{"version":3,"file":"vendors-408d9db8c62f61edc781.js","mappings":"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AG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAIpK,EAAEi1D,WAAW,SAASt+G,EAAE8zD,GAAG,IAAI,I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,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,kEAAkE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,sEAAsEe,IAAI,CAACX,IAAI,EAAEJ,OAAO,CAAC,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,kEAAkE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,kEAAkE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,kEAAkE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,kEAAkE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,iEAAiE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,kEAAkE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,oEAAoE,CAAC,mEAAmE,mEAAmE,CAAC,mEAAmE,oEAAoE,CAA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E,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAIu4B,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,IAAItyC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG8Y,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,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3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACV,OAAUA,GACV,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACV,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACX,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,QAAWA,GAAQA,GAAQ,QAC5B,QAAWA,GACV,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC5B,QAAWA,GACX,QAAWA,GACV,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,QAC3B,QAAWA,GAAQA,GAAQ,OAEpBuxK,EAKP,QAAWvxK,GAAQA,GAAQ,OAEpBwxK,EAIR,MAAUxxK,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACV,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC1B,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,MAAUA,GAAQA,GAAQ,MAC3B,MAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACV,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACT,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC3B,OAAUA,GACV,OAAWA,GACX,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC3B,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,OAAWA,GACX,OAAWA,GACX,OAAWA,GACX,OAAWA,GACX,OAAWA,GACX,OAAWA,GACV,OAAWA,GAAQA,GAAQ,OAC5B,QAAWA,GACX,QAAWA,EAlyBG,EAyyBb,MAAUA,GAAQA,GAAQ,MAC1B,OAAUA,GAAQA,GAAQ,MAzyBvB,EA+yBH,MAAUA,GAAQA,GAAQ,MAC1B,OAAUA,GAAQA,GAAQ,MA/yBvB,EAszBH,MAAUA,GAAQA,GAAQ,MAC1B,OAAUA,GAAQA,GAAQ,MAtzBvB,EA4zBJ,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,MAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,MAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,GACV,OAAUA,EAzsCL,EA+sCJ,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAAQA,GAAQ,OAC1B,OAAUA,GAA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,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAME,EAAG,CAAC,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAA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AAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,I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K,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAA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K,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,KAAK,IAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,EAAI,IAA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IznH,EAAQ,EAAGA,EAAQynH,EAAMt/H,OAAQ6X,IAAcmkpB,EAAqB18hB,EAAOznH,KAAQynH,EAAMznH,GAAS,MAC3G,OAAOynH,CACR,CAOA,SAASt3E,EAAM7uB,GACd,MAAMwjoB,EAAYx7lB,EAAO,MACzB,IAAK,MAAM19C,KAAS8b,EAAQpG,GAAS,CACpC,IAAIvP,EAAQ2woB,EAAe92oB,EAAO,GAClC,MAAMM,EAAW6F,EAAM,GACjBxnB,EAAQwnB,EAAM,GAChBoyoB,EAAqB7ioB,EAAQpV,KAC5Bu3oB,EAAal5pB,GAAQu6pB,EAAU54oB,GAAY24oB,EAAWt6pB,GACjDA,GAA0B,iBAAVA,GAAsBA,EAAM2/B,cAAgBz+B,OAAQq5pB,EAAU54oB,GAAYikC,EAAM5lD,GACpGu6pB,EAAU54oB,GAAY3hB,EAE7B,CACA,OAAOu6pB,CACR,CAoCA,SAASC,EAAazjoB,EAAQ/7B,GAC7B,KAAkB,OAAX+7B,GAAiB,CACvB,MAAMijC,EAAO0W,EAAyB35C,EAAQ/7B,GAC9C,GAAIg/D,EAAM,CACT,GAAIA,EAAKppD,IAAK,OAAOkopB,EAAQ9+lB,EAAKppD,KAClC,GAA0B,mBAAfopD,EAAKh6D,MAAsB,OAAO84pB,EAAQ9+lB,EAAKh6D,MAC3D,CACA+2B,EAASyjC,EAAezjC,EACzB,CAIA,OAHA,WACC,OAAO,IACR,CAED,CASA,MAAM0joB,EAAStqD,EAAO,CACrB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAEKuqD,EAAQvqD,EAAO,CACpB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,eACA,cACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,YACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAEKwqD,EAAaxqD,EAAO,CACzB,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAEKyqD,EAAgBzqD,EAAO,CAC5B,UACA,gBACA,SACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAEK0qD,EAAW1qD,EAAO,CACvB,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,aACA,gBAEK2qD,EAAmB3qD,EAAO,CAC/B,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAEK,EAAOA,EAAO,CAAC,UACfptmB,EAAOotmB,EAAO,CACnB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,UACA,aACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,cACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,QACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,OACA,UACA,cACA,cACA,UACA,gBACA,sBACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,OACA,UAEKl5W,EAAMk5W,EAAO,CAClB,gBACA,aACA,WACA,qBACA,YACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,oBACA,MACA,WACA,YACA,MACA,WACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,YACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,iBACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,QACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,cACA,UACA,UACA,YACA,mBACA,cACA,kBACA,mBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,gBACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,eAEK4qD,EAAS5qD,EAAO,CACrB,SACA,cACA,QACA,WACA,QACA,cACA,cACA,gBACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,gBACA,uBACA,YACA,YACA,aACA,WACA,iBACA,iBACA,YACA,UACA,QACA,UAEKz5hB,GAAMy5hB,EAAO,CAClB,aACA,SACA,cACA,YACA,gBAEK6qD,GAAgBvC,EAAK,yBACrBwC,GAAWxC,EAAK,yBAChByC,GAAczC,EAAK,eACnB0C,GAAY1C,EAAK,gCACjB2C,GAAY3C,EAAK,kBACjB4C,GAAiB5C,EAAK,oGACtB6C,GAAoB7C,EAAK,yBACzB8C,GAAkB9C,EAAK,+DACvB+C,GAAe/C,EAAK,WACpBgD,GAAiBhD,EAAK,4BACtBiD,GAAuBjD,EAAK,YAC5BkD,GAAuBlD,EAAK,WAC5BmD,GAAqBnD,EAAK,+BAC1BoD,GAAmBpD,EAAK,QAexBqD,GAA6B,CAClC,QACA,SACA,MACA,SACA,UACA,WACA,YACA,YAEKC,GAAwB5rD,EAAOgqD,EAAS,CAAC,EAAG2B,KAC5CE,GAAqB,WAC1B,MAAM3gqB,EAAM,CAAC,EAIb,OAHAw9pB,EAAaiD,GAA6B/7pB,IACzC1E,EAAI0E,GAAQ04pB,EAAK,IAAI3spB,OAAO,KAAO/L,EAAO,wBAAyB,QAE7DowmB,EAAO90mB,EACf,CAN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3F,IAAIi6W,GACjBovQ,EAAQlhtB,KAAK63F,IAAIisY,GACjBq9O,EAASnhtB,KAAK63F,IAAIyonB,GAClBc,EAASphtB,KAAK63F,IAAI0onB,GAClBc,EAASrhtB,KAAK63F,IAAI2onB,GAClBc,EAASthtB,KAAK63F,IAAI4onB,GAElBc,EAAQvhtB,KAAK23F,IAAI0qL,GACjBm/b,EAAQxhtB,KAAK23F,IAAI+8a,GACjB+sM,EAAQzhtB,KAAK23F,IAAI42Z,GACjBmzN,EAAQ1htB,KAAK23F,IAAIy9P,GACjBusX,EAAQ3htB,KAAK23F,IAAIo2K,GACjB6zc,GAAQ5htB,KAAK23F,IAAIkxR,GACjBg5V,GAAQ7htB,KAAK23F,IAAImvT,GACjBg7T,GAAQ9htB,KAAK23F,IAAIm6W,GACjBiwQ,GAAQ/htB,KAAK23F,IAAImsY,GACjBk+O,GAAShitB,KAAK23F,IAAI2onB,GAClB2B,GAASjitB,KAAK23F,IAAI4onB,GAClB2B,GAASlitB,KAAK23F,IAAI6onB,GAClB2B,GAASnitB,KAAK23F,IAAI8onB,GAElB2B,IACH,SACC,MAAShioB,EACT,OAASsgoB,EACT,MAASC,EACT,IAAOC,EACP,MAASC,EACT,MAASE,EACT,MAASI,EACT,MAASG,GACX,IAAWr2D,mBACPo3D,IACH,QACC,KAAQjioB,EACR,OAASmhoB,EACT,MAASC,EACT,MAASC,EACT,MAASC,EACT,MAASE,GACT,KAASC,GACT,KAASG,GACT,KAASG,IACX,IAAWl3D,mBACP/xH,IACH,QACC,YAAcrkhB,EACd,OAAUA,EAAIA,EACd,MAAQ6rsB,EACR,MAASC,EACT,MAASC,EACT,MAASC,EACT,MAASC,EACT,MAASC,EACT,MAASC,EACT,MAASC,EACT,MAASC,EACT,MAASC,EACT,KAAQC,EACR,MAASC,EACT,MAASC,GACX,IAAWr2D,mBAEPq3D,IACF,YACW,EAAMztsB,EAAjB,OACA,MAAQ0ssB,EAAQz1c,EAChB,MAAS01c,EAAQrqmB,EACjB,MAASsqmB,EAAQj/O,EACjB,MAASk/O,EAAQhwY,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AAQ3otB,EAAK,GACb4otB,EAAS5otB,EAAK,IACd6otB,EAAS7otB,EAAK,IACd8otB,EAAS9otB,EAAK,IACd+otB,EAAS/otB,EAAK,IACdgptB,EAAShptB,EAAK,IACdiptB,EAASjptB,EAAK,IAEdkptB,EAASnptB,EAAM,GACfoptB,EAASpptB,EAAM,GACfqptB,EAASrptB,EAAM,GACfsptB,EAAStptB,EAAM,GACfuptB,EAASvptB,EAAM,GACfwptB,EAASxptB,EAAM,GACfyptB,EAASzptB,EAAM,GACf0ptB,EAAS1ptB,EAAM,GACf2ptB,EAAS3ptB,EAAM,GACf4ptB,EAAS5ptB,EAAM,GACf6ptB,EAAU7ptB,EAAM,IAChB8ptB,EAAU9ptB,EAAM,IAChB+ptB,EAAU/ptB,EAAM,IAChBgqtB,EAAUhqtB,EAAM,IAChBiqtB,EAAUjqtB,EAAM,IAChBkqtB,EAAUlqtB,EAAM,IAEhBsitB,EACJ6F,EAAQgB,EAASZ,EAAQa,EAAST,EAAQU,EAASN,EAASO,EACxD9G,EACJ4F,EAAQe,EAASX,EAAQY,EAASR,EAAQS,EAASL,EAASM,EACxDnF,EACJkE,EAAQc,EAASV,EAAQW,EAASP,EAASQ,EAASJ,EAASK,EACzD3C,EACJ2B,EAAQa,EAAST,EAAQU,EAASN,EAASO,EAASH,EAASI,EAEzD/G,EACJ4F,EAAQoB,EAAShB,EAAQiB,EAASb,EAAQc,EAASV,EAASW,EACxDjH,EACJ2F,EAAQmB,EAASf,EAAQgB,EAASZ,EAAQa,EAAST,EAASU,EACxDtF,EACJiE,EAAQkB,EAASd,EAAQe,EAASX,EAASY,EAASR,EAASS,EACzD9C,EACJ0B,EAAQiB,EAASb,EAAQc,EAASV,EAASW,EAASP,EAASQ,EAEzDzF,EACJkE,EAAQwB,EAASpB,EAAQqB,EAASjB,EAAQkB,EAAUd,EAASe,EACzD5F,EACJkE,EAAQuB,EAASnB,EAAQoB,EAAShB,EAAQiB,EAAUb,EAASc,EACzDzF,EACJgE,EAAQsB,EAASlB,EAAQmB,EAASf,EAASgB,EAAUZ,EAASa,EAC1DjD,EACJyB,EAAQqB,EAA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K,gBACbhz0B,EACAuu0B,EACA5P,KAEO,OAAQoP,EAAW1jvB,QACtBoovB,aAA4B,OAChCA,EAAmB,IAAI,MAEzBE,EAAe5E,EAAW1jvB,MAC1B2nvB,GACE55vB,MACAq6vB,EACA,QACAE,EAAatovB,WACbrqF,EACAuu0B,EACA5P,GAEFqT,GACE,IACAS,EACA,SACAE,EAAa/jlB,YACb5uP,EACAuu0B,EACA5P,GAEFqT,GACE,IACAS,EACA,QACAE,EAAaj2vB,WACb18E,EACAuu0B,EACA5P,GAEFqT,GACEh1yB,QACAy1yB,EACA,cACAE,EAAaM,iBACbjz0B,EACAuu0B,EACA5P,KAEO,OAAQoP,EAAW18mB,SACtBohnB,aAA4B,OAChCA,EAAmB,IAAI,MAEzBE,EAAe5E,EAAW18mB,OAC1B2gnB,GACE,KACAS,EACA,cACAE,EAAajmwB,iBACb1sE,EACAuu0B,EACA5P,GAEFqT,GACE,IACAS,EACA,YACAE,EAAa7M,eACb9l0B,EACAuu0B,EACA5P,GAEFqT,GACE,IACAS,EACA,WACAE,EAAa5M,cACb/l0B,EACAuu0B,EACA5P,GAEFqT,GACEr4zB,OACA84zB,EACA,SACAE,EAAa/10B,YACboD,EACAuu0B,EACA5P,GAEFqT,GACEr4zB,OACA84zB,EACA,SACAE,EAAa/jlB,YACb5uP,EACAuu0B,EACA5P,KAEO,OAAQoP,EAAWmF,kBACtBT,aAA4B,OAChCA,EAAmB,IAAI,MAEzBE,EAAe5E,EAAWmF,gBAC1BlB,GACE,IACAS,EACA,QACAE,EAAaj2vB,WACb18E,EACAuu0B,EACA5P,GAEFqT,GACE,IACAS,EACA,eACAE,EAAalR,kBACbzh0B,EACAuu0B,EACA5P,GAEFqT,GACEr4zB,OACA84zB,EACA,eACAE,EAAa5Q,kBACb/h0B,EACAuu0B,EACA5P,KAEO,OAAQoP,EAAWoF,eACtBV,aAA4B,OAChCA,EAAmB,IAAI,MAEzBE,EAAe5E,EAAWoF,aAC1BnB,GACE,IACAS,EACA,QACAE,EAAaj2vB,WACb18E,EACAuu0B,EACA5P,GAEFqT,GACEr4zB,OACA84zB,E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Ac/pwB,MACd/mC,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,cACAwY,EAAcpa,YACd12xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,YACAwY,EAAcna,UACd32xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,mBACAwY,EAAcla,iBACd52xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,iBACAwY,EAAcja,eACd72xB,EACAsoyB,EACA5P,GAEFqT,GACE,KACAzT,EACA,kBACAwY,EAAcha,gBACd92xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,QACAwY,EAAcr6vB,MACdz2C,EACAsoyB,EACA5P,GAEFqT,GACE,KACAzT,EACA,WACAwY,EAAcj1S,SACd77f,EACAsoyB,EACA5P,GA1HJ,SACEJ,EACAwP,EACA9nyB,EACAsoyB,EACA5P,IAEK,OAAQoP,IAIbiE,GACEtE,GACAnP,EACA,cACAwP,EACA9nyB,EACAsoyB,EACA5P,EAEJ,CAwGEqY,CACEzY,EACAwY,EAAc/Z,YACd/2xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAuhyB,EACA,eACAwY,EAAc9Z,aACdh3xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA4kzB,EACA,QACAwY,EAAc/00B,MACdikC,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA4kzB,EACA,SACAwY,EAAcp60B,OACdspC,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,kBACAwY,EAAc7Z,gBACdj3xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,yBACAwY,EAAc5Z,uBACdl3xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,6BACAwY,EAAc3Z,2BACdn3xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,iBACAwY,EAAc1Z,eACdp3xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAzT,EACA,2BACAwY,EAAcrmK,yBACdzqoB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA4kzB,EACA,2BACAwY,EAAczZ,yBACdr3xB,EACAsoyB,EACA5P,EAEJ,EAEA,SAAoBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACpD,MAAM0I,EAAUzB,EAAOn9c,IACvB,KAAK,OAAQ4+c,GACX,OAGF,MAAMhxyB,EAAW+pyB,GAAmBiH,EAAQhxyB,UAC5C,IAAIoyV,EAAM5+R,EAAO4+R,KACZ,OAAQA,KACX5+R,EAAO4+R,IAAMA,EAAM,IAAI,KAGzB25c,GACEh1yB,QACAq7V,EACA,OACA4+c,EAAQ930B,KACR8mC,EACAsoyB,EACA5P,GAEFqT,GACE,IACA35c,EACA,aACA4+c,EAAQ5vwB,WACRphC,EACAsoyB,EACA5P,GAEFqT,GACE,KACA35c,EACA,kBACA4+c,EAAQla,gBACR92xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAq7V,EACA,OACA4+c,EAAQv3wB,KACRz5B,EACAsoyB,EACA5P,GAEFiV,GACEv7c,EACA,WACA4+c,EAAQ9T,SACRl9xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAq7V,EACA,UACA4+c,EAAQ9ovB,QACRloD,EACAsoyB,EACA5P,GAEFqT,GACE,IACA35c,EACA,eACA4+c,EAAQxV,aACRx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA0+W,EACA,eACA4+c,EAAQlV,aACR97xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA35c,EACA,UACA4+c,EAAQ7T,QACRn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA35c,EACA,2BACA4+c,EAAQvmK,yBACRzqoB,EACAsoyB,EACA5P,EAEJ,EAEA,SAAyBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACzD,MAAM2I,EAAe1B,EAAOxK,SAC5B,KAAK,OAAQkM,GACX,OAGF,MAAMjxyB,EAAW+pyB,GAAmBkH,EAAajxyB,UACjD,IAAI+kyB,EAAWvxuB,EAAOuxuB,UACjB,OAAQA,KACXvxuB,EAAOuxuB,SAAWA,EAAW,IAAI,MAGnCgH,GACEh1yB,QACAguyB,EACA,OACAkM,EAAa/30B,KACb8mC,EACAsoyB,EACA5P,GAEFuV,GACElJ,EACA,YACAkM,EAAah9Z,UACbykZ,GAEFqT,GACEr4zB,OACAqxzB,EACA,QACAkM,EAAal10B,MACbikC,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAqxzB,EACA,SACAkM,EAAav60B,OACbspC,EACAsoyB,EACA5P,GAEFqT,GACE,KACAhH,EACA,kBACAkM,EAAana,gBACb92xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAqxzB,EACA,iBACAkM,EAAan8L,eACb90mB,EACAsoyB,EACA5P,GAEFqT,GACE,KACAhH,EACA,0BACAkM,EAAa3L,wBACbtlyB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAhH,EACA,aACAkM,EAAa1jL,WACbvtnB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAqxzB,EACA,cACAkM,EAAal8L,YACb/0mB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAguyB,EACA,OACAkM,EAAax3wB,KACbz5B,EACAsoyB,EACA5P,GAEFiV,GACE5I,EACA,WACAkM,EAAa/T,SACbl9xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAguyB,EACA,UACAkM,EAAa/ovB,QACbloD,EACAsoyB,EACA5P,GAEFqT,GACE,IACAhH,EACA,eACAkM,EAAazV,aACbx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAqxzB,EACA,eACAkM,EAAanV,aACb97xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAhH,EACA,UACAkM,EAAa9T,QACbn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAhH,EACA,2BACAkM,EAAaxmK,yBACbzqoB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAhH,EACA,qBACAkM,EAAa5K,mBACbrmyB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAqxzB,EACA,SACAkM,EAAa5tqB,OACbrjI,EACAsoyB,EACA5P,EAEJ,EAEA,SAAyBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACzD,MAAM4I,EAAe3B,EAAOtI,SAC5B,KAAK,OAAQiK,GACX,OAGF,MAAMlxyB,EAAW+pyB,GAAmBmH,EAAalxyB,UACjD,IAAIinyB,EAAWzzuB,EAAOyzuB,UACjB,OAAQA,KACXzzuB,EAAOyzuB,SAAWA,EAAW,IAAI,MAGnC8E,GACEh1yB,QACAkwyB,EACA,OACAiK,EAAah40B,KACb8mC,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAuzzB,EACA,SACAiK,EAAar50B,OACbmoC,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAuzzB,EACA,YACAiK,EAAalpK,UACbhooB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAuzzB,EACA,eACAiK,EAAajpK,aACbjooB,EACAsoyB,EACA5P,GAEFqT,GACE,KACA9E,EACA,kBACAiK,EAAapa,gBACb92xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAkwyB,EACA,OACAiK,EAAaz3wB,KACbz5B,EACAsoyB,EACA5P,GAEFiV,GACE1G,EACA,WACAiK,EAAahU,SACbl9xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAkwyB,EACA,UACAiK,EAAahpvB,QACbloD,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9E,EACA,eACAiK,EAAa1V,aACbx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAuzzB,EACA,eACAiK,EAAapV,aACb97xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAuzzB,EACA,wBACAiK,EAAah7L,sBACbl2mB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAuzzB,EACA,SACAiK,EAAahpK,OACblooB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9E,EACA,UACAiK,EAAa/T,QACbn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9E,EACA,2BACAiK,EAAazmK,yBACbzqoB,EACAsoyB,EACA5P,EAEJ,EAiDA,SAAwBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACxD,MAAM6I,EAAc5B,EAAOhrR,QAC3B,KAAK,OAAQ4sR,GACX,OAGF,MAAMnxyB,EAAW+pyB,GAAmBoH,EAAYnxyB,UAChD,IAAIukhB,EAAU/wd,EAAO+wd,SAChB,OAAQA,KACX/wd,EAAO+wd,QAAUA,EAAU,IAAI,MAGjCwnR,GACEh1yB,QACAwthB,EACA,OACA4sR,EAAYj40B,KACZ8mC,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,gBACA4sR,EAAY3gQ,cACZxwiB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,gBACA4sR,EAAYt8L,cACZ70mB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,SACA4sR,EAAYz60B,OACZspC,EACAsoyB,EACA5P,GAEFqT,GACE,KACAxnR,EACA,kBACA4sR,EAAYra,gBACZ92xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,iBACA4sR,EAAYr8L,eACZ90mB,EACAsoyB,EACA5P,GAEFqT,GACE,KACAxnR,EACA,0BACA4sR,EAAY7L,wBACZtlyB,EACAsoyB,EACA5P,GAEFqT,GACE,KACAxnR,EACA,WACA4sR,EAAYt1S,SACZ77f,EACAsoyB,EACA5P,GAEFqT,GACE,KACAxnR,EACA,aACA4sR,EAAYn8L,WACZh1mB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,cACA4sR,EAAYp8L,YACZ/0mB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAwthB,EACA,OACA4sR,EAAY13wB,KACZz5B,EACAsoyB,EACA5P,GAEFiV,GACEppR,EACA,WACA4sR,EAAYjU,SACZl9xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAwthB,EACA,UACA4sR,EAAYjpvB,QACZloD,EACAsoyB,EACA5P,GAEFqT,GACE,IACAxnR,EACA,eACA4sR,EAAY3V,aACZx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,eACA4sR,EAAYrV,aACZ97xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,wBACA4sR,EAAYj7L,sBACZl2mB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAxnR,EACA,UACA4sR,EAAYhU,QACZn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAxnR,EACA,2BACA4sR,EAAY1mK,yBACZzqoB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAxnR,EACA,qBACA4sR,EAAY9K,mBACZrmyB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA6wiB,EACA,SACA4sR,EAAY9tqB,OACZrjI,EACAsoyB,EACA5P,EAEJ,EAEA,SAA0BlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GAC1D,MAAM8I,EAAgB7B,EAAO11R,UAC7B,KAAK,OAAQu3R,GACX,OAGF,MAAMpxyB,EAAW+pyB,GAAmBqH,EAAcpxyB,UAClD,IAAI65gB,EAAYrmd,EAAOqmd,WAClB,OAAQA,KACXrmd,EAAOqmd,UAAYA,EAAY,IAAI,MAGrCkyR,GACEh1yB,QACA8ihB,EACA,OACAu3R,EAAcl40B,KACd8mC,EACAsoyB,EACA5P,GAEFqT,GACE,IACAlyR,EACA,QACAu3R,EAAcx5J,MACd53oB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAlyR,EACA,aACAu3R,EAAc1yJ,WACd1+oB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,eACAu3R,EAAczyJ,aACd3+oB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,eACAu3R,EAAcxyJ,aACd5+oB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,cACAu3R,EAAcvyJ,YACd7+oB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,cACAu3R,EAActyJ,YACd9+oB,EACAsoyB,EACA5P,GAEFqT,GACE,KACAlyR,EACA,kBACAu3R,EAActa,gBACd92xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACA8ihB,EACA,OACAu3R,EAAc33wB,KACdz5B,EACAsoyB,EACA5P,GAEFiV,GACE9zR,EACA,WACAu3R,EAAclU,SACdl9xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACA8ihB,EACA,UACAu3R,EAAclpvB,QACdloD,EACAsoyB,EACA5P,GAEFqT,GACE,IACAlyR,EACA,eACAu3R,EAAc5V,aACdx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,eACAu3R,EAActV,aACd97xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,kBACAu3R,EAAcryJ,gBACd/+oB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,kBACAu3R,EAAcpyJ,gBACdh/oB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAmmiB,EACA,eACAu3R,EAAcnwJ,aACdjhpB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAlyR,EACA,UACAu3R,EAAcjU,QACdn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAlyR,EACA,2BACAu3R,EAAc3mK,yBACdzqoB,EACAsoyB,EACA5P,EAEJ,EAEA,SAAsBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACtD,MAAM+I,EAAY9B,EAAOn10B,MACzB,KAAK,OAAQi30B,GACX,OAGF,MAAMrxyB,EAAW+pyB,GAAmBsH,EAAUrxyB,UAC9C,IAAI5lC,EAAQo5F,EAAOp5F,OACd,OAAQA,KACXo5F,EAAOp5F,MAAQA,EAAQ,IAAI,MAG7B2x0B,GACEh1yB,QACA38B,EACA,OACAi30B,EAAUn40B,KACV8mC,EACAsoyB,EACA5P,GAEFqT,GACEr20B,OACA0E,EACA,OACAi30B,EAAU340B,KACVsnC,EACAsoyB,EACA5P,GAEFqT,GACEr20B,OACA0E,EACA,OACAi30B,EAAU/3wB,KACVt5B,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,QACAi30B,EAAUp2zB,MACV+kB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAtZ,EACA,QACAi30B,EAAUtqwB,MACV/mC,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACA38B,EACA,iBACAi30B,EAAUC,eACVtxyB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,kBACAi30B,EAAUv+b,gBACV9yW,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,oBACAi30B,EAAUE,kBACVvxyB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,cACAi30B,EAAU3a,YACV12xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,YACAi30B,EAAU1a,UACV32xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,mBACAi30B,EAAUza,iBACV52xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,iBACAi30B,EAAUxa,eACV72xB,EACAsoyB,EACA5P,GAEFqT,GACE,KACA3x0B,EACA,kBACAi30B,EAAUva,gBACV92xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,YACAi30B,EAAUpd,UACVj0xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,eACAi30B,EAAU7V,aACVx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAtZ,EACA,eACAi30B,EAAUvV,aACV97xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,yBACAi30B,EAAUna,uBACVl3xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,6BACAi30B,EAAUla,2BACVn3xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,kBACAi30B,EAAUpa,gBACVj3xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3x0B,EACA,2BACAi30B,EAAU5mK,yBACVzqoB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAtZ,EACA,2BACAi30B,EAAUha,yBACVr3xB,EACAsoyB,EACA5P,EAEJ,EAEA,SAAsBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACtD,MAAMkJ,EAAYjC,EAAOt0wB,MACzB,KAAK,OAAQu2wB,GACX,OAGF,MAAMxxyB,EAAW+pyB,GAAmByH,EAAUxxyB,UAC9C,IAsJInmC,EAAGmK,EAtJHi3D,EAAQu4B,EAAOv4B,OACd,OAAQA,KACXu4B,EAAOv4B,MAAQA,EAAQ,IAAI,MAG7B8wwB,GACEh1yB,QACAkkC,EACA,OACAu2wB,EAAUt40B,KACV8mC,EACAsoyB,EACA5P,GAEFqT,GACE,EACA9wwB,EACA,MACAu2wB,EAAUhkN,KACVxtlB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAunD,EACA,QACAu2wB,EAAUzqwB,MACV/mC,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAunD,EACA,mBACAu2wB,EAAUC,iBACVzxyB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAunD,EACA,eACAu2wB,EAAUE,aACV1xyB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAkkC,EACA,4BACAu2wB,EAAUG,0BACV3xyB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAkkC,EACA,gBACAu2wB,EAAUI,cACV5xyB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAkkC,EACA,kBACAu2wB,EAAUK,gBACV7xyB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9wwB,EACA,UACAu2wB,EAAUrU,QACVn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,KACA9wwB,EACA,kBACAu2wB,EAAU1a,gBACV92xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9wwB,EACA,kBACAu2wB,EAAUM,gBACV9xyB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAunD,EACA,iBACAu2wB,EAAUO,eACV/xyB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9wwB,EACA,QACAu2wB,EAAU/6vB,MACVz2C,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9wwB,EACA,iBACAu2wB,EAAUxG,eACVhryB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAunD,EACA,mBACAu2wB,EAAUQ,iBACVhyyB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA9wwB,EACA,2BACAu2wB,EAAU/mK,yBACVzqoB,EACAsoyB,EACA5P,GAIF,MAAM+V,EAA0B+C,EAAU9C,oBAC1C,IAAI,OAAQD,GACV,GAAIr50B,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C44F,EAAOv1B,WAAW0lwB,YAAY/o0B,GAGhC,MAAMw40B,EAAeD,EAAev40B,GACpC,GAAIxF,MAAMK,QAAQ290B,GAChB,IAAK,IAAIv50B,EAAI,EAAGmK,EAAMov0B,EAAav70B,OAAQgC,EAAImK,IAAOnK,EACpDuw0B,GACEjB,GAAgBiK,EAAav50B,IAC7B25F,EAAOv1B,WACPrjE,EACAw40B,EAAav50B,QACbE,EACAuu0B,EACA5P,QAIJ0R,GACEjB,GAAgBiK,GAChB5/uB,EAAOv1B,WACPrjE,EACAw40B,OACAr50B,EACAuu0B,EACA5P,EAGN,CAEJ,CACF,EA+gFA,SAA0BlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GAC1D,MAAM+K,EAAgB9D,EAAO/gO,UAC7B,KAAK,OAAQ6kO,GACX,OAGF,MAAMrzyB,EAAW+pyB,GAAmBsJ,EAAcrzyB,UAClD,IAAIwukB,EAAYh7gB,EAAOg7gB,WAClB,OAAQA,KACXh7gB,EAAOg7gB,UAAYA,EAAY,IAAI,MAGrCu9N,GACEh1yB,QACAy3kB,EACA,OACA6kO,EAAcn60B,KACd8mC,EACAsoyB,EACA5P,GAEFqT,GACE,IACAv9N,EACA,cACA6kO,EAAc1xb,YACd3hX,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA86lB,EACA,SACA6kO,EAAc380B,OACdspC,EACAsoyB,EACA5P,GAEFqT,GACE,KACAv9N,EACA,kBACA6kO,EAAcvc,gBACd92xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA86lB,EACA,iBACA6kO,EAAcv+L,eACd90mB,EACAsoyB,EACA5P,GAEFqT,GACE,KACAv9N,EACA,0BACA6kO,EAAc/N,wBACdtlyB,EACAsoyB,EACA5P,GAEFqT,GACE,KACAv9N,EACA,WACA6kO,EAAcx3S,SACd77f,EACAsoyB,EACA5P,GAEFqT,GACE,KACAv9N,EACA,aACA6kO,EAAcr+L,WACdh1mB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA86lB,EACA,cACA6kO,EAAct+L,YACd/0mB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAy3kB,EACA,OACA6kO,EAAc55wB,KACdz5B,EACAsoyB,EACA5P,GAEFiV,GACEn/N,EACA,WACA6kO,EAAcnW,SACdl9xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAy3kB,EACA,UACA6kO,EAAcnrvB,QACdloD,EACAsoyB,EACA5P,GAEFqT,GACE,IACAv9N,EACA,eACA6kO,EAAc7X,aACdx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA86lB,EACA,eACA6kO,EAAcvX,aACd97xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAv9N,EACA,UACA6kO,EAAclW,QACdn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAv9N,EACA,2BACA6kO,EAAc5oK,yBACdzqoB,EACAsoyB,EACA5P,GAEFqT,GACE,IACAv9N,EACA,qBACA6kO,EAAchN,mBACdrmyB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA86lB,EACA,SACA6kO,EAAchwqB,OACdrjI,EACAsoyB,EACA5P,EAEJ,EApxFA,SAAyBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACzD,MAAMgL,EAAe/D,EAAO/zzB,UACxB,OAAQ83zB,IACVnH,GACE34uB,EACA,WACA8/uB,OACAv50B,EACAuu0B,EACA5P,EAGN,EA0wFA,SAAwBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACxD,MAAM3J,EAAc4Q,EAAOvQ,QAC3B,KAAK,OAAQL,GACX,OAGF,MAAM3+xB,EAAW+pyB,GAAmBpL,EAAY3+xB,UAChD,IAAIg/xB,EAAUxruB,EAAOwruB,SAChB,OAAQA,KACXxruB,EAAOwruB,QAAUA,EAAU,IAAI,MAGjC+M,GACEh1yB,QACAioyB,EACA,OACAL,EAAYzl0B,KACZ8mC,EACAsoyB,EACA5P,GAEFqT,GACE,EACA/M,EACA,MACAL,EAAY5lvB,IACZ/4C,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACAsrzB,EACA,0BACAL,EAAYT,wBACZl+xB,EACAsoyB,EACA5P,EAEJ,EA/yFA,SAAyBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACzD,MAAMiL,EAAehE,EAAOiE,UACxB,OAAQD,IACVxH,GACE,IACAv4uB,EACA,WACA+/uB,OACAx50B,EACAuu0B,EACA5P,EAGN,EAoyFA,SAAqBlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GACrD,MAAMmL,EAAWlE,EAAOnyF,KACxB,KAAK,OAAQq2F,GACX,OAGF,MAAMzzyB,EAAW+pyB,GAAmB0J,EAASzzyB,UAC7C,IAAIo9sB,EAAO5ppB,EAAO4ppB,MACb,OAAQA,KACX5ppB,EAAO4ppB,KAAOA,EAAO,IAAI,MAG3B2uF,GACEh1yB,QACAqmtB,EACA,OACAq2F,EAASv60B,KACT8mC,EACAsoyB,EACA5P,GAEFuV,GAAqB7wF,EAAM,YAAaq2F,EAASx/Z,UAAWykZ,GAC5DqV,GACE3wF,EACA,iBACAq2F,EAASptC,eACTqyB,GAEFqV,GACE3wF,EACA,iBACAq2F,EAASrtC,eACTsyB,GAEFqT,GACEr4zB,OACA0puB,EACA,cACAq2F,EAAS1+L,YACT/0mB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAqmtB,EACA,OACAq2F,EAASh6wB,KACTz5B,EACAsoyB,EACA5P,GAEFiV,GACEvwF,EACA,WACAq2F,EAASvW,SACTl9xB,EACAsoyB,EACA5P,GAEFqT,GACEh1yB,QACAqmtB,EACA,UACAq2F,EAASvrvB,QACTloD,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3uF,EACA,eACAq2F,EAASjY,aACTx7xB,EACAsoyB,EACA5P,GAEFqT,GACEr4zB,OACA0puB,EACA,eACAq2F,EAAS3X,aACT97xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3uF,EACA,UACAq2F,EAAStW,QACTn9xB,EACAsoyB,EACA5P,GAEFqT,GACE,IACA3uF,EACA,2BACAq2F,EAAShpK,yBACTzqoB,EACAsoyB,EACA5P,EAEJ,EA34FA,SAA4BlluB,EAAQ+7uB,EAAQ7W,EAAkB4P,GAC5D,MAAMoL,EAAkBnE,EAAO9owB,aAC3B,OAAQitwB,IACV3H,GACE,IACAv4uB,EACA,cACAkgvB,OACA350B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ACF68nB,EACA,SACA38nB,GACA,EACAF,GACA,GAGJjF,KAAKo81B,uBAAuBn31B,GAAK,IAAI,IACnC68nB,EACA,SACA38nB,GACA,EACAF,GACA,GAEFjF,KAAKo81B,uBAAuBJ,EAAsB/21B,GAChD,IAAI,IACF68nB,EACA,SACA38nB,GACA,EACAF,GACA,GAGJjF,KAAKq81B,kBAAkBp31B,GAAK,IAAI,IAC9B68nB,EACA,SACA38nB,GACA,EACAF,GACA,GAEFjF,KAAKq81B,kBAAkBL,EAAsB/21B,GAC3C,IAAI,IACF68nB,EACA,SACA38nB,GACA,EACAF,GACA,GAGJjF,KAAKs81B,qBAAqBr31B,GAAK,IAAI,IACjC68nB,EACA,SACA38nB,GACA,EACAF,GACA,GAEFjF,KAAKs81B,qBAAqBN,EAAsB/21B,GAC9C,IAAI,IACF68nB,EACA,SACA38nB,GACA,EACAF,GACA,GAIN,MAAMs31B,EACJ,IAAmBC,+BACfC,EAAqB,IAAIj81B,MAAM+71B,GAC/BG,EAAwB,GAC9B,GAAIzS,EACF,IAAKhl1B,EAAI,EAAGA,EAAIs31B,IAA+Bt31B,EAC7Cy31B,EAAsB931B,KACpB,IAAI,IACFkh0B,EACA7g0B,EACA,MAGJw31B,EAAmBx31B,GAAK,IAAI,IAC1B6g0B,EACA7g0B,QAIJ,IAAKA,EAAI,EAAGA,EAAIs31B,IAA+Bt31B,EAC7Cw31B,EAAmBx31B,GAAK,IAAI,IAC1B6g0B,EACA7g0B,GAKNjF,KAAK281B,oBAAsBF,EAC3Bz81B,KAAK481B,uBAAyBF,EAE9B181B,KAAK681B,cAAgB,IAAI,IAAqB/6N,EAAYgkM,GAE1D9l0B,KAAK881B,SAAW981B,KAAKk81B,gBAAgBpx1B,OACnC9K,KAAKm81B,oBACLn81B,KAAKo81B,uBACLp81B,KAAKq81B,kBACLr81B,KAAKs81B,qBACLt81B,KAAK281B,oBACL381B,KAAK481B,uBACL581B,KAAK681B,eAGP781B,KAAK+81B,eAAiB,IAAI,EAAAzhyB,EAC1Bt7D,KAAKg91B,aAAe,IAAI,EAAA1hyB,EAExBt7D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uwqB,EACA03C,EACArl2B,EACAke,EAEJ,CACF,CACA,OAAOle,CACT,CA0CYom2B,CACNl61B,EACA9C,EACA29C,EACAq2F,EACAuwqB,EACA03C,EACArl2B,EACAke,GAEOhS,aAAoB,IA7KjC,SACEA,EACA9C,EACA29C,EACAq2F,EACAuwqB,EACA03C,EACAj4P,EACAlvlB,GAEAin1B,EAAiC/71B,MAAQA,EACzC+71B,EAAiCp+yB,KAAOA,EAExC,IAAI/mD,EAAQotmB,EACZ,MAAMgsK,EAAYltwB,EAASktwB,UAC3B,IAAK,IAAIjvxB,EAAI,EAAGA,EAAIivxB,EAAUjxxB,OAAQgC,IAAK,CACzC,MAAMmmC,EAAW8ovB,EAAUj+wB,IAAIhR,GAC/B,IACG,IAAamnZ,UACZhhX,EACA600B,EACA3sC,GACA74uB,QACF,CACA,IAAIs3C,EAAO3mG,EAASlnB,MACfknB,EAASwnvB,kBAEV7gpB,EADE3mG,EAASynvB,eACJznvB,EAASy2B,KAET,IAAWghlB,WAChBz3mB,EAASlnB,MACT,IAAW++nB,kBAAkB73mB,EAASy2B,KAAMz2B,EAASlnB,OAAS,EAC9D,IAAI,MAIV,MAAMqmF,EAAMvjF,EAAS8hzB,yBACnB/2rB,EACA02rB,EACAzvyB,EAAOle,KAEL,OAAQyvF,KACVvxE,EAAOle,GAASyvF,EAChBzvF,IAEJ,CACF,CACA,OAAOA,CACT,CA8HYqm2B,CACNn61B,EACA9C,EACA29C,EACAq2F,EACAuwqB,EACA03C,EACArl2B,EACAke,GAGFhS,aAAoB,KACnBA,aAAoB,KACnB,IAAS49yB,WAAW59yB,GAzI1B,SACEA,EACA9C,EACA29C,EACAq2F,EACAuwqB,EACA03C,EACAj4P,EACAlvlB,GAEA,MAAMuxE,EAAMvjF,EAAS8hzB,yBACnB5kzB,EACAukzB,EACAzvyB,EAAOkvlB,IAKT,OAHI,OAAQ39gB,KACVvxE,EAAOkvlB,KAAmB39gB,GAErB29gB,CACT,CAwHYk5P,CACNp61B,EACA9C,EACA29C,EACAq2F,EACAuwqB,EACA03C,EACArl2B,EACAke,G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AA6BC,aAU/Dz08B,KAAK008B,qBAAsB,EAU3B108B,KAAK208B,uBAAwB,EAU7B308B,KAAK408B,kBAAmB,EAaxB508B,KAAK0yoB,qBAAkBvtoB,EAWvBnF,KAAKq3oB,yBAAsBlyoB,EAW3BnF,KAAK608B,qBAAkB1v8B,EAGvBnF,KAAK808B,kBAAoB,EACzB908B,KAAK+08B,cAAgB,EACrB/08B,KAAKg18B,kBAAoB,EACzBh18B,KAAKi18B,uCAAyC,EAC9Cj18B,KAAKk18B,qBAAuB,EAC5Bl18B,KAAKm18B,UAAW,EAChBn18B,KAAKo18B,kBAAmB,EAExBp18B,KAAKq18B,kBAAmB,EACxBr18B,KAAKwpX,OAAS,EACdxpX,KAAKs18B,aAAe,EACpBt18B,KAAKu18B,gBAAkB,EAEvBv18B,KAAKw18B,wBAA0B,EAC/Bx18B,KAAKy18B,cAAgB,EACrBz18B,KAAK018B,cAAgB,EACrB118B,KAAK218B,eAAiB,EACtB318B,KAAK418B,uBAAwB,EAC7B518B,KAAK618B,gBAAkB,EACvB718B,KAAK818B,0BAAuB3w8B,EAC5BnF,KAAK+18B,mCAAgC5w8B,EACrCnF,KAAKg28B,UAAW,EAChBh28B,KAAKi28B,eAAgB,EACrBj28B,KAAKk28B,YAAa,EAClBl28B,KAAKm28B,qBAAsB,EAC3Bn28B,KAAKo28B,qBAAuB,EAC5Bp28B,KAAKq28B,uBAAyB,EAC9Br28B,KAAKs28B,0BAAuBnx8B,EAC5BnF,KAAKu28B,iCAA8Bpx8B,EACnCnF,KAAKw28B,+BAA4Brx8B,EACjCnF,KAAKy28B,YAAc,IAAM3yT,WAAW,CAAExtY,MAAO,IAC7Ct2Q,KAAK028B,qBAAsB,EAE3B128B,KAAK228B,UAAY,EACjB328B,KAAK428B,gBAAkB528B,KACvBA,KAAK628B,gCAAiC,EACtC728B,KAAK828B,oDAAqD,EAC1D928B,KAAK+28B,iCAAmC,EACxC/28B,KAAKg38B,gBAAkB,EACvBh38B,KAAKi38B,sBAAuB,EAE5Bj38B,KAAKk38B,eAAiB,IAAI,IAE1Bl38B,KAAKm38B,gBAAkB,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srb,EAAmBJ,EAAY5zkB,UAEjCo1E,EAAezrI,UAAYs2D,EAAU1B,UAAUE,KAC7C22E,EAAe77D,SAAWtZ,EAAU1B,UAAUG,OAEhD6xkB,EACE7slC,EACAu8gB,EACAo3Z,EACAv1S,EACAgnT,EACA8pK,EACAiB,GAEFtD,EACE7slC,EACAilqB,EACA0uQ,EACAv1S,EACAgnT,EACA8pK,EACAkB,GAEFvD,EACE7slC,EACAglqB,EACA2uQ,EACAv1S,EACAgnT,EACA8pK,EACAmB,GAEFxD,EACE7slC,EACAs8gB,EACAq3Z,EACAv1S,EACAgnT,EACA8pK,EACAoB,KAIFzD,EACE7slC,EACAglqB,EACA2uQ,EACAv1S,EACAgnT,EACA8pK,EACAmB,GAEFxD,EACE7slC,EACAu8gB,EACAo3Z,EACAv1S,EACAgnT,EACA8pK,EACAiB,GAEFtD,EACE7slC,EACAs8gB,EACAq3Z,EACAv1S,EACAgnT,EACA8pK,EACAoB,GAEFzD,EACE7slC,EACAilqB,EACA0uQ,EACAv1S,EACAgnT,EACA8pK,EACAkB,IAGK1+f,EAAe77D,SAAWtZ,EAAU1B,UAAUG,OAEvD6xkB,EACE7slC,EACAilqB,EACA0uQ,EACAv1S,EACAgnT,EACA8pK,EACAkB,GAEFvD,EACE7slC,EACAu8gB,EACAo3Z,EACAv1S,EACAgnT,EACA8pK,EACAiB,GAEFtD,EACE7slC,EACAs8gB,EACAq3Z,EACAv1S,EACAgnT,EACA8pK,EACAoB,GAEFzD,EACE7slC,EACAglqB,EACA2uQ,EACAv1S,EACAgnT,EACA8pK,EACAmB,KAIFxD,EACE7slC,EACAs8gB,EACAq3Z,EACAv1S,EACAgnT,EACA8pK,EACAoB,GAEFzD,EACE7slC,EACAglqB,EACA2uQ,EACAv1S,EACAgnT,EACA8pK,EACAmB,GAEFxD,EACE7slC,EACAilqB,EACA0uQ,EACAv1S,EACAgnT,EACA8pK,EACAkB,GAEFvD,EACE7slC,EACAu8gB,EACAo3Z,EACAv1S,EACAgnT,EACA8pK,EACAiB,IAIJD,EAAY7s4B,QAAQ8r4B,EACtB,CA9RIoB,C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AAiB9kwB,EAAS+kwB,gBAC1B6iN,EAA2B5n9B,EAASm0wB,0BAEpC4yM,EAAiBN,EACvBM,EAAezxtC,QAGf,IAAK,IAAI3B,EAAI,EAAGA,EAAIg0tC,EAAch2tC,SAAUgC,EAAG,CAC7C,MAAMk0tC,EAAeF,EAAch0tC,IAC/B,OAAQk0tC,EAAa73tC,KAAKwn4B,cAC5BuvV,EAAetqe,QAAQkre,EAAch0tC,GAEzC,CAEA,IAAI65oB,EAAOu5kB,EAAepqe,UAE1B,UAAgB9ovB,IAAT25oB,GAAoB,CACzB,MAAMs6kB,EAAat6kB,EAAKgyiB,eAAe16K,GACjCijN,EAAcv6kB,EAAKoyiB,gBAAgB96K,GACnCkjN,EAAax6kB,EAAKkyiB,eAAe56K,GACjCmjN,EAAcz6kB,EAAKsyiB,gBAAgBh7K,GACzC4hN,EACEtlN,EACAv1S,EACAr+E,EACAs6kB,EACAF,EACA,IAAStnc,MACT,EACAymc,EACAh7M,GAEF26M,EACEtlN,EACAv1S,EACAr+E,EACAu6kB,EACAH,EACA,IAASvnc,OACT,EACA0mc,EACAh7M,GAEF26M,EACEtlN,EACAv1S,EACAr+E,EACAw6kB,EACAJ,EACA,IAASxnc,MACT,EACA2mc,EACAh7M,GAEF26M,EACEtlN,EACAv1S,EACAr+E,EACAy6kB,EACAL,EACA,IAASrnc,OACT,EACAwmc,EACAh7M,GAGF,MAAMm8M,EAAkBJ,EAAWhoC,gBAAgBh7K,GAC7CqjN,EAAkBL,EAAWloC,gBAAgB96K,GAC7CsjN,EAAkBJ,EAAWloC,gBAAgBh7K,GAC7CujN,EAAkBL,EAAWpoC,gBAAgB96K,GACnD4hN,EACEtlN,EACAv1S,EACAr+E,EACA06kB,EACAN,EACA,IAASjnc,WACT,EACAomc,EACAh7M,GAEF26M,EACEtlN,EACAv1S,EACAr+E,EACA46kB,EACAR,EACA,IAASlnc,WACT,EACAqmc,EACAh7M,GAEF26M,EACEtlN,EACAv1S,EACAr+E,EACA26kB,EACAP,EACA,IAASnnc,WACT,EACAsmc,EACAh7M,GAEF26M,EACEtlN,EACAv1S,EACAr+E,EACA66kB,EACAT,EACA,IAASpnc,WACT,EACAumc,EACAh7M,GAGFv+X,EAAOu5kB,EAAepqe,SACxB,CACF,EAygBA,MAAMuiC,EAAsB,IAAI,IAC1Bopc,EAA4B,IAAI,IAChCC,EAAmB,IAAI,IACvB9mjB,EAAgB,IAAI,IACpB+mjB,EAA0B,IAAI,IAC9BC,EAAa,IAAI,IACjBC,EAAY,IAAI,IAEtB,SAASC,IACPj6tC,KAAK8B,OAAS,EACd9B,KAAKk6tC,cAAgB,IAAI,GAC3B,CAEA,SAASC,EACPt1pC,EACAogf,EACA9ogB,EACAr5B,EACAy3lB,EACA6/mB,EACAC,EACA3tmB,EACAgpJ,GAEA,IAAI,OAAQn7J,GACV,OAAOA,EAGT,IAAIz4mB,EAEJ,IAAI,OAAQs4tC,KAAoB,OAAQC,GACtCv4tC,EAA6D,IAAnDs4tC,EAAgBt4tC,OAASu4tC,EAAgBv4tC,aAC9C,IAAI,OAAQs4tC,GACjBt4tC,EAASs4tC,EAAgBt4tC,YACpB,IAAI,OAAQu4tC,GACjBv4tC,EAASu4tC,EAAgBv4tC,YACpB,IAAI,OAAQ4qnB,GACjB5qnB,EAAS4qnB,EAAe5qnB,WACnB,CACL,MACM+zgC,EADchx8B,EAAKi6kB,KAAKx9oB,KACSu0gC,mBACvC,IAAI/pZ,EAAgB,EAChBC,EAAgB,GAChB,OAAQ8pZ,KACV/pZ,EAAgB+pZ,EAAmB/pZ,cACnCC,EAAgB8pZ,EAAmB9pZ,eAErCjqnB,EAA2C,IAAjCgqnB,EAAgBC,EAC5B,CAGA,OADAuumB,EAA4Bz1pC,EAAMogf,EAAW9ogB,EAAGr5B,EAAGhhB,EAAQ4zwB,GACpDA,CACT,CAEA,MAAM6kd,EAAqB,CACzBzumB,cAAe,EACfC,cAAe,GAGXi0D,EAAgB,IAAI,IACpBw6iB,EAAkB,IAAIP,EACtBQ,EAAkB,IAAIR,EACtBS,EAAkB,IAAIT,EACtBU,EAAkB,IAAIV,EACtBW,EACkB,oBAAfp4sC,WAA6B,IAAIA,WAAW,SAASrd,EAExD01tC,EAA+B,CACnCthnB,kBAAcp0mB,EACdke,EAAG,EACHC,EAAG,EACH45G,MAAO,EACPo+f,aAAc,EACdC,2BAA4B,GAE9B,SAASs8lB,EAAenlN,EAAcv1S,EAAYr+E,EAAMu+X,GACtD,IAAiB5ia,WACfqkC,EACA4zX,EAAav/T,gBACbu/T,EAAa18C,gBAGf,MAAM2/C,EAAc72X,EAAKx9oB,KACnBujE,EAAO8w8B,EAAY9w8B,KACnB+0iB,EAAYklC,EAAKllC,UAEjB0hB,EAAe6hG,EAAW8hE,qBAC1B1jK,EACJ4hG,EAAW+hE,mCACPs7O,EAAmC,IAAjBl/Y,EAElBr2E,EAAY65F,EAAKvlC,aAAat0D,UAEpC,IAAIyjN,EAAWoyd,EACbj2pC,EACAogf,EACA,EACA,EACApgf,EAAK0ypC,cACL1ypC,EAAKyypC,cACLzypC,EAAKoypC,WACLpypC,EAAKmypC,YACLnypC,EAAK8xpC,UACL9xpC,EAAK6xpC,WACLgE,GAEEK,EAAWD,EACbj2pC,EACAogf,EACA,EACA,EACApgf,EAAKsypC,cACLtypC,EAAKqypC,cACLrypC,EAAK8xpC,UACL9xpC,EAAK6xpC,WACL7xpC,EAAKgypC,WACLhypC,EAAK+xpC,YACL4D,GAEEQ,EAAWF,EACbj2pC,EACAogf,EACA,EACA,EACApgf,EAAKwypC,cACLxypC,EAAKuypC,cACLvypC,EAAKgypC,WACLhypC,EAAK+xpC,YACL/xpC,EAAKkypC,UACLlypC,EAAKiypC,WACL2D,GAEEQ,EAAWH,EACbj2pC,EACAogf,EACA,EACA,EACApgf,EAAK4ypC,cACL5ypC,EAAK2ypC,cACL3ypC,EAAKkypC,UACLlypC,EAAKiypC,WACLjypC,EAAKoypC,WACLpypC,EAAKmypC,YACL2D,GAGFjyd,EAAWyxd,EACTt1pC,EACAogf,EACA,EACA,EACAyjN,EACAqyd,EACAE,EACAD,EACAN,GAEFK,EAAWZ,EACTt1pC,EACAogf,EACA,EACA,EACA81qB,EACAryd,EACAsyd,EACAC,EACAT,GAEFQ,EAAWb,EACTt1pC,EACAogf,EACA,EACA,EACA+1qB,EACAD,EACAE,EACAvyd,EACA+xd,GAEFQ,EAAWd,EACTt1pC,EACAogf,EACA,EACA,EACAg2qB,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6f,EAAOwkd,cAChD,CAEA,SAASY,EACPmC,EACAh4qB,EACA9ogB,EACAr5B,EACAo6sC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA7nd,GAuBA,GApBE8nd,GACEP,EACAh4qB,EACAo4qB,EACAD,GACA,EACAjhrC,EACAr5B,EACA4yvB,IAEF8nd,GACEP,EACAh4qB,EACAs4qB,EACAD,GACA,EACAnhrC,EACAr5B,EACA4yvB,GAGF,OAAOA,EAGT,IAAIvsI,EA4BArnoB,EA1BJ,OAAI27tC,GAAaP,EAAYC,IAKvBh0lB,EAHM,IAANhtlB,EACQ,IAANr5B,EAEYq6sC,EAAW50lB,wBAAwB,GAGnC40lB,EAAW70lB,uBAAuB,GAEnC,IAANxlnB,EAEKq6sC,EAAW30lB,uBAAuB,GAGlC20lB,EAAW90lB,wBAAwB,GAEnDu0lB,EAA0BO,EAAYh0lB,EAAahtlB,EAAGr5B,EAAG4yvB,GAClDA,IAYL5zwB,EAHM,IAANq6C,EACQ,IAANr5B,EAEO46sC,EACPT,EAAgBvG,WAChBuG,EAAgBtG,UAChB,IAAS/kc,KACTqrc,EAAgBrG,YAChBqG,EAAgBpG,WAChB,IAASllc,MACTx1uB,EACAr5B,GAIO46sC,EACPT,EAAgBjG,YAChBiG,EAAgBhG,WAChB,IAASplc,MACTorc,EAAgBvG,WAChBuG,EAAgBtG,UAChB,IAAS/kc,KACTz1uB,EACAr5B,GAGW,IAANA,EAEA46sC,EACPT,EAAgBrG,YAChBqG,EAAgBpG,WAChB,IAASllc,MACTsrc,EAAgBnG,WAChBmG,EAAgBlG,UAChB,IAASrlc,KACTv1uB,EACAr5B,GAIO46sC,EACPT,EAAgBnG,WAChBmG,EAAgBlG,UAChB,IAASrlc,KACTurc,EAAgBjG,YAChBiG,EAAgBhG,WAChB,IAASplc,MACT11uB,EACAr5B,IAIA,OAAQhhB,IACVw4tC,EACE2C,EACAh4qB,EACA9ogB,EACAr5B,EACAhhB,EACA4zwB,GAEKA,QATT,EAcF,CAEA,SAASgod,EACPC,EACAC,EACAzue,EACA0ue,EACAC,EACA1ue,EACAjzsB,EACAr5B,GAEA,MAAMwjb,EAAUy3xB,GACdJ,EACAC,GACA,EACAzue,GAII6ue,EAAUD,GACdF,EACAC,GACA,EACA1ue,GAIF,OAAI,OAAQ9oT,KAAY,OAAQ03xB,GAGD,IAArB13xB,EAAU03xB,IACT,OAAQ13xB,GACVA,EAEF03xB,CACT,CAEA,SAASxC,GACPyB,EACAh4qB,EACA/hf,EACAq9K,EACAkgd,EACAo4hB,EACAD,EACAT,EACAtvc,GAEA,IAAK,IAAI5jxB,EAAI,EAAGA,EAAI4ztC,EAAU51tC,SAAUgC,EACtCw7rB,EAAYw9hB,GACVhB,EACAh4qB,EACA/hf,EACAq9K,EACAkgd,EACAo4hB,EAAU5ztC,GACV2ztC,EAAW3ztC,GACXkztC,EACAtvc,GAGJ,OAAOpoF,CACT,CAEA,SAASw9hB,GACPhB,EACAh4qB,EACA/hf,EACAq9K,EACAkgd,EACAy9hB,EACAC,EACAhG,EACAtvc,GAGA,IAAIrlE,EAAkB06gB,EAAStknB,UAC3Bu+mB,IAAa,IAASvmc,MAAmC,IAA3Bqrc,EAAgBn+kB,KAAKz7nB,GACrDmgsB,EAAkB,IAAUv4pB,MAC1BizqC,EAAStknB,UACTqinB,GAEFz4gB,EAAgBxpG,MAAQ,IAAWt5D,OACnC8iK,EAAgB1pG,MAAQ,IAAWp5D,QAC1By3qB,IAAa,IAASzmc,MAAuB,IAAfwsc,EAAS76sC,IAChDmgsB,EAAkB,IAAUv4pB,MAC1BizqC,EAAStknB,UACTqinB,GAEFz4gB,EAAgBxpG,MAAQ,IAAWt5D,OACnC8iK,EAAgB1pG,MAAQ,IAAWp5D,QAGrC,MAAM07qB,EAAkBa,EAAgBn+kB,KAAKllC,UAE7C,IAAIwknB,EACAC,EAQAx7hC,EACAy7hC,EAEJ,OATI79hB,EAAY,IACdv9nB,EAAS07jB,yBAAyBr+Y,EAAYkgd,EAAY,EAAGu5hB,GAC7DoE,EAAQpE,EAAU32sC,EAClBg7sC,EAAQrE,EAAU12sC,GAMZ60sC,GACN,KAAK,IAASzmc,KACZ7ulB,EAAUs7hC,EAAS91lB,wBACnBi2lB,GAAW,EACX,MACF,KAAK,IAAS3sc,MACZ9ulB,EAAUs7hC,EAAS31lB,uBACnB81lB,GAAW,EACX,MACF,KAAK,IAAS1sc,KACZ/ulB,EAAUs7hC,EAAS51lB,wBACnB+1lB,GAAW,EACX,MACF,KAAK,IAASzsc,MACZhvlB,EAAUs7hC,EAAS71lB,uBACnBg2lB,GAAW,EAIf,MAAM5/M,EAAaw/M,EACb/B,EAAac,EAAgBn+kB,KAC7B+9kB,EAAiBsB,EAASj7pC,SAC1B45pC,EAAiBqB,EAAS1imB,SAC1B8imB,EAAer7pC,EAAS1hD,OAE9B,IAAIolsB,EACA/hF,EACAg4lB,EAAexhmB,kBACjBurF,EAAiB,IAAsBhiF,gCACrCw3lB,EAAgBp5qB,OAElB6hF,EACE,GACC,IAAsBD,gCACrBw3lB,EAAgBrinB,OAEhB6sG,IAGN,IAAK,IAAI3htB,EAAI,EAAGA,EAAI49L,EAAQ5/L,SAAUgC,EAAG,CACvC,MAAM6V,EAAQ+nL,EAAQ59L,GAEhBsyf,EAAKsluB,EAAej+lB,yBACxBk+lB,EACAhitC,EACAk/sC,GAEFkC,EAA4Bx9M,EAAYy9M,EAAY5kuB,EAAIA,GACxD,MAAMp7c,EAAIo7c,EAAGl0e,EACPP,EAAIy0e,EAAGj0e,EACPk7sC,EAAOF,EAAWnirC,EAAIr5B,EAE5B,GAAI07sC,EAAO,GAAOA,EAAO,EAEvB,SAGF,GACEzwtC,KAAK0a,IAAI0zB,EAAIiirC,GAAS,IAAW3lhB,UACjC1qsB,KAAK0a,IAAI3F,EAAIu7sC,GAAS,IAAW5lhB,SAGjC,SAGF,MAAMgmhB,EACJ1wtC,KAAK0a,IAAI0zB,GAAK,IAAWs8pB,UACzB1qsB,KAAK0a,IAAI0zB,EAAI,GAAO,IAAWs8pB,SAC3BimhB,EACJ3wtC,KAAK0a,IAAI3F,GAAK,IAAW21rB,UACzB1qsB,KAAK0a,IAAI3F,EAAI,GAAO,IAAW21rB,SAEjC,GAAIgmhB,GAAeC,EAEjB,SAGF,MAAM93sC,EAAWi2sC,EAAe1ylB,eAC9B2ylB,EACAhitC,EACA++sC,GAEI/3tC,EAAS+6tC,EAAex9lB,aAAay9lB,EAAgBhitC,GAE3D,IAAIkgQ,EACA6h9B,EAAeh+mB,iBACjB7jW,EAAS6h9B,EAAepzlB,oBACtBqzlB,EACAhitC,EACAg/sC,IAGF9+8B,EAAS8+8B,EACT9+8B,EAAO33P,EAAI,EACX23P,EAAO13P,EAAI,GAGb,IAaIismB,EAbAiW,EAAe1inB,EACnB,GAAI+5sC,EAAexhmB,gBAAiB,CAClC,MAAMzG,EAAW,IAAWvsV,KAC1B+z7B,EAAgBp5qB,MAChBo5qB,EAAgBrinB,MAChBj3lB,GAEF0inB,GACG,IAAsBZ,gCAAgChQ,GACrDgyF,GACF/hF,CACJ,CAGI3hkB,EAASy9jB,4BACXpR,EAAwBtqE,EAAUsqE,sBAChC3omB,EACAmspB,IAIJ7vmB,EAASqL,OACPgyK,EACAkgd,EAAY89hB,EACZ33sC,EACA2we,EACAz1f,EACAk5Q,EACAwqX,EACAjW,GAGFs5J,EAAY/8J,cAAgB/9mB,KAAKqV,IAAIylwB,EAAY/8J,cAAehqnB,GAChE+mxB,EAAY98J,cAAgBh+mB,KAAK8R,IAAIgpwB,EAAY98J,cAAejqnB,KAE9D2+rB,CACJ,CAEA,OAAOA,CACT,CAEA,SAASs9hB,GAAuBl8lB,EAAQwY,EAAO1smB,EAAQ2gO,EAAMnyN,EAAGr5B,GAC9D,IAAI67sC,EACAC,EACAC,EAEAlxrC,GACFgxrC,EAAY,EACZC,EAAU/8lB,EAAO5+nB,OACjB47tC,EAAW,IAEXF,EAAY98lB,EAAO5+nB,OAAS,EAC5B27tC,GAAW,EACXC,GAAY,GAGd,IACE,IAAI18J,EAAYw8J,EAChBx8J,IAAcy8J,EACdz8J,GAAa08J,EACb,CACA,MAAM3kmB,EAAO2H,EAAOsgc,GAEpB,IAAKs7J,GADQpjlB,EAAM8nb,GACKjoc,GACtB,SAGF,IAAIr3b,EACJ,OAAQyrE,GACN,KAAK,IAASojhB,KACZ7ulB,EAAUq3b,EAAKmO,wBACf,MACF,KAAK,IAASwpJ,MACZhvlB,EAAUq3b,EAAKoO,uBACf,MACF,KAAK,IAASspJ,KACZ/ulB,EAAUq3b,EAAKqO,wBACf,MACF,KAAK,IAASopJ,MACZ9ulB,EAAUq3b,EAAKsO,uBAInB,MAAM1tnB,EAAQ+nL,EAAQl1J,EAAS,EAAIk1J,EAAQ5/L,OAAS,GACpD,IAAI,OAAQ6X,GACV,OAAOo/mB,EAAKh3jB,SAASm8jB,aAAanF,EAAKuB,SAAU3gnB,EAErD,CAGF,CAEA,SAAS2itC,GAAa3+kB,EAAM5kB,GAC1B,OACE,OAAQA,OACN,OAAQ4kB,EAAKx9oB,KAAKujE,QAAUi6kB,EAAKx9oB,KAAKujE,KAAK6ypC,iBAEjD,CAEA,SAAS8F,GACPP,EACAh4qB,EACA2zqB,EACAC,EACAlrrC,EACAwO,EACAr5B,EACA4yvB,GAEA,IAAIopd,EACAR,EACA74zB,EACAs5zB,EACA51lB,EACJ,MAAMu1Y,EAAam6M,EAAUlrrC,EAAS,EAAIirrC,EAAW31tC,OAAS,GACxDy1tC,EAAaE,EAAWjrrC,EAAS,EAAIirrC,EAAW31tC,OAAS,GAE/D,GAAIw6tC,GAAa/+M,EAAYg6M,KAEjB,IAANv8qC,EACQ,IAANr5B,GAEFg8sC,EAAenxrC,EACX+qrC,EAAWlwlB,uBACXkwlB,EAAWnwlB,wBACf+1lB,EAAW3wrC,EACX83X,EAAa93X,IAGbmxrC,EAAenxrC,EACX+qrC,EAAWnwlB,wBACXmwlB,EAAWpwlB,uBACfg2lB,GAAY3wrC,EACZ83X,GAAa,GAEA,IAAN3iZ,GAETg8sC,EAAenxrC,EACX+qrC,EAAWrwlB,wBACXqwlB,EAAWlwlB,uBACf81lB,GAAY3wrC,EACZ83X,GAAa,IAGbq5zB,EAAenxrC,EACX+qrC,EAAWpwlB,uBACXowlB,EAAWrwlB,wBACfi2lB,EAAW3wrC,EACX83X,GAAc93X,GAGZmxrC,EAAa77tC,OAAS,GAAG,CAE3B87tC,EAAmBpxrC,EAAS,EAAImxrC,EAAa77tC,OAAS,EACtDkmoB,EAAc21lB,EAAaC,GAC3BrG,EAAWx1pC,SAAS07jB,yBAClB85lB,EAAWj9lB,SACX0N,EACA6wlB,GAEF,MAAMgF,EAAW9C,EACfx9M,EACAu+M,EAAgBn+kB,KAChBk7kB,EACAA,GAEF,GAAIgF,EAAS37sC,IAAM84B,GAAK6irC,EAAS17sC,IAAMR,EAGrC,OADA85sC,EAA0BlE,EAAYvvlB,EAAahtlB,EAAGr5B,EAAG4yvB,IAClD,EA+BT,GA3BAqpd,GAAmB,OACjBD,EACAR,EAAWnirC,EAAIr5B,EACf,SAAUqmnB,EAAa81lB,GACrBvG,EAAWx1pC,SAAS07jB,yBAClB85lB,EAAWj9lB,SACX0N,EACA6wlB,GAEF,MAAMgF,EAAW9C,EACfx9M,EACAu+M,EAAgBn+kB,KAChBk7kB,EACAA,GAEF,OAAIv0zB,EACE64zB,EACKU,EAAS37sC,EAAI84B,EAEf6irC,EAAS17sC,EAAIR,EACXw7sC,EACFnirC,EAAI6irC,EAAS37sC,EAEfP,EAAIk8sC,EAAS17sC,CACtB,KAGEy7sC,EAAmB,GA4BrB,OAPAnC,EACElE,EACAoG,EAAaC,GACb5irC,EACAr5B,EACA4yvB,IAEK,EAzBP,GAFAqpd,GAAoBA,EAEhBA,EAAmB,GAAKA,EAAmBD,EAAa77tC,OAc1D,OA5pBV,SACEgijB,EACAy5d,EACAy9M,EACAzD,EACAtrc,EACA3sF,EACAtkpB,EACAr5B,EACAo8sC,EACAxpd,GAEA,MAAMmnd,EAAiBnE,EAAWx1pC,SAC5B45pC,EAAiBpE,EAAWj9lB,SAE5B0jmB,EAAajD,EACjBx9M,EACAy9M,EACAU,EAAej+lB,yBACbk+lB,EACA1vc,EACA4sc,GAEFA,GAEIoF,EAASlD,EACbx9M,EACAy9M,EACAU,EAAej+lB,yBACbk+lB,EACAr8hB,EACAs5hB,GAEFA,GAGF,IAAIh/8B,EAEFA,EADEmk9B,GACO/irC,EAAIgjrC,EAAW97sC,IAAM+7sC,EAAO/7sC,EAAI87sC,EAAW97sC,IAE3CP,EAAIq8sC,EAAW77sC,IAAM87sC,EAAO97sC,EAAI67sC,EAAW77sC,GAGtD,MAAMgjb,EAAUu2xB,EAAex9lB,aAAay9lB,EAAgB1vc,GACtD4wc,EAAUnB,EAAex9lB,aAAay9lB,EAAgBr8hB,GAEtD27hB,EAAkBD,EAAWvinB,UAiBnC,IAAI5+V,EACJ,GAjBAw1gB,EAAoBxrO,UAAY,IAAW38Q,KACzC+z7B,EAAgBpinB,KAChBoinB,EAAgBtinB,KAChB39jB,GAEFq0uB,EAAoB57J,SAAW,IAAWvsV,KACxC+z7B,EAAgBp5qB,MAChBo5qB,EAAgBrinB,MAChBj3lB,GAEF4yvB,EAAO5zwB,OAAS0uxB,EAAoB1uxB,OAAS,IAAWumS,KACtDi+J,EACA03xB,EACAjj9B,GAIE8h9B,EAAeh+mB,iBAAkB,CACnC,MAAMwgnB,EAAiBxC,EAAepzlB,oBACpCqzlB,EACA1vc,EACAuvc,GAEI2C,EAAiBzC,EAAepzlB,oBACpCqzlB,EACAr8hB,EACAs8hB,GAEIwC,EAAU,EAAAjkqC,EAAqBsojB,UACnCy7mB,EAAeh8sC,EACfg8sC,EAAe/7sC,EACfu2sC,GAEI2F,EAAU,EAAAlkqC,EAAqBsojB,UACnC07mB,EAAej8sC,EACfi8sC,EAAeh8sC,EACf05sC,GAEFhi9B,EAAS,IAAWqtB,KAAKk37B,EAASC,EAASzk9B,EAAO8+8B,GAClD,IAAWrinC,UAAUwjK,EAAQA,GAC7B,EAAA1/M,EAAqBgpjB,UAAUtpW,EAAQ06f,EAAOwkd,cAChD,MACEl/8B,EAASiqS,EAAUu+H,kCACjBgtG,EACAqpc,GAEF,EAAAv+pC,EAAqBgpjB,UAAUtpW,EAAQ06f,EAAOwkd,cAElD,CAijBUuF,CACEx6qB,EACAy5d,EACAu+M,EAAgBn+kB,KAChB45kB,EACAoG,EAAaC,EAAmB,GAChCD,EAAaC,GACb5irC,EACAr5B,EACAw7sC,EACA5od,IAEK,CAab,CAGF,OAAO,CACT,CAEA,MAAMiyQ,GAAyB,CAC7B,IAAI,IACJ,IAAI,IACJ,IAAI,IACJ,IAAI,KAmDN,GAAe,8BAAe,I,6CC1qE9B,MASA,EAAephhC,OAAOivmB,OATD,CACnBq3J,OAAQ,EACRorL,SAAU,EACVukF,UAAW,EACX7vQ,SAAU,EACV8vQ,aAAc,EACduB,YAAa,EACb5lF,MAAO,G,sPCwBT,SAASsnS,EAAmB3/tC,GAE1B,IAAMgknB,OAAO3nlB,OAAO,UAAWr8B,GAC/B,IAAMgknB,OAAO3nlB,OAAO,oBAAqBr8B,EAAQ65mB,WAGjD55mB,KAAK45mB,UAAY,IAAU3ujB,MAAMlrD,EAAQ65mB,WACzC55mB,KAAK8rnB,cAAgB/rnB,EAAQ+rnB,eAAiB,EAC9C9rnB,KAAK+rnB,cAAgBhsnB,EAAQgsnB,eAAiB,EAQ9C/rnB,KAAK2/tC,yBAA2B,IAAI,IAQpC3/tC,KAAK4/tC,yBAA2B,IAAI,IASpC5/tC,KAAK6/tC,WAAa,IAAI,IAWtB7/tC,KAAK8/tC,YAAc,IAAI,IASvB9/tC,KAAK+/tC,WAAa,IAAI,IAWtB//tC,KAAKgguC,YAAc,IAAI,IAEvB,MAAM/6qB,EAAYlljB,EAAQkljB,WAAa,IAAUsG,OAiEnD,SAAoB00qB,EAAQrmnB,EAAW30D,GACrCA,EAAUm2D,wBACR,IAAUE,UAAU1B,GACpBqmnB,EAAON,0BAET16qB,EAAUm2D,wBACR,IAAUC,UAAUzB,GACpBqmnB,EAAOL,0BAITpvc,EAAoBxrO,UAAY40D,EAAUI,KAC1Cw2K,EAAoB57J,SAAiD,IAArChb,EAAU52D,MAAQ42D,EAAUG,OAC5Dy2K,EAAoB1uxB,OAAS,EAC7B,MAAMo+tC,EAA2Bj7qB,EAAUm2D,wBACzCo1K,EACA2vc,GAIIN,EAAa,IAAWj/8B,MAC5Bs/8B,EACA,IAAW1wmB,OACX4wmB,GAEF,IAAW5onC,UAAUqonC,EAAYI,EAAOJ,YAGxCrvc,EAAoBxrO,UAAY40D,EAAUE,KAC1C,MAAMumnB,EAA2Bp7qB,EAAUm2D,wBACzCo1K,EACA8vc,GAIIP,EAAa,IAAWn/8B,MAC5B,IAAW4uW,OACX6wmB,EACAj7gB,GAEF,IAAW5tmB,UAAUuonC,EAAYE,EAAOF,YAExC,IAAIQ,EAAa,IAAWjnqC,SAC1B4mqC,EACAG,EACAj7gB,GAGuC,IAArC,IAAWh6F,UAAUm1mB,KACvBA,EAAa,IAAWt1qC,MAAM40qC,EAAYU,IAG5C,MAAMC,EAAiB,IAAWhpnC,UAChC+onC,EACAE,GAIIz9qB,EAAQ42D,EAAU52D,MACxB,IAAI09qB,EAEJ,GAAI19qB,EAAQ,EAAK,CAEfwtO,EAAoBxrO,UAAgD,IAAnC40D,EAAUI,KAAOJ,EAAUE,MAC5D02K,EAAoB57J,SAAW5xE,EAC/B,MAAM29qB,EAAuB17qB,EAAUm2D,wBACrCo1K,EACAowc,EAAWlykC,QAEb,IAAWzjG,MAAMu1qC,EAAgBI,EAAWnwsC,WAC5C,MAAMowsC,EAAY,IAAMnxiB,gBACtBuwiB,EAAON,yBACPM,EAAOJ,WACPiB,GAGF,IAAkB9wiB,SAChB4wiB,EACAC,EACAZ,EAAON,0BAETe,EAAqBz7qB,EAAUsqE,sBAC7BoxmB,EACA71hB,EAEJ,MACE41hB,EAAqBz7qB,EAAUu+H,kCAC7B,IAAUwgF,UAAUpqJ,GACpBkxF,GAGJ,MAAMg1hB,EAAc,IAAWl/8B,MAC7B8/8B,EACAH,EACAx1hB,GAEF,IAAWvzlB,UAAUsonC,EAAaG,EAAOH,aAGzC,MAAM/lnB,EAAQH,EAAUG,MACxB,IAAIgnnB,EAEJ,GAAIhnnB,EAAQ,EAAK,CAEfy2K,EAAoBxrO,UAAgD,IAAnC40D,EAAUI,KAAOJ,EAAUE,MAC5D02K,EAAoB57J,SAAW7a,EAC/B,MAAMinnB,EAAuB/7qB,EAAUm2D,wBACrCo1K,EACAowc,EAAWlykC,QAEb,IAAWi8F,OAAO61+B,EAAgBI,EAAWnwsC,WAC7C,MAAMwwsC,EAAY,IAAMvxiB,gBACtBuwiB,EAAOL,yBACPK,EAAOF,WACPe,GAGF,IAAkB9wiB,SAChB4wiB,EACAK,EACAhB,EAAOL,0BAETmB,EAAqB97qB,EAAUsqE,sBAC7ByxmB,EACAl2hB,EAEJ,MACEi2hB,EAAqB97qB,EAAUu+H,kCAC7B,IAAUugF,UAAUnqJ,GACpBkxF,GAGJ,MAAMk1hB,EAAc,IAAWp/8B,MAC7B2/8B,EACAQ,EACAh2hB,GAEF,IAAWvzlB,UAAUwonC,EAAaC,EAAOD,YAC3C,CA1MEkB,CAAWlhuC,KAAMD,EAAQ65mB,UAAW30D,GAEpCjljB,KAAKm5nB,0BAAuBh0nB,EAC5BnF,KAAKk5nB,qBAAkB/znB,GAEnBpF,EAAQw98B,wBAA0B,IACpCv98B,KAAKu98B,uBAAuBt4Z,EAEhC,CAEA1+iB,OAAOgwE,iBAAiBmppC,EAAmBj/tC,UAAW,CASpD0xqB,eAAgB,CACdl8pB,IAAK,WACH,OAAOjW,KAAKm5nB,oBACd,GAUFpH,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,KAIJwmmB,EAAmBj/tC,UAAU888B,uBAAyB,SAAUt4Z,GAE9DjljB,KAAKm5nB,qBAAuB,IAAoB5Q,cAC9CvonB,KAAK45mB,UACL55mB,KAAK8rnB,cACL9rnB,KAAK+rnB,cACL9mE,GAGFjljB,KAAKk5nB,gBAAkB,IAAehM,wBACpCltnB,KAAKm5nB,qBAET,EAEA,MAAMisF,EAAoB,IAAI,IACxBta,EAAqB,IAAI,IACzBC,EAAqB,IAAI,IACzBq1hB,EAAoB,IAAI,IACxBK,EAAwB,IAAI,IAC5BN,EAAyB,IAAI,IAC7BG,EAAyB,IAAI,IAC7B9vc,EAAsB,IAAI,IAC1Bswc,EAAe,IAAI,IAAM,IAAWxxmB,OAAQ,GAC5CsxmB,EAAa,IAAI,IA8IjBO,EAAyB,IAAI,IAC7BC,EAAyB,IAAI,IAC7BC,EAAgB,IAAI,IAAW,GAAM,EAAK,GAC1CC,EAAgB,IAAI,IAAW,EAAK,GAAM,GAC1CC,EAAgB,IAAI,IA4G1B7B,EAAmBj/tC,UAAUoluB,iBAAmB,SAAU1I,GAExD,IAAMz+c,QAAQ,aAAcy+c,GAG5B,MAAMqkgB,EA/GR,SAAgCvB,EAAQ9igB,GACtC,MAAM7zV,EAAS6zV,EAAW7zV,OACpBm41B,EAA0Bn41B,EAAOumd,WACjC6xY,EAA6Bp41B,EAAOijZ,qBAE1C,IAuEIi8P,EACA18Z,EACAC,EAzEA/ylB,EAAS,EACb,IAAK,IAAUtQ,SAASu3sC,EAAOrmnB,UAAW8nnB,GAA6B,CACrE,IAAI/B,EAA2BM,EAAON,yBAClCC,EAA2BK,EAAOL,yBAClCC,EAAaI,EAAOJ,WACpBC,EAAcG,EAAOH,YACrBC,EAAaE,EAAOF,WACpBC,EAAcC,EAAOD,YAErB7igB,EAAWxunB,OAAS,IAAU25qB,UAChCq3c,EAA2BxigB,EAAWpnB,cAAcziW,QAClD,IAAUgoQ,UAAU2knB,EAAOrmnB,WAC3BunnB,GAEFxB,EAAyB98sC,EAAI88sC,EAAyBr8sC,EACtDq8sC,EAAyBr8sC,EAAIq8sC,EAAyBt8sC,EACtDs8sC,EAAyBt8sC,EAAI,EAC7Bu8sC,EAA2BzigB,EAAWpnB,cAAcziW,QAClD,IAAU+nQ,UAAU4knB,EAAOrmnB,WAC3BwnnB,GAEFxB,EAAyB/8sC,EAAI+8sC,EAAyBt8sC,EACtDs8sC,EAAyBt8sC,EAAIs8sC,EAAyBv8sC,EACtDu8sC,EAAyBv8sC,EAAI,EAC7Bw8sC,EAAawB,EACbtB,EAAa,IAAWrsmB,OACxBosmB,EAAcwB,EACdtB,EAAc,IAAWxwmB,QAG3B,MAAMmymB,EAA4B,IAAWroqC,SAC3CmoqC,EACA9B,EACA4B,GAEIK,EAAsB,IAAWvy6B,IACrCsy6B,EACA9B,GAEIgC,EAAuB,IAAWxy6B,IACtCsy6B,EACA7B,GAGIgC,EAA4B,IAAWxoqC,SAC3CmoqC,EACA7B,EACA2B,GAEIQ,EAAsB,IAAW1y6B,IACrCyy6B,EACA/B,GAEIiC,EAAuB,IAAW3y6B,IACtCyy6B,EACA9B,GAGE4B,EAAsB,EACxB5osC,GAAU4osC,EAAsBA,EACvBG,EAAsB,IAC/B/osC,GAAU+osC,EAAsBA,GAG9BF,EAAuB,EACzB7osC,GAAU6osC,EAAuBA,EACxBG,EAAuB,IAChChpsC,GAAUgpsC,EAAuBA,EAErC,CAeA,GAVI7kgB,EAAWxunB,OAAS,IAAU25qB,SAChCkgQ,EAAek5M,EAA2B5/tC,OAC1CgqnB,EAAgBm0mB,EAAOn0mB,cACvBC,EAAgBk0mB,EAAOl0mB,gBAEvBy8Z,EAAei5M,EAAwBp+sC,EACvCyomB,EAAgB,EAChBC,EAAgB,GAGdy8Z,EAAez8Z,EAAe,CAChC,MAAMk2mB,EAAmBz5M,EAAez8Z,EACxC/ylB,GAAUipsC,EAAmBA,CAC/B,MAAO,GAAIz5M,EAAe18Z,EAAe,CACvC,MAAMo2mB,EAAsBp2mB,EAAgB08Z,EAC5Cxv/B,GAAUkpsC,EAAsBA,CAClC,CAEA,OAAOn0tC,KAAKyV,KAAKwV,EACnB,CAauBmpsC,CAAuBniuC,KAAMm9tB,GAClD,GACEA,EAAWxunB,OAAS,IAAU25qB,UAC9B,OAAQtoxB,KAAKm5nB,sBACb,CACA,MAAMipmB,EAAYr0tC,KAAKyV,KACrBxjB,KAAKm5nB,qBAAqB5K,kBAAkB4uG,EAAW7zV,OAAOumd,aAEhE,OAAO9h1B,KAAK8R,IAAI2htC,EAAcY,EAChC,CACA,OAAOZ,CACT,EAWA9B,EAAmBj/tC,UAAU2mnB,eAAiB,SAAUC,GAItD,OAFA,IAAM3oW,QAAQ,QAAS2oW,GAEhBrnnB,KAAKm5nB,qBAAqB/R,eAAeC,EAClD,EAUAq4mB,EAAmBj/tC,UAAUq+8B,kBAAoB,SAAUj93B,GAEzD,IAAM68L,QAAQ,QAAS78L,GAGvB,MAAM68mB,EAAc,IAAI,IAAQzzoB,MAAM,IAAQ6lmB,UACxCqC,EAAW,IAAI,IAAyB,CAC5Cv5C,UAAW55mB,KAAK45mB,UAChB93mB,OAAQ9B,KAAK8rnB,cACbo0B,eAAgBlgpB,KAAK+rnB,gBAEjB9qnB,EAAW,IAAI,IAAiB,CACpCkypB,SAAUA,EACV1qpB,GAAI,UACJi2rB,YAAaA,EACbn5rB,WAAY,CACVs8E,MAAO,IAA+B2ziB,UAAU3ziB,MAIpD,OAAO,IAAI,IAAU,CACnBkiwB,kBAAmB9i1B,EACnByi1B,WAAY,IAAI,IAA2B,CACzCG,aAAa,EACb1jpB,MAAM,IAER6jpB,cAAc,GAElB,EACA,QAAe,8BAAkB,I,iOCxdjC,IAAI41Y,EAA4B,IAAI,IAkBpC,SAASyI,EAAmBtiuC,GAE1B,IAAMgknB,OAAO3nlB,OAAO,UAAWr8B,GAC/B,IAAMgknB,OAAO96mB,OAAO,gBAAiBlJ,EAAQ21H,OAG7C,MAAMqi9B,EAAS,IAAO1jU,UAAUt0wB,EAAQ21H,OAClCo2f,EAAgB/rnB,EAAQ+rnB,eAAiB,EACzCC,EAAgBhsnB,EAAQgsnB,eAAiB,EACzC9mE,EAAYlljB,EAAQkljB,WAAa,IAAUsG,MAEjDvrjB,KAAK+3kC,OAASA,EACd/3kC,KAAK8rnB,cAAgBA,EACrB9rnB,KAAK+rnB,cAAgBA,EACrB/rnB,KAAKiljB,UAAYA,EAEjB,MAAMq9qB,EAmFR,SACEvqJ,EACAjsd,EACAC,EACA9mE,GAEA,MAAMusH,EAAS,IAAIhxqB,MAAM,GACnB+huC,EAAcxqJ,EAAO/iU,YAMrBwtd,EAAsBv9qB,EAAUsqE,sBACpCgzmB,EACAE,GAEIC,EAAkBz9qB,EAAUyqE,wBAChC6ymB,EACAI,GAEFD,EAAgB5guC,OAASiqnB,EACzB,MAAM/pnB,EAAMijjB,EAAUm2D,wBAAwBsnnB,EAAiBE,GACzDC,EAAW,IAAMnziB,gBAAgB1trB,EAAKwguC,GAC5ChxjB,EAAO,GAAKqxjB,EAOZ,IACI59tC,EADA69tC,EAAc,EAElB,MAAMrnmB,EAAW,GACjB,IAAIi6I,EAAQ97D,EACZ,IAAK30sB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtBywwB,EAASqiU,EAAOtiU,UAAUxwwB,GAC1Bw2nB,EAASx2nB,GAAKywwB,EACd97D,EAAqB30J,EAAUyqE,wBAC7BgmJ,EACAqtd,GAEFnphB,EAAmB93sB,OAASgqnB,EAC5B,MAAM/1lB,EAAW,IAAM4rrB,iBACrBkhhB,EACA59qB,EAAUm2D,wBAAwBw+F,EAAoBophB,IAEpDjtsC,EAAW+ssC,IACbA,EAAc/ssC,EAElB,CACA,MAAMktsC,EAAc,IAAMh4qC,MAAM43qC,GAehC,IAbAI,EAAYjo9B,OAAS,IAAWrwB,OAC9Bs4+B,EAAYjo9B,OACZio9B,EAAYjo9B,QAEdio9B,EAAYltsC,UAAmC,EAAxBktsC,EAAYltsC,SAAgB+ssC,EACnDtxjB,EAAO,GAAKyxjB,EAQPh+tC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtBywwB,EAASj6I,EAASx2nB,GAClB,MAAMi+tC,EAAiBznmB,GAAUx2nB,EAAI,GAAK,GACpCw5qB,EAAiBx5H,EAAUsqE,sBAC/BmmJ,EACAytd,GAEI/tsC,EAAO,IAAWkkC,SAAS4pqC,EAAgBxtd,EAAQ0td,GACzD,IAAIC,EAAa,IAAWzi9B,MAAMxrP,EAAMqppB,EAAgB6kjB,GACxDD,EAAa,IAAW7rnC,UAAU6rnC,EAAYA,GAC9C7xjB,EAAO,EAAIvsqB,GAAK,IAAMyqrB,gBAAgBgmF,EAAQ2td,EAChD,CAEA,OAAO7xjB,CACT,CAnKyB+xjB,CACrBxrJ,EACAjsd,EACAC,EACA9mE,GAEFjljB,KAAKwjuC,gBAAkBlB,EAGvB,MAAM7mmB,EA6NR,SAAyB6mmB,GACvB,MAAM7mmB,EAAW,IAAIj7nB,MAAM,GAC3B,IAAK,IAAIyE,EAAI,EAAGA,EAAI,EAAGA,IAErBw2nB,EAASx2nB,GAAKw+tC,EACZnB,EAAe,GACfA,EAAe,GAAMr9tC,EAAI,GAAK,GAC9Bq9tC,EAAe,EAAKr9tC,EAAI,IAG1Bw2nB,EAASx2nB,EAAI,GAAKw+tC,EAChBnB,EAAe,GACfA,EAAe,GAAMr9tC,EAAI,GAAK,GAC9Bq9tC,EAAe,EAAKr9tC,EAAI,IAG5B,OAAOw2nB,CACT,CA9OmBmpF,CAAgB09gB,GAUjC,IAAIr9tC,EAIJ,IAbAjF,KAAKopxB,UAAY3tJ,EAGjBz7nB,KAAK0juC,aAAe,IAAIljuC,MAAM,GAE9BR,KAAK0juC,aAAa,GAAKC,EACrBrB,EAAe,GACf7mmB,EAAShynB,MAAM,EAAG,IAMfxE,EAAI,EAAGA,EAAI,EAAGA,IACjBjF,KAAK0juC,aAAa,GAAGz+tC,GAAK,IAAW0lP,OACnC3qP,KAAK0juC,aAAa,GAAGz+tC,GACrBjF,KAAK0juC,aAAa,GAAGz+tC,IAQzB,IAJAjF,KAAK0juC,aAAa,GAAKC,EACrBrB,EAAe,GACf7mmB,EAAShynB,MAAM,EAAG,IAEfxE,EAAI,EAAGA,EAAI,EAAGA,IAEjBjF,KAAK0juC,aAAa,EAAIz+tC,GAAK0+tC,EAAmBrB,EAAe,EAAIr9tC,GAAI,CACnEw2nB,EAASx2nB,EAAI,GACbw2nB,GAAUx2nB,EAAI,GAAK,GACnBw2nB,EAAS,GAAMx2nB,EAAI,GAAK,GACxBw2nB,EAAS,EAAIx2nB,KAQjB,IAJAjF,KAAK4juC,eAAiB,CACpB5juC,KAAKopxB,UAAU3/wB,MAAM,EAAG,GACxBzJ,KAAKopxB,UAAU3/wB,MAAM,EAAG,IAErBxE,EAAI,EAAGA,EAAI,EAAGA,IACjBjF,KAAK4juC,eAAeh/tC,KAAK,CACvB5E,KAAKopxB,UAAUnkxB,EAAI,GACnBjF,KAAKopxB,WAAWnkxB,EAAI,GAAK,GACzBjF,KAAKopxB,UAAU,GAAMnkxB,EAAI,GAAK,GAC9BjF,KAAKopxB,UAAU,EAAInkxB,KAIvB,MAAMymB,EAASqsjC,EAAO/iU,YACtB4kd,EAA4B30qB,EAAUyqE,wBACpChkmB,EACAkusC,GAEFA,EAA0B93tC,QAAUiqnB,EAAgBD,GAAiB,EACrE9rnB,KAAK0rB,OAASu5hB,EAAUm2D,wBACtBw+mB,EACAlusC,GAGF1rB,KAAKk5nB,gBAAkB,IAAetS,WAAW6U,EACnD,CAEA,MAAMgnmB,EAA8B,IAAI,IAClCE,EAAyB,IAAI,IAC7BC,EAAa,IAAI,IACjBG,EAA4B,IAAI,IAChCC,EAAgB,IAAI,IACpBG,EAA8B,IAAI,IAClCG,EAAoB,IAAI,IACxBF,EAAc,IAAI,IAuFxB,IAAIS,EAAY,IAAI,IAChBC,EAAY,IAAI,IAChBC,EAAY,IAAI,IAChBC,EAAY,IAAI,IAChBC,EAAY,IAAI,IAChBC,EAAY,IAAI,IACpB,MAAMC,EAAY,IAAI,IAChBC,EAAY,IAAI,IAChBC,EAAY,IAAI,IACtB,IAAIC,EAAY,IAAI,IAChBC,EAAY,IAAI,IAChBC,EAAY,IAAI,IAChBrrgB,EAAW,IAAI,IACnB,MAAMsrgB,EAAgB,IAAI,IAK1B,SAAShB,EAAoBlj9B,EAAIvC,EAAIoiP,GACnCyjuB,EAAYtj9B,EAAGvF,OACf8o9B,EAAY9l9B,EAAGhD,OACf+o9B,EAAY3juB,EAAGplP,OAEfgp9B,EAAY,IAAW18mB,iBAAiB/mW,EAAGvF,QAASuF,EAAGxqP,SAAUiusC,GACjEC,EAAY,IAAW38mB,iBAAiBtpW,EAAGhD,QAASgD,EAAGjoP,SAAUkusC,GACjEC,EAAY,IAAW58mB,iBAAiBlnH,EAAGplP,QAASolP,EAAGrqe,SAAUmusC,GAEjEI,EAAY,IAAWh9mB,iBACrB,IAAW1mW,MAAMkj9B,EAAWC,EAAWI,GACvC,IAAW906B,IAAI206B,EAAWH,GAC1BS,GAEFC,EAAY,IAAWj9mB,iBACrB,IAAW1mW,MAAMmj9B,EAAWF,EAAWO,GACvC,IAAW/06B,IAAI406B,EAAWH,GAC1BS,GAEFC,EAAY,IAAWl9mB,iBACrB,IAAW1mW,MAAMij9B,EAAWC,EAAWO,GACvC,IAAWh16B,IAAI606B,EAAWH,GAC1BS,GAGFC,EAAc,GAAKZ,EAAUxgtC,EAC7BohtC,EAAc,GAAKX,EAAUzgtC,EAC7BohtC,EAAc,GAAKV,EAAU1gtC,EAC7BohtC,EAAc,GAAKZ,EAAUvgtC,EAC7BmhtC,EAAc,GAAKX,EAAUxgtC,EAC7BmhtC,EAAc,GAAKV,EAAUzgtC,EAC7BmhtC,EAAc,GAAKZ,EAAUhhtC,EAC7B4htC,EAAc,GAAKX,EAAUjhtC,EAC7B4htC,EAAc,GAAKV,EAAUlhtC,EAC7B,MAAMorS,EAAc,IAAQA,YAAYw26B,GAGxC,OAFAtrgB,EAAW,IAAWjgsB,IAAIorsC,EAAWC,EAAWprgB,GAChDA,EAAW,IAAWjgsB,IAAIigsB,EAAUqrgB,EAAWrrgB,GACxC,IAAI,IACTA,EAAS91sB,EAAI4qS,EACbkra,EAAS71sB,EAAI2qS,EACbkra,EAASt2sB,EAAIorS,EAEjB,CAwBA,IAAIy26B,EAAc,IAAI,IAClBC,EAAoB,IAAI,IAK5B,SAAShB,EAAmBt8mB,EAAOoU,GACjC,MAAMmpmB,EAAc,GACpB,IAAK,IAAI3/tC,EAAI,EAAGA,EAAI,EAAGA,IACrBy/tC,EAAc,IAAWprqC,SACvBmikB,GAAUx2nB,EAAI,GAAK,GACnBw2nB,EAASx2nB,GACTy/tC,GAEFC,EAAoB,IAAW/j9B,MAC7BymW,EAAMrsW,OACN0p9B,EACAC,GAEFA,EAAoB,IAAWntnC,UAC7BmtnC,EACAA,GAEFC,EAAY3/tC,GAAK,IAAWgmD,MAAM05qC,GAEpC,OAAOC,CACT,CAEAr+tC,OAAOgwE,iBAAiB8rpC,EAAmB5huC,UAAW,CASpD0xqB,eAAgB,CACdl8pB,IAAK,WACH,OAAOjW,IACT,GAUF+xnB,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,KAIJ,MAAM2rmB,EAAmB,IAAI,IAiC7BxC,EAAmB5huC,UAAUoluB,iBAAmB,SAAU1I,GAExD,IAAMz+c,QAAQ,aAAcy+c,GAG5B,MAAM95mB,EAAQ85mB,EAAW7zV,OAAOumd,WAE1Bi1Y,EAAuB,GACvBrpmB,EAAW,GACjB,IAAImpmB,EAYA3/tC,EACA8/tC,EAmBAC,EACAC,EAnBJ,IAZI,IAAMtjhB,iBAAiB3htB,KAAKwjuC,gBAAgB,GAAIngnC,GAAS,GAC3DyhnC,EAAqBlguC,KAAK,GAC1B62nB,EAAS72nB,KAAK5E,KAAK4juC,eAAe,IAClCgB,EAAc5kuC,KAAK0juC,aAAa,IACvB,IAAM/hhB,iBAAiB3htB,KAAKwjuC,gBAAgB,GAAIngnC,GAAS,IAClEyhnC,EAAqBlguC,KAAK,GAC1B62nB,EAAS72nB,KAAK5E,KAAK4juC,eAAe,IAClCgB,EAAc5kuC,KAAK0juC,aAAa,IAK7Bz+tC,EAAI,EAAGA,EAAI,EAAGA,IACjB8/tC,EAAiB,EAAI9/tC,EAEnB,IAAM08sB,iBAAiB3htB,KAAKwjuC,gBAAgBuB,GAAiB1hnC,GAAS,IAEtEyhnC,EAAqBlguC,KAAKmguC,GAE1BtpmB,EAAS72nB,KAAK5E,KAAK4juC,eAAemB,IAClCH,EAAc5kuC,KAAK0juC,aAAaqB,IAKpC,GAAoC,IAAhCD,EAAqB7huC,OACvB,OAAO,EAMT,GAAoC,IAAhC6huC,EAAqB7huC,OAUvB,OARAgiuC,EAAgBjluC,KAAKwjuC,gBAAgBsB,EAAqB,IAC1DE,EAAYE,EACV,IAAMr1iB,sBAAsBo1iB,EAAe5hnC,EAAOwhnC,GAClDppmB,EAAS,GACTwpmB,EACAL,GAGK,IAAW7usC,SAASivsC,EAAW3hnC,GACjC,GAAoC,IAAhCyhnC,EAAqB7huC,OAAc,CAI5C,GAAgC,IAA5B6huC,EAAqB,GAAU,CACjC,MAAMx29B,EAAO,CACXtuQ,KAAKopxB,UACH,EAAI07c,EAAqB,IAAMA,EAAqB,GAAK,IAE3D9kuC,KAAKopxB,UACH,EAAI07c,EAAqB,IAAOA,EAAqB,GAAK,EAAI,GAAK,IAIvE,OADAE,EAAYG,EAAwB9hnC,EAAOirJ,EAAK,GAAIA,EAAK,IAClD,IAAWv4O,SAASivsC,EAAW3hnC,EACxC,CACA,IACIttF,EADAqvsC,EAAkBtmtC,OAAO26M,UAE7B,IAAKx0N,EAAI,EAAGA,EAAI,EAAGA,IACjBgguC,EAAgBjluC,KAAKwjuC,gBAAgBsB,EAAqB7/tC,IAC1D+/tC,EAAYE,EACV,IAAMr1iB,sBAAsBo1iB,EAAe5hnC,EAAOwhnC,GAClDppmB,EAASx2nB,GACTgguC,EACAjluC,KAAK0juC,aAAaoB,EAAqB7/tC,KAGzC8wB,EAAW,IAAW+8lB,gBAAgBkymB,EAAW3hnC,GAC7CttF,EAAWqvsC,IACbA,EAAkBrvsC,GAGtB,OAAOhoB,KAAKyV,KAAK4htC,EACnB,CAAO,GAAIN,EAAqB7huC,OAAS,EAYvC,OAVA+huC,EAAYE,EACV,IAAMr1iB,sBACJ7vrB,KAAKwjuC,gBAAgB,GACrBngnC,EACAwhnC,GAEF7kuC,KAAK4juC,eAAe,GACpB5juC,KAAKwjuC,gBAAgB,GACrBxjuC,KAAK0juC,aAAa,IAEb,IAAW3tsC,SAASivsC,EAAW3hnC,GAIxC,MAAMhxD,EACwB,IAA5ByyqC,EAAqB,IAAwC,IAA5BA,EAAqB,GAAW,EAAI,EAGvE,OAAgC,IAA5BA,EAAqB,GAChB,IAAW/usC,SAChBstF,EACArjH,KAAKopxB,WAAW07c,EAAqB,GAAK,EAAIzyqC,GAAQ,IAKnD,IAAWt8B,SAChBstF,EACArjH,KAAKopxB,UAAU,GAAM07c,EAAqB,GAAK,EAAIzyqC,GAAQ,GAE/D,EAEA,MAAM0mqB,EAAW,IAAI,IACfssgB,EAAa,IAAI,IAKvB,SAASF,EAAwBvprC,EAAGkyN,EAAI6B,GACtC,MAAM/sP,EAAI,IAAW02C,SAASq2M,EAAI7B,EAAIird,GAChCusgB,EAAM,IAAWhsqC,SAAS1d,EAAGkyN,EAAIu39B,GACvC,IAAIpvqC,EAAI,IAAWo5P,IAAIzsS,EAAG0itC,GAE1B,GAAIrvqC,GAAK,EACP,OAAO63M,EAGT,MAAMy39B,EAAO,IAAWl26B,IAAIzsS,EAAGA,GAC/B,OAAIqzC,GAAKsvqC,EACA519B,GAGT15M,GAAQsvqC,EACD,IAAI,KACR,EAAItvqC,GAAK63M,EAAGzqP,EAAI4yC,EAAI05M,EAAGtsP,GACvB,EAAI4yC,GAAK63M,EAAGxqP,EAAI2yC,EAAI05M,EAAGrsP,GACvB,EAAI2yC,GAAK63M,EAAGjrP,EAAIozC,EAAI05M,EAAG9sP,GAE5B,CAEA,MAAM2itC,EAAmB,IAAI,IAAM,IAAWl2mB,OAAQ,GAMtD,SAAS41mB,EAAoBtprC,EAAG6/kB,EAAUpU,EAAOu9mB,GAC/C,IACI7usC,EACA0vsC,EACAC,EAHA94e,EAAc9tuB,OAAO26M,UAKzB,IAAK,IAAIx0N,EAAI,EAAGA,EAAIw2nB,EAASx4nB,OAAQgC,IAAK,CACxC,MAAM0guC,EAAY,IAAMj2iB,gBACtBj0D,EAASx2nB,GACT2/tC,EAAY3/tC,GACZuguC,GAEwB,IAAM7jhB,iBAAiBgkhB,EAAW/prC,GAIpC,IAIxB8prC,EAAqBP,EACnBvprC,EACA6/kB,EAASx2nB,GACTw2nB,GAAUx2nB,EAAI,GAAK,IAGrB8wB,EAAW,IAAWA,SAAS6lB,EAAG8prC,GAC9B3vsC,EAAW62tB,IACbA,EAAc72tB,EACd0vsC,EAAeC,GAEnB,CAEA,OAAK,OAAQD,GAGNA,EAFE7prC,CAGX,CAWAymrC,EAAmB5huC,UAAU2mnB,eAAiB,SAAUC,GAEtD,IAAM3oW,QAAQ,QAAS2oW,GAGvB,IAAIu+mB,EAAY,EACZC,EAAW,EACf,IAAK,IAAI5guC,EAAI,EAAGA,EAAIjF,KAAKopxB,UAAUnmxB,OAAQgC,IAEvC,IAAWoqT,IAAIg4T,EAAMrsW,OAAQh7Q,KAAKopxB,UAAUnkxB,IAAMoinB,EAAMtxlB,SACpC,EACpB8vsC,IAEAD,IAIJ,OAAIA,IAAc5luC,KAAKopxB,UAAUnmxB,OACxB,IAAUsknB,OACRs+mB,IAAa7luC,KAAKopxB,UAAUnmxB,OAC9B,IAAUuknB,QAEZ,IAAUC,YACnB,EASA46mB,EAAmB5huC,UAAUq+8B,kBAAoB,SAAUj93B,GAEzD,IAAM68L,QAAQ,QAAS78L,GAGvB,MAAM68mB,EAAc,IAAI,IAAQzzoB,MAAM,IAAQ6lmB,UACxCg1kB,EAAkB,IAAI,IAA+B,CACzDr0kB,iBAAkB,CAChBpyO,UAAWr/a,KAAK4juC,eAAe,MAG7BmC,EACJ,IAA+B90mB,eAAe60mB,GAC1CE,EAAmB,IAAI,IAAiB,CAC5C7ykB,SAAU4ykB,EACVt9tC,GAAI,UACJi2rB,YAAaA,EACbn5rB,WAAY,CACVs8E,MAAO,IAA+B2ziB,UAAU3ziB,MAI9CokpC,EAAqB,IAAI,IAA+B,CAC5Dx0kB,iBAAkB,CAChBpyO,UAAWr/a,KAAK4juC,eAAe,MAG7BsC,EACJ,IAA+Bj1mB,eAAeg1mB,GAC1CE,EAAsB,IAAI,IAAiB,CAC/ChzkB,SAAU+ykB,EACVz9tC,GAAI,UACJi2rB,YAAaA,EACbn5rB,WAAY,CACVs8E,MAAO,IAA+B2ziB,UAAU3ziB,MAI9CukpC,EAAgB,GACtB,IAAK,IAAInhuC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMohuC,EAAmB,IAAI,IAA+B,CAC1D50kB,iBAAkB,CAChBpyO,UAAWr/a,KAAK4juC,eAAe,EAAI3+tC,MAGjCqhuC,EACJ,IAA+Br1mB,eAAeo1mB,GAChDD,EAAcnhuC,GAAK,IAAI,IAAiB,CACtCkupB,SAAUmzkB,EACV79tC,GAAI,UACJi2rB,YAAaA,EACbn5rB,WAAY,CACVs8E,MAAO,IAA+B2ziB,UAAU3ziB,KAGtD,CAEA,OAAO,IAAI,IAAU,CACnBkiwB,kBAAmB,CACjBqiZ,EAAc,GACdA,EAAc,GACdA,EAAc,GACdA,EAAc,GACdD,EACAH,GAEFtiZ,WAAY,IAAI,IAA2B,CACzCG,aAAa,EACb1jpB,MAAM,IAER6jpB,cAAc,GAElB,EAEA,QAAe,8BAAkB,I,8JCrqBjC,SAASuiZ,EAAmB76sC,EAAQ5J,GACnB,IAAXA,IACFA,EAAS,IAAWg7oB,UAEtB98pB,KAAKk5nB,gBAAkB,IAAI,IAAextmB,EAAQ5J,EACpD,CAEAvb,OAAOgwE,iBAAiBgwpC,EAAmB9luC,UAAW,CASpDirB,OAAQ,CACNzV,IAAK,WACH,OAAOjW,KAAKk5nB,gBAAgBxtmB,MAC9B,GAWF5J,OAAQ,CACN7L,IAAK,WACH,OAAOjW,KAAKk5nB,gBAAgBp3mB,MAC9B,GAWFqwpB,eAAgB,CACdl8pB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,GAUFnH,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,KAWJqtmB,EAAmB9luC,UAAUoluB,iBAAmB,SAAU1I,GAExD,IAAMz+c,QAAQ,aAAcy+c,GAE5B,MAAMprG,EAAiB/xnB,KAAKk5nB,gBAC5B,OAAOnrnB,KAAK8R,IACV,EACA,IAAWkW,SAASg8lB,EAAermmB,OAAQyxsB,EAAW7zV,OAAOumd,YAC3D99N,EAAejwmB,OAErB,EAWAyktC,EAAmB9luC,UAAU2mnB,eAAiB,SAAUC,GAItD,OAFA,IAAM3oW,QAAQ,QAAS2oW,GAEhB,IAAeD,eAAepnnB,KAAKk5nB,gBAAiB7R,EAC7D,EAQAk/mB,EAAmB9luC,UAAU8tB,OAAS,SAAU7C,EAAQ5J,GACtD,IAAWmpC,MAAMv/B,EAAQ1rB,KAAKk5nB,gBAAgBxtmB,QAC9C1rB,KAAKk5nB,gBAAgBp3mB,OAASA,CAChC,EAQAyktC,EAAmB9luC,UAAUq+8B,kBAAoB,SAAUj93B,GAEzD,IAAM68L,QAAQ,QAAS78L,GAEvB,MAAMsxkB,EAAW,IAAI,IAAsB,CACzCrxoB,OAAQ9hB,KAAK8hB,SAET48qB,EAAc,IAAQlwY,gBAC1BxuT,KAAK0rB,OACL,IAAI,IAAQu/B,MAAM,IAAQ6lmB,WAEtB7vpB,EAAW,IAAI,IAAiB,CACpCkypB,SAAUA,EACV1qpB,GAAI,UACJi2rB,YAAaA,EACbn5rB,WAAY,CACVs8E,MAAO,IAA+B2ziB,UAAU3ziB,MAIpD,OAAO,IAAI,IAAU,CACnBkiwB,kBAAmB9i1B,EACnByi1B,WAAY,IAAI,IAA2B,CACzCG,aAAa,EACb1jpB,MAAM,IAER6jpB,cAAc,GAElB,EACA,QAAe,8BAAkB,I,2DCvJjC,SAASwiZ,IAAsB,CAQ/BA,EAAmB/luC,UAAU0xqB,oBAAiBhtqB,EAQ9CqhuC,EAAmB/luC,UAAUsxnB,oBAAiB5snB,EAS9CqhuC,EAAmB/luC,UAAUoluB,iBAAmB,SAAU1I,GACxD,IAAe9nD,yBACjB,EAWAmxjB,EAAmB/luC,UAAU2mnB,eAAiB,SAAUC,GACtD,IAAeguD,yBACjB,EASAmxjB,EAAmB/luC,UAAUq+8B,kBAAoB,SAAUj93B,GACzD,IAAewzlB,yBACjB,EACA,QAAe,8BAAkB,I,wGCrCjC,SAASoxjB,EAA+B1muC,GACtCA,EAAUA,GAAW,IAAOw8mB,aAE5Bv8mB,KAAK08mB,eAAgB,OAAQ38mB,EAAQw5mB,cACjCx5mB,EAAQw5mB,aACR,IAAI,IAAuB,CAAEt0D,UAAWlljB,EAAQkljB,YACpDjljB,KAAKsg0B,OAASvg0B,EAAQ8hF,OAAS,IAAMwskB,OACrCrupB,KAAKm9mB,YAAc,IAAI,IACvBn9mB,KAAKyz6B,WAAa1z6B,EAAQ4y6B,WAAa,IACvC3y6B,KAAK0z6B,YAAc3z6B,EAAQ6y6B,YAAc,IAEzC5y6B,KAAK8y6B,mBAAgB3t6B,EACrBnF,KAAK+y6B,wBAAqB5t6B,EAC1BnF,KAAKgz6B,sBAAmB7t6B,EACxBnF,KAAKiz6B,wBAAqB9t6B,EAC1BnF,KAAKkz6B,sBAAmB/t6B,EACxBnF,KAAKmz6B,iBAAchu6B,EACnBnF,KAAKoz6B,wBAAqBju6B,EAC1BnF,KAAKqz6B,mBAAgBlu6B,EACrBnF,KAAKsz6B,gCAA6Bnu6B,EAClCnF,KAAKuz6B,iCAA8Bpu6B,CACrC,CAEAoB,OAAOgwE,iBAAiBkwpC,EAA+BhmuC,UAAW,CAOhEirM,MAAO,CACLz1L,IAAK,WAEL,GASF085B,UAAW,CACT185B,IAAK,WACH,OAAOjW,KAAKyz6B,UACd,GASFb,WAAY,CACV385B,IAAK,WACH,OAAOjW,KAAK0z6B,WACd,GASFrkJ,aAAc,CACZp5wB,IAAK,WAEL,GASFu+5B,aAAc,CACZv+5B,IAAK,WAEL,GASFsjmB,aAAc,CACZtjmB,IAAK,WACH,OAAOjW,KAAK08mB,aACd,GASF9C,UAAW,CACT3jmB,IAAK,WACH,OAAOjW,KAAK08mB,cAAc9C,SAC5B,GAWF84T,kBAAmB,CACjBz85B,IAAK,WAEL,GAWF0omB,WAAY,CACV1omB,IAAK,WACH,OAAOjW,KAAKm9mB,WACd,GAUFpB,OAAQ,CACN9lmB,IAAK,WAEL,GAaFy+5B,gBAAiB,CACfz+5B,IAAK,WACH,OAAO,CACT,KAYJwwtC,EAA+BhmuC,UAAUs06B,eAAiB,SACxD1x5B,EACAC,EACA45G,GAGF,EAWAupmC,EAA+BhmuC,UAAUu06B,aAAe,SACtD3x5B,EACAC,EACA45G,EACAuvD,GAEA,MAAM/qK,EAAS9e,SAAS+xC,cAAc,UACtCjzB,EAAOva,MAAQ,IACfua,EAAO5f,OAAS,IAChB,MAAM8U,EAAU8K,EAAOS,WAAW,MAE5Bw20B,EAAW341B,KAAKsg0B,OAAOv7K,mBAa7B,OAXAnuoB,EAAQmruB,YAAc42G,EACtB/h1B,EAAQoruB,UAAY,EACpBpruB,EAAQw8iC,WAAW,EAAG,EAAG,IAAK,KAE9Bx8iC,EAAQ8tD,KAAO,kBACf9tD,EAAQisX,UAAY,SACpBjsX,EAAQyxd,UAAYswX,EACpB/h1B,EAAQq4T,SAAS,MAAM/xM,IAAS,IAAK,IACrCtmH,EAAQq4T,SAAS,MAAM5rT,IAAK,IAAK,KACjCzM,EAAQq4T,SAAS,MAAM3rT,IAAK,IAAK,KAE1B2X,QAAQC,QAAQxZ,EACzB,EAaA+ktC,EAA+BhmuC,UAAUy06B,aAAe,SACtD7x5B,EACAC,EACA45G,EACA8nb,EACA4vE,GAGF,EACA,QAAe,8BAA8B,I,2DChQ7C,SAAS8xmB,EAAkB3muC,GACzB,IAAes1qB,yBACjB,CAQAqxjB,EAAkBjmuC,UAAUgo/B,QAAU,IAAepzU,wBASrDqxjB,EAAkBjmuC,UAAUio/B,mBAC1B,IAAerzU,wBACjB,QAAe,8BAAiB,I,uECnBhC,SAASsxjB,EAAYjrN,EAAS8V,EAA4BJ,GACxDpxhC,KAAK6/gC,kBAAe16gC,EACpBnF,KAAK28gC,eAAiBjB,EACtB17gC,KAAKwxhC,2BAA6BA,EAClCxxhC,KAAKsxhC,gCAA6BnshC,EAClCnF,KAAKoxhC,gBAAkBA,CACzB,CAKAu1M,EAAYlmuC,UAAUo8gC,cAAgB,YAChC,OAAQ78gC,KAAK6/gC,eACf7/gC,KAAK6/gC,aAAa6vD,oBAGhB,OAAQ1vkC,KAAK28gC,iBACf38gC,KAAK28gC,eAAe+yD,kBAExB,EAYAi3J,EAAYlmuC,UAAU28gC,oBAAsB,SAC1Ct+X,EACAq+E,EACAmiT,GAEA,MAAM3C,EAAiB38gC,KAAK28gC,eACtBgD,EAAehD,EAAegD,aAQpC,GANAhD,EAAeS,oBACbjgT,GACCn9tB,KAAKoxhC,gBACN9R,GAGE3C,EAAe5lgC,QAAU,IAAaqh7B,MAQxC,OAPI,OAAQp47B,KAAK6/gC,eACf7/gC,KAAK6/gC,aAAa6vD,mBAEpB1vkC,KAAK6/gC,aAAe7/gC,KAAK28gC,eACzB38gC,KAAK28gC,oBAAiBx3gC,EACtBnF,KAAKsxhC,2BACH3R,EAAa4R,qCAAqCzyY,EAAM9+oB,OACnD,EAIT,IACI4muC,EADAlgsC,EAAWi2+B,EAAep5gC,OAE9B,MACE,OAAQmjC,KACPA,EAAS3vB,QAAU,IAAaqh7B,QAC7Bp47B,KAAKoxhC,mBAAoB,OAAQ1q/B,EAASivmB,WAG5CjvmB,EAAS3vB,QAAU,IAAa81vB,QAChCnmuB,EAAS3vB,QAAU,IAAa+ogC,UAGhC8mN,EACEA,GAAmClgsC,GAEvCA,EAAWA,EAASnjC,OAiBtB,OAdIvD,KAAK6/gC,eAAiBn5+B,KACpB,OAAQ1mC,KAAK6/gC,eACf7/gC,KAAK6/gC,aAAa6vD,mBAGpB1vkC,KAAK6/gC,aAAen5+B,GAEhB,OAAQA,KACVA,EAAS+oiC,eACTzvkC,KAAKsxhC,2BACH3R,EAAa4R,qCAAqCzyY,EAAM9+oB,UAK5D28gC,EAAe5lgC,QAAU,IAAa81vB,QACtC8vQ,EAAe5lgC,QAAU,IAAa+ogC,UAGlC,OAAQ8mN,KAIVA,EAAgCxpN,oBAC9BjgT,GACCn9tB,KAAKoxhC,gBACN9R,GAEK,GAOb,EACA,QAAe,8BAAW,I,0MClD1B,SAASunN,EAA8B9muC,GACrC,IAA2B2J,KAAK1J,KAAMD,EACxC,CAsFA,SAAS+muC,EAA+BltnB,EAAWL,GAajD,OAZIK,EAAUI,KAAOT,EAAaK,UAAUI,OAC1CJ,EAAUI,KAAOT,EAAaK,UAAUI,MAEtCJ,EAAUE,KAAOP,EAAaK,UAAUE,OAC1CF,EAAUE,KAAOP,EAAaK,UAAUE,MAEtCF,EAAU52D,MAAQu2D,EAAaK,UAAU52D,QAC3C42D,EAAU52D,MAAQu2D,EAAaK,UAAU52D,OAEvC42D,EAAUG,MAAQR,EAAaK,UAAUG,QAC3CH,EAAUG,MAAQR,EAAaK,UAAUG,OAEpCH,CACT,CAEA,SAASmtnB,EACPxtnB,EACAK,EACA46T,GAKA,MAAMi6O,EAASl1iB,EAAaiB,iBAC1B,IAAUc,UAAU1B,GACpB46T,GAEIk6O,EAASn1iB,EAAaiB,iBAC1B,IAAUa,UAAUzB,GACpB46T,GAIF,OADGzm6B,KAAK0a,IAAIimoC,EAAOrroC,EAAIoroC,EAAOproC,GAAK,IAAMtV,KAAK0a,IAAIimoC,EAAOproC,EAAImroC,EAAOnroC,GAAK,GACzD,EACP,EAEFkx5B,CACT,CA1HAqyT,EAA8B7qlB,iBAAmBv/jB,eAC/C18E,EACAinuC,EACAC,EACAvonB,GAGA,IACE,MAAM3iiB,QAAYkrpC,EAAYx1d,WAC9B,OAAOo1d,EAA8BK,iBACnCnrpC,EACAh8E,EACAinuC,EACAC,EACAvonB,EAEJ,CAAE,MAAOv8mB,GACP,GAAIA,aAAa,IACf,OAAO0kuC,EAA8BM,iBACnCpnuC,EACAinuC,GAIJ,MAAM7kuC,CACR,CACF,EAuBA0kuC,EAA8B9nnB,QAAUtiiB,eAAgBtvE,EAAKpN,GAE3D,IAAM2+Q,QAAQ,MAAOvxQ,GAGrB,MAAMw0lB,EAAW,IAASqd,eAAe7xmB,GACzCw0lB,EAASsd,qBAET,MAAM+nnB,EAAcrloB,EACdsloB,EAActloB,EAAS2c,mBAAmB,CAC9CnxmB,IAAK,wBAGPpN,EAAUA,GAAW,IAAOw8mB,aAC5B,MAAM8C,QAAiBwnnB,EAA8B7qlB,iBACnDj8oB,EACAinuC,EACAC,GAGF,OAAO,IAAIJ,EAA8BxnnB,EAC3C,GAEI,OAAQ94mB,OAAO69D,UACjByiqC,EAA8BpmuC,UAAY8F,OAAO69D,OAC/C,IAA2B3jE,WAE7BomuC,EAA8BpmuC,UAAUukC,YACtC6hsC,GAyDJA,EAA8BK,iBAAmB,SAC/CnrpC,EACAh8E,EACAinuC,EACAC,EACAvonB,GAEA,MAAM0onB,EAAkB,cAClBC,EAAe,WACfC,EAAgB,YAChBC,EAAY,eAClB,IAAIhuqC,EAAQ8mU,EAAM46xB,EAClB,MAAMusE,EAAe,GAKfv/jC,EAAWlsF,EAAI++K,WAAW,GAAGA,WACnC,IAAK,IAAI71P,EAAI,EAAGA,EAAIgjK,EAAShlK,OAAQgC,IACnC,GAAImiuC,EAAgBn1tC,KAAKg2J,EAASxgJ,KAAKxiB,GAAG/D,UACxCq4D,EAAS0uG,EAASxgJ,KAAKxiB,QAClB,GAAIqiuC,EAAcr1tC,KAAKg2J,EAASxgJ,KAAKxiB,GAAG/D,UAAW,CACxD+5pC,EAAWhz/B,EAASxgJ,KAAKxiB,GACzB,MAAMwiuC,EAAex/jC,EAASxgJ,KAAKxiB,GAAG61P,WAEtC,IAAK,IAAIvvM,EAAI,EAAGA,EAAIk8qC,EAAaxkuC,OAAQsoD,IACnC87qC,EAAap1tC,KAAKw1tC,EAAahgtC,KAAK8jC,GAAGrqD,WAEzCsmuC,EAAa5iuC,KAAK6iuC,EAAahgtC,KAAK8jC,GAG1C,MAAWg8qC,EAAUt1tC,KAAKg2J,EAASxgJ,KAAKxiB,GAAG/D,YACzCm/X,EAAOp4N,EAASxgJ,KAAKxiB,IAIzB,IAAIm5F,EACJ,KAAK,OAAQ68jC,MAAc,OAAQ56xB,GAWjC,MAVAjiS,EAAU,0DAA0D6ooC,EAAY95tC,QAC5E,OAAQuxmB,IACV,IAAkBmC,iBAChB17mB,EACAu5mB,EACAA,EAASC,WACTvghB,GAIE,IAAI,IAAaA,GAGzB,MAAMowjC,EACJzupC,EAAQyupC,eAAiBj1lC,EAAOh8B,aAAa,aACzCo14B,EACJ5y6B,EAAQ4y6B,WAAazr6B,SAASqyD,EAAOh8B,aAAa,SAAU,IACxDq14B,EACJ7y6B,EAAQ6y6B,YAAc1r6B,SAASqyD,EAAOh8B,aAAa,UAAW,IAChE,IAAIi34B,EACFz06B,EAAQy06B,cAAgBtt6B,SAASsguC,EAAa,GAAGjqsC,aAAa,SAAU,IAC1E,MAAM8xvB,EACJtvxB,EAAQsvxB,cACRnoxB,SAASsguC,EAAaA,EAAavkuC,OAAS,GAAGs6B,aAAa,SAAU,IAClEmqsC,EAAmBzsE,EAAS19nC,aAAa,WAC/C,IAAIg8kB,EAAex5mB,EAAQw5mB,aAE3B,KAAK,OAAQA,GACX,GACuB,aAArBmunB,GACqB,oBAArBA,EAEAnunB,EAAe,IAAI,IAAuB,CACxCt0D,UAAWlljB,EAAQkljB,gBAEhB,IACgB,aAArByirB,GACqB,oBAArBA,EAgBA,MAVAtpoC,EAAU,GAAG6ooC,EAAY95tC,mDAAmDu6tC,MACxE,OAAQhpnB,IACV,IAAkBmC,iBAChB17mB,EACAu5mB,EACAA,EAASC,WACTvghB,GAIE,IAAI,IAAaA,GAdvBm7gB,EAAe,IAAI,IAAwB,CACzCt0D,UAAWlljB,EAAQkljB,WAcvB,CAIF,IAAI20D,EAAY,IAAU3ujB,MAAMlrD,EAAQ65mB,WAExC,KAAK,OAAQA,GAAY,CACvB,IAAI9vZ,EACA1mH,EACAukoC,EACAC,EAIW7nuC,EAAQ8nuC,QAErBF,EAAO,IAAI,IACTxosC,WAAWkhW,EAAK9iW,aAAa,SAC7B4B,WAAWkhW,EAAK9iW,aAAa,UAE/BqqsC,EAAO,IAAI,IACTzosC,WAAWkhW,EAAK9iW,aAAa,SAC7B4B,WAAWkhW,EAAK9iW,aAAa,YAG/BoqsC,EAAO,IAAI,IACTxosC,WAAWkhW,EAAK9iW,aAAa,SAC7B4B,WAAWkhW,EAAK9iW,aAAa,UAE/BqqsC,EAAO,IAAI,IACTzosC,WAAWkhW,EAAK9iW,aAAa,SAC7B4B,WAAWkhW,EAAK9iW,aAAa,WAQjC,MAAMuqsC,EACiB,aAArBJ,GAAwD,aAArBA,EACrC,GACEnunB,EAAa94V,sBAAsB,KACnCqn9B,EAEAh+gC,EAAK,IAAa61Z,YAAYgonB,EAAKtktC,EAAGsktC,EAAKrktC,GAC3C8/E,EAAK,IAAau8gB,YAAYionB,EAAKvktC,EAAGuktC,EAAKtktC,OACtC,CACL,MAAMm9P,EAAa84V,EAAa94V,WAChC32D,EAAK22D,EAAW66a,UAAUqsiB,GAC1BvkoC,EAAKq9K,EAAW66a,UAAUssiB,EAC5B,CAEAhunB,EAAY,IAAI,IACd9vZ,EAAGk7V,UACHl7V,EAAG8qa,SACHxxhB,EAAG4hd,UACH5hd,EAAGwxhB,SAEP,CAeA,OAZAhb,EAAYktnB,EAA+BltnB,EAAWL,GAEtDi7T,EAAeuyT,EACbxtnB,EACAK,EACA46T,GAOK,CACLrn6B,IALuB65tC,EAAY1onB,mBAAmB,CACtDnxmB,IAAK,sBAAsBqhpC,MAK3Bj1iB,aAAcA,EACdK,UAAWA,EACX+4T,UAAWA,EACXC,WAAYA,EACZ4B,aAAcA,EACdnlJ,aAAcA,EACdqjJ,kBAAmB3y6B,EAAQ2y6B,kBAC3B32T,OAAQh8mB,EAAQg8mB,OAEpB,EAUA8qnB,EAA8BM,iBAAmB,SAC/CpnuC,EACAinuC,GAGA,MAAMx4E,EAAgBzupC,EAAQyupC,eAAiB,MACzC77O,EAAY5y6B,EAAQ4y6B,WAAa,IACjCC,EAAa7y6B,EAAQ6y6B,YAAc,IACnCvjJ,EAAetvxB,EAAQsvxB,aACvB91K,GAAe,OAAQx5mB,EAAQw5mB,cACjCx5mB,EAAQw5mB,aACR,IAAI,IAAwB,CAAEt0D,UAAWlljB,EAAQkljB,YAErD,IAAI20D,EAAY75mB,EAAQ65mB,WAAaL,EAAaK,UAElDA,EAAYktnB,EAA+BltnB,EAAWL,GAGtD,MAAMi7T,EAAeuyT,EACnBxtnB,EACAK,EACA75mB,EAAQy06B,cAOV,MAAO,CACLrn6B,IALuB65tC,EAAY1onB,mBAAmB,CACtDnxmB,IAAK,sBAAsBqhpC,MAK3Bj1iB,aAAcA,EACdK,UAAWA,EACX+4T,UAAWA,EACXC,WAAYA,EACZ4B,aAAcA,EACdnlJ,aAAcA,EACdqjJ,kBAAmB3y6B,EAAQ2y6B,kBAC3B32T,OAAQh8mB,EAAQg8mB,OAEpB,EAEA,QAAe,8BAA6B,I,kFCra5C,SAASgsnB,EAAahouC,GAEpB,MAAM++oB,GADN/+oB,EAAUA,GAAW,IAAOw8mB,cACPuiC,KACfzJ,EAAgBt1oB,EAAQguL,MAG9B,IAAMg2b,OAAO3nlB,OAAO,eAAgB0inB,GACpC,IAAM/6B,OAAO3nlB,OAAO,gBAAiBi5mB,GAGrCr1oB,KAAK67+B,OAASxmW,EACdr1oB,KAAKip1B,YAAcnqM,EAAKz1kB,WACxBrpE,KAAK6h9B,YAAc/iU,EAAKzc,WACxBrioB,KAAK+z9B,QAAUj1U,EAAK5sX,MACtB,CAEA3rR,OAAOgwE,iBAAiBwxpC,EAAatnuC,UAAW,CAS9CstL,MAAO,CACL93K,IAAK,WACH,OAAOjW,KAAK67+B,MACd,GAWF3ptB,OAAQ,CACNj8Q,IAAK,WACH,OAAOjW,KAAK+z9B,OACd,GAWF1xV,WAAY,CACVpsnB,IAAK,WACH,OAAOjW,KAAK6h9B,WACd,KAWJkmR,EAAatnuC,UAAUw50B,YAAc,SAAU6lG,GAC7C,OAAO,IAAe7lG,YAAY6lG,EAAY9/6B,KAAKip1B,YAAajp1B,KAAK67+B,OACvE,EASAksP,EAAatnuC,UAAU6i9B,sBAAwB,SAAUrjR,GACvD,OAAO,IAAeqjR,sBACpBrjR,EACAjgsB,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EASAksP,EAAatnuC,UAAUu/6B,eAAiB,SAAUl/uB,GAChD,OAAO,IAAek/uB,eAAehg7B,KAAKip1B,YAAajp1B,KAAK67+B,OAAQ/6yB,EACtE,EAYAiniC,EAAatnuC,UAAUw/6B,YAAc,SAAUH,GAC7C,OAAO,IAAeG,YAAYH,EAAY9/6B,KAAKip1B,YAAajp1B,KAAK67+B,OACvE,EAaAksP,EAAatnuC,UAAUo2C,YAAc,SAAUip4B,EAAYz66B,GACzD,OAAO,IAAewxC,YACpBip4B,EACAz66B,EACArF,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EASAksP,EAAatnuC,UAAU61oB,sBAAwB,SAAU2pD,GACvD,OAAO,IAAe3pD,sBACpB2pD,EACAjgsB,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EAUAksP,EAAatnuC,UAAUq7+B,sBAAwB,SAAU77S,EAAU56rB,GACjE,OAAO,IAAey2+B,sBACpB77S,EACA56rB,EACArF,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EAEA,QAAe,8BAAY,I,qLC1K3B,MAAMmsP,EAAW,IAAI,IACfC,EAAW,IAAI,IACf3xgB,EAAW,IAAI,IACfxlC,EAAmB,IAAI,IAE7B,SAASo3iB,EAAqB/ptC,EAAGC,EAAG4a,GAClCA,EAAS,IAAW4nP,MAAMziQ,EAAGC,EAAG4a,GAChC,MAAMoylB,EAAY,IAAWA,UAAUpylB,GACvC,OAAO,IAAWsulB,iBAChBtulB,EACA,IAAW8joB,SAAW1xC,EACtBpylB,EAEJ,CAEA,SAASmvsC,EAAqBhqtC,EAAG6a,GAC/B,MAAM4oM,EAAO,IAAWpqH,UAAUr5F,EAAG2yqB,GAQrC,OAAOo3iB,EAAqB/ptC,EAPlB,IAAWy1mB,cACnBhyZ,EACA,IAAW0tZ,OACX,IAAWrM,UAET,IAAWyQ,OACX,IAAWpE,OACmBt2lB,EACpC,CAEA,SAASovsC,EAAch7mB,GACrB,IAAIjxkB,EAAI,IAAQwnB,UAAUypjB,EAAU,EAAG46mB,GACnClltC,EAAI,IAAQ6gD,UAAUypjB,EAAU,EAAG66mB,GACnC7mtC,EAAI,IAAQuiD,UAAUypjB,EAAU,EAAGkpG,GAEvC,MAAM+xgB,EAAQ,IAAWp5nC,OAAO9yD,EAAG,IAAW6tjB,MACxCs+nB,EAAQ,IAAWr5nC,OAAOnsF,EAAG,IAAWknlB,MACxCu+nB,EAAQ,IAAWt5nC,OAAO7tF,EAAG,IAAW4olB,MAE9C,OAAKq+nB,GAAUC,GAAUC,EAGrBF,GAASC,GAASC,GACpBn7mB,EAAS,GAAK,IAAW0vC,SACzB1vC,EAAS,GAAK,IAAW0vC,SACzB1vC,EAAS,GAAK,IAAW0vC,SAClB1vC,KAELi7mB,GAAUC,GAAUC,EAEZF,IAASC,GAAUC,EAEnBF,GAAUC,IAASC,EAEnBF,EAGAC,EAGAC,IACVpsrC,EAAIgsrC,EAAqB/mtC,EAAG+6B,GAC5Br5B,EAAIoltC,EAAqB9mtC,EAAG+6B,EAAGr5B,KAJ/Bq5B,EAAIgsrC,EAAqBrltC,EAAGq5B,GAC5B/6B,EAAI8mtC,EAAqBpltC,EAAGq5B,EAAG/6B,KAJ/B0B,EAAIqltC,EAAqBhsrC,EAAGr5B,GAC5B1B,EAAI8mtC,EAAqBpltC,EAAGq5B,EAAG/6B,IAH/BA,EAAI8mtC,EAAqBpltC,EAAGq5B,EAAG/6B,GAF/B0B,EAAIoltC,EAAqB/rrC,EAAG/6B,EAAG0B,GAF/Bq5B,EAAI+rrC,EAAqBpltC,EAAG1B,EAAG+6B,GAgBjC,IAAQ2qrB,UAAU15G,EAAU,EAAGjxkB,EAAGixkB,GAClC,IAAQ05G,UAAU15G,EAAU,EAAGtqmB,EAAGsqmB,GAClC,IAAQ05G,UAAU15G,EAAU,EAAGhsmB,EAAGgsmB,GAE3BA,GA7BEA,CA8BX,CAcA,SAASo7mB,EAAwB98sC,EAAQ0hmB,GACvCA,EAAWg7mB,EAAch7mB,GACzBptnB,KAAKm5nB,qBAAuB,IAAI,IAAoBztmB,EAAQ0hmB,GAC5DptnB,KAAKk5nB,gBAAkB,IAAehM,wBACpCltnB,KAAKm5nB,qBAET,CAEA5ynB,OAAOgwE,iBAAiBiypC,EAAwB/nuC,UAAW,CASzD0xqB,eAAgB,CACdl8pB,IAAK,WACH,OAAOjW,KAAKm5nB,oBACd,GAUFpH,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,KAUJsvmB,EAAwB/nuC,UAAUoluB,iBAAmB,SAAU1I,GAI7D,OAFA,IAAMz+c,QAAQ,aAAcy+c,GAErBpvtB,KAAKyV,KACVxjB,KAAKm5nB,qBAAqB5K,kBAAkB4uG,EAAW7zV,OAAOumd,YAElE,EAWA24Y,EAAwB/nuC,UAAU2mnB,eAAiB,SAAUC,GAI3D,OAFA,IAAM3oW,QAAQ,QAAS2oW,GAEhBrnnB,KAAKm5nB,qBAAqB/R,eAAeC,EAClD,EAUAmhnB,EAAwB/nuC,UAAU8tB,OAAS,SAAU7C,EAAQ0hmB,GAC3D,IAAWnikB,MAAMv/B,EAAQ1rB,KAAKm5nB,qBAAqBztmB,QACnD0hmB,EAAWg7mB,EAAch7mB,GACzB,IAAQnikB,MAAMmikB,EAAUptnB,KAAKm5nB,qBAAqB/L,UAClD,IAAeF,wBACbltnB,KAAKm5nB,qBACLn5nB,KAAKk5nB,gBAET,EAQAsvmB,EAAwB/nuC,UAAUq+8B,kBAAoB,SAAUj93B,GAE9D,IAAM68L,QAAQ,QAAS78L,GAGvB,MAAMsxkB,EAAW,IAAI,IAAmB,CAEtC5+D,QAAS,IAAI,KAAY,GAAM,GAAM,GACrCE,QAAS,IAAI,IAAW,EAAK,EAAK,KAE9BiqG,EAAc,IAAQpwY,wBAC1BtuT,KAAKmyqB,eAAe/kD,SACpBptnB,KAAKmyqB,eAAezmpB,QAEhBzqB,EAAW,IAAI,IAAiB,CACpCkypB,SAAUA,EACV1qpB,GAAI,UACJi2rB,YAAaA,EACbn5rB,WAAY,CACVs8E,MAAO,IAA+B2ziB,UAAU3ziB,MAIpD,OAAO,IAAI,IAAU,CACnBkiwB,kBAAmB9i1B,EACnByi1B,WAAY,IAAI,IAA2B,CACzCG,aAAa,EACb1jpB,MAAM,IAER6jpB,cAAc,GAElB,EACA,QAAe,8BAAuB,I,4DCjNtC,SAASykZ,IACPzouC,KAAK+uI,UAAO5pI,EACZnF,KAAKg9I,UAAO73I,EACZnF,KAAK+sE,MAAQ,EACb/sE,KAAK0ouC,6BAA0BvjuC,CACjC,CAyCA,SAASW,EAAO6iuC,EAAsBlhtC,GACpC,MAAMmf,EAAWnf,EAAKyoqC,oBAChBpnqC,EAAOrB,EAAKgjqC,gBAEdhjqC,IAASkhtC,EAAqBD,0BAChCC,EAAqBD,wBAA0B5/sC,GAG7CrB,IAASkhtC,EAAqB55lC,KAChC45lC,EAAqB55lC,KAAOjmH,EAE5B8d,EAAS6jpC,gBAAkB3hqC,EAGzBrB,IAASkhtC,EAAqB3rlC,KAChC2rlC,EAAqB3rlC,KAAOp2G,EAE5B9d,EAAKonqC,oBAAsBtppC,EAG7Bnf,EAAKyoqC,yBAAsB/qrC,EAC3BsiB,EAAKgjqC,qBAAkBtlrC,IAErBwjuC,EAAqB57pC,KACzB,CA3DA07pC,EAAqBhouC,UAAUqqrC,uBAAyB,WACtD9qrC,KAAK0ouC,wBAA0B1ouC,KAAK+uI,IACtC,EASA05lC,EAAqBhouC,UAAUkj+B,UAAY,SAAUilQ,GACnD,IAAIC,EAAa7ouC,KAAKg9I,KAClB8rlC,GAAe,EACnB,KACEA,IACA,OAAQ9ouC,KAAK0ouC,0BACb1ouC,KAAK+sE,MAAQ67pC,IACb,OAAQC,IACR,CAGAC,EAAeD,IAAe7ouC,KAAK0ouC,wBAEnC,MAAM9hsC,EAAWiisC,EAAW34C,oBAExB24C,EAAWvsN,uBACbusN,EAAWhsN,gBACX/2gC,EAAO9F,KAAM6ouC,IAGfA,EAAajisC,CACf,CACF,EAkCA6hsC,EAAqBhouC,UAAUkrrC,iBAAmB,SAAUlkqC,GAC1D,MAAMsnH,EAAO/uI,KAAK+uI,KAClB,GAAIA,IAAStnH,EAAb,CASA,KAFEznB,KAAK+sE,QAEF,OAAQgiE,GAMX,OAJAtnH,EAAKyoqC,yBAAsB/qrC,EAC3BsiB,EAAKgjqC,qBAAkBtlrC,EACvBnF,KAAK+uI,KAAOtnH,OACZznB,KAAKg9I,KAAOv1H,KAIV,OAAQA,EAAKyoqC,uBAAwB,OAAQzoqC,EAAKgjqC,mBAEpD3krC,EAAO9F,KAAMynB,GAGfA,EAAKyoqC,yBAAsB/qrC,EAC3BsiB,EAAKgjqC,gBAAkB17iC,EACvBA,EAAKmhjC,oBAAsBzoqC,EAE3BznB,KAAK+uI,KAAOtnH,CAtBZ,MAJMA,IAASznB,KAAK0ouC,0BAChB1ouC,KAAK0ouC,wBAA0BjhtC,EAAKgjqC,gBA0B1C,EACA,QAAe,8BAAoB,I,6CClHnC,MAAMs+C,EAAsB,CAK1B7onB,KAAM,EAKNuukB,OAAQ,EAKRxoK,SAAU,EAKVO,QAAS,EAMTwiN,oBAAqB,EAMrBC,mBAAoB,EAUpBhlN,kBAAmB,EAUnBq0M,UAAW,SAAUjztC,GACnB,OAAOA,GAAS0juC,EAAoBC,mBACtC,EAQAz6C,eAAgB,SAAUlprC,GACxB,OAAe,EAARA,CACT,EAOAsqrC,KAAM,SAAUtqrC,GACd,OAAe,EAARA,CACT,GAEF,EAAe,8BAAmB,I,6CC5ElC,MAMA,EAAekB,OAAOivmB,OANJ,CAChBwna,MAAO,EACP9qF,QAAS,EACTkG,MAAO,EACP8wS,eAAgB,G,0DCQlB,SAASC,EAAqB/+Z,EAAStrL,EAAMn9C,GAC3C3hmB,KAAKsq0B,SAAWF,EAChBpq0B,KAAKyl9B,MAAQ3mU,EACb9+oB,KAAKw8mB,UAAY7a,EAEjB3hmB,KAAKmm9B,wBAAyB,EAE9Bnm9B,KAAK4ysB,eAAYztsB,EACjBnF,KAAK07X,YAASv2X,EAEdnF,KAAKyh1B,QAAS,CAChB,CAEAl70B,OAAOgwE,iBAAiB4ypC,EAAqB1ouC,UAAW,CACtDkg7B,eAAgB,CACd1q6B,IAAK,WACH,OAAO,CACT,GAGFmw8B,aAAc,CACZnw8B,IAAK,WACH,OAAO,CACT,GAGFow8B,gBAAiB,CACfpw8B,IAAK,WACH,OAAO,CACT,GAGFqw8B,mBAAoB,CAClBrw8B,IAAK,WACH,OAAO,CACT,GAGFsw8B,mBAAoB,CAClBtw8B,IAAK,WACH,OAAO,CACT,GAGFgt6B,qBAAsB,CACpBht6B,IAAK,WACH,OAAO,CACT,GAGFuw8B,cAAe,CACbvw8B,IAAK,WAEL,GAYFmqI,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,GAGFrX,QAAS,CACPn0zB,IAAK,WACH,OAAOjW,KAAKsq0B,QACd,GAGFxrL,KAAM,CACJ7ooB,IAAK,WACH,OAAOjW,KAAKyl9B,KACd,GAGFt48B,IAAK,CACH8I,IAAK,WACH,OAAOjW,KAAKw8mB,UAAUuzJ,iBAAgB,EACxC,GAGFysK,WAAY,CACVvm6B,IAAK,WAEL,GAGFopmB,SAAU,CACRppmB,IAAK,WACH,OAAOjW,KAAK4ysB,SACd,EACAh+qB,IAAK,SAAUvvB,GACbrF,KAAK4ysB,UAAYvtsB,CACnB,GAGFk/M,MAAO,CACLtuM,IAAK,WACH,OAAOjW,KAAK07X,MACd,EACA9mW,IAAK,SAAUvvB,GACbrF,KAAK07X,OAASr2X,CAChB,KAYJ8juC,EAAqBh3lB,SAAW,SAAUi4L,EAAStrL,EAAMn9C,EAAU5+U,GACjE,MAAMhmO,EAAU,IAAIosrC,EAAqB/+Z,EAAStrL,EAAMn9C,GAIxD,OAHA5kjB,EAAQutxB,SAAS6wJ,YAAYp+6B,EAAQy/jB,UAAWz5V,EAAMhmO,EAAQ0o6B,OAC9D1o6B,EAAQ0kyB,QAAS,EAEV1kyB,CACT,EAMAosrC,EAAqB1ouC,UAAUw50B,YAAc,SAAU4lG,EAASz66B,GAC9D,OAAO,CACT,EAMA+juC,EAAqB1ouC,UAAUui7B,WAAa,SAAUnD,GAEtD,EAEAspT,EAAqB1ouC,UAAU6+8B,mBAAqB,SAClDr57B,EACA47D,GACC,EAEHsnpC,EAAqB1ouC,UAAUot2B,WAAa,SAAUxn1B,GAAQ,EAE9D8itC,EAAqB1ouC,UAAU8tB,OAAS,SAAU67yB,EAASjtG,GAAa,EAExEgsgB,EAAqB1ouC,UAAU+tO,KAAO,SAAUshd,EAAKqtC,EAAYnksB,GAEjE,EAEAmwsC,EAAqB1ouC,UAAU05B,YAAc,WAC3C,OAAO,CACT,EAEAgvsC,EAAqB1ouC,UAAU26B,QAAU,WACvC,OAAO,OAAcp7B,KACvB,EACA,QAAe,8BAAoB,I,6FCjKnC,SAASopuC,EAAgBrpuC,GAEvB,MAAMqq0B,GADNrq0B,EAAUA,GAAW,IAAOw8mB,cACJ6tN,QAClB/0L,EAAgBt1oB,EAAQguL,MAG9B,IAAMg2b,OAAO3nlB,OAAO,kBAAmBguyB,GACvC,IAAMrmN,OAAO3nlB,OAAO,gBAAiBi5mB,GAGrC,MAAMhskB,GAAa,OAAQ+gwB,EAAQ/gwB,YAAc+gwB,EAAQ/gwB,WAAa,CAAC,EAEvErpE,KAAK67+B,OAASxmW,EACdr1oB,KAAKip1B,YAAc5/wB,EACnBrpE,KAAK+z9B,QAAU3pJ,EAAQl4iB,OACvBlyR,KAAK6h9B,YAAcz3I,EAAQ/nM,UAC7B,CAEA97nB,OAAOgwE,iBAAiB6ypC,EAAgB3ouC,UAAW,CASjDstL,MAAO,CACL93K,IAAK,WACH,OAAOjW,KAAK67+B,MACd,GAWF3ptB,OAAQ,CACNj8Q,IAAK,WACH,OAAOjW,KAAK+z9B,OACd,GAWF1xV,WAAY,CACVpsnB,IAAK,WACH,OAAOjW,KAAK6h9B,WACd,KAWJunR,EAAgB3ouC,UAAUw50B,YAAc,SAAU6lG,GAChD,OAAO,IAAe7lG,YAAY6lG,EAAY9/6B,KAAKip1B,YAAajp1B,KAAK67+B,OACvE,EASAutP,EAAgB3ouC,UAAU6i9B,sBAAwB,SAAUrjR,GAC1D,OAAO,IAAeqjR,sBACpBrjR,EACAjgsB,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EASAutP,EAAgB3ouC,UAAUu/6B,eAAiB,SAAUl/uB,GACnD,OAAO,IAAek/uB,eAAehg7B,KAAKip1B,YAAajp1B,KAAK67+B,OAAQ/6yB,EACtE,EAYAsoiC,EAAgB3ouC,UAAUw/6B,YAAc,SAAUH,GAChD,OAAO,IAAeG,YAAYH,EAAY9/6B,KAAKip1B,YAAajp1B,KAAK67+B,OACvE,EAaAutP,EAAgB3ouC,UAAUo2C,YAAc,SAAUip4B,EAAYz66B,GAC5D,OAAO,IAAewxC,YACpBip4B,EACAz66B,EACArF,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EASAutP,EAAgB3ouC,UAAU61oB,sBAAwB,SAAU2pD,GAC1D,OAAO,IAAe3pD,sBACpB2pD,EACAjgsB,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EAUAutP,EAAgB3ouC,UAAUq7+B,sBAAwB,SAAU77S,EAAU56rB,GACpE,OAAO,IAAey2+B,sBACpB77S,EACA56rB,EACArF,KAAKip1B,YACLjp1B,KAAK67+B,OAET,EAEA,QAAe,8BAAe,I,2HCrK9B,SAASwtP,EAAmBtpuC,GAC1BA,EAAUA,GAAW,IAAOw8mB,aAG5B,IAAMwH,OAAO3nlB,OAAO,gBAAiBr8B,EAAQs0nB,OAC7C,IAAMtQ,OAAO3nlB,OAAO,gBAAiBr8B,EAAQs1P,OAC7C,IAAM0uX,OAAOp5jB,KACX,+BACA5qD,EAAQupuC,sBAEV,IAAMvlnB,OAAOp5jB,KAAK,yBAA0B5qD,EAAQ2ohC,gBAGpD1ohC,KAAKupuC,WAAa,CAAC,EACnBvpuC,KAAKwpuC,2BAA6B,GAElC,MAAMn1mB,EAASr0nB,KAAKo/xB,OAASr/xB,EAAQs0nB,MACrCr0nB,KAAK23nB,OAAS53nB,EAAQs1P,MACtBr1P,KAAKypuC,sBAAwB1puC,EAAQupuC,qBACrCtpuC,KAAK0puC,gBAAkB3puC,EAAQ2ohC,eAC/B1ohC,KAAK2puC,uBAAyB,EAE9Bt1mB,EAAM2tB,OAAO1znB,iBAAiBtuB,KAAK4puC,aAAc5puC,MACjDA,KAAK4puC,aAAav1mB,EACpB,CA4KA,SAASvhhB,EAAOzvF,EAAGC,EAAG45G,GACpB,MAAO,GAAG75G,KAAKC,KAAK45G,GACtB,CAeA,SAAS2smC,EAAuBp6qC,GAC9B,MAAM4lM,EAAQ5lM,EAAKkokB,OACnB,KAAK,OAAQtiY,GACX,OAEF,MAAMg/X,EAAQ5kkB,EAAK2vuB,OACbrtpB,EAAOsif,EAAMv6d,YACbgwkC,EAAcz1mB,EAAM0tB,YAAc1tB,EAAMkuB,cACxCr0Z,EAAammY,EAAMnmY,WAEzB,IAAK47+B,GAA8B,IAAf57+B,EAClB,OAGF,IAAIpxL,EACAhiD,EAAQu6O,EAAMtsP,QAAQgpI,GAC1B,GAAIj3H,EAAQ,EACV,OAGF,MAAMswB,EAAWiqN,EAAMp/O,IAAI6E,GAa3B,OAZIozO,EAAa,GAEfpxL,EAAU,IAAWmmlB,kBAAkB73mB,EAASy2B,KAAMkwE,KACpDj3H,IAGFgiD,EAAU,IAAWmmlB,kBAAkB73mB,EAASlnB,MAAO6tH,KACrDj3H,GAEJgiD,GAAWoxL,EAGJpzO,GAAS,GAAKgiD,GAAW,EAAMu4L,EAAMp/O,IAAI6E,QAAS3V,CAC3D,CAEA,SAAS4kuC,EAAWt6qC,EAAMqvlB,EAAM1zmB,GAC9B,MAAMtwB,EAAQ20C,EAAKkokB,OAAO5unB,QAAQqiC,EAASlnB,OACrC8ltC,EAAYv6qC,EAAK85qC,WACvB,IAAIU,EAAoBD,EAAUlvtC,IAC7B,OAAQmvtC,KACXA,EAAoBD,EAAUlvtC,GAAS,CAAC,GAG1C,MAAM9U,EAAM84oB,EAAK94oB,IACjB,IAAI,OAAQikuC,EAAkBjkuC,IAC5B,OAAO,EAGT,MAAMkkuC,EA9DR,SAAwBlkuC,GACtB,MAAM4d,EAAI5d,EAAIgD,MAAM,KACpB,GAAiB,IAAb4a,EAAE3gB,OAIN,MAAO,CACLogB,EAAGvE,OAAO8E,EAAE,IACZN,EAAGxE,OAAO8E,EAAE,IACZs5G,MAAOp+G,OAAO8E,EAAE,IAEpB,CAmDsBumtC,CAAenkuC,GAC7BymL,EAAU,IAAI,IAAQ,CAC1B/7H,UAAU,EACV0tjB,kBAAkB,EAClB71mB,KAAM,IAAY2lwB,QAClBx+D,iBAAkB5wD,EAAK4wD,mBAEnBt3lB,EAAU3oD,EAAKg6qC,sBACnBS,EAAY7mtC,EACZ6mtC,EAAY5mtC,EACZ4mtC,EAAYhtmC,MACZuvD,EACArhJ,GAEF,SAAK,OAAQgtE,KAIb6xnC,EAAkBjkuC,GAAO,CACvBoyG,QAASA,EACTq0E,QAASA,IAGJ,EACT,CApQAlmL,OAAOgwE,iBAAiB8ypC,EAAmB5ouC,UAAW,CAMpD4znB,MAAO,CACLp+mB,IAAK,WACH,OAAOjW,KAAKo/xB,MACd,EACAxqwB,IAAK,SAAUvvB,GAEb,KAAK,OAAQA,GACX,MAAM,IAAI,IAAe,sBAIvBrF,KAAKo/xB,SAAW/5xB,IAClBrF,KAAKo/xB,OAAS/5xB,EACdrF,KAAK4puC,aAAavkuC,GAClBrF,KAAK0puC,kBAET,GAOFr0+B,MAAO,CACLp/O,IAAK,WACH,OAAOjW,KAAK23nB,MACd,EACA/imB,IAAK,SAAUvvB,GAEb,KAAK,OAAQA,GACX,MAAM,IAAI,IAAe,sBAIvBrF,KAAK23nB,SAAWtynB,IAClBrF,KAAK23nB,OAAStynB,EACdrF,KAAK4puC,aAAa5puC,KAAKo/xB,QACvBp/xB,KAAK0puC,kBAET,GAOFU,gBAAiB,CACfn0tC,IAAK,WACH,OAAOjW,KAAK23nB,OAAO1hnB,IAAIjW,KAAK2puC,sBAC9B,KAeJN,EAAmB5ouC,UAAU4puC,aAAe,SAAUhntC,EAAGC,EAAG45G,EAAOuvD,GACjE,MAAMzmL,EAAM8sG,EAAOzvF,EAAGC,EAAG45G,GACzB,IAAIlkG,EACJ,MAAM01E,EAAQ1uG,KAAKupuC,WAAWvpuC,KAAK2puC,uBACnC,IAAI,OAAQj7nC,KAAU,OAAQA,EAAM1oG,IAAO,CACzC,MAAMyhB,EAAOinF,EAAM1oG,GACnBgzB,EAASvR,EAAK2wF,QAAQv7B,MAAM,SAAU16E,GAGpC,MADAsqL,EAAQ11K,MAAQ0Q,EAAKglK,QAAQ11K,MACvB5U,CACR,UACOusG,EAAM1oG,EACf,CAEA,OAAOgzB,CACT,EAWAqwsC,EAAmB5ouC,UAAU6puC,yBAA2B,SACtDjntC,EACAC,EACA45G,EACAuvD,GAEA,MAAMzmL,EAAM8sG,EAAOzvF,EAAGC,EAAG45G,GACnBqtmC,EAA4BvquC,KAAKwpuC,2BAGjCgB,EAAsBX,EAAuB7puC,MAC7C8+oB,EAAO,CACX94oB,IAAKA,EAGL0psB,iBAAkBjjhB,EAAQijhB,mBAGzB,OAAQ86hB,IACRT,EAAW/puC,KAAM8+oB,EAAM0rlB,IAGxBD,EAA0B3luC,KAAKk6oB,GAI7ByrlB,EAA0BtnuC,QAAU,KACtCsnuC,EAA0B5/tC,OAAO,EAAG,IAExC,EAEA0+tC,EAAmB5ouC,UAAUmpuC,aAAe,SAAUv1mB,GACpD,MAAMtif,EAAOsif,EAAMv6d,YAEbh/I,EADQ9a,KAAK23nB,OACC5unB,QAAQgpI,GACtB04lC,EAAuBzquC,KAAK2puC,sBAElC,GAAI7utC,IAAU2vtC,EAAsB,CAElC,MAAMC,EAAe1quC,KAAKupuC,WAAWkB,GACrC,IAAK,MAAMx0qC,KAAKy0qC,EACVA,EAAazkuC,eAAegwD,IAC9By0qC,EAAaz0qC,GAAGw2H,QAAQ+C,SAS5B,cANOxvL,KAAKupuC,WAAWkB,GACvBzquC,KAAKwpuC,2BAA6B,GAElCxpuC,KAAK2puC,sBAAwB7utC,OAC7B9a,KAAK0puC,iBAGP,CAEA,MAAMc,EAAsBX,EAAuB7puC,MACnD,IAAI,OAAQwquC,GAAsB,CAGhC,MAAMG,EAAiB3quC,KAAKwpuC,2BAC5B,IAAIjv+B,GAAU,EACd,KAAOA,GACyB,IAA1Bow+B,EAAe1nuC,QADL,CAKd,MAAM67oB,EAAO6rlB,EAAervtC,MAC5Bi/O,EAAUwv+B,EAAW/puC,KAAM8+oB,EAAM0rlB,GAC5Bjw+B,GACHow+B,EAAe/luC,KAAKk6oB,EAExB,CACF,CACF,EA6FA,QAAe,8BAAkB,I,4OC3QjC,SAAS8rlB,EAAsB7quC,GAC7BA,EAAUA,GAAW,IAAOw8mB,aAG5B,IAAMwH,OAAO3nlB,OAAO,gBAAiBr8B,EAAQs0nB,OAC7C,IAAMtQ,OAAO3nlB,OAAO,oBAAqBr8B,EAAQm0xB,WASjDl0xB,KAAKsE,KAAOvE,EAAQuE,OAAQ,EAQ5BtE,KAAK0+rB,YAAc,IAAQzzoB,MAAMlrD,EAAQ2+rB,aAAe,IAAQ5tC,UAchE9wpB,KAAKuo0B,QAAUxo0B,EAAQwo0B,SAAW,IAAWu0C,QAgB7C982B,KAAK6quC,mBAAqB9quC,EAAQ8quC,oBAAsB,IAMxD7quC,KAAK8quC,QAAU,IAAI,IAAkB/quC,EAAQ+quC,SA2B7C9quC,KAAKqmB,MAAQtmB,EAAQsmB,MAwBrBrmB,KAAK+quC,YAAc,IAAI,IAevB/quC,KAAKgruC,aAAe,IAAI,IAExBhruC,KAAKo/xB,OAASr/xB,EAAQs0nB,MACtBr0nB,KAAKm0xB,WAAap0xB,EAAQm0xB,UAC1Bl0xB,KAAKi82B,qBAAkB922B,EACvBnF,KAAKw82B,eAAiBz82B,EAAQy82B,eAC9Bx82B,KAAKm39B,2BAA6B,IAAI,IACtCn39B,KAAKk38B,oBAAiB/x8B,EACtBnF,KAAKo28B,qBAAuB,EAC5Bp28B,KAAKwu9B,aAAc,EACnBxu9B,KAAKi+4B,aAAU944B,EACfnF,KAAKiruC,yBAA2B,EAChCjruC,KAAKwkV,QAAU,GACfxkV,KAAKkruC,uBAAoB/luC,EACzBnF,KAAKmruC,mBAAgBhmuC,EACrBnF,KAAKoruC,wBAAqBjmuC,EAC1BnF,KAAKqruC,iBAAmB,EAGxBrruC,KAAKsruC,YAAc,EACnBtruC,KAAKuruC,eAAiB,EACtBvruC,KAAKwruC,cAAgB,EACrBxruC,KAAKyruC,gBAAkB,IAAIjruC,MAAM,GAAGqkE,KAAK,GACzC7kE,KAAK0ruC,gBAAkB,CACzB,CAqDA,SAASC,EAAwBzqqC,GAC/B,MAAO,gCAAgCA,GACzC,CAYA,SAAS0qqC,IACP,MAAO,eACT,CAnEArluC,OAAOgwE,iBAAiBq0pC,EAAsBnquC,UAAW,CAQvD+72B,eAAgB,CACdvm2B,IAAK,WACH,OAAOjW,KAAKi82B,eACd,EACArn1B,IAAK,SAAUvvB,GACb,IAAwB2y9B,SAAS3y9B,EAAOrF,KAAM,kBAChD,GAaFy69B,wBAAyB,CACvBxk9B,IAAK,WACH,OAAOjW,KAAKiruC,wBACd,GAWFl5mB,eAAgB,CACd97mB,IAAK,WACH,IAAI,OAAQjW,KAAKoruC,oBACf,OAAOpruC,KAAKoruC,mBAAmBlqE,WAAWnviB,cAG9C,KA0BJ64mB,EAAsBnquC,UAAU8+8B,eAAiB,WAC/Cv/8B,KAAKwu9B,aAAc,CACrB,EAOAo8Q,EAAsBnquC,UAAUoruC,oBAAsB,WACpD,OAA4B,IAAxB7ruC,KAAKuruC,eAEA,IAEFvruC,KAAK0ruC,eACd,EAEA,MAAMxsd,EAAc,IAAI,IAExB,SAAS4sd,EAAmBr8qC,GAC1B,MAAM4kkB,EAAQ5kkB,EAAK2vuB,OACb0qc,EAAcz1mB,EAAM0tB,YAAc1tB,EAAMkuB,cACxCr0Z,EAAammY,EAAMnmY,WACzB,OAAO47+B,EAAc57+B,EAAa,CACpC,CAEA,SAAS69+B,EAAiBt8qC,EAAMrkB,GAC9B,OAAOqkB,EAAK0kuB,WAAWprxB,QAAQqiC,EAASlnB,MAC1C,CAqDA,SAAS8ntC,EAAmBv8qC,EAAM00B,GAChC,OAAO,SAAU3wE,GACf,MAAM4qF,GAAU,OAAQ5qF,EAAM4qF,SAAW5qF,EAAM4qF,QAAU5qF,EAAMgS,WAC3DiqC,EAAKs7qC,YAAYr3iB,kBAAoB,EACvCjkoB,EAAKs7qC,YAAYholB,WAAW,CAC1B5+jB,IAAKA,EACLia,QAASA,KAGXziE,QAAQutF,IAAI,2BAA2B/kC,KACvCxoD,QAAQutF,IAAI,UAAU9qB,KAE1B,CACF,CAoFA,MAAMmmjC,EAAqB,IAAI,IAwBzB0nF,EAAiB,IAAI,IAE3B,SAASC,EAAYz8qC,EAAMiiQ,EAAOy66B,EAAahvgB,GAC7C,MAAM2tgB,EAAUr7qC,EAAKq7qC,SAAWmB,EAC1B/qE,EAAaxv2B,EAAMwv2B,WACnBt3oC,EAAY8nS,EAAM9nS,WAAa,IAAQknoB,SAC7CowgB,EAAWxie,YAAc,IAAQuvC,uBAC/Bx+qB,EAAKivoB,YACL90qB,EACA26nC,GAEF2c,EAAW76oC,MAAQopC,EAAKppC,MACxB66oC,EAAWnvhC,KAAOo6lC,EAAY3xQ,cAC9B0mM,EAAW34V,QAAU94wB,EAAK84wB,QAC1B24V,EAAW1kT,eAAiB/szB,EAAKwszB,gBACjCilT,EAAWnlJ,UAAYowN,EAAYpwN,UACnCmlJ,EAAWphM,YAAcgrQ,EAAQhrQ,YACjCohM,EAAW7oM,gBAAkByyQ,EAAQzyQ,gBACrC6oM,EAAWpvC,cAAgBg5G,EAAQh5G,cACnCovC,EAAW9tN,eAzCb,SAA2B3j5B,EAAMyxmC,GAC/B,MAAM4pE,EAAUr7qC,EAAKq7qC,QACrB,OAAI,OAAQA,KAAY,OAAQA,EAAQ3qF,gBAC/B2qF,EAAQ3qF,gBACN,OAAQ+gB,EAAWnviB,gBACrB,IAAWv8U,KAChB0r3B,EAAWnviB,eAAejC,SAAWoxiB,EAAW96M,cAG7C,CACT,CA+B8B4vH,CAAkBvmhC,EAAMyxmC,GACpDA,EAAW7gB,oBAAsByqF,EAAQzqF,oBACzC6gB,EAAWhhB,mBA/Bb,SAA+BzwlC,GAC7B,MAAMq7qC,EAAUr7qC,EAAKq7qC,QACrB,OAAI,OAAQA,KAAY,OAAQA,EAAQ5qF,oBAC/B4qF,EAAQ5qF,mBAIV,EACT,CAuBkCksF,CAAsB38qC,GAEtD,IACEyxmC,EAAW3yoC,OAAO4usB,EACpB,CAAE,MAAO3ptB,GACPw4tC,EAAmBv8qC,EAAMiiQ,EAAMvtO,IAA/B6npC,CAAoCx4tC,EACtC,CAEAk+S,EAAM266B,mBAAqBlvgB,EAAWgmK,WACxC,CAEA,SAASmpW,EAAU78qC,EAAMrkB,EAAU+gsC,EAAahvgB,GAC9C,MAAMzra,EA3IR,SAAsBjiQ,EAAMrkB,EAAU+xrB,GACpC,MAAMritB,EAAQixtC,EAAiBt8qC,EAAMrkB,GAC/BurS,EAASlnR,EAAK+0R,QACpB,IAAI9yB,EAAQilB,EAAO77T,GACnB,KAAK,OAAQ42S,GAAQ,CACnB,MAAM666B,EAAiBnhsC,EAAS9pC,KAAKsoB,UAC/BA,GAAY,OAAQ2itC,GACtB,IAAQt4mB,UAAUs4mB,QAClBpnuC,EACEg/E,EAAM/4C,EAAS9pC,KAAK6iF,IAC1ButO,EAAQ,CACNwv2B,gBAAY/7pC,EACZykB,UAAWA,EACX63I,WAAW,SACXw7L,YAAY,EACZ78M,OAAO,EACPislC,mBAAoBlvgB,EAAWgmK,YAC/Bh/yB,IAAKA,GAEPwyP,EAAO77T,GAAS42S,EAChB,IAAS0vT,iBAAiB,CACxBj0mB,IAAKg3E,IAEJhpD,KAAK,SAAUy7L,GAzItB,IAA6Bt6I,EA4IrBo1O,EAAMwv2B,WAAa,IAAI,IAAW,CAChCtq8B,YAAaA,EACb2nrB,MAAM,EACNmiR,qBAAsBirE,EACtB/qE,kBAhJmBtklC,EAgJmB7sB,EA/IvC,SAAUw50B,GACf,OAAO,OAAQA,EAAY,CACzBumH,cAAe,WACb,OAAOlz6B,EAAO2h0B,QAAQp8zB,KACxB,GAEJ,GA0IQm/kC,aAAc4qE,GAElB,GACC/upC,MAAMmvpC,EAAmBv8qC,EAAM00B,GACpC,CACA,OAAOutO,CACT,CAsGgB866B,CAAa/8qC,EAAMrkB,EAAU+xrB,IAxF7C,SAAsB1tqB,EAAMiiQ,EAAOy66B,EAAahvgB,GAC1Czra,EAAM266B,mBAAqBlvgB,EAAWgmK,YAAc,IAGtDzxkB,EAAMurC,YAAa,GAGrB,MAAMik0B,EAAaxv2B,EAAMwv2B,WAEzB,IAAI,OAAQA,KAAgBxv2B,EAAMtxK,MAAO,CAEvC,MAAMwwsB,EAAczzH,EAAWyzH,YACzB2uI,EAAqB3uI,EAAY3t1B,OACvCipuC,EAAYz8qC,EAAMiiQ,EAAOy66B,EAAahvgB,GAElC+jc,EAAW9ghC,QAEbsxK,EAAMtxK,OAAQ,EACd3wF,EAAKw7qC,0BAA4B/pE,EAAW56M,mBAC5C11H,EAAY3t1B,OAASs89B,EACjB7tqB,EAAMurC,aAhChB,SAA+BxtS,EAAMg9qC,GACnCh9qC,EAAK67qC,aAAemB,EACpBh9qC,EAAK67qC,aAAe77qC,EAAKg8qC,gBAAgBh8qC,EAAK+7qC,eAC9C/7qC,EAAKg8qC,gBAAgBh8qC,EAAK+7qC,eAAiBiB,EAC3Ch9qC,EAAK87qC,eAAiBx9tC,KAAKqV,IACzBqsC,EAAK87qC,eAAiB,EACtB97qC,EAAKg8qC,gBAAgBxouC,QAEvBwsD,EAAK+7qC,eAAiB/7qC,EAAK+7qC,cAAgB,GAAK/7qC,EAAKg8qC,gBAAgBxouC,OACrEwsD,EAAKi8qC,gBAAkBj8qC,EAAK67qC,YAAc77qC,EAAK87qC,cACjD,CAyBQmB,CAAsBj9qC,IADJ,SAAiBiiQ,EAAMjwJ,WAAa,IAI5D,CAEAiwJ,EAAM266B,mBAAqBlvgB,EAAWgmK,WACxC,CA4DEwpW,CAAal9qC,EAAMiiQ,EAAOy66B,EAAahvgB,EACzC,CASA,SAASyvgB,EAAan9qC,EAAMo9qC,GAC1B,MAAMl25B,EAASlnR,EAAK+0R,QACdvhV,EAAS0zU,EAAO1zU,OACtB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAMysT,EAAQilB,EAAO1xU,GACrB,IAAI,OAAQysT,OACL,OAAQm76B,IAAoBA,EAAgBn76B,IAAQ,CACvD,MAAMwv2B,EAAaxv2B,EAAMwv2B,WACrBxv2B,EAAMtxK,QACR3wF,EAAKw7qC,0BAA4B/pE,EAAW56M,qBAE1C,OAAQ46M,IACVA,EAAW9loC,UAETs2R,IAAUjiQ,EAAK27qC,qBACjB37qC,EAAK27qC,wBAAqBjmuC,GAE5BwxU,EAAO1xU,QAAKE,CACd,CAEJ,CACF,CAUA,SAAS2nuC,EAAer9qC,EAAMrkB,EAAUsmR,EAAOy66B,EAAahvgB,GAC1D,SAAI,OAAQzra,OACNA,EAAMtxK,QAGVkslC,EAAU78qC,EAAMrkB,EAAU+gsC,EAAahvgB,GAChCzra,EAAMtxK,OAGjB,CAqDA,MAAM+rlC,EAAc,CAClB3xQ,cAAe,EACfuhD,WAAW,EACXrnE,qBAAqB,GAMvBk2R,EAAsBnquC,UAAU8tB,OAAS,SAAU4usB,GACjD,GAAIA,EAAWxunB,OAAS,IAAU6kvB,SAChC,OAGF,IAAKxz1B,KAAKsE,KACR,QAGG,OAAQtE,KAAKi+4B,WAChBj+4B,KAAKi+4B,QAAU9gL,EAAWvmtB,QAAQ6g4B,aAAa,CAC7C14yB,UAAW/+F,SAIV,OAAQA,KAAKk38B,kBAChBl38B,KAAKk38B,eAAiB,IAAWjs5B,MAAMkyqB,EAAWprlB,OAIpD,MAAMyo1B,EAAgBzs9B,KAAK8R,IAC4C,IAArE,IAAWojoB,kBAAkBk6E,EAAWprlB,KAAM/xI,KAAKk38B,gBACnD,GAII16F,EAAiBx82B,KAAKi82B,gBAC5B,IAAIoiG,EAAsB,EACtB3J,GAAsB,EAC1B,MAAMqnE,GAAY,OAAQv/J,IAAmBA,EAAev21B,QAExD81/B,IACFv/J,EAAeju1B,OAAO4usB,GACtBkhP,EAAsB7hG,EAAe6hG,qBAGnCr+8B,KAAKo28B,uBAAyBiI,IAChCr+8B,KAAKo28B,qBAAuBiI,EAC5B3J,GAAsB,GAGxB,MAAMia,EAAa3u9B,KAAKwu9B,YACxBxu9B,KAAKwu9B,aAAc,GAEf9Z,GAAuBia,IAjE7B,SAAwBl/5B,EAAMil5B,EAAqBia,GACjD,MAAMh4oB,EAASlnR,EAAK+0R,QACduo5B,EAAep25B,EAAO1zU,OAC5B,IAAK,IAAIgC,EAAI,EAAGA,EAAI8nuC,IAAgB9nuC,EAAG,CACrC,MAAMysT,EAAQilB,EAAO1xU,IACjB,OAAQysT,KAAU,OAAQA,EAAMwv2B,cAClCxv2B,EAAMwv2B,WAAWxsN,oBAAsBA,EACvChjpB,EAAMwv2B,WAAWvyM,WAAaA,EAElC,CACF,CAwDIq+Q,CAAehtuC,KAAM008B,EAAqBia,GAG5Cw9Q,EAAY3xQ,cAAgBA,EAC5B2xQ,EAAYpwN,UAAYA,EAExB,MAAM+uN,EAAU9quC,KAAK8quC,QACf/qQ,EAAkB//9B,KAAKm39B,2BAEvBvmI,EAAczzH,EAAWyzH,YACzB2uI,EAAqB3uI,EAAY3t1B,OAEvC,IAAIgquC,EAAmBjtuC,KAAKkruC,kBACxBgC,EAAeltuC,KAAKmruC,cACxB,MAAMf,EA3VR,SAA4B36qC,GAC1B,MAAMykuB,EAAYzkuB,EAAK0kuB,WAEjBpipB,EADQtiF,EAAK2vuB,OACAtloB,YACbh/I,EAAQo5wB,EAAUnrxB,QAAQgpI,GAGhC,OAAOmipB,EAAUj+wB,IAAI6E,EACvB,CAmV0BqytC,CAAmBntuC,MAE3C,KAAK,OAAQoquC,GACX,OAGF,IAAIgD,GAAyB,EAC7B,MAAMC,EAAkBvB,EAAmB9ruC,MACrCstuC,EAAkC,IAApBD,EAChBA,IAAoBrtuC,KAAKqruC,mBAC3B+B,GAAyB,EACzBptuC,KAAKqruC,iBAAmBgC,IAGrB,OAAQJ,KAAqBK,IAChCL,EAAmB7C,MAIlB,OAAQ8C,IACTE,GArWJ,SAAyB39qC,EAAM26qC,EAAiB8C,GAC9C,MAAMh/+B,EAAa49+B,EAAmBr8qC,GAChC8xoB,EAAewqiB,EAAiBt8qC,EAAM26qC,GACtC3piB,EAAYsriB,EAAiBt8qC,EAAMy9qC,GAEzC,OAAIh/+B,GAAc,EACTqzc,GAAgBd,EAElBc,GAAgBd,CACzB,CA6VI8siB,CAAgBvtuC,KAAMoquC,EAAiB8C,MAEvCA,EAhZJ,SAAyBz9qC,EAAM26qC,GAC7B,MAAMl2c,EAAYzkuB,EAAK0kuB,WACjB9/J,EAAQ5kkB,EAAK2vuB,OACblxiB,EAAa49+B,EAAmBr8qC,GAEtC,GAAmB,IAAfy+L,EACF,OAGF,MAAMs/+B,EAAkB/9qC,EAAKo8qC,sBACvB95lC,EAAO,IAAW8wgB,WACtBxuB,EAAMv6d,YACN0zkC,EAAkBt/+B,EAClBgxhB,GAEF,IAAIpkwB,EAAQo5wB,EAAUnrxB,QAAQgpI,GAY9B,OATIj3H,IADiBixtC,EAAiBt8qC,EAAM26qC,KAEtCl8+B,GAAc,IACdpzO,IAEAA,GAKCo5wB,EAAUj+wB,IAAI6E,EACvB,CAoXmB2ytC,CAAgBztuC,KAAMoquC,IAGvC6C,EAjJF,SACEx9qC,EACAw9qC,EACA7C,EACA+B,EACAhvgB,GAEA,IAAIl4tB,EACAmmC,EACAsmR,EACJ,MAAMwie,EAAYzkuB,EAAK0kuB,WACjBx9c,EAASlnR,EAAK+0R,QACd+8W,EAAewqiB,EAAiBt8qC,EAAM26qC,GACtCh9c,EAAgB2+c,EAAiBt8qC,EAAMw9qC,GAE7C,GAAI1riB,GAAgB6rF,GAElB,IAAKnoxB,EAAIs8rB,EAAct8rB,GAAKmoxB,IAAiBnoxB,EAG3C,GAFAmmC,EAAW8ovB,EAAUj+wB,IAAIhR,GACzBysT,EAAQilB,EAAO1xU,GACX6nuC,EAAer9qC,EAAMrkB,EAAUsmR,EAAOy66B,EAAahvgB,GACrD,OAAO/xrB,OAKX,IAAKnmC,EAAIs8rB,EAAct8rB,GAAKmoxB,IAAiBnoxB,EAG3C,GAFAmmC,EAAW8ovB,EAAUj+wB,IAAIhR,GACzBysT,EAAQilB,EAAO1xU,GACX6nuC,EAAer9qC,EAAMrkB,EAAUsmR,EAAOy66B,EAAahvgB,GACrD,OAAO/xrB,EAMb,OAAO6hsC,CACT,CA4GqBS,CACjB1tuC,KACAituC,EACA7C,EACA+B,EACAhvgB,GAEF,IAAIzra,EA3KN,SAAkBjiQ,EAAMrkB,GACtB,MAAMtwB,EAAQixtC,EAAiBt8qC,EAAMrkB,GAC/BsmR,EAAQjiQ,EAAK+0R,QAAQ1pU,GAC3B,IAAI,OAAQ42S,IAAUA,EAAMtxK,MAC1B,OAAOsxK,CAEX,CAqKci86B,CAAS3tuC,KAAMituC,IAEtB,OAAQv76B,KAGX466B,EAAUtsuC,KAAMituC,EAAkBd,EAAahvgB,GAC/Czra,EAAQ1xT,KAAKoruC,qBAGX,OAAQ156B,IACVw66B,EAAYlsuC,KAAM0xT,EAAOy66B,EAAahvgB,IAGpC,OAAQ+vgB,IAEVZ,EAAUtsuC,KAAMktuC,EAAcf,EAAahvgB,GAG7C,MAAM1tqB,EAAOzvD,MACT,OAAQ0xT,MAAW,OAAQ1xT,KAAKoruC,qBAClCjugB,EAAW1kjB,YAAY7zK,KAAK,WAC1B,OAAO,CACT,IAGE,OAAQ8sT,IAAUA,IAAU1xT,KAAKoruC,oBAC/B37qC,EAAKu7qC,aAAat3iB,kBAAoB,GACxCypC,EAAW1kjB,YAAY7zK,KAAK,WAE1B,OADA6qD,EAAKu7qC,aAAajolB,WAAWtzlB,IACtB,CACT,GAIJzvD,KAAKkruC,kBAAoB+B,EACzBjtuC,KAAKmruC,cAAgB+B,EACrBltuC,KAAKoruC,mBAAqB156B,EAEM1xT,KAAKiruC,yBACuB,KAA1BjruC,KAAK6quC,mBAA4B,MAGjE+B,EAAa5suC,KAnPjB,SAA4Bm9tB,GAC1B,OAAO,SAAUzra,GAEf,OAAOA,EAAM266B,mBAAqBlvgB,EAAWgmK,WAC/C,CACF,CA8OuByqW,CAAmBzwgB,IAGxC,MACMuiQ,EADoB9uI,EAAY3t1B,OACUs89B,GAG9C,OAAQurQ,IACRA,EAAQhrQ,aACRgrQ,EAAQ/qQ,iBACRL,EAAsB,GAEtBK,EAAgBxx8B,OACd4usB,EACAoiQ,EACAurQ,EACA9quC,KAAK+xnB,eAGX,EAYA64mB,EAAsBnquC,UAAU05B,YAAc,WAC5C,OAAO,CACT,EAiBAywsC,EAAsBnquC,UAAU26B,QAAU,WAIxC,OAHAwxsC,EAAa5suC,MACbA,KAAKi82B,gBAAkBj82B,KAAKi82B,iBAAmBj82B,KAAKi82B,gBAAgB7g1B,UACpEp7B,KAAKi+4B,QAAUj+4B,KAAKi+4B,SAAWj+4B,KAAKi+4B,QAAQ7i3B,WACrC,OAAcp7B,KACvB,EACA,QAAe,8BAAqB,I,qDC5xBpC,MAAM6tuC,EAAa,CAOjB53D,SAAU,WAQVE,kBAAmB,oBAQnBE,OAAQ,SAQRy3D,KAAM,OAQNv5D,YAAa,eASR,SAASw5D,EAAmBz5D,GACjC,OACEA,IAAeu5D,EAAW53D,UAC1B3B,IAAeu5D,EAAW13D,mBAC1B7B,IAAeu5D,EAAWx3D,QAC1B/B,IAAeu5D,EAAWC,MAC1Bx5D,IAAeu5D,EAAWt5D,WAE9B,CAEA,QAAehuqC,OAAOivmB,OAAOq4nB,E,8PCnC7B,SAASG,EAA8Bp3tC,GACrC5W,KAAKiuuC,uBAAyB,IAAI,IAAmB,CACnDlsV,wBAAwB,IAE1B/h5B,KAAKkuuC,iBAAmB,IAAI,IAAmB,CAC7CnsV,wBAAwB,IAE1B/h5B,KAAKmuuC,SAAW,IAAI,IAEpBnuuC,KAAKouuC,gCAA6BjpuC,EAGlCnF,KAAKquuC,yBAAsBlpuC,EAE3BnF,KAAKsuuC,qCAAkCnpuC,EAEvCnF,KAAKuuuC,uBAAoBppuC,EACzBnF,KAAKwuuC,wBAAqBrpuC,EAC1BnF,KAAKorpC,uBAAoBjmpC,EACzBnF,KAAKyuuC,kBAAetpuC,EAEpBnF,KAAKqjlC,mBAAqB,IAAI,IAAa,CACzCxhgC,MAAO,IAAI,IAAM,EAAK,EAAK,EAAK,GAChCurvB,MAAOpt0B,OAGTA,KAAK0uuC,0BAA4B,IAAI,IAAa,CAChD19lC,MAAO,EACP03vB,QAAS,EACTt7D,MAAOpt0B,OAGTA,KAAK2uuC,WAAa/3tC,EAAQg93B,aAE1B5z4B,KAAK+/5B,UAAY,IAAI,IACrB//5B,KAAK4uuC,cAAWzpuC,EAChBnF,KAAK6uuC,mBAAgB1puC,EACrBnF,KAAK8uuC,aAAU3puC,EACfnF,KAAK83gC,qBAAkB3ygC,EACvBnF,KAAK+3gC,uBAAoB5ygC,EAEzBnF,KAAK+uuC,sBAAuB,EAC5B/uuC,KAAKgvuC,eAAiB,CACxB,CAiBA,SAASxjF,EAAgByjF,GACvBA,EAAYZ,yBAAsBlpuC,EAElC8puC,EAAYX,gCACVW,EAAYX,kCACXW,EAAYX,gCAAgCn0sC,eAC7C80sC,EAAYX,gCAAgClzsC,SAChD,CAEA,SAAS474B,EAAoBi4T,GAC3BA,EAAYhB,uBAAuB7ysC,UACnC6zsC,EAAYf,iBAAiB9ysC,UAC7B6zsC,EAAYd,SAAS/ysC,SACvB,CA5BA70B,OAAOgwE,iBAAiBy3pC,EAA8BvtuC,UAAW,CAQ/D+gsC,oBAAqB,CACnBvrrC,IAAK,WACH,OAAOjW,KAAK+uuC,oBACd,KAiQJf,EAA8BvtuC,UAAU48rC,2BAA6B,SACnEvh3B,EACA0g3B,EACA5zT,EACAwuC,EACA83T,GAGA,MAAMprP,EAAchoqB,EAAMqhZ,WAAW2mR,YAC/Blt+B,EAAUklU,EAAMllU,QAChB+x3B,EAAcC,EAAUD,YAE9B,IAAK,IAAI1j4B,EAAI,EAAGA,EAAImy6B,EAASn06B,SAAUgC,EAAG,CACxC,IAAIi64B,EAAUk4B,EAASny6B,GAGvB,GAFAi64B,EAAU4kG,EAAc5kG,EAAQF,gBAAgBmvQ,SAASjvQ,QAAUA,EAE/DA,EAAQJ,kCAAmC,CAC7C9+4B,KAAK+uuC,sBAAuB,EAC5B,KACF,CACF,CAEA,GAAK/uuC,KAAK+uuC,qBAAV,EAxOF,SACEE,EACAr4tC,EACAgy3B,EACAsmW,GAEA,IAAKD,EAAYnmsC,cACf,OAGFmmsC,EAAYb,2BAA6Bc,EAEzC,MAAM/nuC,EAAQ8nuC,EAAYb,2BAA2BjnuC,MAC/CrF,EAASmtuC,EAAYb,2BAA2BtsuC,OAMtD,IAAIo/D,EACA+n0B,EAsBJ,GA5BIgmW,EAAYhB,uBAAuBp/iC,QAAQ1nL,EAAOrF,KA1CxD,SAAwBmtuC,EAAar4tC,EAASzP,EAAOrF,GACnD0ppC,EAAgByjF,GAEhBA,EAAYX,gCAAkC,IAAI,IAAQ,CACxD13tC,QAASA,EACTzP,MAAOA,EACPrF,OAAQA,EACR+ivB,YAAa,IAAYpC,cACzB3zF,cAAe,IAAc09J,kBAC7B4sF,QAAS,IAAQ78F,SAErB,CAgCIuvW,CAAemjF,EAAar4tC,EAASzP,EAAOrF,GA9BhD,SAA4BmtuC,EAAar4tC,EAASzP,EAAOrF,GACvDk16B,EAAoBi4T,GACpBA,EAAYhB,uBAAuB/qV,uBACjC+rV,EAAYX,iCAEdW,EAAYhB,uBAAuB1/sC,OAAO3X,EAASzP,EAAOrF,GAE1DmtuC,EAAYf,iBAAiBhrV,uBAC3B+rV,EAAYX,iCAEdW,EAAYf,iBAAiB3/sC,OAAO3X,EAASzP,EAAOrF,GAEpDmtuC,EAAYd,SAAS5/sC,OAAO3X,EAASzP,EAAOrF,EAC9C,CAkBIuqpC,CAAmB4iF,EAAar4tC,EAASzP,EAAOrF,KAM7C,OAAQmtuC,EAAYV,qBACvBrtqC,EAAK,IAAI,IAAa,CACpB0jH,QAAS,CAAC,OAGZqktB,EAAa,CACXkmW,qBAAsB,WACpB,OAAOF,EAAYb,0BACrB,EACAgB,0BAA2B,WACzB,OAAOH,EAAYX,+BACrB,GAGFW,EAAYV,kBAAoB33tC,EAAQyg4B,0BAA0Bn20B,EAAI,CACpE+n0B,WAAYA,EACZ77D,MAAO6ha,OAIN,OAAQA,EAAY7jF,mBAAoB,CAC3ClqlC,EAAK,IAAI,IAAa,CACpB0jH,QAAS,CAAC,OAGZqktB,EAAa,CACXm/B,aAAc,WACZ,OAAO6mU,EAAYZ,mBACrB,GAUFY,EAAY7jF,kBAAoBx0oC,EAAQyg4B,0BAA0Bn20B,EAAI,CACpE+n0B,WAAYA,EACZ77D,MAAO6ha,IAGT,MAAMI,EAAmBJ,EAAY7jF,kBAC/BkkF,EAAmBD,EAAiBrmW,cACpCumW,EAAuB34tC,EAAQw83B,YAAYic,2BAC/CigV,EACA,OACA,CACEtlW,mBAAoBslW,EAAiBtlW,mBACrCjB,qBAAsB,IAAI,IAAa,CACrCnktB,QAAS1jH,EAAG0jH,QACZkpuB,QAAS,CAAC,UAEZ7jB,mBAAoBqlW,EAAiBtyV,sBAGnCwyV,EAAuB,IAAYlwV,aAAa+vV,GACtDG,EAAqBxmW,cAAgBumW,EACrCF,EAAiBrwV,gBAAgBxwqB,KAAOghgC,CAC1C,EAEK,OAAQP,EAAYR,gBACvBvtqC,EAAK,IAAI,IAAa,CACpB0jH,QAAS,CAAC,OAGZqktB,EAAa,CACXm/B,aAAc,WACZ,OAAO6mU,EAAYhB,uBAAuBr3V,iBAC5C,GAGFq4V,EAAYR,aAAe73tC,EAAQyg4B,0BAA0Bn20B,EAAI,CAC/D+n0B,WAAYA,EACZ77D,MAAO6ha,MAIN,OAAQA,EAAYT,sBACvBttqC,EAAK,IAAI,IAAa,CACpB0jH,QAAS,CAAC,OAGZqktB,EAAa,CACXm/B,aAAc,WACZ,OAAO6mU,EAAYhB,uBAAuBr3V,iBAC5C,GAGFq4V,EAAYT,mBAAqB53tC,EAAQyg4B,0BAA0Bn20B,EAAI,CACrE+n0B,WAAYA,EACZ77D,MAAO6ha,KAIXA,EAAYlvU,UAAU545B,MAAQA,EAC9B8nuC,EAAYlvU,UAAUj+5B,OAASA,EAE/B,MAAMq2gC,GAAkB,IAAkBlp6B,OACxCggoC,EAAYlvU,UACZn3B,EAAUxk3B,UAEZ,IAAIg0/B,EAAgBD,IAAmB82N,EAAYn3N,gBACnDm3N,EAAYn3N,gBAAkBK,EAG3B,IAAkBlp6B,OAAOggoC,EAAYl3N,kBAAmBnvI,EAAUxk3B,YAEnE6qtC,EAAYl3N,kBAAoB,IAAkB9s9B,MAChD290B,EAAUxk3B,SACV6qtC,EAAYl3N,mBAEdK,GAAgB,IAIf,OAAQ62N,EAAYL,WACpB,IAAkB3/nC,OACjBggoC,EAAYlvU,UACZkvU,EAAYL,SAASxqtC,YAEvBg0/B,IAEA62N,EAAYL,SAAW,IAAY7kW,UAAU,CAC3C3l3B,SAAU6qtC,EAAYlvU,UACtBnb,YAAa,CACX3+3B,QAASgptC,EAAYn3N,gBACrBl+Z,UAAWq1nB,EAAYl3N,uBAKzB,OAAQk3N,EAAYV,qBACtBU,EAAYV,kBAAkBnqZ,YAAc6qZ,EAAYL,WAIvD,OAAQK,EAAYJ,gBACpB,IAAkB5/nC,OACjBggoC,EAAYlvU,UACZkvU,EAAYJ,cAAczqtC,YAE5Bg0/B,IAEA62N,EAAYJ,cAAgB,IAAY9kW,UAAU,CAChD3l3B,SAAU6qtC,EAAYlvU,UACtBnb,YAAa,CACX3+3B,QAASgptC,EAAYn3N,gBACrBl+Z,UAAWq1nB,EAAYl3N,mBAEzBlyH,YAAa,CACX5/3B,SAAS,EACT2g4B,cAAe,IAAgBprG,MAC/Bl3xB,UAAW,IAAiBqg8B,yBAK9B,OAAQsqR,EAAYT,sBACtBS,EAAYT,mBAAmBpqZ,YAAc6qZ,EAAYJ,gBAIxD,OAAQI,EAAYH,UACpB,IAAkB7/nC,OACjBggoC,EAAYlvU,UACZkvU,EAAYH,QAAQ1qtC,YAEtBg0/B,IAEA62N,EAAYH,QAAU,IAAY/kW,UAAU,CAC1C3l3B,SAAU6qtC,EAAYlvU,UACtBnb,YAAa,CACX3+3B,QAASgptC,EAAYn3N,gBACrBl+Z,UAAWq1nB,EAAYl3N,mBAEzBpyH,SAAU,IAAcusB,gBAIxB,OAAQ+8T,EAAY7jF,qBACtB6jF,EAAY7jF,kBAAkBhnU,YAAc6qZ,EAAYH,QACxDG,EAAY7jF,kBAAkBpsQ,gBAAgBxwqB,KAAK41mB,YACjD6qZ,EAAYH,QAElB,EA4BEt7M,CAAgBxzhC,KAAM4W,EAASgy3B,EAAWsmW,GAG1CtmW,EAAUD,YAAc3o4B,KAAKiuuC,uBAAuBtlW,YAGpD3o4B,KAAK0uuC,0BAA0BjwsC,QAAQ7nB,EAASgy3B,GAEhD,IAAK,IAAI3j4B,EAAI,EAAGA,EAAImy6B,EAASn06B,SAAUgC,EAAG,CACxC,IAAIi64B,EAAUk4B,EAASny6B,IACvBi64B,EAAU4kG,EAAc5kG,EAAQF,gBAAgBmvQ,SAASjvQ,QAAUA,EAE9DA,EAAQJ,oCAMb09S,EADyBt9S,EAAQF,gBAAgBhuwB,MAAMqz2B,iBACtBvoqB,EAAO8sjB,EAC1C,CAEA5o4B,KAAKgvuC,gBAAkBhvuC,KAAK+uuC,qBAAuB,EAAI,EAGnD/uuC,KAAK+uuC,uBACPnmW,EAAUD,YAAc3o4B,KAAKmuuC,SAASxlW,YACtC3o4B,KAAKuuuC,kBAAkB9vsC,QAAQ7nB,EAASgy3B,IAG1CA,EAAUD,YAAcA,CA/BxB,CAgCF,EAEAqlW,EAA8BvtuC,UAAUg9rC,8BACtC,SAAU3h3B,EAAO0g3B,EAAgB5zT,EAAWoxJ,GAC1C,IAAKh6hC,KAAK+uuC,qBACR,OAGF,MAAMn4tC,EAAUklU,EAAMllU,QAChBwl3B,EAAexl3B,EAAQwl3B,aACvBuM,EAAcC,EAAUD,YAE9BC,EAAUD,YAAc3o4B,KAAKkuuC,iBAAiBvlW,YAC9C3o4B,KAAKwuuC,mBAAmB/vsC,QAAQ7nB,EAASgy3B,GAEzCA,EAAUD,YAAc3o4B,KAAKiuuC,uBAAuBtlW,YAChD3o4B,KAAKgvuC,eAAiB,GACxBhvuC,KAAKqjlC,mBAAmB5kjC,QAAQ7nB,EAASgy3B,GAG3CxM,EAAayrC,WAAW,IAAK1jB,+BAC7B,MAAMsrV,EAAiBrzW,EAAaM,kBACpCN,EAAaM,kBAAoB183B,KAAKmuuC,SAASv3V,kBAC/C,MAAMwgC,EACJ4iH,EAAgB5iH,SAAS,IAAKjzB,+BAC1Blh5B,EAAS+2hC,EAAgBn31B,QAAQ,IAAKshtB,+BAC5C,IAAK,IAAIl/4B,EAAI,EAAGA,EAAIhC,IAAUgC,EAC5Bu3rC,EAAeplR,EAASny6B,GAAI62U,EAAO8sjB,GAGrCxM,EAAaM,kBAAoB+yW,EACjC7mW,EAAUD,YAAcA,EAEI,IAAxB3o4B,KAAKgvuC,iBAITpmW,EAAUD,YAAc3o4B,KAAKkuuC,iBAAiBvlW,YAC9C3o4B,KAAKwuuC,mBAAmB/vsC,QAAQ7nB,EAASgy3B,GAEzCA,EAAUD,YAAcA,EAC1B,EAEFqlW,EAA8BvtuC,UAAUg+B,QAAU,SAAUq9S,EAAO8sjB,GAC5D5o4B,KAAK+uuC,uBAGkB,IAAxB/uuC,KAAKgvuC,eACPhvuC,KAAKquuC,oBAAsBruuC,KAAKiuuC,uBAAuBr3V,kBAEvD524B,KAAKquuC,oBAAsBruuC,KAAKkuuC,iBAAiBt3V,mBAGnC96jB,EAAMqhZ,WAAW0lN,OAAOr0sB,KACpCxuO,KAAKorpC,kBAAkBpsQ,gBAAgBxwqB,KACvCxuO,KAAKorpC,mBACD3snC,QAAQq9S,EAAMllU,QAASgy3B,GAKjC,SAAe40T,EAA+B1h3B,EAAO8sjB,GACnD,IAAK40T,EAA8BuxC,qBACjC,OAGF,MAAMpmW,EAAcC,EAAUD,YAE9BC,EAAUD,YACR60T,EAA8BywC,uBAAuBtlW,YACvD60T,EAA8Bn6G,mBAAmB5kjC,QAC/Cq9S,EAAMl8I,SACNgpsB,GAGFA,EAAUD,YAAcA,EAEpB60T,EAA8BwxC,eAAiB,IACjDpmW,EAAUD,YACR60T,EAA8B0wC,iBAAiBvlW,YACjD60T,EAA8Bn6G,mBAAmB5kjC,QAC/Cq9S,EAAMl8I,SACNgpsB,IAIJ40T,EAA8BuxC,sBAAuB,EACrDvxC,EAA8BwxC,eAAiB,CACjD,CA9BEpouC,CAAM5G,KAAM87U,EAAO8sjB,GACrB,EA+BAolW,EAA8BvtuC,UAAUqoC,YAAc,WACpD,OAAO9oC,KAAK2uuC,UACd,EAEAX,EAA8BvtuC,UAAU05B,YAAc,WACpD,OAAO,CACT,EAEA6zsC,EAA8BvtuC,UAAU26B,QAAU,WAehD,OAdAownC,EAAgBxrpC,MAChBg36B,EAAoBh36B,OAEhB,OAAQA,KAAKorpC,qBACfprpC,KAAKorpC,kBAAkBpiR,cACrBhp4B,KAAKorpC,kBAAkBpiR,eACvBhp4B,KAAKorpC,kBAAkBpiR,cAAc5t2B,YAGrC,OAAQp7B,KAAKuuuC,qBACfvuuC,KAAKuuuC,kBAAkBvlW,cACrBhp4B,KAAKuuuC,kBAAkBvlW,eACvBhp4B,KAAKuuuC,kBAAkBvlW,cAAc5t2B,YAElC,OAAcp7B,KACvB,EAEA,QAAe,8BAA6B,I,wIC/e5C,SAAS0vuC,EACP5lS,EACA6lS,EACApnS,EACAC,EACAtq4B,EACAvgE,EACAk62B,EACAtp1B,EACAuwH,EACA0wC,GAEAxvL,KAAK20rC,QAAU7qP,EACf9p8B,KAAK4vuC,SAAWD,EAEhB3vuC,KAAK6vuC,cAAe,OAAMtnS,GAC1Bvo8B,KAAK8vuC,aAAc,OAAMtnS,GAEzBxo8B,KAAKuhoC,UAAYrjkC,EACjBl+D,KAAKi2M,OAASt4M,EACdqC,KAAK+vuC,gBAAkBl4X,EAEvB732B,KAAKutG,QAAUh/E,EACfvuB,KAAK+vpC,UAAYjxgC,EAQjB9+I,KAAKwvL,OAASA,EAKdxvL,KAAKgwuC,YAAa,CACpB,CA0HA,SAASC,IACPjwuC,KAAK20rC,QAAU,EACjB,CA1HApurC,OAAOgwE,iBAAiBm5pC,EAAMjvuC,UAAW,CAQvC8n8B,YAAa,CACXty7B,IAAK,WACH,OAAOjW,KAAK6vuC,YACd,GAUFrnS,WAAY,CACVvy7B,IAAK,WACH,OAAOjW,KAAK8vuC,WACd,GAUF5xqC,SAAU,CACRjoD,IAAK,WACH,OAAOjW,KAAKuhoC,SACd,GAUF5joC,MAAO,CACLsY,IAAK,WACH,OAAOjW,KAAKi2M,MACd,GAUF4hqB,eAAgB,CACd5h2B,IAAK,WACH,OAAOjW,KAAK+vuC,eACd,GAUFxhtC,OAAQ,CACNtY,IAAK,WACH,OAAOjW,KAAKutG,OACd,GAUFuxC,SAAU,CACR7oI,IAAK,WACH,OAAOjW,KAAK+vpC,SACd,GAQF4/E,QAAS,CACP15tC,IAAK,WACH,OAAOjW,KAAK4vuC,QACd,KAQJF,EAAMjvuC,UAAU4o8B,YAAc,WAC5Brp8B,KAAK20rC,QAAQ7urC,OAAO9F,KACtB,EAcAuG,OAAOgwE,iBAAiB05pC,EAAgBxvuC,UAAW,CAQjDwC,OAAQ,CACNgT,IAAK,WACH,OAAOjW,KAAK20rC,QAAQ1xrC,MACtB,KAqBJgtuC,EAAgBxvuC,UAAUy4B,IAAM,SAAUn5B,GAIxC,GAHAA,EAAUA,GAAW,IAAOw8mB,eAGvB,OAAQx8mB,EAAQwo8B,gBAAiB,OAAQxo8B,EAAQyo8B,YACpD,MAAM,IAAI,IACR,4DAIJ,KAAK,OAAQzo8B,EAAQm+D,WAAan+D,EAAQm+D,SAAW,EACnD,MAAM,IAAI,IACR,sDAKJ,GAAyB,IAArBn+D,EAAQm+D,SAIV,OAHI,OAAQn+D,EAAQ++I,WAClB/+I,EAAQ++I,WAEH,IAAI4wlC,EAAM1vuC,MAGnB,MAAMk+D,EAAWn+D,EAAQm+D,SAAW,IAAcsiqB,wBAC5C0vgB,EAAiBnwuC,EAAQpC,OAAS,EAClCA,EAAQuyuC,EAAiB,IAAc1vgB,wBACvCq3I,EAAiB932B,EAAQ832B,gBAAkB,IAAex8L,YAE1Dh2qB,EAAQtF,EAAQwo8B,YAChBonS,EAAU,IAAI,IAAQtquC,GAC5BsquC,EAAQhjsC,IAAG,OAAM5sC,EAAQyo8B,YAAatq4B,GACtCyxqC,EAAQhyuC,MAAMA,GACdgyuC,EAAQ/gkC,OAAOipsB,IACX,OAAQ932B,EAAQwuB,SAClBohtC,EAAQQ,SAAS,WACfpwuC,EAAQwuB,OAAOlpB,EACjB,GAEFsquC,EAAQhk0B,WAAW5ra,EAAQ++I,UAAY,MACvC6wlC,EAAQ57+B,OAAOh0P,EAAQqwN,SAAW,GAElC,MAAM0wC,EAAQ,IAAI4u+B,EAChB1vuC,KACA2vuC,EACA5vuC,EAAQwo8B,YACRxo8B,EAAQyo8B,WACRzo8B,EAAQm+D,SACRgyqC,EACAr4X,EACA932B,EAAQwuB,OACRxuB,EAAQ++I,SACR/+I,EAAQyvL,QAGV,OADAxvL,KAAK20rC,QAAQ/vrC,KAAKk8P,GACXA,CACT,EAsBAmv+B,EAAgBxvuC,UAAUsu0B,YAAc,SAAUhv0B,GAGhD,MAAMq8B,GAFNr8B,EAAUA,GAAW,IAAOw8mB,cAELnglB,OACjBpV,EAAWjnB,EAAQinB,SACnBwkrC,EAAazrsC,EAAQyrsC,WACrBC,EAAY1rsC,EAAQ0rsC,UAG1B,KAAK,OAAQrvqC,MAAY,OAAQr8B,EAAQinB,UACvC,MAAM,IAAI,IACR,qDAGJ,KAAK,OAAQoV,EAAOpV,IAClB,MAAM,IAAI,IACR,oDAGJ,KAAK,OAAQwkrC,MAAgB,OAAQC,GACnC,MAAM,IAAI,IACR,0DASJ,OAAOzrsC,KAAKk5B,IAAI,CACdqv6B,YAAa,CACXlj8B,MAAOmmsC,GAEThjQ,WAAY,CACVnj8B,MAAOomsC,GAETvtoC,SAAUn+D,EAAQm+D,UAAY,EAC9BvgE,MAAOoC,EAAQpC,MACfk62B,eAAgB932B,EAAQ832B,eACxBtp1B,OAdF,SAAgBlpB,GACd+2B,EAAOpV,GAAY3hB,EAAMA,KAC3B,EAaEy5I,SAAU/+I,EAAQ++I,SAClB0wC,OAAQzvL,EAAQyvL,OAChB4gC,QAASrwN,EAAQqwN,SAErB,EAqBA6/gC,EAAgBxvuC,UAAU2vuC,SAAW,SAAUrwuC,GAG7C,MAAMuo0B,GAFNvo0B,EAAUA,GAAW,IAAOw8mB,cAEH+rN,SAGzB,KAAK,OAAQA,GACX,MAAM,IAAI,IAAe,iCAI3B,MAAMj/vB,EAAa,GAEnB,IAAK,MAAMriD,KAAYshzB,EAASuxC,SAE5BvxC,EAASuxC,SAAS5z2B,eAAe+gB,KACjC,OAAQshzB,EAASuxC,SAAS7y1B,MAC1B,OAAQshzB,EAASuxC,SAAS7y1B,GAAUsvP,QAEpCjtM,EAAWzkE,KAAKoiB,GAKpB,GAA0B,IAAtBqiD,EAAWpmE,OACb,MAAM,IAAI,IACR,qDAYJ,OAAOjD,KAAKk5B,IAAI,CACdqv6B,YAAa,CACXjyrB,MAAOv2Q,EAAQyrsC,YAAc,GAE/BhjQ,WAAY,CACVlyrB,MAAOv2Q,EAAQ0rsC,WAAa,GAE9BvtoC,SAAUn+D,EAAQm+D,UAAY,EAC9BvgE,MAAOoC,EAAQpC,MACfk62B,eAAgB932B,EAAQ832B,eACxBtp1B,OAjBF,SAAgBlpB,GACd,MAAMpC,EAASomE,EAAWpmE,OAC1B,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAC5Bqj0B,EAASuxC,SAASxwyB,EAAWpkE,IAAIqxQ,MAAQjxQ,EAAMixQ,KAEnD,EAaEx3H,SAAU/+I,EAAQ++I,SAClB0wC,OAAQzvL,EAAQyvL,QAEpB,EAoBAygjC,EAAgBxvuC,UAAU4vuC,mBAAqB,SAAUtwuC,GAGvD,MAAMuo0B,GAFNvo0B,EAAUA,GAAW,IAAOw8mB,cAEH+rN,SAGzB,KAAK,OAAQA,GACX,MAAM,IAAI,IAAe,yBAE3B,KAAK,OAAQA,EAASuxC,SAAS932B,QAC7B,MAAM,IAAI,IAAe,mDAI3B,MAAM832B,EAAWvxC,EAASuxC,SAC1B,OAAO752B,KAAK+u0B,YAAY,CACtB3yyB,OAAQy90B,EACR7y1B,SAAU,SACVwkrC,WAAY3xV,EAAS932B,OACrB0psC,UAAW5xV,EAAS932B,OAAS,EAC7Bm8D,SAAUn+D,EAAQm+D,SAClBvgE,MAAOoC,EAAQpC,MACfk62B,eAAgB932B,EAAQ832B,eACxBtp1B,OAAQxuB,EAAQwuB,OAChBihK,OAAQzvL,EAAQyvL,OAChB4gC,QAASpE,KAEb,EAWAikhC,EAAgBxvuC,UAAUqF,OAAS,SAAUg7P,GAC3C,KAAK,OAAQA,GACX,OAAO,EAGT,MAAMhmP,EAAQ9a,KAAK20rC,QAAQ5rrC,QAAQ+3P,GACnC,OAAe,IAAXhmP,IACFgmP,EAAM6u+B,QAAQ9tqC,QACV,OAAQi/L,EAAMtxE,SAChBsxE,EAAMtxE,SAERxvL,KAAK20rC,QAAQhqrC,OAAOmQ,EAAO,IACpB,EAIX,EAQAm1tC,EAAgBxvuC,UAAUmoM,UAAY,WACpC,MAAMkhwB,EAAS9p8B,KAAK20rC,QAEpB,IAAK,IAAI1vrC,EAAI,EAAGA,EAAI6k8B,EAAO7m8B,SAAUgC,EAAG,CACtC,MAAM67P,EAAQgpsB,EAAO7k8B,GACrB67P,EAAM6u+B,QAAQ9tqC,QACV,OAAQi/L,EAAMtxE,SAChBsxE,EAAMtxE,QAEV,CACAs6wB,EAAO7m8B,OAAS,CAClB,EAQAgtuC,EAAgBxvuC,UAAUioB,SAAW,SAAUo4O,GAC7C,OAAO,OAAQA,KAA2C,IAAjC9gQ,KAAK20rC,QAAQ5rrC,QAAQ+3P,EAChD,EAmBAmv+B,EAAgBxvuC,UAAUwV,IAAM,SAAU6E,GAExC,KAAK,OAAQA,GACX,MAAM,IAAI,IAAe,sBAI3B,OAAO9a,KAAK20rC,QAAQ75qC,EACtB,EAQAm1tC,EAAgBxvuC,UAAU8tB,OAAS,SAAUwjH,GAC3C,MAAM+3zB,EAAS9p8B,KAAK20rC,QAEpB,IAAI1vrC,EAAI,EAIR,IAHA8sI,GAAO,OAAQA,GACXA,EAAO,IAAcyulB,yBACrB,SACGv7tB,EAAI6k8B,EAAO7m8B,QAAQ,CACxB,MAAM69P,EAAQgpsB,EAAO7k8B,GACf0quC,EAAU7u+B,EAAM6u+B,QAElB7u+B,EAAMkv+B,YACRlv+B,EAAMkv+B,YAAa,EACnBL,EAAQzrtC,MAAM6tH,IACL49lC,EAAQphtC,OAAOwjH,GACxB9sI,KAEA0quC,EAAQ9tqC,OACRio4B,EAAOn/7B,OAAO1F,EAAG,GAErB,CACF,EAgBA,QAAe,8BAAe,I,sNCxjB9B,MAAMqruC,EAAgB,WAEhBlslC,EAAO,CACX/gI,EA6qBF,SAAc8wrB,EAAiB9wrB,EAAGC,EAAG45G,GACnC,OAAOqzmC,EAAwBp8hB,EAAiB,MAAO9wrB,EACzD,EA9qBEC,EAsrBF,SAAc6wrB,EAAiB9wrB,EAAGC,EAAG45G,GACnC,OAAOqzmC,EAAwBp8hB,EAAiB,MAAO7wrB,EACzD,EAvrBET,EAwsBF,SAAcsxrB,EAAiB9wrB,EAAGC,EAAG45G,GACnC,OAAOqzmC,EAAwBp8hB,EAAiB,MAAOj3kB,EACzD,EAzsBEt5G,EA2sBF,SAAcuwrB,EAAiB9wrB,EAAGC,EAAG45G,GACnC,MAAMpiH,GAASuI,EAAIC,EAAI45G,GAASi3kB,EAAgBq8hB,YAAYvtuC,OAC5D,OAAOkxsB,EAAgBq8hB,YAAY11tC,EACrC,EA7sBE21tC,SA6qBF,SAAqBt8hB,EAAiB9wrB,EAAGC,EAAG45G,GAC1C,MAAMuzmC,EACJt8hB,EAAgB56F,aAAa8G,yBAAyBnjf,GAAS75G,EAAI,EACrE,OAAOkttC,EAAwBp8hB,EAAiB,aAAcs8hB,EAChE,EAhrBEC,SAsrBF,SAAqBv8hB,EAAiB9wrB,EAAGC,EAAG45G,GAC1C,MAAMwzmC,EACJv8hB,EAAgB56F,aAAa+G,yBAAyBpjf,GAAS55G,EAAI,EACrE,OAAOittC,EAAwBp8hB,EAAiB,aAAcu8hB,EAChE,EAzrBEC,SA2rBF,SAAqBx8hB,EAAiB9wrB,EAAGC,EAAG45G,GAC1C,MAAMmypB,EAAel7E,EAAgBk7E,aAKrC,OAAOkhd,EAAwBp8hB,EAAiB,cAH9C,OAAQk7E,IAAiBnypB,EAAQmypB,EAC7BA,EAAenypB,EAAQ,EACvBA,EAER,EAjsBE0zmC,YA0tBF,SAAwBz8hB,EAAiB9wrB,EAAGC,EAAG45G,GAE7C,OADA2zmC,EAAe18hB,EAAiB9wrB,EAAGC,EAAG45G,GAC/B4zmC,EAAe92nB,IACxB,EA5tBE+2nB,aA8tBF,SAAyB58hB,EAAiB9wrB,EAAGC,EAAG45G,GAE9C,OADA2zmC,EAAe18hB,EAAiB9wrB,EAAGC,EAAG45G,GAC/B4zmC,EAAe9trB,KACxB,EAhuBEgurB,YAkuBF,SAAwB78hB,EAAiB9wrB,EAAGC,EAAG45G,GAE7C,OADA2zmC,EAAe18hB,EAAiB9wrB,EAAGC,EAAG45G,GAC/B4zmC,EAAeh3nB,IACxB,EApuBEm3nB,aAsuBF,SAAyB98hB,EAAiB9wrB,EAAGC,EAAG45G,GAE9C,OADA2zmC,EAAe18hB,EAAiB9wrB,EAAGC,EAAG45G,GAC/B4zmC,EAAe/2nB,KACxB,EAxuBEm3nB,cAyvBF,SAA0B/8hB,EAAiB9wrB,EAAGC,EAAG45G,GAE/C,OADAi0mC,EAAiBh9hB,EAAiB9wrB,EAAGC,EAAG45G,GACjCk0mC,EAAiBp3nB,IAC1B,EA3vBEq3nB,eA6vBF,SAA2Bl9hB,EAAiB9wrB,EAAGC,EAAG45G,GAEhD,OADAi0mC,EAAiBh9hB,EAAiB9wrB,EAAGC,EAAG45G,GACjCk0mC,EAAiBpurB,KAC1B,EA/vBEsurB,cAiwBF,SAA0Bn9hB,EAAiB9wrB,EAAGC,EAAG45G,GAE/C,OADAi0mC,EAAiBh9hB,EAAiB9wrB,EAAGC,EAAG45G,GACjCk0mC,EAAiBt3nB,IAC1B,EAnwBEy3nB,eAqwBF,SAA2Bp9hB,EAAiB9wrB,EAAGC,EAAG45G,GAEhD,OADAi0mC,EAAiBh9hB,EAAiB9wrB,EAAGC,EAAG45G,GACjCk0mC,EAAiBr3nB,KAC1B,EAvwBE5ymB,MAywBF,SAAkBgtsB,EAAiB9wrB,EAAGC,EAAG45G,GACvC,OAAOi3kB,EAAgBw+N,SACzB,EA1wBE7w6B,OA4wBF,SAAmBqysB,EAAiB9wrB,EAAGC,EAAG45G,GACxC,OAAOi3kB,EAAgBy+N,UACzB,GA3wBM4+T,GAAmB,OAAQptlC,EAAM,CACrCn/I,EA4wBF,SAAckvsB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,EAAUr7jB,GAE/D,OADAk4qC,EAAUt9hB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,GAC5C88mB,EAAUrutC,CACnB,EA9wBEkoC,EAgxBF,SAAc4opB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,EAAUr7jB,GAE/D,OADAk4qC,EAAUt9hB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,GAC5C88mB,EAAUputC,CACnB,EAlxBEqutC,SAoxBF,SACEx9hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAGA,OADAk4qC,EAAUt9hB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,GAC5Cu/E,EAAgBw+N,UAAY++T,EAAUrutC,EAAI,CACnD,EA9xBEuutC,SAgyBF,SACEz9hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAGA,OADAk4qC,EAAUt9hB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,GAC5Cu/E,EAAgBy+N,WAAa8+T,EAAUputC,EAAI,CACpD,EA1yBEuutC,iBA+0BF,SACE19hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAEA,OAAO,IAAWsioB,UAAU72I,EAC9B,EAx1BE8srB,gBA01BF,SACE39hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAEA,OAAO,IAAWsioB,UAAUjnE,EAC9B,EAn2BEm9mB,mBAq2BF,SACE59hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAUA,OARAy4qC,EACE79hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,GAEKq9mB,EAAkC5utC,CAC3C,EAt3BE6utC,kBAw3BF,SACE/9hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAUA,OARAy4qC,EACE79hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,GAEKq9mB,EAAkC3utC,CAC3C,EAz4BEi2C,OA06BF,SAAmB46oB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,EAAUr7jB,GACpE,OAAOA,CACT,IA/xBA,SAAS44qC,EAA2BpyuC,GAClCA,EAAUA,GAAW,IAAOw8mB,aAE5Bv8mB,KAAKm9mB,YAAc,IAAI,IAGvB,IAAMz+V,QAAQ,cAAe3+Q,EAAQoN,KAGrC,MAAMw0lB,EAAW,IAASqd,eAAej/mB,EAAQoN,KAC3CiluC,EAAuB,IAASpznB,eAAej/mB,EAAQsyuC,iBAE7DryuC,KAAKw8mB,UAAY7a,EACjB3hmB,KAAKsyuC,sBAAwBvyuC,EAAQwyuC,qBACrCvyuC,KAAKwyuC,uBAAyBzyuC,EAAQ0yuC,sBACtCzyuC,KAAK0yuC,sBAAwBN,EAE7B,IAAIv9S,EAAa907B,EAAQ807B,WAEvBA,EADEr07B,MAAMK,QAAQg07B,GACHA,EAAWpr7B,SACf,OAAQor7B,IAAeA,EAAW5x7B,OAAS,EACvC4x7B,EAAW7r7B,MAAM,IAEjB,CAAC,IAAK,IAAK,KAE1BhJ,KAAKwwuC,YAAc37S,EAEnB707B,KAAKyz6B,WAAa1z6B,EAAQ4y6B,WAAa,IACvC3y6B,KAAK0z6B,YAAc3z6B,EAAQ6y6B,YAAc,IACzC5y6B,KAAKu46B,cAAgBx46B,EAAQy06B,cAAgB,EAC7Cx06B,KAAKm/oB,cAAgBp/oB,EAAQsvxB,aAC7BrvxB,KAAK08mB,cACH38mB,EAAQw5mB,cACR,IAAI,IAAwB,CAAEt0D,UAAWlljB,EAAQkljB,YAEnDjljB,KAAKi5pB,WAAal5pB,EAAQ65mB,WAAa55mB,KAAK08mB,cAAc9C,UAC1D55mB,KAAKi5pB,WAAa,IAAUnxa,aAC1B9nP,KAAKi5pB,WACLj5pB,KAAK08mB,cAAc9C,WAGrB55mB,KAAKwz6B,mBAAqBzz6B,EAAQ2y6B,kBAElC,IAAI32T,EAASh8mB,EAAQg8mB,OACC,iBAAXA,IACTA,EAAS,IAAI,IAAOA,IAEtB/7mB,KAAKy8mB,QAAUV,EACf/7mB,KAAK2yuC,iBAAmB5yuC,EAAQ206B,kBAAmB,EAEnD,MAAMk+T,EAAa7yuC,EAAQ6yuC,WACrBC,GAAU,OAAQzulC,EAAMwulC,GACxBE,GAAsB,OAAQtB,EAAkBoB,GACtD5yuC,KAAK+yuC,MAAQF,EACb7yuC,KAAKgzuC,kBAAoBF,EAEzB9yuC,KAAK8y6B,mBAAgB3t6B,EACrBnF,KAAK+y6B,wBAAqB5t6B,EAC1BnF,KAAKgz6B,sBAAmB7t6B,EACxBnF,KAAKiz6B,wBAAqB9t6B,EAC1BnF,KAAKkz6B,sBAAmB/t6B,EACxBnF,KAAKmz6B,iBAAchu6B,EACnBnF,KAAKoz6B,wBAAqBju6B,EAC1BnF,KAAKqz6B,mBAAgBlu6B,EACrBnF,KAAKsz6B,gCAA6Bnu6B,EAClCnF,KAAKuz6B,iCAA8Bpu6B,EAWnCnF,KAAK4z6B,mBAAqB7z6B,EAAQ6z6B,qBAAsB,CAC1D,CAEArt6B,OAAOgwE,iBAAiB47pC,EAA2B1xuC,UAAW,CA0B5D0M,IAAK,CACH8I,IAAK,WACH,OAAOjW,KAAKw8mB,UAAUrvmB,GACxB,GAqBFoluC,qBAAsB,CACpBt8tC,IAAK,WACH,OAAOjW,KAAKsyuC,qBACd,GAuBFD,gBAAiB,CACfp8tC,IAAK,WACH,OAAOjW,KAAK0yuC,sBAAsBvluC,GACpC,GAUFu+L,MAAO,CACLz1L,IAAK,WACH,OAAOjW,KAAKw8mB,UAAU9wa,KACxB,GAUFinuB,UAAW,CACT185B,IAAK,WACH,OAAOjW,KAAKyz6B,UACd,GAUFb,WAAY,CACV385B,IAAK,WACH,OAAOjW,KAAK0z6B,WACd,GAUFrkJ,aAAc,CACZp5wB,IAAK,WACH,OAAOjW,KAAKm/oB,aACd,GAUFq1R,aAAc,CACZv+5B,IAAK,WACH,OAAOjW,KAAKu46B,aACd,GAUFh/T,aAAc,CACZtjmB,IAAK,WACH,OAAOjW,KAAK08mB,aACd,GAUF9C,UAAW,CACT3jmB,IAAK,WACH,OAAOjW,KAAKi5pB,UACd,GAYFy5Q,kBAAmB,CACjBz85B,IAAK,WACH,OAAOjW,KAAKwz6B,kBACd,GAWF70T,WAAY,CACV1omB,IAAK,WACH,OAAOjW,KAAKm9mB,WACd,GAWFpB,OAAQ,CACN9lmB,IAAK,WACH,OAAOjW,KAAKy8mB,OACd,GAcFi4T,gBAAiB,CACfz+5B,IAAK,WACH,OAAOjW,KAAK2yuC,gBACd,KAYJR,EAA2B1xuC,UAAUs06B,eAAiB,SAAU1x5B,EAAGC,EAAG45G,GAEtE,EAUAi1mC,EAA2B1xuC,UAAUu06B,aAAe,SAClD3x5B,EACAC,EACA45G,EACAuvD,GAEA,OAAO,IAAgBwovB,UACrBj16B,KAoFJ,SAA4Bm0sB,EAAiB9wrB,EAAGC,EAAG45G,EAAOuvD,GACxDwmjC,GAAyB,EACzBC,GAA2B,EAE3B,MAAMvxoB,EAAWwyG,EAAgB33F,UAC3BrvmB,EAAMw0lB,EAASouK,iBAAgB,GAC/B8ie,EAAU1+hB,EAAgB4+hB,MAC1Bz+lB,EAAiB,CAAC,EAElB5loB,EAAQvB,EAAIuB,MAAM4huC,GAUxB,OATI,OAAQ5huC,IACVA,EAAM+Q,QAAQ,SAAUggE,GACtB,MAAMz5E,EAAMy5E,EAAInvE,UAAU,EAAGmvE,EAAIx8E,OAAS,IACtC,OAAQ4vuC,EAAQ7suC,MAClBsuoB,EAAetuoB,GAAO6suC,EAAQ7suC,GAAKmusB,EAAiB9wrB,EAAGC,EAAG45G,GAE9D,GAGKyke,EAAS2c,mBAAmB,CACjC7xb,QAASA,EACT6nd,eAAgBA,GAEpB,CA1GIu/R,CAAmB7z6B,KAAMqjB,EAAGC,EAAG45G,EAAOuvD,GAE1C,EAgBA0ljC,EAA2B1xuC,UAAUy06B,aAAe,SAClD7x5B,EACAC,EACA45G,EACA8nb,EACA4vE,GAEA,IACG50nB,KAAK4z6B,sBACL,OAAQ5z6B,KAAK0yuC,wBACyB,IAAvC1yuC,KAAKwyuC,uBAAuBvvuC,OAE5B,OAGF,IAAI2+jC,EAAc,EAElB,MAAMnygC,EAAOzvD,KAEb,SAASmzuC,EAAe55qC,EAAQj4D,GAC9B,OAAOi4D,EAAO54D,SAASW,EACzB,CAoCA,OAlCA,SAASs8gC,IACP,GAAIgkD,GAAenygC,EAAK+irC,uBAAuBvvuC,OAE7C,OAAOg4B,QAAQC,QAAQ,IAGzB,MAAMq+B,EAAS9J,EAAK+irC,uBAAuB5wK,GACrCjge,EAgEV,SACEwyG,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAEA05qC,GAAyB,EACzBC,GAA2B,EAC3BE,GAAoB,EACpBC,GAA4C,EAE5C,MAAM1xoB,EAAWwyG,EAAgBu+hB,sBAC3BvluC,EAAMw0lB,EAASouK,iBAAgB,GAC/B8ie,EAAU1+hB,EAAgB6+hB,kBAC1B1+lB,EAAiB,CAAC,EAClB5loB,EAAQvB,EAAIuB,MAAM4huC,GAkBxB,OAjBI,OAAQ5huC,IACVA,EAAM+Q,QAAQ,SAAUggE,GACtB,MAAMz5E,EAAMy5E,EAAInvE,UAAU,EAAGmvE,EAAIx8E,OAAS,IACtC,OAAQ4vuC,EAAQ7suC,MAClBsuoB,EAAetuoB,GAAO6suC,EAAQ7suC,GAC5BmusB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAGN,GAGKooiB,EAAS2c,mBAAmB,CACjCg2B,eAAgBA,GAEpB,CAvGqBg/lB,CACf7jrC,EACApsC,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,EAAOA,QAKT,QAFEqogC,EAEkB,SAAhBrogC,EAAOhxD,KACFo5lB,EAASiZ,YAAYz/kB,KAAKo+B,EAAO54D,UAAUk8E,MAAM+g8B,GAC/B,QAAhBrk9B,EAAOhxD,KACTo5lB,EAAS8vK,WAAWt2uB,KAAKo+B,EAAO54D,UAAUk8E,MAAM+g8B,GAC9B,SAAhBrk9B,EAAOhxD,MAAmC,SAAhBgxD,EAAOhxD,KACnCo5lB,EAAS6vK,YAAYr2uB,KAAKo+B,EAAO54D,UAAUk8E,MAAM+g8B,GAEnDj8a,EACJvof,MAAM,CACL20C,aAAcx0F,EAAOA,SAEtBp+B,KAAKg4sC,EAAetprC,UAAK1kD,EAAWo0D,IACpCsjB,MAAM+g8B,EACX,CAEOA,EACT,EAEA,IAAIq1N,GAAyB,EAC7B,MAAMnC,EAAiB,IAAI,IAC3B,IAAIoC,GAA2B,EAC/B,MAAM9B,EAAmB,IAAI,IA2B7B,IAAIgC,GAAoB,EACxB,MAAM1B,EAAY,IAAI,IACtB,IAAI2B,GAA4C,EA2ChD,SAAS9C,EAAwBp8hB,EAAiBnusB,EAAKX,GACrD,GACE8usB,GACAA,EAAgBo+hB,sBAChBp+hB,EAAgBo+hB,qBAAqBtsuC,eAAeD,GACpD,CACA,MAAMutuC,EAAkBp/hB,EAAgBo+hB,qBAAqBvsuC,GAC7D,GAA+B,iBAApButuC,EAA8B,CACvC,MAAMC,EAAuBD,EAAgBtwuC,OACzCuwuC,EAAuB,IACzBnuuC,EACEA,EAAMpC,QAAUuwuC,EACZnuuC,EACA,IAAI7E,MACFgzuC,EAAuBnuuC,EAAMmgB,WAAWviB,OAAS,GACjDiF,KAAK,KAAO7C,EAExB,CACF,CACA,OAAOA,CACT,CAwCA,SAASwruC,EAAe18hB,EAAiB9wrB,EAAGC,EAAG45G,GACzC+1mC,IAIJ9+hB,EAAgB56F,aAAa2hB,kBAAkB73mB,EAAGC,EAAG45G,EAAO4zmC,GAC5DA,EAAe92nB,KAAO,IAAW6hF,UAAUi1iB,EAAe92nB,MAC1D82nB,EAAe9trB,MAAQ,IAAW64I,UAAUi1iB,EAAe9trB,OAC3D8trB,EAAeh3nB,KAAO,IAAW+hF,UAAUi1iB,EAAeh3nB,MAC1Dg3nB,EAAe/2nB,MAAQ,IAAW8hF,UAAUi1iB,EAAe/2nB,OAE3Dk5nB,GAAyB,EAC3B,CAsBA,SAAS9B,EAAiBh9hB,EAAiB9wrB,EAAGC,EAAG45G,GAC3Cg2mC,IAIJ/+hB,EAAgB56F,aAAauiF,wBAC3Bz4qB,EACAC,EACA45G,EACAk0mC,GAGF8B,GAA2B,EAC7B,CAkEA,MAAMxiiB,EAAmB,IAAI,IACvBuhiB,EAAoC,IAAI,IAE9C,SAASR,EAAUt9hB,EAAiB9wrB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,EAAUr7jB,GACpE,GAAI65qC,EACF,OAGFpB,EACE79hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,GAEF,MAAMs2H,EAAY+mf,EAEZr4nB,EAAYu6F,EAAgB56F,aAAauiF,wBAC7Cz4qB,EACAC,EACA45G,EACAwzkB,GAEFghiB,EAAUrutC,EACN8wrB,EAAgBw+N,WAAaznL,EAAU7nuB,EAAIu2lB,EAAUI,MACrDJ,EAAUzymB,MACZ,EACFuquC,EAAUputC,EACN6wrB,EAAgBy+N,YAAch5T,EAAUG,MAAQmxI,EAAU5nuB,GAC1Ds2lB,EAAU93mB,OACZ,EACFsxuC,GAAoB,CACtB,CAkEA,MAAM5id,EAAsB,IAAI,IAEhC,SAASwhd,EACP79hB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAr7jB,GAEA,IAAI85qC,EAAJ,CAIA,GAAIl/hB,EAAgB56F,aAAa94V,sBAAsB,IACrDwx9B,EAAkC5utC,EAAI,IAAWw4qB,UAAU72I,GAC3DitrB,EAAkC3utC,EAAI,IAAWu4qB,UAAUjnE,OACtD,CACL,MAAMnF,EAAe+gK,EACrB/gK,EAAazqE,UAAYA,EACzByqE,EAAamF,SAAWA,EACxBu/E,EAAgB56F,aAAa94V,WAAW6yF,QACtCm8Q,EACAwinB,EAEJ,CAEAoB,GAA4C,CAf5C,CAgBF,CAKA,QAAe,8BAA0B,I,6CCx7BzC,QAAe,4BAtBf,SAA2BtzuC,GAKzBC,KAAK+B,OAAShC,EAAQgC,OAKtB/B,KAAK+sE,MAAQhtE,EAAQgtE,MAKrB/sE,KAAK6hF,MAAQ9hF,EAAQ8hF,MAKrB7hF,KAAKsugC,SAAWvugC,EAAQuugC,QAC1B,EACgC,I,4YCkBhC,SAASmlO,EAA6B1zuC,GAGpCC,KAAK84pB,WAAa/4pB,EAAQs/a,UAC1Br/a,KAAK0zuC,QAAU3zuC,EAAQ8sN,OACvB7sN,KAAK2zuC,QAAU5zuC,EAAQ6zuC,OACvB5zuC,KAAK6zuC,UAAY9zuC,EAAQuugC,SAEzBtugC,KAAKwonB,WAAazonB,EAAQkljB,WAAa,IAAUsG,MACjDvrjB,KAAK+4nB,eAAiBh5nB,EAAQ+rnB,cAC9B9rnB,KAAKg5nB,eAAiBj5nB,EAAQgsnB,cAC9B/rnB,KAAKygpB,QAAU1gpB,EAAQ2rB,OACvB1rB,KAAKi5pB,WAAal5pB,EAAQ65mB,UAE1B55mB,KAAK+n7B,YAAcho7B,EAAQy86B,WAE3Bx86B,KAAKut+B,SAAMpo+B,EACXnF,KAAKqo7B,SAAMlj7B,EACXnF,KAAK23+B,SAAMxy+B,EACXnF,KAAKw14B,iBAAcrw4B,EACnBnF,KAAKq26B,cAAWlx6B,EAEhBnF,KAAK8zuC,4BAAyB3uuC,EAC9BnF,KAAK+zuC,mBAAgB5uuC,EACrBnF,KAAKg0uC,6BAA+B,IAAI,IACtC,EAAA14qC,EAA0B2/iB,yBAC1B,EAAA3/iB,EAA0B6/iB,0BAE5Bn7mB,KAAK694B,gBAAkB,IAAoBt1R,cACzCxonB,EAAQ65mB,UACR,EAAAt+iB,EAA0B2/iB,yBAC1B,EAAA3/iB,EAA0B6/iB,yBAC1Bn7mB,KAAKwonB,YAEPxonB,KAAKsx0B,oBAAsBvx0B,EAAQ0x0B,mBAEnCzx0B,KAAKi0uC,sBAAwBl0uC,EAAQm0uC,qBACrCl0uC,KAAKm0uC,uBAAoBhvuC,EACzBnF,KAAKo0uC,6BAA0BjvuC,EAG/BnF,KAAKq0uC,4BAAyBlvuC,EAC9BnF,KAAKs0uC,0BAAuBnvuC,EAC5BnF,KAAKu0uC,8BAA2BpvuC,EAChCnF,KAAKw0uC,wCAAqCrvuC,EAC1CnF,KAAKy0uC,4BAAyBtvuC,EAC9BnF,KAAK00uC,iCAA8BvvuC,EACnCnF,KAAK20uC,qBAAkBxvuC,EAEvBnF,KAAK49vB,cAAWz4vB,EAEhBnF,KAAKi/pC,eAAiB,IAAMh0mC,MAAM,IAAMkjmB,OACxCnupB,KAAKkr7B,gBAAkBlr7B,KAAKi/pC,eAE5Bj/pC,KAAK40uC,iBAAmB,EACxB50uC,KAAKsgqC,oBAAsB,EAE3BtgqC,KAAKyh1B,QAAS,EACdzh1B,KAAK41rB,cAAWzwrB,EAChBnF,KAAK4x0B,YAASzs0B,CAChB,CAEAoB,OAAOgwE,iBAAiBk9pC,EAA6BhzuC,UAAW,CAS9D4l9B,gBAAiB,CACfpw8B,IAAK,WACH,OAAOjW,KAAK40uC,gBACd,GAWFtuR,mBAAoB,CAClBrw8B,IAAK,WACH,OAAOjW,KAAKsgqC,mBACd,GASFlghC,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,KAiDJ,MAAMozZ,EAA8B,IAAI,IACtC,oCAEI5qW,EAAqB,CACzB6qW,qBAAsB,EACtBC,mBAAoB,EACpBC,uBAAwB,EACxBC,qBAAsB,EACtBC,+BAAgC,EAChCC,0BAA2B,EAC3BvtT,UAAW,GAyPb,MAAMi/F,EAA2B,IAAI,IAC/BK,EAAa,IAAI,IAgCvB,SAASj1G,EAAe83D,GAQtB,OAAO,IAAYhgG,UAAU,CAC3BwU,KAAM,CACJt43B,SAAS,EACT0gkB,KAAM,IAASivN,OAEjB+vG,SAAU,IAAc8wC,2BACxBrwC,WAAW,EACXP,YAAa,CACX5/3B,QAAS8j9B,EACTnjF,cAAe,IAAgBprG,MAC/BuqG,eAAgB,CACdlsyB,KAAM,IAAiBiisB,KACvBgrG,MAAO,IAAiBhrG,KACxBirG,MAAO,IAAiBjrG,MAE1B+qG,aAAc,IAAgBrrG,MAC9ByqG,cAAe,CACbpsyB,KAAM,IAAiBiisB,KACvBgrG,MAAO,IAAiBhrG,KACxBirG,MAAO,IAAiBjrG,MAE1Bx3xB,UAAW,IAAiBqg8B,oBAC5BnsvB,KAAM,IAAiBmsvB,sBAG7B,CA4FA8uR,EAA6BhzuC,UAAUshnC,aAAe,SAAUliM,GAC9D,OAAO,IAAsB0oC,qBAAqBvo9B,KAAM6/6B,EAC1D,EAQA4zT,EAA6BhzuC,UAAU6vgC,eAAiB,SACtDvz9B,EACAgjsB,GAEA,MAAMuuR,EAAWtugC,KAAK6zuC,UAChB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAM466B,EAAUyuF,EAASrpgC,GACzB86uB,EAAS8/L,GAAW,IAAI,IAAoB9i4B,EAAS8i4B,EACvD,CACF,EAQA4zT,EAA6BhzuC,UAAU6+8B,mBAAqB,SAC1Dr57B,EACA47D,GAEA7hF,KAAKkr7B,gBAAkBjl6B,EAAU47D,EAAQ7hF,KAAKi/pC,cAChD,EAcA,MAAM35V,EAAe,IAAI,IAEnBw8G,EAAsB,IAAM3zR,MASlCsllB,EAA6BhzuC,UAAUot2B,WAAa,SAAUxn1B,EAAO05tB,GACnE,KAAK,OAAQ15tB,GAEX,YA1BJ,SAAoBwsoB,EAAUktF,GAC5B,MAAMuuR,EAAWz7W,EAASghlB,UACpB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAGzBmw1B,EAAQ9w1B,MAAO,EACf8w1B,EAAQvzwB,MAAQ,IAAMsskB,KACxB,CACF,CAeIinlB,CAAWp1uC,KAAM+/uB,GAInB,MAAMuuR,EAAWtugC,KAAK6zuC,UAChB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAGzBmw1B,EAAQvzwB,OAAQ,OAAQx7D,EAAMw7D,OAC1Bx7D,EAAMw7D,MAAMsh4B,cAAc/tH,EAAS9vB,GACnCw8G,EACJ1sF,EAAQ9w1B,OAAO,OAAQ+hB,EAAM/hB,OACzB+hB,EAAM/hB,KAAKwwP,SAASsgmB,EAE1B,CACF,EA0BAq+Y,EAA6BhzuC,UAAU8tB,OAAS,SAAU4usB,GACxD,MAAMvmtB,EAAUumtB,EAAWvmtB,QAC3B,IAAK5W,KAAKyh1B,OAAQ,CAKhB,IAJK,OAAQzh1B,KAAK41rB,YAChB51rB,KAAK41rB,UA5BSu1e,EA4BanrqC,KA3BxB,EAAAs7D,EAA0Bm/iB,aAC9Bt/kB,KAAK,YA/hBV,SAAqCgwoC,EAAWvxjB,EAAW30D,GACzD,MAAMjshB,EAAS,EAAAsiC,EAA0Bw/iB,yBACvClB,EACA30D,GAEI7hiB,EAAM4V,EAAO0ilB,qBACb77lB,EAAMmZ,EAAO2ilB,qBACb05nB,EAA8BlqE,EAAU6oE,6BAC9CqB,EAA4BhytC,EAAID,EAChCiytC,EAA4B/xtC,EAAIzD,EAEhC,MAAMq/uB,EAAMisa,EAAUttR,gBAChB9t3B,EAAOo7oC,EAAUlygB,WACvB,IAAoB1wC,cAAcx4lB,EAAM3M,EAAKvD,EAAKoliB,EAAWi6M,EAC/D,CAkhBMo2e,CACEnqE,EACAA,EAAUlygB,WACVkygB,EAAU3ijB,WAEd,GACC3riB,MAAOrpE,IACF23pC,EAAUhxoC,gBAKdgxoC,EAAUv5V,OAASp+zB,MAac2nB,KA/fvC,SAA2BgwoC,EAAWv0pC,GACpC,IAAI,OAAQu0pC,EAAU59L,KACpB,OAGF,IAAIlujB,EAAY8rvB,EAAUrygB,WACtBjsc,EAASs+8B,EAAUuoE,QACnBE,EAASzoE,EAAUwoE,QACnBrlO,EAAW68J,EAAU2oE,uBAErByB,EAAepqE,EAAU4oE,eAExB,OAAQwB,KAEXl2zB,EAAY8rvB,EAAUrygB,WAAaz5O,EAAU51a,QAC7CojN,EAASs+8B,EAAUuoE,QAAU7mhC,EAAOpjN,QACpCmquC,EAASzoE,EAAUwoE,QAAUC,EAAOnquC,QAEpC6kgC,EAAW68J,EAAU2oE,uBAAyB3oE,EAAU0oE,UAAUpquC,QAElE8ruC,EAAepqE,EAAU4oE,cA9D7B,SAAoB5oE,GAClB,MAAMvxjB,EAAYuxjB,EAAUlygB,WACtBntC,EAAgBq/iB,EAAUpyiB,eAC1BhN,EAAgBo/iB,EAAUnyiB,eAC1B/zE,EAAYkmnB,EAAU3ijB,WACtB98lB,EAASy/oC,EAAU1qhB,QAEnBx4B,EACJ,EACA,IAAUA,aACV,IAAUA,aACV,IAAWA,aACPstnB,EAAe,IAAIrikC,aAAa+0c,GAEtC,IAAIlmnB,EAAS,EAYb,OAXAwzuC,EAAaxzuC,KAAY+pnB,EACzBypnB,EAAaxzuC,KAAYgqnB,EAEzB,IAAUzxW,KAAKs/V,EAAW27nB,EAAcxzuC,GACxCA,GAAU,IAAUkmnB,aAEpB,IAAU3tW,KAAK2qS,EAAWswrB,EAAcxzuC,GACxCA,GAAU,IAAUkmnB,aAEpB,IAAW3tW,KAAK5uP,EAAQ6ptC,EAAcxzuC,GAE/BwzuC,CACT,CAmC6CC,CAAWrqE,IAGtD,MAAMsqE,EAAuB,CAC3Bp2zB,EAAUtoW,OACV81I,EAAO91I,OACP68pC,EAAO78pC,OACPu37B,EAASv37B,OACTw+pC,EAAax+pC,QAET8/D,EAAa,CACjBwoS,UAAWA,EAAUtoW,OACrB81I,OAAQA,EAAO91I,OACf68pC,OAAQA,EAAO78pC,OACfu37B,SAAUA,EAASv37B,OACnBw+pC,aAAcA,EAAax+pC,OAC3Bm9pC,qBAAsB/oE,EAAU8oE,uBAG5B94mB,EAAkB05mB,EAA4Bz5mB,aAClDvkf,EACA4+lC,GAEF,OAAK,OAAQt6mB,GAKNA,EACJhgmB,KAAK,SAAUnC,GACd,GAAImyoC,EAAUhxoC,cACZ,OAGEgxoC,EAAU8oE,wBACZ9oE,EAAUgpE,kBAAoB,IAAIjhkC,aAAal6I,EAAO8olC,kBACtDqpD,EAAUipE,wBAA0B,IAAI13mC,YACtC1jG,EAAO08sC,yBAIXvqE,EAAUkpE,uBAAyB,IAAIlxtC,aACrC6V,EAAO28sC,uBAETxqE,EAAUmpE,qBAAuB,IAAInxtC,aACnC6V,EAAO48sC,qBAETzqE,EAAUopE,yBAA2B,IAAIpxtC,aACvC6V,EAAO68sC,yBAET1qE,EAAUqpE,mCAAqC,IAAIrxtC,aACjD6V,EAAO88sC,mCAET3qE,EAAUspE,uBAAyB,IAAItxtC,aACrC6V,EAAO+8sC,uBAET5qE,EAAUupE,4BAA8B,IAAIvxtC,aAC1C6V,EAAOg9sC,4BAET7qE,EAAUwpE,gBAAkB,IAAIl4mC,YAAYzjG,EAAOi9sC,gBAEnD,MAAM7hhB,EAAgBp7rB,EAAOo7rB,cAC7B+2c,EAAUvta,SACRxpC,IAAkB,IAAcpuG,eAC5B,IAAIvpf,YAAYzjG,EAAO6pK,SACvB,IAAInmE,YAAY1jG,EAAO6pK,SAenC,SAA2Bso+B,EAAWv0pC,GACpC,KAAK,OAAQu0pC,EAAU59L,KAAM,CAC3B,MAAMooQ,EAAwBxqE,EAAUkpE,uBAClCuB,EAAsBzqE,EAAUmpE,qBAChCuB,EAA0B1qE,EAAUopE,yBACpCwB,EAAwB5qE,EAAUspE,uBAClCqB,EACJ3qE,EAAUqpE,mCACNwB,EAA6B7qE,EAAUupE,4BACvCwB,EAAmB/qE,EAAUwpE,gBAE7B9xiC,EAAUso+B,EAAUvta,SAE1B,IAAIvjqB,EACFs7oC,EAAsBt7oC,WAAau7oC,EAAoBv7oC,WACzDA,GACEw7oC,EAAwBx7oC,WAAa07oC,EAAsB17oC,WAC7DA,GACEy7oC,EAAkCz7oC,WAClC27oC,EAA2B37oC,WAC7BA,GAAc67oC,EAAiB77oC,WAAawoG,EAAQxoG,WAEpD8wkC,EAAUypE,iBAAmB/xiC,EAAQ5/L,OAAS,EAC9CkoqC,EAAU7K,oBAAsBjmkC,EAEhC,MAAM87oC,EAA8B,IAAOjvW,mBAAmB,CAC5Dtw3B,QAASA,EACT2pO,WAAYo1/B,EACZtvrB,MAAO,IAAYkvP,cAEf6gc,EAA4B,IAAOlvW,mBAAmB,CAC1Dtw3B,QAASA,EACT2pO,WAAYq1/B,EACZvvrB,MAAO,IAAYkvP,cAEf8gc,EAAgC,IAAOnvW,mBAAmB,CAC9Dtw3B,QAASA,EACT2pO,WAAYs1/B,EACZxvrB,MAAO,IAAYkvP,cAEf+gc,EAA8B,IAAOpvW,mBAAmB,CAC5Dtw3B,QAASA,EACT2pO,WAAYw1/B,EACZ1vrB,MAAO,IAAYkvP,cAEfghc,EAA0C,IAAOrvW,mBAAmB,CACxEtw3B,QAASA,EACT2pO,WAAYu1/B,EACZzvrB,MAAO,IAAYkvP,cAEfihc,EAAmC,IAAOtvW,mBAAmB,CACjEtw3B,QAASA,EACT2pO,WAAYy1/B,EACZ3vrB,MAAO,IAAYkvP,cAEfkhc,EAAyB,IAAOvvW,mBAAmB,CACvDtw3B,QAASA,EACT2pO,WAAY21/B,EACZ7vrB,MAAO,IAAYkvP,cAGfygG,EAAc,IAAO7O,kBAAkB,CAC3Cvw3B,QAASA,EACT2pO,WAAY19C,EACZwjX,MAAO,IAAYkvP,YACnBnhF,cACgC,IAA9BvxhB,EAAQyrF,kBACJ,IAAc03V,eACd,IAAcE,eAGhB6rS,EAAmB,CACvB,CACEj34B,MAAOmv3B,EAAmB6qW,qBAC1B3smB,aAAcgumB,EACdzwnB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmB8qW,mBAC1B5smB,aAAciumB,EACd1wnB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmB+qW,uBAC1B7smB,aAAckumB,EACd3wnB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmBgrW,qBAC1B9smB,aAAcmumB,EACd5wnB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmBirW,+BAC1B/smB,aAAcoumB,EACd7wnB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmBkrW,0BAC1BhtmB,aAAcqumB,EACd9wnB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmB29C,UAC1Bz/S,aAAcsumB,EACd/wnB,kBAAmB,IAAkBM,eACrCL,uBAAwB,IAI5BwljB,EAAU59L,IAAM,IAAI,IAAY,CAC9B329B,QAASA,EACTrR,WAAYws5B,EACZ/b,YAAaA,IAGfm1R,EAAUrygB,gBAAa3zpB,EACvBgmqC,EAAUuoE,aAAUvuuC,EACpBgmqC,EAAUwoE,aAAUxuuC,EAEpBgmqC,EAAU3ijB,gBAAarjnB,EACvBgmqC,EAAUpyiB,oBAAiB5znB,EAC3BgmqC,EAAUnyiB,oBAAiB7znB,EAC3BgmqC,EAAUlygB,gBAAa9zpB,EAEvBgmqC,EAAU2oE,4BAAyB3uuC,EACnCgmqC,EAAU4oE,mBAAgB5uuC,EAE1BgmqC,EAAUkpE,4BAAyBlvuC,EACnCgmqC,EAAUmpE,0BAAuBnvuC,EACjCgmqC,EAAUopE,8BAA2BpvuC,EACrCgmqC,EAAUqpE,wCAAqCrvuC,EAC/CgmqC,EAAUspE,4BAAyBtvuC,EACnCgmqC,EAAUupE,iCAA8BvvuC,EACxCgmqC,EAAUwpE,qBAAkBxvuC,EAE5BgmqC,EAAUvta,cAAWz4vB,CACvB,CACF,CA7JMuxuC,CAAkBvrE,EAAWv0pC,GAC7Bu0pC,EAAU1pV,QAAS,CACrB,GACC5kwB,MAAOrpE,IACF23pC,EAAUhxoC,gBAKdgxoC,EAAUv5V,OAASp+zB,UArDvB,CAuDF,CA6Z4Cq83B,CAAkB7v4B,KAAM4W,MAG5D,OAAQ5W,KAAK4x0B,QAAS,CACxB,MAAMp+zB,EAAQxT,KAAK4x0B,OAEnB,MADA5x0B,KAAK4x0B,YAASzs0B,EACRqO,CACR,CAEA,MACF,CAtCF,IAAoB23pC,EAzKQpskC,GAjE5B,SAA0BA,EAAWnoF,IAC/B,OAAQmoF,EAAUy2yB,eAItBz2yB,EAAUy2yB,YAAc,CACtBi1I,oBAAqB,WACnB,MAAMpjH,EAAazw5B,EAAQwl3B,aAAatuyB,KAYxC,OAXA,IAAQ7iC,MAAMo82B,EAAYw/G,GAC1B,IAAQz4Z,gBACNy4Z,EACA9n7B,EAAU0hjB,QACVymY,GAEF,IAAQl7S,eACN66S,EACAK,EACAL,GAEKA,CACT,EACAr7F,iBAAkB,WAChB,OAAOzs1B,EAAUms1B,eACnB,EACAyrT,8BAA+B,WAC7B,OAAO53oC,EAAUi1oC,4BACnB,GAEJ,CAsPE38T,CAAiBr36B,KAAM4W,GAxMzB,SAAuBmoF,EAAWnoF,GAChC,IAAI,OAAQmoF,EAAUsp1B,KACpB,OAGF,MAAM7L,EAAaz90B,EAAUgp1B,YAEvBx1B,EAAWiqB,EAAWe,yBAC1B,EACA,iBACAp46B,EAHeq36B,CAIf,KACIhqB,EAAWgqB,EAAW4U,2BAC1B,OACAjs7B,GACA,EAHeq36B,CAIf,KAEIv+oB,EAAK,IAAI,IAAa,CAC1B6vnB,QAAS,CAAC,cAAe,iBACzBlpuB,QAAS,CAAC,IAAgB2tuB,KAEtBrx1B,EAAK,IAAI,IAAa,CAC1B4s1B,QAAS,CAAC,eACVlpuB,QAAS,CAAC4tuB,KAGZzzzB,EAAUsp1B,IAAM,IAAct+C,UAAU,CACtCnz3B,QAASA,EACToz3B,mBAAoB/rmB,EACpB8qmB,qBAAsB7n0B,EACtB+o0B,mBAAoBA,GAExB,CAwKEi6R,CAAclkqC,KAAM4W,GAlNMmoF,EAmNP/+F,MAlNf,OAAQ++F,EAAU444B,OAItB544B,EAAU444B,IAAM1lE,GAAe,GAC/Blz0B,EAAU63oC,WAAa3kU,GAAe,IA+MtC,MAAM4Q,EAAS1lN,EAAW0lN,QACtBA,EAAO7k2B,QAAU6k2B,EAAOr0sB,OA1K9B,SAAuBzvI,EAAWo+nB,GAChC,IAAI+hL,EAAUngzB,EAAUs30B,SACxB,KAAK,OAAQt30B,EAAUs30B,UAAW,CAChC,MAAMptC,EAAalqyB,EAAUgp1B,YAAY7K,uBAAtBn+0B,CACjBA,EAAUy2yB,aAEZ0J,EAAUngzB,EAAUs30B,SAAW,IAAI,IAAY,CAC7CjpG,MAAOruuB,EACP+pyB,YAAa/pyB,EAAUwu4B,IACvBnpJ,YAAarlvB,EAAU444B,IACvB3uG,cAAejqyB,EAAUsp1B,IACzBp/C,WAAYA,EACZ92N,eAAgBpzkB,EAAU8+yB,gBAC1B3rJ,KAAM,IAAK8xJ,uBACX9F,OAAQn/yB,EAAUgp1B,YAAYjC,cAGhC,MAAMgvI,EAAwB,IAAYx1K,aACxCJ,EACAA,EAAQF,gBAAgB50E,SAE1B0qP,EAAsB1wO,YAAcrlvB,EAAU63oC,WAC9C9hL,EAAsB5iU,KAAO,IAAKiyJ,8BAClCjF,EAAQF,gBAAgB50E,QAAU0qP,CACpC,CAEA,MAAMrjP,EAAqB1yuB,EAAUuyuB,oBAEnCG,IAAuB,IAAmBpzN,SAC1CozN,IAAuB,IAAmB8oB,MAE1Cp9H,EAAWyzH,YAAYhs1B,KAAKs64B,GAG5BztE,IAAuB,IAAmByyE,gBAC1CzyE,IAAuB,IAAmB8oB,MAE1Cp9H,EAAWyzH,YAAYhs1B,KAAKs64B,EAAQF,gBAAgB50E,QAExD,CAoIIw2J,CAAc5g+B,KAAMm9tB,EAExB,EAWAs2gB,EAA6BhzuC,UAAU05B,YAAc,WACnD,OAAO,CACT,EAaAs5sC,EAA6BhzuC,UAAU26B,QAAU,WAG/C,OAFAp7B,KAAKut+B,IAAMvt+B,KAAKut+B,KAAOvt+B,KAAKut+B,IAAIny8B,UAChCp7B,KAAKqo7B,IAAMro7B,KAAKqo7B,KAAOro7B,KAAKqo7B,IAAIjt5B,WACzB,OAAcp7B,KACvB,EACA,QAAe,8BAA4B,I,mPC1uB3C,SAAS62uC,EAAoBzsa,EAAStrL,EAAMn9C,EAAU/qY,EAAa/iH,GACjE7zG,KAAKsq0B,SAAWF,EAChBpq0B,KAAKyl9B,MAAQ3mU,EACb9+oB,KAAKw8mB,UAAY7a,EAEjB3hmB,KAAK8mb,eAAY3hb,EACjBnF,KAAKipqC,gBAAa9jqC,EAClBnF,KAAK43nB,aAAUzynB,EAEfnF,KAAK4ysB,eAAYztsB,EAEjBnF,KAAK+n7B,iBAAc5i7B,EACnBnF,KAAKutgC,eAAYpogC,EAKjBnF,KAAKmm9B,wBAAyB,EAC9Bnm9B,KAAK07X,YAASv2X,EAEdnF,KAAKyh1B,QAAS,EA6OhB,SAAoB1kyB,EAAS65K,EAAa/iH,GACxCA,EAAaA,GAAc,EAE3B,MAAMmiiB,EAAa,IAAIxznB,WAAWo0M,GAC5B9oI,EAAO,IAAIglF,SAAS8jD,GAC1B/iH,GAAc29lB,EAEd,MAAMjzrB,EAAUuvE,EAAKotI,UAAUrnH,GAAY,GAC3C,GAAgB,IAAZt1F,EACF,MAAM,IAAI,IACR,qDAAqDA,aAGzDs1F,GAAc29lB,EAEd,MAAMn3mB,EAAavM,EAAKotI,UAAUrnH,GAAY,GAG9C,GAFAA,GAAc29lB,EAEK,IAAfn3mB,EAEF,YADAt9C,EAAQ0kyB,QAAS,GAInB,MAAM+rL,EAA6B1/6B,EAAKotI,UAAUrnH,GAAY,GAG9D,GAFAA,GAAc29lB,EAEqB,IAA/Bg8T,EACF,MAAM,IAAI,IACR,2DAIJ,MAAM7zF,EAA+B7r1B,EAAKotI,UAAUrnH,GAAY,GAChEA,GAAc29lB,EACd,MAAMi8T,EAA2B3/6B,EAAKotI,UAAUrnH,GAAY,GAC5DA,GAAc29lB,EACd,MAAMuoO,EAA6Bjs1B,EAAKotI,UAAUrnH,GAAY,GAC9DA,GAAc29lB,EACd,MAAMsliB,EAAoBhppC,EAAKotI,UAAUrnH,GAAY,GACrDA,GAAc29lB,EACd,MAAMhvE,EAAqB10iB,EAAKotI,UAAUrnH,GAAY,GACtDA,GAAc29lB,EACd,MAAMuliB,EAA6BjppC,EAAKotI,UAAUrnH,GAAY,GAC9DA,GAAc29lB,EACd,MAAMwliB,EAA2BlppC,EAAKotI,UAAUrnH,GAAY,GAC5DA,GAAc29lB,EAEd,MAAMsoO,GAAmB,OACvB9jS,EACAniiB,EACA255B,GAEF355B,GAAc255B,EAEd,MAAMvzF,EAAqB,IAAIz35B,WAC7Bo0M,EACA/iH,EACA8l0B,GAIF,IAAIO,EACAC,EAHJtm0B,GAAc8l0B,EAIV8zF,EAA2B,IAM7BvzF,GAAiB,OACflkS,EACAniiB,EACA455B,GAEF555B,GAAc455B,EAEV1zF,EAA6B,IAE/BI,EAAmB,IAAI335B,WACrBo0M,EACA/iH,EACAkm0B,GAGFI,EAAmB,IAAI335B,WAAW235B,GAClCtm0B,GAAckm0B,IAIlB,MAAMk9T,EAAmBn9T,EAAiBo9T,iBAAmB,EACvDC,EAAoBr9T,EAAiBs9T,kBAAoB,EACzD3/e,EAAiBqiL,EAAiBu9T,eAAiB,EACnDnpO,EAAkB+oO,EAAmBE,EAAoB1/e,EAEzD+kL,EAAa,IAAI,IACrBz/3B,EACAmx9B,EACAh0F,EACAC,EA/MJ,SAAoCp93B,GAClC,OAAO,SAAU8i4B,EAASh+1B,IACpB,OAAQ9kC,EAAQ+pY,YAClB/pY,EAAQ+pY,UAAUqnlB,eAAetuF,EAASh+1B,EAE9C,CACF,CA0MIus7B,CAA2Brx9B,IAI7B,GAFAA,EAAQgr4B,YAAcvL,EAEE,IAApB0xF,EACF,OAGF,MAAMllD,EAAe,IAAI,IACvBlvC,EACAG,GAEI/shB,EAAS87jB,EAAaG,kBAAkB,UAC9C,KAAK,OAAQj8jB,GACX,MAAM,IAAI,IACR,yDAGJ,MAAM0sN,EAAY,IAAUuO,OAAOj7N,GAC7BzuZ,EAAYyuZ,EAAO,GACnBxuZ,EAAYwuZ,EAAO,GAEnBwxS,EAAc3hpB,EAAQ0o6B,MAAMlT,kBAElC,IAAI7m7B,EAASs97B,EAAaG,kBACxB,aACA,IAAkB53V,MAClB,IAEE,OAAQ7lmB,IACVA,EAAS,IAAWy8lB,OAAOz8lB,GAC3B,IAAQ0imB,gBAAgBswE,EAAahzqB,EAAQA,KAE7CA,EAAS,IAAUA,OAAOkulB,GAC1BlulB,EAAO5pB,OAAS,IAAWumS,KAAK5pS,EAAWC,EAAW,IACtDgtB,EAAS,IAAU6/hB,MAAM6vD,wBAAwB1vlB,IAGnD,MAAM4i/B,EA9OR,SAAqBx0F,EAAkBG,GACrC,IAAIq9T,EACAC,EACAC,EACAvyuC,EAEJ,MAAMgyuC,EAAmBn9T,EAAiBo9T,iBAAmB,EACvDC,EAAoBr9T,EAAiBs9T,kBAAoB,EACzD3/e,EAAiBqiL,EAAiBu9T,eAAiB,EAEzD,GAAIJ,EAAmB,IAAK,OAAQn9T,EAAiB29T,mBAAoB,CACvE,MAAMC,EACJz9T,EAAmBpm0B,WACnBim0B,EAAiB29T,kBAAkB5joC,WACrCyjoC,EAAkB,IAAI76mC,YACpBw9yB,EAAmBlj2B,OACnB2gqC,EACAT,EAEJ,CAEA,GAAIE,EAAoB,IAAK,OAAQr9T,EAAiB69T,oBAAqB,CACzE,MAAMC,EACJ39T,EAAmBpm0B,WACnBim0B,EAAiB69T,mBAAmB9joC,WACtC0joC,EAAmB,IAAI96mC,YACrBw9yB,EAAmBlj2B,OACnB6gqC,EACAT,EAEJ,CAEA,GAAI1/e,EAAiB,IAAK,OAAQqiL,EAAiB+9T,iBAAkB,CACnE,MAAMC,EACJ79T,EAAmBpm0B,WACnBim0B,EAAiB+9T,gBAAgBhkoC,WACnC2joC,EAAgB,IAAI/6mC,YAClBw9yB,EAAmBlj2B,OACnB+gqC,EACArgf,EAEJ,CAEA,MAAM03Q,GACJ,OAAQmoO,KACR,OAAQC,KACR,OAAQC,GACJpoO,EACH6nO,EAAmB,KAAM,OAAQK,IACjCH,EAAoB,KAAM,OAAQI,IAClC9/e,EAAiB,KAAM,OAAQ+/e,GAElC,GAAIroO,GAAqBC,EACvB,MAAM,IAAI,IACR,4EAQJ,KAHG,OAAQkoO,MACR,OAAQC,MACR,OAAQC,GACe,CACxB,IAAI/uuC,EAAK,EACT,KAAK,OAAQ6uuC,IAAoBL,EAAmB,EAElD,IADAK,EAAkB,IAAI76mC,YAAYw6mC,GAC7BhyuC,EAAI,EAAGA,EAAIgyuC,IAAoBhyuC,EAClCqyuC,EAAgBryuC,GAAKwD,IAGzB,KAAK,OAAQ8uuC,IAAqBJ,EAAoB,EAEpD,IADAI,EAAmB,IAAI96mC,YAAY06mC,GAC9BlyuC,EAAI,EAAGA,EAAIkyuC,IAAqBlyuC,EACnCsyuC,EAAiBtyuC,GAAKwD,IAG1B,KAAK,OAAQ+uuC,IAAkB//e,EAAiB,EAE9C,IADA+/e,EAAgB,IAAI/6mC,YAAYg7nB,GAC3BxyvB,EAAI,EAAGA,EAAIwyvB,IAAkBxyvB,EAChCuyuC,EAAcvyuC,GAAKwD,GAGzB,CAEA,MAAO,CACLoqpB,SAAUyklB,EACVnsE,UAAWosE,EACX5znC,OAAQ6znC,EAEZ,CAqJmB/nO,CAAY31F,EAAkBG,GAG/C,GAFApm0B,IAAe,EAAKA,EAAa,GAAM,EAEnCojoC,EAAmB,EAAG,CACxBjuR,EAAaroC,eAAiBs2T,EAE9B,MAAMc,EACJ/uR,EAAaK,iBACX,iBACA,IAAkBnjW,aAClB,IAEF8iW,EAAaK,iBACX,gBACA,IAAkBnjW,aAClB,GAGJ,KAAK,OAAQ6xnB,GACX,MAAM,IAAI,IACR,iGAIJ,MAAMC,EACJhvR,EAAaK,iBACX,uBACA,IAAkBnjW,aAClB,IAEF8iW,EAAaK,iBACX,sBACA,IAAkBnjW,aAClB,GAGJ,KAAK,OAAQ8xnB,GACX,MAAM,IAAI,IACR,uGAMJ,MAAMC,EAAsBF,EAAcvztC,OAAO,SAAUkvC,EAAOqZ,GAChE,OAAOrZ,EAAgB,EAARqZ,CACjB,EAAG,GAEGmrqC,EAAoBF,EAAmBxztC,OAAO,SAClDkvC,EACAqZ,GAEA,OAAOrZ,EAAQqZ,CACjB,EAAG,GAEG81H,EAAU,IAAInmE,YAAYk6F,EAAa/iH,EAAYqkoC,GACzDrkoC,GAAcijoC,EAEd,MAAMqB,EAAmB,IAAI17mC,YAC3Bm6F,EACA/iH,EACAokoC,GAIF,IAAIG,EACAC,EAHJxkoC,GAAc2uhB,GAKZ,OAAQs3S,EAAiBw+T,2BACzB,OAAQx+T,EAAiBy+T,2BAEzBH,EAAwBpvR,EAAaK,iBACnC,0BACA,IAAkB93V,MAClB,GAEF8mnB,EAAwBrvR,EAAaK,iBACnC,0BACA,IAAkB93V,MAClB,IAIJx0kB,EAAQ+pY,UAAY,IAAI,IAAqB,CAC3CzH,UAAW84zB,EACXvE,OAAQmE,EACRS,YAAaR,EACbn1iC,QAASA,EACTipb,cAAertnB,EACfstnB,cAAertnB,EACf05uC,sBAAuBA,EACvBC,sBAAuBA,EACvB3stC,OAAQA,EACRkulB,UAAWA,EACXu4D,eAAgBp1nB,EAAQ+hmB,KAAKqzB,eAAeA,eAC5CqqQ,WAAYA,EACZ8xF,SAAUA,EAASz7W,SACnB6rC,YAAaA,GAEjB,CACA,MAAM0rI,EAAUrtxB,EAAQutxB,SACxB,GAAI6sa,EAAoB,EAAG,CACzBnuR,EAAaroC,eAAiBw2T,EAE9B,MAAMsB,EACJzvR,EAAaK,iBACX,kBACA,IAAkBnjW,aAClB,IAEF8iW,EAAaK,iBACX,iBACA,IAAkBnjW,aAClB,GAGJ,KAAK,OAAQuynB,GACX,MAAM,IAAI,IACR,mGAIJ,IAAI5rhC,EAASm8vB,EAAaK,iBACxB,kBACA,IAAkBrjW,eAClB,GAEF,KAAK,OAAQn5Z,GAAS,CACpBA,EAAS,IAAIpwF,YAAY06mC,GACzB,IAAK,IAAIlyuC,EAAI,EAAGA,EAAIkyuC,IAAqBlyuC,EACvC4nN,EAAO5nN,GAAK,CAEhB,CAIA,MAAMyzuC,EAAuBD,EAAej0tC,OAAO,SAAUkvC,EAAOqZ,GAClE,OAAOrZ,EAAgB,EAARqZ,CACjB,EAAG,GACGytrB,EAAoB,IAAI/9nB,YAC5Bm6F,EACA/iH,EACA6koC,GAEF7koC,GAAckjoC,EAEd,MAAMx9Q,EAA6BnvJ,EAAQmvJ,4BACvC,OAAQA,IAiLhB,SACEl6iB,EACAu0zB,EACAtlO,EACA9xF,EACArv6B,EACAxM,GAEA,MAAMg4uC,EAAe/E,EAAO3wuC,OAC5B,IAAI21uC,EAAgB,EACpB,IAAK,IAAI3zuC,EAAI,EAAGA,EAAI0zuC,EAAc1zuC,IAAK,CACrC,MAAM8nE,EAAoB,EAAZ6mqC,EAAO3uuC,GACf4zuC,EAAgBx5zB,EAAU51a,MAAMmvuC,EAAeA,EAAgB7rqC,GACrE6rqC,GAAiB7rqC,EAEjBpsE,EAASk4uC,EAAevqO,EAASrpgC,GAAIkI,EAAKqv6B,EAC5C,CACF,CA1LMs8T,EAPyB,OACvB,IAAIr8mC,YAAY+9nB,GAChB5gJ,EACAn7mB,EACAC,EACA,IAAU6sjB,OAIVktrB,EACAnqO,EAAS68J,UACT3uP,EACAz/3B,EAAQ5vC,IACRos9B,GAIJ,IAAIw/Q,EAAkBC,GAClB,OAAQ5ua,EAAQqH,sBAClBsna,EAAkBE,GAGpBl8rC,EAAQksnC,WAAa8vE,EAAgB,CACnC15zB,UAAWm7U,EACX3tiB,OAAQA,EACR+mhC,OAAQ6E,EACRnqO,SAAUA,EAAS68J,UACnBr/iB,cAAertnB,EACfstnB,cAAertnB,EACfgtB,OAAQA,EACRkulB,UAAWA,EACXu4D,eAAgBp1nB,EAAQ+hmB,KAAKqzB,eAAeA,eAC5CqqQ,WAAYA,EACZ/qG,mBAAoBrH,EAAQqH,mBAC5Byia,qBAAsB9pa,EAAQ2rJ,4BAElC,CAEA,GAAIt+N,EAAiB,EAAG,CACtB,MAAMyhf,EAAiB,IAAIz8mC,YACzBm6F,EACA/iH,EACiB,EAAjB4jpB,GAEF5jpB,GAAcmjoC,EACdj6rC,EAAQ66kB,QAAU,IAAI,IAAmB,CACvCv4M,UAAW65zB,EACX5qO,SAAUA,EAAS3q5B,OACnBmogB,cAAertnB,EACfstnB,cAAertnB,EACfk7mB,UAAWA,EACX4iU,WAAYA,EACZt6G,gBAAiBkI,EAAQlI,gBACzBpmf,MAAOsuf,EAAQtuf,OAEnB,CACF,CAhkBE2+R,CAAWz6mB,KAAM42N,EAAa/iH,EAChC,CAEAttG,OAAOgwE,iBAAiBsgqC,EAAoBp2uC,UAAW,CACrDkg7B,eAAgB,CACd1q6B,IAAK,WACH,OAAO,OAAQjW,KAAK+n7B,aAAe/n7B,KAAK+n7B,YAAYpH,eAAiB,CACvE,GAGFylC,aAAc,CACZnw8B,IAAK,WACH,OAAI,OAAQjW,KAAK43nB,SACR53nB,KAAK43nB,QAAQwuV,aAEf,CACT,GAGFC,gBAAiB,CACfpw8B,IAAK,WACH,IAAIow8B,EAAkB,EAOtB,OANI,OAAQrm9B,KAAK8mb,aACfu/hB,GAAmBrm9B,KAAK8mb,UAAUu/hB,kBAEhC,OAAQrm9B,KAAKipqC,cACf5iN,GAAmBrm9B,KAAKipqC,WAAW5iN,iBAE9BA,CACT,GAGFC,mBAAoB,CAClBrw8B,IAAK,WACH,IAAIqw8B,EAAqB,EAOzB,OANI,OAAQtm9B,KAAK8mb,aACfw/hB,GAAsBtm9B,KAAK8mb,UAAUw/hB,qBAEnC,OAAQtm9B,KAAKipqC,cACf3iN,GAAsBtm9B,KAAKipqC,WAAW3iN,oBAEjCA,CACT,GAGFC,mBAAoB,CAClBtw8B,IAAK,WACH,OAAI,OAAQjW,KAAK43nB,SACR53nB,KAAK43nB,QAAQ2uV,mBAEf,CACT,GAGFtjC,qBAAsB,CACpBht6B,IAAK,WACH,OAAO,OAAQjW,KAAK+n7B,aAChB/n7B,KAAK+n7B,YAAY9E,qBACjB,CACN,GAGFujC,cAAe,CACbvw8B,IAAK,WAEL,GAYFmqI,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,GAGFrX,QAAS,CACPn0zB,IAAK,WACH,OAAOjW,KAAKsq0B,QACd,GAGFxrL,KAAM,CACJ7ooB,IAAK,WACH,OAAOjW,KAAKyl9B,KACd,GAGFt48B,IAAK,CACH8I,IAAK,WACH,OAAOjW,KAAKw8mB,UAAUuzJ,iBAAgB,EACxC,GAGF1wJ,SAAU,CACRppmB,IAAK,WACH,OAAOjW,KAAK4ysB,SACd,EACAh+qB,IAAK,SAAUvvB,GACbrF,KAAK4ysB,UAAYvtsB,CACnB,GAGFm36B,WAAY,CACVvm6B,IAAK,WACH,OAAOjW,KAAK+n7B,WACd,GAGFxjuB,MAAO,CACLtuM,IAAK,WACH,OAAOjW,KAAK07X,MACd,EACA9mW,IAAK,SAAUvvB,GACbrF,KAAK07X,OAASr2X,CAChB,KAuGJ,MAAMmssB,EAAe90kB,YAAY4xJ,kBAEjC,SAAS0q9B,EAAwBj5uC,GAC/B,OAAO,IAAI,IAAsBA,EACnC,CAEA,SAASk5uC,EAAuBl5uC,GAC9B,OAAO,IAAI,IAA6BA,EAC1C,CAyVA,SAASuwgC,EAAevz9B,GACtB,MAAM4j4B,EAAiB5j4B,EAAQ4j4B,eAC/B,KAAK,OAAQ5j4B,EAAQww9B,YAAc5sF,EAAiB,EAAG,CACrD,MAAM5gM,EAAW,IAAIv/uB,MAAMmg7B,IAEvB,OAAQ5j4B,EAAQ+pY,YAClB/pY,EAAQ+pY,UAAUwplB,eAAevz9B,EAASgjsB,IAExC,OAAQhjsB,EAAQksnC,aAClBlsnC,EAAQksnC,WAAW34J,eAAevz9B,EAASgjsB,IAEzC,OAAQhjsB,EAAQ66kB,UAClB76kB,EAAQ66kB,QAAQ04Y,eAAevz9B,EAASgjsB,GAE1ChjsB,EAAQww9B,UAAYxtR,CACtB,CACF,CAEA82f,EAAoBp2uC,UAAUw50B,YAAc,SAAU4lG,EAASz66B,GAC7D,OAAOpF,KAAK+n7B,YAAY9tG,YAAY4lG,EAASz66B,EAC/C,EAEAyxuC,EAAoBp2uC,UAAUui7B,WAAa,SAAUnD,GAEnD,MAAMc,EAAiB3g7B,KAAK2g7B,eAC5B,KAAK,OAAQd,IAAYA,EAAU,GAAKA,GAAWc,EACjD,MAAM,IAAI,IACR,gEACEA,EAAiB,OAUvB,OAJK,OAAQ3g7B,KAAKutgC,YAChB+C,EAAetwgC,MAGVA,KAAKutgC,UAAU1tF,EACxB,EAEAg3T,EAAoBp2uC,UAAU6+8B,mBAAqB,SAAUr57B,EAAS47D,IAChE,OAAQ7hF,KAAK8mb,YACf9mb,KAAK8mb,UAAUw4hB,mBAAmBr57B,EAAS47D,IAEzC,OAAQ7hF,KAAKipqC,aACfjpqC,KAAKipqC,WAAW3pN,mBAAmBr57B,EAAS47D,IAE1C,OAAQ7hF,KAAK43nB,UACf53nB,KAAK43nB,QAAQ0nV,mBAAmBr57B,EAAS47D,EAE7C,EAEAg1pC,EAAoBp2uC,UAAUot2B,WAAa,SAAUxn1B,IAC9C,OAAQrmB,KAAKutgC,YAChB+C,EAAetwgC,OAEb,OAAQA,KAAK8mb,YACf9mb,KAAK8mb,UAAU+mb,WAAWxn1B,EAAOrmB,KAAKutgC,YAEpC,OAAQvtgC,KAAKipqC,aACfjpqC,KAAKipqC,WAAWp7T,WAAWxn1B,EAAOrmB,KAAKutgC,YAErC,OAAQvtgC,KAAK43nB,UACf53nB,KAAK43nB,QAAQi2O,WAAWxn1B,EAAOrmB,KAAKutgC,UAExC,EAEAspO,EAAoBp2uC,UAAU8tB,OAAS,SAAU67yB,EAASjtG,GACxD,IAAI/8kB,GAAQ,GACR,OAAQpgJ,KAAK8mb,aACf9mb,KAAK8mb,UAAU2qZ,mBAAqBzx0B,KAAKsq0B,SAASmH,mBAClDzx0B,KAAK8mb,UAAUiyiB,eAAiB/49B,KAAKsq0B,SAASyuJ,eAC9C/49B,KAAK8mb,UAAUv4Z,OAAO4usB,GACtB/8kB,EAAQA,GAASpgJ,KAAK8mb,UAAU1mS,QAE9B,OAAQpgJ,KAAKipqC,cACfjpqC,KAAKipqC,WAAW16oC,OAAO4usB,GACvB/8kB,EAAQA,GAASpgJ,KAAKipqC,WAAW7ohC,QAE/B,OAAQpgJ,KAAK43nB,WACf53nB,KAAK43nB,QAAQrpmB,OAAO4usB,GACpB/8kB,EAAQA,GAASpgJ,KAAK43nB,QAAQx3e,QAE5B,OAAQpgJ,KAAK+n7B,cAAgB3nyB,KAC1B,OAAQpgJ,KAAKutgC,YAChB+C,EAAetwgC,MAEjBA,KAAK+n7B,YAAYx55B,OAAO67yB,EAASjtG,GACjCn9tB,KAAKyh1B,QAAS,EAElB,EAEAo1Z,EAAoBp2uC,UAAU+tO,KAAO,SAAUshd,EAAKqtC,EAAYnksB,GAEhE,EAEA69sC,EAAoBp2uC,UAAU8n9B,qBAAuB,SAAU1oC,GAC7D,MAAMsrP,EAAYnrqC,KAAKipqC,WACvB,IAAK,OAAQkC,GAIb,OAAOA,EAAUppD,aAAaliM,EAChC,EAEAg3T,EAAoBp2uC,UAAU05B,YAAc,WAC1C,OAAO,CACT,EAEA08sC,EAAoBp2uC,UAAU26B,QAAU,WAKtC,OAJAp7B,KAAK8mb,UAAY9mb,KAAK8mb,WAAa9mb,KAAK8mb,UAAU1rZ,UAClDp7B,KAAKipqC,WAAajpqC,KAAKipqC,YAAcjpqC,KAAKipqC,WAAW7toC,UACrDp7B,KAAK43nB,QAAU53nB,KAAK43nB,SAAW53nB,KAAK43nB,QAAQx8lB,UAC5Cp7B,KAAK+n7B,YAAc/n7B,KAAK+n7B,aAAe/n7B,KAAK+n7B,YAAY3s5B,WACjD,OAAcp7B,KACvB,EAqBA,QAAe,8BAAmB,I,8JChuBlC,SAASm5uC,EAAqBp5uC,GAE5BC,KAAKo5uC,OAASr5uC,EAAQsvgC,MACtBrvgC,KAAKq5uC,aAAet5uC,EAAQwugC,YAC5BvugC,KAAKs5uC,WAAav5uC,EAAQuvgC,UAC1BtvgC,KAAKu5uC,kBAAoBx5uC,EAAQyugC,iBACjCxugC,KAAKw5uC,YAAcz5uC,EAAQwvgC,WAC3BvvgC,KAAKy5uC,mBAAqB15uC,EAAQ0ugC,kBAClCzugC,KAAK05uC,SAAW35uC,EAAQyvgC,QACxBxvgC,KAAK25uC,gBAAkB55uC,EAAQ2ugC,eAC/B1ugC,KAAKsl1B,aAAevl1B,EAAQ2+rB,YAC5B1+rB,KAAK+n7B,YAAcho7B,EAAQy86B,WAC3Bx86B,KAAK694B,gBAAkB994B,EAAQoyqB,eAE/BnyqB,KAAKygpB,QAAU1gpB,EAAQ2rB,QAClB,OAAQ1rB,KAAKygpB,YACZ,OAAQzgpB,KAAK694B,iBACf794B,KAAKygpB,QAAU,IAAWx1lB,MAAMjrD,KAAK694B,gBAAgBny3B,QAErD1rB,KAAKygpB,QAAU,IAAWx1lB,MAAM,IAAW++iB,OAI/ChqmB,KAAKu1jC,sBAAmBpwjC,EACxBnF,KAAK45uC,qBAAkBz0uC,EAEvBnF,KAAK49vB,cAAWz4vB,EAChBnF,KAAK65uC,mBAAgB10uC,EACrBnF,KAAK85uC,kBAAe30uC,EAEpBnF,KAAK84pB,gBAAa3zpB,EAClBnF,KAAK20uC,qBAAkBxvuC,EAEvBnF,KAAK6zuC,eAAY1uuC,EAEjBnF,KAAK+5uC,uBAAoB50uC,EACzBnF,KAAK+zuC,mBAAgB5uuC,EAErBnF,KAAKyh1B,QAAS,EACdzh1B,KAAK41rB,cAAWzwrB,EAChBnF,KAAK4x0B,YAASzs0B,EAEdnF,KAAKg6uC,sBAAmB70uC,EAExBnF,KAAKkj1B,gBAAa/90B,EAOlBnF,KAAK+49B,gBAAiB,EAOtB/49B,KAAKi6uC,cAAe,EAOpBj6uC,KAAKyx0B,mBAAqB,IAAmB8oB,IAC/C,CAEAh01B,OAAOgwE,iBAAiB4iqC,EAAqB14uC,UAAW,CAUtD4l9B,gBAAiB,CACfpw8B,IAAK,WACH,OAAI,OAAQjW,KAAKkj1B,YACRlj1B,KAAKkj1B,WAAWmjI,gBAElB,CACT,GAYFC,mBAAoB,CAClBrw8B,IAAK,WACH,OAAI,OAAQjW,KAAKkj1B,YACRlj1B,KAAKkj1B,WAAWojI,mBAElB,CACT,GAUFlm0B,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,KAIJ03Z,EAAqBvpO,gBACnB,IAAQ3nZ,aAAe,IAAWA,aACpCkxnB,EAAqBppO,qBAAuB,IAAQ9nZ,aAAe,EACnEkxnB,EAAqBjpO,sBACnB,IAAQjoZ,aAAe,IAAWA,aACpCkxnB,EAAqB9oO,mBAAqB,IAAWpoZ,aAAe,EAuDpE,MAAM4snB,EAA8B,IAAI,IACtC,6BACA,GAEIvva,EAAe,IAAI,IA+LzB6za,EAAqB14uC,UAAU6vgC,eAAiB,SAAUvz9B,EAASgjsB,GACjE//uB,KAAKkj1B,WAAWotL,eAAevz9B,EAASgjsB,EAC1C,EAQAo5f,EAAqB14uC,UAAU6+8B,mBAAqB,SAAUr57B,EAAS47D,GACrE7hF,KAAKkj1B,WAAWo8H,mBAAmBr57B,EAAS47D,EAC9C,EAQAs3pC,EAAqB14uC,UAAUot2B,WAAa,SAAUxn1B,EAAO05tB,GAC3D//uB,KAAKkj1B,WAAW2qB,WAAWxn1B,EAAO05tB,EACpC,EASAo5f,EAAqB14uC,UAAU0tgC,eAAiB,SAAUtuF,EAASh+1B,GACjE7hF,KAAKkj1B,WAAWirL,eAAetuF,EAASh+1B,EAC1C,EAOAs3pC,EAAqB14uC,UAAU8tB,OAAS,SAAU4usB,GAChD,GAAKn9tB,KAAKyh1B,OAcVzh1B,KAAKkj1B,WAAW61I,eAAiB/49B,KAAK+49B,eACtC/49B,KAAKkj1B,WAAW+2Z,aAAej6uC,KAAKi6uC,aACpCj6uC,KAAKkj1B,WAAWzR,mBAAqBzx0B,KAAKyx0B,mBAC1Czx0B,KAAKkj1B,WAAW30zB,OAAO4usB,QAZrB,IAJK,OAAQn9tB,KAAK41rB,YAChB51rB,KAAK41rB,SAxOX,SAAyB3iC,GACvB,KAAI,OAAQA,EAAWiwL,eAIlB,OAAQjwL,EAAW+mlB,kBAAmB,CACzC,IAAI3qO,EAAQp8W,EAAWmmlB,OACnB7qO,EAAct7W,EAAWomlB,aACzB/pO,EAAYr8W,EAAWqmlB,WACvB9qO,EAAmBv7W,EAAWsmlB,kBAC9BhqO,EAAat8W,EAAWumlB,YACxB/qO,EAAoBx7W,EAAWwmlB,mBAC/BjqO,EAAUv8W,EAAWymlB,SACrBhrO,EAAiBz7W,EAAW0mlB,gBAE5BO,EAAmBjnlB,EAAW8mlB,kBAC9BxE,EAAetilB,EAAW8glB,cAE9B,KAAK,OAAQmG,GAAmB,CAE9B,IAAIj3uC,EAAS,GACT,OAAQgwpB,EAAWmmlB,UACrB/pO,EAAQp8W,EAAWmmlB,OAAS/pO,EAAM5lgC,QAClC8kgC,EAAct7W,EAAWomlB,aAAe9qO,EAAY9kgC,QACpDxG,GAAUsrgC,EAAYtrgC,SAEpB,OAAQgwpB,EAAWqmlB,cACrBhqO,EAAYr8W,EAAWqmlB,WAAahqO,EAAU7lgC,QAC9C+kgC,EAAmBv7W,EAAWsmlB,kBAC5B/qO,EAAiB/kgC,QACnBxG,GAAUurgC,EAAiBvrgC,SAEzB,OAAQgwpB,EAAWumlB,eACrBjqO,EAAat8W,EAAWumlB,YAAcjqO,EAAW9lgC,QACjDglgC,EAAoBx7W,EAAWwmlB,mBAC7BhrO,EAAkBhlgC,QACpBxG,GAAUwrgC,EAAkBxrgC,SAE1B,OAAQgwpB,EAAWymlB,YACrBlqO,EAAUv8W,EAAWknlB,QAAU3qO,EAAQ/lgC,QACvCilgC,EAAiBz7W,EAAW0mlB,gBAAkBjrO,EAAejlgC,QAC7DxG,GAAUyrgC,EAAezrgC,QAG3Bi3uC,EAAmBjnlB,EAAW8mlB,kBAAoB,IAAIr9mC,YAAYz5H,GAClE,MAAMu56B,EAAavpR,EAAW80R,YAE9B,IAAK,IAAI9i7B,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAM48E,EAAQ261B,EAAWtkD,SAASjz3B,EAAGqg0B,GACrC40a,EAAiBj1uC,GAAK48E,EAAMsjkB,QAC9B,CAEAowlB,EAAetilB,EAAW8glB,cA/GhC,SAAoB9glB,GAClB,MAAMsilB,EAAe,IAAIrikC,aACvB,IAAQ+0c,aAAe,IAAWA,cAGpC,IAAIlmnB,EAAS,EAKb,OAJA,IAAWu4Q,KAAK24Y,EAAWxS,QAAS80lB,EAAcxzuC,GAClDA,GAAU,IAAWkmnB,aACrB,IAAQ3tW,KAAK24Y,EAAWqyL,aAAciwZ,EAAcxzuC,GAE7CwzuC,CACT,CAoGgDC,CAAWvilB,EACvD,CAEA,MAAMwilB,EAAuB,IACzB,OAAQpmO,IACVomO,EAAqB7wuC,KAAKyqgC,EAAMt47B,OAAQw37B,EAAYx37B,SAElD,OAAQu47B,IACVmmO,EAAqB7wuC,KAAK0qgC,EAAUv47B,OAAQy37B,EAAiBz37B,SAE3D,OAAQw47B,IACVkmO,EAAqB7wuC,KAAK2qgC,EAAWx47B,OAAQ037B,EAAkB137B,SAE7D,OAAQy47B,IACVimO,EAAqB7wuC,KAAK4qgC,EAAQz47B,OAAQ237B,EAAe337B,QAE3D0+pC,EAAqB7wuC,KAAKs1uC,EAAiBnjqC,OAAQw+pC,EAAax+pC,QAEhE,MAAM8/D,EAAa,CACjBw43B,OAAO,OAAQA,GAASA,EAAMt47B,YAAS5xE,EACvCopgC,aAAa,OAAQc,GAASd,EAAYx37B,YAAS5xE,EACnDmqgC,WAAW,OAAQA,GAAaA,EAAUv47B,YAAS5xE,EACnDqpgC,kBAAkB,OAAQc,GACtBd,EAAiBz37B,YACjB5xE,EACJoqgC,YAAY,OAAQA,GAAcA,EAAWx47B,YAAS5xE,EACtDspgC,mBAAmB,OAAQc,GACvBd,EAAkB137B,YAClB5xE,EACJqqgC,SAAS,OAAQA,GAAWA,EAAQz47B,YAAS5xE,EAC7CupgC,gBAAgB,OAAQc,GAAWd,EAAe337B,YAAS5xE,EAC3D+0uC,iBAAkBA,EAAiBnjqC,OACnCw+pC,aAAcA,EAAax+pC,QAGvBokjB,EAAmB83B,EAAW+mlB,iBAClCnF,EAA4Bz5mB,aAC1Bvkf,EACA4+lC,GAEJ,KAAK,OAAQt6mB,GAEX,OAGF,OAAOA,EACJhgmB,KAAK,SAAUnC,GACd,GAAIi6nB,EAAW94nB,cACb,OAGF,MAAMo7sC,EAAe,IAAIrikC,aAAal6I,EAAOu8sC,cACvC6E,EAtJd,SAAsBnnlB,EAAYsilB,GAChC,IAAIxzuC,EAAS,EAEb,MAAMq4uC,EAAyB7E,EAAaxzuC,KACtCs4uC,EAAS9E,EAAaxzuC,KACtBu4uC,EAAOrnlB,EAAWsia,iBAAmB,IAAI/0jC,MAAM65uC,GAErD,IAAK,IAAIp1uC,EAAI,EAAGA,EAAIo1uC,IAAUp1uC,EAC5Bq1uC,EAAIr1uC,GAAK,IAAekjnB,OAAOotnB,EAAcxzuC,GAC7CA,GAAU,IAAekmnB,aAG3B,MAAMsynB,EAAoBhF,EAAaxzuC,KACjCy4uC,EAAOvnlB,EAAW2mlB,gBAAkB,IAAIp5uC,MAAM+5uC,GAEpD,IAAK,IAAIhvrC,EAAI,EAAGA,EAAIgvrC,IAAqBhvrC,EAAG,CAC1C,MAAMs2B,EAAQ,IAAMsmiB,OAAOotnB,EAAcxzuC,GACzCA,GAAU,IAAMkmnB,aAEhB,MAAM0xE,EAAc47iB,EAAaxzuC,KAC3BgrE,EAAQwoqC,EAAaxzuC,KAErBkB,EAASsyuC,EAAaxzuC,KACtBusgC,EAAW,IAAI9tgC,MAAMyC,GAE3B,IAAK,IAAI0gB,EAAI,EAAGA,EAAI1gB,IAAU0gB,EAC5B2q/B,EAAS3q/B,GAAK4xtC,EAAaxzuC,KAG7By4uC,EAAIjvrC,GAAK,IAAI,IAAkB,CAC7Bs2B,MAAOA,EACP9/E,OAAQ43rB,EACR5snB,MAAOA,EACPuh8B,SAAUA,GAEd,CAEA,OAAO8rO,CACT,CAgHuCK,CAAaxnlB,EAAYsilB,GAGtDtilB,EAAW2qG,SADkB,IAA3Bw8e,EACoB,IAAI39mC,YAAYzjG,EAAO6pK,SAEvB,IAAInmE,YAAY1jG,EAAO6pK,SAG/Cowd,EAAW4mlB,cAAgB,IAAIn9mC,YAAY1jG,EAAO0htC,cAClDznlB,EAAW6mlB,aAAe,IAAIp9mC,YAAY1jG,EAAOw/sC,aAEjDvllB,EAAW6F,WAAa,IAAI31oB,aAAa6V,EAAOqmZ,WAChD4zO,EAAW0hlB,gBAAkB,IAAIl4mC,YAAYzjG,EAAOi9sC,gBAEpDhjlB,EAAW4glB,UAAY,IAAIp3mC,YAAYzjG,EAAOs1+B,UAgBtD,SAAyBr7W,IAClB,OAAQA,EAAWiwL,cACtBjwL,EAAWiwL,WAAa,IAAI,IAAsB,CAChDs5F,WAAYvpR,EAAW80R,YACvB1ogB,UAAW4zO,EAAW6F,WACtBw1W,SAAUr7W,EAAW4glB,UACrBoC,eAAgBhjlB,EAAW0hlB,gBAC3B9xiC,QAASowd,EAAW2qG,SACpB88e,aAAcznlB,EAAW4mlB,cACzBrB,YAAavllB,EAAW6mlB,aACxBa,eAAgB1nlB,EAAW2mlB,gBAC3BznkB,eAAgBlf,EAAW4qP,gBAC3B0wF,gBAAiBt7U,EAAWsia,iBAC5B7piC,OAAQunoB,EAAWxS,QACnB25e,WAAYnne,EAAW2nlB,aAAe3nlB,IAGxCA,EAAWmmlB,YAASj0uC,EACpB8tpB,EAAWomlB,kBAAel0uC,EAC1B8tpB,EAAWqmlB,gBAAan0uC,EACxB8tpB,EAAWsmlB,uBAAoBp0uC,EAC/B8tpB,EAAWumlB,iBAAcr0uC,EACzB8tpB,EAAWwmlB,wBAAqBt0uC,EAChC8tpB,EAAWymlB,cAAWv0uC,EACtB8tpB,EAAW0mlB,qBAAkBx0uC,EAC7B8tpB,EAAWxS,aAAUt7oB,EACrB8tpB,EAAWqyL,kBAAeng1B,EAC1B8tpB,EAAW80R,iBAAc5i7B,EACzB8tpB,EAAW4qP,qBAAkB144B,EAE7B8tpB,EAAWsia,sBAAmBpwjC,EAC9B8tpB,EAAW2mlB,qBAAkBz0uC,EAE7B8tpB,EAAW2qG,cAAWz4vB,EACtB8tpB,EAAW4mlB,mBAAgB10uC,EAC3B8tpB,EAAW6mlB,kBAAe30uC,EAE1B8tpB,EAAW6F,gBAAa3zpB,EACxB8tpB,EAAW0hlB,qBAAkBxvuC,EAE7B8tpB,EAAW4glB,eAAY1uuC,EAEvB8tpB,EAAW8mlB,uBAAoB50uC,EAC/B8tpB,EAAW8glB,mBAAgB5uuC,EAE3B8tpB,EAAW+mlB,sBAAmB70uC,EAElC,CA7DQ01uC,CAAgB5nlB,GAEhBA,EAAWwuL,QAAS,CACtB,GACC5kwB,MAAOrpE,IACFy/oB,EAAW94nB,gBAIf84nB,EAAW2+K,OAASp+zB,IAE1B,CACF,CAoGsBi82B,CAAgBzv3B,QAG9B,OAAQA,KAAK4x0B,QAAS,CACxB,MAAMp+zB,EAAQxT,KAAK4x0B,OAEnB,MADA5x0B,KAAK4x0B,YAASzs0B,EACRqO,CACR,CASJ,EAWA2luC,EAAqB14uC,UAAU05B,YAAc,WAC3C,OAAO,CACT,EAaAg/sC,EAAqB14uC,UAAU26B,QAAU,WAEvC,OADAp7B,KAAKkj1B,WAAalj1B,KAAKkj1B,YAAclj1B,KAAKkj1B,WAAW9nzB,WAC9C,OAAcp7B,KACvB,EACA,QAAe,8BAAoB,I,sPC3cnC,SAAS86uC,EAAmB/6uC,GAE1BC,KAAK84pB,WAAa/4pB,EAAQs/a,UAE1Br/a,KAAK+n7B,YAAcho7B,EAAQy86B,WAC3Bx86B,KAAK6zuC,UAAY9zuC,EAAQuugC,SAEzBtugC,KAAKi5pB,WAAal5pB,EAAQ65mB,UAC1B55mB,KAAKi+M,WAAal+M,EAAQ+rnB,cAC1B9rnB,KAAK46X,WAAa76X,EAAQgsnB,cAC1B/rnB,KAAKog0B,iBAAmBrg0B,EAAQmi0B,gBAEhCli0B,KAAK8r1B,qBAAuB,IAAI,IAAoB,CAClD0wF,WAAYz86B,EAAQy86B,WACpB1gmB,MAAO/7U,EAAQ+7U,QAEjB97U,KAAK6r1B,iBAAmB,IAAI,IAAgB,CAC1C2wF,WAAYz86B,EAAQy86B,WACpB1gmB,MAAO/7U,EAAQ+7U,QAEjB97U,KAAK2h3B,oBAAsB,IAAI,IAC/B3h3B,KAAK2h3B,oBAAoB+nT,oBAAqB,EAE9C1pqC,KAAK+zuC,mBAAgB5uuC,EAErBnF,KAAKyh1B,QAAS,EACdzh1B,KAAK41rB,cAAWzwrB,EAChBnF,KAAK4x0B,YAASzs0B,CAChB,CAEAoB,OAAOgwE,iBAAiBukqC,EAAmBr6uC,UAAW,CAUpD2/I,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,GAYF2kI,aAAc,CACZnw8B,IAAK,WACH,OAAOjW,KAAK8r1B,qBAAqB7o1B,MACnC,GAYFsj9B,mBAAoB,CAClBtw8B,IAAK,WAGH,OAFsBjW,KAAK8r1B,qBAAqBz3H,YAC9Br0tB,KAAK6r1B,iBAAiBx3H,WAE1C,KAwBJ,MAAMwghB,EAA8B,IAAI,IACtC,yBACA,GAEIzllB,EAAkB,IAAI,IAqF5B0rlB,EAAmBr6uC,UAAU6vgC,eAAiB,SAAUvz9B,EAASgjsB,GAC/D,MAAMkvG,EAAsBjv1B,KAAK8r1B,qBAC3BkD,EAAkBhv1B,KAAK6r1B,iBACvBy7B,EAAqBtn3B,KAAK2h3B,oBAE1B2sJ,EAAWtugC,KAAK6zuC,UAChB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAM466B,EAAUyuF,EAASrpgC,GAEnBy+zB,EAAYurB,EAAoBh50B,IAAIhR,GACpCO,EAAQwp1B,EAAgB/40B,IAAIhR,GAC5B+40B,EAAWspC,EAAmBrx2B,IAAIhR,GAExC86uB,EAAS8/L,GAAW,IAAI,IACtB9i4B,EACA8i4B,EACAn8G,EACAl+zB,EACAw40B,EAEJ,CACF,EAQA88Z,EAAmBr6uC,UAAU6+8B,mBAAqB,SAAUr57B,EAAS47D,GAC/D57D,GACF,IAAMglC,MAAM42B,EAAO7hF,KAAK8r1B,qBAAqBo/F,iBAC7C,IAAMjg4B,MAAM42B,EAAO7hF,KAAK6r1B,iBAAiBq/F,iBACzC,IAAMjg4B,MAAM42B,EAAO7hF,KAAK2h3B,oBAAoBupE,mBAE5C,IAAMjg4B,MAAM,IAAMkjmB,MAAOnupB,KAAK8r1B,qBAAqBo/F,iBACnD,IAAMjg4B,MAAM,IAAMkjmB,MAAOnupB,KAAK6r1B,iBAAiBq/F,iBAC/C,IAAMjg4B,MAAM,IAAMkjmB,MAAOnupB,KAAK2h3B,oBAAoBupE,iBAEtD,EAwCA,MAAM5lH,EAAe,IAAI,IACnBy1a,EAAgB,IAAI,IACpBC,EAAgB,IAAI,IACpBC,EAAgB,IAAI,IACpBC,EAAgB,IAAI,IACpBC,EAAgB,IAAI,IACpBC,EAAyB,IAAI,IAC7BC,EAAgC,IAAI,IACpCC,EAAkC,IAAI,IAQ5CR,EAAmBr6uC,UAAUot2B,WAAa,SAAUxn1B,EAAO05tB,GACzD,KAAK,OAAQ15tB,GAEX,YAzDJ,SAAoBwsoB,EAAUktF,GAC5B,MAAMuuR,EAAWz7W,EAASghlB,UACpB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAGzBmw1B,EAAQ9w1B,MAAO,EACf8w1B,EAAQs2H,UAAY,IAAyBJ,iBAC7Cl2H,EAAQvzwB,MAAQ,IAAyBgQ,aACzCujwB,EAAQu2H,kBACN,IAAyBR,yBAC3B/1H,EAAQw2H,kBACN,IAAyBR,yBAC3Bh2H,EAAQy2H,WAAa,IAAM19T,MAC3BinM,EAAQ02H,kBAAoB,IAAM39T,MAClCinM,EAAQ22H,kBAAoB,EAC5B32H,EAAQ1wxB,KAAO,kBACf0wxB,EAAQ/e,WAAa,IAAWyiC,KAChC1jB,EAAQ42H,eAAY7m9B,EACpBiw1B,EAAQl3c,gBAAkB,IAAI,IAAM,KAAO,KAAO,KAAO,IACzDk3c,EAAQzY,kBAAoB,IAAI,IAAW,EAAG,GAC9CyY,EAAQ62H,mBAAoB,EAC5B72H,EAAQ/yB,qBAAkBl9zB,EAC1Biw1B,EAAQ9yB,4BAAyBn9zB,EACjCiw1B,EAAQv/K,8BAA2B1wqB,EACnCiw1B,EAAQ76M,aAAe,EACvB66M,EAAQ82H,mBAAoB,EAC5B92H,EAAQ+2H,gBAAkB,IAAMh+T,MAChCinM,EAAQ5lwB,WAAQrqF,EAChBiw1B,EAAQ3yB,yBAA2B,EACnC2yB,EAAQpzB,iBAAmB,IAAiBgB,OAC5CoyB,EAAQnzB,eAAiB,IAAee,OACxCoyB,EAAQs5F,sBAAwB,IAAiBjv4B,MACjD21yB,EAAQi3H,oBAAsB,IAAetlC,QAC/C,CACF,CAoBIquT,CAAWp1uC,KAAM+/uB,GAInB,MAAMuuR,EAAWtugC,KAAK6zuC,UAChB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAyEzB,IAtEI,OAAQohB,EAAM/hB,QAChB8w1B,EAAQ9w1B,KAAO+hB,EAAM/hB,KAAKwwP,SAASsgmB,KAGjC,OAAQ/u0B,EAAMql8B,aAChBt2H,EAAQs2H,UAAYrl8B,EAAMql8B,UAAU52tB,SAASsgmB,KAG3C,OAAQ/u0B,EAAMw7D,SAChBuzwB,EAAQvzwB,MAAQx7D,EAAMw7D,MAAMsh4B,cAAc/tH,EAAS9vB,KAGjD,OAAQj/yB,EAAMsl8B,qBAChBv2H,EAAQu2H,kBAAoBtl8B,EAAMsl8B,kBAAkBxI,cAClD/tH,EACA2lZ,KAIA,OAAQ10tC,EAAMul8B,qBAChBx2H,EAAQw2H,kBAAoBvl8B,EAAMul8B,kBAAkB92tB,SAASsgmB,KAG3D,OAAQ/u0B,EAAMwl8B,cAChBz2H,EAAQy2H,WAAaxl8B,EAAMwl8B,WAAW1I,cACpC/tH,EACA4lZ,KAIA,OAAQ30tC,EAAMyl8B,qBAChB12H,EAAQ02H,kBAAoBzl8B,EAAMyl8B,kBAAkB3I,cAClD/tH,EACA6lZ,KAIA,OAAQ50tC,EAAM0l8B,qBAChB32H,EAAQ22H,kBAAoB1l8B,EAAM0l8B,kBAAkBj3tB,SAASsgmB,KAG3D,OAAQ/u0B,EAAMq+C,QAChB0wxB,EAAQ1wxB,KAAOr+C,EAAMq+C,KAAKowL,SAASsgmB,KAGjC,OAAQ/u0B,EAAMgwzB,cAChB+e,EAAQ/e,WAAahwzB,EAAMgwzB,WAAWvhlB,SAASsgmB,KAG7C,OAAQ/u0B,EAAM2l8B,WAChB52H,EAAQ42H,UAAY3l8B,EAAM2l8B,UAAUl3tB,SAASsgmB,GAE7CA,EAAQ42H,eAAY7m9B,GAGlB,OAAQkhB,EAAM63X,mBAChBk3c,EAAQl3c,gBAAkB73X,EAAM63X,gBAAgBilkB,cAC9C/tH,EACA8lZ,KAIA,OAAQ70tC,EAAMs2zB,qBAChByY,EAAQzY,kBAAoBt2zB,EAAMs2zB,kBAAkB7nlB,SAASsgmB,KAG3D,OAAQ/u0B,EAAM4l8B,qBAChB72H,EAAQ62H,kBAAoB5l8B,EAAM4l8B,kBAAkBn3tB,SAASsgmB,KAG3D,OAAQ/u0B,EAAMg8yB,iBAAkB,CAClC,MAAMk5a,EAAuBl1tC,EAAMg8yB,gBAAgBvtkB,SAASsgmB,IACxD,OAAQmmZ,IACVH,EAAuB7lkB,KAAOgmkB,EAAqBl4tC,EACnD+3tC,EAAuBhogB,UAAYmogB,EAAqBj4tC,EACxD83tC,EAAuB5lkB,IAAM+lkB,EAAqB14tC,EAClDu4tC,EAAuB/ngB,SAAWkogB,EAAqBn6tC,EACvDg00B,EAAQ/yB,gBAAkB+4a,GAE1BhmZ,EAAQ/yB,qBAAkBl9zB,CAE9B,MACEiw1B,EAAQ/yB,qBAAkBl9zB,EAG5B,IAAI,OAAQkhB,EAAMi8yB,wBAAyB,CACzC,MAAMk5a,EACJn1tC,EAAMi8yB,uBAAuBxtkB,SAASsgmB,IACpC,OAAQomZ,IACVH,EAA8B9lkB,KAAOimkB,EAA4Bn4tC,EACjEg4tC,EAA8BjogB,UAAYoogB,EAA4Bl4tC,EACtE+3tC,EAA8B7lkB,IAAMgmkB,EAA4B34tC,EAChEw4tC,EAA8BhogB,SAAWmogB,EAA4Bp6tC,EACrEg00B,EAAQ9yB,uBAAyB+4a,GAEjCjmZ,EAAQ9yB,4BAAyBn9zB,CAErC,MACEiw1B,EAAQ9yB,4BAAyBn9zB,EAGnC,IAAI,OAAQkhB,EAAMwvpB,0BAA2B,CAC3C,MAAM4lkB,EACJp1tC,EAAMwvpB,yBAAyB/gb,SAASsgmB,IACtC,OAAQqmZ,IACVH,EAAgC/lkB,KAAOkmkB,EAA8Bp4tC,EACrEi4tC,EAAgC9lkB,IAAMimkB,EAA8Bn4tC,EACpE8x0B,EAAQv/K,yBAA2BylkB,GAEnClmZ,EAAQv/K,8BAA2B1wqB,CAEvC,MACEiw1B,EAAQv/K,8BAA2B1wqB,GAGjC,OAAQkhB,EAAMk0nB,gBAChB66M,EAAQ76M,aAAel0nB,EAAMk0nB,aAAazlZ,SAASsgmB,KAGjD,OAAQ/u0B,EAAM6l8B,qBAChB92H,EAAQ82H,kBAAoB7l8B,EAAM6l8B,kBAAkBp3tB,SAASsgmB,KAG3D,OAAQ/u0B,EAAM8l8B,mBAChB/2H,EAAQ+2H,gBAAkB9l8B,EAAM8l8B,gBAAgBhJ,cAC9C/tH,EACA+lZ,KAIA,OAAQ90tC,EAAMmpE,OAChB4lwB,EAAQ5lwB,MAAQnpE,EAAMmpE,MAAMslK,SAASsgmB,GAErCA,EAAQ5lwB,WAAQrqF,GAGd,OAAQkhB,EAAMo8yB,4BAChB2yB,EAAQ3yB,yBACNp8yB,EAAMo8yB,yBAAyB3tkB,SAASsgmB,KAGxC,OAAQ/u0B,EAAM27yB,oBAChBozB,EAAQpzB,iBAAmB37yB,EAAM27yB,iBAAiBltkB,SAASsgmB,KAGzD,OAAQ/u0B,EAAM47yB,kBAChBmzB,EAAQnzB,eAAiB57yB,EAAM47yB,eAAentkB,SAASsgmB,KAGrD,OAAQ/u0B,EAAMqo6B,yBAChBt5F,EAAQs5F,sBACNro6B,EAAMqo6B,sBAAsB55rB,SAASsgmB,KAGrC,OAAQ/u0B,EAAMgm8B,uBAChBj3H,EAAQi3H,oBAAsBhm8B,EAAMgm8B,oBAAoBv3tB,SAASsgmB,GAErE,CACF,EAKA0lZ,EAAmBr6uC,UAAU8tB,OAAS,SAAU4usB,GAC9C,IAAKn9tB,KAAKyh1B,UACH,OAAQzh1B,KAAK41rB,YAChB51rB,KAAK41rB,SArWX,SAAsBjykB,EAAQshc,GAC5B,IAAI5lI,EAAY17T,EAAOm1iB,WACnBy8kB,EAAe5xnC,EAAOownC,eAErB,OAAQwB,KAEXl2zB,EAAY17T,EAAOm1iB,WAAaz5O,EAAU51a,QAC1Ck6G,EAAOkwnC,UAAYlwnC,EAAOkwnC,UAAUpquC,QAEpC8ruC,EAAe5xnC,EAAOownC,cAnC1B,SAAoBpwnC,EAAQshc,GAC1B,MAAM20D,EAAYj2f,EAAOs1iB,WACnBntC,EAAgBnogB,EAAOs6F,WACvB8ta,EAAgBpogB,EAAOi3Q,WAEvBqtP,EAAe,EAAI,IAAUA,aAAe,IAAUA,aACtDstnB,EAAe,IAAIrikC,aAAa+0c,GAEtC,IAAIlmnB,EAAS,EASb,OARAwzuC,EAAaxzuC,KAAY+pnB,EACzBypnB,EAAaxzuC,KAAYgqnB,EAEzB,IAAUzxW,KAAKs/V,EAAW27nB,EAAcxzuC,GACxCA,GAAU,IAAUkmnB,aAEpB,IAAU3tW,KAAK2qS,EAAWswrB,EAAcxzuC,GAEjCwzuC,CACT,CAiB0CC,CAAW7xnC,EAAQshc,IAG3D,MAAMwwrB,EAAuB,CAACp2zB,EAAUtoW,OAAQw+pC,EAAax+pC,QACvD8/D,EAAa,CACjBwoS,UAAWA,EAAUtoW,OACrBw+pC,aAAcA,EAAax+pC,QAGvBokjB,EAAkB05mB,EAA4Bz5mB,aAClDvkf,EACA4+lC,GAEF,IAAK,OAAQt6mB,GAKb,OAAOA,EACJhgmB,KAAMnC,IACL,GAAI2qF,EAAOxpF,cACT,OAGFwpF,EAAOm1iB,WAAa,IAAI5lf,aAAal6I,EAAOqmZ,WAC5C,MAAM4va,EAAsBtruB,EAAOmouB,qBAC7BkD,EAAkBrruB,EAAOkouB,iBACzBy7B,EAAqB3jwB,EAAOg+vB,oBAClCtic,EAAY17T,EAAOm1iB,WACnB,MAAMw1W,EAAW3q5B,EAAOkwnC,UAClBp8e,EAAiBp4U,EAAUp8a,OAAS,EAEpCi/zB,EAAkBv+sB,EAAOy8sB,kBAAoB,KAAgBlgN,KAEnE,IAAK,IAAIj7mB,EAAI,EAAGA,EAAIwyvB,IAAkBxyvB,EAAG,CACvC,MAAMwD,EAAK6lgC,EAASrpgC,GAEd2hB,EAAW,IAAWuhmB,OAAO9oM,EAAe,EAAJp6a,EAAOmqpB,GAE/ChxoB,EAAI6w0B,EAAoB/1zB,MAC9B9a,EAAEwI,SAAWA,EACbxI,EAAEql6B,YAAch76B,EAChB2V,EAAE8jzB,gBAAkBA,EAEpB,MAAMtgzB,EAAIot0B,EAAgB91zB,MAC1BtX,EAAE9d,KAAO,IACT8d,EAAEgF,SAAWA,EACbhF,EAAE6h6B,YAAch76B,EAChBmZ,EAAEsgzB,gBAAkBA,EAEVolD,EAAmBpu1B,MAC3BmmZ,UAAY,CAAC,IAAWp0X,MAAMrkC,GAAW,IAAWqkC,MAAMrkC,GAC9D,CAEA+8F,EAAOm1iB,gBAAa3zpB,EACpBw+G,EAAOownC,mBAAgB5uuC,EACvBw+G,EAAO89tB,QAAS,IAEjB5kwB,MAAOrpE,IACFmwG,EAAOxpF,gBAKXwpF,EAAOiutB,OAASp+zB,IAEtB,CA0RsBkouC,CAAa17uC,KAAMm9tB,EAAWpnB,cAAc9wJ,aAG1D,OAAQjljB,KAAK4x0B,SAAS,CACxB,MAAMp+zB,EAAQxT,KAAK4x0B,OAEnB,MADA5x0B,KAAK4x0B,YAASzs0B,EACRqO,CACR,CAGFxT,KAAK2h3B,oBAAoBpz1B,OAAO4usB,GAChCn9tB,KAAK8r1B,qBAAqBv9zB,OAAO4usB,GACjCn9tB,KAAK6r1B,iBAAiBt9zB,OAAO4usB,EAC/B,EAWA29gB,EAAmBr6uC,UAAU05B,YAAc,WACzC,OAAO,CACT,EAaA2gtC,EAAmBr6uC,UAAU26B,QAAU,WAOrC,OANAp7B,KAAK8r1B,qBACH9r1B,KAAK8r1B,sBAAwB9r1B,KAAK8r1B,qBAAqB1wzB,UACzDp7B,KAAK6r1B,iBACH7r1B,KAAK6r1B,kBAAoB7r1B,KAAK6r1B,iBAAiBzwzB,UACjDp7B,KAAK2h3B,oBACH3h3B,KAAK2h3B,qBAAuB3h3B,KAAK2h3B,oBAAoBvm1B,WAChD,OAAcp7B,KACvB,EACA,QAAe,8BAAkB,I,qLC3fjC,SAAS27uC,EAAqB57uC,GAE5BC,KAAK+n7B,YAAcho7B,EAAQy86B,WAE3Bx86B,KAAK6zuC,UAAY9zuC,EAAQuugC,SACzBtugC,KAAK84pB,WAAa/4pB,EAAQs/a,UAC1Br/a,KAAK2zuC,QAAU5zuC,EAAQ6zuC,OAEvB5zuC,KAAK49vB,SAAW79vB,EAAQ8iM,QACxB7iM,KAAK85uC,aAAe/5uC,EAAQy4uC,YAC5Bx4uC,KAAK65uC,mBAAgB10uC,EAErBnF,KAAK+5uC,uBAAoB50uC,EACzBnF,KAAK+zuC,mBAAgB5uuC,EAErBnF,KAAK47uC,uBAAoBz2uC,EACzBnF,KAAK8zuC,4BAAyB3uuC,EAC9BnF,KAAK20uC,qBAAkBxvuC,EAEvBnF,KAAKwonB,WAAazonB,EAAQkljB,WAAa,IAAUsG,MACjDvrjB,KAAK+4nB,eAAiBh5nB,EAAQ+rnB,cAC9B9rnB,KAAKg5nB,eAAiBj5nB,EAAQgsnB,cAC9B/rnB,KAAK67uC,uBAAyB97uC,EAAQq4uC,sBACtCp4uC,KAAK87uC,uBAAyB/7uC,EAAQs4uC,sBACtCr4uC,KAAKygpB,QAAU1gpB,EAAQ2rB,QAAU,IAAWs+kB,KAC5ChqmB,KAAKi5pB,WAAal5pB,EAAQ65mB,UAE1B55mB,KAAKygpB,aAAUt7oB,EAEfnF,KAAK694B,gBAAkB994B,EAAQoyqB,eAC/BnyqB,KAAKu1jC,sBAAmBpwjC,EAExBnF,KAAK45uC,qBAAkBz0uC,EAEvBnF,KAAKyh1B,QAAS,EACdzh1B,KAAK41rB,cAAWzwrB,EAChBnF,KAAK4x0B,YAASzs0B,EACdnF,KAAKkj1B,gBAAa/90B,EAOlBnF,KAAK+49B,gBAAiB,EAOtB/49B,KAAKi6uC,cAAe,EAOpBj6uC,KAAKyx0B,mBAAqB,IAAmB8oB,IAC/C,CAEAh01B,OAAOgwE,iBAAiBolqC,EAAqBl7uC,UAAW,CAUtD4l9B,gBAAiB,CACfpw8B,IAAK,WACH,OAAI,OAAQjW,KAAKkj1B,YACRlj1B,KAAKkj1B,WAAWmjI,gBAElB,CACT,GAYFC,mBAAoB,CAClBrw8B,IAAK,WACH,OAAI,OAAQjW,KAAKkj1B,YACRlj1B,KAAKkj1B,WAAWojI,mBAElB,CACT,GAUFlm0B,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,KAkEJ,MAAMozZ,EAA8B,IAAI,IACtC,2BACA,GAEIvva,EAAe,IAAI,IA2KzBq2a,EAAqBl7uC,UAAU6vgC,eAAiB,SAAUvz9B,EAASgjsB,GACjE//uB,KAAKkj1B,WAAWotL,eAAevz9B,EAASgjsB,EAC1C,EAQA47f,EAAqBl7uC,UAAU6+8B,mBAAqB,SAAUr57B,EAAS47D,GACrE7hF,KAAKkj1B,WAAWo8H,mBAAmBr57B,EAAS47D,EAC9C,EAQA85pC,EAAqBl7uC,UAAUot2B,WAAa,SAAUxn1B,EAAO05tB,GAC3D//uB,KAAKkj1B,WAAW2qB,WAAWxn1B,EAAO05tB,EACpC,EASA47f,EAAqBl7uC,UAAU0tgC,eAAiB,SAAUtuF,EAASh+1B,GACjE7hF,KAAKkj1B,WAAWirL,eAAetuF,EAASh+1B,EAC1C,EAOA85pC,EAAqBl7uC,UAAU8tB,OAAS,SAAU4usB,GAChD,GAAKn9tB,KAAKyh1B,OAcVzh1B,KAAKkj1B,WAAW61I,eAAiB/49B,KAAK+49B,eACtC/49B,KAAKkj1B,WAAW+2Z,aAAej6uC,KAAKi6uC,aACpCj6uC,KAAKkj1B,WAAWzR,mBAAqBzx0B,KAAKyx0B,mBAC1Czx0B,KAAKkj1B,WAAW30zB,OAAO4usB,QAZrB,IAJK,OAAQn9tB,KAAK41rB,YAChB51rB,KAAK41rB,SApNX,SAAyB/iC,GACvB,IAAI,OAAQA,EAASqwL,YACnB,OAGF,IAAI7ja,EAAYwzO,EAASiG,WACrB86kB,EAAS/glB,EAAS8glB,QAClB6E,EAAc3llB,EAASinlB,aACvBj3iC,EAAUgwd,EAAS+qG,SAEnB0wQ,EAAWz7W,EAASihlB,uBACpBoG,EAAmBrnlB,EAASknlB,kBAE5BxE,EAAe1ilB,EAASkhlB,cAE5B,KAAK,OAAQmG,GAAmB,CAE9B76zB,EAAYwzO,EAASiG,WAAajG,EAASiG,WAAWrvpB,QACtDmquC,EAAS/glB,EAAS8glB,QAAU9glB,EAAS8glB,QAAQlquC,QAC7C+uuC,EAAc3llB,EAASinlB,aAAejnlB,EAASinlB,aAAarwuC,QAC5Do5L,EAAUgwd,EAAS+qG,SAAW/qG,EAAS+qG,SAASn0vB,QAEhDoppB,EAASpS,QAAUoS,EAASrqC,WAAWpN,wBACrC,IAAU1vlB,OAAOmnoB,EAASoG,aAG5Bq1W,EAAWz7W,EAASihlB,uBAAyB,IAAIp3mC,YAC/Cm2hB,EAASghlB,WAEXqG,EAAmBrnlB,EAASknlB,kBAAoB,IAAIr9mC,YAClD4x4B,EAASrrgC,QAEX,MAAMu56B,EAAa3pR,EAASk1R,YAEtB9k7B,EAASi3uC,EAAiBj3uC,OAChC,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAM48E,EAAQ261B,EAAWtkD,SAASjz3B,EAAGqg0B,GACrC40a,EAAiBj1uC,GAAK48E,EAAMsjkB,QAC9B,CAEAowlB,EAAe1ilB,EAASkhlB,cA5G5B,SAAoBlhlB,GAClB,MAAM0ilB,EAAe,IAAIrikC,aACvB,EACE,IAAW+0c,aACX,IAAUA,aACV,IAAUA,cAGd,IAAIlmnB,EAAS,EAcb,OAbAwzuC,EAAaxzuC,KAAY8wpB,EAAS+qG,SAAStve,kBAE3Cin9B,EAAaxzuC,KAAY8wpB,EAAS95B,eAClCw8mB,EAAaxzuC,KAAY8wpB,EAAS75B,eAElC,IAAW1+W,KAAKu4Y,EAASpS,QAAS80lB,EAAcxzuC,GAChDA,GAAU,IAAWkmnB,aAErB,IAAU3tW,KAAKu4Y,EAASrqC,WAAY+snB,EAAcxzuC,GAClDA,GAAU,IAAUkmnB,aAEpB,IAAU3tW,KAAKu4Y,EAASoG,WAAYs8kB,EAAcxzuC,GAE3CwzuC,CACT,CAqF4CC,CAAW3ilB,EACrD,CAEA,MAAM4ilB,EAAuB,CAC3Bp2zB,EAAUtoW,OACV68pC,EAAO78pC,OACPyhqC,EAAYzhqC,OACZ8rH,EAAQ9rH,OACRu37B,EAASv37B,OACTmjqC,EAAiBnjqC,OACjBw+pC,EAAax+pC,QAET8/D,EAAa,CACjB0+lC,aAAcA,EAAax+pC,OAC3BsoW,UAAWA,EAAUtoW,OACrB68pC,OAAQA,EAAO78pC,OACfyhqC,YAAaA,EAAYzhqC,OACzB8rH,QAASA,EAAQ9rH,OACjBu37B,SAAUA,EAASv37B,OACnBmjqC,iBAAkBA,EAAiBnjqC,QAGrC,IAAI06tB,EAAiB5+I,EAASgplB,uBAC1Brqc,EAAiB3+I,EAASiplB,wBAC1B,OAAQrqc,KAAmB,OAAQD,KACrCC,EAAiBA,EAAehoyB,QAChC+nyB,EAAiBA,EAAe/nyB,QAEhCgsuC,EAAqB7wuC,KAAK6syB,EAAe16tB,OAAQy6tB,EAAez6tB,QAChE8/D,EAAW46pB,eAAiBA,EAC5B56pB,EAAW26pB,eAAiBA,GAG9B,MAAMr2K,EAAkB05mB,EAA4Bz5mB,aAClDvkf,EACA4+lC,GAEF,OAAK,OAAQt6mB,GAKNA,EACJhgmB,KAAMnC,IACL,GAAI65nB,EAAS14nB,cACX,OAGF04nB,EAASiG,gBAAa3zpB,EACtB0tpB,EAAS8glB,aAAUxuuC,EACnB0tpB,EAASgplB,4BAAyB12uC,EAClC0tpB,EAASiplB,4BAAyB32uC,EAElC,MAAMowuC,EAAe,IAAIrikC,aAAal6I,EAAOu8sC,cACvCnhhB,EAAgBmhhB,EAAa,IAzIzC,SAAsB1ilB,EAAU0ilB,GAC9B,IAAIxzuC,EAAS,EAEb,MAAMs4uC,EAAS9E,EAAaxzuC,KACtBu4uC,EAAOznlB,EAAS0ia,iBAAmB,IAAI/0jC,MAAM65uC,GAEnD,IAAK,IAAIp1uC,EAAI,EAAGA,EAAIo1uC,IAAUp1uC,EAC5Bq1uC,EAAIr1uC,GAAK,IAAoBkjnB,OAAOotnB,EAAcxzuC,GAClDA,GAAU,IAAoBkmnB,aAGhC,MAAMsynB,EAAoBhF,EAAaxzuC,KACjCy4uC,EAAO3nlB,EAAS+mlB,gBAAkB,IAAIp5uC,MAAM+5uC,GAElD,IAAK,IAAIhvrC,EAAI,EAAGA,EAAIgvrC,IAAqBhvrC,EAAG,CAC1C,MAAMs2B,EAAQ,IAAMsmiB,OAAOotnB,EAAcxzuC,GACzCA,GAAU,IAAMkmnB,aAEhB,MAAM0xE,EAAc47iB,EAAaxzuC,KAC3BgrE,EAAQwoqC,EAAaxzuC,KAErBkB,EAASsyuC,EAAaxzuC,KACtBusgC,EAAW,IAAI9tgC,MAAMyC,GAE3B,IAAK,IAAI0gB,EAAI,EAAGA,EAAI1gB,IAAU0gB,EAC5B2q/B,EAAS3q/B,GAAK4xtC,EAAaxzuC,KAG7By4uC,EAAIjvrC,GAAK,IAAI,IAAkB,CAC7Bs2B,MAAOA,EACP9/E,OAAQ43rB,EACR5snB,MAAOA,EACPuh8B,SAAUA,GAEd,CACF,CAuGMmsO,CAAa5nlB,EAAU0ilB,GAEvB1ilB,EAAS+qG,SACyC,IAAhD,IAAcjvG,eAAeylE,GACzB,IAAI33lB,YAAYzjG,EAAO6pK,SACvB,IAAInmE,YAAY1jG,EAAO6pK,SAC7Bgwd,EAASgnlB,cAAgB,IAAIn9mC,YAAY1jG,EAAO0htC,cAChD7nlB,EAASinlB,aAAe,IAAIp9mC,YAAY1jG,EAAOw/sC,aAG/C3llB,EAAS+olB,kBAAoB,IAAIz4tC,aAAa6V,EAAOqmZ,WACrDwzO,EAAS8hlB,gBAAkB,IAAIl4mC,YAAYzjG,EAAOs1+B,UAgBxD,SAAyBz7W,IAClB,OAAQA,EAASqwL,cACpBrwL,EAASqwL,WAAa,IAAI,IAAsB,CAC9Cs5F,WAAY3pR,EAASk1R,YACrB1ogB,UAAWwzO,EAAS+olB,kBACpBttO,SAAUz7W,EAASghlB,UACnBoC,eAAgBpjlB,EAAS8hlB,gBACzB9xiC,QAASgwd,EAAS+qG,SAClB88e,aAAc7nlB,EAASgnlB,cACvBrB,YAAa3llB,EAASinlB,aACtBa,eAAgB9nlB,EAAS+mlB,gBACzBznkB,eAAgBtf,EAASgrP,gBACzB0wF,gBAAiB17U,EAAS0ia,iBAC1B7piC,OAAQmnoB,EAASpS,UAGnBoS,EAASk1R,iBAAc5i7B,EACvB0tpB,EAASghlB,eAAY1uuC,EACrB0tpB,EAASiG,gBAAa3zpB,EACtB0tpB,EAAS8glB,aAAUxuuC,EACnB0tpB,EAAS+qG,cAAWz4vB,EACpB0tpB,EAASinlB,kBAAe30uC,EACxB0tpB,EAASgnlB,mBAAgB10uC,EACzB0tpB,EAASknlB,uBAAoB50uC,EAC7B0tpB,EAASkhlB,mBAAgB5uuC,EACzB0tpB,EAAS+olB,uBAAoBz2uC,EAC7B0tpB,EAASihlB,4BAAyB3uuC,EAClC0tpB,EAAS8hlB,qBAAkBxvuC,EAC3B0tpB,EAASrqC,gBAAarjnB,EACtB0tpB,EAAS95B,oBAAiB5znB,EAC1B0tpB,EAAS75B,oBAAiB7znB,EAC1B0tpB,EAASgplB,4BAAyB12uC,EAClC0tpB,EAASiplB,4BAAyB32uC,EAClC0tpB,EAASpS,aAAUt7oB,EACnB0tpB,EAASoG,gBAAa9zpB,EACtB0tpB,EAASgrP,qBAAkB144B,EAC3B0tpB,EAAS0ia,sBAAmBpwjC,EAC5B0tpB,EAAS+mlB,qBAAkBz0uC,EAE/B,CArDM01uC,CAAgBholB,GAEhBA,EAAS4uL,QAAS,IAEnB5kwB,MAAOrpE,IACFq/oB,EAAS14nB,gBAKb04nB,EAAS++K,OAASp+zB,UAzCtB,CA2CF,CA4FsBi82B,CAAgBzv3B,QAG9B,OAAQA,KAAK4x0B,QAAS,CACxB,MAAMp+zB,EAAQxT,KAAK4x0B,OAEnB,MADA5x0B,KAAK4x0B,YAASzs0B,EACRqO,CACR,CASJ,EAWAmouC,EAAqBl7uC,UAAU05B,YAAc,WAC3C,OAAO,CACT,EAaAwhtC,EAAqBl7uC,UAAU26B,QAAU,WAEvC,OADAp7B,KAAKkj1B,WAAalj1B,KAAKkj1B,YAAclj1B,KAAKkj1B,WAAW9nzB,WAC9C,OAAcp7B,KACvB,EACA,QAAe,8BAAoB,I,+RClbnC,SAAS+7uC,EAAsBh8uC,GAE7BC,KAAK84pB,WAAa/4pB,EAAQs/a,UAC1Br/a,KAAK0zuC,QAAU3zuC,EAAQ8sN,OACvB7sN,KAAK2zuC,QAAU5zuC,EAAQ6zuC,OACvB5zuC,KAAK6zuC,UAAY9zuC,EAAQuugC,SAEzBtugC,KAAKwonB,WAAazonB,EAAQkljB,WAAa,IAAUsG,MACjDvrjB,KAAK+4nB,eAAiBh5nB,EAAQ+rnB,cAC9B9rnB,KAAKg5nB,eAAiBj5nB,EAAQgsnB,cAC9B/rnB,KAAKygpB,QAAU1gpB,EAAQ2rB,OACvB1rB,KAAKi5pB,WAAal5pB,EAAQ65mB,UAE1B55mB,KAAK694B,gBAAkB994B,EAAQoyqB,eAC/BnyqB,KAAK+n7B,YAAcho7B,EAAQy86B,WAE3Bx86B,KAAKut+B,SAAMpo+B,EACXnF,KAAKqo7B,SAAMlj7B,EACXnF,KAAK23+B,SAAMxy+B,EACXnF,KAAKw14B,iBAAcrw4B,EACnBnF,KAAKq26B,cAAWlx6B,EAEhBnF,KAAK8zuC,4BAAyB3uuC,EAC9BnF,KAAK+zuC,mBAAgB5uuC,EAErBnF,KAAKi0uC,sBAAwBl0uC,EAAQm0uC,qBACrCl0uC,KAAKm0uC,uBAAoBhvuC,EACzBnF,KAAKo0uC,6BAA0BjvuC,EAE/BnF,KAAKg8uC,uBAAoB72uC,EACzBnF,KAAK45wB,wBAAqBz0wB,EAC1BnF,KAAKi8uC,oBAAiB92uC,EACtBnF,KAAKk8uC,qBAAkB/2uC,EACvBnF,KAAK20uC,qBAAkBxvuC,EACvBnF,KAAK49vB,cAAWz4vB,EAEhBnF,KAAKi/pC,eAAiB,IAAMh0mC,MAAM,IAAMkjmB,OACxCnupB,KAAKkr7B,gBAAkBlr7B,KAAKi/pC,eAE5Bj/pC,KAAK40uC,iBAAmB,EACxB50uC,KAAKsgqC,oBAAsB,EAE3BtgqC,KAAKyh1B,QAAS,EACdzh1B,KAAK41rB,cAAWzwrB,EAChBnF,KAAK4x0B,YAASzs0B,CAChB,CAEAoB,OAAOgwE,iBAAiBwlqC,EAAsBt7uC,UAAW,CAUvD4l9B,gBAAiB,CACfpw8B,IAAK,WACH,OAAOjW,KAAK40uC,gBACd,GAYFtuR,mBAAoB,CAClBrw8B,IAAK,WACH,OAAOjW,KAAKsgqC,mBACd,GAUFlghC,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,KAiCJ,MAAMozZ,EAA8B,IAAI,IACtC,4BACA,GAEI5qW,EAAqB,CACzB/vO,iBAAkB,EAClBiilB,gBAAiB,EACjBx/kB,aAAc,EACdkvC,eAAgB,EAChB+7O,UAAW,GA8Mb,MAAMi/F,EAA2B,IAAI,IAC/BK,EAAa,IAAI,IAgHvB60N,EAAsBxzR,qBAAuB,SAAU4iN,EAAWtrP,GAChE,MAAMyuF,EAAW68J,EAAU0oE,UACrBx0zB,EAAY8rvB,EAAUgpE,kBACtB7ntC,EAAU6+oC,EAAUipE,wBAE1B,KAAK,OAAQ9lO,MAAc,OAAQjvlB,GACjC,OAGF,IAAIp6a,EACAsmD,EACJ,MAAM6wrC,EAAkB9tO,EAASrrgC,OACjC,IAAIy6rB,EAAkB,EAClB2+iB,EAAgB,EAEpB,IAAKp3uC,EAAI,EAAGA,EAAIm3uC,IAAmBn3uC,EAC7BqpgC,EAASrpgC,KAAO466B,IAClBniP,GAAmBpxqB,EAAQrnB,EAAI,GAAKqnB,EAAQrnB,IAIhD,GAAwB,IAApBy4rB,EACF,OAGF,MAAM58f,EAAU,IAAI5tB,aAA+B,EAAlBwqhB,GAEjC,IAAKz4rB,EAAI,EAAGA,EAAIm3uC,IAAmBn3uC,EACjC,GAAIqpgC,EAASrpgC,KAAO466B,EAAS,CAC3B,MAAM996B,EAASuqB,EAAQrnB,GACjB8nE,EAAQzgD,EAAQrnB,EAAI,GAAKlD,EAC/B,IAAKwpD,EAAI,EAAGA,EAAIwhB,IAASxhB,EAAG,CAC1B,MAAM+wrC,EAA+B,GAAdv6uC,EAASwpD,GAChCu1I,EAAQu7iC,KAAmBh9zB,EAAUi9zB,GACrCx7iC,EAAQu7iC,KAAmBh9zB,EAAUi9zB,EAAgB,GACrDx7iC,EAAQu7iC,KAAmBh9zB,EAAUi9zB,EAAgB,EACvD,CACF,CAGF,OAAOx7iC,CACT,EAOAi7iC,EAAsBt7uC,UAAUshnC,aAAe,SAAUliM,GACvD,OAAOk8T,EAAsBxzR,qBAAqBvo9B,KAAM6/6B,EAC1D,EAQAk8T,EAAsBt7uC,UAAU6vgC,eAAiB,SAAUvz9B,EAASgjsB,GAClE,MAAMuuR,EAAWtugC,KAAK6zuC,UAChB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAM466B,EAAUyuF,EAASrpgC,GACzB86uB,EAAS8/L,GAAW,IAAI,IAAoB9i4B,EAAS8i4B,EACvD,CACF,EAQAk8T,EAAsBt7uC,UAAU6+8B,mBAAqB,SAAUr57B,EAAS47D,GACtE7hF,KAAKkr7B,gBAAkBjl6B,EAAU47D,EAAQ7hF,KAAKi/pC,cAChD,EAcA,MAAM35V,EAAe,IAAI,IAEnBw8G,EAAsB,IAAM3zR,MASlC4tlB,EAAsBt7uC,UAAUot2B,WAAa,SAAUxn1B,EAAO05tB,GAC5D,KAAK,OAAQ15tB,GAEX,YA1BJ,SAAoBwsoB,EAAUktF,GAC5B,MAAMuuR,EAAWz7W,EAASghlB,UACpB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAGzBmw1B,EAAQ9w1B,MAAO,EACf8w1B,EAAQvzwB,MAAQ,IAAMsskB,KACxB,CACF,CAeIinlB,CAAWp1uC,KAAM+/uB,GAInB,MAAMuuR,EAAWtugC,KAAK6zuC,UAChB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAGzBmw1B,EAAQvzwB,OAAQ,OAAQx7D,EAAMw7D,OAC1Bx7D,EAAMw7D,MAAMsh4B,cAAc/tH,EAAS9vB,GACnCw8G,EACJ1sF,EAAQ9w1B,OAAO,OAAQ+hB,EAAM/hB,OACzB+hB,EAAM/hB,KAAKwwP,SAASsgmB,EAE1B,CACF,EAOA2mZ,EAAsBt7uC,UAAU8tB,OAAS,SAAU4usB,GACjD,MAAMvmtB,EAAUumtB,EAAWvmtB,QAC3B,IAAK5W,KAAKyh1B,OAAQ,CAKhB,IAJK,OAAQzh1B,KAAK41rB,YAChB51rB,KAAK41rB,SA9bX,SAA2Bu1e,EAAWv0pC,GACpC,IAAI,OAAQu0pC,EAAU59L,KACpB,OAGF,IAAIlujB,EAAY8rvB,EAAUrygB,WACtBjsc,EAASs+8B,EAAUuoE,QACnBE,EAASzoE,EAAUwoE,QACnBrlO,EAAW68J,EAAU2oE,uBAErByB,EAAepqE,EAAU4oE,eAExB,OAAQwB,KAEXl2zB,EAAY8rvB,EAAUrygB,WAAaz5O,EAAU51a,QAC7CojN,EAASs+8B,EAAUuoE,QAAU7mhC,EAAOpjN,QACpCmquC,EAASzoE,EAAUwoE,QAAUC,EAAOnquC,QAEpC6kgC,EAAW68J,EAAU2oE,uBAAyB3oE,EAAU0oE,UAAUpquC,QAElE8ruC,EAAepqE,EAAU4oE,cA7D7B,SAAoB5oE,GAClB,MAAMvxjB,EAAYuxjB,EAAUlygB,WACtBntC,EAAgBq/iB,EAAUpyiB,eAC1BhN,EAAgBo/iB,EAAUnyiB,eAC1B/zE,EAAYkmnB,EAAU3ijB,WACtB98lB,EAASy/oC,EAAU1qhB,QAEnBx4B,EACJ,EACA,IAAUA,aACV,IAAUA,aACV,IAAWA,aACPstnB,EAAe,IAAIrikC,aAAa+0c,GAEtC,IAAIlmnB,EAAS,EAYb,OAXAwzuC,EAAaxzuC,KAAY+pnB,EACzBypnB,EAAaxzuC,KAAYgqnB,EAEzB,IAAUzxW,KAAKs/V,EAAW27nB,EAAcxzuC,GACxCA,GAAU,IAAUkmnB,aAEpB,IAAU3tW,KAAK2qS,EAAWswrB,EAAcxzuC,GACxCA,GAAU,IAAUkmnB,aAEpB,IAAW3tW,KAAK5uP,EAAQ6ptC,EAAcxzuC,GAE/BwzuC,CACT,CAkC6CC,CAAWrqE,IAGtD,MAAMsqE,EAAuB,CAC3Bp2zB,EAAUtoW,OACV81I,EAAO91I,OACP68pC,EAAO78pC,OACPu37B,EAASv37B,OACTw+pC,EAAax+pC,QAET8/D,EAAa,CACjBwoS,UAAWA,EAAUtoW,OACrB81I,OAAQA,EAAO91I,OACf68pC,OAAQA,EAAO78pC,OACfu37B,SAAUA,EAASv37B,OACnBw+pC,aAAcA,EAAax+pC,OAC3Bm9pC,qBAAsB/oE,EAAU8oE,uBAG5B94mB,EAAkB05mB,EAA4Bz5mB,aAClDvkf,EACA4+lC,GAEF,OAAK,OAAQt6mB,GAKNA,EACJhgmB,KAAK,SAAUnC,GACd,GAAImyoC,EAAUhxoC,cACZ,OAGEgxoC,EAAU8oE,wBACZ9oE,EAAUgpE,kBAAoB,IAAIjhkC,aAAal6I,EAAO8olC,kBACtDqpD,EAAUipE,wBAA0B,IAAI13mC,YACtC1jG,EAAO08sC,yBAIXvqE,EAAU6wE,kBAAoB,IAAI74tC,aAAa6V,EAAOujtC,kBACtDpxE,EAAUvxZ,mBAAqB,IAAIz2vB,aAAa6V,EAAO2gvB,mBACvDwxZ,EAAU8wE,eAAiB,IAAI94tC,aAAa6V,EAAOsyqB,eACnD6/d,EAAU+wE,gBAAkB,IAAI/4tC,aAAa6V,EAAO6yqB,gBACpDs/d,EAAUwpE,gBAAkB,IAAIl4mC,YAAYzjG,EAAOs1+B,UAEnD,MAAMl6S,EAAgBp7rB,EAAOo7rB,cAC7B+2c,EAAUvta,SACRxpC,IAAkB,IAAcpuG,eAC5B,IAAIvpf,YAAYzjG,EAAO6pK,SACvB,IAAInmE,YAAY1jG,EAAO6pK,SAgBnC,SAA2Bso+B,EAAWv0pC,GACpC,KAAK,OAAQu0pC,EAAU59L,KAAM,CAC3B,MAAMivQ,EAAerxE,EAAU6wE,kBACzB3wiB,EAAgB8/d,EAAUvxZ,mBAC1BtuE,EAAgB6/d,EAAU8wE,eAC1BpwiB,EAAiBs/d,EAAU+wE,gBAC3BjG,EAAiB9qE,EAAUwpE,gBAC3B9xiC,EAAUso+B,EAAUvta,SAE1B,IAAIvjqB,EACFgxmB,EAAchxmB,WACdmipC,EAAanipC,WACbixmB,EAAcjxmB,WAChBA,GACEwxmB,EAAexxmB,WACf47oC,EAAe57oC,WACfwoG,EAAQxoG,WACV8wkC,EAAUypE,iBAAmB/xiC,EAAQ5/L,OAAS,EAC9CkoqC,EAAU7K,oBAAsBjmkC,EAEhC,MAAMoipC,EAAqB,IAAOv1W,mBAAmB,CACnDtw3B,QAASA,EACT2pO,WAAY8qd,EACZhlJ,MAAO,IAAYkvP,cAEfmnc,EAAoB,IAAOx1W,mBAAmB,CAClDtw3B,QAASA,EACT2pO,WAAYi8/B,EACZn2rB,MAAO,IAAYkvP,cAEfonc,EAAqB,IAAOz1W,mBAAmB,CACnDtw3B,QAASA,EACT2pO,WAAY+qd,EACZjlJ,MAAO,IAAYkvP,cAEfqnc,EAAuB,IAAO11W,mBAAmB,CACrDtw3B,QAASA,EACT2pO,WAAYsrd,EACZxlJ,MAAO,IAAYkvP,cAEfsnc,EAAW,IAAO31W,mBAAmB,CACzCtw3B,QAASA,EACT2pO,WAAY01/B,EACZ5vrB,MAAO,IAAYkvP,cAGfygG,EAAc,IAAO7O,kBAAkB,CAC3Cvw3B,QAASA,EACT2pO,WAAY19C,EACZwjX,MAAO,IAAYkvP,YACnBnhF,cACgC,IAA9BvxhB,EAAQyrF,kBACJ,IAAc03V,eACd,IAAcE,eAGhB6rS,EAAmB,CACvB,CACEj34B,MAAOmv3B,EAAmB/vO,iBAC1B/xB,aAAcs0mB,EACd/2nB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmBkyW,gBAC1Bh0mB,aAAcu0mB,EACdh3nB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmBttO,aAC1Bx0B,aAAcw0mB,EACdj3nB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmBp+L,eAC1B1jE,aAAcy0mB,EACdl3nB,kBAAmB,IAAkB6L,MACrC5L,uBAAwB,GAE1B,CACE7qmB,MAAOmv3B,EAAmB29C,UAC1Bz/S,aAAc00mB,EACdn3nB,kBAAmB,IAAkBM,eACrCL,uBAAwB,IAI5BwljB,EAAU59L,IAAM,IAAI,IAAY,CAC9B329B,QAASA,EACTrR,WAAYws5B,EACZ/b,YAAaA,IAGfm1R,EAAUrygB,gBAAa3zpB,EACvBgmqC,EAAUuoE,aAAUvuuC,EACpBgmqC,EAAUwoE,aAAUxuuC,EAEpBgmqC,EAAU3ijB,gBAAarjnB,EACvBgmqC,EAAUpyiB,oBAAiB5znB,EAC3BgmqC,EAAUnyiB,oBAAiB7znB,EAC3BgmqC,EAAUlygB,gBAAa9zpB,EAEvBgmqC,EAAU2oE,4BAAyB3uuC,EACnCgmqC,EAAU4oE,mBAAgB5uuC,EAE1BgmqC,EAAU6wE,uBAAoB72uC,EAC9BgmqC,EAAUvxZ,wBAAqBz0wB,EAC/BgmqC,EAAU8wE,oBAAiB92uC,EAC3BgmqC,EAAU+wE,qBAAkB/2uC,EAC5BgmqC,EAAUwpE,qBAAkBxvuC,EAC5BgmqC,EAAUvta,cAAWz4vB,CACvB,CACF,CAhIMuxuC,CAAkBvrE,EAAWv0pC,GAE7Bu0pC,EAAU1pV,QAAS,CACrB,GACC5kwB,MAAOrpE,IACF23pC,EAAUhxoC,gBAKdgxoC,EAAUv5V,OAASp+zB,UAxCvB,CA0CF,CAyWsBq83B,CAAkB7v4B,KAAM4W,KAGtC,OAAQ5W,KAAK4x0B,QAAS,CACxB,MAAMp+zB,EAAQxT,KAAK4x0B,OAEnB,MADA5x0B,KAAK4x0B,YAASzs0B,EACRqO,CACR,CAEA,MACF,CA/NF,IAA4BurF,GA3B5B,SAA0BA,EAAWnoF,IAC/B,OAAQmoF,EAAUy2yB,eAItBz2yB,EAAUy2yB,YAAc,CACtBi1I,oBAAqB,WACnB,MAAMpjH,EAAazw5B,EAAQwl3B,aAAatuyB,KAYxC,OAXA,IAAQ7iC,MAAMo82B,EAAYw/G,GAC1B,IAAQz4Z,gBACNy4Z,EACA9n7B,EAAU0hjB,QACVymY,GAEF,IAAQl7S,eACN66S,EACAK,EACAL,GAEKA,CACT,EACAr7F,iBAAkB,WAChB,OAAOzs1B,EAAUms1B,eACnB,GAEJ,CAmOE7T,CAAiBr36B,KAAM4W,GArMzB,SAAuBmoF,EAAWnoF,GAChC,IAAI,OAAQmoF,EAAUsp1B,KACpB,OAGF,MAAM7L,EAAaz90B,EAAUgp1B,YAEvBx1B,EAAWiqB,EAAWe,yBAC1B,EACA,iBACAp46B,EAHeq36B,CAIf,KACIhqB,EAAWgqB,EAAW4U,2BAC1B,OACAjs7B,GACA,EAHeq36B,CAlBjB,+FAwBMv+oB,EAAK,IAAI,IAAa,CAC1B6vnB,QAAS,CAAC,cAAe,iBACzBlpuB,QAAS,CAAC,IAAgB2tuB,KAEtBrx1B,EAAK,IAAI,IAAa,CAC1B4s1B,QAAS,CAAC,eACVlpuB,QAAS,CAAC4tuB,KAGZzzzB,EAAUsp1B,IAAM,IAAct+C,UAAU,CACtCnz3B,QAASA,EACToz3B,mBAAoB/rmB,EACpB8qmB,qBAAsB7n0B,EACtB+o0B,mBAAoBA,GAExB,CAqKEi6R,CAAclkqC,KAAM4W,GAlOMmoF,EAmOP/+F,MAlOf,OAAQ++F,EAAU444B,OAUtB544B,EAAU444B,IAAM,IAAY5tG,UAAU,CACpC4b,SAAU,IAAcusB,YACxB9rB,WAAW,EACX3Q,UAAW,CACTxv3B,SAAS,GAEXs/3B,cAZoB,CACpBt/3B,SAAS,EACTq0pB,QAAS,EACTl3H,OAAQ,MA6NV,MAAMy/X,EAAS1lN,EAAW0lN,QACtBA,EAAO7k2B,QAAU6k2B,EAAOr0sB,OAvK9B,SAAuBzvI,EAAWo+nB,GAChC,KAAK,OAAQp+nB,EAAUs30B,UAAW,CAChC,MAAMptC,EAAalqyB,EAAUgp1B,YAAY7K,uBAAtBn+0B,CACjBA,EAAUy2yB,aAEZz2yB,EAAUs30B,SAAW,IAAI,IAAY,CACnCjpG,MAAOruuB,EACP+pyB,YAAa/pyB,EAAUwu4B,IACvBnpJ,YAAarlvB,EAAU444B,IACvB3uG,cAAejqyB,EAAUsp1B,IACzBp/C,WAAYA,EACZ92N,eAAgBpzkB,EAAU8+yB,gBAC1B3rJ,KAAM,IAAKoyJ,YACXpG,OAAQn/yB,EAAUgp1B,YAAYjC,aAElC,CAEA3oN,EAAWyzH,YAAYhs1B,KAAKm6F,EAAUs30B,SACxC,CAsJIuqD,CAAc5g+B,KAAMm9tB,EAExB,EAWA4+gB,EAAsBt7uC,UAAU05B,YAAc,WAC5C,OAAO,CACT,EAaA4htC,EAAsBt7uC,UAAU26B,QAAU,WAGxC,OAFAp7B,KAAKut+B,IAAMvt+B,KAAKut+B,KAAOvt+B,KAAKut+B,IAAIny8B,UAChCp7B,KAAKqo7B,IAAMro7B,KAAKqo7B,KAAOro7B,KAAKqo7B,IAAIjt5B,WACzB,OAAcp7B,KACvB,EACA,QAAe,8BAAqB,I,gWC9mBpC,SAAS88uC,EAAsB/8uC,GAC7BA,EAAUA,GAAW,IAAOw8mB,aAE5Bv8mB,KAAK+n7B,YAAcho7B,EAAQy86B,WAC3Bx86B,KAAK6zuC,UAAY9zuC,EAAQuugC,SAGzBtugC,KAAK84pB,WAAa/4pB,EAAQs/a,UAC1Br/a,KAAK20uC,gBAAkB50uC,EAAQk2uC,eAI/Bj2uC,KAAK49vB,SAAW79vB,EAAQ8iM,QACxB7iM,KAAK85uC,aAAe/5uC,EAAQy4uC,YAC5Bx4uC,KAAK65uC,cAAgB95uC,EAAQ26uC,aAC7B16uC,KAAK45uC,gBAAkB75uC,EAAQ46uC,eAE/B36uC,KAAK694B,gBAAkB994B,EAAQoyqB,eAC/BnyqB,KAAKu1jC,iBAAmBx1jC,EAAQwu+B,gBAEhCvu+B,KAAKygpB,QAAU1gpB,EAAQ2rB,QAAU,IAAWs+kB,KAE5ChqmB,KAAKut+B,SAAMpo+B,EACXnF,KAAKqo7B,SAAMlj7B,EACXnF,KAAKqo+B,gBAAalj+B,EAClBnF,KAAKso+B,aAAUnj+B,EACfnF,KAAKw14B,iBAAcrw4B,EAGnBnF,KAAK+8uC,aAAU53uC,EAEfnF,KAAK0o+B,yBAAsBvj+B,EAC3BnF,KAAK2o+B,gCAA6Bxj+B,EAClCnF,KAAK4o+B,kBAAezj+B,EACpBnF,KAAK6o+B,iBAAc1j+B,EACnBnF,KAAKg9uC,kBAAe73uC,EAEpBnF,KAAK226B,UAAY,GACjB326B,KAAK8o+B,oBAAsB,GAC3B9o+B,KAAK88qC,cAAgB,GAErB98qC,KAAKi/pC,eAAiB,IAAMh0mC,MAAM,IAAMkjmB,OACxCnupB,KAAKkr7B,gBAAkBlr7B,KAAKi/pC,eAE5Bj/pC,KAAKi9uC,aAAc,EACnBj9uC,KAAKk9uC,oBAAqB,EAC1Bl9uC,KAAKm9uC,wBAA0B,EAE/Bn9uC,KAAKo9uC,sBAAuB,EAE5Bp9uC,KAAK40uC,iBAAmB50uC,KAAK49vB,SAAS36vB,OAAS,EAC/CjD,KAAKsgqC,oBACHtgqC,KAAK49vB,SAASvjqB,WACdr6F,KAAK84pB,WAAWz+jB,WAChBr6F,KAAK20uC,gBAAgBt6oC,WAOvBr6F,KAAK+49B,gBAAiB,EACtB/49B,KAAK05nC,gBAAkB15nC,KAAK+49B,eAC5B/49B,KAAKq9uC,iBAAkB,EAOvBr9uC,KAAKi6uC,cAAe,EAOpBj6uC,KAAKyx0B,mBACH1x0B,EAAQ0x0B,oBAAsB,IAAmB8oB,KAGnDv61B,KAAKwx5B,oBAAsBzx5B,EAAQyx5B,oBACnCxx5B,KAAK0x5B,sBAAwB3x5B,EAAQ2x5B,sBACrC1x5B,KAAKg94B,oBAAsBj94B,EAAQi94B,oBACnCh94B,KAAKw14B,YAAcz14B,EAAQy14B,YAC3Bx14B,KAAKi+4B,QAAUl+4B,EAAQk+4B,QACvBj+4B,KAAKsl1B,aAAevl1B,EAAQul1B,aAC5Btl1B,KAAKk5nB,gBAAkBn5nB,EAAQm5nB,gBAE/Bl5nB,KAAKs9uC,eAAiB,CAAC,EAEvB,MAAMr6uC,EAASjD,KAAK6zuC,UAAU5wuC,OAC9B,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAM466B,EAAU7/6B,KAAK6zuC,UAAU5uuC,GAC/BjF,KAAKs9uC,eAAez9T,GAAW566B,CACjC,CACF,CAEAsB,OAAOgwE,iBAAiBumqC,EAAsBr8uC,UAAW,CASvD4l9B,gBAAiB,CACfpw8B,IAAK,WACH,OAAOjW,KAAK40uC,gBACd,GAWFtuR,mBAAoB,CAClBrw8B,IAAK,WACH,OAAOjW,KAAKsgqC,mBACd,KAIJ,MAAMi9E,EAA4B,CAChC32tC,SAAU,EACVgh6B,UAAW,GAgLb,SAASiiD,EAA2BE,GAClC,MAAM5kF,EAAkB4kF,EACpB,IAAgBvuL,MAChB,IAAgBK,OACpB,MAAO,CACL6pG,UAAW,CACT7lzB,KAAK,EACLwrD,OAAO,EACPF,MAAM,EACNmrH,OAAO,GAETuvoB,YAAa,CACX5/3B,SAAS,EACT2g4B,cAAezB,EACfY,eAAgB,CACdlsyB,KAAM,IAAiBiisB,KACvBgrG,MAAO,IAAiBkjF,eACxBjjF,MAAO,IAAiBjrG,MAE1B+qG,aAAc1B,EACdc,cAAe,CACbpsyB,KAAM,IAAiBiisB,KACvBgrG,MAAO,IAAiBmjF,eACxBljF,MAAO,IAAiBjrG,MAE1Bx3xB,UAAW,IAAiBqg8B,oBAC5BnsvB,KAAM,IAAiBmsvB,qBAEzBt+D,YAAa,IAAiB6jF,oBAC9Bz0F,UAAW,CACTxv3B,SAAS,EACT0kC,KAAM,IAAcw/6B,eAEtB/jF,WAAW,EAEf,CAEA,MAAM8hN,EAAmB,CACvBriN,YAAa,CACX5/3B,SAAS,EACT2g4B,cAAe,IAAgByjF,UAC/BtkF,eAAgB,CACdlsyB,KAAM,IAAiBmwf,KACvB88S,MAAO,IAAiB98S,KACxB+8S,MAAO,IAAiB/8S,MAE1B68S,aAAc,IAAgBwjF,UAC9BpkF,cAAe,CACbpsyB,KAAM,IAAiBmwf,KACvB88S,MAAO,IAAiB98S,KACxB+8S,MAAO,IAAiB/8S,MAE1B1llB,UAAW,EACXk0M,KAAM,IAAiB0xwB,qBAEzB7jF,YAAa,IAAiB6jF,oBAC9Bz0F,UAAW,CACTxv3B,SAAS,GAEXmg4B,WAAW,EACXT,SAAU,IAAc8wC,4BAGpB8zC,EAAkB,CACtB1kF,YAAa,CACX5/3B,SAAS,EACT2g4B,cAAe,IAAgByjF,UAC/BtkF,eAAgB,CACdlsyB,KAAM,IAAiBmwf,KACvB88S,MAAO,IAAiB98S,KACxB+8S,MAAO,IAAiB/8S,MAE1B68S,aAAc,IAAgBwjF,UAC9BpkF,cAAe,CACbpsyB,KAAM,IAAiBmwf,KACvB88S,MAAO,IAAiB98S,KACxB+8S,MAAO,IAAiB/8S,MAE1B1llB,UAAW,EACXk0M,KAAM,IAAiB0xwB,qBAEzB7jF,YAAa,IAAiB6jF,oBAC9Bz0F,UAAW,CACTxv3B,SAAS,GAEXmg4B,WAAW,GAkBPygI,EAA2B,IAAI,IAC/BK,EAAa,IAAI,IAsCvB,SAASs2N,EACP36iC,EACA2td,EACAqqR,EACAvu5B,EACAsntC,EACAtlO,EACAmvO,GAEA,MAAMpphB,EAAcxxhB,EAAQ79J,YAAYspP,kBAElCov9B,EAAmBpvO,EAASrrgC,OAClC,IAAK,IAAIsoD,EAAI,EAAGA,EAAImyrC,IAAoBnyrC,EAAG,CACzC,MACMzwC,EAAQ2iuC,EADInvO,EAAS/i9B,IAErBxpD,EAASuqB,EAAQxR,GACjBiyD,EAAQ6mqC,EAAO94tC,GAEf05F,EAAW,IAAIquF,EAAQ79J,YAC3B69J,EAAQ9rH,OACRs9oB,EAActytB,EACdgrE,GAEFyjlB,EAAW57nB,IAAI4/E,EAAUqm0B,GAEzBvu5B,EAAQxR,GAAS+/5B,EACjBA,GAAiB9t2B,CACnB,CAEA,OAAO8t2B,CACT,CAiEA,SAAS8iU,EACPj2W,EACAk2W,EACA/iU,EACAvu5B,EACAsntC,EACAtlO,EACAmvO,GAEA,MAAMpphB,EAAcqzK,EAAWzqP,cAEzBygmB,EAAmBpvO,EAASrrgC,OAClC,IAAK,IAAIsoD,EAAI,EAAGA,EAAImyrC,IAAoBnyrC,EAAG,CACzC,MACMzwC,EAAQ2iuC,EADInvO,EAAS/i9B,IAErBxpD,EAASuqB,EAAQxR,GACjBiyD,EAAQ6mqC,EAAO94tC,GAErB8iuC,EAAYn2W,eACVC,EACA3l4B,EAASsytB,EACTwmN,EAAgBxmN,EAChBtnpB,EAAQsnpB,GAGV/nsB,EAAQxR,GAAS+/5B,EACjBA,GAAiB9t2B,CACnB,CAEA,OAAO8t2B,CACT,CAiEA,SAASgjU,EAAc1/tC,EAAGC,GACxB,OAAOA,EAAEyjE,MAAMsjkB,SAAWhnoB,EAAE0jE,MAAMsjkB,QACpC,CA8PA23lB,EAAsBr8uC,UAAU6vgC,eAAiB,SAAUvz9B,EAASgjsB,GAClE,MAAMuuR,EAAWtugC,KAAK6zuC,UAChB5wuC,EAASqrgC,EAASrrgC,OACxB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MAAM466B,EAAUyuF,EAASrpgC,GACzB86uB,EAAS8/L,GAAW,IAAI,IAAoB9i4B,EAAS8i4B,EACvD,CACF,EAQAi9T,EAAsBr8uC,UAAU6+8B,mBAAqB,SAAUr57B,EAAS47D,GACtE7hF,KAAKkr7B,gBAAkBjl6B,EAAU47D,EAAQ7hF,KAAKi/pC,cAChD,EA4BA,MAAM35V,EAAe,IAAI,IAEnBw8G,EAAsB,IAAM3zR,MAG5B2vlB,EAAuB,KAyI7B,SAASl9Q,EAAc7h4B,EAAWo+nB,EAAYi6M,EAAUw2D,GACtD,MAAMn8J,EAAqB1yuB,EAAU0yuB,mBAC/Bo9J,EACJp9J,IAAuB,IAAmByyE,eACtC4qF,EACJr9J,IAAuB,IAAmBpzN,QAEtCuyO,EAAczzH,EAAWyzH,YAC/B,IACIsuD,EACAj64B,EAFA84uC,EAAgB3mU,EAASn06B,OAG7B,IAAKgC,EAAI,EAAGA,EAAI84uC,IAAiB94uC,EAC3B4p+B,IACF3vF,EAAUk4B,EAASny6B,GACnBi64B,EAAQhtJ,KAAO,IAAK8xJ,uBACpBpzD,EAAYhs1B,KAAKs64B,IAEf4vF,IACF5vF,EAAUk4B,EAASny6B,GAAG+54B,gBAAgB50E,QACtC80E,EAAQhtJ,KAAO,IAAKiyJ,8BACpBvzD,EAAYhs1B,KAAKs64B,IAIrB,GAAK/hL,EAAW4xQ,uBAAyB,OAAQnB,GAKjD,IADAmwQ,EAAgBnwQ,EAAmB3q+B,OAC9BgC,EAAI,EAAGA,EAAI84uC,IAAiB94uC,EAC/B2r1B,EAAYhs1B,KAAKgp+B,EAAmB3o+B,GAExC,CAjKA63uC,EAAsBr8uC,UAAUot2B,WAAa,SAAUxn1B,EAAO05tB,GAC5D,KAAK,OAAQ15tB,GAEX,YA1CJ,SAAoBwsoB,EAAUktF,GAC5BltF,EAASuqlB,sBAAuB,EAEhC,MAAM9uO,EAAWz7W,EAASghlB,UAC1B,IACI5uuC,EADAhC,EAASqrgC,EAASrrgC,OAGtB,IAAKgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC3B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAGzBmw1B,EAAQ9w1B,MAAO,EACf8w1B,EAAQvzwB,MAAQ,IAAMsskB,KACxB,CAEA,MAAMwslB,EAAiB9nlB,EAAS+mlB,gBAGhC,IAFA32uC,EAAS03uC,EAAe13uC,OAEnBgC,EAAI,EAAGA,EAAIhC,IAAUgC,EACxB01uC,EAAe11uC,GAAG48E,MAAQ,IAAM52B,MAAM,IAAMkjmB,OAG9C0E,EAASuqlB,sBAAuB,EAChCvqlB,EAASoqlB,aAAc,CACzB,CAiBI7H,CAAWp1uC,KAAM+/uB,GAInB,MAAMi+f,EAAkB33tC,EAAMw7D,MACxBo8pC,EACJD,aAA2B,MAC1BF,EAAqB7ruC,KAAK+ruC,EAAgB9gpB,YAC7Cl9lB,KAAKo9uC,qBAAuBa,EAE5B,MAAM3vO,EAAWtugC,KAAK6zuC,UACtB,IACI5uuC,EADAhC,EAASqrgC,EAASrrgC,OAGtB,IAAKgC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC3B,MACMmw1B,EAAUr1G,EADAuuR,EAASrpgC,IAGzBmw1B,EAAQvzwB,OAAQ,OAAQx7D,EAAMw7D,OAC1Bx7D,EAAMw7D,MAAMsh4B,cAAc/tH,EAAS9vB,GACnCw8G,EACJ1sF,EAAQ9w1B,OAAO,OAAQ+hB,EAAM/hB,OACzB+hB,EAAM/hB,KAAKwwP,SAASsgmB,EAE1B,CAEA,GAAI6oZ,EAAe,CACjB,MAAMtD,EAAiB36uC,KAAK45uC,gBAG5B,IAFA32uC,EAAS03uC,EAAe13uC,OAEnBgC,EAAI,EAAGA,EAAIhC,IAAUgC,EACxB01uC,EAAe11uC,GAAG48E,MAAQ,IAAM52B,MAAM,IAAMkjmB,OAG9CnupB,KAAKo9uC,sBAAuB,EAC5Bp9uC,KAAKi9uC,aAAc,CACrB,CACF,EASAH,EAAsBr8uC,UAAU0tgC,eAAiB,SAAUtuF,EAASh+1B,GAClE,GAAI7hF,KAAKo9uC,qBACP,OAGF,MAAMK,EAAgBz9uC,KAAKs9uC,eACrBxiuC,EAAQ2iuC,EAAc59T,GAC5B,KAAK,OAAQ/k6B,GACX,OAGF,MAAM4/tC,EAAe16uC,KAAK65uC,cACpBrB,EAAcx4uC,KAAK85uC,aAEnB/3uC,EAAS24uC,EAAa5/tC,GACtBiyD,EAAQyrqC,EAAY19tC,GAEpB6/tC,EAAiB36uC,KAAK45uC,gBACtB32uC,EAAS03uC,EAAe13uC,OAE9B,IAAIgC,EACJ,IAAKA,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC3B,MAAMi5uC,EAAgBvD,EAAe11uC,GAAGlD,OAClCo8uC,EAAexD,EAAe11uC,GAAG8nE,MAEvC,GAAIhrE,GAAUm8uC,GAAiBn8uC,EAASm8uC,EAAgBC,EACtD,KAEJ,CAEAxD,EAAe/1uC,KACb,IAAI,IAAkB,CACpBi9E,MAAO,IAAM52B,MAAM42B,GACnB9/E,OAAQA,EACRgrE,MAAOA,EACPuh8B,SAAU,CAACzuF,MAIf,MAAMu+T,EAAW,GACXC,EAAS,GAET/vO,EAAWqsO,EAAe11uC,GAAGqpgC,SAC7BgwO,EAAiBhwO,EAASrrgC,OAEhC,IAAK,IAAIsoD,EAAI,EAAGA,EAAI+yrC,IAAkB/yrC,EAAG,CACvC,MAAM9iD,EAAK6lgC,EAAS/i9B,GAChB9iD,IAAOo36B,IAKP66T,EADgB+C,EAAch1uC,IACF1G,EAC9Bq8uC,EAASx5uC,KAAK6D,GAEd41uC,EAAOz5uC,KAAK6D,GAEhB,CAEsB,IAAlB41uC,EAAOp7uC,QACT03uC,EAAe/1uC,KACb,IAAI,IAAkB,CACpBi9E,MAAO,IAAM52B,MAAM0vrC,EAAe11uC,GAAG48E,OACrC9/E,OAAQA,EAASgrE,EACjBA,MACE4tqC,EAAe11uC,GAAGlD,OAAS44uC,EAAe11uC,GAAG8nE,OAAShrE,EAASgrE,GACjEuh8B,SAAU+vO,KAKQ,IAApBD,EAASn7uC,QACX03uC,EAAe11uC,GAAG8nE,MAAQhrE,EAAS44uC,EAAe11uC,GAAGlD,OACrD44uC,EAAe11uC,GAAGqpgC,SAAW8vO,GAE7BzD,EAAehwuC,OAAO1F,EAAG,GAG3BjF,KAAKi9uC,aAAc,CACrB,EAsFAH,EAAsBr8uC,UAAU8tB,OAAS,SAAU4usB,GACjD,MAAMvmtB,EAAUumtB,EAAWvmtB,QApwB7B,IAA4BmoF,GArQ5B,SAA2BA,EAAWnoF,GACpC,IAAI,OAAQmoF,EAAUwu4B,KACpB,OAGF,MAAMkM,EAAiB,IAAOvyG,mBAAmB,CAC/Ctw3B,QAASA,EACT2pO,WAAYxhJ,EAAU+5jB,WACtBzyG,MAAO,IAAYkvP,cAEfsnc,EAAW,IAAO31W,mBAAmB,CACzCtw3B,QAASA,EACT2pO,WAAYxhJ,EAAU41oC,gBACtBturB,MAAO,IAAYkvP,cAEfygG,EAAc,IAAO7O,kBAAkB,CAC3Cvw3B,QAASA,EACT2pO,WAAYxhJ,EAAU6+pB,SACtBv3M,MAAO,IAAYmvP,aACnBphF,cAC2C,IAAzCr1nB,EAAU6+pB,SAAStve,kBACf,IAAc03V,eACd,IAAcE,eAGhB6rS,EAAmB,CACvB,CACEj34B,MAAO,EACPqtnB,aAAcsxW,EACd/zX,kBAAmB,IAAkBi6a,eAAe5g8B,EAAU+5jB,YAC9DnzC,uBAAwB,GAE1B,CACE7qmB,MAAO,EACPqtnB,aAAc00mB,EACdn3nB,kBAAmB,IAAkBi6a,eACnC5g8B,EAAU41oC,iBAEZhvnB,uBAAwB,IAI5B5mhB,EAAUwu4B,IAAM,IAAI,IAAY,CAC9B329B,QAASA,EACTrR,WAAYws5B,EACZ/b,YAAaA,IAGXp/3B,EAAQmgrB,SACVh4lB,EAAUg+oC,QAAU,IAAI,IAAY,CAClCnmuC,QAASA,EACTrR,WAAYws5B,EACZ/b,YAAa,IAAO7O,kBAAkB,CACpCvw3B,QAASA,EACTy9sB,YAAa2hL,EAAY3hL,YACzBhuK,MAAO,IAAYmvP,aACnBphF,cAAe4hL,EAAY5hL,mBAKjCr1nB,EAAU68oC,uBAAoBz2uC,EAC9B45F,EAAU+0oC,4BAAyB3uuC,EACnC45F,EAAU41oC,qBAAkBxvuC,CAC9B,CA28BE0q4B,CAAkB7v4B,KAAM4W,GAz8B1B,SAAuBmoF,EAAWnoF,GAChC,IAAI,OAAQmoF,EAAUsp1B,KACpB,OAGF,MAAM7L,EAAaz90B,EAAUgp1B,YACvB99C,EACJlryB,EAAUi+yB,qBAAuBugW,EAEnC,IAAIr/V,EAASn/yB,EAAUk/yB,QACvB,MAAMjU,EAAqBjryB,EAAUyyzB,oBACrC,IAAIzoB,EAAuBhqyB,EAAU2yzB,sBACrC,IAAI,OAAQ1nB,GAyBV,OAxBAjryB,EAAUsp1B,IAAM,IAAct+C,UAAU,CACtCnz3B,QAASA,EACToz3B,mBAAoBA,EACpBjB,qBAAsBA,EACtBkB,mBAAoBA,IAEtBlryB,EAAUsp4B,WAAatp4B,EAAUsp1B,IAEjCt/C,EAAuB,IAAa8uB,YAClC9uB,EACA,qBAEFA,EACE,GAAGA,qEAGoBmV,iBAEzBn/yB,EAAUup4B,QAAU,IAAcv+F,UAAU,CAC1Cnz3B,QAASA,EACToz3B,mBAAoBA,EACpBjB,qBAAsBA,EACtBkB,mBAAoBA,KAKxB,MAAMsoB,EAAWiqB,EAAWe,yBAC1B,EACA,iBACAp46B,EAHeq36B,CAIf,KACF,IAAIhqB,EAAWgqB,EAAW4U,2BACxB,OACAjs7B,GACA,EAHaq36B,CAIb,KAEFt+B,EAASs+B,EAAWsJ,YAEpB,IAAI7npB,EAAK,IAAI,IAAa,CACxBr5G,QAAS,CAAC2tuB,KAERrx1B,EAAK,IAAI,IAAa,CACxB4s1B,QAAS,CAAC,eACVlpuB,QAAS,CAAC4tuB,KAGZzzzB,EAAUsp1B,IAAM,IAAct+C,UAAU,CACtCnz3B,QAASA,EACToz3B,mBAAoB/rmB,EACpB8qmB,qBAAsB7n0B,EACtB+o0B,mBAAoBA,IAGtBhsmB,EAAK,IAAI,IAAa,CACpBr5G,QAAS,CAAC,OAEZ1jH,EAAK,IAAI,IAAa,CACpB4s1B,QAAS,CAAC,eACVlpuB,QAAS,CAAC,OAGZ7lF,EAAUsp4B,WAAa,IAAct+F,UAAU,CAC7Cnz3B,QAASA,EACToz3B,mBAAoB/rmB,EACpB8qmB,qBAAsB7n0B,EACtB+o0B,mBAAoBA,IAGtBuoB,EAAW,IAAaqF,YAAYrF,EAAU,qBAC9CA,EACE,GAAGA,uEAIoBtU,YAGzB,MAAMqgW,EAAS,IAAI,IAAa,CAC9B35jC,QAAS,CAAC2tuB,KAENisV,EAAS,IAAI,IAAa,CAC9B1wV,QAAS,CAAC,eACVlpuB,QAAS,CAAC4tuB,KAEZzzzB,EAAUup4B,QAAU,IAAcv+F,UAAU,CAC1Cnz3B,QAASA,EACToz3B,mBAAoBu0W,EACpBx1W,qBAAsBy1W,EACtBv0W,mBAAoBA,GAExB,CAi2BEi6R,CAAclkqC,KAAM4W,GAvwBMmoF,EAwwBP/+F,MAvwBf,OAAQ++F,EAAU2p4B,uBAItB3p4B,EAAU2p4B,oBAAsB,IAAY3+F,UAC1C8/F,GAA2B,IAE7B9q4B,EAAU4p4B,2BAA6B,IAAY5+F,UACjD8/F,GAA2B,IAE7B9q4B,EAAU6p4B,aAAe,IAAY7+F,UAAUm+N,GAC/CnpgC,EAAU8p4B,YAAc,IAAY9+F,UAAUwgG,IAMhD,SAA0Bxr4B,EAAWnoF,GACnC,IAAI,OAAQmoF,EAAUy2yB,aACpB,OAGF,MAAMvM,EAAa,CACjB0hJ,8BAA+B,WAC7B,MAAMtjH,EAAazw5B,EAAQwl3B,aAAatuyB,KAClCormB,EAAmBtirB,EAAQwl3B,aAAa37mB,WAiB9C,OAhBA,IAAQx1N,MAAMo82B,EAAYw/G,GAC1B,IAAQz4Z,gBACNy4Z,EACA9n7B,EAAU0hjB,QACVymY,GAEF,IAAQl7S,eACN66S,EACAK,EACAL,GAEF,IAAQl0/B,SACNumqB,EACA2tV,EACAA,GAEKA,CACT,EACAr7F,iBAAkB,WAChB,OAAOzs1B,EAAUms1B,eACnB,GAGFns1B,EAAUy2yB,YACRz2yB,EAAUgp1B,YAAY7K,uBAAtBn+0B,CAA8CkqyB,EAClD,CAqtBEouC,CAAiBr36B,KAAM4W,GAEvB,MAAMis6B,EAAS1lN,EAAW0lN,OACtBA,EAAO7k2B,SA/db,SAA6B+gB,EAAWnoF,GACtC,MAAM6nuC,EApDR,SAAyB1/oC,EAAWnoF,GAClC,IAAKmoF,EAAUk+oC,YACb,OAAO,EAGT,MAAMtC,EAAiB57oC,EAAU66oC,gBAC3B32uC,EAAS03uC,EAAe13uC,OAE9B,IAAIy7uC,GAAgB,EACpB,MAAMC,EAAc,CAAC,EAErB,IAAK,IAAI15uC,EAAI,EAAGA,EAAIhC,IAAUgC,EAAG,CAC/B,MACMgpf,EADQ0svB,EAAe11uC,GAAG48E,MACbsjkB,SACnB,IAAI,OAAQw5lB,EAAY1wvB,IAAQ,CAC9BywvB,GAAgB,EAChB,KACF,CACEC,EAAY1wvB,IAAQ,CAExB,CAEA,OAAKywvB,EAMHA,IACC3/oC,EAAUk7oC,cACXl7oC,EAAUo+oC,wBAA0B,UAElCp+oC,EAAUo+oC,yBAIdxC,EAAe36tC,KAAK69tC,GAEhBjnuC,EAAQmgrB,OA3Gd,SAAoBh4lB,EAAW47oC,GAC7B,MAAMD,EAAe37oC,EAAU86oC,cACzBrB,EAAcz5oC,EAAU+6oC,aACxB2D,EAAgB1+oC,EAAUu+oC,eAEhC,IAAI7itC,EAAUkgtC,EAAer/tC,MAC7B,MAAMsjuC,EAAoB,CAACnktC,GAErBit2B,EAAa3oyB,EAAUwu4B,IAAIv3F,YAC3B4nW,EAAc7+oC,EAAUg+oC,QAAQ/mW,YAEtC,IAAI6kC,EAAgB8iU,EAClBj2W,EACAk2W,EACA,EACAlD,EACAlC,EACA/9sC,EAAQ6z+B,SACRmvO,GAMF,IAHAhjtC,EAAQ14B,OAAS,EACjB04B,EAAQsyC,MAAQ8t2B,EAET8/T,EAAe13uC,OAAS,GAAG,CAChC,MAAM6lB,EAAO6xtC,EAAer/tC,MAC5B,GAAI,IAAM2zF,OAAOnmF,EAAK+4D,MAAOpnD,EAAQonD,OACnCg51B,EAAgB8iU,EACdj2W,EACAk2W,EACA/iU,EACA6/T,EACAlC,EACA1vtC,EAAKwl/B,SACLmvO,GAEFhjtC,EAAQ6z+B,SAAW7z+B,EAAQ6z+B,SAASxjgC,OAAOge,EAAKwl/B,UAChD7z+B,EAAQsyC,MAAQ8t2B,EAAgBpg5B,EAAQ14B,WACnC,CACL,MAAMA,EAAS846B,EACfA,EAAgB8iU,EACdj2W,EACAk2W,EACA/iU,EACA6/T,EACAlC,EACA1vtC,EAAKwl/B,SACLmvO,GAEF30tC,EAAK/mB,OAASA,EACd+mB,EAAKikD,MAAQ8t2B,EAAgB946B,EAC7B68uC,EAAkBh6uC,KAAKkkB,GACvB2R,EAAU3R,CACZ,CACF,CAEA,MAAM84M,EAAO7iI,EAAUwu4B,IACvBxu4B,EAAUwu4B,IAAMxu4B,EAAUg+oC,QAC1Bh+oC,EAAUg+oC,QAAUn7gC,EAEpB7iI,EAAU66oC,gBAAkBgF,CAC9B,CA+CIC,CAAW9/oC,EAAW47oC,GA3M1B,SAAoB57oC,EAAW47oC,GAC7B,MAAM93iC,EAAU9jG,EAAU6+pB,SACpB88e,EAAe37oC,EAAU86oC,cACzBrB,EAAcz5oC,EAAU+6oC,aACxB2D,EAAgB1+oC,EAAUu+oC,eAE1B9slB,EAAa,IAAI3td,EAAQ79J,YAAY69J,EAAQ5/L,QAEnD,IAAIw3B,EAAUkgtC,EAAer/tC,MAC7B,MAAMsjuC,EAAoB,CAACnktC,GAE3B,IAAIog5B,EAAgB2iU,EAClB36iC,EACA2td,EACA,EACAkqlB,EACAlC,EACA/9sC,EAAQ6z+B,SACRmvO,GAMF,IAHAhjtC,EAAQ14B,OAAS,EACjB04B,EAAQsyC,MAAQ8t2B,EAET8/T,EAAe13uC,OAAS,GAAG,CAChC,MAAM6lB,EAAO6xtC,EAAer/tC,MAC5B,GAAI,IAAM2zF,OAAOnmF,EAAK+4D,MAAOpnD,EAAQonD,OACnCg51B,EAAgB2iU,EACd36iC,EACA2td,EACAqqR,EACA6/T,EACAlC,EACA1vtC,EAAKwl/B,SACLmvO,GAEFhjtC,EAAQ6z+B,SAAW7z+B,EAAQ6z+B,SAASxjgC,OAAOge,EAAKwl/B,UAChD7z+B,EAAQsyC,MAAQ8t2B,EAAgBpg5B,EAAQ14B,WACnC,CACL,MAAMA,EAAS846B,EACfA,EAAgB2iU,EACd36iC,EACA2td,EACAqqR,EACA6/T,EACAlC,EACA1vtC,EAAKwl/B,SACLmvO,GAGF30tC,EAAK/mB,OAASA,EACd+mB,EAAKikD,MAAQ8t2B,EAAgB946B,EAC7B68uC,EAAkBh6uC,KAAKkkB,GACvB2R,EAAU3R,CACZ,CACF,CAEAi2E,EAAUwu4B,IAAIv3F,YAAY1O,kBAAkB92O,GAE5CzxjB,EAAU6+pB,SAAWptG,EACrBzxjB,EAAU66oC,gBAAkBgF,CAC9B,CAgJIE,CAAW//oC,EAAW47oC,GAGxB57oC,EAAUo+oC,wBAA0B,EACpCp+oC,EAAUk+oC,aAAc,EACxBl+oC,EAAUm+oC,oBAAqB,EAC/Bn+oC,EAAUs+oC,iBAAkB,GACrB,IAzBLt+oC,EAAUk+oC,aAAc,GACjB,EAyBX,CAGuB8B,CAAgBhgpC,EAAWnoF,GAE1Cwg6B,EAAWr40B,EAAU430B,UACrBgkU,EAAiB57oC,EAAU66oC,gBAC3B32uC,EAAS03uC,EAAe13uC,OACxB208B,EAA0B,EAAT308B,EAEvB,IACE,OAAQm06B,KACPqnU,GACDrnU,EAASn06B,SAAW208B,EAEpB,OAGFxgC,EAASn06B,OAAS208B,EAElB,MAAM9uE,EAAc/pyB,EAAUwu4B,IACxBpnrB,EAAKpnN,EAAUsp1B,IACf3pP,EAAc3/lB,EAAUumvB,cAAgB,IAAQx0L,SAChDm4O,EAAalqyB,EAAUy2yB,YACvBljY,EAAKvza,EAAU8+yB,gBAErB,IAAK,IAAIty1B,EAAI,EAAGA,EAAItoD,IAAUsoD,EAAG,CAC/B,MAAMxpD,EAAS44uC,EAAepvrC,GAAGxpD,OAC3BgrE,EAAQ4tqC,EAAepvrC,GAAGwhB,MAEhC,IAAIg7hC,EAAsB3wL,EAAa,EAAJ7r3B,IAC9B,OAAQw8iC,KACXA,EAAsB3wL,EAAa,EAAJ7r3B,GAAS,IAAI,IAAY,CACtD6hxB,MAAOruuB,KAIXgpgC,EAAoBj/N,YAAcA,EAClCi/N,EAAoBrpa,YAAcA,EAClCqpa,EAAoBhmmC,OAASA,EAC7BgmmC,EAAoBh7hC,MAAQA,EAC5Bg7hC,EAAoB3jR,YAAcrlvB,EAAU2p4B,oBAC5Cq/H,EAAoB/+N,cAAgB7ilB,EACpC4hzB,EAAoB9+N,WAAaA,EACjC8+N,EAAoB51b,eAAiB7/J,EACrCy1lB,EAAoBxpN,MAAO,EAC3BwpN,EAAoB71W,KAAO,IAAK8xJ,uBAEhC,MAAMg7V,EAA6B,IAAY1/V,aAC7CyoN,EACAA,EAAoB/oN,gBAAgB50E,SAEtC40a,EAA2B56Z,YACzBrlvB,EAAU4p4B,2BACZq2Q,EAA2B9sf,KAAO,IAAKiyJ,8BACvC4jN,EAAoB/oN,gBAAgB50E,QAAU40a,EAE9C,IAAIhvP,EAAe54E,EAAa,EAAJ7r3B,EAAQ,IAC/B,OAAQyk8B,KACXA,EAAe54E,EAAa,EAAJ7r3B,EAAQ,GAAK,IAAI,IAAY,CACnD6hxB,MAAOruuB,KAIXix5B,EAAalnH,YAAcA,EAC3BknH,EAAatxT,YAAcA,EAC3BsxT,EAAaju/B,OAASA,EACtBiu/B,EAAajj7B,MAAQA,EACrBij7B,EAAa5rK,YAAcrlvB,EAAU6p4B,aACrConB,EAAahnH,cAAgB7ilB,EAC7B6psB,EAAa/mH,WAAaA,EAC1B+mH,EAAa79U,eAAiB7/J,EAC9B09e,EAAazxG,MAAO,EACpByxG,EAAa99P,KAAO,IAAK8xJ,uBAEzB,MAAMi7V,EAAsB,IAAY3/V,aACtC0wG,EACAA,EAAahxG,gBAAgB50E,SAE/B60a,EAAoB/sf,KAAO,IAAKiyJ,8BAChC6rG,EAAahxG,gBAAgB50E,QAAU60a,CACzC,CAEAlgpC,EAAUmgpC,gBAAiB,CAC7B,CA8YInxQ,CAAoB/t+B,KAAM4W,GA5Y9B,SAAuCmoF,EAAWo+nB,GAChD,GACEp+nB,EAAU0yuB,qBAAuB,IAAmBpzN,UACnD8+G,EAAW4xQ,uBACX,OAAQhw4B,EAAU+p4B,uBAAyB/p4B,EAAUmgpC,eAEtD,OAGF,MAAM9nU,EAAWr40B,EAAU430B,UACrBi3D,EAAqB7u4B,EAAU+p4B,oBAC/B+E,EAAY9u4B,EAAUsp4B,WAEtBzwB,EAAiBxgC,EAASn06B,OAC1BA,EAAU2q+B,EAAmB3q+B,OAAS208B,EAAiB,EAE7D,IAAI6yB,EAAe,EACnB,IAAK,IAAIl/6B,EAAI,EAAGA,EAAItoD,IAAUsoD,EAAG,CAC/B,MAAMui7B,EAAqBF,EAAmBri7B,GAAK,IAAY+z1B,aAC7D83B,EAASqzD,GACTmD,EAAmBri7B,IAErBui7B,EAAkB9kG,cAAgB6kG,EAClCC,EAAkB57O,KAAO,IAAKkyJ,0CAE9BqmF,GAAgB,CAClB,CAEA1r4B,EAAUmgpC,gBAAiB,CAC7B,CAgXIC,CAA8Bn/uC,KAAMm9tB,GAnDxC,SAAyBp+nB,GACvB,IAWIilH,EACAz7M,EAZA62uC,EAAYrgpC,EAAUg63B,iBAAmBh63B,EAAU26hC,gBAGvD,GAFA0lH,EACEA,KAAergpC,EAAUg63B,gBAAkBh63B,EAAUs+oC,iBACnD+B,EACF,QAGG,OAAQrgpC,EAAUi+oC,gBACrBj+oC,EAAUi+oC,aAAe,IAAYjzW,UAAU,CAAC,IAM9ChryB,EAAUg63B,gBACZ/0wB,EAAKjlH,EAAUi+oC,aACfz0uC,EAAO,IAAc4pnB,QAErBnua,EAAKjlH,EAAU6p4B,aACfrg+B,EAAO,IAAcupnB,WAGvB,MAAMslT,EAAWr40B,EAAU430B,UACrBonU,EAAgB3mU,EAASn06B,OAC/B,IAAK,IAAIgC,EAAI,EAAGA,EAAI84uC,EAAe94uC,GAAK,EAAG,CACzC,MAAMi64B,EAAUk4B,EAASny6B,EAAI,GAC7Bi64B,EAAQ96D,YAAcpgoB,EACtBk7rB,EAAQrtR,cAAgBtpnB,CAC1B,CAEAw2F,EAAU26hC,gBAAkB36hC,EAAUg63B,eACtCh63B,EAAUs+oC,iBAAkB,CAC9B,CAmBIgC,CAAgBr/uC,MAEZA,KAAK05nC,gBAhEb,SAAgCv8Z,EAAYi6M,GAC1C,MAAMxmF,EAAczzH,EAAWyzH,YACzBmtZ,EAAgB3mU,EAASn06B,OAC/B,IAAK,IAAIgC,EAAI,EAAGA,EAAI84uC,EAAe94uC,GAAK,EAAG,CACzC,MAAMi64B,EAAUk4B,EAASny6B,EAAI,GAC7Bi64B,EAAQhtJ,KAAO,IAAKmyJ,OACpBzzD,EAAYhs1B,KAAKs64B,EACnB,CACF,CAyDMogW,CAAuBnihB,EAAYn9tB,KAAK226B,WAExCiqD,EAAc5g+B,KAAMm9tB,EAAYn9tB,KAAK226B,UAAW326B,KAAK8o+B,sBAIrDjmD,EAAOr0sB,OAxXb,SAA4BzvI,GAC1B,IAAKA,EAAUm+oC,mBACb,OAGF,MAAMj6uC,EAAS87F,EAAU86oC,cAAc52uC,OACjCqq+B,EAAevu4B,EAAU+9kC,cAC/BxvM,EAAarq+B,OAAkB,EAATA,EAEtB,MAAM6l4B,EAAc/pyB,EAAUwu4B,IACxBM,EAAY9u4B,EAAUsp4B,WACtBk3Q,EAASxgpC,EAAUup4B,QACnB5pS,EAAc3/lB,EAAUumvB,cAAgB,IAAQx0L,SAChDm4O,EAAalqyB,EAAUy2yB,YAE7B,IAAK,IAAIjq1B,EAAI,EAAGA,EAAItoD,IAAUsoD,EAAG,CAC/B,MAAMxpD,EAASg9F,EAAU86oC,cAActurC,GACjCwhB,EAAQgyB,EAAU+6oC,aAAavurC,GAC/B+md,GAAK,OAAQvza,EAAUw29B,kBACzBx29B,EAAUw29B,iBAAiBhqgC,GAC3BwzC,EAAUozkB,eAEd,IAAI41b,EAAsBz6H,EAAiB,EAAJ/h7B,IAClC,OAAQw8iC,KACXA,EAAsBz6H,EAAiB,EAAJ/h7B,GAAS,IAAI,IAAY,CAC1D6hxB,MAAOruuB,EACP8/yB,UAAU,KAIdkpN,EAAoBj/N,YAAcA,EAClCi/N,EAAoBrpa,YAAcA,EAClCqpa,EAAoBhmmC,OAASA,EAC7BgmmC,EAAoBh7hC,MAAQA,EAC5Bg7hC,EAAoB3jR,YAAcrlvB,EAAU2p4B,oBAC5Cq/H,EAAoB/+N,cAAgB6kG,EACpCk6H,EAAoB9+N,WAAaA,EACjC8+N,EAAoB51b,eAAiB7/J,EACrCy1lB,EAAoB71W,KAAO,IAAK8xJ,uBAEhC,MAAMg7V,EAA6B,IAAY1/V,aAC7CyoN,EACAA,EAAoB/oN,gBAAgB50E,SAEtC40a,EAA2B56Z,YACzBrlvB,EAAU4p4B,2BACZq2Q,EAA2B9sf,KAAO,IAAKiyJ,8BACvC4jN,EAAoB/oN,gBAAgB50E,QAAU40a,EAE9C,IAAIhvP,EAAe1iB,EAAiB,EAAJ/h7B,EAAQ,IACnC,OAAQyk8B,KACXA,EAAe1iB,EAAiB,EAAJ/h7B,EAAQ,GAAK,IAAI,IAAY,CACvD6hxB,MAAOruuB,EACP8/yB,UAAU,KAIdmxG,EAAalnH,YAAcA,EAC3BknH,EAAatxT,YAAcA,EAC3BsxT,EAAaju/B,OAASA,EACtBiu/B,EAAajj7B,MAAQA,EACrBij7B,EAAa5rK,YAAcrlvB,EAAU8p4B,YACrCmnB,EAAahnH,cAAgBu2W,EAC7BvvP,EAAa/mH,WAAaA,EAC1B+mH,EAAa79U,eAAiB7/J,EAC9B09e,EAAa99P,KAAO,IAAK8xJ,uBAEzB,MAAMi7V,EAAsB,IAAY3/V,aACtC0wG,EACAA,EAAahxG,gBAAgB50E,SAE/B60a,EAAoB/sf,KAAO,IAAKiyJ,8BAChC6rG,EAAahxG,gBAAgB50E,QAAU60a,CACzC,CAEAlgpC,EAAUm+oC,oBAAqB,CACjC,CA6SI5uQ,CAAmBtu+B,MACnB4g+B,EAAc5g+B,KAAMm9tB,EAAYn9tB,KAAK88qC,eAEzC,EAWAggE,EAAsBr8uC,UAAU05B,YAAc,WAC5C,OAAO,CACT,EAaA2itC,EAAsBr8uC,UAAU26B,QAAU,WAKxC,OAJAp7B,KAAKut+B,IAAMvt+B,KAAKut+B,KAAOvt+B,KAAKut+B,IAAIny8B,UAChCp7B,KAAKqo7B,IAAMro7B,KAAKqo7B,KAAOro7B,KAAKqo7B,IAAIjt5B,UAChCp7B,KAAKso+B,QAAUto+B,KAAKso+B,SAAWto+B,KAAKso+B,QAAQlt8B,UAC5Cp7B,KAAK+8uC,QAAU/8uC,KAAK+8uC,SAAW/8uC,KAAK+8uC,QAAQ3htC,WACrC,OAAcp7B,KACvB,EACA,QAAe,8BAAqB,I,iFChvCpC,MAAMw/uC,EAA0B,CAO9Bt7O,SAAU,WAQVy5B,OAAQ,SAQR8Q,QAAS,UAQT7Q,SAAU,WAQVh5O,MAAO,QAQPmiQ,OAAQ,SAQRE,QAAS,UAQTvY,WAAY,cAOZtqC,MAAO,+BAOPD,SAAU,kCAyCZq7O,YAAsC,SAAUv/iB,GAK9C,OAHA,IAAMl8E,OAAO96mB,OAAO,WAAYg3rB,GAGxBA,GACN,KAAKu/iB,EAAwBt7O,SAC7B,KAAKs7O,EAAwB7hN,OAC7B,KAAK6hN,EAAwB/wM,QAC3B,OAAO,EACT,KAAK+wM,EAAwB5hN,SAC7B,KAAK4hN,EAAwB56b,MAC7B,KAAK46b,EAAwBz4L,OAC7B,KAAKy4L,EAAwBv4L,QAC7B,KAAKu4L,EAAwB9wM,WAC7B,KAAK8wM,EAAwBp7O,MAC7B,KAAKo7O,EAAwBr7O,SAC3B,OAAO,EAET,QACE,MAAM,IAAI,IAAe,kCAG/B,EAWAq7O,iBAA2C,SAAUvwM,GAEnD,IAAMlrb,OAAO96mB,OAAO,eAAgBgmiC,GAGpC,IAAIhvW,EAAWgvW,EAGf,MACMC,EADgB,cACcr0hC,KAAKo0hC,GAKzC,OAJsB,OAAlBC,IACFjvW,EAAWivW,EAAc,IAGnBjvW,GACN,IAAK,WACH,OAAOu/iB,EAAwBt7O,SACjC,IAAK,SACH,OAAOs7O,EAAwB7hN,OACjC,IAAK,UACH,OAAO6hN,EAAwB/wM,QACjC,IAAK,WACH,OAAO+wM,EAAwB5hN,SACjC,IAAK,QACH,OAAO4hN,EAAwB56b,MACjC,IAAK,SACH,OAAO46b,EAAwBz4L,OACjC,IAAK,UACH,OAAOy4L,EAAwBv4L,QACjC,IAAK,cACH,OAAOu4L,EAAwB9wM,WACjC,IAAK,+BACL,IAAK,SACH,OAAO8wM,EAAwBp7O,MACjC,IAAK,kCACL,IAAK,YACH,OAAOo7O,EAAwBr7O,SAIrC,EAWAq7O,iBAA2C,SAAUC,GAKnD,OAHA,IAAM17nB,OAAO96mB,OAAO,eAAgBw2uC,GAG5BA,GACN,IAAK,WACL,IAAK,qBACH,OAAOD,EAAwBt7O,SACjC,IAAK,OACL,IAAK,MACL,IAAK,SACH,OAAOs7O,EAAwB56b,MACjC,IAAK,SACL,IAAK,gBACH,OAAO46b,EAAwB7hN,OACjC,IAAK,WACH,OAAO6hN,EAAwB9wM,WAEjC,QACE,MAAM,IAAI,IAAe,sCAG/B,EAYA8wM,YAAsC,SAAUv/iB,GAK9C,OAHA,IAAMl8E,OAAO96mB,OAAO,WAAYg3rB,GAGxBA,GACN,KAAKu/iB,EAAwBt7O,SAC7B,KAAKs7O,EAAwB7hN,OAC7B,KAAK6hN,EAAwB/wM,QAC3B,MAAO,OACT,KAAK+wM,EAAwB5hN,SAC3B,MAAO,OACT,KAAK4hN,EAAwB56b,MAC3B,MAAO,OACT,KAAK46b,EAAwBz4L,OAC3B,MAAO,QACT,KAAKy4L,EAAwBv4L,QAC3B,MAAO,OACT,KAAKu4L,EAAwB9wM,WAC3B,MAAO,MACT,KAAK8wM,EAAwBp7O,MAC3B,MAAO,OACT,KAAKo7O,EAAwBr7O,SAC3B,MAAO,OACT,KAAKq7O,EAAwBE,QAC3B,MAAO,QAET,QACE,MAAM,IAAI,IAAe,kCAG/B,EAYAF,gBAA0C,SAAUv/iB,EAAUj/jB,GAE5D,IAAM+if,OAAO96mB,OAAO,WAAYg3rB,GAGhC,IAAIk+T,EA9MN,SAAgCl+T,GAC9B,OAAQA,GACN,KAAKu/iB,EAAwBt7O,SAC3B,MAAO,aACT,KAAKs7O,EAAwB7hN,OAC3B,MAAO,WACT,KAAK6hN,EAAwB/wM,QAC3B,MAAO,YACT,KAAK+wM,EAAwB5hN,SAC3B,MAAO,WACT,KAAK4hN,EAAwB56b,MAC3B,MAAO,QACT,KAAK46b,EAAwBz4L,OAC3B,MAAO,SACT,KAAKy4L,EAAwBv4L,QAC3B,MAAO,UACT,KAAKu4L,EAAwB9wM,WAC3B,MAAO,YACT,KAAK8wM,EAAwBp7O,MAC3B,MAAO,QACT,KAAKo7O,EAAwBr7O,SAC3B,MAAO,WAET,QACE,MAAM,IAAI,IAAe,kCAG/B,CAmLqBw7O,CAAuB1/iB,GAI1C,OAHI,OAAQj/jB,KACVm93B,GAAgB,IAAIn93B,KAEfm93B,CACT,GAEA,EAAe53/B,OAAOivmB,OAAOgqoB,E,6CCjS7B,MAiCA,EAAej5uC,OAAOivmB,OAjCC,CAOrBwtN,OAAQ,EAQRtjxB,OAAQ,EAQRqn4B,SAAU,EAQVvn4B,KAAM,G,2SCtBR,SAASogsC,IACP5/uC,KAAKk/4B,aAAU/54B,EACfnF,KAAKu1qB,UAAOpwqB,EACZnF,KAAKw1qB,SAAMrwqB,CACb,CAYA,SAAS06uC,EAAK/j6B,EAAOwtD,EAAQllX,GAC3B,MAAMxN,EAAUklU,EAAMllU,QAEtB,IAAIshgC,EAKAuzI,EAJA70oC,EAAQg93B,eACVskI,EAAa,IAAI,KAIfp8rB,EAAMk52B,SAAWp+qC,EAAQg93B,eAC3B63Q,EAAM,IAAI,IAAI70oC,IAGhB,MAAMgy3B,EAAY,IAAI,IAAUhy3B,GAChCgy3B,EAAUxk3B,SAAW,IAAkB6mC,MAAM7mC,GAE7CpkB,KAAKspY,OAASA,EACdtpY,KAAK8/uC,aAAe,IAAO70rC,MAAMq+U,GACjCtpY,KAAK+/uC,mBAAoB,EACzB//uC,KAAKggvC,sBAAmB76uC,EAExBnF,KAAKokB,SAAWA,EAChBpkB,KAAK4o4B,UAAYA,EACjB5o4B,KAAKo4pC,gBAAkB,IAAI,IAAgBxhpC,GAC3C5W,KAAK45pC,qBAAuB,IAAI,IAChC55pC,KAAK89rC,iBAAmB,IAAI,IAC5B99rC,KAAK29rC,gBAAkB,IAAI,IAC3B39rC,KAAKk4gC,WAAaA,EAClBl4gC,KAAKi6hC,6BAA+B,IAAI,IACxCj6hC,KAAKyrpC,IAAMA,EACXzrpC,KAAKw9rC,8BAAgC,IAAI,IACvC5mrC,GAKF5W,KAAKk3pC,WAAa,GAClBl3pC,KAAK+5pC,oBAAsB,GAC3B/5pC,KAAKu6rC,4BAAyBp1rC,EAI9BnF,KAAKigvC,gBAAkB,EACzB,CAEA,MAAMC,EAAmB,IAAI,IACvBC,EAAmB,IAAI,IAsJ7B,SAASC,EAActypC,EAAMguP,EAAOuk6B,GAClC,MAAM,QAAEnhW,EAAO,KAAE3pO,EAAI,IAAEC,GAAQ6qkB,EAE3Bvk6B,EAAMwnqB,oBACRpkG,EAAQE,yBAA2B,GAGrC,MAAM,oBAAE26Q,GAAwBjskC,EAEhC,IAAK,IAAI7oF,EAAI,EAAGA,EAAI80pC,EAAoB92pC,SAAUgC,EAAG,CACnD,MAAM+0hC,EAAkB+/H,EAAoB90pC,GAE5C,GAAIswqB,EAAOykX,EAAgBxkX,IACzB,SAGF,GAAIA,EAAMwkX,EAAgBzkX,KACxB,MAGF,MAAM28E,EAAOgtJ,EAAQhtJ,KACfp3uB,EAAQk/gC,EAAgBn31B,QAAQqvjB,KAOtC,GANA8nS,EAAgB5iH,SAASllL,GAAMp3uB,GAASok4B,EAEpCpjkB,EAAMwnqB,oBACRpkG,EAAQE,0BAA4B,GAAKn64B,GAGvCi64B,EAAQT,wBACV,KAEJ,CAEA,GAAI3ikB,EAAMwnqB,kBAAmB,CAC3B,MAAM,uBAAEi3M,GAA2BzsmC,GAC7B,yBAAEsxzB,GAA6BF,EAC/Bp+f,EAAKy5yB,EAAuB+lD,mBAClCx/1B,EAAGs+f,IAA4B,OAAQt+f,EAAGs+f,IACtCt+f,EAAGs+f,GAA4B,EAC/B,IACFm7S,EAAuBgmD,aAC3B,CAEAzk6B,EAAMy2sB,sBAAsBrzI,EAC9B,CAzJA2gW,EAAKp/uC,UAAU0isC,sBAAwB,SAAUrn3B,GAC/C,MAAMwtD,EAAStpY,KAAKspY,OACdk32B,EAAcxgvC,KAAK8/uC,aACzB,OAjCF,SAAqBW,EAASC,EAAS121B,GACrC,MAAM221B,EAA2B5yuC,KAAK8R,IACpC,IAAW4ymB,iBACT,IAAWhqmB,IAAIg4tC,EAAQ75tC,SAAUs5tC,IAEnC,IAAWztnB,iBACT,IAAWhqmB,IAAIi4tC,EAAQ95tC,SAAUu5tC,KAG/BltnB,EAAS,EAAIllnB,KAAK8R,IAAI,EAAG8guC,GAG/B,OAFA,IAAWr5nB,iBAAiBm5nB,EAAQ75tC,SAAUqsmB,EAAQitnB,GACtD,IAAW54nB,iBAAiBo5nB,EAAQ95tC,SAAUqsmB,EAAQktnB,GAEpD,IAAWvsnB,cAAcssnB,EAAkBC,EAAkBn21B,IAC7D,IAAW4pO,cAAc6snB,EAAQhwtC,UAAWiwtC,EAAQjwtC,UAAWu5X,IAC/D,IAAW4pO,cAAc6snB,EAAQzupC,GAAI0upC,EAAQ1upC,GAAIg4T,IACjD,IAAW4pO,cAAc6snB,EAAQ38tC,MAAO48tC,EAAQ58tC,MAAOkmY,IACvD,IAAQ4pO,cAAc6snB,EAAQ72tC,UAAW82tC,EAAQ92tC,UAAWogY,IAC5Dy21B,EAAQ5x7B,QAAQ+kU,cAAc8snB,EAAQ7x7B,QAASm7F,EAEnD,CAaO421B,CAAYt32B,EAAQk32B,EAAa,IAAWj8jB,YAY/CvkrB,KAAK+/uC,oBACL,SAAiB//uC,KAAKggvC,iBAAmBlk6B,EAAMi72B,sBAE/CztzB,EAAOq0jB,QAAQ56S,aACf/ipB,KAAK+/uC,mBAAoB,IAGpB,IAlBA//uC,KAAK+/uC,oBACRz22B,EAAOo0jB,UAAU36S,aACjB/ipB,KAAK+/uC,mBAAoB,GAE3B//uC,KAAKggvC,kBAAmB,SACxB,IAAO/0rC,MAAMq+U,EAAQk32B,IAEd,EAYX,EAoIA,MAAM7/C,EAAuB,IAAI,IAC3BkgD,EAAyB,IAAI,IAEnChB,EAAKp/uC,UAAU6+rC,4BAA8B,SAAUxj3B,GACrD,MAAM,WAAEqhZ,GAAerhZ,GACjB,OAAEwtD,EAAM,YAAEsnd,EAAW,YAAE2wK,GAAgBpkS,GACvC,WAAE0yH,EAAU,YAAEilB,EAAW,QAAEjmjB,GAAYy6E,EAEvCw32B,EAAchl6B,EAAMg52B,oBACpBisD,EAAcjl6B,EAAMi52B,oBAEtBj52B,EAAMwnqB,oBACRtj/B,KAAKu6rC,uBAAyB,CAC5BgmD,cAAe,EACfD,mBAAoB,CAAC,IAIzB,MAAMvmF,EAAsB/5pC,KAAK+5pC,oBACjC,IAAK,IAAIt2oC,EAAI,EAAGA,EAAIs2oC,EAAoB92pC,SAAUwgB,EAChD,IAAK,IAAIm4B,EAAI,EAAGA,EAAI,IAAK8o2B,mBAAoB9o2B,EAC3Cm+mC,EAAoBt2oC,GAAGo/K,QAAQjnJ,GAAK,EAIxCklsC,EAAY79uC,OAAS,EACrB89uC,EAAY99uC,OAAS,EAErB,MAAM+9uC,EAAiBhhvC,KAAKigvC,gBACtBgB,EAAwBD,EAAe/9uC,OAC7C,IAAIi+uC,EAAqB,EAErB3rkB,GAAQz2pB,OAAO26M,UACf+7c,GAAO12pB,OAAO26M,UAElB,MAAM,eAAE+nyB,GAAmBD,EAC3B,IAAI4/O,GAAcriuC,OAAO26M,UACrB2nhC,GAAatiuC,OAAO26M,UACpB4nhC,EAA0BviuC,OAAO26M,UAErC,MAAMm2Z,EACJutG,EAAWxunB,OAAS,IAAU25qB,QAAUnrD,EAAWvtG,cAAWzqnB,EAGhE,IAAI,cAAEkm8B,GAAkBluO,EACxB,MAAM3rD,EAASmvhB,EAAqBnvhB,OACpC,IAAK,IAAI7tpB,EAAI,EAAGA,EAAI,IAAKA,EACvB6tpB,EAAO7tpB,GAAK0n7B,EAAc75R,OAAO7tpB,GAEnC0n7B,EAAgBs1P,EAEhB,IAAK,IAAI17rC,EAAI,EAAGA,EAAI2r1B,EAAY3t1B,SAAUgC,EAAG,CAC3C,MAAMi64B,EAAUtuD,EAAY3r1B,IACtB,KAAEitvB,EAAI,eAAE//E,GAAmB+sO,EAEjC,GAAIhtJ,IAAS,IAAKq3I,QAChBu3W,EAAYl8uC,KAAKs64B,QACZ,GAAIhtJ,IAAS,IAAKuyJ,QACvBs8V,EAAYn8uC,KAAKs64B,OACZ,CACL,IAAIoiW,EACAC,EAEJ,IAAI,OAAQpvkB,GAAiB,CAC3B,IAAKr2V,EAAMn/S,UAAU0u6B,EAAensD,EAAStvR,GAC3C,SAGF,MAAM4xnB,EAAkBrvkB,EAAezjD,sBACrCmhO,EACAilB,EACA+rY,GAYF,GAVAS,EAAcE,EAAgBt9tC,MAC9Bq9tC,EAAaC,EAAgB3/qC,KAC7B0zmB,EAAOxnqB,KAAKqV,IAAImypB,EAAM+rkB,GACtB9rkB,EAAMznqB,KAAK8R,IAAI21pB,EAAK+rkB,GAQlB//O,GACAtiH,EAAQN,gBACR0iW,EAAc,IAAUz/B,oBACtB3vd,IAAS,IAAK6xJ,OAASu9V,GAAe,KAASC,EAAa,KAC9D,CAEA,MAAMjguC,EAAOiguC,EAAaD,EACtBpvf,IAAS,IAAK6xJ,OAASu9V,EAAc,MACvCD,EAA0BtzuC,KAAKqV,IAAIi+tC,EAAyB//tC,IAE9D6/tC,EAAapzuC,KAAKqV,IAAI+9tC,EAAYG,GAClCF,EAAYrzuC,KAAK8R,IAAIuhuC,EAAWG,EAClC,CACF,MAAWriW,aAAmB,KAE5BoiW,EAAczy7B,EAAQ0mX,KACtBgskB,EAAa1y7B,EAAQ2mX,MAIrB8rkB,EAAczy7B,EAAQ0mX,KACtBgskB,EAAa1y7B,EAAQ2mX,IACrBD,EAAOxnqB,KAAKqV,IAAImypB,EAAM+rkB,GACtB9rkB,EAAMznqB,KAAK8R,IAAI21pB,EAAK+rkB,IAGtB,IAAIrm/B,EAAS8l/B,EAAeE,IACvB,OAAQhm/B,KACXA,EAAS8l/B,EAAeE,GAAsB,IAAItB,GAEpD1k/B,EAAOgkpB,QAAUA,EACjBhkpB,EAAOq6a,KAAO+rkB,EACdpm/B,EAAOs6a,IAAM+rkB,EACbL,GACF,CACF,CAEI1/O,IACF2/O,EAAapzuC,KAAKqV,IAAIrV,KAAK8R,IAAIshuC,EAAYty7B,EAAQ0mX,MAAO1mX,EAAQ2mX,KAClE4rkB,EAAYrzuC,KAAK8R,IAAI9R,KAAKqV,IAAIg+tC,EAAWvy7B,EAAQ2mX,KAAM2rkB,GAEvD5/O,EAAYG,UAAYy/O,EACxB5/O,EAAYI,SAAWy/O,EACvB7/O,EAAYK,kBAAoBy/O,GArPpC,SAAwBvzpC,EAAMguP,EAAOy5V,EAAMC,GACzC,MAAM,WAAE2nD,GAAerhZ,GACjB,OAAEwtD,EAAM,YAAEw6mB,GAAgB3mR,EAC1Bm5d,EAAiBxyM,EACnBhoqB,EAAMy62B,+BACNz62B,EAAMw62B,eACJtuD,EAAOlszB,EAAMntO,OAAS,IAAUwlvB,QAChCqiW,EAAsB162B,EAAM062B,oBAWlC,IAAIh0M,EARJhtU,GAAO,EAAM,IAAWpc,SAKxBmc,EAAOxnqB,KAAKqV,IAAIrV,KAAK8R,IAAI01pB,EAAMjsS,EAAOz6E,QAAQ0mX,MAAOjsS,EAAOz6E,QAAQ2mX,KACpEA,EAAMznqB,KAAK8R,IAAI9R,KAAKqV,IAAIoypB,EAAKlsS,EAAOz6E,QAAQ2mX,KAAMD,GAG9Cyyd,GAIFxyd,EAAMznqB,KAAKqV,IAAIoypB,EAAKlsS,EAAO1iX,SAAS/D,EAAIi5T,EAAM062B,qBAC9CjhhB,EAAOxnqB,KAAKqV,IAAImypB,EAAMC,GACtBgtU,EAAcz0+B,KAAKC,KACjBD,KAAK8R,IAAI,EAAK21pB,EAAMD,GAAQz5V,EAAM062B,sBAIpCh0M,EAAcz0+B,KAAKC,KAAKD,KAAKm7G,IAAIssjB,EAAMD,GAAQxnqB,KAAKm7G,IAAIotkC,IAG1D,MAAM,oBAAEv8B,GAAwBjskC,EAChCiskC,EAAoB92pC,OAASu/+B,EAC7B,IAAK,IAAI/r+B,EAAI,EAAGA,EAAI+r+B,IAAe/r+B,EAAG,CACpC,IAAIgruC,EACAC,EAEA15G,GACFy5G,EAAU1zuC,KAAKqV,IACboypB,EAAMghhB,EACNjhhB,EAAO9+pB,EAAI+/qC,GAEbkrD,EAAS3zuC,KAAKqV,IAAIoypB,EAAKiskB,EAAUjrD,KAEjCirD,EAAU1zuC,KAAK8R,IAAI01pB,EAAMxnqB,KAAKiV,IAAIszqC,EAAgB7/qC,GAAK8+pB,GACvDmskB,EAAS3zuC,KAAKqV,IAAIoypB,EAAK8ghB,EAAiBmrD,IAE1C,IAAIznN,EAAkB+/H,EAAoBtjpC,IACrC,OAAQujhC,IAMXA,EAAgBzkX,KAAOkskB,EACvBznN,EAAgBxkX,IAAMkskB,GANtB1nN,EAAkB+/H,EAAoBtjpC,GAAK,IAAI,IAC7CgruC,EACAC,EAMN,CACF,CA4LEC,CAAe3hvC,KAAM87U,EAAOy5V,EAAMC,GAElC,IAAK,IAAI3rqB,EAAI,EAAGA,EAAIq3uC,EAAoBr3uC,IACtCu2uC,EAAcpgvC,KAAM87U,EAAOkl6B,EAAen3uC,IAI5C,GAAIq3uC,EAAqBD,EACvB,IAAK,IAAIp3uC,EAAIq3uC,EAAoBr3uC,EAAIo3uC,EAAuBp3uC,IAAK,CAC/D,MAAMw2uC,EAAgBW,EAAen3uC,GACrC,KAAK,OAAQw2uC,EAAcnhW,SAIzB,MAEFmhW,EAAcnhW,aAAU/54B,CAC1B,CAGF,MAAMq9+B,EAAcu3K,EAAoB92pC,QAClC,cAAEu1rB,GAAkB2kC,EAC1B3kC,EAAcv1rB,OAASu/+B,EAAc,EACrC,IAAK,IAAIj37B,EAAI,EAAGA,EAAIi37B,IAAej37B,EACjCitoB,EAAcjtoB,GAAKwumC,EAAoBxumC,GAAGgqnB,KACtChqnB,IAAMi37B,EAAc,IACtBhqT,EAAcjtoB,EAAI,GAAKwumC,EAAoBxumC,GAAGiqnB,IAGpD,EAEAqqkB,EAAKp/uC,UAAU26B,QAAU,WACvBp7B,KAAKo4pC,gBAAkBp4pC,KAAKo4pC,iBAAmBp4pC,KAAKo4pC,gBAAgBh9nC,UACpEp7B,KAAK45pC,qBACH55pC,KAAK45pC,sBAAwB55pC,KAAK45pC,qBAAqBx+nC,UACzDp7B,KAAK89rC,iBACH99rC,KAAK89rC,kBAAoB99rC,KAAK89rC,iBAAiB1iqC,UACjDp7B,KAAK29rC,gBAAkB39rC,KAAK29rC,iBAAmB39rC,KAAK29rC,gBAAgBviqC,UACpEp7B,KAAKk4gC,WAAal4gC,KAAKk4gC,YAAcl4gC,KAAKk4gC,WAAW98+B,UACrDp7B,KAAKyrpC,IAAMzrpC,KAAKyrpC,KAAOzrpC,KAAKyrpC,IAAIrwnC,UAChCp7B,KAAKw9rC,8BACHx9rC,KAAKw9rC,+BACLx9rC,KAAKw9rC,8BAA8BpiqC,UACrCp7B,KAAKi6hC,6BACHj6hC,KAAKi6hC,8BACLj6hC,KAAKi6hC,6BAA6B7+/B,UAEpC,MAAM87nC,EAAal3pC,KAAKk3pC,WACxB,IAAK,IAAIjypC,EAAI,EAAGA,EAAIiypC,EAAWj0pC,SAAUgC,EACvCiypC,EAAWjypC,GAAGm2B,SAElB,EACA,QAAe,8BAAI,I,sKCvbnB,SAASwmtC,EAAahooB,EAAW0uN,GAO/Bto0B,KAAKsE,MAAO,GAEP,OAAQs1mB,KACXA,EAAY,IAAI,KAWlB55mB,KAAK45mB,UAAY,IAAkB3ujB,MAAM2ujB,IAEpC,OAAQ0uN,KACXA,EAAW,IAASsxC,SAAS,IAASE,UAAW,CAC/Cj4xB,MAAO,IAAI,IAAM,EAAK,EAAK,EAAK,MAsBpC7hF,KAAKso0B,SAAWA,EAChBto0B,KAAK4n0B,eAAYzi0B,EAEjBnF,KAAK6hvC,qBAAkB18uC,EACvBnF,KAAK23+B,SAAMxy+B,CACb,CAaAy8uC,EAAanhvC,UAAU8tB,OAAS,SAAU4usB,GACxC,IAAKn9tB,KAAKsE,KACR,OAIF,KAAK,OAAQtE,KAAKso0B,UAChB,MAAM,IAAI,IAAe,kCAE3B,KAAK,OAAQto0B,KAAK45mB,WAChB,MAAM,IAAI,IAAe,mCAI3B,MAAM51Z,EAAKhkN,KAAK23+B,IAShB,IARK,OAAQ3zxB,IAAQ,IAAkB/0G,OAAO+0G,EAAG5/L,SAAUpkB,KAAK45mB,aAC9D55mB,KAAK23+B,IAAM,IAAY5tG,UAAU,CAC/B4b,SAAU,IAAcusB,YACxB9t5B,SAAUpkB,KAAK45mB,aAINujH,EAAW0lN,OACf7k2B,OAAQ,CACf,MAAMpnE,EAAUumtB,EAAWvmtB,QAE3B,GAAI5W,KAAK4n0B,YAAc5n0B,KAAKso0B,YAAa,OAAQto0B,KAAK6hvC,iBAAkB,CAEtE7hvC,KAAK4n0B,UAAY5n0B,KAAKso0B,UAElB,OAAQto0B,KAAK6hvC,kBACf7hvC,KAAK6hvC,gBAAgB74W,cAAc5t2B,UAGrC,MAAM8lC,EAAK,IAAI,IAAa,CAC1B0jH,QAAS,CAAC5kL,KAAK4n0B,UAAU+qF,aAAc,OAEzC3y5B,KAAK6hvC,gBAAkBjruC,EAAQyg4B,0BAA0Bn20B,EAAI,CAC3DkjxB,YAAapk1B,KAAK23+B,IAClB1uG,WAAYjp4B,KAAK4n0B,UAAUwpF,UAC3BhkF,MAAOpt0B,OAETA,KAAK6hvC,gBAAgB3vf,KAAO,IAAKuyJ,OACnC,CAEAzk5B,KAAK4n0B,UAAUr5yB,OAAO3X,GAEtB5W,KAAK6hvC,gBAAgBz9Z,YAAcpk1B,KAAK23+B,IACxC33+B,KAAK6hvC,gBAAgB54W,WAAajp4B,KAAK4n0B,UAAUwpF,UACjDj0L,EAAWyzH,YAAYhs1B,KAAK5E,KAAK6hvC,gBACnC,CACF,EAYAD,EAAanhvC,UAAU05B,YAAc,WACnC,OAAO,CACT,EAkBAyntC,EAAanhvC,UAAU26B,QAAU,WAM/B,OALI,OAAQp7B,KAAK6hvC,mBACf7hvC,KAAK6hvC,gBAAgB74W,cACnBhp4B,KAAK6hvC,gBAAgB74W,eACrBhp4B,KAAK6hvC,gBAAgB74W,cAAc5t2B,YAEhC,OAAcp7B,KACvB,EACA,QAAe,8BAAY,I,2OCtJ3B,SAAS8hvC,EAAsB/hvC,GAC7B,MAAM,OACJyxqB,EAAM,YACNktB,EAAc,IAAQ5tC,SAAQ,qBAC9Bs/U,GAAuB,GACrBrw+B,GAAW,IAAOw8mB,aAuCtB,GArCAv8mB,KAAK6v+B,QAAU,GASf7v+B,KAAK0+rB,YAAc,IAAQzzoB,MAAMyzoB,GAQjC1+rB,KAAKkw+B,WAAa,IAAI,IAQtBlw+B,KAAKmw+B,aAAe,IAAI,IAExBnw+B,KAAKqw+B,sBAAwBD,EAC7Bpw+B,KAAKsw+B,kBAAoBF,EACrBG,EACAC,EAEJxw+B,KAAK0w+B,kBAAevr+B,EAEpBnF,KAAK2w+B,4BAAyBxr+B,GAG1B,OAAQqsqB,GACV,IAAK,IAAIvsqB,EAAI,EAAGA,EAAIusqB,EAAOvuqB,SAAUgC,EACnCjF,KAAKk5B,IAAIs4oB,EAAOvsqB,GAGtB,CAEA,SAASsr+B,EAAuBlr+B,GAC9B,OAAOA,IAAU,IAAUminB,OAC7B,CAEA,SAASgpX,EAAyBnr+B,GAChC,OAAOA,IAAU,IAAUkinB,MAC7B,CAqHA,SAASx+mB,EAAQyoqB,EAAQnqD,GACvB,IAAK,IAAIpinB,EAAI,EAAGA,EAAIusqB,EAAOvuqB,SAAUgC,EACnC,GAAI,IAAMgqG,OAAOuikB,EAAOvsqB,GAAIoinB,GAC1B,OAAOpinB,EAGX,OAAQ,CACV,CA1HAsB,OAAOgwE,iBAAiBurqC,EAAsBrhvC,UAAW,CAUvDwC,OAAQ,CACNgT,IAAK,WACH,OAAOjW,KAAK6v+B,QAAQ5s+B,MACtB,GAYFmt+B,qBAAsB,CACpBn69B,IAAK,WACH,OAAOjW,KAAKqw+B,qBACd,EACAz78B,IAAK,SAAUvvB,GAEb,IAAM0+mB,OAAO5te,KAAK,QAAS9wI,GAEvBrF,KAAKqw+B,wBAA0Bhr+B,IAGnCrF,KAAKqw+B,sBAAwBhr+B,EAC7BrF,KAAKsw+B,kBAAoBjr+B,EACrBkr+B,EACAC,EACN,GAWF76V,QAAS,CACP1/nB,IAAK,WACH,OAAOjW,KAAK2w+B,sBACd,GAcFtyB,oBAAqB,CACnBpo8B,IAAK,WACH,OAAOjW,KAAKqw+B,sBACRrw+B,KAAK6v+B,QAAQ5s+B,QACZjD,KAAK6v+B,QAAQ5s+B,MACpB,KAeJ6+uC,EAAsBrhvC,UAAUy4B,IAAM,SAAUmulB,GAC9C,MAAMypX,EAAgB9w+B,KAAK6v+B,QAAQ5s+B,OACnCoknB,EAAMvsmB,MAAQg29B,EACd9w+B,KAAK6v+B,QAAQjr+B,KAAKyinB,GAClBrnnB,KAAKkw+B,WAAWntV,WAAW17B,EAAOypX,EACpC,EAcAgxQ,EAAsBrhvC,UAAUwV,IAAM,SAAU6E,GAK9C,OAHA,IAAMipmB,OAAO1umB,OAAO,QAASyF,GAGtB9a,KAAK6v+B,QAAQ/09B,EACtB,EAmBAgnuC,EAAsBrhvC,UAAUioB,SAAW,SAAU8m9B,GACnD,OAAiD,IAA1Czm+B,EAAQ/I,KAAK6v+B,QAASL,EAC/B,EAYAsyQ,EAAsBrhvC,UAAUqF,OAAS,SAAU0p+B,GACjD,MAAMh+T,EAASxxqB,KAAK6v+B,QACd/09B,EAAQ/R,EAAQyoqB,EAAQg+T,GAE9B,IAAe,IAAX109B,EACF,OAAO,EAIL009B,aAAyB,MAC3BA,EAAcD,sBAAmBpq+B,EACjCqq+B,EAAc109B,OAAS,GAIzB,MAAM7X,EAASuuqB,EAAOvuqB,OAAS,EAC/B,IAAK,IAAIgC,EAAI6V,EAAO7V,EAAIhC,IAAUgC,EAAG,CACnC,MAAM8r+B,EAAcv/T,EAAOvsqB,EAAI,GAC/BusqB,EAAOvsqB,GAAK8r+B,EACRA,aAAuB,MACzBA,EAAYj29B,MAAQ7V,EAExB,CAMA,OAJAusqB,EAAOvuqB,OAASA,EAEhBjD,KAAKmw+B,aAAaptV,WAAWysV,EAAe109B,IAErC,CACT,EAQAgnuC,EAAsBrhvC,UAAUmoM,UAAY,WAE1C,MAAM4oe,EAASxxqB,KAAK6v+B,QACpB,IAAK,IAAI5q+B,EAAI,EAAGA,EAAIusqB,EAAOvuqB,SAAUgC,EAAG,CACtC,MAAMoinB,EAAQmqD,EAAOvsqB,GACjBoinB,aAAiB,MACnBA,EAAMkoX,sBAAmBpq+B,EACzBkinB,EAAMvsmB,OAAS,GAEjB9a,KAAKmw+B,aAAaptV,WAAW17B,EAAOpinB,EACtC,CACAjF,KAAK6v+B,QAAU,EACjB,EAEA,MAAMj+T,EAAe,IAAI,IAAM,IAAWv/C,aAAa,EAAK,EAAK,GAAM,GAwBjE00H,EAAyB,IAAI,IAC7Bg7f,EAA2B,IAAI,IAErC,SAASC,EAAe36nB,EAAOz9lB,EAAWoP,GAExC,IAAM+qlB,OAAO3nlB,OAAO,QAASirlB,GAC7B,IAAMtD,OAAO3nlB,OAAO,YAAaxS,GAGjC,MAAM,OAAEoxP,EAAM,SAAEjlP,GAAasxlB,EACvB4/H,EAAoB,IAAW50H,aACnCr3W,EAAO33P,EACP23P,EAAO13P,EACP03P,EAAOn4P,EACPkT,EACAgxtB,GAEF,IAAIk7f,EAAmB,IAAQ5pnB,iBAC7BzumB,EACAq9tB,EACAF,GAIF,MAAMG,EAAoB,IAAWlzH,eACnCiunB,EACAF,GAQF,OANAE,EAAmB,IAAW/unB,eAC5B+unB,EACA,IAAW72nB,UAAU87H,GACrBH,GAGK,IAAM/yH,eAAeiunB,EAAkBjptC,EAChD,CAEA,SAAS448B,EAAyBC,EAAc748B,GAG9C,OAFAA,EAAO3V,EAAItV,KAAKqV,IAAIyu9B,EAAc,IAAc55F,oBAChDj/2B,EAAO1V,EAAIvV,KAAKC,KAAK6j+B,EAAe748B,EAAO3V,GACpC2V,CACT,CAEA,MAAM+48B,EAA2B,IAAI,IAQrC+vQ,EAAsBrhvC,UAAU8tB,OAAS,SAAU4usB,EAAYvzsB,GAC7D,IAAIoo9B,EAAwBhy+B,KAAK2w+B,uBAIjC,MAAMkB,EAAe7x+B,KAAKiD,OAE1B,IAAI,OAAQ+u+B,GAAwB,CAClC,MAAME,EACJF,EAAsB7q+B,MAAQ6q+B,EAAsBlw+B,QAOpDow+B,EAAoBL,GACpBA,EAAe,IAAOK,KAEtBF,EAAsB528B,UACtB428B,OAAwB7s+B,EACxBnF,KAAK2w+B,4BAAyBxr+B,EAElC,CAGA,GAAoB,IAAhBnF,KAAKiD,OACP,OAGF,KAAK,OAAQ+u+B,GAAwB,CACnC,MAAMG,EAAqBP,EACzBC,EACAE,GAIFI,EAAmB7u9B,GAAK,EAExB0u9B,EAAwB,IAAI,IAAQ,CAClCp79B,QAASumtB,EAAWvmtB,QACpBzP,MAAOgr+B,EAAmB9u9B,EAC1BvhB,OAAQqw+B,EAAmB7u9B,EAC3BuhuB,YAAa,IAAYjC,KACzB9zF,cAAe,IAAcv9B,MAC7B6nR,QAAS,IAAQ78F,QACjBtmK,OAAO,IAETj2oB,KAAK0w+B,aAAe,IAAIvt9B,aACtBgv9B,EAAmB9u9B,EAAI8u9B,EAAmB7u9B,EAAI,GAGhDtjB,KAAK2w+B,uBAAyBqB,CAChC,CAEA,MAAM,MAAE7q+B,EAAK,OAAErF,GAAWkw+B,GA/H5B,SAAgCZ,EAAyBxn9B,GACvD,MAAM8n9B,EAAcN,EAAwBV,aACtCl/T,EAAS4/T,EAAwBvB,QAEvC,IAAI8B,EAAa,EACjB,IAAK,IAAI1s+B,EAAI,EAAGA,EAAIusqB,EAAOvuqB,SAAUgC,EAAG,CACtC,MAAM,OAAE+1Q,EAAM,SAAEjlP,GAAaistC,EAC3BxwkB,EAAOvsqB,GACP2kB,EACAgopB,GAGF8/T,EAAYC,GAAc32tB,EAAO33P,EACjCqu9B,EAAYC,EAAa,GAAK32tB,EAAO13P,EACrCou9B,EAAYC,EAAa,GAAK32tB,EAAOn4P,EACrC6u9B,EAAYC,EAAa,GAAK578B,EAE9B478B,GAAc,CAChB,CACF,CA6GEuwQ,CAAuBlivC,KAAM4pB,GAC7Boo9B,EAAsB50F,SAAS,CAC7Bhs4B,OAAQ,CACNjK,MAAOA,EACPrF,OAAQA,EACRktpB,gBAAiBhvpB,KAAK0w+B,eAG5B,EAaAoxQ,EAAsBzvQ,qBAAuB,SAC3CjB,EACAx69B,EACAoiB,GAEA,MAAM28mB,EAAUy7V,EAAwBz7V,QACxC,IAAI,OAAQA,GAGV,OAFA38mB,EAAO3V,EAAIsynB,EAAQxuoB,MACnB6xB,EAAO1V,EAAIqynB,EAAQ7zoB,OACZk3B,EAGT,MACMm58B,EAAqBP,EADNR,EAAwBnu+B,OACqB+1B,GAIlE,OADAm58B,EAAmB7u9B,GAAK,EACjB6u9B,CACT,EAYA2vQ,EAAsBrhvC,UAAU05B,YAAc,WAC5C,OAAO,CACT,EAiBA2ntC,EAAsBrhvC,UAAU26B,QAAU,WAGxC,OAFAp7B,KAAK2w+B,uBACH3w+B,KAAK2w+B,wBAA0B3w+B,KAAK2w+B,uBAAuBv18B,WACtD,OAAcp7B,KACvB,EACA,QAAe,8BAAqB,I,mJCtdpC,SAASmivC,IACPnivC,KAAKm5nB,qBAAuB,IAAI,IAChCn5nB,KAAKk5nB,gBAAkB,IAAI,IAC3Bl5nB,KAAKoivC,gBAAkB,IAAI,IAC3BpivC,KAAK2v9B,gBAAkB,IAAI,IAO3B3v9B,KAAK6v9B,WAAasyR,EAAcE,iBAAiBp3rC,QAOjDjrD,KAAK8v9B,WAAaqyR,EAAcG,iBAAiBr3rC,QAOjDjrD,KAAKuivC,iBAAmBJ,EAAcE,iBAAiBp3rC,QAOvDjrD,KAAKwivC,iBAAmBL,EAAcG,iBAAiBr3rC,QAEvD,MAAM,iBAAEo3rC,EAAgB,iBAAEC,GAAqBH,EACzCM,EAAc,CAClB,IAAI,IACF,IAAW93/B,OAAO,IAAW2kY,OAAQ,IAAI,KACzC+ynB,EAAiBh/tC,GAEnB,IAAI,IACF,IAAWsnO,OAAO,IAAW+oY,OAAQ,IAAI,KACzC2unB,EAAiB/+tC,GAEnB,IAAI,IACF,IAAWqnO,OAAO,IAAW6kY,OAAQ,IAAI,KACzC6ynB,EAAiBx/tC,GAEnB,IAAI,IAAc,IAAWysmB,QAASgznB,EAAiBj/tC,GACvD,IAAI,IAAc,IAAWqwmB,QAAS4unB,EAAiBh/tC,GACvD,IAAI,IAAc,IAAWksmB,QAAS8ynB,EAAiBz/tC,IAGzD7iB,KAAK0ivC,mBAAqB,IAAI,IAAsB,CAAElxkB,OAAQixkB,IAE9DzivC,KAAK2ivC,gBAAkB,CACrBC,WAAY,IAAI,IAChBC,uBAAwB,IAAI,IAC5BC,2BAA4B,IAAI,KAGlC9ivC,KAAK+ivC,eAAiB,CACpBC,4BAAwB79uC,GAG1BnF,KAAKijvC,kCAAoC,CAC3C,CAEA18uC,OAAOgwE,iBAAiB4rqC,EAAc1hvC,UAAW,CAS/C0snB,oBAAqB,CACnBl3mB,IAAK,WACH,OAAOjW,KAAKm5nB,oBACd,GAUF+pnB,kBAAmB,CACjBjtuC,IAAK,WACH,OAAOjW,KAAK0ivC,kBACd,GAWF3wnB,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,GAWFiqnB,eAAgB,CACdltuC,IAAK,WACH,OAAOjW,KAAKoivC,eACd,GAWF/yR,eAAgB,CACdp58B,IAAK,WACH,OAAOjW,KAAK2v9B,eACd,GASFyzR,eAAgB,CACdntuC,IAAK,WACH,OAAOjW,KAAK2ivC,eACd,GASFU,cAAe,CACbptuC,IAAK,WACH,OAAOjW,KAAK+ivC,cACd,GAUFO,iCAAkC,CAChCrtuC,IAAK,WACH,OAAOjW,KAAKijvC,iCACd,KAIJ,MAAMjjkB,EAAgB,IAAI,IACpB44D,EAAe,IAAI,IACnBikD,EAAkB,IAAI,IACtB0md,EAAuB,IAAI,IAC3BC,EAAuB,IAAI,IAsIjC,SAASC,EAAW7plC,EAAUC,GAC5B,OAAO,IAAW+5d,cAAch6d,EAAUC,EAAU,IAAWijgB,UAC3D,EACA,GAAOjjgB,EAAWD,EACxB,CA9HAuolC,EAAc1hvC,UAAU8tB,OAAS,SAC/BmwqB,EACA4wR,EACAC,EACAm0R,EACAC,GAGA,IAAM5/nB,OAAO3nlB,OAAO,cAAesiqB,GACnC,IAAM36E,OAAO3nlB,OAAO,YAAakz7B,GACjC,IAAMvrW,OAAO3nlB,OAAO,YAAamz7B,GAGjCm0R,EAAgBA,GAAiBp0R,EAAUrk6B,MAAMs4rC,GACjDI,EAAgBA,GAAiBp0R,EAAUtk6B,MAAMu4rC,GAEjDl0R,EAAY,IAAWrk6B,MAAMqk6B,EAAWtv9B,KAAK6v9B,YAC7CN,EAAY,IAAWtk6B,MAAMsk6B,EAAWvv9B,KAAK8v9B,YAE7C,MAAM8zR,EAAkB,IAAWjy/B,MACjC29tB,EACAo0R,EACAC,EACA3jvC,KAAKuivC,kBAEDsB,EAAkB,IAAWly/B,MACjC49tB,EACAm0R,EACAC,EACA3jvC,KAAKwivC,kBAODrwqC,EAAQ,IAAQyxR,SAAS86V,EAAak6C,GAC5C,GACEgrgB,EAAgBvguC,EAAIwguC,EAAgBxguC,GACpCuguC,EAAgBtguC,EAAIuguC,EAAgBvguC,GACpCsguC,EAAgB/guC,EAAIghuC,EAAgBhhuC,IACnC+guC,EAAgBvguC,IAAMwguC,EAAgBxguC,IACpCuguC,EAAgBtguC,IAAMuguC,EAAgBvguC,IACtCsguC,EAAgB/guC,IAAMghuC,EAAgBhhuC,IACvC,GACU,IAAZsvD,EAAM9uD,GACM,IAAZ8uD,EAAM7uD,GACM,IAAZ6uD,EAAMtvD,EAEN,OAAO,EAIT,MAAMqguC,EAAoBljvC,KAAK0ivC,mBAC/BQ,EAAkBjtuC,IAAI,GAAG8f,SAAW6ttC,EAAgBvguC,EACpD6/tC,EAAkBjtuC,IAAI,GAAG8f,SAAW6ttC,EAAgBtguC,EACpD4/tC,EAAkBjtuC,IAAI,GAAG8f,SAAW6ttC,EAAgB/guC,EACpDqguC,EAAkBjtuC,IAAI,GAAG8f,UAAY8ttC,EAAgBxguC,EACrD6/tC,EAAkBjtuC,IAAI,GAAG8f,UAAY8ttC,EAAgBvguC,EACrD4/tC,EAAkBjtuC,IAAI,GAAG8f,UAAY8ttC,EAAgBhhuC,EAErD7iB,KAAK2v9B,gBAAkB,IAAQ1k6B,MAAMyzoB,EAAa1+rB,KAAK2v9B,iBAEvD3v9B,KAAKm5nB,qBAAuB2qnB,EAC1BF,EACAC,EACA7jvC,KAAK2v9B,gBACL3v9B,KAAKm5nB,sBAKPn5nB,KAAKoivC,gBAAkB,IAAQ9z7B,wBAC7BtuT,KAAKm5nB,qBAAqB/L,SAC1BptnB,KAAKm5nB,qBAAqBztmB,OAC1B1rB,KAAKoivC,iBAGPpivC,KAAKk5nB,gBAAkB,IAAehM,wBACpCltnB,KAAKm5nB,qBACLn5nB,KAAKk5nB,iBAGP,MAAMkqnB,EAAiBpjvC,KAAK2ivC,gBACtBU,EAAgBrjvC,KAAK+ivC,eAG3B,IAAK,MAAM/8uC,KAAOq9uC,EACZA,EAAcp9uC,eAAeD,KAC/Bq9uC,EAAcr9uC,QAAOb,GAKzB,IAAI4+uC,EAAoB,EAExBV,EAAsC,uBAAIU,EAC1CA,GAAqB,EAGrB,MAAM3guC,EAAMks8B,EACNzv8B,EAAM0v8B,EACNszR,EAAyB,IAAWxwnB,aACxCoxnB,EAAWrguC,EAAIC,EAAGxD,EAAIwD,GACtBoguC,EAAWrguC,EAAIE,EAAGzD,EAAIyD,GACtBmguC,EAAWrguC,EAAIP,EAAGhD,EAAIgD,GACtBuguC,EAAeP,wBAajB,OAXAO,EAAeN,2BAA6B,IAAWn4/B,OACrD,IAAWooY,mBACT8vnB,EACAz/tC,EACAgguC,EAAeN,4BAEjBM,EAAeN,4BAGjB9ivC,KAAKijvC,kCAAoCc,GAElC,CACT,EAQA,MAAMC,EAAuC,IAAI,IAMjD7B,EAAc1hvC,UAAUwjvC,qBAAuB,SAAU9mhB,GACvD,MAAMimhB,EAAiBpjvC,KAAK2ivC,gBACtBuB,EAAgC,IAAQn5lC,QAC5C/qJ,KAAK2v9B,gBACLq0R,GAEIG,EAAiC,IAAQrhjB,WAC7CohjB,EACAd,EAAeR,YAEXwB,EAAoBjnhB,EAAWvmtB,QAAQwl3B,aAAa2B,oBAC1D,IAAQpr2B,SACNwxtC,EACAC,EACAhB,EAAeR,WAEnB,EASAT,EAAc1hvC,UAAU4jvC,2BAA6B,SACnD9mR,EACAvk8B,GAGA,IAAM+qlB,OAAO3nlB,OAAO,gBAAiBmh8B,GACrC,IAAMx5W,OAAO3nlB,OAAO,SAAUpD,GAG9B,MAAM,uBAAE6ptC,EAAsB,2BAAEC,GAC9B9ivC,KAAK2ivC,gBAEP,OAAO,IAAWzptC,IAChB,IAAW65lB,mBACTwqW,EACAslR,EACA7ptC,GAEF8ptC,EACA9ptC,EAEJ,EAEA,MAAMsrtC,EAAuB,IAAI,IAC3BC,EAAuB,IAAI,IAYjCpC,EAAc1hvC,UAAU8utC,kCAAoC,SAC1D98P,EACAC,EACAC,EACAC,EACA557B,GAGA,IAAM+qlB,OAAO1umB,OAAO,YAAao98B,GACjC,IAAM1uW,OAAO1umB,OAAO,QAASq98B,GAC7B,IAAM3uW,OAAO1umB,OAAO,QAASs98B,GAC7B,IAAM5uW,OAAO1umB,OAAO,QAASu98B,GAC7B,IAAM7uW,OAAO3nlB,OAAO,SAAUpD,GAG9B,MAAMs27B,EAAYtv9B,KAAK6v9B,WACjBN,EAAYvv9B,KAAK8v9B,WACjB7kM,EAAc,EAAMl9wB,KAAKiV,IAAI,EAAGyv8B,GAgBtC,OAAOqxR,EAde,IAAWzxnB,aAC/B,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,EAAG4nwB,EAAcynM,GACxD,IAAWrqrB,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,EAAG2nwB,EAAc0nM,GACxD,IAAWtqrB,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,EAAGoowB,EAAc2nM,GACxD0xR,GAGoB,IAAWjynB,aAC/B,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,EAAG4nwB,GAAeynM,EAAQ,IACjE,IAAWrqrB,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,EAAG2nwB,GAAe0nM,EAAQ,IACjE,IAAWtqrB,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,EAAGoowB,GAAe2nM,EAAQ,IACjE2xR,GAMAvkvC,KAAK2v9B,gBACL327B,EAEJ,EAEA,MAAMwrtC,EAAoB,IAAI,IAW9BrC,EAAc1hvC,UAAUgkvC,oCAAsC,SAC5Dx9J,EACAiR,EACAwsJ,EACA1rtC,GAGA,IAAM+qlB,OAAO3nlB,OAAO,cAAe6qjC,GACnC,IAAMlje,OAAO3nlB,OAAO,iBAAkB87jC,GACtC,IAAMn0e,OAAO3nlB,OAAO,SAAUsotC,GAC9B,IAAM3goB,OAAO3nlB,OAAO,SAAUpD,GAG9B,MAAM2rtC,EAAkB,EAAM52uC,KAAKiV,IAAI,EAAGikkC,EAAY/p9B,OAChDizH,EAAa,IAAW6iY,iBAC5B,IAAWloB,IACXotf,EACAssJ,GAEII,EAAoB,IAAWt9nB,iBACnCn3X,EACAw0/B,EACAH,GAGIK,EAAU,IAAWv9nB,iBACzB,IAAW+K,aACT40d,EAAY5jkC,EAAIqhuC,EAAOrhuC,EACvB4jkC,EAAY3jkC,EAAIohuC,EAAOphuC,EACvB2jkC,EAAYpkkC,EAAI6huC,EAAO7huC,EACvByhuC,GAEFK,EACAL,GAEIQ,EAAU,IAAW5rtC,IACzB2rtC,EACAD,EACAL,GAGIj1R,EAAYtv9B,KAAK6v9B,WACjBN,EAAYvv9B,KAAK8v9B,WAcvB,OAAOg0R,EAbiB,IAAWzxnB,aACjC,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,EAAGwhuC,EAAQxhuC,GAClD,IAAWglR,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,EAAGuhuC,EAAQvhuC,GAClD,IAAW+kR,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,EAAGgiuC,EAAQhiuC,GAClDyhuC,GAEsB,IAAWjynB,aACjC,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,EAAGyhuC,EAAQzhuC,GAClD,IAAWglR,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,EAAGwhuC,EAAQxhuC,GAClD,IAAW+kR,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,EAAGiiuC,EAAQjiuC,GAClD0huC,GAMAvkvC,KAAK2v9B,gBACL327B,EAEJ,EASAmptC,EAAcE,iBAAmB97uC,OAAOivmB,OACtC,IAAI,KAAY,GAAM,GAAM,IAU9B2soB,EAAcG,iBAAmB/7uC,OAAOivmB,OACtC,IAAI,IAAW,EAAM,EAAM,IAG7B,MAAMuvoB,EAAkB,IAAI,IAc5B,SAASjB,EAAekB,EAAeC,EAAejx+B,EAAQh7O,GAC5D,MAAMkstC,EAAmB/C,EAAcE,iBACjC8C,EAAmBhD,EAAcG,iBAMvC,GAHE,IAAWrzoC,OAAO+1oC,EAAeE,IACjC,IAAWj2oC,OAAOg2oC,EAAeE,GAGjCnstC,EAAOtN,OAAS,IAAQ8hmB,eAAex5W,EAAQh7O,EAAOtN,QACtDsN,EAAOo0lB,SAAW,IAAQ01E,WAAW9ub,EAAQh7O,EAAOo0lB,cAC/C,CACL,IAAIj7iB,EAAQ,IAAQyxR,SAAS5vF,EAAQ+w+B,GACrC,MAAMK,EAAc,IAAW7poB,SAC7BypoB,EACAC,EACAjlkB,GAEFhnpB,EAAOtN,OAAS,IAAQ0imB,gBAAgBp6W,EAAQox+B,EAAapstC,EAAOtN,QACpEymD,EAAQ,IAAWkgjB,aACP,GAAVlgjB,EAAM9uD,GAAW4huC,EAAc5huC,EAAI2huC,EAAc3huC,GACvC,GAAV8uD,EAAM7uD,GAAW2huC,EAAc3huC,EAAI0huC,EAAc1huC,GACvC,GAAV6uD,EAAMtvD,GAAWoiuC,EAAcpiuC,EAAImiuC,EAAcniuC,GACjDkiuC,GAEF,MAAM99sB,EAAW,IAAQ0gM,YAAY3zd,EAAQ6ohB,GAC7C7jwB,EAAOo0lB,SAAW,IAAQ3jS,SAASw9M,EAAU90d,EAAOn5C,EAAOo0lB,SAC7D,CAEA,OAAOp0lB,CACT,CAEA,QAAe,8BAAa,I,wGC5iB5B,SAASqstC,EAAUtmpC,EAAW0k7B,EAAWtwT,GACvCnztB,KAAKkj1B,WAAankvB,EAClB/+F,KAAKslvC,WAAa7hO,EAClBzjhC,KAAKulvC,aAAepyhB,EACpBnztB,KAAK4ysB,UAAY,CAAC,EAClB5ysB,KAAKm5nB,qBAAuB,IAAI,GAClC,CAeAksnB,EAAUnhD,iBAAmB,SAC3BnlmC,EACA0k7B,EACAtwT,EACA4we,GAGA,IAAMhglB,OAAO3nlB,OAAO,YAAa2iE,GACjC,IAAMglhB,OAAO1umB,OAAO,YAAaougC,GACjC,IAAM1/Z,OAAO1umB,OAAO,cAAe89sB,GACnC,IAAMpvG,OAAO3nlB,OAAO,eAAgB2nqC,GAGpC,MAAMyhD,EAAY,IAAIH,EAAUtmpC,EAAW0k7B,EAAWtwT,IAChD,YAAE8zX,EAAW,QAAElqiC,GAAYgnpC,EAQjC,OAPAyhD,EAAU5yiB,UAiBZ,SAA8B7zmB,EAAWhiD,EAASo2qB,GAChD,KAAK,OAAQp2qB,MAAa,OAAQA,EAAQsikB,UACxC,OAEF,MAAM,MAAEp5iB,EAAK,MAAEgC,GAAU82B,EAAU2/gB,UAC7B,SAAEW,GAAatikB,EACf0osC,EAAc,CAAC,EACrB,IAAK,IAAIxgvC,EAAI,EAAGA,EAAIghE,EAAMhjE,OAAQgC,IAAK,CACrC,MAAMG,EAAO6gE,EAAMhhE,GACbq76B,EAAiB,IAAakxC,kBAAkBvp5B,EAAMhjE,IACtD2qS,EAAUyvU,EAASp6mB,GAAGwE,MAC1B0ptB,EAAcmtN,GACbntN,EAAc,GAAKmtN,GAEtBmlU,EAAYrgvC,GAAQwqS,CACtB,CACA,OAAO618B,CACT,CAlCwBC,CAAqB3mpC,EAAWhiD,EAASo2qB,GAC/DqyhB,EAAUrsnB,qBA6CZ,SAAgCp6hB,EAAWko/B,EAAa9zX,EAAan6rB,GAGnE,MAAM2stC,EAAmB1+J,EAAYz6gC,WAC/Bo5qC,EAAYD,EAAiBtiuC,EAAIsiuC,EAAiBriuC,EAClDmrJ,EAAS1gK,KAAKG,MAAMiltB,EAAcyyhB,GAClCC,EAAe1yhB,EAAc1kjB,EAASm3kC,EACtCE,EAAS/3uC,KAAKG,MAAM23uC,EAAeF,EAAiBtiuC,GACpD0iuC,EAASF,EAAeC,EAASH,EAAiBtiuC,EAClD2iuC,EAAiB,IAAW3znB,aAChC0znB,EACAD,EACAr3kC,EACAw3kC,GAKIvB,EAAS,IAAW1xnB,iBACxB,IAAW15jB,SACT0srC,EACAjnpC,EAAUgx3B,eACVk2R,GAEFlnpC,EAAUvyB,WACV05qC,GAIF,OADcnnpC,EAAU27pB,OACX+pf,oCACXx9J,EACAlo/B,EAAUvyB,WACVk4qC,EACA1rtC,EAEJ,CAhFmCmttC,CAC/BpnpC,EACAko/B,EACA9zX,EACAqyhB,EAAUrsnB,sBAELqsnB,CACT,EA4BA,MAAMS,EAAwB,IAAI,IAC5BC,EAAgB,IAAI,IA8C1B3/uC,OAAOgwE,iBAAiB8uqC,EAAU5kvC,UAAW,CAW3C4+mB,SAAU,CACRppmB,IAAK,WACH,OAAOjW,KAAK4ysB,SACd,GAaF7zmB,UAAW,CACT9oF,IAAK,WACH,OAAOjW,KAAKkj1B,UACd,GAYF/vH,YAAa,CACXl9sB,IAAK,WACH,OAAOjW,KAAKulvC,YACd,GAYF9hO,UAAW,CACTxtgC,IAAK,WACH,OAAOjW,KAAKslvC,UACd,GAYFn4nB,oBAAqB,CACnBl3mB,IAAK,WACH,OAAOjW,KAAKm5nB,qBAAqBlukB,OACnC,KAUJo6rC,EAAU5kvC,UAAUw50B,YAAc,SAAU700B,GAC1C,OAAO,OAAQpF,KAAK4ysB,UAAUxtsB,GAChC,EAOAigvC,EAAU5kvC,UAAU2lvC,SAAW,WAC7B,OAAO7/uC,OAAOC,KAAKxG,KAAK4ysB,UAC1B,EAgBAyyiB,EAAU5kvC,UAAUw/6B,YAAc,SAAU766B,GAC1C,OAAOpF,KAAK4ysB,UAAUxtsB,EACxB,EAEA,QAAe,8BAAS,I,wICtPxB,SAASihvC,EAAatmvC,GAGpB,GADA,IAAMgknB,OAAO3nlB,OAAO,UAAWr8B,KAC1B,OAAQA,EAAQguD,QAAS,CAC5B,KAAK,OAAQhuD,EAAQs/mB,UACnB,MAAM,IAAI,IAAe,+CAE3B,IAAK7+mB,MAAMK,QAAQd,EAAQs/mB,UACzB,MAAM,IAAI,IAAe,4CAE7B,CAGA,MAAM,OAAEtxjB,EAAM,SAAEsxjB,GAAat/mB,EAE7BC,KAAK2oM,QAAU56I,EACf/tD,KAAK4ysB,UAAYvzF,EACjBr/mB,KAAKgkgC,kBAAmB,EACxBhkgC,KAAKyh1B,QAAS,CAChB,CAEAl70B,OAAOgwE,iBAAiB8vqC,EAAa5lvC,UAAW,CAU9C2/I,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,GAUFpiO,SAAU,CACRppmB,IAAK,WACH,OAAOjW,KAAK4ysB,SACd,KAUJyziB,EAAaC,kBAAoB,SAAUjnoB,GAGzC,GADA,IAAM0E,OAAO3nlB,OAAO,WAAYijlB,IAC3B7+mB,MAAMK,QAAQw+mB,GACjB,MAAM,IAAI,IAAe,6CAI3B,OAAO,IAAIgnoB,EAAa,CAAEhnoB,YAC5B,EAUAgnoB,EAAa7+R,SAAW/q4B,eAAgBklhB,GAEtC,IAAMoiB,OAAO3nlB,OAAO,WAAYulkB,GAIhC,MAAM5ziB,EAAS,IAAI,IAAW,CAC5BmnlB,aAAcvzC,EACdgia,iBAAiB,EACjB2+B,4BAA4B,IAG9B,UAIQv0+B,EAAOxtD,MACf,CAAE,MAAOiT,GAEP,MADAu6C,EAAO3yB,UACD5nB,CACR,CAEA,OAAO,IAAI6yuC,EAAa,CAAEt4rC,UAC5B,EAOAs4rC,EAAa5lvC,UAAU8tB,OAAS,SAAUwwE,EAAWo+nB,GACnD,MAAMpvqB,EAAS/tD,KAAK2oM,QAEpB,IAAI3oM,KAAKyh1B,OAQT,GAFAtkH,EAAW1kjB,YAAY7zK,KAAK,KAAM,IAE7B,OAAQmpD,GAAb,CAKA,GAAI/tD,KAAKgkgC,iBAAkB,CACzB,MAAM,mBAAEkhC,EAAkB,MAAEpptB,GAAU/tR,EAAOszqB,YACvC,WAAE97tB,GAAeu2U,EAAM5zK,MAAM,GAAG45d,WAAW,GAOjD,OANA9hoB,KAAK4ysB,UAqBT,SAA2BrtsB,EAAY2/hC,EAAoBnm8B,GACzD,MAAM,UAAEvwF,EAAS,MAAEy3D,EAAK,MAAEgC,EAAK,eAAEgn5B,GAAmBlw3B,EAAU2/gB,SACxDm1gB,EAAoB3uF,EAAmBj0B,mBAAmBxvgC,KAC7Dm6C,GAAMA,EAAEmyI,MAAMtlL,KAAO+F,IAElB,WAAE66D,GAAewqjC,EACjBvynC,EAAO,IAAId,MAAMylE,EAAMhjE,QAE7B,IAAK,IAAIgC,EAAI,EAAGA,EAAIM,EAAWtC,OAAQgC,IAAK,CAE1C,MAAMG,EAAOikE,EAAWpD,EAAMhhE,IAAIgiB,UAC5BA,EAAY1hB,EAAW9D,KAAM0c,GAAMA,EAAE/Y,OAASA,GACpD,KAAK,OAAQ6hB,GACX,SAGF,MAAMy+lB,EAAoB,IAAsBu5e,oBAC9ChwI,EAAehq9B,IAEXq76B,EAAiB,IAAakxC,kBAAkBvp5B,EAAMhjE,IACtDshvC,EAAat/tC,EAAU8lD,MAAQuz2B,EACrCh/6B,EAAK2D,GAAK,IAAkByo6B,sBAC1BhoT,EACAz+lB,EAAUs5N,WAAWxpK,OACrB9vD,EAAUs5N,WAAW1sI,WAAa5sF,EAAU4sF,WAC5C0yoC,EAEJ,CAEA,OAAOjlvC,CACT,CAnDqB+jI,CACf9/H,EACA2/hC,EACAnm8B,QAEF/+F,KAAKyh1B,QAAS,EAEhB,CAEAzh1B,KAAKgkgC,iBAAmBj28B,EAAO+pD,QAAQqlnB,EAdvC,MAFEn9tB,KAAKyh1B,QAAS,CAiBlB,EAuDA4ka,EAAa5lvC,UAAU05B,YAAc,WACnC,OAAO,CACT,EAMAkstC,EAAa5lvC,UAAU26B,QAAU,WAE/B,OADAp7B,KAAK2oM,QAAU3oM,KAAK2oM,SAAW3oM,KAAK2oM,QAAQvtK,WACrC,OAAcp7B,KACvB,EAEA,QAAe,8BAAY,I,0KC7M3B,SAASwmvC,IACPxmvC,KAAKm5nB,qBAAuB,IAAI,IAChCn5nB,KAAKk5nB,gBAAkB,IAAI,IAC3Bl5nB,KAAKoivC,gBAAkB,IAAI,IAC3BpivC,KAAK2v9B,gBAAkB,IAAI,IAO3B3v9B,KAAK6v9B,WAAa22R,EAAmBnE,iBAAiBp3rC,QAOtDjrD,KAAK8v9B,WAAa02R,EAAmBlE,iBAAiBr3rC,QAEtD,MAAM,iBAAEo3rC,EAAgB,iBAAEC,GAAqBkE,EACzC/D,EAAc,CAClB,IAAI,IACF,IAAW93/B,OAAO,IAAW6kY,OAAQ,IAAI,KACzC6ynB,EAAiBx/tC,GAEnB,IAAI,IAAc,IAAW2smB,QAAS8ynB,EAAiBz/tC,IAGzD7iB,KAAK0ivC,mBAAqB,IAAI,IAAsB,CAAElxkB,OAAQixkB,IAE9DzivC,KAAK2ivC,gBAAkB,CACrB8D,oBAAqB,IAAI,IACzBC,4BAA6B,IAAI,IACjCC,2BAA4B,IAAI,IAChCC,0BAA2B,IAAI,IAC/BC,6BAA8B,IAAI,IAClCC,4BAA6B,IAAI,IACjCC,6BAA8B,IAAI,IAClCC,gCAAiC,GAGnChnvC,KAAK+ivC,eAAiB,CACpBkE,qCAAiC9hvC,EACjC+hvC,2CAAuC/hvC,EACvCgivC,4CAAwChivC,EACxCiivC,sCAAkCjivC,EAClCkivC,uDAAmDlivC,EACnDmivC,uDAAmDnivC,EACnDoivC,sDAAkDpivC,EAClDqivC,4CAAwCrivC,EACxCsivC,4CAAwCtivC,EACxCuivC,uCAAmCvivC,GAGrCnF,KAAKijvC,kCAAoC,CAC3C,CAEA18uC,OAAOgwE,iBAAiBiwqC,EAAmB/lvC,UAAW,CASpD0snB,oBAAqB,CACnBl3mB,IAAK,WACH,OAAOjW,KAAKm5nB,oBACd,GAUF+pnB,kBAAmB,CACjBjtuC,IAAK,WACH,OAAOjW,KAAK0ivC,kBACd,GAWF3wnB,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,GAWFiqnB,eAAgB,CACdltuC,IAAK,WACH,OAAOjW,KAAKoivC,eACd,GAWF/yR,eAAgB,CACdp58B,IAAK,WACH,OAAOjW,KAAK2v9B,eACd,GASFyzR,eAAgB,CACdntuC,IAAK,WACH,OAAOjW,KAAK2ivC,eACd,GASFU,cAAe,CACbptuC,IAAK,WACH,OAAOjW,KAAK+ivC,cACd,GAUFO,iCAAkC,CAChCrtuC,IAAK,WACH,OAAOjW,KAAKijvC,iCACd,KAIJ,MAAMrqgB,EAAe,IAAI,IACnB2qgB,EAAuB,IAAI,IAC3BC,EAAuB,IAAI,IAC3BmE,EAAyB,IAAI,IAC7BC,EAAyB,IAAI,IAC7B5D,EAAuC,IAAI,IAC3C6D,EAA6B,IAAI,IACjCC,EAA8B,IAAI,IAYxCtB,EAAmB/lvC,UAAU8tB,OAAS,SACpCmwqB,EACA4wR,EACAC,EACAm0R,EACAC,GAGA,IAAM5/nB,OAAO3nlB,OAAO,cAAesiqB,GACnC,IAAM36E,OAAO3nlB,OAAO,YAAakz7B,GACjC,IAAMvrW,OAAO3nlB,OAAO,YAAamz7B,GAGjCm0R,EAAgBA,GAAiBp0R,EAAUrk6B,MAAMs4rC,GACjDI,EAAgBA,GAAiBp0R,EAAUtk6B,MAAMu4rC,GAEjDl0R,EAAY,IAAWrk6B,MAAMqk6B,EAAWtv9B,KAAK6v9B,YAC7CN,EAAY,IAAWtk6B,MAAMsk6B,EAAWvv9B,KAAK8v9B,YAE7C,MAAM,iBAAEuyR,EAAgB,iBAAEC,GAAqBkE,EACzCuB,EAAoBzF,EAAiBh/tC,EAAI++tC,EAAiB/+tC,EAC1D0kuC,EAAwB,GAAMD,EAE9BE,EAAmB,IAAW55jB,UAC9B65jB,EAAe,IAAW75jB,UAGhCihS,EAAUjs8B,EAAItV,KAAK8R,IAAI,EAAKyv8B,EAAUjs8B,GAEtCks8B,EAAUls8B,EAAItV,KAAK8R,IAAI,EAAK0v8B,EAAUls8B,GACtCis8B,EAAUhs8B,EAAI,IAAW8pqB,eAAekiS,EAAUhs8B,GAClDis8B,EAAUjs8B,EAAI,IAAW8pqB,eAAemiS,EAAUjs8B,GAElDoguC,EAAcpguC,EAAI,IAAW8pqB,eAAes2jB,EAAcpguC,GAC1DqguC,EAAcrguC,EAAI,IAAW8pqB,eAAeu2jB,EAAcrguC,GAM1D,MAAMsguC,EAAkB,IAAWhxnB,mBACjC08V,EACAo0R,EACAiE,GAEI9D,EAAkB,IAAWlxnB,mBACjC48V,EACAo0R,EACAiE,GAWIz1qC,EAAQ,IAAQyxR,SAAS86V,EAAak6C,GAC5C,GACwB,IAAtBirgB,EAAgBxguC,GAChBuguC,EAAgBvguC,EAAIwguC,EAAgBxguC,GACpCuguC,EAAgB/guC,EAAIghuC,EAAgBhhuC,GACpC,IAAW+wmB,cAAczhjB,EAAM9uD,EAAG,OAAKle,EAAW8ivC,IAClD,IAAWr0nB,cAAczhjB,EAAM7uD,EAAG,OAAKne,EAAW8ivC,IAClD,IAAWr0nB,cAAczhjB,EAAMtvD,EAAG,OAAK1d,EAAW8ivC,GAElD,OAAO,EAIT,MAAM/E,EAAoBljvC,KAAK0ivC,mBAC/BQ,EAAkBjtuC,IAAI,GAAG8f,SAAW6ttC,EAAgB/guC,EACpDqguC,EAAkBjtuC,IAAI,GAAG8f,UAAY8ttC,EAAgBhhuC,EAErD7iB,KAAK2v9B,gBAAkB,IAAQ1k6B,MAAMyzoB,EAAa1+rB,KAAK2v9B,iBAEvD3v9B,KAAKm5nB,qBAAuBgvnB,EAC1BvE,EACAC,EACA7jvC,KAAK2v9B,gBACL3v9B,KAAKm5nB,sBAGPn5nB,KAAKoivC,gBAAkB,IAAQ9z7B,wBAC7BtuT,KAAKm5nB,qBAAqB/L,SAC1BptnB,KAAKm5nB,qBAAqBztmB,OAC1B1rB,KAAKoivC,iBAGPpivC,KAAKk5nB,gBAAkB,IAAehM,wBACpCltnB,KAAKm5nB,qBACLn5nB,KAAKk5nB,iBAGP,MAAMkvnB,EAAuB74R,EAAUjs8B,EAAIgs8B,EAAUhs8B,EAC/C+kuC,EACJ94R,EAAUjs8B,EAAIgs8B,EAAUhs8B,EAAI8kuC,EAAuBL,EAE/CO,EAAwBzE,EAAgBvguC,EAAIsguC,EAAgBtguC,EAC5DiluC,EACJ1E,EAAgBvguC,EAChBsguC,EAAgBtguC,EAChBgluC,EAAwBP,EACpBS,EACJD,GAAoBP,EAAwBE,GAC5CK,EAAmBR,EAAoBG,EACnCO,EACJF,EAAmBL,GACnBK,EAAmBP,EAAwBE,EACvCQ,EAAyBH,GAAoBL,EAC7CS,EACJH,GAAwBC,GAAwBC,EAE5CtF,EAAiBpjvC,KAAK2ivC,gBACtBU,EAAgBrjvC,KAAK+ivC,eAG3B,IAAK,MAAM/8uC,KAAOq9uC,EACZA,EAAcp9uC,eAAeD,KAC/Bq9uC,EAAcr9uC,QAAOb,GAKzB,IAAI4+uC,EAAoB,EAExBV,EAAsD,uCAAIU,EAC1DA,GAAqB,EAEjBsE,EAAkBN,EAAoBG,IACxC7E,EAA+C,iCAAI,GAGjDO,EAAgBvguC,IAAMg/tC,EAAiBh/tC,IACzCgguC,EAAqD,uCAAI,EACzDA,EAAsD,uCAAIU,EAC1DA,GAAqB,GAEvBX,EAAeuD,2BAA6B,IAAWt0nB,aACrDuxnB,EAAgBvguC,EAChBwguC,EAAgBxguC,EAChB+/tC,EAAeuD,4BAGb/C,EAAgBvguC,IAAMwguC,EAAgBxguC,IACxCgguC,EAAsD,wCAAI,GAG5D,MAAMuF,EAAcr5R,EAAUls8B,EAAIis8B,EAAUjs8B,EAC5C,IAAIwluC,EAAc,EACdC,EAAe,EACC,IAAhBF,IACFC,EAAc,EAAMD,EACpBE,GAAgBx5R,EAAUjs8B,EAAIwluC,GAEhCzF,EAAeyD,6BAA+B,IAAWx0nB,aACvDw2nB,EACAC,EACA1F,EAAeyD,8BAGjB,MAAMh+d,EAAc0mM,EAAU1s8B,EAAIys8B,EAAUzs8B,EAC5C,IAAIy3nB,EAAc,EACdC,EAAe,EACC,IAAhBsuI,IACFvuI,EAAc,EAAMuuI,EACpBtuI,GAAgB+0U,EAAUzs8B,EAAIy3nB,GAEhC8omB,EAAe2D,6BAA+B,IAAW10nB,aACvDioB,EACAC,EACA6omB,EAAe2D,8BAGb4B,IACFtF,EAAgD,kCAAI,EACpDA,EAAiD,kCAAIU,EAEjDyE,GACFnF,EAAiE,mDAAI,EACrEU,GAAqB,GACZ0E,GACTpF,EAAgE,kDAAI,EACpEU,GAAqB,GACZ2E,IACTrF,EAAiE,mDAAI,EACrEU,GAAqB,GAGvBX,EAAewD,0BAA4B,IAAWv0nB,aACpDuxnB,EAAgBtguC,EAChBuguC,EAAgBvguC,EAChB8/tC,EAAewD,4BAInB,MAAMmC,GAAcz5R,EAAUhs8B,EAAI++tC,EAAiB/+tC,GAAKykuC,EAKlDiB,IAJcz5R,EAAUjs8B,EAAI++tC,EAAiB/+tC,GAAKykuC,EAIf,IAHhB,EAAMM,EAAkBN,IAGkB,EAGnE,GAFA3E,EAAe4D,gCAAkCgC,EAE7CX,GAAmBH,EACrB9E,EAAe0D,4BAA8B,IAAWz0nB,aACtD,EACA,EACA+wnB,EAAe0D,iCAEZ,CACL,MAAM30qC,EAAQ41qC,EAAoBM,EAC5BY,EAAkBF,EAAaC,EAC/BjnvC,GAAUowE,GAAS82qC,EAAkBl7uC,KAAKG,MAAM+6uC,IACtD7F,EAAe0D,4BAA8B,IAAWz0nB,aACtDlgjB,EACApwE,EACAqhvC,EAAe0D,4BAEnB,CAIA,OAFA9mvC,KAAKijvC,kCAAoCc,GAElC,CACT,EAEA,MAAMmF,EAA0B,IAAI,IAC9BC,EAAqB,IAAI,IACzBC,EAAsC,IAAI,IAOhD5C,EAAmB/lvC,UAAUwjvC,qBAAuB,SAAU9mhB,GAC5D,MAAMimhB,EAAiBpjvC,KAAK2ivC,gBAEtBuB,EAAgC,IAAQn5lC,QAC5C/qJ,KAAK2v9B,gBACLq0R,GAEIqF,EAAsB,IAAQj7nB,gBAClC81nB,EACA/mhB,EAAW7zV,OAAOumd,WAClBg4Z,GAEFzE,EAAeqD,oBAAsB,IAAWp0nB,aAC9C,IAAWjH,UAAUi+nB,GACrBt7uC,KAAKyzP,MAAM6n/B,EAAoB/luC,EAAG+luC,EAAoBhmuC,GACtDgmuC,EAAoBxmuC,EACpBuguC,EAAeqD,qBAGjB,MAAM6C,EAAwB,IAAW9xoC,UACvC,IAAWu8gB,eAAes1nB,EAAqBvB,GAC/CA,GAGIyB,EAAmB,IAAQ9ihB,kBAC/B,CACE6ihB,EAAsBjmuC,EACtBimuC,EAAsBhmuC,EACtB,GACCgmuC,EAAsBhmuC,EACvBgmuC,EAAsBjmuC,EACtB,EACA,EACA,EACA,GAEF6luC,GAGIM,EACJrshB,EAAWvmtB,QAAQwl3B,aAAapjM,YAC5BywjB,EAA+B,IAAQx7gB,uBAC3Ci2gB,EACAsF,EACAJ,GAEIM,EAAgC,IAAQ5mjB,WAC5C2mjB,EACAN,GAGF/F,EAAesD,4BAA8B,IAAQ/ztC,SACnD42tC,EACAG,EACAtG,EAAesD,4BAEnB,EASAF,EAAmB/lvC,UAAU4jvC,2BAA6B,SACxD9mR,EACAvk8B,GAGA,IAAM+qlB,OAAO3nlB,OAAO,gBAAiBmh8B,GACrC,IAAMx5W,OAAO3nlB,OAAO,SAAUpD,GAG9B,IAAIlX,EAAS/T,KAAKyrkB,MAAM+jZ,EAAcl68B,EAAGk68B,EAAcj68B,GACnDgsP,EAAQvhQ,KAAKyzP,MAAM+7tB,EAAcj68B,EAAGi68B,EAAcl68B,GAClDvhB,EAASy79B,EAAc168B,EAE3B,MAAM,6BACJgkuC,EAA4B,4BAC5BC,EAA2B,gCAC3BE,EAA+B,6BAC/BD,GACE/mvC,KAAK2ivC,gBAeT,OAbA7guC,EACEA,EAAS+kuC,EAA6BxjuC,EAAIwjuC,EAA6BvjuC,EAGzEgsP,GAASA,EAAQvhQ,KAAK43F,KAAO,EAAM53F,KAAK43F,IACxC2pK,GAAS03+B,EACT13+B,GAAgBvhQ,KAAKG,MAAMohQ,GAE3BA,EAAQA,EAAQw3+B,EAA4BzjuC,EAAIyjuC,EAA4BxjuC,EAE5ExhB,EACEA,EAASilvC,EAA6B1juC,EAAI0juC,EAA6BzjuC,EAElE,IAAW+umB,aAAavwmB,EAAQwtP,EAAOxtQ,EAAQk3B,EACxD,EAEA,MAAM2wtC,EAAmB,IAAI,IACvBC,EAAmB,IAAI,IAY7BpD,EAAmB/lvC,UAAU8utC,kCAAoC,SAC/D98P,EACAC,EACAC,EACAC,EACA557B,GAGA,IAAM+qlB,OAAO1umB,OAAO,YAAao98B,GACjC,IAAM1uW,OAAO1umB,OAAO,QAASq98B,GAC7B,IAAM3uW,OAAO1umB,OAAO,QAASs98B,GAC7B,IAAM5uW,OAAO1umB,OAAO,QAASu98B,GAC7B,IAAM7uW,OAAO3nlB,OAAO,SAAUpD,GAG9B,MAAMs27B,EAAYtv9B,KAAK6v9B,WACjBN,EAAYvv9B,KAAK8v9B,WAEjB7kM,EAAc,EAAMl9wB,KAAKiV,IAAI,EAAKyv8B,GAexC,OAAO01R,EAbe,IAAW91nB,aAC/B,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,EAAGqv8B,EAAQznM,GAClD,IAAW5if,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,EAAGqv8B,EAAQ1nM,GAClD,IAAW5if,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,EAAG+v8B,EAAQ3nM,GAClD0+d,GAEoB,IAAWt3nB,aAC/B,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,GAAIqv8B,EAAQ,GAAKznM,GACxD,IAAW5if,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,GAAIqv8B,EAAQ,GAAK1nM,GACxD,IAAW5if,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,GAAI+v8B,EAAQ,GAAK3nM,GACxD2+d,GAMA5pvC,KAAK2v9B,gBACL327B,EAEJ,EAEA,MAAMwrtC,EAAoB,IAAI,IAW9BgC,EAAmB/lvC,UAAUgkvC,oCAAsC,SACjEx9J,EACAiR,EACAwsJ,EACA1rtC,GAGA,IAAM+qlB,OAAO3nlB,OAAO,cAAe6qjC,GACnC,IAAMlje,OAAO3nlB,OAAO,iBAAkB87jC,GACtC,IAAMn0e,OAAO3nlB,OAAO,SAAUsotC,GAC9B,IAAM3goB,OAAO3nlB,OAAO,SAAUpD,GAG9B,MAAM2rtC,EAAkB,EAAM52uC,KAAKiV,IAAI,EAAKikkC,EAAY/p9B,OAClDizH,EAAa,IAAW6iY,iBAC5B,IAAWloB,IACXotf,EACAssJ,GAEII,EAAoB,IAAWt9nB,iBACnCn3X,EACAw0/B,EACAH,GAGIK,EAAU,IAAWv9nB,iBACzB,IAAW+K,aACT40d,EAAY5jkC,EAAIqhuC,EAAOrhuC,EACvB4jkC,EAAY3jkC,EAAIohuC,EAAOphuC,EACvB2jkC,EAAYpkkC,EAAI6huC,EAAO7huC,EACvB8muC,GAEFhF,EACAgF,GAEI7E,EAAU,IAAW5rtC,IAAI2rtC,EAASD,EAAmBgF,GAErDt6R,EAAYtv9B,KAAK6v9B,WACjBN,EAAYvv9B,KAAK8v9B,WAevB,OAAOq4R,EAbiB,IAAW91nB,aACjC,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,EAAGwhuC,EAAQxhuC,GAClD,IAAWglR,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,EAAGuhuC,EAAQvhuC,GAClD,IAAW+kR,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,EAAGgiuC,EAAQhiuC,GAClD8muC,GAEsB,IAAWt3nB,aACjC,IAAWhqV,KAAKinrB,EAAUjs8B,EAAGks8B,EAAUls8B,EAAGyhuC,EAAQzhuC,GAClD,IAAWglR,KAAKinrB,EAAUhs8B,EAAGis8B,EAAUjs8B,EAAGwhuC,EAAQxhuC,GAClD,IAAW+kR,KAAKinrB,EAAUzs8B,EAAG0s8B,EAAU1s8B,EAAGiiuC,EAAQjiuC,GAClD+muC,GAMA5pvC,KAAK2v9B,gBACL327B,EAEJ,EAWAwttC,EAAmBnE,iBAAmB97uC,OAAOivmB,OAC3C,IAAI,IAAW,GAAM,IAAW7vgB,IAAK,IAYvC6gpC,EAAmBlE,iBAAmB/7uC,OAAOivmB,OAC3C,IAAI,IAAW,GAAM,IAAW7vgB,GAAI,IAGtC,MACMkkpC,EAAoB,IAAIrpvC,MADR,GAEhB0i3B,EAAqB,IAAI,IACzBrmF,EAAkB,IAAI,IACtBitd,EAA2B,IAAI,IAC/B/xjB,EAAwB,IAAI,IAC5BgyjB,EAAqB,IAAI,IACzBrtS,EAAgB,IAAI,IACpBstS,EAAiB,IAAI,IACrBC,EAAiB,IAAI,IACrBC,EAAiB,IAAI,IACrB1woB,EAAiB,IAAIh5mB,MAAM,GACjC,IAAK,IAAIyE,EAAI,EAAGA,EAAI,EAAGA,IACrBu0mB,EAAev0mB,GAAK,IAAI,IAG1B,SAASklvC,EAAWhsuC,EAAGC,EAAG4rY,GACxB,OAAOj8Y,KAAK0a,IAAI,IAAW4mS,IAAIlxS,EAAGC,IAAM4rY,CAC1C,CAiCA,MAAM+61B,EAAkB,IAAI,IAc5B,SAASoD,EAAoBiC,EAAgBC,EAAgBr2+B,EAAQh7O,GACnE,MAAMsxtC,EAAcF,EAAe/muC,EAC7BknuC,EAAYF,EAAehnuC,EAC3BmnuC,EAAaJ,EAAe9muC,EAC5BmnuC,EACJJ,EAAe/muC,EAAIknuC,EACfH,EAAe/muC,EAAI,IAAWo9hB,OAC9B2psB,EAAe/muC,EACfonuC,EAAcN,EAAevnuC,EAC7B8nuC,EAAYN,EAAexnuC,EAE3B+nuC,EAAaH,EAAWD,EACxBK,EAAWL,EAA0B,GAAbI,EAExBE,EAAajB,EACnB,IAAIkB,EAAiB,EAErBD,EAAWC,KAAoBP,EAC/BM,EAAWC,KAAoBN,EAC/BK,EAAWC,KAAoBF,EAE3BD,EAAa,IAAWjlpC,KAC1BmlpC,EAAWC,KAAoBF,EAAW,IAAWthnB,YACrDuhnB,EAAWC,KAAoBF,EAAW,IAAWthnB,aAIvD,IAAI1oQ,EAAO/hX,OAAOC,kBACdgiX,EAAOjiX,OAAOC,kBACd+hX,EAAOhiX,OAAOkmnB,kBACdhkQ,EAAOliX,OAAOkmnB,kBAElB,IAAK,IAAI//nB,EAAI,EAAGA,EAAI8lvC,IAAkB9lvC,EAAG,CACvC,MAAMqqQ,EAAQw7+B,EAAW7lvC,GAAK4lvC,EACxBlkhB,EAAW54tB,KAAK23F,IAAI4pK,GACpBs3d,EAAW74tB,KAAK63F,IAAI0pK,GACpBrrD,EAAK0ihB,EAAW2jhB,EAChBnmiC,EAAKyihB,EAAW0jhB,EAChBpmiC,EAAKyihB,EAAW4jhB,EAChBnmiC,EAAKwihB,EAAW2jhB,EAEtB1p3B,EAAO9yX,KAAKqV,IAAIy9W,EAAM58K,EAAIC,GAC1B68K,EAAOhzX,KAAKqV,IAAI29W,EAAM58K,EAAIC,GAC1B08K,EAAO/yX,KAAK8R,IAAIihX,EAAM78K,EAAIC,GAC1B88K,EAAOjzX,KAAK8R,IAAImhX,EAAM78K,EAAIC,EAC5B,CAEA,MAAM4miC,EAAUlq3B,EAAOD,EACjBoq3B,EAAUjq3B,EAAOD,EACjBmq3B,EAAUP,EAAYD,EAEtBrvU,EAA0B,IAAfx6iB,EAAOC,GAClBy6iB,EAA0B,IAAfx6iB,EAAOC,GAClBmq3B,EAAsC,IAA3BT,EAAcC,GAEzB9/gB,EAAc,IAAWx4G,aAC7BgpT,EACAE,EACA4vU,EACAjoY,GAGIj8U,EAAW,IAAQ8hM,cAAc8hhB,EAAUhud,GAE3C1qtB,EAAQ,IAAWkgjB,aACvB24nB,EACAC,EACAC,EACAnG,GAGIjpf,EAAc,IAAQliC,UAAUznpB,EAAO43qC,GACvCx67B,EAAiB,IAAQlB,aAAa44O,EAAU8wJ,GAChDzoY,EAAoB,IAAQd,gBAChCq8a,EACAi/gB,GAIIsB,EAAc,IAAQn9gB,uBAC1B1+a,EACA,IAAQ0+a,uBACN3+a,EACAwsc,EACA4gN,GAEFA,GAGI2uS,EAAe,IAAQp9gB,uBAC3Bj6d,EACAo3+B,EACA1uS,GAGF,OA5IF,SAAkD1osB,GAChD,MAAMs3+B,EAAU,IAAQ3nrC,UAAUqwM,EAAQ,EAAGg2+B,GACvCuB,EAAU,IAAQ5nrC,UAAUqwM,EAAQ,EAAGi2+B,GACvCuB,EAAU,IAAQ7nrC,UAAUqwM,EAAQ,EAAGk2+B,GAEvClg2B,EAAU,IAAWm5iB,SAE3B,OACEgnT,EAAWmB,EAASC,EAASvh2B,IAC7Bmg2B,EAAWoB,EAASC,EAASxh2B,EAEjC,CAiIOyh2B,CAAyCJ,GAIvC,IAAoB99nB,mBAAmB89nB,EAAcrytC,GAnI9D,SAAyCg7O,EAAQh7O,GAC/C,MAAMy8nB,EAAUj8C,EAChB,IAAW6Y,cAAc,IAAM,IAAM,GAAKojC,EAAQ,IAClD,IAAWpjC,cAAc,IAAM,GAAK,GAAKojC,EAAQ,IACjD,IAAWpjC,cAAc,GAAK,IAAM,GAAKojC,EAAQ,IACjD,IAAWpjC,cAAc,GAAK,GAAK,GAAKojC,EAAQ,IAChD,IAAWpjC,aAAa,IAAM,IAAM,GAAKojC,EAAQ,IACjD,IAAWpjC,aAAa,IAAM,GAAK,GAAKojC,EAAQ,IAChD,IAAWpjC,aAAa,GAAK,IAAM,GAAKojC,EAAQ,IAChD,IAAWpjC,aAAa,GAAK,GAAK,GAAKojC,EAAQ,IAE/C,IAAK,IAAIxwpB,EAAI,EAAGA,EAAI,IAAKA,EACvB,IAAQmpnB,gBAAgBp6W,EAAQyhZ,EAAQxwpB,GAAIwwpB,EAAQxwpB,IAGtD,OAAO,IAAoB2hnB,WAAW6uC,EAASz8nB,EACjD,CAgHW0ytC,CAAgCL,EAAcrytC,EAIzD,CAEA,QAAe,8BAAkB,I,+LCx0BjC,SAAS2ytC,IACP3rvC,KAAKm5nB,qBAAuB,IAAI,IAChCn5nB,KAAKk5nB,gBAAkB,IAAI,IAC3Bl5nB,KAAKoivC,gBAAkB,IAAI,IAC3BpivC,KAAK2v9B,gBAAkB,IAAI,IAM3B3v9B,KAAKi5pB,WAAa,IAAI,IAMtBj5pB,KAAK+4nB,eAAiB4ynB,EAAoBtJ,iBAAiBx/tC,EAM3D7iB,KAAKg5nB,eAAiB2ynB,EAAoBrJ,iBAAiBz/tC,EAM3D7iB,KAAKwonB,WAAa,IAAI,IAMtBxonB,KAAKu/2B,aAAe,IAAI,IAMxBv/2B,KAAK8/qB,UAAY,IAAI,IAErB9/qB,KAAK2ivC,gBAAkB,CACrBiJ,2BAA4B,IAAI,IAChCC,yBAA0B,IAAI,IAC9BC,eAAgB,IAAI,IACpBC,oBAAqB,EACrBC,aAAc,IAAI,IAClBC,6BAA8B,IAAI,IAClCC,6BAA8B,IAAI,IAClCC,+BAAgC,IAAI,IACpCC,qCAAsC,EACtCC,mCAAoC,IAAI,IACxCC,iCAAkC,IAAI,IACtCC,gCAAiC,IAAI,IACrCC,iCAAkC,IAAI,IACtCC,iCAAkC,EAClCC,iBAAkB,IAAI,KAGxB1svC,KAAK+ivC,eAAiB,CACpB4J,2CAAuCxnvC,EACvCynvC,4DAAwDznvC,EACxD0nvC,4DAAwD1nvC,EACxD2nvC,2DAAuD3nvC,EACvD4nvC,6DAAyD5nvC,EACzD6nvC,6DAAyD7nvC,EACzD8nvC,0CAAsC9nvC,EACtC+nvC,2DAAuD/nvC,EACvDgovC,yDAAqDhovC,EACrDiovC,yDAAqDjovC,EACrDkovC,wDAAoDlovC,EACpDmovC,yDAAqDnovC,EACrDoovC,yDAAqDpovC,EACrDqovC,wDAAoDrovC,EACpDsovC,yCAAqCtovC,EACrCuovC,4CAAwCvovC,EACxCwovC,+CAA2CxovC,EAC3CyovC,+CAA2CzovC,EAC3C0ovC,6CAAyC1ovC,EACzC2ovC,6CAAyC3ovC,GAG3CnF,KAAKijvC,kCAAoC,CAC3C,CAEA18uC,OAAOgwE,iBAAiBo1qC,EAAoBlrvC,UAAW,CASrD0snB,oBAAqB,CACnBl3mB,IAAK,WACH,OAAOjW,KAAKm5nB,oBACd,GAWFpH,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAKk5nB,eACd,GAWFiqnB,eAAgB,CACdltuC,IAAK,WACH,OAAOjW,KAAKoivC,eACd,GAWF/yR,eAAgB,CACdp58B,IAAK,WACH,OAAOjW,KAAK2v9B,eACd,GASFyzR,eAAgB,CACdntuC,IAAK,WACH,OAAOjW,KAAK2ivC,eACd,GASFU,cAAe,CACbptuC,IAAK,WACH,OAAOjW,KAAK+ivC,cACd,GAUFO,iCAAkC,CAChCrtuC,IAAK,WACH,OAAOjW,KAAKijvC,iCACd,KAIJ,MAAM8K,EAAyB,IAAI,IAC7BC,EAAwB,IAAI,IAC5BC,EAAwB,IAAI,IAC5B1K,EAAuB,IAAI,IAC3BC,EAAuB,IAAI,IAC3BmE,EAAyB,IAAI,IAC7BC,EAAyB,IAAI,IAC7BhvgB,EAAe,IAAI,IACnBs1gB,EAA0B,IAAI,IAC9BC,EAA2B,IAAI,IAC/BC,EAAyB,IAAI,IAYnCzC,EAAoBlrvC,UAAU8tB,OAAS,SACrCmwqB,EACA4wR,EACAC,EACAm0R,EACAC,GAEA,MAAM,iBAAEtB,EAAgB,iBAAEC,GAAqBqJ,EAC/CjI,EAAgBA,GAAiBrB,EACjCsB,EAAgBA,GAAiBrB,EAEjC,IAAMv+nB,OAAO3nlB,OAAO,cAAesiqB,GACnC,IAAM36E,OAAO3nlB,OAAO,YAAakz7B,GACjC,IAAMvrW,OAAO3nlB,OAAO,YAAamz7B,GAGjC,MAAM04R,EAAmB,IAAW55jB,UAC9BggkB,EAAgC,IAAWzwgB,SAC3C0wgB,EAAmB,IAAWjgkB,UAC9BkgkB,EAAkB,IAAWlgkB,UAC7BmgkB,EAAsB,IAAW5wgB,SAGjC56D,EAAQ,IAAQp/U,SAAS86V,EAAak6C,GACtC61gB,EAAkB,IAAWxjsC,MACjCo3rC,EACA0L,GAEFU,EAAgB5ruC,GAAK,IAAW6vmB,iBAAiBswD,GAEjD,MAAM0rkB,EAAiB,IAAW/8/B,MAChC29tB,EACAm/R,EACAnM,EACA0L,GAEIW,EAAiB,IAAWh9/B,MAChC49tB,EACAk/R,EACAnM,EACA2L,GAEIW,EAAuB,IAAWj9/B,MACtC+x/B,EACA+K,EACAnM,EACAiB,GAEIsL,EAAuB,IAAWl9/B,MACtCgy/B,EACA8K,EACAnM,EACAkB,GAEII,EAAkB,IAAWhxnB,mBACjC87nB,EACAE,EACAjH,GAEI9D,EAAkB,IAAWlxnB,mBACjCg8nB,EACAE,EACAjH,GAIIkH,EAAmB,IAAW51tC,IAClC8ppB,EACA,IAAW3wD,aACTs8nB,EAAe9ruC,EACf8ruC,EAAe9ruC,EACf8ruC,EAAe9ruC,EACfqruC,GAEFA,GAGIa,EAAoB,IAAW71tC,IACnC8ppB,EACA,IAAW3wD,aACTwxnB,EAAgBhhuC,EAChBghuC,EAAgBhhuC,EAChBghuC,EAAgBhhuC,EAChBsruC,GAEFA,GAKF,GACEvK,EAAgBtguC,EAAIuguC,EAAgBvguC,GACpCsguC,EAAgBtguC,IAAMg/tC,EAAiBh/tC,GACvCuguC,EAAgBvguC,IAAM++tC,EAAiB/+tC,GACvCsguC,EAAgB/guC,EAAIghuC,EAAgBhhuC,GACpC,IAAW+wmB,cACTm7nB,EACA,IAAW/kpB,UACX7kmB,EACA8ivC,GAGF,OAAO,EAGTjovC,KAAKi5pB,WAAa,IAAUp/C,YAC1B60oB,EAAerruC,EACfqruC,EAAepruC,EACfqruC,EAAetruC,EACfsruC,EAAerruC,GAEjBtjB,KAAKu/2B,aAAe,IAAQ/xP,eAAekxE,EAAa1+rB,KAAKu/2B,cAC7Dv/2B,KAAK8/qB,UAAY,IAAQ6nD,YAAYjpC,EAAa1+rB,KAAK8/qB,WACvD9/qB,KAAKwonB,WAAa,IAAUuL,eAAeivD,EAAOhjrB,KAAKwonB,YACvDxonB,KAAK+4nB,eAAiB21nB,EAAe7ruC,EACrC7iB,KAAKg5nB,eAAiB21nB,EAAe9ruC,EAErC,MAAMmsuC,EAAkB,IAAUn1oB,YAChC+poB,EAAgBvguC,EAChBuguC,EAAgBtguC,EAChBuguC,EAAgBxguC,EAChBwguC,EAAgBvguC,EAChB8quC,GAGFpuvC,KAAKm5nB,qBAAuB81nB,EAC1BD,EACApL,EAAgB/guC,EAChBghuC,EAAgBhhuC,EAChB7iB,KAAKwonB,WACLxonB,KAAKu/2B,aACLv/2B,KAAK8/qB,UACL9/qB,KAAKm5nB,sBAGPn5nB,KAAK2v9B,gBAAkB,IAAQrhqB,wBAC7BtuT,KAAK8/qB,UACL9/qB,KAAKu/2B,aACLv/2B,KAAK2v9B,iBAGP3v9B,KAAKoivC,gBAAkB,IAAQ9z7B,wBAC7BtuT,KAAKm5nB,qBAAqB/L,SAC1BptnB,KAAKm5nB,qBAAqBztmB,OAC1B1rB,KAAKoivC,iBAGPpivC,KAAKk5nB,gBAAkB,IAAehM,wBACpCltnB,KAAKm5nB,qBACLn5nB,KAAKk5nB,iBAIP,MAAMg2nB,EAAwB5M,EAAiBj/tC,EAAIg/tC,EAAiBh/tC,EAC9D8ruC,EAA4B,GAAMD,EAClCE,EAA4BvL,EAAgBxguC,EAAIuguC,EAAgBvguC,EAChEgsuC,EACJxL,EAAgBxguC,EAChBuguC,EAAgBvguC,EAChB+ruC,EAA4BF,EACxBI,EAA6BD,GAAwBf,EACrDiB,EACJF,GAAwBF,EAA4Bb,GACpDe,EAAuBH,EAAwBZ,EAC3CkB,EACJH,EAAuBf,GACvBe,EAAuBF,EAA4Bb,EAC/CmB,EACJH,GACAC,GACAC,EAEIE,EAA2Bf,EAAetruC,EAAIqruC,EAAerruC,EAC7DssuC,EACJhB,EAAetruC,EACfqruC,EAAerruC,EACfqsuC,EAA2BR,EASvBU,GAPJD,EAAsBR,EAA4Bb,GAClDqB,EAAsBT,EAAwBZ,GAE9CqB,GAAuBR,EAA4Bb,GACnDqB,GAAuBR,EAA4Bb,GAEnDqB,EAAsBR,EAA4Bb,EAO9CuB,GAA+BhM,EAAgBvguC,GAAKkruC,EACpDsB,GACJjM,EAAgBvguC,IAAMkruC,GACtB3K,EAAgBvguC,IAAMkruC,EAClBuB,GACJlM,EAAgBvguC,GAAKkruC,GACrB3K,EAAgBvguC,EAAIg/tC,EAAiBh/tC,EAAIiruC,EACrCyB,GACJH,IACAC,IACAC,GACIE,GACJrM,EAAgBtguC,EAAI++tC,EAAiB/+tC,EAAIiruC,GACzC3K,EAAgBtguC,GAAKkruC,EACjB0B,GACJtM,EAAgBtguC,IAAMkruC,GACtB5K,EAAgBtguC,IAAMkruC,EAClB2B,GAA8BvM,EAAgBtguC,GAAKkruC,EACnD4B,GACJH,IACAC,IACAC,GACIE,GAAoBL,IAAwBI,GAE5CE,GAAqB3B,EAAerruC,EAAIoruC,EAAepruC,EACvDituC,GAA8B5B,EAAerruC,GAAKkruC,EAClDgC,GACJ7B,EAAerruC,IAAMkruC,GACrBG,EAAerruC,IAAMkruC,EACjBiC,GACJ9B,EAAerruC,GAAKkruC,GACpBG,EAAerruC,EAAIg/tC,EAAiBh/tC,EAAIiruC,EACpCmC,GACJH,IACAC,IACAC,GACIE,GACJjC,EAAepruC,EAAI++tC,EAAiB/+tC,EAAIiruC,GACxCG,EAAepruC,GAAKkruC,EAChBoC,GACJlC,EAAepruC,IAAMkruC,GACrBE,EAAepruC,IAAMkruC,EACjBqC,GAA6BnC,EAAepruC,GAAKkruC,EAKjDsC,GAAmBJ,IAHvBC,IACAC,IACAC,GAGIzN,GAAiBpjvC,KAAK2ivC,gBACtBU,GAAgBrjvC,KAAK+ivC,eAG3B,IAAK,MAAM/8uC,KAAOq9uC,GACZA,GAAcp9uC,eAAeD,KAC/Bq9uC,GAAcr9uC,QAAOb,GAIzBi+uC,GAAe0I,eAAiB,IAAW7gsC,MACzC6jsC,EACA1L,GAAe0I,gBAEjB,MAAQzouC,EAAG0tuC,GAAQluuC,EAAGmuuC,IAAW5N,GAAe0I,eAC1CmF,GAAYD,GAASD,GAC3B3N,GAAe2I,oBAAsB,EAAMkF,GAAYA,GACvD7N,GAAe4I,aAAe,IAAW35nB,cACtC0+nB,GAASA,GAASC,GAASA,IAAUD,IACrCC,GAASA,GAASD,GAASA,IAAUC,GACtC5N,GAAe4I,cAIjB5I,GAAe8I,6BAA+B,IAAWl5nB,iBACvD,IAAWloB,IACX,IAAWioB,mBACTqwnB,GAAe0I,eACf1I,GAAe0I,eACf1I,GAAe8I,8BAEjB9I,GAAe8I,8BAIjB,IAAInI,GAAoB,EAGxBV,GAAuD,wCAAIU,GAC3DA,IAAqB,EACrBV,GAAuD,wCAAIU,GAC3DA,IAAqB,EAErBX,GAAesJ,iBAAmB,IAAWr6nB,aAC3CuxnB,EAAgB/guC,EAAI8ruC,EAAe9ruC,EACnCghuC,EAAgBhhuC,EAAI8ruC,EAAe9ruC,EACnCuguC,GAAesJ,kBAIjB,MAAMxx5B,GAAYyz5B,EAAe9ruC,EAAI6ruC,EAAe7ruC,EAgCpD,GA/BAuguC,GAAeqJ,iCAAmC,EAAMvx5B,GACpDwz5B,EAAe7ruC,IAAM8ruC,EAAe9ruC,IACtCuguC,GAAeqJ,iCAAmC,GAIhDgD,IACFpM,GAAqD,uCAAI,EACzDA,GAAsD,uCAAIU,GAEtDwL,GACFlM,GAAsE,wDACpE,EACFU,IAAqB,GACZyL,GACTnM,GAAqE,uDACnE,EACFU,IAAqB,GACZuL,IACTjM,GAAsE,wDACpE,EACFU,IAAqB,GAGvBX,GAAe+I,+BAAiC,IAAW95nB,aACzDuxnB,EAAgBvguC,EAChBwguC,EAAgBxguC,EAChB+/tC,GAAe+I,iCAIfyD,GAAmB,CACrBvM,GAAoD,sCAAI,EAExD,MAAM6N,GACHxC,EAAerruC,EAAIg/tC,EAAiBh/tC,GAAK6ruC,EAMtCiC,IAJHxC,EAAetruC,EAAIg/tC,EAAiBh/tC,GAAK6ruC,EAKnB,IAHvB,EAAMS,EAAsBT,IAGyB,EAUvD,GATA9L,GAAegJ,qCACb+E,EAE+BxC,EAAetruC,EAAIqruC,EAAerruC,IAEjEgguC,GAAqE,uDACnE,GAGAsM,GAAuBrB,EACzBlL,GAAekJ,iCAAmC,IAAWj6nB,aAC3D,EACA,EACA+wnB,GAAekJ,sCAEZ,CACL,MAAMn6qC,EAAQ+8qC,EAAwBS,EAChCyB,EAAsBF,EAAsBC,EAC5CpvvC,GACHowE,GAASi/qC,EAAsBrjvC,KAAKG,MAAMkjvC,IAC7ChO,GAAekJ,iCAAmC,IAAWj6nB,aAC3DlgjB,EACApwE,EACAqhvC,GAAekJ,iCAEnB,CACF,CAEA,GAAImD,EAAoB,CACtB,MAAM4B,EAAoC,IAAWz9nB,cACnDgwnB,EAAgBvguC,EAChBg/tC,EAAiBh/tC,OACjBle,EACAkpvC,GAEIiD,EAAoC,IAAW19nB,cACnDiwnB,EAAgBxguC,EAChBi/tC,EAAiBj/tC,OACjBle,EACAkpvC,GAGEgD,IACFhO,GAAuE,yDACrE,GAEAiO,IACFjO,GAAuE,yDACrE,GAEJ,MAAM6N,GACHxC,EAAerruC,EAAIg/tC,EAAiBh/tC,GAAK6ruC,EACtCqC,GACH5C,EAAetruC,EAAIg/tC,EAAiBh/tC,GAAK6ruC,EAMtCsC,IAHH3N,EAAgBxguC,EAAIg/tC,EAAiBh/tC,GAAK6ruC,EAInB,IAFxB,EAAMG,EAAuBH,IAE+B,EAE9D9L,GAAeiJ,mCAAqC,IAAWh6nB,aAC7D6+nB,EACAK,EACAC,EACApO,GAAeiJ,mCAEnB,CAoDA,GAlDIgE,KAEED,KACF/M,GAAwD,0CAAI,EAC5DA,GAAyD,0CACvDU,GAEEkM,IACF5M,GAAmE,qDACjE,EACFU,IAAqB,GACZmM,IACT7M,GAAmE,qDACjE,EACFU,IAAqB,GACZoM,KACT9M,GAAkE,oDAChE,EACFU,IAAqB,IAKrBiM,KACF3M,GAAwD,0CAAI,EAC5DA,GAAyD,0CACvDU,GAEE8L,IACFxM,GAAmE,qDACjE,EACFU,IAAqB,GACZ+L,IACTzM,GAAmE,qDACjE,EACFU,IAAqB,GACZgM,KACT1M,GAAkE,oDAChE,EACFU,IAAqB,IAIzBX,GAAeoJ,iCAAmC,IAAWn6nB,aAC3DtknB,KAAK63F,IAAIg+oC,EAAgBtguC,GACzBvV,KAAK63F,IAAIi+oC,EAAgBvguC,GACzB8/tC,GAAeoJ,mCAIfsE,GAGF,GAFAzN,GAAmD,qCAAI,EAEnDiN,GAAqB/B,EACvBnL,GAAemJ,gCAAkC,IAAWl6nB,aAC1D,EACA,EACA+wnB,GAAemJ,qCAEZ,CACL,MACMp6qC,GADuBmwqC,EAAiBh/tC,EAAI++tC,EAAiB/+tC,GAC9BgtuC,GAC/BvuvC,GACHsgvC,EAAiB/+tC,EAAIoruC,EAAepruC,GAAKgtuC,GAC5ClN,GAAemJ,gCAAkC,IAAWl6nB,aAC1DlgjB,EACApwE,EACAqhvC,GAAemJ,gCAEnB,CAKF,OAFAvsvC,KAAKijvC,kCAAoCc,IAElC,CACT,EAEA,MAAM0N,EAAoC,IAAI,IACxCxqV,EAAyB,IAAI,IAC7BC,EAAsB,IAAI,IAC1BjqO,EAAqB,IAAI,IAM/B0ujB,EAAoBlrvC,UAAUwjvC,qBAAuB,SAAU9mhB,GAC7D,MAAMimhB,EAAiBpjvC,KAAK2ivC,gBACtB19rB,EAAYjljB,KAAKwonB,WAEjBkpoB,EAAWv0hB,EAAW7zV,OAAOumd,WAC7B+7Z,EAA6B3msB,EAAUyqE,wBAC3CgioB,EACAD,GAEF,IAAWp/nB,aACTu5nB,EAA2B5msB,UAC3B4msB,EAA2Bh3nB,SAC3Bg3nB,EAA2B9pvC,OAC3BshvC,EAAewI,4BAIjB,MAAMpwoB,EAAkB,IAAW3B,YACjC+xoB,EAA2B5msB,UAC3B4msB,EAA2Bh3nB,SAC3B,EACA3vE,EACAgiX,GAGFm8U,EAAe6I,6BAA+BhnsB,EAAUy/H,kBACtDlpE,EACA4noB,EAAe6I,8BAGjB,MAAMxkV,EAAa,IAAWnmS,wBAC5B9lB,EACAv2D,EACAiiX,GAEIyqV,EAAmB,IAAQhqhB,YAAY8/L,EAAYxqO,GACnD20jB,EAAoBz0hB,EAAWvmtB,QAAQwl3B,aAAaoB,aACpDq0X,EAAkB,IAAQl/tC,SAC9Bi/tC,EACAD,EACA10jB,GAGFmmjB,EAAeyI,yBAA2B,IAAQlw/B,UAChDk2/B,EACAzO,EAAeyI,yBAEnB,EAEA,MAAM9kf,EAAmB,IAAI,IAY7B4kf,EAAoBlrvC,UAAU8utC,kCAAoC,SAChE98P,EACAC,EACAC,EACAC,EACA557B,GAGA,IAAM+qlB,OAAO1umB,OAAO,YAAao98B,GACjC,IAAM1uW,OAAO1umB,OAAO,QAASq98B,GAC7B,IAAM3uW,OAAO1umB,OAAO,QAASs98B,GAC7B,IAAM5uW,OAAO1umB,OAAO,QAASu98B,GAC7B,IAAM7uW,OAAO3nlB,OAAO,SAAUpD,GAG9B,MAAMiyvB,EAAc,EAAMl9wB,KAAKiV,IAAI,EAAKyv8B,GAClCq/R,EAAmBp/R,EAAQznM,EAC3B8me,GAAoBr/R,EAAQ,GAAKznM,EACjC+me,EAAkBr/R,EAAQ1nM,EAC1Bgne,GAAmBt/R,EAAQ,GAAK1nM,EAChCine,EAAgBt/R,EAAQ3nM,EACxBkne,GAAiBv/R,EAAQ,GAAK3nM,EAuBpC,OAAOgke,EArBW,IAAUxqf,WAC1BzkwB,KAAKi5pB,WACL64lB,EACAE,EACAD,EACAE,EACAlrf,GAGgB,IAAW1+d,KAC3BroS,KAAK+4nB,eACL/4nB,KAAKg5nB,eACLk5nB,GAGgB,IAAW7p9B,KAC3BroS,KAAK+4nB,eACL/4nB,KAAKg5nB,eACLm5nB,GAOAnyvC,KAAKwonB,WACLxonB,KAAKu/2B,aACLv/2B,KAAK8/qB,UACL9mpB,EAEJ,EAEA,MAAMo5tC,EAA0B,IAAI,IAC9BC,EAAsB,IAAI,IAC1BC,EAAsB,IAAI,IAC1BC,EAAsB,IAAI,IAC1BC,EAAiB,IAAI,IACrBn8hB,EAAW,IAAI,IA8Efo8hB,EAAsB,IAAI,IAC1BC,EAAyB,IAAI,IAC7BC,EAA+B,IAAI,IACnCC,EAAkB,IAAI,IAQ5BjH,EAAoBlrvC,UAAU4jvC,2BAA6B,SACzD9mR,EACAvk8B,GAGA,IAAM+qlB,OAAO3nlB,OAAO,gBAAiBmh8B,GACrC,IAAMx5W,OAAO3nlB,OAAO,SAAUpD,GAG9B,IAAIgshB,EAAYj3iB,KAAKyzP,MAAM+7tB,EAAcj68B,EAAGi68B,EAAcl68B,GAE1D,MAAM,eACJyouC,EAAc,aACdE,EAAY,6BACZE,EAA4B,iCAC5BO,EAAgC,qCAChCL,EAAoC,iCACpCE,EAAgC,gCAChCC,GACEvsvC,KAAK2ivC,gBAEHkQ,EAAoB9kvC,KAAKyrkB,MAAM+jZ,EAAcl68B,EAAGk68B,EAAcj68B,GAC9DwvuC,EAAa,IAAWzgoB,aAC5BwgoB,EACAt1R,EAAc168B,EACd6vuC,GAEIK,EAzGR,SAAwCnsuC,EAAUo8pB,EAAOgpkB,EAAchztC,GAErE,MAAM4iB,EAAI,IAAWnzB,IAAI7B,EAAUwruC,GAC7B57hB,EAAe,IAAWnkG,aAC9B,EAAM2wD,EAAM3/pB,EACZ,EAAM2/pB,EAAM1/pB,EACZ+uuC,GAKF,IAAIW,EAAS,IAAW3goB,aACtBtknB,KAAKklvC,QACLllvC,KAAKklvC,QACLX,GAIExvuC,EAAI,IAAWiwmB,mBAAmBiwD,EAAOgwkB,EAAQT,GAEjDW,EAAU,IAAW7goB,aACvB25nB,EAAa3ouC,EAAI2vuC,EAAO3vuC,EAAI2vuC,EAAO3vuC,EAAI2vuC,EAAO3vuC,EAC9C2ouC,EAAa1ouC,EAAI0vuC,EAAO1vuC,EAAI0vuC,EAAO1vuC,EAAI0vuC,EAAO1vuC,EAC9CkvuC,GAEF,IAAK,IAAIvtvC,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAE1B,MAAM8wB,EAAW,IAAWq1lB,UAC1B,IAAW9xjB,SAASx2C,EAAGowuC,EAAS78hB,IAE5B5lsB,EAAY,IAAW+mF,UAC3B,IAAWl+C,SAAS1d,EAAGs3sC,EAAS78hB,GAChCA,GAEI3ysB,EAAI,IAAW4jmB,iBAAiB72lB,EAAWsF,EAAUsgsB,GAE3D28hB,EAAS,IAAWjgoB,mBAClB,IAAW75lB,IAAIxV,EAAGwvuC,EAASZ,GAC3B97hB,EACA87hB,GAEFU,EAAS,IAAWx7oC,UAClB,IAAWm6I,MACTqhgC,EACA,IAAWhppB,KACX,IAAWc,IACXwnpB,GAEFA,GAEFxvuC,EAAI,IAAWiwmB,mBAAmBiwD,EAAOgwkB,EAAQT,GACjDW,EAAU,IAAW7goB,aACnB25nB,EAAa3ouC,EAAI2vuC,EAAO3vuC,EAAI2vuC,EAAO3vuC,EAAI2vuC,EAAO3vuC,EAC9C2ouC,EAAa1ouC,EAAI0vuC,EAAO1vuC,EAAI0vuC,EAAO1vuC,EAAI0vuC,EAAO1vuC,EAC9CkvuC,EAEJ,CAGA,OAAO,IAAWngoB,aAChBtknB,KAAKwxF,KAAK34E,EAASvD,GAAKP,EAAEO,EAC1BtV,KAAKwxF,KAAK34E,EAAStD,GAAKR,EAAEQ,EAC1B,IAAW8nmB,UAAU,IAAW9xjB,SAASx2C,EAAGowuC,EAAS78hB,IACrDr9rB,EAEJ,CAwCgCm6tC,CAC5BL,EACA,IAAWzgoB,aACTy5nB,EAAezouC,EACfyouC,EAAejpuC,EACf4vuC,GAEFzG,EACA2G,GAGIS,EAAW,IAAW57oC,UAC1B,IAAW66gB,aACT0goB,EAAsB1vuC,EAAI6ouC,EAA6B7ouC,EACvD0vuC,EAAsBzvuC,EAAI4ouC,EAA6BrpuC,EACvD+vuC,GAEFA,GAEF,IAAIh+nB,EAAW7mnB,KAAKyzP,MAAM4x/B,EAAS9vuC,EAAG8vuC,EAAS/vuC,GAE/C,MAAMgwuC,EACJ,IAAWjooB,UAAU0noB,GACrB,IAAW1noB,UAAU2noB,IAChB,EACD,EACAO,EAAe,IAAWh6rC,SAC9Bw5rC,EACAC,EACAL,GAEF,IAAI5wvC,EAASuxvC,EAAa,IAAWjooB,UAAUkooB,GAE/C,MAAM,qCACJrG,EAAoC,oCACpCQ,GACEztvC,KAAK+ivC,eAsBT,OApBA/9rB,GAAaA,EAAYj3iB,KAAK43F,KAAO,EAAM53F,KAAK43F,KAC5C,OAAQsnpC,KACVjosB,GAAaonsB,EACbpnsB,GAAwBj3iB,KAAKG,MAAM82iB,GAEnCA,EACEA,EAAYsnsB,EAAiCjpuC,EAC7CipuC,EAAiChpuC,GAGrCsxmB,GAAYA,EAAW7mnB,KAAK43F,GAAK,GAAO53F,KAAK43F,IACzC,OAAQ8npC,KAEV74nB,EACEA,EAAW23nB,EAAgClpuC,EAC3CkpuC,EAAgCjpuC,GAGpCxhB,EAAS,EAAMA,EAAS2qvC,EAEjB,IAAWp6nB,aAAartE,EAAW4vE,EAAU9ynB,EAAQk3B,EAC9D,EAEA,MAAMwrtC,EAAoB,IAAI,IACxBF,EAAuB,IAAI,IAC3BC,EAAuB,IAAI,IAkGjC,SAAS0K,EACPr1oB,EACAn7mB,EACAC,EACAumjB,EACA4lL,EACA5jM,EACAjugB,GAeA,OAbAA,EAAS,IAAoBuvlB,cAC3B3O,EACAn7mB,EACAC,EACAumjB,EACAjshB,IAEKtN,OAAS,IAAWwN,IAAIF,EAAOtN,OAAQm/sB,EAAa7xsB,EAAOtN,QAClEsN,EAAOo0lB,SAAW,IAAQz6lB,SACxBqG,EAAOo0lB,SACPnmF,EACAjugB,EAAOo0lB,UAEFp0lB,CACT,CA9GA2ytC,EAAoBlrvC,UAAUgkvC,oCAAsC,SAClEx9J,EACAiR,EACAwsJ,EACA1rtC,GAGA,IAAM+qlB,OAAO3nlB,OAAO,cAAe6qjC,GACnC,IAAMlje,OAAO3nlB,OAAO,iBAAkB87jC,GACtC,IAAMn0e,OAAO3nlB,OAAO,SAAUsotC,GAC9B,IAAM3goB,OAAO3nlB,OAAO,SAAUpD,GAG9B,MAAM2rtC,EAAkB,EAAM52uC,KAAKiV,IAAI,EAAKikkC,EAAY/p9B,OAClDizH,EAAa,IAAW6iY,iBAC5B,IAAWloB,IACXotf,EACAssJ,GAEII,EAAoB,IAAWt9nB,iBACnCn3X,EACAw0/B,EACAH,GAGIK,EAAU,IAAWv9nB,iBACzB,IAAW+K,aACT40d,EAAY5jkC,EAAIqhuC,EAAOrhuC,EACvB4jkC,EAAY3jkC,EAAIohuC,EAAOphuC,EACvB2jkC,EAAYpkkC,EAAI6huC,EAAO7huC,EACvByhuC,GAEFK,EACAL,GAEIQ,EAAU,IAAW5rtC,IACzB2rtC,EACAD,EACAL,GAsBF,OAAO0K,EAnBW,IAAUxqf,WAC1BzkwB,KAAKi5pB,WACL4rlB,EAAQxhuC,EACRwhuC,EAAQvhuC,EACRwhuC,EAAQzhuC,EACRyhuC,EAAQxhuC,EACRyjvB,GAEgB,IAAW1+d,KAC3BroS,KAAK+4nB,eACL/4nB,KAAKg5nB,eACL6rnB,EAAQhiuC,GAEQ,IAAWwlR,KAC3BroS,KAAK+4nB,eACL/4nB,KAAKg5nB,eACL8rnB,EAAQjiuC,GAOR7iB,KAAKwonB,WACLxonB,KAAKu/2B,aACLv/2B,KAAK8/qB,UACL9mpB,EAEJ,EAkDA2ytC,EAAoBtJ,iBAAmB97uC,OAAOivmB,OAC5C,IAAI,KACD,IAAW7vgB,IACX,IAAW4jiB,aACX,IAAUh+E,MAAM23H,gBAWrByokB,EAAoBrJ,iBAAmB/7uC,OAAOivmB,OAC5C,IAAI,IACF,IAAW7vgB,GACX,IAAW4jiB,YACX,GAAO,IAAUh+E,MAAMs0D,gBAI3B,QAAe,8BAAmB,I,6CC5oClC,MAcA,EAAet5mB,OAAOivmB,OAdK,CAMzB86W,KAAM,EAMNC,KAAM,G,wXC8BR,SAASgjS,EAAexzvC,GACtBA,EAAUA,GAAW,IAAOw8mB,aAM5Bv8mB,KAAKyh1B,QAAS,EAMdzh1B,KAAK6zoB,UAAY9zoB,EAAQ2+mB,UAAY60oB,EAAeC,gBAQpDxzvC,KAAKgksC,gBAAa7+rC,EAMlBnF,KAAKoh7B,YAAc,IAAI,IAMvBph7B,KAAKyzvC,qBAAuB1zvC,EAAQ2zvC,sBAAuB,EAQ3D1zvC,KAAK06vB,YAASv1vB,EAMdnF,KAAK2zvC,eAAgB,EAQrB3zvC,KAAKyn0B,YAAc,IAAI,IAQvBzn0B,KAAK4zvC,iBAAmB,IAAI,IAQ5B5zvC,KAAK+v9B,eAAiB,IAAI,IAQ1B/v9B,KAAKgw9B,cAAgB,IAAI,IAQzBhw9B,KAAK2w9B,iBAAmB,EAQxB3w9B,KAAK6v9B,WAAa,IAAI,IAStB7v9B,KAAK6zvC,cAAgB,IAAI,IAQzB7zvC,KAAK8v9B,WAAa,IAAI,IAStB9v9B,KAAK8zvC,cAAgB,IAAI,IAQzB9zvC,KAAK+zvC,mBAAqB,IAAI,IAS9B/zvC,KAAKg0vC,sBAAwB,IAAI,IAQjCh0vC,KAAKi0vC,mBAAqB,IAAI,IAS9Bj0vC,KAAKk0vC,sBAAwB,IAAI,IAQjCl0vC,KAAK6y8B,sBAAwB,EAQ7B7y8B,KAAK8y8B,oCAAsC,EAQ3C9y8B,KAAKi82B,qBAAkB922B,EAQvBnF,KAAKo28B,qBAAuB,EAQ5Bp28B,KAAKm0vC,wBAAyB,EAQ9Bn0vC,KAAKsl1B,aAAe,IAAQr6xB,MAAMlrD,EAAQ2+rB,aAAe,IAAQ5tC,UAQjE9wpB,KAAKo0vC,gBAAkB,IAAQnpsC,MAAMjrD,KAAKsl1B,cAM1Ctl1B,KAAKm82B,cACHp82B,EAAQ082B,cAAgB82Y,EAAec,oBAMzCr0vC,KAAKs0vC,8BAAgC,IAAI,IAMzCt0vC,KAAKu0vC,cAAe,EAMpBv0vC,KAAK237B,kBAAexy7B,EAMpBnF,KAAKw0vC,sBAAmBrvvC,EAMxBnF,KAAKi+4B,aAAU944B,EAMfnF,KAAKo/xB,OAASr/xB,EAAQs0nB,MAOtBr0nB,KAAKy0vC,+BAAiC,IAAI,IAM1Cz0vC,KAAK00vC,+BAAiC,IAAI,IAO1C10vC,KAAK20vC,2BAA6B,IAAI,IAMtC30vC,KAAK40vC,gCAAkC,IAAI,IAO3C50vC,KAAK63lC,kBAAmB,EAMxB73lC,KAAK60vC,kBAAoB,EAMzB70vC,KAAK80vC,oBAAsB,EAM3B90vC,KAAK+0vC,YAAa,EAMlB/0vC,KAAKw26B,kBAAerx6B,EAMpBnF,KAAKg18B,kBAAoB,EAOzBh18B,KAAKg1vC,gBAAkB,IAAI,IAM3Bh1vC,KAAKi1vC,YAAa,EAMlBj1vC,KAAKk1vC,gBAAiB,EAMtBl1vC,KAAKm1vC,gBAAiB,EAMtBn1vC,KAAKox5B,UAAY,CACfgkW,+BAA2BjwvC,EAC3BkwvC,8BAA+B,EAC/BC,8BAA+B,IAAI,IACnCC,2BAAuBpwvC,EACvBqwvC,0BAA2B,EAC3BC,0BAA2B,IAAI,IAC/BC,oBAAqB,GACrBC,sBAAuB,IAAI,IAC3BnprC,WAAY,IAAI,IAChBoprC,gBAAiB,IAAI,IACrB1mS,cAAe,IAAI,IACnBC,aAAc,IAAI,IAClBs6R,6BAA8B,IAAI,IAClCC,8BAA+B,IAAI,IACnCL,oBAAqB,IAAI,IACzBwM,qBAAsB,IAAI,IAC1BC,sBAAuB,IAAI,IAC3BC,aAAc,IAAI,IAClBC,+BAAgC,IAAI,IACpChkR,2BAAuB7s+B,EACvBu4nC,qBAAsB,IAAI,IAC1Bu4H,8BAA0B9wvC,EAC1Bk82B,SAAU,EACVm2B,UAAW,IAAI,KAQjBx34B,KAAKk2vC,iBAAmB,CAAC,EAOzBl2vC,KAAKw14B,YAAc,CAAC,EAEpB,MAAM37B,EAAW752B,KAAKox5B,UAChBnoB,EAAajp4B,KAAKw14B,YACxB,IAAK,MAAMxv4B,KAAO6z2B,EACZA,EAAS5z2B,eAAeD,KAE1Bij4B,EADa,KAAKjj4B,KACC,WACjB,OAAO6z2B,EAAS7z2B,EAClB,GAmBJhG,KAAKu39B,SAAW,IAAI,IAepBv39B,KAAK039B,YAAc,IAAI,IAYvB139B,KAAKy39B,WAAa,IAAI,IAatBz39B,KAAKw39B,WAAa,IAAI,IA0BtBx39B,KAAKo39B,aAAe,IAAI,IAgBxBp39B,KAAKq39B,eAAiB,IAAI,IAkB1Br39B,KAAKs39B,mBAAqB,IAAI,IAOhC,SAAoBv43B,EAAW2/gB,GAE7B,MACEtwV,MAAO+n+B,EAAS,UAChB7mS,EAAY,IAAe8mS,aAAaD,GAAU,UAClD5mS,EAAY,IAAe8mS,aAAaF,IACtCz3oB,EAEJ3/gB,EAAUuw3B,UAAYA,EACtBvw3B,EAAUww3B,UAAYA,EACtBxw3B,EAAUu3pC,kBAAoBhnS,EAAUrk6B,QACxC8zC,EAAUw3pC,kBAAoBhnS,EAAUtk6B,QAExCursC,EAAwBz3pC,GAGxB,MAAM03pC,EAAmB,IAAeC,oBAAoBP,GAC5Dp3pC,EAAU27pB,OAAS,IAAI+7f,EACvB13pC,EAAU40pC,cAAgBgD,EAAyB53pC,EACrD,CAtBE07gB,CAAWz6mB,KADMA,KAAK6zoB,UAExB,CAuBAttoB,OAAOgwE,iBAAiBg9qC,EAAe9yvC,UAAW,CAQhD2/I,MAAO,CACLnqI,IAAK,WACH,OAAOjW,KAAKyh1B,MACd,GAUF/iO,SAAU,CACRzomB,IAAK,WACH,OAAOjW,KAAK6zoB,SACd,GAUF9hB,eAAgB,CACd97mB,IAAK,WACH,OAAOjW,KAAK06vB,OAAO3oI,cACrB,GAUF5E,oBAAqB,CACnBl3mB,IAAK,WACH,OAAOjW,KAAK06vB,OAAOvtI,mBACrB,GAUFuxE,YAAa,CACXzorB,IAAK,WACH,OAAOjW,KAAKsl1B,YACd,EACA1wzB,IAAK,SAAU8pqB,GAEb,IAAM36E,OAAO3nlB,OAAO,cAAesiqB,GAGnC1+rB,KAAKsl1B,aAAe,IAAQr6xB,MAAMyzoB,EAAa1+rB,KAAKsl1B,aACtD,GAUFl3jB,MAAO,CACLn4Q,IAAK,WACH,OAAOjW,KAAK6zoB,UAAUzlX,KACxB,GAWF5hN,WAAY,CACVv2D,IAAK,WACH,OAAOjW,KAAKyn0B,WACd,GAUFmub,gBAAiB,CACf3/uC,IAAK,WACH,OAAOjW,KAAK4zvC,gBACd,GAUF1kS,cAAe,CACbj58B,IAAK,WACH,OAAOjW,KAAK+v9B,cACd,GAUFZ,aAAc,CACZl58B,IAAK,WACH,OAAOjW,KAAKgw9B,aACd,GAUFR,cAAe,CACbv58B,IAAK,WACH,OAAOjW,KAAK6zoB,UAAU27U,aACxB,GAUFC,cAAe,CACbx58B,IAAK,WACH,OAAOjW,KAAK6zoB,UAAU47U,aACxB,GASFnr9B,KAAM,CACJ2R,IAAK,WACH,OAAQjW,KAAKk1vC,cACf,EACAtguC,IAAK,SAAUtwB,GAEb,IAAMy/mB,OAAO5te,KAAK,OAAQ7xI,GAG1BtE,KAAKk1vC,gBAAkB5wvC,CACzB,GASFsyvC,cAAe,CACb3gvC,IAAK,WACH,OAAOjW,KAAKm1vC,cACd,EACAvguC,IAAK,SAAUgiuC,GAEb,IAAM7yoB,OAAO5te,KAAK,gBAAiBygnC,GAGnC52vC,KAAKm1vC,eAAiByB,CACxB,GASFC,UAAW,CACT5gvC,IAAK,WACH,OAAOjW,KAAKi1vC,UACd,EACArguC,IAAK,SAAUiiuC,GAEb,IAAM9yoB,OAAO5te,KAAK,YAAa0gnC,GAG/B72vC,KAAKi1vC,WAAa4B,CACpB,GASFphX,UAAW,CACTx/3B,IAAK,WACH,OAAOjW,KAAK+0vC,UACd,EACAnguC,IAAK,SAAU6g3B,GAEb,IAAM1xR,OAAO5te,KAAK,YAAas/vB,GAG3Bz14B,KAAK+0vC,aAAet/W,IACtBz14B,KAAK+0vC,WAAat/W,EAClBz14B,KAAKu0vC,cAAe,EAExB,GASFv8J,gBAAiB,CACf/hlC,IAAK,WACH,OAAOjW,KAAK63lC,gBACd,EACAjjkC,IAAK,SAAUojkC,GAEb,IAAMj0e,OAAO5te,KAAK,kBAAmB6h9B,GAGrCh4lC,KAAK63lC,iBAAmBG,CAC1B,GAYF8+J,iBAAkB,CAChB7gvC,IAAK,WACH,OAAOjW,KAAK60vC,iBACd,EACAjguC,IAAK,SAAUkiuC,GAEb,IAAM/yoB,OAAO1umB,OAAO,mBAAoByhvC,GAGxC92vC,KAAK60vC,kBAAoB,IAAWljgC,MAAMmlgC,EAAkB,EAAK,EACnE,GAYFl+S,iBAAkB,CAChB3i8B,IAAK,WACH,OAAOjW,KAAKg18B,iBACd,EACApg7B,IAAK,SAAUgk7B,GAEb,IAAM70V,OAAO1umB,OAAO,mBAAoBuj8B,GAGxC548B,KAAKg18B,kBAAoB4D,CAC3B,GAWFv3F,SAAU,CACRpr2B,IAAK,WACH,OAAOjW,KAAK80vC,mBACd,EACAlguC,IAAK,SAAUys1B,GAEb,IAAMt9P,OAAO1umB,OAAO,WAAYgs2B,GAGhCrh3B,KAAK80vC,oBAAsBzzY,CAC7B,GAUFiuG,UAAW,CACTr58B,IAAK,WACH,OAAOjW,KAAK6v9B,UACd,EACAj77B,IAAK,SAAU067B,GAEb,IAAM5wsB,QAAQ,YAAa4wsB,GAG3Btv9B,KAAK6v9B,WAAa,IAAW5k6B,MAAMqk6B,EAAWtv9B,KAAK6v9B,WACrD,GAUFN,UAAW,CACTt58B,IAAK,WACH,OAAOjW,KAAK8v9B,UACd,EACAl77B,IAAK,SAAU267B,GAEb,IAAM7wsB,QAAQ,YAAa6wsB,GAG3Bvv9B,KAAK8v9B,WAAa,IAAW7k6B,MAAMsk6B,EAAWvv9B,KAAK8v9B,WACrD,GAUFwmS,kBAAmB,CACjBrgvC,IAAK,WACH,OAAOjW,KAAK+zvC,kBACd,EACAn/tC,IAAK,SAAU0huC,GAEb,IAAM53+B,QAAQ,oBAAqB43+B,GAGnCt2vC,KAAK+zvC,mBAAqB,IAAW9osC,MACnCqrsC,EACAt2vC,KAAK+zvC,mBAET,GAUFwC,kBAAmB,CACjBtgvC,IAAK,WACH,OAAOjW,KAAKi0vC,kBACd,EACAr/tC,IAAK,SAAU2huC,GAEb,IAAM73+B,QAAQ,oBAAqB63+B,GAGnCv2vC,KAAKi0vC,mBAAqB,IAAWhpsC,MACnCsrsC,EACAv2vC,KAAKi0vC,mBAET,GASFz3Y,eAAgB,CACdvm2B,IAAK,WACH,OAAOjW,KAAKi82B,eACd,EACArn1B,IAAK,SAAU4n1B,GAEb,IAAwBw7G,SAASx7G,EAAgBx82B,KAAM,kBACzD,GAUFy82B,aAAc,CACZxm2B,IAAK,WACH,OAAOjW,KAAKm82B,aACd,EACAvn1B,IAAK,SAAU6n1B,GACb,GAAIz82B,KAAKm82B,gBAAkBM,EAAc,CAEvC,MAAMwsB,EAAajp4B,KAAKw14B,YAElBuhX,EADkB/2vC,KAAKm82B,cACqB8sB,WAClD,IAAK,MAAMsnB,KAAewmW,EACpBA,EAA0B9wvC,eAAesq5B,WAKpCtnB,EAAWsnB,IAIjB,OAAQ9zC,GAGXz82B,KAAKm82B,cAAgBM,EAFrBz82B,KAAKm82B,cAAgBo3Y,EAAec,oBAItCr0vC,KAAKu0vC,cAAe,CACtB,CACF,GAUFyC,6BAA8B,CAC5B/gvC,IAAK,WACH,OAAOjW,KAAKs0vC,6BACd,GAUFzxhC,WAAY,CACV5sN,IAAK,WACH,OAAOjW,KAAKoh7B,WACd,KAIJ,MAAM61U,EAAmB,IAAI,IACvBC,EAAiB,IAAI,IACrBC,EAAuC,IAAI,IAC3CC,EAA4C,IAAI,IAChDC,EAA+B,IAAI,IACnCC,EAA+B,IAAI,IAQzC/D,EAAe9yvC,UAAU8tB,OAAS,SAAU4usB,GAC1C,MAAMz+G,EAAW1+mB,KAAK6zoB,UAChBgmO,EAAW752B,KAAKox5B,UAGtBpx5B,KAAKm82B,cAAc5t1B,OAAO4usB,GAG1B,MAAMvmtB,EAAUumtB,EAAWvmtB,QAC3B,IAAK5W,KAAKyh1B,OAUR,OA0PJ,SAA0B1ivB,EAAW2/gB,EAAU9nmB,GAC7C,MAAMij2B,EAAW96wB,EAAUqyzB,UAE3BryzB,EAAUk/yB,QAAUrn4B,EAAQ6g4B,aAAa,CAAE14yB,cAC3C86wB,EAAS29B,UAAY,IAAMvs1B,MAAM8zC,EAAUk/yB,QAAQp8zB,MAAOg4xB,EAAS29B,WAEnE,MAAM,cAAE6rW,EAAeD,eAAgBmU,GAAkBx4pC,EAAU27pB,OACnE37pB,EAAUm3pC,kBAAmB,OAAM7S,GAAe,GAGlD,MAAMp6W,EAAalqyB,EAAUy2yB,YAC7B,IAAK,MAAMxv4B,KAAOuxvC,EAChB,GAAIA,EAActxvC,eAAeD,GAAM,CACrC,MAAMZ,EAAO,KAAKY,KAGd,OAAQij4B,EAAW7j4B,MACrB,OACE,iCAAiCA,yBAKrC6j4B,EAAW7j4B,GAAQ,WACjB,OAAOmyvC,EAAcvxvC,EACvB,CACF,CAuCF,GAlCA+4F,EAAU0ouB,YAAc,IAAWx8wB,MACjCyzjB,EAASlyiB,WACTuyB,EAAU0ouB,aAEZoyC,EAASrtyB,WAAa,IAAWvhB,MAC/B8zC,EAAU0ouB,YACVoyC,EAASrtyB,YAEXuyB,EAAUgx3B,eAAiB,IAAW9k6B,MACpCyzjB,EAASwwW,eAAiB,IAAWllX,KACrCjrgB,EAAUgx3B,gBAEZl2G,EAASq1G,cAAgB,IAAWjk6B,MAClC8zC,EAAUgx3B,eACVl2G,EAASq1G,eAEXnw3B,EAAUix3B,cAAgB,IAAW/k6B,MACnCyzjB,EAASywW,cAAgB,IAAWnlX,KACpCjrgB,EAAUix3B,eAEZn2G,EAASs1G,aAAe,IAAWlk6B,MACjC8zC,EAAUix3B,cACVn2G,EAASs1G,cAEXpw3B,EAAU60pC,iBAAmB,IAAW16tC,IACtC6lE,EAAU0ouB,YACV1ouB,EAAUgx3B,eACVhx3B,EAAU60pC,kBAEZ70pC,EAAU60pC,iBAAmB,IAAW16tC,IACtC6lE,EAAU60pC,iBACV70pC,EAAUix3B,cACVjx3B,EAAU60pC,kBAERl1oB,EAASmyW,gBAAkB,IAAmBN,KAAM,CACtD,MAAMinS,EAAmBz4pC,EAAU60pC,iBAAiBtwuC,EACpDy7E,EAAU60pC,iBAAiBtwuC,EAAIy7E,EAAU60pC,iBAAiB/wuC,EAC1Dk8E,EAAU60pC,iBAAiB/wuC,EAAI20uC,CACjC,CACA39Y,EAAS+7Y,gBAAkB,IAAW3qsC,MACpC8zC,EAAU60pC,iBACV/5Y,EAAS+7Y,iBAEX72pC,EAAU4x3B,iBAAmBjyW,EAASoyW,iBAAmB,EAGzD,MAAM2mS,EAAgB/4oB,EAAS+4oB,eAAiB,EAChD14pC,EAAUilmC,WAAa,IAAI,IAAejlmC,EAAWnoF,EAAS6gvC,GAC9D14pC,EAAU8jI,WAAW0jvB,mBACnBxn3B,EAAUilmC,WAAW1sG,wBA0OzB,SAA8B11H,EAAW/nH,GACvCA,EAASu7Y,0BAA4BxzR,EAAU81R,oBAC/C79Y,EAASy7Y,8BAAgC,IAAWrqsC,MAClD226B,EAAU+1R,wBACV99Y,EAASy7Y,+BAEXz7Y,EAASw7Y,8BAAgCzzR,EAAUg2R,wBAEnD,MAAM,aAAEjmC,GAAiB/vP,EACnBkwP,EAAcH,EAAa,GACjC93W,EAAS67Y,oBAAsB,IAAIl1vC,MAAMmxtC,EAAa1utC,QACtD,IAAK,IAAIgC,EAAI,EAAGA,EAAI0stC,EAAa1utC,OAAQgC,IACvC402B,EAAS67Y,oBAAoBzwvC,GAAK0stC,EAAa1stC,GAAG0woB,QAEpDkkO,EAAS87Y,sBAAwB,IAAW1qsC,MAC1C6mqC,EAAYz6H,WACZx9O,EAAS87Y,sBAEb,CA3PEkC,CAAqB94pC,EAAUilmC,WAAYnqV,EAC7C,CArVIi+Y,CAAiB93vC,KAAM0+mB,EAAU9nmB,QAGjCumtB,EAAW1kjB,YAAY7zK,KAAK,KAC1B5E,KAAKyh1B,QAAS,GACP,IAUX,MAAMs2a,EAAavB,EAAwBx2vC,MACrCg+8B,EA0NR,SAAoCj/2B,EAAWo+nB,GAC7C,MAAM,qBAAE8hE,EAAoB,mCAAEC,GAC5B/hE,EAEF,OACEp+nB,EAAU8z2B,wBAA0B5zK,GACpClgsB,EAAU+z2B,sCACR5zK,KAKJngsB,EAAU8z2B,sBAAwB5zK,EAClClgsB,EAAU+z2B,oCACR5zK,GACK,EACT,CA1O8B29V,CAA2B78nC,KAAMm9tB,GAO7D,IANI46hB,GAAc/5S,KAChBh+8B,KAAK2zvC,cAAgBgD,EAAyB32vC,MAqkBlD,SAA2B++F,GACzB,MAAM,cAAEskpC,GAAkBtkpC,EAAU27pB,OAC9Bs9f,EAAsBzxvC,OAAOC,KAAK68uC,GAAelutC,KACpDnvB,GAAQq9uC,EAAcr9uC,KAAS+4F,EAAUm3pC,iBAAiBlwvC,IAK7D,OAHIgyvC,IACFj5pC,EAAUm3pC,kBAAmB,OAAM7S,GAAe,IAE7C2U,CACT,CA7kBQC,CAAkBj4vC,QACpBA,KAAKu0vC,cAAe,KAGnBv0vC,KAAK2zvC,cACR,OAGF3zvC,KAAK06vB,OAAOupf,qBAAqB9mhB,GAGjC,MAAMozf,EA4kBR,SAA6B2nC,EAAwB7joB,GACnD,KAAK,OAAQ6joB,MAA4B,OAAQ7joB,GAC/C,OAAO,EAET,IACInwW,EADA/tN,EAAOk+jB,EAAMv6d,YAEbq+lC,EAAoBD,EAAuBnvvC,QAAQotD,GACnDgisC,GAAqB,EACvBj0+B,EAAeg0+B,EAAuBjivC,IAAIkivC,IAG1CA,GAAqBA,EACjBA,IAAsBD,EAAuBj1vC,QAE/Ck1vC,EAAoBD,EAAuBj1vC,OAAS,EACpDihR,EAAeg0+B,EAAuBjivC,IAAIkivC,GAC1ChisC,EAAO+tN,EAAariN,OAGpBqiN,EAAeg0+B,EAAuBjivC,IAAIkivC,GAC1ChisC,EAAO+tN,EAAahgQ,QAIxB,MAAM23zB,EAAe,IAAW54L,kBAC9B/+X,EAAariN,KACbqiN,EAAahgQ,OAQf,OAAOi0uC,EANwB,IAAWl1mB,kBACxC9slB,EACA+tN,EAAahgQ,OAEoB23zB,CAGrC,CA/mB2Bu8a,CACvB15oB,EAASw5oB,uBACTl4vC,KAAKo/xB,QAGDwiM,EAAY5h+B,KAAKgksC,WACjBq0D,EAAiBz2R,EAAU02R,aAajC,GAXA12R,EAAUrz8B,OACR4usB,EACAozf,EACAwnC,EACA/3vC,KAAKm1vC,gBAGHkD,IAAmBz2R,EAAU02R,eAC/Bt4vC,KAAKu0vC,cAAe,IAGjB3yR,EAAUmwP,aAAanwP,EAAUh58B,UACpC,OASF,GANI5oB,KAAKi1vC,YAo2BX,SAAmBxlsC,EAAM0tqB,GACvB,MAAMykQ,EAAYny6B,EAAKu0oC,WACjB74B,EAAY17mC,EAAKulsC,gBAGvB,SAASuD,EAAwB/xD,EAAUQ,EAAQnlnC,EAAOq5Q,GACxDiw0B,EAAUjyoC,IAAI,CACZmmZ,UAAW,CAACmnxB,EAAUQ,GACtB7/rC,MAAO+zV,EACPote,SAAU,IAASsxC,SAAS,QAAS,CACnC/3xB,MAAOA,KAGb,CAEA,SAAS22qC,EAAgBrroB,EAAqBtriB,EAAOq5Q,GAGnD,MAAMu6T,EAAUtoC,EAAoB+wH,iBACpCq6gB,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,GACvDq95B,EAAwB9imB,EAAQ,GAAIA,EAAQ,GAAI5zkB,EAAOq5Q,EACzD,CA5BAiw0B,EAAUvi+B,YAkDV4vjC,EAAgB/osC,EAAKirsB,OAAOvtI,oBAAqB,IAAMghC,MAAO,GApB9D,SAASsqmB,EAAS35mB,GAChB,IAAK8iV,EAAUmwP,aAAajzkB,GAC1B,OAGF,MAAM5hhB,EAAQ4hhB,EAAK5hhB,MAEbg+N,EAAYntV,KAAK8R,IAAI,EADJ,EAC0B9R,KAAKiV,IAAI,EAAKk6G,IAEzDr7C,EADS,CAAC,IAAM8qkB,IAAK,IAAMrC,KAAM,IAAMxE,MACxB5ohB,EAAQ,GAI7B,GAFAs7nC,EAAgB15mB,EAAK3xB,oBAAqBtriB,EAAOq5Q,IAE7C,OAAQ4jT,EAAKh6oB,UACf,IAAK,IAAIG,EAAI,EAAGA,EAAI,EAAGA,IACrBwzvC,EAAS35mB,EAAKh6oB,SAASG,GAG7B,CAIAwzvC,CAAS72R,EAAUh58B,UAGnB2vuC,EACE,IAAWvupB,KACX0upB,GACA,IAAM/rmB,IAJc,IAOtB4rmB,EACE,IAAWvupB,KACX2upB,GACA,IAAMrumB,KAVc,IAatBiumB,EACE,IAAWvupB,KACX4upB,GACA,IAAM9ymB,KAhBc,IAoBtBqlhB,EAAU58oC,OAAO4usB,EACnB,CA/6BI05hB,CAAU72vC,KAAMm9tB,GAGdn9tB,KAAKk1vC,eACP,OAIEl1vC,KAAKw26B,eAAiBr5M,EAAW2mR,cACnC9j/B,KAAKw26B,aAAer5M,EAAW2mR,YAC/B9j/B,KAAKu0vC,cAAe,GAItB,MAAMsE,EAilBR,SAA8B95pC,EAAWo+nB,GACvC,MAAMq/I,EAAiBz9wB,EAAUy9wB,eACjC,KAAK,OAAQA,GACX,OAAO,EAGTA,EAAeju1B,OAAO4usB,GAEtB,MAAM,oBAAEkhP,EAAmB,QAAEp47B,GAAYu21B,EAEzC,GAAIv21B,EAAS,CACX,MAAM4z1B,EAAW96wB,EAAUqyzB,UAC3Bv3C,EAASm4H,sBAAwBx1H,EAAe7mO,QAShDkkO,EAAS6jR,qBAAuB,IAAQ/h4B,UACtC,IAAQsye,uBACN,IAAQljlB,QACNyxtB,EAAe99K,YACfm7K,EAAS6jR,sBAEX3+hC,EAAU01pC,+BACV56Y,EAAS6jR,sBAEX7jR,EAAS6jR,qBAEb,CAEA,OACE3+hC,EAAUq32B,uBAAyBiI,GACnCt/2B,EAAUo1pC,yBAA2BluuC,KAIvC84E,EAAUq32B,qBAAuBiI,EACjCt/2B,EAAUo1pC,uBAAyBluuC,GAE5B,EACT,CA7nBgCq47B,CAAqBt+8B,KAAMm9tB,GACrD07hB,IACF74vC,KAAKu0vC,cAAe,GAGtB,MAAMuE,EAAkBl3R,EAAUk3R,iBAC9B,OAAQA,KACVj/Y,EAAS07Y,sBAAwB3zR,EAAUk3R,gBAC3Cj/Y,EAAS47Y,0BAA4B,IAAWxqsC,MAC9C226B,EAAUm3R,oBACVl/Y,EAAS47Y,2BAEX57Y,EAAS27Y,0BAA4B5zR,EAAUo3R,qBAI7Ch5vC,KAAKu0vC,gBACP,OAAuBv0vC,KAAM4W,GAC7B5W,KAAKu0vC,cAAe,GAItB,MAAM0E,EACJrivC,EAAQwl3B,aAAajjM,gBACjB,oBAAEhsE,GAAwBntnB,KAAK06vB,OAC/Bw+f,EAutBR,SACE/roB,EACAgsoB,EACAnguC,GAEA,MAAMoguC,EAAgC,IAAQ9q8B,wBAC5C6+T,EAAoBC,SACpBD,EAAoBzhmB,OACpByruC,GAEIkC,EAAqC,IAAQ1muC,SACjDwmuC,EACAC,EACAhC,GAGF,IAIIkC,EAJAC,GAAWz6uC,OAAO26M,UAClB+/hC,GAAW16uC,OAAO26M,UAClBggiC,GAAW36uC,OAAO26M,UAClBigiC,GAAW56uC,OAAO26M,UAItB,MAAMkgiC,EAAmBC,GACnBvogB,EAAgB57F,EAAQxypB,OAC9B,IAAKq2vC,EAAc,EAAGA,EAAcjogB,EAAeiogB,IACjD,IAAQjhoB,iBACNghoB,EACA5jmB,EAAQ6jmB,GACRK,EAAiBL,IAIrB,IAAKA,EAAc,EAAGA,EAAcjogB,EAAeiogB,IAAe,CAChE,MAAM1yuC,EAAW+yuC,EAAiBL,GAClC,GAAI1yuC,EAAS/D,IAAM+D,EAASxF,EAAG,CAE7B,MAAMy4uC,EAAOjzuC,EAASvD,EAAIuD,EAASxF,EAC7B04uC,EAAOlzuC,EAAStD,EAAIsD,EAASxF,EACnCm4uC,EAAUxrvC,KAAKqV,IAAIm2uC,EAASM,GAC5BL,EAAUzrvC,KAAK8R,IAAI25uC,EAASK,GAC5BJ,EAAU1rvC,KAAKqV,IAAIq2uC,EAASK,GAC5BJ,EAAU3rvC,KAAK8R,IAAI65uC,EAASI,EAC9B,MACE,IAAK,IAAI9pa,EAAgB,EAAGA,EAAgB,EAAGA,IAAiB,CAC9D,MAEM+pa,EAAmBJ,EADvBK,GAAoC,EAAdV,EAAkBtpa,IAE1C,GAAI+pa,EAAiBl3uC,IAAMk3uC,EAAiB34uC,EAAG,CAE7C,MAAM64uC,EAA8BrzuC,EAAS/D,EAAI+D,EAASxF,EAGpD60C,EACJgksC,GACCA,GAHDF,EAAiBl3uC,EAAIk3uC,EAAiB34uC,IAKlCgrY,EAAY,IAAW/jH,KAC3BzhR,EACAmzuC,EACA9jsC,EACAghsC,GAEIiD,EAAgB9t2B,EAAU/oY,EAAI+oY,EAAUhrY,EACxC+4uC,EAAgB/t2B,EAAU9oY,EAAI8oY,EAAUhrY,EAC9Cm4uC,EAAUxrvC,KAAKqV,IAAIm2uC,EAASW,GAC5BV,EAAUzrvC,KAAK8R,IAAI25uC,EAASU,GAC5BT,EAAU1rvC,KAAKqV,IAAIq2uC,EAASU,GAC5BT,EAAU3rvC,KAAK8R,IAAI65uC,EAASS,EAC9B,CACF,CAEJ,CASA,OANAZ,EAAU,IAAW5ngC,MAAM4ngC,GAAU,EAAK,GAC1CE,EAAU,IAAW9ngC,MAAM8ngC,GAAU,EAAK,GAC1CD,EAAU,IAAW7ngC,MAAM6ngC,GAAU,EAAK,GAC1CE,EAAU,IAAW/ngC,MAAM+ngC,GAAU,EAAK,GACjC,IAAWrnoB,aAAaknoB,EAASE,EAASD,EAASE,EAAS1guC,EAGvE,CAzyBkBohuC,CACdjtoB,EACA8roB,EACA/B,GASF,GAJgB,IAAdgC,EAAQ71uC,GACM,IAAd61uC,EAAQ51uC,IACO,IAAf41uC,EAAQr2uC,IACO,IAAfq2uC,EAAQ93uC,EAER,OAKFy41B,EAASm8Y,+BAAiC,IAAW/qsC,MACnDiusC,EACAr/Y,EAASm8Y,gCAEX,MAAMxM,EAA+B5yuC,EAAQwl3B,aAAapjM,YACpDywjB,EAA+B,IAAQx7gB,uBAC3CjuuB,KAAK00vC,+BACLlL,EACA3vY,EAAS4vY,8BAGXzpvC,KAAK20vC,2BAA6B,IAAQh5/B,UACxC8t/B,EACAzpvC,KAAK20vC,4BAGP,MAAM0F,EACJzjvC,EAAQwl3B,aAAa2B,oBACvBlkB,EAAS6vY,8BAAgC,IAAQ/2tC,SAC/C3yB,KAAK40vC,gCACLyF,EACAxgZ,EAAS6vY,+BAEX7vY,EAASwvY,oBAAsB,IAAQj7nB,gBACrCpunB,KAAK00vC,+BACLv3hB,EAAW7zV,OAAOumd,WAClBgqB,EAASwvY,qBAEXxvY,EAASg8Y,qBAAuB,IAAQx9nB,iBACtCr4nB,KAAK40vC,gCACLz3hB,EAAW7zV,OAAOwre,YAClB+E,EAASg8Y,sBAEX,MAAMC,EA2DR,SAA4B/2pC,EAAWw+3B,EAAevk8B,GACpD,MAAMshuC,EAAUv7pC,EAAU27pB,OAAO2pf,2BAC/B9mR,EACA85R,GAGIvmS,EAAkB/x3B,EAAU4x3B,iBAC5B4pS,EAAW,IAAMzpS,EAAkB,GAEzC,OAAO,IAAWz+V,aAChBiooB,EAAQj3uC,EAAIk3uC,EACZD,EAAQh3uC,EAAIi3uC,EACZD,EAAQz3uC,EAAI03uC,EACZzpS,EAAkB,EAClB937B,EAEJ,CA3EgCwhuC,CAC5Bx6vC,KACA652B,EAASwvY,oBACTiO,GAEFz9Y,EAASi8Y,sBAAwB,IAAWzjoB,aAC1CtknB,KAAKG,MAAM4nvC,EAAsBzyuC,GACjCtV,KAAKG,MAAM4nvC,EAAsBxyuC,GACjCvV,KAAKG,MAAM4nvC,EAAsBjzuC,GACjCizuC,EAAsB10uC,EACtBy41B,EAASi8Y,uBAEXj8Y,EAASk8Y,aAAe,IAAW1joB,aACjCyjoB,EAAsBzyuC,EAAItV,KAAKG,MAAM4nvC,EAAsBzyuC,GAC3DyyuC,EAAsBxyuC,EAAIvV,KAAKG,MAAM4nvC,EAAsBxyuC,GAC3DwyuC,EAAsBjzuC,EAAI9U,KAAKG,MAAM4nvC,EAAsBjzuC,GAC3Dg31B,EAASk8Y,cAEXl8Y,EAASwH,SAAWrh3B,KAAK80vC,oBAe3B,SAA+B/1pC,GAC7B,MAAM,aAAE4ynC,GAAiB5ynC,EAAUilmC,WACnC,IAAK,IAAI/+rC,EAAI,EAAGA,EAAI0stC,EAAa1utC,SAAUgC,EACzC0stC,EAAa1stC,GAAG+ylC,gBAAkBj5/B,EAAU84/B,gBAEhD,CAlBE4iK,CAAsBz6vC,MAoBxB,SAAiC++F,EAAWo+nB,GAC1C,MAAM08I,EAAW96wB,EAAUqyzB,WACrB,kBAAE8xV,GAAsBnkpC,EAAU27pB,QACnC,OAAQwof,KAGbA,EAAkB30tC,OAAO4usB,EAAYp+nB,EAAU41pC,4BAC/C96Y,EAASo8Y,yBAA2B/S,EAAkBvtmB,QACxD,CA3BE+knB,CAAwB16vC,KAAMm9tB,GAG9B,MAAM+hL,EAAU/hL,EAAW0lN,OAAOr0sB,KAC9BxuO,KAAKw0vC,iBACLr3hB,EAAW0lN,OAAOw+E,UAChBrhgC,KAAK26vC,sBACL36vC,KAAK237B,aACXz4C,EAAQ/sO,eAAiBnyqB,KAAK06vB,OAAO3oI,eACrCorG,EAAWyzH,YAAYhs1B,KAAKs64B,EAC9B,EA8CA,MAAM07W,EAA2B,IAAI,IAC/BC,EAA4B,IAAI,IAChCC,EAA4B,IAAI,IA4HtC,SAAStE,EAAwBz3pC,GAO/B,OALEg8pC,EAAYh8pC,EAAW,eAAgB,mBACvCg8pC,EAAYh8pC,EAAW,aAAc,iBACrCg8pC,EAAYh8pC,EAAW,aAAc,iBACrCg8pC,EAAYh8pC,EAAW,qBAAsB,yBAC7Cg8pC,EAAYh8pC,EAAW,qBAAsB,yBAC3B,CACtB,CAWA,SAASg8pC,EAAYh8pC,EAAWi8pC,EAAaC,GAC3C,MAAMC,EAAWn8pC,EAAUi8pC,GACrBG,EAAWp8pC,EAAUk8pC,GAErBn96B,GAAWo96B,EAASjspC,OAAOkspC,GAIjC,OAHIr96B,GACFo96B,EAASjwsC,MAAMkwsC,GAEVr96B,EAAU,EAAI,CACvB,CAEA,MAAMs96B,EAA8B,IAAI,IAClCC,EAA8B,IAAI,IAClCC,EAAsC,IAAI,IAC1CC,EAAsC,IAAI,IAC1CC,EAAgC,IAAI,IACpCC,EAA6B,IAAI,IAQvC,SAAS9E,EAAyB53pC,GAChC,MAAMkgsB,EAAuBlgsB,EAAU8z2B,sBACjC3zK,EACJngsB,EAAU+z2B,oCACN4oT,EAAuB,IAAWzwsC,MACtC8zC,EAAU8w3B,WACVurS,GAEIO,EAAuB,IAAW1wsC,MACtC8zC,EAAU+w3B,WACVurS,GAEIO,EAA+B,IAAW3wsC,MAC9C8zC,EAAUg1pC,mBACVuH,GAEIO,EAA+B,IAAW5wsC,MAC9C8zC,EAAUk1pC,mBACVsH,GAEIO,EAAyB,IAAQ7wsC,MACrC8zC,EAAUumvB,aACVk2a,GAGF,GAAIz8pC,EAAUqvL,QAAU,IAAeiisB,UAErCqrS,EAAqB74uC,EAAI,IAAqB8ojB,UAC5C5se,EAAU8w3B,WAAWht8B,EACrBo8wB,EACAC,GAEFy8d,EAAqB94uC,EAAI,IAAqB8ojB,UAC5C5se,EAAU+w3B,WAAWjt8B,EACrBo8wB,EACAC,GAEF08d,EAA6B/4uC,EAAI,IAAqB8ojB,UACpD5se,EAAUg1pC,mBAAmBlxuC,EAC7Bo8wB,EACAC,GAEF28d,EAA6Bh5uC,EAAI,IAAqB8ojB,UACpD5se,EAAUk1pC,mBAAmBpxuC,EAC7Bo8wB,EACAC,OAEG,CAEL,MAAM68d,EAAoB,IAAW1poB,aACnC,EACA,EACA4sK,EACA27d,GAEF,IAAQhzhB,gBACNk0hB,EACAC,EACAD,GAEF,IAAQ3thB,sBACN2thB,EA2DN,SAA2C/8pC,GACzC,MAAMkgsB,EAAuBlgsB,EAAU8z2B,sBACjC3zK,EACJngsB,EAAU+z2B,qCAGN,eACJuc,EAAiB,IAAQv+T,SAAQ,gBACjCs+T,EAAkB,IAAQt+T,UACxB/xjB,EAAU80iB,UAGRmonB,EAAgB,IAAQxuoB,eAC5B6hW,EACAwrS,GAEIoB,EAAqB,IAAQ7toB,gBACjCrvhB,EAAUumvB,aACV02a,EACAnB,GAEIqB,EAAoB,IAAQ9toB,gBAChCghW,EACA6sS,EACApB,GAKIpnZ,EADY,IAAUloT,MACSmkE,wBACnCwsoB,EACApB,GAGF,IAAIqB,EAAe,GACf,OAAQ1oZ,KACV0oZ,EAAe1oZ,EAAmB3x2B,QAKpC,MAAMs6vC,EAAoB,IAAqBzwrB,UAC7CwwrB,EACAl9d,EACAC,GAGF,OAAO,IAAW7sK,aAChB,EACA,GACC+poB,EAAoBD,GAAgBl9d,EACrCo9d,EAEJ,CA/GMC,CAAkCv9pC,GAClC+8pC,EAEJ,CAEA,MAAMp9oB,EAAW3/gB,EAAU80iB,UACrBw7U,EAAiB3wW,EAAS2wW,gBAAkB,IAAQv+T,SACpDs+T,EAAkB1wW,EAAS0wW,iBAAmB,IAAQt+T,SAGtDyrmB,EAAsB,IAAQtuhB,uBAClCmhP,EACA0sS,EACAL,GAEF,IAAQxthB,uBACNsuhB,EACAltS,EACAktS,GAGF,MAAMnu+B,EAAQrvL,EAAU27pB,OAQxB,QAPgBtse,EAAM7/P,OACpBguuC,EACAb,EACAC,EACAC,EACAC,KAMF98pC,EAAU01pC,+BAAiC,IAAQxpsC,MACjDmjO,EAAMihsB,eACNtw3B,EAAU01pC,gCAEZ11pC,EAAU21pC,+BAAiC,IAAQ3pmC,QACjDhsD,EAAU01pC,+BACV11pC,EAAU21pC,gCAEZ31pC,EAAU61pC,gCAAkC,IAAQ9xjB,WAClD/jmB,EAAU21pC,+BACV31pC,EAAU61pC,kCAGL,EACT,CAEA,MAAMyH,EAAiC,IAAI,IAwN3C9I,EAAe9yvC,UAAU05B,YAAc,WACrC,OAAO,CACT,EAiBAo5tC,EAAe9yvC,UAAU26B,QAAU,WACjC,MAAMov2B,EAAcxq4B,KAAK237B,cACrB,OAAQntD,KACVA,EAAYxB,cACVwB,EAAYxB,eAAiBwB,EAAYxB,cAAc5t2B,WAE3D,MAAMohuC,EAAkBx8vC,KAAKw0vC,iBAW7B,OAVI,OAAQgI,KACVA,EAAgBxzX,cACdwzX,EAAgBxzX,eAAiBwzX,EAAgBxzX,cAAc5t2B,WAGnEp7B,KAAKi+4B,QAAUj+4B,KAAKi+4B,SAAWj+4B,KAAKi+4B,QAAQ7i3B,UAC5Cp7B,KAAKgksC,WAAahksC,KAAKgksC,YAAchksC,KAAKgksC,WAAW5oqC,UACrDp7B,KAAK6iO,WAAW0jvB,mBAAqB,EACrCvm9B,KAAKi82B,gBAAkBj82B,KAAKi82B,iBAAmBj82B,KAAKi82B,gBAAgB7g1B,WAE7D,OAAcp7B,KACvB,EAEA,MAAMy1pB,EAAU,IAAIj1pB,MAClB,IAAI,KAAY,GAAM,GAAM,EAAK,GACjC,IAAI,IAAW,GAAO,GAAM,EAAK,GACjC,IAAI,KAAY,EAAK,GAAO,EAAK,GACjC,IAAI,IAAW,EAAM,GAAO,EAAK,GACjC,IAAI,KAAY,GAAM,EAAK,EAAM,GACjC,IAAI,IAAW,GAAO,EAAK,EAAM,GACjC,IAAI,KAAY,EAAK,EAAM,EAAM,GACjC,IAAI,IAAW,EAAM,EAAM,EAAM,IAE7Bw5vC,GAAwB,IAAIx5vC,MAChC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAGIo5vC,GAA0B,IAAIp5vC,MAClC,IAAI,IACJ,IAAI,IACJ,IAAI,IACJ,IAAI,IACJ,IAAI,IACJ,IAAI,IACJ,IAAI,IACJ,IAAI,KAuGAi8vC,GAAuB,IACvB/D,GAAgB,IAAI,IAAW+D,GAAsB,EAAK,GAC1D9D,GAAgB,IAAI,IAAW,EAAK8D,GAAsB,GAC1D7D,GAAgB,IAAI,IAAW,EAAK,EAAK6D,IA6G/C,SAASC,KACP18vC,KAAKogJ,OAAQ,EACbpgJ,KAAKouR,MAAQ,IAAeujsB,IAC5B3x9B,KAAKwsE,WAAa,IAAI,IAAW,EAAG,EAAG,GACvCxsE,KAAKimE,MAAQ,CAAC,QACdjmE,KAAKioE,MAAQ,CAAC,IAAa2t2B,QAC3B516B,KAAKiv9B,eAAiB,CAAC,IAAsB4nI,SAC7C72lC,KAAK0v9B,iBAAmB,CAC1B,CAhBA6jS,EAAec,oBAAsB,IAAI,IAAa,CACpDtlW,mBAAoB,mJAiBtB2tW,GAAqBj8vC,UAAU+x9B,YAAc,SAAUzy9B,GAErD,KADkB,OAAQA,GAAYA,EAAQ0y9B,WAAa,EAAK,IAC/C,EACf,OAGF,MAAM116B,EAAU,IAAI,IAAa,CAAEsikB,SAAU,CAAC,IAAIl8lB,aAAa,MAC/D,OAAO8X,QAAQC,QAAQ6hB,EACzB,EAEAw2sC,EAAeC,gBAAkB,IAAIkJ,GAErC,SAAe,8BAAc,I,2DCxlE7B,SAASC,IACP,IAAetnlB,yBACjB,CAEA9uqB,OAAOgwE,iBAAiBomrC,EAAcl8vC,UAAW,CAS/C2u9B,gBAAiB,CACfn58B,IAAK,IAAeo/pB,yBAWtBg6S,eAAgB,CACdp58B,IAAK,IAAeo/pB,yBAUtBjnZ,MAAO,CACLn4Q,IAAK,IAAeo/pB,yBAWtBi6S,UAAW,CACTr58B,IAAK,IAAeo/pB,yBAWtBk6S,UAAW,CACTt58B,IAAK,IAAeo/pB,yBAUtB7omB,WAAY,CACVv2D,IAAK,IAAeo/pB,yBAWtB65S,cAAe,CACbj58B,IAAK,IAAeo/pB,yBAWtB85S,aAAc,CACZl58B,IAAK,IAAeo/pB,yBAUtBpvmB,MAAO,CACLhwD,IAAK,IAAeo/pB,yBAUtBptmB,MAAO,CACLhyD,IAAK,IAAeo/pB,yBAUtB45S,eAAgB,CACdh58B,IAAK,IAAeo/pB,yBAUtBm6S,cAAe,CACbv58B,IAAK,IAAeo/pB,yBAUtBo6S,cAAe,CACbx58B,IAAK,IAAeo/pB,yBAYtBq6S,iBAAkB,CAChBz58B,IAAK,IAAeo/pB,yBAStBy7S,gBAAiB,CACf768B,IAAK,IAAeo/pB,yBAWtBoilB,cAAe,CACbxhvC,IAAK,IAAeo/pB,yBAYtB6ilB,uBAAwB,CACtBjivC,IAAK,IAAeo/pB,2BAexBsnlB,EAAcl8vC,UAAU+x9B,YAAc,SAAUzy9B,GAC9C,IAAes1qB,yBACjB,EAEA,QAAe,8BAAa,I,+hCCkB5B,QAAe,4BA3Nf,SAA8Bt2kB,GAC5B,MAAMwuzB,EAAgB,IAAI,IAU1Bvt5B,KAAKut5B,cAAgBA,EAGrB,MAAM9wC,EAAe19wB,EAAUo9wB,cACzB8sB,GAAa,OAAQlqyB,EAAUy2yB,YAAa/4B,EAAawsB,YAC/DlqyB,EAAUy2yB,YAAcvM,EAExB,MAAM2zX,EAAuBngZ,EAAa5C,SAC1C,IAAK,MAAM02C,KAAeqsW,EACxB,GAAIA,EAAqB32vC,eAAesq5B,GAAc,CACpD,MAAM4D,EAAUyoW,EAAqBrsW,GACrChD,EAAcb,WACZyH,EAAQ5r5B,KACRgo5B,EACA,IAAkBR,SAEtB,CAIFxC,EAAcb,WACZ,YACA,wCACA,IAAkBqD,UASpB/v5B,KAAKip4B,WAAaA,EAElB,MAAMzsB,EAAiBz9wB,EAAUk9wB,gBAC3B4gZ,GACJ,OAAQrgZ,IAAmBA,EAAev21B,QACtCu21B,EAAev52B,OACf,EAENjD,KAAKw82B,eAAiBA,EACtBx82B,KAAK68vC,qBAAuBA,EAE5B,MAAM3Z,EAAoBnkpC,EAAU27pB,OAAOwof,kBACrC4Z,EAA0B5Z,GAAmBjgvC,QAAU,EAE7DjD,KAAKkjvC,kBAAoBA,EACzBljvC,KAAK88vC,wBAA0BA,EAG/BvvW,EAAcP,eAAe,CAAC,MAE1BjuzB,EAAU2/gB,SAASmyW,gBAAkB,IAAmBN,MAC1DhjE,EAAcxB,UACZ,2BACA5m5B,EACA,IAAkB4q5B,UAGtB,MAAMomW,EAAYp3pC,EAAU80iB,UAAUzlX,MACpB,QAAd+n+B,EACF5oW,EAAcxB,UAAU,iBAAa5m5B,EAAW,IAAkB4q5B,UAC3C,aAAdomW,EACT5oW,EAAcxB,UACZ,sBACA5m5B,EACA,IAAkB4q5B,UAEG,cAAdomW,GACT5oW,EAAcxB,UACZ,uBACA5m5B,EACA,IAAkB4q5B,UAItBxC,EAAcL,iBAAiB,CAC7BzwC,EAAasyC,mBACb,UACA,IACA,IACA,IACA,IACA,IACA,MAGE8tW,EAAuB,IACzBtvW,EAAcxB,UACZ,uBACA5m5B,EACA,IAAkB4q5B,UAEpBxC,EAAcxB,UACZ,wBACA8wW,EACA,IAAkB9sW,UAEhBvzC,EAAe4zH,sBACjB7iF,EAAcxB,UACZ,6BACA5m5B,EACA,IAAkB4q5B,WAKpBhxzB,EAAUg2pC,YACZxnW,EAAcxB,UACZ,kBACA5m5B,EACA,IAAkB4q5B,UAIJ,QAAdomW,EACF5oW,EAAcL,iBAAiB,CAC7B,IACA,IACA,MAEqB,aAAdipW,EACT5oW,EAAcL,iBAAiB,CAC7B,IACA,IACA,IACA,MAEqB,cAAdipW,GACT5oW,EAAcL,iBAAiB,CAC7B,IACA,IACA,IACA,MAIJK,EAAcL,iBAAiB,CAAC,MAEhC,MAAM9+nB,EAAQrvL,EAAU27pB,OAClBqigB,EAAe3u+B,EAAMi19B,cAC3B,IAAK,MAAMr9uC,KAAO+2vC,EAChB,GAAIA,EAAa92vC,eAAeD,GAAM,CACpC,IAAIX,EAAQ03vC,EAAa/2vC,IAGrB,OAAQX,KACVA,GAAkB,IAAVA,OAAiBF,EAAYE,EACrCko5B,EAAcxB,UAAU/l5B,EAAKX,EAAO,IAAkB0q5B,UAE1D,CAIF,IAAIg0V,EAAoB319B,EAAMk19B,iCAC1BuZ,EAAuB,IACzBtvW,EAAcxB,UACZ,qCACAg4V,EACA,IAAkBh0V,UAES,IAAzB8sW,EACF9Y,GAAqB,EACZvnY,EAAe4zH,qBACxB2zQ,GAAqB,EAErBA,GAAqB,GAGrBhlpC,EAAUg2pC,aACZxnW,EAAcxB,UACZ,2BACAg4V,EACA,IAAkBh0V,UAEpBg0V,GAAqB,GAEvBx2V,EAAcxB,UACZ,qBACAg4V,EACA,IAAkBh0V,UAKjB,IAAW9gzB,OAAOlQ,EAAUmw3B,cAAe,IAAWllX,OACtD,IAAW/6f,OAAOlQ,EAAUow3B,aAAc,IAAWnlX,OAEtDujT,EAAcxB,UAAU,eAAW5m5B,EAAW,IAAkB4q5B,UAK9DhxzB,EAAUy30B,cACZjpB,EAAcxB,UACZ,2BACA5m5B,EACA,IAAkB4q5B,UAGtB,MAAM6xE,EAAY7i4B,EAAUilmC,WAC5Bz2S,EAAcxB,UACZ,eACA,GAAG61E,EAAU02R,eACb,IAAkBvoW,SAEtB,EAEmC,I,2DC3OnC,SAASitW,IACP,IAAe3nlB,yBACjB,CAEA9uqB,OAAOgwE,iBAAiBymrC,EAAWv8vC,UAAW,CAS5C0snB,oBAAqB,CACnBl3mB,IAAK,IAAeo/pB,yBAWtBtjD,eAAgB,CACd97mB,IAAK,IAAeo/pB,yBAWtB8tkB,eAAgB,CACdltuC,IAAK,IAAeo/pB,yBAWtBg6S,eAAgB,CACdp58B,IAAK,IAAeo/pB,yBAStB+tkB,eAAgB,CACdntuC,IAAK,IAAeo/pB,yBAStBgukB,cAAe,CACbptuC,IAAK,IAAeo/pB,yBAUtBiukB,iCAAkC,CAChCrtuC,IAAK,IAAeo/pB,2BAcxB2nlB,EAAWv8vC,UAAU8tB,OAAS,IAAe8mpB,wBAO7C2nlB,EAAWv8vC,UAAUwjvC,qBACnB,IAAe5ukB,wBASjB2nlB,EAAWv8vC,UAAU4jvC,2BACnB,IAAehvkB,wBAYjB2nlB,EAAWv8vC,UAAU8utC,kCACnB,IAAel6iB,wBAWjB2nlB,EAAWv8vC,UAAUgkvC,oCACnB,IAAepvkB,wBAWjB2nlB,EAAW3a,iBAAmB,IAAehtkB,wBAW7C2nlB,EAAW1a,iBAAmB,IAAejtkB,wBAE7C,QAAe,8BAAU,I,yFCtKzB,MAAM4nlB,EAAiB,CAQrBtrS,IAAK,MAQLtB,UAAW,YAQX6B,SAAU,WAQZ+qS,aAA8B,SAAU9G,GACtC,OAAQA,GACN,KAAK8G,EAAetrS,IAClB,OAAO,IAAc0wR,iBACvB,KAAK4a,EAAe5sS,UAClB,OAAO,IAAoBgyR,iBAC7B,KAAK4a,EAAe/qS,SAClB,OAAO,IAAmBmwR,iBAE5B,QACE,MAAM,IAAI,IAAe,sBAAsB8T,KAGrD,EAOA8G,aAA8B,SAAU9G,GACtC,OAAQA,GACN,KAAK8G,EAAetrS,IAClB,OAAO,IAAc2wR,iBACvB,KAAK2a,EAAe5sS,UAClB,OAAO,IAAoBiyR,iBAC7B,KAAK2a,EAAe/qS,SAClB,OAAO,IAAmBowR,iBAE5B,QACE,MAAM,IAAI,IAAe,sBAAsB6T,KAGrD,EAYA8G,oBAAqC,SAAU9G,GAC7C,OAAQA,GACN,KAAK8G,EAAetrS,IAClB,OAAO,IACT,KAAKsrS,EAAe5sS,UAClB,OAAO,IACT,KAAK4sS,EAAe/qS,SAClB,OAAO,IAET,QACE,MAAM,IAAI,IAAe,sBAAsBikS,KAGrD,GAEA,EAAe5vvC,OAAOivmB,OAAOynpB,E,uOCxE7B,SAASC,EACPn+pC,EACAnoF,EACA6gvC,EACA0F,GAEA,MAAM,SAAEz+oB,EAAQ,WAAElyiB,EAAU,gBAAEoprC,GAAoB72pC,GAC5C,MAAE92B,EAAK,eAAEgn5B,GAAmBvwW,EAGhCy+oB,GADE,OAAQA,GACuBpvvC,KAAKqV,IACpCrV,KAAK8R,IAAI,EAAGs9uC,GACZ,WAG+B,UAOnCn9vC,KAAKkj1B,WAAankvB,EAMlB/+F,KAAKs3lC,wBAA0B,EAM/Bt3lC,KAAK2xtC,aAAe,IAAInxtC,MAAMynE,EAAMhlE,QAEpC,MAAMm6vC,GAAoB,OAAQ1+oB,EAASgxW,kBACvChxW,EAASgxW,kBACT,OAAQhxW,EAASoyW,kBACd,GAAKpyW,EAASoyW,gBAAkB,GAAK,OACtC3r9B,EAEN,IAAK,IAAIF,EAAI,EAAGA,EAAIgjE,EAAMhlE,OAAQgC,IAAK,CACrC,MAAMsD,EAAO0/D,EAAMhjE,GACbq76B,EAAiB,IAAakxC,kBAAkBjp9B,GAChDi7nB,EAAgByrV,EAAehq9B,GAErCjF,KAAK2xtC,aAAa1stC,GAAK,IAAI,IACzB2R,EACAg/uC,EACAt1U,EACA98S,EACA25nB,EACAC,GAGFp9vC,KAAKs3lC,yBACHt3lC,KAAK2xtC,aAAa1stC,GAAGqylC,uBACzB,CAEA,MAAM5nI,EAAmB1v9B,KAAK2xtC,aAAa,GAAGjiQ,iBAM9C1v9B,KAAKq9vC,0BAA4B,EAMjCr9vC,KAAKs9vC,aAAc,EAMnBt9vC,KAAKyzvC,qBAAuBzzvC,KAAKkj1B,WAAWuwa,uBAAwB,EAMpEzzvC,KAAKu9vC,aAAe,EAEpB,MAAMnv+B,EAAQrvL,EAAU27pB,OAMxB16vB,KAAK4oB,SAAW,IAAI,IAAY,EAAG,EAAG,EAAG,OAAGzjB,EAAWipR,EAAO5hN,GAM9DxsE,KAAKw9vC,eAAiB,IAAI,IAAyB,CACjDznlB,cAAe25S,EACfhkvB,WAAY,IAAa072B,qBAO3BpnlC,KAAKy9vC,2BAA6B,IAAIj9vC,MAAMkv9B,GAM5C1v9B,KAAK09vC,+BAAiC,EAMtC19vC,KAAK29vC,4BAA8B,IAAIn9vC,MAAMkv9B,GAM7C1v9B,KAAK49vC,eAAiBnG,EAMtBz3vC,KAAKs4vC,kBAAenzvC,EAMpBnF,KAAK69vC,kBAAoB,EAMzB79vC,KAAK89vC,6BAA+B,IAAIt9vC,MAAMi3vC,GAM9Cz3vC,KAAKu19B,qBAAsB,EAE3B,MAAMwoS,EAA8B/9vC,KAAK89vC,6BACzCC,EAA4B,GAAK,EACjCA,EAA4BtG,EAAgB,GAAK,EACjDuG,EACED,EACA,EACAtG,EAAgB,EAChB,GAGF,MAEMG,EAA0B7pvC,KAAKG,MACnC+vvC,oBAEIC,EAAgCnwvC,KAAKC,KACzC0h9B,EAAmBkoS,GAOrB53vC,KAAK03vC,oBAAsB,IAAI,IAAQ,CACrC9gvC,QAASA,EACTiuuB,YAAa,IAAYjC,KACzB9zF,cAAe,IAAchpC,cAC7BmwB,OAAO,EACP9uoB,MAjBoC,KAkBpCrF,OAAQo8vC,EACR9kX,QAAS,IAAI,IAAQ,CACnBoC,mBAAoB,IAA0Bj/F,QAC9Ck/F,oBAAqB,IAA2Bl/F,YAQpDv8yB,KAAK43vC,wBAA0BA,EAM/B53vC,KAAK23vC,wBAA0B,IAAI,IACjC,aACA,EAAMuG,GAQRl+vC,KAAK84vC,qBAAkB3zvC,EAOvBnF,KAAKg5vC,yBAAsB7zvC,EAO3BnF,KAAK+4vC,oBAAsB,IAAI,GACjC,CAcA,SAASiF,EAA6BtzvC,EAAKwZ,EAAO/V,EAAK6iI,GACrD,GAAI9sH,EAAQ/V,EACV,OAEF,MAAM2nK,EAAM/nK,KAAKG,OAAOgW,EAAQ/V,GAAO,GACvCzD,EAAIorK,GAAO9kC,EACXgtnC,EAA6BtzvC,EAAKwZ,EAAO4xJ,EAAM,EAAG9kC,EAAQ,GAC1DgtnC,EAA6BtzvC,EAAKorK,EAAM,EAAG3nK,EAAK6iI,EAAQ,EAC1D,CAmKA,SAASmtnC,EAAkC1usC,EAAMlqC,GAE/C,GADAA,EAAKg47B,uBAAuB9t5B,EAAKyzxB,WAAWxoF,SACxC,OAAQn1uB,EAAKzgB,UACf,IAAK,IAAIG,EAAI,EAAGA,EAAI,EAAGA,IAErBk5vC,EAAkC1usC,EADpBlqC,EAAKzgB,SAASG,GAIlC,CAUA,SAASut9B,EAAY/i6B,EAAMs0oC,GACzB,GACEt0oC,EAAK4tsC,2BACLH,EAAekB,gCAEf,OAGF,MACM1/oB,EADYjvjB,EAAKyzxB,WACIxkO,UACrB,SAAEm0W,EAAQ,YAAEo0H,GAAgB88G,EAClC,IACE,OAAQrllB,EAASoyW,kBACjBm2H,EAAY/p9B,OAASwhf,EAASoyW,gBAE9B,OAiBF,MAAMutS,EAAoB,CACxB5rS,UAAWw0H,EAAY/p9B,MACvBw11B,MAAOu0H,EAAY5jkC,EACnBsv8B,MAAOs0H,EAAY3jkC,EACnBsv8B,MAAOq0H,EAAYpkkC,EACnBgw8B,SAAUA,GAENz62B,EAAUsmgB,EAAS8zW,YAAY6rS,IAChC,OAAQjmpC,KAGb3oD,EAAK4tsC,4BACLt5D,EAAahtrC,MAAQ,IAAa+vkC,UAAUtqE,UAC5Cpk6B,EAAQj9E,KA3BR,SAA4BnC,GAC1By2B,EAAK4tsC,4BACLt5D,EAAahnpC,QAAU/jB,EACvB+qqC,EAAahtrC,OAAQ,OAAQiiB,GACzB,IAAa8tjC,UAAUjsI,WACvB,IAAaisI,UAAUC,WAC7B,GAqBiClqgC,MAnBjC,SAA4BrpE,GAC1Bi8C,EAAK4tsC,4BACLt5D,EAAahtrC,MAAQ,IAAa+vkC,UAAUj6U,OAC5Cp9sB,EAAKyzxB,WAAWu0I,WAAW10U,YAC7B,GAgBF,CAgIA,SAASu7mB,EAAiBngvC,EAAGC,GAC3B,OAAID,EAAEgpkC,0BAA4B/okC,EAAE+okC,wBAC3B/okC,EAAEooE,SAAWroE,EAAEqoE,SAEjBpoE,EAAE+okC,wBAA0BhpkC,EAAEgpkC,uBACvC,CAWA,SAASo3K,EAAiBl/oB,EAAUuiX,GAClC,MAAM3+9B,EAAS2+9B,EAAU1+I,WAAWxkO,SAASz2iB,MAAMhlE,OACnD,IAAKzC,MAAMK,QAAQw+mB,IAAaA,EAASp8mB,SAAWA,EAClD,OAAO,EAET,MAAM,aAAE0utC,GAAiB/vP,EACzB,IAAK,IAAI389B,EAAI,EAAGA,EAAIhC,EAAQgC,IAAK,CAC/B,MAAM,kBAAEsylC,EAAiB,aAAEb,GAAiBi7H,EAAa1stC,IACnD,EAAEoe,EAAC,EAAEC,EAAC,EAAET,GAAM00kC,EAIdhxe,EAHiBljmB,EAAIC,EAAIT,EAGS6zkC,EACxC,GAFar3e,EAASp6mB,GAEbhC,SAAWsjnB,EAClB,OAAO,CAEX,CACA,OAAO,CACT,CAUA,SAASi4oB,EACPv3K,EACA0oI,EACAlgqC,EACA0tqB,GAEA,MAAM,OAAE7zV,EAAM,QAAE1yX,EAAO,WAAE8nuB,EAAU,YAAEykJ,GAAgBhmK,GAC/C,WAAE0yH,EAAU,QAAEhhiB,GAAYy6E,EAE1Bum1B,EADej5sC,EAAQu3Z,oBAAsBuwU,EACD7vb,EAAQ6xb,eAK1D,GAHAumW,EAAY2oI,wBAAwB//X,EAAYggY,IAEhDF,EAAsB1oI,EAAY7ngC,WAAW+9oB,EAAYwyf,MAC7B,IAAcp9iB,aACxC,OAEF00a,EAAYooI,mBAAqBlsV,EAEjC,MAAMpkyB,EAAYtvC,EAAKyzxB,WACjB90jB,EAAQrvL,EAAU27pB,OAClB+jgB,EAAyB1/pC,EAAU652B,iBACnC8lT,EAAgBjvsC,EAAK+tsC,eACrB/F,EAAgBhosC,EAAKmusC,eACrBe,EAAmB,IAAWhtgC,MAClC5jP,KAAKG,MAAMuhD,EAAKousC,mBAChB,EACApG,EAAgB,GAEZmH,EAAeD,EAAmB,EAIxC,GAAsB,IAAlBlH,EACFxwK,EAAYwqI,mBAAmB,QAC1B,GAAIxqI,EAAY8nI,cAAc9rtC,SAAWw0vC,EAC9C,IAAK,IAAI9zuC,EAAI,EAAGA,EAAI8zuC,EAAe9zuC,IACjCsjkC,EAAYwqI,mBAAmB9tsC,GAGnC,MAAM,iBAAEi17B,EAAgB,cAAEm2Q,GAAkB9nI,EACtC43K,GA3M2Bx7uC,EA2Mau17B,IA1MlC,EAAMv17B,GADpB,IAAmCA,EA6MjC,IAAIy7uC,GAAoB,EACxB,IAAK,IAAI75vC,EAAI,EAAGA,EAAI8ptC,EAAc9rtC,OAAQgC,IAAK,CAC7C,MAAM8+rC,EAAegrB,EAAc9ptC,GAEnC8+rC,EAAav9mC,SACX,GAAOq4qC,EACPE,EACEJ,EACA56D,EAAalxO,SACb+rS,EACAnvsC,GAIFs0oC,EAAahtrC,QAAU,IAAa+vkC,UAAUC,aAC9Cg9G,EAAahtrC,QAAU,IAAa+vkC,UAAUj6U,QAC9Ck3b,EAAav9mC,YAAc1nE,OAAO26M,WAElCiliC,EAAcxvnC,OAAO60jC,GAEnBA,EAAahtrC,QAAU,IAAa+vkC,UAAU30J,SAChD2sU,GAAoB,EAExB,CAEA,GAAIlmT,EAAmB6lT,IAA2BK,EAEhD73K,EAAYnilC,cAAWK,MAFzB,EAMK,OAAQ8hlC,EAAYnilC,WACvBmilC,EAAYwoI,oBAAoBrh8B,GAElC,IAAK,IAAImjvB,EAAa,EAAGA,EAAa,EAAGA,IAEvCitP,EADcv3K,EAAYnilC,SAASysgC,GACRo+M,EAAqBlgqC,EAAM0tqB,EAPxD,CASF,CAYA,SAAS4hiB,EAAiBJ,EAAkB9rS,EAAU+rS,EAAch9R,GAClE,MAAMo9R,EAAqBjxvC,KAAKqV,IAC9BrV,KAAK0a,IAAIoq8B,EAAW8rS,GACpB5wvC,KAAK0a,IAAIoq8B,EAAW+rS,IAEhBK,EAAwBlxvC,KAAK8R,IACjC8+uC,EACA/8R,EAAUg8R,eAAiBgB,EAAe,EAC1C,GAEIM,EAAiBnxvC,KAAKiV,IAC1B,EAAMg8uC,EAAqBC,EAC3B,GAEIE,EAAmBpxvC,KAAK27M,KAC3Bk4wB,EAAUk8R,6BAA6BjrS,IAE1C,OAAO,IAAWxqrB,KAChB829B,EACAD,EACA,IAAO,IAAOA,EAElB,CAhhBAhC,EAAez8vC,UAAUwjsC,iBAAmB,SAAU/8G,GACpD,OAAOlnlC,KAAK29vC,4BAA4Bl8vC,KAAK,SAAUsisC,GACrD,OAAOA,EAAa78G,mBAAqBA,CAC3C,EACF,EAYAg2K,EAAekB,gCAAkC,GAQjDlB,EAAez8vC,UAAU8tB,OAAS,SAChC4usB,EACAozf,EACA6uC,EACAC,GAEA,MAAMtgqC,EAAY/+F,KAAKkj1B,WACjBts0B,EAAUumtB,EAAWvmtB,QACrB848B,EAAmB1v9B,KAAK2xtC,aAAa,GAAGjiQ,iBACxC+nS,EAAgBz3vC,KAAK49vC,eAErB9G,EAAmB/3pC,EAAU81pC,kBAG7ByK,GAFsBxI,EAAmB,EAEJ,EAAI,IAD1BW,EAAgB,EAC+B,EAAI,GACxEz3vC,KAAKs4vC,aAAegH,EAEpB,MAAMC,EAAeD,GAAe,EACpC,GAAIC,KAAiB,OAAQv/vC,KAAK84vC,iBAAkB,CAClD,MAAM0G,EAAqB,EACrBC,EAA4B,KAC5BzG,EAAsBjrvC,KAAKG,MAC/BuxvC,EAA4BD,GAExBE,EAA4B3xvC,KAAKC,KACrC0h9B,EAAmBspS,GAGrBh5vC,KAAK84vC,gBAAkB,IAAI,IAAQ,CACjClivC,QAASA,EACTiuuB,YAAa,IAAYjC,KACzB9zF,cAAe,IAAchpC,cAC7BmwB,OAAO,EACP9uoB,MAAOs4vC,EACP39vC,OAAQ49vC,EACRtmX,QAAS,IAAI,IAAQ,CACnBoC,mBAAoB,IAA0Bj/F,QAC9Ck/F,oBAAqB,IAA2Bl/F,YAGpDv8yB,KAAK+4vC,oBAAsB,IAAW1moB,aACpC,EAAMotoB,EACN,EAAMC,EACN1/vC,KAAK+4vC,qBAEP/4vC,KAAKg5vC,oBAAsBA,CAC7B,MAAYuG,IAAgB,OAAQv/vC,KAAK84vC,mBACvC94vC,KAAK84vC,gBAAkB94vC,KAAK84vC,gBAAgB19tC,WAa9C,GAVAp7B,KAAK69vC,kBAAoB,IAAWlsgC,MAClC4+9B,EACA,EACAknC,EAAgB,GAGd2H,GACFjB,EAAkCn+vC,KAAMA,KAAK4oB,UAG3Cy2uC,EACF,OAGFr/vC,KAAKu9vC,aAAepgiB,EAAWgmK,YAC/B,MAAMw8X,GAAa,UA4KrB,SAA6BlwsC,EAAM0tqB,GACjC,MAAMgmK,EAAc1z0B,EAAK8tsC,aACnBmB,EAAgBjvsC,EAAK+tsC,eAG3BkB,EAAcl3vC,QACdg3vC,EACE/usC,EAAK7mC,SACL,IAAc6ppB,mBACdhjnB,EACA0tqB,GAIF,MAAMyiiB,EAA4BnwsC,EAAKgusC,2BACvC,IACIoC,EADAC,EAAgC,EAEpC,KAAOpB,EAAcz7vC,OAAS,GAC5B48vC,EAA2BnB,EAAcznlB,gBACzC4olB,EAAyB14K,wBAA0BhkN,EACnDy8X,EAA0BE,GACxBD,EACFC,IAEFrwsC,EAAKiusC,+BAAiCoC,CACxC,CApMEC,CAAoB//vC,KAAMm9tB,GA4M5B,SAA6B1tqB,EAAM0tqB,GACjC,MAAM20f,EAAcriqC,EAAKkiqC,aAAa,GAChCquC,EAAkCluC,EAAYl6H,cAI9CqoK,EAA6BxwsC,EAAKkusC,4BACxCsC,EAA2Bh9vC,OAAS+8vC,EACpCC,EAA2BjgvC,KAAKs+uC,GAIhC,MAAMsB,EAA4BnwsC,EAAKgusC,2BACjCqC,EAAgCrwsC,EAAKiusC,+BAC3C,IAAIwC,EAAiB,EACjBC,EAAa,EAEjB,IACE,IAAIC,EAAgC,EACpCA,EAAgCN,EAChCM,IACA,CACA,MAAMP,EACJD,EAA0BQ,GAE5B,GACEP,EAAyB9ovC,QAAU,IAAa+vkC,UAAU30J,aACjBht7B,IAAzC06vC,EAAyB54K,cAMvB44K,EAAyB9ovC,QAAU,IAAa+vkC,UAAU7uJ,UAC5Du6B,EAAY/i6B,EAAMowsC,GAEhBA,EAAyB9ovC,QAAU,IAAa+vkC,UAAUjsI,YAAY,CACxE,MAAM,QAAE995B,GAAY8itC,EAEpB,GADA9itC,EAAQxuB,OAAOkhC,EAAKyzxB,WAAY/lH,IAC3BpgrB,EAAQqjG,MACX,SAEF,IAAKm+mC,EAAiBxhtC,EAAQsikB,SAAU5vjB,GAAO,CAC7CowsC,EAAyB9itC,aAAU53C,EACnC06vC,EAAyB9ovC,MAAQ,IAAa+vkC,UAAUj6U,OACxDp9sB,EAAKyzxB,WAAWu0I,WAAW10U,aAC3B,QACF,CACA,IAAIs9mB,EAAe,EACnB,GAAIvuC,EAAYh9+B,SAAU,CAExBurhC,EAAeL,EAAkC,EAAIE,EACrDA,IAEA,MAAMI,EAAcL,EAA2BI,GAC/C5wsC,EAAKyzxB,WAAWs0I,WAAWz0U,aAC3Bu9mB,EAAYr5K,YAAYyqI,oBACtB4uC,EACA7wsC,EAAKkiqC,aAET,MACE0uC,EAAeL,EAAkCG,EACjDA,IAEFN,EAAyB54K,YAAY4qI,8BACnCguC,EACApwsC,EAAKkiqC,cAEPkuC,EAAyB9ovC,MAAQ,IAAa+vkC,UAAU30J,OACxD8tU,EAA2BI,GAAgBR,EAC3CpwsC,EAAKyzxB,WAAWq0I,SAASx0U,YAC3B,CACF,CACF,CApREw9mB,CAAoBvgwC,KAAMm9tB,GAC1B,MAAMqjiB,GAAa,UA6mBrB,SAAwB/wsC,EAAM6vsC,EAAaxI,GACzC,MAAM2J,EAAYhxsC,EAAKyzxB,WAAW8xH,kBAC5Bu7Q,EAAmB9gqC,EAAKousC,kBACxB16X,EAAc1z0B,EAAK8tsC,aACnBgC,EAAeD,GAAe,EAEpC,IAAIoB,EAAoB,EACpBC,EAAgB,EACpB,MAAMC,EAAyB,GACzBC,EAAqB,GA2F3B,MAAMj4uC,EAAW6mC,EAAK7mC,SACtBA,EAAS0nsC,0CAA0CC,GAC/C3nsC,EAASmpsC,aAAa5uV,IApF1B,SAAS29X,EACPv7uC,EACAw7uC,EACAC,EACAC,EACAC,GAEA,IAAIC,GAAwB,EAC5B,IAAI,OAAQ57uC,EAAKzgB,UACf,IAAK,IAAI+E,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMogxB,EAAY1kwB,EAAKzgB,SAAS+E,GAChCogxB,EAAUqmc,0CAA0CC,GAChDtmc,EAAU8nc,aAAa5uV,KACzBg+X,GAAwB,EAE5B,CAGF,GAAIA,EAAuB,CAEzBP,EAAuBM,GACpBE,GAA0B,GAAML,EACnCH,EAAuBI,GAAmBC,EAC1CP,IAIAQ,EAAuC,GADvCD,EAAoBF,GACuB,EAC3C,IAAK,IAAIn13B,EAAK,EAAGA,EAAK,EAAGA,IAIvBk13B,EAHcv7uC,EAAKzgB,SAAS8mY,GAC5Bm13B,EAAmBL,EACnBM,EAAqC,EAAnBD,EAAuB,EAKvCE,EACAC,EAAmBt13B,EAGzB,KAAO,CAIL,GADAn8U,EAAKyzxB,WAAWw0I,YAAY30U,aACxBw8mB,EAAc,CAChB,MAAMnsJ,EAA0B,EAAhButJ,EACV58D,EAAex+qC,EAAK2psC,+BACpBptI,EAAkBv8jC,EAAK23G,MAAQ6mkC,EAAa98G,YAAY/p9B,MAExDl0G,EAAa+6qC,EAAa98G,YAAY1jlC,OACtC89vC,GAAqB,OAAQr4uC,GAC/BA,EAAWkmsC,+BACXnrB,EAEEu9D,EA0Dd,SAAoB/7uC,EAAMk7uC,EAAW3J,GACnC,QAAoB3xvC,IAAhBogB,EAAKhiB,OACP,OAAO,EAET,MAAMkjiB,EAAMlhhB,EAAKqz7B,iBAGX2oT,IADWd,EAAYh6tB,IADXlhhB,EAAKhiB,OAAOq18B,iBACmBnya,GACtBqwtB,EAAmB,GAAOA,EAErD,OAAO,IAAWnlgC,MAAM4vgC,EAAS,EAAK,EACxC,CApEwBC,CAAWj8uC,EAAMk7uC,EAAW3J,GACtC2K,EAAuB3/K,EACvB4/K,EAAwB,EACxBC,EAAwB59D,EAAa78G,iBACrC06K,EAAyBP,EAAmBn6K,iBAElD25K,EAAmBztJ,EAAU,GAAKkuJ,EAClCT,EAAmBztJ,EAAU,GAAKquJ,EAClCZ,EAAmBztJ,EAAU,GAAKsuJ,EAClCb,EAAmBztJ,EAAU,GAAKuuJ,EAClCd,EAAmBztJ,EAAU,GAAKwuJ,EAElChB,EAAuBM,GACpBE,GAAsB,GAAMT,CACjC,KAAO,CACL,MAAM58D,EAAex+qC,EAAK2psC,+BAEpBvqnB,EACgB,IAFEp/kB,EAAK23G,MAAQ6mkC,EAAa98G,YAAY/p9B,MAGxDkkoC,EACAA,EACNR,EAAuBM,GACpBv8pB,GAAQ,GAAMo/lB,EAAa78G,gBAChC,CACAy5K,GACF,CACF,CAKEG,CAAYl4uC,EAAU,EAAG,EAAG,EAAG,GA+CnC,SAAmCtnB,EAAMugwC,EAAeC,EAAansnB,GACnE,MAAM+gd,EAAe,IAAY5xW,iBAAiBnvG,EAAQkvG,aACpD86V,EAAY5xkC,KAAKC,KAAK1M,EAAK2B,OA5C/B,GA6CI8+vC,EAAYh0vC,KAAK8R,IACrB,EA9CA,EA+CgB9R,KAAKqV,IAAIu8jC,EAAWmiL,IAEhCE,EAAaj0vC,KAAK8R,IAAI,EAAG9R,KAAKC,KAAK2xkC,EAAYmiL,IAE/ChgM,EAAc,IAAIt/iC,WAAWu/uC,EAAYC,EAAatrK,GAC5D,IAAK,IAAIzxlC,EAAI,EAAGA,EAAI3D,EAAK2B,OAAQgC,IAAK,CACpC,MAAMjB,EAAM1C,EAAK2D,GACXi3J,EAAaj3J,EAAIyxlC,EACvB,IAAK,IAAInriC,EAAI,EAAGA,EAAImriC,EAAcnriC,IAChCu2gC,EAAY5l6B,EAAa3wG,GAAMvnD,IAAa,EAAJunD,EAAU,GAEtD,CAEA,MAMMutiC,EAAc,CAClB1nlC,OAPa,CACb49oB,gBAAiB8ya,EACjB36jC,MAAO46vC,EACPjgwC,OAAQkgwC,GAKRhkpB,QAAS,EACTC,QAAS,GAGX03B,EAAQynQ,SAAS07M,EACnB,CA3EEmpK,CACErB,EACA,EACAnxsC,EAAKmosC,wBACLnosC,EAAKiosC,qBAEH6H,GA+EN,SAA+Bj+vC,EAAMugwC,EAAeC,EAAansnB,GAC/D,MAAM+gd,EAAe,IAAY5xW,iBAAiBnvG,EAAQkvG,aAEpD86V,EAAY5xkC,KAAKC,KAAK1M,EAAK2B,OADZ,GAEf8+vC,EAAYh0vC,KAAK8R,IACrB,EAjFE,EAkFc9R,KAAKqV,IAAIu8jC,EAAWmiL,IAEhCE,EAAaj0vC,KAAK8R,IAAI,EAAG9R,KAAKC,KAAK2xkC,EAAYmiL,IAE/ChgM,EAAc,IAAIt/iC,WAAWu/uC,EAAYC,EAAatrK,GAC5D,IAAK,IAAIjzE,EAAY,EAAGA,EAAYk8D,EAAWl8D,IAAa,CAC1D,MAAMy+O,EAAW5gwC,EAVE,EAUGmihC,EAA2B,GAC3C0+O,EAA8B7gwC,EAXjB,EAWsBmihC,EAA2B,GAC9D2+O,EAA0B9gwC,EAZb,EAYkBmihC,EAA2B,GAC1D4+O,EAAmC/gwC,EAbtB,EAa2BmihC,EAA2B,GACnE6+O,EAA+BhhwC,EAdlB,EAcuBmihC,EAA2B,GAE/D8+O,EAAqB,IAAW5wgC,MACpC5jP,KAAKG,MAAM,MAAQg0vC,GACnB,EACA,OAEFpgM,EAAwB,EAAZr+C,EAAgB,GAAM8+O,IAAuB,EAAK,IAC9DzgM,EAAwB,EAAZr+C,EAAgB,GAAM8+O,IAAuB,EAAK,IAC9DzgM,EAAwB,EAAZr+C,EAAgB,GAAmC,IAA9B0+O,EACjCrgM,EAAwB,EAAZr+C,EAAgB,GAA+B,IAA1B2+O,EACjCtgM,EAAwB,EAAZr+C,EAAgB,GACzB4+O,IAAqC,EAAK,IAC7CvgM,EAAwB,EAAZr+C,EAAgB,GACzB4+O,IAAqC,EAAK,IAC7CvgM,EAAwB,EAAZr+C,EAAgB,GACzB6+O,IAAiC,EAAK,IACzCxgM,EAAwB,EAAZr+C,EAAgB,GACzB6+O,IAAiC,EAAK,GAC3C,CAEA,MAMMxpK,EAAc,CAClB1nlC,OAPa,CACb49oB,gBAAiB8ya,EACjB36jC,MAAO46vC,EACPjgwC,OAAQkgwC,GAKRhkpB,QAAS,EACTC,QAAS,GAGX03B,EAAQynQ,SAAS07M,EACnB,CAhII0pK,CACE3B,EACA,EACApxsC,EAAKupsC,oBACLvpsC,EAAKqpsC,gBAGX,CApuBE2J,CAAeziwC,KAAMs/vC,EAAaxI,GAClC,MAAM4L,GAAa,SAEbC,EACJ5jqC,EAAUq43B,aAAa1jS,kBAAoB,GAC3C30lB,EAAUs43B,eAAe3jS,kBAAoB,GAC7C30lB,EAAUu43B,mBAAmB5jS,kBAAoB,GAE/C1zrB,KAAKs9vC,aAAet9vC,KAAKyzvC,sBAAwBkP,IAobvD,SACElzsC,EACA0tqB,EACAyliB,EACAC,EACAC,GAEA,MAAMrL,EAAgBhosC,EAAKmusC,eACrBh1uC,EAAW6mC,EAAK7mC,SAEhBm6uC,EAAiBx8vC,OAAOC,KAAK,IAAasglC,WAAW7jlC,OACrD+/vC,EAAuB,IAAIxiwC,MAAMuiwC,GACjCE,EAAmB,IAAIziwC,MAAMuiwC,GACnC,IAAIG,EAAiB,EAErB,IACE,IAAIC,EAAiB,EACrBA,EAAiBJ,EACjBI,IACA,CACA,MAAMC,EAAgB,IAAI5iwC,MAAMi3vC,GAAe5yrC,KAAK,GACpDm+rC,EAAqBG,GAAkBC,EACvCH,EAAiBE,GAAkB,CACrC,EAKA,SAASE,EAAkB99uC,GACzB,MAAMwpsC,EAAgBxpsC,EAAKwpsC,cAC3B,IACE,IAAImB,EAAgB,EACpBA,EAAgBnB,EAAc9rtC,OAC9BittC,IACA,CACA,MAAMnsB,EAAegrB,EAAcmB,GAC7Br9P,EAAWkxO,EAAalxO,SACxB978B,EAAQgtrC,EAAahtrC,MAC3BisvC,EAAqBjsvC,GAAO878B,IAAa,EACzCowS,EAAiBlsvC,IAAU,EAC3BmsvC,GACF,CAEA,IAAI,OAAQ39uC,EAAKzgB,UACf,IAAK,IAAIysgC,EAAa,EAAGA,EAAa,EAAGA,IAEvC8xP,EADc99uC,EAAKzgB,SAASysgC,GAIlC,EACA8xP,CAAkBz6uC,GAElB6mC,EAAKyzxB,WAAWrgnB,WAAWw9uB,8BACzB4iT,EAAiB,IAAan8K,UAAU30J,QAC1C1i4B,EAAKyzxB,WAAWrgnB,WAAW/pM,QAAUoquC,EAErC,MAAMloT,EACJioT,EAAiB,IAAan8K,UAAUtqE,WACpC3gD,EACJonS,EAAiB,IAAan8K,UAAUjsI,YAEpC6hB,EACJ1hB,IACEvr5B,EAAKyzxB,WAAWrgnB,WAAWm4uB,yBAC7B6gB,IACEps6B,EAAKyzxB,WAAWrgnB,WAAWg5vB,wBAE3Ba,GACFv/P,EAAW1kjB,YAAY7zK,KAAK,WAM1B,OALA6qD,EAAKyzxB,WAAWk0I,aAAar0U,WAC3Bi4T,EACA6gB,IAGK,CACT,GAGFps6B,EAAKyzxB,WAAWrgnB,WAAWm4uB,wBAA0BA,EACrDvr5B,EAAKyzxB,WAAWrgnB,WAAWg5vB,wBAA0BA,EAsBrD,GAdIa,IAL0B,IAA5B1hB,GAA6D,IAA5B6gB,KAMjC1+P,EAAW1kjB,YAAY7zK,KAAK,WAE1B,OADA6qD,EAAKyzxB,WAAWm0I,eAAet0U,cACxB,CACT,GACKtzlB,EAAK8l6B,sBACR9l6B,EAAK8l6B,qBAAsB,EAC3Bp4P,EAAW1kjB,YAAY7zK,KAAK,WAE1B,OADA6qD,EAAKyzxB,WAAWo0I,mBAAmBv0U,cAC5B,CACT,MAICtzlB,EAAK6tsC,YACR,OAGF,MAAMgG,EAA2B,cAC/BN,EAAqB,IAAal8K,UAAU30J,UAExCoxU,EACJ,aAAaN,EAAiB,IAAan8K,UAAU7uJ,0BACvCgrU,EAAiB,IAAan8K,UAAUtqE,4BACvCymP,EAAiB,IAAan8K,UAAUjsI,yBAC5CooT,EAAiB,IAAan8K,UAAU30J,qBACxC8wU,EAAiB,IAAan8K,UAAUj6U,0BACnCo2f,EAAiB,IAAan8K,UAAUC,yBAC9Cm8K,IAQNM,EACJ,SANAz1vC,KAAKqZ,MAA4B,IAAtBw7uC,GAA6B,cAExC70vC,KAAKqZ,MAA6B,IAAvBy7uC,GAA8B,cAChB90vC,KAAKqZ,MAAoB,IAAd07uC,GAAqB,MAO3DnnuC,QAAQutF,IACN,GAAGo6oC,QAA+BC,QAA0BC,IAEhE,CAnjBIrnS,CACEn89B,KACAm9tB,EAL0BqjiB,EAAab,EACZ+C,EAAalC,EACtBkC,EAAa/C,EASrC,EAOAzC,EAAez8vC,UAAUsxtC,aAAe,SAAUjzkB,GAChD,OAAOA,EAAKizkB,aAAa/xtC,KAAKu9vC,aAChC,EAYAL,EAAez8vC,UAAU05B,YAAc,WACrC,OAAO,CACT,EAiBA+iuC,EAAez8vC,UAAU26B,QAAU,WACjC,MAAMu2rC,EAAe3xtC,KAAK2xtC,aACpB8xC,EAAoB9xC,EAAa1utC,OACvC,IAAK,IAAIgC,EAAI,EAAGA,EAAIw+vC,EAAmBx+vC,IACrC0stC,EAAa1stC,GAAK0stC,EAAa1stC,IAAM0stC,EAAa1stC,GAAGm2B,UASvD,OAPAp7B,KAAKs3lC,wBAA0B,EAE/Bt3lC,KAAK03vC,oBACH13vC,KAAK03vC,qBAAuB13vC,KAAK03vC,oBAAoBt8tC,UAEvDp7B,KAAK84vC,gBAAkB94vC,KAAK84vC,iBAAmB94vC,KAAK84vC,gBAAgB19tC,WAE7D,OAAcp7B,KACvB,EA+gBA,MAAMohwC,EAEM,EAFNA,EAIE,EAJFA,EAQqB,EA8P3B,EAAe,8BAAc,I,mJCnrC7B,MAAMsC,EAAsB,CAC1B,KACA,KACA,KACA,KACA,MAQIC,EAAsB,CAC1B,KACA,MAyEF,SAASC,EAA6B7jwC,GAIpC,GAHAA,EAAUA,GAAW,IAAOw8mB,eAGvB,OAAQx8mB,EAAQoN,KACnB,MAAM,IAAI,IAAe,4BAE3B,KAAK,OAAQpN,EAAQ4hf,QACnB,MAAM,IAAI,IAAe,+BAI3B,IAAI,OAAQ5hf,EAAQs1P,UAAW,OAAQt1P,EAAQs0nB,OAC7C,MAAM,IAAI,IACR,8DAIJr0nB,KAAK8y6B,mBAAgB3t6B,EACrBnF,KAAK+y6B,wBAAqB5t6B,EAC1BnF,KAAKgz6B,sBAAmB7t6B,EACxBnF,KAAKiz6B,wBAAqB9t6B,EAC1BnF,KAAKkz6B,sBAAmB/t6B,EACxBnF,KAAKmz6B,iBAAchu6B,EACnBnF,KAAKoz6B,wBAAqBju6B,EAC1BnF,KAAKqz6B,mBAAgBlu6B,EACrBnF,KAAKsz6B,gCAA6Bnu6B,EAClCnF,KAAKuz6B,iCAA8Bpu6B,EAEnCnF,KAAK6jwC,mBAAqB9jwC,EAAQ+jwC,mBAAqB/jwC,EAAQoN,IAE/D,MAAMw0lB,EAAW,IAASqd,eAAej/mB,EAAQoN,KAC3C42vC,EAAsB,IAAS/kpB,eAAeh/mB,KAAK6jwC,oBAEzDliqB,EAASk8H,mBACP+liB,EAA6BI,mBAC7B,GAEFD,EAAoBlmiB,mBAClB+liB,EAA6BK,iCAC7B,IAGE,OAAQlkwC,EAAQ82I,aAClB8qd,EAASk8H,mBAAmBqmiB,EAAkBnkwC,EAAQ82I,cAGpD,OAAQ92I,EAAQokwC,2BAClBJ,EAAoBlmiB,mBAClBqmiB,EAAkBnkwC,EAAQokwC,2BAI9B,MAAM10sC,EAAOzvD,KACbA,KAAK+ohC,aAAU5jhC,GACX,OAAQpF,EAAQs1P,SAClBr1P,KAAKokwC,oBAAsB,IAAI,IAAmB,CAChD/voB,MAAOt0nB,EAAQs0nB,MACfh/X,MAAOt1P,EAAQs1P,MACfi0+B,qBAAsB,SAAUjmtC,EAAGC,EAAG45G,EAAOuvD,EAASrhJ,GACpD,OAAO4p4B,EAAavl3B,EAAMpsC,EAAGC,EAAG45G,EAAOuvD,EAASrhJ,EAClD,EACAs9+B,eAAgB,YACV,OAAQj59B,EAAKs59B,UACft59B,EAAKs59B,SAET,KAIJ,MAAMly4B,EAAa,CAAC,EAQpB,GAPAA,EAAW8qW,OAAS5hf,EAAQ4hf,OAC5B9qW,EAAWwpP,KACT,oEACFxpP,EAAW1vI,MAAQ,UACnB0vI,EAAW/0I,OAAS,WAGhBq9B,WAAWwikB,EAASud,gBAAgB3gmB,UAAY,IAAK,CAIvDs4H,EAAW+6b,IACT7xkB,EAAQ6xkB,MACP7xkB,EAAQw5mB,cACTx5mB,EAAQw5mB,aAAa94V,sBAAsB,IACvC,YACA,UASN,MAAMlsG,EAAQ19B,EAAW+6b,IAAI5okB,MAAM,KACnC,GAAiB,SAAburK,EAAM,IAAkC,IAAjBA,EAAMtxK,OAAc,CAC7C,MAAMU,EAAOmb,OAAOy1J,EAAM,KAEvB5wK,GAAQ,KAAQA,EAAO,MAASggwC,EAAoBxwvC,SAASxP,IAC9D+/vC,EAAoBvwvC,SAASxP,MAE7BkzI,EAAWwpP,KACT,oEAEN,CACF,MAEExpP,EAAWknpB,IACTh+xB,EAAQg+xB,MACPh+xB,EAAQw5mB,cACTx5mB,EAAQw5mB,aAAa94V,sBAAsB,IACvC,YACA,aAGRkhV,EAASk8H,mBAAmBhnlB,GAAY,GACxCktnC,EAAoBlmiB,mBAAmBhnlB,GAAY,GAEnD,MAAMwtnC,EAAoB,CACxBC,aAAcvkwC,EAAQ4hf,OACtB4ixB,YAAa,YAGXpluC,WAAW4kuC,EAAoB7kpB,gBAAgB3gmB,UAAY,KAC7D8lvC,EAAkBp/vC,EAAI,MACtBo/vC,EAAkB94sC,EAAI,QAEtB84sC,EAAkBhhvC,EAAI,MACtBghvC,EAAkB/gvC,EAAI,OAExBygvC,EAAoBlmiB,mBAAmBwmiB,GAAmB,GAE1DrkwC,KAAKw8mB,UAAY7a,EACjB3hmB,KAAK0yuC,sBAAwBqxB,EAC7B/jwC,KAAKk8oB,QAAUn8oB,EAAQ4hf,OAGvB3hf,KAAK00gC,cAAgB,IAAI,IAA2B,CAClDvngC,IAAKw0lB,EACL0woB,gBAAiB0xB,EACjBxqpB,aACEx5mB,EAAQw5mB,cACR,IAAI,IAAuB,CAAEt0D,UAAWlljB,EAAQkljB,YAClD20D,UAAW75mB,EAAQ65mB,UACnB+4T,UAAW5y6B,EAAQ4y6B,UACnBC,WAAY7y6B,EAAQ6y6B,WACpB4B,aAAcz06B,EAAQy06B,aACtBnlJ,aAActvxB,EAAQsvxB,aACtBwlK,WAAY907B,EAAQ807B,WACpBniB,kBAAmB3y6B,EAAQ2y6B,kBAC3B32T,OAAQh8mB,EAAQg8mB,OAChB02nB,sBACE1yuC,EAAQ0yuC,uBACRmxB,EAA6BY,6BAC/B5wV,mBAAoB7z6B,EAAQ6z6B,oBAEhC,CAEA,SAASoB,EAAa7gO,EAAiBt5pB,EAAKyQ,EAAK4xE,EAAOuvD,EAASrhJ,GAC/D,MAAMq5tC,GAAsB,OAAQr5tC,GAAYA,EAAS9pC,UAAO6D,EAC1DutgC,EAAev+T,EAAgBugU,cAMrC,OAJI,OAAQ+vP,IAEV/xP,EAAal2Z,UAAUqhH,mBAAmB4miB,GAErC/xP,EAAa19F,aAAan63B,EAAKyQ,EAAK4xE,EAAOuvD,EACpD,CA+WA,SAASy3kC,EAAkB1guC,GACzB,MAAMxK,EAAS,CAAC,EAChB,IAAK,MAAMhzB,KAAOw9B,EACZA,EAAIv9B,eAAeD,KACrBgzB,EAAOhzB,EAAI3B,eAAiBm/B,EAAIx9B,IAGpC,OAAOgzB,CACT,CAlWAzyB,OAAOgwE,iBAAiBqtrC,EAA6BnjwC,UAAW,CAO9D0M,IAAK,CACH8I,IAAK,WACH,OAAOjW,KAAKw8mB,UAAUg7H,IACxB,GASF9riB,MAAO,CACLz1L,IAAK,WACH,OAAOjW,KAAKw8mB,UAAU9wa,KACxB,GASFi2S,OAAQ,CACN1re,IAAK,WACH,OAAOjW,KAAKk8oB,OACd,GASFy2R,UAAW,CACT185B,IAAK,WACH,OAAOjW,KAAK00gC,cAAc/hG,SAC5B,GASFC,WAAY,CACV385B,IAAK,WACH,OAAOjW,KAAK00gC,cAAc9hG,UAC5B,GASFvjJ,aAAc,CACZp5wB,IAAK,WACH,OAAOjW,KAAK00gC,cAAcrlP,YAC5B,GASFmlJ,aAAc,CACZv+5B,IAAK,WACH,OAAOjW,KAAK00gC,cAAclgG,YAC5B,GASFj7T,aAAc,CACZtjmB,IAAK,WACH,OAAOjW,KAAK00gC,cAAcn7Z,YAC5B,GASFK,UAAW,CACT3jmB,IAAK,WACH,OAAOjW,KAAK00gC,cAAc96Z,SAC5B,GAWF84T,kBAAmB,CACjBz85B,IAAK,WACH,OAAOjW,KAAK00gC,cAAchiG,iBAC5B,GAWF/zT,WAAY,CACV1omB,IAAK,WACH,OAAOjW,KAAK00gC,cAAc/1Z,UAC5B,GAUF5C,OAAQ,CACN9lmB,IAAK,WACH,OAAOjW,KAAK00gC,cAAc34Z,MAC5B,GAaF24T,gBAAiB,CACfz+5B,IAAK,WACH,OAAOjW,KAAK00gC,cAAchgG,eAC5B,GAaFd,mBAAoB,CAClB395B,IAAK,WACH,OAAOjW,KAAK00gC,cAAc9gG,kBAC5B,EACAh/4B,IAAK,SAAUg/4B,GACb5z6B,KAAK00gC,cAAc9gG,mBAAqBA,CAC1C,GAQFv/S,MAAO,CACLp+mB,IAAK,WACH,OAAOjW,KAAKokwC,oBAAoB/voB,KAClC,EACAz/lB,IAAK,SAAUvvB,GACbrF,KAAKokwC,oBAAoB/voB,MAAQhvnB,CACnC,GASFgwP,MAAO,CACLp/O,IAAK,WACH,OAAOjW,KAAKokwC,oBAAoB/ugC,KAClC,EACAzgO,IAAK,SAAUvvB,GACbrF,KAAKokwC,oBAAoB/ugC,MAAQhwP,CACnC,GASFy+vC,kBAAmB,CACjB7tvC,IAAK,WACH,OAAOjW,KAAK6jwC,kBACd,KAYJD,EAA6BnjwC,UAAUs06B,eAAiB,SAAU1x5B,EAAGC,EAAG45G,GACtE,OAAOl9H,KAAK00gC,cAAc3/F,eAAe1x5B,EAAGC,EAAG45G,EACjD,EAYA0moC,EAA6BnjwC,UAAUu06B,aAAe,SACpD3x5B,EACAC,EACA45G,EACAuvD,GAEA,IAAIzzJ,EACJ,MAAM0ruC,EAAqB1kwC,KAAKokwC,oBAChC,IAAIh6B,EAkBJ,OAfI,OAAQs6B,KACVt6B,EAAkBs6B,EAAmBt6B,gBACrCpxsC,EAAS0ruC,EAAmBr6B,aAAahntC,EAAGC,EAAG45G,EAAOuvD,KAInD,OAAQzzJ,KACXA,EAASg84B,EAAah16B,KAAMqjB,EAAGC,EAAG45G,EAAOuvD,EAAS29iC,KAIhD,OAAQpxsC,KAAW,OAAQ0ruC,IAC7BA,EAAmBp6B,yBAAyBjntC,EAAGC,EAAG45G,EAAOuvD,GAGpDzzJ,CACT,EAeA4quC,EAA6BnjwC,UAAUy06B,aAAe,SACpD7x5B,EACAC,EACA45G,EACA8nb,EACA4vE,GAEA,MAAM8voB,EAAqB1kwC,KAAKokwC,oBAKhC,OAlUF,SACEjwjB,EACA9wrB,EACAC,EACA45G,EACA8nb,EACA4vE,EACAxplB,GAEA,MAAMq5tC,GAAsB,OAAQr5tC,GAAYA,EAAS9pC,UAAO6D,EAC1DutgC,EAAev+T,EAAgBugU,cAMrC,OAJI,OAAQ+vP,IAEV/xP,EAAaggO,sBAAsB70gB,mBAAmB4miB,GAEjD/xP,EAAax9F,aAAa7x5B,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,EAC3D,CAiTSsgT,CAAal16B,KAAMqjB,EAAGC,EAAG45G,EAAO8nb,EAAW4vE,GAJ1B,OAAQ8voB,GAC5BA,EAAmBt6B,qBACnBjluC,EAGN,EAaAy+vC,EAA6BI,kBAAoBz9vC,OAAOivmB,OAAO,CAC7DmvpB,QAAS,MACTpmvC,QAAS,QACTkuK,QAAS,SACTnmK,OAAQ,GACRizC,OAAQ,eAYVqqsC,EAA6BK,gCAAkC19vC,OAAOivmB,OAAO,CAC3EmvpB,QAAS,MACTpmvC,QAAS,QACTkuK,QAAS,mBAGXm3kC,EAA6BY,6BAA+Bj+vC,OAAOivmB,OAAO,CACxEjvmB,OAAOivmB,OAAO,IAAI,IAAqB,OAAQ,qBAC/CjvmB,OAAOivmB,OAAO,IAAI,IAAqB,MAAO,aAC9CjvmB,OAAOivmB,OAAO,IAAI,IAAqB,OAAQ,gBAYjD,QAAe,8BAA4B,I,8JC7nB3C,MAAMovpB,EAAoBr+vC,OAAOivmB,OAAO,CACtCmvpB,QAAS,OACTpmvC,QAAS,QACTkuK,QAAS,YAoGX,SAASo4kC,EAAiC9kwC,GAIxC,GAHAA,EAAUA,GAAW,IAAOw8mB,eAGvB,OAAQx8mB,EAAQoN,KACnB,MAAM,IAAI,IAAe,4BAE3B,KAAK,OAAQpN,EAAQo2T,OACnB,MAAM,IAAI,IAAe,8BAE3B,KAAK,OAAQp2T,EAAQsmB,OACnB,MAAM,IAAI,IAAe,8BAE3B,KAAK,OAAQtmB,EAAQ+kwC,iBACnB,MAAM,IAAI,IAAe,wCAE3B,IAAI,OAAQ/kwC,EAAQs1P,UAAW,OAAQt1P,EAAQs0nB,OAC7C,MAAM,IAAI,IACR,8DAKJr0nB,KAAK8y6B,mBAAgB3t6B,EACrBnF,KAAK+y6B,wBAAqB5t6B,EAC1BnF,KAAKgz6B,sBAAmB7t6B,EACxBnF,KAAKiz6B,wBAAqB9t6B,EAC1BnF,KAAKkz6B,sBAAmB/t6B,EACxBnF,KAAKmz6B,iBAAchu6B,EACnBnF,KAAKoz6B,wBAAqBju6B,EAC1BnF,KAAKqz6B,mBAAgBlu6B,EACrBnF,KAAKsz6B,gCAA6Bnu6B,EAClCnF,KAAKuz6B,iCAA8Bpu6B,EAEnC,MAAMw8lB,EAAW,IAASqd,eAAej/mB,EAAQoN,KAE3CkZ,EAAQtmB,EAAQsmB,MAChBy+uC,EAAkB/kwC,EAAQ+kwC,gBAC1B33vC,EAAMw0lB,EAASx0lB,IAEf43vC,EAAe53vC,EAAIuB,MAAM,MAC/B,KACG,OAAQq2vC,IACgB,IAAxBA,EAAa9hwC,QAAgB,MAAMgP,KAAK9E,GAEzCw0lB,EAASk8H,mBAAmB+miB,GAC5B5kwC,KAAKglwC,SAAU,MACV,CACL,MAAM1wnB,EAAiB,CACrBjunB,MAAOA,EACP4+uC,MAAO5+uC,EACP6+uC,cAAeJ,GAGjBnjqB,EAASgvK,kBAAkBr8H,GAC3Bt0oB,KAAKglwC,SAAU,CACjB,CAEAhlwC,KAAKw8mB,UAAY7a,EACjB3hmB,KAAKi9jC,OAASl9jC,EAAQo2T,MACtBn2T,KAAKm42B,OAAS9x1B,EACdrmB,KAAKmlwC,iBAAmBL,EACxB9kwC,KAAKolwC,kBAAoBrlwC,EAAQslwC,iBACjCrlwC,KAAK+vF,QAAUhwF,EAAQw5D,QAAU,aACjCv5D,KAAKwz6B,mBAAqBzz6B,EAAQ2y6B,kBAElC1y6B,KAAK08mB,eAAgB,OAAQ38mB,EAAQw5mB,cACjCx5mB,EAAQw5mB,aACR,IAAI,IAAwB,CAAEt0D,UAAWlljB,EAAQkljB,YACrDjljB,KAAKyz6B,WAAa1z6B,EAAQ4y6B,WAAa,IACvC3y6B,KAAK0z6B,YAAc3z6B,EAAQ6y6B,YAAc,IAEzC5y6B,KAAKu46B,cAAgBx46B,EAAQy06B,cAAgB,EAC7Cx06B,KAAKm/oB,cAAgBp/oB,EAAQsvxB,aAE7BrvxB,KAAKi5pB,WAAal5pB,EAAQ65mB,WAAa55mB,KAAK08mB,cAAc9C,UAC1D55mB,KAAKyn0B,YAAc1n0B,EAAQysE,WAE3B,MAAM/c,EAAOzvD,KACbA,KAAK+ohC,aAAU5jhC,GACX,OAAQpF,EAAQs1P,SAClBr1P,KAAKokwC,oBAAsB,IAAI,IAAmB,CAChD/voB,MAAOt0nB,EAAQs0nB,MACfh/X,MAAOt1P,EAAQs1P,MACfi0+B,qBAAsB,SAAUjmtC,EAAGC,EAAG45G,EAAOuvD,EAASrhJ,GACpD,OAAO4p4B,EAAavl3B,EAAMpsC,EAAGC,EAAG45G,EAAOuvD,EAASrhJ,EAClD,EACAs9+B,eAAgB,YACV,OAAQj59B,EAAKs59B,UACft59B,EAAKs59B,SAET,KAIJ/ohC,KAAKm9mB,YAAc,IAAI,IAEvB,MAAMpB,EAASh8mB,EAAQg8mB,OACvB/7mB,KAAKy8mB,QAA4B,iBAAXV,EAAsB,IAAI,IAAOA,GAAUA,EAEjE/7mB,KAAKwwuC,YAAczwuC,EAAQ807B,WACvBr07B,MAAMK,QAAQb,KAAKwwuC,aACrBxwuC,KAAKwwuC,YAAcxwuC,KAAKwwuC,YAAY/muC,SAC3B,OAAQzJ,KAAKwwuC,cAAgBxwuC,KAAKwwuC,YAAYvtuC,OAAS,EAChEjD,KAAKwwuC,YAAcxwuC,KAAKwwuC,YAAYxnuC,MAAM,IAE1ChJ,KAAKwwuC,YAAc,CAAC,IAAK,IAAK,IAElC,CAEA,SAASx7T,EAAa7gO,EAAiBt5pB,EAAKyQ,EAAK4xE,EAAOuvD,EAASrhJ,GAC/D,MAAM6iK,EAASkmgB,EAAgBixjB,kBACzBE,GAAa,OAAQr3jC,GAAUA,EAAO/wE,GAASA,EAAM13G,WACrDqv6B,EAAa1gP,EAAgBq8hB,YAC7B+0B,EAAmBpxjB,EAAgBszH,YACnCg9b,GAAsB,OAAQr5tC,GAAYA,EAAS9pC,UAAO6D,EAEhE,IAAIw8lB,EACA2yC,EACJ,GAAK6/D,EAAgB6wjB,QAoBd,CAEL,IAAIz3vC,EAAQ,CAAC,EACbA,EAAMi4vC,WAAaF,EACnB/3vC,EAAM4oT,MAAQg+Y,EAAgB8oX,OAC9B1vjC,EAAM8Y,MAAQ8trB,EAAgBgkK,OAC9B5q2B,EAAMk4vC,QAAUn6sC,EAChB/9C,EAAMm4vC,QAAU7qtC,EAChBttC,EAAMo4vC,cAAgBxxjB,EAAgBgxjB,iBACtC53vC,EAAMgsD,OAAS46oB,EAAgBpknB,SAE3B,OAAQw1qC,KACVh4vC,GAAQ,OAAQA,EAAOg4vC,KAGrB,OAAQd,KACVl3vC,GAAQ,OAAQA,EAAOk3vC,IAGzBnwnB,EAAiB,CACf1wnB,EAAGix6B,GAAYh64B,EAAMyQ,EAAM4xE,GAAS23zB,EAAW5x7B,SAGjD0+lB,EAAWwyG,EAAgB33F,UAAU8B,mBAAmB,CACtDY,gBAAiB3xmB,EACjBk/K,QAASA,IAEXk1a,EAASgvK,kBAAkBr8H,EAC7B,MA/CEA,EAAiB,CACfsxnB,WAAYN,EACZO,QAASv6sC,EAAI9lC,WACbsgvC,QAASjrtC,EAAIr1B,WACb5B,EAAGix6B,GAAYh64B,EAAMyQ,EAAM4xE,GAAS23zB,EAAW5x7B,SAGjD0+lB,EAAWwyG,EAAgB33F,UAAU8B,mBAAmB,CACtD7xb,QAASA,IAEXk1a,EAASgvK,kBAAkBr8H,IAEvB,OAAQixnB,IACV5jqB,EAASgvK,kBAAkB40f,IAGzB,OAAQd,IACV9iqB,EAASgvK,kBAAkB8zf,GAgC/B,OAAO,IAAgBxvV,UAAU9gO,EAAiBxyG,EACpD,CAEAp7lB,OAAOgwE,iBAAiBsurC,EAAiCpkwC,UAAW,CAOlE0M,IAAK,CACH8I,IAAK,WACH,OAAOjW,KAAKw8mB,UAAUrvmB,GACxB,GASFu+L,MAAO,CACLz1L,IAAK,WACH,OAAOjW,KAAKw8mB,UAAU9wa,KACxB,GASFinuB,UAAW,CACT185B,IAAK,WACH,OAAOjW,KAAKyz6B,UACd,GASFb,WAAY,CACV385B,IAAK,WACH,OAAOjW,KAAK0z6B,WACd,GASFrkJ,aAAc,CACZp5wB,IAAK,WACH,OAAOjW,KAAKm/oB,aACd,GASFq1R,aAAc,CACZv+5B,IAAK,WACH,OAAOjW,KAAKu46B,aACd,GASFh/T,aAAc,CACZtjmB,IAAK,WACH,OAAOjW,KAAK08mB,aACd,GASF9C,UAAW,CACT3jmB,IAAK,WACH,OAAOjW,KAAKi5pB,UACd,GAWFy5Q,kBAAmB,CACjBz85B,IAAK,WACH,OAAOjW,KAAKwz6B,kBACd,GAWF70T,WAAY,CACV1omB,IAAK,WACH,OAAOjW,KAAKm9mB,WACd,GASF5jjB,OAAQ,CACNtjD,IAAK,WACH,OAAOjW,KAAK+vF,OACd,GAUFgshB,OAAQ,CACN9lmB,IAAK,WACH,OAAOjW,KAAKy8mB,OACd,GAaFi4T,gBAAiB,CACfz+5B,IAAK,WACH,OAAO,CACT,GAOFo+mB,MAAO,CACLp+mB,IAAK,WACH,OAAOjW,KAAKokwC,oBAAoB/voB,KAClC,EACAz/lB,IAAK,SAAUvvB,GACbrF,KAAKokwC,oBAAoB/voB,MAAQhvnB,CACnC,GASFgwP,MAAO,CACLp/O,IAAK,WACH,OAAOjW,KAAKokwC,oBAAoB/ugC,KAClC,EACAzgO,IAAK,SAAUvvB,GACbrF,KAAKokwC,oBAAoB/ugC,MAAQhwP,CACnC,GAOFmnE,WAAY,CACVv2D,IAAK,WACH,OAAOjW,KAAKyn0B,WACd,EACA7yyB,IAAK,SAAUvvB,GACTrF,KAAKyn0B,cAAgBpi0B,IACvBrF,KAAKyn0B,YAAcpi0B,GACf,OAAQrF,KAAK+ohC,UACf/ohC,KAAK+ohC,UAGX,KAYJ87O,EAAiCpkwC,UAAUs06B,eAAiB,SAC1D1x5B,EACAC,EACA45G,GAGF,EAYA2noC,EAAiCpkwC,UAAUu06B,aAAe,SACxD3x5B,EACAC,EACA45G,EACAuvD,GAEA,IAAIzzJ,EACJ,MAAM0ruC,EAAqB1kwC,KAAKokwC,oBAChC,IAAIh6B,EAkBJ,OAfI,OAAQs6B,KACVt6B,EAAkBs6B,EAAmBt6B,gBACrCpxsC,EAAS0ruC,EAAmBr6B,aAAahntC,EAAGC,EAAG45G,EAAOuvD,KAInD,OAAQzzJ,KACXA,EAASg84B,EAAah16B,KAAMqjB,EAAGC,EAAG45G,EAAOuvD,EAAS29iC,KAIhD,OAAQpxsC,KAAW,OAAQ0ruC,IAC7BA,EAAmBp6B,yBAAyBjntC,EAAGC,EAAG45G,EAAOuvD,GAGpDzzJ,CACT,EAaA6ruC,EAAiCpkwC,UAAUy06B,aAAe,SACxD7x5B,EACAC,EACA45G,EACA8nb,EACA4vE,GAGF,EACA,QAAe,8BAAgC,I,imBChjB/C,MAAMm9W,EAA2B,IAAI,IA0IrC,SAASg0R,EAAqBlgI,GAC5B,MAAM1+nC,EAAQ0+nC,EAAkBxinC,EAI1Bm8tB,EAAc,EAHLqmZ,EAAkBvinC,EAKjC,IAAI0ivC,EAAmB,GAHJ,EAAM7+vC,GAIc,IAAnC6+vC,EAAiBj9vC,QAAQ,OAC3Bi9vC,GAAoB,MAEtB,IAAIC,EAAoB,GAAGzmhB,IAK3B,OAJwC,IAApCymhB,EAAkBl9vC,QAAQ,OAC5Bk9vC,GAAqB,MAGhB,4BAA4B9+vC,4CACEA,gFAED6+vC,2CACAC,mDAEtC,CAEA,QAAe,4BAxJf,SAAgClnqC,EAAWnoF,GACzC,MAAMoz/B,EAAkB,IAAI,IAAqBjr6B,IAEjD,OAAuBir6B,EAAiBjr6B,GAExC,MAAM,cACJwuzB,EAAa,eACb/wC,EAAc,qBACdqgZ,EAAoB,kBACpB3Z,EAAiB,wBACjB4Z,GACE9yP,EAEJ,GAAI6yP,EAAuB,EAAG,CAC5B,MAAMjvW,EAAa,mBACbmgE,EAAoB,QAAQngE,mDAM5Bs4W,EAAeH,EALK,IAAwB1zR,qBAChD71H,EACA5l2B,EACAm79B,IAGFxkF,EAAchB,YACZqB,EACAmgE,EACA,IAAkBh+D,UAEpBxC,EAAcf,iBAAiBoB,EAAY,CAACs4W,GAC9C,CAEA,GAAIpJ,EAA0B,EAAG,CAC/B,MAAMlvW,EAAa,gBACbmgE,EAAoB,QAAQngE,mDAM5Bs4W,EAAeH,EALK,IAAsB1zR,qBAC9C6wQ,EACAtsuC,EACAm79B,IAGFxkF,EAAchB,YACZqB,EACAmgE,EACA,IAAkBh+D,UAEpBxC,EAAcf,iBAAiBoB,EAAY,CAACs4W,GAC9C,CAGA,MAAMC,EAAoB54W,EAActi2B,QACxCk7sC,EAAkBp6W,UAAU,eAAW5m5B,EAAW,IAAkB4q5B,UACpE,MAAMq2W,EAAyB74W,EAActi2B,QAC7Cm7sC,EAAuBr6W,UACrB,qBACA5m5B,EACA,IAAkB4q5B,UAEpB,MAAM/mB,EAAgBukB,EAAcH,mBAAmBx24B,GACjDyvvC,EAAoBF,EAAkB/4W,mBAAmBx24B,GACzD0vvC,EACJF,EAAuBh5W,mBAAmBx24B,GACtCwt0B,EAAc,IAAY2lD,UAAU,CACxCwU,KAAM,CACJt43B,SAAS,EACT0gkB,KAAM,IAASkvN,MAEjB4/F,UAAW,CACTxv3B,SAAS,GAEXmg4B,WAAW,EAEXT,SAAU,IAAc8wC,6BAIpB8vU,EAA0B3vvC,EAAQkz3B,6BAClC2L,EAAY12yB,EAAUg2pC,WACtBvqX,EAAc,IAAI,IAAY,CAClC1B,YAAay9X,EACb10oB,cAAe,IAAcC,UAC7BsyN,YAAaA,EACb4kD,cAAeA,EACfC,WAAY+gI,EAAgB/gI,WAC5BvqM,YAAa3/lB,EAAUynqC,qBACvBt0gB,KAAM,IAAKqyJ,OACX9F,yBAAyB,EACzBrxE,MAAOpt0B,KACPu+4B,KAAM9I,EACN+I,QAAS/I,IAIL+mX,EAAkB,IAAYl9W,aAClC9U,EACA,IAAI,KAENgyX,EAAgBxzX,cAAgBq9X,EAChC7J,EAAgB39W,UAAW,EAG3B,MAAM4nX,EAAuB,IAAYnnX,aACvC9U,EACA,IAAI,KAMN,GAJAi8X,EAAqBz9X,cAAgBs9X,EACrCG,EAAqB5nX,UAAW,GAG5B,OAAQ9/yB,EAAU441B,cAAe,CACnC,MAAMz4C,EAAUngzB,EAAU441B,aAC1Bz4C,EAAQlW,cACNkW,EAAQlW,eAAiBkW,EAAQlW,cAAc5t2B,SACnD,CACA,IAAI,OAAQ2jE,EAAUy1pC,kBAAmB,CACvC,MAAMt1W,EAAUngzB,EAAUy1pC,iBAC1Bt1W,EAAQlW,cACNkW,EAAQlW,eAAiBkW,EAAQlW,cAAc5t2B,SACnD,CACA,IAAI,OAAQ2jE,EAAU47pC,uBAAwB,CAC5C,MAAMz7W,EAAUngzB,EAAU47pC,sBAC1Bz7W,EAAQlW,cACNkW,EAAQlW,eAAiBkW,EAAQlW,cAAc5t2B,SACnD,CAEA2jE,EAAU441B,aAAentD,EACzBzryB,EAAUy1pC,iBAAmBgI,EAC7Bz9pC,EAAU47pC,sBAAwB8L,CACpC,EA0BqC,I,6FChKrChqrC,eAAeiqrC,EAAiC9spB,EAAW99R,GACzD,MAAMq3X,EAAkBr3X,EAAMq3X,gBACxB4C,EAAgBj6X,EAAMi6X,cACtB9wJ,EAAY8wJ,EAAc9wJ,UAEhC,IAAI0htB,EACJ,MAAMp8pC,EAAMuxO,EAAMwtD,OAAOw2jB,8BAA8BlmV,GAOvD,GALE+spB,EADE7q7B,EAAMntO,OAAS,IAAU25qB,QACFrjO,EAAUyqE,wBAAwBnlhB,GAElCwrmB,EAAcza,UAAU/wlB,KAG9C,OAAQ4omB,GACX,OAAOwzjB,EAGT,MAAM7npB,EAAeq0F,EAAgBr0F,aAErC,KAAK,OAAQA,IAAiBhjS,EAAMntO,OAAS,IAAUwlvB,QACrD,OAAOwya,EAGT,MAAM9ilB,EAAgB,CACpB,IAAUn4pB,OAAOkulB,GACjB,IAAUoqJ,UAAUpqJ,GACpB,IAAU0B,UAAU1B,GACpB,IAAUyB,UAAUzB,GACpB,IAAUmqJ,UAAUnqJ,IAGhBgtpB,QACEF,EAAiCG,2BACrC1zjB,EACAtvB,GAGJ,IAAIijlB,GAAc,EAClB,MAAMpowC,EAAYkowC,EAAmBpivC,OAAO,SAAUuivC,EAAYt/uC,GAChE,OAAK,OAAQA,EAAK3lB,SAGlBglwC,GAAc,EACP/4vC,KAAK8R,IAAI4H,EAAK3lB,OAAQilwC,IAHpBA,CAIX,GAAIjovC,OAAO26M,WAEL2iiB,EAAgBuqgB,EAKtB,OAJIG,IACF1qgB,EAAct6vB,QAAUpD,GAGnB09vB,CACT,CAGAsqgB,EAAiCG,2BAC/B,IACF,QAAe,8BAAgC,I,6CCJ/C,QAAe,4BAzDf,SACE3iZ,EACAvrB,EACAwrB,EACA6iZ,EACAppb,GAEA,OAAO,WACL,MAAMl8zB,EAAS9e,SAAS+xC,cAAc,UAEhC1xC,EAAS260B,EAAY,EAAIopb,EAC/BtlvC,EAAO5f,OAAS4f,EAAOva,MAAQlE,EAE/B,MAAMw+uB,EAAY//tB,EAAOS,WAAW,MAmCpC,OAlCAs/tB,EAAUwlhB,UAAU,EAAG,EAAGhkwC,EAAQA,GAEV,IAApB+jwC,IACFvlhB,EAAUQ,YACVR,EAAUjye,IAAIvsQ,EAAS,EAAGA,EAAS,EAAGA,EAAS,EAAG,EAAG,EAAI8K,KAAK43F,IAAI,GAClE87oB,EAAUY,YACVZ,EAAUp5Q,UAAY87Y,EACtB1iI,EAAU58qB,OAENq/yB,EAAc,IAChBziI,EAAU9wrB,OACV8wrB,EAAUI,yBAA2B,kBACrCJ,EAAUQ,YACVR,EAAUjye,IACRvsQ,EAAS,EACTA,EAAS,EACT260B,EAAY,EACZ,EACA,EAAI7v0B,KAAK43F,IACT,GAEF87oB,EAAUY,YACVZ,EAAUp5Q,UAAY,QACtBo5Q,EAAU58qB,OACV48qB,EAAUjnpB,YAIdinpB,EAAUQ,YACVR,EAAUjye,IAAIvsQ,EAAS,EAAGA,EAAS,EAAG260B,EAAY,EAAG,EAAG,EAAI7v0B,KAAK43F,IAAI,GACrE87oB,EAAUY,YACVZ,EAAUp5Q,UAAYswX,EACtBl3G,EAAU58qB,OAEHnjD,CACT,CACF,EAO2C,I,6NCpD3C,MAAM4jzB,EAAe,IAAI,IACnB4hc,EAAoB,IAAI,IACxBC,EAAoB,IAAI,IACxBC,EAAoB,IAAI,IACxBC,EAAqB,IAAI,IACzB/kV,EAAoB,IAAI9/5B,WAAW,GAEzC,SAAS8kvC,EAAexlwC,EAAQylwC,EAAaC,EAAYxuuC,GACvD,MAAMyuuC,EACJF,EAAYzlwC,SAAW0lwC,EAAW1lwC,OAC9B,GACCA,EAASylwC,EAAYzlwC,SACrB0lwC,EAAW1lwC,OAASylwC,EAAYzlwC,QACvC,OAAO,IAAMumS,KAAKk/9B,EAAY1lrC,MAAO2lrC,EAAW3lrC,MAAO4lrC,EAAYzuuC,EACrE,CAEA,SAAS0uuC,EAAe5lwC,EAAQ+/E,GAC9B,MAAO,CACL//E,OAAQA,EACR+/E,MAAO,IAAM52B,MAAM42B,GAEvB,CAEA,SAASsxtB,EAAiB3wwB,GAmDxB,OA/BAA,GAhBAA,EAAUA,EAAQhsB,OAAO,SAAU8mC,EAAOxiC,EAAOynH,GAC/C,MAAMoloC,EAAU7svC,EAAQ,EAClB8svC,EAAU9svC,EAAQynH,EAAMt/H,OAAS,EAEjC4kwC,GAAmBF,GACrBrqtC,EAAMx7C,SAAWygI,EAAMznH,EAAQ,GAAGhZ,OAEhCgmwC,GAAmBF,GACrBtqtC,EAAMx7C,SAAWygI,EAAMznH,EAAQ,GAAGhZ,OAItC,OADc+lwC,IAAqBC,CAErC,IAGkBtxvC,OAAO,SAAU8mC,EAAOxiC,EAAOynH,GAC/C,MAAMoloC,EAAU7svC,EAAQ,EAClB8svC,EAAU9svC,EAAQynH,EAAMt/H,OAAS,EAEjC8kwC,IAAkBJ,GACpB,IAAM14pC,OAAO3xD,EAAMukC,MAAO0gD,EAAMznH,EAAQ,GAAG+mE,OAEzCmmrC,IAAkBJ,GACpB,IAAM34pC,OAAO3xD,EAAMukC,MAAO0gD,EAAMznH,EAAQ,GAAG+mE,OAI/C,OADckmrC,IAAoBC,CAEpC,IAGkBxxvC,OAAO,SAAU8mC,EAAOxiC,EAAOynH,GAC/C,MAAMoloC,EAAU7svC,EAAQ,EAElBitvC,IAAkBJ,GACpB,IAAM14pC,OAAO3xD,EAAMukC,MAAO0gD,EAAMznH,EAAQ,GAAG+mE,OAGzCgmrC,GAAmBF,GACrBrqtC,EAAMx7C,SAAWygI,EAAMznH,EAAQ,GAAGhZ,OAItC,OADcimwC,IAAoBF,CAEpC,EAGF,CAmXA,SAASI,EAA4BlowC,GACnC,MAAM,MAAE+7U,EAAK,OAAE6lK,GAAW5hf,GAAW,IAAOw8mB,aAG5C,IAAMwH,OAAO3nlB,OAAO,gBAAiB0/S,GACrC,IAAMp9D,QAAQ,iBAAkBijO,GAChC,IAAMoiI,OAAO1umB,OAAOi3lB,YAAY,wBAAyB3qH,EAAO1+e,OAAQ,GAGxE,MAAM,QAAE2T,GAAYklU,EACdt5S,EAlRR,SAA8Bm/c,GAE5B,MAAMumxB,EA3GR,SAAoBvmxB,GAClB,IAAI18e,EAAGsmD,EAEP,MAAM28sC,EAAiB,GAEjBC,EAAexmxB,EAAO1+e,OAC5B,IAAKgC,EAAI,EAAGA,EAAIkjwC,EAAcljwC,IAAK,CACjC,MAAMkxT,EAAQwrL,EAAO18e,GACfmjwC,EAAcjy8B,EAAM3zR,QACpB6luC,EAAgBD,EAAYnlwC,OAGlC,IAAKzC,MAAMK,QAAQunwC,IAAkC,IAAlBC,EACjC,MAAM,IAAI,IAAe,2CAI3B,IAAI7luC,EAAU,GAEd,IAAK+oB,EAAI,EAAGA,EAAI88sC,EAAe98sC,IAAK,CAClC,MAAM+8sC,EAAYF,EAAY78sC,GAG9B,KAAK,OAAQ+8sC,EAAUxmwC,QACrB,MAAM,IAAI,IAAe,4BAE3B,KAAK,OAAQwmwC,EAAUzmrC,OACrB,MAAM,IAAI,IAAe,2BAI3B,MAAM//E,EAAS,IAAW6vP,MACxB22gC,EAAUxmwC,OACVmmwC,EAA4BlvoB,eAC5BkvoB,EAA4BjvoB,gBAIxBn3iB,EAAQ,IAAM52B,MAAMq9sC,EAAUzmrC,MAAOyjvB,GAC3CzjvB,EAAMge,KAAOhe,EAAMy0L,MACnBz0L,EAAMwpE,OAASxpE,EAAMy0L,MACrBz0L,EAAMspE,MAAQtpE,EAAMy0L,MAEpB9zO,EAAQ59B,KAAK8iwC,EAAe5lwC,EAAQ+/E,GACtC,CAEA,IAAI0mrC,GAAkB,EAClBC,GAAmB,EACvB,IAAKj9sC,EAAI,EAAGA,EAAI88sC,EAAgB,EAAG98sC,IAAK,CACtC,MAAMk9sC,EAAYjmuC,EAAQ+oB,EAAI,GACxBm9sC,EAAYlmuC,EAAQ+oB,EAAI,GAE9Bg9sC,EAAkBA,GAAmBE,EAAU3mwC,QAAU4mwC,EAAU5mwC,OACnE0mwC,EACEA,GAAoBC,EAAU3mwC,QAAU4mwC,EAAU5mwC,MACtD,CAGI0mwC,EACFhmuC,EAAUA,EAAQ8lD,UACRigrC,IAEV,OAAU/luC,EAAS,SAAUrkB,EAAGC,GAC9B,OAAO,IAAWmhF,KAAKphF,EAAErc,OAASsc,EAAEtc,OACtC,GAGF,IAAI6mwC,EAAkBxy8B,EAAMwy8B,kBAAmB,EAC3CC,EAAgBzy8B,EAAMyy8B,gBAAiB,EAGpB,IAAnBpmuC,EAAQv/B,QAAiB0lwC,GAAoBC,IAC/CD,GAAkB,EAClBC,GAAgB,GAGdD,GACFnmuC,EAAQ73B,OACN,EACA,EACA+8vC,EACEO,EAA4BlvoB,eAC5Bv2lB,EAAQ,GAAGq/C,QAIb+mrC,GACFpmuC,EAAQ73B,OACN63B,EAAQv/B,OACR,EACAykwC,EACEO,EAA4BjvoB,eAC5Bx2lB,EAAQA,EAAQv/B,OAAS,GAAG4+E,QAKlCr/C,EAAU2wwB,EAAiB3wwB,GAE3B0luC,EAAetjwC,KAAK49B,EACtB,CAEA,OAAO0luC,CACT,CAIyBW,CAAWlnxB,GAElC,IAEI18e,EAFA6jwC,EAAmB,GACnBC,EAAmB,GAGvB,SAASC,EAASlnwC,EAAQ+/E,GACxBinrC,EAAiBlkwC,KAAK8iwC,EAAe5lwC,EAAQ+/E,GAC/C,CACA,SAASonrC,EAAcnnwC,EAAQqc,EAAGC,GAChC,IAAI4a,EAAS,IAAMsulB,iBAAiBlpmB,EAAG,EAAMD,EAAEm4P,MAAO8w/B,GACtDpuuC,EAAS,IAAME,IAAIF,EAAQ7a,EAAG6a,GAC9BgwuC,EAASlnwC,EAAQk3B,EACnB,CAGA,MAAMkwuC,EAAchB,EAAejlwC,OACnC,IAAKgC,EAAI,EAAGA,EAAIikwC,EAAajkwC,IAAK,CAChC,MAAMu9B,EAAU0luC,EAAejjwC,GAC/B,IAAIuH,EAAM,EACN28vC,EAAW,EAGfJ,EAAmBD,EACnBA,EAAmB,GAEnB,MAAMT,EAAgB7luC,EAAQv/B,OACxBmmwC,EAAqBL,EAAiB9lwC,OAC5C,KAAOuJ,EAAM67vC,GAAiBc,EAAWC,GAAoB,CAC3D,MAAM9rtC,EAAQ9wC,EAAM67vC,EAAgB7luC,EAAQh2B,QAAOrH,EAC7CkkwC,EAAY78vC,EAAM,EAAIg2B,EAAQh2B,EAAM,QAAKrH,EACzCujwC,EAAYl8vC,EAAM67vC,EAAgB,EAAI7luC,EAAQh2B,EAAM,QAAKrH,EAEzDmkwC,EACJH,EAAWC,EAAqBL,EAAiBI,QAAYhkwC,EACzDokwC,EACJJ,EAAW,EAAIJ,EAAiBI,EAAW,QAAKhkwC,EAC5CqkwC,EACJL,EAAWC,EAAqB,EAC5BL,EAAiBI,EAAW,QAC5BhkwC,EAEN,IACE,OAAQm4C,KACR,OAAQgstC,IACRhstC,EAAMx7C,SAAWwnwC,EAAWxnwC,OAC5B,CAEA,MAAM2nwC,GACJ,OAAQD,IACRF,EAAWxnwC,SAAW0nwC,EAAe1nwC,OACjC4nwC,IAAgB,OAAQH,GACxBI,IAAc,OAAQH,GAEtBI,GAAU,OAAQlB,IAAcprtC,EAAMx7C,SAAW4mwC,EAAU5mwC,OAC3DypZ,IAAW,OAAQ892B,GACnBt2tC,IAAS,OAAQ21tC,GAEnBe,EACEG,GACFX,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OACpDonrC,EAAc3rtC,EAAMx7C,OAAQ4mwC,EAAU7mrC,MAAO2nrC,EAAe3nrC,QACnD0pU,GACTy92B,EAAS1rtC,EAAMx7C,OAAQwnwC,EAAWznrC,OAClConrC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAO2nrC,EAAe3nrC,QAC/C9uC,GACTk2tC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OACpDmnrC,EAAS1rtC,EAAMx7C,OAAQ0nwC,EAAe3nrC,SAEtConrC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OACpDonrC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAO2nrC,EAAe3nrC,QAEjD6nrC,EACLE,GACFZ,EAAS1rtC,EAAMx7C,OAAQw7C,EAAMukC,OAC7BonrC,EAAc3rtC,EAAMx7C,OAAQ4mwC,EAAU7mrC,MAAOynrC,EAAWznrC,QAC/C9uC,GACTi2tC,EAAS1rtC,EAAMx7C,OAAQw7C,EAAMukC,OAC7BmnrC,EAAS1rtC,EAAMx7C,OAAQwnwC,EAAWznrC,SACzB0pU,GAGTy92B,EAAS1rtC,EAAMx7C,OAAQw7C,EAAMukC,OAF7BonrC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,QAK7C8nrC,EACLC,GACFX,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OACpDmnrC,EAAS1rtC,EAAMx7C,OAAQ4mwC,EAAU7mrC,QACxB0pU,GACTy92B,EAAS1rtC,EAAMx7C,OAAQwnwC,EAAWznrC,OAClCmnrC,EAAS1rtC,EAAMx7C,OAAQw7C,EAAMukC,QACpB9uC,EACTk2tC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,QAEpDonrC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OACpDmnrC,EAAS1rtC,EAAMx7C,OAAQw7C,EAAMukC,QAI3B+nrC,GACFX,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OACpDonrC,EAAc3rtC,EAAMx7C,OAAQ4mwC,EAAU7mrC,MAAOynrC,EAAWznrC,QAC/C0pU,GACTy92B,EAAS1rtC,EAAMx7C,OAAQwnwC,EAAWznrC,OAClConrC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,QAC3C9uC,GACTk2tC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OACpDmnrC,EAAS1rtC,EAAMx7C,OAAQwnwC,EAAWznrC,QAElConrC,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOynrC,EAAWznrC,OAGxDr1E,GAAOo9vC,EAAU,EAAI,EACrBT,GAAYM,EAAe,EAAI,CACjC,MAAO,IACL,OAAQnstC,KACR,OAAQgstC,KACR,OAAQC,IACRjstC,EAAMx7C,OAASwnwC,EAAWxnwC,OAC1B,CAEA,MAAM+nwC,EAAavC,EACjBhqtC,EAAMx7C,OACNynwC,EACAD,EACAnC,IAGG,OAAQkC,IAGD,OAAQX,GAIlBO,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOgorC,IAHzCZ,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOgorC,GACzCb,EAAS1rtC,EAAMx7C,OAAQ+nwC,KAJvBb,EAAS1rtC,EAAMx7C,OAAQ+nwC,GACvBZ,EAAc3rtC,EAAMx7C,OAAQw7C,EAAMukC,MAAOgorC,IAO3Cr9vC,GACF,MAAO,IACL,OAAQ88vC,KACR,OAAQhstC,KACR,OAAQ+rtC,IACRC,EAAWxnwC,OAASw7C,EAAMx7C,OAC1B,CAEA,MAAMgowC,EAAaxC,EACjBgC,EAAWxnwC,OACXunwC,EACA/rtC,EACA4ptC,IAGG,OAAQqC,IAGD,OAAQC,GAIlBP,EAAcK,EAAWxnwC,OAAQgowC,EAAYR,EAAWznrC,QAHxDonrC,EAAcK,EAAWxnwC,OAAQgowC,EAAYR,EAAWznrC,OACxDmnrC,EAASM,EAAWxnwC,OAAQgowC,KAJ5Bd,EAASM,EAAWxnwC,OAAQgowC,GAC5Bb,EAAcK,EAAWxnwC,OAAQgowC,EAAYR,EAAWznrC,QAO1DsnrC,GACF,MACE,OAAQ7rtC,OACN,OAAQgstC,IAAehstC,EAAMx7C,OAASwnwC,EAAWxnwC,WAIjD,OAAQwnwC,KACP,OAAQC,KACR,OAAQb,KAOR,OAAQY,MACT,OAAQC,KACP,OAAQF,KAGTL,EACEO,EAAeznwC,OACfmmwC,EAA4B8B,aAE9Bf,EAAS1rtC,EAAMx7C,OAAQmmwC,EAA4B8B,cAGnDf,EAAS1rtC,EAAMx7C,OAAQw7C,EAAMukC,SAhB7BmnrC,EAAS1rtC,EAAMx7C,OAAQw7C,EAAMukC,OAC7BmnrC,EAAS1rtC,EAAMx7C,OAAQmmwC,EAA4B8B,aACnDf,EAASM,EAAWxnwC,OAAQmmwC,EAA4B8B,cAgB1Dv9vC,MAEA,OAAQ88vC,OACN,OAAQhstC,IAAUgstC,EAAWxnwC,OAASw7C,EAAMx7C,UAG9CknwC,EAASM,EAAWxnwC,OAAQwnwC,EAAWznrC,OACvCsnrC,IAEJ,CACF,CAIA,OADmBh2d,EAAiB21d,EAEtC,CAiEkBkB,CAAqBroxB,GAC/B0mxB,EAAgB7luC,EAAQv/B,OAE9B,IAAIgnwC,EACAC,EACAC,EAGJ,GADwBlC,EAA4BmC,iBAAiBxzvC,GAS9D,CACLszvC,EAAoB,IAAc34oB,MAClC44oB,EAAkBvzvC,EAAQmgrB,OAAS,IAAYpqC,IAAM,IAAYs2F,UACjEgnhB,EAAkB,IAAI9mvC,aAAaklvC,GACnC,IAAK,IAAIpjwC,EAAI,EAAGA,EAAIojwC,EAAepjwC,IACjCglwC,EAAgBhlwC,GAAKu9B,EAAQv9B,GAAGnD,MAEpC,KAfoB,CAClBoowC,EAAoB,IAAcpkpB,cAClCqkpB,EAAkB,IAAYvnhB,KAC9BqnhB,EAAkB,IAAIznvC,WAA2B,EAAhB6lvC,GACjC,IAAK,IAAIpjwC,EAAI,EAAGA,EAAIojwC,EAAepjwC,IACjC,IAAWywnB,UAAUlzlB,EAAQv9B,GAAGnD,OAAQulwC,GACxC,IAAW/s/B,KAAK+s/B,EAAoB4C,EAAqB,EAAJhlwC,EAEzD,CASA,MAAMolwC,EAAa,IAAQjmsC,OAAO,CAChCxtD,QAASA,EACTiuuB,YAAaslhB,EACbr7mB,cAAeo7mB,EACf94vC,OAAQ,CACN49oB,gBAAiBi7mB,EACjB9iwC,MAAOkhwC,EACPvmwC,OAAQ,GAEVs34B,QAAS,IAAI,IAAQ,CACnBwC,MAAO,IAAY/7F,cACnBg8F,MAAO,IAAYh8F,cACnB27F,mBAAoB,IAA0Bj/F,QAC9Ck/F,oBAAqB,IAA2Bl/F,YAI9C+td,EAAc,IAAI9nvC,WAA2B,EAAhB6lvC,GACnC,IAAK,IAAIpjwC,EAAI,EAAGA,EAAIojwC,EAAepjwC,IACnBu9B,EAAQv9B,GAAG48E,MACnBipC,QAAQw3zB,GACdgoV,EAAgB,EAAJrlwC,EAAQ,GAAKq96B,EAAkB,GAC3CgoV,EAAgB,EAAJrlwC,EAAQ,GAAKq96B,EAAkB,GAC3CgoV,EAAgB,EAAJrlwC,EAAQ,GAAKq96B,EAAkB,GAC3CgoV,EAAgB,EAAJrlwC,EAAQ,GAAKq96B,EAAkB,GAG7C,MAAMioV,EAAY,IAAQnmsC,OAAO,CAC/BxtD,QAASA,EACTiuuB,YAAa,IAAYjC,KACzB9zF,cAAe,IAAchpC,cAC7B10mB,OAAQ,CACN49oB,gBAAiBs7mB,EACjBnjwC,MAAOkhwC,EACPvmwC,OAAQ,GAEVs34B,QAAS,IAAI,IAAQ,CACnBwC,MAAO,IAAY/7F,cACnBg8F,MAAO,IAAYh8F,cACnB27F,mBAAoB,IAA0B5mL,OAC9C6mL,oBAAqB,IAA2B7mL,WAIpD,OAAO,IAASglJ,SAAS,gBAAiB,CACxChtzB,QAASy9sC,EACT9/mC,OAAQggnC,GAEZ,CASAtC,EAA4BmC,iBAAmB,SAAUxzvC,GACvD,OAAOA,EAAQi93B,oBACjB,EAOAo0X,EAA4BjvoB,eAAiB,cAO7CivoB,EAA4BlvoB,gBAAkB,cAM9CkvoB,EAA4B8B,YAAc,IAAI,IAAM,EAAK,EAAK,EAAK,GAEnE,QAAe,8BAA2B,I,6ZC/d1C,MAAMS,EAAgB,CAAC,EAevB,EAAe,4BAxDf/trC,eAAmDgurC,EAAYj9L,IAC7DA,EAAiBA,GAAkB,CAAC,GACrB/4G,WAAa+4G,EAAe/4G,YAAc,WACzD+4G,EAAe94G,0BACb84G,EAAe94G,2BAA6B,WAC9C84G,EAAeh1G,gBAAkBg1G,EAAeh1G,kBAAmB,EAEnEiyS,EAAaA,GAAc,IAAOlupB,aAElC,IAAMwH,OAAO3nlB,OAAO,aAAcquuC,GAG7BA,EAAWC,8BACd,OACE,oCACA,+PAIJ,MAAM1kwC,EAAMykwC,EAAWzkwC,KAAO,IAAWkqjC,cACzC,KAAK,OAAQlqjC,GACX,OAqBJy2E,eAAuC18E,GACrC,MAAM4qwC,EAAa,QAGnB,IAAIvypC,EAAUoypC,EAAc5rnB,UACvB,OAAQxmiB,KACXA,EAAU,IAAYk6hB,YAAYq4nB,GAClCH,EAAc5rnB,SAAYxmiB,GAG5B,MAAMupf,QAAiBvpf,EACvB,OAAO,IAAgB2mgB,QAAQpd,EAAU5hmB,EAC3C,CAjCW6qwC,CAAwBp9L,GAGjC,IAAI7zc,EACJ,MAAM5d,EAAS,IAAWi5F,oBACtB,OAAQj5F,KACV4d,EAAU,CAAC5d,IAGb,MAAMpa,EAAW,IAAI,IAAS,CAC5Bx0lB,IAAK,GAAG,IAAW0nsB,0CACnB31F,gBAAiB,CACfl5mB,IAAKA,GAEP2znB,QAASA,IAGX,OAAO,IAAgB5a,QAAQpd,EAAU6re,EAC3C,EAiBkD,I,mRCrClD,QAAe,4BAnBf/w/B,eAAuC18E,GACrC,MAAMqq0B,QAAgB,IAAgBh4L,eAAe,MAAOryoB,GAI5D,IAAIsmB,GAFJtmB,EAAUA,GAAW,IAAOw8mB,cAERl2lB,MAEpB,KAAK,OAAQA,GAAQ,CACnB,MAAMw7D,GAAS9hF,EAAQ8xF,cAAgB,IAAMs8jB,OAAOpJ,mBACpD1+nB,EAAQ,IAAI,IAAkB,CAC5Bw7D,MAAO,+EAA+EA,KAE1F,CAIA,OAFAuovB,EAAQ/jzB,MAAQA,EAET+jzB,CACT,EAEsC,I,wcCmCtC,QAAe,4BAlFf,SAA0Crq0B,GAExC,MAAMooK,EAAY,GAClB,IAAIgrf,GAFJpzpB,EAAUA,GAAW,IAAOw8mB,cAEL42C,SAGvB,KAAK,OAAQA,GACX,MAAM,IAAI,IAAe,kCAItB,OAAQA,EAAS5tpB,cAAgB,OAAQ4tpB,EAASthC,iBAGrDshC,EAAWA,EAASnunB,YAAYislB,eAAekiC,IAGjD,MAAM5tpB,EAAa4tpB,EAAS5tpB,WACtBm5rB,EAAc,IAAQzzoB,MAAMlrD,EAAQ2+rB,aAAe,IAAQ5tC,UAC3D7tpB,EAASlD,EAAQkD,QAAU,IAkDjC,IAhDI,OAAQsC,EAAWy1Q,SACrB7yG,EAAUvjK,KACR,IAAI,IAAiB,CACnBuupB,SAAU,IAAiBysC,6BACzBzsC,EACA,SACAlwpB,GAEFsC,WAAY,CACVs8E,MAAO,IAAI,IAA+B,EAAK,EAAK,EAAK,IAE3D68mB,YAAaA,MAKf,OAAQn5rB,EAAW4rnB,UACrBhpd,EAAUvjK,KACR,IAAI,IAAiB,CACnBuupB,SAAU,IAAiBysC,6BACzBzsC,EACA,UACAlwpB,GAEFsC,WAAY,CACVs8E,MAAO,IAAI,IAA+B,EAAK,EAAK,EAAK,IAE3D68mB,YAAaA,MAKf,OAAQn5rB,EAAW6rnB,YACrBjpd,EAAUvjK,KACR,IAAI,IAAiB,CACnBuupB,SAAU,IAAiBysC,6BACzBzsC,EACA,YACAlwpB,GAEFsC,WAAY,CACVs8E,MAAO,IAAI,IAA+B,EAAK,EAAK,EAAK,IAE3D68mB,YAAaA,KAKfv2hB,EAAUllK,OAAS,EACrB,OAAO,IAAI,IAAU,CACnB+g1B,cAAc,EACdD,kBAAmB57qB,EACnBu7qB,WAAY,IAAI,IAA2B,CACzCvjpB,MAAM,EACN0jpB,aAAa,KAMrB,EAC+C,I,uLC3E/C,QAAe,4BALf,SAAiC9j1B,GAE/B,MAAMsmB,GADNtmB,EAAUA,GAAW,IAAOw8mB,cACNl2lB,OAAS,IAAqBgt6B,OACpD,OAAO,IAAmB/gT,YAAYjsnB,EACxC,EACsC,I,sGCnBtC,SAASwkvC,EAAoBzgc,EAASgoI,GACpC,MAAM+e,GAAe,OAAa/e,EAAe,oBAC7CA,EAAc/vU,WAAW,oBACzB+vU,EAAc/yV,SAElB,KAAK,OAAQ8xW,GACX,OAGF,KAAK,OAAQ/mJ,EAAQnvgB,QAKnB,YAJA4v8B,EAAoB3+J,gBAClB,0CACA,+JAKJ,MAAM9/lC,EAAUg+zB,EAAQnvgB,OAAO7uT,SAAW,IAAOmwmB,aACjD,IAAI,OAAQ40W,EAAapjyB,OAAQ,CAC/B,MAAM+8kC,EAAe1+vC,EAAQ+k9B,EAAapjyB,OAC1C,OAAO,IAAI,IAAgB,CACzBhxI,QAASo06B,EACTpjyB,MAAO+8kC,GAEX,CAGF,CAGAD,EAAoB3+J,gBAAkB,IACtC,QAAe,8BAAmB,I,uICZlC,QAAe,4BAtBf,SAA2B9hS,EAASgoI,GAClC,MAAMmoB,EAAoBnwJ,EAAQmwJ,kBAClC,KAAK,OAAQA,GACX,OAEF,MAAMtktB,EAASsktB,EAAkBtktB,OAE3B1xD,GAAQ,OAAa6tvB,EAAe,oBACtCA,EAAc/vU,WAAW,oBAAoB99a,MAC7C6tvB,EAAc7tvB,MAElB,GAAqB,iBAAVA,EACT,OAAO0xD,EAAO1xD,GAGhB,MAAMzpM,EAAQy/8B,EAAkB4K,SAASh05B,UAAU,SAAU1oE,GAC3D,OAAOA,IAAO87M,CAChB,GAEA,OAAOzpM,GAAS,EAAIm7P,EAAOn7P,QAAS3V,CACtC,EAEgC,I,sGCjBhC,SAAS4lwC,EAAiB3gc,EAAS0vJ,GACjC,MAAM3I,GAAe,OAAa2I,EAAY,oBAC1CA,EAAWz3V,WAAW,oBACtBy3V,EAAWz6W,SAEf,KAAK,OAAQ8xW,GACX,OAGF,KAAK,OAAQ/mJ,EAAQnvgB,QAKnB,YAJA8v8B,EAAiB7+J,gBACf,uCACA,4JAKJ,MAAM9/lC,EAAUg+zB,EAAQnvgB,OAAO7uT,SAAW,IAAOmwmB,aACjD,IAAI,OAAQ40W,EAAapjyB,OAAQ,CAC/B,MAAMg1R,EAAY32c,EAAQ+k9B,EAAapjyB,OACvC,OAAO,IAAI,IAAa,CACtB+wd,KAAMqyU,EACNpjyB,MAAOg1R,GAEX,CAGF,CAGAgozB,EAAiB7+J,gBAAkB,IACnC,QAAe,8BAAgB,I,qKC5C/B,MAAM8+J,EAAyB,CAC7Bp1V,OAAQ,EACRC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,EACNC,KAAM,IAGF+0V,EAAe,CACnBr1V,YAAQzw6B,EACR0w6B,KAAM,IACNC,KAAM,IACNC,KAAM,IACNC,KAAM,IACNC,KAAM,IACNC,KAAM,KA8BR,EAAe,4BAxBf,SAA2Bn0S,GACzB,MAAMyB,EAAgBzB,EAASyB,cAC/B,IAAI9d,EAEFA,EAD2B,iBAAlB8d,EACW,IAAkB20S,SAAS30S,GAE3BA,EAGtB,MAAM7d,EAAyBqlpB,EAAuBjpoB,EAASx5nB,MACzD+58B,EAAY2oT,EAAalpoB,EAASx5nB,MACxC,MAAO,CACLo9mB,uBAAwBA,EACxB28V,UAAWA,EACX50C,sBAAuB,SAAU321B,EAAQ88B,EAAY5wG,GACnD,OAAO,IAAkByq6B,sBACvBhoT,EACA3uiB,EACA88B,EACA8xgB,EAAyB1inB,EAE7B,EAEJ,EACgC,I,2FCtBhC,QAAe,4BAtBf,SACEiowC,EACAC,EACAC,GAiBA,OAdA,IAAMrnpB,OAAO96mB,OAAO,qBAAsBiiwC,GAC1C,IAAMnnpB,OAAO96mB,OAAO,oBAAqBkiwC,GACzC,IAAMpnpB,OAAO96mB,OAAO,mBAAoBmiwC,GAItC,+CAA+CF,MAAuBC,2FAEjCC,gDACEA,mJAM3C,EACkC,I,wJC7BlC,MAAMr5R,EAA2B,IAAI,IAqJrC,EAAe,4BA5If,SAA6BX,EAAyBx69B,GAEpD,IAAMmtmB,OAAO3nlB,OAAO,0BAA2Bg18B,GAC/C,IAAMrtX,OAAO3nlB,OAAO,UAAWxlB,GAE/B,MAAMw59B,EAAuBgB,EAAwBhB,qBAC/CysR,EAAuBzrR,EAAwBnu+B,OAC/CoowC,EAAoB,IAAwBp5R,gBAAgBr79B,GAC5DivnC,EAAoB,IAAwBxzJ,qBAChDjB,EACAx69B,EACAm79B,GAEI5q+B,EAAQ0+nC,EAAkBxinC,EAC1BvhB,EAAS+joC,EAAkBvinC,EAEjC,IAAIgsO,EAAY+7gC,EAoElB,SAA+BlkwC,EAAOrF,GACpC,MACM09uB,EAAc,EAAM19uB,EAE1B,IAAIkkwC,EAAmB,GAHJ,EAAM7+vC,KAIc,IAAnC6+vC,EAAiBj9vC,QAAQ,OAC3Bi9vC,GAAoB,MAEtB,IAAIC,EAAoB,GAAGzmhB,IAK3B,OAJwC,IAApCymhB,EAAkBl9vC,QAAQ,OAC5Bk9vC,GAAqB,MAGhB,iJAE8B9+vC,oDACQA,gFAET6+vC,2CACAC,wHAKtC,CA3FMqF,CAAsBnkwC,EAAOrF,GA6FnC,SAA+BqF,EAAOrF,GACpC,MACM09uB,EAAc,EAAM19uB,EAE1B,IAAIkkwC,EAAmB,GAHJ,EAAM7+vC,KAIc,IAAnC6+vC,EAAiBj9vC,QAAQ,OAC3Bi9vC,GAAoB,MAEtB,IAAIC,EAAoB,GAAGzmhB,IAK3B,OAJwC,IAApCymhB,EAAkBl9vC,QAAQ,OAC5Bk9vC,GAAqB,MAGhB,iNAGkC9+vC,wDACQA,gFAEb6+vC,2CACAC,4RAKiCD,iEAIvE,CAzHMuF,CAAsBpkwC,EAAOrF,GAKjC,OAJAwtP,GAAa,KACbA,GAAa8gvB,EAMf,SAA+BysR,GAC7B,MAAO,iWAQiBA,irBAoB1B,CAlCM2O,CAAsB3O,GAoC5B,SAAmCA,GACjC,MAAO,8VAQiBA,mdAgB1B,CA5DM4O,CAA0B5O,GACvBvtgC,CACT,EAoHkC,I,oOClFlC,QAAe,4BA3Df,SAA2B4qY,GACzB,MACMwxoB,GADiBxxoB,EAAKmI,YAAc,IAAO9lB,cACAovpB,2BAC3CC,EAAiB1xoB,EAAK4H,WAE5B,KAAK,OAAQ4poB,GACX,OAAOE,EAQT,MAAM9poB,EAAa,IACnB,OAAcA,EAAY8poB,GAC1B,IAAK,MAAMrnjC,KAASmnjC,EAA0BG,gBAAiB,CAE7D,MAAMC,EAAsBvnjC,EAAMu9a,WAAW,GAC7C,KAAK,OAAQgqoB,KAAyBF,EAAeE,GACnD,OAAOF,EAGT,MAAM7sqC,EAAY,IACb6sqC,EAAeE,GAClBjpkC,QAAS0hB,EAAM1hB,SAIjB,OAAQ9jG,EAAU4P,MAChB,KAAK,IAAe+wlB,aACpB,KAAK,IAAeF,eACpB,KAAK,IAAe8M,WACpB,KAAK,IAAeE,UAClB,MACF,QACE,OAAOo/jB,EAGX,IAAK,MAAMxpM,KAAkB792B,EAAMu9a,WAAY,CAC7C,MAAMiqoB,EAAgBjqoB,EAAWsgc,GAIjC,KACG,OAAQ2pM,GAAelpkC,UACxBkpkC,EAAcp9pC,OAAS5P,EAAU4P,KAEjC,OAAOi9pC,EAGT9poB,EAAWsgc,QAAkBj9jC,CAC/B,CAEA28nB,EAAWgqoB,GAAuB/sqC,CACpC,CAEA,OAAO+iiB,EAAWtrnB,OAAO,IAC3B,EACgC,I,2FC7BhC,QAAe,4BApBf,SAAkCykT,EAAQwrrB,EAAUj4+B,EAAWo3B,GAC7D,KAAK,OAAQq1R,GACX,OAEF,IAAI,OAAQwrrB,IAAaxrrB,EAAOxyT,KAAOg++B,EACrC,OAEF,MACMpxW,GADUp6U,EAAO7uT,SAAW,CAAC,GACLoC,GAC9B,KAAK,OAAQ6moB,GACX,OAEF,MACMqwW,GADarwW,EAAchskB,YAAc,CAAC,GACZzjC,GACpC,OAAK,OAAQ8/8B,GAGNA,OAHP,CAIF,EAEuC,I,0FCKvC,QAAe,4BAxBf,SAA6Bw/C,EAAoB12hC,EAAWo3B,GAC1D,KAAK,OAAQs//B,GACX,OAEF,MAAM/vZ,EAAmB+vZ,EAAmB/vZ,iBAC5C,IAAK,MAAMgke,KAAmBhke,EAE5B,GADsBgke,EAAgBpr7B,MACpBtlL,KAAO+F,EAAW,CAClC,MACMwY,EADamylC,EAAgB9viC,WACPzjC,GAC5B,IAAI,OAAQ5e,GACV,OAAOA,CAEX,CASJ,EAEkC,I,yFC7BlC,QAAe,4BARf,SAAsB+7P,EAAM+9sB,GAC1B,OACE,OAAQ/9sB,KACR,OAAQA,EAAKs/W,cACb,OAAQt/W,EAAKs/W,WAAWy+V,GAE5B,EAE2B,I,qPCmB3B,SAASkrS,EAAgBjswC,GAEvB,IAAMgknB,OAAO1umB,OAAO,gBAAiBtV,EAAQgtE,OAC7C,IAAMg3iB,OAAO3nlB,OAAO,qBAAsBr8B,EAAQy86B,YAGlD,MAAM2rH,EAAepoiC,EAAQgtE,MACvByv2B,EAAaz86B,EAAQy86B,WACrB2B,EAAap+6B,EAAQo+6B,WACrBigO,EAA4Br+oC,EAAQq+oC,4BAA6B,EACjED,EAAwBp+oC,EAAQo+oC,sBAGtC,GAAIC,KAA8B,OAAQD,GACxC,MAAM,IAAI,IACR,qFAMJ,MAAM8tH,EA8FR,SAA6BzvV,GAC3B,MAAMylC,EAAkBzlC,EAAW0lC,UAC7BhwrB,EAASsqpB,EAAWtqpB,OACpBmwW,EAAam6S,EAAWn6S,WAE9B,IAAI6poB,EAYAC,GAXA,OAAQlqT,IACV+pT,EAAgBxyV,oBACd,+BACA,4HAEF0yV,EAAqBjqT,IACZ,OAAQ5/U,KACjB6poB,EAAqB7poB,EAAW,kCAOlC,MAAMw8S,EAAmB,CAAC,EAC1B,IAAK,MAAMiB,KAActD,EAAY,CACnC,IACGA,EAAWv26B,eAAe656B,IAEZ,cAAfA,GACe,eAAfA,GACe,WAAfA,EAEA,SAGF,MAAM945B,EAAWw15B,EAAWsD,GACxBt/6B,MAAMK,QAAQmmB,IAChBmlvC,GAAiB,OAAQA,GAAkBA,EAAiB,CAAC,EAC7DA,EAAersV,GAAc945B,GAE7B635B,EAAiBiB,GAAc945B,CAEnC,CAEA,MAAO,CACL635B,iBAAkBA,EAClBstV,eAAgBA,EAChBrskC,UAAWoskC,EACXh6+B,OAAQA,EACRmwW,WAAYA,EAEhB,CA9I2B+poB,CAAoB5vV,GAE7C,IAAI0gM,EAQAp96B,GAPA,OAAQmskC,EAAiBE,kBAC3BjvJ,EAAoB,IAAI,IAAkB,CACxCnwiC,MAAOo79B,EACP9+9B,WAAY4isC,EAAiBE,mBAK7B,OAAQF,EAAiBnskC,aAC3BA,EAAY,IAAI,IAAoB,CAClCh9G,UAAWmprC,EAAiBnskC,UAC5Bq+uB,WAAYA,KAIhB,MAAM3v6B,EAAY,IAAc0qlC,uBAC1Br6K,EAAmBotV,EAAiBptV,iBAE1C,IAAI08J,EACAtqE,EACAo7P,EACJ,GAAIjuH,EAA2B,CAC7B,MAAMkuH,EAkMV,SACEnkO,EACA35hC,EACAqw6B,EACAV,EACAggO,GAEA,MAAMz+C,EAAkB,CAAC,EACnB6sK,EAA8B,CAAC,EACrC,IAAIC,EAAoB,EAExB,IAAK,MAAM1sV,KAAcjB,EAAkB,CACzC,IAAKA,EAAiB546B,eAAe656B,GACnC,SAMF,MAAM945B,EAAW635B,EAAiBiB,GAClC,KAAK,OAAQ3B,MAAgB,OAAQn35B,EAASu5N,YAC5C,MAAM,IAAI,IACR,YAAYu/rB,oCAIhB,IAAI2sV,EAAsB,IAAa14I,uBAAuBj0M,IASpC,KAAxB2sV,GACA/sK,EAAgBz5lC,eAAewmwC,MAE/BA,EAAsB,YAAYD,IAClCA,KAGF,MAAM/mR,EAAgBinR,EAAsB1lvC,GAC5Cy+9B,EAAcrg/B,KAAO066B,EACrB4/K,EAAgB+sK,GAAuBhnR,EASvC,IAAIknR,EAAsBF,EAAoBtrwC,cACzCwrwC,EAAoB/puC,WAAW,OAClC+puC,EAAsB,IAAIA,KAK5B,IAAIjqH,EAAsB17nC,EAASu5N,YAC9B,OAAQmi6B,KAEXA,GADuB,OAAkB17nC,GACJ0m5B,sBACnCyQ,EAAWpn2B,OACXon2B,EAAWtq0B,WAAa7sF,EAAS6sF,WACjCs07B,IAIJ,MAAMlhhC,EAAY,IAAI,IAAgB6j/B,UACtC7j/B,EAAU7hB,KAAOunwC,EACjB1lvC,EAAU8lD,MAAQo79B,EAClBlhhC,EAAU1e,KAAOye,EAASze,KAC1B,MAAMm9mB,EACJ,IAAkBi6a,eAAe+iH,GAEjCh9hB,IAAsB,IAAkBO,KACxCP,IAAsB,IAAkBQ,cACxCR,IAAsB,IAAkB2L,SAExC26oB,EAAgB9/J,gBACd,+BACA,yBAAyBygK,kJAE3BjqH,EAAsB,IAAIv/nC,aAAau/nC,IAEzCz7nC,EAAUy+lB,kBACR,IAAkBi6a,eAAe+iH,GACnCz7nC,EAAUs5N,WAAami6B,EACvBvE,EAAsBv5oC,KAAKqiB,GAG3BslvC,EAA4BE,GAAuB,CACjDxlvC,UAAW0lvC,EAEf,CAEA,MAAMC,EAAa,CACjBxgwC,QAAS,CAAC,GAEZwgwC,EAAWxgwC,QAAQoC,GAAa,CAC9B66D,WAAYq2hC,GAGd,MAAM2sK,EAAmB,IAAel6nB,SAASy6nB,GAMjD,MAAO,CACL7+kC,MAAOv/K,EACPq+vC,sBAN4B,CAC5BxjsC,WAAYkjsC,GAMZF,iBAAkBA,EAClBS,gBAAiBT,EAAiBjgwC,QAAQoC,GAE9C,CAvT6Bu+vC,CACvB5kO,EACA35hC,EACAqw6B,EACAV,EACAggO,GAEFkuH,EAAmBC,EAAiBD,iBAMpCp7P,EAAqB,CALK,IAAI,IAAkB,CAC9C4iH,kBAAmBy4I,EAAiBO,sBACpC9+kC,MAAOu+kC,EAAiBQ,kBAI5B,KAAO,CACL,MAAME,EAoHV,SACE7kO,EACA35hC,EACAqw6B,EACAV,GAEA,MAAMuhL,EAAkB,CAAC,EACnBs+D,EAAyB,CAAC,EAC1BivG,EAAyB,CAAC,EAChC,IAAIC,EAAkB,EACtB,IAAK,MAAMptV,KAAcjB,EAAkB,CACzC,IAAKA,EAAiB546B,eAAe656B,GACnC,SAGF,KAAK,OAAQ3B,GACX,MAAM,IAAI,IACR,YAAY2B,oCAIhB,MAAM945B,EAAW635B,EAAiBiB,GAC5B1B,GAAiB,OAAkBp35B,GAEzCg3oC,EAAuBl+O,GAAc,CACnC79S,WAAYiroB,GAGdxtK,EAAgB5/K,GAAc4sV,EAAsB1lvC,GAEpDimvC,EAAuBC,GACrB9uV,EAAe1Q,sBACbyQ,EAAWpn2B,OACXon2B,EAAWtq0B,WAAa7sF,EAAS6sF,WACjCs07B,GAGJ+kO,GACF,CAEA,MAAMN,EAAa,CACjBxgwC,QAAS,CAAC,GAEZwgwC,EAAWxgwC,QAAQoC,GAAa,CAC9B66D,WAAYq2hC,GAGd,MAAM2sK,EAAmB,IAAel6nB,SAASy6nB,GAQjD,MAAO,CACL9yV,iBAPuB,CACvB/rvB,MAAOv/K,EACPu+D,MAAOo79B,EACP9+9B,WAAY20lC,GAKZivG,uBAAwBA,EACxBZ,iBAAkBA,EAClBS,gBAAiBT,EAAiBjgwC,QAAQoC,GAE9C,CAjL0B2+vC,CACpBhlO,EACA35hC,EACAqw6B,EACAV,GAEFkuV,EAAmBW,EAAcX,iBACjC,MAAMvyV,EAAmBkzV,EAAclzV,iBACvCyhK,EAAgB,IAAI,IAAc,CAChCxugC,MAAO+s2B,EAAiB/s2B,MACxB1D,WAAYyw2B,EAAiBzw2B,WAC7B0kH,MAAOi/kC,EAAcF,gBACrB5qoB,YAAa8qoB,EAAcC,yBAE7Bh8P,EAAqB,EACvB,CAEA,MAAMsvC,EAAiB,GACvB,IACE,OAAQg7B,KACR,OAAQ2hC,KACR,OAAQp96B,GACR,CACA,MAAMsy2B,EAAgB,IAAI,IAAc,CACtC3piC,GAAI,EACJrD,KAAM,cACN2nE,MAAOo79B,EACPozC,cAAeA,EACf2hC,kBAAmBA,EACnBqrE,oBAAqBzo/B,IAEvByg3B,EAAe37iC,KAAKwtiC,EACtB,CAEA,MAAMg7N,EAAkB,CACtBny8B,OAAQox8B,EACR9rN,eAAgBA,EAChBtvC,mBAAoBA,EACpB5uY,WAAY4poB,EAAiB5poB,WAC7BnwW,OAAQ+5+B,EAAiB/5+B,QAG3B,OAAO,IAAI,IAAmBk7+B,EAChC,CAuQA,SAASV,EAAsB1lvC,GAC7B,MAAMw8mB,EAiBR,SAAgCA,GAC9B,OAAQA,GACN,IAAK,OACH,MAAO,OACT,IAAK,gBACH,MAAO,QACT,IAAK,QACH,MAAO,QACT,IAAK,iBACH,MAAO,SACT,IAAK,MACH,MAAO,QACT,IAAK,eACH,MAAO,SACT,IAAK,QACH,MAAO,UACT,IAAK,SACH,MAAO,UAEb,CApCwBk6gB,CAAuB12nC,EAASw8mB,eAEtD,MAAO,CACLj7nB,KAAMye,EAASze,KACfi7nB,cAAeA,EAEnB,CAiCAwooB,EAAgBxyV,oBAAsB,IACtCwyV,EAAgB9/J,gBAAkB,IAElC,QAAe,8BAAe,I,2ZC9V9B,SAASmhK,EAA2BC,GAClC,MAAMn0J,EAAkB,CACtBpr7B,MAAOu/kC,EAAev/kC,MACtB1kH,WAAY,CAAC,GAGTA,EAAaiksC,EAAejksC,WAClC,IAAK,MAAMy22B,KAAcz22B,EACvB,GAAIA,EAAWpjE,eAAe656B,GAAa,CACzC,MAAMytV,EAAclksC,EAAWy22B,GACzB945B,EAAW,CAGf8rR,SAAU+14B,EAAiB0kF,EAAYz69B,UACvC5gB,OAAQq7+B,EAAYr7+B,OACpBmwW,WAAYkroB,EAAYlroB,YAM1B82e,EAAgB9viC,WAAWy22B,IAAc,OACvCytV,EAAY53nB,QACZ3unB,GACA,EAEJ,CAGF,OAAOmylC,CACT,CAEA,SAAS0vE,EAAiBlrF,GACxB,MAAM16lC,EAAS06lC,EAAe16lC,OACxB+1B,EAAS,IAAIx4B,MAAMyC,GACzB,IAAK,IAAIgC,EAAI,EAAGA,EAAIhC,EAAQgC,IAC1B+zB,EAAO/zB,GAAK,OAAO8D,QAAQ40lC,EAAe14lC,IAE5C,OAAO+zB,CACT,CAEA,QAAe,4BApHf,SAAoCj5B,GAElC,MAAM+iF,GADN/iF,EAAUA,GAAW,IAAOw8mB,cACFz5hB,UAIpBm4O,EAASl7T,EAAQk7T,OAOvB,IAAIh2T,EAJJ,IAAM8+mB,OAAO3nlB,OAAO,oBAAqB0mD,GACzC,IAAMihiB,OAAO3nlB,OAAO,iBAAkB6+R,GAItC,MAAMslvB,EAAiB,GACvB,IAAIitN,EACJ,IAAI,OAAQ1qrC,EAAUuj9B,eAKpB,IADAmnO,EAAYjnwC,OAAOC,KAAKs8E,EAAUuj9B,eAAermhC,OAC5C/a,EAAI,EAAGA,EAAIuowC,EAAUvqwC,OAAQgC,IAAK,CACrC,MAAMgjiC,EAAiBulO,EAAUvowC,GAC3B+j9B,EAAelm4B,EAAUuj9B,cAAc4B,GACvCgxD,EAAkBh+xB,EAAO7uT,QAAQ488B,EAAaj7xB,OAE9Cwt5B,EAAgB,IAAI,IAAc,CACtCxugC,MAAOi84B,EAAaj84B,MACpB1D,WAAY2/4B,EAAa3/4B,WACzB0kH,MAAOkr6B,EACP/2d,YAAanioB,EAAQmioB,cAGvBq+a,EAAe37iC,KACb,IAAI,IAAc,CAChB6D,GAAIw/hC,EACJl79B,MAAOi84B,EAAaj84B,MACpBwugC,cAAeA,EACfrpzB,OAAQ82rB,EAAa92rB,OACrBmwW,WAAY2mV,EAAa3mV,aAG/B,CAGF,MAAM8S,EAAmB,GACzB,IAAI,OAAQryjB,EAAUwj9B,iBAKpB,IADAknO,EAAYjnwC,OAAOC,KAAKs8E,EAAUwj9B,iBAAiBtmhC,OAC9C/a,EAAI,EAAGA,EAAIuowC,EAAUvqwC,OAAQgC,IAAK,CACrC,MAAM47iC,EAAmB2sN,EAAUvowC,GAC7BqowC,EAAiBxqrC,EAAUwj9B,gBAAgBua,GACjD1ra,EAAiBvwoB,KACf,IAAI,IAAgB,CAClB6D,GAAIo4iC,EACJs4D,gBAAiBk0J,EAA2BC,GAC5Cv/kC,MAAOktI,EAAO7uT,QAAQkhwC,EAAev/kC,OACrC6nd,SAAU71oB,EAAQ61oB,WAGxB,CAGF,OAAO,IAAI,IAAmB,CAC5B36U,OAAQA,EACRslvB,eAAgBA,EAChBpra,iBAAkBA,EAClBtya,WAAY//I,EAAU+/I,WACtBqvD,OAAQpvM,EAAUovM,OAClBmwW,WAAYv/iB,EAAUu/iB,YAE1B,EA2CyC,I,m8BCAzC,SAASoroB,EACPr7N,EACAlwa,EACA+2d,EACArilC,GAEA,MAAMyyD,EAAa+o+B,EAAc/o+B,WACjC,KAAK,OAAQA,GACX,OAGF,MAAMqksC,EAAct7N,EAAcrl+B,MAElC,IAAI4gsC,EACJ,IACEA,EA0DJ,SACEtksC,EACA64jB,EACA+2d,EACAy0K,GAEA,MAAME,EAA0B,GAC1BluK,EAAkBzG,EAAgB5vhC,WAMxC,IAAK,MAAOy22B,EAAY2lE,KAAkBl/+B,OAAOi8B,QAAQk9jC,GAAkB,CAEzE,IAAKj6G,EAAcw3G,gBAtGF,GAuGf,SAGF,MAAMj2kC,EAAWqiD,EAAWy22B,GACtB79S,GAAa,OAAQj7mB,GACvBk7mB,EAAYl7mB,EAAS6Z,QACrBgtuC,EAAuBpoR,EAAeioR,GAEpCI,EAAmB7roB,EAAWh/nB,OAC9B+5lC,EAAkBv3G,EAAcu3G,kBAChC+wK,EAAoBD,EAAmB9wK,EAC7C,GAAI+wK,IAAsBL,EACxB,MAAM,IAAI,IACR,sBAAsB5tV,WAAoBiuV,uEAAuFL,OAIrIE,EAAwBhpwC,KAAK,CAC3BkpF,KAAMm0iB,EACN+6d,gBAAiBA,GAErB,CAEA,OAAO4wK,CACT,CAlGuCI,CACjC3ksC,EACA64jB,EACA+2d,EACAy0K,EAEJ,CAAE,MAAOl6vC,GAIP,YAHAmoB,QAAQqmC,KACN,gDAAgDow+B,EAAchtiC,UAAUoO,EAAM4qF,UAGlF,CAEA,MAAM6vqC,EAA6BN,EAAiC1qwC,OAEpE,GAAmC,IAA/BgrwC,EACF,OAIF,GACEP,EAAc,IAAcz1X,oBAC5Bg2X,EAA6B,IAAch2X,mBAM3C,YAJA,OACE,yCACA,mDAAmDm6J,EAAchtiC,wDAAwD,IAAc6y4B,uBAK3I,MAAMi2X,EA8HR,SACEN,EACAF,GAEA,MAAMO,EAA6BL,EAAwB3qwC,OACrDirwC,EAAmB,IAAI1rvC,WAC3ByrvC,EAA6BP,EAhMZ,GAmMnB,IAAK,IAAIzowC,EAAI,EAAGlD,EAAS,EAAGkD,EAAI2owC,EAAwB3qwC,OAAQgC,IAAK,CACnE,MAAMg9nB,EAAa2roB,EAAwB3owC,GAAG6oF,KACxCkvgC,EAAkB4wK,EAAwB3owC,GAAG+3lC,gBAC7C383B,EAAc4ha,EAAWh/nB,OAAS+5lC,EAExC,IAAK,IAAIzxiC,EAAI,EAAGA,EAAI80K,EAAa90K,IAAK,CACpC,MAAM080B,EAAe180B,EAAIyxiC,EACnBr5Z,EAAa5hsB,EA1MJ,EA0MawpD,EAE5B2itC,EAAiBt5uC,IACfqtmB,EAAWzthB,SAASyzxB,EAAcA,EAAe+0N,GACjDr5Z,GAIF,IAAK,IAAIhgrB,EAAIq5kC,EAAiBr5kC,EAlNf,EAkNiCA,IAC9CuqvC,EAAiBvqkB,EAAahgrB,GAAK,CAEvC,CAEA5hB,GAvNiB,EAuNPs+N,CACZ,CAEA,OAAO6tiC,CACT,CA/J2BC,CACvBR,EACAD,GAIIt0X,EAAU,IAAI,IAAQ,CAC1BwC,MAAO,IAAY/7F,cACnBg8F,MAAO,IAAYh8F,cACnB27F,mBAAoB,IAA0Bj/F,QAC9Ck/F,oBAAqB,IAA2Bl/F,UAGlD,OAAO,IAAQn4uB,OAAO,CACpBxtD,QAASA,EACTiuuB,YAAa,IAAYjC,KACzB9zF,cAAe,IAAchpC,cAC7BszR,QAASA,EACTnjQ,OAAO,EACP7koB,OAAQ,CACNjK,MAAOumwC,EACP5rwC,OAAQmswC,EACRj/mB,gBAAiBk/mB,IAGvB,CAuDA,SAASL,EAAuBpoR,EAAeioR,GAE7C,IAAItzK,EAAS30G,EAAc20G,OAC3B,MAAMg0K,EAAyB,IAAa58S,kBAC1Ci0B,EAAcl9+B,MAEV8lwC,EAAsB5oR,EAAc5k/B,QACtC4k/B,EAAcrrP,YACd,EAGAqrP,EAAcl9+B,OAAS,IAAa0ylC,OAEtCb,EADuB30G,EAAc2zG,SACb+B,aAAaf,IAIR,IAA3Bg0K,IACFh0K,EAAS,CAACA,IAGgB,IAAxBi0K,IACFj0K,EAAS,CAACA,IAGZ,MAAM4C,EAAkBv3G,EAAcu3G,kBAChCjmhC,EAAS,IAAI/0D,YAAYg7kC,EAAkB0wK,GAC3C5/qC,EAAO,IAAIglF,SAAS/7F,GACpBi0J,EAAS,IAAsBk03B,kBACnCpxgC,EACA235B,EAAcjiX,eAGhB,IAAK,IAAIv+nB,EAAI,EAAGA,EAAIyowC,EAAazowC,IAC/B,IAAK,IAAIsmD,EAAI,EAAGA,EAAI8itC,EAAqB9itC,IACvC,IAAK,IAAI5nC,EAAI,EAAGA,EAAIyqvC,EAAwBzqvC,IAC1CqnN,EAAOgy3B,EAAkB/3lC,EAAIsmD,EAAI5nC,EAAGy2kC,EAAO7uiC,GAAG5nC,IAKpD,OAAO,IAAInB,WAAWu0D,EACxB,CAuCA,QAAe,4BAtTf,SAAiCh3E,GAE/B,MAAM+iF,GADN/iF,EAAUA,GAAW,IAAOw8mB,cACFz5hB,UAIpBm4O,EAASl7T,EAAQk7T,OAGvB,IAAM8oT,OAAO3nlB,OAAO,oBAAqB0mD,GACzC,IAAMihiB,OAAO3nlB,OAAO,iBAAkB6+R,GAGtC,MAAMslvB,EAAiB,GACvB,IAAI,OAAQz99B,EAAUy99B,gBACpB,IAAK,IAAIt7iC,EAAI,EAAGA,EAAI69E,EAAUy99B,eAAet9iC,OAAQgC,IAAK,CACxD,MAAMmtiC,EAAgBtv9B,EAAUy99B,eAAet7iC,GACzCg0lC,EAAkBh+xB,EAAO7uT,QAAQgmiC,EAAcrk3B,OAC/CuglC,EAAuBb,EAC3Br7N,EACAryiC,EAAQmioB,YACR+2d,EACAl5lC,EAAQ6W,SAGJ2kkC,EAAgB,IAAI,IAAc,CACtCxugC,MAAOql+B,EAAcrl+B,MACrB1D,WAAY+o+B,EAAc/o+B,WAC1B0kH,MAAOkr6B,EACP/2d,YAAanioB,EAAQmioB,cAGvBq+a,EAAe37iC,KACb,IAAI,IAAc,CAChB6D,GAAIxD,EACJG,KAAMgtiC,EAAchtiC,KACpB2nE,MAAOql+B,EAAcrl+B,MACrBwugC,cAAeA,EACfrpzB,OAAQkgxB,EAAclgxB,OACtBmwW,WAAY+va,EAAc/va,WAC1BsT,QAAS24nB,IAGf,CAGF,MAAMn5nB,EAAmB,GACzB,IAAI,OAAQryjB,EAAUqyjB,kBACpB,IAAK,IAAIlwoB,EAAI,EAAGA,EAAI69E,EAAUqyjB,iBAAiBlyoB,OAAQgC,IAAK,CAC1D,MAAMk0mC,EAAkBr2hC,EAAUqyjB,iBAAiBlwoB,GACnDkwoB,EAAiBvwoB,KACf,IAAI,IAAgB,CAClB6D,GAAIxD,EACJG,KAAM+zmC,EAAgB/zmC,KACtB+zmC,gBAAiBA,EACjBpr7B,MAAOktI,EAAO7uT,QAAQ+smC,EAAgBpr7B,OACtC6nd,SAAU71oB,EAAQ61oB,WAGxB,CAGF,MAAMq7X,EAAqB,GAC3B,IAAI,OAAQnu7B,EAAUmu7B,oBACpB,IAAK,IAAIhsgC,EAAI,EAAGA,EAAI69E,EAAUmu7B,mBAAmBhugC,OAAQgC,IAAK,CAC5D,MAAM4unC,EAAoB/wiC,EAAUmu7B,mBAAmBhsgC,GACvDgsgC,EAAmBrsgC,KACjB,IAAI,IAAkB,CACpB6D,GAAIxD,EACJG,KAAMyunC,EAAkBzunC,KACxB2oL,MAAOktI,EAAO7uT,QAAQynnC,EAAkB9l8B,OACxC8l8B,kBAAmBA,IAGzB,CAGF,OAAO,IAAI,IAAmB,CAC5B54zB,OAAQA,EACRslvB,eAAgBA,EAChBpra,iBAAkBA,EAClB87X,mBAAoBA,EACpBpuyB,WAAY//I,EAAU+/I,WACtBqvD,OAAQpvM,EAAUovM,OAClBmwW,WAAYv/iB,EAAUu/iB,YAE1B,EAgOsC,I,kRCpPtC,QAAe,4BA3Ef,SAAiCzra,GAC/B,MAAMo/a,EAAa,IAAIxznB,WAAWo0M,GAClC,IAAIpzI,GAAc,OAASwyjB,GAQ3B,GAJoB,SAAhBxyjB,IACFA,EAAc,OAGZ,IAAwB+qrC,eAAe/qrC,GACzC,MAAO,CAELA,YAAaA,EACbi43B,cAAezlU,GAInB,MAAMjzX,EA6CR,SAAwBizX,GACtB,IAAIjzX,EAEJ,IACEA,GAAO,OAAsBizX,EAC/B,CAAE,MAAOxioB,GACP,MAAM,IAAI,IAAa,wBACzB,CAEA,OAAOuvQ,CACT,CAvDeyr/B,CAAex4nB,GAC5B,IAAI,OAAQjzX,EAAKrlP,MAEf,MAAO,CACL8lD,YAAa,IAAwB+33B,iBACrCG,YAAa34rB,GAIjB,IAAI,OAAQA,EAAKq3sB,OAGf,MAAO,CACL524B,YAAa,IAAwBuk4B,KACrCrM,YAAa34rB,GAIjB,IAAI,OAAQA,EAAK67zB,kBAEf,MAAO,CACLp7/B,YAAa,IAAwB833B,sBACrCI,YAAa34rB,GAIjB,IAAI,OAAQA,EAAKx6Q,MAEf,MAAO,CACLi7E,YAAa,IAAwB0k4B,QACrCxM,YAAa34rB,GAIjB,IAAI,OAAQA,EAAK0r/B,YAEf,MAAO,CACLjrrC,YAAa,IAAwB4k4B,WACrC1M,YAAa34rB,GAIjB,MAAM,IAAI,IAAa,wBACzB,EAcsC,I,uLCiOtC,SAAS2juB,EAAYn++B,GACnB,OAAIA,IAAS,IAAaqt6B,OACjB,QACErt6B,IAAS,IAAast6B,KACxB,OACEtt6B,IAAS,IAAaut6B,KACxB,OACEvt6B,IAAS,IAAawt6B,KACxB,YADF,CAGT,CAYA,SAAS24V,EAAsBnmwC,GAC7B,OAAIA,IAAS,IAAaqt6B,OACjB,KACErt6B,IAAS,IAAast6B,KACxB,MACEtt6B,IAAS,IAAaut6B,KACxB,OACEvt6B,IAAS,IAAawt6B,KACxB,QADF,CAGT,CAaA,SAAS44V,EAAqBt5vC,GAC5B,IAAIu5vC,EAAev5vC,EAAOmQ,WAI1B,OAHmC,IAA/BopvC,EAAa7lwC,QAAQ,OACvB6lwC,EAAe,GAAGv5vC,OAEbu5vC,CACT,CAaA,SAASC,EAAatmwC,EAAMuS,GAC1B,OAAIvS,IAAS,IAAaqt6B,OACjB,GAEF,IAAI965B,IACb,CAEA,QAAe,4BA/Xf,SAAgCkv/B,EAAiBjr6B,GAC/C,MAAM,cAAEwuzB,GAAkBy8G,GAEpB,MAAE/j8B,EAAK,MAAEgC,EAAK,eAAEgn5B,EAAc,cAAEO,EAAa,cAAEC,GACnD1w3B,EAAU80iB,UAENi7nB,EAAkB7msC,EAAMhlE,OACxB8rwC,GAAgB,OAAQv/S,KAAkB,OAAQC,GAExDliE,EAAcxB,UACZ,iBACA+iX,EACA,IAAkB/+W,UAGhBg/W,GACFxhX,EAAcxB,UACZ,kBACA5m5B,EACA,IAAkB4q5B,UAKtB,IAAK,IAAI9q5B,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAMG,EAAO6gE,EAAMhhE,GACb2n5B,EAAW85F,EAAYz+6B,EAAMhjE,IAC7B+pwC,EAA6B,sBAAsB5pwC,IACnD6pwC,EAA+B,sBAAsB7pwC,IAC3Dmo5B,EAAcrB,UACZ8iX,EACAC,EACA,IAAkBl/W,UAEpBxC,EAAclB,eAAe2iX,EAA4BpiX,EAAU,OACnEW,EAAclB,eAAe2iX,EAA4BpiX,EAAU,MACrE,CAGA,MAAMsiX,EAA6B,qBAC7BC,EAA+B,qBAC/BC,EAA8B,qBACpC7hX,EAAcrB,UACZgjX,EACAC,EACA,IAAkBp/W,UAEpB,IAAK,IAAI9q5B,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAMG,EAAO6gE,EAAMhhE,GACboqwC,EAAqB,sBAAsBjqwC,IAC3CkqwC,EAAoBlqwC,EAC1Bmo5B,EAAclB,eACZ6iX,EACAG,EACAC,EAEJ,CAGA,MAAMC,EAAmB,WACnBC,EAAqB,WACrBC,EAAoB,WAC1BliX,EAAcrB,UACZqjX,EACAC,EACA,IAAkBz/W,UAEpB,IAAK,IAAI9q5B,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAM2n5B,EAAW85F,EAAYz+6B,EAAMhjE,IACnCso5B,EAAclB,eAAekjX,EAAkB3iX,EAAU3m1B,EAAMhhE,GACjE,CAGA,MAAMyqwC,EAAqB,aACrBC,EAAuB,aAE7BpiX,EAAcrB,UACZwjX,EACAC,EACA,IAAkB5/W,UAEpBxC,EAAclB,eAAeqjX,EAAoB,OAAQ,cACzDniX,EAAclB,eAAeqjX,EAAoB,OAAQ,YAGzD,MAAME,EAAgB,QAChBC,EAAkB,QAExBtiX,EAAcrB,UACZ0jX,EACAC,EACA,IAAkB9/W,UAEpBxC,EAAclB,eAAeujX,EAAe,OAAQ,aACpDriX,EAAclB,eAAeujX,EAAe,QAAS,kBACrDriX,EAAclB,eAAeujX,EAAe,MAAO,aACnDriX,EAAclB,eAAeujX,EAAe,MAAO,aACnDriX,EAAclB,eAAeujX,EAAe,MAAO,eACnDriX,EAAclB,eAAeujX,EAAe,QAAS,yBAGrD,MAAME,EAAwB,gBAE9BviX,EAAcrB,UACZ4jX,EAF8B,gBAI9B,IAAkB//W,UAEpBxC,EAAclB,eACZyjX,EACAX,EACAC,GAEF7hX,EAAclB,eACZyjX,EACAN,EACAC,GAEFliX,EAAclB,eACZyjX,EACAH,EA7C0B,cAgD5BpiX,EAAclB,eACZyjX,EACAD,EAtCqB,SA2CvB,MAAME,EAAqB,aACrBC,EAAuB,aACvBC,EAAsB,aAC5B1iX,EAAcrB,UACZ6jX,EACAC,EACA,IAAkBjgX,UAEpB,IAAK,IAAI9q5B,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAM2n5B,EAAW85F,EAAYz+6B,EAAMhjE,IACnCso5B,EAAclB,eAAe0jX,EAAoBnjX,EAAU3m1B,EAAMhhE,GACnE,CAKA,CACE,MAAM2o5B,EAAa,kBACnBL,EAAchB,YACZqB,EACA,GAAGoiX,sBACH,IAAkBjgX,UAEpBxC,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGoiX,KAAwBC,OAE7B,IAAK,IAAIhrwC,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAM2n5B,EAAW85F,EAAYz+6B,EAAMhjE,GAAIgq9B,EAAehq9B,IACtDso5B,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGqiX,KAAuBhqsC,EAAMhhE,QAAQ2n5B,WAE5C,CACAW,EAAcf,iBAAiBoB,EAAY,CACzC,UAAUqiX,MAEd,CAGA,CACE,MAAMriX,EAAa,gBACnBL,EAAchB,YACZqB,EACA,GAAGoiX,mBAAsCA,kBAAqCA,iBAC9E,IAAkBjgX,UAEpBxC,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGoiX,KAAwBC,OAE7B,IAAK,IAAIhrwC,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAMG,EAAO6gE,EAAMhhE,GACnBso5B,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGqiX,KAAuB7qwC,mBAAsBA,mBAAsBA,MAE1E,CACAmo5B,EAAcf,iBAAiBoB,EAAY,CACzC,UAAUqiX,MAEd,CAGA,CACE,MAAMriX,EAAa,kBACnBL,EAAchB,YACZqB,EACA,GAAGoiX,qBAAwCA,KAAwBC,kBACnE,IAAkBlgX,UAEpBxC,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGoiX,wBAA2CC,OAEhD,IAAK,IAAIhrwC,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IACnCso5B,EAAcf,iBAAiBoB,EAAY,CACzC,oBAAoB3n1B,EAAMhhE,iBAG9Bso5B,EAAcf,iBAAiBoB,EAAY,CAAC,4BAC9C,CAGA,CACE,MAAMA,EAAa,gBACnBL,EAAchB,YACZqB,EACA,GAAGoiX,mBAAsCA,kBAAqCA,kCAC9E,IAAkBjgX,UAEpBxC,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGoiX,KAAwBC,OAE7B,IAAK,IAAIhrwC,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAMG,EAAO6gE,EAAMhhE,GACnBso5B,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGqiX,KAAuB7qwC,uBAA0BA,kBAAqBA,kBAE7E,CACAmo5B,EAAcf,iBAAiBoB,EAAY,CACzC,UAAUqiX,MAEd,CAGA,CACE,MAAMriX,EAAa,2BACnBL,EAAchB,YACZqB,EACA,oCAAoCoiX,KAAwBC,YAA8BT,KAAsBC,KAChH,IAAkB1/W,UAEpB,IAAK,IAAI9q5B,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAMG,EAAO6gE,EAAMhhE,GACnBso5B,EAAcf,iBAAiBoB,EAAY,CACzC,GAAG6hX,KAAqBrqwC,OAAU6qwC,KAAuB7qwC,MAE7D,CACF,CAGA,GAAI2pwC,EAAe,CACjB,MAAMnhX,EAAa,gBACnBL,EAAchB,YACZqB,EACA,4BAA4BuhX,KAAgCC,KAC5D,IAAkBr/W,UAEpB,IAAK,IAAI9q5B,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAMG,EAAO6gE,EAAMhhE,GACbsD,EAAO0/D,EAAMhjE,GACbq76B,EAAiB,IAAakxC,kBAAkBjp9B,GACtD,IAAK,IAAIgjD,EAAI,EAAGA,EAAI+03B,EAAgB/03B,IAAK,CACvC,MAAM2ktC,EAAYrB,EAAatmwC,EAAMgjD,GAC/B25qB,EAAesqP,EAAcvq9B,GAAGsmD,GAChCuuqB,EAAe21P,EAAcxq9B,GAAGsmD,IACjC,OAAQ25qB,KAAkB,OAAQpL,IAGvCyzL,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGwhX,KAA+BhqwC,QAAW8qwC,OAAevB,EAC1DzpiB,MAEF,GAAGkqiB,KAA+BhqwC,QAAW8qwC,OAAevB,EAC1D70iB,OAGN,CACF,CACF,CAGA,CACE,MAAM8zL,EAAa,mCACnBL,EAAchB,YACZqB,EACA,GAAGoiX,oDACH,IAAkBjgX,UAEpBxC,EAAcf,iBAAiBoB,EAAY,CACzC,GAAGoiX,KAAwBC,OAE7B,IAAK,IAAIhrwC,EAAI,EAAGA,EAAI6pwC,EAAiB7pwC,IAAK,CACxC,MAAMsD,EAAO0/D,EAAMhjE,GAEbkrwC,GADgBlhT,EAAehq9B,GACVypwC,EAAsBnmwC,IACjDgl5B,EAAcf,iBAAiBoB,EAAY,CACzC,cAAc3n1B,EAAMhhE,sCAAsCA,gBAAgBkrwC,MAE9E,CACA5iX,EAAcf,iBAAiBoB,EAAY,CACzC,UAAUqiX,MAEd,CACF,EAmFqC,I,6CC5YrC,4iB,4CCAA,i5B,6CCAA,mwB,6CCAA,spB,6CCAA,oc,6CCAA,2iC,6CCAA,oe,6CCAA,mrB,6CCAA,6f,6CCAA,iG,6CCAA,oQ,6CCAA,muB,6CCAA,23B,6CCAA,msB,6CCAA,if,6CCAA,04S,6CCAA,w8V,6CCAA,ukgB,6CCAA,uiH,6CCAA,+Y,6CCAA,2a,6CCAA,0G,6CCAA,4G,4CCAA,8G,6CCAA,gH,6CCAA,kH,6CCAA,oH,6CCAA,sH,6CCAA,4N,6CCAA,gW,4CCAA,kX,6CCAA,wM,6CCAA,mP,6CCAA,mR,6CCAA,0N,6CCAA,4M,6CCAA,uL,6CCAA,mM,6CCAA,8M,6CCAA,iL,6CCAA,oL,6CCAA,wL,6CCAA,kO,6CCAA,mM,6CCAA,qL,4CCAA,gU,4CCAA,qW,6CCAA,gW,6CCAA,0W,6CCAA,gW,6CCAA,kZ,6CCAA,mR,6CCAA,mR,6CCAA,wS,6CCAA,+R,6CCAA,wS,2CCAA,yX,6CCAA,yU,6CCAA,+wB,ioDC6IA,UACIG,qBAAuB,IACvBC,eAAiB,IACjBC,aAAe,IACfC,aAAe,IACfC,aAAe,IACfC,aAAe,IACfC,aAAe,IACfC,aAAe,IACfC,aAAe,IACfC,aAAe,IACfC,cAAgB,IAChBC,iBAAmB,IACnBC,qBAAuB,IACvBC,mCAAqC,IACrCC,6CAA+C,IAC/CC,0BAA4B,IAC5BC,uBAAyB,IACzBC,gBAAkB,IAClBC,oBAAsB,IACtBC,uBAAyB,IACzBC,cAAgB,IAChBC,eAAiB,IACjBC,gBAAkB,IAClBC,8BAAgC,IAChCC,oBAAsB,IACtBC,eAAiB,IACjBC,OAAS,IACTC,eAAiB,IACjBC,cAAgB,IAChBC,gBAAkB,IAClBC,cAAgB,IAChBC,qBAAuB,IACvBC,gBAAkB,IAClBC,gBAAkB,IAClBC,0BAA4B,IAC5BC,sBAAwB,IACxBC,gBAAkB,IAClBC,iBAAmB,IACnBC,UAAY,IACZC,2BAA6B,IAC7BC,qBAAuB,IACvBC,aAAe,IACfC,kBAAoB,IACpBC,kBAAoB,IACpBC,sBAAwB,IACxBC,QAAU,IACVC,eAAiB,IACjBC,qBAAuB,IACvBC,aAAe,IACfC,aAAe,IACfC,aAAe,IACfC,aAAe,KACfC,aAAe,KACfC,aAAe,KACfC,oBAAsB,KACtBC,gBAAkB,KAClBC,cAAgB,KAChBC,kBAAoB,KACpBC,oCAAsC,KACtCC,oBAAsB,KACtBC,eAAiB,KACjBC,sBAAwB,KACxBC,iBAAmB,KACnBC,oBAAsB,KACtBC,kBAAoB,KACpBC,mBAAqB,KACrBC,iBAAmB,KACnBC,sBAAwB,KACxBC,2BAA6B,KAC7BC,sCAAwC,KACxCC,oBAAsB,KACtBC,sBAAwB,KACxBC,kBAAoB,KACpBC,eAAiB,KACjBC,iCAAmC,KACnCC,eAAiB,KACjBC,gCAAkC,KAClCC,2BAA6B,KAC7BC,gCAAkC,KAClCC,kBAAoB,KACpBC,cAAgB,KAChBC,2BAA6B,KAC7BC,wBAA0B,KAC1BC,QAAU,KACVC,iBAAmB,KACnBC,0BAA4B,KAC5BC,uBAAyB,KACzBC,uCAAyC,KACzCC,sBAAwB,KACxBC,gBAAkB,KAClBC,kBAAoB,KACpBC,QAAU,KACVC,iBAAmB,KACnBC,YAAc,KACdC,WAAa,KACbC,kCAAoC,KACpCC,iBAAmB,KACnBC,iBAAmB,KACnBC,cAAgB,KAChBC,qBAAuB,KACvBC,mBAAqB,KACrBC,6BAA+B,KAC/BC,6BAA+B,KAC/BC,kBAAoB,KACpBC,cAAgB,KAChBC,cAAgB,KAChBC,gBAAkB,KAClBC,0BAA4B,KAC5BC,UAAY,KACZC,kBAAoB,KACpBC,kBAAoB,KACpBC,qCAAuC,KACvCC,kCAAoC,KACpCC,cAAgB,KAChBC,uBAAyB,KACzBC,oBAAsB,KACtBC,UAAY,KACZC,eAAiB,KACjBC,uBAAyB,KACzBC,qBAAuB,KACvBC,gBAAkB,KAClBC,uBAAyB,KACzBC,iBAAmB,KACnBC,4BAA8B,KAC9BC,gBAAkB,KAClBC,mBAAqB,KACrBC,2BAA6B,KAC7BC,qBAAuB,KACvBC,cAAgB,KAChBC,0BAA4B,KAC5BC,gBAAkB,KAClBC,gBAAkB,KAClBC,kBAAoB,KACpBC,eAAiB,KACjBC,mBAAqB,KACrBC,mBAAqB,KACrBC,2BAA6B,KAC7BC,oBAAsB,KACtBC,kBAAoB,KACpBC,wBAA0B,K,4CCzR9B,6qB,6CCAA,mvB,4CCAA,y0B,6CCAA,48B,6CCAA,i1B,6CCAA,81B,6CCAA,wY,6CCAA,gb,6CCAA,wrD,6CCAA,m2C,6CCAA,i0B,6CCAA,wS,6CCAA,ob,6CCAA,+yE,6CCAA,kQ,6CCAA,6J,4CCAA,iU,6CCAA,6T,6CCAA,+yC,6CCAA,syB,4CCAA,4+G,6CCAA,iyC,6CCAA,2vB,6CCAA,mpQ,6CCAA,uiO,6CCAA,uwB,6CCAA,qiB,6CCAA,yxD,6CCAA,2tD,6CCAA,oT,6CCAA,sT,6CCAA,k9C,6CCAA,2c,6CCAA,0xC,6CCAA,iyE,6CCAA,00C,6CCAA,yd,6CCAA,ue,6CCAA,60B,4CCAA,0hC,6CCAA,wxB,6CCAA,qxC,6CCAA,m6C,6CCAA,4+B,6CCAA,kT,6CCAA,mkB,6CCAA,omB,6CCAA,mlC,6CCAA,kkB,6CCAA,yc,6CCAA,wd,6CCAA,+c,6CCAA,q9D,6CCAA,8iD,6CCAA,ugB,6CCAA,o+B,6CCAA,6nG,6CCAA,glB,6CCAA,w2P,6CCAA,44B,6CCAA,swE,6CCAA,o8B,6CCAA,+mB,6CCAA,k2F,6CCAA,48B,6CCAA,kJ,6CCAA,gpC,6CCAA,2W,6CCAA,ghB,6CCAA,wpB,6CCAA,8nB,6CCAA,4jF,6CCAA,y6B,6CCAA,mvC,4CCAA,ib,6CCAA,m+B,6CCAA,oiC,4CCAA,8f,6CCAA,mvD,6CCAA,m8B,6CCAA,2zC,6CCAA,mmB,6CCAA,ugB,6CCAA,u2B,6CCAA,0tC,6CCAA,2iC,6CCAA,q0C,6CCAA,2+D,6CCAA,w1I,6CCAA,6kB,6CCAA,0sE,6CCAA,mtC,6CCAA,wI,6CCAA,+gC,6CCAA,k3C,6CCAA,o/D,6CCAA,8c,6CCAA,oI,6CCAA,+c,6CCAA,6Q,6CCAA,qzU,6CCAA,0wC,6CCAA,4jG,6CCAA,6kB,6CCAA,6d,6CCAA,+4B,6CCAA,k1F,6CCAA,qgK,6CCAA,6mE,6CCAA,qtB,6CCAA,wS,6CCAA,w+B,6CCAA,mM,6CCAA,mqI,6CCAA,6zC,6CC4BA,qh7B,4CC5BA,wxzB,6CCAA,wqV,6CCAA,ooB,6CCAA,qZ,6CCAA,0gC,6CCAA,siC,6CCAA,ukB,6CCAA,+rE,6CCAA,63B,6CCAA,6iB,6CCAA,m/B,6CCAA,imE,6CCAA,0qB,6CCAA,q8D,6CCAA,umC,4CCAA,kuB,6CCAA,i8B,6CCAA,gsB,6CCAA,oZ,4CCAA,8zB,6CCAA,y5E,6CCAA,ka,6CCAA,iyI,6CCAA,yb,6CCAA,yyD,6CCAA,0tC,6CCAA,kpB,6CCAA,0sB,6CCAA,mjE,6CCAA,+qG,6CCAA,2L,4CCAA,wN,6CCAA,uuB,6CCAA,4/C,6CCAA,6wI,6CCAA,wzE,6CCAA,ymB,6CCAA,iwB,6CCAA,8sJ,6CCAA,q7iB,6CCAA,8S,4CCAA,wU,4CCAA,29G,6CCAA,yP,6CCAA,ypC,6CCAA,oT,6CCAA,6oH,6CCAA,sJ,6CCAA,mc,6CCAA,qX,4CCAA,0vK,6CCAA,4c,4CCAA,iwD,6CCAA,gmB,6CCAA,+F,6CCAA,mjD,6CCAA,kkB,6CCAA,wrE,4CCAA,ohD,6CCAA,0gL,6CCAA,k3H,6CCAA,unO,6CCAA,sjB,6CCAA,u5H,6CCAA,ouD,2CCAA,+lS,6CCAA,ggO,6CCAA,kuH,6CCAA,yiB,6CCAA,6c,6CCAA,4jK,6CCAA,sX,6CCAA,sgB,6CCAA,+c,6CCAA,w2B,6CCAA,6R,6CCAA,4tB,6CCAA,0hB,6CCAA,mmC,6CCAA,wN,6CCAA,4f,6CCAA,2uD,6CCAA,onB,6CCAA,+nC,4CCAA,qmC,6CCAA,w0L,6CCAA,+rB,6CCAA,+b,6CCAA,mK,4CCAA,8L,6CCAA,+iB,6CCAA,w1E,6CCAA,gpB,6CCAA,6V,6CCAA,wpB,6CCAA,wxO,6CCAA,6J,4CCAA,6S,6CCAA,qwM,6CCAA,43J,6CCAA,uP,6CCAA,ojI,6CCAA,muD,6CCAA,4zB,6CCAA,kO,6CCAA,uP,6CCAA,wM,6CCAA,2mE,6CCAA,2pB,6CCAA,kuD,6CCAA,6zG,6CCAA,8pB,6CCAA,8M,6CCAA,6c,6CCAA,+L,6CCAA,wvC,6CCAA,+6M,6CCAA,yiC,6CCAA,ytd,6CCAA,45J,4CCAA,wgH,6CCAA,+7D,6CCAA,q9N,6CCAA,kqE,6CCAA,w3T,6CCAA,m/V,6CCAA,gN,4CCAA,wX,6CCAA,kxC,6CCAA,wqJ,6CCAA,4sS,gbCmCA,SAASC,EAAqB3kpB,EAAOwmN,GACnC,IAAI,OAAQA,GAAa,CACvB,MAAMo+b,EAAkBp+b,EAAWxmN,OAC/B,OAAQ4kpB,IACVA,EAAgBxyhC,SAAS4tY,EAE7B,CACF,CA8CA,SAAS6kpB,EAAoBzmkC,GAC3B,IAAIisiB,EAAajsiB,EAAO0mkC,iCACpB,EACAt3wC,OAAO4rB,iBAMX,OALAixtB,GAAcjsiB,EAAO2mkC,kBACjB,O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AAOtgiB,GACpB93yB,EAAQt9C,KAAK603C,aAAary1C,QAAQkz1C,GACxC,GAAKp40C,EAOL,OAJAt9C,KAAK603C,aAAaE,eAAiBz30C,EAAMy30C,cACzC/03C,KAAK603C,aAAaG,YAAc130C,EAAM030C,WACtCh13C,KAAK603C,aAAaC,iBAAmBx30C,EAAMq40C,YAAY1y3C,cAChDjD,KAAK603C,aAAary1C,QAAQkz1C,GAC1Bp40C,CACT,CAOA,YAAAk40C,CAAariuB,EAAUiiM,GACrB,MAAM7s1B,EAAO4qpB,EAASngpB,UACtB,OAAQzK,GACN,IAAK,qBAAsB,CACzB,MAAM0qpB,EACsD,EAExD6iuB,qBACJ,IAAK,MAAM3iuB,KAAYF,EACrBjzpB,KAAKw13C,aAAariuB,EAAUiiM,GAE9B,KACF,CACA,IAAK,eAAgB,CACnB,MAAM2giB,EACgD,EACtD/13C,KAAKg23C,gBACHzt3C,EACAwt3C,EAAiBE,qBACjBF,EAAiBG,WACjB9giB,GACA,QAAOA,GACP2giB,EAAiB96c,aAEnB,KACF,CACA,IAAK,kBAAmB,CACtB,MAAMk7c,EACiE,EAGvEn23C,KAAKg23C,gBACHzt3C,EACA4t3C,EAAcF,qBACdE,EAAcC,UACdhhiB,GACA,QAAOA,GACP+giB,EAAcl7c,aAEhB,KACF,CACA,IAAK,aAAc,CACjB,MAAMo7c,EAC4D,EAGlEr23C,KAAKg23C,gBACHzt3C,EACA8t3C,EAAeJ,qBACf,KACA7giB,GACA,QAAOA,GACPihiB,EAAep7c,aAEjB,KACF,CACA,IAAK,UAAW,CACd,MAAMq7c,EACyD,EAG/Dt23C,KAAKg23C,gBACHzt3C,EACA+t3C,EAAYL,qBACZK,EAAYF,UACZhhiB,GACA,QAAOA,GACPkhiB,EAAYr7c,aAEd,KACF,CACA,IAAK,QAAS,CACZ,MAAMs7c,EAAyD,EAG/Dv23C,KAAKg23C,gBACHzt3C,EACAgu3C,EAAUN,qBACV,KACA7giB,GACA,QAAOA,GACPmhiB,EAAUt7c,aAEZ,KACF,CACA,IAAK,aACL,IAAK,aAAc,CACjB,MAAMu7c,EAA6D,EAI7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OALAn30C,EAAM4pB,IAAMA,EACPowzC,IACHt33C,KAAK003C,cAAc9/1C,IAAIsyC,EAAK5pB,EAAM83yB,SAClCp11B,KAAK203C,UAAU//1C,IAAI8g2C,EAAYxuzC,IAE1B5pB,CACT,CAQA,UAAAi60C,CAAWrwzC,EAAKwuzC,GACd,IAAKxuzC,EACH,MAAM,IAAI5mE,MAAM,4BAA8Bo13C,GAEhD113C,KAAK003C,cAAc741C,OAAOqrC,GAC1BlnE,KAAK203C,UAAU941C,OAAO651C,GACtB113C,KAAK403C,eAAehw3C,KAAKsiE,EAC3B,CAMA,aAAAswzC,CAAcpiiB,EAASggiB,GAErB,IAAKp13C,KAAK203C,UAAU1+2C,KAAI,QAAOm/0B,IAC7B,OAEFp11B,KAAKy33C,cAAcriiB,GACnB,IAAIjiM,EAAWiiM,EAAQkgiB,cAClBniuB,IAGDiiuB,IACFjiuB,EAAWA,EAASlomB,QACpBkomB,EAASoiuB,eAAeH,IAE1Bp13C,KAAKw13C,aAAariuB,EAAUiiM,GAC9B,CAKA,aAAAqiiB,CAAcriiB,GACZ,IAAI93yB,EAAQt9C,KAAKy13C,+BAA+BrgiB,GAChD93yB,EAAQt9C,KAAK613C,iCAAiCzgiB,IAAY93yB,EAC1DA,EAAQt9C,KAAK413C,oCAAoCxgiB,IAAY93yB,EACzDA,GACFt9C,KAAKu33C,WAAWj60C,EAAM4pB,KAAK,QAAO5pB,EAAM83yB,SAE5C,CAEA,KAAAxu1B,GACE5G,KAAK603C,aAAary1C,QAAU,CAAC,EAC7BxiC,KAAK603C,aAAaC,gBAAkB,EACpC903C,KAAK603C,aAAaE,cAAgB,EAClC/03C,KAAK603C,aAAaG,WAAa,EAC/Bh13C,KAAKk13C,gBAAgB1y1C,QAAU,CAAC,EAChCxiC,KAAKk13C,gBAAgBJ,gBAAkB,EACvC903C,KAAKk13C,gBAAgBH,cAAgB,EACrC/03C,KAAKi13C,WAAWzy1C,QAAU,CAAC,EAC3BxiC,KAAKi13C,WAAWH,gBAAkB,EAClC903C,KAAKy03C,eAAiB,EACtBz03C,KAAK403C,eAAiB,GACtB503C,KAAK003C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,aAAa,GAClCv95C,KAAKs65C,YAAcz62C,EAAU092C,aAC7B,MAAMl64C,EAAIy8P,EAAKhU,GAAY7nD,EAAK67D,GAC1Bx8P,EAAIu0P,EAAK/L,GAAY3nD,EAAK0zD,GAChC73Q,KAAKm65C,cAAgB,CAAC924C,EAAGC,EAC3B,CACA,GAAIu8B,EAAU292C,kBAAoB392C,EAAU492C,iBAAkB,CAC5D,MAAM//kB,EACS,IAAb5xkB,EACIjsN,EAAU492C,iBACV592C,EAAU292C,iBACV1xpC,GACGjsN,EAAU492C,iBAAmB592C,EAAU292C,kBAChD,GAAI392C,EAAU0F,OAAQ,CACpB,MAAMjkC,EAAOthB,KAAKm+5C,iBAAiBn+5C,KAAK2nuB,eAClCy2rB,EAAwBp+5C,KAAK685C,aAAan/kB,WAC9CA,EACA,EACAp8zB,GACA,GAEFthB,KAAKm65C,cAAgBn65C,KAAKq+5C,oBACxBD,EACAv+2C,EAAU0F,OAEd,CACAvlD,KAAKu65C,gBAAkB162C,EAAU492C,iBACjCz95C,KAAKo65C,kBAAoB18kB,EACzB190B,KAAKs+5C,mBAAkB,EACzB,CACA,QAC+Bn55C,IAA7B06C,EAAU892C,qBACmBx45C,IAA7B06C,EAAU+92C,eACV,CACA,MAAM323B,EACS,IAAbn7R,GACI,QAAOjsN,EAAU+92C,eAAiB7v5C,KAAK43F,GAAI,EAAI53F,KAAK43F,IACpD53F,KAAK43F,GACL9lD,EAAU892C,eACV7xpC,GACGjsN,EAAU+92C,eAAiB/92C,EAAU892C,gBAC9C,GAAI992C,EAAU0F,OAAQ,CACpB,MAAMg52C,EAAsBv+5C,KAAK685C,aAAa513B,SAC5CA,GACA,GAEFjniB,KAAKm65C,cAAgBn65C,KAAKw+5C,sBACxBD,EACA1+2C,EAAU0F,OAEd,CACAvlD,KAAKw65C,cAAgB362C,EAAU+92C,eAC/B595C,KAAKq65C,gBAAkBpz3B,CACzB,CAGA,GAFAjniB,KAAKs+5C,mBAAkB,GACvBlp0B,GAAO,GACFv1iB,EAAUi/F,SACb,KAEJ,CACA,GAAIo/wC,EAAgB,CAClBl+5C,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ACzB637C,EAAS737C,GAAKjF,KAAKu87C,OAAOt37C,GAAGwE,QAG/B,MAAMsz7C,EAAe,IAAIjlmB,EACvB931B,KAAKg+6C,gBAAgBv06C,QACrBzJ,KAAKu1Q,OACLunrC,GAIF,OAFAC,EAAapnC,gBAAgB315C,MAEtB+87C,CACT,CAUA,cAAAxD,CAAel26C,EAAGC,EAAGmitC,EAAc+zN,GACjC,OAAIA,GAAqB,QAAyBx57C,KAAK8o4C,YAAazl3C,EAAGC,GAC9Dk26C,GAELx57C,KAAKi77C,mBAAqBj77C,KAAK6p4C,gBACjC7p4C,KAAKg77C,UAAYjt7C,KAAKyV,MACpB,OACExjB,KAAKg+6C,gBACL,EACAh+6C,KAAKu87C,OACLv87C,KAAKwhB,OACL,IAGJxhB,KAAKi77C,kBAAoBj77C,KAAK6p4C,gBAEzB,QACL7p4C,KAAKg97C,6BACL,EACAh97C,KAAKu87C,OACLv87C,KAAKwhB,OACLxhB,KAAKg77C,WACL,EACA336C,EACAC,EACAmitC,EACA+zN,GAEJ,CAQA,UAAA9gC,CAAWr14C,EAAGC,GACZ,OAAO,QACLtjB,KAAKg97C,6BACL,EACAh97C,KAAKu87C,OACLv87C,KAAKwhB,OACL6B,EACAC,EAEJ,CAOA,OAAAk75C,GACE,OAAO,QACLx+6C,KAAKg97C,6BACL,EACAh97C,KAAKu87C,OACLv87C,KAAKwhB,OAET,CAgBA,cAAA232B,CAAer12B,GACb,IAAIk65C,EAcJ,YAbc746C,IAAV2e,GACFk65C,EAAkBh+6C,KAAKg97C,6BAA6Bvz7C,SACpD,QACEu06C,EACA,EACAh+6C,KAAKu87C,OACLv87C,KAAKwhB,OACLsC,IAGFk65C,EAAkBh+6C,KAAKg+6C,iBAGlB,QACLA,EACA,EACAh+6C,KAAKu87C,OACLv87C,KAAKwhB,OAET,CAKA,QAAA002C,GACE,OAAOl23C,KAAKu87C,MACd,CAKA,qBAAAU,GACE,GAAIj97C,KAAKw87C,6BAA+Bx87C,KAAK6p4C,cAAe,CAC1D,MAAMqzD,GAAc,OAClBl97C,KAAKg+6C,gBACL,EACAh+6C,KAAKu87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ACL,EACAh+6C,KAAK677C,MACL777C,KAAKwhB,OACL,IAGJxhB,KAAKi77C,kBAAoBj77C,KAAK6p4C,gBAEzB,QACL7p4C,KAAKg+6C,gBACL,EACAh+6C,KAAK677C,MACL777C,KAAKwhB,OACLxhB,KAAKg77C,WACL,EACA336C,EACAC,EACAmitC,EACA+zN,GAEJ,CAQA,UAAA9gC,CAAWr14C,EAAGC,GACZ,OAAO,QACLtjB,KAAKg97C,6BACL,EACAh97C,KAAK677C,MACL777C,KAAKwhB,OACL6B,EACAC,EAEJ,CAOA,OAAAk75C,GACE,OAAO,QACLx+6C,KAAKg97C,6BACL,EACAh97C,KAAK677C,MACL777C,KAAKwhB,OAET,CAgBA,cAAA232B,CAAer12B,GACb,IAAIk65C,EAQJ,YAPc746C,IAAV2e,GACFk65C,EAAkBh+6C,KAAKg97C,6BAA6Bvz7C,SACpD,EAAAu4Q,EAAA,IAAkBg8pC,EAAiB,EAAGh+6C,KAAK677C,MAAO777C,KAAKwhB,OAAQsC,IAE/Dk65C,EAAkBh+6C,KAAKg+6C,iBAGlB,EAAAryyC,EAAA,IAAwBqyyC,EAAiB,EAAGh+6C,KAAK677C,MAAO777C,KAAKwhB,OACtE,CAKA,OAAA402C,GACE,OAAOp23C,KAAK677C,KACd,CAKA,oBAAA+B,GACE,GAAI597C,KAAKy97C,4BAA8Bz97C,KAAK6p4C,cAAe,CACzD,MAAMg0D,GAAa,QAAU797C,KAAK8o4C,aAClC9o4C,KAAK097C,oBAAqB,OACxB197C,KAAKg97C,6BACL,EACAh97C,KAAK677C,MACL777C,KAAKwhB,OACLq86C,EACA,GAEF797C,KAAKy97C,2BAA6Bz97C,KAAK6p4C,aACzC,CACA,OACE7p4C,KACF,kBACF,CAQA,gBAAA897C,GACE,OAAO,IAAIhn3B,EAAA,EAAM92kB,KAAK497C,uBAAwB,MAChD,CASA,kBAAAG,GACE,OAAO/97C,KAAK677C,MAAM547C,MACpB,CAYA,aAAAu33B,CAAc1/2B,GACZ,OAAIA,EAAQ,GAAK9a,KAAK677C,MAAM547C,QAAU6X,EAC7B,KAEF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j86C,EACAm6a,EACA16Z,EACA+iT,EACAo3nC,EACAiI,EACAzH,GAEA,IAAK,IAAIl37C,EAAI,EAAGozL,EAAK6jP,EAAKj5a,OAAQgC,EAAIozL,IAAMpzL,EAAG,CAC7C,MAAMkJ,EAAM+ta,EAAKj3a,GACjB2+7C,EAAmBnmrC,EACjBugqC,EACAj86C,EACAoM,EACAqT,EACA+iT,EACAo3nC,EACAiI,GAEFzH,EAAev37C,KAAKg/7C,GACpB7h8C,EAASoM,CACX,CACA,OAAOy17C,CACT,CAcO,SAASK,EACdjmB,EACAj86C,EACAu67C,EACA966C,EACA+iT,EACAo3nC,EACAiI,EACAxG,GAEA,IAAK,IAAIn47C,EAAI,EAAGozL,EAAKikwC,EAAMr57C,OAAQgC,EAAIozL,IAAMpzL,EAAG,CAC9C,MAAMi3a,EAAOoghC,EAAMr37C,GAEbk37C,EAAiB,GACvByH,EAAmBI,EACjBhmB,EACAj86C,EACAm6a,EACA16Z,EACA+iT,EACAo3nC,EACAiI,EACAzH,GAEFiB,EAAgBx47C,KAAKu37C,GACrBp67C,EAASm6a,EAAKA,EAAKj5a,OAAS,EAC9B,CACA,OAAO2g8C,CACT,C,yICvdA,IAAIM,EA4BG,SAASC,EACdnmB,EACAj86C,EACAoM,EACAqT,EACA1d,EACAsg8C,EACAnye,EACA9/4B,EACAky3C,EACA3/3C,EACAgqC,EACAu4b,EACAq95B,GAAc,GAEd,IAAIpgvC,EAAK85tC,EAAgBj86C,GACrBqiN,EAAK45tC,EAAgBj86C,EAAS,GAC9BkiN,EAAK,EACLE,EAAK,EACL0q9B,EAAgB,EAChB01R,EAAW,EAEf,SAASC,IACPvgvC,EAAKC,EACLC,EAAKC,EAELF,EAAK85tC,EADLj86C,GAAUyf,GAEV4iM,EAAK45tC,EAAgBj86C,EAAS,GAC9Bwi8C,GAAY11R,EACZA,EAAgB9gqC,KAAKyV,MAAM0gM,EAAKD,IAAOC,EAAKD,IAAOG,EAAKD,IAAOC,EAAKD,GACtE,CACA,GACEqgvC,UACOzi8C,EAASoM,EAAMqT,GAAU+i7C,EAAW11R,EAAgBu1R,GAE7D,IAAI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nl0C,EAAKmw0C,mBAEPnw0C,EAAK6z0C,oBAEP3h6C,KAAK428C,mBAAqBzy8C,WACxBnE,KAAKg38C,gBAAgBnt5C,KAAK7pD,MAC1BA,KAAKo28C,UAEHa,IACFz08C,GA/PwC,GAiQ1CsrF,EAAKsz0C,YACF5+5C,EAAQxC,KAAK628C,cACd728C,KAAKw28C,YAAc918C,EAAIqy4C,uBAAuB/y4C,KAAKw28C,aAAe,MAEpEx28C,KAAKy28C,WAAa591C,GACX,EAGT74G,KAAKk28C,aAAe1z8C,EAEpB,MAAM408C,EAAWrp8C,KAAK8R,IAAI7f,KAAKo28C,UAAYv91C,EAAM74G,KAAKy28C,YAAa,GAQnE,OANAxy8C,aAAajE,KAAK028C,YAClB128C,KAAK028C,WAAavy8C,WAChBnE,KAAKq38C,iBAAiBxt5C,KAAK7pD,KAAMU,GACjC028C,IAGK,CACT,CAMA,gBAAAC,CAAiB328C,GACf,MAAMotF,EAAOptF,EAAIi2P,UACb7oK,EAAKml0C,gBACPnl0C,EAAKmw0C,mBAEP,IAAIz75C,IACD,QACCxC,KAAKk28C,aACJl28C,KAAKg77C,UAAYh77C,KAAK628C,cACvB728C,KAAKg77C,UAAYh77C,KAAK628C,eACpB728C,KAAK628C,eACP/o3C,EAAK8w0C,0BAA4B5+5C,KAAKu28C,wBAExC/z8C,EAAQA,EAASA,EAAQ,EAAI,GAAK,EAAK,IAEzC,QACEsrF,EACAtrF,EACAxC,KAAKw28C,YAAc918C,EAAIqy4C,uBAAuB/y4C,KAAKw28C,aAAe,KAClEx28C,KAAKkr6C,WAGPlr6C,KAAKi74C,WAAQ914C,EACbnF,KAAKk28C,YAAc,EACnBl28C,KAAKw28C,YAAc,KACnBx28C,KAAKy28C,gBAAatx8C,EAClBnF,KAAK028C,gBAAavx8C,CACpB,CAQA,cAAAmy8C,CAAehB,GACbt28C,KAAKq28C,WAAaC,EACbA,IACHt28C,KAAKw28C,YAAc,KAEvB,EAGF,QAAe,8BAAc,I,kFC/V7B,MAAMe,UAAoB,IAIxB,WAAAvy6C,CAAYjlC,GAGV,MAAMoo8C,EAFNpo8C,EAAUA,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4F,EAUJ,WAAAr47C,CAAYz8B,EAAMy16C,EAAiB9hgC,EAAM16Z,EAAQ6nD,EAAY5gE,GAI3DzI,KAAKuu7C,cAMLvu7C,KAAK074C,QAML174C,KAAK8g5C,IAAMr44C,EAMXzI,KAAK4o8C,MAAQrg8C,EAMbvI,KAAKs99C,iBAAmBt/C,EAMxBh+6C,KAAKy87C,oBAAsB,KAM3Bz87C,KAAKu99C,eAAiB,KAMtBv99C,KAAK677C,MAAQ3/gC,GAAQ,KAMrBl8a,KAAKw99C,YAAcn05C,EAMnBrpE,KAAKy99C,kBAMLz99C,KAAK099C,QAAUl88C,EAMfxhB,KAAK299C,mBACP,CAQA,GAAA1n9C,CAAIjQ,GACF,OAAOhG,KAAKw99C,YAAYx39C,EAC1B,CAOA,SAAA8i4C,GAYE,OAXK9o4C,KAAK074C,UACR174C,KAAK074C,QACY,UAAf174C,KAAK4o8C,OACD,QAA6B5o8C,KAAKs99C,mBAClC,QACEt99C,KAAKs99C,iBACL,EACAt99C,KAAKs99C,iBAAiBr69C,OACtBjD,KAAK099C,UAGR199C,KAAK074C,OACd,CAKA,oBAAAkiD,GACE,IAAK597C,KAAKy87C,oBAAqB,CAC7B,MAAMoB,GAAa,QAAU797C,KAAK8o4C,aAClC9o4C,KAAKy87C,qBAAsB,OACzBz87C,KAAKs99C,iBACL,EACAt99C,KAAK677C,MACL777C,KAAK099C,QACL7/B,EACA,EAEJ,CACA,OAAO797C,KAAKy87C,mBACd,CAKA,qBAAAQ,GACE,IAAKj97C,KAAKy87C,oBAAqB,CAC7B,MAAMvghC,GAAO,QAAYl8a,KAAKs99C,iBAAkBt99C,KAAK677C,OAC/CqB,GAAc,OAClBl97C,KAAKs99C,iBACL,EACAphjC,EACAl8a,KAAK099C,SAEP199C,KAAKy87C,qBAAsB,OACzBz87C,KAAKs99C,iBACL,EACAphjC,EACAl8a,KAAK099C,QACLxgC,EAEJ,CACA,OAAOl97C,KAAKy87C,mBACd,CAKA,eAAAhB,GAUE,OATKz77C,KAAKu99C,iBACRv99C,KAAKu99C,gBAAiB,QACpBv99C,KAAKs99C,iBACL,EACAt99C,KAAKs99C,iBAAiBr69C,OACtBjD,KAAK099C,QACL,KAGG199C,KAAKu99C,cACd,CAKA,gBAAAthC,GACE,IAAKj87C,KAAKu99C,eAAgB,CACxBv99C,KAAKu99C,eAAiB,GACtB,MAAMv/C,EAAkBh+6C,KAAKs99C,iBAC7B,IAAIv79C,EAAS,EACb,MAAMm6a,EAAqCl8a,KAAU,MACrD,IAAK,IAAIiF,EAAI,EAAGozL,EAAK6jP,EAAKj5a,OAAQgC,EAAIozL,IAAMpzL,EAAG,CAC7C,MAAMkJ,EAAM+ta,EAAKj3a,GACXs2mB,GAAW,QACfyi0B,EACAj86C,EACAoM,EACAnO,KAAK099C,QACL,KAEF,QAAO199C,KAAKu99C,eAAgBhi3B,GAC5Bx5mB,EAASoM,CACX,CACF,CACA,OAAOnO,KAAKu99C,cACd,CAQA,KAAAtrmC,GACE,OAAOjyX,KAAK8g5C,GACd,CAKA,0BAAAk8C,GACE,OAAOh97C,KAAKs99C,gBACd,CAQA,WAAAhoG,GACE,OAAOt13C,IACT,CAMA,qBAAAq57C,CAAsBD,GACpB,OAAOp57C,IACT,CAQA,mBAAAs57C,CAAoBF,EAAkBxv6C,GACpC,OAAO5pB,IACT,CAOA,aAAAy15C,GACE,OAAOz15C,KAAKw99C,WACd,CAOA,qBAAAn8E,GACE,OAAOrh5C,KAAKw99C,WACd,CAKA,SAAAvijB,GACE,OAAOj76B,KAAK099C,OACd,CAKA,gBAAAn8E,GACE,OAAOvh5C,KAAKuu7C,aACd,CAOA,OAAAv76C,GACE,OAAOhT,KAAK4o8C,KACd,CAOA,SAAAh/6C,CAAU62P,GAER,MAAMu5qC,GADNv5qC,GAAa,QAAcA,IACIqonC,YACzBmxD,EAAkBx5qC,EAAWy5qC,iBACnC,GAAIF,GAAeC,EAAiB,CAClC,MAAM9n3C,GAAQ,QAAU8n3C,IAAmB,QAAUD,IACrD,QACE50D,EACA60D,EAAgB,GAChBA,EAAgB,GAChB9n3C,GACCA,EACD,EACA,EACA,IAEF,QACEnyE,KAAKs99C,iBACL,EACAt99C,KAAKs99C,iBAAiBr69C,OACtBjD,KAAK099C,QACLt4F,EACApl4C,KAAKs99C,iBAET,CACF,CASA,cAAA/nG,CAAemqD,GACbA,EAAY1/6C,KAAKs99C,iBAAkBt99C,KAAKs99C,iBAAkBt99C,KAAK099C,QACjE,CAKA,KAAAzy6C,GACE,OAAO,IAAIoy6C,EACTr99C,KAAK4o8C,MACL5o8C,KAAKs99C,iBAAiB7z9C,QACtBzJ,KAAK677C,OAAOpy7C,QACZzJ,KAAK099C,QACLn39C,OAAOuF,OAAO,CAAC,EAAG9L,KAAKw99C,aACvBx99C,KAAK8g5C,IAET,CAKA,OAAA1qB,GACE,OAAOp23C,KAAK677C,KACd,CAMA,yBAAAza,GAkEE,OAjEAph7C,KAAKs57C,qBAAsB,QAAW,CAACF,EAAkBxv6C,KACvD,GAAIwv6C,IAAqBp57C,KAAKy99C,kBAC5B,OAAOz99C,KAAK299C,oBAEd399C,KAAK299C,oBAAsB399C,KAAKirD,QAC5BrhC,GACF5pB,KAAK299C,oBAAoBpoG,eAAe3r2C,GAE1C,MAAM+x6C,EACJ377C,KAAK299C,oBAAoB1nG,qBAC3B,IAAIkmE,EACJ,OAAQn87C,KAAK4o8C,OACX,IAAK,aACHjN,EAA0B147C,QAAS,QACjC047C,EACA,EACA377C,KAAK299C,oBAAoBL,iBAAiBr69C,OAC1CjD,KAAK299C,oBAAoBD,QACzBtkC,EACAuC,EACA,GAEFQ,EAAiB,CAACR,EAA0B147C,QAC5C,MACF,IAAK,kBACHk57C,EAAiB,GACjBR,EAA0B147C,QAAS,QACjC047C,EACA,EACA377C,KAAK299C,oBAAoB9hC,MACzB777C,KAAK299C,oBAAoBD,QACzBtkC,EACAuC,EACA,EACAQ,GAEF,MACF,IAAK,UACHA,EAAiB,GACjBR,EAA0B147C,QAAS,QACjC047C,EACA,EACA377C,KAAK299C,oBAAoB9hC,MACzB777C,KAAK299C,oBAAoBD,QACzB3v9C,KAAKyV,KAAK416C,GACVuC,EACA,EACAQ,GAgBN,OAXIA,IACFn87C,KAAK299C,oBAAsB,IAAIN,EAC7Br99C,KAAK4o8C,MACLjN,EACAQ,EACAn87C,KA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","sources":["webpack://emmet/./node_modules/@nobleclem/jquery-multiselect/jquery.multiselect.js","webpack://emmet/./node_modules/autolinker/dist/es2015/char-utils.js","webpack://emmet/./node_modules/autolinker/dist/es2015/utils.js","webpack://emmet/./node_modules/autolinker/dist/es2015/html-tag.js","webpack://emmet/./node_modules/autolinker/dist/es2015/truncate/truncate-smart.js","webpack://emmet/./node_modules/autolinker/dist/es2015/anchor-tag-builder.js","webpack://emmet/./node_modules/autolinker/dist/es2015/truncate/truncate-middle.js","webpack://emmet/./node_modules/autolinker/dist/es2015/truncate/truncate-end.js","webpack://emmet/./node_modules/autolinker/dist/es2015/match/abstract-match.js","webpack://emmet/./node_modules/autolinker/dist/es2015/parser/uri-utils.js","webpack://emmet/./node_modules/autolinker/dist/es2015/match/url-match.js","webpack://emmet/./node_modules/autolinker/dist/es2015/parser/email-utils.js","webpack://emmet/./node_modules/autolinker/dist/es2015/match/email-match.js","webpack://emmet/./node_modules/autolinker/dist/es2015/match/hashtag-match.js","webpack://emmet/./node_modules/autolinker/dist/es2015/parser/mention-utils.js","webpack://emmet/./node_modules/autolinker/dist/es2015/match/mention-match.js","webpack://emmet/./node_modules/autolinker/dist/es2015/parser/phone-number-utils.js","webpack://emmet/./node_modules/autolinker/dist/es2015/match/phone-match.js","webpack://emmet/./node_modules/autolinker/dist/es2015/parser/parse-matches.js","webpack://emmet/./node_modules/autolinker/dist/es2015/htmlParser/parse-html.js","webpack://emmet/./node_modules/autolinker/dist/es2015/autolinker.js","webpack://emmet/./node_modules/autolinker/dist/es2015/index.js","webpack://emmet/./node_modules/autolinker/dist/es2015/version.js","webpack://emmet/./node_modules/autolinker/dist/es2015/parser/hashtag-utils.js","webpack://emmet/./node_modules/autolinker/dist/es2015/parser/known-tlds.js","webpack://emmet/./node_modules/bitmap-sdf/index.js","webpack://emmet/./node_modules/@popperjs/core/lib/enums.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/math.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/within.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://emmet/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://emmet/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://emmet/./node_modules/@popperjs/core/lib/createPopper.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://emmet/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://emmet/./node_modules/@popperjs/core/lib/popper.js","webpack://emmet/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://emmet/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://emmet/./node_modules/call-bind-apply-helpers/actualApply.js","webpack://emmet/./node_modules/call-bind-apply-helpers/applyBind.js","webpack://emmet/./node_modules/call-bind-apply-helpers/functionApply.js","webpack://emmet/./node_modules/call-bind-apply-helpers/functionCall.js","webpack://emmet/./node_modules/call-bind-apply-helpers/index.js","webpack://emmet/./node_modules/call-bind-apply-helpers/reflectApply.js","webpack://emmet/./node_modules/call-bind/index.js","webpack://emmet/./node_modules/call-bound/index.js","webpack://emmet/./node_modules/cartesian/index.js","webpack://emmet/./node_modules/datatables.net-jqui/js/dataTables.jqueryui.js","webpack://emmet/./node_modules/datatables.net-plugins/i18n/ca.js","webpack://emmet/./node_modules/datatables.net-plugins/i18n/es-ES.js","webpack://emmet/./node_modules/datatables.net-plugins/i18n/fr-FR.js","webpack://emmet/./node_modules/datatables.net-plugins/i18n/pt-PT.js","webpack://emmet/./node_modules/datatables.net-scroller/js/dataTables.scroller.js","webpack://emmet/./node_modules/dayjs/dayjs.min.js","webpack://emmet/./node_modules/dayjs/locale/de.js","webpack://emmet/./node_modules/dayjs/locale/en.js","webpack://emmet/./node_modules/dayjs/locale/es.js","webpack://emmet/./node_modules/dayjs/plugin/customParseFormat.js","webpack://emmet/./node_modules/dayjs/plugin/duration.js","webpack://emmet/./node_modules/dayjs/plugin/pluralGetSet.js","webpack://emmet/./node_modules/dayjs/plugin/utc.js","webpack://emmet/./node_modules/define-data-property/index.js","webpack://emmet/./node_modules/dunder-proto/get.js","webpack://emmet/./node_modules/es-define-property/index.js","webpack://emmet/./node_modules/es-errors/eval.js","webpack://emmet/./node_modules/es-errors/index.js","webpack://emmet/./node_modules/es-errors/range.js","webpack://emmet/./node_modules/es-errors/ref.js","webpack://emmet/./node_modules/es-errors/syntax.js","webpack://emmet/./node_modules/es-errors/type.js","webpack://emmet/./node_modules/es-errors/uri.js","webpack://emmet/./node_modules/es-object-atoms/index.js","webpack://emmet/./node_modules/exceljs/dist/exceljs.min.js","webpack://emmet/./node_modules/file-saver/dist/FileSaver.min.js","webpack://emmet/./node_modules/flatpickr/dist/esm/types/options.js","webpack://emmet/./node_modules/flatpickr/dist/esm/l10n/default.js","webpack://emmet/./node_modules/flatpickr/dist/esm/utils/index.js","webpack://emmet/./node_modules/flatpickr/dist/esm/utils/dom.js","webpack://emmet/./node_modules/flatpickr/dist/esm/utils/formatting.js","webpack://emmet/./node_modules/flatpickr/dist/esm/utils/dates.js","webpack://emmet/./node_modules/flatpickr/dist/esm/index.js","webpack://emmet/./node_modules/flatpickr/dist/esm/utils/polyfills.js","webpack://emmet/./node_modules/flatpickr/dist/l10n/cat.js","webpack://emmet/./node_modules/flatpickr/dist/l10n/default.js","webpack://emmet/./node_modules/flatpickr/dist/l10n/es.js","webpack://emmet/./node_modules/flatpickr/dist/l10n/fr.js","webpack://emmet/./node_modules/flexslider/jquery.flexslider-min.js","webpack://emmet/./node_modules/for-each/index.js","webpack://emmet/./node_modules/function-bind/implementation.js","webpack://emmet/./node_modules/function-bind/index.js","webpack://emmet/./node_modules/generator-function/index.js","webpack://emmet/./node_modules/get-intrinsic/index.js","webpack://emmet/./node_modules/get-proto/Object.getPrototypeOf.js","webpack://emmet/./node_modules/get-proto/Reflect.getPrototypeOf.js","webpack://emmet/./node_modules/get-proto/index.js","webpack://emmet/./node_modules/gopd/gOPD.js","webpack://emmet/./node_modules/gopd/index.js","webpack://emmet/./node_modules/grapheme-splitter/index.js","webpack://emmet/./node_modules/has-property-descriptors/index.js","webpack://emmet/./node_modules/has-symbols/index.js","webpack://emmet/./node_modules/has-symbols/shams.js","webpack://emmet/./node_modules/has-tostringtag/shams.js","webpack://emmet/./node_modules/hasown/index.js","webpack://emmet/./node_modules/inherits/inherits_browser.js","webpack://emmet/./node_modules/inspire-tree-dom/dist/inspire-tree-dom.js","webpack://emmet/./node_modules/inspire-tree/dist/inspire-tree.js","webpack://emmet/./node_modules/is-arguments/index.js","webpack://emmet/./node_modules/is-callable/index.js","webpack://emmet/./node_modules/is-generator-function/index.js","webpack://emmet/./node_modules/is-regex/index.js","webpack://emmet/./node_modules/is-typed-array/index.js","webpack://emmet/./node_modules/jquery-ui-touch-punch/jquery.ui.touch-punch.js","webpack://emmet/./node_modules/jquery-ui/ui/data.js","webpack://emmet/./node_modules/jquery-ui/ui/disable-selection.js","webpack://emmet/./node_modules/jquery-ui/ui/focusable.js","webpack://emmet/./node_modules/jquery-ui/ui/form-reset-mixin.js","webpack://emmet/./node_modules/jquery-ui/ui/keycode.js","webpack://emmet/./node_modules/jquery-ui/ui/labels.js","webpack://emmet/./node_modules/jquery-ui/ui/plugin.js","webpack://emmet/./node_modules/jquery-ui/ui/position.js","webpack://emmet/./node_modules/jquery-ui/ui/scroll-parent.js","webpack://emmet/./node_modules/jquery-ui/ui/tabbable.js","webpack://emmet/./node_modules/jquery-ui/ui/unique-id.js","webpack://emmet/./node_modules/jquery-ui/ui/version.js","webpack://emmet/./node_modules/jquery-ui/ui/widget.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/button.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/checkboxradio.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/controlgroup.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/dialog.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/draggable.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/menu.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/mouse.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/resizable.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/spinner.js","webpack://emmet/./node_modules/jquery-ui/ui/widgets/tabs.js","webpack://emmet/./node_modules/jquery.quicksearch/dist/jquery.quicksearch.min.js","webpack://emmet/./node_modules/jszip/dist/jszip.min.js","webpack://emmet/./node_modules/lerc/LercDecode.js","webpack://emmet/./node_modules/lodash/lodash.js","webpack://emmet/./node_modules/math-intrinsics/abs.js","webpack://emmet/./node_modules/math-intrinsics/floor.js","webpack://emmet/./node_modules/math-intrinsics/isNaN.js","webpack://emmet/./node_modules/math-intrinsics/max.js","webpack://emmet/./node_modules/math-intrinsics/min.js","webpack://emmet/./node_modules/math-intrinsics/pow.js","webpack://emmet/./node_modules/math-intrinsics/round.js","webpack://emmet/./node_modules/math-intrinsics/sign.js","webpack://emmet/./node_modules/mersenne-twister/src/mersenne-twister.js","webpack://emmet/./node_modules/nosleep.js/src/index.js","webpack://emmet/./node_modules/nosleep.js/src/media.js","webpack://emmet/./node_modules/plotly.js-cartesian-dist-min/plotly-cartesian.min.js","webpack://emmet/./node_modules/plotly.js-locales/es.js","webpack://emmet/./node_modules/possible-typed-array-names/index.js","webpack://emmet/./node_modules/process/browser.js","webpack://emmet/./node_modules/proj4/lib/constants/values.js","webpack://emmet/./node_modules/proj4/lib/constants/PrimeMeridian.js","webpack://emmet/./node_modules/proj4/lib/constants/units.js","webpack://emmet/./node_modules/proj4/lib/match.js","webpack://emmet/./node_modules/proj4/lib/projString.js","webpack://emmet/./node_modules/wkt-parser/PROJJSONBuilderBase.js","webpack://emmet/./node_modules/wkt-parser/PROJJSONBuilder2015.js","webpack://emmet/./node_modules/wkt-parser/PROJJSONBuilder2019.js","webpack://emmet/./node_modules/wkt-parser/parser.js","webpack://emmet/./node_modules/wkt-parser/process.js","webpack://emmet/./node_modules/wkt-parser/util.js","webpack://emmet/./node_modules/wkt-parser/transformPROJJSON.js","webpack://emmet/./node_modules/wkt-parser/index.js","webpack://emmet/./node_modules/wkt-parser/detectWKTVersion.js","webpack://emmet/./node_modules/wkt-parser/buildPROJJSON.js","webpack://emmet/./node_modules/proj4/lib/defs.js","webpack://emmet/./node_modules/proj4/lib/global.js","webpack://emmet/./node_modules/proj4/lib/parseCode.js","webpack://emmet/./node_modules/proj4/lib/extend.js","webpack://emmet/./node_modules/proj4/lib/common/msfnz.js","webpack://emmet/./node_modules/proj4/lib/common/sign.js","webpack://emmet/./node_modules/proj4/lib/common/adjust_lon.js","webpack://emmet/./node_modules/proj4/lib/common/tsfnz.js","webpack://emmet/./node_modules/proj4/lib/common/phi2z.js","webpack://emmet/./node_modules/proj4/lib/projections/longlat.js","webpack://emmet/./node_modules/proj4/lib/projections.js","webpack://emmet/./node_modules/proj4/lib/projections/merc.js","webpack://emmet/./node_modules/proj4/lib/constants/Ellipsoid.js","webpack://emmet/./node_modules/proj4/lib/deriveConstants.js","webpack://emmet/./node_modules/proj4/lib/constants/Datum.js","webpack://emmet/./node_modules/proj4/lib/nadgrid.js","webpack://emmet/./node_modules/proj4/lib/Proj.js","webpack://emmet/./node_modules/proj4/lib/datum.js","webpack://emmet/./node_modules/proj4/lib/datumUtils.js","webpack://emmet/./node_modules/proj4/lib/datum_transform.js","webpack://emmet/./node_modules/proj4/lib/adjust_axis.js","webpack://emmet/./node_modules/proj4/lib/common/toPoint.js","webpack://emmet/./node_modules/proj4/lib/checkSanity.js","webpack://emmet/./node_modules/proj4/lib/transform.js","webpack://emmet/./node_modules/proj4/lib/core.js","webpack://emmet/./node_modules/mgrs/mgrs.js","webpack://emmet/./node_modules/proj4/lib/Point.js","webpack://emmet/./node_modules/proj4/lib/common/pj_enfn.js","webpack://emmet/./node_modules/proj4/lib/common/pj_mlfn.js","webpack://emmet/./node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack://emmet/./node_modules/proj4/lib/projections/tmerc.js","webpack://emmet/./node_modules/proj4/lib/common/sinh.js","webpack://emmet/./node_modules/proj4/lib/common/hypot.js","webpack://emmet/./node_modules/proj4/lib/common/gatg.js","webpack://emmet/./node_modules/proj4/lib/common/clens_cmplx.js","webpack://emmet/./node_modules/proj4/lib/common/cosh.js","webpack://emmet/./node_modules/proj4/lib/projections/etmerc.js","webpack://emmet/./node_modules/proj4/lib/common/clens.js","webpack://emmet/./node_modules/proj4/lib/common/asinhy.js","webpack://emmet/./node_modules/proj4/lib/common/log1py.js","webpack://emmet/./node_modules/proj4/lib/projections/utm.js","webpack://emmet/./node_modules/proj4/lib/common/adjust_zone.js","webpack://emmet/./node_modules/proj4/lib/common/srat.js","webpack://emmet/./node_modules/proj4/lib/projections/gauss.js","webpack://emmet/./node_modules/proj4/lib/projections/sterea.js","webpack://emmet/./node_modules/proj4/lib/projections/stere.js","webpack://emmet/./node_modules/proj4/lib/projections/somerc.js","webpack://emmet/./node_modules/proj4/lib/projections/omerc.js","webpack://emmet/./node_modules/proj4/lib/projections/lcc.js","webpack://emmet/./node_modules/proj4/lib/projections/krovak.js","webpack://emmet/./node_modules/proj4/lib/common/mlfn.js","webpack://emmet/./node_modules/proj4/lib/common/e0fn.js","webpack://emmet/./node_modules/proj4/lib/common/e1fn.js","webpack://emmet/./node_modules/proj4/lib/common/e2fn.js","webpack://emmet/./node_modules/proj4/lib/common/e3fn.js","webpack://emmet/./node_modules/proj4/lib/common/gN.js","webpack://emmet/./node_modules/proj4/lib/common/adjust_lat.js","webpack://emmet/./node_modules/proj4/lib/common/imlfn.js","webpack://emmet/./node_modules/proj4/lib/projections/cass.js","webpack://emmet/./node_modules/proj4/lib/common/qsfnz.js","webpack://emmet/./node_modules/proj4/lib/common/authset.js","webpack://emmet/./node_modules/proj4/lib/common/authlat.js","webpack://emmet/./node_modules/proj4/lib/projections/laea.js","webpack://emmet/./node_modules/proj4/lib/common/asinz.js","webpack://emmet/./node_modules/proj4/lib/projections/aea.js","webpack://emmet/./node_modules/proj4/lib/projections/gnom.js","webpack://emmet/./node_modules/proj4/lib/projections/cea.js","webpack://emmet/./node_modules/proj4/lib/common/iqsfnz.js","webpack://emmet/./node_modules/proj4/lib/projections/eqc.js","webpack://emmet/./node_modules/proj4/lib/projections/poly.js","webpack://emmet/./node_modules/proj4/lib/projections/nzmg.js","webpack://emmet/./node_modules/proj4/lib/projections/mill.js","webpack://emmet/./node_modules/proj4/lib/projections/sinu.js","webpack://emmet/./node_modules/proj4/lib/projections/eck6.js","webpack://emmet/./node_modules/proj4/lib/projections/moll.js","webpack://emmet/./node_modules/proj4/lib/projections/eqdc.js","webpack://emmet/./node_modules/proj4/lib/projections/vandg.js","webpack://emmet/./node_modules/proj4/lib/projections/aeqd.js","webpack://emmet/./node_modules/proj4/lib/common/vincenty.js","webpack://emmet/./node_modules/proj4/lib/projections/ortho.js","webpack://emmet/./node_modules/proj4/lib/projections/qsc.js","webpack://emmet/./node_modules/proj4/lib/projections/robin.js","webpack://emmet/./node_modules/proj4/lib/projections/geocent.js","webpack://emmet/./node_modules/proj4/lib/projections/tpers.js","webpack://emmet/./node_modules/proj4/lib/projections/geos.js","webpack://emmet/./node_modules/proj4/lib/projections/eqearth.js","webpack://emmet/./node_modules/proj4/lib/projections/bonne.js","webpack://emmet/./node_modules/proj4/lib/projections/ob_tran.js","webpack://emmet/./node_modules/proj4/lib/index.js","webpack://emmet/./node_modules/proj4/projs.js","webpack://emmet/./node_modules/safe-regex-test/index.js","webpack://emmet/./node_modules/select2/dist/js/select2.min.js","webpack://emmet/./node_modules/set-function-length/index.js","webpack://emmet/./node_modules/topojson-client/src/identity.js","webpack://emmet/./node_modules/topojson-client/src/reverse.js","webpack://emmet/./node_modules/topojson-client/src/transform.js","webpack://emmet/./node_modules/urijs/src/IPv6.js","webpack://emmet/./node_modules/urijs/src/SecondLevelDomains.js","webpack://emmet/./node_modules/urijs/src/URI.js","webpack://emmet/./node_modules/urijs/src/punycode.js","webpack://emmet/./node_modules/util/support/isBufferBrowser.js","webpack://emmet/./node_modules/util/support/types.js","webpack://emmet/./node_modules/util/util.js","webpack://emmet/./node_modules/which-typed-array/index.js","webpack://emmet/./node_modules/xtend/immutable.js","webpack://emmet/./node_modules/available-typed-arrays/index.js","webpack://emmet/./node_modules/jquery/dist/wrappers/jquery.bundler-require-wrapper.js","webpack://emmet/./node_modules/long/umd/index.js","webpack://emmet/./node_modules/protobufjs/dist/minimal/protobuf.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ApproximateTerrainHeights.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ArcGISTiledElevationTerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ArcType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ArticulationStageType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/AssociativeArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/AttributeCompression.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/AxisAlignedBoundingBox.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/BingMapsGeocoderService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/BoundingRectangle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/BoundingSphere.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/BoxGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/BoxOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Cartesian2.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Cartesian3.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Cartesian4.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Cartographic.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CartographicGeocoderService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CatmullRomSpline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Cesium3DTilesTerrainData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Cesium3DTilesTerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CesiumTerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Check.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CircleGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CircleOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Clock.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ClockRange.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ClockStep.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Color.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ColorGeometryInstanceAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ComponentDatatype.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CompressedTextureBuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ConstantSpline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CoplanarPolygonGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CoplanarPolygonGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CoplanarPolygonOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CornerType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CorridorGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CorridorGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CorridorOutlineGeometry.js","webpack://emmet/./node_modules/dompurify/dist/purify.es.mjs","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Credit.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CubicRealPolynomial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CullingVolume.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CustomHeightmapTerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CylinderGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CylinderGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/CylinderOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/DefaultProxy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/DeveloperError.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/DistanceDisplayCondition.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/DistanceDisplayConditionGeometryInstanceAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/DoubleEndedPriorityQueue.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/DoublyLinkedList.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EarthOrientationParameters.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EarthOrientationParametersSample.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EasingFunction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipseGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipseGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipseOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Ellipsoid.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipsoidGeodesic.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipsoidGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipsoidOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipsoidRhumbLine.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipsoidTangentPlane.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipsoidTerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EllipsoidalOccluder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EncodedCartesian3.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Event.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/EventHelper.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ExtrapolationType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/FeatureDetection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Frozen.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/FrustumGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/FrustumOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Fullscreen.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeocodeType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeocoderService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeographicProjection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeographicTilingScheme.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Geometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryAttributes.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryFactory.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryInstance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryInstanceAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryOffsetAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryPipeline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GeometryType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GoogleEarthEnterpriseMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GoogleEarthEnterpriseTerrainData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GoogleEarthEnterpriseTerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GoogleEarthEnterpriseTileInformation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GoogleGeocoderService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GoogleMaps.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GregorianDate.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/GroundPolylineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HeadingPitchRange.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HeadingPitchRoll.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Heap.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HeightmapEncoding.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HeightmapTerrainData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HeightmapTessellator.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HermitePolynomialApproximation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HermiteSpline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/HilbertOrder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ITwinPlatform.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Iau2000Orientation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Iau2006XysData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Iau2006XysSample.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/IauOrientationAxes.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/IauOrientationParameters.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/IndexDatatype.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/InterpolationAlgorithm.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/InterpolationType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Intersect.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/IntersectionTests.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Intersections2D.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Interval.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Ion.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/IonGeocodeProviderType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/IonGeocoderService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/IonResource.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Iso8601.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/JulianDate.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/KTX2Transcoder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/KeyboardEventModifier.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/LagrangePolynomialApproximation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/LeapSecond.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/LinearApproximation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/LinearSpline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ManagedArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/MapProjection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Math.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Matrix2.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Matrix3.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Matrix4.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/MorphWeightSpline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/MortonOrder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/NearFarScalar.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Occluder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/OffsetGeometryInstanceAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/OpenCageGeocoderService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/OrientedBoundingBox.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/OrthographicFrustum.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/OrthographicOffCenterFrustum.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Packable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PackableForInterpolation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PeliasGeocoderService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PerspectiveFrustum.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PerspectiveOffCenterFrustum.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PinBuilder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PixelFormat.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Plane.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PlaneGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PlaneOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolygonGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolygonGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolygonHierarchy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolygonOutlineGeometry.js","webpack://emmet/./node_modules/earcut/src/earcut.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolygonPipeline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolylineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolylinePipeline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolylineVolumeGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolylineVolumeGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PolylineVolumeOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/PrimitiveType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Proxy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/QuadraticRealPolynomial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/QuantizedMeshTerrainData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/QuarticRealPolynomial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Quaternion.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/QuaternionSpline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Queue.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Ray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Rectangle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RectangleCollisionChecker.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RectangleGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RectangleGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RectangleOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ReferenceFrame.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Request.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RequestErrorEvent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RequestScheduler.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RequestState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RequestType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Resource.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/RuntimeError.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/S2Cell.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ScreenSpaceEventHandler.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ScreenSpaceEventType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/ShowGeometryInstanceAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Simon1994PlanetaryPositions.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/SimplePolylineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/SphereGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/SphereOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Spherical.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Spline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/SteppedSpline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Stereographic.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TaskProcessor.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TerrainData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TerrainEncoding.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TerrainMesh.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TerrainPicker.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TerrainQuantization.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TexturePacker.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TileAvailability.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TileEdge.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TileProviderError.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TilingScheme.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TimeConstants.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TimeInterval.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TimeIntervalCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TimeStandard.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Tipsify.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TrackingReferenceFrame.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Transforms.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TranslationRotationScale.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TridiagonalSystemSolver.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/TrustedServers.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/VRTheWorldTerrainProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/VertexFormat.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/VerticalExaggeration.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/VideoSynchronizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/Visibility.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/VulkanConstants.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WallGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WallGeometryLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WallOutlineGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WebGLConstants.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WebMercatorProjection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WebMercatorTilingScheme.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WindingOrder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/WireframeIndexGenerator.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/addAllToArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/appendForwardSlash.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/arrayRemoveDuplicates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/barycentricCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/binarySearch.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/buildModuleUrl.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/clone.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/combine.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/createGuid.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/createWorldBathymetryAsync.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/createWorldTerrainAsync.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/decodeGoogleEarthEnterpriseData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/decodeVectorPolylinePositions.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/defer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/defined.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/deprecationWarning.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/destroyObject.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/formatError.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getAbsoluteUri.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getBaseUri.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getExtensionFromUri.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getFilenameFromUri.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getImageFromTypedArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getImagePixels.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getJsonFromTypedArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getMagic.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getStringFromTypedArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/getTimestamp.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/isBitSet.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/isBlobUri.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/isCrossOriginUrl.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/isDataUri.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/isLeapYear.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/loadAndExecuteScript.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/loadImageFromTypedArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/loadKTX2.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/mergeSort.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/objectToQuery.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/oneTimeWarning.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/parseResponseHeaders.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/pointInsideTriangle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/queryToObject.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/resizeImageToNextPowerOfTwo.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/sampleTerrain.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/sampleTerrainMostDetailed.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/scaleToGeodeticSurface.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/srgbToLinear.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/subdivideArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/webGLConstantToGlslType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/wrapFunction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Core/writeTextToCanvas.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/BillboardGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/BillboardVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/BoundingSphereState.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/BoxGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/BoxGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CallbackPositionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CallbackProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/Cesium3DTilesetGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/Cesium3DTilesetVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CheckerboardMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ColorMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CompositeEntityCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CompositeMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CompositePositionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CompositeProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ConstantPositionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ConstantProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CorridorGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CorridorGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CustomDataSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CylinderGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CylinderGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/CzmlDataSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/DataSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/DataSourceClock.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/DataSourceCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/DataSourceDisplay.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/DynamicGeometryBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/DynamicGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/EllipseGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/EllipseGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/EllipsoidGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/EllipsoidGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/Entity.js","webpack://emmet/./node_modules/kdbush/index.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/EntityCluster.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/EntityCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/EntityView.js","webpack://emmet/./node_modules/topojson-client/src/feature.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/GeoJsonDataSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/GeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/GeometryUpdaterSet.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/GeometryVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/GpxDataSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/GridMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/GroundGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ImageMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/KmlCamera.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/KmlDataSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/KmlLookAt.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/KmlTour.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/KmlTourFlyTo.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/KmlTourWait.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/LabelGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/LabelVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/MaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ModelGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ModelVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/NodeTransformationProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PathGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PathVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PlaneGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PlaneGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PointGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PointVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolygonGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolygonGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineArrowMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineDashMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineGlowMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineOutlineMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineVisualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineVolumeGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PolylineVolumeGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PositionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PositionPropertyArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/Property.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PropertyArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/PropertyBag.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/RectangleGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/RectangleGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ReferenceProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/Rotation.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/SampledPositionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/SampledProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/ScaledPositionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StaticGeometryColorBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StaticGeometryPerMaterialBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StaticGroundGeometryColorBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StaticOutlineGeometryBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StripeMaterialProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/StripeOrientation.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/TerrainOffsetProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/TimeIntervalCollectionPositionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/TimeIntervalCollectionProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/VelocityOrientationProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/VelocityVectorProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/Visualizer.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/WallGeometryUpdater.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/WallGraphics.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/createMaterialPropertyDescriptor.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/createPropertyDescriptor.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/createRawPropertyDescriptor.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/exportKml.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/getElement.js","webpack://emmet/./node_modules/@cesium/engine/Source/DataSources/heightReferenceOnEntityPropertyChanged.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/AutomaticUniforms.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Buffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/BufferUsage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ClearCommand.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ComputeCommand.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ComputeEngine.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Context.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ContextLimits.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/CubeMap.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/CubeMapFace.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/DrawCommand.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Framebuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/FramebufferManager.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/MipmapHint.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/MultisampleFramebuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Pass.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/PassState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/PixelDatatype.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/RenderState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Renderbuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/RenderbufferFormat.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Sampler.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ShaderBuilder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ShaderCache.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ShaderDestination.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ShaderFunction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ShaderProgram.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ShaderSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/ShaderStruct.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/SharedContext.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Sync.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Texture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/Texture3D.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/TextureAtlas.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/TextureCache.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/TextureMagnificationFilter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/TextureMinificationFilter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/TextureWrap.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/UniformState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/VertexArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/VertexArrayFacade.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/createUniform.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/createUniformArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/demodernizeShader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/freezeRenderState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Renderer/loadCubeMap.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/AlphaMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Appearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ArcGisBaseMapType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ArcGisMapServerImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ArcGisMapService.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Atmosphere.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/AttributeType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/AutoExposure.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Axis.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Azure2DImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/B3dmParser.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BatchTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BatchTableHierarchy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BatchTexture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Billboard.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BillboardCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BillboardLoadState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BillboardTexture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BingMapsImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BingMapsStyle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BlendEquation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BlendFunction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BlendOption.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BlendingState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BoundingVolumeSemantics.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BoxEmitter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BrdfLutGenerator.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/BufferLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Camera.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CameraEventAggregator.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CameraEventType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CameraFlightPath.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DContentGroup.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTile.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileBatchTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileColorBlendMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileContentFactory.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileContentState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileContentType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileFeature.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileFeatureTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileOptimizationHint.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileOptimizations.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilePass.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilePassState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilePointFeature.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileRefine.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileStyle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileStyleEngine.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesVoxelProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTileset.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetCache.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetHeatmap.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetSkipTraversal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetStatistics.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Cesium3DTilesetTraversal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CircleEmitter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ClassificationPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ClassificationType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ClippingPlane.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ClippingPlaneCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ClippingPolygon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ClippingPolygonCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CloudCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CloudType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ColorBlendMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Composite3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ConditionsExpression.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ConeEmitter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ContentMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CreditDisplay.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CubeMapPanorama.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CullFace.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/CumulusCloud.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DebugAppearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DebugCameraPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DebugInspector.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DebugModelMatrixPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DepthFunction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DepthPlane.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DerivedCommand.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DeviceOrientationCameraController.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DirectionalLight.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DiscardEmptyTileImagePolicy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DiscardMissingTileImagePolicy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DracoLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DynamicAtmosphereLightingType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/DynamicEnvironmentMapManager.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/EdgeFramebuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/EllipsoidPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/EllipsoidSurfaceAppearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Empty3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/EquirectangularPanorama.js","webpack://emmet/./node_modules/jsep/dist/jsep.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Expression.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ExpressionNodeType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Fog.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/FrameRateMonitor.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/FrameState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/FrustumCommands.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GaussianSplat3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GaussianSplatPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GaussianSplatRenderResources.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GaussianSplatSorter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GaussianSplatTextureGenerator.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Geometry3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GetFeatureInfoFormat.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Globe.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GlobeDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GlobeSurfaceShaderSet.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GlobeSurfaceTile.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GlobeSurfaceTileProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GlobeTranslucency.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GlobeTranslucencyFramebuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GlobeTranslucencyState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfBufferViewLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfDracoLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfImageLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfIndexBufferLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfJsonLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfLoaderUtil.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/ForEach.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/addBuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/addDefaults.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/addExtensionsRequired.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/addExtensionsUsed.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/addPipelineExtras.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/addToArray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/findAccessorMinMax.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/forEachTextureInMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/getAccessorByteStride.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/getComponentReader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/moveTechniqueRenderStates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/moveTechniquesToExtension.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/numberOfComponentsForType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/parseGlb.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/readAccessorPacked.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/removeExtension.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/removeExtensionsRequired.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/removeExtensionsUsed.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/removePipelineExtras.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/removeUnusedElements.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/updateAccessorComponentTypes.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/updateVersion.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfPipeline/usesExtension.js","webpack://emmet/./node_modules/@spz-loader/core/dist/index.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfSpzLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfStructuralMetadataLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfTextureLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GltfVertexBufferLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Google2DImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GoogleEarthEnterpriseImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GoogleEarthEnterpriseMapsProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GoogleStreetViewCubeMapPanoramaProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GridImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GroundPolylinePrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GroundPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/GroupMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/HeightReference.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/HorizontalOrigin.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SDataProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SDecoder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SFeature.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SField.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SLayer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SNode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SStatistics.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SSublayer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3SSymbology.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/I3dmParser.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ITwinData.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImageBasedLighting.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Imagery.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImageryLayer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImageryLayerCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImageryLayerFeatureInfo.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImageryState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Implicit3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitAvailabilityBitstream.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitMetadataView.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitSubdivisionScheme.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitSubtree.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitSubtreeCache.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitSubtreeMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitTileCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ImplicitTileset.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/InstanceAttributeSemantic.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/InvertClassification.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/IonImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/IonImageryProviderFactory.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/IonWorldImageryStyle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/JobScheduler.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/JobType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/JsonMetadataTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/KeyframeNode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Label.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/LabelCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/LabelStyle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Light.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MapMode2D.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MapboxImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MapboxStyleImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Material.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MaterialAppearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Megatexture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataClass.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataClassProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataComponentType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataEntity.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataEnum.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataEnumValue.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataPicking.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataSchema.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataSchemaLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataSemantic.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataTableProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/MetadataType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/AlphaPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/AtmospherePipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/B3dmLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/BatchTexturePipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/CPUStylingPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/CartesianRectangle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ClassificationModelDrawCommand.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ClassificationPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/CustomShader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/CustomShaderMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/CustomShaderPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/CustomShaderTranslucencyMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/DequantizationPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/EdgeDetectionPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/EdgeVisibilityPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/AnchorPointDirect.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/AnchorPointIndirect.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/CorrelationGroup.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/GltfGpmLocal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/GltfMeshPrimitiveGpmLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/MeshPrimitiveGpmLocal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/PpeMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/PpeSource.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/PpeTexture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/Spdcf.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Extensions/Gpm/StorageType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/FeatureIdPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/GeoJsonLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/GeometryPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/I3dmLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ImageBasedLightingPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ImageryConfiguration.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ImageryCoverage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ImageryFlags.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ImageryInput.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ImageryPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/InstancingPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/LightingModel.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/LightingPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/MappedPositions.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/MaterialPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/MetadataPickingPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/MetadataPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Model.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/Model3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelAlphaOptions.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelAnimation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelAnimationChannel.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelAnimationCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelArticulation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelArticulationStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelClippingPlanesPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelColorPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelDrawCommand.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelDrawCommands.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelFeature.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelFeatureTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelImagery.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelImageryMapping.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelLightingOptions.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelMatrixUpdateStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelNode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelPrimitiveImagery.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelReader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelRenderResources.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelRuntimeNode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelRuntimePrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelSceneGraph.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelSilhouettePipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelSkin.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelSplitterPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelStatistics.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/ModelUtility.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/MorphTargetsPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/NodeRenderResources.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/NodeStatisticsPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/PickingPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/PntsLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/PointCloudStylingPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/PrimitiveOutlineGenerator.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/PrimitiveOutlinePipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/PrimitiveRenderResources.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/PrimitiveStatisticsPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/SceneMode2DPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/SelectedFeatureIdPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/SkinningPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/StyleCommandsNeeded.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/TextureManager.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/TextureUniform.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/TilesetPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/UniformType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/VaryingType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/VerticalExaggerationPipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/WireframePipelineStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Model/pickModel.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ModelAnimationLoop.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ModelAnimationState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ModelComponents.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Moon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Multiple3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/NeverTileDiscardPolicy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/OIT.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/OpenStreetMapImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/OrderedGroundPrimitiveCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Panorama.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PanoramaProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Particle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ParticleBurst.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ParticleEmitter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ParticleSystem.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PerInstanceColorAppearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PerformanceDisplay.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PickDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PickDepthFramebuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PickFramebuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PickedMetadataInfo.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Picking.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PntsParser.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PointCloud.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PointCloudEyeDomeLighting.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PointCloudShading.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PointPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PointPrimitiveCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Polyline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PolylineCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PolylineColorAppearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PolylineMaterialAppearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PostProcessStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PostProcessStageCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PostProcessStageComposite.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PostProcessStageLibrary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PostProcessStageSampleMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PostProcessStageTextureCache.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Primitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PrimitiveCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PrimitiveLoadPlan.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PrimitivePipeline.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PrimitiveState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PropertyAttribute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PropertyAttributeProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PropertyTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PropertyTexture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/PropertyTextureProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/QuadtreeOccluders.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/QuadtreePrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/QuadtreeTile.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/QuadtreeTileLoadState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/QuadtreeTileProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ResourceCache.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ResourceCacheKey.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ResourceCacheStatistics.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ResourceLoader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ResourceLoaderState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SDFSettings.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Scene.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SceneFramebuffer.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SceneMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SceneTransforms.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SceneTransitioner.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ScreenSpaceCameraController.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SensorVolumePortionToDisplay.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ShadowMap.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ShadowMapShader.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ShadowMode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ShadowVolumeAppearance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SingleTileImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SkyAtmosphere.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SkyBox.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SpatialNode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SpecularEnvironmentCubeMap.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SphereEmitter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SplitDirection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Splitter.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/StencilConstants.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/StencilFunction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/StencilOperation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/StructuralMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/StyleExpression.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Sun.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SunLight.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SunPostProcess.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/SupportedImageFormats.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Terrain.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TerrainFillMesh.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TerrainState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileBoundingRegion.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileBoundingS2Cell.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileBoundingSphere.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileBoundingVolume.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileCoordinatesImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileDiscardPolicy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileImagery.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileMapServiceImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileOrientedBoundingBox.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileReplacementQueue.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileSelectionResult.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TileState.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Tileset3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TilesetMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TimeDynamicImagery.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TimeDynamicPointCloud.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Tonemapper.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TranslucentTileClassification.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/TweenCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/UrlTemplateImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTileBatch.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTileClampedPolylines.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTileGeometry.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTilePoints.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTilePolygons.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTilePolylines.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/Vector3DTilePrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VertexAttributeSemantic.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VerticalOrigin.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/View.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/ViewportQuad.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelBoundsCollection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelBoxShape.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelCell.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelCylinderShape.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelEllipsoidShape.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelMetadataOrder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelRenderResources.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelShape.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelShapeType.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/VoxelTraversal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/WebMapServiceImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/WebMapTileServiceImageryProvider.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/buildVoxelDrawCommands.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/computeFlyToLocationForRectangle.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/createBillboardPointCallback.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/createElevationBandMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/createGooglePhotorealistic3DTileset.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/createOsmBuildingsAsync.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/createTangentSpaceDebugPrimitive.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/createWorldImageryAsync.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/findContentMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/findGroupMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/findTileMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/getBinaryAccessor.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/getClipAndStyleCode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/getClippingFunction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/getMeshPrimitives.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/getMetadataClassProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/getMetadataProperty.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/hasExtension.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/parseBatchTable.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/parseFeatureMetadataLegacy.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/parseStructuralMetadata.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/preprocess3DTileContent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Scene/processVoxelProperties.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/AdjustTranslucentFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/AllMaterialAppearanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/AllMaterialAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/BasicMaterialAppearanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/BasicMaterialAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/PolylineColorAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/PolylineMaterialAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/AtmosphereCommon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/BillboardCollectionFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/BillboardCollectionVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/BrdfLutGeneratorFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/degreesPerRadian.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/depthRange.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/epsilon1.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/epsilon2.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/epsilon3.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/epsilon4.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/epsilon5.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/epsilon6.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/epsilon7.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/infinity.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/oneOverPi.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/oneOverTwoPi.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passCesium3DTile.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passCesium3DTileEdges.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passClassification.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passCompute.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passEnvironment.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passGaussianSplats.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passGlobe.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passOpaque.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passOverlay.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passTerrainClassification.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passTranslucent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/passVoxels.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/pi.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/piOverFour.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/piOverSix.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/piOverThree.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/piOverTwo.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/radiansPerDegree.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/sceneMode2D.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/sceneMode3D.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/sceneModeColumbusView.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/sceneModeMorphing.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/solarRadius.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/threePiOver2.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/twoPi.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Constants/webMercatorMaxLatitude.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/CzmBuiltins.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/HSBToRGB.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/HSLToRGB.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/RGBToHSB.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/RGBToHSL.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/RGBToXYZ.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/XYZToRGB.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/acesTonemapping.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/alphaWeight.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/antialias.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/applyHSBShift.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/approximateSphericalCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/approximateTanh.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/backFacing.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/branchFreeTernary.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/cascadeColor.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/cascadeDistance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/cascadeMatrix.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/cascadeWeights.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/clipPolygons.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/columbusViewMorph.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/computeAtmosphereColor.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/computeGroundAtmosphereScattering.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/computePosition.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/computeScattering.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/cosineAndSine.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/decodeRGB8.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/decompressTextureCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/depthClamp.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/eastNorthUpToEyeCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/ellipsoidContainsPoint.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/ellipsoidTextureCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/equalsEpsilon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/eyeOffset.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/eyeToWindowCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/fastApproximateAtan.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/fog.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/gammaCorrect.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/geodeticSurfaceNormal.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/getDefaultMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/getDynamicAtmosphereLightDirection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/getLambertDiffuse.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/getSpecular.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/getWaterNoise.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/hue.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/inverseGamma.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/isEmpty.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/isFull.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/latitudeToWebMercatorFraction.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/lineDistance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/linearToSrgb.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/luminance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/maximumComponent.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/metersPerPixel.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/modelToWindowCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/multiplyWithColorBalance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/nearFarScalar.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/octDecode.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/packDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/pbrLighting.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/phong.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/planeDistance.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/pointAlongRay.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/rayEllipsoidIntersectionInterval.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/raySphereIntersectionInterval.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/readDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/readNonPerspective.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/reverseLogDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/round.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/saturation.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/shadowDepthCompare.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/shadowVisibility.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/signNotZero.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/sphericalHarmonics.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/srgbToLinear.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/textureCube.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/transformPlane.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/translateRelativeToEye.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/translucentPhong.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/transpose.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/unpackClippingExtents.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/unpackDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/unpackFloat.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/unpackTexture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/unpackUint.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/valueTransform.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/vertexLogDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/writeDepthClamp.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/writeLogDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Functions/writeNonPerspective.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/depthRangeStruct.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/material.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/materialInput.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/modelMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/modelVertexOutput.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/ray.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/raySegment.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Builtin/Structs/shadowParameters.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/CloudCollectionFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/CloudCollectionVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/CloudNoiseFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/CloudNoiseVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/CompareAndPackTranslucentDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/CompositeOITFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ComputeIrradianceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ComputeRadianceMapFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ConvolveSpecularMapFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ConvolveSpecularMapVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/CubeMapPanoramaVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/DepthPlaneFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/DepthPlaneVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/EllipsoidFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/EllipsoidVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/FXAA3_11.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/GlobeFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/GlobeVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/GroundAtmosphere.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/AspectRampMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/BumpMapMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/CheckerboardMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/DotMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/ElevationBandMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/ElevationContourMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/ElevationRampMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/FadeMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/GridMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/NormalMapMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/PolylineArrowMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/PolylineDashMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/PolylineGlowMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/PolylineOutlineMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/RimLightingMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/SlopeRampMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/StripeMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/Water.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Materials/WaterMaskMaterial.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/AtmosphereStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/AtmosphereStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/CPUStylingStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/CPUStylingStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/CustomShaderStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/CustomShaderStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/EdgeDetectionStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/EdgeVisibilityStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/FeatureIdStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/FeatureIdStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/GeometryStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/GeometryStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ImageBasedLightingStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/InstancingStageCommon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/InstancingStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/LegacyInstancingStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/LightingStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/MaterialStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/MetadataStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/MetadataStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelClippingPlanesStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelClippingPolygonsStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelClippingPolygonsStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelColorStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelSilhouetteStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelSilhouetteStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelSplitterStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/ModelVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/MorphTargetsStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/PointCloudStylingStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/PrimitiveOutlineStageFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/PrimitiveOutlineStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/SelectedFeatureIdStageCommon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/SkinningStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Model/VerticalExaggerationStageVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PointPrimitiveCollectionFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PointPrimitiveCollectionVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolygonSignedDistanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolylineCommon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolylineFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolylineShadowVolumeFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolylineShadowVolumeMorphFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolylineShadowVolumeMorphVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolylineShadowVolumeVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PolylineVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/AcesTonemappingStage.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/AdditiveBlend.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/BlackAndWhite.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/BloomComposite.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/BrightPass.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/Brightness.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/CompositeTranslucentClassification.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/ContrastBias.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/DepthOfField.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/DepthView.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/DepthViewPacked.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/EdgeDetection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/FXAA.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/FilmicTonemapping.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/GaussianBlur1D.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/LensFlare.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/NightVision.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/PassThrough.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/PassThroughDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/ReinhardTonemapping.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PostProcessStages/Silhouette.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PrimitiveGaussianSplatFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/PrimitiveGaussianSplatVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ReprojectWebMercatorFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ReprojectWebMercatorVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ShadowVolumeAppearanceFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ShadowVolumeAppearanceVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ShadowVolumeFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SkyAtmosphereCommon.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SkyAtmosphereFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SkyAtmosphereVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SkyBoxFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SkyBoxVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SunFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SunTextureFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/SunVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Vector3DTileClampedPolylinesFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Vector3DTileClampedPolylinesVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Vector3DTilePolylinesVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/VectorTileVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ViewportQuadFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/ViewportQuadVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/IntersectBox.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/IntersectCylinder.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/IntersectDepth.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/IntersectEllipsoid.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/IntersectLongitude.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/IntersectPlane.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/Intersection.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/IntersectionUtils.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/Megatexture.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/Octree.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/VoxelFS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/VoxelUtils.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/VoxelVS.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/convertLocalToBoxUv.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/convertLocalToCylinderUv.js","webpack://emmet/./node_modules/@cesium/engine/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js","webpack://emmet/./node_modules/@cesium/engine/Source/Widget/CesiumWidget.js","webpack://emmet/./node_modules/@cesium/engine/Source/Workers/createTaskProcessorWorker.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Animation/Animation.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Animation/AnimationViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/BaseLayerPicker/BaseLayerPicker.js","webpack://emmet/./node_modules/@cesium/widgets/Source/BaseLayerPicker/BaseLayerPickerViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/BaseLayerPicker/ProviderViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/BaseLayerPicker/createDefaultImageryProviderViewModels.js","webpack://emmet/./node_modules/@cesium/widgets/Source/BaseLayerPicker/createDefaultTerrainProviderViewModels.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Cesium3DTilesInspector/Cesium3DTilesInspector.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/CesiumInspector/CesiumInspector.js","webpack://emmet/./node_modules/@cesium/widgets/Source/CesiumInspector/CesiumInspectorViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/ClockViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Command.js","webpack://emmet/./node_modules/@cesium/widgets/Source/FullscreenButton/FullscreenButton.js","webpack://emmet/./node_modules/@cesium/widgets/Source/FullscreenButton/FullscreenButtonViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Geocoder/Geocoder.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Geocoder/GeocoderViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/HomeButton/HomeButton.js","webpack://emmet/./node_modules/@cesium/widgets/Source/HomeButton/HomeButtonViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.js","webpack://emmet/./node_modules/@cesium/widgets/Source/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorerViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/InfoBox/InfoBox.js","webpack://emmet/./node_modules/@cesium/widgets/Source/InfoBox/InfoBoxViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/InspectorShared.js","webpack://emmet/./node_modules/@cesium/widgets/Source/NavigationHelpButton/NavigationHelpButton.js","webpack://emmet/./node_modules/@cesium/widgets/Source/NavigationHelpButton/NavigationHelpButtonViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/PerformanceWatchdog/PerformanceWatchdog.js","webpack://emmet/./node_modules/@cesium/widgets/Source/PerformanceWatchdog/PerformanceWatchdogViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/ProjectionPicker/ProjectionPicker.js","webpack://emmet/./node_modules/@cesium/widgets/Source/ProjectionPicker/ProjectionPickerViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/SceneModePicker/SceneModePicker.js","webpack://emmet/./node_modules/@cesium/widgets/Source/SceneModePicker/SceneModePickerViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/SelectionIndicator/SelectionIndicator.js","webpack://emmet/./node_modules/@cesium/widgets/Source/SelectionIndicator/SelectionIndicatorViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/SvgPathBindingHandler.js","webpack://emmet/./node_modules/@cesium/widgets/Source/ThirdParty/knockout-3.5.1.js","webpack://emmet/./node_modules/@cesium/widgets/Source/ThirdParty/knockout-es5.js","webpack://emmet/./node_modules/@cesium/widgets/Source/ThirdParty/knockout.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Timeline/Timeline.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Timeline/TimelineHighlightRange.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Timeline/TimelineTrack.js","webpack://emmet/./node_modules/@cesium/widgets/Source/ToggleButtonViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/VRButton/VRButton.js","webpack://emmet/./node_modules/@cesium/widgets/Source/VRButton/VRButtonViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Viewer/Viewer.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Viewer/viewerCesium3DTilesInspectorMixin.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Viewer/viewerCesiumInspectorMixin.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Viewer/viewerDragDropMixin.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Viewer/viewerPerformanceWatchdogMixin.js","webpack://emmet/./node_modules/@cesium/widgets/Source/Viewer/viewerVoxelInspectorMixin.js","webpack://emmet/./node_modules/@cesium/widgets/Source/VoxelInspector/VoxelInspector.js","webpack://emmet/./node_modules/@cesium/widgets/Source/VoxelInspector/VoxelInspectorViewModel.js","webpack://emmet/./node_modules/@cesium/widgets/Source/createCommand.js","webpack://emmet/./node_modules/@cesium/widgets/Source/subscribeAndEvaluate.js","webpack://emmet/./node_modules/@tweenjs/tween.js/dist/tween.esm.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/options.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/zlib-wasm/zlib-streams.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/constants.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/configuration.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/codecs/crc32.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/crc32-stream.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/util/encode-text.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/codecs/sjcl.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/common-crypto.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/aes-crypto-stream.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/zip-crypto-stream.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/zip-entry-stream.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/codec-stream.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/codec-worker.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/codec-pool.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/io.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/util/decode-cp437.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/util/decode-text.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/zip-entry.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/zip-reader.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/zip-writer.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/zip-core-base.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/zlib-streams-inline.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/core/streams/zlib-wasm/zlib-streams-loader.js","webpack://emmet/./node_modules/@zip.js/zip.js/lib/zip-module-wasm.js","webpack://emmet/./node_modules/cesium/Source/Cesium.js","webpack://emmet/./node_modules/datatables.net-bs/js/dataTables.bootstrap.mjs","webpack://emmet/./node_modules/datatables.net-buttons-bs/js/buttons.bootstrap.mjs","webpack://emmet/./node_modules/datatables.net-buttons/js/buttons.colVis.mjs","webpack://emmet/./node_modules/datatables.net-buttons/js/buttons.html5.mjs","webpack://emmet/./node_modules/datatables.net-buttons/js/dataTables.buttons.mjs","webpack://emmet/./node_modules/datatables.net-jqui/js/dataTables.jqueryui.mjs","webpack://emmet/./node_modules/datatables.net/js/jquery.dataTables.mjs","webpack://emmet/./node_modules/jquery/dist-module/jquery.module.js","webpack://emmet/./node_modules/js-cookie/dist/js.cookie.mjs","webpack://emmet/./node_modules/meshoptimizer/meshopt_encoder.js","webpack://emmet/./node_modules/meshoptimizer/meshopt_decoder.mjs","webpack://emmet/./node_modules/meshoptimizer/meshopt_simplifier.js","webpack://emmet/./node_modules/meshoptimizer/meshopt_clusterizer.js","webpack://emmet/./node_modules/ol-contextmenu/dist/ol-contextmenu.js","webpack://emmet/./node_modules/ol-ext/control/Bar.js","webpack://emmet/./node_modules/ol-ext/control/Button.js","webpack://emmet/./node_modules/ol/render/webgl/MixedGeometryBatch.js","webpack://emmet/./node_modules/ol/webgl/LabelsArray.js","webpack://emmet/./node_modules/ol/render/webgl/renderinstructions.js","webpack://emmet/./node_modules/ol/render/webgl/serialize.js","webpack://emmet/./node_modules/ol/render/webgl/style.js","webpack://emmet/./node_modules/ol/render/webgl/textUtil.js","webpack://emmet/./node_modules/ol/render/webgl/VectorStyleRenderer.js","webpack://emmet/./node_modules/ol/render/webgl/encodeUtil.js","webpack://emmet/./node_modules/ol/worker/textOverlay.js","webpack://emmet/./node_modules/ol/render/webgl/constants.js","webpack://emmet/./node_modules/ol/worker/webgl.js","webpack://emmet/./node_modules/ol/webgl/RenderTarget.js","webpack://emmet/./node_modules/ol/renderer/webgl/vectorUtil.js","webpack://emmet/./node_modules/ol/renderer/webgl/VectorLayer.js","webpack://emmet/./node_modules/ol/renderer/webgl/worldUtil.js","webpack://emmet/./node_modules/ol/layer/Heatmap.js","webpack://emmet/./node_modules/ol-ext/control/LayerSwitcher.js","webpack://emmet/./node_modules/ol-ext/control/LayerPopup.js","webpack://emmet/./node_modules/ol-ext/control/Notification.js","webpack://emmet/./node_modules/ol-ext/control/Overlay.js","webpack://emmet/./node_modules/ol-ext/control/Scale.js","webpack://emmet/./node_modules/ol-ext/geom/sphere.js","webpack://emmet/./node_modules/ol-ext/control/Search.js","webpack://emmet/./node_modules/ol-ext/util/Ajax.js","webpack://emmet/./node_modules/ol-ext/control/SearchJSON.js","webpack://emmet/./node_modules/ol-ext/control/SearchNominatim.js","webpack://emmet/./node_modules/ol-ext/control/Toggle.js","webpack://emmet/./node_modules/ol-ext/interaction/Transform.js","webpack://emmet/./node_modules/ol-ext/util/input/Base.js","webpack://emmet/./node_modules/ol-ext/util/input/Checkbox.js","webpack://emmet/./node_modules/ol-ext/util/input/Switch.js","webpack://emmet/./node_modules/ol-ext/util/input/Radio.js","webpack://emmet/./node_modules/ol-ext/util/element.js","webpack://emmet/./node_modules/ol/Collection.js","webpack://emmet/./node_modules/ol/CollectionEventType.js","webpack://emmet/./node_modules/ol/DataTile.js","webpack://emmet/./node_modules/ol/Disposable.js","webpack://emmet/./node_modules/ol/Feature.js","webpack://emmet/./node_modules/ol/Geolocation.js","webpack://emmet/./node_modules/ol/Image.js","webpack://emmet/./node_modules/ol/ImageState.js","webpack://emmet/./node_modules/ol/ImageTile.js","webpack://emmet/./node_modules/ol/Kinetic.js","webpack://emmet/./node_modules/ol/MapBrowserEventHandler.js","webpack://emmet/./node_modules/ol/structs/PriorityQueue.js","webpack://emmet/./node_modules/ol/TileQueue.js","webpack://emmet/./node_modules/ol/renderer/Map.js","webpack://emmet/./node_modules/ol/renderer/Composite.js","webpack://emmet/./node_modules/ol/Map.js","webpack://emmet/./node_modules/ol/control/defaults.js","webpack://emmet/./node_modules/ol/MapBrowserEvent.js","webpack://emmet/./node_modules/ol/MapBrowserEventType.js","webpack://emmet/./node_modules/ol/MapEvent.js","webpack://emmet/./node_modules/ol/MapEventType.js","webpack://emmet/./node_modules/ol/MapProperty.js","webpack://emmet/./node_modules/ol/Object.js","webpack://emmet/./node_modules/ol/ObjectEventType.js","webpack://emmet/./node_modules/ol/Observable.js","webpack://emmet/./node_modules/ol/Overlay.js","webpack://emmet/./node_modules/ol/Tile.js","webpack://emmet/./node_modules/ol/TileRange.js","webpack://emmet/./node_modules/ol/TileState.js","webpack://emmet/./node_modules/ol/centerconstraint.js","webpack://emmet/./node_modules/ol/resolutionconstraint.js","webpack://emmet/./node_modules/ol/View.js","webpack://emmet/./node_modules/ol/ViewHint.js","webpack://emmet/./node_modules/ol/ViewProperty.js","webpack://emmet/./node_modules/ol/array.js","webpack://emmet/./node_modules/ol/asserts.js","webpack://emmet/./node_modules/ol/color.js","webpack://emmet/./node_modules/ol/colorlike.js","webpack://emmet/./node_modules/ol/console.js","webpack://emmet/./node_modules/ol/control/Attribution.js","webpack://emmet/./node_modules/ol/control/Control.js","webpack://emmet/./node_modules/ol/control/FullScreen.js","webpack://emmet/./node_modules/ol/control/MousePosition.js","webpack://emmet/./node_modules/ol/control/OverviewMap.js","webpack://emmet/./node_modules/ol/control/Rotate.js","webpack://emmet/./node_modules/ol/control/ScaleLine.js","webpack://emmet/./node_modules/ol/control/Zoom.js","webpack://emmet/./node_modules/ol/control/ZoomToExtent.js","webpack://emmet/./node_modules/ol/coordinate.js","webpack://emmet/./node_modules/ol/css.js","webpack://emmet/./node_modules/ol/dom.js","webpack://emmet/./node_modules/ol/easing.js","webpack://emmet/./node_modules/ol/events.js","webpack://emmet/./node_modules/ol/events/Event.js","webpack://emmet/./node_modules/ol/events/EventType.js","webpack://emmet/./node_modules/ol/events/Target.js","webpack://emmet/./node_modules/ol/events/condition.js","webpack://emmet/./node_modules/ol/expr/cpu.js","webpack://emmet/./node_modules/ol/expr/expression.js","webpack://emmet/./node_modules/ol/webgl/PaletteTexture.js","webpack://emmet/./node_modules/ol/expr/gpu.js","webpack://emmet/./node_modules/ol/extent.js","webpack://emmet/./node_modules/ol/extent/Relationship.js","webpack://emmet/./node_modules/ol/featureloader.js","webpack://emmet/./node_modules/ol/format/Feature.js","webpack://emmet/./node_modules/ol/format/JSONFeature.js","webpack://emmet/./node_modules/ol/format/GeoJSON.js","webpack://emmet/./node_modules/ol/format/XMLFeature.js","webpack://emmet/./node_modules/ol/format/KML.js","webpack://emmet/./node_modules/ol/format/TextFeature.js","webpack://emmet/./node_modules/ol/format/WKT.js","webpack://emmet/./node_modules/ol/format/XML.js","webpack://emmet/./node_modules/ol/format/xlink.js","webpack://emmet/./node_modules/ol/format/OWS.js","webpack://emmet/./node_modules/ol/format/WMTSCapabilities.js","webpack://emmet/./node_modules/ol/format/xsd.js","webpack://emmet/./node_modules/ol/functions.js","webpack://emmet/./node_modules/ol/geom/Geometry.js","webpack://emmet/./node_modules/ol/geom/GeometryCollection.js","webpack://emmet/./node_modules/ol/geom/LineString.js","webpack://emmet/./node_modules/ol/geom/MultiLineString.js","webpack://emmet/./node_modules/ol/geom/MultiPoint.js","webpack://emmet/./node_modules/ol/geom/MultiPolygon.js","webpack://emmet/./node_modules/ol/geom/Point.js","webpack://emmet/./node_modules/ol/geom/LinearRing.js","webpack://emmet/./node_modules/ol/geom/Polygon.js","webpack://emmet/./node_modules/ol/geom/SimpleGeometry.js","webpack://emmet/./node_modules/ol/geom/flat/area.js","webpack://emmet/./node_modules/ol/geom/flat/center.js","webpack://emmet/./node_modules/ol/geom/flat/closest.js","webpack://emmet/./node_modules/ol/geom/flat/contains.js","webpack://emmet/./node_modules/ol/geom/flat/deflate.js","webpack://emmet/./node_modules/ol/geom/flat/inflate.js","webpack://emmet/./node_modules/ol/geom/flat/interiorpoint.js","webpack://emmet/./node_modules/ol/geom/flat/interpolate.js","webpack://emmet/./node_modules/ol/geom/flat/intersectsextent.js","webpack://emmet/./node_modules/ol/geom/flat/length.js","webpack://emmet/./node_modules/ol/geom/flat/lineoffset.js","webpack://emmet/./node_modules/ol/geom/flat/orient.js","webpack://emmet/./node_modules/ol/geom/flat/reverse.js","webpack://emmet/./node_modules/ol/geom/flat/segments.js","webpack://emmet/./node_modules/ol/geom/flat/simplify.js","webpack://emmet/./node_modules/ol/geom/flat/textpath.js","webpack://emmet/./node_modules/ol/geom/flat/transform.js","webpack://emmet/./node_modules/ol/has.js","webpack://emmet/./node_modules/ol/interaction/DoubleClickZoom.js","webpack://emmet/./node_modules/ol/interaction/DragPan.js","webpack://emmet/./node_modules/ol/interaction/DragRotate.js","webpack://emmet/./node_modules/ol/render/Box.js","webpack://emmet/./node_modules/ol/interaction/DragBox.js","webpack://emmet/./node_modules/ol/interaction/DragZoom.js","webpack://emmet/./node_modules/ol/geom/Circle.js","webpack://emmet/./node_modules/ol/interaction/Draw.js","webpack://emmet/./node_modules/ol/interaction/Interaction.js","webpack://emmet/./node_modules/ol/events/Key.js","webpack://emmet/./node_modules/ol/interaction/KeyboardPan.js","webpack://emmet/./node_modules/ol/interaction/KeyboardZoom.js","webpack://emmet/./node_modules/ol/interaction/Modify.js","webpack://emmet/./node_modules/ol/interaction/MouseWheelZoom.js","webpack://emmet/./node_modules/ol/interaction/PinchRotate.js","webpack://emmet/./node_modules/ol/interaction/PinchZoom.js","webpack://emmet/./node_modules/ol/interaction/Pointer.js","webpack://emmet/./node_modules/ol/interaction/Property.js","webpack://emmet/./node_modules/ol/interaction/defaults.js","webpack://emmet/./node_modules/ol/interaction/tracing.js","webpack://emmet/./node_modules/ol/layer/Base.js","webpack://emmet/./node_modules/ol/layer/BaseTile.js","webpack://emmet/./node_modules/ol/render/canvas/style.js","webpack://emmet/./node_modules/ol/layer/BaseVector.js","webpack://emmet/./node_modules/ol/renderer/webgl/FlowLayer.js","webpack://emmet/./node_modules/ol/layer/Flow.js","webpack://emmet/./node_modules/ol/layer/Group.js","webpack://emmet/./node_modules/ol/renderer/canvas/ImageLayer.js","webpack://emmet/./node_modules/ol/layer/BaseImage.js","webpack://emmet/./node_modules/ol/layer/Image.js","webpack://emmet/./node_modules/ol/layer/Layer.js","webpack://emmet/./node_modules/ol/layer/Property.js","webpack://emmet/./node_modules/ol/layer/Tile.js","webpack://emmet/./node_modules/ol/layer/TileProperty.js","webpack://emmet/./node_modules/ol/renderer/canvas/VectorLayer.js","webpack://emmet/./node_modules/ol/layer/Vector.js","webpack://emmet/./node_modules/ol/renderer/canvas/VectorTileLayer.js","webpack://emmet/./node_modules/ol/layer/VectorTile.js","webpack://emmet/./node_modules/ol/math.js","webpack://emmet/./node_modules/ol/obj.js","webpack://emmet/./node_modules/ol/pointer/EventType.js","webpack://emmet/./node_modules/ol/proj/epsg3857.js","webpack://emmet/./node_modules/ol/proj/epsg4326.js","webpack://emmet/./node_modules/ol/proj/utm.js","webpack://emmet/./node_modules/ol/proj.js","webpack://emmet/./node_modules/ol/proj/Projection.js","webpack://emmet/./node_modules/ol/proj/Units.js","webpack://emmet/./node_modules/ol/proj/proj4.js","webpack://emmet/./node_modules/ol/proj/projections.js","webpack://emmet/./node_modules/ol/proj/transforms.js","webpack://emmet/./node_modules/ol/render.js","webpack://emmet/./node_modules/ol/render/Event.js","webpack://emmet/./node_modules/ol/render/EventType.js","webpack://emmet/./node_modules/ol/render/Feature.js","webpack://emmet/./node_modules/ol/render/VectorContext.js","webpack://emmet/./node_modules/ol/render/canvas.js","webpack://emmet/./node_modules/ol/render/canvas/Builder.js","webpack://emmet/./node_modules/ol/render/canvas/ImageBuilder.js","webpack://emmet/./node_modules/ol/render/canvas/LineStringBuilder.js","webpack://emmet/./node_modules/ol/render/canvas/PolygonBuilder.js","webpack://emmet/./node_modules/ol/render/canvas/BuilderGroup.js","webpack://emmet/./node_modules/ol/render/canvas/Executor.js","webpack://emmet/./node_modules/ol/render/canvas/ExecutorGroup.js","webpack://emmet/./node_modules/ol/render/canvas/Immediate.js","webpack://emmet/./node_modules/ol/render/canvas/Instruction.js","webpack://emmet/./node_modules/ol/geom/flat/clip.js","webpack://emmet/./node_modules/ol/geom/flat/linechunk.js","webpack://emmet/./node_modules/ol/geom/flat/straightchunk.js","webpack://emmet/./node_modules/ol/render/canvas/TextBuilder.js","webpack://emmet/./node_modules/ol/render/canvas/ZIndexContext.js","webpack://emmet/./node_modules/ol/render/canvas/hitdetect.js","webpack://emmet/./node_modules/ol/render/webgl/ShaderBuilder.js","webpack://emmet/./node_modules/ol/style/flat.js","webpack://emmet/./node_modules/ol/render/webgl/bufferUtil.js","webpack://emmet/./node_modules/ol/render/webgl/compileUtil.js","webpack://emmet/./node_modules/ol/render/webgl/float64Util.js","webpack://emmet/./node_modules/ol/renderer/Layer.js","webpack://emmet/./node_modules/ol/renderer/canvas/Layer.js","webpack://emmet/./node_modules/ol/renderer/canvas/TileLayer.js","webpack://emmet/./node_modules/ol/renderer/vector.js","webpack://emmet/./node_modules/ol/renderer/webgl/Layer.js","webpack://emmet/./node_modules/ol/webgl/BaseTileRepresentation.js","webpack://emmet/./node_modules/ol/webgl/TileTexture.js","webpack://emmet/./node_modules/ol/renderer/webgl/TileLayerBase.js","webpack://emmet/./node_modules/ol/renderer/webgl/TileLayer.js","webpack://emmet/./node_modules/ol/reproj.js","webpack://emmet/./node_modules/ol/reproj/Tile.js","webpack://emmet/./node_modules/ol/reproj/Triangulation.js","webpack://emmet/./node_modules/ol/reproj/common.js","webpack://emmet/./node_modules/ol/rotationconstraint.js","webpack://emmet/./node_modules/ol/size.js","webpack://emmet/./node_modules/ol/source/BingMaps.js","webpack://emmet/./node_modules/ol/source/Cluster.js","webpack://emmet/./node_modules/ol/reproj/glreproj.js","webpack://emmet/./node_modules/ol/reproj/DataTile.js","webpack://emmet/./node_modules/ol/source/DataTile.js","webpack://emmet/./node_modules/ol/resolution.js","webpack://emmet/./node_modules/ol/reproj/Image.js","webpack://emmet/./node_modules/ol/source/Image.js","webpack://emmet/./node_modules/ol/source/ImageStatic.js","webpack://emmet/./node_modules/ol/source/static.js","webpack://emmet/./node_modules/ol/source/ImageWMS.js","webpack://emmet/./node_modules/ol/source/OSM.js","webpack://emmet/./node_modules/ol/source/Source.js","webpack://emmet/./node_modules/ol/source/Tile.js","webpack://emmet/./node_modules/ol/source/TileEventType.js","webpack://emmet/./node_modules/ol/source/TileImage.js","webpack://emmet/./node_modules/ol/source/TileWMS.js","webpack://emmet/./node_modules/ol/source/UrlTile.js","webpack://emmet/./node_modules/ol/loadingstrategy.js","webpack://emmet/./node_modules/ol/source/Vector.js","webpack://emmet/./node_modules/ol/source/VectorEventType.js","webpack://emmet/./node_modules/ol/VectorRenderTile.js","webpack://emmet/./node_modules/ol/VectorTile.js","webpack://emmet/./node_modules/ol/source/VectorTile.js","webpack://emmet/./node_modules/ol/source/WMTS.js","webpack://emmet/./node_modules/ol/source/XYZ.js","webpack://emmet/./node_modules/ol/source/common.js","webpack://emmet/./node_modules/ol/source/wms.js","webpack://emmet/./node_modules/ol/sphere.js","webpack://emmet/./node_modules/ol/string.js","webpack://emmet/./node_modules/ol/structs/LRUCache.js","webpack://emmet/./node_modules/ol/structs/RBush.js","webpack://emmet/./node_modules/ol/style/Circle.js","webpack://emmet/./node_modules/ol/style/Fill.js","webpack://emmet/./node_modules/ol/style/Icon.js","webpack://emmet/./node_modules/ol/style/IconImage.js","webpack://emmet/./node_modules/ol/style/IconImageCache.js","webpack://emmet/./node_modules/ol/style/Image.js","webpack://emmet/./node_modules/ol/style/RegularShape.js","webpack://emmet/./node_modules/ol/style/Stroke.js","webpack://emmet/./node_modules/ol/style/Style.js","webpack://emmet/./node_modules/ol/style/Text.js","webpack://emmet/./node_modules/ol/tilecoord.js","webpack://emmet/./node_modules/ol/tilegrid.js","webpack://emmet/./node_modules/ol/tilegrid/TileGrid.js","webpack://emmet/./node_modules/ol/tilegrid/WMTS.js","webpack://emmet/./node_modules/ol/tilegrid/common.js","webpack://emmet/./node_modules/ol/tileurlfunction.js","webpack://emmet/./node_modules/ol/transform.js","webpack://emmet/./node_modules/ol/uri.js","webpack://emmet/./node_modules/ol/util.js","webpack://emmet/./node_modules/ol/vec/mat4.js","webpack://emmet/./node_modules/ol/webgl.js","webpack://emmet/./node_modules/ol/webgl/Buffer.js","webpack://emmet/./node_modules/ol/webgl/Canvas.js","webpack://emmet/./node_modules/ol/webgl/ContextEventType.js","webpack://emmet/./node_modules/ol/webgl/PostProcessingPass.js","webpack://emmet/./node_modules/ol/webgl/Helper.js","webpack://emmet/./node_modules/ol/xml.js","webpack://emmet/./node_modules/olcs/lib/olcs/core/OLImageryProvider.js","webpack://emmet/./node_modules/pbf/index.js","webpack://emmet/./node_modules/ol/format/MVT.js","webpack://emmet/./node_modules/olcs/lib/olcs/MVTImageryProvider.js","webpack://emmet/./node_modules/olcs/lib/olcs/core.js","webpack://emmet/./node_modules/olcs/lib/olcs/Camera.js","webpack://emmet/./node_modules/olcs/lib/olcs/AbstractSynchronizer.js","webpack://emmet/./node_modules/olcs/lib/olcs/RasterSynchronizer.js","webpack://emmet/./node_modules/olcs/lib/olcs/FeatureConverter.js","webpack://emmet/./node_modules/olcs/lib/olcs/VectorSynchronizer.js","webpack://emmet/./node_modules/olcs/lib/olcs/SynchronizedOverlay.js","webpack://emmet/./node_modules/olcs/lib/olcs/OverlaySynchronizer.js","webpack://emmet/./node_modules/olcs/lib/olcs/OLCesium.js","webpack://emmet/./node_modules/olcs/lib/olcs/contrib/Manager.js","webpack://emmet/./node_modules/olcs/lib/olcs.js","webpack://emmet/./node_modules/olcs/lib/olcs/AutoRenderLoop.js","webpack://emmet/./node_modules/olcs/lib/olcs/core/VectorLayerCounterpart.js","webpack://emmet/./node_modules/olcs/lib/olcs/math.js","webpack://emmet/./node_modules/olcs/lib/olcs/util.js","webpack://emmet/./node_modules/quickselect/index.js","webpack://emmet/./node_modules/rbush/index.js","webpack://emmet/./node_modules/suncalc/index.js","webpack://emmet/./node_modules/tslib/tslib.es6.mjs","webpack://emmet/./node_modules/underscore/modules/_deepGet.js","webpack://emmet/./node_modules/underscore/modules/_optimizeCb.js","webpack://emmet/./node_modules/underscore/modules/after.js","webpack://emmet/./node_modules/underscore/modules/before.js","webpack://emmet/./node_modules/underscore/modules/compose.js","webpack://emmet/./node_modules/underscore/modules/constant.js","webpack://emmet/./node_modules/underscore/modules/identity.js","webpack://emmet/./node_modules/underscore/modules/_setup.js","webpack://emmet/./node_modules/underscore/modules/isBoolean.js","webpack://emmet/./node_modules/underscore/modules/_tagTester.js","webpack://emmet/./node_modules/underscore/modules/isString.js","webpack://emmet/./node_modules/underscore/modules/isNumber.js","webpack://emmet/./node_modules/underscore/modules/isDate.js","webpack://emmet/./node_modules/underscore/modules/isRegExp.js","webpack://emmet/./node_modules/underscore/modules/isError.js","webpack://emmet/./node_modules/underscore/modules/isSymbol.js","webpack://emmet/./node_modules/underscore/modules/isArrayBuffer.js","webpack://emmet/./node_modules/underscore/modules/isFunction.js","webpack://emmet/./node_modules/underscore/modules/_hasObjectTag.js","webpack://emmet/./node_modules/underscore/modules/_stringTagBug.js","webpack://emmet/./node_modules/underscore/modules/isDataView.js","webpack://emmet/./node_modules/underscore/modules/isArray.js","webpack://emmet/./node_modules/underscore/modules/_has.js","webpack://emmet/./node_modules/underscore/modules/isArguments.js","webpack://emmet/./node_modules/underscore/modules/isFinite.js","webpack://emmet/./node_modules/underscore/modules/isNaN.js","webpack://emmet/./node_modules/underscore/modules/_createSizePropertyCheck.js","webpack://emmet/./node_modules/underscore/modules/_shallowProperty.js","webpack://emmet/./node_modules/underscore/modules/_getByteLength.js","webpack://emmet/./node_modules/underscore/modules/_isBufferLike.js","webpack://emmet/./node_modules/underscore/modules/isTypedArray.js","webpack://emmet/./node_modules/underscore/modules/_getLength.js","webpack://emmet/./node_modules/underscore/modules/_collectNonEnumProps.js","webpack://emmet/./node_modules/underscore/modules/keys.js","webpack://emmet/./node_modules/underscore/modules/isEmpty.js","webpack://emmet/./node_modules/underscore/modules/isMatch.js","webpack://emmet/./node_modules/underscore/modules/underscore.js","webpack://emmet/./node_modules/underscore/modules/_toBufferView.js","webpack://emmet/./node_modules/underscore/modules/isEqual.js","webpack://emmet/./node_modules/underscore/modules/allKeys.js","webpack://emmet/./node_modules/underscore/modules/_methodFingerprint.js","webpack://emmet/./node_modules/underscore/modules/isMap.js","webpack://emmet/./node_modules/underscore/modules/isWeakMap.js","webpack://emmet/./node_modules/underscore/modules/isSet.js","webpack://emmet/./node_modules/underscore/modules/isWeakSet.js","webpack://emmet/./node_modules/underscore/modules/values.js","webpack://emmet/./node_modules/underscore/modules/pairs.js","webpack://emmet/./node_modules/underscore/modules/invert.js","webpack://emmet/./node_modules/underscore/modules/functions.js","webpack://emmet/./node_modules/underscore/modules/_createAssigner.js","webpack://emmet/./node_modules/underscore/modules/extend.js","webpack://emmet/./node_modules/underscore/modules/extendOwn.js","webpack://emmet/./node_modules/underscore/modules/defaults.js","webpack://emmet/./node_modules/underscore/modules/_baseCreate.js","webpack://emmet/./node_modules/underscore/modules/create.js","webpack://emmet/./node_modules/underscore/modules/clone.js","webpack://emmet/./node_modules/underscore/modules/toPath.js","webpack://emmet/./node_modules/underscore/modules/_toPath.js","webpack://emmet/./node_modules/underscore/modules/get.js","webpack://emmet/./node_modules/underscore/modules/has.js","webpack://emmet/./node_modules/underscore/modules/matcher.js","webpack://emmet/./node_modules/underscore/modules/property.js","webpack://emmet/./node_modules/underscore/modules/_baseIteratee.js","webpack://emmet/./node_modules/underscore/modules/iteratee.js","webpack://emmet/./node_modules/underscore/modules/_cb.js","webpack://emmet/./node_modules/underscore/modules/mapObject.js","webpack://emmet/./node_modules/underscore/modules/propertyOf.js","webpack://emmet/./node_modules/underscore/modules/now.js","webpack://emmet/./node_modules/underscore/modules/_createEscaper.js","webpack://emmet/./node_modules/underscore/modules/_escapeMap.js","webpack://emmet/./node_modules/underscore/modules/escape.js","webpack://emmet/./node_modules/underscore/modules/unescape.js","webpack://emmet/./node_modules/underscore/modules/_unescapeMap.js","webpack://emmet/./node_modules/underscore/modules/templateSettings.js","webpack://emmet/./node_modules/underscore/modules/template.js","webpack://emmet/./node_modules/underscore/modules/result.js","webpack://emmet/./node_modules/underscore/modules/chain.js","webpack://emmet/./node_modules/underscore/modules/_executeBound.js","webpack://emmet/./node_modules/underscore/modules/partial.js","webpack://emmet/./node_modules/underscore/modules/bind.js","webpack://emmet/./node_modules/underscore/modules/_isArrayLike.js","webpack://emmet/./node_modules/underscore/modules/_flatten.js","webpack://emmet/./node_modules/underscore/modules/bindAll.js","webpack://emmet/./node_modules/underscore/modules/memoize.js","webpack://emmet/./node_modules/underscore/modules/delay.js","webpack://emmet/./node_modules/underscore/modules/defer.js","webpack://emmet/./node_modules/underscore/modules/throttle.js","webpack://emmet/./node_modules/underscore/modules/debounce.js","webpack://emmet/./node_modules/underscore/modules/wrap.js","webpack://emmet/./node_modules/underscore/modules/once.js","webpack://emmet/./node_modules/underscore/modules/findKey.js","webpack://emmet/./node_modules/underscore/modules/_createPredicateIndexFinder.js","webpack://emmet/./node_modules/underscore/modules/findIndex.js","webpack://emmet/./node_modules/underscore/modules/findLastIndex.js","webpack://emmet/./node_modules/underscore/modules/sortedIndex.js","webpack://emmet/./node_modules/underscore/modules/_createIndexFinder.js","webpack://emmet/./node_modules/underscore/modules/indexOf.js","webpack://emmet/./node_modules/underscore/modules/lastIndexOf.js","webpack://emmet/./node_modules/underscore/modules/find.js","webpack://emmet/./node_modules/underscore/modules/findWhere.js","webpack://emmet/./node_modules/underscore/modules/each.js","webpack://emmet/./node_modules/underscore/modules/map.js","webpack://emmet/./node_modules/underscore/modules/_createReduce.js","webpack://emmet/./node_modules/underscore/modules/reduce.js","webpack://emmet/./node_modules/underscore/modules/reduceRight.js","webpack://emmet/./node_modules/underscore/modules/filter.js","webpack://emmet/./node_modules/underscore/modules/reject.js","webpack://emmet/./node_modules/underscore/modules/every.js","webpack://emmet/./node_modules/underscore/modules/some.js","webpack://emmet/./node_modules/underscore/modules/contains.js","webpack://emmet/./node_modules/underscore/modules/invoke.js","webpack://emmet/./node_modules/underscore/modules/pluck.js","webpack://emmet/./node_modules/underscore/modules/where.js","webpack://emmet/./node_modules/underscore/modules/max.js","webpack://emmet/./node_modules/underscore/modules/min.js","webpack://emmet/./node_modules/underscore/modules/toArray.js","webpack://emmet/./node_modules/underscore/modules/sample.js","webpack://emmet/./node_modules/underscore/modules/shuffle.js","webpack://emmet/./node_modules/underscore/modules/sortBy.js","webpack://emmet/./node_modules/underscore/modules/_group.js","webpack://emmet/./node_modules/underscore/modules/groupBy.js","webpack://emmet/./node_modules/underscore/modules/indexBy.js","webpack://emmet/./node_modules/underscore/modules/countBy.js","webpack://emmet/./node_modules/underscore/modules/partition.js","webpack://emmet/./node_modules/underscore/modules/size.js","webpack://emmet/./node_modules/underscore/modules/_keyInObj.js","webpack://emmet/./node_modules/underscore/modules/pick.js","webpack://emmet/./node_modules/underscore/modules/omit.js","webpack://emmet/./node_modules/underscore/modules/initial.js","webpack://emmet/./node_modules/underscore/modules/first.js","webpack://emmet/./node_modules/underscore/modules/rest.js","webpack://emmet/./node_modules/underscore/modules/last.js","webpack://emmet/./node_modules/underscore/modules/compact.js","webpack://emmet/./node_modules/underscore/modules/flatten.js","webpack://emmet/./node_modules/underscore/modules/difference.js","webpack://emmet/./node_modules/underscore/modules/without.js","webpack://emmet/./node_modules/underscore/modules/uniq.js","webpack://emmet/./node_modules/underscore/modules/union.js","webpack://emmet/./node_modules/underscore/modules/intersection.js","webpack://emmet/./node_modules/underscore/modules/unzip.js","webpack://emmet/./node_modules/underscore/modules/zip.js","webpack://emmet/./node_modules/underscore/modules/object.js","webpack://emmet/./node_modules/underscore/modules/chunk.js","webpack://emmet/./node_modules/underscore/modules/_chainResult.js","webpack://emmet/./node_modules/underscore/modules/mixin.js","webpack://emmet/./node_modules/underscore/modules/underscore-array-methods.js","webpack://emmet/./node_modules/underscore/modules/index-default.js","webpack://emmet/./node_modules/underscore/modules/isElement.js","webpack://emmet/./node_modules/underscore/modules/isNull.js","webpack://emmet/./node_modules/underscore/modules/isObject.js","webpack://emmet/./node_modules/underscore/modules/isUndefined.js","webpack://emmet/./node_modules/underscore/modules/negate.js","webpack://emmet/./node_modules/underscore/modules/noop.js","webpack://emmet/./node_modules/underscore/modules/random.js","webpack://emmet/./node_modules/underscore/modules/range.js","webpack://emmet/./node_modules/underscore/modules/restArguments.js","webpack://emmet/./node_modules/underscore/modules/tap.js","webpack://emmet/./node_modules/underscore/modules/times.js","webpack://emmet/./node_modules/underscore/modules/uniqueId.js","webpack://emmet/./node_modules/vis-timeline/standalone/esm/vis-timeline-graph2d.mjs"],"sourcesContent":["/**\n * Display a nice easy to use multiselect list\n * @Version: 2.4.26\n * @Author: Patrick Springstubbe\n * @Contact: @JediNobleclem\n * @Website: springstubbe.us\n * @Source: https://github.com/nobleclem/jQuery-MultiSelect\n *\n * Usage:\n *     $('select[multiple]').multiselect();\n *     $('select[multiple]').multiselect({ texts: { placeholder: 'Select options' } });\n *     $('select[multiple]').multiselect('reload');\n *     $('select[multiple]').multiselect( 'loadOptions', [{\n *         name   : 'Option Name 1',\n *         value  : 'option-value-1',\n *         checked: false,\n *         attributes : {\n *             custom1: 'value1',\n *             custom2: 'value2'\n *         }\n *     },{\n *         name   : 'Option Name 2',\n *         value  : 'option-value-2',\n *         checked: false,\n *         attributes : {\n *             custom1: 'value1',\n *             custom2: 'value2'\n *         }\n *     }]);\n *\n **/\n(function($){\n    var defaults = {\n        columns: 1,     // how many columns should be use to show options\n        search : false, // include option search box\n\n        // search filter options\n        searchOptions : {\n            delay        : 250,                  // time (in ms) between keystrokes until search happens\n            showOptGroups: false,                // show option group titles if no options remaining\n            searchText   : true,                 // search within the text\n            searchValue  : false,                // search within the value\n            onSearch     : function( element ){} // fires on keyup before search on options happens\n        },\n\n        // plugin texts\n        texts: {\n            placeholder    : 'Select options', // text to use in dummy input\n            search         : 'Search',         // search input placeholder text\n            searchNoResult : 'No results',     // search results not found text\n            selectedOptions: ' selected',      // selected suffix text\n            selectAll      : 'Select all',     // select all text\n            unselectAll    : 'Unselect all',   // unselect all text\n            noneSelected   : 'None Selected'   // None selected text\n        },\n\n        // general options\n        selectAll              : false, // add select all option\n        selectGroup            : false, // select entire optgroup\n        minHeight              : 200,   // minimum height of option overlay\n        maxHeight              : null,  // maximum height of option overlay\n        maxWidth               : null,  // maximum width of option overlay (or selector)\n        maxPlaceholderWidth    : null,  // maximum width of placeholder button\n        maxPlaceholderOpts     : 10,    // maximum number of placeholder options to show until \"# selected\" shown instead\n        showAllPlaceholderOpts : false, // always show all the selected options\n        showCheckbox           : true,  // display the checkbox to the user\n        checkboxAutoFit        : false,  // auto calc checkbox padding\n        optionAttributes       : [],    // attributes to copy to the checkbox from the option element\n        replacePlaceholderText : true, // replace text of placeholder if button is too small\n\n        // Callbacks\n        onLoad        : function( element ){},           // fires at end of list initialization\n        onOptionClick : function( element, option ){},   // fires when an option is clicked\n        onControlOpen : function( element ){},           // fires when the options list is opened\n        onControlClose: function( element ){},           // fires when the options list is closed\n        onSelectAll   : function( element, selected ){}, // fires when (un)select all is clicked\n        onPlaceholder : function( element, placeholder, selectedOpts ){}, // fires when the placeholder txt is updated\n    };\n\n    var msCounter    = 1; // counter for each select list\n    var msOptCounter = 1; // counter for each option on page\n\n    // FOR LEGACY BROWSERS (talking to you IE8)\n    if( typeof Array.prototype.map !== 'function' ) {\n        Array.prototype.map = function( callback, thisArg ) {\n            if( typeof thisArg === 'undefined' ) {\n                thisArg = this;\n            }\n\n            return $.isArray( thisArg ) ? $.map( thisArg, callback ) : [];\n        };\n    }\n    if( typeof String.prototype.trim !== 'function' ) {\n        String.prototype.trim = function() {\n            return this.replace(/^\\s+|\\s+$/g, '');\n        };\n    }\n\n    function MultiSelect( element, options )\n    {\n        this.element           = element;\n        this.options           = $.extend( true, {}, defaults, options );\n        this.updateSelectAll   = true;\n        this.updatePlaceholder = true;\n        this.listNumber        = msCounter;\n\n        msCounter = msCounter + 1; // increment counter\n\n        /* Make sure its a multiselect list */\n        if( !$(this.element).prop('multiple') ) {\n            throw new Error( '[jQuery-MultiSelect] Select list must be a multiselect list in order to use this plugin' );\n        }\n\n        /* Options validation checks */\n        if( this.options.search ){\n            if( !this.options.searchOptions.searchText && !this.options.searchOptions.searchValue ){\n                throw new Error( '[jQuery-MultiSelect] Either searchText or searchValue should be true.' );\n            }\n        }\n\n        /** BACKWARDS COMPATIBILITY **/\n        if( 'placeholder' in this.options ) {\n            this.options.texts.placeholder = this.options.placeholder;\n            delete this.options.placeholder;\n        }\n        if( 'default' in this.options.searchOptions ) {\n            this.options.texts.search = this.options.searchOptions['default'];\n            delete this.options.searchOptions['default'];\n        }\n        /** END BACKWARDS COMPATIBILITY **/\n\n        // load this instance\n        this.load();\n    }\n\n    MultiSelect.prototype = {\n        /* LOAD CUSTOM MULTISELECT DOM/ACTIONS */\n        load: function() {\n            var instance = this;\n\n            // make sure this is a select list and not loaded\n            if( (instance.element.nodeName.toUpperCase() != 'SELECT') || $(instance.element).hasClass('jqmsLoaded') ) {\n                return true;\n            }\n\n            // sanity check so we don't double load on a select element\n            $(instance.element).addClass('jqmsLoaded ms-list-'+ instance.listNumber ).data( 'plugin_multiselect-instance', instance );\n\n            // add option container\n            $(instance.element).after('<div id=\"ms-list-'+ instance.listNumber +'\" class=\"ms-options-wrap\"><button type=\"button\"><span>None Selected</span></button><div class=\"ms-options\"><ul></ul></div></div>');\n\n            var placeholder = $(instance.element).siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> button:first-child');\n            var optionsWrap = $(instance.element).siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n            var optionsList = optionsWrap.find('> ul');\n\n            // don't show checkbox (add class for css to hide checkboxes)\n            if( !instance.options.showCheckbox ) {\n                optionsWrap.addClass('hide-checkbox');\n            }\n            else if( instance.options.checkboxAutoFit ) {\n                optionsWrap.addClass('checkbox-autofit');\n            }\n\n            // check if list is disabled\n            if( $(instance.element).prop( 'disabled' ) ) {\n                placeholder.prop( 'disabled', true );\n            }\n\n            // set placeholder maxWidth\n            if( instance.options.maxPlaceholderWidth ) {\n                placeholder.css( 'maxWidth', instance.options.maxPlaceholderWidth );\n            }\n\n            // override with user defined maxHeight\n            if( instance.options.maxHeight ) {\n                var maxHeight = instance.options.maxHeight;\n            }\n            else {\n                // cacl default maxHeight\n                var maxHeight = ($(window).height() - optionsWrap.offset().top + $(window).scrollTop() - 20);\n            }\n\n            // maxHeight cannot be less than options.minHeight\n            maxHeight = maxHeight < instance.options.minHeight ? instance.options.minHeight : maxHeight;\n\n            optionsWrap.css({\n                maxWidth : instance.options.maxWidth,\n                minHeight: instance.options.minHeight,\n                maxHeight: maxHeight,\n            });\n\n            // isolate options scroll\n            // @source: https://github.com/nobleclem/jQuery-IsolatedScroll\n            optionsWrap.on( 'touchmove mousewheel DOMMouseScroll', function ( e ) {\n                if( ($(this).outerHeight() < $(this)[0].scrollHeight) ) {\n                    var e0 = e.originalEvent,\n                        delta = e0.wheelDelta || -e0.detail;\n\n                    if( ($(this).outerHeight() + $(this)[0].scrollTop) > $(this)[0].scrollHeight ) {\n                        e.preventDefault();\n                        this.scrollTop += ( delta < 0 ? 1 : -1 );\n                    }\n                }\n            });\n\n            // hide options menus if click happens off of the list placeholder button\n            $(document).off('click.ms-hideopts').on('click.ms-hideopts', function( event ){\n                if( !$(event.target).closest('.ms-options-wrap').length ) {\n                    $('.ms-options-wrap.ms-active > .ms-options').each(function(){\n                        $(this).closest('.ms-options-wrap').removeClass('ms-active');\n\n                        var listID = $(this).closest('.ms-options-wrap').attr('id');\n\n                        var thisInst = $(this).parent().siblings('.'+ listID +'.jqmsLoaded').data('plugin_multiselect-instance');\n\n                        // USER CALLBACK\n                        if( typeof thisInst.options.onControlClose == 'function' ) {\n                            thisInst.options.onControlClose( thisInst.element );\n                        }\n                    });\n                }\n            // hide open option lists if escape key pressed\n            }).on('keydown', function( event ){\n                if( (event.keyCode || event.which) == 27 ) { // esc key\n                    $(this).trigger('click.ms-hideopts');\n                }\n            });\n\n            // handle pressing enter|space while tabbing through\n            placeholder.on('keydown', function( event ){\n                var code = (event.keyCode || event.which);\n                if( (code == 13) || (code == 32) ) { // enter OR space\n                    placeholder.trigger( 'mousedown' );\n                }\n            });\n\n            // disable button action\n            placeholder.on( 'mousedown', function( event ){\n                // ignore if its not a left click\n                if( event.which && (event.which != 1) ) {\n                    return true;\n                }\n\n                // hide other menus before showing this one\n                $('.ms-options-wrap.ms-active').each(function(){\n                    if( $(this).siblings( '.'+ $(this).attr('id') +'.jqmsLoaded')[0] != optionsWrap.parent().siblings('.ms-list-'+ instance.listNumber +'.jqmsLoaded')[0] ) {\n                        $(this).removeClass('ms-active');\n\n                        var thisInst = $(this).siblings( '.'+ $(this).attr('id') +'.jqmsLoaded').data('plugin_multiselect-instance');\n\n                        // USER CALLBACK\n                        if( typeof thisInst.options.onControlClose == 'function' ) {\n                            thisInst.options.onControlClose( thisInst.element );\n                        }\n                    }\n                });\n\n                // show/hide options\n                optionsWrap.closest('.ms-options-wrap').toggleClass('ms-active');\n\n                // recalculate height\n                if( optionsWrap.closest('.ms-options-wrap').hasClass('ms-active') ) {\n                    // USER CALLBACK\n                    if( typeof instance.options.onControlOpen == 'function' ) {\n                        instance.options.onControlOpen( instance.element );\n                    }\n\n                    optionsWrap.css( 'maxHeight', '' );\n\n                    // override with user defined maxHeight\n                    if( instance.options.maxHeight ) {\n                        var maxHeight = instance.options.maxHeight;\n                    }\n                    else {\n                        // cacl default maxHeight\n                        var maxHeight = ($(window).height() - optionsWrap.offset().top + $(window).scrollTop() - 20);\n                    }\n\n                    if( maxHeight ) {\n                        // maxHeight cannot be less than options.minHeight\n                        maxHeight = maxHeight < instance.options.minHeight ? instance.options.minHeight : maxHeight;\n\n                        optionsWrap.css( 'maxHeight', maxHeight );\n                    }\n                }\n                else if( typeof instance.options.onControlClose == 'function' ) {\n                    instance.options.onControlClose( instance.element );\n                }\n            }).click(function( event ){ event.preventDefault(); });\n\n            // add placeholder copy\n            if( instance.options.texts.placeholder ) {\n                placeholder.find('span').text( instance.options.texts.placeholder );\n            }\n\n            // add search box\n            if( instance.options.search ) {\n                optionsList.before('<div class=\"ms-search\"><input type=\"text\" value=\"\" placeholder=\"'+ instance.options.texts.search +'\" /></div>');\n                optionsList.after('<div class=\"no-result-message\">' + instance.options.texts.searchNoResult + '</div>');\n\n                var search = optionsWrap.find('.ms-search input');\n\n                search.on('keyup', function(){\n                    // ignore keystrokes that don't make a difference\n                    if( $(this).data('lastsearch') == $(this).val() ) {\n                        return true;\n                    }\n\n                    // pause timeout\n                    if( $(this).data('searchTimeout') ) {\n                        clearTimeout( $(this).data('searchTimeout') );\n                    }\n\n                    var thisSearchElem = $(this);\n\n                    $(this).data('searchTimeout', setTimeout(function(){\n                        thisSearchElem.data('lastsearch', thisSearchElem.val() );\n\n                        // USER CALLBACK\n                        if( typeof instance.options.searchOptions.onSearch == 'function' ) {\n                            instance.options.searchOptions.onSearch( instance.element );\n                        }\n\n                        // search non optgroup li's\n                        var searchString = search.val().toLowerCase().trim();\n                        if( searchString ) {\n                            optionsList.find('li[data-search-term*=\"'+ searchString +'\"]:not(.optgroup)').removeClass('ms-hidden');\n                            optionsList.find('li:not([data-search-term*=\"'+ searchString +'\"], .optgroup)').addClass('ms-hidden');\n                        }\n                        else {\n                            optionsList.find('.ms-hidden').removeClass('ms-hidden');\n                        }\n\n                        // show/hide optgroups based on if there are items visible within\n                        if( !instance.options.searchOptions.showOptGroups ) {\n                            optionsList.find('.optgroup').each(function(){\n                                if( $(this).find('li:not(.ms-hidden)').length ) {\n                                    $(this).show();\n                                }\n                                else {\n                                    $(this).hide();\n                                }\n                            });\n                        }\n\n                        instance._updateSelectAllText();\n                    }, instance.options.searchOptions.delay ));\n                });\n            }\n\n            // add global select all options\n            if( instance.options.selectAll ) {\n                optionsList.before('<a href=\"#\" class=\"ms-selectall global\">' + instance.options.texts.selectAll + '</a>');\n            }\n\n            // handle select all option\n            optionsWrap.on('click', '.ms-selectall', function( event ){\n                event.preventDefault();\n\n                instance.updateSelectAll   = false;\n                instance.updatePlaceholder = false;\n\n                var select = optionsWrap.parent().siblings('.ms-list-'+ instance.listNumber +'.jqmsLoaded');\n\n                if( $(this).hasClass('global') ) {\n                    // check if any options are not selected if so then select them\n                    if( optionsList.find('li:not(.optgroup, .selected, .ms-hidden) input[type=\"checkbox\"]:not(:disabled)').length ) {\n                        // get unselected vals, mark as selected, return val list\n                        optionsList.find('li:not(.optgroup, .selected, .ms-hidden) input[type=\"checkbox\"]:not(:disabled)').closest('li').addClass('selected');\n                        optionsList.find('li.selected input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', true );\n                    }\n                    // deselect everything\n                    else {\n                        optionsList.find('li:not(.optgroup, .ms-hidden).selected input[type=\"checkbox\"]:not(:disabled)').closest('li').removeClass('selected');\n                        optionsList.find('li:not(.optgroup, .ms-hidden, .selected) input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', false );\n                    }\n                }\n                else if( $(this).closest('li').hasClass('optgroup') ) {\n                    var optgroup = $(this).closest('li.optgroup');\n\n                    // check if any selected if so then select them\n                    if( optgroup.find('li:not(.selected, .ms-hidden) input[type=\"checkbox\"]:not(:disabled)').length ) {\n                        optgroup.find('li:not(.selected, .ms-hidden) input[type=\"checkbox\"]:not(:disabled)').closest('li').addClass('selected');\n                        optgroup.find('li.selected input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', true );\n                    }\n                    // deselect everything\n                    else {\n                        optgroup.find('li:not(.ms-hidden).selected input[type=\"checkbox\"]:not(:disabled)').closest('li').removeClass('selected');\n                        optgroup.find('li:not(.ms-hidden, .selected) input[type=\"checkbox\"]:not(:disabled)').prop( 'checked', false );\n                    }\n                }\n\n                var vals = [];\n                optionsList.find('li.selected input[type=\"checkbox\"]').each(function(){\n                    vals.push( $(this).val() );\n                });\n                select.val( vals ).trigger('change');\n\n                instance.updateSelectAll   = true;\n                instance.updatePlaceholder = true;\n\n                // USER CALLBACK\n                if( typeof instance.options.onSelectAll == 'function' ) {\n                    instance.options.onSelectAll( instance.element, vals.length );\n                }\n\n                instance._updateSelectAllText();\n                instance._updatePlaceholderText();\n            });\n\n            // add options to wrapper\n            var options = [];\n            $(instance.element).children().each(function(){\n                if( this.nodeName.toUpperCase() == 'OPTGROUP' ) {\n                    var groupOptions = [];\n\n                    $(this).children('option').each(function(){\n                        var thisOptionAtts = {};\n                        for( var i = 0; i < instance.options.optionAttributes.length; i++ ) {\n                            var thisOptAttr = instance.options.optionAttributes[ i ];\n\n                            if( $(this).attr( thisOptAttr ) !== undefined ) {\n                                thisOptionAtts[ thisOptAttr ] = $(this).attr( thisOptAttr );\n                            }\n                        }\n\n                        groupOptions.push({\n                            name   : $(this).text(),\n                            value  : $(this).val(),\n                            checked: $(this).prop( 'selected' ),\n                            attributes: thisOptionAtts\n                        });\n                    });\n\n                    options.push({\n                        label  : $(this).attr('label'),\n                        options: groupOptions\n                    });\n                }\n                else if( this.nodeName.toUpperCase() == 'OPTION' ) {\n                    var thisOptionAtts = {};\n                    for( var i = 0; i < instance.options.optionAttributes.length; i++ ) {\n                        var thisOptAttr = instance.options.optionAttributes[ i ];\n\n                        if( $(this).attr( thisOptAttr ) !== undefined ) {\n                            thisOptionAtts[ thisOptAttr ] = $(this).attr( thisOptAttr );\n                        }\n                    }\n\n                    options.push({\n                        name      : $(this).text(),\n                        value     : $(this).val(),\n                        checked   : $(this).prop( 'selected' ),\n                        attributes: thisOptionAtts\n                    });\n                }\n                else {\n                    // bad option\n                    return true;\n                }\n            });\n            instance.loadOptions( options, true, false );\n\n            // BIND SELECT ACTION\n            optionsWrap.on( 'click', 'input[type=\"checkbox\"]', function(){\n                $(this).closest( 'li' ).toggleClass( 'selected' );\n\n                var select = optionsWrap.parent().siblings('.ms-list-'+ instance.listNumber +'.jqmsLoaded');\n\n                // toggle clicked option\n                select.find('option[value=\"'+ instance._escapeSelector( $(this).val() ) +'\"]').prop(\n                    'selected', $(this).is(':checked')\n                ).closest('select').trigger('change');\n\n                // USER CALLBACK\n                if( typeof instance.options.onOptionClick == 'function' ) {\n                    instance.options.onOptionClick(instance.element, this);\n                }\n\n                instance._updateSelectAllText();\n                instance._updatePlaceholderText();\n            });\n\n            // BIND FOCUS EVENT\n            optionsWrap.on('focusin', 'input[type=\"checkbox\"]', function(){\n                $(this).closest('label').addClass('focused');\n            }).on('focusout', 'input[type=\"checkbox\"]', function(){\n                $(this).closest('label').removeClass('focused');\n            });\n\n            // USER CALLBACK\n            if( typeof instance.options.onLoad === 'function' ) {\n                instance.options.onLoad( instance.element );\n            }\n\n            // hide native select list\n            $(instance.element).hide();\n        },\n\n        /* LOAD SELECT OPTIONS */\n        loadOptions: function( options, overwrite, updateSelect ) {\n            // console.log( options );\n            overwrite    = (typeof overwrite == 'boolean') ? overwrite : true;\n            updateSelect = (typeof updateSelect == 'boolean') ? updateSelect : true;\n\n            var instance    = this;\n            var select      = $(instance.element);\n            var optionsList = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options > ul');\n            var optionsWrap = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n\n            if( overwrite ) {\n                optionsList.find('> li').remove();\n\n                if( updateSelect ) {\n                    select.find('> *').remove();\n                }\n            }\n\n            var containers = [];\n            for( var key in options ) {\n                // Prevent prototype methods injected into options from being iterated over.\n                if( !options.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                var thisOption      = options[ key ];\n                var container       = $('<li/>');\n                var appendContainer = true;\n\n                // OPTION\n                if( thisOption.hasOwnProperty('value') ) {\n                    if( instance.options.showCheckbox && instance.options.checkboxAutoFit ) {\n                        container.addClass('ms-reflow');\n                    }\n\n                    // add option to ms dropdown\n                    instance._addOption( container, thisOption );\n\n                    if( updateSelect ) {\n                        var selOption = $('<option/>', {\n                            value: thisOption.value,\n                            text : thisOption.name\n                        });\n\n                        // add custom user attributes\n                        if( thisOption.hasOwnProperty('attributes') && Object.keys( thisOption.attributes ).length ) {\n                            selOption.attr( thisOption.attributes );\n                        }\n\n                        // mark option as selected\n                        if( thisOption.checked ) {\n                            selOption.prop( 'selected', true );\n                        }\n\n                        select.append( selOption );\n                    }\n                }\n                // OPTGROUP\n                else if( thisOption.hasOwnProperty('options') ) {\n                    var optGroup = $('<optgroup/>', {\n                        label: thisOption.label\n                    });\n\n                    optionsList.find('> li.optgroup > span.label').each(function(){\n                        if( $(this).text() == thisOption.label ) {\n                            container       = $(this).closest('.optgroup');\n                            appendContainer = false;\n                        }\n                    });\n\n                    // prepare to append optgroup to select element\n                    if( updateSelect ) {\n                        if( select.find('optgroup[label=\"'+ thisOption.label +'\"]').length ) {\n                            optGroup = select.find('optgroup[label=\"'+ thisOption.label +'\"]');\n                        }\n                        else {\n                            select.append( optGroup );\n                        }\n                    }\n\n                    // setup container\n                    if( appendContainer ) {\n                        container.addClass('optgroup');\n                        container.append('<span class=\"label\">'+ thisOption.label +'</span>');\n                        container.find('> .label').css({\n                            clear: 'both'\n                        });\n\n                        // add select all link\n                        if( instance.options.selectGroup ) {\n                            container.append('<a href=\"#\" class=\"ms-selectall\">' + instance.options.texts.selectAll + '</a>');\n                        }\n\n                        container.append('<ul/>');\n                    }\n\n                    for( var gKey in thisOption.options ) {\n                        // Prevent prototype methods injected into options from\n                        // being iterated over.\n                        if( !thisOption.options.hasOwnProperty( gKey ) ) {\n                            continue;\n                        }\n\n                        var thisGOption = thisOption.options[ gKey ];\n                        var gContainer  = $('<li/>');\n                        if( instance.options.showCheckbox && instance.options.checkboxAutoFit ) {\n                            gContainer.addClass('ms-reflow');\n                        }\n\n                        // no clue what this is we hit (skip)\n                        if( !thisGOption.hasOwnProperty('value') ) {\n                            continue;\n                        }\n\n                        instance._addOption( gContainer, thisGOption );\n\n                        container.find('> ul').append( gContainer );\n\n                        // add option to optgroup in select element\n                        if( updateSelect ) {\n                            var selOption = $('<option/>', {\n                                value: thisGOption.value,\n                                text : thisGOption.name\n                            });\n\n                            // add custom user attributes\n                            if( thisGOption.hasOwnProperty('attributes') && Object.keys( thisGOption.attributes ).length ) {\n                                selOption.attr( thisGOption.attributes );\n                            }\n\n                            // mark option as selected\n                            if( thisGOption.checked ) {\n                                selOption.prop( 'selected', true );\n                            }\n\n                            optGroup.append( selOption );\n                        }\n                    }\n                }\n                else {\n                    // no clue what this is we hit (skip)\n                    continue;\n                }\n\n                if( appendContainer ) {\n                    containers.push( container );\n                }\n            }\n            optionsList.append( containers );\n\n            // pad out label for room for the checkbox\n            if( instance.options.checkboxAutoFit && instance.options.showCheckbox && !optionsWrap.hasClass('hide-checkbox') ) {\n                var chkbx = optionsList.find('.ms-reflow:eq(0) input[type=\"checkbox\"]');\n                if( chkbx.length ) {\n                    var checkboxWidth = chkbx.outerWidth();\n                        checkboxWidth = checkboxWidth ? checkboxWidth : 15;\n\n                    optionsList.find('.ms-reflow label').css(\n                        'padding-left',\n                        (parseInt( chkbx.closest('label').css('padding-left') ) * 2) + checkboxWidth\n                    );\n\n                    optionsList.find('.ms-reflow').removeClass('ms-reflow');\n                }\n            }\n\n            // update placeholder text\n            instance._updatePlaceholderText();\n\n            // RESET COLUMN STYLES\n            optionsWrap.find('ul').css({\n                'column-count'        : '',\n                'column-gap'          : '',\n                '-webkit-column-count': '',\n                '-webkit-column-gap'  : '',\n                '-moz-column-count'   : '',\n                '-moz-column-gap'     : ''\n            });\n\n            // COLUMNIZE\n            if( select.find('optgroup').length ) {\n                // float non grouped options\n                optionsList.find('> li:not(.optgroup)').css({\n                    'float': 'left',\n                    width: (100 / instance.options.columns) +'%'\n                });\n\n                // add CSS3 column styles\n                optionsList.find('li.optgroup').css({\n                    clear: 'both'\n                }).find('> ul').css({\n                    'column-count'        : instance.options.columns,\n                    'column-gap'          : 0,\n                    '-webkit-column-count': instance.options.columns,\n                    '-webkit-column-gap'  : 0,\n                    '-moz-column-count'   : instance.options.columns,\n                    '-moz-column-gap'     : 0\n                });\n\n                // for crappy IE versions float grouped options\n                if( this._ieVersion() && (this._ieVersion() < 10) ) {\n                    optionsList.find('li.optgroup > ul > li').css({\n                        'float': 'left',\n                        width: (100 / instance.options.columns) +'%'\n                    });\n                }\n            }\n            else {\n                // add CSS3 column styles\n                optionsList.css({\n                    'column-count'        : instance.options.columns,\n                    'column-gap'          : 0,\n                    '-webkit-column-count': instance.options.columns,\n                    '-webkit-column-gap'  : 0,\n                    '-moz-column-count'   : instance.options.columns,\n                    '-moz-column-gap'     : 0\n                });\n\n                // for crappy IE versions float grouped options\n                if( this._ieVersion() && (this._ieVersion() < 10) ) {\n                    optionsList.find('> li').css({\n                        'float': 'left',\n                        width: (100 / instance.options.columns) +'%'\n                    });\n                }\n            }\n\n            // update un/select all logic\n            instance._updateSelectAllText();\n        },\n\n        /* UPDATE MULTISELECT CONFIG OPTIONS */\n        settings: function( options ) {\n            this.options = $.extend( true, {}, this.options, options );\n            this.reload();\n        },\n\n        /* RESET THE DOM */\n        unload: function() {\n            $(this.element).siblings('#ms-list-'+ this.listNumber +'.ms-options-wrap').remove();\n            $(this.element).show(function(){\n                $(this).css('display','').removeClass('jqmsLoaded');\n            });\n        },\n\n        /* RELOAD JQ MULTISELECT LIST */\n        reload: function() {\n            // remove existing options\n            $(this.element).siblings('#ms-list-'+ this.listNumber +'.ms-options-wrap').remove();\n            $(this.element).removeClass('jqmsLoaded');\n\n            // load element\n            this.load();\n        },\n\n        // RESET BACK TO DEFAULT VALUES & RELOAD\n        reset: function() {\n            var defaultVals = [];\n            $(this.element).find('option').each(function(){\n                if( $(this).prop('defaultSelected') ) {\n                    defaultVals.push( $(this).val() );\n                }\n            });\n\n            $(this.element).val( defaultVals );\n\n            this.reload();\n        },\n\n        disable: function( status ) {\n            status = (typeof status === 'boolean') ? status : true;\n            $(this.element).prop( 'disabled', status );\n            $(this.element).siblings('#ms-list-'+ this.listNumber +'.ms-options-wrap').find('button:first-child')\n                .prop( 'disabled', status );\n        },\n\n        /** PRIVATE FUNCTIONS **/\n        // update the un/select all texts based on selected options and visibility\n        _updateSelectAllText: function(){\n            if( !this.updateSelectAll ) {\n                return;\n            }\n\n            var instance = this;\n\n            // select all not used at all so just do nothing\n            if( !instance.options.selectAll && !instance.options.selectGroup ) {\n                return;\n            }\n\n            var optionsWrap = $(instance.element).siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n\n            // update un/select all text\n            optionsWrap.find('.ms-selectall').each(function(){\n                var unselected = $(this).parent().find('li:not(.optgroup,.selected,.ms-hidden)');\n\n                $(this).text(\n                    unselected.length ? instance.options.texts.selectAll : instance.options.texts.unselectAll\n                );\n            });\n\n            var shownOptionsCount = optionsWrap.find('> ul li:not(.optgroup,.ms-hidden)').length;\n\n            // show/hide no-results message\n            optionsWrap.find('.no-result-message').toggle( shownOptionsCount ? false : true );\n\n            // show/hide (un)select all element as necessary\n            optionsWrap.find('.ms-selectall.global').toggle( shownOptionsCount ? true : false );\n        },\n\n        // update selected placeholder text\n        _updatePlaceholderText: function(){\n            if( !this.updatePlaceholder ) {\n                return;\n            }\n\n            var instance       = this;\n            var select         = $(instance.element);\n            var selectVals     = select.val() ? select.val() : [];\n            var placeholder    = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> button:first-child');\n            var placeholderTxt = placeholder.find('span');\n            var optionsWrap    = select.siblings('#ms-list-'+ instance.listNumber +'.ms-options-wrap').find('> .ms-options');\n\n            // if there are disabled options get those values as well\n            if( select.find('option:selected:disabled').length ) {\n                selectVals = [];\n                select.find('option:selected').each(function(){\n                    selectVals.push( $(this).val() );\n                });\n            }\n\n            // get selected options\n            var selOpts = [];\n            for( var key in selectVals ) {\n                // Prevent prototype methods injected into options from being iterated over.\n                if( !selectVals.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                selOpts.push(\n                    select.find('option[value=\"'+ instance._escapeSelector( selectVals[ key ] ) +'\"]').text().trim()\n                );\n\n                if( selOpts.length >= instance.options.maxPlaceholderOpts ) {\n                    break;\n                }\n            }\n\n            // UPDATE PLACEHOLDER TEXT WITH OPTIONS SELECTED\n            placeholderTxt.text( selOpts.join( ', ' ) );\n\n            if( selOpts.length ) {\n                optionsWrap.closest('.ms-options-wrap').addClass('ms-has-selections');\n\n                // USER CALLBACK\n                if( typeof instance.options.onPlaceholder == 'function' ) {\n                    instance.options.onPlaceholder( instance.element, placeholderTxt, selOpts );\n                }\n            }\n            else {\n                optionsWrap.closest('.ms-options-wrap').removeClass('ms-has-selections');\n            }\n\n            // replace placeholder text\n            if( !selOpts.length ) {\n                placeholderTxt.text( instance.options.texts.placeholder );\n            }\n            // if copy is larger than button width use \"# selected\"\n            else if( !instance.options.showAllPlaceholderOpts && instance.options.replacePlaceholderText && ((placeholderTxt.width() > placeholder.width()) || (selOpts.length != selectVals.length)) ) {\n                placeholderTxt.text( selectVals.length + instance.options.texts.selectedOptions );\n            }\n        },\n\n        // Add option to the custom dom list\n        _addOption: function( container, option ) {\n            var instance = this;\n            var optionNameText = $('<div/>').html( option.name ).text();\n\n            var thisOption = $('<label/>', {\n                for : 'ms-opt-'+ msOptCounter\n            }).text( optionNameText );\n\n            var thisCheckbox = $('<input>', {\n                type : 'checkbox',\n                title: optionNameText,\n                id   : 'ms-opt-'+ msOptCounter,\n                value: option.value\n            });\n\n            // add user defined attributes\n            if( option.hasOwnProperty('attributes') && Object.keys( option.attributes ).length ) {\n                thisCheckbox.attr( option.attributes );\n            }\n\n            if( option.checked ) {\n                container.addClass('default selected');\n                thisCheckbox.prop( 'checked', true );\n            }\n\n            thisOption.prepend( thisCheckbox );\n\n            var searchTerm = '';\n            if( instance.options.searchOptions.searchText ) {\n                searchTerm += ' ' + optionNameText.toLowerCase();\n            }\n            if( instance.options.searchOptions.searchValue ) {\n                searchTerm += ' ' + option.value.toLowerCase();\n            }\n\n            container.attr( 'data-search-term', searchTerm.trim() ).prepend( thisOption );\n\n            msOptCounter = msOptCounter + 1;\n        },\n\n        // check ie version\n        _ieVersion: function() {\n            var myNav = navigator.userAgent.toLowerCase();\n            return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;\n        },\n\n        // escape selector\n        _escapeSelector: function( string ) {\n            if( typeof $.escapeSelector == 'function' ) {\n                return $.escapeSelector( string );\n            }\n            else {\n                return string.replace(/[!\"#$%&'()*+,.\\/:;<=>?@[\\\\\\]^`{|}~]/g, \"\\\\$&\");\n            }\n        }\n    };\n\n    // ENABLE JQUERY PLUGIN FUNCTION\n    $.fn.multiselect = function( options ){\n        if( !this.length ) {\n            return;\n        }\n\n        var args = arguments;\n        var ret;\n\n        // menuize each list\n        if( (options === undefined) || (typeof options === 'object') ) {\n            return this.each(function(){\n                if( !$.data( this, 'plugin_multiselect' ) ) {\n                    $.data( this, 'plugin_multiselect', new MultiSelect( this, options ) );\n                }\n            });\n        } else if( (typeof options === 'string') && (options[0] !== '_') && (options !== 'init') ) {\n            this.each(function(){\n                var instance = $.data( this, 'plugin_multiselect' );\n\n                if( instance instanceof MultiSelect && typeof instance[ options ] === 'function' ) {\n                    ret = instance[ options ].apply( instance, Array.prototype.slice.call( args, 1 ) );\n                }\n\n                // special destruct handler\n                if( options === 'unload' ) {\n                    $.data( this, 'plugin_multiselect', null );\n                }\n            });\n\n            return ret;\n        }\n    };\n}(jQuery));\n","// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.\n// INSTEAD, RUN: npm run generate-char-utils\n/**\n * Determines if the given character `c` matches the regular expression /[\\x00-\\x1F\\x7F]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isControlChar(c) {\n    return ((c >= 0 && c <= 31) || c == 127);\n}\n/**\n * Determines if the given character `c` matches the regular expression /[A-Za-z]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isAsciiLetterChar(c) {\n    return ((c >= 65 && c <= 90) || (c >= 97 && c <= 122));\n}\n/**\n * Determines if the given character `c` matches the regular expression /\\d/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isDigitChar(c) {\n    return (c >= 48 && c <= 57);\n}\n/**\n * Determines if the given character `c` matches the regular expression /['\"]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isQuoteChar(c) {\n    return (c == 34 || c == 39);\n}\n/**\n * Determines if the given character `c` matches the regular expression /\\s/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isWhitespaceChar(c) {\n    return (c < 8232 ? (c < 160 ? ((c >= 9 && c <= 13) || c == 32) : (c < 5760 ? c == 160 : (c == 5760 || (c >= 8192 && c <= 8202)))) : (c < 8287 ? ((c >= 8232 && c <= 8233) || c == 8239) : (c < 12288 ? c == 8287 : (c == 12288 || c == 65279))));\n}\n/**\n * Determines if the given character `c` matches the regular expression /[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u2700-\\u27bf\\udde6-\\uddff\\ud800-\\udbff\\udc00-\\udfff\\ufe0e\\ufe0f\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ud83c\\udffb-\\udfff\\u200d\\u3299\\u3297\\u303d\\u3030\\u24c2\\ud83c\\udd70-\\udd71\\udd7e-\\udd7f\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01-\\ude02\\ude1a\\ude2f\\ude32-\\ude3a\\ude50-\\ude51\\u203c\\u2049\\u25aa-\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u00a9\\u00ae\\u2122\\u2139\\udc04\\u2600-\\u26FF\\u2b05\\u2b06\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u231a\\u231b\\u2328\\u23cf\\u23e9-\\u23f3\\u23f8-\\u23fa\\udccf\\u2935\\u2934\\u2190-\\u21ff\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isAlphaNumericOrMarkChar(c) {\n    return (c < 4800 ? (c < 2949 ? (c < 2451 ? (c < 1425 ? (c < 768 ? (c < 192 ? (c < 169 ? (c < 65 ? (c >= 48 && c <= 57) : ((c >= 65 && c <= 90) || (c >= 97 && c <= 122))) : (c < 181 ? ((c >= 169 && c <= 170) || c == 174) : (c == 181 || c == 186))) : (c < 710 ? (c < 216 ? (c >= 192 && c <= 214) : ((c >= 216 && c <= 246) || (c >= 248 && c <= 705))) : (c < 748 ? ((c >= 710 && c <= 721) || (c >= 736 && c <= 740)) : (c == 748 || c == 750)))) : (c < 910 ? (c < 895 ? (c < 886 ? (c >= 768 && c <= 884) : ((c >= 886 && c <= 887) || (c >= 890 && c <= 893))) : (c < 904 ? (c == 895 || c == 902) : ((c >= 904 && c <= 906) || c == 908))) : (c < 1155 ? (c < 931 ? (c >= 910 && c <= 929) : ((c >= 931 && c <= 1013) || (c >= 1015 && c <= 1153))) : (c < 1369 ? ((c >= 1155 && c <= 1327) || (c >= 1329 && c <= 1366)) : (c == 1369 || (c >= 1377 && c <= 1415)))))) : (c < 1808 ? (c < 1552 ? (c < 1476 ? (c < 1471 ? (c >= 1425 && c <= 1469) : (c == 1471 || (c >= 1473 && c <= 1474))) : (c < 1488 ? ((c >= 1476 && c <= 1477) || c == 1479) : ((c >= 1488 && c <= 1514) || (c >= 1520 && c <= 1522)))) : (c < 1749 ? (c < 1568 ? (c >= 1552 && c <= 1562) : ((c >= 1568 && c <= 1641) || (c >= 1646 && c <= 1747))) : (c < 1770 ? ((c >= 1749 && c <= 1756) || (c >= 1759 && c <= 1768)) : ((c >= 1770 && c <= 1788) || c == 1791)))) : (c < 2230 ? (c < 2042 ? (c < 1869 ? (c >= 1808 && c <= 1866) : ((c >= 1869 && c <= 1969) || (c >= 1984 && c <= 2037))) : (c < 2112 ? (c == 2042 || (c >= 2048 && c <= 2093)) : ((c >= 2112 && c <= 2139) || (c >= 2208 && c <= 2228)))) : (c < 2406 ? (c < 2260 ? (c >= 2230 && c <= 2237) : ((c >= 2260 && c <= 2273) || (c >= 2275 && c <= 2403))) : (c < 2437 ? ((c >= 2406 && c <= 2415) || (c >= 2417 && c <= 2435)) : ((c >= 2437 && c <= 2444) || (c >= 2447 && c <= 2448))))))) : (c < 2693 ? (c < 2579 ? (c < 2519 ? (c < 2486 ? (c < 2474 ? (c >= 2451 && c <= 2472) : ((c >= 2474 && c <= 2480) || c == 2482)) : (c < 2503 ? ((c >= 2486 && c <= 2489) || (c >= 2492 && c <= 2500)) : ((c >= 2503 && c <= 2504) || (c >= 2507 && c <= 2510)))) : (c < 2534 ? (c < 2524 ? c == 2519 : ((c >= 2524 && c <= 2525) || (c >= 2527 && c <= 2531))) : (c < 2565 ? ((c >= 2534 && c <= 2545) || (c >= 2561 && c <= 2563)) : ((c >= 2565 && c <= 2570) || (c >= 2575 && c <= 2576))))) : (c < 2631 ? (c < 2613 ? (c < 2602 ? (c >= 2579 && c <= 2600) : ((c >= 2602 && c <= 2608) || (c >= 2610 && c <= 2611))) : (c < 2620 ? ((c >= 2613 && c <= 2614) || (c >= 2616 && c <= 2617)) : (c == 2620 || (c >= 2622 && c <= 2626)))) : (c < 2649 ? (c < 2635 ? (c >= 2631 && c <= 2632) : ((c >= 2635 && c <= 2637) || c == 2641)) : (c < 2662 ? ((c >= 2649 && c <= 2652) || c == 2654) : ((c >= 2662 && c <= 2677) || (c >= 2689 && c <= 2691)))))) : (c < 2821 ? (c < 2759 ? (c < 2730 ? (c < 2703 ? (c >= 2693 && c <= 2701) : ((c >= 2703 && c <= 2705) || (c >= 2707 && c <= 2728))) : (c < 2741 ? ((c >= 2730 && c <= 2736) || (c >= 2738 && c <= 2739)) : ((c >= 2741 && c <= 2745) || (c >= 2748 && c <= 2757)))) : (c < 2784 ? (c < 2763 ? (c >= 2759 && c <= 2761) : ((c >= 2763 && c <= 2765) || c == 2768)) : (c < 2809 ? ((c >= 2784 && c <= 2787) || (c >= 2790 && c <= 2799)) : (c == 2809 || (c >= 2817 && c <= 2819))))) : (c < 2887 ? (c < 2858 ? (c < 2831 ? (c >= 2821 && c <= 2828) : ((c >= 2831 && c <= 2832) || (c >= 2835 && c <= 2856))) : (c < 2869 ? ((c >= 2858 && c <= 2864) || (c >= 2866 && c <= 2867)) : ((c >= 2869 && c <= 2873) || (c >= 2876 && c <= 2884)))) : (c < 2911 ? (c < 2902 ? ((c >= 2887 && c <= 2888) || (c >= 2891 && c <= 2893)) : ((c >= 2902 && c <= 2903) || (c >= 2908 && c <= 2909))) : (c < 2929 ? ((c >= 2911 && c <= 2915) || (c >= 2918 && c <= 2927)) : (c == 2929 || (c >= 2946 && c <= 2947)))))))) : (c < 3517 ? (c < 3205 ? (c < 3046 ? (c < 2984 ? (c < 2969 ? (c < 2958 ? (c >= 2949 && c <= 2954) : ((c >= 2958 && c <= 2960) || (c >= 2962 && c <= 2965))) : (c < 2974 ? ((c >= 2969 && c <= 2970) || c == 2972) : ((c >= 2974 && c <= 2975) || (c >= 2979 && c <= 2980)))) : (c < 3014 ? (c < 2990 ? (c >= 2984 && c <= 2986) : ((c >= 2990 && c <= 3001) || (c >= 3006 && c <= 3010))) : (c < 3024 ? ((c >= 3014 && c <= 3016) || (c >= 3018 && c <= 3021)) : (c == 3024 || c == 3031)))) : (c < 3142 ? (c < 3086 ? (c < 3072 ? (c >= 3046 && c <= 3055) : ((c >= 3072 && c <= 3075) || (c >= 3077 && c <= 3084))) : (c < 3114 ? ((c >= 3086 && c <= 3088) || (c >= 3090 && c <= 3112)) : ((c >= 3114 && c <= 3129) || (c >= 3133 && c <= 3140)))) : (c < 3160 ? (c < 3146 ? (c >= 3142 && c <= 3144) : ((c >= 3146 && c <= 3149) || (c >= 3157 && c <= 3158))) : (c < 3174 ? ((c >= 3160 && c <= 3162) || (c >= 3168 && c <= 3171)) : ((c >= 3174 && c <= 3183) || (c >= 3200 && c <= 3203)))))) : (c < 3333 ? (c < 3274 ? (c < 3242 ? (c < 3214 ? (c >= 3205 && c <= 3212) : ((c >= 3214 && c <= 3216) || (c >= 3218 && c <= 3240))) : (c < 3260 ? ((c >= 3242 && c <= 3251) || (c >= 3253 && c <= 3257)) : ((c >= 3260 && c <= 3268) || (c >= 3270 && c <= 3272)))) : (c < 3296 ? (c < 3285 ? (c >= 3274 && c <= 3277) : ((c >= 3285 && c <= 3286) || c == 3294)) : (c < 3313 ? ((c >= 3296 && c <= 3299) || (c >= 3302 && c <= 3311)) : ((c >= 3313 && c <= 3314) || (c >= 3329 && c <= 3331))))) : (c < 3423 ? (c < 3389 ? (c < 3342 ? (c >= 3333 && c <= 3340) : ((c >= 3342 && c <= 3344) || (c >= 3346 && c <= 3386))) : (c < 3402 ? ((c >= 3389 && c <= 3396) || (c >= 3398 && c <= 3400)) : ((c >= 3402 && c <= 3406) || (c >= 3412 && c <= 3415)))) : (c < 3458 ? (c < 3430 ? (c >= 3423 && c <= 3427) : ((c >= 3430 && c <= 3439) || (c >= 3450 && c <= 3455))) : (c < 3482 ? ((c >= 3458 && c <= 3459) || (c >= 3461 && c <= 3478)) : ((c >= 3482 && c <= 3505) || (c >= 3507 && c <= 3515))))))) : (c < 3804 ? (c < 3722 ? (c < 3570 ? (c < 3535 ? (c < 3520 ? c == 3517 : ((c >= 3520 && c <= 3526) || c == 3530)) : (c < 3544 ? ((c >= 3535 && c <= 3540) || c == 3542) : ((c >= 3544 && c <= 3551) || (c >= 3558 && c <= 3567)))) : (c < 3664 ? (c < 3585 ? (c >= 3570 && c <= 3571) : ((c >= 3585 && c <= 3642) || (c >= 3648 && c <= 3662))) : (c < 3716 ? ((c >= 3664 && c <= 3673) || (c >= 3713 && c <= 3714)) : (c == 3716 || (c >= 3719 && c <= 3720))))) : (c < 3754 ? (c < 3737 ? (c < 3725 ? c == 3722 : (c == 3725 || (c >= 3732 && c <= 3735))) : (c < 3749 ? ((c >= 3737 && c <= 3743) || (c >= 3745 && c <= 3747)) : (c == 3749 || c == 3751))) : (c < 3776 ? (c < 3757 ? (c >= 3754 && c <= 3755) : ((c >= 3757 && c <= 3769) || (c >= 3771 && c <= 3773))) : (c < 3784 ? ((c >= 3776 && c <= 3780) || c == 3782) : ((c >= 3784 && c <= 3789) || (c >= 3792 && c <= 3801)))))) : (c < 4176 ? (c < 3902 ? (c < 3872 ? (c < 3840 ? (c >= 3804 && c <= 3807) : (c == 3840 || (c >= 3864 && c <= 3865))) : (c < 3895 ? ((c >= 3872 && c <= 3881) || c == 3893) : (c == 3895 || c == 3897))) : (c < 3974 ? (c < 3913 ? (c >= 3902 && c <= 3911) : ((c >= 3913 && c <= 3948) || (c >= 3953 && c <= 3972))) : (c < 4038 ? ((c >= 3974 && c <= 3991) || (c >= 3993 && c <= 4028)) : (c == 4038 || (c >= 4096 && c <= 4169))))) : (c < 4688 ? (c < 4301 ? (c < 4256 ? (c >= 4176 && c <= 4253) : ((c >= 4256 && c <= 4293) || c == 4295)) : (c < 4348 ? (c == 4301 || (c >= 4304 && c <= 4346)) : ((c >= 4348 && c <= 4680) || (c >= 4682 && c <= 4685)))) : (c < 4746 ? (c < 4698 ? ((c >= 4688 && c <= 4694) || c == 4696) : ((c >= 4698 && c <= 4701) || (c >= 4704 && c <= 4744))) : (c < 4786 ? ((c >= 4746 && c <= 4749) || (c >= 4752 && c <= 4784)) : ((c >= 4786 && c <= 4789) || (c >= 4792 && c <= 4798))))))))) : (c < 11035 ? (c < 7416 ? (c < 6176 ? (c < 5873 ? (c < 4992 ? (c < 4824 ? (c < 4802 ? c == 4800 : ((c >= 4802 && c <= 4805) || (c >= 4808 && c <= 4822))) : (c < 4888 ? ((c >= 4824 && c <= 4880) || (c >= 4882 && c <= 4885)) : ((c >= 4888 && c <= 4954) || (c >= 4957 && c <= 4959)))) : (c < 5121 ? (c < 5024 ? (c >= 4992 && c <= 5007) : ((c >= 5024 && c <= 5109) || (c >= 5112 && c <= 5117))) : (c < 5761 ? ((c >= 5121 && c <= 5740) || (c >= 5743 && c <= 5759)) : ((c >= 5761 && c <= 5786) || (c >= 5792 && c <= 5866))))) : (c < 6002 ? (c < 5920 ? (c < 5888 ? (c >= 5873 && c <= 5880) : ((c >= 5888 && c <= 5900) || (c >= 5902 && c <= 5908))) : (c < 5984 ? ((c >= 5920 && c <= 5940) || (c >= 5952 && c <= 5971)) : ((c >= 5984 && c <= 5996) || (c >= 5998 && c <= 6000)))) : (c < 6108 ? (c < 6016 ? (c >= 6002 && c <= 6003) : ((c >= 6016 && c <= 6099) || c == 6103)) : (c < 6155 ? ((c >= 6108 && c <= 6109) || (c >= 6112 && c <= 6121)) : ((c >= 6155 && c <= 6157) || (c >= 6160 && c <= 6169)))))) : (c < 6783 ? (c < 6512 ? (c < 6400 ? (c < 6272 ? (c >= 6176 && c <= 6263) : ((c >= 6272 && c <= 6314) || (c >= 6320 && c <= 6389))) : (c < 6448 ? ((c >= 6400 && c <= 6430) || (c >= 6432 && c <= 6443)) : ((c >= 6448 && c <= 6459) || (c >= 6470 && c <= 6509)))) : (c < 6608 ? (c < 6528 ? (c >= 6512 && c <= 6516) : ((c >= 6528 && c <= 6571) || (c >= 6576 && c <= 6601))) : (c < 6688 ? ((c >= 6608 && c <= 6617) || (c >= 6656 && c <= 6683)) : ((c >= 6688 && c <= 6750) || (c >= 6752 && c <= 6780))))) : (c < 7040 ? (c < 6832 ? (c < 6800 ? (c >= 6783 && c <= 6793) : ((c >= 6800 && c <= 6809) || c == 6823)) : (c < 6992 ? ((c >= 6832 && c <= 6846) || (c >= 6912 && c <= 6987)) : ((c >= 6992 && c <= 7001) || (c >= 7019 && c <= 7027)))) : (c < 7245 ? (c < 7168 ? (c >= 7040 && c <= 7155) : ((c >= 7168 && c <= 7223) || (c >= 7232 && c <= 7241))) : (c < 7376 ? ((c >= 7245 && c <= 7293) || (c >= 7296 && c <= 7304)) : ((c >= 7376 && c <= 7378) || (c >= 7380 && c <= 7414))))))) : (c < 8450 ? (c < 8130 ? (c < 8025 ? (c < 7960 ? (c < 7424 ? (c >= 7416 && c <= 7417) : ((c >= 7424 && c <= 7669) || (c >= 7675 && c <= 7957))) : (c < 8008 ? ((c >= 7960 && c <= 7965) || (c >= 7968 && c <= 8005)) : ((c >= 8008 && c <= 8013) || (c >= 8016 && c <= 8023)))) : (c < 8031 ? (c < 8027 ? c == 8025 : (c == 8027 || c == 8029)) : (c < 8118 ? ((c >= 8031 && c <= 8061) || (c >= 8064 && c <= 8116)) : ((c >= 8118 && c <= 8124) || c == 8126)))) : (c < 8205 ? (c < 8150 ? (c < 8134 ? (c >= 8130 && c <= 8132) : ((c >= 8134 && c <= 8140) || (c >= 8144 && c <= 8147))) : (c < 8178 ? ((c >= 8150 && c <= 8155) || (c >= 8160 && c <= 8172)) : ((c >= 8178 && c <= 8180) || (c >= 8182 && c <= 8188)))) : (c < 8305 ? (c < 8252 ? c == 8205 : (c == 8252 || c == 8265)) : (c < 8336 ? (c == 8305 || c == 8319) : ((c >= 8336 && c <= 8348) || (c >= 8400 && c <= 8432)))))) : (c < 8579 ? (c < 8486 ? (c < 8469 ? (c < 8455 ? c == 8450 : (c == 8455 || (c >= 8458 && c <= 8467))) : (c < 8482 ? (c == 8469 || (c >= 8473 && c <= 8477)) : (c == 8482 || c == 8484))) : (c < 8495 ? (c < 8488 ? c == 8486 : (c == 8488 || (c >= 8490 && c <= 8493))) : (c < 8517 ? ((c >= 8495 && c <= 8505) || (c >= 8508 && c <= 8511)) : ((c >= 8517 && c <= 8521) || c == 8526)))) : (c < 9410 ? (c < 9000 ? (c < 8592 ? (c >= 8579 && c <= 8580) : ((c >= 8592 && c <= 8703) || (c >= 8986 && c <= 8987))) : (c < 9193 ? (c == 9000 || c == 9167) : ((c >= 9193 && c <= 9203) || (c >= 9208 && c <= 9210)))) : (c < 9723 ? (c < 9654 ? (c == 9410 || (c >= 9642 && c <= 9643)) : (c == 9654 || c == 9664)) : (c < 10548 ? ((c >= 9723 && c <= 9726) || (c >= 9728 && c <= 10175)) : ((c >= 10548 && c <= 10549) || (c >= 11013 && c <= 11015)))))))) : (c < 43259 ? (c < 12445 ? (c < 11688 ? (c < 11520 ? (c < 11264 ? (c < 11088 ? (c >= 11035 && c <= 11036) : (c == 11088 || c == 11093)) : (c < 11360 ? ((c >= 11264 && c <= 11310) || (c >= 11312 && c <= 11358)) : ((c >= 11360 && c <= 11492) || (c >= 11499 && c <= 11507)))) : (c < 11568 ? (c < 11559 ? (c >= 11520 && c <= 11557) : (c == 11559 || c == 11565)) : (c < 11647 ? ((c >= 11568 && c <= 11623) || c == 11631) : ((c >= 11647 && c <= 11670) || (c >= 11680 && c <= 11686))))) : (c < 11744 ? (c < 11712 ? (c < 11696 ? (c >= 11688 && c <= 11694) : ((c >= 11696 && c <= 11702) || (c >= 11704 && c <= 11710))) : (c < 11728 ? ((c >= 11712 && c <= 11718) || (c >= 11720 && c <= 11726)) : ((c >= 11728 && c <= 11734) || (c >= 11736 && c <= 11742)))) : (c < 12330 ? (c < 11823 ? (c >= 11744 && c <= 11775) : (c == 11823 || (c >= 12293 && c <= 12294))) : (c < 12353 ? ((c >= 12330 && c <= 12341) || (c >= 12347 && c <= 12349)) : ((c >= 12353 && c <= 12438) || (c >= 12441 && c <= 12442)))))) : (c < 42512 ? (c < 12951 ? (c < 12549 ? (c < 12449 ? (c >= 12445 && c <= 12447) : ((c >= 12449 && c <= 12538) || (c >= 12540 && c <= 12543))) : (c < 12704 ? ((c >= 12549 && c <= 12589) || (c >= 12593 && c <= 12686)) : ((c >= 12704 && c <= 12730) || (c >= 12784 && c <= 12799)))) : (c < 19968 ? (c < 12953 ? c == 12951 : (c == 12953 || (c >= 13312 && c <= 19893))) : (c < 42192 ? ((c >= 19968 && c <= 40917) || (c >= 40960 && c <= 42124)) : ((c >= 42192 && c <= 42237) || (c >= 42240 && c <= 42508))))) : (c < 42891 ? (c < 42623 ? (c < 42560 ? (c >= 42512 && c <= 42539) : ((c >= 42560 && c <= 42610) || (c >= 42612 && c <= 42621))) : (c < 42775 ? ((c >= 42623 && c <= 42725) || (c >= 42736 && c <= 42737)) : ((c >= 42775 && c <= 42783) || (c >= 42786 && c <= 42888)))) : (c < 43072 ? (c < 42928 ? (c >= 42891 && c <= 42926) : ((c >= 42928 && c <= 42935) || (c >= 42999 && c <= 43047))) : (c < 43216 ? ((c >= 43072 && c <= 43123) || (c >= 43136 && c <= 43205)) : ((c >= 43216 && c <= 43225) || (c >= 43232 && c <= 43255))))))) : (c < 55243 ? (c < 43744 ? (c < 43488 ? (c < 43312 ? (c < 43261 ? c == 43259 : (c == 43261 || (c >= 43264 && c <= 43309))) : (c < 43392 ? ((c >= 43312 && c <= 43347) || (c >= 43360 && c <= 43388)) : ((c >= 43392 && c <= 43456) || (c >= 43471 && c <= 43481)))) : (c < 43600 ? (c < 43520 ? (c >= 43488 && c <= 43518) : ((c >= 43520 && c <= 43574) || (c >= 43584 && c <= 43597))) : (c < 43642 ? ((c >= 43600 && c <= 43609) || (c >= 43616 && c <= 43638)) : ((c >= 43642 && c <= 43714) || (c >= 43739 && c <= 43741))))) : (c < 43824 ? (c < 43785 ? (c < 43762 ? (c >= 43744 && c <= 43759) : ((c >= 43762 && c <= 43766) || (c >= 43777 && c <= 43782))) : (c < 43808 ? ((c >= 43785 && c <= 43790) || (c >= 43793 && c <= 43798)) : ((c >= 43808 && c <= 43814) || (c >= 43816 && c <= 43822)))) : (c < 44012 ? (c < 43868 ? (c >= 43824 && c <= 43866) : ((c >= 43868 && c <= 43877) || (c >= 43888 && c <= 44010))) : (c < 44032 ? ((c >= 44012 && c <= 44013) || (c >= 44016 && c <= 44025)) : ((c >= 44032 && c <= 55203) || (c >= 55216 && c <= 55238)))))) : (c < 64848 ? (c < 64298 ? (c < 64112 ? (c < 55296 ? (c >= 55243 && c <= 55291) : ((c >= 55296 && c <= 57343) || (c >= 63744 && c <= 64109))) : (c < 64275 ? ((c >= 64112 && c <= 64217) || (c >= 64256 && c <= 64262)) : ((c >= 64275 && c <= 64279) || (c >= 64285 && c <= 64296)))) : (c < 64320 ? (c < 64312 ? (c >= 64298 && c <= 64310) : ((c >= 64312 && c <= 64316) || c == 64318)) : (c < 64326 ? ((c >= 64320 && c <= 64321) || (c >= 64323 && c <= 64324)) : ((c >= 64326 && c <= 64433) || (c >= 64467 && c <= 64829))))) : (c < 65296 ? (c < 65024 ? (c < 64914 ? (c >= 64848 && c <= 64911) : ((c >= 64914 && c <= 64967) || (c >= 65008 && c <= 65019))) : (c < 65136 ? ((c >= 65024 && c <= 65039) || (c >= 65056 && c <= 65071)) : ((c >= 65136 && c <= 65140) || (c >= 65142 && c <= 65276)))) : (c < 65474 ? (c < 65345 ? ((c >= 65296 && c <= 65305) || (c >= 65313 && c <= 65338)) : ((c >= 65345 && c <= 65370) || (c >= 65382 && c <= 65470))) : (c < 65490 ? ((c >= 65474 && c <= 65479) || (c >= 65482 && c <= 65487)) : ((c >= 65490 && c <= 65495) || (c >= 65498 && c <= 65500))))))))));\n}\n/**\n * Determines if the given character `c` matches the regular expression /[!#$%&'*+/=?^_`{|}~-]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isValidEmailLocalPartSpecialChar(c) {\n    return (c < 47 ? (c < 42 ? (c == 33 || (c >= 35 && c <= 39)) : ((c >= 42 && c <= 43) || c == 45)) : (c < 63 ? (c == 47 || c == 61) : (c < 94 ? c == 63 : ((c >= 94 && c <= 96) || (c >= 123 && c <= 126)))));\n}\n/**\n * Determines if the given character `c` matches the regular expression /[-+&@#/%=~_()|'$*[\\]{}\\u2713]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isUrlSuffixAllowedSpecialChar(c) {\n    return (c < 91 ? (c < 47 ? ((c >= 35 && c <= 43) || c == 45) : (c < 61 ? c == 47 : (c == 61 || c == 64))) : (c < 95 ? (c == 91 || c == 93) : (c < 123 ? c == 95 : ((c >= 123 && c <= 126) || c == 10003))));\n}\n/**\n * Determines if the given character `c` matches the regular expression /[?!:,.;^]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isUrlSuffixNotAllowedAsFinalChar(c) {\n    return (c < 58 ? (c < 44 ? c == 33 : (c == 44 || c == 46)) : (c < 63 ? (c >= 58 && c <= 59) : (c == 63 || c == 94)));\n}\n/**\n * Determines if the given character `c` matches the regular expression /[({[]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isOpenBraceChar(c) {\n    return (c < 91 ? c == 40 : (c == 91 || c == 123));\n}\n/**\n * Determines if the given character `c` matches the regular expression /[)}\\]]/\n * by checking it via character code in a binary search fashion.\n *\n * This technique speeds this function up by a factor of ~10x vs. running RegExp.prototype.test()\n * on the character itself.\n *\n * NOTE: This function is generated. Do not edit manually. To regenerate, run:\n *\n *     npm run generate-char-utils\n */\nexport function isCloseBraceChar(c) {\n    return (c < 93 ? c == 41 : (c == 93 || c == 125));\n}\n//# sourceMappingURL=char-utils.js.map","export var hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Simpler helper method to check for a boolean type simply for the benefit of\n * gaining better compression when minified by not needing to have multiple\n * `typeof` comparisons in the codebase.\n */\nexport function isBoolean(value) {\n    return typeof value === 'boolean';\n}\n/**\n * Truncates the `str` at `len - ellipsisChars.length`, and adds the `ellipsisChars` to the\n * end of the string (by default, two periods: '..'). If the `str` length does not exceed\n * `len`, the string will be returned unchanged.\n *\n * @param {String} str The string to truncate and add an ellipsis to.\n * @param {Number} truncateLen The length to truncate the string at.\n * @param {String} [ellipsisChars=...] The ellipsis character(s) to add to the end of `str`\n *   when truncated. Defaults to '...'\n */\nexport function ellipsis(str, truncateLen, ellipsisChars) {\n    var ellipsisLength;\n    if (str.length > truncateLen) {\n        if (ellipsisChars == null) {\n            ellipsisChars = '&hellip;';\n            ellipsisLength = 3;\n        }\n        else {\n            ellipsisLength = ellipsisChars.length;\n        }\n        str = str.substring(0, truncateLen - ellipsisLength) + ellipsisChars;\n    }\n    return str;\n}\n/**\n * Removes array elements based on a filtering function. Mutates the input\n * array.\n *\n * Using this instead of the ES5 Array.prototype.filter() function to prevent\n * creating many new arrays in memory for filtering.\n *\n * @param arr The array to remove elements from. This array is mutated.\n * @param fn The predicate function which should return `true` to remove an\n *   element.\n */\nexport function removeWithPredicate(arr, fn) {\n    for (var i = arr.length - 1; i >= 0; i--) {\n        if (fn(arr[i]) === true) {\n            arr.splice(i, 1);\n        }\n    }\n}\n/**\n * Function that should never be called but is used to check that every\n * enum value is handled using TypeScript's 'never' type.\n */\n/* istanbul ignore next */\nexport function assertNever(theValue) {\n    throw new Error(\"Unhandled case for value: '\".concat(theValue, \"'\"));\n}\n//# sourceMappingURL=utils.js.map","import { hasOwnProperty } from './utils';\n// Regular expression to match whitespace\nexport var whitespaceRe = /\\s+/;\n/**\n * @class Autolinker.HtmlTag\n * @extends Object\n *\n * Represents an HTML tag, which can be used to easily build/modify HTML tags programmatically.\n *\n * Autolinker uses this abstraction to create HTML tags, and then write them out as strings. You may also use\n * this class in your code, especially within a {@link Autolinker#replaceFn replaceFn}.\n *\n * ## Examples\n *\n * Example instantiation:\n *\n *     var tag = new Autolinker.HtmlTag( {\n *         tagName : 'a',\n *         attrs   : { 'href': 'http://google.com', 'class': 'external-link' },\n *         innerHtml : 'Google'\n *     } );\n *\n *     tag.toAnchorString();  // <a href=\"http://google.com\" class=\"external-link\">Google</a>\n *\n *     // Individual accessor methods\n *     tag.getTagName();                 // 'a'\n *     tag.getAttr( 'href' );            // 'http://google.com'\n *     tag.hasClass( 'external-link' );  // true\n *\n *\n * Using mutator methods (which may be used in combination with instantiation config properties):\n *\n *     var tag = new Autolinker.HtmlTag();\n *     tag.setTagName( 'a' );\n *     tag.setAttr( 'href', 'http://google.com' );\n *     tag.addClass( 'external-link' );\n *     tag.setInnerHtml( 'Google' );\n *\n *     tag.getTagName();                 // 'a'\n *     tag.getAttr( 'href' );            // 'http://google.com'\n *     tag.hasClass( 'external-link' );  // true\n *\n *     tag.toAnchorString();  // <a href=\"http://google.com\" class=\"external-link\">Google</a>\n *\n *\n * ## Example use within a {@link Autolinker#replaceFn replaceFn}\n *\n *     var html = Autolinker.link( \"Test google.com\", {\n *         replaceFn : function( match ) {\n *             var tag = match.buildTag();  // returns an {@link Autolinker.HtmlTag} instance, configured with the Match's href and anchor text\n *             tag.setAttr( 'rel', 'nofollow' );\n *\n *             return tag;\n *         }\n *     } );\n *\n *     // generated html:\n *     //   Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n *\n *\n * ## Example use with a new tag for the replacement\n *\n *     var html = Autolinker.link( \"Test google.com\", {\n *         replaceFn : function( match ) {\n *             var tag = new Autolinker.HtmlTag( {\n *                 tagName : 'button',\n *                 attrs   : { 'title': 'Load URL: ' + match.getAnchorHref() },\n *                 innerHtml : 'Load URL: ' + match.getAnchorText()\n *             } );\n *\n *             return tag;\n *         }\n *     } );\n *\n *     // generated html:\n *     //   Test <button title=\"Load URL: http://google.com\">Load URL: google.com</button>\n */\nvar HtmlTag = /** @class */ (function () {\n    /**\n     * @method constructor\n     * @param {Object} [cfg] The configuration properties for this class, in an Object (map)\n     */\n    function HtmlTag(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        /**\n         * @cfg {String} tagName\n         *\n         * The tag name. Ex: 'a', 'button', etc.\n         *\n         * Not required at instantiation time, but should be set using {@link #setTagName} before {@link #toAnchorString}\n         * is executed.\n         */\n        this.tagName = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object.<String, String>} attrs\n         *\n         * An key/value Object (map) of attributes to create the tag with. The keys are the attribute names, and the\n         * values are the attribute values.\n         */\n        this.attrs = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} innerHTML\n         *\n         * The inner HTML for the tag.\n         */\n        this.innerHTML = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        this.tagName = cfg.tagName || '';\n        this.attrs = cfg.attrs || {};\n        this.innerHTML = cfg.innerHtml || cfg.innerHTML || ''; // accept either the camelCased form or the fully capitalized acronym as in the DOM\n    }\n    /**\n     * Sets the tag name that will be used to generate the tag with.\n     *\n     * @param {String} tagName\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setTagName = function (tagName) {\n        this.tagName = tagName;\n        return this;\n    };\n    /**\n     * Retrieves the tag name.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getTagName = function () {\n        return this.tagName;\n    };\n    /**\n     * Sets an attribute on the HtmlTag.\n     *\n     * @param {String} attrName The attribute name to set.\n     * @param {String} attrValue The attribute value to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setAttr = function (attrName, attrValue) {\n        var tagAttrs = this.getAttrs();\n        tagAttrs[attrName] = attrValue;\n        return this;\n    };\n    /**\n     * Retrieves an attribute from the HtmlTag. If the attribute does not exist, returns `undefined`.\n     *\n     * @param {String} attrName The attribute name to retrieve.\n     * @return {String} The attribute's value, or `undefined` if it does not exist on the HtmlTag.\n     */\n    HtmlTag.prototype.getAttr = function (attrName) {\n        return this.getAttrs()[attrName];\n    };\n    /**\n     * Sets one or more attributes on the HtmlTag.\n     *\n     * @param {Object.<String, String>} attrs A key/value Object (map) of the attributes to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setAttrs = function (attrs) {\n        Object.assign(this.getAttrs(), attrs);\n        return this;\n    };\n    /**\n     * Retrieves the attributes Object (map) for the HtmlTag.\n     *\n     * @return {Object.<String, String>} A key/value object of the attributes for the HtmlTag.\n     */\n    HtmlTag.prototype.getAttrs = function () {\n        return this.attrs;\n    };\n    /**\n     * Sets the provided `cssClass`, overwriting any current CSS classes on the HtmlTag.\n     *\n     * @param {String} cssClass One or more space-separated CSS classes to set (overwrite).\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setClass = function (cssClass) {\n        return this.setAttr('class', cssClass);\n    };\n    /**\n     * Convenience method to add one or more CSS classes to the HtmlTag. Will not add duplicate CSS classes.\n     *\n     * @param {String} cssClass One or more space-separated CSS classes to add.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.addClass = function (cssClass) {\n        var classAttr = this.getClass();\n        var classes = !classAttr ? [] : classAttr.split(whitespaceRe);\n        var newClasses = cssClass.split(whitespaceRe);\n        var newClass;\n        while ((newClass = newClasses.shift())) {\n            if (classes.indexOf(newClass) === -1) {\n                classes.push(newClass);\n            }\n        }\n        this.getAttrs()['class'] = classes.join(' ');\n        return this;\n    };\n    /**\n     * Convenience method to remove one or more CSS classes from the HtmlTag.\n     *\n     * @param {String} cssClass One or more space-separated CSS classes to remove.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.removeClass = function (cssClass) {\n        var classAttr = this.getClass();\n        var classes = !classAttr ? [] : classAttr.split(whitespaceRe);\n        var removeClasses = cssClass.split(whitespaceRe);\n        var removeClass;\n        while (classes.length && (removeClass = removeClasses.shift())) {\n            var idx = classes.indexOf(removeClass);\n            if (idx !== -1) {\n                classes.splice(idx, 1);\n            }\n        }\n        this.getAttrs()['class'] = classes.join(' ');\n        return this;\n    };\n    /**\n     * Convenience method to retrieve the CSS class(es) for the HtmlTag, which will each be separated by spaces when\n     * there are multiple.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getClass = function () {\n        return this.getAttrs()['class'] || '';\n    };\n    /**\n     * Convenience method to check if the tag has a CSS class or not.\n     *\n     * @param {String} cssClass The CSS class to check for.\n     * @return {Boolean} `true` if the HtmlTag has the CSS class, `false` otherwise.\n     */\n    HtmlTag.prototype.hasClass = function (cssClass) {\n        return (' ' + this.getClass() + ' ').indexOf(' ' + cssClass + ' ') !== -1;\n    };\n    /**\n     * Sets the inner HTML for the tag.\n     *\n     * @param {String} html The inner HTML to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setInnerHTML = function (html) {\n        this.innerHTML = html;\n        return this;\n    };\n    /**\n     * Backwards compatibility method name.\n     *\n     * @param {String} html The inner HTML to set.\n     * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n     */\n    HtmlTag.prototype.setInnerHtml = function (html) {\n        return this.setInnerHTML(html);\n    };\n    /**\n     * Retrieves the inner HTML for the tag.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getInnerHTML = function () {\n        return this.innerHTML || '';\n    };\n    /**\n     * Backward compatibility method name.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.getInnerHtml = function () {\n        return this.getInnerHTML();\n    };\n    /**\n     * Generates the HTML string for the tag.\n     *\n     * @return {String}\n     */\n    HtmlTag.prototype.toAnchorString = function () {\n        var tagName = this.getTagName();\n        var attrsStr = this.buildAttrsStr();\n        attrsStr = attrsStr ? ' ' + attrsStr : ''; // prepend a space if there are actually attributes\n        return ['<', tagName, attrsStr, '>', this.getInnerHtml(), '</', tagName, '>'].join('');\n    };\n    /**\n     * Support method for {@link #toAnchorString}, returns the string space-separated key=\"value\" pairs, used to populate\n     * the stringified HtmlTag.\n     *\n     * @protected\n     * @return {String} Example return: `attr1=\"value1\" attr2=\"value2\"`\n     */\n    HtmlTag.prototype.buildAttrsStr = function () {\n        var attrs = this.getAttrs(), attrsArr = [];\n        for (var prop in attrs) {\n            if (hasOwnProperty.call(attrs, prop)) {\n                attrsArr.push(prop + '=\"' + attrs[prop] + '\"');\n            }\n        }\n        return attrsArr.join(' ');\n    };\n    return HtmlTag;\n}());\nexport { HtmlTag };\n//# sourceMappingURL=html-tag.js.map","/**\n * Date: 2015-10-05\n * Author: Kasper Søfren <soefritz@gmail.com> (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed at a section within\n * the URL making it still somewhat human readable.\n *\n * @param {String} url\t\t\t\t\t\t A URL.\n * @param {Number} truncateLen\t\t The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars\t The characters to place within the url, e.g. \"...\".\n * @return {String} The truncated URL.\n */\nexport function truncateSmart(url, truncateLen, ellipsisChars) {\n    var ellipsisLengthBeforeParsing;\n    var ellipsisLength;\n    if (ellipsisChars == null) {\n        ellipsisChars = '&hellip;';\n        ellipsisLength = 3;\n        ellipsisLengthBeforeParsing = 8;\n    }\n    else {\n        ellipsisLength = ellipsisChars.length;\n        ellipsisLengthBeforeParsing = ellipsisChars.length;\n    }\n    // If the URL is shorter than the truncate length, return it as is\n    if (url.length <= truncateLen) {\n        return url;\n    }\n    var availableLength = truncateLen - ellipsisLength;\n    var urlObj = parseUrl(url);\n    // Clean up the URL by removing any malformed query string\n    // (e.g. \"?foo=bar?ignorethis\")\n    if (urlObj.query) {\n        var matchQuery = urlObj.query.match(/^(.*?)(?=(\\?|#))(.*?)$/i);\n        if (matchQuery) {\n            // Malformed URL; two or more \"?\". Removed any content behind the 2nd.\n            urlObj.query = urlObj.query.substr(0, matchQuery[1].length);\n            url = buildUrl(urlObj);\n        }\n    }\n    if (url.length <= truncateLen) {\n        return url; // removing a malformed query string brought the URL under the truncateLength\n    }\n    // Clean up the URL by removing 'www.' from the host if it exists\n    if (urlObj.host) {\n        urlObj.host = urlObj.host.replace(/^www\\./, '');\n        url = buildUrl(urlObj);\n    }\n    if (url.length <= truncateLen) {\n        return url; // removing 'www.' brought the URL under the truncateLength\n    }\n    // Process and build the truncated URL, starting with the hostname\n    var truncatedUrl = '';\n    if (urlObj.host) {\n        truncatedUrl += urlObj.host;\n    }\n    if (truncatedUrl.length >= availableLength) {\n        if (urlObj.host.length === truncateLen) {\n            return (urlObj.host.substr(0, truncateLen - ellipsisLength) + ellipsisChars).substr(0, availableLength + ellipsisLengthBeforeParsing);\n        }\n        return buildSegment(truncatedUrl, availableLength, ellipsisChars).substr(0, availableLength + ellipsisLengthBeforeParsing);\n    }\n    // If we still have available chars left, add the path and query string\n    var pathAndQuery = '';\n    if (urlObj.path) {\n        pathAndQuery += '/' + urlObj.path;\n    }\n    if (urlObj.query) {\n        pathAndQuery += '?' + urlObj.query;\n    }\n    if (pathAndQuery) {\n        if ((truncatedUrl + pathAndQuery).length >= availableLength) {\n            if ((truncatedUrl + pathAndQuery).length == truncateLen) {\n                return (truncatedUrl + pathAndQuery).substr(0, truncateLen);\n            }\n            var remainingAvailableLength = availableLength - truncatedUrl.length;\n            return (truncatedUrl + buildSegment(pathAndQuery, remainingAvailableLength, ellipsisChars)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n        }\n        else {\n            truncatedUrl += pathAndQuery;\n        }\n    }\n    // If we still have available chars left, add the fragment\n    if (urlObj.fragment) {\n        var fragment = '#' + urlObj.fragment;\n        if ((truncatedUrl + fragment).length >= availableLength) {\n            if ((truncatedUrl + fragment).length == truncateLen) {\n                return (truncatedUrl + fragment).substr(0, truncateLen);\n            }\n            var remainingAvailableLength2 = availableLength - truncatedUrl.length;\n            return (truncatedUrl + buildSegment(fragment, remainingAvailableLength2, ellipsisChars)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n        }\n        else {\n            truncatedUrl += fragment;\n        }\n    }\n    // If we still have available chars left, add the scheme\n    if (urlObj.scheme && urlObj.host) {\n        var scheme = urlObj.scheme + '://';\n        if ((truncatedUrl + scheme).length < availableLength) {\n            return (scheme + truncatedUrl).substr(0, truncateLen);\n        }\n    }\n    if (truncatedUrl.length <= truncateLen) {\n        return truncatedUrl;\n    }\n    var end = '';\n    if (availableLength > 0) {\n        end = truncatedUrl.substr(-1 * Math.floor(availableLength / 2));\n    }\n    return (truncatedUrl.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\n/**\n * Parses a URL into its components: scheme, host, path, query, and fragment.\n */\nfunction parseUrl(url) {\n    // Functionality inspired by PHP function of same name\n    var urlObj = {};\n    var urlSub = url;\n    // Parse scheme\n    var match = urlSub.match(/^([a-z]+):\\/\\//i);\n    if (match) {\n        urlObj.scheme = match[1];\n        urlSub = urlSub.slice(match[0].length);\n    }\n    // Parse host\n    match = urlSub.match(/^(.*?)(?=(\\?|#|\\/|$))/i);\n    if (match) {\n        urlObj.host = match[1];\n        urlSub = urlSub.slice(match[0].length);\n    }\n    // Parse path\n    match = urlSub.match(/^\\/(.*?)(?=(\\?|#|$))/i);\n    if (match) {\n        urlObj.path = match[1];\n        urlSub = urlSub.slice(match[0].length);\n    }\n    // Parse query\n    match = urlSub.match(/^\\?(.*?)(?=(#|$))/i);\n    if (match) {\n        urlObj.query = match[1];\n        urlSub = urlSub.slice(match[0].length);\n    }\n    // Parse fragment\n    match = urlSub.match(/^#(.*?)$/i);\n    if (match) {\n        urlObj.fragment = match[1];\n        //urlSub = urlSub.slice(match[0].length);  -- not used. Uncomment if adding another block.\n    }\n    return urlObj;\n}\nfunction buildUrl(urlObj) {\n    var url = '';\n    if (urlObj.scheme && urlObj.host) {\n        url += urlObj.scheme + '://';\n    }\n    if (urlObj.host) {\n        url += urlObj.host;\n    }\n    if (urlObj.path) {\n        url += '/' + urlObj.path;\n    }\n    if (urlObj.query) {\n        url += '?' + urlObj.query;\n    }\n    if (urlObj.fragment) {\n        url += '#' + urlObj.fragment;\n    }\n    return url;\n}\nfunction buildSegment(segment, remainingAvailableLength, ellipsisChars) {\n    var remainingAvailableLengthHalf = remainingAvailableLength / 2;\n    var startOffset = Math.ceil(remainingAvailableLengthHalf);\n    var endOffset = -1 * Math.floor(remainingAvailableLengthHalf);\n    var end = '';\n    if (endOffset < 0) {\n        end = segment.substr(endOffset);\n    }\n    return segment.substr(0, startOffset) + ellipsisChars + end;\n}\n//# sourceMappingURL=truncate-smart.js.map","import { HtmlTag } from './html-tag';\nimport { truncateSmart } from './truncate/truncate-smart';\nimport { truncateMiddle } from './truncate/truncate-middle';\nimport { truncateEnd } from './truncate/truncate-end';\n/**\n * @protected\n * @class Autolinker.AnchorTagBuilder\n * @extends Object\n *\n * Builds anchor (&lt;a&gt;) tags for the Autolinker utility when a match is\n * found.\n *\n * Normally this class is instantiated, configured, and used internally by an\n * {@link Autolinker} instance, but may actually be used indirectly in a\n * {@link Autolinker#replaceFn replaceFn} to create {@link Autolinker.HtmlTag HtmlTag}\n * instances which may be modified before returning from the\n * {@link Autolinker#replaceFn replaceFn}. For example:\n *\n *     var html = Autolinker.link(\"Test google.com\", {\n *         replaceFn: function(match) {\n *             var tag = match.buildTag();  // returns an {@link Autolinker.HtmlTag} instance\n *             tag.setAttr('rel', 'nofollow');\n *\n *             return tag;\n *         }\n *     });\n *\n *     // generated html:\n *     //   Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n */\nvar AnchorTagBuilder = /** @class */ (function () {\n    /**\n     * @method constructor\n     * @param {Object} [cfg] The configuration options for the AnchorTagBuilder instance, specified in an Object (map).\n     */\n    function AnchorTagBuilder(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        /**\n         * @cfg {Boolean} newWindow\n         * @inheritdoc Autolinker#newWindow\n         */\n        this.newWindow = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object} truncate\n         * @inheritdoc Autolinker#truncate\n         */\n        this.truncate = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} className\n         * @inheritdoc Autolinker#className\n         */\n        this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        this.newWindow = cfg.newWindow || false;\n        this.truncate = cfg.truncate || {};\n        this.className = cfg.className || '';\n    }\n    /**\n     * Generates the actual anchor (&lt;a&gt;) tag to use in place of the\n     * matched text, via its `match` object.\n     *\n     * @param match The Match instance to generate an anchor tag from.\n     * @return The HtmlTag instance for the anchor tag.\n     */\n    AnchorTagBuilder.prototype.build = function (match) {\n        return new HtmlTag({\n            tagName: 'a',\n            attrs: this.createAttrs(match),\n            innerHtml: this.processAnchorText(match.getAnchorText()),\n        });\n    };\n    /**\n     * Creates the Object (map) of the HTML attributes for the anchor (&lt;a&gt;)\n     *   tag being generated.\n     *\n     * @protected\n     * @param match The Match instance to generate an anchor tag from.\n     * @return A key/value Object (map) of the anchor tag's attributes.\n     */\n    AnchorTagBuilder.prototype.createAttrs = function (match) {\n        var attrs = {\n            href: match.getAnchorHref(), // we'll always have the `href` attribute\n        };\n        var cssClass = this.createCssClass(match);\n        if (cssClass) {\n            attrs['class'] = cssClass;\n        }\n        if (this.newWindow) {\n            attrs['target'] = '_blank';\n            attrs['rel'] = 'noopener noreferrer'; // Issue #149. See https://mathiasbynens.github.io/rel-noopener/\n        }\n        if (this.truncate.length && this.truncate.length < match.getAnchorText().length) {\n            attrs['title'] = match.getAnchorHref();\n        }\n        return attrs;\n    };\n    /**\n     * Creates the CSS class that will be used for a given anchor tag, based on\n     * the `matchType` and the {@link #className} config.\n     *\n     * Example returns:\n     *\n     * - \"\"                                      // no {@link #className}\n     * - \"myLink myLink-url\"                     // url match\n     * - \"myLink myLink-email\"                   // email match\n     * - \"myLink myLink-phone\"                   // phone match\n     * - \"myLink myLink-hashtag\"                 // hashtag match\n     * - \"myLink myLink-mention myLink-twitter\"  // mention match with Twitter service\n     *\n     * @protected\n     * @param match The Match instance to generate an\n     *   anchor tag from.\n     * @return The CSS class string for the link. Example return:\n     *   \"myLink myLink-url\". If no {@link #className} was configured, returns\n     *   an empty string.\n     */\n    AnchorTagBuilder.prototype.createCssClass = function (match) {\n        var className = this.className;\n        if (!className) {\n            return '';\n        }\n        else {\n            var returnClasses = [className], cssClassSuffixes = match.getCssClassSuffixes();\n            for (var i = 0, len = cssClassSuffixes.length; i < len; i++) {\n                returnClasses.push(className + '-' + cssClassSuffixes[i]);\n            }\n            return returnClasses.join(' ');\n        }\n    };\n    /**\n     * Processes the `anchorText` by truncating the text according to the\n     * {@link #truncate} config.\n     *\n     * @private\n     * @param anchorText The anchor tag's text (i.e. what will be\n     *   displayed).\n     * @return The processed `anchorText`.\n     */\n    AnchorTagBuilder.prototype.processAnchorText = function (anchorText) {\n        anchorText = this.doTruncate(anchorText);\n        return anchorText;\n    };\n    /**\n     * Performs the truncation of the `anchorText` based on the {@link #truncate}\n     * option. If the `anchorText` is longer than the length specified by the\n     * {@link #truncate} option, the truncation is performed based on the\n     * `location` property. See {@link #truncate} for details.\n     *\n     * @private\n     * @param anchorText The anchor tag's text (i.e. what will be\n     *   displayed).\n     * @return The truncated anchor text.\n     */\n    AnchorTagBuilder.prototype.doTruncate = function (anchorText) {\n        var truncate = this.truncate;\n        if (!truncate.length)\n            return anchorText;\n        var truncateLength = truncate.length, truncateLocation = truncate.location;\n        if (truncateLocation === 'smart') {\n            return truncateSmart(anchorText, truncateLength);\n        }\n        else if (truncateLocation === 'middle') {\n            return truncateMiddle(anchorText, truncateLength);\n        }\n        else {\n            return truncateEnd(anchorText, truncateLength);\n        }\n    };\n    return AnchorTagBuilder;\n}());\nexport { AnchorTagBuilder };\n//# sourceMappingURL=anchor-tag-builder.js.map","/**\n * Date: 2015-10-05\n * Author: Kasper Søfren <soefritz@gmail.com> (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed in the dead-center of the URL.\n *\n * @param {String} url             A URL.\n * @param {Number} truncateLen     The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars   The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\nexport function truncateMiddle(url, truncateLen, ellipsisChars) {\n    if (url.length <= truncateLen) {\n        return url;\n    }\n    var ellipsisLengthBeforeParsing;\n    var ellipsisLength;\n    if (ellipsisChars == null) {\n        ellipsisChars = '&hellip;';\n        ellipsisLengthBeforeParsing = 8;\n        ellipsisLength = 3;\n    }\n    else {\n        ellipsisLengthBeforeParsing = ellipsisChars.length;\n        ellipsisLength = ellipsisChars.length;\n    }\n    var availableLength = truncateLen - ellipsisLength;\n    var end = '';\n    if (availableLength > 0) {\n        end = url.substr(-1 * Math.floor(availableLength / 2));\n    }\n    return (url.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\n//# sourceMappingURL=truncate-middle.js.map","import { ellipsis } from '../utils';\n/**\n * A truncation feature where the ellipsis will be placed at the end of the URL.\n *\n * @param {String} anchorText\n * @param {Number} truncateLen The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\nexport function truncateEnd(anchorText, truncateLen, ellipsisChars) {\n    return ellipsis(anchorText, truncateLen, ellipsisChars);\n}\n//# sourceMappingURL=truncate-end.js.map","/**\n * @abstract\n * @class Autolinker.match.AbstractMatch\n *\n * Represents a match found in an input string which should be Autolinked. A Match object is what is provided in a\n * {@link Autolinker#replaceFn replaceFn}, and may be used to query for details about the match.\n *\n * For example:\n *\n *     var input = \"...\";  // string with URLs, Email Addresses, and Mentions (Twitter, Instagram, Soundcloud)\n *\n *     var linkedText = Autolinker.link( input, {\n *         replaceFn : function( match ) {\n *             console.log( \"href = \", match.getAnchorHref() );\n *             console.log( \"text = \", match.getAnchorText() );\n *\n *             switch( match.getType() ) {\n *                 case 'url' :\n *                     console.log( \"url: \", match.getUrl() );\n *\n *                 case 'email' :\n *                     console.log( \"email: \", match.getEmail() );\n *\n *                 case 'mention' :\n *                     console.log( \"mention: \", match.getMention() );\n *             }\n *         }\n *     } );\n *\n * See the {@link Autolinker} class for more details on using the {@link Autolinker#replaceFn replaceFn}.\n */\nvar AbstractMatch = /** @class */ (function () {\n    /**\n     * @member Autolinker.match.Match\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function AbstractMatch(cfg) {\n        /**\n         * @cfg {Autolinker.AnchorTagBuilder} tagBuilder (required)\n         *\n         * Reference to the AnchorTagBuilder instance to use to generate an anchor\n         * tag for the Match.\n         */\n        // @ts-expect-error Property used just to get the above doc comment into the ES5 output and documentation generator\n        this._ = null;\n        /**\n         * @cfg {String} matchedText (required)\n         *\n         * The original text that was matched by the {@link Autolinker.matcher.Matcher}.\n         */\n        this.matchedText = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Number} offset (required)\n         *\n         * The offset of where the match was made in the input string.\n         */\n        this.offset = 0; // default value just to get the above doc comment in the ES5 output and documentation generator\n        this.tagBuilder = cfg.tagBuilder;\n        this.matchedText = cfg.matchedText;\n        this.offset = cfg.offset;\n    }\n    /**\n     * Returns the original text that was matched.\n     *\n     * @return {String}\n     */\n    AbstractMatch.prototype.getMatchedText = function () {\n        return this.matchedText;\n    };\n    /**\n     * Sets the {@link #offset} of where the match was made in the input string.\n     *\n     * A {@link Autolinker.matcher.Matcher} will be fed only HTML text nodes,\n     * and will therefore set an original offset that is relative to the HTML\n     * text node itself. However, we want this offset to be relative to the full\n     * HTML input string, and thus if using {@link Autolinker#parse} (rather\n     * than calling a {@link Autolinker.matcher.Matcher} directly), then this\n     * offset is corrected after the Matcher itself has done its job.\n     *\n     * @private\n     * @param {Number} offset\n     */\n    AbstractMatch.prototype.setOffset = function (offset) {\n        this.offset = offset;\n    };\n    /**\n     * Returns the offset of where the match was made in the input string. This\n     * is the 0-based index of the match.\n     *\n     * @return {Number}\n     */\n    AbstractMatch.prototype.getOffset = function () {\n        return this.offset;\n    };\n    /**\n     * Returns the CSS class suffix(es) for this match.\n     *\n     * A CSS class suffix is appended to the {@link Autolinker#className} in\n     * the {@link Autolinker.AnchorTagBuilder} when a match is translated into\n     * an anchor tag.\n     *\n     * For example, if {@link Autolinker#className} was configured as 'myLink',\n     * and this method returns `[ 'url' ]`, the final class name of the element\n     * will become: 'myLink myLink-url'.\n     *\n     * The match may provide multiple CSS class suffixes to be appended to the\n     * {@link Autolinker#className} in order to facilitate better styling\n     * options for different match criteria. See {@link Autolinker.match.Mention}\n     * for an example.\n     *\n     * By default, this method returns a single array with the match's\n     * {@link #getType type} name, but may be overridden by subclasses.\n     *\n     * @return {String[]}\n     */\n    AbstractMatch.prototype.getCssClassSuffixes = function () {\n        return [this.type];\n    };\n    /**\n     * Builds and returns an {@link Autolinker.HtmlTag} instance based on the\n     * Match.\n     *\n     * This can be used to easily generate anchor tags from matches, and either\n     * return their HTML string, or modify them before doing so.\n     *\n     * Example Usage:\n     *\n     *     var tag = match.buildTag();\n     *     tag.addClass( 'cordova-link' );\n     *     tag.setAttr( 'target', '_system' );\n     *\n     *     tag.toAnchorString();  // <a href=\"http://google.com\" class=\"cordova-link\" target=\"_system\">Google</a>\n     *\n     * Example Usage in {@link Autolinker#replaceFn}:\n     *\n     *     var html = Autolinker.link( \"Test google.com\", {\n     *         replaceFn : function( match ) {\n     *             var tag = match.buildTag();  // returns an {@link Autolinker.HtmlTag} instance\n     *             tag.setAttr( 'rel', 'nofollow' );\n     *\n     *             return tag;\n     *         }\n     *     } );\n     *\n     *     // generated html:\n     *     //   Test <a href=\"http://google.com\" target=\"_blank\" rel=\"nofollow\">google.com</a>\n     */\n    AbstractMatch.prototype.buildTag = function () {\n        return this.tagBuilder.build(this);\n    };\n    return AbstractMatch;\n}());\nexport { AbstractMatch };\n//# sourceMappingURL=abstract-match.js.map","import { isDigitChar, isAsciiLetterChar, isAlphaNumericOrMarkChar, isUrlSuffixAllowedSpecialChar, isUrlSuffixNotAllowedAsFinalChar, } from '../char-utils';\nimport { tldRegex } from './known-tlds';\n/**\n * Regular expression to match an http:// or https:// scheme.\n */\nexport var httpSchemeRe = /https?:\\/\\//i;\n/**\n * Regular expression to match an http:// or https:// scheme as the prefix of\n * a string.\n */\nexport var httpSchemePrefixRe = new RegExp('^' + httpSchemeRe.source, 'i');\n/**\n * A regular expression used to determine the schemes we should not autolink\n */\nexport var invalidSchemeRe = /^(javascript|vbscript):/i;\n// A regular expression used to determine if the URL is a scheme match (such as\n// 'http://google.com', and as opposed to a \"TLD match\"). This regular\n// expression is used to parse out the host along with if the URL has an\n// authority component (i.e. '//')\n//\n// Capturing groups:\n//    1. '//' if the URL has an authority component, empty string otherwise\n//    2. The host (if one exists). Ex: 'google.com'\n//\n// See https://www.rfc-editor.org/rfc/rfc3986#appendix-A for terminology\nexport var schemeUrlRe = /^[A-Za-z][-.+A-Za-z0-9]*:(\\/\\/)?([^:/]*)/;\n// A regular expression used to determine if the URL is a TLD match (such as\n// 'google.com', and as opposed to a \"scheme match\"). This regular\n// expression is used to help parse out the TLD (top-level domain) of the host.\n//\n// See https://www.rfc-editor.org/rfc/rfc3986#appendix-A for terminology\nexport var tldUrlHostRe = /^(?:\\/\\/)?([^/#?:]+)/; // optionally prefixed with protocol-relative '//' chars\n/**\n * Determines if the given character code represents a character that may start\n * a scheme (ex: the 'h' in 'http')\n */\nexport var isSchemeStartChar = isAsciiLetterChar; // Equivalent to checking the RegExp `/[A-Za-z]/`, but aliased for clarity and maintainability\n/**\n * Determines if the given character is a valid character in a scheme (such as\n * 'http' or 'ssh+git'), but only after the start char (which is handled by\n * {@link isSchemeStartChar}.\n */\nexport function isSchemeChar(charCode) {\n    return (isAsciiLetterChar(charCode) ||\n        isDigitChar(charCode) ||\n        charCode === 43 /* Char.Plus */ || // '+'\n        charCode === 45 /* Char.Dash */ || // '-'\n        charCode === 46 /* Char.Dot */ // '.'\n    );\n}\n/**\n * Determines if the character can begin a domain label, which must be an\n * alphanumeric character and not an underscore or dash.\n *\n * A domain label is a segment of a hostname such as subdomain.google.com.\n */\nexport var isDomainLabelStartChar = isAlphaNumericOrMarkChar; // alias function for clarity\n/**\n * Determines if the character is part of a domain label (but not a domain label\n * start character).\n *\n * A domain label is a segment of a hostname such as subdomain.google.com.\n */\nexport function isDomainLabelChar(charCode) {\n    return charCode === 95 /* Char.Underscore */ || isDomainLabelStartChar(charCode);\n}\n/**\n * Determines if the character is a path character (\"pchar\") as defined by\n * https://tools.ietf.org/html/rfc3986#appendix-A\n *\n *     pchar         = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n *\n *     unreserved    = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n *     pct-encoded   = \"%\" HEXDIG HEXDIG\n *     sub-delims    = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\"\n *                   / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n *\n * Note that this implementation doesn't follow the spec exactly, but rather\n * follows URL path characters found out in the wild (spec might be out of date?)\n */\nexport function isPathChar(charCode) {\n    return (isAlphaNumericOrMarkChar(charCode) ||\n        isUrlSuffixAllowedSpecialChar(charCode) ||\n        isUrlSuffixNotAllowedAsFinalChar(charCode) // characters in addition to those allowed by isUrlSuffixAllowedSpecialChar()\n    );\n}\n/**\n * Determines if the character given may begin the \"URL Suffix\" section of a\n * URI (i.e. the path, query, or hash section). These are the '/', '?' and '#'\n * characters.\n *\n * See https://tools.ietf.org/html/rfc3986#appendix-A\n */\nexport function isUrlSuffixStartChar(charCode) {\n    return (charCode === 47 /* Char.Slash */ || // '/'\n        charCode === 63 /* Char.Question */ || // '?'\n        charCode === 35 /* Char.NumberSign */ // '#'\n    );\n}\n/**\n * Determines if the top-level domain (TLD) read in the host is a known TLD.\n *\n * Example: 'com' would be a known TLD (for a host of 'google.com'), but\n * 'local' would not (for a domain name of 'my-computer.local').\n */\nexport function isKnownTld(tld) {\n    return tldRegex.test(tld.toLowerCase()); // make sure the tld is lowercase for the regex\n}\n/**\n * Determines if the given `url` is a valid scheme-prefixed URL.\n */\nexport function isValidSchemeUrl(url) {\n    // If the scheme is 'javascript:' or 'vbscript:', these link\n    // types can be dangerous. Don't link them.\n    if (invalidSchemeRe.test(url)) {\n        return false;\n    }\n    var schemeMatch = url.match(schemeUrlRe);\n    if (!schemeMatch) {\n        return false;\n    }\n    var isAuthorityMatch = !!schemeMatch[1];\n    var host = schemeMatch[2];\n    if (isAuthorityMatch) {\n        // Any match that has an authority ('//' chars) after the scheme is\n        // valid, such as 'http://anything'\n        return true;\n    }\n    // If there's no authority ('//' chars), check that we have a hostname\n    // that looks valid.\n    //\n    // The host must contain at least one '.' char and have a domain label\n    // with at least one letter to be considered valid.\n    //\n    // Accept:\n    //   - git:domain.com (scheme followed by a host\n    // Do not accept:\n    //   - git:something ('something' doesn't look like a host)\n    //   - version:1.0   ('1.0' doesn't look like a host)\n    if (host.indexOf('.') === -1 || !/[A-Za-z]/.test(host)) {\n        // `letterRe` RegExp checks for a letter anywhere in the host string\n        return false;\n    }\n    return true;\n}\n/**\n * Determines if the given `url` is a match with a valid TLD.\n */\nexport function isValidTldMatch(url) {\n    // TLD URL such as 'google.com', we need to confirm that we have a valid\n    // top-level domain\n    var tldUrlHostMatch = url.match(tldUrlHostRe);\n    if (!tldUrlHostMatch) {\n        // At this point, if the URL didn't match our TLD re, it must be invalid\n        // (highly unlikely to happen, but just in case)\n        return false;\n    }\n    var host = tldUrlHostMatch[0];\n    var hostLabels = host.split('.');\n    if (hostLabels.length < 2) {\n        // 0 or 1 host label, there's no TLD. Ex: 'localhost'\n        return false;\n    }\n    var tld = hostLabels[hostLabels.length - 1];\n    if (!isKnownTld(tld)) {\n        return false;\n    }\n    // TODO: Implement these conditions for TLD matcher:\n    // (\n    //     this.longestDomainLabelLength <= 63 &&\n    //     this.domainNameLength <= 255\n    // );\n    return true;\n}\n// Regular expression to confirm a valid IPv4 address (ex: '192.168.0.1')\n// TODO: encode this into the state machine so that we don't need to run this\n//       regexp separately to confirm the match\nvar ipV4Re = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n// Regular expression used to split the IPv4 address itself from any port/path/query/hash\nvar ipV4PartRe = /[:/?#]/;\n/**\n * Determines if the given URL is a valid IPv4-prefixed URL.\n */\nexport function isValidIpV4Address(url) {\n    // Grab just the IP address\n    var ipV4Part = url.split(ipV4PartRe, 1)[0]; // only 1 result needed\n    return ipV4Re.test(ipV4Part);\n}\n//# sourceMappingURL=uri-utils.js.map","import { __extends } from \"tslib\";\nimport { AbstractMatch } from './abstract-match';\nimport { httpSchemePrefixRe } from '../parser/uri-utils';\n/**\n * A regular expression used to remove the 'www.' from URLs.\n */\nvar wwwPrefixRegex = /^(https?:\\/\\/)?(?:www\\.)?/i;\n/**\n * The regular expression used to remove the protocol-relative '//' from a URL\n * string, for purposes of formatting the anchor text. A protocol-relative URL\n * is, for example, \"//yahoo.com\"\n */\nvar protocolRelativeRegex = /^\\/\\//;\n/**\n * @class Autolinker.match.Url\n * @extends Autolinker.match.AbstractMatch\n *\n * Represents a Url match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar UrlMatch = /** @class */ (function (_super) {\n    __extends(UrlMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function UrlMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @public\n         * @property {'url'} type\n         *\n         * A string name for the type of match that this class represents. Can be\n         * used in a TypeScript discriminating union to type-narrow from the\n         * `Match` type.\n         */\n        _this.type = 'url';\n        /**\n         * @cfg {String} url (required)\n         *\n         * The url that was matched.\n         */\n        _this.url = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {\"scheme\"/\"www\"/\"tld\"} urlMatchType (required)\n         *\n         * The type of URL match that this class represents. This helps to determine\n         * if the match was made in the original text with a prefixed scheme (ex:\n         * 'http://www.google.com'), a prefixed 'www' (ex: 'www.google.com'), or\n         * was matched by a known top-level domain (ex: 'google.com').\n         */\n        _this.urlMatchType = 'scheme'; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} protocolRelativeMatch (required)\n         *\n         * `true` if the URL is a protocol-relative match. A protocol-relative match\n         * is a URL that starts with '//', and will be either http:// or https://\n         * based on the protocol that the site is loaded under.\n         */\n        _this.protocolRelativeMatch = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object} stripPrefix (required)\n         *\n         * The Object form of {@link Autolinker#cfg-stripPrefix}.\n         */\n        _this.stripPrefix = {\n            scheme: true,\n            www: true,\n        }; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} stripTrailingSlash (required)\n         * @inheritdoc Autolinker#cfg-stripTrailingSlash\n         */\n        _this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} decodePercentEncoding (required)\n         * @inheritdoc Autolinker#cfg-decodePercentEncoding\n         */\n        _this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @private\n         * @property {Boolean} protocolPrepended\n         *\n         * Will be set to `true` if the 'http://' protocol has been prepended to the {@link #url} (because the\n         * {@link #url} did not have a protocol)\n         */\n        _this.protocolPrepended = false;\n        _this.urlMatchType = cfg.urlMatchType;\n        _this.url = cfg.url;\n        _this.protocolRelativeMatch = cfg.protocolRelativeMatch;\n        _this.stripPrefix = cfg.stripPrefix;\n        _this.stripTrailingSlash = cfg.stripTrailingSlash;\n        _this.decodePercentEncoding = cfg.decodePercentEncoding;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of UrlMatch, returns 'url'.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getType = function () {\n        return 'url';\n    };\n    /**\n     * Returns a string name for the type of URL match that this class\n     * represents.\n     *\n     * This helps to determine if the match was made in the original text with a\n     * prefixed scheme (ex: 'http://www.google.com'), a prefixed 'www' (ex:\n     * 'www.google.com'), or was matched by a known top-level domain (ex:\n     * 'google.com').\n     *\n     * @return {\"scheme\"/\"www\"/\"tld\"}\n     */\n    UrlMatch.prototype.getUrlMatchType = function () {\n        return this.urlMatchType;\n    };\n    /**\n     * Returns the url that was matched, assuming the protocol to be 'http://' if the original\n     * match was missing a protocol.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getUrl = function () {\n        var url = this.url;\n        // if the url string doesn't begin with a scheme, assume 'http://'\n        if (!this.protocolRelativeMatch &&\n            this.urlMatchType !== 'scheme' &&\n            !this.protocolPrepended) {\n            url = this.url = 'http://' + url;\n            this.protocolPrepended = true;\n        }\n        return url;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getAnchorHref = function () {\n        var url = this.getUrl();\n        return url.replace(/&amp;/g, '&'); // any &amp;'s in the URL should be converted back to '&' if they were displayed as &amp; in the source html\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    UrlMatch.prototype.getAnchorText = function () {\n        var anchorText = this.getMatchedText();\n        if (this.protocolRelativeMatch) {\n            // Strip off any protocol-relative '//' from the anchor text\n            anchorText = stripProtocolRelativePrefix(anchorText);\n        }\n        if (this.stripPrefix.scheme) {\n            anchorText = stripSchemePrefix(anchorText);\n        }\n        if (this.stripPrefix.www) {\n            anchorText = stripWwwPrefix(anchorText);\n        }\n        if (this.stripTrailingSlash) {\n            anchorText = removeTrailingSlash(anchorText); // remove trailing slash, if there is one\n        }\n        if (this.decodePercentEncoding) {\n            anchorText = removePercentEncoding(anchorText);\n        }\n        return anchorText;\n    };\n    return UrlMatch;\n}(AbstractMatch));\nexport { UrlMatch };\n// Utility Functionality\n/**\n * Strips the scheme prefix (such as \"http://\" or \"https://\") from the given\n * `url`.\n *\n * @private\n * @param {String} url The text of the anchor that is being generated, for\n *   which to strip off the url scheme.\n * @return {String} The `url`, with the scheme stripped.\n */\nfunction stripSchemePrefix(url) {\n    return url.replace(httpSchemePrefixRe, '');\n}\n/**\n * Strips the 'www' prefix from the given `url`.\n *\n * @private\n * @param {String} url The text of the anchor that is being generated, for\n *   which to strip off the 'www' if it exists.\n * @return {String} The `url`, with the 'www' stripped.\n */\nfunction stripWwwPrefix(url) {\n    // If the URL doesn't actually include 'www.' in it, skip running the\n    // .replace() regexp on it, which is fairly slow even just to check the\n    // string for the 'www.'s existence. Most URLs these days do not have 'www.'\n    // in it, so most of the time we skip running the .replace(). One other\n    // option in the future is to run a state machine on the `url` string\n    if (!url.includes('www.')) {\n        return url;\n    }\n    else {\n        return url.replace(wwwPrefixRegex, '$1'); // leave any scheme ($1), it one exists\n    }\n}\n/**\n * Strips any protocol-relative '//' from the anchor text.\n *\n * @private\n * @param {String} text The text of the anchor that is being generated, for which to strip off the\n *   protocol-relative prefix (such as stripping off \"//\")\n * @return {String} The `anchorText`, with the protocol-relative prefix stripped.\n */\nfunction stripProtocolRelativePrefix(text) {\n    return text.replace(protocolRelativeRegex, '');\n}\n/**\n * Removes any trailing slash from the given `anchorText`, in preparation for the text to be displayed.\n *\n * @private\n * @param {String} anchorText The text of the anchor that is being generated, for which to remove any trailing\n *   slash ('/') that may exist.\n * @return {String} The `anchorText`, with the trailing slash removed.\n */\nfunction removeTrailingSlash(anchorText) {\n    if (anchorText.charAt(anchorText.length - 1) === '/') {\n        anchorText = anchorText.slice(0, -1);\n    }\n    return anchorText;\n}\n/**\n * Decodes percent-encoded characters from the given `anchorText`, in\n * preparation for the text to be displayed.\n *\n * @private\n * @param {String} anchorText The text of the anchor that is being\n *   generated, for which to decode any percent-encoded characters.\n * @return {String} The `anchorText`, with the percent-encoded characters\n *   decoded.\n */\nfunction removePercentEncoding(anchorText) {\n    // First, convert a few of the known % encodings to the corresponding\n    // HTML entities that could accidentally be interpretted as special\n    // HTML characters\n    // NOTE: This used to be written as 5 separate .replace() calls, but that\n    //       was 25% slower than the current form below according to jsperf\n    var preProcessedEntityAnchorText = anchorText.replace(/%(?:22|26|27|3C|3E)/gi, function (match) {\n        if (match === '%22')\n            return '&quot;'; // %22: '\"' char\n        if (match === '%26')\n            return '&amp;'; // %26: '&' char\n        if (match === '%27')\n            return '&#39;'; // %27: \"'\" char\n        if (match === '%3C' || match === '%3c')\n            return '&lt;'; // %3C: '<' char\n        /*if (match === '%3E' || match === '%3e')*/ return '&gt;'; // %3E: '>' char\n    });\n    // Now attempt to URL-decode the rest of the anchor text. However,\n    // decodeURIComponent() is a slow function. Only call it if we have\n    // remaining %-encoded entities. Adding this check added ~300 ops/sec to\n    // benchmark\n    if (preProcessedEntityAnchorText.includes('%')) {\n        try {\n            return decodeURIComponent(preProcessedEntityAnchorText);\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        }\n        catch (error) {\n            // Invalid % escape sequence in the anchor text, we'll simply return\n            // the preProcessedEntityAnchorText below\n        }\n    }\n    return preProcessedEntityAnchorText;\n}\n//# sourceMappingURL=url-match.js.map","import { isAlphaNumericOrMarkChar, isValidEmailLocalPartSpecialChar } from '../char-utils';\nimport { isKnownTld } from './uri-utils';\n/**\n * A regular expression to match a 'mailto:' prefix on an email address.\n */\nexport var mailtoSchemePrefixRe = /^mailto:/i;\n/**\n * Determines if the given character may start the \"local part\" of an email\n * address. The local part is the part to the left of the '@' sign.\n *\n * Technically according to the email spec, any of the characters in the\n * {@link emailLocalPartCharRegex} can start an email address (including any of\n * the special characters), but this is so rare in the wild and the\n * implementation is much simpler by only starting an email address with a word\n * character. This is especially important when matching the '{' character which\n * generally starts a brace that isn't part of the email address.\n */\nexport var isEmailLocalPartStartChar = isAlphaNumericOrMarkChar; // alias for clarity\n/**\n * Determines if the given character can be part of the \"local part\" of an email\n * address. The local part is the part to the left of the '@' sign.\n *\n * Checking for an email address's start char is handled with {@link #isEmailLocalPartStartChar}\n */\nexport function isEmailLocalPartChar(charCode) {\n    return isEmailLocalPartStartChar(charCode) || isValidEmailLocalPartSpecialChar(charCode);\n}\n/**\n * Determines if the given email address is valid. We consider it valid if it\n * has a valid TLD in its host.\n *\n * @param emailAddress email address\n * @return true is email have valid TLD, false otherwise\n */\nexport function isValidEmail(emailAddress) {\n    var emailAddressTld = emailAddress.split('.').pop(); // as long as we have a valid string (as opposed to null or undefined), we will always get at least one element in the .split('.') array\n    return isKnownTld(emailAddressTld);\n}\n//# sourceMappingURL=email-utils.js.map","import { __extends } from \"tslib\";\nimport { AbstractMatch } from './abstract-match';\n/**\n * @class Autolinker.match.Email\n * @extends Autolinker.match.AbstractMatch\n *\n * Represents a Email match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar EmailMatch = /** @class */ (function (_super) {\n    __extends(EmailMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function EmailMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @public\n         * @property {'email'} type\n         *\n         * A string name for the type of match that this class represents. Can be\n         * used in a TypeScript discriminating union to type-narrow from the\n         * `Match` type.\n         */\n        _this.type = 'email';\n        /**\n         * @cfg {String} email (required)\n         *\n         * The email address that was matched.\n         */\n        _this.email = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.email = cfg.email;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of EmailMatch, returns 'email'.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getType = function () {\n        return 'email';\n    };\n    /**\n     * Returns the email address that was matched.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getEmail = function () {\n        return this.email;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getAnchorHref = function () {\n        return 'mailto:' + this.email;\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    EmailMatch.prototype.getAnchorText = function () {\n        return this.email;\n    };\n    return EmailMatch;\n}(AbstractMatch));\nexport { EmailMatch };\n//# sourceMappingURL=email-match.js.map","import { __extends } from \"tslib\";\nimport { assertNever } from '../utils';\nimport { AbstractMatch } from './abstract-match';\n/**\n * @class Autolinker.match.Hashtag\n * @extends Autolinker.match.AbstractMatch\n *\n * Represents a Hashtag match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\nvar HashtagMatch = /** @class */ (function (_super) {\n    __extends(HashtagMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function HashtagMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @public\n         * @property {'hashtag'} type\n         *\n         * A string name for the type of match that this class represents. Can be\n         * used in a TypeScript discriminating union to type-narrow from the\n         * `Match` type.\n         */\n        _this.type = 'hashtag';\n        /**\n         * @cfg {String} serviceName\n         *\n         * The service to point hashtag matches to. See {@link Autolinker#hashtag}\n         * for available values.\n         */\n        _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} hashtag (required)\n         *\n         * The HashtagMatch that was matched, without the '#'.\n         */\n        _this.hashtag = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.serviceName = cfg.serviceName;\n        _this.hashtag = cfg.hashtag;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of HashtagMatch, returns 'hashtag'.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getType = function () {\n        return 'hashtag';\n    };\n    /**\n     * Returns the configured {@link #serviceName} to point the HashtagMatch to.\n     * Ex: 'facebook', 'twitter'.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getServiceName = function () {\n        return this.serviceName;\n    };\n    /**\n     * Returns the matched hashtag, without the '#' character.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getHashtag = function () {\n        return this.hashtag;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getAnchorHref = function () {\n        var serviceName = this.serviceName, hashtag = this.hashtag;\n        switch (serviceName) {\n            case 'twitter':\n                return 'https://twitter.com/hashtag/' + hashtag;\n            case 'facebook':\n                return 'https://www.facebook.com/hashtag/' + hashtag;\n            case 'instagram':\n                return 'https://instagram.com/explore/tags/' + hashtag;\n            case 'tiktok':\n                return 'https://www.tiktok.com/tag/' + hashtag;\n            case 'youtube':\n                return 'https://youtube.com/hashtag/' + hashtag;\n            /* istanbul ignore next */\n            default:\n                // Should never happen because Autolinker's constructor should block any invalid values, but just in case\n                assertNever(serviceName);\n        }\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    HashtagMatch.prototype.getAnchorText = function () {\n        return '#' + this.hashtag;\n    };\n    /**\n     * Returns the CSS class suffixes that should be used on a tag built with\n     * the match. See {@link Autolinker.match.Match#getCssClassSuffixes} for\n     * details.\n     *\n     * @return {String[]}\n     */\n    HashtagMatch.prototype.getCssClassSuffixes = function () {\n        var cssClassSuffixes = _super.prototype.getCssClassSuffixes.call(this), serviceName = this.getServiceName();\n        if (serviceName) {\n            cssClassSuffixes.push(serviceName);\n        }\n        return cssClassSuffixes;\n    };\n    return HashtagMatch;\n}(AbstractMatch));\nexport { HashtagMatch };\n//# sourceMappingURL=hashtag-match.js.map","import { isDigitChar, isAsciiLetterChar } from '../char-utils';\nvar mentionRegexes = {\n    twitter: /^@\\w{1,15}$/,\n    instagram: /^@[_\\w]{1,30}$/,\n    soundcloud: /^@[-a-z0-9_]{3,25}$/,\n    // TikTok usernames are 1-24 characters containing letters, numbers, underscores\n    // and periods, but cannot end in a period: https://support.tiktok.com/en/getting-started/setting-up-your-profile/changing-your-username\n    tiktok: /^@[.\\w]{1,23}[\\w]$/,\n    // Youtube usernames are 3-30 characters containing letters, numbers, underscores,\n    // dashes, or latin middle dots ('·').\n    // https://support.google.com/youtube/answer/11585688?hl=en&co=GENIE.Platform%3DAndroid#tns\n    youtube: /^@[-.·\\w]{3,30}$/,\n};\n/**\n * Determines if the given character can be part of a mention's text characters.\n *\n * Accepts characters that match the RegExp `/[-\\w.]/`, which are the possible\n * mention characters for any service.\n *\n * We'll confirm the match based on the user-configured service name after the\n * match is found.\n */\nexport function isMentionTextChar(charCode) {\n    return (charCode === 45 /* Char.Dash */ || // '-'\n        charCode === 46 /* Char.Dot */ || // '.'\n        charCode === 95 /* Char.Underscore */ || // '_'\n        isAsciiLetterChar(charCode) ||\n        isDigitChar(charCode));\n}\n/**\n * Determines if the given `mention` text is valid.\n */\nexport function isValidMention(mention, serviceName) {\n    var re = mentionRegexes[serviceName];\n    return re.test(mention);\n}\nexport var mentionServices = [\n    'twitter',\n    'instagram',\n    'soundcloud',\n    'tiktok',\n    'youtube',\n];\n//# sourceMappingURL=mention-utils.js.map","import { __extends } from \"tslib\";\nimport { assertNever } from '../utils';\nimport { AbstractMatch } from './abstract-match';\n/**\n * @class Autolinker.match.Mention\n * @extends Autolinker.match.AbstractMatch\n *\n * Represents a Mention match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar MentionMatch = /** @class */ (function (_super) {\n    __extends(MentionMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function MentionMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @public\n         * @property {'mention'} type\n         *\n         * A string name for the type of match that this class represents. Can be\n         * used in a TypeScript discriminating union to type-narrow from the\n         * `Match` type.\n         */\n        _this.type = 'mention';\n        /**\n         * @cfg {String} serviceName\n         *\n         * The service to point mention matches to. See {@link Autolinker#mention}\n         * for available values.\n         */\n        _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} mention (required)\n         *\n         * The Mention that was matched, without the '@' character.\n         */\n        _this.mention = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.mention = cfg.mention;\n        _this.serviceName = cfg.serviceName;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of MentionMatch, returns 'mention'.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getType = function () {\n        return 'mention';\n    };\n    /**\n     * Returns the mention, without the '@' character.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getMention = function () {\n        return this.mention;\n    };\n    /**\n     * Returns the configured {@link #serviceName} to point the mention to.\n     * Ex: 'instagram', 'twitter', 'soundcloud'.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getServiceName = function () {\n        return this.serviceName;\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getAnchorHref = function () {\n        switch (this.serviceName) {\n            case 'twitter':\n                return 'https://twitter.com/' + this.mention;\n            case 'instagram':\n                return 'https://instagram.com/' + this.mention;\n            case 'soundcloud':\n                return 'https://soundcloud.com/' + this.mention;\n            case 'tiktok':\n                return 'https://www.tiktok.com/@' + this.mention;\n            case 'youtube':\n                return 'https://youtube.com/@' + this.mention;\n            /* istanbul ignore next */\n            default:\n                // Should never happen because Autolinker's constructor should block any invalid values, but just in case.\n                assertNever(this.serviceName);\n        }\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    MentionMatch.prototype.getAnchorText = function () {\n        return '@' + this.mention;\n    };\n    /**\n     * Returns the CSS class suffixes that should be used on a tag built with\n     * the match. See {@link Autolinker.match.Match#getCssClassSuffixes} for\n     * details.\n     *\n     * @return {String[]}\n     */\n    MentionMatch.prototype.getCssClassSuffixes = function () {\n        var cssClassSuffixes = _super.prototype.getCssClassSuffixes.call(this), serviceName = this.getServiceName();\n        if (serviceName) {\n            cssClassSuffixes.push(serviceName);\n        }\n        return cssClassSuffixes;\n    };\n    return MentionMatch;\n}(AbstractMatch));\nexport { MentionMatch };\n//# sourceMappingURL=mention-match.js.map","// Regex that specifies any delimiter char that allows us to treat the number as\n// a phone number rather than just any other number that could appear in text.\nvar hasDelimCharsRe = /[-. ()]/;\n// Over the years, many people have added to this regex, but it should have been\n// split up by country. Maybe one day we can break this down.\nvar mostPhoneNumbers = /(?:(?:(?:(\\+)?\\d{1,3}[-. ]?)?\\(?\\d{3}\\)?[-. ]?\\d{3}[-. ]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-. ]?(?:\\d[-. ]?){6,12}\\d+))([,;]+[0-9]+#?)*/;\n// Regex for Japanese phone numbers\nvar japanesePhoneRe = /(0([1-9]-?[1-9]\\d{3}|[1-9]{2}-?\\d{3}|[1-9]{2}\\d{1}-?\\d{2}|[1-9]{2}\\d{2}-?\\d{1})-?\\d{4}|0[789]0-?\\d{4}-?\\d{4}|050-?\\d{4}-?\\d{4})/;\n// Combined regex\nvar validPhoneNumberRe = new RegExp(\"^\".concat(mostPhoneNumbers.source, \"|\").concat(japanesePhoneRe.source, \"$\"));\n/**\n * Determines if the character is a phone number separator character (i.e.\n * '-', '.', or ' ' (space))\n */\nexport function isPhoneNumberSeparatorChar(charCode) {\n    return (charCode === 45 /* Char.Dash */ || // '-'\n        charCode === 46 /* Char.Dot */ || // '.'\n        charCode === 32 /* Char.Space */ // ' '\n    );\n}\n/**\n * Determines if the character is a control character in a phone number. Control\n * characters are as follows:\n *\n * - ',': A 1 second pause. Useful for dialing extensions once the main phone number has been reached\n * - ';': A \"wait\" that waits for the user to take action (tap something, for instance on a smart phone)\n */\nexport function isPhoneNumberControlChar(charCode) {\n    return (charCode === 44 /* Char.Comma */ || // ','\n        charCode === 59 /* Char.SemiColon */ // ';'\n    );\n}\n/**\n * Determines if the given phone number text found in a string is a valid phone\n * number.\n *\n * Our state machine parser is simplified to grab anything that looks like a\n * phone number, and this function confirms the match.\n */\nexport function isValidPhoneNumber(phoneNumberText) {\n    // We'll only consider the match as a phone number if there is some kind of\n    // delimiter character (a prefixed '+' sign, or separator chars).\n    //\n    // Accepts:\n    //     (123) 456-7890\n    //     +38755233976\n    // Does not accept:\n    //     1234567890  (no delimiter chars - may just be a random number that's not a phone number)\n    var hasDelimiters = phoneNumberText.charAt(0) === '+' || hasDelimCharsRe.test(phoneNumberText);\n    return hasDelimiters && validPhoneNumberRe.test(phoneNumberText);\n}\n//# sourceMappingURL=phone-number-utils.js.map","import { __extends } from \"tslib\";\nimport { AbstractMatch } from './abstract-match';\n/**\n * @class Autolinker.match.Phone\n * @extends Autolinker.match.AbstractMatch\n *\n * Represents a Phone number match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\nvar PhoneMatch = /** @class */ (function (_super) {\n    __extends(PhoneMatch, _super);\n    /**\n     * @method constructor\n     * @param {Object} cfg The configuration properties for the Match\n     *   instance, specified in an Object (map).\n     */\n    function PhoneMatch(cfg) {\n        var _this = _super.call(this, cfg) || this;\n        /**\n         * @public\n         * @property {'phone'} type\n         *\n         * A string name for the type of match that this class represents. Can be\n         * used in a TypeScript discriminating union to type-narrow from the\n         * `Match` type.\n         */\n        _this.type = 'phone';\n        /**\n         * @protected\n         * @property {String} number (required)\n         *\n         * The phone number that was matched, without any delimiter characters.\n         *\n         * Note: This is a string to allow for prefixed 0's.\n         */\n        _this.number = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @protected\n         * @property  {Boolean} plusSign (required)\n         *\n         * `true` if the matched phone number started with a '+' sign. We'll include\n         * it in the `tel:` URL if so, as this is needed for international numbers.\n         *\n         * Ex: '+1 (123) 456 7879'\n         */\n        _this.plusSign = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        _this.number = cfg.number;\n        _this.plusSign = cfg.plusSign;\n        return _this;\n    }\n    /**\n     * Returns a string name for the type of match that this class represents.\n     * For the case of PhoneMatch, returns 'phone'.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getType = function () {\n        return 'phone';\n    };\n    /**\n     * Returns the phone number that was matched as a string, without any\n     * delimiter characters.\n     *\n     * Note: This is a string to allow for prefixed 0's.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getPhoneNumber = function () {\n        return this.number;\n    };\n    /**\n     * Alias of {@link #getPhoneNumber}, returns the phone number that was\n     * matched as a string, without any delimiter characters.\n     *\n     * Note: This is a string to allow for prefixed 0's.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getNumber = function () {\n        return this.getPhoneNumber();\n    };\n    /**\n     * Returns the anchor href that should be generated for the match.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getAnchorHref = function () {\n        return 'tel:' + (this.plusSign ? '+' : '') + this.number;\n    };\n    /**\n     * Returns the anchor text that should be generated for the match.\n     *\n     * @return {String}\n     */\n    PhoneMatch.prototype.getAnchorText = function () {\n        return this.matchedText;\n    };\n    return PhoneMatch;\n}(AbstractMatch));\nexport { PhoneMatch };\n//# sourceMappingURL=phone-match.js.map","import { UrlMatch } from '../match/url-match';\nimport { assertNever } from '../utils';\nimport { httpSchemeRe, isDomainLabelChar, isDomainLabelStartChar, isPathChar, isSchemeChar, isSchemeStartChar, isUrlSuffixStartChar, isValidIpV4Address, isValidSchemeUrl, isValidTldMatch, } from './uri-utils';\nimport { isEmailLocalPartChar, isEmailLocalPartStartChar, isValidEmail, mailtoSchemePrefixRe, } from './email-utils';\nimport { EmailMatch } from '../match/email-match';\nimport { isHashtagTextChar, isValidHashtag } from './hashtag-utils';\nimport { HashtagMatch } from '../match/hashtag-match';\nimport { isMentionTextChar, isValidMention } from './mention-utils';\nimport { MentionMatch } from '../match/mention-match';\nimport { isPhoneNumberSeparatorChar, isPhoneNumberControlChar, isValidPhoneNumber, } from './phone-number-utils';\nimport { PhoneMatch } from '../match/phone-match';\nimport { isAlphaNumericOrMarkChar, isCloseBraceChar, isDigitChar, isOpenBraceChar, isUrlSuffixNotAllowedAsFinalChar, } from '../char-utils';\n// For debugging: search for and uncomment other \"For debugging\" lines\n// import CliTable from 'cli-table';\n/**\n * Context object containing all the state needed by the state machine functions.\n *\n * ## Historical note\n *\n * In v4.1.1, we used nested functions to handle the context via closures, but\n * this necessitated re-creating the functions for each call to `parseMatches()`,\n * which made them difficult for v8 to JIT optimize. In v4.1.2, we lifted all of\n * the functions to the top-level scope and passed the context object between\n * them, which allows the functions to be JIT compiled once and reused.\n */\nvar ParseMatchesContext = /** @class */ (function () {\n    function ParseMatchesContext(text, args) {\n        this.charIdx = 0; // Current character index being processed\n        this.matches = []; // Collection of matches found\n        this._stateMachines = []; // Array of active state machines\n        this.schemeUrlMachinesCount = 0; // part of an optimization to remove the need to go into a slow code block when unnecessary. Since it's been so long since the initial implementation, not sure that this can ever go above 1, but keeping it as a counter to be safe\n        this.text = text;\n        this.tagBuilder = args.tagBuilder;\n        this.stripPrefix = args.stripPrefix;\n        this.stripTrailingSlash = args.stripTrailingSlash;\n        this.decodePercentEncoding = args.decodePercentEncoding;\n        this.hashtagServiceName = args.hashtagServiceName;\n        this.mentionServiceName = args.mentionServiceName;\n    }\n    Object.defineProperty(ParseMatchesContext.prototype, \"stateMachines\", {\n        get: function () {\n            return this._stateMachines;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ParseMatchesContext.prototype.addMachine = function (stateMachine) {\n        this._stateMachines.push(stateMachine);\n        if (isSchemeUrlStateMachine(stateMachine)) {\n            this.schemeUrlMachinesCount++;\n        }\n    };\n    ParseMatchesContext.prototype.removeMachine = function (stateMachine) {\n        // Performance note: this was originally implemented with Array.prototype.splice()\n        // and mutated the array in place. Switching to filter added ~280ops/sec\n        // on the benchmark, although likely at the expense of GC time. Perhaps\n        // in the future, we implement a rotating array so we never need to move\n        // or clean anything up\n        this._stateMachines = this._stateMachines.filter(function (m) { return m !== stateMachine; });\n        // If we've removed the URL state machine, set the flag to false.\n        // This flag is a quick test that helps us skip a slow section of\n        // code when there is already a URL state machine present.\n        if (isSchemeUrlStateMachine(stateMachine)) {\n            this.schemeUrlMachinesCount--;\n        }\n    };\n    ParseMatchesContext.prototype.hasSchemeUrlMachine = function () {\n        return this.schemeUrlMachinesCount > 0;\n    };\n    return ParseMatchesContext;\n}());\n/**\n * Parses URL, email, twitter, mention, and hashtag matches from the given\n * `text`.\n */\nexport function parseMatches(text, args) {\n    // Create the context object that will be passed to all state functions\n    var context = new ParseMatchesContext(text, args);\n    // For debugging: search for and uncomment other \"For debugging\" lines\n    // const table = new CliTable({\n    //     head: ['charIdx', 'char', 'code', 'type', 'states', 'startIdx', 'reached accept state'],\n    // });\n    for (; context.charIdx < context.text.length; context.charIdx++) {\n        var char = text.charAt(context.charIdx);\n        var charCode = text.charCodeAt(context.charIdx);\n        if (context.stateMachines.length === 0) {\n            stateNoMatch(context, char, charCode);\n        }\n        else {\n            // Must loop through the state machines backwards for when one\n            // is removed\n            for (var stateIdx = context.stateMachines.length - 1; stateIdx >= 0; stateIdx--) {\n                var stateMachine = context.stateMachines[stateIdx];\n                switch (stateMachine.state) {\n                    // Protocol-relative URL states\n                    case 11 /* State.ProtocolRelativeSlash1 */:\n                        stateProtocolRelativeSlash1(context, stateMachine, charCode);\n                        break;\n                    case 12 /* State.ProtocolRelativeSlash2 */:\n                        stateProtocolRelativeSlash2(context, stateMachine, charCode);\n                        break;\n                    case 0 /* State.SchemeChar */:\n                        stateSchemeChar(context, stateMachine, charCode);\n                        break;\n                    case 1 /* State.SchemeHyphen */:\n                        stateSchemeHyphen(context, stateMachine, charCode);\n                        break;\n                    case 2 /* State.SchemeColon */:\n                        stateSchemeColon(context, stateMachine, charCode);\n                        break;\n                    case 3 /* State.SchemeSlash1 */:\n                        stateSchemeSlash1(context, stateMachine, charCode);\n                        break;\n                    case 4 /* State.SchemeSlash2 */:\n                        stateSchemeSlash2(context, stateMachine, char, charCode);\n                        break;\n                    case 5 /* State.DomainLabelChar */:\n                        stateDomainLabelChar(context, stateMachine, charCode);\n                        break;\n                    case 6 /* State.DomainHyphen */:\n                        stateDomainHyphen(context, stateMachine, char, charCode);\n                        break;\n                    case 7 /* State.DomainDot */:\n                        stateDomainDot(context, stateMachine, char, charCode);\n                        break;\n                    case 13 /* State.IpV4Digit */:\n                        stateIpV4Digit(context, stateMachine, charCode);\n                        break;\n                    case 14 /* State.IpV4Dot */:\n                        stateIpV4Dot(context, stateMachine, charCode);\n                        break;\n                    case 8 /* State.PortColon */:\n                        statePortColon(context, stateMachine, charCode);\n                        break;\n                    case 9 /* State.PortNumber */:\n                        statePortNumber(context, stateMachine, charCode);\n                        break;\n                    case 10 /* State.Path */:\n                        statePath(context, stateMachine, charCode);\n                        break;\n                    // Email States\n                    case 15 /* State.EmailMailto_M */:\n                        stateEmailMailto_M(context, stateMachine, char, charCode);\n                        break;\n                    case 16 /* State.EmailMailto_A */:\n                        stateEmailMailto_A(context, stateMachine, char, charCode);\n                        break;\n                    case 17 /* State.EmailMailto_I */:\n                        stateEmailMailto_I(context, stateMachine, char, charCode);\n                        break;\n                    case 18 /* State.EmailMailto_L */:\n                        stateEmailMailto_L(context, stateMachine, char, charCode);\n                        break;\n                    case 19 /* State.EmailMailto_T */:\n                        stateEmailMailto_T(context, stateMachine, char, charCode);\n                        break;\n                    case 20 /* State.EmailMailto_O */:\n                        stateEmailMailto_O(context, stateMachine, charCode);\n                        break;\n                    case 21 /* State.EmailMailto_Colon */:\n                        stateEmailMailtoColon(context, stateMachine, charCode);\n                        break;\n                    case 22 /* State.EmailLocalPart */:\n                        stateEmailLocalPart(context, stateMachine, charCode);\n                        break;\n                    case 23 /* State.EmailLocalPartDot */:\n                        stateEmailLocalPartDot(context, stateMachine, charCode);\n                        break;\n                    case 24 /* State.EmailAtSign */:\n                        stateEmailAtSign(context, stateMachine, charCode);\n                        break;\n                    case 25 /* State.EmailDomainChar */:\n                        stateEmailDomainChar(context, stateMachine, charCode);\n                        break;\n                    case 26 /* State.EmailDomainHyphen */:\n                        stateEmailDomainHyphen(context, stateMachine, charCode);\n                        break;\n                    case 27 /* State.EmailDomainDot */:\n                        stateEmailDomainDot(context, stateMachine, charCode);\n                        break;\n                    // Hashtag states\n                    case 28 /* State.HashtagHashChar */:\n                        stateHashtagHashChar(context, stateMachine, charCode);\n                        break;\n                    case 29 /* State.HashtagTextChar */:\n                        stateHashtagTextChar(context, stateMachine, charCode);\n                        break;\n                    // Mention states\n                    case 30 /* State.MentionAtChar */:\n                        stateMentionAtChar(context, stateMachine, charCode);\n                        break;\n                    case 31 /* State.MentionTextChar */:\n                        stateMentionTextChar(context, stateMachine, charCode);\n                        break;\n                    // Phone number states\n                    case 32 /* State.PhoneNumberOpenParen */:\n                        statePhoneNumberOpenParen(context, stateMachine, char, charCode);\n                        break;\n                    case 33 /* State.PhoneNumberAreaCodeDigit1 */:\n                        statePhoneNumberAreaCodeDigit1(context, stateMachine, charCode);\n                        break;\n                    case 34 /* State.PhoneNumberAreaCodeDigit2 */:\n                        statePhoneNumberAreaCodeDigit2(context, stateMachine, charCode);\n                        break;\n                    case 35 /* State.PhoneNumberAreaCodeDigit3 */:\n                        statePhoneNumberAreaCodeDigit3(context, stateMachine, charCode);\n                        break;\n                    case 36 /* State.PhoneNumberCloseParen */:\n                        statePhoneNumberCloseParen(context, stateMachine, char, charCode);\n                        break;\n                    case 37 /* State.PhoneNumberPlus */:\n                        statePhoneNumberPlus(context, stateMachine, char, charCode);\n                        break;\n                    case 38 /* State.PhoneNumberDigit */:\n                        statePhoneNumberDigit(context, stateMachine, char, charCode);\n                        break;\n                    case 39 /* State.PhoneNumberSeparator */:\n                        statePhoneNumberSeparator(context, stateMachine, char, charCode);\n                        break;\n                    case 40 /* State.PhoneNumberControlChar */:\n                        statePhoneNumberControlChar(context, stateMachine, charCode);\n                        break;\n                    case 41 /* State.PhoneNumberPoundChar */:\n                        statePhoneNumberPoundChar(context, stateMachine, charCode);\n                        break;\n                    /* istanbul ignore next */\n                    default:\n                        assertNever(stateMachine.state);\n                }\n            }\n            // Special case for handling a colon (or other non-alphanumeric)\n            // when preceded by another character, such as in the text:\n            //     Link 1:http://google.com\n            // In this case, the 'h' character after the colon wouldn't start a\n            // new scheme url because we'd be in a ipv4 or tld url and the colon\n            // would be interpreted as a port ':' char. Also, only start a new\n            // scheme url machine if there isn't currently one so we don't start\n            // new ones for colons inside a url\n            //\n            // TODO: The addition of this snippet (to fix the bug) in 4.0.1 lost\n            // us ~500 ops/sec on the benchmarks. Optimizing it with the\n            // hasSchemeUrlMachine() flag and optimizing the isSchemeStartChar()\n            // method for 4.1.3 got us back about ~400ops/sec. One potential way\n            // to improve this even ore is to add this snippet to individual\n            // state handler functions where it can occur to prevent running it\n            // on every loop interation.\n            if (!context.hasSchemeUrlMachine() &&\n                context.charIdx > 0 &&\n                isSchemeStartChar(charCode)) {\n                var prevCharCode = context.text.charCodeAt(context.charIdx - 1);\n                if (!isSchemeStartChar(prevCharCode)) {\n                    context.addMachine(createSchemeUrlStateMachine(context.charIdx, 0 /* State.SchemeChar */));\n                }\n            }\n        }\n        // For debugging: search for and uncomment other \"For debugging\" lines\n        // table.push([\n        //     String(context.charIdx),\n        //     char,\n        //     `10: ${char.charCodeAt(0)}\\n0x: ${char.charCodeAt(0).toString(16)}\\nU+${char.codePointAt(0)}`,\n        //     context.stateMachines.map(machine => `${StateMachineType[machine.type]}${'matchType' in machine ? ` (${UrlStateMachineMatchType[machine.matchType]})` : ''}`).join('\\n') || '(none)',\n        //     context.stateMachines.map(machine => State[machine.state]).join('\\n') || '(none)',\n        //     context.stateMachines.map(m => m.startIdx).join('\\n'),\n        //     context.stateMachines.map(m => m.acceptStateReached).join('\\n'),\n        // ]);\n    }\n    // Capture any valid match at the end of the string\n    // Note: this loop must happen in reverse because\n    // captureMatchIfValidAndRemove() removes state machines from the array\n    // and we'll end up skipping every other one if we remove while looping\n    // forward\n    for (var i = context.stateMachines.length - 1; i >= 0; i--) {\n        context.stateMachines.forEach(function (stateMachine) {\n            return captureMatchIfValidAndRemove(context, stateMachine);\n        });\n    }\n    // For debugging: search for and uncomment other \"For debugging\" lines\n    // console.log(`\\nRead string:\\n  ${text}`);\n    // console.log(table.toString());\n    return context.matches;\n}\n/**\n * Handles the state when we're not in a URL/email/etc. (i.e. when no state machines exist)\n */\nfunction stateNoMatch(context, char, charCode) {\n    var charIdx = context.charIdx;\n    if (charCode === 35 /* Char.NumberSign */ /* '#' */) {\n        // Hash char, start a Hashtag match\n        context.addMachine(createHashtagStateMachine(charIdx, 28 /* State.HashtagHashChar */));\n    }\n    else if (charCode === 64 /* Char.AtSign */ /* '@' */) {\n        // '@' char, start a Mention match\n        context.addMachine(createMentionStateMachine(charIdx, 30 /* State.MentionAtChar */));\n    }\n    else if (charCode === 47 /* Char.Slash */ /* '/' */) {\n        // A slash could begin a protocol-relative URL\n        context.addMachine(createTldUrlStateMachine(charIdx, 11 /* State.ProtocolRelativeSlash1 */));\n    }\n    else if (charCode === 43 /* Char.Plus */ /* '+' */) {\n        // A '+' char can start a Phone number\n        context.addMachine(createPhoneNumberStateMachine(charIdx, 37 /* State.PhoneNumberPlus */));\n    }\n    else if (charCode === 40 /* Char.OpenParen */ /* '(' */) {\n        context.addMachine(createPhoneNumberStateMachine(charIdx, 32 /* State.PhoneNumberOpenParen */));\n    }\n    else {\n        if (isDigitChar(charCode)) {\n            // A digit could start a phone number\n            context.addMachine(createPhoneNumberStateMachine(charIdx, 38 /* State.PhoneNumberDigit */));\n            // A digit could start an IP address\n            context.addMachine(createIpV4UrlStateMachine(charIdx, 13 /* State.IpV4Digit */));\n        }\n        if (isEmailLocalPartStartChar(charCode)) {\n            // Any email local part. An 'm' character in particular could\n            // start a 'mailto:' match\n            var startState = char.toLowerCase() === 'm' ? 15 /* State.EmailMailto_M */ : 22 /* State.EmailLocalPart */;\n            context.addMachine(createEmailStateMachine(charIdx, startState));\n        }\n        if (isSchemeStartChar(charCode)) {\n            // An uppercase or lowercase letter may start a scheme match\n            context.addMachine(createSchemeUrlStateMachine(charIdx, 0 /* State.SchemeChar */));\n        }\n        if (isAlphaNumericOrMarkChar(charCode)) {\n            // A unicode alpha character or digit could start a domain name\n            // label for a TLD match\n            context.addMachine(createTldUrlStateMachine(charIdx, 5 /* State.DomainLabelChar */));\n        }\n    }\n    // Anything else, remain in the \"non-url\" state by not creating any\n    // state machines\n}\n// Implements ABNF: ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nfunction stateSchemeChar(context, stateMachine, charCode) {\n    if (charCode === 58 /* Char.Colon */ /* ':' */) {\n        stateMachine.state = 2 /* State.SchemeColon */;\n    }\n    else if (charCode === 45 /* Char.Dash */ /* '-' */) {\n        stateMachine.state = 1 /* State.SchemeHyphen */;\n    }\n    else if (isSchemeChar(charCode)) {\n        // Stay in SchemeChar state\n    }\n    else {\n        // Any other character, not a scheme\n        context.removeMachine(stateMachine);\n    }\n}\nfunction stateSchemeHyphen(context, stateMachine, charCode) {\n    var charIdx = context.charIdx;\n    if (charCode === 45 /* Char.Dash */ /* '-' */) {\n        // Stay in SchemeHyphen state\n        // TODO: Should a colon following a dash be counted as the end of the scheme?\n        // } else if (char === ':') {\n        //     stateMachine.state = State.SchemeColon;\n    }\n    else if (charCode === 47 /* Char.Slash */ /* '/' */) {\n        // Not a valid scheme match, but may be the start of a\n        // protocol-relative match (such as //google.com)\n        context.removeMachine(stateMachine);\n        context.addMachine(createTldUrlStateMachine(charIdx, 11 /* State.ProtocolRelativeSlash1 */));\n    }\n    else if (isSchemeChar(charCode)) {\n        stateMachine.state = 0 /* State.SchemeChar */;\n    }\n    else {\n        // Any other character, not a scheme\n        context.removeMachine(stateMachine);\n    }\n}\n// https://tools.ietf.org/html/rfc3986#appendix-A\nfunction stateSchemeColon(context, stateMachine, charCode) {\n    var charIdx = context.charIdx;\n    if (charCode === 47 /* Char.Slash */ /* '/' */) {\n        stateMachine.state = 3 /* State.SchemeSlash1 */;\n    }\n    else if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        // We've read something like 'hello:.' - don't capture\n        context.removeMachine(stateMachine);\n    }\n    else if (isDomainLabelStartChar(charCode)) {\n        stateMachine.state = 5 /* State.DomainLabelChar */;\n        // It's possible that we read an \"introduction\" piece of text,\n        // and the character after the current colon actually starts an\n        // actual scheme. An example of this is:\n        //     \"The link:http://google.com\"\n        // Hence, start a new machine to capture this match if so\n        if (isSchemeStartChar(charCode)) {\n            context.addMachine(createSchemeUrlStateMachine(charIdx, 0 /* State.SchemeChar */));\n        }\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\n// https://tools.ietf.org/html/rfc3986#appendix-A\nfunction stateSchemeSlash1(context, stateMachine, charCode) {\n    if (charCode === 47 /* Char.Slash */ /* '/' */) {\n        stateMachine.state = 4 /* State.SchemeSlash2 */;\n    }\n    else if (isPathChar(charCode)) {\n        stateMachine.state = 10 /* State.Path */;\n        stateMachine.acceptStateReached = true;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction stateSchemeSlash2(context, stateMachine, char, charCode) {\n    if (charCode === 47 /* Char.Slash */ /* '/' */) {\n        // 3rd slash, must be an absolute path (`path-absolute` in the\n        // ABNF), such as in \"file:///c:/windows/etc\". See\n        // https://tools.ietf.org/html/rfc3986#appendix-A\n        stateMachine.state = 10 /* State.Path */;\n        stateMachine.acceptStateReached = true;\n    }\n    else if (isDomainLabelStartChar(charCode)) {\n        // start of \"authority\" section - see https://tools.ietf.org/html/rfc3986#appendix-A\n        stateMachine.state = 5 /* State.DomainLabelChar */;\n        stateMachine.acceptStateReached = true;\n    }\n    else {\n        // not valid\n        context.removeMachine(stateMachine);\n    }\n}\n// Handles after we've read a '/' from the NonUrl state\nfunction stateProtocolRelativeSlash1(context, stateMachine, charCode) {\n    if (charCode === 47 /* Char.Slash */ /* '/' */) {\n        stateMachine.state = 12 /* State.ProtocolRelativeSlash2 */;\n    }\n    else {\n        // Anything else, cannot be the start of a protocol-relative\n        // URL.\n        context.removeMachine(stateMachine);\n    }\n}\n// Handles after we've read a second '/', which could start a protocol-relative URL\nfunction stateProtocolRelativeSlash2(context, stateMachine, charCode) {\n    if (isDomainLabelStartChar(charCode)) {\n        stateMachine.state = 5 /* State.DomainLabelChar */;\n    }\n    else {\n        // Anything else, not a URL\n        context.removeMachine(stateMachine);\n    }\n}\n// Handles when we have read a domain label character\nfunction stateDomainLabelChar(context, stateMachine, charCode) {\n    if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        stateMachine.state = 7 /* State.DomainDot */;\n    }\n    else if (charCode === 45 /* Char.Dash */ /* '-' */) {\n        stateMachine.state = 6 /* State.DomainHyphen */;\n    }\n    else if (charCode === 58 /* Char.Colon */ /* ':' */) {\n        // Beginning of a port number, end the domain name\n        stateMachine.state = 8 /* State.PortColon */;\n    }\n    else if (isUrlSuffixStartChar(charCode)) {\n        // '/', '?', or '#'\n        stateMachine.state = 10 /* State.Path */;\n    }\n    else if (isDomainLabelChar(charCode)) {\n        // Stay in the DomainLabelChar state\n    }\n    else {\n        // Anything else, end the domain name\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction stateDomainHyphen(context, stateMachine, char, charCode) {\n    if (charCode === 45 /* Char.Dash */ /* '-' */) {\n        // Remain in the DomainHyphen state\n    }\n    else if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        // Not valid to have a '-.' in a domain label\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n    else if (isDomainLabelStartChar(charCode)) {\n        stateMachine.state = 5 /* State.DomainLabelChar */;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction stateDomainDot(context, stateMachine, char, charCode) {\n    if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        // domain names cannot have multiple '.'s next to each other.\n        // It's possible we've already read a valid domain name though,\n        // and that the '..' sequence just forms an ellipsis at the end\n        // of a sentence\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n    else if (isDomainLabelStartChar(charCode)) {\n        stateMachine.state = 5 /* State.DomainLabelChar */;\n        stateMachine.acceptStateReached = true; // after hitting a dot, and then another domain label, we've reached an accept state\n    }\n    else {\n        // Anything else, end the domain name\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction stateIpV4Digit(context, stateMachine, charCode) {\n    if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        stateMachine.state = 14 /* State.IpV4Dot */;\n    }\n    else if (charCode === 58 /* Char.Colon */ /* ':' */) {\n        // Beginning of a port number\n        stateMachine.state = 8 /* State.PortColon */;\n    }\n    else if (isDigitChar(charCode)) {\n        // stay in the IPv4 digit state\n    }\n    else if (isUrlSuffixStartChar(charCode)) {\n        stateMachine.state = 10 /* State.Path */;\n    }\n    else if (isAlphaNumericOrMarkChar(charCode)) {\n        // If we hit an alpha character, must not be an IPv4\n        // Example of this: 1.2.3.4abc\n        context.removeMachine(stateMachine);\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction stateIpV4Dot(context, stateMachine, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.octetsEncountered++;\n        // Once we have encountered 4 octets, it's *potentially* a valid\n        // IPv4 address. Our IPv4 regex will confirm the match later\n        // though to make sure each octet is in the 0-255 range, and\n        // there's exactly 4 octets (not 5 or more)\n        if (stateMachine.octetsEncountered === 4) {\n            stateMachine.acceptStateReached = true;\n        }\n        stateMachine.state = 13 /* State.IpV4Digit */;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction statePortColon(context, stateMachine, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.state = 9 /* State.PortNumber */;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction statePortNumber(context, stateMachine, charCode) {\n    if (isDigitChar(charCode)) {\n        // Stay in port number state\n    }\n    else if (isUrlSuffixStartChar(charCode)) {\n        // '/', '?', or '#'\n        stateMachine.state = 10 /* State.Path */;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction statePath(context, stateMachine, charCode) {\n    if (isPathChar(charCode)) {\n        // Stay in the path state\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\n// Handles if we're reading a 'mailto:' prefix on the string\nfunction stateEmailMailto_M(context, stateMachine, char, charCode) {\n    if (char.toLowerCase() === 'a') {\n        stateMachine.state = 16 /* State.EmailMailto_A */;\n    }\n    else {\n        stateEmailLocalPart(context, stateMachine, charCode);\n    }\n}\nfunction stateEmailMailto_A(context, stateMachine, char, charCode) {\n    if (char.toLowerCase() === 'i') {\n        stateMachine.state = 17 /* State.EmailMailto_I */;\n    }\n    else {\n        stateEmailLocalPart(context, stateMachine, charCode);\n    }\n}\nfunction stateEmailMailto_I(context, stateMachine, char, charCode) {\n    if (char.toLowerCase() === 'l') {\n        stateMachine.state = 18 /* State.EmailMailto_L */;\n    }\n    else {\n        stateEmailLocalPart(context, stateMachine, charCode);\n    }\n}\nfunction stateEmailMailto_L(context, stateMachine, char, charCode) {\n    if (char.toLowerCase() === 't') {\n        stateMachine.state = 19 /* State.EmailMailto_T */;\n    }\n    else {\n        stateEmailLocalPart(context, stateMachine, charCode);\n    }\n}\nfunction stateEmailMailto_T(context, stateMachine, char, charCode) {\n    if (char.toLowerCase() === 'o') {\n        stateMachine.state = 20 /* State.EmailMailto_O */;\n    }\n    else {\n        stateEmailLocalPart(context, stateMachine, charCode);\n    }\n}\nfunction stateEmailMailto_O(context, stateMachine, charCode) {\n    if (charCode === 58 /* Char.Colon */ /* ':' */) {\n        stateMachine.state = 21 /* State.EmailMailto_Colon */;\n    }\n    else {\n        stateEmailLocalPart(context, stateMachine, charCode);\n    }\n}\nfunction stateEmailMailtoColon(context, stateMachine, charCode) {\n    if (isEmailLocalPartChar(charCode)) {\n        stateMachine.state = 22 /* State.EmailLocalPart */;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\n// Handles the state when we're currently in the \"local part\" of an\n// email address (as opposed to the \"domain part\")\nfunction stateEmailLocalPart(context, stateMachine, charCode) {\n    if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        stateMachine.state = 23 /* State.EmailLocalPartDot */;\n    }\n    else if (charCode === 64 /* Char.AtSign */ /* '@' */) {\n        stateMachine.state = 24 /* State.EmailAtSign */;\n    }\n    else if (isEmailLocalPartChar(charCode)) {\n        // stay in the \"local part\" of the email address\n        // Note: because stateEmailLocalPart() is called from the\n        // 'mailto' states (when the 'mailto' prefix itself has been\n        // broken), make sure to set the state to EmailLocalPart\n        stateMachine.state = 22 /* State.EmailLocalPart */;\n    }\n    else {\n        // not an email address character\n        context.removeMachine(stateMachine);\n    }\n}\n// Handles the state where we've read a '.' character in the local part of\n// the email address (i.e. the part before the '@' character)\nfunction stateEmailLocalPartDot(context, stateMachine, charCode) {\n    if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        // We read a second '.' in a row, not a valid email address\n        // local part\n        context.removeMachine(stateMachine);\n    }\n    else if (charCode === 64 /* Char.AtSign */ /* '@' */) {\n        // We read the '@' character immediately after a dot ('.'), not\n        // an email address\n        context.removeMachine(stateMachine);\n    }\n    else if (isEmailLocalPartChar(charCode)) {\n        stateMachine.state = 22 /* State.EmailLocalPart */;\n    }\n    else {\n        // Anything else, not an email address\n        context.removeMachine(stateMachine);\n    }\n}\nfunction stateEmailAtSign(context, stateMachine, charCode) {\n    if (isDomainLabelStartChar(charCode)) {\n        stateMachine.state = 25 /* State.EmailDomainChar */;\n    }\n    else {\n        // Anything else, not an email address\n        context.removeMachine(stateMachine);\n    }\n}\nfunction stateEmailDomainChar(context, stateMachine, charCode) {\n    if (charCode === 46 /* Char.Dot */ /* '.' */) {\n        stateMachine.state = 27 /* State.EmailDomainDot */;\n    }\n    else if (charCode === 45 /* Char.Dash */ /* '-' */) {\n        stateMachine.state = 26 /* State.EmailDomainHyphen */;\n    }\n    else if (isDomainLabelChar(charCode)) {\n        // Stay in the DomainChar state\n    }\n    else {\n        // Anything else, we potentially matched if the criteria has\n        // been met\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction stateEmailDomainHyphen(context, stateMachine, charCode) {\n    if (charCode === 45 /* Char.Dash */ /* '-' */ || charCode === 46 /* Char.Dot */ /* '.' */) {\n        // Not valid to have two hyphens (\"--\") or hypen+dot (\"-.\")\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n    else if (isDomainLabelChar(charCode)) {\n        stateMachine.state = 25 /* State.EmailDomainChar */;\n    }\n    else {\n        // Anything else\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction stateEmailDomainDot(context, stateMachine, charCode) {\n    if (charCode === 46 /* Char.Dot */ /* '.' */ || charCode === 45 /* Char.Dash */ /* '-' */) {\n        // not valid to have two dots (\"..\") or dot+hypen (\".-\")\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n    else if (isDomainLabelStartChar(charCode)) {\n        stateMachine.state = 25 /* State.EmailDomainChar */;\n        // After having read a '.' and then a valid domain character,\n        // we now know that the domain part of the email is valid, and\n        // we have found at least a partial EmailMatch (however, the\n        // email address may have additional characters from this point)\n        stateMachine.acceptStateReached = true;\n    }\n    else {\n        // Anything else\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\n// Handles the state when we've just encountered a '#' character\nfunction stateHashtagHashChar(context, stateMachine, charCode) {\n    if (isHashtagTextChar(charCode)) {\n        // '#' char with valid hash text char following\n        stateMachine.state = 29 /* State.HashtagTextChar */;\n        stateMachine.acceptStateReached = true;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\n// Handles the state when we're currently in the hash tag's text chars\nfunction stateHashtagTextChar(context, stateMachine, charCode) {\n    if (isHashtagTextChar(charCode)) {\n        // Continue reading characters in the HashtagText state\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\n// Handles the state when we've just encountered a '@' character\nfunction stateMentionAtChar(context, stateMachine, charCode) {\n    if (isMentionTextChar(charCode)) {\n        // '@' char with valid mention text char following\n        stateMachine.state = 31 /* State.MentionTextChar */;\n        stateMachine.acceptStateReached = true;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\n// Handles the state when we're currently in the mention's text chars\nfunction stateMentionTextChar(context, stateMachine, charCode) {\n    if (isMentionTextChar(charCode)) {\n        // Continue reading characters in the HashtagText state\n    }\n    else if (isAlphaNumericOrMarkChar(charCode)) {\n        // Char is invalid for a mention text char, not a valid match.\n        // Note that ascii alphanumeric chars are okay (which are tested\n        // in the previous 'if' statement, but others are not)\n        context.removeMachine(stateMachine);\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\nfunction statePhoneNumberPlus(context, stateMachine, char, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.state = 38 /* State.PhoneNumberDigit */;\n    }\n    else {\n        context.removeMachine(stateMachine);\n        // This character may start a new match. Add states for it\n        stateNoMatch(context, char, charCode);\n    }\n}\nfunction statePhoneNumberOpenParen(context, stateMachine, char, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.state = 33 /* State.PhoneNumberAreaCodeDigit1 */;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n    // It's also possible that the paren was just an open brace for\n    // a piece of text. Start other machines\n    stateNoMatch(context, char, charCode);\n}\nfunction statePhoneNumberAreaCodeDigit1(context, stateMachine, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.state = 34 /* State.PhoneNumberAreaCodeDigit2 */;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\nfunction statePhoneNumberAreaCodeDigit2(context, stateMachine, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.state = 35 /* State.PhoneNumberAreaCodeDigit3 */;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\nfunction statePhoneNumberAreaCodeDigit3(context, stateMachine, charCode) {\n    if (charCode === 41 /* Char.CloseParen */ /* ')' */) {\n        stateMachine.state = 36 /* State.PhoneNumberCloseParen */;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\nfunction statePhoneNumberCloseParen(context, stateMachine, char, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.state = 38 /* State.PhoneNumberDigit */;\n    }\n    else if (isPhoneNumberSeparatorChar(charCode)) {\n        stateMachine.state = 39 /* State.PhoneNumberSeparator */;\n    }\n    else {\n        context.removeMachine(stateMachine);\n    }\n}\nfunction statePhoneNumberDigit(context, stateMachine, char, charCode) {\n    var charIdx = context.charIdx;\n    // For now, if we've reached any digits, we'll say that the machine\n    // has reached its accept state. The phone regex will confirm the\n    // match later.\n    // Alternatively, we could count the number of digits to avoid\n    // invoking the phone number regex\n    stateMachine.acceptStateReached = true;\n    if (isPhoneNumberControlChar(charCode)) {\n        stateMachine.state = 40 /* State.PhoneNumberControlChar */;\n    }\n    else if (charCode === 35 /* Char.NumberSign */ /* '#' */) {\n        stateMachine.state = 41 /* State.PhoneNumberPoundChar */;\n    }\n    else if (isDigitChar(charCode)) {\n        // Stay in the phone number digit state\n    }\n    else if (charCode === 40 /* Char.OpenParen */ /* '(' */) {\n        stateMachine.state = 32 /* State.PhoneNumberOpenParen */;\n    }\n    else if (isPhoneNumberSeparatorChar(charCode)) {\n        stateMachine.state = 39 /* State.PhoneNumberSeparator */;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n        // The transition from a digit character to a letter can be the\n        // start of a new scheme URL match\n        if (isSchemeStartChar(charCode)) {\n            context.addMachine(createSchemeUrlStateMachine(charIdx, 0 /* State.SchemeChar */));\n        }\n    }\n}\nfunction statePhoneNumberSeparator(context, stateMachine, char, charCode) {\n    if (isDigitChar(charCode)) {\n        stateMachine.state = 38 /* State.PhoneNumberDigit */;\n    }\n    else if (charCode === 40 /* Char.OpenParen */ /* '(' */) {\n        stateMachine.state = 32 /* State.PhoneNumberOpenParen */;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n        // This character may start a new match. Add states for it\n        stateNoMatch(context, char, charCode);\n    }\n}\n// The \";\" characters is \"wait\" in a phone number\n// The \",\" characters is \"pause\" in a phone number\nfunction statePhoneNumberControlChar(context, stateMachine, charCode) {\n    if (isPhoneNumberControlChar(charCode)) {\n        // Stay in the \"control char\" state\n    }\n    else if (charCode === 35 /* Char.NumberSign */ /* '#' */) {\n        stateMachine.state = 41 /* State.PhoneNumberPoundChar */;\n    }\n    else if (isDigitChar(charCode)) {\n        stateMachine.state = 38 /* State.PhoneNumberDigit */;\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\n// The \"#\" characters is \"pound\" in a phone number\nfunction statePhoneNumberPoundChar(context, stateMachine, charCode) {\n    if (isPhoneNumberControlChar(charCode)) {\n        stateMachine.state = 40 /* State.PhoneNumberControlChar */;\n    }\n    else if (isDigitChar(charCode)) {\n        // According to some of the older tests, if there's a digit\n        // after a '#' sign, the match is invalid. TODO: Revisit if this is true\n        context.removeMachine(stateMachine);\n    }\n    else {\n        captureMatchIfValidAndRemove(context, stateMachine);\n    }\n}\n/*\n * Captures a match if it is valid (i.e. has a full domain name for a\n * TLD match). If a match is not valid, it is possible that we want to\n * keep reading characters in order to make a full match.\n */\nfunction captureMatchIfValidAndRemove(context, stateMachine) {\n    var matches = context.matches, text = context.text, charIdx = context.charIdx, tagBuilder = context.tagBuilder, stripPrefix = context.stripPrefix, stripTrailingSlash = context.stripTrailingSlash, decodePercentEncoding = context.decodePercentEncoding, hashtagServiceName = context.hashtagServiceName, mentionServiceName = context.mentionServiceName;\n    // Remove the state machine first. There are a number of code paths\n    // which return out of this function early, so make sure we have\n    // this done\n    context.removeMachine(stateMachine);\n    // Make sure the state machine being checked has actually reached an\n    // \"accept\" state. If it hasn't reach one, it can't be a match\n    if (!stateMachine.acceptStateReached) {\n        return;\n    }\n    var startIdx = stateMachine.startIdx;\n    var matchedText = text.slice(stateMachine.startIdx, charIdx);\n    // Handle any unbalanced braces (parens, square brackets, or curly\n    // brackets) inside the URL. This handles situations like:\n    //     The link (google.com)\n    // and\n    //     Check out this link here (en.wikipedia.org/wiki/IANA_(disambiguation))\n    //\n    // And also remove any punctuation chars at the end such as:\n    //     '?', ',', ':', '.', etc.\n    matchedText = excludeUnbalancedTrailingBracesAndPunctuation(matchedText);\n    switch (stateMachine.type) {\n        case 0 /* StateMachineType.Url */: {\n            // We don't want to accidentally match a URL that is preceded by an\n            // '@' character, which would be an email address\n            var charBeforeUrlMatch = text.charCodeAt(stateMachine.startIdx - 1);\n            if (charBeforeUrlMatch === 64 /* Char.AtSign */ /* '@' */) {\n                return;\n            }\n            switch (stateMachine.matchType) {\n                case 0 /* UrlStateMachineMatchType.Scheme */: {\n                    // Autolinker accepts many characters in a url's scheme (like `fake://test.com`).\n                    // However, in cases where a URL is missing whitespace before an obvious link,\n                    // (for example: `nowhitespacehttp://www.test.com`), we only want the match to start\n                    // at the http:// part. We will check if the match contains a common scheme and then\n                    // shift the match to start from there.\n                    var httpSchemeMatch = httpSchemeRe.exec(matchedText);\n                    if (httpSchemeMatch) {\n                        // If we found an overmatched URL, we want to find the index\n                        // of where the match should start and shift the match to\n                        // start from the beginning of the common scheme\n                        startIdx = startIdx + httpSchemeMatch.index;\n                        matchedText = matchedText.slice(httpSchemeMatch.index);\n                    }\n                    if (!isValidSchemeUrl(matchedText)) {\n                        return; // not a valid match\n                    }\n                    break;\n                }\n                case 1 /* UrlStateMachineMatchType.Tld */: {\n                    if (!isValidTldMatch(matchedText)) {\n                        return; // not a valid match\n                    }\n                    break;\n                }\n                case 2 /* UrlStateMachineMatchType.IpV4 */: {\n                    if (!isValidIpV4Address(matchedText)) {\n                        return; // not a valid match\n                    }\n                    break;\n                }\n                /* istanbul ignore next */\n                default:\n                    assertNever(stateMachine);\n            }\n            matches.push(new UrlMatch({\n                tagBuilder: tagBuilder,\n                matchedText: matchedText,\n                offset: startIdx,\n                urlMatchType: toUrlMatchType(stateMachine.matchType),\n                url: matchedText,\n                protocolRelativeMatch: matchedText.slice(0, 2) === '//',\n                // TODO: Do these settings need to be passed to the match,\n                // or should we handle them here in UrlMatcher?\n                stripPrefix: stripPrefix,\n                stripTrailingSlash: stripTrailingSlash,\n                decodePercentEncoding: decodePercentEncoding,\n            }));\n            break;\n        }\n        case 1 /* StateMachineType.Email */: {\n            // if the email address has a valid TLD, add it to the list of matches\n            if (isValidEmail(matchedText)) {\n                matches.push(new EmailMatch({\n                    tagBuilder: tagBuilder,\n                    matchedText: matchedText,\n                    offset: startIdx,\n                    email: matchedText.replace(mailtoSchemePrefixRe, ''),\n                }));\n            }\n            break;\n        }\n        case 2 /* StateMachineType.Hashtag */: {\n            if (isValidHashtag(matchedText)) {\n                matches.push(new HashtagMatch({\n                    tagBuilder: tagBuilder,\n                    matchedText: matchedText,\n                    offset: startIdx,\n                    serviceName: hashtagServiceName,\n                    hashtag: matchedText.slice(1),\n                }));\n            }\n            break;\n        }\n        case 3 /* StateMachineType.Mention */: {\n            if (isValidMention(matchedText, mentionServiceName)) {\n                matches.push(new MentionMatch({\n                    tagBuilder: tagBuilder,\n                    matchedText: matchedText,\n                    offset: startIdx,\n                    serviceName: mentionServiceName,\n                    mention: matchedText.slice(1), // strip off the '@' character at the beginning\n                }));\n            }\n            break;\n        }\n        case 4 /* StateMachineType.Phone */: {\n            // remove any trailing spaces that were considered as \"separator\"\n            // chars by the state machine\n            matchedText = matchedText.replace(/ +$/g, '');\n            if (isValidPhoneNumber(matchedText)) {\n                var cleanNumber = matchedText.replace(/[^0-9,;#]/g, ''); // strip out non-digit characters exclude comma semicolon and #\n                matches.push(new PhoneMatch({\n                    tagBuilder: tagBuilder,\n                    matchedText: matchedText,\n                    offset: startIdx,\n                    number: cleanNumber,\n                    plusSign: matchedText.charAt(0) === '+',\n                }));\n            }\n            break;\n        }\n        /* istanbul ignore next */\n        default:\n            assertNever(stateMachine);\n    }\n}\n/**\n * Helper function to convert a UrlStateMachineMatchType value to its\n * UrlMatchType equivalent.\n */\nfunction toUrlMatchType(stateMachineMatchType) {\n    switch (stateMachineMatchType) {\n        case 0 /* UrlStateMachineMatchType.Scheme */:\n            return 'scheme';\n        case 1 /* UrlStateMachineMatchType.Tld */:\n            return 'tld';\n        case 2 /* UrlStateMachineMatchType.IpV4 */:\n            return 'ipV4';\n        /* istanbul ignore next */\n        default:\n            assertNever(stateMachineMatchType);\n    }\n}\nvar oppositeBrace = {\n    ')': '(',\n    '}': '{',\n    ']': '[',\n};\n/**\n * Determines if a match found has unmatched closing parenthesis,\n * square brackets or curly brackets. If so, these unbalanced symbol(s) will be\n * removed from the URL match itself.\n *\n * A match may have an extra closing parenthesis/square brackets/curly brackets\n * at the end of the match because these are valid URL path characters. For\n * example, \"wikipedia.com/something_(disambiguation)\" should be auto-linked.\n *\n * However, an extra parenthesis *will* be included when the URL itself is\n * wrapped in parenthesis, such as in the case of:\n *\n *     \"(wikipedia.com/something_(disambiguation))\"\n *\n * In this case, the last closing parenthesis should *not* be part of the\n * URL itself, and this method will exclude it from the returned URL.\n *\n * For square brackets in URLs such as in PHP arrays, the same behavior as\n * parenthesis discussed above should happen:\n *\n *     \"[http://www.example.com/foo.php?bar[]=1&bar[]=2&bar[]=3]\"\n *\n * The very last closing square bracket should not be part of the URL itself,\n * and therefore this method will remove it.\n *\n * @param matchedText The full matched URL/email/hashtag/etc. from the state\n *   machine parser.\n * @return The updated matched text with extraneous suffix characters removed.\n */\nexport function excludeUnbalancedTrailingBracesAndPunctuation(matchedText) {\n    var braceCounts = {\n        '(': 0,\n        '{': 0,\n        '[': 0,\n    };\n    for (var i = 0; i < matchedText.length; i++) {\n        var char = matchedText.charAt(i);\n        var charCode = matchedText.charCodeAt(i);\n        if (isOpenBraceChar(charCode)) {\n            braceCounts[char]++;\n        }\n        else if (isCloseBraceChar(charCode)) {\n            braceCounts[oppositeBrace[char]]--;\n        }\n    }\n    var endIdx = matchedText.length - 1;\n    while (endIdx >= 0) {\n        var char = matchedText.charAt(endIdx);\n        var charCode = matchedText.charCodeAt(endIdx);\n        if (isCloseBraceChar(charCode)) {\n            var oppositeBraceChar = oppositeBrace[char];\n            if (braceCounts[oppositeBraceChar] < 0) {\n                braceCounts[oppositeBraceChar]++;\n                endIdx--;\n            }\n            else {\n                break;\n            }\n        }\n        else if (isUrlSuffixNotAllowedAsFinalChar(charCode)) {\n            // Walk back a punctuation char like '?', ',', ':', '.', etc.\n            endIdx--;\n        }\n        else {\n            break;\n        }\n    }\n    return matchedText.slice(0, endIdx + 1);\n}\nfunction createSchemeUrlStateMachine(startIdx, state) {\n    return {\n        type: 0 /* StateMachineType.Url */,\n        startIdx: startIdx,\n        state: state,\n        acceptStateReached: false,\n        matchType: 0 /* UrlStateMachineMatchType.Scheme */,\n    };\n}\nfunction createTldUrlStateMachine(startIdx, state) {\n    return {\n        type: 0 /* StateMachineType.Url */,\n        startIdx: startIdx,\n        state: state,\n        acceptStateReached: false,\n        matchType: 1 /* UrlStateMachineMatchType.Tld */,\n    };\n}\nfunction createIpV4UrlStateMachine(startIdx, state) {\n    return {\n        type: 0 /* StateMachineType.Url */,\n        startIdx: startIdx,\n        state: state,\n        acceptStateReached: false,\n        matchType: 2 /* UrlStateMachineMatchType.IpV4 */,\n        octetsEncountered: 1, // starts at 1 because we create this machine when encountering the first octet\n    };\n}\nfunction createEmailStateMachine(startIdx, state) {\n    return {\n        type: 1 /* StateMachineType.Email */,\n        startIdx: startIdx,\n        state: state,\n        acceptStateReached: false,\n    };\n}\nfunction createHashtagStateMachine(startIdx, state) {\n    return {\n        type: 2 /* StateMachineType.Hashtag */,\n        startIdx: startIdx,\n        state: state,\n        acceptStateReached: false,\n    };\n}\nfunction createMentionStateMachine(startIdx, state) {\n    return {\n        type: 3 /* StateMachineType.Mention */,\n        startIdx: startIdx,\n        state: state,\n        acceptStateReached: false,\n    };\n}\nfunction createPhoneNumberStateMachine(startIdx, state) {\n    return {\n        type: 4 /* StateMachineType.Phone */,\n        startIdx: startIdx,\n        state: state,\n        acceptStateReached: false,\n    };\n}\nfunction isSchemeUrlStateMachine(machine) {\n    return (machine.type === 0 /* StateMachineType.Url */ &&\n        machine.matchType === 0 /* UrlStateMachineMatchType.Scheme */);\n}\n//# sourceMappingURL=parse-matches.js.map","import { __assign } from \"tslib\";\nimport { isDigitChar, isAsciiLetterChar, isQuoteChar, isWhitespaceChar, isControlChar, } from '../char-utils';\nimport { assertNever } from '../utils';\n// For debugging: search for other \"For debugging\" lines\n// import CliTable from 'cli-table';\nvar CurrentTag = /** @class */ (function () {\n    function CurrentTag(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        this.idx = cfg.idx !== undefined ? cfg.idx : -1;\n        this.type = cfg.type || 'tag';\n        this.name = cfg.name || '';\n        this.isOpening = !!cfg.isOpening;\n        this.isClosing = !!cfg.isClosing;\n    }\n    return CurrentTag;\n}());\nvar noCurrentTag = new CurrentTag(); // shared reference for when there is no current tag currently being read\n/**\n * Context object containing all the state needed by the HTML parsing state\n * machine function.\n *\n * ## Historical note\n *\n * In v4.1.5, we used nested functions to handle the context via closures, but\n * this necessitated re-creating the functions for each call to `parseHtml()`,\n * which made them difficult for v8 to JIT optimize. In v4.1.6, we lifted all of\n * the functions to the top-level scope and passed the context object between\n * them, which allows the functions to be JIT compiled once and reused.\n */\nvar ParseHtmlContext = /** @class */ (function () {\n    function ParseHtmlContext(html, callbacks) {\n        this.charIdx = 0; // Current character index being processed\n        this.state = 0 /* State.Data */; // begin in the Data state\n        this.currentDataIdx = 0; // where the current data start index is\n        this.currentTag = noCurrentTag; // describes the current tag that is being read\n        this.html = html;\n        this.callbacks = callbacks;\n    }\n    return ParseHtmlContext;\n}());\n/**\n * Parses an HTML string, calling the callbacks to notify of tags and text.\n *\n * ## History\n *\n * This file previously used a regular expression to find html tags in the input\n * text. Unfortunately, we ran into a bunch of catastrophic backtracking issues\n * with certain input text, causing Autolinker to either hang or just take a\n * really long time to parse the string.\n *\n * The current code is intended to be a O(n) algorithm that walks through\n * the string in one pass, and tries to be as cheap as possible. We don't need\n * to implement the full HTML spec, but rather simply determine where the string\n * looks like an HTML tag, and where it looks like text (so that we can autolink\n * that).\n *\n * This state machine parser is intended just to be a simple but performant\n * parser of HTML for the subset of requirements we have. We simply need to:\n *\n * 1. Determine where HTML tags are\n * 2. Determine the tag name (Autolinker specifically only cares about <a>,\n *    <script>, and <style> tags, so as not to link any text within them)\n *\n * We don't need to:\n *\n * 1. Create a parse tree\n * 2. Auto-close tags with invalid markup\n * 3. etc.\n *\n * The other intention behind this is that we didn't want to add external\n * dependencies on the Autolinker utility which would increase its size. For\n * instance, adding htmlparser2 adds 125kb to the minified output file,\n * increasing its final size from 47kb to 172kb (at the time of writing). It\n * also doesn't work exactly correctly, treating the string \"<3 blah blah blah\"\n * as an HTML tag.\n *\n * Reference for HTML spec:\n *\n *     https://www.w3.org/TR/html51/syntax.html#sec-tokenization\n *\n * @param {String} html The HTML to parse\n * @param {Object} callbacks\n * @param {Function} callbacks.onOpenTag Callback function to call when an open\n *   tag is parsed. Called with the tagName as its argument.\n * @param {Function} callbacks.onCloseTag Callback function to call when a close\n *   tag is parsed. Called with the tagName as its argument. If a self-closing\n *   tag is found, `onCloseTag` is called immediately after `onOpenTag`.\n * @param {Function} callbacks.onText Callback function to call when text (i.e\n *   not an HTML tag) is parsed. Called with the text (string) as its first\n *   argument, and offset (number) into the string as its second.\n */\nexport function parseHtml(html, callbacks) {\n    var context = new ParseHtmlContext(html, callbacks);\n    // For debugging: search for other \"For debugging\" lines\n    // const table = new CliTable( {\n    // \thead: [ 'charIdx', 'char', 'state', 'currentDataIdx', 'currentOpenTagIdx', 'tag.type' ]\n    // } );\n    var len = html.length;\n    while (context.charIdx < len) {\n        var char = html.charAt(context.charIdx);\n        var charCode = html.charCodeAt(context.charIdx);\n        // For debugging: search for other \"For debugging\" lines\n        // ALSO: Temporarily remove the 'const' keyword on the State enum\n        // table.push([\n        //     String(charIdx),\n        //     char,\n        //     State[state],\n        //     String(currentDataIdx),\n        //     String(currentTag.idx),\n        //     currentTag.idx === -1 ? '' : currentTag.type\n        // ]);\n        switch (context.state) {\n            case 0 /* State.Data */:\n                stateData(context, char);\n                break;\n            case 1 /* State.TagOpen */:\n                stateTagOpen(context, char, charCode);\n                break;\n            case 2 /* State.EndTagOpen */:\n                stateEndTagOpen(context, char, charCode);\n                break;\n            case 3 /* State.TagName */:\n                stateTagName(context, char, charCode);\n                break;\n            case 4 /* State.BeforeAttributeName */:\n                stateBeforeAttributeName(context, char, charCode);\n                break;\n            case 5 /* State.AttributeName */:\n                stateAttributeName(context, char, charCode);\n                break;\n            case 6 /* State.AfterAttributeName */:\n                stateAfterAttributeName(context, char, charCode);\n                break;\n            case 7 /* State.BeforeAttributeValue */:\n                stateBeforeAttributeValue(context, char, charCode);\n                break;\n            case 8 /* State.AttributeValueDoubleQuoted */:\n                stateAttributeValueDoubleQuoted(context, char);\n                break;\n            case 9 /* State.AttributeValueSingleQuoted */:\n                stateAttributeValueSingleQuoted(context, char);\n                break;\n            case 10 /* State.AttributeValueUnquoted */:\n                stateAttributeValueUnquoted(context, char, charCode);\n                break;\n            case 11 /* State.AfterAttributeValueQuoted */:\n                stateAfterAttributeValueQuoted(context, char, charCode);\n                break;\n            case 12 /* State.SelfClosingStartTag */:\n                stateSelfClosingStartTag(context, char);\n                break;\n            case 13 /* State.MarkupDeclarationOpenState */:\n                stateMarkupDeclarationOpen(context);\n                break;\n            case 14 /* State.CommentStart */:\n                stateCommentStart(context, char);\n                break;\n            case 15 /* State.CommentStartDash */:\n                stateCommentStartDash(context, char);\n                break;\n            case 16 /* State.Comment */:\n                stateComment(context, char);\n                break;\n            case 17 /* State.CommentEndDash */:\n                stateCommentEndDash(context, char);\n                break;\n            case 18 /* State.CommentEnd */:\n                stateCommentEnd(context, char);\n                break;\n            case 19 /* State.CommentEndBang */:\n                stateCommentEndBang(context, char);\n                break;\n            case 20 /* State.Doctype */:\n                stateDoctype(context, char);\n                break;\n            /* istanbul ignore next */\n            default:\n                assertNever(context.state);\n        }\n        // For debugging: search for other \"For debugging\" lines\n        // ALSO: Temporarily remove the 'const' keyword on the State enum\n        // table.push([\n        //     String(context.charIdx),\n        //     char,\n        //     State[context.state],\n        //     String(context.currentDataIdx),\n        //     String(context.currentTag.idx),\n        //     context.currentTag.idx === -1 ? '' : context.currentTag.type\n        // ]);\n        context.charIdx++;\n    }\n    if (context.currentDataIdx < context.charIdx) {\n        emitText(context);\n    }\n    // For debugging: search for other \"For debugging\" lines\n    // console.log( '\\n' + table.toString() );\n}\n// Called when non-tags are being read (i.e. the text around HTML †ags)\n// https://www.w3.org/TR/html51/syntax.html#data-state\nfunction stateData(context, char) {\n    if (char === '<') {\n        startNewTag(context);\n    }\n}\n// Called after a '<' is read from the Data state\n// https://www.w3.org/TR/html51/syntax.html#tag-open-state\nfunction stateTagOpen(context, char, charCode) {\n    if (char === '!') {\n        context.state = 13 /* State.MarkupDeclarationOpenState */;\n    }\n    else if (char === '/') {\n        context.state = 2 /* State.EndTagOpen */;\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { isClosing: true }));\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else if (isAsciiLetterChar(charCode)) {\n        // tag name start (and no '/' read)\n        context.state = 3 /* State.TagName */;\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { isOpening: true }));\n    }\n    else {\n        // Any other\n        context.state = 0 /* State.Data */;\n        context.currentTag = noCurrentTag;\n    }\n}\n// After a '<x', '</x' sequence is read (where 'x' is a letter character),\n// this is to continue reading the tag name\n// https://www.w3.org/TR/html51/syntax.html#tag-name-state\nfunction stateTagName(context, char, charCode) {\n    if (isWhitespaceChar(charCode)) {\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { name: captureTagName(context) }));\n        context.state = 4 /* State.BeforeAttributeName */;\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else if (char === '/') {\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { name: captureTagName(context) }));\n        context.state = 12 /* State.SelfClosingStartTag */;\n    }\n    else if (char === '>') {\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { name: captureTagName(context) }));\n        emitTagAndPreviousTextNode(context); // resets to Data state as well\n    }\n    else if (!isAsciiLetterChar(charCode) && !isDigitChar(charCode) && char !== ':') {\n        // Anything else that does not form an html tag. Note: the colon\n        // character is accepted for XML namespaced tags\n        resetToDataState(context);\n    }\n    else {\n        // continue reading tag name\n    }\n}\n// Called after the '/' is read from a '</' sequence\n// https://www.w3.org/TR/html51/syntax.html#end-tag-open-state\nfunction stateEndTagOpen(context, char, charCode) {\n    if (char === '>') {\n        // parse error. Encountered \"</>\". Skip it without treating as a tag\n        resetToDataState(context);\n    }\n    else if (isAsciiLetterChar(charCode)) {\n        context.state = 3 /* State.TagName */;\n    }\n    else {\n        // some other non-tag-like character, don't treat this as a tag\n        resetToDataState(context);\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#before-attribute-name-state\nfunction stateBeforeAttributeName(context, char, charCode) {\n    if (isWhitespaceChar(charCode)) {\n        // stay in BeforeAttributeName state - continue reading chars\n    }\n    else if (char === '/') {\n        context.state = 12 /* State.SelfClosingStartTag */;\n    }\n    else if (char === '>') {\n        emitTagAndPreviousTextNode(context); // resets to Data state as well\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else if (char === \"=\" || isQuoteChar(charCode) || isControlChar(charCode)) {\n        // \"Parse error\" characters that, according to the spec, should be\n        // appended to the attribute name, but we'll treat these characters\n        // as not forming a real HTML tag\n        resetToDataState(context);\n    }\n    else {\n        // Any other char, start of a new attribute name\n        context.state = 5 /* State.AttributeName */;\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#attribute-name-state\nfunction stateAttributeName(context, char, charCode) {\n    if (isWhitespaceChar(charCode)) {\n        context.state = 6 /* State.AfterAttributeName */;\n    }\n    else if (char === '/') {\n        context.state = 12 /* State.SelfClosingStartTag */;\n    }\n    else if (char === '=') {\n        context.state = 7 /* State.BeforeAttributeValue */;\n    }\n    else if (char === '>') {\n        emitTagAndPreviousTextNode(context); // resets to Data state as well\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else if (isQuoteChar(charCode)) {\n        // \"Parse error\" characters that, according to the spec, should be\n        // appended to the attribute name, but we'll treat these characters\n        // as not forming a real HTML tag\n        resetToDataState(context);\n    }\n    else {\n        // anything else: continue reading attribute name\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#after-attribute-name-state\nfunction stateAfterAttributeName(context, char, charCode) {\n    if (isWhitespaceChar(charCode)) {\n        // ignore the character - continue reading\n    }\n    else if (char === '/') {\n        context.state = 12 /* State.SelfClosingStartTag */;\n    }\n    else if (char === '=') {\n        context.state = 7 /* State.BeforeAttributeValue */;\n    }\n    else if (char === '>') {\n        emitTagAndPreviousTextNode(context);\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else if (isQuoteChar(charCode)) {\n        // \"Parse error\" characters that, according to the spec, should be\n        // appended to the attribute name, but we'll treat these characters\n        // as not forming a real HTML tag\n        resetToDataState(context);\n    }\n    else {\n        // Any other character, start a new attribute in the current tag\n        context.state = 5 /* State.AttributeName */;\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#before-attribute-value-state\nfunction stateBeforeAttributeValue(context, char, charCode) {\n    if (isWhitespaceChar(charCode)) {\n        // ignore the character - continue reading\n    }\n    else if (char === \"\\\"\") {\n        context.state = 8 /* State.AttributeValueDoubleQuoted */;\n    }\n    else if (char === \"'\") {\n        context.state = 9 /* State.AttributeValueSingleQuoted */;\n    }\n    else if (/[>=`]/.test(char)) {\n        // Invalid chars after an '=' for an attribute value, don't count\n        // the current tag as an HTML tag\n        resetToDataState(context);\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else {\n        // Any other character, consider it an unquoted attribute value\n        context.state = 10 /* State.AttributeValueUnquoted */;\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#attribute-value-double-quoted-state\nfunction stateAttributeValueDoubleQuoted(context, char) {\n    if (char === \"\\\"\") {\n        // end the current double-quoted attribute\n        context.state = 11 /* State.AfterAttributeValueQuoted */;\n    }\n    else {\n        // consume the character as part of the double-quoted attribute value\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#attribute-value-single-quoted-state\nfunction stateAttributeValueSingleQuoted(context, char) {\n    if (char === \"'\") {\n        // end the current single-quoted attribute\n        context.state = 11 /* State.AfterAttributeValueQuoted */;\n    }\n    else {\n        // consume the character as part of the double-quoted attribute value\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#attribute-value-unquoted-state\nfunction stateAttributeValueUnquoted(context, char, charCode) {\n    if (isWhitespaceChar(charCode)) {\n        context.state = 4 /* State.BeforeAttributeName */;\n    }\n    else if (char === '>') {\n        emitTagAndPreviousTextNode(context);\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else {\n        // Any other character, treat it as part of the attribute value\n    }\n}\n// Called after a double-quoted or single-quoted attribute value is read\n// (i.e. after the closing quote character)\n// https://www.w3.org/TR/html51/syntax.html#after-attribute-value-quoted-state\nfunction stateAfterAttributeValueQuoted(context, char, charCode) {\n    if (isWhitespaceChar(charCode)) {\n        context.state = 4 /* State.BeforeAttributeName */;\n    }\n    else if (char === '/') {\n        context.state = 12 /* State.SelfClosingStartTag */;\n    }\n    else if (char === '>') {\n        emitTagAndPreviousTextNode(context);\n    }\n    else if (char === '<') {\n        // start of another tag (ignore the previous, incomplete one)\n        startNewTag(context);\n    }\n    else {\n        // Any other character, \"parse error\". Spec says to switch to the\n        // BeforeAttributeState and re-consume the character, as it may be\n        // the start of a new attribute name\n        context.state = 4 /* State.BeforeAttributeName */;\n        reconsumeCurrentChar(context);\n    }\n}\n// A '/' has just been read in the current tag (presumably for '/>'), and\n// this handles the next character\n// https://www.w3.org/TR/html51/syntax.html#self-closing-start-tag-state\nfunction stateSelfClosingStartTag(context, char) {\n    if (char === '>') {\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { isClosing: true }));\n        emitTagAndPreviousTextNode(context); // resets to Data state as well\n    }\n    else {\n        // Note: the spec calls for a character after a '/' within a start\n        // tag to go back into the BeforeAttributeName state (in order to\n        // read more attributes, but for the purposes of Autolinker, this is\n        // most likely not a valid HTML tag. For example: \"<something / other>\"\n        // state = State.BeforeAttributeName;\n        // Instead, just treat as regular text\n        resetToDataState(context);\n    }\n}\n// https://www.w3.org/TR/html51/syntax.html#markup-declaration-open-state\n// (HTML Comments or !DOCTYPE)\nfunction stateMarkupDeclarationOpen(context) {\n    var html = context.html, charIdx = context.charIdx;\n    if (html.slice(charIdx, charIdx + 2) === '--') {\n        // html comment\n        context.charIdx++; // \"consume\" the second '-' character. Next loop iteration will consume the character after the '<!--' sequence\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { type: 'comment' }));\n        context.state = 14 /* State.CommentStart */;\n    }\n    else if (html.slice(charIdx, charIdx + 7).toUpperCase() === 'DOCTYPE') {\n        context.charIdx += 6; // \"consume\" the characters \"OCTYPE\" (the current loop iteraction consumed the 'D'). Next loop iteration will consume the character after the '<!DOCTYPE' sequence\n        context.currentTag = new CurrentTag(__assign(__assign({}, context.currentTag), { type: 'doctype' }));\n        context.state = 20 /* State.Doctype */;\n    }\n    else {\n        // At this point, the spec specifies that the state machine should\n        // enter the \"bogus comment\" state, in which case any character(s)\n        // after the '<!' that were read should become an HTML comment up\n        // until the first '>' that is read (or EOF). Instead, we'll assume\n        // that a user just typed '<!' as part of some piece of non-html\n        // text\n        resetToDataState(context);\n    }\n}\n// Handles after the sequence '<!--' has been read\n// https://www.w3.org/TR/html51/syntax.html#comment-start-state\nfunction stateCommentStart(context, char) {\n    if (char === '-') {\n        // We've read the sequence '<!---' at this point (3 dashes)\n        context.state = 15 /* State.CommentStartDash */;\n    }\n    else if (char === '>') {\n        // At this point, we'll assume the comment wasn't a real comment\n        // so we'll just emit it as data. We basically read the sequence\n        // '<!-->'\n        resetToDataState(context);\n    }\n    else {\n        // Any other char, take it as part of the comment\n        context.state = 16 /* State.Comment */;\n    }\n}\n// We've read the sequence '<!---' at this point (3 dashes)\n// https://www.w3.org/TR/html51/syntax.html#comment-start-dash-state\nfunction stateCommentStartDash(context, char) {\n    if (char === '-') {\n        // We've read '<!----' (4 dashes) at this point\n        context.state = 18 /* State.CommentEnd */;\n    }\n    else if (char === '>') {\n        // At this point, we'll assume the comment wasn't a real comment\n        // so we'll just emit it as data. We basically read the sequence\n        // '<!--->'\n        resetToDataState(context);\n    }\n    else {\n        // Anything else, take it as a valid comment\n        context.state = 16 /* State.Comment */;\n    }\n}\n// Currently reading the comment's text (data)\n// https://www.w3.org/TR/html51/syntax.html#comment-state\nfunction stateComment(context, char) {\n    if (char === '-') {\n        context.state = 17 /* State.CommentEndDash */;\n    }\n    else {\n        // Any other character, stay in the Comment state\n    }\n}\n// When we we've read the first dash inside a comment, it may signal the\n// end of the comment if we read another dash\n// https://www.w3.org/TR/html51/syntax.html#comment-end-dash-state\nfunction stateCommentEndDash(context, char) {\n    if (char === '-') {\n        context.state = 18 /* State.CommentEnd */;\n    }\n    else {\n        // Wasn't a dash, must still be part of the comment\n        context.state = 16 /* State.Comment */;\n    }\n}\n// After we've read two dashes inside a comment, it may signal the end of\n// the comment if we then read a '>' char\n// https://www.w3.org/TR/html51/syntax.html#comment-end-state\nfunction stateCommentEnd(context, char) {\n    if (char === '>') {\n        emitTagAndPreviousTextNode(context);\n    }\n    else if (char === '!') {\n        context.state = 19 /* State.CommentEndBang */;\n    }\n    else if (char === '-') {\n        // A 3rd '-' has been read: stay in the CommentEnd state\n    }\n    else {\n        // Anything else, switch back to the comment state since we didn't\n        // read the full \"end comment\" sequence (i.e. '-->')\n        context.state = 16 /* State.Comment */;\n    }\n}\n// We've read the sequence '--!' inside of a comment\n// https://www.w3.org/TR/html51/syntax.html#comment-end-bang-state\nfunction stateCommentEndBang(context, char) {\n    if (char === '-') {\n        // We read the sequence '--!-' inside of a comment. The last dash\n        // could signify that the comment is going to close\n        context.state = 17 /* State.CommentEndDash */;\n    }\n    else if (char === '>') {\n        // End of comment with the sequence '--!>'\n        emitTagAndPreviousTextNode(context);\n    }\n    else {\n        // The '--!' was not followed by a '>', continue reading the\n        // comment's text\n        context.state = 16 /* State.Comment */;\n    }\n}\n/**\n * For DOCTYPES in particular, we don't care about the attributes. Just\n * advance to the '>' character and emit the tag, unless we find a '<'\n * character in which case we'll start a new tag.\n *\n * Example doctype tag:\n *    <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n *\n * Actual spec: https://www.w3.org/TR/html51/syntax.html#doctype-state\n */\nfunction stateDoctype(context, char) {\n    if (char === '>') {\n        emitTagAndPreviousTextNode(context);\n    }\n    else if (char === '<') {\n        startNewTag(context);\n    }\n    else {\n        // stay in the Doctype state\n    }\n}\n/**\n * Resets the state back to the Data state, and removes the current tag.\n *\n * We'll generally run this function whenever a \"parse error\" is\n * encountered, where the current tag that is being read no longer looks\n * like a real HTML tag.\n */\nfunction resetToDataState(context) {\n    context.state = 0 /* State.Data */;\n    context.currentTag = noCurrentTag;\n}\n/**\n * Starts a new HTML tag at the current index, ignoring any previous HTML\n * tag that was being read.\n *\n * We'll generally run this function whenever we read a new '<' character,\n * including when we read a '<' character inside of an HTML tag that we were\n * previously reading.\n */\nfunction startNewTag(context) {\n    context.state = 1 /* State.TagOpen */;\n    context.currentTag = new CurrentTag({ idx: context.charIdx });\n}\n/**\n * Once we've decided to emit an open tag, that means we can also emit the\n * text node before it.\n */\nfunction emitTagAndPreviousTextNode(context) {\n    var textBeforeTag = context.html.slice(context.currentDataIdx, context.currentTag.idx);\n    if (textBeforeTag) {\n        // the html tag was the first element in the html string, or two\n        // tags next to each other, in which case we should not emit a text\n        // node\n        context.callbacks.onText(textBeforeTag, context.currentDataIdx);\n    }\n    var currentTag = context.currentTag;\n    if (currentTag.type === 'comment') {\n        context.callbacks.onComment(currentTag.idx);\n    }\n    else if (currentTag.type === 'doctype') {\n        context.callbacks.onDoctype(currentTag.idx);\n    }\n    else {\n        if (currentTag.isOpening) {\n            context.callbacks.onOpenTag(currentTag.name, currentTag.idx);\n        }\n        if (currentTag.isClosing) {\n            // note: self-closing tags will emit both opening and closing\n            context.callbacks.onCloseTag(currentTag.name, currentTag.idx);\n        }\n    }\n    // Since we just emitted a tag, reset to the data state for the next char\n    resetToDataState(context);\n    context.currentDataIdx = context.charIdx + 1;\n}\nfunction emitText(context) {\n    var text = context.html.slice(context.currentDataIdx, context.charIdx);\n    context.callbacks.onText(text, context.currentDataIdx);\n    context.currentDataIdx = context.charIdx + 1;\n}\n/**\n * Captures the tag name from the start of the tag to the current character\n * index, and converts it to lower case\n */\nfunction captureTagName(context) {\n    var startIdx = context.currentTag.idx + (context.currentTag.isClosing ? 2 : 1);\n    return context.html.slice(startIdx, context.charIdx).toLowerCase();\n}\n/**\n * Causes the main loop to re-consume the current character, such as after\n * encountering a \"parse error\" that changed state and needs to reconsume\n * the same character in that new state.\n */\nfunction reconsumeCurrentChar(context) {\n    context.charIdx--;\n}\n//# sourceMappingURL=parse-html.js.map","import { __assign, __read, __spreadArray } from \"tslib\";\nimport { version } from './version';\nimport { isBoolean, removeWithPredicate } from './utils';\nimport { AnchorTagBuilder } from './anchor-tag-builder';\nimport { HtmlTag } from './html-tag';\nimport { parseMatches } from './parser/parse-matches';\nimport { parseHtml } from './htmlParser/parse-html';\nimport { mentionServices } from './parser/mention-utils';\nimport { hashtagServices } from './parser/hashtag-utils';\n/**\n * @class Autolinker\n * @extends Object\n *\n * Utility class used to process a given string of text, and wrap the matches in\n * the appropriate anchor (&lt;a&gt;) tags to turn them into links.\n *\n * Any of the configuration options may be provided in an Object provided\n * to the Autolinker constructor, which will configure how the {@link #link link()}\n * method will process the links.\n *\n * For example:\n *\n *     var autolinker = new Autolinker( {\n *         newWindow : false,\n *         truncate  : 30\n *     } );\n *\n *     var html = autolinker.link( \"Joe went to www.yahoo.com\" );\n *     // produces: 'Joe went to <a href=\"http://www.yahoo.com\">yahoo.com</a>'\n *\n *\n * The {@link #static-link static link()} method may also be used to inline\n * options into a single call, which may be more convenient for one-off uses.\n * For example:\n *\n *     var html = Autolinker.link( \"Joe went to www.yahoo.com\", {\n *         newWindow : false,\n *         truncate  : 30\n *     } );\n *     // produces: 'Joe went to <a href=\"http://www.yahoo.com\">yahoo.com</a>'\n *\n *\n * ## Custom Replacements of Links\n *\n * If the configuration options do not provide enough flexibility, a {@link #replaceFn}\n * may be provided to fully customize the output of Autolinker. This function is\n * called once for each URL/Email/Phone#/Hashtag/Mention (Twitter, Instagram, Soundcloud)\n * match that is encountered.\n *\n * For example:\n *\n *     var input = \"...\";  // string with URLs, Email Addresses, Phone #s, Hashtags, and Mentions (Twitter, Instagram, Soundcloud)\n *\n *     var linkedText = Autolinker.link( input, {\n *         replaceFn : function( match ) {\n *             console.log( \"href = \", match.getAnchorHref() );\n *             console.log( \"text = \", match.getAnchorText() );\n *\n *             switch( match.getType() ) {\n *                 case 'url' :\n *                     console.log( \"url: \", match.getUrl() );\n *\n *                     if( match.getUrl().indexOf( 'mysite.com' ) === -1 ) {\n *                         var tag = match.buildTag();  // returns an `Autolinker.HtmlTag` instance, which provides mutator methods for easy changes\n *                         tag.setAttr( 'rel', 'nofollow' );\n *                         tag.addClass( 'external-link' );\n *\n *                         return tag;\n *\n *                     } else {\n *                         return true;  // let Autolinker perform its normal anchor tag replacement\n *                     }\n *\n *                 case 'email' :\n *                     var email = match.getEmail();\n *                     console.log( \"email: \", email );\n *\n *                     if( email === \"my@own.address\" ) {\n *                         return false;  // don't auto-link this particular email address; leave as-is\n *                     } else {\n *                         return;  // no return value will have Autolinker perform its normal anchor tag replacement (same as returning `true`)\n *                     }\n *\n *                 case 'phone' :\n *                     var phoneNumber = match.getPhoneNumber();\n *                     console.log( phoneNumber );\n *\n *                     return '<a href=\"http://newplace.to.link.phone.numbers.to/\">' + phoneNumber + '</a>';\n *\n *                 case 'hashtag' :\n *                     var hashtag = match.getHashtag();\n *                     console.log( hashtag );\n *\n *                     return '<a href=\"http://newplace.to.link.hashtag.handles.to/\">' + hashtag + '</a>';\n *\n *                 case 'mention' :\n *                     var mention = match.getMention();\n *                     console.log( mention );\n *\n *                     return '<a href=\"http://newplace.to.link.mention.to/\">' + mention + '</a>';\n *             }\n *         }\n *     } );\n *\n *\n * The function may return the following values:\n *\n * - `true` (Boolean): Allow Autolinker to replace the match as it normally\n *   would.\n * - `false` (Boolean): Do not replace the current match at all - leave as-is.\n * - Any String: If a string is returned from the function, the string will be\n *   used directly as the replacement HTML for the match.\n * - An {@link Autolinker.HtmlTag} instance, which can be used to build/modify\n *   an HTML tag before writing out its HTML text.\n */\nvar Autolinker = /** @class */ (function () {\n    /**\n     * @method constructor\n     * @param {Object} [cfg] The configuration options for the Autolinker instance,\n     *   specified in an Object (map).\n     */\n    function Autolinker(cfg) {\n        if (cfg === void 0) { cfg = {}; }\n        /**\n         * The Autolinker version number exposed on the instance itself.\n         *\n         * Ex: 0.25.1\n         *\n         * @property {String} version\n         */\n        this.version = Autolinker.version;\n        /**\n         * @cfg {Boolean/Object} [urls]\n         *\n         * `true` if URLs should be automatically linked, `false` if they should not\n         * be. Defaults to `true`.\n         *\n         * Examples:\n         *\n         *     urls: true\n         *\n         *     // or\n         *\n         *     urls: {\n         *         schemeMatches : true,\n         *         tldMatches    : true,\n         *         ipV4Matches   : true\n         *     }\n         *\n         * As shown above, this option also accepts an Object form with 3 properties\n         * to allow for more customization of what exactly gets linked. All default\n         * to `true`:\n         *\n         * @cfg {Boolean} [urls.schemeMatches] `true` to match URLs found prefixed\n         *   with a scheme, i.e. `http://google.com`, or `other+scheme://google.com`,\n         *   `false` to prevent these types of matches.\n         * @cfg {Boolean} [urls.tldMatches] `true` to match URLs with known top\n         *   level domains (.com, .net, etc.) that are not prefixed with a scheme\n         *   (such as 'http://'). This option attempts to match anything that looks\n         *   like a URL in the given text. Ex: `google.com`, `asdf.org/?page=1`, etc.\n         *   `false` to prevent these types of matches.\n         * @cfg {Boolean} [urls.ipV4Matches] `true` to match IPv4 addresses in text\n         *   that are not prefixed with a scheme (such as 'http://'). This option\n         *   attempts to match anything that looks like an IPv4 address in text. Ex:\n         *   `192.168.0.1`, `10.0.0.1/?page=1`, etc. `false` to prevent these types\n         *   of matches.\n         */\n        this.urls = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [email=true]\n         *\n         * `true` if email addresses should be automatically linked, `false` if they\n         * should not be.\n         */\n        this.email = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [phone=true]\n         *\n         * `true` if Phone numbers (\"(555)555-5555\") should be automatically linked,\n         * `false` if they should not be.\n         */\n        this.phone = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean/String} [hashtag=false]\n         *\n         * A string for the service name to have hashtags (ex: \"#myHashtag\")\n         * auto-linked to. The currently-supported values are:\n         *\n         * - 'twitter'\n         * - 'facebook'\n         * - 'instagram'\n         * - 'tiktok'\n         * - 'youtube'\n         *\n         * Pass `false` to skip auto-linking of hashtags.\n         */\n        this.hashtag = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String/Boolean} [mention=false]\n         *\n         * A string for the service name to have mentions (ex: \"@myuser\")\n         * auto-linked to. The currently supported values are:\n         *\n         * - 'twitter'\n         * - 'instagram'\n         * - 'soundcloud'\n         * - 'tiktok'\n         * - 'youtube'\n         *\n         * Defaults to `false` to skip auto-linking of mentions.\n         */\n        this.mention = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [newWindow=true]\n         *\n         * `true` if the links should open in a new window, `false` otherwise.\n         */\n        this.newWindow = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean/Object} [stripPrefix=true]\n         *\n         * `true` if 'http://' (or 'https://') and/or the 'www.' should be stripped\n         * from the beginning of URL links' text, `false` otherwise. Defaults to\n         * `true`.\n         *\n         * Examples:\n         *\n         *     stripPrefix: true\n         *\n         *     // or\n         *\n         *     stripPrefix: {\n         *         scheme : true,\n         *         www    : true\n         *     }\n         *\n         * As shown above, this option also accepts an Object form with 2 properties\n         * to allow for more customization of what exactly is prevented from being\n         * displayed. Both default to `true`:\n         *\n         * @cfg {Boolean} [stripPrefix.scheme] `true` to prevent the scheme part of\n         *   a URL match from being displayed to the user. Example:\n         *   `'http://google.com'` will be displayed as `'google.com'`. `false` to\n         *   not strip the scheme. NOTE: Only an `'http://'` or `'https://'` scheme\n         *   will be removed, so as not to remove a potentially dangerous scheme\n         *   (such as `'file://'` or `'javascript:'`)\n         * @cfg {Boolean} [stripPrefix.www] www (Boolean): `true` to prevent the\n         *   `'www.'` part of a URL match from being displayed to the user. Ex:\n         *   `'www.google.com'` will be displayed as `'google.com'`. `false` to not\n         *   strip the `'www'`.\n         */\n        this.stripPrefix = {\n            scheme: true,\n            www: true,\n        }; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [stripTrailingSlash=true]\n         *\n         * `true` to remove the trailing slash from URL matches, `false` to keep\n         *  the trailing slash.\n         *\n         *  Example when `true`: `http://google.com/` will be displayed as\n         *  `http://google.com`.\n         */\n        this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [decodePercentEncoding=true]\n         *\n         * `true` to decode percent-encoded characters in URL matches, `false` to keep\n         *  the percent-encoded characters.\n         *\n         *  Example when `true`: `https://en.wikipedia.org/wiki/San_Jos%C3%A9` will\n         *  be displayed as `https://en.wikipedia.org/wiki/San_José`.\n         */\n        this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Number/Object} [truncate=0]\n         *\n         * ## Number Form\n         *\n         * A number for how many characters matched text should be truncated to\n         * inside the text of a link. If the matched text is over this number of\n         * characters, it will be truncated to this length by adding a two period\n         * ellipsis ('..') to the end of the string.\n         *\n         * For example: A url like 'http://www.yahoo.com/some/long/path/to/a/file'\n         * truncated to 25 characters might look something like this:\n         * 'yahoo.com/some/long/pat..'\n         *\n         * Example Usage:\n         *\n         *     truncate: 25\n         *\n         *\n         *  Defaults to `0` for \"no truncation.\"\n         *\n         *\n         * ## Object Form\n         *\n         * An Object may also be provided with two properties: `length` (Number) and\n         * `location` (String). `location` may be one of the following: 'end'\n         * (default), 'middle', or 'smart'.\n         *\n         * Example Usage:\n         *\n         *     truncate: { length: 25, location: 'middle' }\n         *\n         * @cfg {Number} [truncate.length=0] How many characters to allow before\n         *   truncation will occur. Defaults to `0` for \"no truncation.\"\n         * @cfg {\"end\"/\"middle\"/\"smart\"} [truncate.location=\"end\"]\n         *\n         * - 'end' (default): will truncate up to the number of characters, and then\n         *   add an ellipsis at the end. Ex: 'yahoo.com/some/long/pat..'\n         * - 'middle': will truncate and add the ellipsis in the middle. Ex:\n         *   'yahoo.com/s..th/to/a/file'\n         * - 'smart': for URLs where the algorithm attempts to strip out unnecessary\n         *   parts first (such as the 'www.', then URL scheme, hash, etc.),\n         *   attempting to make the URL human-readable before looking for a good\n         *   point to insert the ellipsis if it is still too long. Ex:\n         *   'yahoo.com/some..to/a/file'. For more details, see\n         *   {@link Autolinker.truncate.TruncateSmart}.\n         */\n        this.truncate = {\n            length: 0,\n            location: 'end',\n        }; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {String} className\n         *\n         * A CSS class name to add to the generated links. This class will be added\n         * to all links, as well as this class plus match suffixes for styling\n         * url/email/phone/hashtag/mention links differently.\n         *\n         * For example, if this config is provided as \"myLink\", then:\n         *\n         * - URL links will have the CSS classes: \"myLink myLink-url\"\n         * - Email links will have the CSS classes: \"myLink myLink-email\", and\n         * - Phone links will have the CSS classes: \"myLink myLink-phone\"\n         * - Hashtag links will have the CSS classes: \"myLink myLink-hashtag\"\n         * - Mention links will have the CSS classes: \"myLink myLink-mention myLink-[type]\"\n         *   where [type] is either \"instagram\", \"twitter\" or \"soundcloud\"\n         */\n        this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Function} replaceFn\n         *\n         * A function to individually process each match found in the input string.\n         *\n         * See the class's description for usage.\n         *\n         * The `replaceFn` can be called with a different context object (`this`\n         * reference) using the {@link #context} cfg.\n         *\n         * This function is called with the following parameter:\n         *\n         * @cfg {Autolinker.match.Match} replaceFn.match The Match instance which\n         *   can be used to retrieve information about the match that the `replaceFn`\n         *   is currently processing. See {@link Autolinker.match.Match} subclasses\n         *   for details.\n         */\n        this.replaceFn = null; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Object} context\n         *\n         * The context object (`this` reference) to call the `replaceFn` with.\n         *\n         * Defaults to this Autolinker instance.\n         */\n        this.context = undefined; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @cfg {Boolean} [sanitizeHtml=false]\n         *\n         * `true` to HTML-encode the start and end brackets of existing HTML tags found\n         * in the input string. This will escape `<` and `>` characters to `&lt;` and\n         * `&gt;`, respectively.\n         *\n         * Setting this to `true` will prevent XSS (Cross-site Scripting) attacks,\n         * but will remove the significance of existing HTML tags in the input string. If\n         * you would like to maintain the significance of existing HTML tags while also\n         * making the output HTML string safe, leave this option as `false` and use a\n         * tool like https://github.com/cure53/DOMPurify (or others) on the input string\n         * before running Autolinker.\n         */\n        this.sanitizeHtml = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n        /**\n         * @private\n         * @property {Autolinker.AnchorTagBuilder} tagBuilder\n         *\n         * The AnchorTagBuilder instance used to build match replacement anchor tags.\n         * Note: this is lazily instantiated in the {@link #getTagBuilder} method.\n         */\n        this.tagBuilder = null;\n        // Note: when `this.something` is used in the rhs of these assignments,\n        //       it refers to the default values set above the constructor\n        this.urls = normalizeUrlsCfg(cfg.urls);\n        this.email = isBoolean(cfg.email) ? cfg.email : this.email;\n        this.phone = isBoolean(cfg.phone) ? cfg.phone : this.phone;\n        this.hashtag = cfg.hashtag || this.hashtag;\n        this.mention = cfg.mention || this.mention;\n        this.newWindow = isBoolean(cfg.newWindow) ? cfg.newWindow : this.newWindow;\n        this.stripPrefix = normalizeStripPrefixCfg(cfg.stripPrefix);\n        this.stripTrailingSlash = isBoolean(cfg.stripTrailingSlash)\n            ? cfg.stripTrailingSlash\n            : this.stripTrailingSlash;\n        this.decodePercentEncoding = isBoolean(cfg.decodePercentEncoding)\n            ? cfg.decodePercentEncoding\n            : this.decodePercentEncoding;\n        this.sanitizeHtml = cfg.sanitizeHtml || false;\n        // Validate the value of the `mention` cfg\n        var mention = this.mention;\n        if (mention !== false && mentionServices.indexOf(mention) === -1) {\n            throw new Error(\"invalid `mention` cfg '\".concat(mention, \"' - see docs\"));\n        }\n        // Validate the value of the `hashtag` cfg\n        var hashtag = this.hashtag;\n        if (hashtag !== false && hashtagServices.indexOf(hashtag) === -1) {\n            throw new Error(\"invalid `hashtag` cfg '\".concat(hashtag, \"' - see docs\"));\n        }\n        this.truncate = normalizeTruncateCfg(cfg.truncate);\n        this.className = cfg.className || this.className;\n        this.replaceFn = cfg.replaceFn || this.replaceFn;\n        this.context = cfg.context || this;\n    }\n    /**\n     * Automatically links URLs, Email addresses, Phone Numbers, Twitter handles,\n     * Hashtags, and Mentions found in the given chunk of HTML. Does not link URLs\n     * found within HTML tags.\n     *\n     * For instance, if given the text: `You should go to http://www.yahoo.com`,\n     * then the result will be `You should go to &lt;a href=\"http://www.yahoo.com\"&gt;http://www.yahoo.com&lt;/a&gt;`\n     *\n     * Example:\n     *\n     *     var linkedText = Autolinker.link( \"Go to google.com\", { newWindow: false } );\n     *     // Produces: \"Go to <a href=\"http://google.com\">google.com</a>\"\n     *\n     * @static\n     * @param {String} textOrHtml The HTML or text to find matches within (depending\n     *   on if the {@link #urls}, {@link #email}, {@link #phone}, {@link #mention},\n     *   {@link #hashtag}, and {@link #mention} options are enabled).\n     * @param {Object} [options] Any of the configuration options for the Autolinker\n     *   class, specified in an Object (map). See the class description for an\n     *   example call.\n     * @return {String} The HTML text, with matches automatically linked.\n     */\n    Autolinker.link = function (textOrHtml, options) {\n        var autolinker = new Autolinker(options);\n        return autolinker.link(textOrHtml);\n    };\n    /**\n     * Parses the input `textOrHtml` looking for URLs, email addresses, phone\n     * numbers, username handles, and hashtags (depending on the configuration\n     * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n     * objects describing those matches (without making any replacements).\n     *\n     * Note that if parsing multiple pieces of text, it is slightly more efficient\n     * to create an Autolinker instance, and use the instance-level {@link #parse}\n     * method.\n     *\n     * Example:\n     *\n     *     var matches = Autolinker.parse(\"Hello google.com, I am asdf@asdf.com\", {\n     *         urls: true,\n     *         email: true\n     *     });\n     *\n     *     console.log(matches.length);         // 2\n     *     console.log(matches[0].getType());   // 'url'\n     *     console.log(matches[0].getUrl());    // 'google.com'\n     *     console.log(matches[1].getType());   // 'email'\n     *     console.log(matches[1].getEmail());  // 'asdf@asdf.com'\n     *\n     * @static\n     * @param {String} textOrHtml The HTML or text to find matches within\n     *   (depending on if the {@link #urls}, {@link #email}, {@link #phone},\n     *   {@link #hashtag}, and {@link #mention} options are enabled).\n     * @param {Object} [options] Any of the configuration options for the Autolinker\n     *   class, specified in an Object (map). See the class description for an\n     *   example call.\n     * @return {Autolinker.match.Match[]} The array of Matches found in the\n     *   given input `textOrHtml`.\n     */\n    Autolinker.parse = function (textOrHtml, options) {\n        var autolinker = new Autolinker(options);\n        return autolinker.parse(textOrHtml);\n    };\n    /**\n     * Parses the input `textOrHtml` looking for URLs, email addresses, phone\n     * numbers, username handles, and hashtags (depending on the configuration\n     * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n     * objects describing those matches (without making any replacements).\n     *\n     * This method is used by the {@link #link} method, but can also be used to\n     * simply do parsing of the input in order to discover what kinds of links\n     * there are and how many.\n     *\n     * Example usage:\n     *\n     *     var autolinker = new Autolinker( {\n     *         urls: true,\n     *         email: true\n     *     } );\n     *\n     *     var matches = autolinker.parse( \"Hello google.com, I am asdf@asdf.com\" );\n     *\n     *     console.log( matches.length );           // 2\n     *     console.log( matches[ 0 ].getType() );   // 'url'\n     *     console.log( matches[ 0 ].getUrl() );    // 'google.com'\n     *     console.log( matches[ 1 ].getType() );   // 'email'\n     *     console.log( matches[ 1 ].getEmail() );  // 'asdf@asdf.com'\n     *\n     * @param {String} textOrHtml The HTML or text to find matches within\n     *   (depending on if the {@link #urls}, {@link #email}, {@link #phone},\n     *   {@link #hashtag}, and {@link #mention} options are enabled).\n     * @return {Autolinker.match.Match[]} The array of Matches found in the\n     *   given input `textOrHtml`.\n     */\n    Autolinker.prototype.parse = function (textOrHtml) {\n        var _this = this;\n        var skipTagNames = ['a', 'style', 'script'];\n        var skipTagsStackCount = 0; // used to only Autolink text outside of anchor/script/style tags. We don't want to autolink something that is already linked inside of an <a> tag, for instance\n        var matches = [];\n        // Find all matches within the `textOrHtml` (but not matches that are\n        // already nested within <a>, <style> and <script> tags)\n        parseHtml(textOrHtml, {\n            onOpenTag: function (tagName) {\n                if (skipTagNames.indexOf(tagName) >= 0) {\n                    skipTagsStackCount++;\n                }\n            },\n            onText: function (text, offset) {\n                // Only process text nodes that are not within an <a>, <style> or <script> tag\n                if (skipTagsStackCount === 0) {\n                    // \"Walk around\" common HTML entities. An '&nbsp;' (for example)\n                    // could be at the end of a URL, but we don't want to\n                    // include the trailing '&' in the URL. See issue #76\n                    // TODO: Handle HTML entities separately in parseHtml() and\n                    // don't emit them as \"text\" except for &amp; entities\n                    var htmlCharacterEntitiesRegex = /(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi; // NOTE: capturing group is significant to include the split characters in the .split() call below\n                    var textSplit = text.split(htmlCharacterEntitiesRegex);\n                    var currentOffset_1 = offset;\n                    textSplit.forEach(function (splitText, i) {\n                        // even number matches are text, odd numbers are html entities\n                        if (i % 2 === 0) {\n                            var textNodeMatches = _this.parseText(splitText, currentOffset_1);\n                            matches.push.apply(matches, __spreadArray([], __read(textNodeMatches), false));\n                        }\n                        currentOffset_1 += splitText.length;\n                    });\n                }\n            },\n            onCloseTag: function (tagName) {\n                if (skipTagNames.indexOf(tagName) >= 0) {\n                    skipTagsStackCount = Math.max(skipTagsStackCount - 1, 0); // attempt to handle extraneous </a> tags by making sure the stack count never goes below 0\n                }\n            },\n            onComment: function ( /*_offset: number*/) { }, // no need to process comment nodes\n            onDoctype: function ( /*_offset: number*/) { }, // no need to process doctype nodes\n        });\n        // After we have found all matches, remove subsequent matches that\n        // overlap with a previous match. This can happen for instance with an\n        // email address where the local-part of the email is also a top-level\n        // domain, such as in \"google.com@aaa.com\". In this case, the entire\n        // email address should be linked rather than just the 'google.com'\n        // part.\n        matches = this.compactMatches(matches);\n        // And finally, remove matches for match types that have been turned\n        // off. We needed to have all match types turned on initially so that\n        // things like hashtags could be filtered out if they were really just\n        // part of a URL match (for instance, as a named anchor).\n        matches = this.removeUnwantedMatches(matches);\n        return matches;\n    };\n    /**\n     * After we have found all matches, we need to remove matches that overlap\n     * with a previous match. This can happen for instance with an\n     * email address where the local-part of the email is also a top-level\n     * domain, such as in \"google.com@aaa.com\". In this case, the entire email\n     * address should be linked rather than just the 'google.com' part.\n     *\n     * @private\n     * @param {Autolinker.match.Match[]} matches\n     * @return {Autolinker.match.Match[]}\n     */\n    Autolinker.prototype.compactMatches = function (matches) {\n        // First, the matches need to be sorted in order of offset in the input\n        // string\n        matches.sort(byMatchOffset);\n        var i = 0;\n        while (i < matches.length - 1) {\n            var match = matches[i];\n            var offset = match.getOffset();\n            var matchedTextLength = match.getMatchedText().length;\n            if (i + 1 < matches.length) {\n                // Remove subsequent matches that equal offset with current match\n                // This can happen when matching the text \"google.com@aaa.com\"\n                // where we have both a URL ('google.com') and an email. We\n                // should only keep the email match in this case.\n                if (matches[i + 1].getOffset() === offset) {\n                    // Remove the shorter match\n                    var removeIdx = matches[i + 1].getMatchedText().length > matchedTextLength ? i : i + 1;\n                    matches.splice(removeIdx, 1);\n                    continue;\n                }\n                // Remove subsequent matches that overlap with the current match\n                //\n                // NOTE: This was a fundamental snippet of the Autolinker.js v3\n                // algorithm where we had multiple regular expressions searching\n                // the input string for matches. The regexes would sometimes\n                // overlap such as in the case of \"google.com/#link\", where we\n                // would have both a URL match and a hashtag match.\n                //\n                // However, the Autolinker.js v4 algorithm uses a state machine\n                // parser and knows that the '#link' part of 'google.com/#link'\n                // is part of the URL that precedes it, so we don't need this\n                // piece of code any more. Keeping it here commented for now in\n                // case we need to put it back at some point, but none of the\n                // test cases are currently able to trigger the need for it.\n                // const endIdx = offset + matchedTextLength;\n                // if (matches[i + 1].getOffset() < endIdx) {\n                //     matches.splice(i + 1, 1);\n                //     continue;\n                // }\n            }\n            i++;\n        }\n        return matches;\n    };\n    /**\n     * Removes matches for matchers that were turned off in the options. For\n     * example, if {@link #hashtag hashtags} were not to be matched, we'll\n     * remove them from the `matches` array here.\n     *\n     * Note: we *must* use all Matchers on the input string, and then filter\n     * them out later. For example, if the options were `{ url: false, hashtag: true }`,\n     * we wouldn't want to match the text '#link' as a HashTag inside of the text\n     * 'google.com/#link'. The way the algorithm works is that we match the full\n     * URL first (which prevents the accidental HashTag match), and then we'll\n     * simply throw away the URL match.\n     *\n     * @private\n     * @param {Autolinker.match.Match[]} matches The array of matches to remove\n     *   the unwanted matches from. Note: this array is mutated for the\n     *   removals.\n     * @return {Autolinker.match.Match[]} The mutated input `matches` array.\n     */\n    Autolinker.prototype.removeUnwantedMatches = function (matches) {\n        if (!this.hashtag)\n            removeWithPredicate(matches, function (match) {\n                return match.getType() === 'hashtag';\n            });\n        if (!this.email)\n            removeWithPredicate(matches, function (match) {\n                return match.getType() === 'email';\n            });\n        if (!this.phone)\n            removeWithPredicate(matches, function (match) {\n                return match.getType() === 'phone';\n            });\n        if (!this.mention)\n            removeWithPredicate(matches, function (match) {\n                return match.getType() === 'mention';\n            });\n        if (!this.urls.schemeMatches) {\n            removeWithPredicate(matches, function (m) {\n                return m.getType() === 'url' && m.getUrlMatchType() === 'scheme';\n            });\n        }\n        if (!this.urls.tldMatches) {\n            removeWithPredicate(matches, function (m) { return m.getType() === 'url' && m.getUrlMatchType() === 'tld'; });\n        }\n        if (!this.urls.ipV4Matches) {\n            removeWithPredicate(matches, function (m) { return m.getType() === 'url' && m.getUrlMatchType() === 'ipV4'; });\n        }\n        return matches;\n    };\n    /**\n     * Parses the input `text` looking for URLs, email addresses, phone\n     * numbers, username handles, and hashtags (depending on the configuration\n     * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match}\n     * objects describing those matches.\n     *\n     * This method processes a **non-HTML string**, and is used to parse and\n     * match within the text nodes of an HTML string. This method is used\n     * internally by {@link #parse}.\n     *\n     * @private\n     * @param {String} text The text to find matches within (depending on if the\n     *   {@link #urls}, {@link #email}, {@link #phone},\n     *   {@link #hashtag}, and {@link #mention} options are enabled). This must be a non-HTML string.\n     * @param {Number} [offset=0] The offset of the text node within the\n     *   original string. This is used when parsing with the {@link #parse}\n     *   method to generate correct offsets within the {@link Autolinker.match.Match}\n     *   instances, but may be omitted if calling this method publicly.\n     * @return {Autolinker.match.Match[]} The array of Matches found in the\n     *   given input `text`.\n     */\n    Autolinker.prototype.parseText = function (text, offset) {\n        offset = offset || 0;\n        var matches = parseMatches(text, {\n            tagBuilder: this.getTagBuilder(),\n            stripPrefix: this.stripPrefix,\n            stripTrailingSlash: this.stripTrailingSlash,\n            decodePercentEncoding: this.decodePercentEncoding,\n            hashtagServiceName: this.hashtag,\n            mentionServiceName: this.mention || 'twitter',\n        });\n        // Correct the offset of each of the matches. They are originally\n        // the offset of the match within the provided text node, but we\n        // need to correct them to be relative to the original HTML input\n        // string (i.e. the one provided to #parse).\n        for (var i = 0, numTextMatches = matches.length; i < numTextMatches; i++) {\n            matches[i].setOffset(offset + matches[i].getOffset());\n        }\n        return matches;\n    };\n    /**\n     * Automatically links URLs, Email addresses, Phone numbers, Hashtags,\n     * and Mentions (Twitter, Instagram, Soundcloud) found in the given chunk of HTML. Does not link\n     * URLs found within HTML tags.\n     *\n     * For instance, if given the text: `You should go to http://www.yahoo.com`,\n     * then the result will be `You should go to\n     * &lt;a href=\"http://www.yahoo.com\"&gt;http://www.yahoo.com&lt;/a&gt;`\n     *\n     * This method finds the text around any HTML elements in the input\n     * `textOrHtml`, which will be the text that is processed. Any original HTML\n     * elements will be left as-is, as well as the text that is already wrapped\n     * in anchor (&lt;a&gt;) tags.\n     *\n     * @param {String} textOrHtml The HTML or text to autolink matches within\n     *   (depending on if the {@link #urls}, {@link #email}, {@link #phone}, {@link #hashtag}, and {@link #mention} options are enabled).\n     * @return {String} The HTML, with matches automatically linked.\n     */\n    Autolinker.prototype.link = function (textOrHtml) {\n        if (!textOrHtml) {\n            return '';\n        } // handle `null` and `undefined` (for JavaScript users that don't have TypeScript support), and nothing to do with an empty string too\n        /* We would want to sanitize the start and end characters of a tag\n         * before processing the string in order to avoid an XSS scenario.\n         * This behaviour can be changed by toggling the sanitizeHtml option.\n         */\n        if (this.sanitizeHtml) {\n            textOrHtml = textOrHtml.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n        }\n        var matches = this.parse(textOrHtml);\n        var newHtml = new Array(matches.length * 2 + 1);\n        var lastIndex = 0;\n        for (var i = 0, len = matches.length; i < len; i++) {\n            var match = matches[i];\n            newHtml.push(textOrHtml.substring(lastIndex, match.getOffset()));\n            newHtml.push(this.createMatchReturnVal(match));\n            lastIndex = match.getOffset() + match.getMatchedText().length;\n        }\n        newHtml.push(textOrHtml.substring(lastIndex)); // handle the text after the last match\n        return newHtml.join('');\n    };\n    /**\n     * Creates the return string value for a given match in the input string.\n     *\n     * This method handles the {@link #replaceFn}, if one was provided.\n     *\n     * @private\n     * @param {Autolinker.match.Match} match The Match object that represents\n     *   the match.\n     * @return {String} The string that the `match` should be replaced with.\n     *   This is usually the anchor tag string, but may be the `matchStr` itself\n     *   if the match is not to be replaced.\n     */\n    Autolinker.prototype.createMatchReturnVal = function (match) {\n        // Handle a custom `replaceFn` being provided\n        var replaceFnResult;\n        if (this.replaceFn) {\n            replaceFnResult = this.replaceFn.call(this.context, match); // Autolinker instance is the context\n        }\n        if (typeof replaceFnResult === 'string') {\n            return replaceFnResult; // `replaceFn` returned a string, use that\n        }\n        else if (replaceFnResult === false) {\n            return match.getMatchedText(); // no replacement for the match\n        }\n        else if (replaceFnResult instanceof HtmlTag) {\n            return replaceFnResult.toAnchorString();\n        }\n        else {\n            // replaceFnResult === true, or no/unknown return value from function\n            // Perform Autolinker's default anchor tag generation\n            var anchorTag = match.buildTag(); // returns an Autolinker.HtmlTag instance\n            return anchorTag.toAnchorString();\n        }\n    };\n    /**\n     * Returns the {@link #tagBuilder} instance for this Autolinker instance,\n     * lazily instantiating it if it does not yet exist.\n     *\n     * @private\n     * @return {Autolinker.AnchorTagBuilder}\n     */\n    Autolinker.prototype.getTagBuilder = function () {\n        var tagBuilder = this.tagBuilder;\n        if (!tagBuilder) {\n            tagBuilder = this.tagBuilder = new AnchorTagBuilder({\n                newWindow: this.newWindow,\n                truncate: this.truncate,\n                className: this.className,\n            });\n        }\n        return tagBuilder;\n    };\n    // NOTE: must be 'export default' here for UMD module\n    /**\n     * @static\n     * @property {String} version\n     *\n     * The Autolinker version number in the form major.minor.patch\n     *\n     * Ex: 3.15.0\n     */\n    Autolinker.version = version;\n    return Autolinker;\n}());\nexport default Autolinker;\n/**\n * Normalizes the {@link #urls} config into an Object with its 2 properties:\n * `schemeMatches` and `tldMatches`, both booleans.\n *\n * See {@link #urls} config for details.\n *\n * @private\n * @param {Boolean/Object} urls\n * @return {Object}\n */\nfunction normalizeUrlsCfg(urls) {\n    if (urls == null)\n        urls = true; // default to `true`\n    if (isBoolean(urls)) {\n        return { schemeMatches: urls, tldMatches: urls, ipV4Matches: urls };\n    }\n    else {\n        // object form\n        return {\n            schemeMatches: isBoolean(urls.schemeMatches) ? urls.schemeMatches : true,\n            tldMatches: isBoolean(urls.tldMatches) ? urls.tldMatches : true,\n            ipV4Matches: isBoolean(urls.ipV4Matches) ? urls.ipV4Matches : true,\n        };\n    }\n}\n/**\n * Normalizes the {@link #stripPrefix} config into an Object with 2\n * properties: `scheme`, and `www` - both Booleans.\n *\n * See {@link #stripPrefix} config for details.\n *\n * @private\n * @param {Boolean/Object} stripPrefix\n * @return {Object}\n */\nfunction normalizeStripPrefixCfg(stripPrefix) {\n    if (stripPrefix == null)\n        stripPrefix = true; // default to `true`\n    if (isBoolean(stripPrefix)) {\n        return { scheme: stripPrefix, www: stripPrefix };\n    }\n    else {\n        // object form\n        return {\n            scheme: isBoolean(stripPrefix.scheme) ? stripPrefix.scheme : true,\n            www: isBoolean(stripPrefix.www) ? stripPrefix.www : true,\n        };\n    }\n}\n/**\n * Normalizes the {@link #truncate} config into an Object with 2 properties:\n * `length` (Number), and `location` (String).\n *\n * See {@link #truncate} config for details.\n *\n * @private\n * @param {Number/Object} truncate\n * @return {Object}\n */\nfunction normalizeTruncateCfg(truncate) {\n    if (typeof truncate === 'number') {\n        return { length: truncate, location: 'end' };\n    }\n    else {\n        // object, or undefined/null\n        return __assign({ length: Number.POSITIVE_INFINITY, location: 'end' }, truncate);\n    }\n}\n/**\n * Helper function for Array.prototype.sort() to sort the Matches by\n * their offset in the input string.\n */\nfunction byMatchOffset(a, b) {\n    return a.getOffset() - b.getOffset();\n}\n//# sourceMappingURL=autolinker.js.map","// WARNING: This file is modified a bit when it is compiled into index.js in\n// order to support nodejs interoperability with require('autolinker') directly.\n// This is done by the buildSrcFixCommonJsIndexTask() function in the gulpfile.\n// See that function for more details.\nimport Autolinker from './autolinker';\nexport default Autolinker;\nexport { Autolinker };\nexport * from './autolinker';\nexport * from './anchor-tag-builder';\nexport * from './html-tag';\nexport * from './match/index';\nexport * from './parser/index';\n//# sourceMappingURL=index.js.map","// Important: this file is generated from the 'build' script and should not be\n// edited directly\nexport var version = '4.1.5';\n//# sourceMappingURL=version.js.map","import { isAlphaNumericOrMarkChar } from '../char-utils';\n/**\n * Determines if the given `char` is a an allowed character in a hashtag. These\n * are underscores or any alphanumeric char.\n */\nexport function isHashtagTextChar(charCode) {\n    return charCode === 95 /* Char.Underscore */ || isAlphaNumericOrMarkChar(charCode);\n}\n/**\n * Determines if a hashtag match is valid.\n */\nexport function isValidHashtag(hashtag) {\n    // Max length of 140 for a hashtag ('#' char + 139 word chars)\n    return hashtag.length <= 140;\n}\nexport var hashtagServices = [\n    'twitter',\n    'facebook',\n    'instagram',\n    'tiktok',\n    'youtube',\n];\n//# sourceMappingURL=hashtag-utils.js.map","// NOTE: THIS IS A GENERATED FILE\n// To update with the latest TLD list, run `npm run update-known-tlds`\nexport var tldRegex = /^(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|travelersinsurance|vermögensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|banamex|bauhaus|bestbuy|booking|brother|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|yamaxun|youtube|zuerich|католик|البحرين|الجزائر|العليان|پاکستان|كاثوليك|இந்தியா|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kindle|kosher|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|nagoya|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|loans|locus|lotte|lotto|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|グーグル|クラウド|ポイント|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|scb|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|ストア|セール|みんな|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|ευ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)$/;\n//# sourceMappingURL=known-tlds.js.map","'use strict'\r\n\r\nmodule.exports = calcSDF\r\n\r\nvar INF = 1e20\r\n\r\nfunction calcSDF(src, options) {\r\n    if (!options) options = {}\r\n\r\n    var cutoff = options.cutoff == null ? 0.25 : options.cutoff\r\n    var radius = options.radius == null ? 8 : options.radius\r\n    var channel = options.channel || 0\r\n    var w, h, size, data, intData, stride, ctx, canvas, imgData, i, l\r\n\r\n    // handle image container\r\n    if (ArrayBuffer.isView(src) || Array.isArray(src)) {\r\n        if (!options.width || !options.height) throw Error('For raw data width and height should be provided by options')\r\n        w = options.width, h = options.height\r\n        data = src\r\n\r\n        if (!options.stride) stride = Math.floor(src.length / w / h)\r\n        else stride = options.stride\r\n    }\r\n    else {\r\n        if (window.HTMLCanvasElement && src instanceof window.HTMLCanvasElement) {\r\n            canvas = src\r\n            ctx = canvas.getContext('2d')\r\n            w = canvas.width, h = canvas.height\r\n            imgData = ctx.getImageData(0, 0, w, h)\r\n            data = imgData.data\r\n            stride = 4\r\n        }\r\n        else if (window.CanvasRenderingContext2D && src instanceof window.CanvasRenderingContext2D) {\r\n            canvas = src.canvas\r\n            ctx = src\r\n            w = canvas.width, h = canvas.height\r\n            imgData = ctx.getImageData(0, 0, w, h)\r\n            data = imgData.data\r\n            stride = 4\r\n        }\r\n        else if (window.ImageData && src instanceof window.ImageData) {\r\n            imgData = src\r\n            w = src.width, h = src.height\r\n            data = imgData.data\r\n            stride = 4\r\n        }\r\n    }\r\n\r\n    size = Math.max(w, h)\r\n\r\n    //convert int data to floats\r\n    if ((window.Uint8ClampedArray && data instanceof window.Uint8ClampedArray) || (window.Uint8Array && data instanceof window.Uint8Array)) {\r\n        intData = data\r\n        data = Array(w*h)\r\n\r\n        for (i = 0, l = Math.floor(intData.length / stride); i < l; i++) {\r\n            data[i] = intData[i*stride + channel] / 255\r\n        }\r\n    }\r\n    else {\r\n        if (stride !== 1) throw Error('Raw data can have only 1 value per pixel')\r\n    }\r\n\r\n    // temporary arrays for the distance transform\r\n    var gridOuter = Array(w * h)\r\n    var gridInner = Array(w * h)\r\n    var f = Array(size)\r\n    var d = Array(size)\r\n    var z = Array(size + 1)\r\n    var v = Array(size)\r\n\r\n    for (i = 0, l = w * h; i < l; i++) {\r\n        var a = data[i]\r\n        gridOuter[i] = a === 1 ? 0 : a === 0 ? INF : Math.pow(Math.max(0, 0.5 - a), 2)\r\n        gridInner[i] = a === 1 ? INF : a === 0 ? 0 : Math.pow(Math.max(0, a - 0.5), 2)\r\n    }\r\n\r\n    edt(gridOuter, w, h, f, d, v, z)\r\n    edt(gridInner, w, h, f, d, v, z)\r\n\r\n    var dist = window.Float32Array ? new Float32Array(w * h) : new Array(w * h)\r\n\r\n    for (i = 0, l = w*h; i < l; i++) {\r\n        dist[i] = Math.min(Math.max(1 - ( (gridOuter[i] - gridInner[i]) / radius + cutoff), 0), 1)\r\n    }\r\n\r\n    return dist\r\n}\r\n\r\n// 2D Euclidean distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/dt/\r\nfunction edt(data, width, height, f, d, v, z) {\r\n    for (var x = 0; x < width; x++) {\r\n        for (var y = 0; y < height; y++) {\r\n            f[y] = data[y * width + x]\r\n        }\r\n        edt1d(f, d, v, z, height)\r\n        for (y = 0; y < height; y++) {\r\n            data[y * width + x] = d[y]\r\n        }\r\n    }\r\n    for (y = 0; y < height; y++) {\r\n        for (x = 0; x < width; x++) {\r\n            f[x] = data[y * width + x]\r\n        }\r\n        edt1d(f, d, v, z, width)\r\n        for (x = 0; x < width; x++) {\r\n            data[y * width + x] = Math.sqrt(d[x])\r\n        }\r\n    }\r\n}\r\n\r\n// 1D squared distance transform\r\nfunction edt1d(f, d, v, z, n) {\r\n    v[0] = 0;\r\n    z[0] = -INF\r\n    z[1] = +INF\r\n\r\n    for (var q = 1, k = 0; q < n; q++) {\r\n        var s = ((f[q] + q * q) - (f[v[k]] + v[k] * v[k])) / (2 * q - 2 * v[k])\r\n        while (s <= z[k]) {\r\n            k--\r\n            s = ((f[q] + q * q) - (f[v[k]] + v[k] * v[k])) / (2 * q - 2 * v[k])\r\n        }\r\n        k++\r\n        v[k] = q\r\n        z[k] = s\r\n        z[k + 1] = +INF\r\n    }\r\n\r\n    for (q = 0, k = 0; q < n; q++) {\r\n        while (z[k + 1] < q) k++\r\n        d[q] = (q - v[k]) * (q - v[k]) + f[v[k]]\r\n    }\r\n}\r\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n  * Bootstrap v5.3.8 (https://getbootstrap.com/)\n  * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n    const instanceMap = elementMap.get(element);\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n    instanceMap.set(key, instance);\n  },\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n    return null;\n  },\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key);\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n  }\n  return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`;\n  }\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n  return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  }\n\n  // Get transition-duration of the element\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false;\n  }\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0];\n  }\n  return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object;\n  }\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object));\n  }\n  return null;\n};\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])');\n  if (!closedDetails) {\n    return elementIsVisible;\n  }\n  if (closedDetails !== element) {\n    const summary = element.closest('summary');\n    if (summary && summary.parentNode !== closedDetails) {\n      return false;\n    }\n    if (summary === null) {\n      return false;\n    }\n  }\n  return elementIsVisible;\n};\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n  if (element instanceof ShadowRoot) {\n    return element;\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null;\n  }\n  return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery;\n  }\n  return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback();\n        }\n      });\n    }\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length;\n  let index = list.indexOf(activeElement);\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n  }\n  index += shouldGetNext ? 1 : -1;\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, {\n      delegateTarget: element\n    });\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n    return fn.apply(element, [event]);\n  };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue;\n        }\n        hydrateObj(event, {\n          delegateTarget: target\n        });\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn);\n        }\n        return fn.apply(target, [event]);\n      }\n    }\n  };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string';\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent;\n  }\n  return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n    callable = wrapFunction(callable);\n  }\n  const events = getElementEvents(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff;\n    return;\n  }\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n  fn.delegationSelector = isDelegated ? handler : null;\n  fn.callable = callable;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n  if (!fn) {\n    return;\n  }\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n    }\n  }\n}\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false);\n  },\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true);\n  },\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getElementEvents(element);\n    const storeElementEvent = events[typeEvent] || {};\n    const isNamespace = originalTypeEvent.startsWith('.');\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return;\n      }\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n      return;\n    }\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      }\n    }\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n      }\n    }\n  },\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    let jQueryEvent = null;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n    const evt = hydrateObj(new Event(event, {\n      bubbles,\n      cancelable: true\n    }), args);\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault();\n    }\n    return evt;\n  }\n};\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value;\n    } catch (_unused) {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value;\n        }\n      });\n    }\n  }\n  return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true;\n  }\n  if (value === 'false') {\n    return false;\n  }\n  if (value === Number(value).toString()) {\n    return Number(value);\n  }\n  if (value === '' || value === 'null') {\n    return null;\n  }\n  if (typeof value !== 'string') {\n    return value;\n  }\n  try {\n    return JSON.parse(decodeURIComponent(value));\n  } catch (_unused) {\n    return value;\n  }\n}\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n    const attributes = {};\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    }\n    return attributes;\n  },\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {};\n  }\n  static get DefaultType() {\n    return {};\n  }\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n  _getConfig(config) {\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n  _configAfterMerge(config) {\n    return config;\n  }\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    };\n  }\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property];\n      const valueType = isElement(value) ? 'element' : toType(value);\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    }\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.8';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super();\n    element = getElement(element);\n    if (!element) {\n      return;\n    }\n    this._element = element;\n    this._config = this._getConfig(config);\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null;\n    }\n  }\n\n  // Private\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY);\n  }\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n  static get VERSION() {\n    return VERSION;\n  }\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href');\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n      return null;\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n    }\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n  }\n  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\n};\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode.closest(selector);\n    while (ancestor) {\n      parents.push(ancestor);\n      ancestor = ancestor.parentNode.closest(selector);\n    }\n    return parents;\n  },\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n      previous = previous.previousElementSibling;\n    }\n    return [];\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling;\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n      next = next.nextElementSibling;\n    }\n    return [];\n  },\n  focusableChildren(element) {\n    const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n  },\n  getSelectorFromElement(element) {\n    const selector = getSelector(element);\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null;\n    }\n    return null;\n  },\n  getElementFromSelector(element) {\n    const selector = getSelector(element);\n    return selector ? SelectorEngine.findOne(selector) : null;\n  },\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element);\n    return selector ? SelectorEngine.find(selector) : [];\n  }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n  const name = component.NAME;\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n    if (isDisabled(this)) {\n      return;\n    }\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n    const instance = component.getOrCreateInstance(target);\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]();\n  });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$f;\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n    if (closeEvent.defaultPrevented) {\n      return;\n    }\n    this._element.classList.remove(CLASS_NAME_SHOW$8);\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove();\n    EventHandler.trigger(this._element, EVENT_CLOSED);\n    this.dispose();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$e;\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n};\nconst DefaultType$c = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super();\n    this._element = element;\n    if (!element || !Swipe.isSupported()) {\n      return;\n    }\n    this._config = this._getConfig(config);\n    this._deltaX = 0;\n    this._supportPointerEvents = Boolean(window.PointerEvent);\n    this._initEvents();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$c;\n  }\n  static get DefaultType() {\n    return DefaultType$c;\n  }\n  static get NAME() {\n    return NAME$d;\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY$9);\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX;\n      return;\n    }\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX;\n    }\n  }\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX;\n    }\n    this._handleSwipe();\n    execute(this._config.endCallback);\n  }\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n  }\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX);\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return;\n    }\n    const direction = absDeltaX / this._deltaX;\n    this._deltaX = 0;\n    if (!direction) {\n      return;\n    }\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n  }\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n    }\n  }\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n};\nconst DefaultType$b = {\n  interval: '(number|boolean)',\n  // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._interval = null;\n    this._activeElement = null;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this._swipeHelper = null;\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._addEventListeners();\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default$b;\n  }\n  static get DefaultType() {\n    return DefaultType$b;\n  }\n  static get NAME() {\n    return NAME$c;\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element);\n    }\n    this._clearInterval();\n  }\n  cycle() {\n    this._clearInterval();\n    this._updateInterval();\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n  }\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return;\n    }\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n      return;\n    }\n    this.cycle();\n  }\n  to(index) {\n    const items = this._getItems();\n    if (index > items.length - 1 || index < 0) {\n      return;\n    }\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n    const activeIndex = this._getItemIndex(this._getActive());\n    if (activeIndex === index) {\n      return;\n    }\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n    this._slide(order, items[index]);\n  }\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose();\n    }\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval;\n    return config;\n  }\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n    }\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n      EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n    }\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners();\n    }\n  }\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n    }\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return;\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause();\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout);\n      }\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n    };\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    };\n    this._swipeHelper = new Swipe(this._element, swipeConfig);\n  }\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n    const direction = KEY_TO_DIRECTION[event.key];\n    if (direction) {\n      event.preventDefault();\n      this._slide(this._directionToOrder(direction));\n    }\n  }\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element);\n  }\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return;\n    }\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n    activeIndicator.removeAttribute('aria-current');\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n      newActiveIndicator.setAttribute('aria-current', 'true');\n    }\n  }\n  _updateInterval() {\n    const element = this._activeElement || this._getActive();\n    if (!element) {\n      return;\n    }\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n    this._config.interval = elementInterval || this._config.defaultInterval;\n  }\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return;\n    }\n    const activeElement = this._getActive();\n    const isNext = order === ORDER_NEXT;\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n    if (nextElement === activeElement) {\n      return;\n    }\n    const nextElementIndex = this._getItemIndex(nextElement);\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      });\n    };\n    const slideEvent = triggerEvent(EVENT_SLIDE);\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return;\n    }\n    const isCycling = Boolean(this._interval);\n    this.pause();\n    this._isSliding = true;\n    this._setActiveIndicatorElement(nextElementIndex);\n    this._activeElement = nextElement;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n    nextElement.classList.add(orderClassName);\n    reflow(nextElement);\n    activeElement.classList.add(directionalClassName);\n    nextElement.classList.add(directionalClassName);\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n      this._isSliding = false;\n      triggerEvent(EVENT_SLID);\n    };\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE);\n  }\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n  }\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element);\n  }\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n  }\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config);\n      if (typeof config === 'number') {\n        data.to(config);\n        return;\n      }\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return;\n  }\n  event.preventDefault();\n  const carousel = Carousel.getOrCreateInstance(target);\n  const slideIndex = this.getAttribute('data-bs-slide-to');\n  if (slideIndex) {\n    carousel.to(slideIndex);\n    carousel._maybeEnableCycle();\n    return;\n  }\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next();\n    carousel._maybeEnableCycle();\n    return;\n  }\n  carousel.prev();\n  carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel);\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n  parent: null,\n  toggle: true\n};\nconst DefaultType$a = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._isTransitioning = false;\n    this._triggerArray = [];\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem);\n      }\n    }\n    this._initializeChildren();\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n    }\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default$a;\n  }\n  static get DefaultType() {\n    return DefaultType$a;\n  }\n  static get NAME() {\n    return NAME$b;\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return;\n    }\n    let activeChildren = [];\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n        toggle: false\n      }));\n    }\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return;\n    }\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide();\n    }\n    const dimension = this._getDimension();\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n    this._element.style[dimension] = 0;\n    this._addAriaAndCollapsedClass(this._triggerArray, true);\n    this._isTransitioning = true;\n    const complete = () => {\n      this._isTransitioning = false;\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n      this._element.style[dimension] = '';\n      EventHandler.trigger(this._element, EVENT_SHOWN$6);\n    };\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n    this._queueCallback(complete, this._element, true);\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return;\n    }\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n    const dimension = this._getDimension();\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger);\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false);\n      }\n    }\n    this._isTransitioning = true;\n    const complete = () => {\n      this._isTransitioning = false;\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n      EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n    };\n    this._element.style[dimension] = '';\n    this._queueCallback(complete, this._element, true);\n  }\n\n  // Private\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW$7);\n  }\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle); // Coerce string values\n    config.parent = getElement(config.parent);\n    return config;\n  }\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n  }\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return;\n    }\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element);\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected));\n      }\n    }\n  }\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n  }\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return;\n    }\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n      element.setAttribute('aria-expanded', isOpen);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {};\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config);\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config]();\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, {\n      toggle: false\n    }).toggle();\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n};\nconst DefaultType$9 = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._popper = null;\n    this._parent = this._element.parentNode; // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n    this._inNavbar = this._detectNavbar();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$9;\n  }\n  static get DefaultType() {\n    return DefaultType$9;\n  }\n  static get NAME() {\n    return NAME$a;\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show();\n  }\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return;\n    }\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._createPopper();\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n    this._element.focus();\n    this._element.setAttribute('aria-expanded', true);\n    this._menu.classList.add(CLASS_NAME_SHOW$6);\n    this._element.classList.add(CLASS_NAME_SHOW$6);\n    EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n  }\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return;\n    }\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    this._completeHide(relatedTarget);\n  }\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n    super.dispose();\n  }\n  update() {\n    this._inNavbar = this._detectNavbar();\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n    if (this._popper) {\n      this._popper.destroy();\n    }\n    this._menu.classList.remove(CLASS_NAME_SHOW$6);\n    this._element.classList.remove(CLASS_NAME_SHOW$6);\n    this._element.setAttribute('aria-expanded', 'false');\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n  }\n  _getConfig(config) {\n    config = super._getConfig(config);\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n    return config;\n  }\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org/docs/v2/)');\n    }\n    let referenceElement = this._element;\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent;\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference);\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference;\n    }\n    const popperConfig = this._getPopperConfig();\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n  }\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n  }\n  _getPlacement() {\n    const parentDropdown = this._parent;\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    }\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER;\n    }\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER;\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null;\n  }\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10));\n    }\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n    return offset;\n  }\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    };\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    };\n  }\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n    if (!items.length) {\n      return;\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n      return;\n    }\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle);\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n      const composedPath = event.composedPath();\n      const isMenuTarget = composedPath.includes(context._menu);\n      if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n        continue;\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue;\n      }\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event;\n      }\n      context._completeHide(relatedTarget);\n    }\n  }\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName);\n    const isEscapeEvent = event.key === ESCAPE_KEY$2;\n    const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return;\n    }\n    if (isInput && !isEscapeEvent) {\n      return;\n    }\n    event.preventDefault();\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n    const instance = Dropdown.getOrCreateInstance(getToggleButton);\n    if (isUpOrDownEvent) {\n      event.stopPropagation();\n      instance.show();\n      instance._selectMenuItem(event);\n      return;\n    }\n    if (instance._isShown()) {\n      // else is escape and we check if it is shown\n      event.stopPropagation();\n      instance.hide();\n      getToggleButton.focus();\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n};\nconst DefaultType$8 = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default$8;\n  }\n  static get DefaultType() {\n    return DefaultType$8;\n  }\n  static get NAME() {\n    return NAME$9;\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n    this._append();\n    const element = this._getElement();\n    if (this._config.isAnimated) {\n      reflow(element);\n    }\n    element.classList.add(CLASS_NAME_SHOW$5);\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n    this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  }\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n    this._element.remove();\n    this._isAppended = false;\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = this._config.className;\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$4);\n      }\n      this._element = backdrop;\n    }\n    return this._element;\n  }\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement);\n    return config;\n  }\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n    const element = this._getElement();\n    this._config.rootElement.append(element);\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n};\nconst DefaultType$7 = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n    this._isActive = false;\n    this._lastTabNavDirection = null;\n  }\n\n  // Getters\n  static get Default() {\n    return Default$7;\n  }\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n  static get NAME() {\n    return NAME$8;\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return;\n    }\n    if (this._config.autofocus) {\n      this._config.trapElement.focus();\n    }\n    EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n    this._isActive = true;\n  }\n  deactivate() {\n    if (!this._isActive) {\n      return;\n    }\n    this._isActive = false;\n    EventHandler.off(document, EVENT_KEY$5);\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const {\n      trapElement\n    } = this._config;\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return;\n    }\n    const elements = SelectorEngine.focusableChildren(trapElement);\n    if (elements.length === 0) {\n      trapElement.focus();\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus();\n    } else {\n      elements[0].focus();\n    }\n  }\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return;\n    }\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n  hide() {\n    const width = this.getWidth();\n    this._disableOverFlow();\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n  }\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n    this._resetElementAttributes(this._element, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n  }\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n    this._element.style.overflow = 'hidden';\n  }\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth();\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n      this._saveInitialAttribute(element, styleProperty);\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n    };\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty);\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue);\n    }\n  }\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty);\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty);\n        return;\n      }\n      Manipulator.removeDataAttribute(element, styleProperty);\n      element.style.setProperty(styleProperty, value);\n    };\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n      return;\n    }\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel);\n    }\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n};\nconst DefaultType$6 = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._isShown = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$6;\n  }\n  static get DefaultType() {\n    return DefaultType$6;\n  }\n  static get NAME() {\n    return NAME$7;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n      relatedTarget\n    });\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._isShown = true;\n    this._isTransitioning = true;\n    this._scrollBar.hide();\n    document.body.classList.add(CLASS_NAME_OPEN);\n    this._adjustDialog();\n    this._backdrop.show(() => this._showElement(relatedTarget));\n  }\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    this._isShown = false;\n    this._isTransitioning = true;\n    this._focustrap.deactivate();\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n  }\n  dispose() {\n    EventHandler.off(window, EVENT_KEY$4);\n    EventHandler.off(this._dialog, EVENT_KEY$4);\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n    super.dispose();\n  }\n  handleUpdate() {\n    this._adjustDialog();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    });\n  }\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    });\n  }\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element);\n    }\n    this._element.style.display = 'block';\n    this._element.removeAttribute('aria-hidden');\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.scrollTop = 0;\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate();\n      }\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n        relatedTarget\n      });\n    };\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n  }\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n      if (event.key !== ESCAPE_KEY$1) {\n        return;\n      }\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n      this._triggerBackdropTransition();\n    });\n    EventHandler.on(window, EVENT_RESIZE$1, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog();\n      }\n    });\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return;\n        }\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n          return;\n        }\n        if (this._config.backdrop) {\n          this.hide();\n        }\n      });\n    });\n  }\n  _hideModal() {\n    this._element.style.display = 'none';\n    this._element.setAttribute('aria-hidden', true);\n    this._element.removeAttribute('aria-modal');\n    this._element.removeAttribute('role');\n    this._isTransitioning = false;\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n      this._resetAdjustments();\n      this._scrollBar.reset();\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n    });\n  }\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$3);\n  }\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const initialOverflowY = this._element.style.overflowY;\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden';\n    }\n    this._element.classList.add(CLASS_NAME_STATIC);\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC);\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY;\n      }, this._dialog);\n    }, this._dialog);\n    this._element.focus();\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n    const scrollbarWidth = this._scrollBar.getWidth();\n    const isBodyOverflowing = scrollbarWidth > 0;\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n      this._element.style[property] = `${scrollbarWidth}px`;\n    }\n  }\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config](relatedTarget);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n  EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n    EventHandler.one(target, EVENT_HIDDEN$4, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide();\n  }\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._addEventListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default$5;\n  }\n  static get DefaultType() {\n    return DefaultType$5;\n  }\n  static get NAME() {\n    return NAME$6;\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._isShown = true;\n    this._backdrop.show();\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n    }\n    this._element.setAttribute('aria-modal', true);\n    this._element.setAttribute('role', 'dialog');\n    this._element.classList.add(CLASS_NAME_SHOWING$1);\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate();\n      }\n      this._element.classList.add(CLASS_NAME_SHOW$3);\n      this._element.classList.remove(CLASS_NAME_SHOWING$1);\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    this._focustrap.deactivate();\n    this._element.blur();\n    this._isShown = false;\n    this._element.classList.add(CLASS_NAME_HIDING);\n    this._backdrop.hide();\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n      this._element.removeAttribute('aria-modal');\n      this._element.removeAttribute('role');\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    };\n    this._queueCallback(completeCallback, this._element, true);\n  }\n  dispose() {\n    this._backdrop.dispose();\n    this._focustrap.deactivate();\n    super.dispose();\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n        return;\n      }\n      this.hide();\n    };\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop);\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    });\n  }\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    });\n  }\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return;\n      }\n      if (this._config.keyboard) {\n        this.hide();\n        return;\n      }\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n    });\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config](this);\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this);\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n  if (isDisabled(this)) {\n    return;\n  }\n  EventHandler.one(target, EVENT_HIDDEN$3, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  });\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide();\n  }\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show();\n  }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide();\n    }\n  }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase();\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n    }\n    return true;\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml);\n  }\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase();\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove();\n      continue;\n    }\n    const attributeList = [].concat(...element.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName);\n      }\n    }\n  }\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n  allowList: DefaultAllowlist,\n  content: {},\n  // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n};\nconst DefaultType$4 = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n};\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super();\n    this._config = this._getConfig(config);\n  }\n\n  // Getters\n  static get Default() {\n    return Default$4;\n  }\n  static get DefaultType() {\n    return DefaultType$4;\n  }\n  static get NAME() {\n    return NAME$5;\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n  }\n  hasContent() {\n    return this.getContent().length > 0;\n  }\n  changeContent(content) {\n    this._checkContent(content);\n    this._config.content = {\n      ...this._config.content,\n      ...content\n    };\n    return this;\n  }\n  toHtml() {\n    const templateWrapper = document.createElement('div');\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector);\n    }\n    const template = templateWrapper.children[0];\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '));\n    }\n    return template;\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config);\n    this._checkContent(config.content);\n  }\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({\n        selector,\n        entry: content\n      }, DefaultContentType);\n    }\n  }\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template);\n    if (!templateElement) {\n      return;\n    }\n    content = this._resolvePossibleFunction(content);\n    if (!content) {\n      templateElement.remove();\n      return;\n    }\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement);\n      return;\n    }\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content);\n      return;\n    }\n    templateElement.textContent = content;\n  }\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n  }\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [undefined, this]);\n  }\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = '';\n      templateElement.append(element);\n      return;\n    }\n    templateElement.textContent = element.textContent;\n  }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  title: '',\n  trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org/docs/v2/)');\n    }\n    super(element, config);\n\n    // Private\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._isHovered = null;\n    this._activeTrigger = {};\n    this._popper = null;\n    this._templateFactory = null;\n    this._newContent = null;\n\n    // Protected\n    this.tip = null;\n    this._setListeners();\n    if (!this._config.selector) {\n      this._fixTitle();\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default$3;\n  }\n  static get DefaultType() {\n    return DefaultType$3;\n  }\n  static get NAME() {\n    return NAME$4;\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true;\n  }\n  disable() {\n    this._isEnabled = false;\n  }\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n  toggle() {\n    if (!this._isEnabled) {\n      return;\n    }\n    if (this._isShown()) {\n      this._leave();\n      return;\n    }\n    this._enter();\n  }\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n    }\n    this._disposePopper();\n    super.dispose();\n  }\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return;\n    }\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper();\n    const tip = this._getTipElement();\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n    const {\n      container\n    } = this._config;\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip);\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n    }\n    this._popper = this._createPopper(tip);\n    tip.classList.add(CLASS_NAME_SHOW$2);\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop);\n      }\n    }\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n      if (this._isHovered === false) {\n        this._leave();\n      }\n      this._isHovered = false;\n    };\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n  hide() {\n    if (!this._isShown()) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    const tip = this._getTipElement();\n    tip.classList.remove(CLASS_NAME_SHOW$2);\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop);\n      }\n    }\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    this._isHovered = null; // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n      if (!this._isHovered) {\n        this._disposePopper();\n      }\n      this._element.removeAttribute('aria-describedby');\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n    };\n    this._queueCallback(complete, this.tip, this._isAnimated());\n  }\n  update() {\n    if (this._popper) {\n      this._popper.update();\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle());\n  }\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n    }\n    return this.tip;\n  }\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml();\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null;\n    }\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n    const tipId = getUID(this.constructor.NAME).toString();\n    tip.setAttribute('id', tipId);\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE$2);\n    }\n    return tip;\n  }\n  setContent(content) {\n    this._newContent = content;\n    if (this._isShown()) {\n      this._disposePopper();\n      this.show();\n    }\n  }\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content);\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      });\n    }\n    return this._templateFactory;\n  }\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    };\n  }\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n  }\n  _isAnimated() {\n    return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n  }\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n  }\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element]);\n    const attachment = AttachmentMap[placement.toUpperCase()];\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n  }\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10));\n    }\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n    return offset;\n  }\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element, this._element]);\n  }\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'preSetPlacement',\n        enabled: true,\n        phase: 'beforeMain',\n        fn: data => {\n          // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n          // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n          this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n        }\n      }]\n    };\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    };\n  }\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]);\n          context.toggle();\n        });\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n          context._enter();\n        });\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event);\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n          context._leave();\n        });\n      }\n    }\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n  }\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n    if (!title) {\n      return;\n    }\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title);\n    }\n    this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title');\n  }\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true;\n      return;\n    }\n    this._isHovered = true;\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show();\n      }\n    }, this._config.delay.show);\n  }\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return;\n    }\n    this._isHovered = false;\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide();\n      }\n    }, this._config.delay.hide);\n  }\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout);\n    this._timeout = setTimeout(handler, timeout);\n  }\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true);\n  }\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute];\n      }\n    }\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config = this._mergeConfigObj(config);\n    config = this._configAfterMerge(config);\n    this._typeCheckConfig(config);\n    return config;\n  }\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container);\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n    return config;\n  }\n  _getDelegateConfig() {\n    const config = {};\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value;\n      }\n    }\n    config.selector = false;\n    config.trigger = 'manual';\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config;\n  }\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy();\n      this._popper = null;\n    }\n    if (this.tip) {\n      this.tip.remove();\n      this.tip = null;\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n  trigger: 'click'\n};\nconst DefaultType$2 = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n  static get DefaultType() {\n    return DefaultType$2;\n  }\n  static get NAME() {\n    return NAME$3;\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent();\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    };\n  }\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content);\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n  offset: null,\n  // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n  offset: '(number|null)',\n  // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n    this._activeTarget = null;\n    this._observer = null;\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    };\n    this.refresh(); // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default$1;\n  }\n  static get DefaultType() {\n    return DefaultType$1;\n  }\n  static get NAME() {\n    return NAME$2;\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables();\n    this._maybeEnableSmoothScroll();\n    if (this._observer) {\n      this._observer.disconnect();\n    } else {\n      this._observer = this._getNewObserver();\n    }\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section);\n    }\n  }\n  dispose() {\n    this._observer.disconnect();\n    super.dispose();\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body;\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n    }\n    return config;\n  }\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return;\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK);\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.target.hash);\n      if (observableSection) {\n        event.preventDefault();\n        const root = this._rootElement || window;\n        const height = observableSection.offsetTop - this._element.offsetTop;\n        if (root.scrollTo) {\n          root.scrollTo({\n            top: height,\n            behavior: 'smooth'\n          });\n          return;\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height;\n      }\n    });\n  }\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    };\n    return new IntersectionObserver(entries => this._observerCallback(entries), options);\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n      this._process(targetElement(entry));\n    };\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n    this._previousScrollData.parentScrollTop = parentScrollTop;\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null;\n        this._clearActiveClass(targetElement(entry));\n        continue;\n      }\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry);\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return;\n        }\n        continue;\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry);\n      }\n    }\n  }\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map();\n    this._observableSections = new Map();\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue;\n      }\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor);\n        this._observableSections.set(anchor.hash, observableSection);\n      }\n    }\n  }\n  _process(target) {\n    if (this._activeTarget === target) {\n      return;\n    }\n    this._clearActiveClass(this._config.target);\n    this._activeTarget = target;\n    target.classList.add(CLASS_NAME_ACTIVE$1);\n    this._activateParents(target);\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n      return;\n    }\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE$1);\n      }\n    }\n  }\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE$1);\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE$1);\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy);\n  }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element);\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n    if (!this._parent) {\n      return;\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren());\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  }\n\n  // Public\n  show() {\n    // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element;\n    if (this._elemIsActive(innerElem)) {\n      return;\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem();\n    const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n      relatedTarget: innerElem\n    }) : null;\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n      relatedTarget: active\n    });\n    if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n      return;\n    }\n    this._deactivate(active, innerElem);\n    this._activate(innerElem, active);\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n    element.classList.add(CLASS_NAME_ACTIVE);\n    this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW$1);\n        return;\n      }\n      element.removeAttribute('tabindex');\n      element.setAttribute('aria-selected', true);\n      this._toggleDropDown(element, true);\n      EventHandler.trigger(element, EVENT_SHOWN$1, {\n        relatedTarget: relatedElem\n      });\n    };\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n  }\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return;\n    }\n    element.classList.remove(CLASS_NAME_ACTIVE);\n    element.blur();\n    this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW$1);\n        return;\n      }\n      element.setAttribute('aria-selected', false);\n      element.setAttribute('tabindex', '-1');\n      this._toggleDropDown(element, false);\n      EventHandler.trigger(element, EVENT_HIDDEN$1, {\n        relatedTarget: relatedElem\n      });\n    };\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n  }\n  _keydown(event) {\n    if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n      return;\n    }\n    event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault();\n    const children = this._getChildren().filter(element => !isDisabled(element));\n    let nextActiveElement;\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n    }\n    if (nextActiveElement) {\n      nextActiveElement.focus({\n        preventScroll: true\n      });\n      Tab.getOrCreateInstance(nextActiveElement).show();\n    }\n  }\n  _getChildren() {\n    // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n  }\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null;\n  }\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist');\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child);\n    }\n  }\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child);\n    const isActive = this._elemIsActive(child);\n    const outerElem = this._getOuterElement(child);\n    child.setAttribute('aria-selected', isActive);\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n    }\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1');\n    }\n    this._setAttributeIfNotExists(child, 'role', 'tab');\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child);\n  }\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child);\n    if (!target) {\n      return;\n    }\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n    }\n  }\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element);\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return;\n    }\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem);\n      if (element) {\n        element.classList.toggle(className, open);\n      }\n    };\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n    outerElem.setAttribute('aria-expanded', open);\n  }\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value);\n    }\n  }\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE);\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n      if (typeof config !== 'string') {\n        return;\n      }\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n      data[config]();\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n  if (isDisabled(this)) {\n    return;\n  }\n  Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element);\n  }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n    this._setListeners();\n  }\n\n  // Getters\n  static get Default() {\n    return Default;\n  }\n  static get DefaultType() {\n    return DefaultType;\n  }\n  static get NAME() {\n    return NAME;\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n    this._clearTimeout();\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n      this._maybeScheduleHide();\n    };\n    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n    reflow(this._element);\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n  hide() {\n    if (!this.isShown()) {\n      return;\n    }\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n    this._element.classList.add(CLASS_NAME_SHOWING);\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n  dispose() {\n    this._clearTimeout();\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n    super.dispose();\n  }\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW);\n  }\n\n  // Private\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        {\n          this._hasMouseInteraction = isInteracting;\n          break;\n        }\n      case 'focusin':\n      case 'focusout':\n        {\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n        }\n    }\n    if (isInteracting) {\n      this._clearTimeout();\n      return;\n    }\n    const nextElement = event.relatedTarget;\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n    this._maybeScheduleHide();\n  }\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n        data[config](this);\n      }\n    });\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\nvar bind = require('function-bind');\nvar $apply = require('./functionApply');\nvar actualApply = require('./actualApply');\n\n/** @type {import('./applyBind')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar setFunctionLength = require('set-function-length');\n\nvar $defineProperty = require('es-define-property');\n\nvar callBindBasic = require('call-bind-apply-helpers');\nvar applyBind = require('call-bind-apply-helpers/applyBind');\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + (adjustedLength > 0 ? adjustedLength : 0),\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n","var extend = require('xtend/immutable');\n\n// Public API\nmodule.exports = cartesian;\n\n/**\n * Creates cartesian product of the provided properties\n *\n * @param   {object|array} list - list of (array) properties or array of arrays\n * @returns {array} all the combinations of the properties\n */\nfunction cartesian(list)\n{\n  var last, init, keys, product = [];\n\n  if (Array.isArray(list))\n  {\n    init = [];\n    last = list.length - 1;\n  }\n  else if (typeof list == 'object' && list !== null)\n  {\n    init = {};\n    keys = Object.keys(list);\n    last = keys.length - 1;\n  }\n  else\n  {\n    throw new TypeError('Expecting an Array or an Object, but `' + (list === null ? 'null' : typeof list) + '` provided.');\n  }\n\n  function add(row, i)\n  {\n    var j, k, r;\n\n    k = keys ? keys[i] : i;\n\n    // either array or not, not expecting objects here\n    Array.isArray(list[k]) || (typeof list[k] == 'undefined' ? list[k] = [] : list[k] = [list[k]]);\n\n    for (j=0; j < list[k].length; j++)\n    {\n      r = clone(row);\n      store(r, list[k][j], k);\n\n      if (i >= last)\n      {\n        product.push(r);\n      }\n      else\n      {\n        add(r, i + 1);\n      }\n    }\n  }\n\n  add(init, 0);\n\n  return product;\n}\n\n/**\n * Clones (shallow copy) provided object or array\n *\n * @param   {object|array} obj - object or array to clone\n * @returns {object|array} - shallow copy of the provided object or array\n */\nfunction clone(obj)\n{\n  return Array.isArray(obj) ? [].concat(obj) : extend(obj);\n}\n\n/**\n * Stores provided element in the provided object or array\n *\n * @param   {object|array} obj - object or array to add to\n * @param   {mixed} elem - element to add\n * @param   {string|number} key - object's property key to add to\n * @returns {void}\n */\nfunction store(obj, elem, key)\n{\n  Array.isArray(obj) ? obj.push(elem) : (obj[key] = elem);\n}\n","/*! DataTables jQuery UI integration\n * ©2011-2014 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document, undefined ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * DataTables integration for jQuery UI. This requires jQuery UI and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using jQuery UI. See https://datatables.net/manual/styling/jqueryui\n * for further information.\n */\n\nvar toolbar_prefix = 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-';\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t'<\"'+toolbar_prefix+'tl ui-corner-tr\"lfr>'+\n\t\t't'+\n\t\t'<\"'+toolbar_prefix+'bl ui-corner-br\"ip>'\n} );\n\n\n$.extend( DataTable.ext.classes, {\n\t\"sWrapper\":            \"dataTables_wrapper dt-jqueryui\",\n\n\t/* Full numbers paging buttons */\n\t\"sPageButton\":         \"fg-button ui-button ui-state-default\",\n\t\"sPageButtonActive\":   \"ui-state-disabled\",\n\t\"sPageButtonDisabled\": \"ui-state-disabled\",\n\n\t/* Features */\n\t\"sPaging\": \"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi \"+\n\t\t\"ui-buttonset-multi paging_\", /* Note that the type is postfixed */\n\n\t/* Scrolling */\n\t\"sScrollHead\": \"dataTables_scrollHead \"+\"ui-state-default\",\n\t\"sScrollFoot\": \"dataTables_scrollFoot \"+\"ui-state-default\",\n\n\t/* Misc */\n\t\"sHeaderTH\":  \"ui-state-default\",\n\t\"sFooterTH\":  \"ui-state-default\"\n} );\n\n\nreturn DataTable;\n}));\n","(function( factory ) {\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( [], factory);\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tmodule.exports = factory();\n\t}\n\t// No browser loader - use JSON, ESM, CJS or AMD\n}\n(function() {\n    return {\n    \"processing\": \"Processant...\",\n    \"lengthMenu\": \"Mostra _MENU_ registres\",\n    \"zeroRecords\": \"No s'han trobat registres\",\n    \"info\": \"Mostrant del _START_ al _END_ d'un total de _TOTAL_ registres\",\n    \"infoEmpty\": \"No hi ha registres disponibles\",\n    \"infoFiltered\": \"(filtrat de _MAX_ registres)\",\n    \"search\": \"Cerca:\",\n    \"infoThousands\": \".\",\n    \"decimal\": \",\",\n    \"loadingRecords\": \"Carregant...\",\n    \"paginate\": {\n        \"first\": \"Primer\",\n        \"previous\": \"Anterior\",\n        \"next\": \"Següent\",\n        \"last\": \"Darrer\"\n    },\n    \"aria\": {\n        \"sortAscending\": \": Activa per ordenar la columna de manera ascendent\",\n        \"sortDescending\": \": Activa per ordenar la columna de manera descendent\"\n    },\n    \"buttons\": {\n        \"print\": \"Imprimeix\",\n        \"copy\": \"Copia\",\n        \"colvis\": \"Columnes\",\n        \"copyTitle\": \"Copia al portapapers\",\n        \"copySuccess\": {\n            \"_\": \"%d files copiades\",\n            \"1\": \"1 fila copiada\"\n        },\n        \"pageLength\": {\n            \"-1\": \"Mostra totes les files\",\n            \"_\": \"Mostra %d files\"\n        },\n        \"pdf\": \"PDF\",\n        \"collection\": \"Col·lecció\",\n        \"colvisRestore\": \"Restaurar visibilitat\",\n        \"copyKeys\": \"Pressiona ctrl o poma + C per copiar les dades de la tabla al teu portapaper\",\n        \"csv\": \"CSV\",\n        \"excel\": \"Excel\",\n        \"createState\": \"Crear Estat\",\n        \"removeAllStates\": \"Borrar tots els Estats\",\n        \"removeState\": \"Borra\",\n        \"renameState\": \"Canviar nom\",\n        \"savedStates\": \"Estats gravats\",\n        \"stateRestore\": \"Restaura\",\n        \"updateState\": \"Actualitza\"\n    },\n    \"select\": {\n        \"rows\": {\n            \"_\": \"%d files seleccionades\",\n            \"1\": \"1 fila seleccionada\"\n        },\n        \"cells\": {\n            \"1\": \"1 fila seleccionada\",\n            \"_\": \"%d files seleccionades\"\n        },\n        \"columns\": {\n            \"1\": \"1 columna seleccionada\",\n            \"_\": \"%d columnes seleccionades\"\n        }\n    },\n    \"autoFill\": {\n        \"cancel\": \"Cancel·lar\",\n        \"fillHorizontal\": \"Omple les cel·les horitzontalment\",\n        \"fillVertical\": \"Omple les cel·les verticalment\",\n        \"fill\": \"Omple totes les cel·les amb <i>%d<\\/i>\"\n    },\n    \"thousands\": \".\",\n    \"datetime\": {\n        \"hours\": \"Hora\",\n        \"seconds\": \"Segons\",\n        \"unknown\": \"Desconegut\",\n        \"amPm\": [\n            \"am\",\n            \"pm\"\n        ],\n        \"previous\": \"Anterior\",\n        \"next\": \"Següent\",\n        \"months\": {\n            \"11\": \"Desembre\",\n            \"10\": \"Novembre\",\n            \"9\": \"Octubre\",\n            \"7\": \"Agost\",\n            \"5\": \"Juny\",\n            \"4\": \"Maig\",\n            \"3\": \"Abril\",\n            \"2\": \"Març\",\n            \"1\": \"Febrer\",\n            \"0\": \"Gener\",\n            \"6\": \"Juliol\",\n            \"8\": \"Setembre\"\n        },\n        \"weekdays\": {\n            \"0\": \"Dg\",\n            \"2\": \"Dt\",\n            \"3\": \"Dc\",\n            \"4\": \"Dj\",\n            \"5\": \"Dv\",\n            \"6\": \"Ds\",\n            \"1\": \"Dl\"\n        },\n        \"minutes\": \"Minuts\"\n    },\n    \"editor\": {\n        \"close\": \"Tancar\",\n        \"create\": {\n            \"button\": \"Nou\",\n            \"title\": \"Crear nova entrada\",\n            \"submit\": \"Crear\"\n        },\n        \"edit\": {\n            \"button\": \"Editar\",\n            \"title\": \"Editar entrada\",\n            \"submit\": \"Actualitzar\"\n        },\n        \"remove\": {\n            \"button\": \"Eliminar\",\n            \"title\": \"Eliminar\",\n            \"submit\": \"Eliminar\",\n            \"confirm\": {\n                \"_\": \"Està segur de voler eliminar %d files?\",\n                \"1\": \"Està segur de voler elmiminar 1 fila?\"\n            }\n        },\n        \"error\": {\n            \"system\": \"Ha ocurregut un error de sistema (Més informació)\"\n        },\n        \"multi\": {\n            \"title\": \"Múltiples valors\",\n            \"restore\": \"Desfés el canvi\",\n            \"info\": \"El ítems seleccionats contenen diferents valors per aquesta entrada. Per editar i configurar tots els ítems per a aquesta entrada al mateix valor, prem o clica tabular aquí, sino, mantindran els seus valors individuals\",\n            \"noMulti\": \"Aquest camp pot ser editat individualment; però no com a part d'un grup\"\n        }\n    },\n    \"searchBuilder\": {\n        \"add\": \"Afegir condició\",\n        \"clearAll\": \"Eliminar tot\",\n        \"condition\": \"Condició\",\n        \"conditions\": {\n            \"date\": {\n                \"after\": \"Després\",\n                \"before\": \"Abans\",\n                \"between\": \"Entre\",\n                \"empty\": \"Buit\",\n                \"equals\": \"Iguals\",\n                \"not\": \"No\",\n                \"notBetween\": \"No entre\",\n                \"notEmpty\": \"No buit\"\n            },\n            \"number\": {\n                \"between\": \"Entre\",\n                \"empty\": \"Buit\",\n                \"equals\": \"Iguals\",\n                \"gt\": \"Major que\",\n                \"gte\": \"Mejor o igual a\",\n                \"lt\": \"Menor que\",\n                \"lte\": \"Menor o igual a\",\n                \"not\": \"No\",\n                \"notBetween\": \"No entre\",\n                \"notEmpty\": \"No buit\"\n            },\n            \"string\": {\n                \"contains\": \"Conté\",\n                \"empty\": \"Buit\",\n                \"endsWith\": \"Finalitza amb\",\n                \"equals\": \"Iguals\",\n                \"not\": \"No\",\n                \"notEmpty\": \"No buit\",\n                \"startsWith\": \"Comença amb\",\n                \"notEndsWith\": \"No acaba amb\",\n                \"notStartsWith\": \"No comença amb\",\n                \"notContains\": \"No inclou\"\n            },\n            \"array\": {\n                \"equals\": \"Iguals\",\n                \"empty\": \"Buit\",\n                \"contains\": \"Conté\",\n                \"not\": \"No\",\n                \"notEmpty\": \"No buit\",\n                \"without\": \"Sense\"\n            }\n        },\n        \"data\": \"Data\",\n        \"deleteTitle\": \"Esborrar regla de filtrat\",\n        \"leftTitle\": \"Criteri de desindentació\",\n        \"logicAnd\": \"I\",\n        \"logicOr\": \"O\",\n        \"rightTitle\": \"Criteri d'indentació\",\n        \"value\": \"Valor\",\n        \"title\": {\n            \"_\": \"Constructor de cerca (%d)\",\n            \"0\": \"Constructor de cerca\"\n        },\n        \"button\": {\n            \"_\": \"Constructor de cerca (%d)\",\n            \"0\": \"Constructor de cerca\"\n        }\n    },\n    \"searchPanes\": {\n        \"collapse\": {\n            \"0\": \"Panells de cerca\",\n            \"_\": \"Panells de cerca (%d)\"\n        },\n        \"count\": \"{total}\",\n        \"countFiltered\": \"{monstrat} ({total})\",\n        \"loadMessage\": \"Carregant panells de cerca\",\n        \"collapseMessage\": \"Colapsar Tot\",\n        \"clearMessage\": \"Esborrar tot\",\n        \"emptyPanes\": \"No hi ha panells de cerca\",\n        \"showMessage\": \"Mostrar-ho tot\",\n        \"title\": \"Filtres actius - %d\"\n    },\n    \"stateRestore\": {\n        \"removeSubmit\": \"Eliminar\",\n        \"removeJoiner\": \"i\",\n        \"removeError\": \"Error eliminant el registre\",\n        \"removeConfirm\": \"¿Segur que vol eliminar aquest %s?\",\n        \"emptyError\": \"El nom no pot estar buit\",\n        \"creationModal\": {\n            \"button\": \"Crear\",\n            \"columns\": {\n                \"search\": \"Cerca per columnes\",\n                \"visible\": \"Visibilitat de columnes\"\n            },\n            \"name\": \"Nom\",\n            \"order\": \"Ordenar\",\n            \"toggleLabel\": \"Inclou:\",\n            \"paging\": \"Paginació\",\n            \"scroller\": \"Posició Scroll\",\n            \"search\": \"Bñusqueda\",\n            \"searchBuilder\": \"Generador Búsquedes\",\n            \"title\": \"Crear nou Estat\",\n            \"select\": \"Sel·lecció\"\n        },\n        \"renameLabel\": \"Nou nom per %s\",\n        \"duplicateError\": \"Ja existeix un estat amb aquest nom\",\n        \"emptyStates\": \"No hi ha estats gravats\",\n        \"removeTitle\": \"Borrar Estat\",\n        \"renameButton\": \"Canviar nom\",\n        \"renameTitle\": \"Canviar nom\"\n    },\n    \"emptyTable\": \"No hi ha registres disponibles en aquesta taula\"\n};\n}));\n","(function( factory ) {\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( [], factory);\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tmodule.exports = factory();\n\t}\n\t// No browser loader - use JSON, ESM, CJS or AMD\n}\n(function() {\n    return {\n    \"processing\": \"Procesando...\",\n    \"lengthMenu\": \"Mostrar _MENU_ registros\",\n    \"zeroRecords\": \"No se encontraron resultados\",\n    \"emptyTable\": \"Ningún dato disponible en esta tabla\",\n    \"infoEmpty\": \"Mostrando registros del 0 al 0 de un total de 0 registros\",\n    \"infoFiltered\": \"(filtrado de un total de _MAX_ registros)\",\n    \"search\": \"Buscar:\",\n    \"infoThousands\": \",\",\n    \"loadingRecords\": \"Cargando...\",\n    \"paginate\": {\n        \"first\": \"Primero\",\n        \"last\": \"Último\",\n        \"next\": \"Siguiente\",\n        \"previous\": \"Anterior\"\n    },\n    \"aria\": {\n        \"sortAscending\": \": Activar para ordenar la columna de manera ascendente\",\n        \"sortDescending\": \": Activar para ordenar la columna de manera descendente\"\n    },\n    \"buttons\": {\n        \"copy\": \"Copiar\",\n        \"colvis\": \"Visibilidad\",\n        \"collection\": \"Colección\",\n        \"colvisRestore\": \"Restaurar visibilidad\",\n        \"copyKeys\": \"Presione ctrl o u2318 + C para copiar los datos de la tabla al portapapeles del sistema. <br \\/> <br \\/> Para cancelar, haga clic en este mensaje o presione escape.\",\n        \"copySuccess\": {\n            \"1\": \"Copiada 1 fila al portapapeles\",\n            \"_\": \"Copiadas %ds fila al portapapeles\"\n        },\n        \"copyTitle\": \"Copiar al portapapeles\",\n        \"csv\": \"CSV\",\n        \"excel\": \"Excel\",\n        \"pageLength\": {\n            \"-1\": \"Mostrar todas las filas\",\n            \"_\": \"Mostrar %d filas\"\n        },\n        \"pdf\": \"PDF\",\n        \"print\": \"Imprimir\",\n        \"renameState\": \"Cambiar nombre\",\n        \"updateState\": \"Actualizar\",\n        \"createState\": \"Crear Estado\",\n        \"removeAllStates\": \"Remover Estados\",\n        \"removeState\": \"Remover\",\n        \"savedStates\": \"Estados Guardados\",\n        \"stateRestore\": \"Estado %d\"\n    },\n    \"autoFill\": {\n        \"cancel\": \"Cancelar\",\n        \"fill\": \"Rellene todas las celdas con <i>%d<\\/i>\",\n        \"fillHorizontal\": \"Rellenar celdas horizontalmente\",\n        \"fillVertical\": \"Rellenar celdas verticalmentemente\"\n    },\n    \"decimal\": \",\",\n    \"searchBuilder\": {\n        \"add\": \"Añadir condición\",\n        \"button\": {\n            \"0\": \"Constructor de búsqueda\",\n            \"_\": \"Constructor de búsqueda (%d)\"\n        },\n        \"clearAll\": \"Borrar todo\",\n        \"condition\": \"Condición\",\n        \"conditions\": {\n            \"date\": {\n                \"after\": \"Despues\",\n                \"before\": \"Antes\",\n                \"between\": \"Entre\",\n                \"empty\": \"Vacío\",\n                \"equals\": \"Igual a\",\n                \"notBetween\": \"No entre\",\n                \"notEmpty\": \"No Vacio\",\n                \"not\": \"Diferente de\"\n            },\n            \"number\": {\n                \"between\": \"Entre\",\n                \"empty\": \"Vacio\",\n                \"equals\": \"Igual a\",\n                \"gt\": \"Mayor a\",\n                \"gte\": \"Mayor o igual a\",\n                \"lt\": \"Menor que\",\n                \"lte\": \"Menor o igual que\",\n                \"notBetween\": \"No entre\",\n                \"notEmpty\": \"No vacío\",\n                \"not\": \"Diferente de\"\n            },\n            \"string\": {\n                \"contains\": \"Contiene\",\n                \"empty\": \"Vacío\",\n                \"endsWith\": \"Termina en\",\n                \"equals\": \"Igual a\",\n                \"notEmpty\": \"No Vacio\",\n                \"startsWith\": \"Empieza con\",\n                \"not\": \"Diferente de\",\n                \"notContains\": \"No Contiene\",\n                \"notStartsWith\": \"No empieza con\",\n                \"notEndsWith\": \"No termina con\"\n            },\n            \"array\": {\n                \"not\": \"Diferente de\",\n                \"equals\": \"Igual\",\n                \"empty\": \"Vacío\",\n                \"contains\": \"Contiene\",\n                \"notEmpty\": \"No Vacío\",\n                \"without\": \"Sin\"\n            }\n        },\n        \"data\": \"Data\",\n        \"deleteTitle\": \"Eliminar regla de filtrado\",\n        \"leftTitle\": \"Criterios anulados\",\n        \"logicAnd\": \"Y\",\n        \"logicOr\": \"O\",\n        \"rightTitle\": \"Criterios de sangría\",\n        \"title\": {\n            \"0\": \"Constructor de búsqueda\",\n            \"_\": \"Constructor de búsqueda (%d)\"\n        },\n        \"value\": \"Valor\"\n    },\n    \"searchPanes\": {\n        \"clearMessage\": \"Borrar todo\",\n        \"collapse\": {\n            \"0\": \"Paneles de búsqueda\",\n            \"_\": \"Paneles de búsqueda (%d)\"\n        },\n        \"count\": \"{total}\",\n        \"countFiltered\": \"{shown} ({total})\",\n        \"emptyPanes\": \"Sin paneles de búsqueda\",\n        \"loadMessage\": \"Cargando paneles de búsqueda\",\n        \"title\": \"Filtros Activos - %d\",\n        \"showMessage\": \"Mostrar Todo\",\n        \"collapseMessage\": \"Colapsar Todo\"\n    },\n    \"select\": {\n        \"cells\": {\n            \"1\": \"1 celda seleccionada\",\n            \"_\": \"%d celdas seleccionadas\"\n        },\n        \"columns\": {\n            \"1\": \"1 columna seleccionada\",\n            \"_\": \"%d columnas seleccionadas\"\n        },\n        \"rows\": {\n            \"1\": \"1 fila seleccionada\",\n            \"_\": \"%d filas seleccionadas\"\n        }\n    },\n    \"thousands\": \".\",\n    \"datetime\": {\n        \"previous\": \"Anterior\",\n        \"next\": \"Proximo\",\n        \"hours\": \"Horas\",\n        \"minutes\": \"Minutos\",\n        \"seconds\": \"Segundos\",\n        \"unknown\": \"-\",\n        \"amPm\": [\n            \"AM\",\n            \"PM\"\n        ],\n        \"months\": {\n            \"0\": \"Enero\",\n            \"1\": \"Febrero\",\n            \"10\": \"Noviembre\",\n            \"11\": \"Diciembre\",\n            \"2\": \"Marzo\",\n            \"3\": \"Abril\",\n            \"4\": \"Mayo\",\n            \"5\": \"Junio\",\n            \"6\": \"Julio\",\n            \"7\": \"Agosto\",\n            \"8\": \"Septiembre\",\n            \"9\": \"Octubre\"\n        },\n        \"weekdays\": [\n            \"Dom\",\n            \"Lun\",\n            \"Mar\",\n            \"Mie\",\n            \"Jue\",\n            \"Vie\",\n            \"Sab\"\n        ]\n    },\n    \"editor\": {\n        \"close\": \"Cerrar\",\n        \"create\": {\n            \"button\": \"Nuevo\",\n            \"title\": \"Crear Nuevo Registro\",\n            \"submit\": \"Crear\"\n        },\n        \"edit\": {\n            \"button\": \"Editar\",\n            \"title\": \"Editar Registro\",\n            \"submit\": \"Actualizar\"\n        },\n        \"remove\": {\n            \"button\": \"Eliminar\",\n            \"title\": \"Eliminar Registro\",\n            \"submit\": \"Eliminar\",\n            \"confirm\": {\n                \"_\": \"¿Está seguro que desea eliminar %d filas?\",\n                \"1\": \"¿Está seguro que desea eliminar 1 fila?\"\n            }\n        },\n        \"error\": {\n            \"system\": \"Ha ocurrido un error en el sistema (<a target=\\\"\\\\\\\" rel=\\\"\\\\ nofollow\\\" href=\\\"\\\\\\\">Más información&lt;\\\\\\/a&gt;).<\\/a>\"\n        },\n        \"multi\": {\n            \"title\": \"Múltiples Valores\",\n            \"info\": \"Los elementos seleccionados contienen diferentes valores para este registro. Para editar y establecer todos los elementos de este registro con el mismo valor, hacer click o tap aquí, de lo contrario conservarán sus valores individuales.\",\n            \"restore\": \"Deshacer Cambios\",\n            \"noMulti\": \"Este registro puede ser editado individualmente, pero no como parte de un grupo.\"\n        }\n    },\n    \"info\": \"Mostrando _START_ a _END_ de _TOTAL_ registros\",\n    \"stateRestore\": {\n        \"creationModal\": {\n            \"button\": \"Crear\",\n            \"name\": \"Nombre:\",\n            \"order\": \"Clasificación\",\n            \"paging\": \"Paginación\",\n            \"search\": \"Busqueda\",\n            \"select\": \"Seleccionar\",\n            \"columns\": {\n                \"search\": \"Búsqueda de Columna\",\n                \"visible\": \"Visibilidad de Columna\"\n            },\n            \"title\": \"Crear Nuevo Estado\",\n            \"toggleLabel\": \"Incluir:\"\n        },\n        \"emptyError\": \"El nombre no puede estar vacio\",\n        \"removeConfirm\": \"¿Seguro que quiere eliminar este %s?\",\n        \"removeError\": \"Error al eliminar el registro\",\n        \"removeJoiner\": \"y\",\n        \"removeSubmit\": \"Eliminar\",\n        \"renameButton\": \"Cambiar Nombre\",\n        \"renameLabel\": \"Nuevo nombre para %s\",\n        \"duplicateError\": \"Ya existe un Estado con este nombre.\",\n        \"emptyStates\": \"No hay Estados guardados\",\n        \"removeTitle\": \"Remover Estado\",\n        \"renameTitle\": \"Cambiar Nombre Estado\"\n    }\n};\n}));\n","(function( factory ) {\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( [], factory);\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tmodule.exports = factory();\n\t}\n\t// No browser loader - use JSON, ESM, CJS or AMD\n}\n(function() {\n    return {\n    \"emptyTable\": \"Aucune donnée disponible dans le tableau\",\n    \"loadingRecords\": \"Chargement...\",\n    \"processing\": \"Traitement...\",\n    \"select\": {\n        \"rows\": {\n            \"_\": \"%d lignes sélectionnées\",\n            \"1\": \"1 ligne sélectionnée\"\n        },\n        \"cells\": {\n            \"1\": \"1 cellule sélectionnée\",\n            \"_\": \"%d cellules sélectionnées\"\n        },\n        \"columns\": {\n            \"1\": \"1 colonne sélectionnée\",\n            \"_\": \"%d colonnes sélectionnées\"\n        }\n    },\n    \"autoFill\": {\n        \"cancel\": \"Annuler\",\n        \"fill\": \"Remplir toutes les cellules avec <i>%d<\\/i>\",\n        \"fillHorizontal\": \"Remplir les cellules horizontalement\",\n        \"fillVertical\": \"Remplir les cellules verticalement\"\n    },\n    \"searchBuilder\": {\n        \"conditions\": {\n            \"date\": {\n                \"after\": \"Après le\",\n                \"before\": \"Avant le\",\n                \"between\": \"Entre\",\n                \"empty\": \"Vide\",\n                \"not\": \"Différent de\",\n                \"notBetween\": \"Pas entre\",\n                \"notEmpty\": \"Non vide\",\n                \"equals\": \"Égal à\"\n            },\n            \"number\": {\n                \"between\": \"Entre\",\n                \"empty\": \"Vide\",\n                \"gt\": \"Supérieur à\",\n                \"gte\": \"Supérieur ou égal à\",\n                \"lt\": \"Inférieur à\",\n                \"lte\": \"Inférieur ou égal à\",\n                \"not\": \"Différent de\",\n                \"notBetween\": \"Pas entre\",\n                \"notEmpty\": \"Non vide\",\n                \"equals\": \"Égal à\"\n            },\n            \"string\": {\n                \"contains\": \"Contient\",\n                \"empty\": \"Vide\",\n                \"endsWith\": \"Se termine par\",\n                \"not\": \"Différent de\",\n                \"notEmpty\": \"Non vide\",\n                \"startsWith\": \"Commence par\",\n                \"equals\": \"Égal à\",\n                \"notContains\": \"Ne contient pas\",\n                \"notEndsWith\": \"Ne termine pas par\",\n                \"notStartsWith\": \"Ne commence pas par\"\n            },\n            \"array\": {\n                \"empty\": \"Vide\",\n                \"contains\": \"Contient\",\n                \"not\": \"Différent de\",\n                \"notEmpty\": \"Non vide\",\n                \"without\": \"Sans\",\n                \"equals\": \"Égal à\"\n            }\n        },\n        \"add\": \"Ajouter une condition\",\n        \"button\": {\n            \"0\": \"Recherche avancée\",\n            \"_\": \"Recherche avancée (%d)\"\n        },\n        \"clearAll\": \"Effacer tout\",\n        \"condition\": \"Condition\",\n        \"data\": \"Donnée\",\n        \"deleteTitle\": \"Supprimer la règle de filtrage\",\n        \"logicAnd\": \"Et\",\n        \"logicOr\": \"Ou\",\n        \"title\": {\n            \"0\": \"Recherche avancée\",\n            \"_\": \"Recherche avancée (%d)\"\n        },\n        \"value\": \"Valeur\",\n        \"leftTitle\": \"Désindenter le critère\",\n        \"rightTitle\": \"Indenter le critère\"\n    },\n    \"searchPanes\": {\n        \"clearMessage\": \"Effacer tout\",\n        \"count\": \"{total}\",\n        \"title\": \"Filtres actifs - %d\",\n        \"collapse\": {\n            \"0\": \"Volet de recherche\",\n            \"_\": \"Volet de recherche (%d)\"\n        },\n        \"countFiltered\": \"{shown} ({total})\",\n        \"emptyPanes\": \"Pas de volet de recherche\",\n        \"loadMessage\": \"Chargement du volet de recherche...\",\n        \"collapseMessage\": \"Réduire tout\",\n        \"showMessage\": \"Montrer tout\"\n    },\n    \"buttons\": {\n        \"collection\": \"Collection\",\n        \"colvis\": \"Visibilité colonnes\",\n        \"colvisRestore\": \"Rétablir visibilité\",\n        \"copy\": \"Copier\",\n        \"copySuccess\": {\n            \"1\": \"1 ligne copiée dans le presse-papier\",\n            \"_\": \"%d lignes copiées dans le presse-papier\"\n        },\n        \"copyTitle\": \"Copier dans le presse-papier\",\n        \"csv\": \"CSV\",\n        \"excel\": \"Excel\",\n        \"pageLength\": {\n            \"-1\": \"Afficher toutes les lignes\",\n            \"_\": \"Afficher %d lignes\",\n            \"1\": \"Afficher 1 ligne\"\n        },\n        \"pdf\": \"PDF\",\n        \"print\": \"Imprimer\",\n        \"copyKeys\": \"Appuyez sur ctrl ou u2318 + C pour copier les données du tableau dans votre presse-papier.\",\n        \"createState\": \"Créer un état\",\n        \"removeAllStates\": \"Supprimer tous les états\",\n        \"removeState\": \"Supprimer\",\n        \"renameState\": \"Renommer\",\n        \"savedStates\": \"États sauvegardés\",\n        \"stateRestore\": \"État %d\",\n        \"updateState\": \"Mettre à jour\"\n    },\n    \"decimal\": \",\",\n    \"datetime\": {\n        \"previous\": \"Précédent\",\n        \"next\": \"Suivant\",\n        \"hours\": \"Heures\",\n        \"minutes\": \"Minutes\",\n        \"seconds\": \"Secondes\",\n        \"unknown\": \"-\",\n        \"amPm\": [\n            \"am\",\n            \"pm\"\n        ],\n        \"months\": {\n            \"0\": \"Janvier\",\n            \"2\": \"Mars\",\n            \"3\": \"Avril\",\n            \"4\": \"Mai\",\n            \"5\": \"Juin\",\n            \"6\": \"Juillet\",\n            \"8\": \"Septembre\",\n            \"9\": \"Octobre\",\n            \"10\": \"Novembre\",\n            \"1\": \"Février\",\n            \"11\": \"Décembre\",\n            \"7\": \"Août\"\n        },\n        \"weekdays\": [\n            \"Dim\",\n            \"Lun\",\n            \"Mar\",\n            \"Mer\",\n            \"Jeu\",\n            \"Ven\",\n            \"Sam\"\n        ]\n    },\n    \"editor\": {\n        \"close\": \"Fermer\",\n        \"create\": {\n            \"title\": \"Créer une nouvelle entrée\",\n            \"button\": \"Nouveau\",\n            \"submit\": \"Créer\"\n        },\n        \"edit\": {\n            \"button\": \"Editer\",\n            \"title\": \"Editer Entrée\",\n            \"submit\": \"Mettre à jour\"\n        },\n        \"remove\": {\n            \"button\": \"Supprimer\",\n            \"title\": \"Supprimer\",\n            \"submit\": \"Supprimer\",\n            \"confirm\": {\n                \"_\": \"Êtes-vous sûr de vouloir supprimer %d lignes ?\",\n                \"1\": \"Êtes-vous sûr de vouloir supprimer 1 ligne ?\"\n            }\n        },\n        \"multi\": {\n            \"title\": \"Valeurs multiples\",\n            \"info\": \"Les éléments sélectionnés contiennent différentes valeurs pour cette entrée. Pour modifier et définir tous les éléments de cette entrée à la même valeur, cliquez ou tapez ici, sinon ils conserveront leurs valeurs individuelles.\",\n            \"restore\": \"Annuler les modifications\",\n            \"noMulti\": \"Ce champ peut être modifié individuellement, mais ne fait pas partie d'un groupe. \"\n        },\n        \"error\": {\n            \"system\": \"Une erreur système s'est produite (<a target=\\\"\\\\\\\" rel=\\\"nofollow\\\" href=\\\"\\\\\\\">Plus d'information<\\/a>).\"\n        }\n    },\n    \"stateRestore\": {\n        \"removeSubmit\": \"Supprimer\",\n        \"creationModal\": {\n            \"button\": \"Créer\",\n            \"order\": \"Tri\",\n            \"paging\": \"Pagination\",\n            \"scroller\": \"Position du défilement\",\n            \"search\": \"Recherche\",\n            \"select\": \"Sélection\",\n            \"columns\": {\n                \"search\": \"Recherche par colonne\",\n                \"visible\": \"Visibilité des colonnes\"\n            },\n            \"name\": \"Nom :\",\n            \"searchBuilder\": \"Recherche avancée\",\n            \"title\": \"Créer un nouvel état\",\n            \"toggleLabel\": \"Inclus :\"\n        },\n        \"renameButton\": \"Renommer\",\n        \"duplicateError\": \"Il existe déjà un état avec ce nom.\",\n        \"emptyError\": \"Le nom ne peut pas être vide.\",\n        \"emptyStates\": \"Aucun état sauvegardé\",\n        \"removeConfirm\": \"Voulez vous vraiment supprimer %s ?\",\n        \"removeError\": \"Échec de la suppression de l'état.\",\n        \"removeJoiner\": \"et\",\n        \"removeTitle\": \"Supprimer l'état\",\n        \"renameLabel\": \"Nouveau nom pour %s :\",\n        \"renameTitle\": \"Renommer l'état\"\n    },\n    \"info\": \"Affichage de _START_ à _END_ sur _TOTAL_ entrées\",\n    \"infoEmpty\": \"Affichage de 0 à 0 sur 0 entrées\",\n    \"infoFiltered\": \"(filtrées depuis un total de _MAX_ entrées)\",\n    \"lengthMenu\": \"Afficher _MENU_ entrées\",\n    \"paginate\": {\n        \"first\": \"Première\",\n        \"last\": \"Dernière\",\n        \"next\": \"Suivante\",\n        \"previous\": \"Précédente\"\n    },\n    \"zeroRecords\": \"Aucune entrée correspondante trouvée\",\n    \"aria\": {\n        \"sortAscending\": \" : activer pour trier la colonne par ordre croissant\",\n        \"sortDescending\": \" : activer pour trier la colonne par ordre décroissant\"\n    },\n    \"infoThousands\": \" \",\n    \"search\": \"Rechercher :\",\n    \"thousands\": \" \"\n};\n}));\n","(function( factory ) {\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( [], factory);\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tmodule.exports = factory();\n\t}\n\t// No browser loader - use JSON, ESM, CJS or AMD\n}\n(function() {\n    return {\n    \"emptyTable\": \"Não foi encontrado nenhum registo\",\n    \"loadingRecords\": \"A carregar...\",\n    \"processing\": \"A processar...\",\n    \"lengthMenu\": \"Mostrar _MENU_ registos\",\n    \"zeroRecords\": \"Não foram encontrados resultados\",\n    \"search\": \"Procurar:\",\n    \"paginate\": {\n        \"first\": \"Primeiro\",\n        \"previous\": \"Anterior\",\n        \"next\": \"Seguinte\",\n        \"last\": \"Último\"\n    },\n    \"aria\": {\n        \"sortAscending\": \": Ordenar colunas de forma ascendente\",\n        \"sortDescending\": \": Ordenar colunas de forma descendente\"\n    },\n    \"autoFill\": {\n        \"cancel\": \"cancelar\",\n        \"fill\": \"preencher\",\n        \"fillHorizontal\": \"preencher células na horizontal\",\n        \"fillVertical\": \"preencher células na vertical\"\n    },\n    \"buttons\": {\n        \"collection\": \"Coleção\",\n        \"colvis\": \"Visibilidade de colunas\",\n        \"colvisRestore\": \"Restaurar visibilidade\",\n        \"copy\": \"Copiar\",\n        \"copySuccess\": {\n            \"1\": \"Uma linha copiada para a área de transferência\",\n            \"_\": \"%ds linhas copiadas para a área de transferência\"\n        },\n        \"copyTitle\": \"Copiar para a área de transferência\",\n        \"csv\": \"CSV\",\n        \"excel\": \"Excel\",\n        \"pageLength\": {\n            \"-1\": \"Mostrar todas as linhas\",\n            \"_\": \"Mostrar %d linhas\"\n        },\n        \"pdf\": \"PDF\",\n        \"print\": \"Imprimir\",\n        \"copyKeys\": \"Pressionar CTRL ou u2318 + C para copiar a informação para a área de transferência. Para cancelar, clique nesta mensagem ou pressione ESC.\",\n        \"createState\": \"Criar\",\n        \"removeAllStates\": \"Remover Todos\",\n        \"removeState\": \"Remover\",\n        \"renameState\": \"Renomear\",\n        \"savedStates\": \"Gravados\",\n        \"stateRestore\": \"Estado %d\",\n        \"updateState\": \"Atualizar\"\n    },\n    \"decimal\": \",\",\n    \"infoFiltered\": \"(filtrado num total de _MAX_ registos)\",\n    \"infoThousands\": \".\",\n    \"searchBuilder\": {\n        \"add\": \"Adicionar condição\",\n        \"button\": {\n            \"0\": \"Construtor de pesquisa\",\n            \"_\": \"Construtor de pesquisa (%d)\"\n        },\n        \"clearAll\": \"Limpar tudo\",\n        \"condition\": \"Condição\",\n        \"conditions\": {\n            \"date\": {\n                \"after\": \"Depois\",\n                \"before\": \"Antes\",\n                \"between\": \"Entre\",\n                \"empty\": \"Vazio\",\n                \"equals\": \"Igual\",\n                \"not\": \"Diferente\",\n                \"notBetween\": \"Não está entre\",\n                \"notEmpty\": \"Não está vazio\"\n            },\n            \"number\": {\n                \"between\": \"Entre\",\n                \"empty\": \"Vazio\",\n                \"equals\": \"Igual\",\n                \"gt\": \"Maior que\",\n                \"gte\": \"Maior ou igual a\",\n                \"lt\": \"Menor que\",\n                \"lte\": \"Menor ou igual a\",\n                \"not\": \"Diferente\",\n                \"notBetween\": \"Não está entre\",\n                \"notEmpty\": \"Não está vazio\"\n            },\n            \"string\": {\n                \"contains\": \"Contém\",\n                \"empty\": \"Vazio\",\n                \"endsWith\": \"Termina em\",\n                \"equals\": \"Igual\",\n                \"not\": \"Diferente\",\n                \"notEmpty\": \"Não está vazio\",\n                \"startsWith\": \"Começa em\",\n                \"notContains\": \"Não contém\",\n                \"notStartsWith\": \"Não começa com\",\n                \"notEndsWith\": \"Não termina com\"\n            },\n            \"array\": {\n                \"equals\": \"Igual\",\n                \"empty\": \"Vazio\",\n                \"contains\": \"Contém\",\n                \"not\": \"Diferente\",\n                \"notEmpty\": \"Não está vazio\",\n                \"without\": \"Sem\"\n            }\n        },\n        \"data\": \"Dados\",\n        \"deleteTitle\": \"Excluir condição de filtragem\",\n        \"logicAnd\": \"E\",\n        \"logicOr\": \"Ou\",\n        \"title\": {\n            \"0\": \"Construtor de pesquisa\",\n            \"_\": \"Construtor de pesquisa (%d)\"\n        },\n        \"value\": \"Valor\",\n        \"leftTitle\": \"Excluir critério\",\n        \"rightTitle\": \"Incluir critério\"\n    },\n    \"searchPanes\": {\n        \"clearMessage\": \"Limpar tudo\",\n        \"collapse\": {\n            \"0\": \"Painéis de pesquisa\",\n            \"_\": \"Painéis de pesquisa (%d)\"\n        },\n        \"count\": \"{total}\",\n        \"countFiltered\": \"{shown} ({total})\",\n        \"emptyPanes\": \"Sem painéis de pesquisa\",\n        \"loadMessage\": \"A carregar painéis de pesquisa\",\n        \"title\": \"Filtros ativos\",\n        \"showMessage\": \"Mostrar todos\",\n        \"collapseMessage\": \"Ocultar Todos\"\n    },\n    \"select\": {\n        \"cells\": {\n            \"1\": \"1 célula seleccionada\",\n            \"_\": \"%d células seleccionadas\"\n        },\n        \"columns\": {\n            \"1\": \"1 coluna seleccionada\",\n            \"_\": \"%d colunas seleccionadas\"\n        },\n        \"rows\": {\n            \"1\": \"%d linha seleccionada\",\n            \"_\": \"%d linhas seleccionadas\"\n        }\n    },\n    \"thousands\": \".\",\n    \"editor\": {\n        \"close\": \"Fechar\",\n        \"create\": {\n            \"button\": \"Novo\",\n            \"title\": \"Criar novo registro\",\n            \"submit\": \"Criar\"\n        },\n        \"edit\": {\n            \"button\": \"Editar\",\n            \"title\": \"Editar registro\",\n            \"submit\": \"Atualizar\"\n        },\n        \"remove\": {\n            \"button\": \"Remover\",\n            \"title\": \"Remover\",\n            \"submit\": \"Remover\",\n            \"confirm\": {\n                \"_\": \"Tem certeza que quer apagar %d entradas?\",\n                \"1\": \"Tem certeza que quer apagar esta entrada?\"\n            }\n        },\n        \"multi\": {\n            \"title\": \"Multiplos valores\",\n            \"restore\": \"Desfazer alterações\",\n            \"info\": \"Os itens selecionados contêm valores diferentes para esta entrada. Para editar e definir todos os itens nesta entrada com o mesmo valor, clique ou toque aqui, caso contrário, eles manterão os seus valores individuais.\",\n            \"noMulti\": \"Este campo pode ser editado individualmente mas não pode ser editado em grupo\"\n        },\n        \"error\": {\n            \"system\": \"Ocorreu um erro no sistema\"\n        }\n    },\n    \"info\": \"Mostrando os registos _START_ a _END_ num total de _TOTAL_\",\n    \"infoEmpty\": \"Mostrando 0 os registos num total de 0\",\n    \"datetime\": {\n        \"previous\": \"anterior\",\n        \"next\": \"próximo\",\n        \"hours\": \"horas\",\n        \"minutes\": \"minutos\",\n        \"seconds\": \"segundos\",\n        \"unknown\": \"desconhecido\",\n        \"amPm\": [\n            \"am\",\n            \"pm\"\n        ],\n        \"weekdays\": [\n            \"Seg\",\n            \"Ter\",\n            \"Qua\",\n            \"Qui\",\n            \"Sex\",\n            \"Sáb\",\n            \"Dom\"\n        ],\n        \"months\": [\n            \"Janeiro\",\n            \"Fevereiro\",\n            \"Março\",\n            \"Abril\",\n            \"Maio\",\n            \"Junho\",\n            \"Julho\",\n            \"Agosto\",\n            \"Setembro\",\n            \"Outubro\",\n            \"Novembro\",\n            \"Dezembro\"\n        ]\n    },\n    \"stateRestore\": {\n        \"creationModal\": {\n            \"button\": \"Criar\",\n            \"columns\": {\n                \"search\": \"Pesquisa por Colunas\",\n                \"visible\": \"Visibilidade das Colunas\"\n            },\n            \"name\": \"Nome:\",\n            \"order\": \"Ordenar\",\n            \"paging\": \"Paginação\",\n            \"scroller\": \"Posição da barra de Scroll\",\n            \"search\": \"Pesquisa\",\n            \"searchBuilder\": \"Pesquisa Avançada\",\n            \"select\": \"Selecionar\",\n            \"title\": \"Criar Novo Estado\",\n            \"toggleLabel\": \"Incluir:\"\n        },\n        \"duplicateError\": \"Já existe um estado com o mesmo nome\",\n        \"emptyError\": \"NÀ�o pode estar a vazio\",\n        \"emptyStates\": \"Não existem estados gravados\",\n        \"removeConfirm\": \"Deseja mesmo remover o estado %s?\",\n        \"removeError\": \"Erro ao remover o estado.\",\n        \"removeJoiner\": \" e \",\n        \"removeSubmit\": \"Apagar\",\n        \"removeTitle\": \"Apagar Estado\",\n        \"renameButton\": \"Renomear\",\n        \"renameLabel\": \"Novo nome para %s:\",\n        \"renameTitle\": \"Renomear Estado\"\n    }\n};\n}));\n","/*! Scroller 2.4.3\n * © SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Scroller\n * @description Virtual rendering for DataTables\n * @version     2.4.3\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Scroller is a virtual rendering plug-in for DataTables which allows large\n * datasets to be drawn on screen very quickly. What the virtual rendering means\n * is that only the visible portion of the table (and a bit to either side to make\n * the scrolling smooth) is drawn, while the scrolling container gives the\n * visual impression that the whole table is visible. This is done by making use\n * of the pagination abilities of DataTables and moving the table around in the\n * scrolling container DataTables adds to the page. The scrolling container is\n * forced to the height it would be for the full table display using an extra\n * element.\n *\n * Note that rows in the table MUST all be the same height. Information in a cell\n * which expands on to multiple lines will cause some odd behaviour in the scrolling.\n *\n * Scroller is initialised by simply including the letter 'S' in the sDom for the\n * table you want to have this feature enabled on. Note that the 'S' must come\n * AFTER the 't' parameter in `dom`.\n *\n * Key features include:\n *   <ul class=\"limit_length\">\n *     <li>Speed! The aim of Scroller for DataTables is to make rendering large data sets fast</li>\n *     <li>Full compatibility with deferred rendering in DataTables for maximum speed</li>\n *     <li>Display millions of rows</li>\n *     <li>Integration with state saving in DataTables (scrolling position is saved)</li>\n *     <li>Easy to use</li>\n *   </ul>\n *\n *  @class\n *  @constructor\n *  @global\n *  @param {object} dt DataTables settings object or API instance\n *  @param {object} [opts={}] Configuration object for Scroller. Options\n *    are defined by {@link Scroller.defaults}\n *\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.11.0+\n */\nvar Scroller = function (dt, opts) {\n\t/* Sanity check - you just know it will happen */\n\tif (!(this instanceof Scroller)) {\n\t\talert(\n\t\t\t\"Scroller warning: Scroller must be initialised with the 'new' keyword.\"\n\t\t);\n\t\treturn;\n\t}\n\n\tif (opts === undefined) {\n\t\topts = {};\n\t}\n\n\tvar dtApi = $.fn.dataTable.Api(dt);\n\n\t/**\n\t * Settings object which contains customisable information for the Scroller instance\n\t * @namespace\n\t * @private\n\t * @extends Scroller.defaults\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @type     object\n\t\t *  @default  Passed in as first parameter to constructor\n\t\t */\n\t\tdt: dtApi.settings()[0],\n\n\t\t/**\n\t\t * DataTables API instance\n\t\t *  @type     DataTable.Api\n\t\t */\n\t\tdtApi: dtApi,\n\n\t\t/**\n\t\t * Pixel location of the top of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the bottom of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableBottom: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling up the way.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling down the way. Note that this is actually calculated as the offset from\n\t\t * the top.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawBottom: 0,\n\n\t\t/**\n\t\t * Auto row height or not indicator\n\t\t *  @type     bool\n\t\t *  @default  0\n\t\t */\n\t\tautoHeight: true,\n\n\t\t/**\n\t\t * Number of rows calculated as visible in the visible viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tviewportRows: 0,\n\n\t\t/**\n\t\t * setTimeout reference for state saving, used when state saving is enabled in the DataTable\n\t\t * and when the user scrolls the viewport in order to stop the cookie set taking too much\n\t\t * CPU!\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tstateTO: null,\n\n\t\tstateSaveThrottle: function () {},\n\n\t\t/**\n\t\t * setTimeout reference for the redraw, used when server-side processing is enabled in the\n\t\t * DataTables in order to prevent DoSing the server\n\t\t *  @type     int\n\t\t *  @default  null\n\t\t */\n\t\tdrawTO: null,\n\n\t\theights: {\n\t\t\tjump: null,\n\t\t\tpage: null,\n\t\t\tvirtual: null,\n\t\t\tscroll: null,\n\n\t\t\t/**\n\t\t\t * Height of rows in the table\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\trow: null,\n\n\t\t\t/**\n\t\t\t * Pixel height of the viewport\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\tviewport: null,\n\t\t\tlabelHeight: 0,\n\t\t\txbar: 0\n\t\t},\n\n\t\ttopRowFloat: 0,\n\t\tscrollDrawDiff: null,\n\t\tloaderVisible: false,\n\t\tforceReposition: false,\n\t\tbaseRowTop: 0,\n\t\tbaseScrollTop: 0,\n\t\tmousedown: false,\n\t\tlastScrollTop: 0\n\t};\n\n\t// @todo The defaults should extend a `c` property and the internal settings\n\t// only held in the `s` property. At the moment they are mixed\n\tthis.s = $.extend(this.s, Scroller.oDefaults, opts);\n\n\t// Workaround for row height being read from height object (see above comment)\n\tthis.s.heights.row = this.s.rowHeight;\n\n\t/**\n\t * DOM elements used by the class instance\n\t * @private\n\t * @namespace\n\t *\n\t */\n\tthis.dom = {\n\t\tforce: document.createElement('div'),\n\t\tlabel: $('<div class=\"dts_label\">0</div>'),\n\t\tscroller: null,\n\t\ttable: null,\n\t\tloader: null\n\t};\n\n\t// Attach the instance to the DataTables instance so it can be accessed in\n\t// future. Don't initialise Scroller twice on the same table\n\tif (this.s.dt.oScroller) {\n\t\treturn;\n\t}\n\n\tthis.s.dt.oScroller = this;\n\n\t/* Let's do it */\n\tthis.construct();\n};\n\n$.extend(Scroller.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods - to be exposed via the DataTables API\n\t */\n\n\t/**\n\t * Calculate and store information about how many rows are to be displayed\n\t * in the scrolling viewport, based on current dimensions in the browser's\n\t * rendering. This can be particularly useful if the table is initially\n\t * drawn in a hidden element - for example in a tab.\n\t *  @param {bool} [redraw=true] Redraw the table automatically after the recalculation, with\n\t *    the new dimensions forming the basis for the draw.\n\t *  @returns {void}\n\t */\n\tmeasure: function (redraw) {\n\t\tif (this.s.autoHeight) {\n\t\t\tthis._calcRowHeight();\n\t\t}\n\n\t\tvar heights = this.s.heights;\n\n\t\tif (heights.row) {\n\t\t\theights.viewport = this._parseHeight(\n\t\t\t\t$(this.dom.scroller).css('max-height')\n\t\t\t);\n\n\t\t\tthis.s.viewportRows =\n\t\t\t\tparseInt(heights.viewport / heights.row, 10) + 1;\n\t\t\tthis.s.dt._iDisplayLength =\n\t\t\t\tthis.s.viewportRows * this.s.displayBuffer;\n\t\t}\n\n\t\tvar label = this.dom.label.outerHeight();\n\n\t\theights.xbar =\n\t\t\tthis.dom.scroller.offsetHeight - this.dom.scroller.clientHeight;\n\t\theights.labelHeight = label;\n\n\t\tif (redraw === undefined || redraw) {\n\t\t\tthis.s.dtApi.draw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Get information about current displayed record range. This corresponds to\n\t * the information usually displayed in the \"Info\" block of the table.\n\t *\n\t * @returns {object} info as an object:\n\t *  {\n\t *      start: {int}, // the 0-indexed record at the top of the viewport\n\t *      end:   {int}, // the 0-indexed record at the bottom of the viewport\n\t *  }\n\t */\n\tpageInfo: function () {\n\t\tvar dt = this.s.dt,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTotal = dt.fnRecordsDisplay(),\n\t\t\tiPossibleEnd = Math.ceil(\n\t\t\t\tthis.pixelsToRow(\n\t\t\t\t\tiScrollTop + this.s.heights.viewport,\n\t\t\t\t\tfalse,\n\t\t\t\t\tthis.s.ani\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn {\n\t\t\tstart: Math.floor(this.pixelsToRow(iScrollTop, false, this.s.ani)),\n\t\t\tend: iTotal < iPossibleEnd ? iTotal - 1 : iPossibleEnd - 1\n\t\t};\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position\n\t * (y-scroll).\n\t *\n\t * Please note that when the height of the full table exceeds 1 million\n\t * pixels, Scroller switches into a non-linear mode for the scrollbar to fit\n\t * all of the records into a finite area, but this function returns a linear\n\t * value (relative to the last non-linear positioning).\n\t *  @param {int} pixels Offset from top to calculate the row number of\n\t *  @param {int} [intParse=true] If an integer value should be returned\n\t *  @param {int} [virtual=false] Perform the calculations in the virtual domain\n\t *  @returns {int} Row index\n\t */\n\tpixelsToRow: function (pixels, intParse, virtual) {\n\t\tvar diff = pixels - this.s.baseScrollTop;\n\t\tvar row = virtual\n\t\t\t? (this._domain('physicalToVirtual', this.s.baseScrollTop) + diff) /\n\t\t\t\tthis.s.heights.row\n\t\t\t: diff / this.s.heights.row + this.s.baseRowTop;\n\n\t\treturn intParse || intParse === undefined ? parseInt(row, 10) : row;\n\t},\n\n\t/**\n\t * Calculate the pixel position from the top of the scrolling container for\n\t * a given row\n\t *  @param {int} iRow Row number to calculate the position of\n\t *  @returns {int} Pixels\n\t */\n\trowToPixels: function (rowIdx, intParse, virtual) {\n\t\tvar pixels;\n\t\tvar diff = rowIdx - this.s.baseRowTop;\n\n\t\tif (virtual) {\n\t\t\tpixels = this._domain('virtualToPhysical', this.s.baseScrollTop);\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\t\telse {\n\t\t\tpixels = this.s.baseScrollTop;\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\n\t\treturn intParse || intParse === undefined\n\t\t\t? parseInt(pixels, 10)\n\t\t\t: pixels;\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position (y-scroll)\n\t *  @param {int} row Row index to scroll to\n\t *  @param {bool} [animate=true] Animate the transition or not\n\t *  @returns {void}\n\t */\n\tscrollToRow: function (row, animate) {\n\t\tvar that = this;\n\t\tvar ani = false;\n\t\tvar px = this.rowToPixels(row);\n\n\t\t// We need to know if the table will redraw or not before doing the\n\t\t// scroll. If it will not redraw, then we need to use the currently\n\t\t// displayed table, and scroll with the physical pixels. Otherwise, we\n\t\t// need to calculate the table's new position from the virtual\n\t\t// transform.\n\t\tvar preRows = ((this.s.displayBuffer - 1) / 2) * this.s.viewportRows;\n\t\tvar drawRow = row - preRows;\n\t\tif (drawRow < 0) {\n\t\t\tdrawRow = 0;\n\t\t}\n\n\t\tif (\n\t\t\t(px > this.s.redrawBottom || px < this.s.redrawTop) &&\n\t\t\tthis.s.dt._iDisplayStart !== drawRow\n\t\t) {\n\t\t\tani = true;\n\t\t\tpx = this._domain('virtualToPhysical', row * this.s.heights.row);\n\n\t\t\t// If we need records outside the current draw region, but the new\n\t\t\t// scrolling position is inside that (due to the non-linear nature\n\t\t\t// for larger numbers of records), we need to force position update.\n\t\t\tif (this.s.redrawTop < px && px < this.s.redrawBottom) {\n\t\t\t\tthis.s.forceReposition = true;\n\t\t\t\tanimate = false;\n\t\t\t}\n\t\t}\n\n\t\tif (animate === undefined || animate) {\n\t\t\tthis.s.ani = ani;\n\t\t\t$(this.dom.scroller).animate(\n\t\t\t\t{\n\t\t\t\t\tscrollTop: px\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// This needs to happen after the animation has completed and\n\t\t\t\t\t// the final scroll event fired\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tthat.s.ani = false;\n\t\t\t\t\t}, 250);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\t$(this.dom.scroller).scrollTop(px);\n\t\t}\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialisation for Scroller\n\t *  @returns {void}\n\t *  @private\n\t */\n\tconstruct: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dtApi;\n\n\t\t/* Sanity check */\n\t\tif (!this.s.dt.oFeatures.bPaginate) {\n\t\t\tthrow new Error(\n\t\t\t\t'Pagination must be enabled for Scroller to operate'\n\t\t\t);\n\t\t}\n\n\t\t/* Insert a div element that we can use to force the DT scrolling container to\n\t\t * the height that would be required if the whole table was being displayed\n\t\t */\n\t\tthis.dom.force.style.position = 'relative';\n\t\tthis.dom.force.style.top = '0px';\n\t\tthis.dom.force.style.left = '0px';\n\t\tthis.dom.force.style.width = '1px';\n\n\t\tthis.dom.scroller = dt.table().node().parentNode;\n\t\tthis.dom.scroller.appendChild(this.dom.force);\n\t\tthis.dom.scroller.style.position = 'relative';\n\n\t\tthis.dom.table = $('>table', this.dom.scroller)[0];\n\t\tthis.dom.table.style.position = 'absolute';\n\t\tthis.dom.table.style.top = '0px';\n\t\tthis.dom.table.style.left = '0px';\n\n\t\t// Add class to 'announce' that we are a Scroller table\n\t\t$(dt.table().container()).addClass('dts DTS');\n\n\t\tthis.dom.label.appendTo(this.dom.scroller);\n\n\t\t/* Initial size calculations */\n\t\tif (this.s.heights.row && this.s.heights.row != 'auto') {\n\t\t\tthis.s.autoHeight = false;\n\t\t}\n\n\t\t// Scrolling callback to see if a page change is needed\n\t\tthis.s.ingnoreScroll = true;\n\t\t$(this.dom.scroller).on('scroll.dt-scroller', function (e) {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t// In iOS we catch the touchstart event in case the user tries to scroll\n\t\t// while the display is already scrolling\n\t\t$(this.dom.scroller).on('touchstart.dt-scroller', function () {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t$(this.dom.scroller)\n\t\t\t.on('mousedown.dt-scroller', function () {\n\t\t\t\tthat.s.mousedown = true;\n\t\t\t})\n\t\t\t.on('mouseup.dt-scroller', function () {\n\t\t\t\tthat.s.labelVisible = false;\n\t\t\t\tthat.s.mousedown = false;\n\t\t\t\tthat.dom.label.css('display', 'none');\n\t\t\t});\n\n\t\t// On resize, update the information element, since the number of rows shown might change\n\t\t$(window).on('resize.dt-scroller', function () {\n\t\t\tthat.measure(false);\n\t\t\tthat._info();\n\t\t});\n\n\t\t// Add a state saving parameter to the DT state saving so we can restore the exact\n\t\t// position of the scrolling.\n\t\tvar initialStateSave = true;\n\t\tvar loadedState = dt.state.loaded();\n\n\t\tdt.on('stateSaveParams.scroller', function (e, settings, data) {\n\t\t\tif (initialStateSave && loadedState) {\n\t\t\t\tdata.scroller = loadedState.scroller;\n\t\t\t\tinitialStateSave = false;\n\n\t\t\t\tif (data.scroller) {\n\t\t\t\t\tthat.s.lastScrollTop = data.scroller.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Need to used the saved position on init\n\t\t\t\tdata.scroller = {\n\t\t\t\t\ttopRow: that.s.topRowFloat,\n\t\t\t\t\tbaseRowTop: that.s.baseRowTop\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\tdt.on('stateLoadParams.scroller', function (e, settings, data) {\n\t\t\tif (data.scroller !== undefined) {\n\t\t\t\tthat.scrollToRow(data.scroller.topRow);\n\t\t\t}\n\t\t});\n\n\t\tthis.measure(false);\n\n\t\tif (loadedState && loadedState.scroller) {\n\t\t\tthis.s.topRowFloat = loadedState.scroller.topRow;\n\t\t\tthis.s.baseRowTop = loadedState.scroller.baseRowTop;\n\n\t\t\t// Reconstruct the scroll positions from the rows - it is possible the\n\t\t\t// row height has changed e.g. if the styling framework has changed.\n\t\t\t// The scroll top is used in `_draw` further down.\n\t\t\tthis.s.baseScrollTop = this.s.baseRowTop * this.s.heights.row;\t\t\t\n\t\t\tloadedState.scroller.scrollTop = this._domain('physicalToVirtual', this.s.topRowFloat * this.s.heights.row);\n\t\t}\n\n\t\tthat.s.stateSaveThrottle = DataTable.util.throttle(function () {\n\t\t\tthat.s.dtApi.state.save();\n\t\t}, 500);\n\n\t\tdt.on('init.scroller', function () {\n\t\t\tthat.measure(false);\n\n\t\t\t// Setting to `jump` will instruct _draw to calculate the scroll top\n\t\t\t// position\n\t\t\tthat.s.scrollType = 'jump';\n\t\t\tthat._draw();\n\n\t\t\t// Update the scroller when the DataTable is redrawn\n\t\t\tdt.on('draw.scroller', function () {\n\t\t\t\tthat._draw();\n\t\t\t});\n\t\t});\n\n\t\t// Set height before the draw happens, allowing everything else to update\n\t\t// on draw complete without worry for roder.\n\t\tdt.on('preDraw.dt.scroller', function () {\n\t\t\tthat._scrollForce();\n\t\t});\n\n\t\t// Destructor\n\t\tdt.on('destroy.scroller', function () {\n\t\t\t$(window).off('resize.dt-scroller');\n\t\t\t$(that.dom.scroller).off('.dt-scroller');\n\t\t\t$(that.s.dt.nTable).off('.scroller');\n\n\t\t\t$(that.s.dt.nTableWrapper).removeClass('DTS');\n\t\t\t$('div.DTS_Loading', that.dom.scroller.parentNode).remove();\n\n\t\t\tthat.dom.table.style.position = '';\n\t\t\tthat.dom.table.style.top = '';\n\t\t\tthat.dom.table.style.left = '';\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Automatic calculation of table row height. This is just a little tricky here as using\n\t * initialisation DataTables has tale the table out of the document, so we need to create\n\t * a new table and insert it into the document, calculate the row height and then whip the\n\t * table out.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_calcRowHeight: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar origTable = dt.nTable;\n\t\tvar nTable = origTable.cloneNode(false);\n\t\tvar tbody = $('<tbody/>').appendTo(nTable);\n\t\tvar dtClasses = dt.oClasses;\n\n\t\t// Different locations for classes in DT2\n\t\tvar classes = DataTable.versionCheck('2')\n\t\t\t? {\n\t\t\t\t\tcontainer: dtClasses.container,\n\t\t\t\t\tscroller: dtClasses.scrolling.container,\n\t\t\t\t\tbody: dtClasses.scrolling.body\n\t\t\t}\n\t\t\t: {\n\t\t\t\t\tcontainer: dtClasses.sWrapper,\n\t\t\t\t\tscroller: dtClasses.sScrollWrapper,\n\t\t\t\t\tbody: dtClasses.sScrollBody\n\t\t\t};\n\n\t\tvar container = $(\n\t\t\t'<div class=\"' +\n\t\t\t\tclasses.container +\n\t\t\t\t' DTS\"><div class=\"' +\n\t\t\t\tclasses.scroller +\n\t\t\t\t'\"><div class=\"' +\n\t\t\t\tclasses.body +\n\t\t\t\t'\"></div></div></div>'\n\t\t);\n\n\t\t// Want 3 rows in the sizing table so :first-child and :last-child\n\t\t// CSS styles don't come into play - take the size of the middle row\n\t\t$('tbody tr:lt(4)', origTable).clone().appendTo(tbody);\n\t\tvar rowsCount = $('tr', tbody).length;\n\n\t\tif (rowsCount === 1) {\n\t\t\ttbody.prepend('<tr><td>&#160;</td></tr>');\n\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t}\n\t\telse {\n\t\t\tfor (; rowsCount < 3; rowsCount++) {\n\t\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t\t}\n\t\t}\n\n\t\t$('div.' + classes.body, container).append(nTable);\n\n\t\t// If initialised using `dom`, use the holding element as the insert point\n\t\tvar insertEl = this.s.dt.nHolding || origTable.parentNode;\n\n\t\tif (!$(insertEl).is(':visible')) {\n\t\t\tinsertEl = 'body';\n\t\t}\n\n\t\t// Remove form element links as they might select over others (particularly radio and checkboxes)\n\t\tcontainer.find('input').removeAttr('name');\n\n\t\tcontainer.appendTo(insertEl);\n\t\tthis.s.heights.row = $('tr', tbody).eq(1).outerHeight();\n\n\t\tcontainer.remove();\n\t},\n\n\t/**\n\t * Draw callback function which is fired when the DataTable is redrawn. The main function of\n\t * this method is to position the drawn table correctly the scrolling container for the rows\n\t * that is displays as a result of the scrolling position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_draw: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTableHeight = $(this.s.dt.nTable).height(),\n\t\t\tdisplayStart = this.s.dt._iDisplayStart,\n\t\t\tdisplayLen = this.s.dt._iDisplayLength,\n\t\t\tdisplayEnd = this.s.dt.fnRecordsDisplay(),\n\t\t\tviewportEndY = iScrollTop + heights.viewport;\n\n\t\t// Disable the scroll event listener while we are updating the DOM\n\t\tthis.s.skip = true;\n\n\t\t// If paging is reset\n\t\tif (\n\t\t\t(this.s.dt.bSorted || this.s.dt.bFiltered) &&\n\t\t\tdisplayStart === 0 &&\n\t\t\t!this.s.dt._drawHold\n\t\t) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\tiScrollTop =\n\t\t\tthis.s.scrollType === 'jump'\n\t\t\t\t? this._domain(\n\t\t\t\t\t'virtualToPhysical',\n\t\t\t\t\tthis.s.topRowFloat * heights.row\n\t\t\t\t)\n\t\t\t\t: iScrollTop;\n\n\t\t// Store positional information so positional calculations can be based\n\t\t// upon the current table draw position\n\t\tthis.s.baseScrollTop = iScrollTop;\n\t\tthis.s.baseRowTop = this.s.topRowFloat;\n\n\t\t// Position the table in the virtual scroller\n\t\tvar tableTop =\n\t\t\tiScrollTop - (this.s.topRowFloat - displayStart) * heights.row;\n\t\tif (displayStart === 0) {\n\t\t\ttableTop = 0;\n\t\t}\n\t\telse if (displayStart + displayLen >= displayEnd) {\n\t\t\ttableTop = heights.scroll - iTableHeight;\n\t\t}\n\t\telse {\n\t\t\tvar iTableBottomY = tableTop + iTableHeight;\n\t\t\tif (iTableBottomY < viewportEndY) {\n\t\t\t\t// The last row of the data is above the end of the viewport.\n\t\t\t\t// This means the background is visible, which is not what the user expects.\n\t\t\t\tvar newTableTop = viewportEndY - iTableHeight;\n\t\t\t\tvar diffPx = newTableTop - tableTop;\n\t\t\t\tthis.s.baseScrollTop += diffPx + 1; // Update start row number in footer.\n\t\t\t\ttableTop = newTableTop; // Move table so last line of data is at the bottom of the viewport.\n\t\t\t}\n\t\t}\n\n\t\tthis.dom.table.style.top = tableTop + 'px';\n\n\t\t/* Cache some information for the scroller */\n\t\tthis.s.tableTop = tableTop;\n\t\tthis.s.tableBottom = iTableHeight + this.s.tableTop;\n\n\t\t// Calculate the boundaries for where a redraw will be triggered by the\n\t\t// scroll event listener\n\t\tvar boundaryPx = (iScrollTop - this.s.tableTop) * this.s.boundaryScale;\n\t\tthis.s.redrawTop = iScrollTop - boundaryPx;\n\t\tthis.s.redrawBottom =\n\t\t\tiScrollTop + boundaryPx >\n\t\t\theights.scroll - heights.viewport - heights.row\n\t\t\t\t? heights.scroll - heights.viewport - heights.row\n\t\t\t\t: iScrollTop + boundaryPx;\n\n\t\tthis.s.skip = false;\n\n\t\tif (that.s.ingnoreScroll) {\n\t\t\t// Restore the scrolling position that was saved by DataTable's state\n\t\t\t// saving Note that this is done on the second draw when data is Ajax\n\t\t\t// sourced, and the first draw when DOM soured\n\t\t\tif (\n\t\t\t\tthis.s.dt.oFeatures.bStateSave &&\n\t\t\t\tthis.s.dt.oLoadedState !== null &&\n\t\t\t\ttypeof this.s.dt.oLoadedState.scroller != 'undefined'\n\t\t\t) {\n\t\t\t\t// A quirk of DataTables is that the draw callback will occur on an\n\t\t\t\t// empty set if Ajax sourced, but not if server-side processing.\n\t\t\t\tvar ajaxSourced =\n\t\t\t\t\t(this.s.dt.sAjaxSource || that.s.dt.ajax) &&\n\t\t\t\t\t!this.s.dt.oFeatures.bServerSide\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: false;\n\n\t\t\t\tif (\n\t\t\t\t\t(ajaxSourced && this.s.dt.iDraw >= 2) ||\n\t\t\t\t\t(!ajaxSourced && this.s.dt.iDraw >= 1)\n\t\t\t\t) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$(that.dom.scroller).scrollTop(\n\t\t\t\t\t\t\tthat.s.dt.oLoadedState.scroller.scrollTop\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// In order to prevent layout thrashing we need another\n\t\t\t\t\t\t// small delay\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t}\n\t\t}\n\n\t\t// Because of the order of the DT callbacks, the info update will\n\t\t// take precedence over the one we want here. So a 'thread' break is\n\t\t// needed.  Only add the thread break if bInfo is set\n\t\tif (this.s.dt.oFeatures.bInfo) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tthat._info.call(that);\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(this.s.dt.nTable).triggerHandler('position.dts.dt', tableTop);\n\t},\n\n\t/**\n\t * Convert from one domain to another. The physical domain is the actual\n\t * pixel count on the screen, while the virtual is if we had browsers which\n\t * had scrolling containers of infinite height (i.e. the absolute value)\n\t *\n\t *  @param {string} dir Domain transform direction, `virtualToPhysical` or\n\t *    `physicalToVirtual`\n\t *  @returns {number} Calculated transform\n\t *  @private\n\t */\n\t_domain: function (dir, val) {\n\t\tvar heights = this.s.heights;\n\t\tvar diff;\n\t\tvar magic = 10000; // the point at which the non-linear calculations start to happen\n\n\t\t// If the virtual and physical height match, then we use a linear\n\t\t// transform between the two, allowing the scrollbar to be linear\n\t\tif (heights.virtual === heights.scroll) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// In the first 10k pixels and the last 10k pixels, we want the scrolling\n\t\t// to be linear. After that it can be non-linear. It would be unusual for\n\t\t// anyone to mouse wheel through that much.\n\t\tif (val < magic) {\n\t\t\treturn val;\n\t\t}\n\t\telse if (\n\t\t\tdir === 'virtualToPhysical' &&\n\t\t\tval >= heights.virtual - magic\n\t\t) {\n\t\t\tdiff = heights.virtual - val;\n\t\t\treturn heights.scroll - diff;\n\t\t}\n\t\telse if (dir === 'physicalToVirtual' && val >= heights.scroll - magic) {\n\t\t\tdiff = heights.scroll - val;\n\t\t\treturn heights.virtual - diff;\n\t\t}\n\n\t\t// Otherwise, we want a non-linear scrollbar to take account of the\n\t\t// redrawing regions at the start and end of the table, otherwise these\n\t\t// can stutter badly - on large tables 30px (for example) scroll might\n\t\t// be hundreds of rows, so the table would be redrawing every few px at\n\t\t// the start and end. Use a simple linear eq. to stop this, effectively\n\t\t// causing a kink in the scrolling ratio. It does mean the scrollbar is\n\t\t// non-linear, but with such massive data sets, the scrollbar is going\n\t\t// to be a best guess anyway\n\t\tvar m =\n\t\t\t(heights.virtual - magic - magic) /\n\t\t\t(heights.scroll - magic - magic);\n\t\tvar c = magic - m * magic;\n\n\t\treturn dir === 'virtualToPhysical' ? (val - c) / m : m * val + c;\n\t},\n\n\t/**\n\t * Update any information elements that are controlled by the DataTable based on the scrolling\n\t * viewport and what rows are visible in it. This function basically acts in the same way as\n\t * _fnUpdateInfo in DataTables, and effectively replaces that function.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_info: function () {\n\t\tif (!this.s.dt.oFeatures.bInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = this.s.dt,\n\t\t\tdtApi = this.s.dtApi,\n\t\t\tlanguage = dt.oLanguage,\n\t\t\tinfo = dtApi.page.info(),\n\t\t\ttotal = info.recordsDisplay,\n\t\t\tmax = info.recordsTotal;\n\n\t\t// If the scroll type is `cont` (continuous) we need to use `baseRowTop`, which\n\t\t// also means we need to work out the difference between the current scroll position\n\t\t// and the \"base\" for when it was required\n\t\tvar diffRows = (this.s.lastScrollTop - this.s.baseScrollTop) / this.s.heights.row;\n\t\tvar start = Math.floor(this.s.baseRowTop + diffRows) + 1;\n\n\t\t// For a jump scroll type, we just use the straightforward calculation based on\n\t\t// `topRowFloat`\n\t\tif (this.s.scrollType === 'jump') {\n\t\t\tstart = Math.floor(this.s.topRowFloat) + 1;\n\t\t}\n\n\t\tvar\n\t\t\tpossibleEnd = start + Math.floor(this.s.heights.viewport / this.s.heights.row),\n\t\t\tend = possibleEnd > total ? total : possibleEnd,\n\t\t\tresult;\n\n\t\tif (total === 0 && total == max) {\n\t\t\t/* Empty record set */\n\t\t\tresult = language.sInfoEmpty + language.sInfoPostFix;\n\t\t}\n\t\telse if (total === 0) {\n\t\t\t// Empty record set after filtering\n\t\t\tresult =\n\t\t\t\tlanguage.sInfoEmpty +\n\t\t\t\t' ' +\n\t\t\t\tlanguage.sInfoFiltered +\n\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\t\telse if (total == max) {\n\t\t\t// Normal record set\n\t\t\tresult = language.sInfo + language.sInfoPostFix;\n\t\t}\n\t\telse {\n\t\t\t// Record set after filtering\n\t\t\tresult = language.sInfo + ' ' + language.sInfoFiltered + language.sInfoPostFix;\n\t\t}\n\n\t\tresult = this._macros(result, start, end, max, total);\n\n\t\tvar callback = language.fnInfoCallback;\n\t\tif (callback) {\n\t\t\tresult = callback.call(\n\t\t\t\tdt.oInstance,\n\t\t\t\tdt,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tmax,\n\t\t\t\ttotal,\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\n\t\t// DT 1.x features\n\t\tvar n = dt.aanFeatures.i;\n\t\tif (typeof n != 'undefined') {\n\t\t\tfor (var i = 0, iLen = n.length; i < iLen; i++) {\n\t\t\t\t$(n[i]).html(result);\n\t\t\t}\n\n\t\t\t$(dt.nTable).triggerHandler('info.dt');\n\t\t}\n\n\t\t// DT 2.x features\n\t\t$('div.dt-info', dtApi.table().container()).each(function () {\n\t\t\t$(this).html(result);\n\t\t\tdtApi.trigger('info', [dtApi.settings()[0], this, result]);\n\t\t});\n\t},\n\n\t/**\n\t * String replacement for info display. Basically the same as what DataTables does.\n\t *\n\t * @param {*} str\n\t * @param {*} start\n\t * @param {*} end\n\t * @param {*} max\n\t * @param {*} total\n\t * @returns Formatted string\n\t */\n\t_macros: function (str, start, end, max, total) {\n\t\tvar api = this.s.dtApi;\n\t\tvar settings = this.s.dt;\n\t\tvar formatter = settings.fnFormatNumber;\n\n\t\treturn str\n\t\t\t.replace(/_START_/g, formatter.call(settings, start))\n\t\t\t.replace(/_END_/g, formatter.call(settings, end))\n\t\t\t.replace(/_MAX_/g, formatter.call(settings, max))\n\t\t\t.replace(/_TOTAL_/g, formatter.call(settings, total))\n\t\t\t.replace(/_ENTRIES_/g, api.i18n('entries', ''))\n\t\t\t.replace(/_ENTRIES-MAX_/g, api.i18n('entries', '', max))\n\t\t\t.replace(/_ENTRIES-TOTAL_/g, api.i18n('entries', '', total));\n\t},\n\n\t/**\n\t * Parse CSS height property string as number\n\t *\n\t * An attempt is made to parse the string as a number. Currently supported units are 'px',\n\t * 'vh', and 'rem'. 'em' is partially supported; it works as long as the parent element's\n\t * font size matches the body element. Zero is returned for unrecognized strings.\n\t *  @param {string} cssHeight CSS height property string\n\t *  @returns {number} height\n\t *  @private\n\t */\n\t_parseHeight: function (cssHeight) {\n\t\tvar height;\n\t\tvar matches = /^([+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+))(px|em|rem|vh)$/.exec(\n\t\t\tcssHeight\n\t\t);\n\n\t\tif (matches === null) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar value = parseFloat(matches[1]);\n\t\tvar unit = matches[2];\n\n\t\tif (unit === 'px') {\n\t\t\theight = value;\n\t\t}\n\t\telse if (unit === 'vh') {\n\t\t\theight = (value / 100) * $(window).height();\n\t\t}\n\t\telse if (unit === 'rem') {\n\t\t\theight = value * parseFloat($(':root').css('font-size'));\n\t\t}\n\t\telse if (unit === 'em') {\n\t\t\theight = value * parseFloat($('body').css('font-size'));\n\t\t}\n\n\t\treturn height ? height : 0;\n\t},\n\n\t/**\n\t * Scrolling function - fired whenever the scrolling position is changed.\n\t * This method needs to use the stored values to see if the table should be\n\t * redrawn as we are moving towards the end of the information that is\n\t * currently drawn or not. If needed, then it will redraw the table based on\n\t * the new position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scroll: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTopRow;\n\n\t\tif (this.s.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.s.ingnoreScroll) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (iScrollTop === this.s.lastScrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* If the table has been sorted or filtered, then we use the redraw that\n\t\t * DataTables as done, rather than performing our own\n\t\t */\n\t\tif (this.s.dt.bFiltered || this.s.dt.bSorted) {\n\t\t\tthis.s.lastScrollTop = 0;\n\t\t\treturn;\n\t\t}\n\n\t\t/* We don't want to state save on every scroll event - that's heavy\n\t\t * handed, so use a timeout to update the state saving only when the\n\t\t * scrolling has finished\n\t\t */\n\t\tclearTimeout(this.s.stateTO);\n\t\tthis.s.stateTO = setTimeout(function () {\n\t\t\tthat.s.dtApi.state.save();\n\n\t\t\t// We can also use this to ensure that the `info` element is correct\n\t\t\t// since there can be a little scroll after the last scroll event!\n\t\t\tthat._info();\n\t\t}, 250);\n\n\t\tthis.s.scrollType =\n\t\t\tMath.abs(iScrollTop - this.s.lastScrollTop) > heights.viewport\n\t\t\t\t? 'jump'\n\t\t\t\t: 'cont';\n\n\t\tthis.s.topRowFloat =\n\t\t\tthis.s.scrollType === 'cont'\n\t\t\t\t? this.pixelsToRow(iScrollTop, false, false)\n\t\t\t\t: this._domain('physicalToVirtual', iScrollTop) / heights.row;\n\n\t\tif (this.s.topRowFloat < 0) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\t/* Check if the scroll point is outside the trigger boundary which would required\n\t\t * a DataTables redraw\n\t\t */\n\t\tif (\n\t\t\tthis.s.forceReposition ||\n\t\t\tiScrollTop < this.s.redrawTop ||\n\t\t\tiScrollTop > this.s.redrawBottom\n\t\t) {\n\t\t\tvar preRows = Math.ceil(\n\t\t\t\t((this.s.displayBuffer - 1) / 2) * this.s.viewportRows\n\t\t\t);\n\n\t\t\tiTopRow = parseInt(this.s.topRowFloat, 10) - preRows;\n\t\t\tthis.s.forceReposition = false;\n\n\t\t\tif (iTopRow <= 0) {\n\t\t\t\t/* At the start of the table */\n\t\t\t\tiTopRow = 0;\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tiTopRow + this.s.dt._iDisplayLength >\n\t\t\t\tthis.s.dt.fnRecordsDisplay()\n\t\t\t) {\n\t\t\t\t/* At the end of the table */\n\t\t\t\tiTopRow =\n\t\t\t\t\tthis.s.dt.fnRecordsDisplay() - this.s.dt._iDisplayLength;\n\t\t\t\tif (iTopRow < 0) {\n\t\t\t\t\tiTopRow = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (iTopRow % 2 !== 0) {\n\t\t\t\t// For the row-striping classes (odd/even) we want only to start\n\t\t\t\t// on evens otherwise the stripes will change between draws and\n\t\t\t\t// look rubbish\n\t\t\t\tiTopRow++;\n\t\t\t}\n\n\t\t\t// Store calcuated value, in case the following condition is not met, but so\n\t\t\t// that the draw function will still use it.\n\t\t\tthis.s.targetTop = iTopRow;\n\n\t\t\tif (iTopRow != this.s.dt._iDisplayStart) {\n\t\t\t\t/* Cache the new table position for quick lookups */\n\t\t\t\tthis.s.tableTop = $(this.s.dt.nTable).offset().top;\n\t\t\t\tthis.s.tableBottom =\n\t\t\t\t\t$(this.s.dt.nTable).height() + this.s.tableTop;\n\n\t\t\t\tvar draw = function () {\n\t\t\t\t\tthat.s.dt._iDisplayStart = that.s.targetTop;\n\t\t\t\t\tthat.s.dtApi.draw('page');\n\t\t\t\t};\n\n\t\t\t\t/* Do the DataTables redraw based on the calculated start point - note that when\n\t\t\t\t * using server-side processing we introduce a small delay to not DoS the server...\n\t\t\t\t */\n\t\t\t\tif (this.s.dt.oFeatures.bServerSide) {\n\t\t\t\t\tthis.s.forceReposition = true;\n\n\t\t\t\t\t// This is used only for KeyTable and is not currently publicly\n\t\t\t\t\t// documented. Open question - is it useful for anything else?\n\t\t\t\t\t$(this.s.dt.nTable).triggerHandler('scroller-will-draw.dt');\n\n\t\t\t\t\tif (DataTable.versionCheck('2')) {\n\t\t\t\t\t\tthat.s.dtApi.processing(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.s.dt.oApi._fnProcessingDisplay(this.s.dt, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tclearTimeout(this.s.drawTO);\n\t\t\t\t\tthis.s.drawTO = setTimeout(draw, this.s.serverWait);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.s.topRowFloat = this.pixelsToRow(iScrollTop, false, true);\n\t\t}\n\n\t\t/* Update the table's information display for what is now in the viewport */\n\t\tthis._info();\n\n\t\tthis.s.lastScrollTop = iScrollTop;\n\t\tthis.s.stateSaveThrottle();\n\n\t\tif (this.s.scrollType === 'jump' && this.s.mousedown) {\n\t\t\tthis.s.labelVisible = true;\n\t\t}\n\t\tif (this.s.labelVisible) {\n\t\t\tvar labelFactor =\n\t\t\t\t(heights.viewport - heights.labelHeight - heights.xbar) /\n\t\t\t\theights.scroll;\n\n\t\t\tthis.dom.label\n\t\t\t\t.html(\n\t\t\t\t\tthis.s.dt.fnFormatNumber(\n\t\t\t\t\t\tparseInt(this.s.topRowFloat, 10) + 1\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.css('top', iScrollTop + iScrollTop * labelFactor)\n\t\t\t\t.css('display', 'block');\n\t\t}\n\t},\n\n\t/**\n\t * Force the scrolling container to have height beyond that of just the\n\t * table that has been drawn so the user can scroll the whole data set.\n\t *\n\t * Note that if the calculated required scrolling height exceeds a maximum\n\t * value (1 million pixels - hard-coded) the forcing element will be set\n\t * only to that maximum value and virtual / physical domain transforms will\n\t * be used to allow Scroller to display tables of any number of records.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scrollForce: function () {\n\t\tvar heights = this.s.heights;\n\t\tvar max = 1000000;\n\n\t\theights.virtual = heights.row * this.s.dt.fnRecordsDisplay();\n\t\theights.scroll = heights.virtual;\n\n\t\tif (heights.scroll > max) {\n\t\t\theights.scroll = max;\n\t\t}\n\n\t\t// Minimum height so there is always a row visible (the 'no rows found'\n\t\t// if reduced to zero filtering)\n\t\tthis.dom.force.style.height =\n\t\t\theights.scroll > this.s.heights.row\n\t\t\t\t? heights.scroll + 'px'\n\t\t\t\t: this.s.heights.row + 'px';\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller default settings for initialisation\n *  @namespace\n *  @name Scroller.defaults\n *  @static\n */\nScroller.defaults = {\n\t/**\n\t * Scroller uses the boundary scaling factor to decide when to redraw the table - which it\n\t * typically does before you reach the end of the currently loaded data set (in order to\n\t * allow the data to look continuous to a user scrolling through the data). If given as 0\n\t * then the table will be redrawn whenever the viewport is scrolled, while 1 would not\n\t * redraw the table until the currently loaded data has all been shown. You will want\n\t * something in the middle - the default factor of 0.5 is usually suitable.\n\t *  @type     float\n\t *  @default  0.5\n\t *  @static\n\t */\n\tboundaryScale: 0.5,\n\n\t/**\n\t * The display buffer is what Scroller uses to calculate how many rows it should pre-fetch\n\t * for scrolling. Scroller automatically adjusts DataTables' display length to pre-fetch\n\t * rows that will be shown in \"near scrolling\" (i.e. just beyond the current display area).\n\t * The value is based upon the number of rows that can be displayed in the viewport (i.e.\n\t * a value of 1), and will apply the display range to records before before and after the\n\t * current viewport - i.e. a factor of 3 will allow Scroller to pre-fetch 1 viewport's worth\n\t * of rows before the current viewport, the current viewport's rows and 1 viewport's worth\n\t * of rows after the current viewport. Adjusting this value can be useful for ensuring\n\t * smooth scrolling based on your data set.\n\t *  @type     int\n\t *  @default  9\n\t *  @static\n\t */\n\tdisplayBuffer: 9,\n\n\t/**\n\t * Scroller will attempt to automatically calculate the height of rows for it's internal\n\t * calculations. However the height that is used can be overridden using this parameter.\n\t *  @type     int|string\n\t *  @default  auto\n\t *  @static\n\t */\n\trowHeight: 'auto',\n\n\t/**\n\t * When using server-side processing, Scroller will wait a small amount of time to allow\n\t * the scrolling to finish before requesting more data from the server. This prevents\n\t * you from DoSing your own server! The wait time can be configured by this parameter.\n\t *  @type     int\n\t *  @default  200\n\t *  @static\n\t */\n\tserverWait: 200\n};\n\nScroller.oDefaults = Scroller.defaults;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller version\n *  @type      String\n *  @default   See code\n *  @name      Scroller.version\n *  @static\n */\nScroller.version = '2.4.3';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtscroller', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.scroller;\n\tvar defaults = DataTable.defaults.scroller;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, init, defaults);\n\n\t\tif (init !== false) {\n\t\t\tnew Scroller(settings, opts);\n\t\t}\n\t}\n});\n\n// Attach Scroller to DataTables so it can be accessed as an 'extra'\n$.fn.dataTable.Scroller = Scroller;\n$.fn.DataTable.Scroller = Scroller;\n\n// DataTables 1.10 API method aliases\nvar Api = $.fn.dataTable.Api;\n\nApi.register('scroller()', function () {\n\treturn this;\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().rowToPixels()', function (rowIdx, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.rowToPixels(rowIdx, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().pixelsToRow()', function (pixels, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pixelsToRow(pixels, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// `scroller().scrollToRow()` is undocumented and deprecated. Use `scroller.toPosition()\nApi.register(\n\t['scroller().scrollToRow()', 'scroller.toPosition()'],\n\tfunction (idx, ani) {\n\t\tthis.iterator('table', function (ctx) {\n\t\t\tif (ctx.oScroller) {\n\t\t\t\tctx.oScroller.scrollToRow(idx, ani);\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n);\n\nApi.register('row().scrollTo()', function (ani) {\n\tvar that = this;\n\n\tthis.iterator('row', function (ctx, rowIdx) {\n\t\tif (ctx.oScroller) {\n\t\t\tvar displayIdx = that\n\t\t\t\t.rows({ order: 'applied', search: 'applied' })\n\t\t\t\t.indexes()\n\t\t\t\t.indexOf(rowIdx);\n\n\t\t\tctx.oScroller.scrollToRow(displayIdx, ani);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.measure()', function (redraw) {\n\tthis.iterator('table', function (ctx) {\n\t\tif (ctx.oScroller) {\n\t\t\tctx.oScroller.measure(redraw);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.page()', function () {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pageInfo();\n\t}\n\t// undefined\n});\n\n\nreturn DataTable;\n}));\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],n):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_de=n(e.dayjs)}(this,(function(e){\"use strict\";function n(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var t=n(e),a={s:\"ein paar Sekunden\",m:[\"eine Minute\",\"einer Minute\"],mm:\"%d Minuten\",h:[\"eine Stunde\",\"einer Stunde\"],hh:\"%d Stunden\",d:[\"ein Tag\",\"einem Tag\"],dd:[\"%d Tage\",\"%d Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[\"%d Monate\",\"%d Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[\"%d Jahre\",\"%d Jahren\"]};function i(e,n,t){var i=a[t];return Array.isArray(i)&&(i=i[n?0:1]),i.replace(\"%d\",e)}var r={name:\"de\",weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),ordinal:function(e){return e+\".\"},weekStart:1,yearStart:4,formats:{LTS:\"HH:mm:ss\",LT:\"HH:mm\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i}};return t.default.locale(r,null,!0),r}));","!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_en=n()}(this,(function(){\"use strict\";return{name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(e){var n=[\"th\",\"st\",\"nd\",\"rd\"],t=e%100;return\"[\"+e+(n[(t-20)%10]||n[t]||n[0])+\"]\"}}}));","!function(e,o){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=o(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],o):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_es=o(e.dayjs)}(this,(function(e){\"use strict\";function o(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var s=o(e),d={name:\"es\",monthsShort:\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),weekStart:1,formats:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},ordinal:function(e){return e+\"º\"}};return s.default.locale(d,null,!0),d}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","!function(e,o){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=o():\"function\"==typeof define&&define.amd?define(o):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_pluralGetSet=o()}(this,(function(){\"use strict\";return function(e,o){var s=o.prototype;[\"milliseconds\",\"seconds\",\"minutes\",\"hours\",\"days\",\"weeks\",\"isoWeeks\",\"months\",\"quarters\",\"years\",\"dates\"].forEach((function(e){s[e]=s[e.replace(/s$/,\"\")]}))}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n","/*! ExcelJS 02-06-2020 */\n\n\"use strict\";function _createForOfIteratorHelper2(e){if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=_unsupportedIterableToArray2(e))){var t=0,r=function(){};return{s:r,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var n,o,i=!0,a=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return i=e.done,e},e:function(e){a=!0,o=e},f:function(){try{i||null==n.return||n.return()}finally{if(a)throw o}}}}function _classCallCheck2(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function _createClass2(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),e}function _toConsumableArray2(e){return _arrayWithoutHoles2(e)||_iterableToArray2(e)||_unsupportedIterableToArray2(e)||_nonIterableSpread2()}function _nonIterableSpread2(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function _unsupportedIterableToArray2(e,t){if(e){if(\"string\"==typeof e)return _arrayLikeToArray2(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===r&&e.constructor&&(r=e.constructor.name),\"Map\"===r||\"Set\"===r?Array.from(r):\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray2(e,t):void 0}}function _iterableToArray2(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}function _arrayWithoutHoles2(e){if(Array.isArray(e))return _arrayLikeToArray2(e)}function _arrayLikeToArray2(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _typeof2(e){return(_typeof2=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}!function(e){if(\"object\"===(\"undefined\"==typeof exports?\"undefined\":_typeof2(exports))&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).ExcelJS=e()}}((function(){var define,module,exports;return function e(t,r,n){function o(a,s){if(!r[a]){if(!t[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var f=r[a]={exports:{}};t[a][0].call(f.exports,(function(e){return o(t[a][1][e]||e)}),f,f.exports,e,t,r,n)}return r[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a<n.length;a++)o(n[a]);return o}({1:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function i(e){return function(){var t=this,r=arguments;return new Promise((function(n,i){var a=e.apply(t,r);function s(e){o(a,n,i,s,u,\"next\",e)}function u(e){o(a,n,i,s,u,\"throw\",e)}s(void 0)}))}}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var s=e(\"fs\"),u=e(\"fast-csv\"),c=e(\"dayjs/plugin/customParseFormat\"),f=e(\"dayjs/plugin/utc\"),l=e(\"dayjs\").extend(c).extend(f),h=e(\"../utils/stream-buf\"),d=e(\"../utils/utils\").fs.exists,p={true:!0,false:!1,\"#N/A\":{error:\"#N/A\"},\"#REF!\":{error:\"#REF!\"},\"#NAME?\":{error:\"#NAME?\"},\"#DIV/0!\":{error:\"#DIV/0!\"},\"#NULL!\":{error:\"#NULL!\"},\"#VALUE!\":{error:\"#VALUE!\"},\"#NUM!\":{error:\"#NUM!\"}},y=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.workbook=t,this.worksheet=null}var t,r,o,c,f;return t=e,(r=[{key:\"readFile\",value:(f=i(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=r||{},e.next=3,d(t);case 3:if(e.sent){e.next=5;break}throw new Error(\"File not found: \".concat(t));case 5:return n=s.createReadStream(t),e.next=8,this.read(n,r);case 8:return o=e.sent,n.close(),e.abrupt(\"return\",o);case 11:case\"end\":return e.stop()}}),e,this)}))),function(e,t){return f.apply(this,arguments)})},{key:\"read\",value:function(e,t){var r=this;return t=t||{},new Promise((function(n,o){var i=r._createInputStream(t).on(\"worksheet\",n).on(\"error\",o);e.pipe(i)}))}},{key:\"createInputStream\",value:function(e){return console.warn(\"`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 4.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\"),this._createInputStream(e)}},{key:\"_createInputStream\",value:function(e){e=e||{};var t=this.workbook.addWorksheet(e.sheetName),r=e.dateFormats||[\"YYYY-MM-DD[T]HH:mm:ssZ\",\"YYYY-MM-DD[T]HH:mm:ss\",\"MM-DD-YYYY\",\"YYYY-MM-DD\"],n=e.map||function(e){if(\"\"===e)return null;var t=Number(e);if(!Number.isNaN(t)&&t!==1/0)return t;var n=r.reduce((function(t,r){if(t)return t;var n=l(e,r,!0);return n.isValid()?n:null}),null);if(n)return new Date(n.valueOf());var o=p[e];return void 0!==o?o:e},o=u.parse(e.parserOptions).on(\"data\",(function(e){t.addRow(e.map(n))})).on(\"end\",(function(){o.emit(\"worksheet\",t)}));return o}},{key:\"write\",value:function(e,t){var r=this;return new Promise((function(o,i){t=t||{};var a=r.workbook.getWorksheet(t.sheetName||t.sheetId),s=u.format(t.formatterOptions);e.on(\"finish\",(function(){o()})),s.on(\"error\",i),s.pipe(e);var c=t,f=c.dateFormat,h=c.dateUTC,d=t.map||function(e){if(e){if(e.text||e.hyperlink)return e.hyperlink||e.text||\"\";if(e.formula||e.result)return e.result||\"\";if(e instanceof Date)return f?h?l.utc(e).format(f):l(e).format(f):h?l.utc(e).format():l(e).format();if(e.error)return e.error;if(\"object\"===n(e))return JSON.stringify(e)}return e},p=void 0===t.includeEmptyRows||t.includeEmptyRows,y=1;a&&a.eachRow((function(e,t){if(p)for(;y++<t-1;)s.write([]);var r=e.values;r.shift(),s.write(r.map(d)),y=t})),s.end()}))}},{key:\"writeFile\",value:function(e,t){var r={encoding:(t=t||{}).encoding||\"utf8\"},n=s.createWriteStream(e,r);return this.write(n,t)}},{key:\"writeBuffer\",value:(c=i(regeneratorRuntime.mark((function e(t){var r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new h,e.next=3,this.write(r,t);case 3:return e.abrupt(\"return\",r.read());case 4:case\"end\":return e.stop()}}),e,this)}))),function(e){return c.apply(this,arguments)})}])&&a(t.prototype,r),o&&a(t,o),e}();t.exports=y},{\"../utils/stream-buf\":21,\"../utils/utils\":24,dayjs:270,\"dayjs/plugin/customParseFormat\":271,\"dayjs/plugin/utc\":272,\"fast-csv\":307,fs:186}],2:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var i=e(\"../utils/col-cache\"),a=function(){function e(t,r){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(n(this,e),r)if(\"string\"==typeof r){var a=i.decodeAddress(r);this.nativeCol=a.col+o,this.nativeColOff=0,this.nativeRow=a.row+o,this.nativeRowOff=0}else void 0!==r.nativeCol?(this.nativeCol=r.nativeCol||0,this.nativeColOff=r.nativeColOff||0,this.nativeRow=r.nativeRow||0,this.nativeRowOff=r.nativeRowOff||0):void 0!==r.col?(this.col=r.col+o,this.row=r.row+o):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0);else this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0;this.worksheet=t}var t,r,a;return t=e,a=[{key:\"asInstance\",value:function(t){return t instanceof e||null==t?t:new e(t)}}],(r=[{key:\"col\",get:function(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth},set:function(e){this.nativeCol=Math.floor(e),this.nativeColOff=Math.floor((e-this.nativeCol)*this.colWidth)}},{key:\"row\",get:function(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight},set:function(e){this.nativeRow=Math.floor(e),this.nativeRowOff=Math.floor((e-this.nativeRow)*this.rowHeight)}},{key:\"colWidth\",get:function(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(1e4*this.worksheet.getColumn(this.nativeCol+1).width):64e4}},{key:\"rowHeight\",get:function(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(1e4*this.worksheet.getRow(this.nativeRow+1).height):18e4}},{key:\"model\",get:function(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}},set:function(e){this.nativeCol=e.nativeCol,this.nativeColOff=e.nativeColOff,this.nativeRow=e.nativeRow,this.nativeRowOff=e.nativeRowOff}}])&&o(t.prototype,r),a&&o(t,a),e}();t.exports=a},{\"../utils/col-cache\":17}],3:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),e}var a=e(\"../utils/col-cache\"),s=e(\"../utils/under-dash\"),u=e(\"./enums\"),c=e(\"../utils/shared-formula\").slideFormula,f=e(\"./note\"),l=function(){function e(t,r,o){if(n(this,e),!t||!r)throw new Error(\"A Cell needs a Row\");this._row=t,this._column=r,a.validateAddress(o),this._address=o,this._value=S.create(e.Types.Null,this),this.style=this._mergeStyle(t.style,r.style,{}),this._mergeCount=0}return i(e,[{key:\"destroy\",value:function(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}},{key:\"_mergeStyle\",value:function(e,t,r){var n=e&&e.numFmt||t&&t.numFmt;n&&(r.numFmt=n);var o=e&&e.font||t&&t.font;o&&(r.font=o);var i=e&&e.alignment||t&&t.alignment;i&&(r.alignment=i);var a=e&&e.border||t&&t.border;a&&(r.border=a);var s=e&&e.fill||t&&t.fill;s&&(r.fill=s);var u=e&&e.protection||t&&t.protection;return u&&(r.protection=u),r}},{key:\"toCsvString\",value:function(){return this._value.toCsvString()}},{key:\"addMergeRef\",value:function(){this._mergeCount++}},{key:\"releaseMergeRef\",value:function(){this._mergeCount--}},{key:\"merge\",value:function(t,r){this._value.release(),this._value=S.create(e.Types.Merge,this,t),r||(this.style=t.style)}},{key:\"unmerge\",value:function(){this.type===e.Types.Merge&&(this._value.release(),this._value=S.create(e.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}},{key:\"isMergedTo\",value:function(t){return this._value.type===e.Types.Merge&&this._value.isMergedTo(t)}},{key:\"toString\",value:function(){return this.text}},{key:\"_upgradeToHyperlink\",value:function(t){this.type===e.Types.String&&(this._value=S.create(e.Types.Hyperlink,this,{text:this._value.value,hyperlink:t}))}},{key:\"addName\",value:function(e){this.workbook.definedNames.addEx(this.fullAddress,e)}},{key:\"removeName\",value:function(e){this.workbook.definedNames.removeEx(this.fullAddress,e)}},{key:\"removeAllNames\",value:function(){this.workbook.definedNames.removeAllNames(this.fullAddress)}},{key:\"worksheet\",get:function(){return this._row.worksheet}},{key:\"workbook\",get:function(){return this._row.worksheet.workbook}},{key:\"numFmt\",get:function(){return this.style.numFmt},set:function(e){this.style.numFmt=e}},{key:\"font\",get:function(){return this.style.font},set:function(e){this.style.font=e}},{key:\"alignment\",get:function(){return this.style.alignment},set:function(e){this.style.alignment=e}},{key:\"border\",get:function(){return this.style.border},set:function(e){this.style.border=e}},{key:\"fill\",get:function(){return this.style.fill},set:function(e){this.style.fill=e}},{key:\"protection\",get:function(){return this.style.protection},set:function(e){this.style.protection=e}},{key:\"address\",get:function(){return this._address}},{key:\"row\",get:function(){return this._row.number}},{key:\"col\",get:function(){return this._column.number}},{key:\"$col$row\",get:function(){return\"$\".concat(this._column.letter,\"$\").concat(this.row)}},{key:\"type\",get:function(){return this._value.type}},{key:\"effectiveType\",get:function(){return this._value.effectiveType}},{key:\"isMerged\",get:function(){return this._mergeCount>0||this.type===e.Types.Merge}},{key:\"master\",get:function(){return this.type===e.Types.Merge?this._value.master:this}},{key:\"isHyperlink\",get:function(){return this._value.type===e.Types.Hyperlink}},{key:\"hyperlink\",get:function(){return this._value.hyperlink}},{key:\"value\",get:function(){return this._value.value},set:function(t){this.type!==e.Types.Merge?(this._value.release(),this._value=S.create(S.getType(t),this,t)):this._value.master.value=t}},{key:\"note\",get:function(){return this._comment&&this._comment.note},set:function(e){this._comment=new f(e)}},{key:\"text\",get:function(){return this._value.toString()}},{key:\"html\",get:function(){return s.escapeHtml(this.text)}},{key:\"formula\",get:function(){return this._value.formula}},{key:\"result\",get:function(){return this._value.result}},{key:\"formulaType\",get:function(){return this._value.formulaType}},{key:\"fullAddress\",get:function(){return{sheetName:this._row.worksheet.name,address:this.address,row:this.row,col:this.col}}},{key:\"name\",get:function(){return this.names[0]},set:function(e){this.names=[e]}},{key:\"names\",get:function(){return this.workbook.definedNames.getNamesEx(this.fullAddress)},set:function(e){var t=this,r=this.workbook.definedNames;r.removeAllNames(this.fullAddress),e.forEach((function(e){r.addEx(t.fullAddress,e)}))}},{key:\"_dataValidations\",get:function(){return this.worksheet.dataValidations}},{key:\"dataValidation\",get:function(){return this._dataValidations.find(this.address)},set:function(e){this._dataValidations.add(this.address,e)}},{key:\"model\",get:function(){var e=this._value.model;return e.style=this.style,this._comment&&(e.comment=this._comment.model),e},set:function(e){if(this._value.release(),this._value=S.create(e.type,this),this._value.model=e,e.comment)switch(e.comment.type){case\"note\":this._comment=f.fromModel(e.comment)}e.style?this.style=e.style:this.style={}}}]),e}();l.Types=u.ValueType;var h=function(){function e(t){n(this,e),this.model={address:t.address,type:l.Types.Null}}return i(e,[{key:\"toCsvString\",value:function(){return\"\"}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return\"\"}},{key:\"value\",get:function(){return null},set:function(e){}},{key:\"type\",get:function(){return l.Types.Null}},{key:\"effectiveType\",get:function(){return l.Types.Null}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),d=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Number,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value.toString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Number}},{key:\"effectiveType\",get:function(){return l.Types.Number}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),p=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.String,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return'\"'.concat(this.model.value.replace(/\"/g,'\"\"'),'\"')}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.String}},{key:\"effectiveType\",get:function(){return l.Types.String}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),y=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.String,value:r}}return i(e,[{key:\"toString\",value:function(){return this.model.value.richText.map((function(e){return e.text})).join(\"\")}},{key:\"toCsvString\",value:function(){return'\"'.concat(this.text.replace(/\"/g,'\"\"'),'\"')}},{key:\"release\",value:function(){}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.RichText}},{key:\"effectiveType\",get:function(){return l.Types.RichText}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),m=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Date,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value.toISOString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Date}},{key:\"effectiveType\",get:function(){return l.Types.Date}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),b=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Hyperlink,text:r?r.text:void 0,hyperlink:r?r.hyperlink:void 0},r&&r.tooltip&&(this.model.tooltip=r.tooltip)}return i(e,[{key:\"toCsvString\",value:function(){return this.model.hyperlink}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.text}},{key:\"value\",get:function(){var e={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(e.tooltip=this.model.tooltip),e},set:function(e){this.model={text:e.text,hyperlink:e.hyperlink},e.tooltip&&(this.model.tooltip=e.tooltip)}},{key:\"text\",get:function(){return this.model.text},set:function(e){this.model.text=e}},{key:\"hyperlink\",get:function(){return this.model.hyperlink},set:function(e){this.model.hyperlink=e}},{key:\"type\",get:function(){return l.Types.Hyperlink}},{key:\"effectiveType\",get:function(){return l.Types.Hyperlink}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),v=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Merge,master:r?r.address:void 0},this._master=r,r&&r.addMergeRef()}return i(e,[{key:\"isMergedTo\",value:function(e){return e===this._master}},{key:\"toCsvString\",value:function(){return\"\"}},{key:\"release\",value:function(){this._master.releaseMergeRef()}},{key:\"toString\",value:function(){return this.value.toString()}},{key:\"value\",get:function(){return this._master.value},set:function(e){e instanceof l?(this._master&&this._master.releaseMergeRef(),e.addMergeRef(),this._master=e):this._master.value=e}},{key:\"master\",get:function(){return this._master}},{key:\"type\",get:function(){return l.Types.Merge}},{key:\"effectiveType\",get:function(){return this._master.effectiveType}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),g=function(){function e(t,r){n(this,e),this.cell=t,this.model={address:t.address,type:l.Types.Formula,shareType:r?r.shareType:void 0,ref:r?r.ref:void 0,formula:r?r.formula:void 0,sharedFormula:r?r.sharedFormula:void 0,result:r?r.result:void 0}}return i(e,[{key:\"_copyModel\",value:function(e){var t={},r=function(r){var n=e[r];n&&(t[r]=n)};return r(\"formula\"),r(\"result\"),r(\"ref\"),r(\"shareType\"),r(\"sharedFormula\"),t}},{key:\"validate\",value:function(e){switch(S.getType(e)){case l.Types.Null:case l.Types.String:case l.Types.Number:case l.Types.Date:break;case l.Types.Hyperlink:case l.Types.Formula:default:throw new Error(\"Cannot process that type of result value\")}}},{key:\"_getTranslatedFormula\",value:function(){if(!this._translatedFormula&&this.model.sharedFormula){var e=this.cell.worksheet.findCell(this.model.sharedFormula);this._translatedFormula=e&&c(e.formula,e.address,this.model.address)}return this._translatedFormula}},{key:\"toCsvString\",value:function(){return\"\".concat(this.model.result||\"\")}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.result?this.model.result.toString():\"\"}},{key:\"value\",get:function(){return this._copyModel(this.model)},set:function(e){this.model=this._copyModel(e)}},{key:\"dependencies\",get:function(){return{ranges:this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g),cells:this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g,\"\").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g)}}},{key:\"formula\",get:function(){return this.model.formula||this._getTranslatedFormula()},set:function(e){this.model.formula=e}},{key:\"formulaType\",get:function(){return this.model.formula?u.FormulaType.Master:this.model.sharedFormula?u.FormulaType.Shared:u.FormulaType.None}},{key:\"result\",get:function(){return this.model.result},set:function(e){this.model.result=e}},{key:\"type\",get:function(){return l.Types.Formula}},{key:\"effectiveType\",get:function(){var e=this.model.result;return null==e?u.ValueType.Null:e instanceof String||\"string\"==typeof e?u.ValueType.String:\"number\"==typeof e?u.ValueType.Number:e instanceof Date?u.ValueType.Date:e.text&&e.hyperlink?u.ValueType.Hyperlink:e.formula?u.ValueType.Formula:u.ValueType.Null}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),w=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.SharedString,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value.toString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.SharedString}},{key:\"effectiveType\",get:function(){return l.Types.SharedString}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),_=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Boolean,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value?1:0}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Boolean}},{key:\"effectiveType\",get:function(){return l.Types.Boolean}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),k=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Error,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.toString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.error.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Error}},{key:\"effectiveType\",get:function(){return l.Types.Error}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),x=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.String,value:JSON.stringify(r),rawValue:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value}},{key:\"value\",get:function(){return this.model.rawValue},set:function(e){this.model.rawValue=e,this.model.value=JSON.stringify(e)}},{key:\"type\",get:function(){return l.Types.String}},{key:\"effectiveType\",get:function(){return l.Types.String}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),S={getType:function(e){return null==e?l.Types.Null:e instanceof String||\"string\"==typeof e?l.Types.String:\"number\"==typeof e?l.Types.Number:\"boolean\"==typeof e?l.Types.Boolean:e instanceof Date?l.Types.Date:e.text&&e.hyperlink?l.Types.Hyperlink:e.formula||e.sharedFormula?l.Types.Formula:e.richText?l.Types.RichText:e.sharedString?l.Types.SharedString:e.error?l.Types.Error:l.Types.JSON},types:[{t:l.Types.Null,f:h},{t:l.Types.Number,f:d},{t:l.Types.String,f:p},{t:l.Types.Date,f:m},{t:l.Types.Hyperlink,f:b},{t:l.Types.Formula,f:g},{t:l.Types.Merge,f:v},{t:l.Types.JSON,f:x},{t:l.Types.SharedString,f:w},{t:l.Types.RichText,f:y},{t:l.Types.Boolean,f:_},{t:l.Types.Error,f:k}].reduce((function(e,t){return e[t.t]=t.f,e}),[]),create:function(e,t,r){var n=this.types[e];if(!n)throw new Error(\"Could not create Value of type \".concat(e));return new n(t,r)}};t.exports=l},{\"../utils/col-cache\":17,\"../utils/shared-formula\":20,\"../utils/under-dash\":23,\"./enums\":7,\"./note\":9}],4:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"../utils/under-dash\"),i=e(\"./enums\"),a=e(\"../utils/col-cache\"),s=function(){function e(t,r,n){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._worksheet=t,this._number=r,!1!==n&&(this.defn=n)}var t,r,s;return t=e,s=[{key:\"toModel\",value:function(e){var t=[],r=null;return e&&e.forEach((function(e,n){e.isDefault?r&&(r=null):r&&e.equivalentTo(r)?r.max=n+1:(r={min:n+1,max:n+1,width:void 0!==e.width?e.width:9,style:e.style,isCustomWidth:e.isCustomWidth,hidden:e.hidden,outlineLevel:e.outlineLevel,collapsed:e.collapsed},t.push(r))})),t.length?t:void 0}},{key:\"fromModel\",value:function(t,r){r=r||[];for(var n=[],o=1,i=0;i<r.length;){for(var a=r[i++];o<a.min;)n.push(new e(t,o++));for(;o<=a.max;)n.push(new e(t,o++,a))}return n.length?n:null}}],(r=[{key:\"toString\",value:function(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}},{key:\"equivalentTo\",value:function(e){return this.width===e.width&&this.hidden===e.hidden&&this.outlineLevel===e.outlineLevel&&o.isEqual(this.style,e.style)}},{key:\"eachCell\",value:function(e,t){var r=this.number;t||(t=e,e=null),this._worksheet.eachRow(e,(function(e,n){t(e.getCell(r),n)}))}},{key:\"_applyStyle\",value:function(e,t){return this.style[e]=t,this.eachCell((function(r){r[e]=t})),t}},{key:\"number\",get:function(){return this._number}},{key:\"worksheet\",get:function(){return this._worksheet}},{key:\"letter\",get:function(){return a.n2l(this._number)}},{key:\"isCustomWidth\",get:function(){return void 0!==this.width&&9!==this.width}},{key:\"defn\",get:function(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}},set:function(e){e?(this.key=e.key,this.width=void 0!==e.width?e.width:9,this.outlineLevel=e.outlineLevel,e.style?this.style=e.style:this.style={},this.header=e.header,this._hidden=!!e.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}},{key:\"headers\",get:function(){return this._header&&this._header instanceof Array?this._header:[this._header]}},{key:\"header\",get:function(){return this._header},set:function(e){var t=this;void 0!==e?(this._header=e,this.headers.forEach((function(e,r){t._worksheet.getCell(r+1,t.number).value=e}))):this._header=void 0}},{key:\"key\",get:function(){return this._key},set:function(e){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=e,e&&this._worksheet.setColumnKey(this._key,this)}},{key:\"hidden\",get:function(){return!!this._hidden},set:function(e){this._hidden=e}},{key:\"outlineLevel\",get:function(){return this._outlineLevel||0},set:function(e){this._outlineLevel=e}},{key:\"collapsed\",get:function(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}},{key:\"isDefault\",get:function(){if(this.isCustomWidth)return!1;if(this.hidden)return!1;if(this.outlineLevel)return!1;var e=this.style;return!e||!(e.font||e.numFmt||e.alignment||e.border||e.fill||e.protection)}},{key:\"headerCount\",get:function(){return this.headers.length}},{key:\"values\",get:function(){var e=[];return this.eachCell((function(t,r){t&&t.type!==i.ValueType.Null&&(e[r]=t.value)})),e},set:function(e){var t=this;if(e){var r=this.number,n=0;e.hasOwnProperty(\"0\")&&(n=1),e.forEach((function(e,o){t._worksheet.getCell(o+n,r).value=e}))}}},{key:\"numFmt\",get:function(){return this.style.numFmt},set:function(e){this._applyStyle(\"numFmt\",e)}},{key:\"font\",get:function(){return this.style.font},set:function(e){this._applyStyle(\"font\",e)}},{key:\"alignment\",get:function(){return this.style.alignment},set:function(e){this._applyStyle(\"alignment\",e)}},{key:\"protection\",get:function(){return this.style.protection},set:function(e){this._applyStyle(\"protection\",e)}},{key:\"border\",get:function(){return this.style.border},set:function(e){this._applyStyle(\"border\",e)}},{key:\"fill\",get:function(){return this.style.fill},set:function(e){this._applyStyle(\"fill\",e)}}])&&n(t.prototype,r),s&&n(t,s),e}();t.exports=s},{\"../utils/col-cache\":17,\"../utils/under-dash\":23,\"./enums\":7}],5:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.model=t||{}}var t,r,o;return t=e,(r=[{key:\"add\",value:function(e,t){return this.model[e]=t}},{key:\"find\",value:function(e){return this.model[e]}},{key:\"remove\",value:function(e){this.model[e]=void 0}}])&&n(t.prototype,r),o&&n(t,o),e}();t.exports=o},{}],6:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"../utils/under-dash\"),i=e(\"../utils/col-cache\"),a=e(\"../utils/cell-matrix\"),s=e(\"./range\"),u=/[$](\\w+)[$](\\d+)(:[$](\\w+)[$](\\d+))?/,c=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.matrixMap={}}var t,r,c;return t=e,(r=[{key:\"getMatrix\",value:function(e){return this.matrixMap[e]||(this.matrixMap[e]=new a)}},{key:\"add\",value:function(e,t){var r=i.decodeEx(e);this.addEx(r,t)}},{key:\"addEx\",value:function(e,t){var r=this.getMatrix(t);if(e.top)for(var n=e.left;n<=e.right;n++)for(var o=e.top;o<=e.bottom;o++){var a={sheetName:e.sheetName,address:i.n2l(n)+o,row:o,col:n};r.addCellEx(a)}else r.addCellEx(e)}},{key:\"remove\",value:function(e,t){var r=i.decodeEx(e);this.removeEx(r,t)}},{key:\"removeEx\",value:function(e,t){this.getMatrix(t).removeCellEx(e)}},{key:\"removeAllNames\",value:function(e){o.each(this.matrixMap,(function(t){t.removeCellEx(e)}))}},{key:\"forEach\",value:function(e){o.each(this.matrixMap,(function(t,r){t.forEach((function(t){e(r,t)}))}))}},{key:\"getNames\",value:function(e){return this.getNamesEx(i.decodeEx(e))}},{key:\"getNamesEx\",value:function(e){return o.map(this.matrixMap,(function(t,r){return t.findCellEx(e)&&r})).filter(Boolean)}},{key:\"_explore\",value:function(e,t){t.mark=!1;var r,n,o=t.sheetName,i=new s(t.row,t.col,t.row,t.col,o);function a(r,n){var a=e.findCellAt(o,r,t.col);return!(!a||!a.mark||(i[n]=r,a.mark=!1,0))}for(n=t.row-1;a(n,\"top\");n--);for(n=t.row+1;a(n,\"bottom\");n++);function u(t,r){var a=[];for(n=i.top;n<=i.bottom;n++){var s=e.findCellAt(o,n,t);if(!s||!s.mark)return!1;a.push(s)}i[r]=t;for(var u=0;u<a.length;u++)a[u].mark=!1;return!0}for(r=t.col-1;u(r,\"left\");r--);for(r=t.col+1;u(r,\"right\");r++);return i}},{key:\"getRanges\",value:function(e,t){var r=this;return(t=t||this.matrixMap[e])?(t.forEach((function(e){e.mark=!0})),{name:e,ranges:t.map((function(e){return e.mark&&r._explore(t,e)})).filter(Boolean).map((function(e){return e.$shortRange}))}):{name:e,ranges:[]}}},{key:\"normaliseMatrix\",value:function(e,t){e.forEachInSheet(t,(function(e,t,r){e&&(e.row===t&&e.col===r||(e.row=t,e.col=r,e.address=i.n2l(r)+t))}))}},{key:\"spliceRows\",value:function(e,t,r,n){var i=this;o.each(this.matrixMap,(function(o){o.spliceRows(e,t,r,n),i.normaliseMatrix(o,e)}))}},{key:\"spliceColumns\",value:function(e,t,r,n){var i=this;o.each(this.matrixMap,(function(o){o.spliceColumns(e,t,r,n),i.normaliseMatrix(o,e)}))}},{key:\"model\",get:function(){var e=this;return o.map(this.matrixMap,(function(t,r){return e.getRanges(r,t)})).filter((function(e){return e.ranges.length}))},set:function(e){var t=this.matrixMap={};e.forEach((function(e){var r=t[e.name]=new a;e.ranges.forEach((function(e){u.test(e.split(\"!\").pop()||\"\")&&r.addCell(e)}))}))}}])&&n(t.prototype,r),c&&n(t,c),e}();t.exports=c},{\"../utils/cell-matrix\":16,\"../utils/col-cache\":17,\"../utils/under-dash\":23,\"./range\":10}],7:[function(e,t,r){t.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:\"#N/A\",Ref:\"#REF!\",Name:\"#NAME?\",DivZero:\"#DIV/0!\",Null:\"#NULL!\",Value:\"#VALUE!\",Num:\"#NUM!\"}}},{}],8:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"../utils/col-cache\"),i=e(\"./anchor\"),a=function(){function e(t,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.worksheet=t,this.model=r}var t,r,a;return t=e,(r=[{key:\"model\",get:function(){switch(this.type){case\"background\":return{type:this.type,imageId:this.imageId};case\"image\":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error(\"Invalid Image Type\")}},set:function(e){var t=e.type,r=e.imageId,n=e.range,a=e.hyperlinks;if(this.type=t,this.imageId=r,\"image\"===t)if(\"string\"==typeof n){var s=o.decode(n);this.range={tl:new i(this.worksheet,{col:s.left,row:s.top},-1),br:new i(this.worksheet,{col:s.right,row:s.bottom},0),editAs:\"oneCell\"}}else this.range={tl:new i(this.worksheet,n.tl,0),br:n.br&&new i(this.worksheet,n.br,0),ext:n.ext,editAs:n.editAs,hyperlinks:a||n.hyperlinks}}}])&&n(t.prototype,r),a&&n(t,a),e}();t.exports=a},{\"../utils/col-cache\":17,\"./anchor\":2}],9:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var i=e(\"../utils/under-dash\"),a=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.note=t}var t,r,a;return t=e,a=[{key:\"fromModel\",value:function(t){var r=new e;return r.model=t,r}}],(r=[{key:\"model\",get:function(){var t=null;switch(n(this.note)){case\"string\":t={type:\"note\",note:{texts:[{text:this.note}]}};break;default:t={type:\"note\",note:this.note}}return i.deepMerge({},e.DEFAULT_CONFIGS,t)},set:function(e){var t=e.note,r=t.texts;1===r.length&&1===Object.keys(r[0]).length?this.note=r[0].text:this.note=t}}])&&o(t.prototype,r),a&&o(t,a),e}();a.DEFAULT_CONFIGS={note:{margins:{insetmode:\"auto\",inset:[.13,.13,.25,.25]},protection:{locked:\"True\",lockText:\"True\"},editAs:\"absolute\"}},t.exports=a},{\"../utils/under-dash\":23}],10:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var i=e(\"./../utils/col-cache\"),a=function(){function e(){n(this,e),this.decode(arguments)}var t,r,a;return t=e,(r=[{key:\"setTLBR\",value:function(e,t,r,n,o){if(arguments.length<4){var a=i.decodeAddress(e),s=i.decodeAddress(t);this.model={top:Math.min(a.row,s.row),left:Math.min(a.col,s.col),bottom:Math.max(a.row,s.row),right:Math.max(a.col,s.col),sheetName:r},this.setTLBR(a.row,a.col,s.row,s.col,o)}else this.model={top:Math.min(e,r),left:Math.min(t,n),bottom:Math.max(e,r),right:Math.max(t,n),sheetName:o}}},{key:\"decode\",value:function(t){switch(t.length){case 5:this.setTLBR(t[0],t[1],t[2],t[3],t[4]);break;case 4:this.setTLBR(t[0],t[1],t[2],t[3]);break;case 3:this.setTLBR(t[0],t[1],t[2]);break;case 2:this.setTLBR(t[0],t[1]);break;case 1:var r=t[0];if(r instanceof e)this.model={top:r.model.top,left:r.model.left,bottom:r.model.bottom,right:r.model.right,sheetName:r.sheetName};else if(r instanceof Array)this.decode(r);else if(r.top&&r.left&&r.bottom&&r.right)this.model={top:r.top,left:r.left,bottom:r.bottom,right:r.right,sheetName:r.sheetName};else{var n=i.decodeEx(r);n.top?this.model={top:n.top,left:n.left,bottom:n.bottom,right:n.right,sheetName:n.sheetName}:this.model={top:n.row,left:n.col,bottom:n.row,right:n.col,sheetName:n.sheetName}}break;case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error(\"Invalid number of arguments to _getDimensions() - \".concat(t.length))}}},{key:\"expand\",value:function(e,t,r,n){(!this.model.top||e<this.top)&&(this.top=e),(!this.model.left||t<this.left)&&(this.left=t),(!this.model.bottom||r>this.bottom)&&(this.bottom=r),(!this.model.right||n>this.right)&&(this.right=n)}},{key:\"expandRow\",value:function(e){if(e){var t=e.dimensions,r=e.number;t&&this.expand(r,t.min,r,t.max)}}},{key:\"expandToAddress\",value:function(e){var t=i.decodeEx(e);this.expand(t.row,t.col,t.row,t.col)}},{key:\"toString\",value:function(){return this.range}},{key:\"intersects\",value:function(e){return!(e.sheetName&&this.sheetName&&e.sheetName!==this.sheetName||e.bottom<this.top||e.top>this.bottom||e.right<this.left||e.left>this.right)}},{key:\"contains\",value:function(e){var t=i.decodeEx(e);return this.containsEx(t)}},{key:\"containsEx\",value:function(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&e.row>=this.top&&e.row<=this.bottom&&e.col>=this.left&&e.col<=this.right}},{key:\"forEachAddress\",value:function(e){for(var t=this.left;t<=this.right;t++)for(var r=this.top;r<=this.bottom;r++)e(i.encodeAddress(r,t),r,t)}},{key:\"top\",get:function(){return this.model.top||1},set:function(e){this.model.top=e}},{key:\"left\",get:function(){return this.model.left||1},set:function(e){this.model.left=e}},{key:\"bottom\",get:function(){return this.model.bottom||1},set:function(e){this.model.bottom=e}},{key:\"right\",get:function(){return this.model.right||1},set:function(e){this.model.right=e}},{key:\"sheetName\",get:function(){return this.model.sheetName},set:function(e){this.model.sheetName=e}},{key:\"_serialisedSheetName\",get:function(){var e=this.model.sheetName;return e?/^[a-zA-Z0-9]*$/.test(e)?\"\".concat(e,\"!\"):\"'\".concat(e,\"'!\"):\"\"}},{key:\"tl\",get:function(){return i.n2l(this.left)+this.top}},{key:\"$t$l\",get:function(){return\"$\".concat(i.n2l(this.left),\"$\").concat(this.top)}},{key:\"br\",get:function(){return i.n2l(this.right)+this.bottom}},{key:\"$b$r\",get:function(){return\"$\".concat(i.n2l(this.right),\"$\").concat(this.bottom)}},{key:\"range\",get:function(){return\"\".concat(this._serialisedSheetName+this.tl,\":\").concat(this.br)}},{key:\"$range\",get:function(){return\"\".concat(this._serialisedSheetName+this.$t$l,\":\").concat(this.$b$r)}},{key:\"shortRange\",get:function(){return this.count>1?this.range:this._serialisedSheetName+this.tl}},{key:\"$shortRange\",get:function(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}},{key:\"count\",get:function(){return(1+this.bottom-this.top)*(1+this.right-this.left)}}])&&o(t.prototype,r),a&&o(t,a),e}();t.exports=a},{\"./../utils/col-cache\":17}],11:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"../utils/under-dash\"),i=e(\"./enums\"),a=e(\"../utils/col-cache\"),s=e(\"./cell\"),u=function(){function e(t,r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._worksheet=t,this._number=r,this._cells=[],this.style={},this.outlineLevel=0}var t,r,u;return t=e,(r=[{key:\"commit\",value:function(){this._worksheet._commitRow(this)}},{key:\"destroy\",value:function(){delete this._worksheet,delete this._cells,delete this.style}},{key:\"findCell\",value:function(e){return this._cells[e-1]}},{key:\"getCellEx\",value:function(e){var t=this._cells[e.col-1];if(!t){var r=this._worksheet.getColumn(e.col);t=new s(this,r,e.address),this._cells[e.col-1]=t}return t}},{key:\"getCell\",value:function(e){if(\"string\"==typeof e){var t=this._worksheet.getColumnKey(e);e=t?t.number:a.l2n(e)}return this._cells[e-1]||this.getCellEx({address:a.encodeAddress(this._number,e),row:this._number,col:e})}},{key:\"splice\",value:function(e,t){for(var r=e+t,n=arguments.length,o=new Array(n>2?n-2:0),i=2;i<n;i++)o[i-2]=arguments[i];var a,s,u,c=o.length-t,f=this._cells.length;if(c<0)for(a=e+o.length;a<=f;a++)u=this._cells[a-1],(s=this._cells[a-c-1])?((u=this.getCell(a)).value=s.value,u.style=s.style):u&&(u.value=null,u.style={});else if(c>0)for(a=f;a>=r;a--)(s=this._cells[a-1])?((u=this.getCell(a+c)).value=s.value,u.style=s.style):this._cells[a+c-1]=void 0;for(a=0;a<o.length;a++)(u=this.getCell(e+a)).value=o[a],u.style={}}},{key:\"eachCell\",value:function(e,t){if(t||(t=e,e=null),e&&e.includeEmpty)for(var r=this._cells.length,n=1;n<=r;n++)t(this.getCell(n),n);else this._cells.forEach((function(e,r){e&&e.type!==i.ValueType.Null&&t(e,r+1)}))}},{key:\"addPageBreak\",value:function(e,t){var r=this._worksheet,n=Math.max(0,e-1)||0,o=Math.max(0,t-1)||16838,i={id:this._number,max:o,man:1};n&&(i.min=n),r.rowBreaks.push(i)}},{key:\"_applyStyle\",value:function(e,t){return this.style[e]=t,this._cells.forEach((function(r){r&&(r[e]=t)})),t}},{key:\"number\",get:function(){return this._number}},{key:\"worksheet\",get:function(){return this._worksheet}},{key:\"values\",get:function(){var e=[];return this._cells.forEach((function(t){t&&t.type!==i.ValueType.Null&&(e[t.col]=t.value)})),e},set:function(e){var t=this;if(this._cells=[],e)if(e instanceof Array){var r=0;e.hasOwnProperty(\"0\")&&(r=1),e.forEach((function(e,n){void 0!==e&&(t.getCellEx({address:a.encodeAddress(t._number,n+r),row:t._number,col:n+r}).value=e)}))}else this._worksheet.eachColumnKey((function(r,n){void 0!==e[n]&&(t.getCellEx({address:a.encodeAddress(t._number,r.number),row:t._number,col:r.number}).value=e[n])}))}},{key:\"hasValues\",get:function(){return o.some(this._cells,(function(e){return e&&e.type!==i.ValueType.Null}))}},{key:\"cellCount\",get:function(){return this._cells.length}},{key:\"actualCellCount\",get:function(){var e=0;return this.eachCell((function(){e++})),e}},{key:\"dimensions\",get:function(){var e=0,t=0;return this._cells.forEach((function(r){r&&r.type!==i.ValueType.Null&&((!e||e>r.col)&&(e=r.col),t<r.col&&(t=r.col))})),e>0?{min:e,max:t}:null}},{key:\"numFmt\",get:function(){return this.style.numFmt},set:function(e){this._applyStyle(\"numFmt\",e)}},{key:\"font\",get:function(){return this.style.font},set:function(e){this._applyStyle(\"font\",e)}},{key:\"alignment\",get:function(){return this.style.alignment},set:function(e){this._applyStyle(\"alignment\",e)}},{key:\"protection\",get:function(){return this.style.protection},set:function(e){this._applyStyle(\"protection\",e)}},{key:\"border\",get:function(){return this.style.border},set:function(e){this._applyStyle(\"border\",e)}},{key:\"fill\",get:function(){return this.style.fill},set:function(e){this._applyStyle(\"fill\",e)}},{key:\"hidden\",get:function(){return!!this._hidden},set:function(e){this._hidden=e}},{key:\"outlineLevel\",get:function(){return this._outlineLevel||0},set:function(e){this._outlineLevel=e}},{key:\"collapsed\",get:function(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}},{key:\"model\",get:function(){var e=[],t=0,r=0;return this._cells.forEach((function(n){if(n){var o=n.model;o&&((!t||t>n.col)&&(t=n.col),r<n.col&&(r=n.col),e.push(o))}})),this.height||e.length?{cells:e,number:this.number,min:t,max:r,height:this.height,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel,collapsed:this.collapsed}:null},set:function(e){var t,r=this;if(e.number!==this._number)throw new Error(\"Invalid row number in model\");this._cells=[],e.cells.forEach((function(e){switch(e.type){case s.Types.Merge:break;default:var n;if(e.address)n=a.decodeAddress(e.address);else if(t){var o=t.row,i=t.col+1;n={row:o,col:i,address:a.encodeAddress(o,i),$col$row:\"$\".concat(a.n2l(i),\"$\").concat(o)}}t=n,r.getCellEx(n).model=e}})),e.height?this.height=e.height:delete this.height,this.hidden=e.hidden,this.outlineLevel=e.outlineLevel||0,this.style=e.style&&JSON.parse(JSON.stringify(e.style))||{}}}])&&n(t.prototype,r),u&&n(t,u),e}();t.exports=u},{\"../utils/col-cache\":17,\"../utils/under-dash\":23,\"./cell\":3,\"./enums\":7}],12:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),e}var a=e(\"./../utils/col-cache\"),s=function(){function e(t,r,o){n(this,e),this.table=t,this.column=r,this.index=o}return i(e,[{key:\"_set\",value:function(e,t){this.table.cacheState(),this.column[e]=t}},{key:\"name\",get:function(){return this.column.name},set:function(e){this._set(\"name\",e)}},{key:\"filterButton\",get:function(){return this.column.filterButton},set:function(e){this.column.filterButton=e}},{key:\"style\",get:function(){return this.column.style},set:function(e){this.column.style=e}},{key:\"totalsRowLabel\",get:function(){return this.column.totalsRowLabel},set:function(e){this._set(\"totalsRowLabel\",e)}},{key:\"totalsRowFunction\",get:function(){return this.column.totalsRowFunction},set:function(e){this._set(\"totalsRowFunction\",e)}},{key:\"totalsRowResult\",get:function(){return this.column.totalsRowResult},set:function(e){this._set(\"totalsRowResult\",e)}},{key:\"totalsRowFormula\",get:function(){return this.column.totalsRowFormula},set:function(e){this._set(\"totalsRowFormula\",e)}}]),e}(),u=function(){function e(t,r){n(this,e),this.worksheet=t,r&&(this.table=r,this.validate(),this.store())}return i(e,[{key:\"getFormula\",value:function(e){switch(e.totalsRowFunction){case\"none\":return null;case\"average\":return\"SUBTOTAL(101,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"countNums\":return\"SUBTOTAL(102,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"count\":return\"SUBTOTAL(103,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"max\":return\"SUBTOTAL(104,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"min\":return\"SUBTOTAL(105,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"stdDev\":return\"SUBTOTAL(106,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"var\":return\"SUBTOTAL(107,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"sum\":return\"SUBTOTAL(109,\".concat(this.table.name,\"[\").concat(e.name,\"])\");case\"custom\":return e.totalsRowFormula;default:throw new Error(\"Invalid Totals Row Function: \".concat(e.totalsRowFunction))}}},{key:\"validate\",value:function(){var e=this,t=this.table,r=function(e,t,r){void 0===e[t]&&(e[t]=r)};r(t,\"headerRow\",!0),r(t,\"totalsRow\",!1),r(t,\"style\",{}),r(t.style,\"theme\",\"TableStyleMedium2\"),r(t.style,\"showFirstColumn\",!1),r(t.style,\"showLastColumn\",!1),r(t.style,\"showRowStripes\",!1),r(t.style,\"showColumnStripes\",!1);var n=function(e,t){if(!e)throw new Error(t)};n(t.ref,\"Table must have ref\"),n(t.columns,\"Table must have column definitions\"),n(t.rows,\"Table must have row definitions\"),t.tl=a.decodeAddress(t.ref);var o=t.tl,i=o.row,s=o.col;n(i>0,\"Table must be on valid row\"),n(s>0,\"Table must be on valid col\");var u=this.width,c=this.filterHeight,f=this.tableHeight;t.autoFilterRef=a.encode(i,s,i+c-1,s+u-1),t.tableRef=a.encode(i,s,i+f-1,s+u-1),t.columns.forEach((function(t,o){n(t.name,\"Column \".concat(o,\" must have a name\")),0===o?r(t,\"totalsRowLabel\",\"Total\"):(r(t,\"totalsRowFunction\",\"none\"),t.totalsRowFormula=e.getFormula(t))}))}},{key:\"store\",value:function(){var e=this,t=function(e,t){t&&Object.keys(t).forEach((function(r){e[r]=t[r]}))},r=this.worksheet,n=this.table,o=n.tl,i=o.row,a=o.col,s=0;if(n.headerRow){var u=r.getRow(i+s++);n.columns.forEach((function(e,r){var n=e.style,o=e.name,i=u.getCell(a+r);i.value=o,t(i,n)}))}if(n.rows.forEach((function(e){var o=r.getRow(i+s++);e.forEach((function(e,r){var i=o.getCell(a+r);i.value=e,t(i,n.columns[r].style)}))})),n.totalsRow){var c=r.getRow(i+s++);n.columns.forEach((function(r,n){var o=c.getCell(a+n);if(0===n)o.value=r.totalsRowLabel;else{var i=e.getFormula(r);o.value=i?{formula:r.totalsRowFormula,result:r.totalsRowResult}:null}t(o,r.style)}))}}},{key:\"load\",value:function(e){var t=this,r=this.table,n=r.tl,o=n.row,i=n.col,a=0;if(r.headerRow){var s=e.getRow(o+a++);r.columns.forEach((function(e,t){s.getCell(i+t).value=e.name}))}if(r.rows.forEach((function(t){var r=e.getRow(o+a++);t.forEach((function(e,t){r.getCell(i+t).value=e}))})),r.totalsRow){var u=e.getRow(o+a++);r.columns.forEach((function(e,r){var n=u.getCell(i+r);0===r?n.value=e.totalsRowLabel:t.getFormula(e)&&(n.value={formula:e.totalsRowFormula,result:e.totalsRowResult})}))}}},{key:\"cacheState\",value:function(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}},{key:\"commit\",value:function(){if(this._cache){this.validate();var e=a.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(var t=0;t<this._cache.tableHeight;t++)for(var r=this.worksheet.getRow(e.row+t),n=0;n<this._cache.width;n++){r.getCell(e.col+n).value=null}else{for(var o=this.tableHeight;o<this._cache.tableHeight;o++)for(var i=this.worksheet.getRow(e.row+o),s=0;s<this._cache.width;s++){i.getCell(e.col+s).value=null}for(var u=0;u<this.tableHeight;u++)for(var c=this.worksheet.getRow(e.row+u),f=this.width;f<this._cache.width;f++){c.getCell(e.col+f).value=null}}this.store()}}},{key:\"addRow\",value:function(e,t){this.cacheState(),void 0===t?this.table.rows.push(e):this.table.rows.splice(t,0,e)}},{key:\"removeRows\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.rows.splice(e,t)}},{key:\"getColumn\",value:function(e){var t=this.table.columns[e];return new s(this,t,e)}},{key:\"addColumn\",value:function(e,t,r){this.cacheState(),void 0===r?(this.table.columns.push(e),this.table.rows.forEach((function(e,r){e.push(t[r])}))):(this.table.columns.splice(r,0,e),this.table.rows.forEach((function(e,n){e.splice(r,0,t[n])})))}},{key:\"removeColumns\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.columns.splice(e,t),this.table.rows.forEach((function(r){r.splice(e,t)}))}},{key:\"_assign\",value:function(e,t,r){this.cacheState(),e[t]=r}},{key:\"width\",get:function(){return this.table.columns.length}},{key:\"height\",get:function(){return this.table.rows.length}},{key:\"filterHeight\",get:function(){return this.height+(this.table.headerRow?1:0)}},{key:\"tableHeight\",get:function(){return this.filterHeight+(this.table.totalsRow?1:0)}},{key:\"model\",get:function(){return this.table},set:function(e){this.table=e}},{key:\"ref\",get:function(){return this.table.ref},set:function(e){this._assign(this.table,\"ref\",e)}},{key:\"name\",get:function(){return this.table.name},set:function(e){this.table.name=e}},{key:\"displayName\",get:function(){return this.table.displyName||this.table.name}},{key:\"displayNamename\",set:function(e){this.table.displayName=e}},{key:\"headerRow\",get:function(){return this.table.headerRow},set:function(e){this._assign(this.table,\"headerRow\",e)}},{key:\"totalsRow\",get:function(){return this.table.totalsRow},set:function(e){this._assign(this.table,\"totalsRow\",e)}},{key:\"theme\",get:function(){return this.table.style.name},set:function(e){this.table.style.name=e}},{key:\"showFirstColumn\",get:function(){return this.table.style.showFirstColumn},set:function(e){this.table.style.showFirstColumn=e}},{key:\"showLastColumn\",get:function(){return this.table.style.showLastColumn},set:function(e){this.table.style.showLastColumn=e}},{key:\"showRowStripes\",get:function(){return this.table.style.showRowStripes},set:function(e){this.table.style.showRowStripes=e}},{key:\"showColumnStripes\",get:function(){return this.table.style.showColumnStripes},set:function(e){this.table.style.showColumnStripes=e}}]),e}();t.exports=u},{\"./../utils/col-cache\":17}],13:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"./worksheet\"),i=e(\"./defined-names\"),a=e(\"./../xlsx/xlsx\"),s=e(\"./../csv/csv\"),u=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.created=new Date,this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.views=[],this.media=[],this._definedNames=new i}var t,r,u;return t=e,(r=[{key:\"addWorksheet\",value:function(e,t){var r=this.nextId;if(e&&e.length>31&&console.warn(\"Worksheet name \".concat(e,\" exceeds 31 chars. This will be truncated\")),e=(e||\"sheet\".concat(r)).substring(0,31),this._worksheets.find((function(t){return t&&t.name.toLowerCase()===e.toLowerCase()})))throw new Error(\"Worksheet name already exists: \".concat(e));t&&(\"string\"==typeof t?(console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'),t={properties:{tabColor:{argb:t}}}):(t.argb||t.theme||t.indexed)&&(console.trace(\"tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }\"),t={properties:{tabColor:t}}));var n=this._worksheets.reduce((function(e,t){return(t&&t.orderNo)>e?t.orderNo:e}),0),i=Object.assign({},t,{id:r,name:e,orderNo:n+1,workbook:this}),a=new o(i);return this._worksheets[r]=a,a}},{key:\"removeWorksheetEx\",value:function(e){delete this._worksheets[e.id]}},{key:\"removeWorksheet\",value:function(e){var t=this.getWorksheet(e);t&&t.destroy()}},{key:\"getWorksheet\",value:function(e){return void 0===e?this._worksheets.find(Boolean):\"number\"==typeof e?this._worksheets[e]:\"string\"==typeof e?this._worksheets.find((function(t){return t&&t.name===e})):void 0}},{key:\"eachSheet\",value:function(e){this.worksheets.forEach((function(t){e(t,t.id)}))}},{key:\"clearThemes\",value:function(){this._themes=void 0}},{key:\"addImage\",value:function(e){var t=this.media.length;return this.media.push(Object.assign({},e,{type:\"image\"})),t}},{key:\"getImage\",value:function(e){return this.media[e]}},{key:\"xlsx\",get:function(){return this._xlsx||(this._xlsx=new a(this)),this._xlsx}},{key:\"csv\",get:function(){return this._csv||(this._csv=new s(this)),this._csv}},{key:\"nextId\",get:function(){for(var e=1;e<this._worksheets.length;e++)if(!this._worksheets[e])return e;return this._worksheets.length||1}},{key:\"worksheets\",get:function(){return this._worksheets.slice(1).sort((function(e,t){return e.orderNo-t.orderNo})).filter(Boolean)}},{key:\"definedNames\",get:function(){return this._definedNames}},{key:\"model\",get:function(){return{creator:this.creator||\"Unknown\",lastModifiedBy:this.lastModifiedBy||\"Unknown\",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map((function(e){return e.model})),sheets:this.worksheets.map((function(e){return e.model})).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}},set:function(e){var t=this;this.creator=e.creator,this.lastModifiedBy=e.lastModifiedBy,this.lastPrinted=e.lastPrinted,this.created=e.created,this.modified=e.modified,this.company=e.company,this.manager=e.manager,this.title=e.title,this.subject=e.subject,this.keywords=e.keywords,this.category=e.category,this.description=e.description,this.language=e.language,this.revision=e.revision,this.contentStatus=e.contentStatus,this.properties=e.properties,this.calcProperties=e.calcProperties,this._worksheets=[],e.worksheets.forEach((function(r){var n=r.id,i=r.name,a=r.state,s=e.sheets&&e.sheets.findIndex((function(e){return e.id===n}));(t._worksheets[n]=new o({id:n,name:i,orderNo:s,state:a,workbook:t})).model=r})),this._definedNames.model=e.definedNames,this.views=e.views,this._themes=e.themes,this.media=e.media||[]}}])&&n(t.prototype,r),u&&n(t,u),e}();t.exports=u},{\"./../csv/csv\":1,\"./../xlsx/xlsx\":139,\"./defined-names\":6,\"./worksheet\":14}],14:[function(e,t,r){function n(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===r&&e.constructor&&(r=e.constructor.name);if(\"Map\"===r||\"Set\"===r)return Array.from(r);if(\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var a=e(\"../utils/under-dash\"),s=e(\"../utils/col-cache\"),u=e(\"./range\"),c=e(\"./row\"),f=e(\"./column\"),l=e(\"./enums\"),h=e(\"./image\"),d=e(\"./table\"),p=e(\"./data-validations\"),y=e(\"../utils/encryptor\"),m=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),t=t||{},this.id=t.id,this.orderNo=t.orderNo,this.name=t.name||\"Sheet\".concat(this.id),this.state=t.state||\"visible\",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this._workbook=t.workbook,this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},t.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:\"portrait\",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!(!t.pageSetup||!t.pageSetup.fitToWidth&&!t.pageSetup.fitToHeight||t.pageSetup.scale),pageOrder:\"downThenOver\",blackAndWhite:!1,draft:!1,cellComments:\"None\",errors:\"displayed\",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},t.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},t.headerFooter),this.dataValidations=new p,this.views=t.views||[],this.autoFilter=t.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}var t,r,o;return t=e,(r=[{key:\"destroy\",value:function(){this._workbook.removeWorksheetEx(this)}},{key:\"getColumnKey\",value:function(e){return this._keys[e]}},{key:\"setColumnKey\",value:function(e,t){this._keys[e]=t}},{key:\"deleteColumnKey\",value:function(e){delete this._keys[e]}},{key:\"eachColumnKey\",value:function(e){a.each(this._keys,e)}},{key:\"getColumn\",value:function(e){if(\"string\"==typeof e){var t=this._keys[e];if(t)return t;e=s.l2n(e)}if(this._columns||(this._columns=[]),e>this._columns.length)for(var r=this._columns.length+1;r<=e;)this._columns.push(new f(this,r++));return this._columns[e-1]}},{key:\"spliceColumns\",value:function(e,t){for(var r=this,n=this._rows,o=n.length,i=arguments.length,a=new Array(i>2?i-2:0),s=2;s<i;s++)a[s-2]=arguments[s];if(a.length>0)for(var u=function(n){var o=[e,t];a.forEach((function(e){o.push(e[n]||null)}));var i=r.getRow(n+1);i.splice.apply(i,o)},c=0;c<o;c++)u(c);else this._rows.forEach((function(r){r&&r.splice(e,t)}));var f=a.length-t,l=e+t,h=this._columns.length;if(f<0)for(var d=e+a.length;d<=h;d++)this.getColumn(d).defn=this.getColumn(d-f).defn;else if(f>0)for(var p=h;p>=l;p--)this.getColumn(p+f).defn=this.getColumn(p).defn;for(var y=e;y<e+a.length;y++)this.getColumn(y).defn=null;this.workbook.definedNames.spliceColumns(this.name,e,t,a.length)}},{key:\"_commitRow\",value:function(){}},{key:\"findRow\",value:function(e){return this._rows[e-1]}},{key:\"getRow\",value:function(e){var t=this._rows[e-1];return t||(t=this._rows[e-1]=new c(this,e)),t}},{key:\"addRow\",value:function(e){var t=this.getRow(this._nextRow);return t.values=e,t}},{key:\"addRows\",value:function(e){var t=this;e.forEach((function(e){t.addRow(e)}))}},{key:\"duplicateRow\",value:function(e,t){var r=this,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this._rows[e-1],a=new Array(t).fill(i.values);this.spliceRows.apply(this,[e+1,o?0:t].concat(n(a)));for(var s=function(t){var n=r._rows[e+t];n.style=i.style,n.height=i.height,i.eachCell({includeEmpty:!0},(function(e,t){n.getCell(t).style=e.style}))},u=0;u<t;u++)s(u)}},{key:\"spliceRows\",value:function(e,t){for(var r=this,n=e+t,o=arguments.length,i=new Array(o>2?o-2:0),a=2;a<o;a++)i[a-2]=arguments[a];var s,u,c=i.length-t,f=this._rows.length;if(c<0)for(s=n;s<=f;s++)(u=this._rows[s-1])?function(){var e=r.getRow(s+c);e.values=u.values,e.style=u.style,e.height=u.height,u.eachCell({includeEmpty:!0},(function(t,r){e.getCell(r).style=t.style})),r._rows[s-1]=void 0}():this._rows[s+c-1]=void 0;else if(c>0)for(s=f;s>=n;s--)(u=this._rows[s-1])?function(){var e=r.getRow(s+c);e.values=u.values,e.style=u.style,e.height=u.height,u.eachCell({includeEmpty:!0},(function(t,r){e.getCell(r).style=t.style}))}():this._rows[s+c-1]=void 0;for(s=0;s<i.length;s++){var l=this.getRow(e+s);l.style={},l.values=i[s]}this.workbook.definedNames.spliceRows(this.name,e,t,i.length)}},{key:\"eachRow\",value:function(e,t){if(t||(t=e,e=void 0),e&&e.includeEmpty)for(var r=this._rows.length,n=1;n<=r;n++)t(this.getRow(n),n);else this._rows.forEach((function(e){e&&e.hasValues&&t(e,e.number)}))}},{key:\"getSheetValues\",value:function(){var e=[];return this._rows.forEach((function(t){t&&(e[t.number]=t.values)})),e}},{key:\"findCell\",value:function(e,t){var r=s.getAddress(e,t),n=this._rows[r.row-1];return n?n.findCell(r.col):void 0}},{key:\"getCell\",value:function(e,t){var r=s.getAddress(e,t);return this.getRow(r.row).getCellEx(r)}},{key:\"mergeCells\",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=new u(t);this._mergeCellsInternal(n)}},{key:\"mergeCellsWithoutStyle\",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=new u(t);this._mergeCellsInternal(n,!0)}},{key:\"_mergeCellsInternal\",value:function(e,t){a.each(this._merges,(function(t){if(t.intersects(e))throw new Error(\"Cannot merge already merged cells\")}));for(var r=this.getCell(e.top,e.left),n=e.top;n<=e.bottom;n++)for(var o=e.left;o<=e.right;o++)(n>e.top||o>e.left)&&this.getCell(n,o).merge(r,t);this._merges[r.address]=e}},{key:\"_unMergeMaster\",value:function(e){var t=this._merges[e.address];if(t){for(var r=t.top;r<=t.bottom;r++)for(var n=t.left;n<=t.right;n++)this.getCell(r,n).unmerge();delete this._merges[e.address]}}},{key:\"unMergeCells\",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];for(var n=new u(t),o=n.top;o<=n.bottom;o++)for(var i=n.left;i<=n.right;i++){var a=this.findCell(o,i);a&&(a.type===l.ValueType.Merge?this._unMergeMaster(a.master):this._merges[a.address]&&this._unMergeMaster(a))}}},{key:\"fillFormula\",value:function(e,t,r){var n,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"shared\",i=s.decode(e),a=i.top,u=i.left,c=i.bottom,f=i.right,l=f-u+1,h=s.encodeAddress(a,u),d=\"shared\"===o;n=\"function\"==typeof r?r:Array.isArray(r)?Array.isArray(r[0])?function(e,t){return r[e-a][t-u]}:function(e,t){return r[(e-a)*l+(t-u)]}:function(){};for(var p=!0,y=a;y<=c;y++)for(var m=u;m<=f;m++)p?(this.getCell(y,m).value={shareType:o,formula:t,ref:e,result:n(y,m)},p=!1):this.getCell(y,m).value=d?{sharedFormula:h,result:n(y,m)}:n(y,m)}},{key:\"addImage\",value:function(e,t){var r={type:\"image\",imageId:e,range:t};this._media.push(new h(this,r))}},{key:\"getImages\",value:function(){return this._media.filter((function(e){return\"image\"===e.type}))}},{key:\"addBackgroundImage\",value:function(e){var t={type:\"background\",imageId:e};this._media.push(new h(this,t))}},{key:\"getBackgroundImageId\",value:function(){var e=this._media.find((function(e){return\"background\"===e.type}));return e&&e.imageId}},{key:\"protect\",value:function(e,t){var r=this;return new Promise((function(n){r.sheetProtection={sheet:!0},t&&\"spinCount\"in t&&(t.spinCount=Number.isFinite(t.spinCount)?Math.round(Math.max(0,t.spinCount)):1e5),e&&(r.sheetProtection.algorithmName=\"SHA-512\",r.sheetProtection.saltValue=y.randomBytes(16).toString(\"base64\"),r.sheetProtection.spinCount=t&&\"spinCount\"in t?t.spinCount:1e5,r.sheetProtection.hashValue=y.convertPasswordToHash(e,\"SHA512\",r.sheetProtection.saltValue,r.sheetProtection.spinCount)),t&&(r.sheetProtection=Object.assign(r.sheetProtection,t),!e&&\"spinCount\"in t&&delete r.sheetProtection.spinCount),n()}))}},{key:\"unprotect\",value:function(){this.sheetProtection=null}},{key:\"addTable\",value:function(e){var t=new d(this,e);return this.tables[e.name]=t,t}},{key:\"getTable\",value:function(e){return this.tables[e]}},{key:\"removeTable\",value:function(e){delete this.tables[e]}},{key:\"getTables\",value:function(){return Object.values(this.tables)}},{key:\"addConditionalFormatting\",value:function(e){this.conditionalFormattings.push(e)}},{key:\"removeConditionalFormatting\",value:function(e){\"number\"==typeof e?this.conditionalFormattings.splice(e,1):this.conditionalFormattings=e instanceof Function?this.conditionalFormattings.filter(e):[]}},{key:\"_parseRows\",value:function(e){var t=this;this._rows=[],e.rows.forEach((function(e){var r=new c(t,e.number);t._rows[r.number-1]=r,r.model=e}))}},{key:\"_parseMergeCells\",value:function(e){var t=this;a.each(e.mergeCells,(function(e){t.mergeCellsWithoutStyle(e)}))}},{key:\"workbook\",get:function(){return this._workbook}},{key:\"dimensions\",get:function(){var e=new u;return this._rows.forEach((function(t){if(t){var r=t.dimensions;r&&e.expand(t.number,r.min,t.number,r.max)}})),e}},{key:\"columns\",get:function(){return this._columns},set:function(e){var t=this;this._headerRowCount=e.reduce((function(e,t){var r=(t.header?1:t.headers&&t.headers.length)||0;return Math.max(e,r)}),0);var r=1,n=this._columns=[];e.forEach((function(e){var o=new f(t,r++,!1);n.push(o),o.defn=e}))}},{key:\"columnCount\",get:function(){var e=0;return this.eachRow((function(t){e=Math.max(e,t.cellCount)})),e}},{key:\"actualColumnCount\",get:function(){var e=[],t=0;return this.eachRow((function(r){r.eachCell((function(r){var n=r.col;e[n]||(e[n]=!0,t++)}))})),t}},{key:\"_lastRowNumber\",get:function(){for(var e=this._rows,t=e.length;t>0&&void 0===e[t-1];)t--;return t}},{key:\"_nextRow\",get:function(){return this._lastRowNumber+1}},{key:\"lastRow\",get:function(){if(this._rows.length)return this._rows[this._rows.length-1]}},{key:\"rowCount\",get:function(){return this._lastRowNumber}},{key:\"actualRowCount\",get:function(){var e=0;return this.eachRow((function(){e++})),e}},{key:\"hasMerges\",get:function(){return a.some(this._merges,Boolean)}},{key:\"tabColor\",get:function(){return console.trace(\"worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor\"),this.properties.tabColor},set:function(e){console.trace(\"worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor\"),this.properties.tabColor=e}},{key:\"model\",get:function(){var e={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map((function(e){return e.model})),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map((function(e){return e.model})),conditionalFormattings:this.conditionalFormattings};e.cols=f.toModel(this.columns);var t=e.rows=[],r=e.dimensions=new u;return this._rows.forEach((function(e){var n=e&&e.model;n&&(r.expand(n.number,n.min,n.number,n.max),t.push(n))})),e.merges=[],a.each(this._merges,(function(t){e.merges.push(t.range)})),e},set:function(e){var t=this;this.name=e.name,this._columns=f.fromModel(this,e.cols),this._parseRows(e),this._parseMergeCells(e),this.dataValidations=new p(e.dataValidations),this.properties=e.properties,this.pageSetup=e.pageSetup,this.headerFooter=e.headerFooter,this.views=e.views,this.autoFilter=e.autoFilter,this._media=e.media.map((function(e){return new h(t,e)})),this.sheetProtection=e.sheetProtection,this.tables=e.tables.reduce((function(e,t){var r=new d;return r.model=t,e[t.name]=r,e}),{}),this.conditionalFormattings=e.conditionalFormattings}}])&&i(t.prototype,r),o&&i(t,o),e}();t.exports=m},{\"../utils/col-cache\":17,\"../utils/encryptor\":18,\"../utils/under-dash\":23,\"./column\":4,\"./data-validations\":5,\"./enums\":7,\"./image\":8,\"./range\":10,\"./row\":11,\"./table\":12}],15:[function(e,t,r){e(\"core-js/modules/es.promise\"),e(\"core-js/modules/es.object.assign\"),e(\"core-js/modules/es.object.keys\"),e(\"regenerator-runtime/runtime\");var n={Workbook:e(\"./doc/workbook\")},o=e(\"./doc/enums\");Object.keys(o).forEach((function(e){n[e]=o[e]})),t.exports=n},{\"./doc/enums\":7,\"./doc/workbook\":13,\"core-js/modules/es.object.assign\":260,\"core-js/modules/es.object.keys\":261,\"core-js/modules/es.promise\":262,\"regenerator-runtime/runtime\":443}],16:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"./under-dash\"),i=e(\"./col-cache\"),a=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.template=t,this.sheets={}}var t,r,a;return t=e,(r=[{key:\"addCell\",value:function(e){this.addCellEx(i.decodeEx(e))}},{key:\"getCell\",value:function(e){return this.findCellEx(i.decodeEx(e),!0)}},{key:\"findCell\",value:function(e){return this.findCellEx(i.decodeEx(e),!1)}},{key:\"findCellAt\",value:function(e,t,r){var n=this.sheets[e],o=n&&n[t];return o&&o[r]}},{key:\"addCellEx\",value:function(e){if(e.top)for(var t=e.top;t<=e.bottom;t++)for(var r=e.left;r<=e.right;r++)this.getCellAt(e.sheetName,t,r);else this.findCellEx(e,!0)}},{key:\"getCellEx\",value:function(e){return this.findCellEx(e,!0)}},{key:\"findCellEx\",value:function(e,t){var r=this.findSheet(e,t),n=this.findSheetRow(r,e,t);return this.findRowCell(n,e,t)}},{key:\"getCellAt\",value:function(e,t,r){var n=this.sheets[e]||(this.sheets[e]=[]),o=n[t]||(n[t]=[]);return o[r]||(o[r]={sheetName:e,address:i.n2l(r)+t,row:t,col:r})}},{key:\"removeCellEx\",value:function(e){var t=this.findSheet(e);if(t){var r=this.findSheetRow(t,e);r&&delete r[e.col]}}},{key:\"forEachInSheet\",value:function(e,t){var r=this.sheets[e];r&&r.forEach((function(e,r){e&&e.forEach((function(e,n){e&&t(e,r,n)}))}))}},{key:\"forEach\",value:function(e){var t=this;o.each(this.sheets,(function(r,n){t.forEachInSheet(n,e)}))}},{key:\"map\",value:function(e){var t=[];return this.forEach((function(r){t.push(e(r))})),t}},{key:\"findSheet\",value:function(e,t){var r=e.sheetName;return this.sheets[r]?this.sheets[r]:t?this.sheets[r]=[]:void 0}},{key:\"findSheetRow\",value:function(e,t,r){var n=t.row;return e&&e[n]?e[n]:r?e[n]=[]:void 0}},{key:\"findRowCell\",value:function(e,t,r){var n=t.col;return e&&e[n]?e[n]:r?e[n]=this.template?Object.assign(t,JSON.parse(JSON.stringify(this.template))):t:void 0}},{key:\"spliceRows\",value:function(e,t,r,n){var o=this.sheets[e];if(o){for(var i=[],a=0;a<n;a++)i.push([]);o.splice.apply(o,[t,r].concat(i))}}},{key:\"spliceColumns\",value:function(e,t,r,n){var i=this.sheets[e];if(i){for(var a=[],s=0;s<n;s++)a.push(null);o.each(i,(function(e){e.splice.apply(e,[t,r].concat(a))}))}}}])&&n(t.prototype,r),a&&n(t,a),e}();t.exports=a},{\"./col-cache\":17,\"./under-dash\":23}],17:[function(e,t,r){function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(\"undefined\"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var r=[],n=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,t)||function(e,t){if(!e)return;if(\"string\"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===r&&e.constructor&&(r=e.constructor.name);if(\"Map\"===r||\"Set\"===r)return Array.from(r);if(\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var s={_dictionary:[\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\"],_l2n:{},_n2l:[],_level:function(e){return e<=26?1:e<=676?2:3},_fill:function(e){var t,r,n,o,i,a=1;if(e>=1)for(;a<=26;)t=this._dictionary[a-1],this._n2l[a]=t,this._l2n[t]=a,a++;if(e>=2)for(;a<=702;)n=(r=a-27)%26,o=Math.floor(r/26),t=this._dictionary[o]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++;if(e>=3)for(;a<=16384;)n=(r=a-703)%26,o=Math.floor(r/26)%26,i=Math.floor(r/676),t=this._dictionary[i]+this._dictionary[o]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++},l2n:function(e){if(this._l2n[e]||this._fill(e.length),!this._l2n[e])throw new Error(\"Out of bounds. Invalid column letter: \".concat(e));return this._l2n[e]},n2l:function(e){if(e<1||e>16384)throw new Error(\"\".concat(e,\" is out of bounds. Excel supports columns from 1 to 16384\"));return this._n2l[e]||this._fill(this._level(e)),this._n2l[e]},_hash:{},validateAddress:function(e){if(!e.match(/^[A-Z]+\\d+$/))throw new Error(\"Invalid Address: \".concat(e));return!0},decodeAddress:function(e){var t=this._hash[e];if(t)return t;var r,n,o=e.match(/[A-Z]+/);o&&(r=o[0],n=this.l2n(r));var i,a,s=e.match(/\\d+/);s&&(i=s[0],a=parseInt(i,10));var u={address:e=(r||\"\")+(i||\"\"),col:n,row:a,$col$row:\"$\".concat(r||\"\",\"$\").concat(i||\"\")};return n<=100&&a<=100&&(this._hash[e]=u,this._hash[u.$col$row]=u),u},getAddress:function(e,t){if(t){var r=this.n2l(t)+e;return this.decodeAddress(r)}return this.decodeAddress(e)},decode:function(e){var t=e.split(\":\");if(2===t.length){var r=this.decodeAddress(t[0]),n=this.decodeAddress(t[1]),o={top:Math.min(r.row,n.row),left:Math.min(r.col,n.col),bottom:Math.max(r.row,n.row),right:Math.max(r.col,n.col)};return o.tl=this.n2l(o.left)+o.top,o.br=this.n2l(o.right)+o.bottom,o.dimensions=\"\".concat(o.tl,\":\").concat(o.br),o}return this.decodeAddress(e)},decodeEx:function(e){var t=e.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),r=t[1]||t[2],n=t[3],o=n.split(\":\");if(o.length>1){var s=this.decodeAddress(o[0]),u=this.decodeAddress(o[1]),c=Math.min(s.row,u.row),f=Math.min(s.col,u.col),l=Math.max(s.row,u.row),h=Math.max(s.col,u.col);return s=this.n2l(f)+c,u=this.n2l(h)+l,{top:c,left:f,bottom:l,right:h,sheetName:r,tl:{address:s,col:f,row:c,$col$row:\"$\".concat(this.n2l(f),\"$\").concat(c),sheetName:r},br:{address:u,col:h,row:l,$col$row:\"$\".concat(this.n2l(h),\"$\").concat(l),sheetName:r},dimensions:\"\".concat(s,\":\").concat(u)}}if(n.startsWith(\"#\"))return r?{sheetName:r,error:n}:{error:n};var d=this.decodeAddress(n);return r?function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({sheetName:r},d):d},encodeAddress:function(e,t){return s.n2l(t)+e},encode:function(){switch(arguments.length){case 2:return s.encodeAddress(arguments[0],arguments[1]);case 4:return\"\".concat(s.encodeAddress(arguments[0],arguments[1]),\":\").concat(s.encodeAddress(arguments[2],arguments[3]));default:throw new Error(\"Can only encode with 2 or 4 arguments\")}},inRange:function(e,t){var r=n(e,5),o=r[0],i=r[1],a=r[3],s=r[4],u=n(t,2),c=u[0],f=u[1];return c>=o&&c<=a&&f>=i&&f<=s}};t.exports=s},{}],18:[function(e,t,r){(function(r){var n=e(\"crypto\"),o={hash:function(e){for(var t=n.createHash(e),o=arguments.length,i=new Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];return t.update(r.concat(i)),t.digest()},convertPasswordToHash:function(e,t,o,i){if(t=t.toLowerCase(),n.getHashes().indexOf(t)<0)throw new Error(\"Hash algorithm '\".concat(t,\"' not supported!\"));for(var a=r.from(e,\"utf16le\"),s=this.hash(t,r.from(o,\"base64\"),a),u=0;u<i;u++){var c=r.alloc(4);c.writeUInt32LE(u,0),s=this.hash(t,s,c)}return s.toString(\"base64\")},randomBytes:function(e){return n.randomBytes(e)}};t.exports=o}).call(this,e(\"buffer\").Buffer)},{buffer:188,crypto:269}],19:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e){if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=function(e,t){if(!e)return;if(\"string\"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===r&&e.constructor&&(r=e.constructor.name);if(\"Map\"===r||\"Set\"===r)return Array.from(r);if(\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e))){var t=0,r=function(){};return{s:r,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var n,o,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function u(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var l=e(\"readable-stream\"),h=e(\"saxes\").SaxesParser;t.exports=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(d,e);var t,r,n,i,l=(t=d,function(){var e,r=c(t);if(u()){var n=c(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return s(this,e)});function d(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(t=l.call(this,{readableObjectMode:!0})).events=[],t.saxesParser=new h,t.saxesParser.on(\"error\",(function(e){t.destroy(e)}));var r,n=o(e);try{var i=function(){var e=r.value;\"ready\"!==e&&\"error\"!==e&&\"end\"!==e&&t.saxesParser.on(e,(function(r){t.events.push({eventType:e,value:r})}))};for(n.s();!(r=n.n()).done;)i()}catch(e){n.e(e)}finally{n.f()}return t}return r=d,(n=[{key:\"_transform\",value:function(e,t,r){this.saxesParser.write(e.toString());var n=this.events;this.events=[],r(null,n)}},{key:\"_final\",value:function(e){this.saxesParser.close(),e()}}])&&a(r.prototype,n),i&&a(r,i),d}(l.Transform)},{\"readable-stream\":442,saxes:446}],20:[function(e,t,r){var n=e(\"./col-cache\"),o=/(([a-z_\\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,i=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;t.exports={slideFormula:function(e,t,r){var a=n.decode(t),s=n.decode(r);return e.replace(o,(function(e,t,r,o,u){if(u)return e;var c=i.exec(o);if(c){var f=c[1],l=c[2].toUpperCase(),h=c[3],d=c[4];if(l.length>3||3===l.length&&l>\"XFD\")return e;var p=n.l2n(l),y=parseInt(d,10);return f||(p+=s.col-a.col),h||(y+=s.row-a.row),(t||\"\")+(f||\"\")+n.n2l(p)+(h||\"\")+y}return e}))}}},{\"./col-cache\":17}],21:[function(e,t,r){(function(r,n){function o(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function i(e){return function(){var t=this,r=arguments;return new Promise((function(n,i){var a=e.apply(t,r);function s(e){o(a,n,i,s,u,\"next\",e)}function u(e){o(a,n,i,s,u,\"throw\",e)}s(void 0)}))}}function a(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function u(e,t,r){return t&&s(e.prototype,t),r&&s(e,r),e}var c=e(\"readable-stream\"),f=e(\"./utils\"),l=e(\"./string-buf\"),h=function(){function e(t,r){a(this,e),this._data=t,this._encoding=r}return u(e,[{key:\"copy\",value:function(e,t,r,n){return this.toBuffer().copy(e,t,r,n)}},{key:\"toBuffer\",value:function(){return this._buffer||(this._buffer=n.from(this._data,this._encoding)),this._buffer}},{key:\"length\",get:function(){return this.toBuffer().length}}]),e}(),d=function(){function e(t){a(this,e),this._data=t}return u(e,[{key:\"copy\",value:function(e,t,r,n){return this._data._buf.copy(e,t,r,n)}},{key:\"toBuffer\",value:function(){return this._data.toBuffer()}},{key:\"length\",get:function(){return this._data.length}}]),e}(),p=function(){function e(t){a(this,e),this._data=t}return u(e,[{key:\"copy\",value:function(e,t,r,n){this._data.copy(e,t,r,n)}},{key:\"toBuffer\",value:function(){return this._data}},{key:\"length\",get:function(){return this._data.length}}]),e}(),y=function(){function e(t){a(this,e),this.size=t,this.buffer=n.alloc(t),this.iRead=0,this.iWrite=0}return u(e,[{key:\"toBuffer\",value:function(){if(0===this.iRead&&this.iWrite===this.size)return this.buffer;var e=n.alloc(this.iWrite-this.iRead);return this.buffer.copy(e,0,this.iRead,this.iWrite),e}},{key:\"read\",value:function(e){var t;return 0===e?null:void 0===e||e>=this.length?(t=this.toBuffer(),this.iRead=this.iWrite,t):(t=n.alloc(e),this.buffer.copy(t,0,this.iRead,e),this.iRead+=e,t)}},{key:\"write\",value:function(e,t,r){var n=Math.min(r,this.size-this.iWrite);return e.copy(this.buffer,this.iWrite,t,t+n),this.iWrite+=n,n}},{key:\"length\",get:function(){return this.iWrite-this.iRead}},{key:\"eod\",get:function(){return this.iRead===this.iWrite}},{key:\"full\",get:function(){return this.iWrite===this.size}}]),e}(),m=function(e){e=e||{},this.bufSize=e.bufSize||1048576,this.buffers=[],this.batch=e.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};f.inherits(m,c.Duplex,{toBuffer:function(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return n.concat(this.buffers.map((function(e){return e.toBuffer()})))}},_getWritableBuffer:function(){if(this.buffers.length){var e=this.buffers[this.buffers.length-1];if(!e.full)return e}var t=new y(this.bufSize);return this.buffers.push(t),t},_pipe:function(e){var t=this;return i(regeneratorRuntime.mark((function r(){var n;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return n=function(t){return new Promise((function(r){t.write(e.toBuffer(),(function(){r()}))}))},r.next=3,Promise.all(t.pipes.map(n));case 3:case\"end\":return r.stop()}}),r)})))()},_writeToBuffers:function(e){for(var t=0,r=e.length;t<r;){t+=this._getWritableBuffer().write(e,t,r-t)}},write:function(e,t,o){var a=this;return i(regeneratorRuntime.mark((function i(){var s;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(t instanceof Function&&(o=t,t=\"utf8\"),o=o||f.nop,!(e instanceof l)){i.next=6;break}s=new d(e),i.next=15;break;case 6:if(!(e instanceof n)){i.next=10;break}s=new p(e),i.next=15;break;case 10:if(!(\"string\"==typeof e||e instanceof String||e instanceof ArrayBuffer)){i.next=14;break}s=new h(e,t),i.next=15;break;case 14:throw new Error(\"Chunk must be one of type String, Buffer or StringBuf.\");case 15:if(!a.pipes.length){i.next=31;break}if(!a.batch){i.next=21;break}for(a._writeToBuffers(s);!a.corked&&a.buffers.length>1;)a._pipe(a.buffers.shift());i.next=29;break;case 21:if(a.corked){i.next=27;break}return i.next=24,a._pipe(s);case 24:o(),i.next=29;break;case 27:a._writeToBuffers(s),r.nextTick(o);case 29:i.next=34;break;case 31:a.paused||a.emit(\"data\",s.toBuffer()),a._writeToBuffers(s),a.emit(\"readable\");case 34:return i.abrupt(\"return\",!0);case 35:case\"end\":return i.stop()}}),i)})))()},cork:function(){this.corked=!0},_flush:function(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork:function(){this.corked=!1,this._flush()},end:function(e,t,r){var n=this,o=function(e){e?r(e):(n._flush(),n.pipes.forEach((function(e){e.end()})),n.emit(\"finish\"))};e?this.write(e,t,o):o()},read:function(e){var t;if(e){for(t=[];e&&this.buffers.length&&!this.buffers[0].eod;){var r=this.buffers[0],o=r.read(e);e-=o.length,t.push(o),r.eod&&r.full&&this.buffers.shift()}return n.concat(t)}return t=this.buffers.map((function(e){return e.toBuffer()})).filter(Boolean),this.buffers=[],n.concat(t)},setEncoding:function(e){this.encoding=e},pause:function(){this.paused=!0},resume:function(){this.paused=!1},isPaused:function(){return!!this.paused},pipe:function(e){this.pipes.push(e),!this.paused&&this.buffers.length&&this.end()},unpipe:function(e){this.pipes=this.pipes.filter((function(t){return t!==e}))},unshift:function(){throw new Error(\"Not Implemented\")},wrap:function(){throw new Error(\"Not Implemented\")}}),t.exports=m}).call(this,e(\"_process\"),e(\"buffer\").Buffer)},{\"./string-buf\":22,\"./utils\":24,_process:419,buffer:188,\"readable-stream\":442}],22:[function(e,t,r){(function(e){function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var n=function(){function t(r){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this._buf=e.alloc(r&&r.size||16384),this._encoding=r&&r.encoding||\"utf8\",this._inPos=0,this._buffer=void 0}var n,o,i;return n=t,(o=[{key:\"toBuffer\",value:function(){return this._buffer||(this._buffer=e.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}},{key:\"reset\",value:function(e){e=e||0,this._buffer=void 0,this._inPos=e}},{key:\"_grow\",value:function(t){for(var r=2*this._buf.length;r<t;)r*=2;var n=e.alloc(r);this._buf.copy(n,0),this._buf=n}},{key:\"addText\",value:function(e){this._buffer=void 0;for(var t=this._inPos+this._buf.write(e,this._inPos,this._encoding);t>=this._buf.length-4;)this._grow(this._inPos+e.length),t=this._inPos+this._buf.write(e,this._inPos,this._encoding);this._inPos=t}},{key:\"addStringBuf\",value:function(e){e.length&&(this._buffer=void 0,this.length+e.length>this.capacity&&this._grow(this.length+e.length),e._buf.copy(this._buf,this._inPos,0,e.length),this._inPos+=e.length)}},{key:\"length\",get:function(){return this._inPos}},{key:\"capacity\",get:function(){return this._buf.length}},{key:\"buffer\",get:function(){return this._buf}}])&&r(n.prototype,o),i&&r(n,i),t}();t.exports=n}).call(this,e(\"buffer\").Buffer)},{buffer:188}],23:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var o=Object.prototype.toString,i={each:function(e,t){e&&(Array.isArray(e)?e.forEach(t):Object.keys(e).forEach((function(r){t(e[r],r)})))},some:function(e,t){return!!e&&(Array.isArray(e)?e.some(t):Object.keys(e).some((function(r){return t(e[r],r)})))},every:function(e,t){return!e||(Array.isArray(e)?e.every(t):Object.keys(e).every((function(r){return t(e[r],r)})))},map:function(e,t){return e?Array.isArray(e)?e.map(t):Object.keys(e).map((function(r){return t(e[r],r)})):[]},keyBy:function(e,t){return e.reduce((function(e,r){return e[r[t]]=r,e}),{})},isEqual:function(e,t){var r=n(e),o=n(t),a=Array.isArray(e),s=Array.isArray(t);if(r!==o)return!1;switch(n(e)){case\"object\":return a||s?!(!a||!s)&&(e.length===t.length&&e.every((function(e,r){var n=t[r];return i.isEqual(e,n)}))):i.every(e,(function(e,r){var n=t[r];return i.isEqual(e,n)}));default:return e===t}},escapeHtml:function(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#039;\")},strcmp:function(e,t){return e<t?-1:e>t?1:0},isUndefined:function(e){return\"[object Undefined]\"===o.call(e)},isObject:function(e){return\"[object Object]\"===o.call(e)},deepMerge:function(){var e,t,r,n=arguments[0]||{},o=arguments.length;function a(o,a){e=n[a],r=Array.isArray(o),i.isObject(o)||r?(r?(r=!1,t=e&&Array.isArray(e)?e:[]):t=e&&i.isObject(e)?e:{},n[a]=i.deepMerge(t,o)):i.isUndefined(o)||(n[a]=o)}for(var s=0;s<o;s++)i.each(arguments[s],a);return n}};t.exports=i},{}],24:[function(e,t,r){(function(r,n){var o=e(\"fs\"),i={nop:function(){},promiseImmediate:function(e){return new Promise((function(t){r.setImmediate?n((function(){t(e)})):setTimeout((function(){t(e)}),1)}))},inherits:function(e,t,r,n){e.super_=t,n||(n=r,r=null),r&&Object.keys(r).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}));var o={constructor:{value:e,enumerable:!1,writable:!1,configurable:!0}};n&&Object.keys(n).forEach((function(e){o[e]=Object.getOwnPropertyDescriptor(n,e)})),e.prototype=Object.create(t.prototype,o)},dateToExcel:function(e,t){return 25569+e.getTime()/864e5-(t?1462:0)},excelToDate:function(e,t){var r=Math.round(24*(e-25569+(t?1462:0))*3600*1e3);return new Date(r)},parsePath:function(e){var t=e.lastIndexOf(\"/\");return{path:e.substring(0,t),name:e.substring(t+1)}},getRelsPath:function(e){var t=i.parsePath(e);return\"\".concat(t.path,\"/_rels/\").concat(t.name,\".rels\")},xmlEncode:function(e){return e.replace(/[<>&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/g,(function(e){switch(e){case\"<\":return\"&lt;\";case\">\":return\"&gt;\";case\"&\":return\"&amp;\";case\"'\":return\"&apos;\";case'\"':return\"&quot;\";default:return\"\"}}))},xmlDecode:function(e){return e.replace(/&([a-z]*);/,(function(e){switch(e){case\"&lt;\":return\"<\";case\"&gt;\":return\">\";case\"&amp;\":return\"&\";case\"&apos;\":return\"'\";case\"&quot;\":return'\"';default:return e}}))},validInt:function(e){var t=parseInt(e,10);return Number.isNaN(t)?0:t},isDateFmt:function(e){return!!e&&null!==(e=(e=e.replace(/\\[[^\\]]*]/g,\"\")).replace(/\"[^\"]*\"/g,\"\")).match(/[ymdhMsb]+/)},fs:{exists:function(e){return new Promise((function(t){o.access(e,o.constants.F_OK,(function(e){t(!e)}))}))}},toIsoDateString:function(e){return e.toIsoString().subsstr(0,10)}};t.exports=i}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"timers\").setImmediate)},{fs:186,timers:471}],25:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"./under-dash\"),i=e(\"./utils\");function a(e,t,r){e.push(\" \"),e.push(t),e.push('=\"'),e.push(i.xmlEncode(r.toString())),e.push('\"')}function s(e,t){t&&o.each(t,(function(t,r){void 0!==t&&a(e,r,t)}))}var u=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._xml=[],this._stack=[],this._rollbacks=[]}var t,r,o;return t=e,(r=[{key:\"openXml\",value:function(e){var t=this._xml;t.push(\"<?xml\"),s(t,e),t.push(\"?>\\n\")}},{key:\"openNode\",value:function(e,t){var r=this.tos,n=this._xml;r&&this.open&&n.push(\">\"),this._stack.push(e),n.push(\"<\"),n.push(e),s(n,t),this.leaf=!0,this.open=!0}},{key:\"addAttribute\",value:function(e,t){if(!this.open)throw new Error(\"Cannot write attributes to node if it is not open\");void 0!==t&&a(this._xml,e,t)}},{key:\"addAttributes\",value:function(e){if(!this.open)throw new Error(\"Cannot write attributes to node if it is not open\");s(this._xml,e)}},{key:\"writeText\",value:function(e){var t=this._xml;this.open&&(t.push(\">\"),this.open=!1),this.leaf=!1,t.push(i.xmlEncode(e.toString()))}},{key:\"writeXml\",value:function(e){this.open&&(this._xml.push(\">\"),this.open=!1),this.leaf=!1,this._xml.push(e)}},{key:\"closeNode\",value:function(){var e=this._stack.pop(),t=this._xml;this.leaf?t.push(\"/>\"):(t.push(\"</\"),t.push(e),t.push(\">\")),this.open=!1,this.leaf=!1}},{key:\"leafNode\",value:function(e,t,r){this.openNode(e,t),void 0!==r&&this.writeText(r),this.closeNode()}},{key:\"closeAll\",value:function(){for(;this._stack.length;)this.closeNode()}},{key:\"addRollback\",value:function(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}},{key:\"commit\",value:function(){this._rollbacks.pop()}},{key:\"rollback\",value:function(){var e=this._rollbacks.pop();this._xml.length>e.xml&&this._xml.splice(e.xml,this._xml.length-e.xml),this._stack.length>e.stack&&this._stack.splice(e.stack,this._stack.length-e.stack),this.leaf=e.leaf,this.open=e.open}},{key:\"tos\",get:function(){return this._stack.length?this._stack[this._stack.length-1]:void 0}},{key:\"cursor\",get:function(){return this._xml.length}},{key:\"xml\",get:function(){return this.closeAll(),this._xml.join(\"\")}}])&&n(t.prototype,r),o&&n(t,o),e}();u.StdDocAttributes={version:\"1.0\",encoding:\"UTF-8\",standalone:\"yes\"},t.exports=u},{\"./under-dash\":23,\"./utils\":24}],26:[function(e,t,r){(function(r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function i(e){return function(){var t=this,r=arguments;return new Promise((function(n,i){var a=e.apply(t,r);function s(e){o(a,n,i,s,u,\"next\",e)}function u(e){o(a,n,i,s,u,\"throw\",e)}s(void 0)}))}}function a(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function u(e,t,r){return t&&s(e.prototype,t),r&&s(e,r),e}function c(e){return function(){var t,r=h(e);if(l()){var n=h(this).constructor;t=Reflect.construct(r,arguments,n)}else t=r.apply(this,arguments);return f(this,t)}}function f(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function l(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function d(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&p(e,t)}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var y=e(\"events\"),m=e(\"jszip\"),b=e(\"./stream-buf\"),v=function(e){d(s,e);var t,n,o=c(s);function s(e){var t;return a(this,s),(t=o.call(this)).count=0,t.jsZip=new m,t.stream=new b,t.stream.on(\"finish\",(function(){t._process()})),t.getEntryType=e.getEntryType||function(){return\"string\"},t}return u(s,[{key:\"_finished\",value:function(){var e=this;--this.count||r.nextTick((function(){e.emit(\"finished\")}))}},{key:\"_process\",value:(n=i(regeneratorRuntime.mark((function e(){var t,r=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,t=this.stream.read(),e.next=4,this.jsZip.loadAsync(t);case 4:e.sent.forEach(function(){var e=i(regeneratorRuntime.mark((function e(t,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n.dir){e.next=17;break}return r.count++,e.prev=2,e.next=5,n.async(r.getEntryType(t));case 5:o=e.sent,(i=new b).path=t,i.write(o),i.autodrain=function(){r._finished()},i.on(\"finish\",(function(){r._finished()})),r.emit(\"entry\",i),e.next=17;break;case 14:e.prev=14,e.t0=e.catch(2),r.emit(\"error\",e.t0);case 17:case\"end\":return e.stop()}}),e,null,[[2,14]])})));return function(t,r){return e.apply(this,arguments)}}()),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(0),this.emit(\"error\",e.t0);case 11:case\"end\":return e.stop()}}),e,this,[[0,8]])}))),function(){return n.apply(this,arguments)})},{key:\"write\",value:(t=i(regeneratorRuntime.mark((function e(t,r,n){var o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.error){e.next=5;break}throw n&&n(this.error),this.error;case 5:return e.prev=5,e.next=8,this.stream.write(t,r,n);case 8:return o=e.sent,e.abrupt(\"return\",o);case 12:return e.prev=12,e.t0=e.catch(5),this.emit(\"error\",e.t0),e.abrupt(\"return\",e.t0);case 16:case\"end\":return e.stop()}}),e,this,[[5,12]])}))),function(e,r,n){return t.apply(this,arguments)})},{key:\"cork\",value:function(){return this.stream.cork()}},{key:\"uncork\",value:function(){return this.stream.uncork()}},{key:\"end\",value:function(){return this.stream.end()}},{key:\"destroy\",value:function(e){this.emit(\"finished\"),this.error=e}}]),s}(y.EventEmitter),g=function(e){d(n,e);var t,r=c(n);function n(e){var t;return a(this,n),(t=r.call(this)).options=Object.assign({type:\"nodebuffer\",compression:\"DEFLATE\"},e),t.zip=new m,t.stream=new b,t}return u(n,[{key:\"append\",value:function(e,t){t.hasOwnProperty(\"base64\")&&t.base64?this.zip.file(t.name,e,{base64:!0}):this.zip.file(t.name,e)}},{key:\"finalize\",value:(t=i(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.zip.generateAsync(this.options);case 2:t=e.sent,this.stream.end(t),this.emit(\"finish\");case 5:case\"end\":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:\"read\",value:function(e){return this.stream.read(e)}},{key:\"setEncoding\",value:function(e){return this.stream.setEncoding(e)}},{key:\"pause\",value:function(){return this.stream.pause()}},{key:\"resume\",value:function(){return this.stream.resume()}},{key:\"isPaused\",value:function(){return this.stream.isPaused()}},{key:\"pipe\",value:function(e,t){return this.stream.pipe(e,t)}},{key:\"unpipe\",value:function(e){return this.stream.unpipe(e)}},{key:\"unshift\",value:function(e){return this.stream.unshift(e)}},{key:\"wrap\",value:function(e){return this.stream.wrap(e)}}]),n}(y.EventEmitter);t.exports={ZipReader:v,ZipWriter:g}}).call(this,e(\"_process\"))},{\"./stream-buf\":21,_process:419,events:299,jszip:353}],27:[function(e,t,r){t.exports={0:{f:\"General\"},1:{f:\"0\"},2:{f:\"0.00\"},3:{f:\"#,##0\"},4:{f:\"#,##0.00\"},9:{f:\"0%\"},10:{f:\"0.00%\"},11:{f:\"0.00E+00\"},12:{f:\"# ?/?\"},13:{f:\"# ??/??\"},14:{f:\"mm-dd-yy\"},15:{f:\"d-mmm-yy\"},16:{f:\"d-mmm\"},17:{f:\"mmm-yy\"},18:{f:\"h:mm AM/PM\"},19:{f:\"h:mm:ss AM/PM\"},20:{f:\"h:mm\"},21:{f:\"h:mm:ss\"},22:{f:'m/d/yy \"h\":mm'},27:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"\\u5e74\" mm\"\\u6708\" dd\"\\u65e5\"'},28:{\"zh-tw\":'[$-404]e\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"zh-cn\":'m\"\\u6708\"d\"\\u65e5\"',\"ja-jp\":'[$-411]ggge\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"mm-dd\"},29:{\"zh-tw\":'[$-404]e\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"zh-cn\":'m\"\\u6708\"d\"\\u65e5\"',\"ja-jp\":'[$-411]ggge\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"mm-dd\"},30:{\"zh-tw\":\"m/d/yy \",\"zh-cn\":\"m-d-yy\",\"ja-jp\":\"m/d/yy\",\"ko-kr\":\"mm-dd-yy\"},31:{\"zh-tw\":'yyyy\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"zh-cn\":'yyyy\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"ja-jp\":'yyyy\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":'yyyy\"\\ub144\" mm\"\\uc6d4\" dd\"\\uc77c\"'},32:{\"zh-tw\":'hh\"\\u6642\"mm\"\\u5206\"',\"zh-cn\":'h\"\\u65f6\"mm\"\\u5206\"',\"ja-jp\":'h\"\\u6642\"mm\"\\u5206\"',\"ko-kr\":'h\"\\uc2dc\" mm\"\\ubd84\"'},33:{\"zh-tw\":'hh\"\\u6642\"mm\"\\u5206\"ss\"\\u79d2\"',\"zh-cn\":'h\"\\u65f6\"mm\"\\u5206\"ss\"\\u79d2\"',\"ja-jp\":'h\"\\u6642\"mm\"\\u5206\"ss\"\\u79d2\"',\"ko-kr\":'h\"\\uc2dc\" mm\"\\ubd84\" ss\"\\ucd08\"'},34:{\"zh-tw\":'\\u4e0a\\u5348/\\u4e0b\\u5348 hh\"\\u6642\"mm\"\\u5206\"',\"zh-cn\":'\\u4e0a\\u5348/\\u4e0b\\u5348 h\"\\u65f6\"mm\"\\u5206\"',\"ja-jp\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ko-kr\":\"yyyy-mm-dd\"},35:{\"zh-tw\":'\\u4e0a\\u5348/\\u4e0b\\u5348 hh\"\\u6642\"mm\"\\u5206\"ss\"\\u79d2\"',\"zh-cn\":'\\u4e0a\\u5348/\\u4e0b\\u5348 h\"\\u65f6\"mm\"\\u5206\"ss\"\\u79d2\"',\"ja-jp\":'m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"yyyy-mm-dd\"},36:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"\\u5e74\" mm\"\\u6708\" dd\"\\u65e5\"'},37:{f:\"#,##0 ;(#,##0)\"},38:{f:\"#,##0 ;[Red](#,##0)\"},39:{f:\"#,##0.00 ;(#,##0.00)\"},40:{f:\"#,##0.00 ;[Red](#,##0.00)\"},45:{f:\"mm:ss\"},46:{f:\"[h]:mm:ss\"},47:{f:\"mmss.0\"},48:{f:\"##0.0E+0\"},49:{f:\"@\"},50:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"\\u5e74\" mm\"\\u6708\" dd\"\\u65e5\"'},51:{\"zh-tw\":'[$-404]e\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"zh-cn\":'m\"\\u6708\"d\"\\u65e5\"',\"ja-jp\":'[$-411]ggge\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"mm-dd\"},52:{\"zh-tw\":'\\u4e0a\\u5348/\\u4e0b\\u5348 hh\"\\u6642\"mm\"\\u5206\"',\"zh-cn\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ja-jp\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ko-kr\":\"yyyy-mm-dd\"},53:{\"zh-tw\":'\\u4e0a\\u5348/\\u4e0b\\u5348 hh\"\\u6642\"mm\"\\u5206\"ss\"\\u79d2\"',\"zh-cn\":'m\"\\u6708\"d\"\\u65e5\"',\"ja-jp\":'m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"yyyy-mm-dd\"},54:{\"zh-tw\":'[$-404]e\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"zh-cn\":'m\"\\u6708\"d\"\\u65e5\"',\"ja-jp\":'[$-411]ggge\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"mm-dd\"},55:{\"zh-tw\":'\\u4e0a\\u5348/\\u4e0b\\u5348 hh\"\\u6642\"mm\"\\u5206\"',\"zh-cn\":'\\u4e0a\\u5348/\\u4e0b\\u5348 h\"\\u65f6\"mm\"\\u5206\"',\"ja-jp\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ko-kr\":\"yyyy-mm-dd\"},56:{\"zh-tw\":'\\u4e0a\\u5348/\\u4e0b\\u5348 hh\"\\u6642\"mm\"\\u5206\"ss\"\\u79d2\"',\"zh-cn\":'\\u4e0a\\u5348/\\u4e0b\\u5348 h\"\\u65f6\"mm\"\\u5206\"ss\"\\u79d2\"',\"ja-jp\":'m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"yyyy-mm-dd\"},57:{\"zh-tw\":\"[$-404]e/m/d\",\"zh-cn\":'yyyy\"\\u5e74\"m\"\\u6708\"',\"ja-jp\":\"[$-411]ge.m.d\",\"ko-kr\":'yyyy\"\\u5e74\" mm\"\\u6708\" dd\"\\u65e5\"'},58:{\"zh-tw\":'[$-404]e\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"zh-cn\":'m\"\\u6708\"d\"\\u65e5\"',\"ja-jp\":'[$-411]ggge\"\\u5e74\"m\"\\u6708\"d\"\\u65e5\"',\"ko-kr\":\"mm-dd\"},59:{\"th-th\":\"t0\"},60:{\"th-th\":\"t0.00\"},61:{\"th-th\":\"t#,##0\"},62:{\"th-th\":\"t#,##0.00\"},67:{\"th-th\":\"t0%\"},68:{\"th-th\":\"t0.00%\"},69:{\"th-th\":\"t# ?/?\"},70:{\"th-th\":\"t# ??/??\"},81:{\"th-th\":\"d/m/bb\"}}},{}],28:[function(e,t,r){t.exports={OfficeDocument:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",Worksheet:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",CalcChain:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain\",SharedStrings:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",Styles:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",Theme:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",Hyperlink:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",Image:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",CoreProperties:\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",ExtenderProperties:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",Comments:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",VmlDrawing:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",Table:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\"}},{}],29:[function(e,t,r){function n(e){if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=function(e,t){if(!e)return;if(\"string\"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===r&&e.constructor&&(r=e.constructor.name);if(\"Map\"===r||\"Set\"===r)return Array.from(r);if(\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}(e))){var t=0,r=function(){};return{s:r,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var n,i,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function i(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function a(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function s(e){i(a,n,o,s,u,\"next\",e)}function u(e){i(a,n,o,s,u,\"throw\",e)}s(void 0)}))}}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var u=e(\"../../utils/sax-stream\"),c=e(\"../../utils/xml-stream\"),f=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e)}var t,r,o,i,f;return t=e,r=[{key:\"prepare\",value:function(){}},{key:\"render\",value:function(){}},{key:\"parseOpen\",value:function(e){}},{key:\"parseText\",value:function(e){}},{key:\"parseClose\",value:function(e){}},{key:\"reconcile\",value:function(e,t){}},{key:\"reset\",value:function(){this.model=null,this.map&&Object.values(this.map).forEach((function(t){t instanceof e?t.reset():t.xform&&t.xform.reset()}))}},{key:\"mergeModel\",value:function(e){this.model=Object.assign(this.model||{},e)}},{key:\"parse\",value:(f=a(regeneratorRuntime.mark((function e(t,r){var o=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",new Promise((function(e,i){var a=function(e){r&&r.unpipe(t),i(e)};t.on(\"data\",(function(t){try{var r,i=n(t);try{for(i.s();!(r=i.n()).done;){var s=r.value,u=s.eventType,c=s.value;\"opentag\"===u?o.parseOpen(c):\"text\"===u?o.parseText(c):\"closetag\"===u&&(o.parseClose(c.name)||e(o.model))}}catch(e){i.e(e)}finally{i.f()}}catch(e){a(e)}})),t.on(\"error\",a),t.on(\"end\",(function(){e(o.model)}))})));case 1:case\"end\":return e.stop()}}),e)}))),function(e,t){return f.apply(this,arguments)})},{key:\"parseStream\",value:(i=a(regeneratorRuntime.mark((function e(t){var r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new u([\"opentag\",\"text\",\"closetag\"]),t.pipe(r),e.abrupt(\"return\",this.parse(r,t));case 3:case\"end\":return e.stop()}}),e,this)}))),function(e){return i.apply(this,arguments)})},{key:\"toXml\",value:function(e){var t=new c;return this.render(t,e),t.xml}},{key:\"xml\",get:function(){return this.toXml(this.model)}}],o=[{key:\"toAttribute\",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e.toString()}},{key:\"toStringAttribute\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:\"toStringValue\",value:function(e,t){return void 0===e?t:e}},{key:\"toBoolAttribute\",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e?\"1\":\"0\"}},{key:\"toBoolValue\",value:function(e,t){return void 0===e?t:\"1\"===e}},{key:\"toIntAttribute\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:\"toIntValue\",value:function(e,t){return void 0===e?t:parseInt(e,10)}},{key:\"toFloatAttribute\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:\"toFloatValue\",value:function(e,t){return void 0===e?t:parseFloat(e)}}],r&&s(t.prototype,r),o&&s(t,o),e}();t.exports=f},{\"../../utils/sax-stream\":19,\"../../utils/xml-stream\":25}],30:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../base-xform\"),l=e(\"../../../utils/col-cache\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.openNode(\"definedName\",{name:t.name,localSheetId:t.localSheetId}),e.writeText(t.ranges.join(\",\")),e.closeNode()}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"definedName\":return this._parsedName=e.attributes.name,this._parsedLocalSheetId=e.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}},{key:\"parseText\",value:function(e){this._parsedText.push(e)}},{key:\"parseClose\",value:function(){return this.model={name:this._parsedName,ranges:p(this._parsedText.join(\"\"))},void 0!==this._parsedLocalSheetId&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}])&&i(r.prototype,n),f&&i(r,f),h}(f);function d(e){try{return l.decodeEx(e),!0}catch(e){return!1}}function p(e){var t=[],r=!1,n=\"\";return e.split(\",\").forEach((function(e){if(e){var o=(e.match(/'/g)||[]).length;if(o){var i=o%2==0;!r&&i&&d(e)?t.push(e):r&&!i?(r=!1,d(n+e)&&t.push(n+e),n=\"\"):(r=!0,n+=\"\".concat(e,\",\"))}else r?n+=\"\".concat(e,\",\"):d(e)&&t.push(e)}})),t}t.exports=h},{\"../../../utils/col-cache\":17,\"../base-xform\":29}],31:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/utils\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"sheet\",{sheetId:t.id,name:t.name,state:t.state,\"r:id\":t.rId})}},{key:\"parseOpen\",value:function(e){return\"sheet\"===e.name&&(this.model={name:f.xmlDecode(e.attributes.name),id:parseInt(e.attributes.sheetId,10),state:e.attributes.state,rId:e.attributes[\"r:id\"]},!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&i(r.prototype,n),l&&i(r,l),d}(e(\"../base-xform\"));t.exports=l},{\"../../../utils/utils\":24,\"../base-xform\":29}],32:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"calcPr\",{calcId:171027,fullCalcOnLoad:t.fullCalcOnLoad?1:void 0})}},{key:\"parseOpen\",value:function(e){return\"calcPr\"===e.name&&(this.model={},!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],33:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"workbookPr\",{date1904:t.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}},{key:\"parseOpen\",value:function(e){return\"workbookPr\"===e.name&&(this.model={date1904:\"1\"===e.attributes.date1904},!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],34:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){var r={xWindow:t.x||0,yWindow:t.y||0,windowWidth:t.width||12e3,windowHeight:t.height||24e3,firstSheet:t.firstSheet,activeTab:t.activeTab};t.visibility&&\"visible\"!==t.visibility&&(r.visibility=t.visibility),e.leafNode(\"workbookView\",r)}},{key:\"parseOpen\",value:function(e){if(\"workbookView\"===e.name){var t=this.model={},r=function(e,r,n){var o=void 0!==r?t[e]=parseInt(r,10):n;void 0!==o&&(t[e]=o)};return r(\"x\",e.attributes.xWindow,0),r(\"y\",e.attributes.yWindow,0),r(\"width\",e.attributes.windowWidth,25e3),r(\"height\",e.attributes.windowHeight,1e4),n=\"visibility\",o=e.attributes.visibility,i=\"visible\",void 0!==(a=void 0!==o?t[n]=o:i)&&(t[n]=a),r(\"activeTab\",e.attributes.activeTab,void 0),r(\"firstSheet\",e.attributes.firstSheet,void 0),!0}var n,o,i,a;return!1}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],35:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/under-dash\"),f=e(\"../../../utils/col-cache\"),l=e(\"../../../utils/xml-stream\"),h=e(\"../base-xform\"),d=e(\"../static-xform\"),p=e(\"../list-xform\"),y=e(\"./defined-name-xform\"),m=e(\"./sheet-xform\"),b=e(\"./workbook-view-xform\"),v=e(\"./workbook-properties-xform\"),g=e(\"./workbook-calc-properties-xform\"),w=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(w,e);var t,r,n,h,d=(t=w,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function w(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,w),(e=d.call(this)).map={fileVersion:w.STATIC_XFORMS.fileVersion,workbookPr:new v,bookViews:new p({tag:\"bookViews\",count:!1,childXform:new b}),sheets:new p({tag:\"sheets\",count:!1,childXform:new m}),definedNames:new p({tag:\"definedNames\",count:!1,childXform:new y}),calcPr:new g},e}return r=w,(n=[{key:\"prepare\",value:function(e){e.sheets=e.worksheets;var t=[],r=0;e.sheets.forEach((function(e){if(e.pageSetup&&e.pageSetup.printArea&&e.pageSetup.printArea.split(\"&&\").forEach((function(n){var o=n.split(\":\"),i={name:\"_xlnm.Print_Area\",ranges:[\"'\".concat(e.name,\"'!$\").concat(o[0],\":$\").concat(o[1])],localSheetId:r};t.push(i)})),e.pageSetup&&(e.pageSetup.printTitlesRow||e.pageSetup.printTitlesColumn)){var n=[];if(e.pageSetup.printTitlesColumn){var o=e.pageSetup.printTitlesColumn.split(\":\");n.push(\"'\".concat(e.name,\"'!$\").concat(o[0],\":$\").concat(o[1]))}if(e.pageSetup.printTitlesRow){var i=e.pageSetup.printTitlesRow.split(\":\");n.push(\"'\".concat(e.name,\"'!$\").concat(i[0],\":$\").concat(i[1]))}var a={name:\"_xlnm.Print_Titles\",ranges:n,localSheetId:r};t.push(a)}r++})),t.length&&(e.definedNames=e.definedNames.concat(t)),(e.media||[]).forEach((function(e,t){e.name=e.type+(t+1)}))}},{key:\"render\",value:function(e,t){e.openXml(l.StdDocAttributes),e.openNode(\"workbook\",w.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(e),this.map.workbookPr.render(e,t.properties),this.map.bookViews.render(e,t.views),this.map.sheets.render(e,t.sheets),this.map.definedNames.render(e,t.definedNames),this.map.calcPr.render(e,t.calcProperties),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"workbook\":return!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case\"workbook\":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}},{key:\"reconcile\",value:function(e){var t,r=(e.workbookRels||[]).reduce((function(e,t){return e[t.Id]=t,e}),{}),n=[],o=0;(e.sheets||[]).forEach((function(i){var a=r[i.rId];a&&(t=e.worksheetHash[\"xl/\".concat(a.Target.replace(/^(\\s|\\/xl\\/)+/,\"\"))])&&(t.name=i.name,t.id=i.id,t.state=i.state,n[o++]=t)}));var i=[];c.each(e.definedNames,(function(e){if(\"_xlnm.Print_Area\"===e.name){if(t=n[e.localSheetId]){t.pageSetup||(t.pageSetup={});var r=f.decodeEx(e.ranges[0]);t.pageSetup.printArea=t.pageSetup.printArea?\"\".concat(t.pageSetup.printArea,\"&&\").concat(r.dimensions):r.dimensions}}else if(\"_xlnm.Print_Titles\"===e.name){if(t=n[e.localSheetId]){t.pageSetup||(t.pageSetup={});var o=e.ranges.join(\",\"),a=/\\$/g,s=o.match(/\\$\\d+:\\$\\d+/);if(s&&s.length){var u=s[0];t.pageSetup.printTitlesRow=u.replace(a,\"\")}var c=o.match(/\\$[A-Z]+:\\$[A-Z]+/);if(c&&c.length){var l=c[0];t.pageSetup.printTitlesColumn=l.replace(a,\"\")}}}else i.push(e)})),e.definedNames=i,e.media.forEach((function(e,t){e.index=t}))}}])&&o(r.prototype,n),h&&o(r,h),w}(h);w.WORKBOOK_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"x15\",\"xmlns:x15\":\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"},w.STATIC_XFORMS={fileVersion:new d({tag:\"fileVersion\",$:{appName:\"xl\",lastEdited:5,lowestEdited:5,rupBuild:9303}})},t.exports=w},{\"../../../utils/col-cache\":17,\"../../../utils/under-dash\":23,\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"../list-xform\":68,\"../static-xform\":117,\"./defined-name-xform\":30,\"./sheet-xform\":31,\"./workbook-calc-properties-xform\":32,\"./workbook-properties-xform\":33,\"./workbook-view-xform\":34}],36:[function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i=e(\"../strings/rich-text-xform\"),a=e(\"../../../utils/utils\"),s=e(\"../base-xform\"),u=t.exports=function(e){this.model=e};a.inherits(u,s,{get tag(){return\"r\"},get richTextXform(){return this._richTextXform||(this._richTextXform=new i),this._richTextXform},render:function(e,t){var r=this;t=t||this.model,e.openNode(\"comment\",{ref:t.ref,authorId:0}),e.openNode(\"text\"),t&&t.note&&t.note.texts&&t.note.texts.forEach((function(t){r.richTextXform.render(e,t)})),e.closeNode(),e.closeNode()},parseOpen:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"comment\":return this.model=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({type:\"note\",note:{texts:[]}},e.attributes),!0;case\"r\":return this.parser=this.richTextXform,this.parser.parseOpen(e),!0;default:return!1}},parseText:function(e){this.parser&&this.parser.parseText(e)},parseClose:function(e){switch(e){case\"comment\":return!1;case\"r\":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{\"../../../utils/utils\":24,\"../base-xform\":29,\"../strings/rich-text-xform\":119}],37:[function(e,t,r){var n=e(\"../../../utils/xml-stream\"),o=e(\"../../../utils/utils\"),i=e(\"../base-xform\"),a=e(\"./comment-xform\"),s=t.exports=function(){this.map={comment:new a}};o.inherits(s,i,{COMMENTS_ATTRIBUTES:{xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"}},{render:function(e,t){var r=this;t=t||this.model,e.openXml(n.StdDocAttributes),e.openNode(\"comments\",s.COMMENTS_ATTRIBUTES),e.openNode(\"authors\"),e.leafNode(\"author\",null,\"Author\"),e.closeNode(),e.openNode(\"commentList\"),t.comments.forEach((function(t){r.map.comment.render(e,t)})),e.closeNode(),e.closeNode()},parseOpen:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"commentList\":return this.model={comments:[]},!0;case\"comment\":return this.parser=this.map.comment,this.parser.parseOpen(e),!0;default:return!1}},parseText:function(e){this.parser&&this.parser.parseText(e)},parseClose:function(e){switch(e){case\"commentList\":return!1;case\"comment\":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}})},{\"../../../utils/utils\":24,\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"./comment-xform\":36}],38:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this))._model=e,t}return r=l,(n=[{key:\"render\",value:function(e,t,r){(t===r[2]||\"x:SizeWithCells\"===this.tag&&t===r[1])&&e.leafNode(this.tag)}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return this._model&&this._model.tag}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../../base-xform\"));t.exports=c},{\"../../base-xform\":29}],39:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this))._model=e,t}return r=l,(n=[{key:\"render\",value:function(e,t){e.leafNode(this.tag,null,t)}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.text=\"\",!0;default:return!1}}},{key:\"parseText\",value:function(e){this.text=e}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return this._model&&this._model.tag}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../../base-xform\"));t.exports=c},{\"../../base-xform\":29}],40:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"getAnchorRect\",value:function(e){var t=Math.floor(e.left),r=Math.floor(68*(e.left-t)),n=Math.floor(e.top),o=Math.floor(18*(e.top-n)),i=Math.floor(e.right),a=Math.floor(68*(e.right-i)),s=Math.floor(e.bottom);return[t,r,n,o,i,a,s,Math.floor(18*(e.bottom-s))]}},{key:\"getDefaultRect\",value:function(e){var t=e.col,r=Math.max(e.row-2,0);return[t,6,r,14,t+2,2,r+4,16]}},{key:\"render\",value:function(e,t){var r=t.anchor?this.getAnchorRect(t.anchor):this.getDefaultRect(t.refAddress);e.leafNode(\"x:Anchor\",null,r.join(\", \"))}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.text=\"\",!0;default:return!1}}},{key:\"parseText\",value:function(e){this.text=e}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"x:Anchor\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],41:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./vml-anchor-xform\"),l=e(\"./style/vml-protection-xform\"),h=e(\"./style/vml-position-xform\"),d=[\"twoCells\",\"oneCells\",\"absolute\"],p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(y,e);var t,r,n,c,p=(t=y,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=p.call(this)).map={\"x:Anchor\":new f,\"x:Locked\":new l({tag:\"x:Locked\"}),\"x:LockText\":new l({tag:\"x:LockText\"}),\"x:SizeWithCells\":new h({tag:\"x:SizeWithCells\"}),\"x:MoveWithCells\":new h({tag:\"x:MoveWithCells\"})},e}return r=y,(n=[{key:\"render\",value:function(e,t){var r=t.note,n=r.protection,o=r.editAs;e.openNode(this.tag,{ObjectType:\"Note\"}),this.map[\"x:MoveWithCells\"].render(e,o,d),this.map[\"x:SizeWithCells\"].render(e,o,d),this.map[\"x:Anchor\"].render(e,t),this.map[\"x:Locked\"].render(e,n.locked),e.leafNode(\"x:AutoFill\",null,\"False\"),this.map[\"x:LockText\"].render(e,n.lockText),e.leafNode(\"x:Row\",null,t.refAddress.row-1),e.leafNode(\"x:Column\",null,t.refAddress.col-1),e.closeNode()}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:\"\"};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.normalizeModel(),!1;default:return!0}}},{key:\"normalizeModel\",value:function(){var e=Object.assign({},this.map[\"x:MoveWithCells\"].model,this.map[\"x:SizeWithCells\"].model),t=Object.keys(e).length;this.model.editAs=d[t],this.model.anchor=this.map[\"x:Anchor\"].text,this.model.protection.locked=this.map[\"x:Locked\"].text,this.model.protection.lockText=this.map[\"x:LockText\"].text}},{key:\"tag\",get:function(){return\"x:ClientData\"}}])&&o(r.prototype,n),c&&o(r,c),y}(c);t.exports=p},{\"../base-xform\":29,\"./style/vml-position-xform\":38,\"./style/vml-protection-xform\":39,\"./vml-anchor-xform\":40}],42:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/xml-stream\"),f=e(\"../base-xform\"),l=e(\"./vml-shape-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,f,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={\"v:shape\":new l},e}return r=d,(n=[{key:\"render\",value:function(e,t){var r=this;e.openXml(c.StdDocAttributes),e.openNode(this.tag,d.DRAWING_ATTRIBUTES),e.openNode(\"o:shapelayout\",{\"v:ext\":\"edit\"}),e.leafNode(\"o:idmap\",{\"v:ext\":\"edit\",data:1}),e.closeNode(),e.openNode(\"v:shapetype\",{id:\"_x0000_t202\",coordsize:\"21600,21600\",\"o:spt\":202,path:\"m,l,21600r21600,l21600,xe\"}),e.leafNode(\"v:stroke\",{joinstyle:\"miter\"}),e.leafNode(\"v:path\",{gradientshapeok:\"t\",\"o:connecttype\":\"rect\"}),e.closeNode(),t.comments.forEach((function(t,n){r.map[\"v:shape\"].render(e,t,n)})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}},{key:\"reconcile\",value:function(e,t){var r=this;e.anchors.forEach((function(e){e.br?r.map[\"xdr:twoCellAnchor\"].reconcile(e,t):r.map[\"xdr:oneCellAnchor\"].reconcile(e,t)}))}},{key:\"tag\",get:function(){return\"xml\"}}])&&o(r.prototype,n),f&&o(r,f),d}(f);h.DRAWING_ATTRIBUTES={\"xmlns:v\":\"urn:schemas-microsoft-com:vml\",\"xmlns:o\":\"urn:schemas-microsoft-com:office:office\",\"xmlns:x\":\"urn:schemas-microsoft-com:office:excel\"},t.exports=h},{\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"./vml-shape-xform\":43}],43:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./vml-textbox-xform\"),l=e(\"./vml-client-data-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={\"v:textbox\":new f,\"x:ClientData\":new l},e}return r=d,(n=[{key:\"render\",value:function(e,t,r){e.openNode(\"v:shape\",d.V_SHAPE_ATTRIBUTES(t,r)),e.leafNode(\"v:fill\",{color2:\"infoBackground [80]\"}),e.leafNode(\"v:shadow\",{color:\"none [81]\",obscured:\"t\"}),e.leafNode(\"v:path\",{\"o:connecttype\":\"none\"}),this.map[\"v:textbox\"].render(e,t),this.map[\"x:ClientData\"].render(e,t),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={margins:{insetmode:e.attributes[\"o:insetmode\"]},anchor:\"\",editAs:\"\",protection:{}};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.margins.inset=this.map[\"v:textbox\"].model&&this.map[\"v:textbox\"].model.inset,this.model.protection=this.map[\"x:ClientData\"].model&&this.map[\"x:ClientData\"].model.protection,this.model.anchor=this.map[\"x:ClientData\"].model&&this.map[\"x:ClientData\"].model.anchor,this.model.editAs=this.map[\"x:ClientData\"].model&&this.map[\"x:ClientData\"].model.editAs,!1;default:return!0}}},{key:\"tag\",get:function(){return\"v:shape\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);h.V_SHAPE_ATTRIBUTES=function(e,t){return{id:\"_x0000_s\".concat(1025+t),type:\"#_x0000_t202\",style:\"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden\",fillcolor:\"infoBackground [80]\",strokecolor:\"none [81]\",\"o:insetmode\":e.note.margins&&e.note.margins.insetmode}},t.exports=h},{\"../base-xform\":29,\"./vml-client-data-xform\":41,\"./vml-textbox-xform\":44}],44:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"conversionUnit\",value:function(e,t,r){return\"\".concat(parseFloat(e)*t.toFixed(2)).concat(r)}},{key:\"reverseConversionUnit\",value:function(e){var t=this;return(e||\"\").split(\",\").map((function(e){return Number(parseFloat(t.conversionUnit(parseFloat(e),.1,\"\")).toFixed(2))}))}},{key:\"render\",value:function(e,t){var r=this,n={style:\"mso-direction-alt:auto\"};if(t&&t.note){var o=(t.note&&t.note.margins).inset;Array.isArray(o)&&(o=o.map((function(e){return r.conversionUnit(e,10,\"mm\")})).join(\",\")),o&&(n.inset=o)}e.openNode(\"v:textbox\",n),e.leafNode(\"div\",{style:\"text-align:left\"}),e.closeNode()}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={inset:this.reverseConversionUnit(e.attributes.inset)},!0;default:return!0}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){switch(e){case this.tag:return!1;default:return!0}}},{key:\"tag\",get:function(){return\"v:textbox\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],45:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"createNewModel\",value:function(e){return{}}},{key:\"parseOpen\",value:function(e){return this.parser=this.parser||this.map[e.name],this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag&&(this.model=this.createNewModel(e),!0)}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"onParserClose\",value:function(e,t){this.model[e]=t.model}},{key:\"parseClose\",value:function(e){return this.parser?(this.parser.parseClose(e)||(this.onParserClose(e,this.parser),this.parser=void 0),!0):e!==this.tag}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"./base-xform\"));t.exports=f},{\"./base-xform\":29}],46:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.openNode(\"HeadingPairs\"),e.openNode(\"vt:vector\",{size:2,baseType:\"variant\"}),e.openNode(\"vt:variant\"),e.leafNode(\"vt:lpstr\",void 0,\"Worksheets\"),e.closeNode(),e.openNode(\"vt:variant\"),e.leafNode(\"vt:i4\",void 0,t.length),e.closeNode(),e.closeNode(),e.closeNode()}},{key:\"parseOpen\",value:function(e){return\"HeadingPairs\"===e.name}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){return\"HeadingPairs\"!==e}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],47:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.openNode(\"TitlesOfParts\"),e.openNode(\"vt:vector\",{size:t.length,baseType:\"lpstr\"}),t.forEach((function(t){e.leafNode(\"vt:lpstr\",void 0,t.name)})),e.closeNode(),e.closeNode()}},{key:\"parseOpen\",value:function(e){return\"TitlesOfParts\"===e.name}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){return\"TitlesOfParts\"!==e}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],48:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/xml-stream\"),f=e(\"../base-xform\"),l=e(\"../simple/string-xform\"),h=e(\"./app-heading-pairs-xform\"),d=e(\"./app-titles-of-parts-xform\"),p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(y,e);var t,r,n,f,p=(t=y,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=p.call(this)).map={Company:new l({tag:\"Company\"}),Manager:new l({tag:\"Manager\"}),HeadingPairs:new h,TitleOfParts:new d},e}return r=y,(n=[{key:\"render\",value:function(e,t){e.openXml(c.StdDocAttributes),e.openNode(\"Properties\",y.PROPERTY_ATTRIBUTES),e.leafNode(\"Application\",void 0,\"Microsoft Excel\"),e.leafNode(\"DocSecurity\",void 0,\"0\"),e.leafNode(\"ScaleCrop\",void 0,\"false\"),this.map.HeadingPairs.render(e,t.worksheets),this.map.TitleOfParts.render(e,t.worksheets),this.map.Company.render(e,t.company||\"\"),this.map.Manager.render(e,t.manager),e.leafNode(\"LinksUpToDate\",void 0,\"false\"),e.leafNode(\"SharedDoc\",void 0,\"false\"),e.leafNode(\"HyperlinksChanged\",void 0,\"false\"),e.leafNode(\"AppVersion\",void 0,\"16.0300\"),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"Properties\":return!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case\"Properties\":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}])&&o(r.prototype,n),f&&o(r,f),y}(f);p.DateFormat=function(e){return e.toISOString().replace(/[.]\\d{3,6}/,\"\")},p.DateAttrs={\"xsi:type\":\"dcterms:W3CDTF\"},p.PROPERTY_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\"xmlns:vt\":\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\"},t.exports=p},{\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"../simple/string-xform\":116,\"./app-heading-pairs-xform\":46,\"./app-titles-of-parts-xform\":47}],49:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/xml-stream\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){e.openXml(f.StdDocAttributes),e.openNode(\"Types\",d.PROPERTY_ATTRIBUTES);var r={};(t.media||[]).forEach((function(t){if(\"image\"===t.type){var n=t.extension;r[n]||(r[n]=!0,e.leafNode(\"Default\",{Extension:n,ContentType:\"image/\".concat(n)}))}})),e.leafNode(\"Default\",{Extension:\"rels\",ContentType:\"application/vnd.openxmlformats-package.relationships+xml\"}),e.leafNode(\"Default\",{Extension:\"xml\",ContentType:\"application/xml\"}),e.leafNode(\"Override\",{PartName:\"/xl/workbook.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"}),t.worksheets.forEach((function(t){var r=\"/xl/worksheets/sheet\".concat(t.id,\".xml\");e.leafNode(\"Override\",{PartName:r,ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"})})),e.leafNode(\"Override\",{PartName:\"/xl/theme/theme1.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.theme+xml\"}),e.leafNode(\"Override\",{PartName:\"/xl/styles.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"}),t.sharedStrings&&t.sharedStrings.count&&e.leafNode(\"Override\",{PartName:\"/xl/sharedStrings.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"}),t.tables&&t.tables.forEach((function(t){e.leafNode(\"Override\",{PartName:\"/xl/tables/\".concat(t.target),ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"})})),t.drawings&&t.drawings.forEach((function(t){e.leafNode(\"Override\",{PartName:\"/xl/drawings/\".concat(t.name,\".xml\"),ContentType:\"application/vnd.openxmlformats-officedocument.drawing+xml\"})})),t.commentRefs&&(e.leafNode(\"Default\",{Extension:\"vml\",ContentType:\"application/vnd.openxmlformats-officedocument.vmlDrawing\"}),t.commentRefs.forEach((function(t){var r=t.commentName;e.leafNode(\"Override\",{PartName:\"/xl/\".concat(r,\".xml\"),ContentType:\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\"})}))),e.leafNode(\"Override\",{PartName:\"/docProps/core.xml\",ContentType:\"application/vnd.openxmlformats-package.core-properties+xml\"}),e.leafNode(\"Override\",{PartName:\"/docProps/app.xml\",ContentType:\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"}),e.closeNode()}},{key:\"parseOpen\",value:function(){return!1}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&i(r.prototype,n),l&&i(r,l),d}(e(\"../base-xform\"));l.PROPERTY_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/package/2006/content-types\"},t.exports=l},{\"../../../utils/xml-stream\":25,\"../base-xform\":29}],50:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/xml-stream\"),f=e(\"../base-xform\"),l=e(\"../simple/date-xform\"),h=e(\"../simple/string-xform\"),d=e(\"../simple/integer-xform\"),p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(y,e);var t,r,n,f,p=(t=y,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=p.call(this)).map={\"dc:creator\":new h({tag:\"dc:creator\"}),\"dc:title\":new h({tag:\"dc:title\"}),\"dc:subject\":new h({tag:\"dc:subject\"}),\"dc:description\":new h({tag:\"dc:description\"}),\"dc:identifier\":new h({tag:\"dc:identifier\"}),\"dc:language\":new h({tag:\"dc:language\"}),\"cp:keywords\":new h({tag:\"cp:keywords\"}),\"cp:category\":new h({tag:\"cp:category\"}),\"cp:lastModifiedBy\":new h({tag:\"cp:lastModifiedBy\"}),\"cp:lastPrinted\":new l({tag:\"cp:lastPrinted\",format:y.DateFormat}),\"cp:revision\":new d({tag:\"cp:revision\"}),\"cp:version\":new h({tag:\"cp:version\"}),\"cp:contentStatus\":new h({tag:\"cp:contentStatus\"}),\"cp:contentType\":new h({tag:\"cp:contentType\"}),\"dcterms:created\":new l({tag:\"dcterms:created\",attrs:y.DateAttrs,format:y.DateFormat}),\"dcterms:modified\":new l({tag:\"dcterms:modified\",attrs:y.DateAttrs,format:y.DateFormat})},e}return r=y,(n=[{key:\"render\",value:function(e,t){e.openXml(c.StdDocAttributes),e.openNode(\"cp:coreProperties\",y.CORE_PROPERTY_ATTRIBUTES),this.map[\"dc:creator\"].render(e,t.creator),this.map[\"dc:title\"].render(e,t.title),this.map[\"dc:subject\"].render(e,t.subject),this.map[\"dc:description\"].render(e,t.description),this.map[\"dc:identifier\"].render(e,t.identifier),this.map[\"dc:language\"].render(e,t.language),this.map[\"cp:keywords\"].render(e,t.keywords),this.map[\"cp:category\"].render(e,t.category),this.map[\"cp:lastModifiedBy\"].render(e,t.lastModifiedBy),this.map[\"cp:lastPrinted\"].render(e,t.lastPrinted),this.map[\"cp:revision\"].render(e,t.revision),this.map[\"cp:version\"].render(e,t.version),this.map[\"cp:contentStatus\"].render(e,t.contentStatus),this.map[\"cp:contentType\"].render(e,t.contentType),this.map[\"dcterms:created\"].render(e,t.created),this.map[\"dcterms:modified\"].render(e,t.modified),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"cp:coreProperties\":case\"coreProperties\":return!0;default:if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error(\"Unexpected xml node in parseOpen: \".concat(JSON.stringify(e)))}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case\"cp:coreProperties\":case\"coreProperties\":return this.model={creator:this.map[\"dc:creator\"].model,title:this.map[\"dc:title\"].model,subject:this.map[\"dc:subject\"].model,description:this.map[\"dc:description\"].model,identifier:this.map[\"dc:identifier\"].model,language:this.map[\"dc:language\"].model,keywords:this.map[\"cp:keywords\"].model,category:this.map[\"cp:category\"].model,lastModifiedBy:this.map[\"cp:lastModifiedBy\"].model,lastPrinted:this.map[\"cp:lastPrinted\"].model,revision:this.map[\"cp:revision\"].model,contentStatus:this.map[\"cp:contentStatus\"].model,contentType:this.map[\"cp:contentType\"].model,created:this.map[\"dcterms:created\"].model,modified:this.map[\"dcterms:modified\"].model},!1;default:throw new Error(\"Unexpected xml node in parseClose: \".concat(e))}}}])&&o(r.prototype,n),f&&o(r,f),y}(f);p.DateFormat=function(e){return e.toISOString().replace(/[.]\\d{3}/,\"\")},p.DateAttrs={\"xsi:type\":\"dcterms:W3CDTF\"},p.CORE_PROPERTY_ATTRIBUTES={\"xmlns:cp\":\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",\"xmlns:dc\":\"http://purl.org/dc/elements/1.1/\",\"xmlns:dcterms\":\"http://purl.org/dc/terms/\",\"xmlns:dcmitype\":\"http://purl.org/dc/dcmitype/\",\"xmlns:xsi\":\"http://www.w3.org/2001/XMLSchema-instance\"},t.exports=p},{\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"../simple/date-xform\":114,\"../simple/integer-xform\":115,\"../simple/string-xform\":116}],51:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"Relationship\",t)}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"Relationship\":return this.model=e.attributes,!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],52:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/xml-stream\"),f=e(\"../base-xform\"),l=e(\"./relationship-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,f,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={Relationship:new l},e}return r=d,(n=[{key:\"render\",value:function(e,t){var r=this;t=t||this._values,e.openXml(c.StdDocAttributes),e.openNode(\"Relationships\",d.RELATIONSHIPS_ATTRIBUTES),t.forEach((function(t){r.map.Relationship.render(e,t)})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"Relationships\":return this.model=[],!0;default:if(this.parser=this.map[e.name],this.parser)return this.parser.parseOpen(e),!0;throw new Error(\"Unexpected xml node in parseOpen: \".concat(JSON.stringify(e)))}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(e){case\"Relationships\":return!1;default:throw new Error(\"Unexpected xml node in parseClose: \".concat(e))}}}])&&o(r.prototype,n),f&&o(r,f),d}(f);h.RELATIONSHIPS_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/package/2006/relationships\"},t.exports=h},{\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"./relationship-xform\":51}],53:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={range:{editAs:e.attributes.editAs||\"oneCell\"}};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"reconcilePicture\",value:function(e,t){if(e&&e.rId){var r=t.rels[e.rId].Target.match(/.*\\/media\\/(.+[.][a-zA-Z]{3,4})/);if(r){var n=r[1],o=t.mediaIndex[n];return t.media[o]}}}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],54:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./blip-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,c,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h),(e=l.call(this)).map={\"a:blip\":new f},e}return r=h,(n=[{key:\"render\",value:function(e,t){e.openNode(this.tag),this.map[\"a:blip\"].render(e,t),e.openNode(\"a:stretch\"),e.leafNode(\"a:fillRect\"),e.closeNode(),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map[\"a:blip\"].model,!1;default:return!0}}},{key:\"tag\",get:function(){return\"xdr:blipFill\"}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../base-xform\":29,\"./blip-xform\":55}],55:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(this.tag,{\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"r:embed\":t.rId,cstate:\"print\"})}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={rId:e.attributes[\"r:embed\"]},!0;default:return!0}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){switch(e){case this.tag:return!1;default:return!0}}},{key:\"tag\",get:function(){return\"a:blip\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],56:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e){e.openNode(this.tag),e.leafNode(\"a:picLocks\",{noChangeAspect:\"1\"}),e.closeNode()}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:default:return!0}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){switch(e){case this.tag:return!1;default:return!0}}},{key:\"tag\",get:function(){return\"xdr:cNvPicPr\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],57:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./hlink-click-xform\"),l=e(\"./ext-lst-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={\"a:hlinkClick\":new f,\"a:extLst\":new l},e}return r=d,(n=[{key:\"render\",value:function(e,t){e.openNode(this.tag,{id:t.index,name:\"Picture \".concat(t.index)}),this.map[\"a:hlinkClick\"].render(e,t),this.map[\"a:extLst\"].render(e,t),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map[\"a:hlinkClick\"].model,!1;default:return!0}}},{key:\"tag\",get:function(){return\"xdr:cNvPr\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);t.exports=h},{\"../base-xform\":29,\"./ext-lst-xform\":60,\"./hlink-click-xform\":62}],58:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"../simple/integer-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,c,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h),(t=l.call(this)).tag=e.tag,t.map={\"xdr:col\":new f({tag:\"xdr:col\",zero:!0}),\"xdr:colOff\":new f({tag:\"xdr:colOff\",zero:!0}),\"xdr:row\":new f({tag:\"xdr:row\",zero:!0}),\"xdr:rowOff\":new f({tag:\"xdr:rowOff\",zero:!0})},t}return r=h,(n=[{key:\"render\",value:function(e,t){e.openNode(this.tag),this.map[\"xdr:col\"].render(e,t.nativeCol),this.map[\"xdr:colOff\"].render(e,t.nativeColOff),this.map[\"xdr:row\"].render(e,t.nativeRow),this.map[\"xdr:rowOff\"].render(e,t.nativeRowOff),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model={nativeCol:this.map[\"xdr:col\"].model,nativeColOff:this.map[\"xdr:colOff\"].model,nativeRow:this.map[\"xdr:row\"].model,nativeRowOff:this.map[\"xdr:rowOff\"].model},!1;default:return!0}}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../base-xform\":29,\"../simple/integer-xform\":115}],59:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/col-cache\"),f=e(\"../../../utils/xml-stream\"),l=e(\"../base-xform\"),h=e(\"./two-cell-anchor-xform\"),d=e(\"./one-cell-anchor-xform\");var p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(y,e);var t,r,n,l,p=(t=y,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=p.call(this)).map={\"xdr:twoCellAnchor\":new h,\"xdr:oneCellAnchor\":new d},e}return r=y,(n=[{key:\"prepare\",value:function(e){var t=this;e.anchors.forEach((function(e,r){e.anchorType=function(e){return(\"string\"==typeof e.range?c.decode(e.range):e.range).br?\"xdr:twoCellAnchor\":\"xdr:oneCellAnchor\"}(e),t.map[e.anchorType].prepare(e,{index:r})}))}},{key:\"render\",value:function(e,t){var r=this;e.openXml(f.StdDocAttributes),e.openNode(this.tag,y.DRAWING_ATTRIBUTES),t.anchors.forEach((function(t){r.map[t.anchorType].render(e,t)})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}},{key:\"reconcile\",value:function(e,t){var r=this;e.anchors.forEach((function(e){e.br?r.map[\"xdr:twoCellAnchor\"].reconcile(e,t):r.map[\"xdr:oneCellAnchor\"].reconcile(e,t)}))}},{key:\"tag\",get:function(){return\"xdr:wsDr\"}}])&&o(r.prototype,n),l&&o(r,l),y}(l);p.DRAWING_ATTRIBUTES={\"xmlns:xdr\":\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\",\"xmlns:a\":\"http://schemas.openxmlformats.org/drawingml/2006/main\"},t.exports=p},{\"../../../utils/col-cache\":17,\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"./one-cell-anchor-xform\":64,\"./two-cell-anchor-xform\":67}],60:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e){e.openNode(this.tag),e.openNode(\"a:ext\",{uri:\"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}\"}),e.leafNode(\"a16:creationId\",{\"xmlns:a16\":\"http://schemas.microsoft.com/office/drawing/2014/main\",id:\"{00000000-0008-0000-0000-000002000000}\"}),e.closeNode(),e.closeNode()}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:default:return!0}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){switch(e){case this.tag:return!1;default:return!0}}},{key:\"tag\",get:function(){return\"a:extLst\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],61:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).tag=e.tag,t.map={},t}return r=l,(n=[{key:\"render\",value:function(e,t){e.openNode(this.tag);var r=Math.floor(9525*t.width),n=Math.floor(9525*t.height);e.addAttribute(\"cx\",r),e.addAttribute(\"cy\",n),e.closeNode()}},{key:\"parseOpen\",value:function(e){return e.name===this.tag&&(this.model={width:parseInt(e.attributes.cx||\"0\",10)/9525,height:parseInt(e.attributes.cy||\"0\",10)/9525},!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&o(r.prototype,n),c&&o(r,c),l}(c);t.exports=f},{\"../base-xform\":29}],62:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){t.hyperlinks&&t.hyperlinks.rId&&e.leafNode(this.tag,{\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"r:id\":t.hyperlinks.rId,tooltip:t.hyperlinks.tooltip})}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={hyperlinks:{rId:e.attributes[\"r:id\"],tooltip:e.attributes.tooltip}},!0;default:return!0}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"a:hlinkClick\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],63:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./c-nv-pr-xform\"),l=e(\"./c-nv-pic-pr-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={\"xdr:cNvPr\":new f,\"xdr:cNvPicPr\":new l},e}return r=d,(n=[{key:\"render\",value:function(e,t){e.openNode(this.tag),this.map[\"xdr:cNvPr\"].render(e,t),this.map[\"xdr:cNvPicPr\"].render(e,t),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model=this.map[\"xdr:cNvPr\"].model,!1;default:return!0}}},{key:\"tag\",get:function(){return\"xdr:nvPicPr\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);t.exports=h},{\"../base-xform\":29,\"./c-nv-pic-pr-xform\":56,\"./c-nv-pr-xform\":57}],64:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./base-cell-anchor-xform\"),f=e(\"../static-xform\"),l=e(\"./cell-position-xform\"),h=e(\"./ext-xform\"),d=e(\"./pic-xform\"),p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(y,e);var t,r,n,c,p=(t=y,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=p.call(this)).map={\"xdr:from\":new l({tag:\"xdr:from\"}),\"xdr:ext\":new h({tag:\"xdr:ext\"}),\"xdr:pic\":new d,\"xdr:clientData\":new f({tag:\"xdr:clientData\"})},e}return r=y,(n=[{key:\"prepare\",value:function(e,t){this.map[\"xdr:pic\"].prepare(e.picture,t)}},{key:\"render\",value:function(e,t){e.openNode(this.tag,{editAs:t.range.editAs||\"oneCell\"}),this.map[\"xdr:from\"].render(e,t.range.tl),this.map[\"xdr:ext\"].render(e,t.range.ext),this.map[\"xdr:pic\"].render(e,t.picture),this.map[\"xdr:clientData\"].render(e,{}),e.closeNode()}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.range.tl=this.map[\"xdr:from\"].model,this.model.range.ext=this.map[\"xdr:ext\"].model,this.model.picture=this.map[\"xdr:pic\"].model,!1;default:return!0}}},{key:\"reconcile\",value:function(e,t){e.medium=this.reconcilePicture(e.picture,t)}},{key:\"tag\",get:function(){return\"xdr:oneCellAnchor\"}}])&&o(r.prototype,n),c&&o(r,c),y}(c);t.exports=p},{\"../static-xform\":117,\"./base-cell-anchor-xform\":53,\"./cell-position-xform\":58,\"./ext-xform\":61,\"./pic-xform\":65}],65:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"../static-xform\"),l=e(\"./blip-fill-xform\"),h=e(\"./nv-pic-pr-xform\"),d=e(\"./sp-pr\"),p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(y,e);var t,r,n,c,p=(t=y,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=p.call(this)).map={\"xdr:nvPicPr\":new h,\"xdr:blipFill\":new l,\"xdr:spPr\":new f(d)},e}return r=y,(n=[{key:\"prepare\",value:function(e,t){e.index=t.index+1}},{key:\"render\",value:function(e,t){e.openNode(this.tag),this.map[\"xdr:nvPicPr\"].render(e,t),this.map[\"xdr:blipFill\"].render(e,t),this.map[\"xdr:spPr\"].render(e,t),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:this.reset();break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:return!0}}},{key:\"tag\",get:function(){return\"xdr:pic\"}}])&&o(r.prototype,n),c&&o(r,c),y}(c);t.exports=p},{\"../base-xform\":29,\"../static-xform\":117,\"./blip-fill-xform\":54,\"./nv-pic-pr-xform\":63,\"./sp-pr\":66}],66:[function(e,t,r){t.exports={tag:\"xdr:spPr\",c:[{tag:\"a:xfrm\",c:[{tag:\"a:off\",$:{x:\"0\",y:\"0\"}},{tag:\"a:ext\",$:{cx:\"0\",cy:\"0\"}}]},{tag:\"a:prstGeom\",$:{prst:\"rect\"},c:[{tag:\"a:avLst\"}]}]}},{}],67:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./base-cell-anchor-xform\"),f=e(\"../static-xform\"),l=e(\"./cell-position-xform\"),h=e(\"./pic-xform\"),d=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(p,e);var t,r,n,c,d=(t=p,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function p(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,p),(e=d.call(this)).map={\"xdr:from\":new l({tag:\"xdr:from\"}),\"xdr:to\":new l({tag:\"xdr:to\"}),\"xdr:pic\":new h,\"xdr:clientData\":new f({tag:\"xdr:clientData\"})},e}return r=p,(n=[{key:\"prepare\",value:function(e,t){this.map[\"xdr:pic\"].prepare(e.picture,t)}},{key:\"render\",value:function(e,t){e.openNode(this.tag,{editAs:t.range.editAs||\"oneCell\"}),this.map[\"xdr:from\"].render(e,t.range.tl),this.map[\"xdr:to\"].render(e,t.range.br),this.map[\"xdr:pic\"].render(e,t.picture),this.map[\"xdr:clientData\"].render(e,{}),e.closeNode()}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.range.tl=this.map[\"xdr:from\"].model,this.model.range.br=this.map[\"xdr:to\"].model,this.model.picture=this.map[\"xdr:pic\"].model,!1;default:return!0}}},{key:\"reconcile\",value:function(e,t){e.medium=this.reconcilePicture(e.picture,t)}},{key:\"tag\",get:function(){return\"xdr:twoCellAnchor\"}}])&&o(r.prototype,n),c&&o(r,c),p}(c);t.exports=d},{\"../static-xform\":117,\"./base-cell-anchor-xform\":53,\"./cell-position-xform\":58,\"./pic-xform\":65}],68:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).tag=e.tag,t.always=!!e.always,t.count=e.count,t.empty=e.empty,t.$count=e.$count||\"count\",t.$=e.$,t.childXform=e.childXform,t.maxItems=e.maxItems,t}return r=l,(n=[{key:\"prepare\",value:function(e,t){var r=this.childXform;e&&e.forEach((function(e,n){t.index=n,r.prepare(e,t)}))}},{key:\"render\",value:function(e,t){if(this.always||t&&t.length){e.openNode(this.tag,this.$),this.count&&e.addAttribute(this.$count,t&&t.length||0);var r=this.childXform;(t||[]).forEach((function(t,n){r.render(e,t,n)})),e.closeNode()}else this.empty&&e.leafNode(this.tag)}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.model=[],!0;default:return!!this.childXform.parseOpen(e)&&(this.parser=this.childXform,!0)}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser){if(!this.parser.parseClose(e)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(\"Max \".concat(this.childXform.tag,\" count exceeded\"));return!0}return!1}},{key:\"reconcile\",value:function(e,t){if(e){var r=this.childXform;e.forEach((function(e){r.reconcile(e,t)}))}}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"./base-xform\"));t.exports=c},{\"./base-xform\":29}],69:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/col-cache\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){if(t)if(\"string\"==typeof t)e.leafNode(\"autoFilter\",{ref:t});else{var r=function(e){return\"string\"==typeof e?e:f.getAddress(e.row,e.column).address},n=r(t.from),o=r(t.to);n&&o&&e.leafNode(\"autoFilter\",{ref:\"\".concat(n,\":\").concat(o)})}}},{key:\"parseOpen\",value:function(e){\"autoFilter\"===e.name&&(this.model=e.attributes.ref)}},{key:\"tag\",get:function(){return\"autoFilter\"}}])&&i(r.prototype,n),l&&i(r,l),d}(e(\"../base-xform\"));t.exports=l},{\"../../../utils/col-cache\":17,\"../base-xform\":29}],70:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function u(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var l=e(\"../../../utils/utils\"),h=e(\"../base-xform\"),d=e(\"../../../doc/range\"),p=e(\"../../../doc/enums\"),y=e(\"../strings/rich-text-xform\");function m(e){if(null==e)return p.ValueType.Null;if(e instanceof String||\"string\"==typeof e)return p.ValueType.String;if(\"number\"==typeof e)return p.ValueType.Number;if(\"boolean\"==typeof e)return p.ValueType.Boolean;if(e instanceof Date)return p.ValueType.Date;if(e.text&&e.hyperlink)return p.ValueType.Hyperlink;if(e.formula)return p.ValueType.Formula;if(e.error)return p.ValueType.Error;throw new Error(\"I could not understand type of value\")}var b=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(v,e);var t,r,n,h,b=(t=v,function(){var e,r=c(t);if(u()){var n=c(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return s(this,e)});function v(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,v),(e=b.call(this)).richTextXForm=new y,e}return r=v,(n=[{key:\"prepare\",value:function(e,t){var r=t.styles.addStyleModel(e.style||{},function(e){switch(e.type){case p.ValueType.Formula:return m(e.result);default:return e.type}}(e));switch(r&&(e.styleId=r),e.comment&&t.comments.push(function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},e.comment,{ref:e.address})),e.type){case p.ValueType.String:case p.ValueType.RichText:t.sharedStrings&&(e.ssId=t.sharedStrings.add(e.value));break;case p.ValueType.Date:t.date1904&&(e.date1904=!0);break;case p.ValueType.Hyperlink:t.sharedStrings&&void 0!==e.text&&null!==e.text&&(e.ssId=t.sharedStrings.add(e.text)),t.hyperlinks.push({address:e.address,target:e.hyperlink,tooltip:e.tooltip});break;case p.ValueType.Merge:t.merges.add(e);break;case p.ValueType.Formula:if(t.date1904&&(e.date1904=!0),\"shared\"===e.shareType&&(e.si=t.siFormulae++),e.formula)t.formulae[e.address]=e;else if(e.sharedFormula){var n=t.formulae[e.sharedFormula];if(!n)throw new Error(\"Shared Formula master must exist above and or left of clone for cell \".concat(e.address));void 0===n.si?(n.shareType=\"shared\",n.si=t.siFormulae++,n.range=new d(n.address,e.address)):n.range&&n.range.expandToAddress(e.address),e.si=n.si}}}},{key:\"renderFormula\",value:function(e,t){var r=null;switch(t.shareType){case\"shared\":r={t:\"shared\",ref:t.ref||t.range.range,si:t.si};break;case\"array\":r={t:\"array\",ref:t.ref};break;default:void 0!==t.si&&(r={t:\"shared\",si:t.si})}switch(m(t.result)){case p.ValueType.Null:e.leafNode(\"f\",r,t.formula);break;case p.ValueType.String:e.addAttribute(\"t\",\"str\"),e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result);break;case p.ValueType.Number:e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result);break;case p.ValueType.Boolean:e.addAttribute(\"t\",\"b\"),e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result?1:0);break;case p.ValueType.Error:e.addAttribute(\"t\",\"e\"),e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,t.result.error);break;case p.ValueType.Date:e.leafNode(\"f\",r,t.formula),e.leafNode(\"v\",null,l.dateToExcel(t.result,t.date1904));break;default:throw new Error(\"I could not understand type of value\")}}},{key:\"render\",value:function(e,t){var r=this;if(t.type!==p.ValueType.Null||t.styleId){switch(e.openNode(\"c\"),e.addAttribute(\"r\",t.address),t.styleId&&e.addAttribute(\"s\",t.styleId),t.type){case p.ValueType.Null:break;case p.ValueType.Number:e.leafNode(\"v\",null,t.value);break;case p.ValueType.Boolean:e.addAttribute(\"t\",\"b\"),e.leafNode(\"v\",null,t.value?\"1\":\"0\");break;case p.ValueType.Error:e.addAttribute(\"t\",\"e\"),e.leafNode(\"v\",null,t.value.error);break;case p.ValueType.String:case p.ValueType.RichText:void 0!==t.ssId?(e.addAttribute(\"t\",\"s\"),e.leafNode(\"v\",null,t.ssId)):t.value&&t.value.richText?(e.addAttribute(\"t\",\"inlineStr\"),e.openNode(\"is\"),t.value.richText.forEach((function(t){r.richTextXForm.render(e,t)})),e.closeNode(\"is\")):(e.addAttribute(\"t\",\"str\"),e.leafNode(\"v\",null,t.value));break;case p.ValueType.Date:e.leafNode(\"v\",null,l.dateToExcel(t.value,t.date1904));break;case p.ValueType.Hyperlink:void 0!==t.ssId?(e.addAttribute(\"t\",\"s\"),e.leafNode(\"v\",null,t.ssId)):(e.addAttribute(\"t\",\"str\"),e.leafNode(\"v\",null,t.text));break;case p.ValueType.Formula:this.renderFormula(e,t);break;case p.ValueType.Merge:}e.closeNode()}}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"c\":return this.model={address:e.attributes.r},this.t=e.attributes.t,e.attributes.s&&(this.model.styleId=parseInt(e.attributes.s,10)),!0;case\"f\":return this.currentNode=\"f\",this.model.si=e.attributes.si,this.model.shareType=e.attributes.t,this.model.ref=e.attributes.ref,!0;case\"v\":return this.currentNode=\"v\",!0;case\"t\":return this.currentNode=\"t\",!0;case\"r\":return this.parser=this.richTextXForm,this.parser.parseOpen(e),!0;default:return!1}}},{key:\"parseText\",value:function(e){if(this.parser)this.parser.parseText(e);else switch(this.currentNode){case\"f\":this.model.formula=this.model.formula?this.model.formula+e:e;break;case\"v\":case\"t\":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+e:e:this.model.value=this.model.value?this.model.value+e:e}}},{key:\"parseClose\",value:function(e){switch(e){case\"c\":var t=this.model;if(t.formula||t.shareType)t.type=p.ValueType.Formula,t.value&&(\"str\"===this.t?t.result=l.xmlDecode(t.value):\"b\"===this.t?t.result=0!==parseInt(t.value,10):\"e\"===this.t?t.result={error:t.value}:t.result=parseFloat(t.value),t.value=void 0);else if(void 0!==t.value)switch(this.t){case\"s\":t.type=p.ValueType.String,t.value=parseInt(t.value,10);break;case\"str\":t.type=p.ValueType.String,t.value=l.xmlDecode(t.value);break;case\"inlineStr\":t.type=p.ValueType.String;break;case\"b\":t.type=p.ValueType.Boolean,t.value=0!==parseInt(t.value,10);break;case\"e\":t.type=p.ValueType.Error,t.value={error:t.value};break;default:t.type=p.ValueType.Number,t.value=parseFloat(t.value)}else t.styleId?t.type=p.ValueType.Null:t.type=p.ValueType.Merge;return!1;case\"f\":case\"v\":case\"is\":return this.currentNode=void 0,!0;case\"t\":return this.parser?(this.parser.parseClose(e),!0):(this.currentNode=void 0,!0);case\"r\":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return!!this.parser&&(this.parser.parseClose(e),!0)}}},{key:\"reconcile\",value:function(e,t){var r=e.styleId&&t.styles&&t.styles.getStyleModel(e.styleId);switch(r&&(e.style=r),void 0!==e.styleId&&(e.styleId=void 0),e.type){case p.ValueType.String:\"number\"==typeof e.value&&t.sharedStrings&&(e.value=t.sharedStrings.getString(e.value)),e.value.richText&&(e.type=p.ValueType.RichText);break;case p.ValueType.Number:r&&l.isDateFmt(r.numFmt)&&(e.type=p.ValueType.Date,e.value=l.excelToDate(e.value,t.date1904));break;case p.ValueType.Formula:void 0!==e.result&&r&&l.isDateFmt(r.numFmt)&&(e.result=l.excelToDate(e.result,t.date1904)),\"shared\"===e.shareType&&(e.ref?t.formulae[e.si]=e.address:(e.sharedFormula=t.formulae[e.si],delete e.shareType),delete e.si)}var n=t.hyperlinkMap[e.address];n&&(e.type===p.ValueType.Formula?(e.text=e.result,e.result=void 0):(e.text=e.value,e.value=void 0),e.type=p.ValueType.Hyperlink,e.hyperlink=n);var o=t.commentsMap&&t.commentsMap[e.address];o&&(e.comment=o)}},{key:\"tag\",get:function(){return\"c\"}}])&&a(r.prototype,n),h&&a(r,h),v}(h);t.exports=b},{\"../../../doc/enums\":7,\"../../../doc/range\":10,\"../../../utils/utils\":24,\"../base-xform\":29,\"../strings/rich-text-xform\":119}],71:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../base-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){e.leafNode(this.tag,{iconSet:t.iconSet,iconId:t.iconId})}},{key:\"parseOpen\",value:function(e){var t=e.attributes;this.model={iconSet:t.iconSet,iconId:f.toIntValue(t.iconId)}}},{key:\"parseClose\",value:function(e){return e!==this.tag}},{key:\"tag\",get:function(){return\"x14:cfIcon\"}}])&&i(r.prototype,n),l&&i(r,l),d}(f);t.exports=l},{\"../../base-xform\":29}],72:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"uuid\").v4,f=e(\"../../base-xform\"),l=e(\"../../composite-xform\"),h=e(\"./databar-ext-xform\"),d=e(\"./icon-set-ext-xform\"),p={\"3Triangles\":!0,\"3Stars\":!0,\"5Boxes\":!0},y=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(m,e);var t,r,n,l,y=(t=m,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function m(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,m),(e=y.call(this)).map={\"x14:dataBar\":e.databarXform=new h,\"x14:iconSet\":e.iconSetXform=new d},e}return r=m,l=[{key:\"isExt\",value:function(e){return\"dataBar\"===e.type?h.isExt(e):!(\"iconSet\"!==e.type||!e.custom&&!p[e.iconSet])}}],(n=[{key:\"prepare\",value:function(e){m.isExt(e)&&(e.x14Id=\"{\".concat(c(),\"}\").toUpperCase())}},{key:\"render\",value:function(e,t){if(m.isExt(t))switch(t.type){case\"dataBar\":this.renderDataBar(e,t);break;case\"iconSet\":this.renderIconSet(e,t)}}},{key:\"renderDataBar\",value:function(e,t){e.openNode(this.tag,{type:\"dataBar\",id:t.x14Id}),this.databarXform.render(e,t),e.closeNode()}},{key:\"renderIconSet\",value:function(e,t){e.openNode(this.tag,{type:\"iconSet\",priority:t.priority,id:t.x14Id||\"{\".concat(c(),\"}\")}),this.iconSetXform.render(e,t),e.closeNode()}},{key:\"createNewModel\",value:function(e){var t=e.attributes;return{type:t.type,x14Id:t.id,priority:f.toIntValue(t.priority)}}},{key:\"onParserClose\",value:function(e,t){Object.assign(this.model,t.model)}},{key:\"tag\",get:function(){return\"x14:cfRule\"}}])&&o(r.prototype,n),l&&o(r,l),m}(l);t.exports=y},{\"../../base-xform\":29,\"../../composite-xform\":45,\"./databar-ext-xform\":76,\"./icon-set-ext-xform\":78,uuid:476}],73:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../composite-xform\"),f=e(\"./f-ext-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,c,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h),(e=l.call(this)).map={\"xm:f\":e.fExtXform=new f},e}return r=h,(n=[{key:\"render\",value:function(e,t){e.openNode(this.tag,{type:t.type}),void 0!==t.value&&this.fExtXform.render(e,t.value),e.closeNode()}},{key:\"createNewModel\",value:function(e){return{type:e.attributes.type}}},{key:\"onParserClose\",value:function(e,t){switch(e){case\"xm:f\":this.model.value=t.model?parseFloat(t.model):0}}},{key:\"tag\",get:function(){return\"x14:cfvo\"}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../../composite-xform\":45,\"./f-ext-xform\":77}],74:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../composite-xform\"),f=e(\"./sqref-ext-xform\"),l=e(\"./cf-rule-ext-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={\"xm:sqref\":e.sqRef=new f,\"x14:cfRule\":e.cfRule=new l},e}return r=d,(n=[{key:\"prepare\",value:function(e,t){var r=this;e.rules.forEach((function(e){r.cfRule.prepare(e,t)}))}},{key:\"render\",value:function(e,t){var r=this;t.rules.some(l.isExt)&&(e.openNode(this.tag,{\"xmlns:xm\":\"http://schemas.microsoft.com/office/excel/2006/main\"}),t.rules.filter(l.isExt).forEach((function(t){return r.cfRule.render(e,t)})),this.sqRef.render(e,t.ref),e.closeNode())}},{key:\"createNewModel\",value:function(){return{rules:[]}}},{key:\"onParserClose\",value:function(e,t){switch(e){case\"xm:sqref\":this.model.ref=t.model;break;case\"x14:cfRule\":this.model.rules.push(t.model)}}},{key:\"tag\",get:function(){return\"x14:conditionalFormatting\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);t.exports=h},{\"../../composite-xform\":45,\"./cf-rule-ext-xform\":72,\"./sqref-ext-xform\":79}],75:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../composite-xform\"),f=e(\"./cf-rule-ext-xform\"),l=e(\"./conditional-formatting-ext-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={\"x14:conditionalFormatting\":e.cfXform=new l},e}return r=d,(n=[{key:\"hasContent\",value:function(e){return void 0===e.hasExtContent&&(e.hasExtContent=e.some((function(e){return e.rules.some(f.isExt)}))),e.hasExtContent}},{key:\"prepare\",value:function(e,t){var r=this;e.forEach((function(e){r.cfXform.prepare(e,t)}))}},{key:\"render\",value:function(e,t){var r=this;this.hasContent(t)&&(e.openNode(this.tag),t.forEach((function(t){return r.cfXform.render(e,t)})),e.closeNode())}},{key:\"createNewModel\",value:function(){return[]}},{key:\"onParserClose\",value:function(e,t){this.model.push(t.model)}},{key:\"tag\",get:function(){return\"x14:conditionalFormattings\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);t.exports=h},{\"../../composite-xform\":45,\"./cf-rule-ext-xform\":72,\"./conditional-formatting-ext-xform\":74}],76:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(\"undefined\"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var r=[],n=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,t)||function(e,t){if(!e)return;if(\"string\"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===r&&e.constructor&&(r=e.constructor.name);if(\"Map\"===r||\"Set\"===r)return Array.from(r);if(\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function u(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var l=e(\"../../base-xform\"),h=e(\"../../composite-xform\"),d=e(\"../../style/color-xform\"),p=e(\"./cfvo-ext-xform\"),y=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(y,e);var t,r,n,i,h=(t=y,function(){var e,r=c(t);if(u()){var n=c(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return s(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=h.call(this)).map={\"x14:cfvo\":e.cfvoXform=new p,\"x14:borderColor\":e.borderColorXform=new d(\"x14:borderColor\"),\"x14:negativeBorderColor\":e.negativeBorderColorXform=new d(\"x14:negativeBorderColor\"),\"x14:negativeFillColor\":e.negativeFillColorXform=new d(\"x14:negativeFillColor\"),\"x14:axisColor\":e.axisColorXform=new d(\"x14:axisColor\")},e}return r=y,i=[{key:\"isExt\",value:function(e){return!e.gradient}}],(n=[{key:\"render\",value:function(e,t){var r=this;e.openNode(this.tag,{minLength:l.toIntAttribute(t.minLength,0,!0),maxLength:l.toIntAttribute(t.maxLength,100,!0),border:l.toBoolAttribute(t.border,!1),gradient:l.toBoolAttribute(t.gradient,!0),negativeBarColorSameAsPositive:l.toBoolAttribute(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:l.toBoolAttribute(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:l.toAttribute(t.axisPosition,\"auto\"),direction:l.toAttribute(t.direction,\"leftToRight\")}),t.cfvo.forEach((function(t){r.cfvoXform.render(e,t)})),this.borderColorXform.render(e,t.borderColor),this.negativeBorderColorXform.render(e,t.negativeBorderColor),this.negativeFillColorXform.render(e,t.negativeFillColor),this.axisColorXform.render(e,t.axisColor),e.closeNode()}},{key:\"createNewModel\",value:function(e){var t=e.attributes;return{cfvo:[],minLength:l.toIntValue(t.minLength,0),maxLength:l.toIntValue(t.maxLength,100),border:l.toBoolValue(t.border,!1),gradient:l.toBoolValue(t.gradient,!0),negativeBarColorSameAsPositive:l.toBoolValue(t.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:l.toBoolValue(t.negativeBarBorderColorSameAsPositive,!0),axisPosition:l.toStringValue(t.axisPosition,\"auto\"),direction:l.toStringValue(t.direction,\"leftToRight\")}}},{key:\"onParserClose\",value:function(e,t){var r=o(e.split(\":\"),2)[1];switch(r){case\"cfvo\":this.model.cfvo.push(t.model);break;default:this.model[r]=t.model}}},{key:\"tag\",get:function(){return\"x14:dataBar\"}}])&&a(r.prototype,n),i&&a(r,i),y}(h);t.exports=y},{\"../../base-xform\":29,\"../../composite-xform\":45,\"../../style/color-xform\":125,\"./cfvo-ext-xform\":73}],77:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(this.tag,null,t)}},{key:\"parseOpen\",value:function(){this.model=\"\"}},{key:\"parseText\",value:function(e){this.model+=e}},{key:\"parseClose\",value:function(e){return e!==this.tag}},{key:\"tag\",get:function(){return\"xm:f\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../../base-xform\"));t.exports=f},{\"../../base-xform\":29}],78:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(\"undefined\"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var r=[],n=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{n||null==s.return||s.return()}finally{if(o)throw i}}return r}(e,t)||function(e,t){if(!e)return;if(\"string\"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===r&&e.constructor&&(r=e.constructor.name);if(\"Map\"===r||\"Set\"===r)return Array.from(r);if(\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function u(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var l=e(\"../../base-xform\"),h=e(\"../../composite-xform\"),d=e(\"./cfvo-ext-xform\"),p=e(\"./cf-icon-ext-xform\"),y=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(y,e);var t,r,n,i,h=(t=y,function(){var e,r=c(t);if(u()){var n=c(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return s(this,e)});function y(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,y),(e=h.call(this)).map={\"x14:cfvo\":e.cfvoXform=new d,\"x14:cfIcon\":e.cfIconXform=new p},e}return r=y,(n=[{key:\"render\",value:function(e,t){var r=this;e.openNode(this.tag,{iconSet:l.toStringAttribute(t.iconSet),reverse:l.toBoolAttribute(t.reverse,!1),showValue:l.toBoolAttribute(t.showValue,!0),custom:l.toBoolAttribute(t.icons,!1)}),t.cfvo.forEach((function(t){r.cfvoXform.render(e,t)})),t.icons&&t.icons.forEach((function(t,n){t.iconId=n,r.cfIconXform.render(e,t)})),e.closeNode()}},{key:\"createNewModel\",value:function(e){var t=e.attributes;return{cfvo:[],iconSet:l.toStringValue(t.iconSet,\"3TrafficLights\"),reverse:l.toBoolValue(t.reverse,!1),showValue:l.toBoolValue(t.showValue,!0)}}},{key:\"onParserClose\",value:function(e,t){var r=o(e.split(\":\"),2)[1];switch(r){case\"cfvo\":this.model.cfvo.push(t.model);break;case\"cfIcon\":this.model.icons||(this.model.icons=[]),this.model.icons.push(t.model);break;default:this.model[r]=t.model}}},{key:\"tag\",get:function(){return\"x14:iconSet\"}}])&&a(r.prototype,n),i&&a(r,i),y}(h);t.exports=y},{\"../../base-xform\":29,\"../../composite-xform\":45,\"./cf-icon-ext-xform\":71,\"./cfvo-ext-xform\":73}],79:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(this.tag,null,t)}},{key:\"parseOpen\",value:function(){this.model=\"\"}},{key:\"parseText\",value:function(e){this.model+=e}},{key:\"parseClose\",value:function(e){return e!==this.tag}},{key:\"tag\",get:function(){return\"xm:sqref\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../../base-xform\"));t.exports=f},{\"../../base-xform\":29}],80:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function u(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var l=e(\"../../base-xform\"),h=e(\"../../composite-xform\"),d=e(\"../../../../doc/range\"),p=e(\"./databar-xform\"),y=e(\"./ext-lst-ref-xform\"),m=e(\"./formula-xform\"),b=e(\"./color-scale-xform\"),v=e(\"./icon-set-xform\"),g={\"3Triangles\":!0,\"3Stars\":!0,\"5Boxes\":!0},w=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(_,e);var t,r,n,h,w=(t=_,function(){var e,r=c(t);if(u()){var n=c(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return s(this,e)});function _(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,_),(e=w.call(this)).map={dataBar:e.databarXform=new p,extLst:e.extLstRefXform=new y,formula:e.formulaXform=new m,colorScale:e.colorScaleXform=new b,iconSet:e.iconSetXform=new v},e}return r=_,h=[{key:\"isPrimitive\",value:function(e){return\"iconSet\"!==e.type||!e.custom&&!g[e.iconSet]}}],(n=[{key:\"render\",value:function(e,t){switch(t.type){case\"expression\":this.renderExpression(e,t);break;case\"cellIs\":this.renderCellIs(e,t);break;case\"top10\":this.renderTop10(e,t);break;case\"aboveAverage\":this.renderAboveAverage(e,t);break;case\"dataBar\":this.renderDataBar(e,t);break;case\"colorScale\":this.renderColorScale(e,t);break;case\"iconSet\":this.renderIconSet(e,t);break;case\"containsText\":this.renderText(e,t);break;case\"timePeriod\":this.renderTimePeriod(e,t)}}},{key:\"renderExpression\",value:function(e,t){e.openNode(this.tag,{type:\"expression\",dxfId:t.dxfId,priority:t.priority}),this.formulaXform.render(e,t.formulae[0]),e.closeNode()}},{key:\"renderCellIs\",value:function(e,t){var r=this;e.openNode(this.tag,{type:\"cellIs\",dxfId:t.dxfId,priority:t.priority,operator:t.operator}),t.formulae.forEach((function(t){r.formulaXform.render(e,t)})),e.closeNode()}},{key:\"renderTop10\",value:function(e,t){e.leafNode(this.tag,{type:\"top10\",dxfId:t.dxfId,priority:t.priority,percent:l.toBoolAttribute(t.percent,!1),bottom:l.toBoolAttribute(t.bottom,!1),rank:l.toIntValue(t.rank,10,!0)})}},{key:\"renderAboveAverage\",value:function(e,t){e.leafNode(this.tag,{type:\"aboveAverage\",dxfId:t.dxfId,priority:t.priority,aboveAverage:l.toBoolAttribute(t.aboveAverage,!0)})}},{key:\"renderDataBar\",value:function(e,t){e.openNode(this.tag,{type:\"dataBar\",priority:t.priority}),this.databarXform.render(e,t),this.extLstRefXform.render(e,t),e.closeNode()}},{key:\"renderColorScale\",value:function(e,t){e.openNode(this.tag,{type:\"colorScale\",priority:t.priority}),this.colorScaleXform.render(e,t),e.closeNode()}},{key:\"renderIconSet\",value:function(e,t){_.isPrimitive(t)&&(e.openNode(this.tag,{type:\"iconSet\",priority:t.priority}),this.iconSetXform.render(e,t),e.closeNode())}},{key:\"renderText\",value:function(e,t){e.openNode(this.tag,{type:t.operator,dxfId:t.dxfId,priority:t.priority,operator:l.toStringAttribute(t.operator,\"containsText\")});var r=function(e){if(e.formulae&&e.formulae[0])return e.formulae[0];var t=new d(e.ref).tl;switch(e.operator){case\"containsText\":return'NOT(ISERROR(SEARCH(\"'.concat(e.text,'\",').concat(t,\")))\");case\"containsBlanks\":return\"LEN(TRIM(\".concat(t,\"))=0\");case\"notContainsBlanks\":return\"LEN(TRIM(\".concat(t,\"))>0\");case\"containsErrors\":return\"ISERROR(\".concat(t,\")\");case\"notContainsErrors\":return\"NOT(ISERROR(\".concat(t,\"))\");default:return}}(t);r&&this.formulaXform.render(e,r),e.closeNode()}},{key:\"renderTimePeriod\",value:function(e,t){e.openNode(this.tag,{type:\"timePeriod\",dxfId:t.dxfId,priority:t.priority,timePeriod:t.timePeriod});var r=function(e){if(e.formulae&&e.formulae[0])return e.formulae[0];var t=new d(e.ref).tl;switch(e.timePeriod){case\"thisWeek\":return\"AND(TODAY()-ROUNDDOWN(\".concat(t,\",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(\").concat(t,\",0)-TODAY()<=7-WEEKDAY(TODAY()))\");case\"lastWeek\":return\"AND(TODAY()-ROUNDDOWN(\".concat(t,\",0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(\").concat(t,\",0)<(WEEKDAY(TODAY())+7))\");case\"nextWeek\":return\"AND(ROUNDDOWN(\".concat(t,\",0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(\").concat(t,\",0)-TODAY()<(15-WEEKDAY(TODAY())))\");case\"yesterday\":return\"FLOOR(\".concat(t,\",1)=TODAY()-1\");case\"today\":return\"FLOOR(\".concat(t,\",1)=TODAY()\");case\"tomorrow\":return\"FLOOR(\".concat(t,\",1)=TODAY()+1\");case\"last7Days\":return\"AND(TODAY()-FLOOR(\".concat(t,\",1)<=6,FLOOR(\").concat(t,\",1)<=TODAY())\");case\"lastMonth\":return\"AND(MONTH(\".concat(t,\")=MONTH(EDATE(TODAY(),0-1)),YEAR(\").concat(t,\")=YEAR(EDATE(TODAY(),0-1)))\");case\"thisMonth\":return\"AND(MONTH(\".concat(t,\")=MONTH(TODAY()),YEAR(\").concat(t,\")=YEAR(TODAY()))\");case\"nextMonth\":return\"AND(MONTH(\".concat(t,\")=MONTH(EDATE(TODAY(),0+1)),YEAR(\").concat(t,\")=YEAR(EDATE(TODAY(),0+1)))\");default:return}}(t);r&&this.formulaXform.render(e,r),e.closeNode()}},{key:\"createNewModel\",value:function(e){var t=e.attributes;return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},function(e){var t=e.type,r=e.operator;switch(t){case\"containsText\":case\"containsBlanks\":case\"notContainsBlanks\":case\"containsErrors\":case\"notContainsErrors\":return{type:\"containsText\",operator:t};default:return{type:t,operator:r}}}(t),{dxfId:l.toIntValue(t.dxfId),priority:l.toIntValue(t.priority),timePeriod:t.timePeriod,percent:l.toBoolValue(t.percent),bottom:l.toBoolValue(t.bottom),rank:l.toIntValue(t.rank),aboveAverage:l.toBoolValue(t.aboveAverage)})}},{key:\"onParserClose\",value:function(e,t){switch(e){case\"dataBar\":case\"extLst\":case\"colorScale\":case\"iconSet\":Object.assign(this.model,t.model);break;case\"formula\":this.model.formulae=this.model.formulae||[],this.model.formulae.push(t.model)}}},{key:\"tag\",get:function(){return\"cfRule\"}}])&&a(r.prototype,n),h&&a(r,h),_}(h);t.exports=w},{\"../../../../doc/range\":10,\"../../base-xform\":29,\"../../composite-xform\":45,\"./color-scale-xform\":82,\"./databar-xform\":85,\"./ext-lst-ref-xform\":86,\"./formula-xform\":87,\"./icon-set-xform\":88}],81:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../base-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){e.leafNode(this.tag,{type:t.type,val:t.value})}},{key:\"parseOpen\",value:function(e){this.model={type:e.attributes.type,value:f.toFloatValue(e.attributes.val)}}},{key:\"parseClose\",value:function(e){return e!==this.tag}},{key:\"tag\",get:function(){return\"cfvo\"}}])&&i(r.prototype,n),l&&i(r,l),d}(f);t.exports=l},{\"../../base-xform\":29}],82:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../composite-xform\"),f=e(\"../../style/color-xform\"),l=e(\"./cfvo-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={cfvo:e.cfvoXform=new l,color:e.colorXform=new f},e}return r=d,(n=[{key:\"render\",value:function(e,t){var r=this;e.openNode(this.tag),t.cfvo.forEach((function(t){r.cfvoXform.render(e,t)})),t.color.forEach((function(t){r.colorXform.render(e,t)})),e.closeNode()}},{key:\"createNewModel\",value:function(e){return{cfvo:[],color:[]}}},{key:\"onParserClose\",value:function(e,t){this.model[e].push(t.model)}},{key:\"tag\",get:function(){return\"colorScale\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);t.exports=h},{\"../../composite-xform\":45,\"../../style/color-xform\":125,\"./cfvo-xform\":81}],83:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../composite-xform\"),f=e(\"./cf-rule-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,c,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h),(e=l.call(this)).map={cfRule:new f},e}return r=h,(n=[{key:\"render\",value:function(e,t){var r=this;t.rules.some(f.isPrimitive)&&(e.openNode(this.tag,{sqref:t.ref}),t.rules.forEach((function(n){f.isPrimitive(n)&&(n.ref=t.ref,r.map.cfRule.render(e,n))})),e.closeNode())}},{key:\"createNewModel\",value:function(e){return{ref:e.attributes.sqref,rules:[]}}},{key:\"onParserClose\",value:function(e,t){this.model.rules.push(t.model)}},{key:\"tag\",get:function(){return\"conditionalFormatting\"}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../../composite-xform\":45,\"./cf-rule-xform\":80}],84:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===r&&e.constructor&&(r=e.constructor.name);if(\"Map\"===r||\"Set\"===r)return Array.from(r);if(\"Arguments\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function u(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var l=e(\"../../base-xform\"),h=e(\"./conditional-formatting-xform\"),d=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(d,e);var t,r,n,i,l=(t=d,function(){var e,r=c(t);if(u()){var n=c(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return s(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=l.call(this)).cfXform=new h,e}return r=d,(n=[{key:\"reset\",value:function(){this.model=[]}},{key:\"prepare\",value:function(e,t){var r=e.reduce((function(e,t){return Math.max.apply(Math,[e].concat(o(t.rules.map((function(e){return e.priority||0})))))}),1);e.forEach((function(e){e.rules.forEach((function(e){e.priority||(e.priority=r++),e.style&&(e.dxfId=t.styles.addDxfStyle(e.style))}))}))}},{key:\"render\",value:function(e,t){var r=this;t.forEach((function(t){r.cfXform.render(e,t)}))}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"conditionalFormatting\":return this.parser=this.cfXform,this.parser.parseOpen(e),!0;default:return!1}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){return!(!this.parser||!this.parser.parseClose(e)&&(this.model.push(this.parser.model),this.parser=void 0,1))}},{key:\"reconcile\",value:function(e,t){e.forEach((function(e){e.rules.forEach((function(e){void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId),delete e.dxfId)}))}))}},{key:\"tag\",get:function(){return\"conditionalFormatting\"}}])&&a(r.prototype,n),i&&a(r,i),d}(l);t.exports=d},{\"../../base-xform\":29,\"./conditional-formatting-xform\":83}],85:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../composite-xform\"),f=e(\"../../style/color-xform\"),l=e(\"./cfvo-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={cfvo:e.cfvoXform=new l,color:e.colorXform=new f},e}return r=d,(n=[{key:\"render\",value:function(e,t){var r=this;e.openNode(this.tag),t.cfvo.forEach((function(t){r.cfvoXform.render(e,t)})),this.colorXform.render(e,t.color),e.closeNode()}},{key:\"createNewModel\",value:function(){return{cfvo:[]}}},{key:\"onParserClose\",value:function(e,t){switch(e){case\"cfvo\":this.model.cfvo.push(t.model);break;case\"color\":this.model.color=t.model}}},{key:\"tag\",get:function(){return\"dataBar\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);t.exports=h},{\"../../composite-xform\":45,\"../../style/color-xform\":125,\"./cfvo-xform\":81}],86:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e}function s(e){return function(){var t,r=f(e);if(c()){var n=f(this).constructor;t=Reflect.construct(r,arguments,n)}else t=r.apply(this,arguments);return u(this,t)}}function u(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function c(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var d=e(\"../../base-xform\"),p=e(\"../../composite-xform\"),y=function(e){l(r,e);var t=s(r);function r(){return o(this,r),t.apply(this,arguments)}return a(r,[{key:\"render\",value:function(e,t){e.leafNode(this.tag,null,t)}},{key:\"parseOpen\",value:function(){this.model=\"\"}},{key:\"parseText\",value:function(e){this.model+=e}},{key:\"parseClose\",value:function(e){return e!==this.tag}},{key:\"tag\",get:function(){return\"x14:id\"}}]),r}(d),m=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={\"x14:id\":e.idXform=new y},e}return a(r,[{key:\"render\",value:function(e,t){e.openNode(this.tag,{uri:\"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}\",\"xmlns:x14\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"}),this.idXform.render(e,t.x14Id),e.closeNode()}},{key:\"createNewModel\",value:function(){return{}}},{key:\"onParserClose\",value:function(e,t){this.model.x14Id=t.model}},{key:\"tag\",get:function(){return\"ext\"}}]),r}(p),b=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={ext:new m},e}return a(r,[{key:\"render\",value:function(e,t){e.openNode(this.tag),this.map.ext.render(e,t),e.closeNode()}},{key:\"createNewModel\",value:function(){return{}}},{key:\"onParserClose\",value:function(e,t){Object.assign(this.model,t.model)}},{key:\"tag\",get:function(){return\"extLst\"}}]),r}(p);t.exports=b},{\"../../base-xform\":29,\"../../composite-xform\":45}],87:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(this.tag,null,t)}},{key:\"parseOpen\",value:function(){this.model=\"\"}},{key:\"parseText\",value:function(e){this.model+=e}},{key:\"parseClose\",value:function(e){return e!==this.tag}},{key:\"tag\",get:function(){return\"formula\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../../base-xform\"));t.exports=f},{\"../../base-xform\":29}],88:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../base-xform\"),f=e(\"../../composite-xform\"),l=e(\"./cfvo-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,f,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={cfvo:e.cfvoXform=new l},e}return r=d,(n=[{key:\"render\",value:function(e,t){var r=this;e.openNode(this.tag,{iconSet:c.toStringAttribute(t.iconSet,\"3TrafficLights\"),reverse:c.toBoolAttribute(t.reverse,!1),showValue:c.toBoolAttribute(t.showValue,!0)}),t.cfvo.forEach((function(t){r.cfvoXform.render(e,t)})),e.closeNode()}},{key:\"createNewModel\",value:function(e){var t=e.attributes;return{iconSet:c.toStringValue(t.iconSet,\"3TrafficLights\"),reverse:c.toBoolValue(t.reverse),showValue:c.toBoolValue(t.showValue),cfvo:[]}}},{key:\"onParserClose\",value:function(e,t){this.model[e].push(t.model)}},{key:\"tag\",get:function(){return\"iconSet\"}}])&&o(r.prototype,n),f&&o(r,f),d}(f);t.exports=h},{\"../../base-xform\":29,\"../../composite-xform\":45,\"./cfvo-xform\":81}],89:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"prepare\",value:function(e,t){var r=t.styles.addStyleModel(e.style||{});r&&(e.styleId=r)}},{key:\"render\",value:function(e,t){e.openNode(\"col\"),e.addAttribute(\"min\",t.min),e.addAttribute(\"max\",t.max),t.width&&e.addAttribute(\"width\",t.width),t.styleId&&e.addAttribute(\"style\",t.styleId),t.hidden&&e.addAttribute(\"hidden\",\"1\"),t.bestFit&&e.addAttribute(\"bestFit\",\"1\"),t.outlineLevel&&e.addAttribute(\"outlineLevel\",t.outlineLevel),t.collapsed&&e.addAttribute(\"collapsed\",\"1\"),e.addAttribute(\"customWidth\",\"1\"),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(\"col\"===e.name){var t=this.model={min:parseInt(e.attributes.min||\"0\",10),max:parseInt(e.attributes.max||\"0\",10),width:void 0===e.attributes.width?void 0:parseFloat(e.attributes.width||\"0\")};return e.attributes.style&&(t.styleId=parseInt(e.attributes.style,10)),!0!==e.attributes.hidden&&\"true\"!==e.attributes.hidden&&1!==e.attributes.hidden&&\"1\"!==e.attributes.hidden||(t.hidden=!0),e.attributes.bestFit&&(t.bestFit=!0),e.attributes.outlineLevel&&(t.outlineLevel=parseInt(e.attributes.outlineLevel,10)),e.attributes.collapsed&&(t.collapsed=!0),!0}return!1}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"reconcile\",value:function(e,t){e.styleId&&(e.style=t.styles.getStyleModel(e.styleId))}},{key:\"tag\",get:function(){return\"col\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],90:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?f(Object(r),!0).forEach((function(t){h(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):f(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function h(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var d=e(\"../../../utils/under-dash\"),p=e(\"../../../utils/utils\"),y=e(\"../../../utils/col-cache\"),m=e(\"../base-xform\"),b=e(\"../../../doc/range\");function v(e,t,r,n){var o=t[r];void 0!==o?e[r]=o:void 0!==n&&(e[r]=n)}function g(e,t,r,n){var o=t[r];void 0!==o?e[r]=function(e){switch(e){case\"1\":case\"true\":return!0;default:return!1}}(o):void 0!==n&&(e[r]=n)}var w=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(m,e);var t,r,n,f,h=(t=m,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function m(){return o(this,m),h.apply(this,arguments)}return r=m,(n=[{key:\"render\",value:function(e,t){var r=function(e){var t=d.map(e,(function(e,t){return{address:t,dataValidation:e,marked:!1}})).sort((function(e,t){return d.strcmp(e.address,t.address)})),r=d.keyBy(t,\"address\"),n=function(t,r,n){for(var o=0;o<r;o++){var i=y.encodeAddress(t.row+o,n);if(!e[i]||!d.isEqual(e[t.address],e[i]))return!1}return!0};return t.map((function(t){if(!t.marked){for(var o=y.decodeAddress(t.address),i=1,a=y.encodeAddress(o.row+i,o.col);e[a]&&d.isEqual(t.dataValidation,e[a]);)i++,a=y.encodeAddress(o.row+i,o.col);for(var s=1;n(o,i,o.col+s);)s++;for(var u=0;u<i;u++)for(var c=0;c<s;c++)a=y.encodeAddress(o.row+u,o.col+c),r[a].marked=!0;if(i>1||s>1){var f=o.row+(i-1),h=o.col+(s-1);return l({},t.dataValidation,{sqref:\"\".concat(t.address,\":\").concat(y.encodeAddress(f,h))})}return l({},t.dataValidation,{sqref:t.address})}return null})).filter(Boolean)}(t);r.length&&(e.openNode(\"dataValidations\",{count:r.length}),r.forEach((function(t){e.openNode(\"dataValidation\"),\"any\"!==t.type&&(e.addAttribute(\"type\",t.type),t.operator&&\"list\"!==t.type&&\"between\"!==t.operator&&e.addAttribute(\"operator\",t.operator),t.allowBlank&&e.addAttribute(\"allowBlank\",\"1\")),t.showInputMessage&&e.addAttribute(\"showInputMessage\",\"1\"),t.promptTitle&&e.addAttribute(\"promptTitle\",t.promptTitle),t.prompt&&e.addAttribute(\"prompt\",t.prompt),t.showErrorMessage&&e.addAttribute(\"showErrorMessage\",\"1\"),t.errorStyle&&e.addAttribute(\"errorStyle\",t.errorStyle),t.errorTitle&&e.addAttribute(\"errorTitle\",t.errorTitle),t.error&&e.addAttribute(\"error\",t.error),e.addAttribute(\"sqref\",t.sqref),(t.formulae||[]).forEach((function(r,n){e.openNode(\"formula\".concat(n+1)),\"date\"===t.type?e.writeText(p.dateToExcel(new Date(r))):e.writeText(r),e.closeNode()})),e.closeNode()})),e.closeNode())}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"dataValidations\":return this.model={},!0;case\"dataValidation\":this._address=e.attributes.sqref;var t={type:e.attributes.type||\"any\",formulae:[]};switch(e.attributes.type&&g(t,e.attributes,\"allowBlank\"),g(t,e.attributes,\"showInputMessage\"),g(t,e.attributes,\"showErrorMessage\"),t.type){case\"any\":case\"list\":case\"custom\":break;default:v(t,e.attributes,\"operator\",\"between\")}return v(t,e.attributes,\"promptTitle\"),v(t,e.attributes,\"prompt\"),v(t,e.attributes,\"errorStyle\"),v(t,e.attributes,\"errorTitle\"),v(t,e.attributes,\"error\"),this._dataValidation=t,!0;case\"formula1\":case\"formula2\":return this._formula=[],!0;default:return!1}}},{key:\"parseText\",value:function(e){this._formula&&this._formula.push(e)}},{key:\"parseClose\",value:function(e){var t=this;switch(e){case\"dataValidations\":return!1;case\"dataValidation\":return this._dataValidation.formulae&&this._dataValidation.formulae.length||(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\\s+/g)||[]).forEach((function(e){e.includes(\":\")?new b(e).forEachAddress((function(e){t.model[e]=t._dataValidation})):t.model[e]=t._dataValidation})),!0;case\"formula1\":case\"formula2\":var r=this._formula.join(\"\");switch(this._dataValidation.type){case\"whole\":case\"textLength\":r=parseInt(r,10);break;case\"decimal\":r=parseFloat(r);break;case\"date\":r=p.excelToDate(parseFloat(r))}return this._dataValidation.formulae.push(r),this._formula=void 0,!0;default:return!0}}},{key:\"tag\",get:function(){return\"dataValidations\"}}])&&i(r.prototype,n),f&&i(r,f),m}(m);t.exports=w},{\"../../../doc/range\":10,\"../../../utils/col-cache\":17,\"../../../utils/under-dash\":23,\"../../../utils/utils\":24,\"../base-xform\":29}],91:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){t&&e.leafNode(\"dimension\",{ref:t})}},{key:\"parseOpen\",value:function(e){return\"dimension\"===e.name&&(this.model=e.attributes.ref,!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"dimension\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],92:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){t&&e.leafNode(this.tag,{\"r:id\":t.rId})}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={rId:e.attributes[\"r:id\"]},!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"drawing\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],93:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e}function s(e){return function(){var t,r=f(e);if(c()){var n=f(this).constructor;t=Reflect.construct(r,arguments,n)}else t=r.apply(this,arguments);return u(this,t)}}function u(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function c(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var d=e(\"../composite-xform\"),p=e(\"./cf-ext/conditional-formattings-ext-xform\"),y=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={\"x14:conditionalFormattings\":e.conditionalFormattings=new p},e}return a(r,[{key:\"hasContent\",value:function(e){return this.conditionalFormattings.hasContent(e.conditionalFormattings)}},{key:\"prepare\",value:function(e,t){this.conditionalFormattings.prepare(e.conditionalFormattings,t)}},{key:\"render\",value:function(e,t){e.openNode(\"ext\",{uri:\"{78C0D931-6437-407d-A8EE-F0AAD7539E65}\",\"xmlns:x14\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"}),this.conditionalFormattings.render(e,t.conditionalFormattings),e.closeNode()}},{key:\"createNewModel\",value:function(){return{}}},{key:\"onParserClose\",value:function(e,t){this.model[e]=t.model}},{key:\"tag\",get:function(){return\"ext\"}}]),r}(d),m=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={ext:e.ext=new y},e}return a(r,[{key:\"prepare\",value:function(e,t){this.ext.prepare(e,t)}},{key:\"hasContent\",value:function(e){return this.ext.hasContent(e)}},{key:\"render\",value:function(e,t){this.hasContent(t)&&(e.openNode(\"extLst\"),this.ext.render(e,t),e.closeNode())}},{key:\"createNewModel\",value:function(){return{}}},{key:\"onParserClose\",value:function(e,t){Object.assign(this.model,t.model)}},{key:\"tag\",get:function(){return\"extLst\"}}]),r}(d);t.exports=m},{\"../composite-xform\":45,\"./cf-ext/conditional-formattings-ext-xform\":75}],94:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){if(t){e.addRollback();var r=!1;e.openNode(\"headerFooter\"),t.differentFirst&&(e.addAttribute(\"differentFirst\",\"1\"),r=!0),t.differentOddEven&&(e.addAttribute(\"differentOddEven\",\"1\"),r=!0),t.oddHeader&&\"string\"==typeof t.oddHeader&&(e.leafNode(\"oddHeader\",null,t.oddHeader),r=!0),t.oddFooter&&\"string\"==typeof t.oddFooter&&(e.leafNode(\"oddFooter\",null,t.oddFooter),r=!0),t.evenHeader&&\"string\"==typeof t.evenHeader&&(e.leafNode(\"evenHeader\",null,t.evenHeader),r=!0),t.evenFooter&&\"string\"==typeof t.evenFooter&&(e.leafNode(\"evenFooter\",null,t.evenFooter),r=!0),t.firstHeader&&\"string\"==typeof t.firstHeader&&(e.leafNode(\"firstHeader\",null,t.firstHeader),r=!0),t.firstFooter&&\"string\"==typeof t.firstFooter&&(e.leafNode(\"firstFooter\",null,t.firstFooter),r=!0),r?(e.closeNode(),e.commit()):e.rollback()}}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"headerFooter\":return this.model={},e.attributes.differentFirst&&(this.model.differentFirst=1===parseInt(e.attributes.differentFirst,0)),e.attributes.differentOddEven&&(this.model.differentOddEven=1===parseInt(e.attributes.differentOddEven,0)),!0;case\"oddHeader\":return this.currentNode=\"oddHeader\",!0;case\"oddFooter\":return this.currentNode=\"oddFooter\",!0;case\"evenHeader\":return this.currentNode=\"evenHeader\",!0;case\"evenFooter\":return this.currentNode=\"evenFooter\",!0;case\"firstHeader\":return this.currentNode=\"firstHeader\",!0;case\"firstFooter\":return this.currentNode=\"firstFooter\",!0;default:return!1}}},{key:\"parseText\",value:function(e){switch(this.currentNode){case\"oddHeader\":this.model.oddHeader=e;break;case\"oddFooter\":this.model.oddFooter=e;break;case\"evenHeader\":this.model.evenHeader=e;break;case\"evenFooter\":this.model.evenFooter=e;break;case\"firstHeader\":this.model.firstHeader=e;break;case\"firstFooter\":this.model.firstFooter=e}}},{key:\"parseClose\",value:function(){switch(this.currentNode){case\"oddHeader\":case\"oddFooter\":case\"evenHeader\":case\"evenFooter\":case\"firstHeader\":case\"firstFooter\":return this.currentNode=void 0,!0;default:return!1}}},{key:\"tag\",get:function(){return\"headerFooter\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],95:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"hyperlink\",{ref:t.address,\"r:id\":t.rId,tooltip:t.tooltip})}},{key:\"parseOpen\",value:function(e){return\"hyperlink\"===e.name&&(this.model={address:e.attributes.ref,rId:e.attributes[\"r:id\"],tooltip:e.attributes.tooltip},!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"hyperlink\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],96:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"mergeCell\",{ref:t})}},{key:\"parseOpen\",value:function(e){return\"mergeCell\"===e.name&&(this.model=e.attributes.ref,!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"mergeCell\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],97:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=e(\"../../../utils/under-dash\"),i=e(\"../../../doc/range\"),a=e(\"../../../utils/col-cache\"),s=e(\"../../../doc/enums\"),u=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.merges={}}var t,r,u;return t=e,(r=[{key:\"add\",value:function(e){if(this.merges[e.master])this.merges[e.master].expandToAddress(e.address);else{var t=\"\".concat(e.master,\":\").concat(e.address);this.merges[e.master]=new i(t)}}},{key:\"reconcile\",value:function(e,t){o.each(e,(function(e){for(var r=a.decode(e),n=r.top;n<=r.bottom;n++)for(var o=t[n-1],i=r.left;i<=r.right;i++){var u=o.cells[i-1];u?u.type===s.ValueType.Merge&&(u.master=r.tl):o.cells[i]={type:s.ValueType.Null,address:a.encodeAddress(n,i)}}}))}},{key:\"getMasterAddress\",value:function(e){var t=this.hash[e];return t&&t.tl}},{key:\"mergeCells\",get:function(){return o.map(this.merges,(function(e){return e.range}))}}])&&n(t.prototype,r),u&&n(t,u),e}();t.exports=u},{\"../../../doc/enums\":7,\"../../../doc/range\":10,\"../../../utils/col-cache\":17,\"../../../utils/under-dash\":23}],98:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../base-xform\"),l=function(e){return void 0!==e},h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,f,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){return!(!t||!l(t.summaryBelow)&&!l(t.summaryRight)||(e.leafNode(this.tag,{summaryBelow:l(t.summaryBelow)?Number(t.summaryBelow):void 0,summaryRight:l(t.summaryRight)?Number(t.summaryRight):void 0}),0))}},{key:\"parseOpen\",value:function(e){return e.name===this.tag&&(this.model={summaryBelow:l(e.attributes.summaryBelow)?Boolean(Number(e.attributes.summaryBelow)):void 0,summaryRight:l(e.attributes.summaryRight)?Boolean(Number(e.attributes.summaryRight)):void 0},!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"outlinePr\"}}])&&i(r.prototype,n),f&&i(r,f),d}(f);t.exports=h},{\"../base-xform\":29}],99:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"brk\",t)}},{key:\"parseOpen\",value:function(e){return\"brk\"===e.name&&(this.model=e.attributes.ref,!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"brk\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],100:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/under-dash\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){if(t){var r={left:t.left,right:t.right,top:t.top,bottom:t.bottom,header:t.header,footer:t.footer};f.some(r,(function(e){return void 0!==e}))&&e.leafNode(this.tag,r)}}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={left:parseFloat(e.attributes.left||.7),right:parseFloat(e.attributes.right||.7),top:parseFloat(e.attributes.top||.75),bottom:parseFloat(e.attributes.bottom||.75),header:parseFloat(e.attributes.header||.3),footer:parseFloat(e.attributes.footer||.3)},!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"pageMargins\"}}])&&i(r.prototype,n),l&&i(r,l),d}(e(\"../base-xform\"));t.exports=l},{\"../../../utils/under-dash\":23,\"../base-xform\":29}],101:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){return!(!t||!t.fitToPage||(e.leafNode(this.tag,{fitToPage:t.fitToPage?\"1\":void 0}),0))}},{key:\"parseOpen\",value:function(e){return e.name===this.tag&&(this.model={fitToPage:\"1\"===e.attributes.fitToPage},!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"pageSetUpPr\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],102:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/under-dash\");function l(e){return e?\"1\":void 0}function h(e){switch(e){case\"overThenDown\":return e;default:return}}function d(e){switch(e){case\"atEnd\":case\"asDisplyed\":return e;default:return}}function p(e){switch(e){case\"dash\":case\"blank\":case\"NA\":return e;default:return}}var y=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(b,e);var t,r,n,y,m=(t=b,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function b(){return o(this,b),m.apply(this,arguments)}return r=b,(n=[{key:\"render\",value:function(e,t){if(t){var r={paperSize:t.paperSize,orientation:t.orientation,horizontalDpi:t.horizontalDpi,verticalDpi:t.verticalDpi,pageOrder:h(t.pageOrder),blackAndWhite:l(t.blackAndWhite),draft:l(t.draft),cellComments:d(t.cellComments),errors:p(t.errors),scale:t.scale,fitToWidth:t.fitToWidth,fitToHeight:t.fitToHeight,firstPageNumber:t.firstPageNumber,useFirstPageNumber:l(t.firstPageNumber),usePrinterDefaults:l(t.usePrinterDefaults),copies:t.copies};f.some(r,(function(e){return void 0!==e}))&&e.leafNode(this.tag,r)}}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={paperSize:(t=e.attributes.paperSize,void 0!==t?parseInt(t,10):void 0),orientation:e.attributes.orientation||\"portrait\",horizontalDpi:parseInt(e.attributes.horizontalDpi||\"4294967295\",10),verticalDpi:parseInt(e.attributes.verticalDpi||\"4294967295\",10),pageOrder:e.attributes.pageOrder||\"downThenOver\",blackAndWhite:\"1\"===e.attributes.blackAndWhite,draft:\"1\"===e.attributes.draft,cellComments:e.attributes.cellComments||\"None\",errors:e.attributes.errors||\"displayed\",scale:parseInt(e.attributes.scale||\"100\",10),fitToWidth:parseInt(e.attributes.fitToWidth||\"1\",10),fitToHeight:parseInt(e.attributes.fitToHeight||\"1\",10),firstPageNumber:parseInt(e.attributes.firstPageNumber||\"1\",10),useFirstPageNumber:\"1\"===e.attributes.useFirstPageNumber,usePrinterDefaults:\"1\"===e.attributes.usePrinterDefaults,copies:parseInt(e.attributes.copies||\"1\",10)},!0;default:return!1}var t}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"pageSetup\"}}])&&i(r.prototype,n),y&&i(r,y),b}(e(\"../base-xform\"));t.exports=y},{\"../../../utils/under-dash\":23,\"../base-xform\":29}],103:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){t&&e.leafNode(this.tag,{\"r:id\":t.rId})}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={rId:e.attributes[\"r:id\"]},!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"picture\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],104:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/under-dash\");function l(e){return e?\"1\":void 0}var h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(p,e);var t,r,n,h,d=(t=p,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function p(){return o(this,p),d.apply(this,arguments)}return r=p,(n=[{key:\"render\",value:function(e,t){if(t){var r={headings:l(t.showRowColHeaders),gridLines:l(t.showGridLines),horizontalCentered:l(t.horizontalCentered),verticalCentered:l(t.verticalCentered)};f.some(r,(function(e){return void 0!==e}))&&e.leafNode(this.tag,r)}}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={showRowColHeaders:\"1\"===e.attributes.headings,showGridLines:\"1\"===e.attributes.gridLines,horizontalCentered:\"1\"===e.attributes.horizontalCentered,verticalCentered:\"1\"===e.attributes.verticalCentered},!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"printOptions\"}}])&&i(r.prototype,n),h&&i(r,h),p}(e(\"../base-xform\"));t.exports=h},{\"../../../utils/under-dash\":23,\"../base-xform\":29}],105:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./page-breaks-xform\"),f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h);var e={tag:\"rowBreaks\",count:!0,childXform:new c};return l.call(this,e)}return r=h,(n=[{key:\"render\",value:function(e,t){if(t&&t.length){e.openNode(this.tag,this.$),this.count&&(e.addAttribute(this.$count,t.length),e.addAttribute(\"manualBreakCount\",t.length));var r=this.childXform;t.forEach((function(t){r.render(e,t)})),e.closeNode()}else this.empty&&e.leafNode(this.tag)}}])&&o(r.prototype,n),f&&o(r,f),h}(e(\"../list-xform\"));t.exports=f},{\"../list-xform\":68,\"./page-breaks-xform\":99}],106:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./cell-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,c,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h),(t=l.call(this)).maxItems=e&&e.maxItems,t.map={c:new f},t}return r=h,(n=[{key:\"prepare\",value:function(e,t){var r=t.styles.addStyleModel(e.style);r&&(e.styleId=r);var n=this.map.c;e.cells.forEach((function(e){n.prepare(e,t)}))}},{key:\"render\",value:function(e,t,r){e.openNode(\"row\"),e.addAttribute(\"r\",t.number),t.height&&(e.addAttribute(\"ht\",t.height),e.addAttribute(\"customHeight\",\"1\")),t.hidden&&e.addAttribute(\"hidden\",\"1\"),t.min>0&&t.max>0&&t.min<=t.max&&e.addAttribute(\"spans\",\"\".concat(t.min,\":\").concat(t.max)),t.styleId&&(e.addAttribute(\"s\",t.styleId),e.addAttribute(\"customFormat\",\"1\")),e.addAttribute(\"x14ac:dyDescent\",\"0.25\"),t.outlineLevel&&e.addAttribute(\"outlineLevel\",t.outlineLevel),t.collapsed&&e.addAttribute(\"collapsed\",\"1\");var n=this.map.c;t.cells.forEach((function(t){n.render(e,t,r)})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;if(\"row\"===e.name){this.numRowsSeen+=1;var t=e.attributes.spans?e.attributes.spans.split(\":\").map((function(e){return parseInt(e,10)})):[void 0,void 0],r=this.model={number:parseInt(e.attributes.r,10),min:t[0],max:t[1],cells:[]};return e.attributes.s&&(r.styleId=parseInt(e.attributes.s,10)),!0!==e.attributes.hidden&&\"true\"!==e.attributes.hidden&&1!==e.attributes.hidden&&\"1\"!==e.attributes.hidden||(r.hidden=!0),e.attributes.bestFit&&(r.bestFit=!0),e.attributes.ht&&(r.height=parseFloat(e.attributes.ht)),e.attributes.outlineLevel&&(r.outlineLevel=parseInt(e.attributes.outlineLevel,10)),e.attributes.collapsed&&(r.collapsed=!0),!0}return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser){if(!this.parser.parseClose(e)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(\"Max column count exceeded\");this.parser=void 0}return!0}return!1}},{key:\"reconcile\",value:function(e,t){e.style=e.styleId?t.styles.getStyleModel(e.styleId):{},void 0!==e.styleId&&(e.styleId=void 0);var r=this.map.c;e.cells.forEach((function(e){r.reconcile(e,t)}))}},{key:\"tag\",get:function(){return\"row\"}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../base-xform\":29,\"./cell-xform\":70}],107:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/under-dash\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){if(t){var r={defaultRowHeight:t.defaultRowHeight,outlineLevelRow:t.outlineLevelRow,outlineLevelCol:t.outlineLevelCol,\"x14ac:dyDescent\":t.dyDescent};t.defaultColWidth&&(r.defaultColWidth=t.defaultColWidth),t.defaultRowHeight&&15===t.defaultRowHeight||(r.customHeight=\"1\"),f.some(r,(function(e){return void 0!==e}))&&e.leafNode(\"sheetFormatPr\",r)}}},{key:\"parseOpen\",value:function(e){return\"sheetFormatPr\"===e.name&&(this.model={defaultRowHeight:parseFloat(e.attributes.defaultRowHeight||\"0\"),dyDescent:parseFloat(e.attributes[\"x14ac:dyDescent\"]||\"0\"),outlineLevelRow:parseInt(e.attributes.outlineLevelRow||\"0\",10),outlineLevelCol:parseInt(e.attributes.outlineLevelCol||\"0\",10)},e.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(e.attributes.defaultColWidth)),!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"sheetFormatPr\"}}])&&i(r.prototype,n),l&&i(r,l),d}(e(\"../base-xform\"));t.exports=l},{\"../../../utils/under-dash\":23,\"../base-xform\":29}],108:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"../style/color-xform\"),l=e(\"./page-setup-properties-xform\"),h=e(\"./outline-properties-xform\"),d=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(p,e);var t,r,n,c,d=(t=p,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function p(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,p),(e=d.call(this)).map={tabColor:new f(\"tabColor\"),pageSetUpPr:new l,outlinePr:new h},e}return r=p,(n=[{key:\"render\",value:function(e,t){if(t){e.addRollback(),e.openNode(\"sheetPr\");var r=!1;r=this.map.tabColor.render(e,t.tabColor)||r,r=this.map.pageSetUpPr.render(e,t.pageSetup)||r,(r=this.map.outlinePr.render(e,t.outlineProperties)||r)?(e.closeNode(),e.commit()):e.rollback()}}},{key:\"parseOpen\",value:function(e){return this.parser?(this.parser.parseOpen(e),!0):e.name===this.tag?(this.reset(),!0):!!this.map[e.name]&&(this.parser=this.map[e.name],this.parser.parseOpen(e),!0)}},{key:\"parseText\",value:function(e){return!!this.parser&&(this.parser.parseText(e),!0)}},{key:\"parseClose\",value:function(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}},{key:\"tag\",get:function(){return\"sheetPr\"}}])&&o(r.prototype,n),c&&o(r,c),p}(c);t.exports=d},{\"../base-xform\":29,\"../style/color-xform\":125,\"./outline-properties-xform\":98,\"./page-setup-properties-xform\":101}],109:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/under-dash\");function l(e,t){return e?t:void 0}function h(e,t){return e===t||void 0}var d=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(y,e);var t,r,n,d,p=(t=y,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function y(){return o(this,y),p.apply(this,arguments)}return r=y,(n=[{key:\"render\",value:function(e,t){if(t){var r={sheet:l(t.sheet,\"1\"),selectLockedCells:!1===t.selectLockedCells?\"1\":void 0,selectUnlockedCells:!1===t.selectUnlockedCells?\"1\":void 0,formatCells:l(t.formatCells,\"0\"),formatColumns:l(t.formatColumns,\"0\"),formatRows:l(t.formatRows,\"0\"),insertColumns:l(t.insertColumns,\"0\"),insertRows:l(t.insertRows,\"0\"),insertHyperlinks:l(t.insertHyperlinks,\"0\"),deleteColumns:l(t.deleteColumns,\"0\"),deleteRows:l(t.deleteRows,\"0\"),sort:l(t.sort,\"0\"),autoFilter:l(t.autoFilter,\"0\"),pivotTables:l(t.pivotTables,\"0\")};t.sheet&&(r.algorithmName=t.algorithmName,r.hashValue=t.hashValue,r.saltValue=t.saltValue,r.spinCount=t.spinCount,r.objects=l(!1===t.objects,\"1\"),r.scenarios=l(!1===t.scenarios,\"1\")),f.some(r,(function(e){return void 0!==e}))&&e.leafNode(this.tag,r)}}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={sheet:h(e.attributes.sheet,\"1\"),objects:\"1\"!==e.attributes.objects&&void 0,scenarios:\"1\"!==e.attributes.scenarios&&void 0,selectLockedCells:\"1\"!==e.attributes.selectLockedCells&&void 0,selectUnlockedCells:\"1\"!==e.attributes.selectUnlockedCells&&void 0,formatCells:h(e.attributes.formatCells,\"0\"),formatColumns:h(e.attributes.formatColumns,\"0\"),formatRows:h(e.attributes.formatRows,\"0\"),insertColumns:h(e.attributes.insertColumns,\"0\"),insertRows:h(e.attributes.insertRows,\"0\"),insertHyperlinks:h(e.attributes.insertHyperlinks,\"0\"),deleteColumns:h(e.attributes.deleteColumns,\"0\"),deleteRows:h(e.attributes.deleteRows,\"0\"),sort:h(e.attributes.sort,\"0\"),autoFilter:h(e.attributes.autoFilter,\"0\"),pivotTables:h(e.attributes.pivotTables,\"0\")},e.attributes.algorithmName&&(this.model.algorithmName=e.attributes.algorithmName,this.model.hashValue=e.attributes.hashValue,this.model.saltValue=e.attributes.saltValue,this.model.spinCount=parseInt(e.attributes.spinCount,10)),!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"sheetProtection\"}}])&&i(r.prototype,n),d&&i(r,d),y}(e(\"../base-xform\"));t.exports=d},{\"../../../utils/under-dash\":23,\"../base-xform\":29}],110:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../utils/col-cache\"),l=e(\"../base-xform\"),h={frozen:\"frozen\",frozenSplit:\"frozen\",split:\"split\"},d=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(p,e);var t,r,n,l,d=(t=p,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function p(){return o(this,p),d.apply(this,arguments)}return r=p,(n=[{key:\"prepare\",value:function(e){switch(e.state){case\"frozen\":case\"split\":break;default:e.state=\"normal\"}}},{key:\"render\",value:function(e,t){e.openNode(\"sheetView\",{workbookViewId:t.workbookViewId||0});var r,n,o,i,a=function(t,r,n){n&&e.addAttribute(t,r)};switch(a(\"rightToLeft\",\"1\",!0===t.rightToLeft),a(\"tabSelected\",\"1\",t.tabSelected),a(\"showRuler\",\"0\",!1===t.showRuler),a(\"showRowColHeaders\",\"0\",!1===t.showRowColHeaders),a(\"showGridLines\",\"0\",!1===t.showGridLines),a(\"zoomScale\",t.zoomScale,t.zoomScale),a(\"zoomScaleNormal\",t.zoomScaleNormal,t.zoomScaleNormal),a(\"view\",t.style,t.style),t.state){case\"frozen\":n=t.xSplit||0,o=t.ySplit||0,r=t.topLeftCell||f.getAddress(o+1,n+1).address,i=(t.xSplit&&t.ySplit?\"bottomRight\":t.xSplit&&\"topRight\")||\"bottomLeft\",e.leafNode(\"pane\",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:r,activePane:i,state:\"frozen\"}),e.leafNode(\"selection\",{pane:i,activeCell:t.activeCell,sqref:t.activeCell});break;case\"split\":\"topLeft\"===t.activePane&&(t.activePane=void 0),e.leafNode(\"pane\",{xSplit:t.xSplit||void 0,ySplit:t.ySplit||void 0,topLeftCell:t.topLeftCell,activePane:t.activePane}),e.leafNode(\"selection\",{pane:t.activePane,activeCell:t.activeCell,sqref:t.activeCell});break;case\"normal\":t.activeCell&&e.leafNode(\"selection\",{activeCell:t.activeCell,sqref:t.activeCell})}e.closeNode()}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"sheetView\":return this.sheetView={workbookViewId:parseInt(e.attributes.workbookViewId,10),rightToLeft:\"1\"===e.attributes.rightToLeft,tabSelected:\"1\"===e.attributes.tabSelected,showRuler:!(\"0\"===e.attributes.showRuler),showRowColHeaders:!(\"0\"===e.attributes.showRowColHeaders),showGridLines:!(\"0\"===e.attributes.showGridLines),zoomScale:parseInt(e.attributes.zoomScale||\"100\",10),zoomScaleNormal:parseInt(e.attributes.zoomScaleNormal||\"100\",10),style:e.attributes.view},this.pane=void 0,this.selections={},!0;case\"pane\":return this.pane={xSplit:parseInt(e.attributes.xSplit||\"0\",10),ySplit:parseInt(e.attributes.ySplit||\"0\",10),topLeftCell:e.attributes.topLeftCell,activePane:e.attributes.activePane||\"topLeft\",state:e.attributes.state},!0;case\"selection\":var t=e.attributes.pane||\"topLeft\";return this.selections[t]={pane:t,activeCell:e.attributes.activeCell},!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){var t,r;switch(e){case\"sheetView\":return this.sheetView&&this.pane?(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:h[this.pane.state]||\"split\",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},\"split\"===this.model.state&&(t.activePane=this.pane.activePane),(r=this.selections[this.pane.activePane])&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)):(t=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:\"normal\",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},(r=this.selections.topLeft)&&r.activeCell&&(t.activeCell=r.activeCell),this.sheetView.style&&(t.style=this.sheetView.style)),!1;default:return!0}}},{key:\"reconcile\",value:function(){}},{key:\"tag\",get:function(){return\"sheetView\"}}])&&i(r.prototype,n),l&&i(r,l),p}(l);t.exports=d},{\"../../../utils/col-cache\":17,\"../base-xform\":29}],111:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){t&&e.leafNode(this.tag,{\"r:id\":t.rId})}},{key:\"parseOpen\",value:function(e){switch(e.name){case this.tag:return this.model={rId:e.attributes[\"r:id\"]},!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"tablePart\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],112:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/under-dash\"),f=e(\"../../../utils/col-cache\"),l=e(\"../../../utils/xml-stream\"),h=e(\"../../rel-type\"),d=e(\"./merges\"),p=e(\"../base-xform\"),y=e(\"../list-xform\"),m=e(\"./row-xform\"),b=e(\"./col-xform\"),v=e(\"./dimension-xform\"),g=e(\"./hyperlink-xform\"),w=e(\"./merge-cell-xform\"),_=e(\"./data-validations-xform\"),k=e(\"./sheet-properties-xform\"),x=e(\"./sheet-format-properties-xform\"),S=e(\"./sheet-view-xform\"),O=e(\"./sheet-protection-xform\"),E=e(\"./page-margins-xform\"),R=e(\"./page-setup-xform\"),j=e(\"./print-options-xform\"),T=e(\"./auto-filter-xform\"),C=e(\"./picture-xform\"),P=e(\"./drawing-xform\"),A=e(\"./table-part-xform\"),M=e(\"./row-breaks-xform\"),I=e(\"./header-footer-xform\"),N=e(\"./cf/conditional-formattings-xform\"),D=e(\"./ext-lst-xform\"),B=function(e,t){if(!t||!t.length)return e;if(!e||!e.length)return t;var r={},n={};return e.forEach((function(e){r[e.ref]=e,e.rules.forEach((function(e){var t=e.x14Id;t&&(n[t]=e)}))})),t.forEach((function(t){t.rules.forEach((function(o){var i=n[o.x14Id];i?function(e,t){Object.keys(t).forEach((function(r){var n=e[r],o=t[r];void 0===n&&void 0!==o&&(e[r]=o)}))}(i,o):r[t.ref]?r[t.ref].rules.push(o):e.push({ref:t.ref,rules:[o]})}))})),e},F=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(L,e);var t,r,n,p,F=(t=L,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function L(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,L),t=F.call(this);var r=e||{},n=r.maxRows,o=r.maxCols;return t.map={sheetPr:new k,dimension:new v,sheetViews:new y({tag:\"sheetViews\",count:!1,childXform:new S}),sheetFormatPr:new x,cols:new y({tag:\"cols\",count:!1,childXform:new b}),sheetData:new y({tag:\"sheetData\",count:!1,empty:!0,childXform:new m({maxItems:o}),maxItems:n}),autoFilter:new T,mergeCells:new y({tag:\"mergeCells\",count:!0,childXform:new w}),rowBreaks:new M,hyperlinks:new y({tag:\"hyperlinks\",count:!1,childXform:new g}),pageMargins:new E,dataValidations:new _,pageSetup:new R,headerFooter:new I,printOptions:new j,picture:new C,drawing:new P,sheetProtection:new O,tableParts:new y({tag:\"tableParts\",count:!0,childXform:new A}),conditionalFormatting:new N,extLst:new D},t}return r=L,(n=[{key:\"prepare\",value:function(e,t){var r=this;t.merges=new d,e.hyperlinks=t.hyperlinks=[],e.comments=t.comments=[],t.formulae={},t.siFormulae=0,this.map.cols.prepare(e.cols,t),this.map.sheetData.prepare(e.rows,t),this.map.conditionalFormatting.prepare(e.conditionalFormattings,t),e.mergeCells=t.merges.mergeCells;var n=e.rels=[];function o(e){return\"rId\".concat(e.length+1)}if(e.hyperlinks.forEach((function(e){var t=o(n);e.rId=t,n.push({Id:t,Type:h.Hyperlink,Target:e.target,TargetMode:\"External\"})})),e.comments.length>0){var i={Id:o(n),Type:h.Comments,Target:\"../comments\".concat(e.id,\".xml\")};n.push(i);var a={Id:o(n),Type:h.VmlDrawing,Target:\"../drawings/vmlDrawing\".concat(e.id,\".vml\")};n.push(a),e.comments.forEach((function(e){e.refAddress=f.decodeAddress(e.ref)})),t.commentRefs.push({commentName:\"comments\".concat(e.id),vmlDrawing:\"vmlDrawing\".concat(e.id)})}var s,u=[];e.media.forEach((function(i){if(\"background\"===i.type){var a=o(n);s=t.media[i.imageId],n.push({Id:a,Type:h.Image,Target:\"../media/\".concat(s.name,\".\").concat(s.extension)}),e.background={rId:a},e.image=t.media[i.imageId]}else if(\"image\"===i.type){var c=e.drawing;s=t.media[i.imageId],c||(c=e.drawing={rId:o(n),name:\"drawing\".concat(++t.drawingsCount),anchors:[],rels:[]},t.drawings.push(c),n.push({Id:c.rId,Type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",Target:\"../drawings/\".concat(c.name,\".xml\")}));var f=r.preImageId===i.imageId?u[i.imageId]:u[c.rels.length];f||(f=o(c.rels),u[c.rels.length]=f,c.rels.push({Id:f,Type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",Target:\"../media/\".concat(s.name,\".\").concat(s.extension)}));var l={picture:{rId:f},range:i.range};if(i.hyperlinks&&i.hyperlinks.hyperlink){var d=o(c.rels);u[c.rels.length]=d,l.picture.hyperlinks={tooltip:i.hyperlinks.tooltip,rId:d},c.rels.push({Id:d,Type:h.Hyperlink,Target:i.hyperlinks.hyperlink,TargetMode:\"External\"})}r.preImageId=i.imageId,c.anchors.push(l)}})),e.tables.forEach((function(e){var r=o(n);e.rId=r,n.push({Id:r,Type:h.Table,Target:\"../tables/\".concat(e.target)}),e.columns.forEach((function(e){var r=e.style;r&&(e.dxfId=t.styles.addDxfStyle(r))}))})),this.map.extLst.prepare(e,t)}},{key:\"render\",value:function(e,t){e.openXml(l.StdDocAttributes),e.openNode(\"worksheet\",L.WORKSHEET_ATTRIBUTES);var r=t.properties?{defaultRowHeight:t.properties.defaultRowHeight,dyDescent:t.properties.dyDescent,outlineLevelCol:t.properties.outlineLevelCol,outlineLevelRow:t.properties.outlineLevelRow}:void 0;t.properties&&t.properties.defaultColWidth&&(r.defaultColWidth=t.properties.defaultColWidth);var n={outlineProperties:t.properties&&t.properties.outlineProperties,tabColor:t.properties&&t.properties.tabColor,pageSetup:t.pageSetup&&t.pageSetup.fitToPage?{fitToPage:t.pageSetup.fitToPage}:void 0},o=t.pageSetup&&t.pageSetup.margins,i={showRowColHeaders:t.pageSetup&&t.pageSetup.showRowColHeaders,showGridLines:t.pageSetup&&t.pageSetup.showGridLines,horizontalCentered:t.pageSetup&&t.pageSetup.horizontalCentered,verticalCentered:t.pageSetup&&t.pageSetup.verticalCentered},a=t.sheetProtection;this.map.sheetPr.render(e,n),this.map.dimension.render(e,t.dimensions),this.map.sheetViews.render(e,t.views),this.map.sheetFormatPr.render(e,r),this.map.cols.render(e,t.cols),this.map.sheetData.render(e,t.rows),this.map.sheetProtection.render(e,a),this.map.autoFilter.render(e,t.autoFilter),this.map.mergeCells.render(e,t.mergeCells),this.map.conditionalFormatting.render(e,t.conditionalFormattings),this.map.dataValidations.render(e,t.dataValidations),this.map.hyperlinks.render(e,t.hyperlinks),this.map.printOptions.render(e,i),this.map.pageMargins.render(e,o),this.map.pageSetup.render(e,t.pageSetup),this.map.headerFooter.render(e,t.headerFooter),this.map.rowBreaks.render(e,t.rowBreaks),this.map.drawing.render(e,t.drawing),this.map.picture.render(e,t.background),this.map.tableParts.render(e,t.tables),this.map.extLst.render(e,t),t.rels&&t.rels.forEach((function(t){t.Type===h.VmlDrawing&&e.leafNode(\"legacyDrawing\",{\"r:id\":t.Id})})),e.closeNode()}},{key:\"parseOpen\",value:function(e){return this.parser?(this.parser.parseOpen(e),!0):\"worksheet\"===e.name?(c.each(this.map,(function(e){e.reset()})),!0):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0)}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case\"worksheet\":var t=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(t.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(t.outlineProperties=this.map.sheetPr.model.outlineProperties);var r={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},n=Object.assign(r,this.map.pageSetup.model,this.map.printOptions.model),o=B(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model[\"x14:conditionalFormattings\"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:t,views:this.map.sheetViews.model,pageSetup:n,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:o},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1;default:return!0}}},{key:\"reconcile\",value:function(e,t){var r=(e.relationships||[]).reduce((function(r,n){if(r[n.Id]=n,n.Type===h.Comments&&(e.comments=t.comments[n.Target].comments),n.Type===h.VmlDrawing&&e.comments&&e.comments.length){var o=t.vmlDrawings[n.Target].comments;e.comments.forEach((function(e,t){e.note=Object.assign({},e.note,o[t])}))}return r}),{});if(t.commentsMap=(e.comments||[]).reduce((function(e,t){return t.ref&&(e[t.ref]=t),e}),{}),t.hyperlinkMap=(e.hyperlinks||[]).reduce((function(e,t){return t.rId&&(e[t.address]=r[t.rId].Target),e}),{}),t.formulae={},e.rows=e.rows&&e.rows.filter(Boolean)||[],e.rows.forEach((function(e){e.cells=e.cells&&e.cells.filter(Boolean)||[]})),this.map.cols.reconcile(e.cols,t),this.map.sheetData.reconcile(e.rows,t),this.map.conditionalFormatting.reconcile(e.conditionalFormattings,t),e.media=[],e.drawing){var n=r[e.drawing.rId].Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(n){var o=n[1];t.drawings[o].anchors.forEach((function(t){if(t.medium){var r={type:\"image\",imageId:t.medium.index,range:t.range,hyperlinks:t.picture.hyperlinks};e.media.push(r)}}))}}var i=e.background&&r[e.background.rId];if(i){var a=i.Target.split(\"/media/\")[1],s=t.mediaIndex&&t.mediaIndex[a];void 0!==s&&e.media.push({type:\"background\",imageId:s})}e.tables=(e.tables||[]).map((function(e){var n=r[e.rId];return t.tables[n.Target]})),delete e.relationships,delete e.hyperlinks,delete e.comments}}])&&o(r.prototype,n),p&&o(r,p),L}(p);F.WORKSHEET_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"x14ac\",\"xmlns:x14ac\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\"},t.exports=F},{\"../../../utils/col-cache\":17,\"../../../utils/under-dash\":23,\"../../../utils/xml-stream\":25,\"../../rel-type\":28,\"../base-xform\":29,\"../list-xform\":68,\"./auto-filter-xform\":69,\"./cf/conditional-formattings-xform\":84,\"./col-xform\":89,\"./data-validations-xform\":90,\"./dimension-xform\":91,\"./drawing-xform\":92,\"./ext-lst-xform\":93,\"./header-footer-xform\":94,\"./hyperlink-xform\":95,\"./merge-cell-xform\":96,\"./merges\":97,\"./page-margins-xform\":100,\"./page-setup-xform\":102,\"./picture-xform\":103,\"./print-options-xform\":104,\"./row-breaks-xform\":105,\"./row-xform\":106,\"./sheet-format-properties-xform\":107,\"./sheet-properties-xform\":108,\"./sheet-protection-xform\":109,\"./sheet-view-xform\":110,\"./table-part-xform\":111}],113:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).tag=e.tag,t.attr=e.attr,t}return r=l,(n=[{key:\"render\",value:function(e,t){t&&(e.openNode(this.tag),e.closeNode())}},{key:\"parseOpen\",value:function(e){e.name===this.tag&&(this.model=!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../base-xform\"));t.exports=c},{\"../base-xform\":29}],114:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).tag=e.tag,t.attr=e.attr,t.attrs=e.attrs,t._format=e.format||function(e){try{return Number.isNaN(e.getTime())?\"\":e.toISOString()}catch(e){return\"\"}},t._parse=e.parse||function(e){return new Date(e)},t}return r=l,(n=[{key:\"render\",value:function(e,t){t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,this._format(t)):e.writeText(this._format(t)),e.closeNode())}},{key:\"parseOpen\",value:function(e){e.name===this.tag&&(this.attr?this.model=this._parse(e.attributes[this.attr]):this.text=[])}},{key:\"parseText\",value:function(e){this.attr||this.text.push(e)}},{key:\"parseClose\",value:function(){return this.attr||(this.model=this._parse(this.text.join(\"\"))),!1}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../base-xform\"));t.exports=c},{\"../base-xform\":29}],115:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).tag=e.tag,t.attr=e.attr,t.attrs=e.attrs,t.zero=e.zero,t}return r=l,(n=[{key:\"render\",value:function(e,t){(t||this.zero)&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}},{key:\"parseOpen\",value:function(e){return e.name===this.tag&&(this.attr?this.model=parseInt(e.attributes[this.attr],10):this.text=[],!0)}},{key:\"parseText\",value:function(e){this.attr||this.text.push(e)}},{key:\"parseClose\",value:function(){return this.attr||(this.model=parseInt(this.text.join(\"\")||0,10)),!1}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../base-xform\"));t.exports=c},{\"../base-xform\":29}],116:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).tag=e.tag,t.attr=e.attr,t.attrs=e.attrs,t}return r=l,(n=[{key:\"render\",value:function(e,t){void 0!==t&&(e.openNode(this.tag),this.attrs&&e.addAttributes(this.attrs),this.attr?e.addAttribute(this.attr,t):e.writeText(t),e.closeNode())}},{key:\"parseOpen\",value:function(e){e.name===this.tag&&(this.attr?this.model=e.attributes[this.attr]:this.text=[])}},{key:\"parseText\",value:function(e){this.attr||this.text.push(e)}},{key:\"parseClose\",value:function(){return this.attr||(this.model=this.text.join(\"\")),!1}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../base-xform\"));t.exports=c},{\"../base-xform\":29}],117:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./base-xform\"),f=e(\"../../utils/xml-stream\");var l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,c,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h),(t=l.call(this))._model=e,t}return r=h,(n=[{key:\"render\",value:function(e){if(!this._xml){var t=new f;!function e(t,r){t.openNode(r.tag,r.$),r.c&&r.c.forEach((function(r){e(t,r)})),r.t&&t.writeText(r.t),t.closeNode()}(t,this._model),this._xml=t.xml}e.writeXml(this._xml)}},{key:\"parseOpen\",value:function(){return!0}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){switch(e){case this._model.tag:return!1;default:return!0}}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../../utils/xml-stream\":25,\"./base-xform\":29}],118:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./text-xform\"),f=e(\"./rich-text-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(e=h.call(this)).map={r:new f,t:new c},e}return r=d,(n=[{key:\"render\",value:function(e,t){if(e.openNode(this.tag,{sb:t.sb||0,eb:t.eb||0}),t&&t.hasOwnProperty(\"richText\")&&t.richText){var r=this.map.r;t.richText.forEach((function(t){r.render(e,t)}))}else t&&this.map.t.render(e,t.text);e.closeNode()}},{key:\"parseOpen\",value:function(e){var t=e.name;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={sb:parseInt(e.attributes.sb,10),eb:parseInt(e.attributes.eb,10)},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case\"r\":var t=this.model.richText;t||(t=this.model.richText=[]),t.push(this.parser.model);break;case\"t\":this.model.text=this.parser.model}this.parser=void 0}return!0}switch(e){case this.tag:return!1;default:return!0}}},{key:\"tag\",get:function(){return\"rPh\"}}])&&o(r.prototype,n),l&&o(r,l),d}(e(\"../base-xform\"));t.exports=l},{\"../base-xform\":29,\"./rich-text-xform\":119,\"./text-xform\":122}],119:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./text-xform\"),f=e(\"../style/font-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,l,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(t=h.call(this)).model=e,t}return r=d,(n=[{key:\"render\",value:function(e,t){t=t||this.model,e.openNode(\"r\"),t.font&&this.fontXform.render(e,t.font),this.textXform.render(e,t.text),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"r\":return this.model={},!0;case\"t\":return this.parser=this.textXform,this.parser.parseOpen(e),!0;case\"rPr\":return this.parser=this.fontXform,this.parser.parseOpen(e),!0;default:return!1}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){switch(e){case\"r\":return!1;case\"t\":return this.model.text=this.parser.model,this.parser=void 0,!0;case\"rPr\":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(e),!0}}},{key:\"tag\",get:function(){return\"r\"}},{key:\"textXform\",get:function(){return this._textXform||(this._textXform=new c)}},{key:\"fontXform\",get:function(){return this._fontXform||(this._fontXform=new f(d.FONT_OPTIONS))}}])&&o(r.prototype,n),l&&o(r,l),d}(e(\"../base-xform\"));l.FONT_OPTIONS={tagName:\"rPr\",fontNameTag:\"rFont\"},t.exports=l},{\"../base-xform\":29,\"../style/font-xform\":128,\"./text-xform\":122}],120:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./text-xform\"),f=e(\"./rich-text-xform\"),l=e(\"./phonetic-text-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(p,e);var t,r,n,h,d=(t=p,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function p(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,p),(t=d.call(this)).model=e,t.map={r:new f,t:new c,rPh:new l},t}return r=p,(n=[{key:\"render\",value:function(e,t){var r=this;e.openNode(this.tag),t&&t.hasOwnProperty(\"richText\")&&t.richText?t.richText.length?t.richText.forEach((function(t){r.map.r.render(e,t)})):this.map.t.render(e,\"\"):null!=t&&this.map.t.render(e,t),e.closeNode()}},{key:\"parseOpen\",value:function(e){var t=e.name;return this.parser?(this.parser.parseOpen(e),!0):t===this.tag?(this.model={},!0):(this.parser=this.map[t],!!this.parser&&(this.parser.parseOpen(e),!0))}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser){if(!this.parser.parseClose(e)){switch(e){case\"r\":var t=this.model.richText;t||(t=this.model.richText=[]),t.push(this.parser.model);break;case\"t\":this.model=this.parser.model}this.parser=void 0}return!0}switch(e){case this.tag:return!1;default:return!0}}},{key:\"tag\",get:function(){return\"si\"}}])&&o(r.prototype,n),h&&o(r,h),p}(e(\"../base-xform\"));t.exports=h},{\"../base-xform\":29,\"./phonetic-text-xform\":118,\"./rich-text-xform\":119,\"./text-xform\":122}],121:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/xml-stream\"),f=e(\"../base-xform\"),l=e(\"./shared-string-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,f,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(t=h.call(this)).model=e||{values:[],count:0},t.hash=Object.create(null),t.rich=Object.create(null),t}return r=d,(n=[{key:\"getString\",value:function(e){return this.model.values[e]}},{key:\"add\",value:function(e){return e.richText?this.addRichText(e):this.addText(e)}},{key:\"addText\",value:function(e){var t=this.hash[e];return void 0===t&&(t=this.hash[e]=this.model.values.length,this.model.values.push(e)),this.model.count++,t}},{key:\"addRichText\",value:function(e){var t=this.sharedStringXform.toXml(e),r=this.rich[t];return void 0===r&&(r=this.rich[t]=this.model.values.length,this.model.values.push(e)),this.model.count++,r}},{key:\"render\",value:function(e,t){t=t||this._values,e.openXml(c.StdDocAttributes),e.openNode(\"sst\",{xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",count:t.count,uniqueCount:t.values.length});var r=this.sharedStringXform;t.values.forEach((function(t){r.render(e,t)})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"sst\":return!0;case\"si\":return this.parser=this.sharedStringXform,this.parser.parseOpen(e),!0;default:throw new Error(\"Unexpected xml node in parseOpen: \".concat(JSON.stringify(e)))}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(e){case\"sst\":return!1;default:throw new Error(\"Unexpected xml node in parseClose: \".concat(e))}}},{key:\"sharedStringXform\",get:function(){return this._sharedStringXform||(this._sharedStringXform=new l)}},{key:\"values\",get:function(){return this.model.values}},{key:\"uniqueCount\",get:function(){return this.model.values.length}},{key:\"count\",get:function(){return this.model.count}}])&&o(r.prototype,n),f&&o(r,f),d}(f);t.exports=h},{\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"./shared-string-xform\":120}],122:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.openNode(\"t\"),/^\\s|\\n|\\s$/.test(t)&&e.addAttribute(\"xml:space\",\"preserve\"),e.writeText(t),e.closeNode()}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"t\":return this._text=[],!0;default:return!1}}},{key:\"parseText\",value:function(e){this._text.push(e)}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"t\"}},{key:\"model\",get:function(){return this._text.join(\"\").replace(/_x([0-9A-F]{4})_/g,(function(e,t){return String.fromCharCode(parseInt(t,16))}))}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],123:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../../../doc/enums\"),l=e(\"../../../utils/utils\"),h=e(\"../base-xform\"),d={horizontalValues:[\"left\",\"center\",\"right\",\"fill\",\"centerContinuous\",\"distributed\",\"justify\"].reduce((function(e,t){return e[t]=!0,e}),{}),horizontal:function(e){return this.horizontalValues[e]?e:void 0},verticalValues:[\"top\",\"middle\",\"bottom\",\"distributed\",\"justify\"].reduce((function(e,t){return e[t]=!0,e}),{}),vertical:function(e){return\"middle\"===e?\"center\":this.verticalValues[e]?e:void 0},wrapText:function(e){return!!e||void 0},shrinkToFit:function(e){return!!e||void 0},textRotation:function(e){switch(e){case\"vertical\":return e;default:return(e=l.validInt(e))>=-90&&e<=90?e:void 0}},indent:function(e){return e=l.validInt(e),Math.max(0,e)},readingOrder:function(e){switch(e){case\"ltr\":return f.ReadingOrder.LeftToRight;case\"rtl\":return f.ReadingOrder.RightToLeft;default:return}}},p=function(e){if(e=d.textRotation(e)){if(\"vertical\"===e)return 255;var t=Math.round(e);if(t>=0&&t<=90)return t;if(t<0&&t>=-90)return 90-t}},y=function(e){var t=l.validInt(e);if(void 0!==t){if(255===t)return\"vertical\";if(t>=0&&t<=90)return t;if(t>90&&t<=180)return 90-t}},m=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.addRollback(),e.openNode(\"alignment\");var r=!1;function n(t,n){n&&(e.addAttribute(t,n),r=!0)}n(\"horizontal\",d.horizontal(t.horizontal)),n(\"vertical\",d.vertical(t.vertical)),n(\"wrapText\",!!d.wrapText(t.wrapText)&&\"1\"),n(\"shrinkToFit\",!!d.shrinkToFit(t.shrinkToFit)&&\"1\"),n(\"indent\",d.indent(t.indent)),n(\"textRotation\",p(t.textRotation)),n(\"readingOrder\",d.readingOrder(t.readingOrder)),e.closeNode(),r?e.commit():e.rollback()}},{key:\"parseOpen\",value:function(e){var t={},r=!1;function n(e,n,o){e&&(t[n]=o,r=!0)}n(e.attributes.horizontal,\"horizontal\",e.attributes.horizontal),n(e.attributes.vertical,\"vertical\",\"center\"===e.attributes.vertical?\"middle\":e.attributes.vertical),n(e.attributes.wrapText,\"wrapText\",!!e.attributes.wrapText),n(e.attributes.shrinkToFit,\"shrinkToFit\",!!e.attributes.shrinkToFit),n(e.attributes.indent,\"indent\",parseInt(e.attributes.indent,10)),n(e.attributes.textRotation,\"textRotation\",y(e.attributes.textRotation)),n(e.attributes.readingOrder,\"readingOrder\",\"2\"===e.attributes.readingOrder?\"rtl\":\"ltr\"),this.model=r?t:null}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"alignment\"}}])&&i(r.prototype,n),f&&i(r,f),h}(h);t.exports=m},{\"../../../doc/enums\":7,\"../../../utils/utils\":24,\"../base-xform\":29}],124:[function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e){return(i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function a(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function u(e,t,r){return t&&s(e.prototype,t),r&&s(e,r),e}function c(e){return function(){var t,r=h(e);if(l()){var n=h(this).constructor;t=Reflect.construct(r,arguments,n)}else t=r.apply(this,arguments);return f(this,t)}}function f(e,t){return!t||\"object\"!==i(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function l(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function d(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&p(e,t)}function p(e,t){return(p=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var y=e(\"../base-xform\"),m=e(\"./color-xform\"),b=function(e){d(r,e);var t=c(r);function r(e){var n;return a(this,r),(n=t.call(this)).name=e,n.map={color:new m},n}return u(r,[{key:\"render\",value:function(e,t,r){var n=t&&t.color||r||this.defaultColor;e.openNode(this.name),t&&t.style&&(e.addAttribute(\"style\",t.style),n&&this.map.color.render(e,n)),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.name:var t=e.attributes.style;return this.model=t?{style:t}:void 0,!0;case\"color\":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):(e===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}},{key:\"validStyle\",value:function(e){return r.validStyleValues[e]}},{key:\"tag\",get:function(){return this.name}}]),r}(y);b.validStyleValues=[\"thin\",\"dotted\",\"dashDot\",\"hair\",\"dashDotDot\",\"slantDashDot\",\"mediumDashed\",\"mediumDashDotDot\",\"mediumDashDot\",\"medium\",\"double\",\"thick\"].reduce((function(e,t){return e[t]=!0,e}),{});var v=function(e){d(r,e);var t=c(r);function r(){var e;return a(this,r),(e=t.call(this)).map={top:new b(\"top\"),left:new b(\"left\"),bottom:new b(\"bottom\"),right:new b(\"right\"),diagonal:new b(\"diagonal\")},e}return u(r,[{key:\"render\",value:function(e,t){var r=t.color;function i(i,a){i&&!i.color&&t.color&&(i=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},i,{color:t.color})),a.render(e,i,r)}e.openNode(\"border\"),t.diagonal&&t.diagonal.style&&(t.diagonal.up&&e.addAttribute(\"diagonalUp\",\"1\"),t.diagonal.down&&e.addAttribute(\"diagonalDown\",\"1\")),i(t.left,this.map.left),i(t.right,this.map.right),i(t.top,this.map.top),i(t.bottom,this.map.bottom),i(t.diagonal,this.map.diagonal),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"border\":return this.reset(),this.diagonalUp=!!e.attributes.diagonalUp,this.diagonalDown=!!e.attributes.diagonalDown,!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;if(\"border\"===e){var t=this.model={},r=function(e,r,n){r&&(n&&Object.assign(r,n),t[e]=r)};r(\"left\",this.map.left.model),r(\"right\",this.map.right.model),r(\"top\",this.map.top.model),r(\"bottom\",this.map.bottom.model),r(\"diagonal\",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}]),r}(y);t.exports=v},{\"../base-xform\":29,\"./color-xform\":125}],125:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).name=e||\"color\",t}return r=l,(n=[{key:\"render\",value:function(e,t){return!!t&&(e.openNode(this.name),t.argb?e.addAttribute(\"rgb\",t.argb):void 0!==t.theme?(e.addAttribute(\"theme\",t.theme),void 0!==t.tint&&e.addAttribute(\"tint\",t.tint)):void 0!==t.indexed?e.addAttribute(\"indexed\",t.indexed):e.addAttribute(\"auto\",\"1\"),e.closeNode(),!0)}},{key:\"parseOpen\",value:function(e){return e.name===this.name&&(e.attributes.rgb?this.model={argb:e.attributes.rgb}:e.attributes.theme?(this.model={theme:parseInt(e.attributes.theme,10)},e.attributes.tint&&(this.model.tint=parseFloat(e.attributes.tint))):e.attributes.indexed?this.model={indexed:parseInt(e.attributes.indexed,10)}:this.model=void 0,!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return this.name}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../base-xform\"));t.exports=c},{\"../base-xform\":29}],126:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./alignment-xform\"),l=e(\"./border-xform\"),h=e(\"./fill-xform\"),d=e(\"./font-xform\"),p=e(\"./numfmt-xform\"),y=e(\"./protection-xform\"),m=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(b,e);var t,r,n,c,m=(t=b,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function b(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,b),(e=m.call(this)).map={alignment:new f,border:new l,fill:new h,font:new d,numFmt:new p,protection:new y},e}return r=b,(n=[{key:\"render\",value:function(e,t){e.openNode(this.tag),t.alignment&&this.map.alignment.render(e,t.alignment),t.border&&this.map.border.render(e,t.border),t.fill&&this.map.fill.render(e,t.fill),t.font&&this.map.font.render(e,t.font),t.numFmt&&this.map.numFmt.render(e,t.numFmt),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){return this.parser?(this.parser.parseClose(e)||(this.parser=void 0),!0):e!==this.tag||(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1)}},{key:\"tag\",get:function(){return\"dxf\"}}])&&o(r.prototype,n),c&&o(r,c),b}(c);t.exports=m},{\"../base-xform\":29,\"./alignment-xform\":123,\"./border-xform\":124,\"./fill-xform\":127,\"./font-xform\":128,\"./numfmt-xform\":129,\"./protection-xform\":130}],127:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e}function s(e){return function(){var t,r=f(e);if(c()){var n=f(this).constructor;t=Reflect.construct(r,arguments,n)}else t=r.apply(this,arguments);return u(this,t)}}function u(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function c(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var d=e(\"../base-xform\"),p=e(\"./color-xform\"),y=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={color:new p},e}return a(r,[{key:\"render\",value:function(e,t){e.openNode(\"stop\"),e.addAttribute(\"position\",t.position),this.map.color.render(e,t.color),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"stop\":return this.model={position:parseFloat(e.attributes.position)},!0;case\"color\":return this.parser=this.map.color,this.parser.parseOpen(e),!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.color=this.parser.model,this.parser=void 0),!0)}},{key:\"tag\",get:function(){return\"stop\"}}]),r}(d),m=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={fgColor:new p(\"fgColor\"),bgColor:new p(\"bgColor\")},e}return a(r,[{key:\"render\",value:function(e,t){e.openNode(\"patternFill\"),e.addAttribute(\"patternType\",t.pattern),t.fgColor&&this.map.fgColor.render(e,t.fgColor),t.bgColor&&this.map.bgColor.render(e,t.bgColor),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"patternFill\":return this.model={type:\"pattern\",pattern:e.attributes.patternType},!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){return!!this.parser&&(this.parser.parseClose(e)||(this.parser.model&&(this.model[e]=this.parser.model),this.parser=void 0),!0)}},{key:\"name\",get:function(){return\"pattern\"}},{key:\"tag\",get:function(){return\"patternFill\"}}]),r}(d),b=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={stop:new y},e}return a(r,[{key:\"render\",value:function(e,t){switch(e.openNode(\"gradientFill\"),t.gradient){case\"angle\":e.addAttribute(\"degree\",t.degree);break;case\"path\":e.addAttribute(\"type\",\"path\"),t.center.left&&(e.addAttribute(\"left\",t.center.left),void 0===t.center.right&&e.addAttribute(\"right\",t.center.left)),t.center.right&&e.addAttribute(\"right\",t.center.right),t.center.top&&(e.addAttribute(\"top\",t.center.top),void 0===t.center.bottom&&e.addAttribute(\"bottom\",t.center.top)),t.center.bottom&&e.addAttribute(\"bottom\",t.center.bottom)}var r=this.map.stop;t.stops.forEach((function(t){r.render(e,t)})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"gradientFill\":var t=this.model={stops:[]};return e.attributes.degree?(t.gradient=\"angle\",t.degree=parseInt(e.attributes.degree,10)):\"path\"===e.attributes.type&&(t.gradient=\"path\",t.center={left:e.attributes.left?parseFloat(e.attributes.left):0,top:e.attributes.top?parseFloat(e.attributes.top):0},e.attributes.right!==e.attributes.left&&(t.center.right=e.attributes.right?parseFloat(e.attributes.right):0),e.attributes.bottom!==e.attributes.top&&(t.center.bottom=e.attributes.bottom?parseFloat(e.attributes.bottom):0)),!0;case\"stop\":return this.parser=this.map.stop,this.parser.parseOpen(e),!0;default:return!1}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0)}},{key:\"name\",get:function(){return\"gradient\"}},{key:\"tag\",get:function(){return\"gradientFill\"}}]),r}(d),v=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).map={patternFill:new m,gradientFill:new b},e}return a(r,[{key:\"render\",value:function(e,t){switch(e.addRollback(),e.openNode(\"fill\"),t.type){case\"pattern\":this.map.patternFill.render(e,t);break;case\"gradient\":this.map.gradientFill.render(e,t);break;default:return void e.rollback()}e.closeNode(),e.commit()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"fill\":return this.model={},!0;default:return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){return!!this.parser&&(this.parser.parseClose(e)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0)}},{key:\"validStyle\",value:function(e){return r.validPatternValues[e]}},{key:\"tag\",get:function(){return\"fill\"}}]),r}(d);v.validPatternValues=[\"none\",\"solid\",\"darkVertical\",\"darkGray\",\"mediumGray\",\"lightGray\",\"gray125\",\"gray0625\",\"darkHorizontal\",\"darkVertical\",\"darkDown\",\"darkUp\",\"darkGrid\",\"darkTrellis\",\"lightHorizontal\",\"lightVertical\",\"lightDown\",\"lightUp\",\"lightGrid\",\"lightTrellis\",\"lightGrid\"].reduce((function(e,t){return e[t]=!0,e}),{}),v.StopXform=y,v.PatternFillXform=m,v.GradientFillXform=b,t.exports=v},{\"../base-xform\":29,\"./color-xform\":125}],128:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"./color-xform\"),f=e(\"../simple/boolean-xform\"),l=e(\"../simple/integer-xform\"),h=e(\"../simple/string-xform\"),d=e(\"./underline-xform\"),p=e(\"../../../utils/under-dash\"),y=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(b,e);var t,r,n,y,m=(t=b,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function b(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,b),(t=m.call(this)).options=e||b.OPTIONS,t.map={b:{prop:\"bold\",xform:new f({tag:\"b\",attr:\"val\"})},i:{prop:\"italic\",xform:new f({tag:\"i\",attr:\"val\"})},u:{prop:\"underline\",xform:new d},charset:{prop:\"charset\",xform:new l({tag:\"charset\",attr:\"val\"})},color:{prop:\"color\",xform:new c},condense:{prop:\"condense\",xform:new f({tag:\"condense\",attr:\"val\"})},extend:{prop:\"extend\",xform:new f({tag:\"extend\",attr:\"val\"})},family:{prop:\"family\",xform:new l({tag:\"family\",attr:\"val\"})},outline:{prop:\"outline\",xform:new f({tag:\"outline\",attr:\"val\"})},vertAlign:{prop:\"vertAlign\",xform:new h({tag:\"vertAlign\",attr:\"val\"})},scheme:{prop:\"scheme\",xform:new h({tag:\"scheme\",attr:\"val\"})},shadow:{prop:\"shadow\",xform:new f({tag:\"shadow\",attr:\"val\"})},strike:{prop:\"strike\",xform:new f({tag:\"strike\",attr:\"val\"})},sz:{prop:\"size\",xform:new l({tag:\"sz\",attr:\"val\"})}},t.map[t.options.fontNameTag]={prop:\"name\",xform:new h({tag:t.options.fontNameTag,attr:\"val\"})},t}return r=b,(n=[{key:\"render\",value:function(e,t){var r=this.map;e.openNode(this.options.tagName),p.each(this.map,(function(n,o){r[o].xform.render(e,t[n.prop])})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;if(this.map[e.name])return this.parser=this.map[e.name].xform,this.parser.parseOpen(e);switch(e.name){case this.options.tagName:return this.model={},!0;default:return!1}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser&&!this.parser.parseClose(e)){var t=this.map[e];return this.parser.model&&(this.model[t.prop]=this.parser.model),this.parser=void 0,!0}switch(e){case this.options.tagName:return!1;default:return!0}}},{key:\"tag\",get:function(){return this.options.tagName}}])&&o(r.prototype,n),y&&o(r,y),b}(e(\"../base-xform\"));y.OPTIONS={tagName:\"font\",fontNameTag:\"name\"},t.exports=y},{\"../../../utils/under-dash\":23,\"../base-xform\":29,\"../simple/boolean-xform\":113,\"../simple/integer-xform\":115,\"../simple/string-xform\":116,\"./color-xform\":125,\"./underline-xform\":133}],129:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../../../utils/under-dash\"),f=e(\"../../defaultnumformats\"),l=e(\"../base-xform\");var h,d=(h={},c.each(f,(function(e,t){e.f&&(h[e.f]=parseInt(t,10))})),h),p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e,t){var r;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(r=f.call(this)).id=e,r.formatCode=t,r}return r=l,(n=[{key:\"render\",value:function(e,t){e.leafNode(\"numFmt\",{numFmtId:t.id,formatCode:t.formatCode})}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"numFmt\":return this.model={id:parseInt(e.attributes.numFmtId,10),formatCode:e.attributes.formatCode.replace(/[\\\\](.)/g,\"$1\")},!0;default:return!1}}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"numFmt\"}}])&&o(r.prototype,n),c&&o(r,c),l}(l);p.getDefaultFmtId=function(e){return d[e]},p.getDefaultFmtCode=function(e){return f[e]&&f[e].f},t.exports=p},{\"../../../utils/under-dash\":23,\"../../defaultnumformats\":27,\"../base-xform\":29}],130:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=e(\"../base-xform\"),l=function(e,t){return void 0===e?t:e},h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(d,e);var t,r,n,f,h=(t=d,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function d(){return o(this,d),h.apply(this,arguments)}return r=d,(n=[{key:\"render\",value:function(e,t){e.addRollback(),e.openNode(\"protection\");var r=!1;function n(t,n){void 0!==n&&(e.addAttribute(t,n),r=!0)}n(\"locked\",l(t.locked,!0)?void 0:\"0\"),n(\"hidden\",l(t.hidden,!1)?\"1\":void 0),e.closeNode(),r?e.commit():e.rollback()}},{key:\"parseOpen\",value:function(e){var t={locked:!(\"0\"===e.attributes.locked),hidden:\"1\"===e.attributes.hidden},r=!t.locked||t.hidden;this.model=r?t:null}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"protection\"}}])&&i(r.prototype,n),f&&i(r,f),d}(f);t.exports=h},{\"../base-xform\":29}],131:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./alignment-xform\"),l=e(\"./protection-xform\"),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var t,r,n,c,h=(t=d,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function d(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(t=h.call(this)).xfId=!(!e||!e.xfId),t.map={alignment:new f,protection:new l},t}return r=d,(n=[{key:\"render\",value:function(e,t){e.openNode(\"xf\",{numFmtId:t.numFmtId||0,fontId:t.fontId||0,fillId:t.fillId||0,borderId:t.borderId||0}),this.xfId&&e.addAttribute(\"xfId\",t.xfId||0),t.numFmtId&&e.addAttribute(\"applyNumberFormat\",\"1\"),t.fontId&&e.addAttribute(\"applyFont\",\"1\"),t.fillId&&e.addAttribute(\"applyFill\",\"1\"),t.borderId&&e.addAttribute(\"applyBorder\",\"1\"),t.alignment&&e.addAttribute(\"applyAlignment\",\"1\"),t.protection&&e.addAttribute(\"applyProtection\",\"1\"),t.alignment&&this.map.alignment.render(e,t.alignment),t.protection&&this.map.protection.render(e,t.protection),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"xf\":return this.model={numFmtId:parseInt(e.attributes.numFmtId,10),fontId:parseInt(e.attributes.fontId,10),fillId:parseInt(e.attributes.fillId,10),borderId:parseInt(e.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(e.attributes.xfId,10)),!0;case\"alignment\":return this.parser=this.map.alignment,this.parser.parseOpen(e),!0;case\"protection\":return this.parser=this.map.protection,this.parser.parseOpen(e),!0;default:return!1}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){return this.parser?(this.parser.parseClose(e)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):\"xf\"!==e}},{key:\"tag\",get:function(){return\"xf\"}}])&&o(r.prototype,n),c&&o(r,c),d}(c);t.exports=h},{\"../base-xform\":29,\"./alignment-xform\":123,\"./protection-xform\":130}],132:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e}function s(e){return function(){var t,r=f(e);if(c()){var n=f(this).constructor;t=Reflect.construct(r,arguments,n)}else t=r.apply(this,arguments);return u(this,t)}}function u(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function c(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function f(e){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var d=e(\"../../../doc/enums\"),p=e(\"../../../utils/xml-stream\"),y=e(\"../base-xform\"),m=e(\"../static-xform\"),b=e(\"../list-xform\"),v=e(\"./font-xform\"),g=e(\"./fill-xform\"),w=e(\"./border-xform\"),_=e(\"./numfmt-xform\"),k=e(\"./style-xform\"),x=e(\"./dxf-xform\"),S=function(e){l(r,e);var t=s(r);function r(e){var n;return o(this,r),(n=t.call(this)).map={numFmts:new b({tag:\"numFmts\",count:!0,childXform:new _}),fonts:new b({tag:\"fonts\",count:!0,childXform:new v,$:{\"x14ac:knownFonts\":1}}),fills:new b({tag:\"fills\",count:!0,childXform:new g}),borders:new b({tag:\"borders\",count:!0,childXform:new w}),cellStyleXfs:new b({tag:\"cellStyleXfs\",count:!0,childXform:new k}),cellXfs:new b({tag:\"cellXfs\",count:!0,childXform:new k({xfId:!0})}),dxfs:new b({tag:\"dxfs\",always:!0,count:!0,childXform:new x}),numFmt:new _,font:new v,fill:new g,border:new w,style:new k({xfId:!0}),cellStyles:r.STATIC_XFORMS.cellStyles,tableStyles:r.STATIC_XFORMS.tableStyles,extLst:r.STATIC_XFORMS.extLst},e&&n.init(),n}return a(r,[{key:\"initIndex\",value:function(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}},{key:\"init\",value:function(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:\"pattern\",pattern:\"none\"}),this._addFill({type:\"pattern\",pattern:\"gray125\"}),this.weakMap=new WeakMap}},{key:\"render\",value:function(e,t){t=t||this.model,e.openXml(p.StdDocAttributes),e.openNode(\"styleSheet\",r.STYLESHEET_ATTRIBUTES),this.index?(t.numFmts&&t.numFmts.length&&(e.openNode(\"numFmts\",{count:t.numFmts.length}),t.numFmts.forEach((function(t){e.writeXml(t)})),e.closeNode()),t.fonts.length||this._addFont({size:11,color:{theme:1},name:\"Calibri\",family:2,scheme:\"minor\"}),e.openNode(\"fonts\",{count:t.fonts.length,\"x14ac:knownFonts\":1}),t.fonts.forEach((function(t){e.writeXml(t)})),e.closeNode(),e.openNode(\"fills\",{count:t.fills.length}),t.fills.forEach((function(t){e.writeXml(t)})),e.closeNode(),e.openNode(\"borders\",{count:t.borders.length}),t.borders.forEach((function(t){e.writeXml(t)})),e.closeNode(),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),e.openNode(\"cellXfs\",{count:t.styles.length}),t.styles.forEach((function(t){e.writeXml(t)})),e.closeNode()):(this.map.numFmts.render(e,t.numFmts),this.map.fonts.render(e,t.fonts),this.map.fills.render(e,t.fills),this.map.borders.render(e,t.borders),this.map.cellStyleXfs.render(e,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(e,t.styles)),r.STATIC_XFORMS.cellStyles.render(e),this.map.dxfs.render(e,t.dxfs),r.STATIC_XFORMS.tableStyles.render(e),r.STATIC_XFORMS.extLst.render(e),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case\"styleSheet\":return this.initIndex(),!0;default:return this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){var t=this;if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case\"styleSheet\":this.model={};var r=function(e,r){r.model&&r.model.length&&(t.model[e]=r.model)};if(r(\"numFmts\",this.map.numFmts),r(\"fonts\",this.map.fonts),r(\"fills\",this.map.fills),r(\"borders\",this.map.borders),r(\"styles\",this.map.cellXfs),r(\"dxfs\",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){var n=this.index.numFmt;this.model.numFmts.forEach((function(e){n[e.id]=e.formatCode}))}return!1;default:return!0}}},{key:\"addStyleModel\",value:function(e,t){if(!e)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:\"Calibri\",family:2,scheme:\"minor\"}),this.weakMap&&this.weakMap.has(e))return this.weakMap.get(e);var r={};if(t=t||d.ValueType.Number,e.numFmt)r.numFmtId=this._addNumFmtStr(e.numFmt);else switch(t){case d.ValueType.Number:r.numFmtId=this._addNumFmtStr(\"General\");break;case d.ValueType.Date:r.numFmtId=this._addNumFmtStr(\"mm-dd-yy\")}e.font&&(r.fontId=this._addFont(e.font)),e.border&&(r.borderId=this._addBorder(e.border)),e.fill&&(r.fillId=this._addFill(e.fill)),e.alignment&&(r.alignment=e.alignment),e.protection&&(r.protection=e.protection);var n=this._addStyle(r);return this.weakMap&&this.weakMap.set(e,n),n}},{key:\"getStyleModel\",value:function(e){var t=this.model.styles[e];if(!t)return null;var r=this.index.model[e];if(r)return r;if(r=this.index.model[e]={},t.numFmtId){var n=this.index.numFmt[t.numFmtId]||_.getDefaultFmtCode(t.numFmtId);n&&(r.numFmt=n)}function o(e,t,n){if(n||0===n){var o=t[n];o&&(r[e]=o)}}return o(\"font\",this.model.fonts,t.fontId),o(\"border\",this.model.borders,t.borderId),o(\"fill\",this.model.fills,t.fillId),t.alignment&&(r.alignment=t.alignment),t.protection&&(r.protection=t.protection),r}},{key:\"addDxfStyle\",value:function(e){return this.model.dxfs.push(e),this.model.dxfs.length-1}},{key:\"getDxfStyle\",value:function(e){return this.model.dxfs[e]}},{key:\"_addStyle\",value:function(e){var t=this.map.style.toXml(e),r=this.index.style[t];return void 0===r&&(r=this.index.style[t]=this.model.styles.length,this.model.styles.push(t)),r}},{key:\"_addNumFmtStr\",value:function(e){var t=_.getDefaultFmtId(e);if(void 0!==t)return t;if(void 0!==(t=this.index.numFmt[e]))return t;t=this.index.numFmt[e]=164+this.model.numFmts.length;var r=this.map.numFmt.toXml({id:t,formatCode:e});return this.model.numFmts.push(r),t}},{key:\"_addFont\",value:function(e){var t=this.map.font.toXml(e),r=this.index.font[t];return void 0===r&&(r=this.index.font[t]=this.model.fonts.length,this.model.fonts.push(t)),r}},{key:\"_addBorder\",value:function(e){var t=this.map.border.toXml(e),r=this.index.border[t];return void 0===r&&(r=this.index.border[t]=this.model.borders.length,this.model.borders.push(t)),r}},{key:\"_addFill\",value:function(e){var t=this.map.fill.toXml(e),r=this.index.fill[t];return void 0===r&&(r=this.index.fill[t]=this.model.fills.length,this.model.fills.push(t)),r}}]),r}(y);S.STYLESHEET_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"x14ac x16r2\",\"xmlns:x14ac\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\",\"xmlns:x16r2\":\"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main\"},S.STATIC_XFORMS={cellStyles:new m({tag:\"cellStyles\",$:{count:1},c:[{tag:\"cellStyle\",$:{name:\"Normal\",xfId:0,builtinId:0}}]}),dxfs:new m({tag:\"dxfs\",$:{count:0}}),tableStyles:new m({tag:\"tableStyles\",$:{count:0,defaultTableStyle:\"TableStyleMedium2\",defaultPivotStyle:\"PivotStyleLight16\"}}),extLst:new m({tag:\"extLst\",c:[{tag:\"ext\",$:{uri:\"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}\",\"xmlns:x14\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"},c:[{tag:\"x14:slicerStyles\",$:{defaultSlicerStyle:\"SlicerStyleLight1\"}}]},{tag:\"ext\",$:{uri:\"{9260A510-F301-46a8-8635-F512D64BE5F5}\",\"xmlns:x15\":\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"},c:[{tag:\"x15:timelineStyles\",$:{defaultTimelineStyle:\"TimeSlicerStyleLight1\"}}]}]})};var O=function(e){l(r,e);var t=s(r);function r(){var e;return o(this,r),(e=t.call(this)).model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:\"Calibri\",family:2,scheme:\"minor\"}],borders:[{}],fills:[{type:\"pattern\",pattern:\"none\"},{type:\"pattern\",pattern:\"gray125\"}]},e}return a(r,[{key:\"parseStream\",value:function(e){return e.autodrain(),Promise.resolve()}},{key:\"addStyleModel\",value:function(e,t){switch(t){case d.ValueType.Date:return this.dateStyleId;default:return 0}}},{key:\"getStyleModel\",value:function(){return{}}},{key:\"dateStyleId\",get:function(){if(!this._dateStyleId){var e={numFmtId:_.getDefaultFmtId(\"mm-dd-yy\")};this._dateStyleId=this.model.styles.length,this.model.styles.push(e)}return this._dateStyleId}}]),r}(S);S.Mock=O,t.exports=S},{\"../../../doc/enums\":7,\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"../list-xform\":68,\"../static-xform\":117,\"./border-xform\":124,\"./dxf-xform\":126,\"./fill-xform\":127,\"./font-xform\":128,\"./numfmt-xform\":129,\"./style-xform\":131}],133:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(l,e);var t,r,n,c,f=(t=l,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l),(t=f.call(this)).model=e,t}return r=l,(n=[{key:\"render\",value:function(e,t){if(!0===(t=t||this.model))e.leafNode(\"u\");else{var r=l.Attributes[t];r&&e.leafNode(\"u\",r)}}},{key:\"parseOpen\",value:function(e){\"u\"===e.name&&(this.model=e.attributes.val||!0)}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"u\"}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"../base-xform\"));c.Attributes={single:{},double:{val:\"double\"},singleAccounting:{val:\"singleAccounting\"},doubleAccounting:{val:\"doubleAccounting\"}},t.exports=c},{\"../base-xform\":29}],134:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=e(\"../base-xform\"),f=e(\"./filter-column-xform\"),l=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(h,e);var t,r,n,c,l=(t=h,function(){var e,r=s(t);if(a()){var n=s(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return i(this,e)});function h(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,h),(e=l.call(this)).map={filterColumn:new f},e}return r=h,(n=[{key:\"prepare\",value:function(e){var t=this;e.columns.forEach((function(e,r){t.map.filterColumn.prepare(e,{index:r})}))}},{key:\"render\",value:function(e,t){var r=this;return e.openNode(this.tag,{ref:t.autoFilterRef}),t.columns.forEach((function(t){r.map.filterColumn.render(e,t)})),e.closeNode(),!0}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;switch(e.name){case this.tag:return this.model={autoFilterRef:e.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[e.name],this.parser)return this.parseOpen(e),!0;throw new Error(\"Unexpected xml node in parseOpen: \".concat(JSON.stringify(e)))}}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(e){case this.tag:return!1;default:throw new Error(\"Unexpected xml node in parseClose: \".concat(e))}}},{key:\"tag\",get:function(){return\"autoFilter\"}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../base-xform\":29,\"./filter-column-xform\":135}],135:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"prepare\",value:function(e,t){e.colId=t.index.toString()}},{key:\"render\",value:function(e,t){return e.leafNode(this.tag,{colId:t.colId,hiddenButton:t.filterButton?\"0\":\"1\"}),!0}},{key:\"parseOpen\",value:function(e){if(e.name===this.tag){var t=e.attributes;return this.model={filterButton:\"0\"===t.hiddenButton},!0}return!1}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"filterColumn\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],136:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"prepare\",value:function(e,t){e.id=t.index+1}},{key:\"render\",value:function(e,t){return e.leafNode(this.tag,{id:t.id.toString(),name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId}),!0}},{key:\"parseOpen\",value:function(e){if(e.name===this.tag){var t=e.attributes;return this.model={name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId},!0}return!1}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"tableColumn\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],137:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var f=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){return e.leafNode(this.tag,{name:t.theme?t.theme:void 0,showFirstColumn:t.showFirstColumn?\"1\":\"0\",showLastColumn:t.showLastColumn?\"1\":\"0\",showRowStripes:t.showRowStripes?\"1\":\"0\",showColumnStripes:t.showColumnStripes?\"1\":\"0\"}),!0}},{key:\"parseOpen\",value:function(e){if(e.name===this.tag){var t=e.attributes;return this.model={theme:t.name?t.name:null,showFirstColumn:\"1\"===t.showFirstColumn,showLastColumn:\"1\"===t.showLastColumn,showRowStripes:\"1\"===t.showRowStripes,showColumnStripes:\"1\"===t.showColumnStripes},!0}return!1}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"tableStyleInfo\"}}])&&i(r.prototype,n),f&&i(r,f),h}(e(\"../base-xform\"));t.exports=f},{\"../base-xform\":29}],138:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function u(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var l=e(\"../../../utils/xml-stream\"),h=e(\"../base-xform\"),d=e(\"../list-xform\"),p=e(\"./auto-filter-xform\"),y=e(\"./table-column-xform\"),m=e(\"./table-style-info-xform\"),b=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(v,e);var t,r,n,h,b=(t=v,function(){var e,r=c(t);if(u()){var n=c(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return s(this,e)});function v(){var e;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,v),(e=b.call(this)).map={autoFilter:new p,tableColumns:new d({tag:\"tableColumns\",count:!0,empty:!0,childXform:new y}),tableStyleInfo:new m},e}return r=v,(n=[{key:\"prepare\",value:function(e,t){this.map.autoFilter.prepare(e),this.map.tableColumns.prepare(e.columns,t)}},{key:\"render\",value:function(e,t){e.openXml(l.StdDocAttributes),e.openNode(this.tag,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},v.TABLE_ATTRIBUTES,{id:t.id,name:t.name,displayName:t.displayName||t.name,ref:t.tableRef,totalsRowCount:t.totalsRow?\"1\":void 0,totalsRowShown:t.totalsRow?void 0:\"1\",headerRowCount:t.headerRow?\"1\":\"0\"})),this.map.autoFilter.render(e,t),this.map.tableColumns.render(e,t.columns),this.map.tableStyleInfo.render(e,t.style),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;var t=e.name,r=e.attributes;switch(t){case this.tag:this.reset(),this.model={name:r.name,displayName:r.displayName||r.name,tableRef:r.ref,totalsRow:\"1\"===r.totalsRowCount,headerRow:\"1\"===r.headerRowCount};break;default:this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e)}return!0}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){var t=this;if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((function(e,r){t.model.columns[r].filterButton=e.filterButton}))),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}},{key:\"reconcile\",value:function(e,t){e.columns.forEach((function(e){void 0!==e.dxfId&&(e.style=t.styles.getDxfStyle(e.dxfId))}))}},{key:\"tag\",get:function(){return\"table\"}}])&&a(r.prototype,n),h&&a(r,h),v}(h);b.TABLE_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"xr xr3\",\"xmlns:xr\":\"http://schemas.microsoft.com/office/spreadsheetml/2014/revision\",\"xmlns:xr3\":\"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3\"},t.exports=b},{\"../../../utils/xml-stream\":25,\"../base-xform\":29,\"../list-xform\":68,\"./auto-filter-xform\":134,\"./table-column-xform\":136,\"./table-style-info-xform\":137}],139:[function(e,t,r){(function(r){function n(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function o(e){return function(){var t=this,r=arguments;return new Promise((function(o,i){var a=e.apply(t,r);function s(e){n(a,o,i,s,u,\"next\",e)}function u(e){n(a,o,i,s,u,\"throw\",e)}s(void 0)}))}}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var a=e(\"fs\"),s=e(\"../utils/zip-stream\"),u=e(\"../utils/stream-buf\"),c=e(\"../utils/utils\"),f=e(\"../utils/xml-stream\"),l=e(\"./xform/style/styles-xform\"),h=e(\"./xform/core/core-xform\"),d=e(\"./xform/strings/shared-strings-xform\"),p=e(\"./xform/core/relationships-xform\"),y=e(\"./xform/core/content-types-xform\"),m=e(\"./xform/core/app-xform\"),b=e(\"./xform/book/workbook-xform\"),v=e(\"./xform/sheet/worksheet-xform\"),g=e(\"./xform/drawing/drawing-xform\"),w=e(\"./xform/table/table-xform\"),_=e(\"./xform/comment/comments-xform\"),k=e(\"./xform/comment/vml-notes-xform\"),x=e(\"./xml/theme1.js\");function S(e,t){return new Promise((function(r,n){a.readFile(e,t,(function(e,t){e?n(e):r(t)}))}))}var O=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.workbook=t}var t,n,O,E,R,j,T,C,P,A,M,I,N,D,B,F,L,z,U,H,V,W,q,$,X,K;return t=e,(n=[{key:\"readFile\",value:(K=o(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,c.fs.exists(t);case 2:if(e.sent){e.next=4;break}throw new Error(\"File not found: \".concat(t));case 4:return n=a.createReadStream(t),e.prev=5,e.next=8,this.read(n,r);case 8:return o=e.sent,n.close(),e.abrupt(\"return\",o);case 13:throw e.prev=13,e.t0=e.catch(5),n.close(),e.t0;case 17:case\"end\":return e.stop()}}),e,this,[[5,13]])}))),function(e,t){return K.apply(this,arguments)})},{key:\"parseRels\",value:function(e){return(new p).parseStream(e)}},{key:\"parseWorkbook\",value:function(e){return(new b).parseStream(e)}},{key:\"parseSharedStrings\",value:function(e){return(new d).parseStream(e)}},{key:\"reconcile\",value:function(e,t){var r=new b,n=new v(t),o=new g,i=new w;r.reconcile(e);var a={media:e.media,mediaIndex:e.mediaIndex};Object.keys(e.drawings).forEach((function(t){var r=e.drawings[t],n=e.drawingRels[t];n&&(a.rels=n.reduce((function(e,t){return e[t.Id]=t,e}),{}),(r.anchors||[]).forEach((function(e){var t=e.picture&&e.picture.hyperlinks;t&&a.rels[t.rId]&&(t.hyperlink=a.rels[t.rId].Target,delete t.rId)})),o.reconcile(r,a))}));var s={styles:e.styles};Object.values(e.tables).forEach((function(e){i.reconcile(e,s)}));var u={styles:e.styles,sharedStrings:e.sharedStrings,media:e.media,mediaIndex:e.mediaIndex,date1904:e.properties&&e.properties.date1904,drawings:e.drawings,comments:e.comments,tables:e.tables,vmlDrawings:e.vmlDrawings};e.worksheets.forEach((function(t){t.relationships=e.worksheetRels[t.sheetNo],n.reconcile(t,u)})),delete e.worksheetHash,delete e.worksheetRels,delete e.globalRels,delete e.sharedStrings,delete e.workbookRels,delete e.sheetDefs,delete e.styles,delete e.mediaIndex,delete e.drawings,delete e.drawingRels,delete e.vmlDrawings}},{key:\"_processWorksheetEntry\",value:(X=o(regeneratorRuntime.mark((function e(t,r,n,o){var i,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=new v(o),e.next=3,i.parseStream(t);case 3:(a=e.sent).sheetNo=n,r.worksheetHash[t.path]=a,r.worksheets.push(a);case 7:case\"end\":return e.stop()}}),e)}))),function(e,t,r,n){return X.apply(this,arguments)})},{key:\"_processCommentEntry\",value:($=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new _,e.next=3,o.parseStream(t);case 3:i=e.sent,r.comments[\"../\".concat(n,\".xml\")]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return $.apply(this,arguments)})},{key:\"_processTableEntry\",value:(q=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new w,e.next=3,o.parseStream(t);case 3:i=e.sent,r.tables[\"../tables/\".concat(n,\".xml\")]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return q.apply(this,arguments)})},{key:\"_processWorksheetRelsEntry\",value:(W=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new p,e.next=3,o.parseStream(t);case 3:i=e.sent,r.worksheetRels[n]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return W.apply(this,arguments)})},{key:\"_processMediaEntry\",value:(V=o(regeneratorRuntime.mark((function e(t,r,n){var o,i,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!((o=n.lastIndexOf(\".\"))>=1)){e.next=6;break}return i=n.substr(o+1),a=n.substr(0,o),e.next=6,new Promise((function(e,o){var s=new u;s.on(\"finish\",(function(){r.mediaIndex[n]=r.media.length,r.mediaIndex[a]=r.media.length;var t={type:\"image\",name:a,extension:i,buffer:s.toBuffer()};r.media.push(t),e()})),t.on(\"error\",(function(e){o(e)})),t.pipe(s)}));case 6:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return V.apply(this,arguments)})},{key:\"_processDrawingEntry\",value:(H=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new g,e.next=3,o.parseStream(t);case 3:i=e.sent,r.drawings[n]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return H.apply(this,arguments)})},{key:\"_processDrawingRelsEntry\",value:(U=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new p,e.next=3,o.parseStream(t);case 3:i=e.sent,r.drawingRels[n]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return U.apply(this,arguments)})},{key:\"_processVmlDrawingEntry\",value:(z=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new k,e.next=3,o.parseStream(t);case 3:i=e.sent,r.vmlDrawings[\"../drawings/\".concat(n,\".vml\")]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return z.apply(this,arguments)})},{key:\"_processThemeEntry\",value:(L=o(regeneratorRuntime.mark((function e(t,r,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,new Promise((function(e,o){var i=new u;t.on(\"error\",o),i.on(\"error\",o),i.on(\"finish\",(function(){r.themes[n]=i.read().toString(),e()})),t.pipe(i)}));case 2:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return L.apply(this,arguments)})},{key:\"createInputStream\",value:function(e){return console.warn(\"`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 4.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\"),this._createInputStream(e)}},{key:\"_createInputStream\",value:function(e){var t=this,r={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},n=[],i=new s.ZipReader({getEntryType:function(e){return e.match(/xl\\/media\\//)?\"nodebuffer\":\"string\"}});return i.on(\"entry\",(function(i){n.push(o(regeneratorRuntime.mark((function n(){var o,a,s,u,c,f,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:n.prev=0,\"/\"===(o=i.path)[0]&&(o=o.substr(1)),n.t0=o,n.next=\"_rels/.rels\"===n.t0?6:\"xl/workbook.xml\"===n.t0?10:\"xl/_rels/workbook.xml.rels\"===n.t0?19:\"xl/sharedStrings.xml\"===n.t0?23:\"xl/styles.xml\"===n.t0?27:\"docProps/app.xml\"===n.t0?31:\"docProps/core.xml\"===n.t0?38:44;break;case 6:return n.next=8,t.parseRels(i);case 8:return r.globalRels=n.sent,n.abrupt(\"break\",90);case 10:return n.next=12,t.parseWorkbook(i);case 12:return a=n.sent,r.sheets=a.sheets,r.definedNames=a.definedNames,r.views=a.views,r.properties=a.properties,r.calcProperties=a.calcProperties,n.abrupt(\"break\",90);case 19:return n.next=21,t.parseRels(i);case 21:return r.workbookRels=n.sent,n.abrupt(\"break\",90);case 23:return r.sharedStrings=new d,n.next=26,r.sharedStrings.parseStream(i);case 26:return n.abrupt(\"break\",90);case 27:return r.styles=new l,n.next=30,r.styles.parseStream(i);case 30:return n.abrupt(\"break\",90);case 31:return s=new m,n.next=34,s.parseStream(i);case 34:return u=n.sent,r.company=u.company,r.manager=u.manager,n.abrupt(\"break\",90);case 38:return c=new h,n.next=41,c.parseStream(i);case 41:return f=n.sent,Object.assign(r,f),n.abrupt(\"break\",90);case 44:if(!(p=i.path.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/))){n.next=49;break}return n.next=48,t._processWorksheetEntry(i,r,p[1],e);case 48:return n.abrupt(\"break\",90);case 49:if(!(p=i.path.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/))){n.next=54;break}return n.next=53,t._processWorksheetRelsEntry(i,r,p[1]);case 53:return n.abrupt(\"break\",90);case 54:if(!(p=i.path.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/))){n.next=59;break}return n.next=58,t._processThemeEntry(i,r,p[1]);case 58:return n.abrupt(\"break\",90);case 59:if(!(p=i.path.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/))){n.next=64;break}return n.next=63,t._processMediaEntry(i,r,p[1]);case 63:return n.abrupt(\"break\",90);case 64:if(!(p=i.path.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/))){n.next=69;break}return n.next=68,t._processDrawingEntry(i,r,p[1]);case 68:return n.abrupt(\"break\",90);case 69:if(!(p=i.path.match(/xl\\/(comments\\d+)[.]xml/))){n.next=74;break}return n.next=73,t._processCommentEntry(i,r,p[1]);case 73:return n.abrupt(\"break\",90);case 74:if(!(p=i.path.match(/xl\\/tables\\/(table\\d+)[.]xml/))){n.next=79;break}return n.next=78,t._processTableEntry(i,r,p[1]);case 78:return n.abrupt(\"break\",90);case 79:if(!(p=i.path.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/))){n.next=84;break}return n.next=83,t._processDrawingRelsEntry(i,r,p[1]);case 83:return n.abrupt(\"break\",90);case 84:if(!(p=i.path.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/))){n.next=89;break}return n.next=88,t._processVmlDrawingEntry(i,r,p[1]);case 88:return n.abrupt(\"break\",90);case 89:i.autodrain();case 90:n.next=95;break;case 92:n.prev=92,n.t1=n.catch(0),t.error=n.t1;case 95:case\"end\":return n.stop()}}),n,null,[[0,92]])})))())})),i.on(\"finished\",o(regeneratorRuntime.mark((function o(){return regeneratorRuntime.wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.prev=0,o.next=3,Promise.all(n);case 3:if(!t.error){o.next=5;break}throw t.error;case 5:t.reconcile(r,e),t.workbook.model=r,i.emit(\"done\"),o.next=13;break;case 10:o.prev=10,o.t0=o.catch(0),i.emit(\"error\",o.t0);case 13:case\"end\":return o.stop()}}),o,null,[[0,10]])})))),i}},{key:\"read\",value:function(e,t){var r=this;return new Promise((function(n,o){t=t||{};var i=r._createInputStream(t);i.on(\"done\",(function(){n(r.workbook)})).on(\"error\",(function(e){o(e)})),e.pipe(i)}))}},{key:\"load\",value:function(e,t){var n=this;void 0===t&&(t={});var o=this._createInputStream();return new Promise((function(i,a){if(o.on(\"done\",(function(){i(n.workbook)})).on(\"error\",(function(e){a(e)})),t.base64){var s=r.from(e.toString(),\"base64\");o.write(s)}else o.write(e);o.end()}))}},{key:\"addMedia\",value:(F=o(regeneratorRuntime.mark((function e(t,r){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all(r.media.map(function(){var e=o(regeneratorRuntime.mark((function e(r){var n,o,i,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(\"image\"!==r.type){e.next=13;break}if(n=\"xl/media/\".concat(r.name,\".\").concat(r.extension),!r.filename){e.next=7;break}return e.next=5,S(r.filename);case 5:return o=e.sent,e.abrupt(\"return\",t.append(o,{name:n}));case 7:if(!r.buffer){e.next=9;break}return e.abrupt(\"return\",t.append(r.buffer,{name:n}));case 9:if(!r.base64){e.next=13;break}return i=r.base64,a=i.substring(i.indexOf(\",\")+1),e.abrupt(\"return\",t.append(a,{name:n,base64:!0}));case 13:throw new Error(\"Unsupported media\");case 14:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return F.apply(this,arguments)})},{key:\"addDrawings\",value:function(e,t){var r=new g,n=new p;t.worksheets.forEach((function(t){var o=t.drawing;if(o){r.prepare(o,{});var i=r.toXml(o);e.append(i,{name:\"xl/drawings/\".concat(o.name,\".xml\")}),i=n.toXml(o.rels),e.append(i,{name:\"xl/drawings/_rels/\".concat(o.name,\".xml.rels\")})}}))}},{key:\"addTables\",value:function(e,t){var r=new w;t.worksheets.forEach((function(t){t.tables.forEach((function(t){r.prepare(t,{});var n=r.toXml(t);e.append(n,{name:\"xl/tables/\".concat(t.target)})}))}))}},{key:\"addContentTypes\",value:(B=o(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new y,o=n.toXml(r),t.append(o,{name:\"[Content_Types].xml\"});case 3:case\"end\":return e.stop()}}),e)}))),function(e,t){return B.apply(this,arguments)})},{key:\"addApp\",value:(D=o(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new m,o=n.toXml(r),t.append(o,{name:\"docProps/app.xml\"});case 3:case\"end\":return e.stop()}}),e)}))),function(e,t){return D.apply(this,arguments)})},{key:\"addCore\",value:(N=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new h,t.append(n.toXml(r),{name:\"docProps/core.xml\"});case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return N.apply(this,arguments)})},{key:\"addThemes\",value:(I=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=r.themes||{theme1:x},Object.keys(n).forEach((function(e){var r=n[e],o=\"xl/theme/\".concat(e,\".xml\");t.append(r,{name:o})}));case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return I.apply(this,arguments)})},{key:\"addOfficeRels\",value:(M=o(regeneratorRuntime.mark((function t(r){var n,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=new p,o=n.toXml([{Id:\"rId1\",Type:e.RelType.OfficeDocument,Target:\"xl/workbook.xml\"},{Id:\"rId2\",Type:e.RelType.CoreProperties,Target:\"docProps/core.xml\"},{Id:\"rId3\",Type:e.RelType.ExtenderProperties,Target:\"docProps/app.xml\"}]),r.append(o,{name:\"_rels/.rels\"});case 3:case\"end\":return t.stop()}}),t)}))),function(e){return M.apply(this,arguments)})},{key:\"addWorkbookRels\",value:(A=o(regeneratorRuntime.mark((function t(r,n){var o,i,a,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=1,i=[{Id:\"rId\".concat(o++),Type:e.RelType.Styles,Target:\"styles.xml\"},{Id:\"rId\".concat(o++),Type:e.RelType.Theme,Target:\"theme/theme1.xml\"}],n.sharedStrings.count&&i.push({Id:\"rId\".concat(o++),Type:e.RelType.SharedStrings,Target:\"sharedStrings.xml\"}),n.worksheets.forEach((function(t){t.rId=\"rId\".concat(o++),i.push({Id:t.rId,Type:e.RelType.Worksheet,Target:\"worksheets/sheet\".concat(t.id,\".xml\")})})),a=new p,s=a.toXml(i),r.append(s,{name:\"xl/_rels/workbook.xml.rels\"});case 7:case\"end\":return t.stop()}}),t)}))),function(e,t){return A.apply(this,arguments)})},{key:\"addSharedStrings\",value:(P=o(regeneratorRuntime.mark((function e(t,r){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.sharedStrings&&r.sharedStrings.count&&t.append(r.sharedStrings.xml,{name:\"xl/sharedStrings.xml\"});case 1:case\"end\":return e.stop()}}),e)}))),function(e,t){return P.apply(this,arguments)})},{key:\"addStyles\",value:(C=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(n=r.styles.xml)&&t.append(n,{name:\"xl/styles.xml\"});case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return C.apply(this,arguments)})},{key:\"addWorkbook\",value:(T=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new b,t.append(n.toXml(r),{name:\"xl/workbook.xml\"});case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return T.apply(this,arguments)})},{key:\"addWorksheets\",value:(j=o(regeneratorRuntime.mark((function e(t,r){var n,o,i,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new v,o=new p,i=new _,a=new k,r.worksheets.forEach((function(e){var r=new f;n.render(r,e),t.append(r.xml,{name:\"xl/worksheets/sheet\".concat(e.id,\".xml\")}),e.rels&&e.rels.length&&(r=new f,o.render(r,e.rels),t.append(r.xml,{name:\"xl/worksheets/_rels/sheet\".concat(e.id,\".xml.rels\")})),e.comments.length>0&&(r=new f,i.render(r,e),t.append(r.xml,{name:\"xl/comments\".concat(e.id,\".xml\")}),r=new f,a.render(r,e),t.append(r.xml,{name:\"xl/drawings/vmlDrawing\".concat(e.id,\".vml\")}))}));case 5:case\"end\":return e.stop()}}),e)}))),function(e,t){return j.apply(this,arguments)})},{key:\"_finalize\",value:function(e){var t=this;return new Promise((function(r,n){e.on(\"finish\",(function(){r(t)})),e.on(\"error\",n),e.finalize()}))}},{key:\"prepareModel\",value:function(e,t){e.creator=e.creator||\"ExcelJS\",e.lastModifiedBy=e.lastModifiedBy||\"ExcelJS\",e.created=e.created||new Date,e.modified=e.modified||new Date,e.useSharedStrings=void 0===t.useSharedStrings||t.useSharedStrings,e.useStyles=void 0===t.useStyles||t.useStyles,e.sharedStrings=new d,e.styles=e.useStyles?new l(!0):new l.Mock;var r=new b,n=new v;r.prepare(e);var o={sharedStrings:e.sharedStrings,styles:e.styles,date1904:e.properties.date1904,drawingsCount:0,media:e.media};o.drawings=e.drawings=[],o.commentRefs=e.commentRefs=[];var i=0;e.tables=[],e.worksheets.forEach((function(t){t.tables.forEach((function(t){i++,t.target=\"table\".concat(i,\".xml\"),t.id=i,e.tables.push(t)})),n.prepare(t,o)}))}},{key:\"write\",value:(R=o(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=r||{},n=this.workbook.model,(o=new s.ZipWriter(r.zip)).pipe(t),this.prepareModel(n,r),e.next=7,this.addContentTypes(o,n);case 7:return e.next=9,this.addOfficeRels(o,n);case 9:return e.next=11,this.addWorkbookRels(o,n);case 11:return e.next=13,this.addWorksheets(o,n);case 13:return e.next=15,this.addSharedStrings(o,n);case 15:return e.next=17,this.addDrawings(o,n);case 17:return e.next=19,this.addTables(o,n);case 19:return e.next=21,Promise.all([this.addThemes(o,n),this.addStyles(o,n)]);case 21:return e.next=23,this.addMedia(o,n);case 23:return e.next=25,Promise.all([this.addApp(o,n),this.addCore(o,n)]);case 25:return e.next=27,this.addWorkbook(o,n);case 27:return e.abrupt(\"return\",this._finalize(o));case 28:case\"end\":return e.stop()}}),e,this)}))),function(e,t){return R.apply(this,arguments)})},{key:\"writeFile\",value:function(e,t){var r=this,n=a.createWriteStream(e);return new Promise((function(e,o){n.on(\"finish\",(function(){e()})),n.on(\"error\",(function(e){o(e)})),r.write(n,t).then((function(){n.end()}))}))}},{key:\"writeBuffer\",value:(E=o(regeneratorRuntime.mark((function e(t){var r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new u,e.next=3,this.write(r,t);case 3:return e.abrupt(\"return\",r.read());case 4:case\"end\":return e.stop()}}),e,this)}))),function(e){return E.apply(this,arguments)})}])&&i(t.prototype,n),O&&i(t,O),e}();O.RelType=e(\"./rel-type\"),t.exports=O}).call(this,e(\"buffer\").Buffer)},{\"../utils/stream-buf\":21,\"../utils/utils\":24,\"../utils/xml-stream\":25,\"../utils/zip-stream\":26,\"./rel-type\":28,\"./xform/book/workbook-xform\":35,\"./xform/comment/comments-xform\":37,\"./xform/comment/vml-notes-xform\":42,\"./xform/core/app-xform\":48,\"./xform/core/content-types-xform\":49,\"./xform/core/core-xform\":50,\"./xform/core/relationships-xform\":52,\"./xform/drawing/drawing-xform\":59,\"./xform/sheet/worksheet-xform\":112,\"./xform/strings/shared-strings-xform\":121,\"./xform/style/styles-xform\":132,\"./xform/table/table-xform\":138,\"./xml/theme1.js\":140,buffer:188,fs:186}],140:[function(e,t,r){t.exports='<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"> <a:themeElements> <a:clrScheme name=\"Office\"> <a:dk1> <a:sysClr val=\"windowText\" lastClr=\"000000\"/> </a:dk1> <a:lt1> <a:sysClr val=\"window\" lastClr=\"FFFFFF\"/> </a:lt1> <a:dk2> <a:srgbClr val=\"1F497D\"/> </a:dk2> <a:lt2> <a:srgbClr val=\"EEECE1\"/> </a:lt2> <a:accent1> <a:srgbClr val=\"4F81BD\"/> </a:accent1> <a:accent2> <a:srgbClr val=\"C0504D\"/> </a:accent2> <a:accent3> <a:srgbClr val=\"9BBB59\"/> </a:accent3> <a:accent4> <a:srgbClr val=\"8064A2\"/> </a:accent4> <a:accent5> <a:srgbClr val=\"4BACC6\"/> </a:accent5> <a:accent6> <a:srgbClr val=\"F79646\"/> </a:accent6> <a:hlink> <a:srgbClr val=\"0000FF\"/> </a:hlink> <a:folHlink> <a:srgbClr val=\"800080\"/> </a:folHlink> </a:clrScheme> <a:fontScheme name=\"Office\"> <a:majorFont> <a:latin typeface=\"Cambria\"/> <a:ea typeface=\"\"/> <a:cs typeface=\"\"/> <a:font script=\"Jpan\" typeface=\"\\uff2d\\uff33 \\uff30\\u30b4\\u30b7\\u30c3\\u30af\"/> <a:font script=\"Hang\" typeface=\"\\ub9d1\\uc740 \\uace0\\ub515\"/> <a:font script=\"Hans\" typeface=\"\\u5b8b\\u4f53\"/> <a:font script=\"Hant\" typeface=\"\\u65b0\\u7d30\\u660e\\u9ad4\"/> <a:font script=\"Arab\" typeface=\"Times New Roman\"/> <a:font script=\"Hebr\" typeface=\"Times New Roman\"/> <a:font script=\"Thai\" typeface=\"Tahoma\"/> <a:font script=\"Ethi\" typeface=\"Nyala\"/> <a:font script=\"Beng\" typeface=\"Vrinda\"/> <a:font script=\"Gujr\" typeface=\"Shruti\"/> <a:font script=\"Khmr\" typeface=\"MoolBoran\"/> <a:font script=\"Knda\" typeface=\"Tunga\"/> <a:font script=\"Guru\" typeface=\"Raavi\"/> <a:font script=\"Cans\" typeface=\"Euphemia\"/> <a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/> <a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/> <a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/> <a:font script=\"Thaa\" typeface=\"MV Boli\"/> <a:font script=\"Deva\" typeface=\"Mangal\"/> <a:font script=\"Telu\" typeface=\"Gautami\"/> <a:font script=\"Taml\" typeface=\"Latha\"/> <a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/> <a:font script=\"Orya\" typeface=\"Kalinga\"/> <a:font script=\"Mlym\" typeface=\"Kartika\"/> <a:font script=\"Laoo\" typeface=\"DokChampa\"/> <a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/> <a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/> <a:font script=\"Viet\" typeface=\"Times New Roman\"/> <a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/> <a:font script=\"Geor\" typeface=\"Sylfaen\"/> </a:majorFont> <a:minorFont> <a:latin typeface=\"Calibri\"/> <a:ea typeface=\"\"/> <a:cs typeface=\"\"/> <a:font script=\"Jpan\" typeface=\"\\uff2d\\uff33 \\uff30\\u30b4\\u30b7\\u30c3\\u30af\"/> <a:font script=\"Hang\" typeface=\"\\ub9d1\\uc740 \\uace0\\ub515\"/> <a:font script=\"Hans\" typeface=\"\\u5b8b\\u4f53\"/> <a:font script=\"Hant\" typeface=\"\\u65b0\\u7d30\\u660e\\u9ad4\"/> <a:font script=\"Arab\" typeface=\"Arial\"/> <a:font script=\"Hebr\" typeface=\"Arial\"/> <a:font script=\"Thai\" typeface=\"Tahoma\"/> <a:font script=\"Ethi\" typeface=\"Nyala\"/> <a:font script=\"Beng\" typeface=\"Vrinda\"/> <a:font script=\"Gujr\" typeface=\"Shruti\"/> <a:font script=\"Khmr\" typeface=\"DaunPenh\"/> <a:font script=\"Knda\" typeface=\"Tunga\"/> <a:font script=\"Guru\" typeface=\"Raavi\"/> <a:font script=\"Cans\" typeface=\"Euphemia\"/> <a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/> <a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/> <a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/> <a:font script=\"Thaa\" typeface=\"MV Boli\"/> <a:font script=\"Deva\" typeface=\"Mangal\"/> <a:font script=\"Telu\" typeface=\"Gautami\"/> <a:font script=\"Taml\" typeface=\"Latha\"/> <a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/> <a:font script=\"Orya\" typeface=\"Kalinga\"/> <a:font script=\"Mlym\" typeface=\"Kartika\"/> <a:font script=\"Laoo\" typeface=\"DokChampa\"/> <a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/> <a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/> <a:font script=\"Viet\" typeface=\"Arial\"/> <a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/> <a:font script=\"Geor\" typeface=\"Sylfaen\"/> </a:minorFont> </a:fontScheme> <a:fmtScheme name=\"Office\"> <a:fillStyleLst> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"50000\"/> <a:satMod val=\"300000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"35000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"37000\"/> <a:satMod val=\"300000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"15000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang=\"16200000\" scaled=\"1\"/> </a:gradFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"100000\"/> <a:shade val=\"100000\"/> <a:satMod val=\"130000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"50000\"/> <a:shade val=\"100000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:lin ang=\"16200000\" scaled=\"0\"/> </a:gradFill> </a:fillStyleLst> <a:lnStyleLst> <a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"> <a:solidFill> <a:schemeClr val=\"phClr\"> <a:shade val=\"95000\"/> <a:satMod val=\"105000\"/> </a:schemeClr> </a:solidFill> <a:prstDash val=\"solid\"/> </a:ln> <a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:prstDash val=\"solid\"/> </a:ln> <a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:prstDash val=\"solid\"/> </a:ln> </a:lnStyleLst> <a:effectStyleLst> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\"> <a:srgbClr val=\"000000\"> <a:alpha val=\"38000\"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"> <a:srgbClr val=\"000000\"> <a:alpha val=\"35000\"/> </a:srgbClr> </a:outerShdw> </a:effectLst> </a:effectStyle> <a:effectStyle> <a:effectLst> <a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"> <a:srgbClr val=\"000000\"> <a:alpha val=\"35000\"/> </a:srgbClr> </a:outerShdw> </a:effectLst> <a:scene3d> <a:camera prst=\"orthographicFront\"> <a:rot lat=\"0\" lon=\"0\" rev=\"0\"/> </a:camera> <a:lightRig rig=\"threePt\" dir=\"t\"> <a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/> </a:lightRig> </a:scene3d> <a:sp3d> <a:bevelT w=\"63500\" h=\"25400\"/> </a:sp3d> </a:effectStyle> </a:effectStyleLst> <a:bgFillStyleLst> <a:solidFill> <a:schemeClr val=\"phClr\"/> </a:solidFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"40000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"40000\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"45000\"/> <a:shade val=\"99000\"/> <a:satMod val=\"350000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:shade val=\"20000\"/> <a:satMod val=\"255000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path=\"circle\"> <a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/> </a:path> </a:gradFill> <a:gradFill rotWithShape=\"1\"> <a:gsLst> <a:gs pos=\"0\"> <a:schemeClr val=\"phClr\"> <a:tint val=\"80000\"/> <a:satMod val=\"300000\"/> </a:schemeClr> </a:gs> <a:gs pos=\"100000\"> <a:schemeClr val=\"phClr\"> <a:shade val=\"30000\"/> <a:satMod val=\"200000\"/> </a:schemeClr> </a:gs> </a:gsLst> <a:path path=\"circle\"> <a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/> </a:path> </a:gradFill> </a:bgFillStyleLst> </a:fmtScheme> </a:themeElements> <a:objectDefaults> <a:spDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx=\"1\"> <a:schemeClr val=\"accent1\"/> </a:lnRef> <a:fillRef idx=\"3\"> <a:schemeClr val=\"accent1\"/> </a:fillRef> <a:effectRef idx=\"2\"> <a:schemeClr val=\"accent1\"/> </a:effectRef> <a:fontRef idx=\"minor\"> <a:schemeClr val=\"lt1\"/> </a:fontRef> </a:style> </a:spDef> <a:lnDef> <a:spPr/> <a:bodyPr/> <a:lstStyle/> <a:style> <a:lnRef idx=\"2\"> <a:schemeClr val=\"accent1\"/> </a:lnRef> <a:fillRef idx=\"0\"> <a:schemeClr val=\"accent1\"/> </a:fillRef> <a:effectRef idx=\"1\"> <a:schemeClr val=\"accent1\"/> </a:effectRef> <a:fontRef idx=\"minor\"> <a:schemeClr val=\"tx1\"/> </a:fontRef> </a:style> </a:lnDef> </a:objectDefaults> <a:extraClrSchemeLst/> </a:theme>'},{}],141:[function(e,t,r){var n=r;n.bignum=e(\"bn.js\"),n.define=e(\"./asn1/api\").define,n.base=e(\"./asn1/base\"),n.constants=e(\"./asn1/constants\"),n.decoders=e(\"./asn1/decoders\"),n.encoders=e(\"./asn1/encoders\")},{\"./asn1/api\":142,\"./asn1/base\":144,\"./asn1/constants\":148,\"./asn1/decoders\":150,\"./asn1/encoders\":153,\"bn.js\":156}],142:[function(e,t,r){var n=e(\"../asn1\"),o=e(\"inherits\");function i(e,t){this.name=e,this.body=t,this.decoders={},this.encoders={}}r.define=function(e,t){return new i(e,t)},i.prototype._createNamed=function(t){var r;try{r=e(\"vm\").runInThisContext(\"(function \"+this.name+\"(entity) {\\n  this._initNamed(entity);\\n})\")}catch(e){r=function(e){this._initNamed(e)}}return o(r,t),r.prototype._initNamed=function(e){t.call(this,e)},new r(this)},i.prototype._getDecoder=function(e){return e=e||\"der\",this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(n.decoders[e])),this.decoders[e]},i.prototype.decode=function(e,t,r){return this._getDecoder(t).decode(e,r)},i.prototype._getEncoder=function(e){return e=e||\"der\",this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(n.encoders[e])),this.encoders[e]},i.prototype.encode=function(e,t,r){return this._getEncoder(t).encode(e,r)}},{\"../asn1\":141,inherits:341,vm:481}],143:[function(e,t,r){var n=e(\"inherits\"),o=e(\"../base\").Reporter,i=e(\"buffer\").Buffer;function a(e,t){o.call(this,t),i.isBuffer(e)?(this.base=e,this.offset=0,this.length=e.length):this.error(\"Input not Buffer\")}function s(e,t){if(Array.isArray(e))this.length=0,this.value=e.map((function(e){return e instanceof s||(e=new s(e,t)),this.length+=e.length,e}),this);else if(\"number\"==typeof e){if(!(0<=e&&e<=255))return t.error(\"non-byte EncoderBuffer value\");this.value=e,this.length=1}else if(\"string\"==typeof e)this.value=e,this.length=i.byteLength(e);else{if(!i.isBuffer(e))return t.error(\"Unsupported type: \"+_typeof2(e));this.value=e,this.length=e.length}}n(a,o),r.DecoderBuffer=a,a.prototype.save=function(){return{offset:this.offset,reporter:o.prototype.save.call(this)}},a.prototype.restore=function(e){var t=new a(this.base);return t.offset=e.offset,t.length=this.offset,this.offset=e.offset,o.prototype.restore.call(this,e.reporter),t},a.prototype.isEmpty=function(){return this.offset===this.length},a.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||\"DecoderBuffer overrun\")},a.prototype.skip=function(e,t){if(!(this.offset+e<=this.length))return this.error(t||\"DecoderBuffer overrun\");var r=new a(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+e,this.offset+=e,r},a.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},r.EncoderBuffer=s,s.prototype.join=function(e,t){return e||(e=new i(this.length)),t||(t=0),0===this.length||(Array.isArray(this.value)?this.value.forEach((function(r){r.join(e,t),t+=r.length})):(\"number\"==typeof this.value?e[t]=this.value:\"string\"==typeof this.value?e.write(this.value,t):i.isBuffer(this.value)&&this.value.copy(e,t),t+=this.length)),e}},{\"../base\":144,buffer:188,inherits:341}],144:[function(e,t,r){var n=r;n.Reporter=e(\"./reporter\").Reporter,n.DecoderBuffer=e(\"./buffer\").DecoderBuffer,n.EncoderBuffer=e(\"./buffer\").EncoderBuffer,n.Node=e(\"./node\")},{\"./buffer\":143,\"./node\":145,\"./reporter\":146}],145:[function(e,t,r){var n=e(\"../base\").Reporter,o=e(\"../base\").EncoderBuffer,i=e(\"../base\").DecoderBuffer,a=e(\"minimalistic-assert\"),s=[\"seq\",\"seqof\",\"set\",\"setof\",\"objid\",\"bool\",\"gentime\",\"utctime\",\"null_\",\"enum\",\"int\",\"objDesc\",\"bitstr\",\"bmpstr\",\"charstr\",\"genstr\",\"graphstr\",\"ia5str\",\"iso646str\",\"numstr\",\"octstr\",\"printstr\",\"t61str\",\"unistr\",\"utf8str\",\"videostr\"],u=[\"key\",\"obj\",\"use\",\"optional\",\"explicit\",\"implicit\",\"def\",\"choice\",\"any\",\"contains\"].concat(s);function c(e,t){var r={};this._baseState=r,r.enc=e,r.parent=t||null,r.children=null,r.tag=null,r.args=null,r.reverseArgs=null,r.choice=null,r.optional=!1,r.any=!1,r.obj=!1,r.use=null,r.useDecoder=null,r.key=null,r.default=null,r.explicit=null,r.implicit=null,r.contains=null,r.parent||(r.children=[],this._wrap())}t.exports=c;var f=[\"enc\",\"parent\",\"children\",\"tag\",\"args\",\"reverseArgs\",\"choice\",\"optional\",\"any\",\"obj\",\"use\",\"alteredUse\",\"key\",\"default\",\"explicit\",\"implicit\",\"contains\"];c.prototype.clone=function(){var e=this._baseState,t={};f.forEach((function(r){t[r]=e[r]}));var r=new this.constructor(t.parent);return r._baseState=t,r},c.prototype._wrap=function(){var e=this._baseState;u.forEach((function(t){this[t]=function(){var r=new this.constructor(this);return e.children.push(r),r[t].apply(r,arguments)}}),this)},c.prototype._init=function(e){var t=this._baseState;a(null===t.parent),e.call(this),t.children=t.children.filter((function(e){return e._baseState.parent===this}),this),a.equal(t.children.length,1,\"Root node can have only one child\")},c.prototype._useArgs=function(e){var t=this._baseState,r=e.filter((function(e){return e instanceof this.constructor}),this);e=e.filter((function(e){return!(e instanceof this.constructor)}),this),0!==r.length&&(a(null===t.children),t.children=r,r.forEach((function(e){e._baseState.parent=this}),this)),0!==e.length&&(a(null===t.args),t.args=e,t.reverseArgs=e.map((function(e){if(\"object\"!==_typeof2(e)||e.constructor!==Object)return e;var t={};return Object.keys(e).forEach((function(r){r==(0|r)&&(r|=0);var n=e[r];t[n]=r})),t})))},[\"_peekTag\",\"_decodeTag\",\"_use\",\"_decodeStr\",\"_decodeObjid\",\"_decodeTime\",\"_decodeNull\",\"_decodeInt\",\"_decodeBool\",\"_decodeList\",\"_encodeComposite\",\"_encodeStr\",\"_encodeObjid\",\"_encodeTime\",\"_encodeNull\",\"_encodeInt\",\"_encodeBool\"].forEach((function(e){c.prototype[e]=function(){var t=this._baseState;throw new Error(e+\" not implemented for encoding: \"+t.enc)}})),s.forEach((function(e){c.prototype[e]=function(){var t=this._baseState,r=Array.prototype.slice.call(arguments);return a(null===t.tag),t.tag=e,this._useArgs(r),this}})),c.prototype.use=function(e){a(e);var t=this._baseState;return a(null===t.use),t.use=e,this},c.prototype.optional=function(){return this._baseState.optional=!0,this},c.prototype.def=function(e){var t=this._baseState;return a(null===t.default),t.default=e,t.optional=!0,this},c.prototype.explicit=function(e){var t=this._baseState;return a(null===t.explicit&&null===t.implicit),t.explicit=e,this},c.prototype.implicit=function(e){var t=this._baseState;return a(null===t.explicit&&null===t.implicit),t.implicit=e,this},c.prototype.obj=function(){var e=this._baseState,t=Array.prototype.slice.call(arguments);return e.obj=!0,0!==t.length&&this._useArgs(t),this},c.prototype.key=function(e){var t=this._baseState;return a(null===t.key),t.key=e,this},c.prototype.any=function(){return this._baseState.any=!0,this},c.prototype.choice=function(e){var t=this._baseState;return a(null===t.choice),t.choice=e,this._useArgs(Object.keys(e).map((function(t){return e[t]}))),this},c.prototype.contains=function(e){var t=this._baseState;return a(null===t.use),t.contains=e,this},c.prototype._decode=function(e,t){var r=this._baseState;if(null===r.parent)return e.wrapResult(r.children[0]._decode(e,t));var n,o=r.default,a=!0,s=null;if(null!==r.key&&(s=e.enterKey(r.key)),r.optional){var u=null;if(null!==r.explicit?u=r.explicit:null!==r.implicit?u=r.implicit:null!==r.tag&&(u=r.tag),null!==u||r.any){if(a=this._peekTag(e,u,r.any),e.isError(a))return a}else{var c=e.save();try{null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t),a=!0}catch(e){a=!1}e.restore(c)}}if(r.obj&&a&&(n=e.enterObject()),a){if(null!==r.explicit){var f=this._decodeTag(e,r.explicit);if(e.isError(f))return f;e=f}var l=e.offset;if(null===r.use&&null===r.choice){if(r.any)c=e.save();var h=this._decodeTag(e,null!==r.implicit?r.implicit:r.tag,r.any);if(e.isError(h))return h;r.any?o=e.raw(c):e=h}if(t&&t.track&&null!==r.tag&&t.track(e.path(),l,e.length,\"tagged\"),t&&t.track&&null!==r.tag&&t.track(e.path(),e.offset,e.length,\"content\"),o=r.any?o:null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t),e.isError(o))return o;if(r.any||null!==r.choice||null===r.children||r.children.forEach((function(r){r._decode(e,t)})),r.contains&&(\"octstr\"===r.tag||\"bitstr\"===r.tag)){var d=new i(o);o=this._getUse(r.contains,e._reporterState.obj)._decode(d,t)}}return r.obj&&a&&(o=e.leaveObject(n)),null===r.key||null===o&&!0!==a?null!==s&&e.exitKey(s):e.leaveKey(s,r.key,o),o},c.prototype._decodeGeneric=function(e,t,r){var n=this._baseState;return\"seq\"===e||\"set\"===e?null:\"seqof\"===e||\"setof\"===e?this._decodeList(t,e,n.args[0],r):/str$/.test(e)?this._decodeStr(t,e,r):\"objid\"===e&&n.args?this._decodeObjid(t,n.args[0],n.args[1],r):\"objid\"===e?this._decodeObjid(t,null,null,r):\"gentime\"===e||\"utctime\"===e?this._decodeTime(t,e,r):\"null_\"===e?this._decodeNull(t,r):\"bool\"===e?this._decodeBool(t,r):\"objDesc\"===e?this._decodeStr(t,e,r):\"int\"===e||\"enum\"===e?this._decodeInt(t,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,t._reporterState.obj)._decode(t,r):t.error(\"unknown tag: \"+e)},c.prototype._getUse=function(e,t){var r=this._baseState;return r.useDecoder=this._use(e,t),a(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},c.prototype._decodeChoice=function(e,t){var r=this._baseState,n=null,o=!1;return Object.keys(r.choice).some((function(i){var a=e.save(),s=r.choice[i];try{var u=s._decode(e,t);if(e.isError(u))return!1;n={type:i,value:u},o=!0}catch(t){return e.restore(a),!1}return!0}),this),o?n:e.error(\"Choice not matched\")},c.prototype._createEncoderBuffer=function(e){return new o(e,this.reporter)},c.prototype._encode=function(e,t,r){var n=this._baseState;if(null===n.default||n.default!==e){var o=this._encodeValue(e,t,r);if(void 0!==o&&!this._skipDefault(o,t,r))return o}},c.prototype._encodeValue=function(e,t,r){var o=this._baseState;if(null===o.parent)return o.children[0]._encode(e,t||new n);var i=null;if(this.reporter=t,o.optional&&void 0===e){if(null===o.default)return;e=o.default}var a=null,s=!1;if(o.any)i=this._createEncoderBuffer(e);else if(o.choice)i=this._encodeChoice(e,t);else if(o.contains)a=this._getUse(o.contains,r)._encode(e,t),s=!0;else if(o.children)a=o.children.map((function(r){if(\"null_\"===r._baseState.tag)return r._encode(null,t,e);if(null===r._baseState.key)return t.error(\"Child should have a key\");var n=t.enterKey(r._baseState.key);if(\"object\"!==_typeof2(e))return t.error(\"Child expected, but input is not object\");var o=r._encode(e[r._baseState.key],t,e);return t.leaveKey(n),o}),this).filter((function(e){return e})),a=this._createEncoderBuffer(a);else if(\"seqof\"===o.tag||\"setof\"===o.tag){if(!o.args||1!==o.args.length)return t.error(\"Too many args for : \"+o.tag);if(!Array.isArray(e))return t.error(\"seqof/setof, but data is not Array\");var u=this.clone();u._baseState.implicit=null,a=this._createEncoderBuffer(e.map((function(r){var n=this._baseState;return this._getUse(n.args[0],e)._encode(r,t)}),u))}else null!==o.use?i=this._getUse(o.use,r)._encode(e,t):(a=this._encodePrimitive(o.tag,e),s=!0);if(!o.any&&null===o.choice){var c=null!==o.implicit?o.implicit:o.tag,f=null===o.implicit?\"universal\":\"context\";null===c?null===o.use&&t.error(\"Tag could be omitted only for .use()\"):null===o.use&&(i=this._encodeComposite(c,s,f,a))}return null!==o.explicit&&(i=this._encodeComposite(o.explicit,!1,\"context\",i)),i},c.prototype._encodeChoice=function(e,t){var r=this._baseState,n=r.choice[e.type];return n||a(!1,e.type+\" not found in \"+JSON.stringify(Object.keys(r.choice))),n._encode(e.value,t)},c.prototype._encodePrimitive=function(e,t){var r=this._baseState;if(/str$/.test(e))return this._encodeStr(t,e);if(\"objid\"===e&&r.args)return this._encodeObjid(t,r.reverseArgs[0],r.args[1]);if(\"objid\"===e)return this._encodeObjid(t,null,null);if(\"gentime\"===e||\"utctime\"===e)return this._encodeTime(t,e);if(\"null_\"===e)return this._encodeNull();if(\"int\"===e||\"enum\"===e)return this._encodeInt(t,r.args&&r.reverseArgs[0]);if(\"bool\"===e)return this._encodeBool(t);if(\"objDesc\"===e)return this._encodeStr(t,e);throw new Error(\"Unsupported tag: \"+e)},c.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},c.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(e)}},{\"../base\":144,\"minimalistic-assert\":390}],146:[function(e,t,r){var n=e(\"inherits\");function o(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function i(e,t){this.path=e,this.rethrow(t)}r.Reporter=o,o.prototype.isError=function(e){return e instanceof i},o.prototype.save=function(){var e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},o.prototype.restore=function(e){var t=this._reporterState;t.obj=e.obj,t.path=t.path.slice(0,e.pathLen)},o.prototype.enterKey=function(e){return this._reporterState.path.push(e)},o.prototype.exitKey=function(e){var t=this._reporterState;t.path=t.path.slice(0,e-1)},o.prototype.leaveKey=function(e,t,r){var n=this._reporterState;this.exitKey(e),null!==n.obj&&(n.obj[t]=r)},o.prototype.path=function(){return this._reporterState.path.join(\"/\")},o.prototype.enterObject=function(){var e=this._reporterState,t=e.obj;return e.obj={},t},o.prototype.leaveObject=function(e){var t=this._reporterState,r=t.obj;return t.obj=e,r},o.prototype.error=function(e){var t,r=this._reporterState,n=e instanceof i;if(t=n?e:new i(r.path.map((function(e){return\"[\"+JSON.stringify(e)+\"]\"})).join(\"\"),e.message||e,e.stack),!r.options.partial)throw t;return n||r.errors.push(t),t},o.prototype.wrapResult=function(e){var t=this._reporterState;return t.options.partial?{result:this.isError(e)?null:e,errors:t.errors}:e},n(i,Error),i.prototype.rethrow=function(e){if(this.message=e+\" at: \"+(this.path||\"(shallow)\"),Error.captureStackTrace&&Error.captureStackTrace(this,i),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},{inherits:341}],147:[function(e,t,r){var n=e(\"../constants\");r.tagClass={0:\"universal\",1:\"application\",2:\"context\",3:\"private\"},r.tagClassByName=n._reverse(r.tagClass),r.tag={0:\"end\",1:\"bool\",2:\"int\",3:\"bitstr\",4:\"octstr\",5:\"null_\",6:\"objid\",7:\"objDesc\",8:\"external\",9:\"real\",10:\"enum\",11:\"embed\",12:\"utf8str\",13:\"relativeOid\",16:\"seq\",17:\"set\",18:\"numstr\",19:\"printstr\",20:\"t61str\",21:\"videostr\",22:\"ia5str\",23:\"utctime\",24:\"gentime\",25:\"graphstr\",26:\"iso646str\",27:\"genstr\",28:\"unistr\",29:\"charstr\",30:\"bmpstr\"},r.tagByName=n._reverse(r.tag)},{\"../constants\":148}],148:[function(e,t,r){var n=r;n._reverse=function(e){var t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);var n=e[r];t[n]=r})),t},n.der=e(\"./der\")},{\"./der\":147}],149:[function(e,t,r){var n=e(\"inherits\"),o=e(\"../../asn1\"),i=o.base,a=o.bignum,s=o.constants.der;function u(e){this.enc=\"der\",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){i.Node.call(this,\"der\",e)}function f(e,t){var r=e.readUInt8(t);if(e.isError(r))return r;var n=s.tagClass[r>>6],o=0==(32&r);if(31==(31&r)){var i=r;for(r=0;128==(128&i);){if(i=e.readUInt8(t),e.isError(i))return i;r<<=7,r|=127&i}}else r&=31;return{cls:n,primitive:o,tag:r,tagStr:s.tag[r]}}function l(e,t,r){var n=e.readUInt8(r);if(e.isError(n))return n;if(!t&&128===n)return null;if(0==(128&n))return n;var o=127&n;if(o>4)return e.error(\"length octect is too long\");n=0;for(var i=0;i<o;i++){n<<=8;var a=e.readUInt8(r);if(e.isError(a))return a;n|=a}return n}t.exports=u,u.prototype.decode=function(e,t){return e instanceof i.DecoderBuffer||(e=new i.DecoderBuffer(e,t)),this.tree._decode(e,t)},n(c,i.Node),c.prototype._peekTag=function(e,t,r){if(e.isEmpty())return!1;var n=e.save(),o=f(e,'Failed to peek tag: \"'+t+'\"');return e.isError(o)?o:(e.restore(n),o.tag===t||o.tagStr===t||o.tagStr+\"of\"===t||r)},c.prototype._decodeTag=function(e,t,r){var n=f(e,'Failed to decode tag of \"'+t+'\"');if(e.isError(n))return n;var o=l(e,n.primitive,'Failed to get length of \"'+t+'\"');if(e.isError(o))return o;if(!r&&n.tag!==t&&n.tagStr!==t&&n.tagStr+\"of\"!==t)return e.error('Failed to match tag: \"'+t+'\"');if(n.primitive||null!==o)return e.skip(o,'Failed to match body of: \"'+t+'\"');var i=e.save(),a=this._skipUntilEnd(e,'Failed to skip indefinite length body: \"'+this.tag+'\"');return e.isError(a)?a:(o=e.offset-i.offset,e.restore(i),e.skip(o,'Failed to match body of: \"'+t+'\"'))},c.prototype._skipUntilEnd=function(e,t){for(;;){var r=f(e,t);if(e.isError(r))return r;var n,o=l(e,r.primitive,t);if(e.isError(o))return o;if(n=r.primitive||null!==o?e.skip(o):this._skipUntilEnd(e,t),e.isError(n))return n;if(\"end\"===r.tagStr)break}},c.prototype._decodeList=function(e,t,r,n){for(var o=[];!e.isEmpty();){var i=this._peekTag(e,\"end\");if(e.isError(i))return i;var a=r.decode(e,\"der\",n);if(e.isError(a)&&i)break;o.push(a)}return o},c.prototype._decodeStr=function(e,t){if(\"bitstr\"===t){var r=e.readUInt8();return e.isError(r)?r:{unused:r,data:e.raw()}}if(\"bmpstr\"===t){var n=e.raw();if(n.length%2==1)return e.error(\"Decoding of string type: bmpstr length mismatch\");for(var o=\"\",i=0;i<n.length/2;i++)o+=String.fromCharCode(n.readUInt16BE(2*i));return o}if(\"numstr\"===t){var a=e.raw().toString(\"ascii\");return this._isNumstr(a)?a:e.error(\"Decoding of string type: numstr unsupported characters\")}if(\"octstr\"===t)return e.raw();if(\"objDesc\"===t)return e.raw();if(\"printstr\"===t){var s=e.raw().toString(\"ascii\");return this._isPrintstr(s)?s:e.error(\"Decoding of string type: printstr unsupported characters\")}return/str$/.test(t)?e.raw().toString():e.error(\"Decoding of string type: \"+t+\" unsupported\")},c.prototype._decodeObjid=function(e,t,r){for(var n,o=[],i=0;!e.isEmpty();){var a=e.readUInt8();i<<=7,i|=127&a,0==(128&a)&&(o.push(i),i=0)}128&a&&o.push(i);var s=o[0]/40|0,u=o[0]%40;if(n=r?o:[s,u].concat(o.slice(1)),t){var c=t[n.join(\" \")];void 0===c&&(c=t[n.join(\".\")]),void 0!==c&&(n=c)}return n},c.prototype._decodeTime=function(e,t){var r=e.raw().toString();if(\"gentime\"===t)var n=0|r.slice(0,4),o=0|r.slice(4,6),i=0|r.slice(6,8),a=0|r.slice(8,10),s=0|r.slice(10,12),u=0|r.slice(12,14);else{if(\"utctime\"!==t)return e.error(\"Decoding \"+t+\" time is not supported yet\");n=0|r.slice(0,2),o=0|r.slice(2,4),i=0|r.slice(4,6),a=0|r.slice(6,8),s=0|r.slice(8,10),u=0|r.slice(10,12);n=n<70?2e3+n:1900+n}return Date.UTC(n,o-1,i,a,s,u,0)},c.prototype._decodeNull=function(e){return null},c.prototype._decodeBool=function(e){var t=e.readUInt8();return e.isError(t)?t:0!==t},c.prototype._decodeInt=function(e,t){var r=e.raw(),n=new a(r);return t&&(n=t[n.toString(10)]||n),n},c.prototype._use=function(e,t){return\"function\"==typeof e&&(e=e(t)),e._getDecoder(\"der\").tree}},{\"../../asn1\":141,inherits:341}],150:[function(e,t,r){var n=r;n.der=e(\"./der\"),n.pem=e(\"./pem\")},{\"./der\":149,\"./pem\":151}],151:[function(e,t,r){var n=e(\"inherits\"),o=e(\"buffer\").Buffer,i=e(\"./der\");function a(e){i.call(this,e),this.enc=\"pem\"}n(a,i),t.exports=a,a.prototype.decode=function(e,t){for(var r=e.toString().split(/[\\r\\n]+/g),n=t.label.toUpperCase(),a=/^-----(BEGIN|END) ([^-]+)-----$/,s=-1,u=-1,c=0;c<r.length;c++){var f=r[c].match(a);if(null!==f&&f[2]===n){if(-1!==s){if(\"END\"!==f[1])break;u=c;break}if(\"BEGIN\"!==f[1])break;s=c}}if(-1===s||-1===u)throw new Error(\"PEM section not found for: \"+n);var l=r.slice(s+1,u).join(\"\");l.replace(/[^a-z0-9\\+\\/=]+/gi,\"\");var h=new o(l,\"base64\");return i.prototype.decode.call(this,h,t)}},{\"./der\":149,buffer:188,inherits:341}],152:[function(e,t,r){var n=e(\"inherits\"),o=e(\"buffer\").Buffer,i=e(\"../../asn1\"),a=i.base,s=i.constants.der;function u(e){this.enc=\"der\",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){a.Node.call(this,\"der\",e)}function f(e){return e<10?\"0\"+e:e}t.exports=u,u.prototype.encode=function(e,t){return this.tree._encode(e,t).join()},n(c,a.Node),c.prototype._encodeComposite=function(e,t,r,n){var i,a=function(e,t,r,n){var o;\"seqof\"===e?e=\"seq\":\"setof\"===e&&(e=\"set\");if(s.tagByName.hasOwnProperty(e))o=s.tagByName[e];else{if(\"number\"!=typeof e||(0|e)!==e)return n.error(\"Unknown tag: \"+e);o=e}if(o>=31)return n.error(\"Multi-octet tag encoding unsupported\");t||(o|=32);return o|=s.tagClassByName[r||\"universal\"]<<6}(e,t,r,this.reporter);if(n.length<128)return(i=new o(2))[0]=a,i[1]=n.length,this._createEncoderBuffer([i,n]);for(var u=1,c=n.length;c>=256;c>>=8)u++;(i=new o(2+u))[0]=a,i[1]=128|u;c=1+u;for(var f=n.length;f>0;c--,f>>=8)i[c]=255&f;return this._createEncoderBuffer([i,n])},c.prototype._encodeStr=function(e,t){if(\"bitstr\"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if(\"bmpstr\"===t){for(var r=new o(2*e.length),n=0;n<e.length;n++)r.writeUInt16BE(e.charCodeAt(n),2*n);return this._createEncoderBuffer(r)}return\"numstr\"===t?this._isNumstr(e)?this._createEncoderBuffer(e):this.reporter.error(\"Encoding of string type: numstr supports only digits and space\"):\"printstr\"===t?this._isPrintstr(e)?this._createEncoderBuffer(e):this.reporter.error(\"Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark\"):/str$/.test(t)||\"objDesc\"===t?this._createEncoderBuffer(e):this.reporter.error(\"Encoding of string type: \"+t+\" unsupported\")},c.prototype._encodeObjid=function(e,t,r){if(\"string\"==typeof e){if(!t)return this.reporter.error(\"string objid given, but no values map found\");if(!t.hasOwnProperty(e))return this.reporter.error(\"objid not found in values map\");e=t[e].split(/[\\s\\.]+/g);for(var n=0;n<e.length;n++)e[n]|=0}else if(Array.isArray(e)){e=e.slice();for(n=0;n<e.length;n++)e[n]|=0}if(!Array.isArray(e))return this.reporter.error(\"objid() should be either array or string, got: \"+JSON.stringify(e));if(!r){if(e[1]>=40)return this.reporter.error(\"Second objid identifier OOB\");e.splice(0,2,40*e[0]+e[1])}var i=0;for(n=0;n<e.length;n++){var a=e[n];for(i++;a>=128;a>>=7)i++}var s=new o(i),u=s.length-1;for(n=e.length-1;n>=0;n--){a=e[n];for(s[u--]=127&a;(a>>=7)>0;)s[u--]=128|127&a}return this._createEncoderBuffer(s)},c.prototype._encodeTime=function(e,t){var r,n=new Date(e);return\"gentime\"===t?r=[f(n.getFullYear()),f(n.getUTCMonth()+1),f(n.getUTCDate()),f(n.getUTCHours()),f(n.getUTCMinutes()),f(n.getUTCSeconds()),\"Z\"].join(\"\"):\"utctime\"===t?r=[f(n.getFullYear()%100),f(n.getUTCMonth()+1),f(n.getUTCDate()),f(n.getUTCHours()),f(n.getUTCMinutes()),f(n.getUTCSeconds()),\"Z\"].join(\"\"):this.reporter.error(\"Encoding \"+t+\" time is not supported yet\"),this._encodeStr(r,\"octstr\")},c.prototype._encodeNull=function(){return this._createEncoderBuffer(\"\")},c.prototype._encodeInt=function(e,t){if(\"string\"==typeof e){if(!t)return this.reporter.error(\"String int or enum given, but no values map\");if(!t.hasOwnProperty(e))return this.reporter.error(\"Values map doesn't contain: \"+JSON.stringify(e));e=t[e]}if(\"number\"!=typeof e&&!o.isBuffer(e)){var r=e.toArray();!e.sign&&128&r[0]&&r.unshift(0),e=new o(r)}if(o.isBuffer(e)){var n=e.length;0===e.length&&n++;var i=new o(n);return e.copy(i),0===e.length&&(i[0]=0),this._createEncoderBuffer(i)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);n=1;for(var a=e;a>=256;a>>=8)n++;for(a=(i=new Array(n)).length-1;a>=0;a--)i[a]=255&e,e>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(new o(i))},c.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},c.prototype._use=function(e,t){return\"function\"==typeof e&&(e=e(t)),e._getEncoder(\"der\").tree},c.prototype._skipDefault=function(e,t,r){var n,o=this._baseState;if(null===o.default)return!1;var i=e.join();if(void 0===o.defaultBuffer&&(o.defaultBuffer=this._encodeValue(o.default,t,r).join()),i.length!==o.defaultBuffer.length)return!1;for(n=0;n<i.length;n++)if(i[n]!==o.defaultBuffer[n])return!1;return!0}},{\"../../asn1\":141,buffer:188,inherits:341}],153:[function(e,t,r){var n=r;n.der=e(\"./der\"),n.pem=e(\"./pem\")},{\"./der\":152,\"./pem\":154}],154:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./der\");function i(e){o.call(this,e),this.enc=\"pem\"}n(i,o),t.exports=i,i.prototype.encode=function(e,t){for(var r=o.prototype.encode.call(this,e).toString(\"base64\"),n=[\"-----BEGIN \"+t.label+\"-----\"],i=0;i<r.length;i+=64)n.push(r.slice(i,i+64));return n.push(\"-----END \"+t.label+\"-----\"),n.join(\"\\n\")}},{\"./der\":152,inherits:341}],155:[function(e,t,r){r.byteLength=function(e){var t=c(e),r=t[0],n=t[1];return 3*(r+n)/4-n},r.toByteArray=function(e){var t,r,n=c(e),a=n[0],s=n[1],u=new i(function(e,t,r){return 3*(t+r)/4-r}(0,a,s)),f=0,l=s>0?a-4:a;for(r=0;r<l;r+=4)t=o[e.charCodeAt(r)]<<18|o[e.charCodeAt(r+1)]<<12|o[e.charCodeAt(r+2)]<<6|o[e.charCodeAt(r+3)],u[f++]=t>>16&255,u[f++]=t>>8&255,u[f++]=255&t;2===s&&(t=o[e.charCodeAt(r)]<<2|o[e.charCodeAt(r+1)]>>4,u[f++]=255&t);1===s&&(t=o[e.charCodeAt(r)]<<10|o[e.charCodeAt(r+1)]<<4|o[e.charCodeAt(r+2)]>>2,u[f++]=t>>8&255,u[f++]=255&t);return u},r.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=0,s=r-o;a<s;a+=16383)i.push(f(e,a,a+16383>s?s:a+16383));1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+\"==\")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+\"=\"));return i.join(\"\")};for(var n=[],o=[],i=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s=0,u=a.length;s<u;++s)n[s]=a[s],o[a.charCodeAt(s)]=s;function c(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=e.indexOf(\"=\");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function f(e,t,r){for(var o,i,a=[],s=t;s<r;s+=3)o=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),a.push(n[(i=o)>>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join(\"\")}o[\"-\".charCodeAt(0)]=62,o[\"_\".charCodeAt(0)]=63},{}],156:[function(e,t,r){!function(t,r){function n(e,t){if(!e)throw new Error(t||\"Assertion failed\")}function o(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function i(e,t,r){if(i.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&(\"le\"!==t&&\"be\"!==t||(r=t,t=10),this._init(e||0,t||10,r||\"be\"))}var a;\"object\"===_typeof2(t)?t.exports=i:r.BN=i,i.BN=i,i.wordSize=26;try{a=e(\"buffer\").Buffer}catch(e){}function s(e,t,r){for(var n=0,o=Math.min(e.length,r),i=t;i<o;i++){var a=e.charCodeAt(i)-48;n<<=4,n|=a>=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function u(e,t,r,n){for(var o=0,i=Math.min(e.length,r),a=t;a<i;a++){var s=e.charCodeAt(a)-48;o*=n,o+=s>=49?s-49+10:s>=17?s-17+10:s}return o}i.isBN=function(e){return e instanceof i||null!==e&&\"object\"===_typeof2(e)&&e.constructor.wordSize===i.wordSize&&Array.isArray(e.words)},i.max=function(e,t){return e.cmp(t)>0?e:t},i.min=function(e,t){return e.cmp(t)<0?e:t},i.prototype._init=function(e,t,r){if(\"number\"==typeof e)return this._initNumber(e,t,r);if(\"object\"===_typeof2(e))return this._initArray(e,t,r);\"hex\"===t&&(t=16),n(t===(0|t)&&t>=2&&t<=36);var o=0;\"-\"===(e=e.toString().replace(/\\s+/g,\"\"))[0]&&o++,16===t?this._parseHex(e,o):this._parseBase(e,t,o),\"-\"===e[0]&&(this.negative=1),this.strip(),\"le\"===r&&this._initArray(this.toArray(),t,r)},i.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(n(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),\"le\"===r&&this._initArray(this.toArray(),t,r)},i.prototype._initArray=function(e,t,r){if(n(\"number\"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o<this.length;o++)this.words[o]=0;var i,a,s=0;if(\"be\"===r)for(o=e.length-1,i=0;o>=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[i]|=a<<s&67108863,this.words[i+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);else if(\"le\"===r)for(o=0,i=0;o<e.length;o+=3)a=e[o]|e[o+1]<<8|e[o+2]<<16,this.words[i]|=a<<s&67108863,this.words[i+1]=a>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);return this.strip()},i.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,o,i=0;for(r=e.length-6,n=0;r>=t;r-=6)o=s(e,r,r+6),this.words[n]|=o<<i&67108863,this.words[n+1]|=o>>>26-i&4194303,(i+=24)>=26&&(i-=26,n++);r+6!==t&&(o=s(e,t,r+6),this.words[n]|=o<<i&67108863,this.words[n+1]|=o>>>26-i&4194303),this.strip()},i.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=t)n++;n--,o=o/t|0;for(var i=e.length-r,a=i%n,s=Math.min(i,i-a)+r,c=0,f=r;f<s;f+=n)c=u(e,f,f+n,t),this.imuln(o),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==a){var l=1;for(c=u(e,f,e.length,t),f=0;f<a;f++)l*=t;this.imuln(l),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}},i.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},i.prototype.clone=function(){var e=new i(null);return this.copy(e),e},i.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},i.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},i.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},i.prototype.inspect=function(){return(this.red?\"<BN-R: \":\"<BN: \")+this.toString(16)+\">\"};var c=[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function h(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var o=0|e.words[0],i=0|t.words[0],a=o*i,s=67108863&a,u=a/67108864|0;r.words[0]=s;for(var c=1;c<n;c++){for(var f=u>>>26,l=67108863&u,h=Math.min(c,t.length-1),d=Math.max(0,c-e.length+1);d<=h;d++){var p=c-d|0;f+=(a=(o=0|e.words[p])*(i=0|t.words[d])+l)/67108864|0,l=67108863&a}r.words[c]=0|l,u=0|f}return 0!==u?r.words[c]=0|u:r.length--,r.strip()}i.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||\"hex\"===e){r=\"\";for(var o=0,i=0,a=0;a<this.length;a++){var s=this.words[a],u=(16777215&(s<<o|i)).toString(16);r=0!==(i=s>>>24-o&16777215)||a!==this.length-1?c[6-u.length]+u+r:u+r,(o+=2)>=26&&(o-=26,a--)}for(0!==i&&(r=i.toString(16)+r);r.length%t!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}if(e===(0|e)&&e>=2&&e<=36){var h=f[e],d=l[e];r=\"\";var p=this.clone();for(p.negative=0;!p.isZero();){var y=p.modn(d).toString(e);r=(p=p.idivn(d)).isZero()?y+r:c[h-y.length]+y+r}for(this.isZero()&&(r=\"0\"+r);r.length%t!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}n(!1,\"Base should be between 2 and 36\")},i.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,\"Number can only safely store up to 53 bits\"),0!==this.negative?-e:e},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toBuffer=function(e,t){return n(void 0!==a),this.toArrayLike(a,e,t)},i.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},i.prototype.toArrayLike=function(e,t,r){var o=this.byteLength(),i=r||Math.max(1,o);n(o<=i,\"byte array longer than desired length\"),n(i>0,\"Requested array length <= 0\"),this.strip();var a,s,u=\"le\"===t,c=new e(i),f=this.clone();if(u){for(s=0;!f.isZero();s++)a=f.andln(255),f.iushrn(8),c[s]=a;for(;s<i;s++)c[s]=0}else{for(s=0;s<i-o;s++)c[s]=0;for(s=0;!f.isZero();s++)a=f.andln(255),f.iushrn(8),c[i-s-1]=a}return c},Math.clz32?i.prototype._countBits=function(e){return 32-Math.clz32(e)}:i.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},i.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},i.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},i.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var r=this._zeroBits(this.words[t]);if(e+=r,26!==r)break}return e},i.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},i.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},i.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},i.prototype.isNeg=function(){return 0!==this.negative},i.prototype.neg=function(){return this.clone().ineg()},i.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},i.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},i.prototype.ior=function(e){return n(0==(this.negative|e.negative)),this.iuor(e)},i.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},i.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},i.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;r<t.length;r++)this.words[r]=this.words[r]&e.words[r];return this.length=t.length,this.strip()},i.prototype.iand=function(e){return n(0==(this.negative|e.negative)),this.iuand(e)},i.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},i.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},i.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;n<r.length;n++)this.words[n]=t.words[n]^r.words[n];if(this!==t)for(;n<t.length;n++)this.words[n]=t.words[n];return this.length=t.length,this.strip()},i.prototype.ixor=function(e){return n(0==(this.negative|e.negative)),this.iuxor(e)},i.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},i.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},i.prototype.inotn=function(e){n(\"number\"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var o=0;o<t;o++)this.words[o]=67108863&~this.words[o];return r>0&&(this.words[o]=~this.words[o]&67108863>>26-r),this.strip()},i.prototype.notn=function(e){return this.clone().inotn(e)},i.prototype.setn=function(e,t){n(\"number\"==typeof e&&e>=0);var r=e/26|0,o=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<<o:this.words[r]&~(1<<o),this.strip()},i.prototype.iadd=function(e){var t,r,n;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(r=this,n=e):(r=e,n=this);for(var o=0,i=0;i<n.length;i++)t=(0|r.words[i])+(0|n.words[i])+o,this.words[i]=67108863&t,o=t>>>26;for(;0!==o&&i<r.length;i++)t=(0|r.words[i])+o,this.words[i]=67108863&t,o=t>>>26;if(this.length=r.length,0!==o)this.words[this.length]=o,this.length++;else if(r!==this)for(;i<r.length;i++)this.words[i]=r.words[i];return this},i.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},i.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(r=this,n=e):(r=e,n=this);for(var i=0,a=0;a<n.length;a++)i=(t=(0|r.words[a])-(0|n.words[a])+i)>>26,this.words[a]=67108863&t;for(;0!==i&&a<r.length;a++)i=(t=(0|r.words[a])+i)>>26,this.words[a]=67108863&t;if(0===i&&a<r.length&&r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this.length=Math.max(this.length,a),r!==this&&(this.negative=1),this.strip()},i.prototype.sub=function(e){return this.clone().isub(e)};var d=function(e,t,r){var n,o,i,a=e.words,s=t.words,u=r.words,c=0,f=0|a[0],l=8191&f,h=f>>>13,d=0|a[1],p=8191&d,y=d>>>13,m=0|a[2],b=8191&m,v=m>>>13,g=0|a[3],w=8191&g,_=g>>>13,k=0|a[4],x=8191&k,S=k>>>13,O=0|a[5],E=8191&O,R=O>>>13,j=0|a[6],T=8191&j,C=j>>>13,P=0|a[7],A=8191&P,M=P>>>13,I=0|a[8],N=8191&I,D=I>>>13,B=0|a[9],F=8191&B,L=B>>>13,z=0|s[0],U=8191&z,H=z>>>13,V=0|s[1],W=8191&V,q=V>>>13,$=0|s[2],X=8191&$,K=$>>>13,Y=0|s[3],Z=8191&Y,G=Y>>>13,J=0|s[4],Q=8191&J,ee=J>>>13,te=0|s[5],re=8191&te,ne=te>>>13,oe=0|s[6],ie=8191&oe,ae=oe>>>13,se=0|s[7],ue=8191&se,ce=se>>>13,fe=0|s[8],le=8191&fe,he=fe>>>13,de=0|s[9],pe=8191&de,ye=de>>>13;r.negative=e.negative^t.negative,r.length=19;var me=(c+(n=Math.imul(l,U))|0)+((8191&(o=(o=Math.imul(l,H))+Math.imul(h,U)|0))<<13)|0;c=((i=Math.imul(h,H))+(o>>>13)|0)+(me>>>26)|0,me&=67108863,n=Math.imul(p,U),o=(o=Math.imul(p,H))+Math.imul(y,U)|0,i=Math.imul(y,H);var be=(c+(n=n+Math.imul(l,W)|0)|0)+((8191&(o=(o=o+Math.imul(l,q)|0)+Math.imul(h,W)|0))<<13)|0;c=((i=i+Math.imul(h,q)|0)+(o>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(b,U),o=(o=Math.imul(b,H))+Math.imul(v,U)|0,i=Math.imul(v,H),n=n+Math.imul(p,W)|0,o=(o=o+Math.imul(p,q)|0)+Math.imul(y,W)|0,i=i+Math.imul(y,q)|0;var ve=(c+(n=n+Math.imul(l,X)|0)|0)+((8191&(o=(o=o+Math.imul(l,K)|0)+Math.imul(h,X)|0))<<13)|0;c=((i=i+Math.imul(h,K)|0)+(o>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,U),o=(o=Math.imul(w,H))+Math.imul(_,U)|0,i=Math.imul(_,H),n=n+Math.imul(b,W)|0,o=(o=o+Math.imul(b,q)|0)+Math.imul(v,W)|0,i=i+Math.imul(v,q)|0,n=n+Math.imul(p,X)|0,o=(o=o+Math.imul(p,K)|0)+Math.imul(y,X)|0,i=i+Math.imul(y,K)|0;var ge=(c+(n=n+Math.imul(l,Z)|0)|0)+((8191&(o=(o=o+Math.imul(l,G)|0)+Math.imul(h,Z)|0))<<13)|0;c=((i=i+Math.imul(h,G)|0)+(o>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(x,U),o=(o=Math.imul(x,H))+Math.imul(S,U)|0,i=Math.imul(S,H),n=n+Math.imul(w,W)|0,o=(o=o+Math.imul(w,q)|0)+Math.imul(_,W)|0,i=i+Math.imul(_,q)|0,n=n+Math.imul(b,X)|0,o=(o=o+Math.imul(b,K)|0)+Math.imul(v,X)|0,i=i+Math.imul(v,K)|0,n=n+Math.imul(p,Z)|0,o=(o=o+Math.imul(p,G)|0)+Math.imul(y,Z)|0,i=i+Math.imul(y,G)|0;var we=(c+(n=n+Math.imul(l,Q)|0)|0)+((8191&(o=(o=o+Math.imul(l,ee)|0)+Math.imul(h,Q)|0))<<13)|0;c=((i=i+Math.imul(h,ee)|0)+(o>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(E,U),o=(o=Math.imul(E,H))+Math.imul(R,U)|0,i=Math.imul(R,H),n=n+Math.imul(x,W)|0,o=(o=o+Math.imul(x,q)|0)+Math.imul(S,W)|0,i=i+Math.imul(S,q)|0,n=n+Math.imul(w,X)|0,o=(o=o+Math.imul(w,K)|0)+Math.imul(_,X)|0,i=i+Math.imul(_,K)|0,n=n+Math.imul(b,Z)|0,o=(o=o+Math.imul(b,G)|0)+Math.imul(v,Z)|0,i=i+Math.imul(v,G)|0,n=n+Math.imul(p,Q)|0,o=(o=o+Math.imul(p,ee)|0)+Math.imul(y,Q)|0,i=i+Math.imul(y,ee)|0;var _e=(c+(n=n+Math.imul(l,re)|0)|0)+((8191&(o=(o=o+Math.imul(l,ne)|0)+Math.imul(h,re)|0))<<13)|0;c=((i=i+Math.imul(h,ne)|0)+(o>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(T,U),o=(o=Math.imul(T,H))+Math.imul(C,U)|0,i=Math.imul(C,H),n=n+Math.imul(E,W)|0,o=(o=o+Math.imul(E,q)|0)+Math.imul(R,W)|0,i=i+Math.imul(R,q)|0,n=n+Math.imul(x,X)|0,o=(o=o+Math.imul(x,K)|0)+Math.imul(S,X)|0,i=i+Math.imul(S,K)|0,n=n+Math.imul(w,Z)|0,o=(o=o+Math.imul(w,G)|0)+Math.imul(_,Z)|0,i=i+Math.imul(_,G)|0,n=n+Math.imul(b,Q)|0,o=(o=o+Math.imul(b,ee)|0)+Math.imul(v,Q)|0,i=i+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,o=(o=o+Math.imul(p,ne)|0)+Math.imul(y,re)|0,i=i+Math.imul(y,ne)|0;var ke=(c+(n=n+Math.imul(l,ie)|0)|0)+((8191&(o=(o=o+Math.imul(l,ae)|0)+Math.imul(h,ie)|0))<<13)|0;c=((i=i+Math.imul(h,ae)|0)+(o>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(A,U),o=(o=Math.imul(A,H))+Math.imul(M,U)|0,i=Math.imul(M,H),n=n+Math.imul(T,W)|0,o=(o=o+Math.imul(T,q)|0)+Math.imul(C,W)|0,i=i+Math.imul(C,q)|0,n=n+Math.imul(E,X)|0,o=(o=o+Math.imul(E,K)|0)+Math.imul(R,X)|0,i=i+Math.imul(R,K)|0,n=n+Math.imul(x,Z)|0,o=(o=o+Math.imul(x,G)|0)+Math.imul(S,Z)|0,i=i+Math.imul(S,G)|0,n=n+Math.imul(w,Q)|0,o=(o=o+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,i=i+Math.imul(_,ee)|0,n=n+Math.imul(b,re)|0,o=(o=o+Math.imul(b,ne)|0)+Math.imul(v,re)|0,i=i+Math.imul(v,ne)|0,n=n+Math.imul(p,ie)|0,o=(o=o+Math.imul(p,ae)|0)+Math.imul(y,ie)|0,i=i+Math.imul(y,ae)|0;var xe=(c+(n=n+Math.imul(l,ue)|0)|0)+((8191&(o=(o=o+Math.imul(l,ce)|0)+Math.imul(h,ue)|0))<<13)|0;c=((i=i+Math.imul(h,ce)|0)+(o>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(N,U),o=(o=Math.imul(N,H))+Math.imul(D,U)|0,i=Math.imul(D,H),n=n+Math.imul(A,W)|0,o=(o=o+Math.imul(A,q)|0)+Math.imul(M,W)|0,i=i+Math.imul(M,q)|0,n=n+Math.imul(T,X)|0,o=(o=o+Math.imul(T,K)|0)+Math.imul(C,X)|0,i=i+Math.imul(C,K)|0,n=n+Math.imul(E,Z)|0,o=(o=o+Math.imul(E,G)|0)+Math.imul(R,Z)|0,i=i+Math.imul(R,G)|0,n=n+Math.imul(x,Q)|0,o=(o=o+Math.imul(x,ee)|0)+Math.imul(S,Q)|0,i=i+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,o=(o=o+Math.imul(w,ne)|0)+Math.imul(_,re)|0,i=i+Math.imul(_,ne)|0,n=n+Math.imul(b,ie)|0,o=(o=o+Math.imul(b,ae)|0)+Math.imul(v,ie)|0,i=i+Math.imul(v,ae)|0,n=n+Math.imul(p,ue)|0,o=(o=o+Math.imul(p,ce)|0)+Math.imul(y,ue)|0,i=i+Math.imul(y,ce)|0;var Se=(c+(n=n+Math.imul(l,le)|0)|0)+((8191&(o=(o=o+Math.imul(l,he)|0)+Math.imul(h,le)|0))<<13)|0;c=((i=i+Math.imul(h,he)|0)+(o>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(F,U),o=(o=Math.imul(F,H))+Math.imul(L,U)|0,i=Math.imul(L,H),n=n+Math.imul(N,W)|0,o=(o=o+Math.imul(N,q)|0)+Math.imul(D,W)|0,i=i+Math.imul(D,q)|0,n=n+Math.imul(A,X)|0,o=(o=o+Math.imul(A,K)|0)+Math.imul(M,X)|0,i=i+Math.imul(M,K)|0,n=n+Math.imul(T,Z)|0,o=(o=o+Math.imul(T,G)|0)+Math.imul(C,Z)|0,i=i+Math.imul(C,G)|0,n=n+Math.imul(E,Q)|0,o=(o=o+Math.imul(E,ee)|0)+Math.imul(R,Q)|0,i=i+Math.imul(R,ee)|0,n=n+Math.imul(x,re)|0,o=(o=o+Math.imul(x,ne)|0)+Math.imul(S,re)|0,i=i+Math.imul(S,ne)|0,n=n+Math.imul(w,ie)|0,o=(o=o+Math.imul(w,ae)|0)+Math.imul(_,ie)|0,i=i+Math.imul(_,ae)|0,n=n+Math.imul(b,ue)|0,o=(o=o+Math.imul(b,ce)|0)+Math.imul(v,ue)|0,i=i+Math.imul(v,ce)|0,n=n+Math.imul(p,le)|0,o=(o=o+Math.imul(p,he)|0)+Math.imul(y,le)|0,i=i+Math.imul(y,he)|0;var Oe=(c+(n=n+Math.imul(l,pe)|0)|0)+((8191&(o=(o=o+Math.imul(l,ye)|0)+Math.imul(h,pe)|0))<<13)|0;c=((i=i+Math.imul(h,ye)|0)+(o>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(F,W),o=(o=Math.imul(F,q))+Math.imul(L,W)|0,i=Math.imul(L,q),n=n+Math.imul(N,X)|0,o=(o=o+Math.imul(N,K)|0)+Math.imul(D,X)|0,i=i+Math.imul(D,K)|0,n=n+Math.imul(A,Z)|0,o=(o=o+Math.imul(A,G)|0)+Math.imul(M,Z)|0,i=i+Math.imul(M,G)|0,n=n+Math.imul(T,Q)|0,o=(o=o+Math.imul(T,ee)|0)+Math.imul(C,Q)|0,i=i+Math.imul(C,ee)|0,n=n+Math.imul(E,re)|0,o=(o=o+Math.imul(E,ne)|0)+Math.imul(R,re)|0,i=i+Math.imul(R,ne)|0,n=n+Math.imul(x,ie)|0,o=(o=o+Math.imul(x,ae)|0)+Math.imul(S,ie)|0,i=i+Math.imul(S,ae)|0,n=n+Math.imul(w,ue)|0,o=(o=o+Math.imul(w,ce)|0)+Math.imul(_,ue)|0,i=i+Math.imul(_,ce)|0,n=n+Math.imul(b,le)|0,o=(o=o+Math.imul(b,he)|0)+Math.imul(v,le)|0,i=i+Math.imul(v,he)|0;var Ee=(c+(n=n+Math.imul(p,pe)|0)|0)+((8191&(o=(o=o+Math.imul(p,ye)|0)+Math.imul(y,pe)|0))<<13)|0;c=((i=i+Math.imul(y,ye)|0)+(o>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(F,X),o=(o=Math.imul(F,K))+Math.imul(L,X)|0,i=Math.imul(L,K),n=n+Math.imul(N,Z)|0,o=(o=o+Math.imul(N,G)|0)+Math.imul(D,Z)|0,i=i+Math.imul(D,G)|0,n=n+Math.imul(A,Q)|0,o=(o=o+Math.imul(A,ee)|0)+Math.imul(M,Q)|0,i=i+Math.imul(M,ee)|0,n=n+Math.imul(T,re)|0,o=(o=o+Math.imul(T,ne)|0)+Math.imul(C,re)|0,i=i+Math.imul(C,ne)|0,n=n+Math.imul(E,ie)|0,o=(o=o+Math.imul(E,ae)|0)+Math.imul(R,ie)|0,i=i+Math.imul(R,ae)|0,n=n+Math.imul(x,ue)|0,o=(o=o+Math.imul(x,ce)|0)+Math.imul(S,ue)|0,i=i+Math.imul(S,ce)|0,n=n+Math.imul(w,le)|0,o=(o=o+Math.imul(w,he)|0)+Math.imul(_,le)|0,i=i+Math.imul(_,he)|0;var Re=(c+(n=n+Math.imul(b,pe)|0)|0)+((8191&(o=(o=o+Math.imul(b,ye)|0)+Math.imul(v,pe)|0))<<13)|0;c=((i=i+Math.imul(v,ye)|0)+(o>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(F,Z),o=(o=Math.imul(F,G))+Math.imul(L,Z)|0,i=Math.imul(L,G),n=n+Math.imul(N,Q)|0,o=(o=o+Math.imul(N,ee)|0)+Math.imul(D,Q)|0,i=i+Math.imul(D,ee)|0,n=n+Math.imul(A,re)|0,o=(o=o+Math.imul(A,ne)|0)+Math.imul(M,re)|0,i=i+Math.imul(M,ne)|0,n=n+Math.imul(T,ie)|0,o=(o=o+Math.imul(T,ae)|0)+Math.imul(C,ie)|0,i=i+Math.imul(C,ae)|0,n=n+Math.imul(E,ue)|0,o=(o=o+Math.imul(E,ce)|0)+Math.imul(R,ue)|0,i=i+Math.imul(R,ce)|0,n=n+Math.imul(x,le)|0,o=(o=o+Math.imul(x,he)|0)+Math.imul(S,le)|0,i=i+Math.imul(S,he)|0;var je=(c+(n=n+Math.imul(w,pe)|0)|0)+((8191&(o=(o=o+Math.imul(w,ye)|0)+Math.imul(_,pe)|0))<<13)|0;c=((i=i+Math.imul(_,ye)|0)+(o>>>13)|0)+(je>>>26)|0,je&=67108863,n=Math.imul(F,Q),o=(o=Math.imul(F,ee))+Math.imul(L,Q)|0,i=Math.imul(L,ee),n=n+Math.imul(N,re)|0,o=(o=o+Math.imul(N,ne)|0)+Math.imul(D,re)|0,i=i+Math.imul(D,ne)|0,n=n+Math.imul(A,ie)|0,o=(o=o+Math.imul(A,ae)|0)+Math.imul(M,ie)|0,i=i+Math.imul(M,ae)|0,n=n+Math.imul(T,ue)|0,o=(o=o+Math.imul(T,ce)|0)+Math.imul(C,ue)|0,i=i+Math.imul(C,ce)|0,n=n+Math.imul(E,le)|0,o=(o=o+Math.imul(E,he)|0)+Math.imul(R,le)|0,i=i+Math.imul(R,he)|0;var Te=(c+(n=n+Math.imul(x,pe)|0)|0)+((8191&(o=(o=o+Math.imul(x,ye)|0)+Math.imul(S,pe)|0))<<13)|0;c=((i=i+Math.imul(S,ye)|0)+(o>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(F,re),o=(o=Math.imul(F,ne))+Math.imul(L,re)|0,i=Math.imul(L,ne),n=n+Math.imul(N,ie)|0,o=(o=o+Math.imul(N,ae)|0)+Math.imul(D,ie)|0,i=i+Math.imul(D,ae)|0,n=n+Math.imul(A,ue)|0,o=(o=o+Math.imul(A,ce)|0)+Math.imul(M,ue)|0,i=i+Math.imul(M,ce)|0,n=n+Math.imul(T,le)|0,o=(o=o+Math.imul(T,he)|0)+Math.imul(C,le)|0,i=i+Math.imul(C,he)|0;var Ce=(c+(n=n+Math.imul(E,pe)|0)|0)+((8191&(o=(o=o+Math.imul(E,ye)|0)+Math.imul(R,pe)|0))<<13)|0;c=((i=i+Math.imul(R,ye)|0)+(o>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(F,ie),o=(o=Math.imul(F,ae))+Math.imul(L,ie)|0,i=Math.imul(L,ae),n=n+Math.imul(N,ue)|0,o=(o=o+Math.imul(N,ce)|0)+Math.imul(D,ue)|0,i=i+Math.imul(D,ce)|0,n=n+Math.imul(A,le)|0,o=(o=o+Math.imul(A,he)|0)+Math.imul(M,le)|0,i=i+Math.imul(M,he)|0;var Pe=(c+(n=n+Math.imul(T,pe)|0)|0)+((8191&(o=(o=o+Math.imul(T,ye)|0)+Math.imul(C,pe)|0))<<13)|0;c=((i=i+Math.imul(C,ye)|0)+(o>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(F,ue),o=(o=Math.imul(F,ce))+Math.imul(L,ue)|0,i=Math.imul(L,ce),n=n+Math.imul(N,le)|0,o=(o=o+Math.imul(N,he)|0)+Math.imul(D,le)|0,i=i+Math.imul(D,he)|0;var Ae=(c+(n=n+Math.imul(A,pe)|0)|0)+((8191&(o=(o=o+Math.imul(A,ye)|0)+Math.imul(M,pe)|0))<<13)|0;c=((i=i+Math.imul(M,ye)|0)+(o>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(F,le),o=(o=Math.imul(F,he))+Math.imul(L,le)|0,i=Math.imul(L,he);var Me=(c+(n=n+Math.imul(N,pe)|0)|0)+((8191&(o=(o=o+Math.imul(N,ye)|0)+Math.imul(D,pe)|0))<<13)|0;c=((i=i+Math.imul(D,ye)|0)+(o>>>13)|0)+(Me>>>26)|0,Me&=67108863;var Ie=(c+(n=Math.imul(F,pe))|0)+((8191&(o=(o=Math.imul(F,ye))+Math.imul(L,pe)|0))<<13)|0;return c=((i=Math.imul(L,ye))+(o>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,u[0]=me,u[1]=be,u[2]=ve,u[3]=ge,u[4]=we,u[5]=_e,u[6]=ke,u[7]=xe,u[8]=Se,u[9]=Oe,u[10]=Ee,u[11]=Re,u[12]=je,u[13]=Te,u[14]=Ce,u[15]=Pe,u[16]=Ae,u[17]=Me,u[18]=Ie,0!==c&&(u[19]=c,r.length++),r};function p(e,t,r){return(new y).mulp(e,t,r)}function y(e,t){this.x=e,this.y=t}Math.imul||(d=h),i.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,t):r<63?h(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,o=0,i=0;i<r.length-1;i++){var a=o;o=0;for(var s=67108863&n,u=Math.min(i,t.length-1),c=Math.max(0,i-e.length+1);c<=u;c++){var f=i-c,l=(0|e.words[f])*(0|t.words[c]),h=67108863&l;s=67108863&(h=h+s|0),o+=(a=(a=a+(l/67108864|0)|0)+(h>>>26)|0)>>>26,a&=67108863}r.words[i]=s,n=a,a=o}return 0!==n?r.words[i]=n:r.length--,r.strip()}(this,e,t):p(this,e,t)},y.prototype.makeRBT=function(e){for(var t=new Array(e),r=i.prototype._countBits(e)-1,n=0;n<e;n++)t[n]=this.revBin(n,r,e);return t},y.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var n=0,o=0;o<t;o++)n|=(1&e)<<t-o-1,e>>=1;return n},y.prototype.permute=function(e,t,r,n,o,i){for(var a=0;a<i;a++)n[a]=t[e[a]],o[a]=r[e[a]]},y.prototype.transform=function(e,t,r,n,o,i){this.permute(i,e,t,r,n,o);for(var a=1;a<o;a<<=1)for(var s=a<<1,u=Math.cos(2*Math.PI/s),c=Math.sin(2*Math.PI/s),f=0;f<o;f+=s)for(var l=u,h=c,d=0;d<a;d++){var p=r[f+d],y=n[f+d],m=r[f+d+a],b=n[f+d+a],v=l*m-h*b;b=l*b+h*m,m=v,r[f+d]=p+m,n[f+d]=y+b,r[f+d+a]=p-m,n[f+d+a]=y-b,d!==s&&(v=u*l-c*h,h=u*h+c*l,l=v)}},y.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),n=1&r,o=0;for(r=r/2|0;r;r>>>=1)o++;return 1<<o+1+n},y.prototype.conjugate=function(e,t,r){if(!(r<=1))for(var n=0;n<r/2;n++){var o=e[n];e[n]=e[r-n-1],e[r-n-1]=o,o=t[n],t[n]=-t[r-n-1],t[r-n-1]=-o}},y.prototype.normalize13b=function(e,t){for(var r=0,n=0;n<t/2;n++){var o=8192*Math.round(e[2*n+1]/t)+Math.round(e[2*n]/t)+r;e[n]=67108863&o,r=o<67108864?0:o/67108864|0}return e},y.prototype.convert13b=function(e,t,r,o){for(var i=0,a=0;a<t;a++)i+=0|e[a],r[2*a]=8191&i,i>>>=13,r[2*a+1]=8191&i,i>>>=13;for(a=2*t;a<o;++a)r[a]=0;n(0===i),n(0==(-8192&i))},y.prototype.stub=function(e){for(var t=new Array(e),r=0;r<e;r++)t[r]=0;return t},y.prototype.mulp=function(e,t,r){var n=2*this.guessLen13b(e.length,t.length),o=this.makeRBT(n),i=this.stub(n),a=new Array(n),s=new Array(n),u=new Array(n),c=new Array(n),f=new Array(n),l=new Array(n),h=r.words;h.length=n,this.convert13b(e.words,e.length,a,n),this.convert13b(t.words,t.length,c,n),this.transform(a,i,s,u,n,o),this.transform(c,i,f,l,n,o);for(var d=0;d<n;d++){var p=s[d]*f[d]-u[d]*l[d];u[d]=s[d]*l[d]+u[d]*f[d],s[d]=p}return this.conjugate(s,u,n),this.transform(s,u,h,i,n,o),this.conjugate(h,i,n),this.normalize13b(h,n),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},i.prototype.mul=function(e){var t=new i(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},i.prototype.mulf=function(e){var t=new i(null);return t.words=new Array(this.length+e.length),p(this,e,t)},i.prototype.imul=function(e){return this.clone().mulTo(e,this)},i.prototype.imuln=function(e){n(\"number\"==typeof e),n(e<67108864);for(var t=0,r=0;r<this.length;r++){var o=(0|this.words[r])*e,i=(67108863&o)+(67108863&t);t>>=26,t+=o/67108864|0,t+=i>>>26,this.words[r]=67108863&i}return 0!==t&&(this.words[r]=t,this.length++),this},i.prototype.muln=function(e){return this.clone().imuln(e)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.imul(this.clone())},i.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r<t.length;r++){var n=r/26|0,o=r%26;t[r]=(e.words[n]&1<<o)>>>o}return t}(e);if(0===t.length)return new i(1);for(var r=this,n=0;n<t.length&&0===t[n];n++,r=r.sqr());if(++n<t.length)for(var o=r.sqr();n<t.length;n++,o=o.sqr())0!==t[n]&&(r=r.mul(o));return r},i.prototype.iushln=function(e){n(\"number\"==typeof e&&e>=0);var t,r=e%26,o=(e-r)/26,i=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t<this.length;t++){var s=this.words[t]&i,u=(0|this.words[t])-s<<r;this.words[t]=u|a,a=s>>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==o){for(t=this.length-1;t>=0;t--)this.words[t+o]=this.words[t];for(t=0;t<o;t++)this.words[t]=0;this.length+=o}return this.strip()},i.prototype.ishln=function(e){return n(0===this.negative),this.iushln(e)},i.prototype.iushrn=function(e,t,r){var o;n(\"number\"==typeof e&&e>=0),o=t?(t-t%26)/26:0;var i=e%26,a=Math.min((e-i)/26,this.length),s=67108863^67108863>>>i<<i,u=r;if(o-=a,o=Math.max(0,o),u){for(var c=0;c<a;c++)u.words[c]=this.words[c];u.length=a}if(0===a);else if(this.length>a)for(this.length-=a,c=0;c<this.length;c++)this.words[c]=this.words[c+a];else this.words[0]=0,this.length=1;var f=0;for(c=this.length-1;c>=0&&(0!==f||c>=o);c--){var l=0|this.words[c];this.words[c]=f<<26-i|l>>>i,f=l&s}return u&&0!==f&&(u.words[u.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},i.prototype.shln=function(e){return this.clone().ishln(e)},i.prototype.ushln=function(e){return this.clone().iushln(e)},i.prototype.shrn=function(e){return this.clone().ishrn(e)},i.prototype.ushrn=function(e){return this.clone().iushrn(e)},i.prototype.testn=function(e){n(\"number\"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,o=1<<t;return!(this.length<=r)&&!!(this.words[r]&o)},i.prototype.imaskn=function(e){n(\"number\"==typeof e&&e>=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,\"imaskn works only with positive numbers\"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var o=67108863^67108863>>>t<<t;this.words[this.length-1]&=o}return this.strip()},i.prototype.maskn=function(e){return this.clone().imaskn(e)},i.prototype.iaddn=function(e){return n(\"number\"==typeof e),n(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},i.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},i.prototype.isubn=function(e){if(n(\"number\"==typeof e),n(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},i.prototype.addn=function(e){return this.clone().iaddn(e)},i.prototype.subn=function(e){return this.clone().isubn(e)},i.prototype.iabs=function(){return this.negative=0,this},i.prototype.abs=function(){return this.clone().iabs()},i.prototype._ishlnsubmul=function(e,t,r){var o,i,a=e.length+r;this._expand(a);var s=0;for(o=0;o<e.length;o++){i=(0|this.words[o+r])+s;var u=(0|e.words[o])*t;s=((i-=67108863&u)>>26)-(u/67108864|0),this.words[o+r]=67108863&i}for(;o<this.length-r;o++)s=(i=(0|this.words[o+r])+s)>>26,this.words[o+r]=67108863&i;if(0===s)return this.strip();for(n(-1===s),s=0,o=0;o<this.length;o++)s=(i=-(0|this.words[o])+s)>>26,this.words[o]=67108863&i;return this.negative=1,this.strip()},i.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),o=e,a=0|o.words[o.length-1];0!==(r=26-this._countBits(a))&&(o=o.ushln(r),n.iushln(r),a=0|o.words[o.length-1]);var s,u=n.length-o.length;if(\"mod\"!==t){(s=new i(null)).length=u+1,s.words=new Array(s.length);for(var c=0;c<s.length;c++)s.words[c]=0}var f=n.clone()._ishlnsubmul(o,1,u);0===f.negative&&(n=f,s&&(s.words[u]=1));for(var l=u-1;l>=0;l--){var h=67108864*(0|n.words[o.length+l])+(0|n.words[o.length+l-1]);for(h=Math.min(h/a|0,67108863),n._ishlnsubmul(o,h,l);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(o,1,l),n.isZero()||(n.negative^=1);s&&(s.words[l]=h)}return s&&s.strip(),n.strip(),\"div\"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},i.prototype.divmod=function(e,t,r){return n(!e.isZero()),this.isZero()?{div:new i(0),mod:new i(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),\"mod\"!==t&&(o=s.div.neg()),\"div\"!==t&&(a=s.mod.neg(),r&&0!==a.negative&&a.iadd(e)),{div:o,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),\"mod\"!==t&&(o=s.div.neg()),{div:o,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),\"div\"!==t&&(a=s.mod.neg(),r&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new i(0),mod:this}:1===e.length?\"div\"===t?{div:this.divn(e.words[0]),mod:null}:\"mod\"===t?{div:null,mod:new i(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new i(this.modn(e.words[0]))}:this._wordDiv(e,t);var o,a,s},i.prototype.div=function(e){return this.divmod(e,\"div\",!1).div},i.prototype.mod=function(e){return this.divmod(e,\"mod\",!1).mod},i.prototype.umod=function(e){return this.divmod(e,\"mod\",!0).mod},i.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),o=e.andln(1),i=r.cmp(n);return i<0||1===o&&0===i?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},i.prototype.modn=function(e){n(e<=67108863);for(var t=(1<<26)%e,r=0,o=this.length-1;o>=0;o--)r=(t*r+(0|this.words[o]))%e;return r},i.prototype.idivn=function(e){n(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var o=(0|this.words[r])+67108864*t;this.words[r]=o/e|0,t=o%e}return this.strip()},i.prototype.divn=function(e){return this.clone().idivn(e)},i.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var o=new i(1),a=new i(0),s=new i(0),u=new i(1),c=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++c;for(var f=r.clone(),l=t.clone();!t.isZero();){for(var h=0,d=1;0==(t.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(t.iushrn(h);h-- >0;)(o.isOdd()||a.isOdd())&&(o.iadd(f),a.isub(l)),o.iushrn(1),a.iushrn(1);for(var p=0,y=1;0==(r.words[0]&y)&&p<26;++p,y<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(f),u.isub(l)),s.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(s),a.isub(u)):(r.isub(t),s.isub(o),u.isub(a))}return{a:s,b:u,gcd:r.iushln(c)}},i.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var o,a=new i(1),s=new i(0),u=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,f=1;0==(t.words[0]&f)&&c<26;++c,f<<=1);if(c>0)for(t.iushrn(c);c-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var l=0,h=1;0==(r.words[0]&h)&&l<26;++l,h<<=1);if(l>0)for(r.iushrn(l);l-- >0;)s.isOdd()&&s.iadd(u),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),a.isub(s)):(r.isub(t),s.isub(a))}return(o=0===t.cmpn(1)?a:s).cmpn(0)<0&&o.iadd(e),o},i.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var o=t.cmp(r);if(o<0){var i=t;t=r,r=i}else if(0===o||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},i.prototype.invm=function(e){return this.egcd(e).a.umod(e)},i.prototype.isEven=function(){return 0==(1&this.words[0])},i.prototype.isOdd=function(){return 1==(1&this.words[0])},i.prototype.andln=function(e){return this.words[0]&e},i.prototype.bincn=function(e){n(\"number\"==typeof e);var t=e%26,r=(e-t)/26,o=1<<t;if(this.length<=r)return this._expand(r+1),this.words[r]|=o,this;for(var i=o,a=r;0!==i&&a<this.length;a++){var s=0|this.words[a];i=(s+=i)>>>26,s&=67108863,this.words[a]=s}return 0!==i&&(this.words[a]=i,this.length++),this},i.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},i.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),n(e<=67108863,\"Number is too big\");var o=0|this.words[0];t=o===e?0:o<e?-1:1}return 0!==this.negative?0|-t:t},i.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},i.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],o=0|e.words[r];if(n!==o){n<o?t=-1:n>o&&(t=1);break}}return t},i.prototype.gtn=function(e){return 1===this.cmpn(e)},i.prototype.gt=function(e){return 1===this.cmp(e)},i.prototype.gten=function(e){return this.cmpn(e)>=0},i.prototype.gte=function(e){return this.cmp(e)>=0},i.prototype.ltn=function(e){return-1===this.cmpn(e)},i.prototype.lt=function(e){return-1===this.cmp(e)},i.prototype.lten=function(e){return this.cmpn(e)<=0},i.prototype.lte=function(e){return this.cmp(e)<=0},i.prototype.eqn=function(e){return 0===this.cmpn(e)},i.prototype.eq=function(e){return 0===this.cmp(e)},i.red=function(e){return new k(e)},i.prototype.toRed=function(e){return n(!this.red,\"Already a number in reduction context\"),n(0===this.negative,\"red works only with positives\"),e.convertTo(this)._forceRed(e)},i.prototype.fromRed=function(){return n(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},i.prototype._forceRed=function(e){return this.red=e,this},i.prototype.forceRed=function(e){return n(!this.red,\"Already a number in reduction context\"),this._forceRed(e)},i.prototype.redAdd=function(e){return n(this.red,\"redAdd works only with red numbers\"),this.red.add(this,e)},i.prototype.redIAdd=function(e){return n(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,e)},i.prototype.redSub=function(e){return n(this.red,\"redSub works only with red numbers\"),this.red.sub(this,e)},i.prototype.redISub=function(e){return n(this.red,\"redISub works only with red numbers\"),this.red.isub(this,e)},i.prototype.redShl=function(e){return n(this.red,\"redShl works only with red numbers\"),this.red.shl(this,e)},i.prototype.redMul=function(e){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.mul(this,e)},i.prototype.redIMul=function(e){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.imul(this,e)},i.prototype.redSqr=function(){return n(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return n(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return n(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return n(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return n(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(e){return n(this.red&&!e.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,e)};var m={k256:null,p224:null,p192:null,p25519:null};function b(e,t){this.name=e,this.p=new i(t,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){b.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function g(){b.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function w(){b.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function _(){b.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function k(e){if(\"string\"==typeof e){var t=i._prime(e);this.m=t.p,this.prime=t}else n(e.gtn(1),\"modulus must be greater than 1\"),this.m=e,this.prime=null}function x(e){k.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}b.prototype._tmp=function(){var e=new i(null);return e.words=new Array(Math.ceil(this.n/13)),e},b.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},b.prototype.split=function(e,t){e.iushrn(this.n,0,t)},b.prototype.imulK=function(e){return e.imul(this.k)},o(v,b),v.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n<r;n++)t.words[n]=e.words[n];if(t.length=r,e.length<=9)return e.words[0]=0,void(e.length=1);var o=e.words[9];for(t.words[t.length++]=4194303&o,n=10;n<e.length;n++){var i=0|e.words[n];e.words[n-10]=(4194303&i)<<4|o>>>22,o=i}o>>>=22,e.words[n-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},v.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r<e.length;r++){var n=0|e.words[r];t+=977*n,e.words[r]=67108863&t,t=64*n+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},o(g,b),o(w,b),o(_,b),_.prototype.imulK=function(e){for(var t=0,r=0;r<e.length;r++){var n=19*(0|e.words[r])+t,o=67108863&n;n>>>=26,e.words[r]=o,t=n}return 0!==t&&(e.words[e.length++]=t),e},i._prime=function(e){if(m[e])return m[e];var t;if(\"k256\"===e)t=new v;else if(\"p224\"===e)t=new g;else if(\"p192\"===e)t=new w;else{if(\"p25519\"!==e)throw new Error(\"Unknown prime \"+e);t=new _}return m[e]=t,t},k.prototype._verify1=function(e){n(0===e.negative,\"red works only with positives\"),n(e.red,\"red works only with red numbers\")},k.prototype._verify2=function(e,t){n(0==(e.negative|t.negative),\"red works only with positives\"),n(e.red&&e.red===t.red,\"red works only with red numbers\")},k.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},k.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},k.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},k.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},k.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},k.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},k.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},k.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},k.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},k.prototype.isqr=function(e){return this.imul(e,e.clone())},k.prototype.sqr=function(e){return this.mul(e,e)},k.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2==1),3===t){var r=this.m.add(new i(1)).iushrn(2);return this.pow(e,r)}for(var o=this.m.subn(1),a=0;!o.isZero()&&0===o.andln(1);)a++,o.iushrn(1);n(!o.isZero());var s=new i(1).toRed(this),u=s.redNeg(),c=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new i(2*f*f).toRed(this);0!==this.pow(f,c).cmp(u);)f.redIAdd(u);for(var l=this.pow(f,o),h=this.pow(e,o.addn(1).iushrn(1)),d=this.pow(e,o),p=a;0!==d.cmp(s);){for(var y=d,m=0;0!==y.cmp(s);m++)y=y.redSqr();n(m<p);var b=this.pow(l,new i(1).iushln(p-m-1));h=h.redMul(b),l=b.redSqr(),d=d.redMul(l),p=m}return h},k.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},k.prototype.pow=function(e,t){if(t.isZero())return new i(1).toRed(this);if(0===t.cmpn(1))return e.clone();var r=new Array(16);r[0]=new i(1).toRed(this),r[1]=e;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],e);var o=r[0],a=0,s=0,u=t.bitLength()%26;for(0===u&&(u=26),n=t.length-1;n>=0;n--){for(var c=t.words[n],f=u-1;f>=0;f--){var l=c>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==a?(a<<=1,a|=l,(4===++s||0===n&&0===f)&&(o=this.mul(o,r[a]),s=0,a=0)):s=0}u=26}return o},k.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},k.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},i.mont=function(e){return new x(e)},o(x,k),x.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},x.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},x.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).iushrn(this.shift),i=o;return o.cmp(this.m)>=0?i=o.isub(this.m):o.cmpn(0)<0&&(i=o.iadd(this.m)),i._forceRed(this)},x.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new i(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).iushrn(this.shift),a=o;return o.cmp(this.m)>=0?a=o.isub(this.m):o.cmpn(0)<0&&(a=o.iadd(this.m)),a._forceRed(this)},x.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this)},{buffer:158}],157:[function(e,t,r){var n;function o(e){this.rand=e}if(t.exports=function(e){return n||(n=new o(null)),n.generate(e)},t.exports.Rand=o,o.prototype.generate=function(e){return this._rand(e)},o.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r<t.length;r++)t[r]=this.rand.getByte();return t},\"object\"===(\"undefined\"==typeof self?\"undefined\":_typeof2(self)))self.crypto&&self.crypto.getRandomValues?o.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?o.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:\"object\"===(\"undefined\"==typeof window?\"undefined\":_typeof2(window))&&(o.prototype._rand=function(){throw new Error(\"Not implemented yet\")});else try{var i=e(\"crypto\");if(\"function\"!=typeof i.randomBytes)throw new Error(\"Not supported\");o.prototype._rand=function(e){return i.randomBytes(e)}}catch(e){}},{crypto:158}],158:[function(e,t,r){},{}],159:[function(e,t,r){var n=e(\"safe-buffer\").Buffer;function o(e){n.isBuffer(e)||(e=n.from(e));for(var t=e.length/4|0,r=new Array(t),o=0;o<t;o++)r[o]=e.readUInt32BE(4*o);return r}function i(e){for(;0<e.length;e++)e[0]=0}function a(e,t,r,n,o){for(var i,a,s,u,c=r[0],f=r[1],l=r[2],h=r[3],d=e[0]^t[0],p=e[1]^t[1],y=e[2]^t[2],m=e[3]^t[3],b=4,v=1;v<o;v++)i=c[d>>>24]^f[p>>>16&255]^l[y>>>8&255]^h[255&m]^t[b++],a=c[p>>>24]^f[y>>>16&255]^l[m>>>8&255]^h[255&d]^t[b++],s=c[y>>>24]^f[m>>>16&255]^l[d>>>8&255]^h[255&p]^t[b++],u=c[m>>>24]^f[d>>>16&255]^l[p>>>8&255]^h[255&y]^t[b++],d=i,p=a,y=s,m=u;return i=(n[d>>>24]<<24|n[p>>>16&255]<<16|n[y>>>8&255]<<8|n[255&m])^t[b++],a=(n[p>>>24]<<24|n[y>>>16&255]<<16|n[m>>>8&255]<<8|n[255&d])^t[b++],s=(n[y>>>24]<<24|n[m>>>16&255]<<16|n[d>>>8&255]<<8|n[255&p])^t[b++],u=(n[m>>>24]<<24|n[d>>>16&255]<<16|n[p>>>8&255]<<8|n[255&y])^t[b++],[i>>>=0,a>>>=0,s>>>=0,u>>>=0]}var s=[0,1,2,4,8,16,32,64,128,27,54],u=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var r=[],n=[],o=[[],[],[],[]],i=[[],[],[],[]],a=0,s=0,u=0;u<256;++u){var c=s^s<<1^s<<2^s<<3^s<<4;c=c>>>8^255&c^99,r[a]=c,n[c]=a;var f=e[a],l=e[f],h=e[l],d=257*e[c]^16843008*c;o[0][a]=d<<24|d>>>8,o[1][a]=d<<16|d>>>16,o[2][a]=d<<8|d>>>24,o[3][a]=d,d=16843009*h^65537*l^257*f^16843008*a,i[0][c]=d<<24|d>>>8,i[1][c]=d<<16|d>>>16,i[2][c]=d<<8|d>>>24,i[3][c]=d,0===a?a=s=1:(a=f^e[e[e[h^f]]],s^=e[e[s]])}return{SBOX:r,INV_SBOX:n,SUB_MIX:o,INV_SUB_MIX:i}}();function c(e){this._key=o(e),this._reset()}c.blockSize=16,c.keySize=32,c.prototype.blockSize=c.blockSize,c.prototype.keySize=c.keySize,c.prototype._reset=function(){for(var e=this._key,t=e.length,r=t+6,n=4*(r+1),o=[],i=0;i<t;i++)o[i]=e[i];for(i=t;i<n;i++){var a=o[i-1];i%t==0?(a=a<<8|a>>>24,a=u.SBOX[a>>>24]<<24|u.SBOX[a>>>16&255]<<16|u.SBOX[a>>>8&255]<<8|u.SBOX[255&a],a^=s[i/t|0]<<24):t>6&&i%t==4&&(a=u.SBOX[a>>>24]<<24|u.SBOX[a>>>16&255]<<16|u.SBOX[a>>>8&255]<<8|u.SBOX[255&a]),o[i]=o[i-t]^a}for(var c=[],f=0;f<n;f++){var l=n-f,h=o[l-(f%4?0:4)];c[f]=f<4||l<=4?h:u.INV_SUB_MIX[0][u.SBOX[h>>>24]]^u.INV_SUB_MIX[1][u.SBOX[h>>>16&255]]^u.INV_SUB_MIX[2][u.SBOX[h>>>8&255]]^u.INV_SUB_MIX[3][u.SBOX[255&h]]}this._nRounds=r,this._keySchedule=o,this._invKeySchedule=c},c.prototype.encryptBlockRaw=function(e){return a(e=o(e),this._keySchedule,u.SUB_MIX,u.SBOX,this._nRounds)},c.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),r=n.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r},c.prototype.decryptBlock=function(e){var t=(e=o(e))[1];e[1]=e[3],e[3]=t;var r=a(e,this._invKeySchedule,u.INV_SUB_MIX,u.INV_SBOX,this._nRounds),i=n.allocUnsafe(16);return i.writeUInt32BE(r[0],0),i.writeUInt32BE(r[3],4),i.writeUInt32BE(r[2],8),i.writeUInt32BE(r[1],12),i},c.prototype.scrub=function(){i(this._keySchedule),i(this._invKeySchedule),i(this._key)},t.exports.AES=c},{\"safe-buffer\":445}],160:[function(e,t,r){var n=e(\"./aes\"),o=e(\"safe-buffer\").Buffer,i=e(\"cipher-base\"),a=e(\"inherits\"),s=e(\"./ghash\"),u=e(\"buffer-xor\"),c=e(\"./incr32\");function f(e,t,r,a){i.call(this);var u=o.alloc(4,0);this._cipher=new n.AES(t);var f=this._cipher.encryptBlock(u);this._ghash=new s(f),r=function(e,t,r){if(12===t.length)return e._finID=o.concat([t,o.from([0,0,0,1])]),o.concat([t,o.from([0,0,0,2])]);var n=new s(r),i=t.length,a=i%16;n.update(t),a&&(a=16-a,n.update(o.alloc(a,0))),n.update(o.alloc(8,0));var u=8*i,f=o.alloc(8);f.writeUIntBE(u,0,8),n.update(f),e._finID=n.state;var l=o.from(e._finID);return c(l),l}(this,r,f),this._prev=o.from(r),this._cache=o.allocUnsafe(0),this._secCache=o.allocUnsafe(0),this._decrypt=a,this._alen=0,this._len=0,this._mode=e,this._authTag=null,this._called=!1}a(f,i),f.prototype._update=function(e){if(!this._called&&this._alen){var t=16-this._alen%16;t<16&&(t=o.alloc(t,0),this._ghash.update(t))}this._called=!0;var r=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(r),this._len+=e.length,r},f.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error(\"Unsupported state or unable to authenticate data\");var e=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(e,t){var r=0;e.length!==t.length&&r++;for(var n=Math.min(e.length,t.length),o=0;o<n;++o)r+=e[o]^t[o];return r}(e,this._authTag))throw new Error(\"Unsupported state or unable to authenticate data\");this._authTag=e,this._cipher.scrub()},f.prototype.getAuthTag=function(){if(this._decrypt||!o.isBuffer(this._authTag))throw new Error(\"Attempting to get auth tag in unsupported state\");return this._authTag},f.prototype.setAuthTag=function(e){if(!this._decrypt)throw new Error(\"Attempting to set auth tag in unsupported state\");this._authTag=e},f.prototype.setAAD=function(e){if(this._called)throw new Error(\"Attempting to set AAD in unsupported state\");this._ghash.update(e),this._alen+=e.length},t.exports=f},{\"./aes\":159,\"./ghash\":164,\"./incr32\":165,\"buffer-xor\":187,\"cipher-base\":189,inherits:341,\"safe-buffer\":445}],161:[function(e,t,r){var n=e(\"./encrypter\"),o=e(\"./decrypter\"),i=e(\"./modes/list.json\");r.createCipher=r.Cipher=n.createCipher,r.createCipheriv=r.Cipheriv=n.createCipheriv,r.createDecipher=r.Decipher=o.createDecipher,r.createDecipheriv=r.Decipheriv=o.createDecipheriv,r.listCiphers=r.getCiphers=function(){return Object.keys(i)}},{\"./decrypter\":162,\"./encrypter\":163,\"./modes/list.json\":173}],162:[function(e,t,r){var n=e(\"./authCipher\"),o=e(\"safe-buffer\").Buffer,i=e(\"./modes\"),a=e(\"./streamCipher\"),s=e(\"cipher-base\"),u=e(\"./aes\"),c=e(\"evp_bytestokey\");function f(e,t,r){s.call(this),this._cache=new l,this._last=void 0,this._cipher=new u.AES(t),this._prev=o.from(r),this._mode=e,this._autopadding=!0}function l(){this.cache=o.allocUnsafe(0)}function h(e,t,r){var s=i[e.toLowerCase()];if(!s)throw new TypeError(\"invalid suite type\");if(\"string\"==typeof r&&(r=o.from(r)),\"GCM\"!==s.mode&&r.length!==s.iv)throw new TypeError(\"invalid iv length \"+r.length);if(\"string\"==typeof t&&(t=o.from(t)),t.length!==s.key/8)throw new TypeError(\"invalid key length \"+t.length);return\"stream\"===s.type?new a(s.module,t,r,!0):\"auth\"===s.type?new n(s.module,t,r,!0):new f(s.module,t,r)}e(\"inherits\")(f,s),f.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get(this._autopadding);)r=this._mode.decrypt(this,t),n.push(r);return o.concat(n)},f.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return function(e){var t=e[15];if(t<1||t>16)throw new Error(\"unable to decrypt data\");var r=-1;for(;++r<t;)if(e[r+(16-t)]!==t)throw new Error(\"unable to decrypt data\");if(16===t)return;return e.slice(0,16-t)}(this._mode.decrypt(this,e));if(e)throw new Error(\"data not multiple of block length\")},f.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},l.prototype.add=function(e){this.cache=o.concat([this.cache,e])},l.prototype.get=function(e){var t;if(e){if(this.cache.length>16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache},r.createDecipher=function(e,t){var r=i[e.toLowerCase()];if(!r)throw new TypeError(\"invalid suite type\");var n=c(t,!1,r.key,r.iv);return h(e,n.key,n.iv)},r.createDecipheriv=h},{\"./aes\":159,\"./authCipher\":160,\"./modes\":172,\"./streamCipher\":175,\"cipher-base\":189,evp_bytestokey:300,inherits:341,\"safe-buffer\":445}],163:[function(e,t,r){var n=e(\"./modes\"),o=e(\"./authCipher\"),i=e(\"safe-buffer\").Buffer,a=e(\"./streamCipher\"),s=e(\"cipher-base\"),u=e(\"./aes\"),c=e(\"evp_bytestokey\");function f(e,t,r){s.call(this),this._cache=new h,this._cipher=new u.AES(t),this._prev=i.from(r),this._mode=e,this._autopadding=!0}e(\"inherits\")(f,s),f.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get();)r=this._mode.encrypt(this,t),n.push(r);return i.concat(n)};var l=i.alloc(16,16);function h(){this.cache=i.allocUnsafe(0)}function d(e,t,r){var s=n[e.toLowerCase()];if(!s)throw new TypeError(\"invalid suite type\");if(\"string\"==typeof t&&(t=i.from(t)),t.length!==s.key/8)throw new TypeError(\"invalid key length \"+t.length);if(\"string\"==typeof r&&(r=i.from(r)),\"GCM\"!==s.mode&&r.length!==s.iv)throw new TypeError(\"invalid iv length \"+r.length);return\"stream\"===s.type?new a(s.module,t,r):\"auth\"===s.type?new o(s.module,t,r):new f(s.module,t,r)}f.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(l))throw this._cipher.scrub(),new Error(\"data not multiple of block length\")},f.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},h.prototype.add=function(e){this.cache=i.concat([this.cache,e])},h.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},h.prototype.flush=function(){for(var e=16-this.cache.length,t=i.allocUnsafe(e),r=-1;++r<e;)t.writeUInt8(e,r);return i.concat([this.cache,t])},r.createCipheriv=d,r.createCipher=function(e,t){var r=n[e.toLowerCase()];if(!r)throw new TypeError(\"invalid suite type\");var o=c(t,!1,r.key,r.iv);return d(e,o.key,o.iv)}},{\"./aes\":159,\"./authCipher\":160,\"./modes\":172,\"./streamCipher\":175,\"cipher-base\":189,evp_bytestokey:300,inherits:341,\"safe-buffer\":445}],164:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=n.alloc(16,0);function i(e){var t=n.allocUnsafe(16);return t.writeUInt32BE(e[0]>>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function a(e){this.h=e,this.state=n.alloc(16,0),this.cache=n.allocUnsafe(0)}a.prototype.ghash=function(e){for(var t=-1;++t<e.length;)this.state[t]^=e[t];this._multiply()},a.prototype._multiply=function(){for(var e,t,r,n=[(e=this.h).readUInt32BE(0),e.readUInt32BE(4),e.readUInt32BE(8),e.readUInt32BE(12)],o=[0,0,0,0],a=-1;++a<128;){for(0!=(this.state[~~(a/8)]&1<<7-a%8)&&(o[0]^=n[0],o[1]^=n[1],o[2]^=n[2],o[3]^=n[3]),r=0!=(1&n[3]),t=3;t>0;t--)n[t]=n[t]>>>1|(1&n[t-1])<<31;n[0]=n[0]>>>1,r&&(n[0]=n[0]^225<<24)}this.state=i(o)},a.prototype.update=function(e){var t;for(this.cache=n.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},a.prototype.final=function(e,t){return this.cache.length&&this.ghash(n.concat([this.cache,o],16)),this.ghash(i([0,e,0,t])),this.state},t.exports=a},{\"safe-buffer\":445}],165:[function(e,t,r){t.exports=function(e){for(var t,r=e.length;r--;){if(255!==(t=e.readUInt8(r))){t++,e.writeUInt8(t,r);break}e.writeUInt8(0,r)}}},{}],166:[function(e,t,r){var n=e(\"buffer-xor\");r.encrypt=function(e,t){var r=n(t,e._prev);return e._prev=e._cipher.encryptBlock(r),e._prev},r.decrypt=function(e,t){var r=e._prev;e._prev=t;var o=e._cipher.decryptBlock(t);return n(o,r)}},{\"buffer-xor\":187}],167:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"buffer-xor\");function i(e,t,r){var i=t.length,a=o(t,e._cache);return e._cache=e._cache.slice(i),e._prev=n.concat([e._prev,r?t:a]),a}r.encrypt=function(e,t,r){for(var o,a=n.allocUnsafe(0);t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=n.allocUnsafe(0)),!(e._cache.length<=t.length)){a=n.concat([a,i(e,t,r)]);break}o=e._cache.length,a=n.concat([a,i(e,t.slice(0,o),r)]),t=t.slice(o)}return a}},{\"buffer-xor\":187,\"safe-buffer\":445}],168:[function(e,t,r){var n=e(\"safe-buffer\").Buffer;function o(e,t,r){for(var n,o,a=-1,s=0;++a<8;)n=t&1<<7-a?128:0,s+=(128&(o=e._cipher.encryptBlock(e._prev)[0]^n))>>a%8,e._prev=i(e._prev,r?n:o);return s}function i(e,t){var r=e.length,o=-1,i=n.allocUnsafe(e.length);for(e=n.concat([e,n.from([t])]);++o<r;)i[o]=e[o]<<1|e[o+1]>>7;return i}r.encrypt=function(e,t,r){for(var i=t.length,a=n.allocUnsafe(i),s=-1;++s<i;)a[s]=o(e,t[s],r);return a}},{\"safe-buffer\":445}],169:[function(e,t,r){var n=e(\"safe-buffer\").Buffer;function o(e,t,r){var o=e._cipher.encryptBlock(e._prev)[0]^t;return e._prev=n.concat([e._prev.slice(1),n.from([r?t:o])]),o}r.encrypt=function(e,t,r){for(var i=t.length,a=n.allocUnsafe(i),s=-1;++s<i;)a[s]=o(e,t[s],r);return a}},{\"safe-buffer\":445}],170:[function(e,t,r){var n=e(\"buffer-xor\"),o=e(\"safe-buffer\").Buffer,i=e(\"../incr32\");function a(e){var t=e._cipher.encryptBlockRaw(e._prev);return i(e._prev),t}r.encrypt=function(e,t){var r=Math.ceil(t.length/16),i=e._cache.length;e._cache=o.concat([e._cache,o.allocUnsafe(16*r)]);for(var s=0;s<r;s++){var u=a(e),c=i+16*s;e._cache.writeUInt32BE(u[0],c+0),e._cache.writeUInt32BE(u[1],c+4),e._cache.writeUInt32BE(u[2],c+8),e._cache.writeUInt32BE(u[3],c+12)}var f=e._cache.slice(0,t.length);return e._cache=e._cache.slice(t.length),n(t,f)}},{\"../incr32\":165,\"buffer-xor\":187,\"safe-buffer\":445}],171:[function(e,t,r){r.encrypt=function(e,t){return e._cipher.encryptBlock(t)},r.decrypt=function(e,t){return e._cipher.decryptBlock(t)}},{}],172:[function(e,t,r){var n={ECB:e(\"./ecb\"),CBC:e(\"./cbc\"),CFB:e(\"./cfb\"),CFB8:e(\"./cfb8\"),CFB1:e(\"./cfb1\"),OFB:e(\"./ofb\"),CTR:e(\"./ctr\"),GCM:e(\"./ctr\")},o=e(\"./list.json\");for(var i in o)o[i].module=n[o[i].mode];t.exports=o},{\"./cbc\":166,\"./cfb\":167,\"./cfb1\":168,\"./cfb8\":169,\"./ctr\":170,\"./ecb\":171,\"./list.json\":173,\"./ofb\":174}],173:[function(e,t,r){t.exports={\"aes-128-ecb\":{cipher:\"AES\",key:128,iv:0,mode:\"ECB\",type:\"block\"},\"aes-192-ecb\":{cipher:\"AES\",key:192,iv:0,mode:\"ECB\",type:\"block\"},\"aes-256-ecb\":{cipher:\"AES\",key:256,iv:0,mode:\"ECB\",type:\"block\"},\"aes-128-cbc\":{cipher:\"AES\",key:128,iv:16,mode:\"CBC\",type:\"block\"},\"aes-192-cbc\":{cipher:\"AES\",key:192,iv:16,mode:\"CBC\",type:\"block\"},\"aes-256-cbc\":{cipher:\"AES\",key:256,iv:16,mode:\"CBC\",type:\"block\"},aes128:{cipher:\"AES\",key:128,iv:16,mode:\"CBC\",type:\"block\"},aes192:{cipher:\"AES\",key:192,iv:16,mode:\"CBC\",type:\"block\"},aes256:{cipher:\"AES\",key:256,iv:16,mode:\"CBC\",type:\"block\"},\"aes-128-cfb\":{cipher:\"AES\",key:128,iv:16,mode:\"CFB\",type:\"stream\"},\"aes-192-cfb\":{cipher:\"AES\",key:192,iv:16,mode:\"CFB\",type:\"stream\"},\"aes-256-cfb\":{cipher:\"AES\",key:256,iv:16,mode:\"CFB\",type:\"stream\"},\"aes-128-cfb8\":{cipher:\"AES\",key:128,iv:16,mode:\"CFB8\",type:\"stream\"},\"aes-192-cfb8\":{cipher:\"AES\",key:192,iv:16,mode:\"CFB8\",type:\"stream\"},\"aes-256-cfb8\":{cipher:\"AES\",key:256,iv:16,mode:\"CFB8\",type:\"stream\"},\"aes-128-cfb1\":{cipher:\"AES\",key:128,iv:16,mode:\"CFB1\",type:\"stream\"},\"aes-192-cfb1\":{cipher:\"AES\",key:192,iv:16,mode:\"CFB1\",type:\"stream\"},\"aes-256-cfb1\":{cipher:\"AES\",key:256,iv:16,mode:\"CFB1\",type:\"stream\"},\"aes-128-ofb\":{cipher:\"AES\",key:128,iv:16,mode:\"OFB\",type:\"stream\"},\"aes-192-ofb\":{cipher:\"AES\",key:192,iv:16,mode:\"OFB\",type:\"stream\"},\"aes-256-ofb\":{cipher:\"AES\",key:256,iv:16,mode:\"OFB\",type:\"stream\"},\"aes-128-ctr\":{cipher:\"AES\",key:128,iv:16,mode:\"CTR\",type:\"stream\"},\"aes-192-ctr\":{cipher:\"AES\",key:192,iv:16,mode:\"CTR\",type:\"stream\"},\"aes-256-ctr\":{cipher:\"AES\",key:256,iv:16,mode:\"CTR\",type:\"stream\"},\"aes-128-gcm\":{cipher:\"AES\",key:128,iv:12,mode:\"GCM\",type:\"auth\"},\"aes-192-gcm\":{cipher:\"AES\",key:192,iv:12,mode:\"GCM\",type:\"auth\"},\"aes-256-gcm\":{cipher:\"AES\",key:256,iv:12,mode:\"GCM\",type:\"auth\"}}},{}],174:[function(e,t,r){(function(t){var n=e(\"buffer-xor\");function o(e){return e._prev=e._cipher.encryptBlock(e._prev),e._prev}r.encrypt=function(e,r){for(;e._cache.length<r.length;)e._cache=t.concat([e._cache,o(e)]);var i=e._cache.slice(0,r.length);return e._cache=e._cache.slice(r.length),n(r,i)}}).call(this,e(\"buffer\").Buffer)},{buffer:188,\"buffer-xor\":187}],175:[function(e,t,r){var n=e(\"./aes\"),o=e(\"safe-buffer\").Buffer,i=e(\"cipher-base\");function a(e,t,r,a){i.call(this),this._cipher=new n.AES(t),this._prev=o.from(r),this._cache=o.allocUnsafe(0),this._secCache=o.allocUnsafe(0),this._decrypt=a,this._mode=e}e(\"inherits\")(a,i),a.prototype._update=function(e){return this._mode.encrypt(this,e,this._decrypt)},a.prototype._final=function(){this._cipher.scrub()},t.exports=a},{\"./aes\":159,\"cipher-base\":189,inherits:341,\"safe-buffer\":445}],176:[function(e,t,r){var n=e(\"browserify-des\"),o=e(\"browserify-aes/browser\"),i=e(\"browserify-aes/modes\"),a=e(\"browserify-des/modes\"),s=e(\"evp_bytestokey\");function u(e,t,r){if(e=e.toLowerCase(),i[e])return o.createCipheriv(e,t,r);if(a[e])return new n({key:t,iv:r,mode:e});throw new TypeError(\"invalid suite type\")}function c(e,t,r){if(e=e.toLowerCase(),i[e])return o.createDecipheriv(e,t,r);if(a[e])return new n({key:t,iv:r,mode:e,decrypt:!0});throw new TypeError(\"invalid suite type\")}r.createCipher=r.Cipher=function(e,t){var r,n;if(e=e.toLowerCase(),i[e])r=i[e].key,n=i[e].iv;else{if(!a[e])throw new TypeError(\"invalid suite type\");r=8*a[e].key,n=a[e].iv}var o=s(t,!1,r,n);return u(e,o.key,o.iv)},r.createCipheriv=r.Cipheriv=u,r.createDecipher=r.Decipher=function(e,t){var r,n;if(e=e.toLowerCase(),i[e])r=i[e].key,n=i[e].iv;else{if(!a[e])throw new TypeError(\"invalid suite type\");r=8*a[e].key,n=a[e].iv}var o=s(t,!1,r,n);return c(e,o.key,o.iv)},r.createDecipheriv=r.Decipheriv=c,r.listCiphers=r.getCiphers=function(){return Object.keys(a).concat(o.getCiphers())}},{\"browserify-aes/browser\":161,\"browserify-aes/modes\":172,\"browserify-des\":177,\"browserify-des/modes\":178,evp_bytestokey:300}],177:[function(e,t,r){var n=e(\"cipher-base\"),o=e(\"des.js\"),i=e(\"inherits\"),a=e(\"safe-buffer\").Buffer,s={\"des-ede3-cbc\":o.CBC.instantiate(o.EDE),\"des-ede3\":o.EDE,\"des-ede-cbc\":o.CBC.instantiate(o.EDE),\"des-ede\":o.EDE,\"des-cbc\":o.CBC.instantiate(o.DES),\"des-ecb\":o.DES};function u(e){n.call(this);var t,r=e.mode.toLowerCase(),o=s[r];t=e.decrypt?\"decrypt\":\"encrypt\";var i=e.key;a.isBuffer(i)||(i=a.from(i)),\"des-ede\"!==r&&\"des-ede-cbc\"!==r||(i=a.concat([i,i.slice(0,8)]));var u=e.iv;a.isBuffer(u)||(u=a.from(u)),this._des=o.create({key:i,iv:u,type:t})}s.des=s[\"des-cbc\"],s.des3=s[\"des-ede3-cbc\"],t.exports=u,i(u,n),u.prototype._update=function(e){return a.from(this._des.update(e))},u.prototype._final=function(){return a.from(this._des.final())}},{\"cipher-base\":189,\"des.js\":273,inherits:341,\"safe-buffer\":445}],178:[function(e,t,r){r[\"des-ecb\"]={key:8,iv:0},r[\"des-cbc\"]=r.des={key:8,iv:8},r[\"des-ede3-cbc\"]=r.des3={key:24,iv:8},r[\"des-ede3\"]={key:24,iv:0},r[\"des-ede-cbc\"]={key:16,iv:8},r[\"des-ede\"]={key:16,iv:0}},{}],179:[function(e,t,r){(function(r){var n=e(\"bn.js\"),o=e(\"randombytes\");function i(e,t){var o=function(e){var t=a(e);return{blinder:t.toRed(n.mont(e.modulus)).redPow(new n(e.publicExponent)).fromRed(),unblinder:t.invm(e.modulus)}}(t),i=t.modulus.byteLength(),s=(n.mont(t.modulus),new n(e).mul(o.blinder).umod(t.modulus)),u=s.toRed(n.mont(t.prime1)),c=s.toRed(n.mont(t.prime2)),f=t.coefficient,l=t.prime1,h=t.prime2,d=u.redPow(t.exponent1),p=c.redPow(t.exponent2);d=d.fromRed(),p=p.fromRed();var y=d.isub(p).imul(f).umod(l);return y.imul(h),p.iadd(y),new r(p.imul(o.unblinder).umod(t.modulus).toArray(!1,i))}function a(e){for(var t=e.modulus.byteLength(),r=new n(o(t));r.cmp(e.modulus)>=0||!r.umod(e.prime1)||!r.umod(e.prime2);)r=new n(o(t));return r}t.exports=i,i.getr=a}).call(this,e(\"buffer\").Buffer)},{\"bn.js\":156,buffer:188,randombytes:426}],180:[function(e,t,r){t.exports=e(\"./browser/algorithms.json\")},{\"./browser/algorithms.json\":181}],181:[function(e,t,r){t.exports={sha224WithRSAEncryption:{sign:\"rsa\",hash:\"sha224\",id:\"302d300d06096086480165030402040500041c\"},\"RSA-SHA224\":{sign:\"ecdsa/rsa\",hash:\"sha224\",id:\"302d300d06096086480165030402040500041c\"},sha256WithRSAEncryption:{sign:\"rsa\",hash:\"sha256\",id:\"3031300d060960864801650304020105000420\"},\"RSA-SHA256\":{sign:\"ecdsa/rsa\",hash:\"sha256\",id:\"3031300d060960864801650304020105000420\"},sha384WithRSAEncryption:{sign:\"rsa\",hash:\"sha384\",id:\"3041300d060960864801650304020205000430\"},\"RSA-SHA384\":{sign:\"ecdsa/rsa\",hash:\"sha384\",id:\"3041300d060960864801650304020205000430\"},sha512WithRSAEncryption:{sign:\"rsa\",hash:\"sha512\",id:\"3051300d060960864801650304020305000440\"},\"RSA-SHA512\":{sign:\"ecdsa/rsa\",hash:\"sha512\",id:\"3051300d060960864801650304020305000440\"},\"RSA-SHA1\":{sign:\"rsa\",hash:\"sha1\",id:\"3021300906052b0e03021a05000414\"},\"ecdsa-with-SHA1\":{sign:\"ecdsa\",hash:\"sha1\",id:\"\"},sha256:{sign:\"ecdsa\",hash:\"sha256\",id:\"\"},sha224:{sign:\"ecdsa\",hash:\"sha224\",id:\"\"},sha384:{sign:\"ecdsa\",hash:\"sha384\",id:\"\"},sha512:{sign:\"ecdsa\",hash:\"sha512\",id:\"\"},\"DSA-SHA\":{sign:\"dsa\",hash:\"sha1\",id:\"\"},\"DSA-SHA1\":{sign:\"dsa\",hash:\"sha1\",id:\"\"},DSA:{sign:\"dsa\",hash:\"sha1\",id:\"\"},\"DSA-WITH-SHA224\":{sign:\"dsa\",hash:\"sha224\",id:\"\"},\"DSA-SHA224\":{sign:\"dsa\",hash:\"sha224\",id:\"\"},\"DSA-WITH-SHA256\":{sign:\"dsa\",hash:\"sha256\",id:\"\"},\"DSA-SHA256\":{sign:\"dsa\",hash:\"sha256\",id:\"\"},\"DSA-WITH-SHA384\":{sign:\"dsa\",hash:\"sha384\",id:\"\"},\"DSA-SHA384\":{sign:\"dsa\",hash:\"sha384\",id:\"\"},\"DSA-WITH-SHA512\":{sign:\"dsa\",hash:\"sha512\",id:\"\"},\"DSA-SHA512\":{sign:\"dsa\",hash:\"sha512\",id:\"\"},\"DSA-RIPEMD160\":{sign:\"dsa\",hash:\"rmd160\",id:\"\"},ripemd160WithRSA:{sign:\"rsa\",hash:\"rmd160\",id:\"3021300906052b2403020105000414\"},\"RSA-RIPEMD160\":{sign:\"rsa\",hash:\"rmd160\",id:\"3021300906052b2403020105000414\"},md5WithRSAEncryption:{sign:\"rsa\",hash:\"md5\",id:\"3020300c06082a864886f70d020505000410\"},\"RSA-MD5\":{sign:\"rsa\",hash:\"md5\",id:\"3020300c06082a864886f70d020505000410\"}}},{}],182:[function(e,t,r){t.exports={\"1.3.132.0.10\":\"secp256k1\",\"1.3.132.0.33\":\"p224\",\"1.2.840.10045.3.1.1\":\"p192\",\"1.2.840.10045.3.1.7\":\"p256\",\"1.3.132.0.34\":\"p384\",\"1.3.132.0.35\":\"p521\"}},{}],183:[function(e,t,r){(function(r){var n=e(\"create-hash\"),o=e(\"stream\"),i=e(\"inherits\"),a=e(\"./sign\"),s=e(\"./verify\"),u=e(\"./algorithms.json\");function c(e){o.Writable.call(this);var t=u[e];if(!t)throw new Error(\"Unknown message digest\");this._hashType=t.hash,this._hash=n(t.hash),this._tag=t.id,this._signType=t.sign}function f(e){o.Writable.call(this);var t=u[e];if(!t)throw new Error(\"Unknown message digest\");this._hash=n(t.hash),this._tag=t.id,this._signType=t.sign}function l(e){return new c(e)}function h(e){return new f(e)}Object.keys(u).forEach((function(e){u[e].id=new r(u[e].id,\"hex\"),u[e.toLowerCase()]=u[e]})),i(c,o.Writable),c.prototype._write=function(e,t,r){this._hash.update(e),r()},c.prototype.update=function(e,t){return\"string\"==typeof e&&(e=new r(e,t)),this._hash.update(e),this},c.prototype.sign=function(e,t){this.end();var r=this._hash.digest(),n=a(r,e,this._hashType,this._signType,this._tag);return t?n.toString(t):n},i(f,o.Writable),f.prototype._write=function(e,t,r){this._hash.update(e),r()},f.prototype.update=function(e,t){return\"string\"==typeof e&&(e=new r(e,t)),this._hash.update(e),this},f.prototype.verify=function(e,t,n){\"string\"==typeof t&&(t=new r(t,n)),this.end();var o=this._hash.digest();return s(t,o,e,this._signType,this._tag)},t.exports={Sign:l,Verify:h,createSign:l,createVerify:h}}).call(this,e(\"buffer\").Buffer)},{\"./algorithms.json\":181,\"./sign\":184,\"./verify\":185,buffer:188,\"create-hash\":265,inherits:341,stream:456}],184:[function(e,t,r){(function(r){var n=e(\"create-hmac\"),o=e(\"browserify-rsa\"),i=e(\"elliptic\").ec,a=e(\"bn.js\"),s=e(\"parse-asn1\"),u=e(\"./curves.json\");function c(e,t,o,i){if((e=new r(e.toArray())).length<t.byteLength()){var a=new r(t.byteLength()-e.length);a.fill(0),e=r.concat([a,e])}var s=o.length,u=function(e,t){e=(e=f(e,t)).mod(t);var n=new r(e.toArray());if(n.length<t.byteLength()){var o=new r(t.byteLength()-n.length);o.fill(0),n=r.concat([o,n])}return n}(o,t),c=new r(s);c.fill(1);var l=new r(s);return l.fill(0),l=n(i,l).update(c).update(new r([0])).update(e).update(u).digest(),c=n(i,l).update(c).digest(),{k:l=n(i,l).update(c).update(new r([1])).update(e).update(u).digest(),v:c=n(i,l).update(c).digest()}}function f(e,t){var r=new a(e),n=(e.length<<3)-t.bitLength();return n>0&&r.ishrn(n),r}function l(e,t,o){var i,a;do{for(i=new r(0);8*i.length<e.bitLength();)t.v=n(o,t.k).update(t.v).digest(),i=r.concat([i,t.v]);a=f(i,e),t.k=n(o,t.k).update(t.v).update(new r([0])).digest(),t.v=n(o,t.k).update(t.v).digest()}while(-1!==a.cmp(e));return a}function h(e,t,r,n){return e.toRed(a.mont(r)).redPow(t).fromRed().mod(n)}t.exports=function(e,t,n,d,p){var y=s(t);if(y.curve){if(\"ecdsa\"!==d&&\"ecdsa/rsa\"!==d)throw new Error(\"wrong private key type\");return function(e,t){var n=u[t.curve.join(\".\")];if(!n)throw new Error(\"unknown curve \"+t.curve.join(\".\"));var o=new i(n).keyFromPrivate(t.privateKey).sign(e);return new r(o.toDER())}(e,y)}if(\"dsa\"===y.type){if(\"dsa\"!==d)throw new Error(\"wrong private key type\");return function(e,t,n){var o,i=t.params.priv_key,s=t.params.p,u=t.params.q,d=t.params.g,p=new a(0),y=f(e,u).mod(u),m=!1,b=c(i,u,e,n);for(;!1===m;)o=l(u,b,n),p=h(d,o,s,u),0===(m=o.invm(u).imul(y.add(i.mul(p))).mod(u)).cmpn(0)&&(m=!1,p=new a(0));return function(e,t){e=e.toArray(),t=t.toArray(),128&e[0]&&(e=[0].concat(e));128&t[0]&&(t=[0].concat(t));var n=[48,e.length+t.length+4,2,e.length];return n=n.concat(e,[2,t.length],t),new r(n)}(p,m)}(e,y,n)}if(\"rsa\"!==d&&\"ecdsa/rsa\"!==d)throw new Error(\"wrong private key type\");e=r.concat([p,e]);for(var m=y.modulus.byteLength(),b=[0,1];e.length+b.length+1<m;)b.push(255);b.push(0);for(var v=-1;++v<e.length;)b.push(e[v]);return o(b,y)},t.exports.getKey=c,t.exports.makeKey=l}).call(this,e(\"buffer\").Buffer)},{\"./curves.json\":182,\"bn.js\":156,\"browserify-rsa\":179,buffer:188,\"create-hmac\":267,elliptic:283,\"parse-asn1\":412}],185:[function(e,t,r){(function(r){var n=e(\"bn.js\"),o=e(\"elliptic\").ec,i=e(\"parse-asn1\"),a=e(\"./curves.json\");function s(e,t){if(e.cmpn(0)<=0)throw new Error(\"invalid sig\");if(e.cmp(t)>=t)throw new Error(\"invalid sig\")}t.exports=function(e,t,u,c,f){var l=i(u);if(\"ec\"===l.type){if(\"ecdsa\"!==c&&\"ecdsa/rsa\"!==c)throw new Error(\"wrong public key type\");return function(e,t,r){var n=a[r.data.algorithm.curve.join(\".\")];if(!n)throw new Error(\"unknown curve \"+r.data.algorithm.curve.join(\".\"));var i=new o(n),s=r.data.subjectPrivateKey.data;return i.verify(t,e,s)}(e,t,l)}if(\"dsa\"===l.type){if(\"dsa\"!==c)throw new Error(\"wrong public key type\");return function(e,t,r){var o=r.data.p,a=r.data.q,u=r.data.g,c=r.data.pub_key,f=i.signature.decode(e,\"der\"),l=f.s,h=f.r;s(l,a),s(h,a);var d=n.mont(o),p=l.invm(a);return 0===u.toRed(d).redPow(new n(t).mul(p).mod(a)).fromRed().mul(c.toRed(d).redPow(h.mul(p).mod(a)).fromRed()).mod(o).mod(a).cmp(h)}(e,t,l)}if(\"rsa\"!==c&&\"ecdsa/rsa\"!==c)throw new Error(\"wrong public key type\");t=r.concat([f,t]);for(var h=l.modulus.byteLength(),d=[1],p=0;t.length+d.length+2<h;)d.push(255),p++;d.push(0);for(var y=-1;++y<t.length;)d.push(t[y]);d=new r(d);var m=n.mont(l.modulus);e=(e=new n(e).toRed(m)).redPow(new n(l.publicExponent)),e=new r(e.fromRed().toArray());var b=p<8?1:0;for(h=Math.min(e.length,d.length),e.length!==d.length&&(b=1),y=-1;++y<h;)b|=e[y]^d[y];return 0===b}}).call(this,e(\"buffer\").Buffer)},{\"./curves.json\":182,\"bn.js\":156,buffer:188,elliptic:283,\"parse-asn1\":412}],186:[function(e,t,r){arguments[4][158][0].apply(r,arguments)},{dup:158}],187:[function(e,t,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),o=new e(n),i=0;i<n;++i)o[i]=t[i]^r[i];return o}}).call(this,e(\"buffer\").Buffer)},{buffer:188}],188:[function(e,t,r){(function(t){var n=e(\"base64-js\"),o=e(\"ieee754\"),i=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;r.Buffer=t,r.SlowBuffer=function(e){+e!=e&&(e=0);return t.alloc(+e)},r.INSPECT_MAX_BYTES=50;function a(e){if(e>2147483647)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');var r=new Uint8Array(e);return Object.setPrototypeOf(r,t.prototype),r}function t(e,t,r){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return c(e)}return s(e,t,r)}function s(e,r,n){if(\"string\"==typeof e)return function(e,r){\"string\"==typeof r&&\"\"!==r||(r=\"utf8\");if(!t.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);var n=0|h(e,r),o=a(n),i=o.write(e,r);i!==n&&(o=o.slice(0,i));return o}(e,r);if(ArrayBuffer.isView(e))return f(e);if(null==e)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+_typeof2(e));if(L(e,ArrayBuffer)||e&&L(e.buffer,ArrayBuffer))return function(e,r,n){if(r<0||e.byteLength<r)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<r+(n||0))throw new RangeError('\"length\" is outside of buffer bounds');var o;o=void 0===r&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,r):new Uint8Array(e,r,n);return Object.setPrototypeOf(o,t.prototype),o}(e,r,n);if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type number');var o=e.valueOf&&e.valueOf();if(null!=o&&o!==e)return t.from(o,r,n);var i=function(e){if(t.isBuffer(e)){var r=0|l(e.length),n=a(r);return 0===n.length||e.copy(n,0,0,r),n}if(void 0!==e.length)return\"number\"!=typeof e.length||z(e.length)?a(0):f(e);if(\"Buffer\"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(i)return i;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof e[Symbol.toPrimitive])return t.from(e[Symbol.toPrimitive](\"string\"),r,n);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+_typeof2(e))}function u(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function c(e){return u(e),a(e<0?0:0|l(e))}function f(e){for(var t=e.length<0?0:0|l(e.length),r=a(t),n=0;n<t;n+=1)r[n]=255&e[n];return r}function l(e){if(e>=2147483647)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+2147483647..toString(16)+\" bytes\");return 0|e}function h(e,r){if(t.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||L(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+_typeof2(e));var n=e.length,o=arguments.length>2&&!0===arguments[2];if(!o&&0===n)return 0;for(var i=!1;;)switch(r){case\"ascii\":case\"latin1\":case\"binary\":return n;case\"utf8\":case\"utf-8\":return D(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*n;case\"hex\":return n>>>1;case\"base64\":return B(e).length;default:if(i)return o?-1:D(e).length;r=(\"\"+r).toLowerCase(),i=!0}}function d(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return R(this,t,r);case\"utf8\":case\"utf-8\":return S(this,t,r);case\"ascii\":return O(this,t,r);case\"latin1\":case\"binary\":return E(this,t,r);case\"base64\":return x(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return j(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}function p(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function y(e,r,n,o,i){if(0===e.length)return-1;if(\"string\"==typeof n?(o=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),z(n=+n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if(\"string\"==typeof r&&(r=t.from(r,o)),t.isBuffer(r))return 0===r.length?-1:m(e,r,n,o,i);if(\"number\"==typeof r)return r&=255,\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,r,n):Uint8Array.prototype.lastIndexOf.call(e,r,n):m(e,[r],n,o,i);throw new TypeError(\"val must be string, number or Buffer\")}function m(e,t,r,n,o){var i,a=1,s=e.length,u=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,r/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var f=-1;for(i=r;i<s;i++)if(c(e,i)===c(t,-1===f?0:i-f)){if(-1===f&&(f=i),i-f+1===u)return f*a}else-1!==f&&(i-=i-f),f=-1}else for(r+u>s&&(r=s-u),i=r;i>=0;i--){for(var l=!0,h=0;h<u;h++)if(c(e,i+h)!==c(t,h)){l=!1;break}if(l)return i}return-1}function b(e,t,r,n){r=Number(r)||0;var o=e.length-r;n?(n=Number(n))>o&&(n=o):n=o;var i=t.length;n>i/2&&(n=i/2);for(var a=0;a<n;++a){var s=parseInt(t.substr(2*a,2),16);if(z(s))return a;e[r+a]=s}return a}function v(e,t,r,n){return F(D(t,e.length-r),e,r,n)}function g(e,t,r,n){return F(function(e){for(var t=[],r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function w(e,t,r,n){return g(e,t,r,n)}function _(e,t,r,n){return F(B(t),e,r,n)}function k(e,t,r,n){return F(function(e,t){for(var r,n,o,i=[],a=0;a<e.length&&!((t-=2)<0);++a)r=e.charCodeAt(a),n=r>>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function x(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function S(e,t,r){r=Math.min(e.length,r);for(var n=[],o=t;o<r;){var i,a,s,u,c=e[o],f=null,l=c>239?4:c>223?3:c>191?2:1;if(o+l<=r)switch(l){case 1:c<128&&(f=c);break;case 2:128==(192&(i=e[o+1]))&&(u=(31&c)<<6|63&i)>127&&(f=u);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(u=(15&c)<<12|(63&i)<<6|63&a)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(u=(15&c)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(f=u)}null===f?(f=65533,l=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),o+=l}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var r=\"\",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=4096));return r}(n)}r.kMaxLength=2147483647,t.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),t.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(t.prototype,\"parent\",{enumerable:!0,get:function(){if(t.isBuffer(this))return this.buffer}}),Object.defineProperty(t.prototype,\"offset\",{enumerable:!0,get:function(){if(t.isBuffer(this))return this.byteOffset}}),\"undefined\"!=typeof Symbol&&null!=Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),t.poolSize=8192,t.from=function(e,t,r){return s(e,t,r)},Object.setPrototypeOf(t.prototype,Uint8Array.prototype),Object.setPrototypeOf(t,Uint8Array),t.alloc=function(e,t,r){return function(e,t,r){return u(e),e<=0?a(e):void 0!==t?\"string\"==typeof r?a(e).fill(t,r):a(e).fill(t):a(e)}(e,t,r)},t.allocUnsafe=function(e){return c(e)},t.allocUnsafeSlow=function(e){return c(e)},t.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==t.prototype},t.compare=function(e,r){if(L(e,Uint8Array)&&(e=t.from(e,e.offset,e.byteLength)),L(r,Uint8Array)&&(r=t.from(r,r.offset,r.byteLength)),!t.isBuffer(e)||!t.isBuffer(r))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===r)return 0;for(var n=e.length,o=r.length,i=0,a=Math.min(n,o);i<a;++i)if(e[i]!==r[i]){n=e[i],o=r[i];break}return n<o?-1:o<n?1:0},t.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},t.concat=function(e,r){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return t.alloc(0);var n;if(void 0===r)for(r=0,n=0;n<e.length;++n)r+=e[n].length;var o=t.allocUnsafe(r),i=0;for(n=0;n<e.length;++n){var a=e[n];if(L(a,Uint8Array)&&(a=t.from(a)),!t.isBuffer(a))throw new TypeError('\"list\" argument must be an Array of Buffers');a.copy(o,i),i+=a.length}return o},t.byteLength=h,t.prototype._isBuffer=!0,t.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var t=0;t<e;t+=2)p(this,t,t+1);return this},t.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var t=0;t<e;t+=4)p(this,t,t+3),p(this,t+1,t+2);return this},t.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var t=0;t<e;t+=8)p(this,t,t+7),p(this,t+1,t+6),p(this,t+2,t+5),p(this,t+3,t+4);return this},t.prototype.toString=function(){var e=this.length;return 0===e?\"\":0===arguments.length?S(this,0,e):d.apply(this,arguments)},t.prototype.toLocaleString=t.prototype.toString,t.prototype.equals=function(e){if(!t.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===t.compare(this,e)},t.prototype.inspect=function(){var e=\"\",t=r.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim(),this.length>t&&(e+=\" ... \"),\"<Buffer \"+e+\">\"},i&&(t.prototype[i]=t.prototype.inspect),t.prototype.compare=function(e,r,n,o,i){if(L(e,Uint8Array)&&(e=t.from(e,e.offset,e.byteLength)),!t.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+_typeof2(e));if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===o&&(o=0),void 0===i&&(i=this.length),r<0||n>e.length||o<0||i>this.length)throw new RangeError(\"out of range index\");if(o>=i&&r>=n)return 0;if(o>=i)return-1;if(r>=n)return 1;if(this===e)return 0;for(var a=(i>>>=0)-(o>>>=0),s=(n>>>=0)-(r>>>=0),u=Math.min(a,s),c=this.slice(o,i),f=e.slice(r,n),l=0;l<u;++l)if(c[l]!==f[l]){a=c[l],s=f[l];break}return a<s?-1:s<a?1:0},t.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},t.prototype.indexOf=function(e,t,r){return y(this,e,t,r,!0)},t.prototype.lastIndexOf=function(e,t,r){return y(this,e,t,r,!1)},t.prototype.write=function(e,t,r,n){if(void 0===t)n=\"utf8\",r=this.length,t=0;else if(void 0===r&&\"string\"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var i=!1;;)switch(n){case\"hex\":return b(this,e,t,r);case\"utf8\":case\"utf-8\":return v(this,e,t,r);case\"ascii\":return g(this,e,t,r);case\"latin1\":case\"binary\":return w(this,e,t,r);case\"base64\":return _(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return k(this,e,t,r);default:if(i)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),i=!0}},t.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function O(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var o=t;o<r;++o)n+=String.fromCharCode(127&e[o]);return n}function E(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var o=t;o<r;++o)n+=String.fromCharCode(e[o]);return n}function R(e,t,r){var n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);for(var o=\"\",i=t;i<r;++i)o+=N(e[i]);return o}function j(e,t,r){for(var n=e.slice(t,r),o=\"\",i=0;i<n.length;i+=2)o+=String.fromCharCode(n[i]+256*n[i+1]);return o}function T(e,t,r){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}function C(e,r,n,o,i,a){if(!t.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(r>i||r<a)throw new RangeError('\"value\" argument is out of bounds');if(n+o>e.length)throw new RangeError(\"Index out of range\")}function P(e,t,r,n,o,i){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function A(e,t,r,n,i){return t=+t,r>>>=0,i||P(e,0,r,4),o.write(e,t,r,n,23,4),r+4}function M(e,t,r,n,i){return t=+t,r>>>=0,i||P(e,0,r,8),o.write(e,t,r,n,52,8),r+8}t.prototype.slice=function(e,r){var n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r<e&&(r=e);var o=this.subarray(e,r);return Object.setPrototypeOf(o,t.prototype),o},t.prototype.readUIntLE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],o=1,i=0;++i<t&&(o*=256);)n+=this[e+i]*o;return n},t.prototype.readUIntBE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e+--t],o=1;t>0&&(o*=256);)n+=this[e+--t]*o;return n},t.prototype.readUInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),this[e]},t.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},t.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},t.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},t.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},t.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],o=1,i=0;++i<t&&(o*=256);)n+=this[e+i]*o;return n>=(o*=128)&&(n-=Math.pow(2,8*t)),n},t.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=t,o=1,i=this[e+--n];n>0&&(o*=256);)i+=this[e+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},t.prototype.readInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},t.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},t.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},t.prototype.readFloatLE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!0,23,4)},t.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!1,23,4)},t.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!0,52,8)},t.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!1,52,8)},t.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||C(this,e,t,r,Math.pow(2,8*r)-1,0);var o=1,i=0;for(this[t]=255&e;++i<r&&(o*=256);)this[t+i]=e/o&255;return t+r},t.prototype.writeUIntBE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||C(this,e,t,r,Math.pow(2,8*r)-1,0);var o=r-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+r},t.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,255,0),this[t]=255&e,t+1},t.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},t.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);C(this,e,t,r,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i<r&&(a*=256);)e<0&&0===s&&0!==this[t+i-1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+r},t.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);C(this,e,t,r,o-1,-o)}var i=r-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+r},t.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},t.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},t.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeFloatLE=function(e,t,r){return A(this,e,t,!0,r)},t.prototype.writeFloatBE=function(e,t,r){return A(this,e,t,!1,r)},t.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},t.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},t.prototype.copy=function(e,r,n,o){if(!t.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(n||(n=0),o||0===o||(o=this.length),r>=e.length&&(r=e.length),r||(r=0),o>0&&o<n&&(o=n),o===n)return 0;if(0===e.length||0===this.length)return 0;if(r<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=this.length)throw new RangeError(\"Index out of range\");if(o<0)throw new RangeError(\"sourceEnd out of bounds\");o>this.length&&(o=this.length),e.length-r<o-n&&(o=e.length-r+n);var i=o-n;if(this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(r,n,o);else if(this===e&&n<r&&r<o)for(var a=i-1;a>=0;--a)e[a+r]=this[a+n];else Uint8Array.prototype.set.call(e,this.subarray(n,o),r);return i},t.prototype.fill=function(e,r,n,o){if(\"string\"==typeof e){if(\"string\"==typeof r?(o=r,r=0,n=this.length):\"string\"==typeof n&&(o=n,n=this.length),void 0!==o&&\"string\"!=typeof o)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof o&&!t.isEncoding(o))throw new TypeError(\"Unknown encoding: \"+o);if(1===e.length){var i=e.charCodeAt(0);(\"utf8\"===o&&i<128||\"latin1\"===o)&&(e=i)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(r<0||this.length<r||this.length<n)throw new RangeError(\"Out of range index\");if(n<=r)return this;var a;if(r>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(a=r;a<n;++a)this[a]=e;else{var s=t.isBuffer(e)?e:t.from(e,o),u=s.length;if(0===u)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(a=0;a<n-r;++a)this[a+r]=s[a%u]}return this};var I=/[^+/0-9A-Za-z-_]/g;function N(e){return e<16?\"0\"+e.toString(16):e.toString(16)}function D(e,t){var r;t=t||1/0;for(var n=e.length,o=null,i=[],a=0;a<n;++a){if((r=e.charCodeAt(a))>55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function B(e){return n.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(I,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function F(e,t,r,n){for(var o=0;o<n&&!(o+r>=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function L(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function z(e){return e!=e}}).call(this,e(\"buffer\").Buffer)},{\"base64-js\":155,buffer:188,ieee754:339}],189:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"stream\").Transform,i=e(\"string_decoder\").StringDecoder;function a(e){o.call(this),this.hashMode=\"string\"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}e(\"inherits\")(a,o),a.prototype.update=function(e,t,r){\"string\"==typeof e&&(e=n.from(e,t));var o=this._update(e);return this.hashMode?this:(r&&(o=this._toString(o,r)),o)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error(\"trying to get auth tag in unsupported state\")},a.prototype.setAuthTag=function(){throw new Error(\"trying to set auth tag in unsupported state\")},a.prototype.setAAD=function(){throw new Error(\"trying to set aad in unsupported state\")},a.prototype._transform=function(e,t,r){var n;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){n=e}finally{r(n)}},a.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},a.prototype._finalOrDigest=function(e){var t=this.__final()||n.alloc(0);return e&&(t=this._toString(t,e,!0)),t},a.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new i(t),this._encoding=t),this._encoding!==t)throw new Error(\"can't switch encodings\");var n=this._decoder.write(e);return r&&(n+=this._decoder.end()),n},t.exports=a},{inherits:341,\"safe-buffer\":445,stream:456,string_decoder:470}],190:[function(e,t,r){t.exports=function(e){if(\"function\"!=typeof e)throw TypeError(String(e)+\" is not a function\");return e}},{}],191:[function(e,t,r){t.exports=function(e,t,r){if(!(e instanceof t))throw TypeError(\"Incorrect \"+(r?r+\" \":\"\")+\"invocation\");return e}},{}],192:[function(e,t,r){var n=e(\"../internals/is-object\");t.exports=function(e){if(!n(e))throw TypeError(String(e)+\" is not an object\");return e}},{\"../internals/is-object\":220}],193:[function(e,t,r){var n=e(\"../internals/to-indexed-object\"),o=e(\"../internals/to-length\"),i=e(\"../internals/to-absolute-index\"),a=function(e){return function(t,r,a){var s,u=n(t),c=o(u.length),f=i(a,c);if(e&&r!=r){for(;c>f;)if((s=u[f++])!=s)return!0}else for(;c>f;f++)if((e||f in u)&&u[f]===r)return e||f||0;return!e&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},{\"../internals/to-absolute-index\":251,\"../internals/to-indexed-object\":252,\"../internals/to-length\":254}],194:[function(e,t,r){var n=e(\"../internals/a-function\");t.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},{\"../internals/a-function\":190}],195:[function(e,t,r){var n=e(\"../internals/an-object\");t.exports=function(e,t,r,o){try{return o?t(n(r)[0],r[1]):t(r)}catch(t){var i=e.return;throw void 0!==i&&n(i.call(e)),t}}},{\"../internals/an-object\":192}],196:[function(e,t,r){var n=e(\"../internals/well-known-symbol\")(\"iterator\"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[n]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}t.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(e){}return r}},{\"../internals/well-known-symbol\":259}],197:[function(e,t,r){var n={}.toString;t.exports=function(e){return n.call(e).slice(8,-1)}},{}],198:[function(e,t,r){var n=e(\"../internals/classof-raw\"),o=e(\"../internals/well-known-symbol\")(\"toStringTag\"),i=\"Arguments\"==n(function(){return arguments}());t.exports=function(e){var t,r,a;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?r:i?n(t):\"Object\"==(a=n(t))&&\"function\"==typeof t.callee?\"Arguments\":a}},{\"../internals/classof-raw\":197,\"../internals/well-known-symbol\":259}],199:[function(e,t,r){var n=e(\"../internals/has\"),o=e(\"../internals/own-keys\"),i=e(\"../internals/object-get-own-property-descriptor\"),a=e(\"../internals/object-define-property\");t.exports=function(e,t){for(var r=o(t),s=a.f,u=i.f,c=0;c<r.length;c++){var f=r[c];n(e,f)||s(e,f,u(t,f))}}},{\"../internals/has\":210,\"../internals/object-define-property\":230,\"../internals/object-get-own-property-descriptor\":231,\"../internals/own-keys\":237}],200:[function(e,t,r){t.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},{}],201:[function(e,t,r){var n=e(\"../internals/fails\");t.exports=!n((function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a}))},{\"../internals/fails\":205}],202:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/is-object\"),i=n.document,a=o(i)&&o(i.createElement);t.exports=function(e){return a?i.createElement(e):{}}},{\"../internals/global\":209,\"../internals/is-object\":220}],203:[function(e,t,r){t.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},{}],204:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/object-get-own-property-descriptor\").f,i=e(\"../internals/hide\"),a=e(\"../internals/redefine\"),s=e(\"../internals/set-global\"),u=e(\"../internals/copy-constructor-properties\"),c=e(\"../internals/is-forced\");t.exports=function(e,t){var r,f,l,h,d,p=e.target,y=e.global,m=e.stat;if(r=y?n:m?n[p]||s(p,{}):(n[p]||{}).prototype)for(f in t){if(h=t[f],l=e.noTargetGet?(d=o(r,f))&&d.value:r[f],!c(y?f:p+(m?\".\":\"#\")+f,e.forced)&&void 0!==l){if(_typeof2(h)===_typeof2(l))continue;u(h,l)}(e.sham||l&&l.sham)&&i(h,\"sham\",!0),a(r,f,h,e)}}},{\"../internals/copy-constructor-properties\":199,\"../internals/global\":209,\"../internals/hide\":212,\"../internals/is-forced\":219,\"../internals/object-get-own-property-descriptor\":231,\"../internals/redefine\":242,\"../internals/set-global\":244}],205:[function(e,t,r){t.exports=function(e){try{return!!e()}catch(e){return!0}}},{}],206:[function(e,t,r){var n=e(\"../internals/shared\");t.exports=n(\"native-function-to-string\",Function.toString)},{\"../internals/shared\":248}],207:[function(e,t,r){var n=e(\"../internals/path\"),o=e(\"../internals/global\"),i=function(e){return\"function\"==typeof e?e:void 0};t.exports=function(e,t){return arguments.length<2?i(n[e])||i(o[e]):n[e]&&n[e][t]||o[e]&&o[e][t]}},{\"../internals/global\":209,\"../internals/path\":238}],208:[function(e,t,r){var n=e(\"../internals/classof\"),o=e(\"../internals/iterators\"),i=e(\"../internals/well-known-symbol\")(\"iterator\");t.exports=function(e){if(null!=e)return e[i]||e[\"@@iterator\"]||o[n(e)]}},{\"../internals/classof\":198,\"../internals/iterators\":223,\"../internals/well-known-symbol\":259}],209:[function(e,t,r){(function(e){var r=\"object\",n=function(e){return e&&e.Math==Math&&e};t.exports=n((\"undefined\"==typeof globalThis?\"undefined\":_typeof2(globalThis))==r&&globalThis)||n((\"undefined\"==typeof window?\"undefined\":_typeof2(window))==r&&window)||n((\"undefined\"==typeof self?\"undefined\":_typeof2(self))==r&&self)||n(_typeof2(e)==r&&e)||Function(\"return this\")()}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],210:[function(e,t,r){var n={}.hasOwnProperty;t.exports=function(e,t){return n.call(e,t)}},{}],211:[function(e,t,r){t.exports={}},{}],212:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/object-define-property\"),i=e(\"../internals/create-property-descriptor\");t.exports=n?function(e,t,r){return o.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},{\"../internals/create-property-descriptor\":200,\"../internals/descriptors\":201,\"../internals/object-define-property\":230}],213:[function(e,t,r){var n=e(\"../internals/global\");t.exports=function(e,t){var r=n.console;r&&r.error&&(1===arguments.length?r.error(e):r.error(e,t))}},{\"../internals/global\":209}],214:[function(e,t,r){var n=e(\"../internals/get-built-in\");t.exports=n(\"document\",\"documentElement\")},{\"../internals/get-built-in\":207}],215:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/fails\"),i=e(\"../internals/document-create-element\");t.exports=!n&&!o((function(){return 7!=Object.defineProperty(i(\"div\"),\"a\",{get:function(){return 7}}).a}))},{\"../internals/descriptors\":201,\"../internals/document-create-element\":202,\"../internals/fails\":205}],216:[function(e,t,r){var n=e(\"../internals/fails\"),o=e(\"../internals/classof-raw\"),i=\"\".split;t.exports=n((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==o(e)?i.call(e,\"\"):Object(e)}:Object},{\"../internals/classof-raw\":197,\"../internals/fails\":205}],217:[function(e,t,r){var n,o,i,a=e(\"../internals/native-weak-map\"),s=e(\"../internals/global\"),u=e(\"../internals/is-object\"),c=e(\"../internals/hide\"),f=e(\"../internals/has\"),l=e(\"../internals/shared-key\"),h=e(\"../internals/hidden-keys\"),d=s.WeakMap;if(a){var p=new d,y=p.get,m=p.has,b=p.set;n=function(e,t){return b.call(p,e,t),t},o=function(e){return y.call(p,e)||{}},i=function(e){return m.call(p,e)}}else{var v=l(\"state\");h[v]=!0,n=function(e,t){return c(e,v,t),t},o=function(e){return f(e,v)?e[v]:{}},i=function(e){return f(e,v)}}t.exports={set:n,get:o,has:i,enforce:function(e){return i(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!u(t)||(r=o(t)).type!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required\");return r}}}},{\"../internals/global\":209,\"../internals/has\":210,\"../internals/hidden-keys\":211,\"../internals/hide\":212,\"../internals/is-object\":220,\"../internals/native-weak-map\":227,\"../internals/shared-key\":247}],218:[function(e,t,r){var n=e(\"../internals/well-known-symbol\"),o=e(\"../internals/iterators\"),i=n(\"iterator\"),a=Array.prototype;t.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},{\"../internals/iterators\":223,\"../internals/well-known-symbol\":259}],219:[function(e,t,r){var n=e(\"../internals/fails\"),o=/#|\\.prototype\\./,i=function(e,t){var r=s[a(e)];return r==c||r!=u&&(\"function\"==typeof t?n(t):!!t)},a=i.normalize=function(e){return String(e).replace(o,\".\").toLowerCase()},s=i.data={},u=i.NATIVE=\"N\",c=i.POLYFILL=\"P\";t.exports=i},{\"../internals/fails\":205}],220:[function(e,t,r){t.exports=function(e){return\"object\"===_typeof2(e)?null!==e:\"function\"==typeof e}},{}],221:[function(e,t,r){t.exports=!1},{}],222:[function(e,t,r){var n=e(\"../internals/an-object\"),o=e(\"../internals/is-array-iterator-method\"),i=e(\"../internals/to-length\"),a=e(\"../internals/bind-context\"),s=e(\"../internals/get-iterator-method\"),u=e(\"../internals/call-with-safe-iteration-closing\"),c=function(e,t){this.stopped=e,this.result=t};(t.exports=function(e,t,r,f,l){var h,d,p,y,m,b,v=a(t,r,f?2:1);if(l)h=e;else{if(\"function\"!=typeof(d=s(e)))throw TypeError(\"Target is not iterable\");if(o(d)){for(p=0,y=i(e.length);y>p;p++)if((m=f?v(n(b=e[p])[0],b[1]):v(e[p]))&&m instanceof c)return m;return new c(!1)}h=d.call(e)}for(;!(b=h.next()).done;)if((m=u(h,v,b.value,f))&&m instanceof c)return m;return new c(!1)}).stop=function(e){return new c(!0,e)}},{\"../internals/an-object\":192,\"../internals/bind-context\":194,\"../internals/call-with-safe-iteration-closing\":195,\"../internals/get-iterator-method\":208,\"../internals/is-array-iterator-method\":218,\"../internals/to-length\":254}],223:[function(e,t,r){arguments[4][211][0].apply(r,arguments)},{dup:211}],224:[function(e,t,r){var n,o,i,a,s,u,c,f,l=e(\"../internals/global\"),h=e(\"../internals/object-get-own-property-descriptor\").f,d=e(\"../internals/classof-raw\"),p=e(\"../internals/task\").set,y=e(\"../internals/user-agent\"),m=l.MutationObserver||l.WebKitMutationObserver,b=l.process,v=l.Promise,g=\"process\"==d(b),w=h(l,\"queueMicrotask\"),_=w&&w.value;_||(n=function(){var e,t;for(g&&(e=b.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?a():i=void 0,e}}i=void 0,e&&e.enter()},g?a=function(){b.nextTick(n)}:m&&!/(iphone|ipod|ipad).*applewebkit/i.test(y)?(s=!0,u=document.createTextNode(\"\"),new m(n).observe(u,{characterData:!0}),a=function(){u.data=s=!s}):v&&v.resolve?(c=v.resolve(void 0),f=c.then,a=function(){f.call(c,n)}):a=function(){p.call(l,n)}),t.exports=_||function(e){var t={fn:e,next:void 0};i&&(i.next=t),o||(o=t,a()),i=t}},{\"../internals/classof-raw\":197,\"../internals/global\":209,\"../internals/object-get-own-property-descriptor\":231,\"../internals/task\":250,\"../internals/user-agent\":258}],225:[function(e,t,r){var n=e(\"../internals/global\");t.exports=n.Promise},{\"../internals/global\":209}],226:[function(e,t,r){var n=e(\"../internals/fails\");t.exports=!!Object.getOwnPropertySymbols&&!n((function(){return!String(Symbol())}))},{\"../internals/fails\":205}],227:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/function-to-string\"),i=n.WeakMap;t.exports=\"function\"==typeof i&&/native code/.test(o.call(i))},{\"../internals/function-to-string\":206,\"../internals/global\":209}],228:[function(e,t,r){var n=e(\"../internals/a-function\"),o=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError(\"Bad Promise constructor\");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};t.exports.f=function(e){return new o(e)}},{\"../internals/a-function\":190}],229:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/fails\"),i=e(\"../internals/object-keys\"),a=e(\"../internals/object-get-own-property-symbols\"),s=e(\"../internals/object-property-is-enumerable\"),u=e(\"../internals/to-object\"),c=e(\"../internals/indexed-object\"),f=Object.assign;t.exports=!f||o((function(){var e={},t={},r=Symbol();return e[r]=7,\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){t[e]=e})),7!=f({},e)[r]||\"abcdefghijklmnopqrst\"!=i(f({},t)).join(\"\")}))?function(e,t){for(var r=u(e),o=arguments.length,f=1,l=a.f,h=s.f;o>f;)for(var d,p=c(arguments[f++]),y=l?i(p).concat(l(p)):i(p),m=y.length,b=0;m>b;)d=y[b++],n&&!h.call(p,d)||(r[d]=p[d]);return r}:f},{\"../internals/descriptors\":201,\"../internals/fails\":205,\"../internals/indexed-object\":216,\"../internals/object-get-own-property-symbols\":233,\"../internals/object-keys\":235,\"../internals/object-property-is-enumerable\":236,\"../internals/to-object\":255}],230:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/ie8-dom-define\"),i=e(\"../internals/an-object\"),a=e(\"../internals/to-primitive\"),s=Object.defineProperty;r.f=n?s:function(e,t,r){if(i(e),t=a(t,!0),i(r),o)try{return s(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},{\"../internals/an-object\":192,\"../internals/descriptors\":201,\"../internals/ie8-dom-define\":215,\"../internals/to-primitive\":256}],231:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/object-property-is-enumerable\"),i=e(\"../internals/create-property-descriptor\"),a=e(\"../internals/to-indexed-object\"),s=e(\"../internals/to-primitive\"),u=e(\"../internals/has\"),c=e(\"../internals/ie8-dom-define\"),f=Object.getOwnPropertyDescriptor;r.f=n?f:function(e,t){if(e=a(e),t=s(t,!0),c)try{return f(e,t)}catch(e){}if(u(e,t))return i(!o.f.call(e,t),e[t])}},{\"../internals/create-property-descriptor\":200,\"../internals/descriptors\":201,\"../internals/has\":210,\"../internals/ie8-dom-define\":215,\"../internals/object-property-is-enumerable\":236,\"../internals/to-indexed-object\":252,\"../internals/to-primitive\":256}],232:[function(e,t,r){var n=e(\"../internals/object-keys-internal\"),o=e(\"../internals/enum-bug-keys\").concat(\"length\",\"prototype\");r.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},{\"../internals/enum-bug-keys\":203,\"../internals/object-keys-internal\":234}],233:[function(e,t,r){r.f=Object.getOwnPropertySymbols},{}],234:[function(e,t,r){var n=e(\"../internals/has\"),o=e(\"../internals/to-indexed-object\"),i=e(\"../internals/array-includes\").indexOf,a=e(\"../internals/hidden-keys\");t.exports=function(e,t){var r,s=o(e),u=0,c=[];for(r in s)!n(a,r)&&n(s,r)&&c.push(r);for(;t.length>u;)n(s,r=t[u++])&&(~i(c,r)||c.push(r));return c}},{\"../internals/array-includes\":193,\"../internals/has\":210,\"../internals/hidden-keys\":211,\"../internals/to-indexed-object\":252}],235:[function(e,t,r){var n=e(\"../internals/object-keys-internal\"),o=e(\"../internals/enum-bug-keys\");t.exports=Object.keys||function(e){return n(e,o)}},{\"../internals/enum-bug-keys\":203,\"../internals/object-keys-internal\":234}],236:[function(e,t,r){var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!n.call({1:2},1);r.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:n},{}],237:[function(e,t,r){var n=e(\"../internals/get-built-in\"),o=e(\"../internals/object-get-own-property-names\"),i=e(\"../internals/object-get-own-property-symbols\"),a=e(\"../internals/an-object\");t.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=o.f(a(e)),r=i.f;return r?t.concat(r(e)):t}},{\"../internals/an-object\":192,\"../internals/get-built-in\":207,\"../internals/object-get-own-property-names\":232,\"../internals/object-get-own-property-symbols\":233}],238:[function(e,t,r){t.exports=e(\"../internals/global\")},{\"../internals/global\":209}],239:[function(e,t,r){t.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},{}],240:[function(e,t,r){var n=e(\"../internals/an-object\"),o=e(\"../internals/is-object\"),i=e(\"../internals/new-promise-capability\");t.exports=function(e,t){if(n(e),o(t)&&t.constructor===e)return t;var r=i.f(e);return(0,r.resolve)(t),r.promise}},{\"../internals/an-object\":192,\"../internals/is-object\":220,\"../internals/new-promise-capability\":228}],241:[function(e,t,r){var n=e(\"../internals/redefine\");t.exports=function(e,t,r){for(var o in t)n(e,o,t[o],r);return e}},{\"../internals/redefine\":242}],242:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/shared\"),i=e(\"../internals/hide\"),a=e(\"../internals/has\"),s=e(\"../internals/set-global\"),u=e(\"../internals/function-to-string\"),c=e(\"../internals/internal-state\"),f=c.get,l=c.enforce,h=String(u).split(\"toString\");o(\"inspectSource\",(function(e){return u.call(e)})),(t.exports=function(e,t,r,o){var u=!!o&&!!o.unsafe,c=!!o&&!!o.enumerable,f=!!o&&!!o.noTargetGet;\"function\"==typeof r&&(\"string\"!=typeof t||a(r,\"name\")||i(r,\"name\",t),l(r).source=h.join(\"string\"==typeof t?t:\"\")),e!==n?(u?!f&&e[t]&&(c=!0):delete e[t],c?e[t]=r:i(e,t,r)):c?e[t]=r:s(t,r)})(Function.prototype,\"toString\",(function(){return\"function\"==typeof this&&f(this).source||u.call(this)}))},{\"../internals/function-to-string\":206,\"../internals/global\":209,\"../internals/has\":210,\"../internals/hide\":212,\"../internals/internal-state\":217,\"../internals/set-global\":244,\"../internals/shared\":248}],243:[function(e,t,r){t.exports=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e}},{}],244:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/hide\");t.exports=function(e,t){try{o(n,e,t)}catch(r){n[e]=t}return t}},{\"../internals/global\":209,\"../internals/hide\":212}],245:[function(e,t,r){var n=e(\"../internals/get-built-in\"),o=e(\"../internals/object-define-property\"),i=e(\"../internals/well-known-symbol\"),a=e(\"../internals/descriptors\"),s=i(\"species\");t.exports=function(e){var t=n(e),r=o.f;a&&t&&!t[s]&&r(t,s,{configurable:!0,get:function(){return this}})}},{\"../internals/descriptors\":201,\"../internals/get-built-in\":207,\"../internals/object-define-property\":230,\"../internals/well-known-symbol\":259}],246:[function(e,t,r){var n=e(\"../internals/object-define-property\").f,o=e(\"../internals/has\"),i=e(\"../internals/well-known-symbol\")(\"toStringTag\");t.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},{\"../internals/has\":210,\"../internals/object-define-property\":230,\"../internals/well-known-symbol\":259}],247:[function(e,t,r){var n=e(\"../internals/shared\"),o=e(\"../internals/uid\"),i=n(\"keys\");t.exports=function(e){return i[e]||(i[e]=o(e))}},{\"../internals/shared\":248,\"../internals/uid\":257}],248:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/set-global\"),i=e(\"../internals/is-pure\"),a=n[\"__core-js_shared__\"]||o(\"__core-js_shared__\",{});(t.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.2.1\",mode:i?\"pure\":\"global\",copyright:\"\\xa9 2019 Denis Pushkarev (zloirock.ru)\"})},{\"../internals/global\":209,\"../internals/is-pure\":221,\"../internals/set-global\":244}],249:[function(e,t,r){var n=e(\"../internals/an-object\"),o=e(\"../internals/a-function\"),i=e(\"../internals/well-known-symbol\")(\"species\");t.exports=function(e,t){var r,a=n(e).constructor;return void 0===a||null==(r=n(a)[i])?t:o(r)}},{\"../internals/a-function\":190,\"../internals/an-object\":192,\"../internals/well-known-symbol\":259}],250:[function(e,t,r){var n,o,i,a=e(\"../internals/global\"),s=e(\"../internals/fails\"),u=e(\"../internals/classof-raw\"),c=e(\"../internals/bind-context\"),f=e(\"../internals/html\"),l=e(\"../internals/document-create-element\"),h=a.location,d=a.setImmediate,p=a.clearImmediate,y=a.process,m=a.MessageChannel,b=a.Dispatch,v=0,g={},w=function(e){if(g.hasOwnProperty(e)){var t=g[e];delete g[e],t()}},_=function(e){return function(){w(e)}},k=function(e){w(e.data)},x=function(e){a.postMessage(e+\"\",h.protocol+\"//\"+h.host)};d&&p||(d=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return g[++v]=function(){(\"function\"==typeof e?e:Function(e)).apply(void 0,t)},n(v),v},p=function(e){delete g[e]},\"process\"==u(y)?n=function(e){y.nextTick(_(e))}:b&&b.now?n=function(e){b.now(_(e))}:m?(i=(o=new m).port2,o.port1.onmessage=k,n=c(i.postMessage,i,1)):!a.addEventListener||\"function\"!=typeof postMessage||a.importScripts||s(x)?n=\"onreadystatechange\"in l(\"script\")?function(e){f.appendChild(l(\"script\")).onreadystatechange=function(){f.removeChild(this),w(e)}}:function(e){setTimeout(_(e),0)}:(n=x,a.addEventListener(\"message\",k,!1))),t.exports={set:d,clear:p}},{\"../internals/bind-context\":194,\"../internals/classof-raw\":197,\"../internals/document-create-element\":202,\"../internals/fails\":205,\"../internals/global\":209,\"../internals/html\":214}],251:[function(e,t,r){var n=e(\"../internals/to-integer\"),o=Math.max,i=Math.min;t.exports=function(e,t){var r=n(e);return r<0?o(r+t,0):i(r,t)}},{\"../internals/to-integer\":253}],252:[function(e,t,r){var n=e(\"../internals/indexed-object\"),o=e(\"../internals/require-object-coercible\");t.exports=function(e){return n(o(e))}},{\"../internals/indexed-object\":216,\"../internals/require-object-coercible\":243}],253:[function(e,t,r){var n=Math.ceil,o=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?o:n)(e)}},{}],254:[function(e,t,r){var n=e(\"../internals/to-integer\"),o=Math.min;t.exports=function(e){return e>0?o(n(e),9007199254740991):0}},{\"../internals/to-integer\":253}],255:[function(e,t,r){var n=e(\"../internals/require-object-coercible\");t.exports=function(e){return Object(n(e))}},{\"../internals/require-object-coercible\":243}],256:[function(e,t,r){var n=e(\"../internals/is-object\");t.exports=function(e,t){if(!n(e))return e;var r,o;if(t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if(\"function\"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(!t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},{\"../internals/is-object\":220}],257:[function(e,t,r){var n=0,o=Math.random();t.exports=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++n+o).toString(36)}},{}],258:[function(e,t,r){var n=e(\"../internals/get-built-in\");t.exports=n(\"navigator\",\"userAgent\")||\"\"},{\"../internals/get-built-in\":207}],259:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/shared\"),i=e(\"../internals/uid\"),a=e(\"../internals/native-symbol\"),s=n.Symbol,u=o(\"wks\");t.exports=function(e){return u[e]||(u[e]=a&&s[e]||(a?s:i)(\"Symbol.\"+e))}},{\"../internals/global\":209,\"../internals/native-symbol\":226,\"../internals/shared\":248,\"../internals/uid\":257}],260:[function(e,t,r){var n=e(\"../internals/export\"),o=e(\"../internals/object-assign\");n({target:\"Object\",stat:!0,forced:Object.assign!==o},{assign:o})},{\"../internals/export\":204,\"../internals/object-assign\":229}],261:[function(e,t,r){var n=e(\"../internals/export\"),o=e(\"../internals/to-object\"),i=e(\"../internals/object-keys\");n({target:\"Object\",stat:!0,forced:e(\"../internals/fails\")((function(){i(1)}))},{keys:function(e){return i(o(e))}})},{\"../internals/export\":204,\"../internals/fails\":205,\"../internals/object-keys\":235,\"../internals/to-object\":255}],262:[function(e,t,r){var n,o,i,a,s=e(\"../internals/export\"),u=e(\"../internals/is-pure\"),c=e(\"../internals/global\"),f=e(\"../internals/path\"),l=e(\"../internals/native-promise-constructor\"),h=e(\"../internals/redefine\"),d=e(\"../internals/redefine-all\"),p=e(\"../internals/set-to-string-tag\"),y=e(\"../internals/set-species\"),m=e(\"../internals/is-object\"),b=e(\"../internals/a-function\"),v=e(\"../internals/an-instance\"),g=e(\"../internals/classof-raw\"),w=e(\"../internals/iterate\"),_=e(\"../internals/check-correctness-of-iteration\"),k=e(\"../internals/species-constructor\"),x=e(\"../internals/task\").set,S=e(\"../internals/microtask\"),O=e(\"../internals/promise-resolve\"),E=e(\"../internals/host-report-errors\"),R=e(\"../internals/new-promise-capability\"),j=e(\"../internals/perform\"),T=e(\"../internals/user-agent\"),C=e(\"../internals/internal-state\"),P=e(\"../internals/is-forced\"),A=e(\"../internals/well-known-symbol\")(\"species\"),M=\"Promise\",I=C.get,N=C.set,D=C.getterFor(M),B=l,F=c.TypeError,L=c.document,z=c.process,U=c.fetch,H=z&&z.versions,V=H&&H.v8||\"\",W=R.f,q=W,$=\"process\"==g(z),X=!!(L&&L.createEvent&&c.dispatchEvent),K=P(M,(function(){var e=B.resolve(1),t=function(){},r=(e.constructor={})[A]=function(e){e(t,t)};return!(($||\"function\"==typeof PromiseRejectionEvent)&&(!u||e.finally)&&e.then(t)instanceof r&&0!==V.indexOf(\"6.6\")&&-1===T.indexOf(\"Chrome/66\"))})),Y=K||!_((function(e){B.all(e).catch((function(){}))})),Z=function(e){var t;return!(!m(e)||\"function\"!=typeof(t=e.then))&&t},G=function(e,t,r){if(!t.notified){t.notified=!0;var n=t.reactions;S((function(){for(var o=t.value,i=1==t.state,a=0;n.length>a;){var s,u,c,f=n[a++],l=i?f.ok:f.fail,h=f.resolve,d=f.reject,p=f.domain;try{l?(i||(2===t.rejection&&te(e,t),t.rejection=1),!0===l?s=o:(p&&p.enter(),s=l(o),p&&(p.exit(),c=!0)),s===f.promise?d(F(\"Promise-chain cycle\")):(u=Z(s))?u.call(s,h,d):h(s)):d(o)}catch(e){p&&!c&&p.exit(),d(e)}}t.reactions=[],t.notified=!1,r&&!t.rejection&&Q(e,t)}))}},J=function(e,t,r){var n,o;X?((n=L.createEvent(\"Event\")).promise=t,n.reason=r,n.initEvent(e,!1,!0),c.dispatchEvent(n)):n={promise:t,reason:r},(o=c[\"on\"+e])?o(n):\"unhandledrejection\"===e&&E(\"Unhandled promise rejection\",r)},Q=function(e,t){x.call(c,(function(){var r,n=t.value;if(ee(t)&&(r=j((function(){$?z.emit(\"unhandledRejection\",n,e):J(\"unhandledrejection\",e,n)})),t.rejection=$||ee(t)?2:1,r.error))throw r.value}))},ee=function(e){return 1!==e.rejection&&!e.parent},te=function(e,t){x.call(c,(function(){$?z.emit(\"rejectionHandled\",e):J(\"rejectionhandled\",e,t.value)}))},re=function(e,t,r,n){return function(o){e(t,r,o,n)}},ne=function(e,t,r,n){t.done||(t.done=!0,n&&(t=n),t.value=r,t.state=2,G(e,t,!0))},oe=function e(t,r,n,o){if(!r.done){r.done=!0,o&&(r=o);try{if(t===n)throw F(\"Promise can't be resolved itself\");var i=Z(n);i?S((function(){var o={done:!1};try{i.call(n,re(e,t,o,r),re(ne,t,o,r))}catch(e){ne(t,o,e,r)}})):(r.value=n,r.state=1,G(t,r,!1))}catch(e){ne(t,{done:!1},e,r)}}};K&&(B=function(e){v(this,B,M),b(e),n.call(this);var t=I(this);try{e(re(oe,this,t),re(ne,this,t))}catch(e){ne(this,t,e)}},(n=function(e){N(this,{type:M,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=d(B.prototype,{then:function(e,t){var r=D(this),n=W(k(this,B));return n.ok=\"function\"!=typeof e||e,n.fail=\"function\"==typeof t&&t,n.domain=$?z.domain:void 0,r.parent=!0,r.reactions.push(n),0!=r.state&&G(this,r,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new n,t=I(e);this.promise=e,this.resolve=re(oe,e,t),this.reject=re(ne,e,t)},R.f=W=function(e){return e===B||e===i?new o(e):q(e)},u||\"function\"!=typeof l||(a=l.prototype.then,h(l.prototype,\"then\",(function(e,t){var r=this;return new B((function(e,t){a.call(r,e,t)})).then(e,t)})),\"function\"==typeof U&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return O(B,U.apply(c,arguments))}}))),s({global:!0,wrap:!0,forced:K},{Promise:B}),p(B,M,!1,!0),y(M),i=f[M],s({target:M,stat:!0,forced:K},{reject:function(e){var t=W(this);return t.reject.call(void 0,e),t.promise}}),s({target:M,stat:!0,forced:u||K},{resolve:function(e){return O(u&&this===i?B:this,e)}}),s({target:M,stat:!0,forced:Y},{all:function(e){var t=this,r=W(t),n=r.resolve,o=r.reject,i=j((function(){var r=b(t.resolve),i=[],a=0,s=1;w(e,(function(e){var u=a++,c=!1;i.push(void 0),s++,r.call(t,e).then((function(e){c||(c=!0,i[u]=e,--s||n(i))}),o)})),--s||n(i)}));return i.error&&o(i.value),r.promise},race:function(e){var t=this,r=W(t),n=r.reject,o=j((function(){var o=b(t.resolve);w(e,(function(e){o.call(t,e).then(r.resolve,n)}))}));return o.error&&n(o.value),r.promise}})},{\"../internals/a-function\":190,\"../internals/an-instance\":191,\"../internals/check-correctness-of-iteration\":196,\"../internals/classof-raw\":197,\"../internals/export\":204,\"../internals/global\":209,\"../internals/host-report-errors\":213,\"../internals/internal-state\":217,\"../internals/is-forced\":219,\"../internals/is-object\":220,\"../internals/is-pure\":221,\"../internals/iterate\":222,\"../internals/microtask\":224,\"../internals/native-promise-constructor\":225,\"../internals/new-promise-capability\":228,\"../internals/path\":238,\"../internals/perform\":239,\"../internals/promise-resolve\":240,\"../internals/redefine\":242,\"../internals/redefine-all\":241,\"../internals/set-species\":245,\"../internals/set-to-string-tag\":246,\"../internals/species-constructor\":249,\"../internals/task\":250,\"../internals/user-agent\":258,\"../internals/well-known-symbol\":259}],263:[function(e,t,r){(function(e){function t(e){return Object.prototype.toString.call(e)}r.isArray=function(e){return Array.isArray?Array.isArray(e):\"[object Array]\"===t(e)},r.isBoolean=function(e){return\"boolean\"==typeof e},r.isNull=function(e){return null===e},r.isNullOrUndefined=function(e){return null==e},r.isNumber=function(e){return\"number\"==typeof e},r.isString=function(e){return\"string\"==typeof e},r.isSymbol=function(e){return\"symbol\"===_typeof2(e)},r.isUndefined=function(e){return void 0===e},r.isRegExp=function(e){return\"[object RegExp]\"===t(e)},r.isObject=function(e){return\"object\"===_typeof2(e)&&null!==e},r.isDate=function(e){return\"[object Date]\"===t(e)},r.isError=function(e){return\"[object Error]\"===t(e)||e instanceof Error},r.isFunction=function(e){return\"function\"==typeof e},r.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"===_typeof2(e)||void 0===e},r.isBuffer=e.isBuffer}).call(this,{isBuffer:e(\"../../is-buffer/index.js\")})},{\"../../is-buffer/index.js\":342}],264:[function(e,t,r){(function(r){var n=e(\"elliptic\"),o=e(\"bn.js\");t.exports=function(e){return new a(e)};var i={secp256k1:{name:\"secp256k1\",byteLength:32},secp224r1:{name:\"p224\",byteLength:28},prime256v1:{name:\"p256\",byteLength:32},prime192v1:{name:\"p192\",byteLength:24},ed25519:{name:\"ed25519\",byteLength:32},secp384r1:{name:\"p384\",byteLength:48},secp521r1:{name:\"p521\",byteLength:66}};function a(e){this.curveType=i[e],this.curveType||(this.curveType={name:e}),this.curve=new n.ec(this.curveType.name),this.keys=void 0}function s(e,t,n){Array.isArray(e)||(e=e.toArray());var o=new r(e);if(n&&o.length<n){var i=new r(n-o.length);i.fill(0),o=r.concat([i,o])}return t?o.toString(t):o}i.p224=i.secp224r1,i.p256=i.secp256r1=i.prime256v1,i.p192=i.secp192r1=i.prime192v1,i.p384=i.secp384r1,i.p521=i.secp521r1,a.prototype.generateKeys=function(e,t){return this.keys=this.curve.genKeyPair(),this.getPublicKey(e,t)},a.prototype.computeSecret=function(e,t,n){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),s(this.curve.keyFromPublic(e).getPublic().mul(this.keys.getPrivate()).getX(),n,this.curveType.byteLength)},a.prototype.getPublicKey=function(e,t){var r=this.keys.getPublic(\"compressed\"===t,!0);return\"hybrid\"===t&&(r[r.length-1]%2?r[0]=7:r[0]=6),s(r,e)},a.prototype.getPrivateKey=function(e){return s(this.keys.getPrivate(),e)},a.prototype.setPublicKey=function(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this.keys._importPublic(e),this},a.prototype.setPrivateKey=function(e,t){t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t));var n=new o(e);return n=n.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(n),this}}).call(this,e(\"buffer\").Buffer)},{\"bn.js\":156,buffer:188,elliptic:283}],265:[function(e,t,r){var n=e(\"inherits\"),o=e(\"md5.js\"),i=e(\"ripemd160\"),a=e(\"sha.js\"),s=e(\"cipher-base\");function u(e){s.call(this,\"digest\"),this._hash=e}n(u,s),u.prototype._update=function(e){this._hash.update(e)},u.prototype._final=function(){return this._hash.digest()},t.exports=function(e){return\"md5\"===(e=e.toLowerCase())?new o:\"rmd160\"===e||\"ripemd160\"===e?new i:new u(a(e))}},{\"cipher-base\":189,inherits:341,\"md5.js\":388,ripemd160:444,\"sha.js\":449}],266:[function(e,t,r){var n=e(\"md5.js\");t.exports=function(e){return(new n).update(e).digest()}},{\"md5.js\":388}],267:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./legacy\"),i=e(\"cipher-base\"),a=e(\"safe-buffer\").Buffer,s=e(\"create-hash/md5\"),u=e(\"ripemd160\"),c=e(\"sha.js\"),f=a.alloc(128);function l(e,t){i.call(this,\"digest\"),\"string\"==typeof t&&(t=a.from(t));var r=\"sha512\"===e||\"sha384\"===e?128:64;(this._alg=e,this._key=t,t.length>r)?t=(\"rmd160\"===e?new u:c(e)).update(t).digest():t.length<r&&(t=a.concat([t,f],r));for(var n=this._ipad=a.allocUnsafe(r),o=this._opad=a.allocUnsafe(r),s=0;s<r;s++)n[s]=54^t[s],o[s]=92^t[s];this._hash=\"rmd160\"===e?new u:c(e),this._hash.update(n)}n(l,i),l.prototype._update=function(e){this._hash.update(e)},l.prototype._final=function(){var e=this._hash.digest();return(\"rmd160\"===this._alg?new u:c(this._alg)).update(this._opad).update(e).digest()},t.exports=function(e,t){return\"rmd160\"===(e=e.toLowerCase())||\"ripemd160\"===e?new l(\"rmd160\",t):\"md5\"===e?new o(s,t):new l(e,t)}},{\"./legacy\":268,\"cipher-base\":189,\"create-hash/md5\":266,inherits:341,ripemd160:444,\"safe-buffer\":445,\"sha.js\":449}],268:[function(e,t,r){var n=e(\"inherits\"),o=e(\"safe-buffer\").Buffer,i=e(\"cipher-base\"),a=o.alloc(128);function s(e,t){i.call(this,\"digest\"),\"string\"==typeof t&&(t=o.from(t)),this._alg=e,this._key=t,t.length>64?t=e(t):t.length<64&&(t=o.concat([t,a],64));for(var r=this._ipad=o.allocUnsafe(64),n=this._opad=o.allocUnsafe(64),s=0;s<64;s++)r[s]=54^t[s],n[s]=92^t[s];this._hash=[r]}n(s,i),s.prototype._update=function(e){this._hash.push(e)},s.prototype._final=function(){var e=this._alg(o.concat(this._hash));return this._alg(o.concat([this._opad,e]))},t.exports=s},{\"cipher-base\":189,inherits:341,\"safe-buffer\":445}],269:[function(e,t,r){r.randomBytes=r.rng=r.pseudoRandomBytes=r.prng=e(\"randombytes\"),r.createHash=r.Hash=e(\"create-hash\"),r.createHmac=r.Hmac=e(\"create-hmac\");var n=e(\"browserify-sign/algos\"),o=Object.keys(n),i=[\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"md5\",\"rmd160\"].concat(o);r.getHashes=function(){return i};var a=e(\"pbkdf2\");r.pbkdf2=a.pbkdf2,r.pbkdf2Sync=a.pbkdf2Sync;var s=e(\"browserify-cipher\");r.Cipher=s.Cipher,r.createCipher=s.createCipher,r.Cipheriv=s.Cipheriv,r.createCipheriv=s.createCipheriv,r.Decipher=s.Decipher,r.createDecipher=s.createDecipher,r.Decipheriv=s.Decipheriv,r.createDecipheriv=s.createDecipheriv,r.getCiphers=s.getCiphers,r.listCiphers=s.listCiphers;var u=e(\"diffie-hellman\");r.DiffieHellmanGroup=u.DiffieHellmanGroup,r.createDiffieHellmanGroup=u.createDiffieHellmanGroup,r.getDiffieHellman=u.getDiffieHellman,r.createDiffieHellman=u.createDiffieHellman,r.DiffieHellman=u.DiffieHellman;var c=e(\"browserify-sign\");r.createSign=c.createSign,r.Sign=c.Sign,r.createVerify=c.createVerify,r.Verify=c.Verify,r.createECDH=e(\"create-ecdh\");var f=e(\"public-encrypt\");r.publicEncrypt=f.publicEncrypt,r.privateEncrypt=f.privateEncrypt,r.publicDecrypt=f.publicDecrypt,r.privateDecrypt=f.privateDecrypt;var l=e(\"randomfill\");r.randomFill=l.randomFill,r.randomFillSync=l.randomFillSync,r.createCredentials=function(){throw new Error([\"sorry, createCredentials is not implemented yet\",\"we accept pull requests\",\"https://github.com/crypto-browserify/crypto-browserify\"].join(\"\\n\"))},r.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},{\"browserify-cipher\":176,\"browserify-sign\":183,\"browserify-sign/algos\":180,\"create-ecdh\":264,\"create-hash\":265,\"create-hmac\":267,\"diffie-hellman\":279,pbkdf2:413,\"public-encrypt\":420,randombytes:426,randomfill:427}],270:[function(e,t,r){!function(e,n){\"object\"==_typeof2(r)&&void 0!==t?t.exports=n():\"function\"==typeof define&&define.amd?define(n):e.dayjs=n()}(this,(function(){var e=\"millisecond\",t=\"second\",r=\"minute\",n=\"hour\",o=\"day\",i=\"week\",a=\"month\",s=\"quarter\",u=\"year\",c=/^(\\d{4})-?(\\d{1,2})-?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d{1,3})?$/,f=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=function(e,t,r){var n=String(e);return!n||n.length>=t?e:\"\"+Array(t+1-n.length).join(r)+e},h={s:l,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),o=r%60;return(t<=0?\"+\":\"-\")+l(n,2,\"0\")+\":\"+l(o,2,\"0\")},m:function(e,t){var r=12*(t.year()-e.year())+(t.month()-e.month()),n=e.clone().add(r,a),o=t-n<0,i=e.clone().add(r+(o?-1:1),a);return Number(-(r+(t-n)/(o?n-i:i-n))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(c){return{M:a,y:u,w:i,d:o,D:\"date\",h:n,m:r,s:t,ms:e,Q:s}[c]||String(c||\"\").toLowerCase().replace(/s$/,\"\")},u:function(e){return void 0===e}},d={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},p=\"en\",y={};y[p]=d;var m=function(e){return e instanceof w},b=function(e,t,r){var n;if(!e)return p;if(\"string\"==typeof e)y[e]&&(n=e),t&&(y[e]=t,n=e);else{var o=e.name;y[o]=e,n=o}return!r&&n&&(p=n),n||!r&&p},v=function(e,t,r){if(m(e))return e.clone();var n=t?\"string\"==typeof t?{format:t,pl:r}:t:{};return n.date=e,new w(n)},g=h;g.l=b,g.i=m,g.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,$offset:t.$offset})};var w=function(){function l(e){this.$L=this.$L||b(e.locale,null,!0),this.parse(e)}var h=l.prototype;return h.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(g.u(t))return new Date;if(t instanceof Date)return new Date(t);if(\"string\"==typeof t&&!/Z$/i.test(t)){var n=t.match(c);if(n)return r?new Date(Date.UTC(n[1],n[2]-1,n[3]||1,n[4]||0,n[5]||0,n[6]||0,n[7]||0)):new Date(n[1],n[2]-1,n[3]||1,n[4]||0,n[5]||0,n[6]||0,n[7]||0)}return new Date(t)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return g},h.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},h.isSame=function(e,t){var r=v(e);return this.startOf(t)<=r&&r<=this.endOf(t)},h.isAfter=function(e,t){return v(e)<this.startOf(t)},h.isBefore=function(e,t){return this.endOf(t)<v(e)},h.$g=function(e,t,r){return g.u(e)?this[t]:this.set(r,e)},h.year=function(e){return this.$g(e,\"$y\",u)},h.month=function(e){return this.$g(e,\"$M\",a)},h.day=function(e){return this.$g(e,\"$W\",o)},h.date=function(e){return this.$g(e,\"$D\",\"date\")},h.hour=function(e){return this.$g(e,\"$H\",n)},h.minute=function(e){return this.$g(e,\"$m\",r)},h.second=function(e){return this.$g(e,\"$s\",t)},h.millisecond=function(t){return this.$g(t,\"$ms\",e)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(e,s){var c=this,f=!!g.u(s)||s,l=g.p(e),h=function(e,t){var r=g.w(c.$u?Date.UTC(c.$y,t,e):new Date(c.$y,t,e),c);return f?r:r.endOf(o)},d=function(e,t){return g.w(c.toDate()[e].apply(c.toDate(),(f?[0,0,0,0]:[23,59,59,999]).slice(t)),c)},p=this.$W,y=this.$M,m=this.$D,b=\"set\"+(this.$u?\"UTC\":\"\");switch(l){case u:return f?h(1,0):h(31,11);case a:return f?h(1,y):h(0,y+1);case i:var v=this.$locale().weekStart||0,w=(p<v?p+7:p)-v;return h(f?m-w:m+(6-w),y);case o:case\"date\":return d(b+\"Hours\",0);case n:return d(b+\"Minutes\",1);case r:return d(b+\"Seconds\",2);case t:return d(b+\"Milliseconds\",3);default:return this.clone()}},h.endOf=function(e){return this.startOf(e,!1)},h.$set=function(i,s){var c,f=g.p(i),l=\"set\"+(this.$u?\"UTC\":\"\"),h=(c={},c.day=l+\"Date\",c.date=l+\"Date\",c[a]=l+\"Month\",c[u]=l+\"FullYear\",c[n]=l+\"Hours\",c[r]=l+\"Minutes\",c[t]=l+\"Seconds\",c[e]=l+\"Milliseconds\",c)[f],d=f===o?this.$D+(s-this.$W):s;if(f===a||f===u){var p=this.clone().set(\"date\",1);p.$d[h](d),p.init(),this.$d=p.set(\"date\",Math.min(this.$D,p.daysInMonth())).toDate()}else h&&this.$d[h](d);return this.init(),this},h.set=function(e,t){return this.clone().$set(e,t)},h.get=function(e){return this[g.p(e)]()},h.add=function(e,s){var c,f=this;e=Number(e);var l=g.p(s),h=function(t){var r=v(f);return g.w(r.date(r.date()+Math.round(t*e)),f)};if(l===a)return this.set(a,this.$M+e);if(l===u)return this.set(u,this.$y+e);if(l===o)return h(1);if(l===i)return h(7);var d=(c={},c[r]=6e4,c[n]=36e5,c[t]=1e3,c)[l]||1,p=this.$d.getTime()+e*d;return g.w(p,this)},h.subtract=function(e,t){return this.add(-1*e,t)},h.format=function(e){var t=this;if(!this.isValid())return\"Invalid Date\";var r=e||\"YYYY-MM-DDTHH:mm:ssZ\",n=g.z(this),o=this.$locale(),i=this.$H,a=this.$m,s=this.$M,u=o.weekdays,c=o.months,l=function(e,n,o,i){return e&&(e[n]||e(t,r))||o[n].substr(0,i)},h=function(e){return g.s(i%12||12,e,\"0\")},d=o.meridiem||function(e,t,r){var n=e<12?\"AM\":\"PM\";return r?n.toLowerCase():n},p={YY:String(this.$y).slice(-2),YYYY:this.$y,M:s+1,MM:g.s(s+1,2,\"0\"),MMM:l(o.monthsShort,s,c,3),MMMM:c[s]||c(this,r),D:this.$D,DD:g.s(this.$D,2,\"0\"),d:String(this.$W),dd:l(o.weekdaysMin,this.$W,u,2),ddd:l(o.weekdaysShort,this.$W,u,3),dddd:u[this.$W],H:String(i),HH:g.s(i,2,\"0\"),h:h(1),hh:h(2),a:d(i,a,!0),A:d(i,a,!1),m:String(a),mm:g.s(a,2,\"0\"),s:String(this.$s),ss:g.s(this.$s,2,\"0\"),SSS:g.s(this.$ms,3,\"0\"),Z:n};return r.replace(f,(function(e,t){return t||p[e]||n.replace(\":\",\"\")}))},h.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},h.diff=function(e,o,c){var f,l=g.p(o),h=v(e),d=6e4*(h.utcOffset()-this.utcOffset()),p=this-h,y=g.m(this,h);return y=(f={},f[u]=y/12,f[a]=y,f[s]=y/3,f[i]=(p-d)/6048e5,f.day=(p-d)/864e5,f[n]=p/36e5,f[r]=p/6e4,f[t]=p/1e3,f)[l]||p,c?y:g.a(y)},h.daysInMonth=function(){return this.endOf(a).$D},h.$locale=function(){return y[this.$L]},h.locale=function(e,t){if(!e)return this.$L;var r=this.clone(),n=b(e,t,!0);return n&&(r.$L=n),r},h.clone=function(){return g.w(this.$d,this)},h.toDate=function(){return new Date(this.valueOf())},h.toJSON=function(){return this.isValid()?this.toISOString():null},h.toISOString=function(){return this.$d.toISOString()},h.toString=function(){return this.$d.toUTCString()},l}();return v.prototype=w.prototype,v.extend=function(e,t){return e(t,w,v),v},v.locale=b,v.isDayjs=m,v.unix=function(e){return v(1e3*e)},v.en=y[p],v.Ls=y,v}))},{}],271:[function(e,t,r){!function(e,n){\"object\"==_typeof2(r)&&void 0!==t?t.exports=n():\"function\"==typeof define&&define.amd?define(n):e.dayjs_plugin_customParseFormat=n()}(this,(function(){var e,t=/(\\[[^[]*\\])|([-:/.()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\\d\\d/,n=/\\d\\d?/,o=/\\d*[^\\s\\d-:/.()]+/,i=function(e){return function(t){this[e]=+t}},a=[/[+-]\\d\\d:?\\d\\d/,function(e){var t,r;(this.zone||(this.zone={})).offset=0==(r=60*(t=e.match(/([+-]|\\d\\d)/g))[1]+ +t[2])?0:\"+\"===t[0]?-r:r}],s={A:[/[AP]M/,function(e){this.afternoon=\"PM\"===e}],a:[/[ap]m/,function(e){this.afternoon=\"pm\"===e}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[n,i(\"seconds\")],ss:[n,i(\"seconds\")],m:[n,i(\"minutes\")],mm:[n,i(\"minutes\")],H:[n,i(\"hours\")],h:[n,i(\"hours\")],HH:[n,i(\"hours\")],hh:[n,i(\"hours\")],D:[n,i(\"day\")],DD:[r,i(\"day\")],Do:[o,function(t){var r=e.ordinal,n=t.match(/\\d+/);if(this.day=n[0],r)for(var o=1;o<=31;o+=1)r(o).replace(/\\[|\\]/g,\"\")===t&&(this.day=o)}],M:[n,i(\"month\")],MM:[r,i(\"month\")],MMM:[o,function(t){var r=e,n=r.months,o=r.monthsShort,i=o?o.findIndex((function(e){return e===t})):n.findIndex((function(e){return e.substr(0,3)===t}));if(i<0)throw new Error;this.month=i+1}],MMMM:[o,function(t){var r=e.months.indexOf(t);if(r<0)throw new Error;this.month=r+1}],Y:[/[+-]?\\d+/,i(\"year\")],YY:[r,function(e){e=+e,this.year=e+(e>68?1900:2e3)}],YYYY:[/\\d{4}/,i(\"year\")],Z:a,ZZ:a},u=function(e,r,n){try{var o=function(e){for(var r=e.match(t),n=r.length,o=0;o<n;o+=1){var i=r[o],a=s[i],u=a&&a[0],c=a&&a[1];r[o]=c?{regex:u,parser:c}:i.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},o=0,i=0;o<n;o+=1){var a=r[o];if(\"string\"==typeof a)i+=a.length;else{var s=a.regex,u=a.parser,c=e.substr(i),f=s.exec(c)[0];u.call(t,f),e=e.replace(f,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var r=e.hours;t?r<12&&(e.hours+=12):12===r&&(e.hours=0),delete e.afternoon}}(t),t}}(r)(e),i=o.year,a=o.month,u=o.day,c=o.hours,f=o.minutes,l=o.seconds,h=o.milliseconds,d=o.zone;if(d)return new Date(Date.UTC(i,a-1,u,c||0,f||0,l||0,h||0)+60*d.offset*1e3);var p=new Date,y=u||(i||a?1:p.getDate()),m=i||p.getFullYear(),b=a>0?a-1:p.getMonth(),v=c||0,g=f||0,w=l||0,_=h||0;return n?new Date(Date.UTC(m,b,y,v,g,w,_)):new Date(m,b,y,v,g,w,_)}catch(e){return new Date(\"\")}};return function(t,r,n){var o=r.prototype,i=o.parse;o.parse=function(t){var r=t.date,o=t.format,a=t.pl,s=t.utc;this.$u=s,o?(e=a?n.Ls[a]:this.$locale(),this.$d=u(r,o,s),this.init(t),a&&(this.$L=a)):i.call(this,t)}}}))},{}],272:[function(e,t,r){var n,o;n=this,o=function(){return function(e,t,r){var n=(new Date).getTimezoneOffset(),o=t.prototype;r.utc=function(e,r){return new t({date:e,utc:!0,format:r})},o.utc=function(){return r(this.toDate(),{locale:this.$L,utc:!0})},o.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var i=o.parse;o.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),i.call(this,e)};var a=o.init;o.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else a.call(this)};var s=o.utcOffset;o.utcOffset=function(e){var t=this.$utils().u;if(t(e))return this.$u?0:t(this.$offset)?s.call(this):this.$offset;var r,o=Math.abs(e)<=16?60*e:e;return 0!==e?(r=this.local().add(o+n,\"minute\")).$offset=o:r=this.utc(),r};var u=o.format;o.format=function(e){var t=e||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return u.call(this,t)},o.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+n;return this.$d.valueOf()-6e4*e},o.isUTC=function(){return!!this.$u},o.toISOString=function(){return this.toDate().toISOString()},o.toString=function(){return this.toDate().toUTCString()}}},\"object\"==_typeof2(r)&&void 0!==t?t.exports=o():\"function\"==typeof define&&define.amd?define(o):n.dayjs_plugin_utc=o()},{}],273:[function(e,t,r){r.utils=e(\"./des/utils\"),r.Cipher=e(\"./des/cipher\"),r.DES=e(\"./des/des\"),r.CBC=e(\"./des/cbc\"),r.EDE=e(\"./des/ede\")},{\"./des/cbc\":274,\"./des/cipher\":275,\"./des/des\":276,\"./des/ede\":277,\"./des/utils\":278}],274:[function(e,t,r){var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i={};function a(e){n.equal(e.length,8,\"Invalid IV length\"),this.iv=new Array(8);for(var t=0;t<this.iv.length;t++)this.iv[t]=e[t]}r.instantiate=function(e){function t(t){e.call(this,t),this._cbcInit()}o(t,e);for(var r=Object.keys(i),n=0;n<r.length;n++){var a=r[n];t.prototype[a]=i[a]}return t.create=function(e){return new t(e)},t},i._cbcInit=function(){var e=new a(this.options.iv);this._cbcState=e},i._update=function(e,t,r,n){var o=this._cbcState,i=this.constructor.super_.prototype,a=o.iv;if(\"encrypt\"===this.type){for(var s=0;s<this.blockSize;s++)a[s]^=e[t+s];i._update.call(this,a,0,r,n);for(s=0;s<this.blockSize;s++)a[s]=r[n+s]}else{i._update.call(this,e,t,r,n);for(s=0;s<this.blockSize;s++)r[n+s]^=a[s];for(s=0;s<this.blockSize;s++)a[s]=e[t+s]}}},{inherits:341,\"minimalistic-assert\":390}],275:[function(e,t,r){var n=e(\"minimalistic-assert\");function o(e){this.options=e,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0}t.exports=o,o.prototype._init=function(){},o.prototype.update=function(e){return 0===e.length?[]:\"decrypt\"===this.type?this._updateDecrypt(e):this._updateEncrypt(e)},o.prototype._buffer=function(e,t){for(var r=Math.min(this.buffer.length-this.bufferOff,e.length-t),n=0;n<r;n++)this.buffer[this.bufferOff+n]=e[t+n];return this.bufferOff+=r,r},o.prototype._flushBuffer=function(e,t){return this._update(this.buffer,0,e,t),this.bufferOff=0,this.blockSize},o.prototype._updateEncrypt=function(e){var t=0,r=0,n=(this.bufferOff+e.length)/this.blockSize|0,o=new Array(n*this.blockSize);0!==this.bufferOff&&(t+=this._buffer(e,t),this.bufferOff===this.buffer.length&&(r+=this._flushBuffer(o,r)));for(var i=e.length-(e.length-t)%this.blockSize;t<i;t+=this.blockSize)this._update(e,t,o,r),r+=this.blockSize;for(;t<e.length;t++,this.bufferOff++)this.buffer[this.bufferOff]=e[t];return o},o.prototype._updateDecrypt=function(e){for(var t=0,r=0,n=Math.ceil((this.bufferOff+e.length)/this.blockSize)-1,o=new Array(n*this.blockSize);n>0;n--)t+=this._buffer(e,t),r+=this._flushBuffer(o,r);return t+=this._buffer(e,t),o},o.prototype.final=function(e){var t,r;return e&&(t=this.update(e)),r=\"encrypt\"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(r):r},o.prototype._pad=function(e,t){if(0===t)return!1;for(;t<e.length;)e[t++]=0;return!0},o.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var e=new Array(this.blockSize);return this._update(this.buffer,0,e,0),e},o.prototype._unpad=function(e){return e},o.prototype._finalDecrypt=function(){n.equal(this.bufferOff,this.blockSize,\"Not enough data to decrypt\");var e=new Array(this.blockSize);return this._flushBuffer(e,0),this._unpad(e)}},{\"minimalistic-assert\":390}],276:[function(e,t,r){var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i=e(\"../des\"),a=i.utils,s=i.Cipher;function u(){this.tmp=new Array(2),this.keys=null}function c(e){s.call(this,e);var t=new u;this._desState=t,this.deriveKeys(t,e.key)}o(c,s),t.exports=c,c.create=function(e){return new c(e)};var f=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];c.prototype.deriveKeys=function(e,t){e.keys=new Array(32),n.equal(t.length,this.blockSize,\"Invalid key length\");var r=a.readUInt32BE(t,0),o=a.readUInt32BE(t,4);a.pc1(r,o,e.tmp,0),r=e.tmp[0],o=e.tmp[1];for(var i=0;i<e.keys.length;i+=2){var s=f[i>>>1];r=a.r28shl(r,s),o=a.r28shl(o,s),a.pc2(r,o,e.keys,i)}},c.prototype._update=function(e,t,r,n){var o=this._desState,i=a.readUInt32BE(e,t),s=a.readUInt32BE(e,t+4);a.ip(i,s,o.tmp,0),i=o.tmp[0],s=o.tmp[1],\"encrypt\"===this.type?this._encrypt(o,i,s,o.tmp,0):this._decrypt(o,i,s,o.tmp,0),i=o.tmp[0],s=o.tmp[1],a.writeUInt32BE(r,i,n),a.writeUInt32BE(r,s,n+4)},c.prototype._pad=function(e,t){for(var r=e.length-t,n=t;n<e.length;n++)e[n]=r;return!0},c.prototype._unpad=function(e){for(var t=e[e.length-1],r=e.length-t;r<e.length;r++)n.equal(e[r],t);return e.slice(0,e.length-t)},c.prototype._encrypt=function(e,t,r,n,o){for(var i=t,s=r,u=0;u<e.keys.length;u+=2){var c=e.keys[u],f=e.keys[u+1];a.expand(s,e.tmp,0),c^=e.tmp[0],f^=e.tmp[1];var l=a.substitute(c,f),h=s;s=(i^a.permute(l))>>>0,i=h}a.rip(s,i,n,o)},c.prototype._decrypt=function(e,t,r,n,o){for(var i=r,s=t,u=e.keys.length-2;u>=0;u-=2){var c=e.keys[u],f=e.keys[u+1];a.expand(i,e.tmp,0),c^=e.tmp[0],f^=e.tmp[1];var l=a.substitute(c,f),h=i;i=(s^a.permute(l))>>>0,s=h}a.rip(i,s,n,o)}},{\"../des\":273,inherits:341,\"minimalistic-assert\":390}],277:[function(e,t,r){var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i=e(\"../des\"),a=i.Cipher,s=i.DES;function u(e,t){n.equal(t.length,24,\"Invalid key length\");var r=t.slice(0,8),o=t.slice(8,16),i=t.slice(16,24);this.ciphers=\"encrypt\"===e?[s.create({type:\"encrypt\",key:r}),s.create({type:\"decrypt\",key:o}),s.create({type:\"encrypt\",key:i})]:[s.create({type:\"decrypt\",key:i}),s.create({type:\"encrypt\",key:o}),s.create({type:\"decrypt\",key:r})]}function c(e){a.call(this,e);var t=new u(this.type,this.options.key);this._edeState=t}o(c,a),t.exports=c,c.create=function(e){return new c(e)},c.prototype._update=function(e,t,r,n){var o=this._edeState;o.ciphers[0]._update(e,t,r,n),o.ciphers[1]._update(r,n,r,n),o.ciphers[2]._update(r,n,r,n)},c.prototype._pad=s.prototype._pad,c.prototype._unpad=s.prototype._unpad},{\"../des\":273,inherits:341,\"minimalistic-assert\":390}],278:[function(e,t,r){r.readUInt32BE=function(e,t){return(e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t])>>>0},r.writeUInt32BE=function(e,t,r){e[0+r]=t>>>24,e[1+r]=t>>>16&255,e[2+r]=t>>>8&255,e[3+r]=255&t},r.ip=function(e,t,r,n){for(var o=0,i=0,a=6;a>=0;a-=2){for(var s=0;s<=24;s+=8)o<<=1,o|=t>>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>>s+a&1}for(a=6;a>=0;a-=2){for(s=1;s<=25;s+=8)i<<=1,i|=t>>>s+a&1;for(s=1;s<=25;s+=8)i<<=1,i|=e>>>s+a&1}r[n+0]=o>>>0,r[n+1]=i>>>0},r.rip=function(e,t,r,n){for(var o=0,i=0,a=0;a<4;a++)for(var s=24;s>=0;s-=8)o<<=1,o|=t>>>s+a&1,o<<=1,o|=e>>>s+a&1;for(a=4;a<8;a++)for(s=24;s>=0;s-=8)i<<=1,i|=t>>>s+a&1,i<<=1,i|=e>>>s+a&1;r[n+0]=o>>>0,r[n+1]=i>>>0},r.pc1=function(e,t,r,n){for(var o=0,i=0,a=7;a>=5;a--){for(var s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1}for(s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(a=1;a<=3;a++){for(s=0;s<=24;s+=8)i<<=1,i|=t>>s+a&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1}for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1;r[n+0]=o>>>0,r[n+1]=i>>>0},r.r28shl=function(e,t){return e<<t&268435455|e>>>28-t};var n=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];r.pc2=function(e,t,r,o){for(var i=0,a=0,s=n.length>>>1,u=0;u<s;u++)i<<=1,i|=e>>>n[u]&1;for(u=s;u<n.length;u++)a<<=1,a|=t>>>n[u]&1;r[o+0]=i>>>0,r[o+1]=a>>>0},r.expand=function(e,t,r){var n=0,o=0;n=(1&e)<<5|e>>>27;for(var i=23;i>=15;i-=4)n<<=6,n|=e>>>i&63;for(i=11;i>=3;i-=4)o|=e>>>i&63,o<<=6;o|=(31&e)<<1|e>>>31,t[r+0]=n>>>0,t[r+1]=o>>>0};var o=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];r.substitute=function(e,t){for(var r=0,n=0;n<4;n++){r<<=4,r|=o[64*n+(e>>>18-6*n&63)]}for(n=0;n<4;n++){r<<=4,r|=o[256+64*n+(t>>>18-6*n&63)]}return r>>>0};var i=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];r.permute=function(e){for(var t=0,r=0;r<i.length;r++)t<<=1,t|=e>>>i[r]&1;return t>>>0},r.padSplit=function(e,t,r){for(var n=e.toString(2);n.length<t;)n=\"0\"+n;for(var o=[],i=0;i<t;i+=r)o.push(n.slice(i,i+r));return o.join(\" \")}},{}],279:[function(e,t,r){(function(t){var n=e(\"./lib/generatePrime\"),o=e(\"./lib/primes.json\"),i=e(\"./lib/dh\");var a={binary:!0,hex:!0,base64:!0};r.DiffieHellmanGroup=r.createDiffieHellmanGroup=r.getDiffieHellman=function(e){var r=new t(o[e].prime,\"hex\"),n=new t(o[e].gen,\"hex\");return new i(r,n)},r.createDiffieHellman=r.DiffieHellman=function e(r,o,s,u){return t.isBuffer(o)||void 0===a[o]?e(r,\"binary\",o,s):(o=o||\"binary\",u=u||\"binary\",s=s||new t([2]),t.isBuffer(s)||(s=new t(s,u)),\"number\"==typeof r?new i(n(r,s),s,!0):(t.isBuffer(r)||(r=new t(r,o)),new i(r,s,!0)))}}).call(this,e(\"buffer\").Buffer)},{\"./lib/dh\":280,\"./lib/generatePrime\":281,\"./lib/primes.json\":282,buffer:188}],280:[function(e,t,r){(function(r){var n=e(\"bn.js\"),o=new(e(\"miller-rabin\")),i=new n(24),a=new n(11),s=new n(10),u=new n(3),c=new n(7),f=e(\"./generatePrime\"),l=e(\"randombytes\");function h(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this._pub=new n(e),this}function d(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this._priv=new n(e),this}t.exports=y;var p={};function y(e,t,r){this.setGenerator(t),this.__prime=new n(e),this._prime=n.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=h,this.setPrivateKey=d):this._primeCode=8}function m(e,t){var n=new r(e.toArray());return t?n.toString(t):n}Object.defineProperty(y.prototype,\"verifyError\",{enumerable:!0,get:function(){return\"number\"!=typeof this._primeCode&&(this._primeCode=function(e,t){var r=t.toString(\"hex\"),n=[r,e.toString(16)].join(\"_\");if(n in p)return p[n];var l,h=0;if(e.isEven()||!f.simpleSieve||!f.fermatTest(e)||!o.test(e))return h+=1,h+=\"02\"===r||\"05\"===r?8:4,p[n]=h,h;switch(o.test(e.shrn(1))||(h+=2),r){case\"02\":e.mod(i).cmp(a)&&(h+=8);break;case\"05\":(l=e.mod(s)).cmp(u)&&l.cmp(c)&&(h+=8);break;default:h+=4}return p[n]=h,h}(this.__prime,this.__gen)),this._primeCode}}),y.prototype.generateKeys=function(){return this._priv||(this._priv=new n(l(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},y.prototype.computeSecret=function(e){var t=(e=(e=new n(e)).toRed(this._prime)).redPow(this._priv).fromRed(),o=new r(t.toArray()),i=this.getPrime();if(o.length<i.length){var a=new r(i.length-o.length);a.fill(0),o=r.concat([a,o])}return o},y.prototype.getPublicKey=function(e){return m(this._pub,e)},y.prototype.getPrivateKey=function(e){return m(this._priv,e)},y.prototype.getPrime=function(e){return m(this.__prime,e)},y.prototype.getGenerator=function(e){return m(this._gen,e)},y.prototype.setGenerator=function(e,t){return t=t||\"utf8\",r.isBuffer(e)||(e=new r(e,t)),this.__gen=e,this._gen=new n(e),this}}).call(this,e(\"buffer\").Buffer)},{\"./generatePrime\":281,\"bn.js\":156,buffer:188,\"miller-rabin\":389,randombytes:426}],281:[function(e,t,r){var n=e(\"randombytes\");t.exports=v,v.simpleSieve=m,v.fermatTest=b;var o=e(\"bn.js\"),i=new o(24),a=new(e(\"miller-rabin\")),s=new o(1),u=new o(2),c=new o(5),f=(new o(16),new o(8),new o(10)),l=new o(3),h=(new o(7),new o(11)),d=new o(4),p=(new o(12),null);function y(){if(null!==p)return p;var e=[];e[0]=2;for(var t=1,r=3;r<1048576;r+=2){for(var n=Math.ceil(Math.sqrt(r)),o=0;o<t&&e[o]<=n&&r%e[o]!=0;o++);t!==o&&e[o]<=n||(e[t++]=r)}return p=e,e}function m(e){for(var t=y(),r=0;r<t.length;r++)if(0===e.modn(t[r]))return 0===e.cmpn(t[r]);return!0}function b(e){var t=o.mont(e);return 0===u.toRed(t).redPow(e.subn(1)).fromRed().cmpn(1)}function v(e,t){if(e<16)return new o(2===t||5===t?[140,123]:[140,39]);var r,p;for(t=new o(t);;){for(r=new o(n(Math.ceil(e/8)));r.bitLength()>e;)r.ishrn(1);if(r.isEven()&&r.iadd(s),r.testn(1)||r.iadd(u),t.cmp(u)){if(!t.cmp(c))for(;r.mod(f).cmp(l);)r.iadd(d)}else for(;r.mod(i).cmp(h);)r.iadd(d);if(m(p=r.shrn(1))&&m(r)&&b(p)&&b(r)&&a.test(p)&&a.test(r))return r}}},{\"bn.js\":156,\"miller-rabin\":389,randombytes:426}],282:[function(e,t,r){t.exports={modp1:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"},modp2:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"},modp5:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"},modp14:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"},modp15:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"},modp16:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"},modp17:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"},modp18:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"}}},{}],283:[function(e,t,r){var n=r;n.version=e(\"../package.json\").version,n.utils=e(\"./elliptic/utils\"),n.rand=e(\"brorand\"),n.curve=e(\"./elliptic/curve\"),n.curves=e(\"./elliptic/curves\"),n.ec=e(\"./elliptic/ec\"),n.eddsa=e(\"./elliptic/eddsa\")},{\"../package.json\":298,\"./elliptic/curve\":286,\"./elliptic/curves\":289,\"./elliptic/ec\":290,\"./elliptic/eddsa\":293,\"./elliptic/utils\":297,brorand:157}],284:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.getNAF,a=o.getJSF,s=o.assert;function u(e,t){this.type=e,this.p=new n(t.p,16),this.red=t.prime?n.red(t.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=t.n&&new n(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function c(e,t){this.curve=e,this.type=t,this.precomputed=null}t.exports=u,u.prototype.point=function(){throw new Error(\"Not implemented\")},u.prototype.validate=function(){throw new Error(\"Not implemented\")},u.prototype._fixedNafMul=function(e,t){s(e.precomputed);var r=e._getDoubles(),n=i(t,1),o=(1<<r.step+1)-(r.step%2==0?2:1);o/=3;for(var a=[],u=0;u<n.length;u+=r.step){var c=0;for(t=u+r.step-1;t>=u;t--)c=(c<<1)+n[t];a.push(c)}for(var f=this.jpoint(null,null,null),l=this.jpoint(null,null,null),h=o;h>0;h--){for(u=0;u<a.length;u++){(c=a[u])===h?l=l.mixedAdd(r.points[u]):c===-h&&(l=l.mixedAdd(r.points[u].neg()))}f=f.add(l)}return f.toP()},u.prototype._wnafMul=function(e,t){var r=4,n=e._getNAFPoints(r);r=n.wnd;for(var o=n.points,a=i(t,r),u=this.jpoint(null,null,null),c=a.length-1;c>=0;c--){for(t=0;c>=0&&0===a[c];c--)t++;if(c>=0&&t++,u=u.dblp(t),c<0)break;var f=a[c];s(0!==f),u=\"affine\"===e.type?f>0?u.mixedAdd(o[f-1>>1]):u.mixedAdd(o[-f-1>>1].neg()):f>0?u.add(o[f-1>>1]):u.add(o[-f-1>>1].neg())}return\"affine\"===e.type?u.toP():u},u.prototype._wnafMulAdd=function(e,t,r,n,o){for(var s=this._wnafT1,u=this._wnafT2,c=this._wnafT3,f=0,l=0;l<n;l++){var h=(O=t[l])._getNAFPoints(e);s[l]=h.wnd,u[l]=h.points}for(l=n-1;l>=1;l-=2){var d=l-1,p=l;if(1===s[d]&&1===s[p]){var y=[t[d],null,null,t[p]];0===t[d].y.cmp(t[p].y)?(y[1]=t[d].add(t[p]),y[2]=t[d].toJ().mixedAdd(t[p].neg())):0===t[d].y.cmp(t[p].y.redNeg())?(y[1]=t[d].toJ().mixedAdd(t[p]),y[2]=t[d].add(t[p].neg())):(y[1]=t[d].toJ().mixedAdd(t[p]),y[2]=t[d].toJ().mixedAdd(t[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],b=a(r[d],r[p]);f=Math.max(b[0].length,f),c[d]=new Array(f),c[p]=new Array(f);for(var v=0;v<f;v++){var g=0|b[0][v],w=0|b[1][v];c[d][v]=m[3*(g+1)+(w+1)],c[p][v]=0,u[d]=y}}else c[d]=i(r[d],s[d]),c[p]=i(r[p],s[p]),f=Math.max(c[d].length,f),f=Math.max(c[p].length,f)}var _=this.jpoint(null,null,null),k=this._wnafT4;for(l=f;l>=0;l--){for(var x=0;l>=0;){var S=!0;for(v=0;v<n;v++)k[v]=0|c[v][l],0!==k[v]&&(S=!1);if(!S)break;x++,l--}if(l>=0&&x++,_=_.dblp(x),l<0)break;for(v=0;v<n;v++){var O,E=k[v];0!==E&&(E>0?O=u[v][E-1>>1]:E<0&&(O=u[v][-E-1>>1].neg()),_=\"affine\"===O.type?_.mixedAdd(O):_.add(O))}}for(l=0;l<n;l++)u[l]=null;return o?_:_.toP()},u.BasePoint=c,c.prototype.eq=function(){throw new Error(\"Not implemented\")},c.prototype.validate=function(){return this.curve.validate(this)},u.prototype.decodePoint=function(e,t){e=o.toArray(e,t);var r=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*r)return 6===e[0]?s(e[e.length-1]%2==0):7===e[0]&&s(e[e.length-1]%2==1),this.point(e.slice(1,1+r),e.slice(1+r,1+2*r));if((2===e[0]||3===e[0])&&e.length-1===r)return this.pointFromX(e.slice(1,1+r),3===e[0]);throw new Error(\"Unknown point format\")},c.prototype.encodeCompressed=function(e){return this.encode(e,!0)},c.prototype._encode=function(e){var t=this.curve.p.byteLength(),r=this.getX().toArray(\"be\",t);return e?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray(\"be\",t))},c.prototype.encode=function(e,t){return o.encode(this._encode(t),e)},c.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},c.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return!!t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)},c.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,o=0;o<t;o+=e){for(var i=0;i<e;i++)n=n.dbl();r.push(n)}return{step:e,points:r}},c.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<<e)-1,n=1===r?null:this.dbl(),o=1;o<r;o++)t[o]=t[o-1].add(n);return{wnd:e,points:t}},c.prototype._getBeta=function(){return null},c.prototype.dblp=function(e){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}},{\"../utils\":297,\"bn.js\":156}],285:[function(e,t,r){var n=e(\"../utils\"),o=e(\"bn.js\"),i=e(\"inherits\"),a=e(\"./base\"),s=n.assert;function u(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,a.call(this,\"edwards\",e),this.a=new o(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new o(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new o(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function c(e,t,r,n,i){a.BasePoint.call(this,e,\"projective\"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new o(t,16),this.y=new o(r,16),this.z=n?new o(n,16):this.curve.one,this.t=i&&new o(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}i(u,a),t.exports=u,u.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},u.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},u.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},u.prototype.pointFromX=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=n.redMul(i.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error(\"invalid point\");var u=s.fromRed().isOdd();return(t&&!u||!t&&u)&&(s=s.redNeg()),this.point(e,s)},u.prototype.pointFromY=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),n=r.redSub(this.c2),i=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=n.redMul(i.redInvm());if(0===a.cmp(this.zero)){if(t)throw new Error(\"invalid point\");return this.point(this.zero,e)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw new Error(\"invalid point\");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},u.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),o=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(o)},i(c,a.BasePoint),u.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},u.prototype.point=function(e,t,r,n){return new c(this,e,t,r,n)},c.fromJSON=function(e,t){return new c(e,t[0],t[1],t[2])},c.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" y: \"+this.y.fromRed().toString(16,2)+\" z: \"+this.z.fromRed().toString(16,2)+\">\"},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},c.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),o=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),i=n.redAdd(t),a=i.redSub(r),s=n.redSub(t),u=o.redMul(a),c=i.redMul(s),f=o.redMul(s),l=a.redMul(i);return this.curve.point(u,c,l,f)},c.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),o=this.x.redSqr(),i=this.y.redSqr();if(this.curve.twisted){var a=(c=this.curve._mulA(o)).redAdd(i);if(this.zOne)e=n.redSub(o).redSub(i).redMul(a.redSub(this.curve.two)),t=a.redMul(c.redSub(i)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),u=a.redSub(s).redISub(s);e=n.redSub(o).redISub(i).redMul(u),t=a.redMul(c.redSub(i)),r=a.redMul(u)}}else{var c=o.redAdd(i);s=this.curve._mulC(this.z).redSqr(),u=c.redSub(s).redSub(s);e=this.curve._mulC(n.redISub(c)).redMul(u),t=this.curve._mulC(c).redMul(o.redISub(i)),r=c.redMul(u)}return this.curve.point(e,t,r)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),o=this.z.redMul(e.z.redAdd(e.z)),i=r.redSub(t),a=o.redSub(n),s=o.redAdd(n),u=r.redAdd(t),c=i.redMul(a),f=s.redMul(u),l=i.redMul(u),h=a.redMul(s);return this.curve.point(c,f,h,l)},c.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),o=n.redSqr(),i=this.x.redMul(e.x),a=this.y.redMul(e.y),s=this.curve.d.redMul(i).redMul(a),u=o.redSub(s),c=o.redAdd(s),f=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(i).redISub(a),l=n.redMul(u).redMul(f);return this.curve.twisted?(t=n.redMul(c).redMul(a.redSub(this.curve._mulA(i))),r=u.redMul(c)):(t=n.redMul(c).redMul(a.redSub(i)),r=this.curve._mulC(u).redMul(c)),this.curve.point(l,t,r)},c.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},c.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},c.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},c.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},c.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(n),0===this.x.cmp(t))return!0}},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},{\"../utils\":297,\"./base\":284,\"bn.js\":156,inherits:341}],286:[function(e,t,r){var n=r;n.base=e(\"./base\"),n.short=e(\"./short\"),n.mont=e(\"./mont\"),n.edwards=e(\"./edwards\")},{\"./base\":284,\"./edwards\":285,\"./mont\":287,\"./short\":288}],287:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"inherits\"),i=e(\"./base\"),a=e(\"../utils\");function s(e){i.call(this,\"mont\",e),this.a=new n(e.a,16).toRed(this.red),this.b=new n(e.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function u(e,t,r){i.BasePoint.call(this,e,\"projective\"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(t,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}o(s,i),t.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===n.redSqrt().redSqr().cmp(n)},o(u,i.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(a.toArray(e,t),1)},s.prototype.point=function(e,t){return new u(this,e,t)},s.prototype.pointFromJSON=function(e){return u.fromJSON(this,e)},u.prototype.precompute=function(){},u.prototype._encode=function(){return this.getX().toArray(\"be\",this.curve.p.byteLength())},u.fromJSON=function(e,t){return new u(e,t[0],t[1]||e.one)},u.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" z: \"+this.z.fromRed().toString(16,2)+\">\"},u.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},u.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),n=e.redMul(t),o=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,o)},u.prototype.add=function(){throw new Error(\"Not supported on Montgomery curve\")},u.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),o=e.x.redAdd(e.z),i=e.x.redSub(e.z).redMul(r),a=o.redMul(n),s=t.z.redMul(i.redAdd(a).redSqr()),u=t.x.redMul(i.redISub(a).redSqr());return this.curve.point(s,u)},u.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),o=[];0!==t.cmpn(0);t.iushrn(1))o.push(t.andln(1));for(var i=o.length-1;i>=0;i--)0===o[i]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},u.prototype.mulAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},u.prototype.jumlAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},u.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},u.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},u.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{\"../utils\":297,\"./base\":284,\"bn.js\":156,inherits:341}],288:[function(e,t,r){var n=e(\"../utils\"),o=e(\"bn.js\"),i=e(\"inherits\"),a=e(\"./base\"),s=n.assert;function u(e){a.call(this,\"short\",e),this.a=new o(e.a,16).toRed(this.red),this.b=new o(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function c(e,t,r,n){a.BasePoint.call(this,e,\"affine\"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new o(t,16),this.y=new o(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function f(e,t,r,n){a.BasePoint.call(this,e,\"jacobian\"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new o(0)):(this.x=new o(t,16),this.y=new o(r,16),this.z=new o(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}i(u,a),t.exports=u,u.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new o(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=(t=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(e.lambda)r=new o(e.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(t))?r=i[0]:(r=i[1],s(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new o(e.a,16),b:new o(e.b,16)}})):this._getEndoBasis(r)}}},u.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:o.mont(e),r=new o(2).toRed(t).redInvm(),n=r.redNeg(),i=new o(3).toRed(t).redNeg().redSqrt().redMul(r);return[n.redAdd(i).fromRed(),n.redSub(i).fromRed()]},u.prototype._getEndoBasis=function(e){for(var t,r,n,i,a,s,u,c,f,l=this.n.ushrn(Math.floor(this.n.bitLength()/2)),h=e,d=this.n.clone(),p=new o(1),y=new o(0),m=new o(0),b=new o(1),v=0;0!==h.cmpn(0);){var g=d.div(h);c=d.sub(g.mul(h)),f=m.sub(g.mul(p));var w=b.sub(g.mul(y));if(!n&&c.cmp(l)<0)t=u.neg(),r=p,n=c.neg(),i=f;else if(n&&2==++v)break;u=c,d=h,h=c,m=p,p=f,b=y,y=w}a=c.neg(),s=f;var _=n.sqr().add(i.sqr());return a.sqr().add(s.sqr()).cmp(_)>=0&&(a=t,s=r),n.negative&&(n=n.neg(),i=i.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:i},{a:a,b:s}]},u.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],o=n.b.mul(e).divRound(this.n),i=r.b.neg().mul(e).divRound(this.n),a=o.mul(r.a),s=i.mul(n.a),u=o.mul(r.b),c=i.mul(n.b);return{k1:e.sub(a).sub(s),k2:u.add(c).neg()}},u.prototype.pointFromX=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error(\"invalid point\");var i=n.fromRed().isOdd();return(t&&!i||!t&&i)&&(n=n.redNeg()),this.point(e,n)},u.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),o=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(o).cmpn(0)},u.prototype._endoWnafMulAdd=function(e,t,r){for(var n=this._endoWnafT1,o=this._endoWnafT2,i=0;i<e.length;i++){var a=this._endoSplit(t[i]),s=e[i],u=s._getBeta();a.k1.negative&&(a.k1.ineg(),s=s.neg(!0)),a.k2.negative&&(a.k2.ineg(),u=u.neg(!0)),n[2*i]=s,n[2*i+1]=u,o[2*i]=a.k1,o[2*i+1]=a.k2}for(var c=this._wnafMulAdd(1,n,o,2*i,r),f=0;f<2*i;f++)n[f]=null,o[f]=null;return c},i(c,a.BasePoint),u.prototype.point=function(e,t,r){return new c(this,e,t,r)},u.prototype.pointFromJSON=function(e,t){return c.fromJSON(this,e,t)},c.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,n=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(n)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(n)}}}return t}},c.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},c.fromJSON=function(e,t,r){\"string\"==typeof t&&(t=JSON.parse(t));var n=e.point(t[0],t[1],r);if(!t[2])return n;function o(t){return e.point(t[0],t[1],r)}var i=t[2];return n.precomputed={beta:null,doubles:i.doubles&&{step:i.doubles.step,points:[n].concat(i.doubles.points.map(o))},naf:i.naf&&{wnd:i.naf.wnd,points:[n].concat(i.naf.points.map(o))}},n},c.prototype.inspect=function(){return this.isInfinity()?\"<EC Point Infinity>\":\"<EC Point x: \"+this.x.fromRed().toString(16,2)+\" y: \"+this.y.fromRed().toString(16,2)+\">\"},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},c.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),o=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),i=o.redSqr().redISub(this.x.redAdd(this.x)),a=o.redMul(this.x.redSub(i)).redISub(this.y);return this.curve.point(i,a)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(e){return e=new o(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){var n=[this,t],o=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,o):this.curve._wnafMulAdd(1,n,o,2)},c.prototype.jmulAdd=function(e,t,r){var n=[this,t],o=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,o,!0):this.curve._wnafMulAdd(1,n,o,2,!0)},c.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},c.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},c.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},i(f,a.BasePoint),u.prototype.jpoint=function(e,t,r){return new f(this,e,t,r)},f.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},f.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},f.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),o=e.x.redMul(r),i=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),s=n.redSub(o),u=i.redSub(a);if(0===s.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=s.redSqr(),f=c.redMul(s),l=n.redMul(c),h=u.redSqr().redIAdd(f).redISub(l).redISub(l),d=u.redMul(l.redISub(h)).redISub(i.redMul(f)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(h,d,p)},f.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),o=this.y,i=e.y.redMul(t).redMul(this.z),a=r.redSub(n),s=o.redSub(i);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),c=u.redMul(a),f=r.redMul(u),l=s.redSqr().redIAdd(c).redISub(f).redISub(f),h=s.redMul(f.redISub(l)).redISub(o.redMul(c)),d=this.z.redMul(a);return this.curve.jpoint(l,h,d)},f.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}var n=this.curve.a,o=this.curve.tinv,i=this.x,a=this.y,s=this.z,u=s.redSqr().redSqr(),c=a.redAdd(a);for(r=0;r<e;r++){var f=i.redSqr(),l=c.redSqr(),h=l.redSqr(),d=f.redAdd(f).redIAdd(f).redIAdd(n.redMul(u)),p=i.redMul(l),y=d.redSqr().redISub(p.redAdd(p)),m=p.redISub(y),b=d.redMul(m);b=b.redIAdd(b).redISub(h);var v=c.redMul(s);r+1<e&&(u=u.redMul(h)),i=y,s=v,c=b}return this.curve.jpoint(i,c.redMul(o),s)},f.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},f.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),o=this.y.redSqr(),i=o.redSqr(),a=this.x.redAdd(o).redSqr().redISub(n).redISub(i);a=a.redIAdd(a);var s=n.redAdd(n).redIAdd(n),u=s.redSqr().redISub(a).redISub(a),c=i.redIAdd(i);c=(c=c.redIAdd(c)).redIAdd(c),e=u,t=s.redMul(a.redISub(u)).redISub(c),r=this.y.redAdd(this.y)}else{var f=this.x.redSqr(),l=this.y.redSqr(),h=l.redSqr(),d=this.x.redAdd(l).redSqr().redISub(f).redISub(h);d=d.redIAdd(d);var p=f.redAdd(f).redIAdd(f),y=p.redSqr(),m=h.redIAdd(h);m=(m=m.redIAdd(m)).redIAdd(m),e=y.redISub(d).redISub(d),t=p.redMul(d.redISub(e)).redISub(m),r=(r=this.y.redMul(this.z)).redIAdd(r)}return this.curve.jpoint(e,t,r)},f.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),o=this.y.redSqr(),i=o.redSqr(),a=this.x.redAdd(o).redSqr().redISub(n).redISub(i);a=a.redIAdd(a);var s=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),u=s.redSqr().redISub(a).redISub(a);e=u;var c=i.redIAdd(i);c=(c=c.redIAdd(c)).redIAdd(c),t=s.redMul(a.redISub(u)).redISub(c),r=this.y.redAdd(this.y)}else{var f=this.z.redSqr(),l=this.y.redSqr(),h=this.x.redMul(l),d=this.x.redSub(f).redMul(this.x.redAdd(f));d=d.redAdd(d).redIAdd(d);var p=h.redIAdd(h),y=(p=p.redIAdd(p)).redAdd(p);e=d.redSqr().redISub(y),r=this.y.redAdd(this.z).redSqr().redISub(l).redISub(f);var m=l.redSqr();m=(m=(m=m.redIAdd(m)).redIAdd(m)).redIAdd(m),t=d.redMul(p.redISub(e)).redISub(m)}return this.curve.jpoint(e,t,r)},f.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,n=this.z,o=n.redSqr().redSqr(),i=t.redSqr(),a=r.redSqr(),s=i.redAdd(i).redIAdd(i).redIAdd(e.redMul(o)),u=t.redAdd(t),c=(u=u.redIAdd(u)).redMul(a),f=s.redSqr().redISub(c.redAdd(c)),l=c.redISub(f),h=a.redSqr();h=(h=(h=h.redIAdd(h)).redIAdd(h)).redIAdd(h);var d=s.redMul(l).redISub(h),p=r.redAdd(r).redMul(n);return this.curve.jpoint(f,d,p)},f.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),n=t.redSqr(),o=e.redAdd(e).redIAdd(e),i=o.redSqr(),a=this.x.redAdd(t).redSqr().redISub(e).redISub(n),s=(a=(a=(a=a.redIAdd(a)).redAdd(a).redIAdd(a)).redISub(i)).redSqr(),u=n.redIAdd(n);u=(u=(u=u.redIAdd(u)).redIAdd(u)).redIAdd(u);var c=o.redIAdd(a).redSqr().redISub(i).redISub(s).redISub(u),f=t.redMul(c);f=(f=f.redIAdd(f)).redIAdd(f);var l=this.x.redMul(s).redISub(f);l=(l=l.redIAdd(l)).redIAdd(l);var h=this.y.redMul(c.redMul(u.redISub(c)).redISub(a.redMul(s)));h=(h=(h=h.redIAdd(h)).redIAdd(h)).redIAdd(h);var d=this.z.redAdd(a).redSqr().redISub(r).redISub(s);return this.curve.jpoint(l,h,d)},f.prototype.mul=function(e,t){return e=new o(e,t),this.curve._wnafMul(this,e)},f.prototype.eq=function(e){if(\"affine\"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var n=t.redMul(this.z),o=r.redMul(e.z);return 0===this.y.redMul(o).redISub(e.y.redMul(n)).cmpn(0)},f.prototype.eqXToP=function(e){var t=this.z.redSqr(),r=e.toRed(this.curve.red).redMul(t);if(0===this.x.cmp(r))return!0;for(var n=e.clone(),o=this.curve.redN.redMul(t);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(o),0===this.x.cmp(r))return!0}},f.prototype.inspect=function(){return this.isInfinity()?\"<EC JPoint Infinity>\":\"<EC JPoint x: \"+this.x.toString(16,2)+\" y: \"+this.y.toString(16,2)+\" z: \"+this.z.toString(16,2)+\">\"},f.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{\"../utils\":297,\"./base\":284,\"bn.js\":156,inherits:341}],289:[function(e,t,r){var n,o=r,i=e(\"hash.js\"),a=e(\"./curve\"),s=e(\"./utils\").assert;function u(e){\"short\"===e.type?this.curve=new a.short(e):\"edwards\"===e.type?this.curve=new a.edwards(e):this.curve=new a.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),\"Invalid curve\"),s(this.g.mul(this.n).isInfinity(),\"Invalid curve, G*N != O\")}function c(e,t){Object.defineProperty(o,e,{configurable:!0,enumerable:!0,get:function(){var r=new u(t);return Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:r}),r}})}o.PresetCurve=u,c(\"p192\",{type:\"short\",prime:\"p192\",p:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc\",b:\"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1\",n:\"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831\",hash:i.sha256,gRed:!1,g:[\"188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012\",\"07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811\"]}),c(\"p224\",{type:\"short\",prime:\"p224\",p:\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe\",b:\"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4\",n:\"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d\",hash:i.sha256,gRed:!1,g:[\"b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21\",\"bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34\"]}),c(\"p256\",{type:\"short\",prime:null,p:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff\",a:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc\",b:\"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b\",n:\"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551\",hash:i.sha256,gRed:!1,g:[\"6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296\",\"4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5\"]}),c(\"p384\",{type:\"short\",prime:null,p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff\",a:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc\",b:\"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef\",n:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973\",hash:i.sha384,gRed:!1,g:[\"aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7\",\"3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f\"]}),c(\"p521\",{type:\"short\",prime:null,p:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff\",a:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc\",b:\"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00\",n:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409\",hash:i.sha512,gRed:!1,g:[\"000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66\",\"00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650\"]}),c(\"curve25519\",{type:\"mont\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"76d06\",b:\"1\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:i.sha256,gRed:!1,g:[\"9\"]}),c(\"ed25519\",{type:\"edwards\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"-1\",c:\"1\",d:\"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:i.sha256,gRed:!1,g:[\"216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a\",\"6666666666666666666666666666666666666666666666666666666666666658\"]});try{n=e(\"./precomputed/secp256k1\")}catch(e){n=void 0}c(\"secp256k1\",{type:\"short\",prime:\"k256\",p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\",a:\"0\",b:\"7\",n:\"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141\",h:\"1\",hash:i.sha256,beta:\"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee\",lambda:\"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72\",basis:[{a:\"3086d221a7d46bcde86c90e49284eb15\",b:\"-e4437ed6010e88286f547fa90abfe4c3\"},{a:\"114ca50f7a8e2f3f657c1108d9d44cfd8\",b:\"3086d221a7d46bcde86c90e49284eb15\"}],gRed:!1,g:[\"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798\",\"483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8\",n]})},{\"./curve\":286,\"./precomputed/secp256k1\":296,\"./utils\":297,\"hash.js\":326}],290:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"hmac-drbg\"),i=e(\"../utils\"),a=e(\"../curves\"),s=e(\"brorand\"),u=i.assert,c=e(\"./key\"),f=e(\"./signature\");function l(e){if(!(this instanceof l))return new l(e);\"string\"==typeof e&&(u(a.hasOwnProperty(e),\"Unknown curve \"+e),e=a[e]),e instanceof a.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}t.exports=l,l.prototype.keyPair=function(e){return new c(this,e)},l.prototype.keyFromPrivate=function(e,t){return c.fromPrivate(this,e,t)},l.prototype.keyFromPublic=function(e,t){return c.fromPublic(this,e,t)},l.prototype.genKeyPair=function(e){e||(e={});for(var t=new o({hash:this.hash,pers:e.pers,persEnc:e.persEnc||\"utf8\",entropy:e.entropy||s(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||\"utf8\",nonce:this.n.toArray()}),r=this.n.byteLength(),i=this.n.sub(new n(2));;){var a=new n(t.generate(r));if(!(a.cmp(i)>0))return a.iaddn(1),this.keyFromPrivate(a)}},l.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},l.prototype.sign=function(e,t,r,i){\"object\"===_typeof2(r)&&(i=r,r=null),i||(i={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new n(e,16));for(var a=this.n.byteLength(),s=t.getPrivate().toArray(\"be\",a),u=e.toArray(\"be\",a),c=new o({hash:this.hash,entropy:s,nonce:u,pers:i.pers,persEnc:i.persEnc||\"utf8\"}),l=this.n.sub(new n(1)),h=0;;h++){var d=i.k?i.k(h):new n(c.generate(this.n.byteLength()));if(!((d=this._truncateToN(d,!0)).cmpn(1)<=0||d.cmp(l)>=0)){var p=this.g.mul(d);if(!p.isInfinity()){var y=p.getX(),m=y.umod(this.n);if(0!==m.cmpn(0)){var b=d.invm(this.n).mul(m.mul(t.getPrivate()).iadd(e));if(0!==(b=b.umod(this.n)).cmpn(0)){var v=(p.getY().isOdd()?1:0)|(0!==y.cmp(m)?2:0);return i.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),v^=1),new f({r:m,s:b,recoveryParam:v})}}}}}},l.prototype.verify=function(e,t,r,o){e=this._truncateToN(new n(e,16)),r=this.keyFromPublic(r,o);var i=(t=new f(t,\"hex\")).r,a=t.s;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,u=a.invm(this.n),c=u.mul(e).umod(this.n),l=u.mul(i).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(c,r.getPublic(),l)).isInfinity()&&s.eqXToP(i):!(s=this.g.mulAdd(c,r.getPublic(),l)).isInfinity()&&0===s.getX().umod(this.n).cmp(i)},l.prototype.recoverPubKey=function(e,t,r,o){u((3&r)===r,\"The recovery param is more than two bits\"),t=new f(t,o);var i=this.n,a=new n(e),s=t.r,c=t.s,l=1&r,h=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&h)throw new Error(\"Unable to find sencond key candinate\");s=h?this.curve.pointFromX(s.add(this.curve.n),l):this.curve.pointFromX(s,l);var d=t.r.invm(i),p=i.sub(a).mul(d).umod(i),y=c.mul(d).umod(i);return this.g.mulAdd(p,s,y)},l.prototype.getKeyRecoveryParam=function(e,t,r,n){if(null!==(t=new f(t,n)).recoveryParam)return t.recoveryParam;for(var o=0;o<4;o++){var i;try{i=this.recoverPubKey(e,t,o)}catch(e){continue}if(i.eq(r))return o}throw new Error(\"Unable to find valid recovery factor\")}},{\"../curves\":289,\"../utils\":297,\"./key\":291,\"./signature\":292,\"bn.js\":156,brorand:157,\"hmac-drbg\":338}],291:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"../utils\").assert;function i(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}t.exports=i,i.fromPublic=function(e,t,r){return t instanceof i?t:new i(e,{pub:t,pubEnc:r})},i.fromPrivate=function(e,t,r){return t instanceof i?t:new i(e,{priv:t,privEnc:r})},i.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:\"Invalid public key\"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:\"Public key * N != O\"}:{result:!1,reason:\"Public key is not a point\"}},i.prototype.getPublic=function(e,t){return\"string\"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},i.prototype.getPrivate=function(e){return\"hex\"===e?this.priv.toString(16,2):this.priv},i.prototype._importPrivate=function(e,t){this.priv=new n(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},i.prototype._importPublic=function(e,t){if(e.x||e.y)return\"mont\"===this.ec.curve.type?o(e.x,\"Need x coordinate\"):\"short\"!==this.ec.curve.type&&\"edwards\"!==this.ec.curve.type||o(e.x&&e.y,\"Need both x and y coordinate\"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},i.prototype.derive=function(e){return e.mul(this.priv).getX()},i.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},i.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},i.prototype.inspect=function(){return\"<Key priv: \"+(this.priv&&this.priv.toString(16,2))+\" pub: \"+(this.pub&&this.pub.inspect())+\" >\"}},{\"../utils\":297,\"bn.js\":156}],292:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.assert;function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(i(e.r&&e.s,\"Signature without r or s\"),this.r=new n(e.r,16),this.s=new n(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function u(e,t){var r=e[t.place++];if(!(128&r))return r;for(var n=15&r,o=0,i=0,a=t.place;i<n;i++,a++)o<<=8,o|=e[a];return t.place=a,o}function c(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t<r;)t++;return 0===t?e:e.slice(t)}function f(e,t){if(t<128)e.push(t);else{var r=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}t.exports=a,a.prototype._importDER=function(e,t){e=o.toArray(e,t);var r=new s;if(48!==e[r.place++])return!1;if(u(e,r)+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var i=u(e,r),a=e.slice(r.place,i+r.place);if(r.place+=i,2!==e[r.place++])return!1;var c=u(e,r);if(e.length!==c+r.place)return!1;var f=e.slice(r.place,c+r.place);return 0===a[0]&&128&a[1]&&(a=a.slice(1)),0===f[0]&&128&f[1]&&(f=f.slice(1)),this.r=new n(a),this.s=new n(f),this.recoveryParam=null,!0},a.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=c(t),r=c(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];f(n,t.length),(n=n.concat(t)).push(2),f(n,r.length);var i=n.concat(r),a=[48];return f(a,i.length),a=a.concat(i),o.encode(a,e)}},{\"../utils\":297,\"bn.js\":156}],293:[function(e,t,r){var n=e(\"hash.js\"),o=e(\"../curves\"),i=e(\"../utils\"),a=i.assert,s=i.parseBytes,u=e(\"./key\"),c=e(\"./signature\");function f(e){if(a(\"ed25519\"===e,\"only tested with ed25519 so far\"),!(this instanceof f))return new f(e);e=o[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=n.sha512}t.exports=f,f.prototype.sign=function(e,t){e=s(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),o=this.g.mul(n),i=this.encodePoint(o),a=this.hashInt(i,r.pubBytes(),e).mul(r.priv()),u=n.add(a).umod(this.curve.n);return this.makeSignature({R:o,S:u,Rencoded:i})},f.prototype.verify=function(e,t,r){e=s(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),o=this.hashInt(t.Rencoded(),n.pubBytes(),e),i=this.g.mul(t.S());return t.R().add(n.pub().mul(o)).eq(i)},f.prototype.hashInt=function(){for(var e=this.hash(),t=0;t<arguments.length;t++)e.update(arguments[t]);return i.intFromLE(e.digest()).umod(this.curve.n)},f.prototype.keyFromPublic=function(e){return u.fromPublic(this,e)},f.prototype.keyFromSecret=function(e){return u.fromSecret(this,e)},f.prototype.makeSignature=function(e){return e instanceof c?e:new c(this,e)},f.prototype.encodePoint=function(e){var t=e.getY().toArray(\"le\",this.encodingLength);return t[this.encodingLength-1]|=e.getX().isOdd()?128:0,t},f.prototype.decodePoint=function(e){var t=(e=i.parseBytes(e)).length-1,r=e.slice(0,t).concat(-129&e[t]),n=0!=(128&e[t]),o=i.intFromLE(r);return this.curve.pointFromY(o,n)},f.prototype.encodeInt=function(e){return e.toArray(\"le\",this.encodingLength)},f.prototype.decodeInt=function(e){return i.intFromLE(e)},f.prototype.isPoint=function(e){return e instanceof this.pointClass}},{\"../curves\":289,\"../utils\":297,\"./key\":294,\"./signature\":295,\"hash.js\":326}],294:[function(e,t,r){var n=e(\"../utils\"),o=n.assert,i=n.parseBytes,a=n.cachedProperty;function s(e,t){this.eddsa=e,this._secret=i(t.secret),e.isPoint(t.pub)?this._pub=t.pub:this._pubBytes=i(t.pub)}s.fromPublic=function(e,t){return t instanceof s?t:new s(e,{pub:t})},s.fromSecret=function(e,t){return t instanceof s?t:new s(e,{secret:t})},s.prototype.secret=function(){return this._secret},a(s,\"pubBytes\",(function(){return this.eddsa.encodePoint(this.pub())})),a(s,\"pub\",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),a(s,\"privBytes\",(function(){var e=this.eddsa,t=this.hash(),r=e.encodingLength-1,n=t.slice(0,e.encodingLength);return n[0]&=248,n[r]&=127,n[r]|=64,n})),a(s,\"priv\",(function(){return this.eddsa.decodeInt(this.privBytes())})),a(s,\"hash\",(function(){return this.eddsa.hash().update(this.secret()).digest()})),a(s,\"messagePrefix\",(function(){return this.hash().slice(this.eddsa.encodingLength)})),s.prototype.sign=function(e){return o(this._secret,\"KeyPair can only verify\"),this.eddsa.sign(e,this)},s.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},s.prototype.getSecret=function(e){return o(this._secret,\"KeyPair is public only\"),n.encode(this.secret(),e)},s.prototype.getPublic=function(e){return n.encode(this.pubBytes(),e)},t.exports=s},{\"../utils\":297}],295:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.assert,a=o.cachedProperty,s=o.parseBytes;function u(e,t){this.eddsa=e,\"object\"!==_typeof2(t)&&(t=s(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),i(t.R&&t.S,\"Signature without R or S\"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof n&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}a(u,\"S\",(function(){return this.eddsa.decodeInt(this.Sencoded())})),a(u,\"R\",(function(){return this.eddsa.decodePoint(this.Rencoded())})),a(u,\"Rencoded\",(function(){return this.eddsa.encodePoint(this.R())})),a(u,\"Sencoded\",(function(){return this.eddsa.encodeInt(this.S())})),u.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},u.prototype.toHex=function(){return o.encode(this.toBytes(),\"hex\").toUpperCase()},t.exports=u},{\"../utils\":297,\"bn.js\":156}],296:[function(e,t,r){t.exports={doubles:{step:4,points:[[\"e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a\",\"f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821\"],[\"8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508\",\"11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf\"],[\"175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739\",\"d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695\"],[\"363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640\",\"4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9\"],[\"8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c\",\"4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36\"],[\"723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda\",\"96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f\"],[\"eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa\",\"5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999\"],[\"100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0\",\"cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09\"],[\"e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d\",\"9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d\"],[\"feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d\",\"e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088\"],[\"da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1\",\"9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d\"],[\"53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0\",\"5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8\"],[\"8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047\",\"10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a\"],[\"385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862\",\"283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453\"],[\"6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7\",\"7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160\"],[\"3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd\",\"56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0\"],[\"85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83\",\"7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6\"],[\"948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a\",\"53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589\"],[\"6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8\",\"bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17\"],[\"e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d\",\"4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda\"],[\"e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725\",\"7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd\"],[\"213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754\",\"4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2\"],[\"4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c\",\"17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6\"],[\"fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6\",\"6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f\"],[\"76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39\",\"c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01\"],[\"c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891\",\"893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3\"],[\"d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b\",\"febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f\"],[\"b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03\",\"2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7\"],[\"e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d\",\"eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78\"],[\"a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070\",\"7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1\"],[\"90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4\",\"e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150\"],[\"8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da\",\"662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82\"],[\"e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11\",\"1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc\"],[\"8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e\",\"efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b\"],[\"e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41\",\"2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51\"],[\"b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef\",\"67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45\"],[\"d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8\",\"db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120\"],[\"324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d\",\"648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84\"],[\"4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96\",\"35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d\"],[\"9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd\",\"ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d\"],[\"6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5\",\"9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8\"],[\"a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266\",\"40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8\"],[\"7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71\",\"34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac\"],[\"928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac\",\"c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f\"],[\"85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751\",\"1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962\"],[\"ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e\",\"493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907\"],[\"827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241\",\"c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec\"],[\"eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3\",\"be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d\"],[\"e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f\",\"4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414\"],[\"1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19\",\"aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd\"],[\"146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be\",\"b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0\"],[\"fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9\",\"6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811\"],[\"da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2\",\"8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1\"],[\"a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13\",\"7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c\"],[\"174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c\",\"ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73\"],[\"959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba\",\"2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd\"],[\"d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151\",\"e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405\"],[\"64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073\",\"d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589\"],[\"8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458\",\"38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e\"],[\"13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b\",\"69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27\"],[\"bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366\",\"d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1\"],[\"8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa\",\"40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482\"],[\"8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0\",\"620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945\"],[\"dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787\",\"7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573\"],[\"f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e\",\"ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82\"]]},naf:{wnd:7,points:[[\"f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9\",\"388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672\"],[\"2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4\",\"d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6\"],[\"5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc\",\"6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da\"],[\"acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe\",\"cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37\"],[\"774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb\",\"d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b\"],[\"f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8\",\"ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81\"],[\"d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e\",\"581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58\"],[\"defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34\",\"4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77\"],[\"2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c\",\"85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a\"],[\"352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5\",\"321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c\"],[\"2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f\",\"2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67\"],[\"9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714\",\"73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402\"],[\"daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729\",\"a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55\"],[\"c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db\",\"2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482\"],[\"6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4\",\"e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82\"],[\"1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5\",\"b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396\"],[\"605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479\",\"2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49\"],[\"62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d\",\"80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf\"],[\"80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f\",\"1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a\"],[\"7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb\",\"d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7\"],[\"d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9\",\"eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933\"],[\"49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963\",\"758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a\"],[\"77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74\",\"958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6\"],[\"f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530\",\"e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37\"],[\"463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b\",\"5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e\"],[\"f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247\",\"cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6\"],[\"caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1\",\"cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476\"],[\"2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120\",\"4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40\"],[\"7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435\",\"91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61\"],[\"754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18\",\"673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683\"],[\"e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8\",\"59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5\"],[\"186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb\",\"3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b\"],[\"df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f\",\"55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417\"],[\"5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143\",\"efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868\"],[\"290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba\",\"e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a\"],[\"af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45\",\"f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6\"],[\"766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a\",\"744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996\"],[\"59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e\",\"c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e\"],[\"f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8\",\"e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d\"],[\"7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c\",\"30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2\"],[\"948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519\",\"e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e\"],[\"7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab\",\"100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437\"],[\"3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca\",\"ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311\"],[\"d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf\",\"8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4\"],[\"1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610\",\"68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575\"],[\"733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4\",\"f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d\"],[\"15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c\",\"d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d\"],[\"a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940\",\"edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629\"],[\"e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980\",\"a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06\"],[\"311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3\",\"66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374\"],[\"34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf\",\"9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee\"],[\"f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63\",\"4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1\"],[\"d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448\",\"fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b\"],[\"32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf\",\"5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661\"],[\"7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5\",\"8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6\"],[\"ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6\",\"8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e\"],[\"16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5\",\"5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d\"],[\"eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99\",\"f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc\"],[\"78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51\",\"f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4\"],[\"494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5\",\"42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c\"],[\"a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5\",\"204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b\"],[\"c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997\",\"4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913\"],[\"841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881\",\"73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154\"],[\"5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5\",\"39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865\"],[\"36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66\",\"d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc\"],[\"336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726\",\"ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224\"],[\"8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede\",\"6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e\"],[\"1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94\",\"60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6\"],[\"85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31\",\"3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511\"],[\"29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51\",\"b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b\"],[\"a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252\",\"ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2\"],[\"4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5\",\"cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c\"],[\"d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b\",\"6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3\"],[\"ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4\",\"322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d\"],[\"af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f\",\"6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700\"],[\"e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889\",\"2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4\"],[\"591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246\",\"b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196\"],[\"11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984\",\"998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4\"],[\"3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a\",\"b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257\"],[\"cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030\",\"bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13\"],[\"c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197\",\"6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096\"],[\"c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593\",\"c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38\"],[\"a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef\",\"21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f\"],[\"347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38\",\"60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448\"],[\"da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a\",\"49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a\"],[\"c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111\",\"5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4\"],[\"4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502\",\"7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437\"],[\"3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea\",\"be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7\"],[\"cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26\",\"8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d\"],[\"b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986\",\"39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a\"],[\"d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e\",\"62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54\"],[\"48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4\",\"25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77\"],[\"dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda\",\"ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517\"],[\"6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859\",\"cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10\"],[\"e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f\",\"f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125\"],[\"eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c\",\"6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e\"],[\"13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942\",\"fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1\"],[\"ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a\",\"1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2\"],[\"b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80\",\"5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423\"],[\"ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d\",\"438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8\"],[\"8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1\",\"cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758\"],[\"52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63\",\"c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375\"],[\"e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352\",\"6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d\"],[\"7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193\",\"ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec\"],[\"5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00\",\"9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0\"],[\"32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58\",\"ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c\"],[\"e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7\",\"d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4\"],[\"8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8\",\"c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f\"],[\"4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e\",\"67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649\"],[\"3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d\",\"cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826\"],[\"674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b\",\"299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5\"],[\"d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f\",\"f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87\"],[\"30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6\",\"462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b\"],[\"be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297\",\"62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc\"],[\"93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a\",\"7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c\"],[\"b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c\",\"ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f\"],[\"d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52\",\"4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a\"],[\"d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb\",\"bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46\"],[\"463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065\",\"bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f\"],[\"7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917\",\"603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03\"],[\"74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9\",\"cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08\"],[\"30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3\",\"553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8\"],[\"9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57\",\"712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373\"],[\"176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66\",\"ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3\"],[\"75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8\",\"9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8\"],[\"809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721\",\"9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1\"],[\"1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180\",\"4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9\"]]}}},{}],297:[function(e,t,r){var n=r,o=e(\"bn.js\"),i=e(\"minimalistic-assert\"),a=e(\"minimalistic-crypto-utils\");n.assert=i,n.toArray=a.toArray,n.zero2=a.zero2,n.toHex=a.toHex,n.encode=a.encode,n.getNAF=function(e,t){for(var r=[],n=1<<t+1,o=e.clone();o.cmpn(1)>=0;){var i;if(o.isOdd()){var a=o.andln(n-1);i=a>(n>>1)-1?(n>>1)-a:a,o.isubn(i)}else i=0;r.push(i);for(var s=0!==o.cmpn(0)&&0===o.andln(n-1)?t+1:1,u=1;u<s;u++)r.push(0);o.iushrn(s)}return r},n.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var n=0,o=0;e.cmpn(-n)>0||t.cmpn(-o)>0;){var i,a,s,u=e.andln(3)+n&3,c=t.andln(3)+o&3;if(3===u&&(u=-1),3===c&&(c=-1),0==(1&u))i=0;else i=3!==(s=e.andln(7)+n&7)&&5!==s||2!==c?u:-u;if(r[0].push(i),0==(1&c))a=0;else a=3!==(s=t.andln(7)+o&7)&&5!==s||2!==u?c:-c;r[1].push(a),2*n===i+1&&(n=1-n),2*o===a+1&&(o=1-o),e.iushrn(1),t.iushrn(1)}return r},n.cachedProperty=function(e,t,r){var n=\"_\"+t;e.prototype[t]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(e){return\"string\"==typeof e?n.toArray(e,\"hex\"):e},n.intFromLE=function(e){return new o(e,\"hex\",\"le\")}},{\"bn.js\":156,\"minimalistic-assert\":390,\"minimalistic-crypto-utils\":391}],298:[function(e,t,r){t.exports={_from:\"elliptic@^6.0.0\",_id:\"elliptic@6.5.0\",_inBundle:!1,_integrity:\"sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==\",_location:\"/elliptic\",_phantomChildren:{},_requested:{type:\"range\",registry:!0,raw:\"elliptic@^6.0.0\",name:\"elliptic\",escapedName:\"elliptic\",rawSpec:\"^6.0.0\",saveSpec:null,fetchSpec:\"^6.0.0\"},_requiredBy:[\"/browserify-sign\",\"/create-ecdh\"],_resolved:\"https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz\",_shasum:\"2b8ed4c891b7de3200e14412a5b8248c7af505ca\",_spec:\"elliptic@^6.0.0\",_where:\"/mnt/d/dev/git/exceljs/node_modules/browserify-sign\",author:{name:\"Fedor Indutny\",email:\"fedor@indutny.com\"},bugs:{url:\"https://github.com/indutny/elliptic/issues\"},bundleDependencies:!1,dependencies:{\"bn.js\":\"^4.4.0\",brorand:\"^1.0.1\",\"hash.js\":\"^1.0.0\",\"hmac-drbg\":\"^1.0.0\",inherits:\"^2.0.1\",\"minimalistic-assert\":\"^1.0.0\",\"minimalistic-crypto-utils\":\"^1.0.0\"},deprecated:!1,description:\"EC cryptography\",devDependencies:{brfs:\"^1.4.3\",coveralls:\"^2.11.3\",grunt:\"^0.4.5\",\"grunt-browserify\":\"^5.0.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-connect\":\"^1.0.0\",\"grunt-contrib-copy\":\"^1.0.0\",\"grunt-contrib-uglify\":\"^1.0.1\",\"grunt-mocha-istanbul\":\"^3.0.1\",\"grunt-saucelabs\":\"^8.6.2\",istanbul:\"^0.4.2\",jscs:\"^2.9.0\",jshint:\"^2.6.0\",mocha:\"^2.1.0\"},files:[\"lib\"],homepage:\"https://github.com/indutny/elliptic\",keywords:[\"EC\",\"Elliptic\",\"curve\",\"Cryptography\"],license:\"MIT\",main:\"lib/elliptic.js\",name:\"elliptic\",repository:{type:\"git\",url:\"git+ssh://git@github.com/indutny/elliptic.git\"},scripts:{jscs:\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",jshint:\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",lint:\"npm run jscs && npm run jshint\",test:\"npm run lint && npm run unit\",unit:\"istanbul test _mocha --reporter=spec test/index.js\",version:\"grunt dist && git add dist/\"},version:\"6.5.0\"}},{}],299:[function(e,t,r){var n=Object.create||function(e){var t=function(){};return t.prototype=e,new t},o=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return r},i=Function.prototype.bind||function(e){var t=this;return function(){return t.apply(e,arguments)}};function a(){this._events&&Object.prototype.hasOwnProperty.call(this,\"_events\")||(this._events=n(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}t.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._maxListeners=void 0;var s,u=10;try{var c={};Object.defineProperty&&Object.defineProperty(c,\"x\",{value:0}),s=0===c.x}catch(e){s=!1}function f(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function l(e,t,r){if(t)e.call(r);else for(var n=e.length,o=_(e,n),i=0;i<n;++i)o[i].call(r)}function h(e,t,r,n){if(t)e.call(r,n);else for(var o=e.length,i=_(e,o),a=0;a<o;++a)i[a].call(r,n)}function d(e,t,r,n,o){if(t)e.call(r,n,o);else for(var i=e.length,a=_(e,i),s=0;s<i;++s)a[s].call(r,n,o)}function p(e,t,r,n,o,i){if(t)e.call(r,n,o,i);else for(var a=e.length,s=_(e,a),u=0;u<a;++u)s[u].call(r,n,o,i)}function y(e,t,r,n){if(t)e.apply(r,n);else for(var o=e.length,i=_(e,o),a=0;a<o;++a)i[a].apply(r,n)}function m(e,t,r,o){var i,a,s;if(\"function\"!=typeof r)throw new TypeError('\"listener\" argument must be a function');if((a=e._events)?(a.newListener&&(e.emit(\"newListener\",t,r.listener?r.listener:r),a=e._events),s=a[t]):(a=e._events=n(null),e._eventsCount=0),s){if(\"function\"==typeof s?s=a[t]=o?[r,s]:[s,r]:o?s.unshift(r):s.push(r),!s.warned&&(i=f(e))&&i>0&&s.length>i){s.warned=!0;var u=new Error(\"Possible EventEmitter memory leak detected. \"+s.length+' \"'+String(t)+'\" listeners added. Use emitter.setMaxListeners() to increase limit.');u.name=\"MaxListenersExceededWarning\",u.emitter=e,u.type=t,u.count=s.length,\"object\"===(\"undefined\"==typeof console?\"undefined\":_typeof2(console))&&console.warn&&console.warn(\"%s: %s\",u.name,u.message)}}else s=a[t]=r,++e._eventsCount;return e}function b(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t<e.length;++t)e[t]=arguments[t];this.listener.apply(this.target,e)}}function v(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},o=i.call(b,n);return o.listener=r,n.wrapFn=o,o}function g(e,t,r){var n=e._events;if(!n)return[];var o=n[t];return o?\"function\"==typeof o?r?[o.listener||o]:[o]:r?function(e){for(var t=new Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(o):_(o,o.length):[]}function w(e){var t=this._events;if(t){var r=t[e];if(\"function\"==typeof r)return 1;if(r)return r.length}return 0}function _(e,t){for(var r=new Array(t),n=0;n<t;++n)r[n]=e[n];return r}s?Object.defineProperty(a,\"defaultMaxListeners\",{enumerable:!0,get:function(){return u},set:function(e){if(\"number\"!=typeof e||e<0||e!=e)throw new TypeError('\"defaultMaxListeners\" must be a positive number');u=e}}):a.defaultMaxListeners=u,a.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||isNaN(e))throw new TypeError('\"n\" argument must be a positive number');return this._maxListeners=e,this},a.prototype.getMaxListeners=function(){return f(this)},a.prototype.emit=function(e){var t,r,n,o,i,a,s=\"error\"===e;if(a=this._events)s=s&&null==a.error;else if(!s)return!1;if(s){if(arguments.length>1&&(t=arguments[1]),t instanceof Error)throw t;var u=new Error('Unhandled \"error\" event. ('+t+\")\");throw u.context=t,u}if(!(r=a[e]))return!1;var c=\"function\"==typeof r;switch(n=arguments.length){case 1:l(r,c,this);break;case 2:h(r,c,this,arguments[1]);break;case 3:d(r,c,this,arguments[1],arguments[2]);break;case 4:p(r,c,this,arguments[1],arguments[2],arguments[3]);break;default:for(o=new Array(n-1),i=1;i<n;i++)o[i-1]=arguments[i];y(r,c,this,o)}return!0},a.prototype.addListener=function(e,t){return m(this,e,t,!1)},a.prototype.on=a.prototype.addListener,a.prototype.prependListener=function(e,t){return m(this,e,t,!0)},a.prototype.once=function(e,t){if(\"function\"!=typeof t)throw new TypeError('\"listener\" argument must be a function');return this.on(e,v(this,e,t)),this},a.prototype.prependOnceListener=function(e,t){if(\"function\"!=typeof t)throw new TypeError('\"listener\" argument must be a function');return this.prependListener(e,v(this,e,t)),this},a.prototype.removeListener=function(e,t){var r,o,i,a,s;if(\"function\"!=typeof t)throw new TypeError('\"listener\" argument must be a function');if(!(o=this._events))return this;if(!(r=o[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=n(null):(delete o[e],o.removeListener&&this.emit(\"removeListener\",e,r.listener||t));else if(\"function\"!=typeof r){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){s=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(e,t){for(var r=t,n=r+1,o=e.length;n<o;r+=1,n+=1)e[r]=e[n];e.pop()}(r,i),1===r.length&&(o[e]=r[0]),o.removeListener&&this.emit(\"removeListener\",e,s||t)}return this},a.prototype.removeAllListeners=function(e){var t,r,i;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=n(null),this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=n(null):delete r[e]),this;if(0===arguments.length){var a,s=o(r);for(i=0;i<s.length;++i)\"removeListener\"!==(a=s[i])&&this.removeAllListeners(a);return this.removeAllListeners(\"removeListener\"),this._events=n(null),this._eventsCount=0,this}if(\"function\"==typeof(t=r[e]))this.removeListener(e,t);else if(t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},a.prototype.listeners=function(e){return g(this,e,!0)},a.prototype.rawListeners=function(e){return g(this,e,!1)},a.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):w.call(e,t)},a.prototype.listenerCount=w,a.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],300:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"md5.js\");t.exports=function(e,t,r,i){if(n.isBuffer(e)||(e=n.from(e,\"binary\")),t&&(n.isBuffer(t)||(t=n.from(t,\"binary\")),8!==t.length))throw new RangeError(\"salt should be Buffer with 8 byte length\");for(var a=r/8,s=n.alloc(a),u=n.alloc(i||0),c=n.alloc(0);a>0||i>0;){var f=new o;f.update(c),f.update(e),t&&f.update(t),c=f.digest();var l=0;if(a>0){var h=s.length-a;l=Math.min(a,c.length),c.copy(s,h,0,l),a-=l}if(l<c.length&&i>0){var d=u.length-i,p=Math.min(i,c.length-l);c.copy(u,d,l,l+p),i-=p}}return c.fill(0),{key:s,iv:u}}},{\"md5.js\":388,\"safe-buffer\":445}],301:[function(e,t,r){(function(t){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function a(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function u(e,t){return(u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var c=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var f=e(\"stream\"),l=c(e(\"./formatter/RowFormatter\")),h=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}(d,e);var r,n,c,f,h=(r=d,function(){var e,t=s(r);if(a()){var n=s(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return i(this,e)});function d(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,d),(t=h.call(this,{objectMode:e.objectMode})).hasWrittenBOM=!1,t.formatterOptions=e,t.rowFormatter=new l.default(e),t.hasWrittenBOM=!e.writeBOM,t}return n=d,(c=[{key:\"transform\",value:function(e){return this.rowFormatter.rowTransform=e,this}},{key:\"_transform\",value:function(e,r,n){var o=this,i=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(e,(function(e,r){return e?(i=!0,n(e)):(r&&r.forEach((function(e){o.push(t.from(e,\"utf8\"))})),i=!0,n())}))}catch(e){if(i)throw e;n(e)}}},{key:\"_flush\",value:function(e){var r=this;this.rowFormatter.finish((function(n,o){return n?e(n):(o&&o.forEach((function(e){r.push(t.from(e,\"utf8\"))})),e())}))}}])&&o(n.prototype,c),f&&o(n,f),d}(f.Transform);r.default=h}).call(this,e(\"buffer\").Buffer)},{\"./formatter/RowFormatter\":304,buffer:188,stream:456}],302:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(r,\"__esModule\",{value:!0});r.FormatterOptions=function e(){var t,r,o,i,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};n(this,e),this.objectMode=!0,this.delimiter=\",\",this.rowDelimiter=\"\\n\",this.quote='\"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.transform=null,this.writeBOM=!1,this.BOM=\"\\ufeff\",this.alwaysWriteHeaders=!1,Object.assign(this,a||{}),void 0===(null===(t=a)||void 0===t?void 0:t.quoteHeaders)&&(this.quoteHeaders=this.quoteColumns),!0===(null===(r=a)||void 0===r?void 0:r.quote)?this.quote='\"':!1===(null===(o=a)||void 0===o?void 0:o.quote)&&(this.quote=\"\"),\"string\"!=typeof(null===(i=a)||void 0===i?void 0:i.escape)&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers,this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=\"\".concat(this.escape).concat(this.quote)}},{}],303:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=o(e(\"lodash.isboolean\")),a=o(e(\"lodash.isnil\")),s=o(e(\"lodash.escaperegexp\")),u=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._headers=null,this.formatterOptions=t,null!==t.headers&&(this.headers=t.headers),this.REPLACE_REGEXP=new RegExp(t.quote,\"g\");var r=\"[\".concat(t.delimiter).concat(s.default(t.rowDelimiter),\"']\");this.ESCAPE_REGEXP=new RegExp(r)}var t,r,o;return t=e,(r=[{key:\"shouldQuote\",value:function(e,t){var r=t?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return i.default(r)?r:Array.isArray(r)?r[e]:null!==this._headers&&r[this._headers[e]]}},{key:\"format\",value:function(e,t,r){var n=\"\".concat(a.default(e)?\"\":e).replace(/\\0/g,\"\"),o=this.formatterOptions;return\"\"!==o.quote&&-1!==n.indexOf(o.quote)?this.quoteField(n.replace(this.REPLACE_REGEXP,o.escapedQuote)):-1!==n.search(this.ESCAPE_REGEXP)||this.shouldQuote(t,r)?this.quoteField(n):n}},{key:\"quoteField\",value:function(e){var t=this.formatterOptions.quote;return\"\".concat(t).concat(e).concat(t)}},{key:\"headers\",set:function(e){this._headers=e}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=u},{\"lodash.escaperegexp\":380,\"lodash.isboolean\":382,\"lodash.isnil\":385}],304:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=o(e(\"lodash.isfunction\")),a=o(e(\"lodash.isequal\")),s=o(e(\"./FieldFormatter\")),u=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.rowCount=0,this.formatterOptions=t,this.fieldFormatter=new s.default(t),this._rowTransform=null,this.headers=t.headers,this.shouldWriteHeaders=t.shouldWriteHeaders,this.hasWrittenHeaders=!1,null!==this.headers&&(this.fieldFormatter.headers=this.headers),null!==t.transform&&(this.rowTransform=t.transform)}var t,r,o;return t=e,o=[{key:\"isHashArray\",value:function(e){return!!Array.isArray(e)&&Array.isArray(e[0])&&2===e[0].length}},{key:\"gatherHeaders\",value:function(t){return e.isHashArray(t)?t.map((function(e){return e[0]})):Array.isArray(t)?t:Object.keys(t)}},{key:\"createTransform\",value:function(e){return 1===e.length?function(t,r){var n=null;try{n=e(t)}catch(e){return r(e)}return r(null,n)}:function(t,r){e(t,r)}}}],(r=[{key:\"format\",value:function(e,t){var r=this;this.callTransformer(e,(function(n,o){if(n)return t(n);if(!e)return t(null);var i=[];if(o){var a=r.checkHeaders(o),s=a.shouldFormatColumns,u=a.headers;if(r.shouldWriteHeaders&&u&&!r.hasWrittenHeaders&&(i.push(r.formatColumns(u,!0)),r.hasWrittenHeaders=!0),s){var c=r.gatherColumns(o);i.push(r.formatColumns(c,!1))}}return t(null,i)}))}},{key:\"finish\",value:function(e){var t=[];if(this.formatterOptions.alwaysWriteHeaders&&0===this.rowCount){if(!this.headers)return e(new Error(\"`alwaysWriteHeaders` option is set to true but `headers` option not provided.\"));t.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&t.push(this.formatterOptions.rowDelimiter),e(null,t)}},{key:\"checkHeaders\",value:function(t){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};var r=e.gatherHeaders(t);return this.headers=r,this.fieldFormatter.headers=r,this.shouldWriteHeaders?{shouldFormatColumns:!a.default(r,t),headers:r}:{shouldFormatColumns:!0,headers:null}}},{key:\"gatherColumns\",value:function(t){if(null===this.headers)throw new Error(\"Headers is currently null\");return Array.isArray(t)?e.isHashArray(t)?this.headers.map((function(e,r){var n=t[r];return n?n[1]:\"\"})):this.headers.map((function(e,r){return t[r]})):this.headers.map((function(e){return t[e]}))}},{key:\"callTransformer\",value:function(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}},{key:\"formatColumns\",value:function(e,t){var r=this,n=e.map((function(e,n){return r.fieldFormatter.format(e,n,t)})).join(this.formatterOptions.delimiter),o=this.rowCount;return this.rowCount+=1,o?[this.formatterOptions.rowDelimiter,n].join(\"\"):n}},{key:\"rowTransform\",set:function(t){if(!i.default(t))throw new TypeError(\"The transform should be a function\");this._rowTransform=e.createTransform(t)}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=u},{\"./FieldFormatter\":303,\"lodash.isequal\":383,\"lodash.isfunction\":384}],305:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"./RowFormatter\");r.RowFormatter=n.default;var o=e(\"./FieldFormatter\");r.FieldFormatter=o.default},{\"./FieldFormatter\":303,\"./RowFormatter\":304}],306:[function(e,t,r){(function(t){function n(e){for(var t in e)r.hasOwnProperty(t)||(r[t]=e[t])}var o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t},i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var a=e(\"util\"),s=e(\"stream\"),u=o(e(\"fs\")),c=e(\"./FormatterOptions\"),f=i(e(\"./CsvFormatterStream\")),l=e(\"./CsvFormatterStream\");r.CsvFormatterStream=l.default,n(e(\"./FormatterOptions\")),n(e(\"./formatter\")),r.format=function(e){return new f.default(new c.FormatterOptions(e))},r.write=function(e,t){var n=r.format(t),o=a.promisify((function(e,t){n.write(e,void 0,t)}));return e.reduce((function(e,t){return e.then((function(){return o(t)}))}),Promise.resolve()).then((function(){return n.end()})).catch((function(e){n.emit(\"error\",e)})),n},r.writeToStream=function(e,t,n){return r.write(t,n).pipe(e)},r.writeToBuffer=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=[],i=new s.Writable({write:function(e,t,r){o.push(e),r()}});return new Promise((function(a,s){i.on(\"error\",s).on(\"finish\",(function(){return a(t.concat(o))})),r.write(e,n).pipe(i)}))},r.writeToString=function(e,t){return r.writeToBuffer(e,t).then((function(e){return e.toString()}))},r.writeToPath=function(e,t,n){var o=u.createWriteStream(e,{encoding:\"utf8\"});return r.write(t,n).pipe(o)}}).call(this,e(\"buffer\").Buffer)},{\"./CsvFormatterStream\":301,\"./FormatterOptions\":302,\"./formatter\":305,buffer:188,fs:186,stream:456,util:475}],307:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"util\"),o=e(\"./parser\"),i=e(\"./formatter\");r.format=i.format,r.write=i.write,r.writeToStream=i.writeToStream,r.writeToBuffer=i.writeToBuffer,r.writeToString=i.writeToString,r.writeToPath=i.writeToPath;var a=e(\"./parser\");r.parse=a.parse,r.parseString=a.parseString,r.parseStream=a.parseStream,r.parseFile=a.parseFile,r.fromString=n.deprecate(o.parseString,\"csv.fromString has been deprecated in favor of csv.parseString\"),r.fromStream=n.deprecate(o.parseStream,\"csv.fromStream has been deprecated in favor of csv.parseStream\"),r.fromPath=n.deprecate(o.parseFile,\"csv.fromPath has been deprecated in favor of csv.parseFile\")},{\"./formatter\":306,\"./parser\":310,util:475}],308:[function(e,t,r){(function(t){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function i(e,t,r){return(i=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=u(e)););return e}(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(r):o.value}})(e,t,r||e)}function a(e,t){return!t||\"object\"!==n(t)&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}function s(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}Object.defineProperty(r,\"__esModule\",{value:!0});var f=e(\"string_decoder\"),l=e(\"stream\"),h=e(\"./transforms\"),d=e(\"./parser\"),p=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(m,e);var r,n,l,p,y=(r=m,function(){var e,t=u(r);if(s()){var n=u(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return a(this,e)});function m(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,m),(t=y.call(this,{objectMode:e.objectMode})).lines=\"\",t.rowCount=0,t.parsedRowCount=0,t.parsedLineCount=0,t.endEmitted=!1,t.parserOptions=e,t.parser=new d.Parser(e),t.headerTransformer=new h.HeaderTransformer(e),t.decoder=new f.StringDecoder(e.encoding),t.rowTransformerValidator=new h.RowTransformerValidator,t}return n=m,(l=[{key:\"transform\",value:function(e){return this.rowTransformerValidator.rowTransform=e,this}},{key:\"validate\",value:function(e){return this.rowTransformerValidator.rowValidator=e,this}},{key:\"emit\",value:function(e){var t;if(\"end\"===e)return this.endEmitted||(this.endEmitted=!0,i(u(m.prototype),\"emit\",this).call(this,\"end\",this.rowCount)),!1;for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;o<r;o++)n[o-1]=arguments[o];return(t=i(u(m.prototype),\"emit\",this)).call.apply(t,[this,e].concat(n))}},{key:\"_transform\",value:function(e,t,r){if(this.hasHitRowLimit)return r();try{var n=this.lines+this.decoder.write(e),o=this.parse(n,!0);return this.processRows(o,r)}catch(e){return this.destroy(e)}}},{key:\"_flush\",value:function(e){if(this.hasHitRowLimit)return e();try{var t=this.lines+this.decoder.end(),r=this.parse(t,!1);return this.processRows(r,e)}catch(t){return e(t)}}},{key:\"parse\",value:function(e,t){if(!e)return[];var r=this.parser.parse(e,t),n=r.line,o=r.rows;return this.lines=n,o}},{key:\"processRows\",value:function(e,r){var n=this,o=e.length;!function i(a){var s=function(e){return e?n.destroy(e):a%100!=0?i(a+1):void t((function(){return i(a+1)}))};if(a>=o||n.hasHitRowLimit)return r();if(n.parsedLineCount+=1,n.shouldSkipLine)return s();var u=e[a];n.rowCount+=1,n.parsedRowCount+=1;var c=n.rowCount;return n.transformRow(u,(function(e,t){if(e)return n.rowCount-=1,s(e);if(!t)return s(new Error(\"expected transform result\"));if(t.isValid){if(t.row)return n.pushRow(t.row,s)}else n.emit(\"data-invalid\",t.row,c,t.reason);return s()}))}(0)}},{key:\"transformRow\",value:function(e,t){var r=this;try{this.headerTransformer.transform(e,(function(n,o){return n?t(n):o?o.isValid?o.row?r.shouldEmitRows?r.rowTransformerValidator.transformAndValidate(o.row,t):(r.rowCount-=1,t(null,{row:null,isValid:!0})):(r.rowCount-=1,r.parsedRowCount-=1,t(null,{row:null,isValid:!0})):t(null,{isValid:!1,row:e}):t(new Error(\"Expected result from header transform\"))}))}catch(e){t(e)}}},{key:\"pushRow\",value:function(e,t){try{this.parserOptions.objectMode?this.push(e):this.push(JSON.stringify(e)),t()}catch(e){t(e)}}},{key:\"hasHitRowLimit\",get:function(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}},{key:\"shouldEmitRows\",get:function(){return this.parsedRowCount>this.parserOptions.skipRows}},{key:\"shouldSkipLine\",get:function(){return this.parsedLineCount<=this.parserOptions.skipLines}}])&&o(n.prototype,l),p&&o(n,p),m}(l.Transform);r.default=p}).call(this,e(\"timers\").setImmediate)},{\"./parser\":320,\"./transforms\":323,stream:456,string_decoder:470,timers:471}],309:[function(e,t,r){var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var o=n(e(\"lodash.escaperegexp\")),i=n(e(\"lodash.isnil\"));r.ParserOptions=function e(t){var r;if(function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.objectMode=!0,this.delimiter=\",\",this.ignoreEmpty=!1,this.quote='\"',this.escape=null,this.escapeChar=this.quote,this.comment=null,this.supportsComments=!1,this.ltrim=!1,this.rtrim=!1,this.trim=!1,this.headers=null,this.renameHeaders=!1,this.strictColumnHandling=!1,this.discardUnmappedColumns=!1,this.carriageReturn=\"\\r\",this.encoding=\"utf8\",this.limitRows=!1,this.maxRows=0,this.skipLines=0,this.skipRows=0,Object.assign(this,t||{}),this.delimiter.length>1)throw new Error(\"delimiter option must be one character long\");this.escapedDelimiter=o.default(this.delimiter),this.escapeChar=null!=(r=this.escape)?r:this.quote,this.supportsComments=!i.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(\"([^\\\\s]|\\\\r\\\\n|\\\\n|\\\\r|\".concat(this.escapedDelimiter,\")\")),this.maxRows>0&&(this.limitRows=!0)}},{\"lodash.escaperegexp\":380,\"lodash.isnil\":385}],310:[function(e,t,r){function n(e){for(var t in e)r.hasOwnProperty(t)||(r[t]=e[t])}var o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t},i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var a=o(e(\"fs\")),s=e(\"stream\"),u=e(\"./ParserOptions\"),c=i(e(\"./CsvParserStream\")),f=e(\"./CsvParserStream\");r.CsvParserStream=f.default,n(e(\"./types\")),n(e(\"./ParserOptions\")),n(e(\"./parser\")),n(e(\"./transforms\")),r.parse=function(e){return new c.default(new u.ParserOptions(e))},r.parseStream=function(e,t){return e.pipe(new c.default(new u.ParserOptions(t)))},r.parseFile=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a.createReadStream(e).pipe(new c.default(new u.ParserOptions(t)))},r.parseString=function(e,t){var r=new s.Readable;return r.push(e),r.push(null),r.pipe(new c.default(new u.ParserOptions(t)))}},{\"./CsvParserStream\":308,\"./ParserOptions\":309,\"./parser\":320,\"./transforms\":323,\"./types\":324,fs:186,stream:456}],311:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=e(\"./Scanner\"),a=o(e(\"./RowParser\")),s=e(\"./Token\"),u=/^\\s*(?:''|\"\")?\\s*(?:,\\s*(?:''|\"\")?\\s*)*$/,c=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.parserOptions=t,this.rowParser=new a.default(this.parserOptions)}var t,r,o;return t=e,o=[{key:\"removeBOM\",value:function(e){return e&&65279===e.charCodeAt(0)?e.slice(1):e}}],(r=[{key:\"parse\",value:function(t,r){var n=new i.Scanner({line:e.removeBOM(t),parserOptions:this.parserOptions,hasMoreData:r});return this.parserOptions.supportsComments?this.parseWithComments(n):this.parseWithoutComments(n)}},{key:\"parseWithoutComments\",value:function(e){for(var t=[],r=!0;r;)r=this.parseRow(e,t);return{line:e.line,rows:t}}},{key:\"parseWithComments\",value:function(e){for(var t=this.parserOptions,r=[],n=e.nextCharacterToken;null!==n;n=e.nextCharacterToken)if(s.Token.isTokenComment(n,t)){if(null===e.advancePastLine())return{line:e.lineFromCursor,rows:r};if(!e.hasMoreCharacters)return{line:e.lineFromCursor,rows:r};e.truncateToCursor()}else if(!this.parseRow(e,r))break;return{line:e.line,rows:r}}},{key:\"parseRow\",value:function(e,t){if(!e.nextNonSpaceToken)return!1;var r=this.rowParser.parse(e);return null!==r&&(this.parserOptions.ignoreEmpty&&u.test(r.join(\"\"))||t.push(r),!0)}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=c},{\"./RowParser\":312,\"./Scanner\":313,\"./Token\":314}],312:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}Object.defineProperty(r,\"__esModule\",{value:!0});var o=e(\"./column\"),i=e(\"./Token\").Token,a=i.isTokenRowDelimiter,s=i.isTokenCarriageReturn,u=i.isTokenDelimiter,c=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.parserOptions=t,this.columnParser=new o.ColumnParser(t)}var t,r,i;return t=e,(r=[{key:\"parse\",value:function(e){for(var t=this.parserOptions,r=e.hasMoreData,n=e,o=[],i=this.getStartToken(n,o);i;){if(a(i))return n.advancePastToken(i),!n.hasMoreCharacters&&s(i,t)&&r?null:(n.truncateToCursor(),o);if(!this.shouldSkipColumnParse(n,i,o)){var u=this.columnParser.parse(n);if(null===u)return null;o.push(u)}i=n.nextNonSpaceToken}return r?null:(n.truncateToCursor(),o)}},{key:\"getStartToken\",value:function(e,t){var r=e.nextNonSpaceToken;return null!==r&&u(r,this.parserOptions)?(t.push(\"\"),e.nextNonSpaceToken):r}},{key:\"shouldSkipColumnParse\",value:function(e,t,r){var n=this.parserOptions;if(u(t,n)){e.advancePastToken(t);var o=e.nextCharacterToken;if(!e.hasMoreCharacters||null!==o&&a(o))return r.push(\"\"),!0;if(null!==o&&u(o,n))return r.push(\"\"),!0}return!1}}])&&n(t.prototype,r),i&&n(t,i),e}();r.default=c},{\"./Token\":314,\"./column\":319}],313:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}Object.defineProperty(r,\"__esModule\",{value:!0});var o=e(\"./Token\"),i=/((?:\\r\\n)|\\n|\\r)/,a=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.cursor=0,this.line=t.line,this.lineLength=this.line.length,this.parserOptions=t.parserOptions,this.hasMoreData=t.hasMoreData,this.cursor=t.cursor||0}var t,r,a;return t=e,(r=[{key:\"advancePastLine\",value:function(){var e=this.lineFromCursor.match(i);return e?(this.cursor+=(e.index||0)+e[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}},{key:\"advanceTo\",value:function(e){return this.cursor=e,this}},{key:\"advanceToToken\",value:function(e){return this.cursor=e.startCursor,this}},{key:\"advancePastToken\",value:function(e){return this.cursor=e.endCursor+1,this}},{key:\"truncateToCursor\",value:function(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}},{key:\"hasMoreCharacters\",get:function(){return this.lineLength>this.cursor}},{key:\"nextNonSpaceToken\",get:function(){var e=this.lineFromCursor,t=this.parserOptions.NEXT_TOKEN_REGEXP;if(-1===e.search(t))return null;var r=e.match(t);if(null==r)return null;var n=r[1],i=this.cursor+(r.index||0);return new o.Token({token:n,startCursor:i,endCursor:i+n.length-1})}},{key:\"nextCharacterToken\",get:function(){var e=this.cursor;return this.lineLength<=e?null:new o.Token({token:this.line[e],startCursor:e,endCursor:e})}},{key:\"lineFromCursor\",get:function(){return this.line.substr(this.cursor)}}])&&n(t.prototype,r),a&&n(t,a),e}();r.Scanner=a},{\"./Token\":314}],314:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}Object.defineProperty(r,\"__esModule\",{value:!0});var o=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.token=t.token,this.startCursor=t.startCursor,this.endCursor=t.endCursor}var t,r,o;return t=e,o=[{key:\"isTokenRowDelimiter\",value:function(e){var t=e.token;return\"\\r\"===t||\"\\n\"===t||\"\\r\\n\"===t}},{key:\"isTokenCarriageReturn\",value:function(e,t){return e.token===t.carriageReturn}},{key:\"isTokenComment\",value:function(e,t){return t.supportsComments&&!!e&&e.token===t.comment}},{key:\"isTokenEscapeCharacter\",value:function(e,t){return e.token===t.escapeChar}},{key:\"isTokenQuote\",value:function(e,t){return e.token===t.quote}},{key:\"isTokenDelimiter\",value:function(e,t){return e.token===t.delimiter}}],(r=null)&&n(t.prototype,r),o&&n(t,o),e}();r.Token=o},{}],315:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});r.default=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),t.trim?this.format=function(e){return e.trim()}:t.ltrim?this.format=function(e){return e.trimLeft()}:t.rtrim?this.format=function(e){return e.trimRight()}:this.format=function(e){return e}}},{}],316:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=o(e(\"./NonQuotedColumnParser\")),a=o(e(\"./QuotedColumnParser\")),s=e(\"../Token\"),u=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.parserOptions=t,this.quotedColumnParser=new a.default(t),this.nonQuotedColumnParser=new i.default(t)}var t,r,o;return t=e,(r=[{key:\"parse\",value:function(e){var t=e.nextNonSpaceToken;return null!==t&&s.Token.isTokenQuote(t,this.parserOptions)?(e.advanceToToken(t),this.quotedColumnParser.parse(e)):this.nonQuotedColumnParser.parse(e)}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=u},{\"../Token\":314,\"./NonQuotedColumnParser\":317,\"./QuotedColumnParser\":318}],317:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=o(e(\"./ColumnFormatter\")),a=e(\"../Token\").Token,s=a.isTokenDelimiter,u=a.isTokenRowDelimiter,c=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.parserOptions=t,this.columnFormatter=new i.default(t)}var t,r,o;return t=e,(r=[{key:\"parse\",value:function(e){if(!e.hasMoreCharacters)return null;for(var t=this.parserOptions,r=[],n=e.nextCharacterToken;n&&!s(n,t)&&!u(n);n=e.nextCharacterToken)r.push(n.token),e.advancePastToken(n);return this.columnFormatter.format(r.join(\"\"))}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=c},{\"../Token\":314,\"./ColumnFormatter\":315}],318:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=o(e(\"./ColumnFormatter\")),a=e(\"../Token\").Token,s=a.isTokenDelimiter,u=a.isTokenRowDelimiter,c=a.isTokenEscapeCharacter,f=a.isTokenQuote,l=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.parserOptions=t,this.columnFormatter=new i.default(t)}var t,r,o;return t=e,(r=[{key:\"parse\",value:function(e){if(!e.hasMoreCharacters)return null;var t=e.cursor,r=this.gatherDataBetweenQuotes(e),n=r.foundClosingQuote,o=r.col;if(!n){if(e.advanceTo(t),!e.hasMoreData)throw new Error(\"Parse Error: missing closing: '\".concat(this.parserOptions.quote,\"' in line: at '\").concat(e.lineFromCursor.replace(/[r\\n]/g,\"\\\\n'\"),\"'\"));return null}return this.checkForMalformedColumn(e),o}},{key:\"gatherDataBetweenQuotes\",value:function(e){for(var t=this.parserOptions,r=!1,n=!1,o=[],i=e.nextCharacterToken;!n&&null!==i;i=e.nextCharacterToken){var a=f(i,t);if(!r&&a)r=!0;else if(r)if(c(i,t)){e.advancePastToken(i);var s=e.nextCharacterToken;null!==s&&f(s,t)?(o.push(s.token),i=s):a?n=!0:o.push(i.token)}else a?n=!0:o.push(i.token);e.advancePastToken(i)}return{col:this.columnFormatter.format(o.join(\"\")),foundClosingQuote:n}}},{key:\"checkForMalformedColumn\",value:function(e){var t=this.parserOptions,r=e.nextNonSpaceToken;if(r){var n=s(r,t),o=u(r);if(!n&&!o){var i=e.lineFromCursor.substr(0,10).replace(/[\\r\\n]/g,\"\\\\n'\");throw new Error(\"Parse Error: expected: '\".concat(t.escapedDelimiter,\"' OR new line got: '\").concat(r.token,\"'. at '\").concat(i))}e.advanceToToken(r)}else e.hasMoreData||e.advancePastLine()}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=l},{\"../Token\":314,\"./ColumnFormatter\":315}],319:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"./ColumnParser\");r.ColumnParser=n.default;var o=e(\"./NonQuotedColumnParser\");r.NonQuotedColumnParser=o.default;var i=e(\"./QuotedColumnParser\");r.QuotedColumnParser=i.default;var a=e(\"./ColumnFormatter\");r.ColumnFormatter=a.default},{\"./ColumnFormatter\":315,\"./ColumnParser\":316,\"./NonQuotedColumnParser\":317,\"./QuotedColumnParser\":318}],320:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"./Parser\");r.Parser=n.default;var o=e(\"./RowParser\");r.RowParser=o.default;var i=e(\"./Scanner\");r.Scanner=i.Scanner;var a=e(\"./Token\");r.Token=a.Token;var s=e(\"./column\");r.ColumnParser=s.ColumnParser,r.NonQuotedColumnParser=s.NonQuotedColumnParser,r.QuotedColumnParser=s.QuotedColumnParser},{\"./Parser\":311,\"./RowParser\":312,\"./Scanner\":313,\"./Token\":314,\"./column\":319}],321:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=o(e(\"lodash.isundefined\")),a=o(e(\"lodash.isfunction\")),s=o(e(\"lodash.uniq\")),u=o(e(\"lodash.groupby\")),c=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=t,!0===t.headers?this.shouldUseFirstRow=!0:Array.isArray(t.headers)?this.setHeaders(t.headers):a.default(t.headers)&&(this.headersTransform=t.headers)}var t,r,o;return t=e,(r=[{key:\"transform\",value:function(e,t){return this.shouldMapRow(e)?t(null,this.processRow(e)):t(null,{row:null,isValid:!0})}},{key:\"shouldMapRow\",value:function(e){var t=this.parserOptions;if(!this.headersTransform&&t.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error(\"Error renaming headers: new headers must be provided in an array\");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(e)){if(this.headersTransform)this.setHeaders(this.headersTransform(e));else{if(!this.shouldUseFirstRow)return!0;this.setHeaders(e)}return!1}return!0}},{key:\"processRow\",value:function(e){if(!this.headers)return{row:e,isValid:!0};var t=this.parserOptions;if(!t.discardUnmappedColumns&&e.length>this.headersLength){if(!t.strictColumnHandling)throw new Error(\"Unexpected Error: column header mismatch expected: \".concat(this.headersLength,\" columns got: \").concat(e.length));return{row:e,isValid:!1,reason:\"Column header mismatch expected: \".concat(this.headersLength,\" columns got: \").concat(e.length)}}return t.strictColumnHandling&&e.length<this.headersLength?{row:e,isValid:!1,reason:\"Column header mismatch expected: \".concat(this.headersLength,\" columns got: \").concat(e.length)}:{row:this.mapHeaders(e),isValid:!0}}},{key:\"mapHeaders\",value:function(e){for(var t={},r=this.headers,n=this.headersLength,o=0;o<n;o+=1){var a=r[o];if(!i.default(a)){var s=e[o];i.default(s)?t[a]=\"\":t[a]=s}}return t}},{key:\"setHeaders\",value:function(e){var t,r=e.filter((function(e){return!!e}));if(s.default(r).length!==r.length){var n=u.default(r),o=Object.keys(n).filter((function(e){return n[e].length>1}));throw new Error(\"Duplicate headers found \".concat(JSON.stringify(o)))}this.headers=e,this.receivedHeaders=!0,this.headersLength=(null===(t=this.headers)||void 0===t?void 0:t.length)||0}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=c},{\"lodash.groupby\":381,\"lodash.isfunction\":384,\"lodash.isundefined\":386,\"lodash.uniq\":387}],322:[function(e,t,r){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var i=o(e(\"lodash.isfunction\")),a=e(\"../types\"),s=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this._rowTransform=null,this._rowValidator=null}var t,r,o;return t=e,o=[{key:\"createTransform\",value:function(e){return a.isSyncTransform(e)?function(t,r){var n=null;try{n=e(t)}catch(e){return r(e)}return r(null,n)}:e}},{key:\"createValidator\",value:function(e){return a.isSyncValidate(e)?function(t,r){r(null,{row:t,isValid:e(t)})}:function(t,r){e(t,(function(e,n,o){return e?r(e):r(null,n?{row:t,isValid:n,reason:o}:{row:t,isValid:!1,reason:o})}))}}}],(r=[{key:\"transformAndValidate\",value:function(e,t){var r=this;return this.callTransformer(e,(function(e,n){return e?t(e):n?r.callValidator(n,(function(e,r){return e?t(e):r&&!r.isValid?t(null,{row:n,isValid:!1,reason:r.reason}):t(null,{row:n,isValid:!0})})):t(null,{row:null,isValid:!0})}))}},{key:\"callTransformer\",value:function(e,t){return this._rowTransform?this._rowTransform(e,t):t(null,e)}},{key:\"callValidator\",value:function(e,t){return this._rowValidator?this._rowValidator(e,t):t(null,{row:e,isValid:!0})}},{key:\"rowTransform\",set:function(t){if(!i.default(t))throw new TypeError(\"The transform should be a function\");this._rowTransform=e.createTransform(t)}},{key:\"rowValidator\",set:function(t){if(!i.default(t))throw new TypeError(\"The validate should be a function\");this._rowValidator=e.createValidator(t)}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=s},{\"../types\":324,\"lodash.isfunction\":384}],323:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"./RowTransformerValidator\");r.RowTransformerValidator=n.default;var o=e(\"./HeaderTransformer\");r.HeaderTransformer=o.default},{\"./HeaderTransformer\":321,\"./RowTransformerValidator\":322}],324:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0}),r.isSyncTransform=function(e){return 1===e.length},r.isSyncValidate=function(e){return 1===e.length}},{}],325:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"stream\").Transform;function i(e){o.call(this),this._block=n.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}e(\"inherits\")(i,o),i.prototype._transform=function(e,t,r){var n=null;try{this.update(e,t)}catch(e){n=e}r(n)},i.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},i.prototype.update=function(e,t){if(function(e,t){if(!n.isBuffer(e)&&\"string\"!=typeof e)throw new TypeError(t+\" must be a string or a buffer\")}(e,\"Data\"),this._finalized)throw new Error(\"Digest already called\");n.isBuffer(e)||(e=n.from(e,t));for(var r=this._block,o=0;this._blockOffset+e.length-o>=this._blockSize;){for(var i=this._blockOffset;i<this._blockSize;)r[i++]=e[o++];this._update(),this._blockOffset=0}for(;o<e.length;)r[this._blockOffset++]=e[o++];for(var a=0,s=8*e.length;s>0;++a)this._length[a]+=s,(s=this._length[a]/4294967296|0)>0&&(this._length[a]-=4294967296*s);return this},i.prototype._update=function(){throw new Error(\"_update is not implemented\")},i.prototype.digest=function(e){if(this._finalized)throw new Error(\"Digest already called\");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return t},i.prototype._digest=function(){throw new Error(\"_digest is not implemented\")},t.exports=i},{inherits:341,\"safe-buffer\":445,stream:456}],326:[function(e,t,r){var n=r;n.utils=e(\"./hash/utils\"),n.common=e(\"./hash/common\"),n.sha=e(\"./hash/sha\"),n.ripemd=e(\"./hash/ripemd\"),n.hmac=e(\"./hash/hmac\"),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},{\"./hash/common\":327,\"./hash/hmac\":328,\"./hash/ripemd\":329,\"./hash/sha\":330,\"./hash/utils\":337}],327:[function(e,t,r){var n=e(\"./utils\"),o=e(\"minimalistic-assert\");function i(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian=\"big\",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}r.BlockHash=i,i.prototype.update=function(e,t){if(e=n.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=n.join32(e,0,e.length-r,this.endian);for(var o=0;o<e.length;o+=this._delta32)this._update(e,o,o+this._delta32)}return this},i.prototype.digest=function(e){return this.update(this._pad()),o(null===this.pending),this._digest(e)},i.prototype._pad=function(){var e=this.pendingTotal,t=this._delta8,r=t-(e+this.padLength)%t,n=new Array(r+this.padLength);n[0]=128;for(var o=1;o<r;o++)n[o]=0;if(e<<=3,\"big\"===this.endian){for(var i=8;i<this.padLength;i++)n[o++]=0;n[o++]=0,n[o++]=0,n[o++]=0,n[o++]=0,n[o++]=e>>>24&255,n[o++]=e>>>16&255,n[o++]=e>>>8&255,n[o++]=255&e}else for(n[o++]=255&e,n[o++]=e>>>8&255,n[o++]=e>>>16&255,n[o++]=e>>>24&255,n[o++]=0,n[o++]=0,n[o++]=0,n[o++]=0,i=8;i<this.padLength;i++)n[o++]=0;return n}},{\"./utils\":337,\"minimalistic-assert\":390}],328:[function(e,t,r){var n=e(\"./utils\"),o=e(\"minimalistic-assert\");function i(e,t,r){if(!(this instanceof i))return new i(e,t,r);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(n.toArray(t,r))}t.exports=i,i.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),o(e.length<=this.blockSize);for(var t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new this.Hash).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new this.Hash).update(e)},i.prototype.update=function(e,t){return this.inner.update(e,t),this},i.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)}},{\"./utils\":337,\"minimalistic-assert\":390}],329:[function(e,t,r){var n=e(\"./utils\"),o=e(\"./common\"),i=n.rotl32,a=n.sum32,s=n.sum32_3,u=n.sum32_4,c=o.BlockHash;function f(){if(!(this instanceof f))return new f;c.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian=\"little\"}function l(e,t,r,n){return e<=15?t^r^n:e<=31?t&r|~t&n:e<=47?(t|~r)^n:e<=63?t&n|r&~n:t^(r|~n)}function h(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function d(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}n.inherits(f,c),r.ripemd160=f,f.blockSize=512,f.outSize=160,f.hmacStrength=192,f.padLength=64,f.prototype._update=function(e,t){for(var r=this.h[0],n=this.h[1],o=this.h[2],c=this.h[3],f=this.h[4],v=r,g=n,w=o,_=c,k=f,x=0;x<80;x++){var S=a(i(u(r,l(x,n,o,c),e[p[x]+t],h(x)),m[x]),f);r=f,f=c,c=i(o,10),o=n,n=S,S=a(i(u(v,l(79-x,g,w,_),e[y[x]+t],d(x)),b[x]),k),v=k,k=_,_=i(w,10),w=g,g=S}S=s(this.h[1],o,_),this.h[1]=s(this.h[2],c,k),this.h[2]=s(this.h[3],f,v),this.h[3]=s(this.h[4],r,g),this.h[4]=s(this.h[0],n,w),this.h[0]=S},f.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"little\"):n.split32(this.h,\"little\")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],y=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],m=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},{\"./common\":327,\"./utils\":337}],330:[function(e,t,r){r.sha1=e(\"./sha/1\"),r.sha224=e(\"./sha/224\"),r.sha256=e(\"./sha/256\"),r.sha384=e(\"./sha/384\"),r.sha512=e(\"./sha/512\")},{\"./sha/1\":331,\"./sha/224\":332,\"./sha/256\":333,\"./sha/384\":334,\"./sha/512\":335}],331:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../common\"),i=e(\"./common\"),a=n.rotl32,s=n.sum32,u=n.sum32_5,c=i.ft_1,f=o.BlockHash,l=[1518500249,1859775393,2400959708,3395469782];function h(){if(!(this instanceof h))return new h;f.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}n.inherits(h,f),t.exports=h,h.blockSize=512,h.outSize=160,h.hmacStrength=80,h.padLength=64,h.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;n<r.length;n++)r[n]=a(r[n-3]^r[n-8]^r[n-14]^r[n-16],1);var o=this.h[0],i=this.h[1],f=this.h[2],h=this.h[3],d=this.h[4];for(n=0;n<r.length;n++){var p=~~(n/20),y=u(a(o,5),c(p,i,f,h),d,r[n],l[p]);d=h,h=f,f=a(i,30),i=o,o=y}this.h[0]=s(this.h[0],o),this.h[1]=s(this.h[1],i),this.h[2]=s(this.h[2],f),this.h[3]=s(this.h[3],h),this.h[4]=s(this.h[4],d)},h.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},{\"../common\":327,\"../utils\":337,\"./common\":336}],332:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./256\");function i(){if(!(this instanceof i))return new i;o.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}n.inherits(i,o),t.exports=i,i.blockSize=512,i.outSize=224,i.hmacStrength=192,i.padLength=64,i.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h.slice(0,7),\"big\"):n.split32(this.h.slice(0,7),\"big\")}},{\"../utils\":337,\"./256\":333}],333:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../common\"),i=e(\"./common\"),a=e(\"minimalistic-assert\"),s=n.sum32,u=n.sum32_4,c=n.sum32_5,f=i.ch32,l=i.maj32,h=i.s0_256,d=i.s1_256,p=i.g0_256,y=i.g1_256,m=o.BlockHash,b=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function v(){if(!(this instanceof v))return new v;m.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=b,this.W=new Array(64)}n.inherits(v,m),t.exports=v,v.blockSize=512,v.outSize=256,v.hmacStrength=192,v.padLength=64,v.prototype._update=function(e,t){for(var r=this.W,n=0;n<16;n++)r[n]=e[t+n];for(;n<r.length;n++)r[n]=u(y(r[n-2]),r[n-7],p(r[n-15]),r[n-16]);var o=this.h[0],i=this.h[1],m=this.h[2],b=this.h[3],v=this.h[4],g=this.h[5],w=this.h[6],_=this.h[7];for(a(this.k.length===r.length),n=0;n<r.length;n++){var k=c(_,d(v),f(v,g,w),this.k[n],r[n]),x=s(h(o),l(o,i,m));_=w,w=g,g=v,v=s(b,k),b=m,m=i,i=o,o=s(k,x)}this.h[0]=s(this.h[0],o),this.h[1]=s(this.h[1],i),this.h[2]=s(this.h[2],m),this.h[3]=s(this.h[3],b),this.h[4]=s(this.h[4],v),this.h[5]=s(this.h[5],g),this.h[6]=s(this.h[6],w),this.h[7]=s(this.h[7],_)},v.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},{\"../common\":327,\"../utils\":337,\"./common\":336,\"minimalistic-assert\":390}],334:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./512\");function i(){if(!(this instanceof i))return new i;o.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}n.inherits(i,o),t.exports=i,i.blockSize=1024,i.outSize=384,i.hmacStrength=192,i.padLength=128,i.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h.slice(0,12),\"big\"):n.split32(this.h.slice(0,12),\"big\")}},{\"../utils\":337,\"./512\":335}],335:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../common\"),i=e(\"minimalistic-assert\"),a=n.rotr64_hi,s=n.rotr64_lo,u=n.shr64_hi,c=n.shr64_lo,f=n.sum64,l=n.sum64_hi,h=n.sum64_lo,d=n.sum64_4_hi,p=n.sum64_4_lo,y=n.sum64_5_hi,m=n.sum64_5_lo,b=o.BlockHash,v=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function g(){if(!(this instanceof g))return new g;b.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=v,this.W=new Array(160)}function w(e,t,r,n,o){var i=e&r^~e&o;return i<0&&(i+=4294967296),i}function _(e,t,r,n,o,i){var a=t&n^~t&i;return a<0&&(a+=4294967296),a}function k(e,t,r,n,o){var i=e&r^e&o^r&o;return i<0&&(i+=4294967296),i}function x(e,t,r,n,o,i){var a=t&n^t&i^n&i;return a<0&&(a+=4294967296),a}function S(e,t){var r=a(e,t,28)^a(t,e,2)^a(t,e,7);return r<0&&(r+=4294967296),r}function O(e,t){var r=s(e,t,28)^s(t,e,2)^s(t,e,7);return r<0&&(r+=4294967296),r}function E(e,t){var r=a(e,t,14)^a(e,t,18)^a(t,e,9);return r<0&&(r+=4294967296),r}function R(e,t){var r=s(e,t,14)^s(e,t,18)^s(t,e,9);return r<0&&(r+=4294967296),r}function j(e,t){var r=a(e,t,1)^a(e,t,8)^u(e,t,7);return r<0&&(r+=4294967296),r}function T(e,t){var r=s(e,t,1)^s(e,t,8)^c(e,t,7);return r<0&&(r+=4294967296),r}function C(e,t){var r=a(e,t,19)^a(t,e,29)^u(e,t,6);return r<0&&(r+=4294967296),r}function P(e,t){var r=s(e,t,19)^s(t,e,29)^c(e,t,6);return r<0&&(r+=4294967296),r}n.inherits(g,b),t.exports=g,g.blockSize=1024,g.outSize=512,g.hmacStrength=192,g.padLength=128,g.prototype._prepareBlock=function(e,t){for(var r=this.W,n=0;n<32;n++)r[n]=e[t+n];for(;n<r.length;n+=2){var o=C(r[n-4],r[n-3]),i=P(r[n-4],r[n-3]),a=r[n-14],s=r[n-13],u=j(r[n-30],r[n-29]),c=T(r[n-30],r[n-29]),f=r[n-32],l=r[n-31];r[n]=d(o,i,a,s,u,c,f,l),r[n+1]=p(o,i,a,s,u,c,f,l)}},g.prototype._update=function(e,t){this._prepareBlock(e,t);var r=this.W,n=this.h[0],o=this.h[1],a=this.h[2],s=this.h[3],u=this.h[4],c=this.h[5],d=this.h[6],p=this.h[7],b=this.h[8],v=this.h[9],g=this.h[10],j=this.h[11],T=this.h[12],C=this.h[13],P=this.h[14],A=this.h[15];i(this.k.length===r.length);for(var M=0;M<r.length;M+=2){var I=P,N=A,D=E(b,v),B=R(b,v),F=w(b,v,g,j,T),L=_(b,v,g,j,T,C),z=this.k[M],U=this.k[M+1],H=r[M],V=r[M+1],W=y(I,N,D,B,F,L,z,U,H,V),q=m(I,N,D,B,F,L,z,U,H,V);I=S(n,o),N=O(n,o),D=k(n,o,a,s,u),B=x(n,o,a,s,u,c);var $=l(I,N,D,B),X=h(I,N,D,B);P=T,A=C,T=g,C=j,g=b,j=v,b=l(d,p,W,q),v=h(p,p,W,q),d=u,p=c,u=a,c=s,a=n,s=o,n=l(W,q,$,X),o=h(W,q,$,X)}f(this.h,0,n,o),f(this.h,2,a,s),f(this.h,4,u,c),f(this.h,6,d,p),f(this.h,8,b,v),f(this.h,10,g,j),f(this.h,12,T,C),f(this.h,14,P,A)},g.prototype._digest=function(e){return\"hex\"===e?n.toHex32(this.h,\"big\"):n.split32(this.h,\"big\")}},{\"../common\":327,\"../utils\":337,\"minimalistic-assert\":390}],336:[function(e,t,r){var n=e(\"../utils\").rotr32;function o(e,t,r){return e&t^~e&r}function i(e,t,r){return e&t^e&r^t&r}function a(e,t,r){return e^t^r}r.ft_1=function(e,t,r,n){return 0===e?o(t,r,n):1===e||3===e?a(t,r,n):2===e?i(t,r,n):void 0},r.ch32=o,r.maj32=i,r.p32=a,r.s0_256=function(e){return n(e,2)^n(e,13)^n(e,22)},r.s1_256=function(e){return n(e,6)^n(e,11)^n(e,25)},r.g0_256=function(e){return n(e,7)^n(e,18)^e>>>3},r.g1_256=function(e){return n(e,17)^n(e,19)^e>>>10}},{\"../utils\":337}],337:[function(e,t,r){var n=e(\"minimalistic-assert\"),o=e(\"inherits\");function i(e,t){return 55296==(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1)))}function a(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function s(e){return 1===e.length?\"0\"+e:e}function u(e){return 7===e.length?\"0\"+e:6===e.length?\"00\"+e:5===e.length?\"000\"+e:4===e.length?\"0000\"+e:3===e.length?\"00000\"+e:2===e.length?\"000000\"+e:1===e.length?\"0000000\"+e:e}r.inherits=o,r.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if(\"string\"==typeof e)if(t){if(\"hex\"===t)for((e=e.replace(/[^a-z0-9]+/gi,\"\")).length%2!=0&&(e=\"0\"+e),o=0;o<e.length;o+=2)r.push(parseInt(e[o]+e[o+1],16))}else for(var n=0,o=0;o<e.length;o++){var a=e.charCodeAt(o);a<128?r[n++]=a:a<2048?(r[n++]=a>>6|192,r[n++]=63&a|128):i(e,o)?(a=65536+((1023&a)<<10)+(1023&e.charCodeAt(++o)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(o=0;o<e.length;o++)r[o]=0|e[o];return r},r.toHex=function(e){for(var t=\"\",r=0;r<e.length;r++)t+=s(e[r].toString(16));return t},r.htonl=a,r.toHex32=function(e,t){for(var r=\"\",n=0;n<e.length;n++){var o=e[n];\"little\"===t&&(o=a(o)),r+=u(o.toString(16))}return r},r.zero2=s,r.zero8=u,r.join32=function(e,t,r,o){var i=r-t;n(i%4==0);for(var a=new Array(i/4),s=0,u=t;s<a.length;s++,u+=4){var c;c=\"big\"===o?e[u]<<24|e[u+1]<<16|e[u+2]<<8|e[u+3]:e[u+3]<<24|e[u+2]<<16|e[u+1]<<8|e[u],a[s]=c>>>0}return a},r.split32=function(e,t){for(var r=new Array(4*e.length),n=0,o=0;n<e.length;n++,o+=4){var i=e[n];\"big\"===t?(r[o]=i>>>24,r[o+1]=i>>>16&255,r[o+2]=i>>>8&255,r[o+3]=255&i):(r[o+3]=i>>>24,r[o+2]=i>>>16&255,r[o+1]=i>>>8&255,r[o]=255&i)}return r},r.rotr32=function(e,t){return e>>>t|e<<32-t},r.rotl32=function(e,t){return e<<t|e>>>32-t},r.sum32=function(e,t){return e+t>>>0},r.sum32_3=function(e,t,r){return e+t+r>>>0},r.sum32_4=function(e,t,r,n){return e+t+r+n>>>0},r.sum32_5=function(e,t,r,n,o){return e+t+r+n+o>>>0},r.sum64=function(e,t,r,n){var o=e[t],i=n+e[t+1]>>>0,a=(i<n?1:0)+r+o;e[t]=a>>>0,e[t+1]=i},r.sum64_hi=function(e,t,r,n){return(t+n>>>0<t?1:0)+e+r>>>0},r.sum64_lo=function(e,t,r,n){return t+n>>>0},r.sum64_4_hi=function(e,t,r,n,o,i,a,s){var u=0,c=t;return u+=(c=c+n>>>0)<t?1:0,u+=(c=c+i>>>0)<i?1:0,e+r+o+a+(u+=(c=c+s>>>0)<s?1:0)>>>0},r.sum64_4_lo=function(e,t,r,n,o,i,a,s){return t+n+i+s>>>0},r.sum64_5_hi=function(e,t,r,n,o,i,a,s,u,c){var f=0,l=t;return f+=(l=l+n>>>0)<t?1:0,f+=(l=l+i>>>0)<i?1:0,f+=(l=l+s>>>0)<s?1:0,e+r+o+a+u+(f+=(l=l+c>>>0)<c?1:0)>>>0},r.sum64_5_lo=function(e,t,r,n,o,i,a,s,u,c){return t+n+i+s+c>>>0},r.rotr64_hi=function(e,t,r){return(t<<32-r|e>>>r)>>>0},r.rotr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0},r.shr64_hi=function(e,t,r){return e>>>r},r.shr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0}},{inherits:341,\"minimalistic-assert\":390}],338:[function(e,t,r){var n=e(\"hash.js\"),o=e(\"minimalistic-crypto-utils\"),i=e(\"minimalistic-assert\");function a(e){if(!(this instanceof a))return new a(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=o.toArray(e.entropy,e.entropyEnc||\"hex\"),r=o.toArray(e.nonce,e.nonceEnc||\"hex\"),n=o.toArray(e.pers,e.persEnc||\"hex\");i(t.length>=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._init(t,r,n)}t.exports=a,a.prototype._init=function(e,t,r){var n=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var o=0;o<this.V.length;o++)this.K[o]=0,this.V[o]=1;this._update(n),this._reseed=1,this.reseedInterval=281474976710656},a.prototype._hmac=function(){return new n.hmac(this.hash,this.K)},a.prototype._update=function(e){var t=this._hmac().update(this.V).update([0]);e&&(t=t.update(e)),this.K=t.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},a.prototype.reseed=function(e,t,r,n){\"string\"!=typeof t&&(n=r,r=t,t=null),e=o.toArray(e,t),r=o.toArray(r,n),i(e.length>=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._update(e.concat(r||[])),this._reseed=1},a.prototype.generate=function(e,t,r,n){if(this._reseed>this.reseedInterval)throw new Error(\"Reseed is required\");\"string\"!=typeof t&&(n=r,r=t,t=null),r&&(r=o.toArray(r,n||\"hex\"),this._update(r));for(var i=[];i.length<e;)this.V=this._hmac().update(this.V).digest(),i=i.concat(this.V);var a=i.slice(0,e);return this._update(r),this._reseed++,o.encode(a,t)}},{\"hash.js\":326,\"minimalistic-assert\":390,\"minimalistic-crypto-utils\":391}],339:[function(e,t,r){r.read=function(e,t,r,n,o){var i,a,s=8*o-n-1,u=(1<<s)-1,c=u>>1,f=-7,l=r?o-1:0,h=r?-1:1,d=e[t+l];for(l+=h,i=d&(1<<-f)-1,d>>=-f,f+=s;f>0;i=256*i+e[t+l],l+=h,f-=8);for(a=i&(1<<-f)-1,i>>=-f,f+=n;f>0;a=256*a+e[t+l],l+=h,f-=8);if(0===i)i=1-c;else{if(i===u)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,n),i-=c}return(d?-1:1)*a*Math.pow(2,i-n)},r.write=function(e,t,r,n,o,i){var a,s,u,c=8*i-o-1,f=(1<<c)-1,l=f>>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:i-1,p=n?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=f):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),(t+=a+l>=1?h/u:h*Math.pow(2,1-l))*u>=2&&(a++,u/=2),a+l>=f?(s=0,a=f):a+l>=1?(s=(t*u-1)*Math.pow(2,o),a+=l):(s=t*Math.pow(2,l-1)*Math.pow(2,o),a=0));o>=8;e[r+d]=255&s,d+=p,s/=256,o-=8);for(a=a<<o|s,c+=o;c>0;e[r+d]=255&a,d+=p,a/=256,c-=8);e[r+d-p]|=128*y}},{}],340:[function(e,t,r){(function(e){var r,n,o=e.MutationObserver||e.WebKitMutationObserver;if(o){var i=0,a=new o(f),s=e.document.createTextNode(\"\");a.observe(s,{characterData:!0}),r=function(){s.data=i=++i%2}}else if(e.setImmediate||void 0===e.MessageChannel)r=\"document\"in e&&\"onreadystatechange\"in e.document.createElement(\"script\")?function(){var t=e.document.createElement(\"script\");t.onreadystatechange=function(){f(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(f,0)};else{var u=new e.MessageChannel;u.port1.onmessage=f,r=function(){u.port2.postMessage(0)}}var c=[];function f(){var e,t;n=!0;for(var r=c.length;r;){for(t=c,c=[],e=-1;++e<r;)t[e]();r=c.length}n=!1}t.exports=function(e){1!==c.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],341:[function(e,t,r){\"function\"==typeof Object.create?t.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},{}],342:[function(e,t,r){function n(e){return!!e.constructor&&\"function\"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\nt.exports=function(e){return null!=e&&(n(e)||function(e){return\"function\"==typeof e.readFloatLE&&\"function\"==typeof e.slice&&n(e.slice(0,0))}(e)||!!e._isBuffer)}},{}],343:[function(e,t,r){var n={}.toString;t.exports=Array.isArray||function(e){return\"[object Array]\"==n.call(e)}},{}],344:[function(e,t,r){var n=e(\"./utils\"),o=e(\"./support\"),i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,o,a,s,u,c,f=[],l=0,h=e.length,d=h,p=\"string\"!==n.getTypeOf(e);l<e.length;)d=h-l,p?(t=e[l++],r=l<h?e[l++]:0,o=l<h?e[l++]:0):(t=e.charCodeAt(l++),r=l<h?e.charCodeAt(l++):0,o=l<h?e.charCodeAt(l++):0),a=t>>2,s=(3&t)<<4|r>>4,u=d>1?(15&r)<<2|o>>6:64,c=d>2?63&o:64,f.push(i.charAt(a)+i.charAt(s)+i.charAt(u)+i.charAt(c));return f.join(\"\")},r.decode=function(e){var t,r,n,a,s,u,c=0,f=0;if(\"data:\"===e.substr(0,\"data:\".length))throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,h=3*(e=e.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\")).length/4;if(e.charAt(e.length-1)===i.charAt(64)&&h--,e.charAt(e.length-2)===i.charAt(64)&&h--,h%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=o.uint8array?new Uint8Array(0|h):new Array(0|h);c<e.length;)t=i.indexOf(e.charAt(c++))<<2|(a=i.indexOf(e.charAt(c++)))>>4,r=(15&a)<<4|(s=i.indexOf(e.charAt(c++)))>>2,n=(3&s)<<6|(u=i.indexOf(e.charAt(c++))),l[f++]=t,64!==s&&(l[f++]=r),64!==u&&(l[f++]=n);return l}},{\"./support\":373,\"./utils\":375}],345:[function(e,t,r){var n=e(\"./external\"),o=e(\"./stream/DataWorker\"),i=e(\"./stream/DataLengthProbe\"),a=e(\"./stream/Crc32Probe\");i=e(\"./stream/DataLengthProbe\");function s(e,t,r,n,o){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=o}s.prototype={getContentWorker:function(){var e=new o(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new i(\"data_length\")),t=this;return e.on(\"end\",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")})),e},getCompressedWorker:function(){return new o(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},s.createWorkerFrom=function(e,t,r){return e.pipe(new a).pipe(new i(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new i(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=s},{\"./external\":349,\"./stream/Crc32Probe\":368,\"./stream/DataLengthProbe\":369,\"./stream/DataWorker\":370}],346:[function(e,t,r){var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(e){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":350,\"./stream/GenericWorker\":371}],347:[function(e,t,r){var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,a=n+r;e^=-1;for(var s=n;s<a;s++)e=e>>>8^i[255&(e^t[s])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,a=n+r;e^=-1;for(var s=n;s<a;s++)e=e>>>8^i[255&(e^t.charCodeAt(s))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":375}],348:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],349:[function(e,t,r){var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:379}],350:[function(e,t,r){var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,o=e(\"pako\"),i=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),s=n?\"uint8array\":\"array\";function u(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",i.inherits(u,a),u.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(i.transformTo(s,e.data),!1)},u.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},u.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},u.prototype._createPako=function(){this._pako=new o[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new u(\"Deflate\",e)},r.uncompressWorker=function(){return new u(\"Inflate\",{})}},{\"./stream/GenericWorker\":371,\"./utils\":375,pako:392}],351:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../stream/GenericWorker\"),i=e(\"../utf8\"),a=e(\"../crc32\"),s=e(\"../signature\"),u=function(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n},c=function(e,t,r,o,c,f){var l,h,d=e.file,p=e.compression,y=f!==i.utf8encode,m=n.transformTo(\"string\",f(d.name)),b=n.transformTo(\"string\",i.utf8encode(d.name)),v=d.comment,g=n.transformTo(\"string\",f(v)),w=n.transformTo(\"string\",i.utf8encode(v)),_=b.length!==d.name.length,k=w.length!==v.length,x=\"\",S=\"\",O=\"\",E=d.dir,R=d.date,j={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(j.crc32=e.crc32,j.compressedSize=e.compressedSize,j.uncompressedSize=e.uncompressedSize);var T=0;t&&(T|=8),y||!_&&!k||(T|=2048);var C,P,A,M=0,I=0;E&&(M|=16),\"UNIX\"===c?(I=798,M|=(C=d.unixPermissions,P=E,A=C,C||(A=P?16893:33204),(65535&A)<<16)):(I=20,M|=63&(d.dosPermissions||0)),l=R.getUTCHours(),l<<=6,l|=R.getUTCMinutes(),l<<=5,l|=R.getUTCSeconds()/2,h=R.getUTCFullYear()-1980,h<<=4,h|=R.getUTCMonth()+1,h<<=5,h|=R.getUTCDate(),_&&(S=u(1,1)+u(a(m),4)+b,x+=\"up\"+u(S.length,2)+S),k&&(O=u(1,1)+u(a(g),4)+w,x+=\"uc\"+u(O.length,2)+O);var N=\"\";return N+=\"\\n\\0\",N+=u(T,2),N+=p.magic,N+=u(l,2),N+=u(h,2),N+=u(j.crc32,4),N+=u(j.compressedSize,4),N+=u(j.uncompressedSize,4),N+=u(m.length,2),N+=u(x.length,2),{fileRecord:s.LOCAL_FILE_HEADER+N+m+x,dirRecord:s.CENTRAL_FILE_HEADER+u(I,2)+N+u(g.length,2)+\"\\0\\0\\0\\0\"+u(M,4)+u(o,4)+m+x+g}},f=function(e){return s.DATA_DESCRIPTOR+u(e.crc32,4)+u(e.compressedSize,4)+u(e.uncompressedSize,4)};function l(e,t,r,n){o.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}n.inherits(l,o),l.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,o.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},l.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=c(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},l.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=c(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:f(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},l.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,o=function(e,t,r,o,i){var a=n.transformTo(\"string\",i(o));return s.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+u(e,2)+u(e,2)+u(t,4)+u(r,4)+u(a.length,2)+a}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:o,meta:{percent:100}})},l.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},l.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",(function(e){t.processChunk(e)})),e.on(\"end\",(function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()})),e.on(\"error\",(function(e){t.error(e)})),this},l.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},l.prototype.error=function(e){var t=this._sources;if(!o.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},l.prototype.lock=function(){o.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=l},{\"../crc32\":347,\"../signature\":366,\"../stream/GenericWorker\":371,\"../utf8\":374,\"../utils\":375}],352:[function(e,t,r){var n=e(\"../compressions\"),o=e(\"./ZipFileWorker\");r.generateWorker=function(e,t,r){var i=new o(t.streamFiles,r,t.platform,t.encodeFileName),a=0;try{e.forEach((function(e,r){a++;var o=function(e,t){var r=e||t,o=n[r];if(!o)throw new Error(r+\" is not a valid compression method !\");return o}(r.options.compression,t.compression),s=r.options.compressionOptions||t.compressionOptions||{},u=r.dir,c=r.date;r._compressWorker(o,s).withStreamInfo(\"file\",{name:e,dir:u,date:c,comment:r.comment||\"\",unixPermissions:r.unixPermissions,dosPermissions:r.dosPermissions}).pipe(i)})),i.entriesCount=a}catch(e){i.error(e)}return i}},{\"../compressions\":346,\"./ZipFileWorker\":351}],353:[function(e,t,r){function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files={},this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}n.prototype=e(\"./object\"),n.prototype.loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.2.0\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":348,\"./external\":349,\"./load\":354,\"./object\":358,\"./support\":373}],354:[function(e,t,r){var n=e(\"./utils\"),o=e(\"./external\"),i=e(\"./utf8\"),a=(n=e(\"./utils\"),e(\"./zipEntries\")),s=e(\"./stream/Crc32Probe\"),u=e(\"./nodejsUtils\");function c(e){return new o.Promise((function(t,r){var n=e.decompressed.getContentWorker().pipe(new s);n.on(\"error\",(function(e){r(e)})).on(\"end\",(function(){n.streamInfo.crc32!==e.decompressed.crc32?r(new Error(\"Corrupted zip : CRC32 mismatch\")):t()})).resume()}))}t.exports=function(e,t){var r=this;return t=n.extend(t||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:i.utf8decode}),u.isNode&&u.isStream(e)?o.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):n.prepareContent(\"the loaded zip file\",e,!0,t.optimizedBinaryString,t.base64).then((function(e){var r=new a(t);return r.load(e),r})).then((function(e){var r=[o.Promise.resolve(e)],n=e.files;if(t.checkCRC32)for(var i=0;i<n.length;i++)r.push(c(n[i]));return o.Promise.all(r)})).then((function(e){for(var n=e.shift(),o=n.files,i=0;i<o.length;i++){var a=o[i];r.file(a.fileNameStr,a.decompressed,{binary:!0,optimizedBinaryString:!0,date:a.date,dir:a.dir,comment:a.fileCommentStr.length?a.fileCommentStr:null,unixPermissions:a.unixPermissions,dosPermissions:a.dosPermissions,createFolders:t.createFolders})}return n.zipComment.length&&(r.comment=n.zipComment),r}))}},{\"./external\":349,\"./nodejsUtils\":357,\"./stream/Crc32Probe\":368,\"./utf8\":374,\"./utils\":375,\"./zipEntries\":376}],355:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../stream/GenericWorker\");function i(e,t){o.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(i,o),i.prototype._bindStream=function(e){var t=this;this._stream=e,e.pause(),e.on(\"data\",(function(e){t.push({data:e,meta:{percent:0}})})).on(\"error\",(function(e){t.isPaused?this.generatedError=e:t.error(e)})).on(\"end\",(function(){t.isPaused?t._upstreamEnded=!0:t.end()}))},i.prototype.pause=function(){return!!o.prototype.pause.call(this)&&(this._stream.pause(),!0)},i.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=i},{\"../stream/GenericWorker\":371,\"../utils\":375}],356:[function(e,t,r){var n=e(\"readable-stream\").Readable;function o(e,t,r){n.call(this,t),this._helper=e;var o=this;e.on(\"data\",(function(e,t){o.push(e)||o._helper.pause(),r&&r(t)})).on(\"error\",(function(e){o.emit(\"error\",e)})).on(\"end\",(function(){o.push(null)}))}e(\"../utils\").inherits(o,n),o.prototype._read=function(){this._helper.resume()},t.exports=o},{\"../utils\":375,\"readable-stream\":359}],357:[function(e,t,r){(function(e){t.exports={isNode:void 0!==e,newBufferFrom:function(t,r){if(e.from&&e.from!==Uint8Array.from)return e.from(t,r);if(\"number\"==typeof t)throw new Error('The \"data\" argument must not be a number');return new e(t,r)},allocBuffer:function(t){if(e.alloc)return e.alloc(t);var r=new e(t);return r.fill(0),r},isBuffer:function(t){return e.isBuffer(t)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}}).call(this,e(\"buffer\").Buffer)},{buffer:188}],358:[function(e,t,r){var n=e(\"./utf8\"),o=e(\"./utils\"),i=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),s=e(\"./defaults\"),u=e(\"./compressedObject\"),c=e(\"./zipObject\"),f=e(\"./generate\"),l=e(\"./nodejsUtils\"),h=e(\"./nodejs/NodejsStreamInputAdapter\"),d=function(e,t,r){var n,a=o.getTypeOf(t),f=o.extend(r||{},s);f.date=f.date||new Date,null!==f.compression&&(f.compression=f.compression.toUpperCase()),\"string\"==typeof f.unixPermissions&&(f.unixPermissions=parseInt(f.unixPermissions,8)),f.unixPermissions&&16384&f.unixPermissions&&(f.dir=!0),f.dosPermissions&&16&f.dosPermissions&&(f.dir=!0),f.dir&&(e=y(e)),f.createFolders&&(n=p(e))&&m.call(this,n,!0);var d=\"string\"===a&&!1===f.binary&&!1===f.base64;r&&void 0!==r.binary||(f.binary=!d),(t instanceof u&&0===t.uncompressedSize||f.dir||!t||0===t.length)&&(f.base64=!1,f.binary=!0,t=\"\",f.compression=\"STORE\",a=\"string\");var b=null;b=t instanceof u||t instanceof i?t:l.isNode&&l.isStream(t)?new h(e,t):o.prepareContent(e,t,f.binary,f.optimizedBinaryString,f.base64);var v=new c(e,b,f);this.files[e]=v},p=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return t>0?e.substring(0,t):\"\"},y=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},m=function(e,t){return t=void 0!==t?t:s.createFolders,e=y(e),this.files[e]||d.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function b(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var v={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)this.files.hasOwnProperty(t)&&(n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n))},filter:function(e){var t=[];return this.forEach((function(r,n){e(r,n)&&t.push(n)})),t},file:function(e,t,r){if(1===arguments.length){if(b(e)){var n=e;return this.filter((function(e,t){return!t.dir&&n.test(e)}))}var o=this.files[this.root+e];return o&&!o.dir?o:null}return e=this.root+e,d.call(this,e,t,r),this},folder:function(e){if(!e)return this;if(b(e))return this.filter((function(t,r){return r.dir&&e.test(t)}));var t=this.root+e,r=m.call(this,t),n=this.clone();return n.root=r.name,n},remove:function(e){e=this.root+e;var t=this.files[e];if(t||(\"/\"!==e.slice(-1)&&(e+=\"/\"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var r=this.filter((function(t,r){return r.name.slice(0,e.length)===e})),n=0;n<r.length;n++)delete this.files[r[n].name];return this},generate:function(e){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=o.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:n.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");o.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var s=r.comment||this.comment||\"\";t=f.generateWorker(this,r,s)}catch(e){(t=new i(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=v},{\"./compressedObject\":345,\"./defaults\":348,\"./generate\":352,\"./nodejs/NodejsStreamInputAdapter\":355,\"./nodejsUtils\":357,\"./stream/GenericWorker\":371,\"./stream/StreamHelper\":372,\"./utf8\":374,\"./utils\":375,\"./zipObject\":378}],359:[function(e,t,r){t.exports=e(\"stream\")},{stream:456}],360:[function(e,t,r){var n=e(\"./DataReader\");function o(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(o,n),o.prototype.byteAt=function(e){return this.data[this.zero+e]},o.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),o=e.charCodeAt(3),i=this.length-4;i>=0;--i)if(this.data[i]===t&&this.data[i+1]===r&&this.data[i+2]===n&&this.data[i+3]===o)return i-this.zero;return-1},o.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),o=e.charCodeAt(3),i=this.readData(4);return t===i[0]&&r===i[1]&&n===i[2]&&o===i[3]},o.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./DataReader\":361}],361:[function(e,t,r){var n=e(\"../utils\");function o(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}o.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(e){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=o},{\"../utils\":375}],362:[function(e,t,r){var n=e(\"./Uint8ArrayReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./Uint8ArrayReader\":364}],363:[function(e,t,r){var n=e(\"./DataReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},o.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},o.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},o.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./DataReader\":361}],364:[function(e,t,r){var n=e(\"./ArrayReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./ArrayReader\":360}],365:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../support\"),i=e(\"./ArrayReader\"),a=e(\"./StringReader\"),s=e(\"./NodeBufferReader\"),u=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||o.uint8array?\"nodebuffer\"===t?new s(e):o.uint8array?new u(n.transformTo(\"uint8array\",e)):new i(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":373,\"../utils\":375,\"./ArrayReader\":360,\"./NodeBufferReader\":362,\"./StringReader\":363,\"./Uint8ArrayReader\":364}],366:[function(e,t,r){r.LOCAL_FILE_HEADER=\"PK\\x03\\x04\",r.CENTRAL_FILE_HEADER=\"PK\\x01\\x02\",r.CENTRAL_DIRECTORY_END=\"PK\\x05\\x06\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\\x06\\x07\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\\x06\\x06\",r.DATA_DESCRIPTOR=\"PK\\x07\\b\"},{}],367:[function(e,t,r){var n=e(\"./GenericWorker\"),o=e(\"../utils\");function i(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}o.inherits(i,n),i.prototype.processChunk=function(e){this.push({data:o.transformTo(this.destType,e.data),meta:e.meta})},t.exports=i},{\"../utils\":375,\"./GenericWorker\":371}],368:[function(e,t,r){var n=e(\"./GenericWorker\"),o=e(\"../crc32\");function i(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(i,n),i.prototype.processChunk=function(e){this.streamInfo.crc32=o(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=i},{\"../crc32\":347,\"../utils\":375,\"./GenericWorker\":371}],369:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./GenericWorker\");function i(e){o.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(i,o),i.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}o.prototype.processChunk.call(this,e)},t.exports=i},{\"../utils\":375,\"./GenericWorker\":371}],370:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./GenericWorker\");function i(e){o.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}n.inherits(i,o),i.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this.data=null},i.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},i.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},i.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=i},{\"../utils\":375,\"./GenericWorker\":371}],371:[function(e,t,r){function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",(function(e){t.processChunk(e)})),e.on(\"end\",(function(){t.end()})),e.on(\"error\",(function(e){t.error(e)})),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;this.isPaused=!1;var e=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],372:[function(e,t,r){(function(r){var n=e(\"../utils\"),o=e(\"./ConvertWorker\"),i=e(\"./GenericWorker\"),a=e(\"../base64\"),s=e(\"../support\"),u=e(\"../external\"),c=null;if(s.nodestream)try{c=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function f(e,t){return new u.Promise((function(o,i){var s=[],u=e._internalType,c=e._outputType,f=e._mimeType;e.on(\"data\",(function(e,r){s.push(e),t&&t(r)})).on(\"error\",(function(e){s=[],i(e)})).on(\"end\",(function(){try{var e=function(e,t,r){switch(e){case\"blob\":return n.newBlob(n.transformTo(\"arraybuffer\",t),r);case\"base64\":return a.encode(t);default:return n.transformTo(e,t)}}(c,function(e,t){var n,o=0,i=null,a=0;for(n=0;n<t.length;n++)a+=t[n].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(a),n=0;n<t.length;n++)i.set(t[n],o),o+=t[n].length;return i;case\"nodebuffer\":return r.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(u,s),f);o(e)}catch(e){i(e)}s=[]})).resume()}))}function l(e,t,r){var a=t;switch(t){case\"blob\":case\"arraybuffer\":a=\"uint8array\";break;case\"base64\":a=\"string\"}try{this._internalType=a,this._outputType=t,this._mimeType=r,n.checkSupport(a),this._worker=e.pipe(new o(a)),e.lock()}catch(e){this._worker=new i(\"error\"),this._worker.error(e)}}l.prototype={accumulate:function(e){return f(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,(function(e){t.call(r,e.data,e.meta)})):this._worker.on(e,(function(){n.delay(t,arguments,r)})),this},resume:function(){return n.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(n.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new c(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=l}).call(this,e(\"buffer\").Buffer)},{\"../base64\":344,\"../external\":349,\"../nodejs/NodejsStreamOutputAdapter\":356,\"../support\":373,\"../utils\":375,\"./ConvertWorker\":367,\"./GenericWorker\":371,buffer:188}],373:[function(e,t,r){(function(t){if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=void 0!==t,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var o=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);o.append(n),r.blob=0===o.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}}).call(this,e(\"buffer\").Buffer)},{buffer:188,\"readable-stream\":359}],374:[function(e,t,r){for(var n=e(\"./utils\"),o=e(\"./support\"),i=e(\"./nodejsUtils\"),a=e(\"./stream/GenericWorker\"),s=new Array(256),u=0;u<256;u++)s[u]=u>=252?6:u>=248?5:u>=240?4:u>=224?3:u>=192?2:1;s[254]=s[254]=1;function c(){a.call(this,\"utf-8 decode\"),this.leftOver=null}function f(){a.call(this,\"utf-8 encode\")}r.utf8encode=function(e){return o.nodebuffer?i.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,a,s=e.length,u=0;for(i=0;i<s;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),u+=r<128?1:r<2048?2:r<65536?3:4;for(t=o.uint8array?new Uint8Array(u):new Array(u),a=0,i=0;a<u;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|63&r):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|63&r):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|63&r);return t}(e)},r.utf8decode=function(e){return o.nodebuffer?n.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,o,i,a=e.length,u=new Array(2*a);for(r=0,t=0;t<a;)if((o=e[t++])<128)u[r++]=o;else if((i=s[o])>4)u[r++]=65533,t+=i-1;else{for(o&=2===i?31:3===i?15:7;i>1&&t<a;)o=o<<6|63&e[t++],i--;i>1?u[r++]=65533:o<65536?u[r++]=o:(o-=65536,u[r++]=55296|o>>10&1023,u[r++]=56320|1023&o)}return u.length!==r&&(u.subarray?u=u.subarray(0,r):u.length=r),n.applyFromCharCode(u)}(e=n.transformTo(o.uint8array?\"uint8array\":\"array\",e))},n.inherits(c,a),c.prototype.processChunk=function(e){var t=n.transformTo(o.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(o.uint8array){var i=t;(t=new Uint8Array(i.length+this.leftOver.length)).set(this.leftOver,0),t.set(i,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var a=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+s[e[r]]>t?r:t}(t),u=t;a!==t.length&&(o.uint8array?(u=t.subarray(0,a),this.leftOver=t.subarray(a,t.length)):(u=t.slice(0,a),this.leftOver=t.slice(a,t.length))),this.push({data:r.utf8decode(u),meta:e.meta})},c.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=c,n.inherits(f,a),f.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=f},{\"./nodejsUtils\":357,\"./stream/GenericWorker\":371,\"./support\":373,\"./utils\":375}],375:[function(e,t,r){var n=e(\"./support\"),o=e(\"./base64\"),i=e(\"./nodejsUtils\"),a=e(\"set-immediate-shim\"),s=e(\"./external\");function u(e){return e}function c(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}r.newBlob=function(e,t){r.checkSupport(\"blob\");try{return new Blob([e],{type:t})}catch(r){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(e),n.getBlob(t)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var f={stringifyByChunk:function(e,t,r){var n=[],o=0,i=e.length;if(i<=r)return String.fromCharCode.apply(null,e);for(;o<i;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(o,Math.min(o+r,i)))):n.push(String.fromCharCode.apply(null,e.subarray(o,Math.min(o+r,i)))),o+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return n.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return n.nodebuffer&&1===String.fromCharCode.apply(null,i.allocBuffer(1)).length}catch(e){return!1}}()}};function l(e){var t=65536,n=r.getTypeOf(e),o=!0;if(\"uint8array\"===n?o=f.applyCanBeUsed.uint8array:\"nodebuffer\"===n&&(o=f.applyCanBeUsed.nodebuffer),o)for(;t>1;)try{return f.stringifyByChunk(e,n,t)}catch(e){t=Math.floor(t/2)}return f.stringifyByChar(e)}function h(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}r.applyFromCharCode=l;var d={};d.string={string:u,array:function(e){return c(e,new Array(e.length))},arraybuffer:function(e){return d.string.uint8array(e).buffer},uint8array:function(e){return c(e,new Uint8Array(e.length))},nodebuffer:function(e){return c(e,i.allocBuffer(e.length))}},d.array={string:l,array:u,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return i.newBufferFrom(e)}},d.arraybuffer={string:function(e){return l(new Uint8Array(e))},array:function(e){return h(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:u,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return i.newBufferFrom(new Uint8Array(e))}},d.uint8array={string:l,array:function(e){return h(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:u,nodebuffer:function(e){return i.newBufferFrom(e)}},d.nodebuffer={string:l,array:function(e){return h(e,new Array(e.length))},arraybuffer:function(e){return d.nodebuffer.uint8array(e).buffer},uint8array:function(e){return h(e,new Uint8Array(e.length))},nodebuffer:u},r.transformTo=function(e,t){if(t||(t=\"\"),!e)return t;r.checkSupport(e);var n=r.getTypeOf(t);return d[n][e](t)},r.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":n.nodebuffer&&i.isBuffer(e)?\"nodebuffer\":n.uint8array&&e instanceof Uint8Array?\"uint8array\":n.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},r.checkSupport=function(e){if(!n[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},r.MAX_VALUE_16BITS=65535,r.MAX_VALUE_32BITS=-1,r.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},r.delay=function(e,t,r){a((function(){e.apply(r||null,t||[])}))},r.inherits=function(e,t){var r=function(){};r.prototype=t.prototype,e.prototype=new r},r.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])arguments[e].hasOwnProperty(t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},r.prepareContent=function(e,t,i,a,u){return s.Promise.resolve(t).then((function(e){return n.blob&&(e instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(e)))&&\"undefined\"!=typeof FileReader?new s.Promise((function(t,r){var n=new FileReader;n.onload=function(e){t(e.target.result)},n.onerror=function(e){r(e.target.error)},n.readAsArrayBuffer(e)})):e})).then((function(t){var f,l=r.getTypeOf(t);return l?(\"arraybuffer\"===l?t=r.transformTo(\"uint8array\",t):\"string\"===l&&(u?t=o.decode(t):i&&!0!==a&&(t=c(f=t,n.uint8array?new Uint8Array(f.length):new Array(f.length)))),t):s.Promise.reject(new Error(\"Can't read the data of '\"+e+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))}))}},{\"./base64\":344,\"./external\":349,\"./nodejsUtils\":357,\"./support\":373,\"set-immediate-shim\":447}],376:[function(e,t,r){var n=e(\"./reader/readerFor\"),o=e(\"./utils\"),i=e(\"./signature\"),a=e(\"./zipEntry\"),s=(e(\"./utf8\"),e(\"./support\"));function u(e){this.files=[],this.loadOptions=e}u.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+o.pretty(t)+\", expected \"+o.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=s.uint8array?\"uint8array\":\"array\",r=o.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(i.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(i.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(i.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,i.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(i.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===o.MAX_VALUE_16BITS||this.diskWithCentralDirStart===o.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===o.MAX_VALUE_16BITS||this.centralDirRecords===o.MAX_VALUE_16BITS||this.centralDirSize===o.MAX_VALUE_32BITS||this.centralDirOffset===o.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(i.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(i.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,i.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(i.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(i.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(n>0)this.isSignature(t,i.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=u},{\"./reader/readerFor\":365,\"./signature\":366,\"./support\":373,\"./utf8\":374,\"./utils\":375,\"./zipEntry\":377}],377:[function(e,t,r){var n=e(\"./reader/readerFor\"),o=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),s=e(\"./utf8\"),u=e(\"./compressions\"),c=e(\"./support\");function f(e,t){this.options=e,this.loadOptions=t}f.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in u)if(u.hasOwnProperty(t)&&u[t].magic===e)return u[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+o.pretty(this.compressionMethod)+\" unknown (inner file : \"+o.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0===e&&(this.dosPermissions=63&this.externalFileAttributes),3===e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=n(this.extraFields[1].value);this.uncompressedSize===o.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===o.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===o.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===o.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,r,n,o=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index<o;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n}},handleUTF8:function(){var e=c.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=s.utf8decode(this.fileName),this.fileCommentStr=s.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=o.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=o.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)||a(this.fileName)!==t.readInt(4)?null:s.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)||a(this.fileComment)!==t.readInt(4)?null:s.utf8decode(t.readData(e.length-5))}return null}},t.exports=f},{\"./compressedObject\":345,\"./compressions\":346,\"./crc32\":347,\"./reader/readerFor\":365,\"./support\":373,\"./utf8\":374,\"./utils\":375}],378:[function(e,t,r){var n=e(\"./stream/StreamHelper\"),o=e(\"./stream/DataWorker\"),i=e(\"./utf8\"),a=e(\"./compressedObject\"),s=e(\"./stream/GenericWorker\"),u=function(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}};u.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var o=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var a=!this._dataBinary;a&&!o&&(t=t.pipe(new i.Utf8EncodeWorker)),!a&&o&&(t=t.pipe(new i.Utf8DecodeWorker))}catch(e){(t=new s(\"error\")).error(e)}return new n(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof a&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new i.Utf8EncodeWorker)),a.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof a?this._data.getContentWorker():this._data instanceof s?this._data:new o(this._data)}};for(var c=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],f=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},l=0;l<c.length;l++)u.prototype[c[l]]=f;t.exports=u},{\"./compressedObject\":345,\"./stream/DataWorker\":370,\"./stream/GenericWorker\":371,\"./stream/StreamHelper\":372,\"./utf8\":374}],379:[function(e,t,r){var n=e(\"immediate\");function o(){}var i={},a=[\"REJECTED\"],s=[\"FULFILLED\"],u=[\"PENDING\"];function c(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=u,this.queue=[],this.outcome=void 0,e!==o&&d(this,e)}function f(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function l(e,t,r){n((function(){var n;try{n=t(r)}catch(t){return i.reject(e,t)}n===e?i.reject(e,new TypeError(\"Cannot resolve promise with itself\")):i.resolve(e,n)}))}function h(e){var t=e&&e.then;if(e&&(\"object\"===_typeof2(e)||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(e,t){var r=!1;function n(t){r||(r=!0,i.reject(e,t))}function o(t){r||(r=!0,i.resolve(e,t))}var a=p((function(){t(o,n)}));\"error\"===a.status&&n(a.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}t.exports=c,c.prototype.finally=function(e){if(\"function\"!=typeof e)return this;var t=this.constructor;return this.then((function(r){return t.resolve(e()).then((function(){return r}))}),(function(r){return t.resolve(e()).then((function(){throw r}))}))},c.prototype.catch=function(e){return this.then(null,e)},c.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===s||\"function\"!=typeof t&&this.state===a)return this;var r=new this.constructor(o);this.state!==u?l(r,this.state===s?e:t,this.outcome):this.queue.push(new f(r,e,t));return r},f.prototype.callFulfilled=function(e){i.resolve(this.promise,e)},f.prototype.otherCallFulfilled=function(e){l(this.promise,this.onFulfilled,e)},f.prototype.callRejected=function(e){i.reject(this.promise,e)},f.prototype.otherCallRejected=function(e){l(this.promise,this.onRejected,e)},i.resolve=function(e,t){var r=p(h,t);if(\"error\"===r.status)return i.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=s,e.outcome=t;for(var o=-1,a=e.queue.length;++o<a;)e.queue[o].callFulfilled(t)}return e},i.reject=function(e,t){e.state=a,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},c.resolve=function(e){if(e instanceof this)return e;return i.resolve(new this(o),e)},c.reject=function(e){var t=new this(o);return i.reject(t,e)},c.all=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var a=new Array(r),s=0,u=-1,c=new this(o);for(;++u<r;)f(e[u],u);return c;function f(e,o){t.resolve(e).then((function(e){a[o]=e,++s!==r||n||(n=!0,i.resolve(c,a))}),(function(e){n||(n=!0,i.reject(c,e))}))}},c.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var a=-1,s=new this(o);for(;++a<r;)u=e[a],t.resolve(u).then((function(e){n||(n=!0,i.resolve(s,e))}),(function(e){n||(n=!0,i.reject(s,e))}));var u;return s}},{immediate:340}],380:[function(e,t,r){(function(e){var r=/[\\\\^$.*+?()[\\]{}|]/g,n=RegExp(r.source),o=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,i=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,a=o||i||Function(\"return this\")(),s=Object.prototype.toString,u=a.Symbol,c=u?u.prototype:void 0,f=c?c.toString:void 0;function l(e){if(\"string\"==typeof e)return e;if(function(e){return\"symbol\"==_typeof2(e)||function(e){return!!e&&\"object\"==_typeof2(e)}(e)&&\"[object Symbol]\"==s.call(e)}(e))return f?f.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}t.exports=function(e){var t;return(e=null==(t=e)?\"\":l(t))&&n.test(e)?e.replace(r,\"\\\\$&\"):e}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],381:[function(e,t,r){(function(e){var n=\"[object Arguments]\",o=\"[object Map]\",i=\"[object Object]\",a=\"[object Set]\",s=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,u=/^\\w*$/,c=/^\\./,f=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,l=/\\\\(\\\\)?/g,h=/^\\[object .+?Constructor\\]$/,d=/^(?:0|[1-9]\\d*)$/,p={};p[\"[object Float32Array]\"]=p[\"[object Float64Array]\"]=p[\"[object Int8Array]\"]=p[\"[object Int16Array]\"]=p[\"[object Int32Array]\"]=p[\"[object Uint8Array]\"]=p[\"[object Uint8ClampedArray]\"]=p[\"[object Uint16Array]\"]=p[\"[object Uint32Array]\"]=!0,p[n]=p[\"[object Array]\"]=p[\"[object ArrayBuffer]\"]=p[\"[object Boolean]\"]=p[\"[object DataView]\"]=p[\"[object Date]\"]=p[\"[object Error]\"]=p[\"[object Function]\"]=p[o]=p[\"[object Number]\"]=p[i]=p[\"[object RegExp]\"]=p[a]=p[\"[object String]\"]=p[\"[object WeakMap]\"]=!1;var y=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,m=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,b=y||m||Function(\"return this\")(),v=\"object\"==_typeof2(r)&&r&&!r.nodeType&&r,g=v&&\"object\"==_typeof2(t)&&t&&!t.nodeType&&t,w=g&&g.exports===v&&y.process,_=function(){try{return w&&w.binding(\"util\")}catch(e){}}(),k=_&&_.isTypedArray;function x(e,t,r,n){for(var o=-1,i=e?e.length:0;++o<i;){var a=e[o];t(n,a,r(a),e)}return n}function S(e,t){for(var r=-1,n=e?e.length:0;++r<n;)if(t(e[r],r,e))return!0;return!1}function O(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}function E(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function R(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}var j,T,C,P=Array.prototype,A=Function.prototype,M=Object.prototype,I=b[\"__core-js_shared__\"],N=(j=/[^.]+$/.exec(I&&I.keys&&I.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+j:\"\",D=A.toString,B=M.hasOwnProperty,F=M.toString,L=RegExp(\"^\"+D.call(B).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),z=b.Symbol,U=b.Uint8Array,H=M.propertyIsEnumerable,V=P.splice,W=(T=Object.keys,C=Object,function(e){return T(C(e))}),q=Ee(b,\"DataView\"),$=Ee(b,\"Map\"),X=Ee(b,\"Promise\"),K=Ee(b,\"Set\"),Y=Ee(b,\"WeakMap\"),Z=Ee(Object,\"create\"),G=Ie(q),J=Ie($),Q=Ie(X),ee=Ie(K),te=Ie(Y),re=z?z.prototype:void 0,ne=re?re.valueOf:void 0,oe=re?re.toString:void 0;function ie(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ae(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function se(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ue(e){var t=-1,r=e?e.length:0;for(this.__data__=new se;++t<r;)this.add(e[t])}function ce(e){this.__data__=new ae(e)}function fe(e,t){var r=Ue(e)||ze(e)?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],n=r.length,o=!!n;for(var i in e)!t&&!B.call(e,i)||o&&(\"length\"==i||je(i,n))||r.push(i);return r}function le(e,t){for(var r=e.length;r--;)if(Le(e[r][0],t))return r;return-1}function he(e,t,r,n){return ye(e,(function(e,o,i){t(n,e,r(e),i)})),n}ie.prototype.clear=function(){this.__data__=Z?Z(null):{}},ie.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},ie.prototype.get=function(e){var t=this.__data__;if(Z){var r=t[e];return\"__lodash_hash_undefined__\"===r?void 0:r}return B.call(t,e)?t[e]:void 0},ie.prototype.has=function(e){var t=this.__data__;return Z?void 0!==t[e]:B.call(t,e)},ie.prototype.set=function(e,t){return this.__data__[e]=Z&&void 0===t?\"__lodash_hash_undefined__\":t,this},ae.prototype.clear=function(){this.__data__=[]},ae.prototype.delete=function(e){var t=this.__data__,r=le(t,e);return!(r<0)&&(r==t.length-1?t.pop():V.call(t,r,1),!0)},ae.prototype.get=function(e){var t=this.__data__,r=le(t,e);return r<0?void 0:t[r][1]},ae.prototype.has=function(e){return le(this.__data__,e)>-1},ae.prototype.set=function(e,t){var r=this.__data__,n=le(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},se.prototype.clear=function(){this.__data__={hash:new ie,map:new($||ae),string:new ie}},se.prototype.delete=function(e){return Oe(this,e).delete(e)},se.prototype.get=function(e){return Oe(this,e).get(e)},se.prototype.has=function(e){return Oe(this,e).has(e)},se.prototype.set=function(e,t){return Oe(this,e).set(e,t),this},ue.prototype.add=ue.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},ue.prototype.has=function(e){return this.__data__.has(e)},ce.prototype.clear=function(){this.__data__=new ae},ce.prototype.delete=function(e){return this.__data__.delete(e)},ce.prototype.get=function(e){return this.__data__.get(e)},ce.prototype.has=function(e){return this.__data__.has(e)},ce.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ae){var n=r.__data__;if(!$||n.length<199)return n.push([e,t]),this;r=this.__data__=new se(n)}return r.set(e,t),this};var de,pe,ye=(de=function(e,t){return e&&me(e,t,Ye)},function(e,t){if(null==e)return e;if(!He(e))return de(e,t);for(var r=e.length,n=pe?r:-1,o=Object(e);(pe?n--:++n<r)&&!1!==t(o[n],n,o););return e}),me=function(e){return function(t,r,n){for(var o=-1,i=Object(t),a=n(t),s=a.length;s--;){var u=a[e?s:++o];if(!1===r(i[u],u,i))break}return t}}();function be(e,t){for(var r=0,n=(t=Te(t,e)?[t]:xe(t)).length;null!=e&&r<n;)e=e[Me(t[r++])];return r&&r==n?e:void 0}function ve(e,t){return null!=e&&t in Object(e)}function ge(e,t,r,s,u){return e===t||(null==e||null==t||!qe(e)&&!$e(t)?e!=e&&t!=t:function(e,t,r,s,u,c){var f=Ue(e),l=Ue(t),h=\"[object Array]\",d=\"[object Array]\";f||(h=(h=Re(e))==n?i:h);l||(d=(d=Re(t))==n?i:d);var p=h==i&&!O(e),y=d==i&&!O(t),m=h==d;if(m&&!p)return c||(c=new ce),f||Ke(e)?Se(e,t,r,s,u,c):function(e,t,r,n,i,s,u){switch(r){case\"[object DataView]\":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case\"[object ArrayBuffer]\":return!(e.byteLength!=t.byteLength||!n(new U(e),new U(t)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return Le(+e,+t);case\"[object Error]\":return e.name==t.name&&e.message==t.message;case\"[object RegExp]\":case\"[object String]\":return e==t+\"\";case o:var c=E;case a:var f=2&s;if(c||(c=R),e.size!=t.size&&!f)return!1;var l=u.get(e);if(l)return l==t;s|=1,u.set(e,t);var h=Se(c(e),c(t),n,i,s,u);return u.delete(e),h;case\"[object Symbol]\":if(ne)return ne.call(e)==ne.call(t)}return!1}(e,t,h,r,s,u,c);if(!(2&u)){var b=p&&B.call(e,\"__wrapped__\"),v=y&&B.call(t,\"__wrapped__\");if(b||v){var g=b?e.value():e,w=v?t.value():t;return c||(c=new ce),r(g,w,s,u,c)}}if(!m)return!1;return c||(c=new ce),function(e,t,r,n,o,i){var a=2&o,s=Ye(e),u=s.length,c=Ye(t).length;if(u!=c&&!a)return!1;var f=u;for(;f--;){var l=s[f];if(!(a?l in t:B.call(t,l)))return!1}var h=i.get(e);if(h&&i.get(t))return h==t;var d=!0;i.set(e,t),i.set(t,e);var p=a;for(;++f<u;){l=s[f];var y=e[l],m=t[l];if(n)var b=a?n(m,y,l,t,e,i):n(y,m,l,e,t,i);if(!(void 0===b?y===m||r(y,m,n,o,i):b)){d=!1;break}p||(p=\"constructor\"==l)}if(d&&!p){var v=e.constructor,g=t.constructor;v==g||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof v&&v instanceof v&&\"function\"==typeof g&&g instanceof g||(d=!1)}return i.delete(e),i.delete(t),d}(e,t,r,s,u,c)}(e,t,ge,r,s,u))}function we(e){return!(!qe(e)||function(e){return!!N&&N in e}(e))&&(Ve(e)||O(e)?L:h).test(Ie(e))}function _e(e){return\"function\"==typeof e?e:null==e?Ze:\"object\"==_typeof2(e)?Ue(e)?function(e,t){if(Te(e)&&Ce(t))return Pe(Me(e),t);return function(r){var n=function(e,t,r){var n=null==e?void 0:be(e,t);return void 0===n?r:n}(r,e);return void 0===n&&n===t?function(e,t){return null!=e&&function(e,t,r){t=Te(t,e)?[t]:xe(t);var n,o=-1,i=t.length;for(;++o<i;){var a=Me(t[o]);if(!(n=null!=e&&r(e,a)))break;e=e[a]}if(n)return n;return!!(i=e?e.length:0)&&We(i)&&je(a,i)&&(Ue(e)||ze(e))}(e,t,ve)}(r,e):ge(t,n,void 0,3)}}(e[0],e[1]):function(e){var t=function(e){var t=Ye(e),r=t.length;for(;r--;){var n=t[r],o=e[n];t[r]=[n,o,Ce(o)]}return t}(e);if(1==t.length&&t[0][2])return Pe(t[0][0],t[0][1]);return function(r){return r===e||function(e,t,r,n){var o=r.length,i=o,a=!n;if(null==e)return!i;for(e=Object(e);o--;){var s=r[o];if(a&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++o<i;){var u=(s=r[o])[0],c=e[u],f=s[1];if(a&&s[2]){if(void 0===c&&!(u in e))return!1}else{var l=new ce;if(n)var h=n(c,f,u,e,t,l);if(!(void 0===h?ge(f,c,n,3,l):h))return!1}}return!0}(r,e,t)}}(e):Te(t=e)?(r=Me(t),function(e){return null==e?void 0:e[r]}):function(e){return function(t){return be(t,e)}}(t);var t,r}function ke(e){if(r=(t=e)&&t.constructor,n=\"function\"==typeof r&&r.prototype||M,t!==n)return W(e);var t,r,n,o=[];for(var i in Object(e))B.call(e,i)&&\"constructor\"!=i&&o.push(i);return o}function xe(e){return Ue(e)?e:Ae(e)}function Se(e,t,r,n,o,i){var a=2&o,s=e.length,u=t.length;if(s!=u&&!(a&&u>s))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var f=-1,l=!0,h=1&o?new ue:void 0;for(i.set(e,t),i.set(t,e);++f<s;){var d=e[f],p=t[f];if(n)var y=a?n(p,d,f,t,e,i):n(d,p,f,e,t,i);if(void 0!==y){if(y)continue;l=!1;break}if(h){if(!S(t,(function(e,t){if(!h.has(t)&&(d===e||r(d,e,n,o,i)))return h.add(t)}))){l=!1;break}}else if(d!==p&&!r(d,p,n,o,i)){l=!1;break}}return i.delete(e),i.delete(t),l}function Oe(e,t){var r,n,o=e.__data__;return(\"string\"==(n=_typeof2(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function Ee(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return we(r)?r:void 0}var Re=function(e){return F.call(e)};function je(e,t){return!!(t=null==t?9007199254740991:t)&&(\"number\"==typeof e||d.test(e))&&e>-1&&e%1==0&&e<t}function Te(e,t){if(Ue(e))return!1;var r=_typeof2(e);return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=e&&!Xe(e))||(u.test(e)||!s.test(e)||null!=t&&e in Object(t))}function Ce(e){return e==e&&!qe(e)}function Pe(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}(q&&\"[object DataView]\"!=Re(new q(new ArrayBuffer(1)))||$&&Re(new $)!=o||X&&\"[object Promise]\"!=Re(X.resolve())||K&&Re(new K)!=a||Y&&\"[object WeakMap]\"!=Re(new Y))&&(Re=function(e){var t=F.call(e),r=t==i?e.constructor:void 0,n=r?Ie(r):void 0;if(n)switch(n){case G:return\"[object DataView]\";case J:return o;case Q:return\"[object Promise]\";case ee:return a;case te:return\"[object WeakMap]\"}return t});var Ae=Fe((function(e){var t;e=null==(t=e)?\"\":function(e){if(\"string\"==typeof e)return e;if(Xe(e))return oe?oe.call(e):\"\";var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}(t);var r=[];return c.test(e)&&r.push(\"\"),e.replace(f,(function(e,t,n,o){r.push(n?o.replace(l,\"$1\"):t||e)})),r}));function Me(e){if(\"string\"==typeof e||Xe(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-1/0?\"-0\":t}function Ie(e){if(null!=e){try{return D.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}var Ne,De,Be=(Ne=function(e,t,r){B.call(e,r)?e[r].push(t):e[r]=[t]},function(e,t){var r=Ue(e)?x:he,n=De?De():{};return r(e,Ne,_e(t),n)});function Fe(e,t){if(\"function\"!=typeof e||t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var r=function r(){var n=arguments,o=t?t.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var a=e.apply(this,n);return r.cache=i.set(o,a),a};return r.cache=new(Fe.Cache||se),r}function Le(e,t){return e===t||e!=e&&t!=t}function ze(e){return function(e){return $e(e)&&He(e)}(e)&&B.call(e,\"callee\")&&(!H.call(e,\"callee\")||F.call(e)==n)}Fe.Cache=se;var Ue=Array.isArray;function He(e){return null!=e&&We(e.length)&&!Ve(e)}function Ve(e){var t=qe(e)?F.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}function We(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function qe(e){var t=_typeof2(e);return!!e&&(\"object\"==t||\"function\"==t)}function $e(e){return!!e&&\"object\"==_typeof2(e)}function Xe(e){return\"symbol\"==_typeof2(e)||$e(e)&&\"[object Symbol]\"==F.call(e)}var Ke=k?function(e){return function(t){return e(t)}}(k):function(e){return $e(e)&&We(e.length)&&!!p[F.call(e)]};function Ye(e){return He(e)?fe(e):ke(e)}function Ze(e){return e}t.exports=Be}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],382:[function(e,t,r){var n=Object.prototype.toString;t.exports=function(e){return!0===e||!1===e||function(e){return!!e&&\"object\"==_typeof2(e)}(e)&&\"[object Boolean]\"==n.call(e)}},{}],383:[function(e,t,r){(function(e){var n=\"[object Arguments]\",o=\"[object Map]\",i=\"[object Object]\",a=\"[object Set]\",s=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,c={};c[\"[object Float32Array]\"]=c[\"[object Float64Array]\"]=c[\"[object Int8Array]\"]=c[\"[object Int16Array]\"]=c[\"[object Int32Array]\"]=c[\"[object Uint8Array]\"]=c[\"[object Uint8ClampedArray]\"]=c[\"[object Uint16Array]\"]=c[\"[object Uint32Array]\"]=!0,c[n]=c[\"[object Array]\"]=c[\"[object ArrayBuffer]\"]=c[\"[object Boolean]\"]=c[\"[object DataView]\"]=c[\"[object Date]\"]=c[\"[object Error]\"]=c[\"[object Function]\"]=c[o]=c[\"[object Number]\"]=c[i]=c[\"[object RegExp]\"]=c[a]=c[\"[object String]\"]=c[\"[object WeakMap]\"]=!1;var f=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,l=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,h=f||l||Function(\"return this\")(),d=\"object\"==_typeof2(r)&&r&&!r.nodeType&&r,p=d&&\"object\"==_typeof2(t)&&t&&!t.nodeType&&t,y=p&&p.exports===d,m=y&&f.process,b=function(){try{return m&&m.binding&&m.binding(\"util\")}catch(e){}}(),v=b&&b.isTypedArray;function g(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function w(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}function _(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}var k,x,S,O=Array.prototype,E=Function.prototype,R=Object.prototype,j=h[\"__core-js_shared__\"],T=E.toString,C=R.hasOwnProperty,P=(k=/[^.]+$/.exec(j&&j.keys&&j.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+k:\"\",A=R.toString,M=RegExp(\"^\"+T.call(C).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),I=y?h.Buffer:void 0,N=h.Symbol,D=h.Uint8Array,B=R.propertyIsEnumerable,F=O.splice,L=N?N.toStringTag:void 0,z=Object.getOwnPropertySymbols,U=I?I.isBuffer:void 0,H=(x=Object.keys,S=Object,function(e){return x(S(e))}),V=be(h,\"DataView\"),W=be(h,\"Map\"),q=be(h,\"Promise\"),$=be(h,\"Set\"),X=be(h,\"WeakMap\"),K=be(Object,\"create\"),Y=_e(V),Z=_e(W),G=_e(q),J=_e($),Q=_e(X),ee=N?N.prototype:void 0,te=ee?ee.valueOf:void 0;function re(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ne(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function ie(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new oe;++t<r;)this.add(e[t])}function ae(e){var t=this.__data__=new ne(e);this.size=t.size}function se(e,t){var r=Se(e),n=!r&&xe(e),o=!r&&!n&&Oe(e),i=!r&&!n&&!o&&Ce(e),a=r||n||o||i,s=a?function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}(e.length,String):[],u=s.length;for(var c in e)!t&&!C.call(e,c)||a&&(\"length\"==c||o&&(\"offset\"==c||\"parent\"==c)||i&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||we(c,u))||s.push(c);return s}function ue(e,t){for(var r=e.length;r--;)if(ke(e[r][0],t))return r;return-1}function ce(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":L&&L in Object(e)?function(e){var t=C.call(e,L),r=e[L];try{e[L]=void 0;var n=!0}catch(e){}var o=A.call(e);n&&(t?e[L]=r:delete e[L]);return o}(e):function(e){return A.call(e)}(e)}function fe(e){return Te(e)&&ce(e)==n}function le(e,t,r,s,u){return e===t||(null==e||null==t||!Te(e)&&!Te(t)?e!=e&&t!=t:function(e,t,r,s,u,c){var f=Se(e),l=Se(t),h=f?\"[object Array]\":ge(e),d=l?\"[object Array]\":ge(t),p=(h=h==n?i:h)==i,y=(d=d==n?i:d)==i,m=h==d;if(m&&Oe(e)){if(!Oe(t))return!1;f=!0,p=!1}if(m&&!p)return c||(c=new ae),f||Ce(e)?pe(e,t,r,s,u,c):function(e,t,r,n,i,s,u){switch(r){case\"[object DataView]\":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case\"[object ArrayBuffer]\":return!(e.byteLength!=t.byteLength||!s(new D(e),new D(t)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return ke(+e,+t);case\"[object Error]\":return e.name==t.name&&e.message==t.message;case\"[object RegExp]\":case\"[object String]\":return e==t+\"\";case o:var c=w;case a:var f=1&n;if(c||(c=_),e.size!=t.size&&!f)return!1;var l=u.get(e);if(l)return l==t;n|=2,u.set(e,t);var h=pe(c(e),c(t),n,i,s,u);return u.delete(e),h;case\"[object Symbol]\":if(te)return te.call(e)==te.call(t)}return!1}(e,t,h,r,s,u,c);if(!(1&r)){var b=p&&C.call(e,\"__wrapped__\"),v=y&&C.call(t,\"__wrapped__\");if(b||v){var g=b?e.value():e,k=v?t.value():t;return c||(c=new ae),u(g,k,r,s,c)}}if(!m)return!1;return c||(c=new ae),function(e,t,r,n,o,i){var a=1&r,s=ye(e),u=s.length,c=ye(t).length;if(u!=c&&!a)return!1;var f=u;for(;f--;){var l=s[f];if(!(a?l in t:C.call(t,l)))return!1}var h=i.get(e);if(h&&i.get(t))return h==t;var d=!0;i.set(e,t),i.set(t,e);var p=a;for(;++f<u;){l=s[f];var y=e[l],m=t[l];if(n)var b=a?n(m,y,l,t,e,i):n(y,m,l,e,t,i);if(!(void 0===b?y===m||o(y,m,r,n,i):b)){d=!1;break}p||(p=\"constructor\"==l)}if(d&&!p){var v=e.constructor,g=t.constructor;v==g||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof v&&v instanceof v&&\"function\"==typeof g&&g instanceof g||(d=!1)}return i.delete(e),i.delete(t),d}(e,t,r,s,u,c)}(e,t,r,s,le,u))}function he(e){return!(!je(e)||function(e){return!!P&&P in e}(e))&&(Ee(e)?M:s).test(_e(e))}function de(e){if(r=(t=e)&&t.constructor,n=\"function\"==typeof r&&r.prototype||R,t!==n)return H(e);var t,r,n,o=[];for(var i in Object(e))C.call(e,i)&&\"constructor\"!=i&&o.push(i);return o}function pe(e,t,r,n,o,i){var a=1&r,s=e.length,u=t.length;if(s!=u&&!(a&&u>s))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var f=-1,l=!0,h=2&r?new ie:void 0;for(i.set(e,t),i.set(t,e);++f<s;){var d=e[f],p=t[f];if(n)var y=a?n(p,d,f,t,e,i):n(d,p,f,e,t,i);if(void 0!==y){if(y)continue;l=!1;break}if(h){if(!g(t,(function(e,t){if(a=t,!h.has(a)&&(d===e||o(d,e,r,n,i)))return h.push(t);var a}))){l=!1;break}}else if(d!==p&&!o(d,p,r,n,i)){l=!1;break}}return i.delete(e),i.delete(t),l}function ye(e){return function(e,t,r){var n=t(e);return Se(e)?n:function(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e}(n,r(e))}(e,Pe,ve)}function me(e,t){var r,n,o=e.__data__;return(\"string\"==(n=_typeof2(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function be(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return he(r)?r:void 0}re.prototype.clear=function(){this.__data__=K?K(null):{},this.size=0},re.prototype.delete=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},re.prototype.get=function(e){var t=this.__data__;if(K){var r=t[e];return\"__lodash_hash_undefined__\"===r?void 0:r}return C.call(t,e)?t[e]:void 0},re.prototype.has=function(e){var t=this.__data__;return K?void 0!==t[e]:C.call(t,e)},re.prototype.set=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=K&&void 0===t?\"__lodash_hash_undefined__\":t,this},ne.prototype.clear=function(){this.__data__=[],this.size=0},ne.prototype.delete=function(e){var t=this.__data__,r=ue(t,e);return!(r<0)&&(r==t.length-1?t.pop():F.call(t,r,1),--this.size,!0)},ne.prototype.get=function(e){var t=this.__data__,r=ue(t,e);return r<0?void 0:t[r][1]},ne.prototype.has=function(e){return ue(this.__data__,e)>-1},ne.prototype.set=function(e,t){var r=this.__data__,n=ue(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},oe.prototype.clear=function(){this.size=0,this.__data__={hash:new re,map:new(W||ne),string:new re}},oe.prototype.delete=function(e){var t=me(this,e).delete(e);return this.size-=t?1:0,t},oe.prototype.get=function(e){return me(this,e).get(e)},oe.prototype.has=function(e){return me(this,e).has(e)},oe.prototype.set=function(e,t){var r=me(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},ie.prototype.add=ie.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},ie.prototype.has=function(e){return this.__data__.has(e)},ae.prototype.clear=function(){this.__data__=new ne,this.size=0},ae.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},ae.prototype.get=function(e){return this.__data__.get(e)},ae.prototype.has=function(e){return this.__data__.has(e)},ae.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ne){var n=r.__data__;if(!W||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new oe(n)}return r.set(e,t),this.size=r.size,this};var ve=z?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,i=[];++r<n;){var a=e[r];t(a,r,e)&&(i[o++]=a)}return i}(z(e),(function(t){return B.call(e,t)})))}:function(){return[]},ge=ce;function we(e,t){return!!(t=null==t?9007199254740991:t)&&(\"number\"==typeof e||u.test(e))&&e>-1&&e%1==0&&e<t}function _e(e){if(null!=e){try{return T.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}function ke(e,t){return e===t||e!=e&&t!=t}(V&&\"[object DataView]\"!=ge(new V(new ArrayBuffer(1)))||W&&ge(new W)!=o||q&&\"[object Promise]\"!=ge(q.resolve())||$&&ge(new $)!=a||X&&\"[object WeakMap]\"!=ge(new X))&&(ge=function(e){var t=ce(e),r=t==i?e.constructor:void 0,n=r?_e(r):\"\";if(n)switch(n){case Y:return\"[object DataView]\";case Z:return o;case G:return\"[object Promise]\";case J:return a;case Q:return\"[object WeakMap]\"}return t});var xe=fe(function(){return arguments}())?fe:function(e){return Te(e)&&C.call(e,\"callee\")&&!B.call(e,\"callee\")},Se=Array.isArray;var Oe=U||function(){return!1};function Ee(e){if(!je(e))return!1;var t=ce(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}function Re(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function je(e){var t=_typeof2(e);return null!=e&&(\"object\"==t||\"function\"==t)}function Te(e){return null!=e&&\"object\"==_typeof2(e)}var Ce=v?function(e){return function(t){return e(t)}}(v):function(e){return Te(e)&&Re(e.length)&&!!c[ce(e)]};function Pe(e){return null!=(t=e)&&Re(t.length)&&!Ee(t)?se(e):de(e);var t}t.exports=function(e,t){return le(e,t)}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],384:[function(e,t,r){(function(e){var r=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,n=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,o=r||n||Function(\"return this\")(),i=Object.prototype,a=i.hasOwnProperty,s=i.toString,u=o.Symbol,c=u?u.toStringTag:void 0;function f(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":c&&c in Object(e)?function(e){var t=a.call(e,c),r=e[c];try{e[c]=void 0;var n=!0}catch(e){}var o=s.call(e);n&&(t?e[c]=r:delete e[c]);return o}(e):function(e){return s.call(e)}(e)}t.exports=function(e){if(!function(e){var t=_typeof2(e);return null!=e&&(\"object\"==t||\"function\"==t)}(e))return!1;var t=f(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],385:[function(e,t,r){t.exports=function(e){return null==e}},{}],386:[function(e,t,r){t.exports=function(e){return void 0===e}},{}],387:[function(e,t,r){(function(e){var r=/^\\[object .+?Constructor\\]$/,n=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,o=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,i=n||o||Function(\"return this\")();function a(e,t){return!!(e?e.length:0)&&function(e,t,r){if(t!=t)return function(e,t,r,n){var o=e.length,i=r+(n?1:-1);for(;n?i--:++i<o;)if(t(e[i],i,e))return i;return-1}(e,u,r);var n=r-1,o=e.length;for(;++n<o;)if(e[n]===t)return n;return-1}(e,t,0)>-1}function s(e,t,r){for(var n=-1,o=e?e.length:0;++n<o;)if(r(t,e[n]))return!0;return!1}function u(e){return e!=e}function c(e,t){return e.has(t)}function f(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}var l,h=Array.prototype,d=Function.prototype,p=Object.prototype,y=i[\"__core-js_shared__\"],m=(l=/[^.]+$/.exec(y&&y.keys&&y.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+l:\"\",b=d.toString,v=p.hasOwnProperty,g=p.toString,w=RegExp(\"^\"+b.call(v).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),_=h.splice,k=M(i,\"Map\"),x=M(i,\"Set\"),S=M(Object,\"create\");function O(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function E(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function R(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function j(e){var t=-1,r=e?e.length:0;for(this.__data__=new R;++t<r;)this.add(e[t])}function T(e,t){for(var r,n,o=e.length;o--;)if((r=e[o][0])===(n=t)||r!=r&&n!=n)return o;return-1}function C(e){return!(!I(e)||(t=e,m&&m in t))&&(function(e){var t=I(e)?g.call(e):\"\";return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t}(e)||function(e){var t=!1;if(null!=e&&\"function\"!=typeof e.toString)try{t=!!(e+\"\")}catch(e){}return t}(e)?w:r).test(function(e){if(null!=e){try{return b.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(e));var t}O.prototype.clear=function(){this.__data__=S?S(null):{}},O.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},O.prototype.get=function(e){var t=this.__data__;if(S){var r=t[e];return\"__lodash_hash_undefined__\"===r?void 0:r}return v.call(t,e)?t[e]:void 0},O.prototype.has=function(e){var t=this.__data__;return S?void 0!==t[e]:v.call(t,e)},O.prototype.set=function(e,t){return this.__data__[e]=S&&void 0===t?\"__lodash_hash_undefined__\":t,this},E.prototype.clear=function(){this.__data__=[]},E.prototype.delete=function(e){var t=this.__data__,r=T(t,e);return!(r<0)&&(r==t.length-1?t.pop():_.call(t,r,1),!0)},E.prototype.get=function(e){var t=this.__data__,r=T(t,e);return r<0?void 0:t[r][1]},E.prototype.has=function(e){return T(this.__data__,e)>-1},E.prototype.set=function(e,t){var r=this.__data__,n=T(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},R.prototype.clear=function(){this.__data__={hash:new O,map:new(k||E),string:new O}},R.prototype.delete=function(e){return A(this,e).delete(e)},R.prototype.get=function(e){return A(this,e).get(e)},R.prototype.has=function(e){return A(this,e).has(e)},R.prototype.set=function(e,t){return A(this,e).set(e,t),this},j.prototype.add=j.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},j.prototype.has=function(e){return this.__data__.has(e)};var P=x&&1/f(new x([,-0]))[1]==1/0?function(e){return new x(e)}:function(){};function A(e,t){var r,n,o=e.__data__;return(\"string\"==(n=_typeof2(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function M(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return C(r)?r:void 0}function I(e){var t=_typeof2(e);return!!e&&(\"object\"==t||\"function\"==t)}t.exports=function(e){return e&&e.length?function(e,t,r){var n=-1,o=a,i=e.length,u=!0,l=[],h=l;if(r)u=!1,o=s;else if(i>=200){var d=t?null:P(e);if(d)return f(d);u=!1,o=c,h=new j}else h=t?[]:l;e:for(;++n<i;){var p=e[n],y=t?t(p):p;if(p=r||0!==p?p:0,u&&y==y){for(var m=h.length;m--;)if(h[m]===y)continue e;t&&h.push(y),l.push(p)}else o(h,y,r)||(h!==l&&h.push(y),l.push(p))}return l}(e):[]}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],388:[function(e,t,r){var n=e(\"inherits\"),o=e(\"hash-base\"),i=e(\"safe-buffer\").Buffer,a=new Array(16);function s(){o.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function u(e,t){return e<<t|e>>>32-t}function c(e,t,r,n,o,i,a){return u(e+(t&r|~t&n)+o+i|0,a)+t|0}function f(e,t,r,n,o,i,a){return u(e+(t&n|r&~n)+o+i|0,a)+t|0}function l(e,t,r,n,o,i,a){return u(e+(t^r^n)+o+i|0,a)+t|0}function h(e,t,r,n,o,i,a){return u(e+(r^(t|~n))+o+i|0,a)+t|0}n(s,o),s.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var r=this._a,n=this._b,o=this._c,i=this._d;r=c(r,n,o,i,e[0],3614090360,7),i=c(i,r,n,o,e[1],3905402710,12),o=c(o,i,r,n,e[2],606105819,17),n=c(n,o,i,r,e[3],3250441966,22),r=c(r,n,o,i,e[4],4118548399,7),i=c(i,r,n,o,e[5],1200080426,12),o=c(o,i,r,n,e[6],2821735955,17),n=c(n,o,i,r,e[7],4249261313,22),r=c(r,n,o,i,e[8],1770035416,7),i=c(i,r,n,o,e[9],2336552879,12),o=c(o,i,r,n,e[10],4294925233,17),n=c(n,o,i,r,e[11],2304563134,22),r=c(r,n,o,i,e[12],1804603682,7),i=c(i,r,n,o,e[13],4254626195,12),o=c(o,i,r,n,e[14],2792965006,17),r=f(r,n=c(n,o,i,r,e[15],1236535329,22),o,i,e[1],4129170786,5),i=f(i,r,n,o,e[6],3225465664,9),o=f(o,i,r,n,e[11],643717713,14),n=f(n,o,i,r,e[0],3921069994,20),r=f(r,n,o,i,e[5],3593408605,5),i=f(i,r,n,o,e[10],38016083,9),o=f(o,i,r,n,e[15],3634488961,14),n=f(n,o,i,r,e[4],3889429448,20),r=f(r,n,o,i,e[9],568446438,5),i=f(i,r,n,o,e[14],3275163606,9),o=f(o,i,r,n,e[3],4107603335,14),n=f(n,o,i,r,e[8],1163531501,20),r=f(r,n,o,i,e[13],2850285829,5),i=f(i,r,n,o,e[2],4243563512,9),o=f(o,i,r,n,e[7],1735328473,14),r=l(r,n=f(n,o,i,r,e[12],2368359562,20),o,i,e[5],4294588738,4),i=l(i,r,n,o,e[8],2272392833,11),o=l(o,i,r,n,e[11],1839030562,16),n=l(n,o,i,r,e[14],4259657740,23),r=l(r,n,o,i,e[1],2763975236,4),i=l(i,r,n,o,e[4],1272893353,11),o=l(o,i,r,n,e[7],4139469664,16),n=l(n,o,i,r,e[10],3200236656,23),r=l(r,n,o,i,e[13],681279174,4),i=l(i,r,n,o,e[0],3936430074,11),o=l(o,i,r,n,e[3],3572445317,16),n=l(n,o,i,r,e[6],76029189,23),r=l(r,n,o,i,e[9],3654602809,4),i=l(i,r,n,o,e[12],3873151461,11),o=l(o,i,r,n,e[15],530742520,16),r=h(r,n=l(n,o,i,r,e[2],3299628645,23),o,i,e[0],4096336452,6),i=h(i,r,n,o,e[7],1126891415,10),o=h(o,i,r,n,e[14],2878612391,15),n=h(n,o,i,r,e[5],4237533241,21),r=h(r,n,o,i,e[12],1700485571,6),i=h(i,r,n,o,e[3],2399980690,10),o=h(o,i,r,n,e[10],4293915773,15),n=h(n,o,i,r,e[1],2240044497,21),r=h(r,n,o,i,e[8],1873313359,6),i=h(i,r,n,o,e[15],4264355552,10),o=h(o,i,r,n,e[6],2734768916,15),n=h(n,o,i,r,e[13],1309151649,21),r=h(r,n,o,i,e[4],4149444226,6),i=h(i,r,n,o,e[11],3174756917,10),o=h(o,i,r,n,e[2],718787259,15),n=h(n,o,i,r,e[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+o|0,this._d=this._d+i|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=i.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},t.exports=s},{\"hash-base\":325,inherits:341,\"safe-buffer\":445}],389:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"brorand\");function i(e){this.rand=e||new o.Rand}t.exports=i,i.create=function(e){return new i(e)},i.prototype._randbelow=function(e){var t=e.bitLength(),r=Math.ceil(t/8);do{var o=new n(this.rand.generate(r))}while(o.cmp(e)>=0);return o},i.prototype._randrange=function(e,t){var r=t.sub(e);return e.add(this._randbelow(r))},i.prototype.test=function(e,t,r){var o=e.bitLength(),i=n.mont(e),a=new n(1).toRed(i);t||(t=Math.max(1,o/48|0));for(var s=e.subn(1),u=0;!s.testn(u);u++);for(var c=e.shrn(u),f=s.toRed(i);t>0;t--){var l=this._randrange(new n(2),s);r&&r(l);var h=l.toRed(i).redPow(c);if(0!==h.cmp(a)&&0!==h.cmp(f)){for(var d=1;d<u;d++){if(0===(h=h.redSqr()).cmp(a))return!1;if(0===h.cmp(f))break}if(d===u)return!1}}return!0},i.prototype.getDivisor=function(e,t){var r=e.bitLength(),o=n.mont(e),i=new n(1).toRed(o);t||(t=Math.max(1,r/48|0));for(var a=e.subn(1),s=0;!a.testn(s);s++);for(var u=e.shrn(s),c=a.toRed(o);t>0;t--){var f=this._randrange(new n(2),a),l=e.gcd(f);if(0!==l.cmpn(1))return l;var h=f.toRed(o).redPow(u);if(0!==h.cmp(i)&&0!==h.cmp(c)){for(var d=1;d<s;d++){if(0===(h=h.redSqr()).cmp(i))return h.fromRed().subn(1).gcd(e);if(0===h.cmp(c))break}if(d===s)return(h=h.redSqr()).fromRed().subn(1).gcd(e)}}return!1}},{\"bn.js\":156,brorand:157}],390:[function(e,t,r){function n(e,t){if(!e)throw new Error(t||\"Assertion failed\")}t.exports=n,n.equal=function(e,t,r){if(e!=t)throw new Error(r||\"Assertion failed: \"+e+\" != \"+t)}},{}],391:[function(e,t,r){var n=r;function o(e){return 1===e.length?\"0\"+e:e}function i(e){for(var t=\"\",r=0;r<e.length;r++)t+=o(e[r].toString(16));return t}n.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if(\"string\"!=typeof e){for(var n=0;n<e.length;n++)r[n]=0|e[n];return r}if(\"hex\"===t){(e=e.replace(/[^a-z0-9]+/gi,\"\")).length%2!=0&&(e=\"0\"+e);for(n=0;n<e.length;n+=2)r.push(parseInt(e[n]+e[n+1],16))}else for(n=0;n<e.length;n++){var o=e.charCodeAt(n),i=o>>8,a=255&o;i?r.push(i,a):r.push(a)}return r},n.zero2=o,n.toHex=i,n.encode=function(e,t){return\"hex\"===t?i(e):e}},{}],392:[function(e,t,r){var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":393,\"./lib/inflate\":394,\"./lib/utils/common\":395,\"./lib/zlib/constants\":398}],393:[function(e,t,r){var n=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),i=e(\"./utils/strings\"),a=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString;function c(e){if(!(this instanceof c))return new c(e);this.options=o.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=n.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==r)throw new Error(a[r]);if(t.header&&n.deflateSetHeader(this.strm,t.header),t.dictionary){var f;if(f=\"string\"==typeof t.dictionary?i.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(r=n.deflateSetDictionary(this.strm,f)))throw new Error(a[r]);this._dict_set=!0}}function f(e,t){var r=new c(t);if(r.push(e,!0),r.err)throw r.msg||a[r.err];return r.result}c.prototype.push=function(e,t){var r,a,s=this.strm,c=this.options.chunkSize;if(this.ended)return!1;a=t===~~t?t:!0===t?4:0,\"string\"==typeof e?s.input=i.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;do{if(0===s.avail_out&&(s.output=new o.Buf8(c),s.next_out=0,s.avail_out=c),1!==(r=n.deflate(s,a))&&0!==r)return this.onEnd(r),this.ended=!0,!1;0!==s.avail_out&&(0!==s.avail_in||4!==a&&2!==a)||(\"string\"===this.options.to?this.onData(i.buf2binstring(o.shrinkBuf(s.output,s.next_out))):this.onData(o.shrinkBuf(s.output,s.next_out)))}while((s.avail_in>0||0===s.avail_out)&&1!==r);return 4===a?(r=n.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,0===r):2!==a||(this.onEnd(0),s.avail_out=0,!0)},c.prototype.onData=function(e){this.chunks.push(e)},c.prototype.onEnd=function(e){0===e&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=c,r.deflate=f,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,f(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,f(e,t)}},{\"./utils/common\":395,\"./utils/strings\":396,\"./zlib/deflate\":400,\"./zlib/messages\":405,\"./zlib/zstream\":407}],394:[function(e,t,r){var n=e(\"./zlib/inflate\"),o=e(\"./utils/common\"),i=e(\"./utils/strings\"),a=e(\"./zlib/constants\"),s=e(\"./zlib/messages\"),u=e(\"./zlib/zstream\"),c=e(\"./zlib/gzheader\"),f=Object.prototype.toString;function l(e){if(!(this instanceof l))return new l(e);this.options=o.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new u,this.strm.avail_out=0;var r=n.inflateInit2(this.strm,t.windowBits);if(r!==a.Z_OK)throw new Error(s[r]);if(this.header=new c,n.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=i.string2buf(t.dictionary):\"[object ArrayBuffer]\"===f.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=n.inflateSetDictionary(this.strm,t.dictionary))!==a.Z_OK))throw new Error(s[r])}function h(e,t){var r=new l(t);if(r.push(e,!0),r.err)throw r.msg||s[r.err];return r.result}l.prototype.push=function(e,t){var r,s,u,c,l,h=this.strm,d=this.options.chunkSize,p=this.options.dictionary,y=!1;if(this.ended)return!1;s=t===~~t?t:!0===t?a.Z_FINISH:a.Z_NO_FLUSH,\"string\"==typeof e?h.input=i.binstring2buf(e):\"[object ArrayBuffer]\"===f.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new o.Buf8(d),h.next_out=0,h.avail_out=d),(r=n.inflate(h,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&p&&(r=n.inflateSetDictionary(this.strm,p)),r===a.Z_BUF_ERROR&&!0===y&&(r=a.Z_OK,y=!1),r!==a.Z_STREAM_END&&r!==a.Z_OK)return this.onEnd(r),this.ended=!0,!1;h.next_out&&(0!==h.avail_out&&r!==a.Z_STREAM_END&&(0!==h.avail_in||s!==a.Z_FINISH&&s!==a.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(u=i.utf8border(h.output,h.next_out),c=h.next_out-u,l=i.buf2string(h.output,u),h.next_out=c,h.avail_out=d-c,c&&o.arraySet(h.output,h.output,u,c,0),this.onData(l)):this.onData(o.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(y=!0)}while((h.avail_in>0||0===h.avail_out)&&r!==a.Z_STREAM_END);return r===a.Z_STREAM_END&&(s=a.Z_FINISH),s===a.Z_FINISH?(r=n.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===a.Z_OK):s!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),h.avail_out=0,!0)},l.prototype.onData=function(e){this.chunks.push(e)},l.prototype.onEnd=function(e){e===a.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=l,r.inflate=h,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,h(e,t)},r.ungzip=h},{\"./utils/common\":395,\"./utils/strings\":396,\"./zlib/constants\":398,\"./zlib/gzheader\":401,\"./zlib/inflate\":403,\"./zlib/messages\":405,\"./zlib/zstream\":407}],395:[function(e,t,r){var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!==_typeof2(r))throw new TypeError(r+\"must be non-object\");for(var n in r)o(r,n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,o){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),o);else for(var i=0;i<n;i++)e[o+i]=t[r+i]},flattenChunks:function(e){var t,r,n,o,i,a;for(n=0,t=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),o=0,t=0,r=e.length;t<r;t++)i=e[t],a.set(i,o),o+=i.length;return a}},a={arraySet:function(e,t,r,n,o){for(var i=0;i<n;i++)e[o+i]=t[r+i]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,a))},r.setTyped(n)},{}],396:[function(e,t,r){var n=e(\"./common\"),o=!0,i=!0;try{String.fromCharCode.apply(null,[0])}catch(e){o=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){i=!1}for(var a=new n.Buf8(256),s=0;s<256;s++)a[s]=s>=252?6:s>=248?5:s>=240?4:s>=224?3:s>=192?2:1;function u(e,t){if(t<65534&&(e.subarray&&i||!e.subarray&&o))return String.fromCharCode.apply(null,n.shrinkBuf(e,t));for(var r=\"\",a=0;a<t;a++)r+=String.fromCharCode(e[a]);return r}a[254]=a[254]=1,r.string2buf=function(e){var t,r,o,i,a,s=e.length,u=0;for(i=0;i<s;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(o=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(o-56320),i++),u+=r<128?1:r<2048?2:r<65536?3:4;for(t=new n.Buf8(u),a=0,i=0;a<u;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<s&&56320==(64512&(o=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(o-56320),i++),r<128?t[a++]=r:r<2048?(t[a++]=192|r>>>6,t[a++]=128|63&r):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|63&r):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|63&r);return t},r.buf2binstring=function(e){return u(e,e.length)},r.binstring2buf=function(e){for(var t=new n.Buf8(e.length),r=0,o=t.length;r<o;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,o,i,s=t||e.length,c=new Array(2*s);for(n=0,r=0;r<s;)if((o=e[r++])<128)c[n++]=o;else if((i=a[o])>4)c[n++]=65533,r+=i-1;else{for(o&=2===i?31:3===i?15:7;i>1&&r<s;)o=o<<6|63&e[r++],i--;i>1?c[n++]=65533:o<65536?c[n++]=o:(o-=65536,c[n++]=55296|o>>10&1023,c[n++]=56320|1023&o)}return u(c,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}},{\"./common\":395}],397:[function(e,t,r){t.exports=function(e,t,r,n){for(var o=65535&e|0,i=e>>>16&65535|0,a=0;0!==r;){r-=a=r>2e3?2e3:r;do{i=i+(o=o+t[n++]|0)|0}while(--a);o%=65521,i%=65521}return o|i<<16|0}},{}],398:[function(e,t,r){t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],399:[function(e,t,r){var n=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,o){var i=n,a=o+r;e^=-1;for(var s=o;s<a;s++)e=e>>>8^i[255&(e^t[s])];return-1^e}},{}],400:[function(e,t,r){var n,o=e(\"../utils/common\"),i=e(\"./trees\"),a=e(\"./adler32\"),s=e(\"./crc32\"),u=e(\"./messages\");function c(e,t){return e.msg=u[t],t}function f(e){return(e<<1)-(e>4?9:0)}function l(e){for(var t=e.length;--t>=0;)e[t]=0}function h(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(o.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function d(e,t){i._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,h(e.strm)}function p(e,t){e.pending_buf[e.pending++]=t}function y(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function m(e,t){var r,n,o=e.max_chain_length,i=e.strstart,a=e.prev_length,s=e.nice_match,u=e.strstart>e.w_size-262?e.strstart-(e.w_size-262):0,c=e.window,f=e.w_mask,l=e.prev,h=e.strstart+258,d=c[i+a-1],p=c[i+a];e.prev_length>=e.good_match&&(o>>=2),s>e.lookahead&&(s=e.lookahead);do{if(c[(r=t)+a]===p&&c[r+a-1]===d&&c[r]===c[i]&&c[++r]===c[i+1]){i+=2,r++;do{}while(c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&i<h);if(n=258-(h-i),i=h-258,n>a){if(e.match_start=t,a=n,n>=s)break;d=c[i+a-1],p=c[i+a]}}}while((t=l[t&f])>u&&0!=--o);return a<=e.lookahead?a:e.lookahead}function b(e){var t,r,n,i,u,c,f,l,h,d,p=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-262)){o.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0}while(--r);i+=p}if(0===e.strm.avail_in)break;if(c=e.strm,f=e.window,l=e.strstart+e.lookahead,h=i,d=void 0,(d=c.avail_in)>h&&(d=h),r=0===d?0:(c.avail_in-=d,o.arraySet(f,c.input,c.next_in,d,l),1===c.state.wrap?c.adler=a(c.adler,f,d,l):2===c.state.wrap&&(c.adler=s(c.adler,f,d,l)),c.next_in+=d,c.total_in+=d,d),e.lookahead+=r,e.lookahead+e.insert>=3)for(u=e.strstart-e.insert,e.ins_h=e.window[u],e.ins_h=(e.ins_h<<e.hash_shift^e.window[u+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[u+3-1])&e.hash_mask,e.prev[u&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=u,u++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<262&&0!==e.strm.avail_in)}function v(e,t){for(var r,n;;){if(e.lookahead<262){if(b(e),e.lookahead<262&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-262&&(e.match_length=m(e,r)),e.match_length>=3)if(n=i._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}function g(e,t){for(var r,n,o;;){if(e.lookahead<262){if(b(e),e.lookahead<262&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-262&&(e.match_length=m(e,r),e.match_length<=5&&(1===e.strategy||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){o=e.strstart+e.lookahead-3,n=i._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=o&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(d(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if((n=i._tr_tally(e,0,e.window[e.strstart-1]))&&d(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=i._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}function w(e,t,r,n,o){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=o}function _(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=8,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new o.Buf16(1146),this.dyn_dtree=new o.Buf16(122),this.bl_tree=new o.Buf16(78),l(this.dyn_ltree),l(this.dyn_dtree),l(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new o.Buf16(16),this.heap=new o.Buf16(573),l(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new o.Buf16(573),l(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function k(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:113,e.adler=2===t.wrap?0:1,t.last_flush=0,i._tr_init(t),0):c(e,-2)}function x(e){var t,r=k(e);return 0===r&&((t=e.state).window_size=2*t.w_size,l(t.head),t.max_lazy_match=n[t.level].max_lazy,t.good_match=n[t.level].good_length,t.nice_match=n[t.level].nice_length,t.max_chain_length=n[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=2,t.match_available=0,t.ins_h=0),r}function S(e,t,r,n,i,a){if(!e)return-2;var s=1;if(-1===t&&(t=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),i<1||i>9||8!==r||n<8||n>15||t<0||t>9||a<0||a>4)return c(e,-2);8===n&&(n=9);var u=new _;return e.state=u,u.strm=e,u.wrap=s,u.gzhead=null,u.w_bits=n,u.w_size=1<<u.w_bits,u.w_mask=u.w_size-1,u.hash_bits=i+7,u.hash_size=1<<u.hash_bits,u.hash_mask=u.hash_size-1,u.hash_shift=~~((u.hash_bits+3-1)/3),u.window=new o.Buf8(2*u.w_size),u.head=new o.Buf16(u.hash_size),u.prev=new o.Buf16(u.w_size),u.lit_bufsize=1<<i+6,u.pending_buf_size=4*u.lit_bufsize,u.pending_buf=new o.Buf8(u.pending_buf_size),u.d_buf=1*u.lit_bufsize,u.l_buf=3*u.lit_bufsize,u.level=t,u.strategy=a,u.method=r,x(e)}n=[new w(0,0,0,0,(function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(b(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,d(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-262&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(d(e,!1),e.strm.avail_out),1)})),new w(4,4,8,4,v),new w(4,5,16,8,v),new w(4,6,32,32,v),new w(4,4,16,16,g),new w(8,16,32,32,g),new w(8,16,128,128,g),new w(8,32,128,256,g),new w(32,128,258,1024,g),new w(32,258,258,4096,g)],r.deflateInit=function(e,t){return S(e,t,8,15,8,0)},r.deflateInit2=S,r.deflateReset=x,r.deflateResetKeep=k,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?-2:(e.state.gzhead=t,0):-2},r.deflate=function(e,t){var r,o,a,u;if(!e||!e.state||t>5||t<0)return e?c(e,-2):-2;if(o=e.state,!e.output||!e.input&&0!==e.avail_in||666===o.status&&4!==t)return c(e,0===e.avail_out?-5:-2);if(o.strm=e,r=o.last_flush,o.last_flush=t,42===o.status)if(2===o.wrap)e.adler=0,p(o,31),p(o,139),p(o,8),o.gzhead?(p(o,(o.gzhead.text?1:0)+(o.gzhead.hcrc?2:0)+(o.gzhead.extra?4:0)+(o.gzhead.name?8:0)+(o.gzhead.comment?16:0)),p(o,255&o.gzhead.time),p(o,o.gzhead.time>>8&255),p(o,o.gzhead.time>>16&255),p(o,o.gzhead.time>>24&255),p(o,9===o.level?2:o.strategy>=2||o.level<2?4:0),p(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(p(o,255&o.gzhead.extra.length),p(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(e.adler=s(e.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=69):(p(o,0),p(o,0),p(o,0),p(o,0),p(o,0),p(o,9===o.level?2:o.strategy>=2||o.level<2?4:0),p(o,3),o.status=113);else{var m=8+(o.w_bits-8<<4)<<8;m|=(o.strategy>=2||o.level<2?0:o.level<6?1:6===o.level?2:3)<<6,0!==o.strstart&&(m|=32),m+=31-m%31,o.status=113,y(o,m),0!==o.strstart&&(y(o,e.adler>>>16),y(o,65535&e.adler)),e.adler=1}if(69===o.status)if(o.gzhead.extra){for(a=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),h(e),a=o.pending,o.pending!==o.pending_buf_size));)p(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=73)}else o.status=73;if(73===o.status)if(o.gzhead.name){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),h(e),a=o.pending,o.pending===o.pending_buf_size)){u=1;break}u=o.gzindex<o.gzhead.name.length?255&o.gzhead.name.charCodeAt(o.gzindex++):0,p(o,u)}while(0!==u);o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===u&&(o.gzindex=0,o.status=91)}else o.status=91;if(91===o.status)if(o.gzhead.comment){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),h(e),a=o.pending,o.pending===o.pending_buf_size)){u=1;break}u=o.gzindex<o.gzhead.comment.length?255&o.gzhead.comment.charCodeAt(o.gzindex++):0,p(o,u)}while(0!==u);o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===u&&(o.status=103)}else o.status=103;if(103===o.status&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&h(e),o.pending+2<=o.pending_buf_size&&(p(o,255&e.adler),p(o,e.adler>>8&255),e.adler=0,o.status=113)):o.status=113),0!==o.pending){if(h(e),0===e.avail_out)return o.last_flush=-1,0}else if(0===e.avail_in&&f(t)<=f(r)&&4!==t)return c(e,-5);if(666===o.status&&0!==e.avail_in)return c(e,-5);if(0!==e.avail_in||0!==o.lookahead||0!==t&&666!==o.status){var v=2===o.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(b(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}(o,t):3===o.strategy?function(e,t){for(var r,n,o,a,s=e.window;;){if(e.lookahead<=258){if(b(e),e.lookahead<=258&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=s[o=e.strstart-1])===s[++o]&&n===s[++o]&&n===s[++o]){a=e.strstart+258;do{}while(n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&o<a);e.match_length=258-(a-o),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=i._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}(o,t):n[o.level].func(o,t);if(3!==v&&4!==v||(o.status=666),1===v||3===v)return 0===e.avail_out&&(o.last_flush=-1),0;if(2===v&&(1===t?i._tr_align(o):5!==t&&(i._tr_stored_block(o,0,0,!1),3===t&&(l(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),h(e),0===e.avail_out))return o.last_flush=-1,0}return 4!==t?0:o.wrap<=0?1:(2===o.wrap?(p(o,255&e.adler),p(o,e.adler>>8&255),p(o,e.adler>>16&255),p(o,e.adler>>24&255),p(o,255&e.total_in),p(o,e.total_in>>8&255),p(o,e.total_in>>16&255),p(o,e.total_in>>24&255)):(y(o,e.adler>>>16),y(o,65535&e.adler)),h(e),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?0:1)},r.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&103!==t&&113!==t&&666!==t?c(e,-2):(e.state=null,113===t?c(e,-3):0):-2},r.deflateSetDictionary=function(e,t){var r,n,i,s,u,c,f,h,d=t.length;if(!e||!e.state)return-2;if(2===(s=(r=e.state).wrap)||1===s&&42!==r.status||r.lookahead)return-2;for(1===s&&(e.adler=a(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(l(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new o.Buf8(r.w_size),o.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),u=e.avail_in,c=e.next_in,f=e.input,e.avail_in=d,e.next_in=0,e.input=t,b(r);r.lookahead>=3;){n=r.strstart,i=r.lookahead-2;do{r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+3-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++}while(--i);r.strstart=n,r.lookahead=2,b(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=c,e.input=f,e.avail_in=u,r.wrap=s,0},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":395,\"./adler32\":397,\"./crc32\":399,\"./messages\":405,\"./trees\":406}],401:[function(e,t,r){t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],402:[function(e,t,r){t.exports=function(e,t){var r,n,o,i,a,s,u,c,f,l,h,d,p,y,m,b,v,g,w,_,k,x,S,O,E;r=e.state,n=e.next_in,O=e.input,o=n+(e.avail_in-5),i=e.next_out,E=e.output,a=i-(t-e.avail_out),s=i+(e.avail_out-257),u=r.dmax,c=r.wsize,f=r.whave,l=r.wnext,h=r.window,d=r.hold,p=r.bits,y=r.lencode,m=r.distcode,b=(1<<r.lenbits)-1,v=(1<<r.distbits)-1;e:do{p<15&&(d+=O[n++]<<p,p+=8,d+=O[n++]<<p,p+=8),g=y[d&b];t:for(;;){if(d>>>=w=g>>>24,p-=w,0===(w=g>>>16&255))E[i++]=65535&g;else{if(!(16&w)){if(0==(64&w)){g=y[(65535&g)+(d&(1<<w)-1)];continue t}if(32&w){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}_=65535&g,(w&=15)&&(p<w&&(d+=O[n++]<<p,p+=8),_+=d&(1<<w)-1,d>>>=w,p-=w),p<15&&(d+=O[n++]<<p,p+=8,d+=O[n++]<<p,p+=8),g=m[d&v];r:for(;;){if(d>>>=w=g>>>24,p-=w,!(16&(w=g>>>16&255))){if(0==(64&w)){g=m[(65535&g)+(d&(1<<w)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&g,p<(w&=15)&&(d+=O[n++]<<p,(p+=8)<w&&(d+=O[n++]<<p,p+=8)),(k+=d&(1<<w)-1)>u){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=w,p-=w,k>(w=i-a)){if((w=k-w)>f&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(x=0,S=h,0===l){if(x+=c-w,w<_){_-=w;do{E[i++]=h[x++]}while(--w);x=i-k,S=E}}else if(l<w){if(x+=c+l-w,(w-=l)<_){_-=w;do{E[i++]=h[x++]}while(--w);if(x=0,l<_){_-=w=l;do{E[i++]=h[x++]}while(--w);x=i-k,S=E}}}else if(x+=l-w,w<_){_-=w;do{E[i++]=h[x++]}while(--w);x=i-k,S=E}for(;_>2;)E[i++]=S[x++],E[i++]=S[x++],E[i++]=S[x++],_-=3;_&&(E[i++]=S[x++],_>1&&(E[i++]=S[x++]))}else{x=i-k;do{E[i++]=E[x++],E[i++]=E[x++],E[i++]=E[x++],_-=3}while(_>2);_&&(E[i++]=E[x++],_>1&&(E[i++]=E[x++]))}break}}break}}while(n<o&&i<s);n-=_=p>>3,d&=(1<<(p-=_<<3))-1,e.next_in=n,e.next_out=i,e.avail_in=n<o?o-n+5:5-(n-o),e.avail_out=i<s?s-i+257:257-(i-s),r.hold=d,r.bits=p}},{}],403:[function(e,t,r){var n=e(\"../utils/common\"),o=e(\"./adler32\"),i=e(\"./crc32\"),a=e(\"./inffast\"),s=e(\"./inftrees\");function u(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function c(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(852),t.distcode=t.distdyn=new n.Buf32(592),t.sane=1,t.back=-1,0):-2}function l(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,f(e)):-2}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?-2:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,l(e))):-2}function d(e,t){var r,n;return e?(n=new c,e.state=n,n.window=null,0!==(r=h(e,t))&&(e.state=null),r):-2}var p,y,m=!0;function b(e){if(m){var t;for(p=new n.Buf32(512),y=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(1,e.lens,0,288,p,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(2,e.lens,0,32,y,0,e.work,{bits:5}),m=!1}e.lencode=p,e.lenbits=9,e.distcode=y,e.distbits=5}function v(e,t,r,o){var i,a=e.state;return null===a.window&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new n.Buf8(a.wsize)),o>=a.wsize?(n.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):((i=a.wsize-a.wnext)>o&&(i=o),n.arraySet(a.window,t,r-o,i,a.wnext),(o-=i)?(n.arraySet(a.window,t,r-o,o,0),a.wnext=o,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0}r.inflateReset=l,r.inflateReset2=h,r.inflateResetKeep=f,r.inflateInit=function(e){return d(e,15)},r.inflateInit2=d,r.inflate=function(e,t){var r,c,f,l,h,d,p,y,m,g,w,_,k,x,S,O,E,R,j,T,C,P,A,M,I=0,N=new n.Buf8(4),D=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return-2;12===(r=e.state).mode&&(r.mode=13),h=e.next_out,f=e.output,p=e.avail_out,l=e.next_in,c=e.input,d=e.avail_in,y=r.hold,m=r.bits,g=d,w=p,P=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;m<16;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(2&r.wrap&&35615===y){r.check=0,N[0]=255&y,N[1]=y>>>8&255,r.check=i(r.check,N,2,0),y=0,m=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&y)<<8)+(y>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&y)){e.msg=\"unknown compression method\",r.mode=30;break}if(m-=4,C=8+(15&(y>>>=4)),0===r.wbits)r.wbits=C;else if(C>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<C,e.adler=r.check=1,r.mode=512&y?10:12,y=0,m=0;break;case 2:for(;m<16;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(r.flags=y,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=y>>8&1),512&r.flags&&(N[0]=255&y,N[1]=y>>>8&255,r.check=i(r.check,N,2,0)),y=0,m=0,r.mode=3;case 3:for(;m<32;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}r.head&&(r.head.time=y),512&r.flags&&(N[0]=255&y,N[1]=y>>>8&255,N[2]=y>>>16&255,N[3]=y>>>24&255,r.check=i(r.check,N,4,0)),y=0,m=0,r.mode=4;case 4:for(;m<16;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}r.head&&(r.head.xflags=255&y,r.head.os=y>>8),512&r.flags&&(N[0]=255&y,N[1]=y>>>8&255,r.check=i(r.check,N,2,0)),y=0,m=0,r.mode=5;case 5:if(1024&r.flags){for(;m<16;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}r.length=y,r.head&&(r.head.extra_len=y),512&r.flags&&(N[0]=255&y,N[1]=y>>>8&255,r.check=i(r.check,N,2,0)),y=0,m=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&((_=r.length)>d&&(_=d),_&&(r.head&&(C=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,c,l,_,C)),512&r.flags&&(r.check=i(r.check,c,_,l)),d-=_,l+=_,r.length-=_),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===d)break e;_=0;do{C=c[l+_++],r.head&&C&&r.length<65536&&(r.head.name+=String.fromCharCode(C))}while(C&&_<d);if(512&r.flags&&(r.check=i(r.check,c,_,l)),d-=_,l+=_,C)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===d)break e;_=0;do{C=c[l+_++],r.head&&C&&r.length<65536&&(r.head.comment+=String.fromCharCode(C))}while(C&&_<d);if(512&r.flags&&(r.check=i(r.check,c,_,l)),d-=_,l+=_,C)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;m<16;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(y!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}y=0,m=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;m<32;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}e.adler=r.check=u(y),y=0,m=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=h,e.avail_out=p,e.next_in=l,e.avail_in=d,r.hold=y,r.bits=m,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){y>>>=7&m,m-=7&m,r.mode=27;break}for(;m<3;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}switch(r.last=1&y,m-=1,3&(y>>>=1)){case 0:r.mode=14;break;case 1:if(b(r),r.mode=20,6===t){y>>>=2,m-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}y>>>=2,m-=2;break;case 14:for(y>>>=7&m,m-=7&m;m<32;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if((65535&y)!=(y>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&y,y=0,m=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(_=r.length){if(_>d&&(_=d),_>p&&(_=p),0===_)break e;n.arraySet(f,c,l,_,h),d-=_,l+=_,p-=_,h+=_,r.length-=_;break}r.mode=12;break;case 17:for(;m<14;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(r.nlen=257+(31&y),y>>>=5,m-=5,r.ndist=1+(31&y),y>>>=5,m-=5,r.ncode=4+(15&y),y>>>=4,m-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;m<3;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}r.lens[D[r.have++]]=7&y,y>>>=3,m-=3}for(;r.have<19;)r.lens[D[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,A={bits:r.lenbits},P=s(0,r.lens,0,19,r.lencode,0,r.work,A),r.lenbits=A.bits,P){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;O=(I=r.lencode[y&(1<<r.lenbits)-1])>>>16&255,E=65535&I,!((S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(E<16)y>>>=S,m-=S,r.lens[r.have++]=E;else{if(16===E){for(M=S+2;m<M;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(y>>>=S,m-=S,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}C=r.lens[r.have-1],_=3+(3&y),y>>>=2,m-=2}else if(17===E){for(M=S+3;m<M;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}m-=S,C=0,_=3+(7&(y>>>=S)),y>>>=3,m-=3}else{for(M=S+7;m<M;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}m-=S,C=0,_=11+(127&(y>>>=S)),y>>>=7,m-=7}if(r.have+_>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;_--;)r.lens[r.have++]=C}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,A={bits:r.lenbits},P=s(1,r.lens,0,r.nlen,r.lencode,0,r.work,A),r.lenbits=A.bits,P){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,A={bits:r.distbits},P=s(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,A),r.distbits=A.bits,P){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(d>=6&&p>=258){e.next_out=h,e.avail_out=p,e.next_in=l,e.avail_in=d,r.hold=y,r.bits=m,a(e,w),h=e.next_out,f=e.output,p=e.avail_out,l=e.next_in,c=e.input,d=e.avail_in,y=r.hold,m=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;O=(I=r.lencode[y&(1<<r.lenbits)-1])>>>16&255,E=65535&I,!((S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(O&&0==(240&O)){for(R=S,j=O,T=E;O=(I=r.lencode[T+((y&(1<<R+j)-1)>>R)])>>>16&255,E=65535&I,!(R+(S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}y>>>=R,m-=R,r.back+=R}if(y>>>=S,m-=S,r.back+=S,r.length=E,0===O){r.mode=26;break}if(32&O){r.back=-1,r.mode=12;break}if(64&O){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&O,r.mode=22;case 22:if(r.extra){for(M=r.extra;m<M;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}r.length+=y&(1<<r.extra)-1,y>>>=r.extra,m-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;O=(I=r.distcode[y&(1<<r.distbits)-1])>>>16&255,E=65535&I,!((S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(0==(240&O)){for(R=S,j=O,T=E;O=(I=r.distcode[T+((y&(1<<R+j)-1)>>R)])>>>16&255,E=65535&I,!(R+(S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}y>>>=R,m-=R,r.back+=R}if(y>>>=S,m-=S,r.back+=S,64&O){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=E,r.extra=15&O,r.mode=24;case 24:if(r.extra){for(M=r.extra;m<M;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}r.offset+=y&(1<<r.extra)-1,y>>>=r.extra,m-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===p)break e;if(_=w-p,r.offset>_){if((_=r.offset-_)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}_>r.wnext?(_-=r.wnext,k=r.wsize-_):k=r.wnext-_,_>r.length&&(_=r.length),x=r.window}else x=f,k=h-r.offset,_=r.length;_>p&&(_=p),p-=_,r.length-=_;do{f[h++]=x[k++]}while(--_);0===r.length&&(r.mode=21);break;case 26:if(0===p)break e;f[h++]=r.length,p--,r.mode=21;break;case 27:if(r.wrap){for(;m<32;){if(0===d)break e;d--,y|=c[l++]<<m,m+=8}if(w-=p,e.total_out+=w,r.total+=w,w&&(e.adler=r.check=r.flags?i(r.check,f,w,h-w):o(r.check,f,w,h-w)),w=p,(r.flags?y:u(y))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}y=0,m=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;m<32;){if(0===d)break e;d--,y+=c[l++]<<m,m+=8}if(y!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}y=0,m=0}r.mode=29;case 29:P=1;break e;case 30:P=-3;break e;case 31:return-4;case 32:default:return-2}return e.next_out=h,e.avail_out=p,e.next_in=l,e.avail_in=d,r.hold=y,r.bits=m,(r.wsize||w!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&v(e,e.output,e.next_out,w-e.avail_out)?(r.mode=31,-4):(g-=e.avail_in,w-=e.avail_out,e.total_in+=g,e.total_out+=w,r.total+=w,r.wrap&&w&&(e.adler=r.check=r.flags?i(r.check,f,w,e.next_out-w):o(r.check,f,w,e.next_out-w)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0===g&&0===w||4===t)&&0===P&&(P=-5),P)},r.inflateEnd=function(e){if(!e||!e.state)return-2;var t=e.state;return t.window&&(t.window=null),e.state=null,0},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?-2:(r.head=t,t.done=!1,0):-2},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?-2:11===r.mode&&o(1,t,n,0)!==r.check?-3:v(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,0):-2},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":395,\"./adler32\":397,\"./crc32\":399,\"./inffast\":402,\"./inftrees\":404}],404:[function(e,t,r){var n=e(\"../utils/common\"),o=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],i=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],a=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],s=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,u,c,f,l,h){var d,p,y,m,b,v,g,w,_,k=h.bits,x=0,S=0,O=0,E=0,R=0,j=0,T=0,C=0,P=0,A=0,M=null,I=0,N=new n.Buf16(16),D=new n.Buf16(16),B=null,F=0;for(x=0;x<=15;x++)N[x]=0;for(S=0;S<u;S++)N[t[r+S]]++;for(R=k,E=15;E>=1&&0===N[E];E--);if(R>E&&(R=E),0===E)return c[f++]=20971520,c[f++]=20971520,h.bits=1,0;for(O=1;O<E&&0===N[O];O++);for(R<O&&(R=O),C=1,x=1;x<=15;x++)if(C<<=1,(C-=N[x])<0)return-1;if(C>0&&(0===e||1!==E))return-1;for(D[1]=0,x=1;x<15;x++)D[x+1]=D[x]+N[x];for(S=0;S<u;S++)0!==t[r+S]&&(l[D[t[r+S]]++]=S);if(0===e?(M=B=l,v=19):1===e?(M=o,I-=257,B=i,F-=257,v=256):(M=a,B=s,v=-1),A=0,S=0,x=O,b=f,j=R,T=0,y=-1,m=(P=1<<R)-1,1===e&&P>852||2===e&&P>592)return 1;for(;;){g=x-T,l[S]<v?(w=0,_=l[S]):l[S]>v?(w=B[F+l[S]],_=M[I+l[S]]):(w=96,_=0),d=1<<x-T,O=p=1<<j;do{c[b+(A>>T)+(p-=d)]=g<<24|w<<16|_|0}while(0!==p);for(d=1<<x-1;A&d;)d>>=1;if(0!==d?(A&=d-1,A+=d):A=0,S++,0==--N[x]){if(x===E)break;x=t[r+l[S]]}if(x>R&&(A&m)!==y){for(0===T&&(T=R),b+=O,C=1<<(j=x-T);j+T<E&&!((C-=N[j+T])<=0);)j++,C<<=1;if(P+=1<<j,1===e&&P>852||2===e&&P>592)return 1;c[y=A&m]=R<<24|j<<16|b-f|0}}return 0!==A&&(c[b+A]=x-T<<24|64<<16|0),h.bits=R,0}},{\"../utils/common\":395}],405:[function(e,t,r){t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],406:[function(e,t,r){var n=e(\"../utils/common\");function o(e){for(var t=e.length;--t>=0;)e[t]=0}var i=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],a=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],c=new Array(576);o(c);var f=new Array(60);o(f);var l=new Array(512);o(l);var h=new Array(256);o(h);var d=new Array(29);o(d);var p,y,m,b=new Array(30);function v(e,t,r,n,o){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=o,this.has_stree=e&&e.length}function g(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function w(e){return e<256?l[e]:l[256+(e>>>7)]}function _(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function k(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<<e.bi_valid&65535,_(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function x(e,t,r){k(e,r[2*t],r[2*t+1])}function S(e,t){var r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1}function O(e,t,r){var n,o,i=new Array(16),a=0;for(n=1;n<=15;n++)i[n]=a=a+r[n-1]<<1;for(o=0;o<=t;o++){var s=e[2*o+1];0!==s&&(e[2*o]=S(i[s]++,s))}}function E(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function R(e){e.bi_valid>8?_(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function j(e,t,r,n){var o=2*t,i=2*r;return e[o]<e[i]||e[o]===e[i]&&n[t]<=n[r]}function T(e,t,r){for(var n=e.heap[r],o=r<<1;o<=e.heap_len&&(o<e.heap_len&&j(t,e.heap[o+1],e.heap[o],e.depth)&&o++,!j(t,n,e.heap[o],e.depth));)e.heap[r]=e.heap[o],r=o,o<<=1;e.heap[r]=n}function C(e,t,r){var n,o,s,u,c=0;if(0!==e.last_lit)do{n=e.pending_buf[e.d_buf+2*c]<<8|e.pending_buf[e.d_buf+2*c+1],o=e.pending_buf[e.l_buf+c],c++,0===n?x(e,o,t):(x(e,(s=h[o])+256+1,t),0!==(u=i[s])&&k(e,o-=d[s],u),x(e,s=w(--n),r),0!==(u=a[s])&&k(e,n-=b[s],u))}while(c<e.last_lit);x(e,256,t)}function P(e,t){var r,n,o,i=t.dyn_tree,a=t.stat_desc.static_tree,s=t.stat_desc.has_stree,u=t.stat_desc.elems,c=-1;for(e.heap_len=0,e.heap_max=573,r=0;r<u;r++)0!==i[2*r]?(e.heap[++e.heap_len]=c=r,e.depth[r]=0):i[2*r+1]=0;for(;e.heap_len<2;)i[2*(o=e.heap[++e.heap_len]=c<2?++c:0)]=1,e.depth[o]=0,e.opt_len--,s&&(e.static_len-=a[2*o+1]);for(t.max_code=c,r=e.heap_len>>1;r>=1;r--)T(e,i,r);o=u;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],T(e,i,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,i[2*o]=i[2*r]+i[2*n],e.depth[o]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,i[2*r+1]=i[2*n+1]=o,e.heap[1]=o++,T(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,o,i,a,s,u=t.dyn_tree,c=t.max_code,f=t.stat_desc.static_tree,l=t.stat_desc.has_stree,h=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,y=0;for(i=0;i<=15;i++)e.bl_count[i]=0;for(u[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)(i=u[2*u[2*(n=e.heap[r])+1]+1]+1)>p&&(i=p,y++),u[2*n+1]=i,n>c||(e.bl_count[i]++,a=0,n>=d&&(a=h[n-d]),s=u[2*n],e.opt_len+=s*(i+a),l&&(e.static_len+=s*(f[2*n+1]+a)));if(0!==y){do{for(i=p-1;0===e.bl_count[i];)i--;e.bl_count[i]--,e.bl_count[i+1]+=2,e.bl_count[p]--,y-=2}while(y>0);for(i=p;0!==i;i--)for(n=e.bl_count[i];0!==n;)(o=e.heap[--r])>c||(u[2*o+1]!==i&&(e.opt_len+=(i-u[2*o+1])*u[2*o],u[2*o+1]=i),n--)}}(e,t),O(i,c,e.bl_count)}function A(e,t,r){var n,o,i=-1,a=t[1],s=0,u=7,c=4;for(0===a&&(u=138,c=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)o=a,a=t[2*(n+1)+1],++s<u&&o===a||(s<c?e.bl_tree[2*o]+=s:0!==o?(o!==i&&e.bl_tree[2*o]++,e.bl_tree[32]++):s<=10?e.bl_tree[34]++:e.bl_tree[36]++,s=0,i=o,0===a?(u=138,c=3):o===a?(u=6,c=3):(u=7,c=4))}function M(e,t,r){var n,o,i=-1,a=t[1],s=0,u=7,c=4;for(0===a&&(u=138,c=3),n=0;n<=r;n++)if(o=a,a=t[2*(n+1)+1],!(++s<u&&o===a)){if(s<c)do{x(e,o,e.bl_tree)}while(0!=--s);else 0!==o?(o!==i&&(x(e,o,e.bl_tree),s--),x(e,16,e.bl_tree),k(e,s-3,2)):s<=10?(x(e,17,e.bl_tree),k(e,s-3,3)):(x(e,18,e.bl_tree),k(e,s-11,7));s=0,i=o,0===a?(u=138,c=3):o===a?(u=6,c=3):(u=7,c=4)}}o(b);var I=!1;function N(e,t,r,o){k(e,0+(o?1:0),3),function(e,t,r,o){R(e),o&&(_(e,r),_(e,~r)),n.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){I||(!function(){var e,t,r,n,o,u=new Array(16);for(r=0,n=0;n<28;n++)for(d[n]=r,e=0;e<1<<i[n];e++)h[r++]=n;for(h[r-1]=n,o=0,n=0;n<16;n++)for(b[n]=o,e=0;e<1<<a[n];e++)l[o++]=n;for(o>>=7;n<30;n++)for(b[n]=o<<7,e=0;e<1<<a[n]-7;e++)l[256+o++]=n;for(t=0;t<=15;t++)u[t]=0;for(e=0;e<=143;)c[2*e+1]=8,e++,u[8]++;for(;e<=255;)c[2*e+1]=9,e++,u[9]++;for(;e<=279;)c[2*e+1]=7,e++,u[7]++;for(;e<=287;)c[2*e+1]=8,e++,u[8]++;for(O(c,287,u),e=0;e<30;e++)f[2*e+1]=5,f[2*e]=S(e,5);p=new v(c,i,257,286,15),y=new v(f,a,0,30,15),m=new v(new Array(0),s,0,19,7)}(),I=!0),e.l_desc=new g(e.dyn_ltree,p),e.d_desc=new g(e.dyn_dtree,y),e.bl_desc=new g(e.bl_tree,m),e.bi_buf=0,e.bi_valid=0,E(e)},r._tr_stored_block=N,r._tr_flush_block=function(e,t,r,n){var o,i,a=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),P(e,e.l_desc),P(e,e.d_desc),a=function(e){var t;for(A(e,e.dyn_ltree,e.l_desc.max_code),A(e,e.dyn_dtree,e.d_desc.max_code),P(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*u[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(i=e.static_len+3+7>>>3)<=o&&(o=i)):o=i=r+5,r+4<=o&&-1!==t?N(e,t,r,n):4===e.strategy||i===o?(k(e,2+(n?1:0),3),C(e,c,f)):(k(e,4+(n?1:0),3),function(e,t,r,n){var o;for(k(e,t-257,5),k(e,r-1,5),k(e,n-4,4),o=0;o<n;o++)k(e,e.bl_tree[2*u[o]+1],3);M(e,e.dyn_ltree,t-1),M(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),C(e,e.dyn_ltree,e.dyn_dtree)),E(e),n&&R(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(h[r]+256+1)]++,e.dyn_dtree[2*w(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){k(e,2,3),x(e,256,c),function(e){16===e.bi_valid?(_(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":395}],407:[function(e,t,r){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],408:[function(e,t,r){t.exports={\"2.16.840.1.101.3.4.1.1\":\"aes-128-ecb\",\"2.16.840.1.101.3.4.1.2\":\"aes-128-cbc\",\"2.16.840.1.101.3.4.1.3\":\"aes-128-ofb\",\"2.16.840.1.101.3.4.1.4\":\"aes-128-cfb\",\"2.16.840.1.101.3.4.1.21\":\"aes-192-ecb\",\"2.16.840.1.101.3.4.1.22\":\"aes-192-cbc\",\"2.16.840.1.101.3.4.1.23\":\"aes-192-ofb\",\"2.16.840.1.101.3.4.1.24\":\"aes-192-cfb\",\"2.16.840.1.101.3.4.1.41\":\"aes-256-ecb\",\"2.16.840.1.101.3.4.1.42\":\"aes-256-cbc\",\"2.16.840.1.101.3.4.1.43\":\"aes-256-ofb\",\"2.16.840.1.101.3.4.1.44\":\"aes-256-cfb\"}},{}],409:[function(e,t,r){var n=e(\"asn1.js\");r.certificate=e(\"./certificate\");var o=n.define(\"RSAPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"modulus\").int(),this.key(\"publicExponent\").int(),this.key(\"privateExponent\").int(),this.key(\"prime1\").int(),this.key(\"prime2\").int(),this.key(\"exponent1\").int(),this.key(\"exponent2\").int(),this.key(\"coefficient\").int())}));r.RSAPrivateKey=o;var i=n.define(\"RSAPublicKey\",(function(){this.seq().obj(this.key(\"modulus\").int(),this.key(\"publicExponent\").int())}));r.RSAPublicKey=i;var a=n.define(\"SubjectPublicKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").use(s),this.key(\"subjectPublicKey\").bitstr())}));r.PublicKey=a;var s=n.define(\"AlgorithmIdentifier\",(function(){this.seq().obj(this.key(\"algorithm\").objid(),this.key(\"none\").null_().optional(),this.key(\"curve\").objid().optional(),this.key(\"params\").seq().obj(this.key(\"p\").int(),this.key(\"q\").int(),this.key(\"g\").int()).optional())})),u=n.define(\"PrivateKeyInfo\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"algorithm\").use(s),this.key(\"subjectPrivateKey\").octstr())}));r.PrivateKey=u;var c=n.define(\"EncryptedPrivateKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").seq().obj(this.key(\"id\").objid(),this.key(\"decrypt\").seq().obj(this.key(\"kde\").seq().obj(this.key(\"id\").objid(),this.key(\"kdeparams\").seq().obj(this.key(\"salt\").octstr(),this.key(\"iters\").int())),this.key(\"cipher\").seq().obj(this.key(\"algo\").objid(),this.key(\"iv\").octstr()))),this.key(\"subjectPrivateKey\").octstr())}));r.EncryptedPrivateKey=c;var f=n.define(\"DSAPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"p\").int(),this.key(\"q\").int(),this.key(\"g\").int(),this.key(\"pub_key\").int(),this.key(\"priv_key\").int())}));r.DSAPrivateKey=f,r.DSAparam=n.define(\"DSAparam\",(function(){this.int()}));var l=n.define(\"ECPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"privateKey\").octstr(),this.key(\"parameters\").optional().explicit(0).use(h),this.key(\"publicKey\").optional().explicit(1).bitstr())}));r.ECPrivateKey=l;var h=n.define(\"ECParameters\",(function(){this.choice({namedCurve:this.objid()})}));r.signature=n.define(\"signature\",(function(){this.seq().obj(this.key(\"r\").int(),this.key(\"s\").int())}))},{\"./certificate\":410,\"asn1.js\":141}],410:[function(e,t,r){var n=e(\"asn1.js\"),o=n.define(\"Time\",(function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})})),i=n.define(\"AttributeTypeValue\",(function(){this.seq().obj(this.key(\"type\").objid(),this.key(\"value\").any())})),a=n.define(\"AlgorithmIdentifier\",(function(){this.seq().obj(this.key(\"algorithm\").objid(),this.key(\"parameters\").optional(),this.key(\"curve\").objid().optional())})),s=n.define(\"SubjectPublicKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").use(a),this.key(\"subjectPublicKey\").bitstr())})),u=n.define(\"RelativeDistinguishedName\",(function(){this.setof(i)})),c=n.define(\"RDNSequence\",(function(){this.seqof(u)})),f=n.define(\"Name\",(function(){this.choice({rdnSequence:this.use(c)})})),l=n.define(\"Validity\",(function(){this.seq().obj(this.key(\"notBefore\").use(o),this.key(\"notAfter\").use(o))})),h=n.define(\"Extension\",(function(){this.seq().obj(this.key(\"extnID\").objid(),this.key(\"critical\").bool().def(!1),this.key(\"extnValue\").octstr())})),d=n.define(\"TBSCertificate\",(function(){this.seq().obj(this.key(\"version\").explicit(0).int().optional(),this.key(\"serialNumber\").int(),this.key(\"signature\").use(a),this.key(\"issuer\").use(f),this.key(\"validity\").use(l),this.key(\"subject\").use(f),this.key(\"subjectPublicKeyInfo\").use(s),this.key(\"issuerUniqueID\").implicit(1).bitstr().optional(),this.key(\"subjectUniqueID\").implicit(2).bitstr().optional(),this.key(\"extensions\").explicit(3).seqof(h).optional())})),p=n.define(\"X509Certificate\",(function(){this.seq().obj(this.key(\"tbsCertificate\").use(d),this.key(\"signatureAlgorithm\").use(a),this.key(\"signatureValue\").bitstr())}));t.exports=p},{\"asn1.js\":141}],411:[function(e,t,r){var n=/Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m,o=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,i=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m,a=e(\"evp_bytestokey\"),s=e(\"browserify-aes\"),u=e(\"safe-buffer\").Buffer;t.exports=function(e,t){var r,c=e.toString(),f=c.match(n);if(f){var l=\"aes\"+f[1],h=u.from(f[2],\"hex\"),d=u.from(f[3].replace(/[\\r\\n]/g,\"\"),\"base64\"),p=a(t,h.slice(0,8),parseInt(f[1],10)).key,y=[],m=s.createDecipheriv(l,p,h);y.push(m.update(d)),y.push(m.final()),r=u.concat(y)}else{var b=c.match(i);r=new u(b[2].replace(/[\\r\\n]/g,\"\"),\"base64\")}return{tag:c.match(o)[1],data:r}}},{\"browserify-aes\":161,evp_bytestokey:300,\"safe-buffer\":445}],412:[function(e,t,r){var n=e(\"./asn1\"),o=e(\"./aesid.json\"),i=e(\"./fixProc\"),a=e(\"browserify-aes\"),s=e(\"pbkdf2\"),u=e(\"safe-buffer\").Buffer;function c(e){var t;\"object\"!==_typeof2(e)||u.isBuffer(e)||(t=e.passphrase,e=e.key),\"string\"==typeof e&&(e=u.from(e));var r,c,f=i(e,t),l=f.tag,h=f.data;switch(l){case\"CERTIFICATE\":c=n.certificate.decode(h,\"der\").tbsCertificate.subjectPublicKeyInfo;case\"PUBLIC KEY\":switch(c||(c=n.PublicKey.decode(h,\"der\")),r=c.algorithm.algorithm.join(\".\")){case\"1.2.840.113549.1.1.1\":return n.RSAPublicKey.decode(c.subjectPublicKey.data,\"der\");case\"1.2.840.10045.2.1\":return c.subjectPrivateKey=c.subjectPublicKey,{type:\"ec\",data:c};case\"1.2.840.10040.4.1\":return c.algorithm.params.pub_key=n.DSAparam.decode(c.subjectPublicKey.data,\"der\"),{type:\"dsa\",data:c.algorithm.params};default:throw new Error(\"unknown key id \"+r)}throw new Error(\"unknown key type \"+l);case\"ENCRYPTED PRIVATE KEY\":h=function(e,t){var r=e.algorithm.decrypt.kde.kdeparams.salt,n=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),i=o[e.algorithm.decrypt.cipher.algo.join(\".\")],c=e.algorithm.decrypt.cipher.iv,f=e.subjectPrivateKey,l=parseInt(i.split(\"-\")[1],10)/8,h=s.pbkdf2Sync(t,r,n,l,\"sha1\"),d=a.createDecipheriv(i,h,c),p=[];return p.push(d.update(f)),p.push(d.final()),u.concat(p)}(h=n.EncryptedPrivateKey.decode(h,\"der\"),t);case\"PRIVATE KEY\":switch(r=(c=n.PrivateKey.decode(h,\"der\")).algorithm.algorithm.join(\".\")){case\"1.2.840.113549.1.1.1\":return n.RSAPrivateKey.decode(c.subjectPrivateKey,\"der\");case\"1.2.840.10045.2.1\":return{curve:c.algorithm.curve,privateKey:n.ECPrivateKey.decode(c.subjectPrivateKey,\"der\").privateKey};case\"1.2.840.10040.4.1\":return c.algorithm.params.priv_key=n.DSAparam.decode(c.subjectPrivateKey,\"der\"),{type:\"dsa\",params:c.algorithm.params};default:throw new Error(\"unknown key id \"+r)}throw new Error(\"unknown key type \"+l);case\"RSA PUBLIC KEY\":return n.RSAPublicKey.decode(h,\"der\");case\"RSA PRIVATE KEY\":return n.RSAPrivateKey.decode(h,\"der\");case\"DSA PRIVATE KEY\":return{type:\"dsa\",params:n.DSAPrivateKey.decode(h,\"der\")};case\"EC PRIVATE KEY\":return{curve:(h=n.ECPrivateKey.decode(h,\"der\")).parameters.value,privateKey:h.privateKey};default:throw new Error(\"unknown key type \"+l)}}t.exports=c,c.signature=n.signature},{\"./aesid.json\":408,\"./asn1\":409,\"./fixProc\":411,\"browserify-aes\":161,pbkdf2:413,\"safe-buffer\":445}],413:[function(e,t,r){r.pbkdf2=e(\"./lib/async\"),r.pbkdf2Sync=e(\"./lib/sync\")},{\"./lib/async\":414,\"./lib/sync\":417}],414:[function(e,t,r){(function(r,n){var o,i=e(\"./precondition\"),a=e(\"./default-encoding\"),s=e(\"./sync\"),u=e(\"safe-buffer\").Buffer,c=n.crypto&&n.crypto.subtle,f={sha:\"SHA-1\",\"sha-1\":\"SHA-1\",sha1:\"SHA-1\",sha256:\"SHA-256\",\"sha-256\":\"SHA-256\",sha384:\"SHA-384\",\"sha-384\":\"SHA-384\",\"sha-512\":\"SHA-512\",sha512:\"SHA-512\"},l=[];function h(e,t,r,n,o){return c.importKey(\"raw\",e,{name:\"PBKDF2\"},!1,[\"deriveBits\"]).then((function(e){return c.deriveBits({name:\"PBKDF2\",salt:t,iterations:r,hash:{name:o}},e,n<<3)})).then((function(e){return u.from(e)}))}t.exports=function(e,t,d,p,y,m){\"function\"==typeof y&&(m=y,y=void 0);var b=f[(y=y||\"sha1\").toLowerCase()];if(!b||\"function\"!=typeof n.Promise)return r.nextTick((function(){var r;try{r=s(e,t,d,p,y)}catch(e){return m(e)}m(null,r)}));if(i(e,t,d,p),\"function\"!=typeof m)throw new Error(\"No callback provided to pbkdf2\");u.isBuffer(e)||(e=u.from(e,a)),u.isBuffer(t)||(t=u.from(t,a)),function(e,t){e.then((function(e){r.nextTick((function(){t(null,e)}))}),(function(e){r.nextTick((function(){t(e)}))}))}(function(e){if(n.process&&!n.process.browser)return Promise.resolve(!1);if(!c||!c.importKey||!c.deriveBits)return Promise.resolve(!1);if(void 0!==l[e])return l[e];var t=h(o=o||u.alloc(8),o,10,128,e).then((function(){return!0})).catch((function(){return!1}));return l[e]=t,t}(b).then((function(r){return r?h(e,t,d,p,b):s(e,t,d,p,y)})),m)}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./default-encoding\":415,\"./precondition\":416,\"./sync\":417,_process:419,\"safe-buffer\":445}],415:[function(e,t,r){(function(e){var r;e.browser?r=\"utf-8\":r=parseInt(e.version.split(\".\")[0].slice(1),10)>=6?\"utf-8\":\"binary\";t.exports=r}).call(this,e(\"_process\"))},{_process:419}],416:[function(e,t,r){(function(e){var r=Math.pow(2,30)-1;function n(t,r){if(\"string\"!=typeof t&&!e.isBuffer(t))throw new TypeError(r+\" must be a buffer or string\")}t.exports=function(e,t,o,i){if(n(e,\"Password\"),n(t,\"Salt\"),\"number\"!=typeof o)throw new TypeError(\"Iterations not a number\");if(o<0)throw new TypeError(\"Bad iterations\");if(\"number\"!=typeof i)throw new TypeError(\"Key length not a number\");if(i<0||i>r||i!=i)throw new TypeError(\"Bad key length\")}}).call(this,{isBuffer:e(\"../../is-buffer/index.js\")})},{\"../../is-buffer/index.js\":342}],417:[function(e,t,r){var n=e(\"create-hash/md5\"),o=e(\"ripemd160\"),i=e(\"sha.js\"),a=e(\"./precondition\"),s=e(\"./default-encoding\"),u=e(\"safe-buffer\").Buffer,c=u.alloc(128),f={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function l(e,t,r){var a=function(e){function t(t){return i(e).update(t).digest()}return\"rmd160\"===e||\"ripemd160\"===e?function(e){return(new o).update(e).digest()}:\"md5\"===e?n:t}(e),s=\"sha512\"===e||\"sha384\"===e?128:64;t.length>s?t=a(t):t.length<s&&(t=u.concat([t,c],s));for(var l=u.allocUnsafe(s+f[e]),h=u.allocUnsafe(s+f[e]),d=0;d<s;d++)l[d]=54^t[d],h[d]=92^t[d];var p=u.allocUnsafe(s+r+4);l.copy(p,0,0,s),this.ipad1=p,this.ipad2=l,this.opad=h,this.alg=e,this.blocksize=s,this.hash=a,this.size=f[e]}l.prototype.run=function(e,t){return e.copy(t,this.blocksize),this.hash(t).copy(this.opad,this.blocksize),this.hash(this.opad)},t.exports=function(e,t,r,n,o){a(e,t,r,n),u.isBuffer(e)||(e=u.from(e,s)),u.isBuffer(t)||(t=u.from(t,s));var i=new l(o=o||\"sha1\",e,t.length),c=u.allocUnsafe(n),h=u.allocUnsafe(t.length+4);t.copy(h,0,0,t.length);for(var d=0,p=f[o],y=Math.ceil(n/p),m=1;m<=y;m++){h.writeUInt32BE(m,t.length);for(var b=i.run(h,i.ipad1),v=b,g=1;g<r;g++){v=i.run(v,i.ipad2);for(var w=0;w<p;w++)b[w]^=v[w]}b.copy(c,d),d+=p}return c}},{\"./default-encoding\":415,\"./precondition\":416,\"create-hash/md5\":266,ripemd160:444,\"safe-buffer\":445,\"sha.js\":449}],418:[function(e,t,r){(function(e){void 0===e||!e.version||0===e.version.indexOf(\"v0.\")||0===e.version.indexOf(\"v1.\")&&0!==e.version.indexOf(\"v1.8.\")?t.exports={nextTick:function(t,r,n,o){if(\"function\"!=typeof t)throw new TypeError('\"callback\" argument must be a function');var i,a,s=arguments.length;switch(s){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick((function(){t.call(null,r)}));case 3:return e.nextTick((function(){t.call(null,r,n)}));case 4:return e.nextTick((function(){t.call(null,r,n,o)}));default:for(i=new Array(s-1),a=0;a<i.length;)i[a++]=arguments[a];return e.nextTick((function(){t.apply(null,i)}))}}}:t.exports=e}).call(this,e(\"_process\"))},{_process:419}],419:[function(e,t,r){var n,o,i=t.exports={};function a(){throw new Error(\"setTimeout has not been defined\")}function s(){throw new Error(\"clearTimeout has not been defined\")}function u(e){if(n===setTimeout)return setTimeout(e,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=\"function\"==typeof setTimeout?setTimeout:a}catch(e){n=a}try{o=\"function\"==typeof clearTimeout?clearTimeout:s}catch(e){o=s}}();var c,f=[],l=!1,h=-1;function d(){l&&c&&(l=!1,c.length?f=c.concat(f):h=-1,f.length&&p())}function p(){if(!l){var e=u(d);l=!0;for(var t=f.length;t;){for(c=f,f=[];++h<t;)c&&c[h].run();h=-1,t=f.length}c=null,l=!1,function(e){if(o===clearTimeout)return clearTimeout(e);if((o===s||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(e);try{o(e)}catch(t){try{return o.call(null,e)}catch(t){return o.call(this,e)}}}(e)}}function y(e,t){this.fun=e,this.array=t}function m(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];f.push(new y(e,t)),1!==f.length||l||u(p)},y.prototype.run=function(){this.fun.apply(null,this.array)},i.title=\"browser\",i.browser=!0,i.env={},i.argv=[],i.version=\"\",i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(e){return[]},i.binding=function(e){throw new Error(\"process.binding is not supported\")},i.cwd=function(){return\"/\"},i.chdir=function(e){throw new Error(\"process.chdir is not supported\")},i.umask=function(){return 0}},{}],420:[function(e,t,r){r.publicEncrypt=e(\"./publicEncrypt\"),r.privateDecrypt=e(\"./privateDecrypt\"),r.privateEncrypt=function(e,t){return r.publicEncrypt(e,t,!0)},r.publicDecrypt=function(e,t){return r.privateDecrypt(e,t,!0)}},{\"./privateDecrypt\":422,\"./publicEncrypt\":423}],421:[function(e,t,r){var n=e(\"create-hash\"),o=e(\"safe-buffer\").Buffer;function i(e){var t=o.allocUnsafe(4);return t.writeUInt32BE(e,0),t}t.exports=function(e,t){for(var r,a=o.alloc(0),s=0;a.length<t;)r=i(s++),a=o.concat([a,n(\"sha1\").update(e).update(r).digest()]);return a.slice(0,t)}},{\"create-hash\":265,\"safe-buffer\":445}],422:[function(e,t,r){var n=e(\"parse-asn1\"),o=e(\"./mgf\"),i=e(\"./xor\"),a=e(\"bn.js\"),s=e(\"browserify-rsa\"),u=e(\"create-hash\"),c=e(\"./withPublic\"),f=e(\"safe-buffer\").Buffer;t.exports=function(e,t,r){var l;l=e.padding?e.padding:r?1:4;var h,d=n(e),p=d.modulus.byteLength();if(t.length>p||new a(t).cmp(d.modulus)>=0)throw new Error(\"decryption error\");h=r?c(new a(t),d):s(t,d);var y=f.alloc(p-h.length);if(h=f.concat([y,h],p),4===l)return function(e,t){var r=e.modulus.byteLength(),n=u(\"sha1\").update(f.alloc(0)).digest(),a=n.length;if(0!==t[0])throw new Error(\"decryption error\");var s=t.slice(1,a+1),c=t.slice(a+1),l=i(s,o(c,a)),h=i(c,o(l,r-a-1));if(function(e,t){e=f.from(e),t=f.from(t);var r=0,n=e.length;e.length!==t.length&&(r++,n=Math.min(e.length,t.length));var o=-1;for(;++o<n;)r+=e[o]^t[o];return r}(n,h.slice(0,a)))throw new Error(\"decryption error\");var d=a;for(;0===h[d];)d++;if(1!==h[d++])throw new Error(\"decryption error\");return h.slice(d)}(d,h);if(1===l)return function(e,t,r){var n=t.slice(0,2),o=2,i=0;for(;0!==t[o++];)if(o>=t.length){i++;break}var a=t.slice(2,o-1);(\"0002\"!==n.toString(\"hex\")&&!r||\"0001\"!==n.toString(\"hex\")&&r)&&i++;a.length<8&&i++;if(i)throw new Error(\"decryption error\");return t.slice(o)}(0,h,r);if(3===l)return h;throw new Error(\"unknown padding\")}},{\"./mgf\":421,\"./withPublic\":424,\"./xor\":425,\"bn.js\":156,\"browserify-rsa\":179,\"create-hash\":265,\"parse-asn1\":412,\"safe-buffer\":445}],423:[function(e,t,r){var n=e(\"parse-asn1\"),o=e(\"randombytes\"),i=e(\"create-hash\"),a=e(\"./mgf\"),s=e(\"./xor\"),u=e(\"bn.js\"),c=e(\"./withPublic\"),f=e(\"browserify-rsa\"),l=e(\"safe-buffer\").Buffer;t.exports=function(e,t,r){var h;h=e.padding?e.padding:r?1:4;var d,p=n(e);if(4===h)d=function(e,t){var r=e.modulus.byteLength(),n=t.length,c=i(\"sha1\").update(l.alloc(0)).digest(),f=c.length,h=2*f;if(n>r-h-2)throw new Error(\"message too long\");var d=l.alloc(r-n-h-2),p=r-f-1,y=o(f),m=s(l.concat([c,d,l.alloc(1,1),t],p),a(y,p)),b=s(y,a(m,f));return new u(l.concat([l.alloc(1),b,m],r))}(p,t);else if(1===h)d=function(e,t,r){var n,i=t.length,a=e.modulus.byteLength();if(i>a-11)throw new Error(\"message too long\");n=r?l.alloc(a-i-3,255):function(e){var t,r=l.allocUnsafe(e),n=0,i=o(2*e),a=0;for(;n<e;)a===i.length&&(i=o(2*e),a=0),(t=i[a++])&&(r[n++]=t);return r}(a-i-3);return new u(l.concat([l.from([0,r?1:2]),n,l.alloc(1),t],a))}(p,t,r);else{if(3!==h)throw new Error(\"unknown padding\");if((d=new u(t)).cmp(p.modulus)>=0)throw new Error(\"data too long for modulus\")}return r?f(d,p):c(d,p)}},{\"./mgf\":421,\"./withPublic\":424,\"./xor\":425,\"bn.js\":156,\"browserify-rsa\":179,\"create-hash\":265,\"parse-asn1\":412,randombytes:426,\"safe-buffer\":445}],424:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"safe-buffer\").Buffer;t.exports=function(e,t){return o.from(e.toRed(n.mont(t.modulus)).redPow(new n(t.publicExponent)).fromRed().toArray())}},{\"bn.js\":156,\"safe-buffer\":445}],425:[function(e,t,r){t.exports=function(e,t){for(var r=e.length,n=-1;++n<r;)e[n]^=t[n];return e}},{}],426:[function(e,t,r){(function(r,n){var o=e(\"safe-buffer\").Buffer,i=n.crypto||n.msCrypto;i&&i.getRandomValues?t.exports=function(e,t){if(e>4294967295)throw new RangeError(\"requested too many random bytes\");var n=o.allocUnsafe(e);if(e>0)if(e>65536)for(var a=0;a<e;a+=65536)i.getRandomValues(n.slice(a,a+65536));else i.getRandomValues(n);if(\"function\"==typeof t)return r.nextTick((function(){t(null,n)}));return n}:t.exports=function(){throw new Error(\"Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11\")}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:419,\"safe-buffer\":445}],427:[function(e,t,r){(function(t,n){function o(){throw new Error(\"secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11\")}var i=e(\"safe-buffer\"),a=e(\"randombytes\"),s=i.Buffer,u=i.kMaxLength,c=n.crypto||n.msCrypto,f=Math.pow(2,32)-1;function l(e,t){if(\"number\"!=typeof e||e!=e)throw new TypeError(\"offset must be a number\");if(e>f||e<0)throw new TypeError(\"offset must be a uint32\");if(e>u||e>t)throw new RangeError(\"offset out of range\")}function h(e,t,r){if(\"number\"!=typeof e||e!=e)throw new TypeError(\"size must be a number\");if(e>f||e<0)throw new TypeError(\"size must be a uint32\");if(e+t>r||e>u)throw new RangeError(\"buffer too small\")}function d(e,r,n,o){if(t.browser){var i=e.buffer,s=new Uint8Array(i,r,n);return c.getRandomValues(s),o?void t.nextTick((function(){o(null,e)})):e}if(!o)return a(n).copy(e,r),e;a(n,(function(t,n){if(t)return o(t);n.copy(e,r),o(null,e)}))}c&&c.getRandomValues||!t.browser?(r.randomFill=function(e,t,r,o){if(!(s.isBuffer(e)||e instanceof n.Uint8Array))throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');if(\"function\"==typeof t)o=t,t=0,r=e.length;else if(\"function\"==typeof r)o=r,r=e.length-t;else if(\"function\"!=typeof o)throw new TypeError('\"cb\" argument must be a function');return l(t,e.length),h(r,t,e.length),d(e,t,r,o)},r.randomFillSync=function(e,t,r){void 0===t&&(t=0);if(!(s.isBuffer(e)||e instanceof n.Uint8Array))throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');l(t,e.length),void 0===r&&(r=e.length-t);return h(r,t,e.length),d(e,t,r)}):(r.randomFill=o,r.randomFillSync=o)}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:419,randombytes:426,\"safe-buffer\":445}],428:[function(e,t,r){var n={};function o(e,t,r){r||(r=Error);var o=function(e){var r,n;function o(r,n,o){return e.call(this,function(e,r,n){return\"string\"==typeof t?t:t(e,r,n)}(r,n,o))||this}return n=e,(r=o).prototype=Object.create(n.prototype),r.prototype.constructor=r,r.__proto__=n,o}(r);o.prototype.name=r.name,o.prototype.code=e,n[e]=o}function i(e,t){if(Array.isArray(e)){var r=e.length;return e=e.map((function(e){return String(e)})),r>2?\"one of \".concat(t,\" \").concat(e.slice(0,r-1).join(\", \"),\", or \")+e[r-1]:2===r?\"one of \".concat(t,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(t,\" \").concat(e[0])}return\"of \".concat(t,\" \").concat(String(e))}o(\"ERR_INVALID_OPT_VALUE\",(function(e,t){return'The value \"'+t+'\" is invalid for option \"'+e+'\"'}),TypeError),o(\"ERR_INVALID_ARG_TYPE\",(function(e,t,r){var n,o,a,s;if(\"string\"==typeof t&&(o=\"not \",t.substr(!a||a<0?0:+a,o.length)===o)?(n=\"must not be\",t=t.replace(/^not /,\"\")):n=\"must be\",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e,\" argument\"))s=\"The \".concat(e,\" \").concat(n,\" \").concat(i(t,\"type\"));else{var u=function(e,t,r){return\"number\"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,\".\")?\"property\":\"argument\";s='The \"'.concat(e,'\" ').concat(u,\" \").concat(n,\" \").concat(i(t,\"type\"))}return s+=\". Received type \".concat(_typeof2(r))}),TypeError),o(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),o(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(e){return\"The \"+e+\" method is not implemented\"})),o(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),o(\"ERR_STREAM_DESTROYED\",(function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"})),o(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),o(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),o(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),o(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),o(\"ERR_UNKNOWN_ENCODING\",(function(e){return\"Unknown encoding: \"+e}),TypeError),o(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),t.exports.codes=n},{}],429:[function(e,t,r){(function(r){var n=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=c;var o=e(\"./_stream_readable\"),i=e(\"./_stream_writable\");e(\"inherits\")(c,o);for(var a=n(i.prototype),s=0;s<a.length;s++){var u=a[s];c.prototype[u]||(c.prototype[u]=i.prototype[u])}function c(e){if(!(this instanceof c))return new c(e);o.call(this,e),i.call(this,e),this.allowHalfOpen=!0,e&&(!1===e.readable&&(this.readable=!1),!1===e.writable&&(this.writable=!1),!1===e.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\"end\",f)))}function f(){this._writableState.ended||r.nextTick(l,this)}function l(e){e.end()}Object.defineProperty(c.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(c.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(c.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(c.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}})}).call(this,e(\"_process\"))},{\"./_stream_readable\":431,\"./_stream_writable\":433,_process:419,inherits:341}],430:[function(e,t,r){t.exports=o;var n=e(\"./_stream_transform\");function o(e){if(!(this instanceof o))return new o(e);n.call(this,e)}e(\"inherits\")(o,n),o.prototype._transform=function(e,t,r){r(null,e)}},{\"./_stream_transform\":432,inherits:341}],431:[function(e,t,r){(function(r,n){var o;t.exports=O,O.ReadableState=S;e(\"events\").EventEmitter;var i=function(e,t){return e.listeners(t).length},a=e(\"./internal/streams/stream\"),s=e(\"buffer\").Buffer,u=n.Uint8Array||function(){};var c,f=e(\"util\");c=f&&f.debuglog?f.debuglog(\"stream\"):function(){};var l,h,d,p=e(\"./internal/streams/buffer_list\"),y=e(\"./internal/streams/destroy\"),m=e(\"./internal/streams/state\").getHighWaterMark,b=e(\"../errors\").codes,v=b.ERR_INVALID_ARG_TYPE,g=b.ERR_STREAM_PUSH_AFTER_EOF,w=b.ERR_METHOD_NOT_IMPLEMENTED,_=b.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;e(\"inherits\")(O,a);var k=y.errorOrDestroy,x=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function S(t,r,n){o=o||e(\"./_stream_duplex\"),t=t||{},\"boolean\"!=typeof n&&(n=r instanceof o),this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=m(this,t,\"readableHighWaterMark\",n),this.buffer=new p,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(l||(l=e(\"string_decoder/\").StringDecoder),this.decoder=new l(t.encoding),this.encoding=t.encoding)}function O(t){if(o=o||e(\"./_stream_duplex\"),!(this instanceof O))return new O(t);var r=this instanceof o;this._readableState=new S(t,this,r),this.readable=!0,t&&(\"function\"==typeof t.read&&(this._read=t.read),\"function\"==typeof t.destroy&&(this._destroy=t.destroy)),a.call(this)}function E(e,t,r,n,o){c(\"readableAddChunk\",t);var i,a=e._readableState;if(null===t)a.reading=!1,function(e,t){if(c(\"onEofChunk\"),t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,t.sync?T(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,C(e)))}(e,a);else if(o||(i=function(e,t){var r;n=t,s.isBuffer(n)||n instanceof u||\"string\"==typeof t||void 0===t||e.objectMode||(r=new v(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],t));var n;return r}(a,t)),i)k(e,i);else if(a.objectMode||t&&t.length>0)if(\"string\"==typeof t||a.objectMode||Object.getPrototypeOf(t)===s.prototype||(t=function(e){return s.from(e)}(t)),n)a.endEmitted?k(e,new _):R(e,a,t,!0);else if(a.ended)k(e,new g);else{if(a.destroyed)return!1;a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?R(e,a,t,!1):P(e,a)):R(e,a,t,!1)}else n||(a.reading=!1,P(e,a));return!a.ended&&(a.length<a.highWaterMark||0===a.length)}function R(e,t,r,n){t.flowing&&0===t.length&&!t.sync?(t.awaitDrain=0,e.emit(\"data\",r)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&T(e)),P(e,t)}Object.defineProperty(O.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),O.prototype.destroy=y.destroy,O.prototype._undestroy=y.undestroy,O.prototype._destroy=function(e,t){t(e)},O.prototype.push=function(e,t){var r,n=this._readableState;return n.objectMode?r=!0:\"string\"==typeof e&&((t=t||n.defaultEncoding)!==n.encoding&&(e=s.from(e,t),t=\"\"),r=!0),E(this,e,t,!1,r)},O.prototype.unshift=function(e){return E(this,e,null,!0,!1)},O.prototype.isPaused=function(){return!1===this._readableState.flowing},O.prototype.setEncoding=function(t){l||(l=e(\"string_decoder/\").StringDecoder);var r=new l(t);this._readableState.decoder=r,this._readableState.encoding=this._readableState.decoder.encoding;for(var n=this._readableState.buffer.head,o=\"\";null!==n;)o+=r.write(n.data),n=n.next;return this._readableState.buffer.clear(),\"\"!==o&&this._readableState.buffer.push(o),this._readableState.length=o.length,this};function j(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=1073741824?e=1073741824:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function T(e){var t=e._readableState;c(\"emitReadable\",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(c(\"emitReadable\",t.flowing),t.emittedReadable=!0,r.nextTick(C,e))}function C(e){var t=e._readableState;c(\"emitReadable_\",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit(\"readable\"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,D(e)}function P(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(A,e,t))}function A(e,t){for(;!t.reading&&!t.ended&&(t.length<t.highWaterMark||t.flowing&&0===t.length);){var r=t.length;if(c(\"maybeReadMore read 0\"),e.read(0),r===t.length)break}t.readingMore=!1}function M(e){var t=e._readableState;t.readableListening=e.listenerCount(\"readable\")>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function I(e){c(\"readable nexttick read 0\"),e.read(0)}function N(e,t){c(\"resume\",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(\"resume\"),D(e),t.flowing&&!t.reading&&e.read(0)}function D(e){var t=e._readableState;for(c(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function B(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function F(e){var t=e._readableState;c(\"endReadable\",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(L,t,e))}function L(e,t){if(c(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function z(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}O.prototype.read=function(e){c(\"read\",e),e=parseInt(e,10);var t=this._readableState,r=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return c(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?F(this):T(this),null;if(0===(e=j(e,t))&&t.ended)return 0===t.length&&F(this),null;var n,o=t.needReadable;return c(\"need readable\",o),(0===t.length||t.length-e<t.highWaterMark)&&c(\"length less than watermark\",o=!0),t.ended||t.reading?c(\"reading or ended\",o=!1):o&&(c(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=j(r,t))),null===(n=e>0?B(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&F(this)),null!==n&&this.emit(\"data\",n),n},O.prototype._read=function(e){k(this,new w(\"_read()\"))},O.prototype.pipe=function(e,t){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,c(\"pipe count=%d opts=%j\",o.pipesCount,t);var a=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?u:m;function s(t,r){c(\"onunpipe\"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,c(\"cleanup\"),e.removeListener(\"close\",p),e.removeListener(\"finish\",y),e.removeListener(\"drain\",f),e.removeListener(\"error\",d),e.removeListener(\"unpipe\",s),n.removeListener(\"end\",u),n.removeListener(\"end\",m),n.removeListener(\"data\",h),l=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function u(){c(\"onend\"),e.end()}o.endEmitted?r.nextTick(a):n.once(\"end\",a),e.on(\"unpipe\",s);var f=function(e){return function(){var t=e._readableState;c(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&i(e,\"data\")&&(t.flowing=!0,D(e))}}(n);e.on(\"drain\",f);var l=!1;function h(t){c(\"ondata\");var r=e.write(t);c(\"dest.write\",r),!1===r&&((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==z(o.pipes,e))&&!l&&(c(\"false write response, pause\",o.awaitDrain),o.awaitDrain++),n.pause())}function d(t){c(\"onerror\",t),m(),e.removeListener(\"error\",d),0===i(e,\"error\")&&k(e,t)}function p(){e.removeListener(\"finish\",y),m()}function y(){c(\"onfinish\"),e.removeListener(\"close\",p),m()}function m(){c(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",h),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",d),e.once(\"close\",p),e.once(\"finish\",y),e.emit(\"pipe\",n),o.flowing||(c(\"pipe resume\"),n.resume()),e},O.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i<o;i++)n[i].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var a=z(t.pipes,e);return-1===a||(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,r)),this},O.prototype.on=function(e,t){var n=a.prototype.on.call(this,e,t),o=this._readableState;return\"data\"===e?(o.readableListening=this.listenerCount(\"readable\")>0,!1!==o.flowing&&this.resume()):\"readable\"===e&&(o.endEmitted||o.readableListening||(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,c(\"on readable\",o.length,o.reading),o.length?T(this):o.reading||r.nextTick(I,this))),n},O.prototype.addListener=O.prototype.on,O.prototype.removeListener=function(e,t){var n=a.prototype.removeListener.call(this,e,t);return\"readable\"===e&&r.nextTick(M,this),n},O.prototype.removeAllListeners=function(e){var t=a.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==e&&void 0!==e||r.nextTick(M,this),t},O.prototype.resume=function(){var e=this._readableState;return e.flowing||(c(\"resume\"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(N,e,t))}(this,e)),e.paused=!1,this},O.prototype.pause=function(){return c(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(c(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},O.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var o in e.on(\"end\",(function(){if(c(\"wrapped end\"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(o){(c(\"wrapped data\"),r.decoder&&(o=r.decoder.write(o)),r.objectMode&&null==o)||(r.objectMode||o&&o.length)&&(t.push(o)||(n=!0,e.pause()))})),e)void 0===this[o]&&\"function\"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var i=0;i<x.length;i++)e.on(x[i],this.emit.bind(this,x[i]));return this._read=function(t){c(\"wrapped _read\",t),n&&(n=!1,e.resume())},this},\"function\"==typeof Symbol&&(O.prototype[Symbol.asyncIterator]=function(){return void 0===h&&(h=e(\"./internal/streams/async_iterator\")),h(this)}),Object.defineProperty(O.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(O.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(O.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}}),O._fromList=B,Object.defineProperty(O.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(O.from=function(t,r){return void 0===d&&(d=e(\"./internal/streams/from\")),d(O,t,r)})}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"../errors\":428,\"./_stream_duplex\":429,\"./internal/streams/async_iterator\":434,\"./internal/streams/buffer_list\":435,\"./internal/streams/destroy\":436,\"./internal/streams/from\":438,\"./internal/streams/state\":440,\"./internal/streams/stream\":441,_process:419,buffer:188,events:299,inherits:341,\"string_decoder/\":470,util:158}],432:[function(e,t,r){t.exports=f;var n=e(\"../errors\").codes,o=n.ERR_METHOD_NOT_IMPLEMENTED,i=n.ERR_MULTIPLE_CALLBACK,a=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=n.ERR_TRANSFORM_WITH_LENGTH_0,u=e(\"./_stream_duplex\");function c(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(null===n)return this.emit(\"error\",new i);r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}function f(e){if(!(this instanceof f))return new f(e);u.call(this,e),this._transformState={afterTransform:c.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",l)}function l(){var e=this;\"function\"!=typeof this._flush||this._readableState.destroyed?h(this,null,null):this._flush((function(t,r){h(e,t,r)}))}function h(e,t,r){if(t)return e.emit(\"error\",t);if(null!=r&&e.push(r),e._writableState.length)throw new s;if(e._transformState.transforming)throw new a;return e.push(null)}e(\"inherits\")(f,u),f.prototype.push=function(e,t){return this._transformState.needTransform=!1,u.prototype.push.call(this,e,t)},f.prototype._transform=function(e,t,r){r(new o(\"_transform()\"))},f.prototype._write=function(e,t,r){var n=this._transformState;if(n.writecb=r,n.writechunk=e,n.writeencoding=t,!n.transforming){var o=this._readableState;(n.needTransform||o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}},f.prototype._read=function(e){var t=this._transformState;null===t.writechunk||t.transforming?t.needTransform=!0:(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform))},f.prototype._destroy=function(e,t){u.prototype._destroy.call(this,e,(function(e){t(e)}))}},{\"../errors\":428,\"./_stream_duplex\":429,inherits:341}],433:[function(e,t,r){(function(r,n){function o(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,r){var n=e.entry;e.entry=null;for(;n;){var o=n.callback;t.pendingcb--,o(r),n=n.next}t.corkedRequestsFree.next=e}(t,e)}}var i;t.exports=O,O.WritableState=S;var a={deprecate:e(\"util-deprecate\")},s=e(\"./internal/streams/stream\"),u=e(\"buffer\").Buffer,c=n.Uint8Array||function(){};var f,l=e(\"./internal/streams/destroy\"),h=e(\"./internal/streams/state\").getHighWaterMark,d=e(\"../errors\").codes,p=d.ERR_INVALID_ARG_TYPE,y=d.ERR_METHOD_NOT_IMPLEMENTED,m=d.ERR_MULTIPLE_CALLBACK,b=d.ERR_STREAM_CANNOT_PIPE,v=d.ERR_STREAM_DESTROYED,g=d.ERR_STREAM_NULL_VALUES,w=d.ERR_STREAM_WRITE_AFTER_END,_=d.ERR_UNKNOWN_ENCODING,k=l.errorOrDestroy;function x(){}function S(t,n,a){i=i||e(\"./_stream_duplex\"),t=t||{},\"boolean\"!=typeof a&&(a=n instanceof i),this.objectMode=!!t.objectMode,a&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=h(this,t,\"writableHighWaterMark\",a),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=!1===t.decodeStrings;this.decodeStrings=!s,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,o=n.sync,i=n.writecb;if(\"function\"!=typeof i)throw new m;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,o,i){--t.pendingcb,n?(r.nextTick(i,o),r.nextTick(P,e,t),e._writableState.errorEmitted=!0,k(e,o)):(i(o),e._writableState.errorEmitted=!0,k(e,o),P(e,t))}(e,n,o,t,i);else{var a=T(n)||e.destroyed;a||n.corked||n.bufferProcessing||!n.bufferedRequest||j(e,n),o?r.nextTick(R,e,n,a,i):R(e,n,a,i)}}(n,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==t.emitClose,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function O(t){var r=this instanceof(i=i||e(\"./_stream_duplex\"));if(!r&&!f.call(O,this))return new O(t);this._writableState=new S(t,this,r),this.writable=!0,t&&(\"function\"==typeof t.write&&(this._write=t.write),\"function\"==typeof t.writev&&(this._writev=t.writev),\"function\"==typeof t.destroy&&(this._destroy=t.destroy),\"function\"==typeof t.final&&(this._final=t.final)),s.call(this)}function E(e,t,r,n,o,i,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new v(\"write\")):r?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function R(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),P(e,t)}function j(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,u=!0;r;)i[s]=r,r.isBuf||(u=!1),r=r.next,s+=1;i.allBuffers=u,E(e,t,!0,t.length,i,\"\",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var c=r.chunk,f=r.encoding,l=r.callback;if(E(e,t,!1,t.objectMode?1:c.length,c,f,l),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function T(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function C(e,t){e._final((function(r){t.pendingcb--,r&&k(e,r),t.prefinished=!0,e.emit(\"prefinish\"),P(e,t)}))}function P(e,t){var n=T(t);if(n&&(function(e,t){t.prefinished||t.finalCalled||(\"function\"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit(\"prefinish\")):(t.pendingcb++,t.finalCalled=!0,r.nextTick(C,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"),t.autoDestroy))){var o=e._readableState;(!o||o.autoDestroy&&o.endEmitted)&&e.destroy()}return n}e(\"inherits\")(O,s),S.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(S.prototype,\"buffer\",{get:a.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(f=Function.prototype[Symbol.hasInstance],Object.defineProperty(O,Symbol.hasInstance,{value:function(e){return!!f.call(this,e)||this===O&&(e&&e._writableState instanceof S)}})):f=function(e){return e instanceof this},O.prototype.pipe=function(){k(this,new b)},O.prototype.write=function(e,t,n){var o,i=this._writableState,a=!1,s=!i.objectMode&&(o=e,u.isBuffer(o)||o instanceof c);return s&&!u.isBuffer(e)&&(e=function(e){return u.from(e)}(e)),\"function\"==typeof t&&(n=t,t=null),s?t=\"buffer\":t||(t=i.defaultEncoding),\"function\"!=typeof n&&(n=x),i.ending?function(e,t){var n=new w;k(e,n),r.nextTick(t,n)}(this,n):(s||function(e,t,n,o){var i;return null===n?i=new g:\"string\"==typeof n||t.objectMode||(i=new p(\"chunk\",[\"string\",\"Buffer\"],n)),!i||(k(e,i),r.nextTick(o,i),!1)}(this,i,e,n))&&(i.pendingcb++,a=function(e,t,r,n,o,i){if(!r){var a=function(e,t,r){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=u.from(t,r));return t}(t,n,o);n!==a&&(r=!0,o=\"buffer\",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var c=t.length<t.highWaterMark;c||(t.needDrain=!0);if(t.writing||t.corked){var f=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:o,isBuf:r,callback:i,next:null},f?f.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else E(e,t,!1,s,n,o,i);return c}(this,i,s,e,t,n)),a},O.prototype.cork=function(){this._writableState.corked++},O.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.bufferProcessing||!e.bufferedRequest||j(this,e))},O.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new _(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(O.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(O.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),O.prototype._write=function(e,t,r){r(new y(\"_write()\"))},O.prototype._writev=null,O.prototype.end=function(e,t,n){var o=this._writableState;return\"function\"==typeof e?(n=e,e=null,t=null):\"function\"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),o.corked&&(o.corked=1,this.uncork()),o.ending||function(e,t,n){t.ending=!0,P(e,t),n&&(t.finished?r.nextTick(n):e.once(\"finish\",n));t.ended=!0,e.writable=!1}(this,o,n),this},Object.defineProperty(O.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(O.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),O.prototype.destroy=l.destroy,O.prototype._undestroy=l.undestroy,O.prototype._destroy=function(e,t){t(e)}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"../errors\":428,\"./_stream_duplex\":429,\"./internal/streams/destroy\":436,\"./internal/streams/state\":440,\"./internal/streams/stream\":441,_process:419,buffer:188,inherits:341,\"util-deprecate\":472}],434:[function(e,t,r){(function(r){var n;function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i=e(\"./end-of-stream\"),a=Symbol(\"lastResolve\"),s=Symbol(\"lastReject\"),u=Symbol(\"error\"),c=Symbol(\"ended\"),f=Symbol(\"lastPromise\"),l=Symbol(\"handlePromise\"),h=Symbol(\"stream\");function d(e,t){return{value:e,done:t}}function p(e){var t=e[a];if(null!==t){var r=e[h].read();null!==r&&(e[f]=null,e[a]=null,e[s]=null,t(d(r,!1)))}}function y(e){r.nextTick(p,e)}var m=Object.getPrototypeOf((function(){})),b=Object.setPrototypeOf((o(n={get stream(){return this[h]},next:function(){var e=this,t=this[u];if(null!==t)return Promise.reject(t);if(this[c])return Promise.resolve(d(void 0,!0));if(this[h].destroyed)return new Promise((function(t,n){r.nextTick((function(){e[u]?n(e[u]):t(d(void 0,!0))}))}));var n,o=this[f];if(o)n=new Promise(function(e,t){return function(r,n){e.then((function(){t[c]?r(d(void 0,!0)):t[l](r,n)}),n)}}(o,this));else{var i=this[h].read();if(null!==i)return Promise.resolve(d(i,!1));n=new Promise(this[l])}return this[f]=n,n}},Symbol.asyncIterator,(function(){return this})),o(n,\"return\",(function(){var e=this;return new Promise((function(t,r){e[h].destroy(null,(function(e){e?r(e):t(d(void 0,!0))}))}))})),n),m);t.exports=function(e){var t,r=Object.create(b,(o(t={},h,{value:e,writable:!0}),o(t,a,{value:null,writable:!0}),o(t,s,{value:null,writable:!0}),o(t,u,{value:null,writable:!0}),o(t,c,{value:e._readableState.endEmitted,writable:!0}),o(t,l,{value:function(e,t){var n=r[h].read();n?(r[f]=null,r[a]=null,r[s]=null,e(d(n,!1))):(r[a]=e,r[s]=t)},writable:!0}),t));return r[f]=null,i(e,(function(e){if(e&&\"ERR_STREAM_PREMATURE_CLOSE\"!==e.code){var t=r[s];return null!==t&&(r[f]=null,r[a]=null,r[s]=null,t(e)),void(r[u]=e)}var n=r[a];null!==n&&(r[f]=null,r[a]=null,r[s]=null,n(d(void 0,!0))),r[c]=!0})),e.on(\"readable\",y.bind(null,r)),r}}).call(this,e(\"_process\"))},{\"./end-of-stream\":437,_process:419}],435:[function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var a=e(\"buffer\").Buffer,s=e(\"util\").inspect,u=s&&s.custom||\"inspect\";t.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}var t,r,c;return t=e,(r=[{key:\"push\",value:function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:\"unshift\",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r}},{key:\"concat\",value:function(e){if(0===this.length)return a.alloc(0);for(var t,r,n,o=a.allocUnsafe(e>>>0),i=this.head,s=0;i;)t=i.data,r=o,n=s,a.prototype.copy.call(t,r,n),s+=i.data.length,i=i.next;return o}},{key:\"consume\",value:function(e,t){var r;return e<this.head.data.length?(r=this.head.data.slice(0,e),this.head.data=this.head.data.slice(e)):r=e===this.head.data.length?this.shift():t?this._getString(e):this._getBuffer(e),r}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(e){var t=this.head,r=1,n=t.data;for(e-=n.length;t=t.next;){var o=t.data,i=e>o.length?o.length:e;if(i===o.length?n+=o:n+=o.slice(0,e),0==(e-=i)){i===o.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=o.slice(i));break}++r}return this.length-=r,n}},{key:\"_getBuffer\",value:function(e){var t=a.allocUnsafe(e),r=this.head,n=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var o=r.data,i=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,i),0==(e-=i)){i===o.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(i));break}++n}return this.length-=n,t}},{key:u,value:function(e,t){return s(this,function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},t,{depth:0,customInspect:!1}))}}])&&i(t.prototype,r),c&&i(t,c),e}()},{buffer:188,util:158}],436:[function(e,t,r){(function(e){function r(e,t){o(e,t),n(e)}function n(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit(\"close\")}function o(e,t){e.emit(\"error\",t)}t.exports={destroy:function(t,i){var a=this,s=this._readableState&&this._readableState.destroyed,u=this._writableState&&this._writableState.destroyed;return s||u?(i?i(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,e.nextTick(o,this,t)):e.nextTick(o,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,(function(t){!i&&t?a._writableState?a._writableState.errorEmitted?e.nextTick(n,a):(a._writableState.errorEmitted=!0,e.nextTick(r,a,t)):e.nextTick(r,a,t):i?(e.nextTick(n,a),i(t)):e.nextTick(n,a)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var r=e._readableState,n=e._writableState;r&&r.autoDestroy||n&&n.autoDestroy?e.destroy(t):e.emit(\"error\",t)}}}).call(this,e(\"_process\"))},{_process:419}],437:[function(e,t,r){var n=e(\"../../../errors\").codes.ERR_STREAM_PREMATURE_CLOSE;function o(){}t.exports=function e(t,r,i){if(\"function\"==typeof r)return e(t,null,r);r||(r={}),i=function(e){var t=!1;return function(){if(!t){t=!0;for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];e.apply(this,n)}}}(i||o);var a=r.readable||!1!==r.readable&&t.readable,s=r.writable||!1!==r.writable&&t.writable,u=function(){t.writable||f()},c=t._writableState&&t._writableState.finished,f=function(){s=!1,c=!0,a||i.call(t)},l=t._readableState&&t._readableState.endEmitted,h=function(){a=!1,l=!0,s||i.call(t)},d=function(e){i.call(t,e)},p=function(){var e;return a&&!l?(t._readableState&&t._readableState.ended||(e=new n),i.call(t,e)):s&&!c?(t._writableState&&t._writableState.ended||(e=new n),i.call(t,e)):void 0},y=function(){t.req.on(\"finish\",f)};return!function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?s&&!t._writableState&&(t.on(\"end\",u),t.on(\"close\",u)):(t.on(\"complete\",f),t.on(\"abort\",p),t.req?y():t.on(\"request\",y)),t.on(\"end\",h),t.on(\"finish\",f),!1!==r.error&&t.on(\"error\",d),t.on(\"close\",p),function(){t.removeListener(\"complete\",f),t.removeListener(\"abort\",p),t.removeListener(\"request\",y),t.req&&t.req.removeListener(\"finish\",f),t.removeListener(\"end\",u),t.removeListener(\"close\",u),t.removeListener(\"finish\",f),t.removeListener(\"end\",h),t.removeListener(\"error\",d),t.removeListener(\"close\",p)}}},{\"../../../errors\":428}],438:[function(e,t,r){t.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},{}],439:[function(e,t,r){var n;var o=e(\"../../../errors\").codes,i=o.ERR_MISSING_ARGS,a=o.ERR_STREAM_DESTROYED;function s(e){if(e)throw e}function u(t,r,o,i){i=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(i);var s=!1;t.on(\"close\",(function(){s=!0})),void 0===n&&(n=e(\"./end-of-stream\")),n(t,{readable:r,writable:o},(function(e){if(e)return i(e);s=!0,i()}));var u=!1;return function(e){if(!s&&!u)return u=!0,function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?t.abort():\"function\"==typeof t.destroy?t.destroy():void i(e||new a(\"pipe\"))}}function c(e){e()}function f(e,t){return e.pipe(t)}function l(e){return e.length?\"function\"!=typeof e[e.length-1]?s:e.pop():s}t.exports=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var n,o=l(t);if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new i(\"streams\");var a=t.map((function(e,r){var i=r<t.length-1;return u(e,i,r>0,(function(e){n||(n=e),e&&a.forEach(c),i||(a.forEach(c),o(n))}))}));return t.reduce(f)}},{\"../../../errors\":428,\"./end-of-stream\":437}],440:[function(e,t,r){var n=e(\"../../../errors\").codes.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(e,t,r,o){var i=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,o,r);if(null!=i){if(!isFinite(i)||Math.floor(i)!==i||i<0)throw new n(o?r:\"highWaterMark\",i);return Math.floor(i)}return e.objectMode?16:16384}}},{\"../../../errors\":428}],441:[function(e,t,r){t.exports=e(\"events\").EventEmitter},{events:299}],442:[function(e,t,r){(r=t.exports=e(\"./lib/_stream_readable.js\")).Stream=r,r.Readable=r,r.Writable=e(\"./lib/_stream_writable.js\"),r.Duplex=e(\"./lib/_stream_duplex.js\"),r.Transform=e(\"./lib/_stream_transform.js\"),r.PassThrough=e(\"./lib/_stream_passthrough.js\"),r.finished=e(\"./lib/internal/streams/end-of-stream.js\"),r.pipeline=e(\"./lib/internal/streams/pipeline.js\")},{\"./lib/_stream_duplex.js\":429,\"./lib/_stream_passthrough.js\":430,\"./lib/_stream_readable.js\":431,\"./lib/_stream_transform.js\":432,\"./lib/_stream_writable.js\":433,\"./lib/internal/streams/end-of-stream.js\":437,\"./lib/internal/streams/pipeline.js\":439}],443:[function(e,t,r){var n=function(e){var t=Object.prototype,r=t.hasOwnProperty,n=\"function\"==typeof Symbol?Symbol:{},o=n.iterator||\"@@iterator\",i=n.asyncIterator||\"@@asyncIterator\",a=n.toStringTag||\"@@toStringTag\";function s(e,t,r,n){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new k(n||[]);return i._invoke=function(e,t,r){var n=\"suspendedStart\";return function(o,i){if(\"executing\"===n)throw new Error(\"Generator is already running\");if(\"completed\"===n){if(\"throw\"===o)throw i;return S()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var s=g(a,r);if(s){if(s===c)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(\"suspendedStart\"===n)throw n=\"completed\",r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=\"executing\";var f=u(e,t,r);if(\"normal\"===f.type){if(n=r.done?\"completed\":\"suspendedYield\",f.arg===c)continue;return{value:f.arg,done:r.done}}\"throw\"===f.type&&(n=\"completed\",r.method=\"throw\",r.arg=f.arg)}}}(e,r,a),i}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}e.wrap=s;var c={};function f(){}function l(){}function h(){}var d={};d[o]=function(){return this};var p=Object.getPrototypeOf,y=p&&p(p(x([])));y&&y!==t&&r.call(y,o)&&(d=y);var m=h.prototype=f.prototype=Object.create(d);function b(e){[\"next\",\"throw\",\"return\"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function v(e,t){var n;this._invoke=function(o,i){function a(){return new t((function(n,a){!function n(o,i,a,s){var c=u(e[o],e,i);if(\"throw\"!==c.type){var f=c.arg,l=f.value;return l&&\"object\"===_typeof2(l)&&r.call(l,\"__await\")?t.resolve(l.__await).then((function(e){n(\"next\",e,a,s)}),(function(e){n(\"throw\",e,a,s)})):t.resolve(l).then((function(e){f.value=e,a(f)}),(function(e){return n(\"throw\",e,a,s)}))}s(c.arg)}(o,i,n,a)}))}return n=n?n.then(a,a):a()}}function g(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=void 0,g(e,t),\"throw\"===t.method))return c;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return c}var n=u(r,e.iterator,t.arg);if(\"throw\"===n.type)return t.method=\"throw\",t.arg=n.arg,t.delegate=null,c;var o=n.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=void 0),t.delegate=null,c):o:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,c)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(w,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,i=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return l.prototype=m.constructor=h,h.constructor=l,h[a]=l.displayName=\"GeneratorFunction\",e.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===l||\"GeneratorFunction\"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,a in e||(e[a]=\"GeneratorFunction\")),e.prototype=Object.create(m),e},e.awrap=function(e){return{__await:e}},b(v.prototype),v.prototype[i]=function(){return this},e.AsyncIterator=v,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new v(s(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},b(m),m[a]=\"Generator\",m[o]=function(){return this},m.toString=function(){return\"[object Generator]\"},e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=x,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=void 0,this.tryEntries.forEach(_),!e)for(var t in this)\"t\"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return a.type=\"throw\",a.arg=e,t.next=r,n&&(t.method=\"next\",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var s=r.call(i,\"catchLoc\"),u=r.call(i,\"finallyLoc\");if(s&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error(\"try statement without catch or finally\");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,\"finallyLoc\")&&this.prev<o.finallyLoc){var i=o;break}}i&&(\"break\"===e||\"continue\"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method=\"next\",this.next=i.finallyLoc,c):this.complete(a)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),c},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),_(r),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;_(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,r){return this.delegate={iterator:x(e),resultName:t,nextLoc:r},\"next\"===this.method&&(this.arg=void 0),c}},e}(\"object\"===_typeof2(t)?t.exports:{});try{regeneratorRuntime=n}catch(e){Function(\"r\",\"regeneratorRuntime = r\")(n)}},{}],444:[function(e,t,r){var n=e(\"buffer\").Buffer,o=e(\"inherits\"),i=e(\"hash-base\"),a=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],u=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],c=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],f=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],l=[0,1518500249,1859775393,2400959708,2840853838],h=[1352829926,1548603684,1836072691,2053994217,0];function d(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<<t|e>>>32-t}function y(e,t,r,n,o,i,a,s){return p(e+(t^r^n)+i+a|0,s)+o|0}function m(e,t,r,n,o,i,a,s){return p(e+(t&r|~t&n)+i+a|0,s)+o|0}function b(e,t,r,n,o,i,a,s){return p(e+((t|~r)^n)+i+a|0,s)+o|0}function v(e,t,r,n,o,i,a,s){return p(e+(t&n|r&~n)+i+a|0,s)+o|0}function g(e,t,r,n,o,i,a,s){return p(e+(t^(r|~n))+i+a|0,s)+o|0}o(d,i),d.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var r=0|this._a,n=0|this._b,o=0|this._c,i=0|this._d,d=0|this._e,w=0|this._a,_=0|this._b,k=0|this._c,x=0|this._d,S=0|this._e,O=0;O<80;O+=1){var E,R;O<16?(E=y(r,n,o,i,d,e[s[O]],l[0],c[O]),R=g(w,_,k,x,S,e[u[O]],h[0],f[O])):O<32?(E=m(r,n,o,i,d,e[s[O]],l[1],c[O]),R=v(w,_,k,x,S,e[u[O]],h[1],f[O])):O<48?(E=b(r,n,o,i,d,e[s[O]],l[2],c[O]),R=b(w,_,k,x,S,e[u[O]],h[2],f[O])):O<64?(E=v(r,n,o,i,d,e[s[O]],l[3],c[O]),R=m(w,_,k,x,S,e[u[O]],h[3],f[O])):(E=g(r,n,o,i,d,e[s[O]],l[4],c[O]),R=y(w,_,k,x,S,e[u[O]],h[4],f[O])),r=d,d=i,i=p(o,10),o=n,n=E,w=S,S=x,x=p(k,10),k=_,_=R}var j=this._b+o+x|0;this._b=this._c+i+S|0,this._c=this._d+d+w|0,this._d=this._e+r+_|0,this._e=this._a+n+k|0,this._a=j},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=n.alloc?n.alloc(20):new n(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},t.exports=d},{buffer:188,\"hash-base\":325,inherits:341}],445:[function(e,t,r){var n=e(\"buffer\"),o=n.Buffer;function i(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return o(e,t,r)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?t.exports=n:(i(n,r),r.Buffer=a),i(o,a),a.from=function(e,t,r){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return o(e,t,r)},a.alloc=function(e,t,r){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var n=o(e);return void 0!==t?\"string\"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return o(e)},a.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(e)}},{buffer:188}],446:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"xmlchars/xml/1.0/ed5\"),o=e(\"xmlchars/xml/1.1/ed2\"),i=e(\"xmlchars/xmlns/1.0/ed3\"),a=n.isS,s=n.isChar,u=n.isNameStartChar,c=n.isNameChar,f=n.S_LIST,l=n.NAME_RE,h=o.isChar,d=i.isNCNameStartChar,p=i.isNCNameChar,y=i.NC_NAME_RE,m=\"http://www.w3.org/XML/1998/namespace\",b=\"http://www.w3.org/2000/xmlns/\",v={__proto__:null,xml:m,xmlns:b},g={__proto__:null,amp:\"&\",gt:\">\",lt:\"<\",quot:'\"',apos:\"'\"},w=61,_=63,k=function(e){return 34===e||39===e},x=[34,39],S=[].concat(x,[91,62]),O=[].concat(x,[60,93]),E=[w,_].concat(_toConsumableArray2(f)),R=[].concat(_toConsumableArray2(f),[62,38,60]);function j(e,t,r){switch(t){case\"xml\":r!==m&&e.fail(\"xml prefix must be bound to \".concat(m,\".\"));break;case\"xmlns\":r!==b&&e.fail(\"xmlns prefix must be bound to \".concat(b,\".\"))}switch(r){case b:e.fail(\"\"===t?\"the default namespace may not be set to \".concat(r,\".\"):'may not assign a prefix (even \"xmlns\") to the URI '.concat(b,\".\"));break;case m:switch(t){case\"xml\":break;case\"\":e.fail(\"the default namespace may not be set to \".concat(r,\".\"));break;default:e.fail(\"may not assign the xml namespace to another prefix.\")}}}var T=function(e){return y.test(e)},C=function(e){return l.test(e)};r.EVENTS=[\"xmldecl\",\"text\",\"processinginstruction\",\"doctype\",\"comment\",\"opentagstart\",\"attribute\",\"opentag\",\"closetag\",\"cdata\",\"error\",\"end\",\"ready\"];var P={xmldecl:\"xmldeclHandler\",text:\"textHandler\",processinginstruction:\"piHandler\",doctype:\"doctypeHandler\",comment:\"commentHandler\",opentagstart:\"openTagStartHandler\",attribute:\"attributeHandler\",opentag:\"openTagHandler\",closetag:\"closeTagHandler\",cdata:\"cdataHandler\",error:\"errorHandler\",end:\"endHandler\",ready:\"readyHandler\"},A=function(){function e(t){_classCallCheck2(this,e),this.opt=null!=t?t:{},this.fragmentOpt=!!this.opt.fragment;var r=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,r){this.nameStartCheck=d,this.nameCheck=p,this.isName=T,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},v);var n=this.opt.additionalNamespaces;null!=n&&(!function(e,t){for(var r=0,n=Object.keys(t);r<n.length;r++){var o=n[r];j(e,o,t[o])}}(this,n),Object.assign(this.ns,n))}else this.nameStartCheck=u,this.nameCheck=c,this.isName=C,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}return _createClass2(e,[{key:\"_init\",value:function(){var e;this.openWakaBang=\"\",this.text=\"\",this.name=\"\",this.piTarget=\"\",this.entity=\"\",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk=\"\",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=0,this.attribList=[];var t=this.fragmentOpt;this.state=t?13:0,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=t,this.xmlDeclPossible=!t,this.xmlDeclExpects=[\"version\"],this.entityReturnState=void 0;var r=this.opt.defaultXMLVersion;if(void 0===r){if(!0===this.opt.forceXMLVersion)throw new Error(\"forceXMLVersion set but defaultXMLVersion is not set\");r=\"1.0\"}this.setXMLVersion(r),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(g),null===(e=this.readyHandler)||void 0===e||e.call(this)}},{key:\"on\",value:function(e,t){this[P[e]]=t}},{key:\"off\",value:function(e){this[P[e]]=void 0}},{key:\"makeError\",value:function(e){var t,r=null!==(t=this.fileName)&&void 0!==t?t:\"\";return this.trackPosition&&(r.length>0&&(r+=\":\"),r+=\"\".concat(this.line,\":\").concat(this.column)),r.length>0&&(r+=\": \"),new Error(r+e)}},{key:\"fail\",value:function(e){var t=this.makeError(e),r=this.errorHandler;if(void 0===r)throw t;return r(t),this}},{key:\"write\",value:function(e){if(this.closed)return this.fail(\"cannot write after close; assign an onready handler.\");var t=!1;null===e?(t=!0,e=\"\"):\"object\"===_typeof2(e)&&(e=e.toString()),void 0!==this.carriedFromPrevious&&(e=\"\".concat(this.carriedFromPrevious).concat(e),this.carriedFromPrevious=void 0);var r=e.length,n=e.charCodeAt(r-1);!t&&(13===n||n>=55296&&n<=56319)&&(this.carriedFromPrevious=e[r-1],r--,e=e.slice(0,r));var o=this.stateTable;for(this.chunk=e,this.i=0;this.i<r;)o[this.state].call(this);return this.chunkPosition+=r,t?this.end():this}},{key:\"close\",value:function(){return this.write(null)}},{key:\"getCode10\",value:function(){var e=this.chunk,t=this.i;if(this.prevI=t,this.i=t+1,t>=e.length)return-1;var r=e.charCodeAt(t);if(this.column++,r<55296){if(r>=32||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:return 10===e.charCodeAt(t+1)&&(this.i=t+2),this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail(\"disallowed character.\"),r}}if(r>56319)return r>=57344&&r<=65533||this.fail(\"disallowed character.\"),r;var n=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,n>1114111&&this.fail(\"disallowed character.\"),n}},{key:\"getCode11\",value:function(){var e=this.chunk,t=this.i;if(this.prevI=t,this.i=t+1,t>=e.length)return-1;var r=e.charCodeAt(t);if(this.column++,r<55296){if(r>31&&r<127||r>159&&8232!==r||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:var n=e.charCodeAt(t+1);10!==n&&133!==n||(this.i=t+2);case 133:case 8232:return this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail(\"disallowed character.\"),r}}if(r>56319)return r>=57344&&r<=65533||this.fail(\"disallowed character.\"),r;var o=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,o>1114111&&this.fail(\"disallowed character.\"),o}},{key:\"getCodeNorm\",value:function(){var e=this.getCode();return-2===e?10:e}},{key:\"unget\",value:function(){this.i=this.prevI,this.column--}},{key:\"captureTo\",value:function(e){for(var t=this.i,r=this.chunk;;){var n=this.getCode(),o=-2===n,i=o?10:n;if(-1===i||e.includes(i))return this.text+=r.slice(t,this.prevI),i;o&&(this.text+=\"\".concat(r.slice(t,this.prevI),\"\\n\"),t=this.i)}}},{key:\"captureToChar\",value:function(e){for(var t=this.i,r=this.chunk;;){var n=this.getCode();switch(n){case-2:this.text+=\"\".concat(r.slice(t,this.prevI),\"\\n\"),t=this.i,n=10;break;case-1:return this.text+=r.slice(t),!1}if(n===e)return this.text+=r.slice(t,this.prevI),!0}}},{key:\"captureNameChars\",value:function(){for(var e=this.chunk,t=this.i;;){var r=this.getCode();if(-1===r)return this.name+=e.slice(t),-1;if(!c(r))return this.name+=e.slice(t,this.prevI),-2===r?10:r}}},{key:\"skipSpaces\",value:function(){for(;;){var e=this.getCodeNorm();if(-1===e||!a(e))return e}}},{key:\"setXMLVersion\",value:function(e){this.currentXMLVersion=e,\"1.0\"===e?(this.isChar=s,this.getCode=this.getCode10):(this.isChar=h,this.getCode=this.getCode11)}},{key:\"sBegin\",value:function(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=1}},{key:\"sBeginWhitespace\",value:function(){var e=this.i,t=this.skipSpaces();switch(this.prevI!==e&&(this.xmlDeclPossible=!1),t){case 60:if(this.state=15,0!==this.text.length)throw new Error(\"no-empty text at start\");break;case-1:break;default:this.unget(),this.state=13,this.xmlDeclPossible=!1}}},{key:\"sDoctype\",value:function(){var e,t=this.captureTo(S);switch(t){case 62:null===(e=this.doctypeHandler)||void 0===e||e.call(this,this.text),this.text=\"\",this.state=13,this.doctype=!0;break;case-1:break;default:this.text+=String.fromCodePoint(t),91===t?this.state=4:k(t)&&(this.state=3,this.q=t)}}},{key:\"sDoctypeQuote\",value:function(){var e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.q=null,this.state=2)}},{key:\"sDTD\",value:function(){var e=this.captureTo(O);-1!==e&&(this.text+=String.fromCodePoint(e),93===e?this.state=2:60===e?this.state=6:k(e)&&(this.state=5,this.q=e))}},{key:\"sDTDQuoted\",value:function(){var e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.state=4,this.q=null)}},{key:\"sDTDOpenWaka\",value:function(){var e=this.getCodeNorm();switch(this.text+=String.fromCodePoint(e),e){case 33:this.state=7,this.openWakaBang=\"\";break;case _:this.state=11;break;default:this.state=4}}},{key:\"sDTDOpenWakaBang\",value:function(){var e=String.fromCodePoint(this.getCodeNorm()),t=this.openWakaBang+=e;this.text+=e,\"-\"!==t&&(this.state=\"--\"===t?8:4,this.openWakaBang=\"\")}},{key:\"sDTDComment\",value:function(){this.captureToChar(45)&&(this.text+=\"-\",this.state=9)}},{key:\"sDTDCommentEnding\",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),this.state=45===e?10:8}},{key:\"sDTDCommentEnded\",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e?this.state=4:(this.fail(\"malformed comment.\"),this.state=8)}},{key:\"sDTDPI\",value:function(){this.captureToChar(_)&&(this.text+=\"?\",this.state=12)}},{key:\"sDTDPIEnding\",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e&&(this.state=4)}},{key:\"sText\",value:function(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}},{key:\"sEntity\",value:function(){var e=this.i,t=this.chunk;e:for(;;)switch(this.getCode()){case-2:this.entity+=\"\".concat(t.slice(e,this.prevI),\"\\n\"),e=this.i;break;case 59:var r=this.entity+t.slice(e,this.prevI);if(this.state=this.entityReturnState,\"\"===r)return this.fail(\"empty entity name.\"),void(this.text+=\"&;\");this.text+=this.parseEntity(r),this.entity=\"\";break e;case-1:this.entity+=t.slice(e);break e}}},{key:\"sOpenWaka\",value:function(){var e=this.getCode();if(u(e))this.state=34,this.unget(),this.xmlDeclPossible=!1;else switch(e){case 47:this.state=43,this.xmlDeclPossible=!1;break;case 33:this.state=16,this.openWakaBang=\"\",this.xmlDeclPossible=!1;break;case _:this.state=23;break;default:this.fail(\"disallowed character in tag name\"),this.state=13,this.xmlDeclPossible=!1}}},{key:\"sOpenWakaBang\",value:function(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case\"[CDATA[\":this.sawRoot||this.reportedTextBeforeRoot||(this.fail(\"text data outside of root node.\"),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail(\"text data outside of root node.\"),this.reportedTextAfterRoot=!0),this.state=20,this.openWakaBang=\"\";break;case\"--\":this.state=17,this.openWakaBang=\"\";break;case\"DOCTYPE\":this.state=2,(this.doctype||this.sawRoot)&&this.fail(\"inappropriately located doctype declaration.\"),this.openWakaBang=\"\";break;default:this.openWakaBang.length>=7&&this.fail(\"incorrect syntax.\")}}},{key:\"sComment\",value:function(){this.captureToChar(45)&&(this.state=18)}},{key:\"sCommentEnding\",value:function(){var e,t=this.getCodeNorm();45===t?(this.state=19,null===(e=this.commentHandler)||void 0===e||e.call(this,this.text),this.text=\"\"):(this.text+=\"-\".concat(String.fromCodePoint(t)),this.state=17)}},{key:\"sCommentEnded\",value:function(){var e=this.getCodeNorm();62!==e?(this.fail(\"malformed comment.\"),this.text+=\"--\".concat(String.fromCodePoint(e)),this.state=17):this.state=13}},{key:\"sCData\",value:function(){this.captureToChar(93)&&(this.state=21)}},{key:\"sCDataEnding\",value:function(){var e=this.getCodeNorm();93===e?this.state=22:(this.text+=\"]\".concat(String.fromCodePoint(e)),this.state=20)}},{key:\"sCDataEnding2\",value:function(){var e,t=this.getCodeNorm();switch(t){case 62:null===(e=this.cdataHandler)||void 0===e||e.call(this,this.text),this.text=\"\",this.state=13;break;case 93:this.text+=\"]\";break;default:this.text+=\"]]\".concat(String.fromCodePoint(t)),this.state=20}}},{key:\"sPIFirstChar\",value:function(){var e=this.getCodeNorm();this.nameStartCheck(e)?(this.piTarget+=String.fromCodePoint(e),this.state=24):e===_||a(e)?(this.fail(\"processing instruction without a target.\"),this.state=e===_?26:25):(this.fail(\"disallowed character in processing instruction name.\"),this.piTarget+=String.fromCodePoint(e),this.state=24)}},{key:\"sPIRest\",value:function(){for(var e=this.chunk,t=this.i;;){var r=this.getCodeNorm();if(-1===r)return void(this.piTarget+=e.slice(t));if(!this.nameCheck(r)){this.piTarget+=e.slice(t,this.prevI);var n=r===_;n||a(r)?\"xml\"===this.piTarget?(this.xmlDeclPossible||this.fail(\"an XML declaration must be at the start of the document.\"),this.state=n?33:27):this.state=n?26:25:(this.fail(\"disallowed character in processing instruction name.\"),this.piTarget+=String.fromCodePoint(r));break}}}},{key:\"sPIBody\",value:function(){if(0===this.text.length){var e=this.getCodeNorm();e===_?this.state=26:a(e)||(this.text=String.fromCodePoint(e))}else this.captureToChar(_)&&(this.state=26)}},{key:\"sPIEnding\",value:function(){var e,t=this.getCodeNorm();if(62===t){var r=this.piTarget;\"xml\"===r.toLowerCase()&&this.fail(\"the XML declaration must appear at the start of the document.\"),null===(e=this.piHandler)||void 0===e||e.call(this,{target:r,body:this.text}),this.piTarget=this.text=\"\",this.state=13}else t===_?this.text+=\"?\":(this.text+=\"?\".concat(String.fromCodePoint(t)),this.state=25);this.xmlDeclPossible=!1}},{key:\"sXMLDeclNameStart\",value:function(){var e=this.skipSpaces();e!==_?-1!==e&&(this.state=28,this.name=String.fromCodePoint(e)):this.state=33}},{key:\"sXMLDeclName\",value:function(){var e=this.captureTo(E);if(e===_)return this.state=33,this.name+=this.text,this.text=\"\",void this.fail(\"XML declaration is incomplete.\");if(a(e)||e===w){if(this.name+=this.text,this.text=\"\",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail(\"did not expect any more name/value pairs.\");break;case 1:this.fail(\"expected the name \".concat(this.xmlDeclExpects[0],\".\"));break;default:this.fail(\"expected one of \".concat(this.xmlDeclExpects.join(\", \")))}this.state=e===w?30:29}}},{key:\"sXMLDeclEq\",value:function(){var e=this.getCodeNorm();if(e===_)return this.state=33,void this.fail(\"XML declaration is incomplete.\");a(e)||(e!==w&&this.fail(\"value required.\"),this.state=30)}},{key:\"sXMLDeclValueStart\",value:function(){var e=this.getCodeNorm();if(e===_)return this.state=33,void this.fail(\"XML declaration is incomplete.\");a(e)||(k(e)?this.q=e:(this.fail(\"value must be quoted.\"),this.q=32),this.state=31)}},{key:\"sXMLDeclValue\",value:function(){var e=this.captureTo([this.q,_]);if(e===_)return this.state=33,this.text=\"\",void this.fail(\"XML declaration is incomplete.\");if(-1!==e){var t=this.text;switch(this.text=\"\",this.name){case\"version\":this.xmlDeclExpects=[\"encoding\",\"standalone\"];var r=t;this.xmlDecl.version=r,/^1\\.[0-9]+$/.test(r)?this.opt.forceXMLVersion||this.setXMLVersion(r):this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");break;case\"encoding\":/^[A-Za-z][A-Za-z0-9._-]*$/.test(t)||this.fail(\"encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/.\"),this.xmlDeclExpects=[\"standalone\"],this.xmlDecl.encoding=t;break;case\"standalone\":\"yes\"!==t&&\"no\"!==t&&this.fail('standalone value must match \"yes\" or \"no\".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=t}this.name=\"\",this.state=32}}},{key:\"sXMLDeclSeparator\",value:function(){var e=this.getCodeNorm();e!==_?(a(e)||(this.fail(\"whitespace required.\"),this.unget()),this.state=27):this.state=33}},{key:\"sXMLDeclEnding\",value:function(){var e;62===this.getCodeNorm()?(\"xml\"!==this.piTarget?this.fail(\"processing instructions are not allowed before root.\"):\"version\"!==this.name&&this.xmlDeclExpects.includes(\"version\")&&this.fail(\"XML declaration must contain a version.\"),null===(e=this.xmldeclHandler)||void 0===e||e.call(this,this.xmlDecl),this.name=\"\",this.piTarget=this.text=\"\",this.state=13):this.fail(\"The character ? is disallowed anywhere in XML declarations.\"),this.xmlDeclPossible=!1}},{key:\"sOpenTag\",value:function(){var e,t=this.captureNameChars();if(-1!==t){var r=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name=\"\",this.xmlnsOpt&&(this.topNS=r.ns=Object.create(null)),null===(e=this.openTagStartHandler)||void 0===e||e.call(this,r),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail(\"documents may contain only one root.\"),t){case 62:this.openTag();break;case 47:this.state=35;break;default:a(t)||this.fail(\"disallowed character in tag name.\"),this.state=36}}}},{key:\"sOpenTagSlash\",value:function(){62===this.getCode()?this.openSelfClosingTag():(this.fail(\"forward-slash in opening tag not followed by >.\"),this.state=36)}},{key:\"sAttrib\",value:function(){var e=this.skipSpaces();-1!==e&&(u(e)?(this.unget(),this.state=37):62===e?this.openTag():47===e?this.state=35:this.fail(\"disallowed character in attribute name.\"))}},{key:\"sAttribName\",value:function(){var e=this.captureNameChars();e===w?this.state=39:a(e)?this.state=38:62===e?(this.fail(\"attribute without value.\"),this.pushAttrib(this.name,this.name),this.name=this.text=\"\",this.openTag()):-1!==e&&this.fail(\"disallowed character in attribute name.\")}},{key:\"sAttribNameSawWhite\",value:function(){var e=this.skipSpaces();switch(e){case-1:return;case w:this.state=39;break;default:this.fail(\"attribute without value.\"),this.text=\"\",this.name=\"\",62===e?this.openTag():u(e)?(this.unget(),this.state=37):(this.fail(\"disallowed character in attribute name.\"),this.state=36)}}},{key:\"sAttribValue\",value:function(){var e=this.getCodeNorm();k(e)?(this.q=e,this.state=40):a(e)||(this.fail(\"unquoted attribute value.\"),this.state=42,this.unget())}},{key:\"sAttribValueQuoted\",value:function(){for(var e=this.q,t=this.chunk,r=this.i;;)switch(this.getCode()){case e:return this.pushAttrib(this.name,this.text+t.slice(r,this.prevI)),this.name=this.text=\"\",this.q=null,void(this.state=41);case 38:return this.text+=t.slice(r,this.prevI),this.state=14,void(this.entityReturnState=40);case 10:case-2:case 9:this.text+=\"\".concat(t.slice(r,this.prevI),\" \"),r=this.i;break;case 60:return this.text+=t.slice(r,this.prevI),void this.fail(\"disallowed character.\");case-1:return void(this.text+=t.slice(r))}}},{key:\"sAttribValueClosed\",value:function(){var e=this.getCodeNorm();a(e)?this.state=36:62===e?this.openTag():47===e?this.state=35:u(e)?(this.fail(\"no whitespace between attributes.\"),this.unget(),this.state=37):this.fail(\"disallowed character in attribute name.\")}},{key:\"sAttribValueUnquoted\",value:function(){var e=this.captureTo(R);switch(e){case 38:this.state=14,this.entityReturnState=42;break;case 60:this.fail(\"disallowed character.\");break;case-1:break;default:this.text.includes(\"]]>\")&&this.fail('the string \"]]>\" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text=\"\",62===e?this.openTag():this.state=36}}},{key:\"sCloseTag\",value:function(){var e=this.captureNameChars();62===e?this.closeTag():a(e)?this.state=44:-1!==e&&this.fail(\"disallowed character in closing tag.\")}},{key:\"sCloseTagSawWhite\",value:function(){switch(this.skipSpaces()){case 62:this.closeTag();break;case-1:break;default:this.fail(\"disallowed character in closing tag.\")}}},{key:\"handleTextInRoot\",value:function(){var e=this.i,t=this.forbiddenState,r=this.chunk,n=this.textHandler;e:for(;;)switch(this.getCode()){case 60:if(this.state=15,void 0!==n){var o=this.text,i=r.slice(e,this.prevI);0!==o.length?(n(o+i),this.text=\"\"):0!==i.length&&n(i)}t=0;break e;case 38:this.state=14,this.entityReturnState=13,void 0!==n&&(this.text+=r.slice(e,this.prevI)),t=0;break e;case 93:switch(t){case 0:t=1;break;case 1:t=2;break;case 2:break;default:throw new Error(\"impossible state\")}break;case 62:2===t&&this.fail('the string \"]]>\" is disallowed in char data.'),t=0;break;case-2:void 0!==n&&(this.text+=\"\".concat(r.slice(e,this.prevI),\"\\n\")),e=this.i,t=0;break;case-1:void 0!==n&&(this.text+=r.slice(e));break e;default:t=0}this.forbiddenState=t}},{key:\"handleTextOutsideRoot\",value:function(){var e=this.i,t=this.chunk,r=this.textHandler,n=!1;e:for(;;){var o=this.getCode();switch(o){case 60:if(this.state=15,void 0!==r){var i=this.text,s=t.slice(e,this.prevI);0!==i.length?(r(i+s),this.text=\"\"):0!==s.length&&r(s)}break e;case 38:this.state=14,this.entityReturnState=13,void 0!==r&&(this.text+=t.slice(e,this.prevI)),n=!0;break e;case-2:void 0!==r&&(this.text+=\"\".concat(t.slice(e,this.prevI),\"\\n\")),e=this.i;break;case-1:void 0!==r&&(this.text+=t.slice(e));break e;default:a(o)||(n=!0)}}n&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail(\"text data outside of root node.\"),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail(\"text data outside of root node.\"),this.reportedTextAfterRoot=!0))}},{key:\"pushAttribNS\",value:function(e,t){var r,n=this.qname(e),o=n.prefix,i=n.local,a={name:e,prefix:o,local:i,value:t};if(this.attribList.push(a),null===(r=this.attributeHandler)||void 0===r||r.call(this,a),\"xmlns\"===o){var s=t.trim();\"1.0\"===this.currentXMLVersion&&\"\"===s&&this.fail(\"invalid attempt to undefine prefix in XML 1.0\"),this.topNS[i]=s,j(this,i,s)}else if(\"xmlns\"===e){var u=t.trim();this.topNS[\"\"]=u,j(this,\"\",u)}}},{key:\"pushAttribPlain\",value:function(e,t){var r,n={name:e,value:t};this.attribList.push(n),null===(r=this.attributeHandler)||void 0===r||r.call(this,n)}},{key:\"end\",value:function(){var e,t;this.sawRoot||this.fail(\"document must contain a root element.\");for(var r=this.tags;r.length>0;){var n=r.pop();this.fail(\"unclosed tag: \".concat(n.name))}0!==this.state&&13!==this.state&&this.fail(\"unexpected end.\");var o=this.text;return 0!==o.length&&(null===(e=this.textHandler)||void 0===e||e.call(this,o),this.text=\"\"),this._closed=!0,null===(t=this.endHandler)||void 0===t||t.call(this),this._init(),this}},{key:\"resolve\",value:function(e){var t,r,n=this.topNS[e];if(void 0!==n)return n;for(var o=this.tags,i=o.length-1;i>=0;i--)if(void 0!==(n=o[i].ns[e]))return n;return void 0!==(n=this.ns[e])?n:null===(r=(t=this.opt).resolvePrefix)||void 0===r?void 0:r.call(t,e)}},{key:\"qname\",value:function(e){var t=e.indexOf(\":\");if(-1===t)return{prefix:\"\",local:e};var r=e.slice(t+1),n=e.slice(0,t);return(\"\"===n||\"\"===r||r.includes(\":\"))&&this.fail(\"malformed name: \".concat(e,\".\")),{prefix:n,local:r}}},{key:\"processAttribsNS\",value:function(){var e,t=this.attribList,r=this.tag,n=this.qname(r.name),o=n.prefix,i=n.local;r.prefix=o,r.local=i;var a=r.uri=null!==(e=this.resolve(o))&&void 0!==e?e:\"\";if(\"\"!==o&&(\"xmlns\"===o&&this.fail('tags may not have \"xmlns\" as prefix.'),\"\"===a&&(this.fail(\"unbound namespace prefix: \".concat(JSON.stringify(o),\".\")),r.uri=o)),0!==t.length){var s,u=r.attributes,c=new Set,f=_createForOfIteratorHelper2(t);try{for(f.s();!(s=f.n()).done;){var l=s.value,h=l.name,d=l.prefix,p=l.local,y=void 0,m=void 0;\"\"===d?(y=\"xmlns\"===h?b:\"\",m=h):(void 0===(y=this.resolve(d))&&(this.fail(\"unbound namespace prefix: \".concat(JSON.stringify(d),\".\")),y=d),m=\"{\".concat(y,\"}\").concat(p)),c.has(m)&&this.fail(\"duplicate attribute: \".concat(m,\".\")),c.add(m),l.uri=y,u[h]=l}}catch(e){f.e(e)}finally{f.f()}this.attribList=[]}}},{key:\"processAttribsPlain\",value:function(){var e,t=this.attribList,r=this.tag.attributes,n=_createForOfIteratorHelper2(t);try{for(n.s();!(e=n.n()).done;){var o=e.value,i=o.name,a=o.value;void 0!==r[i]&&this.fail(\"duplicate attribute: \".concat(i,\".\")),r[i]=a}}catch(e){n.e(e)}finally{n.f()}this.attribList=[]}},{key:\"openTag\",value:function(){var e;this.processAttribs();var t=this.tags,r=this.tag;r.isSelfClosing=!1,null===(e=this.openTagHandler)||void 0===e||e.call(this,r),t.push(r),this.state=13,this.name=\"\"}},{key:\"openSelfClosingTag\",value:function(){var e,t,r;this.processAttribs();var n=this.tags,o=this.tag;o.isSelfClosing=!0,null===(e=this.openTagHandler)||void 0===e||e.call(this,o),null===(t=this.closeTagHandler)||void 0===t||t.call(this,o),null===(this.tag=null!==(r=n[n.length-1])&&void 0!==r?r:null)&&(this.closedRoot=!0),this.state=13,this.name=\"\"}},{key:\"closeTag\",value:function(){var e=this.tags,t=this.name;if(this.state=13,this.name=\"\",\"\"===t)return this.fail(\"weird empty close tag.\"),void(this.text+=\"</>\");for(var r=this.closeTagHandler,n=e.length;n-- >0;){var o=this.tag=e.pop();if(this.topNS=o.ns,null==r||r(o),o.name===t)break;this.fail(\"unexpected close tag.\")}0===n?this.closedRoot=!0:n<0&&(this.fail(\"unmatched closing tag: \".concat(t,\".\")),this.text+=\"</\".concat(t,\">\"))}},{key:\"parseEntity\",value:function(e){if(\"#\"!==e[0]){var t=this.ENTITIES[e];return void 0!==t?t:(this.fail(this.isName(e)?\"undefined entity.\":\"disallowed character in entity name.\"),\"&\".concat(e,\";\"))}var r=NaN;return\"x\"===e[1]&&/^#x[0-9a-f]+$/i.test(e)?r=parseInt(e.slice(2),16):/^#[0-9]+$/.test(e)&&(r=parseInt(e.slice(1),10)),this.isChar(r)?String.fromCodePoint(r):(this.fail(\"malformed character entity.\"),\"&\".concat(e,\";\"))}},{key:\"closed\",get:function(){return this._closed}},{key:\"position\",get:function(){return this.chunkPosition+this.i}},{key:\"columnIndex\",get:function(){return this.position-this.positionAtNewLine}}]),e}();r.SaxesParser=A},{\"xmlchars/xml/1.0/ed5\":482,\"xmlchars/xml/1.1/ed2\":483,\"xmlchars/xmlns/1.0/ed3\":484}],447:[function(e,t,r){(function(e){t.exports=\"function\"==typeof e?e:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}}).call(this,e(\"timers\").setImmediate)},{timers:471}],448:[function(e,t,r){var n=e(\"safe-buffer\").Buffer;function o(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}o.prototype.update=function(e,t){\"string\"==typeof e&&(t=t||\"utf8\",e=n.from(e,t));for(var r=this._block,o=this._blockSize,i=e.length,a=this._len,s=0;s<i;){for(var u=a%o,c=Math.min(i-s,o-u),f=0;f<c;f++)r[u+f]=e[s+f];s+=c,(a+=c)%o==0&&this._update(r)}return this._len+=i,this},o.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,o=(r-n)/4294967296;this._block.writeUInt32BE(o,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var i=this._hash();return e?i.toString(e):i},o.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},t.exports=o},{\"safe-buffer\":445}],449:[function(e,t,r){(r=t.exports=function(e){e=e.toLowerCase();var t=r[e];if(!t)throw new Error(e+\" is not supported (we accept pull requests)\");return new t}).sha=e(\"./sha\"),r.sha1=e(\"./sha1\"),r.sha224=e(\"./sha224\"),r.sha256=e(\"./sha256\"),r.sha384=e(\"./sha384\"),r.sha512=e(\"./sha512\")},{\"./sha\":450,\"./sha1\":451,\"./sha224\":452,\"./sha256\":453,\"./sha384\":454,\"./sha512\":455}],450:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<30|e>>>2}function f(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,o),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,l=0;l<16;++l)r[l]=e.readInt32BE(4*l);for(;l<80;++l)r[l]=r[l-3]^r[l-8]^r[l-14]^r[l-16];for(var h=0;h<80;++h){var d=~~(h/20),p=0|((t=n)<<5|t>>>27)+f(d,o,i,s)+u+r[h]+a[d];u=s,s=i,i=c(o),o=n,n=p}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],451:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<5|e>>>27}function f(e){return e<<30|e>>>2}function l(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,o),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,h=0;h<16;++h)r[h]=e.readInt32BE(4*h);for(;h<80;++h)r[h]=(t=r[h-3]^r[h-8]^r[h-14]^r[h-16])<<1|t>>>31;for(var d=0;d<80;++d){var p=~~(d/20),y=c(n)+l(p,o,i,s)+u+r[d]+a[p]|0;u=s,s=i,i=f(o),o=n,n=y}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],452:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./sha256\"),i=e(\"./hash\"),a=e(\"safe-buffer\").Buffer,s=new Array(64);function u(){this.init(),this._w=s,i.call(this,64,56)}n(u,o),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},t.exports=u},{\"./hash\":448,\"./sha256\":453,inherits:341,\"safe-buffer\":445}],453:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e,t,r){return r^e&(t^r)}function f(e,t,r){return e&t|r&(e|t)}function l(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function h(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function d(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(u,o),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,p=0|this._f,y=0|this._g,m=0|this._h,b=0;b<16;++b)r[b]=e.readInt32BE(4*b);for(;b<64;++b)r[b]=0|(((t=r[b-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[b-7]+d(r[b-15])+r[b-16];for(var v=0;v<64;++v){var g=m+h(u)+c(u,p,y)+a[v]+r[v]|0,w=l(n)+f(n,o,i)|0;m=y,y=p,p=u,u=s+g|0,s=i,i=o,o=n,n=g+w|0}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0,this._f=p+this._f|0,this._g=y+this._g|0,this._h=m+this._h|0},u.prototype._hash=function(){var e=i.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],454:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./sha512\"),i=e(\"./hash\"),a=e(\"safe-buffer\").Buffer,s=new Array(160);function u(){this.init(),this._w=s,i.call(this,128,112)}n(u,o),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},t.exports=u},{\"./hash\":448,\"./sha512\":455,inherits:341,\"safe-buffer\":445}],455:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function u(){this.init(),this._w=s,o.call(this,128,112)}function c(e,t,r){return r^e&(t^r)}function f(e,t,r){return e&t|r&(e|t)}function l(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function h(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function y(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function b(e,t){return e>>>0<t>>>0?1:0}n(u,o),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,o=0|this._ch,i=0|this._dh,s=0|this._eh,u=0|this._fh,v=0|this._gh,g=0|this._hh,w=0|this._al,_=0|this._bl,k=0|this._cl,x=0|this._dl,S=0|this._el,O=0|this._fl,E=0|this._gl,R=0|this._hl,j=0;j<32;j+=2)t[j]=e.readInt32BE(4*j),t[j+1]=e.readInt32BE(4*j+4);for(;j<160;j+=2){var T=t[j-30],C=t[j-30+1],P=d(T,C),A=p(C,T),M=y(T=t[j-4],C=t[j-4+1]),I=m(C,T),N=t[j-14],D=t[j-14+1],B=t[j-32],F=t[j-32+1],L=A+D|0,z=P+N+b(L,A)|0;z=(z=z+M+b(L=L+I|0,I)|0)+B+b(L=L+F|0,F)|0,t[j]=z,t[j+1]=L}for(var U=0;U<160;U+=2){z=t[U],L=t[U+1];var H=f(r,n,o),V=f(w,_,k),W=l(r,w),q=l(w,r),$=h(s,S),X=h(S,s),K=a[U],Y=a[U+1],Z=c(s,u,v),G=c(S,O,E),J=R+X|0,Q=g+$+b(J,R)|0;Q=(Q=(Q=Q+Z+b(J=J+G|0,G)|0)+K+b(J=J+Y|0,Y)|0)+z+b(J=J+L|0,L)|0;var ee=q+V|0,te=W+H+b(ee,q)|0;g=v,R=E,v=u,E=O,u=s,O=S,s=i+Q+b(S=x+J|0,x)|0,i=o,x=k,o=n,k=_,n=r,_=w,r=Q+te+b(w=J+ee|0,J)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+k|0,this._dl=this._dl+x|0,this._el=this._el+S|0,this._fl=this._fl+O|0,this._gl=this._gl+E|0,this._hl=this._hl+R|0,this._ah=this._ah+r+b(this._al,w)|0,this._bh=this._bh+n+b(this._bl,_)|0,this._ch=this._ch+o+b(this._cl,k)|0,this._dh=this._dh+i+b(this._dl,x)|0,this._eh=this._eh+s+b(this._el,S)|0,this._fh=this._fh+u+b(this._fl,O)|0,this._gh=this._gh+v+b(this._gl,E)|0,this._hh=this._hh+g+b(this._hl,R)|0},u.prototype._hash=function(){var e=i.allocUnsafe(64);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],456:[function(e,t,r){t.exports=o;var n=e(\"events\").EventEmitter;function o(){n.call(this)}e(\"inherits\")(o,n),o.Readable=e(\"readable-stream/readable.js\"),o.Writable=e(\"readable-stream/writable.js\"),o.Duplex=e(\"readable-stream/duplex.js\"),o.Transform=e(\"readable-stream/transform.js\"),o.PassThrough=e(\"readable-stream/passthrough.js\"),o.Stream=o,o.prototype.pipe=function(e,t){var r=this;function o(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function i(){r.readable&&r.resume&&r.resume()}r.on(\"data\",o),e.on(\"drain\",i),e._isStdio||t&&!1===t.end||(r.on(\"end\",s),r.on(\"close\",u));var a=!1;function s(){a||(a=!0,e.end())}function u(){a||(a=!0,\"function\"==typeof e.destroy&&e.destroy())}function c(e){if(f(),0===n.listenerCount(this,\"error\"))throw e}function f(){r.removeListener(\"data\",o),e.removeListener(\"drain\",i),r.removeListener(\"end\",s),r.removeListener(\"close\",u),r.removeListener(\"error\",c),e.removeListener(\"error\",c),r.removeListener(\"end\",f),r.removeListener(\"close\",f),e.removeListener(\"close\",f)}return r.on(\"error\",c),e.on(\"error\",c),r.on(\"end\",f),r.on(\"close\",f),e.on(\"close\",f),e.emit(\"pipe\",r),e}},{events:299,inherits:341,\"readable-stream/duplex.js\":457,\"readable-stream/passthrough.js\":466,\"readable-stream/readable.js\":467,\"readable-stream/transform.js\":468,\"readable-stream/writable.js\":469}],457:[function(e,t,r){t.exports=e(\"./lib/_stream_duplex.js\")},{\"./lib/_stream_duplex.js\":458}],458:[function(e,t,r){var n=e(\"process-nextick-args\"),o=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=l;var i=e(\"core-util-is\");i.inherits=e(\"inherits\");var a=e(\"./_stream_readable\"),s=e(\"./_stream_writable\");i.inherits(l,a);for(var u=o(s.prototype),c=0;c<u.length;c++){var f=u[c];l.prototype[f]||(l.prototype[f]=s.prototype[f])}function l(e){if(!(this instanceof l))return new l(e);a.call(this,e),s.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once(\"end\",h)}function h(){this.allowHalfOpen||this._writableState.ended||n.nextTick(d,this)}function d(e){e.end()}Object.defineProperty(l.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(l.prototype,\"destroyed\",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),l.prototype._destroy=function(e,t){this.push(null),this.end(),n.nextTick(t,e)}},{\"./_stream_readable\":460,\"./_stream_writable\":462,\"core-util-is\":263,inherits:341,\"process-nextick-args\":418}],459:[function(e,t,r){t.exports=i;var n=e(\"./_stream_transform\"),o=e(\"core-util-is\");function i(e){if(!(this instanceof i))return new i(e);n.call(this,e)}o.inherits=e(\"inherits\"),o.inherits(i,n),i.prototype._transform=function(e,t,r){r(null,e)}},{\"./_stream_transform\":461,\"core-util-is\":263,inherits:341}],460:[function(e,t,r){(function(r,n){var o=e(\"process-nextick-args\");t.exports=g;var i,a=e(\"isarray\");g.ReadableState=v;e(\"events\").EventEmitter;var s=function(e,t){return e.listeners(t).length},u=e(\"./internal/streams/stream\"),c=e(\"safe-buffer\").Buffer,f=n.Uint8Array||function(){};var l=e(\"core-util-is\");l.inherits=e(\"inherits\");var h=e(\"util\"),d=void 0;d=h&&h.debuglog?h.debuglog(\"stream\"):function(){};var p,y=e(\"./internal/streams/BufferList\"),m=e(\"./internal/streams/destroy\");l.inherits(g,u);var b=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function v(t,r){t=t||{};var n=r instanceof(i=i||e(\"./_stream_duplex\"));this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var o=t.highWaterMark,a=t.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:n&&(a||0===a)?a:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new y,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(p||(p=e(\"string_decoder/\").StringDecoder),this.decoder=new p(t.encoding),this.encoding=t.encoding)}function g(t){if(i=i||e(\"./_stream_duplex\"),!(this instanceof g))return new g(t);this._readableState=new v(t,this),this.readable=!0,t&&(\"function\"==typeof t.read&&(this._read=t.read),\"function\"==typeof t.destroy&&(this._destroy=t.destroy)),u.call(this)}function w(e,t,r,n,o){var i,a=e._readableState;null===t?(a.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,x(e)}(e,a)):(o||(i=function(e,t){var r;n=t,c.isBuffer(n)||n instanceof f||\"string\"==typeof t||void 0===t||e.objectMode||(r=new TypeError(\"Invalid non-string/buffer chunk\"));var n;return r}(a,t)),i?e.emit(\"error\",i):a.objectMode||t&&t.length>0?(\"string\"==typeof t||a.objectMode||Object.getPrototypeOf(t)===c.prototype||(t=function(e){return c.from(e)}(t)),n?a.endEmitted?e.emit(\"error\",new Error(\"stream.unshift() after end event\")):_(e,a,t,!0):a.ended?e.emit(\"error\",new Error(\"stream.push() after EOF\")):(a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?_(e,a,t,!1):O(e,a)):_(e,a,t,!1))):n||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(a)}function _(e,t,r,n){t.flowing&&0===t.length&&!t.sync?(e.emit(\"data\",r),e.read(0)):(t.length+=t.objectMode?1:r.length,n?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&x(e)),O(e,t)}Object.defineProperty(g.prototype,\"destroyed\",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),g.prototype.destroy=m.destroy,g.prototype._undestroy=m.undestroy,g.prototype._destroy=function(e,t){this.push(null),t(e)},g.prototype.push=function(e,t){var r,n=this._readableState;return n.objectMode?r=!0:\"string\"==typeof e&&((t=t||n.defaultEncoding)!==n.encoding&&(e=c.from(e,t),t=\"\"),r=!0),w(this,e,t,!1,r)},g.prototype.unshift=function(e){return w(this,e,null,!0,!1)},g.prototype.isPaused=function(){return!1===this._readableState.flowing},g.prototype.setEncoding=function(t){return p||(p=e(\"string_decoder/\").StringDecoder),this._readableState.decoder=new p(t),this._readableState.encoding=t,this};function k(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function x(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(d(\"emitReadable\",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(S,e):S(e))}function S(e){d(\"emit readable\"),e.emit(\"readable\"),T(e)}function O(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(E,e,t))}function E(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(d(\"maybeReadMore read 0\"),e.read(0),r!==t.length);)r=t.length;t.readingMore=!1}function R(e){d(\"readable nexttick read 0\"),e.read(0)}function j(e,t){t.reading||(d(\"resume read 0\"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit(\"resume\"),T(e),t.flowing&&!t.reading&&e.read(0)}function T(e){var t=e._readableState;for(d(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function C(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;e<t.head.data.length?(n=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):n=e===t.head.data.length?t.shift():r?function(e,t){var r=t.head,n=1,o=r.data;e-=o.length;for(;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++n}return t.length-=n,o}(e,t):function(e,t){var r=c.allocUnsafe(e),n=t.head,o=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var i=n.data,a=e>i.length?i.length:e;if(i.copy(r,r.length-e,0,a),0===(e-=a)){a===i.length?(++o,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++o}return t.length-=o,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function P(e){var t=e._readableState;if(t.length>0)throw new Error('\"endReadable()\" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(A,t,e))}function A(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"))}function M(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}g.prototype.read=function(e){d(\"read\",e),e=parseInt(e,10);var t=this._readableState,r=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return d(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?P(this):x(this),null;if(0===(e=k(e,t))&&t.ended)return 0===t.length&&P(this),null;var n,o=t.needReadable;return d(\"need readable\",o),(0===t.length||t.length-e<t.highWaterMark)&&d(\"length less than watermark\",o=!0),t.ended||t.reading?d(\"reading or ended\",o=!1):o&&(d(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=k(r,t))),null===(n=e>0?C(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&P(this)),null!==n&&this.emit(\"data\",n),n},g.prototype._read=function(e){this.emit(\"error\",new Error(\"_read() is not implemented\"))},g.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,d(\"pipe count=%d opts=%j\",i.pipesCount,t);var u=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?f:g;function c(t,r){d(\"onunpipe\"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,d(\"cleanup\"),e.removeListener(\"close\",b),e.removeListener(\"finish\",v),e.removeListener(\"drain\",l),e.removeListener(\"error\",m),e.removeListener(\"unpipe\",c),n.removeListener(\"end\",f),n.removeListener(\"end\",g),n.removeListener(\"data\",y),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||l())}function f(){d(\"onend\"),e.end()}i.endEmitted?o.nextTick(u):n.once(\"end\",u),e.on(\"unpipe\",c);var l=function(e){return function(){var t=e._readableState;d(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,T(e))}}(n);e.on(\"drain\",l);var h=!1;var p=!1;function y(t){d(\"ondata\"),p=!1,!1!==e.write(t)||p||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==M(i.pipes,e))&&!h&&(d(\"false write response, pause\",n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}function m(t){d(\"onerror\",t),g(),e.removeListener(\"error\",m),0===s(e,\"error\")&&e.emit(\"error\",t)}function b(){e.removeListener(\"finish\",v),g()}function v(){d(\"onfinish\"),e.removeListener(\"close\",b),g()}function g(){d(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",y),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",m),e.once(\"close\",b),e.once(\"finish\",v),e.emit(\"pipe\",n),i.flowing||(d(\"pipe resume\"),n.resume()),e},g.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i<o;i++)n[i].emit(\"unpipe\",this,r);return this}var a=M(t.pipes,e);return-1===a||(t.pipes.splice(a,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,r)),this},g.prototype.on=function(e,t){var r=u.prototype.on.call(this,e,t);if(\"data\"===e)!1!==this._readableState.flowing&&this.resume();else if(\"readable\"===e){var n=this._readableState;n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.emittedReadable=!1,n.reading?n.length&&x(this):o.nextTick(R,this))}return r},g.prototype.addListener=g.prototype.on,g.prototype.resume=function(){var e=this._readableState;return e.flowing||(d(\"resume\"),e.flowing=!0,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,o.nextTick(j,e,t))}(this,e)),this},g.prototype.pause=function(){return d(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(d(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this},g.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var o in e.on(\"end\",(function(){if(d(\"wrapped end\"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(o){(d(\"wrapped data\"),r.decoder&&(o=r.decoder.write(o)),r.objectMode&&null==o)||(r.objectMode||o&&o.length)&&(t.push(o)||(n=!0,e.pause()))})),e)void 0===this[o]&&\"function\"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var i=0;i<b.length;i++)e.on(b[i],this.emit.bind(this,b[i]));return this._read=function(t){d(\"wrapped _read\",t),n&&(n=!1,e.resume())},this},Object.defineProperty(g.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),g._fromList=C}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./_stream_duplex\":458,\"./internal/streams/BufferList\":463,\"./internal/streams/destroy\":464,\"./internal/streams/stream\":465,_process:419,\"core-util-is\":263,events:299,inherits:341,isarray:343,\"process-nextick-args\":418,\"safe-buffer\":445,\"string_decoder/\":470,util:158}],461:[function(e,t,r){t.exports=a;var n=e(\"./_stream_duplex\"),o=e(\"core-util-is\");function i(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit(\"error\",new Error(\"write callback called multiple times\"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:i.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",s)}function s(){var e=this;\"function\"==typeof this._flush?this._flush((function(t,r){u(e,t,r)})):u(this,null,null)}function u(e,t,r){if(t)return e.emit(\"error\",t);if(null!=r&&e.push(r),e._writableState.length)throw new Error(\"Calling transform done when ws.length != 0\");if(e._transformState.transforming)throw new Error(\"Calling transform done when still transforming\");return e.push(null)}o.inherits=e(\"inherits\"),o.inherits(a,n),a.prototype.push=function(e,t){return this._transformState.needTransform=!1,n.prototype.push.call(this,e,t)},a.prototype._transform=function(e,t,r){throw new Error(\"_transform() is not implemented\")},a.prototype._write=function(e,t,r){var n=this._transformState;if(n.writecb=r,n.writechunk=e,n.writeencoding=t,!n.transforming){var o=this._readableState;(n.needTransform||o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}},a.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},a.prototype._destroy=function(e,t){var r=this;n.prototype._destroy.call(this,e,(function(e){t(e),r.emit(\"close\")}))}},{\"./_stream_duplex\":458,\"core-util-is\":263,inherits:341}],462:[function(e,t,r){(function(r,n,o){var i=e(\"process-nextick-args\");function a(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,r){var n=e.entry;e.entry=null;for(;n;){var o=n.callback;t.pendingcb--,o(r),n=n.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}t.exports=v;var s,u=!r.browser&&[\"v0.10\",\"v0.9.\"].indexOf(r.version.slice(0,5))>-1?o:i.nextTick;v.WritableState=b;var c=e(\"core-util-is\");c.inherits=e(\"inherits\");var f={deprecate:e(\"util-deprecate\")},l=e(\"./internal/streams/stream\"),h=e(\"safe-buffer\").Buffer,d=n.Uint8Array||function(){};var p,y=e(\"./internal/streams/destroy\");function m(){}function b(t,r){s=s||e(\"./_stream_duplex\"),t=t||{};var n=r instanceof s;this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var o=t.highWaterMark,c=t.writableHighWaterMark,f=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:n&&(c||0===c)?c:f,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var l=!1===t.decodeStrings;this.decodeStrings=!l,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,o=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,o){--t.pendingcb,r?(i.nextTick(o,n),i.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit(\"error\",n)):(o(n),e._writableState.errorEmitted=!0,e.emit(\"error\",n),S(e,t))}(e,r,n,t,o);else{var a=k(r);a||r.corked||r.bufferProcessing||!r.bufferedRequest||_(e,r),n?u(w,e,r,a,o):w(e,r,a,o)}}(r,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function v(t){if(s=s||e(\"./_stream_duplex\"),!(p.call(v,this)||this instanceof s))return new v(t);this._writableState=new b(t,this),this.writable=!0,t&&(\"function\"==typeof t.write&&(this._write=t.write),\"function\"==typeof t.writev&&(this._writev=t.writev),\"function\"==typeof t.destroy&&(this._destroy=t.destroy),\"function\"==typeof t.final&&(this._final=t.final)),l.call(this)}function g(e,t,r,n,o,i,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,r?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),S(e,t)}function _(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,o=new Array(n),i=t.corkedRequestsFree;i.entry=r;for(var s=0,u=!0;r;)o[s]=r,r.isBuf||(u=!1),r=r.next,s+=1;o.allBuffers=u,g(e,t,!0,t.length,o,\"\",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;r;){var c=r.chunk,f=r.encoding,l=r.callback;if(g(e,t,!1,t.objectMode?1:c.length,c,f,l),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function k(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final((function(r){t.pendingcb--,r&&e.emit(\"error\",r),t.prefinished=!0,e.emit(\"prefinish\"),S(e,t)}))}function S(e,t){var r=k(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||(\"function\"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(x,e,t)):(t.prefinished=!0,e.emit(\"prefinish\")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"))),r}c.inherits(v,l),b.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(b.prototype,\"buffer\",{get:f.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(v,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===v&&(e&&e._writableState instanceof b)}})):p=function(e){return e instanceof this},v.prototype.pipe=function(){this.emit(\"error\",new Error(\"Cannot pipe, not readable\"))},v.prototype.write=function(e,t,r){var n,o=this._writableState,a=!1,s=!o.objectMode&&(n=e,h.isBuffer(n)||n instanceof d);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),\"function\"==typeof t&&(r=t,t=null),s?t=\"buffer\":t||(t=o.defaultEncoding),\"function\"!=typeof r&&(r=m),o.ended?function(e,t){var r=new Error(\"write after end\");e.emit(\"error\",r),i.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var o=!0,a=!1;return null===r?a=new TypeError(\"May not write null values to stream\"):\"string\"==typeof r||void 0===r||t.objectMode||(a=new TypeError(\"Invalid non-string/buffer chunk\")),a&&(e.emit(\"error\",a),i.nextTick(n,a),o=!1),o}(this,o,e,r))&&(o.pendingcb++,a=function(e,t,r,n,o,i){if(!r){var a=function(e,t,r){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=h.from(t,r));return t}(t,n,o);n!==a&&(r=!0,o=\"buffer\",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var u=t.length<t.highWaterMark;u||(t.needDrain=!0);if(t.writing||t.corked){var c=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:o,isBuf:r,callback:i,next:null},c?c.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else g(e,t,!1,s,n,o,i);return u}(this,o,s,e,t,r)),a},v.prototype.cork=function(){this._writableState.corked++},v.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||_(this,e))},v.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new TypeError(\"Unknown encoding: \"+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(v.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),v.prototype._write=function(e,t,r){r(new Error(\"_write() is not implemented\"))},v.prototype._writev=null,v.prototype.end=function(e,t,r){var n=this._writableState;\"function\"==typeof e?(r=e,e=null,t=null):\"function\"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?i.nextTick(r):e.once(\"finish\",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(v.prototype,\"destroyed\",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),v.prototype.destroy=y.destroy,v.prototype._undestroy=y.undestroy,v.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"timers\").setImmediate)},{\"./_stream_duplex\":458,\"./internal/streams/destroy\":464,\"./internal/streams/stream\":465,_process:419,\"core-util-is\":263,inherits:341,\"process-nextick-args\":418,\"safe-buffer\":445,timers:471,\"util-deprecate\":472}],463:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"util\");t.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,o,i=n.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,r=i,o=s,t.copy(r,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(t.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+\" \"+e})},{\"safe-buffer\":445,util:158}],464:[function(e,t,r){var n=e(\"process-nextick-args\");function o(e,t){e.emit(\"error\",t)}t.exports={destroy:function(e,t){var r=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(n.nextTick(o,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},{\"process-nextick-args\":418}],465:[function(e,t,r){arguments[4][441][0].apply(r,arguments)},{dup:441,events:299}],466:[function(e,t,r){t.exports=e(\"./readable\").PassThrough},{\"./readable\":467}],467:[function(e,t,r){(r=t.exports=e(\"./lib/_stream_readable.js\")).Stream=r,r.Readable=r,r.Writable=e(\"./lib/_stream_writable.js\"),r.Duplex=e(\"./lib/_stream_duplex.js\"),r.Transform=e(\"./lib/_stream_transform.js\"),r.PassThrough=e(\"./lib/_stream_passthrough.js\")},{\"./lib/_stream_duplex.js\":458,\"./lib/_stream_passthrough.js\":459,\"./lib/_stream_readable.js\":460,\"./lib/_stream_transform.js\":461,\"./lib/_stream_writable.js\":462}],468:[function(e,t,r){t.exports=e(\"./readable\").Transform},{\"./readable\":467}],469:[function(e,t,r){t.exports=e(\"./lib/_stream_writable.js\")},{\"./lib/_stream_writable.js\":462}],470:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=n.isEncoding||function(e){switch((e=\"\"+e)&&e.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return\"utf8\";for(var t;;)switch(e){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return e;default:if(t)return;e=(\"\"+e).toLowerCase(),t=!0}}(e);if(\"string\"!=typeof t&&(n.isEncoding===o||!o(e)))throw new Error(\"Unknown encoding: \"+e);return t||e}(e),this.encoding){case\"utf16le\":this.text=u,this.end=c,t=4;break;case\"utf8\":this.fillLast=s,t=4;break;case\"base64\":this.text=f,this.end=l,t=3;break;default:return this.write=h,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,\"\\ufffd\";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"\\ufffd\";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"\\ufffd\"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function u(e,t){if((e.length-t)%2==0){var r=e.toString(\"utf16le\",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,r)}return t}function f(e,t){var r=(e.length-t)%3;return 0===r?e.toString(\"base64\",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-r))}function l(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):\"\"}r.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return\"\";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r<e.length?t?t+this.text(e,r):this.text(e,r):t||\"\"},i.prototype.end=function(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+\"\\ufffd\":t},i.prototype.text=function(e,t){var r=function(e,t,r){var n=t.length-1;if(n<r)return 0;var o=a(t[n]);if(o>=0)return o>0&&(e.lastNeed=o-1),o;if(--n<r||-2===o)return 0;if((o=a(t[n]))>=0)return o>0&&(e.lastNeed=o-2),o;if(--n<r||-2===o)return 0;if((o=a(t[n]))>=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString(\"utf8\",t,n)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},{\"safe-buffer\":445}],471:[function(e,t,r){(function(t,n){var o=e(\"process/browser.js\").nextTick,i=Function.prototype.apply,a=Array.prototype.slice,s={},u=0;function c(e,t){this._id=e,this._clearFn=t}r.setTimeout=function(){return new c(i.call(setTimeout,window,arguments),clearTimeout)},r.setInterval=function(){return new c(i.call(setInterval,window,arguments),clearInterval)},r.clearTimeout=r.clearInterval=function(e){e.close()},c.prototype.unref=c.prototype.ref=function(){},c.prototype.close=function(){this._clearFn.call(window,this._id)},r.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},r.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},r._unrefActive=r.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r.setImmediate=\"function\"==typeof t?t:function(e){var t=u++,n=!(arguments.length<2)&&a.call(arguments,1);return s[t]=!0,o((function(){s[t]&&(n?e.apply(null,n):e.call(null),r.clearImmediate(t))})),t},r.clearImmediate=\"function\"==typeof n?n:function(e){delete s[e]}}).call(this,e(\"timers\").setImmediate,e(\"timers\").clearImmediate)},{\"process/browser.js\":419,timers:471}],472:[function(e,t,r){(function(e){function r(t){try{if(!e.localStorage)return!1}catch(e){return!1}var r=e.localStorage[t];return null!=r&&\"true\"===String(r).toLowerCase()}t.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],473:[function(e,t,r){\"function\"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],474:[function(e,t,r){t.exports=function(e){return e&&\"object\"===_typeof2(e)&&\"function\"==typeof e.copy&&\"function\"==typeof e.fill&&\"function\"==typeof e.readUInt8}},{}],475:[function(e,t,r){(function(t,n){var o=/%[sdj%]/g;r.format=function(e){if(!b(e)){for(var t=[],r=0;r<arguments.length;r++)t.push(s(arguments[r]));return t.join(\" \")}r=1;for(var n=arguments,i=n.length,a=String(e).replace(o,(function(e){if(\"%%\"===e)return\"%\";if(r>=i)return e;switch(e){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(e){return\"[Circular]\"}default:return e}})),u=n[r];r<i;u=n[++r])y(u)||!w(u)?a+=\" \"+u:a+=\" \"+s(u);return a},r.deprecate=function(e,o){if(v(n.process))return function(){return r.deprecate(e,o).apply(this,arguments)};if(!0===t.noDeprecation)return e;var i=!1;return function(){if(!i){if(t.throwDeprecation)throw new Error(o);t.traceDeprecation?console.trace(o):console.error(o),i=!0}return e.apply(this,arguments)}};var i,a={};function s(e,t){var n={seen:[],stylize:c};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(t)?n.showHidden=t:t&&r._extend(n,t),v(n.showHidden)&&(n.showHidden=!1),v(n.depth)&&(n.depth=2),v(n.colors)&&(n.colors=!1),v(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=u),f(n,e,n.depth)}function u(e,t){var r=s.styles[t];return r?\"\\x1b[\"+s.colors[r][0]+\"m\"+e+\"\\x1b[\"+s.colors[r][1]+\"m\":e}function c(e,t){return e}function f(e,t,n){if(e.customInspect&&t&&x(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var o=t.inspect(n,e);return b(o)||(o=f(e,o,n)),o}var i=function(e,t){if(v(t))return e.stylize(\"undefined\",\"undefined\");if(b(t)){var r=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(r,\"string\")}if(m(t))return e.stylize(\"\"+t,\"number\");if(p(t))return e.stylize(\"\"+t,\"boolean\");if(y(t))return e.stylize(\"null\",\"null\")}(e,t);if(i)return i;var a=Object.keys(t),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(t)),k(t)&&(a.indexOf(\"message\")>=0||a.indexOf(\"description\")>=0))return l(t);if(0===a.length){if(x(t)){var u=t.name?\": \"+t.name:\"\";return e.stylize(\"[Function\"+u+\"]\",\"special\")}if(g(t))return e.stylize(RegExp.prototype.toString.call(t),\"regexp\");if(_(t))return e.stylize(Date.prototype.toString.call(t),\"date\");if(k(t))return l(t)}var c,w=\"\",S=!1,O=[\"{\",\"}\"];(d(t)&&(S=!0,O=[\"[\",\"]\"]),x(t))&&(w=\" [Function\"+(t.name?\": \"+t.name:\"\")+\"]\");return g(t)&&(w=\" \"+RegExp.prototype.toString.call(t)),_(t)&&(w=\" \"+Date.prototype.toUTCString.call(t)),k(t)&&(w=\" \"+l(t)),0!==a.length||S&&0!=t.length?n<0?g(t)?e.stylize(RegExp.prototype.toString.call(t),\"regexp\"):e.stylize(\"[Object]\",\"special\"):(e.seen.push(t),c=S?function(e,t,r,n,o){for(var i=[],a=0,s=t.length;a<s;++a)j(t,String(a))?i.push(h(e,t,r,n,String(a),!0)):i.push(\"\");return o.forEach((function(o){o.match(/^\\d+$/)||i.push(h(e,t,r,n,o,!0))})),i}(e,t,n,s,a):a.map((function(r){return h(e,t,n,s,r,S)})),e.seen.pop(),function(e,t,r){if(e.reduce((function(e,t){return t.indexOf(\"\\n\")>=0&&0,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1}),0)>60)return r[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+r[1];return r[0]+t+\" \"+e.join(\", \")+\" \"+r[1]}(c,w,O)):O[0]+w+O[1]}function l(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function h(e,t,r,n,o,i){var a,s,u;if((u=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=u.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):u.set&&(s=e.stylize(\"[Setter]\",\"special\")),j(n,o)||(a=\"[\"+o+\"]\"),s||(e.seen.indexOf(u.value)<0?(s=y(r)?f(e,u.value,null):f(e,u.value,r-1)).indexOf(\"\\n\")>-1&&(s=i?s.split(\"\\n\").map((function(e){return\"  \"+e})).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map((function(e){return\"   \"+e})).join(\"\\n\")):s=e.stylize(\"[Circular]\",\"special\")),v(a)){if(i&&o.match(/^\\d+$/))return s;(a=JSON.stringify(\"\"+o)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,\"name\")):(a=a.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),a=e.stylize(a,\"string\"))}return a+\": \"+s}function d(e){return Array.isArray(e)}function p(e){return\"boolean\"==typeof e}function y(e){return null===e}function m(e){return\"number\"==typeof e}function b(e){return\"string\"==typeof e}function v(e){return void 0===e}function g(e){return w(e)&&\"[object RegExp]\"===S(e)}function w(e){return\"object\"===_typeof2(e)&&null!==e}function _(e){return w(e)&&\"[object Date]\"===S(e)}function k(e){return w(e)&&(\"[object Error]\"===S(e)||e instanceof Error)}function x(e){return\"function\"==typeof e}function S(e){return Object.prototype.toString.call(e)}function O(e){return e<10?\"0\"+e.toString(10):e.toString(10)}r.debuglog=function(e){if(v(i)&&(i=t.env.NODE_DEBUG||\"\"),e=e.toUpperCase(),!a[e])if(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\").test(i)){var n=t.pid;a[e]=function(){var t=r.format.apply(r,arguments);console.error(\"%s %d: %s\",e,n,t)}}else a[e]=function(){};return a[e]},r.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},r.isArray=d,r.isBoolean=p,r.isNull=y,r.isNullOrUndefined=function(e){return null==e},r.isNumber=m,r.isString=b,r.isSymbol=function(e){return\"symbol\"===_typeof2(e)},r.isUndefined=v,r.isRegExp=g,r.isObject=w,r.isDate=_,r.isError=k,r.isFunction=x,r.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"===_typeof2(e)||void 0===e},r.isBuffer=e(\"./support/isBuffer\");var E=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function R(){var e=new Date,t=[O(e.getHours()),O(e.getMinutes()),O(e.getSeconds())].join(\":\");return[e.getDate(),E[e.getMonth()],t].join(\" \")}function j(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.log=function(){console.log(\"%s - %s\",R(),r.format.apply(r,arguments))},r.inherits=e(\"inherits\"),r._extend=function(e,t){if(!t||!w(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./support/isBuffer\":474,_process:419,inherits:473}],476:[function(e,t,r){var n=e(\"./v1\"),o=e(\"./v4\"),i=o;i.v1=n,i.v4=o,t.exports=i},{\"./v1\":479,\"./v4\":480}],477:[function(e,t,r){for(var n=[],o=0;o<256;++o)n[o]=(o+256).toString(16).substr(1);t.exports=function(e,t){var r=t||0,o=n;return[o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]]].join(\"\")}},{}],478:[function(e,t,r){var n=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(n){var o=new Uint8Array(16);t.exports=function(){return n(o),o}}else{var i=new Array(16);t.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),i[t]=e>>>((3&t)<<3)&255;return i}}},{}],479:[function(e,t,r){var n,o,i=e(\"./lib/rng\"),a=e(\"./lib/bytesToUuid\"),s=0,u=0;t.exports=function(e,t,r){var c=t&&r||0,f=t||[],l=(e=e||{}).node||n,h=void 0!==e.clockseq?e.clockseq:o;if(null==l||null==h){var d=i();null==l&&(l=n=[1|d[0],d[1],d[2],d[3],d[4],d[5]]),null==h&&(h=o=16383&(d[6]<<8|d[7]))}var p=void 0!==e.msecs?e.msecs:(new Date).getTime(),y=void 0!==e.nsecs?e.nsecs:u+1,m=p-s+(y-u)/1e4;if(m<0&&void 0===e.clockseq&&(h=h+1&16383),(m<0||p>s)&&void 0===e.nsecs&&(y=0),y>=1e4)throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");s=p,u=y,o=h;var b=(1e4*(268435455&(p+=122192928e5))+y)%4294967296;f[c++]=b>>>24&255,f[c++]=b>>>16&255,f[c++]=b>>>8&255,f[c++]=255&b;var v=p/4294967296*1e4&268435455;f[c++]=v>>>8&255,f[c++]=255&v,f[c++]=v>>>24&15|16,f[c++]=v>>>16&255,f[c++]=h>>>8|128,f[c++]=255&h;for(var g=0;g<6;++g)f[c+g]=l[g];return t||a(f)}},{\"./lib/bytesToUuid\":477,\"./lib/rng\":478}],480:[function(e,t,r){var n=e(\"./lib/rng\"),o=e(\"./lib/bytesToUuid\");t.exports=function(e,t,r){var i=t&&r||0;\"string\"==typeof e&&(t=\"binary\"===e?new Array(16):null,e=null);var a=(e=e||{}).random||(e.rng||n)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t)for(var s=0;s<16;++s)t[i+s]=a[s];return t||o(a)}},{\"./lib/bytesToUuid\":477,\"./lib/rng\":478}],481:[function(require,module,exports){var indexOf=function(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0;r<e.length;r++)if(e[r]===t)return r;return-1},Object_keys=function(e){if(Object.keys)return Object.keys(e);var t=[];for(var r in e)t.push(r);return t},forEach=function(e,t){if(e.forEach)return e.forEach(t);for(var r=0;r<e.length;r++)t(e[r],r,e)},defineProp=function(){try{return Object.defineProperty({},\"_\",{}),function(e,t,r){Object.defineProperty(e,t,{writable:!0,enumerable:!1,configurable:!0,value:r})}}catch(e){return function(e,t,r){e[t]=r}}}(),globals=[\"Array\",\"Boolean\",\"Date\",\"Error\",\"EvalError\",\"Function\",\"Infinity\",\"JSON\",\"Math\",\"NaN\",\"Number\",\"Object\",\"RangeError\",\"ReferenceError\",\"RegExp\",\"String\",\"SyntaxError\",\"TypeError\",\"URIError\",\"decodeURI\",\"decodeURIComponent\",\"encodeURI\",\"encodeURIComponent\",\"escape\",\"eval\",\"isFinite\",\"isNaN\",\"parseFloat\",\"parseInt\",\"undefined\",\"unescape\"];function Context(){}Context.prototype={};var Script=exports.Script=function(e){if(!(this instanceof Script))return new Script(e);this.code=e};Script.prototype.runInContext=function(e){if(!(e instanceof Context))throw new TypeError(\"needs a 'context' argument.\");var t=document.createElement(\"iframe\");t.style||(t.style={}),t.style.display=\"none\",document.body.appendChild(t);var r=t.contentWindow,n=r.eval,o=r.execScript;!n&&o&&(o.call(r,\"null\"),n=r.eval),forEach(Object_keys(e),(function(t){r[t]=e[t]})),forEach(globals,(function(t){e[t]&&(r[t]=e[t])}));var i=Object_keys(r),a=n.call(r,this.code);return forEach(Object_keys(r),(function(t){(t in e||-1===indexOf(i,t))&&(e[t]=r[t])})),forEach(globals,(function(t){t in e||defineProp(e,t,r[t])})),document.body.removeChild(t),a},Script.prototype.runInThisContext=function(){return eval(this.code)},Script.prototype.runInNewContext=function(e){var t=Script.createContext(e),r=this.runInContext(t);return e&&forEach(Object_keys(t),(function(r){e[r]=t[r]})),r},forEach(Object_keys(Script.prototype),(function(e){exports[e]=Script[e]=function(t){var r=Script(t);return r[e].apply(r,[].slice.call(arguments,1))}})),exports.isContext=function(e){return e instanceof Context},exports.createScript=function(e){return exports.Script(e)},exports.createContext=Script.createContext=function(e){var t=new Context;return\"object\"===_typeof2(e)&&forEach(Object_keys(e),(function(r){t[r]=e[r]})),t}},{}],482:[function(e,t,r){\n/**\n * Character classes and associated utilities for the 5th edition of XML 1.0.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(r,\"__esModule\",{value:!0}),r.CHAR=\"\\t\\n\\r -\\ud7ff\\ue000-\\ufffd\\ud800\\udc00-\\udbff\\udfff\",r.S=\" \\t\\r\\n\",r.NAME_START_CHAR=\":A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\ud800\\udc00-\\udb7f\\udfff\",r.NAME_CHAR=\"-\"+r.NAME_START_CHAR+\".0-9\\xb7\\u0300-\\u036f\\u203f-\\u2040\",r.CHAR_RE=new RegExp(\"^[\"+r.CHAR+\"]$\",\"u\"),r.S_RE=new RegExp(\"^[\"+r.S+\"]+$\",\"u\"),r.NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"]$\",\"u\"),r.NAME_CHAR_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]$\",\"u\"),r.NAME_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"][\"+r.NAME_CHAR+\"]*$\",\"u\"),r.NMTOKEN_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]+$\",\"u\");function n(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=32&&e<=55295||10===e||13===e||9===e||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=n,r.isNameChar=function(e){return n(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],483:[function(e,t,r){\n/**\n * Character classes and associated utilities for the 2nd edition of XML 1.1.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(r,\"__esModule\",{value:!0}),r.CHAR=\"\\x01-\\ud7ff\\ue000-\\ufffd\\ud800\\udc00-\\udbff\\udfff\",r.RESTRICTED_CHAR=\"\\x01-\\b\\v\\f\\x0e-\\x1f\\x7f-\\x84\\x86-\\x9f\",r.S=\" \\t\\r\\n\",r.NAME_START_CHAR=\":A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\ud800\\udc00-\\udb7f\\udfff\",r.NAME_CHAR=\"-\"+r.NAME_START_CHAR+\".0-9\\xb7\\u0300-\\u036f\\u203f-\\u2040\",r.CHAR_RE=new RegExp(\"^[\"+r.CHAR+\"]$\",\"u\"),r.RESTRICTED_CHAR_RE=new RegExp(\"^[\"+r.RESTRICTED_CHAR+\"]$\",\"u\"),r.S_RE=new RegExp(\"^[\"+r.S+\"]+$\",\"u\"),r.NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"]$\",\"u\"),r.NAME_CHAR_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]$\",\"u\"),r.NAME_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"][\"+r.NAME_CHAR+\"]*$\",\"u\"),r.NMTOKEN_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]+$\",\"u\");function n(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isRestrictedChar=function(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159},r.isCharAndNotRestricted=function(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=n,r.isNameChar=function(e){return n(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],484:[function(e,t,r){function n(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}\n/**\n * Character class utilities for XML NS 1.0 edition 3.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(r,\"__esModule\",{value:!0}),r.NC_NAME_START_CHAR=\"A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\ud800\\udc00-\\udb7f\\udfff\",r.NC_NAME_CHAR=\"-\"+r.NC_NAME_START_CHAR+\".0-9\\xb7\\u0300-\\u036f\\u203f-\\u2040\",r.NC_NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NC_NAME_START_CHAR+\"]$\",\"u\"),r.NC_NAME_CHAR_RE=new RegExp(\"^[\"+r.NC_NAME_CHAR+\"]$\",\"u\"),r.NC_NAME_RE=new RegExp(\"^[\"+r.NC_NAME_START_CHAR+\"][\"+r.NC_NAME_CHAR+\"]*$\",\"u\"),r.isNCNameStartChar=n,r.isNCNameChar=function(e){return n(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}]},{},[15])(15)}));","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","export var HOOKS = [\n    \"onChange\",\n    \"onClose\",\n    \"onDayCreate\",\n    \"onDestroy\",\n    \"onKeyDown\",\n    \"onMonthChange\",\n    \"onOpen\",\n    \"onParseConfig\",\n    \"onReady\",\n    \"onValueUpdate\",\n    \"onYearChange\",\n    \"onPreCalendarPosition\",\n];\nexport var defaults = {\n    _disable: [],\n    allowInput: false,\n    allowInvalidPreload: false,\n    altFormat: \"F j, Y\",\n    altInput: false,\n    altInputClass: \"form-control input\",\n    animate: typeof window === \"object\" &&\n        window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n    ariaDateFormat: \"F j, Y\",\n    autoFillDefaultTime: true,\n    clickOpens: true,\n    closeOnSelect: true,\n    conjunction: \", \",\n    dateFormat: \"Y-m-d\",\n    defaultHour: 12,\n    defaultMinute: 0,\n    defaultSeconds: 0,\n    disable: [],\n    disableMobile: false,\n    enableSeconds: false,\n    enableTime: false,\n    errorHandler: function (err) {\n        return typeof console !== \"undefined\" && console.warn(err);\n    },\n    getWeek: function (givenDate) {\n        var date = new Date(givenDate.getTime());\n        date.setHours(0, 0, 0, 0);\n        date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n        var week1 = new Date(date.getFullYear(), 0, 4);\n        return (1 +\n            Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n                3 +\n                ((week1.getDay() + 6) % 7)) /\n                7));\n    },\n    hourIncrement: 1,\n    ignoredFocusElements: [],\n    inline: false,\n    locale: \"default\",\n    minuteIncrement: 5,\n    mode: \"single\",\n    monthSelectorType: \"dropdown\",\n    nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n    noCalendar: false,\n    now: new Date(),\n    onChange: [],\n    onClose: [],\n    onDayCreate: [],\n    onDestroy: [],\n    onKeyDown: [],\n    onMonthChange: [],\n    onOpen: [],\n    onParseConfig: [],\n    onReady: [],\n    onValueUpdate: [],\n    onYearChange: [],\n    onPreCalendarPosition: [],\n    plugins: [],\n    position: \"auto\",\n    positionElement: undefined,\n    prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n    shorthandCurrentMonth: false,\n    showMonths: 1,\n    static: false,\n    time_24hr: false,\n    weekNumbers: false,\n    wrap: false,\n};\n","export var english = {\n    weekdays: {\n        shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        longhand: [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\",\n        ],\n    },\n    months: {\n        shorthand: [\n            \"Jan\",\n            \"Feb\",\n            \"Mar\",\n            \"Apr\",\n            \"May\",\n            \"Jun\",\n            \"Jul\",\n            \"Aug\",\n            \"Sep\",\n            \"Oct\",\n            \"Nov\",\n            \"Dec\",\n        ],\n        longhand: [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\",\n        ],\n    },\n    daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    firstDayOfWeek: 0,\n    ordinal: function (nth) {\n        var s = nth % 100;\n        if (s > 3 && s < 21)\n            return \"th\";\n        switch (s % 10) {\n            case 1:\n                return \"st\";\n            case 2:\n                return \"nd\";\n            case 3:\n                return \"rd\";\n            default:\n                return \"th\";\n        }\n    },\n    rangeSeparator: \" to \",\n    weekAbbreviation: \"Wk\",\n    scrollTitle: \"Scroll to increment\",\n    toggleTitle: \"Click to toggle\",\n    amPM: [\"AM\", \"PM\"],\n    yearAriaLabel: \"Year\",\n    monthAriaLabel: \"Month\",\n    hourAriaLabel: \"Hour\",\n    minuteAriaLabel: \"Minute\",\n    time_24hr: false,\n};\nexport default english;\n","export var pad = function (number, length) {\n    if (length === void 0) { length = 2; }\n    return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n    var t;\n    return function () {\n        var _this = this;\n        var args = arguments;\n        clearTimeout(t);\n        t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n    };\n}\nexport var arrayify = function (obj) {\n    return obj instanceof Array ? obj : [obj];\n};\n","export function toggleClass(elem, className, bool) {\n    if (bool === true)\n        return elem.classList.add(className);\n    elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n    var e = window.document.createElement(tag);\n    className = className || \"\";\n    content = content || \"\";\n    e.className = className;\n    if (content !== undefined)\n        e.textContent = content;\n    return e;\n}\nexport function clearNode(node) {\n    while (node.firstChild)\n        node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n    if (condition(node))\n        return node;\n    else if (node.parentNode)\n        return findParent(node.parentNode, condition);\n    return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n    var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n    if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n        numInput.type = \"number\";\n    }\n    else {\n        numInput.type = \"text\";\n        numInput.pattern = \"\\\\d*\";\n    }\n    if (opts !== undefined)\n        for (var key in opts)\n            numInput.setAttribute(key, opts[key]);\n    wrapper.appendChild(numInput);\n    wrapper.appendChild(arrowUp);\n    wrapper.appendChild(arrowDown);\n    return wrapper;\n}\nexport function getEventTarget(event) {\n    try {\n        if (typeof event.composedPath === \"function\") {\n            var path = event.composedPath();\n            return path[0];\n        }\n        return event.target;\n    }\n    catch (error) {\n        return event.target;\n    }\n}\n","import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n    D: doNothing,\n    F: function (dateObj, monthName, locale) {\n        dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n    },\n    G: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    H: function (dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n    },\n    J: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    K: function (dateObj, amPM, locale) {\n        dateObj.setHours((dateObj.getHours() % 12) +\n            12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n    },\n    M: function (dateObj, shortMonth, locale) {\n        dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n    },\n    S: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n    W: function (dateObj, weekNum, locale) {\n        var weekNumber = parseInt(weekNum);\n        var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n        date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n        return date;\n    },\n    Y: function (dateObj, year) {\n        dateObj.setFullYear(parseFloat(year));\n    },\n    Z: function (_, ISODate) { return new Date(ISODate); },\n    d: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    h: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    i: function (dateObj, minutes) {\n        dateObj.setMinutes(parseFloat(minutes));\n    },\n    j: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    l: doNothing,\n    m: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    n: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    s: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    u: function (_, unixMillSeconds) {\n        return new Date(parseFloat(unixMillSeconds));\n    },\n    w: doNothing,\n    y: function (dateObj, year) {\n        dateObj.setFullYear(2000 + parseFloat(year));\n    },\n};\nexport var tokenRegex = {\n    D: \"\",\n    F: \"\",\n    G: \"(\\\\d\\\\d|\\\\d)\",\n    H: \"(\\\\d\\\\d|\\\\d)\",\n    J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n    K: \"\",\n    M: \"\",\n    S: \"(\\\\d\\\\d|\\\\d)\",\n    U: \"(.+)\",\n    W: \"(\\\\d\\\\d|\\\\d)\",\n    Y: \"(\\\\d{4})\",\n    Z: \"(.+)\",\n    d: \"(\\\\d\\\\d|\\\\d)\",\n    h: \"(\\\\d\\\\d|\\\\d)\",\n    i: \"(\\\\d\\\\d|\\\\d)\",\n    j: \"(\\\\d\\\\d|\\\\d)\",\n    l: \"\",\n    m: \"(\\\\d\\\\d|\\\\d)\",\n    n: \"(\\\\d\\\\d|\\\\d)\",\n    s: \"(\\\\d\\\\d|\\\\d)\",\n    u: \"(.+)\",\n    w: \"(\\\\d\\\\d|\\\\d)\",\n    y: \"(\\\\d{2})\",\n};\nexport var formats = {\n    Z: function (date) { return date.toISOString(); },\n    D: function (date, locale, options) {\n        return locale.weekdays.shorthand[formats.w(date, locale, options)];\n    },\n    F: function (date, locale, options) {\n        return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n    },\n    G: function (date, locale, options) {\n        return pad(formats.h(date, locale, options));\n    },\n    H: function (date) { return pad(date.getHours()); },\n    J: function (date, locale) {\n        return locale.ordinal !== undefined\n            ? date.getDate() + locale.ordinal(date.getDate())\n            : date.getDate();\n    },\n    K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n    M: function (date, locale) {\n        return monthToStr(date.getMonth(), true, locale);\n    },\n    S: function (date) { return pad(date.getSeconds()); },\n    U: function (date) { return date.getTime() / 1000; },\n    W: function (date, _, options) {\n        return options.getWeek(date);\n    },\n    Y: function (date) { return pad(date.getFullYear(), 4); },\n    d: function (date) { return pad(date.getDate()); },\n    h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n    i: function (date) { return pad(date.getMinutes()); },\n    j: function (date) { return date.getDate(); },\n    l: function (date, locale) {\n        return locale.weekdays.longhand[date.getDay()];\n    },\n    m: function (date) { return pad(date.getMonth() + 1); },\n    n: function (date) { return date.getMonth() + 1; },\n    s: function (date) { return date.getSeconds(); },\n    u: function (date) { return date.getTime(); },\n    w: function (date) { return date.getDay(); },\n    y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n    return function (dateObj, frmt, overrideLocale) {\n        var locale = overrideLocale || l10n;\n        if (config.formatDate !== undefined && !isMobile) {\n            return config.formatDate(dateObj, frmt, locale);\n        }\n        return frmt\n            .split(\"\")\n            .map(function (c, i, arr) {\n            return formats[c] && arr[i - 1] !== \"\\\\\"\n                ? formats[c](dateObj, locale, config)\n                : c !== \"\\\\\"\n                    ? c\n                    : \"\";\n        })\n            .join(\"\");\n    };\n};\nexport var createDateParser = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n    return function (date, givenFormat, timeless, customLocale) {\n        if (date !== 0 && !date)\n            return undefined;\n        var locale = customLocale || l10n;\n        var parsedDate;\n        var dateOrig = date;\n        if (date instanceof Date)\n            parsedDate = new Date(date.getTime());\n        else if (typeof date !== \"string\" &&\n            date.toFixed !== undefined)\n            parsedDate = new Date(date);\n        else if (typeof date === \"string\") {\n            var format = givenFormat || (config || defaults).dateFormat;\n            var datestr = String(date).trim();\n            if (datestr === \"today\") {\n                parsedDate = new Date();\n                timeless = true;\n            }\n            else if (config && config.parseDate) {\n                parsedDate = config.parseDate(date, format);\n            }\n            else if (/Z$/.test(datestr) ||\n                /GMT$/.test(datestr)) {\n                parsedDate = new Date(date);\n            }\n            else {\n                var matched = void 0, ops = [];\n                for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n                    var token = format[i];\n                    var isBackSlash = token === \"\\\\\";\n                    var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n                    if (tokenRegex[token] && !escaped) {\n                        regexStr += tokenRegex[token];\n                        var match = new RegExp(regexStr).exec(date);\n                        if (match && (matched = true)) {\n                            ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                                fn: revFormat[token],\n                                val: match[++matchIndex],\n                            });\n                        }\n                    }\n                    else if (!isBackSlash)\n                        regexStr += \".\";\n                }\n                parsedDate =\n                    !config || !config.noCalendar\n                        ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n                        : new Date(new Date().setHours(0, 0, 0, 0));\n                ops.forEach(function (_a) {\n                    var fn = _a.fn, val = _a.val;\n                    return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n                });\n                parsedDate = matched ? parsedDate : undefined;\n            }\n        }\n        if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n            config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n            return undefined;\n        }\n        if (timeless === true)\n            parsedDate.setHours(0, 0, 0, 0);\n        return parsedDate;\n    };\n};\nexport function compareDates(date1, date2, timeless) {\n    if (timeless === void 0) { timeless = true; }\n    if (timeless !== false) {\n        return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n            new Date(date2.getTime()).setHours(0, 0, 0, 0));\n    }\n    return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n    return (3600 * (date1.getHours() - date2.getHours()) +\n        60 * (date1.getMinutes() - date2.getMinutes()) +\n        date1.getSeconds() -\n        date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n    return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n    return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n    var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n    return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n    DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n    var hours = config.defaultHour;\n    var minutes = config.defaultMinute;\n    var seconds = config.defaultSeconds;\n    if (config.minDate !== undefined) {\n        var minHour = config.minDate.getHours();\n        var minMinutes = config.minDate.getMinutes();\n        var minSeconds = config.minDate.getSeconds();\n        if (hours < minHour) {\n            hours = minHour;\n        }\n        if (hours === minHour && minutes < minMinutes) {\n            minutes = minMinutes;\n        }\n        if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n            seconds = config.minDate.getSeconds();\n    }\n    if (config.maxDate !== undefined) {\n        var maxHr = config.maxDate.getHours();\n        var maxMinutes = config.maxDate.getMinutes();\n        hours = Math.min(hours, maxHr);\n        if (hours === maxHr)\n            minutes = Math.min(maxMinutes, minutes);\n        if (hours === maxHr && minutes === maxMinutes)\n            seconds = config.maxDate.getSeconds();\n    }\n    return { hours: hours, minutes: minutes, seconds: seconds };\n}\n","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n    var self = {\n        config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n        l10n: English,\n    };\n    self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    self._handlers = [];\n    self.pluginElements = [];\n    self.loadedPlugins = [];\n    self._bind = bind;\n    self._setHoursFromDate = setHoursFromDate;\n    self._positionCalendar = positionCalendar;\n    self.changeMonth = changeMonth;\n    self.changeYear = changeYear;\n    self.clear = clear;\n    self.close = close;\n    self.onMouseOver = onMouseOver;\n    self._createElement = createElement;\n    self.createDay = createDay;\n    self.destroy = destroy;\n    self.isEnabled = isEnabled;\n    self.jumpToDate = jumpToDate;\n    self.updateValue = updateValue;\n    self.open = open;\n    self.redraw = redraw;\n    self.set = set;\n    self.setDate = setDate;\n    self.toggle = toggle;\n    function setupHelperFunctions() {\n        self.utils = {\n            getDaysInMonth: function (month, yr) {\n                if (month === void 0) { month = self.currentMonth; }\n                if (yr === void 0) { yr = self.currentYear; }\n                if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n                    return 29;\n                return self.l10n.daysInMonth[month];\n            },\n        };\n    }\n    function init() {\n        self.element = self.input = element;\n        self.isOpen = false;\n        parseConfig();\n        setupLocale();\n        setupInputs();\n        setupDates();\n        setupHelperFunctions();\n        if (!self.isMobile)\n            build();\n        bindEvents();\n        if (self.selectedDates.length || self.config.noCalendar) {\n            if (self.config.enableTime) {\n                setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n            }\n            updateValue(false);\n        }\n        setCalendarWidth();\n        var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n        if (!self.isMobile && isSafari) {\n            positionCalendar();\n        }\n        triggerEvent(\"onReady\");\n    }\n    function getClosestActiveElement() {\n        var _a;\n        return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n            .activeElement || document.activeElement);\n    }\n    function bindToInstance(fn) {\n        return fn.bind(self);\n    }\n    function setCalendarWidth() {\n        var config = self.config;\n        if (config.weekNumbers === false && config.showMonths === 1) {\n            return;\n        }\n        else if (config.noCalendar !== true) {\n            window.requestAnimationFrame(function () {\n                if (self.calendarContainer !== undefined) {\n                    self.calendarContainer.style.visibility = \"hidden\";\n                    self.calendarContainer.style.display = \"block\";\n                }\n                if (self.daysContainer !== undefined) {\n                    var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n                    self.daysContainer.style.width = daysWidth + \"px\";\n                    self.calendarContainer.style.width =\n                        daysWidth +\n                            (self.weekWrapper !== undefined\n                                ? self.weekWrapper.offsetWidth\n                                : 0) +\n                            \"px\";\n                    self.calendarContainer.style.removeProperty(\"visibility\");\n                    self.calendarContainer.style.removeProperty(\"display\");\n                }\n            });\n        }\n    }\n    function updateTime(e) {\n        if (self.selectedDates.length === 0) {\n            var defaultDate = self.config.minDate === undefined ||\n                compareDates(new Date(), self.config.minDate) >= 0\n                ? new Date()\n                : new Date(self.config.minDate.getTime());\n            var defaults = getDefaultHours(self.config);\n            defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n            self.selectedDates = [defaultDate];\n            self.latestSelectedDateObj = defaultDate;\n        }\n        if (e !== undefined && e.type !== \"blur\") {\n            timeWrapper(e);\n        }\n        var prevValue = self._input.value;\n        setHoursFromInputs();\n        updateValue();\n        if (self._input.value !== prevValue) {\n            self._debouncedChange();\n        }\n    }\n    function ampm2military(hour, amPM) {\n        return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n    }\n    function military2ampm(hour) {\n        switch (hour % 24) {\n            case 0:\n            case 12:\n                return 12;\n            default:\n                return hour % 12;\n        }\n    }\n    function setHoursFromInputs() {\n        if (self.hourElement === undefined || self.minuteElement === undefined)\n            return;\n        var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n            ? (parseInt(self.secondElement.value, 10) || 0) % 60\n            : 0;\n        if (self.amPM !== undefined) {\n            hours = ampm2military(hours, self.amPM.textContent);\n        }\n        var limitMinHours = self.config.minTime !== undefined ||\n            (self.config.minDate &&\n                self.minDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n                    0);\n        var limitMaxHours = self.config.maxTime !== undefined ||\n            (self.config.maxDate &&\n                self.maxDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n                    0);\n        if (self.config.maxTime !== undefined &&\n            self.config.minTime !== undefined &&\n            self.config.minTime > self.config.maxTime) {\n            var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n            var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n            var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n            if (currentTime > maxBound && currentTime < minBound) {\n                var result = parseSeconds(minBound);\n                hours = result[0];\n                minutes = result[1];\n                seconds = result[2];\n            }\n        }\n        else {\n            if (limitMaxHours) {\n                var maxTime = self.config.maxTime !== undefined\n                    ? self.config.maxTime\n                    : self.config.maxDate;\n                hours = Math.min(hours, maxTime.getHours());\n                if (hours === maxTime.getHours())\n                    minutes = Math.min(minutes, maxTime.getMinutes());\n                if (minutes === maxTime.getMinutes())\n                    seconds = Math.min(seconds, maxTime.getSeconds());\n            }\n            if (limitMinHours) {\n                var minTime = self.config.minTime !== undefined\n                    ? self.config.minTime\n                    : self.config.minDate;\n                hours = Math.max(hours, minTime.getHours());\n                if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n                    minutes = minTime.getMinutes();\n                if (minutes === minTime.getMinutes())\n                    seconds = Math.max(seconds, minTime.getSeconds());\n            }\n        }\n        setHours(hours, minutes, seconds);\n    }\n    function setHoursFromDate(dateObj) {\n        var date = dateObj || self.latestSelectedDateObj;\n        if (date && date instanceof Date) {\n            setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n        }\n    }\n    function setHours(hours, minutes, seconds) {\n        if (self.latestSelectedDateObj !== undefined) {\n            self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n        }\n        if (!self.hourElement || !self.minuteElement || self.isMobile)\n            return;\n        self.hourElement.value = pad(!self.config.time_24hr\n            ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n            : hours);\n        self.minuteElement.value = pad(minutes);\n        if (self.amPM !== undefined)\n            self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n        if (self.secondElement !== undefined)\n            self.secondElement.value = pad(seconds);\n    }\n    function onYearInput(event) {\n        var eventTarget = getEventTarget(event);\n        var year = parseInt(eventTarget.value) + (event.delta || 0);\n        if (year / 1000 > 1 ||\n            (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n            changeYear(year);\n        }\n    }\n    function bind(element, event, handler, options) {\n        if (event instanceof Array)\n            return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n        if (element instanceof Array)\n            return element.forEach(function (el) { return bind(el, event, handler, options); });\n        element.addEventListener(event, handler, options);\n        self._handlers.push({\n            remove: function () { return element.removeEventListener(event, handler, options); },\n        });\n    }\n    function triggerChange() {\n        triggerEvent(\"onChange\");\n    }\n    function bindEvents() {\n        if (self.config.wrap) {\n            [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n                Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n                    return bind(el, \"click\", self[evt]);\n                });\n            });\n        }\n        if (self.isMobile) {\n            setupMobile();\n            return;\n        }\n        var debouncedResize = debounce(onResize, 50);\n        self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n        if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n            bind(self.daysContainer, \"mouseover\", function (e) {\n                if (self.config.mode === \"range\")\n                    onMouseOver(getEventTarget(e));\n            });\n        bind(self._input, \"keydown\", onKeyDown);\n        if (self.calendarContainer !== undefined) {\n            bind(self.calendarContainer, \"keydown\", onKeyDown);\n        }\n        if (!self.config.inline && !self.config.static)\n            bind(window, \"resize\", debouncedResize);\n        if (window.ontouchstart !== undefined)\n            bind(window.document, \"touchstart\", documentClick);\n        else\n            bind(window.document, \"mousedown\", documentClick);\n        bind(window.document, \"focus\", documentClick, { capture: true });\n        if (self.config.clickOpens === true) {\n            bind(self._input, \"focus\", self.open);\n            bind(self._input, \"click\", self.open);\n        }\n        if (self.daysContainer !== undefined) {\n            bind(self.monthNav, \"click\", onMonthNavClick);\n            bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n            bind(self.daysContainer, \"click\", selectDate);\n        }\n        if (self.timeContainer !== undefined &&\n            self.minuteElement !== undefined &&\n            self.hourElement !== undefined) {\n            var selText = function (e) {\n                return getEventTarget(e).select();\n            };\n            bind(self.timeContainer, [\"increment\"], updateTime);\n            bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n            bind(self.timeContainer, \"click\", timeIncrement);\n            bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n            if (self.secondElement !== undefined)\n                bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n            if (self.amPM !== undefined) {\n                bind(self.amPM, \"click\", function (e) {\n                    updateTime(e);\n                });\n            }\n        }\n        if (self.config.allowInput) {\n            bind(self._input, \"blur\", onBlur);\n        }\n    }\n    function jumpToDate(jumpDate, triggerChange) {\n        var jumpTo = jumpDate !== undefined\n            ? self.parseDate(jumpDate)\n            : self.latestSelectedDateObj ||\n                (self.config.minDate && self.config.minDate > self.now\n                    ? self.config.minDate\n                    : self.config.maxDate && self.config.maxDate < self.now\n                        ? self.config.maxDate\n                        : self.now);\n        var oldYear = self.currentYear;\n        var oldMonth = self.currentMonth;\n        try {\n            if (jumpTo !== undefined) {\n                self.currentYear = jumpTo.getFullYear();\n                self.currentMonth = jumpTo.getMonth();\n            }\n        }\n        catch (e) {\n            e.message = \"Invalid date supplied: \" + jumpTo;\n            self.config.errorHandler(e);\n        }\n        if (triggerChange && self.currentYear !== oldYear) {\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        if (triggerChange &&\n            (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n            triggerEvent(\"onMonthChange\");\n        }\n        self.redraw();\n    }\n    function timeIncrement(e) {\n        var eventTarget = getEventTarget(e);\n        if (~eventTarget.className.indexOf(\"arrow\"))\n            incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n    }\n    function incrementNumInput(e, delta, inputElem) {\n        var target = e && getEventTarget(e);\n        var input = inputElem ||\n            (target && target.parentNode && target.parentNode.firstChild);\n        var event = createEvent(\"increment\");\n        event.delta = delta;\n        input && input.dispatchEvent(event);\n    }\n    function build() {\n        var fragment = window.document.createDocumentFragment();\n        self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n        self.calendarContainer.tabIndex = -1;\n        if (!self.config.noCalendar) {\n            fragment.appendChild(buildMonthNav());\n            self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n            if (self.config.weekNumbers) {\n                var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n                self.innerContainer.appendChild(weekWrapper);\n                self.weekNumbers = weekNumbers;\n                self.weekWrapper = weekWrapper;\n            }\n            self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n            self.rContainer.appendChild(buildWeekdays());\n            if (!self.daysContainer) {\n                self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n                self.daysContainer.tabIndex = -1;\n            }\n            buildDays();\n            self.rContainer.appendChild(self.daysContainer);\n            self.innerContainer.appendChild(self.rContainer);\n            fragment.appendChild(self.innerContainer);\n        }\n        if (self.config.enableTime) {\n            fragment.appendChild(buildTime());\n        }\n        toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n        toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n        toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n        self.calendarContainer.appendChild(fragment);\n        var customAppend = self.config.appendTo !== undefined &&\n            self.config.appendTo.nodeType !== undefined;\n        if (self.config.inline || self.config.static) {\n            self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n            if (self.config.inline) {\n                if (!customAppend && self.element.parentNode)\n                    self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n                else if (self.config.appendTo !== undefined)\n                    self.config.appendTo.appendChild(self.calendarContainer);\n            }\n            if (self.config.static) {\n                var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n                if (self.element.parentNode)\n                    self.element.parentNode.insertBefore(wrapper, self.element);\n                wrapper.appendChild(self.element);\n                if (self.altInput)\n                    wrapper.appendChild(self.altInput);\n                wrapper.appendChild(self.calendarContainer);\n            }\n        }\n        if (!self.config.static && !self.config.inline)\n            (self.config.appendTo !== undefined\n                ? self.config.appendTo\n                : window.document.body).appendChild(self.calendarContainer);\n    }\n    function createDay(className, date, _dayNumber, i) {\n        var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n        dayElement.dateObj = date;\n        dayElement.$i = i;\n        dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n        if (className.indexOf(\"hidden\") === -1 &&\n            compareDates(date, self.now) === 0) {\n            self.todayDateElem = dayElement;\n            dayElement.classList.add(\"today\");\n            dayElement.setAttribute(\"aria-current\", \"date\");\n        }\n        if (dateIsEnabled) {\n            dayElement.tabIndex = -1;\n            if (isDateSelected(date)) {\n                dayElement.classList.add(\"selected\");\n                self.selectedDateElem = dayElement;\n                if (self.config.mode === \"range\") {\n                    toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n                        compareDates(date, self.selectedDates[0], true) === 0);\n                    toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n                        compareDates(date, self.selectedDates[1], true) === 0);\n                    if (className === \"nextMonthDay\")\n                        dayElement.classList.add(\"inRange\");\n                }\n            }\n        }\n        else {\n            dayElement.classList.add(\"flatpickr-disabled\");\n        }\n        if (self.config.mode === \"range\") {\n            if (isDateInRange(date) && !isDateSelected(date))\n                dayElement.classList.add(\"inRange\");\n        }\n        if (self.weekNumbers &&\n            self.config.showMonths === 1 &&\n            className !== \"prevMonthDay\" &&\n            i % 7 === 6) {\n            self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n        }\n        triggerEvent(\"onDayCreate\", dayElement);\n        return dayElement;\n    }\n    function focusOnDayElem(targetNode) {\n        targetNode.focus();\n        if (self.config.mode === \"range\")\n            onMouseOver(targetNode);\n    }\n    function getFirstAvailableDay(delta) {\n        var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        for (var m = startMonth; m != endMonth; m += delta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = delta > 0 ? 0 : month.children.length - 1;\n            var endIndex = delta > 0 ? month.children.length : -1;\n            for (var i = startIndex; i != endIndex; i += delta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n                    return c;\n            }\n        }\n        return undefined;\n    }\n    function getNextAvailableDay(current, delta) {\n        var givenMonth = current.className.indexOf(\"Month\") === -1\n            ? current.dateObj.getMonth()\n            : self.currentMonth;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        var loopDelta = delta > 0 ? 1 : -1;\n        for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = givenMonth - self.currentMonth === m\n                ? current.$i + delta\n                : delta < 0\n                    ? month.children.length - 1\n                    : 0;\n            var numMonthDays = month.children.length;\n            for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 &&\n                    isEnabled(c.dateObj) &&\n                    Math.abs(current.$i - i) >= Math.abs(delta))\n                    return focusOnDayElem(c);\n            }\n        }\n        self.changeMonth(loopDelta);\n        focusOnDay(getFirstAvailableDay(loopDelta), 0);\n        return undefined;\n    }\n    function focusOnDay(current, offset) {\n        var activeElement = getClosestActiveElement();\n        var dayFocused = isInView(activeElement || document.body);\n        var startElem = current !== undefined\n            ? current\n            : dayFocused\n                ? activeElement\n                : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n                    ? self.selectedDateElem\n                    : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n                        ? self.todayDateElem\n                        : getFirstAvailableDay(offset > 0 ? 1 : -1);\n        if (startElem === undefined) {\n            self._input.focus();\n        }\n        else if (!dayFocused) {\n            focusOnDayElem(startElem);\n        }\n        else {\n            getNextAvailableDay(startElem, offset);\n        }\n    }\n    function buildMonthDays(year, month) {\n        var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n        var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n        var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n        var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n        for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n        }\n        for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n        }\n        for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n            (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n        }\n        var dayContainer = createElement(\"div\", \"dayContainer\");\n        dayContainer.appendChild(days);\n        return dayContainer;\n    }\n    function buildDays() {\n        if (self.daysContainer === undefined) {\n            return;\n        }\n        clearNode(self.daysContainer);\n        if (self.weekNumbers)\n            clearNode(self.weekNumbers);\n        var frag = document.createDocumentFragment();\n        for (var i = 0; i < self.config.showMonths; i++) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n        }\n        self.daysContainer.appendChild(frag);\n        self.days = self.daysContainer.firstChild;\n        if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n            onMouseOver();\n        }\n    }\n    function buildMonthSwitch() {\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType !== \"dropdown\")\n            return;\n        var shouldBuildMonth = function (month) {\n            if (self.config.minDate !== undefined &&\n                self.currentYear === self.config.minDate.getFullYear() &&\n                month < self.config.minDate.getMonth()) {\n                return false;\n            }\n            return !(self.config.maxDate !== undefined &&\n                self.currentYear === self.config.maxDate.getFullYear() &&\n                month > self.config.maxDate.getMonth());\n        };\n        self.monthsDropdownContainer.tabIndex = -1;\n        self.monthsDropdownContainer.innerHTML = \"\";\n        for (var i = 0; i < 12; i++) {\n            if (!shouldBuildMonth(i))\n                continue;\n            var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n            month.value = new Date(self.currentYear, i).getMonth().toString();\n            month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n            month.tabIndex = -1;\n            if (self.currentMonth === i) {\n                month.selected = true;\n            }\n            self.monthsDropdownContainer.appendChild(month);\n        }\n    }\n    function buildMonth() {\n        var container = createElement(\"div\", \"flatpickr-month\");\n        var monthNavFragment = window.document.createDocumentFragment();\n        var monthElement;\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType === \"static\") {\n            monthElement = createElement(\"span\", \"cur-month\");\n        }\n        else {\n            self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n            self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n            bind(self.monthsDropdownContainer, \"change\", function (e) {\n                var target = getEventTarget(e);\n                var selectedMonth = parseInt(target.value, 10);\n                self.changeMonth(selectedMonth - self.currentMonth);\n                triggerEvent(\"onMonthChange\");\n            });\n            buildMonthSwitch();\n            monthElement = self.monthsDropdownContainer;\n        }\n        var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n        var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n        yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n        if (self.config.minDate) {\n            yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n        }\n        if (self.config.maxDate) {\n            yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n            yearElement.disabled =\n                !!self.config.minDate &&\n                    self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n        }\n        var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n        currentMonth.appendChild(monthElement);\n        currentMonth.appendChild(yearInput);\n        monthNavFragment.appendChild(currentMonth);\n        container.appendChild(monthNavFragment);\n        return {\n            container: container,\n            yearElement: yearElement,\n            monthElement: monthElement,\n        };\n    }\n    function buildMonths() {\n        clearNode(self.monthNav);\n        self.monthNav.appendChild(self.prevMonthNav);\n        if (self.config.showMonths) {\n            self.yearElements = [];\n            self.monthElements = [];\n        }\n        for (var m = self.config.showMonths; m--;) {\n            var month = buildMonth();\n            self.yearElements.push(month.yearElement);\n            self.monthElements.push(month.monthElement);\n            self.monthNav.appendChild(month.container);\n        }\n        self.monthNav.appendChild(self.nextMonthNav);\n    }\n    function buildMonthNav() {\n        self.monthNav = createElement(\"div\", \"flatpickr-months\");\n        self.yearElements = [];\n        self.monthElements = [];\n        self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n        self.prevMonthNav.innerHTML = self.config.prevArrow;\n        self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n        self.nextMonthNav.innerHTML = self.config.nextArrow;\n        buildMonths();\n        Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n            get: function () { return self.__hidePrevMonthArrow; },\n            set: function (bool) {\n                if (self.__hidePrevMonthArrow !== bool) {\n                    toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hidePrevMonthArrow = bool;\n                }\n            },\n        });\n        Object.defineProperty(self, \"_hideNextMonthArrow\", {\n            get: function () { return self.__hideNextMonthArrow; },\n            set: function (bool) {\n                if (self.__hideNextMonthArrow !== bool) {\n                    toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hideNextMonthArrow = bool;\n                }\n            },\n        });\n        self.currentYearElement = self.yearElements[0];\n        updateNavigationCurrentMonth();\n        return self.monthNav;\n    }\n    function buildTime() {\n        self.calendarContainer.classList.add(\"hasTime\");\n        if (self.config.noCalendar)\n            self.calendarContainer.classList.add(\"noCalendar\");\n        var defaults = getDefaultHours(self.config);\n        self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n        self.timeContainer.tabIndex = -1;\n        var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n        var hourInput = createNumberInput(\"flatpickr-hour\", {\n            \"aria-label\": self.l10n.hourAriaLabel,\n        });\n        self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n        var minuteInput = createNumberInput(\"flatpickr-minute\", {\n            \"aria-label\": self.l10n.minuteAriaLabel,\n        });\n        self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n        self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n        self.hourElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getHours()\n            : self.config.time_24hr\n                ? defaults.hours\n                : military2ampm(defaults.hours));\n        self.minuteElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getMinutes()\n            : defaults.minutes);\n        self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n        self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n        self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n        self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n        self.hourElement.setAttribute(\"maxlength\", \"2\");\n        self.minuteElement.setAttribute(\"min\", \"0\");\n        self.minuteElement.setAttribute(\"max\", \"59\");\n        self.minuteElement.setAttribute(\"maxlength\", \"2\");\n        self.timeContainer.appendChild(hourInput);\n        self.timeContainer.appendChild(separator);\n        self.timeContainer.appendChild(minuteInput);\n        if (self.config.time_24hr)\n            self.timeContainer.classList.add(\"time24hr\");\n        if (self.config.enableSeconds) {\n            self.timeContainer.classList.add(\"hasSeconds\");\n            var secondInput = createNumberInput(\"flatpickr-second\");\n            self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n            self.secondElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getSeconds()\n                : defaults.seconds);\n            self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n            self.secondElement.setAttribute(\"min\", \"0\");\n            self.secondElement.setAttribute(\"max\", \"59\");\n            self.secondElement.setAttribute(\"maxlength\", \"2\");\n            self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n            self.timeContainer.appendChild(secondInput);\n        }\n        if (!self.config.time_24hr) {\n            self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n                ? self.hourElement.value\n                : self.config.defaultHour) > 11)]);\n            self.amPM.title = self.l10n.toggleTitle;\n            self.amPM.tabIndex = -1;\n            self.timeContainer.appendChild(self.amPM);\n        }\n        return self.timeContainer;\n    }\n    function buildWeekdays() {\n        if (!self.weekdayContainer)\n            self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n        else\n            clearNode(self.weekdayContainer);\n        for (var i = self.config.showMonths; i--;) {\n            var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n            self.weekdayContainer.appendChild(container);\n        }\n        updateWeekdays();\n        return self.weekdayContainer;\n    }\n    function updateWeekdays() {\n        if (!self.weekdayContainer) {\n            return;\n        }\n        var firstDayOfWeek = self.l10n.firstDayOfWeek;\n        var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n        if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n            weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n        }\n        for (var i = self.config.showMonths; i--;) {\n            self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n        }\n    }\n    function buildWeeks() {\n        self.calendarContainer.classList.add(\"hasWeeks\");\n        var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n        weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n        var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n        weekWrapper.appendChild(weekNumbers);\n        return {\n            weekWrapper: weekWrapper,\n            weekNumbers: weekNumbers,\n        };\n    }\n    function changeMonth(value, isOffset) {\n        if (isOffset === void 0) { isOffset = true; }\n        var delta = isOffset ? value : value - self.currentMonth;\n        if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n            (delta > 0 && self._hideNextMonthArrow === true))\n            return;\n        self.currentMonth += delta;\n        if (self.currentMonth < 0 || self.currentMonth > 11) {\n            self.currentYear += self.currentMonth > 11 ? 1 : -1;\n            self.currentMonth = (self.currentMonth + 12) % 12;\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        buildDays();\n        triggerEvent(\"onMonthChange\");\n        updateNavigationCurrentMonth();\n    }\n    function clear(triggerChangeEvent, toInitial) {\n        if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n        if (toInitial === void 0) { toInitial = true; }\n        self.input.value = \"\";\n        if (self.altInput !== undefined)\n            self.altInput.value = \"\";\n        if (self.mobileInput !== undefined)\n            self.mobileInput.value = \"\";\n        self.selectedDates = [];\n        self.latestSelectedDateObj = undefined;\n        if (toInitial === true) {\n            self.currentYear = self._initialDate.getFullYear();\n            self.currentMonth = self._initialDate.getMonth();\n        }\n        if (self.config.enableTime === true) {\n            var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n            setHours(hours, minutes, seconds);\n        }\n        self.redraw();\n        if (triggerChangeEvent)\n            triggerEvent(\"onChange\");\n    }\n    function close() {\n        self.isOpen = false;\n        if (!self.isMobile) {\n            if (self.calendarContainer !== undefined) {\n                self.calendarContainer.classList.remove(\"open\");\n            }\n            if (self._input !== undefined) {\n                self._input.classList.remove(\"active\");\n            }\n        }\n        triggerEvent(\"onClose\");\n    }\n    function destroy() {\n        if (self.config !== undefined)\n            triggerEvent(\"onDestroy\");\n        for (var i = self._handlers.length; i--;) {\n            self._handlers[i].remove();\n        }\n        self._handlers = [];\n        if (self.mobileInput) {\n            if (self.mobileInput.parentNode)\n                self.mobileInput.parentNode.removeChild(self.mobileInput);\n            self.mobileInput = undefined;\n        }\n        else if (self.calendarContainer && self.calendarContainer.parentNode) {\n            if (self.config.static && self.calendarContainer.parentNode) {\n                var wrapper = self.calendarContainer.parentNode;\n                wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n                if (wrapper.parentNode) {\n                    while (wrapper.firstChild)\n                        wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n                    wrapper.parentNode.removeChild(wrapper);\n                }\n            }\n            else\n                self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n        }\n        if (self.altInput) {\n            self.input.type = \"text\";\n            if (self.altInput.parentNode)\n                self.altInput.parentNode.removeChild(self.altInput);\n            delete self.altInput;\n        }\n        if (self.input) {\n            self.input.type = self.input._type;\n            self.input.classList.remove(\"flatpickr-input\");\n            self.input.removeAttribute(\"readonly\");\n        }\n        [\n            \"_showTimeInput\",\n            \"latestSelectedDateObj\",\n            \"_hideNextMonthArrow\",\n            \"_hidePrevMonthArrow\",\n            \"__hideNextMonthArrow\",\n            \"__hidePrevMonthArrow\",\n            \"isMobile\",\n            \"isOpen\",\n            \"selectedDateElem\",\n            \"minDateHasTime\",\n            \"maxDateHasTime\",\n            \"days\",\n            \"daysContainer\",\n            \"_input\",\n            \"_positionElement\",\n            \"innerContainer\",\n            \"rContainer\",\n            \"monthNav\",\n            \"todayDateElem\",\n            \"calendarContainer\",\n            \"weekdayContainer\",\n            \"prevMonthNav\",\n            \"nextMonthNav\",\n            \"monthsDropdownContainer\",\n            \"currentMonthElement\",\n            \"currentYearElement\",\n            \"navigationCurrentMonth\",\n            \"selectedDateElem\",\n            \"config\",\n        ].forEach(function (k) {\n            try {\n                delete self[k];\n            }\n            catch (_) { }\n        });\n    }\n    function isCalendarElem(elem) {\n        return self.calendarContainer.contains(elem);\n    }\n    function documentClick(e) {\n        if (self.isOpen && !self.config.inline) {\n            var eventTarget_1 = getEventTarget(e);\n            var isCalendarElement = isCalendarElem(eventTarget_1);\n            var isInput = eventTarget_1 === self.input ||\n                eventTarget_1 === self.altInput ||\n                self.element.contains(eventTarget_1) ||\n                (e.path &&\n                    e.path.indexOf &&\n                    (~e.path.indexOf(self.input) ||\n                        ~e.path.indexOf(self.altInput)));\n            var lostFocus = !isInput &&\n                !isCalendarElement &&\n                !isCalendarElem(e.relatedTarget);\n            var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n                return elem.contains(eventTarget_1);\n            });\n            if (lostFocus && isIgnored) {\n                if (self.config.allowInput) {\n                    self.setDate(self._input.value, false, self.config.altInput\n                        ? self.config.altFormat\n                        : self.config.dateFormat);\n                }\n                if (self.timeContainer !== undefined &&\n                    self.minuteElement !== undefined &&\n                    self.hourElement !== undefined &&\n                    self.input.value !== \"\" &&\n                    self.input.value !== undefined) {\n                    updateTime();\n                }\n                self.close();\n                if (self.config &&\n                    self.config.mode === \"range\" &&\n                    self.selectedDates.length === 1)\n                    self.clear(false);\n            }\n        }\n    }\n    function changeYear(newYear) {\n        if (!newYear ||\n            (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n            (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n            return;\n        var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n        self.currentYear = newYearNum || self.currentYear;\n        if (self.config.maxDate &&\n            self.currentYear === self.config.maxDate.getFullYear()) {\n            self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n        }\n        else if (self.config.minDate &&\n            self.currentYear === self.config.minDate.getFullYear()) {\n            self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n        }\n        if (isNewYear) {\n            self.redraw();\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n    }\n    function isEnabled(date, timeless) {\n        var _a;\n        if (timeless === void 0) { timeless = true; }\n        var dateToCheck = self.parseDate(date, undefined, timeless);\n        if ((self.config.minDate &&\n            dateToCheck &&\n            compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n            (self.config.maxDate &&\n                dateToCheck &&\n                compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n            return false;\n        if (!self.config.enable && self.config.disable.length === 0)\n            return true;\n        if (dateToCheck === undefined)\n            return false;\n        var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n        for (var i = 0, d = void 0; i < array.length; i++) {\n            d = array[i];\n            if (typeof d === \"function\" &&\n                d(dateToCheck))\n                return bool;\n            else if (d instanceof Date &&\n                dateToCheck !== undefined &&\n                d.getTime() === dateToCheck.getTime())\n                return bool;\n            else if (typeof d === \"string\") {\n                var parsed = self.parseDate(d, undefined, true);\n                return parsed && parsed.getTime() === dateToCheck.getTime()\n                    ? bool\n                    : !bool;\n            }\n            else if (typeof d === \"object\" &&\n                dateToCheck !== undefined &&\n                d.from &&\n                d.to &&\n                dateToCheck.getTime() >= d.from.getTime() &&\n                dateToCheck.getTime() <= d.to.getTime())\n                return bool;\n        }\n        return !bool;\n    }\n    function isInView(elem) {\n        if (self.daysContainer !== undefined)\n            return (elem.className.indexOf(\"hidden\") === -1 &&\n                elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n                self.daysContainer.contains(elem));\n        return false;\n    }\n    function onBlur(e) {\n        var isInput = e.target === self._input;\n        var valueChanged = self._input.value.trimEnd() !== getDateStr();\n        if (isInput &&\n            valueChanged &&\n            !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n            self.setDate(self._input.value, true, e.target === self.altInput\n                ? self.config.altFormat\n                : self.config.dateFormat);\n        }\n    }\n    function onKeyDown(e) {\n        var eventTarget = getEventTarget(e);\n        var isInput = self.config.wrap\n            ? element.contains(eventTarget)\n            : eventTarget === self._input;\n        var allowInput = self.config.allowInput;\n        var allowKeydown = self.isOpen && (!allowInput || !isInput);\n        var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n        if (e.keyCode === 13 && isInput) {\n            if (allowInput) {\n                self.setDate(self._input.value, true, eventTarget === self.altInput\n                    ? self.config.altFormat\n                    : self.config.dateFormat);\n                self.close();\n                return eventTarget.blur();\n            }\n            else {\n                self.open();\n            }\n        }\n        else if (isCalendarElem(eventTarget) ||\n            allowKeydown ||\n            allowInlineKeydown) {\n            var isTimeObj = !!self.timeContainer &&\n                self.timeContainer.contains(eventTarget);\n            switch (e.keyCode) {\n                case 13:\n                    if (isTimeObj) {\n                        e.preventDefault();\n                        updateTime();\n                        focusAndClose();\n                    }\n                    else\n                        selectDate(e);\n                    break;\n                case 27:\n                    e.preventDefault();\n                    focusAndClose();\n                    break;\n                case 8:\n                case 46:\n                    if (isInput && !self.config.allowInput) {\n                        e.preventDefault();\n                        self.clear();\n                    }\n                    break;\n                case 37:\n                case 39:\n                    if (!isTimeObj && !isInput) {\n                        e.preventDefault();\n                        var activeElement = getClosestActiveElement();\n                        if (self.daysContainer !== undefined &&\n                            (allowInput === false ||\n                                (activeElement && isInView(activeElement)))) {\n                            var delta_1 = e.keyCode === 39 ? 1 : -1;\n                            if (!e.ctrlKey)\n                                focusOnDay(undefined, delta_1);\n                            else {\n                                e.stopPropagation();\n                                changeMonth(delta_1);\n                                focusOnDay(getFirstAvailableDay(1), 0);\n                            }\n                        }\n                    }\n                    else if (self.hourElement)\n                        self.hourElement.focus();\n                    break;\n                case 38:\n                case 40:\n                    e.preventDefault();\n                    var delta = e.keyCode === 40 ? 1 : -1;\n                    if ((self.daysContainer &&\n                        eventTarget.$i !== undefined) ||\n                        eventTarget === self.input ||\n                        eventTarget === self.altInput) {\n                        if (e.ctrlKey) {\n                            e.stopPropagation();\n                            changeYear(self.currentYear - delta);\n                            focusOnDay(getFirstAvailableDay(1), 0);\n                        }\n                        else if (!isTimeObj)\n                            focusOnDay(undefined, delta * 7);\n                    }\n                    else if (eventTarget === self.currentYearElement) {\n                        changeYear(self.currentYear - delta);\n                    }\n                    else if (self.config.enableTime) {\n                        if (!isTimeObj && self.hourElement)\n                            self.hourElement.focus();\n                        updateTime(e);\n                        self._debouncedChange();\n                    }\n                    break;\n                case 9:\n                    if (isTimeObj) {\n                        var elems = [\n                            self.hourElement,\n                            self.minuteElement,\n                            self.secondElement,\n                            self.amPM,\n                        ]\n                            .concat(self.pluginElements)\n                            .filter(function (x) { return x; });\n                        var i = elems.indexOf(eventTarget);\n                        if (i !== -1) {\n                            var target = elems[i + (e.shiftKey ? -1 : 1)];\n                            e.preventDefault();\n                            (target || self._input).focus();\n                        }\n                    }\n                    else if (!self.config.noCalendar &&\n                        self.daysContainer &&\n                        self.daysContainer.contains(eventTarget) &&\n                        e.shiftKey) {\n                        e.preventDefault();\n                        self._input.focus();\n                    }\n                    break;\n                default:\n                    break;\n            }\n        }\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            switch (e.key) {\n                case self.l10n.amPM[0].charAt(0):\n                case self.l10n.amPM[0].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[0];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n                case self.l10n.amPM[1].charAt(0):\n                case self.l10n.amPM[1].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[1];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n            }\n        }\n        if (isInput || isCalendarElem(eventTarget)) {\n            triggerEvent(\"onKeyDown\", e);\n        }\n    }\n    function onMouseOver(elem, cellClass) {\n        if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n        if (self.selectedDates.length !== 1 ||\n            (elem &&\n                (!elem.classList.contains(cellClass) ||\n                    elem.classList.contains(\"flatpickr-disabled\"))))\n            return;\n        var hoverDate = elem\n            ? elem.dateObj.getTime()\n            : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n        var containsDisabled = false;\n        var minRange = 0, maxRange = 0;\n        for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n            if (!isEnabled(new Date(t), true)) {\n                containsDisabled =\n                    containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n                if (t < initialDate && (!minRange || t > minRange))\n                    minRange = t;\n                else if (t > initialDate && (!maxRange || t < maxRange))\n                    maxRange = t;\n            }\n        }\n        var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n        hoverableCells.forEach(function (dayElem) {\n            var date = dayElem.dateObj;\n            var timestamp = date.getTime();\n            var outOfRange = (minRange > 0 && timestamp < minRange) ||\n                (maxRange > 0 && timestamp > maxRange);\n            if (outOfRange) {\n                dayElem.classList.add(\"notAllowed\");\n                [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                    dayElem.classList.remove(c);\n                });\n                return;\n            }\n            else if (containsDisabled && !outOfRange)\n                return;\n            [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n                dayElem.classList.remove(c);\n            });\n            if (elem !== undefined) {\n                elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n                    ? \"startRange\"\n                    : \"endRange\");\n                if (initialDate < hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"startRange\");\n                else if (initialDate > hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"endRange\");\n                if (timestamp >= minRange &&\n                    (maxRange === 0 || timestamp <= maxRange) &&\n                    isBetween(timestamp, initialDate, hoverDate))\n                    dayElem.classList.add(\"inRange\");\n            }\n        });\n    }\n    function onResize() {\n        if (self.isOpen && !self.config.static && !self.config.inline)\n            positionCalendar();\n    }\n    function open(e, positionElement) {\n        if (positionElement === void 0) { positionElement = self._positionElement; }\n        if (self.isMobile === true) {\n            if (e) {\n                e.preventDefault();\n                var eventTarget = getEventTarget(e);\n                if (eventTarget) {\n                    eventTarget.blur();\n                }\n            }\n            if (self.mobileInput !== undefined) {\n                self.mobileInput.focus();\n                self.mobileInput.click();\n            }\n            triggerEvent(\"onOpen\");\n            return;\n        }\n        else if (self._input.disabled || self.config.inline) {\n            return;\n        }\n        var wasOpen = self.isOpen;\n        self.isOpen = true;\n        if (!wasOpen) {\n            self.calendarContainer.classList.add(\"open\");\n            self._input.classList.add(\"active\");\n            triggerEvent(\"onOpen\");\n            positionCalendar(positionElement);\n        }\n        if (self.config.enableTime === true && self.config.noCalendar === true) {\n            if (self.config.allowInput === false &&\n                (e === undefined ||\n                    !self.timeContainer.contains(e.relatedTarget))) {\n                setTimeout(function () { return self.hourElement.select(); }, 50);\n            }\n        }\n    }\n    function minMaxDateSetter(type) {\n        return function (date) {\n            var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n            var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n            if (dateObj !== undefined) {\n                self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n                    dateObj.getHours() > 0 ||\n                        dateObj.getMinutes() > 0 ||\n                        dateObj.getSeconds() > 0;\n            }\n            if (self.selectedDates) {\n                self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n                if (!self.selectedDates.length && type === \"min\")\n                    setHoursFromDate(dateObj);\n                updateValue();\n            }\n            if (self.daysContainer) {\n                redraw();\n                if (dateObj !== undefined)\n                    self.currentYearElement[type] = dateObj.getFullYear().toString();\n                else\n                    self.currentYearElement.removeAttribute(type);\n                self.currentYearElement.disabled =\n                    !!inverseDateObj &&\n                        dateObj !== undefined &&\n                        inverseDateObj.getFullYear() === dateObj.getFullYear();\n            }\n        };\n    }\n    function parseConfig() {\n        var boolOpts = [\n            \"wrap\",\n            \"weekNumbers\",\n            \"allowInput\",\n            \"allowInvalidPreload\",\n            \"clickOpens\",\n            \"time_24hr\",\n            \"enableTime\",\n            \"noCalendar\",\n            \"altInput\",\n            \"shorthandCurrentMonth\",\n            \"inline\",\n            \"static\",\n            \"enableSeconds\",\n            \"disableMobile\",\n        ];\n        var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n        var formats = {};\n        self.config.parseDate = userConfig.parseDate;\n        self.config.formatDate = userConfig.formatDate;\n        Object.defineProperty(self.config, \"enable\", {\n            get: function () { return self.config._enable; },\n            set: function (dates) {\n                self.config._enable = parseDateRules(dates);\n            },\n        });\n        Object.defineProperty(self.config, \"disable\", {\n            get: function () { return self.config._disable; },\n            set: function (dates) {\n                self.config._disable = parseDateRules(dates);\n            },\n        });\n        var timeMode = userConfig.mode === \"time\";\n        if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n            var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n            formats.dateFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n                    : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n        }\n        if (userConfig.altInput &&\n            (userConfig.enableTime || timeMode) &&\n            !userConfig.altFormat) {\n            var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n            formats.altFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n                    : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n        }\n        Object.defineProperty(self.config, \"minDate\", {\n            get: function () { return self.config._minDate; },\n            set: minMaxDateSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxDate\", {\n            get: function () { return self.config._maxDate; },\n            set: minMaxDateSetter(\"max\"),\n        });\n        var minMaxTimeSetter = function (type) { return function (val) {\n            self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n        }; };\n        Object.defineProperty(self.config, \"minTime\", {\n            get: function () { return self.config._minTime; },\n            set: minMaxTimeSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxTime\", {\n            get: function () { return self.config._maxTime; },\n            set: minMaxTimeSetter(\"max\"),\n        });\n        if (userConfig.mode === \"time\") {\n            self.config.noCalendar = true;\n            self.config.enableTime = true;\n        }\n        Object.assign(self.config, formats, userConfig);\n        for (var i = 0; i < boolOpts.length; i++)\n            self.config[boolOpts[i]] =\n                self.config[boolOpts[i]] === true ||\n                    self.config[boolOpts[i]] === \"true\";\n        HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n            self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n        });\n        self.isMobile =\n            !self.config.disableMobile &&\n                !self.config.inline &&\n                self.config.mode === \"single\" &&\n                !self.config.disable.length &&\n                !self.config.enable &&\n                !self.config.weekNumbers &&\n                /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n        for (var i = 0; i < self.config.plugins.length; i++) {\n            var pluginConf = self.config.plugins[i](self) || {};\n            for (var key in pluginConf) {\n                if (HOOKS.indexOf(key) > -1) {\n                    self.config[key] = arrayify(pluginConf[key])\n                        .map(bindToInstance)\n                        .concat(self.config[key]);\n                }\n                else if (typeof userConfig[key] === \"undefined\")\n                    self.config[key] = pluginConf[key];\n            }\n        }\n        if (!userConfig.altInputClass) {\n            self.config.altInputClass =\n                getInputElem().className + \" \" + self.config.altInputClass;\n        }\n        triggerEvent(\"onParseConfig\");\n    }\n    function getInputElem() {\n        return self.config.wrap\n            ? element.querySelector(\"[data-input]\")\n            : element;\n    }\n    function setupLocale() {\n        if (typeof self.config.locale !== \"object\" &&\n            typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n            self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n        self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n            ? self.config.locale\n            : self.config.locale !== \"default\"\n                ? flatpickr.l10ns[self.config.locale]\n                : undefined));\n        tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n        tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n        tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n        tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n        tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n        var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n        if (userConfig.time_24hr === undefined &&\n            flatpickr.defaultConfig.time_24hr === undefined) {\n            self.config.time_24hr = self.l10n.time_24hr;\n        }\n        self.formatDate = createDateFormatter(self);\n        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    }\n    function positionCalendar(customPositionElement) {\n        if (typeof self.config.position === \"function\") {\n            return void self.config.position(self, customPositionElement);\n        }\n        if (self.calendarContainer === undefined)\n            return;\n        triggerEvent(\"onPreCalendarPosition\");\n        var positionElement = customPositionElement || self._positionElement;\n        var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n            (configPosVertical !== \"below\" &&\n                distanceFromBottom < calendarHeight &&\n                inputBounds.top > calendarHeight);\n        var top = window.pageYOffset +\n            inputBounds.top +\n            (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n        toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n        toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n        if (self.config.inline)\n            return;\n        var left = window.pageXOffset + inputBounds.left;\n        var isCenter = false;\n        var isRight = false;\n        if (configPosHorizontal === \"center\") {\n            left -= (calendarWidth - inputBounds.width) / 2;\n            isCenter = true;\n        }\n        else if (configPosHorizontal === \"right\") {\n            left -= calendarWidth - inputBounds.width;\n            isRight = true;\n        }\n        toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n        toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n        toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n        var right = window.document.body.offsetWidth -\n            (window.pageXOffset + inputBounds.right);\n        var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n        var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n        toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n        if (self.config.static)\n            return;\n        self.calendarContainer.style.top = top + \"px\";\n        if (!rightMost) {\n            self.calendarContainer.style.left = left + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n        else if (!centerMost) {\n            self.calendarContainer.style.left = \"auto\";\n            self.calendarContainer.style.right = right + \"px\";\n        }\n        else {\n            var doc = getDocumentStyleSheet();\n            if (doc === undefined)\n                return;\n            var bodyWidth = window.document.body.offsetWidth;\n            var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n            var centerBefore = \".flatpickr-calendar.centerMost:before\";\n            var centerAfter = \".flatpickr-calendar.centerMost:after\";\n            var centerIndex = doc.cssRules.length;\n            var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n            toggleClass(self.calendarContainer, \"rightMost\", false);\n            toggleClass(self.calendarContainer, \"centerMost\", true);\n            doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n            self.calendarContainer.style.left = centerLeft + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n    }\n    function getDocumentStyleSheet() {\n        var editableSheet = null;\n        for (var i = 0; i < document.styleSheets.length; i++) {\n            var sheet = document.styleSheets[i];\n            if (!sheet.cssRules)\n                continue;\n            try {\n                sheet.cssRules;\n            }\n            catch (err) {\n                continue;\n            }\n            editableSheet = sheet;\n            break;\n        }\n        return editableSheet != null ? editableSheet : createStyleSheet();\n    }\n    function createStyleSheet() {\n        var style = document.createElement(\"style\");\n        document.head.appendChild(style);\n        return style.sheet;\n    }\n    function redraw() {\n        if (self.config.noCalendar || self.isMobile)\n            return;\n        buildMonthSwitch();\n        updateNavigationCurrentMonth();\n        buildDays();\n    }\n    function focusAndClose() {\n        self._input.focus();\n        if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n            navigator.msMaxTouchPoints !== undefined) {\n            setTimeout(self.close, 0);\n        }\n        else {\n            self.close();\n        }\n    }\n    function selectDate(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        var isSelectable = function (day) {\n            return day.classList &&\n                day.classList.contains(\"flatpickr-day\") &&\n                !day.classList.contains(\"flatpickr-disabled\") &&\n                !day.classList.contains(\"notAllowed\");\n        };\n        var t = findParent(getEventTarget(e), isSelectable);\n        if (t === undefined)\n            return;\n        var target = t;\n        var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n        var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n            selectedDate.getMonth() >\n                self.currentMonth + self.config.showMonths - 1) &&\n            self.config.mode !== \"range\";\n        self.selectedDateElem = target;\n        if (self.config.mode === \"single\")\n            self.selectedDates = [selectedDate];\n        else if (self.config.mode === \"multiple\") {\n            var selectedIndex = isDateSelected(selectedDate);\n            if (selectedIndex)\n                self.selectedDates.splice(parseInt(selectedIndex), 1);\n            else\n                self.selectedDates.push(selectedDate);\n        }\n        else if (self.config.mode === \"range\") {\n            if (self.selectedDates.length === 2) {\n                self.clear(false, false);\n            }\n            self.latestSelectedDateObj = selectedDate;\n            self.selectedDates.push(selectedDate);\n            if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n        }\n        setHoursFromInputs();\n        if (shouldChangeMonth) {\n            var isNewYear = self.currentYear !== selectedDate.getFullYear();\n            self.currentYear = selectedDate.getFullYear();\n            self.currentMonth = selectedDate.getMonth();\n            if (isNewYear) {\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            triggerEvent(\"onMonthChange\");\n        }\n        updateNavigationCurrentMonth();\n        buildDays();\n        updateValue();\n        if (!shouldChangeMonth &&\n            self.config.mode !== \"range\" &&\n            self.config.showMonths === 1)\n            focusOnDayElem(target);\n        else if (self.selectedDateElem !== undefined &&\n            self.hourElement === undefined) {\n            self.selectedDateElem && self.selectedDateElem.focus();\n        }\n        if (self.hourElement !== undefined)\n            self.hourElement !== undefined && self.hourElement.focus();\n        if (self.config.closeOnSelect) {\n            var single = self.config.mode === \"single\" && !self.config.enableTime;\n            var range = self.config.mode === \"range\" &&\n                self.selectedDates.length === 2 &&\n                !self.config.enableTime;\n            if (single || range) {\n                focusAndClose();\n            }\n        }\n        triggerChange();\n    }\n    var CALLBACKS = {\n        locale: [setupLocale, updateWeekdays],\n        showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n        minDate: [jumpToDate],\n        maxDate: [jumpToDate],\n        positionElement: [updatePositionElement],\n        clickOpens: [\n            function () {\n                if (self.config.clickOpens === true) {\n                    bind(self._input, \"focus\", self.open);\n                    bind(self._input, \"click\", self.open);\n                }\n                else {\n                    self._input.removeEventListener(\"focus\", self.open);\n                    self._input.removeEventListener(\"click\", self.open);\n                }\n            },\n        ],\n    };\n    function set(option, value) {\n        if (option !== null && typeof option === \"object\") {\n            Object.assign(self.config, option);\n            for (var key in option) {\n                if (CALLBACKS[key] !== undefined)\n                    CALLBACKS[key].forEach(function (x) { return x(); });\n            }\n        }\n        else {\n            self.config[option] = value;\n            if (CALLBACKS[option] !== undefined)\n                CALLBACKS[option].forEach(function (x) { return x(); });\n            else if (HOOKS.indexOf(option) > -1)\n                self.config[option] = arrayify(value);\n        }\n        self.redraw();\n        updateValue(true);\n    }\n    function setSelectedDate(inputDate, format) {\n        var dates = [];\n        if (inputDate instanceof Array)\n            dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n        else if (inputDate instanceof Date || typeof inputDate === \"number\")\n            dates = [self.parseDate(inputDate, format)];\n        else if (typeof inputDate === \"string\") {\n            switch (self.config.mode) {\n                case \"single\":\n                case \"time\":\n                    dates = [self.parseDate(inputDate, format)];\n                    break;\n                case \"multiple\":\n                    dates = inputDate\n                        .split(self.config.conjunction)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                case \"range\":\n                    dates = inputDate\n                        .split(self.l10n.rangeSeparator)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                default:\n                    break;\n            }\n        }\n        else\n            self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n        self.selectedDates = (self.config.allowInvalidPreload\n            ? dates\n            : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n        if (self.config.mode === \"range\")\n            self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n    }\n    function setDate(date, triggerChange, format) {\n        if (triggerChange === void 0) { triggerChange = false; }\n        if (format === void 0) { format = self.config.dateFormat; }\n        if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n            return self.clear(triggerChange);\n        setSelectedDate(date, format);\n        self.latestSelectedDateObj =\n            self.selectedDates[self.selectedDates.length - 1];\n        self.redraw();\n        jumpToDate(undefined, triggerChange);\n        setHoursFromDate();\n        if (self.selectedDates.length === 0) {\n            self.clear(false);\n        }\n        updateValue(triggerChange);\n        if (triggerChange)\n            triggerEvent(\"onChange\");\n    }\n    function parseDateRules(arr) {\n        return arr\n            .slice()\n            .map(function (rule) {\n            if (typeof rule === \"string\" ||\n                typeof rule === \"number\" ||\n                rule instanceof Date) {\n                return self.parseDate(rule, undefined, true);\n            }\n            else if (rule &&\n                typeof rule === \"object\" &&\n                rule.from &&\n                rule.to)\n                return {\n                    from: self.parseDate(rule.from, undefined),\n                    to: self.parseDate(rule.to, undefined),\n                };\n            return rule;\n        })\n            .filter(function (x) { return x; });\n    }\n    function setupDates() {\n        self.selectedDates = [];\n        self.now = self.parseDate(self.config.now) || new Date();\n        var preloadedDate = self.config.defaultDate ||\n            ((self.input.nodeName === \"INPUT\" ||\n                self.input.nodeName === \"TEXTAREA\") &&\n                self.input.placeholder &&\n                self.input.value === self.input.placeholder\n                ? null\n                : self.input.value);\n        if (preloadedDate)\n            setSelectedDate(preloadedDate, self.config.dateFormat);\n        self._initialDate =\n            self.selectedDates.length > 0\n                ? self.selectedDates[0]\n                : self.config.minDate &&\n                    self.config.minDate.getTime() > self.now.getTime()\n                    ? self.config.minDate\n                    : self.config.maxDate &&\n                        self.config.maxDate.getTime() < self.now.getTime()\n                        ? self.config.maxDate\n                        : self.now;\n        self.currentYear = self._initialDate.getFullYear();\n        self.currentMonth = self._initialDate.getMonth();\n        if (self.selectedDates.length > 0)\n            self.latestSelectedDateObj = self.selectedDates[0];\n        if (self.config.minTime !== undefined)\n            self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n        if (self.config.maxTime !== undefined)\n            self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n        self.minDateHasTime =\n            !!self.config.minDate &&\n                (self.config.minDate.getHours() > 0 ||\n                    self.config.minDate.getMinutes() > 0 ||\n                    self.config.minDate.getSeconds() > 0);\n        self.maxDateHasTime =\n            !!self.config.maxDate &&\n                (self.config.maxDate.getHours() > 0 ||\n                    self.config.maxDate.getMinutes() > 0 ||\n                    self.config.maxDate.getSeconds() > 0);\n    }\n    function setupInputs() {\n        self.input = getInputElem();\n        if (!self.input) {\n            self.config.errorHandler(new Error(\"Invalid input element specified\"));\n            return;\n        }\n        self.input._type = self.input.type;\n        self.input.type = \"text\";\n        self.input.classList.add(\"flatpickr-input\");\n        self._input = self.input;\n        if (self.config.altInput) {\n            self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n            self._input = self.altInput;\n            self.altInput.placeholder = self.input.placeholder;\n            self.altInput.disabled = self.input.disabled;\n            self.altInput.required = self.input.required;\n            self.altInput.tabIndex = self.input.tabIndex;\n            self.altInput.type = \"text\";\n            self.input.setAttribute(\"type\", \"hidden\");\n            if (!self.config.static && self.input.parentNode)\n                self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n        }\n        if (!self.config.allowInput)\n            self._input.setAttribute(\"readonly\", \"readonly\");\n        updatePositionElement();\n    }\n    function updatePositionElement() {\n        self._positionElement = self.config.positionElement || self._input;\n    }\n    function setupMobile() {\n        var inputType = self.config.enableTime\n            ? self.config.noCalendar\n                ? \"time\"\n                : \"datetime-local\"\n            : \"date\";\n        self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n        self.mobileInput.tabIndex = 1;\n        self.mobileInput.type = inputType;\n        self.mobileInput.disabled = self.input.disabled;\n        self.mobileInput.required = self.input.required;\n        self.mobileInput.placeholder = self.input.placeholder;\n        self.mobileFormatStr =\n            inputType === \"datetime-local\"\n                ? \"Y-m-d\\\\TH:i:S\"\n                : inputType === \"date\"\n                    ? \"Y-m-d\"\n                    : \"H:i:S\";\n        if (self.selectedDates.length > 0) {\n            self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n        }\n        if (self.config.minDate)\n            self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n        if (self.config.maxDate)\n            self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n        if (self.input.getAttribute(\"step\"))\n            self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n        self.input.type = \"hidden\";\n        if (self.altInput !== undefined)\n            self.altInput.type = \"hidden\";\n        try {\n            if (self.input.parentNode)\n                self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n        }\n        catch (_a) { }\n        bind(self.mobileInput, \"change\", function (e) {\n            self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n            triggerEvent(\"onChange\");\n            triggerEvent(\"onClose\");\n        });\n    }\n    function toggle(e) {\n        if (self.isOpen === true)\n            return self.close();\n        self.open(e);\n    }\n    function triggerEvent(event, data) {\n        if (self.config === undefined)\n            return;\n        var hooks = self.config[event];\n        if (hooks !== undefined && hooks.length > 0) {\n            for (var i = 0; hooks[i] && i < hooks.length; i++)\n                hooks[i](self.selectedDates, self.input.value, self, data);\n        }\n        if (event === \"onChange\") {\n            self.input.dispatchEvent(createEvent(\"change\"));\n            self.input.dispatchEvent(createEvent(\"input\"));\n        }\n    }\n    function createEvent(name) {\n        var e = document.createEvent(\"Event\");\n        e.initEvent(name, true, true);\n        return e;\n    }\n    function isDateSelected(date) {\n        for (var i = 0; i < self.selectedDates.length; i++) {\n            var selectedDate = self.selectedDates[i];\n            if (selectedDate instanceof Date &&\n                compareDates(selectedDate, date) === 0)\n                return \"\" + i;\n        }\n        return false;\n    }\n    function isDateInRange(date) {\n        if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n            return false;\n        return (compareDates(date, self.selectedDates[0]) >= 0 &&\n            compareDates(date, self.selectedDates[1]) <= 0);\n    }\n    function updateNavigationCurrentMonth() {\n        if (self.config.noCalendar || self.isMobile || !self.monthNav)\n            return;\n        self.yearElements.forEach(function (yearElement, i) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType === \"static\") {\n                self.monthElements[i].textContent =\n                    monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n            }\n            else {\n                self.monthsDropdownContainer.value = d.getMonth().toString();\n            }\n            yearElement.value = d.getFullYear().toString();\n        });\n        self._hidePrevMonthArrow =\n            self.config.minDate !== undefined &&\n                (self.currentYear === self.config.minDate.getFullYear()\n                    ? self.currentMonth <= self.config.minDate.getMonth()\n                    : self.currentYear < self.config.minDate.getFullYear());\n        self._hideNextMonthArrow =\n            self.config.maxDate !== undefined &&\n                (self.currentYear === self.config.maxDate.getFullYear()\n                    ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n                    : self.currentYear > self.config.maxDate.getFullYear());\n    }\n    function getDateStr(specificFormat) {\n        var format = specificFormat ||\n            (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n        return self.selectedDates\n            .map(function (dObj) { return self.formatDate(dObj, format); })\n            .filter(function (d, i, arr) {\n            return self.config.mode !== \"range\" ||\n                self.config.enableTime ||\n                arr.indexOf(d) === i;\n        })\n            .join(self.config.mode !== \"range\"\n            ? self.config.conjunction\n            : self.l10n.rangeSeparator);\n    }\n    function updateValue(triggerChange) {\n        if (triggerChange === void 0) { triggerChange = true; }\n        if (self.mobileInput !== undefined && self.mobileFormatStr) {\n            self.mobileInput.value =\n                self.latestSelectedDateObj !== undefined\n                    ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n                    : \"\";\n        }\n        self.input.value = getDateStr(self.config.dateFormat);\n        if (self.altInput !== undefined) {\n            self.altInput.value = getDateStr(self.config.altFormat);\n        }\n        if (triggerChange !== false)\n            triggerEvent(\"onValueUpdate\");\n    }\n    function onMonthNavClick(e) {\n        var eventTarget = getEventTarget(e);\n        var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n        var isNextMonth = self.nextMonthNav.contains(eventTarget);\n        if (isPrevMonth || isNextMonth) {\n            changeMonth(isPrevMonth ? -1 : 1);\n        }\n        else if (self.yearElements.indexOf(eventTarget) >= 0) {\n            eventTarget.select();\n        }\n        else if (eventTarget.classList.contains(\"arrowUp\")) {\n            self.changeYear(self.currentYear + 1);\n        }\n        else if (eventTarget.classList.contains(\"arrowDown\")) {\n            self.changeYear(self.currentYear - 1);\n        }\n    }\n    function timeWrapper(e) {\n        e.preventDefault();\n        var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            self.amPM.textContent =\n                self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n        var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n            (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n        var newValue = curValue + step * delta;\n        if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n            var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n            if (newValue < min) {\n                newValue =\n                    max +\n                        newValue +\n                        int(!isHourElem) +\n                        (int(isHourElem) && int(!self.amPM));\n                if (isMinuteElem)\n                    incrementNumInput(undefined, -1, self.hourElement);\n            }\n            else if (newValue > max) {\n                newValue =\n                    input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n                if (isMinuteElem)\n                    incrementNumInput(undefined, 1, self.hourElement);\n            }\n            if (self.amPM &&\n                isHourElem &&\n                (step === 1\n                    ? newValue + curValue === 23\n                    : Math.abs(newValue - curValue) > step)) {\n                self.amPM.textContent =\n                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n            }\n            input.value = pad(newValue);\n        }\n    }\n    init();\n    return self;\n}\nfunction _flatpickr(nodeList, config) {\n    var nodes = Array.prototype.slice\n        .call(nodeList)\n        .filter(function (x) { return x instanceof HTMLElement; });\n    var instances = [];\n    for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n        try {\n            if (node.getAttribute(\"data-fp-omit\") !== null)\n                continue;\n            if (node._flatpickr !== undefined) {\n                node._flatpickr.destroy();\n                node._flatpickr = undefined;\n            }\n            node._flatpickr = FlatpickrInstance(node, config || {});\n            instances.push(node._flatpickr);\n        }\n        catch (e) {\n            console.error(e);\n        }\n    }\n    return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n    typeof HTMLCollection !== \"undefined\" &&\n    typeof NodeList !== \"undefined\") {\n    HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n    HTMLElement.prototype.flatpickr = function (config) {\n        return _flatpickr([this], config);\n    };\n}\nvar flatpickr = function (selector, config) {\n    if (typeof selector === \"string\") {\n        return _flatpickr(window.document.querySelectorAll(selector), config);\n    }\n    else if (selector instanceof Node) {\n        return _flatpickr([selector], config);\n    }\n    else {\n        return _flatpickr(selector, config);\n    }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n    en: __assign({}, English),\n    default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n    flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n    flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n    jQuery.fn.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n}\nDate.prototype.fp_incr = function (days) {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n    window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n    Object.assign = function (target) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        if (!target) {\n            throw TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var _loop_1 = function (source) {\n            if (source) {\n                Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n            }\n        };\n        for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n            var source = args_1[_a];\n            _loop_1(source);\n        }\n        return target;\n    };\n}\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.cat = {}));\n}(this, (function (exports) { 'use strict';\n\n  var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n      ? window.flatpickr\n      : {\n          l10ns: {},\n      };\n  var Catalan = {\n      weekdays: {\n          shorthand: [\"Dg\", \"Dl\", \"Dt\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"],\n          longhand: [\n              \"Diumenge\",\n              \"Dilluns\",\n              \"Dimarts\",\n              \"Dimecres\",\n              \"Dijous\",\n              \"Divendres\",\n              \"Dissabte\",\n          ],\n      },\n      months: {\n          shorthand: [\n              \"Gen\",\n              \"Febr\",\n              \"Març\",\n              \"Abr\",\n              \"Maig\",\n              \"Juny\",\n              \"Jul\",\n              \"Ag\",\n              \"Set\",\n              \"Oct\",\n              \"Nov\",\n              \"Des\",\n          ],\n          longhand: [\n              \"Gener\",\n              \"Febrer\",\n              \"Març\",\n              \"Abril\",\n              \"Maig\",\n              \"Juny\",\n              \"Juliol\",\n              \"Agost\",\n              \"Setembre\",\n              \"Octubre\",\n              \"Novembre\",\n              \"Desembre\",\n          ],\n      },\n      ordinal: function (nth) {\n          var s = nth % 100;\n          if (s > 3 && s < 21)\n              return \"è\";\n          switch (s % 10) {\n              case 1:\n                  return \"r\";\n              case 2:\n                  return \"n\";\n              case 3:\n                  return \"r\";\n              case 4:\n                  return \"t\";\n              default:\n                  return \"è\";\n          }\n      },\n      firstDayOfWeek: 1,\n      rangeSeparator: \" a \",\n      time_24hr: true,\n  };\n  fp.l10ns.cat = fp.l10ns.ca = Catalan;\n  var cat = fp.l10ns;\n\n  exports.Catalan = Catalan;\n  exports.default = cat;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.default = {}));\n}(this, (function (exports) { 'use strict';\n\n  var english = {\n      weekdays: {\n          shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n          longhand: [\n              \"Sunday\",\n              \"Monday\",\n              \"Tuesday\",\n              \"Wednesday\",\n              \"Thursday\",\n              \"Friday\",\n              \"Saturday\",\n          ],\n      },\n      months: {\n          shorthand: [\n              \"Jan\",\n              \"Feb\",\n              \"Mar\",\n              \"Apr\",\n              \"May\",\n              \"Jun\",\n              \"Jul\",\n              \"Aug\",\n              \"Sep\",\n              \"Oct\",\n              \"Nov\",\n              \"Dec\",\n          ],\n          longhand: [\n              \"January\",\n              \"February\",\n              \"March\",\n              \"April\",\n              \"May\",\n              \"June\",\n              \"July\",\n              \"August\",\n              \"September\",\n              \"October\",\n              \"November\",\n              \"December\",\n          ],\n      },\n      daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n      firstDayOfWeek: 0,\n      ordinal: function (nth) {\n          var s = nth % 100;\n          if (s > 3 && s < 21)\n              return \"th\";\n          switch (s % 10) {\n              case 1:\n                  return \"st\";\n              case 2:\n                  return \"nd\";\n              case 3:\n                  return \"rd\";\n              default:\n                  return \"th\";\n          }\n      },\n      rangeSeparator: \" to \",\n      weekAbbreviation: \"Wk\",\n      scrollTitle: \"Scroll to increment\",\n      toggleTitle: \"Click to toggle\",\n      amPM: [\"AM\", \"PM\"],\n      yearAriaLabel: \"Year\",\n      monthAriaLabel: \"Month\",\n      hourAriaLabel: \"Hour\",\n      minuteAriaLabel: \"Minute\",\n      time_24hr: false,\n  };\n\n  exports.default = english;\n  exports.english = english;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.es = {}));\n}(this, (function (exports) { 'use strict';\n\n  var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n      ? window.flatpickr\n      : {\n          l10ns: {},\n      };\n  var Spanish = {\n      weekdays: {\n          shorthand: [\"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"],\n          longhand: [\n              \"Domingo\",\n              \"Lunes\",\n              \"Martes\",\n              \"Miércoles\",\n              \"Jueves\",\n              \"Viernes\",\n              \"Sábado\",\n          ],\n      },\n      months: {\n          shorthand: [\n              \"Ene\",\n              \"Feb\",\n              \"Mar\",\n              \"Abr\",\n              \"May\",\n              \"Jun\",\n              \"Jul\",\n              \"Ago\",\n              \"Sep\",\n              \"Oct\",\n              \"Nov\",\n              \"Dic\",\n          ],\n          longhand: [\n              \"Enero\",\n              \"Febrero\",\n              \"Marzo\",\n              \"Abril\",\n              \"Mayo\",\n              \"Junio\",\n              \"Julio\",\n              \"Agosto\",\n              \"Septiembre\",\n              \"Octubre\",\n              \"Noviembre\",\n              \"Diciembre\",\n          ],\n      },\n      ordinal: function () {\n          return \"º\";\n      },\n      firstDayOfWeek: 1,\n      rangeSeparator: \" a \",\n      time_24hr: true,\n  };\n  fp.l10ns.es = Spanish;\n  var es = fp.l10ns;\n\n  exports.Spanish = Spanish;\n  exports.default = es;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.fr = {}));\n}(this, (function (exports) { 'use strict';\n\n  var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n      ? window.flatpickr\n      : {\n          l10ns: {},\n      };\n  var French = {\n      firstDayOfWeek: 1,\n      weekdays: {\n          shorthand: [\"dim\", \"lun\", \"mar\", \"mer\", \"jeu\", \"ven\", \"sam\"],\n          longhand: [\n              \"dimanche\",\n              \"lundi\",\n              \"mardi\",\n              \"mercredi\",\n              \"jeudi\",\n              \"vendredi\",\n              \"samedi\",\n          ],\n      },\n      months: {\n          shorthand: [\n              \"janv\",\n              \"févr\",\n              \"mars\",\n              \"avr\",\n              \"mai\",\n              \"juin\",\n              \"juil\",\n              \"août\",\n              \"sept\",\n              \"oct\",\n              \"nov\",\n              \"déc\",\n          ],\n          longhand: [\n              \"janvier\",\n              \"février\",\n              \"mars\",\n              \"avril\",\n              \"mai\",\n              \"juin\",\n              \"juillet\",\n              \"août\",\n              \"septembre\",\n              \"octobre\",\n              \"novembre\",\n              \"décembre\",\n          ],\n      },\n      ordinal: function (nth) {\n          if (nth > 1)\n              return \"\";\n          return \"er\";\n      },\n      rangeSeparator: \" au \",\n      weekAbbreviation: \"Sem\",\n      scrollTitle: \"Défiler pour augmenter la valeur\",\n      toggleTitle: \"Cliquer pour basculer\",\n      time_24hr: true,\n  };\n  fp.l10ns.fr = French;\n  var fr = fp.l10ns;\n\n  exports.French = French;\n  exports.default = fr;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/*\n * jQuery FlexSlider v2.7.2\n * Copyright 2012 WooThemes\n * Contributing Author: Tyler Smith\n */!function($){var e=!0;$.flexslider=function(t,a){var n=$(t);void 0===a.rtl&&\"rtl\"==$(\"html\").attr(\"dir\")&&(a.rtl=!0),n.vars=$.extend({},$.flexslider.defaults,a);var i=n.vars.namespace,r=window.navigator&&window.navigator.msPointerEnabled&&window.MSGesture,s=(\"ontouchstart\"in window||r||window.DocumentTouch&&document instanceof DocumentTouch)&&n.vars.touch,o=\"click touchend MSPointerUp keyup\",l=\"\",c,d=\"vertical\"===n.vars.direction,u=n.vars.reverse,v=n.vars.itemWidth>0,p=\"fade\"===n.vars.animation,m=\"\"!==n.vars.asNavFor,f={};$.data(t,\"flexslider\",n),f={init:function(){n.animating=!1,n.currentSlide=parseInt(n.vars.startAt?n.vars.startAt:0,10),isNaN(n.currentSlide)&&(n.currentSlide=0),n.animatingTo=n.currentSlide,n.atEnd=0===n.currentSlide||n.currentSlide===n.last,n.containerSelector=n.vars.selector.substr(0,n.vars.selector.search(\" \")),n.slides=$(n.vars.selector,n),n.container=$(n.containerSelector,n),n.count=n.slides.length,n.syncExists=$(n.vars.sync).length>0,\"slide\"===n.vars.animation&&(n.vars.animation=\"swing\"),n.prop=d?\"top\":n.vars.rtl?\"marginRight\":\"marginLeft\",n.args={},n.manualPause=!1,n.stopped=!1,n.started=!1,n.startTimeout=null,n.transitions=!n.vars.video&&!p&&n.vars.useCSS&&function(){var e=document.createElement(\"div\"),t=[\"perspectiveProperty\",\"WebkitPerspective\",\"MozPerspective\",\"OPerspective\",\"msPerspective\"];for(var a in t)if(void 0!==e.style[t[a]])return n.pfx=t[a].replace(\"Perspective\",\"\").toLowerCase(),n.prop=\"-\"+n.pfx+\"-transform\",!0;return!1}(),n.isFirefox=navigator.userAgent.toLowerCase().indexOf(\"firefox\")>-1,n.ensureAnimationEnd=\"\",\"\"!==n.vars.controlsContainer&&(n.controlsContainer=$(n.vars.controlsContainer).length>0&&$(n.vars.controlsContainer)),\"\"!==n.vars.manualControls&&(n.manualControls=$(n.vars.manualControls).length>0&&$(n.vars.manualControls)),\"\"!==n.vars.customDirectionNav&&(n.customDirectionNav=2===$(n.vars.customDirectionNav).length&&$(n.vars.customDirectionNav)),n.vars.randomize&&(n.slides.sort(function(){return Math.round(Math.random())-.5}),n.container.empty().append(n.slides)),n.doMath(),n.setup(\"init\"),n.vars.controlNav&&f.controlNav.setup(),n.vars.directionNav&&f.directionNav.setup(),n.vars.keyboard&&(1===$(n.containerSelector).length||n.vars.multipleKeyboard)&&$(document).bind(\"keyup\",function(e){var t=e.keyCode;if(!n.animating&&(39===t||37===t)){var a=n.vars.rtl?37===t?n.getTarget(\"next\"):39===t&&n.getTarget(\"prev\"):39===t?n.getTarget(\"next\"):37===t&&n.getTarget(\"prev\");n.flexAnimate(a,n.vars.pauseOnAction)}}),n.vars.mousewheel&&n.bind(\"mousewheel\",function(e,t,a,i){e.preventDefault();var r=t<0?n.getTarget(\"next\"):n.getTarget(\"prev\");n.flexAnimate(r,n.vars.pauseOnAction)}),n.vars.pausePlay&&f.pausePlay.setup(),n.vars.slideshow&&n.vars.pauseInvisible&&f.pauseInvisible.init(),n.vars.slideshow&&(n.vars.pauseOnHover&&n.hover(function(){n.manualPlay||n.manualPause||n.pause()},function(){n.manualPause||n.manualPlay||n.stopped||n.play()}),n.vars.pauseInvisible&&f.pauseInvisible.isHidden()||(n.vars.initDelay>0?n.startTimeout=setTimeout(n.play,n.vars.initDelay):n.play())),m&&f.asNav.setup(),s&&n.vars.touch&&f.touch(),(!p||p&&n.vars.smoothHeight)&&$(window).bind(\"resize orientationchange focus\",f.resize),n.find(\"img\").attr(\"draggable\",\"false\"),setTimeout(function(){n.vars.start(n)},200)},asNav:{setup:function(){n.asNav=!0,n.animatingTo=Math.floor(n.currentSlide/n.move),n.currentItem=n.currentSlide,n.slides.removeClass(i+\"active-slide\").eq(n.currentItem).addClass(i+\"active-slide\"),r?(t._slider=n,n.slides.each(function(){var e=this;e._gesture=new MSGesture,e._gesture.target=e,e.addEventListener(\"MSPointerDown\",function(e){e.preventDefault(),e.currentTarget._gesture&&e.currentTarget._gesture.addPointer(e.pointerId)},!1),e.addEventListener(\"MSGestureTap\",function(e){e.preventDefault();var t=$(this),a=t.index();$(n.vars.asNavFor).data(\"flexslider\").animating||t.hasClass(\"active\")||(n.direction=n.currentItem<a?\"next\":\"prev\",n.flexAnimate(a,n.vars.pauseOnAction,!1,!0,!0))})})):n.slides.on(o,function(e){e.preventDefault();var t=$(this),a=t.index(),r;r=n.vars.rtl?-1*(t.offset().right-$(n).scrollLeft()):t.offset().left-$(n).scrollLeft(),r<=0&&t.hasClass(i+\"active-slide\")?n.flexAnimate(n.getTarget(\"prev\"),!0):$(n.vars.asNavFor).data(\"flexslider\").animating||t.hasClass(i+\"active-slide\")||(n.direction=n.currentItem<a?\"next\":\"prev\",n.flexAnimate(a,n.vars.pauseOnAction,!1,!0,!0))})}},controlNav:{setup:function(){n.manualControls?f.controlNav.setupManual():f.controlNav.setupPaging()},setupPaging:function(){var e=\"thumbnails\"===n.vars.controlNav?\"control-thumbs\":\"control-paging\",t=1,a,r;if(n.controlNavScaffold=$('<ol class=\"'+i+\"control-nav \"+i+e+'\"></ol>'),n.pagingCount>1)for(var s=0;s<n.pagingCount;s++){if(r=n.slides.eq(s),void 0===r.attr(\"data-thumb-alt\")&&r.attr(\"data-thumb-alt\",\"\"),a=$(\"<a></a>\").attr(\"href\",\"#\").text(t),\"thumbnails\"===n.vars.controlNav&&(a=$(\"<img/>\").attr(\"src\",r.attr(\"data-thumb\"))),\"\"!==r.attr(\"data-thumb-alt\")&&a.attr(\"alt\",r.attr(\"data-thumb-alt\")),\"thumbnails\"===n.vars.controlNav&&!0===n.vars.thumbCaptions){var c=r.attr(\"data-thumbcaption\");if(\"\"!==c&&void 0!==c){var d=$(\"<span></span>\").addClass(i+\"caption\").text(c);a.append(d)}}var u=$(\"<li>\");a.appendTo(u),u.append(\"</li>\"),n.controlNavScaffold.append(u),t++}n.controlsContainer?$(n.controlsContainer).append(n.controlNavScaffold):n.append(n.controlNavScaffold),f.controlNav.set(),f.controlNav.active(),n.controlNavScaffold.delegate(\"a, img\",o,function(e){if(e.preventDefault(),\"\"===l||l===e.type){var t=$(this),a=n.controlNav.index(t);t.hasClass(i+\"active\")||(n.direction=a>n.currentSlide?\"next\":\"prev\",n.flexAnimate(a,n.vars.pauseOnAction))}\"\"===l&&(l=e.type),f.setToClearWatchedEvent()})},setupManual:function(){n.controlNav=n.manualControls,f.controlNav.active(),n.controlNav.bind(o,function(e){if(e.preventDefault(),\"\"===l||l===e.type){var t=$(this),a=n.controlNav.index(t);t.hasClass(i+\"active\")||(a>n.currentSlide?n.direction=\"next\":n.direction=\"prev\",n.flexAnimate(a,n.vars.pauseOnAction))}\"\"===l&&(l=e.type),f.setToClearWatchedEvent()})},set:function(){var e=\"thumbnails\"===n.vars.controlNav?\"img\":\"a\";n.controlNav=$(\".\"+i+\"control-nav li \"+e,n.controlsContainer?n.controlsContainer:n)},active:function(){n.controlNav.removeClass(i+\"active\").eq(n.animatingTo).addClass(i+\"active\")},update:function(e,t){n.pagingCount>1&&\"add\"===e?n.controlNavScaffold.append($('<li><a href=\"#\">'+n.count+\"</a></li>\")):1===n.pagingCount?n.controlNavScaffold.find(\"li\").remove():n.controlNav.eq(t).closest(\"li\").remove(),f.controlNav.set(),n.pagingCount>1&&n.pagingCount!==n.controlNav.length?n.update(t,e):f.controlNav.active()}},directionNav:{setup:function(){var e=$('<ul class=\"'+i+'direction-nav\"><li class=\"'+i+'nav-prev\"><a class=\"'+i+'prev\" href=\"#\">'+n.vars.prevText+'</a></li><li class=\"'+i+'nav-next\"><a class=\"'+i+'next\" href=\"#\">'+n.vars.nextText+\"</a></li></ul>\");n.customDirectionNav?n.directionNav=n.customDirectionNav:n.controlsContainer?($(n.controlsContainer).append(e),n.directionNav=$(\".\"+i+\"direction-nav li a\",n.controlsContainer)):(n.append(e),n.directionNav=$(\".\"+i+\"direction-nav li a\",n)),f.directionNav.update(),n.directionNav.bind(o,function(e){e.preventDefault();var t;\"\"!==l&&l!==e.type||(t=$(this).hasClass(i+\"next\")?n.getTarget(\"next\"):n.getTarget(\"prev\"),n.flexAnimate(t,n.vars.pauseOnAction)),\"\"===l&&(l=e.type),f.setToClearWatchedEvent()})},update:function(){var e=i+\"disabled\";1===n.pagingCount?n.directionNav.addClass(e).attr(\"tabindex\",\"-1\"):n.vars.animationLoop?n.directionNav.removeClass(e).removeAttr(\"tabindex\"):0===n.animatingTo?n.directionNav.removeClass(e).filter(\".\"+i+\"prev\").addClass(e).attr(\"tabindex\",\"-1\"):n.animatingTo===n.last?n.directionNav.removeClass(e).filter(\".\"+i+\"next\").addClass(e).attr(\"tabindex\",\"-1\"):n.directionNav.removeClass(e).removeAttr(\"tabindex\")}},pausePlay:{setup:function(){var e=$('<div class=\"'+i+'pauseplay\"><a href=\"#\"></a></div>');n.controlsContainer?(n.controlsContainer.append(e),n.pausePlay=$(\".\"+i+\"pauseplay a\",n.controlsContainer)):(n.append(e),n.pausePlay=$(\".\"+i+\"pauseplay a\",n)),f.pausePlay.update(n.vars.slideshow?i+\"pause\":i+\"play\"),n.pausePlay.bind(o,function(e){e.preventDefault(),\"\"!==l&&l!==e.type||($(this).hasClass(i+\"pause\")?(n.manualPause=!0,n.manualPlay=!1,n.pause()):(n.manualPause=!1,n.manualPlay=!0,n.play())),\"\"===l&&(l=e.type),f.setToClearWatchedEvent()})},update:function(e){\"play\"===e?n.pausePlay.removeClass(i+\"pause\").addClass(i+\"play\").html(n.vars.playText):n.pausePlay.removeClass(i+\"play\").addClass(i+\"pause\").html(n.vars.pauseText)}},touch:function(){function e(e){e.stopPropagation(),n.animating?e.preventDefault():(n.pause(),t._gesture.addPointer(e.pointerId),w=0,c=d?n.h:n.w,f=Number(new Date),l=v&&u&&n.animatingTo===n.last?0:v&&u?n.limit-(n.itemW+n.vars.itemMargin)*n.move*n.animatingTo:v&&n.currentSlide===n.last?n.limit:v?(n.itemW+n.vars.itemMargin)*n.move*n.currentSlide:u?(n.last-n.currentSlide+n.cloneOffset)*c:(n.currentSlide+n.cloneOffset)*c)}function a(e){e.stopPropagation();var a=e.target._slider;if(a){var n=-e.translationX,i=-e.translationY;if(w+=d?i:n,m=(a.vars.rtl?-1:1)*w,x=d?Math.abs(w)<Math.abs(-n):Math.abs(w)<Math.abs(-i),e.detail===e.MSGESTURE_FLAG_INERTIA)return void setImmediate(function(){t._gesture.stop()});(!x||Number(new Date)-f>500)&&(e.preventDefault(),!p&&a.transitions&&(a.vars.animationLoop||(m=w/(0===a.currentSlide&&w<0||a.currentSlide===a.last&&w>0?Math.abs(w)/c+2:1)),a.setProps(l+m,\"setTouch\")))}}function i(e){e.stopPropagation();var t=e.target._slider;if(t){if(t.animatingTo===t.currentSlide&&!x&&null!==m){var a=u?-m:m,n=a>0?t.getTarget(\"next\"):t.getTarget(\"prev\");t.canAdvance(n)&&(Number(new Date)-f<550&&Math.abs(a)>50||Math.abs(a)>c/2)?t.flexAnimate(n,t.vars.pauseOnAction):p||t.flexAnimate(t.currentSlide,t.vars.pauseOnAction,!0)}s=null,o=null,m=null,l=null,w=0}}var s,o,l,c,m,f,g,h,S,x=!1,y=0,b=0,w=0;r?(t.style.msTouchAction=\"none\",t._gesture=new MSGesture,t._gesture.target=t,t.addEventListener(\"MSPointerDown\",e,!1),t._slider=n,t.addEventListener(\"MSGestureChange\",a,!1),t.addEventListener(\"MSGestureEnd\",i,!1)):(g=function(e){n.animating?e.preventDefault():(window.navigator.msPointerEnabled||1===e.touches.length)&&(n.pause(),c=d?n.h:n.w,f=Number(new Date),y=e.touches[0].pageX,b=e.touches[0].pageY,l=v&&u&&n.animatingTo===n.last?0:v&&u?n.limit-(n.itemW+n.vars.itemMargin)*n.move*n.animatingTo:v&&n.currentSlide===n.last?n.limit:v?(n.itemW+n.vars.itemMargin)*n.move*n.currentSlide:u?(n.last-n.currentSlide+n.cloneOffset)*c:(n.currentSlide+n.cloneOffset)*c,s=d?b:y,o=d?y:b,t.addEventListener(\"touchmove\",h,!1),t.addEventListener(\"touchend\",S,!1))},h=function(e){y=e.touches[0].pageX,b=e.touches[0].pageY,m=d?s-b:(n.vars.rtl?-1:1)*(s-y),x=d?Math.abs(m)<Math.abs(y-o):Math.abs(m)<Math.abs(b-o);var t=500;(!x||Number(new Date)-f>500)&&(e.preventDefault(),!p&&n.transitions&&(n.vars.animationLoop||(m/=0===n.currentSlide&&m<0||n.currentSlide===n.last&&m>0?Math.abs(m)/c+2:1),n.setProps(l+m,\"setTouch\")))},S=function(e){if(t.removeEventListener(\"touchmove\",h,!1),n.animatingTo===n.currentSlide&&!x&&null!==m){var a=u?-m:m,i=a>0?n.getTarget(\"next\"):n.getTarget(\"prev\");n.canAdvance(i)&&(Number(new Date)-f<550&&Math.abs(a)>50||Math.abs(a)>c/2)?n.flexAnimate(i,n.vars.pauseOnAction):p||n.flexAnimate(n.currentSlide,n.vars.pauseOnAction,!0)}t.removeEventListener(\"touchend\",S,!1),s=null,o=null,m=null,l=null},t.addEventListener(\"touchstart\",g,!1))},resize:function(){!n.animating&&n.is(\":visible\")&&(v||n.doMath(),p?f.smoothHeight():v?(n.slides.width(n.computedW),n.update(n.pagingCount),n.setProps()):d?(n.viewport.height(n.h),n.setProps(n.h,\"setTotal\")):(n.vars.smoothHeight&&f.smoothHeight(),n.newSlides.width(n.computedW),n.setProps(n.computedW,\"setTotal\")))},smoothHeight:function(e){if(!d||p){var t=p?n:n.viewport;e?t.animate({height:n.slides.eq(n.animatingTo).innerHeight()},e):t.innerHeight(n.slides.eq(n.animatingTo).innerHeight())}},sync:function(e){var t=$(n.vars.sync).data(\"flexslider\"),a=n.animatingTo;switch(e){case\"animate\":t.flexAnimate(a,n.vars.pauseOnAction,!1,!0);break;case\"play\":t.playing||t.asNav||t.play();break;case\"pause\":t.pause();break}},uniqueID:function(e){return e.filter(\"[id]\").add(e.find(\"[id]\")).each(function(){var e=$(this);e.attr(\"id\",e.attr(\"id\")+\"_clone\")}),e},pauseInvisible:{visProp:null,init:function(){var e=f.pauseInvisible.getHiddenProp();if(e){var t=e.replace(/[H|h]idden/,\"\")+\"visibilitychange\";document.addEventListener(t,function(){f.pauseInvisible.isHidden()?n.startTimeout?clearTimeout(n.startTimeout):n.pause():n.started?n.play():n.vars.initDelay>0?setTimeout(n.play,n.vars.initDelay):n.play()})}},isHidden:function(){var e=f.pauseInvisible.getHiddenProp();return!!e&&document[e]},getHiddenProp:function(){var e=[\"webkit\",\"moz\",\"ms\",\"o\"];if(\"hidden\"in document)return\"hidden\";for(var t=0;t<e.length;t++)if(e[t]+\"Hidden\"in document)return e[t]+\"Hidden\";return null}},setToClearWatchedEvent:function(){clearTimeout(c),c=setTimeout(function(){l=\"\"},3e3)}},n.flexAnimate=function(e,t,a,r,o){if(n.vars.animationLoop||e===n.currentSlide||(n.direction=e>n.currentSlide?\"next\":\"prev\"),m&&1===n.pagingCount&&(n.direction=n.currentItem<e?\"next\":\"prev\"),!n.animating&&(n.canAdvance(e,o)||a)&&n.is(\":visible\")){if(m&&r){var l=$(n.vars.asNavFor).data(\"flexslider\");if(n.atEnd=0===e||e===n.count-1,l.flexAnimate(e,!0,!1,!0,o),n.direction=n.currentItem<e?\"next\":\"prev\",l.direction=n.direction,Math.ceil((e+1)/n.visible)-1===n.currentSlide||0===e)return n.currentItem=e,n.slides.removeClass(i+\"active-slide\").eq(e).addClass(i+\"active-slide\"),!1;n.currentItem=e,n.slides.removeClass(i+\"active-slide\").eq(e).addClass(i+\"active-slide\"),e=Math.floor(e/n.visible)}if(n.animating=!0,n.animatingTo=e,t&&n.pause(),n.vars.before(n),n.syncExists&&!o&&f.sync(\"animate\"),n.vars.controlNav&&f.controlNav.active(),v||n.slides.removeClass(i+\"active-slide\").eq(e).addClass(i+\"active-slide\"),n.atEnd=0===e||e===n.last,n.vars.directionNav&&f.directionNav.update(),e===n.last&&(n.vars.end(n),n.vars.animationLoop||n.pause()),p)s?(n.slides.eq(n.currentSlide).css({opacity:0,zIndex:1}),n.slides.eq(e).css({opacity:1,zIndex:2}),n.wrapup(c)):(n.slides.eq(n.currentSlide).css({zIndex:1}).animate({opacity:0},n.vars.animationSpeed,n.vars.easing),n.slides.eq(e).css({zIndex:2}).animate({opacity:1},n.vars.animationSpeed,n.vars.easing,n.wrapup));else{var c=d?n.slides.filter(\":first\").height():n.computedW,g,h,S;v?(g=n.vars.itemMargin,S=(n.itemW+g)*n.move*n.animatingTo,h=S>n.limit&&1!==n.visible?n.limit:S):h=0===n.currentSlide&&e===n.count-1&&n.vars.animationLoop&&\"next\"!==n.direction?u?(n.count+n.cloneOffset)*c:0:n.currentSlide===n.last&&0===e&&n.vars.animationLoop&&\"prev\"!==n.direction?u?0:(n.count+1)*c:u?(n.count-1-e+n.cloneOffset)*c:(e+n.cloneOffset)*c,n.setProps(h,\"\",n.vars.animationSpeed),n.transitions?(n.vars.animationLoop&&n.atEnd||(n.animating=!1,n.currentSlide=n.animatingTo),n.container.unbind(\"webkitTransitionEnd transitionend\"),n.container.bind(\"webkitTransitionEnd transitionend\",function(){clearTimeout(n.ensureAnimationEnd),n.wrapup(c)}),clearTimeout(n.ensureAnimationEnd),n.ensureAnimationEnd=setTimeout(function(){n.wrapup(c)},n.vars.animationSpeed+100)):n.container.animate(n.args,n.vars.animationSpeed,n.vars.easing,function(){n.wrapup(c)})}n.vars.smoothHeight&&f.smoothHeight(n.vars.animationSpeed)}},n.wrapup=function(e){p||v||(0===n.currentSlide&&n.animatingTo===n.last&&n.vars.animationLoop?n.setProps(e,\"jumpEnd\"):n.currentSlide===n.last&&0===n.animatingTo&&n.vars.animationLoop&&n.setProps(e,\"jumpStart\")),n.animating=!1,n.currentSlide=n.animatingTo,n.vars.after(n)},n.animateSlides=function(){!n.animating&&e&&n.flexAnimate(n.getTarget(\"next\"))},n.pause=function(){clearInterval(n.animatedSlides),n.animatedSlides=null,n.playing=!1,n.vars.pausePlay&&f.pausePlay.update(\"play\"),n.syncExists&&f.sync(\"pause\")},n.play=function(){n.playing&&clearInterval(n.animatedSlides),n.animatedSlides=n.animatedSlides||setInterval(n.animateSlides,n.vars.slideshowSpeed),n.started=n.playing=!0,n.vars.pausePlay&&f.pausePlay.update(\"pause\"),n.syncExists&&f.sync(\"play\")},n.stop=function(){n.pause(),n.stopped=!0},n.canAdvance=function(e,t){var a=m?n.pagingCount-1:n.last;return!!t||(!(!m||n.currentItem!==n.count-1||0!==e||\"prev\"!==n.direction)||(!m||0!==n.currentItem||e!==n.pagingCount-1||\"next\"===n.direction)&&(!(e===n.currentSlide&&!m)&&(!!n.vars.animationLoop||(!n.atEnd||0!==n.currentSlide||e!==a||\"next\"===n.direction)&&(!n.atEnd||n.currentSlide!==a||0!==e||\"next\"!==n.direction))))},n.getTarget=function(e){return n.direction=e,\"next\"===e?n.currentSlide===n.last?0:n.currentSlide+1:0===n.currentSlide?n.last:n.currentSlide-1},n.setProps=function(e,t,a){var i=function(){var a=e||(n.itemW+n.vars.itemMargin)*n.move*n.animatingTo;return function(){if(v)return\"setTouch\"===t?e:u&&n.animatingTo===n.last?0:u?n.limit-(n.itemW+n.vars.itemMargin)*n.move*n.animatingTo:n.animatingTo===n.last?n.limit:a;switch(t){case\"setTotal\":return u?(n.count-1-n.currentSlide+n.cloneOffset)*e:(n.currentSlide+n.cloneOffset)*e;case\"setTouch\":return e;case\"jumpEnd\":return u?e:n.count*e;case\"jumpStart\":return u?n.count*e:e;default:return e}}()*(n.vars.rtl?1:-1)+\"px\"}();n.transitions&&(i=n.isFirefox?d?\"translate3d(0,\"+i+\",0)\":\"translate3d(\"+parseInt(i)+\"px,0,0)\":d?\"translate3d(0,\"+i+\",0)\":\"translate3d(\"+(n.vars.rtl?-1:1)*parseInt(i)+\"px,0,0)\",a=void 0!==a?a/1e3+\"s\":\"0s\",n.container.css(\"-\"+n.pfx+\"-transition-duration\",a),n.container.css(\"transition-duration\",a)),n.args[n.prop]=i,(n.transitions||void 0===a)&&n.container.css(n.args),n.container.css(\"transform\",i)},n.setup=function(e){if(p)n.vars.rtl?n.slides.css({width:\"100%\",float:\"right\",marginLeft:\"-100%\",position:\"relative\"}):n.slides.css({width:\"100%\",float:\"left\",marginRight:\"-100%\",position:\"relative\"}),\"init\"===e&&(s?n.slides.css({opacity:0,display:\"block\",webkitTransition:\"opacity \"+n.vars.animationSpeed/1e3+\"s ease\",zIndex:1}).eq(n.currentSlide).css({opacity:1,zIndex:2}):0==n.vars.fadeFirstSlide?n.slides.css({opacity:0,display:\"block\",zIndex:1}).eq(n.currentSlide).css({zIndex:2}).css({opacity:1}):n.slides.css({opacity:0,display:\"block\",zIndex:1}).eq(n.currentSlide).css({zIndex:2}).animate({opacity:1},n.vars.animationSpeed,n.vars.easing)),n.vars.smoothHeight&&f.smoothHeight();else{var t,a;\"init\"===e&&(n.viewport=$('<div class=\"'+i+'viewport\"></div>').css({overflow:\"hidden\",position:\"relative\"}).appendTo(n).append(n.container),n.cloneCount=0,n.cloneOffset=0,u&&(a=$.makeArray(n.slides).reverse(),n.slides=$(a),n.container.empty().append(n.slides))),n.vars.animationLoop&&!v&&(n.cloneCount=2,n.cloneOffset=1,\"init\"!==e&&n.container.find(\".clone\").remove(),n.container.append(f.uniqueID(n.slides.first().clone().addClass(\"clone\")).attr(\"aria-hidden\",\"true\")).prepend(f.uniqueID(n.slides.last().clone().addClass(\"clone\")).attr(\"aria-hidden\",\"true\"))),n.newSlides=$(n.vars.selector,n),t=u?n.count-1-n.currentSlide+n.cloneOffset:n.currentSlide+n.cloneOffset,d&&!v?(n.container.height(200*(n.count+n.cloneCount)+\"%\").css(\"position\",\"absolute\").width(\"100%\"),setTimeout(function(){n.newSlides.css({display:\"block\"}),n.doMath(),n.viewport.height(n.h),n.setProps(t*n.h,\"init\")},\"init\"===e?100:0)):(n.container.width(200*(n.count+n.cloneCount)+\"%\"),n.setProps(t*n.computedW,\"init\"),setTimeout(function(){n.doMath(),n.vars.rtl&&n.isFirefox?n.newSlides.css({width:n.computedW,marginRight:n.computedM,float:\"right\",display:\"block\"}):n.newSlides.css({width:n.computedW,marginRight:n.computedM,float:\"left\",display:\"block\"}),n.vars.smoothHeight&&f.smoothHeight()},\"init\"===e?100:0))}v||n.slides.removeClass(i+\"active-slide\").eq(n.currentSlide).addClass(i+\"active-slide\"),n.vars.init(n)},n.doMath=function(){var e=n.slides.first(),t=n.vars.itemMargin,a=n.vars.minItems,i=n.vars.maxItems;n.w=void 0===n.viewport?n.width():n.viewport.width(),n.isFirefox&&(n.w=n.width()),n.h=e.height(),n.boxPadding=e.outerWidth()-e.width(),v?(n.itemT=n.vars.itemWidth+t,n.itemM=t,n.minW=a?a*n.itemT:n.w,n.maxW=i?i*n.itemT-t:n.w,n.itemW=n.minW>n.w?(n.w-t*(a-1))/a:n.maxW<n.w?(n.w-t*(i-1))/i:n.vars.itemWidth>n.w?n.w:n.vars.itemWidth,n.visible=Math.floor(n.w/n.itemW),n.move=n.vars.move>0&&n.vars.move<n.visible?n.vars.move:n.visible,n.pagingCount=Math.ceil((n.count-n.visible)/n.move+1),n.last=n.pagingCount-1,n.limit=1===n.pagingCount?0:n.vars.itemWidth>n.w?n.itemW*(n.count-1)+t*(n.count-1):(n.itemW+t)*n.count-n.w-t):(n.itemW=n.w,n.itemM=t,n.pagingCount=n.count,n.last=n.count-1),n.computedW=n.itemW-n.boxPadding,n.computedM=n.itemM},n.update=function(e,t){n.doMath(),v||(e<n.currentSlide?n.currentSlide+=1:e<=n.currentSlide&&0!==e&&(n.currentSlide-=1),n.animatingTo=n.currentSlide),n.vars.controlNav&&!n.manualControls&&(\"add\"===t&&!v||n.pagingCount>n.controlNav.length?f.controlNav.update(\"add\"):(\"remove\"===t&&!v||n.pagingCount<n.controlNav.length)&&(v&&n.currentSlide>n.last&&(n.currentSlide-=1,n.animatingTo-=1),f.controlNav.update(\"remove\",n.last))),n.vars.directionNav&&f.directionNav.update()},n.addSlide=function(e,t){var a=$(e);n.count+=1,n.last=n.count-1,d&&u?void 0!==t?n.slides.eq(n.count-t).after(a):n.container.prepend(a):void 0!==t?n.slides.eq(t).before(a):n.container.append(a),n.update(t,\"add\"),n.slides=$(n.vars.selector+\":not(.clone)\",n),n.setup(),n.vars.added(n)},n.removeSlide=function(e){var t=isNaN(e)?n.slides.index($(e)):e;n.count-=1,n.last=n.count-1,isNaN(e)?$(e,n.slides).remove():d&&u?n.slides.eq(n.last).remove():n.slides.eq(e).remove(),n.doMath(),n.update(t,\"remove\"),n.slides=$(n.vars.selector+\":not(.clone)\",n),n.setup(),n.vars.removed(n)},f.init()},$(window).blur(function(t){e=!1}).focus(function(t){e=!0}),$.flexslider.defaults={namespace:\"flex-\",selector:\".slides > li\",animation:\"fade\",easing:\"swing\",direction:\"horizontal\",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7e3,animationSpeed:600,initDelay:0,randomize:!1,fadeFirstSlide:!0,thumbCaptions:!1,pauseOnAction:!0,pauseOnHover:!1,pauseInvisible:!0,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:\"Previous\",nextText:\"Next\",keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:\"Pause\",playText:\"Play\",controlsContainer:\"\",manualControls:\"\",customDirectionNav:\"\",sync:\"\",asNavFor:\"\",itemWidth:0,itemMargin:0,minItems:1,maxItems:0,move:0,allowOneSlide:!0,isFirefox:!1,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){},init:function(){},rtl:!1},$.fn.flexslider=function(e){if(void 0===e&&(e={}),\"object\"==typeof e)return this.each(function(){var t=$(this),a=e.selector?e.selector:\".slides > li\",n=t.find(a);1===n.length&&!1===e.allowOneSlide||0===n.length?(n.fadeIn(400),e.start&&e.start(t)):void 0===t.data(\"flexslider\")&&new $.flexslider(this,e)});var t=$(this).data(\"flexslider\");switch(e){case\"play\":t.play();break;case\"pause\":t.pause();break;case\"stop\":t.stop();break;case\"next\":t.flexAnimate(t.getTarget(\"next\"),!0);break;case\"prev\":case\"previous\":t.flexAnimate(t.getTarget(\"prev\"),!0);break;default:\"number\"==typeof e&&t.flexAnimate(e,!0)}}}(jQuery);","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/** @type {<This, A extends readonly unknown[]>(arr: A, iterator: (this: This | void, value: A[number], index: number, arr: A) => void, receiver: This | undefined) => void} */\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            if (receiver == null) {\n                iterator(array[i], i, array);\n            } else {\n                iterator.call(receiver, array[i], i, array);\n            }\n        }\n    }\n};\n\n/** @type {<This, S extends string>(string: S, iterator: (this: This | void, value: S[number], index: number, string: S) => void, receiver: This | undefined) => void} */\nvar forEachString = function forEachString(string, iterator, receiver) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        if (receiver == null) {\n            iterator(string.charAt(i), i, string);\n        } else {\n            iterator.call(receiver, string.charAt(i), i, string);\n        }\n    }\n};\n\n/** @type {<This, O>(obj: O, iterator: (this: This | void, value: O[keyof O], index: keyof O, obj: O) => void, receiver: This | undefined) => void} */\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            if (receiver == null) {\n                iterator(object[k], k, object);\n            } else {\n                iterator.call(receiver, object[k], k, object);\n            }\n        }\n    }\n};\n\n/** @type {(x: unknown) => x is readonly unknown[]} */\nfunction isArray(x) {\n    return toStr.call(x) === '[object Array]';\n}\n\n/** @type {import('.')._internal} */\nmodule.exports = function forEach(list, iterator, thisArg) {\n    if (!isCallable(iterator)) {\n        throw new TypeError('iterator must be a function');\n    }\n\n    var receiver;\n    if (arguments.length >= 3) {\n        receiver = thisArg;\n    }\n\n    if (isArray(list)) {\n        forEachArray(list, iterator, receiver);\n    } else if (typeof list === 'string') {\n        forEachString(list, iterator, receiver);\n    } else {\n        forEachObject(list, iterator, receiver);\n    }\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n// eslint-disable-next-line no-extra-parens, no-empty-function\nconst cached = /** @type {GeneratorFunctionConstructor} */ (function* () {}.constructor);\n\n/** @type {import('.')} */\nmodule.exports = () => cached;\n\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","/*\r\nBreaks a Javascript string into individual user-perceived \"characters\" \r\ncalled extended grapheme clusters by implementing the Unicode UAX-29 standard, version 10.0.0\r\n\r\nUsage:\r\nvar splitter = new GraphemeSplitter();\r\n//returns an array of strings, one string for each grapheme cluster\r\nvar graphemes = splitter.splitGraphemes(string); \r\n\r\n*/\r\nfunction GraphemeSplitter(){\r\n\tvar CR = 0,\r\n\t\tLF = 1,\r\n\t\tControl = 2,\r\n\t\tExtend = 3,\r\n\t\tRegional_Indicator = 4,\r\n\t\tSpacingMark = 5,\r\n\t\tL = 6,\r\n\t\tV = 7,\r\n\t\tT = 8,\r\n\t\tLV = 9,\r\n\t\tLVT = 10,\r\n\t\tOther = 11,\r\n\t\tPrepend = 12,\r\n\t\tE_Base = 13,\r\n\t\tE_Modifier = 14,\r\n\t\tZWJ = 15,\r\n\t\tGlue_After_Zwj = 16,\r\n\t\tE_Base_GAZ = 17;\r\n\t\t\r\n\t// BreakTypes\r\n\tvar NotBreak = 0,\r\n\t\tBreakStart = 1,\r\n\t\tBreak = 2,\r\n\t\tBreakLastRegional = 3,\r\n\t\tBreakPenultimateRegional = 4;\r\n\t\t\r\n\tfunction isSurrogate(str, pos) {\r\n\t\treturn  0xd800 <= str.charCodeAt(pos) && str.charCodeAt(pos) <= 0xdbff && \r\n\t\t\t\t0xdc00 <= str.charCodeAt(pos + 1) && str.charCodeAt(pos + 1) <= 0xdfff;\r\n\t}\r\n\t\t\r\n\t// Private function, gets a Unicode code point from a JavaScript UTF-16 string\r\n\t// handling surrogate pairs appropriately\r\n\tfunction codePointAt(str, idx){\r\n\t\tif(idx === undefined){\r\n\t\t\tidx = 0;\r\n\t\t}\r\n\t\tvar code = str.charCodeAt(idx);\r\n\r\n\t\t// if a high surrogate\r\n\t\tif (0xD800 <= code && code <= 0xDBFF && \r\n\t\t\tidx < str.length - 1){\r\n\t\t\tvar hi = code;\r\n\t\t\tvar low = str.charCodeAt(idx + 1);\r\n\t\t\tif (0xDC00 <= low && low <= 0xDFFF){\r\n\t\t\t\treturn ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\r\n\t\t\t}\r\n\t\t\treturn hi;\r\n\t\t}\r\n\t\t\r\n\t\t// if a low surrogate\r\n\t\tif (0xDC00 <= code && code <= 0xDFFF &&\r\n\t\t\tidx >= 1){\r\n\t\t\tvar hi = str.charCodeAt(idx - 1);\r\n\t\t\tvar low = code;\r\n\t\t\tif (0xD800 <= hi && hi <= 0xDBFF){\r\n\t\t\t\treturn ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\r\n\t\t\t}\r\n\t\t\treturn low;\r\n\t\t}\r\n\t\t\r\n\t\t//just return the char if an unmatched surrogate half or a \r\n\t\t//single-char codepoint\r\n\t\treturn code;\r\n\t}\r\n\t\r\n\t// Private function, returns whether a break is allowed between the \r\n\t// two given grapheme breaking classes\r\n\tfunction shouldBreak(start, mid, end){\r\n\t\tvar all = [start].concat(mid).concat([end]);\r\n\t\tvar previous = all[all.length - 2]\r\n\t\tvar next = end\r\n\t\t\r\n\t\t// Lookahead termintor for:\r\n\t\t// GB10. (E_Base | EBG) Extend* ?\tE_Modifier\r\n\t\tvar eModifierIndex = all.lastIndexOf(E_Modifier)\r\n\t\tif(eModifierIndex > 1 &&\r\n\t\t\tall.slice(1, eModifierIndex).every(function(c){return c == Extend}) &&\r\n\t\t\t[Extend, E_Base, E_Base_GAZ].indexOf(start) == -1){\r\n\t\t\treturn Break\r\n\t\t}\r\n\r\n\t\t// Lookahead termintor for:\r\n\t\t// GB12. ^ (RI RI)* RI\t?\tRI\r\n\t\t// GB13. [^RI] (RI RI)* RI\t?\tRI\r\n\t\tvar rIIndex = all.lastIndexOf(Regional_Indicator)\r\n\t\tif(rIIndex > 0 &&\r\n\t\t\tall.slice(1, rIIndex).every(function(c){return c == Regional_Indicator}) &&\r\n\t\t\t[Prepend, Regional_Indicator].indexOf(previous) == -1) { \r\n\t\t\tif(all.filter(function(c){return c == Regional_Indicator}).length % 2 == 1) {\r\n\t\t\t\treturn BreakLastRegional\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn BreakPenultimateRegional\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// GB3. CR X LF\r\n\t\tif(previous == CR && next == LF){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB4. (Control|CR|LF) ÷\r\n\t\telse if(previous == Control || previous == CR || previous == LF){\r\n\t\t\tif(next == E_Modifier && mid.every(function(c){return c == Extend})){\r\n\t\t\t\treturn Break\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn BreakStart\r\n\t\t\t}\r\n\t\t}\r\n\t\t// GB5. ÷ (Control|CR|LF)\r\n\t\telse if(next == Control || next == CR || next == LF){\r\n\t\t\treturn BreakStart;\r\n\t\t}\r\n\t\t// GB6. L X (L|V|LV|LVT)\r\n\t\telse if(previous == L && \r\n\t\t\t(next == L || next == V || next == LV || next == LVT)){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB7. (LV|V) X (V|T)\r\n\t\telse if((previous == LV || previous == V) && \r\n\t\t\t(next == V || next == T)){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB8. (LVT|T) X (T)\r\n\t\telse if((previous == LVT || previous == T) && \r\n\t\t\tnext == T){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB9. X (Extend|ZWJ)\r\n\t\telse if (next == Extend || next == ZWJ){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB9a. X SpacingMark\r\n\t\telse if(next == SpacingMark){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t// GB9b. Prepend X\r\n\t\telse if (previous == Prepend){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t\r\n\t\t// GB10. (E_Base | EBG) Extend* ?\tE_Modifier\r\n\t\tvar previousNonExtendIndex = all.indexOf(Extend) != -1 ? all.lastIndexOf(Extend) - 1 : all.length - 2;\r\n\t\tif([E_Base, E_Base_GAZ].indexOf(all[previousNonExtendIndex]) != -1 &&\r\n\t\t\tall.slice(previousNonExtendIndex + 1, -1).every(function(c){return c == Extend}) &&\r\n\t\t\tnext == E_Modifier){\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\t\t\r\n\t\t// GB11. ZWJ ? (Glue_After_Zwj | EBG)\r\n\t\tif(previous == ZWJ && [Glue_After_Zwj, E_Base_GAZ].indexOf(next) != -1) {\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\r\n\t\t// GB12. ^ (RI RI)* RI ? RI\r\n\t\t// GB13. [^RI] (RI RI)* RI ? RI\r\n\t\tif(mid.indexOf(Regional_Indicator) != -1) { \r\n\t\t\treturn Break;\r\n\t\t}\r\n\t\tif(previous == Regional_Indicator && next == Regional_Indicator) {\r\n\t\t\treturn NotBreak;\r\n\t\t}\r\n\r\n\t\t// GB999. Any ? Any\r\n\t\treturn BreakStart;\r\n\t}\r\n\t\r\n\t// Returns the next grapheme break in the string after the given index\r\n\tthis.nextBreak = function(string, index){\r\n\t\tif(index === undefined){\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\t\tif(index < 0){\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif(index >= string.length - 1){\r\n\t\t\treturn string.length;\r\n\t\t}\r\n\t\tvar prev = getGraphemeBreakProperty(codePointAt(string, index));\r\n\t\tvar mid = []\r\n\t\tfor (var i = index + 1; i < string.length; i++) {\r\n\t\t\t// check for already processed low surrogates\r\n\t\t\tif(isSurrogate(string, i - 1)){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\r\n\t\t\tvar next = getGraphemeBreakProperty(codePointAt(string, i));\r\n\t\t\tif(shouldBreak(prev, mid, next)){\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmid.push(next);\r\n\t\t}\r\n\t\treturn string.length;\r\n\t};\r\n\t\r\n\t// Breaks the given string into an array of grapheme cluster strings\r\n\tthis.splitGraphemes = function(str){\r\n\t\tvar res = [];\r\n\t\tvar index = 0;\r\n\t\tvar brk;\r\n\t\twhile((brk = this.nextBreak(str, index)) < str.length){\r\n\t\t\tres.push(str.slice(index, brk));\r\n\t\t\tindex = brk;\r\n\t\t}\r\n\t\tif(index < str.length){\r\n\t\t\tres.push(str.slice(index));\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\t// Returns the iterator of grapheme clusters there are in the given string\r\n\tthis.iterateGraphemes = function(str) {\r\n\t\tvar index = 0;\r\n\t\tvar res = {\r\n\t\t\tnext: (function() {\r\n\t\t\t\tvar value;\r\n\t\t\t\tvar brk;\r\n\t\t\t\tif ((brk = this.nextBreak(str, index)) < str.length) {\r\n\t\t\t\t\tvalue = str.slice(index, brk);\r\n\t\t\t\t\tindex = brk;\r\n\t\t\t\t\treturn { value: value, done: false };\r\n\t\t\t\t}\r\n\t\t\t\tif (index < str.length) {\r\n\t\t\t\t\tvalue = str.slice(index);\r\n\t\t\t\t\tindex = str.length;\r\n\t\t\t\t\treturn { value: value, done: false };\r\n\t\t\t\t}\r\n\t\t\t\treturn { value: undefined, done: true };\r\n\t\t\t}).bind(this)\r\n\t\t};\r\n\t\t// ES2015 @@iterator method (iterable) for spread syntax and for...of statement\r\n\t\tif (typeof Symbol !== 'undefined' && Symbol.iterator) {\r\n\t\t\tres[Symbol.iterator] = function() {return res};\r\n\t\t}\r\n\t\treturn res;\r\n\t};\r\n\r\n\t// Returns the number of grapheme clusters there are in the given string\r\n\tthis.countGraphemes = function(str){\r\n\t\tvar count = 0;\r\n\t\tvar index = 0;\r\n\t\tvar brk;\r\n\t\twhile((brk = this.nextBreak(str, index)) < str.length){\r\n\t\t\tindex = brk;\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\tif(index < str.length){\r\n\t\t\tcount++;\r\n\t\t}\r\n\t\treturn count;\r\n\t};\r\n\t\r\n\t//given a Unicode code point, determines this symbol's grapheme break property\r\n\tfunction getGraphemeBreakProperty(code){\r\n\t\t\r\n\t\t//grapheme break property for Unicode 10.0.0, \r\n\t\t//taken from http://www.unicode.org/Public/10.0.0/ucd/auxiliary/GraphemeBreakProperty.txt\r\n\t\t//and adapted to JavaScript rules\r\n\t\t\r\n\t\tif(\t\t\r\n\t\t(0x0600 <= code && code <= 0x0605) || // Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\r\n\t\t0x06DD == code || // Cf       ARABIC END OF AYAH\r\n\t\t0x070F == code || // Cf       SYRIAC ABBREVIATION MARK\r\n\t\t0x08E2 == code || // Cf       ARABIC DISPUTED END OF AYAH\r\n\t\t0x0D4E == code || // Lo       MALAYALAM LETTER DOT REPH\r\n\t\t0x110BD == code || // Cf       KAITHI NUMBER SIGN\r\n\t\t(0x111C2 <= code && code <= 0x111C3) || // Lo   [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA\r\n\t\t0x11A3A == code || // Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\r\n\t\t(0x11A86 <= code && code <= 0x11A89) || // Lo   [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA\r\n\t\t0x11D46 == code // Lo       MASARAM GONDI REPHA\r\n\t\t){\r\n\t\t\treturn Prepend;\r\n\t\t}\r\n\t\tif(\r\n\t\t0x000D == code // Cc       <control-000D>\r\n\t\t){\r\n\t\t\treturn CR;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0x000A == code // Cc       <control-000A>\r\n\t\t){\r\n\t\t\treturn LF;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x0000 <= code && code <= 0x0009) || // Cc  [10] <control-0000>..<control-0009>\r\n\t\t(0x000B <= code && code <= 0x000C) || // Cc   [2] <control-000B>..<control-000C>\r\n\t\t(0x000E <= code && code <= 0x001F) || // Cc  [18] <control-000E>..<control-001F>\r\n\t\t(0x007F <= code && code <= 0x009F) || // Cc  [33] <control-007F>..<control-009F>\r\n\t\t0x00AD == code || // Cf       SOFT HYPHEN\r\n\t\t0x061C == code || // Cf       ARABIC LETTER MARK\r\n\t\r\n\t\t0x180E == code || // Cf       MONGOLIAN VOWEL SEPARATOR\r\n\t\t0x200B == code || // Cf       ZERO WIDTH SPACE\r\n\t\t(0x200E <= code && code <= 0x200F) || // Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\r\n\t\t0x2028 == code || // Zl       LINE SEPARATOR\r\n\t\t0x2029 == code || // Zp       PARAGRAPH SEPARATOR\r\n\t\t(0x202A <= code && code <= 0x202E) || // Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\r\n\t\t(0x2060 <= code && code <= 0x2064) || // Cf   [5] WORD JOINER..INVISIBLE PLUS\r\n\t\t0x2065 == code || // Cn       <reserved-2065>\r\n\t\t(0x2066 <= code && code <= 0x206F) || // Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\r\n\t\t(0xD800 <= code && code <= 0xDFFF) || // Cs [2048] <surrogate-D800>..<surrogate-DFFF>\r\n\t\t0xFEFF == code || // Cf       ZERO WIDTH NO-BREAK SPACE\r\n\t\t(0xFFF0 <= code && code <= 0xFFF8) || // Cn   [9] <reserved-FFF0>..<reserved-FFF8>\r\n\t\t(0xFFF9 <= code && code <= 0xFFFB) || // Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\r\n\t\t(0x1BCA0 <= code && code <= 0x1BCA3) || // Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\r\n\t\t(0x1D173 <= code && code <= 0x1D17A) || // Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\r\n\t\t0xE0000 == code || // Cn       <reserved-E0000>\r\n\t\t0xE0001 == code || // Cf       LANGUAGE TAG\r\n\t\t(0xE0002 <= code && code <= 0xE001F) || // Cn  [30] <reserved-E0002>..<reserved-E001F>\r\n\t\t(0xE0080 <= code && code <= 0xE00FF) || // Cn [128] <reserved-E0080>..<reserved-E00FF>\r\n\t\t(0xE01F0 <= code && code <= 0xE0FFF) // Cn [3600] <reserved-E01F0>..<reserved-E0FFF>\r\n\t\t){\r\n\t\t\treturn Control;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x0300 <= code && code <= 0x036F) || // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\r\n\t\t(0x0483 <= code && code <= 0x0487) || // Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\r\n\t\t(0x0488 <= code && code <= 0x0489) || // Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\r\n\t\t(0x0591 <= code && code <= 0x05BD) || // Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\r\n\t\t0x05BF == code || // Mn       HEBREW POINT RAFE\r\n\t\t(0x05C1 <= code && code <= 0x05C2) || // Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\r\n\t\t(0x05C4 <= code && code <= 0x05C5) || // Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\r\n\t\t0x05C7 == code || // Mn       HEBREW POINT QAMATS QATAN\r\n\t\t(0x0610 <= code && code <= 0x061A) || // Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\r\n\t\t(0x064B <= code && code <= 0x065F) || // Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\r\n\t\t0x0670 == code || // Mn       ARABIC LETTER SUPERSCRIPT ALEF\r\n\t\t(0x06D6 <= code && code <= 0x06DC) || // Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\r\n\t\t(0x06DF <= code && code <= 0x06E4) || // Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\r\n\t\t(0x06E7 <= code && code <= 0x06E8) || // Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\r\n\t\t(0x06EA <= code && code <= 0x06ED) || // Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\r\n\t\t0x0711 == code || // Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\r\n\t\t(0x0730 <= code && code <= 0x074A) || // Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\r\n\t\t(0x07A6 <= code && code <= 0x07B0) || // Mn  [11] THAANA ABAFILI..THAANA SUKUN\r\n\t\t(0x07EB <= code && code <= 0x07F3) || // Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\r\n\t\t(0x0816 <= code && code <= 0x0819) || // Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\r\n\t\t(0x081B <= code && code <= 0x0823) || // Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\r\n\t\t(0x0825 <= code && code <= 0x0827) || // Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\r\n\t\t(0x0829 <= code && code <= 0x082D) || // Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\r\n\t\t(0x0859 <= code && code <= 0x085B) || // Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\r\n\t\t(0x08D4 <= code && code <= 0x08E1) || // Mn  [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA\r\n\t\t(0x08E3 <= code && code <= 0x0902) || // Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\r\n\t\t0x093A == code || // Mn       DEVANAGARI VOWEL SIGN OE\r\n\t\t0x093C == code || // Mn       DEVANAGARI SIGN NUKTA\r\n\t\t(0x0941 <= code && code <= 0x0948) || // Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\r\n\t\t0x094D == code || // Mn       DEVANAGARI SIGN VIRAMA\r\n\t\t(0x0951 <= code && code <= 0x0957) || // Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\r\n\t\t(0x0962 <= code && code <= 0x0963) || // Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\r\n\t\t0x0981 == code || // Mn       BENGALI SIGN CANDRABINDU\r\n\t\t0x09BC == code || // Mn       BENGALI SIGN NUKTA\r\n\t\t0x09BE == code || // Mc       BENGALI VOWEL SIGN AA\r\n\t\t(0x09C1 <= code && code <= 0x09C4) || // Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\r\n\t\t0x09CD == code || // Mn       BENGALI SIGN VIRAMA\r\n\t\t0x09D7 == code || // Mc       BENGALI AU LENGTH MARK\r\n\t\t(0x09E2 <= code && code <= 0x09E3) || // Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\r\n\t\t(0x0A01 <= code && code <= 0x0A02) || // Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\r\n\t\t0x0A3C == code || // Mn       GURMUKHI SIGN NUKTA\r\n\t\t(0x0A41 <= code && code <= 0x0A42) || // Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\r\n\t\t(0x0A47 <= code && code <= 0x0A48) || // Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\r\n\t\t(0x0A4B <= code && code <= 0x0A4D) || // Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\r\n\t\t0x0A51 == code || // Mn       GURMUKHI SIGN UDAAT\r\n\t\t(0x0A70 <= code && code <= 0x0A71) || // Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\r\n\t\t0x0A75 == code || // Mn       GURMUKHI SIGN YAKASH\r\n\t\t(0x0A81 <= code && code <= 0x0A82) || // Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\r\n\t\t0x0ABC == code || // Mn       GUJARATI SIGN NUKTA\r\n\t\t(0x0AC1 <= code && code <= 0x0AC5) || // Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\r\n\t\t(0x0AC7 <= code && code <= 0x0AC8) || // Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\r\n\t\t0x0ACD == code || // Mn       GUJARATI SIGN VIRAMA\r\n\t\t(0x0AE2 <= code && code <= 0x0AE3) || // Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\r\n\t\t(0x0AFA <= code && code <= 0x0AFF) || // Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\r\n\t\t0x0B01 == code || // Mn       ORIYA SIGN CANDRABINDU\r\n\t\t0x0B3C == code || // Mn       ORIYA SIGN NUKTA\r\n\t\t0x0B3E == code || // Mc       ORIYA VOWEL SIGN AA\r\n\t\t0x0B3F == code || // Mn       ORIYA VOWEL SIGN I\r\n\t\t(0x0B41 <= code && code <= 0x0B44) || // Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\r\n\t\t0x0B4D == code || // Mn       ORIYA SIGN VIRAMA\r\n\t\t0x0B56 == code || // Mn       ORIYA AI LENGTH MARK\r\n\t\t0x0B57 == code || // Mc       ORIYA AU LENGTH MARK\r\n\t\t(0x0B62 <= code && code <= 0x0B63) || // Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\r\n\t\t0x0B82 == code || // Mn       TAMIL SIGN ANUSVARA\r\n\t\t0x0BBE == code || // Mc       TAMIL VOWEL SIGN AA\r\n\t\t0x0BC0 == code || // Mn       TAMIL VOWEL SIGN II\r\n\t\t0x0BCD == code || // Mn       TAMIL SIGN VIRAMA\r\n\t\t0x0BD7 == code || // Mc       TAMIL AU LENGTH MARK\r\n\t\t0x0C00 == code || // Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\r\n\t\t(0x0C3E <= code && code <= 0x0C40) || // Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\r\n\t\t(0x0C46 <= code && code <= 0x0C48) || // Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\r\n\t\t(0x0C4A <= code && code <= 0x0C4D) || // Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\r\n\t\t(0x0C55 <= code && code <= 0x0C56) || // Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\r\n\t\t(0x0C62 <= code && code <= 0x0C63) || // Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\r\n\t\t0x0C81 == code || // Mn       KANNADA SIGN CANDRABINDU\r\n\t\t0x0CBC == code || // Mn       KANNADA SIGN NUKTA\r\n\t\t0x0CBF == code || // Mn       KANNADA VOWEL SIGN I\r\n\t\t0x0CC2 == code || // Mc       KANNADA VOWEL SIGN UU\r\n\t\t0x0CC6 == code || // Mn       KANNADA VOWEL SIGN E\r\n\t\t(0x0CCC <= code && code <= 0x0CCD) || // Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\r\n\t\t(0x0CD5 <= code && code <= 0x0CD6) || // Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\r\n\t\t(0x0CE2 <= code && code <= 0x0CE3) || // Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\r\n\t\t(0x0D00 <= code && code <= 0x0D01) || // Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\r\n\t\t(0x0D3B <= code && code <= 0x0D3C) || // Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\r\n\t\t0x0D3E == code || // Mc       MALAYALAM VOWEL SIGN AA\r\n\t\t(0x0D41 <= code && code <= 0x0D44) || // Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\r\n\t\t0x0D4D == code || // Mn       MALAYALAM SIGN VIRAMA\r\n\t\t0x0D57 == code || // Mc       MALAYALAM AU LENGTH MARK\r\n\t\t(0x0D62 <= code && code <= 0x0D63) || // Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\r\n\t\t0x0DCA == code || // Mn       SINHALA SIGN AL-LAKUNA\r\n\t\t0x0DCF == code || // Mc       SINHALA VOWEL SIGN AELA-PILLA\r\n\t\t(0x0DD2 <= code && code <= 0x0DD4) || // Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\r\n\t\t0x0DD6 == code || // Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\r\n\t\t0x0DDF == code || // Mc       SINHALA VOWEL SIGN GAYANUKITTA\r\n\t\t0x0E31 == code || // Mn       THAI CHARACTER MAI HAN-AKAT\r\n\t\t(0x0E34 <= code && code <= 0x0E3A) || // Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\r\n\t\t(0x0E47 <= code && code <= 0x0E4E) || // Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\r\n\t\t0x0EB1 == code || // Mn       LAO VOWEL SIGN MAI KAN\r\n\t\t(0x0EB4 <= code && code <= 0x0EB9) || // Mn   [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU\r\n\t\t(0x0EBB <= code && code <= 0x0EBC) || // Mn   [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO\r\n\t\t(0x0EC8 <= code && code <= 0x0ECD) || // Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA\r\n\t\t(0x0F18 <= code && code <= 0x0F19) || // Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\r\n\t\t0x0F35 == code || // Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\r\n\t\t0x0F37 == code || // Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\r\n\t\t0x0F39 == code || // Mn       TIBETAN MARK TSA -PHRU\r\n\t\t(0x0F71 <= code && code <= 0x0F7E) || // Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\r\n\t\t(0x0F80 <= code && code <= 0x0F84) || // Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\r\n\t\t(0x0F86 <= code && code <= 0x0F87) || // Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\r\n\t\t(0x0F8D <= code && code <= 0x0F97) || // Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\r\n\t\t(0x0F99 <= code && code <= 0x0FBC) || // Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\r\n\t\t0x0FC6 == code || // Mn       TIBETAN SYMBOL PADMA GDAN\r\n\t\t(0x102D <= code && code <= 0x1030) || // Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\r\n\t\t(0x1032 <= code && code <= 0x1037) || // Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\r\n\t\t(0x1039 <= code && code <= 0x103A) || // Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\r\n\t\t(0x103D <= code && code <= 0x103E) || // Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\r\n\t\t(0x1058 <= code && code <= 0x1059) || // Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\r\n\t\t(0x105E <= code && code <= 0x1060) || // Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\r\n\t\t(0x1071 <= code && code <= 0x1074) || // Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\r\n\t\t0x1082 == code || // Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\r\n\t\t(0x1085 <= code && code <= 0x1086) || // Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\r\n\t\t0x108D == code || // Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\r\n\t\t0x109D == code || // Mn       MYANMAR VOWEL SIGN AITON AI\r\n\t\t(0x135D <= code && code <= 0x135F) || // Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\r\n\t\t(0x1712 <= code && code <= 0x1714) || // Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\r\n\t\t(0x1732 <= code && code <= 0x1734) || // Mn   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD\r\n\t\t(0x1752 <= code && code <= 0x1753) || // Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\r\n\t\t(0x1772 <= code && code <= 0x1773) || // Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\r\n\t\t(0x17B4 <= code && code <= 0x17B5) || // Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\r\n\t\t(0x17B7 <= code && code <= 0x17BD) || // Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\r\n\t\t0x17C6 == code || // Mn       KHMER SIGN NIKAHIT\r\n\t\t(0x17C9 <= code && code <= 0x17D3) || // Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\r\n\t\t0x17DD == code || // Mn       KHMER SIGN ATTHACAN\r\n\t\t(0x180B <= code && code <= 0x180D) || // Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\r\n\t\t(0x1885 <= code && code <= 0x1886) || // Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\r\n\t\t0x18A9 == code || // Mn       MONGOLIAN LETTER ALI GALI DAGALGA\r\n\t\t(0x1920 <= code && code <= 0x1922) || // Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\r\n\t\t(0x1927 <= code && code <= 0x1928) || // Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\r\n\t\t0x1932 == code || // Mn       LIMBU SMALL LETTER ANUSVARA\r\n\t\t(0x1939 <= code && code <= 0x193B) || // Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\r\n\t\t(0x1A17 <= code && code <= 0x1A18) || // Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\r\n\t\t0x1A1B == code || // Mn       BUGINESE VOWEL SIGN AE\r\n\t\t0x1A56 == code || // Mn       TAI THAM CONSONANT SIGN MEDIAL LA\r\n\t\t(0x1A58 <= code && code <= 0x1A5E) || // Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\r\n\t\t0x1A60 == code || // Mn       TAI THAM SIGN SAKOT\r\n\t\t0x1A62 == code || // Mn       TAI THAM VOWEL SIGN MAI SAT\r\n\t\t(0x1A65 <= code && code <= 0x1A6C) || // Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\r\n\t\t(0x1A73 <= code && code <= 0x1A7C) || // Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\r\n\t\t0x1A7F == code || // Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\r\n\t\t(0x1AB0 <= code && code <= 0x1ABD) || // Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\r\n\t\t0x1ABE == code || // Me       COMBINING PARENTHESES OVERLAY\r\n\t\t(0x1B00 <= code && code <= 0x1B03) || // Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\r\n\t\t0x1B34 == code || // Mn       BALINESE SIGN REREKAN\r\n\t\t(0x1B36 <= code && code <= 0x1B3A) || // Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\r\n\t\t0x1B3C == code || // Mn       BALINESE VOWEL SIGN LA LENGA\r\n\t\t0x1B42 == code || // Mn       BALINESE VOWEL SIGN PEPET\r\n\t\t(0x1B6B <= code && code <= 0x1B73) || // Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\r\n\t\t(0x1B80 <= code && code <= 0x1B81) || // Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\r\n\t\t(0x1BA2 <= code && code <= 0x1BA5) || // Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\r\n\t\t(0x1BA8 <= code && code <= 0x1BA9) || // Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\r\n\t\t(0x1BAB <= code && code <= 0x1BAD) || // Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\r\n\t\t0x1BE6 == code || // Mn       BATAK SIGN TOMPI\r\n\t\t(0x1BE8 <= code && code <= 0x1BE9) || // Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\r\n\t\t0x1BED == code || // Mn       BATAK VOWEL SIGN KARO O\r\n\t\t(0x1BEF <= code && code <= 0x1BF1) || // Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\r\n\t\t(0x1C2C <= code && code <= 0x1C33) || // Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\r\n\t\t(0x1C36 <= code && code <= 0x1C37) || // Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\r\n\t\t(0x1CD0 <= code && code <= 0x1CD2) || // Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\r\n\t\t(0x1CD4 <= code && code <= 0x1CE0) || // Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\r\n\t\t(0x1CE2 <= code && code <= 0x1CE8) || // Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\r\n\t\t0x1CED == code || // Mn       VEDIC SIGN TIRYAK\r\n\t\t0x1CF4 == code || // Mn       VEDIC TONE CANDRA ABOVE\r\n\t\t(0x1CF8 <= code && code <= 0x1CF9) || // Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\r\n\t\t(0x1DC0 <= code && code <= 0x1DF9) || // Mn  [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW\r\n\t\t(0x1DFB <= code && code <= 0x1DFF) || // Mn   [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\r\n\t\t0x200C == code || // Cf       ZERO WIDTH NON-JOINER\r\n\t\t(0x20D0 <= code && code <= 0x20DC) || // Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\r\n\t\t(0x20DD <= code && code <= 0x20E0) || // Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\r\n\t\t0x20E1 == code || // Mn       COMBINING LEFT RIGHT ARROW ABOVE\r\n\t\t(0x20E2 <= code && code <= 0x20E4) || // Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\r\n\t\t(0x20E5 <= code && code <= 0x20F0) || // Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\r\n\t\t(0x2CEF <= code && code <= 0x2CF1) || // Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\r\n\t\t0x2D7F == code || // Mn       TIFINAGH CONSONANT JOINER\r\n\t\t(0x2DE0 <= code && code <= 0x2DFF) || // Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\r\n\t\t(0x302A <= code && code <= 0x302D) || // Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\r\n\t\t(0x302E <= code && code <= 0x302F) || // Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\r\n\t\t(0x3099 <= code && code <= 0x309A) || // Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\r\n\t\t0xA66F == code || // Mn       COMBINING CYRILLIC VZMET\r\n\t\t(0xA670 <= code && code <= 0xA672) || // Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\r\n\t\t(0xA674 <= code && code <= 0xA67D) || // Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\r\n\t\t(0xA69E <= code && code <= 0xA69F) || // Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\r\n\t\t(0xA6F0 <= code && code <= 0xA6F1) || // Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\r\n\t\t0xA802 == code || // Mn       SYLOTI NAGRI SIGN DVISVARA\r\n\t\t0xA806 == code || // Mn       SYLOTI NAGRI SIGN HASANTA\r\n\t\t0xA80B == code || // Mn       SYLOTI NAGRI SIGN ANUSVARA\r\n\t\t(0xA825 <= code && code <= 0xA826) || // Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\r\n\t\t(0xA8C4 <= code && code <= 0xA8C5) || // Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\r\n\t\t(0xA8E0 <= code && code <= 0xA8F1) || // Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\r\n\t\t(0xA926 <= code && code <= 0xA92D) || // Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\r\n\t\t(0xA947 <= code && code <= 0xA951) || // Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\r\n\t\t(0xA980 <= code && code <= 0xA982) || // Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\r\n\t\t0xA9B3 == code || // Mn       JAVANESE SIGN CECAK TELU\r\n\t\t(0xA9B6 <= code && code <= 0xA9B9) || // Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\r\n\t\t0xA9BC == code || // Mn       JAVANESE VOWEL SIGN PEPET\r\n\t\t0xA9E5 == code || // Mn       MYANMAR SIGN SHAN SAW\r\n\t\t(0xAA29 <= code && code <= 0xAA2E) || // Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\r\n\t\t(0xAA31 <= code && code <= 0xAA32) || // Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\r\n\t\t(0xAA35 <= code && code <= 0xAA36) || // Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\r\n\t\t0xAA43 == code || // Mn       CHAM CONSONANT SIGN FINAL NG\r\n\t\t0xAA4C == code || // Mn       CHAM CONSONANT SIGN FINAL M\r\n\t\t0xAA7C == code || // Mn       MYANMAR SIGN TAI LAING TONE-2\r\n\t\t0xAAB0 == code || // Mn       TAI VIET MAI KANG\r\n\t\t(0xAAB2 <= code && code <= 0xAAB4) || // Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\r\n\t\t(0xAAB7 <= code && code <= 0xAAB8) || // Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\r\n\t\t(0xAABE <= code && code <= 0xAABF) || // Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\r\n\t\t0xAAC1 == code || // Mn       TAI VIET TONE MAI THO\r\n\t\t(0xAAEC <= code && code <= 0xAAED) || // Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\r\n\t\t0xAAF6 == code || // Mn       MEETEI MAYEK VIRAMA\r\n\t\t0xABE5 == code || // Mn       MEETEI MAYEK VOWEL SIGN ANAP\r\n\t\t0xABE8 == code || // Mn       MEETEI MAYEK VOWEL SIGN UNAP\r\n\t\t0xABED == code || // Mn       MEETEI MAYEK APUN IYEK\r\n\t\t0xFB1E == code || // Mn       HEBREW POINT JUDEO-SPANISH VARIKA\r\n\t\t(0xFE00 <= code && code <= 0xFE0F) || // Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\r\n\t\t(0xFE20 <= code && code <= 0xFE2F) || // Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\r\n\t\t(0xFF9E <= code && code <= 0xFF9F) || // Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\r\n\t\t0x101FD == code || // Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\r\n\t\t0x102E0 == code || // Mn       COPTIC EPACT THOUSANDS MARK\r\n\t\t(0x10376 <= code && code <= 0x1037A) || // Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\r\n\t\t(0x10A01 <= code && code <= 0x10A03) || // Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\r\n\t\t(0x10A05 <= code && code <= 0x10A06) || // Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\r\n\t\t(0x10A0C <= code && code <= 0x10A0F) || // Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\r\n\t\t(0x10A38 <= code && code <= 0x10A3A) || // Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\r\n\t\t0x10A3F == code || // Mn       KHAROSHTHI VIRAMA\r\n\t\t(0x10AE5 <= code && code <= 0x10AE6) || // Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\r\n\t\t0x11001 == code || // Mn       BRAHMI SIGN ANUSVARA\r\n\t\t(0x11038 <= code && code <= 0x11046) || // Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\r\n\t\t(0x1107F <= code && code <= 0x11081) || // Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\r\n\t\t(0x110B3 <= code && code <= 0x110B6) || // Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\r\n\t\t(0x110B9 <= code && code <= 0x110BA) || // Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\r\n\t\t(0x11100 <= code && code <= 0x11102) || // Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\r\n\t\t(0x11127 <= code && code <= 0x1112B) || // Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\r\n\t\t(0x1112D <= code && code <= 0x11134) || // Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\r\n\t\t0x11173 == code || // Mn       MAHAJANI SIGN NUKTA\r\n\t\t(0x11180 <= code && code <= 0x11181) || // Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\r\n\t\t(0x111B6 <= code && code <= 0x111BE) || // Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\r\n\t\t(0x111CA <= code && code <= 0x111CC) || // Mn   [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK\r\n\t\t(0x1122F <= code && code <= 0x11231) || // Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\r\n\t\t0x11234 == code || // Mn       KHOJKI SIGN ANUSVARA\r\n\t\t(0x11236 <= code && code <= 0x11237) || // Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\r\n\t\t0x1123E == code || // Mn       KHOJKI SIGN SUKUN\r\n\t\t0x112DF == code || // Mn       KHUDAWADI SIGN ANUSVARA\r\n\t\t(0x112E3 <= code && code <= 0x112EA) || // Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\r\n\t\t(0x11300 <= code && code <= 0x11301) || // Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\r\n\t\t0x1133C == code || // Mn       GRANTHA SIGN NUKTA\r\n\t\t0x1133E == code || // Mc       GRANTHA VOWEL SIGN AA\r\n\t\t0x11340 == code || // Mn       GRANTHA VOWEL SIGN II\r\n\t\t0x11357 == code || // Mc       GRANTHA AU LENGTH MARK\r\n\t\t(0x11366 <= code && code <= 0x1136C) || // Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\r\n\t\t(0x11370 <= code && code <= 0x11374) || // Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\r\n\t\t(0x11438 <= code && code <= 0x1143F) || // Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\r\n\t\t(0x11442 <= code && code <= 0x11444) || // Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\r\n\t\t0x11446 == code || // Mn       NEWA SIGN NUKTA\r\n\t\t0x114B0 == code || // Mc       TIRHUTA VOWEL SIGN AA\r\n\t\t(0x114B3 <= code && code <= 0x114B8) || // Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\r\n\t\t0x114BA == code || // Mn       TIRHUTA VOWEL SIGN SHORT E\r\n\t\t0x114BD == code || // Mc       TIRHUTA VOWEL SIGN SHORT O\r\n\t\t(0x114BF <= code && code <= 0x114C0) || // Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\r\n\t\t(0x114C2 <= code && code <= 0x114C3) || // Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\r\n\t\t0x115AF == code || // Mc       SIDDHAM VOWEL SIGN AA\r\n\t\t(0x115B2 <= code && code <= 0x115B5) || // Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\r\n\t\t(0x115BC <= code && code <= 0x115BD) || // Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\r\n\t\t(0x115BF <= code && code <= 0x115C0) || // Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\r\n\t\t(0x115DC <= code && code <= 0x115DD) || // Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\r\n\t\t(0x11633 <= code && code <= 0x1163A) || // Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\r\n\t\t0x1163D == code || // Mn       MODI SIGN ANUSVARA\r\n\t\t(0x1163F <= code && code <= 0x11640) || // Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\r\n\t\t0x116AB == code || // Mn       TAKRI SIGN ANUSVARA\r\n\t\t0x116AD == code || // Mn       TAKRI VOWEL SIGN AA\r\n\t\t(0x116B0 <= code && code <= 0x116B5) || // Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\r\n\t\t0x116B7 == code || // Mn       TAKRI SIGN NUKTA\r\n\t\t(0x1171D <= code && code <= 0x1171F) || // Mn   [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA\r\n\t\t(0x11722 <= code && code <= 0x11725) || // Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\r\n\t\t(0x11727 <= code && code <= 0x1172B) || // Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\r\n\t\t(0x11A01 <= code && code <= 0x11A06) || // Mn   [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O\r\n\t\t(0x11A09 <= code && code <= 0x11A0A) || // Mn   [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK\r\n\t\t(0x11A33 <= code && code <= 0x11A38) || // Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\r\n\t\t(0x11A3B <= code && code <= 0x11A3E) || // Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\r\n\t\t0x11A47 == code || // Mn       ZANABAZAR SQUARE SUBJOINER\r\n\t\t(0x11A51 <= code && code <= 0x11A56) || // Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\r\n\t\t(0x11A59 <= code && code <= 0x11A5B) || // Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\r\n\t\t(0x11A8A <= code && code <= 0x11A96) || // Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\r\n\t\t(0x11A98 <= code && code <= 0x11A99) || // Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\r\n\t\t(0x11C30 <= code && code <= 0x11C36) || // Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\r\n\t\t(0x11C38 <= code && code <= 0x11C3D) || // Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\r\n\t\t0x11C3F == code || // Mn       BHAIKSUKI SIGN VIRAMA\r\n\t\t(0x11C92 <= code && code <= 0x11CA7) || // Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\r\n\t\t(0x11CAA <= code && code <= 0x11CB0) || // Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\r\n\t\t(0x11CB2 <= code && code <= 0x11CB3) || // Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\r\n\t\t(0x11CB5 <= code && code <= 0x11CB6) || // Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\r\n\t\t(0x11D31 <= code && code <= 0x11D36) || // Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\r\n\t\t0x11D3A == code || // Mn       MASARAM GONDI VOWEL SIGN E\r\n\t\t(0x11D3C <= code && code <= 0x11D3D) || // Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\r\n\t\t(0x11D3F <= code && code <= 0x11D45) || // Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\r\n\t\t0x11D47 == code || // Mn       MASARAM GONDI RA-KARA\r\n\t\t(0x16AF0 <= code && code <= 0x16AF4) || // Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\r\n\t\t(0x16B30 <= code && code <= 0x16B36) || // Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\r\n\t\t(0x16F8F <= code && code <= 0x16F92) || // Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\r\n\t\t(0x1BC9D <= code && code <= 0x1BC9E) || // Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\r\n\t\t0x1D165 == code || // Mc       MUSICAL SYMBOL COMBINING STEM\r\n\t\t(0x1D167 <= code && code <= 0x1D169) || // Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\r\n\t\t(0x1D16E <= code && code <= 0x1D172) || // Mc   [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5\r\n\t\t(0x1D17B <= code && code <= 0x1D182) || // Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\r\n\t\t(0x1D185 <= code && code <= 0x1D18B) || // Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\r\n\t\t(0x1D1AA <= code && code <= 0x1D1AD) || // Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\r\n\t\t(0x1D242 <= code && code <= 0x1D244) || // Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\r\n\t\t(0x1DA00 <= code && code <= 0x1DA36) || // Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\r\n\t\t(0x1DA3B <= code && code <= 0x1DA6C) || // Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\r\n\t\t0x1DA75 == code || // Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\r\n\t\t0x1DA84 == code || // Mn       SIGNWRITING LOCATION HEAD NECK\r\n\t\t(0x1DA9B <= code && code <= 0x1DA9F) || // Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\r\n\t\t(0x1DAA1 <= code && code <= 0x1DAAF) || // Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\r\n\t\t(0x1E000 <= code && code <= 0x1E006) || // Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\r\n\t\t(0x1E008 <= code && code <= 0x1E018) || // Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\r\n\t\t(0x1E01B <= code && code <= 0x1E021) || // Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\r\n\t\t(0x1E023 <= code && code <= 0x1E024) || // Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\r\n\t\t(0x1E026 <= code && code <= 0x1E02A) || // Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\r\n\t\t(0x1E8D0 <= code && code <= 0x1E8D6) || // Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\r\n\t\t(0x1E944 <= code && code <= 0x1E94A) || // Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\r\n\t\t(0xE0020 <= code && code <= 0xE007F) || // Cf  [96] TAG SPACE..CANCEL TAG\r\n\t\t(0xE0100 <= code && code <= 0xE01EF) // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\r\n\t\t){\r\n\t\t\treturn Extend;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x1F1E6 <= code && code <= 0x1F1FF) // So  [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z\r\n\t\t){\r\n\t\t\treturn Regional_Indicator;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0x0903 == code || // Mc       DEVANAGARI SIGN VISARGA\r\n\t\t0x093B == code || // Mc       DEVANAGARI VOWEL SIGN OOE\r\n\t\t(0x093E <= code && code <= 0x0940) || // Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\r\n\t\t(0x0949 <= code && code <= 0x094C) || // Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\r\n\t\t(0x094E <= code && code <= 0x094F) || // Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\r\n\t\t(0x0982 <= code && code <= 0x0983) || // Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\r\n\t\t(0x09BF <= code && code <= 0x09C0) || // Mc   [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II\r\n\t\t(0x09C7 <= code && code <= 0x09C8) || // Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\r\n\t\t(0x09CB <= code && code <= 0x09CC) || // Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\r\n\t\t0x0A03 == code || // Mc       GURMUKHI SIGN VISARGA\r\n\t\t(0x0A3E <= code && code <= 0x0A40) || // Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\r\n\t\t0x0A83 == code || // Mc       GUJARATI SIGN VISARGA\r\n\t\t(0x0ABE <= code && code <= 0x0AC0) || // Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\r\n\t\t0x0AC9 == code || // Mc       GUJARATI VOWEL SIGN CANDRA O\r\n\t\t(0x0ACB <= code && code <= 0x0ACC) || // Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\r\n\t\t(0x0B02 <= code && code <= 0x0B03) || // Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\r\n\t\t0x0B40 == code || // Mc       ORIYA VOWEL SIGN II\r\n\t\t(0x0B47 <= code && code <= 0x0B48) || // Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\r\n\t\t(0x0B4B <= code && code <= 0x0B4C) || // Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\r\n\t\t0x0BBF == code || // Mc       TAMIL VOWEL SIGN I\r\n\t\t(0x0BC1 <= code && code <= 0x0BC2) || // Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\r\n\t\t(0x0BC6 <= code && code <= 0x0BC8) || // Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\r\n\t\t(0x0BCA <= code && code <= 0x0BCC) || // Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\r\n\t\t(0x0C01 <= code && code <= 0x0C03) || // Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\r\n\t\t(0x0C41 <= code && code <= 0x0C44) || // Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\r\n\t\t(0x0C82 <= code && code <= 0x0C83) || // Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\r\n\t\t0x0CBE == code || // Mc       KANNADA VOWEL SIGN AA\r\n\t\t(0x0CC0 <= code && code <= 0x0CC1) || // Mc   [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U\r\n\t\t(0x0CC3 <= code && code <= 0x0CC4) || // Mc   [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR\r\n\t\t(0x0CC7 <= code && code <= 0x0CC8) || // Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\r\n\t\t(0x0CCA <= code && code <= 0x0CCB) || // Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\r\n\t\t(0x0D02 <= code && code <= 0x0D03) || // Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\r\n\t\t(0x0D3F <= code && code <= 0x0D40) || // Mc   [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II\r\n\t\t(0x0D46 <= code && code <= 0x0D48) || // Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\r\n\t\t(0x0D4A <= code && code <= 0x0D4C) || // Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\r\n\t\t(0x0D82 <= code && code <= 0x0D83) || // Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\r\n\t\t(0x0DD0 <= code && code <= 0x0DD1) || // Mc   [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\r\n\t\t(0x0DD8 <= code && code <= 0x0DDE) || // Mc   [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA\r\n\t\t(0x0DF2 <= code && code <= 0x0DF3) || // Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\r\n\t\t0x0E33 == code || // Lo       THAI CHARACTER SARA AM\r\n\t\t0x0EB3 == code || // Lo       LAO VOWEL SIGN AM\r\n\t\t(0x0F3E <= code && code <= 0x0F3F) || // Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\r\n\t\t0x0F7F == code || // Mc       TIBETAN SIGN RNAM BCAD\r\n\t\t0x1031 == code || // Mc       MYANMAR VOWEL SIGN E\r\n\t\t(0x103B <= code && code <= 0x103C) || // Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\r\n\t\t(0x1056 <= code && code <= 0x1057) || // Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\r\n\t\t0x1084 == code || // Mc       MYANMAR VOWEL SIGN SHAN E\r\n\t\t0x17B6 == code || // Mc       KHMER VOWEL SIGN AA\r\n\t\t(0x17BE <= code && code <= 0x17C5) || // Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\r\n\t\t(0x17C7 <= code && code <= 0x17C8) || // Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\r\n\t\t(0x1923 <= code && code <= 0x1926) || // Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\r\n\t\t(0x1929 <= code && code <= 0x192B) || // Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\r\n\t\t(0x1930 <= code && code <= 0x1931) || // Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\r\n\t\t(0x1933 <= code && code <= 0x1938) || // Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\r\n\t\t(0x1A19 <= code && code <= 0x1A1A) || // Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\r\n\t\t0x1A55 == code || // Mc       TAI THAM CONSONANT SIGN MEDIAL RA\r\n\t\t0x1A57 == code || // Mc       TAI THAM CONSONANT SIGN LA TANG LAI\r\n\t\t(0x1A6D <= code && code <= 0x1A72) || // Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\r\n\t\t0x1B04 == code || // Mc       BALINESE SIGN BISAH\r\n\t\t0x1B35 == code || // Mc       BALINESE VOWEL SIGN TEDUNG\r\n\t\t0x1B3B == code || // Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\r\n\t\t(0x1B3D <= code && code <= 0x1B41) || // Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\r\n\t\t(0x1B43 <= code && code <= 0x1B44) || // Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\r\n\t\t0x1B82 == code || // Mc       SUNDANESE SIGN PANGWISAD\r\n\t\t0x1BA1 == code || // Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\r\n\t\t(0x1BA6 <= code && code <= 0x1BA7) || // Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\r\n\t\t0x1BAA == code || // Mc       SUNDANESE SIGN PAMAAEH\r\n\t\t0x1BE7 == code || // Mc       BATAK VOWEL SIGN E\r\n\t\t(0x1BEA <= code && code <= 0x1BEC) || // Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\r\n\t\t0x1BEE == code || // Mc       BATAK VOWEL SIGN U\r\n\t\t(0x1BF2 <= code && code <= 0x1BF3) || // Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\r\n\t\t(0x1C24 <= code && code <= 0x1C2B) || // Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\r\n\t\t(0x1C34 <= code && code <= 0x1C35) || // Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\r\n\t\t0x1CE1 == code || // Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\r\n\t\t(0x1CF2 <= code && code <= 0x1CF3) || // Mc   [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA\r\n\t\t0x1CF7 == code || // Mc       VEDIC SIGN ATIKRAMA\r\n\t\t(0xA823 <= code && code <= 0xA824) || // Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\r\n\t\t0xA827 == code || // Mc       SYLOTI NAGRI VOWEL SIGN OO\r\n\t\t(0xA880 <= code && code <= 0xA881) || // Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\r\n\t\t(0xA8B4 <= code && code <= 0xA8C3) || // Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\r\n\t\t(0xA952 <= code && code <= 0xA953) || // Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\r\n\t\t0xA983 == code || // Mc       JAVANESE SIGN WIGNYAN\r\n\t\t(0xA9B4 <= code && code <= 0xA9B5) || // Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\r\n\t\t(0xA9BA <= code && code <= 0xA9BB) || // Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\r\n\t\t(0xA9BD <= code && code <= 0xA9C0) || // Mc   [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON\r\n\t\t(0xAA2F <= code && code <= 0xAA30) || // Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\r\n\t\t(0xAA33 <= code && code <= 0xAA34) || // Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\r\n\t\t0xAA4D == code || // Mc       CHAM CONSONANT SIGN FINAL H\r\n\t\t0xAAEB == code || // Mc       MEETEI MAYEK VOWEL SIGN II\r\n\t\t(0xAAEE <= code && code <= 0xAAEF) || // Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\r\n\t\t0xAAF5 == code || // Mc       MEETEI MAYEK VOWEL SIGN VISARGA\r\n\t\t(0xABE3 <= code && code <= 0xABE4) || // Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\r\n\t\t(0xABE6 <= code && code <= 0xABE7) || // Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\r\n\t\t(0xABE9 <= code && code <= 0xABEA) || // Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\r\n\t\t0xABEC == code || // Mc       MEETEI MAYEK LUM IYEK\r\n\t\t0x11000 == code || // Mc       BRAHMI SIGN CANDRABINDU\r\n\t\t0x11002 == code || // Mc       BRAHMI SIGN VISARGA\r\n\t\t0x11082 == code || // Mc       KAITHI SIGN VISARGA\r\n\t\t(0x110B0 <= code && code <= 0x110B2) || // Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\r\n\t\t(0x110B7 <= code && code <= 0x110B8) || // Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\r\n\t\t0x1112C == code || // Mc       CHAKMA VOWEL SIGN E\r\n\t\t0x11182 == code || // Mc       SHARADA SIGN VISARGA\r\n\t\t(0x111B3 <= code && code <= 0x111B5) || // Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\r\n\t\t(0x111BF <= code && code <= 0x111C0) || // Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\r\n\t\t(0x1122C <= code && code <= 0x1122E) || // Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\r\n\t\t(0x11232 <= code && code <= 0x11233) || // Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\r\n\t\t0x11235 == code || // Mc       KHOJKI SIGN VIRAMA\r\n\t\t(0x112E0 <= code && code <= 0x112E2) || // Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\r\n\t\t(0x11302 <= code && code <= 0x11303) || // Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\r\n\t\t0x1133F == code || // Mc       GRANTHA VOWEL SIGN I\r\n\t\t(0x11341 <= code && code <= 0x11344) || // Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\r\n\t\t(0x11347 <= code && code <= 0x11348) || // Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\r\n\t\t(0x1134B <= code && code <= 0x1134D) || // Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\r\n\t\t(0x11362 <= code && code <= 0x11363) || // Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\r\n\t\t(0x11435 <= code && code <= 0x11437) || // Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\r\n\t\t(0x11440 <= code && code <= 0x11441) || // Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\r\n\t\t0x11445 == code || // Mc       NEWA SIGN VISARGA\r\n\t\t(0x114B1 <= code && code <= 0x114B2) || // Mc   [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II\r\n\t\t0x114B9 == code || // Mc       TIRHUTA VOWEL SIGN E\r\n\t\t(0x114BB <= code && code <= 0x114BC) || // Mc   [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O\r\n\t\t0x114BE == code || // Mc       TIRHUTA VOWEL SIGN AU\r\n\t\t0x114C1 == code || // Mc       TIRHUTA SIGN VISARGA\r\n\t\t(0x115B0 <= code && code <= 0x115B1) || // Mc   [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II\r\n\t\t(0x115B8 <= code && code <= 0x115BB) || // Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\r\n\t\t0x115BE == code || // Mc       SIDDHAM SIGN VISARGA\r\n\t\t(0x11630 <= code && code <= 0x11632) || // Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\r\n\t\t(0x1163B <= code && code <= 0x1163C) || // Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\r\n\t\t0x1163E == code || // Mc       MODI SIGN VISARGA\r\n\t\t0x116AC == code || // Mc       TAKRI SIGN VISARGA\r\n\t\t(0x116AE <= code && code <= 0x116AF) || // Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\r\n\t\t0x116B6 == code || // Mc       TAKRI SIGN VIRAMA\r\n\t\t(0x11720 <= code && code <= 0x11721) || // Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\r\n\t\t0x11726 == code || // Mc       AHOM VOWEL SIGN E\r\n\t\t(0x11A07 <= code && code <= 0x11A08) || // Mc   [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU\r\n\t\t0x11A39 == code || // Mc       ZANABAZAR SQUARE SIGN VISARGA\r\n\t\t(0x11A57 <= code && code <= 0x11A58) || // Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\r\n\t\t0x11A97 == code || // Mc       SOYOMBO SIGN VISARGA\r\n\t\t0x11C2F == code || // Mc       BHAIKSUKI VOWEL SIGN AA\r\n\t\t0x11C3E == code || // Mc       BHAIKSUKI SIGN VISARGA\r\n\t\t0x11CA9 == code || // Mc       MARCHEN SUBJOINED LETTER YA\r\n\t\t0x11CB1 == code || // Mc       MARCHEN VOWEL SIGN I\r\n\t\t0x11CB4 == code || // Mc       MARCHEN VOWEL SIGN O\r\n\t\t(0x16F51 <= code && code <= 0x16F7E) || // Mc  [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG\r\n\t\t0x1D166 == code || // Mc       MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\r\n\t\t0x1D16D == code // Mc       MUSICAL SYMBOL COMBINING AUGMENTATION DOT\r\n\t\t){\r\n\t\t\treturn SpacingMark;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x1100 <= code && code <= 0x115F) || // Lo  [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER\r\n\t\t(0xA960 <= code && code <= 0xA97C) // Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\r\n\t\t){\r\n\t\t\treturn L;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t(0x1160 <= code && code <= 0x11A7) || // Lo  [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE\r\n\t\t(0xD7B0 <= code && code <= 0xD7C6) // Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\r\n\t\t){\r\n\t\t\treturn V;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tif(\r\n\t\t(0x11A8 <= code && code <= 0x11FF) || // Lo  [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN\r\n\t\t(0xD7CB <= code && code <= 0xD7FB) // Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\r\n\t\t){\r\n\t\t\treturn T;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0xAC00 == code || // Lo       HANGUL SYLLABLE GA\r\n\t\t0xAC1C == code || // Lo       HANGUL SYLLABLE GAE\r\n\t\t0xAC38 == code || // Lo       HANGUL SYLLABLE GYA\r\n\t\t0xAC54 == code || // Lo       HANGUL SYLLABLE GYAE\r\n\t\t0xAC70 == code || // Lo       HANGUL SYLLABLE GEO\r\n\t\t0xAC8C == code || // Lo       HANGUL SYLLABLE GE\r\n\t\t0xACA8 == code || // Lo       HANGUL SYLLABLE GYEO\r\n\t\t0xACC4 == code || // Lo       HANGUL SYLLABLE GYE\r\n\t\t0xACE0 == code || // Lo       HANGUL SYLLABLE GO\r\n\t\t0xACFC == code || // Lo       HANGUL SYLLABLE GWA\r\n\t\t0xAD18 == code || // Lo       HANGUL SYLLABLE GWAE\r\n\t\t0xAD34 == code || // Lo       HANGUL SYLLABLE GOE\r\n\t\t0xAD50 == code || // Lo       HANGUL SYLLABLE GYO\r\n\t\t0xAD6C == code || // Lo       HANGUL SYLLABLE GU\r\n\t\t0xAD88 == code || // Lo       HANGUL SYLLABLE GWEO\r\n\t\t0xADA4 == code || // Lo       HANGUL SYLLABLE GWE\r\n\t\t0xADC0 == code || // Lo       HANGUL SYLLABLE GWI\r\n\t\t0xADDC == code || // Lo       HANGUL SYLLABLE GYU\r\n\t\t0xADF8 == code || // Lo       HANGUL SYLLABLE GEU\r\n\t\t0xAE14 == code || // Lo       HANGUL SYLLABLE GYI\r\n\t\t0xAE30 == code || // Lo       HANGUL SYLLABLE GI\r\n\t\t0xAE4C == code || // Lo       HANGUL SYLLABLE GGA\r\n\t\t0xAE68 == code || // Lo       HANGUL SYLLABLE GGAE\r\n\t\t0xAE84 == code || // Lo       HANGUL SYLLABLE GGYA\r\n\t\t0xAEA0 == code || // Lo       HANGUL SYLLABLE GGYAE\r\n\t\t0xAEBC == code || // Lo       HANGUL SYLLABLE GGEO\r\n\t\t0xAED8 == code || // Lo       HANGUL SYLLABLE GGE\r\n\t\t0xAEF4 == code || // Lo       HANGUL SYLLABLE GGYEO\r\n\t\t0xAF10 == code || // Lo       HANGUL SYLLABLE GGYE\r\n\t\t0xAF2C == code || // Lo       HANGUL SYLLABLE GGO\r\n\t\t0xAF48 == code || // Lo       HANGUL SYLLABLE GGWA\r\n\t\t0xAF64 == code || // Lo       HANGUL SYLLABLE GGWAE\r\n\t\t0xAF80 == code || // Lo       HANGUL SYLLABLE GGOE\r\n\t\t0xAF9C == code || // Lo       HANGUL SYLLABLE GGYO\r\n\t\t0xAFB8 == code || // Lo       HANGUL SYLLABLE GGU\r\n\t\t0xAFD4 == code || // Lo       HANGUL SYLLABLE GGWEO\r\n\t\t0xAFF0 == code || // Lo       HANGUL SYLLABLE GGWE\r\n\t\t0xB00C == code || // Lo       HANGUL SYLLABLE GGWI\r\n\t\t0xB028 == code || // Lo       HANGUL SYLLABLE GGYU\r\n\t\t0xB044 == code || // Lo       HANGUL SYLLABLE GGEU\r\n\t\t0xB060 == code || // Lo       HANGUL SYLLABLE GGYI\r\n\t\t0xB07C == code || // Lo       HANGUL SYLLABLE GGI\r\n\t\t0xB098 == code || // Lo       HANGUL SYLLABLE NA\r\n\t\t0xB0B4 == code || // Lo       HANGUL SYLLABLE NAE\r\n\t\t0xB0D0 == code || // Lo       HANGUL SYLLABLE NYA\r\n\t\t0xB0EC == code || // Lo       HANGUL SYLLABLE NYAE\r\n\t\t0xB108 == code || // Lo       HANGUL SYLLABLE NEO\r\n\t\t0xB124 == code || // Lo       HANGUL SYLLABLE NE\r\n\t\t0xB140 == code || // Lo       HANGUL SYLLABLE NYEO\r\n\t\t0xB15C == code || // Lo       HANGUL SYLLABLE NYE\r\n\t\t0xB178 == code || // Lo       HANGUL SYLLABLE NO\r\n\t\t0xB194 == code || // Lo       HANGUL SYLLABLE NWA\r\n\t\t0xB1B0 == code || // Lo       HANGUL SYLLABLE NWAE\r\n\t\t0xB1CC == code || // Lo       HANGUL SYLLABLE NOE\r\n\t\t0xB1E8 == code || // Lo       HANGUL SYLLABLE NYO\r\n\t\t0xB204 == code || // Lo       HANGUL SYLLABLE NU\r\n\t\t0xB220 == code || // Lo       HANGUL SYLLABLE NWEO\r\n\t\t0xB23C == code || // Lo       HANGUL SYLLABLE NWE\r\n\t\t0xB258 == code || // Lo       HANGUL SYLLABLE NWI\r\n\t\t0xB274 == code || // Lo       HANGUL SYLLABLE NYU\r\n\t\t0xB290 == code || // Lo       HANGUL SYLLABLE NEU\r\n\t\t0xB2AC == code || // Lo       HANGUL SYLLABLE NYI\r\n\t\t0xB2C8 == code || // Lo       HANGUL SYLLABLE NI\r\n\t\t0xB2E4 == code || // Lo       HANGUL SYLLABLE DA\r\n\t\t0xB300 == code || // Lo       HANGUL SYLLABLE DAE\r\n\t\t0xB31C == code || // Lo       HANGUL SYLLABLE DYA\r\n\t\t0xB338 == code || // Lo       HANGUL SYLLABLE DYAE\r\n\t\t0xB354 == code || // Lo       HANGUL SYLLABLE DEO\r\n\t\t0xB370 == code || // Lo       HANGUL SYLLABLE DE\r\n\t\t0xB38C == code || // Lo       HANGUL SYLLABLE DYEO\r\n\t\t0xB3A8 == code || // Lo       HANGUL SYLLABLE DYE\r\n\t\t0xB3C4 == code || // Lo       HANGUL SYLLABLE DO\r\n\t\t0xB3E0 == code || // Lo       HANGUL SYLLABLE DWA\r\n\t\t0xB3FC == code || // Lo       HANGUL SYLLABLE DWAE\r\n\t\t0xB418 == code || // Lo       HANGUL SYLLABLE DOE\r\n\t\t0xB434 == code || // Lo       HANGUL SYLLABLE DYO\r\n\t\t0xB450 == code || // Lo       HANGUL SYLLABLE DU\r\n\t\t0xB46C == code || // Lo       HANGUL SYLLABLE DWEO\r\n\t\t0xB488 == code || // Lo       HANGUL SYLLABLE DWE\r\n\t\t0xB4A4 == code || // Lo       HANGUL SYLLABLE DWI\r\n\t\t0xB4C0 == code || // Lo       HANGUL SYLLABLE DYU\r\n\t\t0xB4DC == code || // Lo       HANGUL SYLLABLE DEU\r\n\t\t0xB4F8 == code || // Lo       HANGUL SYLLABLE DYI\r\n\t\t0xB514 == code || // Lo       HANGUL SYLLABLE DI\r\n\t\t0xB530 == code || // Lo       HANGUL SYLLABLE DDA\r\n\t\t0xB54C == code || // Lo       HANGUL SYLLABLE DDAE\r\n\t\t0xB568 == code || // Lo       HANGUL SYLLABLE DDYA\r\n\t\t0xB584 == code || // Lo       HANGUL SYLLABLE DDYAE\r\n\t\t0xB5A0 == code || // Lo       HANGUL SYLLABLE DDEO\r\n\t\t0xB5BC == code || // Lo       HANGUL SYLLABLE DDE\r\n\t\t0xB5D8 == code || // Lo       HANGUL SYLLABLE DDYEO\r\n\t\t0xB5F4 == code || // Lo       HANGUL SYLLABLE DDYE\r\n\t\t0xB610 == code || // Lo       HANGUL SYLLABLE DDO\r\n\t\t0xB62C == code || // Lo       HANGUL SYLLABLE DDWA\r\n\t\t0xB648 == code || // Lo       HANGUL SYLLABLE DDWAE\r\n\t\t0xB664 == code || // Lo       HANGUL SYLLABLE DDOE\r\n\t\t0xB680 == code || // Lo       HANGUL SYLLABLE DDYO\r\n\t\t0xB69C == code || // Lo       HANGUL SYLLABLE DDU\r\n\t\t0xB6B8 == code || // Lo       HANGUL SYLLABLE DDWEO\r\n\t\t0xB6D4 == code || // Lo       HANGUL SYLLABLE DDWE\r\n\t\t0xB6F0 == code || // Lo       HANGUL SYLLABLE DDWI\r\n\t\t0xB70C == code || // Lo       HANGUL SYLLABLE DDYU\r\n\t\t0xB728 == code || // Lo       HANGUL SYLLABLE DDEU\r\n\t\t0xB744 == code || // Lo       HANGUL SYLLABLE DDYI\r\n\t\t0xB760 == code || // Lo       HANGUL SYLLABLE DDI\r\n\t\t0xB77C == code || // Lo       HANGUL SYLLABLE RA\r\n\t\t0xB798 == code || // Lo       HANGUL SYLLABLE RAE\r\n\t\t0xB7B4 == code || // Lo       HANGUL SYLLABLE RYA\r\n\t\t0xB7D0 == code || // Lo       HANGUL SYLLABLE RYAE\r\n\t\t0xB7EC == code || // Lo       HANGUL SYLLABLE REO\r\n\t\t0xB808 == code || // Lo       HANGUL SYLLABLE RE\r\n\t\t0xB824 == code || // Lo       HANGUL SYLLABLE RYEO\r\n\t\t0xB840 == code || // Lo       HANGUL SYLLABLE RYE\r\n\t\t0xB85C == code || // Lo       HANGUL SYLLABLE RO\r\n\t\t0xB878 == code || // Lo       HANGUL SYLLABLE RWA\r\n\t\t0xB894 == code || // Lo       HANGUL SYLLABLE RWAE\r\n\t\t0xB8B0 == code || // Lo       HANGUL SYLLABLE ROE\r\n\t\t0xB8CC == code || // Lo       HANGUL SYLLABLE RYO\r\n\t\t0xB8E8 == code || // Lo       HANGUL SYLLABLE RU\r\n\t\t0xB904 == code || // Lo       HANGUL SYLLABLE RWEO\r\n\t\t0xB920 == code || // Lo       HANGUL SYLLABLE RWE\r\n\t\t0xB93C == code || // Lo       HANGUL SYLLABLE RWI\r\n\t\t0xB958 == code || // Lo       HANGUL SYLLABLE RYU\r\n\t\t0xB974 == code || // Lo       HANGUL SYLLABLE REU\r\n\t\t0xB990 == code || // Lo       HANGUL SYLLABLE RYI\r\n\t\t0xB9AC == code || // Lo       HANGUL SYLLABLE RI\r\n\t\t0xB9C8 == code || // Lo       HANGUL SYLLABLE MA\r\n\t\t0xB9E4 == code || // Lo       HANGUL SYLLABLE MAE\r\n\t\t0xBA00 == code || // Lo       HANGUL SYLLABLE MYA\r\n\t\t0xBA1C == code || // Lo       HANGUL SYLLABLE MYAE\r\n\t\t0xBA38 == code || // Lo       HANGUL SYLLABLE MEO\r\n\t\t0xBA54 == code || // Lo       HANGUL SYLLABLE ME\r\n\t\t0xBA70 == code || // Lo       HANGUL SYLLABLE MYEO\r\n\t\t0xBA8C == code || // Lo       HANGUL SYLLABLE MYE\r\n\t\t0xBAA8 == code || // Lo       HANGUL SYLLABLE MO\r\n\t\t0xBAC4 == code || // Lo       HANGUL SYLLABLE MWA\r\n\t\t0xBAE0 == code || // Lo       HANGUL SYLLABLE MWAE\r\n\t\t0xBAFC == code || // Lo       HANGUL SYLLABLE MOE\r\n\t\t0xBB18 == code || // Lo       HANGUL SYLLABLE MYO\r\n\t\t0xBB34 == code || // Lo       HANGUL SYLLABLE MU\r\n\t\t0xBB50 == code || // Lo       HANGUL SYLLABLE MWEO\r\n\t\t0xBB6C == code || // Lo       HANGUL SYLLABLE MWE\r\n\t\t0xBB88 == code || // Lo       HANGUL SYLLABLE MWI\r\n\t\t0xBBA4 == code || // Lo       HANGUL SYLLABLE MYU\r\n\t\t0xBBC0 == code || // Lo       HANGUL SYLLABLE MEU\r\n\t\t0xBBDC == code || // Lo       HANGUL SYLLABLE MYI\r\n\t\t0xBBF8 == code || // Lo       HANGUL SYLLABLE MI\r\n\t\t0xBC14 == code || // Lo       HANGUL SYLLABLE BA\r\n\t\t0xBC30 == code || // Lo       HANGUL SYLLABLE BAE\r\n\t\t0xBC4C == code || // Lo       HANGUL SYLLABLE BYA\r\n\t\t0xBC68 == code || // Lo       HANGUL SYLLABLE BYAE\r\n\t\t0xBC84 == code || // Lo       HANGUL SYLLABLE BEO\r\n\t\t0xBCA0 == code || // Lo       HANGUL SYLLABLE BE\r\n\t\t0xBCBC == code || // Lo       HANGUL SYLLABLE BYEO\r\n\t\t0xBCD8 == code || // Lo       HANGUL SYLLABLE BYE\r\n\t\t0xBCF4 == code || // Lo       HANGUL SYLLABLE BO\r\n\t\t0xBD10 == code || // Lo       HANGUL SYLLABLE BWA\r\n\t\t0xBD2C == code || // Lo       HANGUL SYLLABLE BWAE\r\n\t\t0xBD48 == code || // Lo       HANGUL SYLLABLE BOE\r\n\t\t0xBD64 == code || // Lo       HANGUL SYLLABLE BYO\r\n\t\t0xBD80 == code || // Lo       HANGUL SYLLABLE BU\r\n\t\t0xBD9C == code || // Lo       HANGUL SYLLABLE BWEO\r\n\t\t0xBDB8 == code || // Lo       HANGUL SYLLABLE BWE\r\n\t\t0xBDD4 == code || // Lo       HANGUL SYLLABLE BWI\r\n\t\t0xBDF0 == code || // Lo       HANGUL SYLLABLE BYU\r\n\t\t0xBE0C == code || // Lo       HANGUL SYLLABLE BEU\r\n\t\t0xBE28 == code || // Lo       HANGUL SYLLABLE BYI\r\n\t\t0xBE44 == code || // Lo       HANGUL SYLLABLE BI\r\n\t\t0xBE60 == code || // Lo       HANGUL SYLLABLE BBA\r\n\t\t0xBE7C == code || // Lo       HANGUL SYLLABLE BBAE\r\n\t\t0xBE98 == code || // Lo       HANGUL SYLLABLE BBYA\r\n\t\t0xBEB4 == code || // Lo       HANGUL SYLLABLE BBYAE\r\n\t\t0xBED0 == code || // Lo       HANGUL SYLLABLE BBEO\r\n\t\t0xBEEC == code || // Lo       HANGUL SYLLABLE BBE\r\n\t\t0xBF08 == code || // Lo       HANGUL SYLLABLE BBYEO\r\n\t\t0xBF24 == code || // Lo       HANGUL SYLLABLE BBYE\r\n\t\t0xBF40 == code || // Lo       HANGUL SYLLABLE BBO\r\n\t\t0xBF5C == code || // Lo       HANGUL SYLLABLE BBWA\r\n\t\t0xBF78 == code || // Lo       HANGUL SYLLABLE BBWAE\r\n\t\t0xBF94 == code || // Lo       HANGUL SYLLABLE BBOE\r\n\t\t0xBFB0 == code || // Lo       HANGUL SYLLABLE BBYO\r\n\t\t0xBFCC == code || // Lo       HANGUL SYLLABLE BBU\r\n\t\t0xBFE8 == code || // Lo       HANGUL SYLLABLE BBWEO\r\n\t\t0xC004 == code || // Lo       HANGUL SYLLABLE BBWE\r\n\t\t0xC020 == code || // Lo       HANGUL SYLLABLE BBWI\r\n\t\t0xC03C == code || // Lo       HANGUL SYLLABLE BBYU\r\n\t\t0xC058 == code || // Lo       HANGUL SYLLABLE BBEU\r\n\t\t0xC074 == code || // Lo       HANGUL SYLLABLE BBYI\r\n\t\t0xC090 == code || // Lo       HANGUL SYLLABLE BBI\r\n\t\t0xC0AC == code || // Lo       HANGUL SYLLABLE SA\r\n\t\t0xC0C8 == code || // Lo       HANGUL SYLLABLE SAE\r\n\t\t0xC0E4 == code || // Lo       HANGUL SYLLABLE SYA\r\n\t\t0xC100 == code || // Lo       HANGUL SYLLABLE SYAE\r\n\t\t0xC11C == code || // Lo       HANGUL SYLLABLE SEO\r\n\t\t0xC138 == code || // Lo       HANGUL SYLLABLE SE\r\n\t\t0xC154 == code || // Lo       HANGUL SYLLABLE SYEO\r\n\t\t0xC170 == code || // Lo       HANGUL SYLLABLE SYE\r\n\t\t0xC18C == code || // Lo       HANGUL SYLLABLE SO\r\n\t\t0xC1A8 == code || // Lo       HANGUL SYLLABLE SWA\r\n\t\t0xC1C4 == code || // Lo       HANGUL SYLLABLE SWAE\r\n\t\t0xC1E0 == code || // Lo       HANGUL SYLLABLE SOE\r\n\t\t0xC1FC == code || // Lo       HANGUL SYLLABLE SYO\r\n\t\t0xC218 == code || // Lo       HANGUL SYLLABLE SU\r\n\t\t0xC234 == code || // Lo       HANGUL SYLLABLE SWEO\r\n\t\t0xC250 == code || // Lo       HANGUL SYLLABLE SWE\r\n\t\t0xC26C == code || // Lo       HANGUL SYLLABLE SWI\r\n\t\t0xC288 == code || // Lo       HANGUL SYLLABLE SYU\r\n\t\t0xC2A4 == code || // Lo       HANGUL SYLLABLE SEU\r\n\t\t0xC2C0 == code || // Lo       HANGUL SYLLABLE SYI\r\n\t\t0xC2DC == code || // Lo       HANGUL SYLLABLE SI\r\n\t\t0xC2F8 == code || // Lo       HANGUL SYLLABLE SSA\r\n\t\t0xC314 == code || // Lo       HANGUL SYLLABLE SSAE\r\n\t\t0xC330 == code || // Lo       HANGUL SYLLABLE SSYA\r\n\t\t0xC34C == code || // Lo       HANGUL SYLLABLE SSYAE\r\n\t\t0xC368 == code || // Lo       HANGUL SYLLABLE SSEO\r\n\t\t0xC384 == code || // Lo       HANGUL SYLLABLE SSE\r\n\t\t0xC3A0 == code || // Lo       HANGUL SYLLABLE SSYEO\r\n\t\t0xC3BC == code || // Lo       HANGUL SYLLABLE SSYE\r\n\t\t0xC3D8 == code || // Lo       HANGUL SYLLABLE SSO\r\n\t\t0xC3F4 == code || // Lo       HANGUL SYLLABLE SSWA\r\n\t\t0xC410 == code || // Lo       HANGUL SYLLABLE SSWAE\r\n\t\t0xC42C == code || // Lo       HANGUL SYLLABLE SSOE\r\n\t\t0xC448 == code || // Lo       HANGUL SYLLABLE SSYO\r\n\t\t0xC464 == code || // Lo       HANGUL SYLLABLE SSU\r\n\t\t0xC480 == code || // Lo       HANGUL SYLLABLE SSWEO\r\n\t\t0xC49C == code || // Lo       HANGUL SYLLABLE SSWE\r\n\t\t0xC4B8 == code || // Lo       HANGUL SYLLABLE SSWI\r\n\t\t0xC4D4 == code || // Lo       HANGUL SYLLABLE SSYU\r\n\t\t0xC4F0 == code || // Lo       HANGUL SYLLABLE SSEU\r\n\t\t0xC50C == code || // Lo       HANGUL SYLLABLE SSYI\r\n\t\t0xC528 == code || // Lo       HANGUL SYLLABLE SSI\r\n\t\t0xC544 == code || // Lo       HANGUL SYLLABLE A\r\n\t\t0xC560 == code || // Lo       HANGUL SYLLABLE AE\r\n\t\t0xC57C == code || // Lo       HANGUL SYLLABLE YA\r\n\t\t0xC598 == code || // Lo       HANGUL SYLLABLE YAE\r\n\t\t0xC5B4 == code || // Lo       HANGUL SYLLABLE EO\r\n\t\t0xC5D0 == code || // Lo       HANGUL SYLLABLE E\r\n\t\t0xC5EC == code || // Lo       HANGUL SYLLABLE YEO\r\n\t\t0xC608 == code || // Lo       HANGUL SYLLABLE YE\r\n\t\t0xC624 == code || // Lo       HANGUL SYLLABLE O\r\n\t\t0xC640 == code || // Lo       HANGUL SYLLABLE WA\r\n\t\t0xC65C == code || // Lo       HANGUL SYLLABLE WAE\r\n\t\t0xC678 == code || // Lo       HANGUL SYLLABLE OE\r\n\t\t0xC694 == code || // Lo       HANGUL SYLLABLE YO\r\n\t\t0xC6B0 == code || // Lo       HANGUL SYLLABLE U\r\n\t\t0xC6CC == code || // Lo       HANGUL SYLLABLE WEO\r\n\t\t0xC6E8 == code || // Lo       HANGUL SYLLABLE WE\r\n\t\t0xC704 == code || // Lo       HANGUL SYLLABLE WI\r\n\t\t0xC720 == code || // Lo       HANGUL SYLLABLE YU\r\n\t\t0xC73C == code || // Lo       HANGUL SYLLABLE EU\r\n\t\t0xC758 == code || // Lo       HANGUL SYLLABLE YI\r\n\t\t0xC774 == code || // Lo       HANGUL SYLLABLE I\r\n\t\t0xC790 == code || // Lo       HANGUL SYLLABLE JA\r\n\t\t0xC7AC == code || // Lo       HANGUL SYLLABLE JAE\r\n\t\t0xC7C8 == code || // Lo       HANGUL SYLLABLE JYA\r\n\t\t0xC7E4 == code || // Lo       HANGUL SYLLABLE JYAE\r\n\t\t0xC800 == code || // Lo       HANGUL SYLLABLE JEO\r\n\t\t0xC81C == code || // Lo       HANGUL SYLLABLE JE\r\n\t\t0xC838 == code || // Lo       HANGUL SYLLABLE JYEO\r\n\t\t0xC854 == code || // Lo       HANGUL SYLLABLE JYE\r\n\t\t0xC870 == code || // Lo       HANGUL SYLLABLE JO\r\n\t\t0xC88C == code || // Lo       HANGUL SYLLABLE JWA\r\n\t\t0xC8A8 == code || // Lo       HANGUL SYLLABLE JWAE\r\n\t\t0xC8C4 == code || // Lo       HANGUL SYLLABLE JOE\r\n\t\t0xC8E0 == code || // Lo       HANGUL SYLLABLE JYO\r\n\t\t0xC8FC == code || // Lo       HANGUL SYLLABLE JU\r\n\t\t0xC918 == code || // Lo       HANGUL SYLLABLE JWEO\r\n\t\t0xC934 == code || // Lo       HANGUL SYLLABLE JWE\r\n\t\t0xC950 == code || // Lo       HANGUL SYLLABLE JWI\r\n\t\t0xC96C == code || // Lo       HANGUL SYLLABLE JYU\r\n\t\t0xC988 == code || // Lo       HANGUL SYLLABLE JEU\r\n\t\t0xC9A4 == code || // Lo       HANGUL SYLLABLE JYI\r\n\t\t0xC9C0 == code || // Lo       HANGUL SYLLABLE JI\r\n\t\t0xC9DC == code || // Lo       HANGUL SYLLABLE JJA\r\n\t\t0xC9F8 == code || // Lo       HANGUL SYLLABLE JJAE\r\n\t\t0xCA14 == code || // Lo       HANGUL SYLLABLE JJYA\r\n\t\t0xCA30 == code || // Lo       HANGUL SYLLABLE JJYAE\r\n\t\t0xCA4C == code || // Lo       HANGUL SYLLABLE JJEO\r\n\t\t0xCA68 == code || // Lo       HANGUL SYLLABLE JJE\r\n\t\t0xCA84 == code || // Lo       HANGUL SYLLABLE JJYEO\r\n\t\t0xCAA0 == code || // Lo       HANGUL SYLLABLE JJYE\r\n\t\t0xCABC == code || // Lo       HANGUL SYLLABLE JJO\r\n\t\t0xCAD8 == code || // Lo       HANGUL SYLLABLE JJWA\r\n\t\t0xCAF4 == code || // Lo       HANGUL SYLLABLE JJWAE\r\n\t\t0xCB10 == code || // Lo       HANGUL SYLLABLE JJOE\r\n\t\t0xCB2C == code || // Lo       HANGUL SYLLABLE JJYO\r\n\t\t0xCB48 == code || // Lo       HANGUL SYLLABLE JJU\r\n\t\t0xCB64 == code || // Lo       HANGUL SYLLABLE JJWEO\r\n\t\t0xCB80 == code || // Lo       HANGUL SYLLABLE JJWE\r\n\t\t0xCB9C == code || // Lo       HANGUL SYLLABLE JJWI\r\n\t\t0xCBB8 == code || // Lo       HANGUL SYLLABLE JJYU\r\n\t\t0xCBD4 == code || // Lo       HANGUL SYLLABLE JJEU\r\n\t\t0xCBF0 == code || // Lo       HANGUL SYLLABLE JJYI\r\n\t\t0xCC0C == code || // Lo       HANGUL SYLLABLE JJI\r\n\t\t0xCC28 == code || // Lo       HANGUL SYLLABLE CA\r\n\t\t0xCC44 == code || // Lo       HANGUL SYLLABLE CAE\r\n\t\t0xCC60 == code || // Lo       HANGUL SYLLABLE CYA\r\n\t\t0xCC7C == code || // Lo       HANGUL SYLLABLE CYAE\r\n\t\t0xCC98 == code || // Lo       HANGUL SYLLABLE CEO\r\n\t\t0xCCB4 == code || // Lo       HANGUL SYLLABLE CE\r\n\t\t0xCCD0 == code || // Lo       HANGUL SYLLABLE CYEO\r\n\t\t0xCCEC == code || // Lo       HANGUL SYLLABLE CYE\r\n\t\t0xCD08 == code || // Lo       HANGUL SYLLABLE CO\r\n\t\t0xCD24 == code || // Lo       HANGUL SYLLABLE CWA\r\n\t\t0xCD40 == code || // Lo       HANGUL SYLLABLE CWAE\r\n\t\t0xCD5C == code || // Lo       HANGUL SYLLABLE COE\r\n\t\t0xCD78 == code || // Lo       HANGUL SYLLABLE CYO\r\n\t\t0xCD94 == code || // Lo       HANGUL SYLLABLE CU\r\n\t\t0xCDB0 == code || // Lo       HANGUL SYLLABLE CWEO\r\n\t\t0xCDCC == code || // Lo       HANGUL SYLLABLE CWE\r\n\t\t0xCDE8 == code || // Lo       HANGUL SYLLABLE CWI\r\n\t\t0xCE04 == code || // Lo       HANGUL SYLLABLE CYU\r\n\t\t0xCE20 == code || // Lo       HANGUL SYLLABLE CEU\r\n\t\t0xCE3C == code || // Lo       HANGUL SYLLABLE CYI\r\n\t\t0xCE58 == code || // Lo       HANGUL SYLLABLE CI\r\n\t\t0xCE74 == code || // Lo       HANGUL SYLLABLE KA\r\n\t\t0xCE90 == code || // Lo       HANGUL SYLLABLE KAE\r\n\t\t0xCEAC == code || // Lo       HANGUL SYLLABLE KYA\r\n\t\t0xCEC8 == code || // Lo       HANGUL SYLLABLE KYAE\r\n\t\t0xCEE4 == code || // Lo       HANGUL SYLLABLE KEO\r\n\t\t0xCF00 == code || // Lo       HANGUL SYLLABLE KE\r\n\t\t0xCF1C == code || // Lo       HANGUL SYLLABLE KYEO\r\n\t\t0xCF38 == code || // Lo       HANGUL SYLLABLE KYE\r\n\t\t0xCF54 == code || // Lo       HANGUL SYLLABLE KO\r\n\t\t0xCF70 == code || // Lo       HANGUL SYLLABLE KWA\r\n\t\t0xCF8C == code || // Lo       HANGUL SYLLABLE KWAE\r\n\t\t0xCFA8 == code || // Lo       HANGUL SYLLABLE KOE\r\n\t\t0xCFC4 == code || // Lo       HANGUL SYLLABLE KYO\r\n\t\t0xCFE0 == code || // Lo       HANGUL SYLLABLE KU\r\n\t\t0xCFFC == code || // Lo       HANGUL SYLLABLE KWEO\r\n\t\t0xD018 == code || // Lo       HANGUL SYLLABLE KWE\r\n\t\t0xD034 == code || // Lo       HANGUL SYLLABLE KWI\r\n\t\t0xD050 == code || // Lo       HANGUL SYLLABLE KYU\r\n\t\t0xD06C == code || // Lo       HANGUL SYLLABLE KEU\r\n\t\t0xD088 == code || // Lo       HANGUL SYLLABLE KYI\r\n\t\t0xD0A4 == code || // Lo       HANGUL SYLLABLE KI\r\n\t\t0xD0C0 == code || // Lo       HANGUL SYLLABLE TA\r\n\t\t0xD0DC == code || // Lo       HANGUL SYLLABLE TAE\r\n\t\t0xD0F8 == code || // Lo       HANGUL SYLLABLE TYA\r\n\t\t0xD114 == code || // Lo       HANGUL SYLLABLE TYAE\r\n\t\t0xD130 == code || // Lo       HANGUL SYLLABLE TEO\r\n\t\t0xD14C == code || // Lo       HANGUL SYLLABLE TE\r\n\t\t0xD168 == code || // Lo       HANGUL SYLLABLE TYEO\r\n\t\t0xD184 == code || // Lo       HANGUL SYLLABLE TYE\r\n\t\t0xD1A0 == code || // Lo       HANGUL SYLLABLE TO\r\n\t\t0xD1BC == code || // Lo       HANGUL SYLLABLE TWA\r\n\t\t0xD1D8 == code || // Lo       HANGUL SYLLABLE TWAE\r\n\t\t0xD1F4 == code || // Lo       HANGUL SYLLABLE TOE\r\n\t\t0xD210 == code || // Lo       HANGUL SYLLABLE TYO\r\n\t\t0xD22C == code || // Lo       HANGUL SYLLABLE TU\r\n\t\t0xD248 == code || // Lo       HANGUL SYLLABLE TWEO\r\n\t\t0xD264 == code || // Lo       HANGUL SYLLABLE TWE\r\n\t\t0xD280 == code || // Lo       HANGUL SYLLABLE TWI\r\n\t\t0xD29C == code || // Lo       HANGUL SYLLABLE TYU\r\n\t\t0xD2B8 == code || // Lo       HANGUL SYLLABLE TEU\r\n\t\t0xD2D4 == code || // Lo       HANGUL SYLLABLE TYI\r\n\t\t0xD2F0 == code || // Lo       HANGUL SYLLABLE TI\r\n\t\t0xD30C == code || // Lo       HANGUL SYLLABLE PA\r\n\t\t0xD328 == code || // Lo       HANGUL SYLLABLE PAE\r\n\t\t0xD344 == code || // Lo       HANGUL SYLLABLE PYA\r\n\t\t0xD360 == code || // Lo       HANGUL SYLLABLE PYAE\r\n\t\t0xD37C == code || // Lo       HANGUL SYLLABLE PEO\r\n\t\t0xD398 == code || // Lo       HANGUL SYLLABLE PE\r\n\t\t0xD3B4 == code || // Lo       HANGUL SYLLABLE PYEO\r\n\t\t0xD3D0 == code || // Lo       HANGUL SYLLABLE PYE\r\n\t\t0xD3EC == code || // Lo       HANGUL SYLLABLE PO\r\n\t\t0xD408 == code || // Lo       HANGUL SYLLABLE PWA\r\n\t\t0xD424 == code || // Lo       HANGUL SYLLABLE PWAE\r\n\t\t0xD440 == code || // Lo       HANGUL SYLLABLE POE\r\n\t\t0xD45C == code || // Lo       HANGUL SYLLABLE PYO\r\n\t\t0xD478 == code || // Lo       HANGUL SYLLABLE PU\r\n\t\t0xD494 == code || // Lo       HANGUL SYLLABLE PWEO\r\n\t\t0xD4B0 == code || // Lo       HANGUL SYLLABLE PWE\r\n\t\t0xD4CC == code || // Lo       HANGUL SYLLABLE PWI\r\n\t\t0xD4E8 == code || // Lo       HANGUL SYLLABLE PYU\r\n\t\t0xD504 == code || // Lo       HANGUL SYLLABLE PEU\r\n\t\t0xD520 == code || // Lo       HANGUL SYLLABLE PYI\r\n\t\t0xD53C == code || // Lo       HANGUL SYLLABLE PI\r\n\t\t0xD558 == code || // Lo       HANGUL SYLLABLE HA\r\n\t\t0xD574 == code || // Lo       HANGUL SYLLABLE HAE\r\n\t\t0xD590 == code || // Lo       HANGUL SYLLABLE HYA\r\n\t\t0xD5AC == code || // Lo       HANGUL SYLLABLE HYAE\r\n\t\t0xD5C8 == code || // Lo       HANGUL SYLLABLE HEO\r\n\t\t0xD5E4 == code || // Lo       HANGUL SYLLABLE HE\r\n\t\t0xD600 == code || // Lo       HANGUL SYLLABLE HYEO\r\n\t\t0xD61C == code || // Lo       HANGUL SYLLABLE HYE\r\n\t\t0xD638 == code || // Lo       HANGUL SYLLABLE HO\r\n\t\t0xD654 == code || // Lo       HANGUL SYLLABLE HWA\r\n\t\t0xD670 == code || // Lo       HANGUL SYLLABLE HWAE\r\n\t\t0xD68C == code || // Lo       HANGUL SYLLABLE HOE\r\n\t\t0xD6A8 == code || // Lo       HANGUL SYLLABLE HYO\r\n\t\t0xD6C4 == code || // Lo       HANGUL SYLLABLE HU\r\n\t\t0xD6E0 == code || // Lo       HANGUL SYLLABLE HWEO\r\n\t\t0xD6FC == code || // Lo       HANGUL SYLLABLE HWE\r\n\t\t0xD718 == code || // Lo       HANGUL SYLLABLE HWI\r\n\t\t0xD734 == code || // Lo       HANGUL SYLLABLE HYU\r\n\t\t0xD750 == code || // Lo       HANGUL SYLLABLE HEU\r\n\t\t0xD76C == code || // Lo       HANGUL SYLLABLE HYI\r\n\t\t0xD788 == code // Lo       HANGUL SYLLABLE HI\r\n\t\t){\r\n\t\t\treturn LV;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t(0xAC01 <= code && code <= 0xAC1B) || // Lo  [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH\r\n\t\t(0xAC1D <= code && code <= 0xAC37) || // Lo  [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH\r\n\t\t(0xAC39 <= code && code <= 0xAC53) || // Lo  [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH\r\n\t\t(0xAC55 <= code && code <= 0xAC6F) || // Lo  [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH\r\n\t\t(0xAC71 <= code && code <= 0xAC8B) || // Lo  [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH\r\n\t\t(0xAC8D <= code && code <= 0xACA7) || // Lo  [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH\r\n\t\t(0xACA9 <= code && code <= 0xACC3) || // Lo  [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH\r\n\t\t(0xACC5 <= code && code <= 0xACDF) || // Lo  [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH\r\n\t\t(0xACE1 <= code && code <= 0xACFB) || // Lo  [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH\r\n\t\t(0xACFD <= code && code <= 0xAD17) || // Lo  [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH\r\n\t\t(0xAD19 <= code && code <= 0xAD33) || // Lo  [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH\r\n\t\t(0xAD35 <= code && code <= 0xAD4F) || // Lo  [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH\r\n\t\t(0xAD51 <= code && code <= 0xAD6B) || // Lo  [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH\r\n\t\t(0xAD6D <= code && code <= 0xAD87) || // Lo  [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH\r\n\t\t(0xAD89 <= code && code <= 0xADA3) || // Lo  [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH\r\n\t\t(0xADA5 <= code && code <= 0xADBF) || // Lo  [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH\r\n\t\t(0xADC1 <= code && code <= 0xADDB) || // Lo  [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH\r\n\t\t(0xADDD <= code && code <= 0xADF7) || // Lo  [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH\r\n\t\t(0xADF9 <= code && code <= 0xAE13) || // Lo  [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH\r\n\t\t(0xAE15 <= code && code <= 0xAE2F) || // Lo  [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH\r\n\t\t(0xAE31 <= code && code <= 0xAE4B) || // Lo  [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH\r\n\t\t(0xAE4D <= code && code <= 0xAE67) || // Lo  [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH\r\n\t\t(0xAE69 <= code && code <= 0xAE83) || // Lo  [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH\r\n\t\t(0xAE85 <= code && code <= 0xAE9F) || // Lo  [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH\r\n\t\t(0xAEA1 <= code && code <= 0xAEBB) || // Lo  [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH\r\n\t\t(0xAEBD <= code && code <= 0xAED7) || // Lo  [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH\r\n\t\t(0xAED9 <= code && code <= 0xAEF3) || // Lo  [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH\r\n\t\t(0xAEF5 <= code && code <= 0xAF0F) || // Lo  [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH\r\n\t\t(0xAF11 <= code && code <= 0xAF2B) || // Lo  [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH\r\n\t\t(0xAF2D <= code && code <= 0xAF47) || // Lo  [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH\r\n\t\t(0xAF49 <= code && code <= 0xAF63) || // Lo  [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH\r\n\t\t(0xAF65 <= code && code <= 0xAF7F) || // Lo  [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH\r\n\t\t(0xAF81 <= code && code <= 0xAF9B) || // Lo  [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH\r\n\t\t(0xAF9D <= code && code <= 0xAFB7) || // Lo  [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH\r\n\t\t(0xAFB9 <= code && code <= 0xAFD3) || // Lo  [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH\r\n\t\t(0xAFD5 <= code && code <= 0xAFEF) || // Lo  [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH\r\n\t\t(0xAFF1 <= code && code <= 0xB00B) || // Lo  [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH\r\n\t\t(0xB00D <= code && code <= 0xB027) || // Lo  [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH\r\n\t\t(0xB029 <= code && code <= 0xB043) || // Lo  [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH\r\n\t\t(0xB045 <= code && code <= 0xB05F) || // Lo  [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH\r\n\t\t(0xB061 <= code && code <= 0xB07B) || // Lo  [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH\r\n\t\t(0xB07D <= code && code <= 0xB097) || // Lo  [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH\r\n\t\t(0xB099 <= code && code <= 0xB0B3) || // Lo  [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH\r\n\t\t(0xB0B5 <= code && code <= 0xB0CF) || // Lo  [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH\r\n\t\t(0xB0D1 <= code && code <= 0xB0EB) || // Lo  [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH\r\n\t\t(0xB0ED <= code && code <= 0xB107) || // Lo  [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH\r\n\t\t(0xB109 <= code && code <= 0xB123) || // Lo  [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH\r\n\t\t(0xB125 <= code && code <= 0xB13F) || // Lo  [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH\r\n\t\t(0xB141 <= code && code <= 0xB15B) || // Lo  [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH\r\n\t\t(0xB15D <= code && code <= 0xB177) || // Lo  [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH\r\n\t\t(0xB179 <= code && code <= 0xB193) || // Lo  [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH\r\n\t\t(0xB195 <= code && code <= 0xB1AF) || // Lo  [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH\r\n\t\t(0xB1B1 <= code && code <= 0xB1CB) || // Lo  [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH\r\n\t\t(0xB1CD <= code && code <= 0xB1E7) || // Lo  [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH\r\n\t\t(0xB1E9 <= code && code <= 0xB203) || // Lo  [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH\r\n\t\t(0xB205 <= code && code <= 0xB21F) || // Lo  [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH\r\n\t\t(0xB221 <= code && code <= 0xB23B) || // Lo  [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH\r\n\t\t(0xB23D <= code && code <= 0xB257) || // Lo  [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH\r\n\t\t(0xB259 <= code && code <= 0xB273) || // Lo  [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH\r\n\t\t(0xB275 <= code && code <= 0xB28F) || // Lo  [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH\r\n\t\t(0xB291 <= code && code <= 0xB2AB) || // Lo  [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH\r\n\t\t(0xB2AD <= code && code <= 0xB2C7) || // Lo  [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH\r\n\t\t(0xB2C9 <= code && code <= 0xB2E3) || // Lo  [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH\r\n\t\t(0xB2E5 <= code && code <= 0xB2FF) || // Lo  [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH\r\n\t\t(0xB301 <= code && code <= 0xB31B) || // Lo  [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH\r\n\t\t(0xB31D <= code && code <= 0xB337) || // Lo  [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH\r\n\t\t(0xB339 <= code && code <= 0xB353) || // Lo  [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH\r\n\t\t(0xB355 <= code && code <= 0xB36F) || // Lo  [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH\r\n\t\t(0xB371 <= code && code <= 0xB38B) || // Lo  [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH\r\n\t\t(0xB38D <= code && code <= 0xB3A7) || // Lo  [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH\r\n\t\t(0xB3A9 <= code && code <= 0xB3C3) || // Lo  [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH\r\n\t\t(0xB3C5 <= code && code <= 0xB3DF) || // Lo  [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH\r\n\t\t(0xB3E1 <= code && code <= 0xB3FB) || // Lo  [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH\r\n\t\t(0xB3FD <= code && code <= 0xB417) || // Lo  [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH\r\n\t\t(0xB419 <= code && code <= 0xB433) || // Lo  [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH\r\n\t\t(0xB435 <= code && code <= 0xB44F) || // Lo  [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH\r\n\t\t(0xB451 <= code && code <= 0xB46B) || // Lo  [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH\r\n\t\t(0xB46D <= code && code <= 0xB487) || // Lo  [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH\r\n\t\t(0xB489 <= code && code <= 0xB4A3) || // Lo  [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH\r\n\t\t(0xB4A5 <= code && code <= 0xB4BF) || // Lo  [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH\r\n\t\t(0xB4C1 <= code && code <= 0xB4DB) || // Lo  [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH\r\n\t\t(0xB4DD <= code && code <= 0xB4F7) || // Lo  [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH\r\n\t\t(0xB4F9 <= code && code <= 0xB513) || // Lo  [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH\r\n\t\t(0xB515 <= code && code <= 0xB52F) || // Lo  [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH\r\n\t\t(0xB531 <= code && code <= 0xB54B) || // Lo  [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH\r\n\t\t(0xB54D <= code && code <= 0xB567) || // Lo  [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH\r\n\t\t(0xB569 <= code && code <= 0xB583) || // Lo  [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH\r\n\t\t(0xB585 <= code && code <= 0xB59F) || // Lo  [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH\r\n\t\t(0xB5A1 <= code && code <= 0xB5BB) || // Lo  [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH\r\n\t\t(0xB5BD <= code && code <= 0xB5D7) || // Lo  [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH\r\n\t\t(0xB5D9 <= code && code <= 0xB5F3) || // Lo  [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH\r\n\t\t(0xB5F5 <= code && code <= 0xB60F) || // Lo  [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH\r\n\t\t(0xB611 <= code && code <= 0xB62B) || // Lo  [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH\r\n\t\t(0xB62D <= code && code <= 0xB647) || // Lo  [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH\r\n\t\t(0xB649 <= code && code <= 0xB663) || // Lo  [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH\r\n\t\t(0xB665 <= code && code <= 0xB67F) || // Lo  [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH\r\n\t\t(0xB681 <= code && code <= 0xB69B) || // Lo  [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH\r\n\t\t(0xB69D <= code && code <= 0xB6B7) || // Lo  [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH\r\n\t\t(0xB6B9 <= code && code <= 0xB6D3) || // Lo  [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH\r\n\t\t(0xB6D5 <= code && code <= 0xB6EF) || // Lo  [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH\r\n\t\t(0xB6F1 <= code && code <= 0xB70B) || // Lo  [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH\r\n\t\t(0xB70D <= code && code <= 0xB727) || // Lo  [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH\r\n\t\t(0xB729 <= code && code <= 0xB743) || // Lo  [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH\r\n\t\t(0xB745 <= code && code <= 0xB75F) || // Lo  [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH\r\n\t\t(0xB761 <= code && code <= 0xB77B) || // Lo  [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH\r\n\t\t(0xB77D <= code && code <= 0xB797) || // Lo  [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH\r\n\t\t(0xB799 <= code && code <= 0xB7B3) || // Lo  [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH\r\n\t\t(0xB7B5 <= code && code <= 0xB7CF) || // Lo  [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH\r\n\t\t(0xB7D1 <= code && code <= 0xB7EB) || // Lo  [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH\r\n\t\t(0xB7ED <= code && code <= 0xB807) || // Lo  [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH\r\n\t\t(0xB809 <= code && code <= 0xB823) || // Lo  [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH\r\n\t\t(0xB825 <= code && code <= 0xB83F) || // Lo  [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH\r\n\t\t(0xB841 <= code && code <= 0xB85B) || // Lo  [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH\r\n\t\t(0xB85D <= code && code <= 0xB877) || // Lo  [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH\r\n\t\t(0xB879 <= code && code <= 0xB893) || // Lo  [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH\r\n\t\t(0xB895 <= code && code <= 0xB8AF) || // Lo  [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH\r\n\t\t(0xB8B1 <= code && code <= 0xB8CB) || // Lo  [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH\r\n\t\t(0xB8CD <= code && code <= 0xB8E7) || // Lo  [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH\r\n\t\t(0xB8E9 <= code && code <= 0xB903) || // Lo  [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH\r\n\t\t(0xB905 <= code && code <= 0xB91F) || // Lo  [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH\r\n\t\t(0xB921 <= code && code <= 0xB93B) || // Lo  [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH\r\n\t\t(0xB93D <= code && code <= 0xB957) || // Lo  [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH\r\n\t\t(0xB959 <= code && code <= 0xB973) || // Lo  [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH\r\n\t\t(0xB975 <= code && code <= 0xB98F) || // Lo  [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH\r\n\t\t(0xB991 <= code && code <= 0xB9AB) || // Lo  [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH\r\n\t\t(0xB9AD <= code && code <= 0xB9C7) || // Lo  [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH\r\n\t\t(0xB9C9 <= code && code <= 0xB9E3) || // Lo  [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH\r\n\t\t(0xB9E5 <= code && code <= 0xB9FF) || // Lo  [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH\r\n\t\t(0xBA01 <= code && code <= 0xBA1B) || // Lo  [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH\r\n\t\t(0xBA1D <= code && code <= 0xBA37) || // Lo  [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH\r\n\t\t(0xBA39 <= code && code <= 0xBA53) || // Lo  [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH\r\n\t\t(0xBA55 <= code && code <= 0xBA6F) || // Lo  [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH\r\n\t\t(0xBA71 <= code && code <= 0xBA8B) || // Lo  [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH\r\n\t\t(0xBA8D <= code && code <= 0xBAA7) || // Lo  [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH\r\n\t\t(0xBAA9 <= code && code <= 0xBAC3) || // Lo  [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH\r\n\t\t(0xBAC5 <= code && code <= 0xBADF) || // Lo  [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH\r\n\t\t(0xBAE1 <= code && code <= 0xBAFB) || // Lo  [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH\r\n\t\t(0xBAFD <= code && code <= 0xBB17) || // Lo  [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH\r\n\t\t(0xBB19 <= code && code <= 0xBB33) || // Lo  [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH\r\n\t\t(0xBB35 <= code && code <= 0xBB4F) || // Lo  [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH\r\n\t\t(0xBB51 <= code && code <= 0xBB6B) || // Lo  [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH\r\n\t\t(0xBB6D <= code && code <= 0xBB87) || // Lo  [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH\r\n\t\t(0xBB89 <= code && code <= 0xBBA3) || // Lo  [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH\r\n\t\t(0xBBA5 <= code && code <= 0xBBBF) || // Lo  [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH\r\n\t\t(0xBBC1 <= code && code <= 0xBBDB) || // Lo  [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH\r\n\t\t(0xBBDD <= code && code <= 0xBBF7) || // Lo  [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH\r\n\t\t(0xBBF9 <= code && code <= 0xBC13) || // Lo  [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH\r\n\t\t(0xBC15 <= code && code <= 0xBC2F) || // Lo  [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH\r\n\t\t(0xBC31 <= code && code <= 0xBC4B) || // Lo  [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH\r\n\t\t(0xBC4D <= code && code <= 0xBC67) || // Lo  [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH\r\n\t\t(0xBC69 <= code && code <= 0xBC83) || // Lo  [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH\r\n\t\t(0xBC85 <= code && code <= 0xBC9F) || // Lo  [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH\r\n\t\t(0xBCA1 <= code && code <= 0xBCBB) || // Lo  [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH\r\n\t\t(0xBCBD <= code && code <= 0xBCD7) || // Lo  [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH\r\n\t\t(0xBCD9 <= code && code <= 0xBCF3) || // Lo  [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH\r\n\t\t(0xBCF5 <= code && code <= 0xBD0F) || // Lo  [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH\r\n\t\t(0xBD11 <= code && code <= 0xBD2B) || // Lo  [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH\r\n\t\t(0xBD2D <= code && code <= 0xBD47) || // Lo  [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH\r\n\t\t(0xBD49 <= code && code <= 0xBD63) || // Lo  [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH\r\n\t\t(0xBD65 <= code && code <= 0xBD7F) || // Lo  [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH\r\n\t\t(0xBD81 <= code && code <= 0xBD9B) || // Lo  [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH\r\n\t\t(0xBD9D <= code && code <= 0xBDB7) || // Lo  [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH\r\n\t\t(0xBDB9 <= code && code <= 0xBDD3) || // Lo  [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH\r\n\t\t(0xBDD5 <= code && code <= 0xBDEF) || // Lo  [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH\r\n\t\t(0xBDF1 <= code && code <= 0xBE0B) || // Lo  [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH\r\n\t\t(0xBE0D <= code && code <= 0xBE27) || // Lo  [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH\r\n\t\t(0xBE29 <= code && code <= 0xBE43) || // Lo  [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH\r\n\t\t(0xBE45 <= code && code <= 0xBE5F) || // Lo  [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH\r\n\t\t(0xBE61 <= code && code <= 0xBE7B) || // Lo  [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH\r\n\t\t(0xBE7D <= code && code <= 0xBE97) || // Lo  [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH\r\n\t\t(0xBE99 <= code && code <= 0xBEB3) || // Lo  [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH\r\n\t\t(0xBEB5 <= code && code <= 0xBECF) || // Lo  [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH\r\n\t\t(0xBED1 <= code && code <= 0xBEEB) || // Lo  [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH\r\n\t\t(0xBEED <= code && code <= 0xBF07) || // Lo  [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH\r\n\t\t(0xBF09 <= code && code <= 0xBF23) || // Lo  [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH\r\n\t\t(0xBF25 <= code && code <= 0xBF3F) || // Lo  [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH\r\n\t\t(0xBF41 <= code && code <= 0xBF5B) || // Lo  [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH\r\n\t\t(0xBF5D <= code && code <= 0xBF77) || // Lo  [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH\r\n\t\t(0xBF79 <= code && code <= 0xBF93) || // Lo  [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH\r\n\t\t(0xBF95 <= code && code <= 0xBFAF) || // Lo  [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH\r\n\t\t(0xBFB1 <= code && code <= 0xBFCB) || // Lo  [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH\r\n\t\t(0xBFCD <= code && code <= 0xBFE7) || // Lo  [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH\r\n\t\t(0xBFE9 <= code && code <= 0xC003) || // Lo  [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH\r\n\t\t(0xC005 <= code && code <= 0xC01F) || // Lo  [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH\r\n\t\t(0xC021 <= code && code <= 0xC03B) || // Lo  [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH\r\n\t\t(0xC03D <= code && code <= 0xC057) || // Lo  [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH\r\n\t\t(0xC059 <= code && code <= 0xC073) || // Lo  [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH\r\n\t\t(0xC075 <= code && code <= 0xC08F) || // Lo  [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH\r\n\t\t(0xC091 <= code && code <= 0xC0AB) || // Lo  [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH\r\n\t\t(0xC0AD <= code && code <= 0xC0C7) || // Lo  [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH\r\n\t\t(0xC0C9 <= code && code <= 0xC0E3) || // Lo  [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH\r\n\t\t(0xC0E5 <= code && code <= 0xC0FF) || // Lo  [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH\r\n\t\t(0xC101 <= code && code <= 0xC11B) || // Lo  [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH\r\n\t\t(0xC11D <= code && code <= 0xC137) || // Lo  [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH\r\n\t\t(0xC139 <= code && code <= 0xC153) || // Lo  [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH\r\n\t\t(0xC155 <= code && code <= 0xC16F) || // Lo  [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH\r\n\t\t(0xC171 <= code && code <= 0xC18B) || // Lo  [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH\r\n\t\t(0xC18D <= code && code <= 0xC1A7) || // Lo  [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH\r\n\t\t(0xC1A9 <= code && code <= 0xC1C3) || // Lo  [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH\r\n\t\t(0xC1C5 <= code && code <= 0xC1DF) || // Lo  [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH\r\n\t\t(0xC1E1 <= code && code <= 0xC1FB) || // Lo  [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH\r\n\t\t(0xC1FD <= code && code <= 0xC217) || // Lo  [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH\r\n\t\t(0xC219 <= code && code <= 0xC233) || // Lo  [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH\r\n\t\t(0xC235 <= code && code <= 0xC24F) || // Lo  [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH\r\n\t\t(0xC251 <= code && code <= 0xC26B) || // Lo  [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH\r\n\t\t(0xC26D <= code && code <= 0xC287) || // Lo  [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH\r\n\t\t(0xC289 <= code && code <= 0xC2A3) || // Lo  [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH\r\n\t\t(0xC2A5 <= code && code <= 0xC2BF) || // Lo  [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH\r\n\t\t(0xC2C1 <= code && code <= 0xC2DB) || // Lo  [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH\r\n\t\t(0xC2DD <= code && code <= 0xC2F7) || // Lo  [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH\r\n\t\t(0xC2F9 <= code && code <= 0xC313) || // Lo  [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH\r\n\t\t(0xC315 <= code && code <= 0xC32F) || // Lo  [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH\r\n\t\t(0xC331 <= code && code <= 0xC34B) || // Lo  [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH\r\n\t\t(0xC34D <= code && code <= 0xC367) || // Lo  [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH\r\n\t\t(0xC369 <= code && code <= 0xC383) || // Lo  [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH\r\n\t\t(0xC385 <= code && code <= 0xC39F) || // Lo  [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH\r\n\t\t(0xC3A1 <= code && code <= 0xC3BB) || // Lo  [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH\r\n\t\t(0xC3BD <= code && code <= 0xC3D7) || // Lo  [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH\r\n\t\t(0xC3D9 <= code && code <= 0xC3F3) || // Lo  [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH\r\n\t\t(0xC3F5 <= code && code <= 0xC40F) || // Lo  [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH\r\n\t\t(0xC411 <= code && code <= 0xC42B) || // Lo  [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH\r\n\t\t(0xC42D <= code && code <= 0xC447) || // Lo  [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH\r\n\t\t(0xC449 <= code && code <= 0xC463) || // Lo  [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH\r\n\t\t(0xC465 <= code && code <= 0xC47F) || // Lo  [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH\r\n\t\t(0xC481 <= code && code <= 0xC49B) || // Lo  [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH\r\n\t\t(0xC49D <= code && code <= 0xC4B7) || // Lo  [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH\r\n\t\t(0xC4B9 <= code && code <= 0xC4D3) || // Lo  [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH\r\n\t\t(0xC4D5 <= code && code <= 0xC4EF) || // Lo  [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH\r\n\t\t(0xC4F1 <= code && code <= 0xC50B) || // Lo  [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH\r\n\t\t(0xC50D <= code && code <= 0xC527) || // Lo  [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH\r\n\t\t(0xC529 <= code && code <= 0xC543) || // Lo  [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH\r\n\t\t(0xC545 <= code && code <= 0xC55F) || // Lo  [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH\r\n\t\t(0xC561 <= code && code <= 0xC57B) || // Lo  [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH\r\n\t\t(0xC57D <= code && code <= 0xC597) || // Lo  [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH\r\n\t\t(0xC599 <= code && code <= 0xC5B3) || // Lo  [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH\r\n\t\t(0xC5B5 <= code && code <= 0xC5CF) || // Lo  [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH\r\n\t\t(0xC5D1 <= code && code <= 0xC5EB) || // Lo  [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH\r\n\t\t(0xC5ED <= code && code <= 0xC607) || // Lo  [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH\r\n\t\t(0xC609 <= code && code <= 0xC623) || // Lo  [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH\r\n\t\t(0xC625 <= code && code <= 0xC63F) || // Lo  [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH\r\n\t\t(0xC641 <= code && code <= 0xC65B) || // Lo  [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH\r\n\t\t(0xC65D <= code && code <= 0xC677) || // Lo  [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH\r\n\t\t(0xC679 <= code && code <= 0xC693) || // Lo  [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH\r\n\t\t(0xC695 <= code && code <= 0xC6AF) || // Lo  [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH\r\n\t\t(0xC6B1 <= code && code <= 0xC6CB) || // Lo  [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH\r\n\t\t(0xC6CD <= code && code <= 0xC6E7) || // Lo  [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH\r\n\t\t(0xC6E9 <= code && code <= 0xC703) || // Lo  [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH\r\n\t\t(0xC705 <= code && code <= 0xC71F) || // Lo  [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH\r\n\t\t(0xC721 <= code && code <= 0xC73B) || // Lo  [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH\r\n\t\t(0xC73D <= code && code <= 0xC757) || // Lo  [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH\r\n\t\t(0xC759 <= code && code <= 0xC773) || // Lo  [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH\r\n\t\t(0xC775 <= code && code <= 0xC78F) || // Lo  [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH\r\n\t\t(0xC791 <= code && code <= 0xC7AB) || // Lo  [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH\r\n\t\t(0xC7AD <= code && code <= 0xC7C7) || // Lo  [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH\r\n\t\t(0xC7C9 <= code && code <= 0xC7E3) || // Lo  [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH\r\n\t\t(0xC7E5 <= code && code <= 0xC7FF) || // Lo  [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH\r\n\t\t(0xC801 <= code && code <= 0xC81B) || // Lo  [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH\r\n\t\t(0xC81D <= code && code <= 0xC837) || // Lo  [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH\r\n\t\t(0xC839 <= code && code <= 0xC853) || // Lo  [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH\r\n\t\t(0xC855 <= code && code <= 0xC86F) || // Lo  [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH\r\n\t\t(0xC871 <= code && code <= 0xC88B) || // Lo  [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH\r\n\t\t(0xC88D <= code && code <= 0xC8A7) || // Lo  [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH\r\n\t\t(0xC8A9 <= code && code <= 0xC8C3) || // Lo  [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH\r\n\t\t(0xC8C5 <= code && code <= 0xC8DF) || // Lo  [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH\r\n\t\t(0xC8E1 <= code && code <= 0xC8FB) || // Lo  [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH\r\n\t\t(0xC8FD <= code && code <= 0xC917) || // Lo  [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH\r\n\t\t(0xC919 <= code && code <= 0xC933) || // Lo  [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH\r\n\t\t(0xC935 <= code && code <= 0xC94F) || // Lo  [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH\r\n\t\t(0xC951 <= code && code <= 0xC96B) || // Lo  [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH\r\n\t\t(0xC96D <= code && code <= 0xC987) || // Lo  [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH\r\n\t\t(0xC989 <= code && code <= 0xC9A3) || // Lo  [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH\r\n\t\t(0xC9A5 <= code && code <= 0xC9BF) || // Lo  [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH\r\n\t\t(0xC9C1 <= code && code <= 0xC9DB) || // Lo  [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH\r\n\t\t(0xC9DD <= code && code <= 0xC9F7) || // Lo  [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH\r\n\t\t(0xC9F9 <= code && code <= 0xCA13) || // Lo  [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH\r\n\t\t(0xCA15 <= code && code <= 0xCA2F) || // Lo  [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH\r\n\t\t(0xCA31 <= code && code <= 0xCA4B) || // Lo  [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH\r\n\t\t(0xCA4D <= code && code <= 0xCA67) || // Lo  [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH\r\n\t\t(0xCA69 <= code && code <= 0xCA83) || // Lo  [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH\r\n\t\t(0xCA85 <= code && code <= 0xCA9F) || // Lo  [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH\r\n\t\t(0xCAA1 <= code && code <= 0xCABB) || // Lo  [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH\r\n\t\t(0xCABD <= code && code <= 0xCAD7) || // Lo  [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH\r\n\t\t(0xCAD9 <= code && code <= 0xCAF3) || // Lo  [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH\r\n\t\t(0xCAF5 <= code && code <= 0xCB0F) || // Lo  [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH\r\n\t\t(0xCB11 <= code && code <= 0xCB2B) || // Lo  [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH\r\n\t\t(0xCB2D <= code && code <= 0xCB47) || // Lo  [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH\r\n\t\t(0xCB49 <= code && code <= 0xCB63) || // Lo  [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH\r\n\t\t(0xCB65 <= code && code <= 0xCB7F) || // Lo  [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH\r\n\t\t(0xCB81 <= code && code <= 0xCB9B) || // Lo  [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH\r\n\t\t(0xCB9D <= code && code <= 0xCBB7) || // Lo  [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH\r\n\t\t(0xCBB9 <= code && code <= 0xCBD3) || // Lo  [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH\r\n\t\t(0xCBD5 <= code && code <= 0xCBEF) || // Lo  [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH\r\n\t\t(0xCBF1 <= code && code <= 0xCC0B) || // Lo  [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH\r\n\t\t(0xCC0D <= code && code <= 0xCC27) || // Lo  [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH\r\n\t\t(0xCC29 <= code && code <= 0xCC43) || // Lo  [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH\r\n\t\t(0xCC45 <= code && code <= 0xCC5F) || // Lo  [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH\r\n\t\t(0xCC61 <= code && code <= 0xCC7B) || // Lo  [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH\r\n\t\t(0xCC7D <= code && code <= 0xCC97) || // Lo  [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH\r\n\t\t(0xCC99 <= code && code <= 0xCCB3) || // Lo  [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH\r\n\t\t(0xCCB5 <= code && code <= 0xCCCF) || // Lo  [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH\r\n\t\t(0xCCD1 <= code && code <= 0xCCEB) || // Lo  [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH\r\n\t\t(0xCCED <= code && code <= 0xCD07) || // Lo  [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH\r\n\t\t(0xCD09 <= code && code <= 0xCD23) || // Lo  [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH\r\n\t\t(0xCD25 <= code && code <= 0xCD3F) || // Lo  [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH\r\n\t\t(0xCD41 <= code && code <= 0xCD5B) || // Lo  [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH\r\n\t\t(0xCD5D <= code && code <= 0xCD77) || // Lo  [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH\r\n\t\t(0xCD79 <= code && code <= 0xCD93) || // Lo  [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH\r\n\t\t(0xCD95 <= code && code <= 0xCDAF) || // Lo  [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH\r\n\t\t(0xCDB1 <= code && code <= 0xCDCB) || // Lo  [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH\r\n\t\t(0xCDCD <= code && code <= 0xCDE7) || // Lo  [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH\r\n\t\t(0xCDE9 <= code && code <= 0xCE03) || // Lo  [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH\r\n\t\t(0xCE05 <= code && code <= 0xCE1F) || // Lo  [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH\r\n\t\t(0xCE21 <= code && code <= 0xCE3B) || // Lo  [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH\r\n\t\t(0xCE3D <= code && code <= 0xCE57) || // Lo  [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH\r\n\t\t(0xCE59 <= code && code <= 0xCE73) || // Lo  [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH\r\n\t\t(0xCE75 <= code && code <= 0xCE8F) || // Lo  [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH\r\n\t\t(0xCE91 <= code && code <= 0xCEAB) || // Lo  [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH\r\n\t\t(0xCEAD <= code && code <= 0xCEC7) || // Lo  [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH\r\n\t\t(0xCEC9 <= code && code <= 0xCEE3) || // Lo  [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH\r\n\t\t(0xCEE5 <= code && code <= 0xCEFF) || // Lo  [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH\r\n\t\t(0xCF01 <= code && code <= 0xCF1B) || // Lo  [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH\r\n\t\t(0xCF1D <= code && code <= 0xCF37) || // Lo  [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH\r\n\t\t(0xCF39 <= code && code <= 0xCF53) || // Lo  [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH\r\n\t\t(0xCF55 <= code && code <= 0xCF6F) || // Lo  [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH\r\n\t\t(0xCF71 <= code && code <= 0xCF8B) || // Lo  [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH\r\n\t\t(0xCF8D <= code && code <= 0xCFA7) || // Lo  [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH\r\n\t\t(0xCFA9 <= code && code <= 0xCFC3) || // Lo  [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH\r\n\t\t(0xCFC5 <= code && code <= 0xCFDF) || // Lo  [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH\r\n\t\t(0xCFE1 <= code && code <= 0xCFFB) || // Lo  [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH\r\n\t\t(0xCFFD <= code && code <= 0xD017) || // Lo  [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH\r\n\t\t(0xD019 <= code && code <= 0xD033) || // Lo  [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH\r\n\t\t(0xD035 <= code && code <= 0xD04F) || // Lo  [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH\r\n\t\t(0xD051 <= code && code <= 0xD06B) || // Lo  [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH\r\n\t\t(0xD06D <= code && code <= 0xD087) || // Lo  [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH\r\n\t\t(0xD089 <= code && code <= 0xD0A3) || // Lo  [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH\r\n\t\t(0xD0A5 <= code && code <= 0xD0BF) || // Lo  [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH\r\n\t\t(0xD0C1 <= code && code <= 0xD0DB) || // Lo  [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH\r\n\t\t(0xD0DD <= code && code <= 0xD0F7) || // Lo  [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH\r\n\t\t(0xD0F9 <= code && code <= 0xD113) || // Lo  [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH\r\n\t\t(0xD115 <= code && code <= 0xD12F) || // Lo  [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH\r\n\t\t(0xD131 <= code && code <= 0xD14B) || // Lo  [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH\r\n\t\t(0xD14D <= code && code <= 0xD167) || // Lo  [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH\r\n\t\t(0xD169 <= code && code <= 0xD183) || // Lo  [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH\r\n\t\t(0xD185 <= code && code <= 0xD19F) || // Lo  [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH\r\n\t\t(0xD1A1 <= code && code <= 0xD1BB) || // Lo  [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH\r\n\t\t(0xD1BD <= code && code <= 0xD1D7) || // Lo  [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH\r\n\t\t(0xD1D9 <= code && code <= 0xD1F3) || // Lo  [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH\r\n\t\t(0xD1F5 <= code && code <= 0xD20F) || // Lo  [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH\r\n\t\t(0xD211 <= code && code <= 0xD22B) || // Lo  [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH\r\n\t\t(0xD22D <= code && code <= 0xD247) || // Lo  [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH\r\n\t\t(0xD249 <= code && code <= 0xD263) || // Lo  [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH\r\n\t\t(0xD265 <= code && code <= 0xD27F) || // Lo  [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH\r\n\t\t(0xD281 <= code && code <= 0xD29B) || // Lo  [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH\r\n\t\t(0xD29D <= code && code <= 0xD2B7) || // Lo  [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH\r\n\t\t(0xD2B9 <= code && code <= 0xD2D3) || // Lo  [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH\r\n\t\t(0xD2D5 <= code && code <= 0xD2EF) || // Lo  [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH\r\n\t\t(0xD2F1 <= code && code <= 0xD30B) || // Lo  [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH\r\n\t\t(0xD30D <= code && code <= 0xD327) || // Lo  [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH\r\n\t\t(0xD329 <= code && code <= 0xD343) || // Lo  [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH\r\n\t\t(0xD345 <= code && code <= 0xD35F) || // Lo  [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH\r\n\t\t(0xD361 <= code && code <= 0xD37B) || // Lo  [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH\r\n\t\t(0xD37D <= code && code <= 0xD397) || // Lo  [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH\r\n\t\t(0xD399 <= code && code <= 0xD3B3) || // Lo  [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH\r\n\t\t(0xD3B5 <= code && code <= 0xD3CF) || // Lo  [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH\r\n\t\t(0xD3D1 <= code && code <= 0xD3EB) || // Lo  [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH\r\n\t\t(0xD3ED <= code && code <= 0xD407) || // Lo  [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH\r\n\t\t(0xD409 <= code && code <= 0xD423) || // Lo  [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH\r\n\t\t(0xD425 <= code && code <= 0xD43F) || // Lo  [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH\r\n\t\t(0xD441 <= code && code <= 0xD45B) || // Lo  [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH\r\n\t\t(0xD45D <= code && code <= 0xD477) || // Lo  [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH\r\n\t\t(0xD479 <= code && code <= 0xD493) || // Lo  [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH\r\n\t\t(0xD495 <= code && code <= 0xD4AF) || // Lo  [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH\r\n\t\t(0xD4B1 <= code && code <= 0xD4CB) || // Lo  [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH\r\n\t\t(0xD4CD <= code && code <= 0xD4E7) || // Lo  [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH\r\n\t\t(0xD4E9 <= code && code <= 0xD503) || // Lo  [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH\r\n\t\t(0xD505 <= code && code <= 0xD51F) || // Lo  [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH\r\n\t\t(0xD521 <= code && code <= 0xD53B) || // Lo  [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH\r\n\t\t(0xD53D <= code && code <= 0xD557) || // Lo  [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH\r\n\t\t(0xD559 <= code && code <= 0xD573) || // Lo  [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH\r\n\t\t(0xD575 <= code && code <= 0xD58F) || // Lo  [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH\r\n\t\t(0xD591 <= code && code <= 0xD5AB) || // Lo  [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH\r\n\t\t(0xD5AD <= code && code <= 0xD5C7) || // Lo  [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH\r\n\t\t(0xD5C9 <= code && code <= 0xD5E3) || // Lo  [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH\r\n\t\t(0xD5E5 <= code && code <= 0xD5FF) || // Lo  [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH\r\n\t\t(0xD601 <= code && code <= 0xD61B) || // Lo  [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH\r\n\t\t(0xD61D <= code && code <= 0xD637) || // Lo  [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH\r\n\t\t(0xD639 <= code && code <= 0xD653) || // Lo  [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH\r\n\t\t(0xD655 <= code && code <= 0xD66F) || // Lo  [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH\r\n\t\t(0xD671 <= code && code <= 0xD68B) || // Lo  [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH\r\n\t\t(0xD68D <= code && code <= 0xD6A7) || // Lo  [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH\r\n\t\t(0xD6A9 <= code && code <= 0xD6C3) || // Lo  [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH\r\n\t\t(0xD6C5 <= code && code <= 0xD6DF) || // Lo  [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH\r\n\t\t(0xD6E1 <= code && code <= 0xD6FB) || // Lo  [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH\r\n\t\t(0xD6FD <= code && code <= 0xD717) || // Lo  [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH\r\n\t\t(0xD719 <= code && code <= 0xD733) || // Lo  [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH\r\n\t\t(0xD735 <= code && code <= 0xD74F) || // Lo  [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH\r\n\t\t(0xD751 <= code && code <= 0xD76B) || // Lo  [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH\r\n\t\t(0xD76D <= code && code <= 0xD787) || // Lo  [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH\r\n\t\t(0xD789 <= code && code <= 0xD7A3) // Lo  [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH\r\n\t\t){\r\n\t\t\treturn LVT;\r\n\t\t}\r\n\t\t\r\n\t\tif(\r\n\t\t0x261D == code || // So       WHITE UP POINTING INDEX\r\n\t\t0x26F9 == code || // So       PERSON WITH BALL\r\n\t\t(0x270A <= code && code <= 0x270D) || // So   [4] RAISED FIST..WRITING HAND\r\n\t\t0x1F385 == code || // So       FATHER CHRISTMAS\r\n\t\t(0x1F3C2 <= code && code <= 0x1F3C4) || // So   [3] SNOWBOARDER..SURFER\r\n\t\t0x1F3C7 == code || // So       HORSE RACING\r\n\t\t(0x1F3CA <= code && code <= 0x1F3CC) || // So   [3] SWIMMER..GOLFER\r\n\t\t(0x1F442 <= code && code <= 0x1F443) || // So   [2] EAR..NOSE\r\n\t\t(0x1F446 <= code && code <= 0x1F450) || // So  [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN\r\n\t\t0x1F46E == code || // So       POLICE OFFICER\r\n\t\t(0x1F470 <= code && code <= 0x1F478) || // So   [9] BRIDE WITH VEIL..PRINCESS\r\n\t\t0x1F47C == code || // So       BABY ANGEL\r\n\t\t(0x1F481 <= code && code <= 0x1F483) || // So   [3] INFORMATION DESK PERSON..DANCER\r\n\t\t(0x1F485 <= code && code <= 0x1F487) || // So   [3] NAIL POLISH..HAIRCUT\r\n\t\t0x1F4AA == code || // So       FLEXED BICEPS\r\n\t\t(0x1F574 <= code && code <= 0x1F575) || // So   [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY\r\n\t\t0x1F57A == code || // So       MAN DANCING\r\n\t\t0x1F590 == code || // So       RAISED HAND WITH FINGERS SPLAYED\r\n\t\t(0x1F595 <= code && code <= 0x1F596) || // So   [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS\r\n\t\t(0x1F645 <= code && code <= 0x1F647) || // So   [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY\r\n\t\t(0x1F64B <= code && code <= 0x1F64F) || // So   [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS\r\n\t\t0x1F6A3 == code || // So       ROWBOAT\r\n\t\t(0x1F6B4 <= code && code <= 0x1F6B6) || // So   [3] BICYCLIST..PEDESTRIAN\r\n\t\t0x1F6C0 == code || // So       BATH\r\n\t\t0x1F6CC == code || // So       SLEEPING ACCOMMODATION\r\n\t\t(0x1F918 <= code && code <= 0x1F91C) || // So   [5] SIGN OF THE HORNS..RIGHT-FACING FIST\r\n\t\t(0x1F91E <= code && code <= 0x1F91F) || // So   [2] HAND WITH INDEX AND MIDDLE FINGERS CROSSED..I LOVE YOU HAND SIGN\r\n\t\t0x1F926 == code || // So       FACE PALM\r\n\t\t(0x1F930 <= code && code <= 0x1F939) || // So  [10] PREGNANT WOMAN..JUGGLING\r\n\t\t(0x1F93D <= code && code <= 0x1F93E) || // So   [2] WATER POLO..HANDBALL\r\n\t\t(0x1F9D1 <= code && code <= 0x1F9DD) // So  [13] ADULT..ELF\r\n\t\t){\r\n\t\t\treturn E_Base;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t(0x1F3FB <= code && code <= 0x1F3FF) // Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\r\n\t\t){\r\n\t\t\treturn E_Modifier;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t0x200D == code // Cf       ZERO WIDTH JOINER\r\n\t\t){\r\n\t\t\treturn ZWJ;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t0x2640 == code || // So       FEMALE SIGN\r\n\t\t0x2642 == code || // So       MALE SIGN\r\n\t\t(0x2695 <= code && code <= 0x2696) || // So   [2] STAFF OF AESCULAPIUS..SCALES\r\n\t\t0x2708 == code || // So       AIRPLANE\r\n\t\t0x2764 == code || // So       HEAVY BLACK HEART\r\n\t\t0x1F308 == code || // So       RAINBOW\r\n\t\t0x1F33E == code || // So       EAR OF RICE\r\n\t\t0x1F373 == code || // So       COOKING\r\n\t\t0x1F393 == code || // So       GRADUATION CAP\r\n\t\t0x1F3A4 == code || // So       MICROPHONE\r\n\t\t0x1F3A8 == code || // So       ARTIST PALETTE\r\n\t\t0x1F3EB == code || // So       SCHOOL\r\n\t\t0x1F3ED == code || // So       FACTORY\r\n\t\t0x1F48B == code || // So       KISS MARK\r\n\t\t(0x1F4BB <= code && code <= 0x1F4BC) || // So   [2] PERSONAL COMPUTER..BRIEFCASE\r\n\t\t0x1F527 == code || // So       WRENCH\r\n\t\t0x1F52C == code || // So       MICROSCOPE\r\n\t\t0x1F5E8 == code || // So       LEFT SPEECH BUBBLE\r\n\t\t0x1F680 == code || // So       ROCKET\r\n\t\t0x1F692 == code // So       FIRE ENGINE\r\n\t\t){\r\n\t\t\treturn Glue_After_Zwj;\r\n\t\t}\r\n\r\n\t\tif(\r\n\t\t(0x1F466 <= code && code <= 0x1F469) // So   [4] BOY..WOMAN\r\n\t\t){\r\n\t\t\treturn E_Base_GAZ;\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\t//all unlisted characters have a grapheme break property of \"Other\"\r\n\t\treturn Other;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\nif (typeof module != 'undefined' && module.exports) {\r\n    module.exports = GraphemeSplitter;\r\n}\r\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","/* Inspire Tree DOM\n * @version 4.0.0\n * https://github.com/helion3/inspire-tree-dom\n * @copyright Copyright 2015 Helion3, and other contributors\n * @license Licensed under MIT\n *          see https://github.com/helion3/inspire-tree-dom/blob/master/LICENSE\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('lodash'), require('inspire-tree')) :\n\ttypeof define === 'function' && define.amd ? define(['lodash', 'inspire-tree'], factory) :\n\t(global.InspireTreeDOM = factory(global._,global.InspireTree));\n}(this, (function (_$1,InspireTree) { 'use strict';\n\nInspireTree = InspireTree && InspireTree.hasOwnProperty('default') ? InspireTree['default'] : InspireTree;\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar dist = createCommonjsModule(function (module, exports) {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\r\n * @module Inferno-Shared\r\n */ /** TypeDoc Comment */\r\nvar NO_OP = \"$NO_OP\";\r\nvar ERROR_MSG = \"a runtime error occured! Use Inferno in development environment to find the error.\";\r\n// This should be boolean and not reference to window.document\r\nvar isBrowser = !!(typeof window !== \"undefined\" && window.document);\r\n// this is MUCH faster than .constructor === Array and instanceof Array\r\n// in Node 7 and the later versions of V8, slower in older versions though\r\nvar isArray$$1 = Array.isArray;\r\nfunction isStatefulComponent(o) {\r\n    return !isUndefined(o.prototype) && !isUndefined(o.prototype.render);\r\n}\r\nfunction isStringOrNumber(o) {\r\n    var type = typeof o;\r\n    return type === \"string\" || type === \"number\";\r\n}\r\nfunction isNullOrUndef(o) {\r\n    return isUndefined(o) || isNull(o);\r\n}\r\nfunction isInvalid(o) {\r\n    return isNull(o) || o === false || isTrue(o) || isUndefined(o);\r\n}\r\nfunction isFunction$$1(o) {\r\n    return typeof o === \"function\";\r\n}\r\nfunction isString$$1(o) {\r\n    return typeof o === \"string\";\r\n}\r\nfunction isNumber(o) {\r\n    return typeof o === \"number\";\r\n}\r\nfunction isNull(o) {\r\n    return o === null;\r\n}\r\nfunction isTrue(o) {\r\n    return o === true;\r\n}\r\nfunction isUndefined(o) {\r\n    return o === void 0;\r\n}\r\nfunction isObject$$1(o) {\r\n    return typeof o === \"object\";\r\n}\r\nfunction throwError(message) {\r\n    if (!message) {\r\n        message = ERROR_MSG;\r\n    }\r\n    throw new Error((\"Inferno Error: \" + message));\r\n}\r\nfunction combineFrom(first, second) {\r\n    var out = {};\r\n    if (first) {\r\n        for (var key in first) {\r\n            out[key] = first[key];\r\n        }\r\n    }\r\n    if (second) {\r\n        for (var key$1 in second) {\r\n            out[key$1] = second[key$1];\r\n        }\r\n    }\r\n    return out;\r\n}\r\nfunction Lifecycle() {\r\n    this.listeners = [];\r\n}\r\nLifecycle.prototype.addListener = function addListener(callback) {\r\n    this.listeners.push(callback);\r\n};\r\nLifecycle.prototype.trigger = function trigger() {\r\n    var listeners = this.listeners;\r\n    var listener;\r\n    // We need to remove current listener from array when calling it, because more listeners might be added\r\n    while ((listener = listeners.shift())) {\r\n        listener();\r\n    }\r\n};\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nvar options = {\r\n    afterMount: null,\r\n    afterRender: null,\r\n    afterUpdate: null,\r\n    beforeRender: null,\r\n    beforeUnmount: null,\r\n    createVNode: null,\r\n    findDOMNodeEnabled: false,\r\n    recyclingEnabled: false,\r\n    roots: []\r\n};\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nvar xlinkNS = \"http://www.w3.org/1999/xlink\";\r\nvar xmlNS = \"http://www.w3.org/XML/1998/namespace\";\r\nvar svgNS = \"http://www.w3.org/2000/svg\";\r\nvar strictProps = new Set();\r\nstrictProps.add(\"volume\");\r\nstrictProps.add(\"defaultChecked\");\r\nvar booleanProps = new Set();\r\nbooleanProps.add(\"muted\");\r\nbooleanProps.add(\"scoped\");\r\nbooleanProps.add(\"loop\");\r\nbooleanProps.add(\"open\");\r\nbooleanProps.add(\"checked\");\r\nbooleanProps.add(\"default\");\r\nbooleanProps.add(\"capture\");\r\nbooleanProps.add(\"disabled\");\r\nbooleanProps.add(\"readOnly\");\r\nbooleanProps.add(\"required\");\r\nbooleanProps.add(\"autoplay\");\r\nbooleanProps.add(\"controls\");\r\nbooleanProps.add(\"seamless\");\r\nbooleanProps.add(\"reversed\");\r\nbooleanProps.add(\"allowfullscreen\");\r\nbooleanProps.add(\"novalidate\");\r\nbooleanProps.add(\"hidden\");\r\nbooleanProps.add(\"autoFocus\");\r\nbooleanProps.add(\"selected\");\r\nbooleanProps.add(\"indeterminate\");\r\nvar namespaces = new Map();\r\nnamespaces.set(\"xlink:href\", xlinkNS);\r\nnamespaces.set(\"xlink:arcrole\", xlinkNS);\r\nnamespaces.set(\"xlink:actuate\", xlinkNS);\r\nnamespaces.set(\"xlink:show\", xlinkNS);\r\nnamespaces.set(\"xlink:role\", xlinkNS);\r\nnamespaces.set(\"xlink:title\", xlinkNS);\r\nnamespaces.set(\"xlink:type\", xlinkNS);\r\nnamespaces.set(\"xml:base\", xmlNS);\r\nnamespaces.set(\"xml:lang\", xmlNS);\r\nnamespaces.set(\"xml:space\", xmlNS);\r\nvar isUnitlessNumber = new Set();\r\nisUnitlessNumber.add(\"animationIterationCount\");\r\nisUnitlessNumber.add(\"borderImageOutset\");\r\nisUnitlessNumber.add(\"borderImageSlice\");\r\nisUnitlessNumber.add(\"borderImageWidth\");\r\nisUnitlessNumber.add(\"boxFlex\");\r\nisUnitlessNumber.add(\"boxFlexGroup\");\r\nisUnitlessNumber.add(\"boxOrdinalGroup\");\r\nisUnitlessNumber.add(\"columnCount\");\r\nisUnitlessNumber.add(\"flex\");\r\nisUnitlessNumber.add(\"flexGrow\");\r\nisUnitlessNumber.add(\"flexPositive\");\r\nisUnitlessNumber.add(\"flexShrink\");\r\nisUnitlessNumber.add(\"flexNegative\");\r\nisUnitlessNumber.add(\"flexOrder\");\r\nisUnitlessNumber.add(\"gridRow\");\r\nisUnitlessNumber.add(\"gridColumn\");\r\nisUnitlessNumber.add(\"fontWeight\");\r\nisUnitlessNumber.add(\"lineClamp\");\r\nisUnitlessNumber.add(\"lineHeight\");\r\nisUnitlessNumber.add(\"opacity\");\r\nisUnitlessNumber.add(\"order\");\r\nisUnitlessNumber.add(\"orphans\");\r\nisUnitlessNumber.add(\"tabSize\");\r\nisUnitlessNumber.add(\"widows\");\r\nisUnitlessNumber.add(\"zIndex\");\r\nisUnitlessNumber.add(\"zoom\");\r\nisUnitlessNumber.add(\"fillOpacity\");\r\nisUnitlessNumber.add(\"floodOpacity\");\r\nisUnitlessNumber.add(\"stopOpacity\");\r\nisUnitlessNumber.add(\"strokeDasharray\");\r\nisUnitlessNumber.add(\"strokeDashoffset\");\r\nisUnitlessNumber.add(\"strokeMiterlimit\");\r\nisUnitlessNumber.add(\"strokeOpacity\");\r\nisUnitlessNumber.add(\"strokeWidth\");\r\nvar skipProps = new Set();\r\nskipProps.add(\"children\");\r\nskipProps.add(\"childrenType\");\r\nskipProps.add(\"defaultValue\");\r\nskipProps.add(\"ref\");\r\nskipProps.add(\"key\");\r\nskipProps.add(\"checked\");\r\nskipProps.add(\"multiple\");\r\nvar delegatedEvents = new Set();\r\ndelegatedEvents.add(\"onClick\");\r\ndelegatedEvents.add(\"onMouseDown\");\r\ndelegatedEvents.add(\"onMouseUp\");\r\ndelegatedEvents.add(\"onMouseMove\");\r\ndelegatedEvents.add(\"onSubmit\");\r\ndelegatedEvents.add(\"onDblClick\");\r\ndelegatedEvents.add(\"onKeyDown\");\r\ndelegatedEvents.add(\"onKeyUp\");\r\ndelegatedEvents.add(\"onKeyPress\");\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nvar isiOS = isBrowser &&\r\n    !!navigator.platform &&\r\n    /iPad|iPhone|iPod/.test(navigator.platform);\r\nvar delegatedEvents$1 = new Map();\r\nfunction handleEvent(name, lastEvent, nextEvent, dom) {\r\n    var delegatedRoots = delegatedEvents$1.get(name);\r\n    if (nextEvent) {\r\n        if (!delegatedRoots) {\r\n            delegatedRoots = { items: new Map(), docEvent: null };\r\n            delegatedRoots.docEvent = attachEventToDocument(name, delegatedRoots);\r\n            delegatedEvents$1.set(name, delegatedRoots);\r\n        }\r\n        if (!lastEvent) {\r\n            if (isiOS && name === \"onClick\") {\r\n                trapClickOnNonInteractiveElement(dom);\r\n            }\r\n        }\r\n        delegatedRoots.items.set(dom, nextEvent);\r\n    }\r\n    else if (delegatedRoots) {\r\n        var items = delegatedRoots.items;\r\n        if (items.delete(dom)) {\r\n            // If any items were deleted, check if listener need to be removed\r\n            if (items.size === 0) {\r\n                document.removeEventListener(normalizeEventName(name), delegatedRoots.docEvent);\r\n                delegatedEvents$1.delete(name);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction dispatchEvents(event, target, items, count, isClick, eventData) {\r\n    var dom = target;\r\n    while (count > 0) {\r\n        if (isClick && dom.disabled) {\r\n            return;\r\n        }\r\n        var eventsToTrigger = items.get(dom);\r\n        if (eventsToTrigger) {\r\n            count--;\r\n            // linkEvent object\r\n            eventData.dom = dom;\r\n            if (eventsToTrigger.event) {\r\n                eventsToTrigger.event(eventsToTrigger.data, event);\r\n            }\r\n            else {\r\n                eventsToTrigger(event);\r\n            }\r\n            if (event.cancelBubble) {\r\n                return;\r\n            }\r\n        }\r\n        dom = dom.parentNode;\r\n        // Html Nodes can be nested fe: span inside button in that scenario browser does not handle disabled attribute on parent,\r\n        // because the event listener is on document.body\r\n        // Don't process clicks on disabled elements\r\n        if (dom === null) {\r\n            return;\r\n        }\r\n    }\r\n}\r\nfunction normalizeEventName(name) {\r\n    return name.substr(2).toLowerCase();\r\n}\r\nfunction stopPropagation() {\r\n    this.cancelBubble = true;\r\n    this.stopImmediatePropagation();\r\n}\r\nfunction attachEventToDocument(name, delegatedRoots) {\r\n    var docEvent = function (event) {\r\n        var count = delegatedRoots.items.size;\r\n        if (count > 0) {\r\n            event.stopPropagation = stopPropagation;\r\n            // Event data needs to be object to save reference to currentTarget getter\r\n            var eventData = {\r\n                dom: document\r\n            };\r\n            try {\r\n                Object.defineProperty(event, \"currentTarget\", {\r\n                    configurable: true,\r\n                    get: function get$$1() {\r\n                        return eventData.dom;\r\n                    }\r\n                });\r\n            }\r\n            catch (e) {\r\n                /* safari7 and phantomJS will crash */\r\n            }\r\n            dispatchEvents(event, event.target, delegatedRoots.items, count, event.type === \"click\", eventData);\r\n        }\r\n    };\r\n    document.addEventListener(normalizeEventName(name), docEvent);\r\n    return docEvent;\r\n}\r\n// tslint:disable-next-line:no-empty\r\nfunction emptyFn() { }\r\nfunction trapClickOnNonInteractiveElement(dom) {\r\n    // Mobile Safari does not fire properly bubble click events on\r\n    // non-interactive elements, which means delegated click listeners do not\r\n    // fire. The workaround for this bug involves attaching an empty click\r\n    // listener on the target node.\r\n    // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\r\n    // Just set it using the onclick property so that we don't have to manage any\r\n    // bookkeeping for it. Not sure if we need to clear it when the listener is\r\n    // removed.\r\n    // TODO: Only do this for the relevant Safaris maybe?\r\n    dom.onclick = emptyFn;\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction isCheckedType(type) {\r\n    return type === \"checkbox\" || type === \"radio\";\r\n}\r\nfunction onTextInputChange(e) {\r\n    var vNode = this.vNode;\r\n    var props = vNode.props || EMPTY_OBJ;\r\n    var dom = vNode.dom;\r\n    var previousValue = props.value;\r\n    if (props.onInput) {\r\n        var event = props.onInput;\r\n        if (event.event) {\r\n            event.event(event.data, e);\r\n        }\r\n        else {\r\n            event(e);\r\n        }\r\n    }\r\n    else if (props.oninput) {\r\n        props.oninput(e);\r\n    }\r\n    // the user may have updated the vNode from the above onInput events syncronously\r\n    // so we need to get it from the context of `this` again\r\n    var newVNode = this.vNode;\r\n    var newProps = newVNode.props || EMPTY_OBJ;\r\n    // If render is going async there is no value change yet, it will come back to process input soon\r\n    if (previousValue !== newProps.value) {\r\n        // When this happens we need to store current cursor position and restore it, to avoid jumping\r\n        applyValue(newProps, dom);\r\n    }\r\n}\r\nfunction wrappedOnChange(e) {\r\n    var props = this.vNode.props || EMPTY_OBJ;\r\n    var event = props.onChange;\r\n    if (event.event) {\r\n        event.event(event.data, e);\r\n    }\r\n    else {\r\n        event(e);\r\n    }\r\n}\r\nfunction onCheckboxChange(e) {\r\n    e.stopPropagation(); // This click should not propagate its for internal use\r\n    var vNode = this.vNode;\r\n    var props = vNode.props || EMPTY_OBJ;\r\n    var dom = vNode.dom;\r\n    if (props.onClick) {\r\n        var event = props.onClick;\r\n        if (event.event) {\r\n            event.event(event.data, e);\r\n        }\r\n        else {\r\n            event(e);\r\n        }\r\n    }\r\n    else if (props.onclick) {\r\n        props.onclick(e);\r\n    }\r\n    // the user may have updated the vNode from the above onInput events syncronously\r\n    // so we need to get it from the context of `this` again\r\n    var newVNode = this.vNode;\r\n    var newProps = newVNode.props || EMPTY_OBJ;\r\n    // If render is going async there is no value change yet, it will come back to process input soon\r\n    applyValue(newProps, dom);\r\n}\r\nfunction processInput(vNode, dom, nextPropsOrEmpty, mounting, isControlled) {\r\n    applyValue(nextPropsOrEmpty, dom);\r\n    if (isControlled) {\r\n        dom.vNode = vNode; // TODO: Remove this when implementing Fiber's\r\n        if (mounting) {\r\n            if (isCheckedType(nextPropsOrEmpty.type)) {\r\n                dom.onclick = onCheckboxChange;\r\n                dom.onclick.wrapped = true;\r\n            }\r\n            else {\r\n                dom.oninput = onTextInputChange;\r\n                dom.oninput.wrapped = true;\r\n            }\r\n            if (nextPropsOrEmpty.onChange) {\r\n                dom.onchange = wrappedOnChange;\r\n                dom.onchange.wrapped = true;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction applyValue(nextPropsOrEmpty, dom) {\r\n    var type = nextPropsOrEmpty.type;\r\n    var value = nextPropsOrEmpty.value;\r\n    var checked = nextPropsOrEmpty.checked;\r\n    var multiple = nextPropsOrEmpty.multiple;\r\n    var defaultValue = nextPropsOrEmpty.defaultValue;\r\n    var hasValue = !isNullOrUndef(value);\r\n    if (type && type !== dom.type) {\r\n        dom.setAttribute(\"type\", type);\r\n    }\r\n    if (multiple && multiple !== dom.multiple) {\r\n        dom.multiple = multiple;\r\n    }\r\n    if (!isNullOrUndef(defaultValue) && !hasValue) {\r\n        dom.defaultValue = defaultValue + \"\";\r\n    }\r\n    if (isCheckedType(type)) {\r\n        if (hasValue) {\r\n            dom.value = value;\r\n        }\r\n        if (!isNullOrUndef(checked)) {\r\n            dom.checked = checked;\r\n        }\r\n    }\r\n    else {\r\n        if (hasValue && dom.value !== value) {\r\n            dom.defaultValue = value;\r\n            dom.value = value;\r\n        }\r\n        else if (!isNullOrUndef(checked)) {\r\n            dom.checked = checked;\r\n        }\r\n    }\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction updateChildOptionGroup(vNode, value) {\r\n    var type = vNode.type;\r\n    if (type === \"optgroup\") {\r\n        var children = vNode.children;\r\n        if (isArray$$1(children)) {\r\n            for (var i = 0, len = children.length; i < len; i++) {\r\n                updateChildOption(children[i], value);\r\n            }\r\n        }\r\n        else if (isVNode(children)) {\r\n            updateChildOption(children, value);\r\n        }\r\n    }\r\n    else {\r\n        updateChildOption(vNode, value);\r\n    }\r\n}\r\nfunction updateChildOption(vNode, value) {\r\n    var props = vNode.props || EMPTY_OBJ;\r\n    var dom = vNode.dom;\r\n    // we do this as multiple may have changed\r\n    dom.value = props.value;\r\n    if ((isArray$$1(value) && value.indexOf(props.value) !== -1) ||\r\n        props.value === value) {\r\n        dom.selected = true;\r\n    }\r\n    else if (!isNullOrUndef(value) || !isNullOrUndef(props.selected)) {\r\n        dom.selected = props.selected || false;\r\n    }\r\n}\r\nfunction onSelectChange(e) {\r\n    var vNode = this.vNode;\r\n    var props = vNode.props || EMPTY_OBJ;\r\n    var dom = vNode.dom;\r\n    var previousValue = props.value;\r\n    if (props.onChange) {\r\n        var event = props.onChange;\r\n        if (event.event) {\r\n            event.event(event.data, e);\r\n        }\r\n        else {\r\n            event(e);\r\n        }\r\n    }\r\n    else if (props.onchange) {\r\n        props.onchange(e);\r\n    }\r\n    // the user may have updated the vNode from the above onInput events syncronously\r\n    // so we need to get it from the context of `this` again\r\n    var newVNode = this.vNode;\r\n    var newProps = newVNode.props || EMPTY_OBJ;\r\n    // If render is going async there is no value change yet, it will come back to process input soon\r\n    if (previousValue !== newProps.value) {\r\n        // When this happens we need to store current cursor position and restore it, to avoid jumping\r\n        applyValue$1(newVNode, dom, newProps, false);\r\n    }\r\n}\r\nfunction processSelect(vNode, dom, nextPropsOrEmpty, mounting, isControlled) {\r\n    applyValue$1(vNode, dom, nextPropsOrEmpty, mounting);\r\n    if (isControlled) {\r\n        dom.vNode = vNode; // TODO: Remove this when implementing Fiber's\r\n        if (mounting) {\r\n            dom.onchange = onSelectChange;\r\n            dom.onchange.wrapped = true;\r\n        }\r\n    }\r\n}\r\nfunction applyValue$1(vNode, dom, nextPropsOrEmpty, mounting) {\r\n    if (nextPropsOrEmpty.multiple !== dom.multiple) {\r\n        dom.multiple = nextPropsOrEmpty.multiple;\r\n    }\r\n    var children = vNode.children;\r\n    if (!isInvalid(children)) {\r\n        var value = nextPropsOrEmpty.value;\r\n        if (mounting && isNullOrUndef(value)) {\r\n            value = nextPropsOrEmpty.defaultValue;\r\n        }\r\n        if (isArray$$1(children)) {\r\n            for (var i = 0, len = children.length; i < len; i++) {\r\n                updateChildOptionGroup(children[i], value);\r\n            }\r\n        }\r\n        else if (isVNode(children)) {\r\n            updateChildOptionGroup(children, value);\r\n        }\r\n    }\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction wrappedOnChange$1(e) {\r\n    var props = this.vNode.props || EMPTY_OBJ;\r\n    var event = props.onChange;\r\n    if (event.event) {\r\n        event.event(event.data, e);\r\n    }\r\n    else {\r\n        event(e);\r\n    }\r\n}\r\nfunction onTextareaInputChange(e) {\r\n    var vNode = this.vNode;\r\n    var props = vNode.props || EMPTY_OBJ;\r\n    var previousValue = props.value;\r\n    if (props.onInput) {\r\n        var event = props.onInput;\r\n        if (event.event) {\r\n            event.event(event.data, e);\r\n        }\r\n        else {\r\n            event(e);\r\n        }\r\n    }\r\n    else if (props.oninput) {\r\n        props.oninput(e);\r\n    }\r\n    // the user may have updated the vNode from the above onInput events syncronously\r\n    // so we need to get it from the context of `this` again\r\n    var newVNode = this.vNode;\r\n    var newProps = newVNode.props || EMPTY_OBJ;\r\n    // If render is going async there is no value change yet, it will come back to process input soon\r\n    if (previousValue !== newProps.value) {\r\n        // When this happens we need to store current cursor position and restore it, to avoid jumping\r\n        applyValue$2(newVNode, vNode.dom, false);\r\n    }\r\n}\r\nfunction processTextarea(vNode, dom, nextPropsOrEmpty, mounting, isControlled) {\r\n    applyValue$2(nextPropsOrEmpty, dom, mounting);\r\n    if (isControlled) {\r\n        dom.vNode = vNode; // TODO: Remove this when implementing Fiber's\r\n        if (mounting) {\r\n            dom.oninput = onTextareaInputChange;\r\n            dom.oninput.wrapped = true;\r\n            if (nextPropsOrEmpty.onChange) {\r\n                dom.onchange = wrappedOnChange$1;\r\n                dom.onchange.wrapped = true;\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction applyValue$2(nextPropsOrEmpty, dom, mounting) {\r\n    var value = nextPropsOrEmpty.value;\r\n    var domValue = dom.value;\r\n    if (isNullOrUndef(value)) {\r\n        if (mounting) {\r\n            var defaultValue = nextPropsOrEmpty.defaultValue;\r\n            if (!isNullOrUndef(defaultValue)) {\r\n                if (defaultValue !== domValue) {\r\n                    dom.defaultValue = defaultValue;\r\n                    dom.value = defaultValue;\r\n                }\r\n            }\r\n            else if (domValue !== \"\") {\r\n                dom.defaultValue = \"\";\r\n                dom.value = \"\";\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        /* There is value so keep it controlled */\r\n        if (domValue !== value) {\r\n            dom.defaultValue = value;\r\n            dom.value = value;\r\n        }\r\n    }\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\n/**\r\n * There is currently no support for switching same input between controlled and nonControlled\r\n * If that ever becomes a real issue, then re design controlled elements\r\n * Currently user must choose either controlled or non-controlled and stick with that\r\n */\r\nfunction processElement(flags, vNode, dom, nextPropsOrEmpty, mounting, isControlled) {\r\n    if ((flags & 512 /* InputElement */) > 0) {\r\n        processInput(vNode, dom, nextPropsOrEmpty, mounting, isControlled);\r\n    }\r\n    else if ((flags & 2048 /* SelectElement */) > 0) {\r\n        processSelect(vNode, dom, nextPropsOrEmpty, mounting, isControlled);\r\n    }\r\n    else if ((flags & 1024 /* TextareaElement */) > 0) {\r\n        processTextarea(vNode, dom, nextPropsOrEmpty, mounting, isControlled);\r\n    }\r\n}\r\nfunction isControlledFormElement(nextPropsOrEmpty) {\r\n    return nextPropsOrEmpty.type && isCheckedType(nextPropsOrEmpty.type)\r\n        ? !isNullOrUndef(nextPropsOrEmpty.checked)\r\n        : !isNullOrUndef(nextPropsOrEmpty.value);\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction normalizeChildNodes(parentDom) {\r\n    var dom = parentDom.firstChild;\r\n    while (dom) {\r\n        if (dom.nodeType === 8) {\r\n            if (dom.data === \"!\") {\r\n                var placeholder = document.createTextNode(\"\");\r\n                parentDom.replaceChild(placeholder, dom);\r\n                dom = dom.nextSibling;\r\n            }\r\n            else {\r\n                var lastDom = dom.previousSibling;\r\n                parentDom.removeChild(dom);\r\n                dom = lastDom || parentDom.firstChild;\r\n            }\r\n        }\r\n        else {\r\n            dom = dom.nextSibling;\r\n        }\r\n    }\r\n}\r\nfunction hydrateComponent(vNode, dom, lifecycle, context, isSVG, isClass) {\r\n    var type = vNode.type;\r\n    var ref = vNode.ref;\r\n    var props = vNode.props || EMPTY_OBJ;\r\n    if (isClass) {\r\n        var _isSVG = dom.namespaceURI === svgNS;\r\n        var instance = createClassComponentInstance(vNode, type, props, context, _isSVG, lifecycle);\r\n        var input = instance._lastInput;\r\n        instance._vNode = vNode;\r\n        hydrate(input, dom, lifecycle, instance._childContext, _isSVG);\r\n        vNode.dom = input.dom;\r\n        mountClassComponentCallbacks(vNode, ref, instance, lifecycle);\r\n        instance._updating = false; // Mount finished allow going sync\r\n        if (options.findDOMNodeEnabled) {\r\n            componentToDOMNodeMap.set(instance, dom);\r\n        }\r\n    }\r\n    else {\r\n        var input$1 = createFunctionalComponentInput(vNode, type, props, context);\r\n        hydrate(input$1, dom, lifecycle, context, isSVG);\r\n        vNode.children = input$1;\r\n        vNode.dom = input$1.dom;\r\n        mountFunctionalComponentCallbacks(props, ref, dom, lifecycle);\r\n    }\r\n    return dom;\r\n}\r\nfunction hydrateElement(vNode, dom, lifecycle, context, isSVG) {\r\n    var children = vNode.children;\r\n    var props = vNode.props;\r\n    var className = vNode.className;\r\n    var flags = vNode.flags;\r\n    var ref = vNode.ref;\r\n    isSVG = isSVG || (flags & 128 /* SvgElement */) > 0;\r\n    if (dom.nodeType !== 1 || dom.tagName.toLowerCase() !== vNode.type) {\r\n        var newDom = mountElement(vNode, null, lifecycle, context, isSVG);\r\n        vNode.dom = newDom;\r\n        replaceChild(dom.parentNode, newDom, dom);\r\n        return newDom;\r\n    }\r\n    vNode.dom = dom;\r\n    if (!isInvalid(children)) {\r\n        hydrateChildren(children, dom, lifecycle, context, isSVG);\r\n    }\r\n    else if (dom.firstChild !== null && !isSamePropsInnerHTML(dom, props)) {\r\n        dom.textContent = \"\"; // dom has content, but VNode has no children remove everything from DOM\r\n    }\r\n    if (props) {\r\n        var hasControlledValue = false;\r\n        var isFormElement = (flags & 3584 /* FormElement */) > 0;\r\n        if (isFormElement) {\r\n            hasControlledValue = isControlledFormElement(props);\r\n        }\r\n        for (var prop in props) {\r\n            // do not add a hasOwnProperty check here, it affects performance\r\n            patchProp(prop, null, props[prop], dom, isSVG, hasControlledValue);\r\n        }\r\n        if (isFormElement) {\r\n            processElement(flags, vNode, dom, props, true, hasControlledValue);\r\n        }\r\n    }\r\n    if (!isNullOrUndef(className)) {\r\n        if (isSVG) {\r\n            dom.setAttribute(\"class\", className);\r\n        }\r\n        else {\r\n            dom.className = className;\r\n        }\r\n    }\r\n    else {\r\n        if (dom.className !== \"\") {\r\n            dom.removeAttribute(\"class\");\r\n        }\r\n    }\r\n    if (ref) {\r\n        mountRef(dom, ref, lifecycle);\r\n    }\r\n    return dom;\r\n}\r\nfunction hydrateChildren(children, parentDom, lifecycle, context, isSVG) {\r\n    normalizeChildNodes(parentDom);\r\n    var dom = parentDom.firstChild;\r\n    if (isStringOrNumber(children)) {\r\n        if (!isNull(dom) && dom.nodeType === 3) {\r\n            if (dom.nodeValue !== children) {\r\n                dom.nodeValue = children;\r\n            }\r\n        }\r\n        else if (children === \"\") {\r\n            parentDom.appendChild(document.createTextNode(\"\"));\r\n        }\r\n        else {\r\n            parentDom.textContent = children;\r\n        }\r\n        if (!isNull(dom)) {\r\n            dom = dom.nextSibling;\r\n        }\r\n    }\r\n    else if (isArray$$1(children)) {\r\n        for (var i = 0, len = children.length; i < len; i++) {\r\n            var child = children[i];\r\n            if (!isNull(child) && isObject$$1(child)) {\r\n                if (!isNull(dom)) {\r\n                    var nextSibling = dom.nextSibling;\r\n                    hydrate(child, dom, lifecycle, context, isSVG);\r\n                    dom = nextSibling;\r\n                }\r\n                else {\r\n                    mount(child, parentDom, lifecycle, context, isSVG);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        // It's VNode\r\n        if (!isNull(dom)) {\r\n            hydrate(children, dom, lifecycle, context, isSVG);\r\n            dom = dom.nextSibling;\r\n        }\r\n        else {\r\n            mount(children, parentDom, lifecycle, context, isSVG);\r\n        }\r\n    }\r\n    // clear any other DOM nodes, there should be only a single entry for the root\r\n    while (dom) {\r\n        var nextSibling$1 = dom.nextSibling;\r\n        parentDom.removeChild(dom);\r\n        dom = nextSibling$1;\r\n    }\r\n}\r\nfunction hydrateText(vNode, dom) {\r\n    if (dom.nodeType !== 3) {\r\n        var newDom = mountText(vNode, null);\r\n        vNode.dom = newDom;\r\n        replaceChild(dom.parentNode, newDom, dom);\r\n        return newDom;\r\n    }\r\n    var text = vNode.children;\r\n    if (dom.nodeValue !== text) {\r\n        dom.nodeValue = text;\r\n    }\r\n    vNode.dom = dom;\r\n    return dom;\r\n}\r\nfunction hydrateVoid(vNode, dom) {\r\n    vNode.dom = dom;\r\n    return dom;\r\n}\r\nfunction hydrate(vNode, dom, lifecycle, context, isSVG) {\r\n    var flags = vNode.flags;\r\n    if (flags & 28 /* Component */) {\r\n        hydrateComponent(vNode, dom, lifecycle, context, isSVG, (flags & 4 /* ComponentClass */) > 0);\r\n    }\r\n    else if (flags & 3970 /* Element */) {\r\n        hydrateElement(vNode, dom, lifecycle, context, isSVG);\r\n    }\r\n    else if (flags & 1 /* Text */) {\r\n        hydrateText(vNode, dom);\r\n    }\r\n    else if (flags & 4096 /* Void */) {\r\n        hydrateVoid(vNode, dom);\r\n    }\r\n    else {\r\n        throwError();\r\n    }\r\n}\r\nfunction hydrateRoot(input, parentDom, lifecycle) {\r\n    if (!isNull(parentDom)) {\r\n        var dom = parentDom.firstChild;\r\n        if (!isNull(dom)) {\r\n            hydrate(input, dom, lifecycle, EMPTY_OBJ, false);\r\n            dom = parentDom.firstChild;\r\n            // clear any other DOM nodes, there should be only a single entry for the root\r\n            while ((dom = dom.nextSibling)) {\r\n                parentDom.removeChild(dom);\r\n            }\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nvar componentPools = new Map();\r\nvar elementPools = new Map();\r\nfunction recycleElement(vNode, lifecycle, context, isSVG) {\r\n    var tag = vNode.type;\r\n    var pools = elementPools.get(tag);\r\n    if (!isUndefined(pools)) {\r\n        var key = vNode.key;\r\n        var pool = key === null ? pools.nonKeyed : pools.keyed.get(key);\r\n        if (!isUndefined(pool)) {\r\n            var recycledVNode = pool.pop();\r\n            if (!isUndefined(recycledVNode)) {\r\n                patchElement(recycledVNode, vNode, null, lifecycle, context, isSVG, true);\r\n                return vNode.dom;\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction poolElement(vNode) {\r\n    var tag = vNode.type;\r\n    var key = vNode.key;\r\n    var pools = elementPools.get(tag);\r\n    if (isUndefined(pools)) {\r\n        pools = {\r\n            keyed: new Map(),\r\n            nonKeyed: []\r\n        };\r\n        elementPools.set(tag, pools);\r\n    }\r\n    if (isNull(key)) {\r\n        pools.nonKeyed.push(vNode);\r\n    }\r\n    else {\r\n        var pool = pools.keyed.get(key);\r\n        if (isUndefined(pool)) {\r\n            pool = [];\r\n            pools.keyed.set(key, pool);\r\n        }\r\n        pool.push(vNode);\r\n    }\r\n}\r\nfunction recycleComponent(vNode, lifecycle, context, isSVG) {\r\n    var type = vNode.type;\r\n    var pools = componentPools.get(type);\r\n    if (!isUndefined(pools)) {\r\n        var key = vNode.key;\r\n        var pool = key === null ? pools.nonKeyed : pools.keyed.get(key);\r\n        if (!isUndefined(pool)) {\r\n            var recycledVNode = pool.pop();\r\n            if (!isUndefined(recycledVNode)) {\r\n                var flags = vNode.flags;\r\n                var failed = patchComponent(recycledVNode, vNode, null, lifecycle, context, isSVG, (flags & 4 /* ComponentClass */) > 0, true);\r\n                if (!failed) {\r\n                    return vNode.dom;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction poolComponent(vNode) {\r\n    var hooks = vNode.ref;\r\n    var nonRecycleHooks = hooks &&\r\n        (hooks.onComponentWillMount ||\r\n            hooks.onComponentWillUnmount ||\r\n            hooks.onComponentDidMount ||\r\n            hooks.onComponentWillUpdate ||\r\n            hooks.onComponentDidUpdate);\r\n    if (nonRecycleHooks) {\r\n        return;\r\n    }\r\n    var type = vNode.type;\r\n    var key = vNode.key;\r\n    var pools = componentPools.get(type);\r\n    if (isUndefined(pools)) {\r\n        pools = {\r\n            keyed: new Map(),\r\n            nonKeyed: []\r\n        };\r\n        componentPools.set(type, pools);\r\n    }\r\n    if (isNull(key)) {\r\n        pools.nonKeyed.push(vNode);\r\n    }\r\n    else {\r\n        var pool = pools.keyed.get(key);\r\n        if (isUndefined(pool)) {\r\n            pool = [];\r\n            pools.keyed.set(key, pool);\r\n        }\r\n        pool.push(vNode);\r\n    }\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction unmount(vNode, parentDom, lifecycle, canRecycle, isRecycling) {\r\n    var flags = vNode.flags;\r\n    var dom = vNode.dom;\r\n    if (flags & 28 /* Component */) {\r\n        var instance = vNode.children;\r\n        var isStatefulComponent$$1 = (flags & 4 /* ComponentClass */) > 0;\r\n        var props = vNode.props || EMPTY_OBJ;\r\n        var ref = vNode.ref;\r\n        if (!isRecycling) {\r\n            if (isStatefulComponent$$1) {\r\n                if (!instance._unmounted) {\r\n                    if (!isNull(options.beforeUnmount)) {\r\n                        options.beforeUnmount(vNode);\r\n                    }\r\n                    if (!isUndefined(instance.componentWillUnmount)) {\r\n                        instance.componentWillUnmount();\r\n                    }\r\n                    if (ref && !isRecycling) {\r\n                        ref(null);\r\n                    }\r\n                    instance._unmounted = true;\r\n                    if (options.findDOMNodeEnabled) {\r\n                        componentToDOMNodeMap.delete(instance);\r\n                    }\r\n                    unmount(instance._lastInput, null, instance._lifecycle, false, isRecycling);\r\n                }\r\n            }\r\n            else {\r\n                if (!isNullOrUndef(ref)) {\r\n                    if (!isNullOrUndef(ref.onComponentWillUnmount)) {\r\n                        ref.onComponentWillUnmount(dom, props);\r\n                    }\r\n                }\r\n                unmount(instance, null, lifecycle, false, isRecycling);\r\n            }\r\n        }\r\n        if (options.recyclingEnabled &&\r\n            !isStatefulComponent$$1 &&\r\n            (parentDom || canRecycle)) {\r\n            poolComponent(vNode);\r\n        }\r\n    }\r\n    else if (flags & 3970 /* Element */) {\r\n        var ref$1 = vNode.ref;\r\n        var props$1 = vNode.props;\r\n        if (!isRecycling && isFunction$$1(ref$1)) {\r\n            ref$1(null);\r\n        }\r\n        var children = vNode.children;\r\n        if (!isNullOrUndef(children)) {\r\n            if (isArray$$1(children)) {\r\n                for (var i = 0, len = children.length; i < len; i++) {\r\n                    var child = children[i];\r\n                    if (!isInvalid(child) && isObject$$1(child)) {\r\n                        unmount(child, null, lifecycle, false, isRecycling);\r\n                    }\r\n                }\r\n            }\r\n            else if (isObject$$1(children)) {\r\n                unmount(children, null, lifecycle, false, isRecycling);\r\n            }\r\n        }\r\n        if (!isNull(props$1)) {\r\n            for (var name in props$1) {\r\n                // do not add a hasOwnProperty check here, it affects performance\r\n                if (props$1[name] !== null && isAttrAnEvent(name)) {\r\n                    patchEvent(name, props$1[name], null, dom);\r\n                    // We need to set this null, because same props otherwise come back if SCU returns false and we are recyling\r\n                    props$1[name] = null;\r\n                }\r\n            }\r\n        }\r\n        if (options.recyclingEnabled && (parentDom || canRecycle)) {\r\n            poolElement(vNode);\r\n        }\r\n    }\r\n    if (!isNull(parentDom)) {\r\n        removeChild(parentDom, dom);\r\n    }\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\n// rather than use a Map, like we did before, we can use an array here\r\n// given there shouldn't be THAT many roots on the page, the difference\r\n// in performance is huge: https://esbench.com/bench/5802a691330ab09900a1a2da\r\nvar componentToDOMNodeMap = new Map();\r\nvar roots = options.roots;\r\n/**\r\n * When inferno.options.findDOMNOdeEnabled is true, this function will return DOM Node by component instance\r\n * @param ref Component instance\r\n * @returns {*|null} returns dom node\r\n */\r\nfunction findDOMNode(ref) {\r\n    if (!options.findDOMNodeEnabled) {\r\n        throwError();\r\n    }\r\n    var dom = ref && ref.nodeType ? ref : null;\r\n    return componentToDOMNodeMap.get(ref) || dom;\r\n}\r\nfunction getRoot(dom) {\r\n    for (var i = 0, len = roots.length; i < len; i++) {\r\n        var root = roots[i];\r\n        if (root.dom === dom) {\r\n            return root;\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction setRoot(dom, input, lifecycle) {\r\n    var root = {\r\n        dom: dom,\r\n        input: input,\r\n        lifecycle: lifecycle\r\n    };\r\n    roots.push(root);\r\n    return root;\r\n}\r\nfunction removeRoot(root) {\r\n    for (var i = 0, len = roots.length; i < len; i++) {\r\n        if (roots[i] === root) {\r\n            roots.splice(i, 1);\r\n            return;\r\n        }\r\n    }\r\n}\r\nvar documentBody = isBrowser ? document.body : null;\r\n/**\r\n * Renders virtual node tree into parent node.\r\n * @param {VNode | null | string | number} input vNode to be rendered\r\n * @param parentDom DOM node which content will be replaced by virtual node\r\n * @returns {InfernoChildren} rendered virtual node\r\n */\r\nfunction render(input, parentDom) {\r\n    if (documentBody === parentDom) {\r\n        throwError();\r\n    }\r\n    if (input === NO_OP) {\r\n        return;\r\n    }\r\n    var root = getRoot(parentDom);\r\n    if (isNull(root)) {\r\n        var lifecycle = new Lifecycle();\r\n        if (!isInvalid(input)) {\r\n            if (input.dom) {\r\n                input = directClone(input);\r\n            }\r\n            if (!hydrateRoot(input, parentDom, lifecycle)) {\r\n                mount(input, parentDom, lifecycle, EMPTY_OBJ, false);\r\n            }\r\n            root = setRoot(parentDom, input, lifecycle);\r\n            lifecycle.trigger();\r\n        }\r\n    }\r\n    else {\r\n        var lifecycle$1 = root.lifecycle;\r\n        lifecycle$1.listeners = [];\r\n        if (isNullOrUndef(input)) {\r\n            unmount(root.input, parentDom, lifecycle$1, false, false);\r\n            removeRoot(root);\r\n        }\r\n        else {\r\n            if (input.dom) {\r\n                input = directClone(input);\r\n            }\r\n            patch(root.input, input, parentDom, lifecycle$1, EMPTY_OBJ, false, false);\r\n        }\r\n        root.input = input;\r\n        lifecycle$1.trigger();\r\n    }\r\n    if (root) {\r\n        var rootInput = root.input;\r\n        if (rootInput && rootInput.flags & 28 /* Component */) {\r\n            return rootInput.children;\r\n        }\r\n    }\r\n}\r\nfunction createRenderer(parentDom) {\r\n    return function renderer(lastInput, nextInput) {\r\n        if (!parentDom) {\r\n            parentDom = lastInput;\r\n        }\r\n        render(nextInput, parentDom);\r\n    };\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction patch(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isRecycling) {\r\n    if (lastVNode !== nextVNode) {\r\n        var lastFlags = lastVNode.flags;\r\n        var nextFlags = nextVNode.flags;\r\n        if (nextFlags & 28 /* Component */) {\r\n            var isClass = (nextFlags & 4 /* ComponentClass */) > 0;\r\n            if (lastFlags & 28 /* Component */) {\r\n                patchComponent(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isClass, isRecycling);\r\n            }\r\n            else {\r\n                replaceVNode(parentDom, mountComponent(nextVNode, null, lifecycle, context, isSVG, isClass), lastVNode, lifecycle, isRecycling);\r\n            }\r\n        }\r\n        else if (nextFlags & 3970 /* Element */) {\r\n            if (lastFlags & 3970 /* Element */) {\r\n                patchElement(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isRecycling);\r\n            }\r\n            else {\r\n                replaceVNode(parentDom, mountElement(nextVNode, null, lifecycle, context, isSVG), lastVNode, lifecycle, isRecycling);\r\n            }\r\n        }\r\n        else if (nextFlags & 1 /* Text */) {\r\n            if (lastFlags & 1 /* Text */) {\r\n                patchText(lastVNode, nextVNode);\r\n            }\r\n            else {\r\n                replaceVNode(parentDom, mountText(nextVNode, null), lastVNode, lifecycle, isRecycling);\r\n            }\r\n        }\r\n        else if (nextFlags & 4096 /* Void */) {\r\n            if (lastFlags & 4096 /* Void */) {\r\n                patchVoid(lastVNode, nextVNode);\r\n            }\r\n            else {\r\n                replaceVNode(parentDom, mountVoid(nextVNode, null), lastVNode, lifecycle, isRecycling);\r\n            }\r\n        }\r\n        else {\r\n            // Error case: mount new one replacing old one\r\n            replaceLastChildAndUnmount(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isRecycling);\r\n        }\r\n    }\r\n}\r\nfunction unmountChildren(children, dom, lifecycle, isRecycling) {\r\n    if (isVNode(children)) {\r\n        unmount(children, dom, lifecycle, true, isRecycling);\r\n    }\r\n    else if (isArray$$1(children)) {\r\n        removeAllChildren(dom, children, lifecycle, isRecycling);\r\n    }\r\n    else {\r\n        dom.textContent = \"\";\r\n    }\r\n}\r\nfunction patchElement(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isRecycling) {\r\n    var nextTag = nextVNode.type;\r\n    var lastTag = lastVNode.type;\r\n    if (lastTag !== nextTag) {\r\n        replaceWithNewNode(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isRecycling);\r\n    }\r\n    else {\r\n        var dom = lastVNode.dom;\r\n        var lastProps = lastVNode.props;\r\n        var nextProps = nextVNode.props;\r\n        var lastChildren = lastVNode.children;\r\n        var nextChildren = nextVNode.children;\r\n        var lastFlags = lastVNode.flags;\r\n        var nextFlags = nextVNode.flags;\r\n        var nextRef = nextVNode.ref;\r\n        var lastClassName = lastVNode.className;\r\n        var nextClassName = nextVNode.className;\r\n        nextVNode.dom = dom;\r\n        isSVG = isSVG || (nextFlags & 128 /* SvgElement */) > 0;\r\n        if (lastChildren !== nextChildren) {\r\n            var childrenIsSVG = isSVG === true && nextVNode.type !== \"foreignObject\";\r\n            patchChildren(lastFlags, nextFlags, lastChildren, nextChildren, dom, lifecycle, context, childrenIsSVG, isRecycling);\r\n        }\r\n        // inlined patchProps  -- starts --\r\n        if (lastProps !== nextProps) {\r\n            var lastPropsOrEmpty = lastProps || EMPTY_OBJ;\r\n            var nextPropsOrEmpty = nextProps || EMPTY_OBJ;\r\n            var hasControlledValue = false;\r\n            if (nextPropsOrEmpty !== EMPTY_OBJ) {\r\n                var isFormElement = (nextFlags & 3584 /* FormElement */) > 0;\r\n                if (isFormElement) {\r\n                    hasControlledValue = isControlledFormElement(nextPropsOrEmpty);\r\n                }\r\n                for (var prop in nextPropsOrEmpty) {\r\n                    // do not add a hasOwnProperty check here, it affects performance\r\n                    var nextValue = nextPropsOrEmpty[prop];\r\n                    var lastValue = lastPropsOrEmpty[prop];\r\n                    patchProp(prop, lastValue, nextValue, dom, isSVG, hasControlledValue);\r\n                }\r\n                if (isFormElement) {\r\n                    // When inferno is recycling form element, we need to process it like it would be mounting\r\n                    processElement(nextFlags, nextVNode, dom, nextPropsOrEmpty, isRecycling, hasControlledValue);\r\n                }\r\n            }\r\n            if (lastPropsOrEmpty !== EMPTY_OBJ) {\r\n                for (var prop$1 in lastPropsOrEmpty) {\r\n                    // do not add a hasOwnProperty check here, it affects performance\r\n                    if (isNullOrUndef(nextPropsOrEmpty[prop$1]) &&\r\n                        !isNullOrUndef(lastPropsOrEmpty[prop$1])) {\r\n                        removeProp(prop$1, lastPropsOrEmpty[prop$1], dom, nextFlags);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        // inlined patchProps  -- ends --\r\n        if (lastClassName !== nextClassName) {\r\n            if (isNullOrUndef(nextClassName)) {\r\n                dom.removeAttribute(\"class\");\r\n            }\r\n            else {\r\n                if (isSVG) {\r\n                    dom.setAttribute(\"class\", nextClassName);\r\n                }\r\n                else {\r\n                    dom.className = nextClassName;\r\n                }\r\n            }\r\n        }\r\n        if (nextRef) {\r\n            if (lastVNode.ref !== nextRef || isRecycling) {\r\n                mountRef(dom, nextRef, lifecycle);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction patchChildren(lastFlags, nextFlags, lastChildren, nextChildren, dom, lifecycle, context, isSVG, isRecycling) {\r\n    var patchArray = false;\r\n    var patchKeyed = false;\r\n    if (nextFlags & 64 /* HasNonKeyedChildren */) {\r\n        patchArray = true;\r\n    }\r\n    else if ((lastFlags & 32 /* HasKeyedChildren */) > 0 &&\r\n        (nextFlags & 32 /* HasKeyedChildren */) > 0) {\r\n        patchKeyed = true;\r\n        patchArray = true;\r\n    }\r\n    else if (isInvalid(nextChildren)) {\r\n        unmountChildren(lastChildren, dom, lifecycle, isRecycling);\r\n    }\r\n    else if (isInvalid(lastChildren)) {\r\n        if (isStringOrNumber(nextChildren)) {\r\n            setTextContent(dom, nextChildren);\r\n        }\r\n        else {\r\n            if (isArray$$1(nextChildren)) {\r\n                mountArrayChildren(nextChildren, dom, lifecycle, context, isSVG);\r\n            }\r\n            else {\r\n                mount(nextChildren, dom, lifecycle, context, isSVG);\r\n            }\r\n        }\r\n    }\r\n    else if (isStringOrNumber(nextChildren)) {\r\n        if (isStringOrNumber(lastChildren)) {\r\n            updateTextContent(dom, nextChildren);\r\n        }\r\n        else {\r\n            unmountChildren(lastChildren, dom, lifecycle, isRecycling);\r\n            setTextContent(dom, nextChildren);\r\n        }\r\n    }\r\n    else if (isArray$$1(nextChildren)) {\r\n        if (isArray$$1(lastChildren)) {\r\n            patchArray = true;\r\n            if (isKeyed(lastChildren, nextChildren)) {\r\n                patchKeyed = true;\r\n            }\r\n        }\r\n        else {\r\n            unmountChildren(lastChildren, dom, lifecycle, isRecycling);\r\n            mountArrayChildren(nextChildren, dom, lifecycle, context, isSVG);\r\n        }\r\n    }\r\n    else if (isArray$$1(lastChildren)) {\r\n        removeAllChildren(dom, lastChildren, lifecycle, isRecycling);\r\n        mount(nextChildren, dom, lifecycle, context, isSVG);\r\n    }\r\n    else if (isVNode(nextChildren)) {\r\n        if (isVNode(lastChildren)) {\r\n            patch(lastChildren, nextChildren, dom, lifecycle, context, isSVG, isRecycling);\r\n        }\r\n        else {\r\n            unmountChildren(lastChildren, dom, lifecycle, isRecycling);\r\n            mount(nextChildren, dom, lifecycle, context, isSVG);\r\n        }\r\n    }\r\n    if (patchArray) {\r\n        var lastLength = lastChildren.length;\r\n        var nextLength = nextChildren.length;\r\n        // Fast path's for both algorithms\r\n        if (lastLength === 0) {\r\n            if (nextLength > 0) {\r\n                mountArrayChildren(nextChildren, dom, lifecycle, context, isSVG);\r\n            }\r\n        }\r\n        else if (nextLength === 0) {\r\n            removeAllChildren(dom, lastChildren, lifecycle, isRecycling);\r\n        }\r\n        else if (patchKeyed) {\r\n            patchKeyedChildren(lastChildren, nextChildren, dom, lifecycle, context, isSVG, isRecycling, lastLength, nextLength);\r\n        }\r\n        else {\r\n            patchNonKeyedChildren(lastChildren, nextChildren, dom, lifecycle, context, isSVG, isRecycling, lastLength, nextLength);\r\n        }\r\n    }\r\n}\r\nfunction patchComponent(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isClass, isRecycling) {\r\n    var lastType = lastVNode.type;\r\n    var nextType = nextVNode.type;\r\n    var lastKey = lastVNode.key;\r\n    var nextKey = nextVNode.key;\r\n    if (lastType !== nextType || lastKey !== nextKey) {\r\n        replaceWithNewNode(lastVNode, nextVNode, parentDom, lifecycle, context, isSVG, isRecycling);\r\n        return false;\r\n    }\r\n    else {\r\n        var nextProps = nextVNode.props || EMPTY_OBJ;\r\n        if (isClass) {\r\n            var instance = lastVNode.children;\r\n            instance._updating = true;\r\n            if (instance._unmounted) {\r\n                if (isNull(parentDom)) {\r\n                    return true;\r\n                }\r\n                replaceChild(parentDom, mountComponent(nextVNode, null, lifecycle, context, isSVG, (nextVNode.flags & 4 /* ComponentClass */) > 0), lastVNode.dom);\r\n            }\r\n            else {\r\n                var hasComponentDidUpdate = !isUndefined(instance.componentDidUpdate);\r\n                var nextState = instance.state;\r\n                // When component has componentDidUpdate hook, we need to clone lastState or will be modified by reference during update\r\n                var lastState = hasComponentDidUpdate\r\n                    ? combineFrom(nextState, null)\r\n                    : nextState;\r\n                var lastProps = instance.props;\r\n                nextVNode.children = instance;\r\n                instance._isSVG = isSVG;\r\n                var lastInput = instance._lastInput;\r\n                var nextInput = instance._updateComponent(lastState, nextState, lastProps, nextProps, context, false, false);\r\n                // If this component was destroyed by its parent do nothing, this is no-op\r\n                // It can happen by using external callback etc during render / update\r\n                if (instance._unmounted) {\r\n                    return false;\r\n                }\r\n                var didUpdate = true;\r\n                // Update component before getting child context\r\n                var childContext;\r\n                if (!isNullOrUndef(instance.getChildContext)) {\r\n                    childContext = instance.getChildContext();\r\n                }\r\n                if (isNullOrUndef(childContext)) {\r\n                    childContext = context;\r\n                }\r\n                else {\r\n                    childContext = combineFrom(context, childContext);\r\n                }\r\n                instance._childContext = childContext;\r\n                if (isInvalid(nextInput)) {\r\n                    nextInput = createVoidVNode();\r\n                }\r\n                else if (nextInput === NO_OP) {\r\n                    nextInput = lastInput;\r\n                    didUpdate = false;\r\n                }\r\n                else if (isStringOrNumber(nextInput)) {\r\n                    nextInput = createTextVNode(nextInput, null);\r\n                }\r\n                else if (isArray$$1(nextInput)) {\r\n                    throwError();\r\n                }\r\n                else if (isObject$$1(nextInput)) {\r\n                    if (!isNull(nextInput.dom)) {\r\n                        nextInput = directClone(nextInput);\r\n                    }\r\n                }\r\n                if (nextInput.flags & 28 /* Component */) {\r\n                    nextInput.parentVNode = nextVNode;\r\n                }\r\n                else if (lastInput.flags & 28 /* Component */) {\r\n                    lastInput.parentVNode = nextVNode;\r\n                }\r\n                instance._lastInput = nextInput;\r\n                instance._vNode = nextVNode;\r\n                if (didUpdate) {\r\n                    patch(lastInput, nextInput, parentDom, lifecycle, childContext, isSVG, isRecycling);\r\n                    if (hasComponentDidUpdate && instance.componentDidUpdate) {\r\n                        instance.componentDidUpdate(lastProps, lastState);\r\n                    }\r\n                    if (!isNull(options.afterUpdate)) {\r\n                        options.afterUpdate(nextVNode);\r\n                    }\r\n                    if (options.findDOMNodeEnabled) {\r\n                        componentToDOMNodeMap.set(instance, nextInput.dom);\r\n                    }\r\n                }\r\n                nextVNode.dom = nextInput.dom;\r\n            }\r\n            instance._updating = false;\r\n        }\r\n        else {\r\n            var shouldUpdate = true;\r\n            var lastProps$1 = lastVNode.props;\r\n            var nextHooks = nextVNode.ref;\r\n            var nextHooksDefined = !isNullOrUndef(nextHooks);\r\n            var lastInput$1 = lastVNode.children;\r\n            var nextInput$1 = lastInput$1;\r\n            nextVNode.dom = lastVNode.dom;\r\n            nextVNode.children = lastInput$1;\r\n            if (lastKey !== nextKey) {\r\n                shouldUpdate = true;\r\n            }\r\n            else {\r\n                if (nextHooksDefined &&\r\n                    !isNullOrUndef(nextHooks.onComponentShouldUpdate)) {\r\n                    shouldUpdate = nextHooks.onComponentShouldUpdate(lastProps$1, nextProps);\r\n                }\r\n            }\r\n            if (shouldUpdate !== false) {\r\n                if (nextHooksDefined &&\r\n                    !isNullOrUndef(nextHooks.onComponentWillUpdate)) {\r\n                    nextHooks.onComponentWillUpdate(lastProps$1, nextProps);\r\n                }\r\n                nextInput$1 = nextType(nextProps, context);\r\n                if (isInvalid(nextInput$1)) {\r\n                    nextInput$1 = createVoidVNode();\r\n                }\r\n                else if (isStringOrNumber(nextInput$1) && nextInput$1 !== NO_OP) {\r\n                    nextInput$1 = createTextVNode(nextInput$1, null);\r\n                }\r\n                else if (isArray$$1(nextInput$1)) {\r\n                    throwError();\r\n                }\r\n                else if (isObject$$1(nextInput$1)) {\r\n                    if (!isNull(nextInput$1.dom)) {\r\n                        nextInput$1 = directClone(nextInput$1);\r\n                    }\r\n                }\r\n                if (nextInput$1 !== NO_OP) {\r\n                    patch(lastInput$1, nextInput$1, parentDom, lifecycle, context, isSVG, isRecycling);\r\n                    nextVNode.children = nextInput$1;\r\n                    if (nextHooksDefined &&\r\n                        !isNullOrUndef(nextHooks.onComponentDidUpdate)) {\r\n                        nextHooks.onComponentDidUpdate(lastProps$1, nextProps);\r\n                    }\r\n                    nextVNode.dom = nextInput$1.dom;\r\n                }\r\n            }\r\n            if (nextInput$1.flags & 28 /* Component */) {\r\n                nextInput$1.parentVNode = nextVNode;\r\n            }\r\n            else if (lastInput$1.flags & 28 /* Component */) {\r\n                lastInput$1.parentVNode = nextVNode;\r\n            }\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction patchText(lastVNode, nextVNode) {\r\n    var nextText = nextVNode.children;\r\n    var dom = lastVNode.dom;\r\n    nextVNode.dom = dom;\r\n    if (lastVNode.children !== nextText) {\r\n        dom.nodeValue = nextText;\r\n    }\r\n}\r\nfunction patchVoid(lastVNode, nextVNode) {\r\n    nextVNode.dom = lastVNode.dom;\r\n}\r\nfunction patchNonKeyedChildren(lastChildren, nextChildren, dom, lifecycle, context, isSVG, isRecycling, lastChildrenLength, nextChildrenLength) {\r\n    var commonLength = lastChildrenLength > nextChildrenLength\r\n        ? nextChildrenLength\r\n        : lastChildrenLength;\r\n    var i = 0;\r\n    for (; i < commonLength; i++) {\r\n        var nextChild = nextChildren[i];\r\n        if (nextChild.dom) {\r\n            nextChild = nextChildren[i] = directClone(nextChild);\r\n        }\r\n        patch(lastChildren[i], nextChild, dom, lifecycle, context, isSVG, isRecycling);\r\n    }\r\n    if (lastChildrenLength < nextChildrenLength) {\r\n        for (i = commonLength; i < nextChildrenLength; i++) {\r\n            var nextChild$1 = nextChildren[i];\r\n            if (nextChild$1.dom) {\r\n                nextChild$1 = nextChildren[i] = directClone(nextChild$1);\r\n            }\r\n            appendChild(dom, mount(nextChild$1, null, lifecycle, context, isSVG));\r\n        }\r\n    }\r\n    else if (lastChildrenLength > nextChildrenLength) {\r\n        for (i = commonLength; i < lastChildrenLength; i++) {\r\n            unmount(lastChildren[i], dom, lifecycle, false, isRecycling);\r\n        }\r\n    }\r\n}\r\nfunction patchKeyedChildren(a, b, dom, lifecycle, context, isSVG, isRecycling, aLength, bLength) {\r\n    var aEnd = aLength - 1;\r\n    var bEnd = bLength - 1;\r\n    var aStart = 0;\r\n    var bStart = 0;\r\n    var i;\r\n    var j;\r\n    var aNode;\r\n    var bNode;\r\n    var nextNode;\r\n    var nextPos;\r\n    var node;\r\n    var aStartNode = a[aStart];\r\n    var bStartNode = b[bStart];\r\n    var aEndNode = a[aEnd];\r\n    var bEndNode = b[bEnd];\r\n    if (bStartNode.dom) {\r\n        b[bStart] = bStartNode = directClone(bStartNode);\r\n    }\r\n    if (bEndNode.dom) {\r\n        b[bEnd] = bEndNode = directClone(bEndNode);\r\n    }\r\n    // Step 1\r\n    // tslint:disable-next-line\r\n    outer: {\r\n        // Sync nodes with the same key at the beginning.\r\n        while (aStartNode.key === bStartNode.key) {\r\n            patch(aStartNode, bStartNode, dom, lifecycle, context, isSVG, isRecycling);\r\n            aStart++;\r\n            bStart++;\r\n            if (aStart > aEnd || bStart > bEnd) {\r\n                break outer;\r\n            }\r\n            aStartNode = a[aStart];\r\n            bStartNode = b[bStart];\r\n            if (bStartNode.dom) {\r\n                b[bStart] = bStartNode = directClone(bStartNode);\r\n            }\r\n        }\r\n        // Sync nodes with the same key at the end.\r\n        while (aEndNode.key === bEndNode.key) {\r\n            patch(aEndNode, bEndNode, dom, lifecycle, context, isSVG, isRecycling);\r\n            aEnd--;\r\n            bEnd--;\r\n            if (aStart > aEnd || bStart > bEnd) {\r\n                break outer;\r\n            }\r\n            aEndNode = a[aEnd];\r\n            bEndNode = b[bEnd];\r\n            if (bEndNode.dom) {\r\n                b[bEnd] = bEndNode = directClone(bEndNode);\r\n            }\r\n        }\r\n    }\r\n    if (aStart > aEnd) {\r\n        if (bStart <= bEnd) {\r\n            nextPos = bEnd + 1;\r\n            nextNode = nextPos < bLength ? b[nextPos].dom : null;\r\n            while (bStart <= bEnd) {\r\n                node = b[bStart];\r\n                if (node.dom) {\r\n                    b[bStart] = node = directClone(node);\r\n                }\r\n                bStart++;\r\n                insertOrAppend(dom, mount(node, null, lifecycle, context, isSVG), nextNode);\r\n            }\r\n        }\r\n    }\r\n    else if (bStart > bEnd) {\r\n        while (aStart <= aEnd) {\r\n            unmount(a[aStart++], dom, lifecycle, false, isRecycling);\r\n        }\r\n    }\r\n    else {\r\n        var aLeft = aEnd - aStart + 1;\r\n        var bLeft = bEnd - bStart + 1;\r\n        var sources = new Array(bLeft);\r\n        // Mark all nodes as inserted.\r\n        for (i = 0; i < bLeft; i++) {\r\n            sources[i] = -1;\r\n        }\r\n        var moved = false;\r\n        var pos = 0;\r\n        var patched = 0;\r\n        // When sizes are small, just loop them through\r\n        if (bLeft <= 4 || aLeft * bLeft <= 16) {\r\n            for (i = aStart; i <= aEnd; i++) {\r\n                aNode = a[i];\r\n                if (patched < bLeft) {\r\n                    for (j = bStart; j <= bEnd; j++) {\r\n                        bNode = b[j];\r\n                        if (aNode.key === bNode.key) {\r\n                            sources[j - bStart] = i;\r\n                            if (pos > j) {\r\n                                moved = true;\r\n                            }\r\n                            else {\r\n                                pos = j;\r\n                            }\r\n                            if (bNode.dom) {\r\n                                b[j] = bNode = directClone(bNode);\r\n                            }\r\n                            patch(aNode, bNode, dom, lifecycle, context, isSVG, isRecycling);\r\n                            patched++;\r\n                            a[i] = null;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            var keyIndex = new Map();\r\n            // Map keys by their index in array\r\n            for (i = bStart; i <= bEnd; i++) {\r\n                keyIndex.set(b[i].key, i);\r\n            }\r\n            // Try to patch same keys\r\n            for (i = aStart; i <= aEnd; i++) {\r\n                aNode = a[i];\r\n                if (patched < bLeft) {\r\n                    j = keyIndex.get(aNode.key);\r\n                    if (!isUndefined(j)) {\r\n                        bNode = b[j];\r\n                        sources[j - bStart] = i;\r\n                        if (pos > j) {\r\n                            moved = true;\r\n                        }\r\n                        else {\r\n                            pos = j;\r\n                        }\r\n                        if (bNode.dom) {\r\n                            b[j] = bNode = directClone(bNode);\r\n                        }\r\n                        patch(aNode, bNode, dom, lifecycle, context, isSVG, isRecycling);\r\n                        patched++;\r\n                        a[i] = null;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        // fast-path: if nothing patched remove all old and add all new\r\n        if (aLeft === aLength && patched === 0) {\r\n            removeAllChildren(dom, a, lifecycle, isRecycling);\r\n            while (bStart < bLeft) {\r\n                node = b[bStart];\r\n                if (node.dom) {\r\n                    b[bStart] = node = directClone(node);\r\n                }\r\n                bStart++;\r\n                insertOrAppend(dom, mount(node, null, lifecycle, context, isSVG), null);\r\n            }\r\n        }\r\n        else {\r\n            i = aLeft - patched;\r\n            while (i > 0) {\r\n                aNode = a[aStart++];\r\n                if (!isNull(aNode)) {\r\n                    unmount(aNode, dom, lifecycle, true, isRecycling);\r\n                    i--;\r\n                }\r\n            }\r\n            if (moved) {\r\n                var seq = lis_algorithm(sources);\r\n                j = seq.length - 1;\r\n                for (i = bLeft - 1; i >= 0; i--) {\r\n                    if (sources[i] === -1) {\r\n                        pos = i + bStart;\r\n                        node = b[pos];\r\n                        if (node.dom) {\r\n                            b[pos] = node = directClone(node);\r\n                        }\r\n                        nextPos = pos + 1;\r\n                        insertOrAppend(dom, mount(node, null, lifecycle, context, isSVG), nextPos < bLength ? b[nextPos].dom : null);\r\n                    }\r\n                    else {\r\n                        if (j < 0 || i !== seq[j]) {\r\n                            pos = i + bStart;\r\n                            node = b[pos];\r\n                            nextPos = pos + 1;\r\n                            insertOrAppend(dom, node.dom, nextPos < bLength ? b[nextPos].dom : null);\r\n                        }\r\n                        else {\r\n                            j--;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else if (patched !== bLeft) {\r\n                // when patched count doesn't match b length we need to insert those new ones\r\n                // loop backwards so we can use insertBefore\r\n                for (i = bLeft - 1; i >= 0; i--) {\r\n                    if (sources[i] === -1) {\r\n                        pos = i + bStart;\r\n                        node = b[pos];\r\n                        if (node.dom) {\r\n                            b[pos] = node = directClone(node);\r\n                        }\r\n                        nextPos = pos + 1;\r\n                        insertOrAppend(dom, mount(node, null, lifecycle, context, isSVG), nextPos < bLength ? b[nextPos].dom : null);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n// // https://en.wikipedia.org/wiki/Longest_increasing_subsequence\r\nfunction lis_algorithm(arr) {\r\n    var p = arr.slice(0);\r\n    var result = [0];\r\n    var i;\r\n    var j;\r\n    var u;\r\n    var v;\r\n    var c;\r\n    var len = arr.length;\r\n    for (i = 0; i < len; i++) {\r\n        var arrI = arr[i];\r\n        if (arrI !== -1) {\r\n            j = result[result.length - 1];\r\n            if (arr[j] < arrI) {\r\n                p[i] = j;\r\n                result.push(i);\r\n                continue;\r\n            }\r\n            u = 0;\r\n            v = result.length - 1;\r\n            while (u < v) {\r\n                c = ((u + v) / 2) | 0;\r\n                if (arr[result[c]] < arrI) {\r\n                    u = c + 1;\r\n                }\r\n                else {\r\n                    v = c;\r\n                }\r\n            }\r\n            if (arrI < arr[result[u]]) {\r\n                if (u > 0) {\r\n                    p[i] = result[u - 1];\r\n                }\r\n                result[u] = i;\r\n            }\r\n        }\r\n    }\r\n    u = result.length;\r\n    v = result[u - 1];\r\n    while (u-- > 0) {\r\n        result[u] = v;\r\n        v = p[v];\r\n    }\r\n    return result;\r\n}\r\nfunction isAttrAnEvent(attr) {\r\n    return attr[0] === \"o\" && attr[1] === \"n\";\r\n}\r\nfunction patchProp(prop, lastValue, nextValue, dom, isSVG, hasControlledValue) {\r\n    if (lastValue !== nextValue) {\r\n        if (skipProps.has(prop) || (hasControlledValue && prop === \"value\")) {\r\n            return;\r\n        }\r\n        else if (booleanProps.has(prop)) {\r\n            prop = prop === \"autoFocus\" ? prop.toLowerCase() : prop;\r\n            dom[prop] = !!nextValue;\r\n        }\r\n        else if (strictProps.has(prop)) {\r\n            var value = isNullOrUndef(nextValue) ? \"\" : nextValue;\r\n            if (dom[prop] !== value) {\r\n                dom[prop] = value;\r\n            }\r\n        }\r\n        else if (isAttrAnEvent(prop)) {\r\n            patchEvent(prop, lastValue, nextValue, dom);\r\n        }\r\n        else if (isNullOrUndef(nextValue)) {\r\n            dom.removeAttribute(prop);\r\n        }\r\n        else if (prop === \"style\") {\r\n            patchStyle(lastValue, nextValue, dom);\r\n        }\r\n        else if (prop === \"dangerouslySetInnerHTML\") {\r\n            var lastHtml = lastValue && lastValue.__html;\r\n            var nextHtml = nextValue && nextValue.__html;\r\n            if (lastHtml !== nextHtml) {\r\n                if (!isNullOrUndef(nextHtml) && !isSameInnerHTML(dom, nextHtml)) {\r\n                    dom.innerHTML = nextHtml;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            // We optimize for NS being boolean. Its 99.9% time false\r\n            if (isSVG && namespaces.has(prop)) {\r\n                // If we end up in this path we can read property again\r\n                dom.setAttributeNS(namespaces.get(prop), prop, nextValue);\r\n            }\r\n            else {\r\n                dom.setAttribute(prop, nextValue);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction patchEvent(name, lastValue, nextValue, dom) {\r\n    if (lastValue !== nextValue) {\r\n        if (delegatedEvents.has(name)) {\r\n            handleEvent(name, lastValue, nextValue, dom);\r\n        }\r\n        else {\r\n            var nameLowerCase = name.toLowerCase();\r\n            var domEvent = dom[nameLowerCase];\r\n            // if the function is wrapped, that means it's been controlled by a wrapper\r\n            if (domEvent && domEvent.wrapped) {\r\n                return;\r\n            }\r\n            if (!isFunction$$1(nextValue) && !isNullOrUndef(nextValue)) {\r\n                var linkEvent = nextValue.event;\r\n                if (linkEvent && isFunction$$1(linkEvent)) {\r\n                    dom[nameLowerCase] = function (e) {\r\n                        linkEvent(nextValue.data, e);\r\n                    };\r\n                }\r\n                else {\r\n                    throwError();\r\n                }\r\n            }\r\n            else {\r\n                dom[nameLowerCase] = nextValue;\r\n            }\r\n        }\r\n    }\r\n}\r\n// We are assuming here that we come from patchProp routine\r\n// -nextAttrValue cannot be null or undefined\r\nfunction patchStyle(lastAttrValue, nextAttrValue, dom) {\r\n    var domStyle = dom.style;\r\n    var style;\r\n    var value;\r\n    if (isString$$1(nextAttrValue)) {\r\n        domStyle.cssText = nextAttrValue;\r\n        return;\r\n    }\r\n    if (!isNullOrUndef(lastAttrValue) && !isString$$1(lastAttrValue)) {\r\n        for (style in nextAttrValue) {\r\n            // do not add a hasOwnProperty check here, it affects performance\r\n            value = nextAttrValue[style];\r\n            if (value !== lastAttrValue[style]) {\r\n                domStyle[style] =\r\n                    !isNumber(value) || isUnitlessNumber.has(style)\r\n                        ? value\r\n                        : value + \"px\";\r\n            }\r\n        }\r\n        for (style in lastAttrValue) {\r\n            if (isNullOrUndef(nextAttrValue[style])) {\r\n                domStyle[style] = \"\";\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        for (style in nextAttrValue) {\r\n            value = nextAttrValue[style];\r\n            domStyle[style] =\r\n                !isNumber(value) || isUnitlessNumber.has(style) ? value : value + \"px\";\r\n        }\r\n    }\r\n}\r\nfunction removeProp(prop, lastValue, dom, nextFlags) {\r\n    if (prop === \"value\") {\r\n        // When removing value of select element, it needs to be set to null instead empty string, because empty string is valid value for option which makes that option selected\r\n        // MS IE/Edge don't follow html spec for textArea and input elements and we need to set empty string to value in those cases to avoid \"null\" and \"undefined\" texts\r\n        dom.value = nextFlags & 2048 /* SelectElement */ ? null : \"\";\r\n    }\r\n    else if (prop === \"style\") {\r\n        dom.removeAttribute(\"style\");\r\n    }\r\n    else if (isAttrAnEvent(prop)) {\r\n        handleEvent(prop, lastValue, null, dom);\r\n    }\r\n    else {\r\n        dom.removeAttribute(prop);\r\n    }\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction mount(vNode, parentDom, lifecycle, context, isSVG) {\r\n    var flags = vNode.flags;\r\n    if (flags & 3970 /* Element */) {\r\n        return mountElement(vNode, parentDom, lifecycle, context, isSVG);\r\n    }\r\n    else if (flags & 28 /* Component */) {\r\n        return mountComponent(vNode, parentDom, lifecycle, context, isSVG, (flags & 4 /* ComponentClass */) > 0);\r\n    }\r\n    else if (flags & 4096 /* Void */) {\r\n        return mountVoid(vNode, parentDom);\r\n    }\r\n    else if (flags & 1 /* Text */) {\r\n        return mountText(vNode, parentDom);\r\n    }\r\n    else {\r\n        throwError();\r\n    }\r\n}\r\nfunction mountText(vNode, parentDom) {\r\n    var dom = document.createTextNode(vNode.children);\r\n    vNode.dom = dom;\r\n    if (!isNull(parentDom)) {\r\n        appendChild(parentDom, dom);\r\n    }\r\n    return dom;\r\n}\r\nfunction mountVoid(vNode, parentDom) {\r\n    var dom = document.createTextNode(\"\");\r\n    vNode.dom = dom;\r\n    if (!isNull(parentDom)) {\r\n        appendChild(parentDom, dom);\r\n    }\r\n    return dom;\r\n}\r\nfunction mountElement(vNode, parentDom, lifecycle, context, isSVG) {\r\n    var dom;\r\n    if (options.recyclingEnabled) {\r\n        dom = recycleElement(vNode, lifecycle, context, isSVG);\r\n        if (!isNull(dom)) {\r\n            if (!isNull(parentDom)) {\r\n                appendChild(parentDom, dom);\r\n            }\r\n            return dom;\r\n        }\r\n    }\r\n    var flags = vNode.flags;\r\n    isSVG = isSVG || (flags & 128 /* SvgElement */) > 0;\r\n    dom = documentCreateElement(vNode.type, isSVG);\r\n    var children = vNode.children;\r\n    var props = vNode.props;\r\n    var className = vNode.className;\r\n    var ref = vNode.ref;\r\n    vNode.dom = dom;\r\n    if (!isInvalid(children)) {\r\n        if (isStringOrNumber(children)) {\r\n            setTextContent(dom, children);\r\n        }\r\n        else {\r\n            var childrenIsSVG = isSVG === true && vNode.type !== \"foreignObject\";\r\n            if (isArray$$1(children)) {\r\n                mountArrayChildren(children, dom, lifecycle, context, childrenIsSVG);\r\n            }\r\n            else if (isVNode(children)) {\r\n                mount(children, dom, lifecycle, context, childrenIsSVG);\r\n            }\r\n        }\r\n    }\r\n    if (!isNull(props)) {\r\n        var hasControlledValue = false;\r\n        var isFormElement = (flags & 3584 /* FormElement */) > 0;\r\n        if (isFormElement) {\r\n            hasControlledValue = isControlledFormElement(props);\r\n        }\r\n        for (var prop in props) {\r\n            // do not add a hasOwnProperty check here, it affects performance\r\n            patchProp(prop, null, props[prop], dom, isSVG, hasControlledValue);\r\n        }\r\n        if (isFormElement) {\r\n            processElement(flags, vNode, dom, props, true, hasControlledValue);\r\n        }\r\n    }\r\n    if (className !== null) {\r\n        if (isSVG) {\r\n            dom.setAttribute(\"class\", className);\r\n        }\r\n        else {\r\n            dom.className = className;\r\n        }\r\n    }\r\n    if (!isNull(ref)) {\r\n        mountRef(dom, ref, lifecycle);\r\n    }\r\n    if (!isNull(parentDom)) {\r\n        appendChild(parentDom, dom);\r\n    }\r\n    return dom;\r\n}\r\nfunction mountArrayChildren(children, dom, lifecycle, context, isSVG) {\r\n    for (var i = 0, len = children.length; i < len; i++) {\r\n        var child = children[i];\r\n        // Verify can string/number be here. might cause de-opt. - Normalization takes care of it.\r\n        if (!isInvalid(child)) {\r\n            if (child.dom) {\r\n                children[i] = child = directClone(child);\r\n            }\r\n            mount(children[i], dom, lifecycle, context, isSVG);\r\n        }\r\n    }\r\n}\r\nfunction mountComponent(vNode, parentDom, lifecycle, context, isSVG, isClass) {\r\n    var dom;\r\n    if (options.recyclingEnabled) {\r\n        dom = recycleComponent(vNode, lifecycle, context, isSVG);\r\n        if (!isNull(dom)) {\r\n            if (!isNull(parentDom)) {\r\n                appendChild(parentDom, dom);\r\n            }\r\n            return dom;\r\n        }\r\n    }\r\n    var type = vNode.type;\r\n    var props = vNode.props || EMPTY_OBJ;\r\n    var ref = vNode.ref;\r\n    if (isClass) {\r\n        var instance = createClassComponentInstance(vNode, type, props, context, isSVG, lifecycle);\r\n        var input = instance._lastInput;\r\n        instance._vNode = vNode;\r\n        vNode.dom = dom = mount(input, null, lifecycle, instance._childContext, isSVG);\r\n        if (!isNull(parentDom)) {\r\n            appendChild(parentDom, dom);\r\n        }\r\n        mountClassComponentCallbacks(vNode, ref, instance, lifecycle);\r\n        instance._updating = false;\r\n        if (options.findDOMNodeEnabled) {\r\n            componentToDOMNodeMap.set(instance, dom);\r\n        }\r\n    }\r\n    else {\r\n        var input$1 = createFunctionalComponentInput(vNode, type, props, context);\r\n        vNode.dom = dom = mount(input$1, null, lifecycle, context, isSVG);\r\n        vNode.children = input$1;\r\n        mountFunctionalComponentCallbacks(props, ref, dom, lifecycle);\r\n        if (!isNull(parentDom)) {\r\n            appendChild(parentDom, dom);\r\n        }\r\n    }\r\n    return dom;\r\n}\r\nfunction mountClassComponentCallbacks(vNode, ref, instance, lifecycle) {\r\n    if (ref) {\r\n        if (isFunction$$1(ref)) {\r\n            ref(instance);\r\n        }\r\n        else {\r\n            throwError();\r\n        }\r\n    }\r\n    var hasDidMount = !isUndefined(instance.componentDidMount);\r\n    var afterMount = options.afterMount;\r\n    if (hasDidMount || !isNull(afterMount)) {\r\n        lifecycle.addListener((function () {\r\n            instance._updating = true;\r\n            if (afterMount) {\r\n                afterMount(vNode);\r\n            }\r\n            if (hasDidMount) {\r\n                instance.componentDidMount();\r\n            }\r\n            instance._updating = false;\r\n        }));\r\n    }\r\n}\r\nfunction mountFunctionalComponentCallbacks(props, ref, dom, lifecycle) {\r\n    if (ref) {\r\n        if (!isNullOrUndef(ref.onComponentWillMount)) {\r\n            ref.onComponentWillMount(props);\r\n        }\r\n        if (!isNullOrUndef(ref.onComponentDidMount)) {\r\n            lifecycle.addListener((function () { return ref.onComponentDidMount(dom, props); }));\r\n        }\r\n    }\r\n}\r\nfunction mountRef(dom, value, lifecycle) {\r\n    if (isFunction$$1(value)) {\r\n        lifecycle.addListener((function () { return value(dom); }));\r\n    }\r\n    else {\r\n        if (isInvalid(value)) {\r\n            return;\r\n        }\r\n        throwError();\r\n    }\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\n// We need EMPTY_OBJ defined in one place.\r\n// Its used for comparison so we cant inline it into shared\r\nvar EMPTY_OBJ = {};\r\nfunction createClassComponentInstance(vNode, Component, props, context, isSVG, lifecycle) {\r\n    if (isUndefined(context)) {\r\n        context = EMPTY_OBJ; // Context should not be mutable\r\n    }\r\n    var instance = new Component(props, context);\r\n    vNode.children = instance;\r\n    instance._blockSetState = false;\r\n    instance.context = context;\r\n    if (instance.props === EMPTY_OBJ) {\r\n        instance.props = props;\r\n    }\r\n    // setState callbacks must fire after render is done when called from componentWillReceiveProps or componentWillMount\r\n    instance._lifecycle = lifecycle;\r\n    instance._unmounted = false;\r\n    instance._isSVG = isSVG;\r\n    if (!isNullOrUndef(instance.componentWillMount)) {\r\n        instance._blockRender = true;\r\n        instance.componentWillMount();\r\n        if (instance._pendingSetState) {\r\n            var state = instance.state;\r\n            var pending = instance._pendingState;\r\n            if (state === null) {\r\n                instance.state = pending;\r\n            }\r\n            else {\r\n                for (var key in pending) {\r\n                    state[key] = pending[key];\r\n                }\r\n            }\r\n            instance._pendingSetState = false;\r\n            instance._pendingState = null;\r\n        }\r\n        instance._blockRender = false;\r\n    }\r\n    var childContext;\r\n    if (!isNullOrUndef(instance.getChildContext)) {\r\n        childContext = instance.getChildContext();\r\n    }\r\n    if (isNullOrUndef(childContext)) {\r\n        instance._childContext = context;\r\n    }\r\n    else {\r\n        instance._childContext = combineFrom(context, childContext);\r\n    }\r\n    if (!isNull(options.beforeRender)) {\r\n        options.beforeRender(instance);\r\n    }\r\n    var input = instance.render(props, instance.state, context);\r\n    if (!isNull(options.afterRender)) {\r\n        options.afterRender(instance);\r\n    }\r\n    if (isArray$$1(input)) {\r\n        throwError();\r\n    }\r\n    else if (isInvalid(input)) {\r\n        input = createVoidVNode();\r\n    }\r\n    else if (isStringOrNumber(input)) {\r\n        input = createTextVNode(input, null);\r\n    }\r\n    else {\r\n        if (input.dom) {\r\n            input = directClone(input);\r\n        }\r\n        if (input.flags & 28 /* Component */) {\r\n            // if we have an input that is also a component, we run into a tricky situation\r\n            // where the root vNode needs to always have the correct DOM entry\r\n            // so we break monomorphism on our input and supply it our vNode as parentVNode\r\n            // we can optimise this in the future, but this gets us out of a lot of issues\r\n            input.parentVNode = vNode;\r\n        }\r\n    }\r\n    instance._lastInput = input;\r\n    return instance;\r\n}\r\nfunction replaceLastChildAndUnmount(lastInput, nextInput, parentDom, lifecycle, context, isSVG, isRecycling) {\r\n    replaceVNode(parentDom, mount(nextInput, null, lifecycle, context, isSVG), lastInput, lifecycle, isRecycling);\r\n}\r\nfunction replaceVNode(parentDom, dom, vNode, lifecycle, isRecycling) {\r\n    unmount(vNode, null, lifecycle, false, isRecycling);\r\n    replaceChild(parentDom, dom, vNode.dom);\r\n}\r\nfunction createFunctionalComponentInput(vNode, component, props, context) {\r\n    var input = component(props, context);\r\n    if (isArray$$1(input)) {\r\n        throwError();\r\n    }\r\n    else if (isInvalid(input)) {\r\n        input = createVoidVNode();\r\n    }\r\n    else if (isStringOrNumber(input)) {\r\n        input = createTextVNode(input, null);\r\n    }\r\n    else {\r\n        if (input.dom) {\r\n            input = directClone(input);\r\n        }\r\n        if (input.flags & 28 /* Component */) {\r\n            // if we have an input that is also a component, we run into a tricky situation\r\n            // where the root vNode needs to always have the correct DOM entry\r\n            // so we break monomorphism on our input and supply it our vNode as parentVNode\r\n            // we can optimise this in the future, but this gets us out of a lot of issues\r\n            input.parentVNode = vNode;\r\n        }\r\n    }\r\n    return input;\r\n}\r\nfunction setTextContent(dom, text) {\r\n    if (text !== \"\") {\r\n        dom.textContent = text;\r\n    }\r\n    else {\r\n        dom.appendChild(document.createTextNode(\"\"));\r\n    }\r\n}\r\nfunction updateTextContent(dom, text) {\r\n    var textNode = dom.firstChild;\r\n    // Guard against external change on DOM node.\r\n    if (isNull(textNode)) {\r\n        setTextContent(dom, text);\r\n    }\r\n    else {\r\n        textNode.nodeValue = text;\r\n    }\r\n}\r\nfunction appendChild(parentDom, dom) {\r\n    parentDom.appendChild(dom);\r\n}\r\nfunction insertOrAppend(parentDom, newNode, nextNode) {\r\n    if (isNullOrUndef(nextNode)) {\r\n        appendChild(parentDom, newNode);\r\n    }\r\n    else {\r\n        parentDom.insertBefore(newNode, nextNode);\r\n    }\r\n}\r\nfunction documentCreateElement(tag, isSVG) {\r\n    if (isSVG === true) {\r\n        return document.createElementNS(svgNS, tag);\r\n    }\r\n    else {\r\n        return document.createElement(tag);\r\n    }\r\n}\r\nfunction replaceWithNewNode(lastNode, nextNode, parentDom, lifecycle, context, isSVG, isRecycling) {\r\n    unmount(lastNode, null, lifecycle, false, isRecycling);\r\n    var dom = mount(nextNode, null, lifecycle, context, isSVG);\r\n    nextNode.dom = dom;\r\n    replaceChild(parentDom, dom, lastNode.dom);\r\n}\r\nfunction replaceChild(parentDom, newDom, lastDom) {\r\n    if (!parentDom) {\r\n        parentDom = lastDom.parentNode;\r\n    }\r\n    parentDom.replaceChild(newDom, lastDom);\r\n}\r\nfunction removeChild(parentDom, dom) {\r\n    parentDom.removeChild(dom);\r\n}\r\nfunction removeAllChildren(dom, children, lifecycle, isRecycling) {\r\n    if (!options.recyclingEnabled || (options.recyclingEnabled && !isRecycling)) {\r\n        removeChildren(null, children, lifecycle, isRecycling);\r\n    }\r\n    dom.textContent = \"\";\r\n}\r\nfunction removeChildren(dom, children, lifecycle, isRecycling) {\r\n    for (var i = 0, len = children.length; i < len; i++) {\r\n        var child = children[i];\r\n        if (!isInvalid(child)) {\r\n            unmount(child, dom, lifecycle, true, isRecycling);\r\n        }\r\n    }\r\n}\r\nfunction isKeyed(lastChildren, nextChildren) {\r\n    return (nextChildren.length > 0 &&\r\n        !isNullOrUndef(nextChildren[0]) &&\r\n        !isNullOrUndef(nextChildren[0].key) &&\r\n        lastChildren.length > 0 &&\r\n        !isNullOrUndef(lastChildren[0]) &&\r\n        !isNullOrUndef(lastChildren[0].key));\r\n}\r\nfunction isSameInnerHTML(dom, innerHTML) {\r\n    var tempdom = document.createElement(\"i\");\r\n    tempdom.innerHTML = innerHTML;\r\n    return tempdom.innerHTML === dom.innerHTML;\r\n}\r\nfunction isSamePropsInnerHTML(dom, props) {\r\n    return Boolean(props &&\r\n        props.dangerouslySetInnerHTML &&\r\n        props.dangerouslySetInnerHTML.__html &&\r\n        isSameInnerHTML(dom, props.dangerouslySetInnerHTML.__html));\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\n/**\r\n * Creates virtual node\r\n * @param {number} flags\r\n * @param {string|Function|null} type\r\n * @param {string|null=} className\r\n * @param {object=} children\r\n * @param {object=} props\r\n * @param {*=} key\r\n * @param {object|Function=} ref\r\n * @param {boolean=} noNormalise\r\n * @returns {VNode} returns new virtual node\r\n */\r\nfunction createVNode(flags, type, className, children, props, key, ref, noNormalise) {\r\n    if (flags & 16 /* ComponentUnknown */) {\r\n        flags = isStatefulComponent(type)\r\n            ? 4 /* ComponentClass */\r\n            : 8 /* ComponentFunction */;\r\n    }\r\n    var vNode = {\r\n        children: children === void 0 ? null : children,\r\n        className: className === void 0 ? null : className,\r\n        dom: null,\r\n        flags: flags,\r\n        key: key === void 0 ? null : key,\r\n        props: props === void 0 ? null : props,\r\n        ref: ref === void 0 ? null : ref,\r\n        type: type\r\n    };\r\n    if (noNormalise !== true) {\r\n        normalize(vNode);\r\n    }\r\n    if (options.createVNode !== null) {\r\n        options.createVNode(vNode);\r\n    }\r\n    return vNode;\r\n}\r\nfunction directClone(vNodeToClone) {\r\n    var newVNode;\r\n    var flags = vNodeToClone.flags;\r\n    if (flags & 28 /* Component */) {\r\n        var props;\r\n        var propsToClone = vNodeToClone.props;\r\n        if (isNull(propsToClone)) {\r\n            props = EMPTY_OBJ;\r\n        }\r\n        else {\r\n            props = {};\r\n            for (var key in propsToClone) {\r\n                props[key] = propsToClone[key];\r\n            }\r\n        }\r\n        newVNode = createVNode(flags, vNodeToClone.type, null, null, props, vNodeToClone.key, vNodeToClone.ref, true);\r\n        var newProps = newVNode.props;\r\n        var newChildren = newProps.children;\r\n        // we need to also clone component children that are in props\r\n        // as the children may also have been hoisted\r\n        if (newChildren) {\r\n            if (isArray$$1(newChildren)) {\r\n                var len = newChildren.length;\r\n                if (len > 0) {\r\n                    var tmpArray = [];\r\n                    for (var i = 0; i < len; i++) {\r\n                        var child = newChildren[i];\r\n                        if (isStringOrNumber(child)) {\r\n                            tmpArray.push(child);\r\n                        }\r\n                        else if (!isInvalid(child) && isVNode(child)) {\r\n                            tmpArray.push(directClone(child));\r\n                        }\r\n                    }\r\n                    newProps.children = tmpArray;\r\n                }\r\n            }\r\n            else if (isVNode(newChildren)) {\r\n                newProps.children = directClone(newChildren);\r\n            }\r\n        }\r\n        newVNode.children = null;\r\n    }\r\n    else if (flags & 3970 /* Element */) {\r\n        var children = vNodeToClone.children;\r\n        var props$1;\r\n        var propsToClone$1 = vNodeToClone.props;\r\n        if (propsToClone$1 === null) {\r\n            props$1 = EMPTY_OBJ;\r\n        }\r\n        else {\r\n            props$1 = {};\r\n            for (var key$1 in propsToClone$1) {\r\n                props$1[key$1] = propsToClone$1[key$1];\r\n            }\r\n        }\r\n        newVNode = createVNode(flags, vNodeToClone.type, vNodeToClone.className, children, props$1, vNodeToClone.key, vNodeToClone.ref, !children);\r\n    }\r\n    else if (flags & 1 /* Text */) {\r\n        newVNode = createTextVNode(vNodeToClone.children, vNodeToClone.key);\r\n    }\r\n    return newVNode;\r\n}\r\n/*\r\n directClone is preferred over cloneVNode and used internally also.\r\n This function makes Inferno backwards compatible.\r\n And can be tree-shaked by modern bundlers\r\n\r\n Would be nice to combine this with directClone but could not do it without breaking change\r\n */\r\n/**\r\n * Clones given virtual node by creating new instance of it\r\n * @param {VNode} vNodeToClone virtual node to be cloned\r\n * @param {Props=} props additional props for new virtual node\r\n * @param {...*} _children new children for new virtual node\r\n * @returns {VNode} new virtual node\r\n */\r\nfunction cloneVNode(vNodeToClone, props) {\n    var _children = [], len$2 = arguments.length - 2;\n    while ( len$2-- > 0 ) _children[ len$2 ] = arguments[ len$2 + 2 ];\n\r\n    var children = _children;\r\n    var childrenLen = _children.length;\r\n    if (childrenLen > 0 && !isUndefined(_children[0])) {\r\n        if (!props) {\r\n            props = {};\r\n        }\r\n        if (childrenLen === 1) {\r\n            children = _children[0];\r\n        }\r\n        if (!isUndefined(children)) {\r\n            props.children = children;\r\n        }\r\n    }\r\n    var newVNode;\r\n    if (isArray$$1(vNodeToClone)) {\r\n        var tmpArray = [];\r\n        for (var i = 0, len = vNodeToClone.length; i < len; i++) {\r\n            tmpArray.push(directClone(vNodeToClone[i]));\r\n        }\r\n        newVNode = tmpArray;\r\n    }\r\n    else {\r\n        var flags = vNodeToClone.flags;\r\n        var className = vNodeToClone.className;\r\n        var key = vNodeToClone.key;\r\n        var ref = vNodeToClone.ref;\r\n        if (props) {\r\n            if (props.hasOwnProperty(\"className\")) {\r\n                className = props.className;\r\n            }\r\n            if (props.hasOwnProperty(\"ref\")) {\r\n                ref = props.ref;\r\n            }\r\n            if (props.hasOwnProperty(\"key\")) {\r\n                key = props.key;\r\n            }\r\n        }\r\n        if (flags & 28 /* Component */) {\r\n            newVNode = createVNode(flags, vNodeToClone.type, className, null, !vNodeToClone.props && !props\r\n                ? EMPTY_OBJ\r\n                : combineFrom(vNodeToClone.props, props), key, ref, true);\r\n            var newProps = newVNode.props;\r\n            if (newProps) {\r\n                var newChildren = newProps.children;\r\n                // we need to also clone component children that are in props\r\n                // as the children may also have been hoisted\r\n                if (newChildren) {\r\n                    if (isArray$$1(newChildren)) {\r\n                        var len$1 = newChildren.length;\r\n                        if (len$1 > 0) {\r\n                            var tmpArray$1 = [];\r\n                            for (var i$1 = 0; i$1 < len$1; i$1++) {\r\n                                var child = newChildren[i$1];\r\n                                if (isStringOrNumber(child)) {\r\n                                    tmpArray$1.push(child);\r\n                                }\r\n                                else if (!isInvalid(child) && isVNode(child)) {\r\n                                    tmpArray$1.push(directClone(child));\r\n                                }\r\n                            }\r\n                            newProps.children = tmpArray$1;\r\n                        }\r\n                    }\r\n                    else if (isVNode(newChildren)) {\r\n                        newProps.children = directClone(newChildren);\r\n                    }\r\n                }\r\n            }\r\n            newVNode.children = null;\r\n        }\r\n        else if (flags & 3970 /* Element */) {\r\n            children =\r\n                props && !isUndefined(props.children)\r\n                    ? props.children\r\n                    : vNodeToClone.children;\r\n            newVNode = createVNode(flags, vNodeToClone.type, className, children, !vNodeToClone.props && !props\r\n                ? EMPTY_OBJ\r\n                : combineFrom(vNodeToClone.props, props), key, ref, false);\r\n        }\r\n        else if (flags & 1 /* Text */) {\r\n            newVNode = createTextVNode(vNodeToClone.children, key);\r\n        }\r\n    }\r\n    return newVNode;\r\n}\r\nfunction createVoidVNode() {\r\n    return createVNode(4096 /* Void */, null);\r\n}\r\nfunction createTextVNode(text, key) {\r\n    return createVNode(1 /* Text */, null, null, text, null, key);\r\n}\r\nfunction isVNode(o) {\r\n    return !!o.flags;\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\nfunction applyKey(key, vNode) {\r\n    vNode.key = key;\r\n    return vNode;\r\n}\r\nfunction applyKeyIfMissing(key, vNode) {\r\n    if (isNumber(key)) {\r\n        key = \".\" + key;\r\n    }\r\n    if (isNull(vNode.key) || vNode.key[0] === \".\") {\r\n        return applyKey(key, vNode);\r\n    }\r\n    return vNode;\r\n}\r\nfunction applyKeyPrefix(key, vNode) {\r\n    vNode.key = key + vNode.key;\r\n    return vNode;\r\n}\r\nfunction _normalizeVNodes(nodes, result, index, currentKey) {\r\n    for (var len = nodes.length; index < len; index++) {\r\n        var n = nodes[index];\r\n        var key = currentKey + \".\" + index;\r\n        if (!isInvalid(n)) {\r\n            if (isArray$$1(n)) {\r\n                _normalizeVNodes(n, result, 0, key);\r\n            }\r\n            else {\r\n                if (isStringOrNumber(n)) {\r\n                    n = createTextVNode(n, null);\r\n                }\r\n                else if ((isVNode(n) && n.dom) || (n.key && n.key[0] === \".\")) {\r\n                    n = directClone(n);\r\n                }\r\n                if (isNull(n.key) || n.key[0] === \".\") {\r\n                    n = applyKey(key, n);\r\n                }\r\n                else {\r\n                    n = applyKeyPrefix(currentKey, n);\r\n                }\r\n                result.push(n);\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction normalizeVNodes(nodes) {\r\n    var newNodes;\r\n    // we assign $ which basically means we've flagged this array for future note\r\n    // if it comes back again, we need to clone it, as people are using it\r\n    // in an immutable way\r\n    // tslint:disable\r\n    if (nodes[\"$\"] === true) {\r\n        nodes = nodes.slice();\r\n    }\r\n    else {\r\n        nodes[\"$\"] = true;\r\n    }\r\n    // tslint:enable\r\n    for (var i = 0, len = nodes.length; i < len; i++) {\r\n        var n = nodes[i];\r\n        if (isInvalid(n) || isArray$$1(n)) {\r\n            var result = (newNodes || nodes).slice(0, i);\r\n            _normalizeVNodes(nodes, result, i, \"\");\r\n            return result;\r\n        }\r\n        else if (isStringOrNumber(n)) {\r\n            if (!newNodes) {\r\n                newNodes = nodes.slice(0, i);\r\n            }\r\n            newNodes.push(applyKeyIfMissing(i, createTextVNode(n, null)));\r\n        }\r\n        else if ((isVNode(n) && n.dom !== null) ||\r\n            (isNull(n.key) && (n.flags & 64 /* HasNonKeyedChildren */) === 0)) {\r\n            if (!newNodes) {\r\n                newNodes = nodes.slice(0, i);\r\n            }\r\n            newNodes.push(applyKeyIfMissing(i, directClone(n)));\r\n        }\r\n        else if (newNodes) {\r\n            newNodes.push(applyKeyIfMissing(i, directClone(n)));\r\n        }\r\n    }\r\n    return newNodes || nodes;\r\n}\r\nfunction normalizeChildren(children) {\r\n    if (isArray$$1(children)) {\r\n        return normalizeVNodes(children);\r\n    }\r\n    else if (isVNode(children) && children.dom !== null) {\r\n        return directClone(children);\r\n    }\r\n    return children;\r\n}\r\nfunction normalizeProps(vNode, props, children) {\r\n    if (vNode.flags & 3970 /* Element */) {\r\n        if (isNullOrUndef(children) && props.hasOwnProperty(\"children\")) {\r\n            vNode.children = props.children;\r\n        }\r\n        if (props.hasOwnProperty(\"className\")) {\r\n            vNode.className = props.className || null;\r\n            delete props.className;\r\n        }\r\n    }\r\n    if (props.hasOwnProperty(\"ref\")) {\r\n        vNode.ref = props.ref;\r\n        delete props.ref;\r\n    }\r\n    if (props.hasOwnProperty(\"key\")) {\r\n        vNode.key = props.key;\r\n        delete props.key;\r\n    }\r\n}\r\nfunction getFlagsForElementVnode(type) {\r\n    if (type === \"svg\") {\r\n        return 128 /* SvgElement */;\r\n    }\r\n    else if (type === \"input\") {\r\n        return 512 /* InputElement */;\r\n    }\r\n    else if (type === \"select\") {\r\n        return 2048 /* SelectElement */;\r\n    }\r\n    else if (type === \"textarea\") {\r\n        return 1024 /* TextareaElement */;\r\n    }\r\n    else if (type === \"media\") {\r\n        return 256 /* MediaElement */;\r\n    }\r\n    return 2 /* HtmlElement */;\r\n}\r\nfunction normalize(vNode) {\r\n    var props = vNode.props;\r\n    var children = vNode.children;\r\n    // convert a wrongly created type back to element\r\n    // Primitive node doesn't have defaultProps, only Component\r\n    if (vNode.flags & 28 /* Component */) {\r\n        // set default props\r\n        var type = vNode.type;\r\n        var defaultProps = type.defaultProps;\r\n        if (!isNullOrUndef(defaultProps)) {\r\n            if (!props) {\r\n                props = vNode.props = defaultProps; // Create new object if only defaultProps given\r\n            }\r\n            else {\r\n                for (var prop in defaultProps) {\r\n                    if (isUndefined(props[prop])) {\r\n                        props[prop] = defaultProps[prop];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (isString$$1(type)) {\r\n            vNode.flags = getFlagsForElementVnode(type);\r\n            if (props && props.children) {\r\n                vNode.children = props.children;\r\n                children = props.children;\r\n            }\r\n        }\r\n    }\r\n    if (props) {\r\n        normalizeProps(vNode, props, children);\r\n        if (!isInvalid(props.children)) {\r\n            props.children = normalizeChildren(props.children);\r\n        }\r\n    }\r\n    if (!isInvalid(children)) {\r\n        vNode.children = normalizeChildren(children);\r\n    }\r\n    \r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\n/**\r\n * Links given data to event as first parameter\r\n * @param {*} data data to be linked, it will be available in function as first parameter\r\n * @param {Function} event Function to be called when event occurs\r\n * @returns {{data: *, event: Function}}\r\n */\r\nfunction linkEvent(data, event) {\r\n    if (isFunction$$1(event)) {\r\n        return { data: data, event: event };\r\n    }\r\n    return null; // Return null when event is invalid, to avoid creating unnecessary event handlers\r\n}\n\n/**\r\n * @module Inferno\r\n */ /** TypeDoc Comment */\r\n/* tslint:disable:object-literal-sort-keys */\r\nvar version = \"3.10.1\";\r\n// we duplicate it so it plays nicely with different module loading systems\r\nvar index = {\r\n    EMPTY_OBJ: EMPTY_OBJ,\r\n    NO_OP: NO_OP,\r\n    cloneVNode: cloneVNode,\r\n    createRenderer: createRenderer,\r\n    createVNode: createVNode,\r\n    findDOMNode: findDOMNode,\r\n    getFlagsForElementVnode: getFlagsForElementVnode,\r\n    internal_DOMNodeMap: componentToDOMNodeMap,\r\n    internal_isUnitlessNumber: isUnitlessNumber,\r\n    internal_normalize: normalize,\r\n    internal_patch: patch,\r\n    linkEvent: linkEvent,\r\n    options: options,\r\n    render: render,\r\n    version: version\r\n};\n\nexports['default'] = index;\nexports.EMPTY_OBJ = EMPTY_OBJ;\nexports.NO_OP = NO_OP;\nexports.cloneVNode = cloneVNode;\nexports.createRenderer = createRenderer;\nexports.createVNode = createVNode;\nexports.findDOMNode = findDOMNode;\nexports.getFlagsForElementVnode = getFlagsForElementVnode;\nexports.internal_DOMNodeMap = componentToDOMNodeMap;\nexports.internal_isUnitlessNumber = isUnitlessNumber;\nexports.internal_normalize = normalize;\nexports.internal_patch = patch;\nexports.linkEvent = linkEvent;\nexports.options = options;\nexports.render = render;\nexports.version = version;\n});\n\nunwrapExports(dist);\n\nvar inferno = createCommonjsModule(function (module) {\nmodule.exports = dist.default;\nmodule.exports.default = module.exports;\n});\n\nvar inferno_1 = inferno.render;\n\n/**\n * Helper method to create an object for a new node.\n *\n * @private\n * @return {void}\n */\nfunction blankNode() {\n    return {\n        text: 'New Node',\n        itree: {\n            state: {\n                editing: true,\n                focused: true\n            }\n        }\n    };\n}\n\nvar dist$1 = createCommonjsModule(function (module, exports) {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n\n\n/**\r\n * @module Inferno-Shared\r\n */ /** TypeDoc Comment */\r\nvar NO_OP = \"$NO_OP\";\r\nvar ERROR_MSG = \"a runtime error occured! Use Inferno in development environment to find the error.\";\r\n// this is MUCH faster than .constructor === Array and instanceof Array\r\n// in Node 7 and the later versions of V8, slower in older versions though\r\nvar isArray$$1 = Array.isArray;\r\nfunction isStringOrNumber(o) {\r\n    var type = typeof o;\r\n    return type === \"string\" || type === \"number\";\r\n}\r\nfunction isNullOrUndef(o) {\r\n    return isUndefined(o) || isNull(o);\r\n}\r\nfunction isInvalid(o) {\r\n    return isNull(o) || o === false || isTrue(o) || isUndefined(o);\r\n}\r\nfunction isFunction$$1(o) {\r\n    return typeof o === \"function\";\r\n}\r\nfunction isNull(o) {\r\n    return o === null;\r\n}\r\nfunction isTrue(o) {\r\n    return o === true;\r\n}\r\nfunction isUndefined(o) {\r\n    return o === void 0;\r\n}\r\nfunction throwError(message) {\r\n    if (!message) {\r\n        message = ERROR_MSG;\r\n    }\r\n    throw new Error((\"Inferno Error: \" + message));\r\n}\r\nfunction combineFrom(first, second) {\r\n    var out = {};\r\n    if (first) {\r\n        for (var key in first) {\r\n            out[key] = first[key];\r\n        }\r\n    }\r\n    if (second) {\r\n        for (var key$1 in second) {\r\n            out[key$1] = second[key$1];\r\n        }\r\n    }\r\n    return out;\r\n}\r\nfunction Lifecycle() {\r\n    this.listeners = [];\r\n}\r\nLifecycle.prototype.addListener = function addListener(callback) {\r\n    this.listeners.push(callback);\r\n};\r\nLifecycle.prototype.trigger = function trigger() {\r\n    var listeners = this.listeners;\r\n    var listener;\r\n    // We need to remove current listener from array when calling it, because more listeners might be added\r\n    while ((listener = listeners.shift())) {\r\n        listener();\r\n    }\r\n};\n\n/**\r\n * @module Inferno-Component\r\n */ /** TypeDoc Comment */\r\n// Make sure u use EMPTY_OBJ from 'inferno', otherwise it'll be a different reference\r\nvar componentCallbackQueue = new Map();\r\nvar resolvedPromise = Promise.resolve();\r\nfunction addToQueue(component, force, callback) {\r\n    var queue = componentCallbackQueue.get(component);\r\n    if (queue === void 0) {\r\n        queue = [];\r\n        componentCallbackQueue.set(component, queue);\r\n        resolvedPromise.then((function () {\r\n            componentCallbackQueue.delete(component);\r\n            component._updating = true;\r\n            applyState(component, force, (function () {\r\n                for (var i = 0, len = queue.length; i < len; i++) {\r\n                    queue[i].call(component);\r\n                }\r\n            }));\r\n            component._updating = false;\r\n        }));\r\n    }\r\n    if (!isNullOrUndef(callback)) {\r\n        queue.push(callback);\r\n    }\r\n}\r\nfunction queueStateChanges(component, newState, callback) {\r\n    if (isFunction$$1(newState)) {\r\n        newState = newState(component.state, component.props, component.context);\r\n    }\r\n    var pending = component._pendingState;\r\n    if (isNullOrUndef(pending)) {\r\n        component._pendingState = newState;\r\n    }\r\n    else {\r\n        for (var stateKey in newState) {\r\n            pending[stateKey] = newState[stateKey];\r\n        }\r\n    }\r\n    if (!component._pendingSetState && !component._blockRender) {\r\n        if (!component._updating) {\r\n            component._pendingSetState = true;\r\n            component._updating = true;\r\n            applyState(component, false, callback);\r\n            component._updating = false;\r\n        }\r\n        else {\r\n            addToQueue(component, false, callback);\r\n        }\r\n    }\r\n    else {\r\n        component._pendingSetState = true;\r\n        if (isFunction$$1(callback) && component._blockRender) {\r\n            component._lifecycle.addListener(callback.bind(component));\r\n        }\r\n    }\r\n}\r\nfunction applyState(component, force, callback) {\r\n    if (component._unmounted) {\r\n        return;\r\n    }\r\n    if (force || !component._blockRender) {\r\n        component._pendingSetState = false;\r\n        var pendingState = component._pendingState;\r\n        var prevState = component.state;\r\n        var nextState = combineFrom(prevState, pendingState);\r\n        var props = component.props;\r\n        var context = component.context;\r\n        component._pendingState = null;\r\n        var nextInput;\r\n        var renderOutput = component._updateComponent(prevState, nextState, props, props, context, force, true);\r\n        var didUpdate = true;\r\n        if (isInvalid(renderOutput)) {\r\n            nextInput = inferno.createVNode(4096 /* Void */, null);\r\n        }\r\n        else if (renderOutput === NO_OP) {\r\n            nextInput = component._lastInput;\r\n            didUpdate = false;\r\n        }\r\n        else if (isStringOrNumber(renderOutput)) {\r\n            nextInput = inferno.createVNode(1 /* Text */, null, null, renderOutput);\r\n        }\r\n        else if (isArray$$1(renderOutput)) {\r\n            return throwError();\r\n        }\r\n        else {\r\n            nextInput = renderOutput;\r\n        }\r\n        var lastInput = component._lastInput;\r\n        var vNode = component._vNode;\r\n        var parentDom = (lastInput.dom && lastInput.dom.parentNode) ||\r\n            (lastInput.dom = vNode.dom);\r\n        if (nextInput.flags & 28 /* Component */) {\r\n            nextInput.parentVNode = vNode;\r\n        }\r\n        component._lastInput = nextInput;\r\n        if (didUpdate) {\r\n            var childContext;\r\n            if (!isNullOrUndef(component.getChildContext)) {\r\n                childContext = component.getChildContext();\r\n            }\r\n            if (isNullOrUndef(childContext)) {\r\n                childContext = component._childContext;\r\n            }\r\n            else {\r\n                childContext = combineFrom(context, childContext);\r\n            }\r\n            var lifeCycle = component._lifecycle;\r\n            inferno.internal_patch(lastInput, nextInput, parentDom, lifeCycle, childContext, component._isSVG, false);\r\n            // If this component was unmounted by its parent, do nothing. This is no-op\r\n            if (component._unmounted) {\r\n                return;\r\n            }\r\n            lifeCycle.trigger();\r\n            if (!isNullOrUndef(component.componentDidUpdate)) {\r\n                component.componentDidUpdate(props, prevState, context);\r\n            }\r\n            if (!isNull(inferno.options.afterUpdate)) {\r\n                inferno.options.afterUpdate(vNode);\r\n            }\r\n        }\r\n        var dom = (vNode.dom = nextInput.dom);\r\n        if (inferno.options.findDOMNodeEnabled) {\r\n            inferno.internal_DOMNodeMap.set(component, nextInput.dom);\r\n        }\r\n        while (!isNullOrUndef((vNode = vNode.parentVNode))) {\r\n            if ((vNode.flags & 28 /* Component */) > 0) {\r\n                vNode.dom = dom;\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        component.state = component._pendingState;\r\n        component._pendingState = null;\r\n    }\r\n    if (isFunction$$1(callback)) {\r\n        callback.call(component);\r\n    }\r\n}\r\nvar Component = function Component(props, context) {\r\n    this.state = null;\r\n    this._blockRender = false;\r\n    this._blockSetState = true;\r\n    this._pendingSetState = false;\r\n    this._pendingState = null;\r\n    this._lastInput = null;\r\n    this._vNode = null;\r\n    this._unmounted = false;\r\n    this._lifecycle = null;\r\n    this._childContext = null;\r\n    this._isSVG = false;\r\n    this._updating = true;\r\n    /** @type {object} */\r\n    this.props = props || inferno.EMPTY_OBJ;\r\n    /** @type {object} */\r\n    this.context = context || inferno.EMPTY_OBJ; // context should not be mutable\r\n};\r\nComponent.prototype.forceUpdate = function forceUpdate (callback) {\r\n    if (this._unmounted) {\r\n        return;\r\n    }\r\n    applyState(this, true, callback);\r\n};\r\nComponent.prototype.setState = function setState (newState, callback) {\r\n    if (this._unmounted) {\r\n        return;\r\n    }\r\n    if (!this._blockSetState) {\r\n        queueStateChanges(this, newState, callback);\r\n    }\r\n    else {\r\n        throwError();\r\n    }\r\n};\r\nComponent.prototype._updateComponent = function _updateComponent (prevState, nextState, prevProps, nextProps, context, force, fromSetState) {\r\n    if (this._unmounted === true) {\r\n        throwError();\r\n    }\r\n    if (prevProps !== nextProps ||\r\n        nextProps === inferno.EMPTY_OBJ ||\r\n        prevState !== nextState ||\r\n        force) {\r\n        if (prevProps !== nextProps || nextProps === inferno.EMPTY_OBJ) {\r\n            if (!isNullOrUndef(this.componentWillReceiveProps) && !fromSetState) {\r\n                this._blockRender = true;\r\n                this.componentWillReceiveProps(nextProps, context);\r\n                // If this component was removed during its own update do nothing...\r\n                if (this._unmounted) {\r\n                    return NO_OP;\r\n                }\r\n                this._blockRender = false;\r\n            }\r\n            if (this._pendingSetState) {\r\n                nextState = combineFrom(nextState, this._pendingState);\r\n                this._pendingSetState = false;\r\n                this._pendingState = null;\r\n            }\r\n        }\r\n        /* Update if scu is not defined, or it returns truthy value or force */\r\n        if (force ||\r\n            isNullOrUndef(this.shouldComponentUpdate) ||\r\n            (this.shouldComponentUpdate &&\r\n                this.shouldComponentUpdate(nextProps, nextState, context))) {\r\n            if (!isNullOrUndef(this.componentWillUpdate)) {\r\n                this._blockSetState = true;\r\n                this.componentWillUpdate(nextProps, nextState, context);\r\n                this._blockSetState = false;\r\n            }\r\n            this.props = nextProps;\r\n            this.state = nextState;\r\n            this.context = context;\r\n            if (inferno.options.beforeRender) {\r\n                inferno.options.beforeRender(this);\r\n            }\r\n            var render = this.render(nextProps, nextState, context);\r\n            if (inferno.options.afterRender) {\r\n                inferno.options.afterRender(this);\r\n            }\r\n            return render;\r\n        }\r\n        else {\r\n            this.props = nextProps;\r\n            this.state = nextState;\r\n            this.context = context;\r\n        }\r\n    }\r\n    return NO_OP;\r\n};\r\n// tslint:disable-next-line:no-empty\r\nComponent.prototype.render = function render (nextProps, nextState, nextContext) { };\n\nexports['default'] = Component;\n});\n\nunwrapExports(dist$1);\n\nvar infernoComponent = createCommonjsModule(function (module) {\nmodule.exports = dist$1.default;\nmodule.exports.default = module.exports;\n});\n\nvar asyncGenerator = function () {\n  function AwaitValue(value) {\n    this.value = value;\n  }\n\n  function AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function (resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n\n        if (value instanceof AwaitValue) {\n          Promise.resolve(value.value).then(function (arg) {\n            resume(\"next\", arg);\n          }, function (arg) {\n            resume(\"throw\", arg);\n          });\n        } else {\n          settle(result.done ? \"return\" : \"normal\", result.value);\n        }\n      } catch (err) {\n        settle(\"throw\", err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case \"return\":\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case \"throw\":\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== \"function\") {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n    AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n      return this;\n    };\n  }\n\n  AsyncGenerator.prototype.next = function (arg) {\n    return this._invoke(\"next\", arg);\n  };\n\n  AsyncGenerator.prototype.throw = function (arg) {\n    return this._invoke(\"throw\", arg);\n  };\n\n  AsyncGenerator.prototype.return = function (arg) {\n    return this._invoke(\"return\", arg);\n  };\n\n  return {\n    wrap: function (fn) {\n      return function () {\n        return new AsyncGenerator(fn.apply(this, arguments));\n      };\n    },\n    await: function (value) {\n      return new AwaitValue(value);\n    }\n  };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\nvar _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\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar createVNode$4 = inferno.createVNode;\n\nvar Checkbox = function (_Component) {\n    inherits(Checkbox, _Component);\n\n    function Checkbox() {\n        classCallCheck(this, Checkbox);\n        return possibleConstructorReturn(this, (Checkbox.__proto__ || Object.getPrototypeOf(Checkbox)).apply(this, arguments));\n    }\n\n    createClass(Checkbox, [{\n        key: 'click',\n        value: function click(event) {\n            var _this2 = this;\n\n            // Define our default handler\n            var handler = function handler() {\n                _this2.props.node.toggleCheck();\n            };\n\n            // Emit an event with our forwarded MouseEvent, node, and default handler\n            this.props.dom._tree.emit('node.click', event, this.props.node, handler);\n\n            // Unless default is prevented, auto call our default handler\n            if (!event.treeDefaultPrevented) {\n                handler();\n            }\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            return createVNode$4(512, 'input', null, null, {\n                'checked': this.props.node.checked(),\n                'indeterminate': this.props.indeterminate,\n                'onClick': this.click.bind(this),\n                'type': 'checkbox'\n            });\n        }\n    }]);\n    return Checkbox;\n}(infernoComponent);\n\n/**\n * Utility method for parsing and merging custom class names.\n *\n * @private\n * @param {TreeNode} node Node object.\n * @param {string} type 'li' or 'a' attribute object type.\n * @return {Array} Processed class names\n */\nvar classlist = (function (node) {\n    var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'li';\n\n    var nodeAttrs = node.itree[type].attributes;\n    var classNames = [];\n\n    // Append any custom class names\n    var customClasses = nodeAttrs.class || nodeAttrs.className;\n\n    // Support callbacks\n    if (_$1.isFunction(customClasses)) {\n        customClasses = customClasses(node);\n    }\n\n    // Convert custom classes into an array and concat\n    if (!_$1.isEmpty(customClasses)) {\n        if (_$1.isString(customClasses)) {\n            // Support periods for backwards compat with hyperscript-formatted classes\n            classNames = classNames.concat(customClasses.split(/[\\s\\.]+/));\n        } else if (_$1.isArray(customClasses)) {\n            classNames = classNames.concat(customClasses);\n        }\n    }\n\n    return classNames;\n});\n\nvar createVNode$5 = inferno.createVNode;\n\nvar EditToolbar = function (_Component) {\n    inherits(EditToolbar, _Component);\n\n    function EditToolbar() {\n        classCallCheck(this, EditToolbar);\n        return possibleConstructorReturn(this, (EditToolbar.__proto__ || Object.getPrototypeOf(EditToolbar)).apply(this, arguments));\n    }\n\n    createClass(EditToolbar, [{\n        key: 'shouldComponentUpdate',\n        value: function shouldComponentUpdate() {\n            return false;\n        }\n    }, {\n        key: 'add',\n        value: function add(event) {\n            event.stopPropagation();\n\n            this.props.node.addChild(blankNode());\n            this.props.node.expand();\n        }\n    }, {\n        key: 'edit',\n        value: function edit(event) {\n            event.stopPropagation();\n\n            this.props.node.toggleEditing();\n        }\n    }, {\n        key: 'remove',\n        value: function remove(event) {\n            event.stopPropagation();\n\n            this.props.node.remove();\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            var buttons = [];\n\n            if (this.props.dom._tree.config.editing.edit) {\n                buttons.push(createVNode$5(2, 'a', 'btn icon icon-pencil', null, {\n                    'onclick': this.edit.bind(this),\n                    'title': 'Edit this node'\n                }));\n            }\n\n            if (this.props.dom._tree.config.editing.add) {\n                buttons.push(createVNode$5(2, 'a', 'btn icon icon-plus', null, {\n                    'onclick': this.add.bind(this),\n                    'title': 'Add a child node'\n                }));\n            }\n\n            if (this.props.dom._tree.config.editing.remove) {\n                buttons.push(createVNode$5(2, 'a', 'btn icon icon-minus', null, {\n                    'onclick': this.remove.bind(this),\n                    'title': 'Remove this node'\n                }));\n            }\n\n            return createVNode$5(2, 'span', 'btn-group', buttons);\n        }\n    }]);\n    return EditToolbar;\n}(infernoComponent);\n\nvar createVNode$6 = inferno.createVNode;\n\nvar EmptyList = function (_Component) {\n    inherits(EmptyList, _Component);\n\n    function EmptyList() {\n        classCallCheck(this, EmptyList);\n        return possibleConstructorReturn(this, (EmptyList.__proto__ || Object.getPrototypeOf(EmptyList)).apply(this, arguments));\n    }\n\n    createClass(EmptyList, [{\n        key: 'render',\n        value: function render() {\n            return createVNode$6(2, 'ol', null, createVNode$6(2, 'li', 'leaf', createVNode$6(2, 'span', 'title icon icon-file-empty empty', this.props.text)));\n        }\n    }]);\n    return EmptyList;\n}(infernoComponent);\n\n'use strict';\n\n/**\n * Compares all keys on the given state. Returns true if any difference exists.\n *\n * @private\n * @category DOM\n * @param {object} previousState Previous state.\n * @param {object} currentState  Current state.\n * @return {boolean} Difference was found.\n */\nfunction stateComparator(previousState, currentState) {\n    // Always treat dirty flag as a state difference\n    var isDirty = currentState.dirty || false;\n\n    if (!isDirty) {\n        _$1.each(Object.keys(currentState), function (key) {\n            if (key !== 'dirty' && currentState[key] !== previousState[key]) {\n                isDirty = true;\n                return false;\n            }\n        });\n    }\n\n    return isDirty;\n}\n\nvar createVNode$8 = inferno.createVNode;\n\nvar EditForm = function (_Component) {\n    inherits(EditForm, _Component);\n\n    function EditForm(props) {\n        classCallCheck(this, EditForm);\n\n        var _this = possibleConstructorReturn(this, (EditForm.__proto__ || Object.getPrototypeOf(EditForm)).call(this, props));\n\n        _this.state = _this.getStateFromNodes(props.node);\n        return _this;\n    }\n\n    createClass(EditForm, [{\n        key: 'getStateFromNodes',\n        value: function getStateFromNodes(node) {\n            return {\n                text: node.text\n            };\n        }\n    }, {\n        key: 'componentWillReceiveProps',\n        value: function componentWillReceiveProps(data) {\n            this.setState(this.getStateFromNodes(data.node));\n        }\n    }, {\n        key: 'shouldComponentUpdate',\n        value: function shouldComponentUpdate(nextProps, nextState) {\n            return stateComparator(this.state, nextState);\n        }\n    }, {\n        key: 'click',\n        value: function click(event) {\n            var _this2 = this;\n\n            // Define our default handler\n            var handler = function handler() {\n                _this2.props.node.toggleCheck();\n            };\n\n            // Emit an event with our forwarded MouseEvent, node, and default handler\n            this.props.dom._tree.emit('node.click', event, this.props.node, handler);\n\n            // Unless default is prevented, auto call our default handler\n            if (!event.treeDefaultPrevented) {\n                handler();\n            }\n        }\n    }, {\n        key: 'keypress',\n        value: function keypress(event) {\n            if (event.which === 13) {\n                return this.save();\n            }\n        }\n    }, {\n        key: 'input',\n        value: function input(event) {\n            this.setState({\n                text: event.target.value\n            });\n        }\n    }, {\n        key: 'cancel',\n        value: function cancel(event) {\n            if (event) {\n                event.stopPropagation();\n            }\n\n            this.props.node.toggleEditing();\n        }\n    }, {\n        key: 'save',\n        value: function save(event) {\n            if (event) {\n                event.stopPropagation();\n            }\n\n            // Cache current text\n            var originalText = this.props.node.text;\n            var newText = this.ref.value;\n\n            // Update the text\n            this.props.node.set('text', newText);\n\n            // Disable editing and update\n            this.props.node.state('editing', false);\n            this.props.node.markDirty();\n            this.props.dom._tree.applyChanges();\n\n            if (originalText !== newText) {\n                this.props.dom._tree.emit('node.edited', this.props.node, originalText, newText);\n            }\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            var _this3 = this;\n\n            return createVNode$8(2, 'form', null, [createVNode$8(512, 'input', null, null, {\n                'onClick': function onClick(event) {\n                    return event.stopPropagation;\n                },\n                'onInput': this.input.bind(this),\n                'onKeyPress': this.keypress.bind(this),\n                'value': this.state.text\n            }, null, function (elem) {\n                return _this3.ref = elem;\n            }), createVNode$8(2, 'span', 'btn-group', [createVNode$8(2, 'button', 'btn icon icon-check', null, {\n                'onClick': this.save.bind(this),\n                'title': 'Save',\n                'type': 'button'\n            }), createVNode$8(2, 'button', 'btn icon icon-cross', null, {\n                'onClick': this.cancel.bind(this),\n                'title': 'Cancel',\n                'type': 'button'\n            })])], {\n                'onsubmit': function onsubmit(event) {\n                    return event.preventDefault;\n                }\n            });\n        }\n    }]);\n    return EditForm;\n}(infernoComponent);\n\nvar createVNode$7 = inferno.createVNode;\n\nvar NodeAnchor = function (_Component) {\n    inherits(NodeAnchor, _Component);\n\n    function NodeAnchor() {\n        classCallCheck(this, NodeAnchor);\n        return possibleConstructorReturn(this, (NodeAnchor.__proto__ || Object.getPrototypeOf(NodeAnchor)).apply(this, arguments));\n    }\n\n    createClass(NodeAnchor, [{\n        key: 'blur',\n        value: function blur() {\n            this.props.node.blur();\n        }\n    }, {\n        key: 'click',\n        value: function click(event) {\n            var _this2 = this;\n\n            var _props = this.props,\n                node = _props.node,\n                dom = _props.dom;\n\n            // Define our default handler\n\n            var handler = function handler() {\n                event.preventDefault();\n\n                if (_this2.props.editing) {\n                    return;\n                }\n\n                if (event.metaKey || event.ctrlKey || event.shiftKey) {\n                    dom._tree.disableDeselection();\n                }\n\n                if (event.shiftKey) {\n                    dom.clearSelection();\n\n                    var selected = dom._tree.lastSelectedNode();\n                    if (selected) {\n                        dom._tree.selectBetween.apply(dom._tree, dom._tree.boundingNodes(selected, node));\n                    }\n                }\n\n                if (node.selected()) {\n                    if (!dom._tree.config.selection.disableDirectDeselection) {\n                        node.deselect();\n                    }\n                } else {\n                    node.select();\n                }\n\n                dom._tree.enableDeselection();\n            };\n\n            // Emit an event with our forwarded MouseEvent, node, and default handler\n            dom._tree.emit('node.click', event, node, handler);\n\n            // Unless default is prevented, auto call our default handler\n            if (!event.treeDefaultPrevented) {\n                handler();\n            }\n        }\n    }, {\n        key: 'contextMenu',\n        value: function contextMenu(event) {\n            var _props2 = this.props,\n                node = _props2.node,\n                dom = _props2.dom;\n\n\n            dom._tree.emit('node.contextmenu', event, node);\n        }\n    }, {\n        key: 'dblclick',\n        value: function dblclick(event) {\n            var _props3 = this.props,\n                node = _props3.node,\n                dom = _props3.dom;\n\n            // Define our default handler\n\n            var handler = function handler() {\n                // Clear text selection which occurs on double click\n                dom.clearSelection();\n\n                node.toggleCollapse();\n            };\n\n            // Emit an event with our forwarded MouseEvent, node, and default handler\n            dom._tree.emit('node.dblclick', event, node, handler);\n\n            // Unless default is prevented, auto call our default handler\n            if (!event.treeDefaultPrevented) {\n                handler();\n            }\n        }\n    }, {\n        key: 'focus',\n        value: function focus(event) {\n            this.props.node.focus(event);\n        }\n    }, {\n        key: 'mousedown',\n        value: function mousedown() {\n            if (this.props.dom.isDragDropEnabled) {\n                this.props.dom.isMouseHeld = true;\n            }\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            var node = this.props.node;\n            var attributes = _.clone(node.itree.a.attributes) || {};\n            attributes.tabindex = 1;\n            attributes.unselectable = 'on';\n\n            // Build and set classnames\n            var classNames = classlist(node, 'a').concat(['title', 'icon']);\n\n            if (!this.props.dom.config.showCheckboxes) {\n                var folder = this.props.expanded ? 'icon-folder-open' : 'icon-folder';\n                classNames.push(node.itree.icon || (this.props.hasOrWillHaveChildren ? folder : 'icon-file-empty'));\n            }\n\n            attributes.className = classNames.join(' ');\n\n            var content = node.text;\n            if (node.editing()) {\n                content = createVNode$7(16, EditForm, null, null, {\n                    'dom': this.props.dom,\n                    'node': this.props.node\n                });\n            }\n\n            return createVNode$7(2, 'a', null, content, _extends({\n                'data-uid': node.id,\n                'onBlur': this.blur.bind(this),\n                'onClick': this.click.bind(this),\n                'onContextMenu': this.contextMenu.bind(this),\n                'onDblClick': this.dblclick.bind(this),\n                'onFocus': this.focus.bind(this),\n                'onMouseDown': this.mousedown.bind(this)\n            }, attributes));\n        }\n    }]);\n    return NodeAnchor;\n}(infernoComponent);\n\nvar createVNode$9 = inferno.createVNode;\n\nvar ToggleAnchor = function (_Component) {\n    inherits(ToggleAnchor, _Component);\n\n    function ToggleAnchor() {\n        classCallCheck(this, ToggleAnchor);\n        return possibleConstructorReturn(this, (ToggleAnchor.__proto__ || Object.getPrototypeOf(ToggleAnchor)).apply(this, arguments));\n    }\n\n    createClass(ToggleAnchor, [{\n        key: 'className',\n        value: function className() {\n            return 'toggle icon ' + (this.props.collapsed ? 'icon-expand' : 'icon-collapse');\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            return createVNode$9(2, 'a', this.className(), null, {\n                'onClick': this.props.node.toggleCollapse.bind(this.props.node)\n            });\n        }\n    }]);\n    return ToggleAnchor;\n}(infernoComponent);\n\nvar createVNode$3 = inferno.createVNode;\n\nvar ListItem = function (_Component) {\n    inherits(ListItem, _Component);\n\n    function ListItem(props) {\n        classCallCheck(this, ListItem);\n\n        var _this = possibleConstructorReturn(this, (ListItem.__proto__ || Object.getPrototypeOf(ListItem)).call(this, props));\n\n        _this.state = _this.stateFromNode(props.node);\n        return _this;\n    }\n\n    createClass(ListItem, [{\n        key: 'stateFromNode',\n        value: function stateFromNode(node) {\n            return {\n                dirty: node.itree.dirty\n            };\n        }\n    }, {\n        key: 'componentWillReceiveProps',\n        value: function componentWillReceiveProps(data) {\n            this.setState(this.stateFromNode(data.node));\n        }\n    }, {\n        key: 'shouldComponentUpdate',\n        value: function shouldComponentUpdate(nextProps, nextState) {\n            return nextState.dirty;\n        }\n    }, {\n        key: 'getAttributes',\n        value: function getAttributes() {\n            var node = this.props.node;\n            var attributes = _.clone(node.itree.li.attributes) || {};\n            attributes.className = this.getClassNames();\n\n            // Force internal-use attributes\n            attributes['data-uid'] = node.id;\n\n            // Allow drag and drop?\n            if (this.props.dom.config.dragAndDrop.enabled) {\n                attributes.draggable = node.state('draggable');\n                attributes.onDragEnd = this.onDragEnd.bind(this);\n                attributes.onDragEnter = this.onDragEnter.bind(this);\n                attributes.onDragLeave = this.onDragLeave.bind(this);\n                attributes.onDragStart = this.onDragStart.bind(this);\n\n                // Are we a valid drop target?\n                if (node.state('drop-target')) {\n                    attributes.onDragOver = this.onDragOver.bind(this);\n                    attributes.onDrop = this.onDrop.bind(this);\n                } else {\n                    // Setting to null forces removal of prior listeners\n                    attributes.onDragOver = null;\n                    attributes.onDrop = null;\n                }\n            }\n\n            return attributes;\n        }\n    }, {\n        key: 'getClassNames',\n        value: function getClassNames() {\n            var node = this.props.node;\n            var state = node.itree.state;\n\n            // Set state classnames\n            var classNames = classlist(node);\n\n            // https://jsperf.com/object-keys-vs-each\n            _.each(Object.keys(state), function (key) {\n                if (state[key]) {\n                    classNames.push(key);\n                }\n            });\n\n            // Inverse and additional classes\n            if (!node.hidden() && node.removed()) {\n                classNames.push('hidden');\n            }\n\n            if (node.expanded()) {\n                classNames.push('expanded');\n            }\n\n            classNames.push(node.hasOrWillHaveChildren() ? 'folder' : 'leaf');\n\n            return classNames.join(' ');\n        }\n    }, {\n        key: 'getTargetDirection',\n        value: function getTargetDirection(event, elem) {\n            var clientY = event.clientY;\n            var targetRect = elem.getBoundingClientRect();\n\n            var yThresholdForAbove = targetRect.top + targetRect.height / 3;\n            var yThresholdForBelow = targetRect.bottom - targetRect.height / 3;\n\n            var dir = 0;\n\n            if (clientY <= yThresholdForAbove) {\n                dir = -1;\n            } else if (clientY >= yThresholdForBelow) {\n                dir = 1;\n            }\n\n            return dir;\n        }\n    }, {\n        key: 'onDragStart',\n        value: function onDragStart(event) {\n            event.stopPropagation();\n\n            event.dataTransfer.effectAllowed = 'move';\n            event.dataTransfer.dropEffect = 'move';\n\n            var node = this.props.node;\n\n            // Due to \"protected\" mode we can't access any DataTransfer data\n            // during the dragover event, yet we still need to validate this node with the target\n            this.props.dom._activeDragNode = node;\n\n            event.dataTransfer.setData('treeId', node.tree().id);\n            event.dataTransfer.setData('nodeId', node.id);\n\n            // Disable self and children as drop targets\n            node.state('drop-target', false);\n\n            if (node.hasChildren()) {\n                node.children.stateDeep('drop-target', false);\n            }\n\n            // If we should validate all nodes as potential drop targets on drag start\n            if (this.props.dom.config.dragAndDrop.validateOn === 'dragstart') {\n                var validator = this.props.dom.config.dragAndDrop.validate;\n                var validateCallable = _.isFunction(validator);\n\n                // Validate with a custom recursor because a return of \"false\"\n                // should mean \"do not descend\" rather than \"stop iterating\"\n                var recursor = function recursor(obj, iteratee) {\n                    if (InspireTree.isTreeNodes(obj)) {\n                        _.each(obj, function (n) {\n                            recursor(n, iteratee);\n                        });\n                    } else if (InspireTree.isTreeNode(obj)) {\n                        if (iteratee(obj) !== false && obj.hasChildren()) {\n                            recursor(obj.children, iteratee);\n                        }\n                    }\n                };\n\n                this.props.dom._tree.batch();\n\n                recursor(this.props.dom._tree.model, function (n) {\n                    var valid = n.id !== node.id;\n\n                    // Ensure target node isn't a descendant\n                    if (valid) {\n                        valid = !n.hasAncestor(node);\n                    }\n\n                    // If still valid and user has additional validation...\n                    if (valid && validateCallable) {\n                        valid = validator(node, n);\n                    }\n\n                    // Set state\n                    n.state('drop-target', valid);\n\n                    return valid;\n                });\n\n                this.props.dom._tree.end();\n            }\n\n            this.props.dom._tree.emit('node.dragstart', event);\n        }\n    }, {\n        key: 'onDragEnd',\n        value: function onDragEnd(event) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            this.unhighlightTarget();\n\n            this.props.dom._tree.emit('node.dragend', event);\n        }\n    }, {\n        key: 'onDragEnter',\n        value: function onDragEnter(event) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            // Nodes already within parents don't trigger enter/leave events on their ancestors\n            this.props.node.recurseUp(this.unhighlightTarget);\n\n            // Set drag target state\n            this.props.node.state('drag-targeting', true);\n\n            this.props.dom._tree.emit('node.dragenter', event);\n        }\n    }, {\n        key: 'onDragLeave',\n        value: function onDragLeave(event) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            this.unhighlightTarget();\n\n            this.props.dom._tree.emit('node.dragleave', event);\n        }\n    }, {\n        key: 'onDragOver',\n        value: function onDragOver(event) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            var dragNode = this.props.dom._activeDragNode;\n            var node = this.props.node;\n\n            // Event.target doesn't always match the element we need to calculate\n            var dir = this.getTargetDirection(event, node.itree.ref.querySelector('a'));\n\n            if (this.props.dom.config.dragAndDrop.validateOn === 'dragover') {\n                // Validate drop target\n                var validator = this.props.dom.config.dragAndDrop.validate;\n                var validateCallable = _.isFunction(validator);\n\n                var valid = dragNode.id !== node.id;\n\n                if (valid) {\n                    valid = !node.hasAncestor(dragNode);\n                }\n\n                if (valid && validateCallable) {\n                    valid = validator(dragNode, node, dir);\n                }\n\n                // Set state\n                node.state('drop-target', valid);\n                this.props.dom._tree.applyChanges();\n\n                if (!valid) {\n                    return;\n                }\n            }\n\n            // Set drag target states\n            this.props.dom._tree.batch();\n            node.state('drag-targeting', true);\n            node.state('drag-targeting-above', dir === -1);\n            node.state('drag-targeting-below', dir === 1);\n            node.state('drag-targeting-insert', dir === 0);\n            this.props.dom._tree.end();\n\n            this.props.dom._tree.emit('node.dragover', event, dir);\n        }\n    }, {\n        key: 'onDrop',\n        value: function onDrop(event) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            // Always unhighlight target\n            this.unhighlightTarget();\n\n            // Get the data from our transfer\n            var treeId = event.dataTransfer.getData('treeId');\n            var nodeId = event.dataTransfer.getData('nodeId');\n\n            // Find the drop target\n            var targetNode = this.props.node;\n\n            // Clear cache\n            this.props.dom._activeDragNode = null;\n\n            // Determine the insert direction (calc before removing source node, which modifies the DOM)\n            var dir = this.getTargetDirection(event, event.target);\n\n            var sourceTree = void 0;\n            if (treeId === this.props.dom._tree.id) {\n                sourceTree = this.props.dom._tree;\n            } else {\n                sourceTree = document.querySelector('[data-uid=\"' + treeId + '\"]').inspireTree;\n            }\n\n            var node = sourceTree.node(nodeId);\n            node.state('drop-target', true);\n\n            var exported = node.remove(true);\n\n            // Get the index of the target node\n            var targetIndex = targetNode.context().indexOf(targetNode);\n\n            var newNode = void 0,\n                newIndex = void 0;\n            if (dir === 0) {\n                // Add as a child\n                newNode = targetNode.addChild(exported);\n\n                // Cache the new index\n                newIndex = targetNode.children.indexOf(newNode);\n\n                // Auto-expand\n                targetNode.expand();\n            } else {\n                // Determine the new index\n                newIndex = dir === 1 ? ++targetIndex : targetIndex;\n\n                // Insert and cache the node\n                newNode = targetNode.context().insertAt(newIndex, exported);\n            }\n\n            this.props.dom._tree.emit('node.drop', event, newNode, targetNode, newIndex);\n        }\n    }, {\n        key: 'unhighlightTarget',\n        value: function unhighlightTarget(node) {\n            (node || this.props.node).states(['drag-targeting', 'drag-targeting-above', 'drag-targeting-below', 'drag-targeting-insert'], false);\n        }\n    }, {\n        key: 'renderCheckbox',\n        value: function renderCheckbox() {\n            var node = this.props.node;\n\n            if (this.props.dom.config.showCheckboxes) {\n                return createVNode$3(16, Checkbox, null, null, {\n                    'checked': node.checked(),\n                    'dom': this.props.dom,\n                    'indeterminate': node.indeterminate(),\n                    'node': node\n                });\n            }\n        }\n    }, {\n        key: 'renderChildren',\n        value: function renderChildren() {\n            var _props = this.props,\n                node = _props.node,\n                dom = _props.dom;\n\n\n            if (node.hasChildren()) {\n                var nodes = node.children;\n                var loading = dom.loading;\n                var pagination = nodes.pagination();\n\n                return createVNode$3(16, List, null, null, {\n                    'context': node,\n                    'dom': dom,\n                    'limit': pagination.limit,\n                    'loading': loading,\n                    'nodes': nodes,\n                    'total': pagination.total\n                });\n            } else if (this.props.dom.isDynamic && node.children) {\n                if (!node.hasLoadedChildren()) {\n                    return createVNode$3(16, EmptyList, null, null, {\n                        'text': 'Loading...'\n                    });\n                } else {\n                    return createVNode$3(16, EmptyList, null, null, {\n                        'text': 'No Results'\n                    });\n                }\n            }\n        }\n    }, {\n        key: 'renderEditToolbar',\n        value: function renderEditToolbar() {\n            // @todo fix this boolean\n            if (this.props.dom._tree.config.editing.edit && !this.props.node.editing()) {\n                return createVNode$3(16, EditToolbar, null, null, {\n                    'dom': this.props.dom,\n                    'node': this.props.node\n                });\n            }\n        }\n    }, {\n        key: 'renderToggle',\n        value: function renderToggle() {\n            var node = this.props.node;\n            var hasVisibleChildren = !this.props.dom.isDynamic ? node.hasVisibleChildren() : Boolean(node.children);\n\n            if (hasVisibleChildren) {\n                return createVNode$3(16, ToggleAnchor, null, null, {\n                    'collapsed': node.collapsed(),\n                    'node': node\n                });\n            }\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            var _this2 = this;\n\n            var node = this.props.node;\n\n            var li = createVNode$3(2, 'li', null, [this.renderEditToolbar(), createVNode$3(2, 'div', 'title-wrap', [this.renderToggle(), this.renderCheckbox(), createVNode$3(16, NodeAnchor, null, null, {\n                'dom': this.props.dom,\n                'editing': node.editing(),\n                'expanded': node.expanded(),\n                'hasOrWillHaveChildren': node.hasOrWillHaveChildren(),\n                'node': node,\n                'text': node.text\n            })]), createVNode$3(2, 'div', 'wholerow'), this.renderChildren()], _extends({}, this.getAttributes()), null, function (elem) {\n                return _this2.node = _this2.props.node.itree.ref = elem;\n            });\n\n            // Clear dirty bool only after everything has been generated (and states set)\n            this.props.node.state('rendered', true);\n            this.props.node.itree.dirty = false;\n\n            return li;\n        }\n    }]);\n    return ListItem;\n}(infernoComponent);\n\nvar createVNode$2 = inferno.createVNode;\n\nvar List = function (_Component) {\n    inherits(List, _Component);\n\n    function List() {\n        classCallCheck(this, List);\n        return possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).apply(this, arguments));\n    }\n\n    createClass(List, [{\n        key: 'shouldComponentUpdate',\n        value: function shouldComponentUpdate(nextProps) {\n            return _.find(nextProps.nodes, 'itree.dirty') || stateComparator(this.props, nextProps);\n        }\n    }, {\n        key: 'isDeferred',\n        value: function isDeferred() {\n            return this.props.dom.config.deferredRendering || this.props.dom._tree.config.deferredLoading;\n        }\n    }, {\n        key: 'loadMore',\n        value: function loadMore(event) {\n            event.preventDefault();\n            if (this.props.context) {\n                this.props.context.loadMore(event);\n            } else {\n                this.props.dom._tree.loadMore(event);\n            }\n        }\n    }, {\n        key: 'renderLoadMoreNode',\n        value: function renderLoadMoreNode() {\n            return createVNode$2(2, 'li', 'leaf detached', createVNode$2(2, 'a', 'title icon icon-more load-more', 'Load More', {\n                'onClick': this.loadMore.bind(this)\n            }));\n        }\n    }, {\n        key: 'renderLoadingTextNode',\n        value: function renderLoadingTextNode() {\n            return createVNode$2(2, 'li', 'leaf', createVNode$2(2, 'span', 'title icon icon-more', 'Loading...'));\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            var _this2 = this;\n\n            var renderNodes = this.props.nodes;\n            var pagination = renderNodes.pagination();\n\n            // If rendering deferred, chunk the nodes client-side\n            if (this.props.dom.config.deferredRendering) {\n                // Filter non-hidden/removed nodes and limit by this context's pagination\n                var count = 0;\n                renderNodes = this.props.nodes.filter(function (n) {\n                    var matches = !(n.hidden() || n.removed());\n\n                    if (matches) {\n                        count++;\n                    }\n\n                    return count <= pagination.limit && matches;\n                });\n            }\n\n            // Render nodes as list items\n            var items = _.map(renderNodes, function (node) {\n                return createVNode$2(16, ListItem, null, null, {\n                    'dom': _this2.props.dom,\n                    'node': node\n                }, node.id);\n            });\n\n            if (this.isDeferred() && pagination.limit < pagination.total) {\n                if (!this.props.loading) {\n                    items.push(this.renderLoadMoreNode());\n                } else {\n                    items.push(this.renderLoadingTextNode());\n                }\n            }\n\n            return createVNode$2(2, 'ol', null, [items, this.props.children]);\n        }\n    }]);\n    return List;\n}(infernoComponent);\n\nvar createVNode$1 = inferno.createVNode;\n\nvar Tree = function (_Component) {\n    inherits(Tree, _Component);\n\n    function Tree() {\n        classCallCheck(this, Tree);\n        return possibleConstructorReturn(this, (Tree.__proto__ || Object.getPrototypeOf(Tree)).apply(this, arguments));\n    }\n\n    createClass(Tree, [{\n        key: 'add',\n        value: function add() {\n            this.props.dom._tree.focused().blur();\n\n            this.props.dom._tree.addNode(blankNode());\n        }\n    }, {\n        key: 'renderAddLink',\n        value: function renderAddLink() {\n            if (this.props.dom._tree.config.editing.add) {\n                return createVNode$1(2, 'li', null, createVNode$1(2, 'a', 'btn icon icon-plus', null, {\n                    'onClick': this.add.bind(this),\n                    'title': 'Add a new root node'\n                }));\n            }\n        }\n    }, {\n        key: 'render',\n        value: function render() {\n            var _props = this.props,\n                dom = _props.dom,\n                nodes = _props.nodes;\n\n            var loading = dom.loading;\n            var pagination = nodes.pagination();\n\n            return createVNode$1(16, List, null, null, {\n                'dom': dom,\n                'limit': pagination.limit,\n                'loading': loading,\n                'nodes': nodes,\n                'total': pagination.total,\n                children: this.renderAddLink()\n            });\n        }\n    }]);\n    return Tree;\n}(infernoComponent);\n\n'use strict';\n\n// Libs\n\n/**\n * Default InspireTree rendering logic.\n *\n * @category DOM\n * @return {InspireDOM} Default renderer.\n */\nvar createVNode = inferno.createVNode;\n\nvar InspireDOM = function () {\n    function InspireDOM(tree, opts) {\n        var _this = this;\n\n        classCallCheck(this, InspireDOM);\n\n        if (!(tree instanceof InspireTree)) {\n            throw new TypeError('Tree argument is not an InspireTree instance.');\n        }\n\n        // Init properties\n        this._tree = tree;\n        this.batching = 0;\n        this.dropTargets = [];\n        this.$scrollLayer;\n\n        if (!opts.target) {\n            throw new TypeError('Invalid `target` property - must be a selector, HTMLElement, or jQuery element.');\n        }\n\n        // Let InspireTree know we're in control of a node's `rendered` state\n        tree.usesNativeDOM = true;\n\n        var dndDefaults = {\n            enabled: false,\n            validateOn: 'dragstart',\n            validate: null\n        };\n\n        // Assign defaults\n        this.config = _$1.defaultsDeep({}, opts, {\n            autoLoadMore: true,\n            deferredRendering: false,\n            dragAndDrop: dndDefaults,\n            nodeHeight: 25,\n            showCheckboxes: false,\n            tabindex: -1,\n            target: false\n        });\n\n        if (opts.dragAndDrop === true) {\n            this.config.dragAndDrop = dndDefaults;\n            this.config.dragAndDrop.enabled = true;\n        }\n\n        // If user didn't specify showCheckboxes,\n        // but is using checkbox selection mode,\n        // enable it automatically.\n        if (tree.config.selection.mode === 'checkbox' && !_$1.isBoolean(_$1.get(opts, 'showCheckboxes'))) {\n            this.config.showCheckboxes = true;\n        }\n\n        // Cache because we use in loops\n        this.isDynamic = _$1.isFunction(this._tree.config.data);\n\n        // Connect to our target DOM element\n        this.attach(this.config.target);\n\n        var initialRender = true;\n\n        // Apply changes\n        tree.on('changes.applied', function () {\n            _this.renderNodes();\n\n            if (initialRender) {\n                _this.scrollSelectedIntoView();\n\n                initialRender = false;\n            }\n        });\n\n        // Immediately render, just in case any already exists\n        this.renderNodes();\n    }\n\n    /**\n     * Attaches to the DOM element for rendering.\n     *\n     * @category DOM\n     * @private\n     * @param {HTMLElement} target Element, selector, or jQuery-like object.\n     * @return {void}\n     */\n\n\n    createClass(InspireDOM, [{\n        key: 'attach',\n        value: function attach(target) {\n            this.$target = this.getElement(target);\n            this.$scrollLayer = this.getScrollableAncestor(this.$target);\n\n            if (!this.$target) {\n                throw new Error('No valid element to attach to.');\n            }\n\n            this.$target.setAttribute('data-uid', this._tree.id);\n\n            // Set classnames\n            var classNames = this.$target.className.split(' ');\n            classNames.push('inspire-tree');\n\n            if (this._tree.config.editable) {\n                classNames.push('editable');\n\n                _$1.each(_$1.pickBy(this._tree.config.editing, _$1.identity), function (v, key) {\n                    classNames.push('editable-' + key);\n                });\n            }\n\n            this.$target.className = classNames.join(' ');\n            this.$target.setAttribute('tabindex', this.config.tabindex || 0);\n\n            // Handle keyboard interaction\n            this.$target.addEventListener('keyup', this.keyboardListener.bind(this));\n\n            // Drag and drop listeners\n            if (this.config.dragAndDrop.enabled) {\n                this.$target.addEventListener('dragenter', this.onDragEnter.bind(this), false);\n                this.$target.addEventListener('dragleave', this.onDragLeave.bind(this), false);\n                this.$target.addEventListener('dragover', this.onDragOver.bind(this), false);\n                this.$target.addEventListener('drop', this.onDrop.bind(this), false);\n\n                this.$target.classList.add('drag-and-drop');\n            }\n\n            // Sync browser focus to focus state\n            this._tree.on('node.focused', function (node) {\n                var elem = node.itree.ref.querySelector('.title');\n                if (elem !== document.activeElement) {\n                    elem.focus();\n                }\n            });\n\n            if (this.config.deferredRendering || this._tree.config.deferredLoading) {\n                // Force valid pagination limit based on viewport\n                var limit = this._tree.config.pagination.limit;\n                this._tree.config.pagination.limit = limit > 0 ? limit : _$1.ceil(this.$scrollLayer.clientHeight / this.config.nodeHeight);\n\n                // Listen for scrolls for automatic loading\n                if (this.config.autoLoadMore) {\n                    this.$target.addEventListener('scroll', _$1.throttle(this.scrollListener.bind(this), 20));\n                }\n            }\n\n            this.$target.inspireTree = this._tree;\n        }\n\n        /**\n         * Clear page text selection, primarily after a click event which\n         * natively selects a range of text.\n         *\n         * @category DOM\n         * @private\n         * @return {void}\n         */\n\n    }, {\n        key: 'clearSelection',\n        value: function clearSelection() {\n            if (document.selection && document.selection.empty) {\n                document.selection.empty();\n            } else if (window.getSelection) {\n                window.getSelection().removeAllRanges();\n            }\n        }\n\n        /**\n         * Get an HTMLElement through various means:\n         * An element, jquery object, or a selector.\n         *\n         * @category DOM\n         * @private\n         * @param {mixed} target Element, jQuery selector, selector.\n         * @return {HTMLElement} Matching element.\n         */\n\n    }, {\n        key: 'getElement',\n        value: function getElement(target) {\n            var $element = void 0;\n\n            if (target instanceof HTMLElement) {\n                $element = target;\n            } else if (_$1.isObject(target) && _$1.isObject(target[0])) {\n                $element = target[0];\n            } else if (_$1.isString(target)) {\n                var match = document.querySelector(target);\n                if (match) {\n                    $element = match;\n                }\n            }\n\n            return $element;\n        }\n\n        /**\n         * Helper method to find a scrollable ancestor element.\n         *\n         * @category DOM\n         * @private\n         * @param {HTMLElement} $element Starting element.\n         * @return {HTMLElement} Scrollable element.\n         */\n\n    }, {\n        key: 'getScrollableAncestor',\n        value: function getScrollableAncestor($element) {\n            if ($element instanceof Element) {\n                var style = getComputedStyle($element);\n                if (style.overflow !== 'auto' && $element.parentNode) {\n                    $element = this.getScrollableAncestor($element.parentNode);\n                }\n            }\n\n            return $element;\n        }\n\n        /**\n         * Get a tree instance based on an ID.\n         *\n         * @category DOM\n         * @param {string} id Tree ID.\n         * @return {InspireTree} Tree instance.\n         */\n\n    }, {\n        key: 'keyboardListener',\n\n\n        /**\n         * Listen to keyboard event for navigation.\n         *\n         * @category DOM\n         * @private\n         * @param {Event} event Keyboard event.\n         * @return {void}\n         */\n        value: function keyboardListener(event) {\n            // Navigation\n            var focusedNode = this._tree.focused();\n            if (focusedNode) {\n                focusedNode = focusedNode[0];\n                switch (event.which) {\n                    case 40:\n                        this.moveFocusDownFrom(focusedNode);\n                        break;\n                    case 13:\n                        focusedNode.toggleSelect();\n                        break;\n                    case 37:\n                        focusedNode.collapse();\n                        break;\n                    case 39:\n                        focusedNode.expand();\n                        break;\n                    case 38:\n                        this.moveFocusUpFrom(focusedNode);\n                        break;\n                    default:\n                }\n            }\n        }\n\n        /**\n         * Move select down the visible tree from a starting node.\n         *\n         * @category DOM\n         * @private\n         * @param {object} startingNode Node object.\n         * @return {void}\n         */\n\n    }, {\n        key: 'moveFocusDownFrom',\n        value: function moveFocusDownFrom(startingNode) {\n            var next = startingNode.nextVisibleNode();\n            if (next) {\n                next.focus();\n            }\n        }\n\n        /**\n         * Move select up the visible tree from a starting node.\n         *\n         * @category DOM\n         * @private\n         * @param {object} startingNode Node object.\n         * @return {void}\n         */\n\n    }, {\n        key: 'moveFocusUpFrom',\n        value: function moveFocusUpFrom(startingNode) {\n            var prev = startingNode.previousVisibleNode();\n            if (prev) {\n                prev.focus();\n            }\n        }\n\n        /**\n         * Helper method for obtaining the data-uid from a DOM element.\n         *\n         * @category DOM\n         * @private\n         * @param {HTMLElement} element HTML Element.\n         * @return {object} Node object\n         */\n\n    }, {\n        key: 'nodeFromTitleDOMElement',\n        value: function nodeFromTitleDOMElement(element) {\n            var uid = element.parentNode.parentNode.getAttribute('data-uid');\n            return this._tree.node(uid);\n        }\n\n        /**\n         * Drag enter listener.\n         *\n         * @category DOM\n         * @private\n         * @param {DragEvent} event Drag enter.\n         * @return {void}\n         */\n\n    }, {\n        key: 'onDragEnter',\n        value: function onDragEnter(event) {\n            event.preventDefault();\n\n            event.target.classList.add('drag-targeting', 'drag-targeting-insert');\n        }\n\n        /**\n         * Drag leave listener.\n         *\n         * @category DOM\n         * @private\n         * @param {DragEvent} event Drag leave.\n         * @return {void}\n         */\n\n    }, {\n        key: 'onDragLeave',\n        value: function onDragLeave(event) {\n            event.preventDefault();\n\n            this.unhighlightTarget(event.target);\n        }\n\n        /**\n         * Drag over listener.\n         *\n         * @category DOM\n         * @private\n         * @param {DragEvent} event Drag over.\n         * @return {void}\n         */\n\n    }, {\n        key: 'onDragOver',\n        value: function onDragOver(event) {\n            event.preventDefault();\n        }\n\n        /**\n         * Drop listener.\n         *\n         * @category DOM\n         * @private\n         * @param {DragEvent} event Dropped.\n         * @return {void}\n         */\n\n    }, {\n        key: 'onDrop',\n        value: function onDrop(event) {\n            event.preventDefault();\n\n            this.unhighlightTarget(event.target);\n\n            var treeId = event.dataTransfer.getData('treeId');\n            var nodeId = event.dataTransfer.getData('nodeId');\n\n            // Find the tree\n            var tree = InspireDOM.getTreeById(treeId);\n            var node = tree.node(nodeId);\n\n            node.state('drop-target', true);\n\n            // Remove the node from its previous context\n            var exported = node.remove(true);\n\n            // Add the node to this tree/level\n            var newNode = this._tree.addNode(exported);\n            var newIndex = this._tree.indexOf(newNode);\n\n            this._tree.emit('node.drop', event, newNode, null, newIndex);\n        }\n\n        /**\n         * Triggers rendering for the given node array.\n         *\n         * @category DOM\n         * @private\n         * @param {array} nodes Array of node objects.\n         * @return {void}\n         */\n\n    }, {\n        key: 'renderNodes',\n        value: function renderNodes(nodes) {\n            inferno_1(createVNode(16, Tree, null, null, {\n                'dom': this,\n                'nodes': nodes || this._tree.nodes()\n            }), this.$target);\n        }\n    }, {\n        key: 'scrollListener',\n\n\n        /**\n         * Listens for scroll events, to automatically trigger\n         * Load More links when they're scrolled into view.\n         *\n         * @category DOM\n         * @private\n         * @param {Event} event Scroll event.\n         * @return {void}\n         */\n        value: function scrollListener(event) {\n            var _this2 = this;\n\n            if (!this.rendering && !this.loading) {\n                // Get the bounding rect of the scroll layer\n                var rect = this.$scrollLayer.getBoundingClientRect();\n\n                // Find all load-more links\n                var links = document.querySelectorAll('.load-more');\n                _$1.each(links, function (link) {\n                    // Look for load-more links which overlap our \"viewport\"\n                    var r = link.getBoundingClientRect();\n                    var overlap = !(rect.right < r.left || rect.left > r.right || rect.bottom < r.top || rect.top > r.bottom);\n\n                    if (overlap) {\n                        // Auto-trigger Load More links\n                        var context = void 0;\n\n                        var $parent = link.parentNode.parentNode.parentNode;\n                        if ($parent.tagName === 'LI') {\n                            context = _this2._tree.node($parent.getAttribute('data-uid'));\n                        }\n\n                        _this2._tree.loadMore(context, event);\n                    }\n                });\n            }\n        }\n\n        /**\n         * Scroll the first selected node into view.\n         *\n         * @category DOM\n         * @private\n         * @return {void}\n         */\n\n    }, {\n        key: 'scrollSelectedIntoView',\n        value: function scrollSelectedIntoView() {\n            var $selected = this.$target.querySelector('.selected');\n\n            if ($selected && this.$scrollLayer) {\n                this.$scrollLayer.scrollTop = $selected.offsetTop;\n            }\n        }\n\n        /**\n         * Remove highlight class.\n         *\n         * @category DOM\n         * @private\n         * @param {HTMLElement} element Target element.\n         * @return {void}\n         */\n\n    }, {\n        key: 'unhighlightTarget',\n        value: function unhighlightTarget(element) {\n            if (element) {\n                element.classList.remove('drag-targeting', 'drag-targeting-insert');\n            }\n        }\n    }], [{\n        key: 'getTreeById',\n        value: function getTreeById(id) {\n            var element = document.querySelector('[data-uid=\"' + id + '\"]');\n            if (element) {\n                return element.inspireTree;\n            }\n        }\n    }]);\n    return InspireDOM;\n}();\n\nreturn InspireDOM;\n\n})));\n","/* Inspire Tree\n * @version 4.2.0\n * https://github.com/helion3/inspire-tree\n * @copyright Copyright 2015 Helion3, and other contributors\n * @license Licensed under MIT\n *          see https://github.com/helion3/inspire-tree/blob/master/LICENSE\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('lodash')) :\n\ttypeof define === 'function' && define.amd ? define(['lodash'], factory) :\n\t(global.InspireTree = factory(global._));\n}(this, (function (_) { 'use strict';\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\n\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\n// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\nvar rng;\n\nvar crypto = commonjsGlobal.crypto || commonjsGlobal.msCrypto; // for IE 11\nif (crypto && crypto.getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n  rng = function whatwgRNG() {\n    crypto.getRandomValues(rnds8);\n    return rnds8;\n  };\n}\n\nif (!rng) {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n  rng = function() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n\nvar rngBrowser = rng;\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  return bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]];\n}\n\nvar bytesToUuid_1 = bytesToUuid;\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options == 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rngBrowser)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid_1(rnds);\n}\n\nvar v4_1 = v4;\n\n/**\n * Reset a node's state to the tree default.\n *\n * @private\n * @param {TreeNode} node Node object.\n * @returns {TreeNode} Node object.\n */\nfunction resetState(node) {\n    _.each(node._tree.defaultState, function (val, prop) {\n        node.state(prop, val);\n    });\n\n    return node;\n}\n\n/**\n * Stores repetitive state change logic for most state methods.\n *\n * @private\n * @param {string} prop State property name.\n * @param {boolean} value New state value.\n * @param {string} verb Verb used for events.\n * @param {TreeNode} node Node object.\n * @param {string} deep Optional name of state method to call recursively.\n * @return {TreeNode} Node object.\n */\nfunction baseStateChange(prop, value, verb, node, deep) {\n    if (node.state(prop) !== value) {\n        node._tree.batch();\n\n        if (node._tree.config.nodes.resetStateOnRestore && verb === 'restored') {\n            resetState(node);\n        }\n\n        node.state(prop, value);\n\n        node._tree.emit('node.' + verb, node, false);\n\n        if (deep && node.hasChildren()) {\n            node.children.recurseDown(function (child) {\n                baseStateChange(prop, value, verb, child);\n            });\n        }\n\n        node.markDirty();\n        node._tree.end();\n    }\n\n    return node;\n}\n\nvar es6Promise = createCommonjsModule(function (module, exports) {\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version   4.1.1\n */\n\n(function (global, factory) {\n\tmodule.exports = factory();\n}(commonjsGlobal, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n  var type = typeof x;\n  return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction$$1(x) {\n  return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (Array.isArray) {\n  _isArray = Array.isArray;\n} else {\n  _isArray = function (x) {\n    return Object.prototype.toString.call(x) === '[object Array]';\n  };\n}\n\nvar isArray$$1 = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 2, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    if (customSchedulerFn) {\n      customSchedulerFn(flush);\n    } else {\n      scheduleFlush();\n    }\n  }\n};\n\nfunction setScheduler(scheduleFn) {\n  customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n  asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // see https://github.com/cujojs/when/issues/410 for details\n  return function () {\n    return process.nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  // Store setTimeout reference so es6-promise will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var globalSetTimeout = setTimeout;\n  return function () {\n    return globalSetTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertx() {\n  try {\n    var r = commonjsRequire;\n    var vertx = r('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof commonjsRequire === 'function') {\n  scheduleFlush = attemptVertx();\n} else {\n  scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n  var _arguments = arguments;\n\n  var parent = this;\n\n  var child = new this.constructor(noop$$1);\n\n  if (child[PROMISE_ID] === undefined) {\n    makePromise(child);\n  }\n\n  var _state = parent._state;\n\n  if (_state) {\n    (function () {\n      var callback = _arguments[_state - 1];\n      asap(function () {\n        return invokeCallback(_state, child, callback, parent._result);\n      });\n    })();\n  } else {\n    subscribe(parent, child, onFulfillment, onRejection);\n  }\n\n  return child;\n}\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @static\n  @param {Any} value value that the returned promise will be resolved with\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nfunction resolve$1(object) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop$$1);\n  resolve(promise, object);\n  return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop$$1() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n  return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n  try {\n    return promise.then;\n  } catch (error) {\n    GET_THEN_ERROR.error = error;\n    return GET_THEN_ERROR;\n  }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n  try {\n    then$$1.call(value, fulfillmentHandler, rejectionHandler);\n  } catch (e) {\n    return e;\n  }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n  asap(function (promise) {\n    var sealed = false;\n    var error = tryThen(then$$1, thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable !== value) {\n        resolve(promise, value);\n      } else {\n        fulfill(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && error) {\n      sealed = true;\n      reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      return resolve(promise, value);\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n  if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n    handleOwnThenable(promise, maybeThenable);\n  } else {\n    if (then$$1 === GET_THEN_ERROR) {\n      reject(promise, GET_THEN_ERROR.error);\n      GET_THEN_ERROR.error = null;\n    } else if (then$$1 === undefined) {\n      fulfill(promise, maybeThenable);\n    } else if (isFunction$$1(then$$1)) {\n      handleForeignThenable(promise, maybeThenable, then$$1);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n}\n\nfunction resolve(promise, value) {\n  if (promise === value) {\n    reject(promise, selfFulfillment());\n  } else if (objectOrFunction(value)) {\n    handleMaybeThenable(promise, value, getThen(value));\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nfunction publishRejection(promise) {\n  if (promise._onerror) {\n    promise._onerror(promise._result);\n  }\n\n  publish(promise);\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length !== 0) {\n    asap(publish, promise);\n  }\n}\n\nfunction reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n\n  asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n  var _subscribers = parent._subscribers;\n  var length = _subscribers.length;\n\n  parent._onerror = null;\n\n  _subscribers[length] = child;\n  _subscribers[length + FULFILLED] = onFulfillment;\n  _subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    asap(publish, parent);\n  }\n}\n\nfunction publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = undefined,\n      callback = undefined,\n      detail = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, detail);\n    } else {\n      callback(detail);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n  this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n  try {\n    return callback(detail);\n  } catch (e) {\n    TRY_CATCH_ERROR.error = e;\n    return TRY_CATCH_ERROR;\n  }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n  var hasCallback = isFunction$$1(callback),\n      value = undefined,\n      error = undefined,\n      succeeded = undefined,\n      failed = undefined;\n\n  if (hasCallback) {\n    value = tryCatch(callback, detail);\n\n    if (value === TRY_CATCH_ERROR) {\n      failed = true;\n      error = value.error;\n      value.error = null;\n    } else {\n      succeeded = true;\n    }\n\n    if (promise === value) {\n      reject(promise, cannotReturnOwn());\n      return;\n    }\n  } else {\n    value = detail;\n    succeeded = true;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (hasCallback && succeeded) {\n      resolve(promise, value);\n    } else if (failed) {\n      reject(promise, error);\n    } else if (settled === FULFILLED) {\n      fulfill(promise, value);\n    } else if (settled === REJECTED) {\n      reject(promise, value);\n    }\n}\n\nfunction initializePromise(promise, resolver) {\n  try {\n    resolver(function resolvePromise(value) {\n      resolve(promise, value);\n    }, function rejectPromise(reason) {\n      reject(promise, reason);\n    });\n  } catch (e) {\n    reject(promise, e);\n  }\n}\n\nvar id = 0;\nfunction nextId() {\n  return id++;\n}\n\nfunction makePromise(promise) {\n  promise[PROMISE_ID] = id++;\n  promise._state = undefined;\n  promise._result = undefined;\n  promise._subscribers = [];\n}\n\nfunction Enumerator$1(Constructor, input) {\n  this._instanceConstructor = Constructor;\n  this.promise = new Constructor(noop$$1);\n\n  if (!this.promise[PROMISE_ID]) {\n    makePromise(this.promise);\n  }\n\n  if (isArray$$1(input)) {\n    this.length = input.length;\n    this._remaining = input.length;\n\n    this._result = new Array(this.length);\n\n    if (this.length === 0) {\n      fulfill(this.promise, this._result);\n    } else {\n      this.length = this.length || 0;\n      this._enumerate(input);\n      if (this._remaining === 0) {\n        fulfill(this.promise, this._result);\n      }\n    }\n  } else {\n    reject(this.promise, validationError());\n  }\n}\n\nfunction validationError() {\n  return new Error('Array Methods must be provided an Array');\n}\n\nEnumerator$1.prototype._enumerate = function (input) {\n  for (var i = 0; this._state === PENDING && i < input.length; i++) {\n    this._eachEntry(input[i], i);\n  }\n};\n\nEnumerator$1.prototype._eachEntry = function (entry, i) {\n  var c = this._instanceConstructor;\n  var resolve$$1 = c.resolve;\n\n  if (resolve$$1 === resolve$1) {\n    var _then = getThen(entry);\n\n    if (_then === then && entry._state !== PENDING) {\n      this._settledAt(entry._state, i, entry._result);\n    } else if (typeof _then !== 'function') {\n      this._remaining--;\n      this._result[i] = entry;\n    } else if (c === Promise$2) {\n      var promise = new c(noop$$1);\n      handleMaybeThenable(promise, entry, _then);\n      this._willSettleAt(promise, i);\n    } else {\n      this._willSettleAt(new c(function (resolve$$1) {\n        return resolve$$1(entry);\n      }), i);\n    }\n  } else {\n    this._willSettleAt(resolve$$1(entry), i);\n  }\n};\n\nEnumerator$1.prototype._settledAt = function (state, i, value) {\n  var promise = this.promise;\n\n  if (promise._state === PENDING) {\n    this._remaining--;\n\n    if (state === REJECTED) {\n      reject(promise, value);\n    } else {\n      this._result[i] = value;\n    }\n  }\n\n  if (this._remaining === 0) {\n    fulfill(promise, this._result);\n  }\n};\n\nEnumerator$1.prototype._willSettleAt = function (promise, i) {\n  var enumerator = this;\n\n  subscribe(promise, undefined, function (value) {\n    return enumerator._settledAt(FULFILLED, i, value);\n  }, function (reason) {\n    return enumerator._settledAt(REJECTED, i, reason);\n  });\n};\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @static\n  @param {Array} entries array of promises\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nfunction all$1(entries) {\n  return new Enumerator$1(this, entries).promise;\n}\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @static\n  @param {Array} promises array of promises to observe\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nfunction race$1(entries) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (!isArray$$1(entries)) {\n    return new Constructor(function (_$$1, reject) {\n      return reject(new TypeError('You must pass an array to race.'));\n    });\n  } else {\n    return new Constructor(function (resolve, reject) {\n      var length = entries.length;\n      for (var i = 0; i < length; i++) {\n        Constructor.resolve(entries[i]).then(resolve, reject);\n      }\n    });\n  }\n}\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @static\n  @param {Any} reason value that the returned promise will be rejected with.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop$$1);\n  reject(promise, reason);\n  return promise;\n}\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise's eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @param {function} resolver\n  Useful for tooling.\n  @constructor\n*/\nfunction Promise$2(resolver) {\n  this[PROMISE_ID] = nextId();\n  this._result = this._state = undefined;\n  this._subscribers = [];\n\n  if (noop$$1 !== resolver) {\n    typeof resolver !== 'function' && needsResolver();\n    this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew();\n  }\n}\n\nPromise$2.all = all$1;\nPromise$2.race = race$1;\nPromise$2.resolve = resolve$1;\nPromise$2.reject = reject$1;\nPromise$2._setScheduler = setScheduler;\nPromise$2._setAsap = setAsap;\nPromise$2._asap = asap;\n\nPromise$2.prototype = {\n  constructor: Promise$2,\n\n  /**\n    The primary way of interacting with a promise is through its `then` method,\n    which registers callbacks to receive either a promise's eventual value or the\n    reason why the promise cannot be fulfilled.\n  \n    ```js\n    findUser().then(function(user){\n      // user is available\n    }, function(reason){\n      // user is unavailable, and you are given the reason why\n    });\n    ```\n  \n    Chaining\n    --------\n  \n    The return value of `then` is itself a promise.  This second, 'downstream'\n    promise is resolved with the return value of the first promise's fulfillment\n    or rejection handler, or rejected if the handler throws an exception.\n  \n    ```js\n    findUser().then(function (user) {\n      return user.name;\n    }, function (reason) {\n      return 'default name';\n    }).then(function (userName) {\n      // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n      // will be `'default name'`\n    });\n  \n    findUser().then(function (user) {\n      throw new Error('Found user, but still unhappy');\n    }, function (reason) {\n      throw new Error('`findUser` rejected and we're unhappy');\n    }).then(function (value) {\n      // never reached\n    }, function (reason) {\n      // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n      // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n    });\n    ```\n    If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n  \n    ```js\n    findUser().then(function (user) {\n      throw new PedagogicalException('Upstream error');\n    }).then(function (value) {\n      // never reached\n    }).then(function (value) {\n      // never reached\n    }, function (reason) {\n      // The `PedgagocialException` is propagated all the way down to here\n    });\n    ```\n  \n    Assimilation\n    ------------\n  \n    Sometimes the value you want to propagate to a downstream promise can only be\n    retrieved asynchronously. This can be achieved by returning a promise in the\n    fulfillment or rejection handler. The downstream promise will then be pending\n    until the returned promise is settled. This is called *assimilation*.\n  \n    ```js\n    findUser().then(function (user) {\n      return findCommentsByAuthor(user);\n    }).then(function (comments) {\n      // The user's comments are now available\n    });\n    ```\n  \n    If the assimliated promise rejects, then the downstream promise will also reject.\n  \n    ```js\n    findUser().then(function (user) {\n      return findCommentsByAuthor(user);\n    }).then(function (comments) {\n      // If `findCommentsByAuthor` fulfills, we'll have the value here\n    }, function (reason) {\n      // If `findCommentsByAuthor` rejects, we'll have the reason here\n    });\n    ```\n  \n    Simple Example\n    --------------\n  \n    Synchronous Example\n  \n    ```javascript\n    let result;\n  \n    try {\n      result = findResult();\n      // success\n    } catch(reason) {\n      // failure\n    }\n    ```\n  \n    Errback Example\n  \n    ```js\n    findResult(function(result, err){\n      if (err) {\n        // failure\n      } else {\n        // success\n      }\n    });\n    ```\n  \n    Promise Example;\n  \n    ```javascript\n    findResult().then(function(result){\n      // success\n    }, function(reason){\n      // failure\n    });\n    ```\n  \n    Advanced Example\n    --------------\n  \n    Synchronous Example\n  \n    ```javascript\n    let author, books;\n  \n    try {\n      author = findAuthor();\n      books  = findBooksByAuthor(author);\n      // success\n    } catch(reason) {\n      // failure\n    }\n    ```\n  \n    Errback Example\n  \n    ```js\n  \n    function foundBooks(books) {\n  \n    }\n  \n    function failure(reason) {\n  \n    }\n  \n    findAuthor(function(author, err){\n      if (err) {\n        failure(err);\n        // failure\n      } else {\n        try {\n          findBoooksByAuthor(author, function(books, err) {\n            if (err) {\n              failure(err);\n            } else {\n              try {\n                foundBooks(books);\n              } catch(reason) {\n                failure(reason);\n              }\n            }\n          });\n        } catch(error) {\n          failure(err);\n        }\n        // success\n      }\n    });\n    ```\n  \n    Promise Example;\n  \n    ```javascript\n    findAuthor().\n      then(findBooksByAuthor).\n      then(function(books){\n        // found books\n    }).catch(function(reason){\n      // something went wrong\n    });\n    ```\n  \n    @method then\n    @param {Function} onFulfilled\n    @param {Function} onRejected\n    Useful for tooling.\n    @return {Promise}\n  */\n  then: then,\n\n  /**\n    `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n    as the catch block of a try/catch statement.\n  \n    ```js\n    function findAuthor(){\n      throw new Error('couldn't find that author');\n    }\n  \n    // synchronous\n    try {\n      findAuthor();\n    } catch(reason) {\n      // something went wrong\n    }\n  \n    // async with promises\n    findAuthor().catch(function(reason){\n      // something went wrong\n    });\n    ```\n  \n    @method catch\n    @param {Function} onRejection\n    Useful for tooling.\n    @return {Promise}\n  */\n  'catch': function _catch(onRejection) {\n    return this.then(null, onRejection);\n  }\n};\n\n/*global self*/\nfunction polyfill$1() {\n    var local = undefined;\n\n    if (typeof commonjsGlobal !== 'undefined') {\n        local = commonjsGlobal;\n    } else if (typeof self !== 'undefined') {\n        local = self;\n    } else {\n        try {\n            local = Function('return this')();\n        } catch (e) {\n            throw new Error('polyfill failed because global object is unavailable in this environment');\n        }\n    }\n\n    var P = local.Promise;\n\n    if (P) {\n        var promiseToString = null;\n        try {\n            promiseToString = Object.prototype.toString.call(P.resolve());\n        } catch (e) {\n            // silently ignored\n        }\n\n        if (promiseToString === '[object Promise]' && !P.cast) {\n            return;\n        }\n    }\n\n    local.Promise = Promise$2;\n}\n\n// Strange compat..\nPromise$2.polyfill = polyfill$1;\nPromise$2.Promise = Promise$2;\n\nreturn Promise$2;\n\n})));\n\n\n});\n\nvar es6Promise_1 = es6Promise.Promise;\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\n\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toArray = function (arr) {\n  return Array.isArray(arr) ? arr : Array.from(arr);\n};\n\n// Libs\n\nfunction _extendableBuiltin(cls) {\n    function ExtendableBuiltin() {\n        cls.apply(this, arguments);\n    }\n\n    ExtendableBuiltin.prototype = Object.create(cls.prototype, {\n        constructor: {\n            value: cls,\n            enumerable: false,\n            writable: true,\n            configurable: true\n        }\n    });\n\n    if (Object.setPrototypeOf) {\n        Object.setPrototypeOf(ExtendableBuiltin, cls);\n    } else {\n        ExtendableBuiltin.__proto__ = cls;\n    }\n\n    return ExtendableBuiltin;\n}\n\n/**\n * Base function to filter nodes by state value.\n *\n * @private\n * @param {string} state State property\n * @param {boolean} full Return a non-flat hierarchy\n * @return {TreeNodes} Array of matching nodes.\n */\nfunction baseStatePredicate(state, full) {\n    if (full) {\n        return this.extract(state);\n    }\n\n    // Cache a state predicate function\n    var fn = getPredicateFunction(state);\n\n    return this.flatten(function (node) {\n        // Never include removed nodes unless specifically requested\n        if (state !== 'removed' && node.removed()) {\n            return false;\n        }\n\n        return fn(node);\n    });\n}\n\n/**\n * Base function to invoke given method(s) on tree nodes.\n *\n * @private\n * @param {TreeNode} nodes Array of node objects.\n * @param {string|array} methods Method names.\n * @param {array|Arguments} args Array of arguments to proxy.\n * @param {boolean} deep Invoke deeply.\n * @return {TreeNodes} Array of node objects.\n */\nfunction baseInvoke(nodes, methods, args, deep) {\n    methods = _.castArray(methods);\n\n    nodes._tree.batch();\n\n    nodes[deep ? 'recurseDown' : 'each'](function (node) {\n        _.each(methods, function (method) {\n            if (_.isFunction(node[method])) {\n                node[method].apply(node, args);\n            }\n        });\n    });\n\n    nodes._tree.end();\n\n    return nodes;\n}\n\n/**\n * Creates a predicate function.\n *\n * @private\n * @param {string|function} predicate Property name or custom function.\n * @return {function} Predicate function.\n */\nfunction getPredicateFunction(predicate) {\n    var fn = predicate;\n    if (_.isString(predicate)) {\n        fn = function fn(node) {\n            return _.isFunction(node[predicate]) ? node[predicate]() : node[predicate];\n        };\n    }\n\n    return fn;\n}\n\n/**\n * An Array-like collection of TreeNodes.\n *\n * Note: Due to issue in many javascript environments,\n * native objects are problematic to extend correctly\n * so we mimic it, not actually extend it.\n *\n * @category TreeNodes\n * @param {array} array Array of TreeNode objects.\n * @return {TreeNodes} Collection of TreeNode\n */\nvar TreeNodes = function (_extendableBuiltin2) {\n    inherits(TreeNodes, _extendableBuiltin2);\n\n    function TreeNodes(tree, array) {\n        classCallCheck(this, TreeNodes);\n\n        var _this = possibleConstructorReturn(this, (TreeNodes.__proto__ || Object.getPrototypeOf(TreeNodes)).call(this));\n\n        if (_.isFunction(_.get(tree, 'isTree')) && !tree.isTree(tree)) {\n            throw new TypeError('Invalid tree instance.');\n        }\n\n        _this._tree = tree;\n        _this.length = 0;\n\n        // Init pagination\n        _this._pagination = {\n            limit: tree.config.pagination.limit,\n            total: 0\n        };\n\n        if (_.isArray(array) || array instanceof TreeNodes) {\n            _.each(array, function (node) {\n                if (node instanceof TreeNode) {\n                    _this.push(node.clone());\n                } else {\n                    _this.addNode(node);\n                }\n            });\n        }\n        return _this;\n    }\n\n    /**\n     * Adds a new node. If a sort\n     * method is configured, the node will be added\n     * in the appropriate order.\n     *\n     * @category TreeNodes\n     * @param {object} object Node\n     * @return {TreeNode} Node object.\n     */\n\n\n    createClass(TreeNodes, [{\n        key: 'addNode',\n        value: function addNode(object) {\n            // Base insertion index\n            var index = this.length;\n\n            // If tree is sorted, insert in correct position\n            if (this._tree.config.sort) {\n                index = _.sortedIndexBy(this, object, this._tree.config.sort);\n            }\n\n            return this.insertAt(index, object);\n        }\n\n        /**\n         * Query for all available nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'available',\n        value: function available(full) {\n            return baseStatePredicate.call(this, 'available', full);\n        }\n\n        /**\n         * Blur nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'blur',\n        value: function blur() {\n            return this.invoke('blur');\n        }\n\n        /**\n         * Blur (deeply) all nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'blurDeep',\n        value: function blurDeep() {\n            return this.invokeDeep('blur');\n        }\n\n        /**\n         * Query for all checked nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'checked',\n        value: function checked(full) {\n            return baseStatePredicate.call(this, 'checked', full);\n        }\n\n        /**\n         * Clean nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'clean',\n        value: function clean() {\n            return this.invoke('clean');\n        }\n\n        /**\n         * Clones (deeply) the array of nodes.\n         *\n         * Note: Cloning will *not* clone the context pointer.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of cloned nodes.\n         */\n\n    }, {\n        key: 'clone',\n        value: function clone() {\n            return new TreeNodes(this._tree, this);\n        }\n\n        /**\n         * Collapse nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'collapse',\n        value: function collapse() {\n            return this.invoke('collapse');\n        }\n\n        /**\n         * Query for all collapsed nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'collapsed',\n        value: function collapsed(full) {\n            return baseStatePredicate.call(this, 'collapsed', full);\n        }\n\n        /**\n         * Collapse (deeply) all children.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'collapseDeep',\n        value: function collapseDeep() {\n            return this.invokeDeep('collapse');\n        }\n\n        /**\n         * Concat multiple TreeNodes arrays.\n         *\n         * @category TreeNodes\n         * @param {TreeNodes} nodes Array of nodes.\n         * @return {TreeNodes} Resulting node array.\n         */\n\n    }, {\n        key: 'concat',\n        value: function concat(nodes) {\n            var newNodes = new TreeNodes(this._tree);\n            newNodes._context = this._context;\n\n            var pusher = function pusher(node) {\n                if (node instanceof TreeNode) {\n                    newNodes.push(node);\n                }\n            };\n\n            _.each(this, pusher);\n            _.each(nodes, pusher);\n\n            // Copy pagination limit\n            newNodes._pagination.limit = this._pagination.limit;\n\n            return newNodes;\n        }\n\n        /**\n         * Get the context of this collection. If a collection\n         * of children, context is the parent node. Otherwise\n         * the context is the tree itself.\n         *\n         * @category TreeNodes\n         * @return {TreeNode|object} Node object or tree instance.\n         */\n\n    }, {\n        key: 'context',\n        value: function context() {\n            return this._context || this._tree;\n        }\n\n        /**\n         * Copy nodes to another tree instance.\n         *\n         * @category TreeNodes\n         * @param {boolean} hierarchy Include necessary ancestors to match hierarchy.\n         * @return {object} Methods to perform action on copied nodes.\n         */\n\n    }, {\n        key: 'copy',\n        value: function copy(hierarchy) {\n            var _this2 = this;\n\n            return {\n\n                /**\n                 * Sets a destination.\n                 *\n                 * @category CopyNode\n                 * @param {object} dest Destination Inspire Tree.\n                 * @return {array} Array of new nodes.\n                 */\n                to: function to(dest) {\n                    if (!_.isFunction(dest.addNodes)) {\n                        throw new Error('Destination must be an Inspire Tree instance.');\n                    }\n\n                    var newNodes = new TreeNodes(_this2._tree);\n\n                    _.each(_this2, function (node) {\n                        newNodes.push(node.copy(hierarchy).to(dest));\n                    });\n\n                    return newNodes;\n                }\n            };\n        }\n\n        /**\n         * Return deepest nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'deepest',\n        value: function deepest() {\n            var matches = new TreeNodes(this._tree);\n\n            this.recurseDown(function (node) {\n                if (!node.children) {\n                    matches.push(node);\n                }\n            });\n\n            return matches;\n        }\n\n        /**\n         * Deselect nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'deselect',\n        value: function deselect() {\n            return this.invoke('deselect');\n        }\n\n        /**\n         * Deselect (deeply) all nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'deselectDeep',\n        value: function deselectDeep() {\n            return this.invokeDeep('deselect');\n        }\n\n        /**\n         * Iterate each TreeNode.\n         *\n         * @category TreeNodes\n         * @param {function} iteratee Iteratee invoke for each node.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'each',\n        value: function each$$1(iteratee) {\n            _.each(this, iteratee);\n\n            return this;\n        }\n\n        /**\n         * Query for all editable nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'editable',\n        value: function editable(full) {\n            return baseStatePredicate.call(this, 'editable', full);\n        }\n\n        /**\n         * Query for all nodes in editing mode.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'editing',\n        value: function editing(full) {\n            return baseStatePredicate.call(this, 'editing', full);\n        }\n\n        /**\n         * Expand nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'expand',\n        value: function expand() {\n            return this.invoke('expand');\n        }\n\n        /**\n         * Query for all expanded nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'expanded',\n        value: function expanded(full) {\n            return baseStatePredicate.call(this, 'expanded', full);\n        }\n\n        /**\n         * Expand (deeply) all nodes.\n         *\n         * @category TreeNodes\n         * @return {Promise} Promise resolved when all children have loaded and expanded.\n         */\n\n    }, {\n        key: 'expandDeep',\n        value: function expandDeep() {\n            var _this3 = this;\n\n            return new es6Promise_1(function (resolve) {\n                var waitCount = 0;\n\n                var done = function done() {\n                    if (--waitCount === 0) {\n                        resolve(_this3);\n                    }\n                };\n\n                _this3.recurseDown(function (node) {\n                    waitCount++;\n\n                    // Ignore nodes without children\n                    if (node.children) {\n                        node.expand().catch(done).then(function () {\n                            // Manually trigger expansion on newly loaded children\n                            node.children.expandDeep().catch(done).then(done);\n                        });\n                    } else {\n                        done();\n                    }\n                });\n            });\n        }\n\n        /**\n         * Expand parents.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'expandParents',\n        value: function expandParents() {\n            return this.invoke('expandParents');\n        }\n\n        /**\n         * Clone a hierarchy of all nodes matching a predicate.\n         *\n         * Because it filters deeply, we must clone all nodes so that we\n         * don't affect the actual node array.\n         *\n         * @category TreeNodes\n         * @param {string|function} predicate State flag or custom function.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'extract',\n        value: function extract(predicate) {\n            var flat = this.flatten(predicate);\n            var matches = new TreeNodes(this._tree);\n\n            _.each(flat, function (node) {\n                matches.addNode(node.copyHierarchy());\n            });\n\n            return matches;\n        }\n\n        /**\n         * Filter all nodes matching the given predicate.\n         *\n         * @category TreeNodes\n         * @param {string|function} predicate State flag or custom function.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'filterBy',\n        value: function filterBy(predicate) {\n            var fn = getPredicateFunction(predicate);\n            var matches = new TreeNodes(this._tree);\n\n            _.each(this, function (node) {\n                if (fn(node)) {\n                    matches.push(node);\n                }\n            });\n\n            return matches;\n        }\n\n        /**\n         * Flatten and get only node(s) matching the expected state or predicate function.\n         *\n         * @category TreeNodes\n         * @param {string|function} predicate State property or custom function.\n         * @return {TreeNodes} Flat array of matching nodes.\n         */\n\n    }, {\n        key: 'flatten',\n        value: function flatten(predicate) {\n            var flat = new TreeNodes(this._tree);\n\n            var fn = getPredicateFunction(predicate);\n            this.recurseDown(function (node) {\n                if (fn(node)) {\n                    flat.push(node);\n                }\n            });\n\n            return flat;\n        }\n\n        /**\n         * Query for all focused nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'focused',\n        value: function focused(full) {\n            return baseStatePredicate.call(this, 'focused', full);\n        }\n\n        /**\n         * Iterate each TreeNode.\n         *\n         * @category TreeNodes\n         * @param {function} iteratee Iteratee invoke for each node.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'forEach',\n        value: function forEach(iteratee) {\n            return this.each(iteratee);\n        }\n\n        /**\n         * Get a specific node by its index, or undefined if it doesn't exist.\n         *\n         * @category TreeNodes\n         * @param {int} index Numeric index of requested node.\n         * @return {TreeNode} Node object. Undefined if invalid index.\n         */\n\n    }, {\n        key: 'get',\n        value: function get$$1(index) {\n            return this[index];\n        }\n\n        /**\n         * Query for all hidden nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'hidden',\n        value: function hidden(full) {\n            return baseStatePredicate.call(this, 'hidden', full);\n        }\n\n        /**\n         * Hide nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'hide',\n        value: function hide() {\n            return this.invoke('hide');\n        }\n\n        /**\n         * Hide (deeply) all nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'hideDeep',\n        value: function hideDeep() {\n            return this.invokeDeep('hide');\n        }\n\n        /**\n         * Query for all indeterminate nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'indeterminate',\n        value: function indeterminate(full) {\n            return baseStatePredicate.call(this, 'indeterminate', full);\n        }\n\n        /**\n         * Insert a new node at a given position.\n         *\n         * @category TreeNodes\n         * @param {integer} index Index at which to insert the node.\n         * @param {object} object Raw node object or TreeNode.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'insertAt',\n        value: function insertAt(index, object) {\n            // If node has a pre-existing ID\n            if (object.id) {\n                // Is it already in the tree?\n                var existingNode = this.node(object.id);\n                if (existingNode) {\n                    existingNode.restore().show();\n\n                    // Merge children\n                    if (_.isArrayLike(object.children)) {\n                        // Setup existing node's children property if needed\n                        if (!_.isArrayLike(existingNode.children)) {\n                            existingNode.children = new TreeNodes(this._tree);\n                            existingNode.children._context = existingNode;\n                        }\n\n                        // Copy each child (using addNode, which uses insertAt)\n                        _.each(object.children, function (child) {\n                            existingNode.children.addNode(child);\n                        });\n                    }\n\n                    // Merge truthy children\n                    else if (object.children && _.isBoolean(existingNode.children)) {\n                            existingNode.children = object.children;\n                        }\n\n                    existingNode.markDirty();\n                    this._tree.applyChanges();\n\n                    // Node merged, return it.\n                    return existingNode;\n                }\n            }\n\n            // Node is new, insert at given location.\n            var node = this._tree.constructor.isTreeNode(object) ? object : objectToNode(this._tree, object);\n\n            // Grab remaining nodes\n            this.splice(index, 0, node);\n\n            // Refresh parent state and mark dirty\n            if (this._context) {\n                node.itree.parent = this._context;\n                this._context.refreshIndeterminateState().markDirty();\n            }\n\n            // Event\n            this._tree.emit('node.added', node);\n\n            // Always mark this node as dirty\n            node.markDirty();\n\n            // If pushing this node anywhere but the end, other nodes may change.\n            if (this.length - 1 !== index) {\n                this.invoke('markDirty');\n            }\n\n            this._tree.applyChanges();\n\n            return node;\n        }\n\n        /**\n         * Invoke method(s) on each node.\n         *\n         * @category TreeNodes\n         * @param {string|array} methods Method name(s).\n         * @param {array|Arguments} args Array of arguments to proxy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'invoke',\n        value: function invoke$$1(methods, args) {\n            return baseInvoke(this, methods, args);\n        }\n\n        /**\n         * Invoke method(s) deeply.\n         *\n         * @category TreeNodes\n         * @param {string|array} methods Method name(s).\n         *  @param {array|Arguments} args Array of arguments to proxy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'invokeDeep',\n        value: function invokeDeep(methods, args) {\n            return baseInvoke(this, methods, args, true);\n        }\n\n        /**\n         * Query for all nodes currently loading children.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'loading',\n        value: function loading(full) {\n            return baseStatePredicate.call(this, 'loading', full);\n        }\n\n        /**\n         * Loads additional nodes for this context.\n         *\n         * @category TreeNodes\n         * @param {Event} event Click or scroll event if DOM interaction triggered this call.\n         * @return {Promise} Resolves with request results.\n         */\n\n    }, {\n        key: 'loadMore',\n        value: function loadMore(event) {\n            var _this4 = this;\n\n            // Never refire if node is loading\n            if (this._loading) {\n                return es6Promise_1.reject(new Error('Pending loadMore call must complete before being invoked again.'));\n            }\n\n            var promise = void 0;\n\n            // If no records remain, immediately resolve\n            if (this._pagination.limit === this._pagination.total) {\n                return es6Promise_1.resolve();\n            }\n\n            // Set loading flag, prevents repeat requests\n            this._loading = true;\n            this._tree.batch();\n\n            // Mark this context as dirty since we'll update text/tree nodes\n            _.invoke(this._context, 'markDirty');\n\n            // Increment the pagination\n            this._pagination.limit += this._tree.config.pagination.limit;\n\n            // Emit an event\n            this._tree.emit('node.paginated', this._context || this._tree, this.pagination, event);\n\n            if (this._tree.config.deferredLoading) {\n                if (this._context) {\n                    promise = this._context.loadChildren();\n                } else {\n                    promise = this._tree.load(this._tree.config.data);\n                }\n            } else {\n                this._loading = false;\n\n                promise = es6Promise_1.resolve();\n            }\n\n            this._tree.end();\n\n            // Clear the loading flag\n            if (this._tree.config.deferredLoading) {\n                promise.then(function () {\n                    _this4._loading = false;\n                    _this4._tree.applyChanges();\n                }).catch(function () {\n                    _this4._loading = false;\n                    _this4._tree.applyChanges();\n                });\n            }\n\n            return promise;\n        }\n\n        /**\n         * Query for all nodes matched in the last search.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'matched',\n        value: function matched(full) {\n            return baseStatePredicate.call(this, 'matched', full);\n        }\n\n        /**\n         * Move node at a given index to a new index.\n         *\n         * @category TreeNodes\n         * @param {int} index Current index.\n         * @param {int} newIndex New index.\n         * @param {TreeNodes} target Target TreeNodes array. Defaults to this.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'move',\n        value: function move(index, newIndex) {\n            var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n            this._tree.batch();\n\n            var oldNode = this[index].remove();\n            var node = target.insertAt(newIndex, oldNode);\n\n            this._tree.emit('node.moved', node, this, index, target, newIndex);\n\n            this._tree.end();\n\n            return node;\n        }\n\n        /**\n         * Get a node.\n         *\n         * @category TreeNodes\n         * @param {string|number} id ID of node.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'node',\n        value: function node(id) {\n            var match = void 0;\n\n            this.recurseDown(function (node) {\n                if (node.id === id) {\n                    match = node;\n\n                    return false;\n                }\n            });\n\n            return match;\n        }\n\n        /**\n         * Get all nodes in a tree, or nodes for an array of IDs.\n         *\n         * @category TreeNodes\n         * @param {array} refs Array of ID references.\n         * @return {TreeNodes} Array of node objects.\n         * @example\n         *\n         * let all = tree.nodes()\n         * let some = tree.nodes([1, 2, 3])\n         */\n\n    }, {\n        key: 'nodes',\n        value: function nodes(refs) {\n            var results = void 0;\n\n            if (_.isArray(refs)) {\n                results = new TreeNodes(this._tree);\n\n                this.recurseDown(function (node) {\n                    if (refs.indexOf(node.id) > -1) {\n                        results.push(node);\n                    }\n                });\n            }\n\n            return _.isArray(refs) ? results : this;\n        }\n\n        /**\n         * Get the pagination.\n         *\n         * @category TreeNodes\n         * @return {object} Pagination configuration object.\n         */\n\n    }, {\n        key: 'pagination',\n        value: function pagination() {\n            return this._pagination;\n        }\n\n        /**\n         * Iterate down all nodes and any children.\n         *\n         * Return false to stop execution.\n         *\n         * @category TreeNodes\n         * @param {function} iteratee Iteratee function.\n         * @return {TreeNodes} Resulting nodes.\n         */\n\n    }, {\n        key: 'recurseDown',\n        value: function recurseDown$$1(iteratee) {\n            recurseDown(this, iteratee);\n\n            return this;\n        }\n\n        /**\n         * Remove a node.\n         *\n         * @category TreeNodes\n         * @param {TreeNode} node Node object.\n         * @return {TreeNodes} Resulting nodes.\n         */\n\n    }, {\n        key: 'remove',\n        value: function remove$$1(node) {\n            _.remove(this, { id: node.id });\n\n            _.invoke(this._context, 'markDirty');\n\n            this._tree.applyChanges();\n\n            return this;\n        }\n\n        /**\n         * Query for all soft-removed nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'removed',\n        value: function removed(full) {\n            return baseStatePredicate.call(this, 'removed', full);\n        }\n\n        /**\n         * Restore nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'restore',\n        value: function restore() {\n            return this.invoke('restore');\n        }\n\n        /**\n         * Restore (deeply) all nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'restoreDeep',\n        value: function restoreDeep() {\n            return this.invokeDeep('restore');\n        }\n\n        /**\n         * Select nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'select',\n        value: function select() {\n            return this.invoke('select');\n        }\n\n        /**\n         * Query for all selectable nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'selectable',\n        value: function selectable(full) {\n            return baseStatePredicate.call(this, 'selectable', full);\n        }\n\n        /**\n         * Select (deeply) all nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'selectDeep',\n        value: function selectDeep() {\n            return this.invokeDeep('select');\n        }\n\n        /**\n         * Query for all selected nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'selected',\n        value: function selected(full) {\n            return baseStatePredicate.call(this, 'selected', full);\n        }\n\n        /**\n         * Show nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'show',\n        value: function show() {\n            return this.invoke('show');\n        }\n\n        /**\n         * Show (deeply) all nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'showDeep',\n        value: function showDeep() {\n            return this.invokeDeep('show');\n        }\n\n        /**\n         * Soft-remove nodes.\n         *\n         * @category TreeNodes\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'softRemove',\n        value: function softRemove() {\n            return this.invoke('softRemove');\n        }\n\n        /**\n         * Sorts all TreeNode objects in this collection.\n         *\n         * If no custom sorter given, the configured \"sort\" value will be used.\n         *\n         * @category TreeNodes\n         * @param {string|function} sorter Sort function or property name.\n         * @return {TreeNodes} Array of node obejcts.\n         */\n\n    }, {\n        key: 'sortBy',\n        value: function sortBy$$1(sorter) {\n            var _this5 = this;\n\n            sorter = sorter || this._tree.config.sort;\n\n            // Only apply sort if one provided\n            if (sorter) {\n                var sorted = _.sortBy(this, sorter);\n\n                this.length = 0;\n                _.each(sorted, function (node) {\n                    _this5.push(node);\n                });\n            }\n\n            return this;\n        }\n\n        /**\n         * Set nodes' state values.\n         *\n         * @category TreeNodes\n         * @param {string} name Property name.\n         * @param {boolean} newVal New value, if setting.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'state',\n        value: function state() {\n            return this.invoke('state', arguments);\n        }\n\n        /**\n         * Set (deeply) nodes' state values.\n         *\n         * @category TreeNodes\n         * @param {string} name Property name.\n         * @param {boolean} newVal New value, if setting.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'stateDeep',\n        value: function stateDeep() {\n            return this.invokeDeep('state', arguments);\n        }\n\n        /**\n         * Swaps two node positions.\n         *\n         * @category TreeNodes\n         * @param {TreeNode} node1 Node 1.\n         * @param {TreeNode} node2 Node 2.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'swap',\n        value: function swap(node1, node2) {\n            this._tree.batch();\n\n            var n1Context = node1.context();\n            var n2Context = node2.context();\n\n            // Cache. Note: n2Index is only usable once\n            var n1Index = n1Context.indexOf(node1);\n            var n2Index = n2Context.indexOf(node2);\n\n            // If contexts match, we can simply re-assign them\n            if (n1Context === n2Context) {\n                this[n1Index] = node2;\n                this[n2Index] = node1;\n\n                // Emit move events for each node\n                this._tree.emit('node.moved', node1, n1Context, n1Index, n2Context, n2Index);\n                this._tree.emit('node.moved', node2, n2Context, n2Index, n1Context, n1Index);\n            } else {\n                // Otherwise, we have to move between contexts\n                // Move node 1 to node 2's index\n                n1Context.move(n1Index, n2Context.indexOf(node2), n2Context);\n\n                // Move node 2 to node 1s original index\n                n2Context.move(n2Context.indexOf(node2), n1Index, n1Context);\n            }\n\n            this._tree.end();\n\n            this._tree.emit('node.swapped', node1, n1Context, n1Index, node2, n2Context, n2Index);\n\n            return this;\n        }\n\n        /**\n         * Get the tree instance.\n         *\n         * @category TreeNodes\n         * @return {[type]} [description]\n         */\n\n    }, {\n        key: 'tree',\n        value: function tree() {\n            return this._tree;\n        }\n\n        /**\n         * Get a native node Array.\n         *\n         * @category TreeNodes\n         * @return {array} Array of node objects.\n         */\n\n    }, {\n        key: 'toArray',\n        value: function toArray$$1() {\n            var array = [];\n\n            _.each(this, function (node) {\n                array.push(node.toObject());\n            });\n\n            return array;\n        }\n\n        /**\n         * Query for all visible nodes.\n         *\n         * @category TreeNodes\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'visible',\n        value: function visible(full) {\n            return baseStatePredicate.call(this, 'visible', full);\n        }\n    }]);\n    return TreeNodes;\n}(_extendableBuiltin(Array));\n\n/**\n * Base recursion function for a collection or node.\n *\n * Returns false if execution should cease.\n *\n * @private\n * @param {TreeNode|TreeNodes} obj Node or collection.\n * @param {function} iteratee Iteratee function\n * @return {boolean} Cease iteration.\n */\nfunction recurseDown(obj, iteratee) {\n    var res = void 0;\n\n    if (obj instanceof TreeNodes) {\n        _.each(obj, function (node) {\n            res = recurseDown(node, iteratee);\n\n            return res;\n        });\n    } else if (obj instanceof TreeNode) {\n        res = iteratee(obj);\n\n        // Recurse children\n        if (res !== false && obj.hasChildren()) {\n            res = recurseDown(obj.children, iteratee);\n        }\n    }\n\n    return res;\n}\n\n/**\n * Resolve promise-like objects consistently.\n *\n * @private\n * @param {object} promise Promise-like object.\n * @returns {Promise} Promise\n */\nfunction standardizePromise(promise) {\n    return new es6Promise_1(function (resolve, reject) {\n        if (!_.isObject(promise)) {\n            return reject(new Error('Invalid Promise'));\n        }\n\n        if (_.isFunction(promise.then)) {\n            promise.then(resolve);\n        }\n\n        // jQuery promises use \"error\"\n        if (_.isFunction(promise.error)) {\n            promise.error(reject);\n        } else if (_.isFunction(promise.catch)) {\n            promise.catch(reject);\n        }\n    });\n}\n\n// Libs\n\n/**\n * Helper method to clone an ITree config object.\n *\n * Rejects non-clonable properties like ref.\n *\n * @private\n * @param {object} itree ITree configuration object\n * @param {array} excludeKeys Keys to exclude, if any\n * @return {object} Cloned ITree.\n */\nfunction cloneItree(itree, excludeKeys) {\n    var clone = {};\n    excludeKeys = _.castArray(excludeKeys);\n    excludeKeys.push('ref');\n\n    _.each(itree, function (v, k) {\n        if (!_.includes(excludeKeys, k)) {\n            clone[k] = _.cloneDeep(v);\n        }\n    });\n\n    return clone;\n}\n\n/**\n * Represents a singe node object within the tree.\n *\n * @category TreeNode\n * @param {TreeNode} source TreeNode to copy.\n * @return {TreeNode} Tree node object.\n */\nvar TreeNode = function () {\n    function TreeNode(tree, source, excludeKeys) {\n        var _this = this;\n\n        classCallCheck(this, TreeNode);\n\n        this._tree = tree;\n\n        if (source instanceof TreeNode) {\n            excludeKeys = _.castArray(excludeKeys);\n            excludeKeys.push('_tree');\n\n            // Iterate manually for better perf\n            _.each(source, function (value, key) {\n                // Skip vars\n                if (!_.includes(excludeKeys, key)) {\n                    if (_.isObject(value)) {\n                        if (value instanceof TreeNodes) {\n                            _this[key] = value.clone();\n                        } else if (key === 'itree') {\n                            _this[key] = cloneItree(value);\n                        } else {\n                            _this[key] = _.cloneDeep(value);\n                        }\n                    } else {\n                        // Copy primitives\n                        _this[key] = value;\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * Add a child to this node.\n     *\n     * @category TreeNode\n     * @param {object} child Node object.\n     * @return {TreeNode} Node object.\n     */\n\n\n    createClass(TreeNode, [{\n        key: 'addChild',\n        value: function addChild(child) {\n            if (_.isArray(this.children) || !_.isArrayLike(this.children)) {\n                this.children = new TreeNodes(this._tree);\n                this.children._context = this;\n            }\n\n            return this.children.addNode(child);\n        }\n\n        /**\n         * Add multiple children to this node.\n         *\n         * @category TreeNode\n         * @param {object} children Array of nodes.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'addChildren',\n        value: function addChildren(children) {\n            var _this2 = this;\n\n            var nodes = new TreeNodes(this._tree);\n\n            this._tree.batch();\n            _.each(children, function (child) {\n                nodes.push(_this2.addChild(child));\n            });\n            this._tree.end();\n\n            return nodes;\n        }\n\n        /**\n         * Ensure this node allows dynamic children.\n         *\n         * @private\n         * @return {boolean} True if tree/node allows dynamic children.\n         */\n\n    }, {\n        key: 'allowDynamicLoad',\n        value: function allowDynamicLoad() {\n            return this._tree.isDynamic && (_.isArrayLike(this.children) || this.children === true);\n        }\n\n        /**\n         * Check if node available.\n         *\n         * @category TreeNode\n         * @return {boolean} True if available.\n         */\n\n    }, {\n        key: 'available',\n        value: function available() {\n            return !this.hidden() && !this.removed();\n        }\n\n        /**\n         * Blur focus from this node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'blur',\n        value: function blur() {\n            this.state('editing', false);\n\n            return baseStateChange('focused', false, 'blurred', this);\n        }\n    }, {\n        key: 'check',\n\n\n        /**\n         * Mark node as checked.\n         *\n         * @category TreeNode\n         * @param {boolean} shallow Skip auto-checking children.\n         * @return {TreeNode} Node object.\n         */\n        value: function check(shallow) {\n            this._tree.batch();\n\n            // Will we automatically apply state changes to our children\n            var deep = !shallow && this._tree.config.checkbox.autoCheckChildren;\n\n            baseStateChange('checked', true, 'checked', this, deep);\n\n            // Reset indeterminate state\n            this.state('indeterminate', false);\n\n            // Refresh parent\n            if (this.hasParent()) {\n                this.getParent().refreshIndeterminateState();\n            }\n\n            this._tree.end();\n\n            return this;\n        }\n    }, {\n        key: 'checked',\n\n\n        /**\n         * Get whether this node is checked.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node checked.\n         */\n        value: function checked() {\n            return this.state('checked');\n        }\n\n        /**\n         * Hide parents without any visible children.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'clean',\n        value: function clean() {\n            this.recurseUp(function (node) {\n                if (node.hasParent()) {\n                    var parent = node.getParent();\n                    if (!parent.hasVisibleChildren()) {\n                        parent.hide();\n                    }\n                }\n            });\n\n            return this;\n        }\n\n        /**\n         * Clone this node.\n         *\n         * @category TreeNode\n         * @param {array} excludeKeys Keys to exclude from the clone.\n         * @return {TreeNode} New node object.\n         */\n\n    }, {\n        key: 'clone',\n        value: function clone(excludeKeys) {\n            return new TreeNode(this._tree, this, excludeKeys);\n        }\n\n        /**\n         * Collapse this node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'collapse',\n        value: function collapse() {\n            return baseStateChange('collapsed', true, 'collapsed', this);\n        }\n\n        /**\n         * Get whether this node is collapsed.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node collapsed.\n         */\n\n    }, {\n        key: 'collapsed',\n        value: function collapsed() {\n            return this.state('collapsed');\n        }\n\n        /**\n         * Get the containing context. If no parent present, the root context is returned.\n         *\n         * @category TreeNode\n         * @return {TreeNodes} Node array object.\n         */\n\n    }, {\n        key: 'context',\n        value: function context() {\n            return this.hasParent() ? this.getParent().children : this._tree.model;\n        }\n\n        /**\n         * Copy node to another tree instance.\n         *\n         * @category TreeNode\n         * @param {boolean} hierarchy Include necessary ancestors to match hierarchy.\n         * @return {object} Property \"to\" for defining destination.\n         */\n\n    }, {\n        key: 'copy',\n        value: function copy(hierarchy) {\n            var node = this;\n\n            if (hierarchy) {\n                node = node.copyHierarchy();\n            }\n\n            return {\n\n                /**\n                 * Sets a destination.\n                 *\n                 * @category CopyNode\n                 * @param {object} dest Destination Inspire Tree.\n                 * @return {object} New node object.\n                 */\n                to: function to(dest) {\n                    if (!_.isFunction(dest.addNode)) {\n                        throw new Error('Destination must be an Inspire Tree instance.');\n                    }\n\n                    return dest.addNode(node.toObject());\n                }\n            };\n        }\n\n        /**\n         * Copy all parents of a node.\n         *\n         * @category TreeNode\n         * @param {boolean} excludeNode Exclude given node from hierarchy.\n         * @return {TreeNode} Root node object with hierarchy.\n         */\n\n    }, {\n        key: 'copyHierarchy',\n        value: function copyHierarchy(excludeNode) {\n            var nodes = [];\n            var parents = this.getParents();\n\n            // Remove old hierarchy data\n            _.each(parents, function (node) {\n                nodes.push(node.toObject(excludeNode));\n            });\n\n            parents = nodes.reverse();\n\n            if (!excludeNode) {\n                var clone = this.toObject(true);\n\n                // Filter out hidden children\n                if (this.hasChildren()) {\n                    clone.children = this.children.filterBy(function (n) {\n                        return !n.state('hidden');\n                    }).toArray();\n\n                    clone.children._context = clone;\n                }\n\n                nodes.push(clone);\n            }\n\n            var hierarchy = nodes[0];\n            var pointer = hierarchy;\n            var l = nodes.length;\n            _.each(nodes, function (parent, key) {\n                var children = [];\n\n                if (key + 1 < l) {\n                    children.push(nodes[key + 1]);\n                    pointer.children = children;\n\n                    pointer = pointer.children[0];\n                }\n            });\n\n            return objectToNode(this._tree, hierarchy);\n        }\n    }, {\n        key: 'deselect',\n\n\n        /**\n         * Deselect this node.\n         *\n         * If selection.require is true and this is the last selected\n         * node, the node will remain in a selected state.\n         *\n         * @category TreeNode\n         * @param {boolean} shallow Skip auto-deselecting children.\n         * @return {TreeNode} Node object.\n         */\n        value: function deselect(shallow) {\n            if (this.selected() && (!this._tree.config.selection.require || this._tree.selected().length > 1)) {\n                this._tree.batch();\n\n                // Will we apply this state change to our children?\n                var deep = !shallow && this._tree.config.selection.autoSelectChildren;\n\n                baseStateChange('selected', false, 'deselected', this, deep);\n\n                this._tree.end();\n            }\n\n            return this;\n        }\n\n        /**\n         * Get weather node editable. Required editing.edit to be enable via config.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node editable.\n         */\n\n    }, {\n        key: 'editable',\n        value: function editable() {\n            return this._tree.config.editable && this._tree.config.editing.edit && this.state('editable');\n        }\n\n        /**\n         * Get weather node is currently in edit mode.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node in edit mode.\n         */\n\n    }, {\n        key: 'editing',\n        value: function editing() {\n            return this.state('editing');\n        }\n\n        /**\n         * Expand this node.\n         *\n         * @category TreeNode\n         * @return {Promise} Promise resolved on successful load and expand of children.\n         */\n\n    }, {\n        key: 'expand',\n        value: function expand() {\n            var node = this;\n\n            return new es6Promise_1(function (resolve, reject) {\n                var allow = node.hasChildren() || node._tree.isDynamic && node.children === true;\n\n                if (allow && (node.collapsed() || node.hidden())) {\n                    node.state('collapsed', false);\n                    node.state('hidden', false);\n\n                    node._tree.emit('node.expanded', node);\n\n                    if (node._tree.isDynamic && node.children === true) {\n                        node.loadChildren().then(resolve).catch(reject);\n                    } else {\n                        node.markDirty();\n                        node._tree.applyChanges();\n                        resolve(node);\n                    }\n                } else {\n                    // Resolve immediately\n                    resolve(node);\n                }\n            });\n        }\n\n        /**\n         * Get weather node expanded.\n         *\n         * @category TreeNode\n         * @return {boolean} True if expanded.\n         */\n\n    }, {\n        key: 'expanded',\n        value: function expanded() {\n            return !this.collapsed();\n        }\n\n        /**\n         * Expand parent nodes.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'expandParents',\n        value: function expandParents() {\n            if (this.hasParent()) {\n                this.getParent().recurseUp(function (node) {\n                    node.expand();\n                });\n            }\n\n            return this;\n        }\n\n        /**\n         * Focus a node without changing its selection.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'focus',\n        value: function focus() {\n            if (!this.focused()) {\n                // Batch selection changes\n                this._tree.batch();\n                this._tree.blurDeep();\n                this.state('focused', true);\n\n                // Emit this event\n                this._tree.emit('node.focused', this);\n\n                // Mark hierarchy dirty and apply\n                this.markDirty();\n                this._tree.end();\n            }\n\n            return this;\n        }\n\n        /**\n         * Get weather this node is focused.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node focused.\n         */\n\n    }, {\n        key: 'focused',\n        value: function focused() {\n            return this.state('focused');\n        }\n\n        /**\n         * Get children for this node. If no children exist, an empty TreeNodes\n         * collection is returned for safe chaining.\n         *\n         * @category TreeNode\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'getChildren',\n        value: function getChildren() {\n            return this.hasChildren() ? this.children : new TreeNodes(this._tree);\n        }\n\n        /**\n         * Get the immediate parent, if any.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'getParent',\n        value: function getParent() {\n            return this.itree.parent;\n        }\n\n        /**\n         * Get parent nodes. Excludes any siblings.\n         *\n         * @category TreeNode\n         * @return {TreeNodes} Node objects.\n         */\n\n    }, {\n        key: 'getParents',\n        value: function getParents() {\n            var parents = new TreeNodes(this._tree);\n\n            if (this.hasParent()) {\n                this.getParent().recurseUp(function (node) {\n                    parents.push(node);\n                });\n            }\n\n            return parents;\n        }\n\n        /**\n         * Get a textual hierarchy for a given node. An array\n         * of text from this node's root ancestor to the given node.\n         *\n         * @category TreeNode\n         * @return {array} Array of node texts.\n         */\n\n    }, {\n        key: 'getTextualHierarchy',\n        value: function getTextualHierarchy() {\n            var paths = [];\n\n            this.recurseUp(function (node) {\n                paths.unshift(node.text);\n            });\n\n            return paths;\n        }\n\n        /**\n         * Get weather the given node is an ancestor of this node.\n         *\n         * @category TreeNode\n         * @param {TreeNode} node Node object.\n         * @return {boolean} True if node is an ancestor or the given node\n         */\n\n    }, {\n        key: 'hasAncestor',\n        value: function hasAncestor(node) {\n            var hasAncestor = false;\n            this.recurseUp(function (n) {\n                return !(hasAncestor = n.id === node.id);\n            });\n\n            return hasAncestor;\n        }\n\n        /**\n         * Get weather node has any children.\n         *\n         * @category TreeNode\n         * @return {boolean} True if has loaded children.\n         */\n\n    }, {\n        key: 'hasChildren',\n        value: function hasChildren() {\n            return _.isArrayLike(this.children) && this.children.length > 0;\n        }\n\n        /**\n         * Get weather children have been loaded. Will always be true for non-dynamic nodes.\n         *\n         * @category TreeNode\n         * @return {boolean} True if we've attempted to load children.\n         */\n\n    }, {\n        key: 'hasLoadedChildren',\n        value: function hasLoadedChildren() {\n            return _.isArrayLike(this.children);\n        }\n\n        /**\n         * Get weather node has any children, or allows dynamic loading.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node has, or will have children.\n         */\n\n    }, {\n        key: 'hasOrWillHaveChildren',\n        value: function hasOrWillHaveChildren() {\n            return _.isArrayLike(this.children) ? Boolean(this.children.length) : this.allowDynamicLoad();\n        }\n\n        /**\n         * Get weather node has a parent.\n         *\n         * @category TreeNode\n         * @return {boolean} True if has a parent.\n         */\n\n    }, {\n        key: 'hasParent',\n        value: function hasParent() {\n            return Boolean(this.itree.parent);\n        }\n\n        /**\n         * Get weather node has any visible children.\n         *\n         * @category TreeNode\n         * @return {boolean} True if children are visible.\n         */\n\n    }, {\n        key: 'hasVisibleChildren',\n        value: function hasVisibleChildren() {\n            var hasVisibleChildren = false;\n\n            if (this.hasChildren()) {\n                hasVisibleChildren = this.children.filterBy('available').length > 0;\n            }\n\n            return hasVisibleChildren;\n        }\n\n        /**\n         * Hide this node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'hide',\n        value: function hide() {\n            var node = baseStateChange('hidden', true, 'hidden', this);\n\n            // Update children\n            if (node.hasChildren()) {\n                node.children.hide();\n            }\n\n            return node;\n        }\n\n        /**\n         * Get weather this node is hidden.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node hidden.\n         */\n\n    }, {\n        key: 'hidden',\n        value: function hidden() {\n            return this.state('hidden');\n        }\n\n        /**\n         * Get a \"path\" of indices, values which map this node's location within all parent contexts.\n         *\n         * @category TreeNode\n         * @return {string} Index path\n         */\n\n    }, {\n        key: 'indexPath',\n        value: function indexPath() {\n            var indices = [];\n\n            this.recurseUp(function (node) {\n                indices.push(_.indexOf(node.context(), node));\n            });\n\n            return indices.reverse().join('.');\n        }\n\n        /**\n         * Get weather this node is indeterminate.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node indeterminate.\n         */\n\n    }, {\n        key: 'indeterminate',\n        value: function indeterminate() {\n            return this.state('indeterminate');\n        }\n\n        /**\n         * Find the last + deepest visible child of the previous sibling.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'lastDeepestVisibleChild',\n        value: function lastDeepestVisibleChild() {\n            var found = void 0;\n\n            if (this.hasChildren() && !this.collapsed()) {\n                found = _.findLast(this.children, function (node) {\n                    return node.visible();\n                });\n\n                var res = found.lastDeepestVisibleChild();\n                if (res) {\n                    found = res;\n                }\n            }\n\n            return found;\n        }\n\n        /**\n         * Initiate a dynamic load of children for a given node.\n         *\n         * This requires `tree.config.data` to be a function which accepts\n         * three arguments: node, resolve, reject.\n         *\n         * Use the `node` to filter results.\n         *\n         * On load success, pass the result array to `resolve`.\n         * On error, pass the Error to `reject`.\n         *\n         * @category TreeNode\n         * @return {Promise} Promise resolving children nodes.\n         */\n\n    }, {\n        key: 'loadChildren',\n        value: function loadChildren() {\n            var _this3 = this;\n\n            return new es6Promise_1(function (resolve, reject) {\n                if (!_this3.allowDynamicLoad()) {\n                    return reject(new Error('Node does not have or support dynamic children.'));\n                }\n\n                _this3.state('loading', true);\n                _this3.markDirty();\n                _this3._tree.applyChanges();\n\n                var complete = function complete(nodes, totalNodes) {\n                    // A little type-safety for silly situations\n                    if (!_.isArrayLike(nodes)) {\n                        return reject(new TypeError('Loader requires an array-like `nodes` parameter.'));\n                    }\n\n                    _this3._tree.batch();\n                    _this3.state('loading', false);\n\n                    var model = collectionToModel(_this3._tree, nodes, _this3);\n                    if (_.isArrayLike(_this3.children)) {\n                        _this3.children = _this3.children.concat(model);\n                    } else {\n                        _this3.children = model;\n                    }\n\n                    if (_.parseInt(totalNodes) > nodes.length) {\n                        _this3.children._pagination.total = _.parseInt(totalNodes);\n                    }\n\n                    // If using checkbox mode, share selection with newly loaded children\n                    if (_this3._tree.config.selection.mode === 'checkbox' && _this3.selected()) {\n                        _this3.children.select();\n                    }\n\n                    _this3.markDirty();\n                    _this3._tree.end();\n\n                    resolve(_this3.children);\n\n                    _this3._tree.emit('children.loaded', _this3);\n                };\n\n                var error = function error(err) {\n                    _this3.state('loading', false);\n                    _this3.children = new TreeNodes(_this3._tree);\n                    _this3.children._context = _this3;\n                    _this3.markDirty();\n                    _this3._tree.applyChanges();\n\n                    reject(err);\n\n                    _this3._tree.emit('tree.loaderror', err);\n                };\n\n                var pagination = _this3._tree.constructor.isTreeNodes(_this3.children) ? _this3.children.pagination() : null;\n\n                var loader = _this3._tree.config.data(_this3, complete, error, pagination);\n\n                // Data loader is likely a promise\n                if (_.isObject(loader)) {\n                    standardizePromise(loader).then(complete).catch(error);\n                }\n            });\n        }\n\n        /**\n         * Get weather this node is loading child data.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node's children are loading.\n         */\n\n    }, {\n        key: 'loading',\n        value: function loading() {\n            return this.state('loading');\n        }\n\n        /**\n         * Load additional children.\n         *\n         * @category TreeNode\n         * @param {Event} event Click or scroll event if DOM interaction triggered this call.\n         * @return {Promise} Resolves with request results.\n         */\n\n    }, {\n        key: 'loadMore',\n        value: function loadMore() {\n            if (!this.children || this.children === true) {\n                return es6Promise_1.reject(new Error('Children have not yet been loaded.'));\n            }\n\n            return this.children.loadMore();\n        }\n\n        /**\n         * Mark node as dirty. For some systems this assists with rendering tracking.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'markDirty',\n        value: function markDirty() {\n            if (!this.itree.dirty) {\n                this.itree.dirty = true;\n\n                if (this.hasParent()) {\n                    this.getParent().markDirty();\n                }\n            }\n\n            return this;\n        }\n\n        /**\n         * Get whether this node was matched during the last search.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node matched.\n         */\n\n    }, {\n        key: 'matched',\n        value: function matched() {\n            return this.state('matched');\n        }\n\n        /**\n         * Find the next visible sibling of our ancestor. Continues\n         * seeking up the tree until a valid node is found or we\n         * reach the root node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'nextVisibleAncestralSiblingNode',\n        value: function nextVisibleAncestralSiblingNode() {\n            var next = void 0;\n\n            if (this.hasParent()) {\n                var parent = this.getParent();\n                next = parent.nextVisibleSiblingNode();\n\n                if (!next) {\n                    next = parent.nextVisibleAncestralSiblingNode();\n                }\n            }\n\n            return next;\n        }\n\n        /**\n         * Find next visible child node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object, if any.\n         */\n\n    }, {\n        key: 'nextVisibleChildNode',\n        value: function nextVisibleChildNode() {\n            var next = void 0;\n\n            if (this.hasChildren()) {\n                next = _.find(this.children, function (child) {\n                    return child.visible();\n                });\n            }\n\n            return next;\n        }\n\n        /**\n         * Get the next visible node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object if any.\n         */\n\n    }, {\n        key: 'nextVisibleNode',\n        value: function nextVisibleNode() {\n            var next = void 0;\n\n            // 1. Any visible children\n            next = this.nextVisibleChildNode();\n\n            // 2. Any Siblings\n            if (!next) {\n                next = this.nextVisibleSiblingNode();\n            }\n\n            // 3. Find sibling of ancestor(s)\n            if (!next) {\n                next = this.nextVisibleAncestralSiblingNode();\n            }\n\n            return next;\n        }\n\n        /**\n         * Find the next visible sibling node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object, if any.\n         */\n\n    }, {\n        key: 'nextVisibleSiblingNode',\n        value: function nextVisibleSiblingNode() {\n            var context = this.hasParent() ? this.getParent().children : this._tree.nodes();\n            var i = _.findIndex(context, { id: this.id });\n\n            return _.find(_.slice(context, i + 1), function (node) {\n                return node.visible();\n            });\n        }\n\n        /**\n         * Get pagination object for this tree node.\n         *\n         * @category TreeNode\n         * @return {object} Pagination configuration object.\n         */\n\n    }, {\n        key: 'pagination',\n        value: function pagination() {\n            return _.get(this, 'children._pagination');\n        }\n\n        /**\n         * Find the previous visible node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object, if any.\n         */\n\n    }, {\n        key: 'previousVisibleNode',\n        value: function previousVisibleNode() {\n            var prev = void 0;\n\n            // 1. Any Siblings\n            prev = this.previousVisibleSiblingNode();\n\n            // 2. If that sibling has children though, go there\n            if (prev && prev.hasChildren() && !prev.collapsed()) {\n                prev = prev.lastDeepestVisibleChild();\n            }\n\n            // 3. Parent\n            if (!prev && this.hasParent()) {\n                prev = this.getParent();\n            }\n\n            return prev;\n        }\n\n        /**\n         * Find the previous visible sibling node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object, if any.\n         */\n\n    }, {\n        key: 'previousVisibleSiblingNode',\n        value: function previousVisibleSiblingNode() {\n            var context = this.hasParent() ? this.getParent().children : this._tree.nodes();\n            var i = _.findIndex(context, { id: this.id });\n            return _.findLast(_.slice(context, 0, i), function (node) {\n                return node.visible();\n            });\n        }\n\n        /**\n         * Iterate down node and any children.\n         *\n         * @category TreeNode\n         * @param {function} iteratee Iteratee function.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'recurseDown',\n        value: function recurseDown$$1(iteratee) {\n            recurseDown(this, iteratee);\n\n            return this;\n        }\n\n        /**\n         * Iterate up a node and its parents.\n         *\n         * @category TreeNode\n         * @param {function} iteratee Iteratee function.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'recurseUp',\n        value: function recurseUp(iteratee) {\n            var result = iteratee(this);\n\n            if (result !== false && this.hasParent()) {\n                this.getParent().recurseUp(iteratee);\n            }\n\n            return this;\n        }\n\n        /**\n         * Update the indeterminate state of this node by scanning states of children.\n         *\n         * True if some, but not all children are checked.\n         * False if no children are checked.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'refreshIndeterminateState',\n        value: function refreshIndeterminateState() {\n            var oldValue = this.indeterminate();\n            this.state('indeterminate', false);\n\n            if (this.hasChildren()) {\n                var childrenCount = this.children.length;\n                var indeterminate = 0;\n                var checked = 0;\n\n                this.children.each(function (n) {\n                    if (n.checked()) {\n                        checked++;\n                    }\n\n                    if (n.indeterminate()) {\n                        indeterminate++;\n                    }\n                });\n\n                // Set selected if all children are\n                if (checked === childrenCount) {\n                    baseStateChange('checked', true, 'checked', this);\n                } else {\n                    baseStateChange('checked', false, 'unchecked', this);\n                }\n\n                // Set indeterminate if any children are, or some children are selected\n                if (!this.checked()) {\n                    this.state('indeterminate', indeterminate > 0 || childrenCount > 0 && checked > 0 && checked < childrenCount);\n                }\n            }\n\n            if (this.hasParent()) {\n                this.getParent().refreshIndeterminateState();\n            }\n\n            if (oldValue !== this.state('indeterminate')) {\n                this.markDirty();\n            }\n\n            return this;\n        }\n\n        /**\n         * Remove all current children and re-execute a loadChildren call.\n         *\n         * @category TreeNode\n         * @return {Promise} Promise resolved on load.\n         */\n\n    }, {\n        key: 'reload',\n        value: function reload() {\n            var _this4 = this;\n\n            return new es6Promise_1(function (resolve, reject) {\n                if (!_this4.allowDynamicLoad()) {\n                    return reject(new Error('Node or tree does not support dynamic children.'));\n                }\n\n                // Reset children\n                _this4.children = true;\n\n                // Collapse\n                _this4.collapse();\n\n                // Load and the proxy the promise\n                _this4.loadChildren().then(resolve).catch(reject);\n            });\n        }\n\n        /**\n         * Remove a node from the tree.\n         *\n         * @category TreeNode\n         * @param {boolean} includeState Include itree.state object.\n         * @return {object} Removed tree node object.\n         */\n\n    }, {\n        key: 'remove',\n        value: function remove$$1() {\n            var includeState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n            // Cache parent before we remove the node\n            var parent = this.getParent();\n\n            // Remove self\n            this.context().remove(this);\n\n            // Refresh parent states\n            if (parent) {\n                parent.refreshIndeterminateState();\n                parent.markDirty();\n            }\n\n            var pagination = parent ? parent.pagination() : this._tree.pagination();\n            pagination.total--;\n\n            // Export/event\n            var exported = this.toObject(false, includeState);\n            this._tree.emit('node.removed', exported, parent);\n\n            this._tree.applyChanges();\n\n            return exported;\n        }\n\n        /**\n         * Get whether this node is soft-removed.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node soft-removed.\n         */\n\n    }, {\n        key: 'removed',\n        value: function removed() {\n            return this.state('removed');\n        }\n\n        /**\n         * Get whether this node has been rendered.\n         *\n         * Will be false if deferred rendering is enable and the node has\n         * not yet been loaded, or if a custom DOM renderer is used.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node rendered.\n         */\n\n    }, {\n        key: 'rendered',\n        value: function rendered() {\n            return this.state('rendered');\n        }\n\n        /**\n         * Restore state if soft-removed.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'restore',\n        value: function restore() {\n            return baseStateChange('removed', false, 'restored', this);\n        }\n\n        /**\n         * Select this node.\n         *\n         * @category TreeNode\n         * @param {boolean} shallow Skip auto-selecting children.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'select',\n        value: function select(shallow) {\n            if (!this.selected() && this.selectable()) {\n                // Batch selection changes\n                this._tree.batch();\n\n                if (this._tree.canAutoDeselect()) {\n                    var oldVal = this._tree.config.selection.require;\n                    this._tree.config.selection.require = false;\n                    this._tree.deselectDeep();\n                    this._tree.config.selection.require = oldVal;\n                }\n\n                // Will we apply this state change to our children?\n                var deep = !shallow && this._tree.config.selection.autoSelectChildren;\n\n                baseStateChange('selected', true, 'selected', this, deep);\n\n                // Cache as the last selected node\n                this._tree._lastSelectedNode = this;\n\n                // Mark hierarchy dirty and apply\n                this.markDirty();\n                this._tree.end();\n            }\n\n            return this;\n        }\n\n        /**\n         * Get weather node selectable.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node selectable.\n         */\n\n    }, {\n        key: 'selectable',\n        value: function selectable() {\n            var allow = this._tree.config.selection.allow(this);\n            return typeof allow === 'boolean' ? allow : this.state('selectable');\n        }\n\n        /**\n         * Get whether this node is selected.\n         *\n         * @category TreeNode\n         * @return {boolean} True if node selected.\n         */\n\n    }, {\n        key: 'selected',\n        value: function selected() {\n            return this.state('selected');\n        }\n\n        /**\n         * Set a root property on this node.\n         *\n         * @category TreeNode\n         * @param {string|number} property Property name.\n         * @param {*} value New value.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'set',\n        value: function set$$1(property, value) {\n            this[property] = value;\n            this.markDirty();\n\n            this._tree.applyChanges();\n\n            return this;\n        }\n\n        /**\n         * Show this node.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'show',\n        value: function show() {\n            return baseStateChange('hidden', false, 'shown', this);\n        }\n\n        /**\n         * Get or set a state value.\n         *\n         * This is a base method and will not invoke related changes, for example\n         * setting selected=false will not trigger any deselection logic.\n         *\n         * @category TreeNode\n         * @param {string} name Property name.\n         * @param {boolean} newVal New value, if setting.\n         * @return {boolean} Current value on read, old value on set.\n         */\n\n    }, {\n        key: 'state',\n        value: function state(name, newVal) {\n            var currentVal = this.itree.state[name];\n\n            if (typeof newVal !== 'undefined' && currentVal !== newVal) {\n                // Update values\n                this.itree.state[name] = newVal;\n\n                if (name !== 'rendered') {\n                    this.markDirty();\n                }\n\n                // Emit an event\n                this._tree.emit('node.state.changed', this, name, currentVal, newVal);\n            }\n\n            return currentVal;\n        }\n\n        /**\n         * Get or set multiple state values to a single value.\n         *\n         * @param {Array} names Property names.\n         * @param {boolean} newVal New value, if setting.\n         * @return {Array} Array of state booleans\n         */\n\n    }, {\n        key: 'states',\n        value: function states(names, newVal) {\n            var _this5 = this;\n\n            var results = [];\n\n            this._tree.batch();\n\n            _.each(names, function (name) {\n                results.push(_this5.state(name, newVal));\n            });\n\n            this._tree.end();\n\n            return results;\n        }\n\n        /**\n         * Swap position with the given node.\n         *\n         * @category TreeNode\n         * @param {TreeNode} node Node.\n         * @return {TreeNode} Node objects.\n         */\n\n    }, {\n        key: 'swap',\n        value: function swap(node) {\n            this.context().swap(this, node);\n\n            return this;\n        }\n\n        /**\n         * Mark this node as \"removed\" without actually removing it.\n         *\n         * Expand/show methods will never reveal this node until restored.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'softRemove',\n        value: function softRemove() {\n            return baseStateChange('removed', true, 'softremoved', this, 'softRemove');\n        }\n\n        /**\n         * Toggle checked state.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'toggleCheck',\n        value: function toggleCheck() {\n            return this.checked() ? this.uncheck() : this.check();\n        }\n\n        /**\n         * Toggle collapsed state.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'toggleCollapse',\n        value: function toggleCollapse() {\n            return this.collapsed() ? this.expand() : this.collapse();\n        }\n\n        /**\n         * Toggle editing state.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'toggleEditing',\n        value: function toggleEditing() {\n            this.state('editing', !this.state('editing'));\n\n            this.markDirty();\n            this._tree.applyChanges();\n\n            return this;\n        }\n\n        /**\n         * Toggle selected state.\n         *\n         * @category TreeNode\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'toggleSelect',\n        value: function toggleSelect() {\n            return this.selected() ? this.deselect() : this.select();\n        }\n\n        /**\n         * Export this node as a native Object.\n         *\n         * @category TreeNode\n         * @param {boolean} excludeChildren Exclude children.\n         * @param {boolean} includeState Include itree.state object.\n         * @return {object} Node object.\n         */\n\n    }, {\n        key: 'toObject',\n        value: function toObject() {\n            var _this6 = this;\n\n            var excludeChildren = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n            var includeState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n            var exported = {};\n\n            var keys = _.pull(Object.keys(this), '_tree', 'children', 'itree');\n\n            // Map keys\n            _.each(keys, function (keyName) {\n                exported[keyName] = _this6[keyName];\n            });\n\n            // Copy over whitelisted itree data\n            // Excludes internal-use junk like parent, dirty, ref\n            var itree = exported.itree = {};\n            itree.a = this.itree.a;\n            itree.icon = this.itree.icon;\n            itree.li = this.itree.li;\n\n            if (includeState) {\n                itree.state = this.itree.state;\n            }\n\n            // If including children, export them\n            if (!excludeChildren && this.hasChildren() && _.isFunction(this.children.toArray)) {\n                exported.children = this.children.toArray();\n            }\n\n            return exported;\n        }\n\n        /**\n         * Get the text content of this tree node.\n         *\n         * @return {string} Text content.\n         */\n\n    }, {\n        key: 'toString',\n        value: function toString() {\n            return this.text;\n        }\n\n        /**\n         * Get the tree this node ultimately belongs to.\n         *\n         * @category TreeNode\n         * @return {InspireTree} Tree instance.\n         */\n\n    }, {\n        key: 'tree',\n        value: function tree() {\n            return this.context().tree();\n        }\n\n        /**\n         * Uncheck this node.\n         *\n         * @category TreeNode\n         * @param {boolean} shallow Skip auto-unchecking children.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'uncheck',\n        value: function uncheck(shallow) {\n            this._tree.batch();\n\n            // Will we apply this state change to our children?\n            var deep = !shallow && this._tree.config.checkbox.autoCheckChildren;\n\n            baseStateChange('checked', false, 'unchecked', this, deep);\n\n            // Reset indeterminate state\n            this.state('indeterminate', false);\n\n            // Refresh our parent\n            if (this.hasParent()) {\n                this.getParent().refreshIndeterminateState();\n            }\n\n            this._tree.end();\n\n            return this;\n        }\n    }, {\n        key: 'visible',\n\n\n        /**\n         * Get whether node is visible to a user. Returns false\n         * if it's hidden, or if any ancestor is hidden or collapsed.\n         *\n         * @category TreeNode\n         * @return {boolean} Whether visible.\n         */\n        value: function visible() {\n            var isVisible = true;\n            if (this.hidden() || this.removed() || this._tree.usesNativeDOM && !this.rendered()) {\n                isVisible = false;\n            } else if (this.hasParent()) {\n                if (this.getParent().collapsed()) {\n                    isVisible = false;\n                } else {\n                    isVisible = this.getParent().visible();\n                }\n            } else {\n                isVisible = true;\n            }\n\n            return isVisible;\n        }\n    }]);\n    return TreeNode;\n}();\n\n/**\n * Parse a raw object into a TreeNode used within a tree.\n *\n * Note: Uses native js over lodash where performance\n * benefits most, since this handles every node.\n *\n * @private\n * @param {object} tree Tree instance.\n * @param {object} object Source object\n * @param {object} parent Pointer to parent object.\n * @return {object} Final object\n */\nfunction objectToNode(tree, object, parent) {\n    // Create or type-ensure ID\n    object.id = object.id || v4_1();\n    if (typeof object.id !== 'string' && typeof object.id !== 'number') {\n        object.id = object.id.toString();\n    }\n\n    // High-performance default assignments\n    var itree = object.itree = object.itree || {};\n    itree.icon = itree.icon || false;\n    itree.dirty = false;\n\n    var li = itree.li = itree.li || {};\n    li.attributes = li.attributes || {};\n\n    var a = itree.a = itree.a || {};\n    a.attributes = a.attributes || {};\n\n    var state = itree.state = itree.state || {};\n\n    // Enabled by default\n    state.collapsed = typeof state.collapsed === 'boolean' ? state.collapsed : tree.defaultState.collapsed;\n    state.selectable = typeof state.selectable === 'boolean' ? state.selectable : tree.defaultState.selectable;\n    state.draggable = typeof state.draggable === 'boolean' ? state.draggable : tree.defaultState.draggable;\n    state['drop-target'] = typeof state['drop-target'] === 'boolean' ? state['drop-target'] : tree.defaultState['drop-target'];\n\n    // Disabled by default\n    state.checked = typeof state.checked === 'boolean' ? state.checked : false;\n    state.editable = typeof state.editable === 'boolean' ? state.editable : tree.defaultState.editable;\n    state.editing = typeof state.editing === 'boolean' ? state.editing : tree.defaultState.editing;\n    state.focused = state.focused || tree.defaultState.focused;\n    state.hidden = state.hidden || tree.defaultState.hidden;\n    state.indeterminate = state.indeterminate || tree.defaultState.indeterminate;\n    state.loading = state.loading || tree.defaultState.loading;\n    state.removed = state.removed || tree.defaultState.removed;\n    state.rendered = state.rendered || tree.defaultState.rendered;\n    state.selected = state.selected || tree.defaultState.selected;\n\n    // Save parent, if any.\n    object.itree.parent = parent;\n\n    // Wrap\n    object = _.assign(new TreeNode(tree), object);\n\n    if (_.isArrayLike(object.children)) {\n        object.children = collectionToModel(tree, object.children, object);\n    }\n\n    // Fire events for pre-set states, if enabled\n    if (tree.allowsLoadEvents) {\n        _.each(tree.config.allowLoadEvents, function (eventName) {\n            if (state[eventName]) {\n                tree.emit('node.' + eventName, object, true);\n            }\n        });\n    }\n\n    return object;\n}\n\n/**\n * Parses a raw collection of objects into a model used\n * within a tree. Adds state and other internal properties.\n *\n * @private\n * @param {object} tree Tree instance.\n * @param {array} array Array of nodes\n * @param {object} parent Pointer to parent object\n * @return {array|object} Object model.\n */\nfunction collectionToModel(tree, array, parent) {\n    var collection = new TreeNodes(tree);\n\n    // Sort\n    if (tree.config.sort) {\n        array = _.sortBy(array, tree.config.sort);\n    }\n\n    _.each(array, function (node) {\n        collection.push(objectToNode(tree, node, parent));\n    });\n\n    collection._context = parent;\n\n    return collection;\n}\n\nvar eventemitter2 = createCommonjsModule(function (module, exports) {\n/*!\r\n * EventEmitter2\r\n * https://github.com/hij1nx/EventEmitter2\r\n *\r\n * Copyright (c) 2013 hij1nx\r\n * Licensed under the MIT license.\r\n */\r\n!function(undefined) {\r\n\r\n  var isArray$$1 = Array.isArray ? Array.isArray : function _isArray(obj) {\r\n    return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n  };\r\n  var defaultMaxListeners = 10;\r\n\r\n  function init() {\r\n    this._events = {};\r\n    if (this._conf) {\r\n      configure.call(this, this._conf);\r\n    }\r\n  }\r\n\r\n  function configure(conf) {\r\n    if (conf) {\r\n      this._conf = conf;\r\n\r\n      conf.delimiter && (this.delimiter = conf.delimiter);\r\n      this._maxListeners = conf.maxListeners !== undefined ? conf.maxListeners : defaultMaxListeners;\r\n\r\n      conf.wildcard && (this.wildcard = conf.wildcard);\r\n      conf.newListener && (this.newListener = conf.newListener);\r\n      conf.verboseMemoryLeak && (this.verboseMemoryLeak = conf.verboseMemoryLeak);\r\n\r\n      if (this.wildcard) {\r\n        this.listenerTree = {};\r\n      }\r\n    } else {\r\n      this._maxListeners = defaultMaxListeners;\r\n    }\r\n  }\r\n\r\n  function logPossibleMemoryLeak(count, eventName) {\r\n    var errorMsg = '(node) warning: possible EventEmitter memory ' +\r\n        'leak detected. ' + count + ' listeners added. ' +\r\n        'Use emitter.setMaxListeners() to increase limit.';\r\n\r\n    if(this.verboseMemoryLeak){\r\n      errorMsg += ' Event name: ' + eventName + '.';\r\n    }\r\n\r\n    if(typeof process !== 'undefined' && process.emitWarning){\r\n      var e = new Error(errorMsg);\r\n      e.name = 'MaxListenersExceededWarning';\r\n      e.emitter = this;\r\n      e.count = count;\r\n      process.emitWarning(e);\r\n    } else {\r\n      console.error(errorMsg);\r\n\r\n      if (console.trace){\r\n        console.trace();\r\n      }\r\n    }\r\n  }\r\n\r\n  function EventEmitter(conf) {\r\n    this._events = {};\r\n    this.newListener = false;\r\n    this.verboseMemoryLeak = false;\r\n    configure.call(this, conf);\r\n  }\r\n  EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property\r\n\r\n  //\r\n  // Attention, function return type now is array, always !\r\n  // It has zero elements if no any matches found and one or more\r\n  // elements (leafs) if there are matches\r\n  //\r\n  function searchListenerTree(handlers, type, tree, i) {\r\n    if (!tree) {\r\n      return [];\r\n    }\r\n    var listeners=[], leaf, len, branch, xTree, xxTree, isolatedBranch, endReached,\r\n        typeLength = type.length, currentType = type[i], nextType = type[i+1];\r\n    if (i === typeLength && tree._listeners) {\r\n      //\r\n      // If at the end of the event(s) list and the tree has listeners\r\n      // invoke those listeners.\r\n      //\r\n      if (typeof tree._listeners === 'function') {\r\n        handlers && handlers.push(tree._listeners);\r\n        return [tree];\r\n      } else {\r\n        for (leaf = 0, len = tree._listeners.length; leaf < len; leaf++) {\r\n          handlers && handlers.push(tree._listeners[leaf]);\r\n        }\r\n        return [tree];\r\n      }\r\n    }\r\n\r\n    if ((currentType === '*' || currentType === '**') || tree[currentType]) {\r\n      //\r\n      // If the event emitted is '*' at this part\r\n      // or there is a concrete match at this patch\r\n      //\r\n      if (currentType === '*') {\r\n        for (branch in tree) {\r\n          if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\r\n            listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+1));\r\n          }\r\n        }\r\n        return listeners;\r\n      } else if(currentType === '**') {\r\n        endReached = (i+1 === typeLength || (i+2 === typeLength && nextType === '*'));\r\n        if(endReached && tree._listeners) {\r\n          // The next element has a _listeners, add it to the handlers.\r\n          listeners = listeners.concat(searchListenerTree(handlers, type, tree, typeLength));\r\n        }\r\n\r\n        for (branch in tree) {\r\n          if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {\r\n            if(branch === '*' || branch === '**') {\r\n              if(tree[branch]._listeners && !endReached) {\r\n                listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], typeLength));\r\n              }\r\n              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\r\n            } else if(branch === nextType) {\r\n              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+2));\r\n            } else {\r\n              // No match on this one, shift into the tree but not in the type array.\r\n              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));\r\n            }\r\n          }\r\n        }\r\n        return listeners;\r\n      }\r\n\r\n      listeners = listeners.concat(searchListenerTree(handlers, type, tree[currentType], i+1));\r\n    }\r\n\r\n    xTree = tree['*'];\r\n    if (xTree) {\r\n      //\r\n      // If the listener tree will allow any match for this part,\r\n      // then recursively explore all branches of the tree\r\n      //\r\n      searchListenerTree(handlers, type, xTree, i+1);\r\n    }\r\n\r\n    xxTree = tree['**'];\r\n    if(xxTree) {\r\n      if(i < typeLength) {\r\n        if(xxTree._listeners) {\r\n          // If we have a listener on a '**', it will catch all, so add its handler.\r\n          searchListenerTree(handlers, type, xxTree, typeLength);\r\n        }\r\n\r\n        // Build arrays of matching next branches and others.\r\n        for(branch in xxTree) {\r\n          if(branch !== '_listeners' && xxTree.hasOwnProperty(branch)) {\r\n            if(branch === nextType) {\r\n              // We know the next element will match, so jump twice.\r\n              searchListenerTree(handlers, type, xxTree[branch], i+2);\r\n            } else if(branch === currentType) {\r\n              // Current node matches, move into the tree.\r\n              searchListenerTree(handlers, type, xxTree[branch], i+1);\r\n            } else {\r\n              isolatedBranch = {};\r\n              isolatedBranch[branch] = xxTree[branch];\r\n              searchListenerTree(handlers, type, { '**': isolatedBranch }, i+1);\r\n            }\r\n          }\r\n        }\r\n      } else if(xxTree._listeners) {\r\n        // We have reached the end and still on a '**'\r\n        searchListenerTree(handlers, type, xxTree, typeLength);\r\n      } else if(xxTree['*'] && xxTree['*']._listeners) {\r\n        searchListenerTree(handlers, type, xxTree['*'], typeLength);\r\n      }\r\n    }\r\n\r\n    return listeners;\r\n  }\r\n\r\n  function growListenerTree(type, listener) {\r\n\r\n    type = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n\r\n    //\r\n    // Looks for two consecutive '**', if so, don't add the event at all.\r\n    //\r\n    for(var i = 0, len = type.length; i+1 < len; i++) {\r\n      if(type[i] === '**' && type[i+1] === '**') {\r\n        return;\r\n      }\r\n    }\r\n\r\n    var tree = this.listenerTree;\r\n    var name = type.shift();\r\n\r\n    while (name !== undefined) {\r\n\r\n      if (!tree[name]) {\r\n        tree[name] = {};\r\n      }\r\n\r\n      tree = tree[name];\r\n\r\n      if (type.length === 0) {\r\n\r\n        if (!tree._listeners) {\r\n          tree._listeners = listener;\r\n        }\r\n        else {\r\n          if (typeof tree._listeners === 'function') {\r\n            tree._listeners = [tree._listeners];\r\n          }\r\n\r\n          tree._listeners.push(listener);\r\n\r\n          if (\r\n            !tree._listeners.warned &&\r\n            this._maxListeners > 0 &&\r\n            tree._listeners.length > this._maxListeners\r\n          ) {\r\n            tree._listeners.warned = true;\r\n            logPossibleMemoryLeak.call(this, tree._listeners.length, name);\r\n          }\r\n        }\r\n        return true;\r\n      }\r\n      name = type.shift();\r\n    }\r\n    return true;\r\n  }\r\n\r\n  // By default EventEmitters will print a warning if more than\r\n  // 10 listeners are added to it. This is a useful default which\r\n  // helps finding memory leaks.\r\n  //\r\n  // Obviously not all Emitters should be limited to 10. This function allows\r\n  // that to be increased. Set to zero for unlimited.\r\n\r\n  EventEmitter.prototype.delimiter = '.';\r\n\r\n  EventEmitter.prototype.setMaxListeners = function(n) {\r\n    if (n !== undefined) {\r\n      this._maxListeners = n;\r\n      if (!this._conf) this._conf = {};\r\n      this._conf.maxListeners = n;\r\n    }\r\n  };\r\n\r\n  EventEmitter.prototype.event = '';\r\n\r\n\r\n  EventEmitter.prototype.once = function(event, fn) {\r\n    return this._once(event, fn, false);\r\n  };\r\n\r\n  EventEmitter.prototype.prependOnceListener = function(event, fn) {\r\n    return this._once(event, fn, true);\r\n  };\r\n\r\n  EventEmitter.prototype._once = function(event, fn, prepend) {\r\n    this._many(event, 1, fn, prepend);\r\n    return this;\r\n  };\r\n\r\n  EventEmitter.prototype.many = function(event, ttl, fn) {\r\n    return this._many(event, ttl, fn, false);\r\n  };\r\n\r\n  EventEmitter.prototype.prependMany = function(event, ttl, fn) {\r\n    return this._many(event, ttl, fn, true);\r\n  };\r\n\r\n  EventEmitter.prototype._many = function(event, ttl, fn, prepend) {\r\n    var self = this;\r\n\r\n    if (typeof fn !== 'function') {\r\n      throw new Error('many only accepts instances of Function');\r\n    }\r\n\r\n    function listener() {\r\n      if (--ttl === 0) {\r\n        self.off(event, listener);\r\n      }\r\n      return fn.apply(this, arguments);\r\n    }\r\n\r\n    listener._origin = fn;\r\n\r\n    this._on(event, listener, prepend);\r\n\r\n    return self;\r\n  };\r\n\r\n  EventEmitter.prototype.emit = function() {\r\n\r\n    this._events || init.call(this);\r\n\r\n    var type = arguments[0];\r\n\r\n    if (type === 'newListener' && !this.newListener) {\r\n      if (!this._events.newListener) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    var al = arguments.length;\r\n    var args,l,i,j;\r\n    var handler;\r\n\r\n    if (this._all && this._all.length) {\r\n      handler = this._all.slice();\r\n      if (al > 3) {\r\n        args = new Array(al);\r\n        for (j = 0; j < al; j++) args[j] = arguments[j];\r\n      }\r\n\r\n      for (i = 0, l = handler.length; i < l; i++) {\r\n        this.event = type;\r\n        switch (al) {\r\n        case 1:\r\n          handler[i].call(this, type);\r\n          break;\r\n        case 2:\r\n          handler[i].call(this, type, arguments[1]);\r\n          break;\r\n        case 3:\r\n          handler[i].call(this, type, arguments[1], arguments[2]);\r\n          break;\r\n        default:\r\n          handler[i].apply(this, args);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.wildcard) {\r\n      handler = [];\r\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n      searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\r\n    } else {\r\n      handler = this._events[type];\r\n      if (typeof handler === 'function') {\r\n        this.event = type;\r\n        switch (al) {\r\n        case 1:\r\n          handler.call(this);\r\n          break;\r\n        case 2:\r\n          handler.call(this, arguments[1]);\r\n          break;\r\n        case 3:\r\n          handler.call(this, arguments[1], arguments[2]);\r\n          break;\r\n        default:\r\n          args = new Array(al - 1);\r\n          for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n          handler.apply(this, args);\r\n        }\r\n        return true;\r\n      } else if (handler) {\r\n        // need to make copy of handlers because list can change in the middle\r\n        // of emit call\r\n        handler = handler.slice();\r\n      }\r\n    }\r\n\r\n    if (handler && handler.length) {\r\n      if (al > 3) {\r\n        args = new Array(al - 1);\r\n        for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n      }\r\n      for (i = 0, l = handler.length; i < l; i++) {\r\n        this.event = type;\r\n        switch (al) {\r\n        case 1:\r\n          handler[i].call(this);\r\n          break;\r\n        case 2:\r\n          handler[i].call(this, arguments[1]);\r\n          break;\r\n        case 3:\r\n          handler[i].call(this, arguments[1], arguments[2]);\r\n          break;\r\n        default:\r\n          handler[i].apply(this, args);\r\n        }\r\n      }\r\n      return true;\r\n    } else if (!this._all && type === 'error') {\r\n      if (arguments[1] instanceof Error) {\r\n        throw arguments[1]; // Unhandled 'error' event\r\n      } else {\r\n        throw new Error(\"Uncaught, unspecified 'error' event.\");\r\n      }\r\n      return false;\r\n    }\r\n\r\n    return !!this._all;\r\n  };\r\n\r\n  EventEmitter.prototype.emitAsync = function() {\r\n\r\n    this._events || init.call(this);\r\n\r\n    var type = arguments[0];\r\n\r\n    if (type === 'newListener' && !this.newListener) {\r\n        if (!this._events.newListener) { return Promise.resolve([false]); }\r\n    }\r\n\r\n    var promises= [];\r\n\r\n    var al = arguments.length;\r\n    var args,l,i,j;\r\n    var handler;\r\n\r\n    if (this._all) {\r\n      if (al > 3) {\r\n        args = new Array(al);\r\n        for (j = 1; j < al; j++) args[j] = arguments[j];\r\n      }\r\n      for (i = 0, l = this._all.length; i < l; i++) {\r\n        this.event = type;\r\n        switch (al) {\r\n        case 1:\r\n          promises.push(this._all[i].call(this, type));\r\n          break;\r\n        case 2:\r\n          promises.push(this._all[i].call(this, type, arguments[1]));\r\n          break;\r\n        case 3:\r\n          promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));\r\n          break;\r\n        default:\r\n          promises.push(this._all[i].apply(this, args));\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.wildcard) {\r\n      handler = [];\r\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n      searchListenerTree.call(this, handler, ns, this.listenerTree, 0);\r\n    } else {\r\n      handler = this._events[type];\r\n    }\r\n\r\n    if (typeof handler === 'function') {\r\n      this.event = type;\r\n      switch (al) {\r\n      case 1:\r\n        promises.push(handler.call(this));\r\n        break;\r\n      case 2:\r\n        promises.push(handler.call(this, arguments[1]));\r\n        break;\r\n      case 3:\r\n        promises.push(handler.call(this, arguments[1], arguments[2]));\r\n        break;\r\n      default:\r\n        args = new Array(al - 1);\r\n        for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n        promises.push(handler.apply(this, args));\r\n      }\r\n    } else if (handler && handler.length) {\r\n      handler = handler.slice();\r\n      if (al > 3) {\r\n        args = new Array(al - 1);\r\n        for (j = 1; j < al; j++) args[j - 1] = arguments[j];\r\n      }\r\n      for (i = 0, l = handler.length; i < l; i++) {\r\n        this.event = type;\r\n        switch (al) {\r\n        case 1:\r\n          promises.push(handler[i].call(this));\r\n          break;\r\n        case 2:\r\n          promises.push(handler[i].call(this, arguments[1]));\r\n          break;\r\n        case 3:\r\n          promises.push(handler[i].call(this, arguments[1], arguments[2]));\r\n          break;\r\n        default:\r\n          promises.push(handler[i].apply(this, args));\r\n        }\r\n      }\r\n    } else if (!this._all && type === 'error') {\r\n      if (arguments[1] instanceof Error) {\r\n        return Promise.reject(arguments[1]); // Unhandled 'error' event\r\n      } else {\r\n        return Promise.reject(\"Uncaught, unspecified 'error' event.\");\r\n      }\r\n    }\r\n\r\n    return Promise.all(promises);\r\n  };\r\n\r\n  EventEmitter.prototype.on = function(type, listener) {\r\n    return this._on(type, listener, false);\r\n  };\r\n\r\n  EventEmitter.prototype.prependListener = function(type, listener) {\r\n    return this._on(type, listener, true);\r\n  };\r\n\r\n  EventEmitter.prototype.onAny = function(fn) {\r\n    return this._onAny(fn, false);\r\n  };\r\n\r\n  EventEmitter.prototype.prependAny = function(fn) {\r\n    return this._onAny(fn, true);\r\n  };\r\n\r\n  EventEmitter.prototype.addListener = EventEmitter.prototype.on;\r\n\r\n  EventEmitter.prototype._onAny = function(fn, prepend){\r\n    if (typeof fn !== 'function') {\r\n      throw new Error('onAny only accepts instances of Function');\r\n    }\r\n\r\n    if (!this._all) {\r\n      this._all = [];\r\n    }\r\n\r\n    // Add the function to the event listener collection.\r\n    if(prepend){\r\n      this._all.unshift(fn);\r\n    }else{\r\n      this._all.push(fn);\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  EventEmitter.prototype._on = function(type, listener, prepend) {\r\n    if (typeof type === 'function') {\r\n      this._onAny(type, listener);\r\n      return this;\r\n    }\r\n\r\n    if (typeof listener !== 'function') {\r\n      throw new Error('on only accepts instances of Function');\r\n    }\r\n    this._events || init.call(this);\r\n\r\n    // To avoid recursion in the case that type == \"newListeners\"! Before\r\n    // adding it to the listeners, first emit \"newListeners\".\r\n    this.emit('newListener', type, listener);\r\n\r\n    if (this.wildcard) {\r\n      growListenerTree.call(this, type, listener);\r\n      return this;\r\n    }\r\n\r\n    if (!this._events[type]) {\r\n      // Optimize the case of one listener. Don't need the extra array object.\r\n      this._events[type] = listener;\r\n    }\r\n    else {\r\n      if (typeof this._events[type] === 'function') {\r\n        // Change to array.\r\n        this._events[type] = [this._events[type]];\r\n      }\r\n\r\n      // If we've already got an array, just add\r\n      if(prepend){\r\n        this._events[type].unshift(listener);\r\n      }else{\r\n        this._events[type].push(listener);\r\n      }\r\n\r\n      // Check for listener leak\r\n      if (\r\n        !this._events[type].warned &&\r\n        this._maxListeners > 0 &&\r\n        this._events[type].length > this._maxListeners\r\n      ) {\r\n        this._events[type].warned = true;\r\n        logPossibleMemoryLeak.call(this, this._events[type].length, type);\r\n      }\r\n    }\r\n\r\n    return this;\r\n  };\r\n\r\n  EventEmitter.prototype.off = function(type, listener) {\r\n    if (typeof listener !== 'function') {\r\n      throw new Error('removeListener only takes instances of Function');\r\n    }\r\n\r\n    var handlers,leafs=[];\r\n\r\n    if(this.wildcard) {\r\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n      leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\r\n    }\r\n    else {\r\n      // does not use listeners(), so no side effect of creating _events[type]\r\n      if (!this._events[type]) return this;\r\n      handlers = this._events[type];\r\n      leafs.push({_listeners:handlers});\r\n    }\r\n\r\n    for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {\r\n      var leaf = leafs[iLeaf];\r\n      handlers = leaf._listeners;\r\n      if (isArray$$1(handlers)) {\r\n\r\n        var position = -1;\r\n\r\n        for (var i = 0, length = handlers.length; i < length; i++) {\r\n          if (handlers[i] === listener ||\r\n            (handlers[i].listener && handlers[i].listener === listener) ||\r\n            (handlers[i]._origin && handlers[i]._origin === listener)) {\r\n            position = i;\r\n            break;\r\n          }\r\n        }\r\n\r\n        if (position < 0) {\r\n          continue;\r\n        }\r\n\r\n        if(this.wildcard) {\r\n          leaf._listeners.splice(position, 1);\r\n        }\r\n        else {\r\n          this._events[type].splice(position, 1);\r\n        }\r\n\r\n        if (handlers.length === 0) {\r\n          if(this.wildcard) {\r\n            delete leaf._listeners;\r\n          }\r\n          else {\r\n            delete this._events[type];\r\n          }\r\n        }\r\n\r\n        this.emit(\"removeListener\", type, listener);\r\n\r\n        return this;\r\n      }\r\n      else if (handlers === listener ||\r\n        (handlers.listener && handlers.listener === listener) ||\r\n        (handlers._origin && handlers._origin === listener)) {\r\n        if(this.wildcard) {\r\n          delete leaf._listeners;\r\n        }\r\n        else {\r\n          delete this._events[type];\r\n        }\r\n\r\n        this.emit(\"removeListener\", type, listener);\r\n      }\r\n    }\r\n\r\n    function recursivelyGarbageCollect(root) {\r\n      if (root === undefined) {\r\n        return;\r\n      }\r\n      var keys = Object.keys(root);\r\n      for (var i in keys) {\r\n        var key = keys[i];\r\n        var obj = root[key];\r\n        if ((obj instanceof Function) || (typeof obj !== \"object\") || (obj === null))\r\n          continue;\r\n        if (Object.keys(obj).length > 0) {\r\n          recursivelyGarbageCollect(root[key]);\r\n        }\r\n        if (Object.keys(obj).length === 0) {\r\n          delete root[key];\r\n        }\r\n      }\r\n    }\r\n    recursivelyGarbageCollect(this.listenerTree);\r\n\r\n    return this;\r\n  };\r\n\r\n  EventEmitter.prototype.offAny = function(fn) {\r\n    var i = 0, l = 0, fns;\r\n    if (fn && this._all && this._all.length > 0) {\r\n      fns = this._all;\r\n      for(i = 0, l = fns.length; i < l; i++) {\r\n        if(fn === fns[i]) {\r\n          fns.splice(i, 1);\r\n          this.emit(\"removeListenerAny\", fn);\r\n          return this;\r\n        }\r\n      }\r\n    } else {\r\n      fns = this._all;\r\n      for(i = 0, l = fns.length; i < l; i++)\r\n        this.emit(\"removeListenerAny\", fns[i]);\r\n      this._all = [];\r\n    }\r\n    return this;\r\n  };\r\n\r\n  EventEmitter.prototype.removeListener = EventEmitter.prototype.off;\r\n\r\n  EventEmitter.prototype.removeAllListeners = function(type) {\r\n    if (arguments.length === 0) {\r\n      !this._events || init.call(this);\r\n      return this;\r\n    }\r\n\r\n    if (this.wildcard) {\r\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n      var leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);\r\n\r\n      for (var iLeaf=0; iLeaf<leafs.length; iLeaf++) {\r\n        var leaf = leafs[iLeaf];\r\n        leaf._listeners = null;\r\n      }\r\n    }\r\n    else if (this._events) {\r\n      this._events[type] = null;\r\n    }\r\n    return this;\r\n  };\r\n\r\n  EventEmitter.prototype.listeners = function(type) {\r\n    if (this.wildcard) {\r\n      var handlers = [];\r\n      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();\r\n      searchListenerTree.call(this, handlers, ns, this.listenerTree, 0);\r\n      return handlers;\r\n    }\r\n\r\n    this._events || init.call(this);\r\n\r\n    if (!this._events[type]) this._events[type] = [];\r\n    if (!isArray$$1(this._events[type])) {\r\n      this._events[type] = [this._events[type]];\r\n    }\r\n    return this._events[type];\r\n  };\r\n\r\n  EventEmitter.prototype.eventNames = function(){\r\n    return Object.keys(this._events);\r\n  };\r\n\r\n  EventEmitter.prototype.listenerCount = function(type) {\r\n    return this.listeners(type).length;\r\n  };\r\n\r\n  EventEmitter.prototype.listenersAny = function() {\r\n\r\n    if(this._all) {\r\n      return this._all;\r\n    }\r\n    else {\r\n      return [];\r\n    }\r\n\r\n  };\r\n\r\n  if (typeof undefined === 'function' && undefined.amd) {\r\n     // AMD. Register as an anonymous module.\r\n    undefined(function() {\r\n      return EventEmitter;\r\n    });\r\n  } else {\r\n    // CommonJS\r\n    module.exports = EventEmitter;\r\n  }\r\n}();\n});\n\nvar eventemitter2_1 = eventemitter2.EventEmitter2;\n\n// Libs\n\n/**\n * Maps a method to the root TreeNodes collection.\n *\n * @private\n * @param {InspireTree} tree Tree instance.\n * @param {string} method Method name.\n * @param {arguments} args Proxied arguments.\n * @return {mixed} Proxied return value.\n */\nfunction _map(tree, method, args) {\n    return tree.model[method].apply(tree.model, args);\n}\n\n/**\n * Represents a singe tree instance.\n *\n * @category Tree\n * @return {InspireTree} Tree instance.\n */\n\nvar InspireTree = function (_EventEmitter) {\n    inherits(InspireTree, _EventEmitter);\n\n    function InspireTree(opts) {\n        classCallCheck(this, InspireTree);\n\n        var _this = possibleConstructorReturn(this, (InspireTree.__proto__ || Object.getPrototypeOf(InspireTree)).call(this));\n\n        var tree = _this;\n\n        // Init properties\n        tree._lastSelectedNode;\n        tree._muted = false;\n        tree.allowsLoadEvents = false;\n        tree.batching = 0;\n        tree.id = v4_1();\n        tree.initialized = false;\n        tree.isDynamic = false;\n        tree.opts = opts;\n        tree.preventDeselection = false;\n\n        // Assign defaults\n        tree.config = _.defaultsDeep({}, opts, {\n            allowLoadEvents: [],\n            checkbox: {\n                autoCheckChildren: true\n            },\n            contextMenu: false,\n            data: false,\n            editable: false,\n            editing: {\n                add: false,\n                edit: false,\n                remove: false\n            },\n            nodes: {\n                resetStateOnRestore: true\n            },\n            pagination: {\n                limit: -1\n            },\n            renderer: false,\n            search: {\n                matcher: false,\n                matchProcessor: false\n            },\n            selection: {\n                allow: _.noop,\n                autoDeselect: true,\n                autoSelectChildren: false,\n                disableDirectDeselection: false,\n                mode: 'default',\n                multiple: false,\n                require: false\n            },\n            showCheckboxes: false,\n            sort: false\n        });\n\n        // If checkbox mode, we must force auto-selecting children\n        if (tree.config.selection.mode === 'checkbox') {\n            tree.config.selection.autoSelectChildren = true;\n\n            // In checkbox mode, checked=selected\n            tree.on('node.checked', function (node) {\n                if (!node.selected()) {\n                    node.select(true);\n                }\n            });\n\n            tree.on('node.selected', function (node) {\n                if (!node.checked()) {\n                    node.check(true);\n                }\n            });\n\n            tree.on('node.unchecked', function (node) {\n                if (node.selected()) {\n                    node.deselect(true);\n                }\n            });\n\n            tree.on('node.deselected', function (node) {\n                if (node.checked()) {\n                    node.uncheck(true);\n                }\n            });\n        }\n\n        // If auto-selecting children, we must force multiselect\n        if (tree.config.selection.autoSelectChildren) {\n            tree.config.selection.multiple = true;\n            tree.config.selection.autoDeselect = false;\n        }\n\n        // Treat editable as full edit mode\n        if (opts.editable && !opts.editing) {\n            tree.config.editing.add = true;\n            tree.config.editing.edit = true;\n            tree.config.editing.remove = true;\n        }\n\n        // Support simple config for search\n        if (_.isFunction(opts.search)) {\n            tree.config.search = {\n                matcher: opts.search,\n                matchProcessor: false\n            };\n        }\n\n        // Init the default state for nodes\n        tree.defaultState = {\n            collapsed: true,\n            editable: _.get(tree, 'config.editing.edit'),\n            editing: false,\n            draggable: true,\n            'drop-target': true,\n            focused: false,\n            hidden: false,\n            indeterminate: false,\n            loading: false,\n            matched: false,\n            removed: false,\n            rendered: false,\n            selectable: true,\n            selected: false\n        };\n\n        // Cache some configs\n        tree.allowsLoadEvents = _.isArray(tree.config.allowLoadEvents) && tree.config.allowLoadEvents.length > 0;\n        tree.isDynamic = _.isFunction(tree.config.data);\n\n        // Override emitter so we can better control flow\n        var emit = tree.emit;\n        tree.emit = function (eventName) {\n            if (!tree.isEventMuted(eventName)) {\n                // Duck-type for a DOM event\n                if (_.isFunction(_.get(arguments, '[1].preventDefault'))) {\n                    var event = arguments[1];\n                    event.treeDefaultPrevented = false;\n                    event.preventTreeDefault = function () {\n                        event.treeDefaultPrevented = true;\n                    };\n                }\n\n                emit.apply(tree, arguments);\n            }\n        };\n\n        // Init the model\n        tree.model = new TreeNodes(tree);\n\n        // Load initial user data\n        if (tree.config.data) {\n            tree.load(tree.config.data);\n        }\n\n        tree.initialized = true;\n        return _this;\n    }\n\n    /**\n     * Adds a new node. If a sort\n     * method is configured, the node will be added\n     * in the appropriate order.\n     *\n     * @category Tree\n     * @param {object} node Node\n     * @return {TreeNode} Node object.\n     */\n\n\n    createClass(InspireTree, [{\n        key: 'addNode',\n        value: function addNode() {\n            return _map(this, 'addNode', arguments);\n        }\n\n        /**\n         * Add nodes.\n         *\n         * @category Tree\n         * @param {array} nodes Array of node objects.\n         * @return {TreeNodes} Added node objects.\n         */\n\n    }, {\n        key: 'addNodes',\n        value: function addNodes(nodes) {\n            var _this2 = this;\n\n            this.batch();\n\n            var newNodes = new TreeNodes(this);\n            _.each(nodes, function (node) {\n                newNodes.push(_this2.addNode(node));\n            });\n\n            this.end();\n\n            return newNodes;\n        }\n\n        /**\n         * Release pending data changes to any listeners.\n         *\n         * Will skip rendering as long as any calls\n         * to `batch` have yet to be resolved,\n         *\n         * @category Tree\n         * @private\n         * @return {void}\n         */\n\n    }, {\n        key: 'applyChanges',\n        value: function applyChanges() {\n            // Never rerender when until batch complete\n            if (this.batching > 0) {\n                return;\n            }\n\n            this.emit('changes.applied');\n        }\n\n        /**\n         * Query for all available nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'available',\n        value: function available() {\n            return _map(this, 'available', arguments);\n        }\n\n        /**\n         * Batch multiple changes for listeners (i.e. DOM)\n         *\n         * @category Tree\n         * @private\n         * @return {void}\n         */\n\n    }, {\n        key: 'batch',\n        value: function batch() {\n            if (this.batching < 0) {\n                this.batching = 0;\n            }\n\n            this.batching++;\n        }\n\n        /**\n         * Blur children in this collection.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'blur',\n        value: function blur() {\n            return _map(this, 'blur', arguments);\n        }\n\n        /**\n         * Blur (deeply) all nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'blurDeep',\n        value: function blurDeep() {\n            return _map(this, 'blurDeep', arguments);\n        }\n\n        /**\n         * Compares any number of TreeNode objects and returns\n         * the minimum and maximum (starting/ending) nodes.\n         *\n         * @category Tree\n         * @return {array} Array with two TreeNode objects.\n         */\n\n    }, {\n        key: 'boundingNodes',\n        value: function boundingNodes() {\n            var pathMap = _.transform(arguments, function (map$$1, node) {\n                map$$1[node.indexPath().replace(/\\./g, '')] = node;\n            }, {});\n\n            var _$sortBy = _.sortBy(Object.keys(pathMap)),\n                _$sortBy2 = toArray(_$sortBy),\n                head = _$sortBy2[0],\n                tail = _$sortBy2.slice(1);\n\n            return [_.get(pathMap, head), _.get(pathMap, tail)];\n        }\n\n        /**\n         * Check if the tree will auto-deselect currently selected nodes\n         * when a new selection is made.\n         *\n         * @category Tree\n         * @return {boolean} If tree will auto-deselect nodes.\n         */\n\n    }, {\n        key: 'canAutoDeselect',\n        value: function canAutoDeselect() {\n            return this.config.selection.autoDeselect && !this.preventDeselection;\n        }\n\n        /**\n         * Query for all checked nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'checked',\n        value: function checked() {\n            return _map(this, 'checked', arguments);\n        }\n\n        /**\n         * Clean nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'clean',\n        value: function clean() {\n            return _map(this, 'clean', arguments);\n        }\n\n        /**\n         * Clear nodes matched by previous search, restore all nodes and collapse parents.\n         *\n         * @category Tree\n         * @return {Tree} Tree instance.\n         */\n\n    }, {\n        key: 'clearSearch',\n        value: function clearSearch() {\n            this.matched().state('matched', false);\n            return this.showDeep().collapseDeep().tree();\n        }\n\n        /**\n         * Clones (deeply) the array of nodes.\n         *\n         * Note: Cloning will *not* clone the context pointer.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of cloned nodes.\n         */\n\n    }, {\n        key: 'clone',\n        value: function clone() {\n            return _map(this, 'clone', arguments);\n        }\n\n        /**\n         * Collapse nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'collapse',\n        value: function collapse() {\n            return _map(this, 'collapse', arguments);\n        }\n\n        /**\n         * Query for all collapsed nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'collapsed',\n        value: function collapsed() {\n            return _map(this, 'collapsed', arguments);\n        }\n\n        /**\n         * Collapse (deeply) all children.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'collapseDeep',\n        value: function collapseDeep() {\n            return _map(this, 'collapseDeep', arguments);\n        }\n\n        /**\n         * Concat multiple TreeNodes arrays.\n         *\n         * @category Tree\n         * @param {TreeNodes} nodes Array of nodes.\n         * @return {TreeNodes} Resulting node array.\n         */\n\n    }, {\n        key: 'concat',\n        value: function concat() {\n            return _map(this, 'concat', arguments);\n        }\n\n        /**\n         * Copy nodes to another tree instance.\n         *\n         * @category Tree\n         * @param {boolean} hierarchy Include necessary ancestors to match hierarchy.\n         * @return {object} Methods to perform action on copied nodes.\n         */\n\n    }, {\n        key: 'copy',\n        value: function copy() {\n            return _map(this, 'copy', arguments);\n        }\n\n        /**\n         * Creates a TreeNode without adding it. If the obj is already a TreeNode it's returned without modification.\n         *\n         * @category Tree\n         * @param {object} obj Source node object.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'createNode',\n        value: function createNode(obj) {\n            return InspireTree.isTreeNode(obj) ? obj : objectToNode(this, obj);\n        }\n\n        /**\n         * Return deepest nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'deepest',\n        value: function deepest() {\n            return _map(this, 'deepest', arguments);\n        }\n\n        /**\n         * Deselect nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'deselect',\n        value: function deselect() {\n            return _map(this, 'deselect', arguments);\n        }\n\n        /**\n         * Deselect (deeply) all nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'deselectDeep',\n        value: function deselectDeep() {\n            return _map(this, 'deselectDeep', arguments);\n        }\n\n        /**\n         * Disable auto-deselection of currently selected nodes.\n         *\n         * @category Tree\n         * @return {Tree} Tree instance.\n         */\n\n    }, {\n        key: 'disableDeselection',\n        value: function disableDeselection() {\n            if (this.config.selection.multiple) {\n                this.preventDeselection = true;\n            }\n\n            return this;\n        }\n\n        /**\n         * Iterate each TreeNode.\n         *\n         * @category Tree\n         * @param {function} iteratee Iteratee invoke for each node.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'each',\n        value: function each$$1() {\n            return _map(this, 'each', arguments);\n        }\n\n        /**\n         * Check if every node passes the given test.\n         *\n         * @category Tree\n         * @param {function} tester Test each node in this collection,\n         * @return {boolean} True if every node passes the test.\n         */\n\n    }, {\n        key: 'every',\n        value: function every() {\n            return _map(this, 'every', arguments);\n        }\n\n        /**\n         * Query for all editable nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'editable',\n        value: function editable() {\n            return _map(this, 'editable', arguments);\n        }\n\n        /**\n         * Query for all nodes in editing mode.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'editing',\n        value: function editing() {\n            return _map(this, 'editing', arguments);\n        }\n\n        /**\n         * Enable auto-deselection of currently selected nodes.\n         *\n         * @category Tree\n         * @return {Tree} Tree instance.\n         */\n\n    }, {\n        key: 'enableDeselection',\n        value: function enableDeselection() {\n            this.preventDeselection = false;\n\n            return this;\n        }\n\n        /**\n         * Release the current batch.\n         *\n         * @category Tree\n         * @private\n         * @return {void}\n         */\n\n    }, {\n        key: 'end',\n        value: function end() {\n            this.batching--;\n\n            if (this.batching === 0) {\n                this.applyChanges();\n            }\n        }\n\n        /**\n         * Expand children.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'expand',\n        value: function expand() {\n            return _map(this, 'expand', arguments);\n        }\n\n        /**\n         * Expand (deeply) all nodes.\n         *\n         * @category Tree\n         * @return {Promise} Promise resolved when all children have loaded and expanded.\n         */\n\n    }, {\n        key: 'expandDeep',\n        value: function expandDeep() {\n            return _map(this, 'expandDeep', arguments);\n        }\n\n        /**\n         * Query for all expanded nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'expanded',\n        value: function expanded() {\n            return _map(this, 'expanded', arguments);\n        }\n\n        /**\n         * Clone a hierarchy of all nodes matching a predicate.\n         *\n         * Because it filters deeply, we must clone all nodes so that we\n         * don't affect the actual node array.\n         *\n         * @category Tree\n         * @param {string|function} predicate State flag or custom function.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'extract',\n        value: function extract() {\n            return _map(this, 'extract', arguments);\n        }\n\n        /**\n         * Filter all nodes matching the given predicate.\n         *\n         * @category Tree\n         * @param {function} predicate Test function.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'filter',\n        value: function filter() {\n            return _map(this, 'filter', arguments);\n        }\n\n        /**\n         * Filter all nodes matching the given predicate.\n         *\n         * @category Tree\n         * @param {string|function} predicate State flag or custom function.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'filterBy',\n        value: function filterBy() {\n            return _map(this, 'filterBy', arguments);\n        }\n\n        /**\n         * Flatten and get only node(s) matching the expected state or predicate function.\n         *\n         * @category Tree\n         * @param {string|function} predicate State property or custom function.\n         * @return {TreeNodes} Flat array of matching nodes.\n         */\n\n    }, {\n        key: 'flatten',\n        value: function flatten() {\n            return _map(this, 'flatten', arguments);\n        }\n\n        /**\n         * Query for all focused nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'focused',\n        value: function focused() {\n            return _map(this, 'focused', arguments);\n        }\n\n        /**\n         * Iterate each TreeNode.\n         *\n         * @category Tree\n         * @param {function} iteratee Iteratee invoke for each node.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'forEach',\n        value: function forEach() {\n            return _map(this, 'each', arguments);\n        }\n\n        /**\n         * Get a specific node by its index, or undefined if it doesn't exist.\n         *\n         * @category Tree\n         * @param {int} index Numeric index of requested node.\n         * @return {TreeNode} Node object. Undefined if invalid index.\n         */\n\n    }, {\n        key: 'get',\n        value: function get$$1() {\n            return _map(this, 'get', arguments);\n        }\n\n        /**\n         * Query for all hidden nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'hidden',\n        value: function hidden() {\n            return _map(this, 'hidden', arguments);\n        }\n\n        /**\n         * Hide nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'hide',\n        value: function hide() {\n            return _map(this, 'hide', arguments);\n        }\n\n        /**\n         * Hide (deeply) all nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'hideDeep',\n        value: function hideDeep() {\n            return _map(this, 'hideDeep', arguments);\n        }\n\n        /**\n         * Query for all indeterminate nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'indeterminate',\n        value: function indeterminate() {\n            return _map(this, 'indeterminate', arguments);\n        }\n\n        /**\n         * Get the index of the given node.\n         *\n         * @category Tree\n         * @param {TreeNode} node Root tree node.\n         * @return {int} Index of the node.\n         */\n\n    }, {\n        key: 'indexOf',\n        value: function indexOf$$1() {\n            return _map(this, 'indexOf', arguments);\n        }\n\n        /**\n         * Insert a new node at the given position.\n         *\n         * @category Tree\n         * @param {integer} index Index at which to insert the node.\n         * @param {object} object Raw node object or TreeNode.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'insertAt',\n        value: function insertAt() {\n            return _map(this, 'insertAt', arguments);\n        }\n\n        /**\n         * Invoke method(s) on each node.\n         *\n         * @category Tree\n         * @param {string|array} methods Method name(s).\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'invoke',\n        value: function invoke$$1() {\n            return _map(this, 'invoke', arguments);\n        }\n\n        /**\n         * Invoke method(s) deeply.\n         *\n         * @category Tree\n         * @param {string|array} methods Method name(s).\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'invokeDeep',\n        value: function invokeDeep() {\n            return _map(this, 'invokeDeep', arguments);\n        }\n\n        /**\n         * Check if an event is currently muted.\n         *\n         * @category Tree\n         * @param {string} eventName Event name.\n         * @return {boolean} If event is muted.\n         */\n\n    }, {\n        key: 'isEventMuted',\n        value: function isEventMuted(eventName) {\n            if (_.isBoolean(this.muted())) {\n                return this.muted();\n            }\n\n            return _.includes(this.muted(), eventName);\n        }\n\n        /**\n         * Check if an object is a Tree.\n         *\n         * @category Tree\n         * @param {object} object Object\n         * @return {boolean} If object is a Tree.\n         */\n\n    }, {\n        key: 'isTree',\n        value: function isTree(object) {\n            return object instanceof InspireTree;\n        }\n\n        /**\n         * Check if an object is a TreeNode.\n         *\n         * @category Tree\n         * @param {object} obj Object\n         * @return {boolean} If object is a TreeNode.\n         */\n\n    }, {\n        key: 'join',\n\n\n        /**\n         * Join nodes into a resulting string.\n         *\n         * @category Tree\n         * @param {string} separator Separator, defaults to a comma\n         * @return {string} Strings from root node objects.\n         */\n        value: function join() {\n            return _map(this, 'join', arguments);\n        }\n\n        /**\n         * Get the most recently selected node, if any.\n         *\n         * @category Tree\n         * @return {TreeNode} Last selected node, or undefined.\n         */\n\n    }, {\n        key: 'lastSelectedNode',\n        value: function lastSelectedNode() {\n            return this._lastSelectedNode;\n        }\n\n        /**\n         * Load data. Accepts an array, function, or promise.\n         *\n         * @category Tree\n         * @param {array|function|Promise} loader Array of nodes, function, or promise resolving an array of nodes.\n         * @return {Promise} Promise resolved upon successful load, rejected on error.\n         * @example\n         *\n         * tree.load($.getJSON('nodes.json'));\n         */\n\n    }, {\n        key: 'load',\n        value: function load(loader) {\n            var _this3 = this;\n\n            var promise = new es6Promise_1(function (resolve, reject) {\n                var complete = function complete(nodes, totalNodes) {\n                    // A little type-safety for silly situations\n                    if (!_.isArrayLike(nodes)) {\n                        return reject(new TypeError('Loader requires an array-like `nodes` parameter.'));\n                    }\n\n                    // Delay event for synchronous loader. Otherwise it fires\n                    // before the user has a chance to listen.\n                    if (!_this3.initialized && _.isArrayLike(nodes)) {\n                        setTimeout(function () {\n                            _this3.emit('data.loaded', nodes);\n                        });\n                    } else {\n                        _this3.emit('data.loaded', nodes);\n                    }\n\n                    // Parse newly-loaded nodes\n                    var newModel = collectionToModel(_this3, nodes);\n\n                    // Concat only if loading is deferred\n                    if (_this3.config.deferredLoading) {\n                        _this3.model = _this3.model.concat(newModel);\n                    } else {\n                        _this3.model = newModel;\n                    }\n\n                    // Set pagination\n                    _this3.model._pagination.total = nodes.length;\n                    if (_.parseInt(totalNodes) > nodes.length) {\n                        _this3.model._pagination.total = _.parseInt(totalNodes);\n                    }\n\n                    // Set pagination totals if resolver failed to provide them\n                    if (!totalNodes) {\n                        _this3.model.recurseDown(function (node) {\n                            if (node.hasChildren()) {\n                                node.children._pagination.total = node.children.length;\n                            }\n                        });\n                    }\n\n                    if (_this3.config.selection.require && !_this3.selected().length) {\n                        _this3.selectFirstAvailableNode();\n                    }\n\n                    var init = function init() {\n                        _this3.emit('model.loaded', _this3.model);\n\n                        resolve(_this3.model);\n\n                        _this3.applyChanges();\n                    };\n\n                    // Delay event for synchronous loader\n                    if (!_this3.initialized && _.isArray(nodes)) {\n                        setTimeout(init);\n                    } else {\n                        init();\n                    }\n                };\n\n                // Data given already as an array\n                if (_.isArrayLike(loader)) {\n                    complete(loader);\n                }\n\n                // Data loader requires a caller/callback\n                else if (_.isFunction(loader)) {\n                        var resp = loader(null, complete, reject, _this3.pagination());\n\n                        // Loader returned its own object\n                        if (resp) {\n                            loader = resp;\n                        }\n                    }\n\n                // Data loader is likely a promise\n                if (_.isObject(loader)) {\n                    standardizePromise(loader).then(complete).catch(reject);\n                } else {\n                    error(new Error('Invalid data loader.'));\n                }\n            });\n\n            // Copy to event listeners\n            promise.catch(function (err) {\n                _this3.emit('data.loaderror', err);\n            });\n\n            // Cache to allow access after tree instantiation\n            this._loader = {\n                promise: promise\n            };\n\n            return promise;\n        }\n\n        /**\n         * Query for all nodes currently loading children.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'loading',\n        value: function loading() {\n            return _map(this, 'loading', arguments);\n        }\n\n        /**\n         * Load additional nodes for the root context.\n         *\n         * @category Tree\n         * @param {Event} event Click or scroll event if DOM interaction triggered this call.\n         * @return {Promise} Resolves with request results.\n         */\n\n    }, {\n        key: 'loadMore',\n        value: function loadMore() {\n            return _map(this, 'loadMore', arguments);\n        }\n\n        /**\n         * Create a new collection after passing every node through iteratee.\n         *\n         * @category Tree\n         * @param {function} iteratee Node iteratee.\n         * @return {TreeNodes} New array of node objects.\n         */\n\n    }, {\n        key: 'map',\n        value: function map$$1() {\n            return _map(this, 'map', arguments);\n        }\n\n        /**\n         * Query for all nodes matched in the last search.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'matched',\n        value: function matched() {\n            return _map(this, 'matched', arguments);\n        }\n\n        /**\n         * Move node at a given index to a new index.\n         *\n         * @category Tree\n         * @param {int} index Current index.\n         * @param {int} newIndex New index.\n         * @param {TreeNodes} target Target TreeNodes array. Defaults to this.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'move',\n        value: function move() {\n            return _map(this, 'move', arguments);\n        }\n\n        /*\n         * Pause events.\n         *\n         * @category Tree\n         * @param {array} events Event names to mute.\n         * @return {Tree} Tree instance.\n         */\n\n    }, {\n        key: 'mute',\n        value: function mute(events) {\n            if (_.isString(events) || _.isArray(events)) {\n                this._muted = _.castArray(events);\n            } else {\n                this._muted = true;\n            }\n\n            return this;\n        }\n\n        /**\n         * Get current mute settings.\n         *\n         * @category Tree\n         * @return {boolean|array} Muted events. If all, true.\n         */\n\n    }, {\n        key: 'muted',\n        value: function muted() {\n            return this._muted;\n        }\n\n        /**\n         * Get a node.\n         *\n         * @category Tree\n         * @param {string|number} id ID of node.\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'node',\n        value: function node() {\n            return _map(this, 'node', arguments);\n        }\n\n        /**\n         * Get all nodes in a tree, or nodes for an array of IDs.\n         *\n         * @category Tree\n         * @param {array} refs Array of ID references.\n         * @return {TreeNodes} Array of node objects.\n         * @example\n         *\n         * let all = tree.nodes()\n         * let some = tree.nodes([1, 2, 3])\n         */\n\n    }, {\n        key: 'nodes',\n        value: function nodes() {\n            return _map(this, 'nodes', arguments);\n        }\n\n        /**\n         * Get the root TreeNodes pagination.\n         *\n         * @category Tree\n         * @return {object} Pagination configuration object.\n         */\n\n    }, {\n        key: 'pagination',\n        value: function pagination() {\n            return _map(this, 'pagination', arguments);\n        }\n\n        /**\n         * Pop node in the final index position.\n         *\n         * @category Tree\n         * @return {TreeNode} Node object.\n         */\n\n    }, {\n        key: 'pop',\n        value: function pop() {\n            return _map(this, 'pop', arguments);\n        }\n\n        /**\n         * Add a TreeNode to the end of the root collection.\n         *\n         * @category Tree\n         * @param {TreeNode} node Node object.\n         * @return {int} The new length\n         */\n\n    }, {\n        key: 'push',\n        value: function push() {\n            return _map(this, 'push', arguments);\n        }\n\n        /**\n         * Iterate down all nodes and any children.\n         *\n         * Return false to stop execution.\n         *\n         * @private\n         * @param {function} iteratee Iteratee function\n         * @return {TreeNodes} Resulting nodes.\n         */\n\n    }, {\n        key: 'recurseDown',\n        value: function recurseDown() {\n            return _map(this, 'recurseDown', arguments);\n        }\n\n        /**\n         * Reduce nodes.\n         *\n         * @category Tree\n         * @param {function} iteratee Iteratee function\n         * @return {any} Resulting data.\n         */\n\n    }, {\n        key: 'reduce',\n        value: function reduce() {\n            return _map(this, 'reduce', arguments);\n        }\n\n        /**\n         * Right-reduce root nodes.\n         *\n         * @category Tree\n         * @param {function} iteratee Iteratee function\n         * @return {any} Resulting data.\n         */\n\n    }, {\n        key: 'reduceRight',\n        value: function reduceRight() {\n            return _map(this, 'reduceRight', arguments);\n        }\n\n        /**\n         * Reload/re-execute the original data loader.\n         *\n         * @category Tree\n         * @return {Promise} Load method promise.\n         */\n\n    }, {\n        key: 'reload',\n        value: function reload() {\n            this.removeAll();\n\n            return this.load(this.opts.data || this.config.data);\n        }\n\n        /**\n         * Remove a node.\n         *\n         * @category Tree\n         * @param {TreeNode} node Node object.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'remove',\n        value: function remove$$1() {\n            return _map(this, 'remove', arguments);\n        }\n\n        /**\n         * Remove all nodes.\n         *\n         * @category Tree\n         * @return {Tree} Tree instance.\n         */\n\n    }, {\n        key: 'removeAll',\n        value: function removeAll() {\n            this.model = new TreeNodes(this);\n            this.applyChanges();\n\n            return this;\n        }\n\n        /**\n         * Query for all soft-removed nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'removed',\n        value: function removed() {\n            return _map(this, 'removed', arguments);\n        }\n\n        /**\n         * Restore nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'restore',\n        value: function restore() {\n            return _map(this, 'restore', arguments);\n        }\n\n        /**\n         * Restore (deeply) all nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'restoreDeep',\n        value: function restoreDeep() {\n            return _map(this, 'restoreDeep', arguments);\n        }\n\n        /**\n         * Reverse node order.\n         *\n         * @category Tree\n         * @return {TreeNodes} Reversed array of node objects.\n         */\n\n    }, {\n        key: 'reverse',\n        value: function reverse() {\n            return _map(this, 'reverse', arguments);\n        }\n\n        /**\n         * Search nodes, showing only those that match and the necessary hierarchy.\n         *\n         * @category Tree\n         * @param {*} query Search string, RegExp, or function.\n         * @return {TreeNodes} Array of matching node objects.\n         */\n\n    }, {\n        key: 'search',\n        value: function search(query) {\n            var _this4 = this;\n\n            var _config$search = this.config.search,\n                matcher = _config$search.matcher,\n                matchProcessor = _config$search.matchProcessor;\n\n            // Don't search if query empty\n\n            if (!query || _.isString(query) && _.isEmpty(query)) {\n                return es6Promise_1.resolve(this.clearSearch());\n            }\n\n            this.batch();\n\n            // Reset states\n            this.recurseDown(function (node) {\n                node.state('hidden', true);\n                node.state('matched', false);\n            });\n\n            this.end();\n\n            // Query nodes for any matching the query\n            matcher = _.isFunction(matcher) ? matcher : function (query, resolve) {\n                var matches = new TreeNodes(_this4);\n\n                // Convery the query into a usable predicate\n                if (_.isString(query)) {\n                    query = new RegExp(query, 'i');\n                }\n\n                var predicate = void 0;\n                if (_.isRegExp(query)) {\n                    predicate = function predicate(node) {\n                        return query.test(node.text);\n                    };\n                } else {\n                    predicate = query;\n                }\n\n                // Recurse down and find all matches\n                _this4.model.recurseDown(function (node) {\n                    if (!node.removed()) {\n                        if (predicate(node)) {\n                            // Return as a match\n                            matches.push(node);\n                        }\n                    }\n                });\n\n                resolve(matches);\n            };\n\n            // Process all matching nodes.\n            matchProcessor = _.isFunction(matchProcessor) ? matchProcessor : function (matches) {\n                matches.each(function (node) {\n                    node.show().state('matched', true);\n\n                    node.expandParents().collapse();\n\n                    if (node.hasChildren()) {\n                        node.children.showDeep();\n                    }\n                });\n            };\n\n            // Wrap the search matcher with a promise since it could require async requests\n            return new es6Promise_1(function (resolve, reject) {\n                // Execute the matcher and pipe results to the processor\n                matcher(query, function (matches) {\n                    // Convert to a TreeNodes array if we're receiving external nodes\n                    if (!InspireTree.isTreeNodes(matches)) {\n                        matches = _this4.nodes(_.map(matches, 'id'));\n                    }\n\n                    _this4.batch();\n\n                    matchProcessor(matches);\n\n                    _this4.end();\n\n                    resolve(matches);\n                }, reject);\n            });\n        }\n\n        /**\n         * Select nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'select',\n        value: function select() {\n            return _map(this, 'select', arguments);\n        }\n\n        /**\n         * Query for all selectable nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'selectable',\n        value: function selectable() {\n            return _map(this, 'selectable', arguments);\n        }\n\n        /**\n         * Select all nodes between a start and end node.\n         * Starting node must have a higher index path so we can work down to endNode.\n         *\n         * @category Tree\n         * @param {TreeNode} startNode Starting node\n         * @param {TreeNode} endNode Ending node\n         * @return {Tree} Tree instance.\n         */\n\n    }, {\n        key: 'selectBetween',\n        value: function selectBetween(startNode, endNode) {\n            this.batch();\n\n            var node = startNode.nextVisibleNode();\n            while (node.id !== endNode.id) {\n                node.select();\n\n                node = node.nextVisibleNode();\n            }\n\n            this.end();\n\n            return this;\n        }\n    }, {\n        key: 'selectDeep',\n\n\n        /**\n         * Select (deeply) all nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n        value: function selectDeep() {\n            return _map(this, 'selectDeep', arguments);\n        }\n\n        /**\n         * Query for all selected nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'selected',\n        value: function selected() {\n            return _map(this, 'selected', arguments);\n        }\n\n        /**\n         * Select the first available node.\n         *\n         * @category Tree\n         * @return {TreeNode} Selected node object.\n         */\n\n    }, {\n        key: 'selectFirstAvailableNode',\n        value: function selectFirstAvailableNode() {\n            var node = this.model.filterBy('available').get(0);\n            if (node) {\n                node.select();\n            }\n\n            return node;\n        }\n    }, {\n        key: 'shift',\n\n\n        /**\n         * Shift node in the first index position.\n         *\n         * @category Tree\n         * @return {TreeNode} Node object.\n         */\n        value: function shift() {\n            return _map(this, 'shift', arguments);\n        }\n\n        /**\n         * Show nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'show',\n        value: function show() {\n            return _map(this, 'show', arguments);\n        }\n\n        /**\n         * Show (deeply) all nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'showDeep',\n        value: function showDeep() {\n            return _map(this, 'showDeep', arguments);\n        }\n\n        /**\n         * Get a shallow copy of a portion of nodes.\n         *\n         * @category Tree\n         * @param {int} begin Starting index.\n         * @param {int} end End index.\n         * @return {Array} Array of selected subset.\n         */\n\n    }, {\n        key: 'slice',\n        value: function slice$$1() {\n            return _map(this, 'slice', arguments);\n        }\n\n        /**\n         * Soft-remove nodes.\n         *\n         * @category Tree\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'softRemove',\n        value: function softRemove() {\n            return _map(this, 'softRemove', arguments);\n        }\n\n        /**\n         * Check if at least one node passes the given test.\n         *\n         * @category Tree\n         * @param {function} tester Test each node in this collection,\n         * @return {boolean} True if at least one node passes the test.\n         */\n\n    }, {\n        key: 'some',\n        value: function some() {\n            return _map(this, 'some', arguments);\n        }\n\n        /**\n         * Sort nodes using a function.\n         *\n         * @category Tree\n         * @param {function} compareFn Comparison function.\n         * @return {TreeNodes} Root array of node objects.\n         */\n\n    }, {\n        key: 'sort',\n        value: function sort() {\n            return _map(this, 'sort', arguments);\n        }\n\n        /**\n         * Sort nodes using a function or key name.\n         *\n         * If no custom sorter given, the configured \"sort\" value will be used.\n         *\n         * @category Tree\n         * @param {string|function} sorter Sort function or property name.\n         * @return {TreeNodes} Array of node obejcts.\n         */\n\n    }, {\n        key: 'sortBy',\n        value: function sortBy$$1() {\n            return _map(this, 'sortBy', arguments);\n        }\n\n        /**\n         * Remove and/or add new TreeNodes into the root collection.\n         *\n         * @category Tree\n         * @param {int} start Starting index.\n         * @param {int} deleteCount Count of nodes to delete.\n         * @param {TreeNode} node Node(s) to insert.\n         * @return {Array} Array of selected subset.\n         */\n\n    }, {\n        key: 'splice',\n        value: function splice() {\n            return _map(this, 'slice', arguments);\n        }\n\n        /**\n         * Set nodes' state values.\n         *\n         * @category Tree\n         * @param {string} name Property name.\n         * @param {boolean} newVal New value, if setting.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'state',\n        value: function state() {\n            return _map(this, 'state', arguments);\n        }\n\n        /**\n         * Set (deeply) nodes' state values.\n         *\n         * @category Tree\n         * @param {string} name Property name.\n         * @param {boolean} newVal New value, if setting.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'stateDeep',\n        value: function stateDeep() {\n            return _map(this, 'stateDeep', arguments);\n        }\n\n        /**\n         * Swap two node positions.\n         *\n         * @category Tree\n         * @param {TreeNode} node1 Node 1.\n         * @param {TreeNode} node2 Node 2.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'swap',\n        value: function swap() {\n            return _map(this, 'swap', arguments);\n        }\n\n        /**\n         * Get a native node Array.\n         *\n         * @category Tree\n         * @return {array} Array of node objects.\n         */\n\n    }, {\n        key: 'toArray',\n        value: function toArray$$1() {\n            return _map(this, 'toArray', arguments);\n        }\n\n        /**\n         * Get a string representation of node objects.\n         *\n         * @category Tree\n         * @return {string} Strings from root node objects.\n         */\n\n    }, {\n        key: 'toString',\n        value: function toString() {\n            return _map(this, 'toString', arguments);\n        }\n\n        /**\n         * Resume events.\n         *\n         * @category Tree\n         * @param {array} events Events to unmute.\n         * @return {Tree} Tree instance.\n         */\n\n    }, {\n        key: 'unmute',\n        value: function unmute(events) {\n            // Diff array and set to false if we're now empty\n            if (_.isString(events) || _.isArray(events)) {\n                this._muted = _.difference(this._muted, _.castArray(events));\n                if (!this._muted.length) {\n                    this._muted = false;\n                }\n            } else {\n                this._muted = false;\n            }\n\n            return this;\n        }\n    }, {\n        key: 'unshift',\n\n\n        /**\n         * Add a TreeNode in the first index position.\n         *\n         * @category Tree\n         * @return {number} The new length\n         */\n        value: function unshift() {\n            return _map(this, 'unshift', arguments);\n        }\n\n        /**\n         * Query for all visible nodes.\n         *\n         * @category Tree\n         * @param {boolean} full Retain full hiearchy.\n         * @return {TreeNodes} Array of node objects.\n         */\n\n    }, {\n        key: 'visible',\n        value: function visible() {\n            return _map(this, 'visible', arguments);\n        }\n    }], [{\n        key: 'isTreeNode',\n        value: function isTreeNode(obj) {\n            return obj instanceof TreeNode;\n        }\n\n        /**\n         * Check if an object is a TreeNodes array.\n         *\n         * @category Tree\n         * @param {object} obj Object\n         * @return {boolean} If object is a TreeNodes array.\n         */\n\n    }, {\n        key: 'isTreeNodes',\n        value: function isTreeNodes(obj) {\n            return obj instanceof TreeNodes;\n        }\n    }]);\n    return InspireTree;\n}(eventemitter2_1);\n\nreturn InspireTree;\n\n})));\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bound');\n\nvar $toString = callBound('Object.prototype.toString');\n\n/** @type {import('.')} */\nvar isStandardArguments = function isArguments(value) {\n\tif (\n\t\thasToStringTag\n\t\t&& value\n\t\t&& typeof value === 'object'\n\t\t&& Symbol.toStringTag in value\n\t) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\n/** @type {import('.')} */\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null\n\t\t&& typeof value === 'object'\n\t\t&& 'length' in value\n\t\t&& typeof value.length === 'number'\n\t\t&& value.length >= 0\n\t\t&& $toString(value) !== '[object Array]'\n\t\t&& 'callee' in value\n\t\t&& $toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\n// @ts-expect-error TODO make this not error\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\n/** @type {import('.')} */\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar callBound = require('call-bound');\nvar safeRegexTest = require('safe-regex-test');\nvar isFnRegex = safeRegexTest(/^\\s*(?:function)?\\*/);\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = require('get-proto');\n\nvar toStr = callBound('Object.prototype.toString');\nvar fnToStr = callBound('Function.prototype.toString');\n\nvar getGeneratorFunction = require('generator-function');\n\n/** @type {import('.')} */\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex(fnToStr(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tvar GeneratorFunction = getGeneratorFunction();\n\treturn GeneratorFunction && getProto(fn) === GeneratorFunction.prototype;\n};\n","'use strict';\n\nvar callBound = require('call-bound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar gOPD = require('gopd');\n\n/** @type {import('.')} */\nvar fn;\n\nif (hasToStringTag) {\n\t/** @type {(receiver: ThisParameterType<typeof RegExp.prototype.exec>, ...args: Parameters<typeof RegExp.prototype.exec>) => ReturnType<typeof RegExp.prototype.exec>} */\n\tvar $exec = callBound('RegExp.prototype.exec');\n\t/** @type {object} */\n\tvar isRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\t/** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */\n\tvar badStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n\n\t/** @type {import('.')} */\n\t// @ts-expect-error TS can't figure out that the $exec call always throws\n\t// eslint-disable-next-line consistent-return\n\tfn = function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {NonNullable<typeof gOPD>} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t$exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier)));\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t};\n} else {\n\t/** @type {(receiver: ThisParameterType<typeof Object.prototype.toString>, ...args: Parameters<typeof Object.prototype.toString>) => ReturnType<typeof Object.prototype.toString>} */\n\tvar $toString = callBound('Object.prototype.toString');\n\t/** @const @type {'[object RegExp]'} */\n\tvar regexClass = '[object RegExp]';\n\n\t/** @type {import('.')} */\n\tfn = function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n}\n\nmodule.exports = fn;\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n *  jquery.ui.widget.js\n *  jquery.ui.mouse.js\n */\n(function ($) {\n\n  // Detect touch support\n  $.support.touch = 'ontouchend' in document;\n\n  // Ignore browsers without touch support\n  if (!$.support.touch) {\n    return;\n  }\n\n  var mouseProto = $.ui.mouse.prototype,\n      _mouseInit = mouseProto._mouseInit,\n      _mouseDestroy = mouseProto._mouseDestroy,\n      touchHandled;\n\n  /**\n   * Simulate a mouse event based on a corresponding touch event\n   * @param {Object} event A touch event\n   * @param {String} simulatedType The corresponding mouse event\n   */\n  function simulateMouseEvent (event, simulatedType) {\n\n    // Ignore multi-touch events\n    if (event.originalEvent.touches.length > 1) {\n      return;\n    }\n\n    event.preventDefault();\n\n    var touch = event.originalEvent.changedTouches[0],\n        simulatedEvent = document.createEvent('MouseEvents');\n    \n    // Initialize the simulated mouse event using the touch event's coordinates\n    simulatedEvent.initMouseEvent(\n      simulatedType,    // type\n      true,             // bubbles                    \n      true,             // cancelable                 \n      window,           // view                       \n      1,                // detail                     \n      touch.screenX,    // screenX                    \n      touch.screenY,    // screenY                    \n      touch.clientX,    // clientX                    \n      touch.clientY,    // clientY                    \n      false,            // ctrlKey                    \n      false,            // altKey                     \n      false,            // shiftKey                   \n      false,            // metaKey                    \n      0,                // button                     \n      null              // relatedTarget              \n    );\n\n    // Dispatch the simulated event to the target element\n    event.target.dispatchEvent(simulatedEvent);\n  }\n\n  /**\n   * Handle the jQuery UI widget's touchstart events\n   * @param {Object} event The widget element's touchstart event\n   */\n  mouseProto._touchStart = function (event) {\n\n    var self = this;\n\n    // Ignore the event if another widget is already being handled\n    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {\n      return;\n    }\n\n    // Set the flag to prevent other widgets from inheriting the touch event\n    touchHandled = true;\n\n    // Track movement to determine if interaction was a click\n    self._touchMoved = false;\n\n    // Simulate the mouseover event\n    simulateMouseEvent(event, 'mouseover');\n\n    // Simulate the mousemove event\n    simulateMouseEvent(event, 'mousemove');\n\n    // Simulate the mousedown event\n    simulateMouseEvent(event, 'mousedown');\n  };\n\n  /**\n   * Handle the jQuery UI widget's touchmove events\n   * @param {Object} event The document's touchmove event\n   */\n  mouseProto._touchMove = function (event) {\n\n    // Ignore event if not handled\n    if (!touchHandled) {\n      return;\n    }\n\n    // Interaction was not a click\n    this._touchMoved = true;\n\n    // Simulate the mousemove event\n    simulateMouseEvent(event, 'mousemove');\n  };\n\n  /**\n   * Handle the jQuery UI widget's touchend events\n   * @param {Object} event The document's touchend event\n   */\n  mouseProto._touchEnd = function (event) {\n\n    // Ignore event if not handled\n    if (!touchHandled) {\n      return;\n    }\n\n    // Simulate the mouseup event\n    simulateMouseEvent(event, 'mouseup');\n\n    // Simulate the mouseout event\n    simulateMouseEvent(event, 'mouseout');\n\n    // If the touch interaction did not move, it should trigger a click\n    if (!this._touchMoved) {\n\n      // Simulate the click event\n      simulateMouseEvent(event, 'click');\n    }\n\n    // Unset the flag to allow other widgets to inherit the touch event\n    touchHandled = false;\n  };\n\n  /**\n   * A duck punch of the $.ui.mouse _mouseInit method to support touch events.\n   * This method extends the widget with bound touch event handlers that\n   * translate touch events to mouse events and pass them to the widget's\n   * original mouse event handling methods.\n   */\n  mouseProto._mouseInit = function () {\n    \n    var self = this;\n\n    // Delegate the touch handlers to the widget's element\n    self.element.bind({\n      touchstart: $.proxy(self, '_touchStart'),\n      touchmove: $.proxy(self, '_touchMove'),\n      touchend: $.proxy(self, '_touchEnd')\n    });\n\n    // Call the original $.ui.mouse init method\n    _mouseInit.call(self);\n  };\n\n  /**\n   * Remove the touch event handlers\n   */\n  mouseProto._mouseDestroy = function () {\n    \n    var self = this;\n\n    // Delegate the touch handlers to the widget's element\n    self.element.unbind({\n      touchstart: $.proxy(self, '_touchStart'),\n      touchmove: $.proxy(self, '_touchMove'),\n      touchend: $.proxy(self, '_touchEnd')\n    });\n\n    // Call the original $.ui.mouse destroy method\n    _mouseDestroy.call(self);\n  };\n\n})(jQuery);","/*!\n * jQuery UI :data 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: https://api.jqueryui.com/data-selector/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.extend( $.expr.pseudos, {\n\tdata: $.expr.createPseudo( function( dataName ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$.data( elem, dataName );\n\t\t};\n\t} )\n} );\n} );\n","/*!\n * jQuery UI Disable Selection 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: https://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n} );\n","/*!\n * jQuery UI Focusable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: https://api.jqueryui.com/focusable-selector/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) &&\n\t\t$( element ).css( \"visibility\" ) === \"visible\";\n};\n\n$.extend( $.expr.pseudos, {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nreturn $.ui.focusable;\n\n} );\n","/*!\n * jQuery UI Form Reset Mixin 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: https://api.jqueryui.com/form-reset-mixin/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./version\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = $( this.element.prop( \"form\" ) );\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n} );\n","/*!\n * jQuery UI Keycode 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n} );\n","/*!\n * jQuery UI Labels 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: https://api.jqueryui.com/labels/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\tif ( !this.length ) {\n\t\treturn this.pushStack( [] );\n\t}\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// If `control.labels` is empty - e.g. inside of document fragments - find\n\t// the labels manually\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + CSS.escape( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nreturn $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n} );\n","/*!\n * jQuery UI Position 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: https://api.jqueryui.com/position/\n//>>demos: https://jqueryui.com/position/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style=\" +\n\t\t\t\t\"'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:300px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisElemWindow = isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isElemWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isElemWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\n\t\t// Make sure string options are treated as CSS selectors\n\t\ttarget = typeof options.of === \"string\" ?\n\t\t\t$( document ).find( options.of ) :\n\t\t\t$( options.of ),\n\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nreturn $.ui.position;\n\n} );\n","/*!\n * jQuery UI Scroll Parent 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: https://api.jqueryui.com/scrollParent/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n} );\n","/*!\n * jQuery UI Tabbable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: https://api.jqueryui.com/tabbable-selector/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\", \"./focusable\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.extend( $.expr.pseudos, {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n} );\n","/*!\n * jQuery UI Unique ID 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: https://api.jqueryui.com/uniqueId/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n} );\n","( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nreturn $.ui.version = \"1.14.2\";\n\n} );\n","/*!\n * jQuery UI Widget 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: https://api.jqueryui.com/jQuery.widget/\n//>>demos: https://jqueryui.com/widget/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tif ( name === \"__proto__\" || name === \"constructor\" ) {\n\t\treturn $.error( \"Invalid widget name: \" + name );\n\t}\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nreturn $.widget;\n\n} );\n","/*!\n * jQuery UI Button 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: https://api.jqueryui.com/button/\n//>>demos: https://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\n\t\t\t// These are only for backcompat\n\t\t\t// TODO: Remove after 1.12\n\t\t\t\"./controlgroup\",\n\t\t\t\"./checkboxradio\",\n\n\t\t\t\"../keycode\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.widget( \"ui.button\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-button\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: \"beginning\",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( \"input\" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( \"title\" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( \"ui-button\", \"ui-widget\" );\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( \"a\" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t\"keyup\": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// If a native click is available use it, so we\n\t\t\t\t\t\t// actually cause navigation. Otherwise, just trigger\n\t\t\t\t\t\t// a click event.\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( \"click\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\t_enhance: function() {\n\t\tif ( !this.element.is( \"button\" ) ) {\n\t\t\tthis.element.attr( \"role\", \"button\" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( \"icon\", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( \"title\" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( \"title\", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== \"iconPosition\",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === \"top\" || position === \"bottom\";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( \"<span>\" );\n\n\t\t\tthis._addClass( this.icon, \"ui-button-icon\", \"ui-icon\" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( \"ui-button-icon-only\" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, \"ui-widget-icon-block\" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-button-icon-space\" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, \"ui-wiget-icon-block\" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? \"before\" : \"after\" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? \"append\" : \"prepend\" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icon\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"iconPosition\" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can't end up with a button that has neither text nor icon\n\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis._toggleClass( \"ui-button-icon-only\", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === \"label\" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.trigger( \"blur\" );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat === true ) {\n\n\t// Text and Icons options\n\t$.widget( \"ui.button\", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = \"end\";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"text\" ) {\n\t\t\t\tthis._super( \"showLabel\", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === \"icon\" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === \"icons\" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( \"icon\", value.primary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"beginning\" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( \"icon\", value.secondary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"end\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function( options ) {\n\t\t\tvar isMethodCall = typeof options === \"string\";\n\t\t\tvar args = Array.prototype.slice.call( arguments, 1 );\n\t\t\tvar returnValue = this;\n\n\t\t\tif ( isMethodCall ) {\n\n\t\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t\t// return undefined instead of the jQuery instance\n\t\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\t\treturnValue = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tthis.each( function() {\n\t\t\t\t\t\tvar methodValue;\n\t\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ?\n\t\t\t\t\t\t\t\"button\" :\n\t\t\t\t\t\t\t\"checkboxradio\";\n\t\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\t\treturn $.error( \"cannot call methods on button\" +\n\t\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for button\" +\n\t\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Allow multiple hashes to be passed on init\n\t\t\t\tif ( args.length ) {\n\t\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t\t}\n\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ? \"button\" : \"checkboxradio\";\n\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( name === \"button\" ) {\n\t\t\t\t\t\t\torig.call( $( this ), options );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$( this ).checkboxradio( $.extend( { icon: false }, options ) );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( \"Controlgroup widget missing\" );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], \"items.button\", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], \"items.button\" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === \"object\" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nreturn $.ui.button;\n\n} );\n","/*!\n * jQuery UI Checkboxradio 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: https://api.jqueryui.com/checkboxradio/\n//>>demos: https://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../form-reset-mixin\",\n\t\t\t\"../labels\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.widget( \"ui.checkboxradio\", [ $.ui.formResetMixin, {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t\"ui-checkboxradio-label\": \"ui-corner-all\",\n\t\t\t\"ui-checkboxradio-icon\": \"ui-corner-all\"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels, labelContents;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won't have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( \"No label found for checkboxradio widget\" );\n\t\t}\n\n\t\tthis.originalLabel = \"\";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\t// The label contents could be text, html, or a mix. We wrap all elements\n\t\t// and read the wrapper's `innerHTML` to get a string representation of\n\t\t// the label, without the input as part of it.\n\t\tlabelContents = this.label.contents().not( this.element[ 0 ] );\n\n\t\tif ( labelContents.length ) {\n\t\t\tthis.originalLabel += labelContents\n\t\t\t\t.clone()\n\t\t\t\t.wrapAll( \"<div></div>\" )\n\t\t\t\t.parent()\n\t\t\t\t.html();\n\t\t}\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._addClass( \"ui-checkboxradio\", \"ui-helper-hidden-accessible\" );\n\t\tthis._addClass( this.label, \"ui-checkboxradio-label\", \"ui-button ui-widget\" );\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-radio-label\" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: \"_toggleClasses\",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== \"input\" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( \"Can't create checkboxradio on element.nodeName=\" + nodeName +\n\t\t\t\t\" and element.type=\" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = \"input[name='\" + CSS.escape( name ) + \"']\";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( $( this ).prop( \"form\" ) ).length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\n\t\tif ( this.options.icon && this.type === \"checkbox\" ) {\n\t\t\tthis._toggleClass( this.icon, null, \"ui-icon-check ui-state-checked\", checked )\n\t\t\t\t._toggleClass( this.icon, null, \"ui-icon-blank\", !checked );\n\t\t}\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( \"instance\" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t\"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don't allow the value to be set to nothing\n\t\tif ( key === \"label\" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( this.label, null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don't refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = \"ui-icon ui-icon-background \";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( \"<span>\" );\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-checkboxradio-icon-space\" );\n\t\t\t}\n\n\t\t\tif ( this.type === \"checkbox\" ) {\n\t\t\t\ttoAdd += checked ? \"ui-icon-check ui-state-checked\" : \"ui-icon-blank\";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? \"ui-icon-blank\" : \"ui-icon-check\" );\n\t\t\t} else {\n\t\t\t\ttoAdd += \"ui-icon-blank\";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, \"ui-checkboxradio-icon\", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, \"ui-icon-check ui-state-checked\" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { \"disabled\": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nreturn $.ui.checkboxradio;\n\n} );\n","/*!\n * jQuery UI Controlgroup 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: https://api.jqueryui.com/controlgroup/\n//>>demos: https://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nreturn $.widget( \"ui.controlgroup\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdirection: \"horizontal\",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t\"button\": \"input[type=button], input[type=submit], input[type=reset], button, a\",\n\t\t\t\"controlgroupLabel\": \".ui-controlgroup-label\",\n\t\t\t\"checkboxradio\": \"input[type='checkbox'], input[type='radio']\",\n\t\t\t\"selectmenu\": \"select\",\n\t\t\t\"spinner\": \".ui-spinner-input\"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( \"role\", \"toolbar\" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( \"destroy\" );\n\t\tthis.childWidgets.removeData( \"ui-controlgroup-data\" );\n\t\tthis.element.removeAttr( \"role\" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( \".ui-controlgroup-label-contents\" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === \"controlgroupLabel\" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( \".ui-controlgroup-label-contents\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( \"<span class='ui-controlgroup-label-contents'></span>\" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, \"ui-widget ui-widget-content ui-state-default\" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can't determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ \"_\" + widget + \"Options\" ] ) {\n\t\t\t\toptions = that[ \"_\" + widget + \"Options\" ]( \"middle\" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( \"instance\" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === \"button\" && element.parent( \".ui-spinner\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn't exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( \"instance\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( \"widget\" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], \"ui-controlgroup-data\",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( \"instance\" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.uniqueSort( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, \"ui-controlgroup-item\" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( \"ui-controlgroup-data\" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = \"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\";\n\t\tvar add = this._buildSimpleOptions( position, \"label\" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t\"middle\": \"\",\n\t\t\t\"first\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" ),\n\t\t\t\"last\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" ),\n\t\t\t\"only\": \"ui-corner-all\"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, \"ui-spinner\" );\n\n\t\toptions.classes[ \"ui-spinner-up\" ] = \"\";\n\t\toptions.classes[ \"ui-spinner-down\" ] = \"\";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-button\" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-checkboxradio-label\" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\treturn {\n\t\t\twidth: direction ? \"auto\" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"\"\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-\" + ( direction ? \"top\" : \"tl\" ),\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": direction ? \"\" : \"ui-corner-tr\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || \"\";\n\t\t\tcurrent = String.prototype.trim.call( current.replace( controlgroupCornerRegex, \"\" ) );\n\t\t\tresult[ key ] = ( current + \" \" + classes[ key ] ).replace( /\\s+/g, \" \" );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"direction\" ) {\n\t\t\tthis._removeClass( \"ui-controlgroup-\" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._callChildMethod( value ? \"disable\" : \"enable\" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( \"ui-controlgroup ui-controlgroup-\" + this.options.direction );\n\n\t\tif ( this.options.direction === \"horizontal\" ) {\n\t\t\tthis._addClass( null, \"ui-helper-clearfix\" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( \":visible\" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ \"first\", \"last\" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( \"ui-controlgroup-data\" );\n\n\t\t\t\tif ( instance && that[ \"_\" + instance.widgetName + \"Options\" ] ) {\n\t\t\t\t\tvar options = that[ \"_\" + instance.widgetName + \"Options\" ](\n\t\t\t\t\t\tchildren.length === 1 ? \"only\" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( \"refresh\" );\n\t\t}\n\t}\n} );\n} );\n","/*!\n * jQuery UI Dialog 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: https://api.jqueryui.com/dialog/\n//>>demos: https://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./button\",\n\t\t\t\"./draggable\",\n\t\t\t\"./mouse\",\n\t\t\t\"./resizable\",\n\t\t\t\"../focusable\",\n\t\t\t\"../keycode\",\n\t\t\t\"../position\",\n\t\t\t\"../tabbable\",\n\t\t\t\"../unique-id\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.widget( \"ui.dialog\", {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t\"ui-dialog\": \"ui-corner-all\",\n\t\t\t\"ui-dialog-titlebar\": \"ui-corner-all\"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\tuiDialogTitleHeadingLevel: 0,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can't be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( \"ui-dialog-content\", \"ui-widget-content\" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).trigger( \"focus\" ).length ) {\n\n\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$( this.document[ 0 ].activeElement ).trigger( \"blur\" );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map( function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( this.document[ 0 ].activeElement );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon opening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( \"focus\" );\n\t},\n\n\t_restoreTabbableFocus: function() {\n\t\tvar activeElement = this.document[ 0 ].activeElement,\n\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\tif ( !isActive ) {\n\t\t\tthis._focusTabbable();\n\t\t}\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tevent.preventDefault();\n\t\tthis._restoreTabbableFocus();\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( \"<div>\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\",\n\t\t\t\t\"aria-modal\": this.options.modal ? \"true\" : null\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, \"ui-dialog\", \"ui-widget ui-widget-content ui-front\" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.first(),\n\t\t\t\t\tlast = tabbables.last();\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t\"ui-dialog-titlebar\", \"ui-widget-header ui-helper-clearfix\" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( \"<a>\" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: \"ui-icon-closethick\",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, \"ui-dialog-titlebar-close\" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tvar uiDialogHeadingLevel = Number.isInteger( this.options.uiDialogTitleHeadingLevel ) &&\n\t\t\tthis.options.uiDialogTitleHeadingLevel > 0 &&\n\t\t\tthis.options.uiDialogTitleHeadingLevel <= 6 ?\n\t\t\t\"h\" + this.options.uiDialogTitleHeadingLevel : \"span\";\n\n\t\tuiDialogTitle = $( \"<\" + uiDialogHeadingLevel + \">\" )\n\t\t\t.uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, \"ui-dialog-title\" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogButtonPane, \"ui-dialog-buttonpane\",\n\t\t\t\"ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, \"ui-dialog-buttonset\" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = typeof props === \"function\" ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === \"boolean\" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( \"click\", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( \"position\" ),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles :\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( \"<a>\" ).text( \"\" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\n\t\tif ( key === \"modal\" ) {\n\t\t\tuiDialog.attr( \"aria-modal\", value ? \"true\" : null );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: \"auto\",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// This doesn't use `_on()` because it is a shared event handler\n\t\t\t// across all open modal dialogs.\n\t\t\tthis.document.on( \"focusin.ui-dialog\", function( event ) {\n\t\t\t\tif ( isOpening ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar instance = this._trackingInstances()[ 0 ];\n\t\t\t\tif ( !instance._allowInteraction( event ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tinstance._focusTabbable();\n\t\t\t\t}\n\t\t\t}.bind( this ) );\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, \"ui-widget-overlay ui-front\" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t} );\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t( this.document.data( \"ui-dialog-overlays\" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis.document.off( \"focusin.ui-dialog\" );\n\t\t\t\tthis.document.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: \"\"\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"dialogClass\" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nreturn $.ui.dialog;\n\n} );\n","/*!\n * jQuery UI Draggable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: https://api.jqueryui.com/draggable/\n//>>demos: https://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./mouse\",\n\t\t\t\"../data\",\n\t\t\t\"../plugin\",\n\t\t\t\"../scroll-parent\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.14.2\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = this.document[ 0 ].activeElement,\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$( activeElement ).trigger( \"blur\" );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( typeof this.options.revert === \"function\" &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = typeof o.helper === \"function\",\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// https://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\tif ( inst.options.snap.release ) {\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\tif ( inst.options.snap.snap ) {\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nreturn $.ui.draggable;\n\n} );\n","/*!\n * jQuery UI Menu 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: https://api.jqueryui.com/menu/\n//>>demos: https://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../keycode\",\n\t\t\t\"../position\",\n\t\t\t\"../unique-id\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nreturn $.widget( \"ui.menu\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.lastMousePosition = { x: null, y: null };\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tthis._activateItem( event );\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( this.document[ 0 ].activeElement );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": \"_activateItem\",\n\t\t\t\"mousemove .ui-menu-item\": \"_activateItem\",\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this._menuItems().first();\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\tthis.document[ 0 ].activeElement\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event, true );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_activateItem: function( event ) {\n\n\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t// is over an item in the menu\n\t\tif ( this.previousFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356)\n\t\tif ( event.clientX === this.lastMousePosition.x &&\n\t\t\t\tevent.clientY === this.lastMousePosition.y ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastMousePosition = {\n\t\t\tx: event.clientX,\n\t\t\ty: event.clientY\n\t\t};\n\n\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\ttarget = $( event.currentTarget );\n\n\t\t// Ignore bubbled events on parent items, see #11641\n\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the item is already active, there's nothing to do\n\t\tif ( target.is( \".ui-state-active\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\tnull, \"ui-state-active\" );\n\t\tthis.focus( event, target );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, all ? 0 : this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active && this._menuItems( this.active.children( \".ui-menu\" ) ).first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_menuItems: function( menu ) {\n\t\treturn ( menu || this.element )\n\t\t\t.find( this.options.items )\n\t\t\t.filter( \".ui-menu-item\" );\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.last();\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.first();\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this._menuItems( this.activeMenu )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\tString.prototype.trim.call(\n\t\t\t\t\t\t\t\t$( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n} );\n","/*!\n * jQuery UI Mouse 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: https://api.jqueryui.com/mouse/\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nreturn $.widget( \"ui.mouse\", {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = event.which === 1,\n\t\t\telIsCancel = typeof this.options.cancel === \"string\" ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length :\n\t\t\t\tfalse;\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once.\n\t\tif ( this._mouseMoved && !event.which ) {\n\n\t\t\t// Support: Safari <=8 - 9\n\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t// during a drag (#14461)\n\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\treturn this._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n} );\n","/*!\n * jQuery UI Resizable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: https://api.jqueryui.com/resizable/\n//>>demos: https://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./mouse\",\n\t\t\t\"../disable-selection\",\n\t\t\t\"../plugin\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.14.2\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tvar scroll,\n\t\t\thas = false,\n\t\t\toverflow = $( el ).css( \"overflow\" );\n\n\t\tif ( overflow === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( overflow === \"scroll\" ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tscroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\";\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\ttry {\n\t\t\tel[ scroll ] = 1;\n\t\t\thas = ( el[ scroll ] > 0 );\n\t\t\tel[ scroll ] = 0;\n\t\t} catch ( _e ) {\n\n\t\t\t// `el` might be a string, then setting `scroll` will throw\n\t\t\t// an error in strict mode; ignore it.\n\t\t}\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper'></div>\" ).css( {\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\n\t\t\t// Support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\t\tthis._addedHandles.remove();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" );\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tcase \"aspectRatio\":\n\t\t\tthis._aspectRatio = !!value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tthis._addedHandles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = String.prototype.trim.call( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tif ( !this.element.children( this.handles[ handle ] ).length ) {\n\t\t\t\t\tthis.element.append( axis );\n\t\t\t\t\tthis._addedHandles = this._addedHandles.add( axis );\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._addedHandles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor, calculatedSize,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tif ( !this._helper ) {\n\t\t\tcalculatedSize = this._calculateAdjustedElementDimensions( el );\n\t\t}\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: calculatedSize.width,\n\t\t\t\theight: calculatedSize.height\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: calculatedSize.width,\n\t\t\t\theight: calculatedSize.height\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t\tthis.helper.width( props.width );\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t\tthis.helper.height( props.height );\n\t\t}\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_calculateAdjustedElementDimensions: function( element ) {\n\t\tvar elWidth, elHeight, paddingBorder,\n\t\t\tce = element.get( 0 );\n\n\t\tif ( element.css( \"box-sizing\" ) !== \"content-box\" ||\n\t\t\t( !this._hasScroll( ce ) && !this._hasScroll( ce, \"left\" ) ) ) {\n\t\t\t\treturn {\n\t\t\t\t\theight: parseFloat( element.css( \"height\" ) ),\n\t\t\t\t\twidth: parseFloat( element.css( \"width\" ) )\n\t\t\t\t};\n\t\t}\n\n\t\t// Check if CSS inline styles are set and use those (usually from previous resizes)\n\t\telWidth = parseFloat( ce.style.width );\n\t\telHeight = parseFloat( ce.style.height );\n\n\t\tpaddingBorder = this._getPaddingPlusBorderDimensions( element );\n\t\telWidth = isNaN( elWidth ) ?\n\t\t\tthis._getElementTheoreticalSize( element, paddingBorder, \"width\" ) :\n\t\t\telWidth;\n\t\telHeight = isNaN( elHeight ) ?\n\t\t\tthis._getElementTheoreticalSize( element, paddingBorder, \"height\" ) :\n\t\t\telHeight;\n\n\t\treturn {\n\t\t\theight: elHeight,\n\t\t\twidth: elWidth\n\t\t};\n\t},\n\n\t_getElementTheoreticalSize: function( element, extraSize, dimension ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\tvar size = Math.max( 0, Math.ceil(\n\t\t\telement.get( 0 )[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\textraSize[ dimension ] -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine theoretical size.\n\t\t// Use an explicit zero to avoid NaN.\n\t\t// See https://github.com/jquery/jquery/issues/3964\n\t\t) ) || 0;\n\n\t\treturn size;\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div></div>\" ).css( { overflow: \"hidden\" } );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\tif ( n !== \"resize\" ) {\n\t\t\tthis._trigger( n, event, this.ui() );\n\t\t}\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll( ce ) ? ce.scrollHeight : ch );\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this ),\n\t\t\t\telSize = that._calculateAdjustedElementDimensions( el );\n\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: elSize.width, height: elSize.height,\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat === true && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nreturn $.ui.resizable;\n\n} );\n","/*!\n * jQuery UI Spinner 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: https://api.jqueryui.com/spinner/\n//>>demos: https://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./button\",\n\t\t\t\"../version\",\n\t\t\t\"../keycode\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\nfunction spinnerModifier( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\n$.widget( \"ui.spinner\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-spinner\": \"ui-corner-all\",\n\t\t\t\"ui-spinner-down\": \"ui-corner-br\",\n\t\t\t\"ui-spinner-up\": \"ui-corner-tr\"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\twheel: function( event ) {\n\t\t\tvar activeElement = this.document[ 0 ].activeElement;\n\t\t\tvar isActive = this.element[ 0 ] === activeElement;\n\t\t\tvar delta = event.deltaY || event.originalEvent && event.originalEvent.deltaY;\n\n\t\t\tif ( !isActive || !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? -1 : 1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\n\t\t// DEPRECATED\n\t\t// Kept for backwards compatibility. Please use the modern `wheel`\n\t\t// event. The `delta` parameter is provided by the jQuery Mousewheel\n\t\t// plugin if one is loaded.\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !event.isTrigger ) {\n\n\t\t\t\t// If this is not a trigger call, the `wheel` handler will\n\t\t\t\t// fire as well, let's not duplicate it.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar wheelEvent = $.Event( event );\n\t\t\twheelEvent.type = \"wheel\";\n\t\t\tif ( delta ) {\n\t\t\t\twheelEvent.deltaY = -delta;\n\t\t\t}\n\t\t\treturn this._events.wheel.call( this, wheelEvent );\n\t\t},\n\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === this.document[ 0 ].activeElement ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === this.document[ 0 ].activeElement;\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( \"<span>\" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t\"<a></a><a></a>\"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, \"ui-spinner\", \"ui-widget ui-widget-content\" );\n\t\tthis._addClass( \"ui-spinner-input\" );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( \"a\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.attr( \"aria-hidden\", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-button\": \"\"\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, \"ui-corner-all\" );\n\n\t\tthis._addClass( this.buttons.first(), \"ui-spinner-button ui-spinner-up\" );\n\t\tthis._addClass( this.buttons.last(), \"ui-spinner-button ui-spinner-down\" );\n\t\tthis.buttons.first().button( {\n\t\t\t\"icon\": this.options.icons.up,\n\t\t\t\"showLabel\": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t\"icon\": this.options.icons.down,\n\t\t\t\"showLabel\": false\n\t\t} );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn typeof incremental === \"function\" ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tfirst = this.buttons.first().find( \".ui-icon\" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( \".ui-icon\" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, \"ui-state-disabled\", !!value );\n\t\tthis.element.prop( \"disabled\", !!value );\n\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t},\n\n\t_setOptions: spinnerModifier( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifier( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifier( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifier( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifier( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifier( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( \"ui.spinner\", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn \"<span>\";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn \"<a></a><a></a>\";\n\t\t}\n\t} );\n}\n\nreturn $.ui.spinner;\n\n} );\n","/*!\n * jQuery UI Tabs 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: https://api.jqueryui.com/tabs/\n//>>demos: https://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../keycode\",\n\t\t\t\"../unique-id\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.widget( \"ui.tabs\", {\n\tversion: \"1.14.2\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t\"ui-tabs\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-nav\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-panel\": \"ui-corner-bottom\",\n\t\t\t\"ui-tabs-tab\": \"ui-corner-top\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: function( anchor ) {\n\t\tvar anchorUrl = new URL( anchor.href ),\n\t\t\tlocationUrl = new URL( location.href );\n\n\t\treturn anchor.hash.length > 1 &&\n\n\t\t\t// `href` may contain a hash but also username & password;\n\t\t\t// we want to ignore them, so we check the three fields\n\t\t\t// below instead.\n\t\t\tanchorUrl.origin === locationUrl.origin &&\n\t\t\tanchorUrl.pathname === locationUrl.pathname &&\n\t\t\tanchorUrl.search === locationUrl.search;\n\t},\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( \"ui-tabs\", \"ui-widget ui-widget-content\" );\n\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( Array.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.uniqueSort( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 ),\n\t\t\tlocationHashDecoded = decodeURIComponent( locationHash );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\t// If not found, decode the hash & try again.\n\t\t\t\t// See the comment in `_processTabs` under the `_isLocal` check\n\t\t\t\t// for more information.\n\t\t\t\tif ( active === null ) {\n\t\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHashDecoded ) {\n\t\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( this.document[ 0 ].activeElement ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( \"focus\" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( \"focus\" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, \"ui-tabs-active\", \"ui-state-active\" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( \"role\", \"tablist\" );\n\t\tthis._addClass( this.tablist, \"ui-tabs-nav\",\n\t\t\t\"ui-helper-reset ui-helper-clearfix ui-widget-header\" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( \"mousedown\" + this.eventNamespace, \"> li\", function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, \"ui-tabs-tab\", \"ui-state-default\" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, \"ui-tabs-anchor\" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\n\t\t\t\t// The \"scrolling to a fragment\" section of the HTML spec:\n\t\t\t\t// https://html.spec.whatwg.org/#scrolling-to-a-fragment\n\t\t\t\t// uses a concept of document's indicated part:\n\t\t\t\t// https://html.spec.whatwg.org/#the-indicated-part-of-the-document\n\t\t\t\t// Slightly below there's an algorithm to compute the indicated\n\t\t\t\t// part:\n\t\t\t\t// https://html.spec.whatwg.org/#the-indicated-part-of-the-document\n\t\t\t\t// First, the algorithm tries the hash as-is, without decoding.\n\t\t\t\t// Then, if one is not found, the same is attempted with a decoded\n\t\t\t\t// hash. Replicate this logic.\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( \"#\" + CSS.escape( panelId ) );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanelId = decodeURIComponent( panelId );\n\t\t\t\t\tpanel = that.element.find( \"#\" + CSS.escape( panelId ) );\n\t\t\t\t}\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( \"role\", \"tabpanel\" );\n\t\tthis._addClass( this.panels, \"ui-tabs-panel\", \"ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol, ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( Array.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( \"aria-disabled\", \"true\" );\n\t\t\t\tthis._addClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( \"aria-disabled\" );\n\t\t\t\tthis._removeClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( \"li\" ), \"ui-tabs-active\", \"ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr( {\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" +\n\t\t\t\tCSS.escape( index ) + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( \"role tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( \"role tabIndex \" +\n\t\t\t\t\t\"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\tif ( this.xhr.statusText !== \"canceled\" ) {\n\t\t\tthis._addClass( tab, \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\t\t\t\t\tpanel.html( response );\n\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\t\t\turl: anchor.attr( \"href\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( \"#\" + CSS.escape( id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( \"ui.tabs\", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, \"ui-tab\" );\n\t\t}\n\t} );\n}\n\nreturn $.ui.tabs;\n\n} );\n","/*! jQuery-QuickSearch - v2.4.0 - 2017-08-15\n* https://deuxhuithuit.github.io/quicksearch/\n* Copyright (c) 2013 Deux Huit Huit, Rik Lomas.\n* Copyright (c) 2017 Deux Huit Huit (https://deuxhuithuit.com/);\n* License MIT http://deuxhuithuit.mit-license.org */\n!function(a,b,c){\"use strict\";a.quicksearch={defaults:{delay:100,selector:null,stripeRows:null,loader:null,caseSensitive:!1,noResults:\"\",matchedResultsCount:0,keyCode:!1,bind:\"keyup search input\",resetBind:\"reset\",removeDiacritics:!1,minValLength:0,onBefore:a.noop,onAfter:a.noop,onValTooSmall:a.noop,onNoResultFound:null,show:function(){a(this).show()},hide:function(){a(this).hide()},prepareQuery:function(a){return a.toLowerCase().split(\" \")},testQuery:function(a,b,c){for(var d=0;d<a.length;d+=1)if(b.indexOf(a[d])===-1)return!1;return!0}},diacriticsRemovalMap:[{base:\"A\",letters:/[\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F]/g},{base:\"AA\",letters:/[\\uA732]/g},{base:\"AE\",letters:/[\\u00C6\\u01FC\\u01E2]/g},{base:\"AO\",letters:/[\\uA734]/g},{base:\"AU\",letters:/[\\uA736]/g},{base:\"AV\",letters:/[\\uA738\\uA73A]/g},{base:\"AY\",letters:/[\\uA73C]/g},{base:\"B\",letters:/[\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181]/g},{base:\"C\",letters:/[\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E]/g},{base:\"D\",letters:/[\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779]/g},{base:\"DZ\",letters:/[\\u01F1\\u01C4]/g},{base:\"Dz\",letters:/[\\u01F2\\u01C5]/g},{base:\"E\",letters:/[\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E]/g},{base:\"F\",letters:/[\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B]/g},{base:\"G\",letters:/[\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E]/g},{base:\"H\",letters:/[\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D]/g},{base:\"I\",letters:/[\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197]/g},{base:\"J\",letters:/[\\u004A\\u24BF\\uFF2A\\u0134\\u0248]/g},{base:\"K\",letters:/[\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2]/g},{base:\"L\",letters:/[\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780]/g},{base:\"LJ\",letters:/[\\u01C7]/g},{base:\"Lj\",letters:/[\\u01C8]/g},{base:\"M\",letters:/[\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C]/g},{base:\"N\",letters:/[\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4]/g},{base:\"NJ\",letters:/[\\u01CA]/g},{base:\"Nj\",letters:/[\\u01CB]/g},{base:\"O\",letters:/[\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C]/g},{base:\"OI\",letters:/[\\u01A2]/g},{base:\"OO\",letters:/[\\uA74E]/g},{base:\"OU\",letters:/[\\u0222]/g},{base:\"P\",letters:/[\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754]/g},{base:\"Q\",letters:/[\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A]/g},{base:\"R\",letters:/[\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782]/g},{base:\"S\",letters:/[\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784]/g},{base:\"T\",letters:/[\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786]/g},{base:\"TZ\",letters:/[\\uA728]/g},{base:\"U\",letters:/[\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244]/g},{base:\"V\",letters:/[\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245]/g},{base:\"VY\",letters:/[\\uA760]/g},{base:\"W\",letters:/[\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72]/g},{base:\"X\",letters:/[\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C]/g},{base:\"Y\",letters:/[\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE]/g},{base:\"Z\",letters:/[\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762]/g},{base:\"a\",letters:/[\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250]/g},{base:\"aa\",letters:/[\\uA733]/g},{base:\"ae\",letters:/[\\u00E6\\u01FD\\u01E3]/g},{base:\"ao\",letters:/[\\uA735]/g},{base:\"au\",letters:/[\\uA737]/g},{base:\"av\",letters:/[\\uA739\\uA73B]/g},{base:\"ay\",letters:/[\\uA73D]/g},{base:\"b\",letters:/[\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253]/g},{base:\"c\",letters:/[\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184]/g},{base:\"d\",letters:/[\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A]/g},{base:\"dz\",letters:/[\\u01F3\\u01C6]/g},{base:\"e\",letters:/[\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD]/g},{base:\"f\",letters:/[\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C]/g},{base:\"g\",letters:/[\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F]/g},{base:\"h\",letters:/[\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265]/g},{base:\"hv\",letters:/[\\u0195]/g},{base:\"i\",letters:/[\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131]/g},{base:\"j\",letters:/[\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249]/g},{base:\"k\",letters:/[\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3]/g},{base:\"l\",letters:/[\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747]/g},{base:\"lj\",letters:/[\\u01C9]/g},{base:\"m\",letters:/[\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F]/g},{base:\"n\",letters:/[\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5]/g},{base:\"nj\",letters:/[\\u01CC]/g},{base:\"o\",letters:/[\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275]/g},{base:\"oi\",letters:/[\\u01A3]/g},{base:\"ou\",letters:/[\\u0223]/g},{base:\"oo\",letters:/[\\uA74F]/g},{base:\"p\",letters:/[\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755]/g},{base:\"q\",letters:/[\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759]/g},{base:\"r\",letters:/[\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783]/g},{base:\"s\",letters:/[\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B]/g},{base:\"t\",letters:/[\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787]/g},{base:\"tz\",letters:/[\\uA729]/g},{base:\"u\",letters:/[\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289]/g},{base:\"v\",letters:/[\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C]/g},{base:\"vy\",letters:/[\\uA761]/g},{base:\"w\",letters:/[\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73]/g},{base:\"x\",letters:/[\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D]/g},{base:\"y\",letters:/[\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF]/g},{base:\"z\",letters:/[\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763]/g}]},a.fn.quicksearch=function(c,d){this.removeDiacritics=function(b){for(var c=a.quicksearch.diacriticsRemovalMap,d=0;d<c.length;d++)b=b.replace(c[d].letters,c[d].base);return b};var e,f,g,h,i=\"\",j=\"\",k=this,l=a.extend({},a.quicksearch.defaults,d);return l.noResults=l.noResults?a(l.noResults):a(),l.loader=l.loader?a(l.loader):a(),this.go=function(){var b,c=0,d=0,e=0,h=!0,m=0===i.replace(\" \",\"\").length;for(l.removeDiacritics&&(i=k.removeDiacritics(i)),b=l.prepareQuery(i),c=0,d=g.length;c<d;c++)b.length>0&&b[0].length<l.minValLength?(l.show.apply(g[c]),h=!1,e++):m||l.testQuery(b,f[c],g[c])?(l.show.apply(g[c]),h=!1,e++):l.hide.apply(g[c]);return h?a.isFunction(l.onNoResultFound)?l.onNoResultFound(this):this.results(!1):(this.results(!0),this.stripe()),this.matchedResultsCount=e,this.loader(!1),l.onAfter.call(this),j=i,this},this.search=function(a){i=a,k.trigger()},this.reset=function(){i=\"\",this.loader(!0),l.onBefore.call(this),b.clearTimeout(e),e=b.setTimeout(function(){k.go()},l.delay)},this.currentMatchedResults=function(){return this.matchedResultsCount},this.stripe=function(){if(\"object\"==typeof l.stripeRows&&null!==l.stripeRows){var b=l.stripeRows.join(\" \"),c=l.stripeRows.length;h.not(\":hidden\").each(function(d){a(this).removeClass(b).addClass(l.stripeRows[d%c])})}return this},this.strip_html=function(b){var c=b.replace(new RegExp(\"<[^<]+\\\\>\",\"g\"),\" \");return l.caseSensitive||(c=c.toLowerCase()),c=a.trim(c)},this.results=function(a){return l.noResults.length&&l.noResults[a?\"hide\":\"show\"](),this},this.loader=function(a){return l.loader.length&&l.loader[a?\"show\":\"hide\"](),this},this.cache=function(b){return b=\"undefined\"==typeof b||b,h=a(c).not(l.noResults),f=\"string\"==typeof l.selector?h.map(function(){return a(this).find(l.selector).map(function(){var a=k.strip_html(this.innerHTML);return l.removeDiacritics?k.removeDiacritics(a):a}).get().join(\" \")}):h.map(function(){var a=k.strip_html(this.innerHTML);return l.removeDiacritics?k.removeDiacritics(a):a}),g=h.map(function(){return this}),i=i||this.val()||\"\",b&&this.go(),this},this.trigger=function(){return i.length<l.minValLength&&i.length>j.length||i.length<l.minValLength-1&&i.length<j.length?(l.onValTooSmall.call(this,i),k.go()):(this.loader(!0),l.onBefore.call(this),b.clearTimeout(e),e=b.setTimeout(function(){k.go()},l.delay)),this},this.cache(),this.stripe(),this.loader(!1),this.each(function(){a(this).on(l.bind,function(b){if(l.keyCode){var c=b.keyCode||b.which;c===l.keyCode&&(i=a(this).val(),k.trigger())}else i=a(this).val(),k.trigger()}),a(this).on(l.resetBind,function(){i=\"\",k.reset()})})},b.module&&b.module.exports&&(module.exports=a.fn.quicksearch)}(jQuery,window||global);\n//# sourceMappingURL=jquery.quicksearch.min.js.map","/*!\n\nJSZip v3.10.2 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.2\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){if(\"string\"==typeof e)return\"string\";var t=Object.prototype.toString.call(e);return\"[object Array]\"===t?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&\"[object Uint8Array]\"===t?\"uint8array\":o.arraybuffer&&\"[object ArrayBuffer]\"===t?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))?void 0!==Blob.prototype.arrayBuffer?n.arrayBuffer():\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):u.Promise.reject(new Error(r+\" is a Blob, but we have no way of reading it.\")):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","/* jshint forin: false, bitwise: false */\n/*\nCopyright 2015-2018 Esri\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nA copy of the license and additional notices are located with the\nsource distribution at:\n\nhttp://github.com/Esri/lerc/\n\nContributors:  Johannes Schmid, (LERC v1)\n               Chayanika Khatua, (LERC v1)\n               Wenxue Ju (LERC v1, v2.x)\n*/\n\n/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */\n\n/**\n * a module for decoding LERC blobs\n * @module Lerc\n */\n(function() {\n  //the original LercDecode for Version 1\n  var LercDecode = (function() {\n\n    // WARNING: This decoder version can only read old version 1 Lerc blobs. Use with caution.\n\n    // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of\n    // the class was chosen to be future proof.\n\n    var CntZImage = {};\n\n    CntZImage.defaultNoDataValue = -3.4027999387901484e+38; // smallest Float32 value\n\n    /**\n     * Decode a LERC byte stream and return an object containing the pixel data and some required and optional\n     * information about it, such as the image's width and height.\n     *\n     * @param {ArrayBuffer} input The LERC input byte stream\n     * @param {object} [options] Decoding options, containing any of the following properties:\n     * @config {number} [inputOffset = 0]\n     *        Skip the first inputOffset bytes of the input byte stream. A valid LERC file is expected at that position.\n     * @config {Uint8Array} [encodedMask = null]\n     *        If specified, the decoder will not read mask information from the input and use the specified encoded\n     *        mask data instead. Mask header/data must not be present in the LERC byte stream in this case.\n     * @config {number} [noDataValue = LercCode.defaultNoDataValue]\n     *        Pixel value to use for masked pixels.\n     * @config {ArrayBufferView|Array} [pixelType = Float32Array]\n     *        The desired type of the pixelData array in the return value. Note that it is the caller's responsibility to\n     *        provide an appropriate noDataValue if the default pixelType is overridden.\n     * @config {boolean} [returnMask = false]\n     *        If true, the return value will contain a maskData property of type Uint8Array which has one element per\n     *        pixel, the value of which is 1 or 0 depending on whether that pixel's data is present or masked. If the\n     *        input LERC data does not contain a mask, maskData will not be returned.\n     * @config {boolean} [returnEncodedMask = false]\n     *        If true, the return value will contain a encodedMaskData property, which can be passed into encode() as\n     *        encodedMask.\n     * @config {boolean} [returnFileInfo = false]\n     *        If true, the return value will have a fileInfo property that contains metadata obtained from the\n     *        LERC headers and the decoding process.\n     * @config {boolean} [computeUsedBitDepths = false]\n     *        If true, the fileInfo property in the return value will contain the set of all block bit depths\n     *        encountered during decoding. Will only have an effect if returnFileInfo option is true.\n     * @returns {{width, height, pixelData, minValue, maxValue, noDataValue, maskData, encodedMaskData, fileInfo}}\n     */\n    CntZImage.decode = function(input, options) {\n      options = options || {};\n\n      var skipMask = options.encodedMaskData || (options.encodedMaskData === null);\n      var parsedData = parse(input, options.inputOffset || 0, skipMask);\n\n      var noDataValue = (options.noDataValue !== null) ? options.noDataValue : CntZImage.defaultNoDataValue;\n\n      var uncompressedData = uncompressPixelValues(parsedData, options.pixelType || Float32Array,\n        options.encodedMaskData, noDataValue, options.returnMask);\n\n      var result = {\n        width: parsedData.width,\n        height: parsedData.height,\n        pixelData: uncompressedData.resultPixels,\n        minValue: uncompressedData.minValue,\n        maxValue: parsedData.pixels.maxValue,\n        noDataValue: noDataValue\n      };\n\n      if (uncompressedData.resultMask) {\n        result.maskData = uncompressedData.resultMask;\n      }\n\n      if (options.returnEncodedMask && parsedData.mask) {\n        result.encodedMaskData = parsedData.mask.bitset ? parsedData.mask.bitset : null;\n      }\n\n      if (options.returnFileInfo) {\n        result.fileInfo = formatFileInfo(parsedData);\n        if (options.computeUsedBitDepths) {\n          result.fileInfo.bitDepths = computeUsedBitDepths(parsedData);\n        }\n      }\n\n      return result;\n    };\n\n    var uncompressPixelValues = function(data, TypedArrayClass, maskBitset, noDataValue, storeDecodedMask) {\n      var blockIdx = 0;\n      var numX = data.pixels.numBlocksX;\n      var numY = data.pixels.numBlocksY;\n      var blockWidth = Math.floor(data.width / numX);\n      var blockHeight = Math.floor(data.height / numY);\n      var scale = 2 * data.maxZError;\n      var minValue = Number.MAX_VALUE, currentValue;\n      maskBitset = maskBitset || ((data.mask) ? data.mask.bitset : null);\n\n      var resultPixels, resultMask;\n      resultPixels = new TypedArrayClass(data.width * data.height);\n      if (storeDecodedMask && maskBitset) {\n        resultMask = new Uint8Array(data.width * data.height);\n      }\n      var blockDataBuffer = new Float32Array(blockWidth * blockHeight);\n\n      var xx, yy;\n      for (var y = 0; y <= numY; y++) {\n        var thisBlockHeight = (y !== numY) ? blockHeight : (data.height % numY);\n        if (thisBlockHeight === 0) {\n          continue;\n        }\n        for (var x = 0; x <= numX; x++) {\n          var thisBlockWidth = (x !== numX) ? blockWidth : (data.width % numX);\n          if (thisBlockWidth === 0) {\n            continue;\n          }\n\n          var outPtr = y * data.width * blockHeight + x * blockWidth;\n          var outStride = data.width - thisBlockWidth;\n\n          var block = data.pixels.blocks[blockIdx];\n\n          var blockData, blockPtr, constValue;\n          if (block.encoding < 2) {\n            // block is either uncompressed or bit-stuffed (encodings 0 and 1)\n            if (block.encoding === 0) {\n              // block is uncompressed\n              blockData = block.rawData;\n            } else {\n              // block is bit-stuffed\n              unstuff(block.stuffedData, block.bitsPerPixel, block.numValidPixels, block.offset, scale, blockDataBuffer, data.pixels.maxValue);\n              blockData = blockDataBuffer;\n            }\n            blockPtr = 0;\n          }\n          else if (block.encoding === 2) {\n            // block is all 0\n            constValue = 0;\n          }\n          else {\n            // block has constant value (encoding === 3)\n            constValue = block.offset;\n          }\n\n          var maskByte;\n          if (maskBitset) {\n            for (yy = 0; yy < thisBlockHeight; yy++) {\n              if (outPtr & 7) {\n                //\n                maskByte = maskBitset[outPtr >> 3];\n                maskByte <<= outPtr & 7;\n              }\n              for (xx = 0; xx < thisBlockWidth; xx++) {\n                if (!(outPtr & 7)) {\n                  // read next byte from mask\n                  maskByte = maskBitset[outPtr >> 3];\n                }\n                if (maskByte & 128) {\n                  // pixel data present\n                  if (resultMask) {\n                    resultMask[outPtr] = 1;\n                  }\n                  currentValue = (block.encoding < 2) ? blockData[blockPtr++] : constValue;\n                  minValue = minValue > currentValue ? currentValue : minValue;\n                  resultPixels[outPtr++] = currentValue;\n                } else {\n                  // pixel data not present\n                  if (resultMask) {\n                    resultMask[outPtr] = 0;\n                  }\n                  resultPixels[outPtr++] = noDataValue;\n                }\n                maskByte <<= 1;\n              }\n              outPtr += outStride;\n            }\n          } else {\n            // mask not present, simply copy block over\n            if (block.encoding < 2) {\n              // duplicating this code block for performance reasons\n              // blockData case:\n              for (yy = 0; yy < thisBlockHeight; yy++) {\n                for (xx = 0; xx < thisBlockWidth; xx++) {\n                  currentValue = blockData[blockPtr++];\n                  minValue = minValue > currentValue ? currentValue : minValue;\n                  resultPixels[outPtr++] = currentValue;\n                }\n                outPtr += outStride;\n              }\n            }\n            else {\n              // constValue case:\n              minValue = minValue > constValue ? constValue : minValue;\n              for (yy = 0; yy < thisBlockHeight; yy++) {\n                for (xx = 0; xx < thisBlockWidth; xx++) {\n                  resultPixels[outPtr++] = constValue;\n                }\n                outPtr += outStride;\n              }\n            }\n          }\n          if ((block.encoding === 1) && (blockPtr !== block.numValidPixels)) {\n            throw \"Block and Mask do not match\";\n          }\n          blockIdx++;\n        }\n      }\n\n      return {\n        resultPixels: resultPixels,\n        resultMask: resultMask,\n        minValue: minValue\n      };\n    };\n\n    var formatFileInfo = function(data) {\n      return {\n        \"fileIdentifierString\": data.fileIdentifierString,\n        \"fileVersion\": data.fileVersion,\n        \"imageType\": data.imageType,\n        \"height\": data.height,\n        \"width\": data.width,\n        \"maxZError\": data.maxZError,\n        \"eofOffset\": data.eofOffset,\n        \"mask\": data.mask ? {\n          \"numBlocksX\": data.mask.numBlocksX,\n          \"numBlocksY\": data.mask.numBlocksY,\n          \"numBytes\": data.mask.numBytes,\n          \"maxValue\": data.mask.maxValue\n        } : null,\n        \"pixels\": {\n          \"numBlocksX\": data.pixels.numBlocksX,\n          \"numBlocksY\": data.pixels.numBlocksY,\n          \"numBytes\": data.pixels.numBytes,\n          \"maxValue\": data.pixels.maxValue,\n          \"noDataValue\": data.noDataValue\n        }\n      };\n    };\n\n    var computeUsedBitDepths = function(data) {\n      var numBlocks = data.pixels.numBlocksX * data.pixels.numBlocksY;\n      var bitDepths = {};\n      for (var i = 0; i < numBlocks; i++) {\n        var block = data.pixels.blocks[i];\n        if (block.encoding === 0) {\n          bitDepths.float32 = true;\n        } else if (block.encoding === 1) {\n          bitDepths[block.bitsPerPixel] = true;\n        } else {\n          bitDepths[0] = true;\n        }\n      }\n\n      return Object.keys(bitDepths);\n    };\n\n    var parse = function(input, fp, skipMask) {\n      var data = {};\n\n      // File header\n      var fileIdView = new Uint8Array(input, fp, 10);\n      data.fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n      if (data.fileIdentifierString.trim() !== \"CntZImage\") {\n        throw \"Unexpected file identifier string: \" + data.fileIdentifierString;\n      }\n      fp += 10;\n      var view = new DataView(input, fp, 24);\n      data.fileVersion = view.getInt32(0, true);\n      data.imageType = view.getInt32(4, true);\n      data.height = view.getUint32(8, true);\n      data.width = view.getUint32(12, true);\n      data.maxZError = view.getFloat64(16, true);\n      fp += 24;\n\n      // Mask Header\n      if (!skipMask) {\n        view = new DataView(input, fp, 16);\n        data.mask = {};\n        data.mask.numBlocksY = view.getUint32(0, true);\n        data.mask.numBlocksX = view.getUint32(4, true);\n        data.mask.numBytes = view.getUint32(8, true);\n        data.mask.maxValue = view.getFloat32(12, true);\n        fp += 16;\n\n        // Mask Data\n        if (data.mask.numBytes > 0) {\n          var bitset = new Uint8Array(Math.ceil(data.width * data.height / 8));\n          view = new DataView(input, fp, data.mask.numBytes);\n          var cnt = view.getInt16(0, true);\n          var ip = 2, op = 0;\n          do {\n            if (cnt > 0) {\n              while (cnt--) { bitset[op++] = view.getUint8(ip++); }\n            } else {\n              var val = view.getUint8(ip++);\n              cnt = -cnt;\n              while (cnt--) { bitset[op++] = val; }\n            }\n            cnt = view.getInt16(ip, true);\n            ip += 2;\n          } while (ip < data.mask.numBytes);\n          if ((cnt !== -32768) || (op < bitset.length)) {\n            throw \"Unexpected end of mask RLE encoding\";\n          }\n          data.mask.bitset = bitset;\n          fp += data.mask.numBytes;\n        }\n        else if ((data.mask.numBytes | data.mask.numBlocksY | data.mask.maxValue) === 0) {  // Special case, all nodata\n          data.mask.bitset = new Uint8Array(Math.ceil(data.width * data.height / 8));\n        }\n      }\n\n      // Pixel Header\n      view = new DataView(input, fp, 16);\n      data.pixels = {};\n      data.pixels.numBlocksY = view.getUint32(0, true);\n      data.pixels.numBlocksX = view.getUint32(4, true);\n      data.pixels.numBytes = view.getUint32(8, true);\n      data.pixels.maxValue = view.getFloat32(12, true);\n      fp += 16;\n\n      var numBlocksX = data.pixels.numBlocksX;\n      var numBlocksY = data.pixels.numBlocksY;\n      // the number of blocks specified in the header does not take into account the blocks at the end of\n      // each row/column with a special width/height that make the image complete in case the width is not\n      // evenly divisible by the number of blocks.\n      var actualNumBlocksX = numBlocksX + ((data.width % numBlocksX) > 0 ? 1 : 0);\n      var actualNumBlocksY = numBlocksY + ((data.height % numBlocksY) > 0 ? 1 : 0);\n      data.pixels.blocks = new Array(actualNumBlocksX * actualNumBlocksY);\n      var blockI = 0;\n      for (var blockY = 0; blockY < actualNumBlocksY; blockY++) {\n        for (var blockX = 0; blockX < actualNumBlocksX; blockX++) {\n\n          // Block\n          var size = 0;\n          var bytesLeft = input.byteLength - fp;\n          view = new DataView(input, fp, Math.min(10, bytesLeft));\n          var block = {};\n          data.pixels.blocks[blockI++] = block;\n          var headerByte = view.getUint8(0); size++;\n          block.encoding = headerByte & 63;\n          if (block.encoding > 3) {\n            throw \"Invalid block encoding (\" + block.encoding + \")\";\n          }\n          if (block.encoding === 2) {\n            fp++;\n            continue;\n          }\n          if ((headerByte !== 0) && (headerByte !== 2)) {\n            headerByte >>= 6;\n            block.offsetType = headerByte;\n            if (headerByte === 2) {\n              block.offset = view.getInt8(1); size++;\n            } else if (headerByte === 1) {\n              block.offset = view.getInt16(1, true); size += 2;\n            } else if (headerByte === 0) {\n              block.offset = view.getFloat32(1, true); size += 4;\n            } else {\n              throw \"Invalid block offset type\";\n            }\n\n            if (block.encoding === 1) {\n              headerByte = view.getUint8(size); size++;\n              block.bitsPerPixel = headerByte & 63;\n              headerByte >>= 6;\n              block.numValidPixelsType = headerByte;\n              if (headerByte === 2) {\n                block.numValidPixels = view.getUint8(size); size++;\n              } else if (headerByte === 1) {\n                block.numValidPixels = view.getUint16(size, true); size += 2;\n              } else if (headerByte === 0) {\n                block.numValidPixels = view.getUint32(size, true); size += 4;\n              } else {\n                throw \"Invalid valid pixel count type\";\n              }\n            }\n          }\n          fp += size;\n\n          if (block.encoding === 3) {\n            continue;\n          }\n\n          var arrayBuf, store8;\n          if (block.encoding === 0) {\n            var numPixels = (data.pixels.numBytes - 1) / 4;\n            if (numPixels !== Math.floor(numPixels)) {\n              throw \"uncompressed block has invalid length\";\n            }\n            arrayBuf = new ArrayBuffer(numPixels * 4);\n            store8 = new Uint8Array(arrayBuf);\n            store8.set(new Uint8Array(input, fp, numPixels * 4));\n            var rawData = new Float32Array(arrayBuf);\n            block.rawData = rawData;\n            fp += numPixels * 4;\n          } else if (block.encoding === 1) {\n            var dataBytes = Math.ceil(block.numValidPixels * block.bitsPerPixel / 8);\n            var dataWords = Math.ceil(dataBytes / 4);\n            arrayBuf = new ArrayBuffer(dataWords * 4);\n            store8 = new Uint8Array(arrayBuf);\n            store8.set(new Uint8Array(input, fp, dataBytes));\n            block.stuffedData = new Uint32Array(arrayBuf);\n            fp += dataBytes;\n          }\n        }\n      }\n      data.eofOffset = fp;\n      return data;\n    };\n\n    var unstuff = function(src, bitsPerPixel, numPixels, offset, scale, dest, maxValue) {\n      var bitMask = (1 << bitsPerPixel) - 1;\n      var i = 0, o;\n      var bitsLeft = 0;\n      var n, buffer;\n      var nmax = Math.ceil((maxValue - offset) / scale);\n      // get rid of trailing bytes that are already part of next block\n      var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n      src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n      for (o = 0; o < numPixels; o++) {\n        if (bitsLeft === 0) {\n          buffer = src[i++];\n          bitsLeft = 32;\n        }\n        if (bitsLeft >= bitsPerPixel) {\n          n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n          bitsLeft -= bitsPerPixel;\n        } else {\n          var missingBits = (bitsPerPixel - bitsLeft);\n          n = ((buffer & bitMask) << missingBits) & bitMask;\n          buffer = src[i++];\n          bitsLeft = 32 - missingBits;\n          n += (buffer >>> bitsLeft);\n        }\n        //pixel values may exceed max due to quantization\n        dest[o] = n < nmax ? offset + n * scale : maxValue;\n      }\n      return dest;\n    };\n\n    return CntZImage;\n  })();\n\n  //version 2. Supports 2.1, 2.2, 2.3\n  var Lerc2Decode = (function() {\n    \"use strict\";\n    // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of\n    // the class was chosen to be future proof, following LercDecode.\n\n    /*****************************************\n    * private static class bitsutffer used by Lerc2Decode\n    *******************************************/\n    var BitStuffer = {\n      //methods ending with 2 are for the new byte order used by Lerc2.3 and above.\n      //originalUnstuff is used to unpack Huffman code table. code is duplicated to unstuffx for performance reasons.\n      unstuff: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) {\n        var bitMask = (1 << bitsPerPixel) - 1;\n        var i = 0, o;\n        var bitsLeft = 0;\n        var n, buffer, missingBits, nmax;\n\n        // get rid of trailing bytes that are already part of next block\n        var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n        src[src.length - 1] <<= 8 * numInvalidTailBytes;\n        if (lutArr) {\n          for (o = 0; o < numPixels; o++) {\n            if (bitsLeft === 0) {\n              buffer = src[i++];\n              bitsLeft = 32;\n            }\n            if (bitsLeft >= bitsPerPixel) {\n              n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n              bitsLeft -= bitsPerPixel;\n            }\n            else {\n              missingBits = (bitsPerPixel - bitsLeft);\n              n = ((buffer & bitMask) << missingBits) & bitMask;\n              buffer = src[i++];\n              bitsLeft = 32 - missingBits;\n              n += (buffer >>> bitsLeft);\n            }\n            dest[o] = lutArr[n];//offset + lutArr[n] * scale;\n          }\n        }\n        else {\n          nmax = Math.ceil((maxValue - offset) / scale);\n          for (o = 0; o < numPixels; o++) {\n            if (bitsLeft === 0) {\n              buffer = src[i++];\n              bitsLeft = 32;\n            }\n            if (bitsLeft >= bitsPerPixel) {\n              n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n              bitsLeft -= bitsPerPixel;\n            }\n            else {\n              missingBits = (bitsPerPixel - bitsLeft);\n              n = ((buffer & bitMask) << missingBits) & bitMask;\n              buffer = src[i++];\n              bitsLeft = 32 - missingBits;\n              n += (buffer >>> bitsLeft);\n            }\n            //pixel values may exceed max due to quantization\n            dest[o] = n < nmax ? offset + n * scale : maxValue;\n          }\n        }\n      },\n\n      unstuffLUT: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) {\n        var bitMask = (1 << bitsPerPixel) - 1;\n        var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0;\n        var buffer;\n        var dest = [];\n\n        // get rid of trailing bytes that are already part of next block\n        var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n        src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n        var nmax = Math.ceil((maxValue - offset) / scale);\n        for (o = 0; o < numPixels; o++) {\n          if (bitsLeft === 0) {\n            buffer = src[i++];\n            bitsLeft = 32;\n          }\n          if (bitsLeft >= bitsPerPixel) {\n            n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n            bitsLeft -= bitsPerPixel;\n          } else {\n            missingBits = (bitsPerPixel - bitsLeft);\n            n = ((buffer & bitMask) << missingBits) & bitMask;\n            buffer = src[i++];\n            bitsLeft = 32 - missingBits;\n            n += (buffer >>> bitsLeft);\n          }\n          //dest.push(n);\n          dest[o] = n < nmax ? offset + n * scale : maxValue;\n        }\n        dest.unshift(offset);//1st one\n        return dest;\n      },\n\n      unstuff2: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) {\n        var bitMask = (1 << bitsPerPixel) - 1;\n        var i = 0, o;\n        var bitsLeft = 0, bitPos = 0;\n        var n, buffer, missingBits;\n        if (lutArr) {\n          for (o = 0; o < numPixels; o++) {\n            if (bitsLeft === 0) {\n              buffer = src[i++];\n              bitsLeft = 32;\n              bitPos = 0;\n            }\n            if (bitsLeft >= bitsPerPixel) {\n              n = ((buffer >>> bitPos) & bitMask);\n              bitsLeft -= bitsPerPixel;\n              bitPos += bitsPerPixel;\n            } else {\n              missingBits = (bitsPerPixel - bitsLeft);\n              n = (buffer >>> bitPos) & bitMask;\n              buffer = src[i++];\n              bitsLeft = 32 - missingBits;\n              n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n              bitPos = missingBits;\n            }\n            dest[o] = lutArr[n];\n          }\n        }\n        else {\n          var nmax = Math.ceil((maxValue - offset) / scale);\n          for (o = 0; o < numPixels; o++) {\n            if (bitsLeft === 0) {\n              buffer = src[i++];\n              bitsLeft = 32;\n              bitPos = 0;\n            }\n            if (bitsLeft >= bitsPerPixel) {\n              //no unsigned left shift\n              n = ((buffer >>> bitPos) & bitMask);\n              bitsLeft -= bitsPerPixel;\n              bitPos += bitsPerPixel;\n            } else {\n              missingBits = (bitsPerPixel - bitsLeft);\n              n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n              buffer = src[i++];\n              bitsLeft = 32 - missingBits;\n              n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n              bitPos = missingBits;\n            }\n            //pixel values may exceed max due to quantization\n            dest[o] = n < nmax ? offset + n * scale : maxValue;\n          }\n        }\n        return dest;\n      },\n\n      unstuffLUT2: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) {\n        var bitMask = (1 << bitsPerPixel) - 1;\n        var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0, bitPos = 0;\n        var buffer;\n        var dest = [];\n        var nmax = Math.ceil((maxValue - offset) / scale);\n        for (o = 0; o < numPixels; o++) {\n          if (bitsLeft === 0) {\n            buffer = src[i++];\n            bitsLeft = 32;\n            bitPos = 0;\n          }\n          if (bitsLeft >= bitsPerPixel) {\n            //no unsigned left shift\n            n = ((buffer >>> bitPos) & bitMask);\n            bitsLeft -= bitsPerPixel;\n            bitPos += bitsPerPixel;\n          } else {\n            missingBits = (bitsPerPixel - bitsLeft);\n            n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n            buffer = src[i++];\n            bitsLeft = 32 - missingBits;\n            n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n            bitPos = missingBits;\n          }\n          //dest.push(n);\n          dest[o] = n < nmax ? offset + n * scale : maxValue;\n        }\n        dest.unshift(offset);\n        return dest;\n      },\n\n      originalUnstuff: function(src, dest, bitsPerPixel, numPixels) {\n        var bitMask = (1 << bitsPerPixel) - 1;\n        var i = 0, o;\n        var bitsLeft = 0;\n        var n, buffer, missingBits;\n\n        // get rid of trailing bytes that are already part of next block\n        var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n        src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n        for (o = 0; o < numPixels; o++) {\n          if (bitsLeft === 0) {\n            buffer = src[i++];\n            bitsLeft = 32;\n          }\n          if (bitsLeft >= bitsPerPixel) {\n            n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n            bitsLeft -= bitsPerPixel;\n          }\n          else {\n            missingBits = (bitsPerPixel - bitsLeft);\n            n = ((buffer & bitMask) << missingBits) & bitMask;\n            buffer = src[i++];\n            bitsLeft = 32 - missingBits;\n            n += (buffer >>> bitsLeft);\n          }\n          dest[o] = n;\n        }\n        return dest;\n      },\n\n      originalUnstuff2: function(src, dest, bitsPerPixel, numPixels) {\n        var bitMask = (1 << bitsPerPixel) - 1;\n        var i = 0, o;\n        var bitsLeft = 0, bitPos = 0;\n        var n, buffer, missingBits;\n        //micro-optimizations\n        for (o = 0; o < numPixels; o++) {\n          if (bitsLeft === 0) {\n            buffer = src[i++];\n            bitsLeft = 32;\n            bitPos = 0;\n          }\n          if (bitsLeft >= bitsPerPixel) {\n            //no unsigned left shift\n            n = ((buffer >>> bitPos) & bitMask);\n            bitsLeft -= bitsPerPixel;\n            bitPos += bitsPerPixel;\n          } else {\n            missingBits = (bitsPerPixel - bitsLeft);\n            n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n            buffer = src[i++];\n            bitsLeft = 32 - missingBits;\n            n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n            bitPos = missingBits;\n          }\n          dest[o] = n;\n        }\n        return dest;\n      }\n    };\n\n    /*****************************************\n    *private static class used by Lerc2Decode\n    ******************************************/\n    var Lerc2Helpers = {\n      HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, treat it like constant\n      computeChecksumFletcher32: function(input) {\n\n        var sum1 = 0xffff, sum2 = 0xffff;\n        var len = input.length;\n        var words = Math.floor(len / 2);\n        var i = 0;\n        while (words) {\n          var tlen = (words >= 359) ? 359 : words;\n          words -= tlen;\n          do {\n            sum1 += (input[i++] << 8);\n            sum2 += sum1 += input[i++];\n          } while (--tlen);\n\n          sum1 = (sum1 & 0xffff) + (sum1 >>> 16);\n          sum2 = (sum2 & 0xffff) + (sum2 >>> 16);\n        }\n\n        // add the straggler byte if it exists\n        if (len & 1) {\n          sum2 += sum1 += (input[i] << 8);\n        }\n        // second reduction step to reduce sums to 16 bits\n        sum1 = (sum1 & 0xffff) + (sum1 >>> 16);\n        sum2 = (sum2 & 0xffff) + (sum2 >>> 16);\n\n        return (sum2 << 16 | sum1) >>> 0;\n      },\n\n      readHeaderInfo: function(input, data) {\n        var ptr = data.ptr;\n        var fileIdView = new Uint8Array(input, ptr, 6);\n        var headerInfo = {};\n        headerInfo.fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n        if (headerInfo.fileIdentifierString.lastIndexOf(\"Lerc2\", 0) !== 0) {\n          throw \"Unexpected file identifier string (expect Lerc2 ): \" + headerInfo.fileIdentifierString;\n        }\n        ptr += 6;\n        var view = new DataView(input, ptr, 8);\n        var fileVersion = view.getInt32(0, true);\n        headerInfo.fileVersion = fileVersion;\n        ptr += 4;\n        if (fileVersion >= 3) {\n          headerInfo.checksum = view.getUint32(4, true); //nrows\n          ptr += 4;\n        }\n\n        //keys start from here\n        view = new DataView(input, ptr, 12);\n        headerInfo.height = view.getUint32(0, true); //nrows\n        headerInfo.width = view.getUint32(4, true); //ncols\n        ptr += 8;\n        if (fileVersion >= 4) {\n          headerInfo.numDims = view.getUint32(8, true);\n          ptr += 4;\n        }\n        else {\n          headerInfo.numDims = 1;\n        }\n\n        view = new DataView(input, ptr, 40);\n        headerInfo.numValidPixel = view.getUint32(0, true);\n        headerInfo.microBlockSize = view.getInt32(4, true);\n        headerInfo.blobSize = view.getInt32(8, true);\n        headerInfo.imageType = view.getInt32(12, true);\n\n        headerInfo.maxZError = view.getFloat64(16, true);\n        headerInfo.zMin = view.getFloat64(24, true);\n        headerInfo.zMax = view.getFloat64(32, true);\n        ptr += 40;\n        data.headerInfo = headerInfo;\n        data.ptr = ptr;\n\n        var checksum, keyLength;\n        if (fileVersion >= 3) {\n          keyLength = fileVersion >= 4 ? 52 : 48;\n          checksum = this.computeChecksumFletcher32(new Uint8Array(input, ptr - keyLength, headerInfo.blobSize - 14));\n          if (checksum !== headerInfo.checksum) {\n            throw \"Checksum failed.\";\n          }\n        }\n        return true;\n      },\n\n      checkMinMaxRanges: function(input, data) {\n        var headerInfo = data.headerInfo;\n        var OutPixelTypeArray = this.getDataTypeArray(headerInfo.imageType);\n        var rangeBytes = headerInfo.numDims * this.getDataTypeSize(headerInfo.imageType);\n        var minValues = this.readSubArray(input, data.ptr, OutPixelTypeArray, rangeBytes);\n        var maxValues = this.readSubArray(input, data.ptr + rangeBytes, OutPixelTypeArray, rangeBytes);\n        data.ptr += (2 * rangeBytes);\n        var i, equal = true;\n        for (i = 0; i < headerInfo.numDims; i++) {\n          if (minValues[i] !== maxValues[i]) {\n            equal = false;\n            break;\n          }\n        }\n        headerInfo.minValues = minValues;\n        headerInfo.maxValues = maxValues;\n        return equal;\n      },\n\n      readSubArray: function(input, ptr, OutPixelTypeArray, numBytes) {\n        var rawData;\n        if (OutPixelTypeArray === Uint8Array) {\n          rawData = new Uint8Array(input, ptr, numBytes);\n        }\n        else {\n          var arrayBuf = new ArrayBuffer(numBytes);\n          var store8 = new Uint8Array(arrayBuf);\n          store8.set(new Uint8Array(input, ptr, numBytes));\n          rawData = new OutPixelTypeArray(arrayBuf);\n        }\n        return rawData;\n      },\n\n      readMask: function(input, data) {\n        var ptr = data.ptr;\n        var headerInfo = data.headerInfo;\n        var numPixels = headerInfo.width * headerInfo.height;\n        var numValidPixel = headerInfo.numValidPixel;\n\n        var view = new DataView(input, ptr, 4);\n        var mask = {};\n        mask.numBytes = view.getUint32(0, true);\n        ptr += 4;\n\n        // Mask Data\n        if ((0 === numValidPixel || numPixels === numValidPixel) && 0 !== mask.numBytes) {\n          throw (\"invalid mask\");\n        }\n        var bitset, resultMask;\n        if (numValidPixel === 0) {\n          bitset = new Uint8Array(Math.ceil(numPixels / 8));\n          mask.bitset = bitset;\n          resultMask = new Uint8Array(numPixels);\n          data.pixels.resultMask = resultMask;\n          ptr += mask.numBytes;\n        }// ????? else if (data.mask.numBytes > 0 && data.mask.numBytes< data.numValidPixel) {\n        else if (mask.numBytes > 0) {\n          bitset = new Uint8Array(Math.ceil(numPixels / 8));\n          view = new DataView(input, ptr, mask.numBytes);\n          var cnt = view.getInt16(0, true);\n          var ip = 2, op = 0, val = 0;\n          do {\n            if (cnt > 0) {\n              while (cnt--) { bitset[op++] = view.getUint8(ip++); }\n            } else {\n              val = view.getUint8(ip++);\n              cnt = -cnt;\n              while (cnt--) { bitset[op++] = val; }\n            }\n            cnt = view.getInt16(ip, true);\n            ip += 2;\n          } while (ip < mask.numBytes);\n          if ((cnt !== -32768) || (op < bitset.length)) {\n            throw \"Unexpected end of mask RLE encoding\";\n          }\n\n          resultMask = new Uint8Array(numPixels);\n          var mb = 0, k = 0;\n\n          for (k = 0; k < numPixels; k++) {\n            if (k & 7) {\n              mb = bitset[k >> 3];\n              mb <<= k & 7;\n            }\n            else {\n              mb = bitset[k >> 3];\n            }\n            if (mb & 128) {\n              resultMask[k] = 1;\n            }\n          }\n          data.pixels.resultMask = resultMask;\n\n          mask.bitset = bitset;\n          ptr += mask.numBytes;\n        }\n        data.ptr = ptr;\n        data.mask = mask;\n        return true;\n      },\n\n      readDataOneSweep: function(input, data, OutPixelTypeArray) {\n        var ptr = data.ptr;\n        var headerInfo = data.headerInfo;\n        var numDims = headerInfo.numDims;\n        var numPixels = headerInfo.width * headerInfo.height;\n        var imageType = headerInfo.imageType;\n        var numBytes = headerInfo.numValidPixel * Lerc2Helpers.getDataTypeSize(imageType) * numDims;\n        //data.pixels.numBytes = numBytes;\n        var rawData;\n        var mask = data.pixels.resultMask;\n        if (OutPixelTypeArray === Uint8Array) {\n          rawData = new Uint8Array(input, ptr, numBytes);\n        }\n        else {\n          var arrayBuf = new ArrayBuffer(numBytes);\n          var store8 = new Uint8Array(arrayBuf);\n          store8.set(new Uint8Array(input, ptr, numBytes));\n          rawData = new OutPixelTypeArray(arrayBuf);\n        }\n        if (rawData.length === numPixels * numDims) {\n          data.pixels.resultPixels = rawData;\n        }\n        else  //mask\n        {\n          data.pixels.resultPixels = new OutPixelTypeArray(numPixels * numDims);\n          var z = 0, k = 0, i = 0, nStart = 0;\n          if (numDims > 1) {\n            for (i=0; i < numDims; i++) {\n              nStart = i * numPixels;\n              for (k = 0; k < numPixels; k++) {\n                if (mask[k]) {\n                  data.pixels.resultPixels[nStart + k] = rawData[z++];\n                }\n              }\n            }\n          }\n          else {\n            for (k = 0; k < numPixels; k++) {\n              if (mask[k]) {\n                data.pixels.resultPixels[k] = rawData[z++];\n              }\n            }\n          }\n        }\n        ptr += numBytes;\n        data.ptr = ptr;       //return data;\n        return true;\n      },\n\n      readHuffmanTree: function(input, data) {\n        var BITS_MAX = this.HUFFMAN_LUT_BITS_MAX; //8 is slow for the large test image\n        //var size_max = 1 << BITS_MAX;\n        /* ************************\n         * reading code table\n         *************************/\n        var view = new DataView(input, data.ptr, 16);\n        data.ptr += 16;\n        var version = view.getInt32(0, true);\n        if (version < 2) {\n          throw \"unsupported Huffman version\";\n        }\n        var size = view.getInt32(4, true);\n        var i0 = view.getInt32(8, true);\n        var i1 = view.getInt32(12, true);\n        if (i0 >= i1) {\n          return false;\n        }\n        var blockDataBuffer = new Uint32Array(i1 - i0);\n        Lerc2Helpers.decodeBits(input, data, blockDataBuffer);\n        var codeTable = []; //size\n        var i, j, k, len;\n\n        for (i = i0; i < i1; i++) {\n          j = i - (i < size ? 0 : size);//wrap around\n          codeTable[j] = { first: blockDataBuffer[i - i0], second: null };\n        }\n\n        var dataBytes = input.byteLength - data.ptr;\n        var dataWords = Math.ceil(dataBytes / 4);\n        var arrayBuf = new ArrayBuffer(dataWords * 4);\n        var store8 = new Uint8Array(arrayBuf);\n        store8.set(new Uint8Array(input, data.ptr, dataBytes));\n        var stuffedData = new Uint32Array(arrayBuf); //must start from x*4\n        var bitPos = 0, word, srcPtr = 0;\n        word = stuffedData[0];\n        for (i = i0; i < i1; i++) {\n          j = i - (i < size ? 0 : size);//wrap around\n          len = codeTable[j].first;\n          if (len > 0) {\n            codeTable[j].second = (word << bitPos) >>> (32 - len);\n\n            if (32 - bitPos >= len) {\n              bitPos += len;\n              if (bitPos === 32) {\n                bitPos = 0;\n                srcPtr++;\n                word = stuffedData[srcPtr];\n              }\n            }\n            else {\n              bitPos += len - 32;\n              srcPtr++;\n              word = stuffedData[srcPtr];\n              codeTable[j].second |= word >>> (32 - bitPos);\n            }\n          }\n        }\n\n        //finished reading code table\n\n        /* ************************\n         * building lut\n         *************************/\n        var numBitsLUT = 0, numBitsLUTQick = 0;\n        var tree = new TreeNode();\n        for (i = 0; i < codeTable.length; i++) {\n          if (codeTable[i] !== undefined) {\n            numBitsLUT = Math.max(numBitsLUT, codeTable[i].first);\n          }\n        }\n        if (numBitsLUT >= BITS_MAX) {\n          numBitsLUTQick = BITS_MAX;\n        }\n        else {\n          numBitsLUTQick = numBitsLUT;\n        }\n        if (numBitsLUT >= 30) {\n          console.log(\"WARning, large NUM LUT BITS IS \" + numBitsLUT);\n        }\n        var decodeLut = [], entry, code, numEntries, jj, currentBit, node;\n        for (i = i0; i < i1; i++) {\n          j = i - (i < size ? 0 : size);//wrap around\n          len = codeTable[j].first;\n          if (len > 0) {\n            entry = [len, j];\n            if (len <= numBitsLUTQick) {\n              code = codeTable[j].second << (numBitsLUTQick - len);\n              numEntries = 1 << (numBitsLUTQick - len);\n              for (k = 0; k < numEntries; k++) {\n                decodeLut[code | k] = entry;\n              }\n            }\n            else {\n              //build tree\n              code = codeTable[j].second;\n              node = tree;\n              for (jj = len - 1; jj >= 0; jj--) {\n                currentBit = code >>> jj & 1; //no left shift as length could be 30,31\n                if (currentBit) {\n                  if (!node.right) {\n                    node.right = new TreeNode();\n                  }\n                  node = node.right;\n                }\n                else {\n                  if (!node.left) {\n                    node.left = new TreeNode();\n                  }\n                  node = node.left;\n                }\n                if (jj === 0 && !node.val) {\n                  node.val = entry[1];\n                }\n              }\n            }\n          }\n        }\n        return {\n          decodeLut: decodeLut,\n          numBitsLUTQick: numBitsLUTQick,\n          numBitsLUT: numBitsLUT,\n          tree: tree,\n          stuffedData: stuffedData,\n          srcPtr: srcPtr,\n          bitPos: bitPos\n        };\n      },\n\n      readHuffman: function(input, data, OutPixelTypeArray) {\n        var headerInfo = data.headerInfo;\n        var numDims = headerInfo.numDims;\n        var height = data.headerInfo.height;\n        var width = data.headerInfo.width;\n        var numPixels = width * height;\n        //var size_max = 1 << BITS_MAX;\n        /* ************************\n         * reading huffman structure info\n         *************************/\n        var huffmanInfo = this.readHuffmanTree(input, data);\n        var decodeLut = huffmanInfo.decodeLut;\n        var tree = huffmanInfo.tree;\n        //stuffedData includes huffman headers\n        var stuffedData = huffmanInfo.stuffedData;\n        var srcPtr = huffmanInfo.srcPtr;\n        var bitPos = huffmanInfo.bitPos;\n        var numBitsLUTQick = huffmanInfo.numBitsLUTQick;\n        var numBitsLUT = huffmanInfo.numBitsLUT;\n        var offset = data.headerInfo.imageType === 0 ? 128 : 0;\n        /*************************\n        *  decode\n        ***************************/\n        var node, val, delta, mask = data.pixels.resultMask, valTmp, valTmpQuick, currentBit;\n        var i, j, k, ii;\n        var prevVal = 0;\n        if (bitPos > 0) {\n          srcPtr++;\n          bitPos = 0;\n        }\n        var word = stuffedData[srcPtr];\n        var deltaEncode = data.encodeMode === 1;\n        var resultPixelsAllDim = new OutPixelTypeArray(numPixels * numDims);\n        var resultPixels = resultPixelsAllDim;\n        var iDim;\n        for (iDim = 0; iDim < headerInfo.numDims; iDim++) {\n          if (numDims > 1) {\n            //get the mem block of current dimension\n            resultPixels = new OutPixelTypeArray(resultPixelsAllDim.buffer, numPixels * iDim, numPixels);\n            prevVal = 0;\n          }\n          if (data.headerInfo.numValidPixel === width * height) { //all valid\n            for (k = 0, i = 0; i < height; i++) {\n              for (j = 0; j < width; j++, k++) {\n                val = 0;\n                valTmp = (word << bitPos) >>> (32 - numBitsLUTQick);\n                valTmpQuick = valTmp;// >>> deltaBits;\n                if (32 - bitPos < numBitsLUTQick) {\n                  valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick));\n                  valTmpQuick = valTmp;// >>> deltaBits;\n                }\n                if (decodeLut[valTmpQuick])    // if there, move the correct number of bits and done\n                {\n                  val = decodeLut[valTmpQuick][1];\n                  bitPos += decodeLut[valTmpQuick][0];\n                }\n                else {\n                  valTmp = (word << bitPos) >>> (32 - numBitsLUT);\n                  valTmpQuick = valTmp;// >>> deltaBits;\n                  if (32 - bitPos < numBitsLUT) {\n                    valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT));\n                    valTmpQuick = valTmp;// >>> deltaBits;\n                  }\n                  node = tree;\n                  for (ii = 0; ii < numBitsLUT; ii++) {\n                    currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1;\n                    node = currentBit ? node.right : node.left;\n                    if (!(node.left || node.right)) {\n                      val = node.val;\n                      bitPos = bitPos + ii + 1;\n                      break;\n                    }\n                  }\n                }\n\n                if (bitPos >= 32) {\n                  bitPos -= 32;\n                  srcPtr++;\n                  word = stuffedData[srcPtr];\n                }\n\n                delta = val - offset;\n                if (deltaEncode) {\n                  if (j > 0) {\n                    delta += prevVal;    // use overflow\n                  }\n                  else if (i > 0) {\n                    delta += resultPixels[k - width];\n                  }\n                  else {\n                    delta += prevVal;\n                  }\n                  delta &= 0xFF; //overflow\n                  resultPixels[k] = delta;//overflow\n                  prevVal = delta;\n                }\n                else {\n                  resultPixels[k] = delta;\n                }\n              }\n            }\n          }\n          else { //not all valid, use mask\n            for (k = 0, i = 0; i < height; i++) {\n              for (j = 0; j < width; j++, k++) {\n                if (mask[k]) {\n                  val = 0;\n                  valTmp = (word << bitPos) >>> (32 - numBitsLUTQick);\n                  valTmpQuick = valTmp;// >>> deltaBits;\n                  if (32 - bitPos < numBitsLUTQick) {\n                    valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick));\n                    valTmpQuick = valTmp;// >>> deltaBits;\n                  }\n                  if (decodeLut[valTmpQuick])    // if there, move the correct number of bits and done\n                  {\n                    val = decodeLut[valTmpQuick][1];\n                    bitPos += decodeLut[valTmpQuick][0];\n                  }\n                  else {\n                    valTmp = (word << bitPos) >>> (32 - numBitsLUT);\n                    valTmpQuick = valTmp;// >>> deltaBits;\n                    if (32 - bitPos < numBitsLUT) {\n                      valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT));\n                      valTmpQuick = valTmp;// >>> deltaBits;\n                    }\n                    node = tree;\n                    for (ii = 0; ii < numBitsLUT; ii++) {\n                      currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1;\n                      node = currentBit ? node.right : node.left;\n                      if (!(node.left || node.right)) {\n                        val = node.val;\n                        bitPos = bitPos + ii + 1;\n                        break;\n                      }\n                    }\n                  }\n\n                  if (bitPos >= 32) {\n                    bitPos -= 32;\n                    srcPtr++;\n                    word = stuffedData[srcPtr];\n                  }\n\n                  delta = val - offset;\n                  if (deltaEncode) {\n                    if (j > 0 && mask[k - 1]) {\n                      delta += prevVal;    // use overflow\n                    }\n                    else if (i > 0 && mask[k - width]) {\n                      delta += resultPixels[k - width];\n                    }\n                    else {\n                      delta += prevVal;\n                    }\n\n                    delta &= 0xFF; //overflow\n                    resultPixels[k] = delta;//overflow\n                    prevVal = delta;\n                  }\n                  else {\n                    resultPixels[k] = delta;\n                  }\n                }\n              }\n            }\n          }\n          data.ptr = data.ptr + (srcPtr + 1) * 4 + (bitPos > 0 ? 4 : 0);\n        }\n        data.pixels.resultPixels = resultPixelsAllDim;\n      },\n\n      decodeBits: function(input, data, blockDataBuffer, offset, iDim) {\n        {\n          //bitstuff encoding is 3\n          var headerInfo = data.headerInfo;\n          var fileVersion = headerInfo.fileVersion;\n          //var block = {};\n          var blockPtr = 0;\n          var view = new DataView(input, data.ptr, 5);//to do\n          var headerByte = view.getUint8(0);\n          blockPtr++;\n          var bits67 = headerByte >> 6;\n          var n = (bits67 === 0) ? 4 : 3 - bits67;\n          var doLut = (headerByte & 32) > 0 ? true : false;//5th bit\n          var numBits = headerByte & 31;\n          var numElements = 0;\n          if (n === 1) {\n            numElements = view.getUint8(blockPtr); blockPtr++;\n          } else if (n === 2) {\n            numElements = view.getUint16(blockPtr, true); blockPtr += 2;\n          } else if (n === 4) {\n            numElements = view.getUint32(blockPtr, true); blockPtr += 4;\n          } else {\n            throw \"Invalid valid pixel count type\";\n          }\n          //fix: huffman codes are bit stuffed, but not bound by data's max value, so need to use originalUnstuff\n          //offset = offset || 0;\n          var scale = 2 * headerInfo.maxZError;\n          var stuffedData, arrayBuf, store8, dataBytes, dataWords;\n          var lutArr, lutData, lutBytes, lutBitsPerElement, bitsPerPixel;\n          var zMax = headerInfo.numDims > 1 ? headerInfo.maxValues[iDim] : headerInfo.zMax;\n          if (doLut) {\n            data.counter.lut++;\n            lutBytes = view.getUint8(blockPtr);\n            lutBitsPerElement = numBits;\n            blockPtr++;\n            dataBytes = Math.ceil((lutBytes - 1) * numBits / 8);\n            dataWords = Math.ceil(dataBytes / 4);\n            arrayBuf = new ArrayBuffer(dataWords * 4);\n            store8 = new Uint8Array(arrayBuf);\n\n            data.ptr += blockPtr;\n            store8.set(new Uint8Array(input, data.ptr, dataBytes));\n\n            lutData = new Uint32Array(arrayBuf);\n            data.ptr += dataBytes;\n\n            bitsPerPixel = 0;\n            while ((lutBytes - 1) >>> bitsPerPixel) {\n              bitsPerPixel++;\n            }\n            dataBytes = Math.ceil(numElements * bitsPerPixel / 8);\n            dataWords = Math.ceil(dataBytes / 4);\n            arrayBuf = new ArrayBuffer(dataWords * 4);\n            store8 = new Uint8Array(arrayBuf);\n            store8.set(new Uint8Array(input, data.ptr, dataBytes));\n            stuffedData = new Uint32Array(arrayBuf);\n            data.ptr += dataBytes;\n            if (fileVersion >= 3) {\n              lutArr = BitStuffer.unstuffLUT2(lutData, numBits, lutBytes - 1, offset, scale, zMax);\n            }\n            else {\n              lutArr = BitStuffer.unstuffLUT(lutData, numBits, lutBytes - 1, offset, scale, zMax);\n            }\n            //lutArr.unshift(0);\n            if (fileVersion >= 3) {\n              //BitStuffer.unstuff2(block, blockDataBuffer, headerInfo.zMax);\n              BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr);\n            }\n            else {\n              BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr);\n            }\n          }\n          else {\n            //console.debug(\"bitstuffer\");\n            data.counter.bitstuffer++;\n            bitsPerPixel = numBits;\n            data.ptr += blockPtr;\n            if (bitsPerPixel > 0) {\n              dataBytes = Math.ceil(numElements * bitsPerPixel / 8);\n              dataWords = Math.ceil(dataBytes / 4);\n              arrayBuf = new ArrayBuffer(dataWords * 4);\n              store8 = new Uint8Array(arrayBuf);\n              store8.set(new Uint8Array(input, data.ptr, dataBytes));\n              stuffedData = new Uint32Array(arrayBuf);\n              data.ptr += dataBytes;\n              if (fileVersion >= 3) {\n                if (offset == null) {\n                  BitStuffer.originalUnstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements);\n                }\n                else {\n                  BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax);\n                }\n              }\n              else {\n                if (offset == null) {\n                  BitStuffer.originalUnstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements);\n                }\n                else {\n                  BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax);\n                }\n              }\n            }\n          }\n        }\n\n      },\n\n      readTiles: function(input, data, OutPixelTypeArray) {\n        var headerInfo = data.headerInfo;\n        var width = headerInfo.width;\n        var height = headerInfo.height;\n        var microBlockSize = headerInfo.microBlockSize;\n        var imageType = headerInfo.imageType;\n        var dataTypeSize = Lerc2Helpers.getDataTypeSize(imageType);\n        var numBlocksX = Math.ceil(width / microBlockSize);\n        var numBlocksY = Math.ceil(height / microBlockSize);\n        data.pixels.numBlocksY = numBlocksY;\n        data.pixels.numBlocksX = numBlocksX;\n        data.pixels.ptr = 0;\n        var row = 0, col = 0, blockY = 0, blockX = 0, thisBlockHeight = 0, thisBlockWidth = 0, bytesLeft = 0, headerByte = 0, bits67 = 0, testCode = 0, outPtr = 0, outStride = 0, numBytes = 0, bytesleft = 0, z = 0, blockPtr = 0;\n        var view, block, arrayBuf, store8, rawData;\n        var blockEncoding;\n        var blockDataBuffer = new OutPixelTypeArray(microBlockSize * microBlockSize);\n        var lastBlockHeight = (height % microBlockSize) || microBlockSize;\n        var lastBlockWidth = (width % microBlockSize) || microBlockSize;\n        var offsetType, offset;\n        var numDims = headerInfo.numDims, iDim;\n        var mask = data.pixels.resultMask;\n        var resultPixels = data.pixels.resultPixels;\n        for (blockY = 0; blockY < numBlocksY; blockY++) {\n          thisBlockHeight = (blockY !== numBlocksY - 1) ? microBlockSize : lastBlockHeight;\n          for (blockX = 0; blockX < numBlocksX; blockX++) {\n            //console.debug(\"y\" + blockY + \" x\" + blockX);\n            thisBlockWidth = (blockX !== numBlocksX - 1) ? microBlockSize : lastBlockWidth;\n\n            outPtr = blockY * width * microBlockSize + blockX * microBlockSize;\n            outStride = width - thisBlockWidth;\n\n\n            for (iDim = 0; iDim < numDims; iDim++) {\n              if (numDims > 1) {\n                resultPixels = new OutPixelTypeArray(data.pixels.resultPixels.buffer, width * height * iDim * dataTypeSize, width * height);\n              }\n              bytesLeft = input.byteLength - data.ptr;\n              view = new DataView(input, data.ptr, Math.min(10, bytesLeft));\n              block = {};\n              blockPtr = 0;\n              headerByte = view.getUint8(0);\n              blockPtr++;\n              bits67 = (headerByte >> 6) & 0xFF;\n              testCode = (headerByte >> 2) & 15;    // use bits 2345 for integrity check\n              if (testCode !== (((blockX * microBlockSize) >> 3) & 15)) {\n                throw \"integrity issue\";\n                //return false;\n              }\n\n              blockEncoding = headerByte & 3;\n              if (blockEncoding > 3) {\n                data.ptr += blockPtr;\n                throw \"Invalid block encoding (\" + blockEncoding + \")\";\n              }\n              else if (blockEncoding === 2) { //constant 0\n                data.counter.constant++;\n                data.ptr += blockPtr;\n                continue;\n              }\n              else if (blockEncoding === 0) {  //uncompressed\n                data.counter.uncompressed++;\n                data.ptr += blockPtr;\n                numBytes = thisBlockHeight * thisBlockWidth * dataTypeSize;\n                bytesleft = input.byteLength - data.ptr;\n                numBytes = numBytes < bytesleft ? numBytes : bytesleft;\n                //bit alignment\n                arrayBuf = new ArrayBuffer((numBytes % dataTypeSize) === 0 ? numBytes : (numBytes + dataTypeSize - numBytes % dataTypeSize));\n                store8 = new Uint8Array(arrayBuf);\n                store8.set(new Uint8Array(input, data.ptr, numBytes));\n                rawData = new OutPixelTypeArray(arrayBuf);\n                z = 0;\n                if (mask) {\n                  for (row = 0; row < thisBlockHeight; row++) {\n                    for (col = 0; col < thisBlockWidth; col++) {\n                      if (mask[outPtr]) {\n                        resultPixels[outPtr] = rawData[z++];\n                      }\n                      outPtr++;\n                    }\n                    outPtr += outStride;\n                  }\n                }\n                else {//all valid\n                  for (row = 0; row < thisBlockHeight; row++) {\n                    for (col = 0; col < thisBlockWidth; col++) {\n                      resultPixels[outPtr++] = rawData[z++];\n                    }\n                    outPtr += outStride;\n                  }\n                }\n                data.ptr += z * dataTypeSize;\n              }\n              else { //1 or 3\n                offsetType = Lerc2Helpers.getDataTypeUsed(imageType, bits67);\n                offset = Lerc2Helpers.getOnePixel(block, blockPtr, offsetType, view);\n                blockPtr += Lerc2Helpers.getDataTypeSize(offsetType);\n                if (blockEncoding === 3) //constant offset value\n                {\n                  data.ptr += blockPtr;\n                  data.counter.constantoffset++;\n                  //you can delete the following resultMask case in favor of performance because val is constant and users use nodata mask, otherwise nodatavalue post processing handles it too.\n                  //while the above statement is true, we're not doing it as we want to keep invalid pixel value at 0 rather than arbitrary values\n                  if (mask) {\n                    for (row = 0; row < thisBlockHeight; row++) {\n                      for (col = 0; col < thisBlockWidth; col++) {\n                        if (mask[outPtr]) {\n                          resultPixels[outPtr] = offset;\n                        }\n                        outPtr++;\n                      }\n                      outPtr += outStride;\n                    }\n                  }\n                  else {\n                    for (row = 0; row < thisBlockHeight; row++) {\n                      for (col = 0; col < thisBlockWidth; col++) {\n                        resultPixels[outPtr++] = offset;\n                      }\n                      outPtr += outStride;\n                    }\n                  }\n                }\n                else { //bitstuff encoding is 3\n                  data.ptr += blockPtr;\n                  //heavy lifting\n                  Lerc2Helpers.decodeBits(input, data, blockDataBuffer, offset, iDim);\n                  blockPtr = 0;\n                  if (mask) {\n                    for (row = 0; row < thisBlockHeight; row++) {\n                      for (col = 0; col < thisBlockWidth; col++) {\n                        if (mask[outPtr]) {\n                          resultPixels[outPtr] = blockDataBuffer[blockPtr++];\n                        }\n                        outPtr++;\n                      }\n                      outPtr += outStride;\n                    }\n                  }\n                  else {\n                    for (row = 0; row < thisBlockHeight; row++) {\n                      for (col = 0; col < thisBlockWidth; col++) {\n                        resultPixels[outPtr++] = blockDataBuffer[blockPtr++];\n                      }\n                      outPtr += outStride;\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n\n      /*****************\n      *  private methods (helper methods)\n      *****************/\n\n      formatFileInfo: function(data) {\n        return {\n          \"fileIdentifierString\": data.headerInfo.fileIdentifierString,\n          \"fileVersion\": data.headerInfo.fileVersion,\n          \"imageType\": data.headerInfo.imageType,\n          \"height\": data.headerInfo.height,\n          \"width\": data.headerInfo.width,\n          \"numValidPixel\": data.headerInfo.numValidPixel,\n          \"microBlockSize\": data.headerInfo.microBlockSize,\n          \"blobSize\": data.headerInfo.blobSize,\n          \"maxZError\": data.headerInfo.maxZError,\n          \"pixelType\": Lerc2Helpers.getPixelType(data.headerInfo.imageType),\n          \"eofOffset\": data.eofOffset,\n          \"mask\": data.mask ? {\n            \"numBytes\": data.mask.numBytes\n          } : null,\n          \"pixels\": {\n            \"numBlocksX\": data.pixels.numBlocksX,\n            \"numBlocksY\": data.pixels.numBlocksY,\n            //\"numBytes\": data.pixels.numBytes,\n            \"maxValue\": data.headerInfo.zMax,\n            \"minValue\": data.headerInfo.zMin,\n            \"noDataValue\": data.noDataValue\n          }\n        };\n      },\n\n      constructConstantSurface: function(data) {\n        var val = data.headerInfo.zMax;\n        var numDims =  data.headerInfo.numDims;\n        var numPixels = data.headerInfo.height * data.headerInfo.width;\n        var numPixelAllDims = numPixels * numDims;\n        var i=0, k = 0, nStart=0;\n        var mask = data.pixels.resultMask;\n        if (mask) {\n          if (numDims > 1) {\n            for (i=0; i < numDims; i++) {\n              nStart = i * numPixels;\n              for (k = 0; k < numPixels; k++) {\n                if (mask[k]) {\n                  data.pixels.resultPixels[nStart + k] = val;\n                }\n              }\n            }\n          }\n          else {\n            for (k = 0; k < numPixels; k++) {\n              if (mask[k]) {\n                data.pixels.resultPixels[k] = val;\n              }\n            }\n          }\n        }\n        else {\n          if (data.pixels.resultPixels.fill) {\n            data.pixels.resultPixels.fill(val);\n          }\n          else {\n            for (k = 0; k < numPixelAllDims; k++) {\n              data.pixels.resultPixels[k] = val;\n            }\n          }\n        }\n        return;\n      },\n\n      getDataTypeArray: function(t) {\n        var tp;\n        switch (t) {\n          case 0: //char\n            tp = Int8Array;\n            break;\n          case 1: //byte\n            tp = Uint8Array;\n            break;\n          case 2: //short\n            tp = Int16Array;\n            break;\n          case 3: //ushort\n            tp = Uint16Array;\n            break;\n          case 4:\n            tp = Int32Array;\n            break;\n          case 5:\n            tp = Uint32Array;\n            break;\n          case 6:\n            tp = Float32Array;\n            break;\n          case 7:\n            tp = Float64Array;\n            break;\n          default:\n            tp = Float32Array;\n        }\n        return tp;\n      },\n\n      getPixelType: function(t) {\n        var tp;\n        switch (t) {\n          case 0: //char\n            tp = \"S8\";\n            break;\n          case 1: //byte\n            tp = \"U8\";\n            break;\n          case 2: //short\n            tp = \"S16\";\n            break;\n          case 3: //ushort\n            tp = \"U16\";\n            break;\n          case 4:\n            tp = \"S32\";\n            break;\n          case 5:\n            tp = \"U32\";\n            break;\n          case 6:\n            tp = \"F32\";\n            break;\n          case 7:\n            tp = \"F64\"; //not supported\n            break;\n          default:\n            tp = \"F32\";\n        }\n        return tp;\n      },\n\n      isValidPixelValue: function(t, val) {\n        if (val == null) {\n          return false;\n        }\n        var isValid;\n        switch (t) {\n          case 0: //char\n            isValid = val >= -128 && val <= 127;\n            break;\n          case 1: //byte  (unsigned char)\n            isValid = val >= 0 && val <= 255;\n            break;\n          case 2: //short\n            isValid = val >= -32768 && val <= 32767;\n            break;\n          case 3: //ushort\n            isValid = val >= 0 && val <= 65536;\n            break;\n          case 4: //int 32\n            isValid = val >= -2147483648 && val <= 2147483647;\n            break;\n          case 5: //uinit 32\n            isValid = val >= 0 && val <= 4294967296;\n            break;\n          case 6:\n            isValid = val >= -3.4027999387901484e+38 && val <= 3.4027999387901484e+38;\n            break;\n          case 7:\n            isValid = val >= 5e-324 && val <= 1.7976931348623157e+308;\n            break;\n          default:\n            isValid = false;\n        }\n        return isValid;\n      },\n\n      getDataTypeSize: function(t) {\n        var s = 0;\n        switch (t) {\n          case 0: //ubyte\n          case 1: //byte\n            s = 1;\n            break;\n          case 2: //short\n          case 3: //ushort\n            s = 2;\n            break;\n          case 4:\n          case 5:\n          case 6:\n            s = 4;\n            break;\n          case 7:\n            s = 8;\n            break;\n          default:\n            s = t;\n        }\n        return s;\n      },\n\n      getDataTypeUsed: function(dt, tc) {\n        var t = dt;\n        switch (dt) {\n          case 2: //short\n          case 4: //long\n            t = dt - tc;\n            break;\n          case 3: //ushort\n          case 5: //ulong\n            t = dt - 2 * tc;\n            break;\n          case 6: //float\n            if (0 === tc) {\n              t = dt;\n            }\n            else if (1 === tc) {\n              t = 2;\n            }\n            else {\n              t = 1;//byte\n            }\n            break;\n          case 7: //double\n            if (0 === tc) {\n              t = dt;\n            }\n            else {\n              t = dt - 2 * tc + 1;\n            }\n            break;\n          default:\n            t = dt;\n            break;\n        }\n        return t;\n      },\n\n      getOnePixel: function(block, blockPtr, offsetType, view) {\n        var temp = 0;\n        switch (offsetType) {\n          case 0: //char\n            temp = view.getInt8(blockPtr);\n            break;\n          case 1: //byte\n            temp = view.getUint8(blockPtr);\n            break;\n          case 2:\n            temp = view.getInt16(blockPtr, true);\n            break;\n          case 3:\n            temp = view.getUint16(blockPtr, true);\n            break;\n          case 4:\n            temp = view.getInt32(blockPtr, true);\n            break;\n          case 5:\n            temp = view.getUInt32(blockPtr, true);\n            break;\n          case 6:\n            temp = view.getFloat32(blockPtr, true);\n            break;\n          case 7:\n            //temp = view.getFloat64(blockPtr, true);\n            //blockPtr += 8;\n            //lerc2 encoding doesnt handle float 64, force to float32???\n            temp = view.getFloat64(blockPtr, true);\n            break;\n          default:\n            throw (\"the decoder does not understand this pixel type\");\n        }\n        return temp;\n      }\n    };\n\n    /***************************************************\n    *private class for a tree node. Huffman code is in Lerc2Helpers\n    ****************************************************/\n    var TreeNode = function(val, left, right) {\n      this.val = val;\n      this.left = left;\n      this.right = right;\n    };\n\n    var Lerc2Decode = {\n      /*\n      * ********removed options compared to LERC1. We can bring some of them back if needed.\n       * removed pixel type. LERC2 is typed and doesn't require user to give pixel type\n       * changed encodedMaskData to maskData. LERC2 's js version make it faster to use maskData directly.\n       * removed returnMask. mask is used by LERC2 internally and is cost free. In case of user input mask, it's returned as well and has neglible cost.\n       * removed nodatavalue. Because LERC2 pixels are typed, nodatavalue will sacrify a useful value for many types (8bit, 16bit) etc,\n       *       user has to be knowledgable enough about raster and their data to avoid usability issues. so nodata value is simply removed now.\n       *       We can add it back later if their's a clear requirement.\n       * removed encodedMask. This option was not implemented in LercDecode. It can be done after decoding (less efficient)\n       * removed computeUsedBitDepths.\n       *\n       *\n       * response changes compared to LERC1\n       * 1. encodedMaskData is not available\n       * 2. noDataValue is optional (returns only if user's noDataValue is with in the valid data type range)\n       * 3. maskData is always available\n      */\n      /*****************\n      *  public properties\n      ******************/\n      //HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, not configurable\n\n      /*****************\n      *  public methods\n      *****************/\n\n      /**\n       * Decode a LERC2 byte stream and return an object containing the pixel data and optional metadata.\n       *\n       * @param {ArrayBuffer} input The LERC input byte stream\n       * @param {object} [options] options Decoding options\n       * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid LERC file is expected at that position\n       * @param {boolean} [options.returnFileInfo] If true, the return value will have a fileInfo property that contains metadata obtained from the LERC headers and the decoding process\n       */\n      decode: function(/*byte array*/ input, /*object*/ options) {\n        //currently there's a bug in the sparse array, so please do not set to false\n        options = options || {};\n        var noDataValue = options.noDataValue;\n\n        //initialize\n        var i = 0, data = {};\n        data.ptr = options.inputOffset || 0;\n        data.pixels = {};\n\n        // File header\n        if (!Lerc2Helpers.readHeaderInfo(input, data)) {\n          return;\n        }\n        var headerInfo = data.headerInfo;\n        var fileVersion = headerInfo.fileVersion;\n        var OutPixelTypeArray = Lerc2Helpers.getDataTypeArray(headerInfo.imageType);\n\n        // Mask Header\n        Lerc2Helpers.readMask(input, data);\n        if (headerInfo.numValidPixel !== headerInfo.width * headerInfo.height && !data.pixels.resultMask) {\n          data.pixels.resultMask = options.maskData;\n        }\n\n        var numPixels = headerInfo.width * headerInfo.height;\n        data.pixels.resultPixels = new OutPixelTypeArray(numPixels * headerInfo.numDims);\n\n        data.counter = {\n          onesweep: 0,\n          uncompressed: 0,\n          lut: 0,\n          bitstuffer: 0,\n          constant: 0,\n          constantoffset: 0\n        };\n        if (headerInfo.numValidPixel !== 0) {\n          //not tested\n          if (headerInfo.zMax === headerInfo.zMin) //constant surface\n          {\n            Lerc2Helpers.constructConstantSurface(data);\n          }\n          else if (fileVersion >= 4 && Lerc2Helpers.checkMinMaxRanges(input, data)) {\n            Lerc2Helpers.constructConstantSurface(data);\n          }\n          else {\n            var view = new DataView(input, data.ptr, 2);\n            var bReadDataOneSweep = view.getUint8(0);\n            data.ptr++;\n            if (bReadDataOneSweep) {\n              //console.debug(\"OneSweep\");\n              Lerc2Helpers.readDataOneSweep(input, data, OutPixelTypeArray);\n            }\n            else {\n              //lerc2.1: //bitstuffing + lut\n              //lerc2.2: //bitstuffing + lut + huffman\n              //lerc2.3: new bitstuffer\n              if (fileVersion > 1 && headerInfo.imageType <= 1 && Math.abs(headerInfo.maxZError - 0.5) < 0.00001) {\n                //this is 2.x plus 8 bit (unsigned and signed) data, possiblity of Huffman\n                var flagHuffman = view.getUint8(1);\n                data.ptr++;\n                data.encodeMode = flagHuffman;\n                if (flagHuffman > 2 || (fileVersion < 4 && flagHuffman > 1)) {\n                  throw \"Invalid Huffman flag \" + flagHuffman;\n                }\n                if (flagHuffman) {//1 - delta Huffman, 2 - Huffman\n                  //console.log(\"Huffman\");\n                  Lerc2Helpers.readHuffman(input, data, OutPixelTypeArray);\n                }\n                else {\n                  //console.log(\"Tiles\");\n                  Lerc2Helpers.readTiles(input, data, OutPixelTypeArray);\n                }\n              }\n              else { //lerc2.x non-8 bit data\n                //console.log(\"Tiles\");\n                Lerc2Helpers.readTiles(input, data, OutPixelTypeArray);\n              }\n            }\n          }\n        }\n\n        data.eofOffset = data.ptr;\n        var diff;\n        if (options.inputOffset) {\n          diff = data.headerInfo.blobSize + options.inputOffset - data.ptr;\n          if (Math.abs(diff) >= 1) {\n            //console.debug(\"incorrect eof: dataptr \" + data.ptr + \" offset \" + options.inputOffset + \" blobsize \" + data.headerInfo.blobSize + \" diff: \" + diff);\n            data.eofOffset = options.inputOffset + data.headerInfo.blobSize;\n          }\n        }\n        else {\n          diff = data.headerInfo.blobSize - data.ptr;\n          if (Math.abs(diff) >= 1) {\n            //console.debug(\"incorrect first band eof: dataptr \" + data.ptr + \" blobsize \" + data.headerInfo.blobSize + \" diff: \" + diff);\n            data.eofOffset = data.headerInfo.blobSize;\n          }\n        }\n\n        var result = {\n          width: headerInfo.width,\n          height: headerInfo.height,\n          pixelData: data.pixels.resultPixels,\n          minValue: headerInfo.zMin,\n          maxValue: headerInfo.zMax,\n          validPixelCount: headerInfo.numValidPixel,\n          dimCount: headerInfo.numDims,\n          dimStats: {\n            minValues: headerInfo.minValues,\n            maxValues: headerInfo.maxValues\n          },\n          maskData: data.pixels.resultMask\n          //noDataValue: noDataValue\n        };\n\n        //we should remove this if there's no existing client\n        //optional noDataValue processing, it's user's responsiblity\n        if (data.pixels.resultMask && Lerc2Helpers.isValidPixelValue(headerInfo.imageType, noDataValue)) {\n          var mask = data.pixels.resultMask;\n          for (i = 0; i < numPixels; i++) {\n            if (!mask[i]) {\n              result.pixelData[i] = noDataValue;\n            }\n          }\n          result.noDataValue = noDataValue;\n        }\n        data.noDataValue = noDataValue;\n        if (options.returnFileInfo) {\n          result.fileInfo = Lerc2Helpers.formatFileInfo(data);\n        }\n        return result;\n      },\n\n      getBandCount: function(/*byte array*/ input) {\n        var count = 0;\n        var i = 0;\n        var temp = {};\n        temp.ptr = 0;\n        temp.pixels = {};\n        while (i < input.byteLength - 58) {\n          Lerc2Helpers.readHeaderInfo(input, temp);\n          i += temp.headerInfo.blobSize;\n          count++;\n          temp.ptr = i;\n        }\n        return count;\n      }\n    };\n\n    return Lerc2Decode;\n  })();\n\n  var isPlatformLittleEndian = (function() {\n    var a = new ArrayBuffer(4);\n    var b = new Uint8Array(a);\n    var c = new Uint32Array(a);\n    c[0] = 1;\n    return b[0] === 1;\n  })();\n\n  var Lerc = {\n    /************wrapper**********************************************/\n    /**\n     * A wrapper for decoding both LERC1 and LERC2 byte streams capable of handling multiband pixel blocks for various pixel types.\n     *\n     * @alias module:Lerc\n     * @param {ArrayBuffer} input The LERC input byte stream\n     * @param {object} [options] The decoding options below are optional.\n     * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid Lerc file is expected at that position.\n     * @param {string} [options.pixelType] (LERC1 only) Default value is F32. Valid pixel types for input are U8/S8/S16/U16/S32/U32/F32.\n     * @param {number} [options.noDataValue] (LERC1 only). It is recommended to use the returned mask instead of setting this value.\n     * @returns {{width, height, pixels, pixelType, mask, statistics}}\n       * @property {number} width Width of decoded image.\n       * @property {number} height Height of decoded image.\n       * @property {array} pixels [band1, band2, …] Each band is a typed array of width*height.\n       * @property {string} pixelType The type of pixels represented in the output.\n       * @property {mask} mask Typed array with a size of width*height, or null if all pixels are valid.\n       * @property {array} statistics [statistics_band1, statistics_band2, …] Each element is a statistics object representing min and max values\n    **/\n    decode: function(encodedData, options) {\n      if (!isPlatformLittleEndian) {\n        throw \"Big endian system is not supported.\";\n      }\n      options = options || {};\n      var inputOffset = options.inputOffset || 0;\n      var fileIdView = new Uint8Array(encodedData, inputOffset, 10);\n      var fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n      var lerc, majorVersion;\n      if (fileIdentifierString.trim() === \"CntZImage\") {\n        lerc = LercDecode;\n        majorVersion = 1;\n      }\n      else if (fileIdentifierString.substring(0, 5) === \"Lerc2\") {\n        lerc = Lerc2Decode;\n        majorVersion = 2;\n      }\n      else {\n        throw \"Unexpected file identifier string: \" + fileIdentifierString;\n      }\n\n      var iPlane = 0, eof = encodedData.byteLength - 10, encodedMaskData, bandMasks = [], bandMask, maskData;\n      var decodedPixelBlock = {\n        width: 0,\n        height: 0,\n        pixels: [],\n        pixelType: options.pixelType,\n        mask: null,\n        statistics: []\n      };\n\n      while (inputOffset < eof) {\n        var result = lerc.decode(encodedData, {\n          inputOffset: inputOffset,//for both lerc1 and lerc2\n          encodedMaskData: encodedMaskData,//lerc1 only\n          maskData: maskData,//lerc2 only\n          returnMask: iPlane === 0 ? true : false,//lerc1 only\n          returnEncodedMask: iPlane === 0 ? true : false,//lerc1 only\n          returnFileInfo: true,//for both lerc1 and lerc2\n          pixelType: options.pixelType || null,//lerc1 only\n          noDataValue: options.noDataValue || null//lerc1 only\n        });\n\n        inputOffset = result.fileInfo.eofOffset;\n        if (iPlane === 0) {\n          encodedMaskData = result.encodedMaskData;//lerc1\n          maskData = result.maskData;//lerc2\n          decodedPixelBlock.width = result.width;\n          decodedPixelBlock.height = result.height;\n          decodedPixelBlock.dimCount = result.dimCount || 1;\n          //decodedPixelBlock.dimStats = decodedPixelBlock.dimStats;\n          decodedPixelBlock.pixelType = result.pixelType || result.fileInfo.pixelType;\n          decodedPixelBlock.mask = result.maskData;\n        }\n        if (majorVersion >1 && result.fileInfo.mask && result.fileInfo.mask.numBytes > 0) {\n          bandMasks.push(result.maskData);\n        }\n\n        iPlane++;\n        decodedPixelBlock.pixels.push(result.pixelData);\n        decodedPixelBlock.statistics.push({\n          minValue: result.minValue,\n          maxValue: result.maxValue,\n          noDataValue: result.noDataValue,\n          dimStats: result.dimStats\n        });\n      }\n      var i, j, numPixels;\n      if (majorVersion > 1 && bandMasks.length > 1) {\n        numPixels = decodedPixelBlock.width * decodedPixelBlock.height;\n        decodedPixelBlock.bandMasks = bandMasks;\n        maskData = new Uint8Array(numPixels);\n        maskData.set(bandMasks[0]);\n        for (i = 1; i < bandMasks.length; i++) {\n          bandMask = bandMasks[i];\n          for (j = 0; j < numPixels; j++) {\n            maskData[j] = maskData[j] & bandMask[j];\n          }\n        }\n        decodedPixelBlock.maskData = maskData;\n      }\n\n      return decodedPixelBlock;\n    }\n  };\n\n  if (typeof define === \"function\" && define.amd) {/* jshint ignore:line */\n    //amd loaders such as dojo and requireJS\n    //http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition\n    define([], function() { return Lerc; });/* jshint ignore:line */\n  }\n  else if (typeof module !== \"undefined\" && module.exports) {/* jshint ignore:line */\n    //commonJS module 1.0/1.1/1.1.1 systems, such as nodeJS\n    //http://wiki.commonjs.org/wiki/Modules\n    module.exports = Lerc;/* jshint ignore:line */\n  }\n  else {\n    //assign to this, most likely window\n    this.Lerc = Lerc;\n  }\n\n})();\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.18.1';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`',\n      INVALID_TEMPL_IMPORTS_ERROR_TEXT = 'Invalid `imports` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * **Security:** See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md)\n     * — `_.template` is insecure and will be removed in v5.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n\n      // Prevent prototype pollution:\n      // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block constructor/prototype as non-terminal traversal keys to prevent\n        // escaping the object graph into built-in constructors and prototypes.\n        if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `-0`, `0n`, `\"\"`, `undefined`, and `NaN` are falsy.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        baseAssignValue(result, pair[0], pair[1]);\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * **Note:** If `lower` is greater than `upper`, the values are swapped.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * // when lower is greater than upper the values are swapped\n     * _.random(5, 0);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(-5);\n     * // => an integer between -5 and 0\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Security:** `_.template` is insecure and should not be used. It will be\n     * removed in Lodash v5. Avoid untrusted input. See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md).\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      arrayEach(importsKeys, function(key) {\n        if (reForbiddenIdentifierChars.test(key)) {\n          throw new Error(INVALID_TEMPL_IMPORTS_ERROR_TEXT);\n        }\n      });\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n","'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n","'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n","'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n","'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n","'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n","'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n","/*\n  https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace\n  so it's better encapsulated. Now you can have multiple random number generators\n  and they won't stomp all over eachother's state.\n\n  If you want to use this as a substitute for Math.random(), use the random()\n  method like so:\n\n  var m = new MersenneTwister();\n  var randomNumber = m.random();\n\n  You can also call the other genrand_{foo}() methods on the instance.\n\n  If you want to use a specific seed in order to get a repeatable random\n  sequence, pass an integer into the constructor:\n\n  var m = new MersenneTwister(123);\n\n  and that will always produce the same random sequence.\n\n  Sean McCullough (banksean@gmail.com)\n*/\n\n/*\n   A C-program for MT19937, with initialization improved 2002/1/26.\n   Coded by Takuji Nishimura and Makoto Matsumoto.\n\n   Before using, initialize the state by using init_seed(seed)\n   or init_by_array(init_key, key_length).\n\n   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n   All rights reserved.\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions\n   are met:\n\n     1. Redistributions of source code must retain the above copyright\n        notice, this list of conditions and the following disclaimer.\n\n     2. Redistributions in binary form must reproduce the above copyright\n        notice, this list of conditions and the following disclaimer in the\n        documentation and/or other materials provided with the distribution.\n\n     3. The names of its contributors may not be used to endorse or promote\n        products derived from this software without specific prior written\n        permission.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n   Any feedback is very welcome.\n   http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n   email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nvar MersenneTwister = function(seed) {\n\tif (seed == undefined) {\n\t\tseed = new Date().getTime();\n\t}\n\n\t/* Period parameters */\n\tthis.N = 624;\n\tthis.M = 397;\n\tthis.MATRIX_A = 0x9908b0df;   /* constant vector a */\n\tthis.UPPER_MASK = 0x80000000; /* most significant w-r bits */\n\tthis.LOWER_MASK = 0x7fffffff; /* least significant r bits */\n\n\tthis.mt = new Array(this.N); /* the array for the state vector */\n\tthis.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */\n\n\tif (seed.constructor == Array) {\n\t\tthis.init_by_array(seed, seed.length);\n\t}\n\telse {\n\t\tthis.init_seed(seed);\n\t}\n}\n\n/* initializes mt[N] with a seed */\n/* origin name init_genrand */\nMersenneTwister.prototype.init_seed = function(s) {\n\tthis.mt[0] = s >>> 0;\n\tfor (this.mti=1; this.mti<this.N; this.mti++) {\n\t\tvar s = this.mt[this.mti-1] ^ (this.mt[this.mti-1] >>> 30);\n\t\tthis.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)\n\t\t+ this.mti;\n\t\t/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n\t\t/* In the previous versions, MSBs of the seed affect   */\n\t\t/* only MSBs of the array mt[].                        */\n\t\t/* 2002/01/09 modified by Makoto Matsumoto             */\n\t\tthis.mt[this.mti] >>>= 0;\n\t\t/* for >32 bit machines */\n\t}\n}\n\n/* initialize by an array with array-length */\n/* init_key is the array for initializing keys */\n/* key_length is its length */\n/* slight change for C++, 2004/2/26 */\nMersenneTwister.prototype.init_by_array = function(init_key, key_length) {\n\tvar i, j, k;\n\tthis.init_seed(19650218);\n\ti=1; j=0;\n\tk = (this.N>key_length ? this.N : key_length);\n\tfor (; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30)\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525)))\n\t\t+ init_key[j] + j; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++; j++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t\tif (j>=key_length) j=0;\n\t}\n\tfor (k=this.N-1; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941))\n\t\t- i; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t}\n\n\tthis.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n}\n\n/* generates a random number on [0,0xffffffff]-interval */\n/* origin name genrand_int32 */\nMersenneTwister.prototype.random_int = function() {\n\tvar y;\n\tvar mag01 = new Array(0x0, this.MATRIX_A);\n\t/* mag01[x] = x * MATRIX_A  for x=0,1 */\n\n\tif (this.mti >= this.N) { /* generate N words at one time */\n\t\tvar kk;\n\n\t\tif (this.mti == this.N+1)  /* if init_seed() has not been called, */\n\t\t\tthis.init_seed(5489);  /* a default initial seed is used */\n\n\t\tfor (kk=0;kk<this.N-this.M;kk++) {\n\t\t\ty = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1]&this.LOWER_MASK);\n\t\t\tthis.mt[kk] = this.mt[kk+this.M] ^ (y >>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\tfor (;kk<this.N-1;kk++) {\n\t\t\ty = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk+1]&this.LOWER_MASK);\n\t\t\tthis.mt[kk] = this.mt[kk+(this.M-this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\ty = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);\n\t\tthis.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1];\n\n\t\tthis.mti = 0;\n\t}\n\n\ty = this.mt[this.mti++];\n\n\t/* Tempering */\n\ty ^= (y >>> 11);\n\ty ^= (y << 7) & 0x9d2c5680;\n\ty ^= (y << 15) & 0xefc60000;\n\ty ^= (y >>> 18);\n\n\treturn y >>> 0;\n}\n\n/* generates a random number on [0,0x7fffffff]-interval */\n/* origin name genrand_int31 */\nMersenneTwister.prototype.random_int31 = function() {\n\treturn (this.random_int()>>>1);\n}\n\n/* generates a random number on [0,1]-real-interval */\n/* origin name genrand_real1 */\nMersenneTwister.prototype.random_incl = function() {\n\treturn this.random_int()*(1.0/4294967295.0);\n\t/* divided by 2^32-1 */\n}\n\n/* generates a random number on [0,1)-real-interval */\nMersenneTwister.prototype.random = function() {\n\treturn this.random_int()*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on (0,1)-real-interval */\n/* origin name genrand_real3 */\nMersenneTwister.prototype.random_excl = function() {\n\treturn (this.random_int() + 0.5)*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on [0,1) with 53-bit resolution*/\n/* origin name genrand_res53 */\nMersenneTwister.prototype.random_long = function() {\n\tvar a=this.random_int()>>>5, b=this.random_int()>>>6;\n\treturn(a*67108864.0+b)*(1.0/9007199254740992.0);\n}\n\n/* These real versions are due to Isaku Wada, 2002/01/09 added */\n\nmodule.exports = MersenneTwister;\n","const { webm, mp4 } = require(\"./media.js\");\n\n// Detect iOS browsers < version 10\nconst oldIOS = () =>\n  typeof navigator !== \"undefined\" &&\n  parseFloat(\n    (\n      \"\" +\n      (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(\n        navigator.userAgent\n      ) || [0, \"\"])[1]\n    )\n      .replace(\"undefined\", \"3_2\")\n      .replace(\"_\", \".\")\n      .replace(\"_\", \"\")\n  ) < 10 &&\n  !window.MSStream;\n\n// Detect native Wake Lock API support\nconst nativeWakeLock = () => \"wakeLock\" in navigator;\n\nclass NoSleep {\n  constructor() {\n    this.enabled = false;\n    if (nativeWakeLock()) {\n      this._wakeLock = null;\n      const handleVisibilityChange = () => {\n        if (this._wakeLock !== null && document.visibilityState === \"visible\") {\n          this.enable();\n        }\n      };\n      document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n      document.addEventListener(\"fullscreenchange\", handleVisibilityChange);\n    } else if (oldIOS()) {\n      this.noSleepTimer = null;\n    } else {\n      // Set up no sleep video element\n      this.noSleepVideo = document.createElement(\"video\");\n\n      this.noSleepVideo.setAttribute(\"title\", \"No Sleep\");\n      this.noSleepVideo.setAttribute(\"playsinline\", \"\");\n\n      this._addSourceToVideo(this.noSleepVideo, \"webm\", webm);\n      this._addSourceToVideo(this.noSleepVideo, \"mp4\", mp4);\n\n      this.noSleepVideo.addEventListener(\"loadedmetadata\", () => {\n        if (this.noSleepVideo.duration <= 1) {\n          // webm source\n          this.noSleepVideo.setAttribute(\"loop\", \"\");\n        } else {\n          // mp4 source\n          this.noSleepVideo.addEventListener(\"timeupdate\", () => {\n            if (this.noSleepVideo.currentTime > 0.5) {\n              this.noSleepVideo.currentTime = Math.random();\n            }\n          });\n        }\n      });\n    }\n  }\n\n  _addSourceToVideo(element, type, dataURI) {\n    var source = document.createElement(\"source\");\n    source.src = dataURI;\n    source.type = `video/${type}`;\n    element.appendChild(source);\n  }\n\n  get isEnabled() {\n    return this.enabled;\n  }\n\n  enable() {\n    if (nativeWakeLock()) {\n      return navigator.wakeLock\n        .request(\"screen\")\n        .then((wakeLock) => {\n          this._wakeLock = wakeLock;\n          this.enabled = true;\n          console.log(\"Wake Lock active.\");\n          this._wakeLock.addEventListener(\"release\", () => {\n            // ToDo: Potentially emit an event for the page to observe since\n            // Wake Lock releases happen when page visibility changes.\n            // (https://web.dev/wakelock/#wake-lock-lifecycle)\n            console.log(\"Wake Lock released.\");\n          });\n        })\n        .catch((err) => {\n          this.enabled = false;\n          console.error(`${err.name}, ${err.message}`);\n          throw err;\n        });\n    } else if (oldIOS()) {\n      this.disable();\n      console.warn(`\n        NoSleep enabled for older iOS devices. This can interrupt\n        active or long-running network requests from completing successfully.\n        See https://github.com/richtr/NoSleep.js/issues/15 for more details.\n      `);\n      this.noSleepTimer = window.setInterval(() => {\n        if (!document.hidden) {\n          window.location.href = window.location.href.split(\"#\")[0];\n          window.setTimeout(window.stop, 0);\n        }\n      }, 15000);\n      this.enabled = true;\n      return Promise.resolve();\n    } else {\n      let playPromise = this.noSleepVideo.play();\n      return playPromise\n        .then((res) => {\n          this.enabled = true;\n          return res;\n        })\n        .catch((err) => {\n          this.enabled = false;\n          throw err;\n        });\n    }\n  }\n\n  disable() {\n    if (nativeWakeLock()) {\n      if (this._wakeLock) {\n        this._wakeLock.release();\n      }\n      this._wakeLock = null;\n    } else if (oldIOS()) {\n      if (this.noSleepTimer) {\n        console.warn(`\n          NoSleep now disabled for older iOS devices.\n        `);\n        window.clearInterval(this.noSleepTimer);\n        this.noSleepTimer = null;\n      }\n    } else {\n      this.noSleepVideo.pause();\n    }\n    this.enabled = false;\n  }\n}\n\nmodule.exports = NoSleep;\n","module.exports = {\n  webm:\n    \"data:video/webm;base64,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\",\n  mp4:\n    \"data:video/mp4;base64,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\",\n};\n","/**\n* plotly.js (cartesian - minified) v4.1.1\n* Copyright 2012-2026, Plotly, Inc.\n* All rights reserved.\n* Licensed under the MIT license\n*/\n(\n function(root, factory) {\n  if (typeof module === \"object\" && module.exports) {\n   module.exports = factory();\n  } else {\n   root.moduleName = factory();\n  }\n} (typeof self !== \"undefined\" ? self : this, () => {\n\"use strict\";var Plotly=(()=>{var D0e=Object.create;var Vv=Object.defineProperty,E0e=Object.defineProperties,P0e=Object.getOwnPropertyDescriptor,R0e=Object.getOwnPropertyDescriptors,F0e=Object.getOwnPropertyNames,iS=Object.getOwnPropertySymbols,z0e=Object.getPrototypeOf,lS=Object.prototype.hasOwnProperty,N0e=Object.prototype.propertyIsEnumerable;var oS=(e,r,t)=>r in e?Vv(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,wt=(e,r)=>{for(var t in r||(r={}))lS.call(r,t)&&oS(e,t,r[t]);if(iS)for(var t of iS(r))N0e.call(r,t)&&oS(e,t,r[t]);return e},Ut=(e,r)=>E0e(e,R0e(r));var h0=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(a){throw t=[a],a}};var z=(e,r)=>()=>{try{return r||e((r={exports:{}}).exports,r),r.exports}catch(t){throw r=0,t}},d0=(e,r)=>{for(var t in r)Vv(e,t,{get:r[t],enumerable:!0})},sS=(e,r,t,a)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let n of F0e(r))!lS.call(e,n)&&n!==t&&Vv(e,n,{get:()=>r[n],enumerable:!(a=P0e(r,n))||a.enumerable});return e};var cs=(e,r,t)=>(t=e!=null?D0e(z0e(e)):{},sS(r||!e||!e.__esModule?Vv(t,\"default\",{value:e,enumerable:!0}):t,e)),un=e=>sS(Vv({},\"__esModule\",{value:!0}),e);var jv=z(uS=>{\"use strict\";uS.version=\"4.1.1\"});var cS=z((fS,T1)=>{(function(r,t,a){t[r]=t[r]||a(),typeof T1!=\"undefined\"&&T1.exports&&(T1.exports=t[r])})(\"Promise\",typeof window!=\"undefined\"?window:fS,function(){\"use strict\";var r,t,a,n=Object.prototype.toString,i=typeof setImmediate!=\"undefined\"?function(T){return setImmediate(T)}:setTimeout;try{Object.defineProperty({},\"x\",{}),r=function(T,w,x,_){return Object.defineProperty(T,w,{value:x,writable:!0,configurable:_!==!1})}}catch(b){r=function(w,x,_){return w[x]=_,w}}a=(function(){var T,w,x;function _(k,A){this.fn=k,this.self=A,this.next=void 0}return{add:function(A,q){x=new _(A,q),w?w.next=x:T=x,w=x,x=void 0},drain:function(){var A=T;for(T=w=t=void 0;A;)A.fn.call(A.self),A=A.next}}})();function o(b,T){a.add(b,T),t||(t=i(a.drain))}function l(b){var T,w=typeof b;return b!=null&&(w==\"object\"||w==\"function\")&&(T=b.then),typeof T==\"function\"?T:!1}function s(){for(var b=0;b<this.chain.length;b++)u(this,this.state===1?this.chain[b].success:this.chain[b].failure,this.chain[b]);this.chain.length=0}function u(b,T,w){var x,_;try{T===!1?w.reject(b.msg):(T===!0?x=b.msg:x=T.call(void 0,b.msg),x===w.promise?w.reject(TypeError(\"Promise-chain cycle\")):(_=l(x))?_.call(x,w.resolve,w.reject):w.resolve(x))}catch(k){w.reject(k)}}function f(b){var T,w=this;if(!w.triggered){w.triggered=!0,w.def&&(w=w.def);try{(T=l(b))?o(function(){var x=new d(w);try{T.call(b,function(){f.apply(x,arguments)},function(){c.apply(x,arguments)})}catch(_){c.call(x,_)}}):(w.msg=b,w.state=1,w.chain.length>0&&o(s,w))}catch(x){c.call(new d(w),x)}}}function c(b){var T=this;T.triggered||(T.triggered=!0,T.def&&(T=T.def),T.msg=b,T.state=2,T.chain.length>0&&o(s,T))}function v(b,T,w,x){for(var _=0;_<T.length;_++)(function(A){b.resolve(T[A]).then(function(C){w(A,C)},x)})(_)}function d(b){this.def=b,this.triggered=!1}function p(b){this.promise=b,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function y(b){if(typeof b!=\"function\")throw TypeError(\"Not a function\");if(this.__NPO__!==0)throw TypeError(\"Not a promise\");this.__NPO__=1;var T=new p(this);this.then=function(x,_){var k={success:typeof x==\"function\"?x:!0,failure:typeof _==\"function\"?_:!1};return k.promise=new this.constructor(function(q,C){if(typeof q!=\"function\"||typeof C!=\"function\")throw TypeError(\"Not a function\");k.resolve=q,k.reject=C}),T.chain.push(k),T.state!==0&&o(s,T),k.promise},this.catch=function(x){return this.then(void 0,x)};try{b.call(void 0,function(x){f.call(T,x)},function(x){c.call(T,x)})}catch(w){c.call(T,w)}}var m=r({},\"constructor\",y,!1);return y.prototype=m,r(m,\"__NPO__\",0,!1),r(y,\"resolve\",function(T){var w=this;return T&&typeof T==\"object\"&&T.__NPO__===1?T:new w(function(_,k){if(typeof _!=\"function\"||typeof k!=\"function\")throw TypeError(\"Not a function\");_(T)})}),r(y,\"reject\",function(T){return new this(function(x,_){if(typeof x!=\"function\"||typeof _!=\"function\")throw TypeError(\"Not a function\");_(T)})}),r(y,\"all\",function(T){var w=this;return n.call(T)!=\"[object Array]\"?w.reject(TypeError(\"Not an array\")):T.length===0?w.resolve([]):new w(function(_,k){if(typeof _!=\"function\"||typeof k!=\"function\")throw TypeError(\"Not a function\");var A=T.length,q=Array(A),C=0;v(w,T,function(P,R){q[P]=R,++C===A&&_(q)},k)})}),r(y,\"race\",function(T){var w=this;return n.call(T)!=\"[object Array]\"?w.reject(TypeError(\"Not an array\")):new w(function(_,k){if(typeof _!=\"function\"||typeof k!=\"function\")throw TypeError(\"Not a function\");v(w,T,function(q,C){_(C)},k)})}),y})});var Er=z((EHe,A1)=>{(function(){var e={version:\"3.8.2\"},r=[].slice,t=function(h){return r.call(h)},a=self.document;function n(h){return h&&(h.ownerDocument||h.document||h).documentElement}function i(h){return h&&(h.ownerDocument&&h.ownerDocument.defaultView||h.document&&h||h.defaultView)}if(a)try{t(a.documentElement.childNodes)[0].nodeType}catch(h){t=function(g){for(var M=g.length,S=new Array(M);M--;)S[M]=g[M];return S}}if(Date.now||(Date.now=function(){return+new Date}),a)try{a.createElement(\"DIV\").style.setProperty(\"opacity\",0,\"\")}catch(h){var o=this.Element.prototype,l=o.setAttribute,s=o.setAttributeNS,u=this.CSSStyleDeclaration.prototype,f=u.setProperty;o.setAttribute=function(g,M){l.call(this,g,M+\"\")},o.setAttributeNS=function(g,M,S){s.call(this,g,M,S+\"\")},u.setProperty=function(g,M,S){f.call(this,g,M+\"\",S)}}e.ascending=c;function c(h,g){return h<g?-1:h>g?1:h>=g?0:NaN}e.descending=function(h,g){return g<h?-1:g>h?1:g>=h?0:NaN},e.min=function(h,g){var M=-1,S=h.length,L,D;if(arguments.length===1){for(;++M<S;)if((D=h[M])!=null&&D>=D){L=D;break}for(;++M<S;)(D=h[M])!=null&&L>D&&(L=D)}else{for(;++M<S;)if((D=g.call(h,h[M],M))!=null&&D>=D){L=D;break}for(;++M<S;)(D=g.call(h,h[M],M))!=null&&L>D&&(L=D)}return L},e.max=function(h,g){var M=-1,S=h.length,L,D;if(arguments.length===1){for(;++M<S;)if((D=h[M])!=null&&D>=D){L=D;break}for(;++M<S;)(D=h[M])!=null&&D>L&&(L=D)}else{for(;++M<S;)if((D=g.call(h,h[M],M))!=null&&D>=D){L=D;break}for(;++M<S;)(D=g.call(h,h[M],M))!=null&&D>L&&(L=D)}return L},e.extent=function(h,g){var M=-1,S=h.length,L,D,B;if(arguments.length===1){for(;++M<S;)if((D=h[M])!=null&&D>=D){L=B=D;break}for(;++M<S;)(D=h[M])!=null&&(L>D&&(L=D),B<D&&(B=D))}else{for(;++M<S;)if((D=g.call(h,h[M],M))!=null&&D>=D){L=B=D;break}for(;++M<S;)(D=g.call(h,h[M],M))!=null&&(L>D&&(L=D),B<D&&(B=D))}return[L,B]};function v(h){return h===null?NaN:+h}function d(h){return!isNaN(h)}e.sum=function(h,g){var M=0,S=h.length,L,D=-1;if(arguments.length===1)for(;++D<S;)d(L=+h[D])&&(M+=L);else for(;++D<S;)d(L=+g.call(h,h[D],D))&&(M+=L);return M},e.mean=function(h,g){var M=0,S=h.length,L,D=-1,B=S;if(arguments.length===1)for(;++D<S;)d(L=v(h[D]))?M+=L:--B;else for(;++D<S;)d(L=v(g.call(h,h[D],D)))?M+=L:--B;if(B)return M/B},e.quantile=function(h,g){var M=(h.length-1)*g+1,S=Math.floor(M),L=+h[S-1],D=M-S;return D?L+D*(h[S]-L):L},e.median=function(h,g){var M=[],S=h.length,L,D=-1;if(arguments.length===1)for(;++D<S;)d(L=v(h[D]))&&M.push(L);else for(;++D<S;)d(L=v(g.call(h,h[D],D)))&&M.push(L);if(M.length)return e.quantile(M.sort(c),.5)},e.variance=function(h,g){var M=h.length,S=0,L,D,B=0,F=-1,H=0;if(arguments.length===1)for(;++F<M;)d(L=v(h[F]))&&(D=L-S,S+=D/++H,B+=D*(L-S));else for(;++F<M;)d(L=v(g.call(h,h[F],F)))&&(D=L-S,S+=D/++H,B+=D*(L-S));if(H>1)return B/(H-1)},e.deviation=function(){var h=e.variance.apply(this,arguments);return h&&Math.sqrt(h)};function p(h){return{left:function(g,M,S,L){for(arguments.length<3&&(S=0),arguments.length<4&&(L=g.length);S<L;){var D=S+L>>>1;h(g[D],M)<0?S=D+1:L=D}return S},right:function(g,M,S,L){for(arguments.length<3&&(S=0),arguments.length<4&&(L=g.length);S<L;){var D=S+L>>>1;h(g[D],M)>0?L=D:S=D+1}return S}}}var y=p(c);e.bisectLeft=y.left,e.bisect=e.bisectRight=y.right,e.bisector=function(h){return p(h.length===1?function(g,M){return c(h(g),M)}:h)},e.shuffle=function(h,g,M){(S=arguments.length)<3&&(M=h.length,S<2&&(g=0));for(var S=M-g,L,D;S;)D=Math.random()*S--|0,L=h[S+g],h[S+g]=h[D+g],h[D+g]=L;return h},e.permute=function(h,g){for(var M=g.length,S=new Array(M);M--;)S[M]=h[g[M]];return S},e.pairs=function(h){for(var g=0,M=h.length-1,S,L=h[0],D=new Array(M<0?0:M);g<M;)D[g]=[S=L,L=h[++g]];return D},e.transpose=function(h){if(!(D=h.length))return[];for(var g=-1,M=e.min(h,m),S=new Array(M);++g<M;)for(var L=-1,D,B=S[g]=new Array(D);++L<D;)B[L]=h[L][g];return S};function m(h){return h.length}e.zip=function(){return e.transpose(arguments)},e.keys=function(h){var g=[];for(var M in h)g.push(M);return g},e.values=function(h){var g=[];for(var M in h)g.push(h[M]);return g},e.entries=function(h){var g=[];for(var M in h)g.push({key:M,value:h[M]});return g},e.merge=function(h){for(var g=h.length,M,S=-1,L=0,D,B;++S<g;)L+=h[S].length;for(D=new Array(L);--g>=0;)for(B=h[g],M=B.length;--M>=0;)D[--L]=B[M];return D};var b=Math.abs;e.range=function(h,g,M){if(arguments.length<3&&(M=1,arguments.length<2&&(g=h,h=0)),(g-h)/M===1/0)throw new Error(\"infinite range\");var S=[],L=T(b(M)),D=-1,B;if(h*=L,g*=L,M*=L,M<0)for(;(B=h+M*++D)>g;)S.push(B/L);else for(;(B=h+M*++D)<g;)S.push(B/L);return S};function T(h){for(var g=1;h*g%1;)g*=10;return g}function w(h,g){for(var M in g)Object.defineProperty(h.prototype,M,{value:g[M],enumerable:!1})}e.map=function(h,g){var M=new x;if(h instanceof x)h.forEach(function(F,H){M.set(F,H)});else if(Array.isArray(h)){var S=-1,L=h.length,D;if(arguments.length===1)for(;++S<L;)M.set(S,h[S]);else for(;++S<L;)M.set(g.call(h,D=h[S],S),D)}else for(var B in h)M.set(B,h[B]);return M};function x(){this._=Object.create(null)}var _=\"__proto__\",k=\"\\0\";w(x,{has:C,get:function(h){return this._[A(h)]},set:function(h,g){return this._[A(h)]=g},remove:E,keys:P,values:function(){var h=[];for(var g in this._)h.push(this._[g]);return h},entries:function(){var h=[];for(var g in this._)h.push({key:q(g),value:this._[g]});return h},size:R,empty:N,forEach:function(h){for(var g in this._)h.call(this,q(g),this._[g])}});function A(h){return(h+=\"\")===_||h[0]===k?k+h:h}function q(h){return(h+=\"\")[0]===k?h.slice(1):h}function C(h){return A(h)in this._}function E(h){return(h=A(h))in this._&&delete this._[h]}function P(){var h=[];for(var g in this._)h.push(q(g));return h}function R(){var h=0;for(var g in this._)++h;return h}function N(){for(var h in this._)return!1;return!0}e.nest=function(){var h={},g=[],M=[],S,L;function D(F,H,X){if(X>=g.length)return L?L.call(h,H):S?H.sort(S):H;for(var Z=-1,K=H.length,Q=g[X++],pe,we,ee,le=new x,ve;++Z<K;)(ve=le.get(pe=Q(we=H[Z])))?ve.push(we):le.set(pe,[we]);return F?(we=F(),ee=function(_e,Te){we.set(_e,D(F,Te,X))}):(we={},ee=function(_e,Te){we[_e]=D(F,Te,X)}),le.forEach(ee),we}function B(F,H){if(H>=g.length)return F;var X=[],Z=M[H++];return F.forEach(function(K,Q){X.push({key:K,values:B(Q,H)})}),Z?X.sort(function(K,Q){return Z(K.key,Q.key)}):X}return h.map=function(F,H){return D(H,F,0)},h.entries=function(F){return B(D(e.map,F,0),0)},h.key=function(F){return g.push(F),h},h.sortKeys=function(F){return M[g.length-1]=F,h},h.sortValues=function(F){return S=F,h},h.rollup=function(F){return L=F,h},h},e.set=function(h){var g=new I;if(h)for(var M=0,S=h.length;M<S;++M)g.add(h[M]);return g};function I(){this._=Object.create(null)}w(I,{has:C,add:function(h){return this._[A(h+=\"\")]=!0,h},remove:E,values:P,size:R,empty:N,forEach:function(h){for(var g in this._)h.call(this,q(g))}}),e.behavior={};function O(h){return h}e.rebind=function(h,g){for(var M=1,S=arguments.length,L;++M<S;)h[L=arguments[M]]=U(h,g,g[L]);return h};function U(h,g,M){return function(){var S=M.apply(g,arguments);return S===g?h:S}}function Y(h,g){if(g in h)return g;g=g.charAt(0).toUpperCase()+g.slice(1);for(var M=0,S=G.length;M<S;++M){var L=G[M]+g;if(L in h)return L}}var G=[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];function V(){}e.dispatch=function(){for(var h=new W,g=-1,M=arguments.length;++g<M;)h[arguments[g]]=j(h);return h};function W(){}W.prototype.on=function(h,g){var M=h.indexOf(\".\"),S=\"\";if(M>=0&&(S=h.slice(M+1),h=h.slice(0,M)),h)return arguments.length<2?this[h].on(S):this[h].on(S,g);if(arguments.length===2){if(g==null)for(h in this)this.hasOwnProperty(h)&&this[h].on(S,null);return this}};function j(h){var g=[],M=new x;function S(){for(var L=g,D=-1,B=L.length,F;++D<B;)(F=L[D].on)&&F.apply(this,arguments);return h}return S.on=function(L,D){var B=M.get(L),F;return arguments.length<2?B&&B.on:(B&&(B.on=null,g=g.slice(0,F=g.indexOf(B)).concat(g.slice(F+1)),M.remove(L)),D&&g.push(M.set(L,{on:D})),h)},S}e.event=null;function J(){e.event.preventDefault()}function te(){for(var h=e.event,g;g=h.sourceEvent;)h=g;return h}function ae(h){for(var g=new W,M=0,S=arguments.length;++M<S;)g[arguments[M]]=j(g);return g.of=function(L,D){return function(B){try{var F=B.sourceEvent=e.event;B.target=h,e.event=B,g[B.type].apply(L,D)}finally{e.event=F}}},g}e.requote=function(h){return h.replace(se,\"\\\\$&\")};var se=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,$={}.__proto__?function(h,g){h.__proto__=g}:function(h,g){for(var M in g)h[M]=g[M]};function fe(h){return $(h,oe),h}var ie=function(h,g){return g.querySelector(h)},ue=function(h,g){return g.querySelectorAll(h)},ce=function(h,g){var M=h.matches||h[Y(h,\"matchesSelector\")];return ce=function(S,L){return M.call(S,L)},ce(h,g)};typeof Sizzle==\"function\"&&(ie=function(h,g){return Sizzle(h,g)[0]||null},ue=Sizzle,ce=Sizzle.matchesSelector),e.selection=function(){return e.select(a.documentElement)};var oe=e.selection.prototype=[];oe.select=function(h){var g=[],M,S,L,D;h=be(h);for(var B=-1,F=this.length;++B<F;){g.push(M=[]),M.parentNode=(L=this[B]).parentNode;for(var H=-1,X=L.length;++H<X;)(D=L[H])?(M.push(S=h.call(D,D.__data__,H,B)),S&&\"__data__\"in D&&(S.__data__=D.__data__)):M.push(null)}return fe(g)};function be(h){return typeof h==\"function\"?h:function(){return ie(h,this)}}oe.selectAll=function(h){var g=[],M,S;h=Re(h);for(var L=-1,D=this.length;++L<D;)for(var B=this[L],F=-1,H=B.length;++F<H;)(S=B[F])&&(g.push(M=t(h.call(S,S.__data__,F,L))),M.parentNode=S);return fe(g)};function Re(h){return typeof h==\"function\"?h:function(){return ue(h,this)}}var ye=\"http://www.w3.org/1999/xhtml\",Ce={svg:\"http://www.w3.org/2000/svg\",xhtml:ye,xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};e.ns={prefix:Ce,qualify:function(h){var g=h.indexOf(\":\"),M=h;return g>=0&&(M=h.slice(0,g))!==\"xmlns\"&&(h=h.slice(g+1)),Ce.hasOwnProperty(M)?{space:Ce[M],local:h}:h}},oe.attr=function(h,g){if(arguments.length<2){if(typeof h==\"string\"){var M=this.node();return h=e.ns.qualify(h),h.local?M.getAttributeNS(h.space,h.local):M.getAttribute(h)}for(g in h)this.each(Me(g,h[g]));return this}return this.each(Me(h,g))};function Me(h,g){h=e.ns.qualify(h);function M(){this.removeAttribute(h)}function S(){this.removeAttributeNS(h.space,h.local)}function L(){this.setAttribute(h,g)}function D(){this.setAttributeNS(h.space,h.local,g)}function B(){var H=g.apply(this,arguments);H==null?this.removeAttribute(h):this.setAttribute(h,H)}function F(){var H=g.apply(this,arguments);H==null?this.removeAttributeNS(h.space,h.local):this.setAttributeNS(h.space,h.local,H)}return g==null?h.local?S:M:typeof g==\"function\"?h.local?F:B:h.local?D:L}function Le(h){return h.trim().replace(/\\s+/g,\" \")}oe.classed=function(h,g){if(arguments.length<2){if(typeof h==\"string\"){var M=this.node(),S=(h=Ne(h)).length,L=-1;if(g=M.classList){for(;++L<S;)if(!g.contains(h[L]))return!1}else for(g=M.getAttribute(\"class\");++L<S;)if(!De(h[L]).test(g))return!1;return!0}for(g in h)this.each(qe(g,h[g]));return this}return this.each(qe(h,g))};function De(h){return new RegExp(\"(?:^|\\\\s+)\"+e.requote(h)+\"(?:\\\\s+|$)\",\"g\")}function Ne(h){return(h+\"\").trim().split(/^|\\s+/)}function qe(h,g){h=Ne(h).map(Xe);var M=h.length;function S(){for(var D=-1;++D<M;)h[D](this,g)}function L(){for(var D=-1,B=g.apply(this,arguments);++D<M;)h[D](this,B)}return typeof g==\"function\"?L:S}function Xe(h){var g=De(h);return function(M,S){if(L=M.classList)return S?L.add(h):L.remove(h);var L=M.getAttribute(\"class\")||\"\";S?(g.lastIndex=0,g.test(L)||M.setAttribute(\"class\",Le(L+\" \"+h))):M.setAttribute(\"class\",Le(L.replace(g,\" \")))}}oe.style=function(h,g,M){var S=arguments.length;if(S<3){if(typeof h!=\"string\"){S<2&&(g=\"\");for(M in h)this.each($e(M,h[M],g));return this}if(S<2){var L=this.node();return i(L).getComputedStyle(L,null).getPropertyValue(h)}M=\"\"}return this.each($e(h,g,M))};function $e(h,g,M){function S(){this.style.removeProperty(h)}function L(){this.style.setProperty(h,g,M)}function D(){var B=g.apply(this,arguments);B==null?this.style.removeProperty(h):this.style.setProperty(h,B,M)}return g==null?S:typeof g==\"function\"?D:L}oe.property=function(h,g){if(arguments.length<2){if(typeof h==\"string\")return this.node()[h];for(g in h)this.each(We(g,h[g]));return this}return this.each(We(h,g))};function We(h,g){function M(){delete this[h]}function S(){this[h]=g}function L(){var D=g.apply(this,arguments);D==null?delete this[h]:this[h]=D}return g==null?M:typeof g==\"function\"?L:S}oe.text=function(h){return arguments.length?this.each(typeof h==\"function\"?function(){var g=h.apply(this,arguments);this.textContent=g==null?\"\":g}:h==null?function(){this.textContent=\"\"}:function(){this.textContent=h}):this.node().textContent},oe.html=function(h){return arguments.length?this.each(typeof h==\"function\"?function(){var g=h.apply(this,arguments);this.innerHTML=g==null?\"\":g}:h==null?function(){this.innerHTML=\"\"}:function(){this.innerHTML=h}):this.node().innerHTML},oe.append=function(h){return h=Se(h),this.select(function(){return this.appendChild(h.apply(this,arguments))})};function Se(h){function g(){var S=this.ownerDocument,L=this.namespaceURI;return L===ye&&S.documentElement.namespaceURI===ye?S.createElement(h):S.createElementNS(L,h)}function M(){return this.ownerDocument.createElementNS(h.space,h.local)}return typeof h==\"function\"?h:(h=e.ns.qualify(h)).local?M:g}oe.insert=function(h,g){return h=Se(h),g=be(g),this.select(function(){return this.insertBefore(h.apply(this,arguments),g.apply(this,arguments)||null)})},oe.remove=function(){return this.each(Fe)};function Fe(){var h=this.parentNode;h&&h.removeChild(this)}oe.data=function(h,g){var M=-1,S=this.length,L,D;if(!arguments.length){for(h=new Array(S=(L=this[0]).length);++M<S;)(D=L[M])&&(h[M]=D.__data__);return h}function B(Z,K){var Q,pe=Z.length,we=K.length,ee=Math.min(pe,we),le=new Array(we),ve=new Array(we),_e=new Array(pe),Te,he;if(g){var Ye=new x,or=new Array(pe),hr;for(Q=-1;++Q<pe;)(Te=Z[Q])&&(Ye.has(hr=g.call(Te,Te.__data__,Q))?_e[Q]=Te:Ye.set(hr,Te),or[Q]=hr);for(Q=-1;++Q<we;)(Te=Ye.get(hr=g.call(K,he=K[Q],Q)))?Te!==!0&&(le[Q]=Te,Te.__data__=he):ve[Q]=Qe(he),Ye.set(hr,!0);for(Q=-1;++Q<pe;)Q in or&&Ye.get(or[Q])!==!0&&(_e[Q]=Z[Q])}else{for(Q=-1;++Q<ee;)Te=Z[Q],he=K[Q],Te?(Te.__data__=he,le[Q]=Te):ve[Q]=Qe(he);for(;Q<we;++Q)ve[Q]=Qe(K[Q]);for(;Q<pe;++Q)_e[Q]=Z[Q]}ve.update=le,ve.parentNode=le.parentNode=_e.parentNode=Z.parentNode,F.push(ve),H.push(le),X.push(_e)}var F=cr([]),H=fe([]),X=fe([]);if(typeof h==\"function\")for(;++M<S;)B(L=this[M],h.call(L,L.parentNode.__data__,M));else for(;++M<S;)B(L=this[M],h);return H.enter=function(){return F},H.exit=function(){return X},H};function Qe(h){return{__data__:h}}oe.datum=function(h){return arguments.length?this.property(\"__data__\",h):this.property(\"__data__\")},oe.filter=function(h){var g=[],M,S,L;typeof h!=\"function\"&&(h=re(h));for(var D=0,B=this.length;D<B;D++){g.push(M=[]),M.parentNode=(S=this[D]).parentNode;for(var F=0,H=S.length;F<H;F++)(L=S[F])&&h.call(L,L.__data__,F,D)&&M.push(L)}return fe(g)};function re(h){return function(){return ce(this,h)}}oe.order=function(){for(var h=-1,g=this.length;++h<g;)for(var M=this[h],S=M.length-1,L=M[S],D;--S>=0;)(D=M[S])&&(L&&L!==D.nextSibling&&L.parentNode.insertBefore(D,L),L=D);return this},oe.sort=function(h){h=xe.apply(this,arguments);for(var g=-1,M=this.length;++g<M;)this[g].sort(h);return this.order()};function xe(h){return arguments.length||(h=c),function(g,M){return g&&M?h(g.__data__,M.__data__):!g-!M}}oe.each=function(h){return Ge(this,function(g,M,S){h.call(g,g.__data__,M,S)})};function Ge(h,g){for(var M=0,S=h.length;M<S;M++)for(var L=h[M],D=0,B=L.length,F;D<B;D++)(F=L[D])&&g(F,D,M);return h}oe.call=function(h){var g=t(arguments);return h.apply(g[0]=this,g),this},oe.empty=function(){return!this.node()},oe.node=function(){for(var h=0,g=this.length;h<g;h++)for(var M=this[h],S=0,L=M.length;S<L;S++){var D=M[S];if(D)return D}return null},oe.size=function(){var h=0;return Ge(this,function(){++h}),h};function cr(h){return $(h,Pe),h}var Pe=[];e.selection.enter=cr,e.selection.enter.prototype=Pe,Pe.append=oe.append,Pe.empty=oe.empty,Pe.node=oe.node,Pe.call=oe.call,Pe.size=oe.size,Pe.select=function(h){for(var g=[],M,S,L,D,B,F=-1,H=this.length;++F<H;){L=(D=this[F]).update,g.push(M=[]),M.parentNode=D.parentNode;for(var X=-1,Z=D.length;++X<Z;)(B=D[X])?(M.push(L[X]=S=h.call(D.parentNode,B.__data__,X,F)),S.__data__=B.__data__):M.push(null)}return fe(g)},Pe.insert=function(h,g){return arguments.length<2&&(g=me(this)),oe.insert.call(this,h,g)};function me(h){var g,M;return function(S,L,D){var B=h[D].update,F=B.length,H;for(D!=M&&(M=D,g=0),L>=g&&(g=L+1);!(H=B[g])&&++g<F;);return H}}e.select=function(h){var g;return typeof h==\"string\"?(g=[ie(h,a)],g.parentNode=a.documentElement):(g=[h],g.parentNode=n(h)),fe([g])},e.selectAll=function(h){var g;return typeof h==\"string\"?(g=t(ue(h,a)),g.parentNode=a.documentElement):(g=t(h),g.parentNode=null),fe([g])},oe.on=function(h,g,M){var S=arguments.length;if(S<3){if(typeof h!=\"string\"){S<2&&(g=!1);for(M in h)this.each(Ae(M,h[M],g));return this}if(S<2)return(S=this.node()[\"__on\"+h])&&S._;M=!1}return this.each(Ae(h,g,M))};function Ae(h,g,M){var S=\"__on\"+h,L=h.indexOf(\".\"),D=Ze;L>0&&(h=h.slice(0,L));var B=He.get(h);B&&(h=B,D=Be);function F(){var Z=this[S];Z&&(this.removeEventListener(h,Z,Z.$),delete this[S])}function H(){var Z=D(g,t(arguments));F.call(this),this.addEventListener(h,this[S]=Z,Z.$=M),Z._=g}function X(){var Z=new RegExp(\"^__on([^.]+)\"+e.requote(h)+\"$\"),K;for(var Q in this)if(K=Q.match(Z)){var pe=this[Q];this.removeEventListener(K[1],pe,pe.$),delete this[Q]}}return L?g?H:F:g?V:X}var He=e.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});a&&He.forEach(function(h){\"on\"+h in a&&He.remove(h)});function Ze(h,g){return function(M){var S=e.event;e.event=M,g[0]=this.__data__;try{h.apply(this,g)}finally{e.event=S}}}function Be(h,g){var M=Ze(h,g);return function(S){var L=this,D=S.relatedTarget;(!D||D!==L&&!(D.compareDocumentPosition(L)&8))&&M.call(L,S)}}var je,tr=0;function ir(h){var g=\".dragsuppress-\"+ ++tr,M=\"click\"+g,S=e.select(i(h)).on(\"touchmove\"+g,J).on(\"dragstart\"+g,J).on(\"selectstart\"+g,J);if(je==null&&(je=\"onselectstart\"in h?!1:Y(h.style,\"userSelect\")),je){var L=n(h).style,D=L[je];L[je]=\"none\"}return function(B){if(S.on(g,null),je&&(L[je]=D),B){var F=function(){S.on(M,null)};S.on(M,function(){J(),F()},!0),setTimeout(F,0)}}}e.mouse=function(h){return Ee(h,te())};var lr=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function Ee(h,g){g.changedTouches&&(g=g.changedTouches[0]);var M=h.ownerSVGElement||h;if(M.createSVGPoint){var S=M.createSVGPoint();if(lr<0){var L=i(h);if(L.scrollX||L.scrollY){M=e.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\");var D=M[0][0].getScreenCTM();lr=!(D.f||D.e),M.remove()}}return lr?(S.x=g.pageX,S.y=g.pageY):(S.x=g.clientX,S.y=g.clientY),S=S.matrixTransform(h.getScreenCTM().inverse()),[S.x,S.y]}var B=h.getBoundingClientRect();return[g.clientX-B.left-h.clientLeft,g.clientY-B.top-h.clientTop]}e.touch=function(h,g,M){if(arguments.length<3&&(M=g,g=te().changedTouches),g){for(var S=0,L=g.length,D;S<L;++S)if((D=g[S]).identifier===M)return Ee(h,D)}},e.behavior.drag=function(){var h=ae(L,\"drag\",\"dragstart\",\"dragend\"),g=null,M=D(V,e.mouse,i,\"mousemove\",\"mouseup\"),S=D(Je,e.touch,O,\"touchmove\",\"touchend\");function L(){this.on(\"mousedown.drag\",M).on(\"touchstart.drag\",S)}function D(B,F,H,X,Z){return function(){var K=this,Q=e.event.target.correspondingElement||e.event.target,pe=K.parentNode,we=h.of(K,arguments),ee=0,le=B(),ve=\".drag\"+(le==null?\"\":\"-\"+le),_e,Te=e.select(H(Q)).on(X+ve,or).on(Z+ve,hr),he=ir(Q),Ye=F(pe,le);g?(_e=g.apply(K,arguments),_e=[_e.x-Ye[0],_e.y-Ye[1]]):_e=[0,0],we({type:\"dragstart\"});function or(){var fr=F(pe,le),br,xr;fr&&(br=fr[0]-Ye[0],xr=fr[1]-Ye[1],ee|=br|xr,Ye=fr,we({type:\"drag\",x:fr[0]+_e[0],y:fr[1]+_e[1],dx:br,dy:xr}))}function hr(){F(pe,le)&&(Te.on(X+ve,null).on(Z+ve,null),he(ee),we({type:\"dragend\"}))}}}return L.origin=function(B){return arguments.length?(g=B,L):g},e.rebind(L,h,\"on\")};function Je(){return e.event.changedTouches[0].identifier}e.touches=function(h,g){return arguments.length<2&&(g=te().touches),g?t(g).map(function(M){var S=Ee(h,M);return S.identifier=M.identifier,S}):[]};var Ie=1e-6,pr=Ie*Ie,mr=Math.PI,sr=2*mr,yr=sr-Ie,ne=mr/2,ge=mr/180,ze=180/mr;function Oe(h){return h>0?1:h<0?-1:0}function Jr(h,g,M){return(g[0]-h[0])*(M[1]-h[1])-(g[1]-h[1])*(M[0]-h[0])}function Kr(h){return h>1?0:h<-1?mr:Math.acos(h)}function mt(h){return h>1?ne:h<-1?-ne:Math.asin(h)}function yt(h){return((h=Math.exp(h))-1/h)/2}function Lt(h){return((h=Math.exp(h))+1/h)/2}function Qt(h){return((h=Math.exp(2*h))-1)/(h+1)}function Va(h){return(h=Math.sin(h/2))*h}var ea=Math.SQRT2,ja=2,ln=4;e.interpolateZoom=function(h,g){var M=h[0],S=h[1],L=h[2],D=g[0],B=g[1],F=g[2],H=D-M,X=B-S,Z=H*H+X*X,K,Q;if(Z<pr)Q=Math.log(F/L)/ea,K=function(_e){return[M+_e*H,S+_e*X,L*Math.exp(ea*_e*Q)]};else{var pe=Math.sqrt(Z),we=(F*F-L*L+ln*Z)/(2*L*ja*pe),ee=(F*F-L*L-ln*Z)/(2*F*ja*pe),le=Math.log(Math.sqrt(we*we+1)-we),ve=Math.log(Math.sqrt(ee*ee+1)-ee);Q=(ve-le)/ea,K=function(_e){var Te=_e*Q,he=Lt(le),Ye=L/(ja*pe)*(he*Qt(ea*Te+le)-yt(le));return[M+Ye*H,S+Ye*X,L*he/Lt(ea*Te+le)]}}return K.duration=Q*1e3,K},e.behavior.zoom=function(){var h={x:0,y:0,k:1},g,M,S,L=[960,500],D=oa,B=250,F=0,H=\"mousedown.zoom\",X=\"mousemove.zoom\",Z=\"mouseup.zoom\",K,Q=\"touchstart.zoom\",pe,we=ae(Te,\"zoomstart\",\"zoom\",\"zoomend\"),ee,le,ve,_e;_t||(_t=\"onwheel\"in a?(vr=function(){return-e.event.deltaY*(e.event.deltaMode?120:1)},\"wheel\"):\"onmousewheel\"in a?(vr=function(){return e.event.wheelDelta},\"mousewheel\"):(vr=function(){return-e.event.detail},\"MozMousePixelScroll\"));function Te(ar){ar.on(H,Dr).on(_t+\".zoom\",sa).on(\"dblclick.zoom\",gt).on(Q,it)}Te.event=function(ar){ar.each(function(){var Nr=we.of(this,arguments),Br=h;_u?e.select(this).transition().each(\"start.zoom\",function(){h=this.__chart__||{x:0,y:0,k:1},xr(Nr)}).tween(\"zoom:zoom\",function(){var ot=L[0],Xt=L[1],Ma=M?M[0]:ot/2,$a=M?M[1]:Xt/2,bn=e.interpolateZoom([(Ma-h.x)/h.k,($a-h.y)/h.k,ot/h.k],[(Ma-Br.x)/Br.k,($a-Br.y)/Br.k,ot/Br.k]);return function(Fn){var xn=bn(Fn),Gn=ot/xn[2];this.__chart__=h={x:Ma-xn[0]*Gn,y:$a-xn[1]*Gn,k:Gn},zr(Nr)}}).each(\"interrupt.zoom\",function(){wr(Nr)}).each(\"end.zoom\",function(){wr(Nr)}):(this.__chart__=h,xr(Nr),zr(Nr),wr(Nr))})},Te.translate=function(ar){return arguments.length?(h={x:+ar[0],y:+ar[1],k:h.k},br(),Te):[h.x,h.y]},Te.scale=function(ar){return arguments.length?(h={x:h.x,y:h.y,k:null},or(+ar),br(),Te):h.k},Te.scaleExtent=function(ar){return arguments.length?(D=ar==null?oa:[+ar[0],+ar[1]],Te):D},Te.center=function(ar){return arguments.length?(S=ar&&[+ar[0],+ar[1]],Te):S},Te.size=function(ar){return arguments.length?(L=ar&&[+ar[0],+ar[1]],Te):L},Te.duration=function(ar){return arguments.length?(B=+ar,Te):B},Te.x=function(ar){return arguments.length?(le=ar,ee=ar.copy(),h={x:0,y:0,k:1},Te):le},Te.y=function(ar){return arguments.length?(_e=ar,ve=ar.copy(),h={x:0,y:0,k:1},Te):_e};function he(ar){return[(ar[0]-h.x)/h.k,(ar[1]-h.y)/h.k]}function Ye(ar){return[ar[0]*h.k+h.x,ar[1]*h.k+h.y]}function or(ar){h.k=Math.max(D[0],Math.min(D[1],ar))}function hr(ar,Nr){Nr=Ye(Nr),h.x+=ar[0]-Nr[0],h.y+=ar[1]-Nr[1]}function fr(ar,Nr,Br,ot){ar.__chart__={x:h.x,y:h.y,k:h.k},or(Math.pow(2,ot)),hr(M=Nr,Br),ar=e.select(ar),B>0&&(ar=ar.transition().duration(B)),ar.call(Te.event)}function br(){le&&le.domain(ee.range().map(function(ar){return(ar-h.x)/h.k}).map(ee.invert)),_e&&_e.domain(ve.range().map(function(ar){return(ar-h.y)/h.k}).map(ve.invert))}function xr(ar){F++||ar({type:\"zoomstart\"})}function zr(ar){br(),ar({type:\"zoom\",scale:h.k,translate:[h.x,h.y]})}function wr(ar){--F||(ar({type:\"zoomend\"}),M=null)}function Dr(){var ar=this,Nr=we.of(ar,arguments),Br=0,ot=e.select(i(ar)).on(X,$a).on(Z,bn),Xt=he(e.mouse(ar)),Ma=ir(ar);b1.call(ar),xr(Nr);function $a(){Br=1,hr(e.mouse(ar),Xt),zr(Nr)}function bn(){ot.on(X,null).on(Z,null),Ma(Br),wr(Nr)}}function it(){var ar=this,Nr=we.of(ar,arguments),Br={},ot=0,Xt,Ma=\".zoom-\"+e.event.changedTouches[0].identifier,$a=\"touchmove\"+Ma,bn=\"touchend\"+Ma,Fn=[],xn=e.select(ar),Gn=ir(ar);Yn(),xr(Nr),xn.on(H,null).on(Q,Yn);function sn(){var go=e.touches(ar);return Xt=h.k,go.forEach(function(Ja){Ja.identifier in Br&&(Br[Ja.identifier]=he(Ja))}),go}function Yn(){var go=e.event.target;e.select(go).on($a,wu).on(bn,C0e),Fn.push(go);for(var Ja=e.event.changedTouches,Ci=0,Xo=Ja.length;Ci<Xo;++Ci)Br[Ja[Ci].identifier]=null;var Di=sn(),v0=Date.now();if(Di.length===1){if(v0-pe<500){var Tu=Di[0];fr(ar,Tu,Br[Tu.identifier],Math.floor(Math.log(h.k)/Math.LN2)+1),J()}pe=v0}else if(Di.length>1){var Tu=Di[0],fs=Di[1],w1=Tu[0]-fs[0],nS=Tu[1]-fs[1];ot=w1*w1+nS*nS}}function wu(){var go=e.touches(ar),Ja,Ci,Xo,Di;b1.call(ar);for(var v0=0,Tu=go.length;v0<Tu;++v0,Di=null)if(Xo=go[v0],Di=Br[Xo.identifier]){if(Ci)break;Ja=Xo,Ci=Di}if(Di){var fs=(fs=Xo[0]-Ja[0])*fs+(fs=Xo[1]-Ja[1])*fs,w1=ot&&Math.sqrt(fs/ot);Ja=[(Ja[0]+Xo[0])/2,(Ja[1]+Xo[1])/2],Ci=[(Ci[0]+Di[0])/2,(Ci[1]+Di[1])/2],or(w1*Xt)}pe=null,hr(Ja,Ci),zr(Nr)}function C0e(){if(e.event.touches.length){for(var go=e.event.changedTouches,Ja=0,Ci=go.length;Ja<Ci;++Ja)delete Br[go[Ja].identifier];for(var Xo in Br)return void sn()}e.selectAll(Fn).on(Ma,null),xn.on(H,Dr).on(Q,it),Gn(),wr(Nr)}}function sa(){var ar=we.of(this,arguments);K?clearTimeout(K):(b1.call(this),g=he(M=S||e.mouse(this)),xr(ar)),K=setTimeout(function(){K=null,wr(ar)},50),J(),or(Math.pow(2,vr()*.002)*h.k),hr(M,g),zr(ar)}function gt(){var ar=e.mouse(this),Nr=Math.log(h.k)/Math.LN2;fr(this,ar,he(ar),e.event.shiftKey?Math.ceil(Nr)-1:Math.floor(Nr)+1)}return e.rebind(Te,we,\"on\")};var oa=[0,1/0],vr,_t;e.color=Yr;function Yr(){}Yr.prototype.toString=function(){return this.rgb()+\"\"},e.hsl=vt;function vt(h,g,M){return this instanceof vt?(this.h=+h,this.s=+g,void(this.l=+M)):arguments.length<2?h instanceof vt?new vt(h.h,h.s,h.l):r1(\"\"+h,t1,vt):new vt(h,g,M)}var Rt=vt.prototype=new Yr;Rt.brighter=function(h){return h=Math.pow(.7,arguments.length?h:1),new vt(this.h,this.s,this.l/h)},Rt.darker=function(h){return h=Math.pow(.7,arguments.length?h:1),new vt(this.h,this.s,h*this.l)},Rt.rgb=function(){return Mt(this.h,this.s,this.l)};function Mt(h,g,M){var S,L;h=isNaN(h)?0:(h%=360)<0?h+360:h,g=isNaN(g)||g<0?0:g>1?1:g,M=M<0?0:M>1?1:M,L=M<=.5?M*(1+g):M+g-M*g,S=2*M-L;function D(F){return F>360?F-=360:F<0&&(F+=360),F<60?S+(L-S)*F/60:F<180?L:F<240?S+(L-S)*(240-F)/60:S}function B(F){return Math.round(D(F)*255)}return new la(B(h+120),B(h),B(h-120))}e.hcl=nt;function nt(h,g,M){return this instanceof nt?(this.h=+h,this.c=+g,void(this.l=+M)):arguments.length<2?h instanceof nt?new nt(h.h,h.c,h.l):h instanceof Vt?n0(h.l,h.a,h.b):n0((h=a1((h=e.rgb(h)).r,h.g,h.b)).l,h.a,h.b):new nt(h,g,M)}var ra=nt.prototype=new Yr;ra.brighter=function(h){return new nt(this.h,this.c,Math.min(100,this.l+Ct*(arguments.length?h:1)))},ra.darker=function(h){return new nt(this.h,this.c,Math.max(0,this.l-Ct*(arguments.length?h:1)))},ra.rgb=function(){return En(this.h,this.c,this.l).rgb()};function En(h,g,M){return isNaN(h)&&(h=0),isNaN(g)&&(g=0),new Vt(M,Math.cos(h*=ge)*g,Math.sin(h)*g)}e.lab=Vt;function Vt(h,g,M){return this instanceof Vt?(this.l=+h,this.a=+g,void(this.b=+M)):arguments.length<2?h instanceof Vt?new Vt(h.l,h.a,h.b):h instanceof nt?En(h.h,h.c,h.l):a1((h=la(h)).r,h.g,h.b):new Vt(h,g,M)}var Ct=18,ta=.95047,aa=1,ht=1.08883,Wa=Vt.prototype=new Yr;Wa.brighter=function(h){return new Vt(Math.min(100,this.l+Ct*(arguments.length?h:1)),this.a,this.b)},Wa.darker=function(h){return new Vt(Math.max(0,this.l-Ct*(arguments.length?h:1)),this.a,this.b)},Wa.rgb=function(){return Ht(this.l,this.a,this.b)};function Ht(h,g,M){var S=(h+16)/116,L=S+g/500,D=S-M/200;return L=Pn(L)*ta,S=Pn(S)*aa,D=Pn(D)*ht,new la(li(3.2404542*L-1.5371385*S-.4985314*D),li(-.969266*L+1.8760108*S+.041556*D),li(.0556434*L-.2040259*S+1.0572252*D))}function n0(h,g,M){return h>0?new nt(Math.atan2(M,g)*ze,Math.sqrt(g*g+M*M),h):new nt(NaN,NaN,h)}function Pn(h){return h>.206893034?h*h*h:(h-4/29)/7.787037}function mo(h){return h>.008856?Math.pow(h,1/3):7.787037*h+4/29}function li(h){return Math.round(255*(h<=.00304?12.92*h:1.055*Math.pow(h,1/2.4)-.055))}e.rgb=la;function la(h,g,M){return this instanceof la?(this.r=~~h,this.g=~~g,void(this.b=~~M)):arguments.length<2?h instanceof la?new la(h.r,h.g,h.b):r1(\"\"+h,la,Mt):new la(h,g,M)}function i0(h){return new la(h>>16,h>>8&255,h&255)}function ls(h){return i0(h)+\"\"}var Rn=la.prototype=new Yr;Rn.brighter=function(h){h=Math.pow(.7,arguments.length?h:1);var g=this.r,M=this.g,S=this.b,L=30;return!g&&!M&&!S?new la(L,L,L):(g&&g<L&&(g=L),M&&M<L&&(M=L),S&&S<L&&(S=L),new la(Math.min(255,g/h),Math.min(255,M/h),Math.min(255,S/h)))},Rn.darker=function(h){return h=Math.pow(.7,arguments.length?h:1),new la(h*this.r,h*this.g,h*this.b)},Rn.hsl=function(){return t1(this.r,this.g,this.b)},Rn.toString=function(){return\"#\"+ss(this.r)+ss(this.g)+ss(this.b)};function ss(h){return h<16?\"0\"+Math.max(0,h).toString(16):Math.min(255,h).toString(16)}function r1(h,g,M){var S=0,L=0,D=0,B,F,H;if(B=/([a-z]+)\\((.*)\\)/.exec(h=h.toLowerCase()),B)switch(F=B[2].split(\",\"),B[1]){case\"hsl\":return M(parseFloat(F[0]),parseFloat(F[1])/100,parseFloat(F[2])/100);case\"rgb\":return g(Fv(F[0]),Fv(F[1]),Fv(F[2]))}return(H=Mr.get(h))?g(H.r,H.g,H.b):(h!=null&&h.charAt(0)===\"#\"&&!isNaN(H=parseInt(h.slice(1),16))&&(h.length===4?(S=(H&3840)>>4,S=S>>4|S,L=H&240,L=L>>4|L,D=H&15,D=D<<4|D):h.length===7&&(S=(H&16711680)>>16,L=(H&65280)>>8,D=H&255)),g(S,L,D))}function t1(h,g,M){var S=Math.min(h/=255,g/=255,M/=255),L=Math.max(h,g,M),D=L-S,B,F,H=(L+S)/2;return D?(F=H<.5?D/(L+S):D/(2-L-S),h==L?B=(g-M)/D+(g<M?6:0):g==L?B=(M-h)/D+2:B=(h-g)/D+4,B*=60):(B=NaN,F=H>0&&H<1?0:B),new vt(B,F,H)}function a1(h,g,M){h=Rv(h),g=Rv(g),M=Rv(M);var S=mo((.4124564*h+.3575761*g+.1804375*M)/ta),L=mo((.2126729*h+.7151522*g+.072175*M)/aa),D=mo((.0193339*h+.119192*g+.9503041*M)/ht);return Vt(116*L-16,500*(S-L),200*(L-D))}function Rv(h){return(h/=255)<=.04045?h/12.92:Math.pow((h+.055)/1.055,2.4)}function Fv(h){var g=parseFloat(h);return h.charAt(h.length-1)===\"%\"?Math.round(g*2.55):g}var Mr=e.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Mr.forEach(function(h,g){Mr.set(h,i0(g))});function Ar(h){return typeof h==\"function\"?h:function(){return h}}e.functor=Ar,e.xhr=dt(O);function dt(h){return function(g,M,S){return arguments.length===2&&typeof M==\"function\"&&(S=M,M=null),ur(g,M,h,S)}}function ur(h,g,M,S){var L={},D=e.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),B={},F=new XMLHttpRequest,H=null;self.XDomainRequest&&!(\"withCredentials\"in F)&&/^(http(s)?:)?\\/\\//.test(h)&&(F=new XDomainRequest),\"onload\"in F?F.onload=F.onerror=X:F.onreadystatechange=function(){F.readyState>3&&X()};function X(){var Z=F.status,K;if(!Z&&Ft(F)||Z>=200&&Z<300||Z===304){try{K=M.call(L,F)}catch(Q){D.error.call(L,Q);return}D.load.call(L,K)}else D.error.call(L,F)}return F.onprogress=function(Z){var K=e.event;e.event=Z;try{D.progress.call(L,F)}finally{e.event=K}},L.header=function(Z,K){return Z=(Z+\"\").toLowerCase(),arguments.length<2?B[Z]:(K==null?delete B[Z]:B[Z]=K+\"\",L)},L.mimeType=function(Z){return arguments.length?(g=Z==null?null:Z+\"\",L):g},L.responseType=function(Z){return arguments.length?(H=Z,L):H},L.response=function(Z){return M=Z,L},[\"get\",\"post\"].forEach(function(Z){L[Z]=function(){return L.send.apply(L,[Z].concat(t(arguments)))}}),L.send=function(Z,K,Q){if(arguments.length===2&&typeof K==\"function\"&&(Q=K,K=null),F.open(Z,h,!0),g!=null&&!(\"accept\"in B)&&(B.accept=g+\",*/*\"),F.setRequestHeader)for(var pe in B)F.setRequestHeader(pe,B[pe]);return g!=null&&F.overrideMimeType&&F.overrideMimeType(g),H!=null&&(F.responseType=H),Q!=null&&L.on(\"error\",Q).on(\"load\",function(we){Q(null,we)}),D.beforesend.call(L,F),F.send(K==null?null:K),L},L.abort=function(){return F.abort(),L},e.rebind(L,D,\"on\"),S==null?L:L.get(gn(S))}function gn(h){return h.length===1?function(g,M){h(g==null?M:null)}:h}function Ft(h){var g=h.responseType;return g&&g!==\"text\"?h.response:h.responseText}e.dsv=function(h,g){var M=new RegExp('[\"'+h+`\n]`),S=h.charCodeAt(0);function L(X,Z,K){arguments.length<3&&(K=Z,Z=null);var Q=ur(X,g,Z==null?D:B(Z),K);return Q.row=function(pe){return arguments.length?Q.response((Z=pe)==null?D:B(pe)):Z},Q}function D(X){return L.parse(X.responseText)}function B(X){return function(Z){return L.parse(Z.responseText,X)}}L.parse=function(X,Z){var K;return L.parseRows(X,function(Q,pe){if(K)return K(Q,pe-1);var we=function(ee){for(var le={},ve=Q.length,_e=0;_e<ve;++_e)le[Q[_e]]=ee[_e];return le};K=Z?function(ee,le){return Z(we(ee),le)}:we})},L.parseRows=function(X,Z){var K={},Q={},pe=[],we=X.length,ee=0,le=0,ve,_e;function Te(){if(ee>=we)return Q;if(_e)return _e=!1,K;var Ye=ee;if(X.charCodeAt(Ye)===34){for(var or=Ye;or++<we;)if(X.charCodeAt(or)===34){if(X.charCodeAt(or+1)!==34)break;++or}ee=or+2;var hr=X.charCodeAt(or+1);return hr===13?(_e=!0,X.charCodeAt(or+2)===10&&++ee):hr===10&&(_e=!0),X.slice(Ye+1,or).replace(/\"\"/g,'\"')}for(;ee<we;){var hr=X.charCodeAt(ee++),fr=1;if(hr===10)_e=!0;else if(hr===13)_e=!0,X.charCodeAt(ee)===10&&(++ee,++fr);else if(hr!==S)continue;return X.slice(Ye,ee-fr)}return X.slice(Ye)}for(;(ve=Te())!==Q;){for(var he=[];ve!==K&&ve!==Q;)he.push(ve),ve=Te();Z&&(he=Z(he,le++))==null||pe.push(he)}return pe},L.format=function(X){if(Array.isArray(X[0]))return L.formatRows(X);var Z=new I,K=[];return X.forEach(function(Q){for(var pe in Q)Z.has(pe)||K.push(Z.add(pe))}),[K.map(H).join(h)].concat(X.map(function(Q){return K.map(function(pe){return H(Q[pe])}).join(h)})).join(`\n`)},L.formatRows=function(X){return X.map(F).join(`\n`)};function F(X){return X.map(H).join(h)}function H(X){return M.test(X)?'\"'+X.replace(/\\\"/g,'\"\"')+'\"':X}return L},e.csv=e.dsv(\",\",\"text/csv\"),e.tsv=e.dsv(\"\t\",\"text/tab-separated-values\");var Xa,Za,qi,gu,YM=this[Y(this,\"requestAnimationFrame\")]||function(h){setTimeout(h,17)};e.timer=function(){n1.apply(this,arguments)};function n1(h,g,M){var S=arguments.length;S<2&&(g=0),S<3&&(M=Date.now());var L=M+g,D={c:h,t:L,n:null};return Za?Za.n=D:Xa=D,Za=D,qi||(gu=clearTimeout(gu),qi=1,YM(p5)),D}function p5(){var h=VM(),g=jM()-h;g>24?(isFinite(g)&&(clearTimeout(gu),gu=setTimeout(p5,g)),qi=0):(qi=1,YM(p5))}e.timer.flush=function(){VM(),jM()};function VM(){for(var h=Date.now(),g=Xa;g;)h>=g.t&&g.c(h-g.t)&&(g.c=null),g=g.n;return h}function jM(){for(var h,g=Xa,M=1/0;g;)g.c?(g.t<M&&(M=g.t),g=(h=g).n):g=h?h.n=g.n:Xa=g.n;return Za=h,M}e.round=function(h,g){return g?Math.round(h*(g=Math.pow(10,g)))/g:Math.round(h)},e.geom={};function o0(h){return h[0]}function zv(h){return h[1]}e.geom.hull=function(h){var g=o0,M=zv;if(arguments.length)return S(h);function S(L){if(L.length<3)return[];var D=Ar(g),B=Ar(M),F,H=L.length,X=[],Z=[];for(F=0;F<H;F++)X.push([+D.call(this,L[F],F),+B.call(this,L[F],F),F]);for(X.sort(Pue),F=0;F<H;F++)Z.push([X[F][0],-X[F][1]]);var K=WM(X),Q=WM(Z),pe=Q[0]===K[0],we=Q[Q.length-1]===K[K.length-1],ee=[];for(F=K.length-1;F>=0;--F)ee.push(L[X[K[F]][2]]);for(F=+pe;F<Q.length-we;++F)ee.push(L[X[Q[F]][2]]);return ee}return S.x=function(L){return arguments.length?(g=L,S):g},S.y=function(L){return arguments.length?(M=L,S):M},S};function WM(h){for(var g=h.length,M=[0,1],S=2,L=2;L<g;L++){for(;S>1&&Jr(h[M[S-2]],h[M[S-1]],h[L])<=0;)--S;M[S++]=L}return M.slice(0,S)}function Pue(h,g){return h[0]-g[0]||h[1]-g[1]}e.geom.polygon=function(h){return $(h,i1),h};var i1=e.geom.polygon.prototype=[];i1.area=function(){for(var h=-1,g=this.length,M,S=this[g-1],L=0;++h<g;)M=S,S=this[h],L+=M[1]*S[0]-M[0]*S[1];return L*.5},i1.centroid=function(h){var g=-1,M=this.length,S=0,L=0,D,B=this[M-1],F;for(arguments.length||(h=-1/(6*this.area()));++g<M;)D=B,B=this[g],F=D[0]*B[1]-B[0]*D[1],S+=(D[0]+B[0])*F,L+=(D[1]+B[1])*F;return[S*h,L*h]},i1.clip=function(h){for(var g,M=XM(h),S=-1,L=this.length-XM(this),D,B,F=this[L-1],H,X,Z;++S<L;){for(g=h.slice(),h.length=0,H=this[S],X=g[(B=g.length-M)-1],D=-1;++D<B;)Z=g[D],m5(Z,F,H)?(m5(X,F,H)||h.push(y5(X,Z,F,H)),h.push(Z)):m5(X,F,H)&&h.push(y5(X,Z,F,H)),X=Z;M&&h.push(h[0]),F=H}return h};function m5(h,g,M){return(M[0]-g[0])*(h[1]-g[1])<(M[1]-g[1])*(h[0]-g[0])}function y5(h,g,M,S){var L=h[0],D=M[0],B=g[0]-L,F=S[0]-D,H=h[1],X=M[1],Z=g[1]-H,K=S[1]-X,Q=(F*(H-X)-K*(L-D))/(K*B-F*Z);return[L+Q*B,H+Q*Z]}function XM(h){var g=h[0],M=h[h.length-1];return!(g[0]-M[0]||g[1]-M[1])}var l0,bu,s0,ZM=[],g5,Nv,$M=[];function Rue(){s1(this),this.edge=this.site=this.circle=null}function JM(h){var g=ZM.pop()||new Rue;return g.site=h,g}function b5(h){f0(h),s0.remove(h),ZM.push(h),s1(h)}function Fue(h){var g=h.circle,M=g.x,S=g.cy,L={x:M,y:S},D=h.P,B=h.N,F=[h];b5(h);for(var H=D;H.circle&&b(M-H.circle.x)<Ie&&b(S-H.circle.cy)<Ie;)D=H.P,F.unshift(H),b5(H),H=D;F.unshift(H),f0(H);for(var X=B;X.circle&&b(M-X.circle.x)<Ie&&b(S-X.circle.cy)<Ie;)B=X.N,F.push(X),b5(X),X=B;F.push(X),f0(X);var Z=F.length,K;for(K=1;K<Z;++K)X=F[K],H=F[K-1],o1(X.edge,H.site,X.site,L);H=F[0],X=F[Z-1],X.edge=Iv(H.site,X.site,null,L),u0(H),u0(X)}function zue(h){for(var g=h.x,M=h.y,S,L,D,B,F=s0._;F;)if(D=KM(F,M)-g,D>Ie)F=F.L;else if(B=g-Nue(F,M),B>Ie){if(!F.R){S=F;break}F=F.R}else{D>-Ie?(S=F.P,L=F):B>-Ie?(S=F,L=F.N):S=L=F;break}var H=JM(h);if(s0.insert(S,H),!(!S&&!L)){if(S===L){f0(S),L=JM(S.site),s0.insert(H,L),H.edge=L.edge=Iv(S.site,H.site),u0(S),u0(L);return}if(!L){H.edge=Iv(S.site,H.site);return}f0(S),f0(L);var X=S.site,Z=X.x,K=X.y,Q=h.x-Z,pe=h.y-K,we=L.site,ee=we.x-Z,le=we.y-K,ve=2*(Q*le-pe*ee),_e=Q*Q+pe*pe,Te=ee*ee+le*le,he={x:(le*_e-pe*Te)/ve+Z,y:(Q*Te-ee*_e)/ve+K};o1(L.edge,X,we,he),H.edge=Iv(X,h,null,he),L.edge=Iv(h,we,null,he),u0(S),u0(L)}}function KM(h,g){var M=h.site,S=M.x,L=M.y,D=L-g;if(!D)return S;var B=h.P;if(!B)return-1/0;M=B.site;var F=M.x,H=M.y,X=H-g;if(!X)return F;var Z=F-S,K=1/D-1/X,Q=Z/X;return K?(-Q+Math.sqrt(Q*Q-2*K*(Z*Z/(-2*X)-H+X/2+L-D/2)))/K+S:(S+F)/2}function Nue(h,g){var M=h.N;if(M)return KM(M,g);var S=h.site;return S.y===g?S.x:1/0}function QM(h){this.site=h,this.edges=[]}QM.prototype.prepare=function(){for(var h=this.edges,g=h.length,M;g--;)M=h[g].edge,(!M.b||!M.a)&&h.splice(g,1);return h.sort(ek),h.length};function Iue(h){for(var g=h[0][0],M=h[1][0],S=h[0][1],L=h[1][1],D,B,F,H,X=bu,Z=X.length,K,Q,pe,we,ee,le;Z--;)if(K=X[Z],!(!K||!K.prepare()))for(pe=K.edges,we=pe.length,Q=0;Q<we;)le=pe[Q].end(),F=le.x,H=le.y,ee=pe[++Q%we].start(),D=ee.x,B=ee.y,(b(F-D)>Ie||b(H-B)>Ie)&&(pe.splice(Q,0,new l1(Gue(K.site,le,b(F-g)<Ie&&L-H>Ie?{x:g,y:b(D-g)<Ie?B:L}:b(H-L)<Ie&&M-F>Ie?{x:b(B-L)<Ie?D:M,y:L}:b(F-M)<Ie&&H-S>Ie?{x:M,y:b(D-M)<Ie?B:S}:b(H-S)<Ie&&F-g>Ie?{x:b(B-S)<Ie?D:g,y:S}:null),K.site,null)),++we)}function ek(h,g){return g.angle-h.angle}function Bue(){s1(this),this.x=this.y=this.arc=this.site=this.cy=null}function u0(h){var g=h.P,M=h.N;if(!(!g||!M)){var S=g.site,L=h.site,D=M.site;if(S!==D){var B=L.x,F=L.y,H=S.x-B,X=S.y-F,Z=D.x-B,le=D.y-F,K=2*(H*le-X*Z);if(!(K>=-pr)){var Q=H*H+X*X,pe=Z*Z+le*le,we=(le*Q-X*pe)/K,ee=(H*pe-Z*Q)/K,le=ee+F,ve=$M.pop()||new Bue;ve.arc=h,ve.site=L,ve.x=we+B,ve.y=le+Math.sqrt(we*we+ee*ee),ve.cy=le,h.circle=ve;for(var _e=null,Te=Nv._;Te;)if(ve.y<Te.y||ve.y===Te.y&&ve.x<=Te.x)if(Te.L)Te=Te.L;else{_e=Te.P;break}else if(Te.R)Te=Te.R;else{_e=Te;break}Nv.insert(_e,ve),_e||(g5=ve)}}}}function f0(h){var g=h.circle;g&&(g.P||(g5=g.N),Nv.remove(g),$M.push(g),s1(g),h.circle=null)}function Oue(h,g,M,S){return function(L){var D=L.a,B=L.b,F=D.x,H=D.y,X=B.x,Z=B.y,K=0,Q=1,pe=X-F,we=Z-H,ee;if(ee=h-F,!(!pe&&ee>0)){if(ee/=pe,pe<0){if(ee<K)return;ee<Q&&(Q=ee)}else if(pe>0){if(ee>Q)return;ee>K&&(K=ee)}if(ee=M-F,!(!pe&&ee<0)){if(ee/=pe,pe<0){if(ee>Q)return;ee>K&&(K=ee)}else if(pe>0){if(ee<K)return;ee<Q&&(Q=ee)}if(ee=g-H,!(!we&&ee>0)){if(ee/=we,we<0){if(ee<K)return;ee<Q&&(Q=ee)}else if(we>0){if(ee>Q)return;ee>K&&(K=ee)}if(ee=S-H,!(!we&&ee<0)){if(ee/=we,we<0){if(ee>Q)return;ee>K&&(K=ee)}else if(we>0){if(ee<K)return;ee<Q&&(Q=ee)}return K>0&&(L.a={x:F+K*pe,y:H+K*we}),Q<1&&(L.b={x:F+Q*pe,y:H+Q*we}),L}}}}}}function Hue(h){for(var g=l0,M=Oue(h[0][0],h[0][1],h[1][0],h[1][1]),S=g.length,L;S--;)L=g[S],(!Uue(L,h)||!M(L)||b(L.a.x-L.b.x)<Ie&&b(L.a.y-L.b.y)<Ie)&&(L.a=L.b=null,g.splice(S,1))}function Uue(h,g){var M=h.b;if(M)return!0;var S=h.a,L=g[0][0],D=g[1][0],B=g[0][1],F=g[1][1],H=h.l,X=h.r,Z=H.x,K=H.y,Q=X.x,pe=X.y,we=(Z+Q)/2,ee=(K+pe)/2,le,ve;if(pe===K){if(we<L||we>=D)return;if(Z>Q){if(!S)S={x:we,y:B};else if(S.y>=F)return;M={x:we,y:F}}else{if(!S)S={x:we,y:F};else if(S.y<B)return;M={x:we,y:B}}}else if(le=(Z-Q)/(pe-K),ve=ee-le*we,le<-1||le>1)if(Z>Q){if(!S)S={x:(B-ve)/le,y:B};else if(S.y>=F)return;M={x:(F-ve)/le,y:F}}else{if(!S)S={x:(F-ve)/le,y:F};else if(S.y<B)return;M={x:(B-ve)/le,y:B}}else if(K<pe){if(!S)S={x:L,y:le*L+ve};else if(S.x>=D)return;M={x:D,y:le*D+ve}}else{if(!S)S={x:D,y:le*D+ve};else if(S.x<L)return;M={x:L,y:le*L+ve}}return h.a=S,h.b=M,!0}function rk(h,g){this.l=h,this.r=g,this.a=this.b=null}function Iv(h,g,M,S){var L=new rk(h,g);return l0.push(L),M&&o1(L,h,g,M),S&&o1(L,g,h,S),bu[h.i].edges.push(new l1(L,h,g)),bu[g.i].edges.push(new l1(L,g,h)),L}function Gue(h,g,M){var S=new rk(h,null);return S.a=g,S.b=M,l0.push(S),S}function o1(h,g,M,S){!h.a&&!h.b?(h.a=S,h.l=g,h.r=M):h.l===M?h.b=S:h.a=S}function l1(h,g,M){var S=h.a,L=h.b;this.edge=h,this.site=g,this.angle=M?Math.atan2(M.y-g.y,M.x-g.x):h.l===g?Math.atan2(L.x-S.x,S.y-L.y):Math.atan2(S.x-L.x,L.y-S.y)}l1.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}};function x5(){this._=null}function s1(h){h.U=h.C=h.L=h.R=h.P=h.N=null}x5.prototype={insert:function(h,g){var M,S,L;if(h){if(g.P=h,g.N=h.N,h.N&&(h.N.P=g),h.N=g,h.R){for(h=h.R;h.L;)h=h.L;h.L=g}else h.R=g;M=h}else this._?(h=tk(this._),g.P=null,g.N=h,h.P=h.L=g,M=h):(g.P=g.N=null,this._=g,M=null);for(g.L=g.R=null,g.U=M,g.C=!0,h=g;M&&M.C;)S=M.U,M===S.L?(L=S.R,L&&L.C?(M.C=L.C=!1,S.C=!0,h=S):(h===M.R&&(Bv(this,M),h=M,M=h.U),M.C=!1,S.C=!0,Ov(this,S))):(L=S.L,L&&L.C?(M.C=L.C=!1,S.C=!0,h=S):(h===M.L&&(Ov(this,M),h=M,M=h.U),M.C=!1,S.C=!0,Bv(this,S))),M=h.U;this._.C=!1},remove:function(h){h.N&&(h.N.P=h.P),h.P&&(h.P.N=h.N),h.N=h.P=null;var g=h.U,M,S=h.L,L=h.R,D,B;if(S?L?D=tk(L):D=S:D=L,g?g.L===h?g.L=D:g.R=D:this._=D,S&&L?(B=D.C,D.C=h.C,D.L=S,S.U=D,D!==L?(g=D.U,D.U=h.U,h=D.R,g.L=h,D.R=L,L.U=D):(D.U=g,g=D,h=D.R)):(B=h.C,h=D),h&&(h.U=g),!B){if(h&&h.C){h.C=!1;return}do{if(h===this._)break;if(h===g.L){if(M=g.R,M.C&&(M.C=!1,g.C=!0,Bv(this,g),M=g.R),M.L&&M.L.C||M.R&&M.R.C){(!M.R||!M.R.C)&&(M.L.C=!1,M.C=!0,Ov(this,M),M=g.R),M.C=g.C,g.C=M.R.C=!1,Bv(this,g),h=this._;break}}else if(M=g.L,M.C&&(M.C=!1,g.C=!0,Ov(this,g),M=g.L),M.L&&M.L.C||M.R&&M.R.C){(!M.L||!M.L.C)&&(M.R.C=!1,M.C=!0,Bv(this,M),M=g.L),M.C=g.C,g.C=M.L.C=!1,Ov(this,g),h=this._;break}M.C=!0,h=g,g=g.U}while(!h.C);h&&(h.C=!1)}}};function Bv(h,g){var M=g,S=g.R,L=M.U;L?L.L===M?L.L=S:L.R=S:h._=S,S.U=L,M.U=S,M.R=S.L,M.R&&(M.R.U=M),S.L=M}function Ov(h,g){var M=g,S=g.L,L=M.U;L?L.L===M?L.L=S:L.R=S:h._=S,S.U=L,M.U=S,M.L=S.R,M.L&&(M.L.U=M),S.R=M}function tk(h){for(;h.L;)h=h.L;return h}function _5(h,g){var M=h.sort(Yue).pop(),S,L,D;for(l0=[],bu=new Array(h.length),s0=new x5,Nv=new x5;;)if(D=g5,M&&(!D||M.y<D.y||M.y===D.y&&M.x<D.x))(M.x!==S||M.y!==L)&&(bu[M.i]=new QM(M),zue(M),S=M.x,L=M.y),M=h.pop();else if(D)Fue(D.arc);else break;g&&(Hue(g),Iue(g));var B={cells:bu,edges:l0};return s0=Nv=l0=bu=null,B}function Yue(h,g){return g.y-h.y||g.x-h.x}e.geom.voronoi=function(h){var g=o0,M=zv,S=g,L=M,D=u1;if(h)return B(h);function B(H){var X=new Array(H.length),Z=D[0][0],K=D[0][1],Q=D[1][0],pe=D[1][1];return _5(F(H),D).cells.forEach(function(we,ee){var le=we.edges,ve=we.site,_e=X[ee]=le.length?le.map(function(Te){var he=Te.start();return[he.x,he.y]}):ve.x>=Z&&ve.x<=Q&&ve.y>=K&&ve.y<=pe?[[Z,pe],[Q,pe],[Q,K],[Z,K]]:[];_e.point=H[ee]}),X}function F(H){return H.map(function(X,Z){return{x:Math.round(S(X,Z)/Ie)*Ie,y:Math.round(L(X,Z)/Ie)*Ie,i:Z}})}return B.links=function(H){return _5(F(H)).edges.filter(function(X){return X.l&&X.r}).map(function(X){return{source:H[X.l.i],target:H[X.r.i]}})},B.triangles=function(H){var X=[];return _5(F(H)).cells.forEach(function(Z,K){for(var Q=Z.site,pe=Z.edges.sort(ek),we=-1,ee=pe.length,le,ve,_e=pe[ee-1].edge,Te=_e.l===Q?_e.r:_e.l;++we<ee;)le=_e,ve=Te,_e=pe[we].edge,Te=_e.l===Q?_e.r:_e.l,K<ve.i&&K<Te.i&&Vue(Q,ve,Te)<0&&X.push([H[K],H[ve.i],H[Te.i]])}),X},B.x=function(H){return arguments.length?(S=Ar(g=H),B):g},B.y=function(H){return arguments.length?(L=Ar(M=H),B):M},B.clipExtent=function(H){return arguments.length?(D=H==null?u1:H,B):D===u1?null:D},B.size=function(H){return arguments.length?B.clipExtent(H&&[[0,0],H]):D===u1?null:D&&D[1]},B};var u1=[[-1e6,-1e6],[1e6,1e6]];function Vue(h,g,M){return(h.x-M.x)*(g.y-h.y)-(h.x-g.x)*(M.y-h.y)}e.geom.delaunay=function(h){return e.geom.voronoi().triangles(h)},e.geom.quadtree=function(h,g,M,S,L){var D=o0,B=zv,F;if(F=arguments.length)return D=jue,B=Wue,F===3&&(L=M,S=g,M=g=0),H(h);function H(X){var Z,K=Ar(D),Q=Ar(B),pe,we,ee,le,ve,_e,Te,he;if(g!=null)ve=g,_e=M,Te=S,he=L;else if(Te=he=-(ve=_e=1/0),pe=[],we=[],le=X.length,F)for(ee=0;ee<le;++ee)Z=X[ee],Z.x<ve&&(ve=Z.x),Z.y<_e&&(_e=Z.y),Z.x>Te&&(Te=Z.x),Z.y>he&&(he=Z.y),pe.push(Z.x),we.push(Z.y);else for(ee=0;ee<le;++ee){var Ye=+K(Z=X[ee],ee),or=+Q(Z,ee);Ye<ve&&(ve=Ye),or<_e&&(_e=or),Ye>Te&&(Te=Ye),or>he&&(he=or),pe.push(Ye),we.push(or)}var hr=Te-ve,fr=he-_e;hr>fr?he=_e+hr:Te=ve+fr;function br(wr,Dr,it,sa,gt,ar,Nr,Br){if(!(isNaN(it)||isNaN(sa)))if(wr.leaf){var ot=wr.x,Xt=wr.y;if(ot!=null)if(b(ot-it)+b(Xt-sa)<.01)xr(wr,Dr,it,sa,gt,ar,Nr,Br);else{var Ma=wr.point;wr.x=wr.y=wr.point=null,xr(wr,Ma,ot,Xt,gt,ar,Nr,Br),xr(wr,Dr,it,sa,gt,ar,Nr,Br)}else wr.x=it,wr.y=sa,wr.point=Dr}else xr(wr,Dr,it,sa,gt,ar,Nr,Br)}function xr(wr,Dr,it,sa,gt,ar,Nr,Br){var ot=(gt+Nr)*.5,Xt=(ar+Br)*.5,Ma=it>=ot,$a=sa>=Xt,bn=$a<<1|Ma;wr.leaf=!1,wr=wr.nodes[bn]||(wr.nodes[bn]=ak()),Ma?gt=ot:Nr=ot,$a?ar=Xt:Br=Xt,br(wr,Dr,it,sa,gt,ar,Nr,Br)}var zr=ak();if(zr.add=function(wr){br(zr,wr,+K(wr,++ee),+Q(wr,ee),ve,_e,Te,he)},zr.visit=function(wr){Hv(wr,zr,ve,_e,Te,he)},zr.find=function(wr){return Xue(zr,wr[0],wr[1],ve,_e,Te,he)},ee=-1,g==null){for(;++ee<le;)br(zr,X[ee],pe[ee],we[ee],ve,_e,Te,he);--ee}else X.forEach(zr.add);return pe=we=X=Z=null,zr}return H.x=function(X){return arguments.length?(D=X,H):D},H.y=function(X){return arguments.length?(B=X,H):B},H.extent=function(X){return arguments.length?(X==null?g=M=S=L=null:(g=+X[0][0],M=+X[0][1],S=+X[1][0],L=+X[1][1]),H):g==null?null:[[g,M],[S,L]]},H.size=function(X){return arguments.length?(X==null?g=M=S=L=null:(g=M=0,S=+X[0],L=+X[1]),H):g==null?null:[S-g,L-M]},H};function jue(h){return h.x}function Wue(h){return h.y}function ak(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function Hv(h,g,M,S,L,D){if(!h(g,M,S,L,D)){var B=(M+L)*.5,F=(S+D)*.5,H=g.nodes;H[0]&&Hv(h,H[0],M,S,B,F),H[1]&&Hv(h,H[1],B,S,L,F),H[2]&&Hv(h,H[2],M,F,B,D),H[3]&&Hv(h,H[3],B,F,L,D)}}function Xue(h,g,M,S,L,D,B){var F=1/0,H;return(function X(Z,K,Q,pe,we){if(!(K>D||Q>B||pe<S||we<L)){if(ee=Z.point){var ee,le=g-Z.x,ve=M-Z.y,_e=le*le+ve*ve;if(_e<F){var Te=Math.sqrt(F=_e);S=g-Te,L=M-Te,D=g+Te,B=M+Te,H=ee}}for(var he=Z.nodes,Ye=(K+pe)*.5,or=(Q+we)*.5,hr=g>=Ye,fr=M>=or,br=fr<<1|hr,xr=br+4;br<xr;++br)if(Z=he[br&3])switch(br&3){case 0:X(Z,K,Q,Ye,or);break;case 1:X(Z,Ye,Q,pe,or);break;case 2:X(Z,K,or,Ye,we);break;case 3:X(Z,Ye,or,pe,we);break}}})(h,S,L,D,B),H}e.interpolateRgb=w5;function w5(h,g){h=e.rgb(h),g=e.rgb(g);var M=h.r,S=h.g,L=h.b,D=g.r-M,B=g.g-S,F=g.b-L;return function(H){return\"#\"+ss(Math.round(M+D*H))+ss(Math.round(S+B*H))+ss(Math.round(L+F*H))}}e.interpolateObject=nk;function nk(h,g){var M={},S={},L;for(L in h)L in g?M[L]=xu(h[L],g[L]):S[L]=h[L];for(L in g)L in h||(S[L]=g[L]);return function(D){for(L in M)S[L]=M[L](D);return S}}e.interpolateNumber=Ll;function Ll(h,g){return h=+h,g=+g,function(M){return h*(1-M)+g*M}}e.interpolateString=ik;function ik(h,g){var M=T5.lastIndex=A5.lastIndex=0,S,L,D,B=-1,F=[],H=[];for(h=h+\"\",g=g+\"\";(S=T5.exec(h))&&(L=A5.exec(g));)(D=L.index)>M&&(D=g.slice(M,D),F[B]?F[B]+=D:F[++B]=D),(S=S[0])===(L=L[0])?F[B]?F[B]+=L:F[++B]=L:(F[++B]=null,H.push({i:B,x:Ll(S,L)})),M=A5.lastIndex;return M<g.length&&(D=g.slice(M),F[B]?F[B]+=D:F[++B]=D),F.length<2?H[0]?(g=H[0].x,function(X){return g(X)+\"\"}):function(){return g}:(g=H.length,function(X){for(var Z=0,K;Z<g;++Z)F[(K=H[Z]).i]=K.x(X);return F.join(\"\")})}var T5=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,A5=new RegExp(T5.source,\"g\");e.interpolate=xu;function xu(h,g){for(var M=e.interpolators.length,S;--M>=0&&!(S=e.interpolators[M](h,g)););return S}e.interpolators=[function(h,g){var M=typeof g;return(M===\"string\"?Mr.has(g.toLowerCase())||/^(#|rgb\\(|hsl\\()/i.test(g)?w5:ik:g instanceof Yr?w5:Array.isArray(g)?f1:M===\"object\"&&isNaN(g)?nk:Ll)(h,g)}],e.interpolateArray=f1;function f1(h,g){var M=[],S=[],L=h.length,D=g.length,B=Math.min(h.length,g.length),F;for(F=0;F<B;++F)M.push(xu(h[F],g[F]));for(;F<L;++F)S[F]=h[F];for(;F<D;++F)S[F]=g[F];return function(H){for(F=0;F<B;++F)S[F]=M[F](H);return S}}var ok=function(){return O},Zue=e.map({linear:ok,poly:rfe,quad:function(){return Kue},cubic:function(){return Que},sin:function(){return tfe},exp:function(){return afe},circle:function(){return nfe},elastic:ife,back:ofe,bounce:function(){return lfe}}),$ue=e.map({in:O,out:lk,\"in-out\":sk,\"out-in\":function(h){return sk(lk(h))}});e.ease=function(h){var g=h.indexOf(\"-\"),M=g>=0?h.slice(0,g):h,S=g>=0?h.slice(g+1):\"in\";return M=Zue.get(M)||ok,S=$ue.get(S)||O,Jue(S(M.apply(null,r.call(arguments,1))))};function Jue(h){return function(g){return g<=0?0:g>=1?1:h(g)}}function lk(h){return function(g){return 1-h(1-g)}}function sk(h){return function(g){return .5*(g<.5?h(2*g):2-h(2-2*g))}}function Kue(h){return h*h}function Que(h){return h*h*h}function efe(h){if(h<=0)return 0;if(h>=1)return 1;var g=h*h,M=g*h;return 4*(h<.5?M:3*(h-g)+M-.75)}function rfe(h){return function(g){return Math.pow(g,h)}}function tfe(h){return 1-Math.cos(h*ne)}function afe(h){return Math.pow(2,10*(h-1))}function nfe(h){return 1-Math.sqrt(1-h*h)}function ife(h,g){var M;return arguments.length<2&&(g=.45),arguments.length?M=g/sr*Math.asin(1/h):(h=1,M=g/4),function(S){return 1+h*Math.pow(2,-10*S)*Math.sin((S-M)*sr/g)}}function ofe(h){return h||(h=1.70158),function(g){return g*g*((h+1)*g-h)}}function lfe(h){return h<1/2.75?7.5625*h*h:h<2/2.75?7.5625*(h-=1.5/2.75)*h+.75:h<2.5/2.75?7.5625*(h-=2.25/2.75)*h+.9375:7.5625*(h-=2.625/2.75)*h+.984375}e.interpolateHcl=sfe;function sfe(h,g){h=e.hcl(h),g=e.hcl(g);var M=h.h,S=h.c,L=h.l,D=g.h-M,B=g.c-S,F=g.l-L;return isNaN(B)&&(B=0,S=isNaN(S)?g.c:S),isNaN(D)?(D=0,M=isNaN(M)?g.h:M):D>180?D-=360:D<-180&&(D+=360),function(H){return En(M+D*H,S+B*H,L+F*H)+\"\"}}e.interpolateHsl=ufe;function ufe(h,g){h=e.hsl(h),g=e.hsl(g);var M=h.h,S=h.s,L=h.l,D=g.h-M,B=g.s-S,F=g.l-L;return isNaN(B)&&(B=0,S=isNaN(S)?g.s:S),isNaN(D)?(D=0,M=isNaN(M)?g.h:M):D>180?D-=360:D<-180&&(D+=360),function(H){return Mt(M+D*H,S+B*H,L+F*H)+\"\"}}e.interpolateLab=ffe;function ffe(h,g){h=e.lab(h),g=e.lab(g);var M=h.l,S=h.a,L=h.b,D=g.l-M,B=g.a-S,F=g.b-L;return function(H){return Ht(M+D*H,S+B*H,L+F*H)+\"\"}}e.interpolateRound=uk;function uk(h,g){return g-=h,function(M){return Math.round(h+g*M)}}e.transform=function(h){var g=a.createElementNS(e.ns.prefix.svg,\"g\");return(e.transform=function(M){if(M!=null){g.setAttribute(\"transform\",M);var S=g.transform.baseVal.consolidate()}return new fk(S?S.matrix:vfe)})(h)};function fk(h){var g=[h.a,h.b],M=[h.c,h.d],S=vk(g),L=ck(g,M),D=vk(cfe(M,g,-L))||0;g[0]*M[1]<M[0]*g[1]&&(g[0]*=-1,g[1]*=-1,S*=-1,L*=-1),this.rotate=(S?Math.atan2(g[1],g[0]):Math.atan2(-M[0],M[1]))*ze,this.translate=[h.e,h.f],this.scale=[S,D],this.skew=D?Math.atan2(L,D)*ze:0}fk.prototype.toString=function(){return\"translate(\"+this.translate+\")rotate(\"+this.rotate+\")skewX(\"+this.skew+\")scale(\"+this.scale+\")\"};function ck(h,g){return h[0]*g[0]+h[1]*g[1]}function vk(h){var g=Math.sqrt(ck(h,h));return g&&(h[0]/=g,h[1]/=g),g}function cfe(h,g,M){return h[0]+=M*g[0],h[1]+=M*g[1],h}var vfe={a:1,b:0,c:0,d:1,e:0,f:0};e.interpolateTransform=hk;function c0(h){return h.length?h.pop()+\",\":\"\"}function hfe(h,g,M,S){if(h[0]!==g[0]||h[1]!==g[1]){var L=M.push(\"translate(\",null,\",\",null,\")\");S.push({i:L-4,x:Ll(h[0],g[0])},{i:L-2,x:Ll(h[1],g[1])})}else(g[0]||g[1])&&M.push(\"translate(\"+g+\")\")}function dfe(h,g,M,S){h!==g?(h-g>180?g+=360:g-h>180&&(h+=360),S.push({i:M.push(c0(M)+\"rotate(\",null,\")\")-2,x:Ll(h,g)})):g&&M.push(c0(M)+\"rotate(\"+g+\")\")}function pfe(h,g,M,S){h!==g?S.push({i:M.push(c0(M)+\"skewX(\",null,\")\")-2,x:Ll(h,g)}):g&&M.push(c0(M)+\"skewX(\"+g+\")\")}function mfe(h,g,M,S){if(h[0]!==g[0]||h[1]!==g[1]){var L=M.push(c0(M)+\"scale(\",null,\",\",null,\")\");S.push({i:L-4,x:Ll(h[0],g[0])},{i:L-2,x:Ll(h[1],g[1])})}else(g[0]!==1||g[1]!==1)&&M.push(c0(M)+\"scale(\"+g+\")\")}function hk(h,g){var M=[],S=[];return h=e.transform(h),g=e.transform(g),hfe(h.translate,g.translate,M,S),dfe(h.rotate,g.rotate,M,S),pfe(h.skew,g.skew,M,S),mfe(h.scale,g.scale,M,S),h=g=null,function(L){for(var D=-1,B=S.length,F;++D<B;)M[(F=S[D]).i]=F.x(L);return M.join(\"\")}}function yfe(h,g){return g=(g-=h=+h)||1/g,function(M){return(M-h)/g}}function gfe(h,g){return g=(g-=h=+h)||1/g,function(M){return Math.max(0,Math.min(1,(M-h)/g))}}e.layout={},e.layout.bundle=function(){return function(h){for(var g=[],M=-1,S=h.length;++M<S;)g.push(bfe(h[M]));return g}};function bfe(h){for(var g=h.source,M=h.target,S=xfe(g,M),L=[g];g!==S;)g=g.parent,L.push(g);for(var D=L.length;M!==S;)L.splice(D,0,M),M=M.parent;return L}function dk(h){for(var g=[],M=h.parent;M!=null;)g.push(h),h=M,M=M.parent;return g.push(h),g}function xfe(h,g){if(h===g)return h;for(var M=dk(h),S=dk(g),L=M.pop(),D=S.pop(),B=null;L===D;)B=L,L=M.pop(),D=S.pop();return B}e.layout.chord=function(){var h={},g,M,S,L,D=0,B,F,H;function X(){var K={},Q=[],pe=e.range(L),we=[],ee,le,ve,_e,Te;for(g=[],M=[],ee=0,_e=-1;++_e<L;){for(le=0,Te=-1;++Te<L;)le+=S[_e][Te];Q.push(le),we.push(e.range(L)),ee+=le}for(B&&pe.sort(function(zr,wr){return B(Q[zr],Q[wr])}),F&&we.forEach(function(zr,wr){zr.sort(function(Dr,it){return F(S[wr][Dr],S[wr][it])})}),ee=(sr-D*L)/ee,le=0,_e=-1;++_e<L;){for(ve=le,Te=-1;++Te<L;){var he=pe[_e],Ye=we[he][Te],or=S[he][Ye],hr=le,fr=le+=or*ee;K[he+\"-\"+Ye]={index:he,subindex:Ye,startAngle:hr,endAngle:fr,value:or}}M[he]={index:he,startAngle:ve,endAngle:le,value:Q[he]},le+=D}for(_e=-1;++_e<L;)for(Te=_e-1;++Te<L;){var br=K[_e+\"-\"+Te],xr=K[Te+\"-\"+_e];(br.value||xr.value)&&g.push(br.value<xr.value?{source:xr,target:br}:{source:br,target:xr})}H&&Z()}function Z(){g.sort(function(K,Q){return H((K.source.value+K.target.value)/2,(Q.source.value+Q.target.value)/2)})}return h.matrix=function(K){return arguments.length?(L=(S=K)&&S.length,g=M=null,h):S},h.padding=function(K){return arguments.length?(D=K,g=M=null,h):D},h.sortGroups=function(K){return arguments.length?(B=K,g=M=null,h):B},h.sortSubgroups=function(K){return arguments.length?(F=K,g=null,h):F},h.sortChords=function(K){return arguments.length?(H=K,g&&Z(),h):H},h.chords=function(){return g||X(),g},h.groups=function(){return M||X(),M},h},e.layout.force=function(){var h={},g=e.dispatch(\"start\",\"tick\",\"end\"),M,S=[1,1],L,D,B=.9,F=Mfe,H=kfe,X=-30,Z=Sfe,K=.1,Q=.64,pe=[],we=[],ee,le,ve;function _e(he){return function(Ye,or,hr,fr){if(Ye.point!==he){var br=Ye.cx-he.x,xr=Ye.cy-he.y,zr=fr-or,wr=br*br+xr*xr;if(zr*zr/Q<wr){if(wr<Z){var Dr=Ye.charge/wr;he.px-=br*Dr,he.py-=xr*Dr}return!0}if(Ye.point&&wr&&wr<Z){var Dr=Ye.pointCharge/wr;he.px-=br*Dr,he.py-=xr*Dr}}return!Ye.charge}}h.tick=function(){if((D*=.99)<.005)return M=null,g.end({type:\"end\",alpha:D=0}),!0;var he=pe.length,Ye=we.length,or,hr,fr,br,xr,zr,wr,Dr,it;for(hr=0;hr<Ye;++hr)fr=we[hr],br=fr.source,xr=fr.target,Dr=xr.x-br.x,it=xr.y-br.y,(zr=Dr*Dr+it*it)&&(zr=D*le[hr]*((zr=Math.sqrt(zr))-ee[hr])/zr,Dr*=zr,it*=zr,xr.x-=Dr*(wr=br.weight+xr.weight?br.weight/(br.weight+xr.weight):.5),xr.y-=it*wr,br.x+=Dr*(wr=1-wr),br.y+=it*wr);if((wr=D*K)&&(Dr=S[0]/2,it=S[1]/2,hr=-1,wr))for(;++hr<he;)fr=pe[hr],fr.x+=(Dr-fr.x)*wr,fr.y+=(it-fr.y)*wr;if(X)for(pk(or=e.geom.quadtree(pe),D,ve),hr=-1;++hr<he;)(fr=pe[hr]).fixed||or.visit(_e(fr));for(hr=-1;++hr<he;)fr=pe[hr],fr.fixed?(fr.x=fr.px,fr.y=fr.py):(fr.x-=(fr.px-(fr.px=fr.x))*B,fr.y-=(fr.py-(fr.py=fr.y))*B);g.tick({type:\"tick\",alpha:D})},h.nodes=function(he){return arguments.length?(pe=he,h):pe},h.links=function(he){return arguments.length?(we=he,h):we},h.size=function(he){return arguments.length?(S=he,h):S},h.linkDistance=function(he){return arguments.length?(F=typeof he==\"function\"?he:+he,h):F},h.distance=h.linkDistance,h.linkStrength=function(he){return arguments.length?(H=typeof he==\"function\"?he:+he,h):H},h.friction=function(he){return arguments.length?(B=+he,h):B},h.charge=function(he){return arguments.length?(X=typeof he==\"function\"?he:+he,h):X},h.chargeDistance=function(he){return arguments.length?(Z=he*he,h):Math.sqrt(Z)},h.gravity=function(he){return arguments.length?(K=+he,h):K},h.theta=function(he){return arguments.length?(Q=he*he,h):Math.sqrt(Q)},h.alpha=function(he){return arguments.length?(he=+he,D?he>0?D=he:(M.c=null,M.t=NaN,M=null,g.end({type:\"end\",alpha:D=0})):he>0&&(g.start({type:\"start\",alpha:D=he}),M=n1(h.tick)),h):D},h.start=function(){var he,Ye=pe.length,or=we.length,hr=S[0],fr=S[1],br,xr;for(he=0;he<Ye;++he)(xr=pe[he]).index=he,xr.weight=0;for(he=0;he<or;++he)xr=we[he],typeof xr.source==\"number\"&&(xr.source=pe[xr.source]),typeof xr.target==\"number\"&&(xr.target=pe[xr.target]),++xr.source.weight,++xr.target.weight;for(he=0;he<Ye;++he)xr=pe[he],isNaN(xr.x)&&(xr.x=zr(\"x\",hr)),isNaN(xr.y)&&(xr.y=zr(\"y\",fr)),isNaN(xr.px)&&(xr.px=xr.x),isNaN(xr.py)&&(xr.py=xr.y);if(ee=[],typeof F==\"function\")for(he=0;he<or;++he)ee[he]=+F.call(this,we[he],he);else for(he=0;he<or;++he)ee[he]=F;if(le=[],typeof H==\"function\")for(he=0;he<or;++he)le[he]=+H.call(this,we[he],he);else for(he=0;he<or;++he)le[he]=H;if(ve=[],typeof X==\"function\")for(he=0;he<Ye;++he)ve[he]=+X.call(this,pe[he],he);else for(he=0;he<Ye;++he)ve[he]=X;function zr(wr,Dr){if(!br){for(br=new Array(Ye),gt=0;gt<Ye;++gt)br[gt]=[];for(gt=0;gt<or;++gt){var it=we[gt];br[it.source.index].push(it.target),br[it.target.index].push(it.source)}}for(var sa=br[he],gt=-1,ar=sa.length,Nr;++gt<ar;)if(!isNaN(Nr=sa[gt][wr]))return Nr;return Math.random()*Dr}return h.resume()},h.resume=function(){return h.alpha(.1)},h.stop=function(){return h.alpha(0)},h.drag=function(){if(L||(L=e.behavior.drag().origin(O).on(\"dragstart.force\",_fe).on(\"drag.force\",Te).on(\"dragend.force\",wfe)),!arguments.length)return L;this.on(\"mouseover.force\",Tfe).on(\"mouseout.force\",Afe).call(L)};function Te(he){he.px=e.event.x,he.py=e.event.y,h.resume()}return e.rebind(h,g,\"on\")};function _fe(h){h.fixed|=2}function wfe(h){h.fixed&=-7}function Tfe(h){h.fixed|=4,h.px=h.x,h.py=h.y}function Afe(h){h.fixed&=-5}function pk(h,g,M){var S=0,L=0;if(h.charge=0,!h.leaf)for(var D=h.nodes,B=D.length,F=-1,H;++F<B;)H=D[F],H!=null&&(pk(H,g,M),h.charge+=H.charge,S+=H.charge*H.cx,L+=H.charge*H.cy);if(h.point){h.leaf||(h.point.x+=Math.random()-.5,h.point.y+=Math.random()-.5);var X=g*M[h.point.index];h.charge+=h.pointCharge=X,S+=X*h.point.x,L+=X*h.point.y}h.cx=S/h.charge,h.cy=L/h.charge}var Mfe=20,kfe=1,Sfe=1/0;e.layout.hierarchy=function(){var h=Cfe,g=qfe,M=Lfe;function S(L){var D=[L],B=[],F;for(L.depth=0;(F=D.pop())!=null;)if(B.push(F),(X=g.call(S,F,F.depth))&&(H=X.length)){for(var H,X,Z;--H>=0;)D.push(Z=X[H]),Z.parent=F,Z.depth=F.depth+1;M&&(F.value=0),F.children=X}else M&&(F.value=+M.call(S,F,F.depth)||0),delete F.children;return Wo(L,function(K){var Q,pe;h&&(Q=K.children)&&Q.sort(h),M&&(pe=K.parent)&&(pe.value+=K.value)}),B}return S.sort=function(L){return arguments.length?(h=L,S):h},S.children=function(L){return arguments.length?(g=L,S):g},S.value=function(L){return arguments.length?(M=L,S):M},S.revalue=function(L){return M&&(Gv(L,function(D){D.children&&(D.value=0)}),Wo(L,function(D){var B;D.children||(D.value=+M.call(S,D,D.depth)||0),(B=D.parent)&&(B.value+=D.value)})),L},S};function Uv(h,g){return e.rebind(h,g,\"sort\",\"children\",\"value\"),h.nodes=h,h.links=Dfe,h}function Gv(h,g){for(var M=[h];(h=M.pop())!=null;)if(g(h),(L=h.children)&&(S=L.length))for(var S,L;--S>=0;)M.push(L[S])}function Wo(h,g){for(var M=[h],S=[];(h=M.pop())!=null;)if(S.push(h),(B=h.children)&&(D=B.length))for(var L=-1,D,B;++L<D;)M.push(B[L]);for(;(h=S.pop())!=null;)g(h)}function qfe(h){return h.children}function Lfe(h){return h.value}function Cfe(h,g){return g.value-h.value}function Dfe(h){return e.merge(h.map(function(g){return(g.children||[]).map(function(M){return{source:g,target:M}})}))}e.layout.partition=function(){var h=e.layout.hierarchy(),g=[1,1];function M(D,B,F,H){var X=D.children;if(D.x=B,D.y=D.depth*H,D.dx=F,D.dy=H,X&&(K=X.length)){var Z=-1,K,Q,pe;for(F=D.value?F/D.value:0;++Z<K;)M(Q=X[Z],B,pe=Q.value*F,H),B+=pe}}function S(D){var B=D.children,F=0;if(B&&(X=B.length))for(var H=-1,X;++H<X;)F=Math.max(F,S(B[H]));return 1+F}function L(D,B){var F=h.call(this,D,B);return M(F[0],0,g[0],g[1]/S(F[0])),F}return L.size=function(D){return arguments.length?(g=D,L):g},Uv(L,h)},e.layout.pie=function(){var h=Number,g=mk,M=0,S=sr,L=0;function D(B){var F=B.length,H=B.map(function(_e,Te){return+h.call(D,_e,Te)}),X=+(typeof M==\"function\"?M.apply(this,arguments):M),Z=(typeof S==\"function\"?S.apply(this,arguments):S)-X,K=Math.min(Math.abs(Z)/F,+(typeof L==\"function\"?L.apply(this,arguments):L)),Q=K*(Z<0?-1:1),pe=e.sum(H),we=pe?(Z-F*Q)/pe:0,ee=e.range(F),le=[],ve;return g!=null&&ee.sort(g===mk?function(_e,Te){return H[Te]-H[_e]}:function(_e,Te){return g(B[_e],B[Te])}),ee.forEach(function(_e){le[_e]={data:B[_e],value:ve=H[_e],startAngle:X,endAngle:X+=ve*we+Q,padAngle:K}}),le}return D.value=function(B){return arguments.length?(h=B,D):h},D.sort=function(B){return arguments.length?(g=B,D):g},D.startAngle=function(B){return arguments.length?(M=B,D):M},D.endAngle=function(B){return arguments.length?(S=B,D):S},D.padAngle=function(B){return arguments.length?(L=B,D):L},D};var mk={};e.layout.stack=function(){var h=O,g=M5,M=k5,S=Rfe,L=Efe,D=Pfe;function B(F,H){if(!(we=F.length))return F;var X=F.map(function(_e,Te){return h.call(B,_e,Te)}),Z=X.map(function(_e){return _e.map(function(Te,he){return[L.call(B,Te,he),D.call(B,Te,he)]})}),K=g.call(B,Z,H);X=e.permute(X,K),Z=e.permute(Z,K);var Q=M.call(B,Z,H),pe=X[0].length,we,ee,le,ve;for(le=0;le<pe;++le)for(S.call(B,X[0][le],ve=Q[le],Z[0][le][1]),ee=1;ee<we;++ee)S.call(B,X[ee][le],ve+=Z[ee-1][le][1],Z[ee][le][1]);return F}return B.values=function(F){return arguments.length?(h=F,B):h},B.order=function(F){return arguments.length?(g=typeof F==\"function\"?F:Ffe.get(F)||M5,B):g},B.offset=function(F){return arguments.length?(M=typeof F==\"function\"?F:zfe.get(F)||k5,B):M},B.x=function(F){return arguments.length?(L=F,B):L},B.y=function(F){return arguments.length?(D=F,B):D},B.out=function(F){return arguments.length?(S=F,B):S},B};function Efe(h){return h.x}function Pfe(h){return h.y}function Rfe(h,g,M){h.y0=g,h.y=M}var Ffe=e.map({\"inside-out\":function(h){var g=h.length,M,S,L=h.map(Nfe),D=h.map(Ife),B=e.range(g).sort(function(K,Q){return L[K]-L[Q]}),F=0,H=0,X=[],Z=[];for(M=0;M<g;++M)S=B[M],F<H?(F+=D[S],X.push(S)):(H+=D[S],Z.push(S));return Z.reverse().concat(X)},reverse:function(h){return e.range(h.length).reverse()},default:M5}),zfe=e.map({silhouette:function(h){var g=h.length,M=h[0].length,S=[],L=0,D,B,F,H=[];for(B=0;B<M;++B){for(D=0,F=0;D<g;D++)F+=h[D][B][1];F>L&&(L=F),S.push(F)}for(B=0;B<M;++B)H[B]=(L-S[B])/2;return H},wiggle:function(h){var g=h.length,M=h[0],S=M.length,L,D,B,F,H,X,Z,K,Q,pe=[];for(pe[0]=K=Q=0,D=1;D<S;++D){for(L=0,F=0;L<g;++L)F+=h[L][D][1];for(L=0,H=0,Z=M[D][0]-M[D-1][0];L<g;++L){for(B=0,X=(h[L][D][1]-h[L][D-1][1])/(2*Z);B<L;++B)X+=(h[B][D][1]-h[B][D-1][1])/Z;H+=X*h[L][D][1]}pe[D]=K-=F?H/F*Z:0,K<Q&&(Q=K)}for(D=0;D<S;++D)pe[D]-=Q;return pe},expand:function(h){var g=h.length,M=h[0].length,S=1/g,L,D,B,F=[];for(D=0;D<M;++D){for(L=0,B=0;L<g;L++)B+=h[L][D][1];if(B)for(L=0;L<g;L++)h[L][D][1]/=B;else for(L=0;L<g;L++)h[L][D][1]=S}for(D=0;D<M;++D)F[D]=0;return F},zero:k5});function M5(h){return e.range(h.length)}function k5(h){for(var g=-1,M=h[0].length,S=[];++g<M;)S[g]=0;return S}function Nfe(h){for(var g=1,M=0,S=h[0][1],L,D=h.length;g<D;++g)(L=h[g][1])>S&&(M=g,S=L);return M}function Ife(h){return h.reduce(Bfe,0)}function Bfe(h,g){return h+g[1]}e.layout.histogram=function(){var h=!0,g=Number,M=Hfe,S=Ofe;function L(D,Q){for(var F=[],H=D.map(g,this),X=M.call(this,H,Q),Z=S.call(this,X,H,Q),K,Q=-1,pe=H.length,we=Z.length-1,ee=h?1:1/pe,le;++Q<we;)K=F[Q]=[],K.dx=Z[Q+1]-(K.x=Z[Q]),K.y=0;if(we>0)for(Q=-1;++Q<pe;)le=H[Q],le>=X[0]&&le<=X[1]&&(K=F[e.bisect(Z,le,1,we)-1],K.y+=ee,K.push(D[Q]));return F}return L.value=function(D){return arguments.length?(g=D,L):g},L.range=function(D){return arguments.length?(M=Ar(D),L):M},L.bins=function(D){return arguments.length?(S=typeof D==\"number\"?function(B){return yk(B,D)}:Ar(D),L):S},L.frequency=function(D){return arguments.length?(h=!!D,L):h},L};function Ofe(h,g){return yk(h,Math.ceil(Math.log(g.length)/Math.LN2+1))}function yk(h,g){for(var M=-1,S=+h[0],L=(h[1]-S)/g,D=[];++M<=g;)D[M]=L*M+S;return D}function Hfe(h){return[e.min(h),e.max(h)]}e.layout.pack=function(){var h=e.layout.hierarchy().sort(Ufe),g=0,M=[1,1],S;function L(D,B){var F=h.call(this,D,B),H=F[0],X=M[0],Z=M[1],K=S==null?Math.sqrt:typeof S==\"function\"?S:function(){return S};if(H.x=H.y=0,Wo(H,function(pe){pe.r=+K(pe.value)}),Wo(H,xk),g){var Q=g*(S?1:Math.max(2*H.r/X,2*H.r/Z))/2;Wo(H,function(pe){pe.r+=Q}),Wo(H,xk),Wo(H,function(pe){pe.r-=Q})}return _k(H,X/2,Z/2,S?1:1/Math.max(2*H.r/X,2*H.r/Z)),F}return L.size=function(D){return arguments.length?(M=D,L):M},L.radius=function(D){return arguments.length?(S=D==null||typeof D==\"function\"?D:+D,L):S},L.padding=function(D){return arguments.length?(g=+D,L):g},Uv(L,h)};function Ufe(h,g){return h.value-g.value}function S5(h,g){var M=h._pack_next;h._pack_next=g,g._pack_prev=h,g._pack_next=M,M._pack_prev=g}function gk(h,g){h._pack_next=g,g._pack_prev=h}function bk(h,g){var M=g.x-h.x,S=g.y-h.y,L=h.r+g.r;return .999*L*L>M*M+S*S}function xk(h){if(!(g=h.children)||!(Q=g.length))return;var g,M=1/0,S=-1/0,L=1/0,D=-1/0,B,F,H,X,Z,K,Q;function pe(he){M=Math.min(he.x-he.r,M),S=Math.max(he.x+he.r,S),L=Math.min(he.y-he.r,L),D=Math.max(he.y+he.r,D)}if(g.forEach(Gfe),B=g[0],B.x=-B.r,B.y=0,pe(B),Q>1&&(F=g[1],F.x=F.r,F.y=0,pe(F),Q>2))for(H=g[2],wk(B,F,H),pe(H),S5(B,H),B._pack_prev=H,S5(H,F),F=B._pack_next,X=3;X<Q;X++){wk(B,F,H=g[X]);var we=0,ee=1,le=1;for(Z=F._pack_next;Z!==F;Z=Z._pack_next,ee++)if(bk(Z,H)){we=1;break}if(we==1)for(K=B._pack_prev;K!==Z._pack_prev&&!bk(K,H);K=K._pack_prev,le++);we?(ee<le||ee==le&&F.r<B.r?gk(B,F=Z):gk(B=K,F),X--):(S5(B,H),F=H,pe(H))}var ve=(M+S)/2,_e=(L+D)/2,Te=0;for(X=0;X<Q;X++)H=g[X],H.x-=ve,H.y-=_e,Te=Math.max(Te,H.r+Math.sqrt(H.x*H.x+H.y*H.y));h.r=Te,g.forEach(Yfe)}function Gfe(h){h._pack_next=h._pack_prev=h}function Yfe(h){delete h._pack_next,delete h._pack_prev}function _k(h,g,M,S){var L=h.children;if(h.x=g+=S*h.x,h.y=M+=S*h.y,h.r*=S,L)for(var D=-1,B=L.length;++D<B;)_k(L[D],g,M,S)}function wk(h,g,M){var S=h.r+M.r,L=g.x-h.x,D=g.y-h.y;if(S&&(L||D)){var B=g.r+M.r,F=L*L+D*D;B*=B,S*=S;var H=.5+(S-B)/(2*F),X=Math.sqrt(Math.max(0,2*B*(S+F)-(S-=F)*S-B*B))/(2*F);M.x=h.x+H*L+X*D,M.y=h.y+H*D-X*L}else M.x=h.x+S,M.y=h.y}e.layout.tree=function(){var h=e.layout.hierarchy().sort(null).value(null),g=Tk,M=[1,1],S=null;function L(Z,K){var Q=h.call(this,Z,K),pe=Q[0],we=D(pe);if(Wo(we,B),we.parent.m=-we.z,Gv(we,F),S)Gv(pe,X);else{var ee=pe,le=pe,ve=pe;Gv(pe,function(Ye){Ye.x<ee.x&&(ee=Ye),Ye.x>le.x&&(le=Ye),Ye.depth>ve.depth&&(ve=Ye)});var _e=g(ee,le)/2-ee.x,Te=M[0]/(le.x+g(le,ee)/2+_e),he=M[1]/(ve.depth||1);Gv(pe,function(Ye){Ye.x=(Ye.x+_e)*Te,Ye.y=Ye.depth*he})}return Q}function D(Z){for(var K={A:null,children:[Z]},Q=[K],pe;(pe=Q.pop())!=null;)for(var we=pe.children,ee,le=0,ve=we.length;le<ve;++le)Q.push((we[le]=ee={_:we[le],parent:pe,children:(ee=we[le].children)&&ee.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:le}).a=ee);return K.children[0]}function B(Z){var K=Z.children,Q=Z.parent.children,pe=Z.i?Q[Z.i-1]:null;if(K.length){jfe(Z);var we=(K[0].z+K[K.length-1].z)/2;pe?(Z.z=pe.z+g(Z._,pe._),Z.m=Z.z-we):Z.z=we}else pe&&(Z.z=pe.z+g(Z._,pe._));Z.parent.A=H(Z,pe,Z.parent.A||Q[0])}function F(Z){Z._.x=Z.z+Z.parent.m,Z.m+=Z.parent.m}function H(Z,K,Q){if(K){for(var pe=Z,we=Z,ee=K,le=pe.parent.children[0],ve=pe.m,_e=we.m,Te=ee.m,he=le.m,Ye;ee=L5(ee),pe=q5(pe),ee&&pe;)le=q5(le),we=L5(we),we.a=Z,Ye=ee.z+Te-pe.z-ve+g(ee._,pe._),Ye>0&&(Vfe(Wfe(ee,Z,Q),Z,Ye),ve+=Ye,_e+=Ye),Te+=ee.m,ve+=pe.m,he+=le.m,_e+=we.m;ee&&!L5(we)&&(we.t=ee,we.m+=Te-_e),pe&&!q5(le)&&(le.t=pe,le.m+=ve-he,Q=Z)}return Q}function X(Z){Z.x*=M[0],Z.y=Z.depth*M[1]}return L.separation=function(Z){return arguments.length?(g=Z,L):g},L.size=function(Z){return arguments.length?(S=(M=Z)==null?X:null,L):S?null:M},L.nodeSize=function(Z){return arguments.length?(S=(M=Z)==null?null:X,L):S?M:null},Uv(L,h)};function Tk(h,g){return h.parent==g.parent?1:2}function q5(h){var g=h.children;return g.length?g[0]:h.t}function L5(h){var g=h.children,M;return(M=g.length)?g[M-1]:h.t}function Vfe(h,g,M){var S=M/(g.i-h.i);g.c-=S,g.s+=M,h.c+=S,g.z+=M,g.m+=M}function jfe(h){for(var g=0,M=0,S=h.children,L=S.length,D;--L>=0;)D=S[L],D.z+=g,D.m+=g,g+=D.s+(M+=D.c)}function Wfe(h,g,M){return h.a.parent===g.parent?h.a:M}e.layout.cluster=function(){var h=e.layout.hierarchy().sort(null).value(null),g=Tk,M=[1,1],S=!1;function L(D,B){var F=h.call(this,D,B),H=F[0],X,Z=0;Wo(H,function(ee){var le=ee.children;le&&le.length?(ee.x=Zfe(le),ee.y=Xfe(le)):(ee.x=X?Z+=g(ee,X):0,ee.y=0,X=ee)});var K=Ak(H),Q=Mk(H),pe=K.x-g(K,Q)/2,we=Q.x+g(Q,K)/2;return Wo(H,S?function(ee){ee.x=(ee.x-H.x)*M[0],ee.y=(H.y-ee.y)*M[1]}:function(ee){ee.x=(ee.x-pe)/(we-pe)*M[0],ee.y=(1-(H.y?ee.y/H.y:1))*M[1]}),F}return L.separation=function(D){return arguments.length?(g=D,L):g},L.size=function(D){return arguments.length?(S=(M=D)==null,L):S?null:M},L.nodeSize=function(D){return arguments.length?(S=(M=D)!=null,L):S?M:null},Uv(L,h)};function Xfe(h){return 1+e.max(h,function(g){return g.y})}function Zfe(h){return h.reduce(function(g,M){return g+M.x},0)/h.length}function Ak(h){var g=h.children;return g&&g.length?Ak(g[0]):h}function Mk(h){var g=h.children,M;return g&&(M=g.length)?Mk(g[M-1]):h}e.layout.treemap=function(){var h=e.layout.hierarchy(),g=Math.round,M=[1,1],S=null,L=C5,D=!1,B,F=\"squarify\",H=.5*(1+Math.sqrt(5));function X(ee,le){for(var ve=-1,_e=ee.length,Te,he;++ve<_e;)he=(Te=ee[ve]).value*(le<0?0:le),Te.area=isNaN(he)||he<=0?0:he}function Z(ee){var le=ee.children;if(le&&le.length){var ve=L(ee),_e=[],Te=le.slice(),he,Ye=1/0,or,hr=F===\"slice\"?ve.dx:F===\"dice\"?ve.dy:F===\"slice-dice\"?ee.depth&1?ve.dy:ve.dx:Math.min(ve.dx,ve.dy),fr;for(X(Te,ve.dx*ve.dy/ee.value),_e.area=0;(fr=Te.length)>0;)_e.push(he=Te[fr-1]),_e.area+=he.area,F!==\"squarify\"||(or=Q(_e,hr))<=Ye?(Te.pop(),Ye=or):(_e.area-=_e.pop().area,pe(_e,hr,ve,!1),hr=Math.min(ve.dx,ve.dy),_e.length=_e.area=0,Ye=1/0);_e.length&&(pe(_e,hr,ve,!0),_e.length=_e.area=0),le.forEach(Z)}}function K(ee){var le=ee.children;if(le&&le.length){var ve=L(ee),_e=le.slice(),Te,he=[];for(X(_e,ve.dx*ve.dy/ee.value),he.area=0;Te=_e.pop();)he.push(Te),he.area+=Te.area,Te.z!=null&&(pe(he,Te.z?ve.dx:ve.dy,ve,!_e.length),he.length=he.area=0);le.forEach(K)}}function Q(ee,le){for(var ve=ee.area,_e,Te=0,he=1/0,Ye=-1,or=ee.length;++Ye<or;)(_e=ee[Ye].area)&&(_e<he&&(he=_e),_e>Te&&(Te=_e));return ve*=ve,le*=le,ve?Math.max(le*Te*H/ve,ve/(le*he*H)):1/0}function pe(ee,le,ve,_e){var Te=-1,he=ee.length,Ye=ve.x,or=ve.y,hr=le?g(ee.area/le):0,fr;if(le==ve.dx){for((_e||hr>ve.dy)&&(hr=ve.dy);++Te<he;)fr=ee[Te],fr.x=Ye,fr.y=or,fr.dy=hr,Ye+=fr.dx=Math.min(ve.x+ve.dx-Ye,hr?g(fr.area/hr):0);fr.z=!0,fr.dx+=ve.x+ve.dx-Ye,ve.y+=hr,ve.dy-=hr}else{for((_e||hr>ve.dx)&&(hr=ve.dx);++Te<he;)fr=ee[Te],fr.x=Ye,fr.y=or,fr.dx=hr,or+=fr.dy=Math.min(ve.y+ve.dy-or,hr?g(fr.area/hr):0);fr.z=!1,fr.dy+=ve.y+ve.dy-or,ve.x+=hr,ve.dx-=hr}}function we(ee){var le=B||h(ee),ve=le[0];return ve.x=ve.y=0,ve.value?(ve.dx=M[0],ve.dy=M[1]):ve.dx=ve.dy=0,B&&h.revalue(ve),X([ve],ve.dx*ve.dy/ve.value),(B?K:Z)(ve),D&&(B=le),le}return we.size=function(ee){return arguments.length?(M=ee,we):M},we.padding=function(ee){if(!arguments.length)return S;function le(Te){var he=ee.call(we,Te,Te.depth);return he==null?C5(Te):kk(Te,typeof he==\"number\"?[he,he,he,he]:he)}function ve(Te){return kk(Te,ee)}var _e;return L=(S=ee)==null?C5:(_e=typeof ee)==\"function\"?le:(_e===\"number\"&&(ee=[ee,ee,ee,ee]),ve),we},we.round=function(ee){return arguments.length?(g=ee?Math.round:Number,we):g!=Number},we.sticky=function(ee){return arguments.length?(D=ee,B=null,we):D},we.ratio=function(ee){return arguments.length?(H=ee,we):H},we.mode=function(ee){return arguments.length?(F=ee+\"\",we):F},Uv(we,h)};function C5(h){return{x:h.x,y:h.y,dx:h.dx,dy:h.dy}}function kk(h,g){var M=h.x+g[3],S=h.y+g[0],L=h.dx-g[1]-g[3],D=h.dy-g[0]-g[2];return L<0&&(M+=L/2,L=0),D<0&&(S+=D/2,D=0),{x:M,y:S,dx:L,dy:D}}e.random={normal:function(h,g){var M=arguments.length;return M<2&&(g=1),M<1&&(h=0),function(){var S,L,D;do S=Math.random()*2-1,L=Math.random()*2-1,D=S*S+L*L;while(!D||D>1);return h+g*S*Math.sqrt(-2*Math.log(D)/D)}},logNormal:function(){var h=e.random.normal.apply(e,arguments);return function(){return Math.exp(h())}},bates:function(h){var g=e.random.irwinHall(h);return function(){return g()/h}},irwinHall:function(h){return function(){for(var g=0,M=0;M<h;M++)g+=Math.random();return g}}},e.scale={};function c1(h){var g=h[0],M=h[h.length-1];return g<M?[g,M]:[M,g]}function v1(h){return h.rangeExtent?h.rangeExtent():c1(h.range())}function $fe(h,g,M,S){var L=M(h[0],h[1]),D=S(g[0],g[1]);return function(B){return D(L(B))}}function D5(h,g){var M=0,S=h.length-1,L=h[M],D=h[S],B;return D<L&&(B=M,M=S,S=B,B=L,L=D,D=B),h[M]=g.floor(L),h[S]=g.ceil(D),h}function Sk(h){return h?{floor:function(g){return Math.floor(g/h)*h},ceil:function(g){return Math.ceil(g/h)*h}}:Jfe}var Jfe={floor:O,ceil:O};function Kfe(h,g,M,S){var L=[],D=[],B=0,F=Math.min(h.length,g.length)-1;for(h[F]<h[0]&&(h=h.slice().reverse(),g=g.slice().reverse());++B<=F;)L.push(M(h[B-1],h[B])),D.push(S(g[B-1],g[B]));return function(H){var X=e.bisect(h,H,1,F)-1;return D[X](L[X](H))}}e.scale.linear=function(){return qk([0,1],[0,1],xu,!1)};function qk(h,g,M,S){var L,D;function B(){var H=Math.min(h.length,g.length)>2?Kfe:$fe,X=S?gfe:yfe;return L=H(h,g,X,M),D=H(g,h,X,xu),F}function F(H){return L(H)}return F.invert=function(H){return D(H)},F.domain=function(H){return arguments.length?(h=H.map(Number),B()):h},F.range=function(H){return arguments.length?(g=H,B()):g},F.rangeRound=function(H){return F.range(H).interpolate(uk)},F.clamp=function(H){return arguments.length?(S=H,B()):S},F.interpolate=function(H){return arguments.length?(M=H,B()):M},F.ticks=function(H){return P5(h,H)},F.tickFormat=function(H,X){return d3_scale_linearTickFormat(h,H,X)},F.nice=function(H){return Ck(h,H),B()},F.copy=function(){return qk(h,g,M,S)},B()}function Lk(h,g){return e.rebind(h,g,\"range\",\"rangeRound\",\"interpolate\",\"clamp\")}function Ck(h,g){return D5(h,Sk(E5(h,g)[2])),D5(h,Sk(E5(h,g)[2])),h}function E5(h,g){g==null&&(g=10);var M=c1(h),S=M[1]-M[0],L=Math.pow(10,Math.floor(Math.log(S/g)/Math.LN10)),D=g/S*L;return D<=.15?L*=10:D<=.35?L*=5:D<=.75&&(L*=2),M[0]=Math.ceil(M[0]/L)*L,M[1]=Math.floor(M[1]/L)*L+L*.5,M[2]=L,M}function P5(h,g){return e.range.apply(e,E5(h,g))}var Qfe={s:1,g:1,p:1,r:1,e:1};function Dk(h){return-Math.floor(Math.log(h)/Math.LN10+.01)}function LHe(h,g){var M=Dk(g[2]);return h in Qfe?Math.abs(M-Dk(Math.max(b(g[0]),b(g[1]))))+ +(h!==\"e\"):M-(h===\"%\")*2}e.scale.log=function(){return Ek(e.scale.linear().domain([0,1]),10,!0,[1,10])};function Ek(h,g,M,S){function L(F){return(M?Math.log(F<0?0:F):-Math.log(F>0?0:-F))/Math.log(g)}function D(F){return M?Math.pow(g,F):-Math.pow(g,-F)}function B(F){return h(L(F))}return B.invert=function(F){return D(h.invert(F))},B.domain=function(F){return arguments.length?(M=F[0]>=0,h.domain((S=F.map(Number)).map(L)),B):S},B.base=function(F){return arguments.length?(g=+F,h.domain(S.map(L)),B):g},B.nice=function(){var F=D5(S.map(L),M?Math:e0e);return h.domain(F),S=F.map(D),B},B.ticks=function(){var F=c1(S),H=[],X=F[0],Z=F[1],K=Math.floor(L(X)),Q=Math.ceil(L(Z)),pe=g%1?2:g;if(isFinite(Q-K)){if(M){for(;K<Q;K++)for(var we=1;we<pe;we++)H.push(D(K)*we);H.push(D(K))}else for(H.push(D(K));K++<Q;)for(var we=pe-1;we>0;we--)H.push(D(K)*we);for(K=0;H[K]<X;K++);for(Q=H.length;H[Q-1]>Z;Q--);H=H.slice(K,Q)}return H},B.copy=function(){return Ek(h.copy(),g,M,S)},Lk(B,h)}var e0e={floor:function(h){return-Math.ceil(-h)},ceil:function(h){return-Math.floor(-h)}};e.scale.pow=function(){return Pk(e.scale.linear(),1,[0,1])};function Pk(h,g,M){var S=h1(g),L=h1(1/g);function D(B){return h(S(B))}return D.invert=function(B){return L(h.invert(B))},D.domain=function(B){return arguments.length?(h.domain((M=B.map(Number)).map(S)),D):M},D.ticks=function(B){return P5(M,B)},D.tickFormat=function(B,F){return d3_scale_linearTickFormat(M,B,F)},D.nice=function(B){return D.domain(Ck(M,B))},D.exponent=function(B){return arguments.length?(S=h1(g=B),L=h1(1/g),h.domain(M.map(S)),D):g},D.copy=function(){return Pk(h.copy(),g,M)},Lk(D,h)}function h1(h){return function(g){return g<0?-Math.pow(-g,h):Math.pow(g,h)}}e.scale.sqrt=function(){return e.scale.pow().exponent(.5)},e.scale.ordinal=function(){return Rk([],{t:\"range\",a:[[]]})};function Rk(h,g){var M,S,L;function D(F){return S[((M.get(F)||(g.t===\"range\"?M.set(F,h.push(F)):NaN))-1)%S.length]}function B(F,H){return e.range(h.length).map(function(X){return F+H*X})}return D.domain=function(F){if(!arguments.length)return h;h=[],M=new x;for(var H=-1,X=F.length,Z;++H<X;)M.has(Z=F[H])||M.set(Z,h.push(Z));return D[g.t].apply(D,g.a)},D.range=function(F){return arguments.length?(S=F,L=0,g={t:\"range\",a:arguments},D):S},D.rangePoints=function(F,H){arguments.length<2&&(H=0);var X=F[0],Z=F[1],K=h.length<2?(X=(X+Z)/2,0):(Z-X)/(h.length-1+H);return S=B(X+K*H/2,K),L=0,g={t:\"rangePoints\",a:arguments},D},D.rangeRoundPoints=function(F,H){arguments.length<2&&(H=0);var X=F[0],Z=F[1],K=h.length<2?(X=Z=Math.round((X+Z)/2),0):(Z-X)/(h.length-1+H)|0;return S=B(X+Math.round(K*H/2+(Z-X-(h.length-1+H)*K)/2),K),L=0,g={t:\"rangeRoundPoints\",a:arguments},D},D.rangeBands=function(F,H,X){arguments.length<2&&(H=0),arguments.length<3&&(X=H);var Z=F[1]<F[0],K=F[Z-0],Q=F[1-Z],pe=(Q-K)/(h.length-H+2*X);return S=B(K+pe*X,pe),Z&&S.reverse(),L=pe*(1-H),g={t:\"rangeBands\",a:arguments},D},D.rangeRoundBands=function(F,H,X){arguments.length<2&&(H=0),arguments.length<3&&(X=H);var Z=F[1]<F[0],K=F[Z-0],Q=F[1-Z],pe=Math.floor((Q-K)/(h.length-H+2*X));return S=B(K+Math.round((Q-K-(h.length-H)*pe)/2),pe),Z&&S.reverse(),L=Math.round(pe*(1-H)),g={t:\"rangeRoundBands\",a:arguments},D},D.rangeBand=function(){return L},D.rangeExtent=function(){return c1(g.a[0])},D.copy=function(){return Rk(h,g)},D.domain(h)}e.scale.category10=function(){return e.scale.ordinal().range(r0e)},e.scale.category20=function(){return e.scale.ordinal().range(t0e)},e.scale.category20b=function(){return e.scale.ordinal().range(a0e)},e.scale.category20c=function(){return e.scale.ordinal().range(n0e)};var r0e=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(ls),t0e=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(ls),a0e=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(ls),n0e=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(ls);e.scale.quantile=function(){return Fk([],[])};function Fk(h,g){var M;function S(){var D=0,B=g.length;for(M=[];++D<B;)M[D-1]=e.quantile(h,D/B);return L}function L(D){if(!isNaN(D=+D))return g[e.bisect(M,D)]}return L.domain=function(D){return arguments.length?(h=D.map(v).filter(d).sort(c),S()):h},L.range=function(D){return arguments.length?(g=D,S()):g},L.quantiles=function(){return M},L.invertExtent=function(D){return D=g.indexOf(D),D<0?[NaN,NaN]:[D>0?M[D-1]:h[0],D<M.length?M[D]:h[h.length-1]]},L.copy=function(){return Fk(h,g)},S()}e.scale.quantize=function(){return zk(0,1,[0,1])};function zk(h,g,M){var S,L;function D(F){return M[Math.max(0,Math.min(L,Math.floor(S*(F-h))))]}function B(){return S=M.length/(g-h),L=M.length-1,D}return D.domain=function(F){return arguments.length?(h=+F[0],g=+F[F.length-1],B()):[h,g]},D.range=function(F){return arguments.length?(M=F,B()):M},D.invertExtent=function(F){return F=M.indexOf(F),F=F<0?NaN:F/S+h,[F,F+1/S]},D.copy=function(){return zk(h,g,M)},B()}e.scale.threshold=function(){return Nk([.5],[0,1])};function Nk(h,g){function M(S){if(S<=S)return g[e.bisect(h,S)]}return M.domain=function(S){return arguments.length?(h=S,M):h},M.range=function(S){return arguments.length?(g=S,M):g},M.invertExtent=function(S){return S=g.indexOf(S),[h[S-1],h[S]]},M.copy=function(){return Nk(h,g)},M}e.scale.identity=function(){return Ik([0,1])};function Ik(h){function g(M){return+M}return g.invert=g,g.domain=g.range=function(M){return arguments.length?(h=M.map(g),g):h},g.ticks=function(M){return P5(h,M)},g.tickFormat=function(M,S){return d3_scale_linearTickFormat(h,M,S)},g.copy=function(){return Ik(h)},g}e.svg={};function i0e(){return 0}e.svg.arc=function(){var h=o0e,g=l0e,M=i0e,S=d1,L=Bk,D=Ok,B=s0e;function F(){var X=Math.max(0,+h.apply(this,arguments)),Z=Math.max(0,+g.apply(this,arguments)),K=L.apply(this,arguments)-ne,Q=D.apply(this,arguments)-ne,pe=Math.abs(Q-K),we=K>Q?0:1;if(Z<X&&(ee=Z,Z=X,X=ee),pe>=yr)return H(Z,we)+(X?H(X,1-we):\"\")+\"Z\";var ee,le,ve,_e,Te=0,he=0,Ye,or,hr,fr,br,xr,zr,wr,Dr=[];if((_e=(+B.apply(this,arguments)||0)/2)&&(ve=S===d1?Math.sqrt(X*X+Z*Z):+S.apply(this,arguments),we||(he*=-1),Z&&(he=mt(ve/Z*Math.sin(_e))),X&&(Te=mt(ve/X*Math.sin(_e)))),Z){Ye=Z*Math.cos(K+he),or=Z*Math.sin(K+he),hr=Z*Math.cos(Q-he),fr=Z*Math.sin(Q-he);var it=Math.abs(Q-K-2*he)<=mr?0:1;if(he&&p1(Ye,or,hr,fr)===we^it){var sa=(K+Q)/2;Ye=Z*Math.cos(sa),or=Z*Math.sin(sa),hr=fr=null}}else Ye=or=0;if(X){br=X*Math.cos(Q-Te),xr=X*Math.sin(Q-Te),zr=X*Math.cos(K+Te),wr=X*Math.sin(K+Te);var gt=Math.abs(K-Q+2*Te)<=mr?0:1;if(Te&&p1(br,xr,zr,wr)===1-we^gt){var ar=(K+Q)/2;br=X*Math.cos(ar),xr=X*Math.sin(ar),zr=wr=null}}else br=xr=0;if(pe>Ie&&(ee=Math.min(Math.abs(Z-X)/2,+M.apply(this,arguments)))>.001){le=X<Z^we?0:1;var Nr=ee,Br=ee;if(pe<mr){var ot=zr==null?[br,xr]:hr==null?[Ye,or]:y5([Ye,or],[zr,wr],[hr,fr],[br,xr]),Xt=Ye-ot[0],Ma=or-ot[1],$a=hr-ot[0],bn=fr-ot[1],Fn=1/Math.sin(Math.acos((Xt*$a+Ma*bn)/(Math.sqrt(Xt*Xt+Ma*Ma)*Math.sqrt($a*$a+bn*bn)))/2),xn=Math.sqrt(ot[0]*ot[0]+ot[1]*ot[1]);Br=Math.min(ee,(X-xn)/(Fn-1)),Nr=Math.min(ee,(Z-xn)/(Fn+1))}if(hr!=null){var Gn=m1(zr==null?[br,xr]:[zr,wr],[Ye,or],Z,Nr,we),sn=m1([hr,fr],[br,xr],Z,Nr,we);ee===Nr?Dr.push(\"M\",Gn[0],\"A\",Nr,\",\",Nr,\" 0 0,\",le,\" \",Gn[1],\"A\",Z,\",\",Z,\" 0 \",1-we^p1(Gn[1][0],Gn[1][1],sn[1][0],sn[1][1]),\",\",we,\" \",sn[1],\"A\",Nr,\",\",Nr,\" 0 0,\",le,\" \",sn[0]):Dr.push(\"M\",Gn[0],\"A\",Nr,\",\",Nr,\" 0 1,\",le,\" \",sn[0])}else Dr.push(\"M\",Ye,\",\",or);if(zr!=null){var Yn=m1([Ye,or],[zr,wr],X,-Br,we),wu=m1([br,xr],hr==null?[Ye,or]:[hr,fr],X,-Br,we);ee===Br?Dr.push(\"L\",wu[0],\"A\",Br,\",\",Br,\" 0 0,\",le,\" \",wu[1],\"A\",X,\",\",X,\" 0 \",we^p1(wu[1][0],wu[1][1],Yn[1][0],Yn[1][1]),\",\",1-we,\" \",Yn[1],\"A\",Br,\",\",Br,\" 0 0,\",le,\" \",Yn[0]):Dr.push(\"L\",wu[0],\"A\",Br,\",\",Br,\" 0 0,\",le,\" \",Yn[0])}else Dr.push(\"L\",br,\",\",xr)}else Dr.push(\"M\",Ye,\",\",or),hr!=null&&Dr.push(\"A\",Z,\",\",Z,\" 0 \",it,\",\",we,\" \",hr,\",\",fr),Dr.push(\"L\",br,\",\",xr),zr!=null&&Dr.push(\"A\",X,\",\",X,\" 0 \",gt,\",\",1-we,\" \",zr,\",\",wr);return Dr.push(\"Z\"),Dr.join(\"\")}function H(X,Z){return\"M0,\"+X+\"A\"+X+\",\"+X+\" 0 1,\"+Z+\" 0,\"+-X+\"A\"+X+\",\"+X+\" 0 1,\"+Z+\" 0,\"+X}return F.innerRadius=function(X){return arguments.length?(h=Ar(X),F):h},F.outerRadius=function(X){return arguments.length?(g=Ar(X),F):g},F.cornerRadius=function(X){return arguments.length?(M=Ar(X),F):M},F.padRadius=function(X){return arguments.length?(S=X==d1?d1:Ar(X),F):S},F.startAngle=function(X){return arguments.length?(L=Ar(X),F):L},F.endAngle=function(X){return arguments.length?(D=Ar(X),F):D},F.padAngle=function(X){return arguments.length?(B=Ar(X),F):B},F.centroid=function(){var X=(+h.apply(this,arguments)+ +g.apply(this,arguments))/2,Z=(+L.apply(this,arguments)+ +D.apply(this,arguments))/2-ne;return[Math.cos(Z)*X,Math.sin(Z)*X]},F};var d1=\"auto\";function o0e(h){return h.innerRadius}function l0e(h){return h.outerRadius}function Bk(h){return h.startAngle}function Ok(h){return h.endAngle}function s0e(h){return h&&h.padAngle}function p1(h,g,M,S){return(h-M)*g-(g-S)*h>0?0:1}function m1(h,g,M,S,L){var D=h[0]-g[0],B=h[1]-g[1],F=(L?S:-S)/Math.sqrt(D*D+B*B),H=F*B,X=-F*D,Z=h[0]+H,K=h[1]+X,Q=g[0]+H,pe=g[1]+X,we=(Z+Q)/2,ee=(K+pe)/2,le=Q-Z,ve=pe-K,_e=le*le+ve*ve,Te=M-S,he=Z*pe-Q*K,Ye=(ve<0?-1:1)*Math.sqrt(Math.max(0,Te*Te*_e-he*he)),or=(he*ve-le*Ye)/_e,hr=(-he*le-ve*Ye)/_e,fr=(he*ve+le*Ye)/_e,br=(-he*le+ve*Ye)/_e,xr=or-we,zr=hr-ee,wr=fr-we,Dr=br-ee;return xr*xr+zr*zr>wr*wr+Dr*Dr&&(or=fr,hr=br),[[or-H,hr-X],[or*M/Te,hr*M/Te]]}function Hk(){return!0}function Uk(h){var g=o0,M=zv,S=Hk,L=yo,D=L.key,B=.7;function F(H){var X=[],Z=[],K=-1,Q=H.length,pe,we=Ar(g),ee=Ar(M);function le(){X.push(\"M\",L(h(Z),B))}for(;++K<Q;)S.call(this,pe=H[K],K)?Z.push([+we.call(this,pe,K),+ee.call(this,pe,K)]):Z.length&&(le(),Z=[]);return Z.length&&le(),X.length?X.join(\"\"):null}return F.x=function(H){return arguments.length?(g=H,F):g},F.y=function(H){return arguments.length?(M=H,F):M},F.defined=function(H){return arguments.length?(S=H,F):S},F.interpolate=function(H){return arguments.length?(typeof H==\"function\"?D=L=H:D=(L=R5.get(H)||yo).key,F):D},F.tension=function(H){return arguments.length?(B=H,F):B},F}e.svg.line=function(){return Uk(O)};var R5=e.map({linear:yo,\"linear-closed\":Gk,step:u0e,\"step-before\":F5,\"step-after\":z5,basis:Yk,\"basis-open\":h0e,\"basis-closed\":d0e,bundle:p0e,cardinal:v0e,\"cardinal-open\":f0e,\"cardinal-closed\":c0e,monotone:g0e});R5.forEach(function(h,g){g.key=h,g.closed=/-closed$/.test(h)});function yo(h){return h.length>1?h.join(\"L\"):h+\"Z\"}function Gk(h){return h.join(\"L\")+\"Z\"}function u0e(h){for(var g=0,M=h.length,S=h[0],L=[S[0],\",\",S[1]];++g<M;)L.push(\"H\",(S[0]+(S=h[g])[0])/2,\"V\",S[1]);return M>1&&L.push(\"H\",S[0]),L.join(\"\")}function F5(h){for(var g=0,M=h.length,S=h[0],L=[S[0],\",\",S[1]];++g<M;)L.push(\"V\",(S=h[g])[1],\"H\",S[0]);return L.join(\"\")}function z5(h){for(var g=0,M=h.length,S=h[0],L=[S[0],\",\",S[1]];++g<M;)L.push(\"H\",(S=h[g])[0],\"V\",S[1]);return L.join(\"\")}function f0e(h,g){return h.length<4?yo(h):h[1]+y1(h.slice(1,-1),N5(h,g))}function c0e(h,g){return h.length<3?Gk(h):h[0]+y1((h.push(h[0]),h),N5([h[h.length-2]].concat(h,[h[1]]),g))}function v0e(h,g){return h.length<3?yo(h):h[0]+y1(h,N5(h,g))}function y1(h,g){if(g.length<1||h.length!=g.length&&h.length!=g.length+2)return yo(h);var M=h.length!=g.length,S=\"\",L=h[0],D=h[1],B=g[0],F=B,H=1;if(M&&(S+=\"Q\"+(D[0]-B[0]*2/3)+\",\"+(D[1]-B[1]*2/3)+\",\"+D[0]+\",\"+D[1],L=h[1],H=2),g.length>1){F=g[1],D=h[H],H++,S+=\"C\"+(L[0]+B[0])+\",\"+(L[1]+B[1])+\",\"+(D[0]-F[0])+\",\"+(D[1]-F[1])+\",\"+D[0]+\",\"+D[1];for(var X=2;X<g.length;X++,H++)D=h[H],F=g[X],S+=\"S\"+(D[0]-F[0])+\",\"+(D[1]-F[1])+\",\"+D[0]+\",\"+D[1]}if(M){var Z=h[H];S+=\"Q\"+(D[0]+F[0]*2/3)+\",\"+(D[1]+F[1]*2/3)+\",\"+Z[0]+\",\"+Z[1]}return S}function N5(h,g){for(var M=[],S=(1-g)/2,L,D=h[0],B=h[1],F=1,H=h.length;++F<H;)L=D,D=B,B=h[F],M.push([S*(B[0]-L[0]),S*(B[1]-L[1])]);return M}function Yk(h){if(h.length<3)return yo(h);var g=1,M=h.length,S=h[0],L=S[0],D=S[1],B=[L,L,L,(S=h[1])[0]],F=[D,D,D,S[1]],H=[L,\",\",D,\"L\",Li(us,B),\",\",Li(us,F)];for(h.push(h[M-1]);++g<=M;)S=h[g],B.shift(),B.push(S[0]),F.shift(),F.push(S[1]),I5(H,B,F);return h.pop(),H.push(\"L\",S),H.join(\"\")}function h0e(h){if(h.length<4)return yo(h);for(var g=[],M=-1,S=h.length,L,D=[0],B=[0];++M<3;)L=h[M],D.push(L[0]),B.push(L[1]);for(g.push(Li(us,D)+\",\"+Li(us,B)),--M;++M<S;)L=h[M],D.shift(),D.push(L[0]),B.shift(),B.push(L[1]),I5(g,D,B);return g.join(\"\")}function d0e(h){for(var g,M=-1,S=h.length,L=S+4,D,B=[],F=[];++M<4;)D=h[M%S],B.push(D[0]),F.push(D[1]);for(g=[Li(us,B),\",\",Li(us,F)],--M;++M<L;)D=h[M%S],B.shift(),B.push(D[0]),F.shift(),F.push(D[1]),I5(g,B,F);return g.join(\"\")}function p0e(h,g){var M=h.length-1;if(M)for(var S=h[0][0],L=h[0][1],D=h[M][0]-S,B=h[M][1]-L,F=-1,H,X;++F<=M;)H=h[F],X=F/M,H[0]=g*H[0]+(1-g)*(S+X*D),H[1]=g*H[1]+(1-g)*(L+X*B);return Yk(h)}function Li(h,g){return h[0]*g[0]+h[1]*g[1]+h[2]*g[2]+h[3]*g[3]}var Vk=[0,2/3,1/3,0],jk=[0,1/3,2/3,0],us=[0,1/6,2/3,1/6];function I5(h,g,M){h.push(\"C\",Li(Vk,g),\",\",Li(Vk,M),\",\",Li(jk,g),\",\",Li(jk,M),\",\",Li(us,g),\",\",Li(us,M))}function B5(h,g){return(g[1]-h[1])/(g[0]-h[0])}function m0e(h){for(var g=0,M=h.length-1,S=[],L=h[0],D=h[1],B=S[0]=B5(L,D);++g<M;)S[g]=(B+(B=B5(L=D,D=h[g+1])))/2;return S[g]=B,S}function y0e(h){for(var g=[],M,S,L,D,B=m0e(h),F=-1,H=h.length-1;++F<H;)M=B5(h[F],h[F+1]),b(M)<Ie?B[F]=B[F+1]=0:(S=B[F]/M,L=B[F+1]/M,D=S*S+L*L,D>9&&(D=M*3/Math.sqrt(D),B[F]=D*S,B[F+1]=D*L));for(F=-1;++F<=H;)D=(h[Math.min(H,F+1)][0]-h[Math.max(0,F-1)][0])/(6*(1+B[F]*B[F])),g.push([D||0,B[F]*D||0]);return g}function g0e(h){return h.length<3?yo(h):h[0]+y1(h,y0e(h))}e.svg.line.radial=function(){var h=Uk(Wk);return h.radius=h.x,delete h.x,h.angle=h.y,delete h.y,h};function Wk(h){for(var g,M=-1,S=h.length,L,D;++M<S;)g=h[M],L=g[0],D=g[1]-ne,g[0]=L*Math.cos(D),g[1]=L*Math.sin(D);return h}function Xk(h){var g=o0,M=o0,S=0,L=zv,D=Hk,B=yo,F=B.key,H=B,X=\"L\",Z=.7;function K(Q){var pe=[],we=[],ee=[],le=-1,ve=Q.length,_e,Te=Ar(g),he=Ar(S),Ye=g===M?function(){return hr}:Ar(M),or=S===L?function(){return fr}:Ar(L),hr,fr;function br(){pe.push(\"M\",B(h(ee),Z),X,H(h(we.reverse()),Z),\"Z\")}for(;++le<ve;)D.call(this,_e=Q[le],le)?(we.push([hr=+Te.call(this,_e,le),fr=+he.call(this,_e,le)]),ee.push([+Ye.call(this,_e,le),+or.call(this,_e,le)])):we.length&&(br(),we=[],ee=[]);return we.length&&br(),pe.length?pe.join(\"\"):null}return K.x=function(Q){return arguments.length?(g=M=Q,K):M},K.x0=function(Q){return arguments.length?(g=Q,K):g},K.x1=function(Q){return arguments.length?(M=Q,K):M},K.y=function(Q){return arguments.length?(S=L=Q,K):L},K.y0=function(Q){return arguments.length?(S=Q,K):S},K.y1=function(Q){return arguments.length?(L=Q,K):L},K.defined=function(Q){return arguments.length?(D=Q,K):D},K.interpolate=function(Q){return arguments.length?(typeof Q==\"function\"?F=B=Q:F=(B=R5.get(Q)||yo).key,H=B.reverse||B,X=B.closed?\"M\":\"L\",K):F},K.tension=function(Q){return arguments.length?(Z=Q,K):Z},K}F5.reverse=z5,z5.reverse=F5,e.svg.area=function(){return Xk(O)},e.svg.area.radial=function(){var h=Xk(Wk);return h.radius=h.x,delete h.x,h.innerRadius=h.x0,delete h.x0,h.outerRadius=h.x1,delete h.x1,h.angle=h.y,delete h.y,h.startAngle=h.y0,delete h.y0,h.endAngle=h.y1,delete h.y1,h};function Zk(h){return h.source}function $k(h){return h.target}e.svg.chord=function(){var h=Zk,g=$k,M=b0e,S=Bk,L=Ok;function D(Z,K){var Q=B(this,h,Z,K),pe=B(this,g,Z,K);return\"M\"+Q.p0+H(Q.r,Q.p1,Q.a1-Q.a0)+(F(Q,pe)?X(Q.r,Q.p1,Q.r,Q.p0):X(Q.r,Q.p1,pe.r,pe.p0)+H(pe.r,pe.p1,pe.a1-pe.a0)+X(pe.r,pe.p1,Q.r,Q.p0))+\"Z\"}function B(Z,K,Q,pe){var we=K.call(Z,Q,pe),ee=M.call(Z,we,pe),le=S.call(Z,we,pe)-ne,ve=L.call(Z,we,pe)-ne;return{r:ee,a0:le,a1:ve,p0:[ee*Math.cos(le),ee*Math.sin(le)],p1:[ee*Math.cos(ve),ee*Math.sin(ve)]}}function F(Z,K){return Z.a0==K.a0&&Z.a1==K.a1}function H(Z,K,Q){return\"A\"+Z+\",\"+Z+\" 0 \"+ +(Q>mr)+\",1 \"+K}function X(Z,K,Q,pe){return\"Q 0,0 \"+pe}return D.radius=function(Z){return arguments.length?(M=Ar(Z),D):M},D.source=function(Z){return arguments.length?(h=Ar(Z),D):h},D.target=function(Z){return arguments.length?(g=Ar(Z),D):g},D.startAngle=function(Z){return arguments.length?(S=Ar(Z),D):S},D.endAngle=function(Z){return arguments.length?(L=Ar(Z),D):L},D};function b0e(h){return h.radius}e.svg.diagonal=function(){var h=Zk,g=$k,M=Jk;function S(L,D){var B=h.call(this,L,D),F=g.call(this,L,D),H=(B.y+F.y)/2,X=[B,{x:B.x,y:H},{x:F.x,y:H},F];return X=X.map(M),\"M\"+X[0]+\"C\"+X[1]+\" \"+X[2]+\" \"+X[3]}return S.source=function(L){return arguments.length?(h=Ar(L),S):h},S.target=function(L){return arguments.length?(g=Ar(L),S):g},S.projection=function(L){return arguments.length?(M=L,S):M},S};function Jk(h){return[h.x,h.y]}e.svg.diagonal.radial=function(){var h=e.svg.diagonal(),g=Jk,M=h.projection;return h.projection=function(S){return arguments.length?M(x0e(g=S)):g},h};function x0e(h){return function(){var g=h.apply(this,arguments),M=g[0],S=g[1]-ne;return[M*Math.cos(S),M*Math.sin(S)]}}e.svg.symbol=function(){var h=w0e,g=_0e;function M(S,L){return(Qk.get(h.call(this,S,L))||Kk)(g.call(this,S,L))}return M.type=function(S){return arguments.length?(h=Ar(S),M):h},M.size=function(S){return arguments.length?(g=Ar(S),M):g},M};function _0e(){return 64}function w0e(){return\"circle\"}function Kk(h){var g=Math.sqrt(h/mr);return\"M0,\"+g+\"A\"+g+\",\"+g+\" 0 1,1 0,\"+-g+\"A\"+g+\",\"+g+\" 0 1,1 0,\"+g+\"Z\"}var Qk=e.map({circle:Kk,cross:function(h){var g=Math.sqrt(h/5)/2;return\"M\"+-3*g+\",\"+-g+\"H\"+-g+\"V\"+-3*g+\"H\"+g+\"V\"+-g+\"H\"+3*g+\"V\"+g+\"H\"+g+\"V\"+3*g+\"H\"+-g+\"V\"+g+\"H\"+-3*g+\"Z\"},diamond:function(h){var g=Math.sqrt(h/(2*eS)),M=g*eS;return\"M0,\"+-g+\"L\"+M+\",0 0,\"+g+\" \"+-M+\",0Z\"},square:function(h){var g=Math.sqrt(h)/2;return\"M\"+-g+\",\"+-g+\"L\"+g+\",\"+-g+\" \"+g+\",\"+g+\" \"+-g+\",\"+g+\"Z\"},\"triangle-down\":function(h){var g=Math.sqrt(h/g1),M=g*g1/2;return\"M0,\"+M+\"L\"+g+\",\"+-M+\" \"+-g+\",\"+-M+\"Z\"},\"triangle-up\":function(h){var g=Math.sqrt(h/g1),M=g*g1/2;return\"M0,\"+-M+\"L\"+g+\",\"+M+\" \"+-g+\",\"+M+\"Z\"}});e.svg.symbolTypes=Qk.keys();var g1=Math.sqrt(3),eS=Math.tan(30*ge);oe.transition=function(h){for(var g=_u||++tS,M=H5(h),S=[],L,D,B=x1||{time:Date.now(),ease:efe,delay:0,duration:250},F=-1,H=this.length;++F<H;){S.push(L=[]);for(var X=this[F],Z=-1,K=X.length;++Z<K;)(D=X[Z])&&_1(D,Z,M,g,B),L.push(D)}return Yv(S,M,g)},oe.interrupt=function(h){return this.each(h==null?b1:rS(H5(h)))};var b1=rS(H5());function rS(h){return function(){var g,M,S;(g=this[h])&&(S=g[M=g.active])&&(S.timer.c=null,S.timer.t=NaN,--g.count?delete g[M]:delete this[h],g.active+=.5,S.event&&S.event.interrupt.call(this,this.__data__,S.index))}}function Yv(h,g,M){return $(h,Aa),h.namespace=g,h.id=M,h}var Aa=[],tS=0,_u,x1;Aa.call=oe.call,Aa.empty=oe.empty,Aa.node=oe.node,Aa.size=oe.size,e.transition=function(h,g){return h&&h.transition?_u?h.transition(g):h:e.selection().transition(h)},e.transition.prototype=Aa,Aa.select=function(h){var g=this.id,M=this.namespace,S=[],L,D,B;h=be(h);for(var F=-1,H=this.length;++F<H;){S.push(L=[]);for(var X=this[F],Z=-1,K=X.length;++Z<K;)(B=X[Z])&&(D=h.call(B,B.__data__,Z,F))?(\"__data__\"in B&&(D.__data__=B.__data__),_1(D,Z,M,g,B[M][g]),L.push(D)):L.push(null)}return Yv(S,M,g)},Aa.selectAll=function(h){var g=this.id,M=this.namespace,S=[],L,D,B,F,H;h=Re(h);for(var X=-1,Z=this.length;++X<Z;)for(var K=this[X],Q=-1,pe=K.length;++Q<pe;)if(B=K[Q]){H=B[M][g],D=h.call(B,B.__data__,Q,X),S.push(L=[]);for(var we=-1,ee=D.length;++we<ee;)(F=D[we])&&_1(F,we,M,g,H),L.push(F)}return Yv(S,M,g)},Aa.filter=function(h){var g=[],M,S,L;typeof h!=\"function\"&&(h=re(h));for(var D=0,B=this.length;D<B;D++){g.push(M=[]);for(var S=this[D],F=0,H=S.length;F<H;F++)(L=S[F])&&h.call(L,L.__data__,F,D)&&M.push(L)}return Yv(g,this.namespace,this.id)},Aa.tween=function(h,g){var M=this.id,S=this.namespace;return arguments.length<2?this.node()[S][M].tween.get(h):Ge(this,g==null?function(L){L[S][M].tween.remove(h)}:function(L){L[S][M].tween.set(h,g)})};function O5(h,g,M,S){var L=h.id,D=h.namespace;return Ge(h,typeof M==\"function\"?function(B,F,H){B[D][L].tween.set(g,S(M.call(B,B.__data__,F,H)))}:(M=S(M),function(B){B[D][L].tween.set(g,M)}))}Aa.attr=function(h,g){if(arguments.length<2){for(g in h)this.attr(g,h[g]);return this}var M=h==\"transform\"?hk:xu,S=e.ns.qualify(h);function L(){this.removeAttribute(S)}function D(){this.removeAttributeNS(S.space,S.local)}function B(H){return H==null?L:(H+=\"\",function(){var X=this.getAttribute(S),Z;return X!==H&&(Z=M(X,H),function(K){this.setAttribute(S,Z(K))})})}function F(H){return H==null?D:(H+=\"\",function(){var X=this.getAttributeNS(S.space,S.local),Z;return X!==H&&(Z=M(X,H),function(K){this.setAttributeNS(S.space,S.local,Z(K))})})}return O5(this,\"attr.\"+h,g,S.local?F:B)},Aa.attrTween=function(h,g){var M=e.ns.qualify(h);function S(D,B){var F=g.call(this,D,B,this.getAttribute(M));return F&&function(H){this.setAttribute(M,F(H))}}function L(D,B){var F=g.call(this,D,B,this.getAttributeNS(M.space,M.local));return F&&function(H){this.setAttributeNS(M.space,M.local,F(H))}}return this.tween(\"attr.\"+h,M.local?L:S)},Aa.style=function(h,g,M){var S=arguments.length;if(S<3){if(typeof h!=\"string\"){S<2&&(g=\"\");for(M in h)this.style(M,h[M],g);return this}M=\"\"}function L(){this.style.removeProperty(h)}function D(B){return B==null?L:(B+=\"\",function(){var F=i(this).getComputedStyle(this,null).getPropertyValue(h),H;return F!==B&&(H=xu(F,B),function(X){this.style.setProperty(h,H(X),M)})})}return O5(this,\"style.\"+h,g,D)},Aa.styleTween=function(h,g,M){arguments.length<3&&(M=\"\");function S(L,D){var B=g.call(this,L,D,i(this).getComputedStyle(this,null).getPropertyValue(h));return B&&function(F){this.style.setProperty(h,B(F),M)}}return this.tween(\"style.\"+h,S)},Aa.text=function(h){return O5(this,\"text\",h,T0e)};function T0e(h){return h==null&&(h=\"\"),function(){this.textContent=h}}Aa.remove=function(){var h=this.namespace;return this.each(\"end.transition\",function(){var g;this[h].count<2&&(g=this.parentNode)&&g.removeChild(this)})},Aa.ease=function(h){var g=this.id,M=this.namespace;return arguments.length<1?this.node()[M][g].ease:(typeof h!=\"function\"&&(h=e.ease.apply(e,arguments)),Ge(this,function(S){S[M][g].ease=h}))},Aa.delay=function(h){var g=this.id,M=this.namespace;return arguments.length<1?this.node()[M][g].delay:Ge(this,typeof h==\"function\"?function(S,L,D){S[M][g].delay=+h.call(S,S.__data__,L,D)}:(h=+h,function(S){S[M][g].delay=h}))},Aa.duration=function(h){var g=this.id,M=this.namespace;return arguments.length<1?this.node()[M][g].duration:Ge(this,typeof h==\"function\"?function(S,L,D){S[M][g].duration=Math.max(1,h.call(S,S.__data__,L,D))}:(h=Math.max(1,h),function(S){S[M][g].duration=h}))},Aa.each=function(h,g){var M=this.id,S=this.namespace;if(arguments.length<2){var L=x1,D=_u;try{_u=M,Ge(this,function(B,F,H){x1=B[S][M],h.call(B,B.__data__,F,H)})}finally{x1=L,_u=D}}else Ge(this,function(B){var F=B[S][M];(F.event||(F.event=e.dispatch(\"start\",\"end\",\"interrupt\"))).on(h,g)});return this},Aa.transition=function(){for(var h=this.id,g=++tS,M=this.namespace,S=[],L,D,B,F,H=0,X=this.length;H<X;H++){S.push(L=[]);for(var D=this[H],Z=0,K=D.length;Z<K;Z++)(B=D[Z])&&(F=B[M][h],_1(B,Z,M,g,{time:F.time,ease:F.ease,delay:F.delay+F.duration,duration:F.duration})),L.push(B)}return Yv(S,M,g)};function H5(h){return h==null?\"__transition__\":\"__transition_\"+h+\"__\"}function _1(h,g,M,S,L){var D=h[M]||(h[M]={active:0,count:0}),B=D[S],F,H,X,Z,K;function Q(ee){var le=B.delay;if(H.t=le+F,le<=ee)return pe(ee-le);H.c=pe}function pe(ee){var le=D.active,ve=D[le];ve&&(ve.timer.c=null,ve.timer.t=NaN,--D.count,delete D[le],ve.event&&ve.event.interrupt.call(h,h.__data__,ve.index));for(var _e in D)if(+_e<S){var Te=D[_e];Te.timer.c=null,Te.timer.t=NaN,--D.count,delete D[_e]}H.c=we,n1(function(){return H.c&&we(ee||1)&&(H.c=null,H.t=NaN),1},0,F),D.active=S,B.event&&B.event.start.call(h,h.__data__,g),K=[],B.tween.forEach(function(he,Ye){(Ye=Ye.call(h,h.__data__,g))&&K.push(Ye)}),Z=B.ease,X=B.duration}function we(ee){for(var le=ee/X,ve=Z(le),_e=K.length;_e>0;)K[--_e].call(h,ve);if(le>=1)return B.event&&B.event.end.call(h,h.__data__,g),--D.count?delete D[S]:delete h[M],1}B||(F=L.time,H=n1(Q,0,F),B=D[S]={tween:new x,time:F,timer:H,delay:L.delay,duration:L.duration,ease:L.ease,index:g},L=null,++D.count)}e.svg.axis=function(){var h=e.scale.linear(),g=aS,M=6,S=6,L=3,D=[10],B=null,F;function H(X){X.each(function(){var Z=e.select(this),K=this.__chart__||h,Q=this.__chart__=h.copy(),pe=B==null?Q.ticks?Q.ticks.apply(Q,D):Q.domain():B,we=F==null?Q.tickFormat?Q.tickFormat.apply(Q,D):O:F,ee=Z.selectAll(\".tick\").data(pe,Q),le=ee.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",Ie),ve=e.transition(ee.exit()).style(\"opacity\",Ie).remove(),_e=e.transition(ee.order()).style(\"opacity\",1),Te=Math.max(M,0)+L,he,Ye=v1(Q),or=Z.selectAll(\".domain\").data([0]),hr=(or.enter().append(\"path\").attr(\"class\",\"domain\"),e.transition(or));le.append(\"line\"),le.append(\"text\");var fr=le.select(\"line\"),br=_e.select(\"line\"),xr=ee.select(\"text\").text(we),zr=le.select(\"text\"),wr=_e.select(\"text\"),Dr=g===\"top\"||g===\"left\"?-1:1,it,sa,gt,ar;if(g===\"bottom\"||g===\"top\"?(he=M0e,it=\"x\",gt=\"y\",sa=\"x2\",ar=\"y2\",xr.attr(\"dy\",Dr<0?\"0em\":\".71em\").style(\"text-anchor\",\"middle\"),hr.attr(\"d\",\"M\"+Ye[0]+\",\"+Dr*S+\"V0H\"+Ye[1]+\"V\"+Dr*S)):(he=k0e,it=\"y\",gt=\"x\",sa=\"y2\",ar=\"x2\",xr.attr(\"dy\",\".32em\").style(\"text-anchor\",Dr<0?\"end\":\"start\"),hr.attr(\"d\",\"M\"+Dr*S+\",\"+Ye[0]+\"H0V\"+Ye[1]+\"H\"+Dr*S)),fr.attr(ar,Dr*M),zr.attr(gt,Dr*Te),br.attr(sa,0).attr(ar,Dr*M),wr.attr(it,0).attr(gt,Dr*Te),Q.rangeBand){var Nr=Q,Br=Nr.rangeBand()/2;K=Q=function(ot){return Nr(ot)+Br}}else K.rangeBand?K=Q:ve.call(he,Q,K);le.call(he,K,Q),_e.call(he,Q,Q)})}return H.scale=function(X){return arguments.length?(h=X,H):h},H.orient=function(X){return arguments.length?(g=X in A0e?X+\"\":aS,H):g},H.ticks=function(){return arguments.length?(D=t(arguments),H):D},H.tickValues=function(X){return arguments.length?(B=X,H):B},H.tickFormat=function(X){return arguments.length?(F=X,H):F},H.tickSize=function(X){var Z=arguments.length;return Z?(M=+X,S=+arguments[Z-1],H):M},H.innerTickSize=function(X){return arguments.length?(M=+X,H):M},H.outerTickSize=function(X){return arguments.length?(S=+X,H):S},H.tickPadding=function(X){return arguments.length?(L=+X,H):L},H.tickSubdivide=function(){return arguments.length&&H},H};var aS=\"bottom\",A0e={top:1,right:1,bottom:1,left:1};function M0e(h,g,M){h.attr(\"transform\",function(S){var L=g(S);return\"translate(\"+(isFinite(L)?L:M(S))+\",0)\"})}function k0e(h,g,M){h.attr(\"transform\",function(S){var L=g(S);return\"translate(0,\"+(isFinite(L)?L:M(S))+\")\"})}e.svg.brush=function(){var h=ae(Z,\"brushstart\",\"brush\",\"brushend\"),g=null,M=null,S=[0,0],L=[0,0],D,B,F=!0,H=!0,X=U5[0];function Z(ee){ee.each(function(){var le=e.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",we).on(\"touchstart.brush\",we),ve=le.selectAll(\".background\").data([0]);ve.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\"),le.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var _e=le.selectAll(\".resize\").data(X,O);_e.exit().remove(),_e.enter().append(\"g\").attr(\"class\",function(or){return\"resize \"+or}).style(\"cursor\",function(or){return S0e[or]}).append(\"rect\").attr(\"x\",function(or){return/[ew]$/.test(or)?-3:null}).attr(\"y\",function(or){return/^[ns]/.test(or)?-3:null}).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\"),_e.style(\"display\",Z.empty()?\"none\":null);var Te=e.transition(le),he=e.transition(ve),Ye;g&&(Ye=v1(g),he.attr(\"x\",Ye[0]).attr(\"width\",Ye[1]-Ye[0]),Q(Te)),M&&(Ye=v1(M),he.attr(\"y\",Ye[0]).attr(\"height\",Ye[1]-Ye[0]),pe(Te)),K(Te)})}Z.event=function(ee){ee.each(function(){var le=h.of(this,arguments),ve={x:S,y:L,i:D,j:B},_e=this.__chart__||ve;this.__chart__=ve,_u?e.select(this).transition().each(\"start.brush\",function(){D=_e.i,B=_e.j,S=_e.x,L=_e.y,le({type:\"brushstart\"})}).tween(\"brush:brush\",function(){var Te=f1(S,ve.x),he=f1(L,ve.y);return D=B=null,function(Ye){S=ve.x=Te(Ye),L=ve.y=he(Ye),le({type:\"brush\",mode:\"resize\"})}}).each(\"end.brush\",function(){D=ve.i,B=ve.j,le({type:\"brush\",mode:\"resize\"}),le({type:\"brushend\"})}):(le({type:\"brushstart\"}),le({type:\"brush\",mode:\"resize\"}),le({type:\"brushend\"}))})};function K(ee){ee.selectAll(\".resize\").attr(\"transform\",function(le){return\"translate(\"+S[+/e$/.test(le)]+\",\"+L[+/^s/.test(le)]+\")\"})}function Q(ee){ee.select(\".extent\").attr(\"x\",S[0]),ee.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\",S[1]-S[0])}function pe(ee){ee.select(\".extent\").attr(\"y\",L[0]),ee.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\",L[1]-L[0])}function we(){var ee=this,le=e.select(e.event.target),ve=h.of(ee,arguments),_e=e.select(ee),Te=le.datum(),he=!/^(n|s)$/.test(Te)&&g,Ye=!/^(e|w)$/.test(Te)&&M,or=le.classed(\"extent\"),hr=ir(ee),fr,br=e.mouse(ee),xr,zr=e.select(i(ee)).on(\"keydown.brush\",it).on(\"keyup.brush\",sa);if(e.event.changedTouches?zr.on(\"touchmove.brush\",gt).on(\"touchend.brush\",Nr):zr.on(\"mousemove.brush\",gt).on(\"mouseup.brush\",Nr),_e.interrupt().selectAll(\"*\").interrupt(),or)br[0]=S[0]-br[0],br[1]=L[0]-br[1];else if(Te){var wr=+/w$/.test(Te),Dr=+/^n/.test(Te);xr=[S[1-wr]-br[0],L[1-Dr]-br[1]],br[0]=S[wr],br[1]=L[Dr]}else e.event.altKey&&(fr=br.slice());_e.style(\"pointer-events\",\"none\").selectAll(\".resize\").style(\"display\",null),e.select(\"body\").style(\"cursor\",le.style(\"cursor\")),ve({type:\"brushstart\"}),gt();function it(){e.event.keyCode==32&&(or||(fr=null,br[0]-=S[1],br[1]-=L[1],or=2),J())}function sa(){e.event.keyCode==32&&or==2&&(br[0]+=S[1],br[1]+=L[1],or=0,J())}function gt(){var Br=e.mouse(ee),ot=!1;xr&&(Br[0]+=xr[0],Br[1]+=xr[1]),or||(e.event.altKey?(fr||(fr=[(S[0]+S[1])/2,(L[0]+L[1])/2]),br[0]=S[+(Br[0]<fr[0])],br[1]=L[+(Br[1]<fr[1])]):fr=null),he&&ar(Br,g,0)&&(Q(_e),ot=!0),Ye&&ar(Br,M,1)&&(pe(_e),ot=!0),ot&&(K(_e),ve({type:\"brush\",mode:or?\"move\":\"resize\"}))}function ar(Br,ot,Xt){var Ma=v1(ot),$a=Ma[0],bn=Ma[1],Fn=br[Xt],xn=Xt?L:S,Gn=xn[1]-xn[0],sn,Yn;if(or&&($a-=Fn,bn-=Gn+Fn),sn=(Xt?H:F)?Math.max($a,Math.min(bn,Br[Xt])):Br[Xt],or?Yn=(sn+=Fn)+Gn:(fr&&(Fn=Math.max($a,Math.min(bn,2*fr[Xt]-sn))),Fn<sn?(Yn=sn,sn=Fn):Yn=Fn),xn[0]!=sn||xn[1]!=Yn)return Xt?B=null:D=null,xn[0]=sn,xn[1]=Yn,!0}function Nr(){gt(),_e.style(\"pointer-events\",\"all\").selectAll(\".resize\").style(\"display\",Z.empty()?\"none\":null),e.select(\"body\").style(\"cursor\",null),zr.on(\"mousemove.brush\",null).on(\"mouseup.brush\",null).on(\"touchmove.brush\",null).on(\"touchend.brush\",null).on(\"keydown.brush\",null).on(\"keyup.brush\",null),hr(),ve({type:\"brushend\"})}}return Z.x=function(ee){return arguments.length?(g=ee,X=U5[!g<<1|!M],Z):g},Z.y=function(ee){return arguments.length?(M=ee,X=U5[!g<<1|!M],Z):M},Z.clamp=function(ee){return arguments.length?(g&&M?(F=!!ee[0],H=!!ee[1]):g?F=!!ee:M&&(H=!!ee),Z):g&&M?[F,H]:g?F:M?H:null},Z.extent=function(ee){var le,ve,_e,Te,he;return arguments.length?(g&&(le=ee[0],ve=ee[1],M&&(le=le[0],ve=ve[0]),D=[le,ve],g.invert&&(le=g(le),ve=g(ve)),ve<le&&(he=le,le=ve,ve=he),(le!=S[0]||ve!=S[1])&&(S=[le,ve])),M&&(_e=ee[0],Te=ee[1],g&&(_e=_e[1],Te=Te[1]),B=[_e,Te],M.invert&&(_e=M(_e),Te=M(Te)),Te<_e&&(he=_e,_e=Te,Te=he),(_e!=L[0]||Te!=L[1])&&(L=[_e,Te])),Z):(g&&(D?(le=D[0],ve=D[1]):(le=S[0],ve=S[1],g.invert&&(le=g.invert(le),ve=g.invert(ve)),ve<le&&(he=le,le=ve,ve=he))),M&&(B?(_e=B[0],Te=B[1]):(_e=L[0],Te=L[1],M.invert&&(_e=M.invert(_e),Te=M.invert(Te)),Te<_e&&(he=_e,_e=Te,Te=he))),g&&M?[[le,_e],[ve,Te]]:g?[le,ve]:M&&[_e,Te])},Z.clear=function(){return Z.empty()||(S=[0,0],L=[0,0],D=B=null),Z},Z.empty=function(){return!!g&&S[0]==S[1]||!!M&&L[0]==L[1]},e.rebind(Z,h,\"on\")};var S0e={n:\"ns-resize\",e:\"ew-resize\",s:\"ns-resize\",w:\"ew-resize\",nw:\"nwse-resize\",ne:\"nesw-resize\",se:\"nwse-resize\",sw:\"nesw-resize\"},U5=[[\"n\",\"e\",\"s\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],[\"e\",\"w\"],[\"n\",\"s\"],[]];e.text=dt(function(h){return h.responseText}),e.json=function(h,g){return ur(h,\"application/json\",q0e,g)};function q0e(h){return JSON.parse(h.responseText)}e.html=function(h,g){return ur(h,\"text/html\",L0e,g)};function L0e(h){var g=a.createRange();return g.selectNode(a.body),g.createContextualFragment(h.responseText)}e.xml=dt(function(h){return h.responseXML}),typeof A1==\"object\"&&A1.exports?A1.exports=e:this.d3=e}).apply(self)});var G5=z((M1,vS)=>{(function(e,r){typeof M1==\"object\"&&typeof vS!=\"undefined\"?r(M1):(e=e||self,r(e.d3=e.d3||{}))})(M1,function(e){\"use strict\";var r=new Date,t=new Date;function a(re,xe,Ge,cr){function Pe(me){return re(me=arguments.length===0?new Date:new Date(+me)),me}return Pe.floor=function(me){return re(me=new Date(+me)),me},Pe.ceil=function(me){return re(me=new Date(me-1)),xe(me,1),re(me),me},Pe.round=function(me){var Ae=Pe(me),He=Pe.ceil(me);return me-Ae<He-me?Ae:He},Pe.offset=function(me,Ae){return xe(me=new Date(+me),Ae==null?1:Math.floor(Ae)),me},Pe.range=function(me,Ae,He){var Ze=[],Be;if(me=Pe.ceil(me),He=He==null?1:Math.floor(He),!(me<Ae)||!(He>0))return Ze;do Ze.push(Be=new Date(+me)),xe(me,He),re(me);while(Be<me&&me<Ae);return Ze},Pe.filter=function(me){return a(function(Ae){if(Ae>=Ae)for(;re(Ae),!me(Ae);)Ae.setTime(Ae-1)},function(Ae,He){if(Ae>=Ae)if(He<0)for(;++He<=0;)for(;xe(Ae,-1),!me(Ae););else for(;--He>=0;)for(;xe(Ae,1),!me(Ae););})},Ge&&(Pe.count=function(me,Ae){return r.setTime(+me),t.setTime(+Ae),re(r),re(t),Math.floor(Ge(r,t))},Pe.every=function(me){return me=Math.floor(me),!isFinite(me)||!(me>0)?null:me>1?Pe.filter(cr?function(Ae){return cr(Ae)%me===0}:function(Ae){return Pe.count(0,Ae)%me===0}):Pe}),Pe}var n=a(function(){},function(re,xe){re.setTime(+re+xe)},function(re,xe){return xe-re});n.every=function(re){return re=Math.floor(re),!isFinite(re)||!(re>0)?null:re>1?a(function(xe){xe.setTime(Math.floor(xe/re)*re)},function(xe,Ge){xe.setTime(+xe+Ge*re)},function(xe,Ge){return(Ge-xe)/re}):n};var i=n.range,o=1e3,l=6e4,s=36e5,u=864e5,f=6048e5,c=a(function(re){re.setTime(re-re.getMilliseconds())},function(re,xe){re.setTime(+re+xe*o)},function(re,xe){return(xe-re)/o},function(re){return re.getUTCSeconds()}),v=c.range,d=a(function(re){re.setTime(re-re.getMilliseconds()-re.getSeconds()*o)},function(re,xe){re.setTime(+re+xe*l)},function(re,xe){return(xe-re)/l},function(re){return re.getMinutes()}),p=d.range,y=a(function(re){re.setTime(re-re.getMilliseconds()-re.getSeconds()*o-re.getMinutes()*l)},function(re,xe){re.setTime(+re+xe*s)},function(re,xe){return(xe-re)/s},function(re){return re.getHours()}),m=y.range,b=a(function(re){re.setHours(0,0,0,0)},function(re,xe){re.setDate(re.getDate()+xe)},function(re,xe){return(xe-re-(xe.getTimezoneOffset()-re.getTimezoneOffset())*l)/u},function(re){return re.getDate()-1}),T=b.range;function w(re){return a(function(xe){xe.setDate(xe.getDate()-(xe.getDay()+7-re)%7),xe.setHours(0,0,0,0)},function(xe,Ge){xe.setDate(xe.getDate()+Ge*7)},function(xe,Ge){return(Ge-xe-(Ge.getTimezoneOffset()-xe.getTimezoneOffset())*l)/f})}var x=w(0),_=w(1),k=w(2),A=w(3),q=w(4),C=w(5),E=w(6),P=x.range,R=_.range,N=k.range,I=A.range,O=q.range,U=C.range,Y=E.range,G=a(function(re){re.setDate(1),re.setHours(0,0,0,0)},function(re,xe){re.setMonth(re.getMonth()+xe)},function(re,xe){return xe.getMonth()-re.getMonth()+(xe.getFullYear()-re.getFullYear())*12},function(re){return re.getMonth()}),V=G.range,W=a(function(re){re.setMonth(0,1),re.setHours(0,0,0,0)},function(re,xe){re.setFullYear(re.getFullYear()+xe)},function(re,xe){return xe.getFullYear()-re.getFullYear()},function(re){return re.getFullYear()});W.every=function(re){return!isFinite(re=Math.floor(re))||!(re>0)?null:a(function(xe){xe.setFullYear(Math.floor(xe.getFullYear()/re)*re),xe.setMonth(0,1),xe.setHours(0,0,0,0)},function(xe,Ge){xe.setFullYear(xe.getFullYear()+Ge*re)})};var j=W.range,J=a(function(re){re.setUTCSeconds(0,0)},function(re,xe){re.setTime(+re+xe*l)},function(re,xe){return(xe-re)/l},function(re){return re.getUTCMinutes()}),te=J.range,ae=a(function(re){re.setUTCMinutes(0,0,0)},function(re,xe){re.setTime(+re+xe*s)},function(re,xe){return(xe-re)/s},function(re){return re.getUTCHours()}),se=ae.range,$=a(function(re){re.setUTCHours(0,0,0,0)},function(re,xe){re.setUTCDate(re.getUTCDate()+xe)},function(re,xe){return(xe-re)/u},function(re){return re.getUTCDate()-1}),fe=$.range;function ie(re){return a(function(xe){xe.setUTCDate(xe.getUTCDate()-(xe.getUTCDay()+7-re)%7),xe.setUTCHours(0,0,0,0)},function(xe,Ge){xe.setUTCDate(xe.getUTCDate()+Ge*7)},function(xe,Ge){return(Ge-xe)/f})}var ue=ie(0),ce=ie(1),oe=ie(2),be=ie(3),Re=ie(4),ye=ie(5),Ce=ie(6),Me=ue.range,Le=ce.range,De=oe.range,Ne=be.range,qe=Re.range,Xe=ye.range,$e=Ce.range,We=a(function(re){re.setUTCDate(1),re.setUTCHours(0,0,0,0)},function(re,xe){re.setUTCMonth(re.getUTCMonth()+xe)},function(re,xe){return xe.getUTCMonth()-re.getUTCMonth()+(xe.getUTCFullYear()-re.getUTCFullYear())*12},function(re){return re.getUTCMonth()}),Se=We.range,Fe=a(function(re){re.setUTCMonth(0,1),re.setUTCHours(0,0,0,0)},function(re,xe){re.setUTCFullYear(re.getUTCFullYear()+xe)},function(re,xe){return xe.getUTCFullYear()-re.getUTCFullYear()},function(re){return re.getUTCFullYear()});Fe.every=function(re){return!isFinite(re=Math.floor(re))||!(re>0)?null:a(function(xe){xe.setUTCFullYear(Math.floor(xe.getUTCFullYear()/re)*re),xe.setUTCMonth(0,1),xe.setUTCHours(0,0,0,0)},function(xe,Ge){xe.setUTCFullYear(xe.getUTCFullYear()+Ge*re)})};var Qe=Fe.range;e.timeDay=b,e.timeDays=T,e.timeFriday=C,e.timeFridays=U,e.timeHour=y,e.timeHours=m,e.timeInterval=a,e.timeMillisecond=n,e.timeMilliseconds=i,e.timeMinute=d,e.timeMinutes=p,e.timeMonday=_,e.timeMondays=R,e.timeMonth=G,e.timeMonths=V,e.timeSaturday=E,e.timeSaturdays=Y,e.timeSecond=c,e.timeSeconds=v,e.timeSunday=x,e.timeSundays=P,e.timeThursday=q,e.timeThursdays=O,e.timeTuesday=k,e.timeTuesdays=N,e.timeWednesday=A,e.timeWednesdays=I,e.timeWeek=x,e.timeWeeks=P,e.timeYear=W,e.timeYears=j,e.utcDay=$,e.utcDays=fe,e.utcFriday=ye,e.utcFridays=Xe,e.utcHour=ae,e.utcHours=se,e.utcMillisecond=n,e.utcMilliseconds=i,e.utcMinute=J,e.utcMinutes=te,e.utcMonday=ce,e.utcMondays=Le,e.utcMonth=We,e.utcMonths=Se,e.utcSaturday=Ce,e.utcSaturdays=$e,e.utcSecond=c,e.utcSeconds=v,e.utcSunday=ue,e.utcSundays=Me,e.utcThursday=Re,e.utcThursdays=qe,e.utcTuesday=oe,e.utcTuesdays=De,e.utcWednesday=be,e.utcWednesdays=Ne,e.utcWeek=ue,e.utcWeeks=Me,e.utcYear=Fe,e.utcYears=Qe,Object.defineProperty(e,\"__esModule\",{value:!0})})});var p0=z((k1,hS)=>{(function(e,r){typeof k1==\"object\"&&typeof hS!=\"undefined\"?r(k1,G5()):(e=e||self,r(e.d3=e.d3||{},e.d3))})(k1,function(e,r){\"use strict\";function t(ne){if(0<=ne.y&&ne.y<100){var ge=new Date(-1,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L);return ge.setFullYear(ne.y),ge}return new Date(ne.y,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L)}function a(ne){if(0<=ne.y&&ne.y<100){var ge=new Date(Date.UTC(-1,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L));return ge.setUTCFullYear(ne.y),ge}return new Date(Date.UTC(ne.y,ne.m,ne.d,ne.H,ne.M,ne.S,ne.L))}function n(ne,ge,ze){return{y:ne,m:ge,d:ze,H:0,M:0,S:0,L:0}}function i(ne){var ge=ne.dateTime,ze=ne.date,Oe=ne.time,Jr=ne.periods,Kr=ne.days,mt=ne.shortDays,yt=ne.months,Lt=ne.shortMonths,Qt=v(Jr),Va=d(Jr),ea=v(Kr),ja=d(Kr),ln=v(mt),oa=d(mt),vr=v(yt),_t=d(yt),Yr=v(Lt),vt=d(Lt),Rt={a:mo,A:li,b:la,B:i0,c:null,d:G,e:G,f:te,g:ye,G:Me,H:V,I:W,j,L:J,m:ae,M:se,p:ls,q:Rn,Q:ir,s:lr,S:$,u:fe,U:ie,V:ce,w:oe,W:be,x:null,X:null,y:Re,Y:Ce,Z:Le,\"%\":tr},Mt={a:ss,A:r1,b:t1,B:a1,c:null,d:De,e:De,f:We,g:He,G:Be,H:Ne,I:qe,j:Xe,L:$e,m:Se,M:Fe,p:Rv,q:Fv,Q:ir,s:lr,S:Qe,u:re,U:xe,V:cr,w:Pe,W:me,x:null,X:null,y:Ae,Y:Ze,Z:je,\"%\":tr},nt={a:ta,A:aa,b:ht,B:Wa,c:Ht,d:q,e:q,f:I,g:x,G:w,H:E,I:E,j:C,L:N,m:A,M:P,p:Ct,q:k,Q:U,s:Y,S:R,u:y,U:m,V:b,w:p,W:T,x:n0,X:Pn,y:x,Y:w,Z:_,\"%\":O};Rt.x=ra(ze,Rt),Rt.X=ra(Oe,Rt),Rt.c=ra(ge,Rt),Mt.x=ra(ze,Mt),Mt.X=ra(Oe,Mt),Mt.c=ra(ge,Mt);function ra(Mr,Ar){return function(dt){var ur=[],gn=-1,Ft=0,Xa=Mr.length,Za,qi,gu;for(dt instanceof Date||(dt=new Date(+dt));++gn<Xa;)Mr.charCodeAt(gn)===37&&(ur.push(Mr.slice(Ft,gn)),(qi=o[Za=Mr.charAt(++gn)])!=null?Za=Mr.charAt(++gn):qi=Za===\"e\"?\" \":\"0\",(gu=Ar[Za])&&(Za=gu(dt,qi)),ur.push(Za),Ft=gn+1);return ur.push(Mr.slice(Ft,gn)),ur.join(\"\")}}function En(Mr,Ar){return function(dt){var ur=n(1900,void 0,1),gn=Vt(ur,Mr,dt+=\"\",0),Ft,Xa;if(gn!=dt.length)return null;if(\"Q\"in ur)return new Date(ur.Q);if(\"s\"in ur)return new Date(ur.s*1e3+(\"L\"in ur?ur.L:0));if(Ar&&!(\"Z\"in ur)&&(ur.Z=0),\"p\"in ur&&(ur.H=ur.H%12+ur.p*12),ur.m===void 0&&(ur.m=\"q\"in ur?ur.q:0),\"V\"in ur){if(ur.V<1||ur.V>53)return null;\"w\"in ur||(ur.w=1),\"Z\"in ur?(Ft=a(n(ur.y,0,1)),Xa=Ft.getUTCDay(),Ft=Xa>4||Xa===0?r.utcMonday.ceil(Ft):r.utcMonday(Ft),Ft=r.utcDay.offset(Ft,(ur.V-1)*7),ur.y=Ft.getUTCFullYear(),ur.m=Ft.getUTCMonth(),ur.d=Ft.getUTCDate()+(ur.w+6)%7):(Ft=t(n(ur.y,0,1)),Xa=Ft.getDay(),Ft=Xa>4||Xa===0?r.timeMonday.ceil(Ft):r.timeMonday(Ft),Ft=r.timeDay.offset(Ft,(ur.V-1)*7),ur.y=Ft.getFullYear(),ur.m=Ft.getMonth(),ur.d=Ft.getDate()+(ur.w+6)%7)}else(\"W\"in ur||\"U\"in ur)&&(\"w\"in ur||(ur.w=\"u\"in ur?ur.u%7:\"W\"in ur?1:0),Xa=\"Z\"in ur?a(n(ur.y,0,1)).getUTCDay():t(n(ur.y,0,1)).getDay(),ur.m=0,ur.d=\"W\"in ur?(ur.w+6)%7+ur.W*7-(Xa+5)%7:ur.w+ur.U*7-(Xa+6)%7);return\"Z\"in ur?(ur.H+=ur.Z/100|0,ur.M+=ur.Z%100,a(ur)):t(ur)}}function Vt(Mr,Ar,dt,ur){for(var gn=0,Ft=Ar.length,Xa=dt.length,Za,qi;gn<Ft;){if(ur>=Xa)return-1;if(Za=Ar.charCodeAt(gn++),Za===37){if(Za=Ar.charAt(gn++),qi=nt[Za in o?Ar.charAt(gn++):Za],!qi||(ur=qi(Mr,dt,ur))<0)return-1}else if(Za!=dt.charCodeAt(ur++))return-1}return ur}function Ct(Mr,Ar,dt){var ur=Qt.exec(Ar.slice(dt));return ur?(Mr.p=Va[ur[0].toLowerCase()],dt+ur[0].length):-1}function ta(Mr,Ar,dt){var ur=ln.exec(Ar.slice(dt));return ur?(Mr.w=oa[ur[0].toLowerCase()],dt+ur[0].length):-1}function aa(Mr,Ar,dt){var ur=ea.exec(Ar.slice(dt));return ur?(Mr.w=ja[ur[0].toLowerCase()],dt+ur[0].length):-1}function ht(Mr,Ar,dt){var ur=Yr.exec(Ar.slice(dt));return ur?(Mr.m=vt[ur[0].toLowerCase()],dt+ur[0].length):-1}function Wa(Mr,Ar,dt){var ur=vr.exec(Ar.slice(dt));return ur?(Mr.m=_t[ur[0].toLowerCase()],dt+ur[0].length):-1}function Ht(Mr,Ar,dt){return Vt(Mr,ge,Ar,dt)}function n0(Mr,Ar,dt){return Vt(Mr,ze,Ar,dt)}function Pn(Mr,Ar,dt){return Vt(Mr,Oe,Ar,dt)}function mo(Mr){return mt[Mr.getDay()]}function li(Mr){return Kr[Mr.getDay()]}function la(Mr){return Lt[Mr.getMonth()]}function i0(Mr){return yt[Mr.getMonth()]}function ls(Mr){return Jr[+(Mr.getHours()>=12)]}function Rn(Mr){return 1+~~(Mr.getMonth()/3)}function ss(Mr){return mt[Mr.getUTCDay()]}function r1(Mr){return Kr[Mr.getUTCDay()]}function t1(Mr){return Lt[Mr.getUTCMonth()]}function a1(Mr){return yt[Mr.getUTCMonth()]}function Rv(Mr){return Jr[+(Mr.getUTCHours()>=12)]}function Fv(Mr){return 1+~~(Mr.getUTCMonth()/3)}return{format:function(Mr){var Ar=ra(Mr+=\"\",Rt);return Ar.toString=function(){return Mr},Ar},parse:function(Mr){var Ar=En(Mr+=\"\",!1);return Ar.toString=function(){return Mr},Ar},utcFormat:function(Mr){var Ar=ra(Mr+=\"\",Mt);return Ar.toString=function(){return Mr},Ar},utcParse:function(Mr){var Ar=En(Mr+=\"\",!0);return Ar.toString=function(){return Mr},Ar}}}var o={\"-\":\"\",_:\" \",0:\"0\"},l=/^\\s*\\d+/,s=/^%/,u=/[\\\\^$*+?|[\\]().{}]/g;function f(ne,ge,ze){var Oe=ne<0?\"-\":\"\",Jr=(Oe?-ne:ne)+\"\",Kr=Jr.length;return Oe+(Kr<ze?new Array(ze-Kr+1).join(ge)+Jr:Jr)}function c(ne){return ne.replace(u,\"\\\\$&\")}function v(ne){return new RegExp(\"^(?:\"+ne.map(c).join(\"|\")+\")\",\"i\")}function d(ne){for(var ge={},ze=-1,Oe=ne.length;++ze<Oe;)ge[ne[ze].toLowerCase()]=ze;return ge}function p(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+1));return Oe?(ne.w=+Oe[0],ze+Oe[0].length):-1}function y(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+1));return Oe?(ne.u=+Oe[0],ze+Oe[0].length):-1}function m(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.U=+Oe[0],ze+Oe[0].length):-1}function b(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.V=+Oe[0],ze+Oe[0].length):-1}function T(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.W=+Oe[0],ze+Oe[0].length):-1}function w(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+4));return Oe?(ne.y=+Oe[0],ze+Oe[0].length):-1}function x(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.y=+Oe[0]+(+Oe[0]>68?1900:2e3),ze+Oe[0].length):-1}function _(ne,ge,ze){var Oe=/^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(ge.slice(ze,ze+6));return Oe?(ne.Z=Oe[1]?0:-(Oe[2]+(Oe[3]||\"00\")),ze+Oe[0].length):-1}function k(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+1));return Oe?(ne.q=Oe[0]*3-3,ze+Oe[0].length):-1}function A(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.m=Oe[0]-1,ze+Oe[0].length):-1}function q(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.d=+Oe[0],ze+Oe[0].length):-1}function C(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+3));return Oe?(ne.m=0,ne.d=+Oe[0],ze+Oe[0].length):-1}function E(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.H=+Oe[0],ze+Oe[0].length):-1}function P(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.M=+Oe[0],ze+Oe[0].length):-1}function R(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+2));return Oe?(ne.S=+Oe[0],ze+Oe[0].length):-1}function N(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+3));return Oe?(ne.L=+Oe[0],ze+Oe[0].length):-1}function I(ne,ge,ze){var Oe=l.exec(ge.slice(ze,ze+6));return Oe?(ne.L=Math.floor(Oe[0]/1e3),ze+Oe[0].length):-1}function O(ne,ge,ze){var Oe=s.exec(ge.slice(ze,ze+1));return Oe?ze+Oe[0].length:-1}function U(ne,ge,ze){var Oe=l.exec(ge.slice(ze));return Oe?(ne.Q=+Oe[0],ze+Oe[0].length):-1}function Y(ne,ge,ze){var Oe=l.exec(ge.slice(ze));return Oe?(ne.s=+Oe[0],ze+Oe[0].length):-1}function G(ne,ge){return f(ne.getDate(),ge,2)}function V(ne,ge){return f(ne.getHours(),ge,2)}function W(ne,ge){return f(ne.getHours()%12||12,ge,2)}function j(ne,ge){return f(1+r.timeDay.count(r.timeYear(ne),ne),ge,3)}function J(ne,ge){return f(ne.getMilliseconds(),ge,3)}function te(ne,ge){return J(ne,ge)+\"000\"}function ae(ne,ge){return f(ne.getMonth()+1,ge,2)}function se(ne,ge){return f(ne.getMinutes(),ge,2)}function $(ne,ge){return f(ne.getSeconds(),ge,2)}function fe(ne){var ge=ne.getDay();return ge===0?7:ge}function ie(ne,ge){return f(r.timeSunday.count(r.timeYear(ne)-1,ne),ge,2)}function ue(ne){var ge=ne.getDay();return ge>=4||ge===0?r.timeThursday(ne):r.timeThursday.ceil(ne)}function ce(ne,ge){return ne=ue(ne),f(r.timeThursday.count(r.timeYear(ne),ne)+(r.timeYear(ne).getDay()===4),ge,2)}function oe(ne){return ne.getDay()}function be(ne,ge){return f(r.timeMonday.count(r.timeYear(ne)-1,ne),ge,2)}function Re(ne,ge){return f(ne.getFullYear()%100,ge,2)}function ye(ne,ge){return ne=ue(ne),f(ne.getFullYear()%100,ge,2)}function Ce(ne,ge){return f(ne.getFullYear()%1e4,ge,4)}function Me(ne,ge){var ze=ne.getDay();return ne=ze>=4||ze===0?r.timeThursday(ne):r.timeThursday.ceil(ne),f(ne.getFullYear()%1e4,ge,4)}function Le(ne){var ge=ne.getTimezoneOffset();return(ge>0?\"-\":(ge*=-1,\"+\"))+f(ge/60|0,\"0\",2)+f(ge%60,\"0\",2)}function De(ne,ge){return f(ne.getUTCDate(),ge,2)}function Ne(ne,ge){return f(ne.getUTCHours(),ge,2)}function qe(ne,ge){return f(ne.getUTCHours()%12||12,ge,2)}function Xe(ne,ge){return f(1+r.utcDay.count(r.utcYear(ne),ne),ge,3)}function $e(ne,ge){return f(ne.getUTCMilliseconds(),ge,3)}function We(ne,ge){return $e(ne,ge)+\"000\"}function Se(ne,ge){return f(ne.getUTCMonth()+1,ge,2)}function Fe(ne,ge){return f(ne.getUTCMinutes(),ge,2)}function Qe(ne,ge){return f(ne.getUTCSeconds(),ge,2)}function re(ne){var ge=ne.getUTCDay();return ge===0?7:ge}function xe(ne,ge){return f(r.utcSunday.count(r.utcYear(ne)-1,ne),ge,2)}function Ge(ne){var ge=ne.getUTCDay();return ge>=4||ge===0?r.utcThursday(ne):r.utcThursday.ceil(ne)}function cr(ne,ge){return ne=Ge(ne),f(r.utcThursday.count(r.utcYear(ne),ne)+(r.utcYear(ne).getUTCDay()===4),ge,2)}function Pe(ne){return ne.getUTCDay()}function me(ne,ge){return f(r.utcMonday.count(r.utcYear(ne)-1,ne),ge,2)}function Ae(ne,ge){return f(ne.getUTCFullYear()%100,ge,2)}function He(ne,ge){return ne=Ge(ne),f(ne.getUTCFullYear()%100,ge,2)}function Ze(ne,ge){return f(ne.getUTCFullYear()%1e4,ge,4)}function Be(ne,ge){var ze=ne.getUTCDay();return ne=ze>=4||ze===0?r.utcThursday(ne):r.utcThursday.ceil(ne),f(ne.getUTCFullYear()%1e4,ge,4)}function je(){return\"+0000\"}function tr(){return\"%\"}function ir(ne){return+ne}function lr(ne){return Math.floor(+ne/1e3)}var Ee;Je({dateTime:\"%x, %X\",date:\"%-m/%-d/%Y\",time:\"%-I:%M:%S %p\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]});function Je(ne){return Ee=i(ne),e.timeFormat=Ee.format,e.timeParse=Ee.parse,e.utcFormat=Ee.utcFormat,e.utcParse=Ee.utcParse,Ee}var Ie=\"%Y-%m-%dT%H:%M:%S.%LZ\";function pr(ne){return ne.toISOString()}var mr=Date.prototype.toISOString?pr:e.utcFormat(Ie);function sr(ne){var ge=new Date(ne);return isNaN(ge)?null:ge}var yr=+new Date(\"2000-01-01T00:00:00.000Z\")?sr:e.utcParse(Ie);e.isoFormat=mr,e.isoParse=yr,e.timeFormatDefaultLocale=Je,e.timeFormatLocale=i,Object.defineProperty(e,\"__esModule\",{value:!0})})});var Y5=z((S1,dS)=>{(function(e,r){typeof S1==\"object\"&&typeof dS!=\"undefined\"?r(S1):(e=typeof globalThis!=\"undefined\"?globalThis:e||self,r(e.d3=e.d3||{}))})(S1,(function(e){\"use strict\";function r(A){return Math.abs(A=Math.round(A))>=1e21?A.toLocaleString(\"en\").replace(/,/g,\"\"):A.toString(10)}function t(A,q){if((C=(A=q?A.toExponential(q-1):A.toExponential()).indexOf(\"e\"))<0)return null;var C,E=A.slice(0,C);return[E.length>1?E[0]+E.slice(2):E,+A.slice(C+1)]}function a(A){return A=t(Math.abs(A)),A?A[1]:NaN}function n(A,q){return function(C,E){for(var P=C.length,R=[],N=0,I=A[0],O=0;P>0&&I>0&&(O+I+1>E&&(I=Math.max(1,E-O)),R.push(C.substring(P-=I,P+I)),!((O+=I+1)>E));)I=A[N=(N+1)%A.length];return R.reverse().join(q)}}function i(A){return function(q){return q.replace(/[0-9]/g,function(C){return A[+C]})}}var o=/^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;function l(A){if(!(q=o.exec(A)))throw new Error(\"invalid format: \"+A);var q;return new s({fill:q[1],align:q[2],sign:q[3],symbol:q[4],zero:q[5],width:q[6],comma:q[7],precision:q[8]&&q[8].slice(1),trim:q[9],type:q[10]})}l.prototype=s.prototype;function s(A){this.fill=A.fill===void 0?\" \":A.fill+\"\",this.align=A.align===void 0?\">\":A.align+\"\",this.sign=A.sign===void 0?\"-\":A.sign+\"\",this.symbol=A.symbol===void 0?\"\":A.symbol+\"\",this.zero=!!A.zero,this.width=A.width===void 0?void 0:+A.width,this.comma=!!A.comma,this.precision=A.precision===void 0?void 0:+A.precision,this.trim=!!A.trim,this.type=A.type===void 0?\"\":A.type+\"\"}s.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?\"0\":\"\")+(this.width===void 0?\"\":Math.max(1,this.width|0))+(this.comma?\",\":\"\")+(this.precision===void 0?\"\":\".\"+Math.max(0,this.precision|0))+(this.trim?\"~\":\"\")+this.type};function u(A){e:for(var q=A.length,C=1,E=-1,P;C<q;++C)switch(A[C]){case\".\":E=P=C;break;case\"0\":E===0&&(E=C),P=C;break;default:if(!+A[C])break e;E>0&&(E=0);break}return E>0?A.slice(0,E)+A.slice(P+1):A}var f;function c(A,q){var C=t(A,q);if(!C)return A+\"\";var E=C[0],P=C[1],R=P-(f=Math.max(-8,Math.min(8,Math.floor(P/3)))*3)+1,N=E.length;return R===N?E:R>N?E+new Array(R-N+1).join(\"0\"):R>0?E.slice(0,R)+\".\"+E.slice(R):\"0.\"+new Array(1-R).join(\"0\")+t(A,Math.max(0,q+R-1))[0]}function v(A,q){var C=t(A,q);if(!C)return A+\"\";var E=C[0],P=C[1];return P<0?\"0.\"+new Array(-P).join(\"0\")+E:E.length>P+1?E.slice(0,P+1)+\".\"+E.slice(P+1):E+new Array(P-E.length+2).join(\"0\")}var d={\"%\":function(A,q){return(A*100).toFixed(q)},b:function(A){return Math.round(A).toString(2)},c:function(A){return A+\"\"},d:r,e:function(A,q){return A.toExponential(q)},f:function(A,q){return A.toFixed(q)},g:function(A,q){return A.toPrecision(q)},o:function(A){return Math.round(A).toString(8)},p:function(A,q){return v(A*100,q)},r:v,s:c,X:function(A){return Math.round(A).toString(16).toUpperCase()},x:function(A){return Math.round(A).toString(16)}};function p(A){return A}var y=Array.prototype.map,m=[\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xB5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];function b(A){var q=A.grouping===void 0||A.thousands===void 0?p:n(y.call(A.grouping,Number),A.thousands+\"\"),C=A.currency===void 0?\"\":A.currency[0]+\"\",E=A.currency===void 0?\"\":A.currency[1]+\"\",P=A.decimal===void 0?\".\":A.decimal+\"\",R=A.numerals===void 0?p:i(y.call(A.numerals,String)),N=A.percent===void 0?\"%\":A.percent+\"\",I=A.minus===void 0?\"-\":A.minus+\"\",O=A.nan===void 0?\"NaN\":A.nan+\"\";function U(G){G=l(G);var V=G.fill,W=G.align,j=G.sign,J=G.symbol,te=G.zero,ae=G.width,se=G.comma,$=G.precision,fe=G.trim,ie=G.type;ie===\"n\"?(se=!0,ie=\"g\"):d[ie]||($===void 0&&($=12),fe=!0,ie=\"g\"),(te||V===\"0\"&&W===\"=\")&&(te=!0,V=\"0\",W=\"=\");var ue=J===\"$\"?C:J===\"#\"&&/[boxX]/.test(ie)?\"0\"+ie.toLowerCase():\"\",ce=J===\"$\"?E:/[%p]/.test(ie)?N:\"\",oe=d[ie],be=/[defgprs%]/.test(ie);$=$===void 0?6:/[gprs]/.test(ie)?Math.max(1,Math.min(21,$)):Math.max(0,Math.min(20,$));function Re(ye){var Ce=ue,Me=ce,Le,De,Ne;if(ie===\"c\")Me=oe(ye)+Me,ye=\"\";else{ye=+ye;var qe=ye<0||1/ye<0;if(ye=isNaN(ye)?O:oe(Math.abs(ye),$),fe&&(ye=u(ye)),qe&&+ye==0&&j!==\"+\"&&(qe=!1),Ce=(qe?j===\"(\"?j:I:j===\"-\"||j===\"(\"?\"\":j)+Ce,Me=(ie===\"s\"?m[8+f/3]:\"\")+Me+(qe&&j===\"(\"?\")\":\"\"),be){for(Le=-1,De=ye.length;++Le<De;)if(Ne=ye.charCodeAt(Le),48>Ne||Ne>57){Me=(Ne===46?P+ye.slice(Le+1):ye.slice(Le))+Me,ye=ye.slice(0,Le);break}}}se&&!te&&(ye=q(ye,1/0));var Xe=Ce.length+ye.length+Me.length,$e=Xe<ae?new Array(ae-Xe+1).join(V):\"\";switch(se&&te&&(ye=q($e+ye,$e.length?ae-Me.length:1/0),$e=\"\"),W){case\"<\":ye=Ce+ye+Me+$e;break;case\"=\":ye=Ce+$e+ye+Me;break;case\"^\":ye=$e.slice(0,Xe=$e.length>>1)+Ce+ye+Me+$e.slice(Xe);break;default:ye=$e+Ce+ye+Me;break}return R(ye)}return Re.toString=function(){return G+\"\"},Re}function Y(G,V){var W=U((G=l(G),G.type=\"f\",G)),j=Math.max(-8,Math.min(8,Math.floor(a(V)/3)))*3,J=Math.pow(10,-j),te=m[8+j/3];return function(ae){return W(J*ae)+te}}return{format:U,formatPrefix:Y}}var T;w({decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],minus:\"-\"});function w(A){return T=b(A),e.format=T.format,e.formatPrefix=T.formatPrefix,T}function x(A){return Math.max(0,-a(Math.abs(A)))}function _(A,q){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(a(q)/3)))*3-a(Math.abs(A)))}function k(A,q){return A=Math.abs(A),q=Math.abs(q)-A,Math.max(0,a(q)-a(A))+1}e.FormatSpecifier=s,e.formatDefaultLocale=w,e.formatLocale=b,e.formatSpecifier=l,e.precisionFixed=x,e.precisionPrefix=_,e.precisionRound=k,Object.defineProperty(e,\"__esModule\",{value:!0})}))});var mS=z((PHe,pS)=>{\"use strict\";pS.exports=function(e){for(var r=e.length,t,a=0;a<r;a++)if(t=e.charCodeAt(a),(t<9||t>13)&&t!==32&&t!==133&&t!==160&&t!==5760&&t!==6158&&(t<8192||t>8205)&&t!==8232&&t!==8233&&t!==8239&&t!==8287&&t!==8288&&t!==12288&&t!==65279)return!1;return!0}});var Ir=z((RHe,yS)=>{\"use strict\";var I0e=mS();yS.exports=function(e){var r=typeof e;if(r===\"string\"){var t=e;if(e=+e,e===0&&I0e(t))return!1}else if(r!==\"number\")return!1;return e-e<1}});var Gt=z((FHe,gS)=>{\"use strict\";gS.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE*1e-4,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,ONEMILLI:1,ONEMICROSEC:.001,EPOCHJD:24405875e-1,ALMOST_EQUAL:1-1e-6,LOG_CLIP:10,MINUS_SIGN:\"\\u2212\"}});var V5=z((q1,bS)=>{(function(e,r){typeof q1==\"object\"&&typeof bS!=\"undefined\"?r(q1):(e=typeof globalThis!=\"undefined\"?globalThis:e||self,r(e[\"base64-arraybuffer\"]={}))})(q1,(function(e){\"use strict\";for(var r=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",t=typeof Uint8Array==\"undefined\"?[]:new Uint8Array(256),a=0;a<r.length;a++)t[r.charCodeAt(a)]=a;var n=function(o){var l=new Uint8Array(o),s,u=l.length,f=\"\";for(s=0;s<u;s+=3)f+=r[l[s]>>2],f+=r[(l[s]&3)<<4|l[s+1]>>4],f+=r[(l[s+1]&15)<<2|l[s+2]>>6],f+=r[l[s+2]&63];return u%3===2?f=f.substring(0,f.length-1)+\"=\":u%3===1&&(f=f.substring(0,f.length-2)+\"==\"),f},i=function(o){var l=o.length*.75,s=o.length,u,f=0,c,v,d,p;o[o.length-1]===\"=\"&&(l--,o[o.length-2]===\"=\"&&l--);var y=new ArrayBuffer(l),m=new Uint8Array(y);for(u=0;u<s;u+=4)c=t[o.charCodeAt(u)],v=t[o.charCodeAt(u+1)],d=t[o.charCodeAt(u+2)],p=t[o.charCodeAt(u+3)],m[f++]=c<<2|v>>4,m[f++]=(v&15)<<4|d>>2,m[f++]=(d&3)<<6|p&63;return y};e.decode=i,e.encode=n,Object.defineProperty(e,\"__esModule\",{value:!0})}))});var Au=z((zHe,xS)=>{\"use strict\";xS.exports=function(r){return window&&window.process&&window.process.versions?Object.prototype.toString.call(r)===\"[object Object]\":Object.prototype.toString.call(r)===\"[object Object]\"&&Object.getPrototypeOf(r).hasOwnProperty(\"hasOwnProperty\")}});var Vn=z(bo=>{\"use strict\";var B0e=V5().decode,O0e=Au(),j5=Array.isArray,H0e=ArrayBuffer,U0e=DataView;function _S(e){return H0e.isView(e)&&!(e instanceof U0e)}bo.isTypedArray=_S;function L1(e){return j5(e)||_S(e)}bo.isArrayOrTypedArray=L1;function G0e(e){return!L1(e[0])}bo.isArray1D=G0e;bo.ensureArray=function(e,r){return j5(e)||(e=[]),e.length=r,e};var Oa={u1c:typeof Uint8ClampedArray==\"undefined\"?void 0:Uint8ClampedArray,i1:typeof Int8Array==\"undefined\"?void 0:Int8Array,u1:typeof Uint8Array==\"undefined\"?void 0:Uint8Array,i2:typeof Int16Array==\"undefined\"?void 0:Int16Array,u2:typeof Uint16Array==\"undefined\"?void 0:Uint16Array,i4:typeof Int32Array==\"undefined\"?void 0:Int32Array,u4:typeof Uint32Array==\"undefined\"?void 0:Uint32Array,f4:typeof Float32Array==\"undefined\"?void 0:Float32Array,f8:typeof Float64Array==\"undefined\"?void 0:Float64Array};Oa.uint8c=Oa.u1c;Oa.uint8=Oa.u1;Oa.int8=Oa.i1;Oa.uint16=Oa.u2;Oa.int16=Oa.i2;Oa.uint32=Oa.u4;Oa.int32=Oa.i4;Oa.float32=Oa.f4;Oa.float64=Oa.f8;function W5(e){return e.constructor===ArrayBuffer}bo.isArrayBuffer=W5;bo.decodeTypedArraySpec=function(e){var r=[],t=Y0e(e),a=t.dtype,n=Oa[a];if(!n)throw new Error('Error in dtype: \"'+a+'\"');var i=n.BYTES_PER_ELEMENT,o=t.bdata;W5(o)||(o=B0e(o));var l=t.shape===void 0?[o.byteLength/i]:(\"\"+t.shape).split(\",\");l.reverse();var s=l.length,u,f,c=+l[0],v=i*c,d=0;if(s===1)r=new n(o);else if(s===2)for(u=+l[1],f=0;f<u;f++)r[f]=new n(o,d,c),d+=v;else if(s===3){u=+l[1];for(var p=+l[2],y=0;y<p;y++)for(r[y]=[],f=0;f<u;f++)r[y][f]=new n(o,d,c),d+=v}else throw new Error(\"ndim: \"+s+'is not supported with the shape:\"'+t.shape+'\"');return r.bdata=t.bdata,r.dtype=t.dtype,r.shape=l.reverse().join(\",\"),e._inputArray=r,r};bo.isTypedArraySpec=function(e){return O0e(e)&&e.hasOwnProperty(\"dtype\")&&typeof e.dtype==\"string\"&&e.hasOwnProperty(\"bdata\")&&(typeof e.bdata==\"string\"||W5(e.bdata))&&(e.shape===void 0||e.hasOwnProperty(\"shape\")&&(typeof e.shape==\"string\"||typeof e.shape==\"number\"))};function Y0e(e){return{bdata:e.bdata,dtype:e.dtype,shape:e.shape}}bo.concat=function(){var e=[],r=!0,t=0,a,n,i,o,l,s,u,f;for(i=0;i<arguments.length;i++)o=arguments[i],s=o.length,s&&(n?e.push(o):(n=o,l=s),j5(o)?a=!1:(r=!1,t?a!==o.constructor&&(a=!1):a=o.constructor),t+=s);if(!t)return[];if(!e.length)return n;if(r)return n.concat.apply(n,e);if(a){for(u=new a(t),u.set(n),i=0;i<e.length;i++)o=e[i],u.set(o,l),l+=o.length;return u}for(u=new Array(t),f=0;f<n.length;f++)u[f]=n[f];for(i=0;i<e.length;i++){for(o=e[i],f=0;f<o.length;f++)u[l+f]=o[f];l+=f}return u};bo.maxRowLength=function(e){return wS(e,Math.max,0)};bo.minRowLength=function(e){return wS(e,Math.min,1/0)};function wS(e,r,t){if(L1(e))if(L1(e[0])){for(var a=t,n=0;n<e.length;n++)a=r(a,e[n].length);return a}else return e.length;return 0}});var C1=z((IHe,SS)=>{\"use strict\";var TS=Ir(),Z5=Vn().isArrayOrTypedArray;SS.exports=function(r,t){if(TS(t))t=String(t);else if(typeof t!=\"string\"||t.slice(-4)===\"[-1]\")throw\"bad property string\";var a=t.split(\".\"),n,i,o,l;for(l=0;l<a.length;l++)if(String(a[l]).slice(0,2)===\"__\")throw\"bad property string\";for(l=0;l<a.length;){if(n=String(a[l]).match(/^([^\\[\\]]*)((\\[\\-?[0-9]*\\])+)$/),n){if(n[1])a[l]=n[1];else if(l===0)a.splice(0,1);else throw\"bad property string\";for(i=n[2].slice(1,-1).split(\"][\"),o=0;o<i.length;o++)l++,a.splice(l,0,Number(i[o]))}l++}return typeof r!=\"object\"?X0e(r,t,a):{set:MS(r,a,t),get:AS(r,a),astr:t,parts:a,obj:r}};function AS(e,r){return function(t){var a=e,n,i,o,l,s;for(l=0;l<r.length-1;l++){if(n=r[l],n===-1){for(i=!0,o=[],s=0;s<a.length;s++)o[s]=AS(a[s],r.slice(l+1))(t),o[s]!==o[0]&&(i=!1);return i?o[0]:o}if(typeof n==\"number\"&&!Z5(a)||(a=a[n],typeof a!=\"object\"||a===null))return}if(!(typeof a!=\"object\"||a===null)&&(o=a[r[l]],!(!t&&o===null)))return o}}var V0e=/(^|\\.)args\\[/;function X5(e,r){return e===void 0||e===null&&!r.match(V0e)}function MS(e,r,t){return function(a){var n=e,i=\"\",o=[[e,i]],l=X5(a,t),s,u;for(u=0;u<r.length-1;u++){if(s=r[u],typeof s==\"number\"&&!Z5(n))throw\"array index but container is not an array\";if(s===-1){if(l=!W0e(n,r.slice(u+1),a,t),l)break;return}if(!kS(n,s,r[u+1],l))break;if(n=n[s],typeof n!=\"object\"||n===null)throw\"container is not an object\";i=j0e(i,s),o.push([n,i])}if(l){if(u===r.length-1&&(delete n[r[u]],Array.isArray(n)&&+r[u]===n.length-1))for(;n.length&&n[n.length-1]===void 0;)n.pop()}else n[r[u]]=a}}function j0e(e,r){var t=r;return TS(r)?t=\"[\"+r+\"]\":e&&(t=\".\"+r),e+t}function W0e(e,r,t,a){var n=Z5(t),i=!0,o=t,l=a.replace(\"-1\",0),s=n?!1:X5(t,l),u=r[0],f;for(f=0;f<e.length;f++)l=a.replace(\"-1\",f),n&&(o=t[f%t.length],s=X5(o,l)),s&&(i=!1),kS(e,f,u,s)&&MS(e[f],r,a.replace(\"-1\",f))(o);return i}function kS(e,r,t,a){if(e[r]===void 0){if(a)return!1;typeof t==\"number\"?e[r]=[]:e[r]={}}return!0}function X0e(e,r,t){return{set:function(){throw\"bad container\"},get:function(){},astr:r,parts:t,obj:e}}});var DS=z((BHe,CS)=>{\"use strict\";var m0=C1(),Z0e=/^\\w*$/,$0e=0,qS=1,D1=2,LS=3,Mu=4;CS.exports=function(r,t,a,n){a=a||\"name\",n=n||\"value\";var i,o,l,s={};t&&t.length?(l=m0(r,t),o=l.get()):o=r,t=t||\"\";var u={};if(o)for(i=0;i<o.length;i++)u[o[i][a]]=i;var f=Z0e.test(n),c={set:function(v,d){var p=d===null?Mu:$0e;if(!o){if(!l||p===Mu)return;o=[],l.set(o)}var y=u[v];if(y===void 0){if(p===Mu)return;p=p|LS,y=o.length,u[v]=y}else d!==(f?o[y][n]:m0(o[y],n).get())&&(p=p|D1);var m=o[y]=o[y]||{};return m[a]=v,f?m[n]=d:m0(m,n).set(d),d!==null&&(p=p&~Mu),s[y]=s[y]|p,c},get:function(v){if(o){var d=u[v];if(d!==void 0)return f?o[d][n]:m0(o[d],n).get()}},rename:function(v,d){var p=u[v];return p===void 0||(s[p]=s[p]|qS,u[d]=p,delete u[v],o[p][a]=d),c},remove:function(v){var d=u[v];if(d===void 0)return c;var p=o[d];if(Object.keys(p).length>2)return s[d]=s[d]|D1,c.set(v,null);if(f){for(i=d;i<o.length;i++)s[i]=s[i]|LS;for(i=d;i<o.length;i++)u[o[i][a]]--;o.splice(d,1),delete u[v]}else m0(p,n).set(null),s[d]=s[d]|D1|Mu;return c},constructUpdate:function(){for(var v,d,p={},y=Object.keys(s),m=0;m<y.length;m++)d=y[m],v=t+\"[\"+d+\"]\",o[d]?(s[d]&qS&&(p[v+\".\"+a]=o[d][a]),s[d]&D1&&(f?p[v+\".\"+n]=s[d]&Mu?null:o[d][n]:p[v+\".\"+n]=s[d]&Mu?null:m0(o[d],n).get())):p[v]=null;return p}};return c}});var PS=z((OHe,ES)=>{\"use strict\";var J0e=/^(.*)(\\.[^\\.\\[\\]]+|\\[\\d\\])$/,K0e=/^[^\\.\\[\\]]+$/;ES.exports=function(e,r){for(;r;){var t=e.match(J0e);if(t)e=t[1];else if(e.match(K0e))e=\"\";else throw new Error(\"bad relativeAttr call:\"+[e,r]);if(r.charAt(0)===\"^\")r=r.slice(1);else break}return e&&r.charAt(0)!==\"[\"?e+\".\"+r:e+r}});var E1=z((HHe,RS)=>{\"use strict\";var Q0e=Ir();RS.exports=function(r,t){if(r>0)return Math.log(r)/Math.LN10;var a=Math.log(Math.min(t[0],t[1]))/Math.LN10;return Q0e(a)||(a=Math.log(Math.max(t[0],t[1]))/Math.LN10-6),a}});var NS=z((UHe,zS)=>{\"use strict\";var FS=Vn().isArrayOrTypedArray,Wv=Au();zS.exports=function e(r,t){for(var a in t){var n=t[a],i=r[a];if(i!==n)if(a.charAt(0)===\"_\"||typeof n==\"function\"){if(a in r)continue;r[a]=n}else if(FS(n)&&FS(i)&&Wv(n[0])){if(a===\"customdata\"||a===\"ids\")continue;for(var o=Math.min(n.length,i.length),l=0;l<o;l++)i[l]!==n[l]&&Wv(n[l])&&Wv(i[l])&&e(i[l],n[l])}else Wv(n)&&Wv(i)&&(e(i,n),Object.keys(i).length||delete r[a])}}});var y0={};d0(y0,{mod:()=>ece,modHalf:()=>rce});function ece(e,r){let t=e%r;return t<0?t+r:t}function rce(e,r){return Math.abs(e)>r/2?e-Math.round(e/r)*r:e}var g0=h0(()=>{\"use strict\"});var At=z($v=>{\"use strict\";var IS=Au(),Xv=Array.isArray;function tce(e,r){var t,a;for(t=0;t<e.length;t++){if(a=e[t],a!==null&&typeof a==\"object\")return!1;a!==void 0&&(r[t]=a)}return!0}$v.extendFlat=function(...e){return Zv(e,!1,!1,!1)};$v.extendDeep=function(...e){return Zv(e,!0,!1,!1)};$v.extendDeepAll=function(...e){return Zv(e,!0,!0,!1)};$v.extendDeepNoArrays=function(...e){return Zv(e,!0,!1,!0)};function Zv(e,r,t,a){var n=e[0],i=e.length,o,l,s,u,f,c,v;if(i===2&&Xv(n)&&Xv(e[1])&&n.length===0){if(v=tce(e[1],n),v)return n;n.splice(0,n.length)}for(var d=1;d<i;d++){o=e[d];for(l in o)s=n[l],u=o[l],a&&Xv(u)?n[l]=u:r&&u&&(IS(u)||(f=Xv(u)))?(f?(f=!1,c=s&&Xv(s)?s:[]):c=s&&IS(s)?s:{},n[l]=Zv([c,u],r,t,a)):(typeof u!=\"undefined\"||t)&&(n[l]=u)}return n}});var ka=z((YHe,BS)=>{\"use strict\";BS.exports=function(e){var r=e.variantValues,t=e.editType,a=e.colorEditType;a===void 0&&(a=t);var n={editType:t,valType:\"integer\",min:1,max:1e3,extras:[\"normal\",\"bold\"],dflt:\"normal\"};e.noNumericWeightValues&&(n.valType=\"enumerated\",n.values=n.extras,n.extras=void 0,n.min=void 0,n.max=void 0);var i={family:{valType:\"string\",noBlank:!0,strict:!0,editType:t},size:{valType:\"number\",min:1,editType:t},color:{valType:\"color\",editType:a},weight:n,style:{editType:t,valType:\"enumerated\",values:[\"normal\",\"italic\"],dflt:\"normal\"},variant:e.noFontVariant?void 0:{editType:t,valType:\"enumerated\",values:r||[\"normal\",\"small-caps\",\"all-small-caps\",\"all-petite-caps\",\"petite-caps\",\"unicase\"],dflt:\"normal\"},textcase:e.noFontTextcase?void 0:{editType:t,valType:\"enumerated\",values:[\"normal\",\"word caps\",\"upper\",\"lower\"],dflt:\"normal\"},lineposition:e.noFontLineposition?void 0:{editType:t,valType:\"flaglist\",flags:[\"under\",\"over\",\"through\"],extras:[\"none\"],dflt:\"none\"},shadow:e.noFontShadow?void 0:{editType:t,valType:\"string\",dflt:e.autoShadowDflt?\"auto\":\"none\"},editType:t};return e.autoSize&&(i.size.dflt=\"auto\"),e.autoColor&&(i.color.dflt=\"auto\"),e.arrayOk&&(i.family.arrayOk=!0,i.weight.arrayOk=!0,i.style.arrayOk=!0,e.noFontVariant||(i.variant.arrayOk=!0),e.noFontTextcase||(i.textcase.arrayOk=!0),e.noFontLineposition||(i.lineposition.arrayOk=!0),e.noFontShadow||(i.shadow.arrayOk=!0),i.size.arrayOk=!0,i.color.arrayOk=!0),i}});var Jv=z((VHe,OS)=>{\"use strict\";OS.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:\"Arial, sans-serif\",HOVERMINTIME:50,HOVERID:\"-hover\"}});var b0=z((jHe,GS)=>{\"use strict\";var HS=Jv(),US=ka(),$5=US({editType:\"none\"});$5.family.dflt=HS.HOVERFONT;$5.size.dflt=HS.HOVERFONTSIZE;GS.exports={clickmode:{valType:\"flaglist\",flags:[\"event\",\"select\"],dflt:\"event\",editType:\"plot\",extras:[\"none\"]},dragmode:{valType:\"enumerated\",values:[\"zoom\",\"pan\",\"select\",\"lasso\",\"drawclosedpath\",\"drawopenpath\",\"drawline\",\"drawrect\",\"drawcircle\",\"orbit\",\"turntable\",!1],dflt:\"zoom\",editType:\"modebar\"},hovermode:{valType:\"enumerated\",values:[\"x\",\"y\",\"closest\",!1,\"x unified\",\"y unified\"],dflt:\"closest\",editType:\"modebar\"},hoversort:{valType:\"enumerated\",values:[\"trace\",\"value descending\",\"value ascending\"],dflt:\"trace\",editType:\"none\"},hoversubplots:{valType:\"enumerated\",values:[\"single\",\"overlaying\",\"axis\"],dflt:\"overlaying\",editType:\"none\"},hoveranywhere:{valType:\"boolean\",dflt:!1,editType:\"none\"},clickanywhere:{valType:\"boolean\",dflt:!1,editType:\"none\"},hoverdistance:{valType:\"integer\",min:-1,dflt:20,editType:\"none\"},spikedistance:{valType:\"integer\",min:-1,dflt:-1,editType:\"none\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"none\"},bordercolor:{valType:\"color\",editType:\"none\"},font:$5,grouptitlefont:US({editType:\"none\"}),align:{valType:\"enumerated\",values:[\"left\",\"right\",\"auto\"],dflt:\"auto\",editType:\"none\"},namelength:{valType:\"integer\",min:-1,dflt:15,editType:\"none\"},showarrow:{valType:\"boolean\",dflt:!0,editType:\"none\"},editType:\"none\"},selectdirection:{valType:\"enumerated\",values:[\"h\",\"v\",\"d\",\"any\"],dflt:\"any\",editType:\"none\"}}});var P1=z((WHe,YS)=>{\"use strict\";var ace=ka(),Kv=b0().hoverlabel,Qv=At().extendFlat;YS.exports={hoverlabel:{bgcolor:Qv({},Kv.bgcolor,{arrayOk:!0}),bordercolor:Qv({},Kv.bordercolor,{arrayOk:!0}),font:ace({arrayOk:!0,editType:\"none\"}),align:Qv({},Kv.align,{arrayOk:!0}),namelength:Qv({},Kv.namelength,{arrayOk:!0}),showarrow:Qv({},Kv.showarrow),editType:\"none\"}}});var zn=z((XHe,VS)=>{\"use strict\";var nce=ka(),ice=P1();VS.exports={type:{valType:\"enumerated\",values:[],dflt:\"scatter\",editType:\"calc+clearAxisTypes\",_noTemplating:!0},visible:{valType:\"enumerated\",values:[!0,!1,\"legendonly\"],dflt:!0,editType:\"calc\"},showlegend:{valType:\"boolean\",dflt:!0,editType:\"style\"},legend:{valType:\"subplotid\",dflt:\"legend\",editType:\"style\"},legendgroup:{valType:\"string\",dflt:\"\",editType:\"style\"},legendgrouptitle:{text:{valType:\"string\",dflt:\"\",editType:\"style\"},font:nce({editType:\"style\"}),editType:\"style\"},legendrank:{valType:\"number\",dflt:1e3,editType:\"style\"},legendwidth:{valType:\"number\",min:0,editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"style\"},name:{valType:\"string\",editType:\"style\"},uid:{valType:\"string\",editType:\"plot\",anim:!0},ids:{valType:\"data_array\",editType:\"calc\",anim:!0},customdata:{valType:\"data_array\",editType:\"calc\"},meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},selectedpoints:{valType:\"any\",editType:\"calc\"},hoverinfo:{valType:\"flaglist\",flags:[\"x\",\"y\",\"z\",\"text\",\"name\"],extras:[\"all\",\"none\",\"skip\"],arrayOk:!0,dflt:\"all\",editType:\"none\"},hoverlabel:ice.hoverlabel,uirevision:{valType:\"any\",editType:\"none\"}}});var NL=z((rUe,zL)=>{var Ux=Object.defineProperty,oce=Object.getOwnPropertyDescriptor,lce=Object.getOwnPropertyNames,sce=Object.prototype.hasOwnProperty,uce=(e,r)=>{for(var t in r)Ux(e,t,{get:r[t],enumerable:!0})},fce=(e,r,t,a)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let n of lce(r))!sce.call(e,n)&&n!==t&&Ux(e,n,{get:()=>r[n],enumerable:!(a=oce(r,n))||a.enumerable});return e},cce=e=>fce(Ux({},\"__esModule\",{value:!0}),e),rq={};uce(rq,{a98:()=>t2e,average:()=>lve,averageAngle:()=>Jo,averageNumber:()=>gq,blend:()=>ode,blerp:()=>wx,clampChroma:()=>kde,clampGamut:()=>p_,clampRgb:()=>Mde,colorsNamed:()=>aq,convertA98ToXyz65:()=>Tx,convertCubehelixToRgb:()=>mq,convertDlchToLab65:()=>U1,convertHsiToRgb:()=>kq,convertHslToRgb:()=>Lq,convertHsvToRgb:()=>Xx,convertHwbToRgb:()=>Pq,convertItpToXyz65:()=>Mx,convertJabToJch:()=>Sx,convertJabToRgb:()=>e_,convertJabToXyz65:()=>Kx,convertJchToJab:()=>qx,convertLab65ToDlch:()=>G1,convertLab65ToRgb:()=>lh,convertLab65ToXyz65:()=>Vx,convertLabToLch:()=>Cl,convertLabToRgb:()=>t_,convertLabToXyz50:()=>Q1,convertLchToLab:()=>Dl,convertLchuvToLuv:()=>i_,convertLrgbToOklab:()=>o_,convertLrgbToRgb:()=>Eu,convertLuvToLchuv:()=>n_,convertLuvToXyz50:()=>V1,convertOkhslToOklab:()=>Dx,convertOkhsvToOklab:()=>Px,convertOklabToLrgb:()=>S0,convertOklabToOkhsl:()=>Cx,convertOklabToOkhsv:()=>Ex,convertOklabToRgb:()=>fh,convertP3ToXyz65:()=>Rx,convertProphotoToXyz50:()=>Nx,convertRec2020ToXyz65:()=>Bx,convertRgbToCubehelix:()=>pq,convertRgbToHsi:()=>Sq,convertRgbToHsl:()=>Cq,convertRgbToHsv:()=>Zx,convertRgbToHwb:()=>Rq,convertRgbToJab:()=>Qx,convertRgbToLab:()=>a_,convertRgbToLab65:()=>sh,convertRgbToLrgb:()=>Du,convertRgbToOklab:()=>uh,convertRgbToXyb:()=>sL,convertRgbToXyz50:()=>k0,convertRgbToXyz65:()=>vs,convertRgbToYiq:()=>pL,convertXybToRgb:()=>uL,convertXyz50ToLab:()=>ep,convertXyz50ToLuv:()=>Y1,convertXyz50ToProphoto:()=>zx,convertXyz50ToRgb:()=>M0,convertXyz50ToXyz65:()=>hL,convertXyz65ToA98:()=>Ax,convertXyz65ToItp:()=>kx,convertXyz65ToJab:()=>Jx,convertXyz65ToLab65:()=>jx,convertXyz65ToP3:()=>Fx,convertXyz65ToRec2020:()=>Ix,convertXyz65ToRgb:()=>hs,convertXyz65ToXyz50:()=>vL,convertYiqToRgb:()=>mL,converter:()=>zt,cubehelix:()=>a2e,differenceCie76:()=>eve,differenceCie94:()=>rve,differenceCiede2000:()=>tve,differenceCmc:()=>ave,differenceEuclidean:()=>A0,differenceHueChroma:()=>oh,differenceHueNaive:()=>yq,differenceHueSaturation:()=>ih,differenceHyab:()=>nve,differenceItp:()=>ove,differenceKotsarenkoRamos:()=>ive,displayable:()=>d_,dlab:()=>n2e,dlch:()=>i2e,easingGamma:()=>DL,easingInOutSine:()=>e2e,easingMidpoint:()=>AL,easingSmootherstep:()=>Kde,easingSmoothstep:()=>Zde,easingSmoothstepInverse:()=>$de,filterBrightness:()=>Fde,filterContrast:()=>zde,filterDeficiencyDeuter:()=>Wde,filterDeficiencyProt:()=>jde,filterDeficiencyTrit:()=>Xde,filterGrayscale:()=>Bde,filterHueRotate:()=>Hde,filterInvert:()=>Ode,filterSaturate:()=>Ide,filterSepia:()=>Nde,fixupAlpha:()=>Ra,fixupHueDecreasing:()=>Zce,fixupHueIncreasing:()=>Xce,fixupHueLonger:()=>Wce,fixupHueShorter:()=>$o,formatCss:()=>Qhe,formatHex:()=>ede,formatHex8:()=>rde,formatHsl:()=>ade,formatRgb:()=>tde,getMode:()=>_n,hsi:()=>o2e,hsl:()=>l2e,hsv:()=>s2e,hwb:()=>u2e,inGamut:()=>ap,interpolate:()=>pde,interpolateWith:()=>kL,interpolateWithPremultipliedAlpha:()=>mde,interpolatorLinear:()=>_r,interpolatorPiecewise:()=>hq,interpolatorSplineBasis:()=>qL,interpolatorSplineBasisClosed:()=>LL,interpolatorSplineMonotone:()=>bde,interpolatorSplineMonotone2:()=>xde,interpolatorSplineMonotoneClosed:()=>_de,interpolatorSplineNatural:()=>yde,interpolatorSplineNaturalClosed:()=>gde,itp:()=>f2e,jab:()=>c2e,jch:()=>v2e,lab:()=>h2e,lab65:()=>d2e,lch:()=>p2e,lch65:()=>m2e,lchuv:()=>y2e,lerp:()=>Su,lrgb:()=>g2e,luv:()=>b2e,mapAlphaDivide:()=>TL,mapAlphaMultiply:()=>wL,mapTransferGamma:()=>cde,mapTransferLinear:()=>c_,mapper:()=>ch,modeA98:()=>dq,modeCubehelix:()=>bq,modeDlab:()=>Aq,modeDlch:()=>Mq,modeHsi:()=>qq,modeHsl:()=>Wx,modeHsv:()=>$x,modeHwb:()=>zq,modeItp:()=>Bq,modeJab:()=>Oq,modeJch:()=>Hq,modeLab:()=>rp,modeLab65:()=>Gq,modeLch:()=>tp,modeLch65:()=>Vq,modeLchuv:()=>Xq,modeLrgb:()=>Zq,modeLuv:()=>$q,modeOkhsl:()=>Kq,modeOkhsv:()=>Qq,modeOklab:()=>rL,modeOklch:()=>aL,modeP3:()=>nL,modeProphoto:()=>iL,modeRec2020:()=>oL,modeRgb:()=>Cu,modeXyb:()=>fL,modeXyz50:()=>cL,modeXyz65:()=>dL,modeYiq:()=>yL,nearest:()=>Lde,okhsl:()=>x2e,okhsv:()=>_2e,oklab:()=>w2e,oklch:()=>T2e,p3:()=>A2e,parse:()=>fq,parseHex:()=>iq,parseHsl:()=>Eq,parseHslLegacy:()=>Dq,parseHwb:()=>Fq,parseLab:()=>Uq,parseLch:()=>Yq,parseNamed:()=>nq,parseOklab:()=>eL,parseOklch:()=>tL,parseRgb:()=>cq,parseRgbLegacy:()=>oq,parseTransparent:()=>vq,prophoto:()=>M2e,random:()=>fde,rec2020:()=>k2e,removeParser:()=>Mce,rgb:()=>S2e,round:()=>gL,samples:()=>Ade,serializeHex:()=>f_,serializeHex8:()=>bL,serializeHsl:()=>_L,serializeRgb:()=>xL,toGamut:()=>Sde,trilerp:()=>zce,unlerp:()=>Fce,useMode:()=>kt,useParser:()=>sq,wcagContrast:()=>r2e,wcagLuminance:()=>Hx,xyb:()=>q2e,xyz50:()=>L2e,xyz65:()=>C2e,yiq:()=>D2e});zL.exports=cce(rq);var vce=(e,r)=>{if(typeof e==\"number\"){if(r===3)return{mode:\"rgb\",r:(e>>8&15|e>>4&240)/255,g:(e>>4&15|e&240)/255,b:(e&15|e<<4&240)/255};if(r===4)return{mode:\"rgb\",r:(e>>12&15|e>>8&240)/255,g:(e>>8&15|e>>4&240)/255,b:(e>>4&15|e&240)/255,alpha:(e&15|e<<4&240)/255};if(r===6)return{mode:\"rgb\",r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(r===8)return{mode:\"rgb\",r:(e>>24&255)/255,g:(e>>16&255)/255,b:(e>>8&255)/255,alpha:(e&255)/255}}},tq=vce,hce={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},aq=hce,dce=e=>tq(aq[e.toLowerCase()],6),nq=dce,pce=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,mce=e=>{let r;return(r=e.match(pce))?tq(parseInt(r[1],16),r[1].length):void 0},iq=mce,jn=\"([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\",ZHe=`(?:${jn}|none)`,th=`${jn}%`,$He=`(?:${jn}%|none)`,Gx=`(?:${jn}%|${jn})`,yce=`(?:${jn}%|${jn}|none)`,gce=`(?:${jn}(deg|grad|rad|turn)|${jn})`,JHe=`(?:${jn}(deg|grad|rad|turn)|${jn}|none)`,w0=\"\\\\s*,\\\\s*\",KHe=new RegExp(\"^\"+yce+\"$\"),bce=new RegExp(`^rgba?\\\\(\\\\s*${jn}${w0}${jn}${w0}${jn}\\\\s*(?:,\\\\s*${Gx}\\\\s*)?\\\\)$`),xce=new RegExp(`^rgba?\\\\(\\\\s*${th}${w0}${th}${w0}${th}\\\\s*(?:,\\\\s*${Gx}\\\\s*)?\\\\)$`),_ce=e=>{let r={mode:\"rgb\"},t;if(t=e.match(bce))t[1]!==void 0&&(r.r=t[1]/255),t[2]!==void 0&&(r.g=t[2]/255),t[3]!==void 0&&(r.b=t[3]/255);else if(t=e.match(xce))t[1]!==void 0&&(r.r=t[1]/100),t[2]!==void 0&&(r.g=t[2]/100),t[3]!==void 0&&(r.b=t[3]/100);else return;return t[4]!==void 0?r.alpha=Math.max(0,Math.min(1,t[4]/100)):t[5]!==void 0&&(r.alpha=Math.max(0,Math.min(1,+t[5]))),r},oq=_ce,wce=(e,r)=>e===void 0?void 0:typeof e!=\"object\"?fq(e):e.mode!==void 0?e:r?Ut(wt({},e),{mode:r}):void 0,xo=wce,Tce=(e=\"rgb\")=>r=>(r=xo(r,e))!==void 0?r.mode===e?r:Zo[r.mode][e]?Zo[r.mode][e](r):e===\"rgb\"?Zo[r.mode].rgb(r):Zo.rgb[e](Zo[r.mode].rgb(r)):void 0,zt=Tce,Zo={},lq={},T0=[],Yx={},Ace=e=>e,kt=e=>(Zo[e.mode]=wt(wt({},Zo[e.mode]),e.toMode),Object.keys(e.fromMode||{}).forEach(r=>{Zo[r]||(Zo[r]={}),Zo[r][e.mode]=e.fromMode[r]}),e.ranges||(e.ranges={}),e.difference||(e.difference={}),e.channels.forEach(r=>{if(e.ranges[r]===void 0&&(e.ranges[r]=[0,1]),!e.interpolate[r])throw new Error(`Missing interpolator for: ${r}`);typeof e.interpolate[r]==\"function\"&&(e.interpolate[r]={use:e.interpolate[r]}),e.interpolate[r].fixup||(e.interpolate[r].fixup=Ace)}),lq[e.mode]=e,(e.parse||[]).forEach(r=>{sq(r,e.mode)}),zt(e.mode)),_n=e=>lq[e],sq=(e,r)=>{if(typeof e==\"string\"){if(!r)throw new Error(\"'mode' required when 'parser' is a string\");Yx[e]=r}else typeof e==\"function\"&&T0.indexOf(e)<0&&T0.push(e)},Mce=e=>{if(typeof e==\"string\")delete Yx[e];else if(typeof e==\"function\"){let r=T0.indexOf(e);r>0&&T0.splice(r,1)}},xx=/[^\\x00-\\x7F]|[a-zA-Z_]/,kce=/[^\\x00-\\x7F]|[-\\w]/,dr={Function:\"function\",Ident:\"ident\",Number:\"number\",Percentage:\"percentage\",ParenClose:\")\",None:\"none\",Hue:\"hue\",Alpha:\"alpha\"},Hr=0;function R1(e){let r=e[Hr],t=e[Hr+1];return r===\"-\"||r===\"+\"?/\\d/.test(t)||t===\".\"&&/\\d/.test(e[Hr+2]):r===\".\"?/\\d/.test(t):/\\d/.test(r)}function _x(e){if(Hr>=e.length)return!1;let r=e[Hr];if(xx.test(r))return!0;if(r===\"-\"){if(e.length-Hr<2)return!1;let t=e[Hr+1];return!!(t===\"-\"||xx.test(t))}return!1}var Sce={deg:1,rad:180/Math.PI,grad:9/10,turn:360};function eh(e){let r=\"\";if((e[Hr]===\"-\"||e[Hr]===\"+\")&&(r+=e[Hr++]),r+=F1(e),e[Hr]===\".\"&&/\\d/.test(e[Hr+1])&&(r+=e[Hr++]+F1(e)),(e[Hr]===\"e\"||e[Hr]===\"E\")&&((e[Hr+1]===\"-\"||e[Hr+1]===\"+\")&&/\\d/.test(e[Hr+2])?r+=e[Hr++]+e[Hr++]+F1(e):/\\d/.test(e[Hr+1])&&(r+=e[Hr++]+F1(e))),_x(e)){let t=I1(e);return t===\"deg\"||t===\"rad\"||t===\"turn\"||t===\"grad\"?{type:dr.Hue,value:r*Sce[t]}:void 0}return e[Hr]===\"%\"?(Hr++,{type:dr.Percentage,value:+r}):{type:dr.Number,value:+r}}function F1(e){let r=\"\";for(;/\\d/.test(e[Hr]);)r+=e[Hr++];return r}function I1(e){let r=\"\";for(;Hr<e.length&&kce.test(e[Hr]);)r+=e[Hr++];return r}function qce(e){let r=I1(e);return e[Hr]===\"(\"?(Hr++,{type:dr.Function,value:r}):r===\"none\"?{type:dr.None,value:void 0}:{type:dr.Ident,value:r}}function Lce(e=\"\"){let r=e.trim(),t=[],a;for(Hr=0;Hr<r.length;){if(a=r[Hr++],a===`\n`||a===\"\t\"||a===\" \"){for(;Hr<r.length&&(r[Hr]===`\n`||r[Hr]===\"\t\"||r[Hr]===\" \");)Hr++;continue}if(a===\",\")return;if(a===\")\"){t.push({type:dr.ParenClose});continue}if(a===\"+\"){if(Hr--,R1(r)){t.push(eh(r));continue}return}if(a===\"-\"){if(Hr--,R1(r)){t.push(eh(r));continue}if(_x(r)){t.push({type:dr.Ident,value:I1(r)});continue}return}if(a===\".\"){if(Hr--,R1(r)){t.push(eh(r));continue}return}if(a===\"/\"){for(;Hr<r.length&&(r[Hr]===`\n`||r[Hr]===\"\t\"||r[Hr]===\" \");)Hr++;let n;if(R1(r)&&(n=eh(r),n.type!==dr.Hue)){t.push({type:dr.Alpha,value:n});continue}if(_x(r)&&I1(r)===\"none\"){t.push({type:dr.Alpha,value:{type:dr.None,value:void 0}});continue}return}if(/\\d/.test(a)){Hr--,t.push(eh(r));continue}if(xx.test(a)){Hr--,t.push(qce(r));continue}return}return t}function Cce(e){e._i=0;let r=e[e._i++];if(!r||r.type!==dr.Function||r.value!==\"color\"||(r=e[e._i++],r.type!==dr.Ident))return;let t=Yx[r.value];if(!t)return;let a={mode:t},n=uq(e,!1);if(!n)return;let i=_n(t).channels;for(let o=0,l,s;o<i.length;o++)l=n[o],s=i[o],l.type!==dr.None&&(a[s]=l.type===dr.Number?l.value:l.value/100,s===\"alpha\"&&(a[s]=Math.max(0,Math.min(1,a[s]))));return a}function uq(e,r){let t=[],a;for(;e._i<e.length;){if(a=e[e._i++],a.type===dr.None||a.type===dr.Number||a.type===dr.Alpha||a.type===dr.Percentage||r&&a.type===dr.Hue){t.push(a);continue}if(a.type===dr.ParenClose){if(e._i<e.length)return;continue}return}if(!(t.length<3||t.length>4)){if(t.length===4){if(t[3].type!==dr.Alpha)return;t[3]=t[3].value}return t.length===3&&t.push({type:dr.None,value:void 0}),t.every(n=>n.type!==dr.Alpha)?t:void 0}}function Dce(e,r){e._i=0;let t=e[e._i++];if(!t||t.type!==dr.Function)return;let a=uq(e,r);if(a)return a.unshift(t.value),a}var Ece=e=>{if(typeof e!=\"string\")return;let r=Lce(e),t=r?Dce(r,!0):void 0,a,n=0,i=T0.length;for(;n<i;)if((a=T0[n++](e,t))!==void 0)return a;return r?Cce(r):void 0},fq=Ece;function Pce(e,r){if(!r||r[0]!==\"rgb\"&&r[0]!==\"rgba\")return;let t={mode:\"rgb\"},[,a,n,i,o]=r;if(!(a.type===dr.Hue||n.type===dr.Hue||i.type===dr.Hue))return a.type!==dr.None&&(t.r=a.type===dr.Number?a.value/255:a.value/100),n.type!==dr.None&&(t.g=n.type===dr.Number?n.value/255:n.value/100),i.type!==dr.None&&(t.b=i.type===dr.Number?i.value/255:i.value/100),o.type!==dr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===dr.Number?o.value:o.value/100))),t}var cq=Pce,Rce=e=>e===\"transparent\"?{mode:\"rgb\",r:0,g:0,b:0,alpha:0}:void 0,vq=Rce,Su=(e,r,t)=>e+t*(r-e),Fce=(e,r,t)=>(t-e)/(r-e),wx=(e,r,t,a,n,i)=>Su(Su(e,r,n),Su(t,a,n),i),zce=(e,r,t,a,n,i,o,l,s,u,f)=>Su(wx(e,r,t,a,s,u),wx(n,i,o,l,s,u),f),Nce=e=>{let r=[];for(let t=0;t<e.length-1;t++){let a=e[t],n=e[t+1];a===void 0&&n===void 0?r.push(void 0):a!==void 0&&n!==void 0?r.push([a,n]):r.push(a!==void 0?[a,a]:[n,n])}return r},hq=e=>r=>{let t=Nce(r);return a=>{let n=a*t.length,i=a>=1?t.length-1:Math.max(Math.floor(n),0),o=t[i];return o===void 0?void 0:e(o[0],o[1],n-i)}},_r=hq(Su),Ra=e=>{let r=!1,t=e.map(a=>a!==void 0?(r=!0,a):1);return r?t:e},Ice={mode:\"rgb\",channels:[\"r\",\"g\",\"b\",\"alpha\"],parse:[cq,iq,oq,nq,vq,\"srgb\"],serialize:\"srgb\",interpolate:{r:_r,g:_r,b:_r,alpha:{use:_r,fixup:Ra}},gamut:!0,white:{r:1,g:1,b:1},black:{r:0,g:0,b:0}},Cu=Ice,J5=(e=0)=>Math.pow(Math.abs(e),563/256)*Math.sign(e),Bce=e=>{let r=J5(e.r),t=J5(e.g),a=J5(e.b),n={mode:\"xyz65\",x:.5766690429101305*r+.1855582379065463*t+.1882286462349947*a,y:.297344975250536*r+.6273635662554661*t+.0752914584939979*a,z:.0270313613864123*r+.0706888525358272*t+.9913375368376386*a};return e.alpha!==void 0&&(n.alpha=e.alpha),n},Tx=Bce,K5=e=>Math.pow(Math.abs(e),256/563)*Math.sign(e),Oce=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:\"a98\",r:K5(e*2.0415879038107465-r*.5650069742788597-.3447313507783297*t),g:K5(e*-.9692436362808798+r*1.8759675015077206+.0415550574071756*t),b:K5(e*.0134442806320312-r*.1183623922310184+1.0151749943912058*t)};return a!==void 0&&(n.alpha=a),n},Ax=Oce,Q5=(e=0)=>{let r=Math.abs(e);return r<=.04045?e/12.92:(Math.sign(e)||1)*Math.pow((r+.055)/1.055,2.4)},Hce=({r:e,g:r,b:t,alpha:a})=>{let n={mode:\"lrgb\",r:Q5(e),g:Q5(r),b:Q5(t)};return a!==void 0&&(n.alpha=a),n},Du=Hce,Uce=e=>{let{r,g:t,b:a,alpha:n}=Du(e),i={mode:\"xyz65\",x:.4123907992659593*r+.357584339383878*t+.1804807884018343*a,y:.2126390058715102*r+.715168678767756*t+.0721923153607337*a,z:.0193308187155918*r+.119194779794626*t+.9505321522496607*a};return n!==void 0&&(i.alpha=n),i},vs=Uce,ex=(e=0)=>{let r=Math.abs(e);return r>.0031308?(Math.sign(e)||1)*(1.055*Math.pow(r,1/2.4)-.055):e*12.92},Gce=({r:e,g:r,b:t,alpha:a},n=\"rgb\")=>{let i={mode:n,r:ex(e),g:ex(r),b:ex(t)};return a!==void 0&&(i.alpha=a),i},Eu=Gce,Yce=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Eu({r:e*3.2409699419045226-r*1.537383177570094-.4986107602930034*t,g:e*-.9692436362808796+r*1.8759675015077204+.0415550574071756*t,b:e*.0556300796969936-r*.2039769588889765+1.0569715142428784*t});return a!==void 0&&(n.alpha=a),n},hs=Yce,Vce=Ut(wt({},Cu),{mode:\"a98\",parse:[\"a98-rgb\"],serialize:\"a98-rgb\",fromMode:{rgb:e=>Ax(vs(e)),xyz65:Ax},toMode:{rgb:e=>hs(Tx(e)),xyz65:Tx}}),dq=Vce,jce=e=>(e=e%360)<0?e+360:e,fn=jce,W1=(e,r)=>e.map((t,a,n)=>{if(t===void 0)return t;let i=fn(t);return a===0||e[a-1]===void 0?i:r(i-fn(n[a-1]))}).reduce((t,a)=>!t.length||a===void 0||t[t.length-1]===void 0?(t.push(a),t):(t.push(a+t[t.length-1]),t),[]),$o=e=>W1(e,r=>Math.abs(r)<=180?r:r-360*Math.sign(r)),Wce=e=>W1(e,r=>Math.abs(r)>=180||r===0?r:r-360*Math.sign(r)),Xce=e=>W1(e,r=>r>=0?r:r+360),Zce=e=>W1(e,r=>r<=0?r:r-360),Ka=[-.14861,1.78277,-.29227,-.90649,1.97294,0],$ce=Math.PI/180,Jce=180/Math.PI,jS=Ka[3]*Ka[4],WS=Ka[1]*Ka[4],XS=Ka[1]*Ka[2]-Ka[0]*Ka[3],Kce=({r:e,g:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(XS*t+e*jS-r*WS)/(XS+jS-WS),i=t-n,o=(Ka[4]*(r-n)-Ka[2]*i)/Ka[3],l={mode:\"cubehelix\",l:n,s:n===0||n===1?void 0:Math.sqrt(i*i+o*o)/(Ka[4]*n*(1-n))};return l.s&&(l.h=Math.atan2(o,i)*Jce-120),a!==void 0&&(l.alpha=a),l},pq=Kce,Qce=({h:e,s:r,l:t,alpha:a})=>{let n={mode:\"rgb\"};e=(e===void 0?0:e+120)*$ce,t===void 0&&(t=0);let i=r===void 0?0:r*t*(1-t),o=Math.cos(e),l=Math.sin(e);return n.r=t+i*(Ka[0]*o+Ka[1]*l),n.g=t+i*(Ka[2]*o+Ka[3]*l),n.b=t+i*(Ka[4]*o+Ka[5]*l),a!==void 0&&(n.alpha=a),n},mq=Qce,ih=(e,r)=>{if(e.h===void 0||r.h===void 0||!e.s||!r.s)return 0;let t=fn(e.h),a=fn(r.h),n=Math.sin((a-t+360)/2*Math.PI/180);return 2*Math.sqrt(e.s*r.s)*n},yq=(e,r)=>{if(e.h===void 0||r.h===void 0)return 0;let t=fn(e.h),a=fn(r.h);return Math.abs(a-t)>180?t-(a-360*Math.sign(a-t)):a-t},oh=(e,r)=>{if(e.h===void 0||r.h===void 0||!e.c||!r.c)return 0;let t=fn(e.h),a=fn(r.h),n=Math.sin((a-t+360)/2*Math.PI/180);return 2*Math.sqrt(e.c*r.c)*n},A0=(e=\"rgb\",r=[1,1,1,0])=>{let t=_n(e),a=t.channels,n=t.difference,i=zt(e);return(o,l)=>{let s=i(o),u=i(l);return Math.sqrt(a.reduce((f,c,v)=>{let d=n[c]?n[c](s,u):s[c]-u[c];return f+(r[v]||0)*Math.pow(isNaN(d)?0:d,2)},0))}},eve=()=>A0(\"lab65\"),rve=(e=1,r=.045,t=.015)=>{let a=zt(\"lab65\");return(n,i)=>{let o=a(n),l=a(i),s=o.l,u=o.a,f=o.b,c=Math.sqrt(u*u+f*f),v=l.l,d=l.a,p=l.b,y=Math.sqrt(d*d+p*p),m=Math.pow(s-v,2),b=Math.pow(c-y,2),T=Math.pow(u-d,2)+Math.pow(f-p,2)-b;return Math.sqrt(m/Math.pow(e,2)+b/Math.pow(1+r*c,2)+T/Math.pow(1+t*c,2))}},tve=(e=1,r=1,t=1)=>{let a=zt(\"lab65\");return(n,i)=>{let o=a(n),l=a(i),s=o.l,u=o.a,f=o.b,c=Math.sqrt(u*u+f*f),v=l.l,d=l.a,p=l.b,y=Math.sqrt(d*d+p*p),m=(c+y)/2,b=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),T=u*(1+b),w=d*(1+b),x=Math.sqrt(T*T+f*f),_=Math.sqrt(w*w+p*p),k=Math.abs(T)+Math.abs(f)===0?0:Math.atan2(f,T);k+=(k<0)*2*Math.PI;let A=Math.abs(w)+Math.abs(p)===0?0:Math.atan2(p,w);A+=(A<0)*2*Math.PI;let q=v-s,C=_-x,E=x*_===0?0:A-k;E-=(E>Math.PI)*2*Math.PI,E+=(E<-Math.PI)*2*Math.PI;let P=2*Math.sqrt(x*_)*Math.sin(E/2),R=(s+v)/2,N=(x+_)/2,I;x*_===0?I=k+A:(I=(k+A)/2,I-=(Math.abs(k-A)>Math.PI)*Math.PI,I+=(I<0)*2*Math.PI);let O=Math.pow(R-50,2),U=1-.17*Math.cos(I-Math.PI/6)+.24*Math.cos(2*I)+.32*Math.cos(3*I+Math.PI/30)-.2*Math.cos(4*I-63*Math.PI/180),Y=1+.015*O/Math.sqrt(20+O),G=1+.045*N,V=1+.015*N*U,W=30*Math.PI/180*Math.exp(-1*Math.pow((180/Math.PI*I-275)/25,2)),j=2*Math.sqrt(Math.pow(N,7)/(Math.pow(N,7)+Math.pow(25,7))),J=-1*Math.sin(2*W)*j;return Math.sqrt(Math.pow(q/(e*Y),2)+Math.pow(C/(r*G),2)+Math.pow(P/(t*V),2)+J*C/(r*G)*P/(t*V))}},ave=(e=1,r=1)=>{let t=zt(\"lab65\");return(a,n)=>{let i=t(a),o=i.l,l=i.a,s=i.b,u=Math.sqrt(l*l+s*s),f=Math.atan2(s,l);f=f+2*Math.PI*(f<0);let c=t(n),v=c.l,d=c.a,p=c.b,y=Math.sqrt(d*d+p*p),m=Math.pow(o-v,2),b=Math.pow(u-y,2),T=Math.pow(l-d,2)+Math.pow(s-p,2)-b,w=Math.sqrt(Math.pow(u,4)/(Math.pow(u,4)+1900)),x=f>=164/180*Math.PI&&f<=345/180*Math.PI?.56+Math.abs(.2*Math.cos(f+168/180*Math.PI)):.36+Math.abs(.4*Math.cos(f+35/180*Math.PI)),_=o<16?.511:.040975*o/(1+.01765*o),k=.0638*u/(1+.0131*u)+.638,A=k*(w*x+1-w);return Math.sqrt(m/Math.pow(e*_,2)+b/Math.pow(r*k,2)+T/Math.pow(A,2))}},nve=()=>{let e=zt(\"lab65\");return(r,t)=>{let a=e(r),n=e(t),i=a.l-n.l,o=a.a-n.a,l=a.b-n.b;return Math.abs(i)+Math.sqrt(o*o+l*l)}},ive=()=>A0(\"yiq\",[.5053,.299,.1957]),ove=()=>A0(\"itp\",[518400,129600,518400]),Jo=e=>{let r=e.reduce((a,n)=>{if(n!==void 0){let i=n*Math.PI/180;a.sin+=Math.sin(i),a.cos+=Math.cos(i)}return a},{sin:0,cos:0}),t=Math.atan2(r.sin,r.cos)*180/Math.PI;return t<0?360+t:t},gq=e=>{let r=e.filter(t=>t!==void 0);return r.length?r.reduce((t,a)=>t+a,0)/r.length:void 0},rx=e=>typeof e==\"function\";function lve(e,r=\"rgb\",t){let a=_n(r),n=e.map(zt(r));return a.channels.reduce((i,o)=>{let l=n.map(s=>s[o]).filter(s=>s!==void 0);if(l.length){let s;rx(t)?s=t:t&&rx(t[o])?s=t[o]:a.average&&rx(a.average[o])?s=a.average[o]:s=gq,i[o]=s(l,o)}return i},{mode:r})}var sve={mode:\"cubehelix\",channels:[\"h\",\"s\",\"l\",\"alpha\"],parse:[\"--cubehelix\"],serialize:\"--cubehelix\",ranges:{h:[0,360],s:[0,4.614],l:[0,1]},fromMode:{rgb:pq},toMode:{rgb:mq},interpolate:{h:{use:_r,fixup:$o},s:_r,l:_r,alpha:{use:_r,fixup:Ra}},difference:{h:ih},average:{h:Jo}},bq=sve,uve=({l:e,a:r,b:t,alpha:a},n=\"lch\")=>{r===void 0&&(r=0),t===void 0&&(t=0);let i=Math.sqrt(r*r+t*t),o={mode:n,l:e,c:i};return i&&(o.h=fn(Math.atan2(t,r)*180/Math.PI)),a!==void 0&&(o.alpha=a),o},Cl=uve,fve=({l:e,c:r,h:t,alpha:a},n=\"lab\")=>{t===void 0&&(t=0);let i={mode:n,l:e,a:r?r*Math.cos(t/180*Math.PI):0,b:r?r*Math.sin(t/180*Math.PI):0};return a!==void 0&&(i.alpha=a),i},Dl=fve,xq=Math.pow(29,3)/Math.pow(3,3),_q=Math.pow(6,3)/Math.pow(29,3),Pa={X:.3457/.3585,Y:1,Z:(1-.3457-.3585)/.3585},_0={X:.3127/.329,Y:1,Z:(1-.3127-.329)/.329},QHe=Math.pow(29,3)/Math.pow(3,3),eUe=Math.pow(6,3)/Math.pow(29,3),tx=e=>Math.pow(e,3)>_q?Math.pow(e,3):(116*e-16)/xq,cve=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(e+16)/116,i=r/500+n,o=n-t/200,l={mode:\"xyz65\",x:tx(i)*_0.X,y:tx(n)*_0.Y,z:tx(o)*_0.Z};return a!==void 0&&(l.alpha=a),l},Vx=cve,vve=e=>hs(Vx(e)),lh=vve,ax=e=>e>_q?Math.cbrt(e):(xq*e+16)/116,hve=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=ax(e/_0.X),i=ax(r/_0.Y),o=ax(t/_0.Z),l={mode:\"lab65\",l:116*i-16,a:500*(n-i),b:200*(i-o)};return a!==void 0&&(l.alpha=a),l},jx=hve,dve=e=>{let r=jx(vs(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},sh=dve,B1=1,wq=1,nh=26/180*Math.PI,O1=Math.cos(nh),H1=Math.sin(nh),Tq=100/Math.log(139/100),pve=({l:e,c:r,h:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:\"lab65\",l:(Math.exp(e*B1/Tq)-1)/.0039},i=(Math.exp(.0435*r*wq*B1)-1)/.075,o=i*Math.cos(t/180*Math.PI-nh),l=i*Math.sin(t/180*Math.PI-nh);return n.a=o*O1-l/.83*H1,n.b=o*H1+l/.83*O1,a!==void 0&&(n.alpha=a),n},U1=pve,mve=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=r*O1+t*H1,i=.83*(t*O1-r*H1),o=Math.sqrt(n*n+i*i),l={mode:\"dlch\",l:Tq/B1*Math.log(1+.0039*e),c:Math.log(1+.075*o)/(.0435*wq*B1)};return l.c&&(l.h=fn((Math.atan2(i,n)+nh)/Math.PI*180)),a!==void 0&&(l.alpha=a),l},G1=mve,ZS=e=>U1(Cl(e,\"dlch\")),$S=e=>Dl(G1(e),\"dlab\"),yve={mode:\"dlab\",parse:[\"--din99o-lab\"],serialize:\"--din99o-lab\",toMode:{lab65:ZS,rgb:e=>lh(ZS(e))},fromMode:{lab65:$S,rgb:e=>$S(sh(e))},channels:[\"l\",\"a\",\"b\",\"alpha\"],ranges:{l:[0,100],a:[-40.09,45.501],b:[-40.469,44.344]},interpolate:{l:_r,a:_r,b:_r,alpha:{use:_r,fixup:Ra}}},Aq=yve,gve={mode:\"dlch\",parse:[\"--din99o-lch\"],serialize:\"--din99o-lch\",toMode:{lab65:U1,dlab:e=>Dl(e,\"dlab\"),rgb:e=>lh(U1(e))},fromMode:{lab65:G1,dlab:e=>Cl(e,\"dlch\"),rgb:e=>G1(sh(e))},channels:[\"l\",\"c\",\"h\",\"alpha\"],ranges:{l:[0,100],c:[0,51.484],h:[0,360]},interpolate:{l:_r,c:_r,h:{use:_r,fixup:$o},alpha:{use:_r,fixup:Ra}},difference:{h:oh},average:{h:Jo}},Mq=gve;function kq({h:e,s:r,i:t,alpha:a}){e=fn(e!==void 0?e:0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.abs(e/60%2-1),i;switch(Math.floor(e/60)){case 0:i={r:t*(1+r*(3/(2-n)-1)),g:t*(1+r*(3*(1-n)/(2-n)-1)),b:t*(1-r)};break;case 1:i={r:t*(1+r*(3*(1-n)/(2-n)-1)),g:t*(1+r*(3/(2-n)-1)),b:t*(1-r)};break;case 2:i={r:t*(1-r),g:t*(1+r*(3/(2-n)-1)),b:t*(1+r*(3*(1-n)/(2-n)-1))};break;case 3:i={r:t*(1-r),g:t*(1+r*(3*(1-n)/(2-n)-1)),b:t*(1+r*(3/(2-n)-1))};break;case 4:i={r:t*(1+r*(3*(1-n)/(2-n)-1)),g:t*(1-r),b:t*(1+r*(3/(2-n)-1))};break;case 5:i={r:t*(1+r*(3/(2-n)-1)),g:t*(1-r),b:t*(1+r*(3*(1-n)/(2-n)-1))};break;default:i={r:t*(1-r),g:t*(1-r),b:t*(1-r)}}return i.mode=\"rgb\",a!==void 0&&(i.alpha=a),i}function Sq({r:e,g:r,b:t,alpha:a}){e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.max(e,r,t),i=Math.min(e,r,t),o={mode:\"hsi\",s:e+r+t===0?0:1-3*i/(e+r+t),i:(e+r+t)/3};return n-i!==0&&(o.h=(n===e?(r-t)/(n-i)+(r<t)*6:n===r?(t-e)/(n-i)+2:(e-r)/(n-i)+4)*60),a!==void 0&&(o.alpha=a),o}var bve={mode:\"hsi\",toMode:{rgb:kq},parse:[\"--hsi\"],serialize:\"--hsi\",fromMode:{rgb:Sq},channels:[\"h\",\"s\",\"i\",\"alpha\"],ranges:{h:[0,360]},gamut:\"rgb\",interpolate:{h:{use:_r,fixup:$o},s:_r,i:_r,alpha:{use:_r,fixup:Ra}},difference:{h:ih},average:{h:Jo}},qq=bve;function Lq({h:e,s:r,l:t,alpha:a}){e=fn(e!==void 0?e:0),r===void 0&&(r=0),t===void 0&&(t=0);let n=t+r*(t<.5?t:1-t),i=n-(n-t)*2*Math.abs(e/60%2-1),o;switch(Math.floor(e/60)){case 0:o={r:n,g:i,b:2*t-n};break;case 1:o={r:i,g:n,b:2*t-n};break;case 2:o={r:2*t-n,g:n,b:i};break;case 3:o={r:2*t-n,g:i,b:n};break;case 4:o={r:i,g:2*t-n,b:n};break;case 5:o={r:n,g:2*t-n,b:i};break;default:o={r:2*t-n,g:2*t-n,b:2*t-n}}return o.mode=\"rgb\",a!==void 0&&(o.alpha=a),o}function Cq({r:e,g:r,b:t,alpha:a}){e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.max(e,r,t),i=Math.min(e,r,t),o={mode:\"hsl\",s:n===i?0:(n-i)/(1-Math.abs(n+i-1)),l:.5*(n+i)};return n-i!==0&&(o.h=(n===e?(r-t)/(n-i)+(r<t)*6:n===r?(t-e)/(n-i)+2:(e-r)/(n-i)+4)*60),a!==void 0&&(o.alpha=a),o}var xve=(e,r)=>{switch(r){case\"deg\":return+e;case\"rad\":return e/Math.PI*180;case\"grad\":return e/10*9;case\"turn\":return e*360}},_ve=xve,wve=new RegExp(`^hsla?\\\\(\\\\s*${gce}${w0}${th}${w0}${th}\\\\s*(?:,\\\\s*${Gx}\\\\s*)?\\\\)$`),Tve=e=>{let r=e.match(wve);if(!r)return;let t={mode:\"hsl\"};return r[3]!==void 0?t.h=+r[3]:r[1]!==void 0&&r[2]!==void 0&&(t.h=_ve(r[1],r[2])),r[4]!==void 0&&(t.s=Math.min(Math.max(0,r[4]/100),1)),r[5]!==void 0&&(t.l=Math.min(Math.max(0,r[5]/100),1)),r[6]!==void 0?t.alpha=Math.max(0,Math.min(1,r[6]/100)):r[7]!==void 0&&(t.alpha=Math.max(0,Math.min(1,+r[7]))),t},Dq=Tve;function Ave(e,r){if(!r||r[0]!==\"hsl\"&&r[0]!==\"hsla\")return;let t={mode:\"hsl\"},[,a,n,i,o]=r;if(a.type!==dr.None){if(a.type===dr.Percentage)return;t.h=a.value}if(n.type!==dr.None){if(n.type===dr.Hue)return;t.s=n.value/100}if(i.type!==dr.None){if(i.type===dr.Hue)return;t.l=i.value/100}return o.type!==dr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===dr.Number?o.value:o.value/100))),t}var Eq=Ave,Mve={mode:\"hsl\",toMode:{rgb:Lq},fromMode:{rgb:Cq},channels:[\"h\",\"s\",\"l\",\"alpha\"],ranges:{h:[0,360]},gamut:\"rgb\",parse:[Eq,Dq],serialize:e=>`hsl(${e.h!==void 0?e.h:\"none\"} ${e.s!==void 0?e.s*100+\"%\":\"none\"} ${e.l!==void 0?e.l*100+\"%\":\"none\"}${e.alpha<1?` / ${e.alpha}`:\"\"})`,interpolate:{h:{use:_r,fixup:$o},s:_r,l:_r,alpha:{use:_r,fixup:Ra}},difference:{h:ih},average:{h:Jo}},Wx=Mve;function Xx({h:e,s:r,v:t,alpha:a}){e=fn(e!==void 0?e:0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.abs(e/60%2-1),i;switch(Math.floor(e/60)){case 0:i={r:t,g:t*(1-r*n),b:t*(1-r)};break;case 1:i={r:t*(1-r*n),g:t,b:t*(1-r)};break;case 2:i={r:t*(1-r),g:t,b:t*(1-r*n)};break;case 3:i={r:t*(1-r),g:t*(1-r*n),b:t};break;case 4:i={r:t*(1-r*n),g:t*(1-r),b:t};break;case 5:i={r:t,g:t*(1-r),b:t*(1-r*n)};break;default:i={r:t*(1-r),g:t*(1-r),b:t*(1-r)}}return i.mode=\"rgb\",a!==void 0&&(i.alpha=a),i}function Zx({r:e,g:r,b:t,alpha:a}){e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.max(e,r,t),i=Math.min(e,r,t),o={mode:\"hsv\",s:n===0?0:1-i/n,v:n};return n-i!==0&&(o.h=(n===e?(r-t)/(n-i)+(r<t)*6:n===r?(t-e)/(n-i)+2:(e-r)/(n-i)+4)*60),a!==void 0&&(o.alpha=a),o}var kve={mode:\"hsv\",toMode:{rgb:Xx},parse:[\"--hsv\"],serialize:\"--hsv\",fromMode:{rgb:Zx},channels:[\"h\",\"s\",\"v\",\"alpha\"],ranges:{h:[0,360]},gamut:\"rgb\",interpolate:{h:{use:_r,fixup:$o},s:_r,v:_r,alpha:{use:_r,fixup:Ra}},difference:{h:ih},average:{h:Jo}},$x=kve;function Pq({h:e,w:r,b:t,alpha:a}){if(r===void 0&&(r=0),t===void 0&&(t=0),r+t>1){let n=r+t;r/=n,t/=n}return Xx({h:e,s:t===1?1:1-r/(1-t),v:1-t,alpha:a})}function Rq(e){let r=Zx(e);if(r===void 0)return;let t=r.s!==void 0?r.s:0,a=r.v!==void 0?r.v:0,n={mode:\"hwb\",w:(1-t)*a,b:1-a};return r.h!==void 0&&(n.h=r.h),r.alpha!==void 0&&(n.alpha=r.alpha),n}function Sve(e,r){if(!r||r[0]!==\"hwb\")return;let t={mode:\"hwb\"},[,a,n,i,o]=r;if(a.type!==dr.None){if(a.type===dr.Percentage)return;t.h=a.value}if(n.type!==dr.None){if(n.type===dr.Hue)return;t.w=n.value/100}if(i.type!==dr.None){if(i.type===dr.Hue)return;t.b=i.value/100}return o.type!==dr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===dr.Number?o.value:o.value/100))),t}var Fq=Sve,qve={mode:\"hwb\",toMode:{rgb:Pq},fromMode:{rgb:Rq},channels:[\"h\",\"w\",\"b\",\"alpha\"],ranges:{h:[0,360]},gamut:\"rgb\",parse:[Fq],serialize:e=>`hwb(${e.h!==void 0?e.h:\"none\"} ${e.w!==void 0?e.w*100+\"%\":\"none\"} ${e.b!==void 0?e.b*100+\"%\":\"none\"}${e.alpha<1?` / ${e.alpha}`:\"\"})`,interpolate:{h:{use:_r,fixup:$o},w:_r,b:_r,alpha:{use:_r,fixup:Ra}},difference:{h:yq},average:{h:Jo}},zq=qve,Nq=203,X1=.1593017578125,Iq=78.84375,Z1=.8359375,$1=18.8515625,J1=18.6875;function nx(e){if(e<0)return 0;let r=Math.pow(e,1/Iq);return 1e4*Math.pow(Math.max(0,r-Z1)/($1-J1*r),1/X1)}function ix(e){if(e<0)return 0;let r=Math.pow(e/1e4,X1);return Math.pow((Z1+$1*r)/(1+J1*r),Iq)}var ox=e=>Math.max(e/Nq,0),Lve=({i:e,t:r,p:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=nx(e+.008609037037932761*r+.11102962500302593*t),i=nx(e-.00860903703793275*r-.11102962500302599*t),o=nx(e+.5600313357106791*r-.32062717498731885*t),l={mode:\"xyz65\",x:ox(2.070152218389422*n-1.3263473389671556*i+.2066510476294051*o),y:ox(.3647385209748074*n+.680566024947227*i-.0453045459220346*o),z:ox(-.049747207535812*n-.0492609666966138*i+1.1880659249923042*o)};return a!==void 0&&(l.alpha=a),l},Mx=Lve,lx=(e=0)=>Math.max(e*Nq,0),Cve=({x:e,y:r,z:t,alpha:a})=>{let n=lx(e),i=lx(r),o=lx(t),l=ix(.3592832590121217*n+.6976051147779502*i-.0358915932320289*o),s=ix(-.1920808463704995*n+1.1004767970374323*i+.0753748658519118*o),u=ix(.0070797844607477*n+.0748396662186366*i+.8433265453898765*o),f=.5*l+.5*s,c=1.61376953125*l-3.323486328125*s+1.709716796875*u,v=4.378173828125*l-4.24560546875*s-.132568359375*u,d={mode:\"itp\",i:f,t:c,p:v};return a!==void 0&&(d.alpha=a),d},kx=Cve,Dve={mode:\"itp\",channels:[\"i\",\"t\",\"p\",\"alpha\"],parse:[\"--ictcp\"],serialize:\"--ictcp\",toMode:{xyz65:Mx,rgb:e=>hs(Mx(e))},fromMode:{xyz65:kx,rgb:e=>kx(vs(e))},ranges:{i:[0,.581],t:[-.369,.272],p:[-.164,.331]},interpolate:{i:_r,t:_r,p:_r,alpha:{use:_r,fixup:Ra}}},Bq=Dve,Eve=134.03437499999998,Pve=16295499532821565e-27,sx=e=>{if(e<0)return 0;let r=Math.pow(e/1e4,X1);return Math.pow((Z1+$1*r)/(1+J1*r),Eve)},ux=(e=0)=>Math.max(e*203,0),Rve=({x:e,y:r,z:t,alpha:a})=>{e=ux(e),r=ux(r),t=ux(t);let n=1.15*e-.15*t,i=.66*r+.34*e,o=sx(.41478972*n+.579999*i+.014648*t),l=sx(-.20151*n+1.120649*i+.0531008*t),s=sx(-.0166008*n+.2648*i+.6684799*t),u=(o+l)/2,f={mode:\"jab\",j:.44*u/(1-.56*u)-Pve,a:3.524*o-4.066708*l+.542708*s,b:.199076*o+1.096799*l-1.295875*s};return a!==void 0&&(f.alpha=a),f},Jx=Rve,Fve=134.03437499999998,JS=16295499532821565e-27,fx=e=>{if(e<0)return 0;let r=Math.pow(e,1/Fve);return 1e4*Math.pow((Z1-r)/(J1*r-$1),1/X1)},cx=e=>e/203,zve=({j:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(e+JS)/(.44+.56*(e+JS)),i=fx(n+.13860504*r+.058047316*t),o=fx(n-.13860504*r-.058047316*t),l=fx(n-.096019242*r-.8118919*t),s={mode:\"xyz65\",x:cx(1.661373024652174*i-.914523081304348*o+.23136208173913045*l),y:cx(-.3250758611844533*i+1.571847026732543*o-.21825383453227928*l),z:cx(-.090982811*i-.31272829*o+1.5227666*l)};return a!==void 0&&(s.alpha=a),s},Kx=zve,Nve=e=>{let r=Jx(vs(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},Qx=Nve,Ive=e=>hs(Kx(e)),e_=Ive,Bve={mode:\"jab\",channels:[\"j\",\"a\",\"b\",\"alpha\"],parse:[\"--jzazbz\"],serialize:\"--jzazbz\",fromMode:{rgb:Qx,xyz65:Jx},toMode:{rgb:e_,xyz65:Kx},ranges:{j:[0,.222],a:[-.109,.129],b:[-.185,.134]},interpolate:{j:_r,a:_r,b:_r,alpha:{use:_r,fixup:Ra}}},Oq=Bve,Ove=({j:e,a:r,b:t,alpha:a})=>{r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.sqrt(r*r+t*t),i={mode:\"jch\",j:e,c:n};return n&&(i.h=fn(Math.atan2(t,r)*180/Math.PI)),a!==void 0&&(i.alpha=a),i},Sx=Ove,Hve=({j:e,c:r,h:t,alpha:a})=>{t===void 0&&(t=0);let n={mode:\"jab\",j:e,a:r?r*Math.cos(t/180*Math.PI):0,b:r?r*Math.sin(t/180*Math.PI):0};return a!==void 0&&(n.alpha=a),n},qx=Hve,Uve={mode:\"jch\",parse:[\"--jzczhz\"],serialize:\"--jzczhz\",toMode:{jab:qx,rgb:e=>e_(qx(e))},fromMode:{rgb:e=>Sx(Qx(e)),jab:Sx},channels:[\"j\",\"c\",\"h\",\"alpha\"],ranges:{j:[0,.221],c:[0,.19],h:[0,360]},interpolate:{h:{use:_r,fixup:$o},c:_r,j:_r,alpha:{use:_r,fixup:Ra}},difference:{h:oh},average:{h:Jo}},Hq=Uve,K1=Math.pow(29,3)/Math.pow(3,3),r_=Math.pow(6,3)/Math.pow(29,3),vx=e=>Math.pow(e,3)>r_?Math.pow(e,3):(116*e-16)/K1,Gve=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=(e+16)/116,i=r/500+n,o=n-t/200,l={mode:\"xyz50\",x:vx(i)*Pa.X,y:vx(n)*Pa.Y,z:vx(o)*Pa.Z};return a!==void 0&&(l.alpha=a),l},Q1=Gve,Yve=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Eu({r:e*3.1341359569958707-r*1.6173863321612538-.4906619460083532*t,g:e*-.978795502912089+r*1.916254567259524+.03344273116131949*t,b:e*.07195537988411677-r*.2289768264158322+1.405386058324125*t});return a!==void 0&&(n.alpha=a),n},M0=Yve,Vve=e=>M0(Q1(e)),t_=Vve,jve=e=>{let{r,g:t,b:a,alpha:n}=Du(e),i={mode:\"xyz50\",x:.436065742824811*r+.3851514688337912*t+.14307845442264197*a,y:.22249319175623702*r+.7168870538238823*t+.06061979053616537*a,z:.013923904500943465*r+.09708128566574634*t+.7140993584005155*a};return n!==void 0&&(i.alpha=n),i},k0=jve,hx=e=>e>r_?Math.cbrt(e):(K1*e+16)/116,Wve=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=hx(e/Pa.X),i=hx(r/Pa.Y),o=hx(t/Pa.Z),l={mode:\"lab\",l:116*i-16,a:500*(n-i),b:200*(i-o)};return a!==void 0&&(l.alpha=a),l},ep=Wve,Xve=e=>{let r=ep(k0(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},a_=Xve;function Zve(e,r){if(!r||r[0]!==\"lab\")return;let t={mode:\"lab\"},[,a,n,i,o]=r;if(!(a.type===dr.Hue||n.type===dr.Hue||i.type===dr.Hue))return a.type!==dr.None&&(t.l=Math.min(Math.max(0,a.value),100)),n.type!==dr.None&&(t.a=n.type===dr.Number?n.value:n.value*125/100),i.type!==dr.None&&(t.b=i.type===dr.Number?i.value:i.value*125/100),o.type!==dr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===dr.Number?o.value:o.value/100))),t}var Uq=Zve,$ve={mode:\"lab\",toMode:{xyz50:Q1,rgb:t_},fromMode:{xyz50:ep,rgb:a_},channels:[\"l\",\"a\",\"b\",\"alpha\"],ranges:{l:[0,100],a:[-125,125],b:[-125,125]},parse:[Uq],serialize:e=>`lab(${e.l!==void 0?e.l:\"none\"} ${e.a!==void 0?e.a:\"none\"} ${e.b!==void 0?e.b:\"none\"}${e.alpha<1?` / ${e.alpha}`:\"\"})`,interpolate:{l:_r,a:_r,b:_r,alpha:{use:_r,fixup:Ra}}},rp=$ve,Jve=Ut(wt({},rp),{mode:\"lab65\",parse:[\"--lab-d65\"],serialize:\"--lab-d65\",toMode:{xyz65:Vx,rgb:lh},fromMode:{xyz65:jx,rgb:sh},ranges:{l:[0,100],a:[-125,125],b:[-125,125]}}),Gq=Jve;function Kve(e,r){if(!r||r[0]!==\"lch\")return;let t={mode:\"lch\"},[,a,n,i,o]=r;if(a.type!==dr.None){if(a.type===dr.Hue)return;t.l=Math.min(Math.max(0,a.value),100)}if(n.type!==dr.None&&(t.c=Math.max(0,n.type===dr.Number?n.value:n.value*150/100)),i.type!==dr.None){if(i.type===dr.Percentage)return;t.h=i.value}return o.type!==dr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===dr.Number?o.value:o.value/100))),t}var Yq=Kve,Qve={mode:\"lch\",toMode:{lab:Dl,rgb:e=>t_(Dl(e))},fromMode:{rgb:e=>Cl(a_(e)),lab:Cl},channels:[\"l\",\"c\",\"h\",\"alpha\"],ranges:{l:[0,100],c:[0,150],h:[0,360]},parse:[Yq],serialize:e=>`lch(${e.l!==void 0?e.l:\"none\"} ${e.c!==void 0?e.c:\"none\"} ${e.h!==void 0?e.h:\"none\"}${e.alpha<1?` / ${e.alpha}`:\"\"})`,interpolate:{h:{use:_r,fixup:$o},c:_r,l:_r,alpha:{use:_r,fixup:Ra}},difference:{h:oh},average:{h:Jo}},tp=Qve,ehe=Ut(wt({},tp),{mode:\"lch65\",parse:[\"--lch-d65\"],serialize:\"--lch-d65\",toMode:{lab65:e=>Dl(e,\"lab65\"),rgb:e=>lh(Dl(e,\"lab65\"))},fromMode:{rgb:e=>Cl(sh(e),\"lch65\"),lab65:e=>Cl(e,\"lch65\")},ranges:{l:[0,100],c:[0,150],h:[0,360]}}),Vq=ehe,rhe=({l:e,u:r,v:t,alpha:a})=>{r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.sqrt(r*r+t*t),i={mode:\"lchuv\",l:e,c:n};return n&&(i.h=fn(Math.atan2(t,r)*180/Math.PI)),a!==void 0&&(i.alpha=a),i},n_=rhe,the=({l:e,c:r,h:t,alpha:a})=>{t===void 0&&(t=0);let n={mode:\"luv\",l:e,u:r?r*Math.cos(t/180*Math.PI):0,v:r?r*Math.sin(t/180*Math.PI):0};return a!==void 0&&(n.alpha=a),n},i_=the,jq=(e,r,t)=>4*e/(e+15*r+3*t),Wq=(e,r,t)=>9*r/(e+15*r+3*t),ahe=jq(Pa.X,Pa.Y,Pa.Z),nhe=Wq(Pa.X,Pa.Y,Pa.Z),ihe=e=>e<=r_?K1*e:116*Math.cbrt(e)-16,ohe=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=ihe(r/Pa.Y),i=jq(e,r,t),o=Wq(e,r,t);!isFinite(i)||!isFinite(o)?n=i=o=0:(i=13*n*(i-ahe),o=13*n*(o-nhe));let l={mode:\"luv\",l:n,u:i,v:o};return a!==void 0&&(l.alpha=a),l},Y1=ohe,lhe=(e,r,t)=>4*e/(e+15*r+3*t),she=(e,r,t)=>9*r/(e+15*r+3*t),uhe=lhe(Pa.X,Pa.Y,Pa.Z),fhe=she(Pa.X,Pa.Y,Pa.Z),che=({l:e,u:r,v:t,alpha:a})=>{if(e===void 0&&(e=0),e===0)return{mode:\"xyz50\",x:0,y:0,z:0};r===void 0&&(r=0),t===void 0&&(t=0);let n=r/(13*e)+uhe,i=t/(13*e)+fhe,o=Pa.Y*(e<=8?e/K1:Math.pow((e+16)/116,3)),l=o*(9*n)/(4*i),s=o*(12-3*n-20*i)/(4*i),u={mode:\"xyz50\",x:l,y:o,z:s};return a!==void 0&&(u.alpha=a),u},V1=che,vhe=e=>n_(Y1(k0(e))),hhe=e=>M0(V1(i_(e))),dhe={mode:\"lchuv\",toMode:{luv:i_,rgb:hhe},fromMode:{rgb:vhe,luv:n_},channels:[\"l\",\"c\",\"h\",\"alpha\"],parse:[\"--lchuv\"],serialize:\"--lchuv\",ranges:{l:[0,100],c:[0,176.956],h:[0,360]},interpolate:{h:{use:_r,fixup:$o},c:_r,l:_r,alpha:{use:_r,fixup:Ra}},difference:{h:oh},average:{h:Jo}},Xq=dhe,phe=Ut(wt({},Cu),{mode:\"lrgb\",toMode:{rgb:Eu},fromMode:{rgb:Du},parse:[\"srgb-linear\"],serialize:\"srgb-linear\"}),Zq=phe,mhe={mode:\"luv\",toMode:{xyz50:V1,rgb:e=>M0(V1(e))},fromMode:{xyz50:Y1,rgb:e=>Y1(k0(e))},channels:[\"l\",\"u\",\"v\",\"alpha\"],parse:[\"--luv\"],serialize:\"--luv\",ranges:{l:[0,100],u:[-84.936,175.042],v:[-125.882,87.243]},interpolate:{l:_r,u:_r,v:_r,alpha:{use:_r,fixup:Ra}}},$q=mhe,yhe=({r:e,g:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.cbrt(.412221469470763*e+.5363325372617348*r+.0514459932675022*t),i=Math.cbrt(.2119034958178252*e+.6806995506452344*r+.1073969535369406*t),o=Math.cbrt(.0883024591900564*e+.2817188391361215*r+.6299787016738222*t),l={mode:\"oklab\",l:.210454268309314*n+.7936177747023054*i-.0040720430116193*o,a:1.9779985324311684*n-2.42859224204858*i+.450593709617411*o,b:.0259040424655478*n+.7827717124575296*i-.8086757549230774*o};return a!==void 0&&(l.alpha=a),l},o_=yhe,ghe=e=>{let r=o_(Du(e));return e.r===e.b&&e.b===e.g&&(r.a=r.b=0),r},uh=ghe,bhe=({l:e,a:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Math.pow(e+.3963377773761749*r+.2158037573099136*t,3),i=Math.pow(e-.1055613458156586*r-.0638541728258133*t,3),o=Math.pow(e-.0894841775298119*r-1.2914855480194092*t,3),l={mode:\"lrgb\",r:4.076741636075957*n-3.3077115392580616*i+.2309699031821044*o,g:-1.2684379732850317*n+2.6097573492876887*i-.3413193760026573*o,b:-.0041960761386756*n-.7034186179359362*i+1.7076146940746117*o};return a!==void 0&&(l.alpha=a),l},S0=bhe,xhe=e=>Eu(S0(e)),fh=xhe;function Lx(e){let a=1.170873786407767;return .5*(a*e-.206+Math.sqrt((a*e-.206)*(a*e-.206)+4*.03*a*e))}function j1(e){return(e*e+.206*e)/(1.170873786407767*(e+.03))}function _he(e,r){let t,a,n,i,o,l,s,u;-1.88170328*e-.80936493*r>1?(t=1.19086277,a=1.76576728,n=.59662641,i=.75515197,o=.56771245,l=4.0767416621,s=-3.3077115913,u=.2309699292):1.81444104*e-1.19445276*r>1?(t=.73956515,a=-.45954404,n=.08285427,i=.1254107,o=.14503204,l=-1.2684380046,s=2.6097574011,u=-.3413193965):(t=1.35733652,a=-.00915799,n=-1.1513021,i=-.50559606,o=.00692167,l=-.0041960863,s=-.7034186147,u=1.707614701);let f=t+a*e+n*r+i*e*e+o*e*r,c=.3963377774*e+.2158037573*r,v=-.1055613458*e-.0638541728*r,d=-.0894841775*e-1.291485548*r;{let p=1+f*c,y=1+f*v,m=1+f*d,b=p*p*p,T=y*y*y,w=m*m*m,x=3*c*p*p,_=3*v*y*y,k=3*d*m*m,A=6*c*c*p,q=6*v*v*y,C=6*d*d*m,E=l*b+s*T+u*w,P=l*x+s*_+u*k,R=l*A+s*q+u*C;f=f-E*P/(P*P-.5*E*R)}return f}function l_(e,r){let t=_he(e,r),a=S0({l:1,a:t*e,b:t*r}),n=Math.cbrt(1/Math.max(a.r,a.g,a.b)),i=n*t;return[n,i]}function whe(e,r,t,a,n,i=null){i||(i=l_(e,r));let o;if((t-n)*i[1]-(i[0]-n)*a<=0)o=i[1]*n/(a*i[0]+i[1]*(n-t));else{o=i[1]*(n-1)/(a*(i[0]-1)+i[1]*(n-t));{let l=t-n,s=a,u=.3963377774*e+.2158037573*r,f=-.1055613458*e-.0638541728*r,c=-.0894841775*e-1.291485548*r,v=l+s*u,d=l+s*f,p=l+s*c;{let y=n*(1-o)+o*t,m=o*a,b=y+m*u,T=y+m*f,w=y+m*c,x=b*b*b,_=T*T*T,k=w*w*w,A=3*v*b*b,q=3*d*T*T,C=3*p*w*w,E=6*v*v*b,P=6*d*d*T,R=6*p*p*w,N=4.0767416621*x-3.3077115913*_+.2309699292*k-1,I=4.0767416621*A-3.3077115913*q+.2309699292*C,O=4.0767416621*E-3.3077115913*P+.2309699292*R,U=I/(I*I-.5*N*O),Y=-N*U,G=-1.2684380046*x+2.6097574011*_-.3413193965*k-1,V=-1.2684380046*A+2.6097574011*q-.3413193965*C,W=-1.2684380046*E+2.6097574011*P-.3413193965*R,j=V/(V*V-.5*G*W),J=-G*j,te=-.0041960863*x-.7034186147*_+1.707614701*k-1,ae=-.0041960863*A-.7034186147*q+1.707614701*C,se=-.0041960863*E-.7034186147*P+1.707614701*R,$=ae/(ae*ae-.5*te*se),fe=-te*$;Y=U>=0?Y:1e6,J=j>=0?J:1e6,fe=$>=0?fe:1e6,o+=Math.min(Y,Math.min(J,fe))}}}return o}function s_(e,r,t=null){t||(t=l_(e,r));let a=t[0],n=t[1];return[n/a,n/(1-a)]}function Jq(e,r,t){let a=l_(r,t),n=whe(r,t,e,1,e,a),i=s_(r,t,a),o=.11516993+1/(7.4477897+4.1590124*t+r*(-2.19557347+1.75198401*t+r*(-2.13704948-10.02301043*t+r*(-4.24894561+5.38770819*t+4.69891013*r)))),l=.11239642+1/(1.6132032-.68124379*t+r*(.40370612+.90148123*t+r*(-.27087943+.6122399*t+r*(.00299215-.45399568*t-.14661872*r)))),s=n/Math.min(e*i[0],(1-e)*i[1]),u=e*o,f=(1-e)*l,c=.9*s*Math.sqrt(Math.sqrt(1/(1/(u*u*u*u)+1/(f*f*f*f))));return u=e*.4,f=(1-e)*.8,[Math.sqrt(1/(1/(u*u)+1/(f*f))),c,n]}function Cx(e){let r=e.l!==void 0?e.l:0,t=e.a!==void 0?e.a:0,a=e.b!==void 0?e.b:0,n={mode:\"okhsl\",l:Lx(r)};e.alpha!==void 0&&(n.alpha=e.alpha);let i=Math.sqrt(t*t+a*a);if(!i)return n.s=0,n;let[o,l,s]=Jq(r,t/i,a/i),u;if(i<l){let f=0,c=.8*o,v=1-c/l;u=(i-f)/(c+v*(i-f))*.8}else{let f=l,c=.2*l*l*1.25*1.25/o,v=1-c/(s-l);u=.8+.2*((i-f)/(c+v*(i-f)))}return u&&(n.s=u,n.h=fn(Math.atan2(a,t)*180/Math.PI)),n}function Dx(e){let r=e.h!==void 0?e.h:0,t=e.s!==void 0?e.s:0,a=e.l!==void 0?e.l:0,n={mode:\"oklab\",l:j1(a)};if(e.alpha!==void 0&&(n.alpha=e.alpha),!t||a===1)return n.a=n.b=0,n;let i=Math.cos(r/180*Math.PI),o=Math.sin(r/180*Math.PI),[l,s,u]=Jq(n.l,i,o),f,c,v,d;t<.8?(f=1.25*t,c=0,v=.8*l,d=1-v/s):(f=5*(t-.8),c=s,v=.2*s*s*1.25*1.25/l,d=1-v/(u-s));let p=c+f*v/(1-d*f);return n.a=p*i,n.b=p*o,n}var The=Ut(wt({},Wx),{mode:\"okhsl\",channels:[\"h\",\"s\",\"l\",\"alpha\"],parse:[\"--okhsl\"],serialize:\"--okhsl\",fromMode:{oklab:Cx,rgb:e=>Cx(uh(e))},toMode:{oklab:Dx,rgb:e=>fh(Dx(e))}}),Kq=The;function Ex(e){let r=e.l!==void 0?e.l:0,t=e.a!==void 0?e.a:0,a=e.b!==void 0?e.b:0,n=Math.sqrt(t*t+a*a),i=n?t/n:1,o=n?a/n:1,[l,s]=s_(i,o),u=.5,f=1-u/l,c=s/(n+r*s),v=c*r,d=c*n,p=j1(v),y=d*p/v,m=S0({l:p,a:i*y,b:o*y}),b=Math.cbrt(1/Math.max(m.r,m.g,m.b,0));r=r/b,n=n/b*Lx(r)/r,r=Lx(r);let T={mode:\"okhsv\",s:n?(u+s)*d/(s*u+s*f*d):0,v:r?r/v:0};return T.s&&(T.h=fn(Math.atan2(a,t)*180/Math.PI)),e.alpha!==void 0&&(T.alpha=e.alpha),T}function Px(e){let r={mode:\"oklab\"};e.alpha!==void 0&&(r.alpha=e.alpha);let t=e.h!==void 0?e.h:0,a=e.s!==void 0?e.s:0,n=e.v!==void 0?e.v:0,i=Math.cos(t/180*Math.PI),o=Math.sin(t/180*Math.PI),[l,s]=s_(i,o),u=.5,f=1-u/l,c=1-a*u/(u+s-s*f*a),v=a*s*u/(u+s-s*f*a),d=j1(c),p=v*d/c,y=S0({l:d,a:i*p,b:o*p}),m=Math.cbrt(1/Math.max(y.r,y.g,y.b,0)),b=j1(n*c),T=v*b/c;return r.l=b*m,r.a=T*i*m,r.b=T*o*m,r}var Ahe=Ut(wt({},$x),{mode:\"okhsv\",channels:[\"h\",\"s\",\"v\",\"alpha\"],parse:[\"--okhsv\"],serialize:\"--okhsv\",fromMode:{oklab:Ex,rgb:e=>Ex(uh(e))},toMode:{oklab:Px,rgb:e=>fh(Px(e))}}),Qq=Ahe;function Mhe(e,r){if(!r||r[0]!==\"oklab\")return;let t={mode:\"oklab\"},[,a,n,i,o]=r;if(!(a.type===dr.Hue||n.type===dr.Hue||i.type===dr.Hue))return a.type!==dr.None&&(t.l=Math.min(Math.max(0,a.type===dr.Number?a.value:a.value/100),1)),n.type!==dr.None&&(t.a=n.type===dr.Number?n.value:n.value*.4/100),i.type!==dr.None&&(t.b=i.type===dr.Number?i.value:i.value*.4/100),o.type!==dr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===dr.Number?o.value:o.value/100))),t}var eL=Mhe,khe=Ut(wt({},rp),{mode:\"oklab\",toMode:{lrgb:S0,rgb:fh},fromMode:{lrgb:o_,rgb:uh},ranges:{l:[0,1],a:[-.4,.4],b:[-.4,.4]},parse:[eL],serialize:e=>`oklab(${e.l!==void 0?e.l:\"none\"} ${e.a!==void 0?e.a:\"none\"} ${e.b!==void 0?e.b:\"none\"}${e.alpha<1?` / ${e.alpha}`:\"\"})`}),rL=khe;function She(e,r){if(!r||r[0]!==\"oklch\")return;let t={mode:\"oklch\"},[,a,n,i,o]=r;if(a.type!==dr.None){if(a.type===dr.Hue)return;t.l=Math.min(Math.max(0,a.type===dr.Number?a.value:a.value/100),1)}if(n.type!==dr.None&&(t.c=Math.max(0,n.type===dr.Number?n.value:n.value*.4/100)),i.type!==dr.None){if(i.type===dr.Percentage)return;t.h=i.value}return o.type!==dr.None&&(t.alpha=Math.min(1,Math.max(0,o.type===dr.Number?o.value:o.value/100))),t}var tL=She,qhe=Ut(wt({},tp),{mode:\"oklch\",toMode:{oklab:e=>Dl(e,\"oklab\"),rgb:e=>fh(Dl(e,\"oklab\"))},fromMode:{rgb:e=>Cl(uh(e),\"oklch\"),oklab:e=>Cl(e,\"oklch\")},parse:[tL],serialize:e=>`oklch(${e.l!==void 0?e.l:\"none\"} ${e.c!==void 0?e.c:\"none\"} ${e.h!==void 0?e.h:\"none\"}${e.alpha<1?` / ${e.alpha}`:\"\"})`,ranges:{l:[0,1],c:[0,.4],h:[0,360]}}),aL=qhe,Lhe=e=>{let{r,g:t,b:a,alpha:n}=Du(e),i={mode:\"xyz65\",x:.486570948648216*r+.265667693169093*t+.1982172852343625*a,y:.2289745640697487*r+.6917385218365062*t+.079286914093745*a,z:0*r+.0451133818589026*t+1.043944368900976*a};return n!==void 0&&(i.alpha=n),i},Rx=Lhe,Che=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=Eu({r:e*2.4934969119414263-r*.9313836179191242-.402710784450717*t,g:e*-.8294889695615749+r*1.7626640603183465+.0236246858419436*t,b:e*.0358458302437845-r*.0761723892680418+.9568845240076871*t},\"p3\");return a!==void 0&&(n.alpha=a),n},Fx=Che,Dhe=Ut(wt({},Cu),{mode:\"p3\",parse:[\"display-p3\"],serialize:\"display-p3\",fromMode:{rgb:e=>Fx(vs(e)),xyz65:Fx},toMode:{rgb:e=>hs(Rx(e)),xyz65:Rx}}),nL=Dhe,dx=e=>{let r=Math.abs(e);return r>=1/512?Math.sign(e)*Math.pow(r,1/1.8):16*e},Ehe=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:\"prophoto\",r:dx(e*1.3457868816471585-r*.2555720873797946-.0511018649755453*t),g:dx(e*-.5446307051249019+r*1.5082477428451466+.0205274474364214*t),b:dx(e*0+r*0+1.2119675456389452*t)};return a!==void 0&&(n.alpha=a),n},zx=Ehe,px=(e=0)=>{let r=Math.abs(e);return r>=16/512?Math.sign(e)*Math.pow(r,1.8):e/16},Phe=e=>{let r=px(e.r),t=px(e.g),a=px(e.b),n={mode:\"xyz50\",x:.7977666449006423*r+.1351812974005331*t+.0313477341283922*a,y:.2880748288194013*r+.7118352342418731*t+899369387256e-16*a,z:0*r+0*t+.8251046025104602*a};return e.alpha!==void 0&&(n.alpha=e.alpha),n},Nx=Phe,Rhe=Ut(wt({},Cu),{mode:\"prophoto\",parse:[\"prophoto-rgb\"],serialize:\"prophoto-rgb\",fromMode:{xyz50:zx,rgb:e=>zx(k0(e))},toMode:{xyz50:Nx,rgb:e=>M0(Nx(e))}}),iL=Rhe,KS=1.09929682680944,Fhe=.018053968510807,mx=e=>{let r=Math.abs(e);return r>Fhe?(Math.sign(e)||1)*(KS*Math.pow(r,.45)-(KS-1)):4.5*e},zhe=({x:e,y:r,z:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:\"rec2020\",r:mx(e*1.7166511879712683-r*.3556707837763925-.2533662813736599*t),g:mx(e*-.6666843518324893+r*1.6164812366349395+.0157685458139111*t),b:mx(e*.0176398574453108-r*.0427706132578085+.9421031212354739*t)};return a!==void 0&&(n.alpha=a),n},Ix=zhe,QS=1.09929682680944,Nhe=.018053968510807,yx=(e=0)=>{let r=Math.abs(e);return r<Nhe*4.5?e/4.5:(Math.sign(e)||1)*Math.pow((r+QS-1)/QS,1/.45)},Ihe=e=>{let r=yx(e.r),t=yx(e.g),a=yx(e.b),n={mode:\"xyz65\",x:.6369580483012911*r+.1446169035862083*t+.1688809751641721*a,y:.262700212011267*r+.6779980715188708*t+.059301716469862*a,z:0*r+.0280726930490874*t+1.0609850577107909*a};return e.alpha!==void 0&&(n.alpha=e.alpha),n},Bx=Ihe,Bhe=Ut(wt({},Cu),{mode:\"rec2020\",fromMode:{xyz65:Ix,rgb:e=>Ix(vs(e))},toMode:{xyz65:Bx,rgb:e=>hs(Bx(e))},parse:[\"rec2020\"],serialize:\"rec2020\"}),oL=Bhe,qu=.0037930732552754493,lL=Math.cbrt(qu),gx=e=>Math.cbrt(e)-lL,Ohe=e=>{let{r,g:t,b:a,alpha:n}=Du(e),i=gx(.3*r+.622*t+.078*a+qu),o=gx(.23*r+.692*t+.078*a+qu),l=gx(.2434226892454782*r+.2047674442449682*t+.5518098665095535*a+qu),s={mode:\"xyb\",x:(i-o)/2,y:(i+o)/2,b:l-(i+o)/2};return n!==void 0&&(s.alpha=n),s},sL=Ohe,bx=e=>Math.pow(e+lL,3),Hhe=({x:e,y:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n=bx(e+r)-qu,i=bx(r-e)-qu,o=bx(t+r)-qu,l=Eu({r:11.031566904639861*n-9.866943908131562*i-.16462299650829934*o,g:-3.2541473810744237*n+4.418770377582723*i-.16462299650829934*o,b:-3.6588512867136815*n+2.7129230459360922*i+1.9459282407775895*o});return a!==void 0&&(l.alpha=a),l},uL=Hhe,Uhe={mode:\"xyb\",channels:[\"x\",\"y\",\"b\",\"alpha\"],parse:[\"--xyb\"],serialize:\"--xyb\",toMode:{rgb:uL},fromMode:{rgb:sL},ranges:{x:[-.0154,.0281],y:[0,.8453],b:[-.2778,.388]},interpolate:{x:_r,y:_r,b:_r,alpha:{use:_r,fixup:Ra}}},fL=Uhe,Ghe={mode:\"xyz50\",parse:[\"xyz-d50\"],serialize:\"xyz-d50\",toMode:{rgb:M0,lab:ep},fromMode:{rgb:k0,lab:Q1},channels:[\"x\",\"y\",\"z\",\"alpha\"],ranges:{x:[0,.964],y:[0,.999],z:[0,.825]},interpolate:{x:_r,y:_r,z:_r,alpha:{use:_r,fixup:Ra}}},cL=Ghe,Yhe=e=>{let{x:r,y:t,z:a,alpha:n}=e;r===void 0&&(r=0),t===void 0&&(t=0),a===void 0&&(a=0);let i={mode:\"xyz50\",x:1.0479298208405488*r+.0229467933410191*t-.0501922295431356*a,y:.0296278156881593*r+.990434484573249*t-.0170738250293851*a,z:-.0092430581525912*r+.0150551448965779*t+.7518742899580008*a};return n!==void 0&&(i.alpha=n),i},vL=Yhe,Vhe=e=>{let{x:r,y:t,z:a,alpha:n}=e;r===void 0&&(r=0),t===void 0&&(t=0),a===void 0&&(a=0);let i={mode:\"xyz65\",x:.9554734527042182*r-.0230985368742614*t+.0632593086610217*a,y:-.0283697069632081*r+1.0099954580058226*t+.021041398966943*a,z:.0123140016883199*r-.0205076964334779*t+1.3303659366080753*a};return n!==void 0&&(i.alpha=n),i},hL=Vhe,jhe={mode:\"xyz65\",toMode:{rgb:hs,xyz50:vL},fromMode:{rgb:vs,xyz50:hL},ranges:{x:[0,.95],y:[0,1],z:[0,1.088]},channels:[\"x\",\"y\",\"z\",\"alpha\"],parse:[\"xyz\",\"xyz-d65\"],serialize:\"xyz-d65\",interpolate:{x:_r,y:_r,z:_r,alpha:{use:_r,fixup:Ra}}},dL=jhe,Whe=({r:e,g:r,b:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:\"yiq\",y:.29889531*e+.58662247*r+.11448223*t,i:.59597799*e-.2741761*r-.32180189*t,q:.21147017*e-.52261711*r+.31114694*t};return a!==void 0&&(n.alpha=a),n},pL=Whe,Xhe=({y:e,i:r,q:t,alpha:a})=>{e===void 0&&(e=0),r===void 0&&(r=0),t===void 0&&(t=0);let n={mode:\"rgb\",r:e+.95608445*r+.6208885*t,g:e-.27137664*r-.6486059*t,b:e-1.10561724*r+1.70250126*t};return a!==void 0&&(n.alpha=a),n},mL=Xhe,Zhe={mode:\"yiq\",toMode:{rgb:mL},fromMode:{rgb:pL},channels:[\"y\",\"i\",\"q\",\"alpha\"],parse:[\"--yiq\"],serialize:\"--yiq\",ranges:{i:[-.595,.595],q:[-.522,.522]},interpolate:{y:_r,i:_r,q:_r,alpha:{use:_r,fixup:Ra}}},yL=Zhe,$he=(e,r)=>Math.round(e*(r=Math.pow(10,r)))/r,Jhe=(e=4)=>r=>typeof r==\"number\"?$he(r,e):r,gL=Jhe,rh=gL(2),ah=e=>Math.max(0,Math.min(1,e||0)),Lu=e=>Math.round(ah(e)*255),u_=zt(\"rgb\"),Khe=zt(\"hsl\"),f_=e=>{if(e===void 0)return;let r=Lu(e.r),t=Lu(e.g),a=Lu(e.b);return\"#\"+(1<<24|r<<16|t<<8|a).toString(16).slice(1)},bL=e=>{if(e===void 0)return;let r=Lu(e.alpha!==void 0?e.alpha:1);return f_(e)+(256|r).toString(16).slice(1)},xL=e=>{if(e===void 0)return;let r=Lu(e.r),t=Lu(e.g),a=Lu(e.b);return e.alpha===void 0||e.alpha===1?`rgb(${r}, ${t}, ${a})`:`rgba(${r}, ${t}, ${a}, ${rh(ah(e.alpha))})`},_L=e=>{if(e===void 0)return;let r=rh(e.h||0),t=rh(ah(e.s)*100)+\"%\",a=rh(ah(e.l)*100)+\"%\";return e.alpha===void 0||e.alpha===1?`hsl(${r}, ${t}, ${a})`:`hsla(${r}, ${t}, ${a}, ${rh(ah(e.alpha))})`},Qhe=e=>{let r=xo(e);if(!r)return;let t=_n(r.mode);if(!t.serialize||typeof t.serialize==\"string\"){let a=`color(${t.serialize||`--${r.mode}`} `;return t.channels.forEach((n,i)=>{n!==\"alpha\"&&(a+=(i?\" \":\"\")+(r[n]!==void 0?r[n]:\"none\"))}),r.alpha!==void 0&&r.alpha<1&&(a+=` / ${r.alpha}`),a+\")\"}if(typeof t.serialize==\"function\")return t.serialize(r)},ede=e=>f_(u_(e)),rde=e=>bL(u_(e)),tde=e=>xL(u_(e)),ade=e=>_L(Khe(e)),nde={normal:(e,r)=>r,multiply:(e,r)=>e*r,screen:(e,r)=>e+r-e*r,\"hard-light\":(e,r)=>r<.5?e*2*r:2*r*(1-e)-1,overlay:(e,r)=>e<.5?r*2*e:2*e*(1-r)-1,darken:(e,r)=>Math.min(e,r),lighten:(e,r)=>Math.max(e,r),\"color-dodge\":(e,r)=>e===0?0:r===1?1:Math.min(1,e/(1-r)),\"color-burn\":(e,r)=>e===1?1:r===0?0:1-Math.min(1,(1-e)/r),\"soft-light\":(e,r)=>r<.5?e-(1-2*r)*e*(1-e):e+(2*r-1)*((e<.25?((16*e-12)*e+4)*e:Math.sqrt(e))-e),difference:(e,r)=>Math.abs(e-r),exclusion:(e,r)=>e+r-2*e*r},ide=(e,r=\"normal\",t=\"rgb\")=>{let a=typeof r==\"function\"?r:nde[r],n=zt(t),i=_n(t).channels;return e.map(l=>{let s=n(l);return s.alpha===void 0&&(s.alpha=1),s}).reduce((l,s)=>{if(l===void 0)return s;let u=s.alpha+l.alpha*(1-s.alpha);return i.reduce((f,c)=>(c!==\"alpha\"&&(u===0?f[c]=0:(f[c]=s.alpha*(1-l.alpha)*s[c]+s.alpha*l.alpha*a(l[c],s[c])+(1-s.alpha)*l.alpha*l[c],f[c]=Math.max(0,Math.min(1,f[c]/u)))),f),{mode:t,alpha:u})})},ode=ide,lde=([e,r])=>e+Math.random()*(r-e),sde=e=>Object.keys(e).reduce((r,t)=>{let a=e[t];return r[t]=Array.isArray(a)?a:[a,a],r},{}),ude=(e=\"rgb\",r={})=>{let t=_n(e),a=sde(r);return t.channels.reduce((n,i)=>((a.alpha||i!==\"alpha\")&&(n[i]=lde(a[i]||t.ranges[i])),n),{mode:e})},fde=ude,ch=(e,r=\"rgb\",t=!1)=>{let a=r?_n(r).channels:null,n=r?zt(r):xo;return i=>{let o=n(i);if(!o)return;let l=(a||_n(o.mode).channels).reduce((u,f)=>{let c=e(o[f],f,o,r);return c!==void 0&&!isNaN(c)&&(u[f]=c),u},{mode:o.mode});if(!t)return l;let s=xo(i);return s&&s.mode!==l.mode?zt(s.mode)(l):l}},wL=(e,r,t)=>r!==\"alpha\"?(e||0)*(t.alpha!==void 0?t.alpha:1):e,TL=(e,r,t)=>r!==\"alpha\"&&t.alpha!==0?(e||0)/(t.alpha!==void 0?t.alpha:1):e,c_=(e=1,r=0)=>(t,a)=>a!==\"alpha\"?t*e+r:t,cde=(e=1,r=1,t=0)=>(a,n)=>n!==\"alpha\"?e*Math.pow(a,r)+t:a,vde=e=>{e[0]===void 0&&(e[0]=0),e[e.length-1]===void 0&&(e[e.length-1]=1);let r=1,t,a,n,i;for(;r<e.length;){if(e[r]===void 0){for(a=r,n=e[r-1],t=r;e[t]===void 0;)t++;for(i=(e[t]-n)/(t-r+1);r<t;)e[r]=n+(r+1-a)*i,r++}else e[r]<e[r-1]&&(e[r]=e[r-1]);r++}return e},hde=vde,dde=(e=.5)=>r=>e<=0?1:e>=1?0:Math.pow(r,Math.log(.5)/Math.log(e)),AL=dde,z1=e=>typeof e==\"function\",ku=e=>e&&typeof e==\"object\",eq=e=>typeof e==\"number\",ML=(e,r=\"rgb\",t,a)=>{let n=_n(r),i=zt(r),o=[],l=[],s={};e.forEach(v=>{Array.isArray(v)?(o.push(i(v[0])),l.push(v[1])):eq(v)||z1(v)?s[l.length]=v:(o.push(i(v)),l.push(void 0))}),hde(l);let u=n.channels.reduce((v,d)=>{let p;return ku(t)&&ku(t[d])&&t[d].fixup?p=t[d].fixup:ku(n.interpolate[d])&&n.interpolate[d].fixup?p=n.interpolate[d].fixup:p=y=>y,v[d]=p(o.map(y=>y[d])),v},{});if(a){let v=o.map((d,p)=>n.channels.reduce((y,m)=>(y[m]=u[m][p],y),{mode:r}));u=n.channels.reduce((d,p)=>(d[p]=v.map(y=>{let m=a(y[p],p,y,r);return isNaN(m)?void 0:m}),d),{})}let f=n.channels.reduce((v,d)=>{let p;return z1(t)?p=t:ku(t)&&z1(t[d])?p=t[d]:ku(t)&&ku(t[d])&&t[d].use?p=t[d].use:z1(n.interpolate[d])?p=n.interpolate[d]:ku(n.interpolate[d])&&(p=n.interpolate[d].use),v[d]=p(u[d]),v},{}),c=o.length-1;return v=>{if(v=Math.min(Math.max(0,v),1),v<=l[0])return o[0];if(v>l[c])return o[c];let d=0;for(;l[d]<v;)d++;let p=l[d-1],y=l[d]-p,m=(v-p)/y,b=s[d]||s[0];b!==void 0&&(eq(b)&&(b=AL((b-p)/y)),m=b(m));let T=(d-1+m)/c;return n.channels.reduce((w,x)=>{let _=f[x](T);return _!==void 0&&(w[x]=_),w},{mode:r})}},pde=(e,r=\"rgb\",t)=>ML(e,r,t),kL=(e,r)=>(t,a=\"rgb\",n)=>{let i=r?ch(r,a):void 0,o=ML(t,a,n,e);return i?l=>i(o(l)):o},mde=kL(wL,TL),N1=(e,r)=>(e+r)%r,SL=(e,r,t,a,n)=>{let i=n*n,o=i*n;return((1-3*n+3*i-o)*e+(4-6*i+3*o)*r+(1+3*n+3*i-3*o)*t+o*a)/6},qL=e=>r=>{let t=e.length-1,a=r>=1?t-1:Math.max(0,Math.floor(r*t));return SL(a>0?e[a-1]:2*e[a]-e[a+1],e[a],e[a+1],a<t-1?e[a+2]:2*e[a+1]-e[a],(r-a/t)*t)},LL=e=>r=>{let t=e.length-1,a=Math.floor(r*t);return SL(e[N1(a-1,e.length)],e[N1(a,e.length)],e[N1(a+1,e.length)],e[N1(a+2,e.length)],(r-a/t)*t)},CL=e=>{let r,t=e.length-1,a=new Array(t),n=new Array(t),i=new Array(t);for(a[1]=1/4,n[1]=(6*e[1]-e[0])/4,r=2;r<t;++r)a[r]=1/(4-a[r-1]),n[r]=(6*e[r]-(r==t-1?e[t]:0)-n[r-1])*a[r];for(i[0]=e[0],i[t]=e[t],t-1>0&&(i[t-1]=n[t-1]),r=t-2;r>0;--r)i[r]=n[r]-a[r]*i[r+1];return i},yde=e=>qL(CL(e)),gde=e=>LL(CL(e)),x0=Math.sign,Ox=Math.min,si=Math.abs,v_=e=>{let r=e.length-1,t=[],a=[],n=[];for(let i=0;i<r;i++)t.push((e[i+1]-e[i])*r),a.push(i>0?.5*(e[i+1]-e[i-1])*r:void 0),n.push(i>0?(x0(t[i-1])+x0(t[i]))*Ox(si(t[i-1]),si(t[i]),.5*si(a[i])):void 0);return[t,a,n]},h_=(e,r,t)=>{let a=e.length-1,n=a*a;return i=>{let o;i>=1?o=a-1:o=Math.max(0,Math.floor(i*a));let l=i-o/a,s=l*l,u=s*l;return(r[o]+r[o+1]-2*t[o])*n*u+(3*t[o]-2*r[o]-r[o+1])*a*s+r[o]*l+e[o]}},bde=e=>{if(e.length<3)return _r(e);let r=e.length-1,[t,,a]=v_(e);return a[0]=t[0],a[r]=t[r-1],h_(e,a,t)},xde=e=>{if(e.length<3)return _r(e);let r=e.length-1,[t,a,n]=v_(e);return a[0]=(e[1]*2-e[0]*1.5-e[2]*.5)*r,a[r]=(e[r]*1.5-e[r-1]*2+e[r-2]*.5)*r,n[0]=a[0]*t[0]<=0?0:si(a[0])>2*si(t[0])?2*t[0]:a[0],n[r]=a[r]*t[r-1]<=0?0:si(a[r])>2*si(t[r-1])?2*t[r-1]:a[r],h_(e,n,t)},_de=e=>{let r=e.length-1,[t,a,n]=v_(e);a[0]=.5*(e[1]-e[r])*r,a[r]=.5*(e[0]-e[r-1])*r;let i=(e[0]-e[r])*r,o=i;return n[0]=(x0(i)+x0(t[0]))*Ox(si(i),si(t[0]),.5*si(a[0])),n[r]=(x0(t[r-1])+x0(o))*Ox(si(t[r-1]),si(o),.5*si(a[r])),h_(e,n,t)},wde=(e=1)=>e===1?r=>r:r=>Math.pow(r,e),DL=wde,Tde=(e=2,r=1)=>{let t=DL(r);if(e<2)return e<1?[]:[t(.5)];let a=[];for(let n=0;n<e;n++)a.push(t(n/(e-1)));return a},Ade=Tde,EL=zt(\"rgb\"),PL=e=>{let r={mode:e.mode,r:Math.max(0,Math.min(e.r!==void 0?e.r:0,1)),g:Math.max(0,Math.min(e.g!==void 0?e.g:0,1)),b:Math.max(0,Math.min(e.b!==void 0?e.b:0,1))};return e.alpha!==void 0&&(r.alpha=e.alpha),r},RL=e=>PL(EL(e)),FL=e=>e!==void 0&&(e.r===void 0||e.r>=0&&e.r<=1)&&(e.g===void 0||e.g>=0&&e.g<=1)&&(e.b===void 0||e.b>=0&&e.b<=1);function d_(e){return FL(EL(e))}function ap(e=\"rgb\"){let{gamut:r}=_n(e);if(!r)return a=>!0;let t=zt(typeof r==\"string\"?r:e);return a=>FL(t(a))}function Mde(e){return e=xo(e),e===void 0||d_(e)?e:zt(e.mode)(RL(e))}function p_(e=\"rgb\"){let{gamut:r}=_n(e);if(!r)return i=>xo(i);let t=typeof r==\"string\"?r:e,a=zt(t),n=ap(t);return i=>{let o=xo(i);if(!o)return;let l=a(o);if(n(l))return o;let s=PL(l);return o.mode===s.mode?s:zt(o.mode)(s)}}function kde(e,r=\"lch\",t=\"rgb\"){e=xo(e);let a=t===\"rgb\"?d_:ap(t),n=t===\"rgb\"?RL:p_(t);if(e===void 0||a(e))return e;let i=zt(e.mode);e=zt(r)(e);let o=Ut(wt({},e),{c:0});if(!a(o))return i(n(o));let l=0,s=e.c!==void 0?e.c:0,u=_n(r).ranges.c,f=(u[1]-u[0])/Math.pow(2,13),c=o.c;for(;s-l>f;)o.c=l+(s-l)*.5,a(o)?(c=o.c,l=o.c):s=o.c;return i(a(o)?o:Ut(wt({},o),{c}))}function Sde(e=\"rgb\",r=\"oklch\",t=A0(\"oklch\"),a=.02){let n=zt(e),i=_n(e);if(!i.gamut)return f=>n(f);let o=ap(e),l=p_(e),s=zt(r),{ranges:u}=_n(r);if(!u.l||!u.c)throw new Error(\"LCH-like space expected\");return f=>{if(f=xo(f),f===void 0)return;let c=wt({},s(f));if(c.l===void 0&&(c.l=0),c.c===void 0&&(c.c=0),c.l>=u.l[1]){let m=Ut(wt({},i.white),{mode:e});return f.alpha!==void 0&&(m.alpha=f.alpha),m}if(c.l<=u.l[0]){let m=Ut(wt({},i.black),{mode:e});return f.alpha!==void 0&&(m.alpha=f.alpha),m}if(o(c))return n(c);let v=0,d=c.c,p=(u.c[1]-u.c[0])/4e3,y=l(c);for(;d-v>p;)c.c=(v+d)*.5,y=l(c),o(c)||t&&a>0&&t(c,y)<=a?v=c.c:d=c.c;return n(o(c)?c:y)}}var qde=(e,r=A0(),t=a=>a)=>{let a=e.map((n,i)=>({color:t(n),i}));return(n,i=1,o=1/0)=>(isFinite(i)&&(i=Math.max(1,Math.min(i,a.length-1))),a.forEach(l=>{l.d=r(n,l.color)}),a.sort((l,s)=>l.d-s.d).slice(0,i).filter(l=>l.d<o).map(l=>e[l.i]))},Lde=qde,m_=e=>Math.max(e,0),y_=e=>Math.max(Math.min(e,1),0),Cde=(e,r,t)=>e===void 0||r===void 0?void 0:e+t*(r-e),Dde=e=>{let r=1-y_(e);return[.393+.607*r,.769-.769*r,.189-.189*r,0,.349-.349*r,.686+.314*r,.168-.168*r,0,.272-.272*r,.534-.534*r,.131+.869*r,0,0,0,0,1]},Ede=e=>{let r=m_(e);return[.213+.787*r,.715-.715*r,.072-.072*r,0,.213-.213*r,.715+.285*r,.072-.072*r,0,.213-.213*r,.715-.715*r,.072+.928*r,0,0,0,0,1]},Pde=e=>{let r=1-y_(e);return[.2126+.7874*r,.7152-.7152*r,.0722-.0722*r,0,.2126-.2126*r,.7152+.2848*r,.0722-.0722*r,0,.2126-.2126*r,.7152-.7152*r,.0722+.9278*r,0,0,0,0,1]},Rde=e=>{let r=Math.PI*e/180,t=Math.cos(r),a=Math.sin(r);return[.213+t*.787-a*.213,.715-t*.715-a*.715,.072-t*.072+a*.928,0,.213-t*.213+a*.143,.715+t*.285+a*.14,.072-t*.072-a*.283,0,.213-t*.213-a*.787,.715-t*.715+a*.715,.072+t*.928+a*.072,0,0,0,0,1]},np=(e,r,t=!1)=>{let a=zt(r),n=_n(r).channels;return i=>{let o=a(i);if(!o)return;let l={mode:r},s,u=n.length;for(let c=0;c<e.length;c++)s=n[Math.floor(c/u)],o[s]!==void 0&&(l[s]=(l[s]||0)+e[c]*(o[n[c%u]]||0));if(!t)return l;let f=xo(i);return f&&l.mode!==f.mode?zt(f.mode)(l):l}},Fde=(e=1,r=\"rgb\")=>{let t=m_(e);return ch(c_(t),r,!0)},zde=(e=1,r=\"rgb\")=>{let t=m_(e);return ch(c_(t,(1-t)/2),r,!0)},Nde=(e=1,r=\"rgb\")=>np(Dde(e),r,!0),Ide=(e=1,r=\"rgb\")=>np(Ede(e),r,!0),Bde=(e=1,r=\"rgb\")=>np(Pde(e),r,!0),Ode=(e=1,r=\"rgb\")=>{let t=y_(e);return ch((a,n)=>n===\"alpha\"?a:Cde(t,1-t,a),r,!0)},Hde=(e=0,r=\"rgb\")=>np(Rde(e),r,!0),Ude=zt(\"rgb\"),Gde=[[1,0,-0,0,1,0,-0,-0,1],[.856167,.182038,-.038205,.029342,.955115,.015544,-.00288,-.001563,1.004443],[.734766,.334872,-.069637,.05184,.919198,.028963,-.004928,-.004209,1.009137],[.630323,.465641,-.095964,.069181,.890046,.040773,-.006308,-.007724,1.014032],[.539009,.579343,-.118352,.082546,.866121,.051332,-.007136,-.011959,1.019095],[.458064,.679578,-.137642,.092785,.846313,.060902,-.007494,-.016807,1.024301],[.38545,.769005,-.154455,.100526,.829802,.069673,-.007442,-.02219,1.029632],[.319627,.849633,-.169261,.106241,.815969,.07779,-.007025,-.028051,1.035076],[.259411,.923008,-.18242,.110296,.80434,.085364,-.006276,-.034346,1.040622],[.203876,.990338,-.194214,.112975,.794542,.092483,-.005222,-.041043,1.046265],[.152286,1.052583,-.204868,.114503,.786281,.099216,-.003882,-.048116,1.051998]],Yde=[[1,0,-0,0,1,0,-0,-0,1],[.866435,.177704,-.044139,.049567,.939063,.01137,-.003453,.007233,.99622],[.760729,.319078,-.079807,.090568,.889315,.020117,-.006027,.013325,.992702],[.675425,.43385,-.109275,.125303,.847755,.026942,-.00795,.018572,.989378],[.605511,.52856,-.134071,.155318,.812366,.032316,-.009376,.023176,.9862],[.547494,.607765,-.155259,.181692,.781742,.036566,-.01041,.027275,.983136],[.498864,.674741,-.173604,.205199,.754872,.039929,-.011131,.030969,.980162],[.457771,.731899,-.18967,.226409,.731012,.042579,-.011595,.034333,.977261],[.422823,.781057,-.203881,.245752,.709602,.044646,-.011843,.037423,.974421],[.392952,.82361,-.216562,.263559,.69021,.046232,-.01191,.040281,.97163],[.367322,.860646,-.227968,.280085,.672501,.047413,-.01182,.04294,.968881]],Vde=[[1,0,-0,0,1,0,-0,-0,1],[.92667,.092514,-.019184,.021191,.964503,.014306,.008437,.054813,.93675],[.89572,.13333,-.02905,.029997,.9454,.024603,.013027,.104707,.882266],[.905871,.127791,-.033662,.026856,.941251,.031893,.01341,.148296,.838294],[.948035,.08949,-.037526,.014364,.946792,.038844,.010853,.193991,.795156],[1.017277,.027029,-.044306,-.006113,.958479,.047634,.006379,.248708,.744913],[1.104996,-.046633,-.058363,-.032137,.971635,.060503,.001336,.317922,.680742],[1.193214,-.109812,-.083402,-.058496,.97941,.079086,-.002346,.403492,.598854],[1.257728,-.139648,-.118081,-.078003,.975409,.102594,-.003316,.501214,.502102],[1.278864,-.125333,-.153531,-.084748,.957674,.127074,-989e-6,.601151,.399838],[1.255528,-.076749,-.178779,-.078411,.930809,.147602,.004733,.691367,.3039]],g_=(e,r)=>{let t=Math.max(0,Math.min(1,r)),a=Math.round(t/.1),n=Math.round(t%.1),i=e[a];if(n>0&&a<e.length-1){let o=e[a+1];i=i.map((l,s)=>Su(i[s],o[s],n))}return o=>{let l=xo(o);if(l===void 0)return;let{r:s,g:u,b:f}=Ude(l),c={mode:\"rgb\",r:i[0]*s+i[1]*u+i[2]*f,g:i[3]*s+i[4]*u+i[5]*f,b:i[6]*s+i[7]*u+i[8]*f};return l.alpha!==void 0&&(c.alpha=l.alpha),zt(l.mode)(c)}},jde=(e=1)=>g_(Gde,e),Wde=(e=1)=>g_(Yde,e),Xde=(e=1)=>g_(Vde,e),Zde=e=>e*e*(3-2*e),$de=e=>.5-Math.sin(Math.asin(1-2*e)/3),Jde=e=>e*e*e*(e*(e*6-15)+10),Kde=Jde,Qde=e=>(1-Math.cos(e*Math.PI))/2,e2e=Qde;function Hx(e){let r=zt(\"lrgb\")(e);return .2126*r.r+.7152*r.g+.0722*r.b}function r2e(e,r){let t=Hx(e),a=Hx(r);return(Math.max(t,a)+.05)/(Math.min(t,a)+.05)}var t2e=kt(dq),a2e=kt(bq),n2e=kt(Aq),i2e=kt(Mq),o2e=kt(qq),l2e=kt(Wx),s2e=kt($x),u2e=kt(zq),f2e=kt(Bq),c2e=kt(Oq),v2e=kt(Hq),h2e=kt(rp),d2e=kt(Gq),p2e=kt(tp),m2e=kt(Vq),y2e=kt(Xq),g2e=kt(Zq),b2e=kt($q),x2e=kt(Kq),_2e=kt(Qq),w2e=kt(rL),T2e=kt(aL),A2e=kt(nL),M2e=kt(iL),k2e=kt(oL),S2e=kt(Cu),q2e=kt(fL),L2e=kt(cL),C2e=kt(dL),D2e=kt(yL)});var ds=z((aUe,HL)=>{\"use strict\";var IL={staticPlot:{valType:\"boolean\",dflt:!1},typesetMath:{valType:\"boolean\",dflt:!0},plotlyServerURL:{valType:\"string\",dflt:\"https://cloud.plotly.com/newchart\"},editable:{valType:\"boolean\",dflt:!1},edits:{annotationPosition:{valType:\"boolean\",dflt:!1},annotationTail:{valType:\"boolean\",dflt:!1},annotationText:{valType:\"boolean\",dflt:!1},axisTitleText:{valType:\"boolean\",dflt:!1},colorbarPosition:{valType:\"boolean\",dflt:!1},colorbarTitleText:{valType:\"boolean\",dflt:!1},legendPosition:{valType:\"boolean\",dflt:!1},legendText:{valType:\"boolean\",dflt:!1},shapePosition:{valType:\"boolean\",dflt:!1},titleText:{valType:\"boolean\",dflt:!1}},editSelection:{valType:\"boolean\",dflt:!0},autosizable:{valType:\"boolean\",dflt:!1},responsive:{valType:\"boolean\",dflt:!1},fillFrame:{valType:\"boolean\",dflt:!1},frameMargins:{valType:\"number\",dflt:0,min:0,max:.5},scrollZoom:{valType:\"flaglist\",flags:[\"cartesian\",\"gl3d\",\"geo\",\"map\"],extras:[!0,!1],dflt:\"gl3d+geo+map\"},doubleClick:{valType:\"enumerated\",values:[!1,\"reset\",\"autosize\",\"reset+autosize\"],dflt:\"reset+autosize\"},doubleClickDelay:{valType:\"number\",dflt:500,min:0},showAxisDragHandles:{valType:\"boolean\",dflt:!0},showAxisRangeEntryBoxes:{valType:\"boolean\",dflt:!0},showTips:{valType:\"boolean\",dflt:!0},displayNotifier:{valType:\"boolean\",dflt:!0},displayModeBar:{valType:\"enumerated\",values:[\"hover\",!0,!1],dflt:\"hover\"},showSendToCloud:{valType:\"boolean\",dflt:!0},modeBarButtonsToRemove:{valType:\"any\",dflt:[]},modeBarButtonsToAdd:{valType:\"any\",dflt:[]},modeBarButtons:{valType:\"any\",dflt:!1},toImageButtonOptions:{valType:\"any\",dflt:{}},displaylogo:{valType:\"boolean\",dflt:!0},watermark:{valType:\"boolean\",dflt:!1},plotGlPixelRatio:{valType:\"number\",dflt:2,min:1,max:4},setBackground:{valType:\"any\",dflt:\"transparent\"},topojsonURL:{valType:\"string\",noBlank:!0,dflt:\"https://cdn.plot.ly/un/\"},logging:{valType:\"integer\",min:0,max:2,dflt:1},notifyOnLogging:{valType:\"integer\",min:0,max:2,dflt:0},queueLength:{valType:\"integer\",min:0,dflt:0},locale:{valType:\"string\",dflt:\"en-US\"},locales:{valType:\"any\",dflt:{}}},BL={};function OL(e,r){for(var t in e){var a=e[t];a.valType?r[t]=a.dflt:(r[t]||(r[t]={}),OL(a,r[t]))}}OL(IL,BL);HL.exports={configAttributes:IL,dfltConfig:BL}});var x_=z((nUe,UL)=>{\"use strict\";var b_=Er(),E2e=Ir(),vh=[];UL.exports=function(e,r,t){var l;if(((l=t==null?void 0:t._context)==null?void 0:l.displayNotifier)===!1||vh.indexOf(e)!==-1)return;vh.push(e);var a=1e3;E2e(r)?a=r:r===\"long\"&&(a=3e3);var n=b_.select(\"body\").selectAll(\".plotly-notifier\").data([0]);n.enter().append(\"div\").classed(\"plotly-notifier\",!0);var i=n.selectAll(\".notifier-note\").data(vh);function o(s){s.duration(700).style(\"opacity\",0).each(\"end\",function(u){var f=vh.indexOf(u);f!==-1&&vh.splice(f,1),b_.select(this).remove()})}i.enter().append(\"div\").classed(\"notifier-note\",!0).style(\"opacity\",0).each(function(s){var u=b_.select(this);u.append(\"button\").classed(\"notifier-close\",!0).html(\"&times;\").on(\"click\",function(){u.transition().call(o)});for(var f=u.append(\"p\"),c=s.split(/<br\\s*\\/?>/g),v=0;v<c.length;v++)v&&f.append(\"br\"),f.append(\"span\").text(c[v]);r===\"stick\"?u.transition().duration(350).style(\"opacity\",1):u.transition().duration(700).style(\"opacity\",1).transition().delay(a).call(o)})}});var ps=z((iUe,GL)=>{\"use strict\";var q0=ds().dfltConfig,__=x_(),w_=GL.exports={};w_.log=function(){var e;if(q0.logging>1){var r=[\"LOG:\"];for(e=0;e<arguments.length;e++)r.push(arguments[e]);console.trace.apply(console,r)}if(q0.notifyOnLogging>1){var t=[];for(e=0;e<arguments.length;e++)t.push(arguments[e]);__(t.join(\"<br>\"),\"long\")}};w_.warn=function(){var e;if(q0.logging>0){var r=[\"WARN:\"];for(e=0;e<arguments.length;e++)r.push(arguments[e]);console.trace.apply(console,r)}if(q0.notifyOnLogging>0){var t=[];for(e=0;e<arguments.length;e++)t.push(arguments[e]);__(t.join(\"<br>\"),\"stick\")}};w_.error=function(){var e;if(q0.logging>0){var r=[\"ERROR:\"];for(e=0;e<arguments.length;e++)r.push(arguments[e]);console.error.apply(console,r)}if(q0.notifyOnLogging>0){var t=[];for(e=0;e<arguments.length;e++)t.push(arguments[e]);__(t.join(\"<br>\"),\"stick\")}}});var Ei=z(Pu=>{\"use strict\";Pu.defaults=[\"#1f77b4\",\"#ff7f0e\",\"#2ca02c\",\"#d62728\",\"#9467bd\",\"#8c564b\",\"#e377c2\",\"#7f7f7f\",\"#bcbd22\",\"#17becf\"];Pu.defaultLine=\"#444\";Pu.lightLine=\"#eee\";Pu.background=\"#fff\";Pu.borderLine=\"#BEC8D9\";Pu.lightFraction=1e3/11});var Sr=z((lUe,KL)=>{\"use strict\";var{converter:YL,formatHex:P2e,formatRgb:R2e,wcagContrast:F2e,wcagLuminance:z2e}=NL(),{isArrayOrTypedArray:VL}=Vn(),{warn:N2e}=ps(),{background:dh,defaultLine:M_,defaults:I2e,lightLine:B2e}=Ei(),jL=YL(\"rgb\"),O2e=YL(\"hsl\"),WL=e=>{if(typeof e!=\"string\")return;let r=e.trim().toLowerCase();if(!/^[0-9a-f]+$/.test(r))try{return jL(r)}catch(t){return}},wn=e=>e>0?e>1?1:e:0,H2e={mode:\"rgb\",r:0,g:0,b:0,alpha:1},T_=e=>Math.round(e*255e6)/255e6,XL=e=>Ut(wt({},e),{r:T_(e.r),g:T_(e.g),b:T_(e.b)}),ui=e=>R2e(XL(e)),U2e=e=>P2e(XL(e)),G2e=e=>{var r,t,a,n;return typeof e==\"string\"?`\"${e}\"`:VL(e)?`${(t=(r=e.constructor)==null?void 0:r.name)!=null?t:\"Array\"}(${e.length})`:typeof e==\"object\"?(n=(a=e.constructor)==null?void 0:a.name)!=null?n:\"Object\":`${typeof e} ${e}`},Zt=(e,r)=>{var a;let t=WL(e);return t?((a=t.alpha)!=null||(t.alpha=1),t):(!r&&e!=null&&N2e(`Invalid color specifier: ${G2e(e)}. Defaulting to \"#000\"`),H2e)},hh=e=>ui(Ut(wt({},Zt(e)),{alpha:1})),Y2e=e=>e?Zt(e).alpha:0,ZL=e=>VL(e)&&e.length>2&&Number.isFinite(e[0])&&Number.isFinite(e[1])&&Number.isFinite(e[2]),V2e=e=>{let[r,t,a,n]=e,i=Math.max(r,t,a)>1?1/255:1,o=n!=null?n:1;return{mode:\"rgb\",r:r*i,g:t*i,b:a*i,alpha:o>1?o/255:o}},j2e=(e,r)=>{let t=ZL(e)?V2e(e):Zt(e,!0),a=[wn(t.r),wn(t.g),wn(t.b),wn(t.alpha)];return r===\"uint8\"||r===\"uint8_clamped\"?Uint8Array.from(a,n=>Math.round(n*255)):r===\"float32\"?Float32Array.from(a):r===\"float64\"?Float64Array.from(a):a},W2e=(e,r)=>ui(Ut(wt({},Zt(e)),{alpha:wn(r)})),$L=(e,r)=>{let t=Zt(e),a=t.alpha;if(a===1)return ui(t);let n=Zt(r||dh),i=n.alpha,o=(l,s)=>(i===1?s:1-i+s*i)*(1-a)+l*a;return ui({mode:\"rgb\",r:o(t.r,n.r),g:o(t.g,n.g),b:o(t.b,n.b)})},X2e=(e,r,t)=>{let a=Zt(e),n=Zt(r),i=(o,l)=>t*o+(1-t)*l;return ui({mode:\"rgb\",r:i(a.r,n.r),g:i(a.g,n.g),b:i(a.b,n.b)})},A_=(e,r)=>{let t=Zt(e),a=O2e(t)||{mode:\"hsl\",h:0,s:0,l:0};return ui(jL(Ut(wt({},a),{l:wn((a.l*100+r)/100),alpha:t.alpha})))},ip=(e,r)=>F2e(Zt(e),Zt(r)),JL=e=>ip(e,dh)>ip(e,M_),Z2e=ui(Zt(dh)),$2e=ui(Zt(M_)),J2e=(e,r,t)=>(Zt(e).alpha!==1&&(e=$L(e,dh)),JL(e)?r?A_(e,r):Z2e:t?A_(e,-t):$2e),K2e=(e,r)=>{e.style({stroke:hh(r),\"stroke-opacity\":Zt(r).alpha})},Q2e=(e,r)=>{e.style({fill:hh(r),\"fill-opacity\":Zt(r).alpha})},e1e=(e,r)=>!!(e&&r&&hh(e)===hh(r)),r1e=e=>WL(e)!==void 0,t1e=(e,r)=>{r=r===0?0:r||10;let t=Zt(e),a=r/100;return ui(Ut(wt({},t),{r:wn(t.r+a),g:wn(t.g+a),b:wn(t.b+a)}))},a1e=(e,r,t)=>{let a=Zt(e),n=Zt(r),i=t/100,o=n.alpha-a.alpha,l=2*i-1,s=((l*o===-1?l:(l+o)/(1+l*o))+1)/2,u=1-s,f=(c,v)=>u*c+s*v;return ui({mode:\"rgb\",r:f(a.r,n.r),g:f(a.g,n.g),b:f(a.b,n.b),alpha:a.alpha*(1-i)+n.alpha*i})},n1e=(e,r=[\"#000\",\"#fff\"])=>{let t,a=-1/0;for(let n of r){let i=ip(e,n);i>a&&(a=i,t=ui(Zt(n)))}return t},i1e=e=>ui(Zt(e)),o1e=e=>U2e(Zt(e)).toUpperCase(),l1e=e=>{let r=Zt(e);return[wn(r.r)*255,wn(r.g)*255,wn(r.b)*255,wn(r.alpha)]},s1e=([e,r,t,a])=>ui({mode:\"rgb\",r:e/255,g:r/255,b:t/255,alpha:a}),u1e=e=>{let r=Zt(e);return z2e({mode:\"rgb\",r:wn(r.r),g:wn(r.g),b:wn(r.b)})};KL.exports={addOpacity:W2e,adjustLightness:A_,background:dh,brighten:t1e,combine:$L,contrast:J2e,defaultLine:M_,defaults:I2e,equals:e1e,fill:Q2e,hexString:o1e,interpolate:X2e,isChannelArray:ZL,isDark:JL,isValid:r1e,lightLine:B2e,luminosity:u1e,mix:a1e,mostReadable:n1e,normalize:j2e,opacity:Y2e,parse:Zt,rgb:hh,rgbaArray:l1e,rgbaArrayToString:s1e,rgbaString:i1e,stroke:K2e,wcagContrast:ip}});var Ru=z((uUe,rC)=>{\"use strict\";var f1e=Sr(),op={Greys:[[0,\"rgb(0,0,0)\"],[1,\"rgb(255,255,255)\"]],YlGnBu:[[0,\"rgb(8,29,88)\"],[.125,\"rgb(37,52,148)\"],[.25,\"rgb(34,94,168)\"],[.375,\"rgb(29,145,192)\"],[.5,\"rgb(65,182,196)\"],[.625,\"rgb(127,205,187)\"],[.75,\"rgb(199,233,180)\"],[.875,\"rgb(237,248,217)\"],[1,\"rgb(255,255,217)\"]],Greens:[[0,\"rgb(0,68,27)\"],[.125,\"rgb(0,109,44)\"],[.25,\"rgb(35,139,69)\"],[.375,\"rgb(65,171,93)\"],[.5,\"rgb(116,196,118)\"],[.625,\"rgb(161,217,155)\"],[.75,\"rgb(199,233,192)\"],[.875,\"rgb(229,245,224)\"],[1,\"rgb(247,252,245)\"]],YlOrRd:[[0,\"rgb(128,0,38)\"],[.125,\"rgb(189,0,38)\"],[.25,\"rgb(227,26,28)\"],[.375,\"rgb(252,78,42)\"],[.5,\"rgb(253,141,60)\"],[.625,\"rgb(254,178,76)\"],[.75,\"rgb(254,217,118)\"],[.875,\"rgb(255,237,160)\"],[1,\"rgb(255,255,204)\"]],Bluered:[[0,\"rgb(0,0,255)\"],[1,\"rgb(255,0,0)\"]],RdBu:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(106,137,247)\"],[.5,\"rgb(190,190,190)\"],[.6,\"rgb(220,170,132)\"],[.7,\"rgb(230,145,90)\"],[1,\"rgb(178,10,28)\"]],Reds:[[0,\"rgb(220,220,220)\"],[.2,\"rgb(245,195,157)\"],[.4,\"rgb(245,160,105)\"],[1,\"rgb(178,10,28)\"]],Blues:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(40,60,190)\"],[.5,\"rgb(70,100,245)\"],[.6,\"rgb(90,120,245)\"],[.7,\"rgb(106,137,247)\"],[1,\"rgb(220,220,220)\"]],Picnic:[[0,\"rgb(0,0,255)\"],[.1,\"rgb(51,153,255)\"],[.2,\"rgb(102,204,255)\"],[.3,\"rgb(153,204,255)\"],[.4,\"rgb(204,204,255)\"],[.5,\"rgb(255,255,255)\"],[.6,\"rgb(255,204,255)\"],[.7,\"rgb(255,153,255)\"],[.8,\"rgb(255,102,204)\"],[.9,\"rgb(255,102,102)\"],[1,\"rgb(255,0,0)\"]],Rainbow:[[0,\"rgb(150,0,90)\"],[.125,\"rgb(0,0,200)\"],[.25,\"rgb(0,25,255)\"],[.375,\"rgb(0,152,255)\"],[.5,\"rgb(44,255,150)\"],[.625,\"rgb(151,255,0)\"],[.75,\"rgb(255,234,0)\"],[.875,\"rgb(255,111,0)\"],[1,\"rgb(255,0,0)\"]],Portland:[[0,\"rgb(12,51,131)\"],[.25,\"rgb(10,136,186)\"],[.5,\"rgb(242,211,56)\"],[.75,\"rgb(242,143,56)\"],[1,\"rgb(217,30,30)\"]],Jet:[[0,\"rgb(0,0,131)\"],[.125,\"rgb(0,60,170)\"],[.375,\"rgb(5,255,255)\"],[.625,\"rgb(255,255,0)\"],[.875,\"rgb(250,0,0)\"],[1,\"rgb(128,0,0)\"]],Hot:[[0,\"rgb(0,0,0)\"],[.3,\"rgb(230,0,0)\"],[.6,\"rgb(255,210,0)\"],[1,\"rgb(255,255,255)\"]],Blackbody:[[0,\"rgb(0,0,0)\"],[.2,\"rgb(230,0,0)\"],[.4,\"rgb(230,210,0)\"],[.7,\"rgb(255,255,255)\"],[1,\"rgb(160,200,255)\"]],Earth:[[0,\"rgb(0,0,130)\"],[.1,\"rgb(0,180,180)\"],[.2,\"rgb(40,210,40)\"],[.4,\"rgb(230,230,50)\"],[.6,\"rgb(120,70,20)\"],[1,\"rgb(255,255,255)\"]],Electric:[[0,\"rgb(0,0,0)\"],[.15,\"rgb(30,0,100)\"],[.4,\"rgb(120,0,100)\"],[.6,\"rgb(160,90,0)\"],[.8,\"rgb(230,200,0)\"],[1,\"rgb(255,250,220)\"]],Viridis:[[0,\"#440154\"],[.06274509803921569,\"#48186a\"],[.12549019607843137,\"#472d7b\"],[.18823529411764706,\"#424086\"],[.25098039215686274,\"#3b528b\"],[.3137254901960784,\"#33638d\"],[.3764705882352941,\"#2c728e\"],[.4392156862745098,\"#26828e\"],[.5019607843137255,\"#21918c\"],[.5647058823529412,\"#1fa088\"],[.6274509803921569,\"#28ae80\"],[.6901960784313725,\"#3fbc73\"],[.7529411764705882,\"#5ec962\"],[.8156862745098039,\"#84d44b\"],[.8784313725490196,\"#addc30\"],[.9411764705882353,\"#d8e219\"],[1,\"#fde725\"]],Cividis:[[0,\"rgb(0,32,76)\"],[.058824,\"rgb(0,42,102)\"],[.117647,\"rgb(0,52,110)\"],[.176471,\"rgb(39,63,108)\"],[.235294,\"rgb(60,74,107)\"],[.294118,\"rgb(76,85,107)\"],[.352941,\"rgb(91,95,109)\"],[.411765,\"rgb(104,106,112)\"],[.470588,\"rgb(117,117,117)\"],[.529412,\"rgb(131,129,120)\"],[.588235,\"rgb(146,140,120)\"],[.647059,\"rgb(161,152,118)\"],[.705882,\"rgb(176,165,114)\"],[.764706,\"rgb(192,177,109)\"],[.823529,\"rgb(209,191,102)\"],[.882353,\"rgb(225,204,92)\"],[.941176,\"rgb(243,219,79)\"],[1,\"rgb(255,233,69)\"]]},QL=op.RdBu;function c1e(e,r){if(r||(r=QL),!e)return r;function t(){try{e=op[e]||JSON.parse(e)}catch(a){e=r}}return typeof e==\"string\"&&(t(),typeof e==\"string\"&&t()),eC(e)?e:r}function eC(e){var r=0;if(!Array.isArray(e)||e.length<2||!e[0]||!e[e.length-1]||+e[0][0]!=0||+e[e.length-1][0]!=1)return!1;for(var t=0;t<e.length;t++){var a=e[t];if(a.length!==2||+a[0]<r||!f1e.isValid(a[1]))return!1;r=+a[0]}return!0}function v1e(e){return op[e]!==void 0?!0:eC(e)}rC.exports={scales:op,defaultScale:QL,get:c1e,isValid:v1e}});var lp=z((fUe,tC)=>{\"use strict\";tC.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}});var L0={};d0(L0,{counter:()=>h1e});function h1e(e,r=\"\",t,a){let n=r+(t?\"\":\"$\"),i=a===!1?\"\":\"^\";return e===\"xy\"?new RegExp(i+\"x\"+k_+\"y\"+k_+n):new RegExp(i+e+k_+n)}var k_,C0=h0(()=>{\"use strict\";k_=\"([2-9]|[1-9][0-9]+)?\"});var iC=z(Wn=>{\"use strict\";var S_=Ir(),aC=At().extendFlat,d1e=zn(),p1e=Ru(),q_=Sr(),m1e=lp().DESELECTDIM,D0=C1(),nC=(C0(),un(L0)).counter,y1e=(g0(),un(y0)).modHalf,_o=Vn().isArrayOrTypedArray,ms=Vn().isTypedArraySpec,ys=Vn().decodeTypedArraySpec;Wn.valObjectMeta={data_array:{coerceFunction:function(e,r,t){r.set(_o(e)?e:ms(e)?ys(e):t)}},enumerated:{coerceFunction:function(e,r,t,a){a.coerceNumber&&(e=+e),a.values.indexOf(e)===-1?r.set(t):r.set(e)},validateFunction:function(e,r){r.coerceNumber&&(e=+e);for(var t=r.values,a=0;a<t.length;a++){var n=String(t[a]);if(n.charAt(0)===\"/\"&&n.charAt(n.length-1)===\"/\"){var i=new RegExp(n.slice(1,-1));if(i.test(e))return!0}else if(e===t[a])return!0}return!1}},boolean:{coerceFunction:function(e,r,t,a){let n=i=>i===!0||i===!1;n(e)||a.arrayOk&&Array.isArray(e)&&e.length>0&&e.every(n)?r.set(e):r.set(t)}},number:{coerceFunction:function(e,r,t,a){ms(e)&&(e=ys(e)),!S_(e)||a.min!==void 0&&e<a.min||a.max!==void 0&&e>a.max?r.set(t):r.set(+e)}},integer:{coerceFunction:function(e,r,t,a){if((a.extras||[]).indexOf(e)!==-1){r.set(e);return}ms(e)&&(e=ys(e)),e%1||!S_(e)||a.min!==void 0&&e<a.min||a.max!==void 0&&e>a.max?r.set(t):r.set(+e)}},string:{coerceFunction:function(e,r,t,a){if(typeof e!=\"string\"){var n=typeof e==\"number\";a.strict===!0||!n?r.set(t):r.set(String(e))}else a.noBlank&&!e?r.set(t):r.set(e)}},color:{coerceFunction:function(e,r,t){ms(e)&&(e=ys(e)),q_.isValid(e)?r.set(e):r.set(t)}},colorlist:{coerceFunction:function(e,r,t){!Array.isArray(e)||!e.length?r.set(t):e.every(a=>q_.isValid(a))?r.set(e):r.set(t)}},colorscale:{coerceFunction:function(e,r,t){r.set(p1e.get(e,t))}},angle:{coerceFunction:function(e,r,t){ms(e)&&(e=ys(e)),e===\"auto\"?r.set(\"auto\"):S_(e)?r.set(y1e(+e,360)):r.set(t)}},subplotid:{coerceFunction:function(e,r,t,a){var n=a.regex||nC(t);let i=o=>typeof o==\"string\"&&n.test(o);i(e)||a.arrayOk&&_o(e)&&e.length>0&&e.every(i)?r.set(e):r.set(t)},validateFunction:function(e,r){var t=r.dflt;return e===t?!0:typeof e!=\"string\"?!1:!!nC(t).test(e)}},flaglist:{coerceFunction:function(e,r,t,a){if((a.extras||[]).indexOf(e)!==-1){r.set(e);return}if(typeof e!=\"string\"){r.set(t);return}for(var n=e.split(\"+\"),i=0;i<n.length;){var o=n[i];a.flags.indexOf(o)===-1||n.indexOf(o)<i?n.splice(i,1):i++}n.length?r.set(n.join(\"+\")):r.set(t)}},any:{coerceFunction:function(e,r,t){e===void 0?r.set(t):r.set(ms(e)?ys(e):e)}},info_array:{coerceFunction:function(e,r,t,a){function n(T,w,x){var _,k={set:function(A){_=A}};return x===void 0&&(x=w.dflt),Wn.valObjectMeta[w.valType].coerceFunction(T,k,x,w),_}if(ms(e)&&(e=ys(e)),!_o(e)){r.set(t);return}var i=a.dimensions===2||a.dimensions===\"1-2\"&&Array.isArray(e)&&_o(e[0]),o=a.items,l=[],s=Array.isArray(o),u=s&&i&&_o(o[0]),f=i&&s&&!u,c=s&&!f?o.length:e.length,v,d,p,y,m,b;if(t=Array.isArray(t)?t:[],i)for(v=0;v<c;v++)for(l[v]=[],p=_o(e[v])?e[v]:[],f?m=o.length:s?m=o[v].length:m=p.length,d=0;d<m;d++)f?y=o[d]:s?y=o[v][d]:y=o,b=n(p[d],y,(t[v]||[])[d]),b!==void 0&&(l[v][d]=b);else for(v=0;v<c;v++)b=n(e[v],s?o[v]:o,t[v]),b!==void 0&&(l[v]=b);r.set(l)},validateFunction:function(e,r){if(!_o(e))return!1;var t=r.items,a=Array.isArray(t),n=r.dimensions===2;if(!r.freeLength&&e.length!==t.length)return!1;for(var i=0;i<e.length;i++)if(n){if(!_o(e[i])||!r.freeLength&&e[i].length!==t[i].length)return!1;for(var o=0;o<e[i].length;o++)if(!sp(e[i][o],a?t[i][o]:t))return!1}else if(!sp(e[i],a?t[i]:t))return!1;return!0}}};Wn.coerce=function(e,r,t,a,n){var i=D0(t,a).get(),o=D0(e,a),l=D0(r,a),s=o.get(),u=r._template;if(s===void 0&&u&&(s=D0(u,a).get(),u=0),n===void 0&&(n=i.dflt),i.arrayOk){if(_o(s))return l.set(s),s;if(ms(s))return s=ys(s),l.set(s),s}var f=Wn.valObjectMeta[i.valType].coerceFunction;f(s,l,n,i);var c=l.get();return u&&c===n&&!sp(s,i)&&(s=D0(u,a).get(),f(s,l,n,i),c=l.get()),c};Wn.coerce2=function(e,r,t,a,n){var i=D0(e,a),o=Wn.coerce(e,r,t,a,n),l=i.get();return l!=null?o:!1};Wn.coerceFont=function(e,r,t,a){a||(a={}),t=aC({},t),t=aC(t,a.overrideDflt||{});var n={family:e(r+\".family\",t.family),size:e(r+\".size\",t.size),color:e(r+\".color\",t.color),weight:e(r+\".weight\",t.weight),style:e(r+\".style\",t.style)};if(a.noFontVariant||(n.variant=e(r+\".variant\",t.variant)),a.noFontLineposition||(n.lineposition=e(r+\".lineposition\",t.lineposition)),a.noFontTextcase||(n.textcase=e(r+\".textcase\",t.textcase)),!a.noFontShadow){var i=t.shadow;i===\"none\"&&a.autoShadowDflt&&(i=\"auto\"),n.shadow=e(r+\".shadow\",i)}return n};Wn.coercePattern=function(e,r,t,a){var n=e(r+\".shape\"),i;if(n||(i=e(r+\".path\")),n||i){n&&e(r+\".solidity\"),e(r+\".size\");var o=e(r+\".fillmode\"),l=o===\"overlay\";if(!a){var s=e(r+\".bgcolor\",l?t:void 0);e(r+\".fgcolor\",l?q_.contrast(s):t)}e(r+\".fgopacity\",l?.5:1)}};Wn.coerceHoverinfo=function(e,r,t){var a=r._module.attributes,n=a.hoverinfo?a:d1e,i=n.hoverinfo,o;if(t._dataLength===1){var l=i.dflt===\"all\"?i.flags.slice():i.dflt.split(\"+\");l.splice(l.indexOf(\"name\"),1),o=l.join(\"+\")}return Wn.coerce(e,r,n,\"hoverinfo\",o)};Wn.coerceSelectionMarkerOpacity=function(e,r){if(e.marker){var t=e.marker.opacity;if(t!==void 0){var a,n;!_o(t)&&!e.selected&&!e.unselected&&(a=t,n=m1e*t),r(\"selected.marker.opacity\",a),r(\"unselected.marker.opacity\",n)}}};function sp(e,r){var t=Wn.valObjectMeta[r.valType];if(r.arrayOk&&_o(e))return!0;if(t.validateFunction)return t.validateFunction(e,r);var a={},n=a,i={set:function(o){n=o}};return t.coerceFunction(e,i,a,r),n!==a}Wn.validate=sp});var up=z((vUe,oC)=>{\"use strict\";oC.exports=function(){}});var L_=z((hUe,lC)=>{\"use strict\";lC.exports=function(r,t){if(t instanceof RegExp){for(var a=t.toString(),n=0;n<r.length;n++)if(r[n]instanceof RegExp&&r[n].toString()===a)return r;r.push(t)}else(t||t===0)&&r.indexOf(t)===-1&&r.push(t);return r}});var uC=z((dUe,sC)=>{sC.exports=g1e;function g1e(){var e=new Float32Array(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var cC=z((pUe,fC)=>{fC.exports=b1e;function b1e(e){var r=new Float32Array(16);return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r}});var hC=z((mUe,vC)=>{vC.exports=x1e;function x1e(e,r){return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}});var C_=z((yUe,dC)=>{dC.exports=_1e;function _1e(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var mC=z((gUe,pC)=>{pC.exports=w1e;function w1e(e,r){if(e===r){var t=r[1],a=r[2],n=r[3],i=r[6],o=r[7],l=r[11];e[1]=r[4],e[2]=r[8],e[3]=r[12],e[4]=t,e[6]=r[9],e[7]=r[13],e[8]=a,e[9]=i,e[11]=r[14],e[12]=n,e[13]=o,e[14]=l}else e[0]=r[0],e[1]=r[4],e[2]=r[8],e[3]=r[12],e[4]=r[1],e[5]=r[5],e[6]=r[9],e[7]=r[13],e[8]=r[2],e[9]=r[6],e[10]=r[10],e[11]=r[14],e[12]=r[3],e[13]=r[7],e[14]=r[11],e[15]=r[15];return e}});var gC=z((bUe,yC)=>{yC.exports=T1e;function T1e(e,r){var t=r[0],a=r[1],n=r[2],i=r[3],o=r[4],l=r[5],s=r[6],u=r[7],f=r[8],c=r[9],v=r[10],d=r[11],p=r[12],y=r[13],m=r[14],b=r[15],T=t*l-a*o,w=t*s-n*o,x=t*u-i*o,_=a*s-n*l,k=a*u-i*l,A=n*u-i*s,q=f*y-c*p,C=f*m-v*p,E=f*b-d*p,P=c*m-v*y,R=c*b-d*y,N=v*b-d*m,I=T*N-w*R+x*P+_*E-k*C+A*q;return I?(I=1/I,e[0]=(l*N-s*R+u*P)*I,e[1]=(n*R-a*N-i*P)*I,e[2]=(y*A-m*k+b*_)*I,e[3]=(v*k-c*A-d*_)*I,e[4]=(s*E-o*N-u*C)*I,e[5]=(t*N-n*E+i*C)*I,e[6]=(m*x-p*A-b*w)*I,e[7]=(f*A-v*x+d*w)*I,e[8]=(o*R-l*E+u*q)*I,e[9]=(a*E-t*R-i*q)*I,e[10]=(p*k-y*x+b*T)*I,e[11]=(c*x-f*k-d*T)*I,e[12]=(l*C-o*P-s*q)*I,e[13]=(t*P-a*C+n*q)*I,e[14]=(y*w-p*_-m*T)*I,e[15]=(f*_-c*w+v*T)*I,e):null}});var xC=z((xUe,bC)=>{bC.exports=A1e;function A1e(e,r){var t=r[0],a=r[1],n=r[2],i=r[3],o=r[4],l=r[5],s=r[6],u=r[7],f=r[8],c=r[9],v=r[10],d=r[11],p=r[12],y=r[13],m=r[14],b=r[15];return e[0]=l*(v*b-d*m)-c*(s*b-u*m)+y*(s*d-u*v),e[1]=-(a*(v*b-d*m)-c*(n*b-i*m)+y*(n*d-i*v)),e[2]=a*(s*b-u*m)-l*(n*b-i*m)+y*(n*u-i*s),e[3]=-(a*(s*d-u*v)-l*(n*d-i*v)+c*(n*u-i*s)),e[4]=-(o*(v*b-d*m)-f*(s*b-u*m)+p*(s*d-u*v)),e[5]=t*(v*b-d*m)-f*(n*b-i*m)+p*(n*d-i*v),e[6]=-(t*(s*b-u*m)-o*(n*b-i*m)+p*(n*u-i*s)),e[7]=t*(s*d-u*v)-o*(n*d-i*v)+f*(n*u-i*s),e[8]=o*(c*b-d*y)-f*(l*b-u*y)+p*(l*d-u*c),e[9]=-(t*(c*b-d*y)-f*(a*b-i*y)+p*(a*d-i*c)),e[10]=t*(l*b-u*y)-o*(a*b-i*y)+p*(a*u-i*l),e[11]=-(t*(l*d-u*c)-o*(a*d-i*c)+f*(a*u-i*l)),e[12]=-(o*(c*m-v*y)-f*(l*m-s*y)+p*(l*v-s*c)),e[13]=t*(c*m-v*y)-f*(a*m-n*y)+p*(a*v-n*c),e[14]=-(t*(l*m-s*y)-o*(a*m-n*y)+p*(a*s-n*l)),e[15]=t*(l*v-s*c)-o*(a*v-n*c)+f*(a*s-n*l),e}});var wC=z((_Ue,_C)=>{_C.exports=M1e;function M1e(e){var r=e[0],t=e[1],a=e[2],n=e[3],i=e[4],o=e[5],l=e[6],s=e[7],u=e[8],f=e[9],c=e[10],v=e[11],d=e[12],p=e[13],y=e[14],m=e[15],b=r*o-t*i,T=r*l-a*i,w=r*s-n*i,x=t*l-a*o,_=t*s-n*o,k=a*s-n*l,A=u*p-f*d,q=u*y-c*d,C=u*m-v*d,E=f*y-c*p,P=f*m-v*p,R=c*m-v*y;return b*R-T*P+w*E+x*C-_*q+k*A}});var AC=z((wUe,TC)=>{TC.exports=k1e;function k1e(e,r,t){var a=r[0],n=r[1],i=r[2],o=r[3],l=r[4],s=r[5],u=r[6],f=r[7],c=r[8],v=r[9],d=r[10],p=r[11],y=r[12],m=r[13],b=r[14],T=r[15],w=t[0],x=t[1],_=t[2],k=t[3];return e[0]=w*a+x*l+_*c+k*y,e[1]=w*n+x*s+_*v+k*m,e[2]=w*i+x*u+_*d+k*b,e[3]=w*o+x*f+_*p+k*T,w=t[4],x=t[5],_=t[6],k=t[7],e[4]=w*a+x*l+_*c+k*y,e[5]=w*n+x*s+_*v+k*m,e[6]=w*i+x*u+_*d+k*b,e[7]=w*o+x*f+_*p+k*T,w=t[8],x=t[9],_=t[10],k=t[11],e[8]=w*a+x*l+_*c+k*y,e[9]=w*n+x*s+_*v+k*m,e[10]=w*i+x*u+_*d+k*b,e[11]=w*o+x*f+_*p+k*T,w=t[12],x=t[13],_=t[14],k=t[15],e[12]=w*a+x*l+_*c+k*y,e[13]=w*n+x*s+_*v+k*m,e[14]=w*i+x*u+_*d+k*b,e[15]=w*o+x*f+_*p+k*T,e}});var kC=z((TUe,MC)=>{MC.exports=S1e;function S1e(e,r,t){var a=t[0],n=t[1],i=t[2],o,l,s,u,f,c,v,d,p,y,m,b;return r===e?(e[12]=r[0]*a+r[4]*n+r[8]*i+r[12],e[13]=r[1]*a+r[5]*n+r[9]*i+r[13],e[14]=r[2]*a+r[6]*n+r[10]*i+r[14],e[15]=r[3]*a+r[7]*n+r[11]*i+r[15]):(o=r[0],l=r[1],s=r[2],u=r[3],f=r[4],c=r[5],v=r[6],d=r[7],p=r[8],y=r[9],m=r[10],b=r[11],e[0]=o,e[1]=l,e[2]=s,e[3]=u,e[4]=f,e[5]=c,e[6]=v,e[7]=d,e[8]=p,e[9]=y,e[10]=m,e[11]=b,e[12]=o*a+f*n+p*i+r[12],e[13]=l*a+c*n+y*i+r[13],e[14]=s*a+v*n+m*i+r[14],e[15]=u*a+d*n+b*i+r[15]),e}});var qC=z((AUe,SC)=>{SC.exports=q1e;function q1e(e,r,t){var a=t[0],n=t[1],i=t[2];return e[0]=r[0]*a,e[1]=r[1]*a,e[2]=r[2]*a,e[3]=r[3]*a,e[4]=r[4]*n,e[5]=r[5]*n,e[6]=r[6]*n,e[7]=r[7]*n,e[8]=r[8]*i,e[9]=r[9]*i,e[10]=r[10]*i,e[11]=r[11]*i,e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}});var CC=z((MUe,LC)=>{LC.exports=L1e;function L1e(e,r,t,a){var n=a[0],i=a[1],o=a[2],l=Math.sqrt(n*n+i*i+o*o),s,u,f,c,v,d,p,y,m,b,T,w,x,_,k,A,q,C,E,P,R,N,I,O;return Math.abs(l)<1e-6?null:(l=1/l,n*=l,i*=l,o*=l,s=Math.sin(t),u=Math.cos(t),f=1-u,c=r[0],v=r[1],d=r[2],p=r[3],y=r[4],m=r[5],b=r[6],T=r[7],w=r[8],x=r[9],_=r[10],k=r[11],A=n*n*f+u,q=i*n*f+o*s,C=o*n*f-i*s,E=n*i*f-o*s,P=i*i*f+u,R=o*i*f+n*s,N=n*o*f+i*s,I=i*o*f-n*s,O=o*o*f+u,e[0]=c*A+y*q+w*C,e[1]=v*A+m*q+x*C,e[2]=d*A+b*q+_*C,e[3]=p*A+T*q+k*C,e[4]=c*E+y*P+w*R,e[5]=v*E+m*P+x*R,e[6]=d*E+b*P+_*R,e[7]=p*E+T*P+k*R,e[8]=c*N+y*I+w*O,e[9]=v*N+m*I+x*O,e[10]=d*N+b*I+_*O,e[11]=p*N+T*I+k*O,r!==e&&(e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e)}});var EC=z((kUe,DC)=>{DC.exports=C1e;function C1e(e,r,t){var a=Math.sin(t),n=Math.cos(t),i=r[4],o=r[5],l=r[6],s=r[7],u=r[8],f=r[9],c=r[10],v=r[11];return r!==e&&(e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[4]=i*n+u*a,e[5]=o*n+f*a,e[6]=l*n+c*a,e[7]=s*n+v*a,e[8]=u*n-i*a,e[9]=f*n-o*a,e[10]=c*n-l*a,e[11]=v*n-s*a,e}});var RC=z((SUe,PC)=>{PC.exports=D1e;function D1e(e,r,t){var a=Math.sin(t),n=Math.cos(t),i=r[0],o=r[1],l=r[2],s=r[3],u=r[8],f=r[9],c=r[10],v=r[11];return r!==e&&(e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[0]=i*n-u*a,e[1]=o*n-f*a,e[2]=l*n-c*a,e[3]=s*n-v*a,e[8]=i*a+u*n,e[9]=o*a+f*n,e[10]=l*a+c*n,e[11]=s*a+v*n,e}});var zC=z((qUe,FC)=>{FC.exports=E1e;function E1e(e,r,t){var a=Math.sin(t),n=Math.cos(t),i=r[0],o=r[1],l=r[2],s=r[3],u=r[4],f=r[5],c=r[6],v=r[7];return r!==e&&(e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[0]=i*n+u*a,e[1]=o*n+f*a,e[2]=l*n+c*a,e[3]=s*n+v*a,e[4]=u*n-i*a,e[5]=f*n-o*a,e[6]=c*n-l*a,e[7]=v*n-s*a,e}});var IC=z((LUe,NC)=>{NC.exports=P1e;function P1e(e,r,t){var a,n,i,o=t[0],l=t[1],s=t[2],u=Math.sqrt(o*o+l*l+s*s);return Math.abs(u)<1e-6?null:(u=1/u,o*=u,l*=u,s*=u,a=Math.sin(r),n=Math.cos(r),i=1-n,e[0]=o*o*i+n,e[1]=l*o*i+s*a,e[2]=s*o*i-l*a,e[3]=0,e[4]=o*l*i-s*a,e[5]=l*l*i+n,e[6]=s*l*i+o*a,e[7]=0,e[8]=o*s*i+l*a,e[9]=l*s*i-o*a,e[10]=s*s*i+n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e)}});var OC=z((CUe,BC)=>{BC.exports=R1e;function R1e(e,r,t){var a=r[0],n=r[1],i=r[2],o=r[3],l=a+a,s=n+n,u=i+i,f=a*l,c=a*s,v=a*u,d=n*s,p=n*u,y=i*u,m=o*l,b=o*s,T=o*u;return e[0]=1-(d+y),e[1]=c+T,e[2]=v-b,e[3]=0,e[4]=c-T,e[5]=1-(f+y),e[6]=p+m,e[7]=0,e[8]=v+b,e[9]=p-m,e[10]=1-(f+d),e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e}});var UC=z((DUe,HC)=>{HC.exports=F1e;function F1e(e,r){return e[0]=r[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=r[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var YC=z((EUe,GC)=>{GC.exports=z1e;function z1e(e,r){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}});var jC=z((PUe,VC)=>{VC.exports=N1e;function N1e(e,r){var t=Math.sin(r),a=Math.cos(r);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=t,e[7]=0,e[8]=0,e[9]=-t,e[10]=a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var XC=z((RUe,WC)=>{WC.exports=I1e;function I1e(e,r){var t=Math.sin(r),a=Math.cos(r);return e[0]=a,e[1]=0,e[2]=-t,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=t,e[9]=0,e[10]=a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var $C=z((FUe,ZC)=>{ZC.exports=B1e;function B1e(e,r){var t=Math.sin(r),a=Math.cos(r);return e[0]=a,e[1]=t,e[2]=0,e[3]=0,e[4]=-t,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var KC=z((zUe,JC)=>{JC.exports=O1e;function O1e(e,r){var t=r[0],a=r[1],n=r[2],i=r[3],o=t+t,l=a+a,s=n+n,u=t*o,f=a*o,c=a*l,v=n*o,d=n*l,p=n*s,y=i*o,m=i*l,b=i*s;return e[0]=1-c-p,e[1]=f+b,e[2]=v-m,e[3]=0,e[4]=f-b,e[5]=1-u-p,e[6]=d+y,e[7]=0,e[8]=v+m,e[9]=d-y,e[10]=1-u-c,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}});var eD=z((NUe,QC)=>{QC.exports=H1e;function H1e(e,r,t,a,n,i,o){var l=1/(t-r),s=1/(n-a),u=1/(i-o);return e[0]=i*2*l,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i*2*s,e[6]=0,e[7]=0,e[8]=(t+r)*l,e[9]=(n+a)*s,e[10]=(o+i)*u,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*i*2*u,e[15]=0,e}});var tD=z((IUe,rD)=>{rD.exports=U1e;function U1e(e,r,t,a,n){var i=1/Math.tan(r/2),o=1/(a-n);return e[0]=i/t,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=(n+a)*o,e[11]=-1,e[12]=0,e[13]=0,e[14]=2*n*a*o,e[15]=0,e}});var nD=z((BUe,aD)=>{aD.exports=G1e;function G1e(e,r,t,a){var n=Math.tan(r.upDegrees*Math.PI/180),i=Math.tan(r.downDegrees*Math.PI/180),o=Math.tan(r.leftDegrees*Math.PI/180),l=Math.tan(r.rightDegrees*Math.PI/180),s=2/(o+l),u=2/(n+i);return e[0]=s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=u,e[6]=0,e[7]=0,e[8]=-((o-l)*s*.5),e[9]=(n-i)*u*.5,e[10]=a/(t-a),e[11]=-1,e[12]=0,e[13]=0,e[14]=a*t/(t-a),e[15]=0,e}});var oD=z((OUe,iD)=>{iD.exports=Y1e;function Y1e(e,r,t,a,n,i,o){var l=1/(r-t),s=1/(a-n),u=1/(i-o);return e[0]=-2*l,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*s,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(r+t)*l,e[13]=(n+a)*s,e[14]=(o+i)*u,e[15]=1,e}});var sD=z((HUe,lD)=>{var V1e=C_();lD.exports=j1e;function j1e(e,r,t,a){var n,i,o,l,s,u,f,c,v,d,p=r[0],y=r[1],m=r[2],b=a[0],T=a[1],w=a[2],x=t[0],_=t[1],k=t[2];return Math.abs(p-x)<1e-6&&Math.abs(y-_)<1e-6&&Math.abs(m-k)<1e-6?V1e(e):(f=p-x,c=y-_,v=m-k,d=1/Math.sqrt(f*f+c*c+v*v),f*=d,c*=d,v*=d,n=T*v-w*c,i=w*f-b*v,o=b*c-T*f,d=Math.sqrt(n*n+i*i+o*o),d?(d=1/d,n*=d,i*=d,o*=d):(n=0,i=0,o=0),l=c*o-v*i,s=v*n-f*o,u=f*i-c*n,d=Math.sqrt(l*l+s*s+u*u),d?(d=1/d,l*=d,s*=d,u*=d):(l=0,s=0,u=0),e[0]=n,e[1]=l,e[2]=f,e[3]=0,e[4]=i,e[5]=s,e[6]=c,e[7]=0,e[8]=o,e[9]=u,e[10]=v,e[11]=0,e[12]=-(n*p+i*y+o*m),e[13]=-(l*p+s*y+u*m),e[14]=-(f*p+c*y+v*m),e[15]=1,e)}});var fD=z((UUe,uD)=>{uD.exports=W1e;function W1e(e){return\"mat4(\"+e[0]+\", \"+e[1]+\", \"+e[2]+\", \"+e[3]+\", \"+e[4]+\", \"+e[5]+\", \"+e[6]+\", \"+e[7]+\", \"+e[8]+\", \"+e[9]+\", \"+e[10]+\", \"+e[11]+\", \"+e[12]+\", \"+e[13]+\", \"+e[14]+\", \"+e[15]+\")\"}});var D_=z((GUe,cD)=>{cD.exports={create:uC(),clone:cC(),copy:hC(),identity:C_(),transpose:mC(),invert:gC(),adjoint:xC(),determinant:wC(),multiply:AC(),translate:kC(),scale:qC(),rotate:CC(),rotateX:EC(),rotateY:RC(),rotateZ:zC(),fromRotation:IC(),fromRotationTranslation:OC(),fromScaling:UC(),fromTranslation:YC(),fromXRotation:jC(),fromYRotation:XC(),fromZRotation:$C(),fromQuat:KC(),frustum:eD(),perspective:tD(),perspectiveFromFieldOfView:nD(),ortho:oD(),lookAt:sD(),str:fD()}});var fp=z(ua=>{\"use strict\";var X1e=D_();ua.init2dArray=function(e,r){for(var t=new Array(e),a=0;a<e;a++)t[a]=new Array(r);return t};ua.transposeRagged=function(e){var r=0,t=e.length,a,n;for(a=0;a<t;a++)r=Math.max(r,e[a].length);var i=new Array(r);for(a=0;a<r;a++)for(i[a]=new Array(t),n=0;n<t;n++)i[a][n]=e[n][a];return i};ua.dot=function(e,r){if(!(e.length&&r.length)||e.length!==r.length)return null;var t=e.length,a,n;if(e[0].length)for(a=new Array(t),n=0;n<t;n++)a[n]=ua.dot(e[n],r);else if(r[0].length){var i=ua.transposeRagged(r);for(a=new Array(i.length),n=0;n<i.length;n++)a[n]=ua.dot(e,i[n])}else for(a=0,n=0;n<t;n++)a+=e[n]*r[n];return a};ua.translationMatrix=function(e,r){return[[1,0,e],[0,1,r],[0,0,1]]};ua.rotationMatrix=function(e){var r=e*Math.PI/180;return[[Math.cos(r),-Math.sin(r),0],[Math.sin(r),Math.cos(r),0],[0,0,1]]};ua.rotationXYMatrix=function(e,r,t){return ua.dot(ua.dot(ua.translationMatrix(r,t),ua.rotationMatrix(e)),ua.translationMatrix(-r,-t))};ua.apply3DTransform=function(e){return function(){var r=arguments,t=arguments.length===1?r[0]:[r[0],r[1],r[2]||0];return ua.dot(e,[t[0],t[1],t[2],1]).slice(0,3)}};ua.apply2DTransform=function(e){return function(){var r=arguments;r.length===3&&(r=r[0]);var t=arguments.length===1?r[0]:[r[0],r[1]];return ua.dot(e,[t[0],t[1],1]).slice(0,2)}};ua.apply2DTransform2=function(e){var r=ua.apply2DTransform(e);return function(t){return r(t.slice(0,2)).concat(r(t.slice(2,4)))}};ua.convertCssMatrix=function(e){if(e){var r=e.length;if(r===16)return e;if(r===6)return[e[0],e[1],0,0,e[2],e[3],0,0,0,0,1,0,e[4],e[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]};ua.inverseTransformMatrix=function(e){var r=[];return X1e.invert(r,e),[[r[0],r[1],r[2],r[3]],[r[4],r[5],r[6],r[7]],[r[8],r[9],r[10],r[11]],[r[12],r[13],r[14],r[15]]]}});var ph=z((VUe,yD)=>{\"use strict\";var Z1e=Er(),vD=ps(),$1e=fp(),J1e=D_();function K1e(e){var r;if(typeof e==\"string\"){if(r=document.getElementById(e),r===null)throw new Error(\"No DOM element with id '\"+e+\"' exists on the page.\");return r}else if(e==null)throw new Error(\"DOM element provided is null or undefined\");return e}function Q1e(e){var r=Z1e.select(e);return r.node()instanceof HTMLElement&&r.size()&&r.classed(\"js-plotly-plot\")}function hD(e){var r=e&&e.parentNode;r&&r.removeChild(e)}function epe(e,r){dD(\"global\",e,r)}function dD(e,r,t){var a=\"plotly.js-style-\"+e,n=document.getElementById(a);if(!(n&&n.matches(\".no-inline-styles\"))){n||(n=document.createElement(\"style\"),n.setAttribute(\"id\",a),n.appendChild(document.createTextNode(\"\")),document.head.appendChild(n));var i=n.sheet;i?i.insertRule?i.insertRule(r+\"{\"+t+\"}\",0):i.addRule?i.addRule(r,t,0):vD.warn(\"addStyleRule failed\"):vD.warn(\"Cannot addRelatedStyleRule, probably due to strict CSP...\")}}function rpe(e){var r=\"plotly.js-style-\"+e,t=document.getElementById(r);t&&hD(t)}function tpe(e,r,t,a,n,i){var o=a.split(\":\"),l=n.split(\":\"),s=\"data-btn-style-event-added\";i||(i=document),i.querySelectorAll(e).forEach(function(u){u.getAttribute(s)||(u.addEventListener(\"mouseenter\",function(){var f=this.querySelector(t);f&&(f.style[o[0]]=o[1])}),u.addEventListener(\"mouseleave\",function(){var f=this.querySelector(t);f&&(r&&this.matches(r)?f.style[o[0]]=o[1]:f.style[l[0]]=l[1])}),u.setAttribute(s,!0))})}function ape(e){var r=mD(e),t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return r.forEach(function(a){var n=pD(a);if(n){var i=$1e.convertCssMatrix(n);t=J1e.multiply(t,t,i)}}),t}function pD(e){var r=window.getComputedStyle(e,null),t=r.getPropertyValue(\"-webkit-transform\")||r.getPropertyValue(\"-moz-transform\")||r.getPropertyValue(\"-ms-transform\")||r.getPropertyValue(\"-o-transform\")||r.getPropertyValue(\"transform\");return t===\"none\"?null:t.replace(\"matrix\",\"\").replace(\"3d\",\"\").slice(1,-1).split(\",\").map(function(a){return+a})}function mD(e){for(var r=[];npe(e);)r.push(e),e=e.parentNode,typeof ShadowRoot==\"function\"&&e instanceof ShadowRoot&&(e=e.host);return r}function npe(e){return e&&(e instanceof Element||e instanceof HTMLElement)}function ipe(e,r){return e&&r&&e.top===r.top&&e.left===r.left&&e.right===r.right&&e.bottom===r.bottom}yD.exports={getGraphDiv:K1e,isPlotDiv:Q1e,removeElement:hD,addStyleRule:epe,addRelatedStyleRule:dD,deleteRelatedStyleRule:rpe,setStyleOnHover:tpe,getFullTransformMatrix:ape,getElementTransformMatrix:pD,getElementAndAncestors:mD,equalDomRects:ipe}});var mh=z((jUe,gD)=>{\"use strict\";gD.exports={mode:{valType:\"enumerated\",dflt:\"afterall\",values:[\"immediate\",\"next\",\"afterall\"]},direction:{valType:\"enumerated\",values:[\"forward\",\"reverse\"],dflt:\"forward\"},fromcurrent:{valType:\"boolean\",dflt:!1},frame:{duration:{valType:\"number\",min:0,dflt:500},redraw:{valType:\"boolean\",dflt:!0}},transition:{duration:{valType:\"number\",min:0,dflt:500,editType:\"none\"},easing:{valType:\"enumerated\",dflt:\"cubic-in-out\",values:[\"linear\",\"quad\",\"cubic\",\"sin\",\"exp\",\"circle\",\"elastic\",\"back\",\"bounce\",\"linear-in\",\"quad-in\",\"cubic-in\",\"sin-in\",\"exp-in\",\"circle-in\",\"elastic-in\",\"back-in\",\"bounce-in\",\"linear-out\",\"quad-out\",\"cubic-out\",\"sin-out\",\"exp-out\",\"circle-out\",\"elastic-out\",\"back-out\",\"bounce-out\",\"linear-in-out\",\"quad-in-out\",\"cubic-in-out\",\"sin-in-out\",\"exp-in-out\",\"circle-in-out\",\"elastic-in-out\",\"back-in-out\",\"bounce-in-out\"],editType:\"none\"},ordering:{valType:\"enumerated\",values:[\"layout first\",\"traces first\"],dflt:\"layout first\",editType:\"none\"}}}});var wo=z((WUe,MD)=>{\"use strict\";var xD=At().extendFlat,ope=Au(),_D={valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"clearAxisTypes\",\"plot\",\"style\",\"markerSize\",\"colorbars\"]},wD={valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"plot\",\"legend\",\"ticks\",\"axrange\",\"layoutstyle\",\"modebar\",\"camera\",\"arraydraw\",\"colorbars\"]},lpe=_D.flags.slice().concat([\"fullReplot\"]),spe=wD.flags.slice().concat(\"layoutReplot\");MD.exports={traces:_D,layout:wD,traceFlags:function(){return bD(lpe)},layoutFlags:function(){return bD(spe)},update:function(e,r){var t=r.editType;if(t&&t!==\"none\")for(var a=t.split(\"+\"),n=0;n<a.length;n++)e[a[n]]=!0},overrideAll:TD};function bD(e){for(var r={},t=0;t<e.length;t++)r[e[t]]=!1;return r}function TD(e,r,t){var a=xD({},e);for(var n in a){var i=a[n];ope(i)&&(a[n]=AD(i,r,t,n))}return t===\"from-root\"&&(a.editType=r),a}function AD(e,r,t,a){if(e.valType){var n=xD({},e);if(n.editType=r,Array.isArray(e.items)){n.items=new Array(e.items.length);for(var i=0;i<e.items.length;i++)n.items[i]=AD(e.items[i],r,\"from-root\")}return n}else return TD(e,r,a.charAt(0)===\"_\"?\"nested\":\"from-root\")}});var Pi=z(E_=>{\"use strict\";E_.dash={valType:\"string\",values:[\"solid\",\"dot\",\"dash\",\"longdash\",\"dashdot\",\"longdashdot\"],dflt:\"solid\",editType:\"style\"};E_.pattern={shape:{valType:\"enumerated\",values:[\"\",\"/\",\"\\\\\",\"x\",\"-\",\"|\",\"+\",\".\"],dflt:\"\",arrayOk:!0,editType:\"style\"},path:{valType:\"string\",arrayOk:!0,editType:\"style\"},fillmode:{valType:\"enumerated\",values:[\"replace\",\"overlay\"],dflt:\"replace\",editType:\"style\"},bgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgopacity:{valType:\"number\",editType:\"style\",min:0,max:1},size:{valType:\"number\",min:0,dflt:8,arrayOk:!0,editType:\"style\"},solidity:{valType:\"number\",min:0,max:1,dflt:.3,arrayOk:!0,editType:\"style\"},editType:\"style\"}});var P_=z((ZUe,kD)=>{\"use strict\";kD.exports={FORMAT_LINK:\"https://github.com/d3/d3-format/tree/v1.4.5#d3-format\",DATE_FORMAT_LINK:\"https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format\"}});var fi=z(E0=>{\"use strict\";var{DATE_FORMAT_LINK:upe,FORMAT_LINK:fpe}=P_(),cpe=[\"Variables that can't be found will be replaced with the specifier.\",'For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing.',\"Variables with an undefined value will be replaced with the fallback value.\"].join(\" \");function vpe({supportOther:e}={}){return[\"Variables are inserted using %{variable},\",'for example \"y: %{y}\"'+(e?\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown.\":\".\"),`Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\".`,fpe,\"for details on the formatting syntax.\",`Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\".`,upe,\"for details on the date formatting syntax.\",cpe].join(\" \")}E0.templateFormatStringDescription=vpe;E0.hovertemplateAttrs=({editType:e=\"none\",arrayOk:r}={},t={})=>wt({valType:\"string\",dflt:\"\",editType:e},r!==!1?{arrayOk:!0}:{});E0.texttemplateAttrs=({editType:e=\"calc\",arrayOk:r}={},t={})=>wt({valType:\"string\",dflt:\"\",editType:e},r!==!1?{arrayOk:!0}:{});E0.shapeTexttemplateAttrs=({editType:e=\"arraydraw\",newshape:r}={},t={})=>({valType:\"string\",dflt:\"\",editType:e});E0.templatefallbackAttrs=({editType:e=\"none\"}={})=>({valType:\"any\",dflt:\"-\",editType:e})});var hp=z((KUe,ED)=>{\"use strict\";function gs(e,r){return r?r.d2l(e):e}function SD(e,r){return r?r.l2d(e):e}function hpe(e){return e.x0}function dpe(e){return e.x1}function ppe(e){return e.y0}function mpe(e){return e.y1}function qD(e){return e.x0shift||0}function LD(e){return e.x1shift||0}function CD(e){return e.y0shift||0}function DD(e){return e.y1shift||0}function cp(e,r){return gs(e.x1,r)+LD(e)-gs(e.x0,r)-qD(e)}function vp(e,r,t){return gs(e.y1,t)+DD(e)-gs(e.y0,t)-CD(e)}function ype(e,r){return Math.abs(cp(e,r))}function gpe(e,r,t){return Math.abs(vp(e,r,t))}function bpe(e,r,t){return e.type!==\"line\"?void 0:Math.sqrt(Math.pow(cp(e,r),2)+Math.pow(vp(e,r,t),2))}function xpe(e,r){return SD((gs(e.x1,r)+LD(e)+gs(e.x0,r)+qD(e))/2,r)}function _pe(e,r,t){return SD((gs(e.y1,t)+DD(e)+gs(e.y0,t)+CD(e))/2,t)}function wpe(e,r,t){return e.type!==\"line\"?void 0:vp(e,r,t)/cp(e,r)}var Tpe=[\"x0\",\"x1\",\"y0\",\"y1\",\"dy\",\"height\",\"ycenter\"],Ape=[\"x0\",\"x1\",\"y0\",\"y1\",\"dx\",\"width\",\"xcenter\"];ED.exports={x0:hpe,x1:dpe,y0:ppe,y1:mpe,slope:wpe,dx:cp,dy:vp,width:ype,height:gpe,length:bpe,xcenter:xpe,ycenter:_pe,simpleXVariables:Tpe,simpleYVariables:Ape}});var FD=z((QUe,RD)=>{\"use strict\";var Mpe=wo().overrideAll,Fu=zn(),PD=ka(),kpe=Pi().dash,bs=At().extendFlat,{shapeTexttemplateAttrs:Spe,templatefallbackAttrs:qpe}=fi(),Lpe=hp();RD.exports=Mpe({newshape:{visible:bs({},Fu.visible,{}),showlegend:{valType:\"boolean\",dflt:!1},legend:bs({},Fu.legend,{}),legendgroup:bs({},Fu.legendgroup,{}),legendgrouptitle:{text:bs({},Fu.legendgrouptitle.text,{}),font:PD({})},legendrank:bs({},Fu.legendrank,{}),legendwidth:bs({},Fu.legendwidth,{}),line:{color:{valType:\"color\"},width:{valType:\"number\",min:0,dflt:4},dash:bs({},kpe,{dflt:\"solid\"})},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\"},opacity:{valType:\"number\",min:0,max:1,dflt:1},layer:{valType:\"enumerated\",values:[\"below\",\"above\",\"between\"],dflt:\"above\"},drawdirection:{valType:\"enumerated\",values:[\"ortho\",\"horizontal\",\"vertical\",\"diagonal\"],dflt:\"diagonal\"},name:bs({},Fu.name,{}),label:{text:{valType:\"string\",dflt:\"\"},texttemplate:Spe({newshape:!0},{keys:Object.keys(Lpe)}),texttemplatefallback:qpe({editType:\"arraydraw\"}),font:PD({}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\",\"start\",\"middle\",\"end\"]},textangle:{valType:\"angle\",dflt:\"auto\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"]},padding:{valType:\"number\",dflt:3,min:0}}},activeshape:{fillcolor:{valType:\"color\",dflt:\"rgb(255,0,255)\",description:\"Sets the color filling the active shape' interior.\"},opacity:{valType:\"number\",min:0,max:1,dflt:.5}}},\"none\",\"from-root\")});var ND=z((eGe,zD)=>{\"use strict\";var Cpe=Pi().dash,Dpe=At().extendFlat;zD.exports={newselection:{mode:{valType:\"enumerated\",values:[\"immediate\",\"gradual\"],dflt:\"immediate\",editType:\"none\"},line:{color:{valType:\"color\",editType:\"none\"},width:{valType:\"number\",min:1,dflt:1,editType:\"none\"},dash:Dpe({},Cpe,{dflt:\"dot\",editType:\"none\"}),editType:\"none\"},editType:\"none\"},activeselection:{fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"none\"},opacity:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"none\"},editType:\"none\"}}});var dp=z((rGe,ID)=>{\"use strict\";ID.exports=function(e){var r=e.editType;return{t:{valType:\"number\",dflt:0,editType:r},r:{valType:\"number\",dflt:0,editType:r},b:{valType:\"number\",dflt:0,editType:r},l:{valType:\"number\",dflt:0,editType:r},editType:r}}});var P0=z((tGe,UD)=>{\"use strict\";var R_=ka(),Epe=mh(),pp=Ei(),BD=FD(),OD=ND(),Ppe=dp(),HD=At().extendFlat,mp=R_({editType:\"calc\"});mp.family.dflt='\"Open Sans\", verdana, arial, sans-serif';mp.size.dflt=12;mp.color.dflt=pp.defaultLine;UD.exports={font:mp,title:{text:{valType:\"string\",editType:\"layoutstyle\"},font:R_({editType:\"layoutstyle\"}),subtitle:{text:{valType:\"string\",editType:\"layoutstyle\"},font:R_({editType:\"layoutstyle\"}),editType:\"layoutstyle\"},xref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},x:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"layoutstyle\"},y:{valType:\"number\",min:0,max:1,dflt:\"auto\",editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"left\",\"center\",\"right\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"layoutstyle\"},pad:HD(Ppe({editType:\"layoutstyle\"}),{}),automargin:{valType:\"boolean\",dflt:!1,editType:\"plot\"},editType:\"layoutstyle\"},uniformtext:{mode:{valType:\"enumerated\",values:[!1,\"hide\",\"show\"],dflt:!1,editType:\"plot\"},minsize:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"},autosize:{valType:\"boolean\",dflt:!1,editType:\"none\"},width:{valType:\"number\",min:10,dflt:700,editType:\"plot\"},height:{valType:\"number\",min:10,dflt:450,editType:\"plot\"},minreducedwidth:{valType:\"number\",min:2,dflt:64,editType:\"plot\"},minreducedheight:{valType:\"number\",min:2,dflt:64,editType:\"plot\"},margin:{l:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},r:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},t:{valType:\"number\",min:0,dflt:100,editType:\"plot\"},b:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},pad:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},autoexpand:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},computed:{valType:\"any\",editType:\"none\"},paper_bgcolor:{valType:\"color\",dflt:pp.background,editType:\"plot\"},plot_bgcolor:{valType:\"color\",dflt:pp.background,editType:\"layoutstyle\"},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},separators:{valType:\"string\",editType:\"plot\"},showlegend:{valType:\"boolean\",editType:\"legend\"},colorway:{valType:\"colorlist\",dflt:pp.defaults,editType:\"calc\"},datarevision:{valType:\"any\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editrevision:{valType:\"any\",editType:\"none\"},selectionrevision:{valType:\"any\",editType:\"none\"},template:{valType:\"any\",editType:\"calc\"},newshape:BD.newshape,activeshape:BD.activeshape,newselection:OD.newselection,activeselection:OD.activeselection,meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},transition:HD({},Epe.transition,{editType:\"none\"})}});var GD=z(()=>{(function(){if(!document.getElementById(\"9f215cf04c5486422605d13261cb87401f4e7763b6296af81e98efbc0130da53\")){var e=document.createElement(\"style\");e.id=\"9f215cf04c5486422605d13261cb87401f4e7763b6296af81e98efbc0130da53\",e.textContent='.maplibregl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgb(0 0 0/0)}.maplibregl-canvas{position:absolute;left:0;top:0}.maplibregl-map:fullscreen{width:100%;height:100%}.maplibregl-ctrl-group button.maplibregl-ctrl-compass{touch-action:none}.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer}.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none}.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures,.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.maplibregl-ctrl-top-left{top:0;left:0}.maplibregl-ctrl-top-right{top:0;right:0}.maplibregl-ctrl-bottom-left{bottom:0;left:0}.maplibregl-ctrl-bottom-right{right:0;bottom:0}.maplibregl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.maplibregl-ctrl-top-left .maplibregl-ctrl{margin:10px 0 0 10px;float:left}.maplibregl-ctrl-top-right .maplibregl-ctrl{margin:10px 10px 0 0;float:right}.maplibregl-ctrl-bottom-left .maplibregl-ctrl{margin:0 0 10px 10px;float:left}.maplibregl-ctrl-bottom-right .maplibregl-ctrl{margin:0 10px 10px 0;float:right}.maplibregl-ctrl-group{border-radius:4px;background:#fff}.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (forced-colors:active){.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.maplibregl-ctrl-group button{width:29px;height:29px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:transparent;cursor:pointer}.maplibregl-ctrl-group button+button{border-top:1px solid #ddd}.maplibregl-ctrl button .maplibregl-ctrl-icon{display:block;width:100%;height:100%;background-repeat:no-repeat;background-position:50%}@media (forced-colors:active){.maplibregl-ctrl-icon{background-color:transparent}.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}}.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0}.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl button:disabled{cursor:not-allowed}.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25}@media (hover:hover){.maplibregl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}}.maplibregl-ctrl button:not(:disabled):active{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit}.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E\")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E\")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E\")}}.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E\")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E\")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E\")}}.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E\")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E\")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E\")}}.maplibregl-ctrl button.maplibregl-ctrl-globe .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22none%22%20stroke%3D%22%23333%22%20viewBox%3D%220%200%2022%2022%22%3E%3Ccircle%20cx%3D%2211%22%20cy%3D%2211%22%20r%3D%228.5%22%2F%3E%3Cpath%20d%3D%22M17.5%2011c0%204.819-3.02%208.5-6.5%208.5S4.5%2015.819%204.5%2011%207.52%202.5%2011%202.5s6.5%203.681%206.5%208.5Z%22%2F%3E%3Cpath%20d%3D%22M13.5%2011c0%202.447-.331%204.64-.853%206.206-.262.785-.562%201.384-.872%201.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831%2015.64%208.5%2013.446%208.5%2011s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872%201.777.522%201.565.853%203.76.853%206.206Z%22%2F%3E%3Cpath%20d%3D%22M11%207.5c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138q.07-.058.224-.138c.299-.151.763-.302%201.379-.434C7.378%205.666%209.091%205.5%2011%205.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0%209c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138%201.3%201.3%200%200%201%20.224-.138c.299-.151.763-.302%201.379-.434C7.378%2014.666%209.091%2014.5%2011%2014.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138a1.3%201.3%200%200%201-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0-4c-2.46%200-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5%201.5%200%200%201-.39-.272.3.3%200%200%201-.047-.064.3.3%200%200%201%20.048-.064c.066-.073.189-.167.389-.272.399-.21%201.009-.413%201.805-.59C6.328%209.722%208.54%209.5%2011%209.5s4.672.222%206.256.574c.795.177%201.405.38%201.804.59.2.105.323.2.39.272a.3.3%200%200%201%20.047.064.3.3%200%200%201-.048.064%201.4%201.4%200%200%201-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0%20.018v.002zm17.002.002v-.002zm0-.018v-.002z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-globe-enabled .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22none%22%20stroke%3D%22%2333b5e5%22%20viewBox%3D%220%200%2022%2022%22%3E%3Ccircle%20cx%3D%2211%22%20cy%3D%2211%22%20r%3D%228.5%22%2F%3E%3Cpath%20d%3D%22M17.5%2011c0%204.819-3.02%208.5-6.5%208.5S4.5%2015.819%204.5%2011%207.52%202.5%2011%202.5s6.5%203.681%206.5%208.5Z%22%2F%3E%3Cpath%20d%3D%22M13.5%2011c0%202.447-.331%204.64-.853%206.206-.262.785-.562%201.384-.872%201.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831%2015.64%208.5%2013.446%208.5%2011s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872%201.777.522%201.565.853%203.76.853%206.206Z%22%2F%3E%3Cpath%20d%3D%22M11%207.5c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138q.07-.058.224-.138c.299-.151.763-.302%201.379-.434C7.378%205.666%209.091%205.5%2011%205.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0%209c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138%201.3%201.3%200%200%201%20.224-.138c.299-.151.763-.302%201.379-.434C7.378%2014.666%209.091%2014.5%2011%2014.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138a1.3%201.3%200%200%201-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0-4c-2.46%200-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5%201.5%200%200%201-.39-.272.3.3%200%200%201-.047-.064.3.3%200%200%201%20.048-.064c.066-.073.189-.167.389-.272.399-.21%201.009-.413%201.805-.59C6.328%209.722%208.54%209.5%2011%209.5s4.672.222%206.256.574c.795.177%201.405.38%201.804.59.2.105.323.2.39.272a.3.3%200%200%201%20.047.064.3.3%200%200%201-.048.064%201.4%201.4%200%200%201-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0%20.018v.002zm17.002.002v-.002zm0-.018v-.002z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-terrain .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2022%2022%22%3E%3Cpath%20d%3D%22m1.754%2013.406%204.453-4.851%203.09%203.09%203.281%203.277.969-.969-3.309-3.312%203.844-4.121%206.148%206.886h1.082v-.855l-7.207-8.07-4.84%205.187L6.169%206.57l-5.48%205.965v.871ZM.688%2016.844h20.625v1.375H.688Zm0%200%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-terrain-enabled .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2022%2022%22%3E%3Cpath%20d%3D%22m1.754%2013.406%204.453-4.851%203.09%203.09%203.281%203.277.969-.969-3.309-3.312%203.844-4.121%206.148%206.886h1.082v-.855l-7.207-8.07-4.84%205.187L6.169%206.57l-5.48%205.965v.871ZM.688%2016.844h20.625v1.375H.688Zm0%200%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23aaa%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e58978%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e54e33%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{animation:maplibregl-spin 2s linear infinite}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23999%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e58978%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e54e33%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E\")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E\")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23666%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E\")}}@keyframes maplibregl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.maplibregl-ctrl-logo{width:88px;height:23px;margin:0 0 -4px -4px;display:block;background-repeat:no-repeat;cursor:pointer;overflow:hidden;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}a.maplibregl-ctrl-logo.maplibregl-compact{width:14px}@media (forced-colors:active){a.maplibregl-ctrl-logo{background-color:transparent;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}}@media (forced-colors:active) and (prefers-color-scheme:light){a.maplibregl-ctrl-logo{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}}.maplibregl-ctrl.maplibregl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{min-height:20px;padding:2px 24px 2px 0;margin:10px;position:relative;background-color:#fff;color:#000;border-radius:12px;box-sizing:content-box}.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 8px 2px 28px;border-radius:12px}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.maplibregl-ctrl-attrib-button{display:none;cursor:pointer;position:absolute;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E\");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;box-sizing:border-box;border-radius:12px;outline:none;top:0;right:0;border:0}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;list-style:none}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button::-webkit-details-marker{display:none}.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner{display:block}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{top:0;right:0}.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{top:0;left:0}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}}@media screen and (forced-colors:active){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23fff%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E\")}}@media screen and (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E\")}}.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.maplibregl-attrib-empty{display:none}.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;white-space:nowrap;border-color:#333;border-style:none solid solid;border-width:medium 2px 2px;padding:0 5px;color:#333;box-sizing:border-box}.maplibregl-popup{position:absolute;top:0;left:0;display:flex;will-change:transform;pointer-events:none}.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column}.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse}.maplibregl-popup-anchor-left{flex-direction:row}.maplibregl-popup-anchor-right{flex-direction:row-reverse}.maplibregl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}[dir=rtl] .maplibregl-popup-anchor-left{flex-direction:row-reverse}[dir=rtl] .maplibregl-popup-anchor-right{flex-direction:row}[dir=rtl] .maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-start}[dir=rtl] .maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-start}.maplibregl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:transparent}.maplibregl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.maplibregl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:15px 10px;pointer-events:auto}.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0}.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0}.maplibregl-popup-track-pointer{display:none}.maplibregl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex}.maplibregl-map:active .maplibregl-popup-track-pointer{display:none}.maplibregl-marker{position:absolute;top:0;left:0;will-change:transform;transition:opacity .2s}.maplibregl-marker-draggable{cursor:grab}.maplibregl-user-location-dot,.maplibregl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.maplibregl-user-location-dot:before{content:\"\";position:absolute;animation:maplibregl-user-location-dot-pulse 2s infinite}.maplibregl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:\"\";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box;box-shadow:0 0 3px rgba(0,0,0,.35)}@media (prefers-reduced-motion:reduce){.maplibregl-user-location-dot:before{animation:none}}@keyframes maplibregl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.maplibregl-user-location-dot-stale{background-color:#aaa}.maplibregl-user-location-dot-stale:after{display:none}.maplibregl-user-location-accuracy-circle{background-color:#1da1f233;width:1px;height:1px;border-radius:100%}.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair}.maplibregl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}.maplibregl-cooperative-gesture-screen{background:rgba(0,0,0,.4);position:absolute;inset:0;display:flex;justify-content:center;align-items:center;color:#fff;padding:1rem;font-size:1.4em;line-height:1.2;opacity:0;pointer-events:none;transition:opacity 1s ease 1s;z-index:99999}.maplibregl-cooperative-gesture-screen.maplibregl-show{opacity:1;transition:opacity .05s}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:none}@media (hover:none),(pointer:coarse){.maplibregl-cooperative-gesture-screen .maplibregl-desktop-message{display:none}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:block}}.maplibregl-pseudo-fullscreen{position:fixed!important;width:100%!important;height:100%!important;top:0!important;left:0!important;z-index:99999}',document.head.appendChild(e)}})()});var Tr=z(Vr=>{\"use strict\";var F_=ps(),YD=up(),VD=L_(),iGe=ph().addStyleRule,jD=At(),Rpe=zn(),Fpe=P0(),zpe=jD.extendFlat,z_=jD.extendDeepAll;Vr.modules={};Vr.allCategories={};Vr.allTypes=[];Vr.subplotsRegistry={};Vr.componentsRegistry={};Vr.layoutArrayContainers=[];Vr.layoutArrayRegexes=[];Vr.traceLayoutAttributes={};Vr.localeRegistry={};Vr.apiMethodRegistry={};Vr.collectableSubplotTypes=null;Vr.register=function(r){if(Vr.collectableSubplotTypes=null,r)r&&!Array.isArray(r)&&(r=[r]);else throw new Error(\"No argument passed to Plotly.register.\");for(var t=0;t<r.length;t++){var a=r[t];if(!a)throw new Error(\"Invalid module was attempted to be registered!\");switch(a.moduleType){case\"trace\":Npe(a);break;case\"component\":Bpe(a);break;case\"locale\":Ope(a);break;case\"apiMethod\":var n=a.name;Vr.apiMethodRegistry[n]=a.fn;break;default:throw new Error(\"Invalid module was attempted to be registered!\")}}};Vr.getModule=function(e){var r=Vr.modules[$D(e)];return r?r._module:!1};Vr.traceIs=function(e,r){if(e=$D(e),e===\"various\")return!1;var t=Vr.modules[e];return t||(e&&F_.log(\"Unrecognized trace type \"+e+\".\"),t=Vr.modules[Rpe.type.dflt]),!!t.categories[r]};Vr.getComponentMethod=function(e,r){var t=Vr.componentsRegistry[e];return t&&t[r]||YD};Vr.call=function(){var e=arguments[0],r=[].slice.call(arguments,1);return Vr.apiMethodRegistry[e].apply(null,r)};function Npe(e){var r=e.name,t=e.categories,a=e.meta;if(Vr.modules[r]){F_.log(\"Type \"+r+\" already registered\");return}Vr.subplotsRegistry[e.basePlotModule.name]||Ipe(e.basePlotModule);for(var n={},i=0;i<t.length;i++)n[t[i]]=!0,Vr.allCategories[t[i]]=!0;Vr.modules[r]={_module:e,categories:n},a&&Object.keys(a).length&&(Vr.modules[r].meta=a),Vr.allTypes.push(r);for(var o in Vr.componentsRegistry)XD(o,r);e.layoutAttributes&&zpe(Vr.traceLayoutAttributes,e.layoutAttributes);var l=e.basePlotModule,s=l.name;s===\"map\"&&GD(),(s===\"geo\"||s===\"map\")&&window.PlotlyGeoAssets===void 0&&(window.PlotlyGeoAssets={topojson:{}})}function Ipe(e){var r=e.name;if(Vr.subplotsRegistry[r]){F_.log(\"Plot type \"+r+\" already registered.\");return}WD(e),Vr.subplotsRegistry[r]=e;for(var t in Vr.componentsRegistry)ZD(t,e.name)}function Bpe(e){if(typeof e.name!=\"string\")throw new Error(\"Component module *name* must be a string.\");var r=e.name;Vr.componentsRegistry[r]=e,e.layoutAttributes&&(e.layoutAttributes._isLinkedToArray&&VD(Vr.layoutArrayContainers,r),WD(e));for(var t in Vr.modules)XD(r,t);for(var a in Vr.subplotsRegistry)ZD(r,a);e.schema&&e.schema.layout&&z_(Fpe,e.schema.layout)}function Ope(e){var r=e.name,t=r.split(\"-\")[0],a=e.dictionary,n=e.format,i=a&&Object.keys(a).length,o=n&&Object.keys(n).length,l=Vr.localeRegistry,s=l[r];if(s||(l[r]=s={}),t!==r){var u=l[t];u||(l[t]=u={}),i&&u.dictionary===s.dictionary&&(u.dictionary=a),o&&u.format===s.format&&(u.format=n)}i&&(s.dictionary=a),o&&(s.format=n)}function WD(e){if(e.layoutAttributes){var r=e.layoutAttributes._arrayAttrRegexps;if(r)for(var t=0;t<r.length;t++)VD(Vr.layoutArrayRegexes,r[t])}}function XD(e,r){var t=Vr.componentsRegistry[e].schema;if(!(!t||!t.traces)){var a=t.traces[r];a&&z_(Vr.modules[r]._module.attributes,a)}}function ZD(e,r){var t=Vr.componentsRegistry[e].schema;if(!(!t||!t.subplots)){var a=Vr.subplotsRegistry[r],n=a.layoutAttributes,i=a.attr===\"subplot\"?a.name:a.attr;Array.isArray(i)&&(i=i[0]);var o=t.subplots[i];n&&o&&z_(n,o)}}function $D(e){return typeof e==\"object\"&&(e=e.type),e}});var iE=z(fa=>{\"use strict\";var Hpe=p0().timeFormat,aE=Ir(),N_=ps(),_s=(g0(),un(y0)).mod,z0=Gt(),Ri=z0.BADNUM,Xn=z0.ONEDAY,yh=z0.ONEHOUR,xs=z0.ONEMIN,F0=z0.ONESEC,gh=z0.EPOCHJD,El=Tr(),JD=p0().utcFormat,Upe=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\d)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,Gpe=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\di?)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,KD=new Date().getFullYear()-70;function Pl(e){return e&&El.componentsRegistry.calendars&&typeof e==\"string\"&&e!==\"gregorian\"}fa.dateTick0=function(e,r){var t=Ype(e,!!r);if(r<2)return t;var a=fa.dateTime2ms(t,e);return a+=Xn*(r-1),fa.ms2DateTime(a,0,e)};function Ype(e,r){return Pl(e)?r?El.getComponentMethod(\"calendars\",\"CANONICAL_SUNDAY\")[e]:El.getComponentMethod(\"calendars\",\"CANONICAL_TICK\")[e]:r?\"2000-01-02\":\"2000-01-01\"}fa.dfltRange=function(e){return Pl(e)?El.getComponentMethod(\"calendars\",\"DFLTRANGE\")[e]:[\"2000-01-01\",\"2001-01-01\"]};fa.isJSDate=function(e){return typeof e==\"object\"&&e!==null&&typeof e.getTime==\"function\"};var gp,bp;fa.dateTime2ms=function(e,r){if(fa.isJSDate(e)){var t=e.getTimezoneOffset()*xs,a=(e.getUTCMinutes()-e.getMinutes())*xs+(e.getUTCSeconds()-e.getSeconds())*F0+(e.getUTCMilliseconds()-e.getMilliseconds());if(a){var n=3*xs;t=t-n/2+_s(a-t+n/2,n)}return e=Number(e)-t,e>=gp&&e<=bp?e:Ri}if(typeof e!=\"string\"&&typeof e!=\"number\")return Ri;e=String(e);var i=Pl(r),o=e.charAt(0);i&&(o===\"G\"||o===\"g\")&&(e=e.slice(1),r=\"\");var l=i&&r.slice(0,7)===\"chinese\",s=e.match(l?Gpe:Upe);if(!s)return Ri;var u=s[1],f=s[3]||\"1\",c=Number(s[5]||1),v=Number(s[7]||0),d=Number(s[9]||0),p=Number(s[11]||0);if(i){if(u.length===2)return Ri;u=Number(u);var y;try{var m=El.getComponentMethod(\"calendars\",\"getCal\")(r);if(l){var b=f.charAt(f.length-1)===\"i\";f=parseInt(f,10),y=m.newDate(u,m.toMonthIndex(u,f,b),c)}else y=m.newDate(u,Number(f),c)}catch(w){return Ri}return y?(y.toJD()-gh)*Xn+v*yh+d*xs+p*F0:Ri}u.length===2?u=(Number(u)+2e3-KD)%100+KD:u=Number(u),f-=1;var T=new Date(Date.UTC(2e3,f,c,v,d));return T.setUTCFullYear(u),T.getUTCMonth()!==f||T.getUTCDate()!==c?Ri:T.getTime()+p*F0};gp=fa.MIN_MS=fa.dateTime2ms(\"-9999\");bp=fa.MAX_MS=fa.dateTime2ms(\"9999-12-31 23:59:59.9999\");fa.isDateTime=function(e,r){return fa.dateTime2ms(e,r)!==Ri};function R0(e,r){return String(e+Math.pow(10,r)).slice(1)}var yp=90*Xn,QD=3*yh,eE=5*xs;fa.ms2DateTime=function(e,r,t){if(typeof e!=\"number\"||!(e>=gp&&e<=bp))return Ri;r||(r=0);var a=Math.floor(_s(e+.05,1)*10),n=Math.round(e-a/10),i,o,l,s,u,f;if(Pl(t)){var c=Math.floor(n/Xn)+gh,v=Math.floor(_s(e,Xn));try{i=El.getComponentMethod(\"calendars\",\"getCal\")(t).fromJD(c).formatDate(\"yyyy-mm-dd\")}catch(d){i=JD(\"G%Y-%m-%d\")(new Date(n))}if(i.charAt(0)===\"-\")for(;i.length<11;)i=\"-0\"+i.slice(1);else for(;i.length<10;)i=\"0\"+i;o=r<yp?Math.floor(v/yh):0,l=r<yp?Math.floor(v%yh/xs):0,s=r<QD?Math.floor(v%xs/F0):0,u=r<eE?v%F0*10+a:0}else f=new Date(n),i=JD(\"%Y-%m-%d\")(f),o=r<yp?f.getUTCHours():0,l=r<yp?f.getUTCMinutes():0,s=r<QD?f.getUTCSeconds():0,u=r<eE?f.getUTCMilliseconds()*10+a:0;return nE(i,o,l,s,u)};fa.ms2DateTimeLocal=function(e){if(!(e>=gp+Xn&&e<=bp-Xn))return Ri;var r=Math.floor(_s(e+.05,1)*10),t=new Date(Math.round(e-r/10)),a=Hpe(\"%Y-%m-%d\")(t),n=t.getHours(),i=t.getMinutes(),o=t.getSeconds(),l=t.getUTCMilliseconds()*10+r;return nE(a,n,i,o,l)};function nE(e,r,t,a,n){if((r||t||a||n)&&(e+=\" \"+R0(r,2)+\":\"+R0(t,2),(a||n)&&(e+=\":\"+R0(a,2),n))){for(var i=4;n%10===0;)i-=1,n/=10;e+=\".\"+R0(n,i)}return e}fa.cleanDate=function(e,r,t){if(e===Ri)return r;if(fa.isJSDate(e)||typeof e==\"number\"&&isFinite(e)){if(Pl(t))return N_.error(\"JS Dates and milliseconds are incompatible with world calendars\",e),r;if(e=fa.ms2DateTimeLocal(+e),!e&&r!==void 0)return r}else if(!fa.isDateTime(e,t))return N_.error(\"unrecognized date\",e),r;return e};var Vpe=/%\\d?f/g,jpe=/%h/g,Wpe={1:\"1\",2:\"1\",3:\"2\",4:\"2\"};function rE(e,r,t,a){e=e.replace(Vpe,function(i){var o=Math.min(+i.charAt(1)||6,6),l=(r/1e3%1+2).toFixed(o).slice(2).replace(/0+$/,\"\")||\"0\";return l});var n=new Date(Math.floor(r+.05));if(e=e.replace(jpe,function(){return Wpe[t(\"%q\")(n)]}),Pl(a))try{e=El.getComponentMethod(\"calendars\",\"worldCalFmt\")(e,r,a)}catch(i){return\"Invalid\"}return t(e)(n)}var Xpe=[59,59.9,59.99,59.999,59.9999];function Zpe(e,r){var t=_s(e+.05,Xn),a=R0(Math.floor(t/yh),2)+\":\"+R0(_s(Math.floor(t/xs),60),2);if(r!==\"M\"){aE(r)||(r=0);var n=Math.min(_s(e/F0,60),Xpe[r]),i=(100+n).toFixed(r).slice(1);r>0&&(i=i.replace(/0+$/,\"\").replace(/[\\.]$/,\"\")),a+=\":\"+i}return a}fa.formatDate=function(e,r,t,a,n,i){if(n=Pl(n)&&n,!r)if(t===\"y\")r=i.year;else if(t===\"m\")r=i.month;else if(t===\"d\")r=i.dayMonth+`\n`+i.year;else return Zpe(e,t)+`\n`+rE(i.dayMonthYear,e,a,n);return rE(r,e,a,n)};var tE=3*Xn;fa.incrementMonth=function(e,r,t){t=Pl(t)&&t;var a=_s(e,Xn);if(e=Math.round(e-a),t)try{var n=Math.round(e/Xn)+gh,i=El.getComponentMethod(\"calendars\",\"getCal\")(t),o=i.fromJD(n);return r%12?i.add(o,r,\"m\"):i.add(o,r/12,\"y\"),(o.toJD()-gh)*Xn+a}catch(s){N_.error(\"invalid ms \"+e+\" in calendar \"+t)}var l=new Date(e+tE);return l.setUTCMonth(l.getUTCMonth()+r)+a-tE};fa.findExactDates=function(e,r){for(var t=0,a=0,n=0,i=0,o,l,s=Pl(r)&&El.getComponentMethod(\"calendars\",\"getCal\")(r),u=0;u<e.length;u++){if(l=e[u],!aE(l)){i++;continue}if(!(l%Xn))if(s)try{o=s.fromJD(l/Xn+gh),o.day()===1?o.month()===1?t++:a++:n++}catch(c){}else o=new Date(l),o.getUTCDate()===1?o.getUTCMonth()===0?t++:a++:n++}a+=t,n+=a;var f=e.length-i;return{exactYears:t/f,exactMonths:a/f,exactDays:n/f}}});var I_=z((sGe,oE)=>{\"use strict\";oE.exports=function(r){return r}});var O_=z(Rl=>{\"use strict\";var $pe=Ir(),Jpe=ps(),Kpe=I_(),Qpe=Gt().BADNUM,B_=1e-9;Rl.findBin=function(e,r,t){if($pe(r.start))return t?Math.ceil((e-r.start)/r.size-B_)-1:Math.floor((e-r.start)/r.size+B_);var a=0,n=r.length,i=0,o=n>1?(r[n-1]-r[0])/(n-1):1,l,s;for(o>=0?s=t?eme:rme:s=t?ame:tme,e+=o*B_*(t?-1:1)*(o>=0?1:-1);a<n&&i++<100;)l=Math.floor((a+n)/2),s(r[l],e)?a=l+1:n=l;return i>90&&Jpe.log(\"Long binary search...\"),a-1};function eme(e,r){return e<r}function rme(e,r){return e<=r}function tme(e,r){return e>r}function ame(e,r){return e>=r}Rl.sorterAsc=function(e,r){return e-r};Rl.sorterDes=function(e,r){return r-e};Rl.distinctVals=function(e){var r=e.slice();r.sort(Rl.sorterAsc);var t;for(t=r.length-1;t>-1&&r[t]===Qpe;t--);for(var a=r[t]-r[0]||1,n=a/(t||1)/1e4,i=[],o,l=0;l<=t;l++){var s=r[l],u=s-o;o===void 0?(i.push(s),o=s):u>n&&(a=Math.min(a,u),i.push(s),o=s)}return{vals:i,minDiff:a}};Rl.roundUp=function(e,r,t){for(var a=0,n=r.length-1,i,o=0,l=t?0:1,s=t?1:0,u=t?Math.ceil:Math.floor;a<n&&o++<100;)i=u((a+n)/2),r[i]<=e?a=i+l:n=i-s;return r[a]};Rl.sort=function(e,r){for(var t=0,a=0,n=1;n<e.length;n++){var i=r(e[n],e[n-1]);if(i<0?t=1:i>0&&(a=1),t&&a)return e.sort(r)}return a?e:e.reverse()};Rl.findIndexOfMin=function(e,r){r=r||Kpe;for(var t=1/0,a,n=0;n<e.length;n++){var i=r(e[n]);i<t&&(t=i,a=n)}return a}});var H_={};d0(H_,{default:()=>ime});function nme(e){return Object.keys(e).sort()}var ime,U_=h0(()=>{\"use strict\";ime=nme});var lE=z(ca=>{\"use strict\";var bh=Ir(),ome=Vn().isArrayOrTypedArray;ca.aggNums=function(e,r,t,a){var n,i;if((!a||a>t.length)&&(a=t.length),bh(r)||(r=!1),ome(t[0])){for(i=new Array(a),n=0;n<a;n++)i[n]=ca.aggNums(e,r,t[n]);t=i}for(n=0;n<a;n++)bh(r)?bh(t[n])&&(r=e(+r,+t[n])):r=t[n];return r};ca.len=function(e){return ca.aggNums(function(r){return r+1},0,e)};ca.mean=function(e,r){return r||(r=ca.len(e)),ca.aggNums(function(t,a){return t+a},0,e)/r};ca.geometricMean=function(e,r){return r||(r=ca.len(e)),Math.pow(ca.aggNums(function(t,a){return t*a},1,e),1/r)};ca.midRange=function(e){if(!(e===void 0||e.length===0))return(ca.aggNums(Math.max,null,e)+ca.aggNums(Math.min,null,e))/2};ca.variance=function(e,r,t){return r||(r=ca.len(e)),bh(t)||(t=ca.mean(e,r)),ca.aggNums(function(a,n){return a+Math.pow(n-t,2)},0,e)/r};ca.stdev=function(e,r,t){return Math.sqrt(ca.variance(e,r,t))};ca.median=function(e){var r=e.slice().sort();return ca.interp(r,.5)};ca.interp=function(e,r){if(!bh(r))throw\"n should be a finite number\";if(r=r*e.length-.5,r<0)return e[0];if(r>e.length-1)return e[e.length-1];var t=r%1;return t*e[Math.ceil(r)]+(1-t)*e[Math.floor(r)]}});var vE=z((cGe,cE)=>{\"use strict\";var sE=(g0(),un(y0)),G_=sE.mod,lme=sE.modHalf,xh=Math.PI,ws=2*xh;function sme(e){return e/180*xh}function ume(e){return e/xh*180}function Y_(e){return Math.abs(e[1]-e[0])>ws-1e-14}function uE(e,r){return lme(r-e,ws)}function fme(e,r){return Math.abs(uE(e,r))}function fE(e,r){if(Y_(r))return!0;var t,a;r[0]<r[1]?(t=r[0],a=r[1]):(t=r[1],a=r[0]),t=G_(t,ws),a=G_(a,ws),t>a&&(a+=ws);var n=G_(e,ws),i=n+ws;return n>=t&&n<=a||i>=t&&i<=a}function cme(e,r,t,a){if(!fE(r,a))return!1;var n,i;return t[0]<t[1]?(n=t[0],i=t[1]):(n=t[1],i=t[0]),e>=n&&e<=i}function V_(e,r,t,a,n,i,o){n=n||0,i=i||0;var l=Y_([t,a]),s,u,f,c,v;l?(s=0,u=xh,f=ws):t<a?(s=t,f=a):(s=a,f=t),e<r?(c=e,v=r):(c=r,v=e);function d(b,T){return[b*Math.cos(T)+n,i-b*Math.sin(T)]}var p=Math.abs(f-s)<=xh?0:1;function y(b,T,w){return\"A\"+[b,b]+\" \"+[0,p,w]+\" \"+d(b,T)}var m;return l?c===null?m=\"M\"+d(v,s)+y(v,u,0)+y(v,f,0)+\"Z\":m=\"M\"+d(c,s)+y(c,u,0)+y(c,f,0)+\"ZM\"+d(v,s)+y(v,u,1)+y(v,f,1)+\"Z\":c===null?(m=\"M\"+d(v,s)+y(v,f,0),o&&(m+=\"L0,0Z\")):m=\"M\"+d(c,s)+\"L\"+d(v,s)+y(v,f,0)+\"L\"+d(c,f)+y(c,s,1)+\"Z\",m}function vme(e,r,t,a,n){return V_(null,e,r,t,a,n,0)}function hme(e,r,t,a,n){return V_(null,e,r,t,a,n,1)}function dme(e,r,t,a,n,i){return V_(e,r,t,a,n,i,1)}cE.exports={deg2rad:sme,rad2deg:ume,angleDelta:uE,angleDist:fme,isFullCircle:Y_,isAngleInsideSector:fE,isPtInsideSector:cme,pathArc:vme,pathSector:hme,pathAnnulus:dme}});var hE=z(zu=>{\"use strict\";zu.isLeftAnchor=function(r){return r.xanchor===\"left\"||r.xanchor===\"auto\"&&r.x<=1/3};zu.isCenterAnchor=function(r){return r.xanchor===\"center\"||r.xanchor===\"auto\"&&r.x>1/3&&r.x<2/3};zu.isRightAnchor=function(r){return r.xanchor===\"right\"||r.xanchor===\"auto\"&&r.x>=2/3};zu.isTopAnchor=function(r){return r.yanchor===\"top\"||r.yanchor===\"auto\"&&r.y>=2/3};zu.isMiddleAnchor=function(r){return r.yanchor===\"middle\"||r.yanchor===\"auto\"&&r.y>1/3&&r.y<2/3};zu.isBottomAnchor=function(r){return r.yanchor===\"bottom\"||r.yanchor===\"auto\"&&r.y<=1/3}});var mE=z(Nu=>{\"use strict\";var j_=(g0(),un(y0)).mod;Nu.segmentsIntersect=pE;function pE(e,r,t,a,n,i,o,l){var s=t-e,u=n-e,f=o-n,c=a-r,v=i-r,d=l-i,p=s*d-f*c;if(p===0)return null;var y=(u*d-f*v)/p,m=(u*c-s*v)/p;return m<0||m>1||y<0||y>1?null:{x:e+s*y,y:r+c*y}}Nu.segmentDistance=function(r,t,a,n,i,o,l,s){if(pE(r,t,a,n,i,o,l,s))return 0;var u=a-r,f=n-t,c=l-i,v=s-o,d=u*u+f*f,p=c*c+v*v,y=Math.min(xp(u,f,d,i-r,o-t),xp(u,f,d,l-r,s-t),xp(c,v,p,r-i,t-o),xp(c,v,p,a-i,n-o));return Math.sqrt(y)};function xp(e,r,t,a,n){var i=a*e+n*r;if(i<0)return a*a+n*n;if(i>t){var o=a-e,l=n-r;return o*o+l*l}else{var s=a*r-n*e;return s*s/t}}var _p,W_,dE;Nu.getTextLocation=function(r,t,a,n){if((r!==W_||n!==dE)&&(_p={},W_=r,dE=n),_p[a])return _p[a];var i=r.getPointAtLength(j_(a-n/2,t)),o=r.getPointAtLength(j_(a+n/2,t)),l=Math.atan((o.y-i.y)/(o.x-i.x)),s=r.getPointAtLength(j_(a,t)),u=(s.x*4+i.x+o.x)/6,f=(s.y*4+i.y+o.y)/6,c={x:u,y:f,theta:l};return _p[a]=c,c};Nu.clearLocationCache=function(){W_=null};Nu.getVisibleSegment=function(r,t,a){var n=t.left,i=t.right,o=t.top,l=t.bottom,s=0,u=r.getTotalLength(),f=u,c,v;function d(y){var m=r.getPointAtLength(y);y===0?c=m:y===u&&(v=m);var b=m.x<n?n-m.x:m.x>i?m.x-i:0,T=m.y<o?o-m.y:m.y>l?m.y-l:0;return Math.sqrt(b*b+T*T)}for(var p=d(s);p;){if(s+=p+a,s>f)return;p=d(s)}for(p=d(f);p;){if(f-=p+a,s>f)return;p=d(f)}return{min:s,max:f,len:f-s,total:u,isClosed:s===0&&f===u&&Math.abs(c.x-v.x)<.1&&Math.abs(c.y-v.y)<.1}};Nu.findPointOnPath=function(r,t,a,n){n=n||{};for(var i=n.pathLength||r.getTotalLength(),o=n.tolerance||.001,l=n.iterationLimit||30,s=r.getPointAtLength(0)[a]>r.getPointAtLength(i)[a]?-1:1,u=0,f=0,c=i,v,d,p;u<l;){if(v=(f+c)/2,d=r.getPointAtLength(v),p=d[a]-t,Math.abs(p)<o)return d;s*p>0?c=v:f=v,u++}return d}});var wp=z(_h=>{\"use strict\";var Fl={};_h.throttle=function(r,t,a){var n=Fl[r],i=Date.now();if(!n){for(var o in Fl)Fl[o].ts<i-6e4&&delete Fl[o];n=Fl[r]={ts:0,timer:null}}yE(n);function l(){a(),n.ts=Date.now(),n.onDone&&(n.onDone(),n.onDone=null)}if(i>n.ts+t){l();return}n.timer=setTimeout(function(){l(),n.timer=null},t)};_h.done=function(e){var r=Fl[e];return!r||!r.timer?Promise.resolve():new Promise(function(t){var a=r.onDone;r.onDone=function(){a&&a(),t(),r.onDone=null}})};_h.clear=function(e){if(e)yE(Fl[e]),delete Fl[e];else for(var r in Fl)_h.clear(r)};function yE(e){e&&e.timer!==null&&(clearTimeout(e.timer),e.timer=null)}});var bE=z((pGe,gE)=>{\"use strict\";gE.exports=function(r){r._responsiveChartHandler&&(window.removeEventListener(\"resize\",r._responsiveChartHandler),delete r._responsiveChartHandler)}});var xE=z((mGe,Tp)=>{\"use strict\";Tp.exports=X_;Tp.exports.isMobile=X_;Tp.exports.default=X_;var pme=/(android|bb\\d+|meego).+mobile|armv7l|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|redmi|series[46]0|samsungbrowser.*mobile|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,mme=/CrOS/,yme=/android|ipad|playbook|silk/i;function X_(e){e||(e={});let r=e.ua;if(!r&&typeof navigator!=\"undefined\"&&(r=navigator.userAgent),r&&r.headers&&typeof r.headers[\"user-agent\"]==\"string\"&&(r=r.headers[\"user-agent\"]),typeof r!=\"string\")return!1;let t=pme.test(r)&&!mme.test(r)||!!e.tablet&&yme.test(r);return!t&&e.tablet&&e.featureDetect&&navigator&&navigator.maxTouchPoints>1&&r.indexOf(\"Macintosh\")!==-1&&r.indexOf(\"Safari\")!==-1&&(t=!0),t}});var wE=z((yGe,_E)=>{\"use strict\";var gme=Ir(),bme=xE();_E.exports=function(r){var t;if(r&&r.hasOwnProperty(\"userAgent\")?t=r.userAgent:t=xme(),typeof t!=\"string\")return!0;var a=bme({ua:{headers:{\"user-agent\":t}},tablet:!0,featureDetect:!1});if(!a)for(var n=t.split(\" \"),i=1;i<n.length;i++){var o=n[i];if(o.indexOf(\"Safari\")!==-1)for(var l=i-1;l>-1;l--){var s=n[l];if(s.slice(0,8)===\"Version/\"){var u=s.slice(8).split(\".\")[0];if(gme(u)&&(u=+u),u>=13)return!0}}}return a};function xme(){var e;return typeof navigator!=\"undefined\"&&(e=navigator.userAgent),e&&e.headers&&typeof e.headers[\"user-agent\"]==\"string\"&&(e=e.headers[\"user-agent\"]),e}});var AE=z((gGe,TE)=>{\"use strict\";var _me=Er();TE.exports=function(r,t,a){var n=r.selectAll(\"g.\"+a.replace(/\\s/g,\".\")).data(t,function(o){return o[0].trace.uid});n.exit().remove(),n.enter().append(\"g\").attr(\"class\",a),n.order();var i=r.classed(\"rangeplot\")?\"nodeRangePlot3\":\"node3\";return n.each(function(o){o[0][i]=_me.select(this)}),n}});var kE=z((bGe,ME)=>{\"use strict\";var wme=Tr();ME.exports=function(r,t){for(var a=r._context.locale,n=0;n<2;n++){for(var i=r._context.locales,o=0;o<2;o++){var l=(i[a]||{}).dictionary;if(l){var s=l[t];if(s)return s}i=wme.localeRegistry}var u=a.split(\"-\")[0];if(u===a)break;a=u}return t}});var qE=z((xGe,SE)=>{\"use strict\";SE.exports=function(r){for(var t={},a=[],n=0,i=0;i<r.length;i++){var o=r[i];t[o]!==1&&(t[o]=1,a[n++]=o)}return a}});var CE=z((_Ge,LE)=>{\"use strict\";LE.exports=function(r){for(var t=Mme(r)?Ame:Tme,a=[],n=0;n<r.length;n++){var i=r[n];t(i)&&a.push(i)}return a};function Tme(e){return e.visible===!0}function Ame(e){var r=e[0].trace;return r.visible===!0&&r._length!==0}function Mme(e){return Array.isArray(e)&&Array.isArray(e[0])&&e[0][0]&&e[0][0].trace}});var EE=z((wGe,DE)=>{\"use strict\";DE.exports=function(r,t){if(!t)return r;var a=1/Math.abs(t),n=a>1?(a*r+a*t)/a:r+t,i=String(n).length;if(i>16){var o=String(t).length,l=String(r).length;if(i>=l+o){var s=parseFloat(n).toPrecision(12);s.indexOf(\"e+\")===-1&&(n=+s)}}return n}});var FE={};d0(FE,{default:()=>qme});function Sme(e){return typeof e==\"string\"&&(e=e.replace(kme,\"\")),(0,PE.default)(e)?Number(e):RE.BADNUM}var PE,RE,kme,qme,zE=h0(()=>{\"use strict\";PE=cs(Ir()),RE=cs(Gt()),kme=/^['\"%,$#\\s']+|[, ]|['\"%,$#\\s']+$/g;qme=Sme});var BE=z((TGe,IE)=>{\"use strict\";var Lme=/<[^>]*>/g,Cme=/[\\p{S}\\p{P}]/gu,Dme=/[\\p{Cc}\\p{Cf}\\uFE00-\\uFE0F\\u20E3]/gu,Eme=/�/g,Pme=/\\s+/g,Ap=\"-\",NE=Ap.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\"),Rme=new RegExp(NE+\"{3,}\",\"g\"),Fme=new RegExp(NE+\"$\",\"g\"),zme=60;function Nme(e){return typeof e.toWellFormed==\"function\"?e.toWellFormed():new TextDecoder().decode(new TextEncoder().encode(e))}IE.exports=function(r,t=zme){var a=Nme(r!=null?r:\"\").replace(Eme,\"\").replace(Lme,\" \").replace(Cme,n=>n===Ap?n:\"\").toLowerCase().trim().replace(Pme,Ap).replace(Dme,\"\").replace(Rme,Ap);return a.length<=t?a:Array.from(a).slice(0,t).join(\"\").replace(Fme,\"\")}});var ke=z((AGe,JE)=>{\"use strict\";var wh=Er(),Ime=p0().utcFormat,Bme=Y5().format,VE=Ir(),jE=Gt(),WE=jE.FP_SAFE,Ome=-WE,OE=jE.BADNUM,de=JE.exports={};de.adjustFormat=function(r){if(!r||/^\\d[.]\\df/.test(r)||/[.]\\d%/.test(r))return r;if(r===\"0.f\")return\"~f\";if(/^\\d%/.test(r))return\"~%\";if(/^\\ds/.test(r))return\"~s\";var t=(r.match(/^[+\\-( ]?/)||[\"\"])[0],a=r.slice(t.length);return!/^[~,.0$#]/.test(a)&&/[&fps]/.test(a)?t+\"~\"+a:r};var HE={};de.warnBadFormat=function(e){var r=String(e);HE[r]||(HE[r]=1,de.warn('encountered bad format: \"'+r+'\"'))};de.noFormat=function(e){return String(e)};de.numberFormat=function(e){var r;try{r=Bme(de.adjustFormat(e))}catch(t){return de.warnBadFormat(e),de.noFormat}return r};de.nestedProperty=C1();de.keyedContainer=DS();de.relativeAttr=PS();de.isPlainObject=Au();de.toLogRange=E1();de.relinkPrivateKeys=NS();var Ts=Vn();de.isArrayBuffer=Ts.isArrayBuffer;de.isTypedArray=Ts.isTypedArray;de.isArrayOrTypedArray=Ts.isArrayOrTypedArray;de.isArray1D=Ts.isArray1D;de.ensureArray=Ts.ensureArray;de.concat=Ts.concat;de.maxRowLength=Ts.maxRowLength;de.minRowLength=Ts.minRowLength;var XE=(g0(),un(y0));de.mod=XE.mod;de.modHalf=XE.modHalf;var As=iC();de.valObjectMeta=As.valObjectMeta;de.coerce=As.coerce;de.coerce2=As.coerce2;de.coerceFont=As.coerceFont;de.coercePattern=As.coercePattern;de.coerceHoverinfo=As.coerceHoverinfo;de.coerceSelectionMarkerOpacity=As.coerceSelectionMarkerOpacity;de.validate=As.validate;var ci=iE();de.dateTime2ms=ci.dateTime2ms;de.isDateTime=ci.isDateTime;de.ms2DateTime=ci.ms2DateTime;de.ms2DateTimeLocal=ci.ms2DateTimeLocal;de.cleanDate=ci.cleanDate;de.isJSDate=ci.isJSDate;de.formatDate=ci.formatDate;de.incrementMonth=ci.incrementMonth;de.dateTick0=ci.dateTick0;de.dfltRange=ci.dfltRange;de.findExactDates=ci.findExactDates;de.MIN_MS=ci.MIN_MS;de.MAX_MS=ci.MAX_MS;var Iu=O_();de.findBin=Iu.findBin;de.sorterAsc=Iu.sorterAsc;de.sorterDes=Iu.sorterDes;de.distinctVals=Iu.distinctVals;de.roundUp=Iu.roundUp;de.sort=Iu.sort;de.findIndexOfMin=Iu.findIndexOfMin;de.sortObjectKeys=(U_(),un(H_)).default;var zl=lE();de.aggNums=zl.aggNums;de.len=zl.len;de.mean=zl.mean;de.geometricMean=zl.geometricMean;de.median=zl.median;de.midRange=zl.midRange;de.variance=zl.variance;de.stdev=zl.stdev;de.interp=zl.interp;var To=fp();de.init2dArray=To.init2dArray;de.transposeRagged=To.transposeRagged;de.dot=To.dot;de.translationMatrix=To.translationMatrix;de.rotationMatrix=To.rotationMatrix;de.rotationXYMatrix=To.rotationXYMatrix;de.apply3DTransform=To.apply3DTransform;de.apply2DTransform=To.apply2DTransform;de.apply2DTransform2=To.apply2DTransform2;de.convertCssMatrix=To.convertCssMatrix;de.inverseTransformMatrix=To.inverseTransformMatrix;var Ko=vE();de.deg2rad=Ko.deg2rad;de.rad2deg=Ko.rad2deg;de.angleDelta=Ko.angleDelta;de.angleDist=Ko.angleDist;de.isFullCircle=Ko.isFullCircle;de.isAngleInsideSector=Ko.isAngleInsideSector;de.isPtInsideSector=Ko.isPtInsideSector;de.pathArc=Ko.pathArc;de.pathSector=Ko.pathSector;de.pathAnnulus=Ko.pathAnnulus;var I0=hE();de.isLeftAnchor=I0.isLeftAnchor;de.isCenterAnchor=I0.isCenterAnchor;de.isRightAnchor=I0.isRightAnchor;de.isTopAnchor=I0.isTopAnchor;de.isMiddleAnchor=I0.isMiddleAnchor;de.isBottomAnchor=I0.isBottomAnchor;var B0=mE();de.segmentsIntersect=B0.segmentsIntersect;de.segmentDistance=B0.segmentDistance;de.getTextLocation=B0.getTextLocation;de.clearLocationCache=B0.clearLocationCache;de.getVisibleSegment=B0.getVisibleSegment;de.findPointOnPath=B0.findPointOnPath;var Sp=At();de.extendFlat=Sp.extendFlat;de.extendDeep=Sp.extendDeep;de.extendDeepAll=Sp.extendDeepAll;de.extendDeepNoArrays=Sp.extendDeepNoArrays;var Z_=ps();de.log=Z_.log;de.warn=Z_.warn;de.error=Z_.error;var Hme=(C0(),un(L0));de.counterRegex=Hme.counter;var $_=wp();de.throttle=$_.throttle;de.throttleDone=$_.done;de.clearThrottle=$_.clear;var Ao=ph();de.getGraphDiv=Ao.getGraphDiv;de.isPlotDiv=Ao.isPlotDiv;de.removeElement=Ao.removeElement;de.addStyleRule=Ao.addStyleRule;de.addRelatedStyleRule=Ao.addRelatedStyleRule;de.deleteRelatedStyleRule=Ao.deleteRelatedStyleRule;de.setStyleOnHover=Ao.setStyleOnHover;de.getFullTransformMatrix=Ao.getFullTransformMatrix;de.getElementTransformMatrix=Ao.getElementTransformMatrix;de.getElementAndAncestors=Ao.getElementAndAncestors;de.equalDomRects=Ao.equalDomRects;de.clearResponsive=bE();de.preserveDrawingBuffer=wE();de.makeTraceGroups=AE();de._=kE();de.notifier=x_();de.filterUnique=qE();de.filterVisible=CE();de.pushUnique=L_();de.increment=EE();de.cleanNumber=(zE(),un(FE)).default;de.slugify=BE();de.ensureNumber=function(r){return VE(r)?(r=Number(r),r>WE||r<Ome?OE:r):OE};de.isIndex=function(e,r){return r!==void 0&&e>=r?!1:VE(e)&&e>=0&&e%1===0};de.noop=up();de.identity=I_();de.repeat=function(e,r){for(var t=new Array(r),a=0;a<r;a++)t[a]=e;return t};de.swapAttrs=function(e,r,t,a){t||(t=\"x\"),a||(a=\"y\");for(var n=0;n<r.length;n++){var i=r[n],o=de.nestedProperty(e,i.replace(\"?\",t)),l=de.nestedProperty(e,i.replace(\"?\",a)),s=o.get();o.set(l.get()),l.set(s)}};de.raiseToTop=function(r){r.parentNode.appendChild(r)};de.cancelTransition=function(e){return e.transition().duration(0)};de.constrain=function(e,r,t){return r>t?Math.max(t,Math.min(r,e)):Math.max(r,Math.min(t,e))};de.bBoxIntersect=function(e,r,t){return t=t||0,e.left<=r.right+t&&r.left<=e.right+t&&e.top<=r.bottom+t&&r.top<=e.bottom+t};de.simpleMap=function(e,r,t,a,n){for(var i=e.length,o=new Array(i),l=0;l<i;l++)o[l]=r(e[l],t,a,n);return o};de.randstr=function e(r,t,a,n){if(a||(a=16),t===void 0&&(t=24),t<=0)return\"0\";var i=Math.log(Math.pow(2,t))/Math.log(a),o=\"\",l,s,u;for(l=2;i===1/0;l*=2)i=Math.log(Math.pow(2,t/l))/Math.log(a)*l;var f=i-Math.floor(i);for(l=0;l<Math.floor(i);l++)u=Math.floor(Math.random()*a).toString(a),o=u+o;f&&(s=Math.pow(a,f),u=Math.floor(Math.random()*s).toString(a),o=u+o);var c=parseInt(o,a);return r&&r[o]||c!==1/0&&c>=Math.pow(2,t)?n>10?(de.warn(\"randstr failed uniqueness\"),o):e(r,t,a,(n||0)+1):o};de.OptionControl=function(e,r){e||(e={}),r||(r=\"opt\");var t={};return t.optionList=[],t._newoption=function(a){a[r]=e,t[a.name]=a,t.optionList.push(a)},t[\"_\"+r]=e,t};de.smooth=function(e,r){if(r=Math.round(r)||0,r<2)return e;var t=e.length,a=2*t,n=2*r-1,i=new Array(n),o=new Array(t),l,s,u,f;for(l=0;l<n;l++)i[l]=(1-Math.cos(Math.PI*(l+1)/r))/(2*r);for(l=0;l<t;l++){for(f=0,s=0;s<n;s++)u=l+s+1-r,u<-t?u-=a*Math.round(u/a):u>=a&&(u-=a*Math.floor(u/a)),u<0?u=-1-u:u>=t&&(u=a-1-u),f+=e[u]*i[s];o[l]=f}return o};de.syncOrAsync=function(e,r,t){var a,n;function i(){return de.syncOrAsync(e,r,t)}for(;e.length;)if(n=e.splice(0,1)[0],a=n(r),a&&a.then)return a.then(i);return t&&t(r)};de.stripTrailingSlash=function(e){return e.slice(-1)===\"/\"?e.slice(0,-1):e};de.noneOrAll=function(e,r,t){if(e){var a=!1,n=!0,i,o;for(i=0;i<t.length;i++)o=e[t[i]],o!=null?a=!0:n=!1;if(a&&!n)for(i=0;i<t.length;i++)e[t[i]]=r[t[i]]}};de.mergeArray=function(e,r,t,a){var n=typeof a==\"function\";if(de.isArrayOrTypedArray(e))for(var i=Math.min(e.length,r.length),o=0;o<i;o++){var l=e[o];r[o][t]=n?a(l):l}};de.mergeArrayCastPositive=function(e,r,t){return de.mergeArray(e,r,t,function(a){var n=+a;return isFinite(n)&&n>0?n:0})};de.fillArray=function(e,r,t,a){if(a=a||de.identity,de.isArrayOrTypedArray(e))for(var n=0;n<r.length;n++)r[n][t]=a(e[n])};de.castOption=function(e,r,t,a){a=a||de.identity;var n=de.nestedProperty(e,t).get();return de.isArrayOrTypedArray(n)?Array.isArray(r)&&de.isArrayOrTypedArray(n[r[0]])?a(n[r[0]][r[1]]):a(n[r]):n};de.extractOption=function(e,r,t,a){if(t in e)return e[t];var n=de.nestedProperty(r,a).get();if(!Array.isArray(n))return n};de.tagSelected=function(e,r,t){var a=r.selectedpoints;function n(u){return u!==void 0&&u<e.length}for(var i=0;i<a.length;i++){var o=a[i];if(de.isIndex(o)||de.isArrayOrTypedArray(o)&&de.isIndex(o[0])&&de.isIndex(o[1])){var l=o,s=t?t[l]:l;n(s)&&(e[s].selected=1)}}};de.getTargetArray=function(e,r){var t=r.target;if(typeof t==\"string\"&&t){var a=de.nestedProperty(e,t).get();return de.isArrayOrTypedArray(a)?a:!1}else if(de.isArrayOrTypedArray(t))return t;return!1};function ZE(e,r,t){var a={};typeof r!=\"object\"&&(r={});var n=t===\"pieLike\"?-1:3,i=Object.keys(e),o,l,s;for(o=0;o<i.length;o++)l=i[o],s=e[l],!(l.charAt(0)===\"_\"||typeof s==\"function\")&&(l===\"module\"?a[l]=s:Array.isArray(s)?l===\"colorscale\"||n===-1?a[l]=s.slice():a[l]=s.slice(0,n):de.isTypedArray(s)?n===-1?a[l]=s.subarray():a[l]=s.subarray(0,n):s&&typeof s==\"object\"?a[l]=ZE(e[l],r[l],t):a[l]=s);for(i=Object.keys(r),o=0;o<i.length;o++)l=i[o],s=r[l],(typeof s!=\"object\"||!(l in a)||typeof a[l]!=\"object\")&&(a[l]=s);return a}de.minExtend=ZE;de.titleCase=function(e){return e.charAt(0).toUpperCase()+e.slice(1)};de.containsAny=function(e,r){for(var t=0;t<r.length;t++)if(e.indexOf(r[t])!==-1)return!0;return!1};var Ume=/Version\\/[\\d\\.]+.*Safari/;de.isSafari=function(){return Ume.test(window.navigator.userAgent)};var Gme=/iPad|iPhone|iPod/;de.isIOS=function(){return Gme.test(window.navigator.userAgent)};var Yme=/Macintosh.+AppleWebKit.+Gecko\\)$/;de.isMacWKWebView=()=>Yme.test(window.navigator.userAgent);var Vme=/Firefox\\/(\\d+)\\.\\d+/;de.getFirefoxVersion=function(){var e=Vme.exec(window.navigator.userAgent);if(e&&e.length===2){var r=parseInt(e[1]);if(!isNaN(r))return r}return null};de.isD3Selection=function(e){return e instanceof wh.selection};de.ensureSingle=function(e,r,t,a){var n=e.select(r+(t?\".\"+t:\"\"));if(n.size())return n;var i=e.append(r);return t&&i.classed(t,!0),a&&i.call(a),i};de.ensureSingleById=function(e,r,t,a){var n=e.select(r+\"#\"+t);if(n.size())return n;var i=e.append(r).attr(\"id\",t);return a&&i.call(a),i};de.objectFromPath=function(e,r){for(var t=e.split(\".\"),a,n=a={},i=0;i<t.length;i++){var o=t[i],l=null,s=t[i].match(/(.*)\\[([0-9]+)\\]/);s?(o=s[1],l=s[2],a=a[o]=[],i===t.length-1?a[l]=r:a[l]={},a=a[l]):(i===t.length-1?a[o]=r:a[o]={},a=a[o])}return n};var jme=/^([^\\[\\.]+)\\.(.+)?/,Wme=/^([^\\.]+)\\[([0-9]+)\\](\\.)?(.+)?/;function Mp(e){return e.slice(0,2)===\"__\"}de.expandObjectPaths=function(e){var r,t,a,n,i,o,l;if(typeof e==\"object\"&&!Array.isArray(e)){for(t in e)if(e.hasOwnProperty(t))if(r=t.match(jme)){if(n=e[t],a=r[1],Mp(a))continue;delete e[t],e[a]=de.extendDeepNoArrays(e[a]||{},de.objectFromPath(t,de.expandObjectPaths(n))[a])}else if(r=t.match(Wme)){if(n=e[t],a=r[1],Mp(a))continue;if(i=parseInt(r[2]),delete e[t],e[a]=e[a]||[],r[3]===\".\")l=r[4],o=e[a][i]=e[a][i]||{},de.extendDeepNoArrays(o,de.objectFromPath(l,de.expandObjectPaths(n)));else{if(Mp(a))continue;e[a][i]=de.expandObjectPaths(n)}}else{if(Mp(t))continue;e[t]=de.expandObjectPaths(e[t])}}return e};de.numSeparate=function(e,r,t){if(t||(t=!1),typeof r!=\"string\"||r.length===0)throw new Error(\"Separator string required for formatting!\");typeof e==\"number\"&&(e=String(e));var a=/(\\d+)(\\d{3})/,n=r.charAt(0),i=r.charAt(1),o=e.split(\".\"),l=o[0],s=o.length>1?n+o[1]:\"\";if(i&&(o.length>1||l.length>4||t))for(;a.test(l);)l=l.replace(a,\"$1\"+i+\"$2\");return l+s};de.TEMPLATE_STRING_REGEX=/%{([^\\s%{}:]*)([:|\\|][^}]*)?}/g;var $E=/^\\w*$/;de.templateString=function(e,r){var t={};return e.replace(de.TEMPLATE_STRING_REGEX,function(a,n){var i;return $E.test(n)?i=r[n]:(t[n]=t[n]||de.nestedProperty(r,n).get,i=t[n](!0)),i!==void 0?i:\"\"})};var Xme={max:10,count:0,name:\"hovertemplate\"};de.hovertemplateString=e=>J_(Ut(wt({},e),{opts:Xme}));var Zme={max:10,count:0,name:\"texttemplate\"};de.texttemplateString=e=>J_(Ut(wt({},e),{opts:Zme}));var $me=/^(\\S+)([\\*\\/])(-?\\d+(\\.\\d+)?)$/;function Jme(e){var r=e.match($me);return r?{key:r[1],op:r[2],number:Number(r[3])}:{key:e,op:null,number:null}}var Kme={max:10,count:0,name:\"texttemplate\",parseMultDiv:!0};de.texttemplateStringForShapes=e=>J_(Ut(wt({},e),{opts:Kme}));var UE=/^[:|\\|]/;function J_({data:e=[],locale:r,fallback:t,labels:a={},opts:n,template:i}){return i.replace(de.TEMPLATE_STRING_REGEX,(o,l,s)=>{let u=[\"xother\",\"yother\"].includes(l),f=[\"_xother\",\"_yother\"].includes(l),c=[\"_xother_\",\"_yother_\"].includes(l),v=[\"xother_\",\"yother_\"].includes(l),d=u||f||v||c;(f||c)&&(l=l.substring(1)),(v||c)&&(l=l.substring(0,l.length-1));let p=null,y=null;if(n.parseMultDiv){var m=Jme(l);l=m.key,p=m.op,y=m.number}let b;if(d){if(a[l]===void 0)return\"\";b=a[l]}else for(let _ of e)if(_){if(_.hasOwnProperty(l)){b=_[l];break}if($E.test(l)||(b=de.nestedProperty(_,l).get(!0)),b!==void 0)break}if(b===void 0){let{count:_,max:k,name:A}=n,q=t===!1?o:t;return _<k&&de.warn([`Variable '${l}' in ${A} could not be found!`,\"Please verify that the template is correct.\",`Using value: '${q}'.`].join(\" \")),_===k&&de.warn(`Too many '${A}' warnings - additional warnings will be suppressed.`),n.count++,q}if(p===\"*\"&&(b*=y),p===\"/\"&&(b/=y),s){var T;if(s[0]===\":\"&&(T=r?r.numberFormat:de.numberFormat,b!==\"\"&&(b=T(s.replace(UE,\"\"))(b))),s[0]===\"|\"){T=r?r.timeFormat:Ime;var w=de.dateTime2ms(b);b=de.formatDate(w,s.replace(UE,\"\"),!1,T)}}else{var x=l+\"Label\";a.hasOwnProperty(x)&&(b=a[x])}return d&&(b=\"(\"+b+\")\",(f||c)&&(b=\" \"+b),(v||c)&&(b=b+\" \")),b})}var kp=48,GE=57;de.subplotSort=function(e,r){for(var t=Math.min(e.length,r.length)+1,a=0,n=0,i=0;i<t;i++){var o=e.charCodeAt(i)||0,l=r.charCodeAt(i)||0,s=o>=kp&&o<=GE,u=l>=kp&&l<=GE;if(s&&(a=10*a+o-kp),u&&(n=10*n+l-kp),!s||!u){if(a!==n)return a-n;if(o!==l)return o-l}}return n-a};var N0=2e9;de.seedPseudoRandom=function(){N0=2e9};de.pseudoRandom=function(){var e=N0;return N0=(69069*N0+1)%4294967296,Math.abs(N0-e)<429496729?de.pseudoRandom():N0/4294967296};de.fillText=function(e,r,t){var a=Array.isArray(t)?function(o){t.push(o)}:function(o){t.text=o},n=de.extractOption(e,r,\"htx\",\"hovertext\");if(de.isValidTextValue(n))return a(n);var i=de.extractOption(e,r,\"tx\",\"text\");if(de.isValidTextValue(i))return a(i)};de.isValidTextValue=function(e){return e||e===0};de.formatPercent=function(e,r){r=r||0;for(var t=(Math.round(100*e*Math.pow(10,r))*Math.pow(.1,r)).toFixed(r)+\"%\",a=0;a<r;a++)t.indexOf(\".\")!==-1&&(t=t.replace(\"0%\",\"%\"),t=t.replace(\".%\",\"%\"));return t};de.isHidden=function(e){var r=window.getComputedStyle(e).display;return!r||r===\"none\"};de.strTranslate=function(e,r){return e||r?\"translate(\"+e+\",\"+r+\")\":\"\"};de.strRotate=function(e){return e?\"rotate(\"+e+\")\":\"\"};de.strScale=function(e){return e!==1?\"scale(\"+e+\")\":\"\"};de.getTextTransform=function(e){var r=e.noCenter,t=e.textX,a=e.textY,n=e.targetX,i=e.targetY,o=e.anchorX||0,l=e.anchorY||0,s=e.rotate,u=e.scale;return u?u>1&&(u=1):u=0,de.strTranslate(n-u*(t+o),i-u*(a+l))+de.strScale(u)+(s?\"rotate(\"+s+(r?\"\":\" \"+t+\" \"+a)+\")\":\"\")};de.setTransormAndDisplay=function(e,r){e.attr(\"transform\",de.getTextTransform(r)),e.style(\"display\",r.scale?null:\"none\")};de.ensureUniformFontSize=function(e,r){var t=de.extendFlat({},r);return t.size=Math.max(r.size,e._fullLayout.uniformtext.minsize||0),t};de.join2=function(e,r,t){var a=e.length;return a>1?e.slice(0,-1).join(r)+t+e[a-1]:e.join(r)};de.bigFont=function(e){return Math.round(1.2*e)};var YE=de.getFirefoxVersion(),Qme=YE!==null&&YE<86;de.getPositionFromD3Event=function(){return Qme?[wh.event.layerX,wh.event.layerY]:[wh.event.offsetX,wh.event.offsetY]}});var eP=z(()=>{\"use strict\";var eye=ke(),KE={\"X,X div\":'direction:ltr;font-family:\"Open Sans\",verdana,arial,sans-serif;margin:0;padding:0;border:0;',\"X input,X button\":'font-family:\"Open Sans\",verdana,arial,sans-serif;',\"X input:focus,X button:focus\":\"outline:none;\",\"X a\":\"text-decoration:none;\",\"X a:hover\":\"text-decoration:none;\",\"X .crisp\":\"shape-rendering:crispEdges;\",\"X .user-select-none\":\"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\",\"X svg a\":\"fill:#447adb;\",\"X svg a:hover\":\"fill:#3c6dc5;\",\"X .main-svg\":\"position:absolute;top:0;left:0;pointer-events:none;\",\"X .main-svg .draglayer\":\"pointer-events:all;\",\"X .cursor-default\":\"cursor:default;\",\"X .cursor-pointer\":\"cursor:pointer;\",\"X .cursor-crosshair\":\"cursor:crosshair;\",\"X .cursor-move\":\"cursor:move;\",\"X .cursor-col-resize\":\"cursor:col-resize;\",\"X .cursor-row-resize\":\"cursor:row-resize;\",\"X .cursor-ns-resize\":\"cursor:ns-resize;\",\"X .cursor-ew-resize\":\"cursor:ew-resize;\",\"X .cursor-sw-resize\":\"cursor:sw-resize;\",\"X .cursor-s-resize\":\"cursor:s-resize;\",\"X .cursor-se-resize\":\"cursor:se-resize;\",\"X .cursor-w-resize\":\"cursor:w-resize;\",\"X .cursor-e-resize\":\"cursor:e-resize;\",\"X .cursor-nw-resize\":\"cursor:nw-resize;\",\"X .cursor-n-resize\":\"cursor:n-resize;\",\"X .cursor-ne-resize\":\"cursor:ne-resize;\",\"X .cursor-grab\":\"cursor:-webkit-grab;cursor:grab;\",\"X .modebar\":\"position:absolute;top:2px;right:2px;\",\"X .ease-bg\":\"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;\",\"X .modebar--hover>:not(.watermark)\":\"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;\",\"X:hover .modebar--hover .modebar-group\":\"opacity:1;\",\"X:focus-within .modebar--hover .modebar-group\":\"opacity:1;\",\"X .modebar-group\":\"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\",\"X .modebar-group a\":\"display:grid;place-content:center;\",\"X .modebar-btn\":\"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;border:none;background:rgba(0,0,0,0);\",\"X .modebar-btn svg\":\"position:relative;\",\"X .modebar-btn:focus-visible\":\"outline:1px solid #000;outline-offset:1px;border-radius:3px;\",\"X .modebar.vertical\":\"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\",\"X .modebar.vertical svg\":\"top:-1px;\",\"X .modebar.vertical .modebar-group\":\"display:block;float:none;padding-left:0px;padding-bottom:8px;\",\"X .modebar.vertical .modebar-group .modebar-btn\":\"display:block;text-align:center;\",\"X [data-title]:before,X [data-title]:after\":\"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\",\"X [data-title]:hover:before,X [data-title]:hover:after\":\"display:block;opacity:1;\",\"X [data-title]:before\":'content:\"\";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;',\"X [data-title]:after\":\"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\",\"X .vertical [data-title]:before,X .vertical [data-title]:after\":\"top:0%;right:200%;\",\"X .vertical [data-title]:before\":\"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;\",\"X .plotly-cloud-dialog\":'font-family:\"Open Sans\",verdana,arial,sans-serif;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1001;display:flex;align-items:center;justify-content:center;background-color:rgba(0,0,0,.4);',\"X .plotly-cloud-dialog .plotly-cloud-dialog-box\":\"box-sizing:border-box;min-width:300px;max-width:420px;padding:20px 24px;background-color:#fff;border:1px solid #e0e2e5;border-radius:4px;box-shadow:0 4px 16px rgba(0,0,0,.25);font-size:13px;color:#2a3f5f;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-title\":\"font-size:16px;font-weight:bold;margin-bottom:12px;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-message\":\"line-height:1.5;overflow-wrap:break-word;word-wrap:break-word;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-message--hostname\":\"font-weight:bold;text-decoration:underline;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-message--account\":\"margin-top:16px;padding:8px;border-radius:3px;font-size:.9em;background-color:#edf1f8;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-buttons\":\"display:flex;justify-content:flex-end;margin-top:20px;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-btn\":\"font-family:inherit;font-size:13px;padding:7px 16px;margin-left:8px;border-radius:3px;border:1px solid rgba(0,0,0,0);cursor:pointer;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-btn:focus-visible\":\"outline:2px solid #447adb;outline-offset:1px;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel\":\"background-color:#f3f3f3;margin-left:auto;color:#777;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel:hover\":\"background-color:#e0e2e5;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm\":\"background-color:#447adb;color:#fff;\",\"X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm:hover\":\"background-color:#1d3b84;\",Y:'font-family:\"Open Sans\",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;',\"Y p\":\"margin:0;\",\"Y .notifier-note\":\"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\",\"Y .notifier-close\":\"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\",\"Y .notifier-close:hover\":\"color:#444;text-decoration:none;cursor:pointer;\"};for(K_ in KE)QE=K_.replace(/^,/,\" ,\").replace(/X/g,\".js-plotly-plot .plotly\").replace(/Y/g,\".plotly-notifier\"),eye.addStyleRule(QE,KE[K_]);var QE,K_});var Q_=z((qGe,rP)=>{rP.exports=!0});var r4=z((LGe,tP)=>{\"use strict\";var rye=Q_(),e4;typeof window.matchMedia==\"function\"?e4=!window.matchMedia(\"(hover: none)\").matches:e4=rye;tP.exports=e4});var Bu=z((CGe,t4)=>{\"use strict\";var O0=typeof Reflect==\"object\"?Reflect:null,aP=O0&&typeof O0.apply==\"function\"?O0.apply:function(r,t,a){return Function.prototype.apply.call(r,t,a)},qp;O0&&typeof O0.ownKeys==\"function\"?qp=O0.ownKeys:Object.getOwnPropertySymbols?qp=function(r){return Object.getOwnPropertyNames(r).concat(Object.getOwnPropertySymbols(r))}:qp=function(r){return Object.getOwnPropertyNames(r)};function tye(e){console&&console.warn&&console.warn(e)}var iP=Number.isNaN||function(r){return r!==r};function Nt(){Nt.init.call(this)}t4.exports=Nt;t4.exports.once=oye;Nt.EventEmitter=Nt;Nt.prototype._events=void 0;Nt.prototype._eventsCount=0;Nt.prototype._maxListeners=void 0;var nP=10;function Lp(e){if(typeof e!=\"function\")throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(Nt,\"defaultMaxListeners\",{enumerable:!0,get:function(){return nP},set:function(e){if(typeof e!=\"number\"||e<0||iP(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");nP=e}});Nt.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};Nt.prototype.setMaxListeners=function(r){if(typeof r!=\"number\"||r<0||iP(r))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+r+\".\");return this._maxListeners=r,this};function oP(e){return e._maxListeners===void 0?Nt.defaultMaxListeners:e._maxListeners}Nt.prototype.getMaxListeners=function(){return oP(this)};Nt.prototype.emit=function(r){for(var t=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var n=r===\"error\",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var l=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw l.context=o,l}var s=i[r];if(s===void 0)return!1;if(typeof s==\"function\")aP(s,this,t);else for(var u=s.length,f=cP(s,u),a=0;a<u;++a)aP(f[a],this,t);return!0};function lP(e,r,t,a){var n,i,o;if(Lp(t),i=e._events,i===void 0?(i=e._events=Object.create(null),e._eventsCount=0):(i.newListener!==void 0&&(e.emit(\"newListener\",r,t.listener?t.listener:t),i=e._events),o=i[r]),o===void 0)o=i[r]=t,++e._eventsCount;else if(typeof o==\"function\"?o=i[r]=a?[t,o]:[o,t]:a?o.unshift(t):o.push(t),n=oP(e),n>0&&o.length>n&&!o.warned){o.warned=!0;var l=new Error(\"Possible EventEmitter memory leak detected. \"+o.length+\" \"+String(r)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");l.name=\"MaxListenersExceededWarning\",l.emitter=e,l.type=r,l.count=o.length,tye(l)}return e}Nt.prototype.addListener=function(r,t){return lP(this,r,t,!1)};Nt.prototype.on=Nt.prototype.addListener;Nt.prototype.prependListener=function(r,t){return lP(this,r,t,!0)};function aye(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function sP(e,r,t){var a={fired:!1,wrapFn:void 0,target:e,type:r,listener:t},n=aye.bind(a);return n.listener=t,a.wrapFn=n,n}Nt.prototype.once=function(r,t){return Lp(t),this.on(r,sP(this,r,t)),this};Nt.prototype.prependOnceListener=function(r,t){return Lp(t),this.prependListener(r,sP(this,r,t)),this};Nt.prototype.removeListener=function(r,t){var a,n,i,o,l;if(Lp(t),n=this._events,n===void 0)return this;if(a=n[r],a===void 0)return this;if(a===t||a.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[r],n.removeListener&&this.emit(\"removeListener\",r,a.listener||t));else if(typeof a!=\"function\"){for(i=-1,o=a.length-1;o>=0;o--)if(a[o]===t||a[o].listener===t){l=a[o].listener,i=o;break}if(i<0)return this;i===0?a.shift():nye(a,i),a.length===1&&(n[r]=a[0]),n.removeListener!==void 0&&this.emit(\"removeListener\",r,l||t)}return this};Nt.prototype.off=Nt.prototype.removeListener;Nt.prototype.removeAllListeners=function(r){var t,a,n;if(a=this._events,a===void 0)return this;if(a.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):a[r]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete a[r]),this;if(arguments.length===0){var i=Object.keys(a),o;for(n=0;n<i.length;++n)o=i[n],o!==\"removeListener\"&&this.removeAllListeners(o);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(t=a[r],typeof t==\"function\")this.removeListener(r,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(r,t[n]);return this};function uP(e,r,t){var a=e._events;if(a===void 0)return[];var n=a[r];return n===void 0?[]:typeof n==\"function\"?t?[n.listener||n]:[n]:t?iye(n):cP(n,n.length)}Nt.prototype.listeners=function(r){return uP(this,r,!0)};Nt.prototype.rawListeners=function(r){return uP(this,r,!1)};Nt.listenerCount=function(e,r){return typeof e.listenerCount==\"function\"?e.listenerCount(r):fP.call(e,r)};Nt.prototype.listenerCount=fP;function fP(e){var r=this._events;if(r!==void 0){var t=r[e];if(typeof t==\"function\")return 1;if(t!==void 0)return t.length}return 0}Nt.prototype.eventNames=function(){return this._eventsCount>0?qp(this._events):[]};function cP(e,r){for(var t=new Array(r),a=0;a<r;++a)t[a]=e[a];return t}function nye(e,r){for(;r+1<e.length;r++)e[r]=e[r+1];e.pop()}function iye(e){for(var r=new Array(e.length),t=0;t<r.length;++t)r[t]=e[t].listener||e[t];return r}function oye(e,r){return new Promise(function(t,a){function n(o){e.removeListener(r,i),a(o)}function i(){typeof e.removeListener==\"function\"&&e.removeListener(\"error\",n),t([].slice.call(arguments))}vP(e,r,i,{once:!0}),r!==\"error\"&&lye(e,n,{once:!0})})}function lye(e,r,t){typeof e.on==\"function\"&&vP(e,\"error\",r,t)}function vP(e,r,t,a){if(typeof e.on==\"function\")a.once?e.once(r,t):e.on(r,t);else if(typeof e.addEventListener==\"function\")e.addEventListener(r,function n(i){a.once&&e.removeEventListener(r,n),t(i)});else throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof e)}});var Th=z((DGe,hP)=>{\"use strict\";var a4=Bu().EventEmitter,sye={init:function(e){if(e._ev instanceof a4)return e;var r=new a4,t=new a4;return e._ev=r,e._internalEv=t,e.on=r.on.bind(r),e.once=r.once.bind(r),e.removeListener=r.removeListener.bind(r),e.removeAllListeners=r.removeAllListeners.bind(r),e._internalOn=t.on.bind(t),e._internalOnce=t.once.bind(t),e._removeInternalListener=t.removeListener.bind(t),e._removeAllInternalListeners=t.removeAllListeners.bind(t),e.emit=function(a,n){r.emit(a,n),t.emit(a,n)},typeof e.addEventListener==\"function\"&&e.addEventListener(\"wheel\",()=>{},{passive:!0}),e},triggerHandler:function(e,r,t){var a,n=e._ev;if(!n)return;var i=n._events[r];if(!i)return;function o(s){if(s.listener){if(n.removeListener(r,s.listener),!s.fired)return s.fired=!0,s.listener.apply(n,[t])}else return s.apply(n,[t])}i=Array.isArray(i)?i:[i];var l;for(l=0;l<i.length-1;l++)o(i[l]);return a=o(i[l]),a},purge:function(e){return delete e._ev,delete e.on,delete e.once,delete e.removeListener,delete e.removeAllListeners,delete e.emit,delete e._ev,delete e._internalEv,delete e._internalOn,delete e._internalOnce,delete e._removeInternalListener,delete e._removeAllInternalListeners,e}};hP.exports=sye});var mP=z((EGe,pP)=>{\"use strict\";var dP=ke(),uye=ds().dfltConfig;function fye(e,r){for(var t=[],a,n=0;n<r.length;n++)a=r[n],a===e?t[n]=a:typeof a==\"object\"?t[n]=Array.isArray(a)?dP.extendDeep([],a):dP.extendDeepAll({},a):t[n]=a;return t}var Nl={};Nl.add=function(e,r,t,a,n){var i,o;if(e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},o=e.undoQueue.index,e.autoplay){e.undoQueue.inSequence||(e.autoplay=!1);return}!e.undoQueue.sequence||e.undoQueue.beginSequence?(i={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},e.undoQueue.queue.splice(o,e.undoQueue.queue.length-o,i),e.undoQueue.index+=1):i=e.undoQueue.queue[o-1],e.undoQueue.beginSequence=!1,i&&(i.undo.calls.unshift(r),i.undo.args.unshift(t),i.redo.calls.push(a),i.redo.args.push(n)),e.undoQueue.queue.length>uye.queueLength&&(e.undoQueue.queue.shift(),e.undoQueue.index--)};Nl.startSequence=function(e){e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},e.undoQueue.sequence=!0,e.undoQueue.beginSequence=!0};Nl.stopSequence=function(e){e.undoQueue=e.undoQueue||{index:0,queue:[],sequence:!1},e.undoQueue.sequence=!1,e.undoQueue.beginSequence=!1};Nl.undo=function(r){var t,a;if(!(r.undoQueue===void 0||isNaN(r.undoQueue.index)||r.undoQueue.index<=0)){for(r.undoQueue.index--,t=r.undoQueue.queue[r.undoQueue.index],r.undoQueue.inSequence=!0,a=0;a<t.undo.calls.length;a++)Nl.plotDo(r,t.undo.calls[a],t.undo.args[a]);r.undoQueue.inSequence=!1,r.autoplay=!1}};Nl.redo=function(r){var t,a;if(!(r.undoQueue===void 0||isNaN(r.undoQueue.index)||r.undoQueue.index>=r.undoQueue.queue.length)){for(t=r.undoQueue.queue[r.undoQueue.index],r.undoQueue.inSequence=!0,a=0;a<t.redo.calls.length;a++)Nl.plotDo(r,t.redo.calls[a],t.redo.args[a]);r.undoQueue.inSequence=!1,r.autoplay=!1,r.undoQueue.index++}};Nl.plotDo=function(e,r,t){e.autoplay=!0,t=fye(e,t),r.apply(null,t)};pP.exports=Nl});var n4=z((PGe,yP)=>{\"use strict\";yP.exports={_isLinkedToArray:\"frames_entry\",group:{valType:\"string\"},name:{valType:\"string\"},traces:{valType:\"any\"},baseframe:{valType:\"string\"},data:{valType:\"any\"},layout:{valType:\"any\"}}});var G0=z(Sa=>{\"use strict\";var Fi=Tr(),Ah=ke(),Dp=zn(),i4=P0(),cye=n4(),vye=mh(),hye=ds().configAttributes,gP=wo(),Mo=Ah.extendDeepAll,H0=Ah.isPlainObject,dye=Ah.isArrayOrTypedArray,Ep=Ah.nestedProperty,pye=Ah.valObjectMeta,o4=\"_isSubplotObj\",Pp=\"_isLinkedToArray\",mye=\"_arrayAttrRegexps\",xP=\"_deprecated\",l4=[o4,Pp,mye,xP];Sa.IS_SUBPLOT_OBJ=o4;Sa.IS_LINKED_TO_ARRAY=Pp;Sa.DEPRECATED=xP;Sa.UNDERSCORE_ATTRS=l4;Sa.get=function(){var e={};return Fi.allTypes.forEach(function(r){e[r]=gye(r)}),{defs:{valObjects:pye,metaKeys:l4.concat([\"description\",\"role\",\"editType\",\"impliedEdits\"]),editType:{traces:gP.traces,layout:gP.layout},impliedEdits:{}},traces:e,layout:bye(),frames:xye(),animation:U0(vye),config:U0(hye)}};Sa.crawl=function(e,r,t,a){var n=t||0;a=a||\"\",Object.keys(e).forEach(function(i){var o=e[i];if(l4.indexOf(i)===-1){var l=(a?a+\".\":\"\")+i;r(o,i,e,n,l),!Sa.isValObject(o)&&H0(o)&&i!==\"impliedEdits\"&&Sa.crawl(o,r,n+1,l)}})};Sa.isValObject=function(e){return e&&e.valType!==void 0};Sa.findArrayAttributes=function(e){var r=[],t=[],a=[],n,i;function o(s,u,f,c){t=t.slice(0,c).concat([u]),a=a.slice(0,c).concat([s&&s._isLinkedToArray]);var v=s&&(s.valType===\"data_array\"||s.arrayOk===!0)&&!(t[c-1]===\"colorbar\"&&(u===\"ticktext\"||u===\"tickvals\"));v&&l(n,0,\"\")}function l(s,u,f){var c=s[t[u]],v=f+t[u];if(u===t.length-1)dye(c)&&r.push(i+v);else if(a[u]){if(Array.isArray(c))for(var d=0;d<c.length;d++)H0(c[d])&&l(c[d],u+1,v+\"[\"+d+\"].\")}else H0(c)&&l(c,u+1,v+\".\")}return n=e,i=\"\",Sa.crawl(Dp,o),e._module&&e._module.attributes&&Sa.crawl(e._module.attributes,o),r};Sa.getTraceValObject=function(e,r){var t=r[0],a=1,n,i,o=e._module;if(o||(o=(Fi.modules[e.type||Dp.type.dflt]||{})._module),!o)return!1;if(n=o.attributes,i=n&&n[t],!i){var l=o.basePlotModule;l&&l.attributes&&(i=l.attributes[t])}return i||(i=Dp[t]),_P(i,r,a)};Sa.getLayoutValObject=function(e,r){var t=yye(e,r[0]);return _P(t,r,1)};function yye(e,r){var t,a,n,i,o=e._basePlotModules;if(o){var l;for(t=0;t<o.length;t++){if(n=o[t],n.attrRegex&&n.attrRegex.test(r)){if(n.layoutAttrOverrides)return n.layoutAttrOverrides;!l&&n.layoutAttributes&&(l=n.layoutAttributes)}var s=n.baseLayoutAttrOverrides;if(s&&r in s)return s[r]}if(l)return l}var u=e._modules;if(u){for(t=0;t<u.length;t++)if(i=u[t].layoutAttributes,i&&r in i)return i[r]}for(a in Fi.componentsRegistry){if(n=Fi.componentsRegistry[a],n.name===\"colorscale\"&&r.indexOf(\"coloraxis\")===0)return n.layoutAttributes[r];if(!n.schema&&r===n.name)return n.layoutAttributes}return r in i4?i4[r]:!1}function _P(e,r,t){if(!e)return!1;if(e._isLinkedToArray){if(Cp(r[t]))t++;else if(t<r.length)return!1}for(;t<r.length;t++){var a=e[r[t]];if(H0(a))e=a;else break;if(t===r.length-1)break;if(e._isLinkedToArray){if(t++,!Cp(r[t]))return!1}else if(e.valType===\"info_array\"){t++;var n=r[t];if(!Cp(n))return!1;var i=e.items;if(Array.isArray(i)){if(n>=i.length)return!1;if(e.dimensions===2){if(t++,r.length===t)return e;var o=r[t];if(!Cp(o))return!1;e=i[n][o]}else e=i[n]}else e=i}}return e}function Cp(e){return e===Math.round(e)&&e>=0}function gye(e){var r,t;r=Fi.modules[e]._module,t=r.basePlotModule;var a={};a.type=null;var n=Mo({},Dp),i=Mo({},r.attributes);Sa.crawl(i,function(s,u,f,c,v){Ep(n,v).set(void 0),s===void 0&&Ep(i,v).set(void 0)}),Mo(a,n),Fi.traceIs(e,\"noOpacity\")&&delete a.opacity,Fi.traceIs(e,\"showLegend\")||(delete a.showlegend,delete a.legendgroup),Fi.traceIs(e,\"noHover\")&&(delete a.hoverinfo,delete a.hoverlabel),r.selectPoints||delete a.selectedpoints,Mo(a,i),t.attributes&&Mo(a,t.attributes),a.type=e;var o={meta:r.meta||{},categories:r.categories||{},animatable:!!r.animatable,type:e,attributes:U0(a)};if(r.layoutAttributes){var l={};Mo(l,r.layoutAttributes),o.layoutAttributes=U0(l)}return r.animatable||Sa.crawl(o,function(s){Sa.isValObject(s)&&\"anim\"in s&&delete s.anim}),o}function bye(){var e={},r,t;Mo(e,i4);for(r in Fi.subplotsRegistry)if(t=Fi.subplotsRegistry[r],!!t.layoutAttributes)if(Array.isArray(t.attr))for(var a=0;a<t.attr.length;a++)bP(e,t,t.attr[a]);else{var n=t.attr===\"subplot\"?t.name:t.attr;bP(e,t,n)}for(r in Fi.componentsRegistry){t=Fi.componentsRegistry[r];var i=t.schema;if(i&&(i.subplots||i.layout)){var o=i.subplots;if(o&&o.xaxis&&!o.yaxis)for(var l in o.xaxis)delete e.yaxis[l];delete e.xaxis.shift,delete e.xaxis.autoshift}else t.name===\"colorscale\"?Mo(e,t.layoutAttributes):t.layoutAttributes&&Aye(e,t.layoutAttributes,t.name)}return{layoutAttributes:U0(e)}}function xye(){var e={frames:Mo({},cye)};return U0(e),e.frames}function U0(e){return _ye(e),wye(e),Tye(e),e}function _ye(e){function r(t,a,n){!Sa.isValObject(t)&&H0(t)&&(t.role=\"object\")}Sa.crawl(e,r)}function wye(e){function r(t,a,n){if(t){var i=t[Pp];i&&(delete t[Pp],n[a]={items:{}},n[a].items[i]=t,n[a].role=\"object\")}}Sa.crawl(e,r)}function Tye(e){function r(t){for(var a in t)if(H0(t[a]))r(t[a]);else if(Array.isArray(t[a]))for(var n=0;n<t[a].length;n++)r(t[a][n]);else t[a]instanceof RegExp&&(t[a]=t[a].toString())}r(e)}function bP(e,r,t){var a=Ep(e,t),n=Mo({},r.layoutAttributes);n[o4]=!0,a.set(n)}function Aye(e,r,t){var a=Ep(e,t);a.set(Mo(a.get()||{},r))}});var St=z(Ou=>{\"use strict\";var Y0=ke(),Mye=zn(),Ms=\"templateitemname\",s4={name:{valType:\"string\",editType:\"none\"}};s4[Ms]={valType:\"string\",editType:\"calc\"};Ou.templatedArray=function(e,r){return r._isLinkedToArray=e,r.name=s4.name,r[Ms]=s4[Ms],r};Ou.traceTemplater=function(e){var r={},t,a;for(t in e)a=e[t],Array.isArray(a)&&a.length&&(r[t]=0);function n(i){t=Y0.coerce(i,{},Mye,\"type\");var o={type:t,_template:null};if(t in r){a=e[t];var l=r[t]%a.length;r[t]++,o._template=a[l]}return o}return{newTrace:n}};Ou.newContainer=function(e,r,t){var a=e._template,n=a&&(a[r]||t&&a[t]);Y0.isPlainObject(n)||(n=null);var i=e[r]={_template:n};return i};Ou.arrayTemplater=function(e,r,t){var a=e._template,n=a&&a[TP(r)],i=a&&a[r];(!Array.isArray(i)||!i.length)&&(i=[]);var o={};function l(u){var f={name:u.name,_input:u},c=f[Ms]=u[Ms];if(!wP(c))return f._template=n,f;for(var v=0;v<i.length;v++){var d=i[v];if(d.name===c)return o[c]=1,f._template=d,f}return f[t]=u[t]||!1,f._template=!1,f}function s(){for(var u=[],f=0;f<i.length;f++){var c=i[f],v=c.name;if(wP(v)&&!o[v]){var d={_template:c,name:v,_input:{_templateitemname:v}};d[Ms]=c[Ms],u.push(d),o[v]=1}}return u}return{newItem:l,defaultItems:s}};function wP(e){return e&&typeof e==\"string\"}function TP(e){var r=e.length-1;return e.charAt(r)!==\"s\"&&Y0.warn(\"bad argument to arrayDefaultKey: \"+e),e.slice(0,-1)+\"defaults\"}Ou.arrayDefaultKey=TP;Ou.arrayEditor=function(e,r,t){var a=(Y0.nestedProperty(e,r).get()||[]).length,n=t._index,i=n>=a&&(t._input||{})._templateitemname;i&&(n=a);var o=r+\"[\"+n+\"]\",l;function s(){l={},i&&(l[o]={},l[o][Ms]=i)}s();function u(d,p){l[d]=p}function f(d,p){i?Y0.nestedProperty(l[o],d).set(p):l[o+\".\"+d]=p}function c(){var d=l;return s(),d}function v(d,p){d&&f(d,p);var y=c();for(var m in y)Y0.nestedProperty(e,m).set(y[m])}return{modifyBase:u,modifyItem:f,getUpdateObj:c,applyUpdate:v}}});var qa=z((zGe,AP)=>{\"use strict\";var Mh=(C0(),un(L0)).counter;AP.exports={idRegex:{x:Mh(\"x\",\"( domain)?\"),y:Mh(\"y\",\"( domain)?\")},attrRegex:Mh(\"[xy]axis\"),xAxisMatch:Mh(\"xaxis\"),yAxisMatch:Mh(\"yaxis\"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:\"hour\",WEEKDAY_PATTERN:\"day of week\",MINDRAG:8,MINZOOM:20,DRAGGERSIZE:20,REDRAWDELAY:50,DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:[\"imagelayer\",\"heatmaplayer\",\"contourcarpetlayer\",\"contourlayer\",\"funnellayer\",\"waterfalllayer\",\"barlayer\",\"carpetlayer\",\"violinlayer\",\"boxlayer\",\"ohlclayer\",\"scattercarpetlayer\",\"scatterlayer\"],clipOnAxisFalseQuery:[\".scatterlayer\",\".barlayer\",\".funnellayer\",\".waterfalllayer\"],layerValue2layerClass:{\"above traces\":\"above\",\"below traces\":\"below\"},zindexSeparator:\"z\"}});var ba=z(Zn=>{\"use strict\";var kye=Tr(),u4=qa();Zn.id2name=function(r){if(!(typeof r!=\"string\"||!r.match(u4.AX_ID_PATTERN))){var t=r.split(\" \")[0].slice(1);return t===\"1\"&&(t=\"\"),r.charAt(0)+\"axis\"+t}};Zn.name2id=function(r){if(r.match(u4.AX_NAME_PATTERN)){var t=r.slice(5);return t===\"1\"&&(t=\"\"),r.charAt(0)+t}};Zn.cleanId=function(r,t,a){var n=/( domain)$/.test(r);if(!(typeof r!=\"string\"||!r.match(u4.AX_ID_PATTERN))&&!(t&&r.charAt(0)!==t)&&!(n&&!a)){var i=r.split(\" \")[0].slice(1).replace(/^0+/,\"\");return i===\"1\"&&(i=\"\"),r.charAt(0)+i+(n&&a?\" domain\":\"\")}};Zn.list=function(e,r,t){var a=e._fullLayout;if(!a)return[];var n=Zn.listIds(e,r),i=new Array(n.length),o;for(o=0;o<n.length;o++){var l=n[o];i[o]=a[l.charAt(0)+\"axis\"+l.slice(1)]}if(!t){var s=a._subplots.gl3d||[];for(o=0;o<s.length;o++){var u=a[s[o]];r?i.push(u[r+\"axis\"]):i.push(u.xaxis,u.yaxis,u.zaxis)}}return i};Zn.listIds=function(e,r){var t=e._fullLayout;if(!t)return[];var a=t._subplots;return r?a[r+\"axis\"]:a.xaxis.concat(a.yaxis)};Zn.getFromId=function(e,r,t){var a=e._fullLayout;return r=r===void 0||typeof r!=\"string\"?r:r.replace(\" domain\",\"\"),t===\"x\"?r=r.replace(/y[0-9]*/,\"\"):t===\"y\"&&(r=r.replace(/x[0-9]*/,\"\")),a[Zn.id2name(r)]};Zn.getFromTrace=function(e,r,t){var a=e._fullLayout,n=null;if(kye.traceIs(r,\"gl3d\")){var i=r.scene;i.slice(0,5)===\"scene\"&&(n=a[i][t+\"axis\"])}else n=Zn.getFromId(e,r[t+\"axis\"]||t);return n};Zn.idSort=function(e,r){var t=e.charAt(0),a=r.charAt(0);return t!==a?t>a?1:-1:+(e.slice(1)||1)-+(r.slice(1)||1)};Zn.ref2id=function(e){return/^[xyz]/.test(e)?e.split(\" \")[0]:!1};function MP(e,r){if(r&&r.length){for(var t=0;t<r.length;t++)if(r[t][e])return!0}return!1}Zn.isLinked=function(e,r){return MP(r,e._axisMatchGroups)||MP(r,e._axisConstraintGroups)}});var ks=z((IGe,kP)=>{\"use strict\";function Sye(e){var r=e._fullLayout._zoomlayer;r&&r.selectAll(\".outline-controllers\").remove()}function qye(e){var r=e._fullLayout._zoomlayer;r&&r.selectAll(\".select-outline\").remove(),e._fullLayout._outlining=!1}kP.exports={clearOutlineControllers:Sye,clearOutline:qye}});var Rp=z((BGe,SP)=>{\"use strict\";SP.exports={scattermode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"overlay\",editType:\"calc\"},scattergap:{valType:\"number\",min:0,max:1,editType:\"calc\"}}});var Np=z(zp=>{\"use strict\";var Fp=Tr(),OGe=qa().SUBPLOT_PATTERN;zp.getSubplotCalcData=function(e,r,t){var a=Fp.subplotsRegistry[r];if(!a)return[];for(var n=a.attr,i=[],o=0;o<e.length;o++){var l=e[o],s=l[0].trace;s[n]===t&&i.push(l)}return i};zp.getModuleCalcData=function(e,r,t){var a=[],n=[],i;if(typeof r==\"string\"?i=Fp.getModule(r).plot:typeof r==\"function\"?i=r:i=r.plot,!i)return[a,e];for(var o=t,l=0;l<e.length;l++){var s=e[l],u=s[0].trace,f=u.zorder!==void 0;u.visible!==!0||u._length===0||(u._module&&u._module.plot===i&&(!f||u.zorder===o)?a.push(s):n.push(s))}return[a,n]};zp.getSubplotData=function(r,t,a){if(!Fp.subplotsRegistry[t])return[];for(var n=Fp.subplotsRegistry[t].attr,i=[],o,l,s,u=0;u<r.length;u++)o=r[u],o[n]===a&&i.push(o);return i}});var DP=z(Hu=>{\"use strict\";var Lye=Tr(),V0=ke();Hu.manageCommandObserver=function(e,r,t,a){var n={},i=!0;r&&r._commandObserver&&(n=r._commandObserver),n.cache||(n.cache={}),n.lookupTable={};var o=Hu.hasSimpleAPICommandBindings(e,t,n.lookupTable);if(r&&r._commandObserver){if(o)return n;if(r._commandObserver.remove)return r._commandObserver.remove(),r._commandObserver=null,n}if(o){qP(e,o,n.cache),n.check=function(){if(i){var f=qP(e,o,n.cache);return f.changed&&a&&n.lookupTable[f.value]!==void 0&&(n.disable(),Promise.resolve(a({value:f.value,type:o.type,prop:o.prop,traces:o.traces,index:n.lookupTable[f.value]})).then(n.enable,n.enable)),f.changed}};for(var l=[\"plotly_relayout\",\"plotly_redraw\",\"plotly_restyle\",\"plotly_update\",\"plotly_animatingframe\",\"plotly_afterplot\"],s=0;s<l.length;s++)e._internalOn(l[s],n.check);n.remove=function(){for(var u=0;u<l.length;u++)e._removeInternalListener(l[u],n.check)}}else V0.log(\"Unable to automatically bind plot updates to API command\"),n.lookupTable={},n.remove=function(){};return n.disable=function(){i=!1},n.enable=function(){i=!0},r&&(r._commandObserver=n),n};Hu.hasSimpleAPICommandBindings=function(e,r,t){var a,n=r.length,i;for(a=0;a<n;a++){var o,l=r[a],s=l.method,u=l.args;if(Array.isArray(u)||(u=[]),!s)return!1;var f=Hu.computeAPICommandBindings(e,s,u);if(f.length!==1)return!1;if(!i)i=f[0],Array.isArray(i.traces)&&i.traces.sort();else{if(o=f[0],o.type!==i.type||o.prop!==i.prop)return!1;if(Array.isArray(i.traces))if(Array.isArray(o.traces)){o.traces.sort();for(var c=0;c<i.traces.length;c++)if(i.traces[c]!==o.traces[c])return!1}else return!1;else if(o.prop!==i.prop)return!1}o=f[0];var v=o.value;if(Array.isArray(v))if(v.length===1)v=v[0];else return!1;t&&(t[v]=a)}return i};function qP(e,r,t){var a,n,i,o=!1;if(r.type===\"data\")a=e._fullData[r.traces!==null?r.traces[0]:0];else if(r.type===\"layout\")a=e._fullLayout;else return!1;return n=V0.nestedProperty(a,r.prop).get(),i=t[r.type]=t[r.type]||{},i.hasOwnProperty(r.prop)&&i[r.prop]!==n&&(o=!0),i[r.prop]=n,{changed:o,value:n}}Hu.executeAPICommand=function(e,r,t){if(r===\"skip\")return Promise.resolve();var a=Lye.apiMethodRegistry[r],n=[e];Array.isArray(t)||(t=[]);for(var i=0;i<t.length;i++)n.push(t[i]);return a.apply(null,n).catch(function(o){return V0.warn(\"API call to Plotly.\"+r+\" rejected.\",o),Promise.reject(o)})};Hu.computeAPICommandBindings=function(e,r,t){var a;switch(Array.isArray(t)||(t=[]),r){case\"restyle\":a=CP(e,t);break;case\"relayout\":a=LP(e,t);break;case\"update\":a=CP(e,[t[0],t[2]]).concat(LP(e,[t[1]]));break;case\"animate\":a=Cye(e,t);break;default:a=[]}return a};function Cye(e,r){return Array.isArray(r[0])&&r[0].length===1&&[\"string\",\"number\"].indexOf(typeof r[0][0])!==-1?[{type:\"layout\",prop:\"_currentFrame\",value:r[0][0].toString()}]:[]}function LP(e,r){var t=[],a=r[0],n={};if(typeof a==\"string\")n[a]=r[1];else if(V0.isPlainObject(a))n=a;else return t;return f4(n,function(i,o,l){t.push({type:\"layout\",prop:i,value:l})},\"\",0),t}function CP(e,r){var t,a,n,i,o=[];if(a=r[0],n=r[1],t=r[2],i={},typeof a==\"string\")i[a]=n;else if(V0.isPlainObject(a))i=a,t===void 0&&(t=n);else return o;return t===void 0&&(t=null),f4(i,function(l,s,u){var f,c;if(Array.isArray(u)){c=u.slice();var v=Math.min(c.length,e.data.length);t&&(v=Math.min(v,t.length)),f=[];for(var d=0;d<v;d++)f[d]=t?t[d]:d}else c=u,f=t?t.slice():null;if(f===null)Array.isArray(c)&&(c=c[0]);else if(Array.isArray(f)){if(!Array.isArray(c)){var p=c;c=[];for(var y=0;y<f.length;y++)c[y]=p}c.length=Math.min(f.length,c.length)}o.push({type:\"data\",prop:l,traces:f,value:c})},\"\",0),o}function f4(e,r,t,a){Object.keys(e).forEach(function(n){var i=e[n];if(n[0]!==\"_\"){var o=t+(a>0?\".\":\"\")+n;V0.isPlainObject(i)?f4(i,r,o,a+1):r(o,n,i)}})}});var va=z((YGe,HP)=>{\"use strict\";var GGe=Er(),Dye=p0().timeFormatLocale,Eye=Y5().formatLocale,kh=Ir(),Pye=V5(),Rye=jv().version,Qr=Tr(),Fye=G0(),zye=St(),gr=ke(),Nye=Sr(),EP=Gt().BADNUM,$n=ba(),Iye=ks().clearOutline,Bye=Rp(),c4=mh(),Oye=n4(),Hye=Np().getModuleCalcData,PP=gr.relinkPrivateKeys,Uu=gr._,er=HP.exports={};gr.extendFlat(er,Qr);er.attributes=zn();er.attributes.type.values=er.allTypes;er.fontAttrs=ka();er.layoutAttributes=P0();var Bp=DP();er.executeAPICommand=Bp.executeAPICommand;er.computeAPICommandBindings=Bp.computeAPICommandBindings;er.manageCommandObserver=Bp.manageCommandObserver;er.hasSimpleAPICommandBindings=Bp.hasSimpleAPICommandBindings;er.redrawText=function(e){return e=gr.getGraphDiv(e),new Promise(function(r){setTimeout(function(){e._fullLayout&&(Qr.getComponentMethod(\"annotations\",\"draw\")(e),Qr.getComponentMethod(\"legend\",\"draw\")(e),Qr.getComponentMethod(\"colorbar\",\"draw\")(e),r(er.previousPromises(e)))},300)})};er.resize=function(e){e=gr.getGraphDiv(e);var r,t=new Promise(function(a,n){(!e||gr.isHidden(e))&&n(new Error(\"Resize must be passed a displayed plot div element.\")),e._redrawTimer&&clearTimeout(e._redrawTimer),e._resolveResize&&(r=e._resolveResize),e._resolveResize=a,e._redrawTimer=setTimeout(function(){if(!e.layout||e.layout.width&&e.layout.height||gr.isHidden(e)){a(e);return}delete e.layout.width,delete e.layout.height;var i=e.changed;e.autoplay=!0,Qr.call(\"relayout\",e,{autosize:!0}).then(function(){e.changed=i,e._resolveResize===a&&(delete e._resolveResize,a(e))})},100)});return r&&r(t),t};er.previousPromises=function(e){if((e._promises||[]).length)return Promise.all(e._promises).then(function(){e._promises=[]})};er.sendDataToCloud=function(e,r){e.emit(\"plotly_beforeexport\");let t=new URL(r).origin;var a=er.graphJson(e,!1,\"object\");a.version=Rye;var n=new URL(r);n.searchParams.set(\"origin\",window.location.origin);var i=window.open(n.href,\"_blank\");if(!i){console.error(\"Unable to open Plotly Cloud (the popup may have been blocked)\"),e.emit(\"plotly_exportfail\");return}var o=function(l){l.origin===t&&l.data&&l.data.type===\"CHART_AUTH_SUCCESS\"&&(i.postMessage({type:\"chart\",chart:a},t),window.removeEventListener(\"message\",o),e.emit(\"plotly_afterexport\"))};return window.addEventListener(\"message\",o),!1};var Uye=[\"days\",\"shortDays\",\"months\",\"shortMonths\",\"periods\",\"dateTime\",\"date\",\"time\",\"decimal\",\"thousands\",\"grouping\",\"currency\"],Gye=[\"year\",\"month\",\"dayMonth\",\"dayMonthYear\"];er.supplyDefaults=function(e,r){var t=r&&r.skipUpdateCalc,a=e._fullLayout||{};if(a._skipDefaults){delete a._skipDefaults;return}var n=e._fullLayout={},i=e.layout||{},o=e._fullData||[],l=e._fullData=[],s=e.data||[],u=e.calcdata||[],f=e._context||{},c;e._transitionData||er.createTransitionData(e),n._dfltTitle={plot:Uu(e,\"Click to enter Plot title\"),subtitle:Uu(e,\"Click to enter Plot subtitle\"),x:Uu(e,\"Click to enter X axis title\"),y:Uu(e,\"Click to enter Y axis title\"),colorbar:Uu(e,\"Click to enter Colorscale title\"),annotation:Uu(e,\"new text\")},n._traceWord=Uu(e,\"trace\");var v=RP(e,Uye);if(a._initialAutoSizeIsDone){var d=a.width,p=a.height;er.supplyLayoutGlobalDefaults(i,n,v),i.width||(n.width=d),i.height||(n.height=p),er.sanitizeMargins(n)}else{er.supplyLayoutGlobalDefaults(i,n,v);var y=!i.width||!i.height,m=n.autosize,b=f.autosizable,T=y&&(m||b);T?er.plotAutoSize(e,i,n):y&&er.sanitizeMargins(n),!m&&y&&(i.width=n.width,i.height=n.height)}n._d3locale=jye(v,n.separators),n._extraFormat=RP(e,Gye),n._initialAutoSizeIsDone=!0,n._dataLength=s.length,n._modules=[],n._visibleModules=[],n._basePlotModules=[];var w=n._subplots=Vye(),x=n._splomAxes={x:{},y:{}},_=n._splomSubplots={};n._splomGridDflt={},n._scatterStackOpts={},n._firstScatter={},n._alignmentOpts={},n._colorAxes={},n._requestRangeslider={},n._traceUids=Yye(o,s),er.supplyDataDefaults(s,l,i,n);var k=Object.keys(x.x),A=Object.keys(x.y);if(k.length>1&&A.length>1){for(Qr.getComponentMethod(\"grid\",\"sizeDefaults\")(i,n),c=0;c<k.length;c++)gr.pushUnique(w.xaxis,k[c]);for(c=0;c<A.length;c++)gr.pushUnique(w.yaxis,A[c]);for(var q in _)gr.pushUnique(w.cartesian,q)}if(n._has=er._hasPlotType.bind(n),o.length===l.length)for(c=0;c<l.length;c++)PP(l[c],o[c]);er.supplyLayoutModuleDefaults(i,n,l,e._transitionData);var C=n._visibleModules,E=[];for(c=0;c<C.length;c++){var P=C[c].crossTraceDefaults;P&&gr.pushUnique(E,P)}for(c=0;c<E.length;c++)E[c](l,n);n._hasOnlyLargeSploms=n._basePlotModules.length===1&&n._basePlotModules[0].name===\"splom\"&&k.length>15&&A.length>15&&n.shapes.length===0&&n.images.length===0,er.linkSubplots(l,n,o,a),er.cleanPlot(l,n,o,a);var R=!!(a._has&&a._has(\"cartesian\")),N=!!(n._has&&n._has(\"cartesian\")),I=R,O=N;I&&!O?a._bgLayer.remove():O&&!I&&(n._shouldCreateBgLayer=!0),a._zoomlayer&&!e._dragging&&Iye({_fullLayout:a}),Wye(l,n),PP(n,a),Qr.getComponentMethod(\"colorscale\",\"crossTraceDefaults\")(l,n),n._preGUI||(n._preGUI={}),n._tracePreGUI||(n._tracePreGUI={});var U=n._tracePreGUI,Y={},G;for(G in U)Y[G]=\"old\";for(c=0;c<l.length;c++)G=l[c].uid,Y[G]||(U[G]={}),Y[G]=\"new\";for(G in Y)Y[G]===\"old\"&&delete U[G];NP(n),Qr.getComponentMethod(\"rangeslider\",\"makeData\")(n),!t&&u.length===l.length&&er.supplyDefaultsUpdateCalc(u,l)};er.supplyDefaultsUpdateCalc=function(e,r){for(var t=0;t<r.length;t++){var a=r[t],n=(e[t]||[])[0];n&&n.trace&&(n.trace=a)}};function Yye(e,r){var t=r.length,a,n=e.length,i=new Array(t),o={};function l(f,c){i[c]=f,o[f]=1}function s(f,c){if(f&&typeof f==\"string\"&&!o[f])return l(f,c),!0}for(a=0;a<t;a++){var u=r[a].uid;typeof u==\"number\"&&(u=String(u)),!s(u,a)&&(a<n&&s(e[a].uid,a)||l(gr.randstr(o),a))}return i}function Vye(){var e=Qr.collectableSubplotTypes,r={},t,a;if(!e){e=[];var n=Qr.subplotsRegistry;for(var i in n){var o=n[i],l=o.attr;if(l&&(e.push(i),Array.isArray(l)))for(a=0;a<l.length;a++)gr.pushUnique(e,l[a])}}for(t=0;t<e.length;t++)r[e[t]]=[];return r}function RP(e,r){var t=e._context.locale;t||(t=\"en-US\");var a=!1,n={};function i(c){for(var v=!0,d=0;d<r.length;d++){var p=r[d];n[p]||(c[p]?n[p]=c[p]:v=!1)}v&&(a=!0)}for(var o=0;o<2;o++){for(var l=e._context.locales,s=0;s<2;s++){var u=(l[t]||{}).format;if(u&&(i(u),a))break;l=Qr.localeRegistry}var f=t.split(\"-\")[0];if(a||f===t)break;t=f}return a||i(Qr.localeRegistry.en.format),n}function jye(e,r){return e.decimal=r.charAt(0),e.thousands=r.charAt(1),{numberFormat:function(t){try{t=Eye(e).format(gr.adjustFormat(t))}catch(a){return gr.warnBadFormat(t),gr.noFormat}return t},timeFormat:Dye(e).utcFormat}}function Wye(e,r){var t,a=[];r.meta&&(t=r._meta={meta:r.meta,layout:{meta:r.meta}});for(var n=0;n<e.length;n++){var i=e[n];i.meta?a[i.index]=i._meta={meta:i.meta}:r.meta&&(i._meta={meta:r.meta}),r.meta&&(i._meta.layout={meta:r.meta})}a.length&&(t||(t=r._meta={}),t.data=a)}er.createTransitionData=function(e){e._transitionData||(e._transitionData={}),e._transitionData._frames||(e._transitionData._frames=[]),e._transitionData._frameHash||(e._transitionData._frameHash={}),e._transitionData._counter||(e._transitionData._counter=0),e._transitionData._interruptCallbacks||(e._transitionData._interruptCallbacks=[])};er._hasPlotType=function(e){var r,t=this._basePlotModules||[];for(r=0;r<t.length;r++)if(t[r].name===e)return!0;var a=this._modules||[];for(r=0;r<a.length;r++){var n=a[r].name;if(n===e)return!0;var i=Qr.modules[n];if(i&&i.categories[e])return!0}return!1};er.cleanPlot=function(e,r,t,a){var n,i,o=a._basePlotModules||[];for(n=0;n<o.length;n++){var l=o[n];l.clean&&l.clean(e,r,t,a)}var s=a._has&&a._has(\"gl\"),u=r._has&&r._has(\"gl\");s&&!u&&a._glcontainer!==void 0&&(a._glcontainer.selectAll(\".gl-canvas\").remove(),a._glcontainer.selectAll(\".no-webgl\").remove(),a._glcanvas=null);var f=!!a._infolayer;e:for(n=0;n<t.length;n++){var c=t[n],v=c.uid;for(i=0;i<e.length;i++){var d=e[i];if(v===d.uid)continue e}f&&a._infolayer.select(\".cb\"+v).remove()}};er.linkSubplots=function(e,r,t,a){var n,i,o=a._plots||{},l=r._plots={},s=r._subplots,u={_fullData:e,_fullLayout:r},f=s.cartesian||[];for(n=0;n<f.length;n++){var c=f[n],v=o[c],d=$n.getFromId(u,c,\"x\"),p=$n.getFromId(u,c,\"y\"),y;for(v?y=l[c]=v:(y=l[c]={},y.id=c),d._counterAxes.push(p._id),p._counterAxes.push(d._id),d._subplotsWith.push(c),p._subplotsWith.push(c),y.xaxis=d,y.yaxis=p,y._hasClipOnAxisFalse=!1,i=0;i<e.length;i++){var m=e[i];if(m.xaxis===y.xaxis._id&&m.yaxis===y.yaxis._id&&m.cliponaxis===!1){y._hasClipOnAxisFalse=!0;break}}}var b=$n.list(u,null,!0),T;for(n=0;n<b.length;n++){T=b[n];var w=null;T.overlaying&&(w=$n.getFromId(u,T.overlaying),w&&w.overlaying&&(T.overlaying=!1,w=null)),T._mainAxis=w||T,w&&(T.domain=w.domain.slice()),T._anchorAxis=T.anchor===\"free\"?null:$n.getFromId(u,T.anchor)}for(n=0;n<b.length;n++)if(T=b[n],T._counterAxes.sort($n.idSort),T._subplotsWith.sort(gr.subplotSort),T._mainSubplot=Xye(T,r),T._counterAxes.length&&(T.spikemode&&T.spikemode.indexOf(\"across\")!==-1||T.automargin&&T.mirror&&T.anchor!==\"free\"||Qr.getComponentMethod(\"rangeslider\",\"isVisible\")(T))){var x=1,_=0;for(i=0;i<T._counterAxes.length;i++){var k=$n.getFromId(u,T._counterAxes[i]);x=Math.min(x,k.domain[0]),_=Math.max(_,k.domain[1])}x<_&&(T._counterDomainMin=x,T._counterDomainMax=_)}};function Xye(e,r){var t={_fullLayout:r},a=e._id.charAt(0)===\"x\",n=e._mainAxis._anchorAxis,i=\"\",o=\"\",l=\"\";if(n&&(l=n._mainAxis._id,i=a?e._id+l:l+e._id),!i||!r._plots[i]){i=\"\";for(var s=e._counterAxes,u=0;u<s.length;u++){var f=s[u],c=a?e._id+f:f+e._id;o||(o=c);var v=$n.getFromId(t,f);if(l&&v.overlaying===l){i=c;break}}}return i||o}er.supplyDataDefaults=function(e,r,t,a){var n=a._modules,i=a._visibleModules,o=a._basePlotModules,l=0,s=0,u,f,c;function v(T){r.push(T);var w=T._module;w&&(gr.pushUnique(n,w),T.visible===!0&&gr.pushUnique(i,w),gr.pushUnique(o,T._module.basePlotModule),l++,T._input.visible!==!1&&s++)}var d={},p=[],y=(t.template||{}).data||{},m=zye.traceTemplater(y);for(u=0;u<e.length;u++)c=e[u],f=m.newTrace(c),f.uid=a._traceUids[u],er.supplyTraceDefaults(c,f,s,a,u),f.index=u,f._input=c,v(f),Qr.traceIs(f,\"carpetAxis\")&&(d[f.carpet]=f),Qr.traceIs(f,\"carpetDependent\")&&p.push(u);for(u=0;u<p.length;u++)if(f=r[p[u]],!!f.visible){var b=d[f.carpet];if(f._carpet=b,!b||!b.visible){f.visible=!1;continue}f.xaxis=b.xaxis,f.yaxis=b.yaxis}};er.supplyAnimationDefaults=function(e){e=e||{};var r,t={};function a(n,i){return gr.coerce(e||{},t,c4,n,i)}if(a(\"mode\"),a(\"direction\"),a(\"fromcurrent\"),Array.isArray(e.frame))for(t.frame=[],r=0;r<e.frame.length;r++)t.frame[r]=er.supplyAnimationFrameDefaults(e.frame[r]||{});else t.frame=er.supplyAnimationFrameDefaults(e.frame||{});if(Array.isArray(e.transition))for(t.transition=[],r=0;r<e.transition.length;r++)t.transition[r]=er.supplyAnimationTransitionDefaults(e.transition[r]||{});else t.transition=er.supplyAnimationTransitionDefaults(e.transition||{});return t};er.supplyAnimationFrameDefaults=function(e){var r={};function t(a,n){return gr.coerce(e||{},r,c4.frame,a,n)}return t(\"duration\"),t(\"redraw\"),r};er.supplyAnimationTransitionDefaults=function(e){var r={};function t(a,n){return gr.coerce(e||{},r,c4.transition,a,n)}return t(\"duration\"),t(\"easing\"),r};er.supplyFrameDefaults=function(e){var r={};function t(a,n){return gr.coerce(e,r,Oye,a,n)}return t(\"group\"),t(\"name\"),t(\"traces\"),t(\"baseframe\"),t(\"data\"),t(\"layout\"),r};er.supplyTraceDefaults=function(e,r,t,a,n){var i=a.colorway||Nye.defaults,o=i[t%i.length],l;function s(w,x){return gr.coerce(e,r,er.attributes,w,x)}var u=s(\"visible\");s(\"type\"),s(\"name\",a._traceWord+\" \"+n),s(\"uirevision\",a.uirevision);var f=er.getModule(r);if(r._module=f,f){var c=f.basePlotModule,v=c.attr,d=c.attributes;if(v&&d){var p=a._subplots,y=\"\";if(Array.isArray(v))for(l=0;l<v.length;l++){var m=v[l],b=gr.coerce(e,r,d,m);p[m]&&gr.pushUnique(p[m],b),y+=b}else y=gr.coerce(e,r,d,v);p[c.name]&&gr.pushUnique(p[c.name],y)}}if(u&&(s(\"customdata\"),s(\"ids\"),s(\"meta\"),Qr.traceIs(r,\"showLegend\")?(gr.coerce(e,r,f.attributes.showlegend?f.attributes:er.attributes,\"showlegend\"),gr.coerce(e,r,f.attributes.legend?f.attributes:er.attributes,\"legend\"),s(\"legendwidth\"),s(\"legendgroup\"),s(\"legendgrouptitle.text\"),gr.coerce(e,r,f.attributes.legend?f.attributes:er.attributes,\"legendrank\"),r._dfltShowLegend=!0):r._dfltShowLegend=!1,f&&f.supplyDefaults(e,r,o,a),Qr.traceIs(r,\"noOpacity\")||s(\"opacity\"),Qr.traceIs(r,\"notLegendIsolatable\")&&(r.visible=!!r.visible),Qr.traceIs(r,\"noHover\")||(r.hovertemplate||gr.coerceHoverinfo(e,r,a),r.type!==\"parcats\"&&Qr.getComponentMethod(\"fx\",\"supplyDefaults\")(e,r,o,a)),f&&f.selectPoints)){var T=s(\"selectedpoints\");gr.isTypedArray(T)&&(r.selectedpoints=Array.from(T))}return r};er.supplyLayoutGlobalDefaults=function(e,r,t){function a(c,v){return gr.coerce(e,r,er.layoutAttributes,c,v)}var n=e.template;gr.isPlainObject(n)&&(r.template=n,r._template=n.layout,r._dataTemplate=n.data),a(\"autotypenumbers\");var i=gr.coerceFont(a,\"font\"),o=i.size;gr.coerceFont(a,\"title.font\",i,{overrideDflt:{size:Math.round(o*1.4)}}),a(\"title.text\",r._dfltTitle.plot),a(\"title.xref\");var l=a(\"title.yref\");a(\"title.pad.t\"),a(\"title.pad.r\"),a(\"title.pad.b\"),a(\"title.pad.l\");var s=a(\"title.automargin\");a(\"title.x\"),a(\"title.xanchor\"),a(\"title.y\"),a(\"title.yanchor\"),a(\"title.subtitle.text\",r._dfltTitle.subtitle),gr.coerceFont(a,\"title.subtitle.font\",i,{overrideDflt:{size:Math.round(r.title.font.size*.7)}}),s&&(l===\"paper\"&&(r.title.y!==0&&(r.title.y=1),r.title.yanchor===\"auto\"&&(r.title.yanchor=r.title.y===0?\"top\":\"bottom\")),l===\"container\"&&(r.title.y===\"auto\"&&(r.title.y=1),r.title.yanchor===\"auto\"&&(r.title.yanchor=r.title.y<.5?\"bottom\":\"top\")));var u=a(\"uniformtext.mode\");u&&a(\"uniformtext.minsize\"),a(\"autosize\",!(e.width&&e.height)),a(\"width\"),a(\"height\"),a(\"minreducedwidth\"),a(\"minreducedheight\"),a(\"margin.l\"),a(\"margin.r\"),a(\"margin.t\"),a(\"margin.b\"),a(\"margin.pad\"),a(\"margin.autoexpand\"),e.width&&e.height&&er.sanitizeMargins(r),Qr.getComponentMethod(\"grid\",\"sizeDefaults\")(e,r),a(\"paper_bgcolor\"),a(\"separators\",t.decimal+t.thousands),a(\"colorway\"),a(\"datarevision\");var f=a(\"uirevision\");a(\"editrevision\",f),a(\"selectionrevision\",f),Qr.getComponentMethod(\"modebar\",\"supplyLayoutDefaults\")(e,r),Qr.getComponentMethod(\"shapes\",\"supplyDrawNewShapeDefaults\")(e,r,a),Qr.getComponentMethod(\"selections\",\"supplyDrawNewSelectionDefaults\")(e,r,a),a(\"meta\"),gr.isPlainObject(e.transition)&&(a(\"transition.duration\"),a(\"transition.easing\"),a(\"transition.ordering\")),Qr.getComponentMethod(\"calendars\",\"handleDefaults\")(e,r,\"calendar\"),Qr.getComponentMethod(\"fx\",\"supplyLayoutGlobalDefaults\")(e,r,a),gr.coerce(e,r,Bye,\"scattermode\")};function Ip(e){return typeof e==\"string\"&&e.slice(-2)===\"px\"&&parseFloat(e)}er.plotAutoSize=function(r,t,a){var n=r._context||{},i=n.frameMargins,o,l,s=gr.isPlotDiv(r);if(s&&r.emit(\"plotly_autosize\"),n.fillFrame)o=window.innerWidth,l=window.innerHeight,document.body.style.overflow=\"hidden\";else{var u=s?window.getComputedStyle(r):{};if(o=Ip(u.width)||Ip(u.maxWidth)||a.width,l=Ip(u.height)||Ip(u.maxHeight)||a.height,kh(i)&&i>0){var f=1-2*i;o=Math.round(f*o),l=Math.round(f*l)}}var c=er.layoutAttributes.width.min,v=er.layoutAttributes.height.min;o<c&&(o=c),l<v&&(l=v);var d=!t.width&&Math.abs(a.width-o)>1,p=!t.height&&Math.abs(a.height-l)>1;(p||d)&&(d&&(a.width=o),p&&(a.height=l)),r._initialAutoSize||(r._initialAutoSize={width:o,height:l}),er.sanitizeMargins(a)};er.supplyLayoutModuleDefaults=function(e,r,t,a){var n=Qr.componentsRegistry,i=r._basePlotModules,o,l,s,u=Qr.subplotsRegistry.cartesian;for(o in n)s=n[o],s.includeBasePlot&&s.includeBasePlot(e,r);i.length||i.push(u),r._has(\"cartesian\")&&(Qr.getComponentMethod(\"grid\",\"contentDefaults\")(e,r),u.finalizeSubplots(e,r));for(var f in r._subplots)r._subplots[f].sort(gr.subplotSort);for(l=0;l<i.length;l++)s=i[l],s.supplyLayoutDefaults&&s.supplyLayoutDefaults(e,r,t);var c=r._modules;for(l=0;l<c.length;l++)s=c[l],s.supplyLayoutDefaults&&s.supplyLayoutDefaults(e,r,t);for(o in n)s=n[o],s.supplyLayoutDefaults&&s.supplyLayoutDefaults(e,r,t)};er.purge=function(e){var r=e._fullLayout||{};r._glcontainer!==void 0&&(r._glcontainer.selectAll(\".gl-canvas\").remove(),r._glcontainer.remove(),r._glcanvas=null),r._modeBar&&r._modeBar.destroy(),e._transitionData&&(e._transitionData._interruptCallbacks&&(e._transitionData._interruptCallbacks.length=0),e._transitionData._animationRaf&&window.cancelAnimationFrame(e._transitionData._animationRaf)),gr.clearThrottle(),gr.clearResponsive(e),delete e.data,delete e.layout,delete e._fullData,delete e._fullLayout,delete e.calcdata,delete e.empty,delete e.fid,delete e.undoqueue,delete e.undonum,delete e.autoplay,delete e.changed,delete e._promises,delete e._redrawTimer,delete e._hmlumcount,delete e._hmpixcount,delete e._transitionData,delete e._transitioning,delete e._initialAutoSize,delete e._transitioningWithDuration,delete e._dragging,delete e._dragged,delete e._dragdata,delete e._hoverdata,delete e._snapshotInProgress,delete e._editing,delete e._mouseDownTime,delete e._legendMouseDownTime,e.removeAllListeners&&e.removeAllListeners()};er.style=function(e){var r=e._fullLayout._visibleModules,t=[],a;for(a=0;a<r.length;a++){var n=r[a];n.style&&gr.pushUnique(t,n.style)}for(a=0;a<t.length;a++)t[a](e)};er.sanitizeMargins=function(e){if(!(!e||!e.margin)){var r=e.width,t=e.height,a=e.margin,n=r-(a.l+a.r),i=t-(a.t+a.b),o;n<0&&(o=(r-1)/(a.l+a.r),a.l=Math.floor(o*a.l),a.r=Math.floor(o*a.r)),i<0&&(o=(t-1)/(a.t+a.b),a.t=Math.floor(o*a.t),a.b=Math.floor(o*a.b))}};er.clearAutoMarginIds=function(e){e._fullLayout._pushmarginIds={}};er.allowAutoMargin=function(e,r){e._fullLayout._pushmarginIds[r]=1};function NP(e){var r=e.margin;if(!e._size){var t=e._size={l:Math.round(r.l),r:Math.round(r.r),t:Math.round(r.t),b:Math.round(r.b),p:Math.round(r.pad)};t.w=Math.round(e.width)-t.l-t.r,t.h=Math.round(e.height)-t.t-t.b}e._pushmargin||(e._pushmargin={}),e._pushmarginIds||(e._pushmarginIds={}),e._reservedMargin||(e._reservedMargin={})}var IP=2,BP=2;er.autoMargin=function(e,r,t){var a=e._fullLayout,n=a.width,i=a.height,o=a.margin,l=a.minreducedwidth,s=a.minreducedheight,u=gr.constrain(n-o.l-o.r,IP,l),f=gr.constrain(i-o.t-o.b,BP,s),c=Math.max(0,n-u),v=Math.max(0,i-f),d=a._pushmargin,p=a._pushmarginIds;if(o.autoexpand!==!1){if(!t)delete d[r],delete p[r];else{var y=t.pad;if(y===void 0&&(y=Math.min(12,o.l,o.r,o.t,o.b)),c){var m=(t.l+t.r)/c;m>1&&(t.l/=m,t.r/=m)}if(v){var b=(t.t+t.b)/v;b>1&&(t.t/=b,t.b/=b)}var T=t.xl!==void 0?t.xl:t.x,w=t.xr!==void 0?t.xr:t.x,x=t.yt!==void 0?t.yt:t.y,_=t.yb!==void 0?t.yb:t.y;d[r]={l:{val:T,size:t.l+y},r:{val:w,size:t.r+y},b:{val:_,size:t.b+y},t:{val:x,size:t.t+y}},p[r]=1}if(!a._replotting)return er.doAutoMargin(e)}};function Zye(e){if(\"_redrawFromAutoMarginCount\"in e._fullLayout)return!1;var r=$n.list(e,\"\",!0);for(var t in r)if(r[t].autoshift||r[t].shift)return!0;return!1}er.doAutoMargin=function(e){var r=e._fullLayout,t=r.width,a=r.height;r._size||(r._size={}),NP(r);var n=r._size,i=r.margin,o={t:0,b:0,l:0,r:0},l=gr.extendFlat({},n),s=i.l,u=i.r,f=i.t,c=i.b,v=r._pushmargin,d=r._pushmarginIds,p=r.minreducedwidth,y=r.minreducedheight;if(i.autoexpand!==!1){for(var m in v)d[m]||delete v[m];var b=e._fullLayout._reservedMargin;for(var T in b)for(var w in b[T]){var x=b[T][w];o[w]=Math.max(o[w],x)}v.base={l:{val:0,size:s},r:{val:1,size:u},t:{val:1,size:f},b:{val:0,size:c}};for(var _ in o){var k=0;for(var A in v)A!==\"base\"&&kh(v[A][_].size)&&(k=v[A][_].size>k?v[A][_].size:k);var q=Math.max(0,i[_]-k);o[_]=Math.max(0,o[_]-q)}for(var C in v){var E=v[C].l||{},P=v[C].b||{},R=E.val,N=E.size,I=P.val,O=P.size,U=t-o.r-o.l,Y=a-o.t-o.b;for(var G in v){if(kh(N)&&v[G].r){var V=v[G].r.val,W=v[G].r.size;if(V>R){var j=(N*V+(W-U)*R)/(V-R),J=(W*(1-R)+(N-U)*(1-V))/(V-R);j+J>s+u&&(s=j,u=J)}}if(kh(O)&&v[G].t){var te=v[G].t.val,ae=v[G].t.size;if(te>I){var se=(O*te+(ae-Y)*I)/(te-I),$=(ae*(1-I)+(O-Y)*(1-te))/(te-I);se+$>c+f&&(c=se,f=$)}}}}}var fe=gr.constrain(t-i.l-i.r,IP,p),ie=gr.constrain(a-i.t-i.b,BP,y),ue=Math.max(0,t-fe),ce=Math.max(0,a-ie);if(ue){var oe=(s+u)/ue;oe>1&&(s/=oe,u/=oe)}if(ce){var be=(c+f)/ce;be>1&&(c/=be,f/=be)}if(n.l=Math.round(s)+o.l,n.r=Math.round(u)+o.r,n.t=Math.round(f)+o.t,n.b=Math.round(c)+o.b,n.p=Math.round(i.pad),n.w=Math.round(t)-n.l-n.r,n.h=Math.round(a)-n.t-n.b,!r._replotting&&(er.didMarginChange(l,n)||Zye(e))){\"_redrawFromAutoMarginCount\"in r?r._redrawFromAutoMarginCount++:r._redrawFromAutoMarginCount=1;var Re=3*(1+Object.keys(d).length);if(r._redrawFromAutoMarginCount<Re)return Qr.call(\"_doPlot\",e);r._size=l,gr.warn(\"Too many auto-margin redraws.\")}$ye(e)};function $ye(e){var r=$n.list(e,\"\",!0);[\"_adjustTickLabelsOverflow\",\"_hideCounterAxisInsideTickLabels\"].forEach(function(t){for(var a=0;a<r.length;a++){var n=r[a][t];n&&n()}})}var FP=[\"l\",\"r\",\"t\",\"b\",\"p\",\"w\",\"h\"];er.didMarginChange=function(e,r){for(var t=0;t<FP.length;t++){var a=FP[t],n=e[a],i=r[a];if(!kh(n)||Math.abs(i-n)>1)return!0}return!1};er.graphJson=function(e,r=!1,t=\"json\",a=!1,n=!1){(a&&r&&!e._fullData||a&&!r&&!e._fullLayout)&&er.supplyDefaults(e);var i=a?e._fullData:e.data,o=a?e._fullLayout:e.layout,l=(e._transitionData||{})._frames;function s(c,v){if(typeof c==\"function\")return v?\"_function_\":null;if(gr.isPlainObject(c)){var d={};return Object.keys(c).sort().forEach(function(b){if([\"_\",\"[\"].indexOf(b.charAt(0))===-1){if(typeof c[b]==\"function\"){v&&(d[b]=\"_function\");return}d[b]=s(c[b],v)}}),d}var p=Array.isArray(c),y=gr.isTypedArray(c);if((p||y)&&c.dtype&&c.shape){var m=c.bdata;return s({dtype:c.dtype,shape:c.shape,bdata:gr.isArrayBuffer(m)?Pye.encode(m):m},v)}return p?c.map(function(b){return s(b,v)}):y?gr.simpleMap(c,gr.identity):gr.isJSDate(c)?gr.ms2DateTimeLocal(+c):c}var u={data:(i||[]).map(function(c){var v=s(c);return r&&delete v.fit,v})};if(!r&&(u.layout=s(o),a)){var f=o._size;u.layout.computed={margin:{b:f.b,l:f.l,r:f.r,t:f.t}}}return l&&(u.frames=s(l)),n&&(u.config=s(e._context,!0)),t===\"object\"?u:JSON.stringify(u)};er.modifyFrames=function(e,r){var t,a,n,i=e._transitionData._frames,o=e._transitionData._frameHash;for(t=0;t<r.length;t++)switch(a=r[t],a.type){case\"replace\":n=a.value;var l=(i[a.index]||{}).name,s=n.name;i[a.index]=o[s]=n,s!==l&&(delete o[l],o[s]=n);break;case\"insert\":n=a.value,o[n.name]=n,i.splice(a.index,0,n);break;case\"delete\":n=i[a.index],delete o[n.name],i.splice(a.index,1);break}return Promise.resolve()};er.computeFrame=function(e,r){var t=e._transitionData._frameHash,a,n,i,o;if(!r)throw new Error(\"computeFrame must be given a string frame name\");var l=t[r.toString()];if(!l)return!1;for(var s=[l],u=[l.name];l.baseframe&&(l=t[l.baseframe.toString()])&&u.indexOf(l.name)===-1;)s.push(l),u.push(l.name);for(var f={};l=s.pop();)if(l.layout&&(f.layout=er.extendLayout(f.layout,l.layout)),l.data){if(f.data||(f.data=[]),n=l.traces,!n)for(n=[],a=0;a<l.data.length;a++)n[a]=a;for(f.traces||(f.traces=[]),a=0;a<l.data.length;a++)i=n[a],i!=null&&(o=f.traces.indexOf(i),o===-1&&(o=f.data.length,f.traces[o]=i),f.data[o]=er.extendTrace(f.data[o],l.data[a]))}return f};er.recomputeFrameHash=function(e){for(var r=e._transitionData._frameHash={},t=e._transitionData._frames,a=0;a<t.length;a++){var n=t[a];n&&n.name&&(r[n.name]=n)}};er.extendObjectWithContainers=function(e,r,t){var a,n,i,o,l,s,u,f,c=gr.extendDeepNoArrays({},r||{}),v=gr.expandObjectPaths(c),d={};if(t&&t.length)for(i=0;i<t.length;i++)a=gr.nestedProperty(v,t[i]),n=a.get(),n===void 0?gr.nestedProperty(d,t[i]).set(null):(a.set(null),gr.nestedProperty(d,t[i]).set(n));if(e=gr.extendDeepNoArrays(e||{},v),t&&t.length){for(i=0;i<t.length;i++)if(l=gr.nestedProperty(d,t[i]),u=l.get(),!!u){for(s=gr.nestedProperty(e,t[i]),f=s.get(),Array.isArray(f)||(f=[],s.set(f)),o=0;o<u.length;o++){var p=u[o];p===null?f[o]=null:f[o]=er.extendObjectWithContainers(f[o],p)}s.set(f)}}return e};er.dataArrayContainers=[\"dimensions\"];er.layoutArrayContainers=Qr.layoutArrayContainers;er.extendTrace=function(e,r){return er.extendObjectWithContainers(e,r,er.dataArrayContainers)};er.extendLayout=function(e,r){return er.extendObjectWithContainers(e,r,er.layoutArrayContainers)};er.transition=function(e,r,t,a,n,i){var o={redraw:n.redraw},l={},s=[];return o.prepareFn=function(){for(var u=Array.isArray(r)?r.length:0,f=a.slice(0,u),c=0;c<f.length;c++){var v=f[c],d=e._fullData[v],p=d._module;if(p){if(p.animatable){var y=p.basePlotModule.name;l[y]||(l[y]=[]),l[y].push(v)}e.data[f[c]]=er.extendTrace(e.data[f[c]],r[c])}}var m=gr.expandObjectPaths(gr.extendDeepNoArrays({},t)),b=/^[xy]axis[0-9]*$/;for(var T in m)b.test(T)&&delete m[T].range;er.extendLayout(e.layout,m),delete e.calcdata,er.supplyDefaults(e),er.doCalcdata(e);var w=gr.expandObjectPaths(t);if(w){var x=e._fullLayout._plots;for(var _ in x){var k=x[_],A=k.xaxis,q=k.yaxis,C=A.range.slice(),E=q.range.slice(),P=null,R=null,N=null,I=null;Array.isArray(w[A._name+\".range\"])?P=w[A._name+\".range\"].slice():Array.isArray((w[A._name]||{}).range)&&(P=w[A._name].range.slice()),Array.isArray(w[q._name+\".range\"])?R=w[q._name+\".range\"].slice():Array.isArray((w[q._name]||{}).range)&&(R=w[q._name].range.slice()),C&&P&&(A.r2l(C[0])!==A.r2l(P[0])||A.r2l(C[1])!==A.r2l(P[1]))&&(N={xr0:C,xr1:P}),E&&R&&(q.r2l(E[0])!==q.r2l(R[0])||q.r2l(E[1])!==q.r2l(R[1]))&&(I={yr0:E,yr1:R}),(N||I)&&s.push(gr.extendFlat({plotinfo:k},N,I))}}return Promise.resolve()},o.runFn=function(u){var f,c=e._fullLayout._basePlotModules,v=s.length,d;if(t)for(d=0;d<c.length;d++)c[d].transitionAxes&&c[d].transitionAxes(e,s,i,u);v?(f=gr.extendFlat({},i),f.duration=0,delete l.cartesian):f=i;for(var p in l){var y=l[p],m=e._fullData[y[0]]._module;m.basePlotModule.plot(e,y,f,u)}},OP(e,i,o)};er.transitionFromReact=function(e,r,t,a){var n=e._fullLayout,i=n.transition,o={},l=[];return o.prepareFn=function(){var s=n._plots;o.redraw=!1,r.anim===\"some\"&&(o.redraw=!0),t.anim===\"some\"&&(o.redraw=!0);for(var u in s){var f=s[u],c=f.xaxis,v=f.yaxis,d=a[c._name].range.slice(),p=a[v._name].range.slice(),y=c.range.slice(),m=v.range.slice();c.setScale(),v.setScale();var b=null,T=null;(c.r2l(d[0])!==c.r2l(y[0])||c.r2l(d[1])!==c.r2l(y[1]))&&(b={xr0:d,xr1:y}),(v.r2l(p[0])!==v.r2l(m[0])||v.r2l(p[1])!==v.r2l(m[1]))&&(T={yr0:p,yr1:m}),(b||T)&&l.push(gr.extendFlat({plotinfo:f},b,T))}return Promise.resolve()},o.runFn=function(s){for(var u=e._fullData,f=e._fullLayout,c=f._basePlotModules,v,d,p,y=[],m=0;m<u.length;m++)y.push(m);function b(){if(e._fullLayout)for(var w=0;w<c.length;w++)c[w].transitionAxes&&c[w].transitionAxes(e,l,v,s)}function T(){if(e._fullLayout)for(var w=0;w<c.length;w++)c[w].plot(e,p,d,s)}l.length&&r.anim?i.ordering===\"traces first\"?(v=gr.extendFlat({},i,{duration:0}),p=y,d=i,setTimeout(b,i.duration),T()):(v=i,p=null,d=gr.extendFlat({},i,{duration:0}),setTimeout(T,v.duration),b()):l.length?(v=i,b()):r.anim&&(p=y,d=i,T())},OP(e,i,o)};function OP(e,r,t){var a=!1;function n(c){var v=Promise.resolve();if(!c)return v;for(;c.length;)v=v.then(c.shift());return v}function i(c){if(c)for(;c.length;)c.shift()}function o(){return e.emit(\"plotly_transitioning\",[]),new Promise(function(c){e._transitioning=!0,r.duration>0&&(e._transitioningWithDuration=!0),e._transitionData._interruptCallbacks.push(function(){a=!0}),t.redraw&&e._transitionData._interruptCallbacks.push(function(){return Qr.call(\"redraw\",e)}),e._transitionData._interruptCallbacks.push(function(){e.emit(\"plotly_transitioninterrupted\",[])});var v=0,d=0;function p(){return v++,function(){d++,!a&&d===v&&l(c)}}t.runFn(p),setTimeout(p())})}function l(c){if(e._transitionData)return i(e._transitionData._interruptCallbacks),Promise.resolve().then(function(){if(t.redraw)return Qr.call(\"redraw\",e)}).then(function(){e._transitioning=!1,e._transitioningWithDuration=!1,e.emit(\"plotly_transitioned\",[])}).then(c)}function s(){if(e._transitionData)return e._transitioning=!1,n(e._transitionData._interruptCallbacks)}var u=[er.previousPromises,s,t.prepareFn,er.rehover,er.reselect,o],f=gr.syncOrAsync(u,e);return(!f||!f.then)&&(f=Promise.resolve()),f.then(function(){return e})}er.doCalcdata=function(e,r){var t=$n.list(e),a=e._fullData,n=e._fullLayout,i,o,l,s=new Array(a.length),u=(e.calcdata||[]).slice();for(e.calcdata=s,n._numBoxes=0,n._numViolins=0,n._violinScaleGroupStats={},e._hmpixcount=0,e._hmlumcount=0,n._piecolormap={},n._sunburstcolormap={},n._treemapcolormap={},n._iciclecolormap={},n._funnelareacolormap={},l=0;l<a.length;l++)if(Array.isArray(r)&&r.indexOf(l)===-1){s[l]=u[l];continue}for(l=0;l<a.length;l++)i=a[l],i._arrayAttrs=Fye.findArrayAttributes(i),i._extremes={};var f=n._subplots.polar||[];for(l=0;l<f.length;l++)t.push(n[f[l]].radialaxis,n[f[l]].angularaxis);for(var c in n._colorAxes){var v=n[c];v.cauto!==!1&&(delete v.cmin,delete v.cmax)}function d(y,m){if(i=a[y],o=i._module,!!o.isContainer===m){var b=[];i.visible===!0&&i._length!==0&&o&&o.calc&&(b=o.calc(e,i)),(!Array.isArray(b)||!b[0])&&(b=[{x:EP,y:EP}]),b[0].t||(b[0].t={}),b[0].trace=i,s[y]=b}}for(Qye(t,a,n),l=0;l<a.length;l++)d(l,!0);for(l=0;l<a.length;l++)d(l,!1);zP(e);var p=Kye(t,e);if(p.length){for(n._numBoxes=0,n._numViolins=0,l=0;l<p.length;l++)d(p[l],!0);for(l=0;l<p.length;l++)d(p[l],!1);zP(e)}Qr.getComponentMethod(\"fx\",\"calc\")(e),Qr.getComponentMethod(\"errorbars\",\"calc\")(e)};var Jye=/(total|sum|min|max|mean|geometric mean|median) (ascending|descending)/;function Kye(e,r){var t=[],a,n,i,o,l;function s(G,V,W){var j=V._id.charAt(0);if(G===\"histogram2dcontour\"){var J=V._counterAxes[0],te=$n.getFromId(r,J),ae=j===\"x\"||J===\"x\"&&te.type===\"category\",se=j===\"y\"||J===\"y\"&&te.type===\"category\";return function($,fe){return $===0||fe===0||ae&&$===W[fe].length-1||se&&fe===W.length-1?-1:(j===\"y\"?fe:$)-1}}else return function($,fe){return j===\"y\"?fe:$}}var u={min:function(G){return gr.aggNums(Math.min,null,G)},max:function(G){return gr.aggNums(Math.max,null,G)},sum:function(G){return gr.aggNums(function(V,W){return V+W},null,G)},total:function(G){return gr.aggNums(function(V,W){return V+W},null,G)},mean:function(G){return gr.mean(G)},\"geometric mean\":function(G){return gr.geometricMean(G)},median:function(G){return gr.median(G)}};function f(G,V){return G[1]-V[1]}function c(G,V){return V[1]-G[1]}for(a=0;a<e.length;a++){var v=e[a];if(v.type===\"category\"){var d=v.categoryorder.match(Jye);if(d){var p=d[1],y=d[2],m=v._id.charAt(0),b=m===\"x\",T=[];for(n=0;n<v._categories.length;n++)T.push([v._categories[n],[]]);for(n=0;n<v._traceIndices.length;n++){var w=v._traceIndices[n],x=r._fullData[w];if(x.visible===!0){var _=x.type;Qr.traceIs(x,\"histogram\")&&(delete x._xautoBinFinished,delete x._yautoBinFinished);var k=_===\"splom\",A=_===\"scattergl\",q=r.calcdata[w];for(i=0;i<q.length;i++){var C=q[i],E,P;if(k){var R=x._axesDim[v._id];if(!b){var N=x._diag[R][0];N&&(v=r._fullLayout[$n.id2name(N)])}var I=C.trace.dimensions[R].values;for(o=0;o<I.length;o++)for(E=v._categoriesMap[I[o]],l=0;l<C.trace.dimensions.length;l++)if(l!==R){var O=C.trace.dimensions[l];T[E][1].push(O.values[o])}}else if(A){for(o=0;o<C.t.x.length;o++)b?(E=C.t.x[o],P=C.t.y[o]):(E=C.t.y[o],P=C.t.x[o]),T[E][1].push(P);C.t&&C.t._scene&&delete C.t._scene.dirty}else if(C.hasOwnProperty(\"z\")){P=C.z;var U=s(x.type,v,P);for(o=0;o<P.length;o++)for(l=0;l<P[o].length;l++)E=U(l,o),E+1&&T[E][1].push(P[o][l])}else{if(E=C.p,E===void 0&&(E=C[m]),isNaN(E)||E<0)continue;for(P=C.s,P===void 0&&(P=C.v),P===void 0&&(P=b?C.y:C.x),Array.isArray(P)||(P===void 0?P=[]:P=[P]),o=0;o<P.length;o++)T[E][1].push(P[o])}}}}v._categoriesValue=T;var Y=[];for(n=0;n<T.length;n++)Y.push([T[n][0],u[p](T[n][1])]);Y.sort(y===\"descending\"?c:f),v._categoriesAggregatedValue=Y,v._initialCategories=Y.map(function(G){return G[0]}),t=t.concat(v.sortByInitialCategories())}}}return t}function Qye(e,r,t){var a={};function n(s){s.clearCalc(),s.type===\"multicategory\"&&s.setupMultiCategory(r),a[s._id]=1}gr.simpleMap(e,n);for(var i=t._axisMatchGroups||[],o=0;o<i.length;o++)for(var l in i[o])a[l]||n(t[$n.id2name(l)])}function zP(e){var r=e._fullLayout,t=r._visibleModules,a={},n,i,o;for(i=0;i<t.length;i++){var l=t[i],s=l.crossTraceCalc;if(s){var u=l.basePlotModule.name;a[u]?gr.pushUnique(a[u],s):a[u]=[s]}}for(o in a){var f=a[o],c=r._subplots[o];if(Array.isArray(c))for(n=0;n<c.length;n++){var v=c[n],d=o===\"cartesian\"?r._plots[v]:r[v];for(i=0;i<f.length;i++)f[i](e,d,v)}else for(i=0;i<f.length;i++)f[i](e)}}er.rehover=function(e){e._fullLayout._rehover&&e._fullLayout._rehover()};er.redrag=function(e){e._fullLayout._redrag&&e._fullLayout._redrag()};er.reselect=function(e){var r=e._fullLayout,t=(e.layout||{}).selections,a=r._previousSelections;r._previousSelections=t;var n=r._reselect||JSON.stringify(t)!==JSON.stringify(a);Qr.getComponentMethod(\"selections\",\"reselect\")(e,n)};er.generalUpdatePerTraceModule=function(e,r,t,a){var n=r.traceHash,i={},o;for(o=0;o<t.length;o++){var l=t[o],s=l[0].trace;s.visible&&(i[s.type]=i[s.type]||[],i[s.type].push(l))}for(var u in n)if(!i[u]){var f=n[u][0],c=f[0].trace;c.visible=!1,i[u]=[f]}for(var v in i){var d=i[v],p=d[0][0].trace._module;p.plot(e,r,gr.filterVisible(d),a)}r.traceHash=i};er.plotBasePlot=function(e,r,t,a,n){var i=Qr.getModule(e),o=Hye(r.calcdata,i)[0];i.plot(r,o,a,n)};er.cleanBasePlot=function(e,r,t,a,n){var i=n._has&&n._has(e),o=t._has&&t._has(e);i&&!o&&n[\"_\"+e+\"layer\"].selectAll(\"g.trace\").remove()}});var Il=z(Gu=>{\"use strict\";Gu.xmlns=\"http://www.w3.org/2000/xmlns/\";Gu.svg=\"http://www.w3.org/2000/svg\";Gu.xlink=\"http://www.w3.org/1999/xlink\";Gu.svgAttrs={xmlns:Gu.svg,\"xmlns:xlink\":Gu.xlink}});var Qa=z((jGe,UP)=>{\"use strict\";UP.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:\"right\",right:\"left\",top:\"bottom\",bottom:\"top\"}}});var Ca=z(vi=>{\"use strict\";var La=Er(),zi=ke(),ege=zi.strTranslate,v4=Il(),rge=Qa().LINE_SPACING,tge=/([^$]*)([$]+[^$]*[$]+)([^$]*)/,XP=e=>e?e.match(tge):null;vi.matchTex=XP;vi.convertToTspans=function(e,r,t){var a=e.text(),n=!e.attr(\"data-notex\")&&r&&r._context.typesetMath&&XP(a);n&&!oge()&&(n=null);var i=La.select(e.node().parentNode);if(i.empty())return;var o=e.attr(\"class\")?e.attr(\"class\").split(\" \")[0]:\"text\";o+=\"-math\",i.selectAll(\"svg.\"+o).remove(),i.selectAll(\"g.\"+o+\"-group\").remove(),e.style(\"display\",null).attr({\"data-unformatted\":a,\"data-math\":\"N\"});function l(){i.empty()||(o=e.attr(\"class\")+\"-math\",i.select(\"svg.\"+o).remove()),e.text(\"\").style(\"white-space\",\"pre\");var s=mge(e.node(),a);s&&e.style(\"pointer-events\",\"all\"),vi.positionText(e),t&&t.call(e)}return n?(r&&r._promises||[]).push(new Promise(function(s){e.style(\"display\",\"none\");var u=parseInt(e.node().style.fontSize,10),f={fontSize:u},c=e.attr(\"text-anchor\");lge(n[2],f,function(v,d,p){i.selectAll(\"svg.\"+o).remove(),i.selectAll(\"g.\"+o+\"-group\").remove();var y=v&&v.select(\"svg\");if(!y||!y.node()){l(),s();return}e.style(\"display\",\"none\");var m=i.append(\"g\").classed(o+\"-group\",!0).attr({\"pointer-events\":\"none\",\"data-unformatted\":a,\"data-math\":\"Y\"});m.node().appendChild(y.node()),d&&d.node()&&y.node().insertBefore(d.node().cloneNode(!0),y.node().firstChild);var b=p.width,T=p.height;y.attr({class:o,height:T,preserveAspectRatio:\"xMinYMin meet\"}).style({overflow:\"visible\",\"pointer-events\":\"none\",\"font-size\":f.fontSize+\"px\"});var w=e.node().style.fill||\"black\",x=y.select(\"g\");x.attr({fill:w,stroke:w});var _=x.node().getBoundingClientRect(),k=_.width,A=_.height;(k>b||A>T)&&(y.style(\"overflow\",\"hidden\"),_=y.node().getBoundingClientRect(),k=_.width,A=_.height);var q=+e.attr(\"x\"),C=+e.attr(\"y\"),E=u||e.node().getBoundingClientRect().height,P=-E/4;o[0]===\"y\"?m.attr({transform:\"rotate(\"+[-90,q,C]+\")\"+ege(-k/2,P-A/2)}):o[0]===\"l\"?C=P-A/2:o[0]===\"a\"&&o.indexOf(\"atitle\")!==0?(q=0,C=P):(q=q-k*(c===\"middle\"?.5:c===\"end\"?1:0),C=C+P-A/2),y.attr({x:q,y:C}),t&&t.call(e,m),s(m)})})):l(),e};var age=/(<|&lt;|&#60;)/g,nge=/(>|&gt;|&#62;)/g;function ige(e){return e.replace(age,\"\\\\lt \").replace(nge,\"\\\\gt \")}var h4=null,ZP=()=>typeof MathJax!=\"undefined\"&&MathJax.version?parseInt(MathJax.version.split(\".\")[0]):null,GP=!1,YP=!1;function oge(){let e=ZP();return e===3||e===4?!0:(e===null?GP||(GP=!0,zi.warn(\"MathJax is not loaded. Math equations will not be rendered.\")):YP||(YP=!0,zi.warn(\"Unsupported MathJax version:\",MathJax.version)),!1)}function lge(e,r,t){let a=ZP();var n;let i=function(){if(!h4){let u=MathJax._.output.svg_ts.SVG,f=zi.extendFlat({},MathJax.config.svg,{fontCache:\"local\"});a===4&&(f.linebreaks=zi.extendFlat({},f.linebreaks,{inline:!1})),h4=MathJax._.mathjax.mathjax.document(document,zi.extendFlat({},MathJax.config.options,{InputJax:MathJax.startup.input,OutputJax:new u(f)}))}let l=\"math-output-\"+zi.randstr({},64);n=La.select(\"body\").append(\"div\").attr({id:l}).style({visibility:\"hidden\",position:\"absolute\",\"font-size\":r.fontSize+\"px\"});let s=ige(e).replace(/^\\$+|\\$+$/g,\"\");return MathJax._.mathjax.mathjax.handleRetriesFor(function(){return h4.convert(s,{display:!1})}).then(function(u){n.node().appendChild(u)})},o=function(){let l=n.select(\".MathJax\"),s=!l.empty()&&n.select(\"svg\").node();if(!s)zi.log(\"There was an error in the tex syntax.\",e),t();else{let u=s.getBoundingClientRect(),f=l.select(\"defs\");t(l,f,u)}n.remove()};Promise.resolve().then(i).then(o).catch(l=>{zi.log(\"MathJax typesetting failed.\",e,l),n&&n.remove(),t()})}var $P={sup:\"font-size:70%\",sub:\"font-size:70%\",s:\"text-decoration:line-through\",u:\"text-decoration:underline\",b:\"font-weight:bold\",i:\"font-style:italic\",a:\"cursor:pointer\",span:\"\",em:\"font-style:italic;font-weight:bold\"},sge={sub:\"0.3em\",sup:\"-0.6em\"},uge={sub:\"-0.21em\",sup:\"0.42em\"},VP=\"\\u200B\",jP=[\"http:\",\"https:\",\"mailto:\",\"\",void 0,\":\"],JP=vi.NEWLINES=/(\\r\\n?|\\n)/g,p4=/(<[^<>]*>)/,m4=/<(\\/?)([^ >]*)(\\s+(.*))?>/i,fge=/<br(\\s+.*)?>/i;vi.BR_TAG_ALL=/<br(\\s+.*)?>/gi;var KP=/(^|[\\s\"'])style\\s*=\\s*(\"([^\"]*);?\"|'([^']*);?')/i,QP=/(^|[\\s\"'])href\\s*=\\s*(\"([^\"]*)\"|'([^']*)')/i,eR=/(^|[\\s\"'])target\\s*=\\s*(\"([^\"\\s]*)\"|'([^'\\s]*)')/i,cge=/(^|[\\s\"'])popup\\s*=\\s*(\"([\\w=,]*)\"|'([\\w=,]*)')/i;function Yu(e,r){if(!e)return null;var t=e.match(r),a=t&&(t[3]||t[4]);return a&&Op(a)}var vge=/(^|;)\\s*color:/;vi.plainText=function(e,r){r=r||{};for(var t=r.len!==void 0&&r.len!==-1?r.len:1/0,a=r.allowedTags!==void 0?r.allowedTags:[\"br\"],n=\"...\",i=n.length,o=e.split(p4),l=[],s=\"\",u=0,f=0;f<o.length;f++){var c=o[f],v=c.match(m4),d=v&&v[2].toLowerCase();if(d)a.indexOf(d)!==-1&&(l.push(c),s=d);else{var p=c.length;if(u+p<t)l.push(c),u+=p;else if(u<t){var y=t-u;s&&(s!==\"br\"||y<=i||p<=i)&&l.pop(),t>i?l.push(c.slice(0,Math.max(0,y-i))+n):l.push(c.slice(0,y));break}s=\"\"}}return l.join(\"\")};var hge={mu:\"\\u03BC\",amp:\"&\",lt:\"<\",gt:\">\",nbsp:\"\\xA0\",times:\"\\xD7\",plusmn:\"\\xB1\",deg:\"\\xB0\"},dge=/&(#\\d+|#x[\\da-fA-F]+|[a-z]+);/g;function Op(e){return e.replace(dge,function(r,t){var a;return t.charAt(0)===\"#\"?a=pge(t.charAt(1)===\"x\"?parseInt(t.slice(2),16):parseInt(t.slice(1),10)):a=hge[t],a||r})}vi.convertEntities=Op;function pge(e){if(!(e>1114111)){var r=String.fromCodePoint;if(r)return r(e);var t=String.fromCharCode;return e<=65535?t(e):t((e>>10)+55232,e%1024+56320)}}function mge(e,r){r=r.replace(JP,\" \");var t=!1,a=[],n,i=-1;function o(){i++;var k=document.createElementNS(v4.svg,\"tspan\");La.select(k).attr({class:\"line\",dy:i*rge+\"em\"}),e.appendChild(k),n=k;var A=a;if(a=[{node:k}],A.length>1)for(var q=1;q<A.length;q++)l(A[q])}function l(k){var A=k.type,q={},C;if(A===\"a\"){C=\"a\";var E=k.target,P=k.href,R=k.popup;P&&(q={\"xlink:xlink:show\":E===\"_blank\"||E.charAt(0)!==\"_\"?\"new\":\"replace\",target:E,\"xlink:xlink:href\":P},R&&(q.onclick='window.open(this.href.baseVal,this.target.baseVal,\"'+R+'\");return false;'))}else C=\"tspan\";k.style&&(q.style=k.style);var N=document.createElementNS(v4.svg,C);if(A===\"sup\"||A===\"sub\"){s(n,VP),n.appendChild(N);var I=document.createElementNS(v4.svg,\"tspan\");s(I,VP),La.select(I).attr(\"dy\",uge[A]),q.dy=sge[A],n.appendChild(N),n.appendChild(I)}else n.appendChild(N);La.select(N).attr(q),n=k.node=N,a.push(k)}function s(k,A){k.appendChild(document.createTextNode(A))}function u(k){if(a.length===1){zi.log(\"Ignoring unexpected end tag </\"+k+\">.\",r);return}var A=a.pop();k!==A.type&&zi.log(\"Start tag <\"+A.type+\"> doesnt match end tag <\"+k+\">. Pretending it did match.\",r),n=a[a.length-1].node}var f=fge.test(r);f?o():(n=e,a=[{node:e}]);for(var c=r.split(p4),v=0;v<c.length;v++){var d=c[v],p=d.match(m4),y=p&&p[2].toLowerCase(),m=$P[y];if(y===\"br\")o();else if(m===void 0)s(n,Op(d));else if(p[1])u(y);else{var b=p[4],T={type:y},w=Yu(b,KP);if(w?(w=w.replace(vge,\"$1 fill:\"),m&&(w+=\";\"+m)):m&&(w=m),w&&(T.style=w),y===\"a\"){t=!0;var x=Yu(b,QP);if(x){var _=rR(x);_&&(T.href=_,T.target=Yu(b,eR)||\"_blank\",T.popup=Yu(b,cge))}}l(T)}}return t}function rR(e){var r=encodeURI(decodeURI(e)),t=document.createElement(\"a\"),a=document.createElement(\"a\");t.href=e,a.href=r;var n=t.protocol,i=a.protocol;return jP.indexOf(n)!==-1&&jP.indexOf(i)!==-1?r:\"\"}vi.sanitizeHTML=function(r){r=r.replace(JP,\" \");for(var t=document.createElement(\"p\"),a=t,n=[],i=r.split(p4),o=0;o<i.length;o++){var l=i[o],s=l.match(m4),u=s&&s[2].toLowerCase();if(u in $P)if(s[1])n.length&&(a=n.pop());else{var f=s[4],c=Yu(f,KP),v=c?{style:c}:{};if(u===\"a\"){var d=Yu(f,QP);if(d){var p=rR(d);if(p){v.href=p;var y=Yu(f,eR);y&&(v.target=y)}}}var m=document.createElement(u);a.appendChild(m),La.select(m).attr(v),a=m,n.push(m)}else a.appendChild(document.createTextNode(Op(l)))}var b=\"innerHTML\";return t[b]};vi.lineCount=function(r){return r.selectAll(\"tspan.line\").size()||1};vi.positionText=function(r,t,a){return r.each(function(){var n=La.select(this);function i(s,u){return u===void 0?(u=n.attr(s),u===null&&(n.attr(s,0),u=0)):n.attr(s,u),u}var o=i(\"x\",t),l=i(\"y\",a);this.nodeName===\"text\"&&n.selectAll(\"tspan.line\").attr({x:o,y:l})})};function WP(e,r,t){var a=t.horizontalAlign,n=t.verticalAlign||\"top\",i=e.node().getBoundingClientRect(),o=r.node().getBoundingClientRect(),l,s,u;return n===\"bottom\"?s=function(){return i.bottom-l.height}:n===\"middle\"?s=function(){return i.top+(i.height-l.height)/2}:s=function(){return i.top},a===\"right\"?u=function(){return i.right-l.width}:a===\"center\"?u=function(){return i.left+(i.width-l.width)/2}:u=function(){return i.left},function(){l=this.node().getBoundingClientRect();var f=u()-o.left,c=s()-o.top,v=t.gd||{};if(t.gd){v._fullLayout._calcInverseTransform(v);var d=zi.apply3DTransform(v._fullLayout._invTransform)(f,c);f=d[0],c=d[1]}return this.style({top:c+\"px\",left:f+\"px\",\"z-index\":1e3}),this}}var d4=\"1px \";vi.makeTextShadow=function(e){var r=d4,t=d4,a=d4;return r+t+a+e+\", -\"+r+\"-\"+t+a+e+\", \"+r+\"-\"+t+a+e+\", -\"+r+t+a+e};vi.makeEditable=function(e,r){var t=r.gd,a=r.delegate,n=La.dispatch(\"edit\",\"input\",\"cancel\"),i=a||e;if(e.style({\"pointer-events\":a?\"none\":\"all\"}),e.size()!==1)throw new Error(\"boo\");function o(){s(),e.style({opacity:0});var u=i.attr(\"class\"),f;u?f=\".\"+u.split(\" \")[0]+\"-math-group\":f=\"[class*=-math-group]\",f&&La.select(e.node().parentNode).select(f).style({opacity:0})}function l(u){var f=u.node(),c=document.createRange();c.selectNodeContents(f);var v=window.getSelection();v.removeAllRanges(),v.addRange(c),f.focus()}function s(){var u=La.select(t),f=u.select(\".svg-container\"),c=f.append(\"div\"),v=e.node().style,d=parseFloat(v.fontSize||12),p=r.text;p===void 0&&(p=e.attr(\"data-unformatted\")),c.classed(\"plugin-editable editable\",!0).style({position:\"absolute\",\"font-family\":v.fontFamily||\"Arial\",\"font-size\":d,color:r.fill||v.fill||\"black\",opacity:1,\"background-color\":r.background||\"transparent\",outline:\"#ffffff33 1px solid\",margin:[-d/8+1,0,0,-1].join(\"px \")+\"px\",padding:\"0\",\"box-sizing\":\"border-box\"}).attr({contenteditable:!0}).text(p).call(WP(e,f,r)).on(\"blur\",function(){t._editing=!1,e.text(this.textContent).style({opacity:1});var y=La.select(this).attr(\"class\"),m;y?m=\".\"+y.split(\" \")[0]+\"-math-group\":m=\"[class*=-math-group]\",m&&La.select(e.node().parentNode).select(m).style({opacity:0});var b=this.textContent;La.select(this).transition().duration(0).remove(),La.select(document).on(\"mouseup\",null),n.edit.call(e,b)}).on(\"focus\",function(){var y=this;t._editing=!0,La.select(document).on(\"mouseup\",function(){if(La.event.target===y)return!1;document.activeElement===c.node()&&c.node().blur()})}).on(\"keyup\",function(){La.event.which===27?(t._editing=!1,e.style({opacity:1}),La.select(this).style({opacity:0}).on(\"blur\",function(){return!1}).transition().remove(),n.cancel.call(e,this.textContent)):(n.input.call(e,this.textContent),La.select(this).call(WP(e,f,r)))}).on(\"keydown\",function(){La.event.which===13&&this.blur()}).call(l)}return r.immediate?o():i.on(\"click\",o),La.rebind(e,n,\"on\")}});var hi=z((XGe,lR)=>{\"use strict\";var yge=Er(),qh=Ir(),Hp=ke(),Vu=Sr(),gge=Ru().isValid;function bge(e,r,t){var a=r?Hp.nestedProperty(e,r).get()||{}:e,n=a[t||\"color\"];n&&n._inputArray&&(n=n._inputArray);var i=!1;if(Hp.isArrayOrTypedArray(n)){for(var o=0;o<n.length;o++)if(qh(n[o])){i=!0;break}}return Hp.isPlainObject(a)&&(i||a.showscale===!0||qh(a.cmin)&&qh(a.cmax)||gge(a.colorscale)||Hp.isPlainObject(a.colorbar))}var tR=[\"showscale\",\"autocolorscale\",\"colorscale\",\"reversescale\",\"colorbar\"],Sh=[\"min\",\"max\",\"mid\",\"auto\"];function aR(e){var r=e._colorAx,t=r||e,a={},n,i,o;for(i=0;i<tR.length;i++)o=tR[i],a[o]=t[o];if(r)for(n=\"c\",i=0;i<Sh.length;i++)o=Sh[i],a[o]=t[\"c\"+o];else{var l;for(i=0;i<Sh.length;i++){if(o=Sh[i],l=\"c\"+o,l in t){a[o]=t[l];continue}l=\"z\"+o,l in t&&(a[o]=t[l])}n=l.charAt(0)}return a._sync=function(s,u){var f=Sh.indexOf(s)!==-1?n+s:s;t[f]=t[\"_\"+f]=u},a}function nR(e){for(var r=aR(e),t=r.min,a=r.max,n=r.reversescale?iR(r.colorscale):r.colorscale,i=n.length,o=new Array(i),l=new Array(i),s=0;s<i;s++){var u=n[s];o[s]=t+u[0]*(a-t),l[s]=u[1]}return{domain:o,range:l}}function iR(e){for(var r=e.length,t=new Array(r),a=r-1,n=0;a>=0;a--,n++){var i=e[a];t[n]=[1-i[0],i[1]]}return t}function oR(e,r){r=r||{};for(var t=e.domain,a=e.range,n=a.length,i=new Array(n),o=0;o<n;o++)i[o]=Vu.rgbaArray(a[o]);var l=yge.scale.linear().domain(t).range(i).clamp(!0),s=r.noNumericCheck,u=r.returnArray,f;return s&&u?f=l:s?f=function(c){return Vu.rgbaArrayToString(l(c))}:u?f=function(c){return qh(c)?l(c):Vu.isValid(c)?c:Vu.defaultLine}:f=function(c){return qh(c)?Vu.rgbaArrayToString(l(c)):Vu.isValid(c)?c:Vu.defaultLine},f.domain=l.domain,f.range=function(){return a},f}function xge(e,r){return oR(nR(e),r)}lR.exports={hasColorscale:bge,extractOpts:aR,extractScale:nR,flipScale:iR,makeColorScaleFunc:oR,makeColorScaleFuncFromTrace:xge}});var ko=z((ZGe,fR)=>{\"use strict\";var sR=P_(),_ge=sR.FORMAT_LINK,wge=sR.DATE_FORMAT_LINK;function Tge(e,r){return{valType:\"string\",dflt:\"\",editType:\"none\",description:(r?y4:uR)(\"hover text\",e)+[\"By default the values are formatted using \"+(r?\"generic number format\":\"`\"+e+\"axis.hoverformat`\")+\".\"].join(\" \")}}function y4(e,r){return[\"Sets the \"+e+\" formatting rule\"+(r?\" for `\"+r+\"`\":\"\"),\"using d3 formatting mini-languages\",\"which are very similar to those in Python. For numbers, see: \"+_ge+\".\"].join(\" \")}function uR(e,r){return y4(e,r)+[\" And for dates see: \"+wge+\".\",\"We add two items to d3's date formatter:\",\"*%h* for half of the year as a decimal number as well as\",\"*%{n}f* for fractional seconds\",\"with n digits. For example, *2016-10-13 09:15:23.456* with tickformat\",\"*%H~%M~%S.%2f* would display *09~15~23.46*\"].join(\" \")}fR.exports={axisHoverFormat:Tge,descriptionOnlyNumbers:y4,descriptionWithDates:uR}});var Ni=z((JGe,SR)=>{\"use strict\";var cR=ka(),j0=Ei(),kR=Pi().dash,b4=At().extendFlat,vR=St().templatedArray,$Ge=fi().templateFormatStringDescription,hR=ko().descriptionWithDates,Age=Gt().ONEDAY,Qo=qa(),Mge=Qo.HOUR_PATTERN,kge=Qo.WEEKDAY_PATTERN,g4={valType:\"enumerated\",values:[\"auto\",\"linear\",\"array\"],editType:\"ticks\",impliedEdits:{tick0:void 0,dtick:void 0}},Sge=b4({},g4,{values:g4.values.slice().concat([\"sync\"])});function dR(e){return{valType:\"integer\",min:0,dflt:e?5:0,editType:\"ticks\"}}var pR={valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},mR={valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},yR={valType:\"data_array\",editType:\"ticks\"},gR={valType:\"enumerated\",values:[\"outside\",\"inside\",\"\"],editType:\"ticks\"};function bR(e){var r={valType:\"number\",min:0,editType:\"ticks\"};return e||(r.dflt=5),r}function xR(e){var r={valType:\"number\",min:0,editType:\"ticks\"};return e||(r.dflt=1),r}var _R={valType:\"color\",dflt:j0.defaultLine,editType:\"ticks\"},wR={valType:\"color\",dflt:j0.lightLine,editType:\"ticks\"};function TR(e){var r={valType:\"number\",min:0,editType:\"ticks\"};return e||(r.dflt=1),r}var AR=b4({},kR,{editType:\"ticks\"}),MR={valType:\"boolean\",editType:\"ticks\"};SR.exports={visible:{valType:\"boolean\",editType:\"plot\"},color:{valType:\"color\",dflt:j0.defaultLine,editType:\"ticks\"},title:{text:{valType:\"string\",editType:\"ticks\"},font:cR({editType:\"ticks\",description:\"Sets this axis' title font.\"}),standoff:{valType:\"number\",min:0,editType:\"ticks\"},editType:\"ticks\"},type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"log\",\"date\",\"category\",\"multicategory\"],dflt:\"-\",editType:\"calc\",_noTemplating:!0},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},autorange:{valType:\"enumerated\",values:[!0,!1,\"reversed\",\"min reversed\",\"max reversed\",\"min\",\"max\"],dflt:!0,editType:\"axrange\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},autorangeoptions:{minallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},maxallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},clipmin:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},clipmax:{valType:\"any\",editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},include:{valType:\"any\",arrayOk:!0,editType:\"plot\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},editType:\"plot\"},rangemode:{valType:\"enumerated\",values:[\"normal\",\"tozero\",\"nonnegative\"],dflt:\"normal\",editType:\"plot\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0},{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0}],editType:\"axrange\",impliedEdits:{autorange:!1},anim:!0},minallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},maxallowed:{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},fixedrange:{valType:\"boolean\",dflt:!1,editType:\"calc\"},modebardisable:{valType:\"flaglist\",flags:[\"autoscale\",\"zoominout\"],extras:[\"none\"],dflt:\"none\",editType:\"modebar\"},insiderange:{valType:\"info_array\",items:[{valType:\"any\",editType:\"plot\"},{valType:\"any\",editType:\"plot\"}],editType:\"plot\"},scaleanchor:{valType:\"enumerated\",values:[Qo.idRegex.x.toString(),Qo.idRegex.y.toString(),!1],editType:\"plot\"},scaleratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},constrain:{valType:\"enumerated\",values:[\"range\",\"domain\"],editType:\"plot\"},constraintoward:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\",\"top\",\"middle\",\"bottom\"],editType:\"plot\"},matches:{valType:\"enumerated\",values:[Qo.idRegex.x.toString(),Qo.idRegex.y.toString()],editType:\"calc\"},rangebreaks:vR(\"rangebreak\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},bounds:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},pattern:{valType:\"enumerated\",values:[kge,Mge,\"\"],editType:\"calc\"},values:{valType:\"info_array\",freeLength:!0,editType:\"calc\",items:{valType:\"any\",editType:\"calc\"}},dvalue:{valType:\"number\",editType:\"calc\",min:0,dflt:Age},editType:\"calc\"}),tickmode:Sge,nticks:dR(),tick0:pR,dtick:mR,ticklabelstep:{valType:\"integer\",min:1,dflt:1,editType:\"ticks\"},tickvals:yR,ticktext:{valType:\"data_array\",editType:\"ticks\"},ticks:gR,tickson:{valType:\"enumerated\",values:[\"labels\",\"boundaries\"],dflt:\"labels\",editType:\"ticks\"},ticklabelmode:{valType:\"enumerated\",values:[\"instant\",\"period\"],dflt:\"instant\",editType:\"ticks\"},ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside left\",\"inside left\",\"outside right\",\"inside right\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\",editType:\"calc\"},ticklabeloverflow:{valType:\"enumerated\",values:[\"allow\",\"hide past div\",\"hide past domain\"],editType:\"calc\"},ticklabelshift:{valType:\"integer\",dflt:0,editType:\"ticks\"},ticklabelstandoff:{valType:\"integer\",dflt:0,editType:\"ticks\"},ticklabelindex:{valType:\"integer\",arrayOk:!0,editType:\"calc\"},mirror:{valType:\"enumerated\",values:[!0,\"ticks\",!1,\"all\",\"allticks\"],dflt:!1,editType:\"ticks+layoutstyle\"},ticklen:bR(),tickwidth:xR(),tickcolor:_R,showticklabels:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},labelalias:{valType:\"any\",dflt:!1,editType:\"ticks\"},automargin:{valType:\"flaglist\",flags:[\"height\",\"width\",\"left\",\"right\",\"top\",\"bottom\"],extras:[!0,!1],dflt:!1,editType:\"ticks\"},showspikes:{valType:\"boolean\",dflt:!1,editType:\"modebar\"},spikecolor:{valType:\"color\",dflt:null,editType:\"none\"},spikethickness:{valType:\"number\",dflt:3,editType:\"none\"},spikedash:b4({},kR,{dflt:\"dash\",editType:\"none\"}),spikemode:{valType:\"flaglist\",flags:[\"toaxis\",\"across\",\"marker\"],dflt:\"toaxis\",editType:\"none\"},spikesnap:{valType:\"enumerated\",values:[\"data\",\"cursor\",\"hovered data\"],dflt:\"hovered data\",editType:\"none\"},tickfont:cR({editType:\"ticks\"}),tickangle:{valType:\"angle\",dflt:\"auto\",editType:\"ticks\"},autotickangles:{valType:\"info_array\",freeLength:!0,items:{valType:\"angle\"},dflt:[0,30,90],editType:\"ticks\"},tickprefix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showtickprefix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},ticksuffix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showticksuffix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},showexponent:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},exponentformat:{valType:\"enumerated\",values:[\"none\",\"e\",\"E\",\"power\",\"SI\",\"B\",\"SI extended\"],dflt:\"B\",editType:\"ticks\"},minexponent:{valType:\"number\",dflt:3,min:0,editType:\"ticks\"},separatethousands:{valType:\"boolean\",dflt:!1,editType:\"ticks\"},tickformat:{valType:\"string\",dflt:\"\",editType:\"ticks\",description:hR(\"tick label\")},tickformatstops:vR(\"tickformatstop\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dtickrange:{valType:\"info_array\",items:[{valType:\"any\",editType:\"ticks\"},{valType:\"any\",editType:\"ticks\"}],editType:\"ticks\"},value:{valType:\"string\",dflt:\"\",editType:\"ticks\"},editType:\"ticks\"}),hoverformat:{valType:\"string\",dflt:\"\",editType:\"none\",description:hR(\"hover text\")},unifiedhovertitle:{text:{valType:\"string\",dflt:\"\",editType:\"none\"},editType:\"none\"},showline:{valType:\"boolean\",dflt:!1,editType:\"ticks+layoutstyle\"},linecolor:{valType:\"color\",dflt:j0.defaultLine,editType:\"layoutstyle\"},linewidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks+layoutstyle\"},showgrid:MR,gridcolor:wR,gridwidth:TR(),griddash:AR,zeroline:{valType:\"boolean\",editType:\"ticks\"},zerolinecolor:{valType:\"color\",dflt:j0.defaultLine,editType:\"ticks\"},zerolinelayer:{valType:\"enumerated\",values:[\"above traces\",\"below traces\"],dflt:\"below traces\",editType:\"plot\"},zerolinewidth:{valType:\"number\",dflt:1,editType:\"ticks\"},showdividers:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dividercolor:{valType:\"color\",dflt:j0.defaultLine,editType:\"ticks\"},dividerwidth:{valType:\"number\",dflt:1,editType:\"ticks\"},anchor:{valType:\"enumerated\",values:[\"free\",Qo.idRegex.x.toString(),Qo.idRegex.y.toString()],editType:\"plot\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"left\",\"right\"],editType:\"plot\"},overlaying:{valType:\"enumerated\",values:[\"free\",Qo.idRegex.x.toString(),Qo.idRegex.y.toString()],editType:\"plot\"},minor:{tickmode:g4,nticks:dR(\"minor\"),tick0:pR,dtick:mR,tickvals:yR,ticks:gR,ticklen:bR(\"minor\"),tickwidth:xR(\"minor\"),tickcolor:_R,gridcolor:wR,gridwidth:TR(\"minor\"),griddash:AR,showgrid:MR,editType:\"ticks\"},minorloglabels:{valType:\"enumerated\",values:[\"small digits\",\"complete\",\"none\"],dflt:\"small digits\",editType:\"calc\"},layer:{valType:\"enumerated\",values:[\"above traces\",\"below traces\"],dflt:\"above traces\",editType:\"plot\"},domain:{valType:\"info_array\",items:[{valType:\"number\",min:0,max:1,editType:\"plot\"},{valType:\"number\",min:0,max:1,editType:\"plot\"}],dflt:[0,1],editType:\"plot\"},position:{valType:\"number\",min:0,max:1,dflt:0,editType:\"plot\"},autoshift:{valType:\"boolean\",dflt:!1,editType:\"plot\"},shift:{valType:\"number\",editType:\"plot\"},categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\",\"total ascending\",\"total descending\",\"min ascending\",\"min descending\",\"max ascending\",\"max descending\",\"sum ascending\",\"sum descending\",\"mean ascending\",\"mean descending\",\"geometric mean ascending\",\"geometric mean descending\",\"median ascending\",\"median descending\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\"}});var Up=z((KGe,CR)=>{\"use strict\";var It=Ni(),qR=ka(),LR=At().extendFlat,qge=wo().overrideAll;CR.exports=qge({orientation:{valType:\"enumerated\",values:[\"h\",\"v\"],dflt:\"v\"},thicknessmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"pixels\"},thickness:{valType:\"number\",min:0,dflt:30},lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\"},xref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"]},xpad:{valType:\"number\",min:0,dflt:10},y:{valType:\"number\"},yref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"]},ypad:{valType:\"number\",min:0,dflt:10},outlinecolor:It.linecolor,outlinewidth:It.linewidth,bordercolor:It.linecolor,borderwidth:{valType:\"number\",min:0,dflt:0},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\"},tickmode:It.minor.tickmode,nticks:It.nticks,tick0:It.tick0,dtick:It.dtick,tickvals:It.tickvals,ticktext:It.ticktext,ticks:LR({},It.ticks,{dflt:\"\"}),ticklabeloverflow:LR({},It.ticklabeloverflow,{}),ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside left\",\"inside left\",\"outside right\",\"inside right\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\"},ticklen:It.ticklen,tickwidth:It.tickwidth,tickcolor:It.tickcolor,ticklabelstep:It.ticklabelstep,showticklabels:It.showticklabels,labelalias:It.labelalias,tickfont:qR({description:\"Sets the color bar's tick label font\"}),tickangle:It.tickangle,tickformat:It.tickformat,tickformatstops:It.tickformatstops,tickprefix:It.tickprefix,showtickprefix:It.showtickprefix,ticksuffix:It.ticksuffix,showticksuffix:It.showticksuffix,separatethousands:It.separatethousands,exponentformat:It.exponentformat,minexponent:It.minexponent,showexponent:It.showexponent,title:{text:{valType:\"string\"},font:qR({description:\"Sets this color bar's title font.\"}),side:{valType:\"enumerated\",values:[\"right\",\"top\",\"bottom\"]}}},\"colorbars\",\"from-root\")});var el=z((eYe,ER)=>{\"use strict\";var Lge=Up(),Cge=(C0(),un(L0)).counter,Dge=(U_(),un(H_)).default,DR=Ru().scales,QGe=Dge(DR);function Gp(e){return\"`\"+e+\"`\"}ER.exports=function(r,t){r=r||\"\",t=t||{};var a=t.cLetter||\"c\",n=\"onlyIfNumerical\"in t?t.onlyIfNumerical:!!r,i=\"noScale\"in t?t.noScale:r===\"marker.line\",o=\"showScaleDflt\"in t?t.showScaleDflt:a===\"z\",l=typeof t.colorscaleDflt==\"string\"?DR[t.colorscaleDflt]:null,s=t.editTypeOverride||\"\",u=r?r+\".\":\"\",f,c;\"colorAttr\"in t?(f=t.colorAttr,c=t.colorAttr):(f={z:\"z\",c:\"color\"}[a],c=\"in \"+Gp(u+f));var v=n?\" Has an effect only if \"+c+\" is set to a numerical array.\":\"\",d=a+\"auto\",p=a+\"min\",y=a+\"max\",m=a+\"mid\",b=Gp(u+d),T=Gp(u+p),w=Gp(u+y),x=T+\" and \"+w,_={};_[p]=_[y]=void 0;var k={};k[d]=!1;var A={};return f===\"color\"&&(A.color={valType:\"color\",arrayOk:!0,editType:s||\"style\"},t.anim&&(A.color.anim=!0)),A[d]={valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:_},A[p]={valType:\"number\",dflt:null,editType:s||\"plot\",impliedEdits:k},A[y]={valType:\"number\",dflt:null,editType:s||\"plot\",impliedEdits:k},A[m]={valType:\"number\",dflt:null,editType:\"calc\",impliedEdits:_},A.colorscale={valType:\"colorscale\",editType:\"calc\",dflt:l,impliedEdits:{autocolorscale:!1}},A.autocolorscale={valType:\"boolean\",dflt:t.autoColorDflt!==!1,editType:\"calc\",impliedEdits:{colorscale:void 0}},A.reversescale={valType:\"boolean\",dflt:!1,editType:\"plot\"},i||(A.showscale={valType:\"boolean\",dflt:o,editType:\"calc\"},A.colorbar=Lge),t.noColorAxis||(A.coloraxis={valType:\"subplotid\",regex:Cge(\"coloraxis\"),dflt:null,editType:\"calc\"}),A}});var _4=z((rYe,PR)=>{\"use strict\";var Ege=At().extendFlat,Pge=el(),x4=Ru().scales;PR.exports={editType:\"calc\",colorscale:{editType:\"calc\",sequential:{valType:\"colorscale\",dflt:x4.Reds,editType:\"calc\"},sequentialminus:{valType:\"colorscale\",dflt:x4.Blues,editType:\"calc\"},diverging:{valType:\"colorscale\",dflt:x4.RdBu,editType:\"calc\"}},coloraxis:Ege({_isSubplotObj:!0,editType:\"calc\"},Pge(\"\",{colorAttr:\"corresponding trace color array(s)\",noColorAxis:!0,showScaleDflt:!0}))}});var w4=z((tYe,RR)=>{\"use strict\";var Rge=ke();RR.exports=function(r){return Rge.isPlainObject(r.colorbar)}});var M4=z(A4=>{\"use strict\";var T4=Ir(),FR=ke(),zR=Gt(),Fge=zR.ONEDAY,zge=zR.ONEWEEK;A4.dtick=function(e,r){var t=r===\"log\",a=r===\"date\",n=r===\"category\",i=a?Fge:1;if(!e)return i;if(T4(e))return e=Number(e),e<=0?i:n?Math.max(1,Math.round(e)):a?Math.max(.1,e):e;if(typeof e!=\"string\"||!(a||t))return i;var o=e.charAt(0),l=e.slice(1);return l=T4(l)?Number(l):0,l<=0||!(a&&o===\"M\"&&l===Math.round(l)||t&&o===\"L\"||t&&o===\"D\"&&(l===1||l===2))?i:e};A4.tick0=function(e,r,t,a){if(r===\"date\")return FR.cleanDate(e,FR.dateTick0(t,a%zge===0?1:0));if(!(a===\"D1\"||a===\"D2\"))return T4(e)?Number(e):0}});var Yp=z((nYe,IR)=>{\"use strict\";var NR=M4(),Nge=ke().isArrayOrTypedArray,Ige=Vn().isTypedArraySpec,Bge=Vn().decodeTypedArraySpec;IR.exports=function(r,t,a,n,i={}){var o=i.isMinor,l=o?r.minor||{}:r,s=o?t.minor:t,u=o?\"minor.\":\"\";function f(x){var _=l[x];return Ige(_)&&(_=Bge(_)),_!==void 0?_:(s._template||{})[x]}var c=f(\"tick0\"),v=f(\"dtick\"),d=f(\"tickvals\"),p=f(\"overlaying\"),y=n===\"category\"||n===\"multicategory\",m;Nge(d)?m=\"array\":v?m=\"linear\":p&&!y?m=\"sync\":m=\"auto\";var b=a(u+\"tickmode\",m);if(b===\"auto\"||b===\"sync\")a(u+\"nticks\");else if(b===\"linear\"){var T=s.dtick=NR.dtick(v,n);s.tick0=NR.tick0(c,n,t.calendar,T)}else if(n!==\"multicategory\"){var w=a(u+\"tickvals\");w===void 0?s.tickmode=\"auto\":o||a(\"ticktext\")}}});var Vp=z((iYe,OR)=>{\"use strict\";var k4=ke(),BR=Ni();OR.exports=function(r,t,a,n){var i=n.isMinor,o=i?r.minor||{}:r,l=i?t.minor:t,s=i?BR.minor:BR,u=i?\"minor.\":\"\",f=k4.coerce2(o,l,s,\"ticklen\",i?(t.ticklen||5)*.6:void 0),c=k4.coerce2(o,l,s,\"tickwidth\",i?t.tickwidth||1:void 0),v=k4.coerce2(o,l,s,\"tickcolor\",(i?t.tickcolor:void 0)||l.color),d=a(u+\"ticks\",!i&&n.outerTicks||f||c||v?\"outside\":\"\");d||(delete l.ticklen,delete l.tickwidth,delete l.tickcolor)}});var S4=z((oYe,HR)=>{\"use strict\";HR.exports=function(r){var t=[\"showexponent\",\"showtickprefix\",\"showticksuffix\"],a=t.filter(function(i){return r[i]!==void 0}),n=function(i){return r[i]===r[a[0]]};if(a.every(n)||a.length===1)return r[a[0]]}});var So=z((lYe,UR)=>{\"use strict\";var jp=ke(),Oge=St();UR.exports=function(r,t,a){var n=a.name,i=a.inclusionAttr||\"visible\",o=t[n],l=jp.isArrayOrTypedArray(r[n])?r[n]:[],s=t[n]=[],u=Oge.arrayTemplater(t,n,i),f,c;for(f=0;f<l.length;f++){var v=l[f];jp.isPlainObject(v)?c=u.newItem(v):(c=u.newItem({}),c[i]=!1),c._index=f,c[i]!==!1&&a.handleItemDefaults(v,c,t,a),s.push(c)}var d=u.defaultItems();for(f=0;f<d.length;f++)c=d[f],c._index=s.length,a.handleItemDefaults({},c,t,a,{}),s.push(c);if(jp.isArrayOrTypedArray(o)){var p=Math.min(o.length,s.length);for(f=0;f<p;f++)jp.relinkPrivateKeys(s[f],o[f])}return s}});var Wp=z((sYe,YR)=>{\"use strict\";var q4=ke(),Hge=Sr().contrast,GR=Ni(),Uge=S4(),Gge=So();YR.exports=function(r,t,a,n,i){i||(i={});var o=a(\"labelalias\");q4.isPlainObject(o)||delete t.labelalias;var l=Uge(r),s=a(\"showticklabels\");if(s){i.noTicklabelshift||a(\"ticklabelshift\"),i.noTicklabelstandoff||a(\"ticklabelstandoff\");var u=i.font||{},f=t.color,c=t.ticklabelposition||\"\",v=c.indexOf(\"inside\")!==-1?Hge(i.bgColor):f&&f!==GR.color.dflt?f:u.color;if(q4.coerceFont(a,\"tickfont\",u,{overrideDflt:{color:v}}),!i.noTicklabelstep&&n!==\"multicategory\"&&n!==\"log\"&&a(\"ticklabelstep\"),!i.noAng){var d=a(\"tickangle\");!i.noAutotickangles&&d===\"auto\"&&a(\"autotickangles\")}if(n!==\"category\"){var p=a(\"tickformat\");Gge(r,t,{name:\"tickformatstops\",inclusionAttr:\"enabled\",handleItemDefaults:Yge}),t.tickformatstops.length||delete t.tickformatstops,!i.noExp&&!p&&n!==\"date\"&&(a(\"showexponent\",l),a(\"exponentformat\"),a(\"minexponent\"),a(\"separatethousands\"))}!i.noMinorloglabels&&n===\"log\"&&a(\"minorloglabels\")}};function Yge(e,r){function t(n,i){return q4.coerce(e,r,GR.tickformatstops,n,i)}var a=t(\"enabled\");a&&(t(\"dtickrange\"),t(\"value\"))}});var Xp=z((uYe,VR)=>{\"use strict\";var Vge=S4();VR.exports=function(r,t,a,n,i){i||(i={});var o=i.tickSuffixDflt,l=Vge(r),s=a(\"tickprefix\");s&&a(\"showtickprefix\",l);var u=a(\"ticksuffix\",o);u&&a(\"showticksuffix\",l)}});var L4=z((fYe,jR)=>{\"use strict\";var Ss=ke(),jge=St(),Wge=Yp(),Xge=Vp(),Zge=Wp(),$ge=Xp(),Jge=Up();jR.exports=function(r,t,a){var n=jge.newContainer(t,\"colorbar\"),i=r.colorbar||{};function o(P,R){return Ss.coerce(i,n,Jge,P,R)}var l=a.margin||{t:0,b:0,l:0,r:0},s=a.width-l.l-l.r,u=a.height-l.t-l.b,f=o(\"orientation\"),c=f===\"v\",v=o(\"thicknessmode\");o(\"thickness\",v===\"fraction\"?30/(c?s:u):30);var d=o(\"lenmode\");o(\"len\",d===\"fraction\"?1:c?u:s);var p=o(\"yref\"),y=o(\"xref\"),m=p===\"paper\",b=y===\"paper\",T,w,x,_=\"left\";c?(x=\"middle\",_=b?\"left\":\"right\",T=b?1.02:1,w=.5):(x=m?\"bottom\":\"top\",_=\"center\",T=.5,w=m?1.02:1),Ss.coerce(i,n,{x:{valType:\"number\",min:b?-2:0,max:b?3:1,dflt:T}},\"x\"),Ss.coerce(i,n,{y:{valType:\"number\",min:m?-2:0,max:m?3:1,dflt:w}},\"y\"),o(\"xanchor\",_),o(\"xpad\"),o(\"yanchor\",x),o(\"ypad\"),Ss.noneOrAll(i,n,[\"x\",\"y\"]),o(\"outlinecolor\"),o(\"outlinewidth\"),o(\"bordercolor\"),o(\"borderwidth\"),o(\"bgcolor\");var k=Ss.coerce(i,n,{ticklabelposition:{valType:\"enumerated\",dflt:\"outside\",values:c?[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"]:[\"outside\",\"inside\",\"outside left\",\"inside left\",\"outside right\",\"inside right\"]}},\"ticklabelposition\");o(\"ticklabeloverflow\",k.indexOf(\"inside\")!==-1?\"hide past domain\":\"hide past div\"),Wge(i,n,o,\"linear\");var A=a.font,q={noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0,outerTicks:!1,font:A};k.indexOf(\"inside\")!==-1&&(q.bgColor=\"black\"),$ge(i,n,o,\"linear\",q),Zge(i,n,o,\"linear\",q),Xge(i,n,o,\"linear\",q),o(\"title.text\",a._dfltTitle.colorbar);var C=n.showticklabels?n.tickfont:A,E=Ss.extendFlat({},A,{family:C.family,size:Ss.bigFont(C.size)});Ss.coerceFont(o,\"title.font\",E),o(\"title.side\",c?\"top\":\"right\")}});var Bl=z((cYe,ZR)=>{\"use strict\";var WR=Ir(),D4=ke(),Kge=w4(),Qge=L4(),XR=Ru().isValid,e3e=Tr().traceIs;function C4(e,r){var t=r.slice(0,r.length-1);return r?D4.nestedProperty(e,t).get()||{}:e}ZR.exports=function e(r,t,a,n,i){var o=i.prefix,l=i.cLetter,s=\"_module\"in t,u=C4(r,o),f=C4(t,o),c=C4(t._template||{},o)||{},v=function(){return delete r.coloraxis,delete t.coloraxis,e(r,t,a,n,i)};if(s){var d=a._colorAxes||{},p=n(o+\"coloraxis\");if(p){var y=e3e(t,\"contour\")&&D4.nestedProperty(t,\"contours.coloring\").get()||\"heatmap\",m=d[p];m?(m[2].push(v),m[0]!==y&&(m[0]=!1,D4.warn([\"Ignoring coloraxis:\",p,\"setting\",\"as it is linked to incompatible colorscales.\"].join(\" \")))):d[p]=[y,t,[v]];return}}var b=u[l+\"min\"],T=u[l+\"max\"],w=WR(b)&&WR(T)&&b<T,x=n(o+l+\"auto\",!w);x?n(o+l+\"mid\"):(n(o+l+\"min\"),n(o+l+\"max\"));var _=u.colorscale,k=c.colorscale,A;if(_!==void 0&&(A=!XR(_)),k!==void 0&&(A=!XR(k)),n(o+\"autocolorscale\",A),n(o+\"colorscale\"),n(o+\"reversescale\"),o!==\"marker.line.\"){var q;o&&s&&(q=Kge(u));var C=n(o+\"showscale\",q);C&&(o&&c&&(f._template=c),Qge(u,f,a))}}});var QR=z((vYe,KR)=>{\"use strict\";var $R=ke(),r3e=St(),JR=_4(),t3e=Bl();KR.exports=function(r,t){function a(c,v){return $R.coerce(r,t,JR,c,v)}a(\"colorscale.sequential\"),a(\"colorscale.sequentialminus\"),a(\"colorscale.diverging\");var n=t._colorAxes,i,o;function l(c,v){return $R.coerce(i,o,JR.coloraxis,c,v)}for(var s in n){var u=n[s];if(u[0])i=r[s]||{},o=r3e.newContainer(t,s,\"coloraxis\"),o._name=s,t3e(i,o,t,l,{prefix:\"\",cLetter:\"c\"});else{for(var f=0;f<u[2].length;f++)u[2][f]();delete t._colorAxes[s]}}}});var rF=z((hYe,eF)=>{\"use strict\";var a3e=ke(),n3e=hi().hasColorscale,i3e=hi().extractOpts;eF.exports=function(r,t){function a(f,c){var v=f[\"_\"+c];v!==void 0&&(f[c]=v)}function n(f,c){var v=c.container?a3e.nestedProperty(f,c.container).get():f;if(v)if(v.coloraxis)v._colorAx=t[v.coloraxis];else{var d=i3e(v),p=d.auto;(p||d.min===void 0)&&a(v,c.min),(p||d.max===void 0)&&a(v,c.max),d.autocolorscale&&a(v,\"colorscale\")}}for(var i=0;i<r.length;i++){var o=r[i],l=o._module.colorbar;if(l)if(Array.isArray(l))for(var s=0;s<l.length;s++)n(o,l[s]);else n(o,l);n3e(o,\"marker.line\")&&n(o,{container:\"marker.line\",min:\"cmin\",max:\"cmax\"})}for(var u in t._colorAxes)n(t[u],{min:\"cmin\",max:\"cmax\"})}});var W0=z((dYe,aF)=>{\"use strict\";var tF=Ir(),E4=ke(),o3e=hi().extractOpts;aF.exports=function(r,t,a){var n=r._fullLayout,i=a.vals,o=a.containerStr,l=o?E4.nestedProperty(t,o).get():t,s=o3e(l),u=s.auto!==!1,f=s.min,c=s.max,v=s.mid,d=function(){return E4.aggNums(Math.min,null,i)},p=function(){return E4.aggNums(Math.max,null,i)};if(f===void 0?f=d():u&&(l._colorAx&&tF(f)?f=Math.min(f,d()):f=d()),c===void 0?c=p():u&&(l._colorAx&&tF(c)?c=Math.max(c,p()):c=p()),u&&v!==void 0&&(c-v>v-f?f=v-(c-v):c-v<v-f&&(c=v+(v-f))),f===c&&(f-=.5,c+=.5),s._sync(\"min\",f),s._sync(\"max\",c),s.autocolorscale){var y;f*c<0?y=n.colorscale.diverging:f>=0?y=n.colorscale.sequential:y=n.colorscale.sequentialminus,s._sync(\"colorscale\",y)}}});var rl=z((pYe,nF)=>{\"use strict\";var Zp=Ru(),X0=hi();nF.exports={moduleType:\"component\",name:\"colorscale\",attributes:el(),layoutAttributes:_4(),supplyLayoutDefaults:QR(),handleDefaults:Bl(),crossTraceDefaults:rF(),calc:W0(),scales:Zp.scales,defaultScale:Zp.defaultScale,getScale:Zp.get,isValidScale:Zp.isValid,hasColorscale:X0.hasColorscale,extractOpts:X0.extractOpts,extractScale:X0.extractScale,flipScale:X0.flipScale,makeColorScaleFunc:X0.makeColorScaleFunc,makeColorScaleFuncFromTrace:X0.makeColorScaleFuncFromTrace}});var Jn=z((mYe,oF)=>{\"use strict\";var iF=ke(),l3e=Vn().isTypedArraySpec;oF.exports={hasLines:function(e){return e.visible&&e.mode&&e.mode.indexOf(\"lines\")!==-1},hasMarkers:function(e){return e.visible&&(e.mode&&e.mode.indexOf(\"markers\")!==-1||e.type===\"splom\")},hasText:function(e){return e.visible&&e.mode&&e.mode.indexOf(\"text\")!==-1},isBubble:function(e){var r=e.marker;return iF.isPlainObject(r)&&(iF.isArrayOrTypedArray(r.size)||l3e(r.size))}}});var sF=z((yYe,lF)=>{\"use strict\";var s3e=Ir();lF.exports=function(r,t){t||(t=2);var a=r.marker,n=a.sizeref||1,i=a.sizemin||0,o=a.sizemode===\"area\"?function(l){return Math.sqrt(l/n)}:function(l){return l/n};return function(l){var s=o(l/t);return s3e(s)&&s>0?Math.max(s,i):0}}});var qo=z(en=>{\"use strict\";var Lh=ke();en.getSubplot=function(e){return e.subplot||e.xaxis+e.yaxis||e.geo};en.isTraceInSubplots=function(e,r){if(e.type===\"splom\"){for(var t=e.xaxes||[],a=e.yaxes||[],n=0;n<t.length;n++)for(var i=0;i<a.length;i++)if(r.indexOf(t[n]+a[i])!==-1)return!0;return!1}return r.indexOf(en.getSubplot(e))!==-1};en.flat=function(e,r){for(var t=new Array(e.length),a=0;a<e.length;a++)t[a]=r;return t};en.p2c=function(e,r){for(var t=new Array(e.length),a=0;a<e.length;a++)t[a]=e[a].p2c(r);return t};en.c2dApply=function(e,r){e.length!==r.length&&Lh.warn(\"c2dApply: axArray and valArray must be the same length\");for(var t=new Array(r.length),a=0;a<r.length;a++){var n=e&&e[a];t[a]=n&&n.c2d?n.c2d(r[a]):r[a]}return t};en.getDistanceFunction=function(e,r,t,a){return e===\"closest\"?a||en.quadrature(r,t):e.charAt(0)===\"x\"?r:t};en.getClosest=function(e,r,t){if(t.index!==!1)t.index>=0&&t.index<e.length?t.distance=0:t.index=!1;else for(var a=1/0,n=e.length,i=0;i<n;i++)a=r(e[i]),a<=t.distance&&(t.index=i,t.distance=a);return t};en.inbox=function(e,r,t){return e*r<0||e===0?t:1/0};en.quadrature=function(e,r){return function(t){var a=e(t),n=r(t);return Math.sqrt(a*a+n*n)}};en.makeEventData=function(e,r,t){var a=\"index\"in e?e.index:e.pointNumber,n={data:r._input,fullData:r,curveNumber:r.index,pointNumber:a};return n.pointIndex=a,r._module.eventData?n=r._module.eventData(n,e,r,t,a):(\"xVal\"in e?n.x=e.xVal:\"x\"in e&&(n.x=e.x),\"yVal\"in e?n.y=e.yVal:\"y\"in e&&(n.y=e.y),e.xa&&(n.xaxis=e.xa),e.ya&&(n.yaxis=e.ya),e.zLabelVal!==void 0&&(n.z=e.zLabelVal)),en.appendArrayPointValue(n,r,a),n};en.appendArrayPointValue=function(e,r,t){var a=r._arrayAttrs;if(a)for(var n=0;n<a.length;n++){var i=a[n],o=uF(i);if(e[o]===void 0){var l=Lh.nestedProperty(r,i).get(),s=fF(l,t);s!==void 0&&(e[o]=s)}}};en.appendArrayMultiPointValues=function(e,r,t){var a=r._arrayAttrs;if(a)for(var n=0;n<a.length;n++){var i=a[n],o=uF(i);if(e[o]===void 0){for(var l=Lh.nestedProperty(r,i).get(),s=new Array(t.length),u=0;u<t.length;u++)s[u]=fF(l,t[u]);e[o]=s}}};var u3e={ids:\"id\",locations:\"location\",labels:\"label\",values:\"value\",\"marker.colors\":\"color\",parents:\"parent\"};function uF(e){return u3e[e]||e}function fF(e,r){if(Array.isArray(r)){if(Lh.isArrayOrTypedArray(e)&&Lh.isArrayOrTypedArray(e[r[0]]))return e[r[0]][r[1]]}else return e[r]}var f3e={x:!0,y:!0},c3e={\"x unified\":!0,\"y unified\":!0};en.isUnifiedHover=function(e){return typeof e!=\"string\"?!1:!!c3e[e]};en.isXYhover=function(e){return typeof e!=\"string\"?!1:!!f3e[e]}});var R4=z((bYe,cF)=>{var P4={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},v3e=/([astvzqmhlc])([^astvzqmhlc]*)/gi,h3e=/-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi;function d3e(e){let r=[];return e.replace(v3e,(t,a,n)=>{let i=a.toLowerCase(),o=a,l=p3e(n);for(i===\"m\"&&l.length>2&&(r.push([o,...l.splice(0,2)]),i=\"l\",o=o===\"m\"?\"l\":\"L\");;){if(l.length===P4[i])return r.push([o,...l]),\"\";if(l.length<P4[i])throw new Error(\"malformed path data\");r.push([o,...l.splice(0,P4[i])])}}),r}function p3e(e){let r=e.match(h3e);return r?r.map(Number):[]}cF.exports=d3e});var gF=z((xYe,yF)=>{\"use strict\";var m3e=R4(),Ke=function(e,r){return r?Math.round(e*(r=Math.pow(10,r)))/r:Math.round(e)},Pr=\"M0,0Z\",vF=Math.sqrt(2),qs=Math.sqrt(3),F4=Math.PI,z4=Math.cos,N4=Math.sin;yF.exports={circle:{n:0,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=\"M\"+a+\",0A\"+a+\",\"+a+\" 0 1,1 0,-\"+a+\"A\"+a+\",\"+a+\" 0 0,1 \"+a+\",0Z\";return t?Fr(r,t,n):n}},square:{n:1,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M\"+a+\",\"+a+\"H-\"+a+\"V-\"+a+\"H\"+a+\"Z\")}},diamond:{n:2,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.3,2);return Fr(r,t,\"M\"+a+\",0L0,\"+a+\"L-\"+a+\",0L0,-\"+a+\"Z\")}},cross:{n:3,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.4,2),n=Ke(e*1.2,2);return Fr(r,t,\"M\"+n+\",\"+a+\"H\"+a+\"V\"+n+\"H-\"+a+\"V\"+a+\"H-\"+n+\"V-\"+a+\"H-\"+a+\"V-\"+n+\"H\"+a+\"V-\"+a+\"H\"+n+\"Z\")}},x:{n:4,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.8/vF,2),n=\"l\"+a+\",\"+a,i=\"l\"+a+\",-\"+a,o=\"l-\"+a+\",-\"+a,l=\"l-\"+a+\",\"+a;return Fr(r,t,\"M0,\"+a+n+i+o+i+o+l+o+l+n+l+n+\"Z\")}},\"triangle-up\":{n:5,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2/qs,2),n=Ke(e/2,2),i=Ke(e,2);return Fr(r,t,\"M-\"+a+\",\"+n+\"H\"+a+\"L0,-\"+i+\"Z\")}},\"triangle-down\":{n:6,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2/qs,2),n=Ke(e/2,2),i=Ke(e,2);return Fr(r,t,\"M-\"+a+\",-\"+n+\"H\"+a+\"L0,\"+i+\"Z\")}},\"triangle-left\":{n:7,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2/qs,2),n=Ke(e/2,2),i=Ke(e,2);return Fr(r,t,\"M\"+n+\",-\"+a+\"V\"+a+\"L-\"+i+\",0Z\")}},\"triangle-right\":{n:8,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2/qs,2),n=Ke(e/2,2),i=Ke(e,2);return Fr(r,t,\"M-\"+n+\",-\"+a+\"V\"+a+\"L\"+i+\",0Z\")}},\"triangle-ne\":{n:9,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.6,2),n=Ke(e*1.2,2);return Fr(r,t,\"M-\"+n+\",-\"+a+\"H\"+a+\"V\"+n+\"Z\")}},\"triangle-se\":{n:10,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.6,2),n=Ke(e*1.2,2);return Fr(r,t,\"M\"+a+\",-\"+n+\"V\"+a+\"H-\"+n+\"Z\")}},\"triangle-sw\":{n:11,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.6,2),n=Ke(e*1.2,2);return Fr(r,t,\"M\"+n+\",\"+a+\"H-\"+a+\"V-\"+n+\"Z\")}},\"triangle-nw\":{n:12,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.6,2),n=Ke(e*1.2,2);return Fr(r,t,\"M-\"+a+\",\"+n+\"V-\"+a+\"H\"+n+\"Z\")}},pentagon:{n:13,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.951,2),n=Ke(e*.588,2),i=Ke(-e,2),o=Ke(e*-.309,2),l=Ke(e*.809,2);return Fr(r,t,\"M\"+a+\",\"+o+\"L\"+n+\",\"+l+\"H-\"+n+\"L-\"+a+\",\"+o+\"L0,\"+i+\"Z\")}},hexagon:{n:14,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=Ke(e/2,2),i=Ke(e*qs/2,2);return Fr(r,t,\"M\"+i+\",-\"+n+\"V\"+n+\"L0,\"+a+\"L-\"+i+\",\"+n+\"V-\"+n+\"L0,-\"+a+\"Z\")}},hexagon2:{n:15,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=Ke(e/2,2),i=Ke(e*qs/2,2);return Fr(r,t,\"M-\"+n+\",\"+i+\"H\"+n+\"L\"+a+\",0L\"+n+\",-\"+i+\"H-\"+n+\"L-\"+a+\",0Z\")}},octagon:{n:16,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.924,2),n=Ke(e*.383,2);return Fr(r,t,\"M-\"+n+\",-\"+a+\"H\"+n+\"L\"+a+\",-\"+n+\"V\"+n+\"L\"+n+\",\"+a+\"H-\"+n+\"L-\"+a+\",\"+n+\"V-\"+n+\"Z\")}},star:{n:17,f:function(e,r,t){if(Rr(r))return Pr;var a=e*1.4,n=Ke(a*.225,2),i=Ke(a*.951,2),o=Ke(a*.363,2),l=Ke(a*.588,2),s=Ke(-a,2),u=Ke(a*-.309,2),f=Ke(a*.118,2),c=Ke(a*.809,2),v=Ke(a*.382,2);return Fr(r,t,\"M\"+n+\",\"+u+\"H\"+i+\"L\"+o+\",\"+f+\"L\"+l+\",\"+c+\"L0,\"+v+\"L-\"+l+\",\"+c+\"L-\"+o+\",\"+f+\"L-\"+i+\",\"+u+\"H-\"+n+\"L0,\"+s+\"Z\")}},hexagram:{n:18,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.66,2),n=Ke(e*.38,2),i=Ke(e*.76,2);return Fr(r,t,\"M-\"+i+\",0l-\"+n+\",-\"+a+\"h\"+i+\"l\"+n+\",-\"+a+\"l\"+n+\",\"+a+\"h\"+i+\"l-\"+n+\",\"+a+\"l\"+n+\",\"+a+\"h-\"+i+\"l-\"+n+\",\"+a+\"l-\"+n+\",-\"+a+\"h-\"+i+\"Z\")}},\"star-triangle-up\":{n:19,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*qs*.8,2),n=Ke(e*.8,2),i=Ke(e*1.6,2),o=Ke(e*4,2),l=\"A \"+o+\",\"+o+\" 0 0 1 \";return Fr(r,t,\"M-\"+a+\",\"+n+l+a+\",\"+n+l+\"0,-\"+i+l+\"-\"+a+\",\"+n+\"Z\")}},\"star-triangle-down\":{n:20,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*qs*.8,2),n=Ke(e*.8,2),i=Ke(e*1.6,2),o=Ke(e*4,2),l=\"A \"+o+\",\"+o+\" 0 0 1 \";return Fr(r,t,\"M\"+a+\",-\"+n+l+\"-\"+a+\",-\"+n+l+\"0,\"+i+l+a+\",-\"+n+\"Z\")}},\"star-square\":{n:21,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.1,2),n=Ke(e*2,2),i=\"A \"+n+\",\"+n+\" 0 0 1 \";return Fr(r,t,\"M-\"+a+\",-\"+a+i+\"-\"+a+\",\"+a+i+a+\",\"+a+i+a+\",-\"+a+i+\"-\"+a+\",-\"+a+\"Z\")}},\"star-diamond\":{n:22,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.4,2),n=Ke(e*1.9,2),i=\"A \"+n+\",\"+n+\" 0 0 1 \";return Fr(r,t,\"M-\"+a+\",0\"+i+\"0,\"+a+i+a+\",0\"+i+\"0,-\"+a+i+\"-\"+a+\",0Z\")}},\"diamond-tall\":{n:23,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*.7,2),n=Ke(e*1.4,2);return Fr(r,t,\"M0,\"+n+\"L\"+a+\",0L0,-\"+n+\"L-\"+a+\",0Z\")}},\"diamond-wide\":{n:24,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.4,2),n=Ke(e*.7,2);return Fr(r,t,\"M0,\"+n+\"L\"+a+\",0L0,-\"+n+\"L-\"+a+\",0Z\")}},hourglass:{n:25,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M\"+a+\",\"+a+\"H-\"+a+\"L\"+a+\",-\"+a+\"H-\"+a+\"Z\")},noDot:!0},bowtie:{n:26,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M\"+a+\",\"+a+\"V-\"+a+\"L-\"+a+\",\"+a+\"V-\"+a+\"Z\")},noDot:!0},\"circle-cross\":{n:27,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M0,\"+a+\"V-\"+a+\"M\"+a+\",0H-\"+a+\"M\"+a+\",0A\"+a+\",\"+a+\" 0 1,1 0,-\"+a+\"A\"+a+\",\"+a+\" 0 0,1 \"+a+\",0Z\")},needLine:!0,noDot:!0},\"circle-x\":{n:28,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=Ke(e/vF,2);return Fr(r,t,\"M\"+n+\",\"+n+\"L-\"+n+\",-\"+n+\"M\"+n+\",-\"+n+\"L-\"+n+\",\"+n+\"M\"+a+\",0A\"+a+\",\"+a+\" 0 1,1 0,-\"+a+\"A\"+a+\",\"+a+\" 0 0,1 \"+a+\",0Z\")},needLine:!0,noDot:!0},\"square-cross\":{n:29,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M0,\"+a+\"V-\"+a+\"M\"+a+\",0H-\"+a+\"M\"+a+\",\"+a+\"H-\"+a+\"V-\"+a+\"H\"+a+\"Z\")},needLine:!0,noDot:!0},\"square-x\":{n:30,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M\"+a+\",\"+a+\"L-\"+a+\",-\"+a+\"M\"+a+\",-\"+a+\"L-\"+a+\",\"+a+\"M\"+a+\",\"+a+\"H-\"+a+\"V-\"+a+\"H\"+a+\"Z\")},needLine:!0,noDot:!0},\"diamond-cross\":{n:31,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.3,2);return Fr(r,t,\"M\"+a+\",0L0,\"+a+\"L-\"+a+\",0L0,-\"+a+\"ZM0,-\"+a+\"V\"+a+\"M-\"+a+\",0H\"+a)},needLine:!0,noDot:!0},\"diamond-x\":{n:32,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.3,2),n=Ke(e*.65,2);return Fr(r,t,\"M\"+a+\",0L0,\"+a+\"L-\"+a+\",0L0,-\"+a+\"ZM-\"+n+\",-\"+n+\"L\"+n+\",\"+n+\"M-\"+n+\",\"+n+\"L\"+n+\",-\"+n)},needLine:!0,noDot:!0},\"cross-thin\":{n:33,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.4,2);return Fr(r,t,\"M0,\"+a+\"V-\"+a+\"M\"+a+\",0H-\"+a)},needLine:!0,noDot:!0,noFill:!0},\"x-thin\":{n:34,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M\"+a+\",\"+a+\"L-\"+a+\",-\"+a+\"M\"+a+\",-\"+a+\"L-\"+a+\",\"+a)},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.2,2),n=Ke(e*.85,2);return Fr(r,t,\"M0,\"+a+\"V-\"+a+\"M\"+a+\",0H-\"+a+\"M\"+n+\",\"+n+\"L-\"+n+\",-\"+n+\"M\"+n+\",-\"+n+\"L-\"+n+\",\"+n)},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e/2,2),n=Ke(e,2);return Fr(r,t,\"M\"+a+\",\"+n+\"V-\"+n+\"M\"+(a-n)+\",-\"+n+\"V\"+n+\"M\"+n+\",\"+a+\"H-\"+n+\"M-\"+n+\",\"+(a-n)+\"H\"+n)},needLine:!0,noFill:!0},\"y-up\":{n:37,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.2,2),n=Ke(e*1.6,2),i=Ke(e*.8,2);return Fr(r,t,\"M-\"+a+\",\"+i+\"L0,0M\"+a+\",\"+i+\"L0,0M0,-\"+n+\"L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"y-down\":{n:38,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.2,2),n=Ke(e*1.6,2),i=Ke(e*.8,2);return Fr(r,t,\"M-\"+a+\",-\"+i+\"L0,0M\"+a+\",-\"+i+\"L0,0M0,\"+n+\"L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"y-left\":{n:39,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.2,2),n=Ke(e*1.6,2),i=Ke(e*.8,2);return Fr(r,t,\"M\"+i+\",\"+a+\"L0,0M\"+i+\",-\"+a+\"L0,0M-\"+n+\",0L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"y-right\":{n:40,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.2,2),n=Ke(e*1.6,2),i=Ke(e*.8,2);return Fr(r,t,\"M-\"+i+\",\"+a+\"L0,0M-\"+i+\",-\"+a+\"L0,0M\"+n+\",0L0,0\")},needLine:!0,noDot:!0,noFill:!0},\"line-ew\":{n:41,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.4,2);return Fr(r,t,\"M\"+a+\",0H-\"+a)},needLine:!0,noDot:!0,noFill:!0},\"line-ns\":{n:42,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*1.4,2);return Fr(r,t,\"M0,\"+a+\"V-\"+a)},needLine:!0,noDot:!0,noFill:!0},\"line-ne\":{n:43,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M\"+a+\",-\"+a+\"L-\"+a+\",\"+a)},needLine:!0,noDot:!0,noFill:!0},\"line-nw\":{n:44,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2);return Fr(r,t,\"M\"+a+\",\"+a+\"L-\"+a+\",-\"+a)},needLine:!0,noDot:!0,noFill:!0},\"arrow-up\":{n:45,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=Ke(e*2,2);return Fr(r,t,\"M0,0L-\"+a+\",\"+n+\"H\"+a+\"Z\")},backoff:1,noDot:!0},\"arrow-down\":{n:46,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=Ke(e*2,2);return Fr(r,t,\"M0,0L-\"+a+\",-\"+n+\"H\"+a+\"Z\")},noDot:!0},\"arrow-left\":{n:47,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2,2),n=Ke(e,2);return Fr(r,t,\"M0,0L\"+a+\",-\"+n+\"V\"+n+\"Z\")},noDot:!0},\"arrow-right\":{n:48,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2,2),n=Ke(e,2);return Fr(r,t,\"M0,0L-\"+a+\",-\"+n+\"V\"+n+\"Z\")},noDot:!0},\"arrow-bar-up\":{n:49,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=Ke(e*2,2);return Fr(r,t,\"M-\"+a+\",0H\"+a+\"M0,0L-\"+a+\",\"+n+\"H\"+a+\"Z\")},backoff:1,needLine:!0,noDot:!0},\"arrow-bar-down\":{n:50,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e,2),n=Ke(e*2,2);return Fr(r,t,\"M-\"+a+\",0H\"+a+\"M0,0L-\"+a+\",-\"+n+\"H\"+a+\"Z\")},needLine:!0,noDot:!0},\"arrow-bar-left\":{n:51,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2,2),n=Ke(e,2);return Fr(r,t,\"M0,-\"+n+\"V\"+n+\"M0,0L\"+a+\",-\"+n+\"V\"+n+\"Z\")},needLine:!0,noDot:!0},\"arrow-bar-right\":{n:52,f:function(e,r,t){if(Rr(r))return Pr;var a=Ke(e*2,2),n=Ke(e,2);return Fr(r,t,\"M0,-\"+n+\"V\"+n+\"M0,0L-\"+a+\",-\"+n+\"V\"+n+\"Z\")},needLine:!0,noDot:!0},arrow:{n:53,f:function(e,r,t){if(Rr(r))return Pr;var a=F4/2.5,n=2*e*z4(a),i=2*e*N4(a);return Fr(r,t,\"M0,0L\"+-n+\",\"+i+\"L\"+n+\",\"+i+\"Z\")},backoff:.9,noDot:!0},\"arrow-wide\":{n:54,f:function(e,r,t){if(Rr(r))return Pr;var a=F4/4,n=2*e*z4(a),i=2*e*N4(a);return Fr(r,t,\"M0,0L\"+-n+\",\"+i+\"A \"+2*e+\",\"+2*e+\" 0 0 1 \"+n+\",\"+i+\"Z\")},backoff:.4,noDot:!0}};function Rr(e){return e===null}var hF,dF,pF,mF;function Fr(e,r,t){if((!e||e%360===0)&&!r)return t;if(pF===e&&mF===r&&hF===t)return dF;pF=e,mF=r,hF=t;function a(m,b){var T=z4(m),w=N4(m),x=b[0],_=b[1]+(r||0);return[x*T-_*w,x*w+_*T]}for(var n=e/180*F4,i=0,o=0,l=m3e(t),s=\"\",u=0;u<l.length;u++){var f=l[u],c=f[0],v=i,d=o;if(c===\"M\"||c===\"L\")i=+f[1],o=+f[2];else if(c===\"m\"||c===\"l\")i+=+f[1],o+=+f[2];else if(c===\"H\")i=+f[1];else if(c===\"h\")i+=+f[1];else if(c===\"V\")o=+f[1];else if(c===\"v\")o+=+f[1];else if(c===\"A\"){i=+f[1],o=+f[2];var p=a(n,[+f[6],+f[7]]);f[6]=p[0],f[7]=p[1],f[3]=+f[3]+e}(c===\"H\"||c===\"V\")&&(c=\"L\"),(c===\"h\"||c===\"v\")&&(c=\"l\"),(c===\"m\"||c===\"l\")&&(i-=v,o-=d);var y=a(n,[i,o]);(c===\"H\"||c===\"V\")&&(c=\"L\"),(c===\"M\"||c===\"L\"||c===\"m\"||c===\"l\")&&(f[1]=y[0],f[2]=y[1]),f[0]=c,s+=f[0]+f.slice(1).join(\",\")}return dF=s,s}});var Zr=z((_Ye,IF)=>{\"use strict\";var Fa=Er(),bt=ke(),y3e=bt.numberFormat,Ls=Ir(),Jp=Tr(),Da=Sr(),g3e=rl(),Dh=bt.strTranslate,Kp=Ca(),b3e=Il(),x3e=Qa(),_3e=x3e.LINE_SPACING,qF=lp().DESELECTDIM,w3e=Jn(),T3e=sF(),A3e=qo().appendArrayPointValue,rr=IF.exports={};rr.font=function(e,r){var t=r.variant,a=r.style,n=r.weight,i=r.color,o=r.size,l=r.family,s=r.shadow,u=r.lineposition,f=r.textcase;l&&e.style(\"font-family\",l),o+1&&e.style(\"font-size\",o+\"px\"),i&&e.call(Da.fill,i),n&&e.style(\"font-weight\",n),a&&e.style(\"font-style\",a),t&&e.style(\"font-variant\",t),f&&e.style(\"text-transform\",I4(k3e(f))),s&&e.style(\"text-shadow\",s===\"auto\"?Kp.makeTextShadow(Da.contrast(i)):I4(s)),u&&e.style(\"text-decoration-line\",I4(S3e(u)))};function I4(e){return e===\"none\"?void 0:e}var M3e={normal:\"none\",lower:\"lowercase\",upper:\"uppercase\",\"word caps\":\"capitalize\"};function k3e(e){return M3e[e]}function S3e(e){return e.replace(\"under\",\"underline\").replace(\"over\",\"overline\").replace(\"through\",\"line-through\").split(\"+\").join(\" \")}rr.setPosition=function(e,r,t){e.attr(\"x\",r).attr(\"y\",t)};rr.setSize=function(e,r,t){e.attr(\"width\",r).attr(\"height\",t)};rr.setRect=function(e,r,t,a,n){e.call(rr.setPosition,r,t).call(rr.setSize,a,n)};rr.translatePoint=function(e,r,t,a){var n=t.c2p(e.x),i=a.c2p(e.y);if(Ls(n)&&Ls(i)&&r.node())r.node().nodeName===\"text\"?r.attr(\"x\",n).attr(\"y\",i):r.attr(\"transform\",Dh(n,i));else return!1;return!0};rr.translatePoints=function(e,r,t){e.each(function(a){var n=Fa.select(this);rr.translatePoint(a,n,r,t)})};rr.hideOutsideRangePoint=function(e,r,t,a,n,i){r.attr(\"display\",t.isPtWithinRange(e,n)&&a.isPtWithinRange(e,i)?null:\"none\")};rr.hideOutsideRangePoints=function(e,r){if(r._hasClipOnAxisFalse){var t=r.xaxis,a=r.yaxis;e.each(function(n){var i=n[0].trace,o=i.xcalendar,l=i.ycalendar,s=Jp.traceIs(i,\"bar-like\")?\".bartext\":\".point,.textpoint\";e.selectAll(s).each(function(u){rr.hideOutsideRangePoint(u,Fa.select(this),t,a,o,l)})})}};rr.crispRound=function(e,r,t){return!r||!Ls(r)?t||0:e._context.staticPlot?r:r<1?1:Math.round(r)};rr.singleLineStyle=function(e,r,t,a,n){r.style(\"fill\",\"none\");var i=(((e||[])[0]||{}).trace||{}).line||{},o=t||i.width||0,l=n||i.dash||\"\";Da.stroke(r,a||i.color),rr.dashLine(r,l,o)};rr.lineGroupStyle=function(e,r,t,a){e.style(\"fill\",\"none\").each(function(n){var i=(((n||[])[0]||{}).trace||{}).line||{},o=r||i.width||0,l=a||i.dash||\"\";Fa.select(this).call(Da.stroke,t||i.color).call(rr.dashLine,l,o)})};rr.dashLine=function(e,r,t){t=+t||0,r=rr.dashStyle(r,t),e.style({\"stroke-dasharray\":r,\"stroke-width\":t+\"px\"})};rr.dashStyle=function(e,r){r=+r||1;var t=Math.max(r,3);return e===\"solid\"?e=\"\":e===\"dot\"?e=t+\"px,\"+t+\"px\":e===\"dash\"?e=3*t+\"px,\"+3*t+\"px\":e===\"longdash\"?e=5*t+\"px,\"+5*t+\"px\":e===\"dashdot\"?e=3*t+\"px,\"+t+\"px,\"+t+\"px,\"+t+\"px\":e===\"longdashdot\"&&(e=5*t+\"px,\"+2*t+\"px,\"+t+\"px,\"+2*t+\"px\"),e};function LF(e,r,t,a){var n=r.fillpattern,i=r.fillgradient,o=rr.getPatternAttr,l=n&&(o(n.shape,0,\"\")||o(n.path,0,\"\"));if(l){var s=o(n.bgcolor,0,null),u=o(n.fgcolor,0,null),f=n.fgopacity,c=o(n.size,0,8),v=o(n.solidity,0,.3),d=r.uid;rr.pattern(e,\"point\",t,d,l,c,v,void 0,n.fillmode,s,u,f)}else if(i&&i.type!==\"none\"){var p=i.type,y=\"scatterfill-\"+r.uid;if(a&&(y=\"legendfill-\"+r.uid),!a&&(i.start!==void 0||i.stop!==void 0)){var m,b;p===\"horizontal\"?(m={x:i.start,y:0},b={x:i.stop,y:0}):p===\"vertical\"&&(m={x:0,y:i.start},b={x:0,y:i.stop}),m.x=r._xA.c2p(m.x===void 0?r._extremes.x.min[0].val:m.x,!0),m.y=r._yA.c2p(m.y===void 0?r._extremes.y.min[0].val:m.y,!0),b.x=r._xA.c2p(b.x===void 0?r._extremes.x.max[0].val:b.x,!0),b.y=r._yA.c2p(b.y===void 0?r._extremes.y.max[0].val:b.y,!0),e.call(EF,t,y,\"linear\",i.colorscale,\"fill\",m,b,!0,!1)}else p===\"horizontal\"&&(p=p+\"reversed\"),e.call(rr.gradient,t,y,p,i.colorscale,\"fill\")}else r.fillcolor&&e.call(Da.fill,r.fillcolor)}rr.singleFillStyle=function(e,r){var t=Fa.select(e.node()),a=t.data(),n=((a[0]||[])[0]||{}).trace||{};LF(e,n,r,!1)};rr.fillGroupStyle=function(e,r,t){e.style(\"stroke-width\",0).each(function(a){var n=Fa.select(this);a[0].trace&&LF(n,a[0].trace,r,t)})};var bF=gF();rr.symbolNames=[];rr.symbolFuncs=[];rr.symbolBackOffs=[];rr.symbolNeedLines={};rr.symbolNoDot={};rr.symbolNoFill={};rr.symbolList=[];Object.keys(bF).forEach(function(e){var r=bF[e],t=r.n;rr.symbolList.push(t,String(t),e,t+100,String(t+100),e+\"-open\"),rr.symbolNames[t]=e,rr.symbolFuncs[t]=r.f,rr.symbolBackOffs[t]=r.backoff||0,r.needLine&&(rr.symbolNeedLines[t]=!0),r.noDot?rr.symbolNoDot[t]=!0:rr.symbolList.push(t+200,String(t+200),e+\"-dot\",t+300,String(t+300),e+\"-open-dot\"),r.noFill&&(rr.symbolNoFill[t]=!0)});var q3e=rr.symbolNames.length,L3e=\"M0,0.5L0.5,0L0,-0.5L-0.5,0Z\";rr.symbolNumber=function(e){if(Ls(e))e=+e;else if(typeof e==\"string\"){var r=0;e.indexOf(\"-open\")>0&&(r=100,e=e.replace(\"-open\",\"\")),e.indexOf(\"-dot\")>0&&(r+=200,e=e.replace(\"-dot\",\"\")),e=rr.symbolNames.indexOf(e),e>=0&&(e+=r)}return e%100>=q3e||e>=400?0:Math.floor(Math.max(e,0))};function CF(e,r,t,a){var n=e%100;return rr.symbolFuncs[n](r,t,a)+(e>=200?L3e:\"\")}var xF=y3e(\"~f\"),DF={radial:{type:\"radial\"},radialreversed:{type:\"radial\",reversed:!0},horizontal:{type:\"linear\",start:{x:1,y:0},stop:{x:0,y:0}},horizontalreversed:{type:\"linear\",start:{x:1,y:0},stop:{x:0,y:0},reversed:!0},vertical:{type:\"linear\",start:{x:0,y:1},stop:{x:0,y:0}},verticalreversed:{type:\"linear\",start:{x:0,y:1},stop:{x:0,y:0},reversed:!0}};rr.gradient=function(e,r,t,a,n,i){var o=DF[a];return EF(e,r,t,o.type,n,i,o.start,o.stop,!1,o.reversed)};function EF(e,r,t,a,n,i,o,l,s,u){var f=n.length,c;a===\"linear\"?c={node:\"linearGradient\",attrs:{x1:o.x,y1:o.y,x2:l.x,y2:l.y,gradientUnits:s?\"userSpaceOnUse\":\"objectBoundingBox\"},reversed:u}:a===\"radial\"&&(c={node:\"radialGradient\",reversed:u});for(var v=new Array(f),d=0;d<f;d++)c.reversed?v[f-1-d]=[xF((1-n[d][0])*100),n[d][1]]:v[d]=[xF(n[d][0]*100),n[d][1]];var p=r._fullLayout,y=\"g\"+p._uid+\"-\"+t,m=p._defs.select(\".gradients\").selectAll(\"#\"+y).data([a+v.join(\";\")],bt.identity);m.exit().remove(),m.enter().append(c.node).each(function(){var b=Fa.select(this);c.attrs&&b.attr(c.attrs),b.attr(\"id\",y);var T=b.selectAll(\"stop\").data(v);T.exit().remove(),T.enter().append(\"stop\"),T.each(function(w){Fa.select(this).attr({offset:w[0]+\"%\",\"stop-color\":Da.rgb(w[1]),\"stop-opacity\":Da.parse(w[1]).alpha})})}),e.style(i,G4(y,r)).style(i+\"-opacity\",null),e.classed(\"gradient_filled\",!0)}rr.pattern=function(e,r,t,a,n,i,o,l,s,u,f,c){var v=r===\"legend\";l&&(s===\"overlay\"?(u=l,f=Da.contrast(u)):(u=void 0,f=l));var d=t._fullLayout,p=\"p\"+d._uid+\"-\"+a,y,m,b=function(R,N,I,O,U){return O+(U-O)*(R-N)/(I-N)},T,w,x,_,k={},A=Da.rgb(f),q=Da.parse(f).alpha,C=c*q;switch(n){case\"/\":y=i*Math.sqrt(2),m=i*Math.sqrt(2),T=\"M-\"+y/4+\",\"+m/4+\"l\"+y/2+\",-\"+m/2+\"M0,\"+m+\"L\"+y+\",0M\"+y/4*3+\",\"+m/4*5+\"l\"+y/2+\",-\"+m/2,w=o*i,_=\"path\",k={d:T,opacity:C,stroke:A,\"stroke-width\":w+\"px\"};break;case\"\\\\\":y=i*Math.sqrt(2),m=i*Math.sqrt(2),T=\"M\"+y/4*3+\",-\"+m/4+\"l\"+y/2+\",\"+m/2+\"M0,0L\"+y+\",\"+m+\"M-\"+y/4+\",\"+m/4*3+\"l\"+y/2+\",\"+m/2,w=o*i,_=\"path\",k={d:T,opacity:C,stroke:A,\"stroke-width\":w+\"px\"};break;case\"x\":y=i*Math.sqrt(2),m=i*Math.sqrt(2),T=\"M-\"+y/4+\",\"+m/4+\"l\"+y/2+\",-\"+m/2+\"M0,\"+m+\"L\"+y+\",0M\"+y/4*3+\",\"+m/4*5+\"l\"+y/2+\",-\"+m/2+\"M\"+y/4*3+\",-\"+m/4+\"l\"+y/2+\",\"+m/2+\"M0,0L\"+y+\",\"+m+\"M-\"+y/4+\",\"+m/4*3+\"l\"+y/2+\",\"+m/2,w=i-i*Math.sqrt(1-o),_=\"path\",k={d:T,opacity:C,stroke:A,\"stroke-width\":w+\"px\"};break;case\"|\":y=i,m=i,_=\"path\",T=\"M\"+y/2+\",0L\"+y/2+\",\"+m,w=o*i,_=\"path\",k={d:T,opacity:C,stroke:A,\"stroke-width\":w+\"px\"};break;case\"-\":y=i,m=i,_=\"path\",T=\"M0,\"+m/2+\"L\"+y+\",\"+m/2,w=o*i,_=\"path\",k={d:T,opacity:C,stroke:A,\"stroke-width\":w+\"px\"};break;case\"+\":y=i,m=i,_=\"path\",T=\"M\"+y/2+\",0L\"+y/2+\",\"+m+\"M0,\"+m/2+\"L\"+y+\",\"+m/2,w=i-i*Math.sqrt(1-o),_=\"path\",k={d:T,opacity:C,stroke:A,\"stroke-width\":w+\"px\"};break;case\".\":y=i,m=i,o<Math.PI/4?x=Math.sqrt(o*i*i/Math.PI):x=b(o,Math.PI/4,1,i/2,i/Math.sqrt(2)),_=\"circle\",k={cx:y/2,cy:m/2,r:x,opacity:C,fill:A};break;default:y=i,m=i,_=\"path\",k={d:n,opacity:C,fill:A};break}var E=[n||\"noSh\",u||\"noBg\",f||\"noFg\",i,o].join(\";\"),P=d._defs.select(\".patterns\").selectAll(\"#\"+p).data([E],bt.identity);P.exit().remove(),P.enter().append(\"pattern\").each(function(){var R=Fa.select(this);if(R.attr({id:p,width:y+\"px\",height:m+\"px\",patternUnits:\"userSpaceOnUse\",patternTransform:v?\"scale(0.8)\":\"\"}),u){var N=Da.rgb(u),I=Da.parse(u).alpha,O=R.selectAll(\"rect\").data([0]);O.exit().remove(),O.enter().append(\"rect\").attr({width:y+\"px\",height:m+\"px\",fill:N,\"fill-opacity\":I})}var U=R.selectAll(_).data([0]);U.exit().remove(),U.enter().append(_).attr(k)}),e.style(\"fill\",G4(p,t)).style(\"fill-opacity\",null),e.classed(\"pattern_filled\",!0)};rr.initGradients=function(e){var r=e._fullLayout,t=bt.ensureSingle(r._defs,\"g\",\"gradients\");t.selectAll(\"linearGradient,radialGradient\").remove(),Fa.select(e).selectAll(\".gradient_filled\").classed(\"gradient_filled\",!1)};rr.initPatterns=function(e){var r=e._fullLayout,t=bt.ensureSingle(r._defs,\"g\",\"patterns\");t.selectAll(\"pattern\").remove(),Fa.select(e).selectAll(\".pattern_filled\").classed(\"pattern_filled\",!1)};rr.getPatternAttr=function(e,r,t){return e&&bt.isArrayOrTypedArray(e)?r<e.length?e[r]:t:e};rr.pointStyle=function(e,r,t,a){if(e.size()){var n=rr.makePointStyleFns(r);e.each(function(i){rr.singlePointStyle(i,Fa.select(this),r,n,t,a)})}};rr.singlePointStyle=function(e,r,t,a,n,i){var o=t.marker,l=o.line;if(i&&i.i>=0&&e.i===void 0&&(e.i=i.i),r.style(\"opacity\",a.selectedOpacityFn?a.selectedOpacityFn(e):e.mo===void 0?o.opacity:e.mo),a.ms2mrc){var s;e.ms===\"various\"||o.size===\"various\"?s=3:s=a.ms2mrc(e.ms),e.mrc=s,a.selectedSizeFn&&(s=e.mrc=a.selectedSizeFn(e));var u=rr.symbolNumber(e.mx||o.symbol)||0;e.om=u%200>=100;var f=V4(e,t),c=Y4(e,t);r.attr(\"d\",CF(u,s,f,c))}var v=!1,d,p,y;if(e.so)y=l.outlierwidth,p=l.outliercolor,d=o.outliercolor;else{var m=(l||{}).width;y=(e.mlw+1||m+1||(e.trace?(e.trace.marker.line||{}).width:0)+1)-1||0,\"mlc\"in e?p=e.mlcc=a.lineScale(e.mlc):bt.isArrayOrTypedArray(l.color)?p=Da.defaultLine:p=l.color,bt.isArrayOrTypedArray(o.color)&&(d=Da.defaultLine,v=!0),\"mc\"in e?d=e.mcc=a.markerScale(e.mc):d=o.color||o.colors||\"rgba(0,0,0,0)\",a.selectedColorFn&&(d=a.selectedColorFn(e))}let b=e.mld||(l||{}).dash;if(b&&rr.dashLine(r,b,y),e.om)r.call(Da.stroke,d).style({\"stroke-width\":(y||1)+\"px\",fill:\"none\"});else{r.style(\"stroke-width\",(e.isBlank?0:y)+\"px\");var T=o.gradient,w=e.mgt;w?v=!0:w=T&&T.type,bt.isArrayOrTypedArray(w)&&(w=w[0],DF[w]||(w=0));var x=o.pattern,_=rr.getPatternAttr,k=x&&(_(x.shape,e.i,\"\")||_(x.path,e.i,\"\"));if(w&&w!==\"none\"){var A=e.mgc;A?v=!0:A=T.color;var q=t.uid;v&&(q+=\"-\"+e.i),rr.gradient(r,n,q,w,[[0,A],[1,d]],\"fill\")}else if(k){var C=!1,E=x.fgcolor;!E&&i&&i.color&&(E=i.color,C=!0);var P=_(E,e.i,i&&i.color||null),R=_(x.bgcolor,e.i,null),N=x.fgopacity,I=_(x.size,e.i,8),O=_(x.solidity,e.i,.3);C=C||e.mcc||bt.isArrayOrTypedArray(x.shape)||bt.isArrayOrTypedArray(x.path)||bt.isArrayOrTypedArray(x.bgcolor)||bt.isArrayOrTypedArray(x.fgcolor)||bt.isArrayOrTypedArray(x.size)||bt.isArrayOrTypedArray(x.solidity);var U=t.uid;C&&(U+=\"-\"+e.i),rr.pattern(r,\"point\",n,U,k,I,O,e.mcc,x.fillmode,R,P,N)}else bt.isArrayOrTypedArray(d)?Da.fill(r,d[e.i]):Da.fill(r,d);y&&Da.stroke(r,p)}};rr.makePointStyleFns=function(e){var r={},t=e.marker;return r.markerScale=rr.tryColorscale(t,\"\"),r.lineScale=rr.tryColorscale(t,\"line\"),Jp.traceIs(e,\"symbols\")&&(r.ms2mrc=w3e.isBubble(e)?T3e(e):function(){return(t.size||6)/2}),e.selectedpoints&&bt.extendFlat(r,rr.makeSelectedPointStyleFns(e)),r};rr.makeSelectedPointStyleFns=function(e){var r={},t=e.selected||{},a=e.unselected||{},n=e.marker||{},i=t.marker||{},o=a.marker||{},l=n.opacity,s=i.opacity,u=o.opacity,f=s!==void 0,c=u!==void 0;(bt.isArrayOrTypedArray(l)||f||c)&&(r.selectedOpacityFn=function(x){var _=x.mo===void 0?n.opacity:x.mo;return x.selected?f?s:_:c?u:qF*_});var v=n.color,d=i.color,p=o.color;(d||p)&&(r.selectedColorFn=function(x){var _=x.mcc||v;return x.selected?d||_:p||_});var y=n.size,m=i.size,b=o.size,T=m!==void 0,w=b!==void 0;return Jp.traceIs(e,\"symbols\")&&(T||w)&&(r.selectedSizeFn=function(x){var _=x.mrc||y/2;return x.selected?T?m/2:_:w?b/2:_}),r};rr.makeSelectedTextStyleFns=function(e){var r={},t=e.selected||{},a=e.unselected||{},n=e.textfont||{},i=t.textfont||{},o=a.textfont||{},l=n.color,s=i.color,u=o.color;return r.selectedTextColorFn=function(f){var c=f.tc||l;return f.selected?s||c:u||(s?c:Da.addOpacity(c,qF))},r};rr.selectedPointStyle=function(e,r){if(!(!e.size()||!r.selectedpoints)){var t=rr.makeSelectedPointStyleFns(r),a=r.marker||{},n=[];t.selectedOpacityFn&&n.push(function(i,o){i.style(\"opacity\",t.selectedOpacityFn(o))}),t.selectedColorFn&&n.push(function(i,o){Da.fill(i,t.selectedColorFn(o))}),t.selectedSizeFn&&n.push(function(i,o){var l=o.mx||a.symbol||0,s=t.selectedSizeFn(o);i.attr(\"d\",CF(rr.symbolNumber(l),s,V4(o,r),Y4(o,r))),o.mrc2=s}),n.length&&e.each(function(i){for(var o=Fa.select(this),l=0;l<n.length;l++)n[l](o,i)})}};rr.tryColorscale=function(e,r){var t=r?bt.nestedProperty(e,r).get():e;if(t){var a=t.color;if((t.colorscale||t._colorAx)&&bt.isArrayOrTypedArray(a))return g3e.makeColorScaleFuncFromTrace(t)}return bt.identity};var B4={start:1,end:-1,middle:0,bottom:1,top:-1};function PF(e,r,t,a,n){var i=Fa.select(e.node().parentNode),o=r.indexOf(\"top\")!==-1?\"top\":r.indexOf(\"bottom\")!==-1?\"bottom\":\"middle\",l=r.indexOf(\"left\")!==-1?\"end\":r.indexOf(\"right\")!==-1?\"start\":\"middle\",s=a?a/.8+1:0,u=(Kp.lineCount(e)-1)*_3e+1,f=B4[l]*s,c=t*.75+B4[o]*s+(B4[o]-1)*u*t/2;e.attr(\"text-anchor\",l),n||i.attr(\"transform\",Dh(f,c))}function RF(e,r){var t=e.ts||r.textfont.size;return Ls(t)&&t>0?t:0}rr.textPointStyle=function(e,r,t){if(e.size()){var a;if(r.selectedpoints){var n=rr.makeSelectedTextStyleFns(r);a=n.selectedTextColorFn}var i=r.texttemplate,o=t._fullLayout;e.each(function(l){var s=Fa.select(this),u=i?bt.extractOption(l,r,\"txt\",\"texttemplate\"):bt.extractOption(l,r,\"tx\",\"text\");if(!u&&u!==0){s.remove();return}if(i){var f=r._module.formatLabels,c=f?f(l,r,o):{},v={};A3e(v,r,l.i),u=bt.texttemplateString({data:[v,l,r._meta],fallback:r.texttemplatefallback,labels:c,locale:o._d3locale,template:u})}var d=l.tp||r.textposition,p=RF(l,r),y=a?a(l):l.tc||r.textfont.color;s.call(rr.font,{family:l.tf||r.textfont.family,weight:l.tw||r.textfont.weight,style:l.ty||r.textfont.style,variant:l.tv||r.textfont.variant,textcase:l.tC||r.textfont.textcase,lineposition:l.tE||r.textfont.lineposition,shadow:l.tS||r.textfont.shadow,size:p,color:y}).text(u).call(Kp.convertToTspans,t).call(PF,d,p,l.mrc)})}};rr.selectedTextStyle=function(e,r){if(!(!e.size()||!r.selectedpoints)){var t=rr.makeSelectedTextStyleFns(r);e.each(function(a){var n=Fa.select(this),i=t.selectedTextColorFn(a),o=a.tp||r.textposition,l=RF(a,r);Da.fill(n,i);var s=Jp.traceIs(r,\"bar-like\");PF(n,o,l,a.mrc2||a.mrc,s)})}};var _F=.5;rr.smoothopen=function(e,r){if(e.length<3)return\"M\"+e.join(\"L\");var t=\"M\"+e[0],a=[],n;for(n=1;n<e.length-1;n++)a.push($p(e[n-1],e[n],e[n+1],r));for(t+=\"Q\"+a[0][0]+\" \"+e[1],n=2;n<e.length-1;n++)t+=\"C\"+a[n-2][1]+\" \"+a[n-1][0]+\" \"+e[n];return t+=\"Q\"+a[e.length-3][1]+\" \"+e[e.length-1],t};rr.smoothclosed=function(e,r){if(e.length<3)return\"M\"+e.join(\"L\")+\"Z\";var t=\"M\"+e[0],a=e.length-1,n=[$p(e[a],e[0],e[1],r)],i;for(i=1;i<a;i++)n.push($p(e[i-1],e[i],e[i+1],r));for(n.push($p(e[a-1],e[a],e[0],r)),i=1;i<=a;i++)t+=\"C\"+n[i-1][1]+\" \"+n[i][0]+\" \"+e[i];return t+=\"C\"+n[a][1]+\" \"+n[0][0]+\" \"+e[0]+\"Z\",t};var FF,zF;function Z0(e,r,t){return t&&(e=NF(e)),r?Xu(e[1]):Wu(e[0])}function Wu(e){var r=Fa.round(e,2);return FF=r,r}function Xu(e){var r=Fa.round(e,2);return zF=r,r}function $p(e,r,t,a){var n=e[0]-r[0],i=e[1]-r[1],o=t[0]-r[0],l=t[1]-r[1],s=Math.pow(n*n+i*i,_F/2),u=Math.pow(o*o+l*l,_F/2),f=(u*u*n-s*s*o)*a,c=(u*u*i-s*s*l)*a,v=3*u*(s+u),d=3*s*(s+u);return[[Wu(r[0]+(v&&f/v)),Xu(r[1]+(v&&c/v))],[Wu(r[0]-(d&&f/d)),Xu(r[1]-(d&&c/d))]]}var C3e={hv:function(e,r,t){return\"H\"+Wu(r[0])+\"V\"+Z0(r,1,t)},vh:function(e,r,t){return\"V\"+Xu(r[1])+\"H\"+Z0(r,0,t)},hvh:function(e,r,t){return\"H\"+Wu((e[0]+r[0])/2)+\"V\"+Xu(r[1])+\"H\"+Z0(r,0,t)},vhv:function(e,r,t){return\"V\"+Xu((e[1]+r[1])/2)+\"H\"+Wu(r[0])+\"V\"+Z0(r,1,t)}},D3e=function(e,r,t){return\"L\"+Z0(r,0,t)+\",\"+Z0(r,1,t)};rr.steps=function(e){var r=C3e[e]||D3e;return function(t){for(var a=\"M\"+Wu(t[0][0])+\",\"+Xu(t[0][1]),n=t.length,i=1;i<n;i++)a+=r(t[i-1],t[i],i===n-1);return a}};function NF(e,r){var t=e.backoff,a=e.trace,n=e.d,i=e.i;if(t&&a&&a.marker&&a.marker.angle%360===0&&a.line&&a.line.shape!==\"spline\"){var o=bt.isArrayOrTypedArray(t),l=e,s=r?r[0]:FF||0,u=r?r[1]:zF||0,f=l[0],c=l[1],v=f-s,d=c-u,p=Math.atan2(d,v),y=o?t[i]:t;if(y===\"auto\"){var m=l.i;a.type===\"scatter\"&&m--;var b=l.marker,T=b.symbol;bt.isArrayOrTypedArray(T)&&(T=T[m]);var w=b.size;bt.isArrayOrTypedArray(w)&&(w=w[m]),y=b?rr.symbolBackOffs[rr.symbolNumber(T)]*w:0,y+=rr.getMarkerStandoff(n[m],a)||0}var x=f-y*Math.cos(p),_=c-y*Math.sin(p);(x<=f&&x>=s||x>=f&&x<=s)&&(_<=c&&_>=u||_>=c&&_<=u)&&(e=[x,_])}return e}rr.applyBackoff=NF;rr.makeTester=function(){var e=bt.ensureSingleById(Fa.select(\"body\"),\"svg\",\"js-plotly-tester\",function(t){t.attr(b3e.svgAttrs).style({position:\"absolute\",left:\"-10000px\",top:\"-10000px\",width:\"9000px\",height:\"9000px\",\"z-index\":\"1\"})}),r=bt.ensureSingle(e,\"path\",\"js-reference-point\",function(t){t.attr(\"d\",\"M0,0H1V1H0Z\").style({\"stroke-width\":0,fill:\"black\"})});rr.tester=e,rr.testref=r};rr.savedBBoxes={};var O4=0,E3e=1e4;rr.bBox=function(e,r,t){t||(t=wF(e));var a;if(t){if(a=rr.savedBBoxes[t],a)return bt.extendFlat({},a)}else if(e.childNodes.length===1){var n=e.childNodes[0];if(t=wF(n),t){var i=+n.getAttribute(\"x\")||0,o=+n.getAttribute(\"y\")||0,l=n.getAttribute(\"transform\");if(!l){var s=rr.bBox(n,!1,t);return i&&(s.left+=i,s.right+=i),o&&(s.top+=o,s.bottom+=o),s}if(t+=\"~\"+i+\"~\"+o+\"~\"+l,a=rr.savedBBoxes[t],a)return bt.extendFlat({},a)}}var u,f;r?u=e:(f=rr.tester.node(),u=e.cloneNode(!0),f.appendChild(u)),Fa.select(u).attr(\"transform\",null).call(Kp.positionText,0,0);var c=u.getBoundingClientRect(),v=rr.testref.node().getBoundingClientRect();r||f.removeChild(u);var d={height:c.height,width:c.width,left:c.left-v.left,top:c.top-v.top,right:c.right-v.left,bottom:c.bottom-v.top};return O4>=E3e&&(rr.savedBBoxes={},O4=0),t&&(rr.savedBBoxes[t]=d),O4++,bt.extendFlat({},d)};function wF(e){var r=e.getAttribute(\"data-unformatted\");if(r!==null)return r+e.getAttribute(\"data-math\")+e.getAttribute(\"text-anchor\")+e.getAttribute(\"style\")}rr.setClipUrl=function(e,r,t){e.attr(\"clip-path\",G4(r,t))};function G4(e,r){if(!e)return null;var t=r._context,a=t._exportedPlot?\"\":t._baseUrl||\"\";return a?\"url('\"+a+\"#\"+e+\"')\":\"url(#\"+e+\")\"}rr.getTranslate=function(e){var r=/.*\\btranslate\\((-?\\d*\\.?\\d*)[^-\\d]*(-?\\d*\\.?\\d*)[^\\d].*/,t=e.attr?\"attr\":\"getAttribute\",a=e[t](\"transform\")||\"\",n=a.replace(r,function(i,o,l){return[o,l].join(\" \")}).split(\" \");return{x:+n[0]||0,y:+n[1]||0}};rr.setTranslate=function(e,r,t){var a=/(\\btranslate\\(.*?\\);?)/,n=e.attr?\"attr\":\"getAttribute\",i=e.attr?\"attr\":\"setAttribute\",o=e[n](\"transform\")||\"\";return r=r||0,t=t||0,o=o.replace(a,\"\").trim(),o+=Dh(r,t),o=o.trim(),e[i](\"transform\",o),o};rr.getScale=function(e){var r=/.*\\bscale\\((\\d*\\.?\\d*)[^\\d]*(\\d*\\.?\\d*)[^\\d].*/,t=e.attr?\"attr\":\"getAttribute\",a=e[t](\"transform\")||\"\",n=a.replace(r,function(i,o,l){return[o,l].join(\" \")}).split(\" \");return{x:+n[0]||1,y:+n[1]||1}};rr.setScale=function(e,r,t){var a=/(\\bscale\\(.*?\\);?)/,n=e.attr?\"attr\":\"getAttribute\",i=e.attr?\"attr\":\"setAttribute\",o=e[n](\"transform\")||\"\";return r=r||1,t=t||1,o=o.replace(a,\"\").trim(),o+=\"scale(\"+r+\",\"+t+\")\",o=o.trim(),e[i](\"transform\",o),o};var P3e=/\\s*sc.*/;rr.setPointGroupScale=function(e,r,t){if(r=r||1,t=t||1,!!e){var a=r===1&&t===1?\"\":\"scale(\"+r+\",\"+t+\")\";e.each(function(){var n=(this.getAttribute(\"transform\")||\"\").replace(P3e,\"\");n+=a,n=n.trim(),this.setAttribute(\"transform\",n)})}};var R3e=/translate\\([^)]*\\)\\s*$/;rr.setTextPointsScale=function(e,r,t){e&&e.each(function(){var a,n=Fa.select(this),i=n.select(\"text\");if(i.node()){var o=parseFloat(i.attr(\"x\")||0),l=parseFloat(i.attr(\"y\")||0),s=(n.attr(\"transform\")||\"\").match(R3e);r===1&&t===1?a=[]:a=[Dh(o,l),\"scale(\"+r+\",\"+t+\")\",Dh(-o,-l)],s&&a.push(s),n.attr(\"transform\",a.join(\"\"))}})};function Y4(e,r){var t;return e&&(t=e.mf),t===void 0&&(t=r.marker&&r.marker.standoff||0),!r._geo&&!r._xA?-t:t}rr.getMarkerStandoff=Y4;var Ch=Math.atan2,ju=Math.cos,$0=Math.sin;function TF(e,r){var t=r[0],a=r[1];return[t*ju(e)-a*$0(e),t*$0(e)+a*ju(e)]}var AF,MF,kF,SF,H4,U4;function V4(e,r){var t=e.ma;t===void 0&&(t=r.marker.angle,(!Ls(t)||bt.isArrayOrTypedArray(t))&&(t=0));var a,n,i=r.marker.angleref;if(i===\"previous\"||i===\"north\"){if(r._geo){var o=r._geo.project(e.lonlat);a=o[0],n=o[1]}else{var l=r._xA,s=r._yA;if(l&&s)a=l.c2p(e.x),n=s.c2p(e.y);else return 90}if(r._geo){var u=e.lonlat[0],f=e.lonlat[1],c=r._geo.project([u,f+1e-5]),v=r._geo.project([u+1e-5,f]),d=Ch(v[1]-n,v[0]-a),p=Ch(c[1]-n,c[0]-a),y;if(i===\"north\")y=t/180*Math.PI;else if(i===\"previous\"){var m=u/180*Math.PI,b=f/180*Math.PI,T=AF/180*Math.PI,w=MF/180*Math.PI,x=T-m,_=ju(w)*$0(x),k=$0(w)*ju(b)-ju(w)*$0(b)*ju(x);y=-Ch(_,k)-Math.PI,AF=u,MF=f}var A=TF(d,[ju(y),0]),q=TF(p,[$0(y),0]);t=Ch(A[1]+q[1],A[0]+q[0])/Math.PI*180,i===\"previous\"&&!(U4===r.uid&&e.i===H4+1)&&(t=null)}if(i===\"previous\"&&!r._geo)if(U4===r.uid&&e.i===H4+1&&Ls(a)&&Ls(n)){var C=a-kF,E=n-SF,P=r.line&&r.line.shape||\"\",R=P.slice(P.length-1);R===\"h\"&&(E=0),R===\"v\"&&(C=0),t+=Ch(E,C)/Math.PI*180+90}else t=null}return kF=a,SF=n,H4=e.i,U4=r.uid,t}rr.getMarkerAngle=V4});var Q0=z((wYe,UF)=>{\"use strict\";var J0=Er(),F3e=Ir(),z3e=va(),j4=Tr(),Zu=ke(),BF=Zu.strTranslate,Qp=Zr(),em=Sr(),K0=Ca(),OF=lp(),N3e=Qa().OPPOSITE_SIDE,HF=/ [XY][0-9]* /,W4=1.6,X4=1.6;function I3e(e,r,t){var a=e._fullLayout,n=t.propContainer,i=t.propName,o=t.placeholder,l=t.traceIndex,s=t.avoid||{},u=t.attributes,f=t.transform,c=t.containerGroup,v=1,d=n.title,p=(d&&d.text?d.text:\"\").trim(),y=!1,m=d&&d.font?d.font:{},b=m.family,T=m.size,w=m.color,x=m.weight,_=m.style,k=m.variant,A=m.textcase,q=m.lineposition,C=m.shadow,E=t.subtitlePropName,P=!!E,R=t.subtitlePlaceholder,N=(n.title||{}).subtitle||{text:\"\",font:{}},I=(N.text||\"\").trim(),O=!1,U=1,Y=N.font,G=Y.family,V=Y.size,W=Y.color,j=Y.weight,J=Y.style,te=Y.variant,ae=Y.textcase,se=Y.lineposition,$=Y.shadow,fe;i===\"title.text\"?fe=\"titleText\":i.indexOf(\"axis\")!==-1?fe=\"axisTitleText\":i.indexOf(\"colorbar\")!==-1&&(fe=\"colorbarTitleText\");var ie=e._context.edits[fe];function ue($e,We){return $e===void 0||We===void 0?!1:$e.replace(HF,\" % \")===We.replace(HF,\" % \")}p===\"\"?v=0:ue(p,o)&&(ie||(p=\"\"),v=.2,y=!0),P&&(I===\"\"?U=0:ue(I,R)&&(ie||(I=\"\"),U=.2,O=!0)),t._meta?p=Zu.templateString(p,t._meta):a._meta&&(p=Zu.templateString(p,a._meta));var ce=p||I||ie,oe;c||(c=Zu.ensureSingle(a._infolayer,\"g\",\"g-\"+r),oe=a._hColorbarMoveTitle);var be=c.selectAll(\"text.\"+r).data(ce?[0]:[]);be.enter().append(\"text\"),be.text(p).attr(\"class\",r),be.exit().remove();var Re=null,ye=r+\"-subtitle\",Ce=I||ie;if(P&&(Re=c.selectAll(\"text.\"+ye).data(Ce?[0]:[]),Re.enter().append(\"text\"),Re.text(I).attr(\"class\",ye),Re.exit().remove()),!ce)return c;function Me($e,We){Zu.syncOrAsync([Le,De],{title:$e,subtitle:We})}function Le($e){var We=$e.title,Se=$e.subtitle,Fe;!f&&oe&&(f={}),f?(Fe=\"\",f.rotate&&(Fe+=\"rotate(\"+[f.rotate,u.x,u.y]+\")\"),(f.offset||oe)&&(Fe+=BF(0,(f.offset||0)-(oe||0)))):Fe=null,We.attr(\"transform\",Fe);function Qe(me){if(me){var Ae=J0.select(me.node().parentNode).select(\".\"+ye);if(!Ae.empty()){var He=me.node().getBBox();if(He.height){var Ze=He.y+He.height+W4*V;Ae.attr(\"y\",Ze)}}}}if(We.style(\"opacity\",v*em.opacity(w)).call(Qp.font,{color:em.rgb(w),size:J0.round(T,2),family:b,weight:x,style:_,variant:k,textcase:A,shadow:C,lineposition:q}).attr(u).call(K0.convertToTspans,e,Qe),Se&&!Se.empty()){var re=c.select(\".\"+r+\"-math-group\"),xe=We.node().getBBox(),Ge=re.node()?re.node().getBBox():void 0,cr=Ge?Ge.y+Ge.height+W4*V:xe.y+xe.height+X4*V,Pe=Zu.extendFlat({},u,{y:cr});Se.attr(\"transform\",Fe),Se.style(\"opacity\",U*em.opacity(W)).call(Qp.font,{color:em.rgb(W),size:J0.round(V,2),family:G,weight:j,style:J,variant:te,textcase:ae,shadow:$,lineposition:se}).attr(Pe).call(K0.convertToTspans,e)}return z3e.previousPromises(e)}function De($e){var We=$e.title,Se=J0.select(We.node().parentNode);if(s&&s.selection&&s.side&&p){Se.attr(\"transform\",null);var Fe=N3e[s.side],Qe=s.side===\"left\"||s.side===\"top\"?-1:1,re=F3e(s.pad)?s.pad:2,xe=Qp.bBox(Se.node()),Ge={t:0,b:0,l:0,r:0},cr=e._fullLayout._reservedMargin;for(var Pe in cr)for(var me in cr[Pe]){var Ae=cr[Pe][me];Ge[me]=Math.max(Ge[me],Ae)}var He={left:Ge.l,top:Ge.t,right:a.width-Ge.r,bottom:a.height-Ge.b},Ze=s.maxShift||Qe*(He[s.side]-xe[s.side]),Be=0;if(Ze<0)Be=Ze;else{var je=s.offsetLeft||0,tr=s.offsetTop||0;xe.left-=je,xe.right-=je,xe.top-=tr,xe.bottom-=tr,s.selection.each(function(){var lr=Qp.bBox(this);Zu.bBoxIntersect(xe,lr,re)&&(Be=Math.max(Be,Qe*(lr[s.side]-xe[Fe])+re))}),Be=Math.min(Ze,Be),n._titleScoot=Math.abs(Be)}if(Be>0||Ze<0){var ir={left:[-Be,0],right:[Be,0],top:[0,-Be],bottom:[0,Be]}[s.side];Se.attr(\"transform\",BF(ir[0],ir[1]))}}}be.call(Me,Re);function Ne($e,We){$e.text(We).on(\"mouseover.opacity\",function(){J0.select(this).transition().duration(OF.SHOW_PLACEHOLDER).style(\"opacity\",1)}).on(\"mouseout.opacity\",function(){J0.select(this).transition().duration(OF.HIDE_PLACEHOLDER).style(\"opacity\",0)})}if(ie&&(p?be.on(\".opacity\",null):(Ne(be,o),y=!0),be.call(K0.makeEditable,{gd:e}).on(\"edit\",function($e){l!==void 0?j4.call(\"_guiRestyle\",e,i,$e,l):j4.call(\"_guiRelayout\",e,i,$e)}).on(\"cancel\",function(){this.text(this.attr(\"data-unformatted\")).call(Me)}).on(\"input\",function($e){this.text($e||\" \").call(K0.positionText,u.x,u.y)}),P)){if(P&&!p){var qe=be.node().getBBox(),Xe=qe.y+qe.height+X4*V;Re.attr(\"y\",Xe)}I?Re.on(\".opacity\",null):(Ne(Re,R),O=!0),Re.call(K0.makeEditable,{gd:e}).on(\"edit\",function($e){j4.call(\"_guiRelayout\",e,\"title.subtitle.text\",$e)}).on(\"cancel\",function(){this.text(this.attr(\"data-unformatted\")).call(Me)}).on(\"input\",function($e){this.text($e||\" \").call(K0.positionText,Re.attr(\"x\"),Re.attr(\"y\"))})}return be.classed(\"js-placeholder\",y),Re&&!Re.empty()&&Re.classed(\"js-placeholder\",O),c}UF.exports={draw:I3e,SUBTITLE_PADDING_EM:X4,SUBTITLE_PADDING_MATHJAX_EM:W4}});var ec=z((TYe,WF)=>{\"use strict\";var B3e=Er(),O3e=p0().utcFormat,qt=ke(),H3e=qt.numberFormat,tl=Ir(),Cs=qt.cleanNumber,U3e=qt.ms2DateTime,GF=qt.dateTime2ms,al=qt.ensureNumber,YF=qt.isArrayOrTypedArray,Ds=Gt(),rm=Ds.FP_SAFE,Lo=Ds.BADNUM,G3e=Ds.LOG_CLIP,Y3e=Ds.ONEWEEK,tm=Ds.ONEDAY,am=Ds.ONEHOUR,VF=Ds.ONEMIN,jF=Ds.ONESEC,nm=ba(),lm=qa(),im=lm.HOUR_PATTERN,om=lm.WEEKDAY_PATTERN;function Eh(e){return Math.pow(10,e)}function Z4(e){return e!=null}WF.exports=function(r,t){t=t||{};var a=r._id||\"x\",n=a.charAt(0);function i(x,_){if(x>0)return Math.log(x)/Math.LN10;if(x<=0&&_&&r.range&&r.range.length===2){var k=r.range[0],A=r.range[1];return .5*(k+A-2*G3e*Math.abs(k-A))}else return Lo}function o(x,_,k,A){if((A||{}).msUTC&&tl(x))return+x;var q=GF(x,k||r.calendar);if(q===Lo)if(tl(x)){x=+x;var C=Math.floor(qt.mod(x+.05,1)*10),E=Math.round(x-C/10);q=GF(new Date(E))+C/10}else return Lo;return q}function l(x,_,k){return U3e(x,_,k||r.calendar)}function s(x){return r._categories[Math.round(x)]}function u(x){if(Z4(x)){if(r._categoriesMap===void 0&&(r._categoriesMap={}),r._categoriesMap[x]!==void 0)return r._categoriesMap[x];r._categories.push(typeof x==\"number\"?String(x):x);var _=r._categories.length-1;return r._categoriesMap[x]=_,_}return Lo}function f(x,_){for(var k=new Array(_),A=0;A<_;A++){var q=(x[0]||[])[A],C=(x[1]||[])[A];k[A]=c([q,C])}return k}function c(x){if(r._categoriesMap)return r._categoriesMap[x]}function v(x){var _=c(x);if(_!==void 0)return _;if(tl(x))return+x}function d(x){return tl(x)?+x:c(x)}function p(x,_,k){return B3e.round(k+_*x,2)}function y(x,_,k){return(x-k)/_}var m=function(_){return tl(_)?p(_,r._m,r._b):Lo},b=function(x){return y(x,r._m,r._b)};if(r.rangebreaks){var T=n===\"y\";m=function(x){if(!tl(x))return Lo;var _=r._rangebreaks.length;if(!_)return p(x,r._m,r._b);var k=T;r.range[0]>r.range[1]&&(k=!k);for(var A=k?-1:1,q=A*x,C=0,E=0;E<_;E++){var P=A*r._rangebreaks[E].min,R=A*r._rangebreaks[E].max;if(q<P)break;if(q>R)C=E+1;else{C=q<(P+R)/2?E:E+1;break}}var N=r._B[C]||0;return isFinite(N)?p(x,r._m2,N):0},b=function(x){var _=r._rangebreaks.length;if(!_)return y(x,r._m,r._b);for(var k=0,A=0;A<_&&!(x<r._rangebreaks[A].pmin);A++)x>r._rangebreaks[A].pmax&&(k=A+1);return y(x,r._m2,r._B[k])}}r.c2l=r.type===\"log\"?i:al,r.l2c=r.type===\"log\"?Eh:al,r.l2p=m,r.p2l=b,r.c2p=r.type===\"log\"?function(x,_){return m(i(x,_))}:m,r.p2c=r.type===\"log\"?function(x){return Eh(b(x))}:b,[\"linear\",\"-\"].indexOf(r.type)!==-1?(r.d2r=r.r2d=r.d2c=r.r2c=r.d2l=r.r2l=Cs,r.c2d=r.c2r=r.l2d=r.l2r=al,r.d2p=r.r2p=function(x){return r.l2p(Cs(x))},r.p2d=r.p2r=b,r.cleanPos=al):r.type===\"log\"?(r.d2r=r.d2l=function(x,_){return i(Cs(x),_)},r.r2d=r.r2c=function(x){return Eh(Cs(x))},r.d2c=r.r2l=Cs,r.c2d=r.l2r=al,r.c2r=i,r.l2d=Eh,r.d2p=function(x,_){return r.l2p(r.d2r(x,_))},r.p2d=function(x){return Eh(b(x))},r.r2p=function(x){return r.l2p(Cs(x))},r.p2r=b,r.cleanPos=al):r.type===\"date\"?(r.d2r=r.r2d=qt.identity,r.d2c=r.r2c=r.d2l=r.r2l=o,r.c2d=r.c2r=r.l2d=r.l2r=l,r.d2p=r.r2p=function(x,_,k){return r.l2p(o(x,0,k))},r.p2d=r.p2r=function(x,_,k){return l(b(x),_,k)},r.cleanPos=function(x){return qt.cleanDate(x,Lo,r.calendar)}):r.type===\"category\"?(r.d2c=r.d2l=u,r.r2d=r.c2d=r.l2d=s,r.d2r=r.d2l_noadd=v,r.r2c=function(x){var _=d(x);return _!==void 0?_:r.fraction2r(.5)},r.l2r=r.c2r=al,r.r2l=d,r.d2p=function(x){return r.l2p(r.r2c(x))},r.p2d=function(x){return s(b(x))},r.r2p=r.d2p,r.p2r=b,r.cleanPos=function(x){return typeof x==\"string\"&&x!==\"\"?x:al(x)}):r.type===\"multicategory\"&&(r.r2d=r.c2d=r.l2d=s,r.d2r=r.d2l_noadd=v,r.r2c=function(x){var _=v(x);return _!==void 0?_:r.fraction2r(.5)},r.r2c_just_indices=c,r.l2r=r.c2r=al,r.r2l=v,r.d2p=function(x){return r.l2p(r.r2c(x))},r.p2d=function(x){return s(b(x))},r.r2p=r.d2p,r.p2r=b,r.cleanPos=function(x){return Array.isArray(x)||typeof x==\"string\"&&x!==\"\"?x:al(x)},r.setupMultiCategory=function(x){var _=r._traceIndices,k,A,q=r._matchGroup;if(q&&r._categories.length===0){for(var C in q)if(C!==a){var E=t[nm.id2name(C)];_=_.concat(E._traceIndices)}}var P=[[0,{}],[0,{}]],R=[];for(k=0;k<_.length;k++){var N=x[_[k]];if(n in N){var I=N[n],O=N._length||qt.minRowLength(I);if(YF(I[0])&&YF(I[1]))for(A=0;A<O;A++){var U=I[0][A],Y=I[1][A];Z4(U)&&Z4(Y)&&(R.push([U,Y]),U in P[0][1]||(P[0][1][U]=P[0][0]++),Y in P[1][1]||(P[1][1][Y]=P[1][0]++))}}}for(R.sort(function(G,V){var W=P[0][1],j=W[G[0]]-W[V[0]];if(j)return j;var J=P[1][1];return J[G[1]]-J[V[1]]}),k=0;k<R.length;k++)u(R[k])}),r.fraction2r=function(x){var _=r.r2l(r.range[0]),k=r.r2l(r.range[1]);return r.l2r(_+x*(k-_))},r.r2fraction=function(x){var _=r.r2l(r.range[0]),k=r.r2l(r.range[1]);return(r.r2l(x)-_)/(k-_)},r.limitRange=function(x){var _=r.minallowed,k=r.maxallowed;if(!(_===void 0&&k===void 0)){x||(x=\"range\");var A=qt.nestedProperty(r,x).get(),q=qt.simpleMap(A,r.r2l),C=q[1]<q[0];C&&q.reverse();var E=qt.simpleMap([_,k],r.r2l);if(_!==void 0&&q[0]<E[0]&&(A[C?1:0]=_,q[0]=E[0]),k!==void 0&&q[1]>E[1]&&(A[C?0:1]=k,q[1]=E[1]),q[0]>=q[1])if(_!==void 0){var P=E[0]+1;k!==void 0&&(P=Math.min(P,E[1])),A[C?0:1]=r.l2r(P)}else k!==void 0&&(A[C?1:0]=r.l2r(E[1]-1))}},r.cleanRange=function(x,_){r._cleanRange(x,_),r.limitRange(x)},r._cleanRange=function(x,_){_||(_={}),x||(x=\"range\");var k=qt.nestedProperty(r,x).get(),A,q;if(r.type===\"date\"?q=qt.dfltRange(r.calendar):n===\"y\"?q=lm.DFLTRANGEY:r._name===\"realaxis\"?q=[0,1]:q=_.dfltRange||lm.DFLTRANGEX,q=q.slice(),(r.rangemode===\"tozero\"||r.rangemode===\"nonnegative\")&&(q[0]=0),!k||k.length!==2){qt.nestedProperty(r,x).set(q);return}var C=k[0]===null,E=k[1]===null;for(r.type===\"date\"&&!r.autorange&&(k[0]=qt.cleanDate(k[0],Lo,r.calendar),k[1]=qt.cleanDate(k[1],Lo,r.calendar)),A=0;A<2;A++)if(r.type===\"date\"){if(!qt.isDateTime(k[A],r.calendar)){r[x]=q;break}if(r.r2l(k[0])===r.r2l(k[1])){var P=qt.constrain(r.r2l(k[0]),qt.MIN_MS+1e3,qt.MAX_MS-1e3);k[0]=r.l2r(P-1e3),k[1]=r.l2r(P+1e3);break}}else{if(!tl(k[A]))if(!(C||E)&&tl(k[1-A]))k[A]=k[1-A]*(A?10:.1);else{r[x]=q;break}if(k[A]<-rm?k[A]=-rm:k[A]>rm&&(k[A]=rm),k[0]===k[1]){var R=Math.max(1,Math.abs(k[0]*1e-6));k[0]-=R,k[1]+=R}}},r.setScale=function(x){var _=t._size;if(r.overlaying){var k=nm.getFromId({_fullLayout:t},r.overlaying);r.domain=k.domain}var A=x&&r._r?\"_r\":\"range\",q=r.calendar;r.cleanRange(A);var C=r.r2l(r[A][0],q),E=r.r2l(r[A][1],q),P=n===\"y\";if(P?(r._offset=_.t+(1-r.domain[1])*_.h,r._length=_.h*(r.domain[1]-r.domain[0]),r._m=r._length/(C-E),r._b=-r._m*E):(r._offset=_.l+r.domain[0]*_.w,r._length=_.w*(r.domain[1]-r.domain[0]),r._m=r._length/(E-C),r._b=-r._m*C),r._rangebreaks=[],r._lBreaks=0,r._m2=0,r._B=[],r.rangebreaks){var R,N;if(r._rangebreaks=r.locateBreaks(Math.min(C,E),Math.max(C,E)),r._rangebreaks.length){for(R=0;R<r._rangebreaks.length;R++)N=r._rangebreaks[R],r._lBreaks+=Math.abs(N.max-N.min);var I=P;C>E&&(I=!I),I&&r._rangebreaks.reverse();var O=I?-1:1;for(r._m2=O*r._length/(Math.abs(E-C)-r._lBreaks),r._B.push(-r._m2*(P?E:C)),R=0;R<r._rangebreaks.length;R++)N=r._rangebreaks[R],r._B.push(r._B[r._B.length-1]-O*r._m2*(N.max-N.min));for(R=0;R<r._rangebreaks.length;R++)N=r._rangebreaks[R],N.pmin=m(N.min),N.pmax=m(N.max)}}if(!isFinite(r._m)||!isFinite(r._b)||r._length<0)throw t._replotting=!1,new Error(\"Something went wrong with axis scaling\")},r.maskBreaks=function(x){var _=r.rangebreaks||[],k,A,q,C,E;_._cachedPatterns||(_._cachedPatterns=_.map(function(W){return W.enabled&&W.bounds?qt.simpleMap(W.bounds,W.pattern?Cs:r.d2c):null})),_._cachedValues||(_._cachedValues=_.map(function(W){return W.enabled&&W.values?qt.simpleMap(W.values,r.d2c).sort(qt.sorterAsc):null}));for(var P=0;P<_.length;P++){var R=_[P];if(R.enabled){if(R.bounds){var N=R.pattern;switch(k=_._cachedPatterns[P],A=k[0],q=k[1],N){case om:E=new Date(x),C=E.getUTCDay(),A>q&&(q+=7,C<A&&(C+=7));break;case im:E=new Date(x);var I=E.getUTCHours(),O=E.getUTCMinutes(),U=E.getUTCSeconds(),Y=E.getUTCMilliseconds();C=I+(O/60+U/3600+Y/36e5),A>q&&(q+=24,C<A&&(C+=24));break;case\"\":C=x;break}if(C>=A&&C<q)return Lo}else for(var G=_._cachedValues[P],V=0;V<G.length;V++)if(A=G[V],q=A+R.dvalue,x>=A&&x<q)return Lo}}return x},r.locateBreaks=function(x,_){var k,A,q,C,E=[];if(!r.rangebreaks)return E;var P=r.rangebreaks.slice().sort(function(J,te){return J.pattern===om&&te.pattern===im?-1:te.pattern===om&&J.pattern===im?1:0}),R=function(J,te){if(J=qt.constrain(J,x,_),te=qt.constrain(te,x,_),J!==te){for(var ae=!0,se=0;se<E.length;se++){var $=E[se];J<$.max&&te>=$.min&&(J<$.min&&($.min=J),te>$.max&&($.max=te),ae=!1)}ae&&E.push({min:J,max:te})}};for(k=0;k<P.length;k++){var N=P[k];if(N.enabled)if(N.bounds){var I=x,O=_;N.pattern&&(I=Math.floor(I)),A=qt.simpleMap(N.bounds,N.pattern?Cs:r.r2l),q=A[0],C=A[1];var U=new Date(I),Y,G;switch(N.pattern){case om:G=Y3e,Y=((C<q?7:0)+(C-q))*tm,I+=q*tm-(U.getUTCDay()*tm+U.getUTCHours()*am+U.getUTCMinutes()*VF+U.getUTCSeconds()*jF+U.getUTCMilliseconds());break;case im:G=tm,Y=((C<q?24:0)+(C-q))*am,I+=q*am-(U.getUTCHours()*am+U.getUTCMinutes()*VF+U.getUTCSeconds()*jF+U.getUTCMilliseconds());break;default:I=Math.min(A[0],A[1]),O=Math.max(A[0],A[1]),G=O-I,Y=G}for(var V=I;V<O;V+=G)R(V,V+Y)}else for(var W=qt.simpleMap(N.values,r.d2c),j=0;j<W.length;j++)q=W[j],C=q+N.dvalue,R(q,C)}return E.sort(function(J,te){return J.min-te.min}),E},r.makeCalcdata=function(x,_,k){var A,q,C,E,P=r.type,R=P===\"date\"&&x[_+\"calendar\"];if(_ in x){if(A=x[_],E=x._length||qt.minRowLength(A),qt.isTypedArray(A)&&(P===\"linear\"||P===\"log\")){if(E===A.length)return A;if(A.subarray)return A.subarray(0,E)}if(P===\"multicategory\")return f(A,E);for(q=new Array(E),C=0;C<E;C++)q[C]=r.d2c(A[C],0,R,k)}else{var N=_+\"0\"in x?r.d2c(x[_+\"0\"],0,R):0,I=x[\"d\"+_]?Number(x[\"d\"+_]):1;for(A=x[{x:\"y\",y:\"x\"}[_]],E=x._length||A.length,q=new Array(E),C=0;C<E;C++)q[C]=N+C*I}if(r.rangebreaks)for(C=0;C<E;C++)q[C]=r.maskBreaks(q[C]);return q},r.isValidRange=function(x,_){return Array.isArray(x)&&x.length===2&&(_&&x[0]===null||tl(r.r2l(x[0])))&&(_&&x[1]===null||tl(r.r2l(x[1])))},r.getAutorangeDflt=function(x,_){var k=!r.isValidRange(x,\"nullOk\");return k&&_&&_.reverseDflt?k=\"reversed\":x&&(x[0]===null&&x[1]===null?k=!0:x[0]===null&&x[1]!==null?k=\"min\":x[0]!==null&&x[1]===null&&(k=\"max\")),k},r.isReversed=function(){var x=r.autorange;return x===\"reversed\"||x===\"min reversed\"||x===\"max reversed\"},r.isPtWithinRange=function(x,_){var k=r.c2l(x[n],null,_),A=r.r2l(r.range[0]),q=r.r2l(r.range[1]);return A<q?A<=k&&k<=q:q<=k&&k<=A},r._emptyCategories=function(){r._categories=[],r._categoriesMap={}},r.clearCalc=function(){var x=r._matchGroup;if(x){var _=null,k=null;for(var A in x){var q=t[nm.id2name(A)];if(q._categories){_=q._categories,k=q._categoriesMap;break}}_&&k?(r._categories=_,r._categoriesMap=k):r._emptyCategories()}else r._emptyCategories();if(r._initialCategories)for(var C=0;C<r._initialCategories.length;C++)u(r._initialCategories[C])},r.sortByInitialCategories=function(){var x=[];if(r._emptyCategories(),r._initialCategories)for(var _=0;_<r._initialCategories.length;_++)u(r._initialCategories[_]);x=x.concat(r._traceIndices);var k=r._matchGroup;for(var A in k)if(a!==A){var q=t[nm.id2name(A)];q._categories=r._categories,q._categoriesMap=r._categoriesMap,x=x.concat(q._traceIndices)}return x};var w=t._d3locale;r.type===\"date\"&&(r._dateFormat=w?w.timeFormat:O3e,r._extraFormat=t._extraFormat),r._separators=t.separators,r._numFormat=w?w.numberFormat:H3e,delete r._minDtick,delete r._forceTick0}});var um=z((AYe,JF)=>{\"use strict\";var XF=Ir(),$4=ke(),V3e=Gt().BADNUM,sm=$4.isArrayOrTypedArray,j3e=$4.isDateTime,W3e=$4.cleanNumber,ZF=Math.round;JF.exports=function(r,t,a){var n=r,i=a.noMultiCategory;if(sm(n)&&!n.length)return\"-\";if(!i&&K3e(n))return\"multicategory\";if(i&&Array.isArray(n[0])){for(var o=[],l=0;l<n.length;l++)if(sm(n[l]))for(var s=0;s<n[l].length;s++)o.push(n[l][s]);n=o}if($3e(n,t))return\"date\";var u=a.autotypenumbers!==\"strict\";return J3e(n,u)?\"category\":Z3e(n,u)?\"linear\":\"-\"};function X3e(e,r){return r?XF(e):typeof e==\"number\"}function Z3e(e,r){for(var t=e.length,a=0;a<t;a++)if(X3e(e[a],r))return!0;return!1}function $3e(e,r){for(var t=e.length,a=$F(t),n=0,i=0,o={},l=0;l<t;l+=a){var s=ZF(l),u=e[s],f=String(u);o[f]||(o[f]=1,j3e(u,r)&&n++,XF(u)&&i++)}return n>i*2}function $F(e){return Math.max(1,(e-1)/1e3)}function J3e(e,r){for(var t=e.length,a=$F(t),n=0,i=0,o={},l=0;l<t;l+=a){var s=ZF(l),u=e[s],f=String(u);if(!o[f]){o[f]=1;var c=typeof u;c===\"boolean\"?i++:(r?W3e(u)!==V3e:c===\"number\")?n++:c===\"string\"&&i++}}return i>n*2}function K3e(e){return sm(e[0])&&sm(e[1])}});var Ph=z((MYe,iz)=>{\"use strict\";var Q3e=Er(),rz=Ir(),Es=ke(),fm=Gt().FP_SAFE,ebe=Tr(),rbe=Zr(),tz=ba(),tbe=tz.getFromId,abe=tz.isLinked;iz.exports={applyAutorangeOptions:nz,getAutoRange:J4,makePadFn:K4,doAutoRange:ibe,findExtremes:obe,concatExtremes:r6};function J4(e,r){var t,a,n=[],i=e._fullLayout,o=K4(i,r,0),l=K4(i,r,1),s=r6(e,r),u=s.min,f=s.max;if(u.length===0||f.length===0)return Es.simpleMap(r.range,r.r2l);var c=u[0].val,v=f[0].val;for(t=1;t<u.length&&c===v;t++)c=Math.min(c,u[t].val);for(t=1;t<f.length&&c===v;t++)v=Math.max(v,f[t].val);var d=r.autorange,p=d===\"reversed\"||d===\"min reversed\"||d===\"max reversed\";if(!p&&r.range){var y=Es.simpleMap(r.range,r.r2l);p=y[1]<y[0]}r.autorange===\"reversed\"&&(r.autorange=!0);var m=r.rangemode,b=m===\"tozero\",T=m===\"nonnegative\",w=r._length,x=w/10,_=0,k,A,q,C,E,P;for(t=0;t<u.length;t++)for(k=u[t],a=0;a<f.length;a++)A=f[a],P=A.val-k.val-KF(r,k.val,A.val),P>0&&(E=w-o(k)-l(A),E>x?P/E>_&&(q=k,C=A,_=P/E):P/w>_&&(q={val:k.val,nopad:1},C={val:A.val,nopad:1},_=P/w));function R(Y,G){return Math.max(Y,l(G))}if(c===v){var N=c-1,I=c+1;if(b)if(c===0)n=[0,1];else{var O=(c>0?f:u).reduce(R,0),U=c/(1-Math.min(.5,O/w));n=c>0?[0,U]:[U,0]}else T?n=[Math.max(0,N),Math.max(1,I)]:n=[N,I]}else b?(q.val>=0&&(q={val:0,nopad:1}),C.val<=0&&(C={val:0,nopad:1})):T&&(q.val-_*o(q)<0&&(q={val:0,nopad:1}),C.val<=0&&(C={val:1,nopad:1})),_=(C.val-q.val-KF(r,k.val,A.val))/(w-o(q)-l(C)),n=[q.val-_*o(q),C.val+_*l(C)];return n=nz(n,r),r.limitRange&&r.limitRange(),p&&n.reverse(),Es.simpleMap(n,r.l2r||Number)}function KF(e,r,t){var a=0;if(e.rangebreaks)for(var n=e.locateBreaks(r,t),i=0;i<n.length;i++){var o=n[i];a+=o.max-o.min}return a}function K4(e,r,t){var a=.05*r._length,n=r._anchorAxis||{};if((r.ticklabelposition||\"\").indexOf(\"inside\")!==-1||(n.ticklabelposition||\"\").indexOf(\"inside\")!==-1){var i=r.isReversed();if(!i){var o=Es.simpleMap(r.range,r.r2l);i=o[1]<o[0]}i&&(t=!t)}var l=0;return abe(e,r._id)||(l=nbe(e,r,t)),a=Math.max(l,a),r.constrain===\"domain\"&&r._inputDomain&&(a*=(r._inputDomain[1]-r._inputDomain[0])/(r.domain[1]-r.domain[0])),function(u){return u.nopad?0:u.pad+(u.extrapad?a:l)}}var QF=3;function nbe(e,r,t){var a=0,n=r._id.charAt(0)===\"x\";for(var i in e._plots){var o=e._plots[i];if(!(r._id!==o.xaxis._id&&r._id!==o.yaxis._id)){var l=(n?o.yaxis:o.xaxis)||{};if((l.ticklabelposition||\"\").indexOf(\"inside\")!==-1&&(!t&&(l.side===\"left\"||l.side===\"bottom\")||t&&(l.side===\"top\"||l.side===\"right\"))){if(l._vals){var s=Es.deg2rad(l._tickAngles[l._id+\"tick\"]||0),u=Math.abs(Math.cos(s)),f=Math.abs(Math.sin(s));if(!l._vals[0].bb){var c=l._id+\"tick\",v=l._selections[c];v.each(function(T){var w=Q3e.select(this),x=w.select(\".text-math-group\");x.empty()&&(T.bb=rbe.bBox(w.node()))})}for(var d=0;d<l._vals.length;d++){var p=l._vals[d],y=p.bb;if(y){var m=2*QF+y.width,b=2*QF+y.height;a=Math.max(a,n?Math.max(m*u,b*f):Math.max(b*u,m*f))}}}l.ticks===\"inside\"&&l.ticklabelposition===\"inside\"&&(a+=l.ticklen||0)}}}return a}function r6(e,r,t){var a=r._id,n=e._fullData,i=e._fullLayout,o=[],l=[],s,u,f;function c(m,b){for(s=0;s<b.length;s++){var T=m[b[s]],w=(T._extremes||{})[a];if(T.visible===!0&&w){for(u=0;u<w.min.length;u++)f=w.min[u],Q4(o,f.val,f.pad,{extrapad:f.extrapad});for(u=0;u<w.max.length;u++)f=w.max[u],e6(l,f.val,f.pad,{extrapad:f.extrapad})}}}if(c(n,r._traceIndices),c(i.annotations||[],r._annIndices||[]),c(i.shapes||[],r._shapeIndices||[]),r._matchGroup&&!t){for(var v in r._matchGroup)if(v!==r._id){var d=tbe(e,v),p=r6(e,d,!0),y=r._length/d._length;for(u=0;u<p.min.length;u++)f=p.min[u],Q4(o,f.val,f.pad*y,{extrapad:f.extrapad});for(u=0;u<p.max.length;u++)f=p.max[u],e6(l,f.val,f.pad*y,{extrapad:f.extrapad})}}return{min:o,max:l}}function ibe(e,r,t){if(r.setScale(),r.autorange){r.range=t?t.slice():J4(e,r),r._r=r.range.slice(),r._rl=Es.simpleMap(r._r,r.r2l);var a=r._input,n={};n[r._attr+\".range\"]=r.range,n[r._attr+\".autorange\"]=r.autorange,ebe.call(\"_storeDirectGUIEdit\",e.layout,e._fullLayout._preGUI,n),a.range=r.range.slice(),a.autorange=r.autorange}var i=r._anchorAxis;if(i&&i.rangeslider){var o=i.rangeslider[r._name];o&&o.rangemode===\"auto\"&&(o.range=J4(e,r)),i._input.rangeslider[r._name]=Es.extendFlat({},o)}}function obe(e,r,t){t||(t={}),e._m||e.setScale();var a=[],n=[],i=r.length,o=t.padded||!1,l=t.tozero&&(e.type===\"linear\"||e.type===\"-\"),s=e.type===\"log\",u=!1,f=t.vpadLinearized||!1,c,v,d,p,y,m,b,T,w;function x(R){if(Array.isArray(R))return u=!0,function(I){return Math.max(Number(R[I]||0),0)};var N=Math.max(Number(R||0),0);return function(){return N}}var _=x((e._m>0?t.ppadplus:t.ppadminus)||t.ppad||0),k=x((e._m>0?t.ppadminus:t.ppadplus)||t.ppad||0),A=x(t.vpadplus||t.vpad),q=x(t.vpadminus||t.vpad);if(!u){if(T=1/0,w=-1/0,s)for(c=0;c<i;c++)v=r[c],v<T&&v>0&&(T=v),v>w&&v<fm&&(w=v);else for(c=0;c<i;c++)v=r[c],v<T&&v>-fm&&(T=v),v>w&&v<fm&&(w=v);r=[T,w],i=2}var C={tozero:l,extrapad:o};function E(R){d=r[R],rz(d)&&(m=_(R),b=k(R),f?(p=e.c2l(d)-q(R),y=e.c2l(d)+A(R)):(T=d-q(R),w=d+A(R),s&&T<w/10&&(T=w/10),p=e.c2l(T),y=e.c2l(w)),l&&(p=Math.min(0,p),y=Math.max(0,y)),ez(p)&&Q4(a,p,b,C),ez(y)&&e6(n,y,m,C))}var P=Math.min(6,i);for(c=0;c<P;c++)E(c);for(c=i-1;c>=P;c--)E(c);return{min:a,max:n,opts:t}}function Q4(e,r,t,a){az(e,r,t,a,lbe)}function e6(e,r,t,a){az(e,r,t,a,sbe)}function az(e,r,t,a,n){for(var i=a.tozero,o=a.extrapad,l=!0,s=0;s<e.length&&l;s++){var u=e[s];if(n(u.val,r)&&u.pad>=t&&(u.extrapad||!o)){l=!1;break}else n(r,u.val)&&u.pad<=t&&(o||!u.extrapad)&&(e.splice(s,1),s--)}if(l){var f=i&&r===0;e.push({val:r,pad:f?0:t,extrapad:f?!1:o})}}function ez(e){return rz(e)&&Math.abs(e)<fm}function lbe(e,r){return e<=r}function sbe(e,r){return e>=r}function ube(e,r){var t=r.autorangeoptions;return t&&t.minallowed!==void 0&&cm(r,t.minallowed,t.maxallowed)?t.minallowed:t&&t.clipmin!==void 0&&cm(r,t.clipmin,t.clipmax)?Math.max(e,r.d2l(t.clipmin)):e}function fbe(e,r){var t=r.autorangeoptions;return t&&t.maxallowed!==void 0&&cm(r,t.minallowed,t.maxallowed)?t.maxallowed:t&&t.clipmax!==void 0&&cm(r,t.clipmin,t.clipmax)?Math.min(e,r.d2l(t.clipmax)):e}function cm(e,r,t){return r!==void 0&&t!==void 0?(r=e.d2l(r),t=e.d2l(t),r<t):!0}function nz(e,r){if(!r||!r.autorangeoptions)return e;var t=e[0],a=e[1],n=r.autorangeoptions.include;if(n!==void 0){var i=r.d2l(t),o=r.d2l(a);Es.isArrayOrTypedArray(n)||(n=[n]);for(var l=0;l<n.length;l++){var s=r.d2l(n[l]);i>=s&&(i=s,t=s),o<=s&&(o=s,a=s)}}return t=ube(t,r),a=fbe(a,r),[t,a]}});var Gr=z((SYe,qz)=>{\"use strict\";var Ii=Er(),ha=Ir(),rc=va(),Fh=Tr(),kr=ke(),tc=kr.strTranslate,$u=Ca(),cbe=Q0(),zh=Sr(),di=Zr(),vbe=Ni(),oz=M4(),kYe=qa(),rn=Gt(),hbe=rn.ONEMAXYEAR,dm=rn.ONEAVGYEAR,pm=rn.ONEMINYEAR,dbe=rn.ONEMAXQUARTER,i6=rn.ONEAVGQUARTER,mm=rn.ONEMINQUARTER,pbe=rn.ONEMAXMONTH,ac=rn.ONEAVGMONTH,ym=rn.ONEMINMONTH,pi=rn.ONEWEEK,Tn=rn.ONEDAY,Ps=Tn/2,il=rn.ONEHOUR,Nh=rn.ONEMIN,gm=rn.ONESEC,mbe=rn.ONEMILLI,ybe=rn.ONEMICROSEC,Ju=rn.MINUS_SIGN,xm=rn.BADNUM,o6={K:\"zeroline\"},l6={K:\"gridline\",L:\"path\"},s6={K:\"minor-gridline\",L:\"path\"},yz={K:\"tick\",L:\"path\"},lz={K:\"tick\",L:\"text\"},sz={width:[\"x\",\"r\",\"l\",\"xl\",\"xr\"],height:[\"y\",\"t\",\"b\",\"yt\",\"yb\"],right:[\"r\",\"xr\"],left:[\"l\",\"xl\"],top:[\"t\",\"yt\"],bottom:[\"b\",\"yb\"]},_m=Qa(),Rh=_m.MID_SHIFT,Ku=_m.CAP_SHIFT,Ih=_m.LINE_SPACING,gbe=_m.OPPOSITE_SIDE,bm=3,Ue=qz.exports={};Ue.setConvert=ec();var bbe=um(),ol=ba(),xbe=ol.idSort,_be=ol.isLinked;Ue.id2name=ol.id2name;Ue.name2id=ol.name2id;Ue.cleanId=ol.cleanId;Ue.list=ol.list;Ue.listIds=ol.listIds;Ue.getFromId=ol.getFromId;Ue.getFromTrace=ol.getFromTrace;var gz=Ph();Ue.getAutoRange=gz.getAutoRange;Ue.findExtremes=gz.findExtremes;var wbe=1e-4;function v6(e){var r=(e[1]-e[0])*wbe;return[e[0]-r,e[1]+r]}function Tbe(e,r,t){if(![t,e,r].every(ha)||t===0)return e;let a=Math.round((e-r)/t),n=r+a*t;return e!==n&&Math.abs(e-n)<Math.abs(t)*1e-6?n:e}Ue.coerceRef=function(e,r,t,a,n,i){var o=a.charAt(a.length-1),l=t._fullLayout._subplots[o+\"axis\"],s=a+\"ref\",u={};return n||(n=l[0]||(typeof i==\"string\"?i:i[0])),i||(i=n),l=l.concat(l.map(function(f){return f+\" domain\"})),u[s]={valType:\"enumerated\",values:l.concat(i?typeof i==\"string\"?[i]:i:[]),dflt:n},kr.coerce(e,r,u,s)};Ue.coerceRefArray=function(e,r,t,a,n,i,o){let l=a.charAt(a.length-1);var s=t._fullLayout._subplots[l+\"axis\"];let u=a+\"ref\";var f=e[u];n||(n=s[0]||(typeof i==\"string\"?i:i[0])),s=s.concat(s.map(v=>v+\" domain\")),s=s.concat(i||[]),f.length>o?(kr.warn(\"Array attribute \"+u+\" has more entries than expected, truncating to \"+o),f=f.slice(0,o)):f.length<o&&(kr.warn(\"Array attribute \"+u+\" has fewer entries than expected, extending with default value\"),f=f.concat(Array(o-f.length).fill(n)));for(var c=0;c<f.length;c++)f[c]=ol.cleanId(f[c],l,!0)||f[c],s.includes(f[c])||(f[c]=n);return r[u]=f,f};Ue.getRefType=function(e){return e===void 0?e:Array.isArray(e)?\"array\":e===\"paper\"?\"paper\":e===\"pixel\"?\"pixel\":/( domain)$/.test(e)?\"domain\":\"range\"};Ue.coercePosition=function(e,r,t,a,n,i){var o,l,s=Ue.getRefType(a);if(s!==\"range\")o=kr.ensureNumber,l=t(n,i);else{var u=Ue.getFromId(r,a);i=u.fraction2r(i),l=t(n,i),o=u.cleanPos}e[n]=o(l)};Ue.cleanPosition=function(e,r,t){var a=t===\"paper\"||t===\"pixel\"?kr.ensureNumber:Ue.getFromId(r,t).cleanPos;return a(e)};Ue.redrawComponents=function(e,r){r=r||Ue.listIds(e);var t=e._fullLayout;function a(n,i,o,l){for(var s=Fh.getComponentMethod(n,i),u={},f=0;f<r.length;f++)for(var c=t[Ue.id2name(r[f])],v=c[o],d=0;d<v.length;d++){var p=v[d];if(!u[p]&&(s(e,p),u[p]=1,l))return}}a(\"annotations\",\"drawOne\",\"_annIndices\"),a(\"shapes\",\"drawOne\",\"_shapeIndices\"),a(\"images\",\"draw\",\"_imgIndices\",!0),a(\"selections\",\"drawOne\",\"_selectionIndices\")};var Abe=Ue.getDataConversions=function(e,r,t,a){var n,i=t===\"x\"||t===\"y\"||t===\"z\"?t:a;if(kr.isArrayOrTypedArray(i)){if(n={type:bbe(a,void 0,{autotypenumbers:e._fullLayout.autotypenumbers}),_categories:[]},Ue.setConvert(n),n.type===\"category\")for(var o=0;o<a.length;o++)n.d2c(a[o])}else n=Ue.getFromTrace(e,r,i);return n?{d2c:n.d2c,c2d:n.c2d}:i===\"ids\"?{d2c:fz,c2d:fz}:{d2c:uz,c2d:uz}};function uz(e){return+e}function fz(e){return String(e)}Ue.getDataToCoordFunc=function(e,r,t,a){return Abe(e,r,t,a).d2c};Ue.counterLetter=function(e){var r=e.charAt(0);if(r===\"x\")return\"y\";if(r===\"y\")return\"x\"};Ue.minDtick=function(e,r,t,a){[\"log\",\"category\",\"multicategory\"].indexOf(e.type)!==-1||!a?e._minDtick=0:e._minDtick===void 0?(e._minDtick=r,e._forceTick0=t):e._minDtick&&((e._minDtick/r+1e-6)%1<2e-6&&((t-e._forceTick0)/r%1+1.000001)%1<2e-6?(e._minDtick=r,e._forceTick0=t):((r/e._minDtick+1e-6)%1>2e-6||((t-e._forceTick0)/e._minDtick%1+1.000001)%1>2e-6)&&(e._minDtick=0))};Ue.saveRangeInitial=function(e,r){for(var t=Ue.list(e,\"\",!0),a=!1,n=0;n<t.length;n++){var i=t[n],o=i._rangeInitial0===void 0&&i._rangeInitial1===void 0,l=o||i.range[0]!==i._rangeInitial0||i.range[1]!==i._rangeInitial1,s=i.autorange;(o&&s!==!0||r&&l)&&(i._rangeInitial0=s===\"min\"||s===\"max reversed\"?void 0:i.range[0],i._rangeInitial1=s===\"max\"||s===\"min reversed\"?void 0:i.range[1],i._autorangeInitial=s,a=!0)}return a};Ue.saveShowSpikeInitial=function(e,r){for(var t=Ue.list(e,\"\",!0),a=!1,n=\"on\",i=0;i<t.length;i++){var o=t[i],l=o._showSpikeInitial===void 0,s=l||o.showspikes!==o._showspikes;(l||r&&s)&&(o._showSpikeInitial=o.showspikes,a=!0),n===\"on\"&&!o.showspikes&&(n=\"off\")}return e._fullLayout._cartesianSpikesEnabled=n,a};Ue.autoBin=function(e,r,t,a,n,i){var o=kr.aggNums(Math.min,null,e),l=kr.aggNums(Math.max,null,e);if(r.type===\"category\"||r.type===\"multicategory\")return{start:o-.5,end:l+.5,size:Math.max(1,Math.round(i)||1),_dataSpan:l-o};n||(n=r.calendar);var s;if(r.type===\"log\"?s={type:\"linear\",range:[o,l]}:s={type:r.type,range:kr.simpleMap([o,l],r.c2r,0,n),calendar:n},Ue.setConvert(s),i=i&&oz.dtick(i,s.type),i)s.dtick=i,s.tick0=oz.tick0(void 0,s.type,n);else{var u;if(t)u=(l-o)/t;else{var f=kr.distinctVals(e),c=Math.pow(10,Math.floor(Math.log(f.minDiff)/Math.LN10)),v=c*kr.roundUp(f.minDiff/c,[.9,1.9,4.9,9.9],!0);u=Math.max(v,2*kr.stdev(e)/Math.pow(e.length,a?.25:.4)),ha(u)||(u=1)}Ue.autoTicks(s,u)}var d=s.dtick,p=Ue.tickIncrement(Ue.tickFirst(s),d,\"reverse\",n),y,m;if(typeof d==\"number\")p=Mbe(p,e,s,o,l),m=1+Math.floor((l-p)/d),y=p+m*d;else for(s.dtick.charAt(0)===\"M\"&&(p=kbe(p,e,d,o,n)),y=p,m=0;y<=l;)y=Ue.tickIncrement(y,d,!1,n),m++;return{start:r.c2r(p,0,n),end:r.c2r(y,0,n),size:d,_dataSpan:l-o}};function Mbe(e,r,t,a,n){var i=0,o=0,l=0,s=0;function u(d){return(1+(d-e)*100/t.dtick)%100<2}for(var f=0;f<r.length;f++)r[f]%1===0?l++:ha(r[f])||s++,u(r[f])&&i++,u(r[f]+t.dtick/2)&&o++;var c=r.length-s;if(l===c&&t.type!==\"date\")t.dtick<1?e=a-.5*t.dtick:(e-=.5,e+t.dtick<a&&(e+=t.dtick));else if(o<c*.1&&(i>c*.3||u(a)||u(n))){var v=t.dtick/2;e+=e+v<a?v:-v}return e}function kbe(e,r,t,a,n){var i=kr.findExactDates(r,n),o=.8;if(i.exactDays>o){var l=Number(t.slice(1));i.exactYears>o&&l%12===0?e=Ue.tickIncrement(e,\"M6\",\"reverse\")+Tn*1.5:i.exactMonths>o?e=Ue.tickIncrement(e,\"M1\",\"reverse\")+Tn*15.5:e-=Ps;var s=Ue.tickIncrement(e,t);if(s<=a)return s}return e}Ue.prepMinorTicks=function(e,r,t){var c,v;if(!((c=r.minor)!=null&&c.dtick)){delete e.dtick;var a=r.dtick&&ha(r._tmin),n;if(a){var i=Ue.tickIncrement(r._tmin,r.dtick,!0);n=[r._tmin,i*.99+r._tmin*.01]}else{var o=kr.simpleMap(r.range,r.r2l);n=[o[0],.8*o[0]+.2*o[1]]}if(e.range=kr.simpleMap(n,r.l2r),e._isMinor=!0,Ue.prepTicks(e,t),a){var l=ha(r.dtick),s=ha(e.dtick),u=l?r.dtick:+r.dtick.substring(1),f=s?e.dtick:+e.dtick.substring(1);l&&s?t6(u,f)?u===2*pi&&f===2*Tn&&(e.dtick=pi):u===2*pi&&f===3*Tn?e.dtick=pi:u===pi&&!(r._input.minor||{}).nticks?e.dtick=Tn:cz(u/f,2.5)?e.dtick=u/2:e.dtick=u:String(r.dtick).charAt(0)===\"M\"?s?e.dtick=\"M1\":t6(u,f)?u>=12&&f===2&&(e.dtick=\"M3\"):e.dtick=r.dtick:String(e.dtick).charAt(0)===\"L\"?String(r.dtick).charAt(0)===\"L\"?t6(u,f)||(e.dtick=cz(u/f,2.5)?r.dtick/2:r.dtick):e.dtick=\"D1\":e.dtick===\"D2\"&&+r.dtick>1&&(e.dtick=1)}e.range=r.range}((v=r.minor)==null?void 0:v._tick0Init)===void 0&&(e.tick0=r.tick0)};function t6(e,r){return Math.abs((e/r+.5)%1-.5)<.001}function cz(e,r){return Math.abs(e/r-1)<.001}Ue.prepTicks=function(e,r){var t=kr.simpleMap(e.range,e.r2l,void 0,void 0,r);if(e.tickmode===\"auto\"||!e.dtick){var a=e.nticks,n;a||(e.type===\"category\"||e.type===\"multicategory\"?(n=e.tickfont?kr.bigFont(e.tickfont.size||12):15,a=e._length/n):(n=e._id.charAt(0)===\"y\"?40:80,a=kr.constrain(e._length/n,4,9)+1),e._name===\"radialaxis\"&&(a*=2)),e.minor&&e.minor.tickmode!==\"array\"||e.tickmode===\"array\"&&(a*=100),e._roughDTick=Math.abs(t[1]-t[0])/a,Ue.autoTicks(e,e._roughDTick),e._minDtick>0&&e.dtick<e._minDtick*2&&(e.dtick=e._minDtick,e.tick0=e.l2r(e._forceTick0))}e.ticklabelmode===\"period\"&&Sbe(e),e.tick0||(e.tick0=e.type===\"date\"?\"2000-01-01\":0),e.type===\"date\"&&e.dtick<.1&&(e.dtick=.1),wz(e)};function a6(e){return+e.substring(1)}function Sbe(e){var r;function t(){return!(ha(e.dtick)||e.dtick.charAt(0)!==\"M\")}var a=t(),n=Ue.getTickFormat(e);if(n){var i=e._dtickInit!==e.dtick;/%[fLQsSMX]/.test(n)||(/%[HI]/.test(n)?(r=il,i&&!a&&e.dtick<il&&(e.dtick=il)):/%p/.test(n)?(r=Ps,i&&!a&&e.dtick<Ps&&(e.dtick=Ps)):/%[Aadejuwx]/.test(n)?(r=Tn,i&&!a&&e.dtick<Tn&&(e.dtick=Tn)):/%[UVW]/.test(n)?(r=pi,i&&!a&&e.dtick<pi&&(e.dtick=pi)):/%[Bbm]/.test(n)?(r=ac,i&&(a?a6(e.dtick)<1:e.dtick<ym)&&(e.dtick=\"M1\")):/%[q]/.test(n)?(r=i6,i&&(a?a6(e.dtick)<3:e.dtick<mm)&&(e.dtick=\"M3\")):/%[Yy]/.test(n)&&(r=dm,i&&(a?a6(e.dtick)<12:e.dtick<pm)&&(e.dtick=\"M12\")))}a=t(),a&&e.tick0===e._dowTick0&&(e.tick0=e._rawTick0),e._definedDelta=r}function qbe(e,r,t){for(var a=0;a<e.length;a++){var n=e[a].value,i=a,o=a+1;a<e.length-1?(i=a,o=a+1):a>0?(i=a-1,o=a):(i=a,o=a);var l=e[i].value,s=e[o].value,u=Math.abs(s-l),f=t||u,c=0;f>=pm?u>=pm&&u<=hbe?c=u:c=dm:t===i6&&f>=mm?u>=mm&&u<=dbe?c=u:c=i6:f>=ym?u>=ym&&u<=pbe?c=u:c=ac:t===pi&&f>=pi?c=pi:f>=Tn?c=Tn:t===Ps&&f>=Ps?c=Ps:t===il&&f>=il&&(c=il);var v;c>=u&&(c=u,v=!0);var d=n+c;if(r.rangebreaks&&c>0){for(var p=84,y=0,m=0;m<p;m++){var b=(m+.5)/p;r.maskBreaks(n*(1-b)+b*d)!==xm&&y++}c*=y/p,c||(e[a].drop=!0),v&&u>pi&&(c=u)}(c>0||a===0)&&(e[a].periodX=n+c/2)}}Ue.calcTicks=function(r,t){for(var a=r.type,n=r.calendar,i=r.ticklabelstep,o=r.ticklabelmode===\"period\",l=r.range[0]>r.range[1],s=!r.ticklabelindex||kr.isArrayOrTypedArray(r.ticklabelindex)?r.ticklabelindex:[r.ticklabelindex],u=kr.simpleMap(r.range,r.r2l,void 0,void 0,t),f=u[1]<u[0],c=Math.min(u[0],u[1]),v=Math.max(u[0],u[1]),d=Math.max(1e3,r._length||0),p=[],y=[],m=[],b=[],T=[],w=r.minor&&(r.minor.ticks||r.minor.showgrid),x=w||s,_=1;_>=(x?0:1);_--){var k=!_;_?(r._dtickInit=r.dtick,r._tick0Init=r.tick0):x&&(r.minor._dtickInit=r.minor.dtick,r.minor._tick0Init=r.minor.tick0);var A=_?r:kr.extendFlat({},r,x?r.minor:{minor:{}});if(k?Ue.prepMinorTicks(A,r,t):Ue.prepTicks(A,t),A.tickmode===\"array\"){_?(m=[],p=vz(r,!k)):(b=[],y=vz(r,!k));continue}if(A.tickmode===\"sync\"){m=[],p=Lbe(r);continue}var q=v6(u),C=q[0],E=q[1],P=ha(A.dtick),R=a===\"log\"&&!(P||A.dtick.charAt(0)===\"L\"),N=Ue.tickFirst(A,t);if(_){if(r._tmin=N,N<C!==f)break;(a===\"category\"||a===\"multicategory\")&&(E=f?Math.max(-.5,E):Math.min(r._categories.length-.5,E))}var I=null,O=N,U;if(_){var Y;P?Y=r.dtick:a===\"date\"?typeof r.dtick==\"string\"&&r.dtick.charAt(0)===\"M\"&&(Y=ac*r.dtick.substring(1)):Y=r._roughDTick,U=Math.round((r.r2l(O)-r.r2l(r.tick0))/Y)-1}var G=A.dtick,V=a===\"linear\"?A.r2l(A.tick0):void 0;for(A.rangebreaks&&A._tick0Init!==A.tick0&&(O=n6(O,r),f||(O=Ue.tickIncrement(O,G,!f,n))),(_||s)&&o&&(O=Ue.tickIncrement(O,G,!f,n),_&&U--);f?O>=E:O<=E;O=Ue.tickIncrement(O,G,f,n)){if(_&&U++,A.rangebreaks&&!f){if(O<C)continue;if(A.maskBreaks(O)===xm&&n6(O,A)>=v)break}if(m.length>d||O===I)break;I=O;var W={value:Tbe(O,V,G)};_?(O===N&&(W.first=!0),R&&O!==(O|0)&&(W.simpleLabel=!0),i>1&&U%i&&(W.skipLabel=!0),m.push(W)):(W.minor=!0,b.push(W))}}if(!b||b.length<3)s=!1;else{var j=(b[2].value-b[1].value)*(l?-1:1);e5e(j,r.tickformat)||(s=!1,b=b.slice(1))}if(!s)T=m;else{var J=m.concat(b);o&&m.length&&(J=J.slice(1)),J=J.sort(function(We,Se){return We.value-Se.value}).filter(function(We,Se,Fe){return Se===0||We.value!==Fe[Se-1].value});var te=J.map(function(We,Se){return We.minor===void 0&&!We.skipLabel?Se:null}).filter(function(We){return We!==null});te.forEach(function(We){s.map(function(Se){var Fe=We+Se;Fe>=0&&Fe<J.length&&kr.pushUnique(T,J[Fe])})}),m.forEach(function(We){We.skipLabel=T.indexOf(We)===-1})}if(w){var ae=r.minor.ticks===\"inside\"&&r.ticks===\"outside\"||r.minor.ticks===\"outside\"&&r.ticks===\"inside\";if(!ae){for(var se=m.map(function(We){return We.value}),$=[],fe=0;fe<b.length;fe++){var ie=b[fe],ue=ie.value;if(se.indexOf(ue)===-1){for(var ce=!1,oe=0;!ce&&oe<m.length;oe++)1e7+m[oe].value===1e7+ue&&(ce=!0);ce||$.push(ie)}}b=$}}o&&qbe(T,r,r._definedDelta);var be;if(r.rangebreaks){var Re=r._id.charAt(0)===\"y\",ye=1;r.tickmode===\"auto\"&&(ye=r.tickfont?r.tickfont.size:12);var Ce=NaN;for(be=m.length-1;be>-1;be--){if(m[be].drop){m.splice(be,1);continue}m[be].value=n6(m[be].value,r);var Me=r.c2p(m[be].value);(Re?Ce>Me-ye:Ce<Me+ye)?m.splice(f?be+1:be,1):Ce=Me}}m6(r)&&Math.abs(u[1]-u[0])===360&&m.pop(),r._tmax=(m[m.length-1]||{}).value,m.length&&(m[m.length-1].last=!0),r._prevDateHead=\"\",r._inCalcTicks=!0;var Le,De=function(We){We.text=\"\",r._prevDateHead=Le};m=m.concat(b);function Ne(We,Se){var Fe=Ue.tickText(We,Se.value,!1,Se.simpleLabel,{first:Se.first,last:Se.last}),Qe=Se.periodX;return Qe!==void 0&&(Fe.periodX=Qe,(Qe>v||Qe<c)&&(Qe>v&&(Fe.periodX=v),Qe<c&&(Fe.periodX=c),De(Fe))),Fe}var qe;for(be=0;be<m.length;be++){var Xe=m[be].minor,$e=m[be].value;Xe?(s&&T.indexOf(m[be])!==-1?qe=Ne(r,m[be]):qe={x:$e},qe.minor=!0,y.push(qe)):(Le=r._prevDateHead,qe=Ne(r,m[be]),m[be].skipLabel&&De(qe),p.push(qe))}return o&&s&&y.length&&(y[0].noTick=!0),p=p.concat(y),r._inCalcTicks=!1,o&&p.length&&(p[0].noTick=!0),p};function bz(e,r){return e.rangebreaks&&(r=r.filter(function(t){return e.maskBreaks(t.x)!==xm})),r}function Lbe(e){var r=e._mainAxis,t=[];if(r._vals){for(var a=-1,n=-1,i=0;i<r._vals.length;i++)r._vals[i].noTick||r._vals[i].minor||(a===-1&&(a=i),n=i);for(var o=0;o<r._vals.length;o++)if(!r._vals[o].noTick){var l=r.l2p(r._vals[o].x),s=e.p2l(l),u=Ue.tickText(e,s,!1,void 0,{first:o===a,last:o===n});r._vals[o].minor&&(u.minor=!0,u.text=\"\"),t.push(u)}}return t=bz(e,t),t}function vz(e,r){var t=kr.simpleMap(e.range,e.r2l),a=v6(t),n=Math.min(a[0],a[1]),i=Math.max(a[0],a[1]),o=e.type===\"category\"?e.d2l_noadd:e.d2l;e.type===\"log\"&&String(e.dtick).charAt(0)!==\"L\"&&(e.dtick=\"L\"+Math.pow(10,Math.floor(Math.min(e.range[0],e.range[1]))-1));for(var l=[],s=0;s<=1;s++)if(!(r!==void 0&&(r&&s||r===!1&&!s))&&!(s&&!e.minor)){var u=s?e.minor.tickvals:e.tickvals,f=s?[]:e.ticktext;if(u){kr.isArrayOrTypedArray(f)||(f=[]);var c=-1,v=-1;if(!s)for(var d=0;d<u.length;d++){var p=o(u[d]);p>n&&p<i&&(c===-1&&(c=d),v=d)}for(var y=0;y<u.length;y++){var m=o(u[y]);if(m>n&&m<i){var b=Ue.tickText(e,m,!1,String(f[y]),{first:y===c,last:y===v});s&&(b.minor=!0,b.text=\"\"),l.push(b)}}}}return l=bz(e,l),l}var vm=[2,5,10],hz=[1,2,3,6,12],dz=[1,2,5,10,15,30],Cbe=[1,2,3,7,14],xz=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],_z=[-.301,0,.301,.699,1],Dbe=[15,30,45,90,180];function nl(e,r,t){return r*kr.roundUp(e/r,t)}Ue.autoTicks=function(e,r,t){var a;function n(c){return Math.pow(c,Math.floor(Math.log(r)/Math.LN10))}if(e.type===\"date\"){e.tick0=kr.dateTick0(e.calendar,0);var i=2*r;if(i>dm)r/=dm,a=n(10),e.dtick=\"M\"+12*nl(r,a,vm);else if(i>ac)r/=ac,e.dtick=\"M\"+nl(r,1,hz);else if(i>Tn){if(e.dtick=nl(r,Tn,e._hasDayOfWeekBreaks?[1,2,7,14]:Cbe),!t){var o=Ue.getTickFormat(e),l=e.ticklabelmode===\"period\";l&&(e._rawTick0=e.tick0),/%[uVW]/.test(o)?e.tick0=kr.dateTick0(e.calendar,2):e.tick0=kr.dateTick0(e.calendar,1),l&&(e._dowTick0=e.tick0)}}else i>il?e.dtick=nl(r,il,hz):i>Nh?e.dtick=nl(r,Nh,dz):i>gm?e.dtick=nl(r,gm,dz):(a=n(10),e.dtick=nl(r,a,vm))}else if(e.type===\"log\"){e.tick0=0;var s=kr.simpleMap(e.range,e.r2l);if(e._isMinor&&(r*=1.5),r>.7)e.dtick=Math.ceil(r);else if(Math.abs(s[1]-s[0])<1){var u=1.5*Math.abs((s[1]-s[0])/r);r=Math.abs(Math.pow(10,s[1])-Math.pow(10,s[0]))/u,a=n(10),e.dtick=\"L\"+nl(r,a,vm)}else e.dtick=r>.3?\"D2\":\"D1\"}else e.type===\"category\"||e.type===\"multicategory\"?(e.tick0=0,e.dtick=Math.ceil(Math.max(r,1))):m6(e)?(e.tick0=0,a=1,e.dtick=nl(r,a,Dbe)):(e.tick0=0,a=n(10),e.dtick=nl(r,a,vm));if(e.dtick===0&&(e.dtick=1),!ha(e.dtick)&&typeof e.dtick!=\"string\"){var f=e.dtick;throw e.dtick=1,\"ax.dtick error: \"+String(f)}};function wz(e){var r=e.dtick;if(e._tickexponent=0,!ha(r)&&typeof r!=\"string\"&&(r=1),(e.type===\"category\"||e.type===\"multicategory\")&&(e._tickround=null),e.type===\"date\"){var t=e.r2l(e.tick0),a=e.l2r(t).replace(/(^-|i)/g,\"\"),n=a.length;if(String(r).charAt(0)===\"M\")n>10||a.slice(5)!==\"01-01\"?e._tickround=\"d\":e._tickround=+r.slice(1)%12===0?\"y\":\"m\";else if(r>=Tn&&n<=10||r>=Tn*15)e._tickround=\"d\";else if(r>=Nh&&n<=16||r>=il)e._tickround=\"M\";else if(r>=gm&&n<=19||r>=Nh)e._tickround=\"S\";else{var i=e.l2r(t+r).replace(/^-/,\"\").length;e._tickround=Math.max(n,i)-20,e._tickround<0&&(e._tickround=4)}}else if(ha(r)||r.charAt(0)===\"L\"){var o=e.range.map(e.r2d||Number);ha(r)||(r=Number(r.slice(1))),e._tickround=2-Math.floor(Math.log(r)/Math.LN10+.01);var l=Math.max(Math.abs(o[0]),Math.abs(o[1])),s=Math.floor(Math.log(l)/Math.LN10+.01),u=e.minexponent===void 0?3:e.minexponent;Math.abs(s)>u&&(nc(e.exponentformat)&&e.exponentformat!==\"SI extended\"&&!h6(s)||nc(e.exponentformat)&&e.exponentformat===\"SI extended\"&&!d6(s)?e._tickexponent=3*Math.round((s-1)/3):e._tickexponent=s)}else e._tickround=null}Ue.tickIncrement=function(e,r,t,a){var n=t?-1:1;if(ha(r))return kr.increment(e,n*r);var i=r.charAt(0),o=n*Number(r.slice(1));if(i===\"M\")return kr.incrementMonth(e,o,a);if(i===\"L\")return Math.log(Math.pow(10,e)+o)/Math.LN10;if(i===\"D\"){var l=r===\"D2\"?_z:xz,s=e+n*.01,u=kr.roundUp(kr.mod(s,1),l,t);return Math.floor(s)+Math.log(Ii.round(Math.pow(10,u),1))/Math.LN10}throw\"unrecognized dtick \"+String(r)};Ue.tickFirst=function(e,r){var t=e.r2l||Number,a=kr.simpleMap(e.range,t,void 0,void 0,r),n=a[1]<a[0],i=n?Math.floor:Math.ceil,o=v6(a)[0],l=e.dtick,s=t(e.tick0);if(ha(l)){var u=i((o-s)/l)*l+s;return(e.type===\"category\"||e.type===\"multicategory\")&&(u=kr.constrain(u,0,e._categories.length-1)),u}var f=l.charAt(0),c=Number(l.slice(1));if(f===\"M\"){for(var v=0,d=s,p,y,m;v<10;){if(p=Ue.tickIncrement(d,l,n,e.calendar),(p-o)*(d-o)<=0)return n?Math.min(d,p):Math.max(d,p);y=(o-(d+p)/2)/(p-d),m=f+(Math.abs(Math.round(y))||1)*c,d=Ue.tickIncrement(d,m,y<0?!n:n,e.calendar),v++}return kr.error(\"tickFirst did not converge\",e),d}else{if(f===\"L\")return Math.log(i((Math.pow(10,o)-s)/c)*c+s)/Math.LN10;if(f===\"D\"){var b=l===\"D2\"?_z:xz,T=kr.roundUp(kr.mod(o,1),b,n);return Math.floor(o)+Math.log(Ii.round(Math.pow(10,T),1))/Math.LN10}else throw\"unrecognized dtick \"+String(l)}};Ue.tickText=function(e,r,t,a,n){var i=!!(n!=null&&n.first),o=!!(n!=null&&n.last),l=Tz(e,r),s=e.tickmode===\"array\",u=t||s,f=e.type,c=f===\"category\"?e.d2l_noadd:e.d2l,v,d=function(w){var x=e.l2p(w);return x>=0&&x<=e._length?w:null};if(s&&kr.isArrayOrTypedArray(e.ticktext)){var p=kr.simpleMap(e.range,e.r2l),y=(Math.abs(p[1]-p[0])-(e._lBreaks||0))/1e4;for(v=0;v<e.ticktext.length&&!(Math.abs(r-c(e.tickvals[v]))<y);v++);if(v<e.ticktext.length)return l.text=String(e.ticktext[v]),l.xbnd=[d(l.x-.5),d(l.x+e.dtick-.5)],l}function m(w){return w===void 0?!0:t?w===\"none\":w===\"all\"?!1:w===\"first\"?!i:w===\"last\"?!o:!0}var b=t?\"never\":e.exponentformat!==\"none\"&&m(e.showexponent)?\"hide\":\"\";if(f===\"date\"?Ebe(e,l,t,u):f===\"log\"?Pbe(e,l,t,u,b):f===\"category\"?Rbe(e,l):f===\"multicategory\"?Fbe(e,l,t):m6(e)?Nbe(e,l,t,u,b):zbe(e,l,t,u,b),a||(e.tickprefix&&!m(e.showtickprefix)&&(l.text=e.tickprefix+l.text),e.ticksuffix&&!m(e.showticksuffix)&&(l.text+=e.ticksuffix)),e.labelalias&&e.labelalias.hasOwnProperty(l.text)){var T=e.labelalias[l.text];typeof T==\"string\"&&(l.text=T)}return(e.tickson===\"boundaries\"||e.showdividers)&&(l.xbnd=[d(l.x-.5),d(l.x+e.dtick-.5)]),l};Ue.hoverLabelText=function(e,r,t){t&&(e=kr.extendFlat({},e,{hoverformat:t}));var a=kr.isArrayOrTypedArray(r)?r[0]:r,n=kr.isArrayOrTypedArray(r)?r[1]:void 0;if(n!==void 0&&n!==a)return Ue.hoverLabelText(e,a,t)+\" - \"+Ue.hoverLabelText(e,n,t);var i=e.type===\"log\"&&a<=0,o=Ue.tickText(e,e.c2l(i?-a:a),\"hover\").text;return i?a===0?\"0\":Ju+o:o};function Tz(e,r,t){var a=e.tickfont||{};return{x:r,dx:0,dy:0,text:t||\"\",fontSize:a.size,font:a.family,fontWeight:a.weight,fontStyle:a.style,fontVariant:a.variant,fontTextcase:a.textcase,fontLineposition:a.lineposition,fontShadow:a.shadow,fontColor:a.color}}function Ebe(e,r,t,a){var n=e._tickround,i=t&&e.hoverformat||Ue.getTickFormat(e);a=!i&&a,a&&(ha(n)?n=4:n={y:\"m\",m:\"d\",d:\"M\",M:\"S\",S:4}[n]);var o=kr.formatDate(r.x,i,n,e._dateFormat,e.calendar,e._extraFormat),l,s=o.indexOf(`\n`);if(s!==-1&&(l=o.slice(s+1),o=o.slice(0,s)),a&&(l!==void 0&&(o===\"00:00:00\"||o===\"00:00\")?(o=l,l=\"\"):o.length===8&&(o=o.replace(/:00$/,\"\"))),l)if(t)n===\"d\"?o+=\", \"+l:o=l+(o?\", \"+o:\"\");else if(!e._inCalcTicks||e._prevDateHead!==l)e._prevDateHead=l,o+=\"<br>\"+l;else{var u=Oh(e),f=e._trueSide||e.side;(!u&&f===\"top\"||u&&f===\"bottom\")&&(o+=\"<br> \")}r.text=o}function Pbe(e,r,t,a,n){var i=e.dtick,o=r.x,l=e.tickformat,s=typeof i==\"string\"&&i.charAt(0);if(n===\"never\"&&(n=\"\"),a&&s!==\"L\"&&(i=\"L3\",s=\"L\"),l||s===\"L\")r.text=Bh(Math.pow(10,o),e,n,a);else if(ha(i)||s===\"D\"&&(e.minorloglabels===\"complete\"||kr.mod(o+.01,1)<.1)){var u;e.minorloglabels===\"complete\"&&!(kr.mod(o+.01,1)<.1)&&(u=!0,r.fontSize*=.75);var f=Math.pow(10,o).toExponential(0),c=f.split(\"e\"),v=+c[1],d=Math.abs(v),p=e.exponentformat;p===\"power\"||nc(p)&&p!==\"SI extended\"&&h6(v)||nc(p)&&p===\"SI extended\"&&d6(v)?(r.text=c[0],d>0&&(r.text+=\"x10\"),r.text===\"1x10\"&&(r.text=\"10\"),v!==0&&v!==1&&(r.text+=\"<sup>\"+(v>0?\"\":Ju)+d+\"</sup>\"),r.fontSize*=1.25):(p===\"e\"||p===\"E\")&&d>2?r.text=c[0]+p+(v>0?\"+\":Ju)+d:(r.text=Bh(Math.pow(10,o),e,\"\",\"fakehover\"),i===\"D1\"&&e._id.charAt(0)===\"y\"&&(r.dy-=r.fontSize/6))}else if(s===\"D\")r.text=e.minorloglabels===\"none\"?\"\":String(Math.round(Math.pow(10,kr.mod(o,1)))),r.fontSize*=.75;else throw\"unrecognized dtick \"+String(i);if(e.dtick===\"D1\"){var y=String(r.text).charAt(0);(y===\"0\"||y===\"1\")&&(e._id.charAt(0)===\"y\"?r.dx-=r.fontSize/4:(r.dy+=r.fontSize/2,r.dx+=(e.range[1]>e.range[0]?1:-1)*r.fontSize*(o<0?.5:.25)))}}function Rbe(e,r){var t=e._categories[Math.round(r.x)];t===void 0&&(t=\"\"),r.text=String(t)}function Fbe(e,r,t){var a=Math.round(r.x),n=e._categories[a]||[],i=n[1]===void 0?\"\":String(n[1]),o=n[0]===void 0?\"\":String(n[0]);t?r.text=o+\" - \"+i:(r.text=i,r.text2=o)}function zbe(e,r,t,a,n){n===\"never\"?n=\"\":e.showexponent===\"all\"&&Math.abs(r.x/e.dtick)<1e-6&&(n=\"hide\"),r.text=Bh(r.x,e,n,a)}function Nbe(e,r,t,a,n){if(e.thetaunit===\"radians\"&&!t){var i=r.x/180;if(i===0)r.text=\"0\";else{var o=Ibe(i);if(o[1]>=100)r.text=Bh(kr.deg2rad(r.x),e,n,a);else{var l=r.x<0;o[1]===1?o[0]===1?r.text=\"\\u03C0\":r.text=o[0]+\"\\u03C0\":r.text=[\"<sup>\",o[0],\"</sup>\",\"\\u2044\",\"<sub>\",o[1],\"</sub>\",\"\\u03C0\"].join(\"\"),l&&(r.text=Ju+r.text)}}}else r.text=Bh(r.x,e,n,a)}function Ibe(e){function r(l,s){return Math.abs(l-s)<=1e-6}function t(l,s){return r(s,0)?l:t(s,l%s)}function a(l){for(var s=1;!r(Math.round(l*s)/s,l);)s*=10;return s}var n=a(e),i=e*n,o=Math.abs(t(i,n));return[Math.round(i/o),Math.round(n/o)]}var Az=[\"f\",\"p\",\"n\",\"\\u03BC\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\"],Bbe=[\"q\",\"r\",\"y\",\"z\",\"a\",...Az,\"P\",\"E\",\"Z\",\"Y\",\"R\",\"Q\"],nc=e=>[\"SI\",\"SI extended\",\"B\"].includes(e);function h6(e){return e>14||e<-15}function d6(e){return e>32||e<-30}function Obe(e,r){return nc(r)?!!(r===\"SI extended\"&&d6(e)||r!==\"SI extended\"&&h6(e)):!1}function Bh(e,r,t,a){var n=e<0,i=r._tickround,o=t||r.exponentformat||\"B\",l=r._tickexponent,s=Ue.getTickFormat(r),u=r.separatethousands;if(a){var f={exponentformat:o,minexponent:r.minexponent,dtick:r.showexponent===\"none\"?r.dtick:ha(e)&&Math.abs(e)||1,range:r.showexponent===\"none\"?r.range.map(r.r2d):[0,e||1]};wz(f),i=(Number(f._tickround)||0)+4,l=f._tickexponent,r.hoverformat&&(s=r.hoverformat)}if(s)return r._numFormat(s)(e).replace(/-/g,Ju);o===\"none\"&&(l=0),e=Math.abs(e);let c=Math.pow(10,-i)/2;if(e<c)e=\"0\",n=!1;else{if(l&&(e*=Math.pow(10,-l),i+=l),i===0)e=String(Math.round(e));else if(i<0){let d=Math.pow(10,-i);e=String(Math.round(e/d)*d)}else e=e.toFixed(Math.min(20,i)).replace(/\\.?0+$/,\"\");e=kr.numSeparate(e,r._separators,u)}if(l&&o!==\"hide\"){Obe(l,o)&&(o=\"power\");var v;l<0?v=Ju+-l:o!==\"power\"?v=\"+\"+l:v=String(l),o===\"e\"||o===\"E\"?e+=o+v:o===\"power\"?e+=\"\\xD710<sup>\"+v+\"</sup>\":o===\"B\"&&l===9?e+=\"B\":nc(o)&&(e+=o===\"SI extended\"?Bbe[l/3+10]:Az[l/3+5])}return n?Ju+e:e}Ue.getTickFormat=function(e){var r;function t(s){return typeof s!=\"string\"?s:Number(s.replace(\"M\",\"\"))*ac}function a(s,u){var f=[\"L\",\"D\"];if(typeof s==typeof u){if(typeof s==\"number\")return s-u;var c=f.indexOf(s.charAt(0)),v=f.indexOf(u.charAt(0));return c===v?Number(s.replace(/(L|D)/g,\"\"))-Number(u.replace(/(L|D)/g,\"\")):c-v}else return typeof s==\"number\"?1:-1}function n(s,u,f){var c=f||function(p){return p},v=u[0],d=u[1];return(!v&&typeof v!=\"number\"||c(v)<=c(s))&&(!d&&typeof d!=\"number\"||c(d)>=c(s))}function i(s,u){var f=u[0]===null,c=u[1]===null,v=a(s,u[0])>=0,d=a(s,u[1])<=0;return(f||v)&&(c||d)}var o,l;if(e.tickformatstops&&e.tickformatstops.length>0)switch(e.type){case\"date\":case\"linear\":{for(r=0;r<e.tickformatstops.length;r++)if(l=e.tickformatstops[r],l.enabled&&n(e.dtick,l.dtickrange,t)){o=l;break}break}case\"log\":{for(r=0;r<e.tickformatstops.length;r++)if(l=e.tickformatstops[r],l.enabled&&i(e.dtick,l.dtickrange)){o=l;break}break}default:}return o?o.value:e.tickformat};Ue.getSubplots=function(e,r){var t=e._fullLayout._subplots,a=t.cartesian.concat(t.gl2d||[]),n=r?Ue.findSubplotsWithAxis(a,r):a;return n.sort(function(i,o){var l=i.slice(1).split(\"y\"),s=o.slice(1).split(\"y\");return l[0]===s[0]?+l[1]-+s[1]:+l[0]-+s[0]}),n};Ue.findSubplotsWithAxis=function(e,r){for(var t=new RegExp(r._id.charAt(0)===\"x\"?\"^\"+r._id+\"y\":r._id+\"$\"),a=[],n=0;n<e.length;n++){var i=e[n];t.test(i)&&a.push(i)}return a};Ue.makeClipPaths=function(e){var r=e._fullLayout;if(!r._hasOnlyLargeSploms){var t={_offset:0,_length:r.width,_id:\"\"},a={_offset:0,_length:r.height,_id:\"\"},n=Ue.list(e,\"x\",!0),i=Ue.list(e,\"y\",!0),o=[],l,s;for(l=0;l<n.length;l++)for(o.push({x:n[l],y:a}),s=0;s<i.length;s++)l===0&&o.push({x:t,y:i[s]}),o.push({x:n[l],y:i[s]});var u=r._clips.selectAll(\".axesclip\").data(o,function(f){return f.x._id+f.y._id});u.enter().append(\"clipPath\").classed(\"axesclip\",!0).attr(\"id\",function(f){return\"clip\"+r._uid+f.x._id+f.y._id}).append(\"rect\"),u.exit().remove(),u.each(function(f){Ii.select(this).select(\"rect\").attr({x:f.x._offset||0,y:f.y._offset||0,width:f.x._length||1,height:f.y._length||1})})}};Ue.draw=function(e,r,t){var a=e._fullLayout;r===\"redraw\"&&a._paper.selectAll(\"g.subplot\").each(function(s){var u=s[0],f=a._plots[u];if(f){var c=f.xaxis,v=f.yaxis;f.xaxislayer.selectAll(\".\"+c._id+\"tick\").remove(),f.yaxislayer.selectAll(\".\"+v._id+\"tick\").remove(),f.xaxislayer.selectAll(\".\"+c._id+\"tick2\").remove(),f.yaxislayer.selectAll(\".\"+v._id+\"tick2\").remove(),f.xaxislayer.selectAll(\".\"+c._id+\"divider\").remove(),f.yaxislayer.selectAll(\".\"+v._id+\"divider\").remove(),f.minorGridlayer&&f.minorGridlayer.selectAll(\"path\").remove(),f.gridlayer&&f.gridlayer.selectAll(\"path\").remove(),f.zerolinelayer&&f.zerolinelayer.selectAll(\"path\").remove(),f.zerolinelayerAbove&&f.zerolinelayerAbove.selectAll(\"path\").remove(),a._infolayer.select(\".g-\"+c._id+\"title\").remove(),a._infolayer.select(\".g-\"+v._id+\"title\").remove()}});var n=!r||r===\"redraw\"?Ue.listIds(e):r,i=Ue.list(e),o=i.filter(function(s){return s.autoshift}).map(function(s){return s.overlaying});n.map(function(s){var u=Ue.getFromId(e,s);if(u.tickmode===\"sync\"&&u.overlaying){var f=n.findIndex(function(c){return c===u.overlaying});f>=0&&n.unshift(n.splice(f,1).shift())}});var l={false:{left:0,right:0}};return kr.syncOrAsync(n.map(function(s){return function(){if(s){var u=Ue.getFromId(e,s);t||(t={}),t.axShifts=l,t.overlayingShiftedAx=o;var f=Ue.drawOne(e,u,t);return u._shiftPusher&&c6(u,u._fullDepth||0,l,!0),u._r=u.range.slice(),u._rl=kr.simpleMap(u._r,u.r2l),f}}}))};Ue.drawOne=function(e,r,t){t=t||{};var a=t.axShifts||{},n=t.overlayingShiftedAx||[],i,o,l;r.setScale();var s=e._fullLayout,u=r._id,f=u.charAt(0),c=Ue.counterLetter(u),v=s._plots[r._mainSubplot],d=r.zerolinelayer===\"above traces\";if(!v)return;if(r._shiftPusher=r.autoshift||n.indexOf(r._id)!==-1||n.indexOf(r.overlaying)!==-1,r._shiftPusher&r.anchor===\"free\"){var p=r.linewidth/2||0;r.ticks===\"inside\"&&(p+=r.ticklen),c6(r,p,a,!0),c6(r,r.shift||0,a,!1)}(t.skipTitle!==!0||r._shift===void 0)&&(r._shift=Qbe(r,a));var y=v[f+\"axislayer\"],m=r._mainLinePosition,b=m+=r._shift,T=r._mainMirrorPosition,w=r._vals=Ue.calcTicks(r),x=[r.mirror,b,T].join(\"_\");for(i=0;i<w.length;i++)w[i].axInfo=x;r._selections={},r._tickAngles&&(r._prevTickAngles=r._tickAngles),r._tickAngles={},r._depth=null;var _={};function k(qe){var Xe=u+(qe||\"tick\");return _[Xe]||(_[Xe]=Ybe(r,Xe,b)),_[Xe]}if(r.visible){var A=Ue.makeTransTickFn(r),q=Ue.makeTransTickLabelFn(r),C,E,P=r.ticks===\"inside\",R=r.ticks===\"outside\";if(r.tickson===\"boundaries\"){var N=Hbe(r,w);E=Ue.clipEnds(r,N),C=P?E:N}else E=Ue.clipEnds(r,w),C=P&&r.ticklabelmode!==\"period\"?E:w;var I=r._gridVals=E,O=Gbe(r,w);if(!s._hasOnlyLargeSploms){var U=r._subplotsWith,Y={};for(i=0;i<U.length;i++){o=U[i],l=s._plots[o];var G=l[c+\"axis\"],V=G._mainAxis._id;if(!Y[V]){Y[V]=1;var W=f===\"x\"?\"M0,\"+G._offset+\"v\"+G._length:\"M\"+G._offset+\",0h\"+G._length;Ue.drawGrid(e,r,{vals:I,counterAxis:G,layer:l.gridlayer.select(\".\"+u),minorLayer:l.minorGridlayer.select(\".\"+u),path:W,transFn:A}),Ue.drawZeroLine(e,r,{counterAxis:G,layer:d?l.zerolinelayerAbove:l.zerolinelayer,path:W,transFn:A})}}}var j,J=Ue.getTickSigns(r),te=Ue.getTickSigns(r,\"minor\");if(r.ticks||r.minor&&r.minor.ticks){var ae=Ue.makeTickPath(r,b,J[2]),se=Ue.makeTickPath(r,b,te[2],{minor:!0}),$,fe,ie,ue;if(r._anchorAxis&&r.mirror&&r.mirror!==!0?($=Ue.makeTickPath(r,T,J[3]),fe=Ue.makeTickPath(r,T,te[3],{minor:!0}),ie=ae+$,ue=se+fe):($=\"\",fe=\"\",ie=ae,ue=se),r.showdividers&&R&&r.tickson===\"boundaries\"){var ce={};for(i=0;i<O.length;i++)ce[O[i].x]=1;j=function(qe){return ce[qe.x]?$:ie}}else j=function(qe){return qe.minor?ue:ie}}if(Ue.drawTicks(e,r,{vals:C,layer:y,path:j,transFn:A}),r.mirror===\"allticks\"){var oe=Object.keys(r._linepositions||{});for(i=0;i<oe.length;i++){o=oe[i],l=s._plots[o];var be=r._linepositions[o]||[],Re=be[0],ye=be[1],Ce=be[2],Me=Ue.makeTickPath(r,Re,Ce?J[0]:te[0],{minor:Ce})+Ue.makeTickPath(r,ye,Ce?J[1]:te[1],{minor:Ce});Ue.drawTicks(e,r,{vals:C,layer:l[f+\"axislayer\"],path:Me,transFn:A})}}var Le=[];if(Le.push(function(){return Ue.drawLabels(e,r,{vals:w,layer:y,plotinfo:l,transFn:q,labelFns:Ue.makeLabelFns(r,b)})}),r.type===\"multicategory\"){var De={x:2,y:10}[f];Le.push(function(){var qe={x:\"height\",y:\"width\"}[f],Xe=k()[qe]+De+(r._tickAngles[u+\"tick\"]?r.tickfont.size*Ih:0);return Ue.drawLabels(e,r,{vals:Ube(r,w),layer:y,cls:u+\"tick2\",repositionOnUpdate:!0,secondary:!0,transFn:A,labelFns:Ue.makeLabelFns(r,b+Xe*J[4])})}),Le.push(function(){return r._depth=J[4]*(k(\"tick2\")[r.side]-b),jbe(e,r,{vals:O,layer:y,path:Ue.makeTickPath(r,b,J[4],{len:r._depth}),transFn:A})})}else r.title.hasOwnProperty(\"standoff\")&&Le.push(function(){r._depth=J[4]*(k()[r.side]-b)});var Ne=Fh.getComponentMethod(\"rangeslider\",\"isVisible\")(r);return!t.skipTitle&&!(Ne&&r.side===\"bottom\")&&Le.push(function(){return Wbe(e,r)}),Le.push(function(){var qe=r.side.charAt(0),Xe=gbe[r.side].charAt(0),$e=Ue.getPxPosition(e,r),We=R?r.ticklen:0,Se,Fe,Qe,re;(r.automargin||Ne||r._shiftPusher)&&(r.type===\"multicategory\"?Se=k(\"tick2\"):(Se=k(),f===\"x\"&&qe===\"b\"&&(r._depth=Math.max(Se.width>0?Se.bottom-$e:0,We))));var xe=0,Ge=0;if(r._shiftPusher&&(xe=Math.max(We,Se.height>0?qe===\"l\"?$e-Se.left:Se.right-$e:0),r.title.text!==s._dfltTitle[f]&&(Ge=(r._titleStandoff||0)+(r._titleScoot||0),qe===\"l\"&&(Ge+=mz(r))),r._fullDepth=Math.max(xe,Ge)),r.automargin){Fe={x:0,y:0,r:0,l:0,t:0,b:0};var cr=[0,1],Pe=typeof r._shift==\"number\"?r._shift:0;if(f===\"x\"){if(qe===\"b\"?Fe[qe]=r._depth:(Fe[qe]=r._depth=Math.max(Se.width>0?$e-Se.top:0,We),cr.reverse()),Se.width>0){var me=Se.right-(r._offset+r._length);me>0&&(Fe.xr=1,Fe.r=me);var Ae=r._offset-Se.left;Ae>0&&(Fe.xl=0,Fe.l=Ae)}}else if(qe===\"l\"?(r._depth=Math.max(Se.height>0?$e-Se.left:0,We),Fe[qe]=r._depth-Pe):(r._depth=Math.max(Se.height>0?Se.right-$e:0,We),Fe[qe]=r._depth+Pe,cr.reverse()),Se.height>0){var He=Se.bottom-(r._offset+r._length);He>0&&(Fe.yb=0,Fe.b=He);var Ze=r._offset-Se.top;Ze>0&&(Fe.yt=1,Fe.t=Ze)}Fe[c]=r.anchor===\"free\"?r.position:r._anchorAxis.domain[cr[0]],r.title.text!==s._dfltTitle[f]&&(Fe[qe]+=mz(r)+(r.title.standoff||0)),r.mirror&&r.anchor!==\"free\"&&(Qe={x:0,y:0,r:0,l:0,t:0,b:0},Qe[Xe]=r.linewidth,r.mirror&&r.mirror!==!0&&(Qe[Xe]+=We),r.mirror===!0||r.mirror===\"ticks\"?Qe[c]=r._anchorAxis.domain[cr[1]]:(r.mirror===\"all\"||r.mirror===\"allticks\")&&(Qe[c]=[r._counterDomainMin,r._counterDomainMax][cr[1]]))}Ne&&(re=Fh.getComponentMethod(\"rangeslider\",\"autoMarginOpts\")(e,r)),typeof r.automargin==\"string\"&&(pz(Fe,r.automargin),pz(Qe,r.automargin)),rc.autoMargin(e,p6(r),Fe),rc.autoMargin(e,kz(r),Qe),rc.autoMargin(e,Sz(r),re)}),kr.syncOrAsync(Le)}};function pz(e,r){if(e){var t=Object.keys(sz).reduce(function(a,n){return r.indexOf(n)!==-1&&sz[n].forEach(function(i){a[i]=1}),a},{});Object.keys(e).forEach(function(a){t[a]||(a.length===1?e[a]=0:delete e[a])})}}function Hbe(e,r){var t=[],a,n=function(i,o){var l=i.xbnd[o];l!==null&&t.push(kr.extendFlat({},i,{x:l}))};if(r.length){for(a=0;a<r.length;a++)n(r[a],0);n(r[a-1],1)}return t}function Ube(e,r){for(var t=[],a={},n=0;n<r.length;n++){var i=r[n];a[i.text2]?a[i.text2].push(i.x):a[i.text2]=[i.x]}for(var o in a)t.push(Tz(e,kr.interp(a[o],.5),o));return t}function Gbe(e,r){var t=[],a,n,i=r.length&&r[r.length-1].x<r[0].x,o=function(s,u){var f=s.xbnd[u];f!==null&&t.push(kr.extendFlat({},s,{x:f}))};if(e.showdividers&&r.length){for(a=0;a<r.length;a++){var l=r[a];l.text2!==n&&o(l,i?1:0),n=l.text2}o(r[a-1],i?0:1)}return t}function Ybe(e,r,t){var a,n,i,o;if(e._selections[r].size())a=1/0,n=-1/0,i=1/0,o=-1/0,e._selections[r].each(function(){var s=f6(this);if(s.node().style.display!==\"none\"){var u=di.bBox(s.node().parentNode);a=Math.min(a,u.top),n=Math.max(n,u.bottom),i=Math.min(i,u.left),o=Math.max(o,u.right)}});else{var l=Ue.makeLabelFns(e,t);a=n=l.yFn({dx:0,dy:0,fontSize:0}),i=o=l.xFn({dx:0,dy:0,fontSize:0})}return{top:a,bottom:n,left:i,right:o,height:n-a,width:o-i}}Ue.getTickSigns=function(e,r){var t=e._id.charAt(0),a={x:\"top\",y:\"right\"}[t],n=e.side===a?1:-1,i=[-1,1,n,-n],o=r?(e.minor||{}).ticks:e.ticks;return o!==\"inside\"==(t===\"x\")&&(i=i.map(function(l){return-l})),e.side&&i.push({l:-1,t:-1,r:1,b:1}[e.side.charAt(0)]),i};Ue.makeTransTickFn=function(e){return e._id.charAt(0)===\"x\"?function(r){return tc(e._offset+e.l2p(r.x),0)}:function(r){return tc(0,e._offset+e.l2p(r.x))}};Ue.makeTransTickLabelFn=function(e){var r=Vbe(e),t=e.ticklabelshift||0,a=e.ticklabelstandoff||0,n=r[0],i=r[1],o=e.range[0]>e.range[1],l=e.ticklabelposition&&e.ticklabelposition.indexOf(\"inside\")!==-1,s=!l;if(t){var u=o?-1:1;t=t*u}if(a){var f=e.side,c=l&&(f===\"top\"||f===\"left\")||s&&(f===\"bottom\"||f===\"right\")?1:-1;a=a*c}return e._id.charAt(0)===\"x\"?function(v){return tc(n+e._offset+e.l2p(u6(v))+t,i+a)}:function(v){return tc(i+a,n+e._offset+e.l2p(u6(v))+t)}};function u6(e){return e.periodX!==void 0?e.periodX:e.x}function Vbe(e){var r=e.ticklabelposition||\"\",t=e.tickson||\"\",a=function(p){return r.indexOf(p)!==-1},n=a(\"top\"),i=a(\"left\"),o=a(\"right\"),l=a(\"bottom\"),s=a(\"inside\"),u=t!==\"boundaries\"&&(l||i||n||o);if(!u&&!s)return[0,0];var f=e.side,c=u?(e.tickwidth||0)/2:0,v=bm,d=e.tickfont?e.tickfont.size:12;return(l||n)&&(c+=d*Ku,v+=(e.linewidth||0)/2),(i||o)&&(c+=(e.linewidth||0)/2,v+=bm),s&&f===\"top\"&&(v-=d*(1-Ku)),(i||n)&&(c=-c),(f===\"bottom\"||f===\"right\")&&(v=-v),[u?c:0,s?v:0]}Ue.makeTickPath=function(e,r,t,a){a||(a={});var n=a.minor;if(n&&!e.minor)return\"\";var i=a.len!==void 0?a.len:n?e.minor.ticklen:e.ticklen,o=e._id.charAt(0),l=(e.linewidth||1)/2;return o===\"x\"?\"M0,\"+(r+l*t)+\"v\"+i*t:\"M\"+(r+l*t)+\",0h\"+i*t};Ue.makeLabelFns=function(e,r,t){var a=e.ticklabelposition||\"\",n=e.tickson||\"\",i=function(N){return a.indexOf(N)!==-1},o=i(\"top\"),l=i(\"left\"),s=i(\"right\"),u=i(\"bottom\"),f=n!==\"boundaries\"&&(u||l||o||s),c=i(\"inside\"),v=a===\"inside\"&&e.ticks===\"inside\"||!c&&e.ticks===\"outside\"&&n!==\"boundaries\",d=0,p=0,y=v?e.ticklen:0;if(c?y*=-1:f&&(y=0),v&&(d+=y,t)){var m=kr.deg2rad(t);d=y*Math.cos(m)+1,p=y*Math.sin(m)}e.showticklabels&&(v||e.showline)&&(d+=.2*e.tickfont.size),d+=(e.linewidth||1)/2*(c?-1:1);var b={labelStandoff:d,labelShift:p},T,w,x,_,k=0,A=e.side,q=e._id.charAt(0),C=e.tickangle,E;if(q===\"x\")E=!c&&A===\"bottom\"||c&&A===\"top\",_=E?1:-1,c&&(_*=-1),T=p*_,w=r+d*_,x=E?1:-.2,Math.abs(C)===90&&(c?x+=Rh:C===-90&&A===\"bottom\"?x=Ku:C===90&&A===\"top\"?x=Rh:x=.5,k=Rh/2*(C/90)),b.xFn=function(N){return N.dx+T+k*N.fontSize},b.yFn=function(N){return N.dy+w+N.fontSize*x},b.anchorFn=function(N,I){if(f){if(l)return\"end\";if(s)return\"start\"}return!ha(I)||I===0||I===180?\"middle\":I*_<0!==c?\"end\":\"start\"},b.heightFn=function(N,I,O){return I<-60||I>60?-.5*O:e.side===\"top\"!==c?-O:0};else if(q===\"y\"){if(E=!c&&A===\"left\"||c&&A===\"right\",_=E?1:-1,c&&(_*=-1),T=d,w=p*_,x=0,!c&&Math.abs(C)===90&&(C===-90&&A===\"left\"||C===90&&A===\"right\"?x=Ku:x=.5),c){var P=ha(C)?+C:0;if(P!==0){var R=kr.deg2rad(P);k=Math.abs(Math.sin(R))*Ku*_,x=0}}b.xFn=function(N){return N.dx+r-(T+N.fontSize*x)*_+k*N.fontSize},b.yFn=function(N){return N.dy+w+N.fontSize*Rh},b.anchorFn=function(N,I){return ha(I)&&Math.abs(I)===90?\"middle\":E?\"end\":\"start\"},b.heightFn=function(N,I,O){return e.side===\"right\"&&(I*=-1),I<-30?-O:I<30?-.5*O:0}}return b};function wm(e){return[e.text,e.x,e.axInfo,e.font,e.fontSize,e.fontColor].join(\"_\")}Ue.drawTicks=function(e,r,t){t=t||{};var a=r._id+\"tick\",n=[].concat(r.minor&&r.minor.ticks?t.vals.filter(function(o){return o.minor&&!o.noTick}):[]).concat(r.ticks?t.vals.filter(function(o){return!o.minor&&!o.noTick}):[]),i=t.layer.selectAll(\"path.\"+a).data(n,wm);i.exit().remove(),i.enter().append(\"path\").classed(a,1).classed(\"ticks\",1).classed(\"crisp\",t.crisp!==!1).each(function(o){return zh.stroke(Ii.select(this),o.minor?r.minor.tickcolor:r.tickcolor)}).style(\"stroke-width\",function(o){return di.crispRound(e,o.minor?r.minor.tickwidth:r.tickwidth,1)+\"px\"}).attr(\"d\",t.path).style(\"display\",null),Tm(r,[yz]),i.attr(\"transform\",t.transFn)};Ue.drawGrid=function(e,r,t){if(t=t||{},r.tickmode!==\"sync\"){var a=r._id+\"grid\",n=r.minor&&r.minor.showgrid,i=n?t.vals.filter(function(b){return b.minor}):[],o=r.showgrid?t.vals.filter(function(b){return!b.minor}):[],l=t.counterAxis;if(l&&Ue.shouldShowZeroLine(e,r,l))for(var s=r.tickmode===\"array\",u=0;u<o.length;u++){var f=o[u].x;if(s?!f:Math.abs(f)<r.dtick/100)if(o=o.slice(0,u).concat(o.slice(u+1)),s)u--;else break}r._gw=di.crispRound(e,r.gridwidth,1);for(var c=n?di.crispRound(e,r.minor.gridwidth,1):0,v=t.layer,d=t.minorLayer,p=1;p>=0;p--){var y=p?v:d;if(y){var m=y.selectAll(\"path.\"+a).data(p?o:i,wm);m.exit().remove(),m.enter().append(\"path\").classed(a,1).classed(\"crisp\",t.crisp!==!1),m.attr(\"transform\",t.transFn).attr(\"d\",t.path).each(function(b){return zh.stroke(Ii.select(this),b.minor?r.minor.gridcolor:r.gridcolor||\"#ddd\")}).style(\"stroke-dasharray\",function(b){return di.dashStyle(b.minor?r.minor.griddash:r.griddash,b.minor?r.minor.gridwidth:r.gridwidth)}).style(\"stroke-width\",function(b){return(b.minor?c:r._gw)+\"px\"}).style(\"display\",null),typeof t.path==\"function\"&&m.attr(\"d\",t.path)}}Tm(r,[l6,s6])}};Ue.drawZeroLine=function(e,r,t){t=t||t;var a=r._id+\"zl\",n=Ue.shouldShowZeroLine(e,r,t.counterAxis),i=t.layer.selectAll(\"path.\"+a).data(n?[{x:0,id:r._id}]:[]);i.exit().remove(),i.enter().append(\"path\").classed(a,1).classed(\"zl\",1).classed(\"crisp\",t.crisp!==!1).each(function(){t.layer.selectAll(\"path\").sort(function(o,l){return xbe(o.id,l.id)})}),i.attr(\"transform\",t.transFn).attr(\"d\",t.path).call(zh.stroke,r.zerolinecolor||zh.defaultLine).style(\"stroke-width\",di.crispRound(e,r.zerolinewidth,r._gw||1)+\"px\").style(\"display\",null),Tm(r,[o6])};Ue.drawLabels=function(e,r,t){t=t||{};var a=e._fullLayout,n=r._id,i=r.zerolinelayer===\"above traces\",o=t.cls||n+\"tick\",l=t.vals.filter(function(V){return V.text}),s=t.labelFns,u=t.secondary?0:r.tickangle,f=(r._prevTickAngles||{})[o],c=t.layer.selectAll(\"g.\"+o).data(r.showticklabels?l:[],wm),v=[];c.enter().append(\"g\").classed(o,1).append(\"text\").attr(\"text-anchor\",\"middle\").each(function(V){var W=Ii.select(this),j=e._promises.length;W.call($u.positionText,s.xFn(V),s.yFn(V)).call(di.font,{family:V.font,size:V.fontSize,color:V.fontColor,weight:V.fontWeight,style:V.fontStyle,variant:V.fontVariant,textcase:V.fontTextcase,lineposition:V.fontLineposition,shadow:V.fontShadow}).text(V.text).call($u.convertToTspans,e),e._promises[j]?v.push(e._promises.pop().then(function(){d(W,u)})):d(W,u)}),Tm(r,[lz]),c.exit().remove(),t.repositionOnUpdate&&c.each(function(V){Ii.select(this).select(\"text\").call($u.positionText,s.xFn(V),s.yFn(V))});function d(V,W){V.each(function(j){var J=Ii.select(this),te=J.select(\".text-math-group\"),ae=s.anchorFn(j,W),se=t.transFn.call(J.node(),j)+(ha(W)&&+W!=0?\" rotate(\"+W+\",\"+s.xFn(j)+\",\"+(s.yFn(j)-j.fontSize/2)+\")\":\"\"),$=$u.lineCount(J),fe=Ih*j.fontSize,ie=s.heightFn(j,ha(W)?+W:0,($-1)*fe);if(ie&&(se+=tc(0,ie)),te.empty()){var ue=J.select(\"text\");ue.attr({transform:se,\"text-anchor\":ae}),ue.style(\"display\",null),r._adjustTickLabelsOverflow&&r._adjustTickLabelsOverflow()}else{var ce=di.bBox(te.node()).width,oe=ce*{end:-.5,start:.5}[ae];te.attr(\"transform\",se+tc(oe,0))}})}r._adjustTickLabelsOverflow=function(){var V=r.ticklabeloverflow;if(!(!V||V===\"allow\")){var W=V.indexOf(\"hide\")!==-1,j=r._id.charAt(0)===\"x\",J=0,te=j?e._fullLayout.width:e._fullLayout.height;if(V.indexOf(\"domain\")!==-1){var ae=kr.simpleMap(r.range,r.r2l);J=r.l2p(ae[0])+r._offset,te=r.l2p(ae[1])+r._offset}var se=Math.min(J,te),$=Math.max(J,te),fe=r.side,ie=1/0,ue=-1/0;c.each(function(Re){var ye=Ii.select(this),Ce=ye.select(\".text-math-group\");if(Ce.empty()){var Me=di.bBox(ye.node()),Le=0;j?(Me.right>$||Me.left<se)&&(Le=1):(Me.bottom>$||Me.top+(r.tickangle?0:Re.fontSize/4)<se)&&(Le=1);var De=ye.select(\"text\");Le?W&&De.style(\"display\",\"none\"):De.node().style.display!==\"none\"&&(De.style(\"display\",null),fe===\"bottom\"||fe===\"right\"?ie=Math.min(ie,j?Me.top:Me.left):ie=-1/0,fe===\"top\"||fe===\"left\"?ue=Math.max(ue,j?Me.bottom:Me.right):ue=1/0)}});for(var ce in a._plots){var oe=a._plots[ce];if(!(r._id!==oe.xaxis._id&&r._id!==oe.yaxis._id)){var be=j?oe.yaxis:oe.xaxis;be&&(be[\"_visibleLabelMin_\"+r._id]=ie,be[\"_visibleLabelMax_\"+r._id]=ue)}}}},r._hideCounterAxisInsideTickLabels=function(V){var W=r._id.charAt(0)===\"x\",j=[];for(var J in a._plots){var te=a._plots[J];r._id!==te.xaxis._id&&r._id!==te.yaxis._id||j.push(W?te.yaxis:te.xaxis)}j.forEach(function(ae,se){ae&&Oh(ae)&&(V||[o6,s6,l6,yz,lz]).forEach(function($){var fe=$.K===\"tick\"&&$.L===\"text\"&&r.ticklabelmode===\"period\",ie=a._plots[r._mainSubplot],ue;if($.K===o6.K){var ce=i?ie.zerolinelayerAbove:ie.zerolinelayer;ue=ce.selectAll(\".\"+r._id+\"zl\")}else $.K===s6.K?ue=ie.minorGridlayer.selectAll(\".\"+r._id):$.K===l6.K?ue=ie.gridlayer.selectAll(\".\"+r._id):ue=ie[r._id.charAt(0)+\"axislayer\"];ue.each(function(){var oe=Ii.select(this);$.L&&(oe=oe.selectAll($.L)),oe.each(function(be){var Re=r.l2p(fe?u6(be):be.x)+r._offset,ye=Ii.select(this);Re<r[\"_visibleLabelMax_\"+ae._id]&&Re>r[\"_visibleLabelMin_\"+ae._id]?ye.style(\"display\",\"none\"):$.K===\"tick\"&&!se&&ye.node().style.display!==\"none\"&&ye.style(\"display\",null)})})})})},d(c,f+1?f:u);function p(){return v.length&&Promise.all(v)}var y=null;function m(){if(d(c,u),l.length&&r.autotickangles&&(r.type!==\"log\"||String(r.dtick).charAt(0)!==\"D\")){y=r.autotickangles[0];var V=0,W=[],j,J=1;c.each(function(Fe){V=Math.max(V,Fe.fontSize);var Qe=r.l2p(Fe.x),re=f6(this),xe=di.bBox(re.node());J=Math.max(J,$u.lineCount(re)),W.push({top:0,bottom:10,height:10,left:Qe-xe.width/2,right:Qe+xe.width/2+2,width:xe.width+2})});var te=(r.tickson===\"boundaries\"||r.showdividers)&&!t.secondary,ae=l.length,se=Math.abs((l[ae-1].x-l[0].x)*r._m)/(ae-1),$=te?se/2:se,fe=te?r.ticklen:V*1.25*J,ie=Math.sqrt(Math.pow($,2)+Math.pow(fe,2)),ue=$/ie,ce=r.autotickangles.map(function(Fe){return Fe*Math.PI/180}),oe=ce.find(function(Fe){return Math.abs(Math.cos(Fe))<=ue});oe===void 0&&(oe=ce.reduce(function(Fe,Qe){return Math.abs(Math.cos(Fe))<Math.abs(Math.cos(Qe))?Fe:Qe},ce[0]));var be=oe*(180/Math.PI);if(te){var Re=2;for(r.ticks&&(Re+=r.tickwidth/2),j=0;j<W.length;j++){var ye=l[j].xbnd,Ce=W[j];if(ye[0]!==null&&Ce.left-r.l2p(ye[0])<Re||ye[1]!==null&&r.l2p(ye[1])-Ce.right<Re){y=be;break}}}else{var Me=r.ticklabelposition||\"\",Le=r.tickson||\"\",De=function(Fe){return Me.indexOf(Fe)!==-1},Ne=De(\"top\"),qe=De(\"left\"),Xe=De(\"right\"),$e=De(\"bottom\"),We=Le!==\"boundaries\"&&($e||qe||Ne||Xe),Se=We?(r.tickwidth||0)+2*bm:0;for(j=0;j<W.length-1;j++)if(kr.bBoxIntersect(W[j],W[j+1],Se)){y=be;break}}y&&d(c,y)}}r._selections&&(r._selections[o]=c);var b=[p];r.automargin&&a._redrawFromAutoMarginCount&&f===90?(y=f,b.push(function(){d(c,f)})):b.push(m),r._tickAngles&&b.push(function(){r._tickAngles[o]=y===null?ha(u)?u:0:y});var T=function(){var V=0,W=0;return c.each(function(j,J){var te=f6(this),ae=te.select(\".text-math-group\");if(ae.empty()){var se;r._vals[J]&&(se=r._vals[J].bb||di.bBox(te.node()),r._vals[J].bb=se),V=Math.max(V,se.width),W=Math.max(W,se.height)}}),{labelsMaxW:V,labelsMaxH:W}},w=r._anchorAxis;if(w&&(w.autorange||w.insiderange)&&Oh(r)&&!_be(a,r._id)&&(a._insideTickLabelsUpdaterange||(a._insideTickLabelsUpdaterange={}),w.autorange&&(a._insideTickLabelsUpdaterange[w._name+\".autorange\"]=w.autorange,b.push(T)),w.insiderange)){var x=T(),_=r._id.charAt(0)===\"y\"?x.labelsMaxW:x.labelsMaxH;_+=2*bm,r.ticklabelposition===\"inside\"&&(_+=r.ticklen||0);var k=r.side===\"right\"||r.side===\"top\"?1:-1,A=k===1?1:0,q=k===1?0:1,C=[];C[q]=w.range[q];var E=w.range,P=w.r2p(E[A]),R=w.r2p(E[q]),N=a._insideTickLabelsUpdaterange[w._name+\".range\"];if(N){var I=w.r2p(N[A]),O=w.r2p(N[q]),U=k*(r._id.charAt(0)===\"y\"?1:-1);U*P<U*I&&(P=I,C[A]=E[A]=N[A]),U*R>U*O&&(R=O,C[q]=E[q]=N[q])}var Y=Math.abs(R-P);Y-_>0?(Y-=_,_*=1+_/Y):_=0,r._id.charAt(0)!==\"y\"&&(_=-_),C[A]=w.p2r(w.r2p(E[A])+k*_),w.autorange===\"min\"||w.autorange===\"max reversed\"?(C[0]=null,w._rangeInitial0=void 0,w._rangeInitial1=void 0):(w.autorange===\"max\"||w.autorange===\"min reversed\")&&(C[1]=null,w._rangeInitial0=void 0,w._rangeInitial1=void 0),a._insideTickLabelsUpdaterange[w._name+\".range\"]=C}var G=kr.syncOrAsync(b);return G&&G.then&&e._promises.push(G),G};function jbe(e,r,t){var a=r._id+\"divider\",n=t.vals,i=t.layer.selectAll(\"path.\"+a).data(n,wm);i.exit().remove(),i.enter().insert(\"path\",\":first-child\").classed(a,1).classed(\"crisp\",1).call(zh.stroke,r.dividercolor).style(\"stroke-width\",di.crispRound(e,r.dividerwidth,1)+\"px\"),i.attr(\"transform\",t.transFn).attr(\"d\",t.path)}Ue.getPxPosition=function(e,r){var t=e._fullLayout._size,a=r._id.charAt(0),n=r.side,i;if(r.anchor!==\"free\"?i=r._anchorAxis:a===\"x\"?i={_offset:t.t+(1-(r.position||0))*t.h,_length:0}:a===\"y\"&&(i={_offset:t.l+(r.position||0)*t.w+r._shift,_length:0}),n===\"top\"||n===\"left\")return i._offset;if(n===\"bottom\"||n===\"right\")return i._offset+i._length};function mz(e){var r=e.title.font.size,t=(e.title.text.match($u.BR_TAG_ALL)||[]).length;return e.title.hasOwnProperty(\"standoff\")?r*(Ku+t*Ih):t?r*(t+1)*Ih:r}function Wbe(e,r){var t=e._fullLayout,a=r._id,n=a.charAt(0),i=r.title.font.size,o,l=(r.title.text.match($u.BR_TAG_ALL)||[]).length;if(r.title.hasOwnProperty(\"standoff\"))r.side===\"bottom\"||r.side===\"right\"?o=r._depth+r.title.standoff+i*Ku:(r.side===\"top\"||r.side===\"left\")&&(o=r._depth+r.title.standoff+i*(Rh+l*Ih));else{var s=Oh(r);if(r.type===\"multicategory\")o=r._depth;else{var u=1.5*i;s&&(u=.5*i,r.ticks===\"outside\"&&(u+=r.ticklen)),o=10+u+(r.linewidth?r.linewidth-1:0)}s||(n===\"x\"?o+=r.side===\"top\"?i*(r.showticklabels?1:0):i*(r.showticklabels?1.5:.5):o+=r.side===\"right\"?i*(r.showticklabels?1:.5):i*(r.showticklabels?.5:0))}var f=Ue.getPxPosition(e,r),c,v,d;n===\"x\"?(v=r._offset+r._length/2,d=r.side===\"top\"?f-o:f+o):(d=r._offset+r._length/2,v=r.side===\"right\"?f+o:f-o,c={rotate:\"-90\",offset:0});var p;if(r.type!==\"multicategory\"){var y=r._selections[r._id+\"tick\"];if(p={selection:y,side:r.side},y&&y.node()&&y.node().parentNode){var m=di.getTranslate(y.node().parentNode);p.offsetLeft=m.x,p.offsetTop=m.y}r.title.hasOwnProperty(\"standoff\")&&(p.pad=0)}return r._titleStandoff=o,cbe.draw(e,a+\"title\",{propContainer:r,propName:r._name+\".title.text\",placeholder:t._dfltTitle[n],avoid:p,transform:c,attributes:{x:v,y:d,\"text-anchor\":\"middle\"}})}Ue.shouldShowZeroLine=function(e,r,t){var a=kr.simpleMap(r.range,r.r2l);return a[0]*a[1]<=0&&r.zeroline&&(r.type===\"linear\"||r.type===\"-\")&&!(r.rangebreaks&&r.maskBreaks(0)===xm)&&(Mz(r,0)||!Xbe(e,r,t,a)||Zbe(e,r))};Ue.clipEnds=function(e,r){return r.filter(function(t){return Mz(e,t.x)})};function Mz(e,r){var t=e.l2p(r);return t>1&&t<e._length-1}function Xbe(e,r,t,a){var n=t._mainAxis;if(!n)return;var i=e._fullLayout,o=r._id.charAt(0),l=Ue.counterLetter(r._id),s=r._offset+(Math.abs(a[0])<Math.abs(a[1])==(o===\"x\")?0:r._length);function u(p){if(!p.showline||!p.linewidth)return!1;var y=Math.max((p.linewidth+r.zerolinewidth)/2,1);function m(w){return typeof w==\"number\"&&Math.abs(w-s)<y}if(m(p._mainLinePosition)||m(p._mainMirrorPosition))return!0;var b=p._linepositions||{};for(var T in b)if(m(b[T][0])||m(b[T][1]))return!0}var f=i._plots[t._mainSubplot];if(!(f.mainplotinfo||f).overlays.length)return u(t,s);for(var c=Ue.list(e,l),v=0;v<c.length;v++){var d=c[v];if(d._mainAxis===n&&u(d,s))return!0}}function Zbe(e,r){for(var t=e._fullData,a=r._mainSubplot,n=r._id.charAt(0),i=0;i<t.length;i++){var o=t[i];if(o.visible===!0&&o.xaxis+o.yaxis===a&&(Fh.traceIs(o,\"bar-like\")&&o.orientation==={x:\"h\",y:\"v\"}[n]||o.fill&&o.fill.charAt(o.fill.length-1)===n))return!0}return!1}function f6(e){var r=Ii.select(e),t=r.select(\".text-math-group\");return t.empty()?r.select(\"text\"):t}Ue.allowAutoMargin=function(e){for(var r=Ue.list(e,\"\",!0),t=0;t<r.length;t++){var a=r[t];a.automargin&&(rc.allowAutoMargin(e,p6(a)),a.mirror&&rc.allowAutoMargin(e,kz(a))),Fh.getComponentMethod(\"rangeslider\",\"isVisible\")(a)&&rc.allowAutoMargin(e,Sz(a))}};function p6(e){return e._id+\".automargin\"}function kz(e){return p6(e)+\".mirror\"}function Sz(e){return e._id+\".rangeslider\"}Ue.swap=function(e,r){for(var t=$be(e,r),a=0;a<t.length;a++)Jbe(e,t[a].x,t[a].y)};function $be(e,r){var t=[],a,n;for(a=0;a<r.length;a++){var i=[],o=e._fullData[r[a]].xaxis,l=e._fullData[r[a]].yaxis;if(!(!o||!l)){for(n=0;n<t.length;n++)(t[n].x.indexOf(o)!==-1||t[n].y.indexOf(l)!==-1)&&i.push(n);if(!i.length){t.push({x:[o],y:[l]});continue}var s=t[i[0]],u;if(i.length>1)for(n=1;n<i.length;n++)u=t[i[n]],hm(s.x,u.x),hm(s.y,u.y);hm(s.x,[o]),hm(s.y,[l])}}return t}function hm(e,r){for(var t=0;t<r.length;t++)e.indexOf(r[t])===-1&&e.push(r[t])}function Jbe(e,r,t){var a=[],n=[],i=e.layout,o,l;for(o=0;o<r.length;o++)a.push(Ue.getFromId(e,r[o]));for(o=0;o<t.length;o++)n.push(Ue.getFromId(e,t[o]));var s=Object.keys(vbe),u=[\"anchor\",\"domain\",\"overlaying\",\"position\",\"side\",\"tickangle\",\"editType\"],f=[\"linear\",\"log\"];for(o=0;o<s.length;o++){var c=s[o],v=a[0][c],d=n[0][c],p=!0,y=!1,m=!1;if(!(c.charAt(0)===\"_\"||typeof v==\"function\"||u.indexOf(c)!==-1)){for(l=1;l<a.length&&p;l++){var b=a[l][c];c===\"type\"&&f.indexOf(v)!==-1&&f.indexOf(b)!==-1&&v!==b?y=!0:b!==v&&(p=!1)}for(l=1;l<n.length&&p;l++){var T=n[l][c];c===\"type\"&&f.indexOf(d)!==-1&&f.indexOf(T)!==-1&&d!==T?m=!0:n[l][c]!==d&&(p=!1)}p&&(y&&(i[a[0]._name].type=\"linear\"),m&&(i[n[0]._name].type=\"linear\"),Kbe(i,c,a,n,e._fullLayout._dfltTitle))}}for(o=0;o<e._fullLayout.annotations.length;o++){var w=e._fullLayout.annotations[o];r.indexOf(w.xref)!==-1&&t.indexOf(w.yref)!==-1&&kr.swapAttrs(i.annotations[o],[\"?\"])}}function Kbe(e,r,t,a,n){var i=kr.nestedProperty,o=i(e[t[0]._name],r).get(),l=i(e[a[0]._name],r).get(),s;for(r===\"title\"&&(o&&o.text===n.x&&(o.text=n.y),l&&l.text===n.y&&(l.text=n.x)),s=0;s<t.length;s++)i(e,t[s]._name+\".\"+r).set(l);for(s=0;s<a.length;s++)i(e,a[s]._name+\".\"+r).set(o)}function m6(e){return e._id===\"angularaxis\"}function n6(e,r){for(var t=r._rangebreaks.length,a=0;a<t;a++){var n=r._rangebreaks[a];if(e>=n.min&&e<n.max)return n.max}return e}function Oh(e){return(e.ticklabelposition||\"\").indexOf(\"inside\")!==-1}function Tm(e,r){Oh(e._anchorAxis||{})&&e._hideCounterAxisInsideTickLabels&&e._hideCounterAxisInsideTickLabels(r)}function c6(e,r,t,a){var n=e.anchor!==\"free\"&&(e.overlaying===void 0||e.overlaying===!1)?e._id:e.overlaying,i;a?i=e.side===\"right\"?r:-r:i=r,n in t||(t[n]={}),e.side in t[n]||(t[n][e.side]=0),t[n][e.side]+=i}function Qbe(e,r){return e.autoshift?r[e.overlaying][e.side]:e.shift||0}function e5e(e,r){return/%f/.test(r)?e>=ybe:/%L/.test(r)?e>=mbe:/%[SX]/.test(r)?e>=gm:/%M/.test(r)?e>=Nh:/%[HI]/.test(r)?e>=il:/%p/.test(r)?e>=Ps:/%[Aadejuwx]/.test(r)?e>=Tn:/%[UVW]/.test(r)?e>=pi:/%[Bbm]/.test(r)?e>=ym:/%[q]/.test(r)?e>=mm:/%[Yy]/.test(r)?e>=pm:!0}});var Cz=z((qYe,Lz)=>{\"use strict\";Lz.exports=function(r,t,a){var n,i;if(a){var o=t===\"reversed\"||t===\"min reversed\"||t===\"max reversed\";n=a[o?1:0],i=a[o?0:1]}var l=r(\"autorangeoptions.minallowed\",i===null?n:void 0),s=r(\"autorangeoptions.maxallowed\",n===null?i:void 0);l===void 0&&r(\"autorangeoptions.clipmin\"),s===void 0&&r(\"autorangeoptions.clipmax\"),r(\"autorangeoptions.include\")}});var y6=z((LYe,Dz)=>{\"use strict\";var r5e=Cz();Dz.exports=function(r,t,a,n){var i=t._template||{},o=t.type||i.type||\"-\";a(\"minallowed\"),a(\"maxallowed\");var l=a(\"range\");if(!l){var s;!n.noInsiderange&&o!==\"log\"&&(s=a(\"insiderange\"),s&&(s[0]===null||s[1]===null)&&(t.insiderange=!1,s=void 0),s&&(l=a(\"range\",s)))}var u=t.getAutorangeDflt(l,n),f=a(\"autorange\",u),c;l&&(l[0]===null&&l[1]===null||(l[0]===null||l[1]===null)&&(f===\"reversed\"||f===!0)||l[0]!==null&&(f===\"min\"||f===\"max reversed\")||l[1]!==null&&(f===\"max\"||f===\"min reversed\"))&&(l=void 0,delete t.range,t.autorange=!0,c=!0),c||(u=t.getAutorangeDflt(l,n),f=a(\"autorange\",u)),f&&(r5e(a,f,l),(o===\"linear\"||o===\"-\")&&a(\"rangemode\")),t.cleanRange()}});var Pz=z((CYe,Ez)=>{var t5e={left:0,top:0};Ez.exports=a5e;function a5e(e,r,t){r=r||e.currentTarget||e.srcElement,Array.isArray(t)||(t=[0,0]);var a=e.clientX||0,n=e.clientY||0,i=n5e(r);return t[0]=a-i.left,t[1]=n-i.top,t}function n5e(e){return e===window||e===document||e===document.body?t5e:e.getBoundingClientRect()}});var g6=z((DYe,Rz)=>{\"use strict\";var i5e=Q_();function o5e(){var e=!1;try{var r=Object.defineProperty({},\"passive\",{get:function(){e=!0}});window.addEventListener(\"test\",null,r),window.removeEventListener(\"test\",null,r)}catch(t){e=!1}return e}Rz.exports=i5e&&o5e()});var zz=z((EYe,Fz)=>{\"use strict\";Fz.exports=function(r,t,a,n,i){var o=(r-a)/(n-a),l=o+t/(n-a),s=(o+l)/2;return i===\"left\"||i===\"bottom\"?o:i===\"center\"||i===\"middle\"?s:i===\"right\"||i===\"top\"?l:o<2/3-s?o:l>4/3-s?l:s}});var Bz=z((PYe,Iz)=>{\"use strict\";var Nz=ke(),l5e=[[\"sw-resize\",\"s-resize\",\"se-resize\"],[\"w-resize\",\"move\",\"e-resize\"],[\"nw-resize\",\"n-resize\",\"ne-resize\"]];Iz.exports=function(r,t,a,n){return a===\"left\"?r=0:a===\"center\"?r=1:a===\"right\"?r=2:r=Nz.constrain(Math.floor(r*3),0,2),n===\"bottom\"?t=0:n===\"middle\"?t=1:n===\"top\"?t=2:t=Nz.constrain(Math.floor(t*3),0,2),l5e[t][r]}});var Hz=z((RYe,Oz)=>{\"use strict\";var s5e=Th(),u5e=wp(),f5e=ph().getGraphDiv,c5e=Jv(),b6=Oz.exports={};b6.wrapped=function(e,r,t){var i;e=f5e(e),e._fullLayout&&u5e.clear(e._fullLayout._uid+c5e.HOVERID);let a=e._hoverdata;b6.raw(e,r,t)&&e._hoverAnywhereActive&&(e._hoverAnywhereActive=!1,(i=e._fullLayout)!=null&&i.hoveranywhere&&(r!=null&&r.target)&&!a&&e.emit(\"plotly_unhover\",{event:r,points:[]}))};b6.raw=function(r,t){var a=r._fullLayout,n=r._hoverdata;return t||(t={}),t.target&&!r._dragged&&s5e.triggerHandler(r,\"plotly_beforehover\",t)===!1?!1:(a._hoverlayer.selectAll(\"g\").remove(),a._hoverlayer.selectAll(\"line\").remove(),a._hoverlayer.selectAll(\"circle\").remove(),r._hoverdata=void 0,t.target&&n&&r.emit(\"plotly_unhover\",{event:t,points:n}),!0)}});var Bi=z((FYe,Vz)=>{\"use strict\";var v5e=Pz(),x6=r4(),h5e=g6(),d5e=ke().removeElement,p5e=qa(),Qu=Vz.exports={};Qu.align=zz();Qu.getCursor=Bz();var Gz=Hz();Qu.unhover=Gz.wrapped;Qu.unhoverRaw=Gz.raw;Qu.init=function(r){var t=r.gd,a=1,n=t._context.doubleClickDelay,i=r.element,o,l,s,u,f,c,v,d;t._mouseDownTime||(t._mouseDownTime=0),i.style.pointerEvents=\"all\",i.onmousedown=m,h5e?(i._ontouchstart&&i.removeEventListener(\"touchstart\",i._ontouchstart),i._ontouchstart=m,i.addEventListener(\"touchstart\",m,{passive:!1})):i.ontouchstart=m;function p(w,x,_){return Math.abs(w)<_&&(w=0),Math.abs(x)<_&&(x=0),[w,x]}var y=r.clampFn||p;function m(w){t._dragged=!1,t._dragging=!0;var x=Uz(w);o=x[0],l=x[1],v=w.target,c=w,d=w.buttons===2||w.ctrlKey,typeof w.clientX==\"undefined\"&&typeof w.clientY==\"undefined\"&&(w.clientX=o,w.clientY=l),s=new Date().getTime(),s-t._mouseDownTime<n?a+=1:(a=1,t._mouseDownTime=s),r.prepFn&&r.prepFn(w,o,l),x6&&!d?(f=Yz(),f.style.cursor=window.getComputedStyle(i).cursor):x6||(f=document,u=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(i).cursor),document.addEventListener(\"mouseup\",T),document.addEventListener(\"touchend\",T),r.dragmode!==!1&&(w.preventDefault(),document.addEventListener(\"mousemove\",b),document.addEventListener(\"touchmove\",b,{passive:!1}))}function b(w){w.preventDefault();var x=Uz(w),_=r.minDrag||p5e.MINDRAG,k=y(x[0]-o,x[1]-l,_),A=k[0],q=k[1];(A||q)&&(t._dragged=!0,Qu.unhover(t,w)),t._dragged&&r.moveFn&&!d&&(t._dragdata={element:i,dx:A,dy:q},r.moveFn(A,q))}function T(w){if(delete t._dragdata,r.dragmode!==!1&&(w.preventDefault(),document.removeEventListener(\"mousemove\",b),document.removeEventListener(\"touchmove\",b)),document.removeEventListener(\"mouseup\",T),document.removeEventListener(\"touchend\",T),x6?d5e(f):u&&(f.documentElement.style.cursor=u,u=null),!t._dragging){t._dragged=!1;return}if(t._dragging=!1,new Date().getTime()-t._mouseDownTime>n&&(a=Math.max(a-1,1)),t._dragged)r.doneFn&&r.doneFn();else{var x;c.target===v?x=c:(x={target:v,srcElement:v,toElement:v},Object.keys(c).concat(Object.keys(c.__proto__)).forEach(_=>{var k=c[_];!x[_]&&typeof k!=\"function\"&&(x[_]=k)})),r.clickFn&&r.clickFn(a,x),d||v.dispatchEvent(new MouseEvent(\"click\",w))}t._dragging=!1,t._dragged=!1}};function Yz(){var e=document.createElement(\"div\");e.className=\"dragcover\";var r=e.style;return r.position=\"fixed\",r.left=0,r.right=0,r.top=0,r.bottom=0,r.zIndex=999999999,r.background=\"none\",document.body.appendChild(e),e}Qu.coverSlip=Yz;function Uz(e){return v5e(e.changedTouches?e.changedTouches[0]:e,document.body)}});var Rs=z((zYe,jz)=>{\"use strict\";jz.exports=function(r,t){(r.attr(\"class\")||\"\").split(\" \").forEach(function(a){a.indexOf(\"cursor-\")===0&&r.classed(a,!1)}),t&&r.classed(\"cursor-\"+t,!0)}});var Zz=z((NYe,Xz)=>{\"use strict\";var _6=Rs(),Hh=\"data-savedcursor\",Wz=\"!!\";Xz.exports=function(r,t){var a=r.attr(Hh);if(t){if(!a){for(var n=(r.attr(\"class\")||\"\").split(\" \"),i=0;i<n.length;i++){var o=n[i];o.indexOf(\"cursor-\")===0&&r.attr(Hh,o.slice(7)).classed(o,!1)}r.attr(Hh)||r.attr(Hh,Wz)}_6(r,t)}else a&&(r.attr(Hh,null),a===Wz?_6(r):_6(r,a))}});var T6=z((IYe,$z)=>{\"use strict\";var w6=ka(),m5e=Ei();$z.exports={_isSubplotObj:!0,visible:{valType:\"boolean\",dflt:!0,editType:\"legend\"},bgcolor:{valType:\"color\",editType:\"legend\"},bordercolor:{valType:\"color\",dflt:m5e.defaultLine,editType:\"legend\"},maxheight:{valType:\"number\",min:0,editType:\"legend\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"legend\"},font:w6({editType:\"legend\"}),grouptitlefont:w6({editType:\"legend\"}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"v\",editType:\"legend\"},traceorder:{valType:\"flaglist\",flags:[\"reversed\",\"grouped\"],extras:[\"normal\"],editType:\"legend\"},tracegroupgap:{valType:\"number\",min:0,dflt:10,editType:\"legend\"},entrywidth:{valType:\"number\",min:0,editType:\"legend\"},entrywidthmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"pixels\",editType:\"legend\"},indentation:{valType:\"number\",min:-15,dflt:0,editType:\"legend\"},itemsizing:{valType:\"enumerated\",values:[\"trace\",\"constant\"],dflt:\"trace\",editType:\"legend\"},itemwidth:{valType:\"number\",min:30,dflt:30,editType:\"legend\"},itemclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggle\",editType:\"legend\"},itemdoubleclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggleothers\",editType:\"legend\"},groupclick:{valType:\"enumerated\",values:[\"toggleitem\",\"togglegroup\"],dflt:\"togglegroup\",editType:\"legend\"},groupdoubleclick:{valType:\"enumerated\",values:[\"toggleitem\",\"togglegroup\"],editType:\"legend\"},titleclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],editType:\"legend\"},titledoubleclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],editType:\"legend\"},x:{valType:\"number\",editType:\"legend\"},xref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"legend\"},y:{valType:\"number\",editType:\"legend\"},yref:{valType:\"enumerated\",dflt:\"paper\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"legend\"},uirevision:{valType:\"any\",editType:\"none\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"legend\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"legend\"},font:w6({editType:\"legend\"}),side:{valType:\"enumerated\",values:[\"top\",\"left\",\"top left\",\"top center\",\"top right\"],editType:\"legend\"},editType:\"legend\"},editType:\"legend\"}});var Gh=z(Uh=>{\"use strict\";Uh.isGrouped=function(r){return(r.traceorder||\"\").indexOf(\"grouped\")!==-1};Uh.isVertical=function(r){return r.orientation!==\"h\"};Uh.isReversed=function(r){return(r.traceorder||\"\").indexOf(\"reversed\")!==-1};Uh.getId=function(r){return r._id||\"legend\"}});var M6=z((OYe,Jz)=>{\"use strict\";var Am=Tr(),mi=ke(),y5e=St(),g5e=zn(),b5e=T6(),x5e=P0(),A6=Gh();function _5e(e,r,t,a,n){var i=r[e]||{},o=y5e.newContainer(t,e);function l(W,j){return mi.coerce(i,o,b5e,W,j)}var s=mi.coerceFont(l,\"font\",t.font);l(\"bgcolor\",t.paper_bgcolor),l(\"bordercolor\");var u=l(\"visible\");if(!u)return;var f,c=function(W,j){var J=f._input,te=f;return mi.coerce(J,te,g5e,W,j)},v=t.font||{},d=mi.coerceFont(l,\"grouptitlefont\",v,{overrideDflt:{size:Math.round(v.size*1.1)}}),p=0,y=!1,m=\"normal\",b=(t.shapes||[]).filter(function(W){return W.showlegend});function T(W){return Am.traceIs(W,\"pie-like\")&&W._length!=null&&(Array.isArray(W.legend)||Array.isArray(W.showlegend))}a.filter(T).forEach(function(W){W.visible&&p++;for(var j=0;j<W._length;j++){var J=(Array.isArray(W.legend)?W.legend[j]:W.legend)||\"legend\";J===e&&((Array.isArray(W.showlegend)?W.showlegend[j]:W.showlegend)||W._dfltShowLegend)&&(y=!0,p++)}if(e===\"legend\"&&W._length>W.legend.length)for(var te=W.legend.length;te<W._length;te++)y=!0,p++});for(var w=a.concat(b).filter(function(W){return!T(f)&&e===(W.legend||\"legend\")}),x=0;x<w.length;x++)if(f=w[x],!!f.visible){var _=f._isShape;(f.showlegend||f._dfltShowLegend&&!(f._module&&f._module.attributes&&f._module.attributes.showlegend&&f._module.attributes.showlegend.dflt===!1))&&(p++,f.showlegend&&(y=!0,(!_&&Am.traceIs(f,\"pie-like\")||f._input.showlegend===!0)&&p++),mi.coerceFont(c,\"legendgrouptitle.font\",d)),(!_&&Am.traceIs(f,\"bar\")&&t.barmode===\"stack\"||[\"tonextx\",\"tonexty\"].indexOf(f.fill)!==-1)&&(m=A6.isGrouped({traceorder:m})?\"grouped+reversed\":\"reversed\"),f.legendgroup!==void 0&&f.legendgroup!==\"\"&&(m=A6.isReversed({traceorder:m})?\"reversed+grouped\":\"grouped\")}var k=mi.coerce(r,t,x5e,\"showlegend\",t.showlegend||y&&p>(e===\"legend\"?1:0));if(k===!1&&(t[e]=void 0),k===!1&&!i.uirevision||(l(\"uirevision\",t.uirevision),k===!1))return;l(\"borderwidth\");var A=l(\"orientation\"),q=l(\"yref\"),C=l(\"xref\"),E=A===\"h\",P=q===\"paper\",R=C===\"paper\",N,I,O,U=\"left\";E?(N=0,Am.getComponentMethod(\"rangeslider\",\"isVisible\")(r.xaxis)?P?(I=1.1,O=\"bottom\"):(I=1,O=\"top\"):P?(I=-.1,O=\"top\"):(I=0,O=\"bottom\")):(I=1,O=\"auto\",R?N=1.02:(N=1,U=\"right\")),mi.coerce(i,o,{x:{valType:\"number\",editType:\"legend\",min:R?-2:0,max:R?3:1,dflt:N}},\"x\"),mi.coerce(i,o,{y:{valType:\"number\",editType:\"legend\",min:P?-2:0,max:P?3:1,dflt:I}},\"y\"),l(\"traceorder\",m),A6.isGrouped(t[e])&&l(\"tracegroupgap\"),l(\"entrywidth\"),l(\"entrywidthmode\"),l(\"indentation\"),l(\"itemsizing\"),l(\"itemwidth\"),l(\"itemclick\"),l(\"itemdoubleclick\");let Y=l(\"groupclick\");l(\"groupdoubleclick\",Y),l(\"xanchor\",U),l(\"yanchor\",O),l(\"maxheight\"),l(\"valign\"),mi.noneOrAll(i,o,[\"x\",\"y\"]);var G=l(\"title.text\");if(G){l(\"title.side\",E?\"left\":\"top\");var V=mi.extendFlat({},s,{size:mi.bigFont(s.size)});mi.coerceFont(l,\"title.font\",V);let W=n>1;l(\"titleclick\",W?\"toggle\":!1),l(\"titledoubleclick\",W?\"toggleothers\":!1)}}Jz.exports=function(r,t,a){var n,i=a.slice(),o=t.shapes;if(o)for(n=0;n<o.length;n++){var l=o[n];if(l.showlegend){var s={_input:l._input,visible:l.visible,showlegend:l.showlegend,legend:l.legend};i.push(s)}}var u=[\"legend\"];for(n=0;n<i.length;n++)Array.isArray(i[n].legend)?u=u.concat(i[n].legend):mi.pushUnique(u,i[n].legend);for(t._legends=[],n=0;n<u.length;n++){var f=u[n];_5e(f,r,t,i,u.length),t[f]&&(t[f]._id=f),t._legends.push(f)}}});var q6=z(S6=>{\"use strict\";var Fs=Tr(),k6=ke(),w5e=k6.pushUnique,T5e=Gh(),Kz=!0;S6.handleItemClick=function(r,t,a,n,i){var o=t._fullLayout;if(t._dragged||t._editing)return;var l=r.data()[0][0];if(l.groupTitle&&l.noClick)return;let s=i===2?a.groupdoubleclick:a.groupclick;n===\"toggle\"&&a.itemdoubleclick===\"toggleothers\"&&Kz&&t.data&&t._context.showTips&&(k6.notifier(k6._(t,\"Double-click on legend to isolate one trace\"),\"long\",t),Kz=!1);var u=s===\"togglegroup\",f=o.hiddenlabels?o.hiddenlabels.slice():[],c=t._fullData;let v=(o.shapes||[]).filter(De=>De.showlegend||De.legendgroup);var d=c.concat(v),p=l.trace;p._isShape&&(p=o.shapes[p.index]);var y=p.legendgroup,m,b,T,w,x,_,k={},A=[],q=[],C=[];function E(De,Ne){var qe=A.indexOf(De),Xe=k.visible;return Xe||(Xe=k.visible=[]),A.indexOf(De)===-1&&(A.push(De),qe=A.length-1),Xe[qe]=Ne,qe}var P=(o.shapes||[]).map(function(De){return De._input}),R=!1;function N(De,Ne){P[De].visible=Ne,R=!0}function I(De,Ne){if(!(l.groupTitle&&!u)){var qe=De._isShape,Xe=De.index;Xe===void 0&&(Xe=De._index);var $e=De.visible===!1?!1:Ne;qe?N(Xe,$e):E(Xe,$e)}}var O=p.legend;if(!p._isShape&&Fs.traceIs(p,\"pie-like\")){var U=l.label,Y=f.indexOf(U);if(n===\"toggle\")Y===-1?f.push(U):f.splice(Y,1);else if(n===\"toggleothers\"){var G=Y!==-1,V=[];for(m=0;m<t.calcdata.length;m++){var W=t.calcdata[m];for(b=0;b<W.length;b++){var j=W[b],J=j.label;O===W[0].trace.legend&&U!==J&&(f.indexOf(J)===-1&&(G=!0),w5e(f,J),V.push(J))}}if(!G)for(var te=0;te<V.length;te++){var ae=f.indexOf(V[te]);ae!==-1&&f.splice(ae,1)}}Fs.call(\"_guiRelayout\",t,\"hiddenlabels\",f)}else{var se=y&&y.length,$=[],fe;if(se)for(m=0;m<d.length;m++)fe=d[m],fe.visible&&fe.legendgroup===y&&$.push(m);if(n===\"toggle\"){var ie;switch(p.visible){case!0:ie=\"legendonly\";break;case!1:ie=!1;break;case\"legendonly\":ie=!0;break}if(se)if(u)for(m=0;m<d.length;m++){var ue=d[m];ue.visible!==!1&&ue.legendgroup===y&&I(ue,ie)}else I(p,ie);else I(p,ie)}else if(n===\"toggleothers\"){var ce,oe,be,Re,ye,Ce=!0;let De=se&&u;for(m=0;m<d.length;m++)if(ye=d[m],ce=ye===p,be=ye.showlegend!==!0,!(ce||be)&&(oe=De&&ye.legendgroup===y,!oe&&ye.legend===O&&ye.visible===!0&&!Fs.traceIs(ye,\"notLegendIsolatable\"))){Ce=!1;break}for(m=0;m<d.length;m++)if(ye=d[m],!(ye.visible===!1||ye.legend!==O)&&!Fs.traceIs(ye,\"notLegendIsolatable\"))switch(p.visible){case\"legendonly\":I(ye,!0);break;case!0:Re=Ce?!0:\"legendonly\",ce=ye===p,be=ye.showlegend!==!0&&!ye.legendgroup,oe=ce||De&&ye.legendgroup===y,I(ye,oe||be?!0:Re);break}}for(m=0;m<q.length;m++)if(T=q[m],!!T){var Me=T.constructUpdate(),Le=Object.keys(Me);for(b=0;b<Le.length;b++)w=Le[b],_=k[w]=k[w]||[],_[C[m]]=Me[w]}for(x=Object.keys(k),m=0;m<x.length;m++)for(w=x[m],b=0;b<A.length;b++)k[w].hasOwnProperty(b)||(k[w][b]=void 0);R?Fs.call(\"_guiUpdate\",t,k,{shapes:P},A):Fs.call(\"_guiRestyle\",t,k,A)}};S6.handleTitleClick=function(r,t,a){let n=r._fullLayout,i=r._fullData,o=T5e.getId(t),l=(n.shapes||[]).filter(b=>b.showlegend||b.legendgroup),s=i.concat(l);function u(b){return(b.legend||\"legend\")===o}var f,c;if(a===\"toggle\")f=!s.some(function(T){return u(T)&&T.visible===!0}),c=!1;else{let b=s.some(function(T){return!u(T)&&T.visible===!0&&T.showlegend!==!1});f=!0,c=!b}let v={visible:[]},d=[],p=(n.shapes||[]).map(function(b){return b._input});for(var y=!1,m=0;m<s.length;m++){let b=s[m],T=u(b);if(!T){let _=b.showlegend!==!0&&!b.legendgroup;if(a===\"toggle\"||_)continue}let x=(T?f:c)?!0:\"legendonly\";b.visible!==!1&&b.visible!==x&&(b._isShape?(p[b._index].visible=x,y=!0):(d.push(b.index),v.visible.push(x)))}y?Fs.call(\"_guiUpdate\",r,v,{shapes:p},d):d.length&&Fs.call(\"_guiRestyle\",r,v,d)}});var L6=z((UYe,Qz)=>{\"use strict\";Qz.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:\"#808BA4\",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}});var tN=z((GYe,rN)=>{\"use strict\";var{isArrayOrTypedArray:C6}=Vn(),eN=Tr(),D6=Gh();rN.exports=function(r,t,a){var n=t._inHover,i=D6.isGrouped(t),o=D6.isReversed(t),l={},s=[],u=!1,f={},c=0,v=0,d,p;function y(W,j,J){if(t.visible!==!1&&!(a&&W!==t._id))if(j===\"\"||!D6.isGrouped(t)){var te=\"~~i\"+c;s.push(te),l[te]=[J],c++}else s.indexOf(j)===-1?(s.push(j),u=!0,l[j]=[J]):l[j].push(J)}for(d=0;d<r.length;d++){var m=r[d],b=m[0],T=b.trace,w=T.legend,x=T.legendgroup;if(!(!n&&(!T.visible||!T.showlegend)))if(eN.traceIs(T,\"pie-like\")){var _=Array.isArray(T.legend),k=Array.isArray(T.showlegend);for(f[x]||(f[x]={}),p=0;p<m.length;p++)if(!(k&&T.showlegend[m[p].i]===!1)){_&&(w=T.legend[m[p].i]||\"legend\");var A=m[p].label;f[x][A]||(y(w,x,{label:A,color:m[p].color,i:m[p].i,trace:T,pts:m[p].pts}),f[x][A]=!0,v=Math.max(v,(A||\"\").length))}}else y(w,x,b),v=Math.max(v,(T.name||\"\").length)}if(!s.length)return[];var q=!u||!i,C=[];for(d=0;d<s.length;d++){var E=l[s[d]];q?C.push(E[0]):C.push(E)}for(q&&(C=[C]),d=0;d<C.length;d++){var P=1/0;for(p=0;p<C[d].length;p++){var R=C[d][p].trace.legendrank,N=C6(R)?Math.min(R):R;P>N&&(P=N)}C[d][0]._groupMinRank=P,C[d][0]._preGroupSort=d}var I=function(W,j){return W[0]._groupMinRank-j[0]._groupMinRank||W[0]._preGroupSort-j[0]._preGroupSort},O=function(W,j){var J=C6(W.trace.legendrank)?W.trace.legendrank[W.i]:W.trace.legendrank,te=C6(j.trace.legendrank)?j.trace.legendrank[j.i]:j.trace.legendrank;return J-te||W._preSort-j._preSort};for(C.forEach(function(W,j){W[0]._preGroupSort=j}),C.sort(I),d=0;d<C.length;d++){C[d].forEach(function(W,j){W._preSort=j}),C[d].sort(O);var U=C[d][0].trace,Y=null;for(p=0;p<C[d].length;p++){var G=C[d][p].trace.legendgrouptitle;if(G&&G.text){Y=G,n&&(G.font=t._groupTitleFont);break}}if(o&&C[d].reverse(),Y){var V=!1;for(p=0;p<C[d].length;p++)if(eN.traceIs(C[d][p].trace,\"pie-like\")){V=!0;break}C[d].unshift({i:-1,groupTitle:Y,noClick:V,trace:{showlegend:U.showlegend,legendgroup:U.legendgroup,legend:U.legend,visible:t.groupclick===\"toggleitem\"?!0:U.visible}})}for(p=0;p<C[d].length;p++)C[d][p]=[C[d][p]]}return t._lgroupsLength=C.length,t._maxNameLength=v,C}});var km=z(ef=>{\"use strict\";var Mm=ke();function aN(e){return e.indexOf(\"e\")!==-1?e.replace(/[.]?0+e/,\"e\"):e.indexOf(\".\")!==-1?e.replace(/[.]?0+$/,\"\"):e}ef.formatPiePercent=function(r,t){var a=aN((r*100).toPrecision(3));return Mm.numSeparate(a,t)+\"%\"};ef.formatPieValue=function(r,t){var a=aN(r.toPrecision(10));return Mm.numSeparate(a,t)};ef.getFirstFilled=function(r,t){if(Mm.isArrayOrTypedArray(r))for(var a=0;a<t.length;a++){var n=r[t[a]];if(n||n===0||n===\"\")return n}};ef.castOption=function(r,t){if(Mm.isArrayOrTypedArray(r))return ef.getFirstFilled(r,t);if(r)return r};ef.getRotationAngle=function(e){return(e===\"auto\"?0:e)*Math.PI/180}});var iN=z((VYe,nN)=>{\"use strict\";var A5e=Zr(),M5e=Sr();nN.exports=function(r,t,a,n){var i=a.marker.pattern;i&&i.shape?A5e.pointStyle(r,a,n,t):M5e.fill(r,t.color)}});var Sm=z((jYe,sN)=>{\"use strict\";var oN=Sr(),lN=km().castOption,k5e=iN();sN.exports=function(r,t,a,n){var i=a.marker.line,o=lN(i.color,t.pts)||oN.defaultLine,l=lN(i.width,t.pts)||0;r.call(k5e,t,a,n).style(\"stroke-width\",l).call(oN.stroke,o)}});var F6=z((WYe,dN)=>{\"use strict\";var An=Er(),E6=Tr(),cn=ke(),uN=cn.strTranslate,yi=Zr(),Oi=Sr(),P6=hi().extractOpts,qm=Jn(),S5e=Sm(),q5e=km().castOption,L5e=L6(),fN=12,cN=5,rf=2,C5e=10,ic=5;dN.exports=function(r,t,a){var n=t._fullLayout;a||(a=n.legend);var i=a.itemsizing===\"constant\",o=a.itemwidth,l=(o+L5e.itemGap*2)/2,s=uN(l,0),u=function(A,q,C,E){var P;if(A+1)P=A;else if(q&&q.width>0)P=q.width;else return 0;return i?E:Math.min(P,C)};r.each(function(A){var q=An.select(this),C=cn.ensureSingle(q,\"g\",\"layers\");C.style(\"opacity\",A[0].trace.opacity);var E=a.indentation,P=a.valign,R=A[0].lineHeight,N=A[0].height;if(P===\"middle\"&&E===0||!R||!N)C.attr(\"transform\",null);else{var I={top:1,bottom:-1}[P],O=I*(.5*(R-N+3))||0,U=a.indentation;C.attr(\"transform\",uN(U,O))}var Y=C.selectAll(\"g.legendfill\").data([A]);Y.enter().append(\"g\").classed(\"legendfill\",!0);var G=C.selectAll(\"g.legendlines\").data([A]);G.enter().append(\"g\").classed(\"legendlines\",!0);var V=C.selectAll(\"g.legendsymbols\").data([A]);V.enter().append(\"g\").classed(\"legendsymbols\",!0),V.selectAll(\"g.legendpoints\").data([A]).enter().append(\"g\").classed(\"legendpoints\",!0)}).each(k).each(v).each(p).each(d).each(m).each(x).each(w).each(f).each(c).each(b).each(T);function f(A){var q=vN(A),C=q.showFill,E=q.showLine,P=q.showGradientLine,R=q.showGradientFill,N=q.anyFill,I=q.anyLine,O=A[0],U=O.trace,Y,G,V=P6(U),W=V.colorscale,j=V.reversescale,J=function(ue){if(ue.size())if(C)yi.fillGroupStyle(ue,t,!0);else{var ce=\"legendfill-\"+U.uid;yi.gradient(ue,t,ce,R6(j),W,\"fill\")}},te=function(ue){if(ue.size()){var ce=\"legendline-\"+U.uid;yi.lineGroupStyle(ue),yi.gradient(ue,t,ce,R6(j),W,\"stroke\")}},ae=qm.hasMarkers(U)||!N?\"M5,0\":I?\"M5,-2\":\"M5,-3\",se=An.select(this),$=se.select(\".legendfill\").selectAll(\"path\").data(C||R?[A]:[]);if($.enter().append(\"path\").classed(\"js-fill\",!0),$.exit().remove(),$.attr(\"d\",ae+\"h\"+o+\"v6h-\"+o+\"z\").call(J),E||P){var fe=u(void 0,U.line,C5e,cN);G=cn.minExtend(U,{line:{width:fe}}),Y=[cn.minExtend(O,{trace:G})]}var ie=se.select(\".legendlines\").selectAll(\"path\").data(E||P?[Y]:[]);ie.enter().append(\"path\").classed(\"js-line\",!0),ie.exit().remove(),ie.attr(\"d\",ae+(P?\"l\"+o+\",0.0001\":\"h\"+o)).call(E?yi.lineGroupStyle:te)}function c(A){var q=vN(A),C=q.anyFill,E=q.anyLine,P=q.showLine,R=q.showMarker,N=A[0],I=N.trace,O=!R&&!E&&!C&&qm.hasText(I),U,Y;function G(fe,ie,ue,ce){var oe=cn.nestedProperty(I,fe).get(),be=cn.isArrayOrTypedArray(oe)&&ie?ie(oe):oe;if(i&&be&&ce!==void 0&&(be=ce),ue){if(be<ue[0])return ue[0];if(be>ue[1])return ue[1]}return be}function V(fe){return N._distinct&&N.index&&fe[N.index]?fe[N.index]:fe[0]}if(R||O||P){var W={},j={};if(R){W.mc=G(\"marker.color\",V);var J=I.type===\"scattermap\";W.mx=J?\"circle\":G(\"marker.symbol\",V),W.mo=G(\"marker.opacity\",cn.mean,[.2,1]),W.mlc=G(\"marker.line.color\",V),W.mlw=G(\"marker.line.width\",cn.mean,[0,5],rf),W.mld=G(\"marker.line.dash\",V),j.marker={sizeref:1,sizemin:1,sizemode:\"diameter\"};var te=G(\"marker.size\",cn.mean,[2,16],fN);W.ms=te,j.marker.size=te}P&&(j.line={width:G(\"line.width\",V,[0,10],cN)}),O&&(W.tx=\"Aa\",W.tp=G(\"textposition\",V),W.ts=10,W.tc=G(\"textfont.color\",V),W.tf=G(\"textfont.family\",V),W.tw=G(\"textfont.weight\",V),W.ty=G(\"textfont.style\",V),W.tv=G(\"textfont.variant\",V),W.tC=G(\"textfont.textcase\",V),W.tE=G(\"textfont.lineposition\",V),W.tS=G(\"textfont.shadow\",V)),U=[cn.minExtend(N,W)],Y=cn.minExtend(I,j),Y.selectedpoints=null,Y.texttemplate=null}var ae=An.select(this).select(\"g.legendpoints\"),se=ae.selectAll(\"path.scatterpts\").data(R?U:[]);se.enter().insert(\"path\",\":first-child\").classed(\"scatterpts\",!0).attr(\"transform\",s),se.exit().remove(),se.call(yi.pointStyle,Y,t),R&&(U[0].mrc=3);var $=ae.selectAll(\"g.pointtext\").data(O?U:[]);$.enter().append(\"g\").classed(\"pointtext\",!0).append(\"text\").attr(\"transform\",s),$.exit().remove(),$.selectAll(\"text\").call(yi.textPointStyle,Y,t)}function v(A){var q=A[0].trace,C=q.type===\"waterfall\";if(A[0]._distinct&&C){var E=A[0].trace[A[0].dir].marker;return A[0].mc=E.color,A[0].mlw=E.line.width,A[0].mlc=E.line.color,y(A,this,\"waterfall\")}var P=[];q.visible&&C&&(P=A[0].hasTotals?[[\"increasing\",\"M-6,-6V6H0Z\"],[\"totals\",\"M6,6H0L-6,-6H-0Z\"],[\"decreasing\",\"M6,6V-6H0Z\"]]:[[\"increasing\",\"M-6,-6V6H6Z\"],[\"decreasing\",\"M6,6V-6H-6Z\"]]);var R=An.select(this).select(\"g.legendpoints\").selectAll(\"path.legendwaterfall\").data(P);R.enter().append(\"path\").classed(\"legendwaterfall\",!0).attr(\"transform\",s).style(\"stroke-miterlimit\",1),R.exit().remove(),R.each(function(N){var I=An.select(this),O=q[N[0]].marker,U=u(void 0,O.line,ic,rf);I.attr(\"d\",N[1]).style(\"stroke-width\",U+\"px\").call(Oi.fill,O.color),U&&I.call(Oi.stroke,O.line.color)})}function d(A){y(A,this)}function p(A){y(A,this,\"funnel\")}function y(A,q,C){var E=A[0].trace,P=E.marker||{},R=P.line||{},N=P.cornerradius?\"M6,3a3,3,0,0,1-3,3H-3a3,3,0,0,1-3-3V-3a3,3,0,0,1,3-3H3a3,3,0,0,1,3,3Z\":\"M6,6H-6V-6H6Z\",I=C?E.visible&&E.type===C:E6.traceIs(E,\"bar\"),O=An.select(q).select(\"g.legendpoints\").selectAll(\"path.legend\"+C).data(I?[A]:[]);O.enter().append(\"path\").classed(\"legend\"+C,!0).attr(\"d\",N).attr(\"transform\",s),O.exit().remove(),O.each(function(U){var Y=An.select(this),G=U[0],V=u(G.mlw,P.line,ic,rf);Y.style(\"stroke-width\",V+\"px\");var W=G.mcc;if(!a._inHover&&\"mc\"in G){var j=P6(P),J=j.mid;J===void 0&&(J=(j.max+j.min)/2),W=yi.tryColorscale(P,\"\")(J)}var te=W||G.mc||P.color,ae=P.pattern,se=yi.getPatternAttr,$=ae&&(se(ae.shape,0,\"\")||se(ae.path,0,\"\"));if($){var fe=se(ae.bgcolor,0,null),ie=se(ae.fgcolor,0,null),ue=ae.fgopacity,ce=hN(ae.size,8,10),oe=hN(ae.solidity,.5,1),be=\"legend-\"+E.uid;Y.call(yi.pattern,\"legend\",t,be,$,ce,oe,W,ae.fillmode,fe,ie,ue)}else Y.call(Oi.fill,te);V&&Oi.stroke(Y,G.mlc||R.color)})}function m(A){var q=A[0].trace,C=An.select(this).select(\"g.legendpoints\").selectAll(\"path.legendbox\").data(q.visible&&E6.traceIs(q,\"box-violin\")?[A]:[]);C.enter().append(\"path\").classed(\"legendbox\",!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",s),C.exit().remove(),C.each(function(){var E=An.select(this);if((q.boxpoints===\"all\"||q.points===\"all\")&&Oi.opacity(q.fillcolor)===0&&Oi.opacity((q.line||{}).color)===0){var P=cn.minExtend(q,{marker:{size:i?fN:cn.constrain(q.marker.size,2,16),sizeref:1,sizemin:1,sizemode:\"diameter\"}});C.call(yi.pointStyle,P,t)}else{var R=u(void 0,q.line,ic,rf);E.style(\"stroke-width\",R+\"px\").call(Oi.fill,q.fillcolor),R&&Oi.stroke(E,q.line.color)}})}function b(A){var q=A[0].trace,C=An.select(this).select(\"g.legendpoints\").selectAll(\"path.legendcandle\").data(q.visible&&q.type===\"candlestick\"?[A,A]:[]);C.enter().append(\"path\").classed(\"legendcandle\",!0).attr(\"d\",function(E,P){return P?\"M-15,0H-8M-8,6V-6H8Z\":\"M15,0H8M8,-6V6H-8Z\"}).attr(\"transform\",s).style(\"stroke-miterlimit\",1),C.exit().remove(),C.each(function(E,P){var R=An.select(this),N=q[P?\"increasing\":\"decreasing\"],I=u(void 0,N.line,ic,rf);R.style(\"stroke-width\",I+\"px\").call(Oi.fill,N.fillcolor),I&&Oi.stroke(R,N.line.color)})}function T(A){var q=A[0].trace,C=An.select(this).select(\"g.legendpoints\").selectAll(\"path.legendohlc\").data(q.visible&&q.type===\"ohlc\"?[A,A]:[]);C.enter().append(\"path\").classed(\"legendohlc\",!0).attr(\"d\",function(E,P){return P?\"M-15,0H0M-8,-6V0\":\"M15,0H0M8,6V0\"}).attr(\"transform\",s).style(\"stroke-miterlimit\",1),C.exit().remove(),C.each(function(E,P){var R=An.select(this),N=q[P?\"increasing\":\"decreasing\"],I=u(void 0,N.line,ic,rf);R.style(\"fill\",\"none\").call(yi.dashLine,N.line.dash,I),I&&Oi.stroke(R,N.line.color)})}function w(A){_(A,this,\"pie\")}function x(A){_(A,this,\"funnelarea\")}function _(A,q,C){var E=A[0],P=E.trace,R=C?P.visible&&P.type===C:E6.traceIs(P,C),N=An.select(q).select(\"g.legendpoints\").selectAll(\"path.legend\"+C).data(R?[A]:[]);if(N.enter().append(\"path\").classed(\"legend\"+C,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",s),N.exit().remove(),N.size()){var I=P.marker||{},O=u(q5e(I.line.width,E.pts),I.line,ic,rf),U=\"pieLike\",Y=cn.minExtend(P,{marker:{line:{width:O}}},U),G=cn.minExtend(E,{trace:Y},U);S5e(N,G,Y,t)}}function k(A){var q=A[0].trace,C,E=[];if(q.visible)switch(q.type){case\"histogram2d\":case\"heatmap\":E=[[\"M-15,-2V4H15V-2Z\"]],C=!0;break;case\"choropleth\":case\"choroplethmap\":E=[[\"M-6,-6V6H6V-6Z\"]],C=!0;break;case\"densitymap\":E=[[\"M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0\"]],C=\"radial\";break;case\"cone\":E=[[\"M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 L6,0Z\"]],C=!1;break;case\"streamtube\":E=[[\"M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z\"]],C=!1;break;case\"surface\":E=[[\"M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z\"],[\"M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z\"]],C=!0;break;case\"mesh3d\":E=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],C=!1;break;case\"volume\":E=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],C=!0;break;case\"isosurface\":E=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6 A12,24 0 0,0 6,-6 L0,6Z\"]],C=!1;break}var P=An.select(this).select(\"g.legendpoints\").selectAll(\"path.legend3dandfriends\").data(E);P.enter().append(\"path\").classed(\"legend3dandfriends\",!0).attr(\"transform\",s).style(\"stroke-miterlimit\",1),P.exit().remove(),P.each(function(R,N){var I=An.select(this),O=P6(q),U=O.colorscale,Y=O.reversescale,G=function(J){if(J.size()){var te=\"legendfill-\"+q.uid;yi.gradient(J,t,te,R6(Y,C===\"radial\"),U,\"fill\")}},V;if(U){if(!C){var j=U.length;V=N===0?U[Y?j-1:0][1]:N===1?U[Y?0:j-1][1]:U[Math.floor((j-1)/2)][1]}}else{var W=q.vertexcolor||q.facecolor||q.color;V=cn.isArrayOrTypedArray(W)?W[N]||W[0]:W}I.attr(\"d\",R[0]),V?I.call(Oi.fill,V):I.call(G)})}};function R6(e,r){var t=r?\"radial\":\"horizontal\";return t+(e?\"\":\"reversed\")}function vN(e){var r=e[0].trace,t=r.contours,a=qm.hasLines(r)||r.visible&&r.type===\"quiver\",n=qm.hasMarkers(r),i=r.visible&&r.fill&&r.fill!==\"none\",o=!1,l=!1;if(t){var s=t.coloring;s===\"lines\"?o=!0:a=s===\"none\"||s===\"heatmap\"||t.showlines,t.type===\"constraint\"?i=t._operation!==\"=\":(s===\"fill\"||s===\"heatmap\")&&(l=!0)}return{showMarker:n,showLine:a,showFill:i,showGradientLine:o,showGradientFill:l,anyLine:a||o,anyFill:i||l}}function hN(e,r,t){return e&&cn.isArrayOrTypedArray(e)?r:e>t?t:e}});var B6=z((XYe,TN)=>{\"use strict\";var Nn=Er(),da=ke(),N6=va(),tf=Tr(),Dm=Th(),z6=Bi(),pa=Zr(),Yh=Sr(),af=Ca(),pN=q6().handleItemClick,mN=q6().handleTitleClick,xa=L6(),I6=Qa(),_N=I6.LINE_SPACING,lc=I6.FROM_TL,yN=I6.FROM_BR,gN=tN(),D5e=F6(),sc=Gh(),oc=1,E5e=/^legend[0-9]*$/;TN.exports=function(r,t){if(t)bN(r,t);else{var a=r._fullLayout,n=a._legends,i=a._infolayer.selectAll('[class^=\"legend\"]');i.each(function(){var u=Nn.select(this),f=u.attr(\"class\"),c=f.split(\" \")[0];c.match(E5e)&&n.indexOf(c)===-1&&u.remove()});for(var o=0;o<n.length;o++){var l=n[o],s=r._fullLayout[l];bN(r,s)}}};function P5e(e,r,t){if(!(r.title.side!==\"top center\"&&r.title.side!==\"top right\")){var a=r.title.font,n=a.size*_N,i=0,o=e.node(),l=pa.bBox(o).width;r.title.side===\"top center\"?i=.5*(r._width-2*t-2*xa.titlePad-l):r.title.side===\"top right\"&&(i=r._width-2*t-2*xa.titlePad-l),af.positionText(e,t+xa.titlePad+i,t+n)}}function bN(e,r){var t=r||{},a=e._fullLayout,n=sc.getId(t),i,o,l=t._inHover;if(l?(o=t.layer,i=\"hover\"):(o=a._infolayer,i=n),!!o){i+=a._uid,e._legendMouseDownTime||(e._legendMouseDownTime=0);var s;if(l){if(!t.entries)return;s=gN(t.entries,t)}else{for(var u=(e.calcdata||[]).slice(),f=a.shapes,c=0;c<f.length;c++){var v=f[c];if(v.showlegend){var d={_isShape:!0,index:v._index,name:v.name||v.label.text||\"shape \"+v._index,legend:v.legend,legendgroup:v.legendgroup,legendgrouptitle:v.legendgrouptitle,legendrank:v.legendrank,legendwidth:v.legendwidth,showlegend:v.showlegend,visible:v.visible,opacity:v.opacity,mode:v.type===\"line\"?\"lines\":\"markers\",line:v.line,marker:{line:v.line,color:v.fillcolor,size:12,symbol:v.type===\"rect\"?\"square\":v.type===\"circle\"?\"circle\":\"hexagon2\"}};u.push([{trace:d}])}}s=a.showlegend&&gN(u,t,a._legends.length>1)}var p=a.hiddenlabels||[];if(!l&&(!a.showlegend||!s.length))return o.selectAll(\".\"+n).remove(),a._topdefs.select(\"#\"+i).remove(),N6.autoMargin(e,n);var y=da.ensureSingle(o,\"g\",n,function(q){l||q.attr(\"pointer-events\",\"all\")}),m=da.ensureSingleById(a._topdefs,\"clipPath\",i,function(q){q.append(\"rect\")}),b=da.ensureSingle(y,\"rect\",\"bg\",function(q){q.attr(\"shape-rendering\",\"crispEdges\")});b.call(Yh.stroke,t.bordercolor).call(Yh.fill,t.bgcolor).style(\"stroke-width\",t.borderwidth+\"px\");var T=da.ensureSingle(y,\"g\",\"scrollbox\"),w=t.title;t._titleWidth=0,t._titleHeight=0;var x;w.text?(x=da.ensureSingle(T,\"text\",n+\"titletext\"),x.attr(\"text-anchor\",\"start\").call(pa.font,w.font).text(w.text),Cm(x,T,e,t,oc),!l&&(t.titleclick||t.titledoubleclick)&&z5e(T,e,t,n)):(T.selectAll(\".\"+n+\"titletext\").remove(),T.selectAll(\".\"+n+\"titletoggle\").remove());var _=da.ensureSingle(y,\"rect\",\"scrollbar\",function(q){q.attr(xa.scrollBarEnterAttrs).call(Yh.fill,xa.scrollBarColor)}),k=T.selectAll(\"g.groups\").data(s);k.enter().append(\"g\").attr(\"class\",\"groups\"),k.exit().remove();var A=k.selectAll(\"g.traces\").data(da.identity);A.enter().append(\"g\").attr(\"class\",\"traces\"),A.exit().remove(),A.style(\"opacity\",function(q){let C=q[0],E=C.trace;if(C.groupTitle){let P=E.legendgroup,R=(a.shapes||[]).filter(function(I){return I.showlegend});return e._fullData.concat(R).some(function(I){return I.legendgroup===P&&(I.legend||\"legend\")===n&&I.visible===!0})?1:.5}return tf.traceIs(E,\"pie-like\")?p.indexOf(q[0].label)!==-1?.5:1:E.visible===\"legendonly\"?.5:1}).each(function(){Nn.select(this).call(R5e,e,t)}).call(D5e,e,t).each(function(q){l||q[0].groupTitle&&t.groupclick===\"toggleitem\"||Nn.select(this).call(F5e,e,n)}),da.syncOrAsync([N6.previousPromises,function(){return B5e(e,k,A,t,T)},function(){var q=a._size,C=t.borderwidth,E=t.xref===\"paper\",P=t.yref===\"paper\";if(w.text){let Ce=(a.shapes||[]).filter(function(Le){return Le.showlegend}),Me=e._fullData.concat(Ce).some(function(Le){let De=Le.legend||\"legend\";var Ne=Array.isArray(De)?De.includes(n):De===n;return Ne&&Le.visible===!0});x.style(\"opacity\",Me?1:.5)}if(!l){var R,N;E?R=q.l+q.w*t.x-lc[Em(t)]*t._width:R=a.width*t.x-lc[Em(t)]*t._width,P?N=q.t+q.h*(1-t.y)-lc[Pm(t)]*t._effHeight:N=a.height*(1-t.y)-lc[Pm(t)]*t._effHeight;var I=O5e(e,n,R,N);if(I)return;if(a.margin.autoexpand){var O=R,U=N;R=E?da.constrain(R,0,a.width-t._width):O,N=P?da.constrain(N,0,a.height-t._effHeight):U,R!==O&&da.log(\"Constrain \"+n+\".x to make legend fit inside graph\"),N!==U&&da.log(\"Constrain \"+n+\".y to make legend fit inside graph\")}pa.setTranslate(y,R,N)}if(_.on(\".drag\",null),y.on(\"wheel\",null),l||t._height<=t._maxHeight||e._context.staticPlot){var Y=t._effHeight;l&&(Y=t._height),b.attr({width:t._width-C,height:Y-C,x:C/2,y:C/2}),pa.setTranslate(T,0,0),m.select(\"rect\").attr({width:t._width-2*C,height:Y-2*C,x:C,y:C}),pa.setClipUrl(T,i,e),pa.setRect(_,0,0,0,0),delete t._scrollY}else{var G=Math.max(xa.scrollBarMinHeight,t._effHeight*t._effHeight/t._height),V=t._effHeight-G-2*xa.scrollBarMargin,W=t._height-t._effHeight,j=V/W,J=Math.min(t._scrollY||0,W);b.attr({width:t._width-2*C+xa.scrollBarWidth+xa.scrollBarMargin,height:t._effHeight-C,x:C/2,y:C/2}),m.select(\"rect\").attr({width:t._width-2*C+xa.scrollBarWidth+xa.scrollBarMargin,height:t._effHeight-2*C,x:C,y:C+J}),pa.setClipUrl(T,i,e),ce(J,G,j),y.on(\"wheel\",function(){J=da.constrain(t._scrollY+Nn.event.deltaY/W*V,0,W),ce(J,G,j),J!==0&&J!==W&&Nn.event.preventDefault()});var te,ae,se,$=function(Ce,Me,Le){var De=(Le-Me)/j+Ce;return da.constrain(De,0,W)},fe=function(Ce,Me,Le){var De=(Me-Le)/j+Ce;return da.constrain(De,0,W)},ie=Nn.behavior.drag().on(\"dragstart\",function(){var Ce=Nn.event.sourceEvent;Ce.type===\"touchstart\"?te=Ce.changedTouches[0].clientY:te=Ce.clientY,se=J}).on(\"drag\",function(){var Ce=Nn.event.sourceEvent;Ce.buttons===2||Ce.ctrlKey||(Ce.type===\"touchmove\"?ae=Ce.changedTouches[0].clientY:ae=Ce.clientY,J=$(se,te,ae),ce(J,G,j))});_.call(ie);var ue=Nn.behavior.drag().on(\"dragstart\",function(){var Ce=Nn.event.sourceEvent;Ce.type===\"touchstart\"&&(te=Ce.changedTouches[0].clientY,se=J)}).on(\"drag\",function(){var Ce=Nn.event.sourceEvent;Ce.type===\"touchmove\"&&(ae=Ce.changedTouches[0].clientY,J=fe(se,te,ae),ce(J,G,j))});T.call(ue)}function ce(Ce,Me,Le){t._scrollY=e._fullLayout[n]._scrollY=Ce,pa.setTranslate(T,0,-Ce),pa.setRect(_,t._width,xa.scrollBarMargin+Ce*Le,xa.scrollBarWidth,Me),m.select(\"rect\").attr(\"y\",C+Ce)}if(e._context.edits.legendPosition){var oe,be,Re,ye;y.classed(\"cursor-move\",!0),z6.init({element:y.node(),gd:e,prepFn:function(Ce){if(Ce.target!==_.node()){var Me=pa.getTranslate(y);Re=Me.x,ye=Me.y}},moveFn:function(Ce,Me){if(Re!==void 0&&ye!==void 0){var Le=Re+Ce,De=ye+Me;pa.setTranslate(y,Le,De),oe=z6.align(Le,t._width,q.l,q.l+q.w,t.xanchor),be=z6.align(De+t._height,-t._height,q.t+q.h,q.t,t.yanchor)}},doneFn:function(){if(oe!==void 0&&be!==void 0){var Ce={};Ce[n+\".x\"]=oe,Ce[n+\".y\"]=be,tf.call(\"_guiRelayout\",e,Ce)}},clickFn:function(Ce,Me){var Le=o.selectAll(\"g.traces\").filter(function(){var De=this.getBoundingClientRect();return Me.clientX>=De.left&&Me.clientX<=De.right&&Me.clientY>=De.top&&Me.clientY<=De.bottom});Le.size()>0&&wN(e,t,Le,Ce,Me)}})}}],e)}}function Lm(e,r,t){var a=e[0],n=a.width,i=r.entrywidthmode,o=a.trace.legendwidth||r.entrywidth;return i===\"fraction\"?r._maxWidth*o:t+(o||n)}function wN(e,r,t,a,n){var i=e._fullLayout,o=t.data()[0][0].trace,l=r.itemclick,s=r.itemdoubleclick,u={event:n,node:t.node(),curveNumber:o.index,expandedIndex:o.index,data:e.data,layout:e.layout,frames:e._transitionData._frames,config:e._context,fullData:e._fullData,fullLayout:i};o._group&&(u.group=o._group),tf.traceIs(o,\"pie-like\")&&(u.label=t.datum()[0].label);var f=Dm.triggerHandler(e,\"plotly_legendclick\",u);if(a===1){if(f===!1)return;r._clickTimeout=setTimeout(function(){e._fullLayout&&l&&pN(t,e,r,l,a)},e._context.doubleClickDelay)}else if(a===2){r._clickTimeout&&clearTimeout(r._clickTimeout),e._legendMouseDownTime=0;var c=Dm.triggerHandler(e,\"plotly_legenddoubleclick\",u);c!==!1&&f!==!1&&s&&pN(t,e,r,s,a)}}function R5e(e,r,t){var a=sc.getId(t),n=e.data()[0][0],i=n.trace,o=tf.traceIs(i,\"pie-like\"),l=!t._inHover&&r._context.edits.legendText&&!o,s=t._maxNameLength,u,f;n.groupTitle?(u=n.groupTitle.text,f=n.groupTitle.font):(f=t.font,t.entries?u=n.text:(u=o?n.label:i.name,i._meta&&(u=da.templateString(u,i._meta))));var c=da.ensureSingle(e,\"text\",a+\"text\");c.attr(\"text-anchor\",\"start\").call(pa.font,f).text(l?xN(u,s):u);var v=t.indentation+t.itemwidth+xa.itemGap*2;af.positionText(c,v,0),l?c.call(af.makeEditable,{gd:r,text:u}).call(Cm,e,r,t).on(\"edit\",function(d){this.text(xN(d,s)).call(Cm,e,r,t);var p={};return p.name=d,n.trace._isShape?tf.call(\"_guiRelayout\",r,\"shapes[\"+i.index+\"].name\",p.name):tf.call(\"_guiRestyle\",r,p,i.index)}):Cm(c,e,r,t)}function xN(e,r){var t=Math.max(4,r);if(e&&e.trim().length>=t/2)return e;e=e||\"\";for(var a=t-e.length;a>0;a--)e+=\" \";return e}function F5e(e,r,t){var a=r._context.doubleClickDelay,n,i=1,o=da.ensureSingle(e,\"rect\",t+\"toggle\",function(l){r._context.staticPlot||l.style(\"cursor\",\"pointer\").attr(\"pointer-events\",\"all\"),l.call(Yh.fill,\"rgba(0,0,0,0)\")});r._context.staticPlot||(o.on(\"mousedown\",function(){n=new Date().getTime(),n-r._legendMouseDownTime<a?i+=1:(i=1,r._legendMouseDownTime=n)}),o.on(\"mouseup\",function(){if(!(r._dragged||r._editing)){var l=r._fullLayout[t];new Date().getTime()-r._legendMouseDownTime>a&&(i=Math.max(i-1,1)),wN(r,l,e,i,Nn.event)}}))}function z5e(e,r,t,a){if(r._fullData.some(function(u){let f=u.legend||\"legend\";return(Array.isArray(f)?f.includes(a):f===a)&&tf.traceIs(u,\"pie-like\")}))return;let i=r._context.doubleClickDelay;var o,l=1;let s=da.ensureSingle(e,\"rect\",a+\"titletoggle\",function(u){r._context.staticPlot||u.style(\"cursor\",\"pointer\").attr(\"pointer-events\",\"all\"),u.call(Yh.fill,\"rgba(0,0,0,0)\")});r._context.staticPlot||(s.on(\"mousedown\",function(){o=new Date().getTime(),o-r._legendMouseDownTime<i?l+=1:(l=1,r._legendMouseDownTime=o)}),s.on(\"mouseup\",function(){if(r._dragged||r._editing)return;new Date().getTime()-r._legendMouseDownTime>i&&(l=Math.max(l-1,1));let u={event:Nn.event,legendId:a,data:r.data,layout:r.layout,fullData:r._fullData,fullLayout:r._fullLayout};if(l===1&&t.titleclick){if(Dm.triggerHandler(r,\"plotly_legendtitleclick\",u)===!1)return;t._titleClickTimeout=setTimeout(function(){r._fullLayout&&mN(r,t,t.titleclick)},i)}else l===2&&(t._titleClickTimeout&&clearTimeout(t._titleClickTimeout),r._legendMouseDownTime=0,Dm.triggerHandler(r,\"plotly_legendtitledoubleclick\",u)!==!1&&t.titledoubleclick&&mN(r,t,t.titledoubleclick))}))}function Cm(e,r,t,a,n){a._inHover&&e.attr(\"data-notex\",!0),af.convertToTspans(e,t,function(){N5e(r,t,a,n)})}function N5e(e,r,t,a){var n=e.data()[0][0],i=n&&n.trace.showlegend;if(Array.isArray(i)&&(i=i[n.i]!==!1),!t._inHover&&n&&!i){e.remove();return}var o=e.select(\"g[class*=math-group]\"),l=o.node(),s=sc.getId(t);t||(t=r._fullLayout[s]);var u=t.borderwidth,f;a===oc?f=t.title.font:n.groupTitle?f=n.groupTitle.font:f=t.font;var c=f.size*_N,v,d;if(l){var p=pa.bBox(l);v=p.height,d=p.width,a===oc?pa.setTranslate(o,u,u+v*.75):pa.setTranslate(o,0,v*.25)}else{var y=\".\"+s+(a===oc?\"title\":\"\")+\"text\",m=e.select(y),b=af.lineCount(m),T=m.node();if(v=c*b,d=T?pa.bBox(T).width:0,a===oc)t.title.side===\"left\"&&(d+=xa.itemGap*2),af.positionText(m,u+xa.titlePad,u+c);else{var w=xa.itemGap*2+t.indentation+t.itemwidth;n.groupTitle&&(w=xa.itemGap,d-=t.indentation+t.itemwidth),af.positionText(m,w,-c*((b-1)/2-.3))}}a===oc?(t._titleWidth=d,t._titleHeight=v):(n.lineHeight=c,n.height=Math.max(v,16)+3,n.width=d)}function I5e(e){var r=0,t=0,a=e.title.side;return a&&(a.indexOf(\"left\")!==-1&&(r=e._titleWidth),a.indexOf(\"top\")!==-1&&(t=e._titleHeight)),[r,t]}function B5e(e,r,t,a,n){var i=e._fullLayout,o=sc.getId(a);a||(a=i[o]);var l=i._size,s=sc.isVertical(a),u=sc.isGrouped(a),f=a.entrywidthmode===\"fraction\",c=a.borderwidth,v=2*c,d=xa.itemGap,p=a.indentation+a.itemwidth+d*2,y=2*(c+d),m=Pm(a),b=a.y<0||a.y===0&&m===\"top\",T=a.y>1||a.y===1&&m===\"bottom\",w=a.tracegroupgap,x={};let{orientation:_,yref:k}=a,{maxheight:A}=a,q=b||T||_!==\"v\"||k!==\"paper\";A||(A=q?.5:1);let C=q?i.height:l.h;a._maxHeight=Math.max(A>1?A:A*C,30);var E=0;a._width=0,a._height=0;var P=I5e(a);if(s)t.each(function(Ce){var Me=Ce[0].height;pa.setTranslate(this,c+P[0],c+P[1]+a._height+Me/2+d),a._height+=Me,a._width=Math.max(a._width,Ce[0].width)}),E=p+a._width,a._width+=d+p+v,a._height+=y,u&&(r.each(function(Ce,Me){pa.setTranslate(this,0,Me*a.tracegroupgap)}),a._height+=(a._lgroupsLength-1)*a.tracegroupgap);else{var R=Em(a),N=a.x<0||a.x===0&&R===\"right\",I=a.x>1||a.x===1&&R===\"left\",O=T||b,U=i.width/2;a._maxWidth=Math.max(N?O&&R===\"left\"?l.l+l.w:U:I?O&&R===\"right\"?l.r+l.w:U:l.w,2*p);var Y=0,G=0;t.each(function(Ce){var Me=Lm(Ce,a,p);Y=Math.max(Y,Me),G+=Me}),E=null;var V=0;if(u){var W=0,j=0,J=0;r.each(function(){var Ce=0,Me=0;Nn.select(this).selectAll(\"g.traces\").each(function(De){var Ne=Lm(De,a,p),qe=De[0].height;pa.setTranslate(this,P[0],P[1]+c+d+qe/2+Me),Me+=qe,Ce=Math.max(Ce,Ne),x[De[0].trace.legendgroup]=Ce});var Le=Ce+d;j>0&&Le+c+j>a._maxWidth?(V=Math.max(V,j),j=0,J+=W+w,W=Me):W=Math.max(W,Me),pa.setTranslate(this,j,J),j+=Le}),a._width=Math.max(V,j)+c,a._height=J+W+y}else{var te=t.size(),ae=G+v+(te-1)*d<a._maxWidth,se=0,$=0,fe=0,ie=0;t.each(function(Ce){var Me=Ce[0].height,Le=Lm(Ce,a,p,u),De=ae?Le:Y;f||(De+=d),De+c+$-d>=a._maxWidth&&(V=Math.max(V,ie),$=0,fe+=se,a._height+=se,se=0),pa.setTranslate(this,P[0]+c+$,P[1]+c+fe+Me/2+d),ie=$+Le+d,$+=De,se=Math.max(se,Me)}),ae?(a._width=$+v,a._height=se+y):(a._width=Math.max(V,ie)+v,a._height+=se+y)}}a._width=Math.ceil(Math.max(a._width+P[0],a._titleWidth+2*(c+xa.titlePad))),a._height=Math.ceil(Math.max(a._height+P[1],a._titleHeight+2*(c+xa.itemGap))),a._effHeight=Math.min(a._height,a._maxHeight);var ue=e._context.edits,ce=ue.legendText||ue.legendPosition;t.each(function(Ce){var Me=Nn.select(this).select(\".\"+o+\"toggle\"),Le=Ce[0].height,De=Ce[0].trace.legendgroup,Ne=Lm(Ce,a,p);u&&De!==\"\"&&(Ne=x[De]);var qe=ce?p:E||Ne;!s&&!f&&(qe+=d/2),pa.setRect(Me,0,-Le/2,qe,Le)});var oe=n.select(\".\"+o+\"titletext\");oe.node()&&P5e(oe,a,c);var be=n.select(\".\"+o+\"titletoggle\");if(be.size()&&oe.node()){var Re=oe.attr(\"x\")||0,ye=xa.titlePad;pa.setRect(be,Re-ye,c,a._titleWidth+2*ye,a._titleHeight+2*ye)}}function O5e(e,r,t,a){var n=e._fullLayout,i=n[r],o=Em(i),l=Pm(i),s=i.xref===\"paper\",u=i.yref===\"paper\";e._fullLayout._reservedMargin[r]={};var f=i.y<.5?\"b\":\"t\",c=i.x<.5?\"l\":\"r\",v={r:n.width-t,l:t+i._width,b:n.height-a,t:a+i._effHeight};if(s&&u)return N6.autoMargin(e,r,{x:i.x,y:i.y,l:i._width*lc[o],r:i._width*yN[o],b:i._effHeight*yN[l],t:i._effHeight*lc[l]});s?e._fullLayout._reservedMargin[r][f]=v[f]:u||i.orientation===\"v\"?e._fullLayout._reservedMargin[r][c]=v[c]:e._fullLayout._reservedMargin[r][f]=v[f]}function Em(e){return da.isRightAnchor(e)?\"right\":da.isCenterAnchor(e)?\"center\":\"left\"}function Pm(e){return da.isBottomAnchor(e)?\"bottom\":da.isMiddleAnchor(e)?\"middle\":\"top\"}});var G6=z(U6=>{\"use strict\";var nf=Er(),Ol=Ir(),$t=ke(),H5e=$t.pushUnique,O6=$t.strTranslate,U5e=$t.strRotate,G5e=Th(),Hi=Ca(),Y5e=Zz(),ll=Zr(),_a=Sr(),Rm=Bi(),sl=Gr(),V5e=qa().zindexSeparator,fc=Tr(),gi=qo(),of=Jv(),j5e=M6(),W5e=B6(),DN=of.YANGLE,H6=Math.PI*DN/180,X5e=1/Math.sin(H6),Z5e=Math.cos(H6),$5e=Math.sin(H6),Bt=of.HOVERARROWSIZE,Wr=of.HOVERTEXTPAD,AN={box:!0,ohlc:!0,violin:!0,candlestick:!0},J5e={scatter:!0,scattergl:!0,splom:!0};function MN(e,r){return e.distance-r.distance}U6.hover=function(r,t,a,n){r=$t.getGraphDiv(r);var i=t.target;$t.throttle(r._fullLayout._uid+of.HOVERID,of.HOVERMINTIME,function(){K5e(r,t,a,n,i)})};U6.loneHover=function(r,t){var a=!0;Array.isArray(r)||(a=!1,r=[r]);var n=t.gd,i=zN(n),o=NN(n),l=r.map(function(m){var b=m._x0||m.x0||m.x||0,T=m._x1||m.x1||m.x||0,w=m._y0||m.y0||m.y||0,x=m._y1||m.y1||m.y||0,_=m.eventData;if(_){var k=Math.min(b,T),A=Math.max(b,T),q=Math.min(w,x),C=Math.max(w,x),E=m.trace;if(fc.traceIs(E,\"gl3d\")){var P=n._fullLayout[E.scene]._scene.container,R=P.offsetLeft,N=P.offsetTop;k+=R,A+=R,q+=N,C+=N}_.bbox={x0:k+o,x1:A+o,y0:q+i,y1:C+i},_.xPixel=(b+T)/2,_.yPixel=(w+x)/2,t.inOut_bbox&&t.inOut_bbox.push(_.bbox)}else _=!1;return{color:m.color||_a.defaultLine,x0:m.x0||m.x||0,x1:m.x1||m.x||0,y0:m.y0||m.y||0,y1:m.y1||m.y||0,xLabel:m.xLabel,yLabel:m.yLabel,zLabel:m.zLabel,text:m.text,name:m.name,idealAlign:m.idealAlign,borderColor:m.borderColor,fontFamily:m.fontFamily,fontSize:m.fontSize,fontColor:m.fontColor,fontWeight:m.fontWeight,fontStyle:m.fontStyle,fontVariant:m.fontVariant,nameLength:m.nameLength,textAlign:m.textAlign,trace:m.trace||{index:0,hoverinfo:\"\"},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:m.hovertemplate||!1,hovertemplateLabels:m.hovertemplateLabels||!1,eventData:_}}),s=!1,u=PN(l,{gd:n,hovermode:\"closest\",rotateLabels:s,bgColor:t.bgColor||_a.background,container:nf.select(t.container),outerContainer:t.outerContainer||t.container}),f=u.hoverLabels,c=5,v=0,d=0;f.sort(function(m,b){return m.y0-b.y0}).each(function(m,b){var T=m.y0-m.by/2;T-c<v?m.offset=v-T+c:m.offset=0,v=T+m.by+m.offset,b===t.anchorIndex&&(d=m.offset)}).each(function(m){m.offset-=d});var p=n._fullLayout._invScaleX,y=n._fullLayout._invScaleY;return FN(f,s,p,y),a?f:f.node()};function K5e(e,r,t,a,n){t||(t=\"xy\"),typeof t==\"string\"&&(t=t.split(V5e)[0]);var i=Array.isArray(t)?t:[t],o,l=e._fullLayout,s=l.hoversubplots,u=l._plots||[],f=u[t],c=l._has(\"cartesian\"),v=r.hovermode||l.hovermode,d=(v||\"\").charAt(0)===\"x\",p=(v||\"\").charAt(0)===\"y\",y,m;if(c&&(d||p)&&s===\"axis\"){for(var b=i.length,T=0;T<b;T++)if(o=i[T],u[o]){y=sl.getFromId(e,o,\"x\"),m=sl.getFromId(e,o,\"y\");var w=(d?y:m)._subplotsWith;if(w&&w.length)for(var x=0;x<w.length;x++)H5e(i,w[x])}}if(f&&s!==\"single\"){var _=f.overlays.map(function(vr){return vr.id});i=i.concat(_)}for(var k=i.length,A=new Array(k),q=new Array(k),C=!1,E=0;E<k;E++)if(o=i[E],u[o])C=!0,A[E]=u[o].xaxis,q[E]=u[o].yaxis;else if(l[o]&&l[o]._subplot){var P=l[o]._subplot;A[E]=P.xaxis,q[E]=P.yaxis}else{$t.warn(\"Unrecognized subplot: \"+o);return}if(v&&!C&&(v=\"closest\"),[\"x\",\"y\",\"closest\",\"x unified\",\"y unified\"].indexOf(v)===-1||!e.calcdata||e.querySelector(\".zoombox\")||e._dragging)return Rm.unhoverRaw(e,r);var R=l.hoverdistance;R===-1&&(R=1/0);var N=l.spikedistance;N===-1&&(N=1/0);var I=[],O=[],U,Y,G,V,W,j,J,te,ae,se,$,fe,ie,ue={hLinePoint:null,vLinePoint:null},ce=!1;if(Array.isArray(r))for(v=\"array\",G=0;G<r.length;G++)W=e.calcdata[r[G].curveNumber||0],W&&(j=W[0].trace,W[0].trace.hoverinfo!==\"skip\"&&(O.push(W),j.orientation===\"h\"&&(ce=!0)));else{var oe=e.calcdata.slice();for(oe.sort(function(vr,_t){var Yr=vr[0].trace.zorder||0,vt=_t[0].trace.zorder||0;return Yr-vt}),V=0;V<oe.length;V++)W=oe[V],j=W[0].trace,j.hoverinfo!==\"skip\"&&gi.isTraceInSubplots(j,i)&&(O.push(W),j.orientation===\"h\"&&(ce=!0));var be=!n,Re,ye;if(be)\"xpx\"in r?Re=r.xpx:Re=A[0]._length/2,\"ypx\"in r?ye=r.ypx:ye=q[0]._length/2;else{if(G5e.triggerHandler(e,\"plotly_beforehover\",r)===!1)return;var Ce=n.getBoundingClientRect();Re=r.clientX-Ce.left,ye=r.clientY-Ce.top,l._calcInverseTransform(e);var Me=$t.apply3DTransform(l._invTransform)(Re,ye);if(Re=Me[0],ye=Me[1],Re<0||Re>A[0]._length||ye<0||ye>q[0]._length)return Rm.unhoverRaw(e,r)}if(r.pointerX=Re+A[0]._offset,r.pointerY=ye+q[0]._offset,\"xval\"in r?U=gi.flat(i,r.xval):U=gi.p2c(A,Re),\"yval\"in r?Y=gi.flat(i,r.yval):Y=gi.p2c(q,ye),e._hoverPointerX=r.pointerX,e._hoverPointerY=r.pointerY,!Ol(U[0])||!Ol(Y[0]))return $t.warn(\"Fx.hover failed\",r,e),Rm.unhoverRaw(e,r)}l.clickanywhere&&(e._hoverXVals=U,e._hoverYVals=Y,e._hoverXAxes=A,e._hoverYAxes=q);var Le=1/0;function De(vr,_t){for(V=0;V<O.length;V++)if(W=O[V],!(!W||!W[0]||!W[0].trace)&&(j=W[0].trace,!(j.visible!==!0||j._length===0)&&[\"carpet\",\"contourcarpet\"].indexOf(j._module.name)===-1)){if(ae=v,gi.isUnifiedHover(ae)&&(ae=ae.charAt(0)),j.type===\"splom\"?(te=0,J=i[te]):(J=gi.getSubplot(j),te=i.indexOf(J)),fe={cd:W,trace:j,xa:A[te],ya:q[te],maxHoverDistance:R,maxSpikeDistance:N,index:!1,distance:Math.min(Le,R),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:_a.defaultLine,name:j.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},l[J]&&(fe.subplot=l[J]._subplot),l._splomScenes&&l._splomScenes[j.uid]&&(fe.scene=l._splomScenes[j.uid]),ae===\"array\"){var Yr=r[V];if(\"pointNumber\"in Yr){let aa=W[Yr.pointNumber];aa&&(fe.index=Yr.pointNumber,aa.lonlat?(se=aa.lonlat[0],$=aa.lonlat[1]):(se=aa.x,$=aa.y)),ae=\"closest\"}else ae=\"\",\"xval\"in Yr&&(se=Yr.xval,ae=\"x\"),\"yval\"in Yr&&($=Yr.yval,ae=ae?\"closest\":\"y\")}else vr!==void 0&&_t!==void 0?(se=vr,$=_t):(se=U[te],$=Y[te]);if(ie=I.length,R!==0)if(j._module&&j._module.hoverPoints){var vt=j._module.hoverPoints(fe,se,$,ae,{finiteRange:!0,hoverLayer:l._hoverlayer,hoversubplots:s,gd:e});if(vt)for(var Rt,Mt=0;Mt<vt.length;Mt++)Rt=vt[Mt],Ol(Rt.x0)&&Ol(Rt.y0)&&I.push(txe(Rt,v))}else $t.log(\"Unrecognized trace type in hover:\",j);if(v===\"closest\"&&I.length>ie&&(I.splice(0,ie),Le=I[0].distance),c&&N!==0&&I.length===0){fe.distance=N,fe.index=!1;var nt=j._module.hoverPoints(fe,se,$,\"closest\",{hoverLayer:l._hoverlayer});if(nt&&(nt=nt.filter(function(aa){return aa.spikeDistance<=N})),nt&&nt.length){var ra,En=nt.filter(function(aa){return aa.xa.showspikes&&aa.xa.spikesnap!==\"hovered data\"});if(En.length){var Vt=En[0];Ol(Vt.x0)&&Ol(Vt.y0)&&(ra=qe(Vt),(!ue.vLinePoint||ue.vLinePoint.spikeDistance>ra.spikeDistance)&&(ue.vLinePoint=ra))}var Ct=nt.filter(function(aa){return aa.ya.showspikes&&aa.ya.spikesnap!==\"hovered data\"});if(Ct.length){var ta=Ct[0];Ol(ta.x0)&&Ol(ta.y0)&&(ra=qe(ta),(!ue.hLinePoint||ue.hLinePoint.spikeDistance>ra.spikeDistance)&&(ue.hLinePoint=ra))}}}}}De();function Ne(vr,_t,Yr){for(var vt=null,Rt=1/0,Mt,nt=0;nt<vr.length;nt++)y&&y._id!==vr[nt].xa._id||m&&m._id!==vr[nt].ya._id||(Mt=vr[nt].spikeDistance,Yr&&nt===0&&(Mt=-1/0),Mt<=Rt&&Mt<=_t&&(vt=vr[nt],Rt=Mt));return vt}function qe(vr){return vr?{xa:vr.xa,ya:vr.ya,x:vr.xSpike!==void 0?vr.xSpike:(vr.x0+vr.x1)/2,y:vr.ySpike!==void 0?vr.ySpike:(vr.y0+vr.y1)/2,distance:vr.distance,spikeDistance:vr.spikeDistance,curveNumber:vr.trace.index,color:vr.color,pointNumber:vr.index}:null}var Xe={fullLayout:l,container:l._hoverlayer,event:r},$e=e._spikepoints,We={vLinePoint:ue.vLinePoint,hLinePoint:ue.hLinePoint};e._spikepoints=We;var Se=function(){var vr=I.filter(function(Yr){return y&&y._id===Yr.xa._id&&m&&m._id===Yr.ya._id}),_t=I.filter(function(Yr){return!(y&&y._id===Yr.xa._id&&m&&m._id===Yr.ya._id)});vr.sort(MN),_t.sort(MN),I=vr.concat(_t),I=nxe(I,v)};Se();var Fe=v.charAt(0),Qe=(Fe===\"x\"||Fe===\"y\")&&I[0]&&J5e[I[0].trace.type];if(c&&N!==0&&I.length!==0){var re=I.filter(function(vr){return vr.ya.showspikes}),xe=Ne(re,N,Qe);ue.hLinePoint=qe(xe);var Ge=I.filter(function(vr){return vr.xa.showspikes}),cr=Ne(Ge,N,Qe);ue.vLinePoint=qe(cr)}if(I.length===0){var Pe=Rm.unhoverRaw(e,r);if(c&&(ue.hLinePoint!==null||ue.vLinePoint!==null)&&qN($e)&&SN(e,ue,Xe),l.hoveranywhere&&!a&&n){var me=e._hoverdata;me&&me.length&&(e.emit(\"plotly_unhover\",{event:r,points:me}),e._hoverdata=[]),oa([]),e._hoverAnywhereActive=!0}return Pe}if(c&&qN($e)&&SN(e,ue,Xe),gi.isXYhover(ae)&&I[0].length!==0&&I[0].trace.type!==\"splom\"){var Ae=I[0];AN[Ae.trace.type]?I=I.filter(vr=>vr.trace.index===Ae.trace.index):I=[Ae];var He=I.length,Ze=CN(\"x\",Ae,l),Be=CN(\"y\",Ae,l);De(Ze,Be);var je=[],tr={},ir=0,lr=function(vr){var _t=AN[vr.trace.type]?EN(vr):vr.trace.index;if(!tr[_t])ir++,tr[_t]=ir,je.push(vr);else{var Yr=tr[_t]-1,vt=je[Yr];Yr>0&&Math.abs(vr.distance)<Math.abs(vt.distance)&&(je[Yr]=vr)}},Ee;for(Ee=0;Ee<He;Ee++)lr(I[Ee]);for(Ee=I.length-1;Ee>He-1;Ee--)lr(I[Ee]);I=je,Se()}var Je=e._hoverdata,Ie=[],pr=zN(e),mr=NN(e);for(let vr of I){var sr=gi.makeEventData(vr,vr.trace,vr.cd);if(vr.hovertemplate!==!1){var yr=!1;vr.cd[vr.index]&&vr.cd[vr.index].ht&&(yr=vr.cd[vr.index].ht),vr.hovertemplate=yr||vr.trace.hovertemplate||!1}if(vr.xa&&vr.ya){var ne=vr.x0+vr.xa._offset,ge=vr.x1+vr.xa._offset,ze=vr.y0+vr.ya._offset,Oe=vr.y1+vr.ya._offset,Jr=Math.min(ne,ge),Kr=Math.max(ne,ge),mt=Math.min(ze,Oe),yt=Math.max(ze,Oe);sr.bbox={x0:Jr+mr,x1:Kr+mr,y0:mt+pr,y1:yt+pr},sr.xPixel=(ne+ge)/2,sr.yPixel=(ze+Oe)/2}vr.eventData=[sr],Ie.push(sr)}e._hoverdata=Ie;var Lt=v===\"y\"&&(O.length>1||I.length>1)||v===\"closest\"&&ce&&I.length>1,Qt=_a.combine(l.plot_bgcolor||_a.background,l.paper_bgcolor),Va=PN(I,{gd:e,hovermode:v,rotateLabels:Lt,bgColor:Qt,container:l._hoverlayer,outerContainer:l._paper.node(),commonLabelOpts:l.hoverlabel,hoverdistance:l.hoverdistance}),ea=Va.hoverLabels;if(gi.isUnifiedHover(v)||(exe(ea,Lt,l,Va.commonLabelBoundingBox),FN(ea,Lt,l._invScaleX,l._invScaleY)),n&&n.tagName){var ja=fc.getComponentMethod(\"annotations\",\"hasClickToShow\")(e,Ie);Y5e(nf.select(n),ja?\"pointer\":\"\")}var ln=axe(e,r,Je);if(!n||a||!ln&&!l.hoveranywhere)return;Je&&ln&&e.emit(\"plotly_unhover\",{event:r,points:Je}),oa(e._hoverdata);function oa(vr){e.emit(\"plotly_hover\",{event:r,points:vr,xaxes:A,yaxes:q,xvals:gi.c2dApply(A,U),yvals:gi.c2dApply(q,Y),xPixel:r.pointerX,yPixel:r.pointerY})}}function EN(e){return[e.trace.index,e.index,e.x0,e.y0,e.name,e.attr,e.xa?e.xa._id:\"\",e.ya?e.ya._id:\"\"].join(\",\")}var Q5e=/<extra>([\\s\\S]*)<\\/extra>/;function PN(e,r){var t=r.gd,a=t._fullLayout,n=r.hovermode,i=r.rotateLabels,o=r.bgColor,l=r.container,s=r.outerContainer,u=r.commonLabelOpts||{};if(e.length===0)return[[]];var f=r.fontFamily||of.HOVERFONT,c=r.fontSize||of.HOVERFONTSIZE,v=r.fontWeight||a.font.weight,d=r.fontStyle||a.font.style,p=r.fontVariant||a.font.variant,y=r.fontTextcase||a.font.textcase,m=r.fontLineposition||a.font.lineposition,b=r.fontShadow||a.font.shadow,T=e[0],w=T.xa,x=T.ya,_=n.charAt(0),k=_+\"Label\",A=T[k];if(A===void 0&&w.type===\"multicategory\")for(var q=0;q<e.length&&(A=e[q][k],A===void 0);q++);var C=uc(t,s),E=C.top,P=C.width,R=C.height,N=A!==void 0&&T.distance<=r.hoverdistance&&(n===\"x\"||n===\"y\");if(N){var I=!0,O,U;for(O=0;O<e.length;O++)if(I&&e[O].zLabel===void 0&&(I=!1),U=e[O].hoverinfo||e[O].trace.hoverinfo,U){var Y=Array.isArray(U)?U:U.split(\"+\");if(Y.indexOf(\"all\")===-1&&Y.indexOf(n)===-1){N=!1;break}}I&&(N=!1)}var G=l.selectAll(\"g.axistext\").data(N?[0]:[]);G.enter().append(\"g\").classed(\"axistext\",!0),G.exit().remove();var V={minX:0,maxX:0,minY:0,maxY:0};if(G.each(function(){var Pe=nf.select(this),me=$t.ensureSingle(Pe,\"path\",\"\",function(mt){mt.style({\"stroke-width\":\"1px\"})}),Ae=$t.ensureSingle(Pe,\"text\",\"\",function(mt){mt.attr(\"data-notex\",1)}),He=u.bgcolor||_a.defaultLine,Ze=u.bordercolor||_a.contrast(He),Be=_a.contrast(He),je=u.font,tr={weight:je.weight||v,style:je.style||d,variant:je.variant||p,textcase:je.textcase||y,lineposition:je.lineposition||m,shadow:je.shadow||b,family:je.family||f,size:je.size||c,color:je.color||Be};me.style({fill:He,stroke:Ze}),Ae.text(A).call(ll.font,tr).call(Hi.positionText,0,0).call(Hi.convertToTspans,t),Pe.attr(\"transform\",\"\");var ir=uc(t,Ae.node()),lr,Ee;if(n===\"x\"){var Je=w.side===\"top\"?\"-\":\"\";Ae.attr(\"text-anchor\",\"middle\").call(Hi.positionText,0,w.side===\"top\"?E-ir.bottom-Bt-Wr:E-ir.top+Bt+Wr),lr=w._offset+(T.x0+T.x1)/2,Ee=x._offset+(w.side===\"top\"?0:x._length);var Ie=ir.width/2+Wr,pr=lr;lr<Ie?pr=Ie:lr>a.width-Ie&&(pr=a.width-Ie),me.attr(\"d\",\"M\"+(lr-pr)+\",0L\"+(lr-pr+Bt)+\",\"+Je+Bt+\"H\"+Ie+\"v\"+Je+(Wr*2+ir.height)+\"H\"+-Ie+\"V\"+Je+Bt+\"H\"+(lr-pr-Bt)+\"Z\"),lr=pr,V.minX=lr-Ie,V.maxX=lr+Ie,w.side===\"top\"?(V.minY=Ee-(Wr*2+ir.height),V.maxY=Ee-Wr):(V.minY=Ee+Wr,V.maxY=Ee+(Wr*2+ir.height))}else{var mr,sr,yr;x.side===\"right\"?(mr=\"start\",sr=1,yr=\"\",lr=w._offset+w._length):(mr=\"end\",sr=-1,yr=\"-\",lr=w._offset),Ee=x._offset+(T.y0+T.y1)/2,Ae.attr(\"text-anchor\",mr),me.attr(\"d\",\"M0,0L\"+yr+Bt+\",\"+Bt+\"V\"+(Wr+ir.height/2)+\"h\"+yr+(Wr*2+ir.width)+\"V-\"+(Wr+ir.height/2)+\"H\"+yr+Bt+\"V-\"+Bt+\"Z\"),V.minY=Ee-(Wr+ir.height/2),V.maxY=Ee+(Wr+ir.height/2),x.side===\"right\"?(V.minX=lr+Bt,V.maxX=lr+Bt+(Wr*2+ir.width)):(V.minX=lr-Bt-(Wr*2+ir.width),V.maxX=lr-Bt);var ne=ir.height/2,ge=E-ir.top-ne,ze=\"clip\"+a._uid+\"commonlabel\"+x._id,Oe;if(lr<ir.width+2*Wr+Bt){Oe=\"M-\"+(Bt+Wr)+\"-\"+ne+\"h-\"+(ir.width-Wr)+\"V\"+ne+\"h\"+(ir.width-Wr)+\"Z\";var Jr=ir.width-lr+Wr;Hi.positionText(Ae,Jr,ge),mr===\"end\"&&Ae.selectAll(\"tspan\").each(function(){var mt=nf.select(this),yt=ll.tester.append(\"text\").text(mt.text()).call(ll.font,tr),Lt=uc(t,yt.node());Math.round(Lt.width)<Math.round(ir.width)&&mt.attr(\"x\",Jr-Lt.width),yt.remove()})}else Hi.positionText(Ae,sr*(Wr+Bt),ge),Oe=null;var Kr=a._topclips.selectAll(\"#\"+ze).data(Oe?[0]:[]);Kr.enter().append(\"clipPath\").attr(\"id\",ze).append(\"path\"),Kr.exit().remove(),Kr.select(\"path\").attr(\"d\",Oe),ll.setClipUrl(Ae,Oe?ze:null,t)}Pe.attr(\"transform\",O6(lr,Ee))}),gi.isUnifiedHover(n)){l.selectAll(\"g.hovertext\").remove();let Pe=e.filter(me=>me.hoverinfo!==\"none\");if(Pe.length===0)return[];var W=a.hoverlabel,j=W.font,J=Pe[0],te=((n===\"x unified\"?J.xa:J.ya).unifiedhovertitle||{}).text,ae=te?$t.hovertemplateString({data:n===\"x unified\"?[{xa:J.xa,x:J.xVal}]:[{ya:J.ya,y:J.yVal}],fallback:J.trace.hovertemplatefallback,locale:a._d3locale,template:te}):A,se={showlegend:!0,legend:{title:{text:ae,font:j},font:j,bgcolor:W.bgcolor,bordercolor:W.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:a.legend?a.legend.traceorder:void 0,orientation:\"v\"}},$={font:j};j5e(se,$,t._fullData);var fe=$.legend;fe.entries=[];for(var ie=0;ie<Pe.length;ie++){var ue=Pe[ie];if(ue.hoverinfo!==\"none\"){var ce=kN(ue,!0,n,a,A),oe=ce[0],be=ce[1];ue.name=be,be!==\"\"?ue.text=be+\" : \"+oe:ue.text=oe;var Re=ue.cd[ue.index];Re&&(Re.mc&&(ue.mc=Re.mc),Re.mcc&&(ue.mc=Re.mcc),Re.mlc&&(ue.mlc=Re.mlc),Re.mlcc&&(ue.mlc=Re.mlcc),Re.mlw&&(ue.mlw=Re.mlw),Re.mrc&&(ue.mrc=Re.mrc),Re.dir&&(ue.dir=Re.dir)),ue._distinct=!0,fe.entries.push([ue])}}fe.entries.sort(function(me,Ae){var He=a.hoversort;if(He===\"value descending\"||He===\"value ascending\"){var Ze=n.charAt(0)===\"x\"?\"y\":\"x\",Be=me[0][Ze+\"LabelVal\"],je=Ae[0][Ze+\"LabelVal\"];if(Be!==je)return He===\"value descending\"?je-Be:Be-je}return me[0].trace.index-Ae[0].trace.index}),fe.layer=l,fe._inHover=!0,fe._groupTitleFont=W.grouptitlefont,W5e(t,fe);var ye=l.select(\"g.legend\"),Ce=uc(t,ye.node()),Me=Ce.width+2*Wr,Le=Ce.height+2*Wr,De=Pe[0],Ne=(De.x0+De.x1)/2,qe=(De.y0+De.y1)/2,Xe=!(fc.traceIs(De.trace,\"bar-like\")||fc.traceIs(De.trace,\"box-violin\")),$e,We;_===\"y\"?Xe?(We=qe-Wr,$e=qe+Wr):(We=Math.min.apply(null,Pe.map(function(me){return Math.min(me.y0,me.y1)})),$e=Math.max.apply(null,Pe.map(function(me){return Math.max(me.y0,me.y1)}))):We=$e=$t.mean(Pe.map(function(me){return(me.y0+me.y1)/2}))-Le/2;var Se,Fe;_===\"x\"?Xe?(Se=Ne+Wr,Fe=Ne-Wr):(Se=Math.max.apply(null,Pe.map(function(me){return Math.max(me.x0,me.x1)})),Fe=Math.min.apply(null,Pe.map(function(me){return Math.min(me.x0,me.x1)}))):Se=Fe=$t.mean(Pe.map(function(me){return(me.x0+me.x1)/2}))-Me/2;var Qe=w._offset,re=x._offset;$e+=re,Se+=Qe,Fe+=Qe-Me,We+=re-Le;var xe,Ge;return Se+Me<P&&Se>=0?xe=Se:Fe+Me<P&&Fe>=0?xe=Fe:Qe+Me<P?xe=Qe:Se-Ne<Ne-Fe+Me?xe=P-Me:xe=0,xe+=Wr,$e+Le<R&&$e>=0?Ge=$e:We+Le<R&&We>=0?Ge=We:re+Le<R?Ge=re:$e-qe<qe-We+Le?Ge=R-Le:Ge=0,Ge+=Wr,ye.attr(\"transform\",O6(xe-1,Ge-1)),ye}var cr=l.selectAll(\"g.hovertext\").data(e,function(Pe){return EN(Pe)});return cr.enter().append(\"g\").classed(\"hovertext\",!0).each(function(){var Pe=nf.select(this);Pe.append(\"rect\").call(_a.fill,_a.addOpacity(o,.8)),Pe.append(\"text\").classed(\"name\",!0),Pe.append(\"path\").style(\"stroke-width\",\"1px\"),Pe.append(\"text\").classed(\"nums\",!0).call(ll.font,{weight:v,style:d,variant:p,textcase:y,lineposition:m,shadow:b,family:f,size:c})}),cr.exit().remove(),cr.each(function(Pe){var me=nf.select(this).attr(\"transform\",\"\"),Ae=Pe.color;Array.isArray(Ae)&&(Ae=Ae[Pe.eventData[0].pointNumber]);var He=Pe.bgcolor||Ae,Ze=_a.combine(_a.opacity(He)?He:_a.defaultLine,o),Be=_a.combine(_a.opacity(Ae)?Ae:_a.defaultLine,o),je=Pe.borderColor||_a.contrast(Ze),tr=kN(Pe,N,n,a,A,me),ir=tr[0],lr=tr[1],Ee=me.select(\"text.nums\").call(ll.font,{family:Pe.fontFamily||f,size:Pe.fontSize||c,color:Pe.fontColor||je,weight:Pe.fontWeight||v,style:Pe.fontStyle||d,variant:Pe.fontVariant||p,textcase:Pe.fontTextcase||y,lineposition:Pe.fontLineposition||m,shadow:Pe.fontShadow||b}).text(ir).attr(\"data-notex\",1).call(Hi.positionText,0,0).call(Hi.convertToTspans,t),Je=me.select(\"text.name\"),Ie=0,pr=0;if(lr&&lr!==ir){Je.call(ll.font,{family:Pe.fontFamily||f,size:Pe.fontSize||c,color:Be,weight:Pe.fontWeight||v,style:Pe.fontStyle||d,variant:Pe.fontVariant||p,textcase:Pe.fontTextcase||y,lineposition:Pe.fontLineposition||m,shadow:Pe.fontShadow||b}).text(lr).attr(\"data-notex\",1).call(Hi.positionText,0,0).call(Hi.convertToTspans,t);var mr=uc(t,Je.node());Ie=mr.width+2*Wr,pr=mr.height+2*Wr}else Je.remove(),me.select(\"rect\").remove();me.select(\"path\").style({fill:Ze,stroke:je});var sr=Pe.xa._offset+(Pe.x0+Pe.x1)/2,yr=Pe.ya._offset+(Pe.y0+Pe.y1)/2,ne=Math.abs(Pe.x1-Pe.x0),ge=Math.abs(Pe.y1-Pe.y0),ze=uc(t,Ee.node()),Oe=ze.width/a._invScaleX,Jr=ze.height/a._invScaleY;Pe.ty0=(E-ze.top)/a._invScaleY,Pe.bx=Oe+2*Wr,Pe.by=Math.max(Jr+2*Wr,pr),Pe.anchor=\"start\",Pe.txwidth=Oe,Pe.tx2width=Ie,Pe.offset=0;var Kr=(Oe+Bt+Wr+Ie)*a._invScaleX,mt,yt;if(i)Pe.pos=sr,mt=yr+ge/2+Kr<=R,yt=yr-ge/2-Kr>=0,(Pe.idealAlign===\"top\"||!mt)&&yt?(yr-=ge/2,Pe.anchor=\"end\"):mt?(yr+=ge/2,Pe.anchor=\"start\"):Pe.anchor=\"middle\",Pe.crossPos=yr;else{if(Pe.pos=yr,mt=sr+ne/2+Kr<=P,yt=sr-ne/2-Kr>=0,(Pe.idealAlign===\"left\"||!mt)&&yt)sr-=ne/2,Pe.anchor=\"end\";else if(mt)sr+=ne/2,Pe.anchor=\"start\";else{Pe.anchor=\"middle\";var Lt=Kr/2,Qt=sr+Lt-P,Va=sr-Lt;Qt>0&&(sr-=Qt),Va<0&&(sr+=-Va)}Pe.crossPos=sr}Ee.attr(\"text-anchor\",Pe.anchor),Ie&&Je.attr(\"text-anchor\",Pe.anchor),me.attr(\"transform\",O6(sr,yr)+(i?U5e(DN):\"\"))}),{hoverLabels:cr,commonLabelBoundingBox:V}}function kN(e,r,t,a,n,i){var c,v;var o=\"\",l=\"\";e.nameOverride!==void 0&&(e.name=e.nameOverride),e.name&&(e.trace._meta&&(e.name=$t.templateString(e.name,e.trace._meta)),o=LN(e.name,e.nameLength));var s=t.charAt(0),u=s===\"x\"?\"y\":\"x\";e.zLabel!==void 0?(e.xLabel!==void 0&&(l+=\"x: \"+e.xLabel+\"<br>\"),e.yLabel!==void 0&&(l+=\"y: \"+e.yLabel+\"<br>\"),e.trace.type!==\"choropleth\"&&e.trace.type!==\"choroplethmap\"&&(l+=(l?\"z: \":\"\")+e.zLabel)):r&&e[s+\"Label\"]===n?l=e[u+\"Label\"]||\"\":e.xLabel===void 0?e.yLabel!==void 0&&e.trace.type!==\"scattercarpet\"&&(l=e.yLabel):e.yLabel===void 0?l=e.xLabel:l=\"(\"+e.xLabel+\", \"+e.yLabel+\")\",(e.text||e.text===0)&&!Array.isArray(e.text)&&(l+=(l?\"<br>\":\"\")+e.text),e.extraText!==void 0&&(l+=(l?\"<br>\":\"\")+e.extraText),i&&l===\"\"&&!e.hovertemplate&&(o===\"\"&&i.remove(),l=o),(v=(c=e.trace)==null?void 0:c.hoverlabel)!=null&&v.split&&(e.hovertemplate=\"\");let{hovertemplate:f=!1}=e;if(f){let d=e.hovertemplateLabels||e;e[s+\"Label\"]!==n&&(d[s+\"other\"]=d[s+\"Val\"],d[s+\"otherLabel\"]=d[s+\"Label\"]),l=$t.hovertemplateString({data:[e.eventData[0]||{},e.trace._meta],fallback:e.trace.hovertemplatefallback,labels:d,locale:a._d3locale,template:f}),l=l.replace(Q5e,(p,y)=>(o=LN(y,e.nameLength),\"\"))}return[l,o]}function exe(e,r,t,a){var n=r?\"xa\":\"ya\",i=r?\"ya\":\"xa\",o=0,l=1,s=e.size(),u=new Array(s),f=0,c=a.minX,v=a.maxX,d=a.minY,p=a.maxY,y=function(U){return U*t._invScaleX},m=function(U){return U*t._invScaleY};e.each(function(U){var Y=U[n],G=U[i],V=Y._id.charAt(0)===\"x\",W=Y.range;f===0&&W&&W[0]>W[1]!==V&&(l=-1);var j=0,J=V?t.width:t.height;if(t.hovermode===\"x\"||t.hovermode===\"y\"){var te=RN(U,r),ae=U.anchor,se=ae===\"end\"?-1:1,$,fe;if(ae===\"middle\")$=U.crossPos+(V?m(te.y-U.by/2):y(U.bx/2+U.tx2width/2)),fe=$+(V?m(U.by):y(U.bx));else if(V)$=U.crossPos+m(Bt+te.y)-m(U.by/2-Bt),fe=$+m(U.by);else{var ie=y(se*Bt+te.x),ue=ie+y(se*U.bx);$=U.crossPos+Math.min(ie,ue),fe=U.crossPos+Math.max(ie,ue)}V?d!==void 0&&p!==void 0&&Math.min(fe,p)-Math.max($,d)>1&&(G.side===\"left\"?(j=G._mainLinePosition,J=t.width):J=G._mainLinePosition):c!==void 0&&v!==void 0&&Math.min(fe,v)-Math.max($,c)>1&&(G.side===\"top\"?(j=G._mainLinePosition,J=t.height):J=G._mainLinePosition)}u[f++]=[{datum:U,traceIndex:U.trace.index,dp:0,pos:U.pos,posref:U.posref,size:U.by*(V?X5e:1)/2,pmin:j,pmax:J}]}),u.sort(function(U,Y){return U[0].posref-Y[0].posref||l*(Y[0].traceIndex-U[0].traceIndex)});var b,T,w,x,_,k,A;function q(U){var Y=U[0],G=U[U.length-1];if(T=Y.pmin-Y.pos-Y.dp+Y.size,w=G.pos+G.dp+G.size-Y.pmax,T>.01){for(_=U.length-1;_>=0;_--)U[_].dp+=T;b=!1}if(!(w<.01)){if(T<-.01){for(_=U.length-1;_>=0;_--)U[_].dp-=w;b=!1}if(b){var V=0;for(x=0;x<U.length;x++)k=U[x],k.pos+k.dp+k.size>Y.pmax&&V++;for(x=U.length-1;x>=0&&!(V<=0);x--)k=U[x],k.pos>Y.pmax-1&&(k.del=!0,V--);for(x=0;x<U.length&&!(V<=0);x++)if(k=U[x],k.pos<Y.pmin+1)for(k.del=!0,V--,w=k.size*2,_=U.length-1;_>=0;_--)U[_].dp-=w;for(x=U.length-1;x>=0&&!(V<=0);x--)k=U[x],k.pos+k.dp+k.size>Y.pmax&&(k.del=!0,V--)}}}for(;!b&&o<=s;){for(o++,b=!0,x=0;x<u.length-1;){var C=u[x],E=u[x+1],P=C[C.length-1],R=E[0];if(T=P.pos+P.dp+P.size-R.pos-R.dp+R.size,T>.01){for(_=E.length-1;_>=0;_--)E[_].dp+=T;for(C.push.apply(C,E),u.splice(x+1,1),A=0,_=C.length-1;_>=0;_--)A+=C[_].dp;for(w=A/C.length,_=C.length-1;_>=0;_--)C[_].dp-=w;b=!1}else x++}u.forEach(q)}for(x=u.length-1;x>=0;x--){var N=u[x];for(_=N.length-1;_>=0;_--){var I=N[_],O=I.datum;O.offset=I.dp,O.del=I.del}}}function RN(e,r){var t=0,a=e.offset;return r&&(a*=-$5e,t=e.offset*Z5e),{x:t,y:a}}function rxe(e){var r={start:1,end:-1,middle:0}[e.anchor],t=r*(Bt+Wr),a=t+r*(e.txwidth+Wr),n=e.anchor===\"middle\";return n&&(t-=e.tx2width/2,a+=e.txwidth/2+Wr),{alignShift:r,textShiftX:t,text2ShiftX:a}}function FN(e,r,t,a){var n=function(o){return o*t},i=function(o){return o*a};e.each(function(o){var l=nf.select(this);if(o.del)return l.remove();var s=l.select(\"text.nums\"),u=o.anchor,f=u===\"end\"?-1:1,c=rxe(o),v=RN(o,r),d=v.x,p=v.y,y=u===\"middle\",m=\"hoverlabel\"in o.trace?o.trace.hoverlabel.showarrow:!0,b;y?b=\"M-\"+n(o.bx/2+o.tx2width/2)+\",\"+i(p-o.by/2)+\"h\"+n(o.bx)+\"v\"+i(o.by)+\"h-\"+n(o.bx)+\"Z\":m?b=\"M0,0L\"+n(f*Bt+d)+\",\"+i(Bt+p)+\"v\"+i(o.by/2-Bt)+\"h\"+n(f*o.bx)+\"v-\"+i(o.by)+\"H\"+n(f*Bt+d)+\"V\"+i(p-Bt)+\"Z\":b=\"M\"+n(f*Bt+d)+\",\"+i(p-o.by/2)+\"h\"+n(f*o.bx)+\"v\"+i(o.by)+\"h\"+n(-f*o.bx)+\"Z\",l.select(\"path\").attr(\"d\",b);var T=d+c.textShiftX,w=p+o.ty0-o.by/2+Wr,x=o.textAlign||\"auto\";x!==\"auto\"&&(x===\"left\"&&u!==\"start\"?(s.attr(\"text-anchor\",\"start\"),T=y?-o.bx/2-o.tx2width/2+Wr:-o.bx-Wr):x===\"right\"&&u!==\"end\"&&(s.attr(\"text-anchor\",\"end\"),T=y?o.bx/2-o.tx2width/2-Wr:o.bx+Wr)),s.call(Hi.positionText,n(T),i(w)),o.tx2width&&(l.select(\"text.name\").call(Hi.positionText,n(c.text2ShiftX+c.alignShift*Wr+d),i(p+o.ty0-o.by/2+Wr)),l.select(\"rect\").call(ll.setRect,n(c.text2ShiftX+(c.alignShift-1)*o.tx2width/2+d),i(p-o.by/2-1),n(o.tx2width),i(o.by+2)))})}function txe(e,r){var t=e.index,a=e.trace||{},n=e.cd[0],i=e.cd[t]||{};function o(v){return v||Ol(v)&&v===0}var l=Array.isArray(t)?function(v,d){var p=$t.castOption(n,t,v);return o(p)?p:$t.extractOption({},a,\"\",d)}:function(v,d){return $t.extractOption(i,a,v,d)};function s(v,d,p){var y=l(d,p);o(y)&&(e[v]=y)}if(s(\"hoverinfo\",\"hi\",\"hoverinfo\"),s(\"bgcolor\",\"hbg\",\"hoverlabel.bgcolor\"),s(\"borderColor\",\"hbc\",\"hoverlabel.bordercolor\"),s(\"fontFamily\",\"htf\",\"hoverlabel.font.family\"),s(\"fontSize\",\"hts\",\"hoverlabel.font.size\"),s(\"fontColor\",\"htc\",\"hoverlabel.font.color\"),s(\"fontWeight\",\"htw\",\"hoverlabel.font.weight\"),s(\"fontStyle\",\"hty\",\"hoverlabel.font.style\"),s(\"fontVariant\",\"htv\",\"hoverlabel.font.variant\"),s(\"nameLength\",\"hnl\",\"hoverlabel.namelength\"),s(\"textAlign\",\"hta\",\"hoverlabel.align\"),e.posref=r===\"y\"||r===\"closest\"&&a.orientation===\"h\"?e.xa._offset+(e.x0+e.x1)/2:e.ya._offset+(e.y0+e.y1)/2,e.x0=$t.constrain(e.x0,0,e.xa._length),e.x1=$t.constrain(e.x1,0,e.xa._length),e.y0=$t.constrain(e.y0,0,e.ya._length),e.y1=$t.constrain(e.y1,0,e.ya._length),e.xLabelVal!==void 0&&(e.xLabel=\"xLabel\"in e?e.xLabel:sl.hoverLabelText(e.xa,e.xLabelVal,a.xhoverformat),e.xVal=e.xa.c2d(e.xLabelVal)),e.yLabelVal!==void 0&&(e.yLabel=\"yLabel\"in e?e.yLabel:sl.hoverLabelText(e.ya,e.yLabelVal,a.yhoverformat),e.yVal=e.ya.c2d(e.yLabelVal)),e.zLabelVal!==void 0&&e.zLabel===void 0&&(e.zLabel=String(e.zLabelVal)),!isNaN(e.xerr)&&!(e.xa.type===\"log\"&&e.xerr<=0)){var u=sl.tickText(e.xa,e.xa.c2l(e.xerr),\"hover\").text;e.xerrneg!==void 0?e.xLabel+=\" +\"+u+\" / -\"+sl.tickText(e.xa,e.xa.c2l(e.xerrneg),\"hover\").text:e.xLabel+=\" \\xB1 \"+u,r===\"x\"&&(e.distance+=1)}if(!isNaN(e.yerr)&&!(e.ya.type===\"log\"&&e.yerr<=0)){var f=sl.tickText(e.ya,e.ya.c2l(e.yerr),\"hover\").text;e.yerrneg!==void 0?e.yLabel+=\" +\"+f+\" / -\"+sl.tickText(e.ya,e.ya.c2l(e.yerrneg),\"hover\").text:e.yLabel+=\" \\xB1 \"+f,r===\"y\"&&(e.distance+=1)}var c=e.hoverinfo||e.trace.hoverinfo;return c&&c!==\"all\"&&(c=Array.isArray(c)?c:c.split(\"+\"),c.indexOf(\"x\")===-1&&(e.xLabel=void 0),c.indexOf(\"y\")===-1&&(e.yLabel=void 0),c.indexOf(\"z\")===-1&&(e.zLabel=void 0),c.indexOf(\"text\")===-1&&(e.text=void 0),c.indexOf(\"name\")===-1&&(e.name=void 0)),e}function SN(e,r,t){var a=t.container,n=t.fullLayout,i=n._size,o=t.event,l=!!r.hLinePoint,s=!!r.vLinePoint,u,f;if(a.selectAll(\".spikeline\").remove(),!!(s||l)){var c=_a.combine(n.plot_bgcolor,n.paper_bgcolor);if(l){var v=r.hLinePoint,d,p;u=v&&v.xa,f=v&&v.ya;var y=f.spikesnap;y===\"cursor\"?(d=o.pointerX,p=o.pointerY):(d=u._offset+v.x,p=f._offset+v.y);var m=_a.wcagContrast(v.color,c)<1.5?_a.contrast(c):v.color,b=f.spikemode,T=f.spikethickness,w=f.spikecolor||m,x=sl.getPxPosition(e,f),_,k;if(b.indexOf(\"toaxis\")!==-1||b.indexOf(\"across\")!==-1){if(b.indexOf(\"toaxis\")!==-1&&(_=x,k=d),b.indexOf(\"across\")!==-1){var A=f._counterDomainMin,q=f._counterDomainMax;f.anchor===\"free\"&&(A=Math.min(A,f.position),q=Math.max(q,f.position)),_=i.l+A*i.w,k=i.l+q*i.w}a.insert(\"line\",\":first-child\").attr({x1:_,x2:k,y1:p,y2:p,\"stroke-width\":T,stroke:w,\"stroke-dasharray\":ll.dashStyle(f.spikedash,T)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),a.insert(\"line\",\":first-child\").attr({x1:_,x2:k,y1:p,y2:p,\"stroke-width\":T+2,stroke:c}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}b.indexOf(\"marker\")!==-1&&a.insert(\"circle\",\":first-child\").attr({cx:x+(f.side!==\"right\"?T:-T),cy:p,r:T,fill:w}).classed(\"spikeline\",!0)}if(s){var C=r.vLinePoint,E,P;u=C&&C.xa,f=C&&C.ya;var R=u.spikesnap;R===\"cursor\"?(E=o.pointerX,P=o.pointerY):(E=u._offset+C.x,P=f._offset+C.y);var N=_a.wcagContrast(C.color,c)<1.5?_a.contrast(c):C.color,I=u.spikemode,O=u.spikethickness,U=u.spikecolor||N,Y=sl.getPxPosition(e,u),G,V;if(I.indexOf(\"toaxis\")!==-1||I.indexOf(\"across\")!==-1){if(I.indexOf(\"toaxis\")!==-1&&(G=Y,V=P),I.indexOf(\"across\")!==-1){var W=u._counterDomainMin,j=u._counterDomainMax;u.anchor===\"free\"&&(W=Math.min(W,u.position),j=Math.max(j,u.position)),G=i.t+(1-j)*i.h,V=i.t+(1-W)*i.h}a.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:G,y2:V,\"stroke-width\":O,stroke:U,\"stroke-dasharray\":ll.dashStyle(u.spikedash,O)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),a.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:G,y2:V,\"stroke-width\":O+2,stroke:c}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}I.indexOf(\"marker\")!==-1&&a.insert(\"circle\",\":first-child\").attr({cx:E,cy:Y-(u.side!==\"top\"?O:-O),r:O,fill:U}).classed(\"spikeline\",!0)}}}function axe(e,r,t){if(!t||t.length!==e._hoverdata.length)return!0;for(var a=t.length-1;a>=0;a--){var n=t[a],i=e._hoverdata[a];if(n.curveNumber!==i.curveNumber||String(n.pointNumber)!==String(i.pointNumber)||String(n.pointNumbers)!==String(i.pointNumbers)||n.binNumber!==i.binNumber)return!0}return!1}function qN(e,r){return!r||r.vLinePoint!==e._spikepoints.vLinePoint||r.hLinePoint!==e._spikepoints.hLinePoint}function LN(e,r){return Hi.plainText(e||\"\",{len:r,allowedTags:[\"br\",\"sub\",\"sup\",\"b\",\"i\",\"em\",\"s\",\"u\"]})}function nxe(e,r){for(var t=r.charAt(0),a=[],n=[],i=[],o=0;o<e.length;o++){var l=e[o];fc.traceIs(l.trace,\"bar-like\")||fc.traceIs(l.trace,\"box-violin\")?i.push(l):l.trace[t+\"period\"]?n.push(l):a.push(l)}return a.concat(n).concat(i)}function CN(e,r,t){var a=r[e+\"a\"],n=r[e+\"Val\"],i=r.cd[0];if(a.type===\"category\"||a.type===\"multicategory\")n=a._categoriesMap[n];else if(a.type===\"date\"){var o=r.trace[e+\"periodalignment\"];if(o){var l=r.cd[r.index],s=l[e+\"Start\"];s===void 0&&(s=l[e]);var u=l[e+\"End\"];u===void 0&&(u=l[e]);var f=u-s;o===\"end\"?n+=f:o===\"middle\"&&(n+=f/2)}n=a.d2c(n)}return i&&i.t&&i.t.posLetter===a._id&&(t.boxmode===\"group\"||t.violinmode===\"group\")&&(n+=i.t.dPos),n}var zN=e=>e.offsetTop+e.clientTop,NN=e=>e.offsetLeft+e.clientLeft;function uc(e,r){var t=e._fullLayout,a=r.getBoundingClientRect(),n=a.left,i=a.top,o=n+a.width,l=i+a.height,s=$t.apply3DTransform(t._invTransform)(n,i),u=$t.apply3DTransform(t._invTransform)(o,l),f=s[0],c=s[1],v=u[0],d=u[1];return{x:f,y:c,width:v-f,height:d-c,top:Math.min(c,d),left:Math.min(f,v),right:Math.max(f,v),bottom:Math.max(c,d)}}});var Fm=z(($Ye,IN)=>{\"use strict\";var ixe=ke(),oxe=Sr(),lxe=qo().isUnifiedHover;IN.exports=function(r,t,a,n){n=n||{};var i=t.legend;function o(l){n.font[l]||(n.font[l]=i?t.legend.font[l]:t.font[l])}t&&lxe(t.hovermode)&&(n.font||(n.font={}),o(\"size\"),o(\"family\"),o(\"color\"),o(\"weight\"),o(\"style\"),o(\"variant\"),i?(n.bgcolor||(n.bgcolor=oxe.combine(t.legend.bgcolor,t.paper_bgcolor)),n.bordercolor||(n.bordercolor=t.legend.bordercolor)):n.bgcolor||(n.bgcolor=t.paper_bgcolor)),a(\"hoverlabel.bgcolor\",n.bgcolor),a(\"hoverlabel.bordercolor\",n.bordercolor),a(\"hoverlabel.namelength\",n.namelength),a(\"hoverlabel.showarrow\",n.showarrow),ixe.coerceFont(a,\"hoverlabel.font\",n.font),a(\"hoverlabel.align\",n.align)}});var ON=z((JYe,BN)=>{\"use strict\";var sxe=ke(),uxe=Fm(),fxe=b0();BN.exports=function(r,t){function a(n,i){return sxe.coerce(r,t,fxe,n,i)}uxe(r,t,a)}});var GN=z((KYe,UN)=>{\"use strict\";var HN=ke(),cxe=P1(),vxe=Fm();UN.exports=function(r,t,a,n){function i(l,s){return HN.coerce(r,t,cxe,l,s)}var o=HN.extendFlat({},n.hoverlabel);t.hovertemplate&&(o.namelength=-1),vxe(r,t,i,o)}});var Y6=z((QYe,YN)=>{\"use strict\";var hxe=ke(),dxe=b0();YN.exports=function(r,t){function a(n,i){return t[n]!==void 0?t[n]:hxe.coerce(r,t,dxe,n,i)}return a(\"clickmode\"),a(\"hoversubplots\"),a(\"hoveranywhere\"),a(\"clickanywhere\"),a(\"hovermode\")}});var WN=z((eVe,jN)=>{\"use strict\";var VN=ke(),pxe=b0(),mxe=Y6(),yxe=Fm();jN.exports=function(r,t){function a(u,f){return VN.coerce(r,t,pxe,u,f)}var n=mxe(r,t);n&&(a(\"hoverdistance\"),a(\"spikedistance\"),n.indexOf(\"unified\")!==-1&&a(\"hoversort\"));var i=a(\"dragmode\");i===\"select\"&&a(\"selectdirection\");var o=t._has(\"map\"),l=t._has(\"geo\"),s=t._basePlotModules.length;t.dragmode===\"zoom\"&&((o||l)&&s===1||o&&l&&s===2)&&(t.dragmode=\"pan\"),yxe(r,t,a),VN.coerceFont(a,\"hoverlabel.grouptitlefont\",t.hoverlabel.font)}});var $N=z((rVe,ZN)=>{\"use strict\";var V6=ke(),XN=Tr();ZN.exports=function(r){var t=r.calcdata,a=r._fullLayout;function n(u){return function(f){return V6.coerceHoverinfo({hoverinfo:f},{_module:u._module},a)}}for(var i=0;i<t.length;i++){var o=t[i],l=o[0].trace;if(!XN.traceIs(l,\"pie-like\")){var s=XN.traceIs(l,\"2dMap\")?gxe:V6.fillArray;s(l.hoverinfo,o,\"hi\",n(l)),l.hovertemplate&&s(l.hovertemplate,o,\"ht\"),l.hoverlabel&&(s(l.hoverlabel.bgcolor,o,\"hbg\"),s(l.hoverlabel.bordercolor,o,\"hbc\"),s(l.hoverlabel.font.size,o,\"hts\"),s(l.hoverlabel.font.color,o,\"htc\"),s(l.hoverlabel.font.family,o,\"htf\"),s(l.hoverlabel.font.weight,o,\"htw\"),s(l.hoverlabel.font.style,o,\"hty\"),s(l.hoverlabel.font.variant,o,\"htv\"),s(l.hoverlabel.namelength,o,\"hnl\"),s(l.hoverlabel.align,o,\"hta\"),s(l.hoverlabel.showarrow,o,\"htsa\"))}}};function gxe(e,r,t,a){a=a||V6.identity,Array.isArray(e)&&(r[0][t]=a(e))}});var QN=z((tVe,KN)=>{\"use strict\";var bxe=Tr(),JN=qo(),xxe=G6().hover;KN.exports=function(r,t,a){var n=bxe.getComponentMethod(\"annotations\",\"onClick\")(r,r._hoverdata),i=r._fullLayout;a!==void 0&&xxe(r,t,a,!0);function o(){var s,u,f,c,v,d;var l={points:r._hoverdata,event:t};(s=l.xaxes)!=null||(l.xaxes=r._hoverXAxes),(u=l.yaxes)!=null||(l.yaxes=r._hoverYAxes),(f=l.xvals)!=null||(l.xvals=r._hoverXVals&&JN.c2dApply(r._hoverXAxes,r._hoverXVals)),(c=l.yvals)!=null||(l.yvals=r._hoverYVals&&JN.c2dApply(r._hoverYAxes,r._hoverYVals)),(v=l.xPixel)!=null||(l.xPixel=r._hoverPointerX),(d=l.yPixel)!=null||(l.yPixel=r._hoverPointerY),r.emit(\"plotly_click\",l)}(r._hoverdata||i.clickanywhere)&&t&&t.target&&(r._hoverdata||(r._hoverdata=[]),n&&n.then?n.then(o):o(),t.stopImmediatePropagation&&t.stopImmediatePropagation())}});var In=z((aVe,tI)=>{\"use strict\";var _xe=Er(),zm=ke(),wxe=Bi(),Vh=qo(),eI=b0(),rI=G6();tI.exports={moduleType:\"component\",name:\"fx\",constants:Jv(),schema:{layout:eI},attributes:P1(),layoutAttributes:eI,supplyLayoutGlobalDefaults:ON(),supplyDefaults:GN(),supplyLayoutDefaults:WN(),calc:$N(),getDistanceFunction:Vh.getDistanceFunction,getClosest:Vh.getClosest,inbox:Vh.inbox,quadrature:Vh.quadrature,appendArrayPointValue:Vh.appendArrayPointValue,castHoverOption:Axe,castHoverinfo:Mxe,hover:rI.hover,unhover:wxe.unhover,loneHover:rI.loneHover,loneUnhover:Txe,click:QN()};function Txe(e){var r=zm.isD3Selection(e)?e:_xe.select(e);r.selectAll(\"g.hovertext\").remove(),r.selectAll(\".spikeline\").remove()}function Axe(e,r,t){return zm.castOption(e,r,\"hoverlabel.\"+t)}function Mxe(e,r,t){function a(n){return zm.coerceHoverinfo({hoverinfo:n},{_module:e._module},r)}return zm.castOption(e,t,\"hoverinfo\",a)}});var lf=z(Hl=>{\"use strict\";Hl.selectMode=function(e){return e===\"lasso\"||e===\"select\"};Hl.drawMode=function(e){return e===\"drawclosedpath\"||e===\"drawopenpath\"||e===\"drawline\"||e===\"drawrect\"||e===\"drawcircle\"};Hl.openMode=function(e){return e===\"drawline\"||e===\"drawopenpath\"};Hl.rectMode=function(e){return e===\"select\"||e===\"drawline\"||e===\"drawrect\"||e===\"drawcircle\"};Hl.freeMode=function(e){return e===\"lasso\"||e===\"drawclosedpath\"||e===\"drawopenpath\"};Hl.selectingOrDrawing=function(e){return Hl.freeMode(e)||Hl.rectMode(e)}});var Nm=z((iVe,aI)=>{\"use strict\";aI.exports=function(r){var t=r._fullLayout;t._glcanvas&&t._glcanvas.size()&&t._glcanvas.each(function(a){a.regl&&a.regl.clear({color:!0,depth:!0})})}});var Im=z((oVe,nI)=>{\"use strict\";nI.exports={undo:{width:857.1,height:1e3,path:\"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z\",transform:\"matrix(1 0 0 -1 0 850)\"},home:{width:928.6,height:1e3,path:\"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"camera-retro\":{width:1e3,height:1e3,path:\"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z\",transform:\"matrix(1 0 0 -1 0 850)\"},curlybraces:{width:18,height:16,path:\"M 9,4 C 7.354992,4 6,5.354992 6,7 V 9 C 6,9.2999997 5.8778068,9.8883542 5.5878906,10.291016 5.2979744,10.693677 4.9222213,11 4,11 a 1.0001,1.0001 0 0 0 0,2 c 0.2999997,0 0.8883542,0.122193 1.2910156,0.412109 C 5.693677,13.702026 6,14.077779 6,15 v 2 c 0,1.645008 1.354992,3 3,3 h 0.5 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 H 9 C 8.4358712,18 8,17.564129 8,17 V 15 C 8,13.625876 7.3766799,12.602305 6.6113281,11.96875 6.8086352,11.794047 7.0679793,11.657537 7.2109375,11.458984 7.8210204,10.611647 8,9.6999993 8,9 V 7 C 8,6.4358712 8.4358712,6 9,6 h 0.5 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z m 5.5,0 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 H 15 c 0.564129,0 1,0.4358712 1,1 v 2 c 0,0.6999993 0.17898,1.611647 0.789062,2.458984 0.142959,0.198553 0.402303,0.335063 0.59961,0.509766 C 16.62332,12.602305 16,13.625876 16,15 v 2 c 0,0.564129 -0.435871,1 -1,1 h -0.5 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 H 15 c 1.645008,0 3,-1.354992 3,-3 v -2 c 0,-0.922221 0.306323,-1.297974 0.708984,-1.587891 C 19.111646,13.122193 19.7,13 20,13 a 1.0001,1.0001 0 0 0 0,-2 C 19.077779,11 18.702026,10.693677 18.412109,10.291016 18.122193,9.8883542 18,9.2999997 18,9 V 7 C 18,5.354992 16.645008,4 15,4 Z\",transform:\"translate(-3 -4)\"},zoombox:{width:1e3,height:1e3,path:\"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z\",transform:\"matrix(1 0 0 -1 0 850)\"},pan:{width:1e3,height:1e3,path:\"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_plus:{width:875,height:1e3,path:\"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_minus:{width:875,height:1e3,path:\"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},autoscale:{width:1e3,height:1e3,path:\"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_basic:{width:1500,height:1e3,path:\"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_compare:{width:1125,height:1e3,path:\"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z\",transform:\"matrix(1 0 0 -1 0 850)\"},plotlylogo:{width:1542,height:1e3,path:\"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"z-axis\":{width:1e3,height:1e3,path:\"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"3d_rotate\":{width:1e3,height:1e3,path:\"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z\",transform:\"matrix(1 0 0 -1 0 850)\"},camera:{width:1e3,height:1e3,path:\"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z\",transform:\"matrix(1 0 0 -1 0 850)\"},movie:{width:1e3,height:1e3,path:\"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z\",transform:\"matrix(1 0 0 -1 0 850)\"},question:{width:857.1,height:1e3,path:\"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z\",transform:\"matrix(1 0 0 -1 0 850)\"},disk:{width:857.1,height:1e3,path:\"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z\",transform:\"matrix(1 0 0 -1 0 850)\"},cloudupload:{width:640,height:640,path:\"M451.5 160C434.9 160 418.8 164.5 404.7 172.7C388.9 156.7 370.5 143.3 350.2 133.2C378.4 109.2 414.3 96 451.5 96C537.9 96 608 166 608 252.5C608 294 591.5 333.8 562.2 363.1L491.1 434.2C461.8 463.5 422 480 380.5 480C294.1 480 224 410 224 323.5C224 322 224 320.5 224.1 319C224.6 301.3 239.3 287.4 257 287.9C274.7 288.4 288.6 303.1 288.1 320.8C288.1 321.7 288.1 322.6 288.1 323.4C288.1 374.5 329.5 415.9 380.6 415.9C405.1 415.9 428.6 406.2 446 388.8L517.1 317.7C534.4 300.4 544.2 276.8 544.2 252.3C544.2 201.2 502.8 159.8 451.7 159.8zM307.2 237.3C305.3 236.5 303.4 235.4 301.7 234.2C289.1 227.7 274.7 224 259.6 224C235.1 224 211.6 233.7 194.2 251.1L123.1 322.2C105.8 339.5 96 363.1 96 387.6C96 438.7 137.4 480.1 188.5 480.1C205 480.1 221.1 475.7 235.2 467.5C251 483.5 269.4 496.9 289.8 507C261.6 530.9 225.8 544.2 188.5 544.2C102.1 544.2 32 474.2 32 387.7C32 346.2 48.5 306.4 77.8 277.1L148.9 206C178.2 176.7 218 160.2 259.5 160.2C346.1 160.2 416 230.8 416 317.1C416 318.4 416 319.7 416 321C415.6 338.7 400.9 352.6 383.2 352.2C365.5 351.8 351.6 337.1 352 319.4C352 318.6 352 317.9 352 317.1C352 283.4 334 253.8 307.2 237.5z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawopenpath:{width:70,height:70,path:\"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawclosedpath:{width:90,height:90,path:\"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z\",transform:\"matrix(1 0 0 1 -5 -5)\"},lasso:{width:1031,height:1e3,path:\"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z\",transform:\"matrix(1 0 0 -1 0 850)\"},selectbox:{width:1e3,height:1e3,path:\"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},drawline:{width:70,height:70,path:\"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawrect:{width:80,height:80,path:\"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},drawcircle:{width:80,height:80,path:\"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},eraseshape:{width:80,height:80,path:\"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},spikeline:{width:1e3,height:1e3,path:\"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z\",transform:\"matrix(1.5 0 0 -1.5 0 850)\"},pencil:{width:1792,height:1792,path:\"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z\",transform:\"matrix(1 0 0 1 0 1)\"},newplotlylogo:{name:\"newplotlylogo\",svg:[\"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'>\",\" <title>plotly-logomark</title>\",\" <g id='symbol'>\",\"  <rect fill='#000' x='0' y='0' width='132' height='132' rx='18' ry='18'/>\",\"  <circle fill='#9EF' cx='102' cy='30' r='6'/>\",\"  <circle fill='#BAC' cx='78' cy='30' r='6'/>\",\"  <circle fill='#BAC' cx='78' cy='54' r='6'/>\",\"  <circle fill='#D69' cx='54' cy='30' r='6'/>\",\"  <circle fill='#F26' cx='30' cy='30' r='6'/>\",\"  <circle fill='#F26' cx='30' cy='54' r='6'/>\",\"  <path fill='#FFF' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/>\",\"  <path fill='#FFF' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/>\",\"  <path fill='#FFF' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/>\",\"  <path fill='#FFF' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/>\",\" </g>\",\"</svg>\"].join(\"\")}}});var Om=z((lVe,iI)=>{\"use strict\";var Bm=32;iI.exports={CIRCLE_SIDES:Bm,i000:0,i090:Bm/4,i180:Bm/2,i270:Bm/4*3,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}});var Hm=z((sVe,lI)=>{\"use strict\";var kxe=ke().strTranslate;function oI(e,r){switch(e.type){case\"log\":return e.p2d(r);case\"date\":return e.p2r(r,0,e.calendar);default:return e.p2r(r)}}function Sxe(e,r){switch(e.type){case\"log\":return e.d2p(r);case\"date\":return e.r2p(r,0,e.calendar);default:return e.r2p(r)}}function qxe(e){var r=e._id.charAt(0)===\"y\"?1:0;return function(t){return oI(e,t[r])}}function Lxe(e){return kxe(e.xaxis._offset,e.yaxis._offset)}lI.exports={p2r:oI,r2p:Sxe,axValue:qxe,getTransform:Lxe}});var zs=z(Ul=>{\"use strict\";var Cxe=R4(),fI=Om(),cc=fI.CIRCLE_SIDES,j6=fI.SQRT2,cI=Hm(),sI=cI.p2r,uI=cI.r2p,Dxe=[0,3,4,5,6,1,2],Exe=[0,3,4,1,2];Ul.writePaths=function(e){var r=e.length;if(!r)return\"M0,0Z\";for(var t=\"\",a=0;a<r;a++)for(var n=e[a].length,i=0;i<n;i++){var o=e[a][i][0];if(o===\"Z\")t+=\"Z\";else for(var l=e[a][i].length,s=0;s<l;s++){var u=s;o===\"Q\"||o===\"S\"?u=Exe[s]:o===\"C\"&&(u=Dxe[s]),t+=e[a][i][u],s>0&&s<l-1&&(t+=\",\")}}return t};Ul.readPaths=function(e,r,t,a){var n=Cxe(e),i=[],o=-1,l=function(){o++,i[o]=[]},s,u=0,f=0,c,v,d=function(){c=u,v=f};d();for(var p=0;p<n.length;p++){var y=[],m,b,T,w,x=n[p][0],_=x;switch(x){case\"M\":l(),u=+n[p][1],f=+n[p][2],y.push([_,u,f]),d();break;case\"Q\":case\"S\":m=+n[p][1],T=+n[p][2],u=+n[p][3],f=+n[p][4],y.push([_,u,f,m,T]);break;case\"C\":m=+n[p][1],T=+n[p][2],b=+n[p][3],w=+n[p][4],u=+n[p][5],f=+n[p][6],y.push([_,u,f,m,T,b,w]);break;case\"T\":case\"L\":u=+n[p][1],f=+n[p][2],y.push([_,u,f]);break;case\"H\":_=\"L\",u=+n[p][1],y.push([_,u,f]);break;case\"V\":_=\"L\",f=+n[p][1],y.push([_,u,f]);break;case\"A\":_=\"L\";var k=+n[p][1],A=+n[p][2];+n[p][4]||(k=-k,A=-A);var q=u-k,C=f;for(s=1;s<=cc/2;s++){var E=2*Math.PI*s/cc;y.push([_,q+k*Math.cos(E),C+A*Math.sin(E)])}break;case\"Z\":(u!==c||f!==v)&&(u=c,f=v,y.push([_,u,f]));break}for(var P=(t||{}).domain,R=r._fullLayout._size,N=t&&t.xsizemode===\"pixel\",I=t&&t.ysizemode===\"pixel\",O=a===!1,U=0;U<y.length;U++){for(s=0;s+2<7;s+=2){var Y=y[U][s+1],G=y[U][s+2];Y===void 0||G===void 0||(u=Y,f=G,t&&(t.xaxis&&t.xaxis.p2r?(O&&(Y-=t.xaxis._offset),N?Y=uI(t.xaxis,t.xanchor)+Y:Y=sI(t.xaxis,Y)):(O&&(Y-=R.l),P?Y=P.x[0]+Y/R.w:Y=Y/R.w),t.yaxis&&t.yaxis.p2r?(O&&(G-=t.yaxis._offset),I?G=uI(t.yaxis,t.yanchor)-G:G=sI(t.yaxis,G)):(O&&(G-=R.t),P?G=P.y[1]-G/R.h:G=1-G/R.h)),y[U][s+1]=Y,y[U][s+2]=G)}i[o].push(y[U].slice())}}return i};function jh(e,r){return Math.abs(e-r)<=1e-6}function Um(e,r){var t=r[1]-e[1],a=r[2]-e[2];return Math.sqrt(t*t+a*a)}Ul.pointsOnRectangle=function(e){var r=e.length;if(r!==5)return!1;for(var t=1;t<3;t++){var a=e[0][t]-e[1][t],n=e[3][t]-e[2][t];if(!jh(a,n))return!1;var i=e[0][t]-e[3][t],o=e[1][t]-e[2][t];if(!jh(i,o))return!1}return!jh(e[0][1],e[1][1])&&!jh(e[0][1],e[3][1])?!1:!!(Um(e[0],e[1])*Um(e[0],e[3]))};Ul.pointsOnEllipse=function(e){var r=e.length;if(r!==cc+1)return!1;r=cc;for(var t=0;t<r;t++){var a=(r*2-t)%r,n=(r/2+a)%r,i=(r/2+t)%r;if(!jh(Um(e[t],e[i]),Um(e[a],e[n])))return!1}return!0};Ul.handleEllipse=function(e,r,t){if(!e)return[r,t];var a=Ul.ellipseOver({x0:r[0],y0:r[1],x1:t[0],y1:t[1]}),n=(a.x1+a.x0)/2,i=(a.y1+a.y0)/2,o=(a.x1-a.x0)/2,l=(a.y1-a.y0)/2;o||(o=l=l/j6),l||(l=o=o/j6);for(var s=[],u=0;u<cc;u++){var f=u*2*Math.PI/cc;s.push([n+o*Math.cos(f),i+l*Math.sin(f)])}return s};Ul.ellipseOver=function(e){var r=e.x0,t=e.y0,a=e.x1,n=e.y1,i=a-r,o=n-t;r-=i,t-=o;var l=(r+a)/2,s=(t+n)/2,u=j6;return i*=u,o*=u,{x0:l-i,y0:s-o,x1:l+i,y1:s+o}};Ul.fixDatesForPaths=function(e,r,t){var a=r.type===\"date\",n=t.type===\"date\";if(!a&&!n)return e;for(var i=0;i<e.length;i++)for(var o=0;o<e[i].length;o++)for(var l=0;l+2<e[i][o].length;l+=2)a&&(e[i][o][l+1]=e[i][o][l+1].replace(\" \",\"_\")),n&&(e[i][o][l+2]=e[i][o][l+2].replace(\" \",\"_\"));return e}});var Vm=z((fVe,xI)=>{\"use strict\";var vI=ba(),yI=lf(),Pxe=yI.drawMode,Rxe=yI.openMode,vc=Om(),hI=vc.i000,dI=vc.i090,pI=vc.i180,mI=vc.i270,Fxe=vc.cos45,zxe=vc.sin45,gI=Hm(),Gm=gI.p2r,Ns=gI.r2p,Nxe=ks(),Ixe=Nxe.clearOutline,Ym=zs(),Bxe=Ym.readPaths,Oxe=Ym.writePaths,Hxe=Ym.ellipseOver,Uxe=Ym.fixDatesForPaths;function Gxe(e,r){if(e.length){var t=e[0][0];if(t){var a=r.gd,n=r.isActiveShape,i=r.dragmode,o=(a.layout||{}).shapes||[];if(!Pxe(i)&&n!==void 0){var l=a._fullLayout._activeShapeIndex;if(l<o.length)switch(a._fullLayout.shapes[l].type){case\"rect\":i=\"drawrect\";break;case\"circle\":i=\"drawcircle\";break;case\"line\":i=\"drawline\";break;case\"path\":var s=o[l].path||\"\";s[s.length-1]===\"Z\"?i=\"drawclosedpath\":i=\"drawopenpath\";break}}var u=bI(e,r,i);Ixe(a);for(var f=r.editHelpers,c=(f||{}).modifyItem,v=[],d=0;d<o.length;d++){var p=a._fullLayout.shapes[d];if(v[d]=p._input,n!==void 0&&d===a._fullLayout._activeShapeIndex){var y=u;switch(p.type){case\"line\":case\"rect\":case\"circle\":var m=vI.getFromId(a,p.xref);p.xref.charAt(0)===\"x\"&&m.type.includes(\"category\")?(c(\"x0\",y.x0-(p.x0shift||0)),c(\"x1\",y.x1-(p.x1shift||0))):(c(\"x0\",y.x0),c(\"x1\",y.x1));var b=vI.getFromId(a,p.yref);p.yref.charAt(0)===\"y\"&&b.type.includes(\"category\")?(c(\"y0\",y.y0-(p.y0shift||0)),c(\"y1\",y.y1-(p.y1shift||0))):(c(\"y0\",y.y0),c(\"y1\",y.y1));break;case\"path\":c(\"path\",y.path);break}}}return n===void 0?(v.push(u),v):f?f.getUpdateObj():{}}}}function bI(e,r,t){var a=e[0][0],n=r.gd,i=a.getAttribute(\"d\"),o=n._fullLayout.newshape,l=r.plotinfo,s=r.isActiveShape,u=l.xaxis,f=l.yaxis,c=!!l.domain||!l.xaxis,v=!!l.domain||!l.yaxis,d=Rxe(t),p=Bxe(i,n,l,s),y={editable:!0,visible:o.visible,name:o.name,showlegend:o.showlegend,legend:o.legend,legendwidth:o.legendwidth,legendgroup:o.legendgroup,legendgrouptitle:{text:o.legendgrouptitle.text,font:o.legendgrouptitle.font},legendrank:o.legendrank,label:o.label,xref:c?\"paper\":u._id,yref:v?\"paper\":f._id,layer:o.layer,opacity:o.opacity,line:{color:o.line.color,width:o.line.width,dash:o.line.dash}};d||(y.fillcolor=o.fillcolor,y.fillrule=o.fillrule);var m;if(p.length===1&&(m=p[0]),m&&m.length===5&&t===\"drawrect\")y.type=\"rect\",y.x0=m[0][1],y.y0=m[0][2],y.x1=m[2][1],y.y1=m[2][2];else if(m&&t===\"drawline\")y.type=\"line\",y.x0=m[0][1],y.y0=m[0][2],y.x1=m[1][1],y.y1=m[1][2];else if(m&&t===\"drawcircle\"){y.type=\"circle\";var b=m[hI][1],T=m[dI][1],w=m[pI][1],x=m[mI][1],_=m[hI][2],k=m[dI][2],A=m[pI][2],q=m[mI][2],C=l.xaxis&&(l.xaxis.type===\"date\"||l.xaxis.type===\"log\"),E=l.yaxis&&(l.yaxis.type===\"date\"||l.yaxis.type===\"log\");C&&(b=Ns(l.xaxis,b),T=Ns(l.xaxis,T),w=Ns(l.xaxis,w),x=Ns(l.xaxis,x)),E&&(_=Ns(l.yaxis,_),k=Ns(l.yaxis,k),A=Ns(l.yaxis,A),q=Ns(l.yaxis,q));var P=(T+x)/2,R=(_+A)/2,N=(x-T+w-b)/2,I=(q-k+A-_)/2,O=Hxe({x0:P,y0:R,x1:P+N*Fxe,y1:R+I*zxe});C&&(O.x0=Gm(l.xaxis,O.x0),O.x1=Gm(l.xaxis,O.x1)),E&&(O.y0=Gm(l.yaxis,O.y0),O.y1=Gm(l.yaxis,O.y1)),y.x0=O.x0,y.y0=O.y0,y.x1=O.x1,y.y1=O.y1}else y.type=\"path\",u&&f&&Uxe(p,u,f),y.path=Oxe(p),m=null;return y}xI.exports={newShapes:Gxe,createShapeObj:bI}});var X6=z((cVe,_I)=>{\"use strict\";var Yxe=lf(),Vxe=Yxe.selectMode,jxe=ks(),Wxe=jxe.clearOutline,W6=zs(),Xxe=W6.readPaths,Zxe=W6.writePaths,$xe=W6.fixDatesForPaths;_I.exports=function(r,t){if(r.length){var a=r[0][0];if(a){var n=a.getAttribute(\"d\"),i=t.gd,o=i._fullLayout.newselection,l=t.plotinfo,s=l.xaxis,u=l.yaxis,f=t.isActiveSelection,c=t.dragmode,v=(i.layout||{}).selections||[];if(!Vxe(c)&&f!==void 0){var d=i._fullLayout._activeSelectionIndex;if(d<v.length)switch(i._fullLayout.selections[d].type){case\"rect\":c=\"select\";break;case\"path\":c=\"lasso\";break}}var p=Xxe(n,i,l,f),y={xref:s._id,yref:u._id,opacity:o.opacity,line:{color:o.line.color,width:o.line.width,dash:o.line.dash}},m;p.length===1&&(m=p[0]),m&&m.length===5&&c===\"select\"?(y.type=\"rect\",y.x0=m[0][1],y.y0=m[0][2],y.x1=m[2][1],y.y1=m[2][2]):(y.type=\"path\",s&&u&&$xe(p,s,u),y.path=Zxe(p),m=null),Wxe(i);for(var b=t.editHelpers,T=(b||{}).modifyItem,w=[],x=0;x<v.length;x++){var _=i._fullLayout.selections[x];if(!_){w[x]=_;continue}if(w[x]=_._input,f!==void 0&&x===i._fullLayout._activeSelectionIndex){var k=y;switch(_.type){case\"rect\":T(\"x0\",k.x0),T(\"x1\",k.x1),T(\"y0\",k.y0),T(\"y1\",k.y1);break;case\"path\":T(\"path\",k.path);break}}}return f===void 0?(w.push(y),w):b?b.getUpdateObj():{}}}}});var Wh=z((vVe,wI)=>{\"use strict\";wI.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:3},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}});var Bs=z(Ha=>{\"use strict\";var fl=Wh(),TI=ke(),Is=Gr();Ha.rangeToShapePosition=function(e){return e.type===\"log\"?e.r2d:function(r){return r}};Ha.shapePositionToRange=function(e){return e.type===\"log\"?e.d2r:function(r){return r}};Ha.decodeDate=function(e){return function(r){return r.replace&&(r=r.replace(\"_\",\" \")),e(r)}};Ha.encodeDate=function(e){return function(r){return e(r).replace(\" \",\"_\")}};Ha.extractPathCoords=function(e,r,t){var a=[],n=e.match(fl.segmentRE);return n.forEach(function(i){var o=r[i.charAt(0)].drawn;if(o!==void 0){var l=i.slice(1).match(fl.paramRE);if(!(!l||l.length<o)){var s=l[o],u=t?s:TI.cleanNumber(s);a.push(u)}}}),a};Ha.countDefiningCoords=function(e,r,t){if(e!==\"path\")return 2;if(!r)return 0;let a=r.match(fl.segmentRE);if(!a)return 0;let n=t===\"x\"?fl.paramIsX:fl.paramIsY;return a.reduce((i,o)=>{let l=o.charAt(0),s=n[l].drawn!==void 0;return i+(s?1:0)},0)};Ha.getDataToPixel=function(e,r,t,a,n){var i=e._fullLayout._size,o;if(r)if(n===\"domain\")o=function(s){return r._length*(a?1-s:s)+r._offset};else{var l=Ha.shapePositionToRange(r);o=function(s){var u=ul(r,t);return r._offset+r.r2p(l(s,!0))+u},r.type===\"date\"&&(o=Ha.decodeDate(o))}else a?o=function(s){return i.t+i.h*(1-s)}:o=function(s){return i.l+i.w*s};return o};Ha.getPixelToData=function(e,r,t,a){var n=e._fullLayout._size,i;if(r)if(a===\"domain\")i=function(l){var s=(l-r._offset)/r._length;return t?1-s:s};else{var o=Ha.rangeToShapePosition(r);i=function(l){return o(r.p2r(l-r._offset))}}else t?i=function(l){return 1-(l-n.t)/n.h}:i=function(l){return(l-n.l)/n.w};return i};Ha.roundPositionForSharpStrokeRendering=function(e,r){var t=Math.round(r%2)===1,a=Math.round(e);return t?a+.5:a};Ha.makeShapesOptionsAndPlotinfo=function(e,r){var t=e._fullLayout.shapes[r]||{},a=e._fullLayout._plots[t.xref+t.yref],n=!!a;return n?a._hadPlotinfo=!0:(a={},t.xref&&t.xref!==\"paper\"&&(a.xaxis=e._fullLayout[t.xref+\"axis\"]),t.yref&&t.yref!==\"paper\"&&(a.yaxis=e._fullLayout[t.yref+\"axis\"])),a.xsizemode=t.xsizemode,a.ysizemode=t.ysizemode,a.xanchor=t.xanchor,a.yanchor=t.yanchor,{options:t,plotinfo:a}};Ha.makeSelectionsOptionsAndPlotinfo=function(e,r){var t=e._fullLayout.selections[r]||{},a=e._fullLayout._plots[t.xref+t.yref],n=!!a;return n?a._hadPlotinfo=!0:(a={},t.xref&&(a.xaxis=e._fullLayout[t.xref+\"axis\"]),t.yref&&(a.yaxis=e._fullLayout[t.yref+\"axis\"])),{options:t,plotinfo:a}};Ha.getPathString=function(e,r){let t=r.type,a=Is.getRefType(r.xref),n=Is.getRefType(r.yref),i=e._fullLayout._size;var o,l,s,u,f,c,v,d,p,y,m,b;function T(E,P,R,N){var I;if(E)if(P===\"domain\")N?I=function(O){return E._offset+E._length*(1-O)}:I=function(O){return E._offset+E._length*O};else{let O=Ha.shapePositionToRange(E);I=function(U){return E._offset+E.r2p(O(U,!0))},R===\"path\"&&E.type===\"date\"&&(I=Ha.decodeDate(I))}else N?I=function(O){return i.t+i.h*(1-O)}:I=function(O){return i.l+i.w*O};return I}if(a===\"array\"?(v=[],o=r.xref.map(function(E){return Is.getFromId(e,E)}),v=r.xref.map(function(E,P){return T(o[P],Is.getRefType(E),t,!1)})):(o=Is.getFromId(e,r.xref),v=T(o,a,t,!1)),n===\"array\"?(d=[],l=r.yref.map(function(E){return Is.getFromId(e,E)}),d=r.yref.map(function(E,P){return T(l[P],Is.getRefType(E),t,!0)})):(l=Is.getFromId(e,r.yref),d=T(l,n,t,!0)),t===\"path\")return Jxe(r,v,d);if(a===\"array\")s=ul(o[0],r.x0shift),u=ul(o[1],r.x1shift),p=v[0](r.x0)+s,y=v[1](r.x1)+u;else if(s=ul(o,r.x0shift),u=ul(o,r.x1shift),r.xsizemode===\"pixel\"){let E=v(r.xanchor);p=E+r.x0+s,y=E+r.x1+u}else p=v(r.x0)+s,y=v(r.x1)+u;if(n===\"array\")f=ul(l[0],r.y0shift),c=ul(l[1],r.y1shift),m=d[0](r.y0)+f,b=d[1](r.y1)+c;else if(f=ul(l,r.y0shift),c=ul(l,r.y1shift),r.ysizemode===\"pixel\"){let E=d(r.yanchor);m=E-r.y0+f,b=E-r.y1+c}else m=d(r.y0)+f,b=d(r.y1)+c;if(t===\"line\")return\"M\"+p+\",\"+m+\"L\"+y+\",\"+b;if(t===\"rect\")return\"M\"+p+\",\"+m+\"H\"+y+\"V\"+b+\"H\"+p+\"Z\";var w=(p+y)/2,x=(m+b)/2,_=Math.abs(w-p),k=Math.abs(x-m),A=\"A\"+_+\",\"+k,q=w+_+\",\"+x,C=w+\",\"+(x-k);return\"M\"+q+A+\" 0 1,1 \"+C+A+\" 0 0,1 \"+q+\"Z\"};function Jxe(e,r,t){let a=e.path,n=e.xsizemode,i=e.ysizemode,o=e.xanchor,l=e.yanchor,s=Array.isArray(e.xref),u=Array.isArray(e.yref);var f=0,c=0;return a.replace(fl.segmentRE,function(v){var d=0,p=v.charAt(0),y=fl.paramIsX[p],m=fl.paramIsY[p],b=fl.numParams[p];let T=y.drawn!==void 0,w=m.drawn!==void 0,x=s?r[f]:r,_=u?t[c]:t;var k=v.slice(1).replace(fl.paramRE,function(A){return y[d]?n===\"pixel\"?A=x(o)+Number(A):A=x(A):m[d]&&(i===\"pixel\"?A=_(l)-Number(A):A=_(A)),d++,d>b&&(A=\"X\"),A});return d>b&&(k=k.replace(/[\\s,]*X.*/,\"\"),TI.log(\"Ignoring extra params in segment \"+v)),T&&f++,w&&c++,p+k})}Ha.getPixelShift=ul;function ul(e,r){r=r||0;var t=0;return r&&e&&(e.type===\"category\"||e.type===\"multicategory\")&&(t=(e.r2p(1)-e.r2p(0))*r),t}});var Z6=z((dVe,kI)=>{\"use strict\";var Kxe=ke(),cl=Gr(),AI=Ca(),MI=Zr(),Qxe=zs().readPaths,sf=Bs(),e_e=sf.getPathString,Xh=hp(),r_e=Qa().FROM_TL;kI.exports=function(r,t,a,n){if(n.selectAll(\".shape-label\").remove(),!!(a.label.text||a.label.texttemplate)){var i;if(a.label.texttemplate){var o={};if(a.type!==\"path\"){var l=cl.getFromId(r,a.xref),s=cl.getFromId(r,a.yref);let j=Array.isArray(a.xref),J=Array.isArray(a.yref);for(var u in Xh){var f=typeof Xh[u]==\"function\",c=!j||Xh.simpleXVariables.includes(u),v=!J||Xh.simpleYVariables.includes(u);if(f&&c&&v){var d=Xh[u](a,l,s);d!==void 0&&(o[u]=d)}}}i=Kxe.texttemplateStringForShapes({data:[o],fallback:a.label.texttemplatefallback,locale:r._fullLayout._d3locale,template:a.label.texttemplate})}else i=a.label.text;var p={\"data-index\":t},y=a.label.font,m={\"data-notex\":1},b=n.append(\"g\").attr(p).classed(\"shape-label\",!0),T=b.append(\"text\").attr(m).classed(\"shape-label-text\",!0).text(i),w,x,_,k;if(a.path){var A=e_e(r,a),q=Qxe(A,r);w=1/0,_=1/0,x=-1/0,k=-1/0;for(var C=0;C<q.length;C++)for(var E=0;E<q[C].length;E++)for(var P=q[C][E],R=1;R<P.length;R+=2){var N=P[R],I=P[R+1];w=Math.min(w,N),x=Math.max(x,N),_=Math.min(_,I),k=Math.max(k,I)}}else{let j=Array.isArray(a.xref),J=Array.isArray(a.yref),te=cl.getFromId(r,j?a.xref[0]:a.xref),ae=cl.getFromId(r,j?a.xref[1]:a.xref),se=cl.getFromId(r,J?a.yref[0]:a.yref),$=cl.getFromId(r,J?a.yref[1]:a.yref),fe=cl.getRefType(j?a.xref[0]:a.xref),ie=cl.getRefType(j?a.xref[1]:a.xref),ue=cl.getRefType(J?a.yref[0]:a.yref),ce=cl.getRefType(J?a.yref[1]:a.yref),oe=(Re,ye,Ce,Me)=>sf.getDataToPixel(r,Ce,ye,!1,Me)(Re),be=(Re,ye,Ce,Me)=>sf.getDataToPixel(r,Ce,ye,!0,Me)(Re);if(a.xsizemode===\"pixel\"){let Re=oe(a.xanchor,void 0,te,fe),ye=sf.getPixelShift(te,a.x0shift),Ce=sf.getPixelShift(te,a.x1shift);w=Re+a.x0+ye,x=Re+a.x1+Ce}else w=oe(a.x0,a.x0shift,te,fe),x=oe(a.x1,a.x1shift,ae,ie);if(a.ysizemode===\"pixel\"){let Re=be(a.yanchor,void 0,se,ue),ye=sf.getPixelShift(se,a.y0shift),Ce=sf.getPixelShift(se,a.y1shift);_=Re-a.y0+ye,k=Re-a.y1+Ce}else _=be(a.y0,a.y0shift,se,ue),k=be(a.y1,a.y1shift,$,ce)}var O=a.label.textangle;O===\"auto\"&&(a.type===\"line\"?O=t_e(w,_,x,k):O=0),T.call(function(j){return j.call(MI.font,y).attr({}),AI.convertToTspans(j,r),j});var U=MI.bBox(T.node()),Y=a_e(w,_,x,k,a,O,U),G=Y.textx,V=Y.texty,W=Y.xanchor;T.attr({\"text-anchor\":{left:\"start\",center:\"middle\",right:\"end\"}[W],y:V,x:G,transform:\"rotate(\"+O+\",\"+G+\",\"+V+\")\"}).call(AI.positionText,G,V)}};function t_e(e,r,t,a){var n,i;return i=Math.abs(t-e),t>=e?n=r-a:n=a-r,-180/Math.PI*Math.atan2(n,i)}function a_e(e,r,t,a,n,i,o){var l=n.label.textposition,s=n.label.textangle,u=n.label.padding,f=n.type,c=Math.PI/180*i,v=Math.sin(c),d=Math.cos(c),p=n.label.xanchor,y=n.label.yanchor,m,b,T,w;if(f===\"line\"){l===\"start\"?(m=e,b=r):l===\"end\"?(m=t,b=a):(m=(e+t)/2,b=(r+a)/2),p===\"auto\"&&(l===\"start\"?s===\"auto\"?t>e?p=\"left\":t<e?p=\"right\":p=\"center\":t>e?p=\"right\":t<e?p=\"left\":p=\"center\":l===\"end\"?s===\"auto\"?t>e?p=\"right\":t<e?p=\"left\":p=\"center\":t>e?p=\"left\":t<e?p=\"right\":p=\"center\":p=\"center\");var x={left:1,center:0,right:-1},_={bottom:-1,middle:0,top:1};if(s===\"auto\"){var k=_[y];T=-u*v*k,w=u*d*k}else{var A=x[p],q=_[y];T=u*A,w=u*q}m=m+T,b=b+w}else T=u+3,l.indexOf(\"right\")!==-1?(m=Math.max(e,t)-T,p===\"auto\"&&(p=\"right\")):l.indexOf(\"left\")!==-1?(m=Math.min(e,t)+T,p===\"auto\"&&(p=\"left\")):(m=(e+t)/2,p===\"auto\"&&(p=\"center\")),l.indexOf(\"top\")!==-1?b=Math.min(r,a):l.indexOf(\"bottom\")!==-1?b=Math.max(r,a):b=(r+a)/2,w=u,y===\"bottom\"?b=b-w:y===\"top\"&&(b=b+w);var C=r_e[y],E=n.label.font.size,P=o.height,R=(P*C-E)*v,N=-(P*C-E)*d;return{textx:m+R,texty:b+N,xanchor:p}}});var Xm=z((pVe,RI)=>{\"use strict\";var n_e=ke(),i_e=n_e.strTranslate,SI=Bi(),CI=lf(),o_e=CI.drawMode,DI=CI.selectMode,EI=Tr(),qI=Sr(),Wm=Om(),l_e=Wm.i000,s_e=Wm.i090,u_e=Wm.i180,f_e=Wm.i270,c_e=ks(),PI=c_e.clearOutlineControllers,J6=zs(),jm=J6.pointsOnRectangle,$6=J6.pointsOnEllipse,v_e=J6.writePaths,h_e=Vm().newShapes,d_e=Vm().createShapeObj,p_e=X6(),m_e=Z6();RI.exports=function e(r,t,a,n){n||(n=0);var i=a.gd;function o(){e(r,t,a,n++),($6(r[0])||a.hasText)&&l({redrawing:!0})}function l(Y){var G={};a.isActiveShape!==void 0&&(a.isActiveShape=!1,G=h_e(t,a)),a.isActiveSelection!==void 0&&(a.isActiveSelection=!1,G=p_e(t,a),i._fullLayout._reselect=!0),Object.keys(G).length&&EI.call((Y||{}).redrawing?\"relayout\":\"_guiRelayout\",i,G)}var s=i._fullLayout,u=s._zoomlayer,f=a.dragmode,c=o_e(f),v=DI(f);(c||v)&&(i._fullLayout._outlining=!0),PI(i),t.attr(\"d\",v_e(r));var d,p,y,m,b;if(!n&&(a.isActiveShape||a.isActiveSelection)){b=y_e([],r);var T=u.append(\"g\").attr(\"class\",\"outline-controllers\");E(T),U()}if(c&&a.hasText){var w=u.select(\".label-temp\"),x=d_e(t,a,a.dragmode);m_e(i,\"label-temp\",x,w)}function _(Y){y=+Y.srcElement.getAttribute(\"data-i\"),m=+Y.srcElement.getAttribute(\"data-j\"),d[y][m].moveFn=k}function k(Y,G){if(r.length){var V=b[y][m][1],W=b[y][m][2],j=r[y],J=j.length;if(jm(j)){var te=Y,ae=G;if(a.isActiveSelection){var se=LI(j,m);se[1]===j[m][1]?ae=0:te=0}for(var $=0;$<J;$++)if($!==m){var fe=j[$];fe[1]===j[m][1]&&(fe[1]=V+te),fe[2]===j[m][2]&&(fe[2]=W+ae)}if(j[m][1]=V+te,j[m][2]=W+ae,!jm(j))for(var ie=0;ie<J;ie++)for(var ue=0;ue<j[ie].length;ue++)j[ie][ue]=b[y][ie][ue]}else j[m][1]=V+Y,j[m][2]=W+G;o()}}function A(){l()}function q(){if(r.length&&r[y]&&r[y].length){for(var Y=[],G=0;G<r[y].length;G++)G!==m&&Y.push(r[y][G]);Y.length>1&&!(Y.length===2&&Y[1][0]===\"Z\")&&(m===0&&(Y[0][0]=\"M\"),r[y]=Y,o(),l())}}function C(Y,G){if(Y===2){y=+G.srcElement.getAttribute(\"data-i\"),m=+G.srcElement.getAttribute(\"data-j\");var V=r[y];!jm(V)&&!$6(V)&&q()}}function E(Y){d=[];for(var G=0;G<r.length;G++){var V=r[G],W=jm(V),j=!W&&$6(V);d[G]=[];for(var J=V.length,te=0;te<J;te++)if(V[te][0]!==\"Z\"&&!(j&&te!==l_e&&te!==s_e&&te!==u_e&&te!==f_e)){var ae=W&&a.isActiveSelection,se;ae&&(se=LI(V,te));var $=V[te][1],fe=V[te][2],ie=Y.append(ae?\"rect\":\"circle\").attr(\"data-i\",G).attr(\"data-j\",te).style({fill:qI.background,stroke:qI.defaultLine,\"stroke-width\":1,\"shape-rendering\":\"crispEdges\"});if(ae){var ue=se[1]-$,ce=se[2]-fe,oe=ce?5:Math.max(Math.min(25,Math.abs(ue)-5),5),be=ue?5:Math.max(Math.min(25,Math.abs(ce)-5),5);ie.classed(ce?\"cursor-ew-resize\":\"cursor-ns-resize\",!0).attr(\"width\",oe).attr(\"height\",be).attr(\"x\",$-oe/2).attr(\"y\",fe-be/2).attr(\"transform\",i_e(ue/2,ce/2))}else ie.classed(\"cursor-grab\",!0).attr(\"r\",5).attr(\"cx\",$).attr(\"cy\",fe);d[G][te]={element:ie.node(),gd:i,prepFn:_,doneFn:A,clickFn:C},SI.init(d[G][te])}}}function P(Y,G){if(r.length)for(var V=0;V<r.length;V++)for(var W=0;W<r[V].length;W++)for(var j=0;j+2<r[V][W].length;j+=2)r[V][W][j+1]=b[V][W][j+1]+Y,r[V][W][j+2]=b[V][W][j+2]+G}function R(Y,G){P(Y,G),o()}function N(Y){y=+Y.srcElement.getAttribute(\"data-i\"),y||(y=0),p[y].moveFn=R}function I(){l()}function O(Y){Y===2&&g_e(i)}function U(){if(p=[],!!r.length){var Y=0;p[Y]={element:t[0][0],gd:i,prepFn:N,doneFn:I,clickFn:O},SI.init(p[Y])}}};function y_e(e,r){for(var t=0;t<r.length;t++){var a=r[t];e[t]=[];for(var n=0;n<a.length;n++){e[t][n]=[];for(var i=0;i<a[n].length;i++)e[t][n][i]=a[n][i]}}return e}function LI(e,r){var t=e[r][1],a=e[r][2],n=e.length,i,o,l;return i=(r+1)%n,o=e[i][1],l=e[i][2],o===t&&l===a&&(i=(r+2)%n,o=e[i][1],l=e[i][2]),[i,o,l]}function g_e(e){if(DI(e._fullLayout.dragmode)){PI(e);var r=e._fullLayout._activeSelectionIndex,t=(e.layout||{}).selections||[];if(r<t.length){for(var a=[],n=0;n<t.length;n++)n!==r&&a.push(t[n]);delete e._fullLayout._activeSelectionIndex;var i=e._fullLayout.selections[r];e._fullLayout._deselect={xref:i.xref,yref:i.yref},EI.call(\"_guiRelayout\",e,{selections:a})}}}});var Qm=z((mVe,YI)=>{\"use strict\";var b_e=Er(),OI=Tr(),Q6=ke(),uf=Gr(),x_e=zs().readPaths,__e=Xm(),$m=Z6(),HI=ks().clearOutlineControllers,K6=Sr(),Jm=Zr(),w_e=St().arrayEditor,FI=Bi(),zI=In(),NI=Rs(),ff=Wh(),Kn=Bs(),e7=Kn.getPathString;YI.exports={draw:r7,drawOne:UI,eraseActiveShape:S_e,drawLabel:$m};function r7(e){var r=e._fullLayout;r._shapeUpperLayer.selectAll(\"path\").remove(),r._shapeLowerLayer.selectAll(\"path\").remove(),r._shapeUpperLayer.selectAll(\"text\").remove(),r._shapeLowerLayer.selectAll(\"text\").remove();for(var t in r._plots){var a=r._plots[t].shapelayer;a&&(a.selectAll(\"path\").remove(),a.selectAll(\"text\").remove())}for(var n=0;n<r.shapes.length;n++)r.shapes[n].visible===!0&&UI(e,n)}function Zm(e){return!!e._fullLayout._outlining}function Km(e){return!e._context.edits.shapePosition}function UI(e,r){e._fullLayout._paperdiv.selectAll('.shapelayer [data-index=\"'+r+'\"]').remove();var t=Kn.makeShapesOptionsAndPlotinfo(e,r),a=t.options,n=t.plotinfo;if(!a._input||a.visible!==!0)return;let i=Array.isArray(a.xref)||Array.isArray(a.yref);if(a.layer===\"above\")l(e._fullLayout._shapeUpperLayer);else if(a.xref.includes(\"paper\")||a.yref.includes(\"paper\"))l(e._fullLayout._shapeLowerLayer);else if(a.layer===\"between\"&&!i)l(n.shapelayerBetween);else if(n._hadPlotinfo){var o=n.mainplotinfo||n;l(o.shapelayer)}else l(e._fullLayout._shapeLowerLayer);function l(s){var u=e7(e,a),f={\"data-index\":r,\"fill-rule\":a.fillrule,d:u},c=a.opacity,v=a.fillcolor,d=a.line.width?a.line.color:\"rgba(0,0,0,0)\",p=a.line.width,y=a.line.dash;!p&&a.editable===!0&&(p=5,y=\"solid\");var m=u[u.length-1]!==\"Z\",b=Km(e)&&a.editable&&e._fullLayout._activeShapeIndex===r;b&&(v=m?\"rgba(0,0,0,0)\":e._fullLayout.activeshape.fillcolor,c=e._fullLayout.activeshape.opacity);var T=s.append(\"g\").classed(\"shape-group\",!0).attr({\"data-index\":r}),w=T.append(\"path\").attr(f).style(\"opacity\",c).call(K6.stroke,d).call(K6.fill,v).call(Jm.dashLine,y,p);GI(T,e,a),$m(e,r,a,T);var x;if((b||e._context.edits.shapePosition)&&(x=w_e(e.layout,\"shapes\",a)),b){w.style({cursor:\"move\"});var _={element:w.node(),plotinfo:n,gd:e,editHelpers:x,hasText:a.label.text||a.label.texttemplate,isActiveShape:!0},k=x_e(u,e);__e(k,w,_)}else e._context.edits.shapePosition?M_e(e,w,a,r,s,x):a.editable===!0&&w.style(\"pointer-events\",m||K6.opacity(v)*c<=.5?\"stroke\":\"all\");w.node().addEventListener(\"click\",function(){return k_e(e,w)}),T_e(e,w,n)}}function T_e(e,r,t){if(!(t!=null&&t.id))return;let a=r.node();function n(i){var s;let o=t.mainplotinfo||t,l=(s=o==null?void 0:o.draglayer)==null?void 0:s.select(\".nsewdrag\").node();return l?{clientX:i.clientX,clientY:i.clientY,target:l}:null}a.addEventListener(\"mousemove\",i=>{if(!e._dragging&&e._fullLayout.hoveranywhere){let o=n(i);o&&zI.hover(e,o,t.id)}}),a.addEventListener(\"click\",i=>{if(!e._dragged&&e._fullLayout.clickanywhere){let o=n(i);o&&zI.click(e,o,t.id)}})}function GI(e,r,t){let a=t.xref,n=t.yref;if(Array.isArray(a)||Array.isArray(n)){let i=\"clip\"+r._fullLayout._uid+\"shape\"+t._index,o=A_e(r,a,n);Q6.ensureSingleById(r._fullLayout._clips,\"clipPath\",i,function(l){l.append(\"rect\")}).select(\"rect\").attr(o),Jm.setClipUrl(e,i,r)}else{let i=(a+n).replace(/paper/g,\"\").replace(/[xyz][0-9]* *domain/g,\"\");Jm.setClipUrl(e,i?\"clip\"+r._fullLayout._uid+i:null,r)}}function A_e(e,r,t){let a=e._fullLayout._size;function n(l,s){let u=(Array.isArray(l)?l:[l]).map(v=>uf.getFromId(e,v)).filter(Boolean);if(!u.length)return s?[a.t,a.t+a.h]:[a.l,a.l+a.w];let f=u.map(function(v){return v._offset}),c=u.map(function(v){return v._offset+v._length});return[Math.min(...f),Math.max(...c)]}let i=n(r,!1),o=n(t,!0);return{x:i[0],y:o[0],width:i[1]-i[0],height:o[1]-o[0]}}function M_e(e,r,t,a,n,i){var o=10,l=10,s=t.xsizemode===\"pixel\",u=t.ysizemode===\"pixel\",f=t.type===\"line\",c=t.type===\"path\",v=i.modifyItem,d,p,y,m,b,T,w,x,_,k,A,q,C,E,P,R=b_e.select(r.node().parentNode),N=uf.getFromId(e,t.xref),I=uf.getRefType(t.xref),O=uf.getFromId(e,t.yref),U=uf.getRefType(t.yref),Y=t.x0shift,G=t.x1shift,V=t.y0shift,W=t.y1shift,j=function(Ne,qe){var Xe=Kn.getDataToPixel(e,N,qe,!1,I);return Xe(Ne)},J=function(Ne,qe){var Xe=Kn.getDataToPixel(e,O,qe,!0,U);return Xe(Ne)},te=Kn.getPixelToData(e,N,!1,I),ae=Kn.getPixelToData(e,O,!0,U),se=ie(),$={element:se.node(),gd:e,prepFn:oe,doneFn:be,clickFn:Re},fe;FI.init($),se.node().onmousemove=ce;function ie(){return f?ue():r}function ue(){var Ne=10,qe=Math.max(t.line.width,Ne),Xe=n.append(\"g\").attr(\"data-index\",a).attr(\"drag-helper\",!0);Xe.append(\"path\").attr(\"d\",r.attr(\"d\")).style({cursor:\"move\",\"stroke-width\":qe,\"stroke-opacity\":\"0\"});var $e={\"fill-opacity\":\"0\"},We=Math.max(qe/2,Ne);return Xe.append(\"circle\").attr({\"data-line-point\":\"start-point\",cx:s?j(t.xanchor)+t.x0:j(t.x0,Y),cy:u?J(t.yanchor)-t.y0:J(t.y0,V),r:We}).style($e).classed(\"cursor-grab\",!0),Xe.append(\"circle\").attr({\"data-line-point\":\"end-point\",cx:s?j(t.xanchor)+t.x1:j(t.x1,G),cy:u?J(t.yanchor)-t.y1:J(t.y1,W),r:We}).style($e).classed(\"cursor-grab\",!0),Xe}function ce(Ne){if(Zm(e)){fe=null;return}if(f)Ne.target.tagName===\"path\"?fe=\"move\":fe=Ne.target.attributes[\"data-line-point\"].value===\"start-point\"?\"resize-over-start-point\":\"resize-over-end-point\";else{var qe=$.element.getBoundingClientRect(),Xe=qe.right-qe.left,$e=qe.bottom-qe.top,We=Ne.clientX-qe.left,Se=Ne.clientY-qe.top,Fe=!c&&Xe>o&&$e>l&&!Ne.shiftKey?FI.getCursor(We/Xe,1-Se/$e):\"move\";NI(r,Fe),fe=Fe.split(\"-\")[0]}}function oe(Ne){Zm(e)||(s&&(b=j(t.xanchor)),u&&(T=J(t.yanchor)),t.type===\"path\"?P=t.path:(d=s?t.x0:j(t.x0),p=u?t.y0:J(t.y0),y=s?t.x1:j(t.x1),m=u?t.y1:J(t.y1)),d<y?(_=d,C=\"x0\",k=y,E=\"x1\"):(_=y,C=\"x1\",k=d,E=\"x0\"),!u&&p<m||u&&p>m?(w=p,A=\"y0\",x=m,q=\"y1\"):(w=m,A=\"y1\",x=p,q=\"y0\"),ce(Ne),Me(n,t),De(r,t,e),$.moveFn=fe===\"move\"?ye:Ce,$.altKey=Ne.altKey)}function be(){Zm(e)||(NI(r),Le(n),GI(r,e,t),OI.call(\"_guiRelayout\",e,i.getUpdateObj()))}function Re(){Zm(e)||Le(n)}function ye(Ne,qe){if(t.type===\"path\"){var Xe=function(Se){return Se},$e=Xe,We=Xe;s?v(\"xanchor\",t.xanchor=te(b+Ne)):($e=function(Fe){return te(j(Fe)+Ne)},N&&N.type===\"date\"&&($e=Kn.encodeDate($e))),u?v(\"yanchor\",t.yanchor=ae(T+qe)):(We=function(Fe){return ae(J(Fe)+qe)},O&&O.type===\"date\"&&(We=Kn.encodeDate(We))),v(\"path\",t.path=II(P,$e,We))}else s?v(\"xanchor\",t.xanchor=te(b+Ne)):(v(\"x0\",t.x0=te(d+Ne)),v(\"x1\",t.x1=te(y+Ne))),u?v(\"yanchor\",t.yanchor=ae(T+qe)):(v(\"y0\",t.y0=ae(p+qe)),v(\"y1\",t.y1=ae(m+qe)));r.attr(\"d\",e7(e,t)),Me(n,t),$m(e,a,t,R)}function Ce(Ne,qe){if(c){var Xe=function(je){return je},$e=Xe,We=Xe;s?v(\"xanchor\",t.xanchor=te(b+Ne)):($e=function(tr){return te(j(tr)+Ne)},N&&N.type===\"date\"&&($e=Kn.encodeDate($e))),u?v(\"yanchor\",t.yanchor=ae(T+qe)):(We=function(tr){return ae(J(tr)+qe)},O&&O.type===\"date\"&&(We=Kn.encodeDate(We))),v(\"path\",t.path=II(P,$e,We))}else if(f){if(fe===\"resize-over-start-point\"){var Se=d+Ne,Fe=u?p-qe:p+qe;v(\"x0\",t.x0=s?Se:te(Se)),v(\"y0\",t.y0=u?Fe:ae(Fe))}else if(fe===\"resize-over-end-point\"){var Qe=y+Ne,re=u?m-qe:m+qe;v(\"x1\",t.x1=s?Qe:te(Qe)),v(\"y1\",t.y1=u?re:ae(re))}}else{var xe=function(je){return fe.indexOf(je)!==-1},Ge=xe(\"n\"),cr=xe(\"s\"),Pe=xe(\"w\"),me=xe(\"e\"),Ae=Ge?w+qe:w,He=cr?x+qe:x,Ze=Pe?_+Ne:_,Be=me?k+Ne:k;u&&(Ge&&(Ae=w-qe),cr&&(He=x-qe)),(!u&&He-Ae>l||u&&Ae-He>l)&&(v(A,t[A]=u?Ae:ae(Ae)),v(q,t[q]=u?He:ae(He))),Be-Ze>o&&(v(C,t[C]=s?Ze:te(Ze)),v(E,t[E]=s?Be:te(Be)))}r.attr(\"d\",e7(e,t)),Me(n,t),$m(e,a,t,R)}function Me(Ne,qe){(s||u)&&Xe();function Xe(){var $e=qe.type!==\"path\",We=Ne.selectAll(\".visual-cue\").data([0]),Se=1;We.enter().append(\"path\").attr({fill:\"#fff\",\"fill-rule\":\"evenodd\",stroke:\"#000\",\"stroke-width\":Se}).classed(\"visual-cue\",!0);var Fe=j(s?qe.xanchor:Q6.midRange($e?[qe.x0,qe.x1]:Kn.extractPathCoords(qe.path,ff.paramIsX))),Qe=J(u?qe.yanchor:Q6.midRange($e?[qe.y0,qe.y1]:Kn.extractPathCoords(qe.path,ff.paramIsY)));if(Fe=Kn.roundPositionForSharpStrokeRendering(Fe,Se),Qe=Kn.roundPositionForSharpStrokeRendering(Qe,Se),s&&u){var re=\"M\"+(Fe-1-Se)+\",\"+(Qe-1-Se)+\"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z\";We.attr(\"d\",re)}else if(s){var xe=\"M\"+(Fe-1-Se)+\",\"+(Qe-9-Se)+\"v18 h2 v-18 Z\";We.attr(\"d\",xe)}else{var Ge=\"M\"+(Fe-9-Se)+\",\"+(Qe-1-Se)+\"h18 v2 h-18 Z\";We.attr(\"d\",Ge)}}}function Le(Ne){Ne.selectAll(\".visual-cue\").remove()}function De(Ne,qe,Xe){var $e=qe.xref,We=qe.yref,Se=uf.getFromId(Xe,$e),Fe=uf.getFromId(Xe,We),Qe=\"\";$e!==\"paper\"&&!Se.autorange&&(Qe+=$e),We!==\"paper\"&&!Fe.autorange&&(Qe+=We),Jm.setClipUrl(Ne,Qe?\"clip\"+Xe._fullLayout._uid+Qe:null,Xe)}}function II(e,r,t){return e.replace(ff.segmentRE,function(a){var n=0,i=a.charAt(0),o=ff.paramIsX[i],l=ff.paramIsY[i],s=ff.numParams[i],u=a.slice(1).replace(ff.paramRE,function(f){return n>=s||(o[n]?f=r(f):l[n]&&(f=t(f)),n++),f});return i+u})}function k_e(e,r){if(Km(e)){var t=r.node(),a=+t.getAttribute(\"data-index\");if(a>=0){if(a===e._fullLayout._activeShapeIndex){BI(e);return}e._fullLayout._activeShapeIndex=a,e._fullLayout._deactivateShape=BI,r7(e)}}}function BI(e){if(Km(e)){var r=e._fullLayout._activeShapeIndex;r>=0&&(HI(e),delete e._fullLayout._activeShapeIndex,r7(e))}}function S_e(e){if(Km(e)){HI(e);var r=e._fullLayout._activeShapeIndex,t=(e.layout||{}).shapes||[];if(r<t.length){for(var a=[],n=0;n<t.length;n++)n!==r&&a.push(t[n]);return delete e._fullLayout._activeShapeIndex,OI.call(\"_guiRelayout\",e,{shapes:a})}}}});var jI=z((yVe,VI)=>{\"use strict\";var hc=ke()._,q_e=function(e){return{DIALOG_TITLE:hc(e,\"Share chart\"),DIALOG_MESSAGE_CLOUD:hc(e,\"This chart will be uploaded to {Plotly Cloud} to create a sharing link. Only you can see it until you change its visibility.\"),DIALOG_MESSAGE_CLOUD_ACCOUNT:hc(e,\"If you don't have a Plotly Cloud account yet, you'll have a chance to create one.\"),DIALOG_MESSAGE_OTHER:hc(e,\"This chart will be sent to {serverUrl}.\"),DIALOG_CANCEL:hc(e,\"Cancel\"),DIALOG_CONFIRM:hc(e,\"Share\")}};VI.exports=q_e});var ZI=z((gVe,XI)=>{\"use strict\";var WI=Er(),{dfltConfig:L_e}=ds(),C_e=jI(),D_e=(e,r,t,a,n)=>{let i=C_e(e),o=r.append(\"div\").classed(\"plotly-cloud-dialog-box\",!0);if(o.append(\"div\").classed(\"plotly-cloud-dialog-title\",!0).text(i.DIALOG_TITLE),t===L_e.plotlyServerURL){let s=o.append(\"div\").classed(\"plotly-cloud-dialog-message\",!0),u=new URL(t).origin,f=i.DIALOG_MESSAGE_CLOUD.split(/(\\{|\\})/),c=f[0],v=f[2],d=f[4];s.append(\"span\").text(c),s.append(\"a\").classed(\"plotly-cloud-dialog-message--hostname\",!0).attr(\"href\",u).attr(\"target\",\"_blank\").text(v),s.append(\"span\").text(d),s.append(\"div\").classed(\"plotly-cloud-dialog-message--account\",!0).text(i.DIALOG_MESSAGE_CLOUD_ACCOUNT)}else{let s=new URL(t),u=s.hostname,f=s.origin,c=i.DIALOG_MESSAGE_OTHER.split(/(\\{|\\})/),v=c[0],d=c[4],p=o.append(\"div\").classed(\"plotly-cloud-dialog-message\",!0);p.append(\"span\").text(v),p.append(\"a\").classed(\"plotly-cloud-dialog-message--hostname\",!0).attr(\"href\",f).attr(\"target\",\"_blank\").text(u),p.append(\"span\").text(d)}let l=o.append(\"div\").classed(\"plotly-cloud-dialog-buttons\",!0);l.append(\"button\").classed(\"plotly-cloud-dialog-btn\",!0).classed(\"plotly-cloud-dialog-btn--cancel\",!0).text(i.DIALOG_CANCEL).on(\"click\",n),l.append(\"button\").classed(\"plotly-cloud-dialog-btn\",!0).classed(\"plotly-cloud-dialog-btn--confirm\",!0).text(i.DIALOG_CONFIRM).on(\"click\",a)},E_e=(e,r,t)=>{let a=WI.select(e._fullLayout._paperdiv.node());a.selectAll(\".plotly-cloud-dialog\").remove();let n=a.append(\"div\").classed(\"plotly-cloud-dialog\",!0),i=()=>{n.remove(),document.removeEventListener(\"keydown\",o)},o=l=>{(l.key===\"Escape\"||l.keyCode===27)&&i()};document.addEventListener(\"keydown\",o),n.on(\"click\",()=>{WI.event.target===n.node()&&i()}),D_e(e,n,r,()=>{i(),t()},i)};XI.exports=E_e});var n7=z((bVe,tB)=>{\"use strict\";var bi=Tr(),P_e=va(),JI=ba(),et=Im(),R_e=Qm().eraseActiveShape,F_e=ZI(),dc=ke(),Xr=dc._,rt=tB.exports={};rt.toImage={name:\"toImage\",title:function(e){var r=e._context.toImageButtonOptions||{},t=r.format||\"png\";return t===\"png\"?Xr(e,\"Download plot as a PNG\"):Xr(e,\"Download plot\")},icon:et.camera,click:function(e){var r=e._context.toImageButtonOptions,t={format:r.format||\"png\"};dc.notifier(Xr(e,\"Preparing image - this may take a few seconds\"),\"long\",e),[\"filename\",\"width\",\"height\",\"scale\"].forEach(function(a){a in r&&(t[a]=r[a])}),bi.call(\"downloadImage\",e,t).then(function(a){dc.notifier(Xr(e,\"Image download succeeded\")+\" - \"+a,\"long\",e)}).catch(function(){dc.notifier(Xr(e,\"Sorry, there was a problem downloading your image!\"),\"long\",e)})}};rt.downloadJson={name:\"downloadJson\",title:function(e){return Xr(e,\"Download plot as JSON\")},icon:et.curlybraces,click:function(e){bi.call(\"downloadImage\",e,{format:\"full-json\"}).then(function(r){dc.notifier(Xr(e,\"JSON download succeeded\")+\" - \"+r,\"long\",e)}).catch(function(){dc.notifier(Xr(e,\"Sorry, there was a problem downloading your JSON file!\"),\"long\",e)})}};rt.sendChartToCloud={name:\"sendChartToCloud\",title:function(e){return Xr(e,\"Share chart...\")},icon:et.cloudupload,click:function(e){var r=(window.PLOTLYENV||{}).BASE_URL||e._context.plotlyServerURL;if(!r){console.error(\"No destination URL provided (plotlyServerURL is empty)\");return}var t;try{t=new URL(r)}catch(n){console.error(\"Invalid plotlyServerURL: \"+r);return}let a=[\"http:\",\"https:\"];if(!a.includes(t.protocol)){console.error(`Invalid protocol '${t.protocol}' in plotlyServerURL '${r}'. Must be one of: ${a.join(\", \")}`);return}F_e(e,r,function(){P_e.sendDataToCloud(e,r)})}};rt.zoom2d={name:\"zoom2d\",_cat:\"zoom\",title:function(e){return Xr(e,\"Zoom\")},attr:\"dragmode\",val:\"zoom\",icon:et.zoombox,click:Mn};rt.pan2d={name:\"pan2d\",_cat:\"pan\",title:function(e){return Xr(e,\"Pan\")},attr:\"dragmode\",val:\"pan\",icon:et.pan,click:Mn};rt.select2d={name:\"select2d\",_cat:\"select\",title:function(e){return Xr(e,\"Box Select\")},attr:\"dragmode\",val:\"select\",icon:et.selectbox,click:Mn};rt.lasso2d={name:\"lasso2d\",_cat:\"lasso\",title:function(e){return Xr(e,\"Lasso Select\")},attr:\"dragmode\",val:\"lasso\",icon:et.lasso,click:Mn};rt.drawclosedpath={name:\"drawclosedpath\",title:function(e){return Xr(e,\"Draw closed freeform\")},attr:\"dragmode\",val:\"drawclosedpath\",icon:et.drawclosedpath,click:Mn};rt.drawopenpath={name:\"drawopenpath\",title:function(e){return Xr(e,\"Draw open freeform\")},attr:\"dragmode\",val:\"drawopenpath\",icon:et.drawopenpath,click:Mn};rt.drawline={name:\"drawline\",title:function(e){return Xr(e,\"Draw line\")},attr:\"dragmode\",val:\"drawline\",icon:et.drawline,click:Mn};rt.drawrect={name:\"drawrect\",title:function(e){return Xr(e,\"Draw rectangle\")},attr:\"dragmode\",val:\"drawrect\",icon:et.drawrect,click:Mn};rt.drawcircle={name:\"drawcircle\",title:function(e){return Xr(e,\"Draw circle\")},attr:\"dragmode\",val:\"drawcircle\",icon:et.drawcircle,click:Mn};rt.eraseshape={name:\"eraseshape\",title:function(e){return Xr(e,\"Erase active shape\")},icon:et.eraseshape,click:R_e};rt.zoomIn2d={name:\"zoomIn2d\",_cat:\"zoomin\",title:function(e){return Xr(e,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:et.zoom_plus,click:Mn};rt.zoomOut2d={name:\"zoomOut2d\",_cat:\"zoomout\",title:function(e){return Xr(e,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:et.zoom_minus,click:Mn};rt.autoScale2d={name:\"autoScale2d\",_cat:\"autoscale\",title:function(e){return Xr(e,\"Autoscale\")},attr:\"zoom\",val:\"auto\",icon:et.autoscale,click:Mn};rt.resetScale2d={name:\"resetScale2d\",_cat:\"resetscale\",title:function(e){return Xr(e,\"Reset axes\")},attr:\"zoom\",val:\"reset\",icon:et.home,click:Mn};rt.hoverClosestCartesian={name:\"hoverClosestCartesian\",_cat:\"hoverclosest\",title:function(e){return Xr(e,\"Show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:et.tooltip_basic,gravity:\"ne\",click:Mn};rt.hoverCompareCartesian={name:\"hoverCompareCartesian\",_cat:\"hoverCompare\",title:function(e){return Xr(e,\"Compare data on hover\")},attr:\"hovermode\",val:function(e){return e._fullLayout._isHoriz?\"y\":\"x\"},icon:et.tooltip_compare,gravity:\"ne\",click:Mn};function Mn(e,r){var t=r.currentTarget,a=t.getAttribute(\"data-attr\"),n=t.getAttribute(\"data-val\")||!0,i=e._fullLayout,o={},l=JI.list(e,null,!0),s=i._cartesianSpikesEnabled,u,f;if(a===\"zoom\"){var c=n===\"in\"?.5:2,v=(1+c)/2,d=(1-c)/2,p,y;for(f=0;f<l.length;f++)if(u=l[f],y=u.modebardisable===\"none\"||u.modebardisable.indexOf(n===\"auto\"||n===\"reset\"?\"autoscale\":\"zoominout\")===-1,y&&!u.fixedrange)if(p=u._name,n===\"auto\")o[p+\".autorange\"]=!0;else if(n===\"reset\")u._rangeInitial0===void 0&&u._rangeInitial1===void 0?o[p+\".autorange\"]=!0:u._rangeInitial0===void 0?(o[p+\".autorange\"]=u._autorangeInitial,o[p+\".range\"]=[null,u._rangeInitial1]):u._rangeInitial1===void 0?(o[p+\".range\"]=[u._rangeInitial0,null],o[p+\".autorange\"]=u._autorangeInitial):o[p+\".range\"]=[u._rangeInitial0,u._rangeInitial1],u._showSpikeInitial!==void 0&&(o[p+\".showspikes\"]=u._showSpikeInitial,s===\"on\"&&!u._showSpikeInitial&&(s=\"off\"));else{var m=[u.r2l(u.range[0]),u.r2l(u.range[1])],b=[v*m[0]+d*m[1],v*m[1]+d*m[0]];o[p+\".range[0]\"]=u.l2r(b[0]),o[p+\".range[1]\"]=u.l2r(b[1])}}else a===\"hovermode\"&&(n===\"x\"||n===\"y\")&&(n=i._isHoriz?\"y\":\"x\",t.setAttribute(\"data-val\",n)),o[a]=n;i._cartesianSpikesEnabled=s,bi.call(\"_guiRelayout\",e,o)}rt.zoom3d={name:\"zoom3d\",_cat:\"zoom\",title:function(e){return Xr(e,\"Zoom\")},attr:\"scene.dragmode\",val:\"zoom\",icon:et.zoombox,click:ry};rt.pan3d={name:\"pan3d\",_cat:\"pan\",title:function(e){return Xr(e,\"Pan\")},attr:\"scene.dragmode\",val:\"pan\",icon:et.pan,click:ry};rt.orbitRotation={name:\"orbitRotation\",title:function(e){return Xr(e,\"Orbital rotation\")},attr:\"scene.dragmode\",val:\"orbit\",icon:et[\"3d_rotate\"],click:ry};rt.tableRotation={name:\"tableRotation\",title:function(e){return Xr(e,\"Turntable rotation\")},attr:\"scene.dragmode\",val:\"turntable\",icon:et[\"z-axis\"],click:ry};function ry(e,r){for(var t=r.currentTarget,a=t.getAttribute(\"data-attr\"),n=t.getAttribute(\"data-val\")||!0,i=e._fullLayout._subplots.gl3d||[],o={},l=a.split(\".\"),s=0;s<i.length;s++)o[i[s]+\".\"+l[1]]=n;var u=n===\"pan\"?n:\"zoom\";o.dragmode=u,bi.call(\"_guiRelayout\",e,o)}rt.resetCameraDefault3d={name:\"resetCameraDefault3d\",_cat:\"resetCameraDefault\",title:function(e){return Xr(e,\"Reset camera to default\")},attr:\"resetDefault\",icon:et.home,click:t7};rt.resetCameraLastSave3d={name:\"resetCameraLastSave3d\",_cat:\"resetCameraLastSave\",title:function(e){return Xr(e,\"Reset camera to last save\")},attr:\"resetLastSave\",icon:et.movie,click:t7};function t7(e,r){for(var t=r.currentTarget,a=t.getAttribute(\"data-attr\"),n=a===\"resetLastSave\",i=a===\"resetDefault\",o=e._fullLayout,l=o._subplots.gl3d||[],s={},u=0;u<l.length;u++){var f=l[u],c=f+\".camera\",v=f+\".aspectratio\",d=f+\".aspectmode\",p=o[f]._scene,y;n?(s[c+\".up\"]=p.viewInitial.up,s[c+\".eye\"]=p.viewInitial.eye,s[c+\".center\"]=p.viewInitial.center,y=!0):i&&(s[c+\".up\"]=null,s[c+\".eye\"]=null,s[c+\".center\"]=null,y=!0),y&&(s[v+\".x\"]=p.viewInitial.aspectratio.x,s[v+\".y\"]=p.viewInitial.aspectratio.y,s[v+\".z\"]=p.viewInitial.aspectratio.z,s[d]=p.viewInitial.aspectmode)}bi.call(\"_guiRelayout\",e,s)}rt.hoverClosest3d={name:\"hoverClosest3d\",_cat:\"hoverclosest\",title:function(e){return Xr(e,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:et.tooltip_basic,gravity:\"ne\",click:z_e};function KI(e,r){var t=r.currentTarget,a=t._previousVal,n=e._fullLayout,i=n._subplots.gl3d||[],o=[\"xaxis\",\"yaxis\",\"zaxis\"],l={},s={};if(a)s=a,t._previousVal=null;else{for(var u=0;u<i.length;u++){var f=i[u],c=n[f],v=f+\".hovermode\";l[v]=c.hovermode,s[v]=!1;for(var d=0;d<3;d++){var p=o[d],y=f+\".\"+p+\".showspikes\";s[y]=!1,l[y]=c[p].showspikes}}t._previousVal=l}return s}function z_e(e,r){var t=KI(e,r);bi.call(\"_guiRelayout\",e,t)}rt.zoomInGeo={name:\"zoomInGeo\",_cat:\"zoomin\",title:function(e){return Xr(e,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:et.zoom_plus,click:a7};rt.zoomOutGeo={name:\"zoomOutGeo\",_cat:\"zoomout\",title:function(e){return Xr(e,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:et.zoom_minus,click:a7};rt.resetGeo={name:\"resetGeo\",_cat:\"reset\",title:function(e){return Xr(e,\"Reset\")},attr:\"reset\",val:null,icon:et.autoscale,click:a7};rt.hoverClosestGeo={name:\"hoverClosestGeo\",_cat:\"hoverclosest\",title:function(e){return Xr(e,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:et.tooltip_basic,gravity:\"ne\",click:eB};var $I=2;function a7(e,r){var l;let t=r.currentTarget,a=t.getAttribute(\"data-attr\"),n=t.getAttribute(\"data-val\")||!0,i=e._fullLayout,o=i._subplots.geo||[];for(let s of o){let u=i[s],f=u._subplot;if(a===\"zoom\"){let c=f.projection,v=c.scale()/f.fitScale,[d,p]=c.rotate().map(k=>-k),[y,m]=c.invert(f.midPt),{minscale:b}=u.projection,T=(l=u.projection.maxscale)!=null?l:1/0,w=Math.min(b,T),x=Math.max(b,T),_=n===\"in\"?$I*v:1/$I*v;_>x?_=x:_<w&&(_=w),_!==v&&bi.call(\"_guiRelayout\",e,{[s+\".projection.scale\"]:_,[s+\".projection.rotation.lon\"]:d,[s+\".projection.rotation.lat\"]:p,[s+\".center.lon\"]:y,[s+\".center.lat\"]:m,[s+\".fitbounds\"]:!1})}}a===\"reset\"&&ey(e,\"geo\")}rt.hoverClosestPie={name:\"hoverClosestPie\",_cat:\"hoverclosest\",title:function(e){return Xr(e,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:et.tooltip_basic,gravity:\"ne\",click:eB};function QI(e){var r=e._fullLayout;return r.hovermode?!1:r._has(\"cartesian\")?r._isHoriz?\"y\":\"x\":\"closest\"}function eB(e){var r=QI(e);bi.call(\"_guiRelayout\",e,\"hovermode\",r)}rt.resetViewSankey={name:\"resetSankeyGroup\",title:function(e){return Xr(e,\"Reset view\")},icon:et.home,click:function(e){for(var r={\"node.groups\":[],\"node.x\":[],\"node.y\":[]},t=0;t<e._fullData.length;t++){var a=e._fullData[t]._viewInitial;r[\"node.groups\"].push(a.node.groups.slice()),r[\"node.x\"].push(a.node.x.slice()),r[\"node.y\"].push(a.node.y.slice())}bi.call(\"restyle\",e,r)}};rt.toggleHover={name:\"toggleHover\",title:function(e){return Xr(e,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:et.tooltip_basic,gravity:\"ne\",click:function(e,r){var t=KI(e,r);t.hovermode=QI(e),bi.call(\"_guiRelayout\",e,t)}};rt.resetViews={name:\"resetViews\",title:function(e){return Xr(e,\"Reset views\")},icon:et.home,click:function(e,r){var t=r.currentTarget;t.setAttribute(\"data-attr\",\"zoom\"),t.setAttribute(\"data-val\",\"reset\"),Mn(e,r),t.setAttribute(\"data-attr\",\"resetLastSave\"),t7(e,r),ey(e,\"geo\"),ey(e,\"map\")}};rt.toggleSpikelines={name:\"toggleSpikelines\",title:function(e){return Xr(e,\"Toggle Spike Lines\")},icon:et.spikeline,attr:\"_cartesianSpikesEnabled\",val:\"on\",click:function(e){var r=e._fullLayout,t=r._cartesianSpikesEnabled;r._cartesianSpikesEnabled=t===\"on\"?\"off\":\"on\",bi.call(\"_guiRelayout\",e,N_e(e))}};function N_e(e){for(var r=e._fullLayout,t=r._cartesianSpikesEnabled===\"on\",a=JI.list(e,null,!0),n={},i=0;i<a.length;i++){var o=a[i];n[o._name+\".showspikes\"]=t?!0:o._showSpikeInitial}return n}rt.resetViewMap={name:\"resetViewMap\",_cat:\"resetView\",title:function(e){return Xr(e,\"Reset view\")},attr:\"reset\",icon:et.home,click:function(e){ey(e,\"map\")}};rt.zoomInMap={name:\"zoomInMap\",_cat:\"zoomin\",title:function(e){return Xr(e,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:et.zoom_plus,click:rB};rt.zoomOutMap={name:\"zoomOutMap\",_cat:\"zoomout\",title:function(e){return Xr(e,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:et.zoom_minus,click:rB};function rB(e,r){I_e(e,r,\"map\")}function I_e(e,r,t){for(var a=r.currentTarget,n=a.getAttribute(\"data-val\"),i=e._fullLayout,o=i._subplots[t]||[],l=1.05,s={},u=0;u<o.length;u++){var f=o[u],c=i[f].zoom,v=n===\"in\"?l*c:c/l;s[f+\".zoom\"]=v}bi.call(\"_guiRelayout\",e,s)}function ey(e,r){for(var t=e._fullLayout,a=t._subplots[r]||[],n={},i=0;i<a.length;i++)for(var o=a[i],l=t[o]._subplot,s=l.viewInitial,u=Object.keys(s),f=0;f<u.length;f++){var c=u[f];n[o+\".\"+c]=s[c]}bi.call(\"_guiRelayout\",e,n)}});var i7=z((xVe,oB)=>{\"use strict\";var aB=n7(),B_e=Object.keys(aB),nB=[\"drawline\",\"drawopenpath\",\"drawclosedpath\",\"drawcircle\",\"drawrect\",\"eraseshape\"],iB=[\"v1hovermode\",\"hoverclosest\",\"hovercompare\",\"togglehover\",\"togglespikelines\"].concat(nB,[\"downloadJson\"]),pc=[],O_e=function(e){if(iB.indexOf(e._cat||e.name)===-1){var r=e.name,t=(e._cat||e.name).toLowerCase();pc.indexOf(r)===-1&&pc.push(r),pc.indexOf(t)===-1&&pc.push(t)}};B_e.forEach(function(e){O_e(aB[e])});pc.sort();oB.exports={DRAW_MODES:nB,backButtons:iB,foreButtons:pc}});var l7={};d0(l7,{default:()=>U_e});var o7,H_e,U_e,s7=h0(()=>{\"use strict\";o7=cs(i7()),H_e={editType:\"modebar\",orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\",editType:\"modebar\",description:\"Sets the orientation of the modebar.\"},bgcolor:{valType:\"color\",editType:\"modebar\",description:\"Sets the background color of the modebar.\"},color:{valType:\"color\",editType:\"modebar\",description:\"Sets the color of the icons in the modebar.\"},activecolor:{valType:\"color\",editType:\"modebar\",description:\"Sets the color of the active or hovered on icons in the modebar.\"},uirevision:{valType:\"any\",editType:\"none\",description:[\"Controls persistence of user-driven changes related to the modebar,\",\"including `hovermode`, `dragmode`, and `showspikes` at both the\",\"root level and inside subplots. Defaults to `layout.uirevision`.\"].join(\" \")},add:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\",description:[\"Determines which predefined modebar buttons to add.\",\"Please note that these buttons will only be shown if they are\",\"compatible with all trace types used in a graph.\",\"Similar to `config.modeBarButtonsToAdd` option.\",`This may include *${o7.default.backButtons.join(\"*, *\")}*.`].join(\" \")},remove:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\",description:[\"Determines which predefined modebar buttons to remove.\",\"Similar to `config.modeBarButtonsToRemove` option.\",`This may include *${o7.default.foreButtons.join(\"*, *\")}*.`].join(\" \")}},U_e=H_e});var sB=z((_Ve,lB)=>{\"use strict\";var G_e=ke(),Zh=Sr(),Y_e=St(),V_e=(s7(),un(l7)).default;lB.exports=function(r,t){var a=r.modebar||{},n=Y_e.newContainer(t,\"modebar\");function i(l,s){return G_e.coerce(a,n,V_e,l,s)}i(\"orientation\"),i(\"bgcolor\",Zh.addOpacity(t.paper_bgcolor,.5));var o=Zh.contrast(Zh.rgb(t.modebar.bgcolor));i(\"color\",Zh.addOpacity(o,.3)),i(\"activecolor\",Zh.addOpacity(o,.7)),i(\"uirevision\",t.uirevision),i(\"add\"),i(\"remove\")}});var vB=z((wVe,cB)=>{\"use strict\";var u7=Er(),j_e=Ir(),ty=ke(),uB=Im(),W_e=jv().version,X_e=new DOMParser;function fB(e){this.container=e.container,this.element=document.createElement(\"div\"),this.update(e.graphInfo,e.buttons),this.container.appendChild(this.element)}var vl=fB.prototype;vl.update=function(e,r){this.graphInfo=e;var t=this.graphInfo._context,a=this.graphInfo._fullLayout,n=\"modebar-\"+a._uid;this.element.setAttribute(\"id\",n),this.element.setAttribute(\"role\",\"toolbar\"),this._uid=n,this.element.className=\"modebar modebar--custom\",t.displayModeBar===\"hover\"&&(this.element.className+=\" modebar--hover ease-bg\"),a.modebar.orientation===\"v\"&&(this.element.className+=\" vertical\",r=r.reverse());var i=a.modebar,o=\"#\"+n+\" .modebar-group\";document.querySelectorAll(o).forEach(function(c){c.style.backgroundColor=i.bgcolor});var l=!this.hasButtons(r),s=this.hasLogo!==t.displaylogo,u=this.locale!==t.locale;if(this.locale=t.locale,(l||s||u)&&(this.removeAllButtons(),this.updateButtons(r),t.watermark||t.displaylogo)){var f=this.getLogo();t.watermark&&(f.className=f.className+\" watermark\"),a.modebar.orientation===\"v\"?this.element.insertBefore(f,this.element.childNodes[0]):this.element.appendChild(f),this.hasLogo=!0}this.updateActiveButton(),ty.setStyleOnHover(\"#\"+n+\" .modebar-btn\",\".active\",\".icon path\",\"fill: \"+i.activecolor,\"fill: \"+i.color,this.element)};vl.updateButtons=function(e){var r=this;this.buttons=e,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(t){var a=r.createGroup();t.forEach(function(n){var i=n.name;if(!i)throw new Error(\"must provide button 'name' in button config\");if(r.buttonsNames.indexOf(i)!==-1)throw new Error(\"button name '\"+i+\"' is taken\");r.buttonsNames.push(i);var o=r.createButton(n);r.buttonElements.push(o),a.appendChild(o)}),r.element.appendChild(a)})};vl.createGroup=function(){var e=document.createElement(\"div\");e.className=\"modebar-group\";var r=this.graphInfo._fullLayout.modebar;return e.style.backgroundColor=r.bgcolor,e};vl.createButton=function(e){var r=this,t=document.createElement(\"button\");t.setAttribute(\"type\",\"button\"),t.setAttribute(\"rel\",\"tooltip\"),t.className=\"modebar-btn\";var a=e.title;a===void 0?a=e.name:typeof a==\"function\"&&(a=a(this.graphInfo)),(a||a===0)&&(t.setAttribute(\"data-title\",a),t.setAttribute(\"aria-label\",a)),e.attr!==void 0&&t.setAttribute(\"data-attr\",e.attr);var n=e.val;n!==void 0&&(typeof n==\"function\"&&(n=n(this.graphInfo)),t.setAttribute(\"data-val\",n));var i=e.click;if(typeof i!=\"function\")throw new Error(\"must provide button 'click' function in button config\");t.addEventListener(\"click\",function(l){e.click(r.graphInfo,l),r.updateActiveButton(l.currentTarget)}),t.setAttribute(\"data-toggle\",e.toggle||!1),e.toggle&&u7.select(t).classed(\"active\",!0);var o=e.icon;return typeof o==\"function\"?t.appendChild(o()):t.appendChild(this.createIcon(o||uB.question)),t.setAttribute(\"data-gravity\",e.gravity||\"n\"),t};vl.createIcon=function(e){var r=j_e(e.height)?Number(e.height):e.ascent-e.descent,t=\"http://www.w3.org/2000/svg\",a;if(e.path){a=document.createElementNS(t,\"svg\"),a.setAttribute(\"viewBox\",[0,0,e.width,r].join(\" \")),a.setAttribute(\"class\",\"icon\");var n=document.createElementNS(t,\"path\");n.setAttribute(\"d\",e.path),e.transform?n.setAttribute(\"transform\",e.transform):e.ascent!==void 0&&n.setAttribute(\"transform\",\"matrix(1 0 0 -1 0 \"+e.ascent+\")\"),a.appendChild(n)}if(e.svg){var i=X_e.parseFromString(e.svg,\"application/xml\");a=i.childNodes[0]}return a.setAttribute(\"height\",\"1em\"),a.setAttribute(\"width\",\"1em\"),a};vl.updateActiveButton=function(e){var r=this.graphInfo._fullLayout,t=e!==void 0?e.getAttribute(\"data-attr\"):null;this.buttonElements.forEach(function(a){var n=a.getAttribute(\"data-val\")||!0,i=a.getAttribute(\"data-attr\"),o=a.getAttribute(\"data-toggle\")===\"true\",l=u7.select(a),s=function(c,v){var d=r.modebar,p=c.querySelector(\".icon path\");p&&(v||c.matches(\":hover\")?p.style.fill=d.activecolor:p.style.fill=d.color)};if(o){if(i===t){var u=!l.classed(\"active\");l.classed(\"active\",u),s(a,u)}}else{var f=i===null?i:ty.nestedProperty(r,i).get();l.classed(\"active\",f===n),s(a,f===n)}})};vl.hasButtons=function(e){var r=this.buttons;if(!r||e.length!==r.length)return!1;for(var t=0;t<e.length;++t){if(e[t].length!==r[t].length)return!1;for(var a=0;a<e[t].length;a++)if(e[t][a].name!==r[t][a].name)return!1}return!0};function Z_e(e){return e+\" (v\"+W_e+\")\"}vl.getLogo=function(){var e=this.createGroup(),r=document.createElement(\"a\");return r.href=\"https://plotly.com/\",r.target=\"_blank\",r.setAttribute(\"data-title\",Z_e(ty._(this.graphInfo,\"Produced with Plotly.js\"))),r.className=\"modebar-btn plotlyjsicon modebar-btn--logo\",r.appendChild(this.createIcon(uB.newplotlylogo)),e.appendChild(r),e};vl.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1};vl.destroy=function(){ty.removeElement(this.container.querySelector(\".modebar\"))};function $_e(e,r){var t=e._fullLayout,a=new fB({graphInfo:e,container:t._modebardiv.node(),buttons:r});return t._privateplot&&u7.select(a.element).append(\"span\").classed(\"badge-private float--left\",!0).text(\"PRIVATE\"),a}cB.exports=$_e});var pB=z((TVe,dB)=>{\"use strict\";var J_e=ba(),hB=Jn(),f7=Tr(),K_e=qo().isUnifiedHover,Q_e=vB(),ay=n7(),e4e=i7().DRAW_MODES,r4e=ke().extendDeep;dB.exports=function(r){var t=r._fullLayout,a=r._context,n=t._modeBar;if(!a.displayModeBar&&!a.watermark){n&&(n.destroy(),delete t._modeBar);return}if(!Array.isArray(a.modeBarButtonsToRemove))throw new Error([\"*modeBarButtonsToRemove* configuration options\",\"must be an array.\"].join(\" \"));if(!Array.isArray(a.modeBarButtonsToAdd))throw new Error([\"*modeBarButtonsToAdd* configuration options\",\"must be an array.\"].join(\" \"));var i=a.modeBarButtons,o;Array.isArray(i)&&i.length?o=l4e(i):!a.displayModeBar&&a.watermark?o=[]:o=t4e(r),n?n.update(r,o):t._modeBar=Q_e(r,o)};function t4e(e){var r=e._fullLayout,t=e._fullData,a=e._context;function n(G,V){if(typeof V==\"string\"){if(V.toLowerCase()===G.toLowerCase())return!0}else{var W=V.name,j=V._cat||V.name;if(W===G||j===G.toLowerCase())return!0}return!1}var i=r.modebar.add;typeof i==\"string\"&&(i=[i]);var o=r.modebar.remove;typeof o==\"string\"&&(o=[o]);var l=a.modeBarButtonsToAdd.concat(i.filter(function(G){for(var V=0;V<a.modeBarButtonsToRemove.length;V++)if(n(G,a.modeBarButtonsToRemove[V]))return!1;return!0})),s=a.modeBarButtonsToRemove.concat(o.filter(function(G){for(var V=0;V<a.modeBarButtonsToAdd.length;V++)if(n(G,a.modeBarButtonsToAdd[V]))return!1;return!0})),u=r._has(\"cartesian\"),f=r._has(\"gl3d\"),c=r._has(\"geo\"),v=r._has(\"pie\"),d=r._has(\"funnelarea\"),p=r._has(\"ternary\"),y=r._has(\"map\"),m=r._has(\"polar\"),b=r._has(\"smith\"),T=r._has(\"sankey\"),w=a4e(r),x=K_e(r.hovermode),_=[];function k(G){if(G.length){for(var V=[],W=0;W<G.length;W++){for(var j=G[W],J=ay[j],te=J.name.toLowerCase(),ae=(J._cat||J.name).toLowerCase(),se=!1,$=0;$<s.length;$++){var fe=s[$].toLowerCase();if(fe===te||fe===ae){se=!0;break}}se||V.push(ay[j])}_.push(V)}}var A=!1,q=[],C=[],E=[],P=[];(u||v||d||p)+c+f+y+m+b>1?(C=[\"toggleHover\"],E=[\"resetViews\"]):c?(q=[\"zoomInGeo\",\"zoomOutGeo\"],C=[\"hoverClosestGeo\"],E=[\"resetGeo\"]):f?(C=[\"hoverClosest3d\"],E=[\"resetCameraDefault3d\",\"resetCameraLastSave3d\"]):y?(q=[\"zoomInMap\",\"zoomOutMap\"],C=[\"toggleHover\"],E=[\"resetViewMap\"]):v?C=[\"hoverClosestPie\"]:T?(C=[\"hoverClosestCartesian\",\"hoverCompareCartesian\"],E=[\"resetViewSankey\"]):C=[\"toggleHover\"],u&&C.push(\"toggleSpikelines\",\"hoverClosestCartesian\",\"hoverCompareCartesian\"),(i4e(t)||x)&&(C=[]),u&&!w&&(q=[\"zoomIn2d\",\"zoomOut2d\",\"autoScale2d\"],E[0]!==\"resetViews\"&&(E=[\"resetScale2d\"])),f?P=[\"zoom3d\",\"pan3d\",\"orbitRotation\",\"tableRotation\"]:u&&!w||p?P=[\"zoom2d\",\"pan2d\"]:y||c?P=[\"pan2d\"]:m&&(P=[\"zoom2d\"]),n4e(t)&&P.push(\"select2d\",\"lasso2d\");var R=[],N=function(G){R.indexOf(G)===-1&&C.indexOf(G)!==-1&&R.push(G)};if(Array.isArray(l)){for(var I=[],O=0;O<l.length;O++){var U=l[O];typeof U==\"string\"?(U=U.toLowerCase(),e4e.indexOf(U)!==-1?(r._has(\"map\")||r._has(\"cartesian\"))&&P.push(U):U===\"togglespikelines\"?N(\"toggleSpikelines\"):U===\"togglehover\"?N(\"toggleHover\"):U===\"hovercompare\"?N(\"hoverCompareCartesian\"):U===\"hoverclosest\"?(N(\"hoverClosestCartesian\"),N(\"hoverClosestGeo\"),N(\"hoverClosest3d\"),N(\"hoverClosestPie\")):U===\"v1hovermode\"?(N(\"hoverClosestCartesian\"),N(\"hoverCompareCartesian\"),N(\"hoverClosestGeo\"),N(\"hoverClosest3d\"),N(\"hoverClosestPie\")):U===\"downloadjson\"&&(A=!0)):I.push(U)}l=I}var Y=[\"toImage\"];return A&&Y.push(\"downloadJson\"),a.showSendToCloud&&Y.push(\"sendChartToCloud\"),k(Y),k(P),k(q.concat(E)),k(R),o4e(_,l)}function a4e(e){for(var r=J_e.list({_fullLayout:e},null,!0),t=0;t<r.length;t++){var a=r[t].modebardisable;if(!r[t].fixedrange&&a!==\"autoscale+zoominout\"&&a!==\"zoominout+autoscale\")return!1}return!0}function n4e(e){for(var r=!1,t=0;t<e.length&&!r;t++){var a=e[t];!a._module||!a._module.selectPoints||(f7.traceIs(a,\"scatter-like\")&&a.type!==\"quiver\"?(hB.hasMarkers(a)||hB.hasText(a))&&(r=!0):f7.traceIs(a,\"box-violin\")?(a.boxpoints===\"all\"||a.points===\"all\")&&(r=!0):r=!0)}return r}function i4e(e){for(var r=0;r<e.length;r++)if(!f7.traceIs(e[r],\"noHover\"))return!1;return!0}function o4e(e,r){if(r.length)if(Array.isArray(r[0]))for(var t=0;t<r.length;t++)e.push(r[t]);else e.push(r);return e}function l4e(e){for(var r=r4e([],e),t=0;t<r.length;t++)for(var a=r[t],n=0;n<a.length;n++){var i=a[n];if(typeof i==\"string\")if(ay[i]!==void 0)r[t][n]=ay[i];else throw new Error([\"*modeBarButtons* configuration options\",\"invalid button name\"].join(\" \"))}return r}});var c7=z((AVe,mB)=>{\"use strict\";mB.exports={moduleType:\"component\",name:\"modebar\",layoutAttributes:(s7(),un(l7)).default,supplyLayoutDefaults:sB(),manage:pB()}});var v7=z((MVe,yB)=>{\"use strict\";var s4e=Qa().FROM_BL;yB.exports=function(r,t,a){a===void 0&&(a=s4e[r.constraintoward||\"center\"]);var n=[r.r2l(r.range[0]),r.r2l(r.range[1])],i=n[0]+(n[1]-n[0])*a;r.range=r._input.range=[r.l2r(i+(n[0]-i)*t),r.l2r(i+(n[1]-i)*t)],r.setScale()}});var vf=z($h=>{\"use strict\";var cf=ke(),h7=Ph(),Co=ba().id2name,u4e=Ni(),gB=v7(),f4e=ec(),c4e=Gt().ALMOST_EQUAL,v4e=Qa().FROM_BL;$h.handleDefaults=function(e,r,t){var a=t.axIds,n=t.axHasImage,i=r._axisConstraintGroups=[],o=r._axisMatchGroups=[],l,s,u,f,c,v,d,p;for(l=0;l<a.length;l++)f=Co(a[l]),c=e[f],v=r[f],h4e(c,v,{axIds:a,layoutOut:r,hasImage:n[f]});function y(q,C){for(l=0;l<q.length;l++){s=q[l];for(u in s)r[Co(u)][C]=s}}for(y(o,\"_matchGroup\"),l=0;l<i.length;l++){s=i[l];for(u in s)if(v=r[Co(u)],v.fixedrange){for(var m in s){var b=Co(m);(e[b]||{}).fixedrange===!1&&cf.warn(\"fixedrange was specified as false for axis \"+b+\" but was overridden because another axis in its constraint group has fixedrange true\"),r[b].fixedrange=!0}break}}for(l=0;l<i.length;){s=i[l];for(u in s){v=r[Co(u)],v._matchGroup&&Object.keys(v._matchGroup).length===Object.keys(s).length&&(i.splice(l,1),l--);break}l++}y(i,\"_constraintGroup\");var T=[\"constrain\",\"range\",\"autorange\",\"rangemode\",\"rangebreaks\",\"categoryorder\",\"categoryarray\"],w=!1,x=!1;function _(){p=v[d],d===\"rangebreaks\"&&(x=v._hasDayOfWeekBreaks)}for(l=0;l<o.length;l++){s=o[l];for(var k=0;k<T.length;k++){d=T[k],p=null;var A;for(u in s)if(f=Co(u),c=e[f],v=r[f],d in v){if(!v.matches&&(A=v,d in c)){_();break}p===null&&d in c&&_()}if(d===\"range\"&&p&&c.range&&c.range.length===2&&c.range[0]!==null&&c.range[1]!==null&&(w=!0),d===\"autorange\"&&p===null&&w&&(p=!1),p===null&&d in A&&(p=A[d]),p!==null)for(u in s)v=r[Co(u)],v[d]=d===\"range\"?p.slice():p,d===\"rangebreaks\"&&(v._hasDayOfWeekBreaks=x,f4e(v,r))}}};function h4e(e,r,t){var a=t.axIds,n=t.layoutOut,i=t.hasImage,o=n._axisConstraintGroups,l=n._axisMatchGroups,s=r._id,u=s.charAt(0),f=((n._splomAxes||{})[u]||{})[s]||{},c=r._id,v=c.charAt(0)===\"x\";r._matchGroup=null,r._constraintGroup=null;function d(R,N){return cf.coerce(e,r,u4e,R,N)}d(\"constrain\",i?\"domain\":\"range\"),cf.coerce(e,r,{constraintoward:{valType:\"enumerated\",values:v?[\"left\",\"center\",\"right\"]:[\"bottom\",\"middle\",\"top\"],dflt:v?\"center\":\"middle\"}},\"constraintoward\");var p=r.type,y,m,b=[];for(y=0;y<a.length;y++)if(m=a[y],m!==c){var T=n[Co(m)];T.type===p&&b.push(m)}var w=_B(o,c);if(w){var x=[];for(y=0;y<b.length;y++)m=b[y],w[m]||x.push(m);b=x}var _=b.length,k,A;_&&(e.matches||f.matches)&&(k=cf.coerce(e,r,{matches:{valType:\"enumerated\",values:b,dflt:b.indexOf(f.matches)!==-1?f.matches:void 0}},\"matches\"));var q=i&&!v?r.anchor:void 0;if(_&&!k&&(e.scaleanchor||q)&&(A=cf.coerce(e,r,{scaleanchor:{valType:\"enumerated\",values:b.concat([!1])}},\"scaleanchor\",q)),k){r._matchGroup=d7(l,c,k,1);var C=n[Co(k)],E=bB(n,r)/bB(n,C);v!==(k.charAt(0)===\"x\")&&(E=(v?\"x\":\"y\")+E),d7(o,c,k,E)}else e.matches&&a.indexOf(e.matches)!==-1&&cf.warn(\"ignored \"+r._name+'.matches: \"'+e.matches+'\" to avoid an infinite loop');if(A){var P=d(\"scaleratio\");P||(P=r.scaleratio=1),d7(o,c,A,P)}else e.scaleanchor&&a.indexOf(e.scaleanchor)!==-1&&cf.warn(\"ignored \"+r._name+'.scaleanchor: \"'+e.scaleanchor+'\" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.')}function bB(e,r){var t=r.domain;return t||(t=e[Co(r.overlaying)].domain),t[1]-t[0]}function _B(e,r){for(var t=0;t<e.length;t++)if(e[t][r])return e[t];return null}function d7(e,r,t,a){var n,i,o,l,s,u=_B(e,r);u===null?(u={},u[r]=1,s=e.length,e.push(u)):s=e.indexOf(u);var f=Object.keys(u);for(n=0;n<e.length;n++)if(o=e[n],n!==s&&o[t]){var c=o[t];for(i=0;i<f.length;i++)l=f[i],o[l]=p7(c,p7(a,u[l]));e.splice(s,1);return}if(a!==1)for(i=0;i<f.length;i++){var v=f[i];u[v]=p7(a,u[v])}u[t]=1}function p7(e,r){var t=\"\",a=\"\",n,i;typeof e==\"string\"&&(t=e.match(/^[xy]*/)[0],n=t.length,e=+e.slice(n)),typeof r==\"string\"&&(a=r.match(/^[xy]*/)[0],i=a.length,r=+r.slice(i));var o=e*r;return!n&&!i?o:!n||!i||t.charAt(0)===a.charAt(0)?t+a+e*r:n===i?o:(n>i?t.slice(i):a.slice(n))+o}function d4e(e,r){for(var t=r._size,a=t.h/t.w,n={},i=Object.keys(e),o=0;o<i.length;o++){var l=i[o],s=e[l];if(typeof s==\"string\"){var u=s.match(/^[xy]*/)[0],f=u.length;s=+s.slice(f);for(var c=u.charAt(0)===\"y\"?a:1/a,v=0;v<f;v++)s*=c}n[l]=s}return n}$h.enforce=function(r){var t=r._fullLayout,a=t._axisConstraintGroups||[],n,i,o,l,s,u,f,c;for(n=0;n<a.length;n++){o=d4e(a[n],t);var v=Object.keys(o),d=1/0,p=0,y=1/0,m={},b={},T=!1;for(i=0;i<v.length;i++)l=v[i],b[l]=s=t[Co(l)],s._inputDomain?s.domain=s._inputDomain.slice():s._inputDomain=s.domain.slice(),s._inputRange||(s._inputRange=s.range.slice()),s.setScale(),m[l]=u=Math.abs(s._m)/o[l],d=Math.min(d,u),(s.constrain===\"domain\"||!s._constraintShrinkable)&&(y=Math.min(y,u)),delete s._constraintShrinkable,p=Math.max(p,u),s.constrain===\"domain\"&&(T=!0);if(!(d>c4e*p&&!T)){for(i=0;i<v.length;i++)if(l=v[i],u=m[l],s=b[l],f=s.constrain,u!==y||f===\"domain\")if(c=u/y,f===\"range\")gB(s,c);else{var w=s._inputDomain,x=(s.domain[1]-s.domain[0])/(w[1]-w[0]),_=(s.r2l(s.range[1])-s.r2l(s.range[0]))/(s.r2l(s._inputRange[1])-s.r2l(s._inputRange[0]));if(c/=x,c*_<1){s.domain=s._input.domain=w.slice(),gB(s,c);continue}if(_<1&&(s.range=s._input.range=s._inputRange.slice(),c*=_),s.autorange){var k=s.r2l(s.range[0]),A=s.r2l(s.range[1]),q=(k+A)/2,C=q,E=q,P=Math.abs(A-q),R=q-P*c*1.0001,N=q+P*c*1.0001,I=h7.makePadFn(t,s,0),O=h7.makePadFn(t,s,1);xB(s,c);var U=Math.abs(s._m),Y=h7.concatExtremes(r,s),G=Y.min,V=Y.max,W,j;for(j=0;j<G.length;j++)W=G[j].val-I(G[j])/U,W>R&&W<C&&(C=W);for(j=0;j<V.length;j++)W=V[j].val+O(V[j])/U,W<N&&W>E&&(E=W);var J=(E-C)/(2*P);c/=J,C=s.l2r(C),E=s.l2r(E),s.range=s._input.range=k<A?[C,E]:[E,C]}xB(s,c)}}}};$h.getAxisGroup=function(r,t){for(var a=r._axisMatchGroups,n=0;n<a.length;n++){var i=a[n];if(i[t])return\"g\"+n}return t};$h.clean=function(r,t){if(t._inputDomain){for(var a=!1,n=t._id,i=r._fullLayout._axisConstraintGroups,o=0;o<i.length;o++)if(i[o][n]){a=!0;break}(!a||t.constrain!==\"domain\")&&(t._input.domain=t.domain=t._inputDomain,delete t._inputDomain)}};function xB(e,r){var t=e._inputDomain,a=v4e[e.constraintoward],n=t[0]+(t[1]-t[0])*a;e.domain=e._input.domain=[n+(t[0]-n)/r,n+(t[1]-n)/r],e.setScale()}});var oy=z(za=>{\"use strict\";var iy=Er(),kn=Tr(),xi=va(),Ui=ke(),m7=Ca(),y7=Nm(),Jh=Sr(),mc=Zr(),wB=Q0(),SB=c7(),Kh=Gr(),Gl=Qa(),qB=vf(),p4e=qB.enforce,m4e=qB.clean,TB=Ph().doAutoRange,LB=\"start\",y4e=\"middle\",CB=\"end\",g4e=qa().zindexSeparator;za.layoutStyles=function(e){return Ui.syncOrAsync([xi.doAutoMargin,x4e],e)};function b4e(e,r,t){for(var a=0;a<t.length;a++){var n=t[a][0],i=t[a][1];if(!(n[0]>=e[1]||n[1]<=e[0])&&i[0]<r[1]&&i[1]>r[0])return!0}return!1}function x4e(e){var r=e._fullLayout,t=r._size,a=t.p,n=Kh.list(e,\"\",!0),i,o,l,s,u,f;if(r._paperdiv.style({width:e._context.responsive&&r.autosize&&!e._context._hasZeroWidth&&!e.layout.width?\"100%\":r.width+\"px\",height:e._context.responsive&&r.autosize&&!e._context._hasZeroHeight&&!e.layout.height?\"100%\":r.height+\"px\"}).selectAll(\".main-svg\").call(mc.setSize,r.width,r.height),e._context.setBackground(e,r.paper_bgcolor),za.drawMainTitle(e),SB.manage(e),!r._has(\"cartesian\"))return xi.previousPromises(e);function c(oe,be,Re){var ye=oe._lw/2;if(oe._id.charAt(0)===\"x\"){if(be){if(Re===\"top\")return be._offset-a-ye}else return t.t+t.h*(1-(oe.position||0))+ye%1;return be._offset+be._length+a+ye}if(be){if(Re===\"right\")return be._offset+be._length+a+ye}else return t.l+t.w*(oe.position||0)+ye%1;return be._offset-a-ye}for(i=0;i<n.length;i++){s=n[i];var v=s._anchorAxis;s._linepositions={},s._lw=mc.crispRound(e,s.linewidth,1),s._mainLinePosition=c(s,v,s.side),s._mainMirrorPosition=s.mirror&&v?c(s,v,Gl.OPPOSITE_SIDE[s.side]):null}var d=[],p=[],y=[],m=Jh.opacity(r.paper_bgcolor)===1&&Jh.opacity(r.plot_bgcolor)===1&&r.paper_bgcolor===r.plot_bgcolor;for(o in r._plots)if(l=r._plots[o],l.mainplot)l.bg&&l.bg.remove(),l.bg=void 0;else{var b=l.xaxis.domain,T=l.yaxis.domain,w=l.plotgroup;if(b4e(b,T,y)&&o.indexOf(g4e)===-1){var x=w.node(),_=l.bg=Ui.ensureSingle(w,\"rect\",\"bg\");x.insertBefore(_.node(),x.childNodes[0]),p.push(o)}else w.select(\"rect.bg\").remove(),y.push([b,T]),m||(d.push(o),p.push(o))}var k=r._bgLayer.selectAll(\".bg\").data(d);for(k.enter().append(\"rect\").classed(\"bg\",!0),k.exit().remove(),k.each(function(oe){r._plots[oe].bg=iy.select(this)}),i=0;i<p.length;i++)l=r._plots[p[i]],u=l.xaxis,f=l.yaxis,l.bg&&u._offset!==void 0&&f._offset!==void 0&&l.bg.call(mc.setRect,u._offset-a,f._offset-a,u._length+2*a,f._length+2*a).call(Jh.fill,r.plot_bgcolor).style(\"stroke-width\",0);if(!r._hasOnlyLargeSploms)for(o in r._plots){l=r._plots[o],u=l.xaxis,f=l.yaxis;var A=l.clipId=\"clip\"+r._uid+o+\"plot\",q=Ui.ensureSingleById(r._clips,\"clipPath\",A,function(oe){oe.classed(\"plotclip\",!0).append(\"rect\")});l.clipRect=q.select(\"rect\").attr({width:u._length,height:f._length}),mc.setTranslate(l.plot,u._offset,f._offset);var C,E;l._hasClipOnAxisFalse?(C=null,E=A):(C=A,E=null),mc.setClipUrl(l.plot,C,e),l.layerClipId=E}var P,R,N,I,O,U,Y,G,V,W,j,J,te;function ae(oe){return\"M\"+P+\",\"+oe+\"H\"+R}function se(oe){return\"M\"+u._offset+\",\"+oe+\"h\"+u._length}function $(oe){return\"M\"+oe+\",\"+G+\"V\"+Y}function fe(oe){return f._shift!==void 0&&(oe+=f._shift),\"M\"+oe+\",\"+f._offset+\"v\"+f._length}function ie(oe,be,Re){if(!oe.showline||o!==oe._mainSubplot)return\"\";if(!oe._anchorAxis)return Re(oe._mainLinePosition);var ye=be(oe._mainLinePosition);return oe.mirror&&(ye+=be(oe._mainMirrorPosition)),ye}for(o in r._plots){l=r._plots[o],u=l.xaxis,f=l.yaxis;var ue=\"M0,0\";AB(u,o)&&(O=ny(u,\"left\",f,n),P=u._offset-(O?a+O:0),U=ny(u,\"right\",f,n),R=u._offset+u._length+(U?a+U:0),N=c(u,f,\"bottom\"),I=c(u,f,\"top\"),te=!u._anchorAxis||o!==u._mainSubplot,te&&(u.mirror===\"allticks\"||u.mirror===\"all\")&&(u._linepositions[o]=[N,I]),ue=ie(u,ae,se),te&&u.showline&&(u.mirror===\"all\"||u.mirror===\"allticks\")&&(ue+=ae(N)+ae(I)),l.xlines.style(\"stroke-width\",u._lw+\"px\").call(Jh.stroke,u.showline?u.linecolor:\"rgba(0,0,0,0)\")),l.xlines.attr(\"d\",ue);var ce=\"M0,0\";AB(f,o)&&(j=ny(f,\"bottom\",u,n),Y=f._offset+f._length+(j?a:0),J=ny(f,\"top\",u,n),G=f._offset-(J?a:0),V=c(f,u,\"left\"),W=c(f,u,\"right\"),te=!f._anchorAxis||o!==f._mainSubplot,te&&(f.mirror===\"allticks\"||f.mirror===\"all\")&&(f._linepositions[o]=[V,W]),ce=ie(f,$,fe),te&&f.showline&&(f.mirror===\"all\"||f.mirror===\"allticks\")&&(ce+=$(V)+$(W)),l.ylines.style(\"stroke-width\",f._lw+\"px\").call(Jh.stroke,f.showline?f.linecolor:\"rgba(0,0,0,0)\")),l.ylines.attr(\"d\",ce)}return Kh.makeClipPaths(e),xi.previousPromises(e)}function AB(e,r){return(e.ticks||e.showline)&&(r===e._mainSubplot||e.mirror===\"all\"||e.mirror===\"allticks\")}function MB(e,r,t){if(!t.showline||!t._lw)return!1;if(t.mirror===\"all\"||t.mirror===\"allticks\")return!0;var a=t._anchorAxis;if(!a)return!1;var n=Gl.FROM_BL[r];return t.side===r?a.domain[n]===e.domain[n]:t.mirror&&a.domain[1-n]===e.domain[1-n]}function ny(e,r,t,a){if(MB(e,r,t))return t._lw;for(var n=0;n<a.length;n++){var i=a[n];if(i._mainAxis===t._mainAxis&&MB(e,r,i))return i._lw}return 0}za.drawMainTitle=function(e){var r=e._fullLayout.title,t=e._fullLayout,a=S4e(t),n=q4e(t),i=k4e(t,n),o=M4e(t,a);if(wB.draw(e,\"gtitle\",{propContainer:t,propName:\"title.text\",subtitlePropName:\"title.subtitle.text\",placeholder:t._dfltTitle.plot,subtitlePlaceholder:t._dfltTitle.subtitle,attributes:{x:o,y:i,\"text-anchor\":a,dy:n}}),r.text&&r.automargin){var l=iy.select(e).selectAll(\".gtitle\"),s=mc.bBox(iy.select(e).selectAll(\".g-gtitle\").node()).height,u=T4e(e,r,s);if(u>0){A4e(e,i,u,s),l.attr({x:o,y:i,\"text-anchor\":a,dy:kB(r.yanchor)}).call(m7.positionText,o,i);var f=(r.text.match(m7.BR_TAG_ALL)||[]).length;if(f){var c=Gl.LINE_SPACING*f+Gl.MID_SHIFT;r.y===0&&(c=-c),l.selectAll(\".line\").each(function(){var m=+this.getAttribute(\"dy\").slice(0,-2)-c+\"em\";this.setAttribute(\"dy\",m)})}var v=iy.select(e).selectAll(\".gtitle-subtitle\");if(v.node()){var d=l.node().getBBox(),p=d.y+d.height,y=p+wB.SUBTITLE_PADDING_EM*r.subtitle.font.size;v.attr({x:o,y,\"text-anchor\":a,dy:kB(r.yanchor)}).call(m7.positionText,o,y)}}}};function _4e(e,r,t,a,n){var i=r.yref===\"paper\"?e._fullLayout._size.h:e._fullLayout.height,o=Ui.isTopAnchor(r)?a:a-n,l=t===\"b\"?i-o:o;return Ui.isTopAnchor(r)&&t===\"t\"||Ui.isBottomAnchor(r)&&t===\"b\"?!1:l<n}function w4e(e,r,t,a,n){var i=0;return t===\"middle\"&&(i+=n/2),e===\"t\"?(t===\"top\"&&(i+=n),i+=a-r*a):(t===\"bottom\"&&(i+=n),i+=r*a),i}function T4e(e,r,t){var a=r.y,n=r.yanchor,i=a>.5?\"t\":\"b\",o=e._fullLayout.margin[i],l=0;return r.yref===\"paper\"?l=t+r.pad.t+r.pad.b:r.yref===\"container\"&&(l=w4e(i,a,n,e._fullLayout.height,t)+r.pad.t+r.pad.b),l>o?l:0}function A4e(e,r,t,a){var n=\"title.automargin\",i=e._fullLayout.title,o=i.y>.5?\"t\":\"b\",l={x:i.x,y:i.y,t:0,b:0},s={};i.yref===\"paper\"&&_4e(e,i,o,r,a)?l[o]=t:i.yref===\"container\"&&(s[o]=t,e._fullLayout._reservedMargin[n]=s),xi.allowAutoMargin(e,n),xi.autoMargin(e,n,l)}function M4e(e,r){var t=e.title,a=e._size,n=0;return r===LB?n=t.pad.l:r===CB&&(n=-t.pad.r),t.xref===\"paper\"?a.l+a.w*t.x+n:e.width*t.x+n}function k4e(e,r){var t=e.title,a=e._size,n=0;return r===\"0em\"||!r?n=-t.pad.b:r===Gl.CAP_SHIFT+\"em\"&&(n=t.pad.t),t.y===\"auto\"?a.t/2:t.yref===\"paper\"?a.t+a.h-a.h*t.y+n:e.height-e.height*t.y+n}function kB(e){return e===\"top\"?Gl.CAP_SHIFT+.3+\"em\":e===\"bottom\"?\"-0.3em\":Gl.MID_SHIFT+\"em\"}function S4e(e){var r=e.title,t=y4e;return Ui.isRightAnchor(r)?t=CB:Ui.isLeftAnchor(r)&&(t=LB),t}function q4e(e){var r=e.title,t=\"0em\";return Ui.isTopAnchor(r)?t=Gl.CAP_SHIFT+\"em\":Ui.isMiddleAnchor(r)&&(t=Gl.MID_SHIFT+\"em\"),t}za.doTraceStyle=function(e){var r=e.calcdata,t=[],a;for(a=0;a<r.length;a++){var n=r[a],i=n[0]||{},o=i.trace||{},l=o._module||{},s=l.arraysToCalcdata;s&&s(n,o);var u=l.editStyle;u&&t.push({fn:u,cd0:i})}if(t.length){for(a=0;a<t.length;a++){var f=t[a];f.fn(e,f.cd0)}y7(e),za.redrawReglTraces(e)}return xi.style(e),kn.getComponentMethod(\"legend\",\"draw\")(e),xi.previousPromises(e)};za.doColorBars=function(e){return kn.getComponentMethod(\"colorbar\",\"draw\")(e),xi.previousPromises(e)};za.layoutReplot=function(e){var r=e.layout;return e.layout=void 0,kn.call(\"_doPlot\",e,\"\",r)};za.doLegend=function(e){return kn.getComponentMethod(\"legend\",\"draw\")(e),xi.previousPromises(e)};za.doTicksRelayout=function(e){var r=Kh.draw(e,\"redraw\");return e._fullLayout._hasOnlyLargeSploms&&(kn.subplotsRegistry.splom.updateGrid(e),y7(e),za.redrawReglTraces(e)),za.drawMainTitle(e),Promise.resolve(r).then(function(){return xi.previousPromises(e)})};za.doModeBar=function(e){var r=e._fullLayout;SB.manage(e);for(var t=0;t<r._basePlotModules.length;t++){var a=r._basePlotModules[t].updateFx;a&&a(e)}return xi.previousPromises(e)};za.doCamera=function(e){for(var r=e._fullLayout,t=r._subplots.gl3d,a=0;a<t.length;a++){var n=r[t[a]],i=n._scene;i.setViewport(n)}};za.drawData=function(e){var r=e._fullLayout;y7(e);for(var t=r._basePlotModules,a=0;a<t.length;a++)t[a].plot(e);return za.redrawReglTraces(e),xi.style(e),kn.getComponentMethod(\"selections\",\"draw\")(e),kn.getComponentMethod(\"shapes\",\"draw\")(e),kn.getComponentMethod(\"annotations\",\"draw\")(e),kn.getComponentMethod(\"images\",\"draw\")(e),r._replotting=!1,xi.previousPromises(e)};za.redrawReglTraces=function(e){var r=e._fullLayout;if(r._has(\"regl\")){var t=e._fullData,a=[],n=[],i,o;for(r._hasOnlyLargeSploms&&r._splomGrid.draw(),i=0;i<t.length;i++){var l=t[i];l.visible===!0&&l._length!==0&&(l.type===\"splom\"?r._splomScenes[l.uid].draw():l.type===\"scattergl\"?Ui.pushUnique(a,l.xaxis+l.yaxis):l.type===\"scatterpolargl\"&&Ui.pushUnique(n,l.subplot))}for(i=0;i<a.length;i++)o=r._plots[a[i]],o._scene&&o._scene.draw();for(i=0;i<n.length;i++)o=r[n[i]]._subplot,o._scene&&o._scene.draw()}};za.doAutoRangeAndConstraints=function(e){for(var r=Kh.list(e,\"\",!0),t,a={},n=0;n<r.length;n++)if(t=r[n],!a[t._id]){a[t._id]=1,m4e(e,t),TB(e,t);var i=t._matchGroup;if(i)for(var o in i){var l=Kh.getFromId(e,o);TB(e,l,t.range),a[o]=1}}p4e(e)};za.finalDraw=function(e){kn.getComponentMethod(\"rangeslider\",\"draw\")(e),kn.getComponentMethod(\"rangeselector\",\"draw\")(e)};za.drawMarginPushers=function(e){kn.getComponentMethod(\"legend\",\"draw\")(e),kn.getComponentMethod(\"rangeselector\",\"draw\")(e),kn.getComponentMethod(\"sliders\",\"draw\")(e),kn.getComponentMethod(\"updatemenus\",\"draw\")(e),kn.getComponentMethod(\"colorbar\",\"draw\")(e)}});var x7=z((qVe,FB)=>{\"use strict\";var L4e=zs().readPaths,C4e=Xm(),DB=ks().clearOutlineControllers,g7=Sr(),EB=Zr(),D4e=St().arrayEditor,PB=Bs(),E4e=PB.getPathString;FB.exports={draw:ly,drawOne:RB,activateLastSelection:F4e};function ly(e){var r=e._fullLayout;DB(e),r._selectionLayer.selectAll(\"path\").remove();for(var t in r._plots){var a=r._plots[t].selectionLayer;a&&a.selectAll(\"path\").remove()}for(var n=0;n<r.selections.length;n++)RB(e,n)}function sy(e){return e._context.editSelection}function RB(e,r){e._fullLayout._paperdiv.selectAll('.selectionlayer [data-index=\"'+r+'\"]').remove();var t=PB.makeSelectionsOptionsAndPlotinfo(e,r),a=t.options,n=t.plotinfo;if(!a._input)return;i(e._fullLayout._selectionLayer);function i(o){var l=E4e(e,a),s={\"data-index\":r,\"fill-rule\":\"evenodd\",d:l},u=a.opacity,f=\"rgba(0,0,0,0)\",c=a.line.color||g7.contrast(e._fullLayout.plot_bgcolor),v=a.line.width,d=a.line.dash;v||(v=5,d=\"solid\");var p=sy(e)&&e._fullLayout._activeSelectionIndex===r;p&&(f=e._fullLayout.activeselection.fillcolor,u=e._fullLayout.activeselection.opacity);for(var y=[],m=1;m>=0;m--){var b=o.append(\"path\").attr(s).style(\"opacity\",m?.1:u).call(g7.stroke,c).call(g7.fill,f).call(EB.dashLine,m?\"solid\":d,m?4+v:v);if(P4e(b,e,a),p){var T=D4e(e.layout,\"selections\",a);b.style({cursor:\"move\"});var w={element:b.node(),plotinfo:n,gd:e,editHelpers:T,isActiveSelection:!0},x=L4e(l,e);C4e(x,b,w)}else b.style(\"pointer-events\",m?\"all\":\"none\");y[m]=b}var _=y[0],k=y[1];k.node().addEventListener(\"click\",function(){return R4e(e,_)})}}function P4e(e,r,t){var a=t.xref+t.yref;EB.setClipUrl(e,\"clip\"+r._fullLayout._uid+a,r)}function R4e(e,r){if(sy(e)){var t=r.node(),a=+t.getAttribute(\"data-index\");if(a>=0){if(a===e._fullLayout._activeSelectionIndex){b7(e);return}e._fullLayout._activeSelectionIndex=a,e._fullLayout._deactivateSelection=b7,ly(e)}}}function F4e(e){if(sy(e)){var r=e._fullLayout.selections.length-1;e._fullLayout._activeSelectionIndex=r,e._fullLayout._deactivateSelection=b7,ly(e)}}function b7(e){if(sy(e)){var r=e._fullLayout._activeSelectionIndex;r>=0&&(DB(e),delete e._fullLayout._activeSelectionIndex,ly(e))}}});var NB=z((LVe,zB)=>{function z4e(){var e,r=0,t=!1;function a(n,i){return e.list.push({type:n,data:i?JSON.parse(JSON.stringify(i)):void 0}),e}return e={list:[],segmentId:function(){return r++},checkIntersection:function(n,i){return a(\"check\",{seg1:n,seg2:i})},segmentChop:function(n,i){return a(\"div_seg\",{seg:n,pt:i}),a(\"chop\",{seg:n,pt:i})},statusRemove:function(n){return a(\"pop_seg\",{seg:n})},segmentUpdate:function(n){return a(\"seg_update\",{seg:n})},segmentNew:function(n,i){return a(\"new_seg\",{seg:n,primary:i})},segmentRemove:function(n){return a(\"rem_seg\",{seg:n})},tempStatus:function(n,i,o){return a(\"temp_status\",{seg:n,above:i,below:o})},rewind:function(n){return a(\"rewind\",{seg:n})},status:function(n,i,o){return a(\"status\",{seg:n,above:i,below:o})},vert:function(n){return n===t?e:(t=n,a(\"vert\",{x:n}))},log:function(n){return typeof n!=\"string\"&&(n=JSON.stringify(n,!1,\"  \")),a(\"log\",{txt:n})},reset:function(){return a(\"reset\")},selected:function(n){return a(\"selected\",{segs:n})},chainStart:function(n){return a(\"chain_start\",{seg:n})},chainRemoveHead:function(n,i){return a(\"chain_rem_head\",{index:n,pt:i})},chainRemoveTail:function(n,i){return a(\"chain_rem_tail\",{index:n,pt:i})},chainNew:function(n,i){return a(\"chain_new\",{pt1:n,pt2:i})},chainMatch:function(n){return a(\"chain_match\",{index:n})},chainClose:function(n){return a(\"chain_close\",{index:n})},chainAddHead:function(n,i){return a(\"chain_add_head\",{index:n,pt:i})},chainAddTail:function(n,i){return a(\"chain_add_tail\",{index:n,pt:i})},chainConnect:function(n,i){return a(\"chain_con\",{index1:n,index2:i})},chainReverse:function(n){return a(\"chain_rev\",{index:n})},chainJoin:function(n,i){return a(\"chain_join\",{index1:n,index2:i})},done:function(){return a(\"done\")}},e}zB.exports=z4e});var BB=z((CVe,IB)=>{function N4e(e){typeof e!=\"number\"&&(e=1e-10);var r={epsilon:function(t){return typeof t==\"number\"&&(e=t),e},pointAboveOrOnLine:function(t,a,n){var i=a[0],o=a[1],l=n[0],s=n[1],u=t[0],f=t[1];return(l-i)*(f-o)-(s-o)*(u-i)>=-e},pointBetween:function(t,a,n){var i=t[1]-a[1],o=n[0]-a[0],l=t[0]-a[0],s=n[1]-a[1],u=l*o+i*s;if(u<e)return!1;var f=o*o+s*s;return!(u-f>-e)},pointsSameX:function(t,a){return Math.abs(t[0]-a[0])<e},pointsSameY:function(t,a){return Math.abs(t[1]-a[1])<e},pointsSame:function(t,a){return r.pointsSameX(t,a)&&r.pointsSameY(t,a)},pointsCompare:function(t,a){return r.pointsSameX(t,a)?r.pointsSameY(t,a)?0:t[1]<a[1]?-1:1:t[0]<a[0]?-1:1},pointsCollinear:function(t,a,n){var i=t[0]-a[0],o=t[1]-a[1],l=a[0]-n[0],s=a[1]-n[1];return Math.abs(i*s-l*o)<e},linesIntersect:function(t,a,n,i){var o=a[0]-t[0],l=a[1]-t[1],s=i[0]-n[0],u=i[1]-n[1],f=o*u-l*s;if(Math.abs(f)<e)return!1;var c=t[0]-n[0],v=t[1]-n[1],d=(s*v-u*c)/f,p=(o*v-l*c)/f,y={alongA:0,alongB:0,pt:[t[0]+d*o,t[1]+d*l]};return d<=-e?y.alongA=-2:d<e?y.alongA=-1:d-1<=-e?y.alongA=0:d-1<e?y.alongA=1:y.alongA=2,p<=-e?y.alongB=-2:p<e?y.alongB=-1:p-1<=-e?y.alongB=0:p-1<e?y.alongB=1:y.alongB=2,y},pointInsideRegion:function(t,a){for(var n=t[0],i=t[1],o=a[a.length-1][0],l=a[a.length-1][1],s=!1,u=0;u<a.length;u++){var f=a[u][0],c=a[u][1];c-i>e!=l-i>e&&(o-f)*(i-c)/(l-c)+f-n>e&&(s=!s),o=f,l=c}return s}};return r}IB.exports=N4e});var HB=z((DVe,OB)=>{var I4e={create:function(){var e={root:{root:!0,next:null},exists:function(r){return!(r===null||r===e.root)},isEmpty:function(){return e.root.next===null},getHead:function(){return e.root.next},insertBefore:function(r,t){for(var a=e.root,n=e.root.next;n!==null;){if(t(n)){r.prev=n.prev,r.next=n,n.prev.next=r,n.prev=r;return}a=n,n=n.next}a.next=r,r.prev=a,r.next=null},findTransition:function(r){for(var t=e.root,a=e.root.next;a!==null&&!r(a);)t=a,a=a.next;return{before:t===e.root?null:t,after:a,insert:function(n){return n.prev=t,n.next=a,t.next=n,a!==null&&(a.prev=n),n}}}};return e},node:function(e){return e.prev=null,e.next=null,e.remove=function(){e.prev.next=e.next,e.next&&(e.next.prev=e.prev),e.prev=null,e.next=null},e}};OB.exports=I4e});var GB=z((EVe,UB)=>{var Qh=HB();function B4e(e,r,t){function a(p,y){return{id:t?t.segmentId():-1,start:p,end:y,myFill:{above:null,below:null},otherFill:null}}function n(p,y,m){return{id:t?t.segmentId():-1,start:p,end:y,myFill:{above:m.myFill.above,below:m.myFill.below},otherFill:null}}var i=Qh.create();function o(p,y,m,b,T,w){var x=r.pointsCompare(y,T);return x!==0?x:r.pointsSame(m,w)?0:p!==b?p?1:-1:r.pointAboveOrOnLine(m,b?T:w,b?w:T)?1:-1}function l(p,y){i.insertBefore(p,function(m){var b=o(p.isStart,p.pt,y,m.isStart,m.pt,m.other.pt);return b<0})}function s(p,y){var m=Qh.node({isStart:!0,pt:p.start,seg:p,primary:y,other:null,status:null});return l(m,p.end),m}function u(p,y,m){var b=Qh.node({isStart:!1,pt:y.end,seg:y,primary:m,other:p,status:null});p.other=b,l(b,p.pt)}function f(p,y){var m=s(p,y);return u(m,p,y),m}function c(p,y){t&&t.segmentChop(p.seg,y),p.other.remove(),p.seg.end=y,p.other.pt=y,l(p.other,p.pt)}function v(p,y){var m=n(y,p.seg.end,p.seg);return c(p,y),f(m,p.primary)}function d(p,y){var m=Qh.create();function b(O,U){var Y=O.seg.start,G=O.seg.end,V=U.seg.start,W=U.seg.end;return r.pointsCollinear(Y,V,W)?r.pointsCollinear(G,V,W)||r.pointAboveOrOnLine(G,V,W)?1:-1:r.pointAboveOrOnLine(Y,V,W)?1:-1}function T(O){return m.findTransition(function(U){var Y=b(O,U.ev);return Y>0})}function w(O,U){var Y=O.seg,G=U.seg,V=Y.start,W=Y.end,j=G.start,J=G.end;t&&t.checkIntersection(Y,G);var te=r.linesIntersect(V,W,j,J);if(te===!1){if(!r.pointsCollinear(V,W,j)||r.pointsSame(V,J)||r.pointsSame(W,j))return!1;var ae=r.pointsSame(V,j),se=r.pointsSame(W,J);if(ae&&se)return U;var $=!ae&&r.pointBetween(V,j,J),fe=!se&&r.pointBetween(W,j,J);if(ae)return fe?v(U,W):v(O,J),U;$&&(se||(fe?v(U,W):v(O,J)),v(U,V))}else te.alongA===0&&(te.alongB===-1?v(O,j):te.alongB===0?v(O,te.pt):te.alongB===1&&v(O,J)),te.alongB===0&&(te.alongA===-1?v(U,V):te.alongA===0?v(U,te.pt):te.alongA===1&&v(U,W));return!1}for(var x=[];!i.isEmpty();){var _=i.getHead();if(t&&t.vert(_.pt[0]),_.isStart){let O=function(){if(A){var U=w(_,A);if(U)return U}return q?w(_,q):!1};var I=O;t&&t.segmentNew(_.seg,_.primary);var k=T(_),A=k.before?k.before.ev:null,q=k.after?k.after.ev:null;t&&t.tempStatus(_.seg,A?A.seg:!1,q?q.seg:!1);var C=O();if(C){if(e){var E;_.seg.myFill.below===null?E=!0:E=_.seg.myFill.above!==_.seg.myFill.below,E&&(C.seg.myFill.above=!C.seg.myFill.above)}else C.seg.otherFill=_.seg.myFill;t&&t.segmentUpdate(C.seg),_.other.remove(),_.remove()}if(i.getHead()!==_){t&&t.rewind(_.seg);continue}if(e){var E;_.seg.myFill.below===null?E=!0:E=_.seg.myFill.above!==_.seg.myFill.below,q?_.seg.myFill.below=q.seg.myFill.above:_.seg.myFill.below=p,E?_.seg.myFill.above=!_.seg.myFill.below:_.seg.myFill.above=_.seg.myFill.below}else if(_.seg.otherFill===null){var P;q?_.primary===q.primary?P=q.seg.otherFill.above:P=q.seg.myFill.above:P=_.primary?y:p,_.seg.otherFill={above:P,below:P}}t&&t.status(_.seg,A?A.seg:!1,q?q.seg:!1),_.other.status=k.insert(Qh.node({ev:_}))}else{var R=_.status;if(R===null)throw new Error(\"PolyBool: Zero-length segment detected; your epsilon is probably too small or too large\");if(m.exists(R.prev)&&m.exists(R.next)&&w(R.prev.ev,R.next.ev),t&&t.statusRemove(R.ev.seg),R.remove(),!_.primary){var N=_.seg.myFill;_.seg.myFill=_.seg.otherFill,_.seg.otherFill=N}x.push(_.seg)}i.getHead().remove()}return t&&t.done(),x}return e?{addRegion:function(p){for(var y,m=p[p.length-1],b=0;b<p.length;b++){y=m,m=p[b];var T=r.pointsCompare(y,m);T!==0&&f(a(T<0?y:m,T<0?m:y),!0)}},calculate:function(p){return d(p,!1)}}:{calculate:function(p,y,m,b){return p.forEach(function(T){f(n(T.start,T.end,T),!0)}),m.forEach(function(T){f(n(T.start,T.end,T),!1)}),d(y,b)}}}UB.exports=B4e});var VB=z((PVe,YB)=>{function O4e(e,r,t){var a=[],n=[];return e.forEach(function(i){var o=i.start,l=i.end;if(r.pointsSame(o,l)){console.warn(\"PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large\");return}t&&t.chainStart(i);var s={index:0,matches_head:!1,matches_pt1:!1},u={index:0,matches_head:!1,matches_pt1:!1},f=s;function c(I,O,U){return f.index=I,f.matches_head=O,f.matches_pt1=U,f===s?(f=u,!1):(f=null,!0)}for(var v=0;v<a.length;v++){var d=a[v],p=d[0],y=d[1],m=d[d.length-1],b=d[d.length-2];if(r.pointsSame(p,o)){if(c(v,!0,!0))break}else if(r.pointsSame(p,l)){if(c(v,!0,!1))break}else if(r.pointsSame(m,o)){if(c(v,!1,!0))break}else if(r.pointsSame(m,l)&&c(v,!1,!1))break}if(f===s){a.push([o,l]),t&&t.chainNew(o,l);return}if(f===u){t&&t.chainMatch(s.index);var T=s.index,w=s.matches_pt1?l:o,x=s.matches_head,d=a[T],_=x?d[0]:d[d.length-1],k=x?d[1]:d[d.length-2],A=x?d[d.length-1]:d[0],q=x?d[d.length-2]:d[1];if(r.pointsCollinear(k,_,w)&&(x?(t&&t.chainRemoveHead(s.index,w),d.shift()):(t&&t.chainRemoveTail(s.index,w),d.pop()),_=k),r.pointsSame(A,w)){a.splice(T,1),r.pointsCollinear(q,A,_)&&(x?(t&&t.chainRemoveTail(s.index,_),d.pop()):(t&&t.chainRemoveHead(s.index,_),d.shift())),t&&t.chainClose(s.index),n.push(d);return}x?(t&&t.chainAddHead(s.index,w),d.unshift(w)):(t&&t.chainAddTail(s.index,w),d.push(w));return}function C(I){t&&t.chainReverse(I),a[I].reverse()}function E(I,O){var U=a[I],Y=a[O],G=U[U.length-1],V=U[U.length-2],W=Y[0],j=Y[1];r.pointsCollinear(V,G,W)&&(t&&t.chainRemoveTail(I,G),U.pop(),G=V),r.pointsCollinear(G,W,j)&&(t&&t.chainRemoveHead(O,W),Y.shift()),t&&t.chainJoin(I,O),a[I]=U.concat(Y),a.splice(O,1)}var P=s.index,R=u.index;t&&t.chainConnect(P,R);var N=a[P].length<a[R].length;s.matches_head?u.matches_head?N?(C(P),E(P,R)):(C(R),E(R,P)):E(R,P):u.matches_head?E(P,R):N?(C(P),E(R,P)):(C(R),E(P,R))}),n}YB.exports=O4e});var WB=z((RVe,jB)=>{function ed(e,r,t){var a=[];return e.forEach(function(n){var i=(n.myFill.above?8:0)+(n.myFill.below?4:0)+(n.otherFill&&n.otherFill.above?2:0)+(n.otherFill&&n.otherFill.below?1:0);r[i]!==0&&a.push({id:t?t.segmentId():-1,start:n.start,end:n.end,myFill:{above:r[i]===1,below:r[i]===2},otherFill:null})}),t&&t.selected(a),a}var H4e={union:function(e,r){return ed(e,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],r)},intersect:function(e,r){return ed(e,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],r)},difference:function(e,r){return ed(e,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],r)},differenceRev:function(e,r){return ed(e,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],r)},xor:function(e,r){return ed(e,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],r)}};jB.exports=H4e});var ZB=z((FVe,XB)=>{var U4e={toPolygon:function(e,r){function t(i){if(i.length<=0)return e.segments({inverted:!1,regions:[]});function o(u){var f=u.slice(0,u.length-1);return e.segments({inverted:!1,regions:[f]})}for(var l=o(i[0]),s=1;s<i.length;s++)l=e.selectDifference(e.combine(l,o(i[s])));return l}if(r.type===\"Polygon\")return e.polygon(t(r.coordinates));if(r.type===\"MultiPolygon\"){for(var a=e.segments({inverted:!1,regions:[]}),n=0;n<r.coordinates.length;n++)a=e.selectUnion(e.combine(a,t(r.coordinates[n])));return e.polygon(a)}throw new Error(\"PolyBool: Cannot convert GeoJSON object to PolyBool polygon\")},fromPolygon:function(e,r,t){t=e.polygon(e.segments(t));function a(d,p){return r.pointInsideRegion([(d[0][0]+d[1][0])*.5,(d[0][1]+d[1][1])*.5],p)}function n(d){return{region:d,children:[]}}var i=n(null);function o(d,p){for(var y=0;y<d.children.length;y++){var m=d.children[y];if(a(p,m.region)){o(m,p);return}}for(var b=n(p),y=0;y<d.children.length;y++){var m=d.children[y];a(m.region,p)&&(b.children.push(m),d.children.splice(y,1),y--)}d.children.push(b)}for(var l=0;l<t.regions.length;l++){var s=t.regions[l];s.length<3||o(i,s)}function u(d,p){for(var y=0,m=d[d.length-1][0],b=d[d.length-1][1],T=[],w=0;w<d.length;w++){var x=d[w][0],_=d[w][1];T.push([x,_]),y+=_*m-x*b,m=x,b=_}var k=y<0;return k!==p&&T.reverse(),T.push([T[0][0],T[0][1]]),T}var f=[];function c(d){var p=[u(d.region,!1)];f.push(p);for(var y=0;y<d.children.length;y++)p.push(v(d.children[y]))}function v(d){for(var p=0;p<d.children.length;p++)c(d.children[p]);return u(d.region,!0)}for(var l=0;l<i.children.length;l++)c(i.children[l]);return f.length<=0?{type:\"Polygon\",coordinates:[]}:f.length==1?{type:\"Polygon\",coordinates:f[0]}:{type:\"MultiPolygon\",coordinates:f}}};XB.exports=U4e});var QB=z((zVe,KB)=>{var G4e=NB(),Y4e=BB(),$B=GB(),V4e=VB(),rd=WB(),JB=ZB(),Gi=!1,td=Y4e(),Qn;Qn={buildLog:function(e){return e===!0?Gi=G4e():e===!1&&(Gi=!1),Gi===!1?!1:Gi.list},epsilon:function(e){return td.epsilon(e)},segments:function(e){var r=$B(!0,td,Gi);return e.regions.forEach(r.addRegion),{segments:r.calculate(e.inverted),inverted:e.inverted}},combine:function(e,r){var t=$B(!1,td,Gi);return{combined:t.calculate(e.segments,e.inverted,r.segments,r.inverted),inverted1:e.inverted,inverted2:r.inverted}},selectUnion:function(e){return{segments:rd.union(e.combined,Gi),inverted:e.inverted1||e.inverted2}},selectIntersect:function(e){return{segments:rd.intersect(e.combined,Gi),inverted:e.inverted1&&e.inverted2}},selectDifference:function(e){return{segments:rd.difference(e.combined,Gi),inverted:e.inverted1&&!e.inverted2}},selectDifferenceRev:function(e){return{segments:rd.differenceRev(e.combined,Gi),inverted:!e.inverted1&&e.inverted2}},selectXor:function(e){return{segments:rd.xor(e.combined,Gi),inverted:e.inverted1!==e.inverted2}},polygon:function(e){return{regions:V4e(e.segments,td,Gi),inverted:e.inverted}},polygonFromGeoJSON:function(e){return JB.toPolygon(Qn,e)},polygonToGeoJSON:function(e){return JB.fromPolygon(Qn,td,e)},union:function(e,r){return ad(e,r,Qn.selectUnion)},intersect:function(e,r){return ad(e,r,Qn.selectIntersect)},difference:function(e,r){return ad(e,r,Qn.selectDifference)},differenceRev:function(e,r){return ad(e,r,Qn.selectDifferenceRev)},xor:function(e,r){return ad(e,r,Qn.selectXor)}};function ad(e,r,t){var a=Qn.segments(e),n=Qn.segments(r),i=Qn.combine(a,n),o=t(i);return Qn.polygon(o)}typeof window==\"object\"&&(window.PolyBool=Qn);KB.exports=Qn});var rO=z((NVe,eO)=>{eO.exports=function(r,t,a,n){var i=r[0],o=r[1],l=!1;a===void 0&&(a=0),n===void 0&&(n=t.length);for(var s=n-a,u=0,f=s-1;u<s;f=u++){var c=t[u+a][0],v=t[u+a][1],d=t[f+a][0],p=t[f+a][1],y=v>o!=p>o&&i<(d-c)*(o-v)/(p-v)+c;y&&(l=!l)}return l}});var w7=z((IVe,tO)=>{\"use strict\";var _7=fp().dot,uy=Gt().BADNUM,fy=tO.exports={};fy.tester=function(r){var t=r.slice(),a=t[0][0],n=a,i=t[0][1],o=i,l;for((t[t.length-1][0]!==t[0][0]||t[t.length-1][1]!==t[0][1])&&t.push(t[0]),l=1;l<t.length;l++)a=Math.min(a,t[l][0]),n=Math.max(n,t[l][0]),i=Math.min(i,t[l][1]),o=Math.max(o,t[l][1]);var s=!1,u;t.length===5&&(t[0][0]===t[1][0]?t[2][0]===t[3][0]&&t[0][1]===t[3][1]&&t[1][1]===t[2][1]&&(s=!0,u=function(p){return p[0]===t[0][0]}):t[0][1]===t[1][1]&&t[2][1]===t[3][1]&&t[0][0]===t[3][0]&&t[1][0]===t[2][0]&&(s=!0,u=function(p){return p[1]===t[0][1]}));function f(p,y){var m=p[0],b=p[1];return!(m===uy||m<a||m>n||b===uy||b<i||b>o||y&&u(p))}function c(p,y){var m=p[0],b=p[1];if(m===uy||m<a||m>n||b===uy||b<i||b>o)return!1;var T=t.length,w=t[0][0],x=t[0][1],_=0,k,A,q,C,E;for(k=1;k<T;k++)if(A=w,q=x,w=t[k][0],x=t[k][1],C=Math.min(A,w),!(m<C||m>Math.max(A,w)||b>Math.max(q,x)))if(b<Math.min(q,x))m!==C&&_++;else{if(w===A?E=b:E=q+(m-A)*(x-q)/(w-A),b===E)return!(k===1&&y);b<=E&&m!==C&&_++}return _%2===1}var v=!0,d=t[0];for(l=1;l<t.length;l++)if(d[0]!==t[l][0]||d[1]!==t[l][1]){v=!1;break}return{xmin:a,xmax:n,ymin:i,ymax:o,pts:t,contains:s?f:c,isRect:s,degenerate:v}};fy.isSegmentBent=function(r,t,a,n){var i=r[t],o=[r[a][0]-i[0],r[a][1]-i[1]],l=_7(o,o),s=Math.sqrt(l),u=[-o[1]/s,o[0]/s],f,c,v;for(f=t+1;f<a;f++)if(c=[r[f][0]-i[0],r[f][1]-i[1]],v=_7(c,o),v<0||v>l||Math.abs(_7(c,u))>n)return!0;return!1};fy.filter=function(r,t){var a=[r[0]],n=0,i=0;function o(s){r.push(s);var u=a.length,f=n;a.splice(i+1);for(var c=f+1;c<r.length;c++)(c===r.length-1||fy.isSegmentBent(r,f,c+1,t))&&(a.push(r[c]),a.length<u-2&&(n=c,i=a.length-1),f=c)}if(r.length>1){var l=r.pop();o(l)}return{addPt:o,raw:r,filtered:a}}});var nO=z((BVe,aO)=>{\"use strict\";aO.exports={BENDPX:1.5,MINSELECT:12,SELECTDELAY:100,SELECTID:\"-select\"}});var kO=z((OVe,MO)=>{\"use strict\";var iO=QB(),j4e=rO(),od=Tr(),W4e=Zr().dashStyle,nd=Sr(),X4e=In(),Z4e=qo().makeEventData,cd=lf(),$4e=cd.freeMode,J4e=cd.rectMode,ld=cd.drawMode,k7=cd.openMode,S7=cd.selectMode,oO=Bs(),lO=Wh(),vO=Xm(),hO=ks().clearOutline,dO=zs(),T7=dO.handleEllipse,K4e=dO.readPaths,Q4e=Vm().newShapes,e6e=X6(),r6e=x7().activateLastSelection,vy=ke(),t6e=vy.sorterAsc,pO=w7(),id=wp(),Yi=ba().getFromId,a6e=Nm(),n6e=oy().redrawReglTraces,hy=nO(),hl=hy.MINSELECT,i6e=pO.filter,q7=pO.tester,L7=Hm(),sO=L7.p2r,o6e=L7.axValue,l6e=L7.getTransform;function C7(e){return e.subplot!==void 0}function s6e(e,r,t,a,n){var i=!C7(a),o=$4e(n),l=J4e(n),s=k7(n),u=ld(n),f=S7(n),c=n===\"drawline\",v=n===\"drawcircle\",d=c||v,p=a.gd,y=p._fullLayout,m=f&&y.newselection.mode===\"immediate\"&&i,b=y._zoomlayer,T=a.element.getBoundingClientRect(),w=a.plotinfo,x=l6e(w),_=r-T.left,k=t-T.top;y._calcInverseTransform(p);var A=vy.apply3DTransform(y._invTransform)(_,k);_=A[0],k=A[1];var q=y._invScaleX,C=y._invScaleY,E=_,P=k,R=\"M\"+_+\",\"+k,N=a.xaxes[0],I=a.yaxes[0],O=N._length,U=I._length,Y=e.altKey&&!(ld(n)&&s),G,V,W,j,J,te,ae;yO(e,p,a),o&&(G=i6e([[_,k]],hy.BENDPX));var se=b.selectAll(\"path.select-outline-\"+w.id).data([1]),$=u?y.newshape:y.newselection;u&&(a.hasText=$.label.text||$.label.texttemplate);var fe=u&&!s?$.fillcolor:\"rgba(0,0,0,0)\",ie=$.line.color||(i?nd.contrast(p._fullLayout.plot_bgcolor):\"#7f7f7f\");se.enter().append(\"path\").attr(\"class\",\"select-outline select-outline-\"+w.id).style({opacity:u?$.opacity/2:1,\"stroke-dasharray\":W4e($.line.dash,$.line.width),\"stroke-width\":$.line.width+\"px\",\"shape-rendering\":\"crispEdges\"}).call(nd.stroke,ie).call(nd.fill,fe).attr(\"fill-rule\",\"evenodd\").classed(\"cursor-move\",!!u).attr(\"transform\",x).attr(\"d\",R+\"Z\");var ue=b.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:nd.background,stroke:nd.defaultLine,\"stroke-width\":1}).attr(\"transform\",x).attr(\"d\",\"M0,0Z\");if(u&&a.hasText){var ce=b.select(\".label-temp\");ce.empty()&&(ce=b.append(\"g\").classed(\"label-temp\",!0).classed(\"select-outline\",!0).style({opacity:.8}))}var oe=y._uid+hy.SELECTID,be=[],Re=dy(p,a.xaxes,a.yaxes,a.subplot);m&&!e.shiftKey&&(a._clearSubplotSelections=function(){if(i){var Ce=N._id,Me=I._id;wO(p,Ce,Me,Re);for(var Le=(p.layout||{}).selections||[],De=[],Ne=!1,qe=0;qe<Le.length;qe++){var Xe=y.selections[qe];!Xe||Xe.xref!==Ce||Xe.yref!==Me?De.push(Le[qe]):Ne=!0}Ne&&(p._fullLayout._noEmitSelectedAtStart=!0,od.call(\"_guiRelayout\",p,{selections:De}))}});var ye=w6e(a);a.moveFn=function(Ce,Me){a._clearSubplotSelections&&(a._clearSubplotSelections(),a._clearSubplotSelections=void 0),E=Math.max(0,Math.min(O,q*Ce+_)),P=Math.max(0,Math.min(U,C*Me+k));var Le=Math.abs(E-_),De=Math.abs(P-k);if(l){var Ne,qe,Xe;if(f){var $e=y.selectdirection;switch($e===\"any\"?De<Math.min(Le*.6,hl)?Ne=\"h\":Le<Math.min(De*.6,hl)?Ne=\"v\":Ne=\"d\":Ne=$e,Ne){case\"h\":qe=v?U/2:0,Xe=U;break;case\"v\":qe=v?O/2:0,Xe=O;break}}if(u)switch(y.newshape.drawdirection){case\"vertical\":Ne=\"h\",qe=v?U/2:0,Xe=U;break;case\"horizontal\":Ne=\"v\",qe=v?O/2:0,Xe=O;break;case\"ortho\":Le<De?(Ne=\"h\",qe=k,Xe=P):(Ne=\"v\",qe=_,Xe=E);break;default:Ne=\"d\"}Ne===\"h\"?(j=d?T7(v,[E,qe],[E,Xe]):[[_,qe],[_,Xe],[E,Xe],[E,qe]],j.xmin=d?E:Math.min(_,E),j.xmax=d?E:Math.max(_,E),j.ymin=Math.min(qe,Xe),j.ymax=Math.max(qe,Xe),ue.attr(\"d\",\"M\"+j.xmin+\",\"+(k-hl)+\"h-4v\"+2*hl+\"h4ZM\"+(j.xmax-1)+\",\"+(k-hl)+\"h4v\"+2*hl+\"h-4Z\")):Ne===\"v\"?(j=d?T7(v,[qe,P],[Xe,P]):[[qe,k],[qe,P],[Xe,P],[Xe,k]],j.xmin=Math.min(qe,Xe),j.xmax=Math.max(qe,Xe),j.ymin=d?P:Math.min(k,P),j.ymax=d?P:Math.max(k,P),ue.attr(\"d\",\"M\"+(_-hl)+\",\"+j.ymin+\"v-4h\"+2*hl+\"v4ZM\"+(_-hl)+\",\"+(j.ymax-1)+\"v4h\"+2*hl+\"v-4Z\")):Ne===\"d\"&&(j=d?T7(v,[_,k],[E,P]):[[_,k],[_,P],[E,P],[E,k]],j.xmin=Math.min(_,E),j.xmax=Math.max(_,E),j.ymin=Math.min(k,P),j.ymax=Math.max(k,P),ue.attr(\"d\",\"M0,0Z\"))}else o&&(G.addPt([E,P]),j=G.filtered);if(a.selectionDefs&&a.selectionDefs.length?(W=gO(a.mergedPolygons,j,Y),j.subtract=Y,V=D7(a.selectionDefs.concat([j]))):(W=[j],V=q7(j)),vO(xO(W,s),se,a),f){var We=M7(p,!1),Se=We.eventData?We.eventData.points.slice():[];We=M7(p,!1,V,Re,a),V=We.selectionTesters,ae=We.eventData;var Fe;G?Fe=G.filtered:Fe=TO(W),id.throttle(oe,hy.SELECTDELAY,function(){be=_O(V,Re);for(var Qe=be.slice(),re=0;re<Se.length;re++){for(var xe=Se[re],Ge=!1,cr=0;cr<Qe.length;cr++)if(Qe[cr].curveNumber===xe.curveNumber&&Qe[cr].pointNumber===xe.pointNumber){Ge=!0;break}Ge||Qe.push(xe)}Qe.length&&(ae||(ae={}),ae.points=Qe),ye(ae,Fe),T6e(p,ae)})}},a.clickFn=function(Ce,Me){if(ue.remove(),p._fullLayout._activeShapeIndex>=0){p._fullLayout._deactivateShape(p);return}if(!u){var Le=y.clickmode;id.done(oe).then(function(){if(id.clear(oe),Ce===2){for(se.remove(),J=0;J<Re.length;J++)te=Re[J],te._module.selectPoints(te,!1);if(ud(p,Re),sd(a),P7(p),Re.length){var De=Re[0].xaxis,Ne=Re[0].yaxis;if(De&&Ne){for(var qe=[],Xe=p._fullLayout.selections,$e=0;$e<Xe.length;$e++){var We=Xe[$e];We&&(We.xref!==De._id||We.yref!==Ne._id)&&qe.push(We)}qe.length<Xe.length&&(p._fullLayout._noEmitSelectedAtStart=!0,od.call(\"_guiRelayout\",p,{selections:qe}))}}}else Le.indexOf(\"select\")>-1&&mO(Me,p,a.xaxes,a.yaxes,a.subplot,a,se),Le===\"event\"&&fd(p,void 0);X4e.click(p,Me,w.id)}).catch(vy.error)}},a.doneFn=function(){ue.remove(),id.done(oe).then(function(){id.clear(oe),!m&&j&&a.selectionDefs&&(j.subtract=Y,a.selectionDefs.push(j),a.mergedPolygons.length=0,[].push.apply(a.mergedPolygons,W)),(m||u)&&sd(a,m),a.doneFnCompleted&&a.doneFnCompleted(be),f&&fd(p,ae)}).catch(vy.error)}}function mO(e,r,t,a,n,i,o){var l=r._hoverdata,s=r._fullLayout,u=s.clickmode,f=u.indexOf(\"event\")>-1,c=[],v,d,p,y,m,b,T,w,x,_;if(h6e(l)){yO(e,r,i),v=dy(r,t,a,n);var k=d6e(l,v),A=k.pointNumbers.length>0;if(A?p6e(v,k):m6e(v)&&(T=fO(k))){for(o&&o.remove(),_=0;_<v.length;_++)d=v[_],d._module.selectPoints(d,!1);ud(r,v),sd(i),f&&P7(r)}else{w=e.shiftKey&&(T!==void 0?T:fO(k)),p=u6e(k.pointNumber,k.searchInfo,w);var q=i.selectionDefs.concat([p]);for(y=D7(q,y),_=0;_<v.length;_++)if(m=v[_]._module.selectPoints(v[_],y),b=bO(m,v[_]),c.length)for(var C=0;C<b.length;C++)c.push(b[C]);else c=b;if(x={points:c},ud(r,v,x),p&&i&&i.selectionDefs.push(p),o){var E=i.mergedPolygons,P=k7(i.dragmode);vO(xO(E,P),o,i)}f&&fd(r,x)}}}function u6e(e,r,t){return{pointNumber:e,searchInfo:r,subtract:!!t}}function A7(e){return\"pointNumber\"in e&&\"searchInfo\"in e}function f6e(e){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(r,t,a,n){var i=e.searchInfo.cd[0].trace.index,o=n.cd[0].trace.index;return o===i&&a===e.pointNumber},isRect:!1,degenerate:!1,subtract:!!e.subtract}}function D7(e){if(!e.length)return;for(var r=[],t=A7(e[0])?0:e[0][0][0],a=t,n=A7(e[0])?0:e[0][0][1],i=n,o=0;o<e.length;o++)if(A7(e[o]))r.push(f6e(e[o]));else{var l=q7(e[o]);l.subtract=!!e[o].subtract,r.push(l),t=Math.min(t,l.xmin),a=Math.max(a,l.xmax),n=Math.min(n,l.ymin),i=Math.max(i,l.ymax)}function s(u,f,c,v){for(var d=!1,p=0;p<r.length;p++)r[p].contains(u,f,c,v)&&(d=!r[p].subtract);return d}return{xmin:t,xmax:a,ymin:n,ymax:i,pts:[],contains:s,isRect:!1,degenerate:!1}}function yO(e,r,t){var a=r._fullLayout,n=t.plotinfo,i=t.dragmode,o=a._lastSelectedSubplot&&a._lastSelectedSubplot===n.id,l=(e.shiftKey||e.altKey)&&!(ld(i)&&k7(i));o&&l&&n.selection&&n.selection.selectionDefs&&!t.selectionDefs?(t.selectionDefs=n.selection.selectionDefs,t.mergedPolygons=n.selection.mergedPolygons):(!l||!n.selection)&&sd(t),o||(hO(r),a._lastSelectedSubplot=n.id)}function c6e(e){return e._fullLayout._activeShapeIndex>=0}function v6e(e){return e._fullLayout._activeSelectionIndex>=0}function sd(e,r){var t=e.dragmode,a=e.plotinfo,n=e.gd;c6e(n)&&n._fullLayout._deactivateShape(n),v6e(n)&&n._fullLayout._deactivateSelection(n);var i=n._fullLayout,o=i._zoomlayer,l=ld(t),s=S7(t);if(l||s){var u=o.selectAll(\".select-outline-\"+a.id);if(u&&n._fullLayout._outlining){var f;l&&(f=Q4e(u,e)),f&&od.call(\"_guiRelayout\",n,{shapes:f});var c;s&&!C7(e)&&(c=e6e(u,e)),c&&(n._fullLayout._noEmitSelectedAtStart=!0,od.call(\"_guiRelayout\",n,{selections:c}).then(function(){r&&r6e(n)})),n._fullLayout._outlining=!1}}a.selection={},a.selection.selectionDefs=e.selectionDefs=[],a.selection.mergedPolygons=e.mergedPolygons=[]}function uO(e){return e._id}function dy(e,r,t,a){if(!e.calcdata)return[];var n=[],i=r.map(uO),o=t.map(uO),l,s,u;for(u=0;u<e.calcdata.length;u++)if(l=e.calcdata[u],s=l[0].trace,!(s.visible!==!0||!s._module||!s._module.selectPoints))if(C7({subplot:a})&&(s.subplot===a||s.geo===a))n.push(cy(s._module,l,r[0],t[0]));else if(s.type===\"splom\"){if(s._xaxes[i[0]]&&s._yaxes[o[0]]){var f=cy(s._module,l,r[0],t[0]);f.scene=e._fullLayout._splomScenes[s.uid],n.push(f)}}else if(s.type===\"sankey\"){var c=cy(s._module,l,r[0],t[0]);n.push(c)}else{if(i.indexOf(s.xaxis)===-1&&(!s._xA||!s._xA.overlaying)||o.indexOf(s.yaxis)===-1&&(!s._yA||!s._yA.overlaying))continue;n.push(cy(s._module,l,Yi(e,s.xaxis),Yi(e,s.yaxis)))}return n}function cy(e,r,t,a){return{_module:e,cd:r,xaxis:t,yaxis:a}}function h6e(e){return e&&Array.isArray(e)&&e[0].hoverOnBox!==!0}function d6e(e,r){var t=e[0],a=-1,n=[],i,o;for(o=0;o<r.length;o++)if(i=r[o],t.fullData.index===i.cd[0].trace.index){if(t.hoverOnBox===!0)break;t.pointNumber!==void 0?a=t.pointNumber:t.binNumber!==void 0&&(a=t.binNumber,n=t.pointNumbers);break}return{pointNumber:a,pointNumbers:n,searchInfo:i}}function fO(e){var r=e.searchInfo.cd[0].trace,t=e.pointNumber,a=e.pointNumbers,n=a.length>0,i=n?a[0]:t;return r.selectedpoints?r.selectedpoints.indexOf(i)>-1:!1}function p6e(e,r){var t=[],a,n,i,o;for(o=0;o<e.length;o++)a=e[o],a.cd[0].trace.selectedpoints&&a.cd[0].trace.selectedpoints.length>0&&t.push(a);if(t.length===1&&(i=t[0]===r.searchInfo,i&&(n=r.searchInfo.cd[0].trace,n.selectedpoints.length===r.pointNumbers.length))){for(o=0;o<r.pointNumbers.length;o++)if(n.selectedpoints.indexOf(r.pointNumbers[o])<0)return!1;return!0}return!1}function m6e(e){var r=0,t,a,n;for(n=0;n<e.length;n++)if(t=e[n],a=t.cd[0].trace,a.selectedpoints&&(a.selectedpoints.length>1||(r+=a.selectedpoints.length,r>1)))return!1;return r===1}function ud(e,r,t){var a,n;for(a=0;a<r.length;a++){n=r[a].cd[0].trace;var i=e._fullLayout._tracePreGUI[n.uid]||{};i.selectedpoints===void 0&&(i.selectedpoints=n._input.selectedpoints||null)}if(t){var o=t.points||[];for(a=0;a<r.length;a++)n=r[a].cd[0].trace,n._input.selectedpoints=n.selectedpoints=[];for(var l=0;l<o.length;l++){var s=o[l],u=s.data,f=s.pointIndex,c=s.pointIndices;c?[].push.apply(u.selectedpoints,c):u.selectedpoints.push(f)}}else for(a=0;a<r.length;a++)n=r[a].cd[0].trace,delete n.selectedpoints,delete n._input.selectedpoints;y6e(e,r)}function y6e(e,r){for(var t=!1,a=0;a<r.length;a++){var n=r[a],i=n.cd;od.traceIs(i[0].trace,\"regl\")&&(t=!0);var o=n._module,l=o.styleOnSelect||o.style;l&&(l(e,i,i[0].node3),i[0].nodeRangePlot3&&l(e,i,i[0].nodeRangePlot3))}t&&(a6e(e),n6e(e))}function gO(e,r,t){for(var a=t?iO.difference:iO.union,n=a({regions:e},{regions:[r]}),i=n.regions.reverse(),o=0;o<i.length;o++){var l=i[o];l.subtract=E7(l,i.slice(0,o))}return i}function bO(e,r){if(Array.isArray(e))for(var t=r.cd,a=r.cd[0].trace,n=0;n<e.length;n++)e[n]=Z4e(e[n],a,t);return e}function xO(e,r){for(var t=[],a=0;a<e.length;a++){t[a]=[];for(var n=0;n<e[a].length;n++){t[a][n]=[],t[a][n][0]=n?\"L\":\"M\";for(var i=0;i<e[a][n].length;i++)t[a][n].push(e[a][n][i])}r||t[a].push([\"Z\",t[a][0][1],t[a][0][2]])}return t}function _O(e,r){for(var t=[],a,n=[],i,o=0;o<r.length;o++){var l=r[o];i=l._module.selectPoints(l,e),n.push(i),a=bO(i,l),t=t.concat(a)}return t}function M7(e,r,t,a,n){var i=!!a,o,l,s;n&&(o=n.plotinfo,l=n.xaxes[0]._id,s=n.yaxes[0]._id);var u=[],f=[],c=cO(e),v=e._fullLayout;if(o){var d=v._zoomlayer,p=v.dragmode,y=ld(p),m=S7(p);if(y||m){var b=Yi(e,l,\"x\"),T=Yi(e,s,\"y\");if(b&&T){var w=d.selectAll(\".select-outline-\"+o.id);if(w&&e._fullLayout._outlining&&w.length){for(var x=w[0][0],_=x.getAttribute(\"d\"),k=K4e(_,e,o),A=[],q=0;q<k.length;q++){for(var C=k[q],E=[],P=0;P<C.length;P++)E.push([Os(b,C[P][1]),Os(T,C[P][2])]);E.xref=l,E.yref=s,E.subtract=E7(E,A),A.push(E)}c=c.concat(A)}}}}var R=l&&s?[l+s]:v._subplots.cartesian;g6e(e);for(var N={},I=0;I<R.length;I++){var O=R[I],U=O.indexOf(\"y\"),Y=O.slice(0,U),G=O.slice(U),V=l&&s?t:void 0;if(V=x6e(c,Y,G,V),V){var W=a;if(!i){var j=Yi(e,Y,\"x\"),J=Yi(e,G,\"y\");W=dy(e,[j],[J],O);for(var te=0;te<W.length;te++){var ae=W[te],se=ae.cd[0],$=se.trace;if(ae._module.name===\"scattergl\"&&!se.t.xpx){var fe=$.x,ie=$.y,ue=$._length;se.t.xpx=[],se.t.ypx=[];for(var ce=0;ce<ue;ce++)se.t.xpx[ce]=j.c2p(fe[ce]),se.t.ypx[ce]=J.c2p(ie[ce])}ae._module.name===\"splom\"&&(N[$.uid]||(N[$.uid]=!0))}}var oe=_O(V,W);u=u.concat(oe),f=f.concat(W)}}var be={points:u};ud(e,f,be);var Re=v.clickmode,ye=Re.indexOf(\"event\")>-1&&r;if(!o&&r){var Ce=cO(e,!0);if(Ce.length){var Me=Ce[0].xref,Le=Ce[0].yref;if(Me&&Le){var De=TO(Ce),Ne=AO([Yi(e,Me,\"x\"),Yi(e,Le,\"y\")]);Ne(be,De)}}e._fullLayout._noEmitSelectedAtStart?e._fullLayout._noEmitSelectedAtStart=!1:ye&&fd(e,be),v._reselect=!1}if(!o&&v._deselect){var qe=v._deselect;l=qe.xref,s=qe.yref,b6e(l,s,f)||wO(e,l,s,a),ye&&(be.points.length?fd(e,be):P7(e)),v._deselect=!1}return{eventData:be,selectionTesters:t}}function g6e(e){var r=e.calcdata;if(r)for(var t=0;t<r.length;t++){var a=r[t][0],n=a.trace,i=e._fullLayout._splomScenes;if(i){var o=i[n.uid];o&&(o.selectBatch=[])}}}function b6e(e,r,t){for(var a=0;a<t.length;a++){var n=t[a];if(n.xaxis&&n.xaxis._id===e&&n.yaxis&&n.yaxis._id===r)return!0}return!1}function wO(e,r,t,a){a=dy(e,[Yi(e,r,\"x\")],[Yi(e,t,\"y\")],r+t);for(var n=0;n<a.length;n++){var i=a[n];i._module.selectPoints(i,!1)}ud(e,a)}function x6e(e,r,t,a){for(var n,i=0;i<e.length;i++){var o=e[i];if(!(r!==o.xref||t!==o.yref))if(n){var l=!!o.subtract;n=gO(n,o,l),a=D7(n)}else n=[o],a=q7(o)}return a}function cO(e,r){for(var t=[],a=e._fullLayout,n=a.selections,i=n.length,o=0;o<i;o++)if(!(r&&o!==a._activeSelectionIndex)){var l=n[o];if(l){var s=l.xref,u=l.yref,f=Yi(e,s,\"x\"),c=Yi(e,u,\"y\"),v,d,p,y,m;if(l.type===\"rect\"){m=[];var b=Os(f,l.x0),T=Os(f,l.x1),w=Os(c,l.y0),x=Os(c,l.y1);m=[[b,w],[b,x],[T,x],[T,w]],v=Math.min(b,T),d=Math.max(b,T),p=Math.min(w,x),y=Math.max(w,x),m.xmin=v,m.xmax=d,m.ymin=p,m.ymax=y,m.xref=s,m.yref=u,m.subtract=!1,m.isRect=!0,t.push(m)}else if(l.type===\"path\")for(var _=l.path.split(\"Z\"),k=[],A=0;A<_.length;A++){var q=_[A];if(q){q+=\"Z\";var C=oO.extractPathCoords(q,lO.paramIsX,\"raw\"),E=oO.extractPathCoords(q,lO.paramIsY,\"raw\");v=1/0,d=-1/0,p=1/0,y=-1/0,m=[];for(var P=0;P<C.length;P++){var R=Os(f,C[P]),N=Os(c,E[P]);m.push([R,N]),v=Math.min(R,v),d=Math.max(R,d),p=Math.min(N,p),y=Math.max(N,y)}m.xmin=v,m.xmax=d,m.ymin=p,m.ymax=y,m.xref=s,m.yref=u,m.subtract=E7(m,k),k.push(m),t.push(m)}}}}return t}function E7(e,r){for(var t=!1,a=0;a<r.length;a++)for(var n=r[a],i=0;i<e.length;i++)if(j4e(e[i],n)){t=!t;break}return t}function Os(e,r){return e.type===\"date\"&&(r=r.replace(\"_\",\" \")),e.type===\"log\"?e.c2p(r):e.r2p(r,null,e.calendar)}function TO(e){for(var r=e.length,t=[],a=0;a<r;a++){var n=e[a];t=t.concat(n),t=t.concat([n[0]])}return _6e(t)}function _6e(e){return e.isRect=e.length===5&&e[0][0]===e[4][0]&&e[0][1]===e[4][1]&&e[0][0]===e[1][0]&&e[2][0]===e[3][0]&&e[0][1]===e[3][1]&&e[1][1]===e[2][1]||e[0][1]===e[1][1]&&e[2][1]===e[3][1]&&e[0][0]===e[3][0]&&e[1][0]===e[2][0],e.isRect&&(e.xmin=Math.min(e[0][0],e[2][0]),e.xmax=Math.max(e[0][0],e[2][0]),e.ymin=Math.min(e[0][1],e[2][1]),e.ymax=Math.max(e[0][1],e[2][1])),e}function AO(e){return function(r,t){for(var a,n,i=0;i<e.length;i++){var o=e[i],l=o._id,s=l.charAt(0);if(t.isRect){a||(a={});var u=t[s+\"min\"],f=t[s+\"max\"];u!==void 0&&f!==void 0&&(a[l]=[sO(o,u),sO(o,f)].sort(t6e))}else n||(n={}),n[l]=t.map(o6e(o))}a&&(r.range=a),n&&(r.lassoPoints=n)}}function w6e(e){var r=e.plotinfo;return r.fillRangeItems||AO(e.xaxes.concat(e.yaxes))}function T6e(e,r){e.emit(\"plotly_selecting\",r)}function fd(e,r){r&&(r.selections=(e.layout||{}).selections||[]),e.emit(\"plotly_selected\",r)}function P7(e){e.emit(\"plotly_deselect\",null)}MO.exports={reselect:M7,prepSelect:s6e,clearOutline:hO,clearSelectionsCache:sd,selectOnClick:mO}});var R7=z((HVe,SO)=>{\"use strict\";SO.exports=[{path:\"\",backoff:0},{path:\"M-2.4,-3V3L0.6,0Z\",backoff:.6},{path:\"M-3.7,-2.5V2.5L1.3,0Z\",backoff:1.3},{path:\"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z\",backoff:1.55},{path:\"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z\",backoff:1.6},{path:\"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z\",backoff:2},{path:\"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z\",backoff:0,noRotate:!0},{path:\"M2,2V-2H-2V2Z\",backoff:0,noRotate:!0}]});var vd=z((UVe,qO)=>{\"use strict\";qO.exports={axisRefDescription:function(e,r,t){return[\"If set to a\",e,\"axis id (e.g. *\"+e+\"* or\",\"*\"+e+\"2*), the `\"+e+\"` position refers to a\",e,\"coordinate. If set to *paper*, the `\"+e+\"`\",\"position refers to the distance from the\",r,\"of the plotting\",\"area in normalized coordinates where *0* (*1*) corresponds to the\",r,\"(\"+t+\"). If set to a\",e,\"axis ID followed by\",\"*domain* (separated by a space), the position behaves like for\",\"*paper*, but refers to the distance in fractions of the domain\",\"length from the\",r,\"of the domain of that axis: e.g.,\",\"*\"+e+\"2 domain* refers to the domain of the second\",e,\"axis and a\",e,\"position of 0.5 refers to the\",\"point between the\",r,\"and the\",t,\"of the domain of the\",\"second\",e,\"axis.\"].join(\" \")}}});var yc=z((YVe,DO)=>{\"use strict\";var LO=R7(),CO=ka(),py=qa(),A6e=St().templatedArray,GVe=vd();DO.exports=A6e(\"annotation\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},text:{valType:\"string\",editType:\"calc+arraydraw\"},textangle:{valType:\"angle\",dflt:0,editType:\"calc+arraydraw\"},font:CO({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),width:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},height:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"center\",editType:\"arraydraw\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"arraydraw\"},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},borderpad:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},showarrow:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},arrowcolor:{valType:\"color\",editType:\"arraydraw\"},arrowhead:{valType:\"integer\",min:0,max:LO.length,dflt:1,editType:\"arraydraw\"},startarrowhead:{valType:\"integer\",min:0,max:LO.length,dflt:1,editType:\"arraydraw\"},arrowside:{valType:\"flaglist\",flags:[\"end\",\"start\"],extras:[\"none\"],dflt:\"end\",editType:\"arraydraw\"},arrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},startarrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},arrowwidth:{valType:\"number\",min:.1,editType:\"calc+arraydraw\"},standoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},startstandoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},ax:{valType:\"any\",editType:\"calc+arraydraw\"},ay:{valType:\"any\",editType:\"calc+arraydraw\"},axref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",py.idRegex.x.toString()],editType:\"calc\"},ayref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",py.idRegex.y.toString()],editType:\"calc\"},xref:{valType:\"enumerated\",values:[\"paper\",py.idRegex.x.toString()],editType:\"calc\"},x:{valType:\"any\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},xshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",py.idRegex.y.toString()],editType:\"calc\"},y:{valType:\"any\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},clicktoshow:{valType:\"enumerated\",values:[!1,\"onoff\",\"onout\"],dflt:!1,editType:\"arraydraw\"},xclick:{valType:\"any\",editType:\"arraydraw\"},yclick:{valType:\"any\",editType:\"arraydraw\"},hovertext:{valType:\"string\",editType:\"arraydraw\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",editType:\"arraydraw\"},font:CO({editType:\"arraydraw\"}),editType:\"arraydraw\"},captureevents:{valType:\"boolean\",editType:\"arraydraw\"},editType:\"calc\"})});var hd=z((VVe,EO)=>{\"use strict\";EO.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}});var my=z((jVe,PO)=>{\"use strict\";PO.exports=function(r){return{valType:\"color\",editType:\"style\",anim:!0}}});var Vi=z((WVe,HO)=>{\"use strict\";var RO=ko().axisHoverFormat,{hovertemplateAttrs:M6e,texttemplateAttrs:k6e,templatefallbackAttrs:FO}=fi(),zO=el(),S6e=ka(),NO=Pi().dash,q6e=Pi().pattern,L6e=Zr(),C6e=hd(),dd=At().extendFlat,D6e=my();function IO(e){return{valType:\"any\",dflt:0,editType:\"calc\"}}function BO(e){return{valType:\"any\",editType:\"calc\"}}function OO(e){return{valType:\"enumerated\",values:[\"start\",\"middle\",\"end\"],dflt:\"middle\",editType:\"calc\"}}HO.exports={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dx:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dy:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},xperiod:IO(\"x\"),yperiod:IO(\"y\"),xperiod0:BO(\"x0\"),yperiod0:BO(\"y0\"),xperiodalignment:OO(\"x\"),yperiodalignment:OO(\"y\"),xhoverformat:RO(\"x\"),yhoverformat:RO(\"y\"),offsetgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},alignmentgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},stackgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc\"},groupnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},stackgaps:{valType:\"enumerated\",values:[\"infer zero\",\"interpolate\"],dflt:\"infer zero\",editType:\"calc\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},texttemplate:k6e(),texttemplatefallback:FO({editType:\"calc\"}),hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},mode:{valType:\"flaglist\",flags:[\"lines\",\"markers\",\"text\"],extras:[\"none\"],editType:\"calc\"},hoveron:{valType:\"flaglist\",flags:[\"points\",\"fills\"],editType:\"style\"},hovertemplate:M6e({},{keys:C6e.eventDataKeys}),hovertemplatefallback:FO(),line:{color:{valType:\"color\",editType:\"style\",anim:!0},width:{valType:\"number\",min:0,dflt:2,editType:\"style\",anim:!0},shape:{valType:\"enumerated\",values:[\"linear\",\"spline\",\"hv\",\"vh\",\"hvh\",\"vhv\"],dflt:\"linear\",editType:\"plot\"},smoothing:{valType:\"number\",min:0,max:1.3,dflt:1,editType:\"plot\"},dash:dd({},NO,{editType:\"style\"}),backoff:{valType:\"number\",min:0,dflt:\"auto\",arrayOk:!0,editType:\"plot\"},simplify:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},connectgaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},cliponaxis:{valType:\"boolean\",dflt:!0,editType:\"plot\"},fill:{valType:\"enumerated\",values:[\"none\",\"tozeroy\",\"tozerox\",\"tonexty\",\"tonextx\",\"toself\",\"tonext\"],editType:\"calc\"},fillcolor:D6e(!0),fillgradient:dd({type:{valType:\"enumerated\",values:[\"radial\",\"horizontal\",\"vertical\",\"none\"],dflt:\"none\",editType:\"calc\"},start:{valType:\"number\",editType:\"calc\"},stop:{valType:\"number\",editType:\"calc\"},colorscale:{valType:\"colorscale\",editType:\"style\"},editType:\"calc\"}),fillpattern:q6e,marker:dd({symbol:{valType:\"enumerated\",values:L6e.symbolList,dflt:\"circle\",arrayOk:!0,editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,arrayOk:!0,editType:\"style\",anim:!0},angle:{valType:\"angle\",dflt:0,arrayOk:!0,editType:\"plot\",anim:!1},angleref:{valType:\"enumerated\",values:[\"previous\",\"up\"],dflt:\"up\",editType:\"plot\",anim:!1},standoff:{valType:\"number\",min:0,dflt:0,arrayOk:!0,editType:\"plot\",anim:!0},size:{valType:\"number\",min:0,dflt:6,arrayOk:!0,editType:\"calc\",anim:!0},maxdisplayed:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},sizeref:{valType:\"number\",dflt:1,editType:\"calc\"},sizemin:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"diameter\",\"area\"],dflt:\"diameter\",editType:\"calc\"},line:dd({width:{valType:\"number\",min:0,arrayOk:!0,editType:\"style\",anim:!0},dash:dd({},NO,{arrayOk:!0}),editType:\"calc\"},zO(\"marker.line\",{anim:!0})),gradient:{type:{valType:\"enumerated\",values:[\"radial\",\"horizontal\",\"vertical\",\"none\"],arrayOk:!0,dflt:\"none\",editType:\"calc\"},color:{valType:\"color\",arrayOk:!0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},zO(\"marker\",{anim:!0})),selected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},unselected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\"],dflt:\"middle center\",arrayOk:!0,editType:\"calc\"},textfont:S6e({editType:\"calc\",colorEditType:\"style\",arrayOk:!0}),zorder:{valType:\"integer\",dflt:0,editType:\"plot\"}}});var F7=z((ZVe,YO)=>{\"use strict\";var UO=yc(),GO=Vi().line,E6e=Pi().dash,yy=At().extendFlat,P6e=wo().overrideAll,R6e=St().templatedArray,XVe=vd();YO.exports=P6e(R6e(\"selection\",{type:{valType:\"enumerated\",values:[\"rect\",\"path\"]},xref:yy({},UO.xref,{}),yref:yy({},UO.yref,{}),x0:{valType:\"any\"},x1:{valType:\"any\"},y0:{valType:\"any\"},y1:{valType:\"any\"},path:{valType:\"string\",editType:\"arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:.7,editType:\"arraydraw\"},line:{color:GO.color,width:yy({},GO.width,{min:1,dflt:1}),dash:yy({},E6e,{dflt:\"dot\"})}}),\"arraydraw\",\"from-root\")});var XO=z(($Ve,WO)=>{\"use strict\";var VO=ke(),gy=Gr(),F6e=So(),z6e=F7(),jO=Bs();WO.exports=function(r,t){F6e(r,t,{name:\"selections\",handleItemDefaults:N6e});for(var a=t.selections,n=0;n<a.length;n++){var i=a[n];i&&i.path===void 0&&(i.x0===void 0||i.x1===void 0||i.y0===void 0||i.y1===void 0)&&(t.selections[n]=null)}};function N6e(e,r,t){function a(k,A){return VO.coerce(e,r,z6e,k,A)}var n=a(\"path\"),i=n?\"path\":\"rect\",o=a(\"type\",i),l=o!==\"path\";l&&delete r.path,a(\"opacity\"),a(\"line.color\"),a(\"line.width\"),a(\"line.dash\");for(var s=[\"x\",\"y\"],u=0;u<2;u++){var f=s[u],c={_fullLayout:t},v,d,p,y=gy.coerceRef(e,r,c,f);if(v=gy.getFromId(c,y),v._selectionIndices.push(r._index),p=jO.rangeToShapePosition(v),d=jO.shapePositionToRange(v),l){var m=f+\"0\",b=f+\"1\",T=e[m],w=e[b];e[m]=d(e[m],!0),e[b]=d(e[b],!0),gy.coercePosition(r,c,a,y,m),gy.coercePosition(r,c,a,y,b);var x=r[m],_=r[b];x!==void 0&&_!==void 0&&(r[m]=p(x),r[b]=p(_),e[m]=T,e[b]=w)}}l&&VO.noneOrAll(e,r,[\"x0\",\"x1\",\"y0\",\"y1\"])}});var $O=z((JVe,ZO)=>{\"use strict\";ZO.exports=function(r,t,a){a(\"newselection.mode\");var n=a(\"newselection.line.width\");n&&(a(\"newselection.line.color\"),a(\"newselection.line.dash\")),a(\"activeselection.fillcolor\"),a(\"activeselection.opacity\")}});var pd=z((KVe,QO)=>{\"use strict\";var I6e=Tr(),JO=ke(),KO=ba();QO.exports=function(r){return function(a,n){var i=a[r];if(Array.isArray(i))for(var o=I6e.subplotsRegistry.cartesian,l=o.idRegex,s=n._subplots,u=s.xaxis,f=s.yaxis,c=s.cartesian,v=n._has(\"cartesian\"),d=0;d<i.length;d++){var p=i[d];if(JO.isPlainObject(p)){var y=KO.cleanId(p.xref,\"x\",!1),m=KO.cleanId(p.yref,\"y\",!1),b=l.x.test(y),T=l.y.test(m);if(b||T){v||JO.pushUnique(n._basePlotModules,o);var w=!1;b&&u.indexOf(y)===-1&&(u.push(y),w=!0),T&&f.indexOf(m)===-1&&(f.push(m),w=!0),w&&b&&T&&c.push(y+m)}}}}}});var dl=z((QVe,rH)=>{\"use strict\";var eH=x7(),md=kO();rH.exports={moduleType:\"component\",name:\"selections\",layoutAttributes:F7(),supplyLayoutDefaults:XO(),supplyDrawNewSelectionDefaults:$O(),includeBasePlot:pd()(\"selections\"),draw:eH.draw,drawOne:eH.drawOne,reselect:md.reselect,prepSelect:md.prepSelect,clearOutline:md.clearOutline,clearSelectionsCache:md.clearSelectionsCache,selectOnClick:md.selectOnClick}});var _H=z((eje,xH)=>{\"use strict\";var H7=Er(),ji=ke(),tH=ji.numberFormat,B6e=g6(),by=Tr(),fH=ji.strTranslate,O6e=Ca(),N7=Sr(),Hs=Zr(),H6e=In(),aH=Gr(),U6e=Rs(),G6e=Bi(),cH=lf(),xy=cH.selectingOrDrawing,Y6e=cH.freeMode,V6e=Qa().FROM_TL,j6e=Nm(),W6e=oy().redrawReglTraces,X6e=va(),I7=ba().getFromId,Z6e=dl().prepSelect,$6e=dl().clearOutline,J6e=dl().selectOnClick,z7=v7(),U7=qa(),nH=U7.MINDRAG,Bn=U7.MINZOOM,iH=!0;function K6e(e,r,t,a,n,i,o,l){var s=e._fullLayout._zoomlayer,u=o+l===\"nsew\",f=(o+l).length===1,c,v,d,p,y,m,b,T,w,x,_,k,A,q,C,E,P,R,N,I,O,U,Y;t+=r.yaxis._shift;function G(){if(c=r.xaxis,v=r.yaxis,w=c._length,x=v._length,b=c._offset,T=v._offset,d={},d[c._id]=c,p={},p[v._id]=v,o&&l)for(var me=r.overlays,Ae=0;Ae<me.length;Ae++){var He=me[Ae].xaxis;d[He._id]=He;var Ze=me[Ae].yaxis;p[Ze._id]=Ze}y=uH(d),m=uH(p),A=oH(y,l),q=oH(m,o),C=!q&&!A,k=sH(e,e._fullLayout._axisMatchGroups,d,p),_=sH(e,e._fullLayout._axisConstraintGroups,d,p,k);var Be=_.isSubplotConstrained||k.isSubplotConstrained;E=l||Be,P=o||Be;var je=e._fullLayout;R=je._has(\"scattergl\"),N=je._has(\"splom\"),I=je._has(\"svg\")}G();var V=r7e(q+A,e._fullLayout.dragmode,u),W=hH(r,o+l+\"drag\",V,t,a,n,i);if(C&&!u)return W.onmousedown=null,W.style.pointerEvents=\"none\",W;var j={element:W,gd:e,plotinfo:r};j.prepFn=function(me,Ae,He){var Ze=j.dragmode,Be=e._fullLayout.dragmode;Be!==Ze&&(j.dragmode=Be),G(),U=e._fullLayout._invScaleX,Y=e._fullLayout._invScaleY,C||(u?me.shiftKey?Be===\"pan\"?Be=\"zoom\":xy(Be)||(Be=\"pan\"):me.ctrlKey&&(Be=\"pan\"):Be=\"pan\"),Y6e(Be)?j.minDrag=1:j.minDrag=void 0,xy(Be)?(j.xaxes=y,j.yaxes=m,Z6e(me,Ae,He,j,Be)):(j.clickFn=te,xy(Ze)&&J(),C||(Be===\"zoom\"?(j.moveFn=Ce,j.doneFn=Le,j.minDrag=1,ye(me,Ae,He)):Be===\"pan\"&&(j.moveFn=We,j.doneFn=re))),e._fullLayout._redrag=function(){var je=e._dragdata;if(je&&je.element===W){var tr=e._fullLayout.dragmode;xy(tr)||(G(),xe([0,0,w,x]),j.moveFn(je.dx,je.dy))}}};function J(){j.plotinfo.selection=!1,$6e(e)}function te(me,Ae){var He=j.gd;if(He._fullLayout._activeShapeIndex>=0){He._fullLayout._deactivateShape(He);return}var Ze=He._fullLayout.clickmode;if(O7(He),me===2&&!f&&Qe(),u)Ze.indexOf(\"select\")>-1&&J6e(Ae,He,y,m,r.id,j),Ze.indexOf(\"event\")>-1&&H6e.click(He,Ae,r.id);else if(me===1&&f){var Be=o?v:c,je=o===\"s\"||l===\"w\"?0:1,tr=Be._name+\".range[\"+je+\"]\",ir=Q6e(Be,je),lr=\"left\",Ee=\"middle\";if(Be.fixedrange)return;o?(Ee=o===\"n\"?\"top\":\"bottom\",Be.side===\"right\"&&(lr=\"right\")):l===\"e\"&&(lr=\"right\"),He._context.showAxisRangeEntryBoxes&&H7.select(W).call(O6e.makeEditable,{gd:He,immediate:!0,background:He._fullLayout.paper_bgcolor,text:String(ir),fill:Be.tickfont?Be.tickfont.color:\"#444\",horizontalAlign:lr,verticalAlign:Ee}).on(\"edit\",function(Je){var Ie=Be.d2r(Je);Ie!==void 0&&by.call(\"_guiRelayout\",He,tr,Ie)})}}G6e.init(j);var ae,se,$,fe,ie,ue,ce,oe,be,Re;function ye(me,Ae,He){var Ze=W.getBoundingClientRect();ae=Ae-Ze.left,se=He-Ze.top,e._fullLayout._calcInverseTransform(e);var Be=ji.apply3DTransform(e._fullLayout._invTransform)(ae,se);ae=Be[0],se=Be[1],$={l:ae,r:ae,w:0,t:se,b:se,h:0},fe=e._hmpixcount?e._hmlumcount/e._hmpixcount:N7.luminosity(e._fullLayout.plot_bgcolor),ie=\"M0,0H\"+w+\"V\"+x+\"H0V0\",ue=!1,ce=\"xy\",Re=!1,oe=dH(s,fe,b,T,ie),be=pH(s,b,T)}function Ce(me,Ae){if(e._transitioningWithDuration)return!1;var He=Math.max(0,Math.min(w,U*me+ae)),Ze=Math.max(0,Math.min(x,Y*Ae+se)),Be=Math.abs(He-ae),je=Math.abs(Ze-se);$.l=Math.min(ae,He),$.r=Math.max(ae,He),$.t=Math.min(se,Ze),$.b=Math.max(se,Ze);function tr(){ce=\"\",$.r=$.l,$.t=$.b,be.attr(\"d\",\"M0,0Z\")}if(_.isSubplotConstrained)Be>Bn||je>Bn?(ce=\"xy\",Be/w>je/x?(je=Be*x/w,se>Ze?$.t=se-je:$.b=se+je):(Be=je*w/x,ae>He?$.l=ae-Be:$.r=ae+Be),be.attr(\"d\",_y($))):tr();else if(k.isSubplotConstrained)if(Be>Bn||je>Bn){ce=\"xy\";var ir=Math.min($.l/w,(x-$.b)/x),lr=Math.max($.r/w,(x-$.t)/x);$.l=ir*w,$.r=lr*w,$.b=(1-ir)*x,$.t=(1-lr)*x,be.attr(\"d\",_y($))}else tr();else!q||je<Math.min(Math.max(Be*.6,nH),Bn)?Be<nH||!A?tr():($.t=0,$.b=x,ce=\"x\",be.attr(\"d\",t7e($,se))):!A||Be<Math.min(je*.6,Bn)?($.l=0,$.r=w,ce=\"y\",be.attr(\"d\",a7e($,ae))):(ce=\"xy\",be.attr(\"d\",_y($)));$.w=$.r-$.l,$.h=$.b-$.t,ce&&(Re=!0),e._dragged=Re,mH(oe,be,$,ie,ue,fe),Me(),e.emit(\"plotly_relayouting\",O),ue=!0}function Me(){O={},(ce===\"xy\"||ce===\"x\")&&(B7(y,$.l/w,$.r/w,O,_.xaxes),Se(\"x\",O)),(ce===\"xy\"||ce===\"y\")&&(B7(m,(x-$.b)/x,(x-$.t)/x,O,_.yaxes),Se(\"y\",O))}function Le(){Me(),O7(e),re(),gH(e)}var De=[0,0,w,x],Ne=null,qe=U7.REDRAWDELAY,Xe=r.mainplot?e._fullLayout._plots[r.mainplot]:r;function $e(me){if(!e._context._scrollZoom.cartesian&&!e._fullLayout._enablescrollzoom)return;if(J(),e._transitioningWithDuration){me.preventDefault(),me.stopPropagation();return}G(),clearTimeout(Ne);var Ae=-me.deltaY;if(isFinite(Ae)||(Ae=me.wheelDelta/10),!isFinite(Ae)){ji.log(\"Did not find wheel motion attributes: \",me);return}e._fullLayout._replotting=!0;var He=Math.exp(-Math.min(Math.max(Ae,-20),20)/200),Ze=Xe.draglayer.select(\".nsewdrag\").node().getBoundingClientRect(),Be=(me.clientX-Ze.left)/Ze.width,je=(Ze.bottom-me.clientY)/Ze.height,tr;function ir(lr,Ee,Je){if(lr.fixedrange)return;var Ie=ji.simpleMap(lr.range,lr.r2l),pr=Ie[0]+(Ie[1]-Ie[0])*Ee;function mr(sr){return lr.l2r(pr+(sr-pr)*Je)}lr.range=Ie.map(mr)}if(E){for(l||(Be=.5),tr=0;tr<y.length;tr++)ir(y[tr],Be,He);Se(\"x\"),De[2]*=He,De[0]+=De[2]*Be*(1/He-1)}if(P){for(o||(je=.5),tr=0;tr<m.length;tr++)ir(m[tr],je,He);Se(\"y\"),De[3]*=He,De[1]+=De[3]*(1-je)*(1/He-1)}xe(De),Fe(),e.emit(\"plotly_relayouting\",O),Ne=setTimeout(function(){e._fullLayout&&(De=[0,0,w,x],re())},qe),me.preventDefault()}o.length*l.length!==1&&bH(W,$e);function We(me,Ae){if(me=me*U,Ae=Ae*Y,e._transitioningWithDuration)return;if(e._fullLayout._replotting=!0,A===\"ew\"||q===\"ns\"){var He=A?-me:0,Ze=q?-Ae:0;if(k.isSubplotConstrained){if(A&&q){var Be=(me/w-Ae/x)/2;me=Be*w,Ae=-Be*x,He=-me,Ze=-Ae}q?He=-Ze*w/x:Ze=-He*x/w}A&&(lH(y,me),Se(\"x\")),q&&(lH(m,Ae),Se(\"y\")),xe([He,Ze,w,x]),Fe(),e.emit(\"plotly_relayouting\",O);return}function je(mr,sr,yr){for(var ne=1-sr,ge,ze,Oe=0;Oe<mr.length;Oe++){var Jr=mr[Oe];if(!Jr.fixedrange){ge=Jr,ze=Jr._rl[ne]+(Jr._rl[sr]-Jr._rl[ne])/e7e(yr/Jr._length);var Kr=Jr.l2r(ze);Kr!==!1&&Kr!==void 0&&(Jr.range[sr]=Kr)}}return ge._length*(ge._rl[sr]-ze)/(ge._rl[sr]-ge._rl[ne])}var tr=A===\"w\"==(q===\"n\")?1:-1;if(A&&q&&(_.isSubplotConstrained||k.isSubplotConstrained)){var ir=(me/w+tr*Ae/x)/2;me=ir*w,Ae=tr*ir*x}var lr,Ee;if(A===\"w\"?me=je(y,0,me):A===\"e\"?me=je(y,1,-me):A||(me=0),q===\"n\"?Ae=je(m,1,Ae):q===\"s\"?Ae=je(m,0,-Ae):q||(Ae=0),lr=A===\"w\"?me:0,Ee=q===\"n\"?Ae:0,_.isSubplotConstrained&&!k.isSubplotConstrained||k.isSubplotConstrained&&A&&q&&tr>0){var Je;if(k.isSubplotConstrained||!A&&q.length===1){for(Je=0;Je<y.length;Je++)y[Je].range=y[Je]._r.slice(),z7(y[Je],1-Ae/x);me=Ae*w/x,lr=me/2}if(k.isSubplotConstrained||!q&&A.length===1){for(Je=0;Je<m.length;Je++)m[Je].range=m[Je]._r.slice(),z7(m[Je],1-me/w);Ae=me*x/w,Ee=Ae/2}}(!k.isSubplotConstrained||!q)&&Se(\"x\"),(!k.isSubplotConstrained||!A)&&Se(\"y\");var Ie=w-me,pr=x-Ae;k.isSubplotConstrained&&!(A&&q)&&(A?(Ee=lr?0:me*x/w,pr=Ie*x/w):(lr=Ee?0:Ae*w/x,Ie=pr*w/x)),xe([lr,Ee,Ie,pr]),Fe(),e.emit(\"plotly_relayouting\",O)}function Se(me,Ae){for(var He=k.isSubplotConstrained?{x:m,y}[me]:k[me+\"axes\"],Ze=k.isSubplotConstrained?{x:y,y:m}[me]:[],Be=0;Be<He.length;Be++){var je=He[Be],tr=je._id,ir=k.xLinks[tr]||k.yLinks[tr],lr=Ze[0]||d[ir]||p[ir];lr&&(Ae?(Ae[je._name+\".range[0]\"]=Ae[lr._name+\".range[0]\"],Ae[je._name+\".range[1]\"]=Ae[lr._name+\".range[1]\"]):je.range=lr.range.slice())}}function Fe(){var me=[],Ae;function He(tr){for(Ae=0;Ae<tr.length;Ae++)tr[Ae].fixedrange||me.push(tr[Ae]._id)}function Ze(tr,ir){for(Ae=0;Ae<tr.length;Ae++){var lr=tr[Ae],Ee=lr[ir],Je=Ee._id;!lr.fixedrange&&Ee.tickmode===\"sync\"&&!me.includes(Je)&&me.push(Je)}}for(E&&(He(y),He(_.xaxes),He(k.xaxes),Ze(r.overlays,\"xaxis\")),P&&(He(m),He(_.yaxes),He(k.yaxes),Ze(r.overlays,\"yaxis\")),O={},Ae=0;Ae<me.length;Ae++){var Be=me[Ae],je=I7(e,Be);aH.drawOne(e,je,{skipTitle:!0}),O[je._name+\".range[0]\"]=je.range[0],O[je._name+\".range[1]\"]=je.range[1]}aH.redrawComponents(e,me)}function Qe(){if(!e._transitioningWithDuration){var me=e._context.doubleClick,Ae=[];A&&(Ae=Ae.concat(y)),q&&(Ae=Ae.concat(m)),k.xaxes&&(Ae=Ae.concat(k.xaxes)),k.yaxes&&(Ae=Ae.concat(k.yaxes));var He={},Ze,Be;if(me===\"reset+autosize\")for(me=\"autosize\",Be=0;Be<Ae.length;Be++){Ze=Ae[Be];var je=Ze._rangeInitial0,tr=Ze._rangeInitial1,ir=je!==void 0||tr!==void 0;if(ir&&(je!==void 0&&je!==Ze.range[0]||tr!==void 0&&tr!==Ze.range[1])||!ir&&Ze.autorange!==!0){me=\"reset\";break}}if(me===\"autosize\")for(Be=0;Be<Ae.length;Be++)Ze=Ae[Be],Ze.fixedrange||(He[Ze._name+\".autorange\"]=!0);else if(me===\"reset\"){for((A||_.isSubplotConstrained)&&(Ae=Ae.concat(_.xaxes)),q&&!_.isSubplotConstrained&&(Ae=Ae.concat(_.yaxes)),_.isSubplotConstrained&&(A?q||(Ae=Ae.concat(m)):Ae=Ae.concat(y)),Be=0;Be<Ae.length;Be++)if(Ze=Ae[Be],!Ze.fixedrange){var lr=Ze._name,Ee=Ze._autorangeInitial;Ze._rangeInitial0===void 0&&Ze._rangeInitial1===void 0?He[lr+\".autorange\"]=!0:Ze._rangeInitial0===void 0?(He[lr+\".autorange\"]=Ee,He[lr+\".range\"]=[null,Ze._rangeInitial1]):Ze._rangeInitial1===void 0?(He[lr+\".range\"]=[Ze._rangeInitial0,null],He[lr+\".autorange\"]=Ee):He[lr+\".range\"]=[Ze._rangeInitial0,Ze._rangeInitial1]}}e.emit(\"plotly_doubleclick\",null),by.call(\"_guiRelayout\",e,He)}}function re(){xe([0,0,w,x]),ji.syncOrAsync([X6e.previousPromises,function(){e._fullLayout._replotting=!1,by.call(\"_guiRelayout\",e,O)}],e)}function xe(me){var Ae=e._fullLayout,He=Ae._plots,Ze=Ae._subplots.cartesian,Be,je,tr,ir;if(N&&by.subplotsRegistry.splom.drag(e),R){for(Be=0;Be<Ze.length;Be++)if(je=He[Ze[Be]],tr=je.xaxis,ir=je.yaxis,je._scene){tr.limitRange&&tr.limitRange(),ir.limitRange&&ir.limitRange();var lr=ji.simpleMap(tr.range,tr.r2l),Ee=ji.simpleMap(ir.range,ir.r2l);je._scene.update({range:[lr[0],Ee[0],lr[1],Ee[1]]})}}if((N||R)&&(j6e(e),W6e(e)),I){var Je=me[2]/c._length,Ie=me[3]/v._length;for(Be=0;Be<Ze.length;Be++){je=He[Ze[Be]],tr=je.xaxis,ir=je.yaxis;var pr=(E||k.isSubplotConstrained)&&!tr.fixedrange&&d[tr._id],mr=(P||k.isSubplotConstrained)&&!ir.fixedrange&&p[ir._id],sr,yr,ne,ge;if(pr?(sr=Je,ne=l||k.isSubplotConstrained?me[0]:Pe(tr,sr)):k.xaHash[tr._id]?(sr=Je,ne=me[0]*tr._length/c._length):k.yaHash[tr._id]?(sr=Ie,ne=q===\"ns\"?-me[1]*tr._length/v._length:Pe(tr,sr,{n:\"top\",s:\"bottom\"}[q])):(sr=Ge(tr,Je,Ie),ne=cr(tr,sr)),sr>1&&(tr.maxallowed!==void 0&&E===(tr.range[0]<tr.range[1]?\"e\":\"w\")||tr.minallowed!==void 0&&E===(tr.range[0]<tr.range[1]?\"w\":\"e\"))&&(sr=1,ne=0),mr?(yr=Ie,ge=o||k.isSubplotConstrained?me[1]:Pe(ir,yr)):k.yaHash[ir._id]?(yr=Ie,ge=me[1]*ir._length/v._length):k.xaHash[ir._id]?(yr=Je,ge=A===\"ew\"?-me[0]*ir._length/c._length:Pe(ir,yr,{e:\"right\",w:\"left\"}[A])):(yr=Ge(ir,Je,Ie),ge=cr(ir,yr)),yr>1&&(ir.maxallowed!==void 0&&P===(ir.range[0]<ir.range[1]?\"n\":\"s\")||ir.minallowed!==void 0&&P===(ir.range[0]<ir.range[1]?\"s\":\"n\"))&&(yr=1,ge=0),!(!sr&&!yr)){sr||(sr=1),yr||(yr=1);var ze=tr._offset-ne/sr,Oe=ir._offset-ge/yr;je.clipRect.call(Hs.setTranslate,ne,ge).call(Hs.setScale,sr,yr),je.plot.call(Hs.setTranslate,ze,Oe).call(Hs.setScale,1/sr,1/yr),(sr!==je.xScaleFactor||yr!==je.yScaleFactor)&&(Hs.setPointGroupScale(je.zoomScalePts,sr,yr),Hs.setTextPointsScale(je.zoomScaleTxt,sr,yr)),Hs.hideOutsideRangePoints(je.clipOnAxisFalseTraces,je),je.xScaleFactor=sr,je.yScaleFactor=yr}}}}function Ge(me,Ae,He){return me.fixedrange?0:E&&_.xaHash[me._id]?Ae:P&&(_.isSubplotConstrained?_.xaHash:_.yaHash)[me._id]?He:0}function cr(me,Ae){return Ae?(me.range=me._r.slice(),z7(me,Ae),Pe(me,Ae)):0}function Pe(me,Ae,He){return me._length*(1-Ae)*V6e[He||me.constraintoward||\"middle\"]}return W}function vH(e,r,t,a){var n=ji.ensureSingle(e.draglayer,r,t,function(i){i.classed(\"drag\",!0).style({fill:\"transparent\",\"stroke-width\":0}).attr(\"data-subplot\",e.id)});return n.call(U6e,a),n.node()}function hH(e,r,t,a,n,i,o){var l=vH(e,\"rect\",r,t);return H7.select(l).call(Hs.setRect,a,n,i,o),l}function oH(e,r){for(var t=0;t<e.length;t++)if(!e[t].fixedrange)return r;return\"\"}function Q6e(e,r){var t=e.range[r],a=Math.abs(t-e.range[1-r]),n;return e.type===\"date\"?t:e.type===\"log\"?(n=Math.ceil(Math.max(0,-Math.log(a)/Math.LN10))+3,tH(\".\"+n+\"g\")(Math.pow(10,t))):(n=Math.floor(Math.log(Math.abs(t))/Math.LN10)-Math.floor(Math.log(a)/Math.LN10)+4,tH(\".\"+String(n)+\"g\")(t))}function B7(e,r,t,a,n){for(var i=0;i<e.length;i++){var o=e[i];if(!o.fixedrange)if(o.rangebreaks){var l=o._id.charAt(0)===\"y\",s=l?1-r:r,u=l?1-t:t;a[o._name+\".range[0]\"]=o.l2r(o.p2l(s*o._length)),a[o._name+\".range[1]\"]=o.l2r(o.p2l(u*o._length))}else{var f=o._rl[0],c=o._rl[1]-f;a[o._name+\".range[0]\"]=o.l2r(f+c*r),a[o._name+\".range[1]\"]=o.l2r(f+c*t)}}if(n&&n.length){var v=(r+(1-t))/2;B7(n,v,1-v,a,[])}}function lH(e,r){for(var t=0;t<e.length;t++){var a=e[t];if(!a.fixedrange){if(a.rangebreaks){var n=0,i=a._length,o=a.p2l(n+r)-a.p2l(n),l=a.p2l(i+r)-a.p2l(i),s=(o+l)/2;a.range=[a.l2r(a._rl[0]-s),a.l2r(a._rl[1]-s)]}else a.range=[a.l2r(a._rl[0]-r/a._m),a.l2r(a._rl[1]-r/a._m)];a.limitRange&&a.limitRange()}}}function e7e(e){return 1-(e>=0?Math.min(e,.9):1/(1/Math.max(e,-.3)+3.222))}function r7e(e,r,t){return e?e===\"nsew\"?t?\"\":r===\"pan\"?\"move\":\"crosshair\":e.toLowerCase()+\"-resize\":\"pointer\"}function dH(e,r,t,a,n){return e.append(\"path\").attr(\"class\",\"zoombox\").style({fill:r>.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"transform\",fH(t,a)).attr(\"d\",n+\"Z\")}function pH(e,r,t){return e.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:N7.background,stroke:N7.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"transform\",fH(r,t)).attr(\"d\",\"M0,0Z\")}function mH(e,r,t,a,n,i){e.attr(\"d\",a+\"M\"+t.l+\",\"+t.t+\"v\"+t.h+\"h\"+t.w+\"v-\"+t.h+\"h-\"+t.w+\"Z\"),yH(e,r,n,i)}function yH(e,r,t,a){t||(e.transition().style(\"fill\",a>.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),r.transition().style(\"opacity\",1).duration(200))}function O7(e){H7.select(e).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}function gH(e){iH&&e.data&&e._context.showTips&&(ji.notifier(ji._(e,\"Double-click to zoom back out\"),\"long\",e),iH=!1)}function t7e(e,r){return\"M\"+(e.l-.5)+\",\"+(r-Bn-.5)+\"h-3v\"+(2*Bn+1)+\"h3ZM\"+(e.r+.5)+\",\"+(r-Bn-.5)+\"h3v\"+(2*Bn+1)+\"h-3Z\"}function a7e(e,r){return\"M\"+(r-Bn-.5)+\",\"+(e.t-.5)+\"v-3h\"+(2*Bn+1)+\"v3ZM\"+(r-Bn-.5)+\",\"+(e.b+.5)+\"v3h\"+(2*Bn+1)+\"v-3Z\"}function _y(e){var r=Math.floor(Math.min(e.b-e.t,e.r-e.l,Bn)/2);return\"M\"+(e.l-3.5)+\",\"+(e.t-.5+r)+\"h3v\"+-r+\"h\"+r+\"v-3h-\"+(r+3)+\"ZM\"+(e.r+3.5)+\",\"+(e.t-.5+r)+\"h-3v\"+-r+\"h\"+-r+\"v-3h\"+(r+3)+\"ZM\"+(e.r+3.5)+\",\"+(e.b+.5-r)+\"h-3v\"+r+\"h\"+-r+\"v3h\"+(r+3)+\"ZM\"+(e.l-3.5)+\",\"+(e.b+.5-r)+\"h3v\"+r+\"h\"+r+\"v3h-\"+(r+3)+\"Z\"}function sH(e,r,t,a,n){for(var i=!1,o={},l={},s,u,f,c,v=(n||{}).xaHash,d=(n||{}).yaHash,p=0;p<r.length;p++){var y=r[p];for(s in t)if(y[s]){for(f in y)!(n&&(v[f]||d[f]))&&!(f.charAt(0)===\"x\"?t:a)[f]&&(o[f]=s);for(u in a)!(n&&(v[u]||d[u]))&&y[u]&&(i=!0)}for(u in a)if(y[u])for(c in y)!(n&&(v[c]||d[c]))&&!(c.charAt(0)===\"x\"?t:a)[c]&&(l[c]=u)}i&&(ji.extendFlat(o,l),l={});var m={},b=[];for(f in o){var T=I7(e,f);b.push(T),m[T._id]=T}var w={},x=[];for(c in l){var _=I7(e,c);x.push(_),w[_._id]=_}return{xaHash:m,yaHash:w,xaxes:b,yaxes:x,xLinks:o,yLinks:l,isSubplotConstrained:i}}function bH(e,r){if(!B6e)e.onwheel!==void 0?e.onwheel=r:e.onmousewheel!==void 0?e.onmousewheel=r:e.isAddedWheelEvent||(e.isAddedWheelEvent=!0,e.addEventListener(\"wheel\",r,{passive:!1}));else{var t=e.onwheel!==void 0?\"wheel\":\"mousewheel\";e._onwheel&&e.removeEventListener(t,e._onwheel),e._onwheel=r,e.addEventListener(t,r,{passive:!1})}}function uH(e){var r=[];for(var t in e)r.push(e[t]);return r}xH.exports={makeDragBox:K6e,makeDragger:vH,makeRectDragger:hH,makeZoombox:dH,makeCorners:pH,updateZoombox:mH,xyCorners:_y,transitionZoombox:yH,removeZoombox:O7,showDoubleClickNotifier:gH,attachWheelEventHandler:bH}});var G7=z(Ty=>{\"use strict\";var n7e=Er(),wy=In(),i7e=Bi(),o7e=Rs(),Do=_H().makeDragBox,Na=qa().DRAGGERSIZE;Ty.initInteractions=function(r){var t=r._fullLayout;if(r._context.staticPlot){n7e.select(r).selectAll(\".drag\").remove();return}if(!(!t._has(\"cartesian\")&&!t._has(\"splom\"))){var a=Object.keys(t._plots||{}).sort(function(i,o){if((t._plots[i].mainplot&&!0)===(t._plots[o].mainplot&&!0)){var l=i.split(\"y\"),s=o.split(\"y\");return l[0]===s[0]?Number(l[1]||1)-Number(s[1]||1):Number(l[0]||1)-Number(s[0]||1)}return t._plots[i].mainplot?1:-1});a.forEach(function(i){var o=t._plots[i],l=o.xaxis,s=o.yaxis;if(!o.mainplot){var u=Do(r,o,l._offset,s._offset,l._length,s._length,\"ns\",\"ew\");u.onmousemove=function(v){r._fullLayout._rehover=function(){r._fullLayout._hoversubplot===i&&r._fullLayout._plots[i]&&wy.hover(r,v,i)},wy.hover(r,v,i),r._fullLayout._lasthover=u,r._fullLayout._hoversubplot=i},u.onmouseout=function(v){r._dragging||(r._fullLayout._hoversubplot=null,i7e.unhover(r,v))},r._context.showAxisDragHandles&&(Do(r,o,l._offset-Na,s._offset-Na,Na,Na,\"n\",\"w\"),Do(r,o,l._offset+l._length,s._offset-Na,Na,Na,\"n\",\"e\"),Do(r,o,l._offset-Na,s._offset+s._length,Na,Na,\"s\",\"w\"),Do(r,o,l._offset+l._length,s._offset+s._length,Na,Na,\"s\",\"e\"))}if(r._context.showAxisDragHandles){if(i===l._mainSubplot){var f=l._mainLinePosition;l.side===\"top\"&&(f-=Na),Do(r,o,l._offset+l._length*.1,f,l._length*.8,Na,\"\",\"ew\"),Do(r,o,l._offset,f,l._length*.1,Na,\"\",\"w\"),Do(r,o,l._offset+l._length*.9,f,l._length*.1,Na,\"\",\"e\")}if(i===s._mainSubplot){var c=s._mainLinePosition;s.side!==\"right\"&&(c-=Na),Do(r,o,c,s._offset+s._length*.1,Na,s._length*.8,\"ns\",\"\"),Do(r,o,c,s._offset+s._length*.9,Na,s._length*.1,\"s\",\"\"),Do(r,o,c,s._offset,Na,s._length*.1,\"n\",\"\")}}});var n=t._hoverlayer.node();n.onmousemove=function(i){i.target=r._fullLayout._lasthover,wy.hover(r,i,t._hoversubplot)},n.onclick=function(i){i.target=r._fullLayout._lasthover,wy.click(r,i)},n.onmousedown=function(i){r._fullLayout._lasthover.onmousedown(i)},Ty.updateFx(r)}};Ty.updateFx=function(e){var r=e._fullLayout,t=r.dragmode===\"pan\"?\"move\":\"crosshair\";o7e(r._draggers,t)}});var AH=z((tje,TH)=>{\"use strict\";var wH=Tr();TH.exports=function(r){for(var t=wH.layoutArrayContainers,a=wH.layoutArrayRegexes,n=r.split(\"[\")[0],i,o,l=0;l<a.length;l++)if(o=r.match(a[l]),o&&o.index===0){i=o[0];break}if(i||(i=t[t.indexOf(n)]),!i)return!1;var s=r.slice(i.length);return s?(o=s.match(/^\\[(0|[1-9][0-9]*)\\](\\.(.+))?$/),o?{array:i,index:Number(o[1]),property:o[3]||\"\"}:!1):{array:i,index:\"\",property:\"\"}}});var kH=z(gd=>{\"use strict\";var l7e=Au(),Y7=up(),yd=ps(),s7e=O_().sorterAsc,V7=Tr();gd.containerArrayMatch=AH();var u7e=gd.isAddVal=function(r){return r===\"add\"||l7e(r)},MH=gd.isRemoveVal=function(r){return r===null||r===\"remove\"};gd.applyContainerArrayChanges=function(r,t,a,n,i){var o=t.astr,l=V7.getComponentMethod(o,\"supplyLayoutDefaults\"),s=V7.getComponentMethod(o,\"draw\"),u=V7.getComponentMethod(o,\"drawOne\"),f=n.replot||n.recalc||l===Y7||s===Y7,c=r.layout,v=r._fullLayout;if(a[\"\"]){Object.keys(a).length>1&&yd.warn(\"Full array edits are incompatible with other edits\",o);var d=a[\"\"][\"\"];if(MH(d))t.set(null);else if(Array.isArray(d))t.set(d);else return yd.warn(\"Unrecognized full array edit value\",o,d),!0;return f?!1:(l(c,v),s(r),!0)}var p=Object.keys(a).map(Number).sort(s7e),y=t.get(),m=y||[],b=i(v,o).get(),T=[],w=-1,x=m.length,_,k,A,q,C,E,P,R;for(_=0;_<p.length;_++){if(A=p[_],q=a[A],C=Object.keys(q),E=q[\"\"],P=u7e(E),A<0||A>m.length-(P?0:1)){yd.warn(\"index out of range\",o,A);continue}if(E!==void 0)C.length>1&&yd.warn(\"Insertion & removal are incompatible with edits to the same index.\",o,A),MH(E)?T.push(A):P?(E===\"add\"&&(E={}),m.splice(A,0,E),b&&b.splice(A,0,{})):yd.warn(\"Unrecognized full object edit value\",o,A,E),w===-1&&(w=A);else for(k=0;k<C.length;k++)R=o+\"[\"+A+\"].\",i(m[A],C[k],R).set(q[C[k]])}for(_=T.length-1;_>=0;_--)m.splice(T[_],1),b&&b.splice(T[_],1);if(m.length?y||t.set(m):t.set(null),f)return!1;if(l(c,v),u!==Y7){var N;if(w===-1)N=p;else{for(x=Math.max(m.length,x),N=[],_=0;_<p.length&&(A=p[_],!(A>=w));_++)N.push(A);for(_=w;_<x;_++)N.push(_)}for(_=0;_<N.length;_++)u(r,N[_])}else s(r);return!0}});var PH=z(Wi=>{\"use strict\";var CH=Ir(),DH=Tr(),Sn=ke(),bd=va(),EH=ba(),xd=EH.cleanId,f7e=EH.getFromTrace,j7=DH.traceIs,c7e=[\"x\",\"y\",\"z\"];Wi.clearPromiseQueue=function(e){Array.isArray(e._promises)&&e._promises.length>0&&Sn.log(\"Clearing previous rejected promises from queue.\"),e._promises=[]};Wi.cleanLayout=function(e){var r,t;e||(e={}),e.xaxis1&&(e.xaxis||(e.xaxis=e.xaxis1),delete e.xaxis1),e.yaxis1&&(e.yaxis||(e.yaxis=e.yaxis1),delete e.yaxis1),e.scene1&&(e.scene||(e.scene=e.scene1),delete e.scene1);var a=(bd.subplotsRegistry.cartesian||{}).attrRegex,n=(bd.subplotsRegistry.polar||{}).attrRegex,i=(bd.subplotsRegistry.ternary||{}).attrRegex,o=(bd.subplotsRegistry.gl3d||{}).attrRegex,l=Object.keys(e);for(r=0;r<l.length;r++){var s=l[r];if(a&&a.test(s)){var u=e[s];u.anchor&&u.anchor!==\"free\"&&(u.anchor=xd(u.anchor)),u.overlaying&&(u.overlaying=xd(u.overlaying)),u.type||(u.isdate?u.type=\"date\":u.islog?u.type=\"log\":u.isdate===!1&&u.islog===!1&&(u.type=\"linear\")),(u.autorange===\"withzero\"||u.autorange===\"tozero\")&&(u.autorange=!0,u.rangemode=\"tozero\"),u.insiderange&&delete u.range,delete u.islog,delete u.isdate,delete u.categories,Ay(u,\"domain\")&&delete u.domain}}var f=Array.isArray(e.annotations)?e.annotations.length:0;for(r=0;r<f;r++){var c=e.annotations[r];Sn.isPlainObject(c)&&(gc(c,\"xref\"),gc(c,\"yref\"))}var v=Array.isArray(e.shapes)?e.shapes.length:0;for(r=0;r<v;r++){var d=e.shapes[r];Sn.isPlainObject(d)&&(gc(d,\"xref\",!0),gc(d,\"yref\",!0))}var p=Array.isArray(e.images)?e.images.length:0;for(r=0;r<p;r++){var y=e.images[r];Sn.isPlainObject(y)&&(gc(y,\"xref\"),gc(y,\"yref\"))}var m=e.legend;return m&&(m.x>3?(m.x=1.02,m.xanchor=\"left\"):m.x<-2&&(m.x=-.02,m.xanchor=\"right\"),m.y>3?(m.y=1.02,m.yanchor=\"bottom\"):m.y<-2&&(m.y=-.02,m.yanchor=\"top\")),e.dragmode===\"rotate\"&&(e.dragmode=\"orbit\"),e.template&&e.template.layout&&Wi.cleanLayout(e.template.layout),e};function gc(e,r,t=!1){var a=e[r],n=r.charAt(0);t&&Array.isArray(a)||a&&a!==\"paper\"&&(e[r]=xd(a,n,!0))}Wi.cleanData=function(e){for(var r=0;r<e.length;r++){var t=e[r],a;if(t.type===\"histogramy\"&&\"xbins\"in t&&!(\"ybins\"in t)&&(t.ybins=t.xbins,delete t.xbins),t.type===\"histogramy\"&&Wi.swapXYData(t),(t.type===\"histogramx\"||t.type===\"histogramy\")&&(t.type=\"histogram\"),\"scl\"in t&&!(\"colorscale\"in t)&&(t.colorscale=t.scl,delete t.scl),\"reversescl\"in t&&!(\"reversescale\"in t)&&(t.reversescale=t.reversescl,delete t.reversescl),t.xaxis&&(t.xaxis=xd(t.xaxis,\"x\")),t.yaxis&&(t.yaxis=xd(t.yaxis,\"y\")),j7(t,\"gl3d\")&&t.scene&&(t.scene=bd.subplotsRegistry.gl3d.cleanId(t.scene)),!j7(t,\"pie-like\")&&!j7(t,\"bar-like\"))if(Array.isArray(t.textposition))for(a=0;a<t.textposition.length;a++)t.textposition[a]=qH(t.textposition[a]);else t.textposition&&(t.textposition=qH(t.textposition));var n=DH.getModule(t);if(n&&n.colorbar){var i=n.colorbar.container,o=i?t[i]:t;o&&o.colorscale&&(o.colorscale===\"YIGnBu\"&&(o.colorscale=\"YlGnBu\"),o.colorscale===\"YIOrRd\"&&(o.colorscale=\"YlOrRd\"))}if(t.type===\"surface\"&&Sn.isPlainObject(t.contours)){var l=[\"x\",\"y\",\"z\"];for(a=0;a<l.length;a++){var s=t.contours[l[a]];Sn.isPlainObject(s)&&(s.highlightColor&&(s.highlightcolor=s.highlightColor,delete s.highlightColor),s.highlightWidth&&(s.highlightwidth=s.highlightWidth,delete s.highlightWidth))}}if(t.type===\"candlestick\"||t.type===\"ohlc\"){var u=(t.increasing||{}).showlegend!==!1,f=(t.decreasing||{}).showlegend!==!1,c=SH(t.increasing),v=SH(t.decreasing);if(c!==!1&&v!==!1){var d=v7e(c,v,u,f);d&&(t.name=d)}else(c||v)&&!t.name&&(t.name=c||v)}Ay(t,\"line\")&&delete t.line,\"marker\"in t&&(Ay(t.marker,\"line\")&&delete t.marker.line,Ay(t,\"marker\")&&delete t.marker),t.autobinx&&(delete t.autobinx,delete t.xbins),t.autobiny&&(delete t.autobiny,delete t.ybins)}};function SH(e){if(!Sn.isPlainObject(e))return!1;var r=e.name;return delete e.name,delete e.showlegend,(typeof r==\"string\"||typeof r==\"number\")&&String(r)}function v7e(e,r,t,a){if(t&&!a)return e;if(a&&!t||!e.trim())return r;if(!r.trim())return e;var n=Math.min(e.length,r.length),i;for(i=0;i<n&&e.charAt(i)===r.charAt(i);i++);var o=e.slice(0,i);return o.trim()}function qH(e){var r=\"middle\",t=\"center\";return typeof e==\"string\"&&(e.indexOf(\"top\")!==-1?r=\"top\":e.indexOf(\"bottom\")!==-1&&(r=\"bottom\"),e.indexOf(\"left\")!==-1?t=\"left\":e.indexOf(\"right\")!==-1&&(t=\"right\")),r+\" \"+t}function Ay(e,r){return r in e&&typeof e[r]==\"object\"&&Object.keys(e[r]).length===0}Wi.swapXYData=function(e){var r;if(Sn.swapAttrs(e,[\"?\",\"?0\",\"d?\",\"?bins\",\"nbins?\",\"autobin?\",\"error_?\"]),Array.isArray(e.z)&&Array.isArray(e.z[0])&&(e.transpose?delete e.transpose:e.transpose=!0),e.error_x&&e.error_y){var t=e.error_y,a=\"copy_ystyle\"in t?t.copy_ystyle:!(t.color||t.thickness||t.width);Sn.swapAttrs(e,[\"error_?.copy_ystyle\"]),a&&Sn.swapAttrs(e,[\"error_?.color\",\"error_?.thickness\",\"error_?.width\"])}if(typeof e.hoverinfo==\"string\"){var n=e.hoverinfo.split(\"+\");for(r=0;r<n.length;r++)n[r]===\"x\"?n[r]=\"y\":n[r]===\"y\"&&(n[r]=\"x\");e.hoverinfo=n.join(\"+\")}};Wi.coerceTraceIndices=function(e,r){if(CH(r))return[r];if(!Array.isArray(r)||!r.length)return e.data.map(function(n,i){return i});if(Array.isArray(r)){for(var t=[],a=0;a<r.length;a++)Sn.isIndex(r[a],e.data.length)?t.push(r[a]):Sn.warn(\"trace index (\",r[a],\") is not a number or is out of bounds\");return t}return r};Wi.manageArrayContainers=function(e,r,t){var a=e.obj,n=e.parts,i=n.length,o=n[i-1],l=CH(o);if(l&&r===null){var s=n.slice(0,i-1).join(\".\"),u=Sn.nestedProperty(a,s).get();u.splice(o,1)}else l&&e.get()===void 0&&e.get()===void 0&&(t[e.astr]=null),e.set(r)};var h7e=/(\\.[^\\[\\]\\.]+|\\[[^\\[\\]\\.]+\\])$/;function LH(e){var r=e.search(h7e);if(r>0)return e.slice(0,r)}Wi.hasParent=function(e,r){for(var t=LH(r);t;){if(t in e)return!0;t=LH(t)}return!1};Wi.clearAxisTypes=function(e,r,t){for(var a=0;a<r.length;a++)for(var n=e._fullData[a],i=0;i<3;i++){var o=f7e(e,n,c7e[i]);if(o&&o.type!==\"log\"){var l=o._name,s=o._id.slice(1);if(s.slice(0,5)===\"scene\"){if(t[s]!==void 0)continue;l=s+\".\"+l}var u=l+\".type\";t[l]===void 0&&t[u]===void 0&&Sn.nestedProperty(e.layout,u).set(null)}}};var W7=(e,r)=>{let t=(...a)=>a.every(n=>Sn.isPlainObject(n))||a.every(n=>Array.isArray(n));if([e,r].every(a=>Array.isArray(a))){if(e.length!==r.length)return!1;for(let a=0;a<e.length;a++){let n=e[a],i=r[a];if(n!==i&&!(t(n,i)?W7(n,i):!1))return!1}return!0}else if([e,r].every(a=>Sn.isPlainObject(a))){if(Object.keys(e).length!==Object.keys(r).length)return!1;for(let a in e){if(a.startsWith(\"_\"))continue;let n=e[a],i=r[a];if(n!==i&&!(t(n,i)?W7(n,i):!1))return!1}return!0}return!1};Wi.collectionsAreEqual=W7});var Q7=z($r=>{\"use strict\";var Sy=Er(),d7e=Ir(),p7e=r4(),nr=ke(),Dt=nr.nestedProperty,$7=Th(),On=mP(),Xi=Tr(),Ry=G0(),Lr=va(),qn=Gr(),m7e=y6(),y7e=Ni(),X7=Zr(),g7e=Sr(),b7e=G7().initInteractions,x7e=Il(),_7e=dl().clearOutline,IH=ds().dfltConfig,My=kH(),ma=PH(),pt=oy(),Us=wo(),w7e=qa().AX_NAME_PATTERN,Z7=0,RH=5;function T7e(e,r,t,a){var n;if(e=nr.getGraphDiv(e),$7.init(e),nr.isPlainObject(r)){var i=r;r=i.data,t=i.layout,a=i.config,n=i.frames}var o=$7.triggerHandler(e,\"plotly_beforeplot\",[r,t,a]);if(o===!1)return Promise.reject();!r&&!t&&!nr.isPlotDiv(e)&&nr.warn(\"Calling _doPlot as if redrawing but this container doesn't yet have a plot.\",e);function l(){if(n)return $r.addFrames(e,n)}OH(e,a),t||(t={}),Sy.select(e).classed(\"js-plotly-plot\",!0),X7.makeTester(),Array.isArray(e._promises)||(e._promises=[]);var s=(e.data||[]).length===0&&Array.isArray(r);Array.isArray(r)&&(ma.cleanData(r),s?e.data=r:e.data.push.apply(e.data,r),e.empty=!1),(!e.layout||s)&&(e.layout=ma.cleanLayout(t)),Lr.supplyDefaults(e);var u=e._fullLayout,f=u._has(\"cartesian\");u._replotting=!0,(s||u._shouldCreateBgLayer)&&(j7e(e),u._shouldCreateBgLayer&&delete u._shouldCreateBgLayer),X7.initGradients(e),X7.initPatterns(e),s&&qn.saveShowSpikeInitial(e);var c=!e.calcdata||e.calcdata.length!==(e._fullData||[]).length;c&&Lr.doCalcdata(e);for(var v=0;v<e.calcdata.length;v++)e.calcdata[v][0].trace=e._fullData[v];e._context.responsive?e._responsiveChartHandler||(e._responsiveChartHandler=function(){nr.isHidden(e)||Lr.resize(e)},window.addEventListener(\"resize\",e._responsiveChartHandler)):nr.clearResponsive(e);var d=nr.extendFlat({},u._size),p=0;function y(){for(var A=u._basePlotModules,q=0;q<A.length;q++)A[q].drawFramework&&A[q].drawFramework(e);!u._glcanvas&&u._has(\"gl\")&&(u._glcanvas=u._glcontainer.selectAll(\".gl-canvas\").data([{key:\"contextLayer\",context:!0,pick:!1},{key:\"focusLayer\",context:!1,pick:!1},{key:\"pickLayer\",context:!1,pick:!0}],function(R){return R.key}),u._glcanvas.enter().append(\"canvas\").attr(\"class\",function(R){return\"gl-canvas gl-canvas-\"+R.key.replace(\"Layer\",\"\")}).style({position:\"absolute\",top:0,left:0,overflow:\"visible\",\"pointer-events\":\"none\"}));var C=e._context.plotGlPixelRatio;if(u._glcanvas){u._glcanvas.attr(\"width\",u.width*C).attr(\"height\",u.height*C).style(\"width\",u.width+\"px\").style(\"height\",u.height+\"px\");var E=u._glcanvas.data()[0].regl;if(E&&(Math.floor(u.width*C)!==E._gl.drawingBufferWidth||Math.floor(u.height*C)!==E._gl.drawingBufferHeight)){var P=\"WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.\";if(p)nr.error(P);else return nr.log(P+\" Clearing graph and plotting again.\"),Lr.cleanPlot([],{},e._fullData,u),Lr.supplyDefaults(e),u=e._fullLayout,Lr.doCalcdata(e),p++,y()}}return u.modebar.orientation===\"h\"?u._modebardiv.style(\"height\",null).style(\"width\",\"100%\"):u._modebardiv.style(\"width\",null).style(\"height\",u.height+\"px\"),Lr.previousPromises(e)}function m(){if(Lr.clearAutoMarginIds(e),pt.drawMarginPushers(e),qn.allowAutoMargin(e),e._fullLayout.title.text&&e._fullLayout.title.automargin&&Lr.allowAutoMargin(e,\"title.automargin\"),u._has(\"pie\"))for(var A=e._fullData,q=0;q<A.length;q++){var C=A[q];C.type===\"pie\"&&C.automargin&&Lr.allowAutoMargin(e,\"pie.\"+C.uid+\".automargin\")}return Lr.doAutoMargin(e),Lr.previousPromises(e)}function b(){if(Lr.didMarginChange(d,u._size))return nr.syncOrAsync([m,pt.layoutStyles],e)}function T(){if(!c){w();return}return nr.syncOrAsync([Xi.getComponentMethod(\"shapes\",\"calcAutorange\"),Xi.getComponentMethod(\"annotations\",\"calcAutorange\"),w],e)}function w(){e._transitioning||(pt.doAutoRangeAndConstraints(e),s&&qn.saveRangeInitial(e),Xi.getComponentMethod(\"rangeslider\",\"calcAutorange\")(e))}function x(){return qn.draw(e,s?\"\":\"redraw\")}var _=[Lr.previousPromises,l,y,m,b];f&&_.push(T),_.push(pt.layoutStyles),f&&_.push(x,function(q){var C=q._fullLayout._insideTickLabelsUpdaterange;if(C)return q._fullLayout._insideTickLabelsUpdaterange=void 0,_d(q,C).then(function(){qn.saveRangeInitial(q,!0)})}),_.push(pt.drawData,pt.finalDraw,b7e,Lr.rehover,Lr.redrag,Lr.reselect,Lr.doAutoMargin,Lr.previousPromises);var k=nr.syncOrAsync(_,e);return(!k||!k.then)&&(k=Promise.resolve()),k.then(function(){return wd(e),e})}function wd(e){var r=e._fullLayout;r._redrawFromAutoMarginCount?r._redrawFromAutoMarginCount--:e.emit(\"plotly_afterplot\")}function A7e(e){return nr.extendFlat(IH,e)}function BH(e,r){try{e._fullLayout._paper.style(\"background\",r)}catch(t){nr.error(t)}}function M7e(e,r){var t=g7e.combine(r,\"white\");BH(e,t)}function OH(e,r){if(!e._context){e._context=nr.extendDeep({},IH);var t=Sy.select(\"base\");e._context._baseUrl=t.size()&&t.attr(\"href\")?window.location.href.split(\"#\")[0]:\"\"}var a=e._context,n,i,o;if(r){for(i=Object.keys(r),n=0;n<i.length;n++)o=i[n],!(o===\"editable\"||o===\"edits\")&&o in a&&(o===\"setBackground\"&&r[o]===\"opaque\"?a[o]=M7e:a[o]=r[o]);var l=r.editable;if(l!==void 0)for(a.editable=l,i=Object.keys(a.edits),n=0;n<i.length;n++)a.edits[i[n]]=l;if(r.edits)for(i=Object.keys(r.edits),n=0;n<i.length;n++)o=i[n],o in a.edits&&(a.edits[o]=r.edits[o]);a._exportedPlot=r._exportedPlot}a.staticPlot&&(a.editable=!1,a.edits={},a.autosizable=!1,a.scrollZoom=!1,a.doubleClick=!1,a.showTips=!1,a.displayModeBar=!1),a.displayModeBar===\"hover\"&&!p7e&&(a.displayModeBar=!0),(a.setBackground===\"transparent\"||typeof a.setBackground!=\"function\")&&(a.setBackground=BH),a._hasZeroHeight=a._hasZeroHeight||e.clientHeight===0,a._hasZeroWidth=a._hasZeroWidth||e.clientWidth===0;var s=a.scrollZoom,u=a._scrollZoom={};if(s===!0)u.cartesian=1,u.gl3d=1,u.geo=1,u.map=1;else if(typeof s==\"string\"){var f=s.split(\"+\");for(n=0;n<f.length;n++)u[f[n]]=1}else s!==!1&&(u.gl3d=1,u.geo=1,u.map=1)}function k7e(e){if(e=nr.getGraphDiv(e),!nr.isPlotDiv(e))throw new Error(\"This element is not a Plotly plot: \"+e);return ma.cleanData(e.data),ma.cleanLayout(e.layout),e.calcdata=void 0,$r._doPlot(e).then(function(){return e.emit(\"plotly_redraw\"),e})}function S7e(e,r,t,a){return e=nr.getGraphDiv(e),Lr.cleanPlot([],{},e._fullData||[],e._fullLayout||{}),Lr.purge(e),$r._doPlot(e,r,t,a)}function qy(e,r){var t=r+1,a=[],n,i;for(n=0;n<e.length;n++)i=e[n],i<0?a.push(t+i):a.push(i);return a}function Ly(e,r,t){var a,n;for(a=0;a<r.length;a++){if(n=r[a],n!==parseInt(n,10))throw new Error(\"all values in \"+t+\" must be integers\");if(n>=e.data.length||n<-e.data.length)throw new Error(t+\" must be valid indices for gd.data.\");if(r.indexOf(n,a+1)>-1||n>=0&&r.indexOf(-e.data.length+n)>-1||n<0&&r.indexOf(e.data.length+n)>-1)throw new Error(\"each index in \"+t+\" must be unique.\")}}function HH(e,r,t){if(!Array.isArray(e.data))throw new Error(\"gd.data must be an array.\");if(typeof r==\"undefined\")throw new Error(\"currentIndices is a required argument.\");if(Array.isArray(r)||(r=[r]),Ly(e,r,\"currentIndices\"),typeof t!=\"undefined\"&&!Array.isArray(t)&&(t=[t]),typeof t!=\"undefined\"&&Ly(e,t,\"newIndices\"),typeof t!=\"undefined\"&&r.length!==t.length)throw new Error(\"current and new indices must be of equal length.\")}function q7e(e,r,t){var a,n;if(!Array.isArray(e.data))throw new Error(\"gd.data must be an array.\");if(typeof r==\"undefined\")throw new Error(\"traces must be defined.\");for(Array.isArray(r)||(r=[r]),a=0;a<r.length;a++)if(n=r[a],typeof n!=\"object\"||Array.isArray(n)||n===null)throw new Error(\"all values in traces array must be non-array objects\");if(typeof t!=\"undefined\"&&!Array.isArray(t)&&(t=[t]),typeof t!=\"undefined\"&&t.length!==r.length)throw new Error(\"if indices is specified, traces.length must equal indices.length\")}function L7e(e,r,t,a){var n=nr.isPlainObject(a);if(!Array.isArray(e.data))throw new Error(\"gd.data must be an array\");if(!nr.isPlainObject(r))throw new Error(\"update must be a key:value object\");if(typeof t==\"undefined\")throw new Error(\"indices must be an integer or array of integers\");Ly(e,t,\"indices\");for(var i in r){if(!Array.isArray(r[i])||r[i].length!==t.length)throw new Error(\"attribute \"+i+\" must be an array of length equal to indices array length\");if(n&&(!(i in a)||!Array.isArray(a[i])||a[i].length!==r[i].length))throw new Error(\"when maxPoints is set as a key:value object it must contain a 1:1 correspondence with the keys and number of traces in the update object\")}}function C7e(e,r,t,a){var n=nr.isPlainObject(a),i=[],o,l,s,u,f;Array.isArray(t)||(t=[t]),t=qy(t,e.data.length-1);for(var c in r)for(var v=0;v<t.length;v++){if(o=e.data[t[v]],s=Dt(o,c),l=s.get(),u=r[c][v],!nr.isArrayOrTypedArray(u))throw new Error(\"attribute: \"+c+\" index: \"+v+\" must be an array\");if(!nr.isArrayOrTypedArray(l))throw new Error(\"cannot extend missing or non-array attribute: \"+c);if(l.constructor!==u.constructor)throw new Error(\"cannot extend array with an array of a different type: \"+c);f=n?a[c][v]:a,d7e(f)||(f=-1),i.push({prop:s,target:l,insert:u,maxp:Math.floor(f)})}return i}function UH(e,r,t,a,n){L7e(e,r,t,a);for(var i=C7e(e,r,t,a),o={},l={},s=0;s<i.length;s++){var u=i[s].prop,f=i[s].maxp,c=n(i[s].target,i[s].insert,f);u.set(c[0]),Array.isArray(o[u.astr])||(o[u.astr]=[]),o[u.astr].push(c[1]),Array.isArray(l[u.astr])||(l[u.astr]=[]),l[u.astr].push(i[s].target.length)}return{update:o,maxPoints:l}}function GH(e,r){var t=new e.constructor(e.length+r.length);return t.set(e),t.set(r,e.length),t}function YH(e,r,t,a){e=nr.getGraphDiv(e);function n(s,u,f){var c,v;if(nr.isTypedArray(s))if(f<0){var d=new s.constructor(0),p=GH(s,u);f<0?(c=p,v=d):(c=d,v=p)}else if(c=new s.constructor(f),v=new s.constructor(s.length+u.length-f),f===u.length)c.set(u),v.set(s);else if(f<u.length){var y=u.length-f;c.set(u.subarray(y)),v.set(s),v.set(u.subarray(0,y),s.length)}else{var m=f-u.length,b=s.length-m;c.set(s.subarray(b)),c.set(u,m),v.set(s.subarray(0,b))}else c=s.concat(u),v=f>=0&&f<c.length?c.splice(0,c.length-f):[];return[c,v]}var i=UH(e,r,t,a,n),o=$r.redraw(e),l=[e,i.update,t,i.maxPoints];return On.add(e,$r.prependTraces,l,YH,arguments),o}function VH(e,r,t,a){e=nr.getGraphDiv(e);function n(s,u,f){var c,v;if(nr.isTypedArray(s))if(f<=0){var d=new s.constructor(0),p=GH(u,s);f<0?(c=p,v=d):(c=d,v=p)}else if(c=new s.constructor(f),v=new s.constructor(s.length+u.length-f),f===u.length)c.set(u),v.set(s);else if(f<u.length){var y=u.length-f;c.set(u.subarray(0,y)),v.set(u.subarray(y)),v.set(s,y)}else{var m=f-u.length;c.set(u),c.set(s.subarray(0,m),u.length),v.set(s.subarray(m))}else c=u.concat(s),v=f>=0&&f<c.length?c.splice(f,c.length):[];return[c,v]}var i=UH(e,r,t,a,n),o=$r.redraw(e),l=[e,i.update,t,i.maxPoints];return On.add(e,$r.extendTraces,l,VH,arguments),o}function jH(e,r,t){e=nr.getGraphDiv(e);var a=[],n=$r.deleteTraces,i=jH,o=[e,a],l=[e,r],s,u;for(q7e(e,r,t),Array.isArray(r)||(r=[r]),r=r.map(function(f){return nr.extendFlat({},f)}),ma.cleanData(r),s=0;s<r.length;s++)e.data.push(r[s]);for(s=0;s<r.length;s++)a.push(-r.length+s);if(typeof t==\"undefined\")return u=$r.redraw(e),On.add(e,n,o,i,l),u;Array.isArray(t)||(t=[t]);try{HH(e,a,t)}catch(f){throw e.data.splice(e.data.length-r.length,r.length),f}return On.startSequence(e),On.add(e,n,o,i,l),u=$r.moveTraces(e,a,t),On.stopSequence(e),u}function WH(e,r){e=nr.getGraphDiv(e);var t=[],a=$r.addTraces,n=WH,i=[e,t,r],o=[e,r],l,s;if(typeof r==\"undefined\")throw new Error(\"indices must be an integer or array of integers.\");for(Array.isArray(r)||(r=[r]),Ly(e,r,\"indices\"),r=qy(r,e.data.length-1),r.sort(nr.sorterDes),l=0;l<r.length;l+=1)s=e.data.splice(r[l],1)[0],t.push(s);var u=$r.redraw(e);return On.add(e,a,i,n,o),u}function J7(e,r,t){e=nr.getGraphDiv(e);var a=[],n=[],i=J7,o=J7,l=[e,t,r],s=[e,r,t],u;if(HH(e,r,t),r=Array.isArray(r)?r:[r],typeof t==\"undefined\")for(t=[],u=0;u<r.length;u++)t.push(-r.length+u);for(t=Array.isArray(t)?t:[t],r=qy(r,e.data.length-1),t=qy(t,e.data.length-1),u=0;u<e.data.length;u++)r.indexOf(u)===-1&&a.push(e.data[u]);for(u=0;u<r.length;u++)n.push({newIndex:t[u],trace:e.data[r[u]]});for(n.sort(function(c,v){return c.newIndex-v.newIndex}),u=0;u<n.length;u+=1)a.splice(n[u].newIndex,0,n[u].trace);e.data=a;var f=$r.redraw(e);return On.add(e,i,l,o,s),f}function Cy(e,r,t,a){e=nr.getGraphDiv(e),ma.clearPromiseQueue(e);var n={};if(typeof r==\"string\")n[r]=t;else if(nr.isPlainObject(r))n=nr.extendFlat({},r),a===void 0&&(a=t);else return nr.warn(\"Restyle fail.\",r,t,a),Promise.reject();Object.keys(n).length&&(e.changed=!0);var i=ma.coerceTraceIndices(e,a),o=XH(e,n,i),l=o.flags;l.calc&&(e.calcdata=void 0),l.clearAxisTypes&&ma.clearAxisTypes(e,i,{});var s=[];l.fullReplot?s.push($r._doPlot):(s.push(Lr.previousPromises),Lr.supplyDefaults(e),l.markerSize&&(Lr.doCalcdata(e),Fy(s)),l.style&&s.push(pt.doTraceStyle),l.colorbars&&s.push(pt.doColorBars),s.push(wd)),s.push(Lr.rehover,Lr.redrag,Lr.reselect),On.add(e,Cy,[e,o.undoit,o.traces],Cy,[e,o.redoit,o.traces]);var u=nr.syncOrAsync(s,e);return(!u||!u.then)&&(u=Promise.resolve()),u.then(function(){return e.emit(\"plotly_restyle\",o.eventData),e})}function Yl(e){return e===void 0?null:e}function ky(e,r){return r?function(t,a,n){var i=Dt(t,a),o=i.set;return i.set=function(l){var s=(n||\"\")+a;Dy(s,i.get(),l,e),o(l)},i}:Dt}function Dy(e,r,t,a){if(Array.isArray(r)||Array.isArray(t))for(var n=Array.isArray(r)?r:[],i=Array.isArray(t)?t:[],o=Math.max(n.length,i.length),l=0;l<o;l++)Dy(e+\"[\"+l+\"]\",n[l],i[l],a);else if(nr.isPlainObject(r)||nr.isPlainObject(t)){var s=nr.isPlainObject(r)?r:{},u=nr.isPlainObject(t)?t:{},f=nr.extendFlat({},s,u);for(var c in f)Dy(e+\".\"+c,s[c],u[c],a)}else a[e]===void 0&&(a[e]=Yl(r))}function D7e(e,r,t){for(var a in t){var n=Dt(e,a);Dy(a,n.get(),t[a],r)}}function XH(e,r,t){var a=e._fullLayout,n=e._fullData,i=e.data,o=a._guiEditing,l=ky(a._preGUI,o),s=nr.extendDeepAll({},r),u,f=Us.traceFlags(),c={},v={},d;function p(){return t.map(function(){})}function y(oe){var be=qn.id2name(oe);d.indexOf(be)===-1&&d.push(be)}function m(oe){return\"LAYOUT\"+oe+\".autorange\"}function b(oe){return\"LAYOUT\"+oe+\".range\"}function T(oe,be,Re){if(Array.isArray(oe)){oe.forEach(function(Le){T(Le,be,Re)});return}if(!(oe in r||ma.hasParent(r,oe))){var ye;if(oe.slice(0,6)===\"LAYOUT\")ye=l(e.layout,oe.replace(\"LAYOUT\",\"\"));else{var Ce=t[Re],Me=a._tracePreGUI[n[Ce].uid];ye=ky(Me,o)(i[Ce],oe)}oe in v||(v[oe]=p()),v[oe][Re]===void 0&&(v[oe][Re]=Yl(ye.get())),be!==void 0&&ye.set(be)}}function w(oe){return function(be){return n[be][oe]}}function x(oe){return function(be,Re){return be===!1?n[t[Re]][oe]:null}}for(var _ in r){if(ma.hasParent(r,_))throw new Error(\"cannot set \"+_+\" and a parent attribute simultaneously\");var k=r[_],A,q,C,E,P,R;if((_===\"autobinx\"||_===\"autobiny\")&&(_=_.charAt(_.length-1)+\"bins\",Array.isArray(k)?k=k.map(x(_)):k===!1?k=t.map(w(_)):k=null),c[_]=k,_.slice(0,6)===\"LAYOUT\"){C=l(e.layout,_.replace(\"LAYOUT\",\"\")),v[_]=[Yl(C.get())],C.set(Array.isArray(k)?k[0]:k),f.calc=!0;continue}for(v[_]=p(),u=0;u<t.length;u++){A=i[t[u]],q=n[t[u]];var N=a._tracePreGUI[q.uid];if(C=ky(N,o)(A,_),E=C.get(),P=Array.isArray(k)?k[u%k.length]:k,P!==void 0){var I=C.parts[C.parts.length-1],O=_.slice(0,_.length-I.length-1),U=O?O+\".\":\"\",Y=O?Dt(q,O).get():q;if(R=Ry.getTraceValObject(q,C.parts),R&&R.impliedEdits&&P!==null)for(var G in R.impliedEdits)T(nr.relativeAttr(_,G),R.impliedEdits[G],u);else if((I===\"thicknessmode\"||I===\"lenmode\")&&E!==P&&(P===\"fraction\"||P===\"pixels\")&&Y){var V=a._size,W=Y.orient,j=W===\"top\"||W===\"bottom\";if(I===\"thicknessmode\"){var J=j?V.h:V.w;T(U+\"thickness\",Y.thickness*(P===\"fraction\"?1/J:J),u)}else{var te=j?V.w:V.h;T(U+\"len\",Y.len*(P===\"fraction\"?1/te:te),u)}}else if(_===\"type\"&&(P===\"pie\"!=(E===\"pie\")||P===\"funnelarea\"!=(E===\"funnelarea\"))){var ae=\"x\",se=\"y\";(P===\"bar\"||E===\"bar\")&&A.orientation===\"h\"&&(ae=\"y\",se=\"x\"),nr.swapAttrs(A,[\"?\"],\"labels\",ae),nr.swapAttrs(A,[\"d?\",\"?0\"],\"label\",ae),nr.swapAttrs(A,[\"?\"],\"values\",se),E===\"pie\"||E===\"funnelarea\"?(Dt(A,\"marker.color\").set(Dt(A,\"marker.colors\").get()),a._pielayer.selectAll(\"g.trace\").remove()):Xi.traceIs(A,\"cartesian\")&&Dt(A,\"marker.colors\").set(Dt(A,\"marker.color\").get())}v[_][u]=Yl(E);var $=[\"swapxy\",\"swapxyaxes\",\"orientation\",\"orientationaxes\"];if($.indexOf(_)!==-1){if(_===\"orientation\"){C.set(P);var fe=A.x&&!A.y?\"h\":\"v\";if((C.get()||fe)===q.orientation)continue}else _===\"orientationaxes\"&&(A.orientation={v:\"h\",h:\"v\"}[q.orientation]);ma.swapXYData(A),f.calc=f.clearAxisTypes=!0}else Lr.dataArrayContainers.indexOf(C.parts[0])!==-1?(ma.manageArrayContainers(C,P,v),f.calc=!0):(R?R.arrayOk&&!Xi.traceIs(q,\"regl\")&&(nr.isArrayOrTypedArray(P)||nr.isArrayOrTypedArray(E))?f.calc=!0:Us.update(f,R):f.calc=!0,C.set(P))}}if([\"swapxyaxes\",\"orientationaxes\"].indexOf(_)!==-1&&qn.swap(e,t),_===\"orientationaxes\"){var ie=Dt(e.layout,\"hovermode\"),ue=ie.get();ue===\"x\"?ie.set(\"y\"):ue===\"y\"?ie.set(\"x\"):ue===\"x unified\"?ie.set(\"y unified\"):ue===\"y unified\"&&ie.set(\"x unified\")}if([\"orientation\",\"type\"].indexOf(_)!==-1){for(d=[],u=0;u<t.length;u++){var ce=i[t[u]];Xi.traceIs(ce,\"cartesian\")&&(y(ce.xaxis||\"x\"),y(ce.yaxis||\"y\"))}T(d.map(m),!0,0),T(d.map(b),[0,1],0)}}return(f.calc||f.plot)&&(f.fullReplot=!0),{flags:f,undoit:v,redoit:c,traces:t,eventData:nr.extendDeepNoArrays([],[s,t])}}function _d(e,r,t){e=nr.getGraphDiv(e),ma.clearPromiseQueue(e);var a={};if(typeof r==\"string\")a[r]=t;else if(nr.isPlainObject(r))a=nr.extendFlat({},r);else return nr.warn(\"Relayout fail.\",r,t),Promise.reject();Object.keys(a).length&&(e.changed=!0);var n=KH(e,a),i=n.flags;i.calc&&(e.calcdata=void 0);var o=[Lr.previousPromises];i.layoutReplot?o.push(pt.layoutReplot):Object.keys(a).length&&(ZH(e,i,n)||Lr.supplyDefaults(e),i.legend&&o.push(pt.doLegend),i.layoutstyle&&o.push(pt.layoutStyles),i.axrange&&Fy(o,n.rangesAltered),i.ticks&&o.push(pt.doTicksRelayout),i.modebar&&o.push(pt.doModeBar),i.camera&&o.push(pt.doCamera),i.colorbars&&o.push(pt.doColorBars),o.push(wd)),o.push(Lr.rehover,Lr.redrag,Lr.reselect),On.add(e,_d,[e,n.undoit],_d,[e,n.redoit]);var l=nr.syncOrAsync(o,e);return(!l||!l.then)&&(l=Promise.resolve(e)),l.then(function(){return e.emit(\"plotly_relayout\",n.eventData),e})}function ZH(e,r,t){var a=e._fullLayout;if(!r.axrange)return!1;for(var n in r)if(n!==\"axrange\"&&r[n])return!1;var i,o,l=function(d,p){return nr.coerce(i,o,y7e,d,p)},s={};for(var u in t.rangesAltered){var f=qn.id2name(u);if(i=e.layout[f],o=a[f],m7e(i,o,l,s),o._matchGroup){for(var c in o._matchGroup)if(c!==u){var v=a[qn.id2name(c)];v.autorange=o.autorange,v.range=o.range.slice(),v._input.range=o.range.slice()}}}return!0}function Fy(e,r){var t=r?function(a){var n=[],i=!0;for(var o in r){var l=qn.getFromId(a,o);if(n.push(o),(l.ticklabelposition||\"\").indexOf(\"inside\")!==-1&&l._anchorAxis&&n.push(l._anchorAxis._id),l._matchGroup)for(var s in l._matchGroup)r[s]||n.push(s)}return qn.draw(a,n,{skipTitle:i})}:function(a){return qn.draw(a,\"redraw\")};e.push(_7e,pt.doAutoRangeAndConstraints,t,pt.drawData,pt.finalDraw)}var $H=/^[xyz]axis[0-9]*\\.range(\\[[0|1]\\])?$/,JH=/^[xyz]axis[0-9]*\\.autorange$/,E7e=/^[xyz]axis[0-9]*\\.domain(\\[[0|1]\\])?$/;function KH(e,r){var t=e.layout,a=e._fullLayout,n=a._guiEditing,i=ky(a._preGUI,n),o=Object.keys(r),l=qn.list(e),s=nr.extendDeepAll({},r),u={},f,c,v;for(o=Object.keys(r),c=0;c<o.length;c++)if(o[c].indexOf(\"allaxes\")===0){for(v=0;v<l.length;v++){var d=l[v]._id.slice(1),p=d.indexOf(\"scene\")!==-1?d+\".\":\"\",y=o[c].replace(\"allaxes\",p+l[v]._name);r[y]||(r[y]=r[o[c]])}delete r[o[c]]}var m=Us.layoutFlags(),b={},T={};function w(Le,De){if(Array.isArray(Le)){Le.forEach(function(qe){w(qe,De)});return}if(!(Le in r||ma.hasParent(r,Le))){var Ne=i(t,Le);Le in T||(T[Le]=Yl(Ne.get())),De!==void 0&&Ne.set(De)}}var x={},_;function k(Le){var De=qn.name2id(Le.split(\".\")[0]);return x[De]=1,De}for(var A in r){if(ma.hasParent(r,A))throw new Error(\"cannot set \"+A+\" and a parent attribute simultaneously\");for(var q=i(t,A),C=r[A],E=q.parts.length,P=E-1;P>0&&typeof q.parts[P]!=\"string\";)P--;var R=q.parts[P],N=q.parts[P-1]+\".\"+R,I=q.parts.slice(0,P).join(\".\"),O=Dt(e.layout,I).get(),U=Dt(a,I).get(),Y=q.get();if(C!==void 0){b[A]=C,T[A]=R===\"reverse\"?C:Yl(Y);var G=Ry.getLayoutValObject(a,q.parts);if(G&&G.impliedEdits&&C!==null)for(var V in G.impliedEdits)w(nr.relativeAttr(A,V),G.impliedEdits[V]);if([\"width\",\"height\"].indexOf(A)!==-1)if(C){w(\"autosize\",null);var W=A===\"height\"?\"width\":\"height\";w(W,a[W])}else a[A]=e._initialAutoSize[A];else if(A===\"autosize\")w(\"width\",C?null:a.width),w(\"height\",C?null:a.height);else if(N.match($H))k(N),Dt(a,I+\"._inputRange\").set(null);else if(N.match(JH)){k(N),Dt(a,I+\"._inputRange\").set(null);var j=Dt(a,I).get();j._inputDomain&&(j._input.domain=j._inputDomain.slice())}else N.match(E7e)&&Dt(a,I+\"._inputDomain\").set(null);if(R===\"type\"){_=O;var J=U.type===\"linear\"&&C===\"log\",te=U.type===\"log\"&&C===\"linear\";if(J||te){if(!_||!_.range)w(I+\".autorange\",!0);else if(U.autorange)J&&(_.range=_.range[1]>_.range[0]?[1,2]:[2,1]);else{var ae=_.range[0],se=_.range[1];J?(ae<=0&&se<=0&&w(I+\".autorange\",!0),ae<=0?ae=se/1e6:se<=0&&(se=ae/1e6),w(I+\".range[0]\",Math.log(ae)/Math.LN10),w(I+\".range[1]\",Math.log(se)/Math.LN10)):(w(I+\".range[0]\",Math.pow(10,ae)),w(I+\".range[1]\",Math.pow(10,se)))}Array.isArray(a._subplots.polar)&&a._subplots.polar.length&&a[q.parts[0]]&&q.parts[1]===\"radialaxis\"&&delete a[q.parts[0]]._subplot.viewInitial[\"radialaxis.range\"],Xi.getComponentMethod(\"annotations\",\"convertCoords\")(e,U,C,w),Xi.getComponentMethod(\"images\",\"convertCoords\")(e,U,C,w)}else w(I+\".autorange\",!0),w(I+\".range\",null);Dt(a,I+\"._inputRange\").set(null)}else if(R.match(w7e)){var $=Dt(a,A).get(),fe=(C||{}).type;(!fe||fe===\"-\")&&(fe=\"linear\"),Xi.getComponentMethod(\"annotations\",\"convertCoords\")(e,$,fe,w),Xi.getComponentMethod(\"images\",\"convertCoords\")(e,$,fe,w)}var ie=My.containerArrayMatch(A);if(ie){f=ie.array,c=ie.index;var ue=ie.property,ce=G||{editType:\"calc\"};c!==\"\"&&ue===\"\"&&(My.isAddVal(C)?T[A]=null:My.isRemoveVal(C)?T[A]=(Dt(t,f).get()||[])[c]:nr.warn(\"unrecognized full object value\",r)),Us.update(m,ce),u[f]||(u[f]={});var oe=u[f][c];oe||(oe=u[f][c]={}),oe[ue]=C,delete r[A]}else R===\"reverse\"?(O.range?O.range.reverse():(w(I+\".autorange\",!0),O.range=[1,0]),U.autorange?m.calc=!0:m.plot=!0):(A===\"dragmode\"&&(C===!1&&Y!==!1||C!==!1&&Y===!1)||a._has(\"scatter-like\")&&a._has(\"regl\")&&A===\"dragmode\"&&(C===\"lasso\"||C===\"select\")&&!(Y===\"lasso\"||Y===\"select\")?m.plot=!0:G?Us.update(m,G):m.calc=!0,q.set(C))}}for(f in u){var be=My.applyContainerArrayChanges(e,i(t,f),u[f],m,i);be||(m.plot=!0)}for(var Re in x){_=qn.getFromId(e,Re);var ye=_&&_._constraintGroup;if(ye){m.calc=!0;for(var Ce in ye)x[Ce]||(qn.getFromId(e,Ce)._constraintShrinkable=!0)}}(QH(e)||r.height||r.width)&&(m.plot=!0);var Me=a.shapes;for(c=0;c<Me.length;c++)if(Me[c].showlegend){m.calc=!0;break}return(m.plot||m.calc)&&(m.layoutReplot=!0),{flags:m,rangesAltered:x,undoit:T,redoit:b,eventData:s}}function QH(e){var r=e._fullLayout,t=r.width,a=r.height;return e.layout.autosize&&Lr.plotAutoSize(e,e.layout,r),r.width!==t||r.height!==a}function Ey(e,r,t,a){e=nr.getGraphDiv(e),ma.clearPromiseQueue(e),nr.isPlainObject(r)||(r={}),nr.isPlainObject(t)||(t={}),Object.keys(r).length&&(e.changed=!0),Object.keys(t).length&&(e.changed=!0);var n=ma.coerceTraceIndices(e,a),i=XH(e,nr.extendFlat({},r),n),o=i.flags,l=KH(e,nr.extendFlat({},t)),s=l.flags;(o.calc||s.calc)&&(e.calcdata=void 0),o.clearAxisTypes&&ma.clearAxisTypes(e,n,t);var u=[];s.layoutReplot?u.push(pt.layoutReplot):o.fullReplot?u.push($r._doPlot):(u.push(Lr.previousPromises),ZH(e,s,l)||Lr.supplyDefaults(e),o.style&&u.push(pt.doTraceStyle),(o.colorbars||s.colorbars)&&u.push(pt.doColorBars),s.legend&&u.push(pt.doLegend),s.layoutstyle&&u.push(pt.layoutStyles),s.axrange&&Fy(u,l.rangesAltered),s.ticks&&u.push(pt.doTicksRelayout),s.modebar&&u.push(pt.doModeBar),s.camera&&u.push(pt.doCamera),u.push(wd)),u.push(Lr.rehover,Lr.redrag,Lr.reselect),On.add(e,Ey,[e,i.undoit,l.undoit,i.traces],Ey,[e,i.redoit,l.redoit,i.traces]);var f=nr.syncOrAsync(u,e);return(!f||!f.then)&&(f=Promise.resolve(e)),f.then(function(){return e.emit(\"plotly_update\",{data:i.eventData,layout:l.eventData}),e})}function K7(e){return function(t){t._fullLayout._guiEditing=!0;var a=e.apply(null,arguments);return t._fullLayout._guiEditing=!1,a}}var P7e=[{pattern:/^hiddenlabels/,attr:\"legend.uirevision\"},{pattern:/^((x|y)axis\\d*)\\.((auto)?range|title\\.text)/},{pattern:/axis\\d*\\.showspikes$/,attr:\"modebar.uirevision\"},{pattern:/(hover|drag)mode$/,attr:\"modebar.uirevision\"},{pattern:/^(scene\\d*)\\.camera/},{pattern:/^(geo\\d*)\\.(projection|center|fitbounds)/},{pattern:/^(ternary\\d*\\.[abc]axis)\\.(min|title\\.text)$/},{pattern:/^(polar\\d*\\.radialaxis)\\.((auto)?range|angle|title\\.text)/},{pattern:/^(polar\\d*\\.angularaxis)\\.rotation/},{pattern:/^(map\\d*)\\.(center|zoom|bearing|pitch)/},{pattern:/^legend\\.(x|y)$/,attr:\"editrevision\"},{pattern:/^(shapes|annotations)/,attr:\"editrevision\"},{pattern:/^selections/,attr:\"selectionrevision\"},{pattern:/^title\\.text$/,attr:\"editrevision\"}],R7e=[{pattern:/^selectedpoints$/,attr:\"selectionrevision\"},{pattern:/^visible$/,attr:\"legend.uirevision\"},{pattern:/^dimensions\\[\\d+\\]\\.constraintrange/},{pattern:/^node\\.(x|y|groups)/},{pattern:/^level$/},{pattern:/^name$/},{pattern:/colorbar\\.title\\.text$/},{pattern:/colorbar\\.(x|y)$/,attr:\"editrevision\"}];function FH(e,r){for(var t=0;t<r.length;t++){var a=r[t],n=e.match(a.pattern);if(n){var i=n[1]||\"\";return{head:i,tail:e.slice(i.length+1),attr:a.attr}}}}function zH(e,r){var t=Dt(r,e).get();if(t!==void 0)return t;var a=e.split(\".\");for(a.pop();a.length>1;)if(a.pop(),t=Dt(r,a.join(\".\")+\".uirevision\").get(),t!==void 0)return t;return r.uirevision}function F7e(e,r){for(var t=0;t<r.length;t++)if(r[t].uid===e)return t;return-1}function z7e(e,r,t){for(var a=0;a<r.length;a++)if(r[a].uid===e)return a;return!r[t]||r[t].uid?-1:t}function NH(e,r){var t=nr.isPlainObject(e),a=Array.isArray(e);return t||a?(t&&nr.isPlainObject(r)||a&&Array.isArray(r))&&JSON.stringify(e)===JSON.stringify(r):e===r}function N7e(e,r,t,a){var n=a._preGUI,i,o,l,s,u,f,c,v,d,p,y=[],m={},b={};for(i in n){if(u=FH(i,P7e),u){if(d=u.head,p=u.tail,o=u.attr||d+\".uirevision\",l=Dt(a,o).get(),s=l&&zH(o,r),s&&s===l){if(f=n[i],f===null&&(f=void 0),c=Dt(r,i),v=c.get(),NH(v,f)){v===void 0&&p===\"autorange\"&&y.push(d),c.set(Yl(Dt(a,i).get()));continue}else if(p===\"autorange\"||p.slice(0,6)===\"range[\"){var T=n[d+\".range[0]\"],w=n[d+\".range[1]\"],x=n[d+\".autorange\"];if(x||x===null&&T===null&&w===null){if(!(d in m)){var _=Dt(r,d).get();m[d]=_&&(_.autorange||_.autorange!==!1&&(!_.range||_.range.length!==2))}if(m[d]){c.set(Yl(Dt(a,i).get()));continue}}}}}else nr.warn(\"unrecognized GUI edit: \"+i);delete n[i],u&&u.tail.slice(0,6)===\"range[\"&&(b[u.head]=1)}for(var k=0;k<y.length;k++){var A=y[k];if(b[A]){var q=Dt(r,A).get();q&&delete q.autorange}}var C=a._tracePreGUI;for(var E in C){var P=C[E],R=null,N;for(i in P){if(!R){var I=F7e(E,t);if(I<0){delete C[E];break}N=t[I];var O=z7e(E,e,N.index);if(O<0){delete C[E];break}R=e[O]}if(u=FH(i,R7e),u){if(u.attr?(l=Dt(a,u.attr).get(),s=l&&zH(u.attr,r)):(l=N.uirevision,s=R.uirevision,s===void 0&&(s=r.uirevision)),s&&s===l&&(f=P[i],f===null&&(f=void 0),c=Dt(R,i),v=c.get(),NH(v,f))){c.set(Yl(Dt(N,i).get()));continue}}else nr.warn(\"unrecognized GUI edit: \"+i+\" in trace uid \"+E);delete P[i]}}}function I7e(e,r,t,a){var n,i;function o(){return $r.addFrames(e,n)}e=nr.getGraphDiv(e),ma.clearPromiseQueue(e);var l=e._fullData,s=e._fullLayout;if(!nr.isPlotDiv(e)||!l||!s)i=$r.newPlot(e,r,t,a);else{if(nr.isPlainObject(r)){var u=r;r=u.data,t=u.layout,a=u.config,n=u.frames}var f=!1;if(a){let N=nr.extendDeepAll({},e._context);e._context=void 0,OH(e,a),f=!ma.collectionsAreEqual(N,e._context)}if(f){let N=e._ev.eventNames().map(I=>[I,e._ev.listeners(I)]);i=$r.newPlot(e,r,t,a).then(()=>{for(let[I,O]of N)O.forEach(U=>e.on(I,U));return $r.react(e,r,t,a)})}else{e.data=r||[],ma.cleanData(e.data),e.layout=t||{},ma.cleanLayout(e.layout),N7e(e.data,e.layout,l,s),Lr.supplyDefaults(e,{skipUpdateCalc:!0});var c=e._fullData,v=e._fullLayout,d=v.datarevision===void 0,p=v.transition,y=O7e(e,s,v,d,p),m=y.newDataRevision,b=B7e(e,l,c,d,p,m);if(QH(e)&&(y.layoutReplot=!0),b.calc||y.calc){e.calcdata=void 0;for(var T=Object.getOwnPropertyNames(v),w=0;w<T.length;w++){var x=T[w],_=x.substring(0,5);if(_===\"xaxis\"||_===\"yaxis\"){var k=v[x]._emptyCategories;k&&k()}}}else Lr.supplyDefaultsUpdateCalc(e.calcdata,c);var A=[];if(n&&(e._transitionData={},Lr.createTransitionData(e),A.push(o)),v.transition&&(b.anim||y.anim))y.ticks&&A.push(pt.doTicksRelayout),Lr.doCalcdata(e),pt.doAutoRangeAndConstraints(e),A.push(function(){return Lr.transitionFromReact(e,b,y,s)});else if(b.fullReplot||y.layoutReplot)e._fullLayout._skipDefaults=!0,A.push($r._doPlot);else{for(var q in y.arrays){var C=y.arrays[q];if(C.length){var E=Xi.getComponentMethod(q,\"drawOne\");if(E!==nr.noop)for(var P=0;P<C.length;P++)E(e,C[P]);else{var R=Xi.getComponentMethod(q,\"draw\");if(R===nr.noop)throw new Error(\"cannot draw components: \"+q);R(e)}}}A.push(Lr.previousPromises),b.style&&A.push(pt.doTraceStyle),(b.colorbars||y.colorbars)&&A.push(pt.doColorBars),y.legend&&A.push(pt.doLegend),y.layoutstyle&&A.push(pt.layoutStyles),y.axrange&&Fy(A),y.ticks&&A.push(pt.doTicksRelayout),y.modebar&&A.push(pt.doModeBar),y.camera&&A.push(pt.doCamera),A.push(wd)}A.push(Lr.rehover,Lr.redrag,Lr.reselect),i=nr.syncOrAsync(A,e),(!i||!i.then)&&(i=Promise.resolve(e))}}return i.then(()=>(f||e.emit(\"plotly_react\",{config:a,data:r,layout:t}),e))}function B7e(e,r,t,a,n,i){var o=r.length===t.length;if(!n&&!o)return{fullReplot:!0,calc:!0};var l=Us.traceFlags();l.arrays={},l.nChanges=0,l.nChangesAnim=0;var s,u;function f(d){var p=Ry.getTraceValObject(u,d);return!u._module.animatable&&p.anim&&(p.anim=!1),p}var c={getValObject:f,flags:l,immutable:a,transition:n,newDataRevision:i,gd:e},v={};for(s=0;s<r.length;s++)if(t[s]){if(u=t[s],v[u.uid])continue;v[u.uid]=1,Py(r[s],u,[],c)}return(l.calc||l.plot)&&(l.fullReplot=!0),n&&l.nChanges&&l.nChangesAnim&&(l.anim=l.nChanges===l.nChangesAnim&&o?\"all\":\"some\"),l}function O7e(e,r,t,a,n){var i=Us.layoutFlags();i.arrays={},i.rangesAltered={},i.nChanges=0,i.nChangesAnim=0;function o(v){return Ry.getLayoutValObject(t,v)}for(var l in t)if(!(!l.startsWith(\"xaxis\")&&!l.startsWith(\"yaxis\"))&&r[l]){var s=t[l].domain,u=r[l].domain,f=r[l]._inputDomain;r[l]._inputDomain&&(s[0]===f[0]&&s[1]===f[1]?t[l].domain=r[l].domain:(s[0]!==u[0]||s[1]!==u[1])&&(t[l]._inputDomain=null))}var c={getValObject:o,flags:i,immutable:a,transition:n,gd:e};return Py(r,t,[],c),(i.plot||i.calc)&&(i.layoutReplot=!0),n&&i.nChanges&&i.nChangesAnim&&(i.anim=i.nChanges===i.nChangesAnim?\"all\":\"some\"),i}function Py(e,r,t,a){var n,i,o,l=a.getValObject,s=a.flags,u=a.immutable,f=a.inArray,c=a.arrayIndex;function v(){var I=n.editType;if(f&&I.indexOf(\"arraydraw\")!==-1){nr.pushUnique(s.arrays[f],c);return}Us.update(s,n),I!==\"none\"&&s.nChanges++,a.transition&&n.anim&&s.nChangesAnim++,($H.test(o)||JH.test(o))&&(s.rangesAltered[t[0]]=1),i===\"datarevision\"&&(s.newDataRevision=1)}function d(I){return I.valType===\"data_array\"||I.arrayOk}for(i in e){if(s.calc&&!a.transition)return;var p=e[i],y=r[i],m=t.concat(i);if(o=m.join(\".\"),!(i.charAt(0)===\"_\"||typeof p==\"function\"||p===y)){if((i===\"tick0\"||i===\"dtick\")&&t[0]!==\"geo\"){var b=r.tickmode;if(b===\"auto\"||b===\"array\"||!b)continue}if(!(i===\"range\"&&r.autorange)&&!((i===\"zmin\"||i===\"zmax\")&&r.type===\"contourcarpet\")&&(n=l(m),!!n&&!(n._compareAsJSON&&JSON.stringify(p)===JSON.stringify(y)))){var T=n.valType,w,x=d(n),_=Array.isArray(p),k=Array.isArray(y);if(_&&k){var A=\"_input_\"+i,q=e[A],C=r[A];if(Array.isArray(q)&&q===C)continue}if(y===void 0)x&&_?s.calc=!0:v();else if(n._isLinkedToArray){var E=[],P=!1;f||(s.arrays[i]=E);var R=Math.min(p.length,y.length),N=Math.max(p.length,y.length);if(R!==N)if(n.editType===\"arraydraw\")P=!0;else{v();continue}for(w=0;w<R;w++)Py(p[w],y[w],m.concat(w),nr.extendFlat({inArray:i,arrayIndex:w},a));if(P)for(w=R;w<N;w++)E.push(w)}else!T&&nr.isPlainObject(p)?Py(p,y,m,a):x?_&&k?(u&&(s.calc=!0),(u||a.newDataRevision)&&v()):_!==k?s.calc=!0:v():_&&k?(p.length!==y.length||String(p)!==String(y))&&v():v()}}}for(i in r)if(!(i in e||i.charAt(0)===\"_\"||typeof r[i]==\"function\"))if(n=l(t.concat(i)),d(n)&&Array.isArray(r[i])){s.calc=!0;return}else v()}function H7e(e,r,t){if(e=nr.getGraphDiv(e),!nr.isPlotDiv(e))throw new Error(\"This element is not a Plotly plot: \"+e+\". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/\");var a=e._transitionData;a._frameQueue||(a._frameQueue=[]),t=Lr.supplyAnimationDefaults(t);var n=t.transition,i=t.frame;a._frameWaitingCnt===void 0&&(a._frameWaitingCnt=0);function o(u){return Array.isArray(n)?u>=n.length?n[0]:n[u]:n}function l(u){return Array.isArray(i)?u>=i.length?i[0]:i[u]:i}function s(u,f){var c=0;return function(){if(u&&++c===f)return u()}}return new Promise(function(u,f){function c(){if(a._frameQueue.length!==0){for(;a._frameQueue.length;){var R=a._frameQueue.pop();R.onInterrupt&&R.onInterrupt()}e.emit(\"plotly_animationinterrupted\",[])}}function v(R){if(R.length!==0){for(var N=0;N<R.length;N++){var I;R[N].type===\"byname\"?I=Lr.computeFrame(e,R[N].name):I=R[N].data;var O=l(N),U=o(N);U.duration=Math.min(U.duration,O.duration);var Y={frame:I,name:R[N].name,frameOpts:O,transitionOpts:U};N===R.length-1&&(Y.onComplete=s(u,2),Y.onInterrupt=f),a._frameQueue.push(Y)}t.mode===\"immediate\"&&(a._lastFrameAt=-1/0),a._animationRaf||y()}}function d(){e.emit(\"plotly_animated\"),window.cancelAnimationFrame(a._animationRaf),a._animationRaf=null}function p(){a._currentFrame&&a._currentFrame.onComplete&&a._currentFrame.onComplete();var R=a._currentFrame=a._frameQueue.shift();if(R){var N=R.name?R.name.toString():null;e._fullLayout._currentFrame=N,a._lastFrameAt=Date.now(),a._timeToNext=R.frameOpts.duration,Lr.transition(e,R.frame.data,R.frame.layout,ma.coerceTraceIndices(e,R.frame.traces),R.frameOpts,R.transitionOpts).then(function(){R.onComplete&&R.onComplete()}),e.emit(\"plotly_animatingframe\",{name:N,frame:R.frame,animation:{frame:R.frameOpts,transition:R.transitionOpts}})}else d()}function y(){e.emit(\"plotly_animating\"),a._lastFrameAt=-1/0,a._timeToNext=0,a._runningTransitions=0,a._currentFrame=null;var R=function(){a._animationRaf=window.requestAnimationFrame(R),Date.now()-a._lastFrameAt>a._timeToNext&&p()};R()}var m=0;function b(R){return Array.isArray(n)?m>=n.length?R.transitionOpts=n[m]:R.transitionOpts=n[0]:R.transitionOpts=n,m++,R}var T,w,x=[],_=r==null,k=Array.isArray(r),A=!_&&!k&&nr.isPlainObject(r);if(A)x.push({type:\"object\",data:b(nr.extendFlat({},r))});else if(_||[\"string\",\"number\"].indexOf(typeof r)!==-1)for(T=0;T<a._frames.length;T++)w=a._frames[T],w&&(_||String(w.group)===String(r))&&x.push({type:\"byname\",name:String(w.name),data:b({name:w.name})});else if(k)for(T=0;T<r.length;T++){var q=r[T];[\"number\",\"string\"].indexOf(typeof q)!==-1?(q=String(q),x.push({type:\"byname\",name:q,data:b({name:q})})):nr.isPlainObject(q)&&x.push({type:\"object\",data:b(nr.extendFlat({},q))})}for(T=0;T<x.length;T++)if(w=x[T],w.type===\"byname\"&&!a._frameHash[w.data.name]){nr.warn('animate failure: frame not found: \"'+w.data.name+'\"'),f();return}[\"next\",\"immediate\"].indexOf(t.mode)!==-1&&c(),t.direction===\"reverse\"&&x.reverse();var C=e._fullLayout._currentFrame;if(C&&t.fromcurrent){var E=-1;for(T=0;T<x.length;T++)if(w=x[T],w.type===\"byname\"&&w.name===C){E=T;break}if(E>0&&E<x.length-1){var P=[];for(T=0;T<x.length;T++)w=x[T],(x[T].type!==\"byname\"||T>E)&&P.push(w);x=P}}x.length>0?v(x):(e.emit(\"plotly_animated\"),u())})}function U7e(e,r,t){if(e=nr.getGraphDiv(e),r==null)return Promise.resolve();if(!nr.isPlotDiv(e))throw new Error(\"This element is not a Plotly plot: \"+e+\". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/\");var a,n,i,o,l=e._transitionData._frames,s=e._transitionData._frameHash;if(!Array.isArray(r))throw new Error(\"addFrames failure: frameList must be an Array of frame definitions\"+r);var u=l.length+r.length*2,f=[],c={};for(a=r.length-1;a>=0;a--)if(nr.isPlainObject(r[a])){var v=r[a].name,d=(s[v]||c[v]||{}).name,p=r[a].name,y=s[d]||c[d];d&&p&&typeof p==\"number\"&&y&&Z7<RH&&(Z7++,nr.warn('addFrames: overwriting frame \"'+(s[d]||c[d]).name+'\" with a frame whose name of type \"number\" also equates to \"'+d+'\". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),Z7===RH&&nr.warn(\"addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.\")),c[v]={name:v},f.push({frame:Lr.supplyFrameDefaults(r[a]),index:t&&t[a]!==void 0&&t[a]!==null?t[a]:u+a})}f.sort(function(A,q){return A.index>q.index?-1:A.index<q.index?1:0});var m=[],b=[],T=l.length;for(a=f.length-1;a>=0;a--){if(n=f[a].frame,typeof n.name==\"number\"&&nr.warn(\"Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings\"),!n.name)for(;s[n.name=\"frame \"+e._transitionData._counter++];);if(s[n.name]){for(i=0;i<l.length&&(l[i]||{}).name!==n.name;i++);m.push({type:\"replace\",index:i,value:n}),b.unshift({type:\"replace\",index:i,value:l[i]})}else o=Math.max(0,Math.min(f[a].index,T)),m.push({type:\"insert\",index:o,value:n}),b.unshift({type:\"delete\",index:o}),T++}var w=Lr.modifyFrames,x=Lr.modifyFrames,_=[e,b],k=[e,m];return On&&On.add(e,w,_,x,k),Lr.modifyFrames(e,m)}function G7e(e,r){if(e=nr.getGraphDiv(e),!nr.isPlotDiv(e))throw new Error(\"This element is not a Plotly plot: \"+e);var t,a,n=e._transitionData._frames,i=[],o=[];if(!r)for(r=[],t=0;t<n.length;t++)r.push(t);for(r=r.slice(),r.sort(),t=r.length-1;t>=0;t--)a=r[t],i.push({type:\"delete\",index:a}),o.unshift({type:\"insert\",index:a,value:n[a]});var l=Lr.modifyFrames,s=Lr.modifyFrames,u=[e,o],f=[e,i];return On&&On.add(e,l,u,s,f),Lr.modifyFrames(e,i)}function Y7e(e){e=nr.getGraphDiv(e);var r=e._fullLayout||{},t=e._fullData||[];return Lr.cleanPlot([],{},t,r),Lr.purge(e),$7.purge(e),r._container&&r._container.remove(),delete e._context,e}function V7e(e){var r=e._fullLayout,t=e.getBoundingClientRect();if(!nr.equalDomRects(t,r._lastBBox)){var a=r._invTransform=nr.inverseTransformMatrix(nr.getFullTransformMatrix(e));r._invScaleX=Math.sqrt(a[0][0]*a[0][0]+a[0][1]*a[0][1]+a[0][2]*a[0][2]),r._invScaleY=Math.sqrt(a[1][0]*a[1][0]+a[1][1]*a[1][1]+a[1][2]*a[1][2]),r._lastBBox=t}}function j7e(e){var r=Sy.select(e),t=e._fullLayout;if(t._calcInverseTransform=V7e,t._calcInverseTransform(e),t._container=r.selectAll(\".plot-container\").data([0]),t._container.enter().insert(\"div\",\":first-child\").classed(\"plot-container\",!0).classed(\"plotly\",!0).style({width:\"100%\",height:\"100%\"}),t._paperdiv=t._container.selectAll(\".svg-container\").data([0]),t._paperdiv.enter().append(\"div\").classed(\"user-select-none\",!0).classed(\"svg-container\",!0).style(\"position\",\"relative\"),t._glcontainer=t._paperdiv.selectAll(\".gl-container\").data([{}]),t._glcontainer.enter().append(\"div\").classed(\"gl-container\",!0),t._paperdiv.selectAll(\".main-svg\").remove(),t._paperdiv.select(\".modebar-container\").remove(),t._paper=t._paperdiv.insert(\"svg\",\":first-child\").classed(\"main-svg\",!0),t._toppaper=t._paperdiv.append(\"svg\").classed(\"main-svg\",!0),t._modebardiv=t._paperdiv.append(\"div\"),delete t._modeBar,t._hoverpaper=t._paperdiv.append(\"svg\").classed(\"main-svg\",!0),!t._uid){var a={};Sy.selectAll(\"defs\").each(function(){this.id&&(a[this.id.split(\"-\")[1]]=1)}),t._uid=nr.randstr(a)}t._paperdiv.selectAll(\".main-svg\").attr(x7e.svgAttrs),t._defs=t._paper.append(\"defs\").attr(\"id\",\"defs-\"+t._uid),t._clips=t._defs.append(\"g\").classed(\"clips\",!0),t._topdefs=t._toppaper.append(\"defs\").attr(\"id\",\"topdefs-\"+t._uid),t._topclips=t._topdefs.append(\"g\").classed(\"clips\",!0),t._bgLayer=t._paper.append(\"g\").classed(\"bglayer\",!0),t._draggers=t._paper.append(\"g\").classed(\"draglayer\",!0);var n=t._paper.append(\"g\").classed(\"layer-below\",!0);t._imageLowerLayer=n.append(\"g\").classed(\"imagelayer\",!0),t._shapeLowerLayer=n.append(\"g\").classed(\"shapelayer\",!0),t._cartesianlayer=t._paper.append(\"g\").classed(\"cartesianlayer\",!0),t._polarlayer=t._paper.append(\"g\").classed(\"polarlayer\",!0),t._smithlayer=t._paper.append(\"g\").classed(\"smithlayer\",!0),t._ternarylayer=t._paper.append(\"g\").classed(\"ternarylayer\",!0),t._geolayer=t._paper.append(\"g\").classed(\"geolayer\",!0),t._funnelarealayer=t._paper.append(\"g\").classed(\"funnelarealayer\",!0),t._pielayer=t._paper.append(\"g\").classed(\"pielayer\",!0),t._iciclelayer=t._paper.append(\"g\").classed(\"iciclelayer\",!0),t._treemaplayer=t._paper.append(\"g\").classed(\"treemaplayer\",!0),t._sunburstlayer=t._paper.append(\"g\").classed(\"sunburstlayer\",!0),t._indicatorlayer=t._toppaper.append(\"g\").classed(\"indicatorlayer\",!0),t._glimages=t._paper.append(\"g\").classed(\"glimages\",!0);var i=t._toppaper.append(\"g\").classed(\"layer-above\",!0);t._imageUpperLayer=i.append(\"g\").classed(\"imagelayer\",!0),t._shapeUpperLayer=i.append(\"g\").classed(\"shapelayer\",!0),t._selectionLayer=t._toppaper.append(\"g\").classed(\"selectionlayer\",!0),t._infolayer=t._toppaper.append(\"g\").classed(\"infolayer\",!0),t._menulayer=t._toppaper.append(\"g\").classed(\"menulayer\",!0),t._zoomlayer=t._toppaper.append(\"g\").classed(\"zoomlayer\",!0),t._hoverlayer=t._hoverpaper.append(\"g\").classed(\"hoverlayer\",!0),t._modebardiv.classed(\"modebar-container\",!0).style(\"position\",\"absolute\").style(\"top\",\"0px\").style(\"right\",\"0px\"),e.emit(\"plotly_framework\")}$r.animate=H7e;$r.addFrames=U7e;$r.deleteFrames=G7e;$r.addTraces=jH;$r.deleteTraces=WH;$r.extendTraces=YH;$r.moveTraces=J7;$r.prependTraces=VH;$r.newPlot=S7e;$r._doPlot=T7e;$r.purge=Y7e;$r.react=I7e;$r.redraw=k7e;$r.relayout=_d;$r.restyle=Cy;$r.setPlotConfig=A7e;$r.update=Ey;$r._guiRelayout=K7(_d);$r._guiRestyle=K7(Cy);$r._guiUpdate=K7(Ey);$r._storeDirectGUIEdit=D7e});var Vl=z(Zi=>{\"use strict\";var W7e=Tr();Zi.getDelay=function(e){return e._has&&(e._has(\"gl3d\")||e._has(\"map\"))?500:0};Zi.getRedrawFunc=function(e){return function(){W7e.getComponentMethod(\"colorbar\",\"draw\")(e)}};Zi.encodeSVG=function(e){return\"data:image/svg+xml,\"+encodeURIComponent(e)};Zi.encodeJSON=function(e){return\"data:application/json,\"+encodeURIComponent(e)};var eU=window.URL||window.webkitURL;Zi.createObjectURL=function(e){return eU.createObjectURL(e)};Zi.revokeObjectURL=function(e){return eU.revokeObjectURL(e)};Zi.createBlob=function(e,r){if(r===\"svg\")return new window.Blob([e],{type:\"image/svg+xml;charset=utf-8\"});if(r===\"full-json\")return new window.Blob([e],{type:\"application/json;charset=utf-8\"});var t=X7e(window.atob(e));return new window.Blob([t],{type:\"image/\"+r})};Zi.octetStream=function(e){document.location.href=\"data:application/octet-stream\"+e};Zi.getPlotTitle=function(e){var a,n,i,o;var r=e._fullLayout;if(r){var t=(a=r.title)==null?void 0:a.text;return t===((n=r._dfltTitle)==null?void 0:n.plot)?void 0:t}return(o=(i=e.layout)==null?void 0:i.title)==null?void 0:o.text};Zi.getPlotSubtitle=function(e){var a,n,i,o,l,s;var r=e._fullLayout;if(r){var t=(n=(a=r.title)==null?void 0:a.subtitle)==null?void 0:n.text;return t===((i=r._dfltTitle)==null?void 0:i.subtitle)?void 0:t}return(s=(l=(o=e.layout)==null?void 0:o.title)==null?void 0:l.subtitle)==null?void 0:s.text};function X7e(e){for(var r=e.length,t=new ArrayBuffer(r),a=new Uint8Array(t),n=0;n<r;n++)a[n]=e.charCodeAt(n);return t}Zi.IMAGE_URL_PREFIX=/^data:image\\/\\w+;base64,/});var zy=z((uje,rU)=>{\"use strict\";var rw=Er(),lje=ke(),Z7e=Zr(),$7e=Sr(),sje=Il(),ew=/\"/g,hf=\"TOBESTRIPPED\",J7e=new RegExp(`(\"${hf})|(${hf}\")|(&quot;${hf})|(${hf}&quot;)`,\"g\"),K7e=[\"&amp;\",\"&#38;\",\"&#x26;\",\"&quot;\",\"&#34;\",\"&#x22;\",\"&apos;\",\"&#39;\",\"&#x27;\"],Q7e=[\"&lt;\",\"&#60;\",\"&#x3c;\"],ewe=[\"&gt;\",\"&#62;\",\"&#x3e;\"];function rwe(e){let r=rw.select(\"body\").append(\"div\").style({display:\"none\"}).html(\"\"),t=e.replace(/(&[^;]*;)/gi,a=>{let n=a.toLowerCase();return K7e.includes(n)?a:Q7e.includes(n)?\"&#60;\":ewe.includes(n)?\"&#62;\":a.includes(\"<\")||a.includes(\">\")?\"\":r.html(a).text()});return r.remove(),t}function twe(e){return e.replace(/&(?!\\w+;|\\#[0-9]+;| \\#x[0-9A-F]+;)/g,\"&amp;\")}rU.exports=function(r,t,a){var n=r._fullLayout,i=n._paper,o=n._toppaper,l=n.width,s=n.height,u;i.insert(\"rect\",\":first-child\").call(Z7e.setRect,0,0,l,s).call($7e.fill,n.paper_bgcolor);var f=n._basePlotModules||[];for(u=0;u<f.length;u++){var c=f[u];c.toSVG&&c.toSVG(r)}if(o){var v=o.node().childNodes,d=Array.prototype.slice.call(v);for(u=0;u<d.length;u++){var p=d[u];p.childNodes.length&&i.node().appendChild(p)}}n._draggers&&n._draggers.remove(),i.node().style.background=\"\",i.selectAll(\"text\").attr({\"data-unformatted\":null,\"data-math\":null}).each(function(){var m=rw.select(this);if(this.style.visibility===\"hidden\"||this.style.display===\"none\"){m.remove();return}else m.style({visibility:null,display:null});var b=this.style.fontFamily;b&&b.indexOf('\"')!==-1&&m.style(\"font-family\",b.replace(ew,hf));var T=this.style.fontWeight;T&&(T===\"normal\"||T===\"400\")&&m.style(\"font-weight\",void 0);var w=this.style.fontStyle;w&&w===\"normal\"&&m.style(\"font-style\",void 0);var x=this.style.fontVariant;x&&x===\"normal\"&&m.style(\"font-variant\",void 0)}),i.selectAll(\".gradient_filled,.pattern_filled\").each(function(){var m=rw.select(this),b=this.style.fill;b&&b.indexOf(\"url(\")!==-1&&m.style(\"fill\",b.replace(ew,hf));var T=this.style.stroke;T&&T.indexOf(\"url(\")!==-1&&m.style(\"stroke\",T.replace(ew,hf))}),(t===\"pdf\"||t===\"eps\")&&i.selectAll(\"#MathJax_SVG_glyphs path\").attr(\"stroke-width\",0),t===\"svg\"&&a&&(i.attr(\"width\",a*l),i.attr(\"height\",a*s),i.attr(\"viewBox\",\"0 0 \"+l+\" \"+s));var y=new window.XMLSerializer().serializeToString(i.node());return y=rwe(y),y=twe(y),y=y.replace(J7e,\"'\"),y}});var Ny=z((fje,tU)=>{\"use strict\";var awe=ke(),nwe=Bu().EventEmitter,Td=Vl();function iwe(e){var r=e.emitter||new nwe,t=new Promise(function(a,n){var i=window.Image,o=e.svg,l=e.format||\"png\",s=e.canvas,u=e.scale||1,f=e.width||300,c=e.height||150,v=u*f,d=u*c,p=s.getContext(\"2d\",{willReadFrequently:!0}),y=new i,m,b;l===\"svg\"||awe.isSafari()?b=Td.encodeSVG(o):(m=Td.createBlob(o,\"svg\"),b=Td.createObjectURL(m)),s.width=v,s.height=d,y.onload=function(){var T;switch(m=null,Td.revokeObjectURL(b),l!==\"svg\"&&p.drawImage(y,0,0,v,d),l){case\"jpeg\":T=s.toDataURL(\"image/jpeg\");break;case\"png\":T=s.toDataURL(\"image/png\");break;case\"webp\":T=s.toDataURL(\"image/webp\");break;case\"svg\":T=b;break;default:var w=\"Image format is not jpeg, png, svg or webp.\";if(n(new Error(w)),!e.promise)return r.emit(\"error\",w)}a(T),e.promise||r.emit(\"success\",T)},y.onerror=function(T){if(m=null,Td.revokeObjectURL(b),n(T),!e.promise)return r.emit(\"error\",T)},y.src=b});return e.promise?t:r}tU.exports=iwe});var aw=z((cje,iU)=>{\"use strict\";var aU=Ir(),nU=Q7(),owe=va(),pl=ke(),Ad=Vl(),lwe=zy(),swe=Ny(),uwe=jv().version,tw={format:{valType:\"enumerated\",values:[\"png\",\"jpeg\",\"webp\",\"svg\",\"full-json\"],dflt:\"png\"},width:{valType:\"number\",min:1},height:{valType:\"number\",min:1},scale:{valType:\"number\",min:0,dflt:1},setBackground:{valType:\"any\",dflt:!1},imageDataOnly:{valType:\"boolean\",dflt:!1}};function fwe(e,r){r=r||{};var t,a,n,i;pl.isPlainObject(e)?(t=e.data||[],a=e.layout||{},n=e.config||{},i={}):(e=pl.getGraphDiv(e),t=pl.extendDeep([],e.data),a=pl.extendDeep({},e.layout),n=e._context,i=e._fullLayout||{});function o(k){return!(k in r)||pl.validate(r[k],tw[k])}if(!o(\"width\")&&r.width!==null||!o(\"height\")&&r.height!==null)throw new Error(\"Height and width should be pixel values.\");if(!o(\"format\"))throw new Error(\"Export format is not \"+pl.join2(tw.format.values,\", \",\" or \")+\".\");var l={};function s(k,A){return pl.coerce(r,l,tw,k,A)}var u=s(\"format\"),f=s(\"width\"),c=s(\"height\"),v=s(\"scale\"),d=s(\"setBackground\"),p=s(\"imageDataOnly\"),y=document.createElement(\"div\");y.style.position=\"absolute\",y.style.left=\"-5000px\",document.body.appendChild(y);var m=pl.extendFlat({},a);f?m.width=f:r.width===null&&aU(i.width)&&(m.width=i.width),c?m.height=c:r.height===null&&aU(i.height)&&(m.height=i.height);var b=pl.extendFlat({},n,{_exportedPlot:!0,staticPlot:!0,setBackground:d}),T=Ad.getRedrawFunc(y);function w(){return new Promise(function(k){setTimeout(k,Ad.getDelay(y._fullLayout))})}function x(){return new Promise(function(k,A){var q=lwe(y,u,v),C=y._fullLayout.width,E=y._fullLayout.height;function P(){nU.purge(y),document.body.removeChild(y)}if(u===\"full-json\"){var R=owe.graphJson(y,!1,\"object\",!0,!0);return R.version=uwe,R=JSON.stringify(R),P(),k(p?R:Ad.encodeJSON(R))}if(P(),u===\"svg\")return k(p?q:Ad.encodeSVG(q));var N=document.createElement(\"canvas\");N.id=pl.randstr(),swe({format:u,width:C,height:E,scale:v,canvas:N,svg:q,promise:!0}).then(k).catch(A)})}function _(k){return p?k.replace(Ad.IMAGE_URL_PREFIX,\"\"):k}return new Promise(function(k,A){nU.newPlot(y,t,m,b).then(T).then(w).then(x).then(function(q){k(_(q))}).catch(function(q){A(q)})})}iU.exports=fwe});var sU=z((vje,lU)=>{\"use strict\";var $i=ke(),cwe=va(),vwe=G0(),hwe=ds().dfltConfig,Eo=$i.isPlainObject,pf=Array.isArray,nw=$i.isArrayOrTypedArray;lU.exports=function(r,t){r===void 0&&(r=[]),t===void 0&&(t={});var a=vwe.get(),n=[],i={_context:$i.extendFlat({},hwe)},o,l;pf(r)?(i.data=$i.extendDeep([],r),o=r):(i.data=[],o=[],n.push(Ia(\"array\",\"data\"))),Eo(t)?(i.layout=$i.extendDeep({},t),l=t):(i.layout={},l={},arguments.length>1&&n.push(Ia(\"object\",\"layout\"))),cwe.supplyDefaults(i);for(var s=i._fullData,u=o.length,f=0;f<u;f++){var c=o[f],v=[\"data\",f];if(!Eo(c)){n.push(Ia(\"object\",v));continue}var d=s[f],p=d.type,y=a.traces[p].attributes;y.type={valType:\"enumerated\",values:[p]},d.visible===!1&&c.visible!==!1&&n.push(Ia(\"invisible\",v)),Iy(c,d,y,n,v)}var m=i._fullLayout,b=dwe(a,s);return Iy(l,m,b,n,\"layout\"),n.length===0?void 0:n};function Iy(e,r,t,a,n,i){i=i||[];for(var o=Object.keys(e),l=0;l<o.length;l++){var s=o[l],u=i.slice();u.push(s);var f=e[s],c=r[s],v=ywe(t,s),d=(v||{}).valType,p=d===\"info_array\",y=d===\"colorscale\",m=(v||{}).items;if(!mwe(t,s))a.push(Ia(\"schema\",n,u));else if(Eo(f)&&Eo(c)&&d!==\"any\")Iy(f,c,v,a,n,u);else if(p&&pf(f)){f.length>c.length&&a.push(Ia(\"unused\",n,u.concat(c.length)));var b=c.length,T=Array.isArray(m);T&&(b=Math.min(b,m.length));var w,x,_,k,A;if(v.dimensions===2)for(x=0;x<b;x++)if(pf(f[x])){f[x].length>c[x].length&&a.push(Ia(\"unused\",n,u.concat(x,c[x].length)));var q=c[x].length;for(w=0;w<(T?Math.min(q,m[x].length):q);w++)_=T?m[x][w]:m,k=f[x][w],A=c[x][w],$i.validate(k,_)?A!==k&&A!==+k&&a.push(Ia(\"dynamic\",n,u.concat(x,w),k,A)):a.push(Ia(\"value\",n,u.concat(x,w),k))}else a.push(Ia(\"array\",n,u.concat(x),f[x]));else for(x=0;x<b;x++)_=T?m[x]:m,k=f[x],A=c[x],$i.validate(k,_)?A!==k&&A!==+k&&a.push(Ia(\"dynamic\",n,u.concat(x),k,A)):a.push(Ia(\"value\",n,u.concat(x),k))}else if(v.items&&!p&&pf(f)){var C=m[Object.keys(m)[0]],E=[],P,R;for(P=0;P<c.length;P++){var N=c[P]._index||P;if(R=u.slice(),R.push(N),Eo(f[N])&&Eo(c[P])){E.push(N);var I=f[N],O=c[P];Eo(I)&&I.visible!==!1&&O.visible===!1?a.push(Ia(\"invisible\",n,R)):Iy(I,O,C,a,n,R)}}for(P=0;P<f.length;P++)R=u.slice(),R.push(P),Eo(f[P])?E.indexOf(P)===-1&&a.push(Ia(\"unused\",n,R)):a.push(Ia(\"object\",n,R,f[P]))}else!Eo(f)&&Eo(c)?a.push(Ia(\"object\",n,u,f)):!nw(f)&&nw(c)&&!p&&!y?a.push(Ia(\"array\",n,u,f)):s in r?$i.validate(f,v)?v.valType===\"enumerated\"&&(v.coerceNumber&&f!==+c||!nw(f)&&f!==c||String(f)!==String(c))&&a.push(Ia(\"dynamic\",n,u,f,c)):a.push(Ia(\"value\",n,u,f)):a.push(Ia(\"unused\",n,u,f))}return a}function dwe(e,r){for(var t=e.layout.layoutAttributes,a=0;a<r.length;a++){var n=r[a],i=e.traces[n.type],o=i.layoutAttributes;o&&(n.subplot?$i.extendFlat(t[i.attributes.subplot.dflt],o):$i.extendFlat(t,o))}return t}var pwe={object:function(e,r){var t;return e===\"layout\"&&r===\"\"?t=\"The layout argument\":e[0]===\"data\"&&r===\"\"?t=\"Trace \"+e[1]+\" in the data argument\":t=df(e)+\"key \"+r,t+\" must be linked to an object container\"},array:function(e,r){var t;return e===\"data\"?t=\"The data argument\":t=df(e)+\"key \"+r,t+\" must be linked to an array container\"},schema:function(e,r){return df(e)+\"key \"+r+\" is not part of the schema\"},unused:function(e,r,t){var a=Eo(t)?\"container\":\"key\";return df(e)+a+\" \"+r+\" did not get coerced\"},dynamic:function(e,r,t,a){return[df(e)+\"key\",r,\"(set to '\"+t+\"')\",\"got reset to\",\"'\"+a+\"'\",\"during defaults.\"].join(\" \")},invisible:function(e,r){return(r?df(e)+\"item \"+r:\"Trace \"+e[1])+\" got defaulted to be not visible\"},value:function(e,r,t){return[df(e)+\"key \"+r,\"is set to an invalid value (\"+t+\")\"].join(\" \")}};function df(e){return pf(e)?\"In data trace \"+e[1]+\", \":\"In \"+e+\", \"}function Ia(e,r,t,a,n){t=t||\"\";var i,o;pf(r)?(i=r[0],o=r[1]):(i=r,o=null);var l=bwe(t),s=pwe[e](r,l,a,n);return $i.log(s),{code:e,container:i,trace:o,path:t,astr:l,msg:s}}function mwe(e,r){var t=oU(r),a=t.keyMinusId,n=t.id;return a in e&&e[a]._isSubplotObj&&n?!0:r in e}function ywe(e,r){if(r in e)return e[r];var t=oU(r);return e[t.keyMinusId]}var gwe=$i.counterRegex(\"([a-z]+)\");function oU(e){var r=e.match(gwe);return{keyMinusId:r&&r[1],id:r&&r[2]}}function bwe(e){if(!pf(e))return String(e);for(var r=\"\",t=0;t<e.length;t++){var a=e[t];typeof a==\"number\"?r=r.slice(0,-1)+\"[\"+a+\"]\":r+=a,t<e.length-1&&(r+=\".\")}return r}});var fU=z((hje,uU)=>{\"use strict\";var xwe=ke(),By=Vl();function _we(e,r,t){var a=document.createElement(\"a\"),n=\"download\"in a,i=new Promise(function(o,l){var s,u;if(n)return s=By.createBlob(e,t),u=By.createObjectURL(s),a.href=u,a.download=r,document.body.appendChild(a),a.click(),document.body.removeChild(a),By.revokeObjectURL(u),s=null,o(r);if(xwe.isSafari()){var f=t===\"svg\"?\",\":\";base64,\";return By.octetStream(f+encodeURIComponent(e)),o(r)}l(new Error(\"download error\"))});return i}uU.exports=_we});var iw=z((dje,dU)=>{\"use strict\";var Oy=ke(),cU=Ca(),wwe=aw(),Twe=fU(),vU=Vl(),hU=40;function Awe(e,r){var t;return Oy.isPlainObject(e)||(t=Oy.getGraphDiv(e)),r=r||{},r.format=r.format||\"png\",r.width=r.width||null,r.height=r.height||null,r.imageDataOnly=!0,new Promise(function(a,n){t&&t._snapshotInProgress&&n(new Error(\"Image capture already in progress.\")),t&&(t._snapshotInProgress=!0);var i=wwe(e,r),o=r.filename||e.fn;if(!o){let s=vU.getPlotTitle(e);if(s&&!cU.matchTex(s))o=Oy.slugify(s,hU);else{let u=vU.getPlotSubtitle(e);u&&!cU.matchTex(u)&&(o=Oy.slugify(u,hU))}}var l=o||\"plot-image\";l+=\".\"+r.format.replace(\"-\",\".\"),i.then(function(s){return t&&(t._snapshotInProgress=!1),Twe(s,l,r.format)}).then(function(s){a(s)}).catch(function(s){t&&(t._snapshotInProgress=!1),n(s)})})}dU.exports=Awe});var bU=z(ow=>{\"use strict\";var ei=ke(),ri=ei.isPlainObject,pU=G0(),mU=va(),Mwe=zn(),yU=St(),gU=ds().dfltConfig;ow.makeTemplate=function(e){e=ei.isPlainObject(e)?e:ei.getGraphDiv(e),e=ei.extendDeep({_context:gU},{data:e.data,layout:e.layout}),mU.supplyDefaults(e);var r=e.data||[],t=e.layout||{};t._basePlotModules=e._fullLayout._basePlotModules,t._modules=e._fullLayout._modules;var a={data:{},layout:{}};r.forEach(function(d){var p={};Md(d,p,Swe.bind(null,d));var y=ei.coerce(d,{},Mwe,\"type\"),m=a.data[y];m||(m=a.data[y]=[]),m.push(p)}),Md(t,a.layout,kwe.bind(null,t)),delete a.layout.template;var n=t.template;if(ri(n)){var i=n.layout,o,l,s,u,f,c;ri(i)&&Hy(i,a.layout);var v=n.data;if(ri(v)){for(l in a.data)if(s=v[l],Array.isArray(s)){for(f=a.data[l],c=f.length,u=s.length,o=0;o<c;o++)Hy(s[o%u],f[o]);for(o=c;o<u;o++)f.push(ei.extendDeep({},s[o]))}for(l in v)l in a.data||(a.data[l]=ei.extendDeep([],v[l]))}}return a};function Hy(e,r){e=ei.extendDeep({},e);var t=Object.keys(e).sort(),a,n;function i(f,c,v){if(ri(c)&&ri(f))Hy(f,c);else if(Array.isArray(c)&&Array.isArray(f)){var d=yU.arrayTemplater({_template:e},v);for(n=0;n<c.length;n++){var p=c[n],y=d.newItem(p)._template;y&&Hy(y,p)}var m=d.defaultItems();for(n=0;n<m.length;n++)c.push(m[n]._template);for(n=0;n<c.length;n++)delete c[n].templateitemname}}for(a=0;a<t.length;a++){var o=t[a],l=e[o];if(o in r?i(l,r[o],o):r[o]=l,Uy(o)===o)for(var s in r){var u=Uy(s);s!==u&&u===o&&!(s in e)&&i(l,r[s],o)}}}function Uy(e){return e.replace(/[0-9]+$/,\"\")}function Md(e,r,t,a,n){var i=n&&t(n);for(var o in e){var l=e[o],s=Ji(e,o,a),u=Ji(e,o,n),f=t(u);if(!f){var c=Uy(o);c!==o&&(u=Ji(e,c,n),f=t(u))}if(!(i&&i===f)&&!(!f||f._noTemplating||f.valType===\"data_array\"||f.arrayOk&&Array.isArray(l)))if(!f.valType&&ri(l))Md(l,r,t,s,u);else if(f._isLinkedToArray&&Array.isArray(l))for(var v=!1,d=0,p={},y=0;y<l.length;y++){var m=l[y];if(ri(m)){var b=m.name;if(b)p[b]||(Md(m,r,t,Ji(l,d,s),Ji(l,d,u)),d++,p[b]=1);else if(!v){var T=yU.arrayDefaultKey(o),w=Ji(e,T,a),x=Ji(l,d,s);Md(m,r,t,x,Ji(l,d,u));var _=ei.nestedProperty(r,x),k=ei.nestedProperty(r,w);k.set(_.get()),_.set(null),v=!0}}}else{var A=ei.nestedProperty(r,s);A.set(l)}}}function kwe(e,r){return pU.getLayoutValObject(e,ei.nestedProperty({},r).parts)}function Swe(e,r){return pU.getTraceValObject(e,ei.nestedProperty({},r).parts)}function Ji(e,r,t){var a;return t?Array.isArray(e)?a=t+\"[\"+r+\"]\":a=t+\".\"+r:a=r,a}ow.validateTemplate=function(e,r){var t=ei.extendDeep({},{_context:gU,data:e.data,layout:e.layout}),a=t.layout||{};ri(r)||(r=a.template||{});var n=r.layout,i=r.data,o=[];t.layout=a,t.layout.template=r,mU.supplyDefaults(t);var l=t._fullLayout,s=t._fullData,u={};function f(w,x){for(var _ in w)if(_.charAt(0)!==\"_\"&&ri(w[_])){var k=Uy(_),A=[],q;for(q=0;q<x.length;q++)A.push(Ji(w,_,x[q])),k!==_&&A.push(Ji(w,k,x[q]));for(q=0;q<A.length;q++)u[A[q]]=1;f(w[_],A)}}function c(w,x){for(var _ in w)if(_.indexOf(\"defaults\")===-1&&ri(w[_])){var k=Ji(w,_,x);u[k]?c(w[_],k):o.push({code:\"unused\",path:k})}}if(ri(n)?(f(l,[\"layout\"]),c(n,\"layout\")):o.push({code:\"layout\"}),!ri(i))o.push({code:\"data\"});else{for(var v={},d,p=0;p<s.length;p++){var y=s[p];d=y.type,v[d]=(v[d]||0)+1,y._template||o.push({code:\"missing\",index:y.index,traceType:d})}for(d in i){var m=i[d].length,b=v[d]||0;m>b?o.push({code:\"unused\",traceType:d,templateCount:m,dataCount:b}):b>m&&o.push({code:\"reused\",traceType:d,templateCount:m,dataCount:b})}}function T(w,x){for(var _ in w)if(_.charAt(0)!==\"_\"){var k=w[_],A=Ji(w,_,x);ri(k)?(Array.isArray(w)&&k._template===!1&&k.templateitemname&&o.push({code:\"missing\",path:A,templateitemname:k.templateitemname}),T(k,A)):Array.isArray(k)&&qwe(k)&&T(k,A)}}if(T({data:s,layout:l},\"\"),o.length)return o.map(Lwe)};function qwe(e){for(var r=0;r<e.length;r++)if(ri(e[r]))return!0}function Lwe(e){var r;switch(e.code){case\"data\":r=\"The template has no key data.\";break;case\"layout\":r=\"The template has no key layout.\";break;case\"missing\":e.path?r=\"There are no templates for item \"+e.path+\" with name \"+e.templateitemname:r=\"There are no templates for trace \"+e.index+\", of type \"+e.traceType+\".\";break;case\"unused\":e.path?r=\"The template item at \"+e.path+\" was not used in constructing the plot.\":e.dataCount?r=\"Some of the templates of type \"+e.traceType+\" were not used. The template has \"+e.templateCount+\" traces, the data only has \"+e.dataCount+\" of this type.\":r=\"The template has \"+e.templateCount+\" traces of type \"+e.traceType+\" but there are none in the data.\";break;case\"reused\":r=\"Some of the templates of type \"+e.traceType+\" were used more than once. The template has \"+e.templateCount+\" traces, the data has \"+e.dataCount+\" of this type.\";break}return e.msg=r,e}});var _U=z(Ot=>{\"use strict\";var Ea=Q7();Ot._doPlot=Ea._doPlot;Ot.newPlot=Ea.newPlot;Ot.restyle=Ea.restyle;Ot.relayout=Ea.relayout;Ot.redraw=Ea.redraw;Ot.update=Ea.update;Ot._guiRestyle=Ea._guiRestyle;Ot._guiRelayout=Ea._guiRelayout;Ot._guiUpdate=Ea._guiUpdate;Ot._storeDirectGUIEdit=Ea._storeDirectGUIEdit;Ot.react=Ea.react;Ot.extendTraces=Ea.extendTraces;Ot.prependTraces=Ea.prependTraces;Ot.addTraces=Ea.addTraces;Ot.deleteTraces=Ea.deleteTraces;Ot.moveTraces=Ea.moveTraces;Ot.purge=Ea.purge;Ot.addFrames=Ea.addFrames;Ot.deleteFrames=Ea.deleteFrames;Ot.animate=Ea.animate;Ot.setPlotConfig=Ea.setPlotConfig;var Cwe=ph().getGraphDiv,Dwe=Qm().eraseActiveShape;Ot.deleteActiveShape=function(e){return Dwe(Cwe(e))};Ot.toImage=aw();Ot.validate=sU();Ot.downloadImage=iw();var xU=bU();Ot.makeTemplate=xU.makeTemplate;Ot.validateTemplate=xU.validateTemplate});var sw=z((yje,wU)=>{\"use strict\";var lw=ke(),Ewe=Tr();wU.exports=function(r,t,a,n){var i=n(\"x\"),o=n(\"y\"),l,s=Ewe.getComponentMethod(\"calendars\",\"handleTraceDefaults\");if(s(r,t,[\"x\",\"y\"],a),i){var u=lw.minRowLength(i);o?l=Math.min(u,lw.minRowLength(o)):(l=u,n(\"y0\"),n(\"dy\"))}else{if(!o)return 0;l=lw.minRowLength(o),n(\"x0\"),n(\"dx\")}return t._length=l,l}});var bc=z((gje,MU)=>{\"use strict\";var TU=ke().dateTick0,Pwe=Gt(),Rwe=Pwe.ONEWEEK;function AU(e,r){return e%Rwe===0?TU(r,1):TU(r,0)}MU.exports=function(r,t,a,n,i){if(i||(i={x:!0,y:!0}),i.x){var o=n(\"xperiod\");o&&(n(\"xperiod0\",AU(o,t.xcalendar)),n(\"xperiodalignment\"))}if(i.y){var l=n(\"yperiod\");l&&(n(\"yperiod0\",AU(l,t.ycalendar)),n(\"yperiodalignment\"))}}});var qU=z((bje,SU)=>{\"use strict\";var kU=[\"orientation\",\"groupnorm\",\"stackgaps\"];SU.exports=function(r,t,a,n){var i=a._scatterStackOpts,o=n(\"stackgroup\");if(o){var l=t.xaxis+t.yaxis,s=i[l];s||(s=i[l]={});var u=s[o],f=!1;u?u.traces.push(t):(u=s[o]={traceIndices:[],traces:[t]},f=!0);for(var c={orientation:t.x&&!t.y?\"h\":\"v\"},v=0;v<kU.length;v++){var d=kU[v],p=d+\"Found\";if(!u[p]){var y=r[d]!==void 0,m=d===\"orientation\";if((y||f)&&(u[d]=n(d,c[d]),m&&(u.fillDflt=u[d]===\"h\"?\"tonextx\":\"tonexty\"),y&&(u[p]=!0,!f&&(delete u.traces[0][d],m))))for(var b=0;b<u.traces.length-1;b++){var T=u.traces[b];T._input.fill!==T.fill&&(T.fill=u.fillDflt)}}}return u}}});var uw=z((xje,EU)=>{\"use strict\";var LU=Sr(),CU=hi().hasColorscale,DU=Bl(),Fwe=Jn();EU.exports=function(r,t,a,n,i,o={}){var l=Fwe.isBubble(r),s=(r.line||{}).color,u;if(s&&(a=s),i(\"marker.symbol\"),i(\"marker.opacity\",l?.7:1),i(\"marker.size\"),o.noAngle||(i(\"marker.angle\"),o.noAngleRef||i(\"marker.angleref\"),o.noStandOff||i(\"marker.standoff\")),i(\"marker.color\",a),CU(r,\"marker\")&&DU(r,t,n,i,{prefix:\"marker.\",cLetter:\"c\"}),o.noSelect||(i(\"selected.marker.color\"),i(\"unselected.marker.color\"),i(\"selected.marker.size\"),i(\"unselected.marker.size\")),o.noLine||(s&&!Array.isArray(s)&&t.marker.color!==s?u=s:l?u=LU.background:u=LU.defaultLine,i(\"marker.line.color\",u),CU(r,\"marker.line\")&&DU(r,t,n,i,{prefix:\"marker.line.\",cLetter:\"c\"}),i(\"marker.line.width\",l?1:0),o.noLineDash||i(\"marker.line.dash\")),l&&(i(\"marker.sizeref\"),i(\"marker.sizemin\"),i(\"marker.sizemode\")),o.gradient){var f=i(\"marker.gradient.type\");f!==\"none\"&&i(\"marker.gradient.color\")}}});var fw=z((_je,PU)=>{\"use strict\";var zwe=ke().isArrayOrTypedArray,Nwe=hi().hasColorscale,Iwe=Bl();PU.exports=function(r,t,a,n,i,o){o||(o={});var l=(r.marker||{}).color;if(l&&l._inputArray&&(l=l._inputArray),i(\"line.color\",a),Nwe(r,\"line\"))Iwe(r,t,n,i,{prefix:\"line.\",cLetter:\"c\"});else{var s=(zwe(l)?!1:l)||a;i(\"line.color\",s)}i(\"line.width\"),o.noDash||i(\"line.dash\"),o.backoff&&i(\"line.backoff\")}});var cw=z((wje,RU)=>{\"use strict\";RU.exports=function(r,t,a){var n=a(\"line.shape\");n===\"spline\"&&a(\"line.smoothing\")}});var vw=z((Tje,FU)=>{\"use strict\";var Bwe=ke();FU.exports=function(e,r,t,a,n){n=n||{},a(\"textposition\"),Bwe.coerceFont(a,\"textfont\",n.font||t.font,n),n.noSelect||(a(\"selected.textfont.color\"),a(\"unselected.textfont.color\"))}});var hw=z((Aje,NU)=>{\"use strict\";var Gy=Sr(),zU=ke().isArrayOrTypedArray;function Owe(e){for(var r=Gy.interpolate(e[0][1],e[1][1],.5),t=2;t<e.length;t++){var a=Gy.interpolate(e[t-1][1],e[t][1],.5);r=Gy.interpolate(r,a,e[t-1][0]/e[t][0])}return r}NU.exports=function(r,t,a,n,i){i||(i={});var o=!1;if(t.marker){var l=t.marker.color,s=(t.marker.line||{}).color;l&&!zU(l)?o=l:s&&!zU(s)&&(o=s)}var u;if(i.moduleHasFillgradient){var f=n(\"fillgradient.type\");if(f!==\"none\"){n(\"fillgradient.start\"),n(\"fillgradient.stop\");var c=n(\"fillgradient.colorscale\");c&&(u=Owe(c))}}n(\"fillcolor\",Gy.addOpacity((t.line||{}).color||o||u||a,.5))}});var HU=z((Mje,OU)=>{\"use strict\";var IU=ke(),Hwe=Tr(),Uwe=Vi(),Gwe=hd(),xc=Jn(),Ywe=sw(),Vwe=bc(),jwe=qU(),Wwe=uw(),Xwe=fw(),BU=cw(),Zwe=vw(),$we=hw(),Jwe=ke().coercePattern;OU.exports=function(r,t,a,n){function i(d,p){return IU.coerce(r,t,Uwe,d,p)}var o=Ywe(r,t,n,i);if(o||(t.visible=!1),!!t.visible){Vwe(r,t,n,i),i(\"xhoverformat\"),i(\"yhoverformat\"),i(\"zorder\");var l=jwe(r,t,n,i);n.scattermode===\"group\"&&t.orientation===void 0&&i(\"orientation\",\"v\");var s=!l&&o<Gwe.PTS_LINESONLY?\"lines+markers\":\"lines\";i(\"text\"),i(\"hovertext\"),i(\"mode\",s),xc.hasMarkers(t)&&Wwe(r,t,a,n,i,{gradient:!0}),xc.hasLines(t)&&(Xwe(r,t,a,n,i,{backoff:!0}),BU(r,t,i),i(\"connectgaps\"),i(\"line.simplify\")),xc.hasText(t)&&(i(\"texttemplate\"),i(\"texttemplatefallback\"),Zwe(r,t,n,i));var u=[];(xc.hasMarkers(t)||xc.hasText(t))&&(i(\"cliponaxis\"),i(\"marker.maxdisplayed\"),u.push(\"points\")),i(\"fill\",l?l.fillDflt:\"none\"),t.fill!==\"none\"&&($we(r,t,a,i,{moduleHasFillgradient:!0}),xc.hasLines(t)||BU(r,t,i),Jwe(i,\"fillpattern\",t.fillcolor,!1));var f=(t.line||{}).color,c=(t.marker||{}).color;(t.fill===\"tonext\"||t.fill===\"toself\")&&u.push(\"fills\"),i(\"hoveron\",u.join(\"+\")||\"points\"),t.hoveron!==\"fills\"&&(i(\"hovertemplate\"),i(\"hovertemplatefallback\"));var v=Hwe.getComponentMethod(\"errorbars\",\"supplyDefaults\");v(r,t,f||c||a,{axis:\"y\"}),v(r,t,f||c||a,{axis:\"x\",inherit:\"y\"}),IU.coerceSelectionMarkerOpacity(t,i)}}});var kd=z((kje,UU)=>{\"use strict\";var Kwe=vf().getAxisGroup;UU.exports=function(r,t,a,n,i){var o=t.orientation,l=t[{v:\"x\",h:\"y\"}[o]+\"axis\"],s=Kwe(a,l)+o,u=a._alignmentOpts||{},f=n(\"alignmentgroup\"),c=u[s];c||(c=u[s]={});var v=c[f];v?v.traces.push(t):v=c[f]={traces:[t],alignmentIndex:Object.keys(c).length,offsetGroups:{}};var d=n(\"offsetgroup\")||\"\",p=v.offsetGroups,y=p[d];t._offsetIndex=0,(i!==\"group\"||d)&&(y||(y=p[d]={offsetIndex:Object.keys(p).length}),t._offsetIndex=y.offsetIndex)}});var YU=z((Sje,GU)=>{\"use strict\";var Qwe=ke(),e8e=kd(),r8e=Vi();GU.exports=function(r,t){var a,n,i,o=t.scattermode;function l(v){return Qwe.coerce(n._input,n,r8e,v)}if(t.scattermode===\"group\")for(i=0;i<r.length;i++)n=r[i],n.type===\"scatter\"&&(a=n._input,e8e(a,n,t,l,o));for(i=0;i<r.length;i++){var s=r[i];if(s.type===\"scatter\"){var u=s.fill;if(!(u===\"none\"||u===\"toself\")&&(s.opacity=void 0,u===\"tonexty\"||u===\"tonextx\"))for(var f=i-1;f>=0;f--){var c=r[f];if(c.type===\"scatter\"&&c.xaxis===s.xaxis&&c.yaxis===s.yaxis){c.opacity=void 0;break}}}}}});var jU=z((qje,VU)=>{\"use strict\";var t8e=ke(),a8e=Rp();VU.exports=function(e,r){function t(n,i){return t8e.coerce(e,r,a8e,n,i)}var a=r.barmode===\"group\";r.scattermode===\"group\"&&t(\"scattergap\",a?r.bargap:.2)}});var _c=z((Lje,XU)=>{\"use strict\";var n8e=Ir(),WU=ke(),i8e=WU.dateTime2ms,Yy=WU.incrementMonth,o8e=Gt(),l8e=o8e.ONEAVGMONTH;XU.exports=function(r,t,a,n){if(t.type!==\"date\")return{vals:n};var i=r[a+\"periodalignment\"];if(!i)return{vals:n};var o=r[a+\"period\"],l;if(n8e(o)){if(o=+o,o<=0)return{vals:n}}else if(typeof o==\"string\"&&o.charAt(0)===\"M\"){var s=+o.substring(1);if(s>0&&Math.round(s)===s)l=s;else return{vals:n}}for(var u=t.calendar,f=i===\"start\",c=i===\"end\",v=r[a+\"period0\"],d=i8e(v,u)||0,p=[],y=[],m=[],b=n.length,T=0;T<b;T++){var w=n[T],x,_,k;if(l){for(x=Math.round((w-d)/(l*l8e)),k=Yy(d,l*x,u);k>w;)k=Yy(k,-l,u);for(;k<=w;)k=Yy(k,l,u);_=Yy(k,-l,u)}else{for(x=Math.round((w-d)/o),k=d+x*o;k>w;)k-=o;for(;k<=w;)k+=o;_=k-o}p[T]=f?_:c?k:(_+k)/2,y[T]=_,m[T]=k}return{vals:p,starts:y,ends:m}}});var mw=z((Cje,$U)=>{\"use strict\";var dw=hi().hasColorscale,pw=W0(),ZU=Jn();$U.exports=function(r,t){ZU.hasLines(t)&&dw(t,\"line\")&&pw(r,t,{vals:t.line.color,containerStr:\"line\",cLetter:\"c\"}),ZU.hasMarkers(t)&&(dw(t,\"marker\")&&pw(r,t,{vals:t.marker.color,containerStr:\"marker\",cLetter:\"c\"}),dw(t,\"marker.line\")&&pw(r,t,{vals:t.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}))}});var Vy=z((Dje,JU)=>{\"use strict\";var Jt=ke();JU.exports=function(r,t){for(var a=0;a<r.length;a++)r[a].i=a;Jt.mergeArray(t.text,r,\"tx\"),Jt.mergeArray(t.texttemplate,r,\"txt\"),Jt.mergeArray(t.hovertext,r,\"htx\"),Jt.mergeArray(t.customdata,r,\"data\"),Jt.mergeArray(t.textposition,r,\"tp\"),t.textfont&&(Jt.mergeArrayCastPositive(t.textfont.size,r,\"ts\"),Jt.mergeArray(t.textfont.color,r,\"tc\"),Jt.mergeArray(t.textfont.family,r,\"tf\"),Jt.mergeArray(t.textfont.weight,r,\"tw\"),Jt.mergeArray(t.textfont.style,r,\"ty\"),Jt.mergeArray(t.textfont.variant,r,\"tv\"),Jt.mergeArray(t.textfont.textcase,r,\"tC\"),Jt.mergeArray(t.textfont.lineposition,r,\"tE\"),Jt.mergeArray(t.textfont.shadow,r,\"tS\"));var n=t.marker;if(n){Jt.mergeArrayCastPositive(n.size,r,\"ms\"),Jt.mergeArrayCastPositive(n.opacity,r,\"mo\"),Jt.mergeArray(n.symbol,r,\"mx\"),Jt.mergeArray(n.angle,r,\"ma\"),Jt.mergeArray(n.standoff,r,\"mf\"),Jt.mergeArray(n.color,r,\"mc\");var i=n.line;n.line&&(Jt.mergeArray(i.color,r,\"mlc\"),Jt.mergeArrayCastPositive(i.width,r,\"mlw\"),Jt.mergeArray(i.dash,r,\"mld\"));var o=n.gradient;o&&o.type!==\"none\"&&(Jt.mergeArray(o.type,r,\"mgt\"),Jt.mergeArray(o.color,r,\"mgc\"))}}});var jy=z((Eje,QU)=>{\"use strict\";var KU=ke();QU.exports=function(r,t){KU.isArrayOrTypedArray(t.selectedpoints)&&KU.tagSelected(r,t)}});var Wy=z((Pje,oG)=>{\"use strict\";var eG=Ir(),gw=ke(),Sd=Gr(),rG=_c(),yw=Gt().BADNUM,bw=Jn(),s8e=mw(),u8e=Vy(),f8e=jy();function c8e(e,r){var t=e._fullLayout,a=r._xA=Sd.getFromId(e,r.xaxis||\"x\",\"x\"),n=r._yA=Sd.getFromId(e,r.yaxis||\"y\",\"y\"),i=a.makeCalcdata(r,\"x\"),o=n.makeCalcdata(r,\"y\"),l=rG(r,a,\"x\",i),s=rG(r,n,\"y\",o),u=l.vals,f=s.vals,c=r._length,v=new Array(c),d=r.ids,p=xw(r,t,a,n),y=!1,m,b,T,w,x,_;nG(t,r);var k=\"x\",A=\"y\",q;if(p)gw.pushUnique(p.traceIndices,r.index),m=p.orientation===\"v\",m?(A=\"s\",q=\"x\"):(k=\"s\",q=\"y\"),x=p.stackgaps===\"interpolate\";else{var C=aG(r,c);tG(e,r,a,n,u,f,C)}var E=!!r.xperiodalignment,P=!!r.yperiodalignment;for(b=0;b<c;b++){var R=v[b]={},N=eG(u[b]),I=eG(f[b]);N&&I?(R[k]=u[b],R[A]=f[b],E&&(R.orig_x=i[b],R.xEnd=l.ends[b],R.xStart=l.starts[b]),P&&(R.orig_y=o[b],R.yEnd=s.ends[b],R.yStart=s.starts[b])):p&&(m?N:I)?(R[q]=m?u[b]:f[b],R.gap=!0,x?(R.s=yw,y=!0):R.s=0):R[k]=R[A]=yw,d&&(R.id=String(d[b]))}if(u8e(v,r),s8e(e,r),f8e(v,r),p){for(b=0;b<v.length;)v[b][q]===yw?v.splice(b,1):b++;if(gw.sort(v,function(G,V){return G[q]-V[q]||G.i-V.i}),y){for(b=0;b<v.length-1&&v[b].gap;)b++;for(_=v[b].s,_||(_=v[b].s=0),T=0;T<b;T++)v[T].s=_;for(w=v.length-1;w>b&&v[w].gap;)w--;for(_=v[w].s,T=v.length-1;T>w;T--)v[T].s=_;for(;b<w;)if(b++,v[b].gap){for(T=b+1;v[T].gap;)T++;for(var O=v[b-1][q],U=v[b-1].s,Y=(v[T].s-U)/(v[T][q]-O);b<T;)v[b].s=U+(v[b][q]-O)*Y,b++}}}return v}function tG(e,r,t,a,n,i,o){var l=r._length,s=e._fullLayout,u=t._id,f=a._id,c=s._firstScatter[iG(r)]===r.uid,v=(xw(r,s,t,a)||{}).orientation,d=r.fill;t._minDtick=0,a._minDtick=0;var p={padded:!0},y={padded:!0};o&&(p.ppad=y.ppad=o);var m=l<2||n[0]!==n[l-1]||i[0]!==i[l-1];m&&(d===\"tozerox\"||d===\"tonextx\"&&(c||v===\"h\"))?p.tozero=!0:!(r.error_y||{}).visible&&(d===\"tonexty\"||d===\"tozeroy\"||!bw.hasMarkers(r)&&!bw.hasText(r))&&(p.padded=!1,p.ppad=0),m&&(d===\"tozeroy\"||d===\"tonexty\"&&(c||v===\"v\"))?y.tozero=!0:(d===\"tonextx\"||d===\"tozerox\")&&(y.padded=!1),u&&(r._extremes[u]=Sd.findExtremes(t,n,p)),f&&(r._extremes[f]=Sd.findExtremes(a,i,y))}function aG(e,r){if(bw.hasMarkers(e)){var t=e.marker,a=1.6*(e.marker.sizeref||1),n;if(e.marker.sizemode===\"area\"?n=function(u){return Math.max(Math.sqrt((u||0)/a),3)}:n=function(u){return Math.max((u||0)/a,3)},gw.isArrayOrTypedArray(t.size)){var i={type:\"linear\"};Sd.setConvert(i);for(var o=i.makeCalcdata(e.marker,\"size\"),l=new Array(r),s=0;s<r;s++)l[s]=n(o[s]);return l}else return n(t.size)}}function nG(e,r){var t=iG(r),a=e._firstScatter;a[t]||(a[t]=r.uid)}function iG(e){var r=e.stackgroup;return e.xaxis+e.yaxis+e.type+(r?\"-\"+r:\"\")}function xw(e,r,t,a){var n=e.stackgroup;if(n){var i=r._scatterStackOpts[t._id+a._id][n],o=i.orientation===\"v\"?a:t;if(o.type===\"linear\"||o.type===\"log\")return i}}oG.exports={calc:c8e,calcMarkerSize:aG,calcAxisExpansion:tG,setFirstScatter:nG,getStackOpts:xw}});var sG=z((Rje,lG)=>{\"use strict\";lG.exports=Xy;var v8e=ke().distinctVals;function Xy(e,r){this.traces=e,this.sepNegVal=r.sepNegVal,this.overlapNoMerge=r.overlapNoMerge;for(var t=1/0,a=r.posAxis._id.charAt(0),n=[],i=0;i<e.length;i++){for(var o=e[i],l=0;l<o.length;l++){var s=o[l],u=s.p;u===void 0&&(u=s[a]),u!==void 0&&n.push(u)}o[0]&&o[0].width1&&(t=Math.min(o[0].width1,t))}this.positions=n;var f=v8e(n);this.distinctPositions=f.vals,f.vals.length===1&&t!==1/0?this.minDiff=t:this.minDiff=Math.min(f.minDiff,t);var c=(r.posAxis||{}).type;(c===\"category\"||c===\"multicategory\")&&(this.minDiff=1),this.binWidth=this.minDiff,this.bins={}}Xy.prototype.put=function(r,t,a){var n=this.getLabel(r,t,a),i=this.bins[n]||0;return this.bins[n]=i+a,i};Xy.prototype.get=function(r,t,a){var n=this.getLabel(r,t,a);return this.bins[n]||0};Xy.prototype.getLabel=function(r,t,a){var n=a<0&&this.sepNegVal?\"v\":\"^\",i=this.overlapNoMerge?r:Math.round(r/this.binWidth);return n+i+\"g\"+t}});var qd=z((Fje,uG)=>{\"use strict\";uG.exports={TEXTPAD:3,eventDataKeys:[\"value\",\"label\"]}});var $y=z((zje,hG)=>{\"use strict\";var Ki=Ir(),{isArrayOrTypedArray:jl}=ke(),{BADNUM:wc}=Gt(),h8e=Tr(),Ld=Gr(),{getAxisGroup:d8e}=vf(),Zy=sG(),{TEXTPAD:p8e}=qd(),{LINE_SPACING:m8e}=Qa(),{BR_TAG_ALL:y8e}=Ca();function g8e(e,r){for(var t=r.xaxis,a=r.yaxis,n=e._fullLayout,i=e._fullData,o=e.calcdata,l=[],s=[],u=0;u<i.length;u++){var f=i[u];if(f.visible===!0&&h8e.traceIs(f,\"bar\")&&f.xaxis===t._id&&f.yaxis===a._id&&(f.orientation===\"h\"?l.push(o[u]):s.push(o[u]),f._computePh))for(var c=e.calcdata[u],v=0;v<c.length;v++)typeof c[v].ph0==\"function\"&&(c[v].ph0=c[v].ph0()),typeof c[v].ph1==\"function\"&&(c[v].ph1=c[v].ph1())}var d={xCat:t.type===\"category\"||t.type===\"multicategory\",yCat:a.type===\"category\"||a.type===\"multicategory\",mode:n.barmode,norm:n.barnorm,gap:n.bargap,groupgap:n.bargroupgap};ww(e,t,a,s,d),ww(e,a,t,l,d)}function ww(e,r,t,a,n){if(a.length){var i,o,l,s,u;switch(_8e(t,a),n.mode){case\"overlay\":_w(e,r,t,a,n);break;case\"group\":for(i=[],o=[],l=0;l<a.length;l++)s=a[l],u=s[0].trace,u.offset===void 0?o.push(s):i.push(s);o.length&&w8e(e,r,t,o,n),i.length&&_w(e,r,t,i,n);break;case\"stack\":case\"relative\":for(i=[],o=[],l=0;l<a.length;l++)s=a[l],u=s[0].trace,u.base===void 0?o.push(s):i.push(s);x8e(o),o.length&&T8e(e,r,t,o,n),i.length&&_w(e,r,t,i,n);break}b8e(a),L8e(a,r)}}function b8e(e){var r,t,a,n,i,o,l;for(r=0;r<e.length;r++)t=e[r],a=t[0].trace,n=t[0].t,n.cornerradiusvalue===void 0&&(i=a.marker?a.marker.cornerradius:void 0,i!==void 0&&(o=Ki(i)?+i:+i.slice(0,-1),l=Ki(i)?\"px\":\"%\",n.cornerradiusvalue=o,n.cornerradiusform=l))}function x8e(e){if(!(e.length<2)){var r,t,a,n,i,o,l;for(r=0;r<e.length&&(t=e[r],a=t[0].trace,i=a.marker?a.marker.cornerradius:void 0,i===void 0);r++);if(i!==void 0)for(o=Ki(i)?+i:+i.slice(0,-1),l=Ki(i)?\"px\":\"%\",r=0;r<e.length;r++)t=e[r],n=t[0].t,n.cornerradiusvalue=o,n.cornerradiusform=l}}function _8e(e,r){var t,a;for(t=0;t<r.length;t++){var n=r[t],i=n[0].trace,o=i.type===\"funnel\"?i._base:i.base,l,s=i.orientation===\"h\"?i.xcalendar:i.ycalendar,u=e.type===\"category\"||e.type===\"multicategory\"?function(){return null}:e.d2c;if(jl(o)){for(a=0;a<Math.min(o.length,n.length);a++)l=u(o[a],0,s),Ki(l)?(n[a].b=+l,n[a].hasB=1):n[a].b=0;for(;a<n.length;a++)n[a].b=0}else{l=u(o,0,s);var f=Ki(l);for(l=f?l:0,a=0;a<n.length;a++)n[a].b=l,f&&(n[a].hasB=1)}}}function _w(e,r,t,a,n){for(var i=0;i<a.length;i++){var o=a[i],l=new Zy([o],{posAxis:r,sepNegVal:!1,overlapNoMerge:!n.norm});Tw(e,r,l,n),n.norm?(vG(l),Aw(t,l,n)):cG(t,l)}}function w8e(e,r,t,a,n){var i=new Zy(a,{posAxis:r,sepNegVal:!1,overlapNoMerge:!n.norm});Tw(e,r,i,n),S8e(i,r),n.norm?(vG(i),Aw(t,i,n)):cG(t,i)}function T8e(e,r,t,a,n){var i=new Zy(a,{posAxis:r,sepNegVal:n.mode===\"relative\",overlapNoMerge:!(n.norm||n.mode===\"stack\"||n.mode===\"relative\")});Tw(e,r,i,n),k8e(t,i,n);for(var o=0;o<a.length;o++)for(var l=a[o],s=l[0].t.offsetindex,u=0;u<l.length;u++){var f=l[u];if(f.s!==wc){var c=f.b+f.s===i.get(f.p,s,f.s);c&&(f._outmost=!0)}}n.norm&&Aw(t,i,n)}function Tw(e,r,t,a){var n=e._fullLayout,i=t.positions,o=t.distinctPositions,l=t.minDiff,s=t.traces,u=s.length,f=i.length!==o.length,c=l*(1-a.gap),v,d,p,y;if(r._id===\"angularaxis\")v=c,d=v*(1-(a.groupgap||0)),p=-d/2;else{var m=d8e(n,r._id)+s[0][0].trace.orientation;y=n._alignmentOpts[m]||{}}for(var b=0;b<u;b++){var T=s[b],w=T[0].trace;if(r._id!==\"angularaxis\"){var x=y[w.alignmentgroup]||{},_=Object.keys(x.offsetGroups||{}).length;_?v=c/_:v=f?c/u:c,d=v*(1-(a.groupgap||0)),_?p=((2*w._offsetIndex+1-_)*v-d)/2:p=f?((2*b+1-u)*v-d)/2:-d/2}var k=T[0].t;k.barwidth=d,k.offsetindex=w._offsetIndex||0,k.poffset=p,k.bargroupwidth=c,k.bardelta=l}t.binWidth=s[0][0].t.barwidth/100,A8e(t),M8e(r,t),r._id===\"angularaxis\"?fG(r,t):fG(r,t,f)}function A8e(e){var r=e.traces,t,a;for(t=0;t<r.length;t++){var n=r[t],i=n[0],o=i.trace,l=i.t,s=o._offset||o.offset,u=l.poffset,f;if(jl(s)){for(f=Array.prototype.slice.call(s,0,n.length),a=0;a<f.length;a++)Ki(f[a])||(f[a]=u);for(a=f.length;a<n.length;a++)f.push(u);l.poffset=f}else s!==void 0&&(l.poffset=s);var c=o._width||o.width,v=l.barwidth;if(jl(c)){var d=Array.prototype.slice.call(c,0,n.length);for(a=0;a<d.length;a++)Ki(d[a])||(d[a]=v);for(a=d.length;a<n.length;a++)d.push(v);if(l.barwidth=d,s===void 0){for(f=[],a=0;a<n.length;a++)f.push(u+(v-d[a])/2);l.poffset=f}}else c!==void 0&&(l.barwidth=c,s===void 0&&(l.poffset=u+(v-c)/2))}}function M8e(e,r){for(var t=r.traces,a=Tc(e),n=0;n<t.length;n++)for(var i=t[n],o=i[0].t,l=o.poffset,s=jl(l),u=o.barwidth,f=jl(u),c=0;c<i.length;c++){var v=i[c],d=v.w=f?u[c]:u;v.p===void 0&&(v.p=v[a],v[\"orig_\"+a]=v[a]);var p=(s?l[c]:l)+d/2;v[a]=v.p+p}}function fG(e,r,t){var a=r.traces,n=r.minDiff,i=n/2;Ld.minDtick(e,r.minDiff,r.distinctPositions[0],t);for(var o=0;o<a.length;o++){var l=a[o],s=l[0],u=s.trace,f=[],c,v,d,p;for(p=0;p<l.length;p++)c=l[p],v=c.p-i,d=c.p+i,f.push(v,d);if(u.width||u.offset){var y=s.t,m=y.poffset,b=y.barwidth,T=jl(m),w=jl(b);for(p=0;p<l.length;p++){c=l[p];var x=T?m[p]:m,_=w?b[p]:b;v=c.p+x,d=v+_,f.push(v,d)}}u._extremes[e._id]=Ld.findExtremes(e,f,{padded:!1})}}function cG(e,r){for(var t=r.traces,a=Tc(e),n=0;n<t.length;n++){for(var i=t[n],o=i[0].trace,l=o.type===\"scatter\",s=o.orientation===\"v\",u=[],f=!1,c=0;c<i.length;c++){var v=i[c],d=l?0:v.b,p=l?s?v.y:v.x:d+v.s;v[a]=p,u.push(p),v.hasB&&u.push(d),(!v.hasB||!v.b)&&(f=!0)}let{ppadminus:y,ppadplus:m}=Mw(o,i);o._extremes[e._id]=Ld.findExtremes(e,u,{tozero:f,padded:!0,ppadplus:m,ppadminus:y})}}function k8e(e,r,t){var a=Tc(e),n=r.traces,i,o,l,s,u,f,c;for(s=0;s<n.length;s++)if(i=n[s],o=i[0].trace,o.type===\"funnel\")for(c=i[0].t.offsetindex,u=0;u<i.length;u++)f=i[u],f.s!==wc&&r.put(f.p,c,-.5*f.s);for(s=0;s<n.length;s++){i=n[s],o=i[0].trace,l=o.type===\"funnel\",c=o.type===\"barpolar\"?0:i[0].t.offsetindex;var v=[];for(u=0;u<i.length;u++)if(f=i[u],f.s!==wc){var d;l?d=f.s:d=f.s+f.b;var p=r.put(f.p,c,d),y=p+d;f.b=p,f[a]=y,t.norm||(v.push(y),f.hasB&&v.push(p))}if(!t.norm){let{ppadminus:m,ppadplus:b}=Mw(o,i);o._extremes[e._id]=Ld.findExtremes(e,v,{tozero:!0,padded:!0,ppadplus:b,ppadminus:m})}}}function vG(e){for(var r=e.traces,t=0;t<r.length;t++)for(var a=r[t],n=a[0].t.offsetindex,i=0;i<a.length;i++){var o=a[i];o.s!==wc&&e.put(o.p,n,o.b+o.s)}}function S8e(e,r){for(var t=e.traces,a=0;a<t.length;a++){var n=t[a],i=n[0].trace,o=n[0].t.offsetindex;if(i.base===void 0)for(var l=new Zy([n],{posAxis:r,sepNegVal:!0,overlapNoMerge:!0}),s=0;s<n.length;s++){var u=n[s];if(u.p!==wc){var f=l.put(u.p,o,u.b+u.s);f&&(u.b=f)}}}}function Aw(e,r,t){var a=r.traces,n=Tc(e),i=t.norm===\"fraction\"?1:100,o=i/1e9,l=e.l2c(e.c2l(0)),s=t.mode===\"stack\"?i:l;function u(k){return Ki(e.c2l(k))&&(k<l-o||k>s+o||!Ki(l))}for(var f=0;f<a.length;f++){for(var c=a[f],v=c[0].t.offsetindex,d=c[0].trace,p=[],y=!1,m=!1,b=0;b<c.length;b++){var T=c[b];if(T.s!==wc){var w=Math.abs(i/r.get(T.p,v,T.s));T.b*=w,T.s*=w;var x=T.b,_=x+T.s;T[n]=_,p.push(_),m=m||u(_),T.hasB&&(p.push(x),m=m||u(x)),(!T.hasB||!T.b)&&(y=!0)}}let{ppadminus:k,ppadplus:A}=Mw(d,c);d._extremes[e._id]=Ld.findExtremes(e,p,{tozero:y,padded:m,ppadplus:A,ppadminus:k})}}function Mw(e,r){if(e.orientation===\"v\"&&(e.text||e.texttemplate)&&e.textposition===\"outside\"&&(e.textangle===\"auto\"||e.textangle===0)){let a=function(i){return!i||typeof i!=\"string\"?0:(i.match(y8e)||[]).length+1};var t;e.texttemplate?t=a(e.texttemplate):t=jl(e.text)?Math.max(...e.text.map(i=>a(i))):a(e.text);let n=e.outsidetextfont.size*m8e*t+p8e;return{ppadplus:r.some(i=>i.s<0)?n:0,ppadminus:r.some(i=>i.s>=0)?n:0}}return{ppadplus:void 0,ppadminus:void 0}}function q8e(e,r,t,a){for(var n=Tc(a),i=0;i<e.length;i++)for(var o=e[i],l=0;l<o.length;l++){var s=o[l],u=s[n];s._sMin=r[u],s._sMax=t[u]}}function L8e(e,r){var t=Tc(r),a={},n,i,o,l=1/0,s=-1/0;for(n=0;n<e.length;n++)for(o=e[n],i=0;i<o.length;i++){var u=o[i].p;Ki(u)&&(l=Math.min(l,u),s=Math.max(s,u))}var f=1e4/(s-l),c=a.round=function(q){return String(Math.round(f*(q-l)))},v={},d={},p=e.some(function(q){var C=q[0].trace;return\"marker\"in C&&C.marker.cornerradius});for(n=0;n<e.length;n++){o=e[n],o[0].t.extents=a;var y=o[0].t.poffset,m=jl(y);for(i=0;i<o.length;i++){var b=o[i],T=b[t]-b.w/2;if(Ki(T)){var w=b[t]+b.w/2,x=c(b.p);a[x]?a[x]=[Math.min(T,a[x][0]),Math.max(w,a[x][1])]:a[x]=[T,w]}if(b.p0=b.p+(m?y[i]:y),b.p1=b.p0+b.w,b.s0=b.b,b.s1=b.s0+b.s,p){var _=Math.min(b.s0,b.s1)||0,k=Math.max(b.s0,b.s1)||0,A=b[t];v[A]=A in v?Math.min(v[A],_):_,d[A]=A in d?Math.max(d[A],k):k}}}p&&q8e(e,v,d,r)}function Tc(e){return e._id.charAt(0)}hG.exports={crossTraceCalc:g8e,setGroupPositions:ww}});var yG=z((Nje,mG)=>{\"use strict\";var dG=Wy(),pG=$y().setGroupPositions;function C8e(e,r){for(var t=r.xaxis,a=r.yaxis,n=e._fullLayout,i=e._fullData,o=e.calcdata,l=[],s=[],u=0;u<i.length;u++){var f=i[u];f.visible===!0&&f.type===\"scatter\"&&f.xaxis===t._id&&f.yaxis===a._id&&(f.orientation===\"h\"?l.push(o[u]):f.orientation===\"v\"&&s.push(o[u]))}var c={mode:n.scattermode,gap:n.scattergap};pG(e,t,a,s,c),pG(e,a,t,l,c)}mG.exports=function(r,t){r._fullLayout.scattermode===\"group\"&&C8e(r,t);var a=t.xaxis,n=t.yaxis,i=a._id+n._id,o=r._fullLayout._scatterStackOpts[i];if(o){var l=r.calcdata,s,u,f,c,v,d,p,y,m,b,T,w,x,_,k;for(var A in o){b=o[A];var q=b.traceIndices;if(q.length){for(T=b.stackgaps===\"interpolate\",w=b.groupnorm,b.orientation===\"v\"?(x=\"x\",_=\"y\"):(x=\"y\",_=\"x\"),k=new Array(q.length),s=0;s<k.length;s++)k[s]=!1;d=l[q[0]];var C=new Array(d.length);for(s=0;s<d.length;s++)C[s]=d[s][x];for(s=1;s<q.length;s++){for(v=l[q[s]],u=f=0;u<v.length;u++){for(p=v[u][x];p>C[f]&&f<C.length;f++)kw(v,u,C[f],s,k,T,x),u++;if(p!==C[f]){for(c=0;c<s;c++)kw(l[q[c]],f,p,c,k,T,x);C.splice(f,0,p)}f++}for(;f<C.length;f++)kw(v,u,C[f],s,k,T,x),u++}var E=C.length;for(u=0;u<d.length;u++){for(y=d[u][_]=d[u].s,s=1;s<q.length;s++)v=l[q[s]],v[0].trace._rawLength=v[0].trace._length,v[0].trace._length=E,y+=v[u].s,v[u][_]=y;if(w)for(m=(w===\"fraction\"?y:y/100)||1,s=0;s<q.length;s++){var P=l[q[s]][u];P[_]/=m,P.sNorm=P.s/m}}for(s=0;s<q.length;s++){v=l[q[s]];var R=v[0].trace,N=dG.calcMarkerSize(R,R._rawLength),I=Array.isArray(N);if(N&&k[s]||I){var O=N;for(N=new Array(E),u=0;u<E;u++)N[u]=v[u].gap?0:I?O[v[u].i]:O}var U=new Array(E),Y=new Array(E);for(u=0;u<E;u++)U[u]=v[u].x,Y[u]=v[u].y;dG.calcAxisExpansion(r,R,a,n,U,Y,N),v[0].t.orientation=b.orientation}}}}};function kw(e,r,t,a,n,i,o){n[a]=!0;var l={i:null,gap:!0,s:0};if(l[o]=t,e.splice(r,0,l),r&&t===e[r-1][o]){var s=e[r-1];l.s=s.s,l.i=s.i,l.gap=s.gap}else i&&(l.s=D8e(e,r,t,o));r||(e[0].t=e[1].t,e[0].trace=e[1].trace,delete e[1].t,delete e[1].trace)}function D8e(e,r,t,a){var n=e[r-1],i=e[r+1];return i?n?n.s+(i.s-n.s)*(t-n[a])/(i[a]-n[a]):i.s:n.s}});var qw=z((Ije,TG)=>{\"use strict\";var E8e=Zr(),_G=Gt(),Cd=_G.BADNUM,wG=_G.LOG_CLIP,gG=wG+.5,bG=wG-.5,Jy=ke(),P8e=Jy.segmentsIntersect,xG=Jy.constrain,Sw=hd();TG.exports=function(r,t){var a=t.trace||{},n=t.xaxis,i=t.yaxis,o=n.type===\"log\",l=i.type===\"log\",s=n._length,u=i._length,f=t.backoff,c=a.marker,v=t.connectGaps,d=t.baseTolerance,p=t.shape,y=p===\"linear\",m=a.fill&&a.fill!==\"none\",b=[],T=Sw.minTolerance,w=r.length,x=new Array(w),_=0,k,A,q,C,E,P,R,N,I,O,U,Y,G,V,W,j;function J(Ee){var Je=r[Ee];if(!Je)return!1;var Ie=t.linearized?n.l2p(Je.x):n.c2p(Je.x),pr=t.linearized?i.l2p(Je.y):i.c2p(Je.y);if(Ie===Cd){if(o&&(Ie=n.c2p(Je.x,!0)),Ie===Cd)return!1;l&&pr===Cd&&(Ie*=Math.abs(n._m*u*(n._m>0?gG:bG)/(i._m*s*(i._m>0?gG:bG)))),Ie*=1e3}if(pr===Cd){if(l&&(pr=i.c2p(Je.y,!0)),pr===Cd)return!1;pr*=1e3}return[Ie,pr]}function te(Ee,Je,Ie,pr){var mr=Ie-Ee,sr=pr-Je,yr=.5-Ee,ne=.5-Je,ge=mr*mr+sr*sr,ze=mr*yr+sr*ne;if(ze>0&&ze<ge){var Oe=yr*sr-ne*mr;if(Oe*Oe<ge)return!0}}var ae,se;function $(Ee,Je){var Ie=Ee[0]/s,pr=Ee[1]/u,mr=Math.max(0,-Ie,Ie-1,-pr,pr-1);return mr&&ae!==void 0&&te(Ie,pr,ae,se)&&(mr=0),mr&&Je&&te(Ie,pr,Je[0]/s,Je[1]/u)&&(mr=0),(1+Sw.toleranceGrowth*mr)*d}function fe(Ee,Je){var Ie=Ee[0]-Je[0],pr=Ee[1]-Je[1];return Math.sqrt(Ie*Ie+pr*pr)}var ie=Sw.maxScreensAway,ue=-s*ie,ce=s*(1+ie),oe=-u*ie,be=u*(1+ie),Re=[[ue,oe,ce,oe],[ce,oe,ce,be],[ce,be,ue,be],[ue,be,ue,oe]],ye,Ce,Me,Le,De,Ne;function qe(Ee,Je){for(var Ie=[],pr=0,mr=0;mr<4;mr++){var sr=Re[mr],yr=P8e(Ee[0],Ee[1],Je[0],Je[1],sr[0],sr[1],sr[2],sr[3]);yr&&(!pr||Math.abs(yr.x-Ie[0][0])>1||Math.abs(yr.y-Ie[0][1])>1)&&(yr=[yr.x,yr.y],pr&&fe(yr,Ee)<fe(Ie[0],Ee)?Ie.unshift(yr):Ie.push(yr),pr++)}return Ie}function Xe(Ee){if(Ee[0]<ue||Ee[0]>ce||Ee[1]<oe||Ee[1]>be)return[xG(Ee[0],ue,ce),xG(Ee[1],oe,be)]}function $e(Ee,Je){if(Ee[0]===Je[0]&&(Ee[0]===ue||Ee[0]===ce)||Ee[1]===Je[1]&&(Ee[1]===oe||Ee[1]===be))return!0}function We(Ee,Je){var Ie=[],pr=Xe(Ee),mr=Xe(Je);return pr&&mr&&$e(pr,mr)||(pr&&Ie.push(pr),mr&&Ie.push(mr)),Ie}function Se(Ee,Je,Ie){return function(pr,mr){var sr=Xe(pr),yr=Xe(mr),ne=[];if(sr&&yr&&$e(sr,yr))return ne;sr&&ne.push(sr),yr&&ne.push(yr);var ge=2*Jy.constrain((pr[Ee]+mr[Ee])/2,Je,Ie)-((sr||pr)[Ee]+(yr||mr)[Ee]);if(ge){var ze;sr&&yr?ze=ge>0==sr[Ee]>yr[Ee]?sr:yr:ze=sr||yr,ze[Ee]+=ge}return ne}}var Fe;p===\"linear\"||p===\"spline\"?Fe=qe:p===\"hv\"||p===\"vh\"?Fe=We:p===\"hvh\"?Fe=Se(0,ue,ce):p===\"vhv\"&&(Fe=Se(1,oe,be));function Qe(Ee,Je){var Ie=Je[0]-Ee[0],pr=(Je[1]-Ee[1])/Ie,mr=(Ee[1]*Je[0]-Je[1]*Ee[0])/Ie;return mr>0?[pr>0?ue:ce,be]:[pr>0?ce:ue,oe]}function re(Ee){var Je=Ee[0],Ie=Ee[1],pr=Je===x[_-1][0],mr=Ie===x[_-1][1];if(!(pr&&mr))if(_>1){var sr=Je===x[_-2][0],yr=Ie===x[_-2][1];pr&&(Je===ue||Je===ce)&&sr?yr?_--:x[_-1]=Ee:mr&&(Ie===oe||Ie===be)&&yr?sr?_--:x[_-1]=Ee:x[_++]=Ee}else x[_++]=Ee}function xe(Ee){x[_-1][0]!==Ee[0]&&x[_-1][1]!==Ee[1]&&re([Me,Le]),re(Ee),De=null,Me=Le=0}var Ge=Jy.isArrayOrTypedArray(c);function cr(Ee){if(Ee&&f&&(Ee.i=k,Ee.d=r,Ee.trace=a,Ee.marker=Ge?c[Ee.i]:c,Ee.backoff=f),ae=Ee[0]/s,se=Ee[1]/u,ye=Ee[0]<ue?ue:Ee[0]>ce?ce:0,Ce=Ee[1]<oe?oe:Ee[1]>be?be:0,ye||Ce){if(!_)x[_++]=[ye||Ee[0],Ce||Ee[1]];else if(De){var Je=Fe(De,Ee);Je.length>1&&(xe(Je[0]),x[_++]=Je[1])}else Ne=Fe(x[_-1],Ee)[0],x[_++]=Ne;var Ie=x[_-1];ye&&Ce&&(Ie[0]!==ye||Ie[1]!==Ce)?(De&&(Me!==ye&&Le!==Ce?re(Me&&Le?Qe(De,Ee):[Me||ye,Le||Ce]):Me&&Le&&re([Me,Le])),re([ye,Ce])):Me-ye&&Le-Ce&&re([ye||Me,Ce||Le]),De=Ee,Me=ye,Le=Ce}else De&&xe(Fe(De,Ee)[0]),x[_++]=Ee}for(k=0;k<w;k++)if(A=J(k),!!A){for(_=0,De=null,cr(A),k++;k<w;k++){if(C=J(k),!C){if(v)continue;break}if(!y||!t.simplify){cr(C);continue}var Pe=J(k+1);if(O=fe(C,A),!(!(m&&(_===0||_===w-1))&&O<$(C,Pe)*T)){for(N=[(C[0]-A[0])/O,(C[1]-A[1])/O],E=A,U=O,Y=V=W=0,R=!1,q=C,k++;k<r.length;k++){if(P=Pe,Pe=J(k+1),!P){if(v)continue;break}if(I=[P[0]-A[0],P[1]-A[1]],j=I[0]*N[1]-I[1]*N[0],V=Math.min(V,j),W=Math.max(W,j),W-V>$(P,Pe))break;q=P,G=I[0]*N[0]+I[1]*N[1],G>U?(U=G,C=P,R=!1):G<Y&&(Y=G,E=P,R=!0)}if(R?(cr(C),q!==E&&cr(E)):(E!==A&&cr(E),q!==C&&cr(C)),cr(q),k>=r.length||!P)break;cr(P),A=P}}De&&re([Me||De[0],Le||De[1]]),b.push(x.slice(0,_))}var me=p.slice(p.length-1);if(f&&me!==\"h\"&&me!==\"v\"){for(var Ae=!1,He=-1,Ze=[],Be=0;Be<b.length;Be++)for(var je=0;je<b[Be].length-1;je++){var tr=b[Be][je],ir=b[Be][je+1],lr=E8e.applyBackoff(ir,tr);(lr[0]!==ir[0]||lr[1]!==ir[1])&&(Ae=!0),Ze[He+1]||(He++,Ze[He]=[tr,[lr[0],lr[1]]])}return Ae?Ze:b}return b}});var kG=z((Bje,MG)=>{\"use strict\";var AG={tonextx:1,tonexty:1,tonext:1};MG.exports=function(r,t,a){var n,i,o,l,s,u={},f=!1,c=-1,v=0,d=-1;for(i=0;i<a.length;i++)n=a[i][0].trace,o=n.stackgroup||\"\",o?o in u?s=u[o]:(s=u[o]=v,v++):n.fill in AG&&d>=0?s=d:(s=d=v,v++),s<c&&(f=!0),n._groupIndex=c=s;var p=a.slice();f&&p.sort(function(m,b){var T=m[0].trace,w=b[0].trace;return T._groupIndex-w._groupIndex||T.index-w.index});var y={};for(i=0;i<p.length;i++)n=p[i][0].trace,o=n.stackgroup||\"\",n.visible===!0?(n._nexttrace=null,n.fill in AG&&(l=y[o],n._prevtrace=l||null,l&&(l._nexttrace=n)),n._ownfill=n.fill&&(n.fill.slice(0,6)===\"tozero\"||n.fill===\"toself\"||n.fill.slice(0,2)===\"to\"&&!n._prevtrace),y[o]=n):n._prevtrace=n._nexttrace=n._ownfill=null;return p}});var Lw=z((Oje,LG)=>{\"use strict\";var Po=Er(),R8e=Tr(),Dd=ke(),Ac=Dd.ensureSingle,qG=Dd.identity,na=Zr(),Mc=Jn(),F8e=qw(),z8e=kG(),Ky=w7().tester;LG.exports=function(r,t,a,n,i,o){var l,s,u=!i,f=!!i&&i.duration>0,c=z8e(r,t,a);if(l=n.selectAll(\"g.trace\").data(c,function(d){return d[0].trace.uid}),l.enter().append(\"g\").attr(\"class\",function(d){return\"trace scatter trace\"+d[0].trace.uid}).style(\"stroke-miterlimit\",2),l.order(),N8e(r,l,t),f){o&&(s=o());var v=Po.transition().duration(i.duration).ease(i.easing).each(\"end\",function(){s&&s()}).each(\"interrupt\",function(){s&&s()});v.each(function(){n.selectAll(\"g.trace\").each(function(d,p){SG(r,p,t,d,c,this,i)})})}else l.each(function(d,p){SG(r,p,t,d,c,this,i)});u&&l.exit().remove(),n.selectAll(\"path:not([d])\").remove()};function N8e(e,r,t){r.each(function(a){var n=Ac(Po.select(this),\"g\",\"fills\");na.setClipUrl(n,t.layerClipId,e);var i=a[0].trace;i._ownFill=null,i._nextFill=null;var o=[];i._ownfill&&o.push(\"_ownFill\"),i._nexttrace&&o.push(\"_nextFill\");var l=n.selectAll(\"g\").data(o,qG);l.enter().append(\"g\"),l.exit().remove(),l.order().each(function(s){i[s]=Ac(Po.select(this),\"path\",\"js-fill\")})})}function SG(e,r,t,a,n,i,o){var l=e._context.staticPlot,s;I8e(e,r,t,a,n);var u=!!o&&o.duration>0;function f(Se){return u?Se.transition():Se}var c=t.xaxis,v=t.yaxis,d=a[0].trace,p=d.line,y=Po.select(i),m=Ac(y,\"g\",\"errorbars\"),b=Ac(y,\"g\",\"lines\"),T=Ac(y,\"g\",\"points\"),w=Ac(y,\"g\",\"text\");if(R8e.getComponentMethod(\"errorbars\",\"plot\")(e,m,t,o),d.visible!==!0)return;f(y).style(\"opacity\",d.opacity);var x,_,k=d.fill.charAt(d.fill.length-1);k!==\"x\"&&k!==\"y\"&&(k=\"\");var A,q;k===\"y\"?(A=1,q=v.c2p(0,!0)):k===\"x\"&&(A=0,q=c.c2p(0,!0)),a[0][t.isRangePlot?\"nodeRangePlot3\":\"node3\"]=y;var C=\"\",E=[],P=d._prevtrace,R=null,N=null;P&&(C=P._prevRevpath||\"\",_=P._nextFill,E=P._ownPolygons,R=P._fillsegments,N=P._fillElement);var I,O,U=\"\",Y=\"\",G,V,W,j,J,te,ae=[];d._polygons=[];var se=[],$=[],fe=Dd.noop;if(x=d._ownFill,Mc.hasLines(d)||d.fill!==\"none\"){_&&_.datum(a),[\"hv\",\"vh\",\"hvh\",\"vhv\"].indexOf(p.shape)!==-1?(G=na.steps(p.shape),V=na.steps(p.shape.split(\"\").reverse().join(\"\"))):p.shape===\"spline\"?G=V=function(Se){var Fe=Se[Se.length-1];return Se.length>1&&Se[0][0]===Fe[0]&&Se[0][1]===Fe[1]?na.smoothclosed(Se.slice(1),p.smoothing):na.smoothopen(Se,p.smoothing)}:G=V=function(Se){return\"M\"+Se.join(\"L\")},W=function(Se){return V(Se.reverse())},$=F8e(a,{xaxis:c,yaxis:v,trace:d,connectGaps:d.connectgaps,baseTolerance:Math.max(p.width||1,3)/4,shape:p.shape,backoff:p.backoff,simplify:p.simplify,fill:d.fill}),se=new Array($.length);var ie=0;for(s=0;s<$.length;s++){var ue,ce=$[s];!ue||!k?(ue=ce.slice(),se[ie]=ue,ie++):ue.push.apply(ue,ce)}d._fillElement=null,d._fillExclusionElement=N,d._fillsegments=se.slice(0,ie),se=d._fillsegments,$.length&&(j=$[0][0].slice(),J=$[$.length-1],te=J[J.length-1].slice()),fe=function(Se){return function(Fe){if(I=G(Fe),O=W(Fe),U?k?(U+=\"L\"+I.slice(1),Y=O+(\"L\"+Y.slice(1))):(U+=\"Z\"+I,Y=O+\"Z\"+Y):(U=I,Y=O),Mc.hasLines(d)){var Qe=Po.select(this);if(Qe.datum(a),Se)f(Qe.style(\"opacity\",0).attr(\"d\",I).call(na.lineGroupStyle)).style(\"opacity\",1);else{var re=f(Qe);re.attr(\"d\",I),na.singleLineStyle(a,re)}}}}}var oe=b.selectAll(\".js-line\").data($);f(oe.exit()).style(\"opacity\",0).remove(),oe.each(fe(!1)),oe.enter().append(\"path\").classed(\"js-line\",!0).style(\"vector-effect\",l?\"none\":\"non-scaling-stroke\").call(na.lineGroupStyle).each(fe(!0)),na.setClipUrl(oe,t.layerClipId,e);function be(Se){f(Se).attr(\"d\",\"M0,0Z\")}var Re=function(){var Se=new Array(se.length);for(s=0;s<se.length;s++)Se[s]=Ky(se[s]);return Se},ye=function(Se){var Fe,Qe;if(!Se||Se.length===0)for(Fe=new Array(se.length),Qe=0;Qe<se.length;Qe++){var re=se[Qe][0].slice(),xe=se[Qe][se[Qe].length-1].slice();re[A]=xe[A]=q;var Ge=[xe,re],cr=Ge.concat(se[Qe]);Fe[Qe]=Ky(cr)}else{for(Fe=new Array(Se.length-1+se.length),Qe=0;Qe<Se.length-1;Qe++)Fe[Qe]=Ky(Se[Qe]);var Pe=Se[Se.length-1].slice();for(Pe.reverse(),Qe=0;Qe<se.length;Qe++)Fe[Se.length-1+Qe]=Ky(se[Qe].concat(Pe))}return Fe};$.length?(x?(x.datum(a),j&&te&&(k?(j[A]=te[A]=q,f(x).attr(\"d\",\"M\"+te+\"L\"+j+\"L\"+U.slice(1)).call(na.singleFillStyle,e),ae=ye(null)):(f(x).attr(\"d\",U+\"Z\").call(na.singleFillStyle,e),ae=Re())),d._polygons=ae,d._fillElement=x):_&&(d.fill.slice(0,6)===\"tonext\"&&U&&C?(d.fill===\"tonext\"?(f(_).attr(\"d\",U+\"Z\"+C+\"Z\").call(na.singleFillStyle,e),ae=Re(),d._polygons=ae.concat(E)):(f(_).attr(\"d\",U+\"L\"+C.slice(1)+\"Z\").call(na.singleFillStyle,e),ae=ye(R),d._polygons=ae),d._fillElement=_):be(_)),d._prevRevpath=Y):(x?be(x):_&&be(_),d._prevRevpath=null),d._ownPolygons=ae;function Ce(Se){return Se.filter(function(Fe){return!Fe.gap&&Fe.vis})}function Me(Se){return Se.filter(function(Fe){return Fe.vis})}function Le(Se){return Se.filter(function(Fe){return!Fe.gap})}function De(Se){return Se.id}function Ne(Se){if(Se.ids)return De}function qe(){return!1}function Xe(Se,Fe,Qe){var re,xe,Ge,cr=Qe[0].trace,Pe=Mc.hasMarkers(cr),me=Mc.hasText(cr),Ae=Ne(cr),He=qe,Ze=qe;if(Pe||me){var Be=qG,je=cr.stackgroup,tr=je&&e._fullLayout._scatterStackOpts[c._id+v._id][je].stackgaps===\"infer zero\";cr.marker.maxdisplayed||cr._needsCull?Be=tr?Me:Ce:je&&!tr&&(Be=Le),Pe&&(He=Be),me&&(Ze=Be)}xe=Se.selectAll(\"path.point\"),re=xe.data(He,Ae);var ir=re.enter().append(\"path\").classed(\"point\",!0);u&&ir.call(na.pointStyle,cr,e).call(na.translatePoints,c,v).style(\"opacity\",0).transition().style(\"opacity\",1),re.order();var lr;Pe&&(lr=na.makePointStyleFns(cr)),re.each(function(Ee){var Je=Po.select(this),Ie=f(Je);Ge=na.translatePoint(Ee,Ie,c,v),Ge?(na.singlePointStyle(Ee,Ie,cr,lr,e),t.layerClipId&&na.hideOutsideRangePoint(Ee,Ie,c,v,cr.xcalendar,cr.ycalendar),cr.customdata&&Je.classed(\"plotly-customdata\",Ee.data!==null&&Ee.data!==void 0)):Ie.remove()}),u?re.exit().transition().style(\"opacity\",0).remove():re.exit().remove(),xe=Fe.selectAll(\"g\"),re=xe.data(Ze,Ae),re.enter().append(\"g\").classed(\"textpoint\",!0).append(\"text\"),re.order(),re.each(function(Ee){var Je=Po.select(this),Ie=f(Je.select(\"text\"));Ge=na.translatePoint(Ee,Ie,c,v),Ge?t.layerClipId&&na.hideOutsideRangePoint(Ee,Je,c,v,cr.xcalendar,cr.ycalendar):Je.remove()}),re.selectAll(\"text\").call(na.textPointStyle,cr,e).each(function(Ee){var Je=c.c2p(Ee.x),Ie=v.c2p(Ee.y);Po.select(this).selectAll(\"tspan.line\").each(function(){f(Po.select(this)).attr({x:Je,y:Ie})})}),re.exit().remove()}T.datum(a),w.datum(a),Xe(T,w,a);var $e=d.cliponaxis===!1,We=$e?null:t.layerClipId;na.setClipUrl(T,We,e),na.setClipUrl(w,We,e)}function I8e(e,r,t,a,n){var i=t.xaxis,o=t.yaxis,l=Po.extent(Dd.simpleMap(i.range,i.r2c)),s=Po.extent(Dd.simpleMap(o.range,o.r2c)),u=a[0].trace;if(Mc.hasMarkers(u)){var f=u.marker.maxdisplayed;if(f!==0){var c=a.filter(function(y){return y.x>=l[0]&&y.x<=l[1]&&y.y>=s[0]&&y.y<=s[1]}),v=Math.ceil(c.length/f),d=0;n.forEach(function(y,m){var b=y[0].trace;Mc.hasMarkers(b)&&b.marker.maxdisplayed>0&&m<r&&d++});var p=Math.round(d*v/3+Math.floor(d/3)*v/7.1);a.forEach(function(y){delete y.vis}),c.forEach(function(y,m){Math.round((m+p)%v)===0&&(y.vis=!0)})}}}});var Ed=z((Hje,CG)=>{\"use strict\";CG.exports={container:\"marker\",min:\"cmin\",max:\"cmax\"}});var Cw=z((Uje,DG)=>{\"use strict\";var Qy=Gr();DG.exports=function(r,t,a){var n={},i={_fullLayout:a},o=Qy.getFromTrace(i,t,\"x\"),l=Qy.getFromTrace(i,t,\"y\"),s=r.orig_x;s===void 0&&(s=r.x);var u=r.orig_y;return u===void 0&&(u=r.y),n.xLabel=Qy.tickText(o,o.c2l(s),!0).text,n.yLabel=Qy.tickText(l,l.c2l(u),!0).text,n}});var mf=z((Gje,EG)=>{\"use strict\";var Dw=Er(),kc=Zr(),B8e=Tr();function O8e(e){var r=Dw.select(e).selectAll(\"g.trace.scatter\");r.style(\"opacity\",function(t){return t[0].trace.opacity}),r.selectAll(\"g.points\").each(function(t){var a=Dw.select(this),n=t.trace||t[0].trace;Ew(a,n,e)}),r.selectAll(\"g.text\").each(function(t){var a=Dw.select(this),n=t.trace||t[0].trace;Pw(a,n,e)}),r.selectAll(\"g.trace path.js-line\").call(kc.lineGroupStyle),r.selectAll(\"g.trace path.js-fill\").call(kc.fillGroupStyle,e,!1),B8e.getComponentMethod(\"errorbars\",\"style\")(r)}function Ew(e,r,t){kc.pointStyle(e.selectAll(\"path.point\"),r,t)}function Pw(e,r,t){kc.textPointStyle(e.selectAll(\"text\"),r,t)}function H8e(e,r,t){var a=r[0].trace;a.selectedpoints?(kc.selectedPointStyle(t.selectAll(\"path.point\"),a),kc.selectedTextStyle(t.selectAll(\"text\"),a)):(Ew(t,a,e),Pw(t,a,e))}EG.exports={style:O8e,stylePoints:Ew,styleText:Pw,styleOnSelect:H8e}});var RG=z((Yje,PG)=>{\"use strict\";var Sc=Sr(),U8e=Jn();PG.exports=function(r,t){var a,n;if(r.mode===\"lines\")return a=r.line.color,a&&Sc.opacity(a)?a:r.fillcolor;if(r.mode===\"none\")return r.fill?r.fillcolor:\"\";var i=t.mcc||t.mc||(r.marker||{}).color,o=t.mlcc||((r.marker||{}).line||{}).color;return n=i&&Sc.opacity(i)?i:o&&Sc.opacity(o)&&(t.mlw||((r.marker||{}).line||{}).width)?o:\"\",n?Sc.opacity(n)<.3?Sc.addOpacity(n,.3):n:(a=(r.line||{}).color,a&&Sc.opacity(a)&&U8e.hasLines(r)&&r.line.width?a:r.fillcolor)}});var Fw=z((Vje,zG)=>{\"use strict\";var eg=ke(),FG=In(),G8e=Tr(),Y8e=RG(),Rw=Sr(),V8e=eg.fillText;zG.exports=function(r,t,a,n){var i=r.cd,o=i[0].trace,l=r.xa,s=r.ya,u=l.c2p(t),f=s.c2p(a),c=[u,f],v=o.hoveron||\"\",d=o.mode.indexOf(\"markers\")!==-1?3:.5,p=!!o.xperiodalignment,y=!!o.yperiodalignment;if(v.indexOf(\"points\")!==-1){var m=function(Y){if(p){var G=l.c2p(Y.xStart),V=l.c2p(Y.xEnd);return u>=Math.min(G,V)&&u<=Math.max(G,V)?0:1/0}var W=Math.max(3,Y.mrc||0),j=1-1/W,J=Math.abs(l.c2p(Y.x)-u);return J<W?j*J/W:J-W+j},b=function(Y){if(y){var G=s.c2p(Y.yStart),V=s.c2p(Y.yEnd);return f>=Math.min(G,V)&&f<=Math.max(G,V)?0:1/0}var W=Math.max(3,Y.mrc||0),j=1-1/W,J=Math.abs(s.c2p(Y.y)-f);return J<W?j*J/W:J-W+j},T=function(Y){var G=Math.max(d,Y.mrc||0),V=l.c2p(Y.x)-u,W=s.c2p(Y.y)-f;return Math.max(Math.sqrt(V*V+W*W)-G,1-d/G)},w=FG.getDistanceFunction(n,m,b,T);if(FG.getClosest(i,w,r),r.index!==!1){var x=i[r.index],_=l.c2p(x.x,!0),k=s.c2p(x.y,!0),A=x.mrc||1;r.index=x.i;var q=i[0].t.orientation,C=q&&(x.sNorm||x.s),E=q===\"h\"?C:x.orig_x!==void 0?x.orig_x:x.x,P=q===\"v\"?C:x.orig_y!==void 0?x.orig_y:x.y;return eg.extendFlat(r,{color:Y8e(o,x),x0:_-A,x1:_+A,xLabelVal:E,y0:k-A,y1:k+A,yLabelVal:P,spikeDistance:T(x),hovertemplate:o.hovertemplate}),V8e(x,o,r),G8e.getComponentMethod(\"errorbars\",\"hoverInfo\")(x,o,r),[r]}}function R(Y){if(!Y)return!1;var G=Y.node();try{var V=new DOMPoint(c[0],c[1]);return G.isPointInFill(V)}catch(j){var W=G.ownerSVGElement.createSVGPoint();return W.x=c[0],W.y=c[1],G.isPointInFill(W)}}function N(Y){var G,V=[],W=1/0,j=-1/0,J=1/0,te=-1/0,ae;for(G=0;G<Y.length;G++){var se=Y[G];se.contains(c)&&(V.push(se),J=Math.min(J,se.ymin),te=Math.max(te,se.ymax))}if(V.length===0)return null;J=Math.max(J,0),te=Math.min(te,s._length),ae=(J+te)/2;var $,fe,ie,ue,ce,oe,be;for(G=0;G<V.length;G++)for(fe=V[G].pts,$=1;$<fe.length;$++)oe=fe[$-1][1],be=fe[$][1],oe>ae!=be>=ae&&(ue=fe[$-1][0],ce=fe[$][0],be-oe&&(ie=ue+(ce-ue)*(ae-oe)/(be-oe),W=Math.min(W,ie),j=Math.max(j,ie)));return W=Math.max(W,0),j=Math.min(j,l._length),{x0:W,x1:j,y0:ae,y1:ae}}if(v.indexOf(\"fills\")!==-1&&o._fillElement){var I=R(o._fillElement)&&!R(o._fillExclusionElement);if(I){var O=N(o._polygons);O===null&&(O={x0:c[0],x1:c[0],y0:c[1],y1:c[1]});var U=Rw.defaultLine;return Rw.opacity(o.fillcolor)?U=o.fillcolor:Rw.opacity((o.line||{}).color)&&(U=o.line.color),eg.extendFlat(r,{distance:r.maxHoverDistance,x0:O.x0,x1:O.x1,y0:O.y0,y1:O.y1,color:U,hovertemplate:!1}),delete r.index,o.text&&!eg.isArrayOrTypedArray(o.text)?r.text=String(o.text):r.text=o.name,[r]}}}});var zw=z((jje,IG)=>{\"use strict\";var NG=Jn();IG.exports=function(r,t){var a=r.cd,n=r.xaxis,i=r.yaxis,o=[],l=a[0].trace,s,u,f,c,v=l.mode&&!NG.hasMarkers(l)&&!NG.hasText(l);if(v)return[];if(t===!1)for(s=0;s<a.length;s++)a[s].selected=0;else for(s=0;s<a.length;s++)u=a[s],f=n.c2p(u.x),c=i.c2p(u.y),u.i!==null&&t.contains([f,c],!1,s,r)?(o.push({pointNumber:u.i,x:n.c2d(u.x),y:i.c2d(u.y)}),u.selected=1):u.selected=0;return o}});var OG=z((Wje,BG)=>{\"use strict\";BG.exports={xaxis:{valType:\"subplotid\",dflt:\"x\",editType:\"calc+clearAxisTypes\"},yaxis:{valType:\"subplotid\",dflt:\"y\",editType:\"calc+clearAxisTypes\"}}});var YG=z((Xje,GG)=>{\"use strict\";var rg=Tr().traceIs,Nw=um();GG.exports=function(r,t,a,n){a(\"autotypenumbers\",n.autotypenumbersDflt);var i=a(\"type\",(n.splomStash||{}).type);i===\"-\"&&(j8e(t,n.data),t.type===\"-\"?t.type=\"linear\":r.type=t.type)};function j8e(e,r){if(e.type===\"-\"){var t=e._id,a=t.charAt(0),n;t.indexOf(\"scene\")!==-1&&(t=a);var i=W8e(r,t,a);if(i){if(i.type===\"histogram\"&&a==={v:\"y\",h:\"x\"}[i.orientation||\"v\"]){e.type=\"linear\";return}var o=a+\"calendar\",l=i[o],s={noMultiCategory:!rg(i,\"cartesian\")||rg(i,\"noMultiCategory\")};if(i.type===\"box\"&&i._hasPreCompStats&&a==={h:\"x\",v:\"y\"}[i.orientation||\"v\"]&&(s.noMultiCategory=!0),s.autotypenumbers=e.autotypenumbers,UG(i,a)){var u=HG(i),f=[];for(n=0;n<r.length;n++){var c=r[n];!rg(c,\"box-violin\")||(c[a+\"axis\"]||a)!==t||(c[u]!==void 0?f.push(c[u][0]):c.name!==void 0?f.push(c.name):f.push(\"text\"),c[o]!==l&&(l=void 0))}e.type=Nw(f,l,s)}else if(i.type===\"splom\"){var v=i.dimensions,d=v[i._axesDim[t]];d.visible&&(e.type=Nw(d.values,l,s))}else e.type=Nw(i[a]||[i[a+\"0\"]],l,s)}}}function W8e(e,r,t){for(var a=0;a<e.length;a++){var n=e[a];if(n.type===\"splom\"&&n._length>0&&(n[\"_\"+t+\"axes\"]||{})[r])return n;if((n[t+\"axis\"]||t)===r){if(UG(n,t))return n;if((n[t]||[]).length||n[t+\"0\"])return n}}}function HG(e){return{v:\"x\",h:\"y\"}[e.orientation||\"v\"]}function UG(e,r){var t=HG(e),a=rg(e,\"box-violin\");return a&&r===t&&e[t]===void 0&&e[t+\"0\"]===void 0}});var jG=z((Zje,VG)=>{\"use strict\";var X8e=Vn().isTypedArraySpec;function Z8e(e,r){var t=r.dataAttr||e._id.charAt(0),a={},n,i,o;if(r.axData)n=r.axData;else for(n=[],i=0;i<r.data.length;i++){var l=r.data[i];l[t+\"axis\"]===e._id&&n.push(l)}for(i=0;i<n.length;i++){var s=n[i][t];for(o=0;o<s.length;o++){var u=s[o];u!=null&&(a[u]=1)}}return Object.keys(a)}VG.exports=function(r,t,a,n){if(t.type===\"category\"){var i=r.categoryarray,o=Array.isArray(i)&&i.length>0||X8e(i),l;o&&(l=\"array\");var s=a(\"categoryorder\",l),u;s===\"array\"&&(u=a(\"categoryarray\")),!o&&s===\"array\"&&(s=t.categoryorder=\"trace\"),s===\"trace\"?t._initialCategories=[]:s===\"array\"?t._initialCategories=u.slice():(u=Z8e(t,n).sort(),s===\"category ascending\"?t._initialCategories=u:s===\"category descending\"&&(t._initialCategories=u.reverse()))}}});var Iw=z(($je,XG)=>{\"use strict\";var WG=Sr(),$8e=Ei(),J8e=ke();XG.exports=function(r,t,a,n){n=n||{};var i=n.dfltColor;function o(q,C){return J8e.coerce2(r,t,n.attributes,q,C)}var l=o(\"linecolor\",i),s=o(\"linewidth\"),u=a(\"showline\",n.showLine||!!l||!!s);u||(delete t.linecolor,delete t.linewidth);var f=WG.mix(i,n.bgColor,n.blend||$8e.lightFraction),c=o(\"gridcolor\",f),v=o(\"gridwidth\"),d=o(\"griddash\"),p=a(\"showgrid\",n.showGrid||!!c||!!v||!!d);if(p||(delete t.gridcolor,delete t.gridwidth,delete t.griddash),n.hasMinor){var y=WG.mix(t.gridcolor,n.bgColor,67),m=o(\"minor.gridcolor\",y),b=o(\"minor.gridwidth\",t.gridwidth||1),T=o(\"minor.griddash\",t.griddash||\"solid\"),w=a(\"minor.showgrid\",!!m||!!b||!!T);w||(delete t.minor.gridcolor,delete t.minor.gridwidth,delete t.minor.griddash)}if(!n.noZeroLine){var x=o(\"zerolinelayer\"),_=o(\"zerolinecolor\",i),k=o(\"zerolinewidth\"),A=a(\"zeroline\",n.showGrid||!!_||!!k);A||(delete t.zerolinelayer,delete t.zerolinecolor,delete t.zerolinewidth)}}});var Ow=z((Jje,eY)=>{\"use strict\";var ZG=Ir(),K8e=Tr(),Pd=ke(),Q8e=St(),e9e=So(),Bw=Ni(),$G=Yp(),JG=Vp(),r9e=Wp(),t9e=Xp(),a9e=jG(),n9e=Iw(),i9e=y6(),KG=ec(),tg=qa().WEEKDAY_PATTERN,o9e=qa().HOUR_PATTERN;eY.exports=function(r,t,a,n,i){var o=n.letter,l=n.font||{},s=n.splomStash||{},u=a(\"visible\",!n.visibleDflt),f=t._template||{},c=t.type||f.type||\"-\",v;if(c===\"date\"){var d=K8e.getComponentMethod(\"calendars\",\"handleDefaults\");d(r,t,\"calendar\",n.calendar),n.noTicklabelmode||(v=a(\"ticklabelmode\"))}!n.noTicklabelindex&&(c===\"date\"||c===\"linear\")&&a(\"ticklabelindex\");var p=\"\";(!n.noTicklabelposition||c===\"multicategory\")&&(p=Pd.coerce(r,t,{ticklabelposition:{valType:\"enumerated\",dflt:\"outside\",values:v===\"period\"?[\"outside\",\"inside\"]:o===\"x\"?[\"outside\",\"inside\",\"outside left\",\"inside left\",\"outside right\",\"inside right\"]:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"]}},\"ticklabelposition\")),n.noTicklabeloverflow||a(\"ticklabeloverflow\",p.indexOf(\"inside\")!==-1?\"hide past domain\":c===\"category\"||c===\"multicategory\"?\"allow\":\"hide past div\"),KG(t,i),i9e(r,t,a,n),a9e(r,t,a,n),n.noHover||(c!==\"category\"&&a(\"hoverformat\"),n.noUnifiedhovertitle||a(\"unifiedhovertitle.text\"));var y=a(\"color\"),m=y!==Bw.color.dflt?y:l.color,b=s.label||i._dfltTitle[o];if(t9e(r,t,a,c,n),!u)return t;a(\"title.text\",b),Pd.coerceFont(a,\"title.font\",l,{overrideDflt:{size:Pd.bigFont(l.size),color:m}}),$G(r,t,a,c);var T=n.hasMinor;if(T&&(Q8e.newContainer(t,\"minor\"),$G(r,t,a,c,{isMinor:!0})),r9e(r,t,a,c,n),JG(r,t,a,n),T){var w=n.isMinor;n.isMinor=!0,JG(r,t,a,n),n.isMinor=w}n9e(r,t,a,{dfltColor:y,bgColor:n.bgColor,showGrid:n.showGrid,hasMinor:T,attributes:Bw}),T&&t.ticklabelindex==null&&!t.minor.ticks&&!t.minor.showgrid&&delete t.minor,(t.showline||t.ticks)&&a(\"mirror\");var x=c===\"multicategory\";if(!n.noTickson&&(c===\"category\"||x)&&(t.ticks||t.showgrid)&&(x?(a(\"tickson\",\"boundaries\"),delete t.ticklabelposition):a(\"tickson\")),x){var _=a(\"showdividers\");_&&(a(\"dividercolor\"),a(\"dividerwidth\"))}if(c===\"date\")if(e9e(r,t,{name:\"rangebreaks\",inclusionAttr:\"enabled\",handleItemDefaults:l9e}),!t.rangebreaks.length)delete t.rangebreaks;else{for(var k=0;k<t.rangebreaks.length;k++)if(t.rangebreaks[k].pattern===tg){t._hasDayOfWeekBreaks=!0;break}if(KG(t,i),i._has(\"scattergl\")||i._has(\"splom\"))for(var A=0;A<n.data.length;A++){var q=n.data[A];(q.type===\"scattergl\"||q.type===\"splom\")&&(q.visible=!1,Pd.warn(q.type+\" traces do not work on axes with rangebreaks. Setting trace \"+q.index+\" to `visible: false`.\"))}}return t};function l9e(e,r,t){function a(v,d){return Pd.coerce(e,r,Bw.rangebreaks,v,d)}var n=a(\"enabled\");if(n){var i=a(\"bounds\");if(i&&i.length>=2){var o=\"\",l,s;if(i.length===2){for(l=0;l<2;l++)if(s=QG(i[l]),s){o=tg;break}}var u=a(\"pattern\",o);if(u===tg)for(l=0;l<2;l++)s=QG(i[l]),s&&(r.bounds[l]=i[l]=s-1);if(u)for(l=0;l<2;l++)switch(s=i[l],u){case tg:if(!ZG(s)){r.enabled=!1;return}if(s=+s,s!==Math.floor(s)||s<0||s>=7){r.enabled=!1;return}r.bounds[l]=i[l]=s;break;case o9e:if(!ZG(s)){r.enabled=!1;return}if(s=+s,s<0||s>24){r.enabled=!1;return}r.bounds[l]=i[l]=s;break}if(t.autorange===!1){var f=t.range;if(f[0]<f[1]){if(i[0]<f[0]&&i[1]>f[1]){r.enabled=!1;return}}else if(i[0]>f[0]&&i[1]<f[1]){r.enabled=!1;return}}}else{var c=a(\"values\");if(c&&c.length)a(\"dvalue\");else{r.enabled=!1;return}}}}var s9e={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function QG(e){if(typeof e==\"string\")return s9e[e.slice(0,3).toLowerCase()]}});var Hw=z((Kje,rY)=>{\"use strict\";var u9e=Ir(),ag=ke();rY.exports=function(r,t,a,n){var i=n.counterAxes||[],o=n.overlayableAxes||[],l=n.letter,s=n.grid,u=n.overlayingDomain,f,c,v,d,p,y;s&&(c=s._domains[l][s._axisMap[t._id]],f=s._anchors[t._id],c&&(v=s[l+\"side\"].split(\" \")[0],d=s.domain[l][v===\"right\"||v===\"top\"?1:0])),c=c||[0,1],f=f||(u9e(r.position)?\"free\":i[0]||\"free\"),v=v||(l===\"x\"?\"bottom\":\"left\"),d=d||0,p=0,y=!1;var m=ag.coerce(r,t,{anchor:{valType:\"enumerated\",values:[\"free\"].concat(i),dflt:f}},\"anchor\"),b=ag.coerce(r,t,{side:{valType:\"enumerated\",values:l===\"x\"?[\"bottom\",\"top\"]:[\"left\",\"right\"],dflt:v}},\"side\");if(m===\"free\"){if(l===\"y\"){var T=a(\"autoshift\");T&&(d=b===\"left\"?u[0]:u[1],y=t.automargin?t.automargin:!0,p=b===\"left\"?-3:3),a(\"shift\",p)}a(\"position\",d)}a(\"automargin\",y);var w=!1;if(o.length&&(w=ag.coerce(r,t,{overlaying:{valType:\"enumerated\",values:[!1].concat(o),dflt:!1}},\"overlaying\")),!w){var x=a(\"domain\",c);x[0]>x[1]-1/4096&&(t.domain=c),ag.noneOrAll(r.domain,t.domain,c),t.tickmode===\"sync\"&&(t.tickmode=\"auto\")}return a(\"layer\"),t}});var fY=z((Qje,uY)=>{\"use strict\";var yf=ke(),tY=Sr(),f9e=qo().isUnifiedHover,c9e=Y6(),aY=St(),v9e=P0(),nY=Ni(),h9e=YG(),iY=Ow(),d9e=vf(),oY=Hw(),Gw=ba(),ml=Gw.id2name,lY=Gw.name2id,p9e=qa().AX_ID_PATTERN,sY=Tr(),ng=sY.traceIs,Uw=sY.getComponentMethod;function ig(e,r,t){Array.isArray(e[r])?e[r].push(t):e[r]=[t]}uY.exports=function(r,t,a){var n=t.autotypenumbers,i={},o={},l={},s={},u={},f={},c={},v={},d={},p={},y,m;for(y=0;y<a.length;y++){var b=a[y];if(ng(b,\"cartesian\")){var T;if(b.xaxis)T=ml(b.xaxis),ig(i,T,b);else if(b.xaxes)for(m=0;m<b.xaxes.length;m++)ig(i,ml(b.xaxes[m]),b);var w;if(b.yaxis)w=ml(b.yaxis),ig(i,w,b);else if(b.yaxes)for(m=0;m<b.yaxes.length;m++)ig(i,ml(b.yaxes[m]),b);if(b.type===\"funnel\"?b.orientation===\"h\"?(T&&(o[T]=!0),w&&(c[w]=!0)):w&&(l[w]=!0):b.type===\"image\"?(w&&(v[w]=!0),T&&(v[T]=!0)):(w&&(u[w]=!0,f[w]=!0),(!ng(b,\"carpet\")||b.type===\"carpet\"&&!b._cheater)&&T&&(s[T]=!0)),b.type===\"carpet\"&&b._cheater&&T&&(o[T]=!0),ng(b,\"2dMap\")&&(d[T]=!0,d[w]=!0),ng(b,\"oriented\")){var x=b.orientation===\"h\"?w:T;p[x]=!0}}}var _=t._subplots,k=_.xaxis,A=_.yaxis,q=yf.simpleMap(k,ml),C=yf.simpleMap(A,ml),E=q.concat(C),P=tY.background;k.length&&A.length&&(P=yf.coerce(r,t,v9e,\"plot_bgcolor\"));var R=tY.combine(P,t.paper_bgcolor),N,I,O,U,Y;function G(){var xe=i[N]||[];Y._traceIndices=xe.map(function(Ge){return Ge.index}),Y._annIndices=[],Y._shapeIndices=[],Y._selectionIndices=[],Y._imgIndices=[],Y._subplotsWith=[],Y._counterAxes=[],Y._name=Y._attr=N,Y._id=I}function V(xe,Ge){return yf.coerce(U,Y,nY,xe,Ge)}function W(xe,Ge){return yf.coerce2(U,Y,nY,xe,Ge)}function j(xe){return xe===\"x\"?A:k}function J(xe,Ge){for(var cr=xe===\"x\"?q:C,Pe=[],me=0;me<cr.length;me++){var Ae=cr[me];Ae!==Ge&&!(r[Ae]||{}).overlaying&&Pe.push(lY(Ae))}return Pe}var te={x:j(\"x\"),y:j(\"y\")},ae=te.x.concat(te.y),se={},$=[];function fe(){var xe=U.matches;p9e.test(xe)&&ae.indexOf(xe)===-1&&(se[xe]=U.type,$=Object.keys(se))}var ie=c9e(r,t),ue=f9e(ie);for(y=0;y<E.length;y++){N=E[y],I=lY(N),O=N.charAt(0),yf.isPlainObject(r[N])||(r[N]={}),U=r[N],Y=aY.newContainer(t,N,O+\"axis\"),G();var ce=O===\"x\"&&!s[N]&&o[N]||O===\"y\"&&!u[N]&&l[N],oe=O===\"y\"&&(!f[N]&&c[N]||v[N]),be={hasMinor:!0,letter:O,font:t.font,outerTicks:d[N],showGrid:!p[N],data:i[N]||[],bgColor:R,calendar:t.calendar,automargin:!0,visibleDflt:ce,reverseDflt:oe,autotypenumbersDflt:n,splomStash:((t._splomAxes||{})[O]||{})[I],noAutotickangles:O===\"y\"};V(\"uirevision\",t.uirevision),h9e(U,Y,V,be),iY(U,Y,V,be,t);var Re=ue&&O===ie.charAt(0),ye=W(\"spikecolor\",ue?Y.color:void 0),Ce=W(\"spikethickness\",ue?1.5:void 0),Me=W(\"spikedash\",ue?\"dot\":void 0),Le=W(\"spikemode\",ue?\"across\":void 0),De=W(\"spikesnap\"),Ne=V(\"showspikes\",!!Re||!!ye||!!Ce||!!Me||!!Le||!!De);Ne||(delete Y.spikecolor,delete Y.spikethickness,delete Y.spikedash,delete Y.spikemode,delete Y.spikesnap);var qe=ml(U.overlaying),Xe=[0,1];if(t[qe]!==void 0){var $e=ml(t[qe].anchor);t[$e]!==void 0&&(Xe=t[$e].domain)}oY(U,Y,V,{letter:O,counterAxes:te[O],overlayableAxes:J(O,N),grid:t.grid,overlayingDomain:Xe}),V(\"title.standoff\"),fe(),Y._input=U}for(y=0;y<$.length;){I=$[y++],N=ml(I),O=N.charAt(0),yf.isPlainObject(r[N])||(r[N]={}),U=r[N],Y=aY.newContainer(t,N,O+\"axis\"),G();var We={letter:O,font:t.font,outerTicks:d[N],showGrid:!p[N],data:[],bgColor:R,calendar:t.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,autotypenumbersDflt:n,splomStash:((t._splomAxes||{})[O]||{})[I]};V(\"uirevision\",t.uirevision),Y.type=se[I]||\"linear\",iY(U,Y,V,We,t),oY(U,Y,V,{letter:O,counterAxes:te[O],overlayableAxes:J(O,N),grid:t.grid}),V(\"fixedrange\"),V(\"modebardisable\"),fe(),Y._input=U}var Se=Uw(\"rangeslider\",\"handleDefaults\"),Fe=Uw(\"rangeselector\",\"handleDefaults\");for(y=0;y<q.length;y++)N=q[y],U=r[N],Y=t[N],Se(r,t,N),Y.type===\"date\"&&Fe(U,Y,t,C,Y.calendar),V(\"fixedrange\"),V(\"modebardisable\");for(y=0;y<C.length;y++){N=C[y],U=r[N],Y=t[N];var Qe=t[ml(Y.anchor)],re=Uw(\"rangeslider\",\"isVisible\")(Qe);V(\"fixedrange\",re),V(\"modebardisable\")}d9e.handleDefaults(r,t,{axIds:ae.concat($).sort(Gw.idSort),axHasImage:v})}});var hY=z((eWe,vY)=>{\"use strict\";var m9e=Er(),cY=Tr(),og=ke(),_i=Zr(),lg=Gr();vY.exports=function(r,t,a,n){var i=r._fullLayout;if(t.length===0){lg.redrawComponents(r);return}function o(m){var b=m.xaxis,T=m.yaxis;i._defs.select(\"#\"+m.clipId+\"> rect\").call(_i.setTranslate,0,0).call(_i.setScale,1,1),m.plot.call(_i.setTranslate,b._offset,T._offset).call(_i.setScale,1,1);var w=m.plot.selectAll(\".scatterlayer .trace\");w.selectAll(\".point\").call(_i.setPointGroupScale,1,1),w.selectAll(\".textpoint\").call(_i.setTextPointsScale,1,1),w.call(_i.hideOutsideRangePoints,m)}function l(m,b){var T=m.plotinfo,w=T.xaxis,x=T.yaxis,_=w._length,k=x._length,A=!!m.xr1,q=!!m.yr1,C=[];if(A){var E=og.simpleMap(m.xr0,w.r2l),P=og.simpleMap(m.xr1,w.r2l),R=E[1]-E[0],N=P[1]-P[0];C[0]=(E[0]*(1-b)+b*P[0]-E[0])/(E[1]-E[0])*_,C[2]=_*(1-b+b*N/R),w.range[0]=w.l2r(E[0]*(1-b)+b*P[0]),w.range[1]=w.l2r(E[1]*(1-b)+b*P[1])}else C[0]=0,C[2]=_;if(q){var I=og.simpleMap(m.yr0,x.r2l),O=og.simpleMap(m.yr1,x.r2l),U=I[1]-I[0],Y=O[1]-O[0];C[1]=(I[1]*(1-b)+b*O[1]-I[1])/(I[0]-I[1])*k,C[3]=k*(1-b+b*Y/U),x.range[0]=w.l2r(I[0]*(1-b)+b*O[0]),x.range[1]=x.l2r(I[1]*(1-b)+b*O[1])}else C[1]=0,C[3]=k;lg.drawOne(r,w,{skipTitle:!0}),lg.drawOne(r,x,{skipTitle:!0}),lg.redrawComponents(r,[w._id,x._id]);var G=A?_/C[2]:1,V=q?k/C[3]:1,W=A?C[0]:0,j=q?C[1]:0,J=A?C[0]/C[2]*_:0,te=q?C[1]/C[3]*k:0,ae=w._offset-J,se=x._offset-te;T.clipRect.call(_i.setTranslate,W,j).call(_i.setScale,1/G,1/V),T.plot.call(_i.setTranslate,ae,se).call(_i.setScale,G,V),_i.setPointGroupScale(T.zoomScalePts,1/G,1/V),_i.setTextPointsScale(T.zoomScaleTxt,1/G,1/V)}var s;n&&(s=n());function u(){for(var m={},b=0;b<t.length;b++){var T=t[b],w=T.plotinfo.xaxis,x=T.plotinfo.yaxis;T.xr1&&(m[w._name+\".range\"]=T.xr1.slice()),T.yr1&&(m[x._name+\".range\"]=T.yr1.slice())}return s&&s(),cY.call(\"relayout\",r,m).then(function(){for(var _=0;_<t.length;_++)o(t[_].plotinfo)})}function f(){for(var m={},b=0;b<t.length;b++){var T=t[b],w=T.plotinfo.xaxis,x=T.plotinfo.yaxis;T.xr0&&(m[w._name+\".range\"]=T.xr0.slice()),T.yr0&&(m[x._name+\".range\"]=T.yr0.slice())}return cY.call(\"relayout\",r,m).then(function(){for(var _=0;_<t.length;_++)o(t[_].plotinfo)})}var c,v,d,p=m9e.ease(a.easing);r._transitionData._interruptCallbacks.push(function(){return window.cancelAnimationFrame(d),d=null,f()});function y(){v=Date.now();for(var m=Math.min(1,(v-c)/a.duration),b=p(m),T=0;T<t.length;T++)l(t[T],b);v-c>a.duration?(u(),d=window.cancelAnimationFrame(y)):d=window.requestAnimationFrame(y)}return c=Date.now(),d=window.requestAnimationFrame(y),Promise.resolve()}});var Qi=z(vn=>{\"use strict\";var ug=Er(),dY=Tr(),gf=ke(),y9e=va(),g9e=Zr(),pY=Np().getModuleCalcData,Gs=ba(),Ro=qa(),b9e=Il(),tt=gf.ensureSingle;function sg(e,r,t){return gf.ensureSingle(e,r,t,function(a){a.datum(t)})}var bf=Ro.zindexSeparator;vn.name=\"cartesian\";vn.attr=[\"xaxis\",\"yaxis\"];vn.idRoot=[\"x\",\"y\"];vn.idRegex=Ro.idRegex;vn.attrRegex=Ro.attrRegex;vn.attributes=OG();vn.layoutAttributes=Ni();vn.supplyLayoutDefaults=fY();vn.transitionAxes=hY();vn.finalizeSubplots=function(e,r){var t=r._subplots,a=t.xaxis,n=t.yaxis,i=t.cartesian,o=i,l={},s={},u,f,c;for(u=0;u<o.length;u++){var v=o[u].split(\"y\");l[v[0]]=1,s[\"y\"+v[1]]=1}for(u=0;u<a.length;u++)f=a[u],l[f]||(c=(e[Gs.id2name(f)]||{}).anchor,Ro.idRegex.y.test(c)||(c=\"y\"),i.push(f+c),o.push(f+c),s[c]||(s[c]=1,gf.pushUnique(n,c)));for(u=0;u<n.length;u++)c=n[u],s[c]||(f=(e[Gs.id2name(c)]||{}).anchor,Ro.idRegex.x.test(f)||(f=\"x\"),i.push(f+c),o.push(f+c),l[f]||(l[f]=1,gf.pushUnique(a,f)));if(!o.length){f=\"\",c=\"\";for(var d in e)if(Ro.attrRegex.test(d)){var p=d.charAt(0);p===\"x\"?(!f||+d.slice(5)<+f.slice(5))&&(f=d):(!c||+d.slice(5)<+c.slice(5))&&(c=d)}f=f?Gs.name2id(f):\"x\",c=c?Gs.name2id(c):\"y\",a.push(f),n.push(c),i.push(f+c)}};vn.plot=function(e,r,t,a){var n=e._fullLayout,i=n._subplots.cartesian,o=e.calcdata,l;if(!Array.isArray(r))for(r=[],l=0;l<o.length;l++)r.push(l);for(var s=n._zindices,u=0;u<s.length;u++){var f=s[u];for(l=0;l<i.length;l++){var c=i[l],v=n._plots[c];if(u>0){var d=v.id;if(d.indexOf(bf)!==-1)continue;d+=bf+(u+1),v=gf.extendFlat({},v,{id:d,plot:n._cartesianlayer.selectAll(\".subplot\").select(\".\"+d)})}for(var p=[],y,m=0;m<o.length;m++){var b=o[m],T=b[0].trace;f===(T.zorder||0)&&T.xaxis+T.yaxis===c&&((r.indexOf(T.index)!==-1||T.carpet)&&(y&&y[0].trace.xaxis+y[0].trace.yaxis===c&&[\"tonextx\",\"tonexty\",\"tonext\"].indexOf(T.fill)!==-1&&p.indexOf(y)===-1&&p.push(y),p.push(b)),y=b)}mY(e,v,p,t,a)}}};function mY(e,r,t,a,n){for(var i=Ro.traceLayerClasses,o=e._fullLayout,l=o._zindices,s=o._modules,u,f,c,v=[],d=[],p=0;p<l.length;p++)for(var y=l[p],m=0;m<s.length;m++){u=s[m];var b=u.name,T=dY.modules[b].categories;if(T.svg){var w=u.layerName||b+\"layer\",x=w+(p?Number(p)+1:\"\"),_=u.plot;f=pY(t,_,y),c=f[0],t=f[1],c.length&&v.push({i:i.indexOf(w),zindex:p,className:x,plotMethod:_,cdModule:c}),T.zoomScale&&d.push(\".\"+x)}}v.sort(function(q,C){return(q.zindex||0)-(C.zindex||0)||q.i-C.i});var k=r.plot.selectAll(\"g.mlayer\").data(v,function(q){return q.className});if(k.enter().append(\"g\").attr(\"class\",function(q){return q.className}).classed(\"mlayer\",!0).classed(\"rangeplot\",r.isRangePlot),k.exit().remove(),k.order(),k.each(function(q){var C=ug.select(this),E=q.className;q.plotMethod(e,r,q.cdModule,C,a,n),Ro.clipOnAxisFalseQuery.indexOf(\".\"+E)===-1&&g9e.setClipUrl(C,r.layerClipId,e)}),o._has(\"scattergl\")&&(u=dY.getModule(\"scattergl\"),c=pY(t,u)[0],u.plot(e,r,c)),!e._context.staticPlot&&(r._hasClipOnAxisFalse&&(r.clipOnAxisFalseTraces=r.plot.selectAll(Ro.clipOnAxisFalseQuery.join(\",\")).selectAll(\".trace\")),d.length)){var A=r.plot.selectAll(d.join(\",\")).selectAll(\".trace\");r.zoomScalePts=A.selectAll(\"path.point\"),r.zoomScaleTxt=A.selectAll(\".textpoint\")}}vn.clean=function(e,r,t,a){var n=a._plots||{},i=r._plots||{},o=a._subplots||{},l,s,u;if(a._hasOnlyLargeSploms&&!r._hasOnlyLargeSploms)for(u in n)l=n[u],l.plotgroup&&l.plotgroup.remove();var f=a._has&&a._has(\"gl\"),c=r._has&&r._has(\"gl\");if(f&&!c)for(u in n)l=n[u],l._scene&&l._scene.destroy();if(o.xaxis&&o.yaxis){var v=Gs.listIds({_fullLayout:a});for(s=0;s<v.length;s++){var d=v[s];r[Gs.id2name(d)]||a._infolayer.selectAll(\".g-\"+d+\"title\").remove()}}var p=a._has&&a._has(\"cartesian\"),y=r._has&&r._has(\"cartesian\");if(p&&!y)gY(a._cartesianlayer.selectAll(\".subplot\"),a),a._defs.selectAll(\".axesclip\").remove(),delete a._axisConstraintGroups,delete a._axisMatchGroups;else if(o.cartesian)for(s=0;s<o.cartesian.length;s++){var m=o.cartesian[s];if(m.indexOf(bf)===-1&&!i[m]){var b=\".\"+m+\",.\"+m+\"-x,.\"+m+\"-y\";a._cartesianlayer.selectAll(b).remove(),bY(m,a)}}};vn.drawFramework=function(e){var r=e._fullLayout,t=e.calcdata,a,n={};for(a=0;a<t.length;a++){var i=t[a][0],o=i.trace,l=o.zorder||0;n[l]||(n[l]=[]),n[l].push(i)}var s=Object.keys(n).map(Number).sort(gf.sorterAsc);s.length||(s=[0]),r._zindices=s;var u=x9e(e),f=u.length,c=[];for(a=0;a<f;a++)c[a]=u[a].slice();for(var v=1;v<s.length;v++){var d=[];for(a=0;a<f;a++)d[a]=u[a].slice(),d[a][0]+=bf+(v+1);c=c.concat(d)}var p=r._cartesianlayer.selectAll(\".subplot\").data(c,String);p.enter().append(\"g\").attr(\"class\",function(y){return\"subplot \"+y[0]}),p.order(),p.exit().call(gY,r),p.each(function(y){var m=y[0],b=m.indexOf(bf),T=b!==-1,w=T?m.slice(0,b):m,x=r._plots[m];x||(x=gf.extendFlat({},r._plots[w]),x&&(x.id=m,r._plots[m]=x,r._subplots.cartesian.push(m))),x&&(x.plotgroup=ug.select(this),yY(e,x),T||(x.draglayer=tt(r._draggers,\"g\",m)))})};vn.rangePlot=function(e,r,t){yY(e,r),mY(e,r,t),y9e.style(e)};function x9e(e){var r=e._fullLayout,t=r._zindices.length,a=r._subplots.cartesian,n=a.length,i,o,l,s,u,f,c=[],v=[];for(i=0;i<n;i++){l=a[i],s=r._plots[l],u=s.xaxis,f=s.yaxis;var d=u._mainAxis,p=f._mainAxis,y=d._id+p._id,m=r._plots[y];s.overlays=[],y!==l&&m?(s.mainplot=y,s.mainplotinfo=m,v.push(l)):(s.mainplot=void 0,s.mainplotinfo=void 0,c.push(l))}for(i=0;i<v.length;i++)l=v[i],s=r._plots[l],s.mainplotinfo.overlays.push(s);var b=c.concat(v),T=[];for(i=0;i<n;i++){l=b[i],s=r._plots[l],u=s.xaxis,f=s.yaxis;for(var w=[],x=1;x<=t;x++){var _=\"\";for(x>1&&(_+=bf+x),w.push(l+_),o=0;o<s.overlays.length;o++)w.push(s.overlays[o].id+_)}w=w.concat([u.layer,f.layer,u.overlaying||\"\",f.overlaying||\"\"]),T.push(w)}return T}function yY(e,r){var t=e._fullLayout,a=r.plotgroup,n=r.id,i=n.indexOf(bf),o=i!==-1,l=Ro.layerValue2layerClass[r.xaxis.layer],s=Ro.layerValue2layerClass[r.yaxis.layer],u=t._hasOnlyLargeSploms,f=t._zindices.length>1,c=r.mainplotinfo;if(!r.mainplot||f)if(u)r.xlines=tt(a,\"path\",\"xlines-above\"),r.ylines=tt(a,\"path\",\"ylines-above\"),r.xaxislayer=tt(a,\"g\",\"xaxislayer-above\"),r.yaxislayer=tt(a,\"g\",\"yaxislayer-above\");else{if(!o){var v=tt(a,\"g\",\"layer-subplot\");r.shapelayer=tt(v,\"g\",\"shapelayer\"),r.imagelayer=tt(v,\"g\",\"imagelayer\"),c&&f?(r.minorGridlayer=c.minorGridlayer,r.gridlayer=c.gridlayer,r.zerolinelayer=c.zerolinelayer):(r.minorGridlayer=tt(a,\"g\",\"minor-gridlayer\"),r.gridlayer=tt(a,\"g\",\"gridlayer\"),r.zerolinelayer=tt(a,\"g\",\"zerolinelayer\"));var d=tt(a,\"g\",\"layer-between\");r.shapelayerBetween=tt(d,\"g\",\"shapelayer\"),r.imagelayerBetween=tt(d,\"g\",\"imagelayer\"),tt(a,\"path\",\"xlines-below\"),tt(a,\"path\",\"ylines-below\"),r.overlinesBelow=tt(a,\"g\",\"overlines-below\"),tt(a,\"g\",\"xaxislayer-below\"),tt(a,\"g\",\"yaxislayer-below\"),r.overaxesBelow=tt(a,\"g\",\"overaxes-below\")}r.overplot=tt(a,\"g\",\"overplot\"),r.plot=tt(r.overplot,\"g\",n),c&&f?r.zerolinelayerAbove=c.zerolinelayerAbove:r.zerolinelayerAbove=tt(a,\"g\",\"zerolinelayer-above\"),o||(r.xlines=tt(a,\"path\",\"xlines-above\"),r.ylines=tt(a,\"path\",\"ylines-above\"),r.overlinesAbove=tt(a,\"g\",\"overlines-above\"),tt(a,\"g\",\"xaxislayer-above\"),tt(a,\"g\",\"yaxislayer-above\"),r.overaxesAbove=tt(a,\"g\",\"overaxes-above\"),r.xlines=a.select(\".xlines-\"+l),r.ylines=a.select(\".ylines-\"+s),r.xaxislayer=a.select(\".xaxislayer-\"+l),r.yaxislayer=a.select(\".yaxislayer-\"+s))}else{var p=c.plotgroup,y=n+\"-x\",m=n+\"-y\";r.minorGridlayer=c.minorGridlayer,r.gridlayer=c.gridlayer,r.zerolinelayer=c.zerolinelayer,r.zerolinelayerAbove=c.zerolinelayerAbove,tt(c.overlinesBelow,\"path\",y),tt(c.overlinesBelow,\"path\",m),tt(c.overaxesBelow,\"g\",y),tt(c.overaxesBelow,\"g\",m),r.plot=tt(c.overplot,\"g\",n),tt(c.overlinesAbove,\"path\",y),tt(c.overlinesAbove,\"path\",m),tt(c.overaxesAbove,\"g\",y),tt(c.overaxesAbove,\"g\",m),r.xlines=p.select(\".overlines-\"+l).select(\".\"+y),r.ylines=p.select(\".overlines-\"+s).select(\".\"+m),r.xaxislayer=p.select(\".overaxes-\"+l).select(\".\"+y),r.yaxislayer=p.select(\".overaxes-\"+s).select(\".\"+m)}o||(u||(sg(r.minorGridlayer,\"g\",r.xaxis._id),sg(r.minorGridlayer,\"g\",r.yaxis._id),r.minorGridlayer.selectAll(\"g\").map(function(b){return b[0]}).sort(Gs.idSort),sg(r.gridlayer,\"g\",r.xaxis._id),sg(r.gridlayer,\"g\",r.yaxis._id),r.gridlayer.selectAll(\"g\").map(function(b){return b[0]}).sort(Gs.idSort)),r.xlines.style(\"fill\",\"none\").classed(\"crisp\",!0),r.ylines.style(\"fill\",\"none\").classed(\"crisp\",!0))}function gY(e,r){if(e){var t={};e.each(function(s){var u=s[0],f=ug.select(this);f.remove(),bY(u,r),t[u]=!0});for(var a in r._plots)for(var n=r._plots[a],i=n.overlays||[],o=0;o<i.length;o++){var l=i[o];t[l.id]&&l.plot.selectAll(\".trace\").remove()}}}function bY(e,r){r._draggers.selectAll(\"g.\"+e).remove(),r._defs.select(\"#clip\"+r._uid+e+\"plot\").remove()}vn.toSVG=function(e){var r=e._fullLayout._glimages,t=ug.select(e).selectAll(\".svg-container\"),a=t.filter(function(i,o){return o===t.size()-1}).selectAll(\".gl-canvas-context, .gl-canvas-focus\");function n(){var i=this,o=i.toDataURL(\"image/png\"),l=r.append(\"svg:image\");l.attr({xmlns:b9e.svg,\"xlink:href\":o,preserveAspectRatio:\"none\",x:0,y:0,width:i.style.width,height:i.style.height})}a.each(n)};vn.updateFx=G7().updateFx});var _Y=z((tWe,xY)=>{\"use strict\";var fg=Jn();xY.exports={hasLines:fg.hasLines,hasMarkers:fg.hasMarkers,hasText:fg.hasText,isBubble:fg.isBubble,attributes:Vi(),layoutAttributes:Rp(),supplyDefaults:HU(),crossTraceDefaults:YU(),supplyLayoutDefaults:jU(),calc:Wy().calc,crossTraceCalc:yG(),arraysToCalcdata:Vy(),plot:Lw(),colorbar:Ed(),formatLabels:Cw(),style:mf().style,styleOnSelect:mf().styleOnSelect,hoverPoints:Fw(),selectPoints:zw(),animatable:!0,moduleType:\"trace\",name:\"scatter\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"symbols\",\"errorBarsOK\",\"showLegend\",\"scatter-like\",\"zoomScale\"],meta:{}}});var AY=z((aWe,TY)=>{\"use strict\";var _9e=Er(),w9e=Sr(),wY=R7(),Yw=ke(),T9e=Yw.strScale,A9e=Yw.strRotate,M9e=Yw.strTranslate;TY.exports=function(r,t,a){var n=r.node(),i=wY[a.arrowhead||0],o=wY[a.startarrowhead||0],l=(a.arrowwidth||1)*(a.arrowsize||1),s=(a.arrowwidth||1)*(a.startarrowsize||1),u=t.indexOf(\"start\")>=0,f=t.indexOf(\"end\")>=0,c=i.backoff*l+a.standoff,v=o.backoff*s+a.startstandoff,d,p,y,m;if(n.nodeName===\"line\"){d={x:+r.attr(\"x1\"),y:+r.attr(\"y1\")},p={x:+r.attr(\"x2\"),y:+r.attr(\"y2\")};var b=d.x-p.x,T=d.y-p.y;if(y=Math.atan2(T,b),m=y+Math.PI,c&&v&&c+v>Math.sqrt(b*b+T*T)){I();return}if(c){if(c*c>b*b+T*T){I();return}var w=c*Math.cos(y),x=c*Math.sin(y);p.x+=w,p.y+=x,r.attr({x2:p.x,y2:p.y})}if(v){if(v*v>b*b+T*T){I();return}var _=v*Math.cos(y),k=v*Math.sin(y);d.x-=_,d.y-=k,r.attr({x1:d.x,y1:d.y})}}else if(n.nodeName===\"path\"){var A=n.getTotalLength(),q=\"\";if(A<c+v){I();return}var C=n.getPointAtLength(0),E=n.getPointAtLength(.1);y=Math.atan2(C.y-E.y,C.x-E.x),d=n.getPointAtLength(Math.min(v,A)),q=\"0px,\"+v+\"px,\";var P=n.getPointAtLength(A),R=n.getPointAtLength(A-.1);m=Math.atan2(P.y-R.y,P.x-R.x),p=n.getPointAtLength(Math.max(0,A-c));var N=q?v+c:c;q+=A-N+\"px,\"+A+\"px\",r.style(\"stroke-dasharray\",q)}function I(){r.style(\"stroke-dasharray\",\"0px,100px\")}function O(U,Y,G,V){U.path&&(U.noRotate&&(G=0),_9e.select(n.parentNode).append(\"path\").attr({class:r.attr(\"class\"),d:U.path,transform:M9e(Y.x,Y.y)+A9e(G*180/Math.PI)+T9e(V)}).style({fill:w9e.rgb(a.arrowcolor),\"stroke-width\":0}))}u&&O(o,d,y,s),f&&O(i,p,m,l)}});var cg=z((nWe,LY)=>{\"use strict\";var MY=Er(),Vw=Tr(),k9e=va(),Vs=ke(),jw=Vs.strTranslate,Fd=Gr(),xf=Sr(),Wl=Zr(),kY=In(),Ww=Ca(),Xw=Rs(),Rd=Bi(),S9e=St().arrayEditor,q9e=AY();LY.exports={draw:L9e,drawOne:SY,drawRaw:qY};function L9e(e){var r=e._fullLayout;r._infolayer.selectAll(\".annotation\").remove();for(var t=0;t<r.annotations.length;t++)r.annotations[t].visible&&SY(e,t);return k9e.previousPromises(e)}function SY(e,r){var t=e._fullLayout,a=t.annotations[r]||{},n=Fd.getFromId(e,a.xref),i=Fd.getFromId(e,a.yref);n&&n.setScale(),i&&i.setScale(),qY(e,a,r,!1,n,i)}function Ys(e,r,t,a,n){var i=n[t],o=n[t+\"ref\"],l=t.indexOf(\"y\")!==-1,s=Fd.getRefType(o)===\"domain\",u=l?a.h:a.w;return e?s?i+(l?-r:r)/e._length:e.p2r(e.r2p(i)+r):i+(l?-r:r)/u}function qY(e,r,t,a,n,i){var o=e._fullLayout,l=e._fullLayout._size,s=e._context.edits,u,f;a?(u=\"annotation-\"+a,f=a+\".annotations\"):(u=\"annotation\",f=\"annotations\");var c=S9e(e.layout,f,r),v=c.modifyBase,d=c.modifyItem,p=c.getUpdateObj;o._infolayer.selectAll(\".\"+u+'[data-index=\"'+t+'\"]').remove();var y=\"clip\"+o._uid+\"_ann\"+t;if(!r._input||r.visible===!1){MY.selectAll(\"#\"+y).remove();return}var m={x:{},y:{}},b=+r.textangle||0,T=o._infolayer.append(\"g\").classed(u,!0).attr(\"data-index\",String(t)).style(\"opacity\",r.opacity),w=T.append(\"g\").classed(\"annotation-text-g\",!0),x=s[r.showarrow?\"annotationTail\":\"annotationPosition\"],_=r.captureevents||s.annotationText||x;function k(V){var W={index:t,annotation:r._input,fullAnnotation:r,event:V};return a&&(W.subplotId=a),W}var A=w.append(\"g\").style(\"pointer-events\",_?\"all\":null).call(Xw,\"pointer\").on(\"click\",function(){e._dragging=!1,e.emit(\"plotly_clickannotation\",k(MY.event))});r.hovertext&&A.on(\"mouseover\",function(){var V=r.hoverlabel,W=V.font,j=this.getBoundingClientRect(),J=e.getBoundingClientRect();kY.loneHover({x0:j.left-J.left,x1:j.right-J.left,y:(j.top+j.bottom)/2-J.top,text:r.hovertext,color:V.bgcolor,borderColor:V.bordercolor,fontFamily:W.family,fontSize:W.size,fontColor:W.color,fontWeight:W.weight,fontStyle:W.style,fontVariant:W.variant,fontShadow:W.fontShadow,fontLineposition:W.fontLineposition,fontTextcase:W.fontTextcase},{container:o._hoverlayer.node(),outerContainer:o._paper.node(),gd:e})}).on(\"mouseout\",function(){kY.loneUnhover(o._hoverlayer.node())});var q=r.borderwidth,C=r.borderpad,E=q+C,P=A.append(\"rect\").attr(\"class\",\"bg\").style(\"stroke-width\",q+\"px\").call(xf.stroke,r.bordercolor).call(xf.fill,r.bgcolor),R=r.width||r.height,N=o._topclips.selectAll(\"#\"+y).data(R?[0]:[]);N.enter().append(\"clipPath\").classed(\"annclip\",!0).attr(\"id\",y).append(\"rect\"),N.exit().remove();var I=r.font,O=o._meta?Vs.templateString(r.text,o._meta):r.text,U=A.append(\"text\").classed(\"annotation-text\",!0).text(O);function Y(V){return V.call(Wl.font,I).attr({\"text-anchor\":{left:\"start\",right:\"end\"}[r.align]||\"middle\"}),Ww.convertToTspans(V,e,G),V}function G(){var V=U.selectAll(\"a\");if(V.size()===1&&V.text()===U.text()){var W=A.insert(\"a\",\":first-child\").attr({\"xlink:xlink:href\":V.attr(\"xlink:href\"),\"xlink:xlink:show\":V.attr(\"xlink:show\")}).style({cursor:\"pointer\"});W.node().appendChild(P.node())}var j=A.select(\".annotation-text-math-group\"),J=!j.empty(),te=Wl.bBox((J?j:U).node()),ae=te.width,se=te.height,$=r.width||ae,fe=r.height||se,ie=Math.round($+2*E),ue=Math.round(fe+2*E);function ce(pr,mr){return mr===\"auto\"&&(pr<1/3?mr=\"left\":pr>2/3?mr=\"right\":mr=\"center\"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[mr]}for(var oe=!1,be=[\"x\",\"y\"],Re=0;Re<be.length;Re++){var ye=be[Re],Ce=r[ye+\"ref\"]||ye,Me=r[\"a\"+ye+\"ref\"],Le={x:n,y:i}[ye],De=(b+(ye===\"x\"?0:-90))*Math.PI/180,Ne=ie*Math.cos(De),qe=ue*Math.sin(De),Xe=Math.abs(Ne)+Math.abs(qe),$e=r[ye+\"anchor\"],We=r[ye+\"shift\"]*(ye===\"x\"?1:-1),Se=m[ye],Fe,Qe,re,xe,Ge,cr=Fd.getRefType(Ce);if(Le&&cr!==\"domain\"){var Pe=Le.r2fraction(r[ye]);(Pe<0||Pe>1)&&(Me===Ce?(Pe=Le.r2fraction(r[\"a\"+ye]),(Pe<0||Pe>1)&&(oe=!0)):oe=!0),Fe=Le._offset+Le.r2p(r[ye]),xe=.5}else{var me=cr===\"domain\";ye===\"x\"?(re=r[ye],Fe=me?Le._offset+Le._length*re:Fe=l.l+l.w*re):(re=1-r[ye],Fe=me?Le._offset+Le._length*re:Fe=l.t+l.h*re),xe=r.showarrow?.5:re}if(r.showarrow){Se.head=Fe;var Ae=r[\"a\"+ye];if(Ge=Ne*ce(.5,r.xanchor)-qe*ce(.5,r.yanchor),Me===Ce){var He=Fd.getRefType(Me);He===\"domain\"?(ye===\"y\"&&(Ae=1-Ae),Se.tail=Le._offset+Le._length*Ae):He===\"paper\"?ye===\"y\"?(Ae=1-Ae,Se.tail=l.t+l.h*Ae):Se.tail=l.l+l.w*Ae:Se.tail=Le._offset+Le.r2p(Ae),Qe=Ge}else Se.tail=Fe+Ae,Qe=Ge+Ae;Se.text=Se.tail+Ge;var Ze=o[ye===\"x\"?\"width\":\"height\"];if(Ce===\"paper\"&&(Se.head=Vs.constrain(Se.head,1,Ze-1)),Me===\"pixel\"){var Be=-Math.max(Se.tail-3,Se.text),je=Math.min(Se.tail+3,Se.text)-Ze;Be>0?(Se.tail+=Be,Se.text+=Be):je>0&&(Se.tail-=je,Se.text-=je)}Se.tail+=We,Se.head+=We}else Ge=Xe*ce(xe,$e),Qe=Ge,Se.text=Fe+Ge;Se.text+=We,Ge+=We,Qe+=We,r[\"_\"+ye+\"padplus\"]=Xe/2+Qe,r[\"_\"+ye+\"padminus\"]=Xe/2-Qe,r[\"_\"+ye+\"size\"]=Xe,r[\"_\"+ye+\"shift\"]=Ge}if(oe){A.remove();return}var tr=0,ir=0;if(r.align!==\"left\"&&(tr=($-ae)*(r.align===\"center\"?.5:1)),r.valign!==\"top\"&&(ir=(fe-se)*(r.valign===\"middle\"?.5:1)),J)j.select(\"svg\").attr({x:E+tr-1,y:E+ir}).call(Wl.setClipUrl,R?y:null,e);else{var lr=E+ir-te.top,Ee=E+tr-te.left;U.call(Ww.positionText,Ee,lr).call(Wl.setClipUrl,R?y:null,e)}N.select(\"rect\").call(Wl.setRect,E,E,$,fe),P.call(Wl.setRect,q/2,q/2,ie-q,ue-q),A.call(Wl.setTranslate,Math.round(m.x.text-ie/2),Math.round(m.y.text-ue/2)),w.attr({transform:\"rotate(\"+b+\",\"+m.x.text+\",\"+m.y.text+\")\"});var Je=function(pr,mr){T.selectAll(\".annotation-arrow-g\").remove();var sr=m.x.head,yr=m.y.head,ne=m.x.tail+pr,ge=m.y.tail+mr,ze=m.x.text+pr,Oe=m.y.text+mr,Jr=Vs.rotationXYMatrix(b,ze,Oe),Kr=Vs.apply2DTransform(Jr),mt=Vs.apply2DTransform2(Jr),yt=+P.attr(\"width\"),Lt=+P.attr(\"height\"),Qt=ze-.5*yt,Va=Qt+yt,ea=Oe-.5*Lt,ja=ea+Lt,ln=[[Qt,ea,Qt,ja],[Qt,ja,Va,ja],[Va,ja,Va,ea],[Va,ea,Qt,ea]].map(mt);if(!ln.reduce(function(Ct,ta){return Ct^!!Vs.segmentsIntersect(sr,yr,sr+1e6,yr+1e6,ta[0],ta[1],ta[2],ta[3])},!1)){ln.forEach(function(Ct){var ta=Vs.segmentsIntersect(ne,ge,sr,yr,Ct[0],Ct[1],Ct[2],Ct[3]);ta&&(ne=ta.x,ge=ta.y)});var oa=r.arrowwidth,vr=r.arrowcolor,_t=r.arrowside,Yr=T.append(\"g\").style({opacity:xf.opacity(vr)}).classed(\"annotation-arrow-g\",!0),vt=Yr.append(\"path\").attr(\"d\",\"M\"+ne+\",\"+ge+\"L\"+sr+\",\"+yr).style(\"stroke-width\",oa+\"px\").call(xf.stroke,xf.rgb(vr));if(q9e(vt,_t,r),s.annotationPosition&&vt.node().parentNode&&!a){var Rt=sr,Mt=yr;if(r.standoff){var nt=Math.sqrt(Math.pow(sr-ne,2)+Math.pow(yr-ge,2));Rt+=r.standoff*(ne-sr)/nt,Mt+=r.standoff*(ge-yr)/nt}var ra=Yr.append(\"path\").classed(\"annotation-arrow\",!0).classed(\"anndrag\",!0).classed(\"cursor-move\",!0).attr({d:\"M3,3H-3V-3H3ZM0,0L\"+(ne-Rt)+\",\"+(ge-Mt),transform:jw(Rt,Mt)}).style(\"stroke-width\",oa+6+\"px\").call(xf.stroke,\"rgba(0,0,0,0)\").call(xf.fill,\"rgba(0,0,0,0)\"),En,Vt;Rd.init({element:ra.node(),gd:e,prepFn:function(){var Ct=Wl.getTranslate(A);En=Ct.x,Vt=Ct.y,n&&n.autorange&&v(n._name+\".autorange\",!0),i&&i.autorange&&v(i._name+\".autorange\",!0)},moveFn:function(Ct,ta){var aa=Kr(En,Vt),ht=aa[0]+Ct,Wa=aa[1]+ta;A.call(Wl.setTranslate,ht,Wa),d(\"x\",Ys(n,Ct,\"x\",l,r)),d(\"y\",Ys(i,ta,\"y\",l,r)),r.axref===r.xref&&d(\"ax\",Ys(n,Ct,\"ax\",l,r)),r.ayref===r.yref&&d(\"ay\",Ys(i,ta,\"ay\",l,r)),Yr.attr(\"transform\",jw(Ct,ta)),w.attr({transform:\"rotate(\"+b+\",\"+ht+\",\"+Wa+\")\"})},doneFn:function(){Vw.call(\"_guiRelayout\",e,p());var Ct=document.querySelector(\".js-notes-box-panel\");Ct&&Ct.redraw(Ct.selectedObj)}})}}};if(r.showarrow&&Je(0,0),x){var Ie;Rd.init({element:A.node(),gd:e,prepFn:function(){Ie=w.attr(\"transform\")},moveFn:function(pr,mr){var sr=\"pointer\";if(r.showarrow)r.axref===r.xref?d(\"ax\",Ys(n,pr,\"ax\",l,r)):d(\"ax\",r.ax+pr),r.ayref===r.yref?d(\"ay\",Ys(i,mr,\"ay\",l.w,r)):d(\"ay\",r.ay+mr),Je(pr,mr);else{if(a)return;var yr,ne;if(n)yr=Ys(n,pr,\"x\",l,r);else{var ge=r._xsize/l.w,ze=r.x+(r._xshift-r.xshift)/l.w-ge/2;yr=Rd.align(ze+pr/l.w,ge,0,1,r.xanchor)}if(i)ne=Ys(i,mr,\"y\",l,r);else{var Oe=r._ysize/l.h,Jr=r.y-(r._yshift+r.yshift)/l.h-Oe/2;ne=Rd.align(Jr-mr/l.h,Oe,0,1,r.yanchor)}d(\"x\",yr),d(\"y\",ne),(!n||!i)&&(sr=Rd.getCursor(n?.5:yr,i?.5:ne,r.xanchor,r.yanchor))}w.attr({transform:jw(pr,mr)+Ie}),Xw(A,sr)},clickFn:function(pr,mr){r.captureevents&&e.emit(\"plotly_clickannotation\",k(mr))},doneFn:function(){Xw(A),Vw.call(\"_guiRelayout\",e,p());var pr=document.querySelector(\".js-notes-box-panel\");pr&&pr.redraw(pr.selectedObj)}})}}s.annotationText?U.call(Ww.makeEditable,{delegate:A,gd:e}).call(Y).on(\"edit\",function(V){r.text=V,this.call(Y),d(\"text\",V),n&&n.autorange&&v(n._name+\".autorange\",!0),i&&i.autorange&&v(i._name+\".autorange\",!0),Vw.call(\"_guiRelayout\",e,p())}):U.call(Y)}});var FY=z((iWe,RY)=>{\"use strict\";var CY=ke(),C9e=Tr(),DY=St().arrayEditor;RY.exports={hasClickToShow:D9e,onClick:E9e};function D9e(e,r){var t=PY(e,r);return t.on.length>0||t.explicitOff.length>0}function E9e(e,r){var t=PY(e,r),a=t.on,n=t.off.concat(t.explicitOff),i={},o=e._fullLayout.annotations,l,s;if(a.length||n.length){for(l=0;l<a.length;l++)s=DY(e.layout,\"annotations\",o[a[l]]),s.modifyItem(\"visible\",!0),CY.extendFlat(i,s.getUpdateObj());for(l=0;l<n.length;l++)s=DY(e.layout,\"annotations\",o[n[l]]),s.modifyItem(\"visible\",!1),CY.extendFlat(i,s.getUpdateObj());return C9e.call(\"update\",e,{},i)}}function PY(e,r){var t=e._fullLayout.annotations,a=[],n=[],i=[],o=(r||[]).length,l,s,u,f,c,v,d,p;for(l=0;l<t.length;l++)if(u=t[l],f=u.clicktoshow,f){for(s=0;s<o;s++)if(c=r[s],v=c.xaxis,d=c.yaxis,v._id===u.xref&&d._id===u.yref&&v.d2r(c.x)===EY(u._xclick,v)&&d.d2r(c.y)===EY(u._yclick,d)){u.visible?f===\"onout\"?p=n:p=i:p=a,p.push(l);break}s===o&&u.visible&&f===\"onout\"&&n.push(l)}return{on:a,off:n,explicitOff:i}}function EY(e,r){return r.type===\"log\"?r.l2r(e):r.d2r(e)}});var $w=z((oWe,zY)=>{\"use strict\";var Zw=ke(),qc=Sr();zY.exports=function(r,t,a,n){n(\"opacity\");var i=n(\"bgcolor\"),o=n(\"bordercolor\"),l=qc.opacity(o);n(\"borderpad\");var s=n(\"borderwidth\"),u=n(\"showarrow\");n(\"text\",u?\" \":a._dfltTitle.annotation),n(\"textangle\"),Zw.coerceFont(n,\"font\",a.font),n(\"width\"),n(\"align\");var f=n(\"height\");if(f&&n(\"valign\"),u){var c=n(\"arrowside\"),v,d;c.indexOf(\"end\")!==-1&&(v=n(\"arrowhead\"),d=n(\"arrowsize\")),c.indexOf(\"start\")!==-1&&(n(\"startarrowhead\",v),n(\"startarrowsize\",d)),n(\"arrowcolor\",l?t.bordercolor:qc.defaultLine),n(\"arrowwidth\",(l&&s||1)*2),n(\"standoff\"),n(\"startstandoff\")}var p=n(\"hovertext\"),y=a.hoverlabel||{};if(p){var m=n(\"hoverlabel.bgcolor\",y.bgcolor||(qc.opacity(i)?qc.rgb(i):qc.defaultLine)),b=n(\"hoverlabel.bordercolor\",y.bordercolor||qc.contrast(m)),T=Zw.extendFlat({},y.font);T.color||(T.color=b),Zw.coerceFont(n,\"hoverlabel.font\",T)}n(\"captureevents\",!!p)}});var IY=z((lWe,NY)=>{\"use strict\";var Jw=ke(),_f=Gr(),P9e=So(),R9e=$w(),F9e=yc();NY.exports=function(r,t){P9e(r,t,{name:\"annotations\",handleItemDefaults:z9e})};function z9e(e,r,t){function a(w,x){return Jw.coerce(e,r,F9e,w,x)}var n=a(\"visible\"),i=a(\"clicktoshow\");if(n||i){R9e(e,r,t,a);for(var o=r.showarrow,l=[\"x\",\"y\"],s=[-10,-30],u={_fullLayout:t},f=0;f<2;f++){var c=l[f],v=_f.coerceRef(e,r,u,c,\"\",\"paper\");if(v!==\"paper\"){var d=_f.getFromId(u,v);d._annIndices.push(r._index)}if(_f.coercePosition(r,u,a,v,c,.5),o){var p=\"a\"+c,y=_f.coerceRef(e,r,u,p,\"pixel\",[\"pixel\",\"paper\"]);y!==\"pixel\"&&y!==v&&(y=r[p]=\"pixel\");var m=y===\"pixel\"?s[f]:.4;_f.coercePosition(r,u,a,y,p,m)}a(c+\"anchor\"),a(c+\"shift\")}if(Jw.noneOrAll(e,r,[\"x\",\"y\"]),o&&Jw.noneOrAll(e,r,[\"ax\",\"ay\"]),i){var b=a(\"xclick\"),T=a(\"yclick\");r._xclick=b===void 0?r.x:_f.cleanPosition(b,u,r.xref),r._yclick=T===void 0?r.y:_f.cleanPosition(T,u,r.yref)}}}});var HY=z((sWe,OY)=>{\"use strict\";var Kw=ke(),wf=Gr(),N9e=cg().draw;OY.exports=function(r){var t=r._fullLayout,a=Kw.filterVisible(t.annotations);if(a.length&&r._fullData.length)return Kw.syncOrAsync([N9e,I9e],r)};function I9e(e){var r=e._fullLayout;Kw.filterVisible(r.annotations).forEach(function(t){var a=wf.getFromId(e,t.xref),n=wf.getFromId(e,t.yref),i=wf.getRefType(t.xref),o=wf.getRefType(t.yref);t._extremes={},i===\"range\"&&BY(t,a),o===\"range\"&&BY(t,n)})}function BY(e,r){var t=r._id,a=t.charAt(0),n=e[a],i=e[\"a\"+a],o=e[a+\"ref\"],l=e[\"a\"+a+\"ref\"],s=e[\"_\"+a+\"padplus\"],u=e[\"_\"+a+\"padminus\"],f={x:1,y:-1}[a]*e[a+\"shift\"],c=3*e.arrowsize*e.arrowwidth||0,v=c+f,d=c-f,p=3*e.startarrowsize*e.arrowwidth||0,y=p+f,m=p-f,b;if(l===o){var T=wf.findExtremes(r,[r.r2c(n)],{ppadplus:v,ppadminus:d}),w=wf.findExtremes(r,[r.r2c(i)],{ppadplus:Math.max(s,y),ppadminus:Math.max(u,m)});b={min:[T.min[0],w.min[0]],max:[T.max[0],w.max[0]]}}else y=i?y+i:y,m=i?m-i:m,b=wf.findExtremes(r,[r.r2c(n)],{ppadplus:Math.max(s,v,y),ppadminus:Math.max(u,d,m)});e._extremes[t]=b}});var GY=z((uWe,UY)=>{\"use strict\";var B9e=Ir(),O9e=E1();UY.exports=function(r,t,a,n){t=t||{};var i=a===\"log\"&&t.type===\"linear\",o=a===\"linear\"&&t.type===\"log\";if(!(i||o))return;var l=r._fullLayout.annotations,s=t._id.charAt(0),u,f;function c(d){var p=u[d],y=null;i?y=O9e(p,t.range):y=Math.pow(10,p),B9e(y)||(y=null),n(f+d,y)}for(var v=0;v<l.length;v++)u=l[v],f=\"annotations[\"+v+\"].\",u[s+\"ref\"]===t._id&&c(s),u[\"a\"+s+\"ref\"]===t._id&&c(\"a\"+s)}});var jY=z((fWe,VY)=>{\"use strict\";var Qw=cg(),YY=FY();VY.exports={moduleType:\"component\",name:\"annotations\",layoutAttributes:yc(),supplyLayoutDefaults:IY(),includeBasePlot:pd()(\"annotations\"),calcAutorange:HY(),draw:Qw.draw,drawOne:Qw.drawOne,drawRaw:Qw.drawRaw,hasClickToShow:YY.hasClickToShow,onClick:YY.onClick,convertCoords:GY()}});var vg=z((cWe,WY)=>{\"use strict\";var Et=yc(),H9e=wo().overrideAll,U9e=St().templatedArray;WY.exports=H9e(U9e(\"annotation\",{visible:Et.visible,x:{valType:\"any\"},y:{valType:\"any\"},z:{valType:\"any\"},ax:{valType:\"number\"},ay:{valType:\"number\"},xanchor:Et.xanchor,xshift:Et.xshift,yanchor:Et.yanchor,yshift:Et.yshift,text:Et.text,textangle:Et.textangle,font:Et.font,width:Et.width,height:Et.height,opacity:Et.opacity,align:Et.align,valign:Et.valign,bgcolor:Et.bgcolor,bordercolor:Et.bordercolor,borderpad:Et.borderpad,borderwidth:Et.borderwidth,showarrow:Et.showarrow,arrowcolor:Et.arrowcolor,arrowhead:Et.arrowhead,startarrowhead:Et.startarrowhead,arrowside:Et.arrowside,arrowsize:Et.arrowsize,startarrowsize:Et.startarrowsize,arrowwidth:Et.arrowwidth,standoff:Et.standoff,startstandoff:Et.startstandoff,hovertext:Et.hovertext,hoverlabel:Et.hoverlabel,captureevents:Et.captureevents}),\"calc\",\"from-root\")});var ZY=z((vWe,XY)=>{\"use strict\";var e8=ke(),G9e=Gr(),Y9e=So(),V9e=$w(),j9e=vg();XY.exports=function(r,t,a){Y9e(r,t,{name:\"annotations\",handleItemDefaults:W9e,fullLayout:a.fullLayout})};function W9e(e,r,t,a){function n(l,s){return e8.coerce(e,r,j9e,l,s)}function i(l){var s=l+\"axis\",u={_fullLayout:{}};return u._fullLayout[s]=t[s],G9e.coercePosition(r,u,n,l,l,.5)}var o=n(\"visible\");o&&(V9e(e,r,a.fullLayout,n),i(\"x\"),i(\"y\"),i(\"z\"),e8.noneOrAll(e,r,[\"x\",\"y\",\"z\"]),r.xref=\"x\",r.yref=\"y\",r.zref=\"z\",n(\"xanchor\"),n(\"yanchor\"),n(\"xshift\"),n(\"yshift\"),r.showarrow&&(r.axref=\"pixel\",r.ayref=\"pixel\",n(\"ax\",-10),n(\"ay\",-30),e8.noneOrAll(e,r,[\"ax\",\"ay\"])))}});var QY=z((hWe,KY)=>{\"use strict\";var $Y=ke(),JY=Gr();KY.exports=function(r){for(var t=r.fullSceneLayout,a=t.annotations,n=0;n<a.length;n++)X9e(a[n],r);r.fullLayout._infolayer.selectAll(\".annotation-\"+r.id).remove()};function X9e(e,r){var t=r.fullSceneLayout,a=t.domain,n=r.fullLayout._size,i={pdata:null,type:\"linear\",autorange:!1,range:[-1/0,1/0]};e._xa={},$Y.extendFlat(e._xa,i),JY.setConvert(e._xa),e._xa._offset=n.l+a.x[0]*n.w,e._xa.l2p=function(){return .5*(1+e._pdata[0]/e._pdata[3])*n.w*(a.x[1]-a.x[0])},e._ya={},$Y.extendFlat(e._ya,i),JY.setConvert(e._ya),e._ya._offset=n.t+(1-a.y[1])*n.h,e._ya.l2p=function(){return .5*(1-e._pdata[1]/e._pdata[3])*n.h*(a.y[1]-a.y[0])}}});var rV=z((dWe,eV)=>{\"use strict\";function r8(e,r){var t=[0,0,0,0],a,n;for(a=0;a<4;++a)for(n=0;n<4;++n)t[n]+=e[4*a+n]*r[a];return t}function Z9e(e,r){var t=r8(e.projection,r8(e.view,r8(e.model,[r[0],r[1],r[2],1])));return t}eV.exports=Z9e});var aV=z((pWe,tV)=>{\"use strict\";var $9e=cg().drawRaw,J9e=rV(),K9e=[\"x\",\"y\",\"z\"];tV.exports=function(r){for(var t=r.fullSceneLayout,a=r.dataScale,n=t.annotations,i=0;i<n.length;i++){for(var o=n[i],l=!1,s=0;s<3;s++){var u=K9e[s],f=o[u],c=t[u+\"axis\"],v=c.r2fraction(f);if(v<0||v>1){l=!0;break}}l?r.fullLayout._infolayer.select(\".annotation-\"+r.id+'[data-index=\"'+i+'\"]').remove():(o._pdata=J9e(r.glplot.cameraParams,[t.xaxis.r2l(o.x)*a[0],t.yaxis.r2l(o.y)*a[1],t.zaxis.r2l(o.z)*a[2]]),$9e(r.graphDiv,o,i,r.id,o._xa,o._ya))}}});var oV=z((mWe,iV)=>{\"use strict\";var Q9e=Tr(),nV=ke();iV.exports={moduleType:\"component\",name:\"annotations3d\",schema:{subplots:{scene:{annotations:vg()}}},layoutAttributes:vg(),handleDefaults:ZY(),includeBasePlot:eTe,convert:QY(),draw:aV()};function eTe(e,r){var t=Q9e.subplotsRegistry.gl3d;if(t)for(var a=t.attrRegex,n=Object.keys(e),i=0;i<n.length;i++){var o=n[i];a.test(o)&&(e[o].annotations||[]).length&&(nV.pushUnique(r._basePlotModules,t),nV.pushUnique(r._subplots.gl3d,o))}}});var t8=z((bWe,fV)=>{\"use strict\";var yWe=qa(),lV=ka(),sV=Vi().line,rTe=Pi().dash,Fo=At().extendFlat,tTe=St().templatedArray,gWe=vd(),Lc=zn(),uV=yc(),{shapeTexttemplateAttrs:aTe,templatefallbackAttrs:nTe}=fi(),iTe=hp();fV.exports=tTe(\"shape\",{visible:Fo({},Lc.visible,{editType:\"calc+arraydraw\"}),showlegend:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},legend:Fo({},Lc.legend,{editType:\"calc+arraydraw\"}),legendgroup:Fo({},Lc.legendgroup,{editType:\"calc+arraydraw\"}),legendgrouptitle:{text:Fo({},Lc.legendgrouptitle.text,{editType:\"calc+arraydraw\"}),font:lV({editType:\"calc+arraydraw\"}),editType:\"calc+arraydraw\"},legendrank:Fo({},Lc.legendrank,{editType:\"calc+arraydraw\"}),legendwidth:Fo({},Lc.legendwidth,{editType:\"calc+arraydraw\"}),type:{valType:\"enumerated\",values:[\"circle\",\"rect\",\"path\",\"line\"],editType:\"calc+arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\",\"between\"],dflt:\"above\",editType:\"arraydraw\"},xref:Fo({},uV.xref,{arrayOk:!0}),xsizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},xanchor:{valType:\"any\",editType:\"calc+arraydraw\"},x0:{valType:\"any\",editType:\"calc+arraydraw\"},x1:{valType:\"any\",editType:\"calc+arraydraw\"},x0shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},x1shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},yref:Fo({},uV.yref,{arrayOk:!0}),ysizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},yanchor:{valType:\"any\",editType:\"calc+arraydraw\"},y0:{valType:\"any\",editType:\"calc+arraydraw\"},y1:{valType:\"any\",editType:\"calc+arraydraw\"},y0shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},y1shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},path:{valType:\"string\",editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},line:{color:Fo({},sV.color,{editType:\"arraydraw\"}),width:Fo({},sV.width,{editType:\"calc+arraydraw\"}),dash:Fo({},rTe,{editType:\"arraydraw\"}),editType:\"calc+arraydraw\"},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\",editType:\"arraydraw\"},editable:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},label:{text:{valType:\"string\",dflt:\"\",editType:\"arraydraw\"},texttemplate:aTe({},{keys:Object.keys(iTe)}),texttemplatefallback:nTe({editType:\"arraydraw\"}),font:lV({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\",\"start\",\"middle\",\"end\"],editType:\"arraydraw\"},textangle:{valType:\"angle\",dflt:\"auto\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],editType:\"calc+arraydraw\"},padding:{valType:\"number\",dflt:3,min:0,editType:\"arraydraw\"},editType:\"arraydraw\"},editType:\"arraydraw\"})});var vV=z((xWe,cV)=>{\"use strict\";var Cc=ke(),wi=Gr(),oTe=So(),lTe=t8(),zd=Bs();cV.exports=function(r,t){oTe(r,t,{name:\"shapes\",handleItemDefaults:uTe})};function sTe(e,r){return e?\"bottom\":r.indexOf(\"top\")!==-1?\"top\":r.indexOf(\"bottom\")!==-1?\"bottom\":\"middle\"}function uTe(e,r,t){function a(w,x){return Cc.coerce(e,r,lTe,w,x)}r._isShape=!0;var n=a(\"visible\");if(!n)return;var i=a(\"showlegend\");a(\"legend\"),a(\"legendgroup\"),i&&(a(\"legendwidth\"),a(\"legendgrouptitle.text\"),Cc.coerceFont(a,\"legendgrouptitle.font\"),a(\"legendrank\"));var o=a(\"path\"),l=o?\"path\":\"rect\",s=a(\"type\",l),u=s!==\"path\";u&&delete r.path,a(\"editable\"),a(\"layer\"),a(\"opacity\"),a(\"fillcolor\"),a(\"fillrule\");var f=a(\"line.width\");f&&(a(\"line.color\"),a(\"line.dash\"));var c=a(\"xsizemode\"),v=a(\"ysizemode\");let d=[.25,.75],p=[0,10];[\"x\",\"y\"].forEach(w=>{var x=w+\"anchor\",_=w===\"x\"?c:v,k={_fullLayout:t},A,q,C,E;let P=w+\"ref\",R=e[P];if(Array.isArray(R)&&R.length>0){let N=zd.countDefiningCoords(s,o,w);E=wi.coerceRefArray(e,r,k,w,void 0,\"paper\",N),r[\"_\"+w+\"refArray\"]=!0}else E=wi.coerceRef(e,r,k,w,void 0,\"paper\");if(Array.isArray(E))E.forEach(function(N){wi.getRefType(N)===\"range\"&&(A=wi.getFromId(k,N),A&&A._shapeIndices.indexOf(r._index)===-1&&A._shapeIndices.push(r._index))}),u&&[0,1].forEach(function(N){let I=E[N];wi.getRefType(I)===\"range\"?(A=wi.getFromId(k,I),q=zd.shapePositionToRange(A),C=zd.rangeToShapePosition(A),(A.type===\"category\"||A.type===\"multicategory\")&&a(w+N+\"shift\")):q=C=Cc.identity;let U=w+N,Y=e[U];if(e[U]=q(e[U],!0),_===\"pixel\"?a(U,p[N]):wi.coercePosition(r,k,a,I,U,d[N]),r[U]=C(r[U]),e[U]=Y,N===0&&_===\"pixel\"){let G=e[x];e[x]=q(e[x],!0),wi.coercePosition(r,k,a,I,x,.25),r[x]=C(r[x]),e[x]=G}});else{if(wi.getRefType(E)===\"range\"?(A=wi.getFromId(k,E),A._shapeIndices.push(r._index),C=zd.rangeToShapePosition(A),q=zd.shapePositionToRange(A),u&&(A.type===\"category\"||A.type===\"multicategory\")&&(a(w+\"0shift\"),a(w+\"1shift\"))):q=C=Cc.identity,u){let I=w+\"0\",O=w+\"1\",U=e[I],Y=e[O];e[I]=q(e[I],!0),e[O]=q(e[O],!0),_===\"pixel\"?(a(I,p[0]),a(O,p[1])):(wi.coercePosition(r,k,a,E,I,d[0]),wi.coercePosition(r,k,a,E,O,d[1])),r[I]=C(r[I]),r[O]=C(r[O]),e[I]=U,e[O]=Y}if(_===\"pixel\"){let I=e[x];e[x]=q(e[x],!0),wi.coercePosition(r,k,a,E,x,.25),r[x]=C(r[x]),e[x]=I}}}),u&&Cc.noneOrAll(e,r,[\"x0\",\"x1\",\"y0\",\"y1\"]);var y=s===\"line\",m,b;if(u&&(m=a(\"label.texttemplate\"),a(\"label.texttemplatefallback\")),m||(b=a(\"label.text\")),b||m){a(\"label.textangle\");var T=a(\"label.textposition\",y?\"middle\":\"middle center\");a(\"label.xanchor\"),a(\"label.yanchor\",sTe(y,T)),a(\"label.padding\"),Cc.coerceFont(a,\"label.font\",t.font)}}});var pV=z((_We,dV)=>{\"use strict\";var fTe=Sr(),hV=ke();function cTe(e,r){return e?\"bottom\":r.indexOf(\"top\")!==-1?\"top\":r.indexOf(\"bottom\")!==-1?\"bottom\":\"middle\"}dV.exports=function(r,t,a){a(\"newshape.visible\"),a(\"newshape.name\"),a(\"newshape.showlegend\"),a(\"newshape.legend\"),a(\"newshape.legendwidth\"),a(\"newshape.legendgroup\"),a(\"newshape.legendgrouptitle.text\"),hV.coerceFont(a,\"newshape.legendgrouptitle.font\"),a(\"newshape.legendrank\"),a(\"newshape.drawdirection\"),a(\"newshape.layer\"),a(\"newshape.fillcolor\"),a(\"newshape.fillrule\"),a(\"newshape.opacity\");var n=a(\"newshape.line.width\");if(n){var i=(r||{}).plot_bgcolor||\"#FFF\";a(\"newshape.line.color\",fTe.contrast(i)),a(\"newshape.line.dash\")}var o=r.dragmode===\"drawline\",l=a(\"newshape.label.text\"),s=a(\"newshape.label.texttemplate\");if(a(\"newshape.label.texttemplatefallback\"),l||s){a(\"newshape.label.textangle\");var u=a(\"newshape.label.textposition\",o?\"middle\":\"middle center\");a(\"newshape.label.xanchor\"),a(\"newshape.label.yanchor\",cTe(o,u)),a(\"newshape.label.padding\"),hV.coerceFont(a,\"newshape.label.font\",t.font)}a(\"activeshape.fillcolor\"),a(\"activeshape.opacity\")}});var wV=z((wWe,_V)=>{\"use strict\";var a8=ke(),eo=Gr(),yl=Wh(),n8=Bs();_V.exports=function(r){var t=r._fullLayout,a=a8.filterVisible(t.shapes);if(!(!a.length||!r._fullData.length))for(var n=0;n<a.length;n++){var i=a[n];i._extremes={};var o,l,s=eo.getRefType(i.xref),u=eo.getRefType(i.yref);if(s===\"array\"){let f=mV(r,i,\"x\");Object.entries(f).forEach(([c,v])=>{o=eo.getFromId(r,c),i._extremes[o._id]=eo.findExtremes(o,v,yV(i))})}else i.xref!==\"paper\"&&s!==\"domain\"&&(o=eo.getFromId(r,i.xref),l=bV(o,i,yl.paramIsX),l&&(i._extremes[o._id]=eo.findExtremes(o,l,yV(i))));if(u===\"array\"){let f=mV(r,i,\"y\");Object.entries(f).forEach(([c,v])=>{o=eo.getFromId(r,c),i._extremes[o._id]=eo.findExtremes(o,v,gV(i))})}else i.yref!==\"paper\"&&u!==\"domain\"&&(o=eo.getFromId(r,i.yref),l=bV(o,i,yl.paramIsY),l&&(i._extremes[o._id]=eo.findExtremes(o,l,gV(i))))}};function mV(e,r,t){let a=r[t+\"ref\"],n=t===\"x\"?yl.paramIsX:yl.paramIsY;function i(c,v){c===\"paper\"||eo.getRefType(c)===\"domain\"||(o[c]||(o[c]=[]),o[c].push(v))}let o={};if(r.type===\"path\"&&r.path){let c=r.path.match(yl.segmentRE)||[];for(var l=0,s=0;s<c.length;s++){let v=c[s],d=v.charAt(0),p=n[d].drawn;if(p===void 0)continue;let y=v.slice(1).match(yl.paramRE);y&&y.length>p&&(i(a[l],y[p]),l++)}}else i(a[0],r[t+\"0\"]),i(a[1],r[t+\"1\"]);let u={};for(let c in o){let v=eo.getFromId(e,c);if(v){var f=v.type===\"category\"||v.type===\"multicategory\"?v.r2c:v.d2c;v.type===\"date\"&&(f=n8.decodeDate(f)),u[v._id]=o[c].map(f)}}return u}function yV(e){return xV(e.line.width,e.xsizemode,e.x0,e.x1,e.path,!1)}function gV(e){return xV(e.line.width,e.ysizemode,e.y0,e.y1,e.path,!0)}function xV(e,r,t,a,n,i){var o=e/2,l=i;if(r===\"pixel\"){var s=n?n8.extractPathCoords(n,i?yl.paramIsY:yl.paramIsX):[t,a],u=a8.aggNums(Math.max,null,s),f=a8.aggNums(Math.min,null,s),c=f<0?Math.abs(f)+o:o,v=u>0?u+o:o;return{ppad:o,ppadplus:l?c:v,ppadminus:l?v:c}}else return{ppad:o}}function bV(e,r,t){var a=e._id.charAt(0)===\"x\"?\"x\":\"y\",n=e.type===\"category\"||e.type===\"multicategory\",i,o,l=0,s=0,u=n?e.r2c:e.d2c,f=r[a+\"sizemode\"]===\"scaled\";if(f?(i=r[a+\"0\"],o=r[a+\"1\"],n&&(l=r[a+\"0shift\"],s=r[a+\"1shift\"])):(i=r[a+\"anchor\"],o=r[a+\"anchor\"]),i!==void 0)return[u(i)+l,u(o)+s];if(r.path){var c=1/0,v=-1/0,d=r.path.match(yl.segmentRE),p,y,m,b,T;for(e.type===\"date\"&&(u=n8.decodeDate(u)),p=0;p<d.length;p++)y=d[p],m=t[y.charAt(0)].drawn,m!==void 0&&(b=d[p].slice(1).match(yl.paramRE),!(!b||b.length<m)&&(T=u(b[m]),T<c&&(c=T),T>v&&(v=T)));if(v>=c)return[c,v]}}});var MV=z((TWe,AV)=>{\"use strict\";var TV=Qm();AV.exports={moduleType:\"component\",name:\"shapes\",layoutAttributes:t8(),supplyLayoutDefaults:vV(),supplyDrawNewShapeDefaults:pV(),includeBasePlot:pd()(\"shapes\"),calcAutorange:wV(),draw:TV.draw,drawOne:TV.drawOne}});var i8=z((MWe,SV)=>{\"use strict\";var kV=qa(),vTe=St().templatedArray,AWe=vd();SV.exports=vTe(\"image\",{visible:{valType:\"boolean\",dflt:!0,editType:\"arraydraw\"},source:{valType:\"string\",editType:\"arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"arraydraw\"},sizex:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizey:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizing:{valType:\"enumerated\",values:[\"fill\",\"contain\",\"stretch\"],dflt:\"contain\",editType:\"arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},x:{valType:\"any\",dflt:0,editType:\"arraydraw\"},y:{valType:\"any\",dflt:0,editType:\"arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"top\",editType:\"arraydraw\"},xref:{valType:\"enumerated\",values:[\"paper\",kV.idRegex.x.toString()],dflt:\"paper\",editType:\"arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",kV.idRegex.y.toString()],dflt:\"paper\",editType:\"arraydraw\"},editType:\"arraydraw\"})});var LV=z((kWe,qV)=>{\"use strict\";var hTe=ke(),o8=Gr(),dTe=So(),pTe=i8(),mTe=\"images\";qV.exports=function(r,t){var a={name:mTe,handleItemDefaults:yTe};dTe(r,t,a)};function yTe(e,r,t){function a(v,d){return hTe.coerce(e,r,pTe,v,d)}var n=a(\"source\"),i=a(\"visible\",!!n);if(!i)return r;a(\"layer\"),a(\"xanchor\"),a(\"yanchor\"),a(\"sizex\"),a(\"sizey\"),a(\"sizing\"),a(\"opacity\");for(var o={_fullLayout:t},l=[\"x\",\"y\"],s=0;s<2;s++){var u=l[s],f=o8.coerceRef(e,r,o,u,\"paper\",void 0);if(f!==\"paper\"){var c=o8.getFromId(o,f);c._imgIndices.push(r._index)}o8.coercePosition(r,o,a,f,u,0)}return r}});var PV=z((SWe,EV)=>{\"use strict\";var CV=Er(),gTe=Zr(),Dc=Gr(),DV=ba(),bTe=Il();EV.exports=function(r){var t=r._fullLayout,a=[],n={},i=[],o,l;for(l=0;l<t.images.length;l++){var s=t.images[l];if(s.visible)if(s.layer===\"below\"&&s.xref!==\"paper\"&&s.yref!==\"paper\"){o=DV.ref2id(s.xref)+DV.ref2id(s.yref);var u=t._plots[o];if(!u){i.push(s);continue}u.mainplot&&(o=u.mainplot.id),n[o]||(n[o]=[]),n[o].push(s)}else s.layer===\"above\"?a.push(s):i.push(s)}var f={x:{left:{sizing:\"xMin\",offset:0},center:{sizing:\"xMid\",offset:-1/2},right:{sizing:\"xMax\",offset:-1}},y:{top:{sizing:\"YMin\",offset:0},middle:{sizing:\"YMid\",offset:-1/2},bottom:{sizing:\"YMax\",offset:-1}}};function c(x){var _=CV.select(this);if(this._imgSrc!==x.source)if(_.attr(\"xmlns\",bTe.svg),!r._context.staticPlot||x.source&&x.source.slice(0,5)===\"data:\")_.attr(\"xlink:href\",x.source),this._imgSrc=x.source;else{var k=new Promise(function(A){var q=new Image;this.img=q,q.setAttribute(\"crossOrigin\",\"anonymous\"),q.onerror=C,q.onload=function(){var E=document.createElement(\"canvas\");E.width=this.width,E.height=this.height;var P=E.getContext(\"2d\",{willReadFrequently:!0});P.drawImage(this,0,0);var R=E.toDataURL(\"image/png\");_.attr(\"xlink:href\",R),A()},_.on(\"error\",C),q.src=x.source,this._imgSrc=x.source;function C(){_.remove(),A()}}.bind(this));r._promises.push(k)}}function v(x){var _=CV.select(this),k=Dc.getFromId(r,x.xref),A=Dc.getFromId(r,x.yref),q=Dc.getRefType(x.xref)===\"domain\",C=Dc.getRefType(x.yref)===\"domain\",E=t._size,P,R;k!==void 0?P=typeof x.xref==\"string\"&&q?k._length*x.sizex:Math.abs(k.l2p(x.sizex)-k.l2p(0)):P=x.sizex*E.w,A!==void 0?R=typeof x.yref==\"string\"&&C?A._length*x.sizey:Math.abs(A.l2p(x.sizey)-A.l2p(0)):R=x.sizey*E.h;var N=P*f.x[x.xanchor].offset,I=R*f.y[x.yanchor].offset,O=f.x[x.xanchor].sizing+f.y[x.yanchor].sizing,U,Y;switch(k!==void 0?U=typeof x.xref==\"string\"&&q?k._length*x.x+k._offset:k.r2p(x.x)+k._offset:U=x.x*E.w+E.l,U+=N,A!==void 0?Y=typeof x.yref==\"string\"&&C?A._length*(1-x.y)+A._offset:A.r2p(x.y)+A._offset:Y=E.h-x.y*E.h+E.t,Y+=I,x.sizing){case\"fill\":O+=\" slice\";break;case\"stretch\":O=\"none\";break}_.attr({x:U,y:Y,width:P,height:R,preserveAspectRatio:O,opacity:x.opacity});var G=k&&Dc.getRefType(x.xref)!==\"domain\"?k._id:\"\",V=A&&Dc.getRefType(x.yref)!==\"domain\"?A._id:\"\",W=G+V;gTe.setClipUrl(_,W?\"clip\"+t._uid+W:null,r)}function d(x){return[x.xref,x.x,x.sizex,x.yref,x.y,x.sizey].join(\"_\")}function p(x,_){return x._index-_._index}var y=t._imageLowerLayer.selectAll(\"image\").data(i,d),m=t._imageUpperLayer.selectAll(\"image\").data(a,d);y.enter().append(\"image\"),m.enter().append(\"image\"),y.exit().remove(),m.exit().remove(),y.each(function(x){c.bind(this)(x),v.bind(this)(x)}),m.each(function(x){c.bind(this)(x),v.bind(this)(x)}),y.sort(p),m.sort(p);var b=Object.keys(t._plots);for(l=0;l<b.length;l++){o=b[l];var T=t._plots[o];if(T.imagelayer){var w=T.imagelayer.selectAll(\"image\").data(n[o]||[],d);w.enter().append(\"image\"),w.exit().remove(),w.each(function(x){c.bind(this)(x),v.bind(this)(x)}),w.sort(p)}}}});var zV=z((qWe,FV)=>{\"use strict\";var RV=Ir(),xTe=E1();FV.exports=function(r,t,a,n){t=t||{};var i=a===\"log\"&&t.type===\"linear\",o=a===\"linear\"&&t.type===\"log\";if(i||o){for(var l=r._fullLayout.images,s=t._id.charAt(0),u,f,c=0;c<l.length;c++)if(u=l[c],f=\"images[\"+c+\"].\",u[s+\"ref\"]===t._id){var v=u[s],d=u[\"size\"+s],p=null,y=null;if(i){p=xTe(v,t.range);var m=d/Math.pow(10,p)/2;y=2*Math.log(m+Math.sqrt(1+m*m))/Math.LN10}else p=Math.pow(10,v),y=p*(Math.pow(10,d/2)-Math.pow(10,-d/2));RV(p)?RV(y)||(y=null):(p=null,y=null),n(f+s,p),n(f+\"size\"+s,y)}}}});var IV=z((LWe,NV)=>{\"use strict\";NV.exports={moduleType:\"component\",name:\"images\",layoutAttributes:i8(),supplyLayoutDefaults:LV(),includeBasePlot:pd()(\"images\"),draw:PV(),convertCoords:zV()}});var hg=z((CWe,BV)=>{\"use strict\";BV.exports={name:\"updatemenus\",containerClassName:\"updatemenu-container\",headerGroupClassName:\"updatemenu-header-group\",headerClassName:\"updatemenu-header\",headerArrowClassName:\"updatemenu-header-arrow\",dropdownButtonGroupClassName:\"updatemenu-dropdown-button-group\",dropdownButtonClassName:\"updatemenu-dropdown-button\",buttonClassName:\"updatemenu-button\",itemRectClassName:\"updatemenu-item-rect\",itemTextClassName:\"updatemenu-item-text\",menuIndexAttrName:\"updatemenu-active-index\",autoMarginIdRoot:\"updatemenu-\",blankHeaderOpts:{label:\"  \"},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:\"#F4FAFF\",hoverColor:\"#F4FAFF\",arrowSymbol:{left:\"\\u25C4\",right:\"\\u25BA\",up:\"\\u25B2\",down:\"\\u25BC\"}}});var l8=z((DWe,HV)=>{\"use strict\";var _Te=ka(),wTe=Ei(),TTe=At().extendFlat,ATe=wo().overrideAll,MTe=dp(),OV=St().templatedArray,kTe=OV(\"button\",{visible:{valType:\"boolean\"},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},args2:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\",dflt:\"\"},execute:{valType:\"boolean\",dflt:!0}});HV.exports=ATe(OV(\"updatemenu\",{_arrayAttrRegexps:[/^updatemenus\\[(0|[1-9][0-9]+)\\]\\.buttons/],visible:{valType:\"boolean\"},type:{valType:\"enumerated\",values:[\"dropdown\",\"buttons\"],dflt:\"dropdown\"},direction:{valType:\"enumerated\",values:[\"left\",\"right\",\"up\",\"down\"],dflt:\"down\"},active:{valType:\"integer\",min:-1,dflt:0},showactive:{valType:\"boolean\",dflt:!0},buttons:kTe,x:{valType:\"number\",min:-2,max:3,dflt:-.05},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"right\"},y:{valType:\"number\",min:-2,max:3,dflt:1},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},pad:TTe(MTe({editType:\"arraydraw\"}),{}),font:_Te({}),bgcolor:{valType:\"color\"},bordercolor:{valType:\"color\",dflt:wTe.borderLine},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"arraydraw\"}}),\"arraydraw\",\"from-root\")});var VV=z((EWe,YV)=>{\"use strict\";var dg=ke(),UV=So(),GV=l8(),STe=hg(),qTe=STe.name,LTe=GV.buttons;YV.exports=function(r,t){var a={name:qTe,handleItemDefaults:CTe};UV(r,t,a)};function CTe(e,r,t){function a(o,l){return dg.coerce(e,r,GV,o,l)}var n=UV(e,r,{name:\"buttons\",handleItemDefaults:DTe}),i=a(\"visible\",n.length>0);i&&(a(\"active\"),a(\"direction\"),a(\"type\"),a(\"showactive\"),a(\"x\"),a(\"y\"),dg.noneOrAll(e,r,[\"x\",\"y\"]),a(\"xanchor\"),a(\"yanchor\"),a(\"pad.t\"),a(\"pad.r\"),a(\"pad.b\"),a(\"pad.l\"),dg.coerceFont(a,\"font\",t.font),a(\"bgcolor\",t.paper_bgcolor),a(\"bordercolor\"),a(\"borderwidth\"))}function DTe(e,r){function t(n,i){return dg.coerce(e,r,LTe,n,i)}var a=t(\"visible\",e.method===\"skip\"||Array.isArray(e.args));a&&(t(\"method\"),t(\"args\"),t(\"args2\"),t(\"label\"),t(\"execute\"))}});var XV=z((PWe,WV)=>{\"use strict\";WV.exports=jt;var zo=Er(),jV=Sr(),Ec=Zr(),pg=ke();function jt(e,r,t){this.gd=e,this.container=r,this.id=t,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll(\"rect.scrollbox-bg\").data([0]),this.bg.exit().on(\".drag\",null).on(\"wheel\",null).remove(),this.bg.enter().append(\"rect\").classed(\"scrollbox-bg\",!0).style(\"pointer-events\",\"all\").attr({opacity:0,x:0,y:0,width:0,height:0})}jt.barWidth=2;jt.barLength=20;jt.barRadius=2;jt.barPad=1;jt.barColor=\"#808BA4\";jt.prototype.enable=function(r,t,a){var n=this.gd._fullLayout,i=n.width,o=n.height;this.position=r;var l=this.position.l,s=this.position.w,u=this.position.t,f=this.position.h,c=this.position.direction,v=c===\"down\",d=c===\"left\",p=c===\"right\",y=c===\"up\",m=s,b=f,T,w,x,_;!v&&!d&&!p&&!y&&(this.position.direction=\"down\",v=!0);var k=v||y;k?(T=l,w=T+m,v?(x=u,_=Math.min(x+b,o),b=_-x):(_=u+b,x=Math.max(_-b,0),b=_-x)):(x=u,_=x+b,d?(w=l+m,T=Math.max(w-m,0),m=w-T):(T=l,w=Math.min(T+m,i),m=w-T)),this._box={l:T,t:x,w:m,h:b};var A=s>m,q=jt.barLength+2*jt.barPad,C=jt.barWidth+2*jt.barPad,E=l,P=u+f;P+C>o&&(P=o-C);var R=this.container.selectAll(\"rect.scrollbar-horizontal\").data(A?[0]:[]);R.exit().on(\".drag\",null).remove(),R.enter().append(\"rect\").classed(\"scrollbar-horizontal\",!0).call(jV.fill,jt.barColor),A?(this.hbar=R.attr({rx:jt.barRadius,ry:jt.barRadius,x:E,y:P,width:q,height:C}),this._hbarXMin=E+q/2,this._hbarTranslateMax=m-q):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var N=f>b,I=jt.barWidth+2*jt.barPad,O=jt.barLength+2*jt.barPad,U=l+s,Y=u;U+I>i&&(U=i-I);var G=this.container.selectAll(\"rect.scrollbar-vertical\").data(N?[0]:[]);G.exit().on(\".drag\",null).remove(),G.enter().append(\"rect\").classed(\"scrollbar-vertical\",!0).call(jV.fill,jt.barColor),N?(this.vbar=G.attr({rx:jt.barRadius,ry:jt.barRadius,x:U,y:Y,width:I,height:O}),this._vbarYMin=Y+O/2,this._vbarTranslateMax=b-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var V=this.id,W=T-.5,j=N?w+I+.5:w+.5,J=x-.5,te=A?_+C+.5:_+.5,ae=n._topdefs.selectAll(\"#\"+V).data(A||N?[0]:[]);if(ae.exit().remove(),ae.enter().append(\"clipPath\").attr(\"id\",V).append(\"rect\"),A||N?(this._clipRect=ae.select(\"rect\").attr({x:Math.floor(W),y:Math.floor(J),width:Math.ceil(j)-Math.floor(W),height:Math.ceil(te)-Math.floor(J)}),this.container.call(Ec.setClipUrl,V,this.gd),this.bg.attr({x:l,y:u,width:s,height:f})):(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(Ec.setClipUrl,null),delete this._clipRect),A||N){var se=zo.behavior.drag().on(\"dragstart\",function(){zo.event.sourceEvent.preventDefault()}).on(\"drag\",this._onBoxDrag.bind(this));this.container.on(\"wheel\",null).on(\"wheel\",this._onBoxWheel.bind(this)).on(\".drag\",null).call(se);var $=zo.behavior.drag().on(\"dragstart\",function(){zo.event.sourceEvent.preventDefault(),zo.event.sourceEvent.stopPropagation()}).on(\"drag\",this._onBarDrag.bind(this));A&&this.hbar.on(\".drag\",null).call($),N&&this.vbar.on(\".drag\",null).call($)}this.setTranslate(t,a)};jt.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(Ec.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(\".drag\",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(\".drag\",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)};jt.prototype._onBoxDrag=function(){var r=this.translateX,t=this.translateY;this.hbar&&(r-=zo.event.dx),this.vbar&&(t-=zo.event.dy),this.setTranslate(r,t)};jt.prototype._onBoxWheel=function(){var r=this.translateX,t=this.translateY;this.hbar&&(r+=zo.event.deltaY),this.vbar&&(t+=zo.event.deltaY),this.setTranslate(r,t)};jt.prototype._onBarDrag=function(){var r=this.translateX,t=this.translateY;if(this.hbar){var a=r+this._hbarXMin,n=a+this._hbarTranslateMax,i=pg.constrain(zo.event.x,a,n),o=(i-a)/(n-a),l=this.position.w-this._box.w;r=o*l}if(this.vbar){var s=t+this._vbarYMin,u=s+this._vbarTranslateMax,f=pg.constrain(zo.event.y,s,u),c=(f-s)/(u-s),v=this.position.h-this._box.h;t=c*v}this.setTranslate(r,t)};jt.prototype.setTranslate=function(r,t){var a=this.position.w-this._box.w,n=this.position.h-this._box.h;if(r=pg.constrain(r||0,0,a),t=pg.constrain(t||0,0,n),this.translateX=r,this.translateY=t,this.container.call(Ec.setTranslate,this._box.l-this.position.l-r,this._box.t-this.position.t-t),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+r-.5),y:Math.floor(this.position.t+t-.5)}),this.hbar){var i=r/a;this.hbar.call(Ec.setTranslate,r+i*this._hbarTranslateMax,t)}if(this.vbar){var o=t/n;this.vbar.call(Ec.setTranslate,r,t+o*this._vbarTranslateMax)}}});var nj=z((RWe,aj)=>{\"use strict\";var Pc=Er(),Nd=va(),Id=Sr(),Rc=Zr(),Ti=ke(),mg=Ca(),ETe=St().arrayEditor,$V=Qa().LINE_SPACING,qr=hg(),PTe=XV();aj.exports=function(r){var t=r._fullLayout,a=Ti.filterVisible(t[qr.name]);function n(v){Nd.autoMargin(r,rj(v))}var i=t._menulayer.selectAll(\"g.\"+qr.containerClassName).data(a.length>0?[0]:[]);if(i.enter().append(\"g\").classed(qr.containerClassName,!0).style(\"cursor\",\"pointer\"),i.exit().each(function(){Pc.select(this).selectAll(\"g.\"+qr.headerGroupClassName).each(n)}).remove(),a.length!==0){var o=i.selectAll(\"g.\"+qr.headerGroupClassName).data(a,RTe);o.enter().append(\"g\").classed(qr.headerGroupClassName,!0);for(var l=Ti.ensureSingle(i,\"g\",qr.dropdownButtonGroupClassName,function(v){v.style(\"pointer-events\",\"all\")}),s=0;s<a.length;s++){var u=a[s];OTe(r,u)}var f=\"updatemenus\"+t._uid,c=new PTe(r,l,f);o.enter().size()&&(l.node().parentNode.appendChild(l.node()),l.call(u8)),o.exit().each(function(v){l.call(u8),n(v)}).remove(),o.each(function(v){var d=Pc.select(this),p=v.type===\"dropdown\"?l:null;Nd.manageCommandObserver(r,v,v.buttons,function(y){s8(r,v,v.buttons[y.index],d,p,c,y.index,!0)}),v.type===\"dropdown\"?(KV(r,d,l,c,v),JV(l,v)&&Bd(r,d,l,c,v)):Bd(r,d,null,null,v)})}};function RTe(e){return e._index}function FTe(e){return+e.attr(qr.menuIndexAttrName)==-1}function JV(e,r){return+e.attr(qr.menuIndexAttrName)===r._index}function s8(e,r,t,a,n,i,o,l){r.active=o,ETe(e.layout,qr.name,r).applyUpdate(\"active\",o),r.type===\"buttons\"?Bd(e,a,null,null,r):r.type===\"dropdown\"&&(n.attr(qr.menuIndexAttrName,\"-1\"),KV(e,a,n,i,r),l||Bd(e,a,n,i,r))}function KV(e,r,t,a,n){var i=Ti.ensureSingle(r,\"g\",qr.headerClassName,function(v){v.style(\"pointer-events\",\"all\")}),o=n._dims,l=n.active,s=n.buttons[l]||qr.blankHeaderOpts,u={y:n.pad.t,yPad:0,x:n.pad.l,xPad:0,index:0},f={width:o.headerWidth,height:o.headerHeight};i.call(f8,n,s,e).call(tj,n,u,f);var c=Ti.ensureSingle(r,\"text\",qr.headerArrowClassName,function(v){v.attr(\"text-anchor\",\"end\").call(Rc.font,n.font).text(qr.arrowSymbol[n.direction])});c.attr({x:o.headerWidth-qr.arrowOffsetX+n.pad.l,y:o.headerHeight/2+qr.textOffsetY+n.pad.t}),i.on(\"click\",function(){t.call(u8,String(JV(t,n)?-1:n._index)),Bd(e,r,t,a,n)}),i.on(\"mouseover\",function(){i.call(QV)}),i.on(\"mouseout\",function(){i.call(ej,n)}),Rc.setTranslate(r,o.lx,o.ly)}function Bd(e,r,t,a,n){t||(t=r,t.attr(\"pointer-events\",\"all\"));var i=!FTe(t)||n.type===\"buttons\"?n.buttons:[],o=n.type===\"dropdown\"?qr.dropdownButtonClassName:qr.buttonClassName,l=t.selectAll(\"g.\"+o).data(Ti.filterVisible(i)),s=l.enter().append(\"g\").classed(o,!0),u=l.exit();n.type===\"dropdown\"?(s.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),u.transition().attr(\"opacity\",\"0\").remove()):u.remove();var f=0,c=0,v=n._dims,d=[\"up\",\"down\"].indexOf(n.direction)!==-1;n.type===\"dropdown\"&&(d?c=v.headerHeight+qr.gapButtonHeader:f=v.headerWidth+qr.gapButtonHeader),n.type===\"dropdown\"&&n.direction===\"up\"&&(c=-qr.gapButtonHeader+qr.gapButton-v.openHeight),n.type===\"dropdown\"&&n.direction===\"left\"&&(f=-qr.gapButtonHeader+qr.gapButton-v.openWidth);var p={x:v.lx+f+n.pad.l,y:v.ly+c+n.pad.t,yPad:qr.gapButton,xPad:qr.gapButton,index:0},y={l:p.x+n.borderwidth,t:p.y+n.borderwidth};l.each(function(m,b){var T=Pc.select(this);T.call(f8,n,m,e).call(tj,n,p),T.on(\"click\",function(){Pc.event.defaultPrevented||(m.execute&&(m.args2&&n.active===b?(s8(e,n,m,r,t,a,-1),Nd.executeAPICommand(e,m.method,m.args2)):(s8(e,n,m,r,t,a,b),Nd.executeAPICommand(e,m.method,m.args))),e.emit(\"plotly_buttonclicked\",{menu:n,button:m,active:n.active}))}),T.on(\"mouseover\",function(){T.call(QV)}),T.on(\"mouseout\",function(){T.call(ej,n),l.call(ZV,n)})}),l.call(ZV,n),d?(y.w=Math.max(v.openWidth,v.headerWidth),y.h=p.y-y.t):(y.w=p.x-y.l,y.h=Math.max(v.openHeight,v.headerHeight)),y.direction=n.direction,a&&(l.size()?zTe(e,r,t,a,n,y):NTe(a))}function zTe(e,r,t,a,n,i){var o=n.direction,l=o===\"up\"||o===\"down\",s=n._dims,u=n.active,f,c,v;if(l)for(c=0,v=0;v<u;v++)c+=s.heights[v]+qr.gapButton;else for(f=0,v=0;v<u;v++)f+=s.widths[v]+qr.gapButton;a.enable(i,f,c),a.hbar&&a.hbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),a.vbar&&a.vbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\")}function NTe(e){var r=!!e.hbar,t=!!e.vbar;r&&e.hbar.transition().attr(\"opacity\",\"0\").each(\"end\",function(){r=!1,t||e.disable()}),t&&e.vbar.transition().attr(\"opacity\",\"0\").each(\"end\",function(){t=!1,r||e.disable()})}function f8(e,r,t,a){e.call(ITe,r).call(BTe,r,t,a)}function ITe(e,r){var t=Ti.ensureSingle(e,\"rect\",qr.itemRectClassName,function(a){a.attr({rx:qr.rx,ry:qr.ry,\"shape-rendering\":\"crispEdges\"})});t.call(Id.stroke,r.bordercolor).call(Id.fill,r.bgcolor).style(\"stroke-width\",r.borderwidth+\"px\")}function BTe(e,r,t,a){var n=Ti.ensureSingle(e,\"text\",qr.itemTextClassName,function(l){l.attr({\"text-anchor\":\"start\",\"data-notex\":1})}),i=t.label,o=a._fullLayout._meta;o&&(i=Ti.templateString(i,o)),n.call(Rc.font,r.font).text(i).call(mg.convertToTspans,a)}function ZV(e,r){var t=r.active;e.each(function(a,n){var i=Pc.select(this);n===t&&r.showactive&&i.select(\"rect.\"+qr.itemRectClassName).call(Id.fill,qr.activeColor)})}function QV(e){e.select(\"rect.\"+qr.itemRectClassName).call(Id.fill,qr.hoverColor)}function ej(e,r){e.select(\"rect.\"+qr.itemRectClassName).call(Id.fill,r.bgcolor)}function OTe(e,r){var t=r._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},a=Rc.tester.selectAll(\"g.\"+qr.dropdownButtonClassName).data(Ti.filterVisible(r.buttons));a.enter().append(\"g\").classed(qr.dropdownButtonClassName,!0);var n=[\"up\",\"down\"].indexOf(r.direction)!==-1;a.each(function(f,c){var v=Pc.select(this);v.call(f8,r,f,e);var d=v.select(\".\"+qr.itemTextClassName),p=d.node()&&Rc.bBox(d.node()).width,y=Math.max(p+qr.textPadX,qr.minWidth),m=r.font.size*$V,b=mg.lineCount(d),T=Math.max(m*b,qr.minHeight)+qr.textOffsetY;T=Math.ceil(T),y=Math.ceil(y),t.widths[c]=y,t.heights[c]=T,t.height1=Math.max(t.height1,T),t.width1=Math.max(t.width1,y),n?(t.totalWidth=Math.max(t.totalWidth,y),t.openWidth=t.totalWidth,t.totalHeight+=T+qr.gapButton,t.openHeight+=T+qr.gapButton):(t.totalWidth+=y+qr.gapButton,t.openWidth+=y+qr.gapButton,t.totalHeight=Math.max(t.totalHeight,T),t.openHeight=t.totalHeight)}),n?t.totalHeight-=qr.gapButton:t.totalWidth-=qr.gapButton,t.headerWidth=t.width1+qr.arrowPadX,t.headerHeight=t.height1,r.type===\"dropdown\"&&(n?(t.width1+=qr.arrowPadX,t.totalHeight=t.height1):t.totalWidth=t.width1,t.totalWidth+=qr.arrowPadX),a.remove();var i=t.totalWidth+r.pad.l+r.pad.r,o=t.totalHeight+r.pad.t+r.pad.b,l=e._fullLayout._size;t.lx=l.l+l.w*r.x,t.ly=l.t+l.h*(1-r.y);var s=\"left\";Ti.isRightAnchor(r)&&(t.lx-=i,s=\"right\"),Ti.isCenterAnchor(r)&&(t.lx-=i/2,s=\"center\");var u=\"top\";Ti.isBottomAnchor(r)&&(t.ly-=o,u=\"bottom\"),Ti.isMiddleAnchor(r)&&(t.ly-=o/2,u=\"middle\"),t.totalWidth=Math.ceil(t.totalWidth),t.totalHeight=Math.ceil(t.totalHeight),t.lx=Math.round(t.lx),t.ly=Math.round(t.ly),Nd.autoMargin(e,rj(r),{x:r.x,y:r.y,l:i*({right:1,center:.5}[s]||0),r:i*({left:1,center:.5}[s]||0),b:o*({top:1,middle:.5}[u]||0),t:o*({bottom:1,middle:.5}[u]||0)})}function rj(e){return qr.autoMarginIdRoot+e._index}function tj(e,r,t,a){a=a||{};var n=e.select(\".\"+qr.itemRectClassName),i=e.select(\".\"+qr.itemTextClassName),o=r.borderwidth,l=t.index,s=r._dims;Rc.setTranslate(e,o+t.x,o+t.y);var u=[\"up\",\"down\"].indexOf(r.direction)!==-1,f=a.height||(u?s.heights[l]:s.height1);n.attr({x:0,y:0,width:a.width||(u?s.width1:s.widths[l]),height:f});var c=r.font.size*$V,v=mg.lineCount(i),d=(v-1)*c/2;mg.positionText(i,qr.textOffsetX,f/2-d+qr.textOffsetY),u?t.y+=s.heights[l]+t.yPad:t.x+=s.widths[l]+t.xPad,t.index++}function u8(e,r){e.attr(qr.menuIndexAttrName,r||\"-1\").selectAll(\"g.\"+qr.dropdownButtonClassName).remove()}});var oj=z((FWe,ij)=>{\"use strict\";var HTe=hg();ij.exports={moduleType:\"component\",name:HTe.name,layoutAttributes:l8(),supplyLayoutDefaults:VV(),draw:nj()}});var Od=z((zWe,lj)=>{\"use strict\";lj.exports={name:\"sliders\",containerClassName:\"slider-container\",groupClassName:\"slider-group\",inputAreaClass:\"slider-input-area\",railRectClass:\"slider-rail-rect\",railTouchRectClass:\"slider-rail-touch-rect\",gripRectClass:\"slider-grip-rect\",tickRectClass:\"slider-tick-rect\",inputProxyClass:\"slider-input-proxy\",labelsClass:\"slider-labels\",labelGroupClass:\"slider-label-group\",labelClass:\"slider-label\",currentValueClass:\"slider-current-value\",railHeight:5,menuIndexAttrName:\"slider-active-index\",autoMarginIdRoot:\"slider-\",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:\"#bec8d9\",railBgColor:\"#f8fafc\",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:\"#bec8d9\",gripBgColor:\"#f6f8fa\",gripBgActiveColor:\"#dbdde0\",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:\"#333\",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:\"#333\",minorTickLength:4,currentValuePadding:8,currentValueInset:0}});var c8=z((NWe,fj)=>{\"use strict\";var sj=ka(),UTe=dp(),GTe=At().extendDeepAll,YTe=wo().overrideAll,VTe=mh(),uj=St().templatedArray,Tf=Od(),jTe=uj(\"step\",{visible:{valType:\"boolean\",dflt:!0},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\"},value:{valType:\"string\"},execute:{valType:\"boolean\",dflt:!0}});fj.exports=YTe(uj(\"slider\",{visible:{valType:\"boolean\",dflt:!0},active:{valType:\"number\",min:0,dflt:0},steps:jTe,lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\",min:-2,max:3,dflt:0},pad:GTe(UTe({editType:\"arraydraw\"}),{},{t:{dflt:20}}),xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\"},y:{valType:\"number\",min:-2,max:3,dflt:0},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},transition:{duration:{valType:\"number\",min:0,dflt:150},easing:{valType:\"enumerated\",values:VTe.transition.easing.values,dflt:\"cubic-in-out\"}},currentvalue:{visible:{valType:\"boolean\",dflt:!0},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\"},offset:{valType:\"number\",dflt:10},prefix:{valType:\"string\"},suffix:{valType:\"string\"},font:sj({})},font:sj({}),activebgcolor:{valType:\"color\",dflt:Tf.gripBgActiveColor},bgcolor:{valType:\"color\",dflt:Tf.railBgColor},bordercolor:{valType:\"color\",dflt:Tf.railBorderColor},borderwidth:{valType:\"number\",min:0,dflt:Tf.railBorderWidth},ticklen:{valType:\"number\",min:0,dflt:Tf.tickLength},tickcolor:{valType:\"color\",dflt:Tf.tickColor},tickwidth:{valType:\"number\",min:0,dflt:1},minorticklen:{valType:\"number\",min:0,dflt:Tf.minorTickLength}}),\"arraydraw\",\"from-root\")});var dj=z((IWe,hj)=>{\"use strict\";var Fc=ke(),cj=So(),vj=c8(),WTe=Od(),XTe=WTe.name,ZTe=vj.steps;hj.exports=function(r,t){cj(r,t,{name:XTe,handleItemDefaults:$Te})};function $Te(e,r,t){function a(c,v){return Fc.coerce(e,r,vj,c,v)}for(var n=cj(e,r,{name:\"steps\",handleItemDefaults:JTe}),i=0,o=0;o<n.length;o++)n[o].visible&&i++;var l;if(i<2?l=r.visible=!1:l=a(\"visible\"),!!l){r._stepCount=i;var s=r._visibleSteps=Fc.filterVisible(n),u=a(\"active\");(n[u]||{}).visible||(r.active=s[0]._index),a(\"x\"),a(\"y\"),Fc.noneOrAll(e,r,[\"x\",\"y\"]),a(\"xanchor\"),a(\"yanchor\"),a(\"len\"),a(\"lenmode\"),a(\"pad.t\"),a(\"pad.r\"),a(\"pad.b\"),a(\"pad.l\"),Fc.coerceFont(a,\"font\",t.font);var f=a(\"currentvalue.visible\");f&&(a(\"currentvalue.xanchor\"),a(\"currentvalue.prefix\"),a(\"currentvalue.suffix\"),a(\"currentvalue.offset\"),Fc.coerceFont(a,\"currentvalue.font\",r.font)),a(\"transition.duration\"),a(\"transition.easing\"),a(\"bgcolor\"),a(\"activebgcolor\"),a(\"bordercolor\"),a(\"borderwidth\"),a(\"ticklen\"),a(\"tickwidth\"),a(\"tickcolor\"),a(\"minorticklen\")}}function JTe(e,r){function t(i,o){return Fc.coerce(e,r,ZTe,i,o)}var a;if(e.method!==\"skip\"&&!Array.isArray(e.args)?a=r.visible=!1:a=t(\"visible\"),a){t(\"method\"),t(\"args\");var n=t(\"label\",\"step-\"+r._index);t(\"value\",n),t(\"execute\")}}});var Aj=z((BWe,Tj)=>{\"use strict\";var No=Er(),yg=va(),js=Sr(),Io=Zr(),Ai=ke(),KTe=Ai.strTranslate,Hd=Ca(),QTe=St().arrayEditor,Or=Od(),d8=Qa(),yj=d8.LINE_SPACING,v8=d8.FROM_TL,h8=d8.FROM_BR;Tj.exports=function(r){var t=r._context.staticPlot,a=r._fullLayout,n=eAe(a,r),i=a._infolayer.selectAll(\"g.\"+Or.containerClassName).data(n.length>0?[0]:[]);i.enter().append(\"g\").classed(Or.containerClassName,!0).style(\"cursor\",t?null:\"ew-resize\");function o(f){f._commandObserver&&(f._commandObserver.remove(),delete f._commandObserver),yg.autoMargin(r,gj(f))}if(i.exit().each(function(){No.select(this).selectAll(\"g.\"+Or.groupClassName).each(o)}).remove(),n.length!==0){var l=i.selectAll(\"g.\"+Or.groupClassName).data(n,rAe);l.enter().append(\"g\").classed(Or.groupClassName,!0),l.exit().each(o).remove();for(var s=0;s<n.length;s++){var u=n[s];tAe(r,u)}l.each(function(f){var c=No.select(this);lAe(f),yg.manageCommandObserver(r,f,f._visibleSteps,function(v){var d=c.data()[0];d.active!==v.index&&(d._dragging||xj(r,c,d,v.index,!1,!0))}),aAe(r,No.select(this),f)})}};function gj(e){return Or.autoMarginIdRoot+e._index}function eAe(e,r){for(var t=e[Or.name],a=[],n=0;n<t.length;n++){var i=t[n];i.visible&&(i._gd=r,a.push(i))}return a}function rAe(e){return e._index}function tAe(e,r){var t=Io.tester.selectAll(\"g.\"+Or.labelGroupClass).data(r._visibleSteps);t.enter().append(\"g\").classed(Or.labelGroupClass,!0);var a=0,n=0;t.each(function(p){var y=No.select(this),m=bj(y,{step:p},r),b=m.node();if(b){var T=Io.bBox(b);n=Math.max(n,T.height),a=Math.max(a,T.width)}}),t.remove();var i=r._dims={};i.inputAreaWidth=Math.max(Or.railWidth,Or.gripHeight);var o=e._fullLayout._size;i.lx=o.l+o.w*r.x,i.ly=o.t+o.h*(1-r.y),r.lenmode===\"fraction\"?i.outerLength=Math.round(o.w*r.len):i.outerLength=r.len,i.inputAreaStart=0,i.inputAreaLength=Math.round(i.outerLength-r.pad.l-r.pad.r);var l=i.inputAreaLength-2*Or.stepInset,s=l/(r._stepCount-1),u=a+Or.labelPadding;if(i.labelStride=Math.max(1,Math.ceil(u/s)),i.labelHeight=n,i.currentValueMaxWidth=0,i.currentValueHeight=0,i.currentValueTotalHeight=0,i.currentValueMaxLines=1,r.currentvalue.visible){var f=Io.tester.append(\"g\");t.each(function(p){var y=gg(f,r,p.label),m=y.node()&&Io.bBox(y.node())||{width:0,height:0},b=Hd.lineCount(y);i.currentValueMaxWidth=Math.max(i.currentValueMaxWidth,Math.ceil(m.width)),i.currentValueHeight=Math.max(i.currentValueHeight,Math.ceil(m.height)),i.currentValueMaxLines=Math.max(i.currentValueMaxLines,b)}),i.currentValueTotalHeight=i.currentValueHeight+r.currentvalue.offset,f.remove()}i.height=i.currentValueTotalHeight+Or.tickOffset+r.ticklen+Or.labelOffset+i.labelHeight+r.pad.t+r.pad.b;var c=\"left\";Ai.isRightAnchor(r)&&(i.lx-=i.outerLength,c=\"right\"),Ai.isCenterAnchor(r)&&(i.lx-=i.outerLength/2,c=\"center\");var v=\"top\";Ai.isBottomAnchor(r)&&(i.ly-=i.height,v=\"bottom\"),Ai.isMiddleAnchor(r)&&(i.ly-=i.height/2,v=\"middle\"),i.outerLength=Math.ceil(i.outerLength),i.height=Math.ceil(i.height),i.lx=Math.round(i.lx),i.ly=Math.round(i.ly);var d={y:r.y,b:i.height*h8[v],t:i.height*v8[v]};r.lenmode===\"fraction\"?(d.l=0,d.xl=r.x-r.len*v8[c],d.r=0,d.xr=r.x+r.len*h8[c]):(d.x=r.x,d.l=i.outerLength*v8[c],d.r=i.outerLength*h8[c]),yg.autoMargin(e,gj(r),d)}function aAe(e,r,t){(t.steps[t.active]||{}).visible||(t.active=t._visibleSteps[0]._index),r.call(gg,t).call(uAe,t).call(iAe,t).call(oAe,t).call(sAe,e,t).call(nAe,e,t);var a=t._dims;Io.setTranslate(r,a.lx+t.pad.l,a.ly+t.pad.t),r.call(wj,t,!1),r.call(gg,t)}function gg(e,r,t){if(r.currentvalue.visible){var a=r._dims,n,i;switch(r.currentvalue.xanchor){case\"right\":n=a.inputAreaLength-Or.currentValueInset-a.currentValueMaxWidth,i=\"left\";break;case\"center\":n=a.inputAreaLength*.5,i=\"middle\";break;default:n=Or.currentValueInset,i=\"left\"}var o=Ai.ensureSingle(e,\"text\",Or.labelClass,function(v){v.attr({\"text-anchor\":i,\"data-notex\":1})}),l=r.currentvalue.prefix?r.currentvalue.prefix:\"\";if(typeof t==\"string\")l+=t;else{var s=r.steps[r.active].label,u=r._gd._fullLayout._meta;u&&(s=Ai.templateString(s,u)),l+=s}r.currentvalue.suffix&&(l+=r.currentvalue.suffix),o.call(Io.font,r.currentvalue.font).text(l).call(Hd.convertToTspans,r._gd);var f=Hd.lineCount(o),c=(a.currentValueMaxLines+1-f)*r.currentvalue.font.size*yj;return Hd.positionText(o,n,c),o}}function nAe(e,r,t){var a=Ai.ensureSingle(e,\"rect\",Or.gripRectClass,function(n){n.call(_j,r,e,t).style(\"pointer-events\",\"all\")});a.attr({width:Or.gripWidth,height:Or.gripHeight,rx:Or.gripRadius,ry:Or.gripRadius}).call(js.stroke,t.bordercolor).call(js.fill,t.bgcolor).style(\"stroke-width\",t.borderwidth+\"px\")}function bj(e,r,t){var a=Ai.ensureSingle(e,\"text\",Or.labelClass,function(o){o.attr({\"text-anchor\":\"middle\",\"data-notex\":1})}),n=r.step.label,i=t._gd._fullLayout._meta;return i&&(n=Ai.templateString(n,i)),a.call(Io.font,t.font).text(n).call(Hd.convertToTspans,t._gd),a}function iAe(e,r){var t=Ai.ensureSingle(e,\"g\",Or.labelsClass),a=r._dims,n=t.selectAll(\"g.\"+Or.labelGroupClass).data(a.labelSteps);n.enter().append(\"g\").classed(Or.labelGroupClass,!0),n.exit().remove(),n.each(function(i){var o=No.select(this);o.call(bj,i,r),Io.setTranslate(o,p8(r,i.fraction),Or.tickOffset+r.ticklen+r.font.size*yj+Or.labelOffset+a.currentValueTotalHeight)})}function pj(e,r,t,a,n){var i=Math.round(a*(t._stepCount-1)),o=t._visibleSteps[i]._index;o!==t.active&&xj(e,r,t,o,!0,n)}function xj(e,r,t,a,n,i){var o=t.active;t.active=a,QTe(e.layout,Or.name,t).applyUpdate(\"active\",a);var l=t.steps[t.active];r.call(wj,t,i),r.call(gg,t),e.emit(\"plotly_sliderchange\",{slider:t,step:t.steps[t.active],interaction:n,previousActive:o}),l&&l.method&&n&&(r._nextMethod?(r._nextMethod.step=l,r._nextMethod.doCallback=n,r._nextMethod.doTransition=i):(r._nextMethod={step:l,doCallback:n,doTransition:i},r._nextMethodRaf=window.requestAnimationFrame(function(){var s=r._nextMethod.step;s.method&&(s.execute&&yg.executeAPICommand(e,s.method,s.args),r._nextMethod=null,r._nextMethodRaf=null)})))}function _j(e,r,t){if(r._context.staticPlot)return;var a=t.node(),n=No.select(r);function i(){return t.data()[0]}function o(){var l=i();r.emit(\"plotly_sliderstart\",{slider:l});var s=t.select(\".\"+Or.gripRectClass);No.event.stopPropagation(),No.event.preventDefault(),s.call(js.fill,l.activebgcolor);var u=mj(l,No.mouse(a)[0]);pj(r,t,l,u,!0),l._dragging=!0;function f(){var v=i(),d=mj(v,No.mouse(a)[0]);pj(r,t,v,d,!1)}n.on(\"mousemove\",f),n.on(\"touchmove\",f);function c(){var v=i();v._dragging=!1,s.call(js.fill,v.bgcolor),n.on(\"mouseup\",null),n.on(\"mousemove\",null),n.on(\"touchend\",null),n.on(\"touchmove\",null),r.emit(\"plotly_sliderend\",{slider:v,step:v.steps[v.active]})}n.on(\"mouseup\",c),n.on(\"touchend\",c)}e.on(\"mousedown\",o),e.on(\"touchstart\",o)}function oAe(e,r){var t=e.selectAll(\"rect.\"+Or.tickRectClass).data(r._visibleSteps),a=r._dims;t.enter().append(\"rect\").classed(Or.tickRectClass,!0),t.exit().remove(),t.attr({width:r.tickwidth+\"px\",\"shape-rendering\":\"crispEdges\"}),t.each(function(n,i){var o=i%a.labelStride===0,l=No.select(this);l.attr({height:o?r.ticklen:r.minorticklen}).call(js.fill,r.tickcolor),Io.setTranslate(l,p8(r,i/(r._stepCount-1))-.5*r.tickwidth,(o?Or.tickOffset:Or.minorTickOffset)+a.currentValueTotalHeight)})}function lAe(e){var r=e._dims;r.labelSteps=[];for(var t=e._stepCount,a=0;a<t;a+=r.labelStride)r.labelSteps.push({fraction:a/(t-1),step:e._visibleSteps[a]})}function wj(e,r,t){for(var a=e.select(\"rect.\"+Or.gripRectClass),n=0,i=0;i<r._stepCount;i++)if(r._visibleSteps[i]._index===r.active){n=i;break}var o=p8(r,n/(r._stepCount-1));if(!r._invokingCommand){var l=a;t&&r.transition.duration>0&&(l=l.transition().duration(r.transition.duration).ease(r.transition.easing)),l.attr(\"transform\",KTe(o-Or.gripWidth*.5,r._dims.currentValueTotalHeight))}}function p8(e,r){var t=e._dims;return t.inputAreaStart+Or.stepInset+(t.inputAreaLength-2*Or.stepInset)*Math.min(1,Math.max(0,r))}function mj(e,r){var t=e._dims;return Math.min(1,Math.max(0,(r-Or.stepInset-t.inputAreaStart)/(t.inputAreaLength-2*Or.stepInset-2*t.inputAreaStart)))}function sAe(e,r,t){var a=t._dims,n=Ai.ensureSingle(e,\"rect\",Or.railTouchRectClass,function(i){i.call(_j,r,e,t).style(\"pointer-events\",\"all\")});n.attr({width:a.inputAreaLength,height:Math.max(a.inputAreaWidth,Or.tickOffset+t.ticklen+a.labelHeight)}).call(js.fill,t.bgcolor).attr(\"opacity\",0),Io.setTranslate(n,0,a.currentValueTotalHeight)}function uAe(e,r){var t=r._dims,a=t.inputAreaLength-Or.railInset*2,n=Ai.ensureSingle(e,\"rect\",Or.railRectClass);n.attr({width:a,height:Or.railWidth,rx:Or.railRadius,ry:Or.railRadius,\"shape-rendering\":\"crispEdges\"}).call(js.stroke,r.bordercolor).call(js.fill,r.bgcolor).style(\"stroke-width\",r.borderwidth+\"px\"),Io.setTranslate(n,Or.railInset,(t.inputAreaWidth-Or.railWidth)*.5+t.currentValueTotalHeight)}});var kj=z((OWe,Mj)=>{\"use strict\";var fAe=Od();Mj.exports={moduleType:\"component\",name:fAe.name,layoutAttributes:c8(),supplyLayoutDefaults:dj(),draw:Aj()}});var bg=z((HWe,qj)=>{\"use strict\";var Sj=Ei();qj.exports={bgcolor:{valType:\"color\",dflt:Sj.background,editType:\"plot\"},bordercolor:{valType:\"color\",dflt:Sj.defaultLine,editType:\"plot\"},borderwidth:{valType:\"integer\",dflt:0,min:0,editType:\"plot\"},autorange:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}}],editType:\"calc\",impliedEdits:{autorange:!1}},thickness:{valType:\"number\",dflt:.15,min:0,max:1,editType:\"plot\"},visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"}});var m8=z((UWe,Lj)=>{\"use strict\";Lj.exports={_isSubplotObj:!0,rangemode:{valType:\"enumerated\",values:[\"auto\",\"fixed\",\"match\"],dflt:\"match\",editType:\"calc\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"plot\"},{valType:\"any\",editType:\"plot\"}],editType:\"plot\"},editType:\"calc\"}});var xg=z((GWe,Cj)=>{\"use strict\";Cj.exports={name:\"rangeslider\",containerClassName:\"rangeslider-container\",bgClassName:\"rangeslider-bg\",rangePlotClassName:\"rangeslider-rangeplot\",maskMinClassName:\"rangeslider-mask-min\",maskMaxClassName:\"rangeslider-mask-max\",slideBoxClassName:\"rangeslider-slidebox\",grabberMinClassName:\"rangeslider-grabber-min\",grabAreaMinClassName:\"rangeslider-grabarea-min\",handleMinClassName:\"rangeslider-handle-min\",grabberMaxClassName:\"rangeslider-grabber-max\",grabAreaMaxClassName:\"rangeslider-grabarea-max\",handleMaxClassName:\"rangeslider-handle-max\",maskMinOppAxisClassName:\"rangeslider-mask-min-opp-axis\",maskMaxOppAxisClassName:\"rangeslider-mask-max-opp-axis\",maskColor:\"rgba(0,0,0,0.4)\",maskOppAxisColor:\"rgba(0,0,0,0.2)\",slideBoxFill:\"transparent\",slideBoxCursor:\"ew-resize\",grabAreaFill:\"transparent\",grabAreaCursor:\"col-resize\",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}});var Pj=z(wg=>{\"use strict\";var cAe=ba(),vAe=Ca(),Dj=xg(),hAe=Qa().LINE_SPACING,_g=Dj.name;function Ej(e){var r=e&&e[_g];return r&&r.visible}wg.isVisible=Ej;wg.makeData=function(e){for(var r=cAe.list({_fullLayout:e},\"x\",!0),t=e.margin,a=[],n=0;n<r.length;n++){var i=r[n];if(Ej(i)){a.push(i);var o=i[_g];o._id=_g+i._id,o._height=(e.height-t.b-t.t)*o.thickness,o._offsetShift=Math.floor(o.borderwidth/2)}}e._rangeSliderData=a};wg.autoMarginOpts=function(e,r){var t=e._fullLayout,a=r[_g],n=r._id.charAt(0),i=0,o=0;if(r.side===\"bottom\"&&(i=r._depth,r.title.text!==t._dfltTitle[n])){o=1.5*r.title.font.size+10+a._offsetShift;var l=(r.title.text.match(vAe.BR_TAG_ALL)||[]).length;o+=l*r.title.font.size*hAe}return{x:0,y:r._counterDomainMin,l:0,r:0,t:0,b:a._height+i+Math.max(t.margin.b,o),pad:Dj.extraPad+a._offsetShift*2}}});var Nj=z((VWe,zj)=>{\"use strict\";var Tg=ke(),Rj=St(),Fj=ba(),dAe=bg(),pAe=m8();zj.exports=function(r,t,a){var n=r[a],i=t[a];if(!(n.rangeslider||t._requestRangeslider[i._id]))return;Tg.isPlainObject(n.rangeslider)||(n.rangeslider={});var o=n.rangeslider,l=Rj.newContainer(i,\"rangeslider\");function s(_,k){return Tg.coerce(o,l,dAe,_,k)}var u,f;function c(_,k){return Tg.coerce(u,f,pAe,_,k)}var v=s(\"visible\");if(v){s(\"bgcolor\",t.plot_bgcolor),s(\"bordercolor\"),s(\"borderwidth\"),s(\"thickness\"),s(\"autorange\",!i.isValidRange(o.range)),s(\"range\");var d=t._subplots;if(d)for(var p=d.cartesian.filter(function(_){return _.slice(0,Math.max(0,_.indexOf(\"y\")))===Fj.name2id(a)}).map(function(_){return _.slice(_.indexOf(\"y\"),_.length)}),y=Tg.simpleMap(p,Fj.id2name),m=0;m<y.length;m++){var b=y[m];u=o[b]||{},f=Rj.newContainer(l,b,\"yaxis\");var T=t[b],w;u.range&&T.isValidRange(u.range)&&(w=\"fixed\");var x=c(\"rangemode\",w);x!==\"match\"&&c(\"range\",T.range.slice())}l._input=o}}});var Bj=z((jWe,Ij)=>{\"use strict\";var mAe=ba().list,yAe=Ph().getAutoRange,gAe=xg();Ij.exports=function(r){for(var t=mAe(r,\"x\",!0),a=0;a<t.length;a++){var n=t[a],i=n[gAe.name];i&&i.visible&&i.autorange&&(i._input.autorange=!0,i._input.range=i.range=yAe(r,n))}}});var Gj=z((WWe,Uj)=>{\"use strict\";var Ag=Er(),bAe=Tr(),xAe=va(),ia=ke(),Mg=ia.strTranslate,Hj=Zr(),Ws=Sr(),_Ae=Q0(),wAe=Qi(),y8=ba(),TAe=Bi(),AAe=Rs(),jr=xg();Uj.exports=function(e){for(var r=e._fullLayout,t=r._rangeSliderData,a=0;a<t.length;a++){var n=t[a][jr.name];n._clipId=n._id+\"-\"+r._uid}function i(l){return l._name}var o=r._infolayer.selectAll(\"g.\"+jr.containerClassName).data(t,i);o.exit().each(function(l){var s=l[jr.name];r._topdefs.select(\"#\"+s._clipId).remove()}).remove(),t.length!==0&&(o.enter().append(\"g\").classed(jr.containerClassName,!0).attr(\"pointer-events\",\"all\"),o.each(function(l){var s=Ag.select(this),u=l[jr.name],f=r[y8.id2name(l.anchor)],c=u[y8.id2name(l.anchor)];if(u.range){var v=ia.simpleMap(u.range,l.r2l),d=ia.simpleMap(l.range,l.r2l),p;d[0]<d[1]?p=[Math.min(v[0],d[0]),Math.max(v[1],d[1])]:p=[Math.max(v[0],d[0]),Math.min(v[1],d[1])],u.range=u._input.range=ia.simpleMap(p,l.l2r)}l.cleanRange(\"rangeslider.range\");var y=r._size,m=l.domain;u._width=y.w*(m[1]-m[0]);var b=Math.round(y.l+y.w*m[0]),T=Math.round(y.t+y.h*(1-l._counterDomainMin)+(l.side===\"bottom\"?l._depth:0)+u._offsetShift+jr.extraPad);s.attr(\"transform\",Mg(b,T)),u._rl=ia.simpleMap(u.range,l.r2l);var w=u._rl[0],x=u._rl[1],_=x-w;if(u.p2d=function(O){return O/u._width*_+w},u.d2p=function(O){return(O-w)/_*u._width},l.rangebreaks){var k=l.locateBreaks(w,x);if(k.length){var A,q,C=0;for(A=0;A<k.length;A++)q=k[A],C+=q.max-q.min;var E=u._width/(x-w-C),P=[-E*w];for(A=0;A<k.length;A++)q=k[A],P.push(P[P.length-1]-E*(q.max-q.min));for(u.d2p=function(O){for(var U=P[0],Y=0;Y<k.length;Y++){var G=k[Y];if(O>=G.max)U=P[Y+1];else if(O<G.min)break}return U+E*O},A=0;A<k.length;A++)q=k[A],q.pmin=u.d2p(q.min),q.pmax=u.d2p(q.max);u.p2d=function(O){for(var U=P[0],Y=0;Y<k.length;Y++){var G=k[Y];if(O>=G.pmax)U=P[Y+1];else if(O<G.pmin)break}return(O-U)/E}}}if(c.rangemode!==\"match\"){var R=f.r2l(c.range[0]),N=f.r2l(c.range[1]),I=N-R;u.d2pOppAxis=function(O){return(O-R)/I*u._height}}s.call(qAe,e,l,u).call(LAe,e,l,u).call(CAe,e,l,u).call(EAe,e,l,u,c).call(PAe,e,l,u).call(RAe,e,l,u),MAe(s,e,l,u),SAe(s,e,l,u,f,c),l.side===\"bottom\"&&_Ae.draw(e,l._id+\"title\",{propContainer:l,propName:l._name+\".title.text\",placeholder:r._dfltTitle.x,attributes:{x:l._offset+l._length/2,y:T+u._height+u._offsetShift+10+1.5*l.title.font.size,\"text-anchor\":\"middle\"}})}))};function Oj(e){return typeof e.clientX==\"number\"?e.clientX:e.touches&&e.touches.length>0?e.touches[0].clientX:0}function MAe(e,r,t,a){if(r._context.staticPlot)return;var n=e.select(\"rect.\"+jr.slideBoxClassName).node(),i=e.select(\"rect.\"+jr.grabAreaMinClassName).node(),o=e.select(\"rect.\"+jr.grabAreaMaxClassName).node();function l(){var s=Ag.event,u=s.target,f=Oj(s),c=f-e.node().getBoundingClientRect().left,v=a.d2p(t._rl[0]),d=a.d2p(t._rl[1]),p=TAe.coverSlip();this.addEventListener(\"touchmove\",y),this.addEventListener(\"touchend\",m),p.addEventListener(\"mousemove\",y),p.addEventListener(\"mouseup\",m);function y(b){var T=Oj(b),w=+T-f,x,_,k;switch(u){case n:if(k=\"ew-resize\",v+w>t._length||d+w<0)return;x=v+w,_=d+w;break;case i:if(k=\"col-resize\",v+w>t._length)return;x=v+w,_=d;break;case o:if(k=\"col-resize\",d+w<0)return;x=v,_=d+w;break;default:k=\"ew-resize\",x=c,_=c+w;break}if(_<x){var A=_;_=x,x=A}a._pixelMin=x,a._pixelMax=_,AAe(Ag.select(p),k),kAe(e,r,t,a)}function m(){p.removeEventListener(\"mousemove\",y),p.removeEventListener(\"mouseup\",m),this.removeEventListener(\"touchmove\",y),this.removeEventListener(\"touchend\",m),ia.removeElement(p)}}e.on(\"mousedown\",l),e.on(\"touchstart\",l)}function kAe(e,r,t,a){function n(l){return t.l2r(ia.constrain(l,a._rl[0],a._rl[1]))}var i=n(a.p2d(a._pixelMin)),o=n(a.p2d(a._pixelMax));window.requestAnimationFrame(function(){bAe.call(\"_guiRelayout\",r,t._name+\".range\",[i,o])})}function SAe(e,r,t,a,n,i){var o=jr.handleWidth/2;function l(b){return ia.constrain(b,0,a._width)}function s(b){return ia.constrain(b,0,a._height)}function u(b){return ia.constrain(b,-o,a._width+o)}var f=l(a.d2p(t._rl[0])),c=l(a.d2p(t._rl[1]));if(e.select(\"rect.\"+jr.slideBoxClassName).attr(\"x\",f).attr(\"width\",c-f),e.select(\"rect.\"+jr.maskMinClassName).attr(\"width\",f),e.select(\"rect.\"+jr.maskMaxClassName).attr(\"x\",c).attr(\"width\",a._width-c),i.rangemode!==\"match\"){var v=a._height-s(a.d2pOppAxis(n._rl[1])),d=a._height-s(a.d2pOppAxis(n._rl[0]));e.select(\"rect.\"+jr.maskMinOppAxisClassName).attr(\"x\",f).attr(\"height\",v).attr(\"width\",c-f),e.select(\"rect.\"+jr.maskMaxOppAxisClassName).attr(\"x\",f).attr(\"y\",d).attr(\"height\",a._height-d).attr(\"width\",c-f),e.select(\"rect.\"+jr.slideBoxClassName).attr(\"y\",v).attr(\"height\",d-v)}var p=.5,y=Math.round(u(f-o))-p,m=Math.round(u(c-o))+p;e.select(\"g.\"+jr.grabberMinClassName).attr(\"transform\",Mg(y,p)),e.select(\"g.\"+jr.grabberMaxClassName).attr(\"transform\",Mg(m,p))}function qAe(e,r,t,a){var n=ia.ensureSingle(e,\"rect\",jr.bgClassName,function(s){s.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})}),i=a.borderwidth%2===0?a.borderwidth:a.borderwidth-1,o=-a._offsetShift,l=Hj.crispRound(r,a.borderwidth);n.attr({width:a._width+i,height:a._height+i,transform:Mg(o,o),\"stroke-width\":l}).call(Ws.stroke,a.bordercolor).call(Ws.fill,a.bgcolor)}function LAe(e,r,t,a){var n=r._fullLayout,i=ia.ensureSingleById(n._topdefs,\"clipPath\",a._clipId,function(o){o.append(\"rect\").attr({x:0,y:0})});i.select(\"rect\").attr({width:a._width,height:a._height})}function CAe(e,r,t,a){var n=r.calcdata,i=e.selectAll(\"g.\"+jr.rangePlotClassName).data(t._subplotsWith,ia.identity);i.enter().append(\"g\").attr(\"class\",function(l){return jr.rangePlotClassName+\" \"+l}).call(Hj.setClipUrl,a._clipId,r),i.order(),i.exit().remove();var o;i.each(function(l,s){var u=Ag.select(this),f=s===0,c=y8.getFromId(r,l,\"y\"),v=c._name,d=a[v],p={data:[],layout:{xaxis:{type:t.type,domain:[0,1],range:a.range.slice(),calendar:t.calendar},width:a._width,height:a._height,margin:{t:0,b:0,l:0,r:0}},_context:r._context};t.rangebreaks&&(p.layout.xaxis.rangebreaks=t.rangebreaks),p.layout[v]={type:c.type,domain:[0,1],range:d.rangemode!==\"match\"?d.range.slice():c.range.slice(),calendar:c.calendar},c.rangebreaks&&(p.layout[v].rangebreaks=c.rangebreaks),xAe.supplyDefaults(p);var y=p._fullLayout.xaxis,m=p._fullLayout[v];y.clearCalc(),y.setScale(),m.clearCalc(),m.setScale();var b={id:l,plotgroup:u,xaxis:y,yaxis:m,isRangePlot:!0};f?o=b:(b.mainplot=\"xy\",b.mainplotinfo=o),wAe.rangePlot(r,b,DAe(n,l))})}function DAe(e,r){for(var t=[],a=0;a<e.length;a++){var n=e[a],i=n[0].trace;i.xaxis+i.yaxis===r&&t.push(n)}return t}function EAe(e,r,t,a,n){var i=ia.ensureSingle(e,\"rect\",jr.maskMinClassName,function(u){u.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})});i.attr(\"height\",a._height).call(Ws.fill,jr.maskColor);var o=ia.ensureSingle(e,\"rect\",jr.maskMaxClassName,function(u){u.attr({y:0,\"shape-rendering\":\"crispEdges\"})});if(o.attr(\"height\",a._height).call(Ws.fill,jr.maskColor),n.rangemode!==\"match\"){var l=ia.ensureSingle(e,\"rect\",jr.maskMinOppAxisClassName,function(u){u.attr({y:0,\"shape-rendering\":\"crispEdges\"})});l.attr(\"width\",a._width).call(Ws.fill,jr.maskOppAxisColor);var s=ia.ensureSingle(e,\"rect\",jr.maskMaxOppAxisClassName,function(u){u.attr({y:0,\"shape-rendering\":\"crispEdges\"})});s.attr(\"width\",a._width).style(\"border-top\",jr.maskOppBorder).call(Ws.fill,jr.maskOppAxisColor)}}function PAe(e,r,t,a){if(!r._context.staticPlot){var n=ia.ensureSingle(e,\"rect\",jr.slideBoxClassName,function(i){i.attr({y:0,cursor:jr.slideBoxCursor,\"shape-rendering\":\"crispEdges\"})});n.attr({height:a._height,fill:jr.slideBoxFill})}}function RAe(e,r,t,a){var n=ia.ensureSingle(e,\"g\",jr.grabberMinClassName),i=ia.ensureSingle(e,\"g\",jr.grabberMaxClassName),o={x:0,width:jr.handleWidth,rx:jr.handleRadius,fill:Ws.background,stroke:Ws.defaultLine,\"stroke-width\":jr.handleStrokeWidth,\"shape-rendering\":\"crispEdges\"},l={y:Math.round(a._height/4),height:Math.round(a._height/2)},s=ia.ensureSingle(n,\"rect\",jr.handleMinClassName,function(d){d.attr(o)});s.attr(l);var u=ia.ensureSingle(i,\"rect\",jr.handleMaxClassName,function(d){d.attr(o)});u.attr(l);var f={width:jr.grabAreaWidth,x:0,y:0,fill:jr.grabAreaFill,cursor:r._context.staticPlot?void 0:jr.grabAreaCursor},c=ia.ensureSingle(n,\"rect\",jr.grabAreaMinClassName,function(d){d.attr(f)});c.attr(\"height\",a._height);var v=ia.ensureSingle(i,\"rect\",jr.grabAreaMaxClassName,function(d){d.attr(f)});v.attr(\"height\",a._height)}});var Vj=z((XWe,Yj)=>{\"use strict\";var FAe=ke(),zAe=bg(),NAe=m8(),g8=Pj();Yj.exports={moduleType:\"component\",name:\"rangeslider\",schema:{subplots:{xaxis:{rangeslider:FAe.extendFlat({},zAe,{yaxis:NAe})}}},layoutAttributes:bg(),handleDefaults:Nj(),calcAutorange:Bj(),draw:Gj(),isVisible:g8.isVisible,makeData:g8.makeData,autoMarginOpts:g8.autoMarginOpts}});var kg=z((ZWe,Wj)=>{\"use strict\";var IAe=ka(),jj=Ei(),BAe=St().templatedArray,OAe=BAe(\"button\",{visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},step:{valType:\"enumerated\",values:[\"month\",\"year\",\"day\",\"hour\",\"minute\",\"second\",\"all\"],dflt:\"month\",editType:\"plot\"},stepmode:{valType:\"enumerated\",values:[\"backward\",\"todate\"],dflt:\"backward\",editType:\"plot\"},count:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},label:{valType:\"string\",editType:\"plot\"},editType:\"plot\"});Wj.exports={visible:{valType:\"boolean\",editType:\"plot\"},buttons:OAe,x:{valType:\"number\",min:-2,max:3,editType:\"plot\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"plot\"},y:{valType:\"number\",min:-2,max:3,editType:\"plot\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"bottom\",editType:\"plot\"},font:IAe({editType:\"plot\"}),bgcolor:{valType:\"color\",dflt:jj.lightLine,editType:\"plot\"},activecolor:{valType:\"color\",editType:\"plot\"},bordercolor:{valType:\"color\",dflt:jj.defaultLine,editType:\"plot\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"}});var b8=z(($We,Xj)=>{\"use strict\";Xj.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}});var Jj=z((JWe,$j)=>{\"use strict\";var Sg=ke(),HAe=Sr(),UAe=St(),GAe=So(),Zj=kg(),x8=b8();$j.exports=function(r,t,a,n,i){var o=r.rangeselector||{},l=UAe.newContainer(t,\"rangeselector\");function s(d,p){return Sg.coerce(o,l,Zj,d,p)}var u=GAe(o,l,{name:\"buttons\",handleItemDefaults:YAe,calendar:i}),f=s(\"visible\",u.length>0);if(f){var c=VAe(t,a,n);s(\"x\",c[0]),s(\"y\",c[1]),Sg.noneOrAll(r,t,[\"x\",\"y\"]),s(\"xanchor\"),s(\"yanchor\"),Sg.coerceFont(s,\"font\",a.font);var v=s(\"bgcolor\");s(\"activecolor\",HAe.contrast(v,x8.lightAmount,x8.darkAmount)),s(\"bordercolor\"),s(\"borderwidth\")}};function YAe(e,r,t,a){var n=a.calendar;function i(s,u){return Sg.coerce(e,r,Zj.buttons,s,u)}var o=i(\"visible\");if(o){var l=i(\"step\");l!==\"all\"&&(n&&n!==\"gregorian\"&&(l===\"month\"||l===\"year\")?r.stepmode=\"backward\":i(\"stepmode\"),i(\"count\")),i(\"label\")}}function VAe(e,r,t){for(var a=t.filter(function(l){return r[l].anchor===e._id}),n=0,i=0;i<a.length;i++){var o=r[a[i]].domain;o&&(n=Math.max(o[1],n))}return[e.domain[0],n+x8.yPad]}});var Qj=z((KWe,Kj)=>{\"use strict\";var jAe=G5(),WAe=ke().titleCase;Kj.exports=function(r,t){var a=r._name,n={};if(t.step===\"all\")n[a+\".autorange\"]=!0;else{var i=XAe(r,t);n[a+\".range[0]\"]=i[0],n[a+\".range[1]\"]=i[1]}return n};function XAe(e,r){var t=e.range,a=new Date(e.r2l(t[1])),n=r.step,i=jAe[\"utc\"+WAe(n)],o=r.count,l;switch(r.stepmode){case\"backward\":l=e.l2r(+i.offset(a,-o));break;case\"todate\":var s=i.offset(a,-o);l=e.l2r(+i.ceil(s));break}var u=t[1];return[l,u]}});var lW=z((QWe,oW)=>{\"use strict\";var Lg=Er(),ZAe=Tr(),$Ae=va(),eW=Sr(),iW=Zr(),Xl=ke(),rW=Xl.strTranslate,qg=Ca(),JAe=ba(),T8=Qa(),tW=T8.LINE_SPACING,aW=T8.FROM_TL,nW=T8.FROM_BR,w8=b8(),KAe=Qj();oW.exports=function(r){var t=r._fullLayout,a=t._infolayer.selectAll(\".rangeselector\").data(QAe(r),eMe);a.enter().append(\"g\").classed(\"rangeselector\",!0),a.exit().remove(),a.style({cursor:\"pointer\",\"pointer-events\":\"all\"}),a.each(function(n){var i=Lg.select(this),o=n,l=o.rangeselector,s=i.selectAll(\"g.button\").data(Xl.filterVisible(l.buttons));s.enter().append(\"g\").classed(\"button\",!0),s.exit().remove(),s.each(function(u){var f=Lg.select(this),c=KAe(o,u);u._isActive=rMe(o,u,c),f.call(_8,l,u),f.call(aMe,l,u,r),f.on(\"click\",function(){r._dragged||ZAe.call(\"_guiRelayout\",r,c)}),f.on(\"mouseover\",function(){u._isHovered=!0,f.call(_8,l,u)}),f.on(\"mouseout\",function(){u._isHovered=!1,f.call(_8,l,u)})}),iMe(r,s,l,o._name,i)})};function QAe(e){for(var r=JAe.list(e,\"x\",!0),t=[],a=0;a<r.length;a++){var n=r[a];n.rangeselector&&n.rangeselector.visible&&t.push(n)}return t}function eMe(e){return e._id}function rMe(e,r,t){if(r.step===\"all\")return e.autorange===!0;var a=Object.keys(t);return e.range[0]===t[a[0]]&&e.range[1]===t[a[1]]}function _8(e,r,t){var a=Xl.ensureSingle(e,\"rect\",\"selector-rect\",function(n){n.attr(\"shape-rendering\",\"crispEdges\")});a.attr({rx:w8.rx,ry:w8.ry}),a.call(eW.stroke,r.bordercolor).call(eW.fill,tMe(r,t)).style(\"stroke-width\",r.borderwidth+\"px\")}function tMe(e,r){return r._isActive||r._isHovered?e.activecolor:e.bgcolor}function aMe(e,r,t,a){function n(o){qg.convertToTspans(o,a)}var i=Xl.ensureSingle(e,\"text\",\"selector-text\",function(o){o.attr(\"text-anchor\",\"middle\")});i.call(iW.font,r.font).text(nMe(t,a._fullLayout._meta)).call(n)}function nMe(e,r){return e.label?r?Xl.templateString(e.label,r):e.label:e.step===\"all\"?\"all\":e.count+e.step.charAt(0)}function iMe(e,r,t,a,n){var i=0,o=0,l=t.borderwidth;r.each(function(){var d=Lg.select(this),p=d.select(\".selector-text\"),y=t.font.size*tW,m=Math.max(y*qg.lineCount(p),16)+3;o=Math.max(o,m)}),r.each(function(){var d=Lg.select(this),p=d.select(\".selector-rect\"),y=d.select(\".selector-text\"),m=y.node()&&iW.bBox(y.node()).width,b=t.font.size*tW,T=qg.lineCount(y),w=Math.max(m+10,w8.minButtonWidth);d.attr(\"transform\",rW(l+i,l)),p.attr({x:0,y:0,width:w,height:o}),qg.positionText(y,w/2,o/2-(T-1)*b/2+3),i+=w+5});var s=e._fullLayout._size,u=s.l+s.w*t.x,f=s.t+s.h*(1-t.y),c=\"left\";Xl.isRightAnchor(t)&&(u-=i,c=\"right\"),Xl.isCenterAnchor(t)&&(u-=i/2,c=\"center\");var v=\"top\";Xl.isBottomAnchor(t)&&(f-=o,v=\"bottom\"),Xl.isMiddleAnchor(t)&&(f-=o/2,v=\"middle\"),i=Math.ceil(i),o=Math.ceil(o),u=Math.round(u),f=Math.round(f),$Ae.autoMargin(e,a+\"-range-selector\",{x:t.x,y:t.y,l:i*aW[c],r:i*nW[c],b:o*nW[v],t:o*aW[v]}),n.attr(\"transform\",rW(u,f))}});var uW=z((eXe,sW)=>{\"use strict\";sW.exports={moduleType:\"component\",name:\"rangeselector\",schema:{subplots:{xaxis:{rangeselector:kg()}}},layoutAttributes:kg(),handleDefaults:Jj(),draw:lW()}});var zc=z(A8=>{\"use strict\";var fW=At().extendFlat;A8.attributes=function(e,r){e=e||{},r=r||{};var t={valType:\"info_array\",editType:e.editType,items:[{valType:\"number\",min:0,max:1,editType:e.editType},{valType:\"number\",min:0,max:1,editType:e.editType}],dflt:[0,1]},a=e.name?e.name+\" \":\"\",n=e.trace?\"trace\":\"subplot\",i=r.description?\" \"+r.description:\"\",o={x:fW({},t,{}),y:fW({},t,{}),editType:e.editType};return e.noGridCell||(o.row={valType:\"integer\",min:0,dflt:0,editType:e.editType},o.column={valType:\"integer\",min:0,dflt:0,editType:e.editType}),o};A8.defaults=function(e,r,t,a){var n=a&&a.x||[0,1],i=a&&a.y||[0,1],o=r.grid;if(o){var l=t(\"domain.column\");l!==void 0&&(l<o.columns?n=o._domains.x[l]:delete e.domain.column);var s=t(\"domain.row\");s!==void 0&&(s<o.rows?i=o._domains.y[s]:delete e.domain.row)}var u=t(\"domain.x\",n),f=t(\"domain.y\",i);u[0]<u[1]||(e.domain.x=n.slice()),f[0]<f[1]||(e.domain.y=i.slice())}});var pW=z((tXe,dW)=>{\"use strict\";var oMe=ke(),lMe=(C0(),un(L0)).counter,sMe=zc().attributes,cW=qa().idRegex,uMe=St(),M8={rows:{valType:\"integer\",min:1,editType:\"plot\"},roworder:{valType:\"enumerated\",values:[\"top to bottom\",\"bottom to top\"],dflt:\"top to bottom\",editType:\"plot\"},columns:{valType:\"integer\",min:1,editType:\"plot\"},subplots:{valType:\"info_array\",freeLength:!0,dimensions:2,items:{valType:\"enumerated\",values:[lMe(\"xy\").toString(),\"\"],editType:\"plot\"},editType:\"plot\"},xaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[cW.x.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},yaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[cW.y.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},pattern:{valType:\"enumerated\",values:[\"independent\",\"coupled\"],dflt:\"coupled\",editType:\"plot\"},xgap:{valType:\"number\",min:0,max:1,editType:\"plot\"},ygap:{valType:\"number\",min:0,max:1,editType:\"plot\"},domain:sMe({name:\"grid\",editType:\"plot\",noGridCell:!0},{}),xside:{valType:\"enumerated\",values:[\"bottom\",\"bottom plot\",\"top plot\",\"top\"],dflt:\"bottom plot\",editType:\"plot\"},yside:{valType:\"enumerated\",values:[\"left\",\"left plot\",\"right plot\",\"right\"],dflt:\"left plot\",editType:\"plot\"},editType:\"plot\"};function Cg(e,r,t){var a=r[t+\"axes\"],n=Object.keys((e._splomAxes||{})[t]||{});if(Array.isArray(a))return a;if(n.length)return n}function fMe(e,r){var t=e.grid||{},a=Cg(r,t,\"x\"),n=Cg(r,t,\"y\");if(!e.grid&&!a&&!n)return;var i=Array.isArray(t.subplots)&&Array.isArray(t.subplots[0]),o=Array.isArray(a),l=Array.isArray(n),s=o&&a!==t.xaxes&&l&&n!==t.yaxes,u,f;i?(u=t.subplots.length,f=t.subplots[0].length):(l&&(u=n.length),o&&(f=a.length));var c=uMe.newContainer(r,\"grid\");function v(k,A){return oMe.coerce(t,c,M8,k,A)}var d=v(\"rows\",u),p=v(\"columns\",f);if(!(d*p>1)){delete r.grid;return}if(!i&&!o&&!l){var y=v(\"pattern\")===\"independent\";y&&(i=!0)}c._hasSubplotGrid=i;var m=v(\"roworder\"),b=m===\"top to bottom\",T=i?.2:.1,w=i?.3:.1,x,_;s&&r._splomGridDflt&&(x=r._splomGridDflt.xside,_=r._splomGridDflt.yside),c._domains={x:vW(\"x\",v,T,x,p),y:vW(\"y\",v,w,_,d,b)}}function vW(e,r,t,a,n,i){var o=r(e+\"gap\",t),l=r(\"domain.\"+e);r(e+\"side\",a);for(var s=new Array(n),u=l[0],f=(l[1]-u)/(n-o),c=f*(1-o),v=0;v<n;v++){var d=u+f*v;s[i?n-1-v:v]=[d,d+c]}return s}function cMe(e,r){var t=r.grid;if(!(!t||!t._domains)){var a=e.grid||{},n=r._subplots,i=t._hasSubplotGrid,o=t.rows,l=t.columns,s=t.pattern===\"independent\",u,f,c,v,d,p,y,m=t._axisMap={};if(i){var b=a.subplots||[];p=t.subplots=new Array(o);var T=1;for(u=0;u<o;u++){var w=p[u]=new Array(l),x=b[u]||[];for(f=0;f<l;f++)if(s?(d=T===1?\"xy\":\"x\"+T+\"y\"+T,T++):d=x[f],w[f]=\"\",n.cartesian.indexOf(d)!==-1){if(y=d.indexOf(\"y\"),c=d.slice(0,y),v=d.slice(y),m[c]!==void 0&&m[c]!==f||m[v]!==void 0&&m[v]!==u)continue;w[f]=d,m[c]=f,m[v]=u}}}else{var _=Cg(r,a,\"x\"),k=Cg(r,a,\"y\");t.xaxes=hW(_,n.xaxis,l,m,\"x\"),t.yaxes=hW(k,n.yaxis,o,m,\"y\")}var A=t._anchors={},q=t.roworder===\"top to bottom\";for(var C in m){var E=C.charAt(0),P=t[E+\"side\"],R,N,I;if(P.length<8)A[C]=\"free\";else if(E===\"x\"){if(P.charAt(0)===\"t\"===q?(R=0,N=1,I=o):(R=o-1,N=-1,I=-1),i){var O=m[C];for(u=R;u!==I;u+=N)if(d=p[u][O],!!d&&(y=d.indexOf(\"y\"),d.slice(0,y)===C)){A[C]=d.slice(y);break}}else for(u=R;u!==I;u+=N)if(v=t.yaxes[u],n.cartesian.indexOf(C+v)!==-1){A[C]=v;break}}else if(P.charAt(0)===\"l\"?(R=0,N=1,I=l):(R=l-1,N=-1,I=-1),i){var U=m[C];for(u=R;u!==I;u+=N)if(d=p[U][u],!!d&&(y=d.indexOf(\"y\"),d.slice(y)===C)){A[C]=d.slice(0,y);break}}else for(u=R;u!==I;u+=N)if(c=t.xaxes[u],n.cartesian.indexOf(c+C)!==-1){A[C]=c;break}}}}function hW(e,r,t,a,n){var i=new Array(t),o;function l(s,u){r.indexOf(u)!==-1&&a[u]===void 0?(i[s]=u,a[u]=s):i[s]=\"\"}if(Array.isArray(e))for(o=0;o<t;o++)l(o,e[o]);else for(l(0,n),o=1;o<t;o++)l(o,n+(o+1));return i}dW.exports={moduleType:\"component\",name:\"grid\",schema:{layout:{grid:M8}},layoutAttributes:M8,sizeDefaults:fMe,contentDefaults:cMe}});var k8=z((aXe,mW)=>{\"use strict\";mW.exports={visible:{valType:\"boolean\",editType:\"calc\"},type:{valType:\"enumerated\",values:[\"percent\",\"constant\",\"sqrt\",\"data\"],editType:\"calc\"},symmetric:{valType:\"boolean\",editType:\"calc\"},array:{valType:\"data_array\",editType:\"calc\"},arrayminus:{valType:\"data_array\",editType:\"calc\"},value:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},valueminus:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},traceref:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},tracerefminus:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},copy_ystyle:{valType:\"boolean\",editType:\"plot\"},copy_zstyle:{valType:\"boolean\",editType:\"style\"},color:{valType:\"color\",editType:\"style\"},thickness:{valType:\"number\",min:0,dflt:2,editType:\"style\"},width:{valType:\"number\",min:0,editType:\"plot\"},editType:\"calc\"}});var bW=z((nXe,gW)=>{\"use strict\";var yW=Ir(),vMe=Tr(),hMe=ke(),dMe=St(),pMe=k8();gW.exports=function(e,r,t,a){var n=\"error_\"+a.axis,i=dMe.newContainer(r,n),o=e[n]||{};function l(p,y){return hMe.coerce(o,i,pMe,p,y)}var s=o.array!==void 0||o.value!==void 0||o.type===\"sqrt\",u=l(\"visible\",s);if(u!==!1){var f=l(\"type\",\"array\"in o?\"data\":\"percent\"),c=!0;f!==\"sqrt\"&&(c=l(\"symmetric\",!((f===\"data\"?\"arrayminus\":\"valueminus\")in o))),f===\"data\"?(l(\"array\"),l(\"traceref\"),c||(l(\"arrayminus\"),l(\"tracerefminus\"))):(f===\"percent\"||f===\"constant\")&&(l(\"value\"),c||l(\"valueminus\"));var v=\"copy_\"+a.inherit+\"style\";if(a.inherit){var d=r[\"error_\"+a.inherit];(d||{}).visible&&l(v,!(o.color||yW(o.thickness)||yW(o.width)))}(!a.inherit||!i[v])&&(l(\"color\",t),l(\"thickness\"),l(\"width\",vMe.traceIs(r,\"gl3d\")?0:4))}}});var S8=z((iXe,_W)=>{\"use strict\";_W.exports=function(r){var t=r.type,a=r.symmetric;if(t===\"data\"){var n=r.array||[];if(a)return function(u,f){var c=+n[f];return[c,c]};var i=r.arrayminus||[];return function(u,f){var c=+n[f],v=+i[f];return!isNaN(c)||!isNaN(v)?[v||0,c||0]:[NaN,NaN]}}else{var o=xW(t,r.value),l=xW(t,r.valueminus);return a||r.valueminus===void 0?function(u){var f=o(u);return[f,f]}:function(u){return[l(u),o(u)]}}};function xW(e,r){if(e===\"percent\")return function(t){return Math.abs(t*r/100)};if(e===\"constant\")return function(){return Math.abs(r)};if(e===\"sqrt\")return function(t){return Math.sqrt(Math.abs(t))}}});var AW=z((oXe,TW)=>{\"use strict\";var q8=Ir(),mMe=Tr(),L8=Gr(),yMe=ke(),gMe=S8();TW.exports=function(r){for(var t=r.calcdata,a=0;a<t.length;a++){var n=t[a],i=n[0].trace;if(i.visible===!0&&mMe.traceIs(i,\"errorBarsOK\")){var o=L8.getFromId(r,i.xaxis),l=L8.getFromId(r,i.yaxis);wW(n,i,o,\"x\"),wW(n,i,l,\"y\")}}};function wW(e,r,t,a){var n=r[\"error_\"+a]||{},i=n.visible&&[\"linear\",\"log\"].indexOf(t.type)!==-1,o=[];if(i){for(var l=gMe(n),s=0;s<e.length;s++){var u=e[s],f=u.i;if(f===void 0)f=s;else if(f===null)continue;var c=u[a];if(q8(t.c2l(c))){var v=l(c,f);if(q8(v[0])&&q8(v[1])){var d=u[a+\"s\"]=c-v[0],p=u[a+\"h\"]=c+v[1];o.push(d,p)}}}var y=t._id,m=r._extremes[y],b=L8.findExtremes(t,o,yMe.extendFlat({tozero:m.opts.tozero},{padded:!0}));m.min=m.min.concat(b.min),m.max=m.max.concat(b.max)}}});var SW=z((lXe,kW)=>{\"use strict\";var MW=Er(),Xs=Ir(),bMe=Zr(),xMe=Jn();kW.exports=function(r,t,a,n){var i,o=a.xaxis,l=a.yaxis,s=n&&n.duration>0,u=r._context.staticPlot;t.each(function(f){var c=f[0].trace,v=c.error_x||{},d=c.error_y||{},p;c.ids&&(p=function(T){return T.id});var y=xMe.hasMarkers(c)&&c.marker.maxdisplayed>0;!d.visible&&!v.visible&&(f=[]);var m=MW.select(this).selectAll(\"g.errorbar\").data(f,p);if(m.exit().remove(),!!f.length){v.visible||m.selectAll(\"path.xerror\").remove(),d.visible||m.selectAll(\"path.yerror\").remove(),m.style(\"opacity\",1);var b=m.enter().append(\"g\").classed(\"errorbar\",!0);s&&b.style(\"opacity\",0).transition().duration(n.duration).style(\"opacity\",1),bMe.setClipUrl(m,a.layerClipId,r),m.each(function(T){var w=MW.select(this),x=_Me(T,o,l);if(!(y&&!T.vis)){var _,k=w.select(\"path.yerror\");if(d.visible&&Xs(x.x)&&Xs(x.yh)&&Xs(x.ys)){var A=d.width;_=\"M\"+(x.x-A)+\",\"+x.yh+\"h\"+2*A+\"m-\"+A+\",0V\"+x.ys,x.noYS||(_+=\"m-\"+A+\",0h\"+2*A),i=!k.size(),i?k=w.append(\"path\").style(\"vector-effect\",u?\"none\":\"non-scaling-stroke\").classed(\"yerror\",!0):s&&(k=k.transition().duration(n.duration).ease(n.easing)),k.attr(\"d\",_)}else k.remove();var q=w.select(\"path.xerror\");if(v.visible&&Xs(x.y)&&Xs(x.xh)&&Xs(x.xs)){var C=(v.copy_ystyle?d:v).width;_=\"M\"+x.xh+\",\"+(x.y-C)+\"v\"+2*C+\"m0,-\"+C+\"H\"+x.xs,x.noXS||(_+=\"m0,-\"+C+\"v\"+2*C),i=!q.size(),i?q=w.append(\"path\").style(\"vector-effect\",u?\"none\":\"non-scaling-stroke\").classed(\"xerror\",!0):s&&(q=q.transition().duration(n.duration).ease(n.easing)),q.attr(\"d\",_)}else q.remove()}})}})};function _Me(e,r,t){var a={x:r.c2p(e.x),y:t.c2p(e.y)};return e.yh!==void 0&&(a.yh=t.c2p(e.yh),a.ys=t.c2p(e.ys),Xs(a.ys)||(a.noYS=!0,a.ys=t.c2p(e.ys,!0))),e.xh!==void 0&&(a.xh=r.c2p(e.xh),a.xs=r.c2p(e.xs),Xs(a.xs)||(a.noXS=!0,a.xs=r.c2p(e.xs,!0))),a}});var CW=z((sXe,LW)=>{\"use strict\";var wMe=Er(),qW=Sr();LW.exports=function(r){r.each(function(t){var a=t[0].trace,n=a.error_y||{},i=a.error_x||{},o=wMe.select(this);o.selectAll(\"path.yerror\").style(\"stroke-width\",n.thickness+\"px\").call(qW.stroke,n.color),i.copy_ystyle&&(i=n),o.selectAll(\"path.xerror\").style(\"stroke-width\",i.thickness+\"px\").call(qW.stroke,i.color)})}});var PW=z((uXe,EW)=>{\"use strict\";var Ud=ke(),DW=wo().overrideAll,Gd=k8(),Af={error_x:Ud.extendFlat({},Gd),error_y:Ud.extendFlat({},Gd)};delete Af.error_x.copy_zstyle;delete Af.error_y.copy_zstyle;delete Af.error_y.copy_ystyle;var Yd={error_x:Ud.extendFlat({},Gd),error_y:Ud.extendFlat({},Gd),error_z:Ud.extendFlat({},Gd)};delete Yd.error_x.copy_ystyle;delete Yd.error_y.copy_ystyle;delete Yd.error_z.copy_ystyle;delete Yd.error_z.copy_zstyle;EW.exports={moduleType:\"component\",name:\"errorbars\",schema:{traces:{scatter:Af,bar:Af,histogram:Af,scatter3d:DW(Yd,\"calc\",\"nested\"),scattergl:DW(Af,\"calc\",\"nested\")}},supplyDefaults:bW(),calc:AW(),makeComputeError:S8(),plot:SW(),style:CW(),hoverInfo:TMe};function TMe(e,r,t){(r.error_y||{}).visible&&(t.yerr=e.yh-e.y,r.error_y.symmetric||(t.yerrneg=e.y-e.ys)),(r.error_x||{}).visible&&(t.xerr=e.xh-e.x,r.error_x.symmetric||(t.xerrneg=e.x-e.xs))}});var FW=z((fXe,RW)=>{\"use strict\";RW.exports={cn:{colorbar:\"colorbar\",cbbg:\"cbbg\",cbfill:\"cbfill\",cbfills:\"cbfills\",cbline:\"cbline\",cblines:\"cblines\",cbaxis:\"cbaxis\",cbtitleunshift:\"cbtitleunshift\",cbtitle:\"cbtitle\",cboutline:\"cboutline\",crisp:\"crisp\",jsPlaceholder:\"js-placeholder\"}}});var GW=z((cXe,UW)=>{\"use strict\";var Zs=Er(),Eg=va(),zW=Tr(),Zl=Gr(),Dg=Bi(),ro=ke(),Oo=ro.strTranslate,HW=At().extendFlat,C8=Rs(),Bo=Zr(),Nc=Sr(),AMe=Q0(),MMe=Ca(),kMe=hi().flipScale,SMe=Ow(),qMe=Hw(),LMe=Ni(),E8=Qa(),NW=E8.LINE_SPACING,IW=E8.FROM_TL,BW=E8.FROM_BR,Yt=FW().cn;function CMe(e){var r=e._fullLayout,t=r._infolayer.selectAll(\"g.\"+Yt.colorbar).data(DMe(e),function(a){return a._id});t.enter().append(\"g\").attr(\"class\",function(a){return a._id}).classed(Yt.colorbar,!0),t.each(function(a){var n=Zs.select(this);ro.ensureSingle(n,\"rect\",Yt.cbbg),ro.ensureSingle(n,\"g\",Yt.cbfills),ro.ensureSingle(n,\"g\",Yt.cblines),ro.ensureSingle(n,\"g\",Yt.cbaxis,function(o){o.classed(Yt.crisp,!0)}),ro.ensureSingle(n,\"g\",Yt.cbtitleunshift,function(o){o.append(\"g\").classed(Yt.cbtitle,!0)}),ro.ensureSingle(n,\"rect\",Yt.cboutline);var i=EMe(n,a,e);i&&i.then&&(e._promises||[]).push(i),e._context.edits.colorbarPosition&&PMe(n,a,e)}),t.exit().each(function(a){Eg.autoMargin(e,a._id)}).remove(),t.order()}function DMe(e){var r=e._fullLayout,t=e.calcdata,a=[],n,i,o,l;function s(w){return HW(w,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function u(){typeof l.calc==\"function\"?l.calc(e,o,n):(n._fillgradient=i.reversescale?kMe(i.colorscale):i.colorscale,n._zrange=[i[l.min],i[l.max]])}for(var f=0;f<t.length;f++){var c=t[f];if(o=c[0].trace,!!o._module){var v=o._module.colorbar;if(o.visible===!0&&v)for(var d=Array.isArray(v),p=d?v:[v],y=0;y<p.length;y++){l=p[y];var m=l.container;i=m?o[m]:o,i&&i.showscale&&(n=s(i.colorbar),n._id=\"cb\"+o.uid+(d&&m?\"-\"+m:\"\"),n._traceIndex=o.index,n._propPrefix=(m?m+\".\":\"\")+\"colorbar.\",n._meta=o._meta,u(),a.push(n))}}}for(var b in r._colorAxes)if(i=r[b],i.showscale){var T=r._colorAxes[b];n=s(i.colorbar),n._id=\"cb\"+b,n._propPrefix=b+\".colorbar.\",n._meta=r._meta,l={min:\"cmin\",max:\"cmax\"},T[0]!==\"heatmap\"&&(o=T[1],l.calc=o._module.colorbar.calc),u(),a.push(n)}return a}var D8=(e,r)=>[Math.min(e[0]+r,e[1]),e[1]],OW=(e,r)=>[e[0],Math.max(e[1]-r,e[0])];function EMe(e,r,t){var a=r.orientation===\"v\",n=r.len,i=r.lenmode,o=r.thickness,l=r.thicknessmode,s=r.outlinewidth,u=r.borderwidth,f=r.bgcolor,c=r.xanchor,v=r.yanchor,d=r.xpad,p=r.ypad,y=r.x,m=a?r.y:1-r.y,b=r.yref===\"paper\",T=r.xref===\"paper\",w=t._fullLayout,x=w._size,_=r._fillcolor,k=r._line,A=r.title,q=A.side,C=r._zrange||Zs.extent((typeof _==\"function\"?_:k.color).domain()),E=typeof k.color==\"function\"?k.color:function(){return k.color},P=typeof _==\"function\"?_:function(){return _},R=r._levels,N=RMe(t,r,C),I=N.fill,O=N.line,U=Math.round(o*(l===\"fraction\"?a?x.w:x.h:1)),Y=U/(a?x.w:x.h),G=Math.round(n*(i===\"fraction\"?a?x.h:x.w:1)),V=G/(a?x.h:x.w),W=T?x.w:t._fullLayout.width,j=b?x.h:t._fullLayout.height,J=Math.round(a?y*W+d:m*j+p),te={center:.5,right:1}[c]||0,ae={top:1,middle:.5}[v]||0,se=a?y-te*Y:m-ae*Y,$=a?m-ae*V:y-te*V,fe=Math.round(a?j*(1-$):W*$);r._lenFrac=V,r._thickFrac=Y,r._uFrac=se,r._vFrac=$;var ie=r._axis=FMe(t,r,C);ie.position=Y+(a?y+d/x.w:m+p/x.h);var ue=[\"top\",\"bottom\"].indexOf(q)!==-1;if(a&&ue&&(ie.title.side=q,ie.titlex=y+d/x.w,ie.titley=$+(A.side===\"top\"?V-p/x.h:p/x.h)),!a&&!ue&&(ie.title.side=q,ie.titley=m+p/x.h,ie.titlex=$+d/x.w),k.color&&r.tickmode===\"auto\"){ie.tickmode=\"linear\",ie.tick0=R.start;var ce=R.size,oe=ro.constrain(G/50,4,15)+1,be=(C[1]-C[0])/((r.nticks||oe)*ce);if(be>1){var Re=Math.pow(10,Math.floor(Math.log(be)/Math.LN10));ce*=Re*ro.roundUp(be/Re,[2,5,10]),(Math.abs(R.start)/R.size+1e-6)%1<2e-6&&(ie.tick0=0)}ie.dtick=ce}var ye=a?p/x.h:d/x.w;ie.domain=OW(D8([$,$+V],ye),ye),ie.setScale(),e.attr(\"transform\",Oo(Math.round(x.l),Math.round(x.t)));var Ce=e.select(\".\"+Yt.cbtitleunshift).attr(\"transform\",Oo(-Math.round(x.l),-Math.round(x.t))),Me=ie.ticklabelposition,Le=ie.title.font.size,De=e.select(\".\"+Yt.cbaxis),Ne,qe=0,Xe=0;function $e(re,xe){var Ge={propContainer:ie,propName:r._propPrefix+\"title.text\",traceIndex:r._traceIndex,_meta:r._meta,placeholder:w._dfltTitle.colorbar,containerGroup:e.select(\".\"+Yt.cbtitle)},cr=re.charAt(0)===\"h\"?re.slice(1):\"h\"+re;e.selectAll(\".\"+cr+\",.\"+cr+\"-math-group\").remove(),AMe.draw(t,re,HW(Ge,xe||{}))}function We(){if(a&&ue||!a&&!ue){var re,xe;q===\"top\"&&(re=d+x.l+W*y,xe=p+x.t+j*(1-$-V)+3+Le*.75),q===\"bottom\"&&(re=d+x.l+W*y,xe=p+x.t+j*(1-$)-3-Le*.25),q===\"right\"&&(xe=p+x.t+j*m+3+Le*.75,re=d+x.l+W*$),$e(ie._id+\"title\",{attributes:{x:re,y:xe,\"text-anchor\":a?\"start\":\"middle\"}})}}function Se(){if(a&&!ue||!a&&ue){var re=ie.position||0,xe=ie._offset+ie._length/2,Ge,cr;if(q===\"right\")cr=xe,Ge=x.l+W*re+10+Le*(ie.showticklabels?1:.5);else if(Ge=xe,q===\"bottom\"&&(cr=x.t+j*re+10+(Me.indexOf(\"inside\")===-1?ie.tickfont.size:0)+(ie.ticks!==\"inside\"&&r.ticklen||0)),q===\"top\"){var Pe=A.text.split(\"<br>\").length;cr=x.t+j*re+10-U-NW*Le*Pe}$e((a?\"h\":\"v\")+ie._id+\"title\",{avoid:{selection:Zs.select(t).selectAll(\"g.\"+ie._id+\"tick\"),side:q,offsetTop:a?0:x.t,offsetLeft:a?x.l:0,maxShift:a?w.width:w.height},attributes:{x:Ge,y:cr,\"text-anchor\":\"middle\"},transform:{rotate:a?-90:0,offset:0}})}}function Fe(){if(!a&&!ue||a&&ue){var re=e.select(\".\"+Yt.cbtitle),xe=re.select(\"text\"),Ge=[-s/2,s/2],cr=re.select(\".h\"+ie._id+\"title-math-group\").node(),Pe=15.6;xe.node()&&(Pe=parseInt(xe.node().style.fontSize,10)*NW);var me;if(cr?(me=Bo.bBox(cr),Xe=me.width,qe=me.height,qe>Pe&&(Ge[1]-=(qe-Pe)/2)):xe.node()&&!xe.classed(Yt.jsPlaceholder)&&(me=Bo.bBox(xe.node()),Xe=me.width,qe=me.height),a){if(qe){if(qe+=5,q===\"top\")ie.domain=OW(ie.domain,qe/x.h),Ge[1]*=-1;else{ie.domain=D8(ie.domain,qe/x.h);var Ae=MMe.lineCount(xe);Ge[1]+=(1-Ae)*Pe}re.attr(\"transform\",Oo(Ge[0],Ge[1])),ie.setScale()}}else Xe&&(q===\"right\"&&(ie.domain=D8(ie.domain,(Xe+Le/2)/x.w)),re.attr(\"transform\",Oo(Ge[0],Ge[1])),ie.setScale())}e.selectAll(\".\"+Yt.cbfills+\",.\"+Yt.cblines).attr(\"transform\",a?Oo(0,Math.round(x.h*(1-ie.domain[1]))):Oo(Math.round(x.w*ie.domain[0]),0)),De.attr(\"transform\",a?Oo(0,Math.round(-x.t)):Oo(Math.round(-x.l),0));var He=e.select(\".\"+Yt.cbfills).selectAll(\"rect.\"+Yt.cbfill).attr(\"style\",\"\").data(I);He.enter().append(\"rect\").classed(Yt.cbfill,!0).attr(\"style\",\"\"),He.exit().remove();var Ze=C.map(ie.c2p).map(Math.round).sort(function(lr,Ee){return lr-Ee});He.each(function(lr,Ee){var Je=[Ee===0?C[0]:(I[Ee]+I[Ee-1])/2,Ee===I.length-1?C[1]:(I[Ee]+I[Ee+1])/2].map(ie.c2p).map(Math.round);a&&(Je[1]=ro.constrain(Je[1]+(Je[1]>Je[0])?1:-1,Ze[0],Ze[1]));var Ie=Zs.select(this).attr(a?\"x\":\"y\",J).attr(a?\"y\":\"x\",Zs.min(Je)).attr(a?\"width\":\"height\",Math.max(U,2)).attr(a?\"height\":\"width\",Math.max(Zs.max(Je)-Zs.min(Je),2));if(r._fillgradient)Bo.gradient(Ie,t,r._id,a?\"vertical\":\"horizontalreversed\",r._fillgradient,\"fill\");else{var pr=P(lr).replace(\"e-\",\"\");Ie.attr(\"fill\",Nc.hexString(pr))}});var Be=e.select(\".\"+Yt.cblines).selectAll(\"path.\"+Yt.cbline).data(k.color&&k.width?O:[]);Be.enter().append(\"path\").classed(Yt.cbline,!0),Be.exit().remove(),Be.each(function(lr){var Ee=J,Je=Math.round(ie.c2p(lr))+k.width/2%1;Zs.select(this).attr(\"d\",\"M\"+(a?Ee+\",\"+Je:Je+\",\"+Ee)+(a?\"h\":\"v\")+U).call(Bo.lineGroupStyle,k.width,E(lr),k.dash)}),De.selectAll(\"g.\"+ie._id+\"tick,path\").remove();var je=J+U+(s||0)/2-(r.ticks===\"outside\"?1:0),tr=Zl.calcTicks(ie),ir=Zl.getTickSigns(ie)[2];return Zl.drawTicks(t,ie,{vals:ie.ticks===\"inside\"?Zl.clipEnds(ie,tr):tr,layer:De,path:Zl.makeTickPath(ie,je,ir),transFn:Zl.makeTransTickFn(ie)}),Zl.drawLabels(t,ie,{vals:tr,layer:De,transFn:Zl.makeTransTickLabelFn(ie),labelFns:Zl.makeLabelFns(ie,je)})}function Qe(){var re,xe=U+s/2;Me.indexOf(\"inside\")===-1&&(re=Bo.bBox(De.node()),xe+=a?re.width:re.height),Ne=Ce.select(\"text\");var Ge=0,cr=a&&q===\"top\",Pe=!a&&q===\"right\",me=0;if(Ne.node()&&!Ne.classed(Yt.jsPlaceholder)){var Ae,He=Ce.select(\".h\"+ie._id+\"title-math-group\").node();He&&(a&&ue||!a&&!ue)?(re=Bo.bBox(He),Ge=re.width,Ae=re.height):(re=Bo.bBox(Ce.node()),Ge=re.right-x.l-(a?J:fe),Ae=re.bottom-x.t-(a?fe:J),!a&&q===\"top\"&&(xe+=re.height,me=re.height)),Pe&&(Ne.attr(\"transform\",Oo(Ge/2+Le/2,0)),Ge*=2),xe=Math.max(xe,a?Ge:Ae)}var Ze=(a?d:p)*2+xe+u+s/2,Be=0;!a&&A.text&&v===\"bottom\"&&m<=0&&(Be=Ze/2,Ze+=Be,me+=Be),w._hColorbarMoveTitle=Be,w._hColorbarMoveCBTitle=me;var je=u+s,tr=(a?J:fe)-je/2-(a?d:0),ir=(a?fe:J)-(a?G:p+me-Be);e.select(\".\"+Yt.cbbg).attr(\"x\",tr).attr(\"y\",ir).attr(a?\"width\":\"height\",Math.max(Ze-Be,2)).attr(a?\"height\":\"width\",Math.max(G+je,2)).call(Nc.fill,f).call(Nc.stroke,r.bordercolor).style(\"stroke-width\",u);var lr=Pe?Math.max(Ge-10,0):0;e.selectAll(\".\"+Yt.cboutline).attr(\"x\",(a?J:fe+d)+lr).attr(\"y\",(a?fe+p-G:J)+(cr?qe:0)).attr(a?\"width\":\"height\",Math.max(U,2)).attr(a?\"height\":\"width\",Math.max(G-(a?2*p+qe:2*d+lr),2)).call(Nc.stroke,r.outlinecolor).style({fill:\"none\",\"stroke-width\":s});var Ee=a?te*Ze:0,Je=a?0:(1-ae)*Ze-me;if(Ee=T?x.l-Ee:-Ee,Je=b?x.t-Je:-Je,e.attr(\"transform\",Oo(Ee,Je)),!a&&(u||Nc.opacity(f)&&!Nc.equals(w.paper_bgcolor,f))){var Ie=De.selectAll(\"text\"),pr=Ie[0].length,mr=e.select(\".\"+Yt.cbbg).node(),sr=Bo.bBox(mr),yr=Bo.getTranslate(e),ne=2;Ie.each(function(Va,ea){var ja=0,ln=pr-1;if(ea===ja||ea===ln){var oa=Bo.bBox(this),vr=Bo.getTranslate(this),_t;if(ea===ln){var Yr=oa.right+vr.x,vt=sr.right+yr.x+fe-u-ne+y;_t=vt-Yr,_t>0&&(_t=0)}else if(ea===ja){var Rt=oa.left+vr.x,Mt=sr.left+yr.x+fe+u+ne;_t=Mt-Rt,_t<0&&(_t=0)}_t&&(pr<3?this.setAttribute(\"transform\",\"translate(\"+_t+\",0) \"+this.getAttribute(\"transform\")):this.setAttribute(\"visibility\",\"hidden\"))}})}var ge={},ze=IW[c],Oe=BW[c],Jr=IW[v],Kr=BW[v],mt=Ze-U;a?(i===\"pixels\"?(ge.y=m,ge.t=G*Jr,ge.b=G*Kr):(ge.t=ge.b=0,ge.yt=m+n*Jr,ge.yb=m-n*Kr),l===\"pixels\"?(ge.x=y,ge.l=Ze*ze,ge.r=Ze*Oe):(ge.l=mt*ze,ge.r=mt*Oe,ge.xl=y-o*ze,ge.xr=y+o*Oe)):(i===\"pixels\"?(ge.x=y,ge.l=G*ze,ge.r=G*Oe):(ge.l=ge.r=0,ge.xl=y+n*ze,ge.xr=y-n*Oe),l===\"pixels\"?(ge.y=1-m,ge.t=Ze*Jr,ge.b=Ze*Kr):(ge.t=mt*Jr,ge.b=mt*Kr,ge.yt=m-o*Jr,ge.yb=m+o*Kr));var yt=r.y<.5?\"b\":\"t\",Lt=r.x<.5?\"l\":\"r\";t._fullLayout._reservedMargin[r._id]={};var Qt={r:w.width-tr-Ee,l:tr+ge.r,b:w.height-ir-Je,t:ir+ge.b};T&&b?Eg.autoMargin(t,r._id,ge):T?t._fullLayout._reservedMargin[r._id][yt]=Qt[yt]:b||a?t._fullLayout._reservedMargin[r._id][Lt]=Qt[Lt]:t._fullLayout._reservedMargin[r._id][yt]=Qt[yt]}return ro.syncOrAsync([Eg.previousPromises,We,Fe,Se,Eg.previousPromises,Qe],t)}function PMe(e,r,t){var a=r.orientation===\"v\",n=t._fullLayout,i=n._size,o,l,s;Dg.init({element:e.node(),gd:t,prepFn:function(){o=e.attr(\"transform\"),C8(e)},moveFn:function(u,f){e.attr(\"transform\",o+Oo(u,f)),l=Dg.align((a?r._uFrac:r._vFrac)+u/i.w,a?r._thickFrac:r._lenFrac,0,1,r.xanchor),s=Dg.align((a?r._vFrac:1-r._uFrac)-f/i.h,a?r._lenFrac:r._thickFrac,0,1,r.yanchor);var c=Dg.getCursor(l,s,r.xanchor,r.yanchor);C8(e,c)},doneFn:function(){if(C8(e),l!==void 0&&s!==void 0){var u={};u[r._propPrefix+\"x\"]=l,u[r._propPrefix+\"y\"]=s,r._traceIndex!==void 0?zW.call(\"_guiRestyle\",t,u,r._traceIndex):zW.call(\"_guiRelayout\",t,u)}}})}function RMe(e,r,t){var a=r._levels,n=[],i=[],o,l,s=a.end+a.size/100,u=a.size,f=1.001*t[0]-.001*t[1],c=1.001*t[1]-.001*t[0];for(l=0;l<1e5&&(o=a.start+l*u,!(u>0?o>=s:o<=s));l++)o>f&&o<c&&n.push(o);if(r._fillgradient)i=[0];else if(typeof r._fillcolor==\"function\"){var v=r._filllevels;if(v)for(s=v.end+v.size/100,u=v.size,l=0;l<1e5&&(o=v.start+l*u,!(u>0?o>=s:o<=s));l++)o>t[0]&&o<t[1]&&i.push(o);else i=n.map(function(d){return d-a.size/2}),i.push(i[i.length-1]+a.size)}else r._fillcolor&&typeof r._fillcolor==\"string\"&&(i=[0]);return a.size<0&&(n.reverse(),i.reverse()),{line:n,fill:i}}function FMe(e,r,t){var a=e._fullLayout,n=r.orientation===\"v\",i={type:\"linear\",range:t,tickmode:r.tickmode,nticks:r.nticks,tick0:r.tick0,dtick:r.dtick,tickvals:r.tickvals,ticktext:r.ticktext,ticks:r.ticks,ticklen:r.ticklen,tickwidth:r.tickwidth,tickcolor:r.tickcolor,showticklabels:r.showticklabels,labelalias:r.labelalias,ticklabelposition:r.ticklabelposition,ticklabeloverflow:r.ticklabeloverflow,ticklabelstep:r.ticklabelstep,tickfont:r.tickfont,tickangle:r.tickangle,tickformat:r.tickformat,exponentformat:r.exponentformat,minexponent:r.minexponent,separatethousands:r.separatethousands,showexponent:r.showexponent,showtickprefix:r.showtickprefix,tickprefix:r.tickprefix,showticksuffix:r.showticksuffix,ticksuffix:r.ticksuffix,title:r.title,showline:!0,anchor:\"free\",side:n?\"right\":\"bottom\",position:1},o=n?\"y\":\"x\",l={type:\"linear\",_id:o+r._id},s={letter:o,font:a.font,noAutotickangles:o===\"y\",noHover:!0,noTickson:!0,noTicklabelmode:!0,noInsideRange:!0,calendar:a.calendar};function u(f,c){return ro.coerce(i,l,LMe,f,c)}return SMe(i,l,u,s,a),qMe(i,l,u,s),l}UW.exports={draw:CMe}});var VW=z((vXe,YW)=>{\"use strict\";YW.exports={moduleType:\"component\",name:\"colorbar\",attributes:Up(),supplyDefaults:L4(),draw:GW().draw,hasColorbar:w4()}});var WW=z((hXe,jW)=>{\"use strict\";jW.exports={moduleType:\"component\",name:\"legend\",layoutAttributes:T6(),supplyLayoutDefaults:M6(),draw:B6(),style:F6()}});var ZW=z((dXe,XW)=>{\"use strict\";XW.exports={moduleType:\"locale\",name:\"en\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colourscale title\"},format:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],periods:[\"AM\",\"PM\"],dateTime:\"%a %b %e %X %Y\",date:\"%d/%m/%Y\",time:\"%H:%M:%S\",decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],year:\"%Y\",month:\"%b %Y\",dayMonth:\"%b %-d\",dayMonthYear:\"%b %-d, %Y\"}}});var JW=z((pXe,$W)=>{\"use strict\";$W.exports={moduleType:\"locale\",name:\"en-US\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colorscale title\"},format:{date:\"%m/%d/%Y\"}}});var R8=z((mXe,rX)=>{\"use strict\";var zMe=Tr(),eX=ke(),P8=eX.extendFlat,KW=eX.extendDeep;function QW(e){var r;switch(e){case\"themes__thumb\":r={autosize:!0,width:150,height:150,title:{text:\"\"},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case\"thumbnail\":r={title:{text:\"\"},showlegend:!1,borderwidth:0,bordercolor:\"\",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:r={}}return r}function NMe(e){var r=[\"xaxis\",\"yaxis\",\"zaxis\"];return r.indexOf(e.slice(0,5))>-1}rX.exports=function(r,t){var a,n=r.data,i=r.layout,o=KW([],n),l=KW({},i,QW(t.tileClass)),s=r._context||{};if(t.width&&(l.width=t.width),t.height&&(l.height=t.height),t.tileClass===\"thumbnail\"||t.tileClass===\"themes__thumb\"){l.annotations=[];var u=Object.keys(l);for(a=0;a<u.length;a++)NMe(u[a])&&(l[u[a]].title={text:\"\"});for(a=0;a<o.length;a++){var f=o[a];f.showscale=!1,f.marker&&(f.marker.showscale=!1),zMe.traceIs(f,\"pie-like\")&&(f.textposition=\"none\")}}if(Array.isArray(t.annotations))for(a=0;a<t.annotations.length;a++)l.annotations.push(t.annotations[a]);var c=Object.keys(l).filter(function(m){return m.match(/^scene\\d*$/)});if(c.length){var v={};for(t.tileClass===\"thumbnail\"&&(v={title:{text:\"\"},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),a=0;a<c.length;a++){var d=l[c[a]];d.xaxis||(d.xaxis={}),d.yaxis||(d.yaxis={}),d.zaxis||(d.zaxis={}),P8(d.xaxis,v),P8(d.yaxis,v),P8(d.zaxis,v),d._scene=null}}var p=document.createElement(\"div\");t.tileClass&&(p.className=t.tileClass);var y={gd:p,td:p,layout:l,data:o,config:{staticPlot:t.staticPlot===void 0?!0:t.staticPlot,plotGlPixelRatio:t.plotGlPixelRatio===void 0?2:t.plotGlPixelRatio,displaylogo:t.displaylogo||!1,showTips:t.showTips||!1}};return t.setBackground!==\"transparent\"&&(y.config.setBackground=t.setBackground||\"opaque\"),y.gd.defaultLayout=QW(t.tileClass),y}});var nX=z((yXe,aX)=>{\"use strict\";var IMe=Bu().EventEmitter,BMe=Tr(),OMe=ke(),tX=Vl(),HMe=R8(),UMe=zy(),GMe=Ny();function YMe(e,r){var t=new IMe,a=HMe(e,{format:\"png\"}),n=a.gd;n.style.position=\"absolute\",n.style.left=\"-5000px\",document.body.appendChild(n);function i(){var l=tX.getDelay(n._fullLayout);setTimeout(function(){var s=UMe(n),u=document.createElement(\"canvas\");u.id=OMe.randstr(),t=GMe({format:r.format,width:n._fullLayout.width,height:n._fullLayout.height,canvas:u,emitter:t,svg:s}),t.clean=function(){n&&document.body.removeChild(n)}},l)}var o=tX.getRedrawFunc(n);return BMe.call(\"_doPlot\",n,a.data,a.layout,a.config).then(o).then(i).catch(function(l){t.emit(\"error\",l)}),t}aX.exports=YMe});var lX=z((gXe,oX)=>{\"use strict\";var iX=Vl(),VMe={getDelay:iX.getDelay,getRedrawFunc:iX.getRedrawFunc,clone:R8(),toSVG:zy(),svgToImg:Ny(),toImage:nX(),downloadImage:iw()};oX.exports=VMe});var uX=z($l=>{\"use strict\";$l.version=jv().version;cS();eP();var jMe=Tr(),Vd=$l.register=jMe.register,z8=_U(),sX=Object.keys(z8);for(Pg=0;Pg<sX.length;Pg++)Ic=sX[Pg],Ic.charAt(0)!==\"_\"&&($l[Ic]=z8[Ic]),Vd({moduleType:\"apiMethod\",name:Ic,fn:z8[Ic]});var Ic,Pg;Vd(_Y());Vd([jY(),oV(),dl(),MV(),IV(),oj(),kj(),Vj(),uW(),pW(),PW(),rl(),VW(),WW(),In(),c7()]);Vd([ZW(),JW()]);window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(Vd(window.PlotlyLocales),delete window.PlotlyLocales);$l.Icons=Im();var Rg=In(),F8=va();$l.Plots={resize:F8.resize,graphJson:F8.graphJson,sendDataToCloud:F8.sendDataToCloud};$l.Fx={hover:Rg.hover,unhover:Rg.unhover,loneHover:Rg.loneHover,loneUnhover:Rg.loneUnhover};$l.Snapshot=lX();$l.PlotSchema=G0()});var cX=z((xXe,fX)=>{\"use strict\";fX.exports=uX()});var kf=z((_Xe,mX)=>{\"use strict\";var Kt=Vi(),vX=ko().axisHoverFormat,{hovertemplateAttrs:WMe,texttemplateAttrs:XMe,templatefallbackAttrs:hX}=fi(),pX=el(),ZMe=ka(),dX=qd(),$Me=Pi().pattern,Mf=At().extendFlat,N8=ZMe({editType:\"calc\",arrayOk:!0,colorEditType:\"style\"}),JMe=Kt.marker,KMe=JMe.line,QMe=Mf({},KMe.width,{dflt:0}),eke=Mf({width:QMe,editType:\"calc\"},pX(\"marker.line\")),rke=Mf({line:eke,editType:\"calc\"},pX(\"marker\"),{opacity:{valType:\"number\",arrayOk:!0,dflt:1,min:0,max:1,editType:\"style\"},pattern:$Me,cornerradius:{valType:\"any\",editType:\"calc\"}});mX.exports={x:Kt.x,x0:Kt.x0,dx:Kt.dx,y:Kt.y,y0:Kt.y0,dy:Kt.dy,xperiod:Kt.xperiod,yperiod:Kt.yperiod,xperiod0:Kt.xperiod0,yperiod0:Kt.yperiod0,xperiodalignment:Kt.xperiodalignment,yperiodalignment:Kt.yperiodalignment,xhoverformat:vX(\"x\"),yhoverformat:vX(\"y\"),text:Kt.text,texttemplate:XMe({editType:\"plot\"},{keys:dX.eventDataKeys}),texttemplatefallback:hX({editType:\"plot\"}),hovertext:Kt.hovertext,hovertemplate:WMe({},{keys:dX.eventDataKeys}),hovertemplatefallback:hX(),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"auto\",arrayOk:!0,editType:\"calc\"},insidetextanchor:{valType:\"enumerated\",values:[\"end\",\"middle\",\"start\"],dflt:\"end\",editType:\"plot\"},textangle:{valType:\"angle\",dflt:\"auto\",editType:\"plot\"},textfont:Mf({},N8,{}),insidetextfont:Mf({},N8,{}),outsidetextfont:Mf({},N8,{}),constraintext:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"both\",\"none\"],dflt:\"both\",editType:\"calc\"},cliponaxis:Mf({},Kt.cliponaxis,{}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},base:{valType:\"any\",dflt:null,arrayOk:!0,editType:\"calc\"},offset:{valType:\"number\",dflt:null,arrayOk:!0,editType:\"calc\"},width:{valType:\"number\",dflt:null,min:0,arrayOk:!0,editType:\"calc\"},marker:rke,offsetgroup:Kt.offsetgroup,alignmentgroup:Kt.alignmentgroup,selected:{marker:{opacity:Kt.selected.marker.opacity,color:Kt.selected.marker.color,editType:\"style\"},textfont:Kt.selected.textfont,editType:\"style\"},unselected:{marker:{opacity:Kt.unselected.marker.opacity,color:Kt.unselected.marker.color,editType:\"style\"},textfont:Kt.unselected.textfont,editType:\"style\"},zorder:Kt.zorder}});var Fg=z((wXe,yX)=>{\"use strict\";yX.exports={barmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\",\"relative\"],dflt:\"group\",editType:\"calc\"},barnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},bargap:{valType:\"number\",min:0,max:1,editType:\"calc\"},bargroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},barcornerradius:{valType:\"any\",editType:\"calc\"}}});var I8=z((TXe,xX)=>{\"use strict\";var tke=Sr(),gX=hi().hasColorscale,bX=Bl(),ake=ke().coercePattern;xX.exports=function(r,t,a,n,i){var o=a(\"marker.color\",n),l=gX(r,\"marker\");l&&bX(r,t,i,a,{prefix:\"marker.\",cLetter:\"c\"}),a(\"marker.line.color\",tke.defaultLine),gX(r,\"marker.line\")&&bX(r,t,i,a,{prefix:\"marker.line.\",cLetter:\"c\"}),a(\"marker.line.width\"),a(\"marker.opacity\"),ake(a,\"marker.pattern\",o,l),a(\"selected.marker.color\"),a(\"unselected.marker.color\")}});var Sf=z((AXe,kX)=>{\"use strict\";var _X=Ir(),Bc=ke(),wX=Sr(),nke=Tr(),ike=sw(),oke=bc(),lke=I8(),ske=kd(),TX=kf(),zg=Bc.coerceFont;function uke(e,r,t,a){function n(u,f){return Bc.coerce(e,r,TX,u,f)}var i=ike(e,r,a,n);if(!i){r.visible=!1;return}oke(e,r,a,n),n(\"xhoverformat\"),n(\"yhoverformat\"),n(\"zorder\"),n(\"orientation\",r.x&&!r.y?\"h\":\"v\"),n(\"base\"),n(\"offset\"),n(\"width\"),n(\"text\"),n(\"hovertext\"),n(\"hovertemplate\"),n(\"hovertemplatefallback\");var o=n(\"textposition\");MX(e,r,a,n,o,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),lke(e,r,n,t,a);var l=(r.marker.line||{}).color,s=nke.getComponentMethod(\"errorbars\",\"supplyDefaults\");s(e,r,l||wX.defaultLine,{axis:\"y\"}),s(e,r,l||wX.defaultLine,{axis:\"x\",inherit:\"y\"}),Bc.coerceSelectionMarkerOpacity(r,n)}function fke(e,r){var t,a;function n(l,s){return Bc.coerce(a._input,a,TX,l,s)}for(var i=0;i<e.length;i++)if(a=e[i],a.type===\"bar\"){t=a._input;var o=n(\"marker.cornerradius\",r.barcornerradius);a.marker&&(a.marker.cornerradius=AX(o)),ske(t,a,r,n,r.barmode)}}function AX(e){if(_X(e)){if(e=+e,e>=0)return e}else if(typeof e==\"string\"&&(e=e.trim(),e.slice(-1)===\"%\"&&_X(e.slice(0,-1))&&(e=+e.slice(0,-1),e>=0)))return e+\"%\"}function MX(e,r,t,a,n,i){i=i||{};var o=i.moduleHasSelected!==!1,l=i.moduleHasUnselected!==!1,s=i.moduleHasConstrain!==!1,u=i.moduleHasCliponaxis!==!1,f=i.moduleHasTextangle!==!1,c=i.moduleHasInsideanchor!==!1,v=!!i.hasPathbar,d=Array.isArray(n)||n===\"auto\",p=d||n===\"inside\",y=d||n===\"outside\";if(p||y){var m=zg(a,\"textfont\",t.font),b=Bc.extendFlat({},m),T=e.textfont&&e.textfont.color,w=!T;if(w&&delete b.color,zg(a,\"insidetextfont\",b),v){var x=Bc.extendFlat({},m);w&&delete x.color,zg(a,\"pathbar.textfont\",x)}y&&zg(a,\"outsidetextfont\",m),o&&a(\"selected.textfont.color\"),l&&a(\"unselected.textfont.color\"),s&&a(\"constraintext\"),u&&a(\"cliponaxis\"),f&&a(\"textangle\"),a(\"texttemplate\"),a(\"texttemplatefallback\")}p&&c&&a(\"insidetextanchor\")}kX.exports={supplyDefaults:uke,crossTraceDefaults:fke,handleText:MX,validateCornerradius:AX}});var B8=z((MXe,SX)=>{\"use strict\";var cke=Tr(),vke=Gr(),hke=ke(),dke=Fg(),pke=Sf().validateCornerradius;SX.exports=function(e,r,t){function a(y,m){return hke.coerce(e,r,dke,y,m)}for(var n=!1,i=!1,o=!1,l={},s=a(\"barmode\"),u=s===\"group\",f=0;f<t.length;f++){var c=t[f];if(cke.traceIs(c,\"bar\")&&c.visible)n=!0;else continue;var v=c.xaxis+c.yaxis;if(u?(l[v]&&(o=!0),l[v]=!0):(v+=c._input.offsetgroup,l.length>0&&!l[v]&&(o=!0),l[v]=!0),c.visible&&c.type===\"histogram\"){var d=vke.getFromId({_fullLayout:r},c[c.orientation===\"v\"?\"xaxis\":\"yaxis\"]);d.type!==\"category\"&&(i=!0)}}if(!n){delete r.barmode;return}s!==\"overlay\"&&a(\"barnorm\"),a(\"bargap\",i&&!o?0:.2),a(\"bargroupgap\");var p=a(\"barcornerradius\");r.barcornerradius=pke(p)}});var Ng=z((kXe,qX)=>{\"use strict\";var Oc=ke();qX.exports=function(r,t){for(var a=0;a<r.length;a++)r[a].i=a;Oc.mergeArray(t.text,r,\"tx\"),Oc.mergeArray(t.hovertext,r,\"htx\");var n=t.marker;if(n){Oc.mergeArray(n.opacity,r,\"mo\",!0),Oc.mergeArray(n.color,r,\"mc\");var i=n.line;i&&(Oc.mergeArray(i.color,r,\"mlc\"),Oc.mergeArrayCastPositive(i.width,r,\"mlw\"))}}});var RX=z((SXe,PX)=>{\"use strict\";var LX=Gr(),CX=_c(),DX=hi().hasColorscale,EX=W0(),mke=Ng(),yke=jy();PX.exports=function(r,t){var a=LX.getFromId(r,t.xaxis||\"x\"),n=LX.getFromId(r,t.yaxis||\"y\"),i,o,l,s,u,f,c={msUTC:!!(t.base||t.base===0)};t.orientation===\"h\"?(i=a.makeCalcdata(t,\"x\",c),l=n.makeCalcdata(t,\"y\"),s=CX(t,n,\"y\",l),u=!!t.yperiodalignment,f=\"y\"):(i=n.makeCalcdata(t,\"y\",c),l=a.makeCalcdata(t,\"x\"),s=CX(t,a,\"x\",l),u=!!t.xperiodalignment,f=\"x\"),o=s.vals;for(var v=Math.min(o.length,i.length),d=new Array(v),p=0;p<v;p++)d[p]={p:o[p],s:i[p]},u&&(d[p].orig_p=l[p],d[p][f+\"End\"]=s.ends[p],d[p][f+\"Start\"]=s.starts[p]),t.ids&&(d[p].id=String(t.ids[p]));return DX(t,\"marker\")&&EX(r,t,{vals:t.marker.color,containerStr:\"marker\",cLetter:\"c\"}),DX(t,\"marker.line\")&&EX(r,t,{vals:t.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),mke(d,t),yke(d,t),d}});var jd=z((qXe,zX)=>{\"use strict\";var gke=Er(),bke=ke();function xke(e,r,t){var a=e._fullLayout,n=a[\"_\"+t+\"Text_minsize\"];if(n){var i=a.uniformtext.mode===\"hide\",o;switch(t){case\"funnelarea\":case\"pie\":case\"sunburst\":o=\"g.slice\";break;case\"treemap\":case\"icicle\":o=\"g.slice, g.pathbar\";break;default:o=\"g.points > g.point\"}r.selectAll(o).each(function(l){var s=l.transform;if(s){s.scale=i&&s.hide?0:n/s.fontSize;var u=gke.select(this).select(\"text\");bke.setTransormAndDisplay(u,s)}})}}function _ke(e,r,t){if(t.uniformtext.mode){var a=FX(e),n=t.uniformtext.minsize,i=r.scale*r.fontSize;r.hide=i<n,t[a]=t[a]||1/0,r.hide||(t[a]=Math.min(t[a],Math.max(i,n)))}}function wke(e,r){var t=FX(e);r[t]=void 0}function FX(e){return\"_\"+e+\"Text_minsize\"}zX.exports={recordMinTextSize:_ke,clearMinTextSize:wke,resizeText:xke}});var Ig=z(qf=>{\"use strict\";var Tke=Sr(),Ake=Ir(),NX=ke().isArrayOrTypedArray;qf.coerceString=function(e,r,t){if(typeof r==\"string\"){if(r||!e.noBlank)return r}else if((typeof r==\"number\"||r===!0)&&!e.strict)return String(r);return t!==void 0?t:e.dflt};qf.coerceNumber=function(e,r,t){if(Ake(r)){r=+r;var a=e.min,n=e.max,i=a!==void 0&&r<a||n!==void 0&&r>n;if(!i)return r}return t!==void 0?t:e.dflt};qf.coerceColor=function(e,r,t){return Tke.isValid(r)?r:t!==void 0?t:e.dflt};qf.coerceEnumerated=function(e,r,t){return e.coerceNumber&&(r=+r),e.values.indexOf(r)!==-1?r:t!==void 0?t:e.dflt};qf.getValue=function(e,r){var t;return NX(e)?r<e.length&&(t=e[r]):t=e,t};qf.getLineWidth=function(e,r){var t=0<r.mlw?r.mlw:NX(e.marker.line.width)?0:e.marker.line.width;return t}});var Hc=z((CXe,XX)=>{\"use strict\";var Wd=Er(),Mke=Sr(),Xd=Zr(),IX=ke(),BX=Tr(),OX=jd().resizeText,O8=kf(),kke=O8.textfont,Ske=O8.insidetextfont,qke=O8.outsidetextfont,tn=Ig();function Lke(e){var r=Wd.select(e).selectAll('g[class^=\"barlayer\"]').selectAll(\"g.trace\");OX(e,r,\"bar\");var t=r.size(),a=e._fullLayout;r.style(\"opacity\",function(n){return n[0].trace.opacity}).each(function(n){(a.barmode===\"stack\"&&t>1||a.bargap===0&&a.bargroupgap===0&&!n[0].trace.marker.line.width)&&Wd.select(this).attr(\"shape-rendering\",\"crispEdges\")}),r.selectAll(\"g.points\").each(function(n){var i=Wd.select(this),o=n[0].trace;HX(i,o,e)}),BX.getComponentMethod(\"errorbars\",\"style\")(r)}function HX(e,r,t){Xd.pointStyle(e.selectAll(\"path\"),r,t),UX(e,r,t)}function UX(e,r,t){e.selectAll(\"text\").each(function(a){var n=Wd.select(this),i=IX.ensureUniformFontSize(t,GX(n,a,r,t));Xd.font(n,i)})}function Cke(e,r,t){var a=r[0].trace;a.selectedpoints?Dke(t,a,e):(HX(t,a,e),BX.getComponentMethod(\"errorbars\",\"style\")(t))}function Dke(e,r,t){Xd.selectedPointStyle(e.selectAll(\"path\"),r),Eke(e.selectAll(\"text\"),r,t)}function Eke(e,r,t){e.each(function(a){var n=Wd.select(this),i;if(a.selected){i=IX.ensureUniformFontSize(t,GX(n,a,r,t));var o=r.selected.textfont&&r.selected.textfont.color;o&&(i.color=o),Xd.font(n,i)}else Xd.selectedTextStyle(n,r)})}function GX(e,r,t,a){var n=a._fullLayout.font,i=t.textfont;if(e.classed(\"bartext-inside\")){var o=WX(r,t);i=VX(t,r.i,n,o)}else e.classed(\"bartext-outside\")&&(i=jX(t,r.i,n));return i}function YX(e,r,t){return H8(kke,e.textfont,r,t)}function VX(e,r,t,a){var n=YX(e,r,t),i=e._input.textfont===void 0||e._input.textfont.color===void 0||Array.isArray(e.textfont.color)&&e.textfont.color[r]===void 0;return i&&(n={color:Mke.contrast(a),family:n.family,size:n.size,weight:n.weight,style:n.style,variant:n.variant,textcase:n.textcase,lineposition:n.lineposition,shadow:n.shadow}),H8(Ske,e.insidetextfont,r,n)}function jX(e,r,t){var a=YX(e,r,t);return H8(qke,e.outsidetextfont,r,a)}function H8(e,r,t,a){r=r||{};var n=tn.getValue(r.family,t),i=tn.getValue(r.size,t),o=tn.getValue(r.color,t),l=tn.getValue(r.weight,t),s=tn.getValue(r.style,t),u=tn.getValue(r.variant,t),f=tn.getValue(r.textcase,t),c=tn.getValue(r.lineposition,t),v=tn.getValue(r.shadow,t);return{family:tn.coerceString(e.family,n,a.family),size:tn.coerceNumber(e.size,i,a.size),color:tn.coerceColor(e.color,o,a.color),weight:tn.coerceString(e.weight,l,a.weight),style:tn.coerceString(e.style,s,a.style),variant:tn.coerceString(e.variant,u,a.variant),textcase:tn.coerceString(e.variant,f,a.textcase),lineposition:tn.coerceString(e.variant,c,a.lineposition),shadow:tn.coerceString(e.variant,v,a.shadow)}}function WX(e,r){return r.type===\"waterfall\"?r[e.dir].marker.color:e.mcc||e.mc||r.marker.color}XX.exports={style:Lke,styleTextPoints:UX,styleOnSelect:Cke,getInsideTextFont:VX,getOutsideTextFont:jX,getBarColor:WX,resizeText:OX}});var Y8=z((DXe,tZ)=>{\"use strict\";var Bg=Er(),Og=Ir(),Ua=ke(),Pke=Ca(),Rke=Sr(),$s=Zr(),Fke=Tr(),Hg=Gr().tickText,ZX=jd(),zke=ZX.recordMinTextSize,Nke=ZX.clearMinTextSize,U8=Hc(),Uc=Ig(),Ike=qd(),$X=kf(),Bke=$X.text,Oke=$X.textposition,Hke=qo().appendArrayPointValue,Ln=Ike.TEXTPAD;function Uke(e){return e.id}function Gke(e){if(e.ids)return Uke}function G8(e){return(e>0)-(e<0)}function Ho(e,r){return e<r?1:-1}function Yke(e,r,t,a){var n=[],i=[],o=a?r:t,l=a?t:r;return n[0]=o.c2p(e.s0,!0),i[0]=l.c2p(e.p0,!0),n[1]=o.c2p(e.s1,!0),i[1]=l.c2p(e.p1,!0),a?[n,i]:[i,n]}function JX(e,r,t,a){if(!r.uniformtext.mode&&KX(t)){var n;return a&&(n=a()),e.transition().duration(t.duration).ease(t.easing).each(\"end\",function(){n&&n()}).each(\"interrupt\",function(){n&&n()})}else return e}function KX(e){return e&&e.duration>0}function Vke(e,r,t,a,n,i){var o=r.xaxis,l=r.yaxis,s=e._fullLayout,u=e._context.staticPlot;n||(n={mode:s.barmode,norm:s.barmode,gap:s.bargap,groupgap:s.bargroupgap},Nke(\"bar\",s));var f=Ua.makeTraceGroups(a,t,\"trace bars\").each(function(c){var v=Bg.select(this),d=c[0].trace,p=c[0].t,y=d.type===\"waterfall\",m=d.type===\"funnel\",b=d.type===\"histogram\",T=d.type===\"bar\",w=T||m,x=0;y&&d.connector.visible&&d.connector.mode===\"between\"&&(x=d.connector.line.width/2);var _=d.orientation===\"h\",k=KX(n),A=Ua.ensureSingle(v,\"g\",\"points\"),q=Gke(d),C=A.selectAll(\"g.point\").data(Ua.identity,q);C.enter().append(\"g\").classed(\"point\",!0),C.exit().remove(),C.each(function(P,R){var N=Bg.select(this),I=Yke(P,o,l,_),O=I[0][0],U=I[0][1],Y=I[1][0],G=I[1][1],V=(_?U-O:G-Y)===0;V&&w&&Uc.getLineWidth(d,P)&&(V=!1),V||(V=!Og(O)||!Og(U)||!Og(Y)||!Og(G)),P.isBlank=V,V&&(_?U=O:G=Y),x&&!V&&(_?(O-=Ho(O,U)*x,U+=Ho(O,U)*x):(Y-=Ho(Y,G)*x,G+=Ho(Y,G)*x));var W,j;if(d.type===\"waterfall\"){if(!V){var J=d[P.dir].marker;W=J.line.width,j=J.color}}else W=Uc.getLineWidth(d,P),j=P.mc||d.marker.color;function te(re){var xe=Bg.round(W/2%1,2);return n.gap===0&&n.groupgap===0?Bg.round(Math.round(re)-xe,2):re}function ae(re,xe,Ge){return Ge&&re===xe?re:Math.abs(re-xe)>=2?te(re):re>xe?Math.ceil(re):Math.floor(re)}var se=Rke.opacity(j),$=se<1||W>.01?te:ae;e._context.staticPlot||(O=$(O,U,_),U=$(U,O,_),Y=$(Y,G,!_),G=$(G,Y,!_));var fe=_?o.c2p:l.c2p,ie;P.s0>0?ie=P._sMax:P.s0<0?ie=P._sMin:ie=P.s1>0?P._sMax:P._sMin;function ue(re,xe){if(!re)return 0;var Ge=Math.abs(_?G-Y:U-O),cr=Math.abs(_?U-O:G-Y),Pe=$(Math.abs(fe(ie,!0)-fe(0,!0))),me=P.hasB?Math.min(Ge/2,cr/2):Math.min(Ge/2,Pe),Ae;if(xe===\"%\"){var He=Math.min(50,re);Ae=Ge*(He/100)}else Ae=re;return $(Math.max(Math.min(Ae,me),0))}var ce=T||b?ue(p.cornerradiusvalue,p.cornerradiusform):0,oe,be,Re=\"M\"+O+\",\"+Y+\"V\"+G+\"H\"+U+\"V\"+Y+\"Z\",ye=0;if(ce&&P.s){var Ce=G8(P.s0)===0||G8(P.s)===G8(P.s0)?P.s1:P.s0;if(ye=$(P.hasB?0:Math.abs(fe(ie,!0)-fe(Ce,!0))),ye<ce){var Me=Ho(O,U),Le=Ho(Y,G),De=Me===-Le?1:0;if(_)if(P.hasB)oe=\"M\"+(O+ce*Me)+\",\"+Y+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+O+\",\"+(Y+ce*Le)+\"V\"+(G-ce*Le)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+(O+ce*Me)+\",\"+G+\"H\"+(U-ce*Me)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+U+\",\"+(G-ce*Le)+\"V\"+(Y+ce*Le)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+(U-ce*Me)+\",\"+Y+\"Z\";else{be=Math.abs(U-O)+ye;var Ne=be<ce?ce-Math.sqrt(be*(2*ce-be)):0,qe=ye>0?Math.sqrt(ye*(2*ce-ye)):0,Xe=Me>0?Math.max:Math.min;oe=\"M\"+O+\",\"+Y+\"V\"+(G-Ne*Le)+\"H\"+Xe(U-(ce-ye)*Me,O)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+U+\",\"+(G-ce*Le-qe)+\"V\"+(Y+ce*Le+qe)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+Xe(U-(ce-ye)*Me,O)+\",\"+(Y+Ne*Le)+\"Z\"}else if(P.hasB)oe=\"M\"+(O+ce*Me)+\",\"+Y+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+O+\",\"+(Y+ce*Le)+\"V\"+(G-ce*Le)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+(O+ce*Me)+\",\"+G+\"H\"+(U-ce*Me)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+U+\",\"+(G-ce*Le)+\"V\"+(Y+ce*Le)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+(U-ce*Me)+\",\"+Y+\"Z\";else{be=Math.abs(G-Y)+ye;var $e=be<ce?ce-Math.sqrt(be*(2*ce-be)):0,We=ye>0?Math.sqrt(ye*(2*ce-ye)):0,Se=Le>0?Math.max:Math.min;oe=\"M\"+(O+$e*Me)+\",\"+Y+\"V\"+Se(G-(ce-ye)*Le,Y)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+(O+ce*Me-We)+\",\"+G+\"H\"+(U-ce*Me+We)+\"A \"+ce+\",\"+ce+\" 0 0 \"+De+\" \"+(U-$e*Me)+\",\"+Se(G-(ce-ye)*Le,Y)+\"V\"+Y+\"Z\"}}else oe=Re}else oe=Re;var Fe=JX(Ua.ensureSingle(N,\"path\"),s,n,i);if(Fe.style(\"vector-effect\",u?\"none\":\"non-scaling-stroke\").attr(\"d\",isNaN((U-O)*(G-Y))||V&&e._context.staticPlot?\"M0,0Z\":oe).call($s.setClipUrl,r.layerClipId,e),!s.uniformtext.mode&&k){var Qe=$s.makePointStyleFns(d);$s.singlePointStyle(P,Fe,d,Qe,e)}jke(e,r,N,c,R,O,U,Y,G,ce,ye,n,i),r.layerClipId&&$s.hideOutsideRangePoint(P,N.select(\"text\"),o,l,d.xcalendar,d.ycalendar)});var E=d.cliponaxis===!1;$s.setClipUrl(v,E?null:r.layerClipId,e)});Fke.getComponentMethod(\"errorbars\",\"plot\")(e,f,r,n)}function jke(e,r,t,a,n,i,o,l,s,u,f,c,v){var d=r.xaxis,p=r.yaxis,y=e._fullLayout,m;function b(Re,ye,Ce){var Me=Ua.ensureSingle(Re,\"text\").text(ye).attr({class:\"bartext bartext-\"+m,\"text-anchor\":\"middle\",\"data-notex\":1}).call($s.font,Ce).call(Pke.convertToTspans,e);return Me}var T=a[0].trace,w=T.orientation===\"h\",x=Jke(a,w,d,p),_=Zke(y,a,n,d,p);m=$ke(T,n);var k=c.mode===\"stack\"||c.mode===\"relative\",A=a[n],q=!k||A._outmost,C=A.hasB,E=u&&u-f>Ln;if(!_||m===\"none\"||(A.isBlank||i===o||l===s)&&(m===\"auto\"||m===\"inside\")){t.select(\"text\").remove();return}var P=y.font,R=U8.getBarColor(a[n],T),N=U8.getInsideTextFont(T,n,P,R),I=U8.getOutsideTextFont(T,n,P),O=T.insidetextanchor||\"end\",U=t.datum();w?d.type===\"log\"&&U.s0<=0&&(d.range[0]<d.range[1]?i=0:i=d._length):p.type===\"log\"&&U.s0<=0&&(p.range[0]<p.range[1]?l=p._length:l=0);var Y=Math.abs(o-i),G=Math.abs(s-l),V=Y-2*Ln,W=G-2*Ln,j,J,te,ae,se;if(m===\"outside\"&&!q&&!A.hasB&&(m=\"inside\"),m===\"auto\")if(q){m=\"inside\",se=Ua.ensureUniformFontSize(e,N),j=b(t,_,se),J=$s.bBox(j.node()),te=J.width,ae=J.height;var $=te>0&&ae>0,fe;E?C?fe=Lf(V-2*u,W,te,ae,w)||Lf(V,W-2*u,te,ae,w):w?fe=Lf(V-(u-f),W,te,ae,w)||Lf(V,W-2*(u-f),te,ae,w):fe=Lf(V,W-(u-f),te,ae,w)||Lf(V-2*(u-f),W,te,ae,w):fe=Lf(V,W,te,ae,w),$&&fe?m=\"inside\":(m=\"outside\",j.remove(),j=null)}else m=\"inside\";if(!j){se=Ua.ensureUniformFontSize(e,m===\"outside\"?I:N),j=b(t,_,se);var ie=j.attr(\"transform\");if(j.attr(\"transform\",\"\"),J=$s.bBox(j.node()),te=J.width,ae=J.height,j.attr(\"transform\",ie),te<=0||ae<=0){j.remove();return}}var ue=T.textangle,ce,oe;m===\"outside\"?(oe=T.constraintext===\"both\"||T.constraintext===\"outside\",ce=Xke(i,o,l,s,J,{isHorizontal:w,constrained:oe,angle:ue,zeroBarDir:x})):(oe=T.constraintext===\"both\"||T.constraintext===\"inside\",ce=rZ(i,o,l,s,J,{isHorizontal:w,constrained:oe,angle:ue,anchor:O,hasB:C,r:u,overhead:f})),ce.fontSize=se.size,zke(T.type===\"histogram\"?\"bar\":T.type,ce,y),A.transform=ce;var be=JX(j,y,c,v);Ua.setTransormAndDisplay(be,ce)}function Lf(e,r,t,a,n){if(e<0||r<0)return!1;var i=t<=e&&a<=r,o=t<=r&&a<=e,l=n?e>=t*(r/a):r>=a*(e/t);return i||o||l}function QX(e){return e===\"auto\"?0:e}function eZ(e,r){var t=Math.PI/180*r,a=Math.abs(Math.sin(t)),n=Math.abs(Math.cos(t));return{x:e.width*n+e.height*a,y:e.width*a+e.height*n}}function rZ(e,r,t,a,n,i){var o=!!i.isHorizontal,l=!!i.constrained,s=i.angle||0,u=i.anchor,f=u===\"end\",c=u===\"start\",v=i.leftToRight||0,d=(v+1)/2,p=1-d,y=i.hasB,m=i.r,b=i.overhead,T=n.width,w=n.height,x=Math.abs(r-e),_=Math.abs(a-t),k=x>2*Ln&&_>2*Ln?Ln:0;x-=2*k,_-=2*k;var A=QX(s);s===\"auto\"&&!(T<=x&&w<=_)&&(T>x||w>_)&&(!(T>_||w>x)||T<w!=x<_)&&(A+=90);var q=eZ(n,A),C,E;if(m&&m-b>Ln){var P=Wke(e,r,t,a,q,m,b,o,y);C=P.scale,E=P.pad}else C=1,l&&(C=Math.min(1,x/q.x,_/q.y)),E=0;var R=n.left*p+n.right*d,N=(n.top+n.bottom)/2,I=(e+Ln)*p+(r-Ln)*d,O=(t+a)/2,U=0,Y=0;if(c||f){var G=(o?q.x:q.y)/2;m&&(f||y)&&(k+=E);var V=o?Ho(e,r):Ho(t,a);o?c?(I=e+V*k,U=-V*G):(I=r-V*k,U=V*G):c?(O=t+V*k,Y=-V*G):(O=a-V*k,Y=V*G)}return{textX:R,textY:N,targetX:I,targetY:O,anchorX:U,anchorY:Y,scale:C,rotate:A}}function Wke(e,r,t,a,n,i,o,l,s){var u=Math.max(0,Math.abs(r-e)-2*Ln),f=Math.max(0,Math.abs(a-t)-2*Ln),c=i-Ln,v=o?c-Math.sqrt(c*c-(c-o)*(c-o)):c,d=s?c*2:l?c-o:2*v,p=s?c*2:l?2*v:c-o,y,m,b,T,w;return n.y/n.x>=f/(u-d)?T=f/n.y:n.y/n.x<=(f-p)/u?T=u/n.x:!s&&l?(y=n.x*n.x+n.y*n.y/4,m=-2*n.x*(u-c)-n.y*(f/2-c),b=(u-c)*(u-c)+(f/2-c)*(f/2-c)-c*c,T=(-m+Math.sqrt(m*m-4*y*b))/(2*y)):s?(y=(n.x*n.x+n.y*n.y)/4,m=-n.x*(u/2-c)-n.y*(f/2-c),b=(u/2-c)*(u/2-c)+(f/2-c)*(f/2-c)-c*c,T=(-m+Math.sqrt(m*m-4*y*b))/(2*y)):(y=n.x*n.x/4+n.y*n.y,m=-n.x*(u/2-c)-2*n.y*(f-c),b=(u/2-c)*(u/2-c)+(f-c)*(f-c)-c*c,T=(-m+Math.sqrt(m*m-4*y*b))/(2*y)),T=Math.min(1,T),l?w=Math.max(0,c-Math.sqrt(Math.max(0,c*c-(c-(f-n.y*T)/2)*(c-(f-n.y*T)/2)))-o):w=Math.max(0,c-Math.sqrt(Math.max(0,c*c-(c-(u-n.x*T)/2)*(c-(u-n.x*T)/2)))-o),{scale:T,pad:w}}function Xke(e,r,t,a,n,i){var o=!!i.isHorizontal,l=!!i.constrained,s=i.angle||0,u=n.width,f=n.height,c=Math.abs(r-e),v=Math.abs(a-t),d;o?d=v>2*Ln?Ln:0:d=c>2*Ln?Ln:0;var p=1;l&&(p=o?Math.min(1,v/f):Math.min(1,c/u));var y=QX(s),m=eZ(n,y),b=(o?m.x:m.y)/2,T=(n.left+n.right)/2,w=(n.top+n.bottom)/2,x=(e+r)/2,_=(t+a)/2,k=0,A=0,q;return(o?e===r:t===a)&&i.zeroBarDir?q=i.zeroBarDir:q=o?Ho(r,e):Ho(t,a),o?(x=r-q*d,k=q*b):(_=a+q*d,A=-q*b),{textX:T,textY:w,targetX:x,targetY:_,anchorX:k,anchorY:A,scale:p,rotate:y}}function Zke(e,r,t,a,n){var i=r[0].trace,o=i.texttemplate,l;return o?l=Kke(e,r,t,a,n):i.textinfo?l=Qke(r,t,a,n):l=Uc.getValue(i.text,t),Uc.coerceString(Bke,l)}function $ke(e,r){var t=Uc.getValue(e.textposition,r);return Uc.coerceEnumerated(Oke,t)}function Jke(e,r,t,a){for(var n=!1,i=!1,o=0;o<e.length;o++){var l=e[o].s;if(l>0?n=!0:l<0&&(i=!0),n&&i)return 0}var s=r?t:a,u=-Ho(s.range[0],s.range[1]);return i?n?0:-u:u}function Kke(e,r,t,a,n){var i=r[0].trace,o=Ua.castOption(i,t,\"texttemplate\");if(!o)return\"\";var l=i.type===\"histogram\",s=i.type===\"waterfall\",u=i.type===\"funnel\",f=i.orientation===\"h\",c,v,d,p;f?(c=\"y\",v=n,d=\"x\",p=a):(c=\"x\",v=a,d=\"y\",p=n);function y(k){return Hg(v,v.c2l(k),!0).text}function m(k){return Hg(p,p.c2l(k),!0).text}var b=r[t],T={};T.label=b.p,T.labelLabel=T[c+\"Label\"]=y(b.p);var w=Ua.castOption(i,b.i,\"text\");(w===0||w)&&(T.text=w),T.value=b.s,T.valueLabel=T[d+\"Label\"]=m(b.s);var x={};Hke(x,i,b.i),(l||x.x===void 0)&&(x.x=f?T.value:T.label),(l||x.y===void 0)&&(x.y=f?T.label:T.value),(l||x.xLabel===void 0)&&(x.xLabel=f?T.valueLabel:T.labelLabel),(l||x.yLabel===void 0)&&(x.yLabel=f?T.labelLabel:T.valueLabel),s&&(T.delta=+b.rawS||b.s,T.deltaLabel=m(T.delta),T.final=b.v,T.finalLabel=m(T.final),T.initial=T.final-T.delta,T.initialLabel=m(T.initial)),u&&(T.value=b.s,T.valueLabel=m(T.value),T.percentInitial=b.begR,T.percentInitialLabel=Ua.formatPercent(b.begR),T.percentPrevious=b.difR,T.percentPreviousLabel=Ua.formatPercent(b.difR),T.percentTotal=b.sumR,T.percenTotalLabel=Ua.formatPercent(b.sumR));var _=Ua.castOption(i,b.i,\"customdata\");return _&&(T.customdata=_),Ua.texttemplateString({data:[x,T,i._meta],fallback:i.texttemplatefallback,labels:T,locale:e._d3locale,template:o})}function Qke(e,r,t,a){var n=e[0].trace,i=n.orientation===\"h\",o=n.type===\"waterfall\",l=n.type===\"funnel\";function s(_){var k=i?a:t;return Hg(k,_,!0).text}function u(_){var k=i?t:a;return Hg(k,+_,!0).text}var f=n.textinfo,c=e[r],v=f.split(\"+\"),d=[],p,y=function(_){return v.indexOf(_)!==-1};if(y(\"label\")&&d.push(s(e[r].p)),y(\"text\")&&(p=Ua.castOption(n,c.i,\"text\"),(p===0||p)&&d.push(p)),o){var m=+c.rawS||c.s,b=c.v,T=b-m;y(\"initial\")&&d.push(u(T)),y(\"delta\")&&d.push(u(m)),y(\"final\")&&d.push(u(b))}if(l){y(\"value\")&&d.push(u(c.s));var w=0;y(\"percent initial\")&&w++,y(\"percent previous\")&&w++,y(\"percent total\")&&w++;var x=w>1;y(\"percent initial\")&&(p=Ua.formatPercent(c.begR),x&&(p+=\" of initial\"),d.push(p)),y(\"percent previous\")&&(p=Ua.formatPercent(c.difR),x&&(p+=\" of previous\"),d.push(p)),y(\"percent total\")&&(p=Ua.formatPercent(c.sumR),x&&(p+=\" of total\"),d.push(p))}return d.join(\"<br>\")}tZ.exports={plot:Vke,toMoveInsideBar:rZ}});var j8=z((EXe,oZ)=>{\"use strict\";var Zd=In(),eSe=Tr(),aZ=Sr(),rSe=ke().fillText,tSe=Ig().getLineWidth,V8=Gr().hoverLabelText,aSe=Gt().BADNUM;function nSe(e,r,t,a,n){var i=nZ(e,r,t,a,n);if(i){var o=i.cd,l=o[0].trace,s=o[i.index];return i.color=iZ(l,s),eSe.getComponentMethod(\"errorbars\",\"hoverInfo\")(s,l,i),[i]}}function nZ(e,r,t,a,n){var i=e.cd,o=i[0].trace,l=i[0].t,s=a===\"closest\",u=o.type===\"waterfall\",f=e.maxHoverDistance,c=e.maxSpikeDistance,v,d,p,y,m,b,T;o.orientation===\"h\"?(v=t,d=r,p=\"y\",y=\"x\",m=O,b=R):(v=r,d=t,p=\"x\",y=\"y\",b=O,m=R);var w=o[p+\"period\"],x=s||w;function _($){return A($,-1)}function k($){return A($,1)}function A($,fe){var ie=$.w;return $[p]+fe*ie/2}function q($){return $[p+\"End\"]-$[p+\"Start\"]}var C=s?_:w?function($){return $.p-q($)/2}:function($){return Math.min(_($),$.p-l.bardelta/2)},E=s?k:w?function($){return $.p+q($)/2}:function($){return Math.max(k($),$.p+l.bardelta/2)};function P($,fe,ie){return n.finiteRange&&(ie=0),Zd.inbox($-v,fe-v,ie+Math.min(1,Math.abs(fe-$)/T)-1)}function R($){return P(C($),E($),f)}function N($){return P(_($),k($),c)}function I($){var fe=$[y];if(u){var ie=Math.abs($.rawS)||0;d>0?fe+=ie:d<0&&(fe-=ie)}return fe}function O($){var fe=d,ie=$.b,ue=I($);return Zd.inbox(ie-fe,ue-fe,f+(ue-fe)/(ue-ie)-1)}function U($){var fe=d,ie=$.b,ue=I($);return Zd.inbox(ie-fe,ue-fe,c+(ue-fe)/(ue-ie)-1)}var Y=e[p+\"a\"],G=e[y+\"a\"];T=Math.abs(Y.r2c(Y.range[1])-Y.r2c(Y.range[0]));function V($){return(m($)+b($))/2}var W=Zd.getDistanceFunction(a,m,b,V);if(Zd.getClosest(i,W,e),e.index!==!1&&i[e.index].p!==aSe){x||(C=function($){return Math.min(_($),$.p-l.bargroupwidth/2)},E=function($){return Math.max(k($),$.p+l.bargroupwidth/2)});var j=e.index,J=i[j],te=o.base?J.b+J.s:J.s;e[y+\"0\"]=e[y+\"1\"]=G.c2p(J[y],!0),e[y+\"LabelVal\"]=te;var ae=l.extents[l.extents.round(J.p)];e[p+\"0\"]=Y.c2p(s?C(J):ae[0],!0),e[p+\"1\"]=Y.c2p(s?E(J):ae[1],!0);var se=J.orig_p!==void 0;return e[p+\"LabelVal\"]=se?J.orig_p:J.p,e.labelLabel=V8(Y,e[p+\"LabelVal\"],o[p+\"hoverformat\"]),e.valueLabel=V8(G,e[y+\"LabelVal\"],o[y+\"hoverformat\"]),e.baseLabel=V8(G,J.b,o[y+\"hoverformat\"]),e.spikeDistance=(U(J)+N(J))/2,e[p+\"Spike\"]=Y.c2p(J.p,!0),rSe(J,o,e),e.hovertemplate=o.hovertemplate,e}}function iZ(e,r){var t=r.mcc||e.marker.color,a=r.mlcc||e.marker.line.color,n=tSe(e,r);if(aZ.opacity(t))return t;if(aZ.opacity(a)&&n)return a}oZ.exports={hoverPoints:nSe,hoverOnBars:nZ,getTraceColor:iZ}});var sZ=z((PXe,lZ)=>{\"use strict\";lZ.exports=function(r,t,a){return r.x=\"xVal\"in t?t.xVal:t.x,r.y=\"yVal\"in t?t.yVal:t.y,t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),a.orientation===\"h\"?(r.label=r.y,r.value=r.x):(r.label=r.x,r.value=r.y),r}});var W8=z((RXe,uZ)=>{\"use strict\";uZ.exports=function(r,t){var a=r.cd,n=r.xaxis,i=r.yaxis,o=a[0].trace,l=o.type===\"funnel\",s=o.orientation===\"h\",u=[],f;if(t===!1)for(f=0;f<a.length;f++)a[f].selected=0;else for(f=0;f<a.length;f++){var c=a[f],v=\"ct\"in c?c.ct:iSe(c,n,i,s,l);t.contains(v,!1,f,r)?(u.push({pointNumber:f,x:n.c2d(c.x),y:i.c2d(c.y)}),c.selected=1):c.selected=0}return u};function iSe(e,r,t,a,n){var i=r.c2p(a?e.s0:e.p0,!0),o=r.c2p(a?e.s1:e.p1,!0),l=t.c2p(a?e.p0:e.s0,!0),s=t.c2p(a?e.p1:e.s1,!0);return n?[(i+o)/2,(l+s)/2]:a?[o,(l+s)/2]:[(i+o)/2,s]}});var cZ=z((FXe,fZ)=>{\"use strict\";fZ.exports={attributes:kf(),layoutAttributes:Fg(),supplyDefaults:Sf().supplyDefaults,crossTraceDefaults:Sf().crossTraceDefaults,supplyLayoutDefaults:B8(),calc:RX(),crossTraceCalc:$y().crossTraceCalc,colorbar:Ed(),arraysToCalcdata:Ng(),plot:Y8().plot,style:Hc().style,styleOnSelect:Hc().styleOnSelect,hoverPoints:j8().hoverPoints,eventData:sZ(),selectPoints:W8(),moduleType:\"trace\",name:\"bar\",basePlotModule:Qi(),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"oriented\",\"errorBarsOK\",\"showLegend\",\"zoomScale\"],animatable:!0,meta:{}}});var hZ=z((zXe,vZ)=>{\"use strict\";vZ.exports=cZ()});var Ug=z((NXe,yZ)=>{\"use strict\";var oSe=my(),to=Vi(),dZ=kf(),lSe=Ei(),pZ=ko().axisHoverFormat,{hovertemplateAttrs:sSe,templatefallbackAttrs:uSe}=fi(),Jl=At().extendFlat,Gc=to.marker,mZ=Gc.line;yZ.exports={y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},y0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},dx:{valType:\"number\",editType:\"calc\"},dy:{valType:\"number\",editType:\"calc\"},xperiod:to.xperiod,yperiod:to.yperiod,xperiod0:to.xperiod0,yperiod0:to.yperiod0,xperiodalignment:to.xperiodalignment,yperiodalignment:to.yperiodalignment,xhoverformat:pZ(\"x\"),yhoverformat:pZ(\"y\"),name:{valType:\"string\",editType:\"calc+clearAxisTypes\"},q1:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},median:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},q3:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},lowerfence:{valType:\"data_array\",editType:\"calc\"},upperfence:{valType:\"data_array\",editType:\"calc\"},notched:{valType:\"boolean\",editType:\"calc\"},notchwidth:{valType:\"number\",min:0,max:.5,dflt:.25,editType:\"calc\"},notchspan:{valType:\"data_array\",editType:\"calc\"},boxpoints:{valType:\"enumerated\",values:[\"all\",\"outliers\",\"suspectedoutliers\",!1],editType:\"calc\"},jitter:{valType:\"number\",min:0,max:1,editType:\"calc\"},pointpos:{valType:\"number\",min:-2,max:2,editType:\"calc\"},sdmultiple:{valType:\"number\",min:0,editType:\"calc\",dflt:1},sizemode:{valType:\"enumerated\",values:[\"quartiles\",\"sd\"],editType:\"calc\",dflt:\"quartiles\"},boxmean:{valType:\"enumerated\",values:[!0,\"sd\",!1],editType:\"calc\"},mean:{valType:\"data_array\",editType:\"calc\"},sd:{valType:\"data_array\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},quartilemethod:{valType:\"enumerated\",values:[\"linear\",\"exclusive\",\"inclusive\"],dflt:\"linear\",editType:\"calc\"},width:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},marker:{outliercolor:{valType:\"color\",dflt:\"rgba(0, 0, 0, 0)\",editType:\"style\"},symbol:Jl({},Gc.symbol,{arrayOk:!1,editType:\"plot\"}),opacity:Jl({},Gc.opacity,{arrayOk:!1,dflt:1,editType:\"style\"}),angle:Jl({},Gc.angle,{arrayOk:!1,editType:\"calc\"}),size:Jl({},Gc.size,{arrayOk:!1,editType:\"calc\"}),color:Jl({},Gc.color,{arrayOk:!1,editType:\"style\"}),line:{color:Jl({},mZ.color,{arrayOk:!1,dflt:lSe.defaultLine,editType:\"style\"}),width:Jl({},mZ.width,{arrayOk:!1,dflt:0,editType:\"style\"}),outliercolor:{valType:\"color\",editType:\"style\"},outlierwidth:{valType:\"number\",min:0,dflt:1,editType:\"style\"},editType:\"style\"},editType:\"plot\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:oSe(),whiskerwidth:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"calc\"},showwhiskers:{valType:\"boolean\",editType:\"calc\"},offsetgroup:dZ.offsetgroup,alignmentgroup:dZ.alignmentgroup,selected:{marker:to.selected.marker,editType:\"style\"},unselected:{marker:to.unselected.marker,editType:\"style\"},text:Jl({},to.text,{}),hovertext:Jl({},to.hovertext,{}),hovertemplate:sSe({}),hovertemplatefallback:uSe(),hoveron:{valType:\"flaglist\",flags:[\"boxes\",\"points\"],dflt:\"boxes+points\",editType:\"style\"},zorder:to.zorder}});var Gg=z((IXe,gZ)=>{\"use strict\";gZ.exports={boxmode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"overlay\",editType:\"calc\"},boxgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"},boxgroupgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"}}});var Jd=z((BXe,wZ)=>{\"use strict\";var ao=ke(),fSe=Tr(),cSe=Sr(),vSe=bc(),hSe=kd(),bZ=um(),$d=Ug();function dSe(e,r,t,a){function n(p,y){return ao.coerce(e,r,$d,p,y)}if(xZ(e,r,n,a),r.visible!==!1){vSe(e,r,a,n),n(\"xhoverformat\"),n(\"yhoverformat\");var i=r._hasPreCompStats;i&&(n(\"lowerfence\"),n(\"upperfence\")),n(\"line.color\",(e.marker||{}).color||t),n(\"line.width\"),n(\"fillcolor\",cSe.addOpacity(r.line.color,.5));var o=!1;if(i){var l=n(\"mean\"),s=n(\"sd\");l&&l.length&&(o=!0,s&&s.length&&(o=\"sd\"))}n(\"whiskerwidth\");var u=n(\"sizemode\"),f;u===\"quartiles\"&&(f=n(\"boxmean\",o)),n(\"showwhiskers\",u===\"quartiles\"),(u===\"sd\"||f===\"sd\")&&n(\"sdmultiple\"),n(\"width\"),n(\"quartilemethod\");var c=!1;if(i){var v=n(\"notchspan\");v&&v.length&&(c=!0)}else ao.validate(e.notchwidth,$d.notchwidth)&&(c=!0);var d=n(\"notched\",c);d&&n(\"notchwidth\"),_Z(e,r,n,{prefix:\"box\"}),n(\"zorder\")}}function xZ(e,r,t,a){function n(E){var P=0;return E&&E.length&&(P+=1,ao.isArrayOrTypedArray(E[0])&&E[0].length&&(P+=1)),P}function i(E){return ao.validate(e[E],$d[E])}var o=t(\"y\"),l=t(\"x\"),s;if(r.type===\"box\"){var u=t(\"q1\"),f=t(\"median\"),c=t(\"q3\");r._hasPreCompStats=u&&u.length&&f&&f.length&&c&&c.length,s=Math.min(ao.minRowLength(u),ao.minRowLength(f),ao.minRowLength(c))}else r._hasPreCompStats=!1;var v=n(o),d=n(l),p=v&&ao.minRowLength(o),y=d&&ao.minRowLength(l),m=a.calendar,b={autotypenumbers:a.autotypenumbers},T,w;if(r._hasPreCompStats)switch(String(d)+String(v)){case\"00\":var x=i(\"x0\")||i(\"dx\"),_=i(\"y0\")||i(\"dy\");_&&!x?T=\"h\":T=\"v\",w=s;break;case\"10\":T=\"v\",w=Math.min(s,y);break;case\"20\":T=\"h\",w=Math.min(s,l.length);break;case\"01\":T=\"h\",w=Math.min(s,p);break;case\"02\":T=\"v\",w=Math.min(s,o.length);break;case\"12\":T=\"v\",w=Math.min(s,y,o.length);break;case\"21\":T=\"h\",w=Math.min(s,l.length,p);break;case\"11\":w=0;break;case\"22\":var k=!1,A;for(A=0;A<l.length;A++)if(bZ(l[A],m,b)===\"category\"){k=!0;break}if(k)T=\"v\",w=Math.min(s,y,o.length);else{for(A=0;A<o.length;A++)if(bZ(o[A],m,b)===\"category\"){k=!0;break}k?(T=\"h\",w=Math.min(s,l.length,p)):(T=\"v\",w=Math.min(s,y,o.length))}break}else v>0?(T=\"v\",d>0?w=Math.min(y,p):w=Math.min(p)):d>0?(T=\"h\",w=Math.min(y)):w=0;if(!w){r.visible=!1;return}r._length=w;var q=t(\"orientation\",T);r._hasPreCompStats?q===\"v\"&&d===0?(t(\"x0\",0),t(\"dx\",1)):q===\"h\"&&v===0&&(t(\"y0\",0),t(\"dy\",1)):q===\"v\"&&d===0?t(\"x0\"):q===\"h\"&&v===0&&t(\"y0\");var C=fSe.getComponentMethod(\"calendars\",\"handleTraceDefaults\");C(e,r,[\"x\",\"y\"],a)}function _Z(e,r,t,a){var n=a.prefix,i=ao.coerce2(e,r,$d,\"marker.outliercolor\"),o=t(\"marker.line.outliercolor\"),l=\"outliers\";r._hasPreCompStats?l=\"all\":(i||o)&&(l=\"suspectedoutliers\");var s=t(n+\"points\",l);s?(t(\"jitter\",s===\"all\"?.3:0),t(\"pointpos\",s===\"all\"?-1.5:0),t(\"marker.symbol\"),t(\"marker.opacity\"),t(\"marker.size\"),t(\"marker.angle\"),t(\"marker.color\",r.line.color),t(\"marker.line.color\"),t(\"marker.line.width\"),s===\"suspectedoutliers\"&&(t(\"marker.line.outliercolor\",r.marker.color),t(\"marker.line.outlierwidth\")),t(\"selected.marker.color\"),t(\"unselected.marker.color\"),t(\"selected.marker.size\"),t(\"unselected.marker.size\"),t(\"text\"),t(\"hovertext\")):delete r.marker;var u=t(\"hoveron\");(u===\"all\"||u.indexOf(\"points\")!==-1)&&(t(\"hovertemplate\"),t(\"hovertemplatefallback\")),ao.coerceSelectionMarkerOpacity(r,t)}function pSe(e,r){var t,a;function n(s){return ao.coerce(a._input,a,$d,s)}for(var i=0;i<e.length;i++){a=e[i];var o=a.type;if(o===\"box\"||o===\"violin\"){t=a._input;var l=r[o+\"mode\"];l===\"group\"&&hSe(t,a,r,n,l)}}}wZ.exports={supplyDefaults:dSe,crossTraceDefaults:pSe,handleSampleDefaults:xZ,handlePointsDefaults:_Z}});var X8=z((OXe,AZ)=>{\"use strict\";var mSe=Tr(),ySe=ke(),gSe=Gg();function TZ(e,r,t,a,n){for(var i=n+\"Layout\",o=!1,l=0;l<t.length;l++){var s=t[l];if(mSe.traceIs(s,i)){o=!0;break}}o&&(a(n+\"mode\"),a(n+\"gap\"),a(n+\"groupgap\"))}function bSe(e,r,t){function a(n,i){return ySe.coerce(e,r,gSe,n,i)}TZ(e,r,t,a,\"box\")}AZ.exports={supplyLayoutDefaults:bSe,_supply:TZ}});var J8=z((HXe,PZ)=>{\"use strict\";var $8=Ir(),Yg=Gr(),xSe=_c(),ya=ke(),Mi=Gt().BADNUM,Kl=ya._;PZ.exports=function(r,t){var a=r._fullLayout,n=Yg.getFromId(r,t.xaxis||\"x\"),i=Yg.getFromId(r,t.yaxis||\"y\"),o=[],l=t.type===\"violin\"?\"_numViolins\":\"_numBoxes\",s,u,f,c,v,d,p;t.orientation===\"h\"?(f=n,c=\"x\",v=i,d=\"y\",p=!!t.yperiodalignment):(f=i,c=\"y\",v=n,d=\"x\",p=!!t.xperiodalignment);var y=_Se(t,d,v,a[l]),m=y[0],b=y[1],T=ya.distinctVals(m,v),w=T.vals,x=T.minDiff/2,_,k,A,q,C,E,P=(t.boxpoints||t.points)===\"all\"?ya.identity:function(De){return De.v<_.lf||De.v>_.uf};if(t._hasPreCompStats){var R=t[c],N=function(De){return f.d2c((t[De]||[])[s])},I=1/0,O=-1/0;for(s=0;s<t._length;s++){var U=m[s];if($8(U)){if(_={},_.pos=_[d]=U,p&&b&&(_.orig_p=b[s]),_.q1=N(\"q1\"),_.med=N(\"median\"),_.q3=N(\"q3\"),k=[],R&&ya.isArrayOrTypedArray(R[s]))for(u=0;u<R[s].length;u++)E=f.d2c(R[s][u]),E!==Mi&&(C={v:E,i:[s,u]},MZ(C,t,[s,u]),k.push(C));if(_.pts=k.sort(kZ),A=_[c]=k.map(SZ),q=A.length,_.med!==Mi&&_.q1!==Mi&&_.q3!==Mi&&_.med>=_.q1&&_.q3>=_.med){var Y=N(\"lowerfence\");_.lf=Y!==Mi&&Y<=_.q1?Y:qZ(_,A,q);var G=N(\"upperfence\");_.uf=G!==Mi&&G>=_.q3?G:LZ(_,A,q);var V=N(\"mean\");_.mean=V!==Mi?V:q?ya.mean(A,q):(_.q1+_.q3)/2;var W=N(\"sd\");_.sd=V!==Mi&&W>=0?W:q?ya.stdev(A,q,_.mean):_.q3-_.q1,_.lo=CZ(_),_.uo=DZ(_);var j=N(\"notchspan\");j=j!==Mi&&j>0?j:EZ(_,q),_.ln=_.med-j,_.un=_.med+j;var J=_.lf,te=_.uf;t.boxpoints&&A.length&&(J=Math.min(J,A[0]),te=Math.max(te,A[q-1])),t.notched&&(J=Math.min(J,_.ln),te=Math.max(te,_.un)),_.min=J,_.max=te}else{ya.warn([\"Invalid input - make sure that q1 <= median <= q3\",\"q1 = \"+_.q1,\"median = \"+_.med,\"q3 = \"+_.q3].join(`\n`));var ae;_.med!==Mi?ae=_.med:_.q1!==Mi?_.q3!==Mi?ae=(_.q1+_.q3)/2:ae=_.q1:_.q3!==Mi?ae=_.q3:ae=0,_.med=ae,_.q1=_.q3=ae,_.lf=_.uf=ae,_.mean=_.sd=ae,_.ln=_.un=ae,_.min=_.max=ae}I=Math.min(I,_.min),O=Math.max(O,_.max),_.pts2=k.filter(P),o.push(_)}}t._extremes[f._id]=Yg.findExtremes(f,[I,O],{padded:!0})}else{var se=f.makeCalcdata(t,c),$=wSe(w,x),fe=w.length,ie=TSe(fe);for(s=0;s<t._length;s++)if(E=se[s],!!$8(E)){var ue=ya.findBin(m[s],$);ue>=0&&ue<fe&&(C={v:E,i:s},MZ(C,t,s),ie[ue].push(C))}var ce=1/0,oe=-1/0,be=t.quartilemethod,Re=be===\"exclusive\",ye=be===\"inclusive\";for(s=0;s<fe;s++)if(ie[s].length>0){if(_={},_.pos=_[d]=w[s],k=_.pts=ie[s].sort(kZ),A=_[c]=k.map(SZ),q=A.length,_.min=A[0],_.max=A[q-1],_.mean=ya.mean(A,q),_.sd=ya.stdev(A,q,_.mean)*t.sdmultiple,_.med=ya.interp(A,.5),q%2&&(Re||ye)){var Ce,Me;Re?(Ce=A.slice(0,q/2),Me=A.slice(q/2+1)):ye&&(Ce=A.slice(0,q/2+1),Me=A.slice(q/2)),_.q1=ya.interp(Ce,.5),_.q3=ya.interp(Me,.5)}else _.q1=ya.interp(A,.25),_.q3=ya.interp(A,.75);_.lf=qZ(_,A,q),_.uf=LZ(_,A,q),_.lo=CZ(_),_.uo=DZ(_);var Le=EZ(_,q);_.ln=_.med-Le,_.un=_.med+Le,ce=Math.min(ce,_.ln),oe=Math.max(oe,_.un),_.pts2=k.filter(P),o.push(_)}t.notched&&ya.isTypedArray(se)&&(se=Array.from(se)),t._extremes[f._id]=Yg.findExtremes(f,t.notched?se.concat([ce,oe]):se,{padded:!0})}return ASe(o,t),o.length>0?(o[0].t={num:a[l],dPos:x,posLetter:d,valLetter:c,labels:{med:Kl(r,\"median:\"),min:Kl(r,\"min:\"),q1:Kl(r,\"q1:\"),q3:Kl(r,\"q3:\"),max:Kl(r,\"max:\"),mean:t.boxmean===\"sd\"||t.sizemode===\"sd\"?Kl(r,\"mean \\xB1 \\u03C3:\").replace(\"\\u03C3\",t.sdmultiple===1?\"\\u03C3\":t.sdmultiple+\"\\u03C3\"):Kl(r,\"mean:\"),lf:Kl(r,\"lower fence:\"),uf:Kl(r,\"upper fence:\")}},a[l]++,o):[{t:{empty:!0}}]};function _Se(e,r,t,a){var n=r in e,i=r+\"0\"in e,o=\"d\"+r in e;if(n||i&&o){var l=t.makeCalcdata(e,r),s=xSe(e,t,r,l).vals;return[s,l]}var u;i?u=e[r+\"0\"]:\"name\"in e&&(t.type===\"category\"||$8(e.name)&&[\"linear\",\"log\"].indexOf(t.type)!==-1||ya.isDateTime(e.name)&&t.type===\"date\")?u=e.name:u=a;for(var f=t.type===\"multicategory\"?t.r2c_just_indices(u):t.d2c(u,0,e[r+\"calendar\"]),c=e._length,v=new Array(c),d=0;d<c;d++)v[d]=f;return[v]}function wSe(e,r){for(var t=e.length,a=new Array(t+1),n=0;n<t;n++)a[n]=e[n]-r;return a[t]=e[t-1]+r,a}function TSe(e){for(var r=new Array(e),t=0;t<e;t++)r[t]=[];return r}var Z8={text:\"tx\",hovertext:\"htx\"};function MZ(e,r,t){for(var a in Z8)ya.isArrayOrTypedArray(r[a])&&(Array.isArray(t)?ya.isArrayOrTypedArray(r[a][t[0]])&&(e[Z8[a]]=r[a][t[0]][t[1]]):e[Z8[a]]=r[a][t])}function ASe(e,r){if(ya.isArrayOrTypedArray(r.selectedpoints))for(var t=0;t<e.length;t++){for(var a=e[t].pts||[],n={},i=0;i<a.length;i++)n[a[i].i]=i;ya.tagSelected(a,r,n)}}function kZ(e,r){return e.v-r.v}function SZ(e){return e.v}function qZ(e,r,t){return t===0?e.q1:Math.min(e.q1,r[Math.min(ya.findBin(2.5*e.q1-1.5*e.q3,r,!0)+1,t-1)])}function LZ(e,r,t){return t===0?e.q3:Math.max(e.q3,r[Math.max(ya.findBin(2.5*e.q3-1.5*e.q1,r),0)])}function CZ(e){return 4*e.q1-3*e.q3}function DZ(e){return 4*e.q3-3*e.q1}function EZ(e,r){return r===0?0:1.57*(e.q3-e.q1)/Math.sqrt(r)}});var K8=z((UXe,NZ)=>{\"use strict\";var RZ=Gr(),MSe=ke(),kSe=vf().getAxisGroup,FZ=[\"v\",\"h\"];function SSe(e,r){for(var t=e.calcdata,a=r.xaxis,n=r.yaxis,i=0;i<FZ.length;i++){for(var o=FZ[i],l=o===\"h\"?n:a,s=[],u=0;u<t.length;u++){var f=t[u],c=f[0].t,v=f[0].trace;v.visible===!0&&(v.type===\"box\"||v.type===\"candlestick\")&&!c.empty&&(v.orientation||\"v\")===o&&v.xaxis===a._id&&v.yaxis===n._id&&s.push(u)}zZ(\"box\",e,s,l)}}function zZ(e,r,t,a){var n=r.calcdata,i=r._fullLayout,o=a._id,l=o.charAt(0),s,u,f,c=[],v=0;for(s=0;s<t.length;s++)for(f=n[t[s]],u=0;u<f.length;u++)c.push(a.c2l(f[u].pos,!0)),v+=(f[u].pts2||[]).length;if(c.length){var d=MSe.distinctVals(c);(a.type===\"category\"||a.type===\"multicategory\")&&(d.minDiff=1);var p=d.minDiff/2;RZ.minDtick(a,d.minDiff,d.vals[0],!0);var y=e===\"violin\"?\"_numViolins\":\"_numBoxes\",m=i[y],b=i[e+\"mode\"]===\"group\"&&m>1,T=1-i[e+\"gap\"],w=1-i[e+\"groupgap\"];for(s=0;s<t.length;s++){f=n[t[s]];var x=f[0].trace,_=f[0].t,k=x.width,A=x.side,q,C,E,P;if(k)q=C=P=k/2,E=0;else if(q=p,b){var R=kSe(i,a._id)+x.orientation,N=i._alignmentOpts[R]||{},I=N[x.alignmentgroup]||{},O=Object.keys(I.offsetGroups||{}).length,U=O||m,Y=O?x._offsetIndex:_.num;C=q*T*w/U,E=2*q*(-.5+(Y+.5)/U)*T,P=q*T/U}else C=q*T*w,E=0,P=q;_.dPos=q,_.bPos=E,_.bdPos=C,_.wHover=P;var G,V,W=E+C,j,J,te,ae,se,$,fe=!!k,ie=(x.boxpoints||x.points)&&v>0;if(A===\"positive\"?(G=q*(k?1:.5),j=W,V=j=E):A===\"negative\"?(G=j=E,V=q*(k?1:.5),J=W):(G=V=q,j=J=W),ie){var ue=x.pointpos,ce=x.jitter,oe=x.marker.size/2,be=0;ue+ce>=0&&(be=W*(ue+ce),be>G?(fe=!0,se=oe,te=be):be>j&&(se=oe,te=G)),be<=G&&(te=G);var Re=0;ue-ce<=0&&(Re=-W*(ue-ce),Re>V?(fe=!0,$=oe,ae=Re):Re>J&&($=oe,ae=V)),Re<=V&&(ae=V)}else te=G,ae=V;var ye=new Array(f.length);for(u=0;u<f.length;u++)ye[u]=f[u].pos;x._extremes[o]=RZ.findExtremes(a,ye,{padded:fe,vpadminus:ae,vpadplus:te,vpadLinearized:!0,ppadminus:{x:$,y:se}[l],ppadplus:{x:se,y:$}[l]})}}}NZ.exports={crossTraceCalc:SSe,setPositionOffset:zZ}});var Q8=z((GXe,UZ)=>{\"use strict\";var Yc=Er(),Cf=ke(),qSe=Zr(),IZ=5,LSe=.01;function CSe(e,r,t,a){var n=e._context.staticPlot,i=r.xaxis,o=r.yaxis;Cf.makeTraceGroups(a,t,\"trace boxes\").each(function(l){var s=Yc.select(this),u=l[0],f=u.t,c=u.trace;if(f.wdPos=f.bdPos*c.whiskerwidth,c.visible!==!0||f.empty){s.remove();return}var v,d;c.orientation===\"h\"?(v=o,d=i):(v=i,d=o),BZ(s,{pos:v,val:d},c,f,n),OZ(s,{x:i,y:o},c,f),HZ(s,{pos:v,val:d},c,f)})}function BZ(e,r,t,a,n){var i=t.orientation===\"h\",o=r.val,l=r.pos,s=!!l.rangebreaks,u=a.bPos,f=a.wdPos||0,c=a.bPosPxOffset||0,v=t.whiskerwidth||0,d=t.showwhiskers!==!1,p=t.notched||!1,y=p?1-2*t.notchwidth:1,m,b;Array.isArray(a.bdPos)?(m=a.bdPos[0],b=a.bdPos[1]):(m=a.bdPos,b=a.bdPos);var T=e.selectAll(\"path.box\").data(t.type!==\"violin\"||t.box.visible?Cf.identity:[]);T.enter().append(\"path\").style(\"vector-effect\",n?\"none\":\"non-scaling-stroke\").attr(\"class\",\"box\"),T.exit().remove(),T.each(function(w){if(w.empty)return Yc.select(this).attr(\"d\",\"M0,0Z\");var x=l.c2l(w.pos+u,!0),_=l.l2p(x-m)+c,k=l.l2p(x+b)+c,A=s?(_+k)/2:l.l2p(x)+c,q=t.whiskerwidth,C=s?_*q+(1-q)*A:l.l2p(x-f)+c,E=s?k*q+(1-q)*A:l.l2p(x+f)+c,P=l.l2p(x-m*y)+c,R=l.l2p(x+b*y)+c,N=t.sizemode===\"sd\",I=o.c2p(N?w.mean-w.sd:w.q1,!0),O=N?o.c2p(w.mean+w.sd,!0):o.c2p(w.q3,!0),U=Cf.constrain(N?o.c2p(w.mean,!0):o.c2p(w.med,!0),Math.min(I,O)+1,Math.max(I,O)-1),Y=w.lf===void 0||t.boxpoints===!1||N,G=o.c2p(Y?w.min:w.lf,!0),V=o.c2p(Y?w.max:w.uf,!0),W=o.c2p(w.ln,!0),j=o.c2p(w.un,!0);i?Yc.select(this).attr(\"d\",\"M\"+U+\",\"+P+\"V\"+R+\"M\"+I+\",\"+_+\"V\"+k+(p?\"H\"+W+\"L\"+U+\",\"+R+\"L\"+j+\",\"+k:\"\")+\"H\"+O+\"V\"+_+(p?\"H\"+j+\"L\"+U+\",\"+P+\"L\"+W+\",\"+_:\"\")+\"Z\"+(d?\"M\"+I+\",\"+A+\"H\"+G+\"M\"+O+\",\"+A+\"H\"+V+(v===0?\"\":\"M\"+G+\",\"+C+\"V\"+E+\"M\"+V+\",\"+C+\"V\"+E):\"\")):Yc.select(this).attr(\"d\",\"M\"+P+\",\"+U+\"H\"+R+\"M\"+_+\",\"+I+\"H\"+k+(p?\"V\"+W+\"L\"+R+\",\"+U+\"L\"+k+\",\"+j:\"\")+\"V\"+O+\"H\"+_+(p?\"V\"+j+\"L\"+P+\",\"+U+\"L\"+_+\",\"+W:\"\")+\"Z\"+(d?\"M\"+A+\",\"+I+\"V\"+G+\"M\"+A+\",\"+O+\"V\"+V+(v===0?\"\":\"M\"+C+\",\"+G+\"H\"+E+\"M\"+C+\",\"+V+\"H\"+E):\"\"))})}function OZ(e,r,t,a){var n=r.x,i=r.y,o=a.bdPos,l=a.bPos,s=t.boxpoints||t.points;Cf.seedPseudoRandom();var u=function(v){return v.forEach(function(d){d.t=a,d.trace=t}),v},f=e.selectAll(\"g.points\").data(s?u:[]);f.enter().append(\"g\").attr(\"class\",\"points\"),f.exit().remove();var c=f.selectAll(\"path\").data(function(v){var d,p=v.pts2,y=Math.max((v.max-v.min)/10,v.q3-v.q1),m=y*1e-9,b=y*LSe,T=[],w=0,x;if(t.jitter){if(y===0)for(w=1,T=new Array(p.length),d=0;d<p.length;d++)T[d]=1;else for(d=0;d<p.length;d++){var _=Math.max(0,d-IZ),k=p[_].v,A=Math.min(p.length-1,d+IZ),q=p[A].v;s!==\"all\"&&(p[d].v<v.lf?q=Math.min(q,v.lf):k=Math.max(k,v.uf));var C=Math.sqrt(b*(A-_)/(q-k+m))||0;C=Cf.constrain(Math.abs(C),0,1),T.push(C),w=Math.max(C,w)}x=t.jitter*2/(w||1)}for(d=0;d<p.length;d++){var E=p[d],P=E.v,R=t.jitter?x*T[d]*(Cf.pseudoRandom()-.5):0,N=v.pos+l+o*(t.pointpos+R);t.orientation===\"h\"?(E.y=N,E.x=P):(E.x=N,E.y=P),s===\"suspectedoutliers\"&&P<v.uo&&P>v.lo&&(E.so=!0)}return p});c.enter().append(\"path\").classed(\"point\",!0),c.exit().remove(),c.call(qSe.translatePoints,n,i)}function HZ(e,r,t,a){var n=r.val,i=r.pos,o=!!i.rangebreaks,l=a.bPos,s=a.bPosPxOffset||0,u=t.boxmean||(t.meanline||{}).visible,f,c;Array.isArray(a.bdPos)?(f=a.bdPos[0],c=a.bdPos[1]):(f=a.bdPos,c=a.bdPos);var v=e.selectAll(\"path.mean\").data(t.type===\"box\"&&t.boxmean||t.type===\"violin\"&&t.box.visible&&t.meanline.visible?Cf.identity:[]);v.enter().append(\"path\").attr(\"class\",\"mean\").style({fill:\"none\",\"vector-effect\":\"non-scaling-stroke\"}),v.exit().remove(),v.each(function(d){var p=i.c2l(d.pos+l,!0),y=i.l2p(p-f)+s,m=i.l2p(p+c)+s,b=o?(y+m)/2:i.l2p(p)+s,T=n.c2p(d.mean,!0),w=n.c2p(d.mean-d.sd,!0),x=n.c2p(d.mean+d.sd,!0);t.orientation===\"h\"?Yc.select(this).attr(\"d\",\"M\"+T+\",\"+y+\"V\"+m+(u===\"sd\"?\"m0,0L\"+w+\",\"+b+\"L\"+T+\",\"+y+\"L\"+x+\",\"+b+\"Z\":\"\")):Yc.select(this).attr(\"d\",\"M\"+y+\",\"+T+\"H\"+m+(u===\"sd\"?\"m0,0L\"+b+\",\"+w+\"L\"+y+\",\"+T+\"L\"+b+\",\"+x+\"Z\":\"\"))})}UZ.exports={plot:CSe,plotBoxAndWhiskers:BZ,plotPoints:OZ,plotBoxMean:HZ}});var a9=z((YXe,GZ)=>{\"use strict\";var e9=Er(),r9=Sr(),t9=Zr();function DSe(e,r,t){var a=t||e9.select(e).selectAll(\"g.trace.boxes\");a.style(\"opacity\",function(n){return n[0].trace.opacity}),a.each(function(n){var i=e9.select(this),o=n[0].trace,l=o.line.width;function s(c,v,d,p){c.style(\"stroke-width\",v+\"px\").call(r9.stroke,d).call(r9.fill,p)}var u=i.selectAll(\"path.box\");if(o.type===\"candlestick\")u.each(function(c){if(!c.empty){var v=e9.select(this),d=o[c.dir];s(v,d.line.width,d.line.color,d.fillcolor),v.style(\"opacity\",o.selectedpoints&&!c.selected?.3:1)}});else{s(u,l,o.line.color,o.fillcolor),i.selectAll(\"path.mean\").style({\"stroke-width\":l,\"stroke-dasharray\":2*l+\"px,\"+l+\"px\"}).call(r9.stroke,o.line.color);var f=i.selectAll(\"path.point\");t9.pointStyle(f,o,e)}})}function ESe(e,r,t){var a=r[0].trace,n=t.selectAll(\"path.point\");a.selectedpoints?t9.selectedPointStyle(n,a):t9.pointStyle(n,a,e)}GZ.exports={style:DSe,styleOnSelect:ESe}});var i9=z((VXe,WZ)=>{\"use strict\";var PSe=Gr(),n9=ke(),Js=In(),YZ=Sr(),RSe=n9.fillText;function FSe(e,r,t,a){var n=e.cd,i=n[0].trace,o=i.hoveron,l=[],s;return o.indexOf(\"boxes\")!==-1&&(l=l.concat(VZ(e,r,t,a))),o.indexOf(\"points\")!==-1&&(s=jZ(e,r,t)),a===\"closest\"?s?[s]:l:(s&&l.push(s),l)}function VZ(e,r,t,a){var n=e.cd,i=e.xa,o=e.ya,l=n[0].trace,s=n[0].t,u=l.type===\"violin\",f,c,v,d,p,y,m,b,T,w,x,_=s.bdPos,k,A,q=s.wHover,C=function(oe){return v.c2l(oe.pos)+s.bPos-v.c2l(y)};u&&l.side!==\"both\"?(l.side===\"positive\"&&(T=function(oe){var be=C(oe);return Js.inbox(be,be+q,w)},k=_,A=0),l.side===\"negative\"&&(T=function(oe){var be=C(oe);return Js.inbox(be-q,be,w)},k=0,A=_)):(T=function(oe){var be=C(oe);return Js.inbox(be-q,be+q,w)},k=A=_);var E;u?E=function(oe){return Js.inbox(oe.span[0]-p,oe.span[1]-p,w)}:E=function(oe){return Js.inbox(oe.min-p,oe.max-p,w)},l.orientation===\"h\"?(p=r,y=t,m=E,b=T,f=\"y\",v=o,c=\"x\",d=i):(p=t,y=r,m=T,b=E,f=\"x\",v=i,c=\"y\",d=o);var P=Math.min(1,_/Math.abs(v.r2c(v.range[1])-v.r2c(v.range[0])));w=e.maxHoverDistance-P,x=e.maxSpikeDistance-P;function R(oe){return(m(oe)+b(oe))/2}var N=Js.getDistanceFunction(a,m,b,R);if(Js.getClosest(n,N,e),e.index===!1)return[];var I=n[e.index],O=l.line.color,U=(l.marker||{}).color;YZ.opacity(O)&&l.line.width?e.color=O:YZ.opacity(U)&&l.boxpoints?e.color=U:e.color=l.fillcolor,e[f+\"0\"]=v.c2p(I.pos+s.bPos-A,!0),e[f+\"1\"]=v.c2p(I.pos+s.bPos+k,!0),e[f+\"LabelVal\"]=I.orig_p!==void 0?I.orig_p:I.pos;var Y=f+\"Spike\";e.spikeDistance=R(I)*x/w,e[Y]=v.c2p(I.pos,!0);var G=l.boxmean||l.sizemode===\"sd\"||(l.meanline||{}).visible,V=l.boxpoints||l.points,W=V&&G?[\"max\",\"uf\",\"q3\",\"med\",\"mean\",\"q1\",\"lf\",\"min\"]:V&&!G?[\"max\",\"uf\",\"q3\",\"med\",\"q1\",\"lf\",\"min\"]:!V&&G?[\"max\",\"q3\",\"med\",\"mean\",\"q1\",\"min\"]:[\"max\",\"q3\",\"med\",\"q1\",\"min\"],j=d.range[1]<d.range[0];l.orientation===(j?\"v\":\"h\")&&W.reverse();for(var J=e.spikeDistance,te=e[Y],ae=[],se=0;se<W.length;se++){var $=W[se];if($ in I){var fe=I[$],ie=d.c2p(fe,!0),ue=n9.extendFlat({},e);ue.attr=$,ue[c+\"0\"]=ue[c+\"1\"]=ie,ue[c+\"LabelVal\"]=fe,ue[c+\"Label\"]=(s.labels?s.labels[$]+\" \":\"\")+PSe.hoverLabelText(d,fe,l[c+\"hoverformat\"]),ue.hoverOnBox=!0,$===\"mean\"&&\"sd\"in I&&(l.boxmean===\"sd\"||l.sizemode===\"sd\")&&(ue[c+\"err\"]=I.sd),ue.hovertemplate=!1,ae.push(ue)}}e.name=\"\",e.spikeDistance=void 0,e[Y]=void 0;for(var ce=0;ce<ae.length;ce++)ae[ce].attr!==\"med\"?(ae[ce].name=\"\",ae[ce].spikeDistance=void 0,ae[ce][Y]=void 0):(ae[ce].spikeDistance=J,ae[ce][Y]=te);return ae}function jZ(e,r,t){for(var a=e.cd,n=e.xa,i=e.ya,o=a[0].trace,l=n.c2p(r),s=i.c2p(t),u,f=function(E){var P=Math.max(3,E.mrc||0);return Math.max(Math.abs(n.c2p(E.x)-l)-P,1-3/P)},c=function(E){var P=Math.max(3,E.mrc||0);return Math.max(Math.abs(i.c2p(E.y)-s)-P,1-3/P)},v=Js.quadrature(f,c),d=!1,p,y,m=0;m<a.length;m++){p=a[m];for(var b=0;b<(p.pts||[]).length;b++){y=p.pts[b];var T=v(y);T<=e.distance&&(e.distance=T,d=[m,b])}}if(!d)return!1;p=a[d[0]],y=p.pts[d[1]];var w=n.c2p(y.x,!0),x=i.c2p(y.y,!0),_=y.mrc||1;u=n9.extendFlat({},e,{index:y.i,color:(o.marker||{}).color,name:o.name,x0:w-_,x1:w+_,y0:x-_,y1:x+_,spikeDistance:e.distance,hovertemplate:o.hovertemplate});var k=p.orig_p,A=k!==void 0?k:p.pos,q;o.orientation===\"h\"?(q=i,u.xLabelVal=y.x,u.yLabelVal=A):(q=n,u.xLabelVal=A,u.yLabelVal=y.y);var C=q._id.charAt(0);return u[C+\"Spike\"]=q.c2p(p.pos,!0),RSe(y,o,u),u}WZ.exports={hoverPoints:FSe,hoverOnBoxes:VZ,hoverOnPoints:jZ}});var ZZ=z((jXe,XZ)=>{\"use strict\";XZ.exports=function(r,t){return t.hoverOnBox&&(r.hoverOnBox=t.hoverOnBox),\"xVal\"in t&&(r.x=t.xVal),\"yVal\"in t&&(r.y=t.yVal),t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),r}});var o9=z((WXe,$Z)=>{\"use strict\";$Z.exports=function(r,t){var a=r.cd,n=r.xaxis,i=r.yaxis,o=[],l,s;if(t===!1)for(l=0;l<a.length;l++)for(s=0;s<(a[l].pts||[]).length;s++)a[l].pts[s].selected=0;else for(l=0;l<a.length;l++)for(s=0;s<(a[l].pts||[]).length;s++){var u=a[l].pts[s],f=n.c2p(u.x),c=i.c2p(u.y);t.contains([f,c],null,u.i,r)?(o.push({pointNumber:u.i,x:n.c2d(u.x),y:i.c2d(u.y)}),u.selected=1):u.selected=0}return o}});var KZ=z((XXe,JZ)=>{\"use strict\";JZ.exports={attributes:Ug(),layoutAttributes:Gg(),supplyDefaults:Jd().supplyDefaults,crossTraceDefaults:Jd().crossTraceDefaults,supplyLayoutDefaults:X8().supplyLayoutDefaults,calc:J8(),crossTraceCalc:K8().crossTraceCalc,plot:Q8().plot,style:a9().style,styleOnSelect:a9().styleOnSelect,hoverPoints:i9().hoverPoints,eventData:ZZ(),selectPoints:o9(),moduleType:\"trace\",name:\"box\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"boxLayout\",\"zoomScale\"],meta:{}}});var e$=z((ZXe,QZ)=>{\"use strict\";QZ.exports=KZ()});var Kd=z(($Xe,t$)=>{\"use strict\";var zSe=el(),{extendFlat:ti}=At(),NSe=zn(),{axisHoverFormat:l9}=ko(),ISe=ka(),{hovertemplateAttrs:BSe,templatefallbackAttrs:r$,texttemplateAttrs:OSe}=fi(),ki=Vi();t$.exports=ti({z:{valType:\"data_array\",editType:\"calc\"},x:ti({},ki.x,{impliedEdits:{xtype:\"array\"}}),x0:ti({},ki.x0,{impliedEdits:{xtype:\"scaled\"}}),dx:ti({},ki.dx,{impliedEdits:{xtype:\"scaled\"}}),y:ti({},ki.y,{impliedEdits:{ytype:\"array\"}}),y0:ti({},ki.y0,{impliedEdits:{ytype:\"scaled\"}}),dy:ti({},ki.dy,{impliedEdits:{ytype:\"scaled\"}}),xperiod:ti({},ki.xperiod,{impliedEdits:{xtype:\"scaled\"}}),yperiod:ti({},ki.yperiod,{impliedEdits:{ytype:\"scaled\"}}),xperiod0:ti({},ki.xperiod0,{impliedEdits:{xtype:\"scaled\"}}),yperiod0:ti({},ki.yperiod0,{impliedEdits:{ytype:\"scaled\"}}),xperiodalignment:ti({},ki.xperiodalignment,{impliedEdits:{xtype:\"scaled\"}}),yperiodalignment:ti({},ki.yperiodalignment,{impliedEdits:{ytype:\"scaled\"}}),text:{valType:\"data_array\",editType:\"calc\"},hovertext:{valType:\"data_array\",editType:\"calc\"},transpose:{valType:\"boolean\",dflt:!1,editType:\"calc\"},xtype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},ytype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},zsmooth:{valType:\"enumerated\",values:[\"fast\",\"best\",!1],dflt:!1,editType:\"calc\"},hoverongaps:{valType:\"boolean\",dflt:!0,editType:\"none\"},connectgaps:{valType:\"boolean\",editType:\"calc\"},xgap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},ygap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},xhoverformat:l9(\"x\"),yhoverformat:l9(\"y\"),zhoverformat:l9(\"z\",1),hovertemplate:BSe(),hovertemplatefallback:r$(),texttemplate:OSe({arrayOk:!1,editType:\"plot\"},{keys:[\"x\",\"y\",\"z\",\"text\"]}),texttemplatefallback:r$({editType:\"plot\"}),textfont:ISe({editType:\"plot\",autoSize:!0,autoColor:!0,colorEditType:\"style\"}),showlegend:ti({},NSe.showlegend,{dflt:!1}),zorder:ki.zorder},zSe(\"\",{cLetter:\"z\",autoColorDflt:!1}))});var s9=z((JXe,n$)=>{\"use strict\";var HSe=Ir(),Vg=ke(),USe=Tr();n$.exports=function(r,t,a,n,i,o){var l=a(\"z\");i=i||\"x\",o=o||\"y\";var s,u;if(l===void 0||!l.length)return 0;if(Vg.isArray1D(l)){s=a(i),u=a(o);var f=Vg.minRowLength(s),c=Vg.minRowLength(u);if(f===0||c===0)return 0;t._length=Math.min(f,c,l.length)}else{if(s=a$(i,a),u=a$(o,a),!GSe(l))return 0;a(\"transpose\"),t._length=null}var v=USe.getComponentMethod(\"calendars\",\"handleTraceDefaults\");return v(r,t,[i,o],n),!0};function a$(e,r){var t=r(e),a=t?r(e+\"type\",\"array\"):\"scaled\";return a===\"scaled\"&&(r(e+\"0\"),r(\"d\"+e)),t}function GSe(e){for(var r=!0,t=!1,a=!1,n,i=0;i<e.length;i++){if(n=e[i],!Vg.isArrayOrTypedArray(n)){r=!1;break}n.length>0&&(t=!0);for(var o=0;o<n.length;o++)if(HSe(n[o])){a=!0;break}}return r&&t&&a}});var Qd=z((KXe,o$)=>{\"use strict\";var i$=ke();o$.exports=function(r,t){r(\"texttemplate\"),r(\"texttemplatefallback\");var a=i$.extendFlat({},t.font,{color:\"auto\",size:\"auto\"});i$.coerceFont(r,\"textfont\",a)}});var u9=z((QXe,l$)=>{\"use strict\";l$.exports=function(r,t,a){var n=a(\"zsmooth\");n===!1&&(a(\"xgap\"),a(\"ygap\")),a(\"zhoverformat\")}});var f$=z((eZe,u$)=>{\"use strict\";var s$=ke(),YSe=s9(),VSe=Qd(),jSe=bc(),WSe=u9(),XSe=Bl(),ZSe=Kd();u$.exports=function(r,t,a,n){function i(l,s){return s$.coerce(r,t,ZSe,l,s)}var o=YSe(r,t,i,n);if(!o){t.visible=!1;return}jSe(r,t,n,i),i(\"xhoverformat\"),i(\"yhoverformat\"),i(\"text\"),i(\"hovertext\"),i(\"hovertemplate\"),i(\"hovertemplatefallback\"),VSe(i,n),WSe(r,t,i,n),i(\"hoverongaps\"),i(\"connectgaps\",s$.isArray1D(t.z)&&t.zsmooth!==!1),XSe(r,t,n,i,{prefix:\"\",cLetter:\"z\"}),i(\"zorder\")}});var f9=z((rZe,c$)=>{\"use strict\";var Vc=Ir();c$.exports={count:function(e,r,t){return t[e]++,1},sum:function(e,r,t,a){var n=a[r];return Vc(n)?(n=Number(n),t[e]+=n,n):0},avg:function(e,r,t,a,n){var i=a[r];return Vc(i)&&(i=Number(i),t[e]+=i,n[e]++),0},min:function(e,r,t,a){var n=a[r];if(Vc(n))if(n=Number(n),Vc(t[e])){if(t[e]>n){var i=n-t[e];return t[e]=n,i}}else return t[e]=n,n;return 0},max:function(e,r,t,a){var n=a[r];if(Vc(n))if(n=Number(n),Vc(t[e])){if(t[e]<n){var i=n-t[e];return t[e]=n,i}}else return t[e]=n,n;return 0}}});var c9=z((tZe,v$)=>{\"use strict\";v$.exports={percent:function(e,r){for(var t=e.length,a=100/r,n=0;n<t;n++)e[n]*=a},probability:function(e,r){for(var t=e.length,a=0;a<t;a++)e[a]/=r},density:function(e,r,t,a){var n=e.length;a=a||1;for(var i=0;i<n;i++)e[i]*=t[i]*a},\"probability density\":function(e,r,t,a){var n=e.length;a&&(r/=a);for(var i=0;i<n;i++)e[i]*=t[i]/r}}});var v9=z((aZe,h$)=>{\"use strict\";h$.exports=function(r,t){for(var a=r.length,n=0,i=0;i<a;i++)t[i]?(r[i]/=t[i],n+=r[i]):r[i]=null;return n}});var h9=z((nZe,_$)=>{\"use strict\";var jc=Gt(),Df=jc.ONEAVGYEAR,d$=jc.ONEAVGMONTH,Wg=jc.ONEDAY,p$=jc.ONEHOUR,m$=jc.ONEMIN,y$=jc.ONESEC,g$=Gr().tickIncrement;_$.exports=function(r,t,a,n,i){var o=-1.1*t,l=-.1*t,s=r-l,u=a[0],f=a[1],c=Math.min(jg(u+l,u+s,n,i),jg(f+l,f+s,n,i)),v=Math.min(jg(u+o,u+l,n,i),jg(f+o,f+l,n,i)),d,p;if(c>v&&v<Math.abs(f-u)/4e3?(d=c,p=!1):(d=Math.min(c,v),p=!0),n.type===\"date\"&&d>Wg){var y=d===Df?1:6,m=d===Df?\"M12\":\"M1\";return function(b,T){var w=n.c2d(b,Df,i),x=w.indexOf(\"-\",y);x>0&&(w=w.slice(0,x));var _=n.d2c(w,0,i);if(_<b){var k=g$(_,m,!1,i);(_+k)/2<b+r&&(_=k)}return T&&p?g$(_,m,!0,i):_}}return function(b,T){var w=d*Math.round(b/d);return w+d/10<b&&w+d*.9<b+r&&(w+=d),T&&p&&(w-=d),w}};function jg(e,r,t,a){if(e*r<=0)return 1/0;for(var n=Math.abs(r-e),i=t.type===\"date\",o=b$(n,i),l=0;l<10;l++){var s=b$(o*80,i);if(o===s)break;if($Se(s,e,r,i,t,a))o=s;else break}return o}function b$(e,r){return r&&e>y$?e>Wg?e>Df*1.1?Df:e>d$*1.1?d$:Wg:e>p$?p$:e>m$?m$:y$:Math.pow(10,Math.floor(Math.log(e)/Math.LN10))}function $Se(e,r,t,a,n,i){if(a&&e>Wg){var o=x$(r,n,i),l=x$(t,n,i),s=e===Df?0:1;return o[s]!==l[s]}return Math.floor(t/e)-Math.floor(r/e)>.1}function x$(e,r,t){var a=r.c2d(e,Df,t).split(\"-\");return a[0]===\"\"&&(a.unshift(),a[0]=\"-\"+a[0]),a}});var m9=z((iZe,k$)=>{\"use strict\";var d9=Ir(),Cn=ke(),w$=Tr(),no=Gr(),{hasColorscale:T$}=hi(),A$=W0(),JSe=Ng(),M$=f9(),KSe=c9(),QSe=v9(),eqe=h9();function rqe(e,r){var t=[],a=[],n=r.orientation===\"h\",i=no.getFromId(e,n?r.yaxis:r.xaxis),o=n?\"y\":\"x\",l={x:\"y\",y:\"x\"}[o],s=r[o+\"calendar\"],u=r.cumulative,f,c=p9(e,r,i,o),v=c[0],d=c[1],p=typeof v.size==\"string\",y=[],m=p?y:v,b=[],T=[],w=[],x=0,_=r.histnorm,k=r.histfunc,A=_.indexOf(\"density\")!==-1,q,C,E;u.enabled&&A&&(_=_.replace(/ ?density$/,\"\"),A=!1);var P=k===\"max\"||k===\"min\",R=P?null:0,N=M$.count,I=KSe[_],O=!1,U=function(be){return i.r2c(be,0,s)},Y;for(Cn.isArrayOrTypedArray(r[l])&&k!==\"count\"&&(Y=r[l],O=k===\"avg\",N=M$[k]),f=U(v.start),C=U(v.end)+(f-no.tickIncrement(f,v.size,!1,s))/1e6;f<C&&t.length<1e6&&(q=no.tickIncrement(f,v.size,!1,s),t.push((f+q)/2),a.push(R),w.push([]),y.push(f),A&&b.push(1/(q-f)),O&&T.push(0),!(q<=f));)f=q;y.push(f),!p&&i.type===\"date\"&&(m={start:U(m.start),end:U(m.end),size:m.size}),e._fullLayout._roundFnOpts||(e._fullLayout._roundFnOpts={});var G=r[\"_\"+o+\"bingroup\"],V={leftGap:1/0,rightGap:1/0};G&&(e._fullLayout._roundFnOpts[G]||(e._fullLayout._roundFnOpts[G]=V),V=e._fullLayout._roundFnOpts[G]);var W=a.length,j=!0,J=V.leftGap,te=V.rightGap,ae={};for(f=0;f<d.length;f++){var se=d[f];E=Cn.findBin(se,m),E>=0&&E<W&&(x+=N(E,f,a,Y,T),j&&w[E].length&&se!==d[w[E][0]]&&(j=!1),w[E].push(f),ae[f]=E,J=Math.min(J,se-y[E]),te=Math.min(te,y[E+1]-se))}V.leftGap=J,V.rightGap=te;var $;j||($=function(be,Re){return function(){var ye=e._fullLayout._roundFnOpts[G];return eqe(ye.leftGap,ye.rightGap,y,i,s)(be,Re)}}),O&&(x=QSe(a,T)),I&&I(a,x,b),u.enabled&&nqe(a,u.direction,u.currentbin);var fe=Math.min(t.length,a.length),ie=[],ue=0,ce=fe-1;for(f=0;f<fe;f++)if(a[f]){ue=f;break}for(f=fe-1;f>=ue;f--)if(a[f]){ce=f;break}for(f=ue;f<=ce;f++)if(d9(t[f])&&d9(a[f])){var oe={p:t[f],s:a[f],b:0};u.enabled||(oe.pts=w[f],j?oe.ph0=oe.ph1=w[f].length?d[w[f][0]]:t[f]:(r._computePh=!0,oe.ph0=$(y[f]),oe.ph1=$(y[f+1],!0))),ie.push(oe)}return ie.length===1&&(ie[0].width1=no.tickIncrement(ie[0].p,v.size,!1,s)-ie[0].p),T$(r,\"marker\")&&A$(e,r,{vals:r.marker.color,containerStr:\"marker\",cLetter:\"c\"}),T$(r,\"marker.line\")&&A$(e,r,{vals:r.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),JSe(ie,r),Cn.isArrayOrTypedArray(r.selectedpoints)&&Cn.tagSelected(ie,r,ae),ie}function p9(e,r,t,a,n){var se;var i=a+\"bins\",o=e._fullLayout,l=r[\"_\"+a+\"bingroup\"],s=o._histogramBinOpts[l],u=o.barmode===\"overlay\",f,c,v,d,p,y,m,b=function($){return t.r2c($,0,d)},T=function($){return t.c2r($,0,d)},w=t.type===\"date\"?function($){return $||$===0?Cn.cleanDate($,null,d):null}:function($){return d9($)?Number($):null};function x($,fe,ie){fe[$+\"Found\"]?(fe[$]=w(fe[$]),fe[$]===null&&(fe[$]=ie[$])):(y[$]=fe[$]=ie[$],Cn.nestedProperty(c[0],i+\".\"+$).set(ie[$]))}if(r[\"_\"+a+\"autoBinFinished\"])delete r[\"_\"+a+\"autoBinFinished\"];else{c=s.traces;var _=[],k=!0,A=!1,q=!1;for(f=0;f<c.length;f++)if(v=c[f],v.visible){var C=s.dirs[f];p=v[\"_\"+C+\"pos0\"]=t.makeCalcdata(v,C),_=Cn.concat(_,p),delete v[\"_\"+a+\"autoBinFinished\"],r.visible===!0&&(k?k=!1:(delete v._autoBin,v[\"_\"+a+\"autoBinFinished\"]=1),w$.traceIs(v,\"2dMap\")&&(A=!0),v.type===\"histogram2dcontour\"&&(q=!0))}d=c[0][a+\"calendar\"];var E=no.autoBin(_,t,s.nbins,A,d,s.sizeFound&&s.size),P=c[0]._autoBin={};if(y=P[s.dirs[0]]={},q&&(s.size||(E.start=T(no.tickIncrement(b(E.start),E.size,!0,d))),s.end===void 0&&(E.end=T(no.tickIncrement(b(E.end),E.size,!1,d)))),u&&!w$.traceIs(r,\"2dMap\")&&E._dataSpan===0&&t.type!==\"category\"&&t.type!==\"multicategory\"&&r.bingroup===\"\"&&!((se=r._input[i])!=null&&se.size)){if(n)return[E,p,!0];E=tqe(e,r,t,a,i)}m=v.cumulative||{},m.enabled&&m.currentbin!==\"include\"&&(m.direction===\"decreasing\"?E.start=T(no.tickIncrement(b(E.start),E.size,!0,d)):E.end=T(no.tickIncrement(b(E.end),E.size,!1,d))),s.size=E.size,s.sizeFound||(y.size=E.size,Cn.nestedProperty(c[0],i+\".size\").set(E.size)),x(\"start\",s,E),x(\"end\",s,E)}p=r[\"_\"+a+\"pos0\"],delete r[\"_\"+a+\"pos0\"];var R=r._input[i]||{},N=Cn.extendFlat({},s),I=s.start,O=t.r2l(R.start),U=O!==void 0;if((s.startFound||U)&&O!==t.r2l(I)){var Y=U?O:Cn.aggNums(Math.min,null,p),G={type:t.type===\"category\"||t.type===\"multicategory\"?\"linear\":t.type,r2l:t.r2l,dtick:s.size,tick0:I,calendar:d,range:[Y,no.tickIncrement(Y,s.size,!1,d)].map(t.l2r)},V=no.tickFirst(G);V>t.r2l(Y)&&(V=no.tickIncrement(V,s.size,!0,d)),N.start=t.l2r(V),U||Cn.nestedProperty(r,i+\".start\").set(N.start)}var W=s.end,j=t.r2l(R.end),J=j!==void 0;if((s.endFound||J)&&j!==t.r2l(W)){var te=J?j:Cn.aggNums(Math.max,null,p);N.end=t.l2r(te),J||Cn.nestedProperty(r,i+\".start\").set(N.end)}var ae=\"autobin\"+a;return r._input[ae]===!1&&(r._input[i]=Cn.extendFlat({},r[i]||{}),delete r._input[ae],delete r[ae]),[N,p]}function tqe(e,r,t,a,n){var i=e._fullLayout,o=aqe(e,r),l=!1,s=1/0,u=[r],f,c,v;for(f=0;f<o.length;f++)if(c=o[f],c===r)l=!0;else if(!l)v=i._histogramBinOpts[c[\"_\"+a+\"bingroup\"]],s=Math.min(s,v.size||c[n].size);else{var d=p9(e,c,t,a,!0),p=d[0],y=d[2];c[\"_\"+a+\"autoBinFinished\"]=1,c[\"_\"+a+\"pos0\"]=d[1],y?u.push(c):s=Math.min(s,p.size)}var m=new Array(u.length);for(f=0;f<u.length;f++)for(var b=u[f][\"_\"+a+\"pos0\"],T=0;T<b.length;T++)if(b[T]!==void 0){m[f]=b[T];break}for(isFinite(s)||(s=Cn.distinctVals(m).minDiff),f=0;f<u.length;f++){c=u[f];var w=c[a+\"calendar\"],x={start:t.c2r(m[f]-s/2,0,w),end:t.c2r(m[f]+s/2,0,w),size:s};c._input[n]=c[n]=x,v=i._histogramBinOpts[c[\"_\"+a+\"bingroup\"]],v&&Cn.extendFlat(v,x)}return r[n]}function aqe(e,r){for(var t=r.xaxis,a=r.yaxis,n=r.orientation,i=[],o=e._fullData,l=0;l<o.length;l++){var s=o[l];s.type===\"histogram\"&&s.visible===!0&&s.orientation===n&&s.xaxis===t&&s.yaxis===a&&i.push(s)}return i}function nqe(e,r,t){var a,n,i;function o(s){i=e[s],e[s]/=2}function l(s){n=e[s],e[s]=i+n/2,i+=n}if(t===\"half\")if(r===\"increasing\")for(o(0),a=1;a<e.length;a++)l(a);else for(o(e.length-1),a=e.length-2;a>=0;a--)l(a);else if(r===\"increasing\"){for(a=1;a<e.length;a++)e[a]+=e[a-1];t===\"exclude\"&&(e.unshift(0),e.pop())}else{for(a=e.length-2;a>=0;a--)e[a]+=e[a+1];t===\"exclude\"&&(e.push(0),e.shift())}}k$.exports={calc:rqe,calcAllAutoBins:p9}});var R$=z((oZe,P$)=>{\"use strict\";var S$=ke(),Wc=Gr(),q$=f9(),iqe=c9(),oqe=v9(),lqe=h9(),L$=m9().calcAllAutoBins;P$.exports=function(r,t){var a=Wc.getFromId(r,t.xaxis),n=Wc.getFromId(r,t.yaxis),i=t.xcalendar,o=t.ycalendar,l=function(me){return a.r2c(me,0,i)},s=function(me){return n.r2c(me,0,o)},u=function(me){return a.c2r(me,0,i)},f=function(me){return n.c2r(me,0,o)},c,v,d,p,y=L$(r,t,a,\"x\"),m=y[0],b=y[1],T=L$(r,t,n,\"y\"),w=T[0],x=T[1],_=t._length;b.length>_&&b.splice(_,b.length-_),x.length>_&&x.splice(_,x.length-_);var k=[],A=[],q=[],C=typeof m.size==\"string\",E=typeof w.size==\"string\",P=[],R=[],N=C?P:m,I=E?R:w,O=0,U=[],Y=[],G=t.histnorm,V=t.histfunc,W=G.indexOf(\"density\")!==-1,j=V===\"max\"||V===\"min\",J=j?null:0,te=q$.count,ae=iqe[G],se=!1,$=[],fe=[],ie=\"z\"in t?t.z:\"marker\"in t&&Array.isArray(t.marker.color)?t.marker.color:\"\";ie&&V!==\"count\"&&(se=V===\"avg\",te=q$[V]);var ue=m.size,ce=l(m.start),oe=l(m.end)+(ce-Wc.tickIncrement(ce,ue,!1,i))/1e6;for(c=ce;c<oe;c=Wc.tickIncrement(c,ue,!1,i))A.push(J),P.push(c),se&&q.push(0);P.push(c);var be=A.length,Re=(c-ce)/be,ye=u(ce+Re/2),Ce=w.size,Me=s(w.start),Le=s(w.end)+(Me-Wc.tickIncrement(Me,Ce,!1,o))/1e6;for(c=Me;c<Le;c=Wc.tickIncrement(c,Ce,!1,o)){k.push(A.slice()),R.push(c);var De=new Array(be);for(v=0;v<be;v++)De[v]=[];Y.push(De),se&&U.push(q.slice())}R.push(c);var Ne=k.length,qe=(c-Me)/Ne,Xe=f(Me+qe/2);W&&($=C$(A.length,N,Re,C),fe=C$(k.length,I,qe,E)),!C&&a.type===\"date\"&&(N=D$(l,N)),!E&&n.type===\"date\"&&(I=D$(s,I));var $e=!0,We=!0,Se=new Array(be),Fe=new Array(Ne),Qe=1/0,re=1/0,xe=1/0,Ge=1/0;for(c=0;c<_;c++){var cr=b[c],Pe=x[c];d=S$.findBin(cr,N),p=S$.findBin(Pe,I),d>=0&&d<be&&p>=0&&p<Ne&&(O+=te(d,c,k[p],ie,U[p]),Y[p][d].push(c),$e&&(Se[d]===void 0?Se[d]=cr:Se[d]!==cr&&($e=!1)),We&&(Fe[p]===void 0?Fe[p]=Pe:Fe[p]!==Pe&&(We=!1)),Qe=Math.min(Qe,cr-P[d]),re=Math.min(re,P[d+1]-cr),xe=Math.min(xe,Pe-R[p]),Ge=Math.min(Ge,R[p+1]-Pe))}if(se)for(p=0;p<Ne;p++)O+=oqe(k[p],U[p]);if(ae)for(p=0;p<Ne;p++)ae(k[p],O,$,fe[p]);return{x:b,xRanges:E$(P,$e&&Se,Qe,re,a,i),x0:ye,dx:Re,y:x,yRanges:E$(R,We&&Fe,xe,Ge,n,o),y0:Xe,dy:qe,z:k,pts:Y}};function C$(e,r,t,a){var n=new Array(e),i;if(a)for(i=0;i<e;i++)n[i]=1/(r[i+1]-r[i]);else{var o=1/t;for(i=0;i<e;i++)n[i]=o}return n}function D$(e,r){return{start:e(r.start),end:e(r.end),size:r.size}}function E$(e,r,t,a,n,i){var o,l=e.length-1,s=new Array(l),u=lqe(t,a,e,n,i);for(o=0;o<l;o++){var f=(r||[])[o];s[o]=f===void 0?[u(e[o]),u(e[o+1],!0)]:[f,f]}return s}});var I$=z((lZe,N$)=>{\"use strict\";var gl=ke(),F$=Gt().BADNUM,z$=_c();N$.exports=function(r,t,a,n,i,o){var l=r._length,s=t.makeCalcdata(r,n),u=a.makeCalcdata(r,i);s=z$(r,t,n,s).vals,u=z$(r,a,i,u).vals;var f=r.text,c=f!==void 0&&gl.isArray1D(f),v=r.hovertext,d=v!==void 0&&gl.isArray1D(v),p,y,m=gl.distinctVals(s),b=m.vals,T=gl.distinctVals(u),w=T.vals,x=[],_,k,A=w.length,q=b.length;for(p=0;p<o.length;p++)x[p]=gl.init2dArray(A,q);c&&(_=gl.init2dArray(A,q)),d&&(k=gl.init2dArray(A,q));var C=gl.init2dArray(A,q);for(p=0;p<l;p++)if(s[p]!==F$&&u[p]!==F$){var E=gl.findBin(s[p]+m.minDiff/2,b),P=gl.findBin(u[p]+T.minDiff/2,w);for(y=0;y<o.length;y++){var R=o[y],N=r[R],I=x[y];I[P][E]=N[p],C[P][E]=p}c&&(_[P][E]=f[p]),d&&(k[P][E]=v[p])}for(r[\"_\"+n]=b,r[\"_\"+i]=w,y=0;y<o.length;y++)r[\"_\"+o[y]]=x[y];c&&(r._text=_),d&&(r._hovertext=k),t&&t.type===\"category\"&&(r[\"_\"+n+\"CategoryMap\"]=b.map(function(O){return t._categories[O]})),a&&a.type===\"category\"&&(r[\"_\"+i+\"CategoryMap\"]=w.map(function(O){return a._categories[O]})),r._after2before=C}});var O$=z((sZe,B$)=>{\"use strict\";var sqe=Ir(),uqe=ke(),Xg=Gt().BADNUM;B$.exports=function(r,t,a,n){var i,o,l,s,u,f;function c(b){if(sqe(b))return+b}if(t&&t.transpose){for(i=0,u=0;u<r.length;u++)i=Math.max(i,r[u].length);if(i===0)return!1;l=function(b){return b.length},s=function(b,T,w){return(b[w]||[])[T]}}else i=r.length,l=function(b,T){return b[T].length},s=function(b,T,w){return(b[T]||[])[w]};var v=function(b,T,w){return T===Xg||w===Xg?Xg:s(b,T,w)};function d(b){if(t&&t.type!==\"carpet\"&&t.type!==\"contourcarpet\"&&b&&b.type===\"category\"&&t[\"_\"+b._id.charAt(0)].length){var T=b._id.charAt(0),w={},x=t[\"_\"+T+\"CategoryMap\"]||t[T];for(u=0;u<x.length;u++)w[x[u]]=u;return function(_){var k=w[b._categories[_]];return k+1?k:Xg}}else return uqe.identity}var p=d(a),y=d(n);n&&n.type===\"category\"&&(i=n._categories.length);var m=new Array(i);for(u=0;u<i;u++)for(a&&a.type===\"category\"?o=a._categories.length:o=l(r,u),m[u]=new Array(o),f=0;f<o;f++)m[u][f]=c(v(r,y(u),p(f)));return m}});var Y$=z((uZe,G$)=>{\"use strict\";var fqe=ke(),H$=.01,cqe=[[-1,0],[1,0],[0,-1],[0,1]];function vqe(e){return .5-.25*Math.min(1,e*.5)}G$.exports=function(r,t){var a=1,n;for(U$(r,t),n=0;n<t.length&&!(t[n][2]<4);n++);for(t=t.slice(n),n=0;n<100&&a>H$;n++)a=U$(r,t,vqe(a));return a>H$&&fqe.log(\"interp2d didn't converge quickly\",a),r};function U$(e,r,t){var a=0,n,i,o,l,s,u,f,c,v,d,p,y,m;for(l=0;l<r.length;l++){for(n=r[l],i=n[0],o=n[1],p=e[i][o],d=0,v=0,s=0;s<4;s++)u=cqe[s],f=e[i+u[0]],f&&(c=f[o+u[1]],c!==void 0&&(d===0?y=m=c:(y=Math.min(y,c),m=Math.max(m,c)),v++,d+=c));if(v===0)throw\"iterateInterp2d order is wrong: no defined neighbors\";e[i][o]=d/v,p===void 0?v<4&&(a=1):(e[i][o]=(1+t)*e[i][o]-t*p,m>y&&(a=Math.max(a,Math.abs(e[i][o]-p)/(m-y))))}return a}});var j$=z((fZe,V$)=>{\"use strict\";var hqe=ke().maxRowLength;V$.exports=function(r){var t=[],a={},n=[],i=r[0],o=[],l=[0,0,0],s=hqe(r),u,f,c,v,d,p,y,m;for(f=0;f<r.length;f++)for(u=o,o=i,i=r[f+1]||[],c=0;c<s;c++)o[c]===void 0&&(p=(o[c-1]!==void 0?1:0)+(o[c+1]!==void 0?1:0)+(u[c]!==void 0?1:0)+(i[c]!==void 0?1:0),p?(f===0&&p++,c===0&&p++,f===r.length-1&&p++,c===o.length-1&&p++,p<4&&(a[[f,c]]=[f,c,p]),t.push([f,c,p])):n.push([f,c]));for(;n.length;){for(y={},m=!1,d=n.length-1;d>=0;d--)v=n[d],f=v[0],c=v[1],p=((a[[f-1,c]]||l)[2]+(a[[f+1,c]]||l)[2]+(a[[f,c-1]]||l)[2]+(a[[f,c+1]]||l)[2])/20,p&&(y[v]=[f,c,p],n.splice(d,1),m=!0);if(!m)throw\"findEmpties iterated with no new neighbors\";for(v in y)a[v]=y[v],t.push(y[v])}return t.sort(function(b,T){return T[2]-b[2]})}});var $$=z((cZe,Z$)=>{\"use strict\";var W$=Tr(),X$=ke().isArrayOrTypedArray;Z$.exports=function(r,t,a,n,i,o){var l=[],s=W$.traceIs(r,\"contour\"),u=W$.traceIs(r,\"histogram\"),f,c,v,d=X$(t)&&t.length>1;if(d&&!u&&o.type!==\"category\"){var p=t.length;if(p<=i){if(s)l=Array.from(t).slice(0,i);else if(i===1)o.type===\"log\"?l=[.5*t[0],2*t[0]]:l=[t[0]-.5,t[0]+.5];else if(o.type===\"log\"){for(l=[Math.pow(t[0],1.5)/Math.pow(t[1],.5)],v=1;v<p;v++)l.push(Math.sqrt(t[v-1]*t[v]));l.push(Math.pow(t[p-1],1.5)/Math.pow(t[p-2],.5))}else{for(l=[1.5*t[0]-.5*t[1]],v=1;v<p;v++)l.push((t[v-1]+t[v])*.5);l.push(1.5*t[p-1]-.5*t[p-2])}if(p<i){var y=l[l.length-1],m;if(o.type===\"log\")for(m=y/l[l.length-2],v=p;v<i;v++)y*=m,l.push(y);else for(m=y-l[l.length-2],v=p;v<i;v++)y+=m,l.push(y)}}else return s?t.slice(0,i):t.slice(0,i+1)}else{var b=r[o._id.charAt(0)+\"calendar\"];if(u)f=o.r2c(a,0,b);else if(X$(t)&&t.length===1)f=t[0];else if(a===void 0)f=0;else{var T=o.type===\"log\"?o.d2c:o.r2c;f=T(a,0,b)}for(c=n||1,v=s?0:-.5;v<i;v++)l.push(f+c*v)}return l}});var Jg=z((vZe,eJ)=>{\"use strict\";var J$=Tr(),y9=ke(),Zg=Gr(),K$=_c(),dqe=R$(),pqe=W0(),mqe=I$(),yqe=O$(),gqe=Y$(),bqe=j$(),$g=$$(),g9=Gt().BADNUM;eJ.exports=function(r,t){var a=Zg.getFromId(r,t.xaxis||\"x\"),n=Zg.getFromId(r,t.yaxis||\"y\"),i=J$.traceIs(t,\"contour\"),o=J$.traceIs(t,\"histogram\"),l=i?\"best\":t.zsmooth,s,u,f,c,v,d,p,y,m,b,T;if(a._minDtick=0,n._minDtick=0,o)T=dqe(r,t),c=T.orig_x,s=T.x,u=T.x0,f=T.dx,y=T.orig_y,v=T.y,d=T.y0,p=T.dy,m=T.z;else{var w=t.z;y9.isArray1D(w)?(mqe(t,a,n,\"x\",\"y\",[\"z\"]),s=t._x,v=t._y,w=t._z):(c=t.x?a.makeCalcdata(t,\"x\"):[],y=t.y?n.makeCalcdata(t,\"y\"):[],s=K$(t,a,\"x\",c).vals,v=K$(t,n,\"y\",y).vals,t._x=s,t._y=v),u=t.x0,f=t.dx,d=t.y0,p=t.dy,m=yqe(w,t,a,n)}(a.rangebreaks||n.rangebreaks)&&(m=xqe(s,v,m),o||(s=Q$(s),v=Q$(v),t._x=s,t._y=v)),!o&&(i||t.connectgaps)&&(t._emptypoints=bqe(m),gqe(m,t._emptypoints));function x(N){l=t._input.zsmooth=t.zsmooth=!1,y9.warn('cannot use zsmooth: \"fast\": '+N)}function _(N){if(N.length>1){var I=(N[N.length-1]-N[0])/(N.length-1),O=Math.abs(I/100);for(b=0;b<N.length-1;b++)if(Math.abs(N[b+1]-N[b]-I)>O)return!1}return!0}t._islinear=!1,a.type===\"log\"||n.type===\"log\"?l===\"fast\"&&x(\"log axis found\"):_(s)?_(v)?t._islinear=!0:l===\"fast\"&&x(\"y scale is not linear\"):l===\"fast\"&&x(\"x scale is not linear\");var k=y9.maxRowLength(m),A=t.xtype===\"scaled\"?\"\":s,q=$g(t,A,u,f,k,a),C=t.ytype===\"scaled\"?\"\":v,E=$g(t,C,d,p,m.length,n);t._extremes[a._id]=Zg.findExtremes(a,q),t._extremes[n._id]=Zg.findExtremes(n,E);var P={x:q,y:E,z:m,text:t._text||t.text,hovertext:t._hovertext||t.hovertext};if(t.xperiodalignment&&c&&(P.orig_x=c),t.yperiodalignment&&y&&(P.orig_y=y),A&&A.length===q.length-1&&(P.xCenter=A),C&&C.length===E.length-1&&(P.yCenter=C),o&&(P.xRanges=T.xRanges,P.yRanges=T.yRanges,P.pts=T.pts),i||pqe(r,t,{vals:m,cLetter:\"z\"}),i&&t.contours&&t.contours.coloring===\"heatmap\"){var R={type:t.type===\"contour\"?\"heatmap\":\"histogram2d\",xcalendar:t.xcalendar,ycalendar:t.ycalendar};P.xfill=$g(R,A,u,f,k,a),P.yfill=$g(R,C,d,p,m.length,n)}return[P]};function Q$(e){for(var r=[],t=e.length,a=0;a<t;a++){var n=e[a];n!==g9&&r.push(n)}return r}function xqe(e,r,t){for(var a=[],n=-1,i=0;i<t.length;i++)if(r[i]!==g9){n++,a[n]=[];for(var o=0;o<t[i].length;o++)e[o]!==g9&&a[n].push(t[i][o])}return a}});var Qg=z(Kg=>{\"use strict\";Kg.CSS_DECLARATIONS=[[\"image-rendering\",\"optimizeSpeed\"],[\"image-rendering\",\"-moz-crisp-edges\"],[\"image-rendering\",\"-o-crisp-edges\"],[\"image-rendering\",\"-webkit-optimize-contrast\"],[\"image-rendering\",\"optimize-contrast\"],[\"image-rendering\",\"crisp-edges\"],[\"image-rendering\",\"pixelated\"]];Kg.STYLE=Kg.CSS_DECLARATIONS.map(function(e){return e.join(\": \")+\"; \"}).join(\"\")});var x9=z((dZe,tJ)=>{\"use strict\";var rJ=Qg(),_qe=Zr(),b9=ke(),Xc=null;function wqe(){if(Xc!==null)return Xc;Xc=!1;var e=b9.isSafari()||b9.isMacWKWebView()||b9.isIOS();if(window.navigator.userAgent&&!e){var r=Array.from(rJ.CSS_DECLARATIONS).reverse(),t=window.CSS&&window.CSS.supports||window.supportsCSS;if(typeof t==\"function\")Xc=r.some(function(o){return t.apply(null,o)});else{var a=_qe.tester.append(\"image\").attr(\"style\",rJ.STYLE),n=window.getComputedStyle(a.node()),i=n.imageRendering;Xc=r.some(function(o){var l=o[1];return i===l||i===l.toLowerCase()}),a.remove()}}return Xc}tJ.exports=wqe});var e3=z((pZe,vJ)=>{\"use strict\";var aJ=Er(),Tqe=Tr(),Aqe=Zr(),Mqe=Gr(),io=ke(),nJ=Ca(),kqe=Cw(),iJ=Sr(),Sqe=rl().extractOpts,qqe=rl().makeColorScaleFuncFromTrace,Lqe=Il(),Cqe=Qa(),_9=Cqe.LINE_SPACING,Dqe=x9(),Eqe=Qg().STYLE,fJ=\"heatmap-label\";function cJ(e){return e.selectAll(\"g.\"+fJ)}function oJ(e){cJ(e).remove()}vJ.exports=function(e,r,t,a){var n=r.xaxis,i=r.yaxis;io.makeTraceGroups(a,t,\"hm\").each(function(o){var l=aJ.select(this),s=o[0],u=s.trace,f=u.xgap||0,c=u.ygap||0,v=s.z,d=s.x,p=s.y,y=s.xCenter,m=s.yCenter,b=Tqe.traceIs(u,\"contour\"),T=b?\"best\":u.zsmooth,w=v.length,x=io.maxRowLength(v),_=!1,k=!1,A,q,C,E,P,R,N,I;for(R=0;A===void 0&&R<d.length-1;)A=n.c2p(d[R]),R++;for(R=d.length-1;q===void 0&&R>0;)q=n.c2p(d[R]),R--;for(q<A&&(C=q,q=A,A=C,_=!0),R=0;E===void 0&&R<p.length-1;)E=i.c2p(p[R]),R++;for(R=p.length-1;P===void 0&&R>0;)P=i.c2p(p[R]),R--;P<E&&(C=E,E=P,P=C,k=!0),b&&(y=d,m=p,d=s.xfill,p=s.yfill);var O=\"default\";if(T?O=T===\"best\"?\"smooth\":\"fast\":u._islinear&&f===0&&c===0&&Dqe()&&(O=\"fast\"),O!==\"fast\"){var U=T===\"best\"?0:.5;A=Math.max(-U*n._length,A),q=Math.min((1+U)*n._length,q),E=Math.max(-U*i._length,E),P=Math.min((1+U)*i._length,P)}var Y=Math.round(q-A),G=Math.round(P-E),V=A>=n._length||q<=0||E>=i._length||P<=0;if(V){var W=l.selectAll(\"image\").data([]);W.exit().remove(),oJ(l);return}var j,J;O===\"fast\"?(j=x,J=w):(j=Y,J=G);var te=document.createElement(\"canvas\");te.width=j,te.height=J;var ae=te.getContext(\"2d\",{willReadFrequently:!0}),se=qqe(u,{noNumericCheck:!0,returnArray:!0}),$,fe;O===\"fast\"?($=_?function(ht){return x-1-ht}:io.identity,fe=k?function(ht){return w-1-ht}:io.identity):($=function(ht){return io.constrain(Math.round(n.c2p(d[ht])-A),0,Y)},fe=function(ht){return io.constrain(Math.round(i.c2p(p[ht])-E),0,G)});var ie=fe(0),ue=[ie,ie],ce=_?0:1,oe=k?0:1,be=0,Re=0,ye=0,Ce=0,Me,Le,De,Ne,qe;function Xe(ht,Wa=0){if(ht===void 0)return[0,0,0,0];var Ht=se(ht);return Ht[0]=Math.round(Ht[0]),Ht[1]=Math.round(Ht[1]),Ht[2]=Math.round(Ht[2]),be+=Wa,Re+=Ht[0]*Wa,ye+=Ht[1]*Wa,Ce+=Ht[2]*Wa,Ht}function $e(ht,Wa,Ht,n0){var Pn=ht[Ht.bin0];if(Pn===void 0)return Xe(void 0,1);var mo=ht[Ht.bin1],li=Wa[Ht.bin0],la=Wa[Ht.bin1],i0=mo-Pn||0,ls=li-Pn||0,Rn;return mo===void 0?la===void 0?Rn=0:li===void 0?Rn=2*(la-Pn):Rn=(2*la-li-Pn)*2/3:la===void 0?li===void 0?Rn=0:Rn=(2*Pn-mo-li)*2/3:li===void 0?Rn=(2*la-mo-Pn)*2/3:Rn=la+Pn-mo-li,Xe(Pn+Ht.frac*i0+n0.frac*(ls+Ht.frac*Rn))}if(O!==\"default\"){var We=0,Se;try{Se=new Uint8Array(j*J*4)}catch(ht){Se=new Array(j*J*4)}if(O===\"smooth\"){var Fe=y||d,Qe=m||p,re=new Array(Fe.length),xe=new Array(Qe.length),Ge=new Array(Y),cr=y?sJ:lJ,Pe=m?sJ:lJ,me,Ae,He;for(R=0;R<Fe.length;R++)re[R]=Math.round(n.c2p(Fe[R])-A);for(R=0;R<Qe.length;R++)xe[R]=Math.round(i.c2p(Qe[R])-E);for(R=0;R<Y;R++)Ge[R]=cr(R,re);for(N=0;N<G;N++)for(me=Pe(N,xe),Ae=v[me.bin0],He=v[me.bin1],R=0;R<Y;R++,We+=4)qe=$e(Ae,He,Ge[R],me),uJ(Se,We,qe)}else for(N=0;N<w;N++)for(Ne=v[N],ue=fe(N),R=0;R<x;R++)qe=Xe(Ne[R],1),We=(ue*x+$(R))*4,uJ(Se,We,qe);var Ze=ae.createImageData(j,J);try{Ze.data.set(Se)}catch(ht){var Be=Ze.data,je=Be.length;for(N=0;N<je;N++)Be[N]=Se[N]}ae.putImageData(Ze,0,0)}else{var tr=Math.floor(f/2),ir=Math.floor(c/2);for(N=0;N<w;N++)if(Ne=v[N],ue.reverse(),ue[oe]=fe(N+1),!(ue[0]===ue[1]||ue[0]===void 0||ue[1]===void 0))for(Le=$(0),Me=[Le,Le],R=0;R<x;R++)Me.reverse(),Me[ce]=$(R+1),!(Me[0]===Me[1]||Me[0]===void 0||Me[1]===void 0)&&(De=Ne[R],qe=Xe(De,(Me[1]-Me[0])*(ue[1]-ue[0])),ae.fillStyle=\"rgba(\"+qe.join(\",\")+\")\",ae.fillRect(Me[0]+tr,ue[0]+ir,Me[1]-Me[0]-f,ue[1]-ue[0]-c))}if(be){Re=Math.round(Re/be),ye=Math.round(ye/be),Ce=Math.round(Ce/be);let ht=`rgb(${Re}, ${ye}, ${Ce})`;e._hmpixcount=(e._hmpixcount||0)+be,e._hmlumcount=(e._hmlumcount||0)+be*iJ.luminosity(ht)}var lr=l.selectAll(\"image\").data(o);lr.enter().append(\"svg:image\").attr({xmlns:Lqe.svg,preserveAspectRatio:\"none\"}),lr.attr({height:G,width:Y,x:A,y:E,\"xlink:href\":te.toDataURL(\"image/png\")}),O===\"fast\"&&!T&&lr.attr(\"style\",Eqe),oJ(l);var Ee=u.texttemplate;if(Ee){var Je=Sqe(u),Ie={type:\"linear\",range:[Je.min,Je.max],_separators:n._separators,_numFormat:n._numFormat},pr=u.type===\"histogram2dcontour\",mr=u.type===\"contour\",sr=mr?1:0,yr=mr?w-1:w,ne=mr?1:0,ge=mr?x-1:x,ze=[];for(R=sr;R<yr;R++){var Oe;if(mr)Oe=s.y[R];else if(pr){if(R===0||R===w-1)continue;Oe=s.y[R]}else if(s.yCenter)Oe=s.yCenter[R];else{if(R+1===w&&s.y[R+1]===void 0)continue;Oe=(s.y[R]+s.y[R+1])/2}var Jr=Math.round(i.c2p(Oe));if(!(0>Jr||Jr>i._length))for(N=ne;N<ge;N++){var Kr;if(mr)Kr=s.x[N];else if(pr){if(N===0||N===x-1)continue;Kr=s.x[N]}else if(s.xCenter)Kr=s.xCenter[N];else{if(N+1===x&&s.x[N+1]===void 0)continue;Kr=(s.x[N]+s.x[N+1])/2}var mt=Math.round(n.c2p(Kr));if(!(0>mt||mt>n._length)){var yt=kqe({x:Kr,y:Oe},u,e._fullLayout);yt.x=Kr,yt.y=Oe;var Lt=s.z[R][N];Lt===void 0?(yt.z=\"\",yt.zLabel=\"\"):(yt.z=Lt,yt.zLabel=Mqe.tickText(Ie,Lt,\"hover\").text);var Qt=s.text&&s.text[R]&&s.text[R][N];(Qt===void 0||Qt===!1)&&(Qt=\"\"),yt.text=Qt;var Va=io.texttemplateString({data:[yt,u._meta],fallback:u.texttemplatefallback,labels:yt,locale:e._fullLayout._d3locale,template:Ee});if(Va){var ea=Va.split(\"<br>\"),ja=ea.length,ln=0;for(I=0;I<ja;I++)ln=Math.max(ln,ea[I].length);ze.push({l:ja,c:ln,t:Va,x:mt,y:Jr,z:Lt})}}}}var oa=u.textfont,vr=oa.size,_t=e._fullLayout.font.size;if(!vr||vr===\"auto\"){var Yr=1/0,vt=1/0,Rt=0,Mt=0;for(I=0;I<ze.length;I++){var nt=ze[I];if(Rt=Math.max(Rt,nt.l),Mt=Math.max(Mt,nt.c),I<ze.length-1){var ra=ze[I+1],En=Math.abs(ra.x-nt.x),Vt=Math.abs(ra.y-nt.y);En&&(Yr=Math.min(Yr,En)),Vt&&(vt=Math.min(vt,Vt))}}!isFinite(Yr)||!isFinite(vt)?vr=_t:(Yr-=f,vt-=c,Yr/=Mt,vt/=Rt,Yr/=_9/2,vt/=_9,vr=Math.min(Math.floor(Yr),Math.floor(vt),_t))}if(vr<=0||!isFinite(vr))return;var Ct=function(ht){return ht.x},ta=function(ht){return ht.y-vr*(ht.l*_9/2-1)},aa=cJ(l).data(ze);aa.enter().append(\"g\").classed(fJ,1).append(\"text\").attr(\"text-anchor\",\"middle\").each(function(ht){var Wa=aJ.select(this),Ht=oa.color;(!Ht||Ht===\"auto\")&&(Ht=iJ.contrast(ht.z===void 0?e._fullLayout.plot_bgcolor:`rgba(${se(ht.z).map(Math.round).join()})`)),Wa.attr(\"data-notex\",1).call(nJ.positionText,Ct(ht),ta(ht)).call(Aqe.font,{family:oa.family,size:vr,color:Ht,weight:oa.weight,style:oa.style,variant:oa.variant,textcase:oa.textcase,lineposition:oa.lineposition,shadow:oa.shadow}).text(ht.t).call(nJ.convertToTspans,e)})}})};function lJ(e,r){var t=r.length-2,a=io.constrain(io.findBin(e,r),0,t),n=r[a],i=r[a+1],o=io.constrain(a+(e-n)/(i-n)-.5,0,t),l=Math.round(o),s=Math.abs(o-l);return!o||o===t||!s?{bin0:l,bin1:l,frac:0}:{bin0:l,frac:s,bin1:Math.round(l+s/(o-l))}}function sJ(e,r){var t=r.length-1,a=io.constrain(io.findBin(e,r),0,t),n=r[a],i=r[a+1],o=(e-n)/(i-n)||0;return o<=0?{bin0:a,bin1:a,frac:0}:o<.5?{bin0:a,bin1:a+1,frac:o}:{bin0:a+1,bin1:a,frac:1-o}}function uJ(e,r,t){e[r]=t[0],e[r+1]=t[1],e[r+2]=t[2],e[r+3]=Math.round(t[3]*255)}});var w9=z((mZe,hJ)=>{\"use strict\";hJ.exports={min:\"zmin\",max:\"zmax\"}});var r3=z((yZe,dJ)=>{\"use strict\";var Pqe=Er();dJ.exports=function(r){Pqe.select(r).selectAll(\".hm image\").style(\"opacity\",function(t){return t.trace.opacity})}});var a3=z((gZe,mJ)=>{\"use strict\";var pJ=In(),e2=ke(),t3=e2.isArrayOrTypedArray,Rqe=Gr(),Fqe=rl().extractOpts;mJ.exports=function(r,t,a,n,i){i||(i={});var o=i.isContour,l=r.cd[0],s=l.trace,u=r.xa,f=r.ya,c=l.x,v=l.y,d=l.z,p=l.xCenter,y=l.yCenter,m=l.zmask,b=s.zhoverformat,T=c,w=v,x,_,k,A;if(r.index!==!1){try{k=Math.round(r.index[1]),A=Math.round(r.index[0])}catch(W){e2.error(\"Error hovering on heatmap, pointNumber must be [row,col], found:\",r.index);return}if(k<0||k>=d[0].length||A<0||A>d.length)return}else{if(pJ.inbox(t-c[0],t-c[c.length-1],0)>0||pJ.inbox(a-v[0],a-v[v.length-1],0)>0)return;if(o){var q;for(T=[2*c[0]-c[1]],q=1;q<c.length;q++)T.push((c[q]+c[q-1])/2);for(T.push([2*c[c.length-1]-c[c.length-2]]),w=[2*v[0]-v[1]],q=1;q<v.length;q++)w.push((v[q]+v[q-1])/2);w.push([2*v[v.length-1]-v[v.length-2]])}k=Math.max(0,Math.min(T.length-2,e2.findBin(t,T))),A=Math.max(0,Math.min(w.length-2,e2.findBin(a,w)))}var C=u.c2p(c[k]),E=u.c2p(c[k+1]),P=f.c2p(v[A]),R=f.c2p(v[A+1]),N,I;o?(N=l.orig_x||c,I=l.orig_y||v,E=C,x=N[k],R=P,_=I[A]):(N=l.orig_x||p||c,I=l.orig_y||y||v,x=p?N[k]:(N[k]+N[k+1])/2,_=y?I[A]:(I[A]+I[A+1])/2,u&&u.type===\"category\"&&(x=c[k]),f&&f.type===\"category\"&&(_=v[A]),s.zsmooth&&(C=E=u.c2p(x),P=R=f.c2p(_)));var O=d[A][k];if(m&&!m[A][k]&&(O=void 0),!(O===void 0&&!s.hoverongaps)){var U;t3(l.hovertext)&&t3(l.hovertext[A])?U=l.hovertext[A][k]:t3(l.text)&&t3(l.text[A])&&(U=l.text[A][k]);var Y=Fqe(s),G={type:\"linear\",range:[Y.min,Y.max],hoverformat:b,_separators:u._separators,_numFormat:u._numFormat},V=Rqe.tickText(G,O,\"hover\").text;return[e2.extendFlat(r,{index:s._after2before?s._after2before[A][k]:[A,k],distance:r.maxHoverDistance,spikeDistance:r.maxSpikeDistance,x0:C,x1:E,y0:P,y1:R,xLabelVal:x,yLabelVal:_,zLabelVal:O,zLabel:V,text:U})]}}});var gJ=z((bZe,yJ)=>{\"use strict\";yJ.exports={attributes:Kd(),supplyDefaults:f$(),calc:Jg(),plot:e3(),colorbar:w9(),style:r3(),hoverPoints:a3(),moduleType:\"trace\",name:\"heatmap\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"2dMap\",\"showLegend\"],meta:{}}});var xJ=z((xZe,bJ)=>{\"use strict\";bJ.exports=gJ()});var T9=z((_Ze,_J)=>{\"use strict\";_J.exports=function(r,t){return{start:{valType:\"any\",editType:\"calc\"},end:{valType:\"any\",editType:\"calc\"},size:{valType:\"any\",editType:\"calc\"},editType:\"calc\"}}});var TJ=z((wZe,wJ)=>{\"use strict\";wJ.exports={eventDataKeys:[\"binNumber\"]}});var n3=z((TZe,SJ)=>{\"use strict\";var ai=kf(),AJ=ko().axisHoverFormat,{hovertemplateAttrs:zqe,texttemplateAttrs:Nqe,templatefallbackAttrs:MJ}=fi(),A9=ka(),kJ=T9(),Iqe=TJ(),M9=At().extendFlat;SJ.exports={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},xhoverformat:AJ(\"x\"),yhoverformat:AJ(\"y\"),text:M9({},ai.text,{}),hovertext:M9({},ai.hovertext,{}),orientation:ai.orientation,histfunc:{valType:\"enumerated\",values:[\"count\",\"sum\",\"avg\",\"min\",\"max\"],dflt:\"count\",editType:\"calc\"},histnorm:{valType:\"enumerated\",values:[\"\",\"percent\",\"probability\",\"density\",\"probability density\"],dflt:\"\",editType:\"calc\"},cumulative:{enabled:{valType:\"boolean\",dflt:!1,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"increasing\",\"decreasing\"],dflt:\"increasing\",editType:\"calc\"},currentbin:{valType:\"enumerated\",values:[\"include\",\"exclude\",\"half\"],dflt:\"include\",editType:\"calc\"},editType:\"calc\"},nbinsx:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},xbins:kJ(\"x\",!0),nbinsy:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},ybins:kJ(\"y\",!0),autobinx:{valType:\"boolean\",dflt:null,editType:\"calc\"},autobiny:{valType:\"boolean\",dflt:null,editType:\"calc\"},bingroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertemplate:zqe({},{keys:Iqe.eventDataKeys}),hovertemplatefallback:MJ(),texttemplate:Nqe({arrayOk:!1,editType:\"plot\"},{keys:[\"label\",\"value\"]}),texttemplatefallback:MJ({editType:\"plot\"}),textposition:M9({},ai.textposition,{arrayOk:!1}),textfont:A9({arrayOk:!1,editType:\"plot\",colorEditType:\"style\"}),outsidetextfont:A9({arrayOk:!1,editType:\"plot\",colorEditType:\"style\"}),insidetextfont:A9({arrayOk:!1,editType:\"plot\",colorEditType:\"style\"}),insidetextanchor:ai.insidetextanchor,textangle:ai.textangle,cliponaxis:ai.cliponaxis,constraintext:ai.constraintext,marker:ai.marker,offsetgroup:ai.offsetgroup,alignmentgroup:ai.alignmentgroup,selected:ai.selected,unselected:ai.unselected,zorder:ai.zorder}});var DJ=z((AZe,CJ)=>{\"use strict\";var qJ=Tr(),r2=ke(),LJ=Sr(),Bqe=Sf().handleText,Oqe=I8(),Hqe=n3();CJ.exports=function(r,t,a,n){function i(T,w){return r2.coerce(r,t,Hqe,T,w)}var o=i(\"x\"),l=i(\"y\"),s=i(\"cumulative.enabled\");s&&(i(\"cumulative.direction\"),i(\"cumulative.currentbin\")),i(\"text\");var u=i(\"textposition\");Bqe(r,t,n,i,u,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),i(\"hovertext\"),i(\"hovertemplate\"),i(\"hovertemplatefallback\"),i(\"xhoverformat\"),i(\"yhoverformat\");var f=i(\"orientation\",l&&!o?\"h\":\"v\"),c=f===\"v\"?\"x\":\"y\",v=f===\"v\"?\"y\":\"x\",d=o&&l?Math.min(r2.minRowLength(o)&&r2.minRowLength(l)):r2.minRowLength(t[c]||[]);if(!d){t.visible=!1;return}t._length=d;var p=qJ.getComponentMethod(\"calendars\",\"handleTraceDefaults\");p(r,t,[\"x\",\"y\"],n);var y=t[v];y&&i(\"histfunc\"),i(\"histnorm\"),i(\"autobin\"+c),Oqe(r,t,i,a,n),r2.coerceSelectionMarkerOpacity(t,i);var m=(t.marker.line||{}).color,b=qJ.getComponentMethod(\"errorbars\",\"supplyDefaults\");b(r,t,m||LJ.defaultLine,{axis:\"y\"}),b(r,t,m||LJ.defaultLine,{axis:\"x\",inherit:\"y\"}),i(\"zorder\")}});var o3=z((MZe,RJ)=>{\"use strict\";var t2=ke(),Uqe=ba(),i3=Tr().traceIs,Gqe=kd(),Yqe=Sf().validateCornerradius,EJ=t2.nestedProperty,k9=vf().getAxisGroup,PJ=[{aStr:{x:\"xbins.start\",y:\"ybins.start\"},name:\"start\"},{aStr:{x:\"xbins.end\",y:\"ybins.end\"},name:\"end\"},{aStr:{x:\"xbins.size\",y:\"ybins.size\"},name:\"size\"},{aStr:{x:\"nbinsx\",y:\"nbinsy\"},name:\"nbins\"}],Vqe=[\"x\",\"y\"];RJ.exports=function(r,t){var a=t._histogramBinOpts={},n=[],i={},o=[],l,s,u,f,c,v,d;function p(O,U){return t2.coerce(l._input,l,l._module.attributes,O,U)}function y(O){return O.orientation===\"v\"?\"x\":\"y\"}function m(O,U){var Y=Uqe.getFromTrace({_fullLayout:t},O,U);return Y.type}function b(O,U,Y){var G=O.uid+\"__\"+Y;U||(U=G);var V=m(O,Y),W=O[Y+\"calendar\"]||\"\",j=a[U],J=!0;j&&(V===j.axType&&W===j.calendar?(J=!1,j.traces.push(O),j.dirs.push(Y)):(U=G,V!==j.axType&&t2.warn([\"Attempted to group the bins of trace\",O.index,\"set on a\",\"type:\"+V,\"axis\",\"with bins on\",\"type:\"+j.axType,\"axis.\"].join(\" \")),W!==j.calendar&&t2.warn([\"Attempted to group the bins of trace\",O.index,\"set with a\",W,\"calendar\",\"with bins\",j.calendar?\"on a \"+j.calendar+\" calendar\":\"w/o a set calendar\"].join(\" \")))),J&&(a[U]={traces:[O],dirs:[Y],axType:V,calendar:O[Y+\"calendar\"]||\"\"}),O[\"_\"+Y+\"bingroup\"]=U}for(c=0;c<r.length;c++)if(l=r[c],i3(l,\"histogram\")){if(n.push(l),delete l._xautoBinFinished,delete l._yautoBinFinished,l.type===\"histogram\"){var T=p(\"marker.cornerradius\",t.barcornerradius);l.marker&&(l.marker.cornerradius=Yqe(T))}i3(l,\"2dMap\")||Gqe(l._input,l,t,p,t.barmode)}var w=t._alignmentOpts||{};for(c=0;c<n.length;c++){if(l=n[c],u=\"\",!i3(l,\"2dMap\")){if(f=y(l),t.barmode===\"group\"&&l.alignmentgroup){var x=l[f+\"axis\"],_=k9(t,x)+l.orientation;(w[_]||{})[l.alignmentgroup]&&(u=_)}!u&&t.barmode!==\"overlay\"&&(u=k9(t,l.xaxis)+k9(t,l.yaxis)+y(l))}u?(i[u]||(i[u]=[]),i[u].push(l)):o.push(l)}for(u in i){if(s=i[u],s.length===1){o.push(s[0]);continue}var k=!1;for(s.length&&(l=s[0],k=p(\"bingroup\")),u=k||u,c=0;c<s.length;c++){l=s[c];var A=l._input.bingroup;A&&A!==u&&t2.warn([\"Trace\",l.index,\"must match\",\"within bingroup\",u+\".\",\"Ignoring its bingroup:\",A,\"setting.\"].join(\" \")),l.bingroup=u,b(l,u,y(l))}}for(c=0;c<o.length;c++){l=o[c];var q=p(\"bingroup\");if(i3(l,\"2dMap\"))for(d=0;d<2;d++){f=Vqe[d];var C=p(f+\"bingroup\",q?q+\"__\"+f:null);b(l,C,f)}else b(l,q,y(l))}for(u in a){var E=a[u];for(s=E.traces,v=0;v<PJ.length;v++){var P=PJ[v],R=P.name,N,I;if(!(R===\"nbins\"&&E.sizeFound)){for(c=0;c<s.length;c++){if(l=s[c],f=E.dirs[c],N=P.aStr[f],EJ(l._input,N).get()!==void 0){E[R]=p(N),E[R+\"Found\"]=!0;break}I=(l._autoBin||{})[f]||{},I[R]&&EJ(l,N).set(I[R])}if(R===\"start\"||R===\"end\")for(;c<s.length;c++)l=s[c],l[\"_\"+f+\"bingroup\"]&&(I=(l._autoBin||{})[f]||{},p(N,I[R]));R===\"nbins\"&&!E.sizeFound&&!E.nbinsFound&&(l=s[0],E[R]=p(N))}}}}});var zJ=z((kZe,FJ)=>{\"use strict\";var jqe=j8().hoverPoints,Wqe=Gr().hoverLabelText;FJ.exports=function(r,t,a,n,i){var o=jqe(r,t,a,n,i);if(o){r=o[0];var l=r.cd[r.index],s=r.cd[0].trace;if(!s.cumulative.enabled){var u=s.orientation===\"h\"?\"y\":\"x\";r[u+\"Label\"]=Wqe(r[u+\"a\"],[l.ph0,l.ph1],s[u+\"hoverformat\"])}return o}}});var S9=z((SZe,NJ)=>{\"use strict\";NJ.exports=function(r,t,a,n,i){if(r.x=\"xVal\"in t?t.xVal:t.x,r.y=\"yVal\"in t?t.yVal:t.y,\"zLabelVal\"in t&&(r.z=t.zLabelVal),t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),!(a.cumulative||{}).enabled){var o=Array.isArray(i)?n[0].pts[i[0]][i[1]]:n[i].pts;r.pointNumbers=o,r.binNumber=r.pointNumber,delete r.pointNumber,delete r.pointIndex,r.pointIndices=o}return r}});var BJ=z((qZe,IJ)=>{\"use strict\";IJ.exports={attributes:n3(),layoutAttributes:Fg(),supplyDefaults:DJ(),crossTraceDefaults:o3(),supplyLayoutDefaults:B8(),calc:m9().calc,crossTraceCalc:$y().crossTraceCalc,plot:Y8().plot,layerName:\"barlayer\",style:Hc().style,styleOnSelect:Hc().styleOnSelect,colorbar:Ed(),hoverPoints:zJ(),selectPoints:W8(),eventData:S9(),moduleType:\"trace\",name:\"histogram\",basePlotModule:Qi(),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"histogram\",\"oriented\",\"errorBarsOK\",\"showLegend\"],meta:{}}});var HJ=z((LZe,OJ)=>{\"use strict\";OJ.exports=BJ()});var s3=z((CZe,YJ)=>{\"use strict\";var Uo=n3(),UJ=T9(),l3=Kd(),Xqe=zn(),q9=ko().axisHoverFormat,{hovertemplateAttrs:Zqe,texttemplateAttrs:$qe,templatefallbackAttrs:GJ}=fi(),Jqe=el(),a2=At().extendFlat;YJ.exports=a2({x:Uo.x,y:Uo.y,z:{valType:\"data_array\",editType:\"calc\"},marker:{color:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"},histnorm:Uo.histnorm,histfunc:Uo.histfunc,nbinsx:Uo.nbinsx,xbins:UJ(\"x\"),nbinsy:Uo.nbinsy,ybins:UJ(\"y\"),autobinx:Uo.autobinx,autobiny:Uo.autobiny,bingroup:a2({},Uo.bingroup,{}),xbingroup:a2({},Uo.bingroup,{}),ybingroup:a2({},Uo.bingroup,{}),xgap:l3.xgap,ygap:l3.ygap,zsmooth:l3.zsmooth,xhoverformat:q9(\"x\"),yhoverformat:q9(\"y\"),zhoverformat:q9(\"z\",1),hovertemplate:Zqe({},{keys:[\"z\"]}),hovertemplatefallback:GJ(),texttemplate:$qe({arrayOk:!1,editType:\"plot\"},{keys:[\"z\"]}),texttemplatefallback:GJ({editType:\"plot\"}),textfont:l3.textfont,showlegend:a2({},Xqe.showlegend,{dflt:!1})},Jqe(\"\",{cLetter:\"z\",autoColorDflt:!1}))});var L9=z((DZe,jJ)=>{\"use strict\";var Kqe=Tr(),VJ=ke();jJ.exports=function(r,t,a,n){var i=a(\"x\"),o=a(\"y\"),l=VJ.minRowLength(i),s=VJ.minRowLength(o);if(!l||!s){t.visible=!1;return}t._length=Math.min(l,s);var u=Kqe.getComponentMethod(\"calendars\",\"handleTraceDefaults\");u(r,t,[\"x\",\"y\"],n);var f=a(\"z\")||a(\"marker.color\");f&&a(\"histfunc\"),a(\"histnorm\"),a(\"autobinx\"),a(\"autobiny\")}});var XJ=z((EZe,WJ)=>{\"use strict\";var Qqe=ke(),eLe=L9(),rLe=u9(),tLe=Bl(),aLe=Qd(),nLe=s3();WJ.exports=function(r,t,a,n){function i(o,l){return Qqe.coerce(r,t,nLe,o,l)}eLe(r,t,i,n),t.visible!==!1&&(rLe(r,t,i,n),tLe(r,t,n,i,{prefix:\"\",cLetter:\"z\"}),i(\"hovertemplate\"),i(\"hovertemplatefallback\"),aLe(i,n),i(\"xhoverformat\"),i(\"yhoverformat\"))}});var JJ=z((PZe,$J)=>{\"use strict\";var iLe=a3(),ZJ=Gr().hoverLabelText;$J.exports=function(r,t,a,n,i){var o=iLe(r,t,a,n,i);if(o){r=o[0];var l=r.index,s=l[0],u=l[1],f=r.cd[0],c=f.trace,v=f.xRanges[u],d=f.yRanges[s];return r.xLabel=ZJ(r.xa,[v[0],v[1]],c.xhoverformat),r.yLabel=ZJ(r.ya,[d[0],d[1]],c.yhoverformat),o}}});var QJ=z((RZe,KJ)=>{\"use strict\";KJ.exports={attributes:s3(),supplyDefaults:XJ(),crossTraceDefaults:o3(),calc:Jg(),plot:e3(),layerName:\"heatmaplayer\",colorbar:w9(),style:r3(),hoverPoints:JJ(),eventData:S9(),moduleType:\"trace\",name:\"histogram2d\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"2dMap\",\"histogram\",\"showLegend\"],meta:{}}});var rK=z((FZe,eK)=>{\"use strict\";eK.exports=QJ()});var u3=z((zZe,tK)=>{\"use strict\";tK.exports={COMPARISON_OPS:[\"=\",\"!=\",\"<\",\">=\",\">\",\"<=\"],COMPARISON_OPS2:[\"=\",\"<\",\">=\",\">\",\"<=\"],INTERVAL_OPS:[\"[]\",\"()\",\"[)\",\"(]\",\"][\",\")(\",\"](\",\")[\"],SET_OPS:[\"{}\",\"}{\"],CONSTRAINT_REDUCTION:{\"=\":\"=\",\"<\":\"<\",\"<=\":\"<\",\">\":\">\",\">=\":\">\",\"[]\":\"[]\",\"()\":\"[]\",\"[)\":\"[]\",\"(]\":\"[]\",\"][\":\"][\",\")(\":\"][\",\"](\":\"][\",\")[\":\"][\"}}});var c3=z((NZe,oK)=>{\"use strict\";var ga=Kd(),f3=Vi(),nK=ko(),C9=nK.axisHoverFormat,oLe=nK.descriptionOnlyNumbers,lLe=el(),sLe=Pi().dash,uLe=ka(),Zc=At().extendFlat,iK=u3(),fLe=iK.COMPARISON_OPS2,cLe=iK.INTERVAL_OPS,aK=f3.line;oK.exports=Zc({z:ga.z,x:ga.x,x0:ga.x0,dx:ga.dx,y:ga.y,y0:ga.y0,dy:ga.dy,xperiod:ga.xperiod,yperiod:ga.yperiod,xperiod0:f3.xperiod0,yperiod0:f3.yperiod0,xperiodalignment:ga.xperiodalignment,yperiodalignment:ga.yperiodalignment,text:ga.text,hovertext:ga.hovertext,transpose:ga.transpose,xtype:ga.xtype,ytype:ga.ytype,xhoverformat:C9(\"x\"),yhoverformat:C9(\"y\"),zhoverformat:C9(\"z\",1),hovertemplate:ga.hovertemplate,hovertemplatefallback:ga.hovertemplatefallback,texttemplate:Zc({},ga.texttemplate,{}),texttemplatefallback:ga.texttemplatefallback,textfont:Zc({},ga.textfont,{}),hoverongaps:ga.hoverongaps,connectgaps:Zc({},ga.connectgaps,{}),fillcolor:{valType:\"color\",editType:\"calc\"},autocontour:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"contours.start\":void 0,\"contours.end\":void 0,\"contours.size\":void 0}},ncontours:{valType:\"integer\",dflt:15,min:1,editType:\"calc\"},contours:{type:{valType:\"enumerated\",values:[\"levels\",\"constraint\"],dflt:\"levels\",editType:\"calc\"},start:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},end:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},size:{valType:\"number\",dflt:null,min:0,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},coloring:{valType:\"enumerated\",values:[\"fill\",\"heatmap\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:{valType:\"boolean\",dflt:!0,editType:\"plot\"},showlabels:{valType:\"boolean\",dflt:!1,editType:\"plot\"},labelfont:uLe({editType:\"plot\",colorEditType:\"style\"}),labelformat:{valType:\"string\",dflt:\"\",editType:\"plot\",description:oLe(\"contour label\")},operation:{valType:\"enumerated\",values:[].concat(fLe).concat(cLe),dflt:\"=\",editType:\"calc\"},value:{valType:\"any\",dflt:0,editType:\"calc\"},editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:Zc({},aK.color,{editType:\"style+colorbars\"}),width:{valType:\"number\",min:0,editType:\"style+colorbars\"},dash:sLe,smoothing:Zc({},aK.smoothing,{}),editType:\"plot\"},zorder:f3.zorder},lLe(\"\",{cLetter:\"z\",autoColorDflt:!1,editTypeOverride:\"calc\"}))});var E9=z((IZe,sK)=>{\"use strict\";var hn=s3(),bl=c3(),vLe=el(),D9=ko().axisHoverFormat,lK=At().extendFlat;sK.exports=lK({x:hn.x,y:hn.y,z:hn.z,marker:hn.marker,histnorm:hn.histnorm,histfunc:hn.histfunc,nbinsx:hn.nbinsx,xbins:hn.xbins,nbinsy:hn.nbinsy,ybins:hn.ybins,autobinx:hn.autobinx,autobiny:hn.autobiny,bingroup:hn.bingroup,xbingroup:hn.xbingroup,ybingroup:hn.ybingroup,autocontour:bl.autocontour,ncontours:bl.ncontours,contours:bl.contours,line:{color:bl.line.color,width:lK({},bl.line.width,{dflt:.5}),dash:bl.line.dash,smoothing:bl.line.smoothing,editType:\"plot\"},xhoverformat:D9(\"x\"),yhoverformat:D9(\"y\"),zhoverformat:D9(\"z\",1),hovertemplate:hn.hovertemplate,hovertemplatefallback:hn.hovertemplatefallback,texttemplate:bl.texttemplate,texttemplatefallback:bl.texttemplatefallback,textfont:bl.textfont},vLe(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))});var P9=z((BZe,uK)=>{\"use strict\";uK.exports=function(r,t,a,n){var i=n(\"contours.start\"),o=n(\"contours.end\"),l=i===!1||o===!1,s=a(\"contours.size\"),u;l?u=t.autocontour=!0:u=a(\"autocontour\",!1),(u||!s)&&a(\"ncontours\")}});var R9=z((OZe,fK)=>{\"use strict\";var hLe=ke();fK.exports=function(r,t,a,n){n||(n={});var i=r(\"contours.showlabels\");if(i){var o=t.font;hLe.coerceFont(r,\"contours.labelfont\",o,{overrideDflt:{color:a}}),r(\"contours.labelformat\")}n.hasHover!==!1&&r(\"zhoverformat\")}});var F9=z((HZe,cK)=>{\"use strict\";var dLe=Bl(),pLe=R9();cK.exports=function(r,t,a,n,i){var o=a(\"contours.coloring\"),l,s=\"\";o===\"fill\"&&(l=a(\"contours.showlines\")),l!==!1&&(o!==\"lines\"&&(s=a(\"line.color\",\"#000\")),a(\"line.width\",.5),a(\"line.dash\")),o!==\"none\"&&(r.showlegend!==!0&&(t.showlegend=!1),t._dfltShowLegend=!1,dLe(r,t,n,a,{prefix:\"\",cLetter:\"z\"})),a(\"line.smoothing\"),pLe(a,n,s,i)}});var pK=z((UZe,dK)=>{\"use strict\";var vK=ke(),mLe=L9(),yLe=P9(),gLe=F9(),bLe=Qd(),hK=E9();dK.exports=function(r,t,a,n){function i(l,s){return vK.coerce(r,t,hK,l,s)}function o(l){return vK.coerce2(r,t,hK,l)}mLe(r,t,i,n),t.visible!==!1&&(yLe(r,t,i,o),gLe(r,t,i,n),i(\"xhoverformat\"),i(\"yhoverformat\"),i(\"hovertemplate\"),i(\"hovertemplatefallback\"),t.contours&&t.contours.coloring===\"heatmap\"&&bLe(i,n))}});var gK=z((GZe,yK)=>{\"use strict\";var N9=Gr(),z9=ke();yK.exports=function(r,t){var a=r.contours;if(r.autocontour){var n=r.zmin,i=r.zmax;(r.zauto||n===void 0)&&(n=z9.aggNums(Math.min,null,t)),(r.zauto||i===void 0)&&(i=z9.aggNums(Math.max,null,t));var o=mK(n,i,r.ncontours);a.size=o.dtick,a.start=N9.tickFirst(o),o.range.reverse(),a.end=N9.tickFirst(o),a.start===n&&(a.start+=a.size),a.end===i&&(a.end-=a.size),a.start>a.end&&(a.start=a.end=(a.start+a.end)/2),r._input.contours||(r._input.contours={}),z9.extendFlat(r._input.contours,{start:a.start,end:a.end,size:a.size}),r._input.autocontour=!0}else if(a.type!==\"constraint\"){var l=a.start,s=a.end,u=r._input.contours;if(l>s&&(a.start=u.start=s,s=a.end=u.end=l,l=a.start),!(a.size>0)){var f;l===s?f=1:f=mK(l,s,r.ncontours).dtick,u.size=a.size=f}}};function mK(e,r,t){var a={type:\"linear\",range:[e,r]};return N9.autoTicks(a,(r-e)/(t||15)),a}});var n2=z((YZe,bK)=>{\"use strict\";bK.exports=function(r){return r.end+r.size/1e6}});var I9=z((VZe,_K)=>{\"use strict\";var xK=rl(),xLe=Jg(),_Le=gK(),wLe=n2();_K.exports=function(r,t){var a=xLe(r,t),n=a[0].z;_Le(t,n);var i=t.contours,o=xK.extractOpts(t),l;if(i.coloring===\"heatmap\"&&o.auto&&t.autocontour===!1){var s=i.start,u=wLe(i),f=i.size||1,c=Math.floor((u-s)/f)+1;isFinite(f)||(f=1,c=1);var v=s-f/2,d=v+c*f;l=[v,d]}else l=n;return xK.calc(r,t,{vals:l,cLetter:\"z\"}),a}});var v3=z((jZe,wK)=>{\"use strict\";wK.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}});var AK=z((WZe,TK)=>{\"use strict\";var h3=v3();TK.exports=function(r){var t=r[0].z,a=t.length,n=t[0].length,i=a===2||n===2,o,l,s,u,f,c,v,d,p;for(l=0;l<a-1;l++)for(u=[],l===0&&(u=u.concat(h3.BOTTOMSTART)),l===a-2&&(u=u.concat(h3.TOPSTART)),o=0;o<n-1;o++)for(s=u.slice(),o===0&&(s=s.concat(h3.LEFTSTART)),o===n-2&&(s=s.concat(h3.RIGHTSTART)),f=o+\",\"+l,c=[[t[l][o],t[l][o+1]],[t[l+1][o],t[l+1][o+1]]],p=0;p<r.length;p++)d=r[p],v=TLe(d.level,c),v&&(d.crossings[f]=v,s.indexOf(v)!==-1&&(d.starts.push([o,l]),i&&s.indexOf(v,s.indexOf(v)+1)!==-1&&d.starts.push([o,l])))};function TLe(e,r){var t=(r[0][0]>e?0:1)+(r[0][1]>e?0:2)+(r[1][1]>e?0:4)+(r[1][0]>e?0:8);if(t===5||t===10){var a=(r[0][0]+r[0][1]+r[1][0]+r[1][1])/4;return e>a?t===5?713:1114:t===5?104:208}return t===15?0:t}});var qK=z((XZe,SK)=>{\"use strict\";var d3=ke(),$c=v3();SK.exports=function(r,t,a){var n,i,o,l,s;for(t=t||.01,a=a||.01,o=0;o<r.length;o++){for(l=r[o],s=0;s<l.starts.length;s++)i=l.starts[s],MK(l,i,\"edge\",t,a);for(n=0;Object.keys(l.crossings).length&&n<1e4;)n++,i=Object.keys(l.crossings)[0].split(\",\").map(Number),MK(l,i,void 0,t,a);n===1e4&&d3.log(\"Infinite loop in contour?\")}};function i2(e,r,t,a){return Math.abs(e[0]-r[0])<t&&Math.abs(e[1]-r[1])<a}function ALe(e,r){var t=e[2]-r[2],a=e[3]-r[3];return Math.sqrt(t*t+a*a)}function MK(e,r,t,a,n){var i=r.join(\",\"),o=e.crossings[i],l=MLe(o,t,r),s=[kK(e,r,[-l[0],-l[1]])],u=e.z.length,f=e.z[0].length,c=r.slice(),v=l.slice(),d;for(d=0;d<1e4;d++){if(o>20?(o=$c.CHOOSESADDLE[o][(l[0]||l[1])<0?0:1],e.crossings[i]=$c.SADDLEREMAINDER[o]):delete e.crossings[i],l=$c.NEWDELTA[o],!l){d3.log(\"Found bad marching index:\",o,r,e.level);break}s.push(kK(e,r,l)),r[0]+=l[0],r[1]+=l[1],i=r.join(\",\"),i2(s[s.length-1],s[s.length-2],a,n)&&s.pop();var p=l[0]&&(r[0]<0||r[0]>f-2)||l[1]&&(r[1]<0||r[1]>u-2),y=r[0]===c[0]&&r[1]===c[1]&&l[0]===v[0]&&l[1]===v[1];if(y||t&&p)break;o=e.crossings[i]}d===1e4&&d3.log(\"Infinite loop in contour?\");var m=i2(s[0],s[s.length-1],a,n),b=0,T=.2*e.smoothing,w=[],x=0,_,k,A,q,C,E,P,R,N,I,O;for(d=1;d<s.length;d++)P=ALe(s[d],s[d-1]),b+=P,w.push(P);var U=b/w.length*T;function Y(W){return s[W%s.length]}for(d=s.length-2;d>=x;d--)if(_=w[d],_<U){for(A=0,k=d-1;k>=x&&_+w[k]<U;k--)_+=w[k];if(m&&d===s.length-2)for(A=0;A<k&&_+w[A]<U;A++)_+=w[A];C=d-k+A+1,E=Math.floor((d+k+A+2)/2),!m&&d===s.length-2?q=s[s.length-1]:!m&&k===-1?q=s[0]:C%2?q=Y(E):q=[(Y(E)[0]+Y(E+1)[0])/2,(Y(E)[1]+Y(E+1)[1])/2],s.splice(k+1,d-k+1,q),d=k+1,A&&(x=A),m&&(d===s.length-2?s[A]=s[s.length-1]:d===0&&(s[s.length-1]=s[0]))}for(s.splice(0,x),d=0;d<s.length;d++)s[d].length=2;if(!(s.length<2))if(m)s.pop(),e.paths.push(s);else{t||d3.log(\"Unclosed interior contour?\",e.level,c.join(\",\"),s.join(\"L\"));var G=!1;for(R=0;R<e.edgepaths.length;R++)if(I=e.edgepaths[R],!G&&i2(I[0],s[s.length-1],a,n)){s.pop(),G=!0;var V=!1;for(N=0;N<e.edgepaths.length;N++)if(O=e.edgepaths[N],i2(O[O.length-1],s[0],a,n)){V=!0,s.shift(),e.edgepaths.splice(R,1),N===R?e.paths.push(s.concat(O)):(N>R&&N--,e.edgepaths[N]=O.concat(s,I));break}V||(e.edgepaths[R]=s.concat(I))}for(R=0;R<e.edgepaths.length&&!G;R++)I=e.edgepaths[R],i2(I[I.length-1],s[0],a,n)&&(s.shift(),e.edgepaths[R]=I.concat(s),G=!0);G||e.edgepaths.push(s)}}function MLe(e,r,t){var a=0,n=0;return e>20&&r?e===208||e===1114?a=t[0]===0?1:-1:n=t[1]===0?1:-1:$c.BOTTOMSTART.indexOf(e)!==-1?n=1:$c.LEFTSTART.indexOf(e)!==-1?a=1:$c.TOPSTART.indexOf(e)!==-1?n=-1:a=-1,[a,n]}function kK(e,r,t){var a=r[0]+Math.max(t[0],0),n=r[1]+Math.max(t[1],0),i=e.z[n][a],o=e.xaxis,l=e.yaxis;if(t[1]){var s=(e.level-i)/(e.z[n][a+1]-i),u=(s!==1?(1-s)*o.c2l(e.x[a]):0)+(s!==0?s*o.c2l(e.x[a+1]):0);return[o.c2p(o.l2c(u),!0),l.c2p(e.y[n],!0),a+s,n]}else{var f=(e.level-i)/(e.z[n+1][a]-i),c=(f!==1?(1-f)*l.c2l(e.y[n]):0)+(f!==0?f*l.c2l(e.y[n+1]):0);return[o.c2p(e.x[a],!0),l.c2p(l.l2c(c),!0),a,n+f]}}});var EK=z((ZZe,DK)=>{\"use strict\";var B9=u3(),kLe=Ir();DK.exports={\"[]\":LK(\"[]\"),\"][\":LK(\"][\"),\">\":O9(\">\"),\"<\":O9(\"<\"),\"=\":O9(\"=\")};function CK(e,r){var t=Array.isArray(r),a;function n(i){return kLe(i)?+i:null}return B9.COMPARISON_OPS2.indexOf(e)!==-1?a=n(t?r[0]:r):B9.INTERVAL_OPS.indexOf(e)!==-1?a=t?[n(r[0]),n(r[1])]:[n(r),n(r)]:B9.SET_OPS.indexOf(e)!==-1&&(a=t?r.map(n):[n(r)]),a}function LK(e){return function(r){r=CK(e,r);var t=Math.min(r[0],r[1]),a=Math.max(r[0],r[1]);return{start:t,end:a,size:a-t}}}function O9(e){return function(r){return r=CK(e,r),{start:r,end:1/0,size:1/0}}}});var FK=z(($Ze,RK)=>{\"use strict\";var PK=ke(),SLe=EK(),qLe=n2();RK.exports=function(r,t,a){for(var n=r.type===\"constraint\"?SLe[r._operation](r.value):r,i=n.size,o=[],l=qLe(n),s=a.trace._carpetTrace,u=s?{xaxis:s.aaxis,yaxis:s.baxis,x:a.a,y:a.b}:{xaxis:t.xaxis,yaxis:t.yaxis,x:a.x,y:a.y},f=n.start;f<l;f+=i)if(o.push(PK.extendFlat({level:f,crossings:{},starts:[],edgepaths:[],paths:[],z:a.z,smoothing:a.trace.line.smoothing},u)),o.length>1e3){PK.warn(\"Too many contours, clipping at 1000\",r);break}return o}});var IK=z((JZe,NK)=>{\"use strict\";var Jc=ke();NK.exports=function(e,r){var t,a,n,i=function(s){return s.reverse()},o=function(s){return s};switch(r){case\"=\":case\"<\":return e;case\">\":for(e.length!==1&&Jc.warn(\"Contour data invalid for the specified inequality operation.\"),a=e[0],t=0;t<a.edgepaths.length;t++)a.edgepaths[t]=i(a.edgepaths[t]);for(t=0;t<a.paths.length;t++)a.paths[t]=i(a.paths[t]);for(t=0;t<a.starts.length;t++)a.starts[t]=i(a.starts[t]);return e;case\"][\":var l=i;i=o,o=l;case\"[]\":for(e.length!==2&&Jc.warn(\"Contour data invalid for the specified inequality range operation.\"),a=zK(e[0]),n=zK(e[1]),t=0;t<a.edgepaths.length;t++)a.edgepaths[t]=i(a.edgepaths[t]);for(t=0;t<a.paths.length;t++)a.paths[t]=i(a.paths[t]);for(t=0;t<a.starts.length;t++)a.starts[t]=i(a.starts[t]);for(;n.edgepaths.length;)a.edgepaths.push(o(n.edgepaths.shift()));for(;n.paths.length;)a.paths.push(o(n.paths.shift()));for(;n.starts.length;)a.starts.push(o(n.starts.shift()));return[a]}};function zK(e){return Jc.extendFlat({},e,{edgepaths:Jc.extendDeep([],e.edgepaths),paths:Jc.extendDeep([],e.paths),starts:Jc.extendDeep([],e.starts)})}});var OK=z((KZe,BK)=>{\"use strict\";BK.exports=function(e,r){var t=e[0],a=t.z,n;switch(r.type){case\"levels\":var i=Math.min(a[0][0],a[0][1]);for(n=0;n<e.length;n++){var o=e[n];o.prefixBoundary=!o.edgepaths.length&&(i>o.level||o.starts.length&&i===o.level)}break;case\"constraint\":if(t.prefixBoundary=!1,t.edgepaths.length)return;var l=t.x.length,s=t.y.length,u=-1/0,f=1/0;for(n=0;n<s;n++)f=Math.min(f,a[n][0]),f=Math.min(f,a[n][l-1]),u=Math.max(u,a[n][0]),u=Math.max(u,a[n][l-1]);for(n=1;n<l-1;n++)f=Math.min(f,a[0][n]),f=Math.min(f,a[s-1][n]),u=Math.max(u,a[0][n]),u=Math.max(u,a[s-1][n]);var c=r.value,v,d;switch(r._operation){case\">\":c>u&&(t.prefixBoundary=!0);break;case\"<\":(c<f||t.starts.length&&c===f)&&(t.prefixBoundary=!0);break;case\"[]\":v=Math.min(c[0],c[1]),d=Math.max(c[0],c[1]),(d<f||v>u||t.starts.length&&d===f)&&(t.prefixBoundary=!0);break;case\"][\":v=Math.min(c[0],c[1]),d=Math.max(c[0],c[1]),v<f&&d>u&&(t.prefixBoundary=!0);break}break}}});var H9=z(Dn=>{\"use strict\";var l2=Er(),Ga=ke(),Ql=Zr(),LLe=rl(),GK=Ca(),HK=Gr(),UK=ec(),CLe=e3(),YK=AK(),VK=qK(),DLe=FK(),ELe=IK(),jK=OK(),o2=v3(),xl=o2.LABELOPTIMIZER;Dn.plot=function(r,t,a,n){var i=t.xaxis,o=t.yaxis;Ga.makeTraceGroups(n,a,\"contour\").each(function(l){var s=l2.select(this),u=l[0],f=u.trace,c=u.x,v=u.y,d=f.contours,p=DLe(d,t,u),y=Ga.ensureSingle(s,\"g\",\"heatmapcoloring\"),m=[];d.coloring===\"heatmap\"&&(m=[l]),CLe(r,t,m,y),YK(p),VK(p);var b=i.c2p(c[0],!0),T=i.c2p(c[c.length-1],!0),w=o.c2p(v[0],!0),x=o.c2p(v[v.length-1],!0),_=[[b,x],[T,x],[T,w],[b,w]],k=p;d.type===\"constraint\"&&(k=ELe(p,d._operation)),PLe(s,_,d),RLe(s,k,_,d),FLe(s,p,r,u,d),NLe(s,t,r,u,_)})};function PLe(e,r,t){var a=Ga.ensureSingle(e,\"g\",\"contourbg\"),n=a.selectAll(\"path\").data(t.coloring===\"fill\"?[0]:[]);n.enter().append(\"path\"),n.exit().remove(),n.attr(\"d\",\"M\"+r.join(\"L\")+\"Z\").style(\"stroke\",\"none\")}function RLe(e,r,t,a){var n=a.coloring===\"fill\"||a.type===\"constraint\"&&a._operation!==\"=\",i=\"M\"+t.join(\"L\")+\"Z\";n&&jK(r,a);var o=Ga.ensureSingle(e,\"g\",\"contourfill\"),l=o.selectAll(\"path\").data(n?r:[]);l.enter().append(\"path\"),l.exit().remove(),l.each(function(s){var u=(s.prefixBoundary?i:\"\")+WK(s,t);u?l2.select(this).attr(\"d\",u).style(\"stroke\",\"none\"):l2.select(this).remove()})}function WK(e,r){var t=\"\",a=0,n=e.edgepaths.map(function(b,T){return T}),i=!0,o,l,s,u,f,c;function v(b){return Math.abs(b[1]-r[0][1])<.01}function d(b){return Math.abs(b[1]-r[2][1])<.01}function p(b){return Math.abs(b[0]-r[0][0])<.01}function y(b){return Math.abs(b[0]-r[2][0])<.01}for(;n.length;){for(c=Ql.smoothopen(e.edgepaths[a],e.smoothing),t+=i?c:c.replace(/^M/,\"L\"),n.splice(n.indexOf(a),1),o=e.edgepaths[a][e.edgepaths[a].length-1],u=-1,s=0;s<4;s++){if(!o){Ga.log(\"Missing end?\",a,e);break}for(v(o)&&!y(o)?l=r[1]:p(o)?l=r[0]:d(o)?l=r[3]:y(o)&&(l=r[2]),f=0;f<e.edgepaths.length;f++){var m=e.edgepaths[f][0];Math.abs(o[0]-l[0])<.01?Math.abs(o[0]-m[0])<.01&&(m[1]-o[1])*(l[1]-m[1])>=0&&(l=m,u=f):Math.abs(o[1]-l[1])<.01?Math.abs(o[1]-m[1])<.01&&(m[0]-o[0])*(l[0]-m[0])>=0&&(l=m,u=f):Ga.log(\"endpt to newendpt is not vert. or horz.\",o,l,m)}if(o=l,u>=0)break;t+=\"L\"+l}if(u===e.edgepaths.length){Ga.log(\"unclosed perimeter path\");break}a=u,i=n.indexOf(a)===-1,i&&(a=n[0],t+=\"Z\")}for(a=0;a<e.paths.length;a++)t+=Ql.smoothclosed(e.paths[a],e.smoothing);return t}function FLe(e,r,t,a,n){var i=t._context.staticPlot,o=Ga.ensureSingle(e,\"g\",\"contourlines\"),l=n.showlines!==!1,s=n.showlabels,u=l&&s,f=Dn.createLines(o,l||s,r,i),c=Dn.createLineClip(o,u,t,a.trace.uid),v=e.selectAll(\"g.contourlabels\").data(s?[0]:[]);if(v.exit().remove(),v.enter().append(\"g\").classed(\"contourlabels\",!0),s){var d=[],p=[];Ga.clearLocationCache();var y=Dn.labelFormatter(t,a),m=Ql.tester.append(\"text\").attr(\"data-notex\",1).call(Ql.font,n.labelfont),b=r[0].xaxis,T=r[0].yaxis,w=b._length,x=T._length,_=b.range,k=T.range,A=Ga.aggNums(Math.min,null,a.x),q=Ga.aggNums(Math.max,null,a.x),C=Ga.aggNums(Math.min,null,a.y),E=Ga.aggNums(Math.max,null,a.y),P=Math.max(b.c2p(A,!0),0),R=Math.min(b.c2p(q,!0),w),N=Math.max(T.c2p(E,!0),0),I=Math.min(T.c2p(C,!0),x),O={};_[0]<_[1]?(O.left=P,O.right=R):(O.left=R,O.right=P),k[0]<k[1]?(O.top=N,O.bottom=I):(O.top=I,O.bottom=N),O.middle=(O.top+O.bottom)/2,O.center=(O.left+O.right)/2,d.push([[O.left,O.top],[O.right,O.top],[O.right,O.bottom],[O.left,O.bottom]]);var U=Math.sqrt(w*w+x*x),Y=o2.LABELDISTANCE*U/Math.max(1,r.length/o2.LABELINCREASE);f.each(function(G){var V=Dn.calcTextOpts(G.level,y,m,t);l2.select(this).selectAll(\"path\").each(function(){var W=this,j=Ga.getVisibleSegment(W,O,V.height/2);if(j&&!(j.len<(V.width+V.height)*o2.LABELMIN))for(var J=Math.min(Math.ceil(j.len/Y),o2.LABELMAX),te=0;te<J;te++){var ae=Dn.findBestTextLocation(W,j,V,p,O);if(!ae)break;Dn.addLabelData(ae,V,p,d)}})}),m.remove(),Dn.drawLabels(v,p,t,c,u?d:null)}s&&!l&&f.remove()}Dn.createLines=function(e,r,t,a){var n=t[0].smoothing,i=e.selectAll(\"g.contourlevel\").data(r?t:[]);if(i.exit().remove(),i.enter().append(\"g\").classed(\"contourlevel\",!0),r){var o=i.selectAll(\"path.openline\").data(function(s){return s.pedgepaths||s.edgepaths});o.exit().remove(),o.enter().append(\"path\").classed(\"openline\",!0),o.attr(\"d\",function(s){return Ql.smoothopen(s,n)}).style(\"stroke-miterlimit\",1).style(\"vector-effect\",a?\"none\":\"non-scaling-stroke\");var l=i.selectAll(\"path.closedline\").data(function(s){return s.ppaths||s.paths});l.exit().remove(),l.enter().append(\"path\").classed(\"closedline\",!0),l.attr(\"d\",function(s){return Ql.smoothclosed(s,n)}).style(\"stroke-miterlimit\",1).style(\"vector-effect\",a?\"none\":\"non-scaling-stroke\")}return i};Dn.createLineClip=function(e,r,t,a){var n=t._fullLayout._clips,i=r?\"clipline\"+a:null,o=n.selectAll(\"#\"+i).data(r?[0]:[]);return o.exit().remove(),o.enter().append(\"clipPath\").classed(\"contourlineclip\",!0).attr(\"id\",i),Ql.setClipUrl(e,i,t),o};Dn.labelFormatter=function(e,r){var t=e._fullLayout,a=r.trace,n=a.contours,i={type:\"linear\",_id:\"ycontour\",showexponent:\"all\",exponentformat:\"B\"};if(n.labelformat)i.tickformat=n.labelformat,UK(i,t);else{var o=LLe.extractOpts(a);if(o&&o.colorbar&&o.colorbar._axis)i=o.colorbar._axis;else{if(n.type===\"constraint\"){var l=n.value;Ga.isArrayOrTypedArray(l)?i.range=[l[0],l[l.length-1]]:i.range=[l,l]}else i.range=[n.start,n.end],i.nticks=(n.end-n.start)/n.size;i.range[0]===i.range[1]&&(i.range[1]+=i.range[0]||1),i.nticks||(i.nticks=1e3),UK(i,t),HK.prepTicks(i),i._tmin=null,i._tmax=null}}return function(s){return HK.tickText(i,s).text}};Dn.calcTextOpts=function(e,r,t,a){var n=r(e);t.text(n).call(GK.convertToTspans,a);var i=t.node(),o=Ql.bBox(i,!0);return{text:n,width:o.width,height:o.height,fontSize:+i.style[\"font-size\"].replace(\"px\",\"\"),level:e,dy:(o.top+o.bottom)/2}};Dn.findBestTextLocation=function(e,r,t,a,n){var i=t.width,o,l,s,u,f;r.isClosed?(l=r.len/xl.INITIALSEARCHPOINTS,o=r.min+l/2,s=r.max):(l=(r.len-i)/(xl.INITIALSEARCHPOINTS+1),o=r.min+l+i/2,s=r.max-(l+i)/2);for(var c=1/0,v=0;v<xl.ITERATIONS;v++){for(var d=o;d<s;d+=l){var p=Ga.getTextLocation(e,r.total,d,i),y=zLe(p,t,a,n);y<c&&(c=y,f=p,u=d)}if(c>xl.MAXCOST*2)break;v&&(l/=2),o=u-l/2,s=o+l*1.5}if(c<=xl.MAXCOST)return f};function zLe(e,r,t,a){var n=r.width/2,i=r.height/2,o=e.x,l=e.y,s=e.theta,u=Math.cos(s)*n,f=Math.sin(s)*n,c=(o>a.center?a.right-o:o-a.left)/(u+Math.abs(Math.sin(s)*i)),v=(l>a.middle?a.bottom-l:l-a.top)/(Math.abs(f)+Math.cos(s)*i);if(c<1||v<1)return 1/0;var d=xl.EDGECOST*(1/(c-1)+1/(v-1));d+=xl.ANGLECOST*s*s;for(var p=o-u,y=l-f,m=o+u,b=l+f,T=0;T<t.length;T++){var w=t[T],x=Math.cos(w.theta)*w.width/2,_=Math.sin(w.theta)*w.width/2,k=Ga.segmentDistance(p,y,m,b,w.x-x,w.y-_,w.x+x,w.y+_)*2/(r.height+w.height),A=w.level===r.level,q=A?xl.SAMELEVELDISTANCE:1;if(k<=q)return 1/0;var C=xl.NEIGHBORCOST*(A?xl.SAMELEVELFACTOR:1);d+=C/(k-q)}return d}Dn.addLabelData=function(e,r,t,a){var n=r.fontSize,i=r.width+n/3,o=Math.max(0,r.height-n/3),l=e.x,s=e.y,u=e.theta,f=Math.sin(u),c=Math.cos(u),v=function(p,y){return[l+p*c-y*f,s+p*f+y*c]},d=[v(-i/2,-o/2),v(-i/2,o/2),v(i/2,o/2),v(i/2,-o/2)];t.push({text:r.text,x:l,y:s,dy:r.dy,theta:u,level:r.level,width:i,height:o}),a.push(d)};Dn.drawLabels=function(e,r,t,a,n){var i=e.selectAll(\"text\").data(r,function(u){return u.text+\",\"+u.x+\",\"+u.y+\",\"+u.theta});if(i.exit().remove(),i.enter().append(\"text\").attr({\"data-notex\":1,\"text-anchor\":\"middle\"}).each(function(u){var f=u.x+Math.sin(u.theta)*u.dy,c=u.y-Math.cos(u.theta)*u.dy;l2.select(this).text(u.text).attr({x:f,y:c,transform:\"rotate(\"+180*u.theta/Math.PI+\" \"+f+\" \"+c+\")\"}).call(GK.convertToTspans,t)}),n){for(var o=\"\",l=0;l<n.length;l++)o+=\"M\"+n[l].join(\"L\")+\"Z\";var s=Ga.ensureSingle(a,\"path\",\"\");s.attr(\"d\",o)}};function NLe(e,r,t,a,n){var i=a.trace,o=t._fullLayout._clips,l=\"clip\"+i.uid,s=o.selectAll(\"#\"+l).data(i.connectgaps?[]:[0]);if(s.enter().append(\"clipPath\").classed(\"contourclip\",!0).attr(\"id\",l),s.exit().remove(),i.connectgaps===!1){var u={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:r.xaxis,yaxis:r.yaxis,x:a.x,y:a.y,z:ILe(a),smoothing:0};YK([u]),VK([u]),jK([u],{type:\"levels\"});var f=Ga.ensureSingle(s,\"path\",\"\");f.attr(\"d\",(u.prefixBoundary?\"M\"+n.join(\"L\")+\"Z\":\"\")+WK(u,n))}else l=null;Ql.setClipUrl(e,l,t)}function ILe(e){var r=e.trace._emptypoints,t=[],a=e.z.length,n=e.z[0].length,i,o=[],l;for(i=0;i<n;i++)o.push(1);for(i=0;i<a;i++)t.push(o.slice());for(i=0;i<r.length;i++)l=r[i],t[l[0]][l[1]]=0;return e.zmask=t,t}});var G9=z((e$e,XK)=>{\"use strict\";var BLe=Er(),U9=rl(),OLe=n2();XK.exports=function(r){var t=r.contours,a=t.start,n=OLe(t),i=t.size||1,o=Math.floor((n-a)/i)+1,l=t.coloring===\"lines\"?0:1,s=U9.extractOpts(r);isFinite(i)||(i=1,o=1);var u=s.reversescale?U9.flipScale(s.colorscale):s.colorscale,f=u.length,c=new Array(f),v=new Array(f),d,p,y=s.min,m=s.max;if(t.coloring===\"heatmap\"){for(p=0;p<f;p++)d=u[p],c[p]=d[0]*(m-y)+y,v[p]=d[1];var b=BLe.extent([y,m,t.start,t.start+i*(o-1)]),T=b[y<m?0:1],w=b[y<m?1:0];T!==y&&(c.splice(0,0,T),v.splice(0,0,v[0])),w!==m&&(c.push(w),v.push(v[v.length-1]))}else{var x=r._input&&typeof r._input.zmin==\"number\"&&typeof r._input.zmax==\"number\";for(x&&(a<=y||n>=m)&&(a<=y&&(a=y),n>=m&&(n=m),o=Math.floor((n-a)/i)+1,l=0),p=0;p<f;p++)d=u[p],c[p]=(d[0]*(o+l-1)-l/2)*i+a,v[p]=d[1];(x||r.autocontour)&&(c[0]>y&&(c.unshift(y),v.unshift(v[0])),c[c.length-1]<m&&(c.push(m),v.push(v[v.length-1])))}return U9.makeColorScaleFunc({domain:c,range:v},{noNumericCheck:!0})}});var Y9=z((r$e,$K)=>{\"use strict\";var p3=Er(),ZK=Zr(),HLe=r3(),ULe=G9();$K.exports=function(r){var t=p3.select(r).selectAll(\"g.contour\");t.style(\"opacity\",function(a){return a[0].trace.opacity}),t.each(function(a){var n=p3.select(this),i=a[0].trace,o=i.contours,l=i.line,s=o.size||1,u=o.start,f=o.type===\"constraint\",c=!f&&o.coloring===\"lines\",v=!f&&o.coloring===\"fill\",d=c||v?ULe(i):null;n.selectAll(\"g.contourlevel\").each(function(m){p3.select(this).selectAll(\"path\").call(ZK.lineGroupStyle,l.width,c?d(m.level):l.color,l.dash)});var p=o.labelfont;if(n.selectAll(\"g.contourlabels text\").each(function(m){ZK.font(p3.select(this),{weight:p.weight,style:p.style,variant:p.variant,textcase:p.textcase,lineposition:p.lineposition,shadow:p.shadow,family:p.family,size:p.size,color:p.color||(c?d(m.level):l.color)})}),f)n.selectAll(\"g.contourfill path\").style(\"fill\",i.fillcolor);else if(v){var y;n.selectAll(\"g.contourfill path\").style(\"fill\",function(m){return y===void 0&&(y=m.level),d(m.level+.5*s)}),y===void 0&&(y=u),n.selectAll(\"g.contourbg path\").style(\"fill\",d(y-.5*s))}}),HLe(r)}});var V9=z((t$e,KK)=>{\"use strict\";var JK=rl(),GLe=G9(),YLe=n2();function VLe(e,r,t){var a=r.contours,n=r.line,i=a.size||1,o=a.coloring,l=GLe(r,{isColorbar:!0});if(o===\"heatmap\"){var s=JK.extractOpts(r);t._fillgradient=s.reversescale?JK.flipScale(s.colorscale):s.colorscale,t._zrange=[s.min,s.max]}else o===\"fill\"&&(t._fillcolor=l);t._line={color:o===\"lines\"?l:n.color,width:a.showlines!==!1?n.width:0,dash:n.dash},t._levels={start:a.start,end:YLe(a),size:i}}KK.exports={min:\"zmin\",max:\"zmax\",calc:VLe}});var j9=z((a$e,QK)=>{\"use strict\";var m3=Sr(),jLe=a3();QK.exports=function(r,t,a,n,i){i||(i={}),i.isContour=!0;var o=jLe(r,t,a,n,i);return o&&o.forEach(function(l){var s=l.trace;s.contours.type===\"constraint\"&&(s.fillcolor&&m3.opacity(s.fillcolor)?l.color=m3.addOpacity(s.fillcolor,1):s.contours.showlines&&m3.opacity(s.line.color)&&(l.color=m3.addOpacity(s.line.color,1)))}),o}});var rQ=z((n$e,eQ)=>{\"use strict\";eQ.exports={attributes:E9(),supplyDefaults:pK(),crossTraceDefaults:o3(),calc:I9(),plot:H9().plot,layerName:\"contourlayer\",style:Y9(),colorbar:V9(),hoverPoints:j9(),moduleType:\"trace\",name:\"histogram2dcontour\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"histogram\",\"showLegend\"],meta:{}}});var aQ=z((i$e,tQ)=>{\"use strict\";tQ.exports=rQ()});var fQ=z((o$e,uQ)=>{\"use strict\";var nQ=Ir(),WLe=R9(),lQ=Sr(),iQ=lQ.addOpacity,XLe=lQ.opacity,sQ=u3(),oQ=ke().isArrayOrTypedArray,ZLe=sQ.CONSTRAINT_REDUCTION,$Le=sQ.COMPARISON_OPS2;uQ.exports=function(r,t,a,n,i,o){var l=t.contours,s,u,f,c=a(\"contours.operation\");if(l._operation=ZLe[c],JLe(a,l),c===\"=\"?s=l.showlines=!0:(s=a(\"contours.showlines\"),f=a(\"fillcolor\",iQ((r.line||{}).color||i,.5))),s){var v=f&&XLe(f)?iQ(t.fillcolor,1):i;u=a(\"line.color\",v),a(\"line.width\",2),a(\"line.dash\")}a(\"line.smoothing\"),WLe(a,n,u,o)};function JLe(e,r){var t;$Le.indexOf(r.operation)===-1?(e(\"contours.value\",[0,1]),oQ(r.value)?r.value.length>2?r.value=r.value.slice(2):r.length===0?r.value=[0,1]:r.length<2?(t=parseFloat(r.value[0]),r.value=[t,t+1]):r.value=[parseFloat(r.value[0]),parseFloat(r.value[1])]:nQ(r.value)&&(t=parseFloat(r.value),r.value=[t,t+1])):(e(\"contours.value\",0),nQ(r.value)||(oQ(r.value)?r.value=parseFloat(r.value[0]):r.value=0))}});var hQ=z((l$e,vQ)=>{\"use strict\";var W9=ke(),KLe=s9(),QLe=bc(),eCe=fQ(),rCe=P9(),tCe=F9(),aCe=Qd(),cQ=c3();vQ.exports=function(r,t,a,n){function i(u,f){return W9.coerce(r,t,cQ,u,f)}function o(u){return W9.coerce2(r,t,cQ,u)}var l=KLe(r,t,i,n);if(!l){t.visible=!1;return}QLe(r,t,n,i),i(\"xhoverformat\"),i(\"yhoverformat\"),i(\"text\"),i(\"hovertext\"),i(\"hoverongaps\"),i(\"hovertemplate\"),i(\"hovertemplatefallback\");var s=i(\"contours.type\")===\"constraint\";i(\"connectgaps\",W9.isArray1D(t.z)),s?eCe(r,t,i,n,a):(rCe(r,t,i,o),tCe(r,t,i,n)),t.contours&&t.contours.coloring===\"heatmap\"&&aCe(i,n),i(\"zorder\")}});var pQ=z((s$e,dQ)=>{\"use strict\";dQ.exports={attributes:c3(),supplyDefaults:hQ(),calc:I9(),plot:H9().plot,style:Y9(),colorbar:V9(),hoverPoints:j9(),moduleType:\"trace\",name:\"contour\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"showLegend\"],meta:{}}});var yQ=z((u$e,mQ)=>{\"use strict\";mQ.exports=pQ()});var X9=z((f$e,_Q)=>{\"use strict\";var{hovertemplateAttrs:nCe,texttemplateAttrs:iCe,templatefallbackAttrs:gQ}=fi(),oCe=my(),Si=Vi(),lCe=zn(),bQ=el(),sCe=Pi().dash,Ks=At().extendFlat,oo=Si.marker,s2=Si.line,xQ=oo.line;_Q.exports={a:{valType:\"data_array\",editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},c:{valType:\"data_array\",editType:\"calc\"},sum:{valType:\"number\",dflt:0,min:0,editType:\"calc\"},mode:Ks({},Si.mode,{dflt:\"markers\"}),text:Ks({},Si.text,{}),texttemplate:iCe({editType:\"plot\"},{keys:[\"a\",\"b\",\"c\",\"text\"]}),texttemplatefallback:gQ({editType:\"plot\"}),hovertext:Ks({},Si.hovertext,{}),line:{color:s2.color,width:s2.width,dash:sCe,backoff:s2.backoff,shape:Ks({},s2.shape,{values:[\"linear\",\"spline\"]}),smoothing:s2.smoothing,editType:\"calc\"},connectgaps:Si.connectgaps,cliponaxis:Si.cliponaxis,fill:Ks({},Si.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:oCe(),marker:Ks({symbol:oo.symbol,opacity:oo.opacity,angle:oo.angle,angleref:oo.angleref,standoff:oo.standoff,maxdisplayed:oo.maxdisplayed,size:oo.size,sizeref:oo.sizeref,sizemin:oo.sizemin,sizemode:oo.sizemode,line:Ks({width:xQ.width,dash:xQ.dash,editType:\"calc\"},bQ(\"marker.line\")),gradient:oo.gradient,editType:\"calc\"},bQ(\"marker\")),textfont:Si.textfont,textposition:Si.textposition,selected:Si.selected,unselected:Si.unselected,hoverinfo:Ks({},lCe.hoverinfo,{flags:[\"a\",\"b\",\"c\",\"text\",\"name\"]}),hoveron:Si.hoveron,hovertemplate:nCe(),hovertemplatefallback:gQ()}});var MQ=z((c$e,AQ)=>{\"use strict\";var wQ=ke(),uCe=hd(),Kc=Jn(),fCe=uw(),cCe=fw(),TQ=cw(),vCe=vw(),hCe=hw(),dCe=X9();AQ.exports=function(r,t,a,n){function i(v,d){return wQ.coerce(r,t,dCe,v,d)}var o=i(\"a\"),l=i(\"b\"),s=i(\"c\"),u;if(o?(u=o.length,l?(u=Math.min(u,l.length),s&&(u=Math.min(u,s.length))):s?u=Math.min(u,s.length):u=0):l&&s&&(u=Math.min(l.length,s.length)),!u){t.visible=!1;return}t._length=u,i(\"sum\"),i(\"text\"),i(\"hovertext\"),t.hoveron!==\"fills\"&&(i(\"hovertemplate\"),i(\"hovertemplatefallback\"));var f=u<uCe.PTS_LINESONLY?\"lines+markers\":\"lines\";i(\"mode\",f),Kc.hasMarkers(t)&&fCe(r,t,a,n,i,{gradient:!0}),Kc.hasLines(t)&&(cCe(r,t,a,n,i,{backoff:!0}),TQ(r,t,i),i(\"connectgaps\")),Kc.hasText(t)&&(i(\"texttemplate\"),i(\"texttemplatefallback\"),vCe(r,t,n,i));var c=[];(Kc.hasMarkers(t)||Kc.hasText(t))&&(i(\"cliponaxis\"),i(\"marker.maxdisplayed\"),c.push(\"points\")),i(\"fill\"),t.fill!==\"none\"&&(hCe(r,t,a,i),Kc.hasLines(t)||TQ(r,t,i)),(t.fill===\"tonext\"||t.fill===\"toself\")&&c.push(\"fills\"),i(\"hoveron\",c.join(\"+\")||\"points\"),wQ.coerceSelectionMarkerOpacity(t,i)}});var SQ=z((v$e,kQ)=>{\"use strict\";var Z9=Gr();kQ.exports=function(r,t,a){var n={},i=a[t.subplot]._subplot;return n.aLabel=Z9.tickText(i.aaxis,r.a,!0).text,n.bLabel=Z9.tickText(i.baxis,r.b,!0).text,n.cLabel=Z9.tickText(i.caxis,r.c,!0).text,n}});var DQ=z((h$e,CQ)=>{\"use strict\";var $9=Ir(),pCe=mw(),mCe=Vy(),yCe=jy(),gCe=Wy().calcMarkerSize,qQ=[\"a\",\"b\",\"c\"],LQ={a:[\"b\",\"c\"],b:[\"a\",\"c\"],c:[\"a\",\"b\"]};CQ.exports=function(r,t){var a=r._fullLayout[t.subplot],n=a.sum,i=t.sum||n,o={a:t.a,b:t.b,c:t.c},l=t.ids,s,u,f,c,v,d;for(s=0;s<qQ.length;s++)if(f=qQ[s],!o[f]){for(v=o[LQ[f][0]],d=o[LQ[f][1]],c=new Array(v.length),u=0;u<v.length;u++)c[u]=i-v[u]-d[u];o[f]=c}var p=t._length,y=new Array(p),m,b,T,w,x,_;for(s=0;s<p;s++)m=o.a[s],b=o.b[s],T=o.c[s],$9(m)&&$9(b)&&$9(T)?(m=+m,b=+b,T=+T,w=n/(m+b+T),w!==1&&(m*=w,b*=w,T*=w),_=m,x=T-b,y[s]={x,y:_,a:m,b,c:T},l&&(y[s].id=l[s])):y[s]={x:!1,y:!1};return gCe(t,p),pCe(r,t),mCe(y,t),yCe(y,t),y}});var PQ=z((d$e,EQ)=>{\"use strict\";var bCe=Lw();EQ.exports=function(r,t,a){var n=t.plotContainer;n.select(\".scatterlayer\").selectAll(\"*\").remove();for(var i=t.xaxis,o=t.yaxis,l={xaxis:i,yaxis:o,plot:n,layerClipId:t._hasClipOnAxisFalse?t.clipIdRelative:null},s=t.layers.frontplot.select(\"g.scatterlayer\"),u=0;u<a.length;u++){var f=a[u];f.length&&(f[0].trace._xA=i,f[0].trace._yA=o)}bCe(r,l,a,s)}});var FQ=z((p$e,RQ)=>{\"use strict\";var xCe=Fw();RQ.exports=function(r,t,a,n){var i=xCe(r,t,a,n);if(!i||i[0].index===!1)return;var o=i[0];if(o.index===void 0){var l=1-o.y0/r.ya._length,s=r.xa._length,u=s*l/2,f=s-u;return o.x0=Math.max(Math.min(o.x0,f),u),o.x1=Math.max(Math.min(o.x1,f),u),i}var c=o.cd[o.index],v=o.trace,d=o.subplot;o.a=c.a,o.b=c.b,o.c=c.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var p={};p[v.subplot]={_subplot:d};var y=v._module.formatLabels(c,v,p);o.aLabel=y.aLabel,o.bLabel=y.bLabel,o.cLabel=y.cLabel;var m=c.hi||v.hoverinfo,b=[];function T(x,_){b.push(x._hovertitle+\": \"+_)}if(!v.hovertemplate){var w=m.split(\"+\");w.indexOf(\"all\")!==-1&&(w=[\"a\",\"b\",\"c\"]),w.indexOf(\"a\")!==-1&&T(d.aaxis,o.aLabel),w.indexOf(\"b\")!==-1&&T(d.baxis,o.bLabel),w.indexOf(\"c\")!==-1&&T(d.caxis,o.cLabel)}return o.extraText=b.join(\"<br>\"),o.hovertemplate=v.hovertemplate,i}});var NQ=z((m$e,zQ)=>{\"use strict\";zQ.exports=function(r,t,a,n,i){if(t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),n[i]){var o=n[i];r.a=o.a,r.b=o.b,r.c=o.c}else r.a=t.a,r.b=t.b,r.c=t.c;return r}});var XQ=z((y$e,WQ)=>{\"use strict\";var GQ=Er(),J9=Tr(),es=ke(),_l=es.strTranslate,y3=es._,Ef=Sr(),g3=Zr(),u2=ec(),K9=At().extendFlat,_Ce=va(),Qs=Gr(),IQ=Bi(),BQ=In(),YQ=lf(),OQ=YQ.freeMode,wCe=YQ.rectMode,Q9=Q0(),TCe=dl().prepSelect,ACe=dl().selectOnClick,MCe=dl().clearOutline,kCe=dl().clearSelectionsCache,VQ=qa();function jQ(e,r){this.id=e.id,this.graphDiv=e.graphDiv,this.init(r),this.makeFramework(r),this.updateFx(r),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}WQ.exports=jQ;var wl=jQ.prototype;wl.init=function(e){this.container=e._ternarylayer,this.defs=e._defs,this.layoutId=e._uid,this.traceHash={},this.layers={}};wl.plot=function(e,r){var t=this,a=r[t.id],n=r._size;t._hasClipOnAxisFalse=!1;for(var i=0;i<e.length;i++){var o=e[i][0].trace;if(o.cliponaxis===!1){t._hasClipOnAxisFalse=!0;break}}t.updateLayers(a),t.adjustLayout(a,n),_Ce.generalUpdatePerTraceModule(t.graphDiv,t,e,a),t.layers.plotbg.select(\"path\").call(Ef.fill,a.bgcolor)};wl.makeFramework=function(e){var r=this,t=r.graphDiv,a=e[r.id],n=r.clipId=\"clip\"+r.layoutId+r.id,i=r.clipIdRelative=\"clip-relative\"+r.layoutId+r.id;r.clipDef=es.ensureSingleById(e._clips,\"clipPath\",n,function(o){o.append(\"path\").attr(\"d\",\"M0,0Z\")}),r.clipDefRelative=es.ensureSingleById(e._clips,\"clipPath\",i,function(o){o.append(\"path\").attr(\"d\",\"M0,0Z\")}),r.plotContainer=es.ensureSingle(r.container,\"g\",r.id),r.updateLayers(a),g3.setClipUrl(r.layers.backplot,n,t),g3.setClipUrl(r.layers.grids,n,t)};wl.updateFx=function(e){e._ternarylayer.selectAll(\"g.toplevel\").style(\"cursor\",e.dragmode===\"pan\"?\"move\":\"crosshair\")};wl.updateLayers=function(e){var r=this,t=r.layers,a=[\"draglayer\",\"plotbg\",\"backplot\",\"grids\"];e.aaxis.layer===\"below traces\"&&a.push(\"aaxis\",\"aline\"),e.baxis.layer===\"below traces\"&&a.push(\"baxis\",\"bline\"),e.caxis.layer===\"below traces\"&&a.push(\"caxis\",\"cline\"),a.push(\"frontplot\"),e.aaxis.layer===\"above traces\"&&a.push(\"aaxis\",\"aline\"),e.baxis.layer===\"above traces\"&&a.push(\"baxis\",\"bline\"),e.caxis.layer===\"above traces\"&&a.push(\"caxis\",\"cline\");var n=r.plotContainer.selectAll(\"g.toplevel\").data(a,String),i=[\"agrid\",\"bgrid\",\"cgrid\"];n.enter().append(\"g\").attr(\"class\",function(o){return\"toplevel \"+o}).each(function(o){var l=GQ.select(this);t[o]=l,o===\"frontplot\"?l.append(\"g\").classed(\"scatterlayer\",!0):o===\"backplot\"?l.append(\"g\").classed(\"maplayer\",!0):o===\"plotbg\"?l.append(\"path\").attr(\"d\",\"M0,0Z\"):o===\"aline\"||o===\"bline\"||o===\"cline\"?l.append(\"path\"):o===\"grids\"&&i.forEach(function(s){t[s]=l.append(\"g\").classed(\"grid \"+s,!0)})}),n.order()};var Qc=Math.sqrt(4/3);wl.adjustLayout=function(e,r){var t=this,a=e.domain,n=(a.x[0]+a.x[1])/2,i=(a.y[0]+a.y[1])/2,o=a.x[1]-a.x[0],l=a.y[1]-a.y[0],s=o*r.w,u=l*r.h,f=e.sum,c=e.aaxis.min,v=e.baxis.min,d=e.caxis.min,p,y,m,b,T,w;s>Qc*u?(b=u,m=b*Qc):(m=s,b=m/Qc),T=o*m/s,w=l*b/u,p=r.l+r.w*n-m/2,y=r.t+r.h*(1-i)-b/2,t.x0=p,t.y0=y,t.w=m,t.h=b,t.sum=f,t.xaxis={type:\"linear\",range:[c+2*d-f,f-c-2*v],domain:[n-T/2,n+T/2],_id:\"x\"},u2(t.xaxis,t.graphDiv._fullLayout),t.xaxis.setScale(),t.xaxis.isPtWithinRange=function(I){return I.a>=t.aaxis.range[0]&&I.a<=t.aaxis.range[1]&&I.b>=t.baxis.range[1]&&I.b<=t.baxis.range[0]&&I.c>=t.caxis.range[1]&&I.c<=t.caxis.range[0]},t.yaxis={type:\"linear\",range:[c,f-v-d],domain:[i-w/2,i+w/2],_id:\"y\"},u2(t.yaxis,t.graphDiv._fullLayout),t.yaxis.setScale(),t.yaxis.isPtWithinRange=function(){return!0};var x=t.yaxis.domain[0],_=t.aaxis=K9({},e.aaxis,{range:[c,f-v-d],side:\"left\",tickangle:(+e.aaxis.tickangle||0)-30,domain:[x,x+w*Qc],anchor:\"free\",position:0,_id:\"y\",_length:m});u2(_,t.graphDiv._fullLayout),_.setScale();var k=t.baxis=K9({},e.baxis,{range:[f-c-d,v],side:\"bottom\",domain:t.xaxis.domain,anchor:\"free\",position:0,_id:\"x\",_length:m});u2(k,t.graphDiv._fullLayout),k.setScale();var A=t.caxis=K9({},e.caxis,{range:[f-c-v,d],side:\"right\",tickangle:(+e.caxis.tickangle||0)+30,domain:[x,x+w*Qc],anchor:\"free\",position:0,_id:\"y\",_length:m});u2(A,t.graphDiv._fullLayout),A.setScale();var q=\"M\"+p+\",\"+(y+b)+\"h\"+m+\"l-\"+m/2+\",-\"+b+\"Z\";t.clipDef.select(\"path\").attr(\"d\",q),t.layers.plotbg.select(\"path\").attr(\"d\",q);var C=\"M0,\"+b+\"h\"+m+\"l-\"+m/2+\",-\"+b+\"Z\";t.clipDefRelative.select(\"path\").attr(\"d\",C);var E=_l(p,y);t.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",E),t.clipDefRelative.select(\"path\").attr(\"transform\",null);var P=_l(p-k._offset,y+b);t.layers.baxis.attr(\"transform\",P),t.layers.bgrid.attr(\"transform\",P);var R=_l(p+m/2,y)+\"rotate(30)\"+_l(0,-_._offset);t.layers.aaxis.attr(\"transform\",R),t.layers.agrid.attr(\"transform\",R);var N=_l(p+m/2,y)+\"rotate(-30)\"+_l(0,-A._offset);t.layers.caxis.attr(\"transform\",N),t.layers.cgrid.attr(\"transform\",N),t.drawAxes(!0),t.layers.aline.select(\"path\").attr(\"d\",_.showline?\"M\"+p+\",\"+(y+b)+\"l\"+m/2+\",-\"+b:\"M0,0\").call(Ef.stroke,_.linecolor||\"#000\").style(\"stroke-width\",(_.linewidth||0)+\"px\"),t.layers.bline.select(\"path\").attr(\"d\",k.showline?\"M\"+p+\",\"+(y+b)+\"h\"+m:\"M0,0\").call(Ef.stroke,k.linecolor||\"#000\").style(\"stroke-width\",(k.linewidth||0)+\"px\"),t.layers.cline.select(\"path\").attr(\"d\",A.showline?\"M\"+(p+m/2)+\",\"+y+\"l\"+m/2+\",\"+b:\"M0,0\").call(Ef.stroke,A.linecolor||\"#000\").style(\"stroke-width\",(A.linewidth||0)+\"px\"),t.graphDiv._context.staticPlot||t.initInteractions(),g3.setClipUrl(t.layers.frontplot,t._hasClipOnAxisFalse?null:t.clipId,t.graphDiv)};wl.drawAxes=function(e){var r=this,t=r.graphDiv,a=r.id.slice(7)+\"title\",n=r.layers,i=r.aaxis,o=r.baxis,l=r.caxis;if(r.drawAx(i),r.drawAx(o),r.drawAx(l),e){var s=Math.max(i.showticklabels?i.tickfont.size/2:0,(l.showticklabels?l.tickfont.size*.75:0)+(l.ticks===\"outside\"?l.ticklen*.87:0)),u=(o.showticklabels?o.tickfont.size:0)+(o.ticks===\"outside\"?o.ticklen:0)+3;n[\"a-title\"]=Q9.draw(t,\"a\"+a,{propContainer:i,propName:r.id+\".aaxis.title.text\",placeholder:y3(t,\"Click to enter Component A title\"),attributes:{x:r.x0+r.w/2,y:r.y0-i.title.font.size/3-s,\"text-anchor\":\"middle\"}}),n[\"b-title\"]=Q9.draw(t,\"b\"+a,{propContainer:o,propName:r.id+\".baxis.title.text\",placeholder:y3(t,\"Click to enter Component B title\"),attributes:{x:r.x0-u,y:r.y0+r.h+o.title.font.size*.83+u,\"text-anchor\":\"middle\"}}),n[\"c-title\"]=Q9.draw(t,\"c\"+a,{propContainer:l,propName:r.id+\".caxis.title.text\",placeholder:y3(t,\"Click to enter Component C title\"),attributes:{x:r.x0+r.w+u,y:r.y0+r.h+l.title.font.size*.83+u,\"text-anchor\":\"middle\"}})}};wl.drawAx=function(e){var r=this,t=r.graphDiv,a=e._name,n=a.charAt(0),i=e._id,o=r.layers[a],l=30,s=n+\"tickLayout\",u=SCe(e);r[s]!==u&&(o.selectAll(\".\"+i+\"tick\").remove(),r[s]=u),e.setScale();var f=Qs.calcTicks(e),c=Qs.clipEnds(e,f),v=Qs.makeTransTickFn(e),d=Qs.getTickSigns(e)[2],p=es.deg2rad(l),y=d*(e.linewidth||1)/2,m=d*e.ticklen,b=r.w,T=r.h,w=n===\"b\"?\"M0,\"+y+\"l\"+Math.sin(p)*m+\",\"+Math.cos(p)*m:\"M\"+y+\",0l\"+Math.cos(p)*m+\",\"+-Math.sin(p)*m,x={a:\"M0,0l\"+T+\",-\"+b/2,b:\"M0,0l-\"+b/2+\",-\"+T,c:\"M0,0l-\"+T+\",\"+b/2}[n];Qs.drawTicks(t,e,{vals:e.ticks===\"inside\"?c:f,layer:o,path:w,transFn:v,crisp:!1}),Qs.drawGrid(t,e,{vals:c,layer:r.layers[n+\"grid\"],path:x,transFn:v,crisp:!1}),Qs.drawLabels(t,e,{vals:f,layer:o,transFn:v,labelFns:Qs.makeLabelFns(e,0,l)})};function SCe(e){return e.ticks+String(e.ticklen)+String(e.showticklabels)}var Ba=VQ.MINZOOM/2+.87,qCe=\"m-0.87,.5h\"+Ba+\"v3h-\"+(Ba+5.2)+\"l\"+(Ba/2+2.6)+\",-\"+(Ba*.87+4.5)+\"l2.6,1.5l-\"+Ba/2+\",\"+Ba*.87+\"Z\",LCe=\"m0.87,.5h-\"+Ba+\"v3h\"+(Ba+5.2)+\"l-\"+(Ba/2+2.6)+\",-\"+(Ba*.87+4.5)+\"l-2.6,1.5l\"+Ba/2+\",\"+Ba*.87+\"Z\",CCe=\"m0,1l\"+Ba/2+\",\"+Ba*.87+\"l2.6,-1.5l-\"+(Ba/2+2.6)+\",-\"+(Ba*.87+4.5)+\"l-\"+(Ba/2+2.6)+\",\"+(Ba*.87+4.5)+\"l2.6,1.5l\"+Ba/2+\",-\"+Ba*.87+\"Z\",DCe=\"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z\",HQ=!0;wl.clearOutline=function(){kCe(this.dragOptions),MCe(this.dragOptions.gd)};wl.initInteractions=function(){var e=this,r=e.layers.plotbg.select(\"path\").node(),t=e.graphDiv,a=t._fullLayout._zoomlayer,n,i;this.dragOptions={element:r,gd:t,plotinfo:{id:e.id,domain:t._fullLayout[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis},subplot:e.id,prepFn:function(P,R,N){e.dragOptions.xaxes=[e.xaxis],e.dragOptions.yaxes=[e.yaxis],n=t._fullLayout._invScaleX,i=t._fullLayout._invScaleY;var I=e.dragOptions.dragmode=t._fullLayout.dragmode;OQ(I)?e.dragOptions.minDrag=1:e.dragOptions.minDrag=void 0,I===\"zoom\"?(e.dragOptions.moveFn=k,e.dragOptions.clickFn=b,e.dragOptions.doneFn=A,T(P,R,N)):I===\"pan\"?(e.dragOptions.moveFn=C,e.dragOptions.clickFn=b,e.dragOptions.doneFn=E,q(),e.clearOutline(t)):(wCe(I)||OQ(I))&&TCe(P,R,N,e.dragOptions,I)}};var o,l,s,u,f,c,v,d,p,y;function m(P){var R={};return R[e.id+\".aaxis.min\"]=P.a,R[e.id+\".baxis.min\"]=P.b,R[e.id+\".caxis.min\"]=P.c,R}function b(P,R){var N=t._fullLayout.clickmode;UQ(t),P===2&&(t.emit(\"plotly_doubleclick\",null),J9.call(\"_guiRelayout\",t,m({a:0,b:0,c:0}))),N.indexOf(\"select\")>-1&&P===1&&ACe(R,t,[e.xaxis],[e.yaxis],e.id,e.dragOptions),N.indexOf(\"event\")>-1&&BQ.click(t,R,e.id)}function T(P,R,N){var I=r.getBoundingClientRect();o=R-I.left,l=N-I.top,t._fullLayout._calcInverseTransform(t);var O=t._fullLayout._invTransform,U=es.apply3DTransform(O)(o,l);o=U[0],l=U[1],s={a:e.aaxis.range[0],b:e.baxis.range[1],c:e.caxis.range[1]},f=s,u=e.aaxis.range[1]-s.a,c=Ef.luminosity(e.graphDiv._fullLayout[e.id].bgcolor),v=\"M0,\"+e.h+\"L\"+e.w/2+\", 0L\"+e.w+\",\"+e.h+\"Z\",d=!1,p=a.append(\"path\").attr(\"class\",\"zoombox\").attr(\"transform\",_l(e.x0,e.y0)).style({fill:c>.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"d\",v),y=a.append(\"path\").attr(\"class\",\"zoombox-corners\").attr(\"transform\",_l(e.x0,e.y0)).style({fill:Ef.background,stroke:Ef.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"d\",\"M0,0Z\"),e.clearOutline(t)}function w(P,R){return 1-R/e.h}function x(P,R){return 1-(P+(e.h-R)/Math.sqrt(3))/e.w}function _(P,R){return(P-(e.h-R)/Math.sqrt(3))/e.w}function k(P,R){var N=o+P*n,I=l+R*i,O=Math.max(0,Math.min(1,w(o,l),w(N,I))),U=Math.max(0,Math.min(1,x(o,l),x(N,I))),Y=Math.max(0,Math.min(1,_(o,l),_(N,I))),G=(O/2+Y)*e.w,V=(1-O/2-U)*e.w,W=(G+V)/2,j=V-G,J=(1-O)*e.h,te=J-j/Qc;j<VQ.MINZOOM?(f=s,p.attr(\"d\",v),y.attr(\"d\",\"M0,0Z\")):(f={a:s.a+O*u,b:s.b+U*u,c:s.c+Y*u},p.attr(\"d\",v+\"M\"+G+\",\"+J+\"H\"+V+\"L\"+W+\",\"+te+\"L\"+G+\",\"+J+\"Z\"),y.attr(\"d\",\"M\"+o+\",\"+l+DCe+\"M\"+G+\",\"+J+qCe+\"M\"+V+\",\"+J+LCe+\"M\"+W+\",\"+te+CCe)),d||(p.transition().style(\"fill\",c>.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),y.transition().style(\"opacity\",1).duration(200),d=!0),t.emit(\"plotly_relayouting\",m(f))}function A(){UQ(t),f!==s&&(J9.call(\"_guiRelayout\",t,m(f)),HQ&&t.data&&t._context.showTips&&(es.notifier(y3(t,\"Double-click to zoom back out\"),\"long\",t),HQ=!1))}function q(){s={a:e.aaxis.range[0],b:e.baxis.range[1],c:e.caxis.range[1]},f=s}function C(P,R){var N=P/e.xaxis._m,I=R/e.yaxis._m;f={a:s.a-I,b:s.b+(N+I)/2,c:s.c-(N-I)/2};var O=[f.a,f.b,f.c].sort(es.sorterAsc),U={a:O.indexOf(f.a),b:O.indexOf(f.b),c:O.indexOf(f.c)};O[0]<0&&(O[1]+O[0]/2<0?(O[2]+=O[0]+O[1],O[0]=O[1]=0):(O[2]+=O[0]/2,O[1]+=O[0]/2,O[0]=0),f={a:O[U.a],b:O[U.b],c:O[U.c]},R=(s.a-f.a)*e.yaxis._m,P=(s.c-f.c-s.b+f.b)*e.xaxis._m);var Y=_l(e.x0+P,e.y0+R);e.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",Y);var G=_l(-P,-R);e.clipDefRelative.select(\"path\").attr(\"transform\",G),e.aaxis.range=[f.a,e.sum-f.b-f.c],e.baxis.range=[e.sum-f.a-f.c,f.b],e.caxis.range=[e.sum-f.a-f.b,f.c],e.drawAxes(!1),e._hasClipOnAxisFalse&&e.plotContainer.select(\".scatterlayer\").selectAll(\".trace\").call(g3.hideOutsideRangePoints,e),t.emit(\"plotly_relayouting\",m(f))}function E(){J9.call(\"_guiRelayout\",t,m(f))}r.onmousemove=function(P){BQ.hover(t,P,e.id),t._fullLayout._lasthover=r,t._fullLayout._hoversubplot=e.id},r.onmouseout=function(P){t._dragging||IQ.unhover(t,P)},IQ.init(this.dragOptions)};function UQ(e){GQ.select(e).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}});var tT=z((g$e,ZQ)=>{\"use strict\";var ECe=Ei(),PCe=zc().attributes,lt=Ni(),RCe=wo().overrideAll,eT=At().extendFlat,rT={title:{text:lt.title.text,font:lt.title.font},color:lt.color,tickmode:lt.minor.tickmode,nticks:eT({},lt.nticks,{dflt:6,min:1}),tick0:lt.tick0,dtick:lt.dtick,tickvals:lt.tickvals,ticktext:lt.ticktext,ticks:lt.ticks,ticklen:lt.ticklen,tickwidth:lt.tickwidth,tickcolor:lt.tickcolor,ticklabelstep:lt.ticklabelstep,showticklabels:lt.showticklabels,labelalias:lt.labelalias,showtickprefix:lt.showtickprefix,tickprefix:lt.tickprefix,showticksuffix:lt.showticksuffix,ticksuffix:lt.ticksuffix,showexponent:lt.showexponent,exponentformat:lt.exponentformat,minexponent:lt.minexponent,separatethousands:lt.separatethousands,tickfont:lt.tickfont,tickangle:lt.tickangle,tickformat:lt.tickformat,tickformatstops:lt.tickformatstops,hoverformat:lt.hoverformat,showline:eT({},lt.showline,{dflt:!0}),linecolor:lt.linecolor,linewidth:lt.linewidth,showgrid:eT({},lt.showgrid,{dflt:!0}),gridcolor:lt.gridcolor,gridwidth:lt.gridwidth,griddash:lt.griddash,layer:lt.layer,min:{valType:\"number\",dflt:0,min:0}},b3=ZQ.exports=RCe({domain:PCe({name:\"ternary\"}),bgcolor:{valType:\"color\",dflt:ECe.background},sum:{valType:\"number\",dflt:1,min:0},aaxis:rT,baxis:rT,caxis:rT},\"plot\",\"from-root\");b3.uirevision={valType:\"any\",editType:\"none\"};b3.aaxis.uirevision=b3.baxis.uirevision=b3.caxis.uirevision={valType:\"any\",editType:\"none\"}});var JQ=z((b$e,$Q)=>{\"use strict\";var FCe=ke(),zCe=St(),NCe=zc().defaults;$Q.exports=function(r,t,a,n){var i=n.type,o=n.attributes,l=n.handleDefaults,s=n.partition||\"x\",u=t._subplots[i],f=u.length,c=f&&u[0].replace(/\\d+$/,\"\"),v,d;function p(T,w){return FCe.coerce(v,d,o,T,w)}for(var y=0;y<f;y++){var m=u[y];r[m]?v=r[m]:v=r[m]={},d=zCe.newContainer(t,m,c),n.noUirevision||p(\"uirevision\",t.uirevision);var b={};b[s]=[y/f,(y+1)/f],NCe(d,t,p,b),n.id=m,l(v,d,p,n)}}});var ree=z((x$e,eee)=>{\"use strict\";var ICe=Sr(),BCe=St(),x3=ke(),OCe=JQ(),HCe=Wp(),UCe=Xp(),GCe=Vp(),YCe=Yp(),VCe=Iw(),QQ=tT(),KQ=[\"aaxis\",\"baxis\",\"caxis\"];eee.exports=function(r,t,a){OCe(r,t,a,{type:\"ternary\",attributes:QQ,handleDefaults:jCe,font:t.font,paper_bgcolor:t.paper_bgcolor})};function jCe(e,r,t,a){var n=t(\"bgcolor\"),i=t(\"sum\");a.bgColor=ICe.combine(n,a.paper_bgcolor);for(var o,l,s,u=0;u<KQ.length;u++)o=KQ[u],l=e[o]||{},s=BCe.newContainer(r,o),s._name=o,WCe(l,s,a,r);var f=r.aaxis,c=r.baxis,v=r.caxis;f.min+c.min+v.min>=i&&(f.min=0,c.min=0,v.min=0,e.aaxis&&delete e.aaxis.min,e.baxis&&delete e.baxis.min,e.caxis&&delete e.caxis.min)}function WCe(e,r,t,a){var n=QQ[r._name];function i(d,p){return x3.coerce(e,r,n,d,p)}i(\"uirevision\",a.uirevision),r.type=\"linear\";var o=i(\"color\"),l=o!==n.color.dflt?o:t.font.color,s=r._name,u=s.charAt(0).toUpperCase(),f=\"Component \"+u,c=i(\"title.text\",f);r._hovertitle=c===f?c:u,x3.coerceFont(i,\"title.font\",t.font,{overrideDflt:{size:x3.bigFont(t.font.size),color:l}}),i(\"min\"),YCe(e,r,i,\"linear\"),UCe(e,r,i,\"linear\"),HCe(e,r,i,\"linear\",{noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0}),GCe(e,r,i,{outerTicks:!0});var v=i(\"showticklabels\");v&&(x3.coerceFont(i,\"tickfont\",t.font,{overrideDflt:{color:l}}),i(\"tickangle\"),i(\"tickformat\")),VCe(e,r,i,{dfltColor:o,bgColor:t.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:n}),i(\"hoverformat\"),i(\"layer\")}});var tee=z(lo=>{\"use strict\";var XCe=XQ(),ZCe=Np().getSubplotCalcData,$Ce=ke().counterRegex,ev=\"ternary\";lo.name=ev;var JCe=lo.attr=\"subplot\";lo.idRoot=ev;lo.idRegex=lo.attrRegex=$Ce(ev);var KCe=lo.attributes={};KCe[JCe]={valType:\"subplotid\",dflt:\"ternary\",editType:\"calc\"};lo.layoutAttributes=tT();lo.supplyLayoutDefaults=ree();lo.plot=function(r){for(var t=r._fullLayout,a=r.calcdata,n=t._subplots[ev],i=0;i<n.length;i++){var o=n[i],l=ZCe(a,ev,o),s=t[o]._subplot;s||(s=new XCe({id:o,graphDiv:r,container:t._ternarylayer.node()},t),t[o]._subplot=s),s.plot(l,t,r._promises)}};lo.clean=function(e,r,t,a){for(var n=a._subplots[ev]||[],i=0;i<n.length;i++){var o=n[i],l=a[o]._subplot;!r[o]&&l&&(l.plotContainer.remove(),l.clipDef.remove(),l.clipDefRelative.remove(),l.layers[\"a-title\"].remove(),l.layers[\"b-title\"].remove(),l.layers[\"c-title\"].remove())}};lo.updateFx=function(e){var r=e._fullLayout;r._ternarylayer.selectAll(\"g.toplevel\").style(\"cursor\",r.dragmode===\"pan\"?\"move\":\"crosshair\")}});var nee=z((w$e,aee)=>{\"use strict\";aee.exports={attributes:X9(),supplyDefaults:MQ(),colorbar:Ed(),formatLabels:SQ(),calc:DQ(),plot:PQ(),style:mf().style,styleOnSelect:mf().styleOnSelect,hoverPoints:FQ(),selectPoints:zw(),eventData:NQ(),moduleType:\"trace\",name:\"scatterternary\",basePlotModule:tee(),categories:[\"ternary\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}});var oee=z((T$e,iee)=>{\"use strict\";iee.exports=nee()});var aT=z((A$e,see)=>{\"use strict\";var wa=Ug(),rv=At().extendFlat,lee=ko().axisHoverFormat;see.exports={y:wa.y,x:wa.x,x0:wa.x0,y0:wa.y0,xhoverformat:lee(\"x\"),yhoverformat:lee(\"y\"),name:rv({},wa.name,{}),orientation:rv({},wa.orientation,{}),bandwidth:{valType:\"number\",min:0,editType:\"calc\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},scalemode:{valType:\"enumerated\",values:[\"width\",\"count\"],dflt:\"width\",editType:\"calc\"},spanmode:{valType:\"enumerated\",values:[\"soft\",\"hard\",\"manual\"],dflt:\"soft\",editType:\"calc\"},span:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:wa.fillcolor,points:rv({},wa.boxpoints,{}),jitter:rv({},wa.jitter,{}),pointpos:rv({},wa.pointpos,{}),width:rv({},wa.width,{}),marker:wa.marker,text:wa.text,hovertext:wa.hovertext,hovertemplate:wa.hovertemplate,hovertemplatefallback:wa.hovertemplatefallback,quartilemethod:wa.quartilemethod,box:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},width:{valType:\"number\",min:0,max:1,dflt:.25,editType:\"plot\"},fillcolor:{valType:\"color\",editType:\"style\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},editType:\"plot\"},meanline:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"plot\"},side:{valType:\"enumerated\",values:[\"both\",\"positive\",\"negative\"],dflt:\"both\",editType:\"calc\"},offsetgroup:wa.offsetgroup,alignmentgroup:wa.alignmentgroup,selected:wa.selected,unselected:wa.unselected,hoveron:{valType:\"flaglist\",flags:[\"violins\",\"points\",\"kde\"],dflt:\"violins+points+kde\",extras:[\"all\"],editType:\"style\"},zorder:wa.zorder}});var oT=z((M$e,uee)=>{\"use strict\";var nT=Gg(),iT=ke().extendFlat;uee.exports={violinmode:iT({},nT.boxmode,{}),violingap:iT({},nT.boxgap,{}),violingroupgap:iT({},nT.boxgroupgap,{})}});var dee=z((k$e,hee)=>{\"use strict\";var fee=ke(),QCe=Sr(),cee=Jd(),vee=aT();hee.exports=function(r,t,a,n){function i(_,k){return fee.coerce(r,t,vee,_,k)}function o(_,k){return fee.coerce2(r,t,vee,_,k)}if(cee.handleSampleDefaults(r,t,i,n),t.visible!==!1){i(\"bandwidth\"),i(\"side\");var l=i(\"width\");l||(i(\"scalegroup\",t.name),i(\"scalemode\"));var s=i(\"span\"),u;Array.isArray(s)&&(u=\"manual\"),i(\"spanmode\",u);var f=i(\"line.color\",(r.marker||{}).color||a),c=i(\"line.width\"),v=i(\"fillcolor\",QCe.addOpacity(t.line.color,.5));cee.handlePointsDefaults(r,t,i,{prefix:\"\"});var d=o(\"box.width\"),p=o(\"box.fillcolor\",v),y=o(\"box.line.color\",f),m=o(\"box.line.width\",c),b=i(\"box.visible\",!!(d||p||y||m));b||(t.box={visible:!1});var T=o(\"meanline.color\",f),w=o(\"meanline.width\",c),x=i(\"meanline.visible\",!!(T||w));x||(t.meanline={visible:!1}),i(\"quartilemethod\"),i(\"zorder\")}}});var mee=z((S$e,pee)=>{\"use strict\";var eDe=ke(),rDe=oT(),tDe=X8();pee.exports=function(r,t,a){function n(i,o){return eDe.coerce(r,t,rDe,i,o)}tDe._supply(r,t,a,n,\"violin\")}});var _3=z(Pf=>{\"use strict\";var aDe=ke(),nDe={gaussian:function(e){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*e*e)}};Pf.makeKDE=function(e,r,t){var a=t.length,n=nDe.gaussian,i=e.bandwidth,o=1/(a*i);return function(l){for(var s=0,u=0;u<a;u++)s+=n((l-t[u])/i);return o*s}};Pf.getPositionOnKdePath=function(e,r,t){var a,n;r.orientation===\"h\"?(a=\"y\",n=\"x\"):(a=\"x\",n=\"y\");var i=aDe.findPointOnPath(e.path,t,n,{pathLength:e.pathLength}),o=e.posCenterPx,l=i[a],s=r.side===\"both\"?2*o-l:o;return[l,s]};Pf.getKdeValue=function(e,r,t){var a=e.pts.map(Pf.extractVal),n=Pf.makeKDE(e,r,a);return n(t)/e.posDensityScale};Pf.extractVal=function(e){return e.v}});var bee=z((L$e,gee)=>{\"use strict\";var lT=ke(),sT=Gr(),iDe=J8(),yee=_3(),oDe=Gt().BADNUM;gee.exports=function(r,t){var a=iDe(r,t);if(a[0].t.empty)return a;for(var n=r._fullLayout,i=sT.getFromId(r,t[t.orientation===\"h\"?\"xaxis\":\"yaxis\"]),o=1/0,l=-1/0,s=0,u=0,f=0;f<a.length;f++){var c=a[f],v=c.pts.map(yee.extractVal),d=c.bandwidth=sDe(t,c,v),p=c.span=uDe(t,c,i,d);if(c.min===c.max&&d===0)p=c.span=[c.min,c.max],c.density=[{v:1,t:p[0]}],c.bandwidth=d,s=Math.max(s,1);else{var y=p[1]-p[0],m=Math.ceil(y/(d/3)),b=y/m;if(!isFinite(b)||!isFinite(m))return lT.error(\"Something went wrong with computing the violin span\"),a[0].t.empty=!0,a;var T=yee.makeKDE(c,t,v);c.density=new Array(m+1);for(var w=0;w<c.density.length;w++){var x=p[0]+w*b,_=T(x);c.density[w]={v:_,t:x},s=Math.max(s,_)}}u=Math.max(u,v.length),o=Math.min(o,p[0]),l=Math.max(l,p[1])}var k=sT.findExtremes(i,[o,l],{padded:!0});if(t._extremes[i._id]=k,t.width)a[0].t.maxKDE=s;else{var A=n._violinScaleGroupStats,q=t.scalegroup,C=A[q];C?(C.maxKDE=Math.max(C.maxKDE,s),C.maxCount=Math.max(C.maxCount,u)):A[q]={maxKDE:s,maxCount:u}}return a[0].t.labels.kde=lT._(r,\"kde:\"),a};function lDe(e,r,t){var a=Math.min(r,t/1.349);return 1.059*a*Math.pow(e,-.2)}function sDe(e,r,t){var a=r.max-r.min;if(!a)return e.bandwidth?e.bandwidth:0;if(e.bandwidth)return Math.max(e.bandwidth,a/1e4);var n=t.length,i=lT.stdev(t,n-1,r.mean);return Math.max(lDe(n,i,r.q3-r.q1),a/100)}function uDe(e,r,t,a){var n=e.spanmode,i=e.span||[],o=[r.min,r.max],l=[r.min-2*a,r.max+2*a],s;function u(c){var v=i[c],d=t.type===\"multicategory\"?t.r2c(v):t.d2c(v,0,e[r.valLetter+\"calendar\"]);return d===oDe?l[c]:d}n===\"soft\"?s=l:n===\"hard\"?s=o:s=[u(0),u(1)];var f={type:\"linear\",range:s};return sT.setConvert(f),f.cleanRange(),s}});var wee=z((C$e,_ee)=>{\"use strict\";var fDe=K8().setPositionOffset,xee=[\"v\",\"h\"];_ee.exports=function(r,t){for(var a=r.calcdata,n=t.xaxis,i=t.yaxis,o=0;o<xee.length;o++){for(var l=xee[o],s=l===\"h\"?i:n,u=[],f=0;f<a.length;f++){var c=a[f],v=c[0].t,d=c[0].trace;d.visible===!0&&d.type===\"violin\"&&!v.empty&&d.orientation===l&&d.xaxis===n._id&&d.yaxis===i._id&&u.push(f)}fDe(\"violin\",r,u,s)}}});var Aee=z((D$e,Tee)=>{\"use strict\";var uT=Er(),fT=ke(),cDe=Zr(),cT=Q8(),vDe=qw(),hDe=_3();Tee.exports=function(r,t,a,n){var i=r._context.staticPlot,o=r._fullLayout,l=t.xaxis,s=t.yaxis;function u(f,c){var v=vDe(f,{xaxis:l,yaxis:s,trace:c,connectGaps:!0,baseTolerance:.75,shape:\"spline\",simplify:!0,linearized:!0});return cDe.smoothopen(v[0],1)}fT.makeTraceGroups(n,a,\"trace violins\").each(function(f){var c=uT.select(this),v=f[0],d=v.t,p=v.trace;if(p.visible!==!0||d.empty){c.remove();return}var y=d.bPos,m=d.bdPos,b=t[d.valLetter+\"axis\"],T=t[d.posLetter+\"axis\"],w=p.side===\"both\",x=w||p.side===\"positive\",_=w||p.side===\"negative\",k=c.selectAll(\"path.violin\").data(fT.identity);k.enter().append(\"path\").style(\"vector-effect\",i?\"none\":\"non-scaling-stroke\").attr(\"class\",\"violin\"),k.exit().remove(),k.each(function(I){var O=uT.select(this),U=I.density,Y=U.length,G=T.c2l(I.pos+y,!0),V=T.l2p(G),W;if(p.width)W=d.maxKDE/m;else{var j=o._violinScaleGroupStats[p.scalegroup];W=p.scalemode===\"count\"?j.maxKDE/m*(j.maxCount/I.pts.length):j.maxKDE/m}var J,te,ae,se,$,fe,ie;if(x){for(fe=new Array(Y),se=0;se<Y;se++)ie=fe[se]={},ie[d.posLetter]=G+U[se].v/W,ie[d.valLetter]=b.c2l(U[se].t,!0);J=u(fe,p)}if(_){for(fe=new Array(Y),$=0,se=Y-1;$<Y;$++,se--)ie=fe[$]={},ie[d.posLetter]=G-U[se].v/W,ie[d.valLetter]=b.c2l(U[se].t,!0);te=u(fe,p)}if(w)ae=J+\"L\"+te.slice(1)+\"Z\";else{var ue=[V,b.c2p(U[0].t)],ce=[V,b.c2p(U[Y-1].t)];p.orientation===\"h\"&&(ue.reverse(),ce.reverse()),x?ae=\"M\"+ue+\"L\"+J.slice(1)+\"L\"+ce:ae=\"M\"+ce+\"L\"+te.slice(1)+\"L\"+ue}O.attr(\"d\",ae),I.posCenterPx=V,I.posDensityScale=W*m,I.path=O.node(),I.pathLength=I.path.getTotalLength()/(w?2:1)});var A=p.box,q=A.width,C=(A.line||{}).width,E,P;w?(E=m*q,P=0):x?(E=[0,m*q/2],P=C*{x:1,y:-1}[d.posLetter]):(E=[m*q/2,0],P=C*{x:-1,y:1}[d.posLetter]),cT.plotBoxAndWhiskers(c,{pos:T,val:b},p,{bPos:y,bdPos:E,bPosPxOffset:P}),cT.plotBoxMean(c,{pos:T,val:b},p,{bPos:y,bdPos:E,bPosPxOffset:P});var R;!p.box.visible&&p.meanline.visible&&(R=fT.identity);var N=c.selectAll(\"path.meanline\").data(R||[]);N.enter().append(\"path\").attr(\"class\",\"meanline\").style(\"fill\",\"none\").style(\"vector-effect\",i?\"none\":\"non-scaling-stroke\"),N.exit().remove(),N.each(function(I){var O=b.c2p(I.mean,!0),U=hDe.getPositionOnKdePath(I,p,O);uT.select(this).attr(\"d\",p.orientation===\"h\"?\"M\"+O+\",\"+U[0]+\"V\"+U[1]:\"M\"+U[0]+\",\"+O+\"H\"+U[1])}),cT.plotPoints(c,{x:l,y:s},p,d)})}});var See=z((E$e,kee)=>{\"use strict\";var Mee=Er(),tv=Sr(),dDe=mf().stylePoints;kee.exports=function(r){var t=Mee.select(r).selectAll(\"g.trace.violins\");t.style(\"opacity\",function(a){return a[0].trace.opacity}),t.each(function(a){var n=a[0].trace,i=Mee.select(this),o=n.box||{},l=o.line||{},s=n.meanline||{},u=s.width;i.selectAll(\"path.violin\").style(\"stroke-width\",n.line.width+\"px\").call(tv.stroke,n.line.color).call(tv.fill,n.fillcolor),i.selectAll(\"path.box\").style(\"stroke-width\",l.width+\"px\").call(tv.stroke,l.color).call(tv.fill,o.fillcolor);var f={\"stroke-width\":u+\"px\",\"stroke-dasharray\":2*u+\"px,\"+u+\"px\"};i.selectAll(\"path.mean\").style(f).call(tv.stroke,s.color),i.selectAll(\"path.meanline\").style(f).call(tv.stroke,s.color),dDe(i,n,r)})}});var Dee=z((P$e,Cee)=>{\"use strict\";var pDe=Sr(),vT=ke(),mDe=Gr(),qee=i9(),Lee=_3();Cee.exports=function(r,t,a,n,i){i||(i={});var o=i.hoverLayer,l=r.cd,s=l[0].trace,u=s.hoveron,f=u.indexOf(\"violins\")!==-1,c=u.indexOf(\"kde\")!==-1,v=[],d,p;if(f||c){var y=qee.hoverOnBoxes(r,t,a,n);if(c&&y.length>0){var m=r.xa,b=r.ya,T,w,x,_,k;s.orientation===\"h\"?(k=t,T=\"y\",x=b,w=\"x\",_=m):(k=a,T=\"x\",x=m,w=\"y\",_=b);var A=l[r.index];if(k>=A.span[0]&&k<=A.span[1]){var q=vT.extendFlat({},r),C=_.c2p(k,!0),E=Lee.getKdeValue(A,s,k),P=Lee.getPositionOnKdePath(A,s,C),R=x._offset,N=x._length;q[T+\"0\"]=P[0],q[T+\"1\"]=P[1],q[w+\"0\"]=q[w+\"1\"]=C,q[w+\"Label\"]=w+\": \"+mDe.hoverLabelText(_,k,s[w+\"hoverformat\"])+\", \"+l[0].t.labels.kde+\" \"+E.toFixed(3);for(var I=0,O=0;O<y.length;O++)if(y[O].attr===\"med\"){I=O;break}q.spikeDistance=y[I].spikeDistance;var U=T+\"Spike\";q[U]=y[I][U],y[I].spikeDistance=void 0,y[I][U]=void 0,q.hovertemplate=!1,v.push(q),p={},p[T+\"1\"]=vT.constrain(R+P[0],R,R+N),p[T+\"2\"]=vT.constrain(R+P[1],R,R+N),p[w+\"1\"]=p[w+\"2\"]=_._offset+C}}f&&(v=v.concat(y))}u.indexOf(\"points\")!==-1&&(d=qee.hoverOnPoints(r,t,a));var Y=o.selectAll(\".violinline-\"+s.uid).data(p?[0]:[]);return Y.enter().append(\"line\").classed(\"violinline-\"+s.uid,!0).attr(\"stroke-width\",1.5),Y.exit().remove(),Y.attr(p).call(pDe.stroke,r.color),n===\"closest\"?d?[d]:v:(d&&v.push(d),v)}});var Pee=z((R$e,Eee)=>{\"use strict\";Eee.exports={attributes:aT(),layoutAttributes:oT(),supplyDefaults:dee(),crossTraceDefaults:Jd().crossTraceDefaults,supplyLayoutDefaults:mee(),calc:bee(),crossTraceCalc:wee(),plot:Aee(),style:See(),styleOnSelect:mf().styleOnSelect,hoverPoints:Dee(),selectPoints:o9(),moduleType:\"trace\",name:\"violin\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"violinLayout\",\"zoomScale\"],meta:{}}});var Fee=z((F$e,Ree)=>{\"use strict\";Ree.exports=Pee()});var av=z((z$e,zee)=>{\"use strict\";zee.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(e){return e.slice(0,3)},suffix:[\"\",\"\",\"\"]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(e){return e.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},rgba256:{colormodel:\"rgba\",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:function(e){return e.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(e){var r=e.slice(0,3);return r[1]=r[1]+\"%\",r[2]=r[2]+\"%\",r},suffix:[\"\\xB0\",\"%\",\"%\"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(e){var r=e.slice(0,4);return r[1]=r[1]+\"%\",r[2]=r[2]+\"%\",r},suffix:[\"\\xB0\",\"%\",\"%\",\"\"]}}}});var hT={};d0(hT,{default:()=>gDe});var Nee,Iee,w3,Bee,Oee,Hee,Uee,Gee,yDe,gDe,dT=h0(()=>{\"use strict\";Nee=cs(At()),Iee=cs(zn()),w3=cs(fi()),Bee=cs(Vi()),Oee=cs(av()),Hee=[\"rgb\",\"rgba\",\"rgba256\",\"hsl\",\"hsla\"],Uee=[],Gee=[];for(let e of Hee){let r=Oee.colormodel[e];Uee.push(`For the \\`${e}\\` colormodel, it is [${(r.zminDflt||r.min).join(\", \")}].`),Gee.push(`For the \\`${e}\\` colormodel, it is [${(r.zmaxDflt||r.max).join(\", \")}].`)}yDe={source:{valType:\"string\",editType:\"calc\",description:[\"Specifies the data URI of the image to be visualized.\",'The URI consists of \"data:image/[<media subtype\\\\\\\\>][;base64\\\\\\\\],<data\\\\\\\\>\"'].join(\" \")},z:{valType:\"data_array\",editType:\"calc\",description:[\"A 2-dimensional array in which each element is an array of 3 or 4 numbers representing a color.\"].join(\" \")},colormodel:{valType:\"enumerated\",values:Hee,editType:\"calc\",description:[\"Color model used to map the numerical color components described in `z` into colors.\",\"If `source` is specified, this attribute will be set to `rgba256`\",\"otherwise it defaults to `rgb`.\"].join(\" \")},zsmooth:{valType:\"enumerated\",values:[\"fast\",!1],dflt:!1,editType:\"plot\",description:[\"Picks a smoothing algorithm used to smooth `z` data.\",\"This only applies for image traces that use the `source` attribute.\"].join(\" \")},zmin:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\",description:[\"Array defining the lower bound for each color component.\",\"Note that the default value will depend on the colormodel.\",Uee.join(\" \")].join(\" \")},zmax:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\",description:[\"Array defining the higher bound for each color component.\",\"Note that the default value will depend on the colormodel.\",Gee.join(\" \")].join(\" \")},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",description:[\"Set the image's x position. The left edge of the image\",\"(or the right edge if the x axis is reversed or dx is negative)\",\"will be found at xmin=x0-dx/2\"].join(\" \")},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",description:[\"Set the image's y position. The top edge of the image\",\"(or the bottom edge if the y axis is NOT reversed or if dy is negative)\",\"will be found at ymin=y0-dy/2. By default when an image trace is\",\"included, the y axis will be reversed so that the image is right-side-up,\",\"but you can disable this by setting yaxis.autorange=true or by providing\",\"an explicit y axis range.\"].join(\" \")},dx:{valType:\"number\",dflt:1,editType:\"calc\",description:\"Set the pixel's horizontal size.\"},dy:{valType:\"number\",dflt:1,editType:\"calc\",description:\"Set the pixel's vertical size\"},text:{valType:\"data_array\",editType:\"plot\",description:\"Sets the text elements associated with each z value.\"},hovertext:{valType:\"data_array\",editType:\"plot\",description:\"Same as `text`.\"},hoverinfo:(0,Nee.extendFlat)({},Iee.default.hoverinfo,{flags:[\"x\",\"y\",\"z\",\"color\",\"name\",\"text\"],dflt:\"x+y+z+text+name\"}),hovertemplate:(0,w3.hovertemplateAttrs)({},{keys:[\"z\",\"color\",\"colormodel\"]}),hovertemplatefallback:(0,w3.templatefallbackAttrs)(),zorder:Bee.zorder},gDe=yDe});var jee=z((N$e,Vee)=>{\"use strict\";var bDe=ke(),xDe=(dT(),un(hT)).default,Yee=av(),_De=Vl().IMAGE_URL_PREFIX;Vee.exports=function(r,t){function a(o,l){return bDe.coerce(r,t,xDe,o,l)}a(\"source\"),t.source&&!t.source.match(_De)&&delete t.source,t._hasSource=!!t.source;var n=a(\"z\");if(t._hasZ=!(n===void 0||!n.length||!n[0]||!n[0].length),!t._hasZ&&!t._hasSource){t.visible=!1;return}a(\"x0\"),a(\"y0\"),a(\"dx\"),a(\"dy\");var i;t._hasZ?(a(\"colormodel\",\"rgb\"),i=Yee.colormodel[t.colormodel],a(\"zmin\",i.zminDflt||i.min),a(\"zmax\",i.zmaxDflt||i.max)):t._hasSource&&(t.colormodel=\"rgba256\",i=Yee.colormodel[t.colormodel],t.zmin=i.zminDflt,t.zmax=i.zmaxDflt),a(\"zsmooth\"),a(\"text\"),a(\"hovertext\"),a(\"hovertemplate\"),a(\"hovertemplatefallback\"),t._length=null,a(\"zorder\")}});var rs=z((I$e,pT)=>{typeof Object.create==\"function\"?pT.exports=function(r,t){t&&(r.super_=t,r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}))}:pT.exports=function(r,t){if(t){r.super_=t;var a=function(){};a.prototype=t.prototype,r.prototype=new a,r.prototype.constructor=r}}});var mT=z((B$e,Wee)=>{Wee.exports=Bu().EventEmitter});var $ee=z(T3=>{\"use strict\";T3.byteLength=TDe;T3.toByteArray=MDe;T3.fromByteArray=qDe;var Tl=[],so=[],wDe=typeof Uint8Array!=\"undefined\"?Uint8Array:Array,yT=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(Rf=0,Xee=yT.length;Rf<Xee;++Rf)Tl[Rf]=yT[Rf],so[yT.charCodeAt(Rf)]=Rf;var Rf,Xee;so[45]=62;so[95]=63;function Zee(e){var r=e.length;if(r%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var t=e.indexOf(\"=\");t===-1&&(t=r);var a=t===r?0:4-t%4;return[t,a]}function TDe(e){var r=Zee(e),t=r[0],a=r[1];return(t+a)*3/4-a}function ADe(e,r,t){return(r+t)*3/4-t}function MDe(e){var r,t=Zee(e),a=t[0],n=t[1],i=new wDe(ADe(e,a,n)),o=0,l=n>0?a-4:a,s;for(s=0;s<l;s+=4)r=so[e.charCodeAt(s)]<<18|so[e.charCodeAt(s+1)]<<12|so[e.charCodeAt(s+2)]<<6|so[e.charCodeAt(s+3)],i[o++]=r>>16&255,i[o++]=r>>8&255,i[o++]=r&255;return n===2&&(r=so[e.charCodeAt(s)]<<2|so[e.charCodeAt(s+1)]>>4,i[o++]=r&255),n===1&&(r=so[e.charCodeAt(s)]<<10|so[e.charCodeAt(s+1)]<<4|so[e.charCodeAt(s+2)]>>2,i[o++]=r>>8&255,i[o++]=r&255),i}function kDe(e){return Tl[e>>18&63]+Tl[e>>12&63]+Tl[e>>6&63]+Tl[e&63]}function SDe(e,r,t){for(var a,n=[],i=r;i<t;i+=3)a=(e[i]<<16&16711680)+(e[i+1]<<8&65280)+(e[i+2]&255),n.push(kDe(a));return n.join(\"\")}function qDe(e){for(var r,t=e.length,a=t%3,n=[],i=16383,o=0,l=t-a;o<l;o+=i)n.push(SDe(e,o,o+i>l?l:o+i));return a===1?(r=e[t-1],n.push(Tl[r>>2]+Tl[r<<4&63]+\"==\")):a===2&&(r=(e[t-2]<<8)+e[t-1],n.push(Tl[r>>10]+Tl[r>>4&63]+Tl[r<<2&63]+\"=\")),n.join(\"\")}});var Jee=z(gT=>{gT.read=function(e,r,t,a,n){var i,o,l=n*8-a-1,s=(1<<l)-1,u=s>>1,f=-7,c=t?n-1:0,v=t?-1:1,d=e[r+c];for(c+=v,i=d&(1<<-f)-1,d>>=-f,f+=l;f>0;i=i*256+e[r+c],c+=v,f-=8);for(o=i&(1<<-f)-1,i>>=-f,f+=a;f>0;o=o*256+e[r+c],c+=v,f-=8);if(i===0)i=1-u;else{if(i===s)return o?NaN:(d?-1:1)*(1/0);o=o+Math.pow(2,a),i=i-u}return(d?-1:1)*o*Math.pow(2,i-a)};gT.write=function(e,r,t,a,n,i){var o,l,s,u=i*8-n-1,f=(1<<u)-1,c=f>>1,v=n===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=a?0:i-1,p=a?1:-1,y=r<0||r===0&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(l=isNaN(r)?1:0,o=f):(o=Math.floor(Math.log(r)/Math.LN2),r*(s=Math.pow(2,-o))<1&&(o--,s*=2),o+c>=1?r+=v/s:r+=v*Math.pow(2,1-c),r*s>=2&&(o++,s/=2),o+c>=f?(l=0,o=f):o+c>=1?(l=(r*s-1)*Math.pow(2,n),o=o+c):(l=r*Math.pow(2,c-1)*Math.pow(2,n),o=0));n>=8;e[t+d]=l&255,d+=p,l/=256,n-=8);for(o=o<<n|l,u+=n;u>0;e[t+d]=o&255,d+=p,o/=256,u-=8);e[t+d-p]|=y*128}});var sv=z(lv=>{\"use strict\";var bT=$ee(),iv=Jee(),Kee=typeof Symbol==\"function\"&&typeof Symbol.for==\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;lv.Buffer=Ve;lv.SlowBuffer=RDe;lv.INSPECT_MAX_BYTES=50;var A3=2147483647;lv.kMaxLength=A3;Ve.TYPED_ARRAY_SUPPORT=LDe();!Ve.TYPED_ARRAY_SUPPORT&&typeof console!=\"undefined\"&&typeof console.error==\"function\"&&console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");function LDe(){try{let e=new Uint8Array(1),r={foo:function(){return 42}};return Object.setPrototypeOf(r,Uint8Array.prototype),Object.setPrototypeOf(e,r),e.foo()===42}catch(e){return!1}}Object.defineProperty(Ve.prototype,\"parent\",{enumerable:!0,get:function(){if(Ve.isBuffer(this))return this.buffer}});Object.defineProperty(Ve.prototype,\"offset\",{enumerable:!0,get:function(){if(Ve.isBuffer(this))return this.byteOffset}});function ts(e){if(e>A3)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');let r=new Uint8Array(e);return Object.setPrototypeOf(r,Ve.prototype),r}function Ve(e,r,t){if(typeof e==\"number\"){if(typeof r==\"string\")throw new TypeError('The \"string\" argument must be of type string. Received type number');return TT(e)}return tre(e,r,t)}Ve.poolSize=8192;function tre(e,r,t){if(typeof e==\"string\")return DDe(e,r);if(ArrayBuffer.isView(e))return EDe(e);if(e==null)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(Al(e,ArrayBuffer)||e&&Al(e.buffer,ArrayBuffer)||typeof SharedArrayBuffer!=\"undefined\"&&(Al(e,SharedArrayBuffer)||e&&Al(e.buffer,SharedArrayBuffer)))return _T(e,r,t);if(typeof e==\"number\")throw new TypeError('The \"value\" argument must not be of type number. Received type number');let a=e.valueOf&&e.valueOf();if(a!=null&&a!==e)return Ve.from(a,r,t);let n=PDe(e);if(n)return n;if(typeof Symbol!=\"undefined\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]==\"function\")return Ve.from(e[Symbol.toPrimitive](\"string\"),r,t);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}Ve.from=function(e,r,t){return tre(e,r,t)};Object.setPrototypeOf(Ve.prototype,Uint8Array.prototype);Object.setPrototypeOf(Ve,Uint8Array);function are(e){if(typeof e!=\"number\")throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function CDe(e,r,t){return are(e),e<=0?ts(e):r!==void 0?typeof t==\"string\"?ts(e).fill(r,t):ts(e).fill(r):ts(e)}Ve.alloc=function(e,r,t){return CDe(e,r,t)};function TT(e){return are(e),ts(e<0?0:AT(e)|0)}Ve.allocUnsafe=function(e){return TT(e)};Ve.allocUnsafeSlow=function(e){return TT(e)};function DDe(e,r){if((typeof r!=\"string\"||r===\"\")&&(r=\"utf8\"),!Ve.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);let t=nre(e,r)|0,a=ts(t),n=a.write(e,r);return n!==t&&(a=a.slice(0,n)),a}function xT(e){let r=e.length<0?0:AT(e.length)|0,t=ts(r);for(let a=0;a<r;a+=1)t[a]=e[a]&255;return t}function EDe(e){if(Al(e,Uint8Array)){let r=new Uint8Array(e);return _T(r.buffer,r.byteOffset,r.byteLength)}return xT(e)}function _T(e,r,t){if(r<0||e.byteLength<r)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<r+(t||0))throw new RangeError('\"length\" is outside of buffer bounds');let a;return r===void 0&&t===void 0?a=new Uint8Array(e):t===void 0?a=new Uint8Array(e,r):a=new Uint8Array(e,r,t),Object.setPrototypeOf(a,Ve.prototype),a}function PDe(e){if(Ve.isBuffer(e)){let r=AT(e.length)|0,t=ts(r);return t.length===0||e.copy(t,0,0,r),t}if(e.length!==void 0)return typeof e.length!=\"number\"||kT(e.length)?ts(0):xT(e);if(e.type===\"Buffer\"&&Array.isArray(e.data))return xT(e.data)}function AT(e){if(e>=A3)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+A3.toString(16)+\" bytes\");return e|0}function RDe(e){return+e!=e&&(e=0),Ve.alloc(+e)}Ve.isBuffer=function(r){return r!=null&&r._isBuffer===!0&&r!==Ve.prototype};Ve.compare=function(r,t){if(Al(r,Uint8Array)&&(r=Ve.from(r,r.offset,r.byteLength)),Al(t,Uint8Array)&&(t=Ve.from(t,t.offset,t.byteLength)),!Ve.isBuffer(r)||!Ve.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(r===t)return 0;let a=r.length,n=t.length;for(let i=0,o=Math.min(a,n);i<o;++i)if(r[i]!==t[i]){a=r[i],n=t[i];break}return a<n?-1:n<a?1:0};Ve.isEncoding=function(r){switch(String(r).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}};Ve.concat=function(r,t){if(!Array.isArray(r))throw new TypeError('\"list\" argument must be an Array of Buffers');if(r.length===0)return Ve.alloc(0);let a;if(t===void 0)for(t=0,a=0;a<r.length;++a)t+=r[a].length;let n=Ve.allocUnsafe(t),i=0;for(a=0;a<r.length;++a){let o=r[a];if(Al(o,Uint8Array))i+o.length>n.length?(Ve.isBuffer(o)||(o=Ve.from(o)),o.copy(n,i)):Uint8Array.prototype.set.call(n,o,i);else if(Ve.isBuffer(o))o.copy(n,i);else throw new TypeError('\"list\" argument must be an Array of Buffers');i+=o.length}return n};function nre(e,r){if(Ve.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Al(e,ArrayBuffer))return e.byteLength;if(typeof e!=\"string\")throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);let t=e.length,a=arguments.length>2&&arguments[2]===!0;if(!a&&t===0)return 0;let n=!1;for(;;)switch(r){case\"ascii\":case\"latin1\":case\"binary\":return t;case\"utf8\":case\"utf-8\":return wT(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return t*2;case\"hex\":return t>>>1;case\"base64\":return hre(e).length;default:if(n)return a?-1:wT(e).length;r=(\"\"+r).toLowerCase(),n=!0}}Ve.byteLength=nre;function FDe(e,r,t){let a=!1;if((r===void 0||r<0)&&(r=0),r>this.length||((t===void 0||t>this.length)&&(t=this.length),t<=0)||(t>>>=0,r>>>=0,t<=r))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return VDe(this,r,t);case\"utf8\":case\"utf-8\":return ore(this,r,t);case\"ascii\":return GDe(this,r,t);case\"latin1\":case\"binary\":return YDe(this,r,t);case\"base64\":return HDe(this,r,t);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return jDe(this,r,t);default:if(a)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),a=!0}}Ve.prototype._isBuffer=!0;function Ff(e,r,t){let a=e[r];e[r]=e[t],e[t]=a}Ve.prototype.swap16=function(){let r=this.length;if(r%2!==0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;t<r;t+=2)Ff(this,t,t+1);return this};Ve.prototype.swap32=function(){let r=this.length;if(r%4!==0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<r;t+=4)Ff(this,t,t+3),Ff(this,t+1,t+2);return this};Ve.prototype.swap64=function(){let r=this.length;if(r%8!==0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<r;t+=8)Ff(this,t,t+7),Ff(this,t+1,t+6),Ff(this,t+2,t+5),Ff(this,t+3,t+4);return this};Ve.prototype.toString=function(){let r=this.length;return r===0?\"\":arguments.length===0?ore(this,0,r):FDe.apply(this,arguments)};Ve.prototype.toLocaleString=Ve.prototype.toString;Ve.prototype.equals=function(r){if(!Ve.isBuffer(r))throw new TypeError(\"Argument must be a Buffer\");return this===r?!0:Ve.compare(this,r)===0};Ve.prototype.inspect=function(){let r=\"\",t=lv.INSPECT_MAX_BYTES;return r=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim(),this.length>t&&(r+=\" ... \"),\"<Buffer \"+r+\">\"};Kee&&(Ve.prototype[Kee]=Ve.prototype.inspect);Ve.prototype.compare=function(r,t,a,n,i){if(Al(r,Uint8Array)&&(r=Ve.from(r,r.offset,r.byteLength)),!Ve.isBuffer(r))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof r);if(t===void 0&&(t=0),a===void 0&&(a=r?r.length:0),n===void 0&&(n=0),i===void 0&&(i=this.length),t<0||a>r.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&t>=a)return 0;if(n>=i)return-1;if(t>=a)return 1;if(t>>>=0,a>>>=0,n>>>=0,i>>>=0,this===r)return 0;let o=i-n,l=a-t,s=Math.min(o,l),u=this.slice(n,i),f=r.slice(t,a);for(let c=0;c<s;++c)if(u[c]!==f[c]){o=u[c],l=f[c];break}return o<l?-1:l<o?1:0};function ire(e,r,t,a,n){if(e.length===0)return-1;if(typeof t==\"string\"?(a=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,kT(t)&&(t=n?0:e.length-1),t<0&&(t=e.length+t),t>=e.length){if(n)return-1;t=e.length-1}else if(t<0)if(n)t=0;else return-1;if(typeof r==\"string\"&&(r=Ve.from(r,a)),Ve.isBuffer(r))return r.length===0?-1:Qee(e,r,t,a,n);if(typeof r==\"number\")return r=r&255,typeof Uint8Array.prototype.indexOf==\"function\"?n?Uint8Array.prototype.indexOf.call(e,r,t):Uint8Array.prototype.lastIndexOf.call(e,r,t):Qee(e,[r],t,a,n);throw new TypeError(\"val must be string, number or Buffer\")}function Qee(e,r,t,a,n){let i=1,o=e.length,l=r.length;if(a!==void 0&&(a=String(a).toLowerCase(),a===\"ucs2\"||a===\"ucs-2\"||a===\"utf16le\"||a===\"utf-16le\")){if(e.length<2||r.length<2)return-1;i=2,o/=2,l/=2,t/=2}function s(f,c){return i===1?f[c]:f.readUInt16BE(c*i)}let u;if(n){let f=-1;for(u=t;u<o;u++)if(s(e,u)===s(r,f===-1?0:u-f)){if(f===-1&&(f=u),u-f+1===l)return f*i}else f!==-1&&(u-=u-f),f=-1}else for(t+l>o&&(t=o-l),u=t;u>=0;u--){let f=!0;for(let c=0;c<l;c++)if(s(e,u+c)!==s(r,c)){f=!1;break}if(f)return u}return-1}Ve.prototype.includes=function(r,t,a){return this.indexOf(r,t,a)!==-1};Ve.prototype.indexOf=function(r,t,a){return ire(this,r,t,a,!0)};Ve.prototype.lastIndexOf=function(r,t,a){return ire(this,r,t,a,!1)};function zDe(e,r,t,a){t=Number(t)||0;let n=e.length-t;a?(a=Number(a),a>n&&(a=n)):a=n;let i=r.length;a>i/2&&(a=i/2);let o;for(o=0;o<a;++o){let l=parseInt(r.substr(o*2,2),16);if(kT(l))return o;e[t+o]=l}return o}function NDe(e,r,t,a){return M3(wT(r,e.length-t),e,t,a)}function IDe(e,r,t,a){return M3($De(r),e,t,a)}function BDe(e,r,t,a){return M3(hre(r),e,t,a)}function ODe(e,r,t,a){return M3(JDe(r,e.length-t),e,t,a)}Ve.prototype.write=function(r,t,a,n){if(t===void 0)n=\"utf8\",a=this.length,t=0;else if(a===void 0&&typeof t==\"string\")n=t,a=this.length,t=0;else if(isFinite(t))t=t>>>0,isFinite(a)?(a=a>>>0,n===void 0&&(n=\"utf8\")):(n=a,a=void 0);else throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");let i=this.length-t;if((a===void 0||a>i)&&(a=i),r.length>0&&(a<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let o=!1;for(;;)switch(n){case\"hex\":return zDe(this,r,t,a);case\"utf8\":case\"utf-8\":return NDe(this,r,t,a);case\"ascii\":case\"latin1\":case\"binary\":return IDe(this,r,t,a);case\"base64\":return BDe(this,r,t,a);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return ODe(this,r,t,a);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}};Ve.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function HDe(e,r,t){return r===0&&t===e.length?bT.fromByteArray(e):bT.fromByteArray(e.slice(r,t))}function ore(e,r,t){t=Math.min(e.length,t);let a=[],n=r;for(;n<t;){let i=e[n],o=null,l=i>239?4:i>223?3:i>191?2:1;if(n+l<=t){let s,u,f,c;switch(l){case 1:i<128&&(o=i);break;case 2:s=e[n+1],(s&192)===128&&(c=(i&31)<<6|s&63,c>127&&(o=c));break;case 3:s=e[n+1],u=e[n+2],(s&192)===128&&(u&192)===128&&(c=(i&15)<<12|(s&63)<<6|u&63,c>2047&&(c<55296||c>57343)&&(o=c));break;case 4:s=e[n+1],u=e[n+2],f=e[n+3],(s&192)===128&&(u&192)===128&&(f&192)===128&&(c=(i&15)<<18|(s&63)<<12|(u&63)<<6|f&63,c>65535&&c<1114112&&(o=c))}}o===null?(o=65533,l=1):o>65535&&(o-=65536,a.push(o>>>10&1023|55296),o=56320|o&1023),a.push(o),n+=l}return UDe(a)}var ere=4096;function UDe(e){let r=e.length;if(r<=ere)return String.fromCharCode.apply(String,e);let t=\"\",a=0;for(;a<r;)t+=String.fromCharCode.apply(String,e.slice(a,a+=ere));return t}function GDe(e,r,t){let a=\"\";t=Math.min(e.length,t);for(let n=r;n<t;++n)a+=String.fromCharCode(e[n]&127);return a}function YDe(e,r,t){let a=\"\";t=Math.min(e.length,t);for(let n=r;n<t;++n)a+=String.fromCharCode(e[n]);return a}function VDe(e,r,t){let a=e.length;(!r||r<0)&&(r=0),(!t||t<0||t>a)&&(t=a);let n=\"\";for(let i=r;i<t;++i)n+=KDe[e[i]];return n}function jDe(e,r,t){let a=e.slice(r,t),n=\"\";for(let i=0;i<a.length-1;i+=2)n+=String.fromCharCode(a[i]+a[i+1]*256);return n}Ve.prototype.slice=function(r,t){let a=this.length;r=~~r,t=t===void 0?a:~~t,r<0?(r+=a,r<0&&(r=0)):r>a&&(r=a),t<0?(t+=a,t<0&&(t=0)):t>a&&(t=a),t<r&&(t=r);let n=this.subarray(r,t);return Object.setPrototypeOf(n,Ve.prototype),n};function an(e,r,t){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+r>t)throw new RangeError(\"Trying to access beyond buffer length\")}Ve.prototype.readUintLE=Ve.prototype.readUIntLE=function(r,t,a){r=r>>>0,t=t>>>0,a||an(r,t,this.length);let n=this[r],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[r+o]*i;return n};Ve.prototype.readUintBE=Ve.prototype.readUIntBE=function(r,t,a){r=r>>>0,t=t>>>0,a||an(r,t,this.length);let n=this[r+--t],i=1;for(;t>0&&(i*=256);)n+=this[r+--t]*i;return n};Ve.prototype.readUint8=Ve.prototype.readUInt8=function(r,t){return r=r>>>0,t||an(r,1,this.length),this[r]};Ve.prototype.readUint16LE=Ve.prototype.readUInt16LE=function(r,t){return r=r>>>0,t||an(r,2,this.length),this[r]|this[r+1]<<8};Ve.prototype.readUint16BE=Ve.prototype.readUInt16BE=function(r,t){return r=r>>>0,t||an(r,2,this.length),this[r]<<8|this[r+1]};Ve.prototype.readUint32LE=Ve.prototype.readUInt32LE=function(r,t){return r=r>>>0,t||an(r,4,this.length),(this[r]|this[r+1]<<8|this[r+2]<<16)+this[r+3]*16777216};Ve.prototype.readUint32BE=Ve.prototype.readUInt32BE=function(r,t){return r=r>>>0,t||an(r,4,this.length),this[r]*16777216+(this[r+1]<<16|this[r+2]<<8|this[r+3])};Ve.prototype.readBigUInt64LE=eu(function(r){r=r>>>0,ov(r,\"offset\");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&f2(r,this.length-8);let n=t+this[++r]*2**8+this[++r]*2**16+this[++r]*2**24,i=this[++r]+this[++r]*2**8+this[++r]*2**16+a*2**24;return BigInt(n)+(BigInt(i)<<BigInt(32))});Ve.prototype.readBigUInt64BE=eu(function(r){r=r>>>0,ov(r,\"offset\");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&f2(r,this.length-8);let n=t*2**24+this[++r]*2**16+this[++r]*2**8+this[++r],i=this[++r]*2**24+this[++r]*2**16+this[++r]*2**8+a;return(BigInt(n)<<BigInt(32))+BigInt(i)});Ve.prototype.readIntLE=function(r,t,a){r=r>>>0,t=t>>>0,a||an(r,t,this.length);let n=this[r],i=1,o=0;for(;++o<t&&(i*=256);)n+=this[r+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*t)),n};Ve.prototype.readIntBE=function(r,t,a){r=r>>>0,t=t>>>0,a||an(r,t,this.length);let n=t,i=1,o=this[r+--n];for(;n>0&&(i*=256);)o+=this[r+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o};Ve.prototype.readInt8=function(r,t){return r=r>>>0,t||an(r,1,this.length),this[r]&128?(255-this[r]+1)*-1:this[r]};Ve.prototype.readInt16LE=function(r,t){r=r>>>0,t||an(r,2,this.length);let a=this[r]|this[r+1]<<8;return a&32768?a|4294901760:a};Ve.prototype.readInt16BE=function(r,t){r=r>>>0,t||an(r,2,this.length);let a=this[r+1]|this[r]<<8;return a&32768?a|4294901760:a};Ve.prototype.readInt32LE=function(r,t){return r=r>>>0,t||an(r,4,this.length),this[r]|this[r+1]<<8|this[r+2]<<16|this[r+3]<<24};Ve.prototype.readInt32BE=function(r,t){return r=r>>>0,t||an(r,4,this.length),this[r]<<24|this[r+1]<<16|this[r+2]<<8|this[r+3]};Ve.prototype.readBigInt64LE=eu(function(r){r=r>>>0,ov(r,\"offset\");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&f2(r,this.length-8);let n=this[r+4]+this[r+5]*2**8+this[r+6]*2**16+(a<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+this[++r]*2**8+this[++r]*2**16+this[++r]*2**24)});Ve.prototype.readBigInt64BE=eu(function(r){r=r>>>0,ov(r,\"offset\");let t=this[r],a=this[r+7];(t===void 0||a===void 0)&&f2(r,this.length-8);let n=(t<<24)+this[++r]*2**16+this[++r]*2**8+this[++r];return(BigInt(n)<<BigInt(32))+BigInt(this[++r]*2**24+this[++r]*2**16+this[++r]*2**8+a)});Ve.prototype.readFloatLE=function(r,t){return r=r>>>0,t||an(r,4,this.length),iv.read(this,r,!0,23,4)};Ve.prototype.readFloatBE=function(r,t){return r=r>>>0,t||an(r,4,this.length),iv.read(this,r,!1,23,4)};Ve.prototype.readDoubleLE=function(r,t){return r=r>>>0,t||an(r,8,this.length),iv.read(this,r,!0,52,8)};Ve.prototype.readDoubleBE=function(r,t){return r=r>>>0,t||an(r,8,this.length),iv.read(this,r,!1,52,8)};function ni(e,r,t,a,n,i){if(!Ve.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(r>n||r<i)throw new RangeError('\"value\" argument is out of bounds');if(t+a>e.length)throw new RangeError(\"Index out of range\")}Ve.prototype.writeUintLE=Ve.prototype.writeUIntLE=function(r,t,a,n){if(r=+r,t=t>>>0,a=a>>>0,!n){let l=Math.pow(2,8*a)-1;ni(this,r,t,a,l,0)}let i=1,o=0;for(this[t]=r&255;++o<a&&(i*=256);)this[t+o]=r/i&255;return t+a};Ve.prototype.writeUintBE=Ve.prototype.writeUIntBE=function(r,t,a,n){if(r=+r,t=t>>>0,a=a>>>0,!n){let l=Math.pow(2,8*a)-1;ni(this,r,t,a,l,0)}let i=a-1,o=1;for(this[t+i]=r&255;--i>=0&&(o*=256);)this[t+i]=r/o&255;return t+a};Ve.prototype.writeUint8=Ve.prototype.writeUInt8=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,1,255,0),this[t]=r&255,t+1};Ve.prototype.writeUint16LE=Ve.prototype.writeUInt16LE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,2,65535,0),this[t]=r&255,this[t+1]=r>>>8,t+2};Ve.prototype.writeUint16BE=Ve.prototype.writeUInt16BE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,2,65535,0),this[t]=r>>>8,this[t+1]=r&255,t+2};Ve.prototype.writeUint32LE=Ve.prototype.writeUInt32LE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,4,4294967295,0),this[t+3]=r>>>24,this[t+2]=r>>>16,this[t+1]=r>>>8,this[t]=r&255,t+4};Ve.prototype.writeUint32BE=Ve.prototype.writeUInt32BE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,4,4294967295,0),this[t]=r>>>24,this[t+1]=r>>>16,this[t+2]=r>>>8,this[t+3]=r&255,t+4};function lre(e,r,t,a,n){vre(r,a,n,e,t,7);let i=Number(r&BigInt(4294967295));e[t++]=i,i=i>>8,e[t++]=i,i=i>>8,e[t++]=i,i=i>>8,e[t++]=i;let o=Number(r>>BigInt(32)&BigInt(4294967295));return e[t++]=o,o=o>>8,e[t++]=o,o=o>>8,e[t++]=o,o=o>>8,e[t++]=o,t}function sre(e,r,t,a,n){vre(r,a,n,e,t,7);let i=Number(r&BigInt(4294967295));e[t+7]=i,i=i>>8,e[t+6]=i,i=i>>8,e[t+5]=i,i=i>>8,e[t+4]=i;let o=Number(r>>BigInt(32)&BigInt(4294967295));return e[t+3]=o,o=o>>8,e[t+2]=o,o=o>>8,e[t+1]=o,o=o>>8,e[t]=o,t+8}Ve.prototype.writeBigUInt64LE=eu(function(r,t=0){return lre(this,r,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});Ve.prototype.writeBigUInt64BE=eu(function(r,t=0){return sre(this,r,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))});Ve.prototype.writeIntLE=function(r,t,a,n){if(r=+r,t=t>>>0,!n){let s=Math.pow(2,8*a-1);ni(this,r,t,a,s-1,-s)}let i=0,o=1,l=0;for(this[t]=r&255;++i<a&&(o*=256);)r<0&&l===0&&this[t+i-1]!==0&&(l=1),this[t+i]=(r/o>>0)-l&255;return t+a};Ve.prototype.writeIntBE=function(r,t,a,n){if(r=+r,t=t>>>0,!n){let s=Math.pow(2,8*a-1);ni(this,r,t,a,s-1,-s)}let i=a-1,o=1,l=0;for(this[t+i]=r&255;--i>=0&&(o*=256);)r<0&&l===0&&this[t+i+1]!==0&&(l=1),this[t+i]=(r/o>>0)-l&255;return t+a};Ve.prototype.writeInt8=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,1,127,-128),r<0&&(r=255+r+1),this[t]=r&255,t+1};Ve.prototype.writeInt16LE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,2,32767,-32768),this[t]=r&255,this[t+1]=r>>>8,t+2};Ve.prototype.writeInt16BE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,2,32767,-32768),this[t]=r>>>8,this[t+1]=r&255,t+2};Ve.prototype.writeInt32LE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,4,2147483647,-2147483648),this[t]=r&255,this[t+1]=r>>>8,this[t+2]=r>>>16,this[t+3]=r>>>24,t+4};Ve.prototype.writeInt32BE=function(r,t,a){return r=+r,t=t>>>0,a||ni(this,r,t,4,2147483647,-2147483648),r<0&&(r=4294967295+r+1),this[t]=r>>>24,this[t+1]=r>>>16,this[t+2]=r>>>8,this[t+3]=r&255,t+4};Ve.prototype.writeBigInt64LE=eu(function(r,t=0){return lre(this,r,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});Ve.prototype.writeBigInt64BE=eu(function(r,t=0){return sre(this,r,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))});function ure(e,r,t,a,n,i){if(t+a>e.length)throw new RangeError(\"Index out of range\");if(t<0)throw new RangeError(\"Index out of range\")}function fre(e,r,t,a,n){return r=+r,t=t>>>0,n||ure(e,r,t,4,34028234663852886e22,-34028234663852886e22),iv.write(e,r,t,a,23,4),t+4}Ve.prototype.writeFloatLE=function(r,t,a){return fre(this,r,t,!0,a)};Ve.prototype.writeFloatBE=function(r,t,a){return fre(this,r,t,!1,a)};function cre(e,r,t,a,n){return r=+r,t=t>>>0,n||ure(e,r,t,8,17976931348623157e292,-17976931348623157e292),iv.write(e,r,t,a,52,8),t+8}Ve.prototype.writeDoubleLE=function(r,t,a){return cre(this,r,t,!0,a)};Ve.prototype.writeDoubleBE=function(r,t,a){return cre(this,r,t,!1,a)};Ve.prototype.copy=function(r,t,a,n){if(!Ve.isBuffer(r))throw new TypeError(\"argument should be a Buffer\");if(a||(a=0),!n&&n!==0&&(n=this.length),t>=r.length&&(t=r.length),t||(t=0),n>0&&n<a&&(n=a),n===a||r.length===0||this.length===0)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(a<0||a>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),r.length-t<n-a&&(n=r.length-t+a);let i=n-a;return this===r&&typeof Uint8Array.prototype.copyWithin==\"function\"?this.copyWithin(t,a,n):Uint8Array.prototype.set.call(r,this.subarray(a,n),t),i};Ve.prototype.fill=function(r,t,a,n){if(typeof r==\"string\"){if(typeof t==\"string\"?(n=t,t=0,a=this.length):typeof a==\"string\"&&(n=a,a=this.length),n!==void 0&&typeof n!=\"string\")throw new TypeError(\"encoding must be a string\");if(typeof n==\"string\"&&!Ve.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(r.length===1){let o=r.charCodeAt(0);(n===\"utf8\"&&o<128||n===\"latin1\")&&(r=o)}}else typeof r==\"number\"?r=r&255:typeof r==\"boolean\"&&(r=Number(r));if(t<0||this.length<t||this.length<a)throw new RangeError(\"Out of range index\");if(a<=t)return this;t=t>>>0,a=a===void 0?this.length:a>>>0,r||(r=0);let i;if(typeof r==\"number\")for(i=t;i<a;++i)this[i]=r;else{let o=Ve.isBuffer(r)?r:Ve.from(r,n),l=o.length;if(l===0)throw new TypeError('The value \"'+r+'\" is invalid for argument \"value\"');for(i=0;i<a-t;++i)this[i+t]=o[i%l]}return this};var nv={};function MT(e,r,t){nv[e]=class extends t{constructor(){super(),Object.defineProperty(this,\"message\",{value:r.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(n){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:n,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}MT(\"ERR_BUFFER_OUT_OF_BOUNDS\",function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"},RangeError);MT(\"ERR_INVALID_ARG_TYPE\",function(e,r){return`The \"${e}\" argument must be of type number. Received type ${typeof r}`},TypeError);MT(\"ERR_OUT_OF_RANGE\",function(e,r,t){let a=`The value of \"${e}\" is out of range.`,n=t;return Number.isInteger(t)&&Math.abs(t)>2**32?n=rre(String(t)):typeof t==\"bigint\"&&(n=String(t),(t>BigInt(2)**BigInt(32)||t<-(BigInt(2)**BigInt(32)))&&(n=rre(n)),n+=\"n\"),a+=` It must be ${r}. Received ${n}`,a},RangeError);function rre(e){let r=\"\",t=e.length,a=e[0]===\"-\"?1:0;for(;t>=a+4;t-=3)r=`_${e.slice(t-3,t)}${r}`;return`${e.slice(0,t)}${r}`}function WDe(e,r,t){ov(r,\"offset\"),(e[r]===void 0||e[r+t]===void 0)&&f2(r,e.length-(t+1))}function vre(e,r,t,a,n,i){if(e>t||e<r){let o=typeof r==\"bigint\"?\"n\":\"\",l;throw i>3?r===0||r===BigInt(0)?l=`>= 0${o} and < 2${o} ** ${(i+1)*8}${o}`:l=`>= -(2${o} ** ${(i+1)*8-1}${o}) and < 2 ** ${(i+1)*8-1}${o}`:l=`>= ${r}${o} and <= ${t}${o}`,new nv.ERR_OUT_OF_RANGE(\"value\",l,e)}WDe(a,n,i)}function ov(e,r){if(typeof e!=\"number\")throw new nv.ERR_INVALID_ARG_TYPE(r,\"number\",e)}function f2(e,r,t){throw Math.floor(e)!==e?(ov(e,t),new nv.ERR_OUT_OF_RANGE(t||\"offset\",\"an integer\",e)):r<0?new nv.ERR_BUFFER_OUT_OF_BOUNDS:new nv.ERR_OUT_OF_RANGE(t||\"offset\",`>= ${t?1:0} and <= ${r}`,e)}var XDe=/[^+/0-9A-Za-z-_]/g;function ZDe(e){if(e=e.split(\"=\")[0],e=e.trim().replace(XDe,\"\"),e.length<2)return\"\";for(;e.length%4!==0;)e=e+\"=\";return e}function wT(e,r){r=r||1/0;let t,a=e.length,n=null,i=[];for(let o=0;o<a;++o){if(t=e.charCodeAt(o),t>55295&&t<57344){if(!n){if(t>56319){(r-=3)>-1&&i.push(239,191,189);continue}else if(o+1===a){(r-=3)>-1&&i.push(239,191,189);continue}n=t;continue}if(t<56320){(r-=3)>-1&&i.push(239,191,189),n=t;continue}t=(n-55296<<10|t-56320)+65536}else n&&(r-=3)>-1&&i.push(239,191,189);if(n=null,t<128){if((r-=1)<0)break;i.push(t)}else if(t<2048){if((r-=2)<0)break;i.push(t>>6|192,t&63|128)}else if(t<65536){if((r-=3)<0)break;i.push(t>>12|224,t>>6&63|128,t&63|128)}else if(t<1114112){if((r-=4)<0)break;i.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128)}else throw new Error(\"Invalid code point\")}return i}function $De(e){let r=[];for(let t=0;t<e.length;++t)r.push(e.charCodeAt(t)&255);return r}function JDe(e,r){let t,a,n,i=[];for(let o=0;o<e.length&&!((r-=2)<0);++o)t=e.charCodeAt(o),a=t>>8,n=t%256,i.push(n),i.push(a);return i}function hre(e){return bT.toByteArray(ZDe(e))}function M3(e,r,t,a){let n;for(n=0;n<a&&!(n+t>=r.length||n>=e.length);++n)r[n+t]=e[n];return n}function Al(e,r){return e instanceof r||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===r.name}function kT(e){return e!==e}var KDe=(function(){let e=\"0123456789abcdef\",r=new Array(256);for(let t=0;t<16;++t){let a=t*16;for(let n=0;n<16;++n)r[a+n]=e[t]+e[n]}return r})();function eu(e){return typeof BigInt==\"undefined\"?QDe:e}function QDe(){throw new Error(\"BigInt not supported\")}});var k3=z((Y$e,dre)=>{\"use strict\";dre.exports=function(){if(typeof Symbol!=\"function\"||typeof Object.getOwnPropertySymbols!=\"function\")return!1;if(typeof Symbol.iterator==\"symbol\")return!0;var r={},t=Symbol(\"test\"),a=Object(t);if(typeof t==\"string\"||Object.prototype.toString.call(t)!==\"[object Symbol]\"||Object.prototype.toString.call(a)!==\"[object Symbol]\")return!1;var n=42;r[t]=n;for(var i in r)return!1;if(typeof Object.keys==\"function\"&&Object.keys(r).length!==0||typeof Object.getOwnPropertyNames==\"function\"&&Object.getOwnPropertyNames(r).length!==0)return!1;var o=Object.getOwnPropertySymbols(r);if(o.length!==1||o[0]!==t||!Object.prototype.propertyIsEnumerable.call(r,t))return!1;if(typeof Object.getOwnPropertyDescriptor==\"function\"){var l=Object.getOwnPropertyDescriptor(r,t);if(l.value!==n||l.enumerable!==!0)return!1}return!0}});var c2=z((V$e,pre)=>{\"use strict\";var eEe=k3();pre.exports=function(){return eEe()&&!!Symbol.toStringTag}});var S3=z((j$e,mre)=>{\"use strict\";mre.exports=Object});var gre=z((W$e,yre)=>{\"use strict\";yre.exports=Error});var xre=z((X$e,bre)=>{\"use strict\";bre.exports=EvalError});var wre=z((Z$e,_re)=>{\"use strict\";_re.exports=RangeError});var Are=z(($$e,Tre)=>{\"use strict\";Tre.exports=ReferenceError});var ST=z((J$e,Mre)=>{\"use strict\";Mre.exports=SyntaxError});var uv=z((K$e,kre)=>{\"use strict\";kre.exports=TypeError});var qre=z((Q$e,Sre)=>{\"use strict\";Sre.exports=URIError});var Cre=z((eJe,Lre)=>{\"use strict\";Lre.exports=Math.abs});var Ere=z((rJe,Dre)=>{\"use strict\";Dre.exports=Math.floor});var Rre=z((tJe,Pre)=>{\"use strict\";Pre.exports=Math.max});var zre=z((aJe,Fre)=>{\"use strict\";Fre.exports=Math.min});var Ire=z((nJe,Nre)=>{\"use strict\";Nre.exports=Math.pow});var Ore=z((iJe,Bre)=>{\"use strict\";Bre.exports=Math.round});var Ure=z((oJe,Hre)=>{\"use strict\";Hre.exports=Number.isNaN||function(r){return r!==r}});var Yre=z((lJe,Gre)=>{\"use strict\";var rEe=Ure();Gre.exports=function(r){return rEe(r)||r===0?r:r<0?-1:1}});var jre=z((sJe,Vre)=>{\"use strict\";Vre.exports=Object.getOwnPropertyDescriptor});var zf=z((uJe,Wre)=>{\"use strict\";var q3=jre();if(q3)try{q3([],\"length\")}catch(e){q3=null}Wre.exports=q3});var v2=z((fJe,Xre)=>{\"use strict\";var L3=Object.defineProperty||!1;if(L3)try{L3({},\"a\",{value:1})}catch(e){L3=!1}Xre.exports=L3});var Jre=z((cJe,$re)=>{\"use strict\";var Zre=typeof Symbol!=\"undefined\"&&Symbol,tEe=k3();$re.exports=function(){return typeof Zre!=\"function\"||typeof Symbol!=\"function\"||typeof Zre(\"foo\")!=\"symbol\"||typeof Symbol(\"bar\")!=\"symbol\"?!1:tEe()}});var qT=z((vJe,Kre)=>{\"use strict\";Kre.exports=typeof Reflect!=\"undefined\"&&Reflect.getPrototypeOf||null});var LT=z((hJe,Qre)=>{\"use strict\";var aEe=S3();Qre.exports=aEe.getPrototypeOf||null});var tte=z((dJe,rte)=>{\"use strict\";var nEe=\"Function.prototype.bind called on incompatible \",iEe=Object.prototype.toString,oEe=Math.max,lEe=\"[object Function]\",ete=function(r,t){for(var a=[],n=0;n<r.length;n+=1)a[n]=r[n];for(var i=0;i<t.length;i+=1)a[i+r.length]=t[i];return a},sEe=function(r,t){for(var a=[],n=t||0,i=0;n<r.length;n+=1,i+=1)a[i]=r[n];return a},uEe=function(e,r){for(var t=\"\",a=0;a<e.length;a+=1)t+=e[a],a+1<e.length&&(t+=r);return t};rte.exports=function(r){var t=this;if(typeof t!=\"function\"||iEe.apply(t)!==lEe)throw new TypeError(nEe+t);for(var a=sEe(arguments,1),n,i=function(){if(this instanceof n){var f=t.apply(this,ete(a,arguments));return Object(f)===f?f:this}return t.apply(r,ete(a,arguments))},o=oEe(0,t.length-a.length),l=[],s=0;s<o;s++)l[s]=\"$\"+s;if(n=Function(\"binder\",\"return function (\"+uEe(l,\",\")+\"){ return binder.apply(this,arguments); }\")(i),t.prototype){var u=function(){};u.prototype=t.prototype,n.prototype=new u,u.prototype=null}return n}});var fv=z((pJe,ate)=>{\"use strict\";var fEe=tte();ate.exports=Function.prototype.bind||fEe});var C3=z((mJe,nte)=>{\"use strict\";nte.exports=Function.prototype.call});var D3=z((yJe,ite)=>{\"use strict\";ite.exports=Function.prototype.apply});var lte=z((gJe,ote)=>{\"use strict\";ote.exports=typeof Reflect!=\"undefined\"&&Reflect&&Reflect.apply});var CT=z((bJe,ste)=>{\"use strict\";var cEe=fv(),vEe=D3(),hEe=C3(),dEe=lte();ste.exports=dEe||cEe.call(hEe,vEe)});var E3=z((xJe,ute)=>{\"use strict\";var pEe=fv(),mEe=uv(),yEe=C3(),gEe=CT();ute.exports=function(r){if(r.length<1||typeof r[0]!=\"function\")throw new mEe(\"a function is required\");return gEe(pEe,yEe,r)}});var pte=z((_Je,dte)=>{\"use strict\";var bEe=E3(),fte=zf(),vte;try{vte=[].__proto__===Array.prototype}catch(e){if(!e||typeof e!=\"object\"||!(\"code\"in e)||e.code!==\"ERR_PROTO_ACCESS\")throw e}var DT=!!vte&&fte&&fte(Object.prototype,\"__proto__\"),hte=Object,cte=hte.getPrototypeOf;dte.exports=DT&&typeof DT.get==\"function\"?bEe([DT.get]):typeof cte==\"function\"?function(r){return cte(r==null?r:hte(r))}:!1});var P3=z((wJe,bte)=>{\"use strict\";var mte=qT(),yte=LT(),gte=pte();bte.exports=mte?function(r){return mte(r)}:yte?function(r){if(!r||typeof r!=\"object\"&&typeof r!=\"function\")throw new TypeError(\"getProto: not an object\");return yte(r)}:gte?function(r){return gte(r)}:null});var ET=z((TJe,xte)=>{\"use strict\";var xEe=Function.prototype.call,_Ee=Object.prototype.hasOwnProperty,wEe=fv();xte.exports=wEe.call(xEe,_Ee)});var z3=z((AJe,kte)=>{\"use strict\";var st,TEe=S3(),AEe=gre(),MEe=xre(),kEe=wre(),SEe=Are(),dv=ST(),hv=uv(),qEe=qre(),LEe=Cre(),CEe=Ere(),DEe=Rre(),EEe=zre(),PEe=Ire(),REe=Ore(),FEe=Yre(),Ate=Function,PT=function(e){try{return Ate('\"use strict\"; return ('+e+\").constructor;\")()}catch(r){}},h2=zf(),zEe=v2(),RT=function(){throw new hv},NEe=h2?(function(){try{return arguments.callee,RT}catch(e){try{return h2(arguments,\"callee\").get}catch(r){return RT}}})():RT,cv=Jre()(),nn=P3(),IEe=LT(),BEe=qT(),Mte=D3(),d2=C3(),vv={},OEe=typeof Uint8Array==\"undefined\"||!nn?st:nn(Uint8Array),Nf={__proto__:null,\"%AggregateError%\":typeof AggregateError==\"undefined\"?st:AggregateError,\"%Array%\":Array,\"%ArrayBuffer%\":typeof ArrayBuffer==\"undefined\"?st:ArrayBuffer,\"%ArrayIteratorPrototype%\":cv&&nn?nn([][Symbol.iterator]()):st,\"%AsyncFromSyncIteratorPrototype%\":st,\"%AsyncFunction%\":vv,\"%AsyncGenerator%\":vv,\"%AsyncGeneratorFunction%\":vv,\"%AsyncIteratorPrototype%\":vv,\"%Atomics%\":typeof Atomics==\"undefined\"?st:Atomics,\"%BigInt%\":typeof BigInt==\"undefined\"?st:BigInt,\"%BigInt64Array%\":typeof BigInt64Array==\"undefined\"?st:BigInt64Array,\"%BigUint64Array%\":typeof BigUint64Array==\"undefined\"?st:BigUint64Array,\"%Boolean%\":Boolean,\"%DataView%\":typeof DataView==\"undefined\"?st:DataView,\"%Date%\":Date,\"%decodeURI%\":decodeURI,\"%decodeURIComponent%\":decodeURIComponent,\"%encodeURI%\":encodeURI,\"%encodeURIComponent%\":encodeURIComponent,\"%Error%\":AEe,\"%eval%\":eval,\"%EvalError%\":MEe,\"%Float16Array%\":typeof Float16Array==\"undefined\"?st:Float16Array,\"%Float32Array%\":typeof Float32Array==\"undefined\"?st:Float32Array,\"%Float64Array%\":typeof Float64Array==\"undefined\"?st:Float64Array,\"%FinalizationRegistry%\":typeof FinalizationRegistry==\"undefined\"?st:FinalizationRegistry,\"%Function%\":Ate,\"%GeneratorFunction%\":vv,\"%Int8Array%\":typeof Int8Array==\"undefined\"?st:Int8Array,\"%Int16Array%\":typeof Int16Array==\"undefined\"?st:Int16Array,\"%Int32Array%\":typeof Int32Array==\"undefined\"?st:Int32Array,\"%isFinite%\":isFinite,\"%isNaN%\":isNaN,\"%IteratorPrototype%\":cv&&nn?nn(nn([][Symbol.iterator]())):st,\"%JSON%\":typeof JSON==\"object\"?JSON:st,\"%Map%\":typeof Map==\"undefined\"?st:Map,\"%MapIteratorPrototype%\":typeof Map==\"undefined\"||!cv||!nn?st:nn(new Map()[Symbol.iterator]()),\"%Math%\":Math,\"%Number%\":Number,\"%Object%\":TEe,\"%Object.getOwnPropertyDescriptor%\":h2,\"%parseFloat%\":parseFloat,\"%parseInt%\":parseInt,\"%Promise%\":typeof Promise==\"undefined\"?st:Promise,\"%Proxy%\":typeof Proxy==\"undefined\"?st:Proxy,\"%RangeError%\":kEe,\"%ReferenceError%\":SEe,\"%Reflect%\":typeof Reflect==\"undefined\"?st:Reflect,\"%RegExp%\":RegExp,\"%Set%\":typeof Set==\"undefined\"?st:Set,\"%SetIteratorPrototype%\":typeof Set==\"undefined\"||!cv||!nn?st:nn(new Set()[Symbol.iterator]()),\"%SharedArrayBuffer%\":typeof SharedArrayBuffer==\"undefined\"?st:SharedArrayBuffer,\"%String%\":String,\"%StringIteratorPrototype%\":cv&&nn?nn(\"\"[Symbol.iterator]()):st,\"%Symbol%\":cv?Symbol:st,\"%SyntaxError%\":dv,\"%ThrowTypeError%\":NEe,\"%TypedArray%\":OEe,\"%TypeError%\":hv,\"%Uint8Array%\":typeof Uint8Array==\"undefined\"?st:Uint8Array,\"%Uint8ClampedArray%\":typeof Uint8ClampedArray==\"undefined\"?st:Uint8ClampedArray,\"%Uint16Array%\":typeof Uint16Array==\"undefined\"?st:Uint16Array,\"%Uint32Array%\":typeof Uint32Array==\"undefined\"?st:Uint32Array,\"%URIError%\":qEe,\"%WeakMap%\":typeof WeakMap==\"undefined\"?st:WeakMap,\"%WeakRef%\":typeof WeakRef==\"undefined\"?st:WeakRef,\"%WeakSet%\":typeof WeakSet==\"undefined\"?st:WeakSet,\"%Function.prototype.call%\":d2,\"%Function.prototype.apply%\":Mte,\"%Object.defineProperty%\":zEe,\"%Object.getPrototypeOf%\":IEe,\"%Math.abs%\":LEe,\"%Math.floor%\":CEe,\"%Math.max%\":DEe,\"%Math.min%\":EEe,\"%Math.pow%\":PEe,\"%Math.round%\":REe,\"%Math.sign%\":FEe,\"%Reflect.getPrototypeOf%\":BEe};if(nn)try{null.error}catch(e){_te=nn(nn(e)),Nf[\"%Error.prototype%\"]=_te}var _te,HEe=function e(r){var t;if(r===\"%AsyncFunction%\")t=PT(\"async function () {}\");else if(r===\"%GeneratorFunction%\")t=PT(\"function* () {}\");else if(r===\"%AsyncGeneratorFunction%\")t=PT(\"async function* () {}\");else if(r===\"%AsyncGenerator%\"){var a=e(\"%AsyncGeneratorFunction%\");a&&(t=a.prototype)}else if(r===\"%AsyncIteratorPrototype%\"){var n=e(\"%AsyncGenerator%\");n&&nn&&(t=nn(n.prototype))}return Nf[r]=t,t},wte={__proto__:null,\"%ArrayBufferPrototype%\":[\"ArrayBuffer\",\"prototype\"],\"%ArrayPrototype%\":[\"Array\",\"prototype\"],\"%ArrayProto_entries%\":[\"Array\",\"prototype\",\"entries\"],\"%ArrayProto_forEach%\":[\"Array\",\"prototype\",\"forEach\"],\"%ArrayProto_keys%\":[\"Array\",\"prototype\",\"keys\"],\"%ArrayProto_values%\":[\"Array\",\"prototype\",\"values\"],\"%AsyncFunctionPrototype%\":[\"AsyncFunction\",\"prototype\"],\"%AsyncGenerator%\":[\"AsyncGeneratorFunction\",\"prototype\"],\"%AsyncGeneratorPrototype%\":[\"AsyncGeneratorFunction\",\"prototype\",\"prototype\"],\"%BooleanPrototype%\":[\"Boolean\",\"prototype\"],\"%DataViewPrototype%\":[\"DataView\",\"prototype\"],\"%DatePrototype%\":[\"Date\",\"prototype\"],\"%ErrorPrototype%\":[\"Error\",\"prototype\"],\"%EvalErrorPrototype%\":[\"EvalError\",\"prototype\"],\"%Float32ArrayPrototype%\":[\"Float32Array\",\"prototype\"],\"%Float64ArrayPrototype%\":[\"Float64Array\",\"prototype\"],\"%FunctionPrototype%\":[\"Function\",\"prototype\"],\"%Generator%\":[\"GeneratorFunction\",\"prototype\"],\"%GeneratorPrototype%\":[\"GeneratorFunction\",\"prototype\",\"prototype\"],\"%Int8ArrayPrototype%\":[\"Int8Array\",\"prototype\"],\"%Int16ArrayPrototype%\":[\"Int16Array\",\"prototype\"],\"%Int32ArrayPrototype%\":[\"Int32Array\",\"prototype\"],\"%JSONParse%\":[\"JSON\",\"parse\"],\"%JSONStringify%\":[\"JSON\",\"stringify\"],\"%MapPrototype%\":[\"Map\",\"prototype\"],\"%NumberPrototype%\":[\"Number\",\"prototype\"],\"%ObjectPrototype%\":[\"Object\",\"prototype\"],\"%ObjProto_toString%\":[\"Object\",\"prototype\",\"toString\"],\"%ObjProto_valueOf%\":[\"Object\",\"prototype\",\"valueOf\"],\"%PromisePrototype%\":[\"Promise\",\"prototype\"],\"%PromiseProto_then%\":[\"Promise\",\"prototype\",\"then\"],\"%Promise_all%\":[\"Promise\",\"all\"],\"%Promise_reject%\":[\"Promise\",\"reject\"],\"%Promise_resolve%\":[\"Promise\",\"resolve\"],\"%RangeErrorPrototype%\":[\"RangeError\",\"prototype\"],\"%ReferenceErrorPrototype%\":[\"ReferenceError\",\"prototype\"],\"%RegExpPrototype%\":[\"RegExp\",\"prototype\"],\"%SetPrototype%\":[\"Set\",\"prototype\"],\"%SharedArrayBufferPrototype%\":[\"SharedArrayBuffer\",\"prototype\"],\"%StringPrototype%\":[\"String\",\"prototype\"],\"%SymbolPrototype%\":[\"Symbol\",\"prototype\"],\"%SyntaxErrorPrototype%\":[\"SyntaxError\",\"prototype\"],\"%TypedArrayPrototype%\":[\"TypedArray\",\"prototype\"],\"%TypeErrorPrototype%\":[\"TypeError\",\"prototype\"],\"%Uint8ArrayPrototype%\":[\"Uint8Array\",\"prototype\"],\"%Uint8ClampedArrayPrototype%\":[\"Uint8ClampedArray\",\"prototype\"],\"%Uint16ArrayPrototype%\":[\"Uint16Array\",\"prototype\"],\"%Uint32ArrayPrototype%\":[\"Uint32Array\",\"prototype\"],\"%URIErrorPrototype%\":[\"URIError\",\"prototype\"],\"%WeakMapPrototype%\":[\"WeakMap\",\"prototype\"],\"%WeakSetPrototype%\":[\"WeakSet\",\"prototype\"]},p2=fv(),R3=ET(),UEe=p2.call(d2,Array.prototype.concat),GEe=p2.call(Mte,Array.prototype.splice),Tte=p2.call(d2,String.prototype.replace),F3=p2.call(d2,String.prototype.slice),YEe=p2.call(d2,RegExp.prototype.exec),VEe=/[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g,jEe=/\\\\(\\\\)?/g,WEe=function(r){var t=F3(r,0,1),a=F3(r,-1);if(t===\"%\"&&a!==\"%\")throw new dv(\"invalid intrinsic syntax, expected closing `%`\");if(a===\"%\"&&t!==\"%\")throw new dv(\"invalid intrinsic syntax, expected opening `%`\");var n=[];return Tte(r,VEe,function(i,o,l,s){n[n.length]=l?Tte(s,jEe,\"$1\"):o||i}),n},XEe=function(r,t){var a=r,n;if(R3(wte,a)&&(n=wte[a],a=\"%\"+n[0]+\"%\"),R3(Nf,a)){var i=Nf[a];if(i===vv&&(i=HEe(a)),typeof i==\"undefined\"&&!t)throw new hv(\"intrinsic \"+r+\" exists, but is not available. Please file an issue!\");return{alias:n,name:a,value:i}}throw new dv(\"intrinsic \"+r+\" does not exist!\")};kte.exports=function(r,t){if(typeof r!=\"string\"||r.length===0)throw new hv(\"intrinsic name must be a non-empty string\");if(arguments.length>1&&typeof t!=\"boolean\")throw new hv('\"allowMissing\" argument must be a boolean');if(YEe(/^%?[^%]*%?$/,r)===null)throw new dv(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");var a=WEe(r),n=a.length>0?a[0]:\"\",i=XEe(\"%\"+n+\"%\",t),o=i.name,l=i.value,s=!1,u=i.alias;u&&(n=u[0],GEe(a,UEe([0,1],u)));for(var f=1,c=!0;f<a.length;f+=1){var v=a[f],d=F3(v,0,1),p=F3(v,-1);if((d==='\"'||d===\"'\"||d===\"`\"||p==='\"'||p===\"'\"||p===\"`\")&&d!==p)throw new dv(\"property names with quotes must have matching quotes\");if((v===\"constructor\"||!c)&&(s=!0),n+=\".\"+v,o=\"%\"+n+\"%\",R3(Nf,o))l=Nf[o];else if(l!=null){if(!(v in l)){if(!t)throw new hv(\"base intrinsic for \"+r+\" exists, but the property is not available.\");return}if(h2&&f+1>=a.length){var y=h2(l,v);c=!!y,c&&\"get\"in y&&!(\"originalValue\"in y.get)?l=y.get:l=l[v]}else c=R3(l,v),l=l[v];c&&!s&&(Nf[o]=l)}}return l}});var If=z((MJe,Lte)=>{\"use strict\";var Ste=z3(),qte=E3(),ZEe=qte([Ste(\"%String.prototype.indexOf%\")]);Lte.exports=function(r,t){var a=Ste(r,!!t);return typeof a==\"function\"&&ZEe(r,\".prototype.\")>-1?qte([a]):a}});var Ete=z((kJe,Dte)=>{\"use strict\";var $Ee=c2()(),JEe=If(),FT=JEe(\"Object.prototype.toString\"),N3=function(r){return $Ee&&r&&typeof r==\"object\"&&Symbol.toStringTag in r?!1:FT(r)===\"[object Arguments]\"},Cte=function(r){return N3(r)?!0:r!==null&&typeof r==\"object\"&&\"length\"in r&&typeof r.length==\"number\"&&r.length>=0&&FT(r)!==\"[object Array]\"&&\"callee\"in r&&FT(r.callee)===\"[object Function]\"},KEe=(function(){return N3(arguments)})();N3.isLegacyArguments=Cte;Dte.exports=KEe?N3:Cte});var Ite=z((SJe,Nte)=>{\"use strict\";var Pte=If(),QEe=c2()(),ePe=ET(),rPe=zf(),IT;QEe?(Rte=Pte(\"RegExp.prototype.exec\"),zT={},I3=function(){throw zT},NT={toString:I3,valueOf:I3},typeof Symbol.toPrimitive==\"symbol\"&&(NT[Symbol.toPrimitive]=I3),IT=function(r){if(!r||typeof r!=\"object\")return!1;var t=rPe(r,\"lastIndex\"),a=t&&ePe(t,\"value\");if(!a)return!1;try{Rte(r,NT)}catch(n){return n===zT}}):(Fte=Pte(\"Object.prototype.toString\"),zte=\"[object RegExp]\",IT=function(r){return!r||typeof r!=\"object\"&&typeof r!=\"function\"?!1:Fte(r)===zte});var Rte,zT,I3,NT,Fte,zte;Nte.exports=IT});var Ote=z((qJe,Bte)=>{\"use strict\";var tPe=If(),aPe=Ite(),nPe=tPe(\"RegExp.prototype.exec\"),iPe=uv();Bte.exports=function(r){if(!aPe(r))throw new iPe(\"`regex` must be a RegExp\");return function(a){return nPe(r,a)!==null}}});var Ute=z((LJe,Hte)=>{\"use strict\";var oPe=function*(){}.constructor;Hte.exports=()=>oPe});var jte=z((CJe,Vte)=>{\"use strict\";var Yte=If(),lPe=Ote(),sPe=lPe(/^\\s*(?:function)?\\*/),uPe=c2()(),Gte=P3(),fPe=Yte(\"Object.prototype.toString\"),cPe=Yte(\"Function.prototype.toString\"),vPe=Ute();Vte.exports=function(r){if(typeof r!=\"function\")return!1;if(sPe(cPe(r)))return!0;if(!uPe){var t=fPe(r);return t===\"[object GeneratorFunction]\"}if(!Gte)return!1;var a=vPe();return a&&Gte(r)===a.prototype}});var $te=z((DJe,Zte)=>{\"use strict\";var Xte=Function.prototype.toString,pv=typeof Reflect==\"object\"&&Reflect!==null&&Reflect.apply,OT,B3;if(typeof pv==\"function\"&&typeof Object.defineProperty==\"function\")try{OT=Object.defineProperty({},\"length\",{get:function(){throw B3}}),B3={},pv(function(){throw 42},null,OT)}catch(e){e!==B3&&(pv=null)}else pv=null;var hPe=/^\\s*class\\b/,HT=function(r){try{var t=Xte.call(r);return hPe.test(t)}catch(a){return!1}},BT=function(r){try{return HT(r)?!1:(Xte.call(r),!0)}catch(t){return!1}},O3=Object.prototype.toString,dPe=\"[object Object]\",pPe=\"[object Function]\",mPe=\"[object GeneratorFunction]\",yPe=\"[object HTMLAllCollection]\",gPe=\"[object HTML document.all class]\",bPe=\"[object HTMLCollection]\",xPe=typeof Symbol==\"function\"&&!!Symbol.toStringTag,_Pe=!(0 in[,]),UT=function(){return!1};typeof document==\"object\"&&(Wte=document.all,O3.call(Wte)===O3.call(document.all)&&(UT=function(r){if((_Pe||!r)&&(typeof r==\"undefined\"||typeof r==\"object\"))try{var t=O3.call(r);return(t===yPe||t===gPe||t===bPe||t===dPe)&&r(\"\")==null}catch(a){}return!1}));var Wte;Zte.exports=pv?function(r){if(UT(r))return!0;if(!r||typeof r!=\"function\"&&typeof r!=\"object\")return!1;try{pv(r,null,OT)}catch(t){if(t!==B3)return!1}return!HT(r)&&BT(r)}:function(r){if(UT(r))return!0;if(!r||typeof r!=\"function\"&&typeof r!=\"object\")return!1;if(xPe)return BT(r);if(HT(r))return!1;var t=O3.call(r);return t!==pPe&&t!==mPe&&!/^\\[object HTML/.test(t)?!1:BT(r)}});var Qte=z((EJe,Kte)=>{\"use strict\";var wPe=$te(),TPe=Object.prototype.toString,Jte=Object.prototype.hasOwnProperty,APe=function(r,t,a){for(var n=0,i=r.length;n<i;n++)Jte.call(r,n)&&(a==null?t(r[n],n,r):t.call(a,r[n],n,r))},MPe=function(r,t,a){for(var n=0,i=r.length;n<i;n++)a==null?t(r.charAt(n),n,r):t.call(a,r.charAt(n),n,r)},kPe=function(r,t,a){for(var n in r)Jte.call(r,n)&&(a==null?t(r[n],n,r):t.call(a,r[n],n,r))};function SPe(e){return TPe.call(e)===\"[object Array]\"}Kte.exports=function(r,t,a){if(!wPe(t))throw new TypeError(\"iterator must be a function\");var n;arguments.length>=3&&(n=a),SPe(r)?APe(r,t,n):typeof r==\"string\"?MPe(r,t,n):kPe(r,t,n)}});var rae=z((PJe,eae)=>{\"use strict\";eae.exports=[\"Float16Array\",\"Float32Array\",\"Float64Array\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"BigInt64Array\",\"BigUint64Array\"]});var aae=z((RJe,tae)=>{\"use strict\";var GT=rae(),qPe=typeof globalThis==\"undefined\"?window:globalThis;tae.exports=function(){for(var r=[],t=0;t<GT.length;t++)typeof qPe[GT[t]]==\"function\"&&(r[r.length]=GT[t]);return r}});var YT=z((FJe,oae)=>{\"use strict\";var nae=v2(),LPe=ST(),mv=uv(),iae=zf();oae.exports=function(r,t,a){if(!r||typeof r!=\"object\"&&typeof r!=\"function\")throw new mv(\"`obj` must be an object or a function`\");if(typeof t!=\"string\"&&typeof t!=\"symbol\")throw new mv(\"`property` must be a string or a symbol`\");if(arguments.length>3&&typeof arguments[3]!=\"boolean\"&&arguments[3]!==null)throw new mv(\"`nonEnumerable`, if provided, must be a boolean or null\");if(arguments.length>4&&typeof arguments[4]!=\"boolean\"&&arguments[4]!==null)throw new mv(\"`nonWritable`, if provided, must be a boolean or null\");if(arguments.length>5&&typeof arguments[5]!=\"boolean\"&&arguments[5]!==null)throw new mv(\"`nonConfigurable`, if provided, must be a boolean or null\");if(arguments.length>6&&typeof arguments[6]!=\"boolean\")throw new mv(\"`loose`, if provided, must be a boolean\");var n=arguments.length>3?arguments[3]:null,i=arguments.length>4?arguments[4]:null,o=arguments.length>5?arguments[5]:null,l=arguments.length>6?arguments[6]:!1,s=!!iae&&iae(r,t);if(nae)nae(r,t,{configurable:o===null&&s?s.configurable:!o,enumerable:n===null&&s?s.enumerable:!n,value:a,writable:i===null&&s?s.writable:!i});else if(l||!n&&!i&&!o)r[t]=a;else throw new LPe(\"This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.\")}});var jT=z((zJe,sae)=>{\"use strict\";var VT=v2(),lae=function(){return!!VT};lae.hasArrayLengthDefineBug=function(){if(!VT)return null;try{return VT([],\"length\",{value:1}).length!==1}catch(r){return!0}};sae.exports=lae});var hae=z((NJe,vae)=>{\"use strict\";var CPe=z3(),uae=YT(),DPe=jT()(),fae=zf(),cae=uv(),EPe=CPe(\"%Math.floor%\");vae.exports=function(r,t){if(typeof r!=\"function\")throw new cae(\"`fn` is not a function\");if(typeof t!=\"number\"||t<0||t>4294967295||EPe(t)!==t)throw new cae(\"`length` must be a positive 32-bit integer\");var a=arguments.length>2&&!!arguments[2],n=!0,i=!0;if(\"length\"in r&&fae){var o=fae(r,\"length\");o&&!o.configurable&&(n=!1),o&&!o.writable&&(i=!1)}return(n||i||!a)&&(DPe?uae(r,\"length\",t,!0,!0):uae(r,\"length\",t)),r}});var pae=z((IJe,dae)=>{\"use strict\";var PPe=fv(),RPe=D3(),FPe=CT();dae.exports=function(){return FPe(PPe,RPe,arguments)}});var m2=z((BJe,H3)=>{\"use strict\";var zPe=hae(),mae=v2(),NPe=E3(),yae=pae();H3.exports=function(r){var t=NPe(arguments),a=1+r.length-(arguments.length-1);return zPe(t,a>0?a:0,!0)};mae?mae(H3.exports,\"apply\",{value:yae}):H3.exports.apply=yae});var $T=z((OJe,_ae)=>{\"use strict\";var Y3=Qte(),IPe=aae(),gae=m2(),XT=If(),G3=zf(),U3=P3(),BPe=XT(\"Object.prototype.toString\"),xae=c2()(),bae=typeof globalThis==\"undefined\"?window:globalThis,WT=IPe(),ZT=XT(\"String.prototype.slice\"),OPe=XT(\"Array.prototype.indexOf\",!0)||function(r,t){for(var a=0;a<r.length;a+=1)if(r[a]===t)return a;return-1},V3={__proto__:null};xae&&G3&&U3?Y3(WT,function(e){var r=new bae[e];if(Symbol.toStringTag in r&&U3){var t=U3(r),a=G3(t,Symbol.toStringTag);if(!a&&t){var n=U3(t);a=G3(n,Symbol.toStringTag)}if(a&&a.get){var i=gae(a.get);V3[\"$\"+e]=i}}}):Y3(WT,function(e){var r=new bae[e],t=r.slice||r.set;if(t){var a=gae(t);V3[\"$\"+e]=a}});function HPe(e){var r=!1;return Y3(V3,function(t,a){if(!r)try{\"$\"+t(e)===a&&(r=ZT(a,1))}catch(n){}}),r}function UPe(e){var r=!1;return Y3(V3,function(t,a){if(!r)try{t(e),r=ZT(a,1)}catch(n){}}),r}function GPe(e){return OPe(WT,e)>-1}_ae.exports=function(r){if(!r||typeof r!=\"object\")return!1;if(!xae){var t=ZT(BPe(r),8,-1);return GPe(t)?t:t!==\"Object\"?!1:UPe(r)}return G3?HPe(r):null}});var Tae=z((HJe,wae)=>{\"use strict\";var YPe=$T();wae.exports=function(r){return!!YPe(r)}});var QT=z(ut=>{\"use strict\";var VPe=Ete(),jPe=jte(),Go=$T(),Aae=Tae();function yv(e){return e.call.bind(e)}var Mae=typeof BigInt!=\"undefined\",kae=typeof Symbol!=\"undefined\",uo=yv(Object.prototype.toString),WPe=yv(Number.prototype.valueOf),XPe=yv(String.prototype.valueOf),ZPe=yv(Boolean.prototype.valueOf);Mae&&(Sae=yv(BigInt.prototype.valueOf));var Sae;kae&&(qae=yv(Symbol.prototype.valueOf));var qae;function g2(e,r){if(typeof e!=\"object\")return!1;try{return r(e),!0}catch(t){return!1}}ut.isArgumentsObject=VPe;ut.isGeneratorFunction=jPe;ut.isTypedArray=Aae;function $Pe(e){return typeof Promise!=\"undefined\"&&e instanceof Promise||e!==null&&typeof e==\"object\"&&typeof e.then==\"function\"&&typeof e.catch==\"function\"}ut.isPromise=$Pe;function JPe(e){return typeof ArrayBuffer!=\"undefined\"&&ArrayBuffer.isView?ArrayBuffer.isView(e):Aae(e)||Cae(e)}ut.isArrayBufferView=JPe;function KPe(e){return Go(e)===\"Uint8Array\"}ut.isUint8Array=KPe;function QPe(e){return Go(e)===\"Uint8ClampedArray\"}ut.isUint8ClampedArray=QPe;function eRe(e){return Go(e)===\"Uint16Array\"}ut.isUint16Array=eRe;function rRe(e){return Go(e)===\"Uint32Array\"}ut.isUint32Array=rRe;function tRe(e){return Go(e)===\"Int8Array\"}ut.isInt8Array=tRe;function aRe(e){return Go(e)===\"Int16Array\"}ut.isInt16Array=aRe;function nRe(e){return Go(e)===\"Int32Array\"}ut.isInt32Array=nRe;function iRe(e){return Go(e)===\"Float32Array\"}ut.isFloat32Array=iRe;function oRe(e){return Go(e)===\"Float64Array\"}ut.isFloat64Array=oRe;function lRe(e){return Go(e)===\"BigInt64Array\"}ut.isBigInt64Array=lRe;function sRe(e){return Go(e)===\"BigUint64Array\"}ut.isBigUint64Array=sRe;function j3(e){return uo(e)===\"[object Map]\"}j3.working=typeof Map!=\"undefined\"&&j3(new Map);function uRe(e){return typeof Map==\"undefined\"?!1:j3.working?j3(e):e instanceof Map}ut.isMap=uRe;function W3(e){return uo(e)===\"[object Set]\"}W3.working=typeof Set!=\"undefined\"&&W3(new Set);function fRe(e){return typeof Set==\"undefined\"?!1:W3.working?W3(e):e instanceof Set}ut.isSet=fRe;function X3(e){return uo(e)===\"[object WeakMap]\"}X3.working=typeof WeakMap!=\"undefined\"&&X3(new WeakMap);function cRe(e){return typeof WeakMap==\"undefined\"?!1:X3.working?X3(e):e instanceof WeakMap}ut.isWeakMap=cRe;function KT(e){return uo(e)===\"[object WeakSet]\"}KT.working=typeof WeakSet!=\"undefined\"&&KT(new WeakSet);function vRe(e){return KT(e)}ut.isWeakSet=vRe;function Z3(e){return uo(e)===\"[object ArrayBuffer]\"}Z3.working=typeof ArrayBuffer!=\"undefined\"&&Z3(new ArrayBuffer);function Lae(e){return typeof ArrayBuffer==\"undefined\"?!1:Z3.working?Z3(e):e instanceof ArrayBuffer}ut.isArrayBuffer=Lae;function $3(e){return uo(e)===\"[object DataView]\"}$3.working=typeof ArrayBuffer!=\"undefined\"&&typeof DataView!=\"undefined\"&&$3(new DataView(new ArrayBuffer(1),0,1));function Cae(e){return typeof DataView==\"undefined\"?!1:$3.working?$3(e):e instanceof DataView}ut.isDataView=Cae;var JT=typeof SharedArrayBuffer!=\"undefined\"?SharedArrayBuffer:void 0;function y2(e){return uo(e)===\"[object SharedArrayBuffer]\"}function Dae(e){return typeof JT==\"undefined\"?!1:(typeof y2.working==\"undefined\"&&(y2.working=y2(new JT)),y2.working?y2(e):e instanceof JT)}ut.isSharedArrayBuffer=Dae;function hRe(e){return uo(e)===\"[object AsyncFunction]\"}ut.isAsyncFunction=hRe;function dRe(e){return uo(e)===\"[object Map Iterator]\"}ut.isMapIterator=dRe;function pRe(e){return uo(e)===\"[object Set Iterator]\"}ut.isSetIterator=pRe;function mRe(e){return uo(e)===\"[object Generator]\"}ut.isGeneratorObject=mRe;function yRe(e){return uo(e)===\"[object WebAssembly.Module]\"}ut.isWebAssemblyCompiledModule=yRe;function Eae(e){return g2(e,WPe)}ut.isNumberObject=Eae;function Pae(e){return g2(e,XPe)}ut.isStringObject=Pae;function Rae(e){return g2(e,ZPe)}ut.isBooleanObject=Rae;function Fae(e){return Mae&&g2(e,Sae)}ut.isBigIntObject=Fae;function zae(e){return kae&&g2(e,qae)}ut.isSymbolObject=zae;function gRe(e){return Eae(e)||Pae(e)||Rae(e)||Fae(e)||zae(e)}ut.isBoxedPrimitive=gRe;function bRe(e){return typeof Uint8Array!=\"undefined\"&&(Lae(e)||Dae(e))}ut.isAnyArrayBuffer=bRe;[\"isProxy\",\"isExternal\",\"isModuleNamespaceObject\"].forEach(function(e){Object.defineProperty(ut,e,{enumerable:!1,value:function(){throw new Error(e+\" is not supported in userland\")}})})});var eA=z((GJe,Nae)=>{Nae.exports=function(r){return r&&typeof r==\"object\"&&typeof r.copy==\"function\"&&typeof r.fill==\"function\"&&typeof r.readUInt8==\"function\"}});var oA=z(ft=>{var Iae=Object.getOwnPropertyDescriptors||function(r){for(var t=Object.keys(r),a={},n=0;n<t.length;n++)a[t[n]]=Object.getOwnPropertyDescriptor(r,t[n]);return a},xRe=/%[sdj%]/g;ft.format=function(e){if(!ab(e)){for(var r=[],t=0;t<arguments.length;t++)r.push(ru(arguments[t]));return r.join(\" \")}for(var t=1,a=arguments,n=a.length,i=String(e).replace(xRe,function(l){if(l===\"%%\")return\"%\";if(t>=n)return l;switch(l){case\"%s\":return String(a[t++]);case\"%d\":return Number(a[t++]);case\"%j\":try{return JSON.stringify(a[t++])}catch(s){return\"[Circular]\"}default:return l}}),o=a[t];t<n;o=a[++t])tb(o)||!gv(o)?i+=\" \"+o:i+=\" \"+ru(o);return i};ft.deprecate=function(e,r){if(typeof process!=\"undefined\"&&process.noDeprecation===!0)return e;if(typeof process==\"undefined\")return function(){return ft.deprecate(e,r).apply(this,arguments)};var t=!1;function a(){if(!t){if(process.throwDeprecation)throw new Error(r);process.traceDeprecation?console.trace(r):console.error(r),t=!0}return e.apply(this,arguments)}return a};var J3={},Bae=/^$/;K3=\"false\",K3=K3.replace(/[|\\\\{}()[\\]^$+?.]/g,\"\\\\$&\").replace(/\\*/g,\".*\").replace(/,/g,\"$|^\").toUpperCase(),Bae=new RegExp(\"^\"+K3+\"$\",\"i\");var K3;ft.debuglog=function(e){if(e=e.toUpperCase(),!J3[e])if(Bae.test(e)){var r=process.pid;J3[e]=function(){var t=ft.format.apply(ft,arguments);console.error(\"%s %d: %s\",e,r,t)}}else J3[e]=function(){};return J3[e]};function ru(e,r){var t={seen:[],stylize:wRe};return arguments.length>=3&&(t.depth=arguments[2]),arguments.length>=4&&(t.colors=arguments[3]),nA(r)?t.showHidden=r:r&&ft._extend(t,r),Of(t.showHidden)&&(t.showHidden=!1),Of(t.depth)&&(t.depth=2),Of(t.colors)&&(t.colors=!1),Of(t.customInspect)&&(t.customInspect=!0),t.colors&&(t.stylize=_Re),eb(t,e,t.depth)}ft.inspect=ru;ru.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};ru.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"};function _Re(e,r){var t=ru.styles[r];return t?\"\\x1B[\"+ru.colors[t][0]+\"m\"+e+\"\\x1B[\"+ru.colors[t][1]+\"m\":e}function wRe(e,r){return e}function TRe(e){var r={};return e.forEach(function(t,a){r[t]=!0}),r}function eb(e,r,t){if(e.customInspect&&r&&Q3(r.inspect)&&r.inspect!==ft.inspect&&!(r.constructor&&r.constructor.prototype===r)){var a=r.inspect(t,e);return ab(a)||(a=eb(e,a,t)),a}var n=ARe(e,r);if(n)return n;var i=Object.keys(r),o=TRe(i);if(e.showHidden&&(i=Object.getOwnPropertyNames(r)),x2(r)&&(i.indexOf(\"message\")>=0||i.indexOf(\"description\")>=0))return rA(r);if(i.length===0){if(Q3(r)){var l=r.name?\": \"+r.name:\"\";return e.stylize(\"[Function\"+l+\"]\",\"special\")}if(b2(r))return e.stylize(RegExp.prototype.toString.call(r),\"regexp\");if(rb(r))return e.stylize(Date.prototype.toString.call(r),\"date\");if(x2(r))return rA(r)}var s=\"\",u=!1,f=[\"{\",\"}\"];if(Oae(r)&&(u=!0,f=[\"[\",\"]\"]),Q3(r)){var c=r.name?\": \"+r.name:\"\";s=\" [Function\"+c+\"]\"}if(b2(r)&&(s=\" \"+RegExp.prototype.toString.call(r)),rb(r)&&(s=\" \"+Date.prototype.toUTCString.call(r)),x2(r)&&(s=\" \"+rA(r)),i.length===0&&(!u||r.length==0))return f[0]+s+f[1];if(t<0)return b2(r)?e.stylize(RegExp.prototype.toString.call(r),\"regexp\"):e.stylize(\"[Object]\",\"special\");e.seen.push(r);var v;return u?v=MRe(e,r,t,o,i):v=i.map(function(d){return aA(e,r,t,o,d,u)}),e.seen.pop(),kRe(v,s,f)}function ARe(e,r){if(Of(r))return e.stylize(\"undefined\",\"undefined\");if(ab(r)){var t=\"'\"+JSON.stringify(r).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(t,\"string\")}if(Hae(r))return e.stylize(\"\"+r,\"number\");if(nA(r))return e.stylize(\"\"+r,\"boolean\");if(tb(r))return e.stylize(\"null\",\"null\")}function rA(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function MRe(e,r,t,a,n){for(var i=[],o=0,l=r.length;o<l;++o)Uae(r,String(o))?i.push(aA(e,r,t,a,String(o),!0)):i.push(\"\");return n.forEach(function(s){s.match(/^\\d+$/)||i.push(aA(e,r,t,a,s,!0))}),i}function aA(e,r,t,a,n,i){var o,l,s;if(s=Object.getOwnPropertyDescriptor(r,n)||{value:r[n]},s.get?s.set?l=e.stylize(\"[Getter/Setter]\",\"special\"):l=e.stylize(\"[Getter]\",\"special\"):s.set&&(l=e.stylize(\"[Setter]\",\"special\")),Uae(a,n)||(o=\"[\"+n+\"]\"),l||(e.seen.indexOf(s.value)<0?(tb(t)?l=eb(e,s.value,null):l=eb(e,s.value,t-1),l.indexOf(`\n`)>-1&&(i?l=l.split(`\n`).map(function(u){return\"  \"+u}).join(`\n`).slice(2):l=`\n`+l.split(`\n`).map(function(u){return\"   \"+u}).join(`\n`))):l=e.stylize(\"[Circular]\",\"special\")),Of(o)){if(i&&n.match(/^\\d+$/))return l;o=JSON.stringify(\"\"+n),o.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.slice(1,-1),o=e.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=e.stylize(o,\"string\"))}return o+\": \"+l}function kRe(e,r,t){var a=0,n=e.reduce(function(i,o){return a++,o.indexOf(`\n`)>=0&&a++,i+o.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0);return n>60?t[0]+(r===\"\"?\"\":r+`\n `)+\" \"+e.join(`,\n  `)+\" \"+t[1]:t[0]+r+\" \"+e.join(\", \")+\" \"+t[1]}ft.types=QT();function Oae(e){return Array.isArray(e)}ft.isArray=Oae;function nA(e){return typeof e==\"boolean\"}ft.isBoolean=nA;function tb(e){return e===null}ft.isNull=tb;function SRe(e){return e==null}ft.isNullOrUndefined=SRe;function Hae(e){return typeof e==\"number\"}ft.isNumber=Hae;function ab(e){return typeof e==\"string\"}ft.isString=ab;function qRe(e){return typeof e==\"symbol\"}ft.isSymbol=qRe;function Of(e){return e===void 0}ft.isUndefined=Of;function b2(e){return gv(e)&&iA(e)===\"[object RegExp]\"}ft.isRegExp=b2;ft.types.isRegExp=b2;function gv(e){return typeof e==\"object\"&&e!==null}ft.isObject=gv;function rb(e){return gv(e)&&iA(e)===\"[object Date]\"}ft.isDate=rb;ft.types.isDate=rb;function x2(e){return gv(e)&&(iA(e)===\"[object Error]\"||e instanceof Error)}ft.isError=x2;ft.types.isNativeError=x2;function Q3(e){return typeof e==\"function\"}ft.isFunction=Q3;function LRe(e){return e===null||typeof e==\"boolean\"||typeof e==\"number\"||typeof e==\"string\"||typeof e==\"symbol\"||typeof e==\"undefined\"}ft.isPrimitive=LRe;ft.isBuffer=eA();function iA(e){return Object.prototype.toString.call(e)}function tA(e){return e<10?\"0\"+e.toString(10):e.toString(10)}var CRe=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function DRe(){var e=new Date,r=[tA(e.getHours()),tA(e.getMinutes()),tA(e.getSeconds())].join(\":\");return[e.getDate(),CRe[e.getMonth()],r].join(\" \")}ft.log=function(){console.log(\"%s - %s\",DRe(),ft.format.apply(ft,arguments))};ft.inherits=rs();ft._extend=function(e,r){if(!r||!gv(r))return e;for(var t=Object.keys(r),a=t.length;a--;)e[t[a]]=r[t[a]];return e};function Uae(e,r){return Object.prototype.hasOwnProperty.call(e,r)}var Bf=typeof Symbol!=\"undefined\"?Symbol(\"util.promisify.custom\"):void 0;ft.promisify=function(r){if(typeof r!=\"function\")throw new TypeError('The \"original\" argument must be of type Function');if(Bf&&r[Bf]){var t=r[Bf];if(typeof t!=\"function\")throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');return Object.defineProperty(t,Bf,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var a,n,i=new Promise(function(s,u){a=s,n=u}),o=[],l=0;l<arguments.length;l++)o.push(arguments[l]);o.push(function(s,u){s?n(s):a(u)});try{r.apply(this,o)}catch(s){n(s)}return i}return Object.setPrototypeOf(t,Object.getPrototypeOf(r)),Bf&&Object.defineProperty(t,Bf,{value:t,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(t,Iae(r))};ft.promisify.custom=Bf;function ERe(e,r){if(!e){var t=new Error(\"Promise was rejected with a falsy value\");t.reason=e,e=t}return r(e)}function PRe(e){if(typeof e!=\"function\")throw new TypeError('The \"original\" argument must be of type Function');function r(){for(var t=[],a=0;a<arguments.length;a++)t.push(arguments[a]);var n=t.pop();if(typeof n!=\"function\")throw new TypeError(\"The last argument must be of type Function\");var i=this,o=function(){return n.apply(i,arguments)};e.apply(this,t).then(function(l){process.nextTick(o.bind(null,null,l))},function(l){process.nextTick(ERe.bind(null,l,o))})}return Object.setPrototypeOf(r,Object.getPrototypeOf(e)),Object.defineProperties(r,Iae(e)),r}ft.callbackify=PRe});var Xae=z((VJe,Wae)=>{\"use strict\";function Gae(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),t.push.apply(t,a)}return t}function Yae(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?Gae(Object(t),!0).forEach(function(a){RRe(e,a,t[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Gae(Object(t)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))})}return e}function RRe(e,r,t){return r=jae(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function FRe(e,r){if(!(e instanceof r))throw new TypeError(\"Cannot call a class as a function\")}function Vae(e,r){for(var t=0;t<r.length;t++){var a=r[t];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(e,jae(a.key),a)}}function zRe(e,r,t){return r&&Vae(e.prototype,r),t&&Vae(e,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function jae(e){var r=NRe(e,\"string\");return typeof r==\"symbol\"?r:String(r)}function NRe(e,r){if(typeof e!=\"object\"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var a=t.call(e,r||\"default\");if(typeof a!=\"object\")return a;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(r===\"string\"?String:Number)(e)}var IRe=sv(),nb=IRe.Buffer,BRe=oA(),lA=BRe.inspect,ORe=lA&&lA.custom||\"inspect\";function HRe(e,r,t){nb.prototype.copy.call(e,r,t)}Wae.exports=(function(){function e(){FRe(this,e),this.head=null,this.tail=null,this.length=0}return zRe(e,[{key:\"push\",value:function(t){var a={data:t,next:null};this.length>0?this.tail.next=a:this.head=a,this.tail=a,++this.length}},{key:\"unshift\",value:function(t){var a={data:t,next:this.head};this.length===0&&(this.tail=a),this.head=a,++this.length}},{key:\"shift\",value:function(){if(this.length!==0){var t=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(t){if(this.length===0)return\"\";for(var a=this.head,n=\"\"+a.data;a=a.next;)n+=t+a.data;return n}},{key:\"concat\",value:function(t){if(this.length===0)return nb.alloc(0);for(var a=nb.allocUnsafe(t>>>0),n=this.head,i=0;n;)HRe(n.data,a,i),i+=n.data.length,n=n.next;return a}},{key:\"consume\",value:function(t,a){var n;return t<this.head.data.length?(n=this.head.data.slice(0,t),this.head.data=this.head.data.slice(t)):t===this.head.data.length?n=this.shift():n=a?this._getString(t):this._getBuffer(t),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var a=this.head,n=1,i=a.data;for(t-=i.length;a=a.next;){var o=a.data,l=t>o.length?o.length:t;if(l===o.length?i+=o:i+=o.slice(0,t),t-=l,t===0){l===o.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=o.slice(l));break}++n}return this.length-=n,i}},{key:\"_getBuffer\",value:function(t){var a=nb.allocUnsafe(t),n=this.head,i=1;for(n.data.copy(a),t-=n.data.length;n=n.next;){var o=n.data,l=t>o.length?o.length:t;if(o.copy(a,a.length-t,0,l),t-=l,t===0){l===o.length?(++i,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(l));break}++i}return this.length-=i,a}},{key:ORe,value:function(t,a){return lA(this,Yae(Yae({},a),{},{depth:0,customInspect:!1}))}}]),e})()});var uA=z((jJe,$ae)=>{\"use strict\";function URe(e,r){var t=this,a=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return a||n?(r?r(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(sA,this,e)):process.nextTick(sA,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(i){!r&&i?t._writableState?t._writableState.errorEmitted?process.nextTick(ib,t):(t._writableState.errorEmitted=!0,process.nextTick(Zae,t,i)):process.nextTick(Zae,t,i):r?(process.nextTick(ib,t),r(i)):process.nextTick(ib,t)}),this)}function Zae(e,r){sA(e,r),ib(e)}function ib(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit(\"close\")}function GRe(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function sA(e,r){e.emit(\"error\",r)}function YRe(e,r){var t=e._readableState,a=e._writableState;t&&t.autoDestroy||a&&a.autoDestroy?e.destroy(r):e.emit(\"error\",r)}$ae.exports={destroy:URe,undestroy:GRe,errorOrDestroy:YRe}});var Hf=z((WJe,Qae)=>{\"use strict\";function VRe(e,r){e.prototype=Object.create(r.prototype),e.prototype.constructor=e,e.__proto__=r}var Kae={};function fo(e,r,t){t||(t=Error);function a(i,o,l){return typeof r==\"string\"?r:r(i,o,l)}var n=(function(i){VRe(o,i);function o(l,s,u){return i.call(this,a(l,s,u))||this}return o})(t);n.prototype.name=t.name,n.prototype.code=e,Kae[e]=n}function Jae(e,r){if(Array.isArray(e)){var t=e.length;return e=e.map(function(a){return String(a)}),t>2?\"one of \".concat(r,\" \").concat(e.slice(0,t-1).join(\", \"),\", or \")+e[t-1]:t===2?\"one of \".concat(r,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(r,\" \").concat(e[0])}else return\"of \".concat(r,\" \").concat(String(e))}function jRe(e,r,t){return e.substr(!t||t<0?0:+t,r.length)===r}function WRe(e,r,t){return(t===void 0||t>e.length)&&(t=e.length),e.substring(t-r.length,t)===r}function XRe(e,r,t){return typeof t!=\"number\"&&(t=0),t+r.length>e.length?!1:e.indexOf(r,t)!==-1}fo(\"ERR_INVALID_OPT_VALUE\",function(e,r){return'The value \"'+r+'\" is invalid for option \"'+e+'\"'},TypeError);fo(\"ERR_INVALID_ARG_TYPE\",function(e,r,t){var a;typeof r==\"string\"&&jRe(r,\"not \")?(a=\"must not be\",r=r.replace(/^not /,\"\")):a=\"must be\";var n;if(WRe(e,\" argument\"))n=\"The \".concat(e,\" \").concat(a,\" \").concat(Jae(r,\"type\"));else{var i=XRe(e,\".\")?\"property\":\"argument\";n='The \"'.concat(e,'\" ').concat(i,\" \").concat(a,\" \").concat(Jae(r,\"type\"))}return n+=\". Received type \".concat(typeof t),n},TypeError);fo(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\");fo(\"ERR_METHOD_NOT_IMPLEMENTED\",function(e){return\"The \"+e+\" method is not implemented\"});fo(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\");fo(\"ERR_STREAM_DESTROYED\",function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"});fo(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\");fo(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\");fo(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\");fo(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError);fo(\"ERR_UNKNOWN_ENCODING\",function(e){return\"Unknown encoding: \"+e},TypeError);fo(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\");Qae.exports.codes=Kae});var fA=z((XJe,ene)=>{\"use strict\";var ZRe=Hf().codes.ERR_INVALID_OPT_VALUE;function $Re(e,r,t){return e.highWaterMark!=null?e.highWaterMark:r?e[t]:null}function JRe(e,r,t,a){var n=$Re(r,a,t);if(n!=null){if(!(isFinite(n)&&Math.floor(n)===n)||n<0){var i=a?t:\"highWaterMark\";throw new ZRe(i,n)}return Math.floor(n)}return e.objectMode?16:16*1024}ene.exports={getHighWaterMark:JRe}});var tne=z((ZJe,rne)=>{rne.exports=KRe;function KRe(e,r){if(cA(\"noDeprecation\"))return e;var t=!1;function a(){if(!t){if(cA(\"throwDeprecation\"))throw new Error(r);cA(\"traceDeprecation\")?console.trace(r):console.warn(r),t=!0}return e.apply(this,arguments)}return a}function cA(e){try{if(!window.localStorage)return!1}catch(t){return!1}var r=window.localStorage[e];return r==null?!1:String(r).toLowerCase()===\"true\"}});var dA=z(($Je,sne)=>{\"use strict\";sne.exports=Ta;function nne(e){var r=this;this.next=null,this.entry=null,this.finish=function(){MFe(r,e)}}var bv;Ta.WritableState=w2;var QRe={deprecate:tne()},ine=mT(),lb=sv().Buffer,eFe=(typeof window!=\"undefined\"||typeof window!=\"undefined\"?window:typeof self!=\"undefined\"?self:{}).Uint8Array||function(){};function rFe(e){return lb.from(e)}function tFe(e){return lb.isBuffer(e)||e instanceof eFe}var hA=uA(),aFe=fA(),nFe=aFe.getHighWaterMark,tu=Hf().codes,iFe=tu.ERR_INVALID_ARG_TYPE,oFe=tu.ERR_METHOD_NOT_IMPLEMENTED,lFe=tu.ERR_MULTIPLE_CALLBACK,sFe=tu.ERR_STREAM_CANNOT_PIPE,uFe=tu.ERR_STREAM_DESTROYED,fFe=tu.ERR_STREAM_NULL_VALUES,cFe=tu.ERR_STREAM_WRITE_AFTER_END,vFe=tu.ERR_UNKNOWN_ENCODING,xv=hA.errorOrDestroy;rs()(Ta,ine);function hFe(){}function w2(e,r,t){bv=bv||Uf(),e=e||{},typeof t!=\"boolean\"&&(t=r instanceof bv),this.objectMode=!!e.objectMode,t&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=nFe(this,e,\"writableHighWaterMark\",t),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=e.decodeStrings===!1;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(n){xFe(r,n)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new nne(this)}w2.prototype.getBuffer=function(){for(var r=this.bufferedRequest,t=[];r;)t.push(r),r=r.next;return t};(function(){try{Object.defineProperty(w2.prototype,\"buffer\",{get:QRe.deprecate(function(){return this.getBuffer()},\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}})();var ob;typeof Symbol==\"function\"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]==\"function\"?(ob=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ta,Symbol.hasInstance,{value:function(r){return ob.call(this,r)?!0:this!==Ta?!1:r&&r._writableState instanceof w2}})):ob=function(r){return r instanceof this};function Ta(e){bv=bv||Uf();var r=this instanceof bv;if(!r&&!ob.call(Ta,this))return new Ta(e);this._writableState=new w2(e,this,r),this.writable=!0,e&&(typeof e.write==\"function\"&&(this._write=e.write),typeof e.writev==\"function\"&&(this._writev=e.writev),typeof e.destroy==\"function\"&&(this._destroy=e.destroy),typeof e.final==\"function\"&&(this._final=e.final)),ine.call(this)}Ta.prototype.pipe=function(){xv(this,new sFe)};function dFe(e,r){var t=new cFe;xv(e,t),process.nextTick(r,t)}function pFe(e,r,t,a){var n;return t===null?n=new fFe:typeof t!=\"string\"&&!r.objectMode&&(n=new iFe(\"chunk\",[\"string\",\"Buffer\"],t)),n?(xv(e,n),process.nextTick(a,n),!1):!0}Ta.prototype.write=function(e,r,t){var a=this._writableState,n=!1,i=!a.objectMode&&tFe(e);return i&&!lb.isBuffer(e)&&(e=rFe(e)),typeof r==\"function\"&&(t=r,r=null),i?r=\"buffer\":r||(r=a.defaultEncoding),typeof t!=\"function\"&&(t=hFe),a.ending?dFe(this,t):(i||pFe(this,a,e,t))&&(a.pendingcb++,n=yFe(this,a,i,e,r,t)),n};Ta.prototype.cork=function(){this._writableState.corked++};Ta.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,!e.writing&&!e.corked&&!e.bufferProcessing&&e.bufferedRequest&&one(this,e))};Ta.prototype.setDefaultEncoding=function(r){if(typeof r==\"string\"&&(r=r.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((r+\"\").toLowerCase())>-1))throw new vFe(r);return this._writableState.defaultEncoding=r,this};Object.defineProperty(Ta.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function mFe(e,r,t){return!e.objectMode&&e.decodeStrings!==!1&&typeof r==\"string\"&&(r=lb.from(r,t)),r}Object.defineProperty(Ta.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function yFe(e,r,t,a,n,i){if(!t){var o=mFe(r,a,n);a!==o&&(t=!0,n=\"buffer\",a=o)}var l=r.objectMode?1:a.length;r.length+=l;var s=r.length<r.highWaterMark;if(s||(r.needDrain=!0),r.writing||r.corked){var u=r.lastBufferedRequest;r.lastBufferedRequest={chunk:a,encoding:n,isBuf:t,callback:i,next:null},u?u.next=r.lastBufferedRequest:r.bufferedRequest=r.lastBufferedRequest,r.bufferedRequestCount+=1}else vA(e,r,!1,l,a,n,i);return s}function vA(e,r,t,a,n,i,o){r.writelen=a,r.writecb=o,r.writing=!0,r.sync=!0,r.destroyed?r.onwrite(new uFe(\"write\")):t?e._writev(n,r.onwrite):e._write(n,i,r.onwrite),r.sync=!1}function gFe(e,r,t,a,n){--r.pendingcb,t?(process.nextTick(n,a),process.nextTick(_2,e,r),e._writableState.errorEmitted=!0,xv(e,a)):(n(a),e._writableState.errorEmitted=!0,xv(e,a),_2(e,r))}function bFe(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}function xFe(e,r){var t=e._writableState,a=t.sync,n=t.writecb;if(typeof n!=\"function\")throw new lFe;if(bFe(t),r)gFe(e,t,a,r,n);else{var i=lne(t)||e.destroyed;!i&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&one(e,t),a?process.nextTick(ane,e,t,i,n):ane(e,t,i,n)}}function ane(e,r,t,a){t||_Fe(e,r),r.pendingcb--,a(),_2(e,r)}function _Fe(e,r){r.length===0&&r.needDrain&&(r.needDrain=!1,e.emit(\"drain\"))}function one(e,r){r.bufferProcessing=!0;var t=r.bufferedRequest;if(e._writev&&t&&t.next){var a=r.bufferedRequestCount,n=new Array(a),i=r.corkedRequestsFree;i.entry=t;for(var o=0,l=!0;t;)n[o]=t,t.isBuf||(l=!1),t=t.next,o+=1;n.allBuffers=l,vA(e,r,!0,r.length,n,\"\",i.finish),r.pendingcb++,r.lastBufferedRequest=null,i.next?(r.corkedRequestsFree=i.next,i.next=null):r.corkedRequestsFree=new nne(r),r.bufferedRequestCount=0}else{for(;t;){var s=t.chunk,u=t.encoding,f=t.callback,c=r.objectMode?1:s.length;if(vA(e,r,!1,c,s,u,f),t=t.next,r.bufferedRequestCount--,r.writing)break}t===null&&(r.lastBufferedRequest=null)}r.bufferedRequest=t,r.bufferProcessing=!1}Ta.prototype._write=function(e,r,t){t(new oFe(\"_write()\"))};Ta.prototype._writev=null;Ta.prototype.end=function(e,r,t){var a=this._writableState;return typeof e==\"function\"?(t=e,e=null,r=null):typeof r==\"function\"&&(t=r,r=null),e!=null&&this.write(e,r),a.corked&&(a.corked=1,this.uncork()),a.ending||AFe(this,a,t),this};Object.defineProperty(Ta.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function lne(e){return e.ending&&e.length===0&&e.bufferedRequest===null&&!e.finished&&!e.writing}function wFe(e,r){e._final(function(t){r.pendingcb--,t&&xv(e,t),r.prefinished=!0,e.emit(\"prefinish\"),_2(e,r)})}function TFe(e,r){!r.prefinished&&!r.finalCalled&&(typeof e._final==\"function\"&&!r.destroyed?(r.pendingcb++,r.finalCalled=!0,process.nextTick(wFe,e,r)):(r.prefinished=!0,e.emit(\"prefinish\")))}function _2(e,r){var t=lne(r);if(t&&(TFe(e,r),r.pendingcb===0&&(r.finished=!0,e.emit(\"finish\"),r.autoDestroy))){var a=e._readableState;(!a||a.autoDestroy&&a.endEmitted)&&e.destroy()}return t}function AFe(e,r,t){r.ending=!0,_2(e,r),t&&(r.finished?process.nextTick(t):e.once(\"finish\",t)),r.ended=!0,e.writable=!1}function MFe(e,r,t){var a=e.entry;for(e.entry=null;a;){var n=a.callback;r.pendingcb--,n(t),a=a.next}r.corkedRequestsFree.next=e}Object.defineProperty(Ta.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(r){this._writableState&&(this._writableState.destroyed=r)}});Ta.prototype.destroy=hA.destroy;Ta.prototype._undestroy=hA.undestroy;Ta.prototype._destroy=function(e,r){r(e)}});var Uf=z((JJe,fne)=>{\"use strict\";var kFe=Object.keys||function(e){var r=[];for(var t in e)r.push(t);return r};fne.exports=Ml;var une=yA(),mA=dA();rs()(Ml,une);for(pA=kFe(mA.prototype),sb=0;sb<pA.length;sb++)ub=pA[sb],Ml.prototype[ub]||(Ml.prototype[ub]=mA.prototype[ub]);var pA,ub,sb;function Ml(e){if(!(this instanceof Ml))return new Ml(e);une.call(this,e),mA.call(this,e),this.allowHalfOpen=!0,e&&(e.readable===!1&&(this.readable=!1),e.writable===!1&&(this.writable=!1),e.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once(\"end\",SFe)))}Object.defineProperty(Ml.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});Object.defineProperty(Ml.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});Object.defineProperty(Ml.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}});function SFe(){this._writableState.ended||process.nextTick(qFe,this)}function qFe(e){e.end()}Object.defineProperty(Ml.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(r){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=r,this._writableState.destroyed=r)}})});var hne=z((gA,vne)=>{var fb=sv(),kl=fb.Buffer;function cne(e,r){for(var t in e)r[t]=e[t]}kl.from&&kl.alloc&&kl.allocUnsafe&&kl.allocUnsafeSlow?vne.exports=fb:(cne(fb,gA),gA.Buffer=Gf);function Gf(e,r,t){return kl(e,r,t)}Gf.prototype=Object.create(kl.prototype);cne(kl,Gf);Gf.from=function(e,r,t){if(typeof e==\"number\")throw new TypeError(\"Argument must not be a number\");return kl(e,r,t)};Gf.alloc=function(e,r,t){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");var a=kl(e);return r!==void 0?typeof t==\"string\"?a.fill(r,t):a.fill(r):a.fill(0),a};Gf.allocUnsafe=function(e){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");return kl(e)};Gf.allocUnsafeSlow=function(e){if(typeof e!=\"number\")throw new TypeError(\"Argument must be a number\");return fb.SlowBuffer(e)}});var _A=z(pne=>{\"use strict\";var xA=hne().Buffer,dne=xA.isEncoding||function(e){switch(e=\"\"+e,e&&e.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function LFe(e){if(!e)return\"utf8\";for(var r;;)switch(e){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return e;default:if(r)return;e=(\"\"+e).toLowerCase(),r=!0}}function CFe(e){var r=LFe(e);if(typeof r!=\"string\"&&(xA.isEncoding===dne||!dne(e)))throw new Error(\"Unknown encoding: \"+e);return r||e}pne.StringDecoder=T2;function T2(e){this.encoding=CFe(e);var r;switch(this.encoding){case\"utf16le\":this.text=zFe,this.end=NFe,r=4;break;case\"utf8\":this.fillLast=PFe,r=4;break;case\"base64\":this.text=IFe,this.end=BFe,r=3;break;default:this.write=OFe,this.end=HFe;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=xA.allocUnsafe(r)}T2.prototype.write=function(e){if(e.length===0)return\"\";var r,t;if(this.lastNeed){if(r=this.fillLast(e),r===void 0)return\"\";t=this.lastNeed,this.lastNeed=0}else t=0;return t<e.length?r?r+this.text(e,t):this.text(e,t):r||\"\"};T2.prototype.end=FFe;T2.prototype.text=RFe;T2.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length};function bA(e){return e<=127?0:e>>5===6?2:e>>4===14?3:e>>3===30?4:e>>6===2?-1:-2}function DFe(e,r,t){var a=r.length-1;if(a<t)return 0;var n=bA(r[a]);return n>=0?(n>0&&(e.lastNeed=n-1),n):--a<t||n===-2?0:(n=bA(r[a]),n>=0?(n>0&&(e.lastNeed=n-2),n):--a<t||n===-2?0:(n=bA(r[a]),n>=0?(n>0&&(n===2?n=0:e.lastNeed=n-3),n):0))}function EFe(e,r,t){if((r[0]&192)!==128)return e.lastNeed=0,\"\\uFFFD\";if(e.lastNeed>1&&r.length>1){if((r[1]&192)!==128)return e.lastNeed=1,\"\\uFFFD\";if(e.lastNeed>2&&r.length>2&&(r[2]&192)!==128)return e.lastNeed=2,\"\\uFFFD\"}}function PFe(e){var r=this.lastTotal-this.lastNeed,t=EFe(this,e,r);if(t!==void 0)return t;if(this.lastNeed<=e.length)return e.copy(this.lastChar,r,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,r,0,e.length),this.lastNeed-=e.length}function RFe(e,r){var t=DFe(this,e,r);if(!this.lastNeed)return e.toString(\"utf8\",r);this.lastTotal=t;var a=e.length-(t-this.lastNeed);return e.copy(this.lastChar,0,a),e.toString(\"utf8\",r,a)}function FFe(e){var r=e&&e.length?this.write(e):\"\";return this.lastNeed?r+\"\\uFFFD\":r}function zFe(e,r){if((e.length-r)%2===0){var t=e.toString(\"utf16le\",r);if(t){var a=t.charCodeAt(t.length-1);if(a>=55296&&a<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],t.slice(0,-1)}return t}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",r,e.length-1)}function NFe(e){var r=e&&e.length?this.write(e):\"\";if(this.lastNeed){var t=this.lastTotal-this.lastNeed;return r+this.lastChar.toString(\"utf16le\",0,t)}return r}function IFe(e,r){var t=(e.length-r)%3;return t===0?e.toString(\"base64\",r):(this.lastNeed=3-t,this.lastTotal=3,t===1?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",r,e.length-t))}function BFe(e){var r=e&&e.length?this.write(e):\"\";return this.lastNeed?r+this.lastChar.toString(\"base64\",0,3-this.lastNeed):r}function OFe(e){return e.toString(this.encoding)}function HFe(e){return e&&e.length?this.write(e):\"\"}});var cb=z((QJe,gne)=>{\"use strict\";var mne=Hf().codes.ERR_STREAM_PREMATURE_CLOSE;function UFe(e){var r=!1;return function(){if(!r){r=!0;for(var t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];e.apply(this,a)}}}function GFe(){}function YFe(e){return e.setHeader&&typeof e.abort==\"function\"}function yne(e,r,t){if(typeof r==\"function\")return yne(e,null,r);r||(r={}),t=UFe(t||GFe);var a=r.readable||r.readable!==!1&&e.readable,n=r.writable||r.writable!==!1&&e.writable,i=function(){e.writable||l()},o=e._writableState&&e._writableState.finished,l=function(){n=!1,o=!0,a||t.call(e)},s=e._readableState&&e._readableState.endEmitted,u=function(){a=!1,s=!0,n||t.call(e)},f=function(p){t.call(e,p)},c=function(){var p;if(a&&!s)return(!e._readableState||!e._readableState.ended)&&(p=new mne),t.call(e,p);if(n&&!o)return(!e._writableState||!e._writableState.ended)&&(p=new mne),t.call(e,p)},v=function(){e.req.on(\"finish\",l)};return YFe(e)?(e.on(\"complete\",l),e.on(\"abort\",c),e.req?v():e.on(\"request\",v)):n&&!e._writableState&&(e.on(\"end\",i),e.on(\"close\",i)),e.on(\"end\",u),e.on(\"finish\",l),r.error!==!1&&e.on(\"error\",f),e.on(\"close\",c),function(){e.removeListener(\"complete\",l),e.removeListener(\"abort\",c),e.removeListener(\"request\",v),e.req&&e.req.removeListener(\"finish\",l),e.removeListener(\"end\",i),e.removeListener(\"close\",i),e.removeListener(\"finish\",l),e.removeListener(\"end\",u),e.removeListener(\"error\",f),e.removeListener(\"close\",c)}}gne.exports=yne});var xne=z((eKe,bne)=>{\"use strict\";var vb;function au(e,r,t){return r=VFe(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function VFe(e){var r=jFe(e,\"string\");return typeof r==\"symbol\"?r:String(r)}function jFe(e,r){if(typeof e!=\"object\"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var a=t.call(e,r||\"default\");if(typeof a!=\"object\")return a;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(r===\"string\"?String:Number)(e)}var WFe=cb(),nu=Symbol(\"lastResolve\"),Yf=Symbol(\"lastReject\"),A2=Symbol(\"error\"),hb=Symbol(\"ended\"),Vf=Symbol(\"lastPromise\"),wA=Symbol(\"handlePromise\"),jf=Symbol(\"stream\");function iu(e,r){return{value:e,done:r}}function XFe(e){var r=e[nu];if(r!==null){var t=e[jf].read();t!==null&&(e[Vf]=null,e[nu]=null,e[Yf]=null,r(iu(t,!1)))}}function ZFe(e){process.nextTick(XFe,e)}function $Fe(e,r){return function(t,a){e.then(function(){if(r[hb]){t(iu(void 0,!0));return}r[wA](t,a)},a)}}var JFe=Object.getPrototypeOf(function(){}),KFe=Object.setPrototypeOf((vb={get stream(){return this[jf]},next:function(){var r=this,t=this[A2];if(t!==null)return Promise.reject(t);if(this[hb])return Promise.resolve(iu(void 0,!0));if(this[jf].destroyed)return new Promise(function(o,l){process.nextTick(function(){r[A2]?l(r[A2]):o(iu(void 0,!0))})});var a=this[Vf],n;if(a)n=new Promise($Fe(a,this));else{var i=this[jf].read();if(i!==null)return Promise.resolve(iu(i,!1));n=new Promise(this[wA])}return this[Vf]=n,n}},au(vb,Symbol.asyncIterator,function(){return this}),au(vb,\"return\",function(){var r=this;return new Promise(function(t,a){r[jf].destroy(null,function(n){if(n){a(n);return}t(iu(void 0,!0))})})}),vb),JFe),QFe=function(r){var t,a=Object.create(KFe,(t={},au(t,jf,{value:r,writable:!0}),au(t,nu,{value:null,writable:!0}),au(t,Yf,{value:null,writable:!0}),au(t,A2,{value:null,writable:!0}),au(t,hb,{value:r._readableState.endEmitted,writable:!0}),au(t,wA,{value:function(i,o){var l=a[jf].read();l?(a[Vf]=null,a[nu]=null,a[Yf]=null,i(iu(l,!1))):(a[nu]=i,a[Yf]=o)},writable:!0}),t));return a[Vf]=null,WFe(r,function(n){if(n&&n.code!==\"ERR_STREAM_PREMATURE_CLOSE\"){var i=a[Yf];i!==null&&(a[Vf]=null,a[nu]=null,a[Yf]=null,i(n)),a[A2]=n;return}var o=a[nu];o!==null&&(a[Vf]=null,a[nu]=null,a[Yf]=null,o(iu(void 0,!0))),a[hb]=!0}),r.on(\"readable\",ZFe.bind(null,a)),a};bne.exports=QFe});var wne=z((rKe,_ne)=>{_ne.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}});var yA=z((aKe,Ene)=>{\"use strict\";Ene.exports=Tt;var _v;Tt.ReadableState=kne;var tKe=Bu().EventEmitter,Mne=function(r,t){return r.listeners(t).length},k2=mT(),db=sv().Buffer,eze=(typeof window!=\"undefined\"||typeof window!=\"undefined\"?window:typeof self!=\"undefined\"?self:{}).Uint8Array||function(){};function rze(e){return db.from(e)}function tze(e){return db.isBuffer(e)||e instanceof eze}var TA=oA(),at;TA&&TA.debuglog?at=TA.debuglog(\"stream\"):at=function(){};var aze=Xae(),CA=uA(),nze=fA(),ize=nze.getHighWaterMark,pb=Hf().codes,oze=pb.ERR_INVALID_ARG_TYPE,lze=pb.ERR_STREAM_PUSH_AFTER_EOF,sze=pb.ERR_METHOD_NOT_IMPLEMENTED,uze=pb.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,wv,AA,MA;rs()(Tt,k2);var M2=CA.errorOrDestroy,kA=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function fze(e,r,t){if(typeof e.prependListener==\"function\")return e.prependListener(r,t);!e._events||!e._events[r]?e.on(r,t):Array.isArray(e._events[r])?e._events[r].unshift(t):e._events[r]=[t,e._events[r]]}function kne(e,r,t){_v=_v||Uf(),e=e||{},typeof t!=\"boolean\"&&(t=r instanceof _v),this.objectMode=!!e.objectMode,t&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=ize(this,e,\"readableHighWaterMark\",t),this.buffer=new aze,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=e.emitClose!==!1,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(wv||(wv=_A().StringDecoder),this.decoder=new wv(e.encoding),this.encoding=e.encoding)}function Tt(e){if(_v=_v||Uf(),!(this instanceof Tt))return new Tt(e);var r=this instanceof _v;this._readableState=new kne(e,this,r),this.readable=!0,e&&(typeof e.read==\"function\"&&(this._read=e.read),typeof e.destroy==\"function\"&&(this._destroy=e.destroy)),k2.call(this)}Object.defineProperty(Tt.prototype,\"destroyed\",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(r){this._readableState&&(this._readableState.destroyed=r)}});Tt.prototype.destroy=CA.destroy;Tt.prototype._undestroy=CA.undestroy;Tt.prototype._destroy=function(e,r){r(e)};Tt.prototype.push=function(e,r){var t=this._readableState,a;return t.objectMode?a=!0:typeof e==\"string\"&&(r=r||t.defaultEncoding,r!==t.encoding&&(e=db.from(e,r),r=\"\"),a=!0),Sne(this,e,r,!1,a)};Tt.prototype.unshift=function(e){return Sne(this,e,null,!0,!1)};function Sne(e,r,t,a,n){at(\"readableAddChunk\",r);var i=e._readableState;if(r===null)i.reading=!1,hze(e,i);else{var o;if(n||(o=cze(i,r)),o)M2(e,o);else if(i.objectMode||r&&r.length>0)if(typeof r!=\"string\"&&!i.objectMode&&Object.getPrototypeOf(r)!==db.prototype&&(r=rze(r)),a)i.endEmitted?M2(e,new uze):SA(e,i,r,!0);else if(i.ended)M2(e,new lze);else{if(i.destroyed)return!1;i.reading=!1,i.decoder&&!t?(r=i.decoder.write(r),i.objectMode||r.length!==0?SA(e,i,r,!1):LA(e,i)):SA(e,i,r,!1)}else a||(i.reading=!1,LA(e,i))}return!i.ended&&(i.length<i.highWaterMark||i.length===0)}function SA(e,r,t,a){r.flowing&&r.length===0&&!r.sync?(r.awaitDrain=0,e.emit(\"data\",t)):(r.length+=r.objectMode?1:t.length,a?r.buffer.unshift(t):r.buffer.push(t),r.needReadable&&mb(e)),LA(e,r)}function cze(e,r){var t;return!tze(r)&&typeof r!=\"string\"&&r!==void 0&&!e.objectMode&&(t=new oze(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],r)),t}Tt.prototype.isPaused=function(){return this._readableState.flowing===!1};Tt.prototype.setEncoding=function(e){wv||(wv=_A().StringDecoder);var r=new wv(e);this._readableState.decoder=r,this._readableState.encoding=this._readableState.decoder.encoding;for(var t=this._readableState.buffer.head,a=\"\";t!==null;)a+=r.write(t.data),t=t.next;return this._readableState.buffer.clear(),a!==\"\"&&this._readableState.buffer.push(a),this._readableState.length=a.length,this};var Tne=1073741824;function vze(e){return e>=Tne?e=Tne:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function Ane(e,r){return e<=0||r.length===0&&r.ended?0:r.objectMode?1:e!==e?r.flowing&&r.length?r.buffer.head.data.length:r.length:(e>r.highWaterMark&&(r.highWaterMark=vze(e)),e<=r.length?e:r.ended?r.length:(r.needReadable=!0,0))}Tt.prototype.read=function(e){at(\"read\",e),e=parseInt(e,10);var r=this._readableState,t=e;if(e!==0&&(r.emittedReadable=!1),e===0&&r.needReadable&&((r.highWaterMark!==0?r.length>=r.highWaterMark:r.length>0)||r.ended))return at(\"read: emitReadable\",r.length,r.ended),r.length===0&&r.ended?qA(this):mb(this),null;if(e=Ane(e,r),e===0&&r.ended)return r.length===0&&qA(this),null;var a=r.needReadable;at(\"need readable\",a),(r.length===0||r.length-e<r.highWaterMark)&&(a=!0,at(\"length less than watermark\",a)),r.ended||r.reading?(a=!1,at(\"reading or ended\",a)):a&&(at(\"do read\"),r.reading=!0,r.sync=!0,r.length===0&&(r.needReadable=!0),this._read(r.highWaterMark),r.sync=!1,r.reading||(e=Ane(t,r)));var n;return e>0?n=Cne(e,r):n=null,n===null?(r.needReadable=r.length<=r.highWaterMark,e=0):(r.length-=e,r.awaitDrain=0),r.length===0&&(r.ended||(r.needReadable=!0),t!==e&&r.ended&&qA(this)),n!==null&&this.emit(\"data\",n),n};function hze(e,r){if(at(\"onEofChunk\"),!r.ended){if(r.decoder){var t=r.decoder.end();t&&t.length&&(r.buffer.push(t),r.length+=r.objectMode?1:t.length)}r.ended=!0,r.sync?mb(e):(r.needReadable=!1,r.emittedReadable||(r.emittedReadable=!0,qne(e)))}}function mb(e){var r=e._readableState;at(\"emitReadable\",r.needReadable,r.emittedReadable),r.needReadable=!1,r.emittedReadable||(at(\"emitReadable\",r.flowing),r.emittedReadable=!0,process.nextTick(qne,e))}function qne(e){var r=e._readableState;at(\"emitReadable_\",r.destroyed,r.length,r.ended),!r.destroyed&&(r.length||r.ended)&&(e.emit(\"readable\"),r.emittedReadable=!1),r.needReadable=!r.flowing&&!r.ended&&r.length<=r.highWaterMark,DA(e)}function LA(e,r){r.readingMore||(r.readingMore=!0,process.nextTick(dze,e,r))}function dze(e,r){for(;!r.reading&&!r.ended&&(r.length<r.highWaterMark||r.flowing&&r.length===0);){var t=r.length;if(at(\"maybeReadMore read 0\"),e.read(0),t===r.length)break}r.readingMore=!1}Tt.prototype._read=function(e){M2(this,new sze(\"_read()\"))};Tt.prototype.pipe=function(e,r){var t=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e);break}a.pipesCount+=1,at(\"pipe count=%d opts=%j\",a.pipesCount,r);var n=(!r||r.end!==!1)&&e!==process.stdout&&e!==process.stderr,i=n?l:y;a.endEmitted?process.nextTick(i):t.once(\"end\",i),e.on(\"unpipe\",o);function o(m,b){at(\"onunpipe\"),m===t&&b&&b.hasUnpiped===!1&&(b.hasUnpiped=!0,f())}function l(){at(\"onend\"),e.end()}var s=pze(t);e.on(\"drain\",s);var u=!1;function f(){at(\"cleanup\"),e.removeListener(\"close\",d),e.removeListener(\"finish\",p),e.removeListener(\"drain\",s),e.removeListener(\"error\",v),e.removeListener(\"unpipe\",o),t.removeListener(\"end\",l),t.removeListener(\"end\",y),t.removeListener(\"data\",c),u=!0,a.awaitDrain&&(!e._writableState||e._writableState.needDrain)&&s()}t.on(\"data\",c);function c(m){at(\"ondata\");var b=e.write(m);at(\"dest.write\",b),b===!1&&((a.pipesCount===1&&a.pipes===e||a.pipesCount>1&&Dne(a.pipes,e)!==-1)&&!u&&(at(\"false write response, pause\",a.awaitDrain),a.awaitDrain++),t.pause())}function v(m){at(\"onerror\",m),y(),e.removeListener(\"error\",v),Mne(e,\"error\")===0&&M2(e,m)}fze(e,\"error\",v);function d(){e.removeListener(\"finish\",p),y()}e.once(\"close\",d);function p(){at(\"onfinish\"),e.removeListener(\"close\",d),y()}e.once(\"finish\",p);function y(){at(\"unpipe\"),t.unpipe(e)}return e.emit(\"pipe\",t),a.flowing||(at(\"pipe resume\"),t.resume()),e};function pze(e){return function(){var t=e._readableState;at(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&Mne(e,\"data\")&&(t.flowing=!0,DA(e))}}Tt.prototype.unpipe=function(e){var r=this._readableState,t={hasUnpiped:!1};if(r.pipesCount===0)return this;if(r.pipesCount===1)return e&&e!==r.pipes?this:(e||(e=r.pipes),r.pipes=null,r.pipesCount=0,r.flowing=!1,e&&e.emit(\"unpipe\",this,t),this);if(!e){var a=r.pipes,n=r.pipesCount;r.pipes=null,r.pipesCount=0,r.flowing=!1;for(var i=0;i<n;i++)a[i].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=Dne(r.pipes,e);return o===-1?this:(r.pipes.splice(o,1),r.pipesCount-=1,r.pipesCount===1&&(r.pipes=r.pipes[0]),e.emit(\"unpipe\",this,t),this)};Tt.prototype.on=function(e,r){var t=k2.prototype.on.call(this,e,r),a=this._readableState;return e===\"data\"?(a.readableListening=this.listenerCount(\"readable\")>0,a.flowing!==!1&&this.resume()):e===\"readable\"&&!a.endEmitted&&!a.readableListening&&(a.readableListening=a.needReadable=!0,a.flowing=!1,a.emittedReadable=!1,at(\"on readable\",a.length,a.reading),a.length?mb(this):a.reading||process.nextTick(mze,this)),t};Tt.prototype.addListener=Tt.prototype.on;Tt.prototype.removeListener=function(e,r){var t=k2.prototype.removeListener.call(this,e,r);return e===\"readable\"&&process.nextTick(Lne,this),t};Tt.prototype.removeAllListeners=function(e){var r=k2.prototype.removeAllListeners.apply(this,arguments);return(e===\"readable\"||e===void 0)&&process.nextTick(Lne,this),r};function Lne(e){var r=e._readableState;r.readableListening=e.listenerCount(\"readable\")>0,r.resumeScheduled&&!r.paused?r.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function mze(e){at(\"readable nexttick read 0\"),e.read(0)}Tt.prototype.resume=function(){var e=this._readableState;return e.flowing||(at(\"resume\"),e.flowing=!e.readableListening,yze(this,e)),e.paused=!1,this};function yze(e,r){r.resumeScheduled||(r.resumeScheduled=!0,process.nextTick(gze,e,r))}function gze(e,r){at(\"resume\",r.reading),r.reading||e.read(0),r.resumeScheduled=!1,e.emit(\"resume\"),DA(e),r.flowing&&!r.reading&&e.read(0)}Tt.prototype.pause=function(){return at(\"call pause flowing=%j\",this._readableState.flowing),this._readableState.flowing!==!1&&(at(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this};function DA(e){var r=e._readableState;for(at(\"flow\",r.flowing);r.flowing&&e.read()!==null;);}Tt.prototype.wrap=function(e){var r=this,t=this._readableState,a=!1;e.on(\"end\",function(){if(at(\"wrapped end\"),t.decoder&&!t.ended){var o=t.decoder.end();o&&o.length&&r.push(o)}r.push(null)}),e.on(\"data\",function(o){if(at(\"wrapped data\"),t.decoder&&(o=t.decoder.write(o)),!(t.objectMode&&o==null)&&!(!t.objectMode&&(!o||!o.length))){var l=r.push(o);l||(a=!0,e.pause())}});for(var n in e)this[n]===void 0&&typeof e[n]==\"function\"&&(this[n]=(function(l){return function(){return e[l].apply(e,arguments)}})(n));for(var i=0;i<kA.length;i++)e.on(kA[i],this.emit.bind(this,kA[i]));return this._read=function(o){at(\"wrapped _read\",o),a&&(a=!1,e.resume())},this};typeof Symbol==\"function\"&&(Tt.prototype[Symbol.asyncIterator]=function(){return AA===void 0&&(AA=xne()),AA(this)});Object.defineProperty(Tt.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});Object.defineProperty(Tt.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}});Object.defineProperty(Tt.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(r){this._readableState&&(this._readableState.flowing=r)}});Tt._fromList=Cne;Object.defineProperty(Tt.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}});function Cne(e,r){if(r.length===0)return null;var t;return r.objectMode?t=r.buffer.shift():!e||e>=r.length?(r.decoder?t=r.buffer.join(\"\"):r.buffer.length===1?t=r.buffer.first():t=r.buffer.concat(r.length),r.buffer.clear()):t=r.buffer.consume(e,r.decoder),t}function qA(e){var r=e._readableState;at(\"endReadable\",r.endEmitted),r.endEmitted||(r.ended=!0,process.nextTick(bze,r,e))}function bze(e,r){if(at(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&e.length===0&&(e.endEmitted=!0,r.readable=!1,r.emit(\"end\"),e.autoDestroy)){var t=r._writableState;(!t||t.autoDestroy&&t.finished)&&r.destroy()}}typeof Symbol==\"function\"&&(Tt.from=function(e,r){return MA===void 0&&(MA=wne()),MA(Tt,e,r)});function Dne(e,r){for(var t=0,a=e.length;t<a;t++)if(e[t]===r)return t;return-1}});var EA=z((nKe,Rne)=>{\"use strict\";Rne.exports=as;var yb=Hf().codes,xze=yb.ERR_METHOD_NOT_IMPLEMENTED,_ze=yb.ERR_MULTIPLE_CALLBACK,wze=yb.ERR_TRANSFORM_ALREADY_TRANSFORMING,Tze=yb.ERR_TRANSFORM_WITH_LENGTH_0,gb=Uf();rs()(as,gb);function Aze(e,r){var t=this._transformState;t.transforming=!1;var a=t.writecb;if(a===null)return this.emit(\"error\",new _ze);t.writechunk=null,t.writecb=null,r!=null&&this.push(r),a(e);var n=this._readableState;n.reading=!1,(n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}function as(e){if(!(this instanceof as))return new as(e);gb.call(this,e),this._transformState={afterTransform:Aze.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(typeof e.transform==\"function\"&&(this._transform=e.transform),typeof e.flush==\"function\"&&(this._flush=e.flush)),this.on(\"prefinish\",Mze)}function Mze(){var e=this;typeof this._flush==\"function\"&&!this._readableState.destroyed?this._flush(function(r,t){Pne(e,r,t)}):Pne(this,null,null)}as.prototype.push=function(e,r){return this._transformState.needTransform=!1,gb.prototype.push.call(this,e,r)};as.prototype._transform=function(e,r,t){t(new xze(\"_transform()\"))};as.prototype._write=function(e,r,t){var a=this._transformState;if(a.writecb=t,a.writechunk=e,a.writeencoding=r,!a.transforming){var n=this._readableState;(a.needTransform||n.needReadable||n.length<n.highWaterMark)&&this._read(n.highWaterMark)}};as.prototype._read=function(e){var r=this._transformState;r.writechunk!==null&&!r.transforming?(r.transforming=!0,this._transform(r.writechunk,r.writeencoding,r.afterTransform)):r.needTransform=!0};as.prototype._destroy=function(e,r){gb.prototype._destroy.call(this,e,function(t){r(t)})};function Pne(e,r,t){if(r)return e.emit(\"error\",r);if(t!=null&&e.push(t),e._writableState.length)throw new Tze;if(e._transformState.transforming)throw new wze;return e.push(null)}});var Nne=z((iKe,zne)=>{\"use strict\";zne.exports=S2;var Fne=EA();rs()(S2,Fne);function S2(e){if(!(this instanceof S2))return new S2(e);Fne.call(this,e)}S2.prototype._transform=function(e,r,t){t(null,e)}});var Une=z((oKe,Hne)=>{\"use strict\";var PA;function kze(e){var r=!1;return function(){r||(r=!0,e.apply(void 0,arguments))}}var One=Hf().codes,Sze=One.ERR_MISSING_ARGS,qze=One.ERR_STREAM_DESTROYED;function Ine(e){if(e)throw e}function Lze(e){return e.setHeader&&typeof e.abort==\"function\"}function Cze(e,r,t,a){a=kze(a);var n=!1;e.on(\"close\",function(){n=!0}),PA===void 0&&(PA=cb()),PA(e,{readable:r,writable:t},function(o){if(o)return a(o);n=!0,a()});var i=!1;return function(o){if(!n&&!i){if(i=!0,Lze(e))return e.abort();if(typeof e.destroy==\"function\")return e.destroy();a(o||new qze(\"pipe\"))}}}function Bne(e){e()}function Dze(e,r){return e.pipe(r)}function Eze(e){return!e.length||typeof e[e.length-1]!=\"function\"?Ine:e.pop()}function Pze(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];var a=Eze(r);if(Array.isArray(r[0])&&(r=r[0]),r.length<2)throw new Sze(\"streams\");var n,i=r.map(function(o,l){var s=l<r.length-1,u=l>0;return Cze(o,s,u,function(f){n||(n=f),f&&i.forEach(Bne),!s&&(i.forEach(Bne),a(n))})});return r.reduce(Dze)}Hne.exports=Pze});var Yne=z((lKe,Gne)=>{Gne.exports=co;var RA=Bu().EventEmitter,Rze=rs();Rze(co,RA);co.Readable=yA();co.Writable=dA();co.Duplex=Uf();co.Transform=EA();co.PassThrough=Nne();co.finished=cb();co.pipeline=Une();co.Stream=co;function co(){RA.call(this)}co.prototype.pipe=function(e,r){var t=this;function a(f){e.writable&&e.write(f)===!1&&t.pause&&t.pause()}t.on(\"data\",a);function n(){t.readable&&t.resume&&t.resume()}e.on(\"drain\",n),!e._isStdio&&(!r||r.end!==!1)&&(t.on(\"end\",o),t.on(\"close\",l));var i=!1;function o(){i||(i=!0,e.end())}function l(){i||(i=!0,typeof e.destroy==\"function\"&&e.destroy())}function s(f){if(u(),RA.listenerCount(this,\"error\")===0)throw f}t.on(\"error\",s),e.on(\"error\",s);function u(){t.removeListener(\"data\",a),e.removeListener(\"drain\",n),t.removeListener(\"end\",o),t.removeListener(\"close\",l),t.removeListener(\"error\",s),e.removeListener(\"error\",s),t.removeListener(\"end\",u),t.removeListener(\"close\",u),e.removeListener(\"close\",u)}return t.on(\"end\",u),t.on(\"close\",u),e.on(\"close\",u),e.emit(\"pipe\",t),e}});var Av=z(ct=>{var Vne=Object.getOwnPropertyDescriptors||function(r){for(var t=Object.keys(r),a={},n=0;n<t.length;n++)a[t[n]]=Object.getOwnPropertyDescriptor(r,t[n]);return a},Fze=/%[sdj%]/g;ct.format=function(e){if(!Mb(e)){for(var r=[],t=0;t<arguments.length;t++)r.push(ou(arguments[t]));return r.join(\" \")}for(var t=1,a=arguments,n=a.length,i=String(e).replace(Fze,function(l){if(l===\"%%\")return\"%\";if(t>=n)return l;switch(l){case\"%s\":return String(a[t++]);case\"%d\":return Number(a[t++]);case\"%j\":try{return JSON.stringify(a[t++])}catch(s){return\"[Circular]\"}default:return l}}),o=a[t];t<n;o=a[++t])Ab(o)||!Tv(o)?i+=\" \"+o:i+=\" \"+ou(o);return i};ct.deprecate=function(e,r){if(typeof process!=\"undefined\"&&process.noDeprecation===!0)return e;if(typeof process==\"undefined\")return function(){return ct.deprecate(e,r).apply(this,arguments)};var t=!1;function a(){if(!t){if(process.throwDeprecation)throw new Error(r);process.traceDeprecation?console.trace(r):console.error(r),t=!0}return e.apply(this,arguments)}return a};var bb={},jne=/^$/;xb=\"false\",xb=xb.replace(/[|\\\\{}()[\\]^$+?.]/g,\"\\\\$&\").replace(/\\*/g,\".*\").replace(/,/g,\"$|^\").toUpperCase(),jne=new RegExp(\"^\"+xb+\"$\",\"i\");var xb;ct.debuglog=function(e){if(e=e.toUpperCase(),!bb[e])if(jne.test(e)){var r=process.pid;bb[e]=function(){var t=ct.format.apply(ct,arguments);console.error(\"%s %d: %s\",e,r,t)}}else bb[e]=function(){};return bb[e]};function ou(e,r){var t={seen:[],stylize:Nze};return arguments.length>=3&&(t.depth=arguments[2]),arguments.length>=4&&(t.colors=arguments[3]),IA(r)?t.showHidden=r:r&&ct._extend(t,r),Xf(t.showHidden)&&(t.showHidden=!1),Xf(t.depth)&&(t.depth=2),Xf(t.colors)&&(t.colors=!1),Xf(t.customInspect)&&(t.customInspect=!0),t.colors&&(t.stylize=zze),wb(t,e,t.depth)}ct.inspect=ou;ou.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]};ou.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"};function zze(e,r){var t=ou.styles[r];return t?\"\\x1B[\"+ou.colors[t][0]+\"m\"+e+\"\\x1B[\"+ou.colors[t][1]+\"m\":e}function Nze(e,r){return e}function Ize(e){var r={};return e.forEach(function(t,a){r[t]=!0}),r}function wb(e,r,t){if(e.customInspect&&r&&_b(r.inspect)&&r.inspect!==ct.inspect&&!(r.constructor&&r.constructor.prototype===r)){var a=r.inspect(t,e);return Mb(a)||(a=wb(e,a,t)),a}var n=Bze(e,r);if(n)return n;var i=Object.keys(r),o=Ize(i);if(e.showHidden&&(i=Object.getOwnPropertyNames(r)),L2(r)&&(i.indexOf(\"message\")>=0||i.indexOf(\"description\")>=0))return FA(r);if(i.length===0){if(_b(r)){var l=r.name?\": \"+r.name:\"\";return e.stylize(\"[Function\"+l+\"]\",\"special\")}if(q2(r))return e.stylize(RegExp.prototype.toString.call(r),\"regexp\");if(Tb(r))return e.stylize(Date.prototype.toString.call(r),\"date\");if(L2(r))return FA(r)}var s=\"\",u=!1,f=[\"{\",\"}\"];if(Wne(r)&&(u=!0,f=[\"[\",\"]\"]),_b(r)){var c=r.name?\": \"+r.name:\"\";s=\" [Function\"+c+\"]\"}if(q2(r)&&(s=\" \"+RegExp.prototype.toString.call(r)),Tb(r)&&(s=\" \"+Date.prototype.toUTCString.call(r)),L2(r)&&(s=\" \"+FA(r)),i.length===0&&(!u||r.length==0))return f[0]+s+f[1];if(t<0)return q2(r)?e.stylize(RegExp.prototype.toString.call(r),\"regexp\"):e.stylize(\"[Object]\",\"special\");e.seen.push(r);var v;return u?v=Oze(e,r,t,o,i):v=i.map(function(d){return NA(e,r,t,o,d,u)}),e.seen.pop(),Hze(v,s,f)}function Bze(e,r){if(Xf(r))return e.stylize(\"undefined\",\"undefined\");if(Mb(r)){var t=\"'\"+JSON.stringify(r).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(t,\"string\")}if(Xne(r))return e.stylize(\"\"+r,\"number\");if(IA(r))return e.stylize(\"\"+r,\"boolean\");if(Ab(r))return e.stylize(\"null\",\"null\")}function FA(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function Oze(e,r,t,a,n){for(var i=[],o=0,l=r.length;o<l;++o)Zne(r,String(o))?i.push(NA(e,r,t,a,String(o),!0)):i.push(\"\");return n.forEach(function(s){s.match(/^\\d+$/)||i.push(NA(e,r,t,a,s,!0))}),i}function NA(e,r,t,a,n,i){var o,l,s;if(s=Object.getOwnPropertyDescriptor(r,n)||{value:r[n]},s.get?s.set?l=e.stylize(\"[Getter/Setter]\",\"special\"):l=e.stylize(\"[Getter]\",\"special\"):s.set&&(l=e.stylize(\"[Setter]\",\"special\")),Zne(a,n)||(o=\"[\"+n+\"]\"),l||(e.seen.indexOf(s.value)<0?(Ab(t)?l=wb(e,s.value,null):l=wb(e,s.value,t-1),l.indexOf(`\n`)>-1&&(i?l=l.split(`\n`).map(function(u){return\"  \"+u}).join(`\n`).slice(2):l=`\n`+l.split(`\n`).map(function(u){return\"   \"+u}).join(`\n`))):l=e.stylize(\"[Circular]\",\"special\")),Xf(o)){if(i&&n.match(/^\\d+$/))return l;o=JSON.stringify(\"\"+n),o.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.slice(1,-1),o=e.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=e.stylize(o,\"string\"))}return o+\": \"+l}function Hze(e,r,t){var a=0,n=e.reduce(function(i,o){return a++,o.indexOf(`\n`)>=0&&a++,i+o.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0);return n>60?t[0]+(r===\"\"?\"\":r+`\n `)+\" \"+e.join(`,\n  `)+\" \"+t[1]:t[0]+r+\" \"+e.join(\", \")+\" \"+t[1]}ct.types=QT();function Wne(e){return Array.isArray(e)}ct.isArray=Wne;function IA(e){return typeof e==\"boolean\"}ct.isBoolean=IA;function Ab(e){return e===null}ct.isNull=Ab;function Uze(e){return e==null}ct.isNullOrUndefined=Uze;function Xne(e){return typeof e==\"number\"}ct.isNumber=Xne;function Mb(e){return typeof e==\"string\"}ct.isString=Mb;function Gze(e){return typeof e==\"symbol\"}ct.isSymbol=Gze;function Xf(e){return e===void 0}ct.isUndefined=Xf;function q2(e){return Tv(e)&&BA(e)===\"[object RegExp]\"}ct.isRegExp=q2;ct.types.isRegExp=q2;function Tv(e){return typeof e==\"object\"&&e!==null}ct.isObject=Tv;function Tb(e){return Tv(e)&&BA(e)===\"[object Date]\"}ct.isDate=Tb;ct.types.isDate=Tb;function L2(e){return Tv(e)&&(BA(e)===\"[object Error]\"||e instanceof Error)}ct.isError=L2;ct.types.isNativeError=L2;function _b(e){return typeof e==\"function\"}ct.isFunction=_b;function Yze(e){return e===null||typeof e==\"boolean\"||typeof e==\"number\"||typeof e==\"string\"||typeof e==\"symbol\"||typeof e==\"undefined\"}ct.isPrimitive=Yze;ct.isBuffer=eA();function BA(e){return Object.prototype.toString.call(e)}function zA(e){return e<10?\"0\"+e.toString(10):e.toString(10)}var Vze=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function jze(){var e=new Date,r=[zA(e.getHours()),zA(e.getMinutes()),zA(e.getSeconds())].join(\":\");return[e.getDate(),Vze[e.getMonth()],r].join(\" \")}ct.log=function(){console.log(\"%s - %s\",jze(),ct.format.apply(ct,arguments))};ct.inherits=rs();ct._extend=function(e,r){if(!r||!Tv(r))return e;for(var t=Object.keys(r),a=t.length;a--;)e[t[a]]=r[t[a]];return e};function Zne(e,r){return Object.prototype.hasOwnProperty.call(e,r)}var Wf=typeof Symbol!=\"undefined\"?Symbol(\"util.promisify.custom\"):void 0;ct.promisify=function(r){if(typeof r!=\"function\")throw new TypeError('The \"original\" argument must be of type Function');if(Wf&&r[Wf]){var t=r[Wf];if(typeof t!=\"function\")throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');return Object.defineProperty(t,Wf,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var a,n,i=new Promise(function(s,u){a=s,n=u}),o=[],l=0;l<arguments.length;l++)o.push(arguments[l]);o.push(function(s,u){s?n(s):a(u)});try{r.apply(this,o)}catch(s){n(s)}return i}return Object.setPrototypeOf(t,Object.getPrototypeOf(r)),Wf&&Object.defineProperty(t,Wf,{value:t,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(t,Vne(r))};ct.promisify.custom=Wf;function Wze(e,r){if(!e){var t=new Error(\"Promise was rejected with a falsy value\");t.reason=e,e=t}return r(e)}function Xze(e){if(typeof e!=\"function\")throw new TypeError('The \"original\" argument must be of type Function');function r(){for(var t=[],a=0;a<arguments.length;a++)t.push(arguments[a]);var n=t.pop();if(typeof n!=\"function\")throw new TypeError(\"The last argument must be of type Function\");var i=this,o=function(){return n.apply(i,arguments)};e.apply(this,t).then(function(l){process.nextTick(o.bind(null,null,l))},function(l){process.nextTick(Wze.bind(null,l,o))})}return Object.setPrototypeOf(r,Object.getPrototypeOf(e)),Object.defineProperties(r,Vne(e)),r}ct.callbackify=Xze});var UA=z((uKe,Qne)=>{\"use strict\";function lu(e){\"@babel/helpers - typeof\";return lu=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(r){return typeof r}:function(r){return r&&typeof Symbol==\"function\"&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r},lu(e)}function $ne(e,r){for(var t=0;t<r.length;t++){var a=r[t];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(e,$ze(a.key),a)}}function Zze(e,r,t){return r&&$ne(e.prototype,r),t&&$ne(e,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function $ze(e){var r=Jze(e,\"string\");return lu(r)===\"symbol\"?r:String(r)}function Jze(e,r){if(lu(e)!==\"object\"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var a=t.call(e,r||\"default\");if(lu(a)!==\"object\")return a;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(r===\"string\"?String:Number)(e)}function Kze(e,r){if(!(e instanceof r))throw new TypeError(\"Cannot call a class as a function\")}function Qze(e,r){if(typeof r!=\"function\"&&r!==null)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),r&&HA(e,r)}function HA(e,r){return HA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,n){return a.__proto__=n,a},HA(e,r)}function eNe(e){var r=aNe();return function(){var a=kb(e),n;if(r){var i=kb(this).constructor;n=Reflect.construct(a,arguments,i)}else n=a.apply(this,arguments);return rNe(this,n)}}function rNe(e,r){if(r&&(lu(r)===\"object\"||typeof r==\"function\"))return r;if(r!==void 0)throw new TypeError(\"Derived constructors may only return object or undefined\");return tNe(e)}function tNe(e){if(e===void 0)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function aNe(){if(typeof Reflect==\"undefined\"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==\"function\")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function kb(e){return kb=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},kb(e)}var Kne={},Mv,OA;function C2(e,r,t){t||(t=Error);function a(i,o,l){return typeof r==\"string\"?r:r(i,o,l)}var n=(function(i){Qze(l,i);var o=eNe(l);function l(s,u,f){var c;return Kze(this,l),c=o.call(this,a(s,u,f)),c.code=e,c}return Zze(l)})(t);Kne[e]=n}function Jne(e,r){if(Array.isArray(e)){var t=e.length;return e=e.map(function(a){return String(a)}),t>2?\"one of \".concat(r,\" \").concat(e.slice(0,t-1).join(\", \"),\", or \")+e[t-1]:t===2?\"one of \".concat(r,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(r,\" \").concat(e[0])}else return\"of \".concat(r,\" \").concat(String(e))}function nNe(e,r,t){return e.substr(!t||t<0?0:+t,r.length)===r}function iNe(e,r,t){return(t===void 0||t>e.length)&&(t=e.length),e.substring(t-r.length,t)===r}function oNe(e,r,t){return typeof t!=\"number\"&&(t=0),t+r.length>e.length?!1:e.indexOf(r,t)!==-1}C2(\"ERR_AMBIGUOUS_ARGUMENT\",'The \"%s\" argument is ambiguous. %s',TypeError);C2(\"ERR_INVALID_ARG_TYPE\",function(e,r,t){Mv===void 0&&(Mv=Sb()),Mv(typeof e==\"string\",\"'name' must be a string\");var a;typeof r==\"string\"&&nNe(r,\"not \")?(a=\"must not be\",r=r.replace(/^not /,\"\")):a=\"must be\";var n;if(iNe(e,\" argument\"))n=\"The \".concat(e,\" \").concat(a,\" \").concat(Jne(r,\"type\"));else{var i=oNe(e,\".\")?\"property\":\"argument\";n='The \"'.concat(e,'\" ').concat(i,\" \").concat(a,\" \").concat(Jne(r,\"type\"))}return n+=\". Received type \".concat(lu(t)),n},TypeError);C2(\"ERR_INVALID_ARG_VALUE\",function(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:\"is invalid\";OA===void 0&&(OA=Av());var a=OA.inspect(r);return a.length>128&&(a=\"\".concat(a.slice(0,128),\"...\")),\"The argument '\".concat(e,\"' \").concat(t,\". Received \").concat(a)},TypeError,RangeError);C2(\"ERR_INVALID_RETURN_VALUE\",function(e,r,t){var a;return t&&t.constructor&&t.constructor.name?a=\"instance of \".concat(t.constructor.name):a=\"type \".concat(lu(t)),\"Expected \".concat(e,' to be returned from the \"').concat(r,'\"')+\" function but got \".concat(a,\".\")},TypeError);C2(\"ERR_MISSING_ARGS\",function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];Mv===void 0&&(Mv=Sb()),Mv(r.length>0,\"At least one arg needs to be specified\");var a=\"The \",n=r.length;switch(r=r.map(function(i){return'\"'.concat(i,'\"')}),n){case 1:a+=\"\".concat(r[0],\" argument\");break;case 2:a+=\"\".concat(r[0],\" and \").concat(r[1],\" arguments\");break;default:a+=r.slice(0,n-1).join(\", \"),a+=\", and \".concat(r[n-1],\" arguments\");break}return\"\".concat(a,\" must be specified\")},TypeError);Qne.exports.codes=Kne});var uie=z((fKe,sie)=>{\"use strict\";function eie(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),t.push.apply(t,a)}return t}function rie(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?eie(Object(t),!0).forEach(function(a){lNe(e,a,t[a])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):eie(Object(t)).forEach(function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))})}return e}function lNe(e,r,t){return r=iie(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function sNe(e,r){if(!(e instanceof r))throw new TypeError(\"Cannot call a class as a function\")}function tie(e,r){for(var t=0;t<r.length;t++){var a=r[t];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(e,iie(a.key),a)}}function uNe(e,r,t){return r&&tie(e.prototype,r),t&&tie(e,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function iie(e){var r=fNe(e,\"string\");return ii(r)===\"symbol\"?r:String(r)}function fNe(e,r){if(ii(e)!==\"object\"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var a=t.call(e,r||\"default\");if(ii(a)!==\"object\")return a;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(r===\"string\"?String:Number)(e)}function cNe(e,r){if(typeof r!=\"function\"&&r!==null)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,\"prototype\",{writable:!1}),r&&R2(e,r)}function vNe(e){var r=lie();return function(){var a=F2(e),n;if(r){var i=F2(this).constructor;n=Reflect.construct(a,arguments,i)}else n=a.apply(this,arguments);return oie(this,n)}}function oie(e,r){if(r&&(ii(r)===\"object\"||typeof r==\"function\"))return r;if(r!==void 0)throw new TypeError(\"Derived constructors may only return object or undefined\");return GA(e)}function GA(e){if(e===void 0)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function YA(e){var r=typeof Map==\"function\"?new Map:void 0;return YA=function(a){if(a===null||!hNe(a))return a;if(typeof a!=\"function\")throw new TypeError(\"Super expression must either be null or a function\");if(typeof r!=\"undefined\"){if(r.has(a))return r.get(a);r.set(a,n)}function n(){return qb(a,arguments,F2(this).constructor)}return n.prototype=Object.create(a.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),R2(n,a)},YA(e)}function qb(e,r,t){return lie()?qb=Reflect.construct.bind():qb=function(n,i,o){var l=[null];l.push.apply(l,i);var s=Function.bind.apply(n,l),u=new s;return o&&R2(u,o.prototype),u},qb.apply(null,arguments)}function lie(){if(typeof Reflect==\"undefined\"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==\"function\")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function hNe(e){return Function.toString.call(e).indexOf(\"[native code]\")!==-1}function R2(e,r){return R2=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,n){return a.__proto__=n,a},R2(e,r)}function F2(e){return F2=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},F2(e)}function ii(e){\"@babel/helpers - typeof\";return ii=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(r){return typeof r}:function(r){return r&&typeof Symbol==\"function\"&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r},ii(e)}var dNe=Av(),VA=dNe.inspect,pNe=UA(),mNe=pNe.codes.ERR_INVALID_ARG_TYPE;function aie(e,r,t){return(t===void 0||t>e.length)&&(t=e.length),e.substring(t-r.length,t)===r}function yNe(e,r){if(r=Math.floor(r),e.length==0||r==0)return\"\";var t=e.length*r;for(r=Math.floor(Math.log(r)/Math.log(2));r;)e+=e,r--;return e+=e.substring(0,t-e.length),e}var Yo=\"\",D2=\"\",E2=\"\",dn=\"\",Zf={deepStrictEqual:\"Expected values to be strictly deep-equal:\",strictEqual:\"Expected values to be strictly equal:\",strictEqualObject:'Expected \"actual\" to be reference-equal to \"expected\":',deepEqual:\"Expected values to be loosely deep-equal:\",equal:\"Expected values to be loosely equal:\",notDeepStrictEqual:'Expected \"actual\" not to be strictly deep-equal to:',notStrictEqual:'Expected \"actual\" to be strictly unequal to:',notStrictEqualObject:'Expected \"actual\" not to be reference-equal to \"expected\":',notDeepEqual:'Expected \"actual\" not to be loosely deep-equal to:',notEqual:'Expected \"actual\" to be loosely unequal to:',notIdentical:\"Values identical but not reference-equal:\"},gNe=10;function nie(e){var r=Object.keys(e),t=Object.create(Object.getPrototypeOf(e));return r.forEach(function(a){t[a]=e[a]}),Object.defineProperty(t,\"message\",{value:e.message}),t}function P2(e){return VA(e,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}function bNe(e,r,t){var a=\"\",n=\"\",i=0,o=\"\",l=!1,s=P2(e),u=s.split(`\n`),f=P2(r).split(`\n`),c=0,v=\"\";if(t===\"strictEqual\"&&ii(e)===\"object\"&&ii(r)===\"object\"&&e!==null&&r!==null&&(t=\"strictEqualObject\"),u.length===1&&f.length===1&&u[0]!==f[0]){var d=u[0].length+f[0].length;if(d<=gNe){if((ii(e)!==\"object\"||e===null)&&(ii(r)!==\"object\"||r===null)&&(e!==0||r!==0))return\"\".concat(Zf[t],`\n\n`)+\"\".concat(u[0],\" !== \").concat(f[0],`\n`)}else if(t!==\"strictEqualObject\"){var p=process.stderr&&process.stderr.isTTY?process.stderr.columns:80;if(d<p){for(;u[0][c]===f[0][c];)c++;c>2&&(v=`\n  `.concat(yNe(\" \",c),\"^\"),c=0)}}}for(var y=u[u.length-1],m=f[f.length-1];y===m&&(c++<2?o=`\n  `.concat(y).concat(o):a=y,u.pop(),f.pop(),!(u.length===0||f.length===0));)y=u[u.length-1],m=f[f.length-1];var b=Math.max(u.length,f.length);if(b===0){var T=s.split(`\n`);if(T.length>30)for(T[26]=\"\".concat(Yo,\"...\").concat(dn);T.length>27;)T.pop();return\"\".concat(Zf.notIdentical,`\n\n`).concat(T.join(`\n`),`\n`)}c>3&&(o=`\n`.concat(Yo,\"...\").concat(dn).concat(o),l=!0),a!==\"\"&&(o=`\n  `.concat(a).concat(o),a=\"\");var w=0,x=Zf[t]+`\n`.concat(D2,\"+ actual\").concat(dn,\" \").concat(E2,\"- expected\").concat(dn),_=\" \".concat(Yo,\"...\").concat(dn,\" Lines skipped\");for(c=0;c<b;c++){var k=c-i;if(u.length<c+1)k>1&&c>2&&(k>4?(n+=`\n`.concat(Yo,\"...\").concat(dn),l=!0):k>3&&(n+=`\n  `.concat(f[c-2]),w++),n+=`\n  `.concat(f[c-1]),w++),i=c,a+=`\n`.concat(E2,\"-\").concat(dn,\" \").concat(f[c]),w++;else if(f.length<c+1)k>1&&c>2&&(k>4?(n+=`\n`.concat(Yo,\"...\").concat(dn),l=!0):k>3&&(n+=`\n  `.concat(u[c-2]),w++),n+=`\n  `.concat(u[c-1]),w++),i=c,n+=`\n`.concat(D2,\"+\").concat(dn,\" \").concat(u[c]),w++;else{var A=f[c],q=u[c],C=q!==A&&(!aie(q,\",\")||q.slice(0,-1)!==A);C&&aie(A,\",\")&&A.slice(0,-1)===q&&(C=!1,q+=\",\"),C?(k>1&&c>2&&(k>4?(n+=`\n`.concat(Yo,\"...\").concat(dn),l=!0):k>3&&(n+=`\n  `.concat(u[c-2]),w++),n+=`\n  `.concat(u[c-1]),w++),i=c,n+=`\n`.concat(D2,\"+\").concat(dn,\" \").concat(q),a+=`\n`.concat(E2,\"-\").concat(dn,\" \").concat(A),w+=2):(n+=a,a=\"\",(k===1||c===0)&&(n+=`\n  `.concat(q),w++))}if(w>20&&c<b-2)return\"\".concat(x).concat(_,`\n`).concat(n,`\n`).concat(Yo,\"...\").concat(dn).concat(a,`\n`)+\"\".concat(Yo,\"...\").concat(dn)}return\"\".concat(x).concat(l?_:\"\",`\n`).concat(n).concat(a).concat(o).concat(v)}var xNe=(function(e,r){cNe(a,e);var t=vNe(a);function a(n){var i;if(sNe(this,a),ii(n)!==\"object\"||n===null)throw new mNe(\"options\",\"Object\",n);var o=n.message,l=n.operator,s=n.stackStartFn,u=n.actual,f=n.expected,c=Error.stackTraceLimit;if(Error.stackTraceLimit=0,o!=null)i=t.call(this,String(o));else if(process.stderr&&process.stderr.isTTY&&(process.stderr&&process.stderr.getColorDepth&&process.stderr.getColorDepth()!==1?(Yo=\"\\x1B[34m\",D2=\"\\x1B[32m\",dn=\"\\x1B[39m\",E2=\"\\x1B[31m\"):(Yo=\"\",D2=\"\",dn=\"\",E2=\"\")),ii(u)===\"object\"&&u!==null&&ii(f)===\"object\"&&f!==null&&\"stack\"in u&&u instanceof Error&&\"stack\"in f&&f instanceof Error&&(u=nie(u),f=nie(f)),l===\"deepStrictEqual\"||l===\"strictEqual\")i=t.call(this,bNe(u,f,l));else if(l===\"notDeepStrictEqual\"||l===\"notStrictEqual\"){var v=Zf[l],d=P2(u).split(`\n`);if(l===\"notStrictEqual\"&&ii(u)===\"object\"&&u!==null&&(v=Zf.notStrictEqualObject),d.length>30)for(d[26]=\"\".concat(Yo,\"...\").concat(dn);d.length>27;)d.pop();d.length===1?i=t.call(this,\"\".concat(v,\" \").concat(d[0])):i=t.call(this,\"\".concat(v,`\n\n`).concat(d.join(`\n`),`\n`))}else{var p=P2(u),y=\"\",m=Zf[l];l===\"notDeepEqual\"||l===\"notEqual\"?(p=\"\".concat(Zf[l],`\n\n`).concat(p),p.length>1024&&(p=\"\".concat(p.slice(0,1021),\"...\"))):(y=\"\".concat(P2(f)),p.length>512&&(p=\"\".concat(p.slice(0,509),\"...\")),y.length>512&&(y=\"\".concat(y.slice(0,509),\"...\")),l===\"deepEqual\"||l===\"equal\"?p=\"\".concat(m,`\n\n`).concat(p,`\n\nshould equal\n\n`):y=\" \".concat(l,\" \").concat(y)),i=t.call(this,\"\".concat(p).concat(y))}return Error.stackTraceLimit=c,i.generatedMessage=!o,Object.defineProperty(GA(i),\"name\",{value:\"AssertionError [ERR_ASSERTION]\",enumerable:!1,writable:!0,configurable:!0}),i.code=\"ERR_ASSERTION\",i.actual=u,i.expected=f,i.operator=l,Error.captureStackTrace&&Error.captureStackTrace(GA(i),s),i.stack,i.name=\"AssertionError\",oie(i)}return uNe(a,[{key:\"toString\",value:function(){return\"\".concat(this.name,\" [\").concat(this.code,\"]: \").concat(this.message)}},{key:r,value:function(i,o){return VA(this,rie(rie({},o),{},{customInspect:!1,depth:0}))}}]),a})(YA(Error),VA.custom);sie.exports=xNe});var jA=z((cKe,cie)=>{\"use strict\";var fie=Object.prototype.toString;cie.exports=function(r){var t=fie.call(r),a=t===\"[object Arguments]\";return a||(a=t!==\"[object Array]\"&&r!==null&&typeof r==\"object\"&&typeof r.length==\"number\"&&r.length>=0&&fie.call(r.callee)===\"[object Function]\"),a}});var xie=z((vKe,bie)=>{\"use strict\";var gie;Object.keys||(z2=Object.prototype.hasOwnProperty,WA=Object.prototype.toString,vie=jA(),XA=Object.prototype.propertyIsEnumerable,hie=!XA.call({toString:null},\"toString\"),die=XA.call(function(){},\"prototype\"),N2=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],Lb=function(e){var r=e.constructor;return r&&r.prototype===e},pie={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},mie=(function(){if(typeof window==\"undefined\")return!1;for(var e in window)try{if(!pie[\"$\"+e]&&z2.call(window,e)&&window[e]!==null&&typeof window[e]==\"object\")try{Lb(window[e])}catch(r){return!0}}catch(r){return!0}return!1})(),yie=function(e){if(typeof window==\"undefined\"||!mie)return Lb(e);try{return Lb(e)}catch(r){return!1}},gie=function(r){var t=r!==null&&typeof r==\"object\",a=WA.call(r)===\"[object Function]\",n=vie(r),i=t&&WA.call(r)===\"[object String]\",o=[];if(!t&&!a&&!n)throw new TypeError(\"Object.keys called on a non-object\");var l=die&&a;if(i&&r.length>0&&!z2.call(r,0))for(var s=0;s<r.length;++s)o.push(String(s));if(n&&r.length>0)for(var u=0;u<r.length;++u)o.push(String(u));else for(var f in r)!(l&&f===\"prototype\")&&z2.call(r,f)&&o.push(String(f));if(hie)for(var c=yie(r),v=0;v<N2.length;++v)!(c&&N2[v]===\"constructor\")&&z2.call(r,N2[v])&&o.push(N2[v]);return o});var z2,WA,vie,XA,hie,die,N2,Lb,pie,mie,yie;bie.exports=gie});var ZA=z((hKe,Tie)=>{\"use strict\";var _Ne=Array.prototype.slice,wNe=jA(),_ie=Object.keys,Cb=_ie?function(r){return _ie(r)}:xie(),wie=Object.keys;Cb.shim=function(){if(Object.keys){var r=(function(){var t=Object.keys(arguments);return t&&t.length===arguments.length})(1,2);r||(Object.keys=function(a){return wNe(a)?wie(_Ne.call(a)):wie(a)})}else Object.keys=Cb;return Object.keys||Cb};Tie.exports=Cb});var qie=z((dKe,Sie)=>{\"use strict\";var TNe=ZA(),Mie=k3()(),kie=If(),Db=S3(),ANe=kie(\"Array.prototype.push\"),Aie=kie(\"Object.prototype.propertyIsEnumerable\"),MNe=Mie?Db.getOwnPropertySymbols:null;Sie.exports=function(r,t){if(r==null)throw new TypeError(\"target must be an object\");var a=Db(r);if(arguments.length===1)return a;for(var n=1;n<arguments.length;++n){var i=Db(arguments[n]),o=TNe(i),l=Mie&&(Db.getOwnPropertySymbols||MNe);if(l)for(var s=l(i),u=0;u<s.length;++u){var f=s[u];Aie(i,f)&&ANe(o,f)}for(var c=0;c<o.length;++c){var v=o[c];if(Aie(i,v)){var d=i[v];a[v]=d}}}return a}});var Cie=z((pKe,Lie)=>{\"use strict\";var $A=qie(),kNe=function(){if(!Object.assign)return!1;for(var e=\"abcdefghijklmnopqrst\",r=e.split(\"\"),t={},a=0;a<r.length;++a)t[r[a]]=r[a];var n=Object.assign({},t),i=\"\";for(var o in n)i+=o;return e!==i},SNe=function(){if(!Object.assign||!Object.preventExtensions)return!1;var e=Object.preventExtensions({1:2});try{Object.assign(e,\"xy\")}catch(r){return e[1]===\"y\"}return!1};Lie.exports=function(){return!Object.assign||kNe()||SNe()?$A:Object.assign}});var JA=z((mKe,Eie)=>{\"use strict\";var Die=function(e){return e!==e};Eie.exports=function(r,t){return r===0&&t===0?1/r===1/t:!!(r===t||Die(r)&&Die(t))}});var Eb=z((yKe,Pie)=>{\"use strict\";var qNe=JA();Pie.exports=function(){return typeof Object.is==\"function\"?Object.is:qNe}});var Nie=z((gKe,zie)=>{\"use strict\";var Rie=z3(),Fie=m2(),LNe=Fie(Rie(\"String.prototype.indexOf\"));zie.exports=function(r,t){var a=Rie(r,!!t);return typeof a==\"function\"&&LNe(r,\".prototype.\")>-1?Fie(a):a}});var I2=z((bKe,Hie)=>{\"use strict\";var CNe=ZA(),DNe=typeof Symbol==\"function\"&&typeof Symbol(\"foo\")==\"symbol\",ENe=Object.prototype.toString,PNe=Array.prototype.concat,Iie=YT(),RNe=function(e){return typeof e==\"function\"&&ENe.call(e)===\"[object Function]\"},Bie=jT()(),FNe=function(e,r,t,a){if(r in e){if(a===!0){if(e[r]===t)return}else if(!RNe(a)||!a())return}Bie?Iie(e,r,t,!0):Iie(e,r,t)},Oie=function(e,r){var t=arguments.length>2?arguments[2]:{},a=CNe(r);DNe&&(a=PNe.call(a,Object.getOwnPropertySymbols(r)));for(var n=0;n<a.length;n+=1)FNe(e,a[n],r[a[n]],t[a[n]])};Oie.supportsDescriptors=!!Bie;Hie.exports=Oie});var Gie=z((xKe,Uie)=>{\"use strict\";var zNe=Eb(),NNe=I2();Uie.exports=function(){var r=zNe();return NNe(Object,{is:r},{is:function(){return Object.is!==r}}),r}});var Wie=z((_Ke,jie)=>{\"use strict\";var INe=I2(),BNe=m2(),ONe=JA(),Yie=Eb(),HNe=Gie(),Vie=BNe(Yie(),Object);INe(Vie,{getPolyfill:Yie,implementation:ONe,shim:HNe});jie.exports=Vie});var KA=z((wKe,Xie)=>{\"use strict\";Xie.exports=function(r){return r!==r}});var QA=z((TKe,Zie)=>{\"use strict\";var UNe=KA();Zie.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN(\"a\")?Number.isNaN:UNe}});var Jie=z((AKe,$ie)=>{\"use strict\";var GNe=I2(),YNe=QA();$ie.exports=function(){var r=YNe();return GNe(Number,{isNaN:r},{isNaN:function(){return Number.isNaN!==r}}),r}});var roe=z((MKe,eoe)=>{\"use strict\";var VNe=m2(),jNe=I2(),WNe=KA(),Kie=QA(),XNe=Jie(),Qie=VNe(Kie(),Number);jNe(Qie,{getPolyfill:Kie,implementation:WNe,shim:XNe});eoe.exports=Qie});var _oe=z((kKe,xoe)=>{\"use strict\";function toe(e,r){return KNe(e)||JNe(e,r)||$Ne(e,r)||ZNe()}function ZNe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function $Ne(e,r){if(e){if(typeof e==\"string\")return aoe(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);if(t===\"Object\"&&e.constructor&&(t=e.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(e);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return aoe(e,r)}}function aoe(e,r){(r==null||r>e.length)&&(r=e.length);for(var t=0,a=new Array(r);t<r;t++)a[t]=e[t];return a}function JNe(e,r){var t=e==null?null:typeof Symbol!=\"undefined\"&&e[Symbol.iterator]||e[\"@@iterator\"];if(t!=null){var a,n,i,o,l=[],s=!0,u=!1;try{if(i=(t=t.call(e)).next,r===0){if(Object(t)!==t)return;s=!1}else for(;!(s=(a=i.call(t)).done)&&(l.push(a.value),l.length!==r);s=!0);}catch(f){u=!0,n=f}finally{try{if(!s&&t.return!=null&&(o=t.return(),Object(o)!==o))return}finally{if(u)throw n}}return l}}function KNe(e){if(Array.isArray(e))return e}function vo(e){\"@babel/helpers - typeof\";return vo=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(r){return typeof r}:function(r){return r&&typeof Symbol==\"function\"&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r},vo(e)}var QNe=/a/g.flags!==void 0,Bb=function(r){var t=[];return r.forEach(function(a){return t.push(a)}),t},noe=function(r){var t=[];return r.forEach(function(a,n){return t.push([n,a])}),t},poe=Object.is?Object.is:Wie(),Nb=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols:function(){return[]},eM=Number.isNaN?Number.isNaN:roe();function tM(e){return e.call.bind(e)}var O2=tM(Object.prototype.hasOwnProperty),Ib=tM(Object.prototype.propertyIsEnumerable),ioe=tM(Object.prototype.toString),Hn=Av().types,eIe=Hn.isAnyArrayBuffer,rIe=Hn.isArrayBufferView,ooe=Hn.isDate,Pb=Hn.isMap,loe=Hn.isRegExp,Rb=Hn.isSet,tIe=Hn.isNativeError,aIe=Hn.isBoxedPrimitive,soe=Hn.isNumberObject,uoe=Hn.isStringObject,foe=Hn.isBooleanObject,coe=Hn.isBigIntObject,nIe=Hn.isSymbolObject,iIe=Hn.isFloat32Array,oIe=Hn.isFloat64Array;function lIe(e){if(e.length===0||e.length>10)return!0;for(var r=0;r<e.length;r++){var t=e.charCodeAt(r);if(t<48||t>57)return!0}return e.length===10&&e>=Math.pow(2,32)}function Fb(e){return Object.keys(e).filter(lIe).concat(Nb(e).filter(Object.prototype.propertyIsEnumerable.bind(e)))}function moe(e,r){if(e===r)return 0;for(var t=e.length,a=r.length,n=0,i=Math.min(t,a);n<i;++n)if(e[n]!==r[n]){t=e[n],a=r[n];break}return t<a?-1:a<t?1:0}var zb=void 0,sIe=!0,uIe=!1,rM=0,aM=1,yoe=2,goe=3;function fIe(e,r){return QNe?e.source===r.source&&e.flags===r.flags:RegExp.prototype.toString.call(e)===RegExp.prototype.toString.call(r)}function cIe(e,r){if(e.byteLength!==r.byteLength)return!1;for(var t=0;t<e.byteLength;t++)if(e[t]!==r[t])return!1;return!0}function vIe(e,r){return e.byteLength!==r.byteLength?!1:moe(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(r.buffer,r.byteOffset,r.byteLength))===0}function hIe(e,r){return e.byteLength===r.byteLength&&moe(new Uint8Array(e),new Uint8Array(r))===0}function dIe(e,r){return soe(e)?soe(r)&&poe(Number.prototype.valueOf.call(e),Number.prototype.valueOf.call(r)):uoe(e)?uoe(r)&&String.prototype.valueOf.call(e)===String.prototype.valueOf.call(r):foe(e)?foe(r)&&Boolean.prototype.valueOf.call(e)===Boolean.prototype.valueOf.call(r):coe(e)?coe(r)&&BigInt.prototype.valueOf.call(e)===BigInt.prototype.valueOf.call(r):nIe(r)&&Symbol.prototype.valueOf.call(e)===Symbol.prototype.valueOf.call(r)}function ho(e,r,t,a){if(e===r)return e!==0?!0:t?poe(e,r):!0;if(t){if(vo(e)!==\"object\")return typeof e==\"number\"&&eM(e)&&eM(r);if(vo(r)!==\"object\"||e===null||r===null||Object.getPrototypeOf(e)!==Object.getPrototypeOf(r))return!1}else{if(e===null||vo(e)!==\"object\")return r===null||vo(r)!==\"object\"?e==r:!1;if(r===null||vo(r)!==\"object\")return!1}var n=ioe(e),i=ioe(r);if(n!==i)return!1;if(Array.isArray(e)){if(e.length!==r.length)return!1;var o=Fb(e,zb),l=Fb(r,zb);return o.length!==l.length?!1:B2(e,r,t,a,aM,o)}if(n===\"[object Object]\"&&(!Pb(e)&&Pb(r)||!Rb(e)&&Rb(r)))return!1;if(ooe(e)){if(!ooe(r)||Date.prototype.getTime.call(e)!==Date.prototype.getTime.call(r))return!1}else if(loe(e)){if(!loe(r)||!fIe(e,r))return!1}else if(tIe(e)||e instanceof Error){if(e.message!==r.message||e.name!==r.name)return!1}else if(rIe(e)){if(!t&&(iIe(e)||oIe(e))){if(!cIe(e,r))return!1}else if(!vIe(e,r))return!1;var s=Fb(e,zb),u=Fb(r,zb);return s.length!==u.length?!1:B2(e,r,t,a,rM,s)}else{if(Rb(e))return!Rb(r)||e.size!==r.size?!1:B2(e,r,t,a,yoe);if(Pb(e))return!Pb(r)||e.size!==r.size?!1:B2(e,r,t,a,goe);if(eIe(e)){if(!hIe(e,r))return!1}else if(aIe(e)&&!dIe(e,r))return!1}return B2(e,r,t,a,rM)}function voe(e,r){return r.filter(function(t){return Ib(e,t)})}function B2(e,r,t,a,n,i){if(arguments.length===5){i=Object.keys(e);var o=Object.keys(r);if(i.length!==o.length)return!1}for(var l=0;l<i.length;l++)if(!O2(r,i[l]))return!1;if(t&&arguments.length===5){var s=Nb(e);if(s.length!==0){var u=0;for(l=0;l<s.length;l++){var f=s[l];if(Ib(e,f)){if(!Ib(r,f))return!1;i.push(f),u++}else if(Ib(r,f))return!1}var c=Nb(r);if(s.length!==c.length&&voe(r,c).length!==u)return!1}else{var v=Nb(r);if(v.length!==0&&voe(r,v).length!==0)return!1}}if(i.length===0&&(n===rM||n===aM&&e.length===0||e.size===0))return!0;if(a===void 0)a={val1:new Map,val2:new Map,position:0};else{var d=a.val1.get(e);if(d!==void 0){var p=a.val2.get(r);if(p!==void 0)return d===p}a.position++}a.val1.set(e,a.position),a.val2.set(r,a.position);var y=bIe(e,r,t,i,a,n);return a.val1.delete(e),a.val2.delete(r),y}function hoe(e,r,t,a){for(var n=Bb(e),i=0;i<n.length;i++){var o=n[i];if(ho(r,o,t,a))return e.delete(o),!0}return!1}function boe(e){switch(vo(e)){case\"undefined\":return null;case\"object\":return;case\"symbol\":return!1;case\"string\":e=+e;case\"number\":if(eM(e))return!1}return!0}function pIe(e,r,t){var a=boe(t);return a!=null?a:r.has(a)&&!e.has(a)}function mIe(e,r,t,a,n){var i=boe(t);if(i!=null)return i;var o=r.get(i);return o===void 0&&!r.has(i)||!ho(a,o,!1,n)?!1:!e.has(i)&&ho(a,o,!1,n)}function yIe(e,r,t,a){for(var n=null,i=Bb(e),o=0;o<i.length;o++){var l=i[o];if(vo(l)===\"object\"&&l!==null)n===null&&(n=new Set),n.add(l);else if(!r.has(l)){if(t||!pIe(e,r,l))return!1;n===null&&(n=new Set),n.add(l)}}if(n!==null){for(var s=Bb(r),u=0;u<s.length;u++){var f=s[u];if(vo(f)===\"object\"&&f!==null){if(!hoe(n,f,t,a))return!1}else if(!t&&!e.has(f)&&!hoe(n,f,t,a))return!1}return n.size===0}return!0}function doe(e,r,t,a,n,i){for(var o=Bb(e),l=0;l<o.length;l++){var s=o[l];if(ho(t,s,n,i)&&ho(a,r.get(s),n,i))return e.delete(s),!0}return!1}function gIe(e,r,t,a){for(var n=null,i=noe(e),o=0;o<i.length;o++){var l=toe(i[o],2),s=l[0],u=l[1];if(vo(s)===\"object\"&&s!==null)n===null&&(n=new Set),n.add(s);else{var f=r.get(s);if(f===void 0&&!r.has(s)||!ho(u,f,t,a)){if(t||!mIe(e,r,s,u,a))return!1;n===null&&(n=new Set),n.add(s)}}}if(n!==null){for(var c=noe(r),v=0;v<c.length;v++){var d=toe(c[v],2),p=d[0],y=d[1];if(vo(p)===\"object\"&&p!==null){if(!doe(n,e,p,y,t,a))return!1}else if(!t&&(!e.has(p)||!ho(e.get(p),y,!1,a))&&!doe(n,e,p,y,!1,a))return!1}return n.size===0}return!0}function bIe(e,r,t,a,n,i){var o=0;if(i===yoe){if(!yIe(e,r,t,n))return!1}else if(i===goe){if(!gIe(e,r,t,n))return!1}else if(i===aM)for(;o<e.length;o++)if(O2(e,o)){if(!O2(r,o)||!ho(e[o],r[o],t,n))return!1}else{if(O2(r,o))return!1;for(var l=Object.keys(e);o<l.length;o++){var s=l[o];if(!O2(r,s)||!ho(e[s],r[s],t,n))return!1}return l.length===Object.keys(r).length}for(o=0;o<a.length;o++){var u=a[o];if(!ho(e[u],r[u],t,n))return!1}return!0}function xIe(e,r){return ho(e,r,uIe)}function _Ie(e,r){return ho(e,r,sIe)}xoe.exports={isDeepEqual:xIe,isDeepStrictEqual:_Ie}});var Sb=z((SKe,Boe)=>{\"use strict\";function Vo(e){\"@babel/helpers - typeof\";return Vo=typeof Symbol==\"function\"&&typeof Symbol.iterator==\"symbol\"?function(r){return typeof r}:function(r){return r&&typeof Symbol==\"function\"&&r.constructor===Symbol&&r!==Symbol.prototype?\"symbol\":typeof r},Vo(e)}function woe(e,r){for(var t=0;t<r.length;t++){var a=r[t];a.enumerable=a.enumerable||!1,a.configurable=!0,\"value\"in a&&(a.writable=!0),Object.defineProperty(e,TIe(a.key),a)}}function wIe(e,r,t){return r&&woe(e.prototype,r),t&&woe(e,t),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function TIe(e){var r=AIe(e,\"string\");return Vo(r)===\"symbol\"?r:String(r)}function AIe(e,r){if(Vo(e)!==\"object\"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var a=t.call(e,r||\"default\");if(Vo(a)!==\"object\")return a;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(r===\"string\"?String:Number)(e)}function MIe(e,r){if(!(e instanceof r))throw new TypeError(\"Cannot call a class as a function\")}var kIe=UA(),H2=kIe.codes,Toe=H2.ERR_AMBIGUOUS_ARGUMENT,kv=H2.ERR_INVALID_ARG_TYPE,SIe=H2.ERR_INVALID_ARG_VALUE,qIe=H2.ERR_INVALID_RETURN_VALUE,uu=H2.ERR_MISSING_ARGS,fu=uie(),LIe=Av(),Ob=LIe.inspect,Soe=Av().types,CIe=Soe.isPromise,Hb=Soe.isRegExp,DIe=Cie()(),qoe=Eb()(),Ub=Nie()(\"RegExp.prototype.test\"),su,Gb;function U2(){var e=_oe();su=e.isDeepEqual,Gb=e.isDeepStrictEqual}var Aoe=!1,Wt=Boe.exports=nM,Yb={};function jo(e){throw e.message instanceof Error?e.message:new fu(e)}function Loe(e,r,t,a,n){var i=arguments.length,o;if(i===0)o=\"Failed\";else if(i===1)t=e,e=void 0;else{if(Aoe===!1){Aoe=!0;var l=process.emitWarning?process.emitWarning:console.warn.bind(console);l(\"assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.\",\"DeprecationWarning\",\"DEP0094\")}i===2&&(a=\"!=\")}if(t instanceof Error)throw t;var s={actual:e,expected:r,operator:a===void 0?\"fail\":a,stackStartFn:n||Loe};t!==void 0&&(s.message=t);var u=new fu(s);throw o&&(u.message=o,u.generatedMessage=!0),u}Wt.fail=Loe;Wt.AssertionError=fu;function Coe(e,r,t,a){if(!t){var n=!1;if(r===0)n=!0,a=\"No value argument passed to `assert.ok()`\";else if(a instanceof Error)throw a;var i=new fu({actual:t,expected:!0,message:a,operator:\"==\",stackStartFn:e});throw i.generatedMessage=n,i}}function nM(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];Coe.apply(void 0,[nM,r.length].concat(r))}Wt.ok=nM;Wt.equal=function e(r,t,a){if(arguments.length<2)throw new uu(\"actual\",\"expected\");r!=t&&jo({actual:r,expected:t,message:a,operator:\"==\",stackStartFn:e})};Wt.notEqual=function e(r,t,a){if(arguments.length<2)throw new uu(\"actual\",\"expected\");r==t&&jo({actual:r,expected:t,message:a,operator:\"!=\",stackStartFn:e})};Wt.deepEqual=function e(r,t,a){if(arguments.length<2)throw new uu(\"actual\",\"expected\");su===void 0&&U2(),su(r,t)||jo({actual:r,expected:t,message:a,operator:\"deepEqual\",stackStartFn:e})};Wt.notDeepEqual=function e(r,t,a){if(arguments.length<2)throw new uu(\"actual\",\"expected\");su===void 0&&U2(),su(r,t)&&jo({actual:r,expected:t,message:a,operator:\"notDeepEqual\",stackStartFn:e})};Wt.deepStrictEqual=function e(r,t,a){if(arguments.length<2)throw new uu(\"actual\",\"expected\");su===void 0&&U2(),Gb(r,t)||jo({actual:r,expected:t,message:a,operator:\"deepStrictEqual\",stackStartFn:e})};Wt.notDeepStrictEqual=Doe;function Doe(e,r,t){if(arguments.length<2)throw new uu(\"actual\",\"expected\");su===void 0&&U2(),Gb(e,r)&&jo({actual:e,expected:r,message:t,operator:\"notDeepStrictEqual\",stackStartFn:Doe})}Wt.strictEqual=function e(r,t,a){if(arguments.length<2)throw new uu(\"actual\",\"expected\");qoe(r,t)||jo({actual:r,expected:t,message:a,operator:\"strictEqual\",stackStartFn:e})};Wt.notStrictEqual=function e(r,t,a){if(arguments.length<2)throw new uu(\"actual\",\"expected\");qoe(r,t)&&jo({actual:r,expected:t,message:a,operator:\"notStrictEqual\",stackStartFn:e})};var Moe=wIe(function e(r,t,a){var n=this;MIe(this,e),t.forEach(function(i){i in r&&(a!==void 0&&typeof a[i]==\"string\"&&Hb(r[i])&&Ub(r[i],a[i])?n[i]=a[i]:n[i]=r[i])})});function EIe(e,r,t,a,n,i){if(!(t in e)||!Gb(e[t],r[t])){if(!a){var o=new Moe(e,n),l=new Moe(r,n,e),s=new fu({actual:o,expected:l,operator:\"deepStrictEqual\",stackStartFn:i});throw s.actual=e,s.expected=r,s.operator=i.name,s}jo({actual:e,expected:r,message:a,operator:i.name,stackStartFn:i})}}function Eoe(e,r,t,a){if(typeof r!=\"function\"){if(Hb(r))return Ub(r,e);if(arguments.length===2)throw new kv(\"expected\",[\"Function\",\"RegExp\"],r);if(Vo(e)!==\"object\"||e===null){var n=new fu({actual:e,expected:r,message:t,operator:\"deepStrictEqual\",stackStartFn:a});throw n.operator=a.name,n}var i=Object.keys(r);if(r instanceof Error)i.push(\"name\",\"message\");else if(i.length===0)throw new SIe(\"error\",r,\"may not be an empty object\");return su===void 0&&U2(),i.forEach(function(o){typeof e[o]==\"string\"&&Hb(r[o])&&Ub(r[o],e[o])||EIe(e,r,o,t,i,a)}),!0}return r.prototype!==void 0&&e instanceof r?!0:Error.isPrototypeOf(r)?!1:r.call({},e)===!0}function Poe(e){if(typeof e!=\"function\")throw new kv(\"fn\",\"Function\",e);try{e()}catch(r){return r}return Yb}function koe(e){return CIe(e)||e!==null&&Vo(e)===\"object\"&&typeof e.then==\"function\"&&typeof e.catch==\"function\"}function Roe(e){return Promise.resolve().then(function(){var r;if(typeof e==\"function\"){if(r=e(),!koe(r))throw new qIe(\"instance of Promise\",\"promiseFn\",r)}else if(koe(e))r=e;else throw new kv(\"promiseFn\",[\"Function\",\"Promise\"],e);return Promise.resolve().then(function(){return r}).then(function(){return Yb}).catch(function(t){return t})})}function Foe(e,r,t,a){if(typeof t==\"string\"){if(arguments.length===4)throw new kv(\"error\",[\"Object\",\"Error\",\"Function\",\"RegExp\"],t);if(Vo(r)===\"object\"&&r!==null){if(r.message===t)throw new Toe(\"error/message\",'The error message \"'.concat(r.message,'\" is identical to the message.'))}else if(r===t)throw new Toe(\"error/message\",'The error \"'.concat(r,'\" is identical to the message.'));a=t,t=void 0}else if(t!=null&&Vo(t)!==\"object\"&&typeof t!=\"function\")throw new kv(\"error\",[\"Object\",\"Error\",\"Function\",\"RegExp\"],t);if(r===Yb){var n=\"\";t&&t.name&&(n+=\" (\".concat(t.name,\")\")),n+=a?\": \".concat(a):\".\";var i=e.name===\"rejects\"?\"rejection\":\"exception\";jo({actual:void 0,expected:t,operator:e.name,message:\"Missing expected \".concat(i).concat(n),stackStartFn:e})}if(t&&!Eoe(r,t,a,e))throw r}function zoe(e,r,t,a){if(r!==Yb){if(typeof t==\"string\"&&(a=t,t=void 0),!t||Eoe(r,t)){var n=a?\": \".concat(a):\".\",i=e.name===\"doesNotReject\"?\"rejection\":\"exception\";jo({actual:r,expected:t,operator:e.name,message:\"Got unwanted \".concat(i).concat(n,`\n`)+'Actual message: \"'.concat(r&&r.message,'\"'),stackStartFn:e})}throw r}}Wt.throws=function e(r){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];Foe.apply(void 0,[e,Poe(r)].concat(a))};Wt.rejects=function e(r){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];return Roe(r).then(function(i){return Foe.apply(void 0,[e,i].concat(a))})};Wt.doesNotThrow=function e(r){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];zoe.apply(void 0,[e,Poe(r)].concat(a))};Wt.doesNotReject=function e(r){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];return Roe(r).then(function(i){return zoe.apply(void 0,[e,i].concat(a))})};Wt.ifError=function e(r){if(r!=null){var t=\"ifError got unwanted exception: \";Vo(r)===\"object\"&&typeof r.message==\"string\"?r.message.length===0&&r.constructor?t+=r.constructor.name:t+=r.message:t+=Ob(r);var a=new fu({actual:r,expected:null,operator:\"ifError\",message:t,stackStartFn:e}),n=r.stack;if(typeof n==\"string\"){var i=n.split(`\n`);i.shift();for(var o=a.stack.split(`\n`),l=0;l<i.length;l++){var s=o.indexOf(i[l]);if(s!==-1){o=o.slice(0,s);break}}a.stack=\"\".concat(o.join(`\n`),`\n`).concat(i.join(`\n`))}throw a}};function Noe(e,r,t,a,n){if(!Hb(r))throw new kv(\"regexp\",\"RegExp\",r);var i=n===\"match\";if(typeof e!=\"string\"||Ub(r,e)!==i){if(t instanceof Error)throw t;var o=!t;t=t||(typeof e!=\"string\"?'The \"string\" argument must be of type string. Received type '+\"\".concat(Vo(e),\" (\").concat(Ob(e),\")\"):(i?\"The input did not match the regular expression \":\"The input was expected to not match the regular expression \")+\"\".concat(Ob(r),`. Input:\n\n`).concat(Ob(e),`\n`));var l=new fu({actual:e,expected:r,message:t,operator:n,stackStartFn:a});throw l.generatedMessage=o,l}}Wt.match=function e(r,t,a){Noe(r,t,a,e,\"match\")};Wt.doesNotMatch=function e(r,t,a){Noe(r,t,a,e,\"doesNotMatch\")};function Ioe(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];Coe.apply(void 0,[Ioe,r.length].concat(r))}Wt.strict=DIe(Ioe,Wt,{equal:Wt.strictEqual,deepEqual:Wt.deepStrictEqual,notEqual:Wt.notStrictEqual,notDeepEqual:Wt.notDeepStrictEqual});Wt.strict.strict=Wt.strict});var Hoe=z((qKe,Ooe)=>{var G2=1e3,Y2=G2*60,V2=Y2*60,j2=V2*24,PIe=j2*365.25;Ooe.exports=function(e,r){r=r||{};var t=typeof e;if(t===\"string\"&&e.length>0)return RIe(e);if(t===\"number\"&&isNaN(e)===!1)return r.long?zIe(e):FIe(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))};function RIe(e){if(e=String(e),!(e.length>100)){var r=/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(r){var t=parseFloat(r[1]),a=(r[2]||\"ms\").toLowerCase();switch(a){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return t*PIe;case\"days\":case\"day\":case\"d\":return t*j2;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return t*V2;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return t*Y2;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return t*G2;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return t;default:return}}}}function FIe(e){return e>=j2?Math.round(e/j2)+\"d\":e>=V2?Math.round(e/V2)+\"h\":e>=Y2?Math.round(e/Y2)+\"m\":e>=G2?Math.round(e/G2)+\"s\":e+\"ms\"}function zIe(e){return Vb(e,j2,\"day\")||Vb(e,V2,\"hour\")||Vb(e,Y2,\"minute\")||Vb(e,G2,\"second\")||e+\" ms\"}function Vb(e,r,t){if(!(e<r))return e<r*1.5?Math.floor(e/r)+\" \"+t:Math.ceil(e/r)+\" \"+t+\"s\"}});var Goe=z((Pt,Uoe)=>{Pt=Uoe.exports=oM.debug=oM.default=oM;Pt.coerce=HIe;Pt.disable=BIe;Pt.enable=IIe;Pt.enabled=OIe;Pt.humanize=Hoe();Pt.names=[];Pt.skips=[];Pt.formatters={};var iM;function NIe(e){var r=0,t;for(t in e)r=(r<<5)-r+e.charCodeAt(t),r|=0;return Pt.colors[Math.abs(r)%Pt.colors.length]}function oM(e){function r(){if(r.enabled){var t=r,a=+new Date,n=a-(iM||a);t.diff=n,t.prev=iM,t.curr=a,iM=a;for(var i=new Array(arguments.length),o=0;o<i.length;o++)i[o]=arguments[o];i[0]=Pt.coerce(i[0]),typeof i[0]!=\"string\"&&i.unshift(\"%O\");var l=0;i[0]=i[0].replace(/%([a-zA-Z%])/g,function(u,f){if(u===\"%%\")return u;l++;var c=Pt.formatters[f];if(typeof c==\"function\"){var v=i[l];u=c.call(t,v),i.splice(l,1),l--}return u}),Pt.formatArgs.call(t,i);var s=r.log||Pt.log||console.log.bind(console);s.apply(t,i)}}return r.namespace=e,r.enabled=Pt.enabled(e),r.useColors=Pt.useColors(),r.color=NIe(e),typeof Pt.init==\"function\"&&Pt.init(r),r}function IIe(e){Pt.save(e),Pt.names=[],Pt.skips=[];for(var r=(typeof e==\"string\"?e:\"\").split(/[\\s,]+/),t=r.length,a=0;a<t;a++)r[a]&&(e=r[a].replace(/\\*/g,\".*?\"),e[0]===\"-\"?Pt.skips.push(new RegExp(\"^\"+e.substr(1)+\"$\")):Pt.names.push(new RegExp(\"^\"+e+\"$\")))}function BIe(){Pt.enable(\"\")}function OIe(e){var r,t;for(r=0,t=Pt.skips.length;r<t;r++)if(Pt.skips[r].test(e))return!1;for(r=0,t=Pt.names.length;r<t;r++)if(Pt.names[r].test(e))return!0;return!1}function HIe(e){return e instanceof Error?e.stack||e.message:e}});var joe=z((Un,Voe)=>{Un=Voe.exports=Goe();Un.log=YIe;Un.formatArgs=GIe;Un.save=VIe;Un.load=Yoe;Un.useColors=UIe;Un.storage=typeof chrome!=\"undefined\"&&typeof chrome.storage!=\"undefined\"?chrome.storage.local:jIe();Un.colors=[\"lightseagreen\",\"forestgreen\",\"goldenrod\",\"dodgerblue\",\"darkorchid\",\"crimson\"];function UIe(){return typeof window!=\"undefined\"&&window.process&&window.process.type===\"renderer\"?!0:typeof document!=\"undefined\"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=\"undefined\"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=\"undefined\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!=\"undefined\"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)}Un.formatters.j=function(e){try{return JSON.stringify(e)}catch(r){return\"[UnexpectedJSONParseError]: \"+r.message}};function GIe(e){var r=this.useColors;if(e[0]=(r?\"%c\":\"\")+this.namespace+(r?\" %c\":\" \")+e[0]+(r?\"%c \":\" \")+\"+\"+Un.humanize(this.diff),!!r){var t=\"color: \"+this.color;e.splice(1,0,t,\"color: inherit\");var a=0,n=0;e[0].replace(/%[a-zA-Z%]/g,function(i){i!==\"%%\"&&(a++,i===\"%c\"&&(n=a))}),e.splice(n,0,t)}}function YIe(){return typeof console==\"object\"&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function VIe(e){try{e==null?Un.storage.removeItem(\"debug\"):Un.storage.debug=e}catch(r){}}function Yoe(){var e;try{e=Un.storage.debug}catch(r){}return!e&&typeof process!=\"undefined\"&&\"env\"in process&&(e=process.env.DEBUG),e}Un.enable(Yoe());function jIe(){try{return window.localStorage}catch(e){}}});var ele=z((LKe,Qoe)=>{var Sv=Sb(),cu=joe()(\"stream-parser\");Qoe.exports=XIe;var Xoe=-1,jb=0,WIe=1,Zoe=2;function XIe(e){var r=e&&typeof e._transform==\"function\",t=e&&typeof e._write==\"function\";if(!r&&!t)throw new Error(\"must pass a Writable or Transform stream in\");cu(\"extending Parser into stream\"),e._bytes=ZIe,e._skipBytes=$Ie,r&&(e._passthrough=JIe),r?e._transform=QIe:e._write=KIe}function W2(e){cu(\"initializing parser stream\"),e._parserBytesLeft=0,e._parserBuffers=[],e._parserBuffered=0,e._parserState=Xoe,e._parserCallback=null,typeof e.push==\"function\"&&(e._parserOutput=e.push.bind(e)),e._parserInit=!0}function ZIe(e,r){Sv(!this._parserCallback,'there is already a \"callback\" set!'),Sv(isFinite(e)&&e>0,'can only buffer a finite number of bytes > 0, got \"'+e+'\"'),this._parserInit||W2(this),cu(\"buffering %o bytes\",e),this._parserBytesLeft=e,this._parserCallback=r,this._parserState=jb}function $Ie(e,r){Sv(!this._parserCallback,'there is already a \"callback\" set!'),Sv(e>0,'can only skip > 0 bytes, got \"'+e+'\"'),this._parserInit||W2(this),cu(\"skipping %o bytes\",e),this._parserBytesLeft=e,this._parserCallback=r,this._parserState=WIe}function JIe(e,r){Sv(!this._parserCallback,'There is already a \"callback\" set!'),Sv(e>0,'can only pass through > 0 bytes, got \"'+e+'\"'),this._parserInit||W2(this),cu(\"passing through %o bytes\",e),this._parserBytesLeft=e,this._parserCallback=r,this._parserState=Zoe}function KIe(e,r,t){this._parserInit||W2(this),cu(\"write(%o bytes)\",e.length),typeof r==\"function\"&&(t=r),Joe(this,e,null,t)}function QIe(e,r,t){this._parserInit||W2(this),cu(\"transform(%o bytes)\",e.length),typeof r!=\"function\"&&(r=this._parserOutput),Joe(this,e,r,t)}function $oe(e,r,t,a){return e._parserBytesLeft<=0?a(new Error(\"got data but not currently parsing anything\")):r.length<=e._parserBytesLeft?function(){return Woe(e,r,t,a)}:function(){var n=r.slice(0,e._parserBytesLeft);return Woe(e,n,t,function(i){if(i)return a(i);if(r.length>n.length)return function(){return $oe(e,r.slice(n.length),t,a)}})}}function Woe(e,r,t,a){if(e._parserBytesLeft-=r.length,cu(\"%o bytes left for stream piece\",e._parserBytesLeft),e._parserState===jb?(e._parserBuffers.push(r),e._parserBuffered+=r.length):e._parserState===Zoe&&t(r),e._parserBytesLeft===0){var n=e._parserCallback;if(n&&e._parserState===jb&&e._parserBuffers.length>1&&(r=Buffer.concat(e._parserBuffers,e._parserBuffered)),e._parserState!==jb&&(r=null),e._parserCallback=null,e._parserBuffered=0,e._parserState=Xoe,e._parserBuffers.splice(0),n){var i=[];r&&i.push(r),t&&i.push(t);var o=n.length>i.length;o&&i.push(Koe(a));var l=n.apply(e,i);if(!o||a===l)return a}}else return a}var Joe=Koe($oe);function Koe(e){return function(){for(var r=e.apply(this,arguments);typeof r==\"function\";)r=r();return r}}});var xt=z(pn=>{\"use strict\";var rle=Yne().Transform,eBe=ele();function X2(){rle.call(this,{readableObjectMode:!0})}X2.prototype=Object.create(rle.prototype);X2.prototype.constructor=X2;eBe(X2.prototype);pn.ParserStream=X2;pn.sliceEq=function(e,r,t){for(var a=r,n=0;n<t.length;)if(e[a++]!==t[n++])return!1;return!0};pn.str2arr=function(e,r){var t=[],a=0;if(r&&r===\"hex\")for(;a<e.length;)t.push(parseInt(e.slice(a,a+2),16)),a+=2;else for(;a<e.length;a++)t.push(e.charCodeAt(a)&255);return t};pn.readUInt16LE=function(e,r){return e[r]|e[r+1]<<8};pn.readUInt16BE=function(e,r){return e[r]<<8|e[r+1]};pn.readInt16LE=function(e,r){return pn.readUInt16LE(e,r)<<16>>16};pn.readInt16BE=function(e,r){return pn.readUInt16BE(e,r)<<16>>16};pn.readUInt32LE=function(e,r){return(e[r]|e[r+1]<<8|e[r+2]<<16)+e[r+3]*16777216};pn.readUInt32BE=function(e,r){return e[r]*16777216+(e[r+1]<<16|e[r+2]<<8|e[r+3])};pn.readInt32LE=function(e,r){return pn.readUInt32LE(e,r)|0};pn.readInt32BE=function(e,r){return pn.readUInt32BE(e,r)|0};function Wb(e,r,t){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||\"\",this.name=this.constructor.name,this.message=e,r&&(this.code=r),t&&(this.statusCode=t)}Wb.prototype=Object.create(Error.prototype);Wb.prototype.constructor=Wb;pn.ProbeError=Wb});var tle=z((DKe,Xb)=>{\"use strict\";var qv=xt().readUInt16BE,sM=xt().readUInt32BE;function Z2(e,r){if(e.length<4+r)return null;var t=sM(e,r);return e.length<t+r||t<8?null:{boxtype:String.fromCharCode.apply(null,e.slice(r+4,r+8)),data:e.slice(r+8,r+t),end:r+t}}Xb.exports.unbox=Z2;function rBe(e,r){for(var t=0;;){var a=Z2(e,t);if(!a)break;switch(a.boxtype){case\"ispe\":r.sizes.push({width:sM(a.data,4),height:sM(a.data,8)});break;case\"irot\":r.transforms.push({type:\"irot\",value:a.data[0]&3});break;case\"imir\":r.transforms.push({type:\"imir\",value:a.data[0]&1});break}t=a.end}}function lM(e,r,t){for(var a=0,n=0;n<t;n++)a=a*256+(e[r+n]||0);return a}function tBe(e,r){for(var t=e[4]>>4&15,a=e[4]&15,n=e[5]>>4&15,i=qv(e,6),o=8,l=0;l<i;l++){var s=qv(e,o);o+=2;var u=qv(e,o);o+=2;var f=lM(e,o,n);o+=n;var c=qv(e,o);if(o+=2,u===0&&c===1){var v=lM(e,o,t),d=lM(e,o+t,a);r.item_loc[s]={length:d,offset:v+f}}o+=c*(t+a)}}function aBe(e,r){for(var t=qv(e,4),a=6,n=0;n<t;n++){var i=Z2(e,a);if(!i)break;if(i.boxtype===\"infe\"){for(var o=qv(i.data,4),l=\"\",s=8;s<i.data.length&&i.data[s];s++)l+=String.fromCharCode(i.data[s]);r.item_inf[l]=o}a=i.end}}function nBe(e,r){for(var t=0;;){var a=Z2(e,t);if(!a)break;a.boxtype===\"ipco\"&&rBe(a.data,r),t=a.end}}function iBe(e,r){for(var t=4;;){var a=Z2(e,t);if(!a)break;a.boxtype===\"iprp\"&&nBe(a.data,r),a.boxtype===\"iloc\"&&tBe(a.data,r),a.boxtype===\"iinf\"&&aBe(a.data,r),t=a.end}}function oBe(e){var r=e.reduce(function(n,i){return n.width>i.width||n.width===i.width&&n.height>i.height?n:i}),t=e.reduce(function(n,i){return n.height>i.height||n.height===i.height&&n.width>i.width?n:i}),a;return r.width>t.height||r.width===t.height&&r.height>t.width?a=r:a=t,a}Xb.exports.readSizeFromMeta=function(e){var r={sizes:[],transforms:[],item_inf:{},item_loc:{}};if(iBe(e,r),!!r.sizes.length){var t=oBe(r.sizes),a=1;r.transforms.forEach(function(i){var o={1:6,2:5,3:8,4:7,5:4,6:3,7:2,8:1},l={1:4,2:3,3:2,4:1,5:6,6:5,7:8,8:7};if(i.type===\"imir\"&&(i.value===0?a=l[a]:(a=l[a],a=o[a],a=o[a])),i.type===\"irot\")for(var s=0;s<i.value;s++)a=o[a]});var n=null;return r.item_inf.Exif&&(n=r.item_loc[r.item_inf.Exif]),{width:t.width,height:t.height,orientation:r.transforms.length?a:null,variants:r.sizes,exif_location:n}}};Xb.exports.getMimeType=function(e){var r=String.fromCharCode.apply(null,e.slice(0,4)),t={};t[r]=!0;for(var a=8;a<e.length;a+=4)t[String.fromCharCode.apply(null,e.slice(a,a+4))]=!0;if(!(!t.mif1&&!t.msf1&&!t.miaf))return r===\"avif\"||r===\"avis\"||r===\"avio\"?{type:\"avif\",mime:\"image/avif\"}:r===\"heic\"||r===\"heix\"?{type:\"heic\",mime:\"image/heic\"}:r===\"hevc\"||r===\"hevx\"?{type:\"heic\",mime:\"image/heic-sequence\"}:t.avif||t.avis?{type:\"avif\",mime:\"image/avif\"}:t.heic||t.heix||t.hevc||t.hevx||t.heis?t.msf1?{type:\"heif\",mime:\"image/heif-sequence\"}:{type:\"heif\",mime:\"image/heif\"}:{type:\"avif\",mime:\"image/avif\"}}});var $b=z((EKe,uM)=>{\"use strict\";function Zb(e,r){var t=new Error(e);return t.code=r,t}function lBe(e){try{return decodeURIComponent(escape(e))}catch(r){return e}}function ns(e,r,t){this.input=e.subarray(r,t),this.start=r;var a=String.fromCharCode.apply(null,this.input.subarray(0,4));if(a!==\"II*\\0\"&&a!==\"MM\\0*\")throw Zb(\"invalid TIFF signature\",\"EBADDATA\");this.big_endian=a[0]===\"M\"}ns.prototype.each=function(e){this.aborted=!1;var r=this.read_uint32(4);for(this.ifds_to_read=[{id:0,offset:r}];this.ifds_to_read.length>0&&!this.aborted;){var t=this.ifds_to_read.shift();t.offset&&this.scan_ifd(t.id,t.offset,e)}};ns.prototype.read_uint16=function(e){var r=this.input;if(e+2>r.length)throw Zb(\"unexpected EOF\",\"EBADDATA\");return this.big_endian?r[e]*256+r[e+1]:r[e]+r[e+1]*256};ns.prototype.read_uint32=function(e){var r=this.input;if(e+4>r.length)throw Zb(\"unexpected EOF\",\"EBADDATA\");return this.big_endian?r[e]*16777216+r[e+1]*65536+r[e+2]*256+r[e+3]:r[e]+r[e+1]*256+r[e+2]*65536+r[e+3]*16777216};ns.prototype.is_subifd_link=function(e,r){return e===0&&r===34665||e===0&&r===34853||e===34665&&r===40965};ns.prototype.exif_format_length=function(e){switch(e){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0}};ns.prototype.exif_format_read=function(e,r){var t;switch(e){case 1:case 2:return t=this.input[r],t;case 6:return t=this.input[r],t|(t&128)*33554430;case 3:return t=this.read_uint16(r),t;case 8:return t=this.read_uint16(r),t|(t&32768)*131070;case 4:return t=this.read_uint32(r),t;case 9:return t=this.read_uint32(r),t|0;case 5:case 10:case 11:case 12:return null;case 7:return null;default:return null}};ns.prototype.scan_ifd=function(e,r,t){var a=this.read_uint16(r);r+=2;for(var n=0;n<a;n++){var i=this.read_uint16(r),o=this.read_uint16(r+2),l=this.read_uint32(r+4),s=this.exif_format_length(o),u=l*s,f=u<=4?r+8:this.read_uint32(r+8),c=!1;if(f+u>this.input.length)throw Zb(\"unexpected EOF\",\"EBADDATA\");for(var v=[],d=f,p=0;p<l;p++,d+=s){var y=this.exif_format_read(o,d);if(y===null){v=null;break}v.push(y)}Array.isArray(v)&&o===2&&(v=lBe(String.fromCharCode.apply(null,v)),v&&v[v.length-1]===\"\\0\"&&(v=v.slice(0,-1))),this.is_subifd_link(e,i)&&Array.isArray(v)&&Number.isInteger(v[0])&&v[0]>0&&(this.ifds_to_read.push({id:i,offset:v[0]}),c=!0);var m={is_big_endian:this.big_endian,ifd:e,tag:i,format:o,count:l,entry_offset:r+this.start,data_length:u,data_offset:f+this.start,value:v,is_subifd_link:c};if(t(m)===!1){this.aborted=!0;return}r+=12}e===0&&this.ifds_to_read.push({id:1,offset:this.read_uint32(r)})};uM.exports.ExifParser=ns;uM.exports.get_orientation=function(e){var r=0;try{return new ns(e,0,e.length).each(function(t){if(t.ifd===0&&t.tag===274&&Array.isArray(t.value))return r=t.value[0],!1}),r}catch(t){return-1}}});var nle=z((PKe,ale)=>{\"use strict\";var sBe=xt().str2arr,uBe=xt().sliceEq,fBe=xt().readUInt32BE,Jb=tle(),cBe=$b(),vBe=sBe(\"ftyp\");ale.exports=function(e){if(uBe(e,4,vBe)){var r=Jb.unbox(e,0);if(r){var t=Jb.getMimeType(r.data);if(t){for(var a,n=r.end;;){var i=Jb.unbox(e,n);if(!i)break;if(n=i.end,i.boxtype===\"mdat\")return;if(i.boxtype===\"meta\"){a=i.data;break}}if(a){var o=Jb.readSizeFromMeta(a);if(o){var l={width:o.width,height:o.height,type:t.type,mime:t.mime,wUnits:\"px\",hUnits:\"px\"};if(o.variants.length>1&&(l.variants=o.variants),o.orientation&&(l.orientation=o.orientation),o.exif_location&&o.exif_location.offset+o.exif_location.length<=e.length){var s=fBe(e,o.exif_location.offset),u=e.slice(o.exif_location.offset+s+4,o.exif_location.offset+o.exif_location.length),f=cBe.get_orientation(u);f>0&&(l.orientation=f)}return l}}}}}}});var sle=z((RKe,lle)=>{\"use strict\";var hBe=xt().str2arr,dBe=xt().sliceEq,ile=xt().readInt16LE,ole=xt().readInt32LE,pBe=xt().readUInt32LE,mBe=hBe(\"BM\");lle.exports=function(e){if(!(e.length<26)&&dBe(e,0,mBe)){var r,t,a=pBe(e,14);if(a===12)t=ile(e,18),r=ile(e,20);else if(a>12)t=ole(e,18),r=ole(e,22);else return;return{width:t,height:Math.abs(r),type:\"bmp\",mime:\"image/bmp\",wUnits:\"px\",hUnits:\"px\"}}}});var hle=z((FKe,vle)=>{\"use strict\";var cle=xt().str2arr,ule=xt().sliceEq,fle=xt().readUInt16LE,yBe=cle(\"GIF87a\"),gBe=cle(\"GIF89a\");vle.exports=function(e){if(!(e.length<10)&&!(!ule(e,0,yBe)&&!ule(e,0,gBe)))return{width:fle(e,6),height:fle(e,8),type:\"gif\",mime:\"image/gif\",wUnits:\"px\",hUnits:\"px\"}}});var ple=z((zKe,dle)=>{\"use strict\";var fM=xt().readUInt16LE,bBe=0,xBe=1,cM=16;dle.exports=function(e){var r=fM(e,0),t=fM(e,2),a=fM(e,4);if(!(r!==bBe||t!==xBe||!a)&&!(e.length<6+a*cM)){for(var n=[],i={width:0,height:0},o=0;o<a;o++){var l=e[6+cM*o]||256,s=e[6+cM*o+1]||256,u={width:l,height:s};n.push(u),(l>i.width||s>i.height)&&(i=u)}return{width:i.width,height:i.height,variants:n,type:\"ico\",mime:\"image/x-icon\",wUnits:\"px\",hUnits:\"px\"}}}});var yle=z((NKe,mle)=>{\"use strict\";var vM=xt().readUInt16BE,_Be=xt().str2arr,wBe=xt().sliceEq,TBe=$b(),ABe=_Be(\"Exif\\0\\0\");mle.exports=function(e){if(!(e.length<2)&&!(e[0]!==255||e[1]!==216||e[2]!==255))for(var r=2;;){for(;;){if(e.length-r<2)return;if(e[r++]===255)break}for(var t=e[r++],a;t===255;)t=e[r++];if(t>=208&&t<=217||t===1)a=0;else if(t>=192&&t<=254){if(e.length-r<2)return;a=vM(e,r)-2,r+=2}else return;if(t===217||t===218)return;var n;if(t===225&&a>=10&&wBe(e,r,ABe)&&(n=TBe.get_orientation(e.slice(r+6,r+a))),a>=5&&t>=192&&t<=207&&t!==196&&t!==200&&t!==204){if(e.length-r<a)return;var i={width:vM(e,r+3),height:vM(e,r+1),type:\"jpg\",mime:\"image/jpeg\",wUnits:\"px\",hUnits:\"px\"};return n>0&&(i.orientation=n),i}r+=a}}});var wle=z((IKe,_le)=>{\"use strict\";var xle=xt().str2arr,gle=xt().sliceEq,ble=xt().readUInt32BE,MBe=xle(`\\x89PNG\\r\n\u001a\n`),kBe=xle(\"IHDR\");_le.exports=function(e){if(!(e.length<24)&&gle(e,0,MBe)&&gle(e,12,kBe))return{width:ble(e,16),height:ble(e,20),type:\"png\",mime:\"image/png\",wUnits:\"px\",hUnits:\"px\"}}});var Mle=z((BKe,Ale)=>{\"use strict\";var SBe=xt().str2arr,qBe=xt().sliceEq,Tle=xt().readUInt32BE,LBe=SBe(\"8BPS\\0\u0001\");Ale.exports=function(e){if(!(e.length<22)&&qBe(e,0,LBe))return{width:Tle(e,18),height:Tle(e,14),type:\"psd\",mime:\"image/vnd.adobe.photoshop\",wUnits:\"px\",hUnits:\"px\"}}});var qle=z((OKe,Sle)=>{\"use strict\";function CBe(e){return e===32||e===9||e===13||e===10}function Lv(e){return typeof e==\"number\"&&isFinite(e)&&e>0}function DBe(e){var r=0,t=e.length;for(e[0]===239&&e[1]===187&&e[2]===191&&(r=3);r<t&&CBe(e[r]);)r++;return r===t?!1:e[r]===60}var EBe=/<[-_.:a-zA-Z0-9][^>]*>/,PBe=/^<([-_.:a-zA-Z0-9]+:)?svg\\s/,RBe=/[^-]\\bwidth=\"([^%]+?)\"|[^-]\\bwidth='([^%]+?)'/,FBe=/\\bheight=\"([^%]+?)\"|\\bheight='([^%]+?)'/,zBe=/\\bview[bB]ox=\"(.+?)\"|\\bview[bB]ox='(.+?)'/,kle=/in$|mm$|cm$|pt$|pc$|px$|em$|ex$/;function NBe(e){var r=e.match(RBe),t=e.match(FBe),a=e.match(zBe);return{width:r&&(r[1]||r[2]),height:t&&(t[1]||t[2]),viewbox:a&&(a[1]||a[2])}}function Sl(e){return kle.test(e)?e.match(kle)[0]:\"px\"}Sle.exports=function(e){if(DBe(e)){for(var r=\"\",t=0;t<e.length;t++)r+=String.fromCharCode(e[t]);var a=(r.match(EBe)||[\"\"])[0];if(PBe.test(a)){var n=NBe(a),i=parseFloat(n.width),o=parseFloat(n.height);if(n.width&&n.height)return!Lv(i)||!Lv(o)?void 0:{width:i,height:o,type:\"svg\",mime:\"image/svg+xml\",wUnits:Sl(n.width),hUnits:Sl(n.height)};var l=(n.viewbox||\"\").split(\" \"),s={width:l[2],height:l[3]},u=parseFloat(s.width),f=parseFloat(s.height);if(!(!Lv(u)||!Lv(f))&&Sl(s.width)===Sl(s.height)){var c=u/f;return n.width?Lv(i)?{width:i,height:i/c,type:\"svg\",mime:\"image/svg+xml\",wUnits:Sl(n.width),hUnits:Sl(n.width)}:void 0:n.height?Lv(o)?{width:o*c,height:o,type:\"svg\",mime:\"image/svg+xml\",wUnits:Sl(n.height),hUnits:Sl(n.height)}:void 0:{width:u,height:f,type:\"svg\",mime:\"image/svg+xml\",wUnits:Sl(s.width),hUnits:Sl(s.height)}}}}}});var Ple=z((HKe,Ele)=>{\"use strict\";var Dle=xt().str2arr,Lle=xt().sliceEq,IBe=xt().readUInt16LE,BBe=xt().readUInt16BE,OBe=xt().readUInt32LE,HBe=xt().readUInt32BE,UBe=Dle(\"II*\\0\"),GBe=Dle(\"MM\\0*\");function Kb(e,r,t){return t?BBe(e,r):IBe(e,r)}function hM(e,r,t){return t?HBe(e,r):OBe(e,r)}function Cle(e,r,t){var a=Kb(e,r+2,t),n=hM(e,r+4,t);return n!==1||a!==3&&a!==4?null:a===3?Kb(e,r+8,t):hM(e,r+8,t)}Ele.exports=function(e){if(!(e.length<8)&&!(!Lle(e,0,UBe)&&!Lle(e,0,GBe))){var r=e[0]===77,t=hM(e,4,r)-8;if(!(t<0)){var a=t+8;if(!(e.length-a<2)){var n=Kb(e,a+0,r)*12;if(!(n<=0)&&(a+=2,!(e.length-a<n))){var i,o,l,s;for(i=0;i<n;i+=12)s=Kb(e,a+i,r),s===256?o=Cle(e,a+i,r):s===257&&(l=Cle(e,a+i,r));if(o&&l)return{width:o,height:l,type:\"tiff\",mime:\"image/tiff\",wUnits:\"px\",hUnits:\"px\"}}}}}}});var Ile=z((UKe,Nle)=>{\"use strict\";var zle=xt().str2arr,Rle=xt().sliceEq,Fle=xt().readUInt16LE,dM=xt().readUInt32LE,YBe=$b(),VBe=zle(\"RIFF\"),jBe=zle(\"WEBP\");function WBe(e,r){if(!(e[r+3]!==157||e[r+4]!==1||e[r+5]!==42))return{width:Fle(e,r+6)&16383,height:Fle(e,r+8)&16383,type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}function XBe(e,r){if(e[r]===47){var t=dM(e,r+1);return{width:(t&16383)+1,height:(t>>14&16383)+1,type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}}function ZBe(e,r){return{width:(e[r+6]<<16|e[r+5]<<8|e[r+4])+1,height:(e[r+9]<<16|e[r+8]<<8|e[r+7])+1,type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}Nle.exports=function(e){if(!(e.length<16)&&!(!Rle(e,0,VBe)||!Rle(e,8,jBe))){var r=12,t=null,a=0,n=dM(e,4)+8;if(!(n>e.length)){for(;r+8<n;){if(e[r]===0){r++;continue}var i=String.fromCharCode.apply(null,e.slice(r,r+4)),o=dM(e,r+4);i===\"VP8 \"&&o>=10?t=t||WBe(e,r+8):i===\"VP8L\"&&o>=5?t=t||XBe(e,r+8):i===\"VP8X\"&&o>=10?t=t||ZBe(e,r+8):i===\"EXIF\"&&(a=YBe.get_orientation(e.slice(r+8,r+8+o)),r=1/0),r+=8+o}if(t)return a>0&&(t.orientation=a),t}}}});var Ole=z((GKe,Ble)=>{\"use strict\";Ble.exports={avif:nle(),bmp:sle(),gif:hle(),ico:ple(),jpeg:yle(),png:wle(),psd:Mle(),svg:qle(),tiff:Ple(),webp:Ile()}});var Hle=z((YKe,mM)=>{\"use strict\";var pM=Ole();function $Be(e){for(var r=Object.keys(pM),t=0;t<r.length;t++){var a=pM[r[t]](e);if(a)return a.width>0&&a.height>0?a:null}return null}mM.exports=function(r){return $Be(r)};mM.exports.parsers=pM});var Gle=z(Ule=>{\"use strict\";var JBe=Hle(),KBe=Vl().IMAGE_URL_PREFIX,QBe=sv().Buffer;Ule.getImageSize=function(e){var r=e.replace(KBe,\"\"),t=new QBe(r,\"base64\");return JBe(t)}});var jle=z((jKe,Vle)=>{\"use strict\";var Yle=ke(),eOe=av(),rOe=Ir(),Qb=Gr(),tOe=ke().maxRowLength,aOe=Gle().getImageSize;Vle.exports=function(r,t){var a,n;if(t._hasZ)a=t.z.length,n=tOe(t.z);else if(t._hasSource){var i=aOe(t.source);a=i.height,n=i.width}var o=Qb.getFromId(r,t.xaxis||\"x\"),l=Qb.getFromId(r,t.yaxis||\"y\"),s=o.d2c(t.x0)-t.dx/2,u=l.d2c(t.y0)-t.dy/2,f,c=[s,s+n*t.dx],v=[u,u+a*t.dy];if(o&&o.type===\"log\")for(f=0;f<n;f++)c.push(s+f*t.dx);if(l&&l.type===\"log\")for(f=0;f<a;f++)v.push(u+f*t.dy);t._extremes[o._id]=Qb.findExtremes(o,c),t._extremes[l._id]=Qb.findExtremes(l,v),t._scaler=oOe(t);var d={x0:s,y0:u,z:t.z,w:n,h:a};return[d]};function nOe(e,r,t,a){return function(n){return Yle.constrain((n-e)*r,t,a)}}function iOe(e,r){return function(t){return Yle.constrain(t,e,r)}}function oOe(e){var r=eOe.colormodel[e.colormodel],t=r.colormodel||e.colormodel,a=t.length;e._sArray=[];for(var n=0;n<a;n++)r.min[n]!==e.zmin[n]||r.max[n]!==e.zmax[n]?e._sArray.push(nOe(e.zmin[n],(r.max[n]-r.min[n])/(e.zmax[n]-e.zmin[n]),r.min[n],r.max[n])):e._sArray.push(iOe(r.min[n],r.max[n]));return function(i){for(var o=i.slice(0,a),l=0;l<a;l++){var s=o[l];if(!rOe(s))return!1;o[l]=e._sArray[l](s)}return o}}});var Zle=z((WKe,Xle)=>{\"use strict\";var lOe=Er(),$f=ke(),Wle=$f.strTranslate,sOe=Il(),uOe=av(),fOe=x9(),cOe=Qg().STYLE;Xle.exports=function(r,t,a,n){var i=t.xaxis,o=t.yaxis,l=!r._context._exportedPlot&&fOe();$f.makeTraceGroups(n,a,\"im\").each(function(s){var u=lOe.select(this),f=s[0],c=f.trace,v=(c.zsmooth===\"fast\"||c.zsmooth===!1&&l)&&!c._hasZ&&c._hasSource&&i.type===\"linear\"&&o.type===\"linear\";c._realImage=v;var d=f.z,p=f.x0,y=f.y0,m=f.w,b=f.h,T=c.dx,w=c.dy,x,_,k,A,q,C;for(C=0;x===void 0&&C<m;)x=i.c2p(p+C*T),C++;for(C=m;_===void 0&&C>0;)_=i.c2p(p+C*T),C--;for(C=0;A===void 0&&C<b;)A=o.c2p(y+C*w),C++;for(C=b;q===void 0&&C>0;)q=o.c2p(y+C*w),C--;if(_<x&&(k=_,_=x,x=k),q<A&&(k=A,A=q,q=k),!v){var E=.5;x=Math.max(-E*i._length,x),_=Math.min((1+E)*i._length,_),A=Math.max(-E*o._length,A),q=Math.min((1+E)*o._length,q)}var P=Math.round(_-x),R=Math.round(q-A),N=P<=0||R<=0;if(N){var I=u.selectAll(\"image\").data([]);I.exit().remove();return}function O(se){var $=document.createElement(\"canvas\");$.width=P,$.height=R;var fe=$.getContext(\"2d\",{willReadFrequently:!0}),ie=function(Ne){return $f.constrain(Math.round(i.c2p(p+Ne*T)-x),0,P)},ue=function(Ne){return $f.constrain(Math.round(o.c2p(y+Ne*w)-A),0,R)},ce=uOe.colormodel[c.colormodel],oe=ce.colormodel||c.colormodel,be=ce.fmt,Re;for(C=0;C<f.w;C++){var ye=ie(C),Ce=ie(C+1);if(!(Ce===ye||isNaN(Ce)||isNaN(ye)))for(var Me=0;Me<f.h;Me++){var Le=ue(Me),De=ue(Me+1);De===Le||isNaN(De)||isNaN(Le)||!se(C,Me)||(Re=c._scaler(se(C,Me)),Re?fe.fillStyle=oe+\"(\"+be(Re).join(\",\")+\")\":fe.fillStyle=\"rgba(0,0,0,0)\",fe.fillRect(ye,Le,Ce-ye,De-Le))}}return $}var U=u.selectAll(\"image\").data([s]);U.enter().append(\"svg:image\").attr({xmlns:sOe.svg,preserveAspectRatio:\"none\"}),U.exit().remove();var Y=c.zsmooth===!1?cOe:\"\";if(v){var G=$f.simpleMap(i.range,i.r2l),V=$f.simpleMap(o.range,o.r2l),W=G[1]<G[0],j=V[1]>V[0];if(W||j){var J=x+P/2,te=A+R/2;Y+=\"transform:\"+Wle(J+\"px\",te+\"px\")+\"scale(\"+(W?-1:1)+\",\"+(j?-1:1)+\")\"+Wle(-J+\"px\",-te+\"px\")+\";\"}}U.attr(\"style\",Y);var ae=new Promise(function(se){if(c._hasZ)se();else if(c._hasSource)if(c._canvas&&c._canvas.el.width===m&&c._canvas.el.height===b&&c._canvas.source===c.source)se();else{var $=document.createElement(\"canvas\");$.width=m,$.height=b;var fe=$.getContext(\"2d\",{willReadFrequently:!0});c._image=c._image||new Image;var ie=c._image;ie.onload=function(){fe.drawImage(ie,0,0),c._canvas={el:$,source:c.source},se()},ie.setAttribute(\"src\",c.source)}}).then(function(){var se,$;if(c._hasZ)$=O(function(ue,ce){var oe=d[ce][ue];return $f.isTypedArray(oe)&&(oe=Array.from(oe)),oe}),se=$.toDataURL(\"image/png\");else if(c._hasSource)if(v)se=c.source;else{var fe=c._canvas.el.getContext(\"2d\",{willReadFrequently:!0}),ie=fe.getImageData(0,0,m,b).data;$=O(function(ue,ce){var oe=4*(ce*m+ue);return[ie[oe],ie[oe+1],ie[oe+2],ie[oe+3]]}),se=$.toDataURL(\"image/png\")}U.attr({\"xlink:href\":se,height:R,width:P,x,y:A})});r._promises.push(ae)})}});var Jle=z((XKe,$le)=>{\"use strict\";var vOe=Er();$le.exports=function(r){vOe.select(r).selectAll(\".im image\").style(\"opacity\",function(t){return t[0].trace.opacity})}});var rse=z((ZKe,ese)=>{\"use strict\";var Kle=In(),Qle=ke(),e5=Qle.isArrayOrTypedArray,hOe=av();ese.exports=function(r,t,a){var n=r.cd[0],i=n.trace,o=r.xa,l=r.ya;if(!(Kle.inbox(t-n.x0,t-(n.x0+n.w*i.dx),0)>0||Kle.inbox(a-n.y0,a-(n.y0+n.h*i.dy),0)>0)){var s=Math.floor((t-n.x0)/i.dx),u=Math.floor(Math.abs(a-n.y0)/i.dy),f;if(i._hasZ?f=n.z[u][s]:i._hasSource&&(f=i._canvas.el.getContext(\"2d\",{willReadFrequently:!0}).getImageData(s,u,1,1).data),!!f){var c=n.hi||i.hoverinfo,v;if(c){var d=c.split(\"+\");d.indexOf(\"all\")!==-1&&(d=[\"color\"]),d.indexOf(\"color\")!==-1&&(v=!0)}var p=hOe.colormodel[i.colormodel],y=p.colormodel||i.colormodel,m=y.length,b=i._scaler(f),T=p.suffix,w=[];(i.hovertemplate||v)&&(w.push(\"[\"+[b[0]+T[0],b[1]+T[1],b[2]+T[2]].join(\", \")),m===4&&w.push(\", \"+b[3]+T[3]),w.push(\"]\"),w=w.join(\"\"),r.extraText=y.toUpperCase()+\": \"+w);var x;e5(i.hovertext)&&e5(i.hovertext[u])?x=i.hovertext[u][s]:e5(i.text)&&e5(i.text[u])&&(x=i.text[u][s]);var _=l.c2p(n.y0+(u+.5)*i.dy),k=n.x0+(s+.5)*i.dx,A=n.y0+(u+.5)*i.dy,q=\"[\"+f.slice(0,i.colormodel.length).join(\", \")+\"]\";return[Qle.extendFlat(r,{index:[u,s],x0:o.c2p(n.x0+s*i.dx),x1:o.c2p(n.x0+(s+1)*i.dx),y0:_,y1:_,color:b,xVal:k,xLabelVal:k,yVal:A,yLabelVal:A,zLabelVal:q,text:x,hovertemplateLabels:{zLabel:q,colorLabel:w,\"color[0]Label\":b[0]+T[0],\"color[1]Label\":b[1]+T[1],\"color[2]Label\":b[2]+T[2],\"color[3]Label\":b[3]+T[3]}})]}}}});var ase=z(($Ke,tse)=>{\"use strict\";tse.exports=function(r,t){return\"xVal\"in t&&(r.x=t.xVal),\"yVal\"in t&&(r.y=t.yVal),t.xa&&(r.xaxis=t.xa),t.ya&&(r.yaxis=t.ya),r.color=t.color,r.colormodel=t.trace.colormodel,r.z||(r.z=t.color),r}});var ise=z((JKe,nse)=>{\"use strict\";nse.exports={attributes:(dT(),un(hT)).default,supplyDefaults:jee(),calc:jle(),plot:Zle(),style:Jle(),hoverPoints:rse(),eventData:ase(),moduleType:\"trace\",name:\"image\",basePlotModule:Qi(),categories:[\"cartesian\",\"svg\",\"2dMap\",\"noSortingByValue\"],animatable:!1,meta:{}}});var lse=z((KKe,ose)=>{\"use strict\";ose.exports=ise()});var yM=z((QKe,use)=>{\"use strict\";var r5=zn(),dOe=zc().attributes,pOe=ka(),mOe=Ei(),{hovertemplateAttrs:yOe,texttemplateAttrs:gOe,templatefallbackAttrs:sse}=fi(),vu=At().extendFlat,bOe=Pi().pattern,t5=pOe({editType:\"plot\",arrayOk:!0,colorEditType:\"plot\"});use.exports={labels:{valType:\"data_array\",editType:\"calc\"},label0:{valType:\"number\",dflt:0,editType:\"calc\"},dlabel:{valType:\"number\",dflt:1,editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc\"},marker:{colors:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:mOe.defaultLine,arrayOk:!0,editType:\"style\"},width:{valType:\"number\",min:0,dflt:0,arrayOk:!0,editType:\"style\"},editType:\"calc\"},pattern:bOe,editType:\"calc\"},text:{valType:\"data_array\",editType:\"plot\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"value\",\"percent\"],extras:[\"none\"],editType:\"calc\"},hoverinfo:vu({},r5.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:yOe({},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),hovertemplatefallback:sse(),texttemplate:gOe({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),texttemplatefallback:sse({editType:\"plot\"}),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"auto\",arrayOk:!0,editType:\"plot\"},textfont:vu({},t5,{}),insidetextorientation:{valType:\"enumerated\",values:[\"horizontal\",\"radial\",\"tangential\",\"auto\"],dflt:\"auto\",editType:\"plot\"},insidetextfont:vu({},t5,{}),outsidetextfont:vu({},t5,{}),automargin:{valType:\"boolean\",dflt:!1,editType:\"plot\"},showlegend:vu({},r5.showlegend,{arrayOk:!0}),legend:vu({},r5.legend,{arrayOk:!0}),legendrank:vu({},r5.legendrank,{arrayOk:!0}),title:{text:{valType:\"string\",dflt:\"\",editType:\"plot\"},font:vu({},t5,{}),position:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle center\",\"bottom left\",\"bottom center\",\"bottom right\"],editType:\"plot\"},editType:\"plot\"},domain:dOe({name:\"pie\",trace:!0,editType:\"calc\"}),hole:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},sort:{valType:\"boolean\",dflt:!0,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"],dflt:\"counterclockwise\",editType:\"calc\"},rotation:{valType:\"angle\",dflt:0,editType:\"calc\"},pull:{valType:\"number\",min:0,max:1,dflt:0,arrayOk:!0,editType:\"calc\"}}});var hse=z((eQe,vse)=>{\"use strict\";var xOe=Ir(),$2=ke(),_Oe=yM(),wOe=zc().defaults,TOe=Sf().handleText,AOe=ke().coercePattern;function fse(e,r){var t=$2.isArrayOrTypedArray(e),a=$2.isArrayOrTypedArray(r),n=Math.min(t?e.length:1/0,a?r.length:1/0);if(isFinite(n)||(n=0),n&&a){for(var i,o=0;o<n;o++){var l=r[o];if(xOe(l)&&l>0){i=!0;break}}i||(n=0)}return{hasLabels:t,hasValues:a,len:n}}function cse(e,r,t,a,n){var i=a(\"marker.line.width\");i&&a(\"marker.line.color\",n?void 0:t.paper_bgcolor);var o=a(\"marker.colors\");AOe(a,\"marker.pattern\",o),e.marker&&!r.marker.pattern.fgcolor&&(r.marker.pattern.fgcolor=e.marker.colors),r.marker.pattern.bgcolor||(r.marker.pattern.bgcolor=t.paper_bgcolor)}function MOe(e,r,t,a){function n(T,w){return $2.coerce(e,r,_Oe,T,w)}var i=n(\"labels\"),o=n(\"values\"),l=fse(i,o),s=l.len;if(r._hasLabels=l.hasLabels,r._hasValues=l.hasValues,!r._hasLabels&&r._hasValues&&(n(\"label0\"),n(\"dlabel\")),!s){r.visible=!1;return}r._length=s,cse(e,r,a,n,!0),n(\"scalegroup\");var u=n(\"text\"),f=n(\"texttemplate\");n(\"texttemplatefallback\");var c;if(f||(c=n(\"textinfo\",$2.isArrayOrTypedArray(u)?\"text+percent\":\"percent\")),n(\"hovertext\"),n(\"hovertemplate\"),n(\"hovertemplatefallback\"),f||c&&c!==\"none\"){var v=n(\"textposition\");TOe(e,r,a,n,v,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1});var d=Array.isArray(v)||v===\"auto\",p=d||v===\"outside\";p&&n(\"automargin\"),(v===\"inside\"||v===\"auto\"||Array.isArray(v))&&n(\"insidetextorientation\")}else c===\"none\"&&n(\"textposition\",\"none\");wOe(r,a,n);var y=n(\"hole\"),m=n(\"title.text\");if(m){var b=n(\"title.position\",y?\"middle center\":\"top center\");!y&&b===\"middle center\"&&(r.title.position=\"top center\"),$2.coerceFont(n,\"title.font\",a.font)}n(\"sort\"),n(\"direction\"),n(\"rotation\"),n(\"pull\")}vse.exports={handleLabelsAndValues:fse,handleMarkerDefaults:cse,supplyDefaults:MOe}});var gM=z((rQe,dse)=>{\"use strict\";dse.exports={hiddenlabels:{valType:\"data_array\",editType:\"calc\"},piecolorway:{valType:\"colorlist\",editType:\"calc\"},extendpiecolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}});var mse=z((tQe,pse)=>{\"use strict\";var kOe=ke(),SOe=gM();pse.exports=function(r,t){function a(n,i){return kOe.coerce(r,t,SOe,n,i)}a(\"hiddenlabels\"),a(\"piecolorway\",t.colorway),a(\"extendpiecolors\")}});var bM=z((aQe,bse)=>{\"use strict\";var qOe=Ir(),Cv=Sr(),LOe={};function COe(e,r){var t=[],a=e._fullLayout,n=a.hiddenlabels||[],i=r.labels,o=r.marker.colors||[],l=r.values,s=r._length,u=r._hasValues&&s,f,c;if(r.dlabel)for(i=new Array(s),f=0;f<s;f++)i[f]=String(r.label0+f*r.dlabel);var v={},d=yse(a[\"_\"+r.type+\"colormap\"]),p=0,y=!1;for(f=0;f<s;f++){var m,b,T;if(u){if(m=l[f],!qOe(m))continue;m=+m}else m=1;b=i[f],(b===void 0||b===\"\")&&(b=f),b=String(b);var w=v[b];w===void 0?(v[b]=t.length,T=n.indexOf(b)!==-1,T||(p+=m),t.push({v:m,label:b,color:d(o[f],b),i:f,pts:[f],hidden:T})):(y=!0,c=t[w],c.v+=m,c.pts.push(f),c.hidden||(p+=m),c.color===!1&&o[f]&&(c.color=d(o[f],b)))}t=t.filter(function(_){return _.v>=0});var x=r.type===\"funnelarea\"?y:r.sort;return x&&t.sort(function(_,k){return k.v-_.v}),t[0]&&(t[0].vTotal=p),t}function yse(e){return function(t,a){if(!t||!Cv.isValid(t))return!1;let n=Cv.rgbaString(t);return e[a]||(e[a]=n),n}}function DOe(e,r){var t=(r||{}).type;t||(t=\"pie\");var a=e._fullLayout,n=e.calcdata,i=a[t+\"colorway\"],o=a[\"_\"+t+\"colormap\"];a[\"extend\"+t+\"colors\"]&&(i=gse(i,LOe));for(var l=0,s=0;s<n.length;s++){var u=n[s],f=u[0].trace.type;if(f===t)for(var c=0;c<u.length;c++){var v=u[c];v.color===!1&&(o[v.label]?v.color=o[v.label]:(o[v.label]=v.color=i[l%i.length],l++))}}}function gse(e,r){var t,a=JSON.stringify(e),n=r[a];if(!n){for(n=e.slice(),t=0;t<e.length;t++)n.push(Cv.hexString(Cv.adjustLightness(e[t],20)));for(t=0;t<e.length;t++)n.push(Cv.hexString(Cv.adjustLightness(e[t],-20)));r[a]=n}return n}bse.exports={calc:COe,crossTraceCalc:DOe,makePullColorFn:yse,generateExtendedColors:gse}});var _se=z((nQe,xse)=>{\"use strict\";var EOe=qo().appendArrayMultiPointValues;xse.exports=function(r,t){var a={curveNumber:t.index,pointNumbers:r.pts,data:t._input,fullData:t,label:r.label,color:r.color,value:r.v,percent:r.percent,text:r.text,bbox:r.bbox,v:r.v};return r.pts.length===1&&(a.pointNumber=a.i=r.pts[0]),EOe(a,t,r.pts),t.type===\"funnelarea\"&&(delete a.v,delete a.i),a}});var Gse=z((iQe,Use)=>{\"use strict\";var oi=Er(),POe=va(),a5=In(),Sse=Sr(),is=Zr(),on=ke(),ROe=on.strScale,wse=on.strTranslate,xM=Ca(),qse=jd(),FOe=qse.recordMinTextSize,zOe=qse.clearMinTextSize,Lse=qd().TEXTPAD,Cr=km(),n5=_se(),Tse=ke().isValidTextValue;function NOe(e,r){var t=e._context.staticPlot,a=e._fullLayout,n=a._size;zOe(\"pie\",a),Ese(r,e),Bse(r,n);var i=on.makeTraceGroups(a._pielayer,r,\"trace\").each(function(o){var l=oi.select(this),s=o[0],u=s.trace;jOe(o),l.attr(\"stroke-linejoin\",\"round\"),l.each(function(){var f=oi.select(this).selectAll(\"g.slice\").data(o);f.enter().append(\"g\").classed(\"slice\",!0),f.exit().remove();var c=[[[],[]],[[],[]]],v=!1;f.each(function(x,_){if(x.hidden){oi.select(this).selectAll(\"path,g\").remove();return}x.pointNumber=x.i,x.curveNumber=u.index,c[x.pxmid[1]<0?0:1][x.pxmid[0]<0?0:1].push(x);var k=s.cx,A=s.cy,q=oi.select(this),C=q.selectAll(\"path.surface\").data([x]);if(C.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":t?\"none\":\"all\"}),q.call(Cse,e,o),u.pull){var E=+Cr.castOption(u.pull,x.pts)||0;E>0&&(k+=E*x.pxmid[0],A+=E*x.pxmid[1])}x.cxFinal=k,x.cyFinal=A;function P(G,V,W,j){var J=j*(V[0]-G[0]),te=j*(V[1]-G[1]);return\"a\"+j*s.r+\",\"+j*s.r+\" 0 \"+x.largeArc+(W?\" 1 \":\" 0 \")+J+\",\"+te}var R=u.hole;if(x.v===s.vTotal){var N=\"M\"+(k+x.px0[0])+\",\"+(A+x.px0[1])+P(x.px0,x.pxmid,!0,1)+P(x.pxmid,x.px0,!0,1)+\"Z\";R?C.attr(\"d\",\"M\"+(k+R*x.px0[0])+\",\"+(A+R*x.px0[1])+P(x.px0,x.pxmid,!1,R)+P(x.pxmid,x.px0,!1,R)+\"Z\"+N):C.attr(\"d\",N)}else{var I=P(x.px0,x.px1,!0,1);if(R){var O=1-R;C.attr(\"d\",\"M\"+(k+R*x.px1[0])+\",\"+(A+R*x.px1[1])+P(x.px1,x.px0,!1,R)+\"l\"+O*x.px0[0]+\",\"+O*x.px0[1]+I+\"Z\")}else C.attr(\"d\",\"M\"+k+\",\"+A+\"l\"+x.px0[0]+\",\"+x.px0[1]+I+\"Z\")}Ose(e,x,s);var U=Cr.castOption(u.textposition,x.pts),Y=q.selectAll(\"g.slicetext\").data(x.text&&U!==\"none\"?[0]:[]);Y.enter().append(\"g\").classed(\"slicetext\",!0),Y.exit().remove(),Y.each(function(){var G=on.ensureSingle(oi.select(this),\"text\",\"\",function($){$.attr(\"data-notex\",1)}),V=on.ensureUniformFontSize(e,U===\"outside\"?BOe(u,x,a.font):Dse(u,x,a.font));G.text(x.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(is.font,V).call(xM.convertToTspans,e);var W=is.bBox(G.node()),j;if(U===\"outside\")j=kse(W,x);else if(j=Pse(W,x,s),U===\"auto\"&&j.scale<1){var J=on.ensureUniformFontSize(e,u.outsidetextfont);G.call(is.font,J),W=is.bBox(G.node()),j=kse(W,x)}var te=j.textPosAngle,ae=te===void 0?x.pxmid:i5(s.r,te);if(j.targetX=k+ae[0]*j.rCenter+(j.x||0),j.targetY=A+ae[1]*j.rCenter+(j.y||0),Hse(j,W),j.outside){var se=j.targetY;x.yLabelMin=se-W.height/2,x.yLabelMid=se,x.yLabelMax=se+W.height/2,x.labelExtraX=0,x.labelExtraY=0,v=!0}j.fontSize=V.size,FOe(u.type,j,a),o[_].transform=j,on.setTransormAndDisplay(G,j)})});var d=oi.select(this).selectAll(\"g.titletext\").data(u.title.text?[0]:[]);if(d.enter().append(\"g\").classed(\"titletext\",!0),d.exit().remove(),d.each(function(){var x=on.ensureSingle(oi.select(this),\"text\",\"\",function(A){A.attr(\"data-notex\",1)}),_=u.title.text;u._meta&&(_=on.templateString(_,u._meta)),x.text(_).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(is.font,u.title.font).call(xM.convertToTspans,e);var k;u.title.position===\"middle center\"?k=UOe(s):k=Nse(s,n),x.attr(\"transform\",wse(k.x,k.y)+ROe(Math.min(1,k.scale))+wse(k.tx,k.ty))}),v&&YOe(c,u),IOe(f,u),v&&u.automargin){var p=is.bBox(l.node()),y=u.domain,m=n.w*(y.x[1]-y.x[0]),b=n.h*(y.y[1]-y.y[0]),T=(.5*m-s.r)/n.w,w=(.5*b-s.r)/n.h;POe.autoMargin(e,\"pie.\"+u.uid+\".automargin\",{xl:y.x[0]-T,xr:y.x[1]+T,yb:y.y[0]-w,yt:y.y[1]+w,l:Math.max(s.cx-s.r-p.left,0),r:Math.max(p.right-(s.cx+s.r),0),b:Math.max(p.bottom-(s.cy+s.r),0),t:Math.max(s.cy-s.r-p.top,0),pad:5})}})});setTimeout(function(){i.selectAll(\"tspan\").each(function(){var o=oi.select(this);o.attr(\"dy\")&&o.attr(\"dy\",o.attr(\"dy\"))})},0)}function IOe(e,r){e.each(function(t){var a=oi.select(this);if(!t.labelExtraX&&!t.labelExtraY){a.select(\"path.textline\").remove();return}var n=a.select(\"g.slicetext text\");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,on.setTransormAndDisplay(n,t.transform);var i=t.cxFinal+t.pxmid[0],o=t.cyFinal+t.pxmid[1],l=\"M\"+i+\",\"+o,s=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var u=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(u)>Math.abs(f)?l+=\"l\"+f*t.pxmid[0]/t.pxmid[1]+\",\"+f+\"H\"+(i+t.labelExtraX+s):l+=\"l\"+t.labelExtraX+\",\"+u+\"v\"+(f-u)+\"h\"+s}else l+=\"V\"+(t.yLabelMid+t.labelExtraY)+\"h\"+s;on.ensureSingle(a,\"path\",\"textline\").call(Sse.stroke,r.outsidetextfont.color).attr({\"stroke-width\":Math.min(2,r.outsidetextfont.size/8),d:l,fill:\"none\"})})}function Cse(e,r,t){var a=t[0],n=a.cx,i=a.cy,o=a.trace,l=o.type===\"funnelarea\";\"_hasHoverLabel\"in o||(o._hasHoverLabel=!1),\"_hasHoverEvent\"in o||(o._hasHoverEvent=!1),e.on(\"mouseover\",function(s){var u=r._fullLayout,f=r._fullData[o.index];if(!(r._dragging||u.hovermode===!1)){var c=f.hoverinfo;if(Array.isArray(c)&&(c=a5.castHoverinfo({hoverinfo:[Cr.castOption(c,s.pts)],_module:o._module},u,0)),c===\"all\"&&(c=\"label+text+value+percent+name\"),f.hovertemplate||c!==\"none\"&&c!==\"skip\"&&c){var v=s.rInscribed||0,d=n+s.pxmid[0]*(1-v),p=i+s.pxmid[1]*(1-v),y=u.separators,m=[];if(c&&c.indexOf(\"label\")!==-1&&m.push(s.label),s.text=Cr.castOption(f.hovertext||f.text,s.pts),c&&c.indexOf(\"text\")!==-1){var b=s.text;on.isValidTextValue(b)&&m.push(b)}s.value=s.v,s.valueLabel=Cr.formatPieValue(s.v,y),c&&c.indexOf(\"value\")!==-1&&m.push(s.valueLabel),s.percent=s.v/a.vTotal,s.percentLabel=Cr.formatPiePercent(s.percent,y),c&&c.indexOf(\"percent\")!==-1&&m.push(s.percentLabel);var T=f.hoverlabel,w=T.font,x=[];a5.loneHover({trace:o,x0:d-v*a.r,x1:d+v*a.r,y:p,_x0:l?n+s.TL[0]:d-v*a.r,_x1:l?n+s.TR[0]:d+v*a.r,_y0:l?i+s.TL[1]:p-v*a.r,_y1:l?i+s.BL[1]:p+v*a.r,text:m.join(\"<br>\"),name:f.hovertemplate||c.indexOf(\"name\")!==-1?f.name:void 0,idealAlign:s.pxmid[0]<0?\"left\":\"right\",color:Cr.castOption(T.bgcolor,s.pts)||s.color,borderColor:Cr.castOption(T.bordercolor,s.pts),fontFamily:Cr.castOption(w.family,s.pts),fontSize:Cr.castOption(w.size,s.pts),fontColor:Cr.castOption(w.color,s.pts),nameLength:Cr.castOption(T.namelength,s.pts),textAlign:Cr.castOption(T.align,s.pts),hovertemplate:Cr.castOption(f.hovertemplate,s.pts),hovertemplateLabels:s,eventData:[n5(s,f)]},{container:u._hoverlayer.node(),outerContainer:u._paper.node(),gd:r,inOut_bbox:x}),s.bbox=x[0],o._hasHoverLabel=!0}o._hasHoverEvent=!0,r.emit(\"plotly_hover\",{points:[n5(s,f)],event:oi.event})}}),e.on(\"mouseout\",function(s){var u=r._fullLayout,f=r._fullData[o.index],c=oi.select(this).datum();o._hasHoverEvent&&(s.originalEvent=oi.event,r.emit(\"plotly_unhover\",{points:[n5(c,f)],event:oi.event}),o._hasHoverEvent=!1),o._hasHoverLabel&&(a5.loneUnhover(u._hoverlayer.node()),o._hasHoverLabel=!1)}),e.on(\"click\",function(s){var u=r._fullLayout,f=r._fullData[o.index];r._dragging||u.hovermode===!1||(r._hoverdata=[n5(s,f)],a5.click(r,oi.event))})}function BOe(e,r,t){var a=Cr.castOption(e.outsidetextfont.color,r.pts)||Cr.castOption(e.textfont.color,r.pts)||t.color,n=Cr.castOption(e.outsidetextfont.family,r.pts)||Cr.castOption(e.textfont.family,r.pts)||t.family,i=Cr.castOption(e.outsidetextfont.size,r.pts)||Cr.castOption(e.textfont.size,r.pts)||t.size,o=Cr.castOption(e.outsidetextfont.weight,r.pts)||Cr.castOption(e.textfont.weight,r.pts)||t.weight,l=Cr.castOption(e.outsidetextfont.style,r.pts)||Cr.castOption(e.textfont.style,r.pts)||t.style,s=Cr.castOption(e.outsidetextfont.variant,r.pts)||Cr.castOption(e.textfont.variant,r.pts)||t.variant,u=Cr.castOption(e.outsidetextfont.textcase,r.pts)||Cr.castOption(e.textfont.textcase,r.pts)||t.textcase,f=Cr.castOption(e.outsidetextfont.lineposition,r.pts)||Cr.castOption(e.textfont.lineposition,r.pts)||t.lineposition,c=Cr.castOption(e.outsidetextfont.shadow,r.pts)||Cr.castOption(e.textfont.shadow,r.pts)||t.shadow;return{color:a,family:n,size:i,weight:o,style:l,variant:s,textcase:u,lineposition:f,shadow:c}}function Dse(e,r,t){var a=Cr.castOption(e.insidetextfont.color,r.pts);!a&&e._input.textfont&&(a=Cr.castOption(e._input.textfont.color,r.pts));var n=Cr.castOption(e.insidetextfont.family,r.pts)||Cr.castOption(e.textfont.family,r.pts)||t.family,i=Cr.castOption(e.insidetextfont.size,r.pts)||Cr.castOption(e.textfont.size,r.pts)||t.size,o=Cr.castOption(e.insidetextfont.weight,r.pts)||Cr.castOption(e.textfont.weight,r.pts)||t.weight,l=Cr.castOption(e.insidetextfont.style,r.pts)||Cr.castOption(e.textfont.style,r.pts)||t.style,s=Cr.castOption(e.insidetextfont.variant,r.pts)||Cr.castOption(e.textfont.variant,r.pts)||t.variant,u=Cr.castOption(e.insidetextfont.textcase,r.pts)||Cr.castOption(e.textfont.textcase,r.pts)||t.textcase,f=Cr.castOption(e.insidetextfont.lineposition,r.pts)||Cr.castOption(e.textfont.lineposition,r.pts)||t.lineposition,c=Cr.castOption(e.insidetextfont.shadow,r.pts)||Cr.castOption(e.textfont.shadow,r.pts)||t.shadow;return{color:a||Sse.contrast(r.color),family:n,size:i,weight:o,style:l,variant:s,textcase:u,lineposition:f,shadow:c}}function Ese(e,r){for(var t,a,n=0;n<e.length;n++)if(t=e[n][0],a=t.trace,a.title.text){var i=a.title.text;a._meta&&(i=on.templateString(i,a._meta));var o=is.tester.append(\"text\").attr(\"data-notex\",1).text(i).call(is.font,a.title.font).call(xM.convertToTspans,r),l=is.bBox(o.node(),!0);t.titleBox={width:l.width,height:l.height},o.remove()}}function Pse(e,r,t){var a=t.r||r.rpx1,n=r.rInscribed,i=r.startangle===r.stopangle;if(i)return{rCenter:1-n,scale:0,rotate:0,textPosAngle:0};var o=r.ring,l=o===1&&Math.abs(r.startangle-r.stopangle)===Math.PI*2,s=r.halfangle,u=r.midangle,f=t.trace.insidetextorientation,c=f===\"horizontal\",v=f===\"tangential\",d=f===\"radial\",p=f===\"auto\",y=[],m;if(!p){var b=function(q,C){if(OOe(r,q)){var E=Math.abs(q-r.startangle),P=Math.abs(q-r.stopangle),R=E<P?E:P;C===\"tan\"?m=Mse(e,a,o,R,0):m=Ase(e,a,o,R,Math.PI/2),m.textPosAngle=q,y.push(m)}},T;if(c||v){for(T=4;T>=-4;T-=2)b(Math.PI*T,\"tan\");for(T=4;T>=-4;T-=2)b(Math.PI*(T+1),\"tan\")}if(c||d){for(T=4;T>=-4;T-=2)b(Math.PI*(T+1.5),\"rad\");for(T=4;T>=-4;T-=2)b(Math.PI*(T+.5),\"rad\")}}if(l||p||c){var w=Math.sqrt(e.width*e.width+e.height*e.height);if(m={scale:n*a*2/w,rCenter:1-n,rotate:0},m.textPosAngle=(r.startangle+r.stopangle)/2,m.scale>=1)return m;y.push(m)}(p||d)&&(m=Ase(e,a,o,s,u),m.textPosAngle=(r.startangle+r.stopangle)/2,y.push(m)),(p||v)&&(m=Mse(e,a,o,s,u),m.textPosAngle=(r.startangle+r.stopangle)/2,y.push(m));for(var x=0,_=0,k=0;k<y.length;k++){var A=y[k].scale;if(_<A&&(_=A,x=k),!p&&_>=1)break}return y[x]}function OOe(e,r){var t=e.startangle,a=e.stopangle;return t>r&&r>a||t<r&&r<a}function Ase(e,r,t,a,n){r=Math.max(0,r-2*Lse);var i=e.width/e.height,o=zse(i,a,r,t);return{scale:o*2/e.height,rCenter:Rse(i,o/r),rotate:Fse(n)}}function Mse(e,r,t,a,n){r=Math.max(0,r-2*Lse);var i=e.height/e.width,o=zse(i,a,r,t);return{scale:o*2/e.width,rCenter:Rse(i,o/r),rotate:Fse(n+Math.PI/2)}}function Rse(e,r){return Math.cos(r)-e*r}function Fse(e){return(180/Math.PI*e+720)%180-90}function zse(e,r,t,a){var n=e+1/(2*Math.tan(r));return t*Math.min(1/(Math.sqrt(n*n+.5)+n),a/(Math.sqrt(e*e+a/2)+e))}function HOe(e,r){return e.v===r.vTotal&&!r.trace.hole?1:Math.min(1/(1+1/Math.sin(e.halfangle)),e.ring/2)}function kse(e,r){var t=r.pxmid[0],a=r.pxmid[1],n=e.width/2,i=e.height/2;return t<0&&(n*=-1),a<0&&(i*=-1),{scale:1,rCenter:1,rotate:0,x:n+Math.abs(i)*(n>0?1:-1)/2,y:i/(1+t*t/(a*a)),outside:!0}}function UOe(e){var r=Math.sqrt(e.titleBox.width*e.titleBox.width+e.titleBox.height*e.titleBox.height);return{x:e.cx,y:e.cy,scale:e.trace.hole*e.r*2/r,tx:0,ty:-e.titleBox.height/2+e.trace.title.font.size}}function Nse(e,r){var t=1,a=1,n,i=e.trace,o={x:e.cx,y:e.cy},l={tx:0,ty:0};l.ty+=i.title.font.size,n=Ise(i),i.title.position.indexOf(\"top\")!==-1?(o.y-=(1+n)*e.r,l.ty-=e.titleBox.height):i.title.position.indexOf(\"bottom\")!==-1&&(o.y+=(1+n)*e.r);var s=GOe(e.r,e.trace.aspectratio),u=r.w*(i.domain.x[1]-i.domain.x[0])/2;return i.title.position.indexOf(\"left\")!==-1?(u=u+s,o.x-=(1+n)*s,l.tx+=e.titleBox.width/2):i.title.position.indexOf(\"center\")!==-1?u*=2:i.title.position.indexOf(\"right\")!==-1&&(u=u+s,o.x+=(1+n)*s,l.tx-=e.titleBox.width/2),t=u/e.titleBox.width,a=_M(e,r)/e.titleBox.height,{x:o.x,y:o.y,scale:Math.min(t,a),tx:l.tx,ty:l.ty}}function GOe(e,r){return e/(r===void 0?1:r)}function _M(e,r){var t=e.trace,a=r.h*(t.domain.y[1]-t.domain.y[0]);return Math.min(e.titleBox.height,a/2)}function Ise(e){var r=e.pull;if(!r)return 0;var t;if(on.isArrayOrTypedArray(r))for(r=0,t=0;t<e.pull.length;t++)e.pull[t]>r&&(r=e.pull[t]);return r}function YOe(e,r){var t,a,n,i,o,l,s,u,f,c,v,d,p;function y(w,x){return w.pxmid[1]-x.pxmid[1]}function m(w,x){return x.pxmid[1]-w.pxmid[1]}function b(w,x){x||(x={});var _=x.labelExtraY+(a?x.yLabelMax:x.yLabelMin),k=a?w.yLabelMin:w.yLabelMax,A=a?w.yLabelMax:w.yLabelMin,q=w.cyFinal+o(w.px0[1],w.px1[1]),C=_-k,E,P,R,N,I,O;if(C*s>0&&(w.labelExtraY=C),!!on.isArrayOrTypedArray(r.pull))for(P=0;P<c.length;P++)R=c[P],!(R===w||(Cr.castOption(r.pull,w.pts)||0)>=(Cr.castOption(r.pull,R.pts)||0))&&((w.pxmid[1]-R.pxmid[1])*s>0?(N=R.cyFinal+o(R.px0[1],R.px1[1]),C=N-k-w.labelExtraY,C*s>0&&(w.labelExtraY+=C)):(A+w.labelExtraY-q)*s>0&&(E=3*l*Math.abs(P-c.indexOf(w)),I=R.cxFinal+i(R.px0[0],R.px1[0]),O=I+E-(w.cxFinal+w.pxmid[0])-w.labelExtraX,O*l>0&&(w.labelExtraX+=O)))}for(a=0;a<2;a++)for(n=a?y:m,o=a?Math.max:Math.min,s=a?1:-1,t=0;t<2;t++){for(i=t?Math.max:Math.min,l=t?1:-1,u=e[a][t],u.sort(n),f=e[1-a][t],c=f.concat(u),d=[],v=0;v<u.length;v++)u[v].yLabelMid!==void 0&&d.push(u[v]);for(p=!1,v=0;a&&v<f.length;v++)if(f[v].yLabelMid!==void 0){p=f[v];break}for(v=0;v<d.length;v++){var T=v&&d[v-1];p&&!v&&(T=p),b(d[v],T)}}}function Bse(e,r){for(var t=[],a=0;a<e.length;a++){var n=e[a][0],i=n.trace,o=i.domain,l=r.w*(o.x[1]-o.x[0]),s=r.h*(o.y[1]-o.y[0]);i.title.text&&i.title.position!==\"middle center\"&&(s-=_M(n,r));var u=l/2,f=s/2;i.type===\"funnelarea\"&&!i.scalegroup&&(f/=i.aspectratio),n.r=Math.min(u,f)/(1+Ise(i)),n.cx=r.l+r.w*(i.domain.x[1]+i.domain.x[0])/2,n.cy=r.t+r.h*(1-i.domain.y[0])-s/2,i.title.text&&i.title.position.indexOf(\"bottom\")!==-1&&(n.cy-=_M(n,r)),i.scalegroup&&t.indexOf(i.scalegroup)===-1&&t.push(i.scalegroup)}VOe(e,t)}function VOe(e,r){for(var t,a,n,i=0;i<r.length;i++){var o=1/0,l=r[i];for(a=0;a<e.length;a++)if(t=e[a][0],n=t.trace,n.scalegroup===l){var s;if(n.type===\"pie\")s=t.r*t.r;else if(n.type===\"funnelarea\"){var u,f;n.aspectratio>1?(u=t.r,f=u/n.aspectratio):(f=t.r,u=f*n.aspectratio),u*=(1+n.baseratio)/2,s=u*f}o=Math.min(o,s/t.vTotal)}for(a=0;a<e.length;a++)if(t=e[a][0],n=t.trace,n.scalegroup===l){var c=o*t.vTotal;n.type===\"funnelarea\"&&(c/=(1+n.baseratio)/2,c/=n.aspectratio),t.r=Math.sqrt(c)}}}function jOe(e){var r=e[0],t=r.r,a=r.trace,n=Cr.getRotationAngle(a.rotation),i=2*Math.PI/r.vTotal,o=\"px0\",l=\"px1\",s,u,f;if(a.direction===\"counterclockwise\"){for(s=0;s<e.length&&e[s].hidden;s++);if(s===e.length)return;n+=i*e[s].v,i*=-1,o=\"px1\",l=\"px0\"}for(f=i5(t,n),s=0;s<e.length;s++)u=e[s],!u.hidden&&(u[o]=f,u.startangle=n,n+=i*u.v/2,u.pxmid=i5(t,n),u.midangle=n,n+=i*u.v/2,f=i5(t,n),u.stopangle=n,u[l]=f,u.largeArc=u.v>r.vTotal/2?1:0,u.halfangle=Math.PI*Math.min(u.v/r.vTotal,.5),u.ring=1-a.hole,u.rInscribed=HOe(u,r))}function i5(e,r){return[e*Math.sin(r),-e*Math.cos(r)]}function Ose(e,r,t){var a=e._fullLayout,n=t.trace,i=n.texttemplate,o=n.textinfo;if(!i&&o&&o!==\"none\"){var l=o.split(\"+\"),s=function(x){return l.indexOf(x)!==-1},u=s(\"label\"),f=s(\"text\"),c=s(\"value\"),v=s(\"percent\"),d=a.separators,p;if(p=u?[r.label]:[],f){var y=Cr.getFirstFilled(n.text,r.pts);Tse(y)&&p.push(y)}c&&p.push(Cr.formatPieValue(r.v,d)),v&&p.push(Cr.formatPiePercent(r.v/t.vTotal,d)),r.text=p.join(\"<br>\")}function m(x){return{label:x.label,value:x.v,valueLabel:Cr.formatPieValue(x.v,a.separators),percent:x.v/t.vTotal,percentLabel:Cr.formatPiePercent(x.v/t.vTotal,a.separators),color:x.color,text:x.text,customdata:on.castOption(n,x.i,\"customdata\")}}if(i){var b=on.castOption(n,r.i,\"texttemplate\");if(!b)r.text=\"\";else{var T=m(r),w=Cr.getFirstFilled(n.text,r.pts);(Tse(w)||w===\"\")&&(T.text=w),r.text=on.texttemplateString({data:[T,n._meta],fallback:n.texttemplatefallback,labels:T,locale:e._fullLayout._d3locale,template:b})}}}function Hse(e,r){var t=e.rotate*Math.PI/180,a=Math.cos(t),n=Math.sin(t),i=(r.left+r.right)/2,o=(r.top+r.bottom)/2;e.textX=i*a-o*n,e.textY=i*n+o*a,e.noCenter=!0}Use.exports={plot:NOe,formatSliceLabel:Ose,transformInsideText:Pse,determineInsideTextFont:Dse,positionTitleOutside:Nse,prerenderTitles:Ese,layoutAreas:Bse,attachFxHandlers:Cse,computeTransform:Hse}});var jse=z((oQe,Vse)=>{\"use strict\";var Yse=Er(),WOe=Sm(),XOe=jd().resizeText;Vse.exports=function(r){var t=r._fullLayout._pielayer.selectAll(\".trace\");XOe(r,t,\"pie\"),t.each(function(a){var n=a[0],i=n.trace,o=Yse.select(this);o.style({opacity:i.opacity}),o.selectAll(\"path.surface\").each(function(l){Yse.select(this).call(WOe,l,i,r)})})}});var Xse=z(Dv=>{\"use strict\";var Wse=va();Dv.name=\"pie\";Dv.plot=function(e,r,t,a){Wse.plotBasePlot(Dv.name,e,r,t,a)};Dv.clean=function(e,r,t,a){Wse.cleanBasePlot(Dv.name,e,r,t,a)}});var $se=z((sQe,Zse)=>{\"use strict\";Zse.exports={attributes:yM(),supplyDefaults:hse().supplyDefaults,supplyLayoutDefaults:mse(),layoutAttributes:gM(),calc:bM().calc,crossTraceCalc:bM().crossTraceCalc,plot:Gse().plot,style:jse(),styleOne:Sm(),moduleType:\"trace\",name:\"pie\",basePlotModule:Xse(),categories:[\"pie-like\",\"pie\",\"showLegend\"],meta:{}}});var Kse=z((uQe,Jse)=>{\"use strict\";Jse.exports=$se()});var mn=z((fQe,eue)=>{\"use strict\";var Qse=Object.getOwnPropertySymbols,ZOe=Object.prototype.hasOwnProperty,$Oe=Object.prototype.propertyIsEnumerable;function JOe(e){if(e==null)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}function KOe(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",Object.getOwnPropertyNames(e)[0]===\"5\")return!1;for(var r={},t=0;t<10;t++)r[\"_\"+String.fromCharCode(t)]=t;var a=Object.getOwnPropertyNames(r).map(function(i){return r[i]});if(a.join(\"\")!==\"0123456789\")return!1;var n={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(i){n[i]=i}),Object.keys(Object.assign({},n)).join(\"\")===\"abcdefghijklmnopqrst\"}catch(i){return!1}}eue.exports=KOe()?Object.assign:function(e,r){for(var t,a=JOe(e),n,i=1;i<arguments.length;i++){t=Object(arguments[i]);for(var o in t)ZOe.call(t,o)&&(a[o]=t[o]);if(Qse){n=Qse(t);for(var l=0;l<n.length;l++)$Oe.call(t,n[l])&&(a[n[l]]=t[n[l]])}}return a}});var yn=z((cQe,tue)=>{var l5=mn();function rue(){this.regionalOptions=[],this.regionalOptions[\"\"]={invalidCalendar:\"Calendar {0} not found\",invalidDate:\"Invalid {0} date\",invalidMonth:\"Invalid {0} month\",invalidYear:\"Invalid {0} year\",differentCalendars:\"Cannot mix {0} and {1} dates\"},this.local=this.regionalOptions[\"\"],this.calendars={},this._localCals={}}l5(rue.prototype,{instance:function(e,r){e=(e||\"gregorian\").toLowerCase(),r=r||\"\";var t=this._localCals[e+\"-\"+r];if(!t&&this.calendars[e]&&(t=new this.calendars[e](r),this._localCals[e+\"-\"+r]=t),!t)throw(this.local.invalidCalendar||this.regionalOptions[\"\"].invalidCalendar).replace(/\\{0\\}/,e);return t},newDate:function(e,r,t,a,n){return a=(e!=null&&e.year?e.calendar():typeof a==\"string\"?this.instance(a,n):a)||this.instance(),a.newDate(e,r,t)},substituteDigits:function(e){return function(r){return(r+\"\").replace(/[0-9]/g,function(t){return e[t]})}},substituteChineseDigits:function(e,r){return function(t){for(var a=\"\",n=0;t>0;){var i=t%10;a=(i===0?\"\":e[i]+r[n])+a,n++,t=Math.floor(t/10)}return a.indexOf(e[1]+r[1])===0&&(a=a.substr(1)),a||e[0]}}});function wM(e,r,t,a){if(this._calendar=e,this._year=r,this._month=t,this._day=a,this._calendar._validateLevel===0&&!this._calendar.isValid(this._year,this._month,this._day))throw(Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name)}function o5(e,r){return e=\"\"+e,\"000000\".substring(0,r-e.length)+e}l5(wM.prototype,{newDate:function(e,r,t){return this._calendar.newDate(e==null?this:e,r,t)},year:function(e){return arguments.length===0?this._year:this.set(e,\"y\")},month:function(e){return arguments.length===0?this._month:this.set(e,\"m\")},day:function(e){return arguments.length===0?this._day:this.set(e,\"d\")},date:function(e,r,t){if(!this._calendar.isValid(e,r,t))throw(Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name);return this._year=e,this._month=r,this._day=t,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(e,r){return this._calendar.add(this,e,r)},set:function(e,r){return this._calendar.set(this,e,r)},compareTo:function(e){if(this._calendar.name!==e._calendar.name)throw(Ur.local.differentCalendars||Ur.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this._calendar.local.name).replace(/\\{1\\}/,e._calendar.local.name);var r=this._year!==e._year?this._year-e._year:this._month!==e._month?this.monthOfYear()-e.monthOfYear():this._day-e._day;return r===0?0:r<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(e){return this._calendar.fromJD(e)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(e){return this._calendar.fromJSDate(e)},toString:function(){return(this.year()<0?\"-\":\"\")+o5(Math.abs(this.year()),4)+\"-\"+o5(this.month(),2)+\"-\"+o5(this.day(),2)}});function TM(){this.shortYearCutoff=\"+10\"}l5(TM.prototype,{_validateLevel:0,newDate:function(e,r,t){return e==null?this.today():(e.year&&(this._validate(e,r,t,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate),t=e.day(),r=e.month(),e=e.year()),new wM(this,e,r,t))},today:function(){return this.fromJSDate(new Date)},epoch:function(e){var r=this._validate(e,this.minMonth,this.minDay,Ur.local.invalidYear||Ur.regionalOptions[\"\"].invalidYear);return r.year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Ur.local.invalidYear||Ur.regionalOptions[\"\"].invalidYear);return(r.year()<0?\"-\":\"\")+o5(Math.abs(r.year()),4)},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,Ur.local.invalidYear||Ur.regionalOptions[\"\"].invalidYear),12},monthOfYear:function(e,r){var t=this._validate(e,r,this.minDay,Ur.local.invalidMonth||Ur.regionalOptions[\"\"].invalidMonth);return(t.month()+this.monthsInYear(t)-this.firstMonth)%this.monthsInYear(t)+this.minMonth},fromMonthOfYear:function(e,r){var t=(r+this.firstMonth-2*this.minMonth)%this.monthsInYear(e)+this.minMonth;return this._validate(e,t,this.minDay,Ur.local.invalidMonth||Ur.regionalOptions[\"\"].invalidMonth),t},daysInYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Ur.local.invalidYear||Ur.regionalOptions[\"\"].invalidYear);return this.leapYear(r)?366:365},dayOfYear:function(e,r,t){var a=this._validate(e,r,t,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate);return a.toJD()-this.newDate(a.year(),this.fromMonthOfYear(a.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(e,r,t){var a=this._validate(e,r,t,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate);return(Math.floor(this.toJD(a))+2)%this.daysInWeek()},extraInfo:function(e,r,t){return this._validate(e,r,t,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate),{}},add:function(e,r,t){return this._validate(e,this.minMonth,this.minDay,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate),this._correctAdd(e,this._add(e,r,t),r,t)},_add:function(e,r,t){if(this._validateLevel++,t===\"d\"||t===\"w\"){var a=e.toJD()+r*(t===\"w\"?this.daysInWeek():1),n=e.calendar().fromJD(a);return this._validateLevel--,[n.year(),n.month(),n.day()]}try{var i=e.year()+(t===\"y\"?r:0),o=e.monthOfYear()+(t===\"m\"?r:0),n=e.day(),l=function(f){for(;o<f.minMonth;)i--,o+=f.monthsInYear(i);for(var c=f.monthsInYear(i);o>c-1+f.minMonth;)i++,o-=c,c=f.monthsInYear(i)};t===\"y\"?(e.month()!==this.fromMonthOfYear(i,o)&&(o=this.newDate(i,e.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(i)),n=Math.min(n,this.daysInMonth(i,this.fromMonthOfYear(i,o)))):t===\"m\"&&(l(this),n=Math.min(n,this.daysInMonth(i,this.fromMonthOfYear(i,o))));var s=[i,this.fromMonthOfYear(i,o),n];return this._validateLevel--,s}catch(u){throw this._validateLevel--,u}},_correctAdd:function(e,r,t,a){if(!this.hasYearZero&&(a===\"y\"||a===\"m\")&&(r[0]===0||e.year()>0!=r[0]>0)){var n={y:[1,1,\"y\"],m:[1,this.monthsInYear(-1),\"m\"],w:[this.daysInWeek(),this.daysInYear(-1),\"d\"],d:[1,this.daysInYear(-1),\"d\"]}[a],i=t<0?-1:1;r=this._add(e,t*n[0]+i*n[1],n[2])}return e.date(r[0],r[1],r[2])},set:function(e,r,t){this._validate(e,this.minMonth,this.minDay,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate);var a=t===\"y\"?r:e.year(),n=t===\"m\"?r:e.month(),i=t===\"d\"?r:e.day();return(t===\"y\"||t===\"m\")&&(i=Math.min(i,this.daysInMonth(a,n))),e.date(a,n,i)},isValid:function(e,r,t){this._validateLevel++;var a=this.hasYearZero||e!==0;if(a){var n=this.newDate(e,r,this.minDay);a=r>=this.minMonth&&r-this.minMonth<this.monthsInYear(n)&&t>=this.minDay&&t-this.minDay<this.daysInMonth(n)}return this._validateLevel--,a},toJSDate:function(e,r,t){var a=this._validate(e,r,t,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate);return Ur.instance().fromJD(this.toJD(a)).toJSDate()},fromJSDate:function(e){return this.fromJD(Ur.instance().fromJSDate(e).toJD())},_validate:function(e,r,t,a){if(e.year){if(this._validateLevel===0&&this.name!==e.calendar().name)throw(Ur.local.differentCalendars||Ur.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this.local.name).replace(/\\{1\\}/,e.calendar().local.name);return e}try{if(this._validateLevel++,this._validateLevel===1&&!this.isValid(e,r,t))throw a.replace(/\\{0\\}/,this.local.name);var n=this.newDate(e,r,t);return this._validateLevel--,n}catch(i){throw this._validateLevel--,i}}});function AM(e){this.local=this.regionalOptions[e]||this.regionalOptions[\"\"]}AM.prototype=new TM;l5(AM.prototype,{name:\"Gregorian\",jdEpoch:17214255e-1,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Gregorian\",epochs:[\"BCE\",\"CE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,Ur.local.invalidYear||Ur.regionalOptions[\"\"].invalidYear),t=r.year()+(r.year()<0?1:0);return t%4===0&&(t%100!==0||t%400===0)},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(4-(a.dayOfWeek()||7),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,Ur.local.invalidMonth||Ur.regionalOptions[\"\"].invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===2&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,r,t,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate);e=a.year(),r=a.month(),t=a.day(),e<0&&e++,r<3&&(r+=12,e--);var n=Math.floor(e/100),i=2-n+Math.floor(n/4);return Math.floor(365.25*(e+4716))+Math.floor(30.6001*(r+1))+t+i-1524.5},fromJD:function(e){var r=Math.floor(e+.5),t=Math.floor((r-186721625e-2)/36524.25);t=r+1+t-Math.floor(t/4);var a=t+1524,n=Math.floor((a-122.1)/365.25),i=Math.floor(365.25*n),o=Math.floor((a-i)/30.6001),l=a-i-Math.floor(o*30.6001),s=o-(o>13.5?13:1),u=n-(s>2.5?4716:4715);return u<=0&&u--,this.newDate(u,s,l)},toJSDate:function(e,r,t){var a=this._validate(e,r,t,Ur.local.invalidDate||Ur.regionalOptions[\"\"].invalidDate),n=new Date(a.year(),a.month()-1,a.day());return n.setHours(0),n.setMinutes(0),n.setSeconds(0),n.setMilliseconds(0),n.setHours(n.getHours()>12?n.getHours()+2:0),n},fromJSDate:function(e){return this.newDate(e.getFullYear(),e.getMonth()+1,e.getDate())}});var Ur=tue.exports=new rue;Ur.cdate=wM;Ur.baseCalendar=TM;Ur.calendars.gregorian=AM});var aue=z(()=>{var MM=mn(),Ya=yn();MM(Ya.regionalOptions[\"\"],{invalidArguments:\"Invalid arguments\",invalidFormat:\"Cannot format a date from another calendar\",missingNumberAt:\"Missing number at position {0}\",unknownNameAt:\"Unknown name at position {0}\",unexpectedLiteralAt:\"Unexpected literal at position {0}\",unexpectedText:\"Additional text found at end\"});Ya.local=Ya.regionalOptions[\"\"];MM(Ya.cdate.prototype,{formatDate:function(e,r){return typeof e!=\"string\"&&(r=e,e=\"\"),this._calendar.formatDate(e||\"\",this,r)}});MM(Ya.baseCalendar.prototype,{UNIX_EPOCH:Ya.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:1440*60,TICKS_EPOCH:Ya.instance().jdEpoch,TICKS_PER_DAY:1440*60*1e7,ATOM:\"yyyy-mm-dd\",COOKIE:\"D, dd M yyyy\",FULL:\"DD, MM d, yyyy\",ISO_8601:\"yyyy-mm-dd\",JULIAN:\"J\",RFC_822:\"D, d M yy\",RFC_850:\"DD, dd-M-yy\",RFC_1036:\"D, d M yy\",RFC_1123:\"D, d M yyyy\",RFC_2822:\"D, d M yyyy\",RSS:\"D, d M yy\",TICKS:\"!\",TIMESTAMP:\"@\",W3C:\"yyyy-mm-dd\",formatDate:function(e,r,t){if(typeof e!=\"string\"&&(t=r,r=e,e=\"\"),!r)return\"\";if(r.calendar()!==this)throw Ya.local.invalidFormat||Ya.regionalOptions[\"\"].invalidFormat;e=e||this.local.dateFormat,t=t||{};for(var a=t.dayNamesShort||this.local.dayNamesShort,n=t.dayNames||this.local.dayNames,i=t.monthNumbers||this.local.monthNumbers,o=t.monthNamesShort||this.local.monthNamesShort,l=t.monthNames||this.local.monthNames,s=t.calculateWeek||this.local.calculateWeek,u=function(x,_){for(var k=1;w+k<e.length&&e.charAt(w+k)===x;)k++;return w+=k-1,Math.floor(k/(_||1))>1},f=function(x,_,k,A){var q=\"\"+_;if(u(x,A))for(;q.length<k;)q=\"0\"+q;return q},c=function(x,_,k,A){return u(x)?A[_]:k[_]},v=this,d=function(x){return typeof i==\"function\"?i.call(v,x,u(\"m\")):m(f(\"m\",x.month(),2))},p=function(x,_){return _?typeof l==\"function\"?l.call(v,x):l[x.month()-v.minMonth]:typeof o==\"function\"?o.call(v,x):o[x.month()-v.minMonth]},y=this.local.digits,m=function(x){return t.localNumbers&&y?y(x):x},b=\"\",T=!1,w=0;w<e.length;w++)if(T)e.charAt(w)===\"'\"&&!u(\"'\")?T=!1:b+=e.charAt(w);else switch(e.charAt(w)){case\"d\":b+=m(f(\"d\",r.day(),2));break;case\"D\":b+=c(\"D\",r.dayOfWeek(),a,n);break;case\"o\":b+=f(\"o\",r.dayOfYear(),3);break;case\"w\":b+=f(\"w\",r.weekOfYear(),2);break;case\"m\":b+=d(r);break;case\"M\":b+=p(r,u(\"M\"));break;case\"y\":b+=u(\"y\",2)?r.year():(r.year()%100<10?\"0\":\"\")+r.year()%100;break;case\"Y\":u(\"Y\",2),b+=r.formatYear();break;case\"J\":b+=r.toJD();break;case\"@\":b+=(r.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case\"!\":b+=(r.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case\"'\":u(\"'\")?b+=\"'\":T=!0;break;default:b+=e.charAt(w)}return b},parseDate:function(e,r,t){if(r==null)throw Ya.local.invalidArguments||Ya.regionalOptions[\"\"].invalidArguments;if(r=typeof r==\"object\"?r.toString():r+\"\",r===\"\")return null;e=e||this.local.dateFormat,t=t||{};var a=t.shortYearCutoff||this.shortYearCutoff;a=typeof a!=\"string\"?a:this.today().year()%100+parseInt(a,10);for(var n=t.dayNamesShort||this.local.dayNamesShort,i=t.dayNames||this.local.dayNames,o=t.parseMonth||this.local.parseMonth,l=t.monthNumbers||this.local.monthNumbers,s=t.monthNamesShort||this.local.monthNamesShort,u=t.monthNames||this.local.monthNames,f=-1,c=-1,v=-1,d=-1,p=-1,y=!1,m=!1,b=function(R,N){for(var I=1;C+I<e.length&&e.charAt(C+I)===R;)I++;return C+=I-1,Math.floor(I/(N||1))>1},T=function(R,N){var I=b(R,N),O=[2,3,I?4:2,I?4:2,10,11,20][\"oyYJ@!\".indexOf(R)+1],U=new RegExp(\"^-?\\\\d{1,\"+O+\"}\"),Y=r.substring(q).match(U);if(!Y)throw(Ya.local.missingNumberAt||Ya.regionalOptions[\"\"].missingNumberAt).replace(/\\{0\\}/,q);return q+=Y[0].length,parseInt(Y[0],10)},w=this,x=function(){if(typeof l==\"function\"){b(\"m\");var R=l.call(w,r.substring(q));return q+=R.length,R}return T(\"m\")},_=function(R,N,I,O){for(var U=b(R,O)?I:N,Y=0;Y<U.length;Y++)if(r.substr(q,U[Y].length).toLowerCase()===U[Y].toLowerCase())return q+=U[Y].length,Y+w.minMonth;throw(Ya.local.unknownNameAt||Ya.regionalOptions[\"\"].unknownNameAt).replace(/\\{0\\}/,q)},k=function(){if(typeof u==\"function\"){var R=b(\"M\")?u.call(w,r.substring(q)):s.call(w,r.substring(q));return q+=R.length,R}return _(\"M\",s,u)},A=function(){if(r.charAt(q)!==e.charAt(C))throw(Ya.local.unexpectedLiteralAt||Ya.regionalOptions[\"\"].unexpectedLiteralAt).replace(/\\{0\\}/,q);q++},q=0,C=0;C<e.length;C++)if(m)e.charAt(C)===\"'\"&&!b(\"'\")?m=!1:A();else switch(e.charAt(C)){case\"d\":d=T(\"d\");break;case\"D\":_(\"D\",n,i);break;case\"o\":p=T(\"o\");break;case\"w\":T(\"w\");break;case\"m\":v=x();break;case\"M\":v=k();break;case\"y\":var E=C;y=!b(\"y\",2),C=E,c=T(\"y\",2);break;case\"Y\":c=T(\"Y\",2);break;case\"J\":f=T(\"J\")+.5,r.charAt(q)===\".\"&&(q++,T(\"J\"));break;case\"@\":f=T(\"@\")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case\"!\":f=T(\"!\")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case\"*\":q=r.length;break;case\"'\":b(\"'\")?A():m=!0;break;default:A()}if(q<r.length)throw Ya.local.unexpectedText||Ya.regionalOptions[\"\"].unexpectedText;if(c===-1?c=this.today().year():c<100&&y&&(c+=a===-1?1900:this.today().year()-this.today().year()%100-(c<=a?0:100)),typeof v==\"string\"&&(v=o.call(this,c,v)),p>-1){v=1,d=p;for(var P=this.daysInMonth(c,v);d>P;P=this.daysInMonth(c,v))v++,d-=P}return f>-1?this.fromJD(f):this.newDate(c,v,d)},determineDate:function(e,r,t,a,n){t&&typeof t!=\"object\"&&(n=a,a=t,t=null),typeof a!=\"string\"&&(n=a,a=\"\");var i=this,o=function(l){try{return i.parseDate(a,l,n)}catch(c){}l=l.toLowerCase();for(var s=(l.match(/^c/)&&t?t.newDate():null)||i.today(),u=/([+-]?[0-9]+)\\s*(d|w|m|y)?/g,f=u.exec(l);f;)s.add(parseInt(f[1],10),f[2]||\"d\"),f=u.exec(l);return s};return r=r?r.newDate():null,e=e==null?r:typeof e==\"string\"?o(e):typeof e==\"number\"?isNaN(e)||e===1/0||e===-1/0?r:i.today().add(e,\"d\"):i.newDate(e),e}})});var nue=z(()=>{var hu=yn(),QOe=mn(),kM=hu.instance();function s5(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}s5.prototype=new hu.baseCalendar;QOe(s5.prototype,{name:\"Chinese\",jdEpoch:17214255e-1,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{\"\":{name:\"Chinese\",epochs:[\"BEC\",\"EC\"],monthNumbers:function(e,r){if(typeof e==\"string\"){var t=e.match(rHe);return t?t[0]:\"\"}var a=this._validateYear(e),n=e.month(),i=\"\"+this.toChineseMonth(a,n);return r&&i.length<2&&(i=\"0\"+i),this.isIntercalaryMonth(a,n)&&(i+=\"i\"),i},monthNames:function(e){if(typeof e==\"string\"){var r=e.match(tHe);return r?r[0]:\"\"}var t=this._validateYear(e),a=e.month(),n=this.toChineseMonth(t,a),i=[\"\\u4E00\\u6708\",\"\\u4E8C\\u6708\",\"\\u4E09\\u6708\",\"\\u56DB\\u6708\",\"\\u4E94\\u6708\",\"\\u516D\\u6708\",\"\\u4E03\\u6708\",\"\\u516B\\u6708\",\"\\u4E5D\\u6708\",\"\\u5341\\u6708\",\"\\u5341\\u4E00\\u6708\",\"\\u5341\\u4E8C\\u6708\"][n-1];return this.isIntercalaryMonth(t,a)&&(i=\"\\u95F0\"+i),i},monthNamesShort:function(e){if(typeof e==\"string\"){var r=e.match(aHe);return r?r[0]:\"\"}var t=this._validateYear(e),a=e.month(),n=this.toChineseMonth(t,a),i=[\"\\u4E00\",\"\\u4E8C\",\"\\u4E09\",\"\\u56DB\",\"\\u4E94\",\"\\u516D\",\"\\u4E03\",\"\\u516B\",\"\\u4E5D\",\"\\u5341\",\"\\u5341\\u4E00\",\"\\u5341\\u4E8C\"][n-1];return this.isIntercalaryMonth(t,a)&&(i=\"\\u95F0\"+i),i},parseMonth:function(e,r){e=this._validateYear(e);var t=parseInt(r),a;if(isNaN(t))r[0]===\"\\u95F0\"&&(a=!0,r=r.substring(1)),r[r.length-1]===\"\\u6708\"&&(r=r.substring(0,r.length-1)),t=1+[\"\\u4E00\",\"\\u4E8C\",\"\\u4E09\",\"\\u56DB\",\"\\u4E94\",\"\\u516D\",\"\\u4E03\",\"\\u516B\",\"\\u4E5D\",\"\\u5341\",\"\\u5341\\u4E00\",\"\\u5341\\u4E8C\"].indexOf(r);else{var n=r[r.length-1];a=n===\"i\"||n===\"I\"}var i=this.toMonthIndex(e,t,a);return i},dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},_validateYear:function(e,r){if(e.year&&(e=e.year()),typeof e!=\"number\"||e<1888||e>2111)throw r.replace(/\\{0\\}/,this.local.name);return e},toMonthIndex:function(e,r,t){var a=this.intercalaryMonth(e),n=t&&r!==a;if(n||r<1||r>12)throw hu.local.invalidMonth.replace(/\\{0\\}/,this.local.name);var i;return a?!t&&r<=a?i=r-1:i=r:i=r-1,i},toChineseMonth:function(e,r){e.year&&(e=e.year(),r=e.month());var t=this.intercalaryMonth(e),a=t?12:11;if(r<0||r>a)throw hu.local.invalidMonth.replace(/\\{0\\}/,this.local.name);var n;return t?r<t?n=r+1:n=r:n=r+1,n},intercalaryMonth:function(e){e=this._validateYear(e);var r=du[e-du[0]],t=r>>13;return t},isIntercalaryMonth:function(e,r){e.year&&(e=e.year(),r=e.month());var t=this.intercalaryMonth(e);return!!t&&t===r},leapYear:function(e){return this.intercalaryMonth(e)!==0},weekOfYear:function(e,r,t){var a=this._validateYear(e,hu.local.invalidyear),n=pu[a-pu[0]],i=n>>9&4095,o=n>>5&15,l=n&31,s;s=kM.newDate(i,o,l),s.add(4-(s.dayOfWeek()||7),\"d\");var u=this.toJD(e,r,t)-s.toJD();return 1+Math.floor(u/7)},monthsInYear:function(e){return this.leapYear(e)?13:12},daysInMonth:function(e,r){e.year&&(r=e.month(),e=e.year()),e=this._validateYear(e);var t=du[e-du[0]],a=t>>13,n=a?12:11;if(r>n)throw hu.local.invalidMonth.replace(/\\{0\\}/,this.local.name);var i=t&1<<12-r?30:29;return i},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,i,t,hu.local.invalidDate);e=this._validateYear(a.year()),r=a.month(),t=a.day();var n=this.isIntercalaryMonth(e,r),i=this.toChineseMonth(e,r),o=iHe(e,i,t,n);return kM.toJD(o.year,o.month,o.day)},fromJD:function(e){var r=kM.fromJD(e),t=nHe(r.year(),r.month(),r.day()),a=this.toMonthIndex(t.year,t.month,t.isIntercalary);return this.newDate(t.year,a,t.day)},fromString:function(e){var r=e.match(eHe),t=this._validateYear(+r[1]),a=+r[2],n=!!r[3],i=this.toMonthIndex(t,a,n),o=+r[4];return this.newDate(t,i,o)},add:function(e,r,t){var a=e.year(),n=e.month(),i=this.isIntercalaryMonth(a,n),o=this.toChineseMonth(a,n),l=Object.getPrototypeOf(s5.prototype).add.call(this,e,r,t);if(t===\"y\"){var s=l.year(),u=l.month(),f=this.isIntercalaryMonth(s,o),c=i&&f?this.toMonthIndex(s,o,!0):this.toMonthIndex(s,o,!1);c!==u&&l.month(c)}return l}});var eHe=/^\\s*(-?\\d\\d\\d\\d|\\d\\d)[-/](\\d?\\d)([iI]?)[-/](\\d?\\d)/m,rHe=/^\\d?\\d[iI]?/m,tHe=/^闰?十?[一二三四五六七八九]?月/m,aHe=/^闰?十?[一二三四五六七八九]?/m;hu.calendars.chinese=s5;var du=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],pu=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904];function nHe(e,r,t,a){var n,i;if(typeof e==\"object\")n=e,i=r||{};else{var o=typeof e==\"number\"&&e>=1888&&e<=2111;if(!o)throw new Error(\"Solar year outside range 1888-2111\");var l=typeof r==\"number\"&&r>=1&&r<=12;if(!l)throw new Error(\"Solar month outside range 1 - 12\");var s=typeof t==\"number\"&&t>=1&&t<=31;if(!s)throw new Error(\"Solar day outside range 1 - 31\");n={year:e,month:r,day:t},i=a||{}}var u=pu[n.year-pu[0]],f=n.year<<9|n.month<<5|n.day;i.year=f>=u?n.year:n.year-1,u=pu[i.year-pu[0]];var c=u>>9&4095,v=u>>5&15,d=u&31,p,y=new Date(c,v-1,d),m=new Date(n.year,n.month-1,n.day);p=Math.round((m-y)/(24*3600*1e3));var b=du[i.year-du[0]],T;for(T=0;T<13;T++){var w=b&1<<12-T?30:29;if(p<w)break;p-=w}var x=b>>13;return!x||T<x?(i.isIntercalary=!1,i.month=1+T):T===x?(i.isIntercalary=!0,i.month=T):(i.isIntercalary=!1,i.month=T),i.day=1+p,i}function iHe(e,r,t,a,n){var i,o;if(typeof e==\"object\")o=e,i=r||{};else{var l=typeof e==\"number\"&&e>=1888&&e<=2111;if(!l)throw new Error(\"Lunar year outside range 1888-2111\");var s=typeof r==\"number\"&&r>=1&&r<=12;if(!s)throw new Error(\"Lunar month outside range 1 - 12\");var u=typeof t==\"number\"&&t>=1&&t<=30;if(!u)throw new Error(\"Lunar day outside range 1 - 30\");var f;typeof a==\"object\"?(f=!1,i=a):(f=!!a,i=n||{}),o={year:e,month:r,day:t,isIntercalary:f}}var c;c=o.day-1;var v=du[o.year-du[0]],d=v>>13,p;d&&(o.month>d||o.isIntercalary)?p=o.month:p=o.month-1;for(var y=0;y<p;y++){var m=v&1<<12-y?30:29;c+=m}var b=pu[o.year-pu[0]],T=b>>9&4095,w=b>>5&15,x=b&31,_=new Date(T,w-1,x+c);return i.year=_.getFullYear(),i.month=1+_.getMonth(),i.day=_.getDate(),i}});var iue=z(()=>{var Jf=yn(),oHe=mn();function SM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}SM.prototype=new Jf.baseCalendar;oHe(SM.prototype,{name:\"Coptic\",jdEpoch:18250295e-1,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Coptic\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Thout\",\"Paopi\",\"Hathor\",\"Koiak\",\"Tobi\",\"Meshir\",\"Paremhat\",\"Paremoude\",\"Pashons\",\"Paoni\",\"Epip\",\"Mesori\",\"Pi Kogi Enavot\"],monthNamesShort:[\"Tho\",\"Pao\",\"Hath\",\"Koi\",\"Tob\",\"Mesh\",\"Pat\",\"Pad\",\"Pash\",\"Pao\",\"Epi\",\"Meso\",\"PiK\"],dayNames:[\"Tkyriaka\",\"Pesnau\",\"Pshoment\",\"Peftoou\",\"Ptiou\",\"Psoou\",\"Psabbaton\"],dayNamesShort:[\"Tky\",\"Pes\",\"Psh\",\"Pef\",\"Pti\",\"Pso\",\"Psa\"],dayNamesMin:[\"Tk\",\"Pes\",\"Psh\",\"Pef\",\"Pt\",\"Pso\",\"Psa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,Jf.local.invalidYear),t=r.year()+(r.year()<0?1:0);return t%4===3||t%4===-1},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,Jf.local.invalidYear||Jf.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,Jf.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===13&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,r,t,Jf.local.invalidDate);return e=a.year(),e<0&&e++,a.day()+(a.month()-1)*30+(e-1)*365+Math.floor(e/4)+this.jdEpoch-1},fromJD:function(e){var r=Math.floor(e)+.5-this.jdEpoch,t=Math.floor((r-Math.floor((r+366)/1461))/365)+1;t<=0&&t--,r=Math.floor(e)+.5-this.newDate(t,1,1).toJD();var a=Math.floor(r/30)+1,n=r-(a-1)*30+1;return this.newDate(t,a,n)}});Jf.calendars.coptic=SM});var oue=z(()=>{var os=yn(),lHe=mn();function qM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}qM.prototype=new os.baseCalendar;lHe(qM.prototype,{name:\"Discworld\",jdEpoch:17214255e-1,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Discworld\",epochs:[\"BUC\",\"UC\"],monthNames:[\"Ick\",\"Offle\",\"February\",\"March\",\"April\",\"May\",\"June\",\"Grune\",\"August\",\"Spune\",\"Sektober\",\"Ember\",\"December\"],monthNamesShort:[\"Ick\",\"Off\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Gru\",\"Aug\",\"Spu\",\"Sek\",\"Emb\",\"Dec\"],dayNames:[\"Sunday\",\"Octeday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Oct\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Oc\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:2,isRTL:!1}},leapYear:function(e){return this._validate(e,this.minMonth,this.minDay,os.local.invalidYear),!1},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,os.local.invalidYear),13},daysInYear:function(e){return this._validate(e,this.minMonth,this.minDay,os.local.invalidYear),400},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),\"d\"),Math.floor((a.dayOfYear()-1)/8)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,os.local.invalidMonth);return this.daysPerMonth[t.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(e,r,t){var a=this._validate(e,r,t,os.local.invalidDate);return(a.day()+1)%8},weekDay:function(e,r,t){var a=this.dayOfWeek(e,r,t);return a>=2&&a<=6},extraInfo:function(e,r,t){var a=this._validate(e,r,t,os.local.invalidDate);return{century:sHe[Math.floor((a.year()-1)/100)+1]||\"\"}},toJD:function(e,r,t){var a=this._validate(e,r,t,os.local.invalidDate);return e=a.year()+(a.year()<0?1:0),r=a.month(),t=a.day(),t+(r>1?16:0)+(r>2?(r-2)*32:0)+(e-1)*400+this.jdEpoch-1},fromJD:function(e){e=Math.floor(e+.5)-Math.floor(this.jdEpoch)-1;var r=Math.floor(e/400)+1;e-=(r-1)*400,e+=e>15?16:0;var t=Math.floor(e/32)+1,a=e-(t-1)*32+1;return this.newDate(r<=0?r-1:r,t,a)}});var sHe={20:\"Fruitbat\",21:\"Anchovy\"};os.calendars.discworld=qM});var lue=z(()=>{var Kf=yn(),uHe=mn();function LM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}LM.prototype=new Kf.baseCalendar;uHe(LM.prototype,{name:\"Ethiopian\",jdEpoch:17242205e-1,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Ethiopian\",epochs:[\"BEE\",\"EE\"],monthNames:[\"Meskerem\",\"Tikemet\",\"Hidar\",\"Tahesas\",\"Tir\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehase\",\"Pagume\"],monthNamesShort:[\"Mes\",\"Tik\",\"Hid\",\"Tah\",\"Tir\",\"Yek\",\"Meg\",\"Mia\",\"Gen\",\"Sen\",\"Ham\",\"Neh\",\"Pag\"],dayNames:[\"Ehud\",\"Segno\",\"Maksegno\",\"Irob\",\"Hamus\",\"Arb\",\"Kidame\"],dayNamesShort:[\"Ehu\",\"Seg\",\"Mak\",\"Iro\",\"Ham\",\"Arb\",\"Kid\"],dayNamesMin:[\"Eh\",\"Se\",\"Ma\",\"Ir\",\"Ha\",\"Ar\",\"Ki\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,Kf.local.invalidYear),t=r.year()+(r.year()<0?1:0);return t%4===3||t%4===-1},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,Kf.local.invalidYear||Kf.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,Kf.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===13&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,r,t,Kf.local.invalidDate);return e=a.year(),e<0&&e++,a.day()+(a.month()-1)*30+(e-1)*365+Math.floor(e/4)+this.jdEpoch-1},fromJD:function(e){var r=Math.floor(e)+.5-this.jdEpoch,t=Math.floor((r-Math.floor((r+366)/1461))/365)+1;t<=0&&t--,r=Math.floor(e)+.5-this.newDate(t,1,1).toJD();var a=Math.floor(r/30)+1,n=r-(a-1)*30+1;return this.newDate(t,a,n)}});Kf.calendars.ethiopian=LM});var sue=z(()=>{var mu=yn(),fHe=mn();function CM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}CM.prototype=new mu.baseCalendar;fHe(CM.prototype,{name:\"Hebrew\",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{\"\":{name:\"Hebrew\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Nisan\",\"Iyar\",\"Sivan\",\"Tammuz\",\"Av\",\"Elul\",\"Tishrei\",\"Cheshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar\",\"Adar II\"],monthNamesShort:[\"Nis\",\"Iya\",\"Siv\",\"Tam\",\"Av\",\"Elu\",\"Tis\",\"Che\",\"Kis\",\"Tev\",\"She\",\"Ada\",\"Ad2\"],dayNames:[\"Yom Rishon\",\"Yom Sheni\",\"Yom Shlishi\",\"Yom Revi'i\",\"Yom Chamishi\",\"Yom Shishi\",\"Yom Shabbat\"],dayNamesShort:[\"Ris\",\"She\",\"Shl\",\"Rev\",\"Cha\",\"Shi\",\"Sha\"],dayNamesMin:[\"Ri\",\"She\",\"Shl\",\"Re\",\"Ch\",\"Shi\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,mu.local.invalidYear);return this._leapYear(r.year())},_leapYear:function(e){return e=e<0?e+1:e,u5(e*7+1,19)<7},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,mu.local.invalidYear),this._leapYear(e.year?e.year():e)?13:12},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,mu.local.invalidYear);return e=r.year(),this.toJD(e===-1?1:e+1,7,1)-this.toJD(e,7,1)},daysInMonth:function(e,r){return e.year&&(r=e.month(),e=e.year()),this._validate(e,r,this.minDay,mu.local.invalidMonth),r===12&&this.leapYear(e)||r===8&&u5(this.daysInYear(e),10)===5?30:r===9&&u5(this.daysInYear(e),10)===3?29:this.daysPerMonth[r-1]},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==6},extraInfo:function(e,r,t){var a=this._validate(e,r,t,mu.local.invalidDate);return{yearType:(this.leapYear(a)?\"embolismic\":\"common\")+\" \"+[\"deficient\",\"regular\",\"complete\"][this.daysInYear(a)%10-3]}},toJD:function(e,r,t){var a=this._validate(e,r,t,mu.local.invalidDate);e=a.year(),r=a.month(),t=a.day();var n=e<=0?e+1:e,i=this.jdEpoch+this._delay1(n)+this._delay2(n)+t+1;if(r<7){for(var o=7;o<=this.monthsInYear(e);o++)i+=this.daysInMonth(e,o);for(var o=1;o<r;o++)i+=this.daysInMonth(e,o)}else for(var o=7;o<r;o++)i+=this.daysInMonth(e,o);return i},_delay1:function(e){var r=Math.floor((235*e-234)/19),t=12084+13753*r,a=r*29+Math.floor(t/25920);return u5(3*(a+1),7)<3&&a++,a},_delay2:function(e){var r=this._delay1(e-1),t=this._delay1(e),a=this._delay1(e+1);return a-t===356?2:t-r===382?1:0},fromJD:function(e){e=Math.floor(e)+.5;for(var r=Math.floor((e-this.jdEpoch)*98496/35975351)-1;e>=this.toJD(r===-1?1:r+1,7,1);)r++;for(var t=e<this.toJD(r,1,1)?7:1;e>this.toJD(r,t,this.daysInMonth(r,t));)t++;var a=e-this.toJD(r,t,1)+1;return this.newDate(r,t,a)}});function u5(e,r){return e-r*Math.floor(e/r)}mu.calendars.hebrew=CM});var uue=z(()=>{var J2=yn(),cHe=mn();function DM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}DM.prototype=new J2.baseCalendar;cHe(DM.prototype,{name:\"Islamic\",jdEpoch:19484395e-1,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Islamic\",epochs:[\"BH\",\"AH\"],monthNames:[\"Muharram\",\"Safar\",\"Rabi' al-awwal\",\"Rabi' al-thani\",\"Jumada al-awwal\",\"Jumada al-thani\",\"Rajab\",\"Sha'aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi'dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha'\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-ahad\",\"Yawm al-ithnayn\",\"Yawm ath-thulaathaa'\",\"Yawm al-arbi'aa'\",\"Yawm al-kham\\u012Bs\",\"Yawm al-jum'a\",\"Yawm as-sabt\"],dayNamesShort:[\"Aha\",\"Ith\",\"Thu\",\"Arb\",\"Kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"It\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,J2.local.invalidYear);return(r.year()*11+14)%30<11},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){return this.leapYear(e)?355:354},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,J2.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===12&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==5},toJD:function(e,r,t){var a=this._validate(e,r,t,J2.local.invalidDate);return e=a.year(),r=a.month(),t=a.day(),e=e<=0?e+1:e,t+Math.ceil(29.5*(r-1))+(e-1)*354+Math.floor((3+11*e)/30)+this.jdEpoch-1},fromJD:function(e){e=Math.floor(e)+.5;var r=Math.floor((30*(e-this.jdEpoch)+10646)/10631);r=r<=0?r-1:r;var t=Math.min(12,Math.ceil((e-29-this.toJD(r,1,1))/29.5)+1),a=e-this.toJD(r,t,1)+1;return this.newDate(r,t,a)}});J2.calendars.islamic=DM});var fue=z(()=>{var K2=yn(),vHe=mn();function EM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}EM.prototype=new K2.baseCalendar;vHe(EM.prototype,{name:\"Julian\",jdEpoch:17214235e-1,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Julian\",epochs:[\"BC\",\"AD\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,K2.local.invalidYear),t=r.year()<0?r.year()+1:r.year();return t%4===0},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(4-(a.dayOfWeek()||7),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,K2.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===2&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(e,r,t){var a=this._validate(e,r,t,K2.local.invalidDate);return e=a.year(),r=a.month(),t=a.day(),e<0&&e++,r<=2&&(e--,r+=12),Math.floor(365.25*(e+4716))+Math.floor(30.6001*(r+1))+t-1524.5},fromJD:function(e){var r=Math.floor(e+.5),t=r+1524,a=Math.floor((t-122.1)/365.25),n=Math.floor(365.25*a),i=Math.floor((t-n)/30.6001),o=i-Math.floor(i<14?1:13),l=a-Math.floor(o>2?4716:4715),s=t-n-Math.floor(30.6001*i);return l<=0&&l--,this.newDate(l,o,s)}});K2.calendars.julian=EM});var vue=z(()=>{var po=yn(),hHe=mn();function RM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}RM.prototype=new po.baseCalendar;hHe(RM.prototype,{name:\"Mayan\",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{\"\":{name:\"Mayan\",epochs:[\"\",\"\"],monthNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],monthNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],dayNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesMin:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],digits:null,dateFormat:\"YYYY.m.d\",firstDay:0,isRTL:!1,haabMonths:[\"Pop\",\"Uo\",\"Zip\",\"Zotz\",\"Tzec\",\"Xul\",\"Yaxkin\",\"Mol\",\"Chen\",\"Yax\",\"Zac\",\"Ceh\",\"Mac\",\"Kankin\",\"Muan\",\"Pax\",\"Kayab\",\"Cumku\",\"Uayeb\"],tzolkinMonths:[\"Imix\",\"Ik\",\"Akbal\",\"Kan\",\"Chicchan\",\"Cimi\",\"Manik\",\"Lamat\",\"Muluc\",\"Oc\",\"Chuen\",\"Eb\",\"Ben\",\"Ix\",\"Men\",\"Cib\",\"Caban\",\"Etznab\",\"Cauac\",\"Ahau\"]}},leapYear:function(e){return this._validate(e,this.minMonth,this.minDay,po.local.invalidYear),!1},formatYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,po.local.invalidYear);e=r.year();var t=Math.floor(e/400);e=e%400,e+=e<0?400:0;var a=Math.floor(e/20);return t+\".\"+a+\".\"+e%20},forYear:function(e){if(e=e.split(\".\"),e.length<3)throw\"Invalid Mayan year\";for(var r=0,t=0;t<e.length;t++){var a=parseInt(e[t],10);if(Math.abs(a)>19||t>0&&a<0)throw\"Invalid Mayan year\";r=r*20+a}return r},monthsInYear:function(e){return this._validate(e,this.minMonth,this.minDay,po.local.invalidYear),18},weekOfYear:function(e,r,t){return this._validate(e,r,t,po.local.invalidDate),0},daysInYear:function(e){return this._validate(e,this.minMonth,this.minDay,po.local.invalidYear),360},daysInMonth:function(e,r){return this._validate(e,r,this.minDay,po.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(e,r,t){var a=this._validate(e,r,t,po.local.invalidDate);return a.day()},weekDay:function(e,r,t){return this._validate(e,r,t,po.local.invalidDate),!0},extraInfo:function(e,r,t){var a=this._validate(e,r,t,po.local.invalidDate),n=a.toJD(),i=this._toHaab(n),o=this._toTzolkin(n);return{haabMonthName:this.local.haabMonths[i[0]-1],haabMonth:i[0],haabDay:i[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(e){e-=this.jdEpoch;var r=PM(e+8+340,365);return[Math.floor(r/20)+1,PM(r,20)]},_toTzolkin:function(e){return e-=this.jdEpoch,[cue(e+20,20),cue(e+4,13)]},toJD:function(e,r,t){var a=this._validate(e,r,t,po.local.invalidDate);return a.day()+a.month()*20+a.year()*360+this.jdEpoch},fromJD:function(e){e=Math.floor(e)+.5-this.jdEpoch;var r=Math.floor(e/360);e=e%360,e+=e<0?360:0;var t=Math.floor(e/20),a=e%20;return this.newDate(r,t,a)}});function PM(e,r){return e-r*Math.floor(e/r)}function cue(e,r){return PM(e-1,r)+1}po.calendars.mayan=RM});var due=z(()=>{var Qf=yn(),dHe=mn();function FM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}FM.prototype=new Qf.baseCalendar;var hue=Qf.instance(\"gregorian\");dHe(FM.prototype,{name:\"Nanakshahi\",jdEpoch:22576735e-1,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Nanakshahi\",epochs:[\"BN\",\"AN\"],monthNames:[\"Chet\",\"Vaisakh\",\"Jeth\",\"Harh\",\"Sawan\",\"Bhadon\",\"Assu\",\"Katak\",\"Maghar\",\"Poh\",\"Magh\",\"Phagun\"],monthNamesShort:[\"Che\",\"Vai\",\"Jet\",\"Har\",\"Saw\",\"Bha\",\"Ass\",\"Kat\",\"Mgr\",\"Poh\",\"Mgh\",\"Pha\"],dayNames:[\"Somvaar\",\"Mangalvar\",\"Budhvaar\",\"Veervaar\",\"Shukarvaar\",\"Sanicharvaar\",\"Etvaar\"],dayNamesShort:[\"Som\",\"Mangal\",\"Budh\",\"Veer\",\"Shukar\",\"Sanichar\",\"Et\"],dayNamesMin:[\"So\",\"Ma\",\"Bu\",\"Ve\",\"Sh\",\"Sa\",\"Et\"],digits:null,dateFormat:\"dd-mm-yyyy\",firstDay:0,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Qf.local.invalidYear||Qf.regionalOptions[\"\"].invalidYear);return hue.leapYear(r.year()+(r.year()<1?1:0)+1469)},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(1-(a.dayOfWeek()||7),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,Qf.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===12&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(n,r,t){var a=this._validate(n,r,t,Qf.local.invalidMonth),n=a.year();n<0&&n++;for(var i=a.day(),o=1;o<a.month();o++)i+=this.daysPerMonth[o-1];return i+hue.toJD(n+1468,3,13)},fromJD:function(e){e=Math.floor(e+.5);for(var r=Math.floor((e-(this.jdEpoch-1))/366);e>=this.toJD(r+1,1,1);)r++;for(var t=e-Math.floor(this.toJD(r,1,1)+.5)+1,a=1;t>this.daysInMonth(r,a);)t-=this.daysInMonth(r,a),a++;return this.newDate(r,a,t)}});Qf.calendars.nanakshahi=FM});var pue=z(()=>{var e0=yn(),pHe=mn();function zM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}zM.prototype=new e0.baseCalendar;pHe(zM.prototype,{name:\"Nepali\",jdEpoch:17007095e-1,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{\"\":{name:\"Nepali\",epochs:[\"BBS\",\"ABS\"],monthNames:[\"Baisakh\",\"Jestha\",\"Ashadh\",\"Shrawan\",\"Bhadra\",\"Ashwin\",\"Kartik\",\"Mangsir\",\"Paush\",\"Mangh\",\"Falgun\",\"Chaitra\"],monthNamesShort:[\"Bai\",\"Je\",\"As\",\"Shra\",\"Bha\",\"Ash\",\"Kar\",\"Mang\",\"Pau\",\"Ma\",\"Fal\",\"Chai\"],dayNames:[\"Aaitabaar\",\"Sombaar\",\"Manglbaar\",\"Budhabaar\",\"Bihibaar\",\"Shukrabaar\",\"Shanibaar\"],dayNamesShort:[\"Aaita\",\"Som\",\"Mangl\",\"Budha\",\"Bihi\",\"Shukra\",\"Shani\"],dayNamesMin:[\"Aai\",\"So\",\"Man\",\"Bu\",\"Bi\",\"Shu\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:1,isRTL:!1}},leapYear:function(e){return this.daysInYear(e)!==this.daysPerYear},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,e0.local.invalidYear);if(e=r.year(),typeof this.NEPALI_CALENDAR_DATA[e]==\"undefined\")return this.daysPerYear;for(var t=0,a=this.minMonth;a<=12;a++)t+=this.NEPALI_CALENDAR_DATA[e][a];return t},daysInMonth:function(e,r){return e.year&&(r=e.month(),e=e.year()),this._validate(e,r,this.minDay,e0.local.invalidMonth),typeof this.NEPALI_CALENDAR_DATA[e]==\"undefined\"?this.daysPerMonth[r-1]:this.NEPALI_CALENDAR_DATA[e][r]},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==6},toJD:function(e,r,t){var a=this._validate(e,r,t,e0.local.invalidDate);e=a.year(),r=a.month(),t=a.day();var n=e0.instance(),i=0,o=r,l=e;this._createMissingCalendarData(e);var s=e-(o>9||o===9&&t>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(r!==9&&(i=t,o--);o!==9;)o<=0&&(o=12,l--),i+=this.NEPALI_CALENDAR_DATA[l][o],o--;return r===9?(i+=t-this.NEPALI_CALENDAR_DATA[l][0],i<0&&(i+=n.daysInYear(s))):i+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],n.newDate(s,1,1).add(i,\"d\").toJD()},fromJD:function(e){var r=e0.instance(),t=r.fromJD(e),a=t.year(),n=t.dayOfYear(),i=a+56;this._createMissingCalendarData(i);for(var o=9,l=this.NEPALI_CALENDAR_DATA[i][0],s=this.NEPALI_CALENDAR_DATA[i][o]-l+1;n>s;)o++,o>12&&(o=1,i++),s+=this.NEPALI_CALENDAR_DATA[i][o];var u=this.NEPALI_CALENDAR_DATA[i][o]-(s-n);return this.newDate(i,o,u)},_createMissingCalendarData:function(e){var r=this.daysPerMonth.slice(0);r.unshift(17);for(var t=e-1;t<e+2;t++)typeof this.NEPALI_CALENDAR_DATA[t]==\"undefined\"&&(this.NEPALI_CALENDAR_DATA[t]=r)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}});e0.calendars.nepali=zM});var mue=z(()=>{var Ev=yn(),mHe=mn();function c5(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}function f5(e){var r=e-475;e<0&&r++;var t=.242197,a=t*r,n=t*(r+1),i=a-Math.floor(a),o=n-Math.floor(n);return i>o}c5.prototype=new Ev.baseCalendar;mHe(c5.prototype,{name:\"Persian\",jdEpoch:19483205e-1,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Persian\",epochs:[\"BP\",\"AP\"],monthNames:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],monthNamesShort:[\"Far\",\"Ord\",\"Kho\",\"Tir\",\"Mor\",\"Sha\",\"Meh\",\"Aba\",\"Aza\",\"Dey\",\"Bah\",\"Esf\"],dayNames:[\"Yekshanbeh\",\"Doshanbeh\",\"Seshanbeh\",\"Chah\\u0101rshanbeh\",\"Panjshanbeh\",\"Jom'eh\",\"Shanbeh\"],dayNamesShort:[\"Yek\",\"Do\",\"Se\",\"Cha\",\"Panj\",\"Jom\",\"Sha\"],dayNamesMin:[\"Ye\",\"Do\",\"Se\",\"Ch\",\"Pa\",\"Jo\",\"Sh\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,Ev.local.invalidYear);return f5(r.year())},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-((a.dayOfWeek()+1)%7),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,Ev.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===12&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==5},toJD:function(e,r,t){var a=this._validate(e,r,t,Ev.local.invalidDate);e=a.year(),r=a.month(),t=a.day();var n=0;if(e>0)for(var i=1;i<e;i++)f5(i)&&n++;else if(e<0)for(var i=e;i<0;i++)f5(i)&&n--;return t+(r<=7?(r-1)*31:(r-1)*30+6)+(e>0?e-1:e)*365+n+this.jdEpoch-1},fromJD:function(e){e=Math.floor(e)+.5;var r=475+(e-this.toJD(475,1,1))/365.242197,t=Math.floor(r);t<=0&&t--,e>this.toJD(t,12,f5(t)?30:29)&&(t++,t===0&&t++);var a=e-this.toJD(t,1,1)+1,n=a<=186?Math.ceil(a/31):Math.ceil((a-6)/30),i=e-this.toJD(t,n,1)+1;return this.newDate(t,n,i)}});Ev.calendars.persian=c5;Ev.calendars.jalali=c5});var yue=z(()=>{var r0=yn(),yHe=mn(),v5=r0.instance();function NM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}NM.prototype=new r0.baseCalendar;yHe(NM.prototype,{name:\"Taiwan\",jdEpoch:24194025e-1,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Taiwan\",epochs:[\"BROC\",\"ROC\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,r0.local.invalidYear),t=this._t2gYear(r.year());return v5.leapYear(t)},weekOfYear:function(n,r,t){var a=this._validate(n,this.minMonth,this.minDay,r0.local.invalidYear),n=this._t2gYear(a.year());return v5.weekOfYear(n,a.month(),a.day())},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,r0.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===2&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(n,r,t){var a=this._validate(n,r,t,r0.local.invalidDate),n=this._t2gYear(a.year());return v5.toJD(n,a.month(),a.day())},fromJD:function(e){var r=v5.fromJD(e),t=this._g2tYear(r.year());return this.newDate(t,r.month(),r.day())},_t2gYear:function(e){return e+this.yearsOffset+(e>=-this.yearsOffset&&e<=-1?1:0)},_g2tYear:function(e){return e-this.yearsOffset-(e>=1&&e<=this.yearsOffset?1:0)}});r0.calendars.taiwan=NM});var gue=z(()=>{var t0=yn(),gHe=mn(),h5=t0.instance();function IM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}IM.prototype=new t0.baseCalendar;gHe(IM.prototype,{name:\"Thai\",jdEpoch:15230985e-1,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Thai\",epochs:[\"BBE\",\"BE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var r=this._validate(t,this.minMonth,this.minDay,t0.local.invalidYear),t=this._t2gYear(r.year());return h5.leapYear(t)},weekOfYear:function(n,r,t){var a=this._validate(n,this.minMonth,this.minDay,t0.local.invalidYear),n=this._t2gYear(a.year());return h5.weekOfYear(n,a.month(),a.day())},daysInMonth:function(e,r){var t=this._validate(e,r,this.minDay,t0.local.invalidMonth);return this.daysPerMonth[t.month()-1]+(t.month()===2&&this.leapYear(t.year())?1:0)},weekDay:function(e,r,t){return(this.dayOfWeek(e,r,t)||7)<6},toJD:function(n,r,t){var a=this._validate(n,r,t,t0.local.invalidDate),n=this._t2gYear(a.year());return h5.toJD(n,a.month(),a.day())},fromJD:function(e){var r=h5.fromJD(e),t=this._g2tYear(r.year());return this.newDate(t,r.month(),r.day())},_t2gYear:function(e){return e-this.yearsOffset-(e>=1&&e<=this.yearsOffset?1:0)},_g2tYear:function(e){return e+this.yearsOffset+(e>=-this.yearsOffset&&e<=-1?1:0)}});t0.calendars.thai=IM});var bue=z(()=>{var a0=yn(),bHe=mn();function BM(e){this.local=this.regionalOptions[e||\"\"]||this.regionalOptions[\"\"]}BM.prototype=new a0.baseCalendar;bHe(BM.prototype,{name:\"UmmAlQura\",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Umm al-Qura\",epochs:[\"BH\",\"AH\"],monthNames:[\"Al-Muharram\",\"Safar\",\"Rabi' al-awwal\",\"Rabi' Al-Thani\",\"Jumada Al-Awwal\",\"Jumada Al-Thani\",\"Rajab\",\"Sha'aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi'dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha'\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-Ahad\",\"Yawm al-Ithnain\",\"Yawm al-Thal\\u0101th\\u0101\\u2019\",\"Yawm al-Arba\\u2018\\u0101\\u2019\",\"Yawm al-Kham\\u012Bs\",\"Yawm al-Jum\\u2018a\",\"Yawm al-Sabt\"],dayNamesMin:[\"Ah\",\"Ith\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!0}},leapYear:function(e){var r=this._validate(e,this.minMonth,this.minDay,a0.local.invalidYear);return this.daysInYear(r.year())===355},weekOfYear:function(e,r,t){var a=this.newDate(e,r,t);return a.add(-a.dayOfWeek(),\"d\"),Math.floor((a.dayOfYear()-1)/7)+1},daysInYear:function(e){for(var r=0,t=1;t<=12;t++)r+=this.daysInMonth(e,t);return r},daysInMonth:function(e,r){for(var t=this._validate(e,r,this.minDay,a0.local.invalidMonth),a=t.toJD()-24e5+.5,n=0,i=0;i<yu.length;i++){if(yu[i]>a)return yu[n]-yu[n-1];n++}return 30},weekDay:function(e,r,t){return this.dayOfWeek(e,r,t)!==5},toJD:function(e,r,t){var a=this._validate(e,r,t,a0.local.invalidDate),n=12*(a.year()-1)+a.month()-15292,i=a.day()+yu[n-1]-1;return i+24e5-.5},fromJD:function(e){for(var r=e-24e5+.5,t=0,a=0;a<yu.length&&!(yu[a]>r);a++)t++;var n=t+15292,i=Math.floor((n-1)/12),o=i+1,l=n-12*i,s=r-yu[t-1]+1;return this.newDate(o,l,s)},isValid:function(e,r,t){var a=a0.baseCalendar.prototype.isValid.apply(this,arguments);return a&&(e=e.year!=null?e.year:e,a=e>=1276&&e<=1500),a},_validate:function(e,r,t,a){var n=a0.baseCalendar.prototype._validate.apply(this,arguments);if(n.year<1276||n.year>1500)throw a.replace(/\\{0\\}/,this.local.name);return n}});a0.calendars.ummalqura=BM;var yu=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]});var _ue=z((UQe,xue)=>{\"use strict\";xue.exports=yn();aue();nue();iue();oue();lue();sue();uue();fue();vue();due();pue();mue();yue();gue();bue()});var que=z((GQe,Sue)=>{\"use strict\";var Tue=_ue(),Q2=ke(),Aue=Gt(),xHe=Aue.EPOCHJD,_He=Aue.ONEDAY,UM={valType:\"enumerated\",values:Q2.sortObjectKeys(Tue.calendars),editType:\"calc\",dflt:\"gregorian\"},Mue=function(e,r,t,a){var n={};return n[t]=UM,Q2.coerce(e,r,n,t,a)},wHe=function(e,r,t,a){for(var n=0;n<t.length;n++)Mue(e,r,t[n]+\"calendar\",a.calendar)},THe={chinese:\"2000-01-01\",coptic:\"2000-01-01\",discworld:\"2000-01-01\",ethiopian:\"2000-01-01\",hebrew:\"5000-01-01\",islamic:\"1000-01-01\",julian:\"2000-01-01\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-01\",nepali:\"2000-01-01\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-01\",thai:\"2000-01-01\",ummalqura:\"1400-01-01\"},AHe={chinese:\"2000-01-02\",coptic:\"2000-01-03\",discworld:\"2000-01-03\",ethiopian:\"2000-01-05\",hebrew:\"5000-01-01\",islamic:\"1000-01-02\",julian:\"2000-01-03\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-05\",nepali:\"2000-01-05\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-04\",thai:\"2000-01-04\",ummalqura:\"1400-01-06\"},MHe={chinese:[\"2000-01-01\",\"2001-01-01\"],coptic:[\"1700-01-01\",\"1701-01-01\"],discworld:[\"1800-01-01\",\"1801-01-01\"],ethiopian:[\"2000-01-01\",\"2001-01-01\"],hebrew:[\"5700-01-01\",\"5701-01-01\"],islamic:[\"1400-01-01\",\"1401-01-01\"],julian:[\"2000-01-01\",\"2001-01-01\"],mayan:[\"5200-01-01\",\"5201-01-01\"],nanakshahi:[\"0500-01-01\",\"0501-01-01\"],nepali:[\"2000-01-01\",\"2001-01-01\"],persian:[\"1400-01-01\",\"1401-01-01\"],jalali:[\"1400-01-01\",\"1401-01-01\"],taiwan:[\"0100-01-01\",\"0101-01-01\"],thai:[\"2500-01-01\",\"2501-01-01\"],ummalqura:[\"1400-01-01\",\"1401-01-01\"]},d5=\"##\",kHe={d:{0:\"dd\",\"-\":\"d\"},e:{0:\"d\",\"-\":\"d\"},a:{0:\"D\",\"-\":\"D\"},A:{0:\"DD\",\"-\":\"DD\"},j:{0:\"oo\",\"-\":\"o\"},W:{0:\"ww\",\"-\":\"w\"},m:{0:\"mm\",\"-\":\"m\"},b:{0:\"M\",\"-\":\"M\"},B:{0:\"MM\",\"-\":\"MM\"},y:{0:\"yy\",\"-\":\"yy\"},Y:{0:\"yyyy\",\"-\":\"yyyy\"},U:d5,w:d5,c:{0:\"D M d %X yyyy\",\"-\":\"D M d %X yyyy\"},x:{0:\"mm/dd/yyyy\",\"-\":\"mm/dd/yyyy\"}};function SHe(e,r,t){for(var a=Math.floor((r+.05)/_He)+xHe,n=kue(t).fromJD(a),i=0,o,l,s,u,f;(i=e.indexOf(\"%\",i))!==-1;)o=e.charAt(i+1),o===\"0\"||o===\"-\"||o===\"_\"?(s=3,l=e.charAt(i+2),o===\"_\"&&(o=\"-\")):(l=o,o=\"0\",s=2),u=kHe[l],u?(u===d5?f=d5:f=n.formatDate(u[o]),e=e.slice(0,i)+f+e.slice(i+s),i+=f.length):i+=s;return e}var wue={};function kue(e){var r=wue[e];return r||(r=wue[e]=Tue.instance(e),r)}function e1(e){return Q2.extendFlat({},UM,{description:e})}function GM(e){return\"Sets the calendar system to use with `\"+e+\"` date data.\"}var HM={xcalendar:e1(GM(\"x\"))},ql=Q2.extendFlat({},HM,{ycalendar:e1(GM(\"y\"))}),OM=Q2.extendFlat({},ql,{zcalendar:e1(GM(\"z\"))}),Pv=e1([\"Sets the calendar system to use for `range` and `tick0`\",\"if this is a date axis. This does not set the calendar for\",\"interpreting data on this axis, that's specified in the trace\",\"or via the global `layout.calendar`\"].join(\" \"));Sue.exports={moduleType:\"component\",name:\"calendars\",schema:{traces:{scatter:ql,bar:ql,box:ql,heatmap:ql,contour:ql,histogram:ql,histogram2d:ql,histogram2dcontour:ql,scatter3d:OM,surface:OM,mesh3d:OM,scattergl:ql,ohlc:HM,candlestick:HM},layout:{calendar:e1([\"Sets the default calendar system to use for interpreting and\",\"displaying dates throughout the plot.\"].join(\" \"))},subplots:{xaxis:{calendar:Pv},yaxis:{calendar:Pv},scene:{xaxis:{calendar:Pv},yaxis:{calendar:Pv},zaxis:{calendar:Pv}},polar:{radialaxis:{calendar:Pv}}}},layoutAttributes:UM,handleDefaults:Mue,handleTraceDefaults:wHe,CANONICAL_SUNDAY:AHe,CANONICAL_TICK:THe,DFLTRANGE:MHe,getCal:kue,worldCalFmt:SHe}});var Cue=z((YQe,Lue)=>{\"use strict\";Lue.exports=que()});var qHe=z((VQe,Eue)=>{var Due=cX();Due.register([hZ(),e$(),xJ(),HJ(),rK(),aQ(),yQ(),oee(),Fee(),lse(),Kse(),Cue()]);Eue.exports=Due});return qHe();})();\n/*! Bundled license information:\n\nnative-promise-only/lib/npo.src.js:\n  (*! Native Promise Only\n      v0.8.1 (c) Kyle Simpson\n      MIT License: http://getify.mit-license.org\n  *)\n\npolybooljs/index.js:\n  (*\n   * @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc\n   * @license MIT\n   * @preserve Project Home: https://github.com/voidqk/polybooljs\n   *)\n\nieee754/index.js:\n  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)\n\nbuffer/index.js:\n  (*!\n   * The buffer module from node.js, for the browser.\n   *\n   * @author   Feross Aboukhadijeh <https://feross.org>\n   * @license  MIT\n   *)\n\nsafe-buffer/index.js:\n  (*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)\n\nassert/build/internal/util/comparisons.js:\n  (*!\n   * The buffer module from node.js, for the browser.\n   *\n   * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n   * @license  MIT\n   *)\n\nobject-assign/index.js:\n  (*\n  object-assign\n  (c) Sindre Sorhus\n  @license MIT\n  *)\n*/\n\nwindow.Plotly = Plotly;\nreturn Plotly;\n}));","'use strict';\n\nmodule.exports = {\n    moduleType: 'locale',\n    name: 'es',\n    dictionary: {\n        'Autoscale': 'Autoescalar',                                   // components/modebar/buttons.js:139\n        'Box Select': 'Seleccionar Caja',                             // components/modebar/buttons.js:103\n        'Click to enter Colorscale title': 'Introducir el título de la Escala de Color', // plots/plots.js:303\n        'Click to enter Component A title': 'Introducir el título del Componente A', // plots/ternary/ternary.js:392\n        'Click to enter Component B title': 'Introducir el título del Componente B', // plots/ternary/ternary.js:406\n        'Click to enter Component C title': 'Introducir el título del Componente C', // plots/ternary/ternary.js:417\n        'Click to enter Plot title': 'Introducir el título de la Gráfica', // plot_api/plot_api.js:579\n        'Click to enter Plot subtitle': 'Introducir el subtítulo de la Gráfica', // plot_api/plot_api.js:579\n        'Click to enter X axis title': 'Introducir el título del eje X', // plots/plots.js:301\n        'Click to enter Y axis title': 'Introducir el título del eje Y', // plots/plots.js:302\n        'Click to enter radial axis title': 'Introducir el título del eje radial',\n        'Compare data on hover': 'Comparar datos al pasar por encima', // components/modebar/buttons.js:167\n        'Double-click on legend to isolate one trace': 'Haga doble-clic en la leyenda para aislar una traza', // components/legend/handle_click.js:90\n        'Double-click to zoom back out': 'Haga doble-clic para restaurar la escala', // plots/cartesian/dragbox.js:335\n        'Download plot as a PNG': 'Descargar gráfica como PNG',       // components/modebar/buttons.js:52\n        'Download plot': 'Descargar gráfica',                         // components/modebar/buttons.js:53\n        'Edit in Chart Studio': 'Editar en Chart Studio',             // components/modebar/buttons.js:76\n        'IE only supports svg.  Changing format to svg.': 'IE solo soporta svg. Cambiando formato a svg.', // components/modebar/buttons.js:60\n        'Lasso Select': 'Seleccionar con lazo',                       // components/modebar/buttons.js:112\n        'Orbital rotation': 'Rotación esférica',                      // components/modebar/buttons.js:279\n        'Pan': 'Modo Panorámica',                                     // components/modebar/buttons.js:94\n        'Produced with Plotly.js': 'Hecho con Plotly.js',             // components/modebar/modebar.js:256\n        'Reset': 'Reiniciar',                                         // components/modebar/buttons.js:431\n        'Reset axes': 'Reiniciar ejes',                               // components/modebar/buttons.js:148\n        'Reset camera to default': 'Restaurar cámara predeterminada', // components/modebar/buttons.js:313\n        'Reset camera to last save': 'Restaurar anterior cámara',     // components/modebar/buttons.js:321\n        'Reset view': 'Restaurar vista',                              // components/modebar/buttons.js:582\n        'Reset views': 'Restaurar vistas',                            // components/modebar/buttons.js:528\n        'Show closest data on hover': 'Mostrar el dato más cercano al pasar por encima', // components/modebar/buttons.js:157\n        'Snapshot succeeded': 'La captura de la instantánea finalizó correctamente', // components/modebar/buttons.js:66\n        'Sorry, there was a problem downloading your snapshot!': '¡La descarga de la instantánea falló!', // components/modebar/buttons.js:69\n        'Taking snapshot - this may take a few seconds': 'Capturando una instantánea - podría tardar unos segundos', // components/modebar/buttons.js:57\n        'Toggle Spike Lines': 'Mostrar/Ocultar Guías',                // components/modebar/buttons.js:547\n        'Toggle show closest data on hover': 'Activar/Desactivar mostrar el dato más cercano al pasar por encima', // components/modebar/buttons.js:352\n        'Turntable rotation': 'Rotación plana',                       // components/modebar/buttons.js:288\n        'Zoom': 'Modo Ampliar/Reducir',                               // components/modebar/buttons.js:85\n        'Zoom in': 'Ampliar',                                         // components/modebar/buttons.js:121\n        'Zoom out': 'Reducir',                                        // components/modebar/buttons.js:130\n        'close:': 'cierre:',                                          // traces/ohlc/transform.js:139\n        'high:': 'alza:',                                             // traces/ohlc/transform.js:137\n        'incoming flow count:': 'flujo de entrada:',                  // traces/sankey/plot.js:142\n        'kde:': 'edp:',                                               // traces/violin/calc.js:73\n        'lat:': 'lat:',                                               // traces/scattergeo/calc.js:48\n        'lon:': 'lon:',                                               // traces/scattergeo/calc.js:49\n        'low:': 'baja:',                                              // traces/ohlc/transform.js:138\n        'lower fence:': 'límite inferior:',                           // traces/box/calc.js:134\n        'max:': 'máx:',                                               // traces/box/calc.js:132\n        'mean ± σ:': 'media ± σ:',                                    // traces/box/calc.js:133\n        'mean:': 'media:',                                            // traces/box/calc.js:133\n        'median:': 'mediana:',                                        // traces/box/calc.js:128\n        'min:': 'mín:',                                               // traces/box/calc.js:129\n        'new text': 'nuevo texto',\n        'open:': 'apertura:',                                         // traces/ohlc/transform.js:136\n        'outgoing flow count:': 'flujo de salida:',                   // traces/sankey/plot.js:143\n        'q1:': 'q1:',                                                 // traces/box/calc.js:130\n        'q3:': 'q3:',                                                 // traces/box/calc.js:131\n        'source:': 'fuente:',                                         // traces/sankey/plot.js:140\n        'target:': 'destino:',                                        // traces/sankey/plot.js:141\n        'trace': 'traza',                                             // plots/plots.js:305\n        'upper fence:': 'límite superior:'                            // traces/box/calc.js:135\n    },\n    format: {\n        days: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\n        shortDays: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],\n        months: [\n            'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\n            'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'\n        ],\n        shortMonths: [\n            'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun',\n            'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'\n        ],\n        date: '%d/%m/%Y',\n        decimal: ',',\n        thousands: ' '\n    }\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = [\n\t'Float16Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n];\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_GRIDSHIFT = 3;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms\nexport var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms\nexport var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI / 2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI / 4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var primeMeridian = {};\n\nprimeMeridian.greenwich = 0.0; // \"0dE\",\nprimeMeridian.lisbon = -9.131906111111; // \"9d07'54.862\\\"W\",\nprimeMeridian.paris = 2.337229166667; // \"2d20'14.025\\\"E\",\nprimeMeridian.bogota = -74.080916666667; // \"74d04'51.3\\\"W\",\nprimeMeridian.madrid = -3.687938888889; // \"3d41'16.58\\\"W\",\nprimeMeridian.rome = 12.452333333333; // \"12d27'8.4\\\"E\",\nprimeMeridian.bern = 7.439583333333; // \"7d26'22.5\\\"E\",\nprimeMeridian.jakarta = 106.807719444444; // \"106d48'27.79\\\"E\",\nprimeMeridian.ferro = -17.666666666667; // \"17d40'W\",\nprimeMeridian.brussels = 4.367975; // \"4d22'4.71\\\"E\",\nprimeMeridian.stockholm = 18.058277777778; // \"18d3'29.8\\\"E\",\nprimeMeridian.athens = 23.7163375; // \"23d42'58.815\\\"E\",\nprimeMeridian.oslo = 10.722916666667; // \"10d43'22.5\\\"E\"\n\nexport default primeMeridian;\n","export default {\n  mm: { to_meter: 0.001 },\n  cm: { to_meter: 0.01 },\n  ft: { to_meter: 0.3048 },\n  'us-ft': { to_meter: 1200 / 3937 },\n  fath: { to_meter: 1.8288 },\n  kmi: { to_meter: 1852 },\n  'us-ch': { to_meter: 20.1168402336805 },\n  'us-mi': { to_meter: 1609.34721869444 },\n  km: { to_meter: 1000 },\n  'ind-ft': { to_meter: 0.30479841 },\n  'ind-yd': { to_meter: 0.91439523 },\n  mi: { to_meter: 1609.344 },\n  yd: { to_meter: 0.9144 },\n  ch: { to_meter: 20.1168 },\n  link: { to_meter: 0.201168 },\n  dm: { to_meter: 0.1 },\n  in: { to_meter: 0.0254 },\n  'ind-ch': { to_meter: 20.11669506 },\n  'us-in': { to_meter: 0.025400050800101 },\n  'us-yd': { to_meter: 0.914401828803658 }\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n  if (obj[key]) {\n    return obj[key];\n  }\n  var keys = Object.keys(obj);\n  var lkey = key.toLowerCase().replace(ignoredChar, '');\n  var i = -1;\n  var testkey, processedKey;\n  while (++i < keys.length) {\n    testkey = keys[i];\n    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n    if (processedKey === lkey) {\n      return obj[testkey];\n    }\n  }\n}\n","import { D2R } from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\n/**\n * @param {string} defData\n * @returns {import('./defs').ProjectionDefinition}\n */\nexport default function (defData) {\n  /** @type {import('./defs').ProjectionDefinition} */\n  var self = {};\n  var paramObj = defData.split('+').map(function (v) {\n    return v.trim();\n  }).filter(function (a) {\n    return a;\n  }).reduce(function (p, a) {\n    /** @type {Array<?>} */\n    var split = a.split('=');\n    split.push(true);\n    p[split[0].toLowerCase()] = split[1];\n    return p;\n  }, {});\n  var paramName, paramVal, paramOutname;\n  var params = {\n    proj: 'projName',\n    datum: 'datumCode',\n    rf: function (v) {\n      self.rf = parseFloat(v);\n    },\n    lat_0: function (v) {\n      self.lat0 = v * D2R;\n    },\n    lat_1: function (v) {\n      self.lat1 = v * D2R;\n    },\n    lat_2: function (v) {\n      self.lat2 = v * D2R;\n    },\n    lat_ts: function (v) {\n      self.lat_ts = v * D2R;\n    },\n    lon_0: function (v) {\n      self.long0 = v * D2R;\n    },\n    lon_1: function (v) {\n      self.long1 = v * D2R;\n    },\n    lon_2: function (v) {\n      self.long2 = v * D2R;\n    },\n    alpha: function (v) {\n      self.alpha = parseFloat(v) * D2R;\n    },\n    gamma: function (v) {\n      self.rectified_grid_angle = parseFloat(v) * D2R;\n    },\n    lonc: function (v) {\n      self.longc = v * D2R;\n    },\n    x_0: function (v) {\n      self.x0 = parseFloat(v);\n    },\n    y_0: function (v) {\n      self.y0 = parseFloat(v);\n    },\n    k_0: function (v) {\n      self.k0 = parseFloat(v);\n    },\n    k: function (v) {\n      self.k0 = parseFloat(v);\n    },\n    a: function (v) {\n      self.a = parseFloat(v);\n    },\n    b: function (v) {\n      self.b = parseFloat(v);\n    },\n    r: function (v) {\n      self.a = self.b = parseFloat(v);\n    },\n    r_a: function () {\n      self.R_A = true;\n    },\n    zone: function (v) {\n      self.zone = parseInt(v, 10);\n    },\n    south: function () {\n      self.utmSouth = true;\n    },\n    towgs84: function (v) {\n      self.datum_params = v.split(',').map(function (a) {\n        return parseFloat(a);\n      });\n    },\n    to_meter: function (v) {\n      self.to_meter = parseFloat(v);\n    },\n    units: function (v) {\n      self.units = v;\n      var unit = match(units, v);\n      if (unit) {\n        self.to_meter = unit.to_meter;\n      }\n    },\n    from_greenwich: function (v) {\n      self.from_greenwich = v * D2R;\n    },\n    pm: function (v) {\n      var pm = match(PrimeMeridian, v);\n      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n    },\n    nadgrids: function (v) {\n      if (v === '@null') {\n        self.datumCode = 'none';\n      } else {\n        self.nadgrids = v;\n      }\n    },\n    axis: function (v) {\n      var legalAxis = 'ewnsud';\n      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n        self.axis = v;\n      }\n    },\n    approx: function () {\n      self.approx = true;\n    },\n    over: function () {\n      self.over = true;\n    }\n  };\n  for (paramName in paramObj) {\n    paramVal = paramObj[paramName];\n    if (paramName in params) {\n      paramOutname = params[paramName];\n      if (typeof paramOutname === 'function') {\n        paramOutname(paramVal);\n      } else {\n        self[paramOutname] = paramVal;\n      }\n    } else {\n      self[paramName] = paramVal;\n    }\n  }\n  if (typeof self.datumCode === 'string' && self.datumCode !== 'WGS84') {\n    self.datumCode = self.datumCode.toLowerCase();\n  }\n  self['projStr'] = defData;\n  return self;\n}\n","class PROJJSONBuilderBase {\n  static getId(node) {\n    const idNode = node.find((child) => Array.isArray(child) && child[0] === 'ID');\n    if (idNode && idNode.length >= 3) {\n      return {\n        authority: idNode[1],\n        code: parseInt(idNode[2], 10),\n      };\n    }\n    return null;\n  }\n\n  static convertUnit(node, type = 'unit') {\n    if (!node || node.length < 3) {\n      return { type, name: 'unknown', conversion_factor: null };\n    }\n\n    const name = node[1];\n    const conversionFactor = parseFloat(node[2]) || null;\n\n    const idNode = node.find((child) => Array.isArray(child) && child[0] === 'ID');\n    const id = idNode\n      ? {\n        authority: idNode[1],\n        code: parseInt(idNode[2], 10),\n      }\n      : null;\n\n    return {\n      type,\n      name,\n      conversion_factor: conversionFactor,\n      id,\n    };\n  }\n\n  static convertAxis(node) {\n    const name = node[1] || 'Unknown';\n\n    // Determine the direction\n    let direction;\n    const abbreviationMatch = name.match(/^\\((.)\\)$/); // Match abbreviations like \"(E)\" or \"(N)\"\n    if (abbreviationMatch) {\n      // Use the abbreviation to determine the direction\n      const abbreviation = abbreviationMatch[1].toUpperCase();\n      if (abbreviation === 'E') direction = 'east';\n      else if (abbreviation === 'N') direction = 'north';\n      else if (abbreviation === 'U') direction = 'up';\n      else if (node[2]) direction = node[2];\n      else throw new Error(`Unknown axis abbreviation: ${abbreviation}`);\n    } else {\n      // Use the explicit direction provided in the AXIS node\n      direction = node[2] || 'unknown';\n    }\n\n    const orderNode = node.find((child) => Array.isArray(child) && child[0] === 'ORDER');\n    const order = orderNode ? parseInt(orderNode[1], 10) : null;\n\n    const unitNode = node.find(\n      (child) =>\n        Array.isArray(child) &&\n        (child[0] === 'LENGTHUNIT' || child[0] === 'ANGLEUNIT' || child[0] === 'SCALEUNIT')\n    );\n    const unit = this.convertUnit(unitNode);\n\n    return {\n      name,\n      direction, // Use the valid PROJJSON direction value\n      unit,\n      order,\n    };\n  }\n\n  static extractAxes(node) {\n    return node\n      .filter((child) => Array.isArray(child) && child[0] === 'AXIS')\n      .map((axis) => this.convertAxis(axis))\n      .sort((a, b) => (a.order || 0) - (b.order || 0)); // Sort by the \"order\" property\n  }\n\n  static convert(node, result = {}) {\n\n    switch (node[0]) {\n      case 'PROJCRS':\n        result.type = 'ProjectedCRS';\n        result.name = node[1];\n        result.base_crs = node.find((child) => Array.isArray(child) && child[0] === 'BASEGEOGCRS')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'BASEGEOGCRS'))\n          : null;\n        result.conversion = node.find((child) => Array.isArray(child) && child[0] === 'CONVERSION')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'CONVERSION'))\n          : null;\n\n        const csNode = node.find((child) => Array.isArray(child) && child[0] === 'CS');\n        if (csNode) {\n          result.coordinate_system = {\n            type: csNode[1],\n            axis: this.extractAxes(node),\n          };\n        }\n\n        const lengthUnitNode = node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT');\n        if (lengthUnitNode) {\n          const unit = this.convertUnit(lengthUnitNode);\n          result.coordinate_system.unit = unit; // Add unit to coordinate_system\n        }\n\n        result.id = this.getId(node);\n        break;\n\n      case 'BASEGEOGCRS':\n      case 'GEOGCRS':\n      case 'GEODCRS':\n        result.type = node[0] === 'GEODCRS' ? 'GeodeticCRS' : 'GeographicCRS';\n        result.name = node[1];\n      \n        // Handle DATUM or ENSEMBLE\n        const datumOrEnsembleNode = node.find(\n          (child) => Array.isArray(child) && (child[0] === 'DATUM' || child[0] === 'ENSEMBLE')\n        );\n        if (datumOrEnsembleNode) {\n          const datumOrEnsemble = this.convert(datumOrEnsembleNode);\n          if (datumOrEnsembleNode[0] === 'ENSEMBLE') {\n            result.datum_ensemble = datumOrEnsemble;\n          } else {\n            result.datum = datumOrEnsemble;\n          }\n          const primem = node.find((child) => Array.isArray(child) && child[0] === 'PRIMEM');\n          if (primem && primem[1] !== 'Greenwich') {\n            datumOrEnsemble.prime_meridian = {\n              name: primem[1],\n              longitude: parseFloat(primem[2]),\n            }\n          }\n        }\n      \n        result.coordinate_system = {\n          type: 'ellipsoidal',\n          axis: this.extractAxes(node),\n        };\n      \n        result.id = this.getId(node);\n        break;\n\n      case 'DATUM':\n        result.type = 'GeodeticReferenceFrame';\n        result.name = node[1];\n        result.ellipsoid = node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID'))\n          : null;\n        break;\n      \n      case 'ENSEMBLE':\n        result.type = 'DatumEnsemble';\n        result.name = node[1];\n      \n        // Extract ensemble members\n        result.members = node\n          .filter((child) => Array.isArray(child) && child[0] === 'MEMBER')\n          .map((member) => ({\n            type: 'DatumEnsembleMember',\n            name: member[1],\n            id: this.getId(member), // Extract ID as { authority, code }\n          }));\n      \n        // Extract accuracy\n        const accuracyNode = node.find((child) => Array.isArray(child) && child[0] === 'ENSEMBLEACCURACY');\n        if (accuracyNode) {\n          result.accuracy = parseFloat(accuracyNode[1]);\n        }\n      \n        // Extract ellipsoid\n        const ellipsoidNode = node.find((child) => Array.isArray(child) && child[0] === 'ELLIPSOID');\n        if (ellipsoidNode) {\n          result.ellipsoid = this.convert(ellipsoidNode); // Convert the ellipsoid node\n        }\n      \n        // Extract identifier for the ensemble\n        result.id = this.getId(node);\n        break;\n\n      case 'ELLIPSOID':\n        result.type = 'Ellipsoid';\n        result.name = node[1];\n        result.semi_major_axis = parseFloat(node[2]);\n        result.inverse_flattening = parseFloat(node[3]);\n        const units = node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'LENGTHUNIT'), result)\n          : null;\n        break;\n\n      case 'CONVERSION':\n        result.type = 'Conversion';\n        result.name = node[1];\n        result.method = node.find((child) => Array.isArray(child) && child[0] === 'METHOD')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'METHOD'))\n          : null;\n        result.parameters = node\n          .filter((child) => Array.isArray(child) && child[0] === 'PARAMETER')\n          .map((param) => this.convert(param));\n        break;\n\n      case 'METHOD':\n        result.type = 'Method';\n        result.name = node[1];\n        result.id = this.getId(node);\n        break;\n\n      case 'PARAMETER':\n        result.type = 'Parameter';\n        result.name = node[1];\n        result.value = parseFloat(node[2]);\n        result.unit = this.convertUnit(\n          node.find(\n            (child) =>\n              Array.isArray(child) &&\n              (child[0] === 'LENGTHUNIT' || child[0] === 'ANGLEUNIT' || child[0] === 'SCALEUNIT')\n          )\n        );\n        result.id = this.getId(node);\n        break;\n\n      case 'BOUNDCRS':\n        result.type = 'BoundCRS';\n\n        // Process SOURCECRS\n        const sourceCrsNode = node.find((child) => Array.isArray(child) && child[0] === 'SOURCECRS');\n        if (sourceCrsNode) {\n          const sourceCrsContent = sourceCrsNode.find((child) => Array.isArray(child));\n          result.source_crs = sourceCrsContent ? this.convert(sourceCrsContent) : null;\n        }\n\n        // Process TARGETCRS\n        const targetCrsNode = node.find((child) => Array.isArray(child) && child[0] === 'TARGETCRS');\n        if (targetCrsNode) {\n          const targetCrsContent = targetCrsNode.find((child) => Array.isArray(child));\n          result.target_crs = targetCrsContent ? this.convert(targetCrsContent) : null;\n        }\n\n        // Process ABRIDGEDTRANSFORMATION\n        const transformationNode = node.find((child) => Array.isArray(child) && child[0] === 'ABRIDGEDTRANSFORMATION');\n        if (transformationNode) {\n          result.transformation = this.convert(transformationNode);\n        } else {\n          result.transformation = null;\n        }\n        break;\n\n      case 'ABRIDGEDTRANSFORMATION':\n        result.type = 'Transformation';\n        result.name = node[1];\n        result.method = node.find((child) => Array.isArray(child) && child[0] === 'METHOD')\n          ? this.convert(node.find((child) => Array.isArray(child) && child[0] === 'METHOD'))\n          : null;\n\n        result.parameters = node\n          .filter((child) => Array.isArray(child) && (child[0] === 'PARAMETER' || child[0] === 'PARAMETERFILE'))\n          .map((param) => {\n            if (param[0] === 'PARAMETER') {\n              return this.convert(param);\n            } else if (param[0] === 'PARAMETERFILE') {\n              return {\n                name: param[1],\n                value: param[2],\n                id: {\n                  'authority': 'EPSG',\n                  'code': 8656\n                }\n              };\n            }\n          });\n\n        // Adjust the Scale difference parameter if present\n        if (result.parameters.length === 7) {\n          const scaleDifference = result.parameters[6];\n          if (scaleDifference.name === 'Scale difference') {\n            scaleDifference.value = Math.round((scaleDifference.value - 1) * 1e12) / 1e6;\n          }\n        }\n\n        result.id = this.getId(node);\n        break;\n      \n      case 'AXIS':\n        if (!result.coordinate_system) {\n          result.coordinate_system = { type: 'unspecified', axis: [] };\n        }\n        result.coordinate_system.axis.push(this.convertAxis(node));\n        break;\n      \n      case 'LENGTHUNIT':\n        const unit = this.convertUnit(node, 'LinearUnit');\n        if (result.coordinate_system && result.coordinate_system.axis) {\n          result.coordinate_system.axis.forEach((axis) => {\n            if (!axis.unit) {\n              axis.unit = unit;\n            }\n          });\n        }\n        if (unit.conversion_factor && unit.conversion_factor !== 1) {\n          if (result.semi_major_axis) {\n            result.semi_major_axis = {\n              value: result.semi_major_axis,\n              unit,\n            }\n          }\n        }\n        break;\n\n      default:\n        result.keyword = node[0];\n        break;\n    }\n\n    return result;\n  }\n}\n\nexport default PROJJSONBuilderBase;","import PROJJSONBuilderBase from './PROJJSONBuilderBase.js';\n\nclass PROJJSONBuilder2015 extends PROJJSONBuilderBase {\n  static convert(node, result = {}) {\n    super.convert(node, result);\n\n    // Skip `CS` and `USAGE` nodes for WKT2-2015\n    if (result.coordinate_system && result.coordinate_system.subtype === 'Cartesian') {\n      delete result.coordinate_system;\n    }\n    if (result.usage) {\n      delete result.usage;\n    }\n\n    return result;\n  }\n}\n\nexport default PROJJSONBuilder2015;","import PROJJSONBuilderBase from './PROJJSONBuilderBase.js';\n\nclass PROJJSONBuilder2019 extends PROJJSONBuilderBase {\n  static convert(node, result = {}) {\n    super.convert(node, result);\n\n    // Handle `CS` node for WKT2-2019\n    const csNode = node.find((child) => Array.isArray(child) && child[0] === 'CS');\n    if (csNode) {\n      result.coordinate_system = {\n        subtype: csNode[1],\n        axis: this.extractAxes(node),\n      };\n    }\n\n    // Handle `USAGE` node for WKT2-2019\n    const usageNode = node.find((child) => Array.isArray(child) && child[0] === 'USAGE');\n    if (usageNode) {\n      const scope = usageNode.find((child) => Array.isArray(child) && child[0] === 'SCOPE');\n      const area = usageNode.find((child) => Array.isArray(child) && child[0] === 'AREA');\n      const bbox = usageNode.find((child) => Array.isArray(child) && child[0] === 'BBOX');\n      result.usage = {};\n      if (scope) {\n        result.usage.scope = scope[1];\n      }\n      if (area) {\n        result.usage.area = area[1];\n      }\n      if (bbox) {\n        result.usage.bbox = bbox.slice(1);\n      }\n    }\n\n    return result;\n  }\n}\n\nexport default PROJJSONBuilder2019;","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84_]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n  if (typeof text !== 'string') {\n    throw new Error('not a string');\n  }\n  this.text = text.trim();\n  this.level = 0;\n  this.place = 0;\n  this.root = null;\n  this.stack = [];\n  this.currentObject = null;\n  this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n  var char = this.text[this.place++];\n  if (this.state !== QUOTED) {\n    while (whitespace.test(char)) {\n      if (this.place >= this.text.length) {\n        return;\n      }\n      char = this.text[this.place++];\n    }\n  }\n  switch (this.state) {\n    case NEUTRAL:\n      return this.neutral(char);\n    case KEYWORD:\n      return this.keyword(char)\n    case QUOTED:\n      return this.quoted(char);\n    case AFTERQUOTE:\n      return this.afterquote(char);\n    case NUMBER:\n      return this.number(char);\n    case ENDED:\n      return;\n  }\n};\nParser.prototype.afterquote = function(char) {\n  if (char === '\"') {\n    this.word += '\"';\n    this.state = QUOTED;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = this.word.trim();\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n  if (char === ',') {\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n    }\n    this.word = null;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (char === ']') {\n    this.level--;\n    if (this.word !== null) {\n      this.currentObject.push(this.word);\n      this.word = null;\n    }\n    this.state = NEUTRAL;\n    this.currentObject = this.stack.pop();\n    if (!this.currentObject) {\n      this.state = ENDED;\n    }\n\n    return;\n  }\n};\nParser.prototype.number = function(char) {\n  if (digets.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.word = parseFloat(this.word);\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n  if (char === '\"') {\n    this.state = AFTERQUOTE;\n    return;\n  }\n  this.word += char;\n  return;\n};\nParser.prototype.keyword = function(char) {\n  if (keyword.test(char)) {\n    this.word += char;\n    return;\n  }\n  if (char === '[') {\n    var newObjects = [];\n    newObjects.push(this.word);\n    this.level++;\n    if (this.root === null) {\n      this.root = newObjects;\n    } else {\n      this.currentObject.push(newObjects);\n    }\n    this.stack.push(this.currentObject);\n    this.currentObject = newObjects;\n    this.state = NEUTRAL;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n  if (latin.test(char)) {\n    this.word = char;\n    this.state = KEYWORD;\n    return;\n  }\n  if (char === '\"') {\n    this.word = '';\n    this.state = QUOTED;\n    return;\n  }\n  if (digets.test(char)) {\n    this.word = char;\n    this.state = NUMBER;\n    return;\n  }\n  if (endThings.test(char)) {\n    this.afterItem(char);\n    return;\n  }\n  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n  while (this.place < this.text.length) {\n    this.readCharicter();\n  }\n  if (this.state === ENDED) {\n    return this.root;\n  }\n  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n  var parser = new Parser(txt);\n  return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n  if (Array.isArray(key)) {\n    value.unshift(key);\n    key = null;\n  }\n  var thing = key ? {} : obj;\n\n  var out = value.reduce(function(newObj, item) {\n    sExpr(item, newObj);\n    return newObj\n  }, thing);\n  if (key) {\n    obj[key] = out;\n  }\n}\n\nexport function sExpr(v, obj) {\n  if (!Array.isArray(v)) {\n    obj[v] = true;\n    return;\n  }\n  var key = v.shift();\n  if (key === 'PARAMETER') {\n    key = v.shift();\n  }\n  if (v.length === 1) {\n    if (Array.isArray(v[0])) {\n      obj[key] = {};\n      sExpr(v[0], obj[key]);\n      return;\n    }\n    obj[key] = v[0];\n    return;\n  }\n  if (!v.length) {\n    obj[key] = true;\n    return;\n  }\n  if (key === 'TOWGS84') {\n    obj[key] = v;\n    return;\n  }\n  if (key === 'AXIS') {\n    if (!(key in obj)) {\n      obj[key] = [];\n    }\n    obj[key].push(v);\n    return;\n  }\n  if (!Array.isArray(key)) {\n    obj[key] = {};\n  }\n\n  var i;\n  switch (key) {\n    case 'UNIT':\n    case 'PRIMEM':\n    case 'VERT_DATUM':\n      obj[key] = {\n        name: v[0].toLowerCase(),\n        convert: v[1]\n      };\n      if (v.length === 3) {\n        sExpr(v[2], obj[key]);\n      }\n      return;\n    case 'SPHEROID':\n    case 'ELLIPSOID':\n      obj[key] = {\n        name: v[0],\n        a: v[1],\n        rf: v[2]\n      };\n      if (v.length === 4) {\n        sExpr(v[3], obj[key]);\n      }\n      return;\n    case 'EDATUM':\n    case 'ENGINEERINGDATUM':\n    case 'LOCAL_DATUM':\n    case 'DATUM':\n    case 'VERT_CS':\n    case 'VERTCRS':\n    case 'VERTICALCRS':\n      v[0] = ['name', v[0]];\n      mapit(obj, key, v);\n      return;\n    case 'COMPD_CS':\n    case 'COMPOUNDCRS':\n    case 'FITTED_CS':\n    // the followings are the crs defined in\n    // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n    case 'PROJECTEDCRS':\n    case 'PROJCRS':\n    case 'GEOGCS':\n    case 'GEOCCS':\n    case 'PROJCS':\n    case 'LOCAL_CS':\n    case 'GEODCRS':\n    case 'GEODETICCRS':\n    case 'GEODETICDATUM':\n    case 'ENGCRS':\n    case 'ENGINEERINGCRS':\n      v[0] = ['name', v[0]];\n      mapit(obj, key, v);\n      obj[key].type = key;\n      return;\n    default:\n      i = -1;\n      while (++i < v.length) {\n        if (!Array.isArray(v[i])) {\n          return sExpr(v, obj[key]);\n        }\n      }\n      return mapit(obj, key, v);\n  }\n}\n","var D2R = 0.01745329251994329577;\n\nexport function d2r(input) {\n  return input * D2R;\n}\n\nexport function applyProjectionDefaults(wkt) {\n  // Normalize projName for WKT2 compatibility\n  const normalizedProjName = (wkt.projName || '').toLowerCase().replace(/_/g, ' ');\n\n  if (wkt.long0 === undefined && wkt.longc !== undefined) {\n    wkt.long0 = wkt.longc; // keep in the projection's native prime meridian frame\n  }\n  if (!wkt.lat_ts && wkt.lat1 && (normalizedProjName === 'stereographic south pole' || normalizedProjName === 'polar stereographic (variant b)')) {\n    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n    wkt.lat_ts = wkt.lat1;\n    delete wkt.lat1;\n  } else if (!wkt.lat_ts && wkt.lat0 && (normalizedProjName === 'polar stereographic' || normalizedProjName === 'polar stereographic (variant a)')) {\n    wkt.lat_ts = wkt.lat0;\n    wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90);\n    delete wkt.lat1;\n  }\n}","import { applyProjectionDefaults } from './util.js';\n\n// Helper function to process units and to_meter\nfunction processUnit(unit) {\n  let result = { units: null, to_meter: undefined };\n\n  if (typeof unit === 'string') {\n    result.units = unit.toLowerCase();\n    if (result.units === 'metre') {\n      result.units = 'meter'; // Normalize 'metre' to 'meter'\n    }\n    if (result.units === 'meter') {\n      result.to_meter = 1; // Only set to_meter if units are 'meter'\n    }\n  } else if (unit && unit.name) {\n    result.units = unit.name.toLowerCase();\n    if (result.units === 'metre') {\n      result.units = 'meter'; // Normalize 'metre' to 'meter'\n    }\n    result.to_meter = unit.conversion_factor;\n  }\n\n  return result;\n}\n\nfunction toValue(valueOrObject) {\n  if (typeof valueOrObject === 'object') {\n    return valueOrObject.value * valueOrObject.unit.conversion_factor;\n  }\n  return valueOrObject;\n}\n\nfunction calculateEllipsoid(value, result) {\n  if (value.ellipsoid.radius) {\n    result.a = value.ellipsoid.radius;\n    result.rf = 0;\n  } else {\n    result.a = toValue(value.ellipsoid.semi_major_axis);\n    if (value.ellipsoid.inverse_flattening !== undefined) {\n      result.rf = value.ellipsoid.inverse_flattening;\n    } else if (value.ellipsoid.semi_major_axis !== undefined && value.ellipsoid.semi_minor_axis !== undefined) {\n      result.rf = result.a / (result.a - toValue(value.ellipsoid.semi_minor_axis));\n    }\n  }\n}\n\nexport function transformPROJJSON(projjson, result = {}) {\n  if (!projjson || typeof projjson !== 'object') {\n    return projjson; // Return primitive values as-is\n  }\n\n  if (projjson.type === 'BoundCRS') {\n    transformPROJJSON(projjson.source_crs, result);\n\n    if (projjson.transformation) {\n      if (projjson.transformation.method && projjson.transformation.method.name === 'NTv2') {\n        // Set nadgrids to the filename from the parameterfile\n        result.nadgrids = projjson.transformation.parameters[0].value;\n      } else {\n        // Populate datum_params if no parameterfile is found\n        result.datum_params = projjson.transformation.parameters.map((param) => param.value);\n      }\n    }\n    return result; // Return early for BoundCRS\n  }\n\n  // Handle specific keys in PROJJSON\n  Object.keys(projjson).forEach((key) => {\n    const value = projjson[key];\n    if (value === null) {\n      return;\n    }\n\n    switch (key) {\n      case 'name':\n        if (result.srsCode) {\n          break;\n        }\n        result.name = value;\n        result.srsCode = value; // Map `name` to `srsCode`\n        break;\n\n      case 'type':\n        if (value === 'GeographicCRS') {\n          result.projName = 'longlat';\n        } else if (value === 'GeodeticCRS') {\n          if (projjson.coordinate_system && projjson.coordinate_system.subtype === 'Cartesian') {\n            result.projName = 'geocent';\n          } else {\n            result.projName = 'longlat';\n          }\n        } else if (value === 'ProjectedCRS' && projjson.conversion && projjson.conversion.method) {\n          result.projName = projjson.conversion.method.name; // Retain original capitalization\n        }\n        break;\n\n      case 'datum':\n      case 'datum_ensemble': // Handle both datum and ensemble\n        if (value.ellipsoid) {\n          // Extract ellipsoid properties\n          result.ellps = value.ellipsoid.name;\n          calculateEllipsoid(value, result);\n        }\n        if (value.prime_meridian) {\n          result.from_greenwich = value.prime_meridian.longitude * Math.PI / 180; // Convert to radians\n        }\n        break;\n\n      case 'ellipsoid':\n        result.ellps = value.name;\n        calculateEllipsoid(value, result);\n        break;\n\n      case 'prime_meridian':\n        result.long0 = (value.longitude || 0) * Math.PI / 180; // Convert to radians\n        break;\n\n      case 'coordinate_system':\n        if (value.axis) {\n          const directionMap = {\n            'east': 'e',\n            'north': 'n',\n            'west': 'w',\n            'south': 's',\n            'up': 'u',\n            'down': 'd',\n            'geocentricx': 'e',\n            'geocentricy': 'n',\n            'geocentricz': 'u',\n          };\n          const mapped = value.axis.map((axis) => directionMap[axis.direction.toLowerCase()]);\n          if (mapped.every(Boolean)) {\n            result.axis = mapped.join('');\n            if (result.axis.length === 2) {\n              result.axis += 'u';\n            }\n          }\n\n          if (value.unit) {\n            const { units, to_meter } = processUnit(value.unit);\n            result.units = units;\n            result.to_meter = to_meter;\n          } else if (value.axis[0] && value.axis[0].unit) {\n            const { units, to_meter } = processUnit(value.axis[0].unit);\n            result.units = units;\n            result.to_meter = to_meter;\n          }\n        }\n        break;\n        \n      case 'id':\n        if (value.authority && value.code) {\n          result.title = value.authority + ':' + value.code;\n        }\n        break;\n\n      case 'conversion':\n        if (value.method && value.method.name) {\n          result.projName = value.method.name; // Retain original capitalization\n        }\n        if (value.parameters) {\n          value.parameters.forEach((param) => {\n            const paramName = param.name.toLowerCase().replace(/\\s+/g, '_');\n            const paramValue = param.value;\n            if (param.unit && param.unit.conversion_factor) {\n              result[paramName] = paramValue * param.unit.conversion_factor; // Convert to radians or meters\n            } else if (param.unit === 'degree') {\n              result[paramName] = paramValue * Math.PI / 180; // Convert to radians\n            } else {\n              result[paramName] = paramValue;\n            }\n          });\n        }\n        break;\n\n      case 'unit':\n        if (value.name) {\n          result.units = value.name.toLowerCase();\n          if (result.units === 'metre') {\n            result.units = 'meter';\n          }\n        }\n        if (value.conversion_factor) {\n          result.to_meter = value.conversion_factor;\n        }\n        break;\n\n      case 'base_crs':\n        transformPROJJSON(value, result); // Pass `result` directly\n        result.datumCode = value.id ? value.id.authority + '_' + value.id.code : value.name; // Set datumCode\n        break;\n\n      default:\n        // Ignore irrelevant or unneeded properties\n        break;\n    }\n  });\n\n  // Additional calculated properties\n  if (result.latitude_of_false_origin !== undefined) {\n    result.lat0 = result.latitude_of_false_origin; // Already in radians\n  }\n  if (result.longitude_of_false_origin !== undefined) {\n    result.long0 = result.longitude_of_false_origin;\n  }\n  if (result.latitude_of_standard_parallel !== undefined) {\n    result.lat0 = result.latitude_of_standard_parallel;\n    result.lat1 = result.latitude_of_standard_parallel;\n  }\n  if (result.latitude_of_1st_standard_parallel !== undefined) {\n    result.lat1 = result.latitude_of_1st_standard_parallel;\n  }\n  if (result.latitude_of_2nd_standard_parallel !== undefined) {\n    result.lat2 = result.latitude_of_2nd_standard_parallel; \n  }\n  if (result.latitude_of_projection_centre !== undefined) {\n    result.lat0 = result.latitude_of_projection_centre;\n  }\n  if (result.longitude_of_projection_centre !== undefined) {\n    result.longc = result.longitude_of_projection_centre;\n  }\n  if (result.easting_at_false_origin !== undefined) {\n    result.x0 = result.easting_at_false_origin;\n  }\n  if (result.northing_at_false_origin !== undefined) {\n    result.y0 = result.northing_at_false_origin;\n  }\n  if (result.latitude_of_natural_origin !== undefined) {\n    result.lat0 = result.latitude_of_natural_origin;\n  }\n  if (result.longitude_of_natural_origin !== undefined) {\n    result.long0 = result.longitude_of_natural_origin;\n  }\n  if (result.longitude_of_origin !== undefined) {\n    result.long0 = result.longitude_of_origin;\n  }\n  if (result.false_easting !== undefined) {\n    result.x0 = result.false_easting;\n  }\n  if (result.easting_at_projection_centre) {\n    result.x0 = result.easting_at_projection_centre;\n  }\n  if (result.false_northing !== undefined) {\n    result.y0 = result.false_northing;\n  }\n  if (result.northing_at_projection_centre) {\n    result.y0 = result.northing_at_projection_centre;\n  }\n  if (result.standard_parallel_1 !== undefined) {\n    result.lat1 = result.standard_parallel_1;\n  }\n  if (result.standard_parallel_2 !== undefined) {\n    result.lat2 = result.standard_parallel_2;\n  }\n  if (result.scale_factor_at_natural_origin !== undefined) {\n    result.k0 = result.scale_factor_at_natural_origin;\n  }\n  if (result.scale_factor_at_projection_centre !== undefined) {\n    result.k0 = result.scale_factor_at_projection_centre;\n  }\n  if (result.scale_factor_on_pseudo_standard_parallel !== undefined) {  \n    result.k0 = result.scale_factor_on_pseudo_standard_parallel;\n  }\n  if (result.azimuth !== undefined) {\n    result.alpha = result.azimuth;\n  }\n  if (result.azimuth_at_projection_centre !== undefined) {\n    result.alpha = result.azimuth_at_projection_centre;\n  }\n  if (result.angle_from_rectified_to_skew_grid) {\n    result.rectified_grid_angle = result.angle_from_rectified_to_skew_grid;\n  }\n\n  // Apply projection defaults\n  applyProjectionDefaults(result);\n\n  return result;\n}","import { buildPROJJSON } from './buildPROJJSON.js';\nimport { detectWKTVersion } from './detectWKTVersion.js';\nimport parser from './parser.js';\nimport {sExpr} from './process.js';\nimport { transformPROJJSON } from './transformPROJJSON.js';\nimport { applyProjectionDefaults, d2r } from './util.js';\n\nvar knownTypes = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS', 'GEOCCS', 'PROJCS', 'LOCAL_CS', 'GEODCRS',\n  'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\nfunction rename(obj, params) {\n  var outName = params[0];\n  var inName = params[1];\n  if (!(outName in obj) && (inName in obj)) {\n    obj[outName] = obj[inName];\n    if (params.length === 3) {\n      obj[outName] = params[2](obj[outName]);\n    }\n  }\n}\n\nfunction cleanWKT(wkt) {\n  var keys = Object.keys(wkt);\n  for (var i = 0, ii = keys.length; i <ii; ++i) {\n    var key = keys[i];\n    // the followings are the crs defined in\n    // https://github.com/proj4js/proj4js/blob/1da4ed0b865d0fcb51c136090569210cdcc9019e/lib/parseCode.js#L11\n    if (knownTypes.indexOf(key) !== -1) {\n      setPropertiesFromWkt(wkt[key]);\n    }\n    if (typeof wkt[key] === 'object') {\n      cleanWKT(wkt[key]);\n    }\n  }\n}\n\nfunction setPropertiesFromWkt(wkt) {\n  if (wkt.AUTHORITY) {\n    var authority = Object.keys(wkt.AUTHORITY)[0];\n    if (authority && authority in wkt.AUTHORITY) {\n      wkt.title = authority + ':' + wkt.AUTHORITY[authority];\n    }\n  }\n  if (wkt.type === 'GEOGCS') {\n    wkt.projName = 'longlat';\n  } else if (wkt.type === 'LOCAL_CS') {\n    wkt.projName = 'identity';\n    wkt.local = true;\n  } else {\n    if (typeof wkt.PROJECTION === 'object') {\n      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n    } else {\n      wkt.projName = wkt.PROJECTION;\n    }\n  }\n  if (wkt.AXIS) {\n    var axisOrder = '';\n    for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n      var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()];\n      if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) {\n        axisOrder += 'n';\n      } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) {\n        axisOrder += 's';\n      } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) {\n        axisOrder += 'e';\n      } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) {\n        axisOrder += 'w';\n      }\n    }\n    if (axisOrder.length === 2) {\n      axisOrder += 'u';\n    }\n    if (axisOrder.length === 3) {\n      wkt.axis = axisOrder;\n    }\n  }\n  if (wkt.UNIT) {\n    wkt.units = wkt.UNIT.name.toLowerCase();\n    if (wkt.units === 'metre') {\n      wkt.units = 'meter';\n    }\n    if (wkt.UNIT.convert) {\n      if (wkt.type === 'GEOGCS') {\n        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n        }\n      } else {\n        wkt.to_meter = wkt.UNIT.convert;\n      }\n    }\n  }\n  var geogcs = wkt.GEOGCS;\n  if (wkt.type === 'GEOGCS') {\n    geogcs = wkt;\n  }\n  if (geogcs) {\n    if (geogcs.PRIMEM && geogcs.PRIMEM.convert) {\n      wkt.from_greenwich = d2r(geogcs.PRIMEM.convert);\n    }\n    if (geogcs.DATUM) {\n      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n    } else {\n      wkt.datumCode = geogcs.name.toLowerCase();\n    }\n    if (wkt.datumCode.slice(0, 2) === 'd_') {\n      wkt.datumCode = wkt.datumCode.slice(2);\n    }\n    if (wkt.datumCode === 'new_zealand_1949') {\n      wkt.datumCode = 'nzgd49';\n    }\n    if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n        wkt.sphere = true;\n      }\n      wkt.datumCode = 'wgs84';\n    }\n    if (wkt.datumCode === 'belge_1972') {\n      wkt.datumCode = 'rnb72';\n    }\n    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n        wkt.ellps = 'intl';\n      }\n\n      wkt.a = geogcs.DATUM.SPHEROID.a;\n      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf);\n    }\n\n    if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n      wkt.datum_params = geogcs.DATUM.TOWGS84;\n    }\n    if (~wkt.datumCode.indexOf('osgb_1936')) {\n      wkt.datumCode = 'osgb36';\n    }\n    if (~wkt.datumCode.indexOf('osni_1952')) {\n      wkt.datumCode = 'osni52';\n    }\n    if (~wkt.datumCode.indexOf('tm65')\n      || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n      wkt.datumCode = 'ire65';\n    }\n    if (wkt.datumCode === 'ch1903+') {\n      wkt.datumCode = 'ch1903';\n    }\n    if (~wkt.datumCode.indexOf('israel')) {\n      wkt.datumCode = 'isr93';\n    }\n  }\n  if (wkt.b && !isFinite(wkt.b)) {\n    wkt.b = wkt.a;\n  }\n  if (wkt.rectified_grid_angle) {\n    wkt.rectified_grid_angle = d2r(wkt.rectified_grid_angle);\n  }\n\n  function toMeter(input) {\n    var ratio = wkt.to_meter || 1;\n    return input * ratio;\n  }\n  var renamer = function(a) {\n    return rename(wkt, a);\n  };\n  var list = [\n    ['standard_parallel_1', 'Standard_Parallel_1'],\n    ['standard_parallel_1', 'Latitude of 1st standard parallel'],\n    ['standard_parallel_2', 'Standard_Parallel_2'],\n    ['standard_parallel_2', 'Latitude of 2nd standard parallel'],\n    ['false_easting', 'False_Easting'],\n    ['false_easting', 'False easting'],\n    ['false-easting', 'Easting at false origin'],\n    ['false_northing', 'False_Northing'],\n    ['false_northing', 'False northing'],\n    ['false_northing', 'Northing at false origin'],\n    ['central_meridian', 'Central_Meridian'],\n    ['central_meridian', 'Longitude of natural origin'],\n    ['central_meridian', 'Longitude of false origin'],\n    ['latitude_of_origin', 'Latitude_Of_Origin'],\n    ['latitude_of_origin', 'Central_Parallel'],\n    ['latitude_of_origin', 'Latitude of natural origin'],\n    ['latitude_of_origin', 'Latitude of false origin'],\n    ['scale_factor', 'Scale_Factor'],\n    ['k0', 'scale_factor'],\n    ['latitude_of_center', 'Latitude_Of_Center'],\n    ['latitude_of_center', 'Latitude_of_center'],\n    ['lat0', 'latitude_of_center', d2r],\n    ['longitude_of_center', 'Longitude_Of_Center'],\n    ['longitude_of_center', 'Longitude_of_center'],\n    ['longc', 'longitude_of_center', d2r],\n    ['x0', 'false_easting', toMeter],\n    ['y0', 'false_northing', toMeter],\n    ['long0', 'central_meridian', d2r],\n    ['lat0', 'latitude_of_origin', d2r],\n    ['lat0', 'standard_parallel_1', d2r],\n    ['lat1', 'standard_parallel_1', d2r],\n    ['lat2', 'standard_parallel_2', d2r],\n    ['azimuth', 'Azimuth'],\n    ['alpha', 'azimuth', d2r],\n    ['srsCode', 'name']\n  ];\n  list.forEach(renamer);\n  applyProjectionDefaults(wkt);\n}\nexport default function(wkt) {\n  if (typeof wkt === 'object') {\n    return transformPROJJSON(wkt);\n  }\n  const version = detectWKTVersion(wkt);\n  var lisp = parser(wkt);\n  if (version === 'WKT2') {\n    const projjson = buildPROJJSON(lisp);\n    return transformPROJJSON(projjson);\n  }\n  var type = lisp[0];\n  var obj = {};\n  sExpr(lisp, obj);\n  cleanWKT(obj);\n  return obj[type];\n}\n","/**\n * Detects whether the WKT string is WKT1 or WKT2.\n * @param {string} wkt The WKT string.\n * @returns {string} The detected version (\"WKT1\" or \"WKT2\").\n */\nexport function detectWKTVersion(wkt) {\n  // Normalize the WKT string for easier keyword matching\n  const normalizedWKT = wkt.toUpperCase();\n\n  // Check for WKT2-specific keywords\n  if (\n    normalizedWKT.includes('PROJCRS') ||\n    normalizedWKT.includes('GEOGCRS') ||\n    normalizedWKT.includes('BOUNDCRS') ||\n    normalizedWKT.includes('VERTCRS') ||\n    normalizedWKT.includes('LENGTHUNIT') ||\n    normalizedWKT.includes('ANGLEUNIT') ||\n    normalizedWKT.includes('SCALEUNIT')\n  ) {\n    return 'WKT2';\n  }\n\n  // Check for WKT1-specific keywords\n  if (\n    normalizedWKT.includes('PROJCS') ||\n    normalizedWKT.includes('GEOGCS') ||\n    normalizedWKT.includes('LOCAL_CS') ||\n    normalizedWKT.includes('VERT_CS') ||\n    normalizedWKT.includes('UNIT')\n  ) {\n    return 'WKT1';\n  }\n\n  // Default to WKT1 if no specific indicators are found\n  return 'WKT1';\n}","import PROJJSONBuilder2015 from './PROJJSONBuilder2015.js';\nimport PROJJSONBuilder2019 from './PROJJSONBuilder2019.js';\n\n/**\n * Detects the WKT2 version based on the structure of the WKT.\n * @param {Array} root The root WKT array node.\n * @returns {string} The detected version (\"2015\" or \"2019\").\n */\nfunction detectWKT2Version(root) {\n  // Check for WKT2-2019-specific nodes\n  if (root.find((child) => Array.isArray(child) && child[0] === 'USAGE')) {\n    return '2019'; // `USAGE` is specific to WKT2-2019\n  }\n\n  // Check for WKT2-2015-specific nodes\n  if (root.find((child) => Array.isArray(child) && child[0] === 'CS')) {\n    return '2015'; // `CS` is valid in both, but default to 2015 unless `USAGE` is present\n  }\n\n  if (root[0] === 'BOUNDCRS' || root[0] === 'PROJCRS' || root[0] === 'GEOGCRS') {\n    return '2015'; // These are valid in both, but default to 2015\n  }\n\n  // Default to WKT2-2015 if no specific indicators are found\n  return '2015';\n}\n\n/**\n * Builds a PROJJSON object from a WKT array structure.\n * @param {Array} root The root WKT array node.\n * @returns {Object} The PROJJSON object.\n */\nexport function buildPROJJSON(root) {\n  const version = detectWKT2Version(root);\n  const builder = version === '2019' ? PROJJSONBuilder2019 : PROJJSONBuilder2015;\n  return builder.convert(root);\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\n/**\n * @typedef {Object} ProjectionDefinition\n * @property {string} title\n * @property {string} [projName]\n * @property {string} [ellps]\n * @property {import('./Proj.js').DatumDefinition} [datum]\n * @property {string} [datumName]\n * @property {number} [rf]\n * @property {number} [lat0]\n * @property {number} [lat1]\n * @property {number} [lat2]\n * @property {number} [lat_ts]\n * @property {number} [long0]\n * @property {number} [long1]\n * @property {number} [long2]\n * @property {number} [alpha]\n * @property {number} [longc]\n * @property {number} [x0]\n * @property {number} [y0]\n * @property {number} [k0]\n * @property {number} [a]\n * @property {number} [b]\n * @property {true} [R_A]\n * @property {number} [zone]\n * @property {true} [utmSouth]\n * @property {string|Array<number>} [datum_params]\n * @property {number} [to_meter]\n * @property {string} [units]\n * @property {number} [from_greenwich]\n * @property {string} [datumCode]\n * @property {string} [nadgrids]\n * @property {string} [axis]\n * @property {boolean} [sphere]\n * @property {number} [rectified_grid_angle]\n * @property {boolean} [approx]\n * @property {boolean} [over]\n * @property {string} [projStr]\n * @property {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} inverse\n * @property {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} forward\n */\n\n/**\n * @overload\n * @param {string} name\n * @param {string|ProjectionDefinition|import('./core.js').PROJJSONDefinition} projection\n * @returns {void}\n */\n/**\n * @overload\n * @param {Array<[string, string]>} name\n * @returns {Array<ProjectionDefinition|undefined>}\n */\n/**\n * @overload\n * @param {string} name\n * @returns {ProjectionDefinition}\n */\n\n/**\n * @param {string | Array<Array<string>> | Partial<Record<'EPSG'|'ESRI'|'IAU2000', ProjectionDefinition>>} name\n * @returns {ProjectionDefinition | Array<ProjectionDefinition|undefined> | void}\n */\nfunction defs(name) {\n  /* global console */\n  var that = this;\n  if (arguments.length === 2) {\n    var def = arguments[1];\n    if (typeof def === 'string') {\n      if (def.charAt(0) === '+') {\n        defs[/** @type {string} */ (name)] = parseProj(arguments[1]);\n      } else {\n        defs[/** @type {string} */ (name)] = wkt(arguments[1]);\n      }\n    } else if (def && typeof def === 'object' && !('projName' in def)) {\n      // PROJJSON\n      defs[/** @type {string} */ (name)] = wkt(arguments[1]);\n    } else {\n      defs[/** @type {string} */ (name)] = def;\n      if (!def) {\n        delete defs[/** @type {string} */ (name)];\n      }\n    }\n  } else if (arguments.length === 1) {\n    if (Array.isArray(name)) {\n      return name.map(function (v) {\n        if (Array.isArray(v)) {\n          return defs.apply(that, v);\n        } else {\n          return defs(v);\n        }\n      });\n    } else if (typeof name === 'string') {\n      if (name in defs) {\n        return defs[name];\n      }\n    } else if ('EPSG' in name) {\n      defs['EPSG:' + name.EPSG] = name;\n    } else if ('ESRI' in name) {\n      defs['ESRI:' + name.ESRI] = name;\n    } else if ('IAU2000' in name) {\n      defs['IAU2000:' + name.IAU2000] = name;\n    } else {\n      console.log(name);\n    }\n    return;\n  }\n}\nglobals(defs);\nexport default defs;\n","export default function (defs) {\n  defs('EPSG:4326', '+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees');\n  defs('EPSG:4269', '+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees');\n  defs('EPSG:3857', '+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs');\n  // UTM WGS84\n  for (var i = 1; i <= 60; ++i) {\n    defs('EPSG:' + (32600 + i), '+proj=utm +zone=' + i + ' +datum=WGS84 +units=m');\n    defs('EPSG:' + (32700 + i), '+proj=utm +zone=' + i + ' +south +datum=WGS84 +units=m');\n  }\n  defs('EPSG:5041', '+title=WGS 84 / UPS North (E,N) +proj=stere +lat_0=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m');\n  defs('EPSG:5042', '+title=WGS 84 / UPS South (E,N) +proj=stere +lat_0=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m');\n\n  defs.WGS84 = defs['EPSG:4326'];\n  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n  defs.GOOGLE = defs['EPSG:3857'];\n  defs['EPSG:900913'] = defs['EPSG:3857'];\n  defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code) {\n  return typeof code === 'string';\n}\nfunction testDef(code) {\n  return code in defs;\n}\nfunction testWKT(code) {\n  return (code.indexOf('+') !== 0 && code.indexOf('[') !== -1) || (typeof code === 'object' && !('srsCode' in code));\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n  if (item.title) {\n    return item.title.toLowerCase().indexOf('epsg:') === 0 && codes.indexOf(item.title.substr(5)) > -1;\n  }\n  var auth = match(item, 'authority');\n  if (!auth) {\n    return;\n  }\n  var code = match(auth, 'epsg');\n  return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n  var ext = match(item, 'extension');\n  if (!ext) {\n    return;\n  }\n  return match(ext, 'proj4');\n}\nfunction testProj(code) {\n  return code[0] === '+';\n}\n/**\n * @param {string | import('./core').PROJJSONDefinition | import('./defs').ProjectionDefinition} code\n * @returns {import('./defs').ProjectionDefinition}\n */\nfunction parse(code) {\n  let out;\n  if (testObj(code)) {\n    // check to see if this is a WKT string\n    if (testDef(code)) {\n      out = defs[code];\n    } else if (testWKT(code)) {\n      out = wkt(code);\n      var maybeProjStr = checkProjStr(out);\n      if (maybeProjStr) {\n        out = projStr(maybeProjStr);\n      }\n    } else if (testProj(code)) {\n      out = projStr(code);\n    }\n  } else if (!('projName' in code)) {\n    out = wkt(code);\n  } else {\n    out = code;\n  }\n  // test for special Web Mercator case, due to this being a very common and often malformed\n  return out && checkMercator(out) ? defs['EPSG:3857'] : out;\n}\n\nexport default parse;\n","export default function (destination, source) {\n  destination = destination || {};\n  var value, property;\n  if (!source) {\n    return destination;\n  }\n  for (property in source) {\n    value = source[property];\n    if (value !== undefined) {\n      destination[property] = value;\n    }\n  }\n  return destination;\n}\n","export default function (eccent, sinphi, cosphi) {\n  var con = eccent * sinphi;\n  return cosphi / (Math.sqrt(1 - con * con));\n}\n","export default function (x) {\n  return x < 0 ? -1 : 1;\n}\n","import { TWO_PI, SPI } from '../constants/values';\nimport sign from './sign';\n\nexport default function (x, skipAdjust) {\n  if (skipAdjust) {\n    return x;\n  }\n  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import { HALF_PI } from '../constants/values';\n\nexport default function (eccent, phi, sinphi) {\n  var con = eccent * sinphi;\n  var com = 0.5 * eccent;\n  con = Math.pow(((1 - con) / (1 + con)), com);\n  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import { HALF_PI } from '../constants/values';\n\nexport default function (eccent, ts) {\n  var eccnth = 0.5 * eccent;\n  var con, dphi;\n  var phi = HALF_PI - 2 * Math.atan(ts);\n  for (var i = 0; i <= 15; i++) {\n    con = eccent * Math.sin(phi);\n    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n  // console.log(\"phi2z has NoConvergence\");\n  return -9999;\n}\n","export function init() {\n  // no-op for longlat\n}\n\nfunction identity(pt) {\n  return pt;\n}\nexport { identity as forward };\nexport { identity as inverse };\nexport var names = ['longlat', 'identity'];\nexport default {\n  init: init,\n  forward: identity,\n  inverse: identity,\n  names: names\n};\n","import merc from './projections/merc';\nimport longlat from './projections/longlat';\n/** @type {Array<Partial<import('./Proj').default>>} */\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\n/**\n * @param {import('./Proj').default} proj\n * @param {number} i\n */\nexport function add(proj, i) {\n  var len = projStore.length;\n  if (!proj.names) {\n    console.log(i);\n    return true;\n  }\n  projStore[len] = proj;\n  proj.names.forEach(function (n) {\n    names[n.toLowerCase()] = len;\n  });\n  return this;\n}\n\nexport function getNormalizedProjName(n) {\n  return n.replace(/[-\\(\\)\\s]+/g, ' ').trim().replace(/ /g, '_');\n}\n\n/**\n * Get a projection by name.\n * @param {string} name\n * @returns {import('./Proj').default|false}\n */\nexport function get(name) {\n  if (!name) {\n    return false;\n  }\n  var n = name.toLowerCase();\n  if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n    return projStore[names[n]];\n  }\n  n = getNormalizedProjName(n);\n  if (n in names && projStore[names[n]]) {\n    return projStore[names[n]];\n  }\n}\n\nexport function start() {\n  projs.forEach(add);\n}\nexport default {\n  start: start,\n  add: add,\n  get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport { FORTPI, R2D, EPSLN, HALF_PI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} e\n * @property {number} k\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var con = this.b / this.a;\n  this.es = 1 - con * con;\n  if (!('x0' in this)) {\n    this.x0 = 0;\n  }\n  if (!('y0' in this)) {\n    this.y0 = 0;\n  }\n  this.e = Math.sqrt(this.es);\n  if (this.lat_ts) {\n    if (this.sphere) {\n      this.k0 = Math.cos(this.lat_ts);\n    } else {\n      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n    }\n  } else {\n    if (!this.k0) {\n      if (this.k) {\n        this.k0 = this.k;\n      } else {\n        this.k0 = 1;\n      }\n    }\n  }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n  -------------------------------------------------- */\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  // convert to radians\n  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n    return null;\n  }\n\n  var x, y;\n  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n    return null;\n  } else {\n    if (this.sphere) {\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0, this.over);\n      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n    } else {\n      var sinphi = Math.sin(lat);\n      var ts = tsfnz(this.e, lat, sinphi);\n      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0, this.over);\n      y = this.y0 - this.a * this.k0 * Math.log(ts);\n    }\n    p.x = x;\n    p.y = y;\n    return p;\n  }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n  -------------------------------------------------- */\nexport function inverse(p) {\n  var x = p.x - this.x0;\n  var y = p.y - this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n  } else {\n    var ts = Math.exp(-y / (this.a * this.k0));\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  }\n  lon = adjust_lon(this.long0 + x / (this.a * this.k0), this.over);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Mercator', 'Popular Visualisation Pseudo Mercator', 'Mercator_1SP', 'Mercator_Auxiliary_Sphere', 'Mercator_Variant_A', 'merc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","var ellipsoids = {\n  MERIT: {\n    a: 6378137,\n    rf: 298.257,\n    ellipseName: 'MERIT 1983'\n  },\n  SGS85: {\n    a: 6378136,\n    rf: 298.257,\n    ellipseName: 'Soviet Geodetic System 85'\n  },\n  GRS80: {\n    a: 6378137,\n    rf: 298.257222101,\n    ellipseName: 'GRS 1980(IUGG, 1980)'\n  },\n  IAU76: {\n    a: 6378140,\n    rf: 298.257,\n    ellipseName: 'IAU 1976'\n  },\n  airy: {\n    a: 6377563.396,\n    b: 6356256.91,\n    ellipseName: 'Airy 1830'\n  },\n  APL4: {\n    a: 6378137,\n    rf: 298.25,\n    ellipseName: 'Appl. Physics. 1965'\n  },\n  NWL9D: {\n    a: 6378145,\n    rf: 298.25,\n    ellipseName: 'Naval Weapons Lab., 1965'\n  },\n  mod_airy: {\n    a: 6377340.189,\n    b: 6356034.446,\n    ellipseName: 'Modified Airy'\n  },\n  andrae: {\n    a: 6377104.43,\n    rf: 300,\n    ellipseName: 'Andrae 1876 (Den., Iclnd.)'\n  },\n  aust_SA: {\n    a: 6378160,\n    rf: 298.25,\n    ellipseName: 'Australian Natl & S. Amer. 1969'\n  },\n  GRS67: {\n    a: 6378160,\n    rf: 298.247167427,\n    ellipseName: 'GRS 67(IUGG 1967)'\n  },\n  bessel: {\n    a: 6377397.155,\n    rf: 299.1528128,\n    ellipseName: 'Bessel 1841'\n  },\n  bess_nam: {\n    a: 6377483.865,\n    rf: 299.1528128,\n    ellipseName: 'Bessel 1841 (Namibia)'\n  },\n  clrk66: {\n    a: 6378206.4,\n    b: 6356583.8,\n    ellipseName: 'Clarke 1866'\n  },\n  clrk80: {\n    a: 6378249.145,\n    rf: 293.4663,\n    ellipseName: 'Clarke 1880 mod.'\n  },\n  clrk80ign: {\n    a: 6378249.2,\n    b: 6356515,\n    rf: 293.4660213,\n    ellipseName: 'Clarke 1880 (IGN)'\n  },\n  clrk58: {\n    a: 6378293.645208759,\n    rf: 294.2606763692654,\n    ellipseName: 'Clarke 1858'\n  },\n  CPM: {\n    a: 6375738.7,\n    rf: 334.29,\n    ellipseName: 'Comm. des Poids et Mesures 1799'\n  },\n  delmbr: {\n    a: 6376428,\n    rf: 311.5,\n    ellipseName: 'Delambre 1810 (Belgium)'\n  },\n  engelis: {\n    a: 6378136.05,\n    rf: 298.2566,\n    ellipseName: 'Engelis 1985'\n  },\n  evrst30: {\n    a: 6377276.345,\n    rf: 300.8017,\n    ellipseName: 'Everest 1830'\n  },\n  evrst48: {\n    a: 6377304.063,\n    rf: 300.8017,\n    ellipseName: 'Everest 1948'\n  },\n  evrst56: {\n    a: 6377301.243,\n    rf: 300.8017,\n    ellipseName: 'Everest 1956'\n  },\n  evrst69: {\n    a: 6377295.664,\n    rf: 300.8017,\n    ellipseName: 'Everest 1969'\n  },\n  evrstSS: {\n    a: 6377298.556,\n    rf: 300.8017,\n    ellipseName: 'Everest (Sabah & Sarawak)'\n  },\n  fschr60: {\n    a: 6378166,\n    rf: 298.3,\n    ellipseName: 'Fischer (Mercury Datum) 1960'\n  },\n  fschr60m: {\n    a: 6378155,\n    rf: 298.3,\n    ellipseName: 'Fischer 1960'\n  },\n  fschr68: {\n    a: 6378150,\n    rf: 298.3,\n    ellipseName: 'Fischer 1968'\n  },\n  helmert: {\n    a: 6378200,\n    rf: 298.3,\n    ellipseName: 'Helmert 1906'\n  },\n  hough: {\n    a: 6378270,\n    rf: 297,\n    ellipseName: 'Hough'\n  },\n  intl: {\n    a: 6378388,\n    rf: 297,\n    ellipseName: 'International 1909 (Hayford)'\n  },\n  kaula: {\n    a: 6378163,\n    rf: 298.24,\n    ellipseName: 'Kaula 1961'\n  },\n  lerch: {\n    a: 6378139,\n    rf: 298.257,\n    ellipseName: 'Lerch 1979'\n  },\n  mprts: {\n    a: 6397300,\n    rf: 191,\n    ellipseName: 'Maupertius 1738'\n  },\n  new_intl: {\n    a: 6378157.5,\n    b: 6356772.2,\n    ellipseName: 'New International 1967'\n  },\n  plessis: {\n    a: 6376523,\n    rf: 6355863,\n    ellipseName: 'Plessis 1817 (France)'\n  },\n  krass: {\n    a: 6378245,\n    rf: 298.3,\n    ellipseName: 'Krassovsky, 1942'\n  },\n  SEasia: {\n    a: 6378155,\n    b: 6356773.3205,\n    ellipseName: 'Southeast Asia'\n  },\n  walbeck: {\n    a: 6376896,\n    b: 6355834.8467,\n    ellipseName: 'Walbeck'\n  },\n  WGS60: {\n    a: 6378165,\n    rf: 298.3,\n    ellipseName: 'WGS 60'\n  },\n  WGS66: {\n    a: 6378145,\n    rf: 298.25,\n    ellipseName: 'WGS 66'\n  },\n  WGS7: {\n    a: 6378135,\n    rf: 298.26,\n    ellipseName: 'WGS 72'\n  },\n  WGS84: {\n    a: 6378137,\n    rf: 298.257223563,\n    ellipseName: 'WGS 84'\n  },\n  sphere: {\n    a: 6370997,\n    b: 6370997,\n    ellipseName: 'Normal Sphere (r=6370997)'\n  }\n};\n\nexport default ellipsoids;\n","import { SIXTH, RA4, RA6, EPSLN } from './constants/values';\nimport { default as Ellipsoid } from './constants/Ellipsoid';\nimport match from './match';\n\nconst WGS84 = Ellipsoid.WGS84; // default ellipsoid\n\nexport function eccentricity(a, b, rf, R_A) {\n  var a2 = a * a; // used in geocentric\n  var b2 = b * b; // used in geocentric\n  var es = (a2 - b2) / a2; // e ^ 2\n  var e = 0;\n  if (R_A) {\n    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n    a2 = a * a;\n    es = 0;\n  } else {\n    e = Math.sqrt(es); // eccentricity\n  }\n  var ep2 = (a2 - b2) / b2; // used in geocentric\n  return {\n    es: es,\n    e: e,\n    ep2: ep2\n  };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n  if (!a) { // do we have an ellipsoid?\n    var ellipse = match(Ellipsoid, ellps);\n    if (!ellipse) {\n      ellipse = WGS84;\n    }\n    a = ellipse.a;\n    b = ellipse.b;\n    rf = ellipse.rf;\n  }\n\n  if (rf && !b) {\n    b = (1.0 - 1.0 / rf) * a;\n  }\n  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n    sphere = true;\n    b = a;\n  }\n  return {\n    a: a,\n    b: b,\n    rf: rf,\n    sphere: sphere\n  };\n}\n","var datums = {\n  wgs84: {\n    towgs84: '0,0,0',\n    ellipse: 'WGS84',\n    datumName: 'WGS84'\n  },\n  ch1903: {\n    towgs84: '674.374,15.056,405.346',\n    ellipse: 'bessel',\n    datumName: 'swiss'\n  },\n  ggrs87: {\n    towgs84: '-199.87,74.79,246.62',\n    ellipse: 'GRS80',\n    datumName: 'Greek_Geodetic_Reference_System_1987'\n  },\n  nad83: {\n    towgs84: '0,0,0',\n    ellipse: 'GRS80',\n    datumName: 'North_American_Datum_1983'\n  },\n  nad27: {\n    nadgrids: '@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat',\n    ellipse: 'clrk66',\n    datumName: 'North_American_Datum_1927'\n  },\n  potsdam: {\n    towgs84: '598.1,73.7,418.2,0.202,0.045,-2.455,6.7',\n    ellipse: 'bessel',\n    datumName: 'Potsdam Rauenberg 1950 DHDN'\n  },\n  carthage: {\n    towgs84: '-263.0,6.0,431.0',\n    ellipse: 'clark80',\n    datumName: 'Carthage 1934 Tunisia'\n  },\n  hermannskogel: {\n    towgs84: '577.326,90.129,463.919,5.137,1.474,5.297,2.4232',\n    ellipse: 'bessel',\n    datumName: 'Hermannskogel'\n  },\n  mgi: {\n    towgs84: '577.326,90.129,463.919,5.137,1.474,5.297,2.4232',\n    ellipse: 'bessel',\n    datumName: 'Militar-Geographische Institut'\n  },\n  osni52: {\n    towgs84: '482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15',\n    ellipse: 'airy',\n    datumName: 'Irish National'\n  },\n  ire65: {\n    towgs84: '482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15',\n    ellipse: 'mod_airy',\n    datumName: 'Ireland 1965'\n  },\n  rassadiran: {\n    towgs84: '-133.63,-157.5,-158.62',\n    ellipse: 'intl',\n    datumName: 'Rassadiran'\n  },\n  nzgd49: {\n    towgs84: '59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993',\n    ellipse: 'intl',\n    datumName: 'New Zealand Geodetic Datum 1949'\n  },\n  osgb36: {\n    towgs84: '446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894',\n    ellipse: 'airy',\n    datumName: 'Ordnance Survey of Great Britain 1936'\n  },\n  s_jtsk: {\n    towgs84: '589,76,480',\n    ellipse: 'bessel',\n    datumName: 'S-JTSK (Ferro)'\n  },\n  beduaram: {\n    towgs84: '-106,-87,188',\n    ellipse: 'clrk80',\n    datumName: 'Beduaram'\n  },\n  gunung_segara: {\n    towgs84: '-403,684,41',\n    ellipse: 'bessel',\n    datumName: 'Gunung Segara Jakarta'\n  },\n  rnb72: {\n    towgs84: '106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1',\n    ellipse: 'intl',\n    datumName: 'Reseau National Belge 1972'\n  },\n  EPSG_5451: {\n    towgs84: '6.41,-49.05,-11.28,1.5657,0.5242,6.9718,-5.7649'\n  },\n  IGNF_LURESG: {\n    towgs84: '-192.986,13.673,-39.309,-0.4099,-2.9332,2.6881,0.43'\n  },\n  EPSG_4614: {\n    towgs84: '-119.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,3.657065'\n  },\n  EPSG_4615: {\n    towgs84: '-494.088,-312.129,279.877,-1.423,-1.013,1.59,-0.748'\n  },\n  ESRI_37241: {\n    towgs84: '-76.822,257.457,-12.817,2.136,-0.033,-2.392,-0.031'\n  },\n  ESRI_37249: {\n    towgs84: '-440.296,58.548,296.265,1.128,10.202,4.559,-0.438'\n  },\n  ESRI_37245: {\n    towgs84: '-511.151,-181.269,139.609,1.05,2.703,1.798,3.071'\n  },\n  EPSG_4178: {\n    towgs84: '24.9,-126.4,-93.2,-0.063,-0.247,-0.041,1.01'\n  },\n  EPSG_4622: {\n    towgs84: '-472.29,-5.63,-304.12,0.4362,-0.8374,0.2563,1.8984'\n  },\n  EPSG_4625: {\n    towgs84: '126.93,547.94,130.41,-2.7867,5.1612,-0.8584,13.8227'\n  },\n  EPSG_5252: {\n    towgs84: '0.023,0.036,-0.068,0.00176,0.00912,-0.01136,0.00439'\n  },\n  EPSG_4314: {\n    towgs84: '597.1,71.4,412.1,0.894,0.068,-1.563,7.58'\n  },\n  EPSG_4282: {\n    towgs84: '-178.3,-316.7,-131.5,5.278,6.077,10.979,19.166'\n  },\n  EPSG_4231: {\n    towgs84: '-83.11,-97.38,-117.22,0.005693,-0.044698,0.044285,0.1218'\n  },\n  EPSG_4274: {\n    towgs84: '-230.994,102.591,25.199,0.633,-0.239,0.9,1.95'\n  },\n  EPSG_4134: {\n    towgs84: '-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.71006'\n  },\n  EPSG_4254: {\n    towgs84: '18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013'\n  },\n  EPSG_4159: {\n    towgs84: '-194.513,-63.978,-25.759,-3.4027,3.756,-3.352,-0.9175'\n  },\n  EPSG_4687: {\n    towgs84: '0.072,-0.507,-0.245,0.0183,-0.0003,0.007,-0.0093'\n  },\n  EPSG_4227: {\n    towgs84: '-83.58,-397.54,458.78,-17.595,-2.847,4.256,3.225'\n  },\n  EPSG_4746: {\n    towgs84: '599.4,72.4,419.2,-0.062,-0.022,-2.723,6.46'\n  },\n  EPSG_4745: {\n    towgs84: '612.4,77,440.2,-0.054,0.057,-2.797,2.55'\n  },\n  EPSG_6311: {\n    towgs84: '8.846,-4.394,-1.122,-0.00237,-0.146528,0.130428,0.783926'\n  },\n  EPSG_4289: {\n    towgs84: '565.7381,50.4018,465.2904,-0.395026,0.330772,-1.876073,4.07244'\n  },\n  EPSG_4230: {\n    towgs84: '-68.863,-134.888,-111.49,-0.53,-0.14,0.57,-3.4'\n  },\n  EPSG_4154: {\n    towgs84: '-123.02,-158.95,-168.47'\n  },\n  EPSG_4156: {\n    towgs84: '570.8,85.7,462.8,4.998,1.587,5.261,3.56'\n  },\n  EPSG_4299: {\n    towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n  },\n  EPSG_4179: {\n    towgs84: '33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84'\n  },\n  EPSG_4313: {\n    towgs84: '-106.8686,52.2978,-103.7239,0.3366,-0.457,1.8422,-1.2747'\n  },\n  EPSG_4194: {\n    towgs84: '163.511,127.533,-159.789'\n  },\n  EPSG_4195: {\n    towgs84: '105,326,-102.5'\n  },\n  EPSG_4196: {\n    towgs84: '-45,417,-3.5'\n  },\n  EPSG_4611: {\n    towgs84: '-162.619,-276.959,-161.764,0.067753,-2.243648,-1.158828,-1.094246'\n  },\n  EPSG_4633: {\n    towgs84: '137.092,131.66,91.475,-1.9436,-11.5993,-4.3321,-7.4824'\n  },\n  EPSG_4641: {\n    towgs84: '-408.809,366.856,-412.987,1.8842,-0.5308,2.1655,-121.0993'\n  },\n  EPSG_4643: {\n    towgs84: '-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7002'\n  },\n  EPSG_4300: {\n    towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n  },\n  EPSG_4188: {\n    towgs84: '482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15'\n  },\n  EPSG_4660: {\n    towgs84: '982.6087,552.753,-540.873,6.681627,-31.611492,-19.848161,16.805'\n  },\n  EPSG_4662: {\n    towgs84: '97.295,-263.247,310.882,-1.5999,0.8386,3.1409,13.3259'\n  },\n  EPSG_3906: {\n    towgs84: '577.88891,165.22205,391.18289,4.9145,-0.94729,-13.05098,7.78664'\n  },\n  EPSG_4307: {\n    towgs84: '-209.3622,-87.8162,404.6198,0.0046,3.4784,0.5805,-1.4547'\n  },\n  EPSG_6892: {\n    towgs84: '-76.269,-16.683,68.562,-6.275,10.536,-4.286,-13.686'\n  },\n  EPSG_4690: {\n    towgs84: '221.597,152.441,176.523,2.403,1.3893,0.884,11.4648'\n  },\n  EPSG_4691: {\n    towgs84: '218.769,150.75,176.75,3.5231,2.0037,1.288,10.9817'\n  },\n  EPSG_4629: {\n    towgs84: '72.51,345.411,79.241,-1.5862,-0.8826,-0.5495,1.3653'\n  },\n  EPSG_4630: {\n    towgs84: '165.804,216.213,180.26,-0.6251,-0.4515,-0.0721,7.4111'\n  },\n  EPSG_4692: {\n    towgs84: '217.109,86.452,23.711,0.0183,-0.0003,0.007,-0.0093'\n  },\n  EPSG_9333: {\n    towgs84: '0,0,0,-0.008393,0.000749,-0.010276,0'\n  },\n  EPSG_9059: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4312: {\n    towgs84: '601.705,84.263,485.227,4.7354,1.3145,5.393,-2.3887'\n  },\n  EPSG_4123: {\n    towgs84: '-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496'\n  },\n  EPSG_4309: {\n    towgs84: '-124.45,183.74,44.64,-0.4384,0.5446,-0.9706,-2.1365'\n  },\n  ESRI_104106: {\n    towgs84: '-283.088,-70.693,117.445,-1.157,0.059,-0.652,-4.058'\n  },\n  EPSG_4281: {\n    towgs84: '-219.247,-73.802,269.529'\n  },\n  EPSG_4322: {\n    towgs84: '0,0,4.5'\n  },\n  EPSG_4324: {\n    towgs84: '0,0,1.9'\n  },\n  EPSG_4284: {\n    towgs84: '43.822,-108.842,-119.585,1.455,-0.761,0.737,0.549'\n  },\n  EPSG_4277: {\n    towgs84: '446.448,-125.157,542.06,0.15,0.247,0.842,-20.489'\n  },\n  EPSG_4207: {\n    towgs84: '-282.1,-72.2,120,-1.529,0.145,-0.89,-4.46'\n  },\n  EPSG_4688: {\n    towgs84: '347.175,1077.618,2623.677,33.9058,-70.6776,9.4013,186.0647'\n  },\n  EPSG_4689: {\n    towgs84: '410.793,54.542,80.501,-2.5596,-2.3517,-0.6594,17.3218'\n  },\n  EPSG_4720: {\n    towgs84: '0,0,4.5'\n  },\n  EPSG_4273: {\n    towgs84: '278.3,93,474.5,7.889,0.05,-6.61,6.21'\n  },\n  EPSG_4240: {\n    towgs84: '204.64,834.74,293.8'\n  },\n  EPSG_4817: {\n    towgs84: '278.3,93,474.5,7.889,0.05,-6.61,6.21'\n  },\n  ESRI_104131: {\n    towgs84: '426.62,142.62,460.09,4.98,4.49,-12.42,-17.1'\n  },\n  EPSG_4265: {\n    towgs84: '-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68'\n  },\n  EPSG_4263: {\n    towgs84: '-111.92,-87.85,114.5,1.875,0.202,0.219,0.032'\n  },\n  EPSG_4298: {\n    towgs84: '-689.5937,623.84046,-65.93566,-0.02331,1.17094,-0.80054,5.88536'\n  },\n  EPSG_4270: {\n    towgs84: '-253.4392,-148.452,386.5267,0.15605,0.43,-0.1013,-0.0424'\n  },\n  EPSG_4229: {\n    towgs84: '-121.8,98.1,-10.7'\n  },\n  EPSG_4220: {\n    towgs84: '-55.5,-348,-229.2'\n  },\n  EPSG_4214: {\n    towgs84: '12.646,-155.176,-80.863'\n  },\n  EPSG_4232: {\n    towgs84: '-345,3,223'\n  },\n  EPSG_4238: {\n    towgs84: '-1.977,-13.06,-9.993,0.364,0.254,0.689,-1.037'\n  },\n  EPSG_4168: {\n    towgs84: '-170,33,326'\n  },\n  EPSG_4131: {\n    towgs84: '199,931,318.9'\n  },\n  EPSG_4152: {\n    towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n  },\n  EPSG_5228: {\n    towgs84: '572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378'\n  },\n  EPSG_8351: {\n    towgs84: '485.021,169.465,483.839,7.786342,4.397554,4.102655,0'\n  },\n  EPSG_4683: {\n    towgs84: '-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06'\n  },\n  EPSG_4133: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7373: {\n    towgs84: '0.819,-0.5762,-1.6446,-0.00378,-0.03317,0.00318,0.0693'\n  },\n  EPSG_9075: {\n    towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n  },\n  EPSG_9072: {\n    towgs84: '-0.9102,2.0141,0.5602,0.029039,0.010065,0.010101,0'\n  },\n  EPSG_9294: {\n    towgs84: '1.16835,-1.42001,-2.24431,-0.00822,-0.05508,0.01818,0.23388'\n  },\n  EPSG_4212: {\n    towgs84: '-267.434,173.496,181.814,-13.4704,8.7154,7.3926,14.7492'\n  },\n  EPSG_4191: {\n    towgs84: '-44.183,-0.58,-38.489,2.3867,2.7072,-3.5196,-8.2703'\n  },\n  EPSG_4237: {\n    towgs84: '52.684,-71.194,-13.975,-0.312,-0.1063,-0.3729,1.0191'\n  },\n  EPSG_4740: {\n    towgs84: '-1.08,-0.27,-0.9'\n  },\n  EPSG_4124: {\n    towgs84: '419.3836,99.3335,591.3451,0.850389,1.817277,-7.862238,-0.99496'\n  },\n  EPSG_5681: {\n    towgs84: '584.9636,107.7175,413.8067,1.1155,0.2824,-3.1384,7.9922'\n  },\n  EPSG_4141: {\n    towgs84: '23.772,17.49,17.859,-0.3132,-1.85274,1.67299,-5.4262'\n  },\n  EPSG_4204: {\n    towgs84: '-85.645,-273.077,-79.708,2.289,-1.421,2.532,3.194'\n  },\n  EPSG_4319: {\n    towgs84: '226.702,-193.337,-35.371,-2.229,-4.391,9.238,0.9798'\n  },\n  EPSG_4200: {\n    towgs84: '24.82,-131.21,-82.66'\n  },\n  EPSG_4130: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4127: {\n    towgs84: '-82.875,-57.097,-156.768,-2.158,1.524,-0.982,-0.359'\n  },\n  EPSG_4149: {\n    towgs84: '674.374,15.056,405.346'\n  },\n  EPSG_4617: {\n    towgs84: '-0.991,1.9072,0.5129,0.02579,0.00965,0.01166,0'\n  },\n  EPSG_4663: {\n    towgs84: '-210.502,-66.902,-48.476,2.094,-15.067,-5.817,0.485'\n  },\n  EPSG_4664: {\n    towgs84: '-211.939,137.626,58.3,-0.089,0.251,0.079,0.384'\n  },\n  EPSG_4665: {\n    towgs84: '-105.854,165.589,-38.312,-0.003,-0.026,0.024,-0.048'\n  },\n  EPSG_4666: {\n    towgs84: '631.392,-66.551,481.442,1.09,-4.445,-4.487,-4.43'\n  },\n  EPSG_4756: {\n    towgs84: '-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188'\n  },\n  EPSG_4723: {\n    towgs84: '-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925'\n  },\n  EPSG_4726: {\n    towgs84: '8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081'\n  },\n  EPSG_4267: {\n    towgs84: '-8.0,160.0,176.0'\n  },\n  EPSG_5365: {\n    towgs84: '-0.16959,0.35312,0.51846,0.03385,-0.16325,0.03446,0.03693'\n  },\n  EPSG_4218: {\n    towgs84: '304.5,306.5,-318.1'\n  },\n  EPSG_4242: {\n    towgs84: '-33.722,153.789,94.959,-8.581,-4.478,4.54,8.95'\n  },\n  EPSG_4216: {\n    towgs84: '-292.295,248.758,429.447,4.9971,2.99,6.6906,1.0289'\n  },\n  ESRI_104105: {\n    towgs84: '631.392,-66.551,481.442,1.09,-4.445,-4.487,-4.43'\n  },\n  ESRI_104129: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4673: {\n    towgs84: '174.05,-25.49,112.57'\n  },\n  EPSG_4202: {\n    towgs84: '-124,-60,154'\n  },\n  EPSG_4203: {\n    towgs84: '-117.763,-51.51,139.061,0.292,0.443,0.277,-0.191'\n  },\n  EPSG_3819: {\n    towgs84: '595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408'\n  },\n  EPSG_8694: {\n    towgs84: '-93.799,-132.737,-219.073,-1.844,0.648,-6.37,-0.169'\n  },\n  EPSG_4145: {\n    towgs84: '275.57,676.78,229.6'\n  },\n  EPSG_4283: {\n    towgs84: '0.06155,-0.01087,-0.04019,0.039492,0.032722,0.032898,-0.009994'\n  },\n  EPSG_4317: {\n    towgs84: '2.3287,-147.0425,-92.0802,-0.309248,0.324822,0.497299,5.689063'\n  },\n  EPSG_4272: {\n    towgs84: '59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993'\n  },\n  EPSG_4248: {\n    towgs84: '-307.7,265.3,-363.5'\n  },\n  EPSG_5561: {\n    towgs84: '24,-121,-76'\n  },\n  EPSG_5233: {\n    towgs84: '-0.293,766.95,87.713,0.195704,1.695068,3.473016,-0.039338'\n  },\n  ESRI_104130: {\n    towgs84: '-86,-98,-119'\n  },\n  ESRI_104102: {\n    towgs84: '682,-203,480'\n  },\n  ESRI_37207: {\n    towgs84: '7,-10,-26'\n  },\n  EPSG_4675: {\n    towgs84: '59.935,118.4,-10.871'\n  },\n  ESRI_104109: {\n    towgs84: '-89.121,-348.182,260.871'\n  },\n  ESRI_104112: {\n    towgs84: '-185.583,-230.096,281.361'\n  },\n  ESRI_104113: {\n    towgs84: '25.1,-275.6,222.6'\n  },\n  IGNF_WGS72G: {\n    towgs84: '0,12,6'\n  },\n  IGNF_NTFG: {\n    towgs84: '-168,-60,320'\n  },\n  IGNF_EFATE57G: {\n    towgs84: '-127,-769,472'\n  },\n  IGNF_PGP50G: {\n    towgs84: '324.8,153.6,172.1'\n  },\n  IGNF_REUN47G: {\n    towgs84: '94,-948,-1262'\n  },\n  IGNF_CSG67G: {\n    towgs84: '-186,230,110'\n  },\n  IGNF_GUAD48G: {\n    towgs84: '-467,-16,-300'\n  },\n  IGNF_TAHI51G: {\n    towgs84: '162,117,154'\n  },\n  IGNF_TAHAAG: {\n    towgs84: '65,342,77'\n  },\n  IGNF_NUKU72G: {\n    towgs84: '84,274,65'\n  },\n  IGNF_PETRELS72G: {\n    towgs84: '365,194,166'\n  },\n  IGNF_WALL78G: {\n    towgs84: '253,-133,-127'\n  },\n  IGNF_MAYO50G: {\n    towgs84: '-382,-59,-262'\n  },\n  IGNF_TANNAG: {\n    towgs84: '-139,-967,436'\n  },\n  IGNF_IGN72G: {\n    towgs84: '-13,-348,292'\n  },\n  IGNF_ATIGG: {\n    towgs84: '1118,23,66'\n  },\n  IGNF_FANGA84G: {\n    towgs84: '150.57,158.33,118.32'\n  },\n  IGNF_RUSAT84G: {\n    towgs84: '202.13,174.6,-15.74'\n  },\n  IGNF_KAUE70G: {\n    towgs84: '126.74,300.1,-75.49'\n  },\n  IGNF_MOP90G: {\n    towgs84: '-10.8,-1.8,12.77'\n  },\n  IGNF_MHPF67G: {\n    towgs84: '338.08,212.58,-296.17'\n  },\n  IGNF_TAHI79G: {\n    towgs84: '160.61,116.05,153.69'\n  },\n  IGNF_ANAA92G: {\n    towgs84: '1.5,3.84,4.81'\n  },\n  IGNF_MARQUI72G: {\n    towgs84: '330.91,-13.92,58.56'\n  },\n  IGNF_APAT86G: {\n    towgs84: '143.6,197.82,74.05'\n  },\n  IGNF_TUBU69G: {\n    towgs84: '237.17,171.61,-77.84'\n  },\n  IGNF_STPM50G: {\n    towgs84: '11.363,424.148,373.13'\n  },\n  EPSG_4150: {\n    towgs84: '674.374,15.056,405.346'\n  },\n  EPSG_4754: {\n    towgs84: '-208.4058,-109.8777,-2.5764'\n  },\n  ESRI_104101: {\n    towgs84: '372.87,149.23,585.29'\n  },\n  EPSG_4693: {\n    towgs84: '0,-0.15,0.68'\n  },\n  EPSG_6207: {\n    towgs84: '293.17,726.18,245.36'\n  },\n  EPSG_4153: {\n    towgs84: '-133.63,-157.5,-158.62'\n  },\n  EPSG_4132: {\n    towgs84: '-241.54,-163.64,396.06'\n  },\n  EPSG_4221: {\n    towgs84: '-154.5,150.7,100.4'\n  },\n  EPSG_4266: {\n    towgs84: '-80.7,-132.5,41.1'\n  },\n  EPSG_4193: {\n    towgs84: '-70.9,-151.8,-41.4'\n  },\n  EPSG_5340: {\n    towgs84: '-0.41,0.46,-0.35'\n  },\n  EPSG_4246: {\n    towgs84: '-294.7,-200.1,525.5'\n  },\n  EPSG_4318: {\n    towgs84: '-3.2,-5.7,2.8'\n  },\n  EPSG_4121: {\n    towgs84: '-199.87,74.79,246.62'\n  },\n  EPSG_4223: {\n    towgs84: '-260.1,5.5,432.2'\n  },\n  EPSG_4158: {\n    towgs84: '-0.465,372.095,171.736'\n  },\n  EPSG_4285: {\n    towgs84: '-128.16,-282.42,21.93'\n  },\n  EPSG_4613: {\n    towgs84: '-404.78,685.68,45.47'\n  },\n  EPSG_4607: {\n    towgs84: '195.671,332.517,274.607'\n  },\n  EPSG_4475: {\n    towgs84: '-381.788,-57.501,-256.673'\n  },\n  EPSG_4208: {\n    towgs84: '-157.84,308.54,-146.6'\n  },\n  EPSG_4743: {\n    towgs84: '70.995,-335.916,262.898'\n  },\n  EPSG_4710: {\n    towgs84: '-323.65,551.39,-491.22'\n  },\n  EPSG_7881: {\n    towgs84: '-0.077,0.079,0.086'\n  },\n  EPSG_4682: {\n    towgs84: '283.729,735.942,261.143'\n  },\n  EPSG_4739: {\n    towgs84: '-156,-271,-189'\n  },\n  EPSG_4679: {\n    towgs84: '-80.01,253.26,291.19'\n  },\n  EPSG_4750: {\n    towgs84: '-56.263,16.136,-22.856'\n  },\n  EPSG_4644: {\n    towgs84: '-10.18,-350.43,291.37'\n  },\n  EPSG_4695: {\n    towgs84: '-103.746,-9.614,-255.95'\n  },\n  EPSG_4292: {\n    towgs84: '-355,21,72'\n  },\n  EPSG_4302: {\n    towgs84: '-61.702,284.488,472.052'\n  },\n  EPSG_4143: {\n    towgs84: '-124.76,53,466.79'\n  },\n  EPSG_4606: {\n    towgs84: '-153,153,307'\n  },\n  EPSG_4699: {\n    towgs84: '-770.1,158.4,-498.2'\n  },\n  EPSG_4247: {\n    towgs84: '-273.5,110.6,-357.9'\n  },\n  EPSG_4160: {\n    towgs84: '8.88,184.86,106.69'\n  },\n  EPSG_4161: {\n    towgs84: '-233.43,6.65,173.64'\n  },\n  EPSG_9251: {\n    towgs84: '-9.5,122.9,138.2'\n  },\n  EPSG_9253: {\n    towgs84: '-78.1,101.6,133.3'\n  },\n  EPSG_4297: {\n    towgs84: '-198.383,-240.517,-107.909'\n  },\n  EPSG_4269: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4301: {\n    towgs84: '-147,506,687'\n  },\n  EPSG_4618: {\n    towgs84: '-59,-11,-52'\n  },\n  EPSG_4612: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4678: {\n    towgs84: '44.585,-131.212,-39.544'\n  },\n  EPSG_4250: {\n    towgs84: '-130,29,364'\n  },\n  EPSG_4144: {\n    towgs84: '214,804,268'\n  },\n  EPSG_4147: {\n    towgs84: '-17.51,-108.32,-62.39'\n  },\n  EPSG_4259: {\n    towgs84: '-254.1,-5.36,-100.29'\n  },\n  EPSG_4164: {\n    towgs84: '-76,-138,67'\n  },\n  EPSG_4211: {\n    towgs84: '-378.873,676.002,-46.255'\n  },\n  EPSG_4182: {\n    towgs84: '-422.651,-172.995,84.02'\n  },\n  EPSG_4224: {\n    towgs84: '-143.87,243.37,-33.52'\n  },\n  EPSG_4225: {\n    towgs84: '-205.57,168.77,-4.12'\n  },\n  EPSG_5527: {\n    towgs84: '-67.35,3.88,-38.22'\n  },\n  EPSG_4752: {\n    towgs84: '98,390,-22'\n  },\n  EPSG_4310: {\n    towgs84: '-30,190,89'\n  },\n  EPSG_9248: {\n    towgs84: '-192.26,65.72,132.08'\n  },\n  EPSG_4680: {\n    towgs84: '124.5,-63.5,-281'\n  },\n  EPSG_4701: {\n    towgs84: '-79.9,-158,-168.9'\n  },\n  EPSG_4706: {\n    towgs84: '-146.21,112.63,4.05'\n  },\n  EPSG_4805: {\n    towgs84: '682,-203,480'\n  },\n  EPSG_4201: {\n    towgs84: '-165,-11,206'\n  },\n  EPSG_4210: {\n    towgs84: '-157,-2,-299'\n  },\n  EPSG_4183: {\n    towgs84: '-104,167,-38'\n  },\n  EPSG_4139: {\n    towgs84: '11,72,-101'\n  },\n  EPSG_4668: {\n    towgs84: '-86,-98,-119'\n  },\n  EPSG_4717: {\n    towgs84: '-2,151,181'\n  },\n  EPSG_4732: {\n    towgs84: '102,52,-38'\n  },\n  EPSG_4280: {\n    towgs84: '-377,681,-50'\n  },\n  EPSG_4209: {\n    towgs84: '-138,-105,-289'\n  },\n  EPSG_4261: {\n    towgs84: '31,146,47'\n  },\n  EPSG_4658: {\n    towgs84: '-73,46,-86'\n  },\n  EPSG_4721: {\n    towgs84: '265.025,384.929,-194.046'\n  },\n  EPSG_4222: {\n    towgs84: '-136,-108,-292'\n  },\n  EPSG_4601: {\n    towgs84: '-255,-15,71'\n  },\n  EPSG_4602: {\n    towgs84: '725,685,536'\n  },\n  EPSG_4603: {\n    towgs84: '72,213.7,93'\n  },\n  EPSG_4605: {\n    towgs84: '9,183,236'\n  },\n  EPSG_4621: {\n    towgs84: '137,248,-430'\n  },\n  EPSG_4657: {\n    towgs84: '-28,199,5'\n  },\n  EPSG_4316: {\n    towgs84: '103.25,-100.4,-307.19'\n  },\n  EPSG_4642: {\n    towgs84: '-13,-348,292'\n  },\n  EPSG_4698: {\n    towgs84: '145,-187,103'\n  },\n  EPSG_4192: {\n    towgs84: '-206.1,-174.7,-87.7'\n  },\n  EPSG_4311: {\n    towgs84: '-265,120,-358'\n  },\n  EPSG_4135: {\n    towgs84: '58,-283,-182'\n  },\n  ESRI_104138: {\n    towgs84: '198,-226,-347'\n  },\n  EPSG_4245: {\n    towgs84: '-11,851,5'\n  },\n  EPSG_4142: {\n    towgs84: '-125,53,467'\n  },\n  EPSG_4213: {\n    towgs84: '-106,-87,188'\n  },\n  EPSG_4253: {\n    towgs84: '-133,-77,-51'\n  },\n  EPSG_4129: {\n    towgs84: '-132,-110,-335'\n  },\n  EPSG_4713: {\n    towgs84: '-77,-128,142'\n  },\n  EPSG_4239: {\n    towgs84: '217,823,299'\n  },\n  EPSG_4146: {\n    towgs84: '295,736,257'\n  },\n  EPSG_4155: {\n    towgs84: '-83,37,124'\n  },\n  EPSG_4165: {\n    towgs84: '-173,253,27'\n  },\n  EPSG_4672: {\n    towgs84: '175,-38,113'\n  },\n  EPSG_4236: {\n    towgs84: '-637,-549,-203'\n  },\n  EPSG_4251: {\n    towgs84: '-90,40,88'\n  },\n  EPSG_4271: {\n    towgs84: '-2,374,172'\n  },\n  EPSG_4175: {\n    towgs84: '-88,4,101'\n  },\n  EPSG_4716: {\n    towgs84: '298,-304,-375'\n  },\n  EPSG_4315: {\n    towgs84: '-23,259,-9'\n  },\n  EPSG_4744: {\n    towgs84: '-242.2,-144.9,370.3'\n  },\n  EPSG_4244: {\n    towgs84: '-97,787,86'\n  },\n  EPSG_4293: {\n    towgs84: '616,97,-251'\n  },\n  EPSG_4714: {\n    towgs84: '-127,-769,472'\n  },\n  EPSG_4736: {\n    towgs84: '260,12,-147'\n  },\n  EPSG_6883: {\n    towgs84: '-235,-110,393'\n  },\n  EPSG_6894: {\n    towgs84: '-63,176,185'\n  },\n  EPSG_4205: {\n    towgs84: '-43,-163,45'\n  },\n  EPSG_4256: {\n    towgs84: '41,-220,-134'\n  },\n  EPSG_4262: {\n    towgs84: '639,405,60'\n  },\n  EPSG_4604: {\n    towgs84: '174,359,365'\n  },\n  EPSG_4169: {\n    towgs84: '-115,118,426'\n  },\n  EPSG_4620: {\n    towgs84: '-106,-129,165'\n  },\n  EPSG_4184: {\n    towgs84: '-203,141,53'\n  },\n  EPSG_4616: {\n    towgs84: '-289,-124,60'\n  },\n  EPSG_9403: {\n    towgs84: '-307,-92,127'\n  },\n  EPSG_4684: {\n    towgs84: '-133,-321,50'\n  },\n  EPSG_4708: {\n    towgs84: '-491,-22,435'\n  },\n  EPSG_4707: {\n    towgs84: '114,-116,-333'\n  },\n  EPSG_4709: {\n    towgs84: '145,75,-272'\n  },\n  EPSG_4712: {\n    towgs84: '-205,107,53'\n  },\n  EPSG_4711: {\n    towgs84: '124,-234,-25'\n  },\n  EPSG_4718: {\n    towgs84: '230,-199,-752'\n  },\n  EPSG_4719: {\n    towgs84: '211,147,111'\n  },\n  EPSG_4724: {\n    towgs84: '208,-435,-229'\n  },\n  EPSG_4725: {\n    towgs84: '189,-79,-202'\n  },\n  EPSG_4735: {\n    towgs84: '647,1777,-1124'\n  },\n  EPSG_4722: {\n    towgs84: '-794,119,-298'\n  },\n  EPSG_4728: {\n    towgs84: '-307,-92,127'\n  },\n  EPSG_4734: {\n    towgs84: '-632,438,-609'\n  },\n  EPSG_4727: {\n    towgs84: '912,-58,1227'\n  },\n  EPSG_4729: {\n    towgs84: '185,165,42'\n  },\n  EPSG_4730: {\n    towgs84: '170,42,84'\n  },\n  EPSG_4733: {\n    towgs84: '276,-57,149'\n  },\n  ESRI_37218: {\n    towgs84: '230,-199,-752'\n  },\n  ESRI_37240: {\n    towgs84: '-7,215,225'\n  },\n  ESRI_37221: {\n    towgs84: '252,-209,-751'\n  },\n  ESRI_4305: {\n    towgs84: '-123,-206,219'\n  },\n  ESRI_104139: {\n    towgs84: '-73,-247,227'\n  },\n  EPSG_4748: {\n    towgs84: '51,391,-36'\n  },\n  EPSG_4219: {\n    towgs84: '-384,664,-48'\n  },\n  EPSG_4255: {\n    towgs84: '-333,-222,114'\n  },\n  EPSG_4257: {\n    towgs84: '-587.8,519.75,145.76'\n  },\n  EPSG_4646: {\n    towgs84: '-963,510,-359'\n  },\n  EPSG_6881: {\n    towgs84: '-24,-203,268'\n  },\n  EPSG_6882: {\n    towgs84: '-183,-15,273'\n  },\n  EPSG_4715: {\n    towgs84: '-104,-129,239'\n  },\n  IGNF_RGF93GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGM04GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGSPM06GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGTAAF07GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGFG95GDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGNCG: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGPFGDD: {\n    towgs84: '0,0,0'\n  },\n  IGNF_ETRS89G: {\n    towgs84: '0,0,0'\n  },\n  IGNF_RGR92GDD: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4173: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4180: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4619: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4667: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4075: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6706: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7798: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4661: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4669: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8685: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4151: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9702: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4758: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4761: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4765: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8997: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4023: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4670: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4694: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4148: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4163: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4167: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4189: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4190: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4176: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4659: {\n    towgs84: '0,0,0'\n  },\n  EPSG_3824: {\n    towgs84: '0,0,0'\n  },\n  EPSG_3889: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4046: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4081: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4558: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4483: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5013: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5264: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5324: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5354: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5371: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5373: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5381: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5393: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5489: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5593: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6135: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6365: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5246: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7886: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8431: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8427: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8699: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8818: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4757: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9140: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8086: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4686: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4737: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4702: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4747: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4749: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4674: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4755: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4759: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4762: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4763: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4764: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4166: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4170: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5546: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7844: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4818: {\n    towgs84: '589,76,480'\n  },\n  EPSG_10328: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9782: {\n    towgs84: '0,0,0'\n  },\n  EPSG_9777: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10690: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10639: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10739: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7686: {\n    towgs84: '0,0,0'\n  },\n  EPSG_8900: {\n    towgs84: '0,0,0'\n  },\n  EPSG_5886: {\n    towgs84: '0,0,0'\n  },\n  EPSG_7683: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6668: {\n    towgs84: '0,0,0'\n  },\n  EPSG_20046: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10299: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10310: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10475: {\n    towgs84: '0,0,0'\n  },\n  EPSG_4742: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10671: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10762: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10725: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10791: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10800: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10305: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10941: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10968: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10875: {\n    towgs84: '0,0,0'\n  },\n  EPSG_6318: {\n    towgs84: '0,0,0'\n  },\n  EPSG_10910: {\n    towgs84: '0,0,0'\n  }\n};\n\nfor (var key in datums) {\n  var datum = datums[key];\n  if (!datum.datumName) {\n    continue;\n  }\n  datums[datum.datumName] = datum;\n}\n\nexport default datums;\n","/**\n * Resources for details of NTv2 file formats:\n * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf\n * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm\n */\n\n/**\n * @typedef {Object} NadgridInfo\n * @property {string} name The name of the NAD grid or 'null' if not specified.\n * @property {boolean} mandatory Indicates if the grid is mandatory (true) or optional (false).\n * @property {*} grid The loaded NAD grid object, or null if not loaded or not applicable.\n * @property {boolean} isNull True if the grid is explicitly 'null', otherwise false.\n */\n\n/**\n * @typedef {Object} NTV2GridOptions\n * @property {boolean} [includeErrorFields=true] Whether to include error fields in the subgrids.\n */\n\n/**\n * @typedef {Object} NadgridHeader\n * @property {number} [nFields] Number of fields in the header.\n * @property {number} [nSubgridFields] Number of fields in each subgrid header.\n * @property {number} nSubgrids Number of subgrids in the file.\n * @property {string} [shiftType] Type of shift (e.g., \"SECONDS\").\n * @property {number} [fromSemiMajorAxis] Source ellipsoid semi-major axis.\n * @property {number} [fromSemiMinorAxis] Source ellipsoid semi-minor axis.\n * @property {number} [toSemiMajorAxis] Target ellipsoid semi-major axis.\n * @property {number} [toSemiMinorAxis] Target ellipsoid semi-minor axis.\n */\n\n/**\n * @typedef {Object} Subgrid\n * @property {Array<number>} ll Lower left corner of the grid in radians [longitude, latitude].\n * @property {Array<number>} del Grid spacing in radians [longitude interval, latitude interval].\n * @property {Array<number>} lim Number of columns in the grid [longitude columns, latitude columns].\n * @property {number} [count] Total number of grid nodes.\n * @property {Array} cvs Mapped node values for the grid.\n */\n\n/** @typedef {{header: NadgridHeader, subgrids: Array<Subgrid>}} NADGrid */\n\nvar loadedNadgrids = {};\n\n/**\n * @overload\n * @param {string} key - The key to associate with the loaded grid.\n * @param {ArrayBuffer} data - The NTv2 grid data as an ArrayBuffer.\n * @param {NTV2GridOptions} [options] - Optional parameters for loading the grid.\n * @returns {NADGrid} - The loaded NAD grid information.\n */\n/**\n * @overload\n * @param {string} key - The key to associate with the loaded grid.\n * @param {import('geotiff').GeoTIFF} data - The GeoTIFF instance to read the grid from.\n * @returns {{ready: Promise<NADGrid>}} - A promise that resolves to the loaded grid information.\n */\n/**\n * Load either a NTv2 file (.gsb) or a Geotiff (.tif) to a key that can be used in a proj string like +nadgrids=<key>. Pass the NTv2 file\n * as an ArrayBuffer. Pass Geotiff as a GeoTIFF instance from the geotiff.js library.\n * @param {string} key - The key to associate with the loaded grid.\n * @param {ArrayBuffer|import('geotiff').GeoTIFF} data The data to load, either an ArrayBuffer for NTv2 or a GeoTIFF instance.\n * @param {NTV2GridOptions} [options] Optional parameters.\n * @returns {{ready: Promise<NADGrid>}|NADGrid} - A promise that resolves to the loaded grid information.\n */\nexport default function nadgrid(key, data, options) {\n  if (data instanceof ArrayBuffer) {\n    return readNTV2Grid(key, data, options);\n  }\n  return { ready: readGeotiffGrid(key, data) };\n}\n\n/**\n * @param {string} key The key to associate with the loaded grid.\n * @param {ArrayBuffer} data The NTv2 grid data as an ArrayBuffer.\n * @param {NTV2GridOptions} [options] Optional parameters for loading the grid.\n * @returns {NADGrid} The loaded NAD grid information.\n */\nfunction readNTV2Grid(key, data, options) {\n  var includeErrorFields = true;\n  if (options !== undefined && options.includeErrorFields === false) {\n    includeErrorFields = false;\n  }\n  var view = new DataView(data);\n  var isLittleEndian = detectLittleEndian(view);\n  var header = readHeader(view, isLittleEndian);\n  var subgrids = readSubgrids(view, header, isLittleEndian, includeErrorFields);\n  var nadgrid = { header: header, subgrids: subgrids };\n  loadedNadgrids[key] = nadgrid;\n  return nadgrid;\n}\n\n/**\n * @param {string} key The key to associate with the loaded grid.\n * @param {import('geotiff').GeoTIFF} tiff The GeoTIFF instance to read the grid from.\n * @returns {Promise<NADGrid>} A promise that resolves to the loaded NAD grid information.\n */\nasync function readGeotiffGrid(key, tiff) {\n  var subgrids = [];\n  var subGridCount = await tiff.getImageCount();\n  // proj produced tiff grid shift files appear to organize lower res subgrids first, higher res/ child subgrids last.\n  for (var subgridIndex = subGridCount - 1; subgridIndex >= 0; subgridIndex--) {\n    var image = await tiff.getImage(subgridIndex);\n\n    var rasters = await image.readRasters();\n    var data = rasters;\n    var lim = [image.getWidth(), image.getHeight()];\n    var imageBBoxRadians = image.getBoundingBox().map(degreesToRadians);\n    var modelPixelScale = typeof image.fileDirectory.getValue === 'function'\n      // geotiff v3\n      ? image.fileDirectory.getValue('ModelPixelScale')\n      // geotiff v2\n      : /** @type {any} */ (image.fileDirectory).ModelPixelScale;\n    var del = [modelPixelScale[0], modelPixelScale[1]].map(degreesToRadians);\n\n    var maxX = imageBBoxRadians[0] + (lim[0] - 1) * del[0];\n    var minY = imageBBoxRadians[3] - (lim[1] - 1) * del[1];\n\n    var latitudeOffsetBand = data[0];\n    var longitudeOffsetBand = data[1];\n    var nodes = [];\n\n    for (let i = lim[1] - 1; i >= 0; i--) {\n      for (let j = lim[0] - 1; j >= 0; j--) {\n        var index = i * lim[0] + j;\n        nodes.push([-secondsToRadians(longitudeOffsetBand[index]), secondsToRadians(latitudeOffsetBand[index])]);\n      }\n    }\n\n    subgrids.push({\n      del: del,\n      lim: lim,\n      ll: [-maxX, minY],\n      cvs: nodes\n    });\n  }\n\n  var tifGrid = {\n    header: {\n      nSubgrids: subGridCount\n    },\n    subgrids: subgrids\n  };\n  loadedNadgrids[key] = tifGrid;\n  return tifGrid;\n};\n\n/**\n * Given a proj4 value for nadgrids, return an array of loaded grids\n * @param {string} nadgrids A comma-separated list of grid names, optionally prefixed with '@' to indicate optional grids.\n * @returns\n */\nexport function getNadgrids(nadgrids) {\n  // Format details: http://proj.maptools.org/gen_parms.html\n  if (nadgrids === undefined) {\n    return null;\n  }\n  var grids = nadgrids.split(',');\n  return grids.map(parseNadgridString);\n}\n\n/**\n * @param {string} value The nadgrid string to get information for.\n * @returns {NadgridInfo|null} An object with grid information, or null if the input is empty.\n */\nfunction parseNadgridString(value) {\n  if (value.length === 0) {\n    return null;\n  }\n  var optional = value[0] === '@';\n  if (optional) {\n    value = value.slice(1);\n  }\n  if (value === 'null') {\n    return { name: 'null', mandatory: !optional, grid: null, isNull: true };\n  }\n  return {\n    name: value,\n    mandatory: !optional,\n    grid: loadedNadgrids[value] || null,\n    isNull: false\n  };\n}\n\nfunction degreesToRadians(degrees) {\n  return (degrees) * Math.PI / 180;\n}\n\nfunction secondsToRadians(seconds) {\n  return (seconds / 3600) * Math.PI / 180;\n}\n\nfunction detectLittleEndian(view) {\n  var nFields = view.getInt32(8, false);\n  if (nFields === 11) {\n    return false;\n  }\n  nFields = view.getInt32(8, true);\n  if (nFields !== 11) {\n    console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');\n  }\n  return true;\n}\n\nfunction readHeader(view, isLittleEndian) {\n  return {\n    nFields: view.getInt32(8, isLittleEndian),\n    nSubgridFields: view.getInt32(24, isLittleEndian),\n    nSubgrids: view.getInt32(40, isLittleEndian),\n    shiftType: decodeString(view, 56, 56 + 8).trim(),\n    fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),\n    fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),\n    toSemiMajorAxis: view.getFloat64(152, isLittleEndian),\n    toSemiMinorAxis: view.getFloat64(168, isLittleEndian)\n  };\n}\n\nfunction decodeString(view, start, end) {\n  return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));\n}\n\nfunction readSubgrids(view, header, isLittleEndian, includeErrorFields) {\n  var gridOffset = 176;\n  var grids = [];\n  for (var i = 0; i < header.nSubgrids; i++) {\n    var subHeader = readGridHeader(view, gridOffset, isLittleEndian);\n    var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian, includeErrorFields);\n    var lngColumnCount = Math.round(\n      1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);\n    var latColumnCount = Math.round(\n      1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);\n    // Proj4 operates on radians whereas the coordinates are in seconds in the grid\n    grids.push({\n      ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],\n      del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],\n      lim: [lngColumnCount, latColumnCount],\n      count: subHeader.gridNodeCount,\n      cvs: mapNodes(nodes)\n    });\n    var rowSize = 16;\n    if (includeErrorFields === false) {\n      rowSize = 8;\n    }\n    gridOffset += 176 + subHeader.gridNodeCount * rowSize;\n  }\n  return grids;\n}\n\n/**\n * @param {*} nodes\n * @returns Array<Array<number>>\n */\nfunction mapNodes(nodes) {\n  return nodes.map(function (r) {\n    return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];\n  });\n}\n\nfunction readGridHeader(view, offset, isLittleEndian) {\n  return {\n    name: decodeString(view, offset + 8, offset + 16).trim(),\n    parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),\n    lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),\n    upperLatitude: view.getFloat64(offset + 88, isLittleEndian),\n    lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),\n    upperLongitude: view.getFloat64(offset + 120, isLittleEndian),\n    latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),\n    longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),\n    gridNodeCount: view.getInt32(offset + 168, isLittleEndian)\n  };\n}\n\nfunction readGridNodes(view, offset, gridHeader, isLittleEndian, includeErrorFields) {\n  var nodesOffset = offset + 176;\n  var gridRecordLength = 16;\n\n  if (includeErrorFields === false) {\n    gridRecordLength = 8;\n  }\n\n  var gridShiftRecords = [];\n  for (var i = 0; i < gridHeader.gridNodeCount; i++) {\n    var record = {\n      latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),\n      longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian)\n\n    };\n\n    if (includeErrorFields !== false) {\n      record.latitudeAccuracy = view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian);\n      record.longitudeAccuracy = view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian);\n    }\n\n    gridShiftRecords.push(record);\n  }\n  return gridShiftRecords;\n}\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport { sphere as dc_sphere, eccentricity as dc_eccentricity } from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\nimport { getNadgrids } from './nadgrid';\n\n/**\n * @typedef {Object} DatumDefinition\n * @property {number} datum_type - The type of datum.\n * @property {number} a - Semi-major axis of the ellipsoid.\n * @property {number} b - Semi-minor axis of the ellipsoid.\n * @property {number} es - Eccentricity squared of the ellipsoid.\n * @property {number} ep2 - Second eccentricity squared of the ellipsoid.\n */\n\n/**\n * @param {string | import('./core').PROJJSONDefinition | import('./defs').ProjectionDefinition} srsCode\n * @param {(errorMessage?: string, instance?: Projection) => void} [callback]\n */\nfunction Projection(srsCode, callback) {\n  if (!(this instanceof Projection)) {\n    return new Projection(srsCode);\n  }\n  /** @type {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} */\n  this.forward = null;\n  /** @type {<T extends import('./core').TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} */\n  this.inverse = null;\n  /** @type {function(): void} */\n  this.init = null;\n  /** @type {string} */\n  this.name;\n  /** @type {string} */\n  this.axis;\n  /** @type {Array<string>} */\n  this.names = null;\n  /** @type {string} */\n  this.title;\n  callback = callback || function (error) {\n    if (error) {\n      throw error;\n    }\n  };\n  var json = parseCode(srsCode);\n  if (typeof json !== 'object') {\n    callback('Could not parse to valid json: ' + srsCode);\n    return;\n  }\n  var ourProj = Projection.projections.get(json.projName);\n  if (!ourProj) {\n    callback('Could not get projection name from: ' + srsCode);\n    return;\n  }\n  if (json.datumCode && json.datumCode !== 'none') {\n    var datumDef = match(Datum, json.datumCode);\n    if (datumDef) {\n      json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null);\n      json.ellps = datumDef.ellipse;\n      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n    }\n  }\n  json.k0 = json.k0 || 1.0;\n  json.axis = json.axis || 'enu';\n  json.ellps = json.ellps || 'wgs84';\n  json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this\n\n  var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n  var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n  var nadgrids = getNadgrids(json.nadgrids);\n  /** @type {DatumDefinition} */\n  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,\n    nadgrids);\n\n  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n  extend(this, ourProj); // transfer all the methods from the projection\n\n  // copy the 4 things over we calculated in deriveConstants.sphere\n  this.a = sphere_.a;\n  this.b = sphere_.b;\n  this.rf = sphere_.rf;\n  this.sphere = sphere_.sphere;\n\n  // copy the 3 things we calculated in deriveConstants.eccentricity\n  this.es = ecc.es;\n  this.e = ecc.e;\n  this.ep2 = ecc.ep2;\n\n  // add in the datum object\n  this.datum = datumObj;\n\n  // init the projection\n  if ('init' in this && typeof this.init === 'function') {\n    this.init();\n  }\n\n  // legecy callback from back in the day when it went to spatialreference.org\n  callback(null, this);\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import { PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD } from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {\n  var out = {};\n  out.datum_type = PJD_NODATUM;\n\n  if (datum_params) {\n    out.datum_type = PJD_WGS84;\n    out.datum_params = datum_params.map(parseFloat);\n    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n      out.datum_type = PJD_3PARAM;\n    }\n    if (out.datum_params.length > 3) {\n      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n        out.datum_type = PJD_7PARAM;\n        out.datum_params[3] *= SEC_TO_RAD;\n        out.datum_params[4] *= SEC_TO_RAD;\n        out.datum_params[5] *= SEC_TO_RAD;\n        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n      }\n    }\n  }\n\n  if (nadgrids) {\n    out.datum_type = PJD_GRIDSHIFT;\n    out.grids = nadgrids;\n  }\n  out.a = a; // datum object also uses these values\n  out.b = b;\n  out.es = es;\n  out.ep2 = ep2;\n  return out;\n}\n\nexport default datum;\n","'use strict';\nimport { PJD_3PARAM, PJD_7PARAM, HALF_PI } from './constants/values';\nexport function compareDatums(source, dest) {\n  if (source.datum_type !== dest.datum_type) {\n    return false; // false, datums are not equal\n  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n    // the tolerance for es is to ensure that GRS80 and WGS84\n    // are considered identical\n    return false;\n  } else if (source.datum_type === PJD_3PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n  } else if (source.datum_type === PJD_7PARAM) {\n    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n  } else {\n    return true; // datums are equal\n  }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n *    Latitude  : Geodetic latitude in radians                     (input)\n *    Longitude : Geodetic longitude in radians                    (input)\n *    Height    : Geodetic height, in meters                       (input)\n *    X         : Calculated Geocentric X coordinate, in meters    (output)\n *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n  var Longitude = p.x;\n  var Latitude = p.y;\n  var Height = p.z ? p.z : 0; // Z value not always supplied\n\n  var Rn; /*  Earth radius at location  */\n  var Sin_Lat; /*  Math.sin(Latitude)  */\n  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n  /*\n   ** Don't blow up if Latitude is just a little out of the value\n   ** range as it may just be a rounding issue.  Also removed longitude\n   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n   */\n  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n    Latitude = -HALF_PI;\n  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n    Latitude = HALF_PI;\n  } else if (Latitude < -HALF_PI) {\n    /* Latitude out of range */\n    // ..reportError('geocent:lat out of range:' + Latitude);\n    return { x: -Infinity, y: -Infinity, z: p.z };\n  } else if (Latitude > HALF_PI) {\n    /* Latitude out of range */\n    return { x: Infinity, y: Infinity, z: p.z };\n  }\n\n  if (Longitude > Math.PI) {\n    Longitude -= (2 * Math.PI);\n  }\n  Sin_Lat = Math.sin(Latitude);\n  Cos_Lat = Math.cos(Latitude);\n  Sin2_Lat = Sin_Lat * Sin_Lat;\n  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n  return {\n    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n  };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n  /* local defintions and variables */\n  /* end-criterium of loop, accuracy of sin(Latitude) */\n  var genau = 1e-12;\n  var genau2 = (genau * genau);\n  var maxiter = 30;\n\n  var P; /* distance between semi-minor axis and location */\n  var RR; /* distance between center and location */\n  var CT; /* sin of geocentric latitude */\n  var ST; /* cos of geocentric latitude */\n  var RX;\n  var RK;\n  var RN; /* Earth radius at location */\n  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n  var CPHI; /* cos of searched geodetic latitude */\n  var SPHI; /* sin of searched geodetic latitude */\n  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n  var X = p.x;\n  var Y = p.y;\n  var Z = p.z ? p.z : 0.0; // Z value not always supplied\n  var Longitude;\n  var Latitude;\n  var Height;\n\n  P = Math.sqrt(X * X + Y * Y);\n  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n  /*      special cases for latitude and longitude */\n  if (P / a < genau) {\n    /*  special case, if P=0. (X=0., Y=0.) */\n    Longitude = 0.0;\n\n    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n    if (RR / a < genau) {\n      Latitude = HALF_PI;\n      Height = -b;\n      return {\n        x: p.x,\n        y: p.y,\n        z: p.z\n      };\n    }\n  } else {\n    /*  ellipsoidal (geodetic) longitude\n     *  interval: -PI < Longitude <= +PI */\n    Longitude = Math.atan2(Y, X);\n  }\n\n  /* --------------------------------------------------------------\n   * Following iterative algorithm was developped by\n   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n   * Internet: www.ife.uni-hannover.de\n   * Iterative computation of CPHI,SPHI and Height.\n   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n   * 2*10**-7 arcsec.\n   * --------------------------------------------------------------\n   */\n  CT = Z / RR;\n  ST = P / RR;\n  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n  CPHI0 = ST * (1.0 - es) * RX;\n  SPHI0 = CT * RX;\n  iter = 0;\n\n  /* loop to find sin(Latitude) resp. Latitude\n   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n  do {\n    iter++;\n    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n    /*  ellipsoidal (geodetic) height */\n    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n    RK = es * RN / (RN + Height);\n    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n    CPHI = ST * (1.0 - RK) * RX;\n    SPHI = CT * RX;\n    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n    CPHI0 = CPHI;\n    SPHI0 = SPHI;\n  }\n  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n  /*      ellipsoidal (geodetic) latitude */\n  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n  return {\n    x: Longitude,\n    y: Latitude,\n    z: Height\n  };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n//  p = point to transform in geocentric coordinates (x,y,z)\n\n/** point object, nothing fancy, just allows values to be\n    passed back and forth by reference rather than by value.\n    Other point classes may be used as long as they have\n    x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n  if (datum_type === PJD_3PARAM) {\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x + datum_params[0],\n      y: p.y + datum_params[1],\n      z: p.z + datum_params[2]\n    };\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n    };\n  }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n//  coordinate system definition,\n//  point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n  if (datum_type === PJD_3PARAM) {\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n    return {\n      x: p.x - datum_params[0],\n      y: p.y - datum_params[1],\n      z: p.z - datum_params[2]\n    };\n  } else if (datum_type === PJD_7PARAM) {\n    var Dx_BF = datum_params[0];\n    var Dy_BF = datum_params[1];\n    var Dz_BF = datum_params[2];\n    var Rx_BF = datum_params[3];\n    var Ry_BF = datum_params[4];\n    var Rz_BF = datum_params[5];\n    var M_BF = datum_params[6];\n    var x_tmp = (p.x - Dx_BF) / M_BF;\n    var y_tmp = (p.y - Dy_BF) / M_BF;\n    var z_tmp = (p.z - Dz_BF) / M_BF;\n    // if( x[io] === HUGE_VAL )\n    //    continue;\n\n    return {\n      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n    };\n  } // cs_geocentric_from_wgs84()\n}\n","import {\n  PJD_3PARAM,\n  PJD_7PARAM,\n  PJD_GRIDSHIFT,\n  PJD_NODATUM,\n  R2D,\n  SRS_WGS84_ESQUARED,\n  SRS_WGS84_SEMIMAJOR, SRS_WGS84_SEMIMINOR\n} from './constants/values';\n\nimport { geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums } from './datumUtils';\nimport adjust_lon from './common/adjust_lon';\nfunction checkParams(type) {\n  return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function (source, dest, point) {\n  // Short cut if the datums are identical.\n  if (compareDatums(source, dest)) {\n    return point; // in this case, zero is sucess,\n    // whereas cs_compare_datums returns 1 to indicate TRUE\n    // confusing, should fix this\n  }\n\n  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n    return point;\n  }\n\n  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n  var source_a = source.a;\n  var source_es = source.es;\n  if (source.datum_type === PJD_GRIDSHIFT) {\n    var gridShiftCode = applyGridShift(source, false, point);\n    if (gridShiftCode !== 0) {\n      return undefined;\n    }\n    source_a = SRS_WGS84_SEMIMAJOR;\n    source_es = SRS_WGS84_ESQUARED;\n  }\n\n  var dest_a = dest.a;\n  var dest_b = dest.b;\n  var dest_es = dest.es;\n  if (dest.datum_type === PJD_GRIDSHIFT) {\n    dest_a = SRS_WGS84_SEMIMAJOR;\n    dest_b = SRS_WGS84_SEMIMINOR;\n    dest_es = SRS_WGS84_ESQUARED;\n  }\n\n  // Do we need to go through geocentric coordinates?\n  if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n    return point;\n  }\n\n  // Convert to geocentric coordinates.\n  point = geodeticToGeocentric(point, source_es, source_a);\n  // Convert between datums\n  if (checkParams(source.datum_type)) {\n    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n  }\n  if (checkParams(dest.datum_type)) {\n    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n  }\n  point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);\n\n  if (dest.datum_type === PJD_GRIDSHIFT) {\n    var destGridShiftResult = applyGridShift(dest, true, point);\n    if (destGridShiftResult !== 0) {\n      return undefined;\n    }\n  }\n\n  return point;\n}\n\nexport function applyGridShift(source, inverse, point) {\n  if (source.grids === null || source.grids.length === 0) {\n    console.log('Grid shift grids not found');\n    return -1;\n  }\n  var input = { x: -point.x, y: point.y };\n  var output = { x: Number.NaN, y: Number.NaN };\n  var attemptedGrids = [];\n  outer:\n  for (var i = 0; i < source.grids.length; i++) {\n    var grid = source.grids[i];\n    attemptedGrids.push(grid.name);\n    if (grid.isNull) {\n      output = input;\n      break;\n    }\n    if (grid.grid === null) {\n      if (grid.mandatory) {\n        console.log('Unable to find mandatory grid \\'' + grid.name + '\\'');\n        return -1;\n      }\n      continue;\n    }\n    var subgrids = grid.grid.subgrids;\n    for (var j = 0, jj = subgrids.length; j < jj; j++) {\n      var subgrid = subgrids[j];\n      // skip tables that don't match our point at all\n      var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;\n      var minX = subgrid.ll[0] - epsilon;\n      var minY = subgrid.ll[1] - epsilon;\n      var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;\n      var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;\n      if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x) {\n        continue;\n      }\n      output = applySubgridShift(input, inverse, subgrid);\n      if (!isNaN(output.x)) {\n        break outer;\n      }\n    }\n  }\n  if (isNaN(output.x)) {\n    console.log('Failed to find a grid shift table for location \\''\n      + -input.x * R2D + ' ' + input.y * R2D + ' tried: \\'' + attemptedGrids + '\\'');\n    return -1;\n  }\n  point.x = -output.x;\n  point.y = output.y;\n  return 0;\n}\n\nfunction applySubgridShift(pin, inverse, ct) {\n  var val = { x: Number.NaN, y: Number.NaN };\n  if (isNaN(pin.x)) {\n    return val;\n  }\n  var tb = { x: pin.x, y: pin.y };\n  tb.x -= ct.ll[0];\n  tb.y -= ct.ll[1];\n  tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;\n  var t = nadInterpolate(tb, ct);\n  if (inverse) {\n    if (isNaN(t.x)) {\n      return val;\n    }\n    t.x = tb.x - t.x;\n    t.y = tb.y - t.y;\n    var i = 9, tol = 1e-12;\n    var dif, del;\n    do {\n      del = nadInterpolate(t, ct);\n      if (isNaN(del.x)) {\n        console.log('Inverse grid shift iteration failed, presumably at grid edge.  Using first approximation.');\n        break;\n      }\n      dif = { x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y) };\n      t.x += dif.x;\n      t.y += dif.y;\n    } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);\n    if (i < 0) {\n      console.log('Inverse grid shift iterator failed to converge.');\n      return val;\n    }\n    val.x = adjust_lon(t.x + ct.ll[0]);\n    val.y = t.y + ct.ll[1];\n  } else {\n    if (!isNaN(t.x)) {\n      val.x = pin.x + t.x;\n      val.y = pin.y + t.y;\n    }\n  }\n  return val;\n}\n\nfunction nadInterpolate(pin, ct) {\n  var t = { x: pin.x / ct.del[0], y: pin.y / ct.del[1] };\n  var indx = { x: Math.floor(t.x), y: Math.floor(t.y) };\n  var frct = { x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y };\n  var val = { x: Number.NaN, y: Number.NaN };\n  var inx;\n  if (indx.x < 0 || indx.x >= ct.lim[0]) {\n    return val;\n  }\n  if (indx.y < 0 || indx.y >= ct.lim[1]) {\n    return val;\n  }\n  inx = (indx.y * ct.lim[0]) + indx.x;\n  var f00 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  inx++;\n  var f10 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  inx += ct.lim[0];\n  var f11 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  inx--;\n  var f01 = { x: ct.cvs[inx][0], y: ct.cvs[inx][1] };\n  var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),\n    m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;\n  val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);\n  val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);\n  return val;\n}\n","var order = ['x', 'y', 'z'];\n\n/**\n * Convert a point in a given CRS axis order to ENU (east/north/up) order\n * @param {import('./defs').ProjectionDefinition} crs\n * @param {import('./core').InterfaceCoordinates} point\n * @returns {import('./core').InterfaceCoordinates | null}\n */\nexport function adjustAxisToEnu(crs, point) {\n  /** @type {import(\"./core\").InterfaceCoordinates} */\n  const out = {};\n  for (let i = 0, ii = crs.axis.length; i < ii; i++) {\n    if (i === 2 && point.z === undefined) {\n      continue;\n    }\n    let v = point[order[i]];\n    switch (crs.axis[i]) {\n      case 'e':\n        out.x = v;\n        break;\n      case 'w':\n        out.x = -v;\n        break;\n      case 'n':\n        out.y = v;\n        break;\n      case 's':\n        out.y = -v;\n        break;\n      case 'u':\n        out.z = v;\n        break;\n      case 'd':\n        out.z = -v;\n        break;\n      default:\n        // console.log(\"ERROR: unknown axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n        return null;\n    }\n  }\n  return out;\n}\n\n/**\n * Convert a point in ENU (east/north/up) order to the given CRS axis order.\n * @param {import('./defs').ProjectionDefinition} crs\n * @param {import('./core').InterfaceCoordinates} point\n * @returns {import('./core').InterfaceCoordinates | null}\n */\nexport function adjustAxisFromEnu(crs, point) {\n  const out = /** @type {import(\"./core\").InterfaceCoordinates} */ ({});\n  for (let i = 0, ii = crs.axis.length; i < ii; i++) {\n    if (i === 2 && point.z === undefined) {\n      continue;\n    }\n    switch (crs.axis[i]) {\n      case 'e':\n        out[order[i]] = point.x;\n        break;\n      case 'w':\n        out[order[i]] = -point.x;\n        break;\n      case 'n':\n        out[order[i]] = point.y;\n        break;\n      case 's':\n        out[order[i]] = -point.y;\n        break;\n      case 'u':\n        out[order[i]] = point.z;\n        break;\n      case 'd':\n        out[order[i]] = -point.z;\n        break;\n      default:\n        // console.log(\"ERROR: unknown axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n        return null;\n    }\n  }\n  return out;\n}\n","/**\n * @param {Array<number>} array\n * @returns {import(\"../core\").InterfaceCoordinates}\n */\nexport default function (array) {\n  var out = {\n    x: array[0],\n    y: array[1]\n  };\n  if (array.length > 2) {\n    out.z = array[2];\n  }\n  if (array.length > 3) {\n    out.m = array[3];\n  }\n  return out;\n}\n","export default function (point) {\n  checkCoord(point.x);\n  checkCoord(point.y);\n}\nfunction checkCoord(num) {\n  if (typeof Number.isFinite === 'function') {\n    if (Number.isFinite(num)) {\n      return;\n    }\n    throw new TypeError('coordinates must be finite numbers');\n  }\n  if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n    throw new TypeError('coordinates must be finite numbers');\n  }\n}\n","import { D2R, R2D, PJD_3PARAM, PJD_7PARAM, PJD_GRIDSHIFT } from './constants/values';\nimport datum_transform from './datum_transform';\nimport { adjustAxisToEnu, adjustAxisFromEnu } from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n  return (\n    (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84')\n  || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84');\n}\n\n/**\n * Internal transform: accepts an already-cloned point object, returns transformed point object.\n * @param {import('./defs').ProjectionDefinition} source\n * @param {import('./defs').ProjectionDefinition} dest\n * @param {import('./core').InterfaceCoordinates} point\n * @param {boolean} [enforceAxis]\n * @returns {import('./core').InterfaceCoordinates | undefined}\n */\nexport function transformInternal(source, dest, point, enforceAxis) {\n  var wgs84;\n  var hasZ = point.z !== undefined;\n  checkSanity(point);\n  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n    wgs84 = new proj('WGS84');\n    point = transformInternal(source, wgs84, point, enforceAxis);\n    source = wgs84;\n  }\n  // DGR, 2010/11/12\n  if (enforceAxis && source.axis !== 'enu') {\n    point = adjustAxisToEnu(source, point);\n  }\n  // Transform source points to long/lat, if they aren't already.\n  if (source.projName === 'longlat') {\n    point = {\n      x: point.x * D2R,\n      y: point.y * D2R,\n      z: point.z || 0\n    };\n  } else {\n    if (source.to_meter) {\n      point = {\n        x: point.x * source.to_meter,\n        y: point.y * source.to_meter,\n        z: point.z || 0\n      };\n    }\n    point = source.inverse(point); // Convert Cartesian to longlat\n    if (!point) {\n      return;\n    }\n  }\n  // Adjust for the prime meridian if necessary\n  if (source.from_greenwich) {\n    point.x += source.from_greenwich;\n  }\n\n  // Convert datums if needed, and if possible.\n  point = datum_transform(source.datum, dest.datum, point);\n  if (!point) {\n    return;\n  }\n\n  point = /** @type {import('./core').InterfaceCoordinates} */ (point);\n\n  // Adjust for the prime meridian if necessary\n  if (dest.from_greenwich) {\n    point = {\n      x: point.x - dest.from_greenwich,\n      y: point.y,\n      z: point.z || 0\n    };\n  }\n\n  if (dest.projName === 'longlat') {\n    // convert radians to decimal degrees\n    point = {\n      x: point.x * R2D,\n      y: point.y * R2D,\n      z: point.z || 0\n    };\n  } else { // else project\n    point = dest.forward(point);\n    if (dest.to_meter) {\n      point = {\n        x: point.x / dest.to_meter,\n        y: point.y / dest.to_meter,\n        z: point.z || 0\n      };\n    }\n  }\n\n  // DGR, 2010/11/12\n  if (enforceAxis && dest.axis !== 'enu') {\n    return adjustAxisFromEnu(dest, point);\n  }\n\n  if (point && !hasZ && dest.projName !== 'geocent') {\n    delete point.z;\n  }\n  return point;\n}\n\n/**\n * @param {import('./defs').ProjectionDefinition} source\n * @param {import('./defs').ProjectionDefinition} dest\n * @param {import('./core').TemplateCoordinates} point\n * @param {boolean} [enforceAxis]\n * @returns {import('./core').InterfaceCoordinates | undefined}\n */\nexport default function transform(source, dest, point, enforceAxis) {\n  var pt;\n  if (Array.isArray(point)) {\n    pt = toPoint(point);\n  } else {\n    // Clone the point object so inputs don't get modified\n    pt = { x: point.x, y: point.y, z: point.z, m: point.m };\n  }\n  return transformInternal(source, dest, pt, enforceAxis);\n}\n","import proj from './Proj';\nimport { transformInternal } from './transform';\nimport toPoint from './common/toPoint';\nvar wgs84 = proj('WGS84');\n\n/**\n * @typedef {{x: number, y: number, z?: number, m?: number}} InterfaceCoordinates\n */\n\n/**\n * @typedef {Array<number> | InterfaceCoordinates} TemplateCoordinates\n */\n\n/**\n * @typedef {Object} Converter\n * @property {<T extends TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} forward\n * @property {<T extends TemplateCoordinates>(coordinates: T, enforceAxis?: boolean) => T} inverse\n * @property {proj} [oProj]\n */\n\n/**\n * @typedef {Object} PROJJSONDefinition\n * @property {string} [$schema]\n * @property {string} type\n * @property {string} [name]\n * @property {{authority: string, code: number}} [id]\n * @property {string} [scope]\n * @property {string} [area]\n * @property {{south_latitude: number, west_longitude: number, north_latitude: number, east_longitude: number}} [bbox]\n * @property {PROJJSONDefinition[]} [components]\n * @property {{type: string, name: string}} [datum]\n * @property {{\n *   name: string,\n *   members: Array<{\n *     name: string,\n *     id?: {authority: string, code: number}\n *   }>,\n *   ellipsoid?: {\n *     name: string,\n *     semi_major_axis: number,\n *     inverse_flattening?: number\n *   },\n *   accuracy?: string,\n *   id?: {authority: string, code: number}\n * }} [datum_ensemble]\n * @property {{\n *   subtype: string,\n *   axis: Array<{\n *     name: string,\n *     abbreviation?: string,\n *     direction: string,\n *     unit: string\n *   }>\n * }} [coordinate_system]\n * @property {{\n *   name: string,\n *   method: {name: string},\n *   parameters: Array<{\n *     name: string,\n *     value: number,\n *     unit?: string\n *   }>\n * }} [conversion]\n * @property {{\n *   name: string,\n *   method: {name: string},\n *   parameters: Array<{\n *     name: string,\n *     value: number,\n *     unit?: string,\n *     type?: string,\n *     file_name?: string\n *   }>\n * }} [transformation]\n */\n\n/**\n * @template {TemplateCoordinates} T\n * @param {proj} from\n * @param {proj} to\n * @param {T} coords\n * @param {boolean} [enforceAxis]\n * @returns {T}\n */\nfunction transformer(from, to, coords, enforceAxis) {\n  var out, geocent, keys;\n  if (Array.isArray(coords)) {\n    out = transformInternal(from, to, toPoint(coords), enforceAxis) || { x: NaN, y: NaN };\n    if (coords.length > 2) {\n      geocent = (typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent');\n      if (geocent) {\n        if (typeof out.z === 'number') {\n          return /** @type {T} */ ([out.x, out.y, out.z].concat(coords.slice(3)));\n        }\n        return /** @type {T} */ ([out.x, out.y, coords[2]].concat(coords.slice(3)));\n      }\n      if (enforceAxis && typeof out.z === 'number') {\n        return /** @type {T} */ ([out.x, out.y, out.z].concat(coords.slice(3)));\n      }\n      return /** @type {T} */ ([out.x, out.y].concat(coords.slice(2)));\n    }\n    return /** @type {T} */ ([out.x, out.y]);\n  } else {\n    out = transformInternal(from, to, { x: coords.x, y: coords.y, z: coords.z, m: coords.m }, enforceAxis) || { x: NaN, y: NaN };\n    keys = Object.keys(coords);\n    if (keys.length === 2) {\n      return /** @type {T} */ (out);\n    }\n    geocent = (typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent');\n    keys.forEach(function (key) {\n      if (key === 'x' || key === 'y') {\n        return;\n      }\n      if (key === 'z' && (geocent || enforceAxis)) {\n        return;\n      }\n      out[key] = coords[key];\n    });\n    return /** @type {T} */ (out);\n  }\n}\n\n/**\n * @param {proj | string | PROJJSONDefinition | Converter} item\n * @returns {import('./Proj').default}\n */\nfunction checkProj(item) {\n  if (item instanceof proj) {\n    return item;\n  }\n  if (typeof item === 'object' && 'oProj' in item) {\n    return item.oProj;\n  }\n  return proj(/** @type {string | PROJJSONDefinition} */ (item));\n}\n\n/**\n * @overload\n * @param {string | PROJJSONDefinition | proj} toProj\n * @returns {Converter}\n */\n/**\n * @overload\n * @param {string | PROJJSONDefinition | proj} fromProj\n * @param {string | PROJJSONDefinition | proj} toProj\n * @returns {Converter}\n */\n/**\n * @template {TemplateCoordinates} T\n * @overload\n * @param {string | PROJJSONDefinition | proj} toProj\n * @param {T} coord\n * @returns {T}\n */\n/**\n * @template {TemplateCoordinates} T\n * @overload\n * @param {string | PROJJSONDefinition | proj} fromProj\n * @param {string | PROJJSONDefinition | proj} toProj\n * @param {T} coord\n * @returns {T}\n */\n/**\n * @template {TemplateCoordinates} T\n * @param {string | PROJJSONDefinition | proj} fromProjOrToProj\n * @param {string | PROJJSONDefinition | proj | TemplateCoordinates} [toProjOrCoord]\n * @param {T} [coord]\n * @returns {T|Converter}\n */\nfunction proj4(fromProjOrToProj, toProjOrCoord, coord) {\n  /** @type {proj} */\n  var fromProj;\n  /** @type {proj} */\n  var toProj;\n  var single = false;\n  /** @type {Converter} */\n  var obj;\n  if (typeof toProjOrCoord === 'undefined') {\n    toProj = checkProj(fromProjOrToProj);\n    fromProj = wgs84;\n    single = true;\n  } else if (typeof /** @type {?} */ (toProjOrCoord).x !== 'undefined' || Array.isArray(toProjOrCoord)) {\n    coord = /** @type {T} */ (/** @type {?} */ (toProjOrCoord));\n    toProj = checkProj(fromProjOrToProj);\n    fromProj = wgs84;\n    single = true;\n  }\n  if (!fromProj) {\n    fromProj = checkProj(fromProjOrToProj);\n  }\n  if (!toProj) {\n    toProj = checkProj(/** @type {string | PROJJSONDefinition | proj } */ (toProjOrCoord));\n  }\n  if (coord) {\n    return transformer(fromProj, toProj, coord);\n  } else {\n    obj = {\n      /**\n       * @template {TemplateCoordinates} T\n       * @param {T} coords\n       * @param {boolean=} enforceAxis\n       * @returns {T}\n       */\n      forward: function (coords, enforceAxis) {\n        return transformer(fromProj, toProj, coords, enforceAxis);\n      },\n      /**\n       * @template {TemplateCoordinates} T\n       * @param {T} coords\n       * @param {boolean=} enforceAxis\n       * @returns {T}\n       */\n      inverse: function (coords, enforceAxis) {\n        return transformer(toProj, fromProj, coords, enforceAxis);\n      }\n    };\n    if (single) {\n      obj.oProj = toProj;\n    }\n    return obj;\n  }\n}\n\nexport default proj4;\n","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n  forward: forward,\n  inverse: inverse,\n  toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n *     WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n  accuracy = accuracy || 5; // default accuracy 1m\n  return encode(LLtoUTM({\n    lat: ll[1],\n    lon: ll[0]\n  }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n *     (longitude) and top (latitude) values in WGS84, representing the\n *     bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n  }\n  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n  if (bbox.lat && bbox.lon) {\n    return [bbox.lon, bbox.lat];\n  }\n  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n  return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n  return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n *     representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n *     northing, zoneNumber and zoneLetter properties, and an optional\n *     accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n  var Lat = ll.lat;\n  var Long = ll.lon;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var k0 = 0.9996;\n  var LongOrigin;\n  var eccPrimeSquared;\n  var N, T, C, A, M;\n  var LatRad = degToRad(Lat);\n  var LongRad = degToRad(Long);\n  var LongOriginRad;\n  var ZoneNumber;\n  // (int)\n  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n  //Make sure the longitude 180.00 is in Zone 60\n  if (Long === 180) {\n    ZoneNumber = 60;\n  }\n\n  // Special zone for Norway\n  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n    ZoneNumber = 32;\n  }\n\n  // Special zones for Svalbard\n  if (Lat >= 72.0 && Lat < 84.0) {\n    if (Long >= 0.0 && Long < 9.0) {\n      ZoneNumber = 31;\n    }\n    else if (Long >= 9.0 && Long < 21.0) {\n      ZoneNumber = 33;\n    }\n    else if (Long >= 21.0 && Long < 33.0) {\n      ZoneNumber = 35;\n    }\n    else if (Long >= 33.0 && Long < 42.0) {\n      ZoneNumber = 37;\n    }\n  }\n\n  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n  // in middle of\n  // zone\n  LongOriginRad = degToRad(LongOrigin);\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n  T = Math.tan(LatRad) * Math.tan(LatRad);\n  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n  if (Lat < 0.0) {\n    UTMNorthing += 10000000.0; //10000000 meter offset for\n    // southern hemisphere\n  }\n\n  return {\n    northing: Math.round(UTMNorthing),\n    easting: Math.round(UTMEasting),\n    zoneNumber: ZoneNumber,\n    zoneLetter: getLetterDesignator(Lat)\n  };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n *     and zoneLetter properties. If an optional accuracy property is\n *     provided (in meters), a bounding box will be returned instead of\n *     latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n *     (if no accuracy was provided), or top, right, bottom and left values\n *     for the bounding box calculated according to the provided accuracy.\n *     Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n  var UTMNorthing = utm.northing;\n  var UTMEasting = utm.easting;\n  var zoneLetter = utm.zoneLetter;\n  var zoneNumber = utm.zoneNumber;\n  // check the ZoneNummber is valid\n  if (zoneNumber < 0 || zoneNumber > 60) {\n    return null;\n  }\n\n  var k0 = 0.9996;\n  var a = 6378137.0; //ellip.radius;\n  var eccSquared = 0.00669438; //ellip.eccsq;\n  var eccPrimeSquared;\n  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n  var N1, T1, C1, R1, D, M;\n  var LongOrigin;\n  var mu, phi1Rad;\n\n  // remove 500,000 meter offset for longitude\n  var x = UTMEasting - 500000.0;\n  var y = UTMNorthing;\n\n  // We must know somehow if we are in the Northern or Southern\n  // hemisphere, this is the only time we use the letter So even\n  // if the Zone letter isn't exactly correct it should indicate\n  // the hemisphere correctly\n  if (zoneLetter < 'N') {\n    y -= 10000000.0; // remove 10,000,000 meter offset used\n    // for southern hemisphere\n  }\n\n  // There are 60 zones with zone 1 being at West -180 to -174\n  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n  // in middle of\n  // zone\n\n  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n  M = y / k0;\n  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n  D = x / (N1 * k0);\n\n  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n  lat = radToDeg(lat);\n\n  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n  lon = LongOrigin + radToDeg(lon);\n\n  var result;\n  if (utm.accuracy) {\n    var topRight = UTMtoLL({\n      northing: utm.northing + utm.accuracy,\n      easting: utm.easting + utm.accuracy,\n      zoneLetter: utm.zoneLetter,\n      zoneNumber: utm.zoneNumber\n    });\n    result = {\n      top: topRight.lat,\n      right: topRight.lon,\n      bottom: lat,\n      left: lon\n    };\n  }\n  else {\n    result = {\n      lat: lat,\n      lon: lon\n    };\n  }\n  return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n *     for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n  //This is here as an error flag to show that the Latitude is\n  //outside MGRS limits\n  var LetterDesignator = 'Z';\n\n  if ((84 >= lat) && (lat >= 72)) {\n    LetterDesignator = 'X';\n  }\n  else if ((72 > lat) && (lat >= 64)) {\n    LetterDesignator = 'W';\n  }\n  else if ((64 > lat) && (lat >= 56)) {\n    LetterDesignator = 'V';\n  }\n  else if ((56 > lat) && (lat >= 48)) {\n    LetterDesignator = 'U';\n  }\n  else if ((48 > lat) && (lat >= 40)) {\n    LetterDesignator = 'T';\n  }\n  else if ((40 > lat) && (lat >= 32)) {\n    LetterDesignator = 'S';\n  }\n  else if ((32 > lat) && (lat >= 24)) {\n    LetterDesignator = 'R';\n  }\n  else if ((24 > lat) && (lat >= 16)) {\n    LetterDesignator = 'Q';\n  }\n  else if ((16 > lat) && (lat >= 8)) {\n    LetterDesignator = 'P';\n  }\n  else if ((8 > lat) && (lat >= 0)) {\n    LetterDesignator = 'N';\n  }\n  else if ((0 > lat) && (lat >= -8)) {\n    LetterDesignator = 'M';\n  }\n  else if ((-8 > lat) && (lat >= -16)) {\n    LetterDesignator = 'L';\n  }\n  else if ((-16 > lat) && (lat >= -24)) {\n    LetterDesignator = 'K';\n  }\n  else if ((-24 > lat) && (lat >= -32)) {\n    LetterDesignator = 'J';\n  }\n  else if ((-32 > lat) && (lat >= -40)) {\n    LetterDesignator = 'H';\n  }\n  else if ((-40 > lat) && (lat >= -48)) {\n    LetterDesignator = 'G';\n  }\n  else if ((-48 > lat) && (lat >= -56)) {\n    LetterDesignator = 'F';\n  }\n  else if ((-56 > lat) && (lat >= -64)) {\n    LetterDesignator = 'E';\n  }\n  else if ((-64 > lat) && (lat >= -72)) {\n    LetterDesignator = 'D';\n  }\n  else if ((-72 > lat) && (lat >= -80)) {\n    LetterDesignator = 'C';\n  }\n  return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n *     zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n  // prepend with leading zeroes\n  var seasting = \"00000\" + utm.easting,\n    snorthing = \"00000\" + utm.northing;\n\n  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n  var setParm = get100kSetForZone(zoneNumber);\n  var setColumn = Math.floor(easting / 100000);\n  var setRow = Math.floor(northing / 100000) % 20;\n  return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n  var setParm = i % NUM_100K_SETS;\n  if (setParm === 0) {\n    setParm = NUM_100K_SETS;\n  }\n\n  return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n *        100k set spreadsheet, created from the UTM easting.\n *        Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM northing value. Values\n *        are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n *        spreadsheet, created from the UTM zone. Values are from\n *        1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n  // colOrigin and rowOrigin are the letters at the origin of the set\n  var index = parm - 1;\n  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n  // colInt and rowInt are the letters to build to return\n  var colInt = colOrigin + column - 1;\n  var rowInt = rowOrigin + row;\n  var rollover = false;\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n    rollover = true;\n  }\n\n  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n    colInt++;\n  }\n\n  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n    colInt++;\n\n    if (colInt === I) {\n      colInt++;\n    }\n  }\n\n  if (colInt > Z) {\n    colInt = colInt - Z + A - 1;\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n    rollover = true;\n  }\n  else {\n    rollover = false;\n  }\n\n  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n    rowInt++;\n  }\n\n  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n    rowInt++;\n\n    if (rowInt === I) {\n      rowInt++;\n    }\n  }\n\n  if (rowInt > V) {\n    rowInt = rowInt - V + A - 1;\n  }\n\n  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n  return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n *     zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n  if (mgrsString && mgrsString.length === 0) {\n    throw (\"MGRSPoint coverting from nothing\");\n  }\n\n  var length = mgrsString.length;\n\n  var hunK = null;\n  var sb = \"\";\n  var testChar;\n  var i = 0;\n\n  // get Zone number\n  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n    if (i >= 2) {\n      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n    }\n    sb += testChar;\n    i++;\n  }\n\n  var zoneNumber = parseInt(sb, 10);\n\n  if (i === 0 || i + 3 > length) {\n    // A good MGRS string has to be 4-5 digits long,\n    // ##AAA/#AAA at least.\n    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n  }\n\n  var zoneLetter = mgrsString.charAt(i++);\n\n  // Should we check the zone letter here? Why not.\n  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n  }\n\n  hunK = mgrsString.substring(i, i += 2);\n\n  var set = get100kSetForZone(zoneNumber);\n\n  var east100k = getEastingFromChar(hunK.charAt(0), set);\n  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n  // We have a bug where the northing may be 2000000 too low.\n  // How\n  // do we know when to roll over?\n\n  while (north100k < getMinNorthing(zoneLetter)) {\n    north100k += 2000000;\n  }\n\n  // calculate the char index for easting/northing separator\n  var remainder = length - i;\n\n  if (remainder % 2 !== 0) {\n    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n  }\n\n  var sep = remainder / 2;\n\n  var sepEasting = 0.0;\n  var sepNorthing = 0.0;\n  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n  if (sep > 0) {\n    accuracyBonus = 100000.0 / Math.pow(10, sep);\n    sepEastingString = mgrsString.substring(i, i + sep);\n    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n    sepNorthingString = mgrsString.substring(i + sep);\n    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n  }\n\n  easting = sepEasting + east100k;\n  northing = sepNorthing + north100k;\n\n  return {\n    easting: easting,\n    northing: northing,\n    zoneLetter: zoneLetter,\n    zoneNumber: zoneNumber,\n    accuracy: accuracyBonus\n  };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n  // colOrigin is the letter at the origin of the set for the\n  // column\n  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n  var eastingValue = 100000.0;\n  var rewindMarker = false;\n\n  while (curCol !== e.charCodeAt(0)) {\n    curCol++;\n    if (curCol === I) {\n      curCol++;\n    }\n    if (curCol === O) {\n      curCol++;\n    }\n    if (curCol > Z) {\n      if (rewindMarker) {\n        throw (\"Bad character: \" + e);\n      }\n      curCol = A;\n      rewindMarker = true;\n    }\n    eastingValue += 100000.0;\n  }\n\n  return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n *     UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n  if (n > 'V') {\n    throw (\"MGRSPoint given invalid Northing \" + n);\n  }\n\n  // rowOrigin is the letter at the origin of the set for the\n  // column\n  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n  var northingValue = 0.0;\n  var rewindMarker = false;\n\n  while (curRow !== n.charCodeAt(0)) {\n    curRow++;\n    if (curRow === I) {\n      curRow++;\n    }\n    if (curRow === O) {\n      curRow++;\n    }\n    // fixing a bug making whole application hang in this loop\n    // when 'n' is a wrong character\n    if (curRow > V) {\n      if (rewindMarker) { // making sure that this loop ends\n        throw (\"Bad character: \" + n);\n      }\n      curRow = A;\n      rewindMarker = true;\n    }\n    northingValue += 100000.0;\n  }\n\n  return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n  var northing;\n  switch (zoneLetter) {\n  case 'C':\n    northing = 1100000.0;\n    break;\n  case 'D':\n    northing = 2000000.0;\n    break;\n  case 'E':\n    northing = 2800000.0;\n    break;\n  case 'F':\n    northing = 3700000.0;\n    break;\n  case 'G':\n    northing = 4600000.0;\n    break;\n  case 'H':\n    northing = 5500000.0;\n    break;\n  case 'J':\n    northing = 6400000.0;\n    break;\n  case 'K':\n    northing = 7300000.0;\n    break;\n  case 'L':\n    northing = 8200000.0;\n    break;\n  case 'M':\n    northing = 9100000.0;\n    break;\n  case 'N':\n    northing = 0.0;\n    break;\n  case 'P':\n    northing = 800000.0;\n    break;\n  case 'Q':\n    northing = 1700000.0;\n    break;\n  case 'R':\n    northing = 2600000.0;\n    break;\n  case 'S':\n    northing = 3500000.0;\n    break;\n  case 'T':\n    northing = 4400000.0;\n    break;\n  case 'U':\n    northing = 5300000.0;\n    break;\n  case 'V':\n    northing = 6200000.0;\n    break;\n  case 'W':\n    northing = 7000000.0;\n    break;\n  case 'X':\n    northing = 7900000.0;\n    break;\n  default:\n    northing = -1.0;\n  }\n  if (northing >= 0.0) {\n    return northing;\n  }\n  else {\n    throw (\"Invalid zone letter: \" + zoneLetter);\n  }\n\n}\n","import { toPoint, forward } from 'mgrs';\n\n/**\n * @deprecated v3.0.0 - use proj4.toPoint instead\n * @param {number | import('./core').TemplateCoordinates | string} x\n * @param {number} [y]\n * @param {number} [z]\n */\nfunction Point(x, y, z) {\n  if (!(this instanceof Point)) {\n    return new Point(x, y, z);\n  }\n  if (Array.isArray(x)) {\n    this.x = x[0];\n    this.y = x[1];\n    this.z = x[2] || 0.0;\n  } else if (typeof x === 'object') {\n    this.x = x.x;\n    this.y = x.y;\n    this.z = x.z || 0.0;\n  } else if (typeof x === 'string' && typeof y === 'undefined') {\n    var coords = x.split(',');\n    this.x = parseFloat(coords[0]);\n    this.y = parseFloat(coords[1]);\n    this.z = parseFloat(coords[2]) || 0.0;\n  } else {\n    this.x = x;\n    this.y = y;\n    this.z = z || 0.0;\n  }\n  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function (mgrsStr) {\n  return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function (accuracy) {\n  return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function (es) {\n  var en = [];\n  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n  var t = es * es;\n  en[2] = t * (C44 - es * (C46 + es * C48));\n  t *= es;\n  en[3] = t * (C66 - es * C68);\n  en[4] = t * es * C88;\n  return en;\n}\n","export default function (phi, sphi, cphi, en) {\n  cphi *= sphi;\n  sphi *= sphi;\n  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}\n","import pj_mlfn from './pj_mlfn';\nimport { EPSLN } from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function (arg, es, en) {\n  var k = 1 / (1 - es);\n  var phi = arg;\n  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n    var s = Math.sin(phi);\n    var t = 1 - es * s * s;\n    // t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n    // phi -= t * (t * Math.sqrt(t)) * k;\n    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n    phi -= t;\n    if (Math.abs(t) < EPSLN) {\n      return phi;\n    }\n  }\n  // ..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n  return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport { EPSLN, HALF_PI } from '../constants/values';\nimport sign from '../common/sign';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {Array<number>} en\n * @property {number} ml0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  if (this.es) {\n    this.en = pj_enfn(this.es);\n    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n  }\n}\n\n/**\n    Transverse Mercator Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0, this.over);\n  var con;\n  var x, y;\n  var sin_phi = Math.sin(lat);\n  var cos_phi = Math.cos(lat);\n\n  if (!this.es) {\n    var b = cos_phi * Math.sin(delta_lon);\n\n    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n      return (93);\n    } else {\n      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n      b = Math.abs(y);\n\n      if (b >= 1) {\n        if ((b - 1) > EPSLN) {\n          return (93);\n        } else {\n          y = 0;\n        }\n      } else {\n        y = Math.acos(y);\n      }\n\n      if (lat < 0) {\n        y = -y;\n      }\n\n      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n    }\n  } else {\n    var al = cos_phi * delta_lon;\n    var als = Math.pow(al, 2);\n    var c = this.ep2 * Math.pow(cos_phi, 2);\n    var cs = Math.pow(c, 2);\n    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n    var t = Math.pow(tq, 2);\n    var ts = Math.pow(t, 2);\n    con = 1 - this.es * Math.pow(sin_phi, 2);\n    al = al / Math.sqrt(con);\n    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n    x = this.a * (this.k0 * al * (1\n      + als / 6 * (1 - t + c\n        + als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c\n          + als / 42 * (61 + 179 * ts - ts * t - 479 * t)))))\n        + this.x0;\n\n    y = this.a * (this.k0 * (ml - this.ml0\n      + sin_phi * delta_lon * al / 2 * (1\n        + als / 12 * (5 - t + 9 * c + 4 * cs\n          + als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c\n            + als / 56 * (1385 + 543 * ts - ts * t - 3111 * t))))))\n          + this.y0;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\n/**\n    Transverse Mercator Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var con, phi;\n  var lat, lon;\n  var x = (p.x - this.x0) * (1 / this.a);\n  var y = (p.y - this.y0) * (1 / this.a);\n\n  if (!this.es) {\n    var f = Math.exp(x / this.k0);\n    var g = 0.5 * (f - 1 / f);\n    var temp = this.lat0 + y / this.k0;\n    var h = Math.cos(temp);\n    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n    lat = Math.asin(con);\n\n    if (y < 0) {\n      lat = -lat;\n    }\n\n    if ((g === 0) && (h === 0)) {\n      lon = 0;\n    } else {\n      lon = adjust_lon(Math.atan2(g, h) + this.long0, this.over);\n    }\n  } else { // ellipsoidal form\n    con = this.ml0 + y / this.k0;\n    phi = pj_inv_mlfn(con, this.es, this.en);\n\n    if (Math.abs(phi) < HALF_PI) {\n      var sin_phi = Math.sin(phi);\n      var cos_phi = Math.cos(phi);\n      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n      var c = this.ep2 * Math.pow(cos_phi, 2);\n      var cs = Math.pow(c, 2);\n      var t = Math.pow(tan_phi, 2);\n      var ts = Math.pow(t, 2);\n      con = 1 - this.es * Math.pow(sin_phi, 2);\n      var d = x * Math.sqrt(con) / this.k0;\n      var ds = Math.pow(d, 2);\n      con = con * tan_phi;\n\n      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1\n        - ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs\n          - ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c\n            - ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n      lon = adjust_lon(this.long0 + (d * (1\n        - ds / 6 * (1 + 2 * t + c\n          - ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c\n            - ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi), this.over);\n    } else {\n      lat = HALF_PI * sign(y);\n      lon = 0;\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = ['Fast_Transverse_Mercator', 'Fast Transverse Mercator'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function (x) {\n  var r = Math.exp(x);\n  r = (r - 1 / r) / 2;\n  return r;\n}\n","export default function (x, y) {\n  x = Math.abs(x);\n  y = Math.abs(y);\n  var a = Math.max(x, y);\n  var b = Math.min(x, y) / (a ? a : 1);\n\n  return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","export default function (pp, B) {\n  var cos_2B = 2 * Math.cos(2 * B);\n  var i = pp.length - 1;\n  var h1 = pp[i];\n  var h2 = 0;\n  var h;\n\n  while (--i >= 0) {\n    h = -h2 + cos_2B * h1 + pp[i];\n    h2 = h1;\n    h1 = h;\n  }\n\n  return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function (pp, arg_r, arg_i) {\n  var sin_arg_r = Math.sin(arg_r);\n  var cos_arg_r = Math.cos(arg_r);\n  var sinh_arg_i = sinh(arg_i);\n  var cosh_arg_i = cosh(arg_i);\n  var r = 2 * cos_arg_r * cosh_arg_i;\n  var i = -2 * sin_arg_r * sinh_arg_i;\n  var j = pp.length - 1;\n  var hr = pp[j];\n  var hi1 = 0;\n  var hr1 = 0;\n  var hi = 0;\n  var hr2;\n  var hi2;\n\n  while (--j >= 0) {\n    hr2 = hr1;\n    hi2 = hi1;\n    hr1 = hr;\n    hi1 = hi;\n    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n    hi = -hi2 + i * hr1 + r * hi1;\n  }\n\n  r = sin_arg_r * cosh_arg_i;\n  i = cos_arg_r * sinh_arg_i;\n\n  return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function (x) {\n  var r = Math.exp(x);\n  r = (r + 1 / r) / 2;\n  return r;\n}\n","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport tmerc from '../projections/tmerc';\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {Array<number>} cbg\n * @property {Array<number>} cgb\n * @property {Array<number>} utg\n * @property {Array<number>} gtu\n * @property {number} Qn\n * @property {number} Zb\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  if (!this.approx && (isNaN(this.es) || this.es <= 0)) {\n    throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION[\"Fast_Transverse_Mercator\"] in the WKT.');\n  }\n  if (this.approx) {\n    // When '+approx' is set, use tmerc instead\n    tmerc.init.apply(this);\n    this.forward = tmerc.forward;\n    this.inverse = tmerc.inverse;\n  }\n\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n  this.cgb = [];\n  this.cbg = [];\n  this.utg = [];\n  this.gtu = [];\n\n  var f = this.es / (1 + Math.sqrt(1 - this.es));\n  var n = f / (2 - f);\n  var np = n;\n\n  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675))))));\n  this.cbg[0] = n * (-2 + n * (2 / 3 + n * (4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n  np = np * n;\n  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * (-13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n  np = np * n;\n  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n  np = np * n;\n  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * (-24832 / 14175)));\n\n  np = np * n;\n  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n  np = np * n;\n  this.cgb[5] = np * (601676 / 22275);\n  this.cbg[5] = np * (444337 / 155925);\n\n  np = Math.pow(n, 2);\n  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n  this.utg[0] = n * (-0.5 + n * (2 / 3 + n * (-37 / 96 + n * (1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n  np = np * n;\n  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720))));\n  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n  np = np * n;\n  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n  np = np * n;\n  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n  np = np * n;\n  this.utg[5] = np * (-20648693 / 638668800);\n  this.gtu[5] = np * (212378941 / 319334400);\n\n  var Z = gatg(this.cbg, this.lat0);\n  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n  var Ce = adjust_lon(p.x - this.long0, this.over);\n  var Cn = p.y;\n\n  Cn = gatg(this.cbg, Cn);\n  var sin_Cn = Math.sin(Cn);\n  var cos_Cn = Math.cos(Cn);\n  var sin_Ce = Math.sin(Ce);\n  var cos_Ce = Math.cos(Ce);\n\n  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n  Ce = asinhy(Math.tan(Ce));\n\n  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n  Cn = Cn + tmp[0];\n  Ce = Ce + tmp[1];\n\n  var x;\n  var y;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    x = this.a * (this.Qn * Ce) + this.x0;\n    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n  } else {\n    x = Infinity;\n    y = Infinity;\n  }\n\n  p.x = x;\n  p.y = y;\n\n  return p;\n}\n\nexport function inverse(p) {\n  var Ce = (p.x - this.x0) * (1 / this.a);\n  var Cn = (p.y - this.y0) * (1 / this.a);\n\n  Cn = (Cn - this.Zb) / this.Qn;\n  Ce = Ce / this.Qn;\n\n  var lon;\n  var lat;\n\n  if (Math.abs(Ce) <= 2.623395162778) {\n    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n    Cn = Cn + tmp[0];\n    Ce = Ce + tmp[1];\n    Ce = Math.atan(sinh(Ce));\n\n    var sin_Cn = Math.sin(Cn);\n    var cos_Cn = Math.cos(Cn);\n    var sin_Ce = Math.sin(Ce);\n    var cos_Ce = Math.cos(Ce);\n\n    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n    lon = adjust_lon(Ce + this.long0, this.over);\n    lat = gatg(this.cgb, Cn);\n  } else {\n    lon = Infinity;\n    lat = Infinity;\n  }\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = ['Extended_Transverse_Mercator', 'Extended Transverse Mercator', 'etmerc', 'Transverse_Mercator', 'Transverse Mercator', 'Gauss Kruger', 'Gauss_Kruger', 'tmerc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function (pp, arg_r) {\n  var r = 2 * Math.cos(arg_r);\n  var i = pp.length - 1;\n  var hr1 = pp[i];\n  var hr2 = 0;\n  var hr;\n\n  while (--i >= 0) {\n    hr = -hr2 + r * hr1 + pp[i];\n    hr2 = hr1;\n    hr1 = hr;\n  }\n\n  return Math.sin(arg_r) * hr;\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function (x) {\n  var y = Math.abs(x);\n  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n  return x < 0 ? -y : y;\n}\n","export default function (x) {\n  var y = 1 + x;\n  var z = y - 1;\n\n  return z === 0 ? x : x * Math.log(y) / z;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport { D2R } from '../constants/values';\n\n/** @this {import('../defs.js').ProjectionDefinition} */\nexport function init() {\n  var zone = adjust_zone(this.zone, this.long0);\n  if (zone === undefined) {\n    throw new Error('unknown utm zone');\n  }\n  this.lat0 = 0;\n  this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n  this.x0 = 500000;\n  this.y0 = this.utmSouth ? 10000000 : 0;\n  this.k0 = 0.9996;\n\n  etmerc.init.apply(this);\n  this.forward = etmerc.forward;\n  this.inverse = etmerc.inverse;\n}\n\nexport var names = ['Universal Transverse Mercator System', 'utm'];\nexport default {\n  init: init,\n  names: names,\n  dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function (zone, lon) {\n  if (zone === undefined) {\n    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n    if (zone < 0) {\n      return 0;\n    } else if (zone > 60) {\n      return 60;\n    }\n  }\n  return zone;\n}\n","export default function (esinp, exp) {\n  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}\n","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport { HALF_PI, FORTPI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} rc\n * @property {number} C\n * @property {number} phic0\n * @property {number} ratexp\n * @property {number} K\n * @property {number} e\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var sphi = Math.sin(this.lat0);\n  var cphi = Math.cos(this.lat0);\n  cphi *= cphi;\n  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n  this.phic0 = Math.asin(sphi / this.C);\n  this.ratexp = 0.5 * this.C * this.e;\n  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n  p.x = this.C * lon;\n  return p;\n}\n\nexport function inverse(p) {\n  var DEL_TOL = 1e-14;\n  var lon = p.x / this.C;\n  var lat = p.y;\n  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n  for (var i = MAX_ITER; i > 0; --i) {\n    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), -0.5 * this.e)) - HALF_PI;\n    if (Math.abs(lat - p.y) < DEL_TOL) {\n      break;\n    }\n    p.y = lat;\n  }\n  /* convergence failed */\n  if (!i) {\n    return null;\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['gauss'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} sinc0\n * @property {number} cosc0\n * @property {number} R2\n * @property {number} rc\n * @property {number} phic0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  gauss.init.apply(this);\n  if (!this.rc) {\n    return;\n  }\n  this.sinc0 = Math.sin(this.phic0);\n  this.cosc0 = Math.cos(this.phic0);\n  this.R2 = 2 * this.rc;\n  if (!this.title) {\n    this.title = 'Oblique Stereographic Alternative';\n  }\n}\n\nexport function forward(p) {\n  var sinc, cosc, cosl, k;\n  p.x = adjust_lon(p.x - this.long0, this.over);\n  gauss.forward.apply(this, [p]);\n  sinc = Math.sin(p.y);\n  cosc = Math.cos(p.y);\n  cosl = Math.cos(p.x);\n  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n  p.x = k * cosc * Math.sin(p.x);\n  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n  p.x = this.a * p.x + this.x0;\n  p.y = this.a * p.y + this.y0;\n  return p;\n}\n\nexport function inverse(p) {\n  var sinc, cosc, lon, lat, rho;\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n  if ((rho = hypot(p.x, p.y))) {\n    var c = 2 * Math.atan2(rho, this.R2);\n    sinc = Math.sin(c);\n    cosc = Math.cos(c);\n    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n  } else {\n    lat = this.phic0;\n    lon = 0;\n  }\n\n  p.x = lon;\n  p.y = lat;\n  gauss.inverse.apply(this, [p]);\n  p.x = adjust_lon(p.x + this.long0, this.over);\n  return p;\n}\n\nexport var names = ['Stereographic_North_Pole', 'Oblique_Stereographic', 'sterea', 'Oblique Stereographic Alternative', 'Double_Stereographic'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { EPSLN, HALF_PI } from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} coslat0\n * @property {number} sinlat0\n * @property {number} ms1\n * @property {number} X0\n * @property {number} cosX0\n * @property {number} sinX0\n * @property {number} con\n * @property {number} cons\n * @property {number} e\n */\n\nexport function ssfn_(phit, sinphi, eccen) {\n  sinphi *= eccen;\n  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  // setting default parameters\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n\n  this.coslat0 = Math.cos(this.lat0);\n  this.sinlat0 = Math.sin(this.lat0);\n  if (this.sphere) {\n    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n    }\n  } else {\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      if (this.lat0 > 0) {\n        // North pole\n        // trace('stere:north pole');\n        this.con = 1;\n      } else {\n        // South pole\n        // trace('stere:south pole');\n        this.con = -1;\n      }\n    }\n    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) {\n      // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole\n      // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987\n      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n    }\n    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n    this.X0 = 2 * Math.atan(ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n    this.cosX0 = Math.cos(this.X0);\n    this.sinX0 = Math.sin(this.X0);\n  }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinlat = Math.sin(lat);\n  var coslat = Math.cos(lat);\n  var A, X, sinX, cosX, ts, rh;\n  var dlon = adjust_lon(lon - this.long0, this.over);\n\n  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n    // case of the origine point\n    // trace('stere:this is the origin point');\n    p.x = NaN;\n    p.y = NaN;\n    return p;\n  }\n  if (this.sphere) {\n    // trace('stere:sphere case');\n    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n    return p;\n  } else {\n    X = 2 * Math.atan(ssfn_(lat, sinlat, this.e)) - HALF_PI;\n    cosX = Math.cos(X);\n    sinX = Math.sin(X);\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n      rh = 2 * this.a * this.k0 * ts / this.cons;\n      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n      // trace(p.toString());\n      return p;\n    } else if (Math.abs(this.sinlat0) < EPSLN) {\n      // Eq\n      // trace('stere:equateur');\n      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n      p.y = A * sinX;\n    } else {\n      // other case\n      // trace('stere:normal case');\n      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n    }\n    p.x = A * cosX * Math.sin(dlon) + this.x0;\n  }\n  // trace(p.toString());\n  return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat, ts, ce, Chi;\n  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  if (this.sphere) {\n    var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n    lon = this.long0;\n    lat = this.lat0;\n    if (rh <= EPSLN) {\n      p.x = lon;\n      p.y = lat;\n      return p;\n    }\n    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n    if (Math.abs(this.coslat0) < EPSLN) {\n      if (this.lat0 > 0) {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, -1 * p.y), this.over);\n      } else {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y), this.over);\n      }\n    } else {\n      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)), this.over);\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  } else {\n    if (Math.abs(this.coslat0) <= EPSLN) {\n      if (rh <= EPSLN) {\n        lat = this.lat0;\n        lon = this.long0;\n        p.x = lon;\n        p.y = lat;\n        // trace(p.toString());\n        return p;\n      }\n      p.x *= this.con;\n      p.y *= this.con;\n      ts = rh * this.cons / (2 * this.a * this.k0);\n      lat = this.con * phi2z(this.e, ts);\n      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, -1 * p.y), this.over);\n    } else {\n      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n      lon = this.long0;\n      if (rh <= EPSLN) {\n        Chi = this.X0;\n      } else {\n        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)), this.over);\n      }\n      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n\n  // trace(p.toString());\n  return p;\n}\n\nexport var names = ['stere', 'Stereographic_South_Pole', 'Polar_Stereographic_variant_A', 'Polar_Stereographic_variant_B', 'Polar_Stereographic'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  ssfn_: ssfn_\n};\n","/*\n  references:\n    Formules et constantes pour le Calcul pour la\n    projection cylindrique conforme à axe oblique et pour la transformation entre\n    des systèmes de référence.\n    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n  */\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} lambda0\n * @property {number} e\n * @property {number} R\n * @property {number} b0\n * @property {number} K\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var phy0 = this.lat0;\n  this.lambda0 = this.long0;\n  var sinPhy0 = Math.sin(phy0);\n  var semiMajorAxis = this.a;\n  var invF = this.rf;\n  var flattening = 1 / invF;\n  var e2 = 2 * flattening - Math.pow(flattening, 2);\n  var e = this.e = Math.sqrt(e2);\n  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n  this.b0 = Math.asin(sinPhy0 / this.alpha);\n  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n  // spheric latitude\n  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n  // spheric longitude\n  var I = this.alpha * (p.x - this.lambda0);\n\n  // psoeudo equatorial rotation\n  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n  p.x = this.R * rotI + this.x0;\n  return p;\n}\n\nexport function inverse(p) {\n  var Y = p.x - this.x0;\n  var X = p.y - this.y0;\n\n  var rotI = Y / this.R;\n  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n  var lambda = this.lambda0 + I / this.alpha;\n\n  var S = 0;\n  var phy = b;\n  var prevPhy = -1000;\n  var iteration = 0;\n  while (Math.abs(phy - prevPhy) > 0.0000001) {\n    if (++iteration > 20) {\n      // ...reportError(\"omercFwdInfinity\");\n      return;\n    }\n    // S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n    prevPhy = phy;\n    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n  }\n\n  p.x = lambda;\n  p.y = phy;\n  return p;\n}\n\nexport var names = ['somerc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { EPSLN, HALF_PI, TWO_PI, FORTPI } from '../constants/values';\nimport { getNormalizedProjName } from '../projections';\n\n/**\n * @typedef {Object} LocalThis\n * @property {boolean} no_off\n * @property {boolean} no_rot\n * @property {number} rectified_grid_angle\n * @property {number} es\n * @property {number} A\n * @property {number} B\n * @property {number} E\n * @property {number} e\n * @property {number} lam0\n * @property {number} singam\n * @property {number} cosgam\n * @property {number} sinrot\n * @property {number} cosrot\n * @property {number} rB\n * @property {number} ArB\n * @property {number} BrA\n * @property {number} u_0\n * @property {number} v_pole_n\n * @property {number} v_pole_s\n */\n\nvar TOL = 1e-7;\n\nfunction isTypeA(P) {\n  var typeAProjections = ['Hotine_Oblique_Mercator', 'Hotine_Oblique_Mercator_variant_A', 'Hotine_Oblique_Mercator_Azimuth_Natural_Origin'];\n  var projectionName = typeof P.projName === 'object' ? Object.keys(P.projName)[0] : P.projName;\n\n  return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1 || typeAProjections.indexOf(getNormalizedProjName(projectionName)) !== -1;\n}\n\n/**\n * Initialize the Oblique Mercator  projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0,\n    gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0;\n\n  // only Type A uses the no_off or no_uoff property\n  // https://github.com/OSGeo/proj.4/issues/104\n  this.no_off = isTypeA(this);\n  this.no_rot = 'no_rot' in this;\n\n  var alp = false;\n  if ('alpha' in this) {\n    alp = true;\n  }\n\n  var gam = false;\n  if ('rectified_grid_angle' in this) {\n    gam = true;\n  }\n\n  if (alp) {\n    alpha_c = this.alpha;\n  }\n\n  if (gam) {\n    gamma = this.rectified_grid_angle;\n    if (!alp) {\n      alpha_c = 0;\n      alp = true;\n    }\n  }\n\n  if (alp || gam) {\n    lamc = this.longc;\n  } else {\n    lam1 = this.long1;\n    phi1 = this.lat1;\n    lam2 = this.long2;\n    phi2 = this.lat2;\n\n    if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL\n      || Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL\n      || Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) {\n      throw new Error();\n    }\n  }\n\n  var one_es = 1.0 - this.es;\n  com = Math.sqrt(one_es);\n\n  if (Math.abs(this.lat0) > EPSLN) {\n    sinph0 = Math.sin(this.lat0);\n    cosph0 = Math.cos(this.lat0);\n    con = 1 - this.es * sinph0 * sinph0;\n    this.B = cosph0 * cosph0;\n    this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es);\n    this.A = this.B * this.k0 * com / con;\n    D = this.B * com / (cosph0 * Math.sqrt(con));\n    F = D * D - 1;\n\n    if (F <= 0) {\n      F = 0;\n    } else {\n      F = Math.sqrt(F);\n      if (this.lat0 < 0) {\n        F = -F;\n      }\n    }\n\n    this.E = F += D;\n    this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B);\n  } else {\n    this.B = 1 / com;\n    this.A = this.k0;\n    this.E = D = F = 1;\n  }\n\n  if (alp || gam) {\n    if (alp) {\n      gamma0 = Math.asin(Math.sin(alpha_c) / D);\n      if (!gam) {\n        gamma = alpha_c;\n      }\n    } else {\n      gamma0 = gamma;\n      alpha_c = Math.asin(D * Math.sin(gamma0));\n    }\n    this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B;\n  } else {\n    H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B);\n    L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B);\n    F = this.E / H;\n    p = (L - H) / (L + H);\n    J = this.E * this.E;\n    J = (J - L * H) / (J + L * H);\n    con = lam1 - lam2;\n\n    if (con < -Math.PI) {\n      lam2 -= TWO_PI;\n    } else if (con > Math.PI) {\n      lam2 += TWO_PI;\n    }\n\n    this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B, this.over);\n    gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0, this.over)) / (F - 1 / F));\n    gamma = alpha_c = Math.asin(D * Math.sin(gamma0));\n  }\n\n  this.singam = Math.sin(gamma0);\n  this.cosgam = Math.cos(gamma0);\n  this.sinrot = Math.sin(gamma);\n  this.cosrot = Math.cos(gamma);\n\n  this.rB = 1 / this.B;\n  this.ArB = this.A * this.rB;\n  this.BrA = 1 / this.ArB;\n\n  if (this.no_off) {\n    this.u_0 = 0;\n  } else {\n    this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c)));\n\n    if (this.lat0 < 0) {\n      this.u_0 = -this.u_0;\n    }\n  }\n\n  F = 0.5 * gamma0;\n  this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F));\n  this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F));\n}\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n    ---------------------------------------------------------- */\nexport function forward(p) {\n  var coords = {};\n  var S, T, U, V, W, temp, u, v;\n  p.x = p.x - this.lam0;\n\n  if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) {\n    W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B);\n\n    temp = 1 / W;\n    S = 0.5 * (W - temp);\n    T = 0.5 * (W + temp);\n    V = Math.sin(this.B * p.x);\n    U = (S * this.singam - V * this.cosgam) / T;\n\n    if (Math.abs(Math.abs(U) - 1.0) < EPSLN) {\n      throw new Error();\n    }\n\n    v = 0.5 * this.ArB * Math.log((1 - U) / (1 + U));\n    temp = Math.cos(this.B * p.x);\n\n    if (Math.abs(temp) < TOL) {\n      u = this.A * p.x;\n    } else {\n      u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp);\n    }\n  } else {\n    v = p.y > 0 ? this.v_pole_n : this.v_pole_s;\n    u = this.ArB * p.y;\n  }\n\n  if (this.no_rot) {\n    coords.x = u;\n    coords.y = v;\n  } else {\n    u -= this.u_0;\n    coords.x = v * this.cosrot + u * this.sinrot;\n    coords.y = u * this.cosrot - v * this.sinrot;\n  }\n\n  coords.x = (this.a * coords.x + this.x0);\n  coords.y = (this.a * coords.y + this.y0);\n\n  return coords;\n}\n\nexport function inverse(p) {\n  var u, v, Qp, Sp, Tp, Vp, Up;\n  var coords = {};\n\n  p.x = (p.x - this.x0) * (1.0 / this.a);\n  p.y = (p.y - this.y0) * (1.0 / this.a);\n\n  if (this.no_rot) {\n    v = p.y;\n    u = p.x;\n  } else {\n    v = p.x * this.cosrot - p.y * this.sinrot;\n    u = p.y * this.cosrot + p.x * this.sinrot + this.u_0;\n  }\n\n  Qp = Math.exp(-this.BrA * v);\n  Sp = 0.5 * (Qp - 1 / Qp);\n  Tp = 0.5 * (Qp + 1 / Qp);\n  Vp = Math.sin(this.BrA * u);\n  Up = (Vp * this.cosgam + Sp * this.singam) / Tp;\n\n  if (Math.abs(Math.abs(Up) - 1) < EPSLN) {\n    coords.x = 0;\n    coords.y = Up < 0 ? -HALF_PI : HALF_PI;\n  } else {\n    coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up));\n    coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B));\n\n    if (coords.y === Infinity) {\n      throw new Error();\n    }\n\n    coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u));\n  }\n\n  coords.x += this.lam0;\n\n  return coords;\n}\n\nexport var names = ['Hotine_Oblique_Mercator', 'Hotine Oblique Mercator', 'Hotine_Oblique_Mercator_variant_A', 'Hotine_Oblique_Mercator_Variant_B', 'Hotine_Oblique_Mercator_Azimuth_Natural_Origin', 'Hotine_Oblique_Mercator_Two_Point_Natural_Origin', 'Hotine_Oblique_Mercator_Azimuth_Center', 'Oblique_Mercator', 'omerc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport { HALF_PI, EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} e\n * @property {number} ns\n * @property {number} f0\n * @property {number} rh\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  // double lat0;                    /* the reference latitude               */\n  // double long0;                   /* the reference longitude              */\n  // double lat1;                    /* first standard parallel              */\n  // double lat2;                    /* second standard parallel             */\n  // double r_maj;                   /* major axis                           */\n  // double r_min;                   /* minor axis                           */\n  // double false_east;              /* x offset in meters                   */\n  // double false_north;             /* y offset in meters                   */\n\n  // the above value can be set with proj4.defs\n  // example: proj4.defs(\"EPSG:2154\",\"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\n\n  if (!this.lat2) {\n    this.lat2 = this.lat1;\n  } // if lat2 is not defined\n  if (!this.k0) {\n    this.k0 = 1;\n  }\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n\n  var temp = this.b / this.a;\n  this.e = Math.sqrt(1 - temp * temp);\n\n  var sin1 = Math.sin(this.lat1);\n  var cos1 = Math.cos(this.lat1);\n  var ms1 = msfnz(this.e, sin1, cos1);\n  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n  var sin2 = Math.sin(this.lat2);\n  var cos2 = Math.cos(this.lat2);\n  var ms2 = msfnz(this.e, sin2, cos2);\n  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n  var ts0 = Math.abs(Math.abs(this.lat0) - HALF_PI) < EPSLN\n    ? 0 // Handle poles by setting ts0 to 0\n    : tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n  } else {\n    this.ns = sin1;\n  }\n  if (isNaN(this.ns)) {\n    this.ns = sin1;\n  }\n  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n  if (!this.title) {\n    this.title = 'Lambert Conformal Conic';\n  }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  // singular cases :\n  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n  }\n\n  var con = Math.abs(Math.abs(lat) - HALF_PI);\n  var ts, rh1;\n  if (con > EPSLN) {\n    ts = tsfnz(this.e, lat, Math.sin(lat));\n    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n  } else {\n    con = lat * this.ns;\n    if (con <= 0) {\n      return null;\n    }\n    rh1 = 0;\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0, this.over);\n  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n  return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var rh1, con, ts;\n  var lat, lon;\n  var x = (p.x - this.x0) / this.k0;\n  var y = (this.rh - (p.y - this.y0) / this.k0);\n  if (this.ns > 0) {\n    rh1 = Math.sqrt(x * x + y * y);\n    con = 1;\n  } else {\n    rh1 = -Math.sqrt(x * x + y * y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2((con * x), (con * y));\n  }\n  if ((rh1 !== 0) || (this.ns > 0)) {\n    con = 1 / this.ns;\n    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n    lat = phi2z(this.e, ts);\n    if (lat === -9999) {\n      return null;\n    }\n  } else {\n    lat = -HALF_PI;\n  }\n  lon = adjust_lon(theta / this.ns + this.long0, this.over);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = [\n  'Lambert Tangential Conformal Conic Projection',\n  'Lambert_Conformal_Conic',\n  'Lambert_Conformal_Conic_1SP',\n  'Lambert_Conformal_Conic_2SP',\n  'lcc',\n  'Lambert Conic Conformal (1SP)',\n  'Lambert Conic Conformal (2SP)'\n];\n\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n  this.a = 6377397.155;\n  this.es = 0.006674372230614;\n  this.e = Math.sqrt(this.es);\n  if (!this.lat0) {\n    this.lat0 = 0.863937979737193;\n  }\n  if (!this.long0) {\n    this.long0 = 0.7417649320975901 - 0.308341501185665; // 42.5° from Ferro = 24.833° from Greenwich\n  }\n  /* if scale not set default to 0.9999 */\n  if (!this.k0) {\n    this.k0 = 0.9999;\n  }\n  this.s45 = 0.785398163397448; /* 45 */\n  this.s90 = 2 * this.s45;\n  this.fi0 = this.lat0;\n  this.e2 = this.es;\n  this.e = Math.sqrt(this.e2);\n  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n  this.uq = 1.04216856380474;\n  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n  this.k1 = this.k0;\n  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n  this.s0 = 1.37008346281555;\n  this.n = Math.sin(this.s0);\n  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n  this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n  var gfi, u, deltav, s, d, eps, ro;\n  var lon = p.x;\n  var lat = p.y;\n  var delta_lon = adjust_lon(lon - this.long0, this.over);\n  /* Transformation */\n  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n  deltav = -delta_lon * this.alfa;\n  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n  eps = this.n * d;\n  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n  p.y = ro * Math.cos(eps) / 1;\n  p.x = ro * Math.sin(eps) / 1;\n\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n  var u, deltav, s, d, eps, ro, fi1;\n  var ok;\n\n  /* Transformation */\n  /* revert y, x */\n  var tmp = p.x;\n  p.x = p.y;\n  p.y = tmp;\n  if (!this.czech) {\n    p.y *= -1;\n    p.x *= -1;\n  }\n  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n  eps = Math.atan2(p.y, p.x);\n  d = eps / Math.sin(this.s0);\n  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n  p.x = this.long0 - deltav / this.alfa;\n  fi1 = u;\n  ok = 0;\n  var iter = 0;\n  do {\n    p.y = 2 * (Math.atan(Math.pow(this.k, -1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n      ok = 1;\n    }\n    fi1 = p.y;\n    iter += 1;\n  } while (ok === 0 && iter < 15);\n  if (iter >= 15) {\n    return null;\n  }\n\n  return (p);\n}\n\nexport var names = ['Krovak', 'Krovak Modified', 'Krovak (North Orientated)', 'Krovak Modified (North Orientated)', 'krovak'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function (e0, e1, e2, e3, phi) {\n  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}\n","export default function (x) {\n  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}\n","export default function (x) {\n  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}\n","export default function (x) {\n  return (0.05859375 * x * x * (1 + 0.75 * x));\n}\n","export default function (x) {\n  return (x * x * x * (35 / 3072));\n}\n","export default function (a, e, sinphi) {\n  var temp = e * sinphi;\n  return a / Math.sqrt(1 - temp * temp);\n}\n","import { HALF_PI } from '../constants/values';\nimport sign from './sign';\n\nexport default function (x) {\n  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function (ml, e0, e1, e2, e3) {\n  var phi;\n  var dphi;\n\n  phi = ml / e0;\n  for (var i = 0; i < 15; i++) {\n    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  // ..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n  return NaN;\n}\n","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport { HALF_PI, EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} ml0\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  if (!this.sphere) {\n    this.e0 = e0fn(this.es);\n    this.e1 = e1fn(this.es);\n    this.e2 = e2fn(this.es);\n    this.e3 = e3fn(this.es);\n    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n  ----------------------------------------------------------------------- */\nexport function forward(p) {\n  /* Forward equations\n      ----------------- */\n  var x, y;\n  var lam = p.x;\n  var phi = p.y;\n  lam = adjust_lon(lam - this.long0, this.over);\n\n  if (this.sphere) {\n    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n  } else {\n    // ellipsoid\n    var sinphi = Math.sin(phi);\n    var cosphi = Math.cos(phi);\n    var nl = gN(this.a, this.e, sinphi);\n    var tl = Math.tan(phi) * Math.tan(phi);\n    var al = lam * Math.cos(phi);\n    var asq = al * al;\n    var cl = this.es * cosphi * cosphi / (1 - this.es);\n    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n  }\n\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var phi, lam;\n\n  if (this.sphere) {\n    var dd = y + this.lat0;\n    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n  } else {\n    /* ellipsoid */\n    var ml1 = this.ml0 / this.a + y;\n    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n      p.x = this.long0;\n      p.y = HALF_PI;\n      if (y < 0) {\n        p.y *= -1;\n      }\n      return p;\n    }\n    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n    var tl1 = Math.pow(Math.tan(phi1), 2);\n    var dl = x * this.a / nl1;\n    var dsq = dl * dl;\n    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n  }\n\n  p.x = adjust_lon(lam + this.long0, this.over);\n  p.y = adjust_lat(phi);\n  return p;\n}\n\nexport var names = ['Cassini', 'Cassini_Soldner', 'cass'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","export default function (eccent, sinphi) {\n  var con;\n  if (eccent > 1.0e-7) {\n    con = eccent * sinphi;\n    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n  } else {\n    return (2 * sinphi);\n  }\n}\n","var P00 = 0.33333333333333333333;\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nexport default function authset(es) {\n  var t;\n  var APA = [];\n  APA[0] = es * P00;\n  t = es * es;\n  APA[0] += t * P01;\n  APA[1] = t * P10;\n  t *= es;\n  APA[0] += t * P02;\n  APA[1] += t * P11;\n  APA[2] = t * P20;\n  return APA;\n}\n","export default function authlat(beta, APA) {\n  var t = beta + beta;\n  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n","import { HALF_PI, EPSLN, FORTPI } from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport authset from '../common/authset';\nimport authlat from '../common/authlat';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} mode\n * @property {Array<number>} apa\n * @property {number} dd\n * @property {number} e\n * @property {number} es\n * @property {number} mmf\n * @property {number} rq\n * @property {number} qp\n * @property {number} sinb1\n * @property {number} cosb1\n * @property {number} ymf\n * @property {number} xmf\n * @property {number} sinph0\n * @property {number} cosph0\n */\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\nexport var S_POLE = 1;\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/**\n * Initialize the Lambert Azimuthal Equal Area projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  var t = Math.abs(this.lat0);\n  if (Math.abs(t - HALF_PI) < EPSLN) {\n    this.mode = this.lat0 < 0 ? S_POLE : N_POLE;\n  } else if (Math.abs(t) < EPSLN) {\n    this.mode = EQUIT;\n  } else {\n    this.mode = OBLIQ;\n  }\n  if (this.es > 0) {\n    var sinphi;\n\n    this.qp = qsfnz(this.e, 1);\n    this.mmf = 0.5 / (1 - this.es);\n    this.apa = authset(this.es);\n    switch (this.mode) {\n      case N_POLE:\n        this.dd = 1;\n        break;\n      case S_POLE:\n        this.dd = 1;\n        break;\n      case EQUIT:\n        this.rq = Math.sqrt(0.5 * this.qp);\n        this.dd = 1 / this.rq;\n        this.xmf = 1;\n        this.ymf = 0.5 * this.qp;\n        break;\n      case OBLIQ:\n        this.rq = Math.sqrt(0.5 * this.qp);\n        sinphi = Math.sin(this.lat0);\n        this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n        this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n        this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n        this.ymf = (this.xmf = this.rq) / this.dd;\n        this.xmf *= this.dd;\n        break;\n    }\n  } else {\n    if (this.mode === OBLIQ) {\n      this.sinph0 = Math.sin(this.lat0);\n      this.cosph0 = Math.cos(this.lat0);\n    }\n  }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n  ----------------------------------------------------------------------- */\nexport function forward(p) {\n  /* Forward equations\n      ----------------- */\n  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n  var lam = p.x;\n  var phi = p.y;\n\n  lam = adjust_lon(lam - this.long0, this.over);\n  if (this.sphere) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    coslam = Math.cos(lam);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n      if (y <= EPSLN) {\n        return null;\n      }\n      y = Math.sqrt(2 / y);\n      x = y * cosphi * Math.sin(lam);\n      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n    } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        coslam = -coslam;\n      }\n      if (Math.abs(phi + this.lat0) < EPSLN) {\n        return null;\n      }\n      y = FORTPI - phi * 0.5;\n      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n      x = y * Math.sin(lam);\n      y *= coslam;\n    }\n  } else {\n    sinb = 0;\n    cosb = 0;\n    b = 0;\n    coslam = Math.cos(lam);\n    sinlam = Math.sin(lam);\n    sinphi = Math.sin(phi);\n    q = qsfnz(this.e, sinphi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinb = q / this.qp;\n      cosb = Math.sqrt(1 - sinb * sinb);\n    }\n    switch (this.mode) {\n      case this.OBLIQ:\n        b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n        break;\n      case this.EQUIT:\n        b = 1 + cosb * coslam;\n        break;\n      case this.N_POLE:\n        b = HALF_PI + phi;\n        q = this.qp - q;\n        break;\n      case this.S_POLE:\n        b = phi - HALF_PI;\n        q = this.qp + q;\n        break;\n    }\n    if (Math.abs(b) < EPSLN) {\n      return null;\n    }\n    switch (this.mode) {\n      case this.OBLIQ:\n      case this.EQUIT:\n        b = Math.sqrt(2 / b);\n        if (this.mode === this.OBLIQ) {\n          y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n        } else {\n          y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n        }\n        x = this.xmf * b * cosb * sinlam;\n        break;\n      case this.N_POLE:\n      case this.S_POLE:\n        if (q >= 0) {\n          x = (b = Math.sqrt(q)) * sinlam;\n          y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n        } else {\n          x = y = 0;\n        }\n        break;\n    }\n  }\n\n  p.x = this.a * x + this.x0;\n  p.y = this.a * y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var x = p.x / this.a;\n  var y = p.y / this.a;\n  var lam, phi, cCe, sCe, q, rho, ab;\n  if (this.sphere) {\n    var cosz = 0,\n      rh, sinz = 0;\n\n    rh = Math.sqrt(x * x + y * y);\n    phi = rh * 0.5;\n    if (phi > 1) {\n      return null;\n    }\n    phi = 2 * Math.asin(phi);\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      sinz = Math.sin(phi);\n      cosz = Math.cos(phi);\n    }\n    switch (this.mode) {\n      case this.EQUIT:\n        phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n        x *= sinz;\n        y = cosz * rh;\n        break;\n      case this.OBLIQ:\n        phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n        x *= sinz * this.cosph0;\n        y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n        break;\n      case this.N_POLE:\n        y = -y;\n        phi = HALF_PI - phi;\n        break;\n      case this.S_POLE:\n        phi -= HALF_PI;\n        break;\n    }\n    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n  } else {\n    ab = 0;\n    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n      x /= this.dd;\n      y *= this.dd;\n      rho = Math.sqrt(x * x + y * y);\n      if (rho < EPSLN) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n      cCe = Math.cos(sCe);\n      x *= (sCe = Math.sin(sCe));\n      if (this.mode === this.OBLIQ) {\n        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n        q = this.qp * ab;\n        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n      } else {\n        ab = y * sCe / rho;\n        q = this.qp * ab;\n        y = rho * cCe;\n      }\n    } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n      if (this.mode === this.N_POLE) {\n        y = -y;\n      }\n      q = (x * x + y * y);\n      if (!q) {\n        p.x = this.long0;\n        p.y = this.lat0;\n        return p;\n      }\n      ab = 1 - q / this.qp;\n      if (this.mode === this.S_POLE) {\n        ab = -ab;\n      }\n    }\n    lam = Math.atan2(x, y);\n    phi = authlat(Math.asin(ab), this.apa);\n  }\n\n  p.x = adjust_lon(this.long0 + lam, this.over);\n  p.y = phi;\n  return p;\n}\n\nexport var names = ['Lambert Azimuthal Equal Area', 'Lambert_Azimuthal_Equal_Area', 'laea'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  S_POLE: S_POLE,\n  N_POLE: N_POLE,\n  EQUIT: EQUIT,\n  OBLIQ: OBLIQ\n};\n","export default function (x) {\n  if (Math.abs(x) > 1) {\n    x = (x > 1) ? 1 : -1;\n  }\n  return Math.asin(x);\n}\n","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport { EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e3\n * @property {number} sin_po\n * @property {number} cos_po\n * @property {number} t1\n * @property {number} con\n * @property {number} ms1\n * @property {number} qs1\n * @property {number} t2\n * @property {number} ms2\n * @property {number} qs2\n * @property {number} t3\n * @property {number} qs0\n * @property {number} ns0\n * @property {number} c\n * @property {number} rh\n * @property {number} sin_phi\n * @property {number} cos_phi\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e3 = Math.sqrt(this.es);\n\n  this.sin_po = Math.sin(this.lat1);\n  this.cos_po = Math.cos(this.lat1);\n  this.t1 = this.sin_po;\n  this.con = this.sin_po;\n  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n  this.qs1 = qsfnz(this.e3, this.sin_po);\n\n  this.sin_po = Math.sin(this.lat2);\n  this.cos_po = Math.cos(this.lat2);\n  this.t2 = this.sin_po;\n  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n  this.qs2 = qsfnz(this.e3, this.sin_po);\n\n  this.sin_po = Math.sin(this.lat0);\n  this.cos_po = Math.cos(this.lat0);\n  this.t3 = this.sin_po;\n  this.qs0 = qsfnz(this.e3, this.sin_po);\n\n  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n  } else {\n    this.ns0 = this.con;\n  }\n  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n  ------------------------------------------------------------------- */\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  this.sin_phi = Math.sin(lat);\n  this.cos_phi = Math.cos(lat);\n\n  var qs = qsfnz(this.e3, this.sin_phi);\n  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n  var theta = this.ns0 * adjust_lon(lon - this.long0, this.over);\n  var x = rh1 * Math.sin(theta) + this.x0;\n  var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh1, qs, con, theta, lon, lat;\n\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  if (this.ns0 >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  } else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n  con = rh1 * this.ns0 / this.a;\n  if (this.sphere) {\n    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n  } else {\n    qs = (this.c - con * con) / this.ns0;\n    lat = this.phi1z(this.e3, qs);\n  }\n\n  lon = adjust_lon(theta / this.ns0 + this.long0, this.over);\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n   Albers Conical Equal-Area projection.\n------------------------------------------- */\nexport function phi1z(eccent, qs) {\n  var sinphi, cosphi, con, com, dphi;\n  var phi = asinz(0.5 * qs);\n  if (eccent < EPSLN) {\n    return phi;\n  }\n\n  var eccnts = eccent * eccent;\n  for (var i = 1; i <= 25; i++) {\n    sinphi = Math.sin(phi);\n    cosphi = Math.cos(phi);\n    con = eccent * sinphi;\n    com = 1 - con * con;\n    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi = phi + dphi;\n    if (Math.abs(dphi) <= 1e-7) {\n      return phi;\n    }\n  }\n  return null;\n}\n\nexport var names = ['Albers_Conic_Equal_Area', 'Albers_Equal_Area', 'Albers', 'aea'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names,\n  phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport { EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} sin_p14\n * @property {number} cos_p14\n * @property {number} infinity_dist\n * @property {number} rc\n */\n\n/**\n  reference:\n    Wolfram Mathworld \"Gnomonic Projection\"\n    http://mathworld.wolfram.com/GnomonicProjection.html\n    Accessed: 12th November 2009\n   @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  this.sin_p14 = Math.sin(this.lat0);\n  this.cos_p14 = Math.cos(this.lat0);\n  // Approximation for projecting points to the horizon (infinity)\n  this.infinity_dist = 1000 * this.a;\n  this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n    --------------------------------------------------- */\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g;\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      ----------------- */\n  dlon = adjust_lon(lon - this.long0, this.over);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n  } else {\n    // Point is in the opposing hemisphere and is unprojectable\n    // We still need to return a reasonable point, so we project\n    // to infinity, on a bearing\n    // equivalent to the northern hemisphere equivalent\n    // This is a reasonable approximation for short shapes and lines that\n    // straddle the horizon.\n\n    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* Rho */\n  var sinc, cosc;\n  var c;\n  var lon, lat;\n\n  /* Inverse equations\n      ----------------- */\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  p.x /= this.k0;\n  p.y /= this.k0;\n\n  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n    c = Math.atan2(rh, this.rc);\n    sinc = Math.sin(c);\n    cosc = Math.cos(c);\n\n    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n    lon = adjust_lon(this.long0 + lon, this.over);\n  } else {\n    lat = this.phic0;\n    lon = 0;\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['gnom'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} e\n */\n\n/**\n  reference:\n    \"Cartographic Projection Procedures for the UNIX Environment-\n    A User's Manual\" by Gerald I. Evenden,\n    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n  @this {import('../defs.js').ProjectionDefinition & LocalThis}\n*/\nexport function init() {\n  // no-op\n  if (!this.sphere) {\n    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n  }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------ */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y;\n  /* Forward equations\n      ----------------- */\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  if (this.sphere) {\n    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n  } else {\n    var qs = qsfnz(this.e, Math.sin(lat));\n    x = this.x0 + this.a * this.k0 * dlon;\n    y = this.y0 + this.a * qs * 0.5 / this.k0;\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------ */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var lon, lat;\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts), this.over);\n    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n  } else {\n    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0), this.over);\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['cea'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { HALF_PI } from '../constants/values';\n\nexport default function (eccent, q) {\n  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n    if (q < 0) {\n      return (-1 * HALF_PI);\n    } else {\n      return HALF_PI;\n    }\n  }\n  // var phi = 0.5* q/(1-eccent*eccent);\n  var phi = Math.asin(0.5 * q);\n  var dphi;\n  var sin_phi;\n  var cos_phi;\n  var con;\n  for (var i = 0; i < 30; i++) {\n    sin_phi = Math.sin(phi);\n    cos_phi = Math.cos(phi);\n    con = eccent * sin_phi;\n    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n    phi += dphi;\n    if (Math.abs(dphi) <= 0.0000000001) {\n      return phi;\n    }\n  }\n\n  // console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n  return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || 'Equidistant Cylindrical (Plate Carre)';\n\n  this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var dlat = adjust_lat(lat - this.lat0);\n  p.x = this.x0 + (this.a * dlon * this.rc);\n  p.y = this.y0 + (this.a * dlat);\n  return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var x = p.x;\n  var y = p.y;\n\n  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)), this.over);\n  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n  return p;\n}\n\nexport var names = ['Equirectangular', 'Equidistant_Cylindrical', 'Equidistant_Cylindrical_Spherical', 'eqc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport { EPSLN } from '../constants/values';\n\nimport gN from '../common/gN';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} ml0\n */\n\nvar MAX_ITER = 20;\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); // si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n    --------------------------------------------------- */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var x, y, el;\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  el = dlon * Math.sin(lat);\n  if (this.sphere) {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.a * this.lat0;\n    } else {\n      x = this.a * Math.sin(el) / Math.tan(lat);\n      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n    }\n  } else {\n    if (Math.abs(lat) <= EPSLN) {\n      x = this.a * dlon;\n      y = -1 * this.ml0;\n    } else {\n      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n      x = nl * Math.sin(el);\n      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n    }\n  }\n  p.x = x + this.x0;\n  p.y = y + this.y0;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  var lon, lat, x, y, i;\n  var al, bl;\n  var phi, dphi;\n  x = p.x - this.x0;\n  y = p.y - this.y0;\n\n  if (this.sphere) {\n    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n      lon = adjust_lon(x / this.a + this.long0, this.over);\n      lat = 0;\n    } else {\n      al = this.lat0 + y / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var tanphi;\n      for (i = MAX_ITER; i; --i) {\n        tanphi = Math.tan(phi);\n        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n        phi += dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat), this.over);\n    }\n  } else {\n    if (Math.abs(y + this.ml0) <= EPSLN) {\n      lat = 0;\n      lon = adjust_lon(this.long0 + x / this.a, this.over);\n    } else {\n      al = (this.ml0 + y) / this.a;\n      bl = x * x / this.a / this.a + al * al;\n      phi = al;\n      var cl, mln, mlnp, ma;\n      var con;\n      for (i = MAX_ITER; i; --i) {\n        con = this.e * Math.sin(phi);\n        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n        ma = mln / this.a;\n        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n        phi -= dphi;\n        if (Math.abs(dphi) <= EPSLN) {\n          lat = phi;\n          break;\n        }\n      }\n\n      // lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat), this.over);\n    }\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Polyconic', 'American_Polyconic', 'poly'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { SEC_TO_RAD } from '../constants/values';\n\n/*\n  reference\n    Department of Land and Survey Technical Circular 1973/32\n      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n    OSG Technical Report 4.1\n      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n  */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n *     0 -> km accuracy\n *     1 -> m accuracy -- suitable for most mapping applications\n *     2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n  this.A = [];\n  this.A[1] = 0.6399175073;\n  this.A[2] = -0.1358797613;\n  this.A[3] = 0.063294409;\n  this.A[4] = -0.02526853;\n  this.A[5] = 0.0117879;\n  this.A[6] = -0.0055161;\n  this.A[7] = 0.0026906;\n  this.A[8] = -0.001333;\n  this.A[9] = 0.00067;\n  this.A[10] = -0.00034;\n\n  this.B_re = [];\n  this.B_im = [];\n  this.B_re[1] = 0.7557853228;\n  this.B_im[1] = 0;\n  this.B_re[2] = 0.249204646;\n  this.B_im[2] = 0.003371507;\n  this.B_re[3] = -0.001541739;\n  this.B_im[3] = 0.041058560;\n  this.B_re[4] = -0.10162907;\n  this.B_im[4] = 0.01727609;\n  this.B_re[5] = -0.26623489;\n  this.B_im[5] = -0.36249218;\n  this.B_re[6] = -0.6870983;\n  this.B_im[6] = -1.1651967;\n\n  this.C_re = [];\n  this.C_im = [];\n  this.C_re[1] = 1.3231270439;\n  this.C_im[1] = 0;\n  this.C_re[2] = -0.577245789;\n  this.C_im[2] = -0.007809598;\n  this.C_re[3] = 0.508307513;\n  this.C_im[3] = -0.112208952;\n  this.C_re[4] = -0.15094762;\n  this.C_im[4] = 0.18200602;\n  this.C_re[5] = 1.01418179;\n  this.C_im[5] = 1.64497696;\n  this.C_re[6] = 1.9660549;\n  this.C_im[6] = 2.5127645;\n\n  this.D = [];\n  this.D[1] = 1.5627014243;\n  this.D[2] = 0.5185406398;\n  this.D[3] = -0.03333098;\n  this.D[4] = -0.1052906;\n  this.D[5] = -0.0368594;\n  this.D[6] = 0.007317;\n  this.D[7] = 0.01220;\n  this.D[8] = 0.00394;\n  this.D[9] = -0.0013;\n}\n\n/**\n    New Zealand Map Grid Forward  - long/lat to x/y\n    long/lat in radians\n  */\nexport function forward(p) {\n  var n;\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lat = lat - this.lat0;\n  var delta_lon = lon - this.long0;\n\n  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n  var d_lambda = delta_lon;\n  var d_phi_n = 1; // d_phi^0\n\n  var d_psi = 0;\n  for (n = 1; n <= 10; n++) {\n    d_phi_n = d_phi_n * d_phi;\n    d_psi = d_psi + this.A[n] * d_phi_n;\n  }\n\n  // 2. Calculate theta\n  var th_re = d_psi;\n  var th_im = d_lambda;\n\n  // 3. Calculate z\n  var th_n_re = 1;\n  var th_n_im = 0; // theta^0\n  var th_n_re1;\n  var th_n_im1;\n\n  var z_re = 0;\n  var z_im = 0;\n  for (n = 1; n <= 6; n++) {\n    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n    th_n_re = th_n_re1;\n    th_n_im = th_n_im1;\n    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n  }\n\n  // 4. Calculate easting and northing\n  p.x = (z_im * this.a) + this.x0;\n  p.y = (z_re * this.a) + this.y0;\n\n  return p;\n}\n\n/**\n    New Zealand Map Grid Inverse  -  x/y to long/lat\n  */\nexport function inverse(p) {\n  var n;\n  var x = p.x;\n  var y = p.y;\n\n  var delta_x = x - this.x0;\n  var delta_y = y - this.y0;\n\n  // 1. Calculate z\n  var z_re = delta_y / this.a;\n  var z_im = delta_x / this.a;\n\n  // 2a. Calculate theta - first approximation gives km accuracy\n  var z_n_re = 1;\n  var z_n_im = 0; // z^0\n  var z_n_re1;\n  var z_n_im1;\n\n  var th_re = 0;\n  var th_im = 0;\n  for (n = 1; n <= 6; n++) {\n    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n    z_n_re = z_n_re1;\n    z_n_im = z_n_im1;\n    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n  }\n\n  // 2b. Iterate to refine the accuracy of the calculation\n  //        0 iterations gives km accuracy\n  //        1 iteration gives m accuracy -- good enough for most mapping applications\n  //        2 iterations bives mm accuracy\n  for (var i = 0; i < this.iterations; i++) {\n    var th_n_re = th_re;\n    var th_n_im = th_im;\n    var th_n_re1;\n    var th_n_im1;\n\n    var num_re = z_re;\n    var num_im = z_im;\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    th_n_re = 1;\n    th_n_im = 0;\n    var den_re = this.B_re[1];\n    var den_im = this.B_im[1];\n    for (n = 2; n <= 6; n++) {\n      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n      th_n_re = th_n_re1;\n      th_n_im = th_n_im1;\n      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n    }\n\n    // Complex division\n    var den2 = den_re * den_re + den_im * den_im;\n    th_re = (num_re * den_re + num_im * den_im) / den2;\n    th_im = (num_im * den_re - num_re * den_im) / den2;\n  }\n\n  // 3. Calculate d_phi              ...                                    // and d_lambda\n  var d_psi = th_re;\n  var d_lambda = th_im;\n  var d_psi_n = 1; // d_psi^0\n\n  var d_phi = 0;\n  for (n = 1; n <= 9; n++) {\n    d_psi_n = d_psi_n * d_psi;\n    d_phi = d_phi + this.D[n] * d_psi_n;\n  }\n\n  // 4. Calculate latitude and longitude\n  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n  var lon = this.long0 + d_lambda;\n\n  p.x = lon;\n  p.y = lat;\n\n  return p;\n}\n\nexport var names = ['New_Zealand_Map_Grid', 'nzmg'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n  reference\n    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n  */\n\n/* Initialize the Miller Cylindrical projection\n  ------------------------------------------- */\nexport function init() {\n  // no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n    ------------------------------------------------------------ */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      ----------------- */\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var x = this.x0 + this.a * dlon;\n  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n    ------------------------------------------------------------ */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n\n  var lon = adjust_lon(this.long0 + p.x / this.a, this.over);\n  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Miller_Cylindrical', 'mill'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport { EPSLN, HALF_PI } from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/**\n * @typedef {Object} LocalThis\n * @property {Array<number>} en\n * @property {number} n\n * @property {number} m\n * @property {number} C_y\n * @property {number} C_x\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  /* Place parameters in static storage for common use\n    ------------------------------------------------- */\n  this.long0 = this.long0 || 0;\n\n  if (!this.sphere) {\n    this.en = pj_enfn(this.es);\n  } else {\n    this.n = 1;\n    this.m = 0;\n    this.es = 0;\n    this.C_y = Math.sqrt((this.m + 1) / this.n);\n    this.C_x = this.C_y / (this.m + 1);\n  }\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n  ----------------------------------------------------- */\nexport function forward(p) {\n  var x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n    ----------------- */\n  lon = adjust_lon(lon - this.long0, this.over);\n\n  if (this.sphere) {\n    if (!this.m) {\n      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n    } else {\n      var k = this.n * Math.sin(lat);\n      for (var i = MAX_ITER; i; --i) {\n        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n        lat -= V;\n        if (Math.abs(V) < EPSLN) {\n          break;\n        }\n      }\n    }\n    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n    y = this.a * this.C_y * lat;\n  } else {\n    var s = Math.sin(lat);\n    var c = Math.cos(lat);\n    y = this.a * pj_mlfn(lat, s, c, this.en);\n    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n  }\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var lat, temp, lon, s;\n\n  p.x -= this.x0;\n  lon = p.x / this.a;\n  p.y -= this.y0;\n  lat = p.y / this.a;\n\n  if (this.sphere) {\n    lat /= this.C_y;\n    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n    if (this.m) {\n      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n    } else if (this.n !== 1) {\n      lat = asinz(Math.sin(lat) / this.n);\n    }\n    lon = adjust_lon(lon + this.long0, this.over);\n    lat = adjust_lat(lat);\n  } else {\n    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n    s = Math.abs(lat);\n    if (s < HALF_PI) {\n      s = Math.sin(lat);\n      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n      // temp = this.long0 + p.x / (this.a * Math.cos(lat));\n      lon = adjust_lon(temp, this.over);\n    } else if ((s - EPSLN) < HALF_PI) {\n      lon = this.long0;\n    }\n  }\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Sinusoidal', 'sinu'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { forward as sinuForward, inverse as sinuInverse } from './sinu';\n\n/**\n * Eckert VI projection — spherical sinusoidal variant with m=1, n=1+π/2.\n * Always forces spherical computation regardless of the ellipsoid.\n *\n * @typedef {Object} LocalThis\n * @property {number} m\n * @property {number} n\n * @property {number} C_y\n * @property {number} C_x\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  /* Force spherical handling */\n  this.sphere = true;\n  this.b = this.a;\n\n  this.m = 1.0;\n  this.n = 2.570796326794896619231321691; /* 1 + π/2 */\n  this.es = 0;\n\n  this.C_y = Math.sqrt((this.m + 1.0) / this.n);\n  this.C_x = this.C_y / (this.m + 1.0);\n}\n\nexport var forward = sinuForward;\nexport var inverse = sinuInverse;\n\nexport var names = ['Eckert_VI', 'eck6'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport { EPSLN } from '../constants/values';\n\n/** @this {import('../defs.js').ProjectionDefinition} */\nexport function init() {\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n}\n\n/* Mollweide forward equations--mapping lat,long to x,y\n    ---------------------------------------------------- */\nexport function forward(p) {\n  /* Forward equations\n      ----------------- */\n  var lon = p.x;\n  var lat = p.y;\n\n  var delta_lon = adjust_lon(lon - this.long0, this.over);\n  var theta = lat;\n  var con = Math.PI * Math.sin(lat);\n\n  /* Iterate using the Newton-Raphson method to find theta\n      ----------------------------------------------------- */\n  while (true) {\n    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n    theta += delta_theta;\n    if (Math.abs(delta_theta) < EPSLN) {\n      break;\n    }\n  }\n  theta /= 2;\n\n  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n       this is done here because of precision problems with \"cos(theta)\"\n       -------------------------------------------------------------------------- */\n  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n    delta_lon = 0;\n  }\n  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var theta;\n  var arg;\n\n  /* Inverse equations\n      ----------------- */\n  p.x -= this.x0;\n  p.y -= this.y0;\n  arg = p.y / (1.4142135623731 * this.a);\n\n  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n       a number very close to one is used instead.\n       ------------------------------------------------------------------- */\n  if (Math.abs(arg) > 0.999999999999) {\n    arg = 0.999999999999;\n  }\n  theta = Math.asin(arg);\n  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))), this.over);\n  if (lon < (-Math.PI)) {\n    lon = -Math.PI;\n  }\n  if (lon > Math.PI) {\n    lon = Math.PI;\n  }\n  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n  if (Math.abs(arg) > 1) {\n    arg = 1;\n  }\n  var lat = Math.asin(arg);\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Mollweide', 'moll'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport { EPSLN } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} temp\n * @property {number} es\n * @property {number} e\n * @property {number} e0\n * @property {number} e1\n * @property {number} e2\n * @property {number} e3\n * @property {number} sin_phi\n * @property {number} cos_phi\n * @property {number} ms1\n * @property {number} ml1\n * @property {number} ms2\n * @property {number} ml2\n * @property {number} ns\n * @property {number} g\n * @property {number} ml0\n * @property {number} rh\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  // Standard Parallels cannot be equal and on opposite sides of the equator\n  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n    return;\n  }\n  this.lat2 = this.lat2 || this.lat1;\n  this.temp = this.b / this.a;\n  this.es = 1 - Math.pow(this.temp, 2);\n  this.e = Math.sqrt(this.es);\n  this.e0 = e0fn(this.es);\n  this.e1 = e1fn(this.es);\n  this.e2 = e2fn(this.es);\n  this.e3 = e3fn(this.es);\n\n  this.sin_phi = Math.sin(this.lat1);\n  this.cos_phi = Math.cos(this.lat1);\n\n  this.ms1 = msfnz(this.e, this.sin_phi, this.cos_phi);\n  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n    this.ns = this.sin_phi;\n  } else {\n    this.sin_phi = Math.sin(this.lat2);\n    this.cos_phi = Math.cos(this.lat2);\n    this.ms2 = msfnz(this.e, this.sin_phi, this.cos_phi);\n    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n  }\n  this.g = this.ml1 + this.ms1 / this.ns;\n  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n  this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n  ----------------------------------------------------------- */\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var rh1;\n\n  /* Forward equations\n      ----------------- */\n  if (this.sphere) {\n    rh1 = this.a * (this.g - lat);\n  } else {\n    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n    rh1 = this.a * (this.g - ml);\n  }\n  var theta = this.ns * adjust_lon(lon - this.long0, this.over);\n  var x = this.x0 + rh1 * Math.sin(theta);\n  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Inverse equations\n  ----------------- */\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y = this.rh - p.y + this.y0;\n  var con, rh1, lat, lon;\n  if (this.ns >= 0) {\n    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n    con = 1;\n  } else {\n    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n    con = -1;\n  }\n  var theta = 0;\n  if (rh1 !== 0) {\n    theta = Math.atan2(con * p.x, con * p.y);\n  }\n\n  if (this.sphere) {\n    lon = adjust_lon(this.long0 + theta / this.ns, this.over);\n    lat = adjust_lat(this.g - rh1 / this.a);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  } else {\n    var ml = this.g - rh1 / this.a;\n    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n    lon = adjust_lon(this.long0 + theta / this.ns, this.over);\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n}\n\nexport var names = ['Equidistant_Conic', 'eqdc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport { HALF_PI, EPSLN } from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} R - Radius of the Earth\n */\n\n/**\n * Initialize the Van Der Grinten projection\n * @this {import('../defs.js').ProjectionDefinition & LocalThis}\n */\nexport function init() {\n  // this.R = 6370997; //Radius of earth\n  this.R = this.a;\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n\n  /* Forward equations\n    ----------------- */\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var x, y;\n\n  if (Math.abs(lat) <= EPSLN) {\n    x = this.x0 + this.R * dlon;\n    y = this.y0;\n  }\n  var theta = asinz(2 * Math.abs(lat / Math.PI));\n  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n    x = this.x0;\n    if (lat >= 0) {\n      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n    } else {\n      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n    }\n    //  return(OK);\n  }\n  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n  var asq = al * al;\n  var sinth = Math.sin(theta);\n  var costh = Math.cos(theta);\n\n  var g = costh / (sinth + costh - 1);\n  var gsq = g * g;\n  var m = g * (2 / sinth - 1);\n  var msq = m * m;\n  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n  if (dlon < 0) {\n    con = -con;\n  }\n  x = this.x0 + con;\n  // con = Math.abs(con / (Math.PI * this.R));\n  var q = asq + g;\n  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n  if (lat >= 0) {\n    // y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 + con;\n  } else {\n    // y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n    y = this.y0 - con;\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n  --------------------------------------------------------- */\nexport function inverse(p) {\n  var lon, lat;\n  var xx, yy, xys, c1, c2, c3;\n  var a1;\n  var m1;\n  var con;\n  var th1;\n  var d;\n\n  /* inverse equations\n    ----------------- */\n  p.x -= this.x0;\n  p.y -= this.y0;\n  con = Math.PI * this.R;\n  xx = p.x / con;\n  yy = p.y / con;\n  xys = xx * xx + yy * yy;\n  c1 = -Math.abs(yy) * (1 + xys);\n  c2 = c1 - 2 * yy * yy + xx * xx;\n  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n  m1 = 2 * Math.sqrt(-a1 / 3);\n  con = ((3 * d) / a1) / m1;\n  if (Math.abs(con) > 1) {\n    if (con >= 0) {\n      con = 1;\n    } else {\n      con = -1;\n    }\n  }\n  th1 = Math.acos(con) / 3;\n  if (p.y >= 0) {\n    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  } else {\n    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n  }\n\n  if (Math.abs(xx) < EPSLN) {\n    lon = this.long0;\n  } else {\n    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx, this.over);\n  }\n\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['Van_der_Grinten_I', 'VanDerGrinten', 'Van_der_Grinten', 'vandg'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport { HALF_PI, EPSLN } from '../constants/values';\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\nimport { vincentyDirect, vincentyInverse } from '../common/vincenty';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} sin_p12\n * @property {number} cos_p12\n * @property {number} a\n * @property {number} f\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.sin_p12 = Math.sin(this.lat0);\n  this.cos_p12 = Math.cos(this.lat0);\n  // flattening for ellipsoid\n  this.f = this.es / (1 + Math.sqrt(1 - this.es));\n}\n\nexport function forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var sinphi = Math.sin(p.y);\n  var cosphi = Math.cos(p.y);\n  var dlon = adjust_lon(lon - this.long0, this.over);\n  var e0, e1, e2, e3, Mlp, Ml, c, kp, cos_c, vars, azi1;\n  if (this.sphere) {\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      // North Pole case\n      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n      return p;\n    } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      // South Pole case\n      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n      return p;\n    } else {\n      // default case\n      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n      c = Math.acos(cos_c);\n      kp = c ? c / Math.sin(c) : 1;\n      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n      return p;\n    }\n  } else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      // North Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n      return p;\n    } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      // South Pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n      return p;\n    } else {\n      // Default case\n      if (Math.abs(lon) < EPSLN && Math.abs(lat - this.lat0) < EPSLN) {\n        p.x = p.y = 0;\n        return p;\n      }\n      vars = vincentyInverse(this.lat0, this.long0, lat, lon, this.a, this.f);\n      azi1 = vars.azi1;\n      p.x = vars.s12 * Math.sin(azi1);\n      p.y = vars.s12 * Math.cos(azi1);\n      return p;\n    }\n  }\n}\n\nexport function inverse(p) {\n  p.x -= this.x0;\n  p.y -= this.y0;\n  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, azi1, s12, vars;\n  if (this.sphere) {\n    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n    if (rh > (2 * HALF_PI * this.a)) {\n      return;\n    }\n    z = rh / this.a;\n\n    sinz = Math.sin(z);\n    cosz = Math.cos(z);\n\n    lon = this.long0;\n    if (Math.abs(rh) <= EPSLN) {\n      lat = this.lat0;\n    } else {\n      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n      con = Math.abs(this.lat0) - HALF_PI;\n      if (Math.abs(con) <= EPSLN) {\n        if (this.lat0 >= 0) {\n          lon = adjust_lon(this.long0 + Math.atan2(p.x, -p.y), this.over);\n        } else {\n          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y), this.over);\n        }\n      } else {\n        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz), this.over);\n      }\n    }\n\n    p.x = lon;\n    p.y = lat;\n    return p;\n  } else {\n    e0 = e0fn(this.es);\n    e1 = e1fn(this.es);\n    e2 = e2fn(this.es);\n    e3 = e3fn(this.es);\n    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n      // North pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = Mlp - rh;\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, -1 * p.y), this.over);\n      p.x = lon;\n      p.y = lat;\n      return p;\n    } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n      // South pole case\n      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n      M = rh - Mlp;\n\n      lat = imlfn(M / this.a, e0, e1, e2, e3);\n      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y), this.over);\n      p.x = lon;\n      p.y = lat;\n      return p;\n    } else {\n      // default case\n      azi1 = Math.atan2(p.x, p.y);\n      s12 = Math.sqrt(p.x * p.x + p.y * p.y);\n      vars = vincentyDirect(this.lat0, this.long0, azi1, s12, this.a, this.f);\n\n      p.x = vars.lon2;\n      p.y = vars.lat2;\n      return p;\n    }\n  }\n}\n\nexport var names = ['Azimuthal_Equidistant', 'aeqd'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","/**\n * Calculates the inverse geodesic problem using Vincenty's formulae.\n * Computes the forward azimuth and ellipsoidal distance between two points\n * specified by latitude and longitude on the surface of an ellipsoid.\n *\n * @param {number} lat1 Latitude of the first point in radians.\n * @param {number} lon1 Longitude of the first point in radians.\n * @param {number} lat2 Latitude of the second point in radians.\n * @param {number} lon2 Longitude of the second point in radians.\n * @param {number} a Semi-major axis of the ellipsoid (meters).\n * @param {number} f Flattening of the ellipsoid.\n * @returns {{ azi1: number, s12: number }} An object containing:\n *   - azi1: Forward azimuth from the first point to the second point (radians).\n *   - s12: Ellipsoidal distance between the two points (meters).\n */\nexport function vincentyInverse(lat1, lon1, lat2, lon2, a, f) {\n  const L = lon2 - lon1;\n  const U1 = Math.atan((1 - f) * Math.tan(lat1));\n  const U2 = Math.atan((1 - f) * Math.tan(lat2));\n  const sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);\n  const sinU2 = Math.sin(U2), cosU2 = Math.cos(U2);\n\n  let lambda = L, lambdaP, iterLimit = 100;\n  let sinLambda, cosLambda, sinSigma, cosSigma, sigma, sinAlpha, cos2Alpha, cos2SigmaM, C;\n  let uSq, A, B, deltaSigma, s;\n\n  do {\n    sinLambda = Math.sin(lambda);\n    cosLambda = Math.cos(lambda);\n    sinSigma = Math.sqrt(\n      (cosU2 * sinLambda) * (cosU2 * sinLambda)\n      + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n      * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda)\n    );\n    if (sinSigma === 0) {\n      return { azi1: 0, s12: 0 }; // coincident points\n    }\n    cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n    sigma = Math.atan2(sinSigma, cosSigma);\n    sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;\n    cos2Alpha = 1 - sinAlpha * sinAlpha;\n    cos2SigmaM = (cos2Alpha !== 0) ? (cosSigma - 2 * sinU1 * sinU2 / cos2Alpha) : 0;\n    C = f / 16 * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n    lambdaP = lambda;\n    lambda = L + (1 - C) * f * sinAlpha\n    * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n  } while (Math.abs(lambda - lambdaP) > 1e-12 && --iterLimit > 0);\n\n  if (iterLimit === 0) {\n    return { azi1: NaN, s12: NaN }; // formula failed to converge\n  }\n\n  uSq = cos2Alpha * (a * a - (a * (1 - f)) * (a * (1 - f))) / ((a * (1 - f)) * (a * (1 - f)));\n  A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n  B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n  deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)\n    - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n\n  s = (a * (1 - f)) * A * (sigma - deltaSigma);\n\n  // Forward azimuth\n  const azi1 = Math.atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n\n  return { azi1, s12: s };\n}\n\n/**\n * Solves the direct geodetic problem using Vincenty's formulae.\n * Given a starting point, initial azimuth, and distance, computes the destination point on the ellipsoid.\n *\n * @param {number} lat1 Latitude of the starting point in radians.\n * @param {number} lon1 Longitude of the starting point in radians.\n * @param {number} azi1 Initial azimuth (forward azimuth) in radians.\n * @param {number} s12 Distance to travel from the starting point in meters.\n * @param {number} a Semi-major axis of the ellipsoid in meters.\n * @param {number} f Flattening of the ellipsoid.\n * @returns {{lat2: number, lon2: number}} The latitude and longitude (in radians) of the destination point.\n */\nexport function vincentyDirect(lat1, lon1, azi1, s12, a, f) {\n  const U1 = Math.atan((1 - f) * Math.tan(lat1));\n  const sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);\n  const sinAlpha1 = Math.sin(azi1), cosAlpha1 = Math.cos(azi1);\n\n  const sigma1 = Math.atan2(sinU1, cosU1 * cosAlpha1);\n  const sinAlpha = cosU1 * sinAlpha1;\n  const cos2Alpha = 1 - sinAlpha * sinAlpha;\n  const uSq = cos2Alpha * (a * a - (a * (1 - f)) * (a * (1 - f))) / ((a * (1 - f)) * (a * (1 - f)));\n  const A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n  const B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n\n  let sigma = s12 / ((a * (1 - f)) * A), sigmaP, iterLimit = 100;\n  let cos2SigmaM, sinSigma, cosSigma, deltaSigma;\n\n  do {\n    cos2SigmaM = Math.cos(2 * sigma1 + sigma);\n    sinSigma = Math.sin(sigma);\n    cosSigma = Math.cos(sigma);\n    deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)\n      - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n    sigmaP = sigma;\n    sigma = s12 / ((a * (1 - f)) * A) + deltaSigma;\n  } while (Math.abs(sigma - sigmaP) > 1e-12 && --iterLimit > 0);\n\n  if (iterLimit === 0) {\n    return { lat2: NaN, lon2: NaN };\n  }\n\n  const tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1;\n  const lat2 = Math.atan2(\n    sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1,\n    (1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp)\n  );\n  const lambda = Math.atan2(\n    sinSigma * sinAlpha1,\n    cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1\n  );\n  const C = f / 16 * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n  const L = lambda - (1 - C) * f * sinAlpha\n    * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n  const lon2 = lon1 + L;\n\n  return { lat2, lon2 };\n}\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport { EPSLN, HALF_PI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} sin_p14\n * @property {number} cos_p14\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  // double temp;      /* temporary variable    */\n\n  /* Place parameters in static storage for common use\n      ------------------------------------------------- */\n  this.sin_p14 = Math.sin(this.lat0 || 0);\n  this.cos_p14 = Math.cos(this.lat0 || 0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n    --------------------------------------------------- */\nexport function forward(p) {\n  var sinphi, cosphi; /* sin and cos value        */\n  var dlon; /* delta longitude value      */\n  var coslon; /* cos of longitude        */\n  var ksp; /* scale factor          */\n  var g, x, y;\n  var lon = p.x;\n  var lat = p.y;\n  /* Forward equations\n      ----------------- */\n  dlon = adjust_lon(lon - (this.long0 || 0), this.over);\n\n  sinphi = Math.sin(lat);\n  cosphi = Math.cos(lat);\n\n  coslon = Math.cos(dlon);\n  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n  ksp = 1;\n  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n    x = this.a * ksp * cosphi * Math.sin(dlon);\n    y = (this.y0 || 0) + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n  }\n  p.x = x;\n  p.y = y;\n  return p;\n}\n\nexport function inverse(p) {\n  var rh; /* height above ellipsoid      */\n  var z; /* angle          */\n  var sinz, cosz; /* sin of z and cos of z      */\n  var con;\n  var lon, lat;\n  var long0, lat0;\n  /* Inverse equations\n      ----------------- */\n  p.x -= this.x0 || 0;\n  p.y -= this.y0 || 0;\n  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n  z = asinz(rh / this.a);\n\n  sinz = Math.sin(z);\n  cosz = Math.cos(z);\n\n  long0 = this.long0 || 0;\n  lat0 = this.lat0 || 0;\n  lon = long0;\n  if (Math.abs(rh) <= EPSLN) {\n    lat = lat0;\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n  con = Math.abs(lat0) - HALF_PI;\n  if (Math.abs(con) <= EPSLN) {\n    if (lat0 >= 0) {\n      lon = adjust_lon(long0 + Math.atan2(p.x, -p.y), this.over);\n    } else {\n      lon = adjust_lon(long0 - Math.atan2(-p.x, p.y), this.over);\n    }\n    p.x = lon;\n    p.y = lat;\n    return p;\n  }\n  lon = adjust_lon(long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz), this.over);\n  p.x = lon;\n  p.y = lat;\n  return p;\n}\n\nexport var names = ['ortho'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport { EPSLN, TWO_PI, SPI, HALF_PI, FORTPI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} face\n * @property {number} x0\n * @property {number} y0\n * @property {number} es\n * @property {number} one_minus_f\n * @property {number} one_minus_f_squared\n */\n\n/* constants */\nvar FACE_ENUM = {\n  FRONT: 1,\n  RIGHT: 2,\n  BACK: 3,\n  LEFT: 4,\n  TOP: 5,\n  BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n  AREA_0: 1,\n  AREA_1: 2,\n  AREA_2: 3,\n  AREA_3: 4\n};\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.lat0 = this.lat0 || 0;\n  this.long0 = this.long0 || 0;\n  this.lat_ts = this.lat_ts || 0;\n  this.title = this.title || 'Quadrilateralized Spherical Cube';\n\n  /* Determine the cube face from the center of projection. */\n  if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n    this.face = FACE_ENUM.TOP;\n  } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n    this.face = FACE_ENUM.BOTTOM;\n  } else if (Math.abs(this.long0) <= FORTPI) {\n    this.face = FACE_ENUM.FRONT;\n  } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n    this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n  } else {\n    this.face = FACE_ENUM.BACK;\n  }\n\n  /* Fill in useful values for the ellipsoid <-> sphere shift\n   * described in [LK12]. */\n  if (this.es !== 0) {\n    this.one_minus_f = 1 - (this.a - this.b) / this.a;\n    this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n  }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n  var xy = { x: 0, y: 0 };\n  var lat, lon;\n  var theta, phi;\n  var t, mu;\n  /* nu; */\n  var area = { value: 0 };\n\n  // move lon according to projection's lon\n  p.x -= this.long0;\n\n  /* Convert the geodetic latitude to a geocentric latitude.\n   * This corresponds to the shift from the ellipsoid to the sphere\n   * described in [LK12]. */\n  if (this.es !== 0) { // if (P->es != 0) {\n    lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n  } else {\n    lat = p.y;\n  }\n\n  /* Convert the input lat, lon into theta, phi as used by QSC.\n   * This depends on the cube face and the area on it.\n   * For the top and bottom face, we can compute theta and phi\n   * directly from phi, lam. For the other faces, we must use\n   * unit sphere cartesian coordinates as an intermediate step. */\n  lon = p.x; // lon = lp.lam;\n  if (this.face === FACE_ENUM.TOP) {\n    phi = HALF_PI - lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = lon - HALF_PI;\n    } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n    } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = lon + HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = lon;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = HALF_PI + lat;\n    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n      theta = -lon + HALF_PI;\n    } else if (lon < FORTPI && lon >= -FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta = -lon;\n    } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = -lon - HALF_PI;\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n    }\n  } else {\n    var q, r, s;\n    var sinlat, coslat;\n    var sinlon, coslon;\n\n    if (this.face === FACE_ENUM.RIGHT) {\n      lon = qsc_shift_lon_origin(lon, +HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lon = qsc_shift_lon_origin(lon, +SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lon = qsc_shift_lon_origin(lon, -HALF_PI);\n    }\n    sinlat = Math.sin(lat);\n    coslat = Math.cos(lat);\n    sinlon = Math.sin(lon);\n    coslon = Math.cos(lon);\n    q = coslat * coslon;\n    r = coslat * sinlon;\n    s = sinlat;\n\n    if (this.face === FACE_ENUM.FRONT) {\n      phi = Math.acos(q);\n      theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n    } else if (this.face === FACE_ENUM.RIGHT) {\n      phi = Math.acos(r);\n      theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n    } else if (this.face === FACE_ENUM.BACK) {\n      phi = Math.acos(-q);\n      theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      phi = Math.acos(-r);\n      theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n    } else {\n      /* Impossible */\n      phi = theta = 0;\n      area.value = AREA_ENUM.AREA_0;\n    }\n  }\n\n  /* Compute mu and nu for the area of definition.\n   * For mu, see Eq. (3-21) in [OL76], but note the typos:\n   * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n  mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n  t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n  /* Apply the result to the real area. */\n  if (area.value === AREA_ENUM.AREA_1) {\n    mu += HALF_PI;\n  } else if (area.value === AREA_ENUM.AREA_2) {\n    mu += SPI;\n  } else if (area.value === AREA_ENUM.AREA_3) {\n    mu += 1.5 * SPI;\n  }\n\n  /* Now compute x, y from mu and nu */\n  xy.x = t * Math.cos(mu);\n  xy.y = t * Math.sin(mu);\n  xy.x = xy.x * this.a + this.x0;\n  xy.y = xy.y * this.a + this.y0;\n\n  p.x = xy.x;\n  p.y = xy.y;\n  return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n  var lp = { lam: 0, phi: 0 };\n  var mu, nu, cosmu, tannu;\n  var tantheta, theta, cosphi, phi;\n  var t;\n  var area = { value: 0 };\n\n  /* de-offset */\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  /* Convert the input x, y to the mu and nu angles as used by QSC.\n   * This depends on the area of the cube face. */\n  nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n  mu = Math.atan2(p.y, p.x);\n  if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_0;\n  } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n    area.value = AREA_ENUM.AREA_1;\n    mu -= HALF_PI;\n  } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n    area.value = AREA_ENUM.AREA_2;\n    mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n  } else {\n    area.value = AREA_ENUM.AREA_3;\n    mu += HALF_PI;\n  }\n\n  /* Compute phi and theta for the area of definition.\n   * The inverse projection is not described in the original paper, but some\n   * good hints can be found here (as of 2011-12-14):\n   * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n   * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n  t = (SPI / 12) * Math.tan(mu);\n  tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n  theta = Math.atan(tantheta);\n  cosmu = Math.cos(mu);\n  tannu = Math.tan(nu);\n  cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n  if (cosphi < -1) {\n    cosphi = -1;\n  } else if (cosphi > +1) {\n    cosphi = +1;\n  }\n\n  /* Apply the result to the real area on the cube face.\n   * For the top and bottom face, we can compute phi and lam directly.\n   * For the other faces, we must use unit sphere cartesian coordinates\n   * as an intermediate step. */\n  if (this.face === FACE_ENUM.TOP) {\n    phi = Math.acos(cosphi);\n    lp.phi = HALF_PI - phi;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = theta;\n    }\n  } else if (this.face === FACE_ENUM.BOTTOM) {\n    phi = Math.acos(cosphi);\n    lp.phi = phi - HALF_PI;\n    if (area.value === AREA_ENUM.AREA_0) {\n      lp.lam = -theta + HALF_PI;\n    } else if (area.value === AREA_ENUM.AREA_1) {\n      lp.lam = -theta;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      lp.lam = -theta - HALF_PI;\n    } else /* area.value == AREA_ENUM.AREA_3 */ {\n      lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n    }\n  } else {\n    /* Compute phi and lam via cartesian unit sphere coordinates. */\n    var q, r, s;\n    q = cosphi;\n    t = q * q;\n    if (t >= 1) {\n      s = 0;\n    } else {\n      s = Math.sqrt(1 - t) * Math.sin(theta);\n    }\n    t += s * s;\n    if (t >= 1) {\n      r = 0;\n    } else {\n      r = Math.sqrt(1 - t);\n    }\n    /* Rotate q,r,s into the correct area. */\n    if (area.value === AREA_ENUM.AREA_1) {\n      t = r;\n      r = -s;\n      s = t;\n    } else if (area.value === AREA_ENUM.AREA_2) {\n      r = -r;\n      s = -s;\n    } else if (area.value === AREA_ENUM.AREA_3) {\n      t = r;\n      r = s;\n      s = -t;\n    }\n    /* Rotate q,r,s into the correct cube face. */\n    if (this.face === FACE_ENUM.RIGHT) {\n      t = q;\n      q = -r;\n      r = t;\n    } else if (this.face === FACE_ENUM.BACK) {\n      q = -q;\n      r = -r;\n    } else if (this.face === FACE_ENUM.LEFT) {\n      t = q;\n      q = r;\n      r = -t;\n    }\n    /* Now compute phi and lam from the unit sphere coordinates. */\n    lp.phi = Math.acos(-s) - HALF_PI;\n    lp.lam = Math.atan2(r, q);\n    if (this.face === FACE_ENUM.RIGHT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n    } else if (this.face === FACE_ENUM.BACK) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n    } else if (this.face === FACE_ENUM.LEFT) {\n      lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n    }\n  }\n\n  /* Apply the shift from the sphere to the ellipsoid as described\n   * in [LK12]. */\n  if (this.es !== 0) {\n    var invert_sign;\n    var tanphi, xa;\n    invert_sign = (lp.phi < 0 ? 1 : 0);\n    tanphi = Math.tan(lp.phi);\n    xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n    lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n    if (invert_sign) {\n      lp.phi = -lp.phi;\n    }\n  }\n\n  lp.lam += this.long0;\n  p.x = lp.lam;\n  p.y = lp.phi;\n  return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n  var theta;\n  if (phi < EPSLN) {\n    area.value = AREA_ENUM.AREA_0;\n    theta = 0.0;\n  } else {\n    theta = Math.atan2(y, x);\n    if (Math.abs(theta) <= FORTPI) {\n      area.value = AREA_ENUM.AREA_0;\n    } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n      area.value = AREA_ENUM.AREA_1;\n      theta -= HALF_PI;\n    } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n      area.value = AREA_ENUM.AREA_2;\n      theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n    } else {\n      area.value = AREA_ENUM.AREA_3;\n      theta += HALF_PI;\n    }\n  }\n  return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n  var slon = lon + offset;\n  if (slon < -SPI) {\n    slon += TWO_PI;\n  } else if (slon > +SPI) {\n    slon -= TWO_PI;\n  }\n  return slon;\n}\n\nexport var names = ['Quadrilateralized Spherical Cube', 'Quadrilateralized_Spherical_Cube', 'qsc'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport { HALF_PI, D2R, R2D, EPSLN } from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n  [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n  [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n  [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n  [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n  [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n  [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n  [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n  [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n  [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n  [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n  [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n  [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n  [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n  [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n  [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n  [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n  [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n  [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n  [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n  [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n  [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n  [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n  [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n  [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n  [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n  [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n  [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n  [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n  [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n  [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n  [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n  [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n  [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n  [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n  [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n  [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n  [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n  [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D / 5; // rad to 5-degree interval\nvar RC1 = 1 / C1;\nvar NODES = 18;\n\nvar poly3_val = function (coefs, x) {\n  return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function (coefs, x) {\n  return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n  var x = start;\n  for (; iters; --iters) {\n    var upd = f_df(x);\n    x -= upd;\n    if (Math.abs(upd) < max_err) {\n      break;\n    }\n  }\n  return x;\n}\n\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.long0 = this.long0 || 0;\n  this.es = 0;\n  this.title = this.title || 'Robinson';\n}\n\nexport function forward(ll) {\n  var lon = adjust_lon(ll.x - this.long0, this.over);\n\n  var dphi = Math.abs(ll.y);\n  var i = Math.floor(dphi * C1);\n  if (i < 0) {\n    i = 0;\n  } else if (i >= NODES) {\n    i = NODES - 1;\n  }\n  dphi = R2D * (dphi - RC1 * i);\n  var xy = {\n    x: poly3_val(COEFS_X[i], dphi) * lon,\n    y: poly3_val(COEFS_Y[i], dphi)\n  };\n  if (ll.y < 0) {\n    xy.y = -xy.y;\n  }\n\n  xy.x = xy.x * this.a * FXC + this.x0;\n  xy.y = xy.y * this.a * FYC + this.y0;\n  return xy;\n}\n\nexport function inverse(xy) {\n  var ll = {\n    x: (xy.x - this.x0) / (this.a * FXC),\n    y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n  };\n\n  if (ll.y >= 1) { // pathologic case\n    ll.x /= COEFS_X[NODES][0];\n    ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n  } else {\n    // find table interval\n    var i = Math.floor(ll.y * NODES);\n    if (i < 0) {\n      i = 0;\n    } else if (i >= NODES) {\n      i = NODES - 1;\n    }\n    for (;;) {\n      if (COEFS_Y[i][0] > ll.y) {\n        --i;\n      } else if (COEFS_Y[i + 1][0] <= ll.y) {\n        ++i;\n      } else {\n        break;\n      }\n    }\n    // linear interpolation in 5 degree interval\n    var coefs = COEFS_Y[i];\n    var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i + 1][0] - coefs[0]);\n    // find t so that poly3_val(coefs, t) = ll.y\n    t = newton_rapshon(function (x) {\n      return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n    }, t, EPSLN, 100);\n\n    ll.x /= poly3_val(COEFS_X[i], t);\n    ll.y = (5 * i + t) * D2R;\n    if (xy.y < 0) {\n      ll.y = -ll.y;\n    }\n  }\n\n  ll.x = adjust_lon(ll.x + this.long0, this.over);\n  return ll;\n}\n\nexport var names = ['Robinson', 'robin'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import {\n  geodeticToGeocentric,\n  geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n  this.name = 'geocent';\n}\n\nexport function forward(p) {\n  var point = geodeticToGeocentric(p, this.es, this.a);\n  return point;\n}\n\nexport function inverse(p) {\n  var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n  return point;\n}\n\nexport var names = ['Geocentric', 'geocentric', 'geocent', 'Geocent'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import { D2R, HALF_PI, EPSLN } from '../constants/values';\nimport hypot from '../common/hypot';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} mode\n * @property {number} sinph0\n * @property {number} cosph0\n * @property {number} pn1\n * @property {number} h\n * @property {number} rp\n * @property {number} p\n * @property {number} h1\n * @property {number} pfact\n * @property {number} es\n * @property {number} tilt\n * @property {number} azi\n * @property {number} cg\n * @property {number} sg\n * @property {number} cw\n * @property {number} sw\n */\n\nvar mode = {\n  N_POLE: 0,\n  S_POLE: 1,\n  EQUIT: 2,\n  OBLIQ: 3\n};\n\nvar params = {\n  h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7\n  azi: { def: 0, num: true, degrees: true }, // default is North\n  tilt: { def: 0, num: true, degrees: true }, // default is Nadir\n  long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic\n  lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic\n};\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  Object.keys(params).forEach(function (p) {\n    if (typeof this[p] === 'undefined') {\n      this[p] = params[p].def;\n    } else if (params[p].num && isNaN(this[p])) {\n      throw new Error('Invalid parameter value, must be numeric ' + p + ' = ' + this[p]);\n    } else if (params[p].num) {\n      this[p] = parseFloat(this[p]);\n    }\n    if (params[p].degrees) {\n      this[p] = this[p] * D2R;\n    }\n  }.bind(this));\n\n  if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {\n    this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;\n  } else if (Math.abs(this.lat0) < EPSLN) {\n    this.mode = mode.EQUIT;\n  } else {\n    this.mode = mode.OBLIQ;\n    this.sinph0 = Math.sin(this.lat0);\n    this.cosph0 = Math.cos(this.lat0);\n  }\n\n  this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius\n\n  if (this.pn1 <= 0 || this.pn1 > 1e10) {\n    throw new Error('Invalid height');\n  }\n\n  this.p = 1 + this.pn1;\n  this.rp = 1 / this.p;\n  this.h1 = 1 / this.pn1;\n  this.pfact = (this.p + 1) * this.h1;\n  this.es = 0;\n\n  var omega = this.tilt;\n  var gamma = this.azi;\n  this.cg = Math.cos(gamma);\n  this.sg = Math.sin(gamma);\n  this.cw = Math.cos(omega);\n  this.sw = Math.sin(omega);\n}\n\nexport function forward(p) {\n  p.x -= this.long0;\n  var sinphi = Math.sin(p.y);\n  var cosphi = Math.cos(p.y);\n  var coslam = Math.cos(p.x);\n  var x, y;\n  switch (this.mode) {\n    case mode.OBLIQ:\n      y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n      break;\n    case mode.EQUIT:\n      y = cosphi * coslam;\n      break;\n    case mode.S_POLE:\n      y = -sinphi;\n      break;\n    case mode.N_POLE:\n      y = sinphi;\n      break;\n  }\n  y = this.pn1 / (this.p - y);\n  x = y * cosphi * Math.sin(p.x);\n\n  switch (this.mode) {\n    case mode.OBLIQ:\n      y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n      break;\n    case mode.EQUIT:\n      y *= sinphi;\n      break;\n    case mode.N_POLE:\n      y *= -(cosphi * coslam);\n      break;\n    case mode.S_POLE:\n      y *= cosphi * coslam;\n      break;\n  }\n\n  // Tilt\n  var yt, ba;\n  yt = y * this.cg + x * this.sg;\n  ba = 1 / (yt * this.sw * this.h1 + this.cw);\n  x = (x * this.cg - y * this.sg) * this.cw * ba;\n  y = yt * ba;\n\n  p.x = x * this.a;\n  p.y = y * this.a;\n  return p;\n}\n\nexport function inverse(p) {\n  p.x /= this.a;\n  p.y /= this.a;\n  var r = { x: p.x, y: p.y };\n\n  // Un-Tilt\n  var bm, bq, yt;\n  yt = 1 / (this.pn1 - p.y * this.sw);\n  bm = this.pn1 * p.x * yt;\n  bq = this.pn1 * p.y * this.cw * yt;\n  p.x = bm * this.cg + bq * this.sg;\n  p.y = bq * this.cg - bm * this.sg;\n\n  var rh = hypot(p.x, p.y);\n  if (Math.abs(rh) < EPSLN) {\n    r.x = 0;\n    r.y = p.y;\n  } else {\n    var cosz, sinz;\n    sinz = 1 - rh * rh * this.pfact;\n    sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);\n    cosz = Math.sqrt(1 - sinz * sinz);\n    switch (this.mode) {\n      case mode.OBLIQ:\n        r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);\n        p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;\n        p.x *= sinz * this.cosph0;\n        break;\n      case mode.EQUIT:\n        r.y = Math.asin(p.y * sinz / rh);\n        p.y = cosz * rh;\n        p.x *= sinz;\n        break;\n      case mode.N_POLE:\n        r.y = Math.asin(cosz);\n        p.y = -p.y;\n        break;\n      case mode.S_POLE:\n        r.y = -Math.asin(cosz);\n        break;\n    }\n    r.x = Math.atan2(p.x, p.y);\n  }\n\n  p.x = r.x + this.long0;\n  p.y = r.y;\n  return p;\n}\n\nexport var names = ['Tilted_Perspective', 'tpers'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import hypot from '../common/hypot';\n\n/**\n * @typedef {Object} LocalThis\n * @property {1 | 0} flip_axis\n * @property {number} h\n * @property {number} radius_g_1\n * @property {number} radius_g\n * @property {number} radius_p\n * @property {number} radius_p2\n * @property {number} radius_p_inv2\n * @property {'ellipse'|'sphere'} shape\n * @property {number} C\n * @property {string} sweep\n * @property {number} es\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.flip_axis = (this.sweep === 'x' ? 1 : 0);\n  this.h = Number(this.h);\n  this.radius_g_1 = this.h / this.a;\n\n  if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {\n    throw new Error();\n  }\n\n  this.radius_g = 1.0 + this.radius_g_1;\n  this.C = this.radius_g * this.radius_g - 1.0;\n\n  if (this.es !== 0.0) {\n    var one_es = 1.0 - this.es;\n    var rone_es = 1 / one_es;\n\n    this.radius_p = Math.sqrt(one_es);\n    this.radius_p2 = one_es;\n    this.radius_p_inv2 = rone_es;\n\n    this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.\n  } else {\n    this.radius_p = 1.0;\n    this.radius_p2 = 1.0;\n    this.radius_p_inv2 = 1.0;\n\n    this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.\n  }\n\n  if (!this.title) {\n    this.title = 'Geostationary Satellite View';\n  }\n}\n\nfunction forward(p) {\n  var lon = p.x;\n  var lat = p.y;\n  var tmp, v_x, v_y, v_z;\n  lon = lon - this.long0;\n\n  if (this.shape === 'ellipse') {\n    lat = Math.atan(this.radius_p2 * Math.tan(lat));\n    var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat));\n\n    v_x = r * Math.cos(lon) * Math.cos(lat);\n    v_y = r * Math.sin(lon) * Math.cos(lat);\n    v_z = r * Math.sin(lat);\n\n    if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {\n      p.x = Number.NaN;\n      p.y = Number.NaN;\n      return p;\n    }\n\n    tmp = this.radius_g - v_x;\n    if (this.flip_axis) {\n      p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n      p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n    } else {\n      p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n      p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n    }\n  } else if (this.shape === 'sphere') {\n    tmp = Math.cos(lat);\n    v_x = Math.cos(lon) * tmp;\n    v_y = Math.sin(lon) * tmp;\n    v_z = Math.sin(lat);\n    tmp = this.radius_g - v_x;\n\n    if (this.flip_axis) {\n      p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp));\n      p.y = this.radius_g_1 * Math.atan(v_z / tmp);\n    } else {\n      p.x = this.radius_g_1 * Math.atan(v_y / tmp);\n      p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp));\n    }\n  }\n  p.x = p.x * this.a;\n  p.y = p.y * this.a;\n  return p;\n}\n\nfunction inverse(p) {\n  var v_x = -1.0;\n  var v_y = 0.0;\n  var v_z = 0.0;\n  var a, b, det, k;\n\n  p.x = p.x / this.a;\n  p.y = p.y / this.a;\n\n  if (this.shape === 'ellipse') {\n    if (this.flip_axis) {\n      v_z = Math.tan(p.y / this.radius_g_1);\n      v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z);\n    } else {\n      v_y = Math.tan(p.x / this.radius_g_1);\n      v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y);\n    }\n\n    var v_zp = v_z / this.radius_p;\n    a = v_y * v_y + v_zp * v_zp + v_x * v_x;\n    b = 2 * this.radius_g * v_x;\n    det = (b * b) - 4 * a * this.C;\n\n    if (det < 0.0) {\n      p.x = Number.NaN;\n      p.y = Number.NaN;\n      return p;\n    }\n\n    k = (-b - Math.sqrt(det)) / (2.0 * a);\n    v_x = this.radius_g + k * v_x;\n    v_y *= k;\n    v_z *= k;\n\n    p.x = Math.atan2(v_y, v_x);\n    p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n    p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));\n  } else if (this.shape === 'sphere') {\n    if (this.flip_axis) {\n      v_z = Math.tan(p.y / this.radius_g_1);\n      v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);\n    } else {\n      v_y = Math.tan(p.x / this.radius_g_1);\n      v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);\n    }\n\n    a = v_y * v_y + v_z * v_z + v_x * v_x;\n    b = 2 * this.radius_g * v_x;\n    det = (b * b) - 4 * a * this.C;\n    if (det < 0.0) {\n      p.x = Number.NaN;\n      p.y = Number.NaN;\n      return p;\n    }\n\n    k = (-b - Math.sqrt(det)) / (2.0 * a);\n    v_x = this.radius_g + k * v_x;\n    v_y *= k;\n    v_z *= k;\n\n    p.x = Math.atan2(v_y, v_x);\n    p.y = Math.atan(v_z * Math.cos(p.x) / v_x);\n  }\n  p.x = p.x + this.long0;\n  return p;\n}\n\nexport var names = ['Geostationary Satellite View', 'Geostationary_Satellite', 'geos'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","/**\n * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Equal Earth is a projection inspired by the Robinson projection, but unlike\n * the Robinson projection retains the relative size of areas. The projection\n * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny.\n *\n * Publication:\n * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map\n * projection, International Journal of Geographical Information Science,\n * DOI: 10.1080/13658816.2018.1504949\n *\n * Code released August 2018\n * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018\n * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024\n */\n\nimport adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport authset from '../common/authset';\nimport authlat from '../common/authlat';\n\nvar A1 = 1.340264,\n  A2 = -0.081106,\n  A3 = 0.000893,\n  A4 = 0.003796,\n  M = Math.sqrt(3) / 2.0;\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} es\n * @property {number} e\n * @property {Array<number>} apa\n * @property {number} qp\n * @property {number} rqda\n */\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n  if (this.es !== 0) {\n    this.apa = authset(this.es);\n    this.qp = qsfnz(this.e, 1);\n    this.rqda = Math.sqrt(0.5 * this.qp);\n  }\n}\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function forward(p) {\n  var lam = adjust_lon(p.x - this.long0, this.over);\n  var phi = p.y;\n  var sinphi = Math.sin(phi);\n  if (this.es !== 0) {\n    sinphi = qsfnz(this.e, sinphi) / this.qp;\n  }\n  var paramLat = Math.asin(M * sinphi),\n    paramLatSq = paramLat * paramLat,\n    paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n  p.x = lam * Math.cos(paramLat)\n    / (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)));\n  p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq));\n\n  if (this.es !== 0) {\n    p.x *= this.rqda;\n    p.y *= this.rqda;\n  }\n\n  p.x = this.a * p.x + this.x0;\n  p.y = this.a * p.y + this.y0;\n  return p;\n}\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function inverse(p) {\n  p.x = (p.x - this.x0) / this.a;\n  p.y = (p.y - this.y0) / this.a;\n\n  if (this.es !== 0) {\n    p.x /= this.rqda;\n    p.y /= this.rqda;\n  }\n\n  var EPS = 1e-9,\n    NITER = 12,\n    paramLat = p.y,\n    paramLatSq, paramLatPow6, fy, fpy, dlat, i;\n\n  for (i = 0; i < NITER; ++i) {\n    paramLatSq = paramLat * paramLat;\n    paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n    fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y;\n    fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq);\n    paramLat -= dlat = fy / fpy;\n    if (Math.abs(dlat) < EPS) {\n      break;\n    }\n  }\n  paramLatSq = paramLat * paramLat;\n  paramLatPow6 = paramLatSq * paramLatSq * paramLatSq;\n  p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq))\n    / Math.cos(paramLat);\n  p.y = Math.asin(Math.sin(paramLat) / M);\n\n  if (this.es !== 0) {\n    p.y = authlat(p.y, this.apa);\n  }\n\n  p.x = adjust_lon(p.x + this.long0, this.over);\n  return p;\n}\n\nexport var names = ['eqearth', 'Equal Earth', 'Equal_Earth'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import adjust_lat from '../common/adjust_lat';\nimport adjust_lon from '../common/adjust_lon';\nimport hypot from '../common/hypot';\nimport pj_enfn from '../common/pj_enfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport { HALF_PI } from '../constants/values';\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} phi1\n * @property {number} cphi1\n * @property {number} es\n * @property {Array<number>} en\n * @property {number} m1\n * @property {number} am1\n */\n\nvar EPS10 = 1e-10;\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  var c;\n\n  this.phi1 = this.lat1;\n  if (Math.abs(this.phi1) < EPS10) {\n    throw new Error();\n  }\n  if (this.es) {\n    this.en = pj_enfn(this.es);\n    this.m1 = pj_mlfn(this.phi1, this.am1 = Math.sin(this.phi1),\n      c = Math.cos(this.phi1), this.en);\n    this.am1 = c / (Math.sqrt(1 - this.es * this.am1 * this.am1) * this.am1);\n    this.inverse = e_inv;\n    this.forward = e_fwd;\n  } else {\n    if (Math.abs(this.phi1) + EPS10 >= HALF_PI) {\n      this.cphi1 = 0;\n    } else {\n      this.cphi1 = 1 / Math.tan(this.phi1);\n    }\n    this.inverse = s_inv;\n    this.forward = s_fwd;\n  }\n}\n\nfunction e_fwd(p) {\n  var lam = adjust_lon(p.x - (this.long0 || 0), this.over);\n  var phi = p.y;\n  var rh, E, c;\n  rh = this.am1 + this.m1 - pj_mlfn(phi, E = Math.sin(phi), c = Math.cos(phi), this.en);\n  E = c * lam / (rh * Math.sqrt(1 - this.es * E * E));\n  p.x = rh * Math.sin(E);\n  p.y = this.am1 - rh * Math.cos(E);\n\n  p.x = this.a * p.x + (this.x0 || 0);\n  p.y = this.a * p.y + (this.y0 || 0);\n  return p;\n}\n\nfunction e_inv(p) {\n  p.x = (p.x - (this.x0 || 0)) / this.a;\n  p.y = (p.y - (this.y0 || 0)) / this.a;\n\n  var s, rh, lam, phi;\n  rh = hypot(p.x, p.y = this.am1 - p.y);\n  phi = pj_inv_mlfn(this.am1 + this.m1 - rh, this.es, this.en);\n  if ((s = Math.abs(phi)) < HALF_PI) {\n    s = Math.sin(phi);\n    lam = rh * Math.atan2(p.x, p.y) * Math.sqrt(1 - this.es * s * s) / Math.cos(phi);\n  } else if (Math.abs(s - HALF_PI) <= EPS10) {\n    lam = 0;\n  } else {\n    throw new Error();\n  }\n  p.x = adjust_lon(lam + (this.long0 || 0), this.over);\n  p.y = adjust_lat(phi);\n  return p;\n}\n\nfunction s_fwd(p) {\n  var lam = adjust_lon(p.x - (this.long0 || 0), this.over);\n  var phi = p.y;\n  var E, rh;\n  rh = this.cphi1 + this.phi1 - phi;\n  if (Math.abs(rh) > EPS10) {\n    p.x = rh * Math.sin(E = lam * Math.cos(phi) / rh);\n    p.y = this.cphi1 - rh * Math.cos(E);\n  } else {\n    p.x = p.y = 0;\n  }\n\n  p.x = this.a * p.x + (this.x0 || 0);\n  p.y = this.a * p.y + (this.y0 || 0);\n  return p;\n}\n\nfunction s_inv(p) {\n  p.x = (p.x - (this.x0 || 0)) / this.a;\n  p.y = (p.y - (this.y0 || 0)) / this.a;\n\n  var lam, phi;\n  var rh = hypot(p.x, p.y = this.cphi1 - p.y);\n  phi = this.cphi1 + this.phi1 - rh;\n  if (Math.abs(phi) > HALF_PI) {\n    throw new Error();\n  }\n  if (Math.abs(Math.abs(phi) - HALF_PI) <= EPS10) {\n    lam = 0;\n  } else {\n    lam = rh * Math.atan2(p.x, p.y) / Math.cos(phi);\n  }\n  p.x = adjust_lon(lam + (this.long0 || 0), this.over);\n  p.y = adjust_lat(phi);\n  return p;\n}\n\nexport var names = ['bonne', 'Bonne (Werner lat_1=90)'];\nexport default {\n  init: init,\n  names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport { D2R, R2D, HALF_PI, EPSLN } from '../constants/values';\nimport Proj from '../Proj';\nimport { names as longLatNames } from './longlat';\n\n/**\n    Original projection implementation:\n        https://github.com/OSGeo/PROJ/blob/46c47e9adf6376ae06afabe5d24a0016a05ced82/src/projections/ob_tran.cpp\n\n    Documentation:\n        https://proj.org/operations/projections/ob_tran.html\n\n    References/Formulas:\n        https://pubs.usgs.gov/pp/1395/report.pdf\n\n    Examples:\n        +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90\n        +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90 +lon_0=60\n        +proj=ob_tran +o_proj=moll +o_lat_p=45 +o_lon_p=-90 +lon_0=-90\n*/\n\nconst projectionType = {\n  OBLIQUE: {\n    forward: forwardOblique,\n    inverse: inverseOblique\n  },\n  TRANSVERSE: {\n    forward: forwardTransverse,\n    inverse: inverseTransverse\n  }\n};\n\n/**\n * @typedef {Object} LocalThis\n * @property {number} lamp\n * @property {number} cphip\n * @property {number} sphip\n * @property {Object} projectionType\n * @property {string | undefined} o_proj\n * @property {string | undefined} o_lon_p\n * @property {string | undefined} o_lat_p\n * @property {string | undefined} o_alpha\n * @property {string | undefined} o_lon_c\n * @property {string | undefined} o_lat_c\n * @property {string | undefined} o_lon_1\n * @property {string | undefined} o_lat_1\n * @property {string | undefined} o_lon_2\n * @property {string | undefined} o_lat_2\n * @property {number | undefined} oLongP\n * @property {number | undefined} oLatP\n * @property {number | undefined} oAlpha\n * @property {number | undefined} oLongC\n * @property {number | undefined} oLatC\n * @property {number | undefined} oLong1\n * @property {number | undefined} oLat1\n * @property {number | undefined} oLong2\n * @property {number | undefined} oLat2\n * @property {boolean} isIdentity\n * @property {import('..').Converter} obliqueProjection\n *\n */\n\n/**\n *    Parameters can be from the following sets:\n *       New pole --> o_lat_p, o_lon_p\n *       Rotate about point --> o_alpha, o_lon_c, o_lat_c\n *       New equator points --> lon_1, lat_1, lon_2, lat_2\n *\n *    Per the original source code, the parameter sets are\n *    checked in the order of the object below.\n */\nconst paramSets = {\n  ROTATE: {\n    o_alpha: 'oAlpha',\n    o_lon_c: 'oLongC',\n    o_lat_c: 'oLatC'\n  },\n  NEW_POLE: {\n    o_lat_p: 'oLatP',\n    o_lon_p: 'oLongP'\n  },\n  NEW_EQUATOR: {\n    o_lon_1: 'oLong1',\n    o_lat_1: 'oLat1',\n    o_lon_2: 'oLong2',\n    o_lat_2: 'oLat2'\n  }\n};\n\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function init() {\n  this.x0 = this.x0 || 0;\n  this.y0 = this.y0 || 0;\n  this.long0 = this.long0 || 0;\n  this.title = this.title || 'General Oblique Transformation';\n  this.isIdentity = longLatNames.includes(this.o_proj);\n\n  /** Verify required parameters exist */\n  if (!this.o_proj) {\n    throw new Error('Missing parameter: o_proj');\n  }\n\n  if (this.o_proj === `ob_tran`) {\n    throw new Error('Invalid value for o_proj: ' + this.o_proj);\n  }\n\n  const newProjStr = this.projStr.replace('+proj=ob_tran', '').replace('+o_proj=', '+proj=').trim();\n\n  /** @type {import('../defs.js').ProjectionDefinition} */\n  const oProj = Proj(newProjStr);\n  if (!oProj) {\n    throw new Error('Invalid parameter: o_proj. Unknown projection ' + this.o_proj);\n  }\n  oProj.long0 = 0; // we handle long0 before/after forward/inverse\n  this.obliqueProjection = oProj;\n\n  let matchedSet;\n  const paramSetsKeys = Object.keys(paramSets);\n\n  /**\n   * parse strings, convert to radians, throw on NaN\n   * @param {string} name\n   * @returns {number | undefined}\n   */\n  const parseParam = (name) => {\n    if (typeof this[name] === `undefined`) {\n      return undefined;\n    }\n    const val = parseFloat(this[name]) * D2R;\n    if (isNaN(val)) {\n      throw new Error('Invalid value for ' + name + ': ' + this[name]);\n    }\n    return val;\n  };\n\n  for (let i = 0; i < paramSetsKeys.length; i++) {\n    const setKey = paramSetsKeys[i];\n    const set = paramSets[setKey];\n    const params = Object.entries(set);\n    const setHasParams = params.some(\n      ([p]) => typeof this[p] !== 'undefined'\n    );\n    if (!setHasParams) {\n      continue;\n    }\n    matchedSet = set;\n    for (let ii = 0; ii < params.length; ii++) {\n      const [inputParam, param] = params[ii];\n      const val = parseParam(inputParam);\n      if (typeof val === 'undefined') {\n        throw new Error('Missing parameter: ' + inputParam + '.');\n      }\n      this[param] = val;\n    }\n    break;\n  }\n\n  if (!matchedSet) {\n    throw new Error('No valid parameters provided for ob_tran projection.');\n  }\n\n  const { lamp, phip } = createRotation(this, matchedSet);\n  this.lamp = lamp;\n\n  if (Math.abs(phip) > EPSLN) {\n    this.cphip = Math.cos(phip);\n    this.sphip = Math.sin(phip);\n    this.projectionType = projectionType.OBLIQUE;\n  } else {\n    this.projectionType = projectionType.TRANSVERSE;\n  }\n}\n\n// ob_tran forward equations--mapping (lat,long) to (x,y)\n// transverse (90 degrees from normal orientation) - forwardTransverse\n// or oblique (arbitrary angle) used based on parameters - forwardOblique\n// -----------------------------------------------------------------\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function forward(p) {\n  return this.projectionType.forward(this, p);\n}\n\n// inverse equations--mapping (x,y) to (lat,long)\n// transverse: inverseTransverse\n// oblique: inverseOblique\n// -----------------------------------------------------------------\n/** @this {import('../defs.js').ProjectionDefinition & LocalThis} */\nexport function inverse(p) {\n  return this.projectionType.inverse(this, p);\n}\n\n/**\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} params - Initialized projection definition\n * @param {Object} how - Transformation method\n * @returns {{phip: number, lamp: number}}\n */\nfunction createRotation(params, how) {\n  let phip, lamp;\n  if (how === paramSets.ROTATE) {\n    let lamc = params.oLongC;\n    let phic = params.oLatC;\n    let alpha = params.oAlpha;\n    if (Math.abs(Math.abs(phic) - HALF_PI) <= EPSLN) {\n      throw new Error('Invalid value for o_lat_c: ' + params.o_lat_c + ' should be < 90°');\n    }\n    lamp = lamc + Math.atan2(-1 * Math.cos(alpha), -1 * Math.sin(alpha) * Math.sin(phic));\n    phip = Math.asin(Math.cos(phic) * Math.sin(alpha));\n  } else if (how === paramSets.NEW_POLE) {\n    lamp = params.oLongP;\n    phip = params.oLatP;\n  } else {\n    let lam1 = params.oLong1;\n    let phi1 = params.oLat1;\n    let lam2 = params.oLong2;\n    let phi2 = params.oLat2;\n    let con = Math.abs(phi1);\n\n    if (Math.abs(phi1) > HALF_PI - EPSLN) {\n      throw new Error('Invalid value for o_lat_1: ' + params.o_lat_1 + ' should be < 90°');\n    }\n\n    if (Math.abs(phi2) > HALF_PI - EPSLN) {\n      throw new Error('Invalid value for o_lat_2: ' + params.o_lat_2 + ' should be < 90°');\n    }\n\n    if (Math.abs(phi1 - phi2) < EPSLN) {\n      throw new Error('Invalid value for o_lat_1 and o_lat_2: o_lat_1 should be different from o_lat_2');\n    }\n    if (con < EPSLN) {\n      throw new Error('Invalid value for o_lat_1: o_lat_1 should be different from zero');\n    }\n\n    lamp = Math.atan2(\n      (Math.cos(phi1) * Math.sin(phi2) * Math.cos(lam1))\n      - (Math.sin(phi1) * Math.cos(phi2) * Math.cos(lam2)),\n      (Math.sin(phi1) * Math.cos(phi2) * Math.sin(lam2))\n      - (Math.cos(phi1) * Math.sin(phi2) * Math.sin(lam1))\n    );\n\n    phip = Math.atan(-1 * Math.cos(lamp - lam1) / Math.tan(phi1));\n  }\n\n  return { lamp, phip };\n}\n\n/**\n * Forward (lng, lat) to (x, y) for oblique case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction forwardOblique(self, lp) {\n  let { x: lam, y: phi } = lp;\n  lam = adjust_lon(lam - self.long0, self.over);\n  const coslam = Math.cos(lam);\n  const sinphi = Math.sin(phi);\n  const cosphi = Math.cos(phi);\n\n  lp.x = adjust_lon(\n    Math.atan2(\n      cosphi * Math.sin(lam),\n      (self.sphip * cosphi * coslam) + (self.cphip * sinphi)\n    ) + self.lamp\n  );\n  lp.y = Math.asin(\n    (self.sphip * sinphi) - (self.cphip * cosphi * coslam)\n  );\n\n  const result = self.obliqueProjection.forward(lp);\n  if (self.isIdentity) {\n    result.x *= R2D;\n    result.y *= R2D;\n  }\n  return result;\n}\n\n/**\n * Forward (lng, lat) to (x, y) for transverse case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction forwardTransverse(self, lp) {\n  let { x: lam, y: phi } = lp;\n  lam = adjust_lon(lam - self.long0, self.over);\n  const cosphi = Math.cos(phi);\n  const coslam = Math.cos(lam);\n  lp.x = adjust_lon(\n    Math.atan2(\n      cosphi * Math.sin(lam),\n      Math.sin(phi)\n    ) + self.lamp\n  );\n  lp.y = Math.asin(-1 * cosphi * coslam);\n\n  const result = self.obliqueProjection.forward(lp);\n\n  if (self.isIdentity) {\n    result.x *= R2D;\n    result.y *= R2D;\n  }\n  return result;\n}\n\n/**\n * Inverse (x, y) to (lng, lat) for oblique case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction inverseOblique(self, lp) {\n  if (self.isIdentity) {\n    lp.x *= D2R;\n    lp.y *= D2R;\n  }\n\n  const innerLp = self.obliqueProjection.inverse(lp);\n  let { x: lam, y: phi } = innerLp;\n\n  if (lam < Number.MAX_VALUE) {\n    lam -= self.lamp;\n    const coslam = Math.cos(lam);\n    const sinphi = Math.sin(phi);\n    const cosphi = Math.cos(phi);\n    lp.x = Math.atan2(\n      cosphi * Math.sin(lam),\n      (self.sphip * cosphi * coslam) - (self.cphip * sinphi)\n    );\n    lp.y = Math.asin(\n      (self.sphip * sinphi) + (self.cphip * cosphi * coslam)\n    );\n  }\n\n  lp.x = adjust_lon(lp.x + self.long0);\n  return lp;\n}\n\n/**\n * Inverse (x, y) to (lng, lat) for transverse case\n * @param {import('../defs.js').ProjectionDefinition & LocalThis} self\n * @param {{x: number, y: number}} lp - lambda, phi\n */\nfunction inverseTransverse(self, lp) {\n  if (self.isIdentity) {\n    lp.x *= D2R;\n    lp.y *= D2R;\n  }\n\n  const innerLp = self.obliqueProjection.inverse(lp);\n  let { x: lam, y: phi } = innerLp;\n\n  if (lam < Number.MAX_VALUE) {\n    const cosphi = Math.cos(phi);\n    lam -= self.lamp;\n    lp.x = Math.atan2(\n      cosphi * Math.sin(lam),\n      -1 * Math.sin(phi)\n    );\n    lp.y = Math.asin(\n      cosphi * Math.cos(lam)\n    );\n  }\n\n  lp.x = adjust_lon(lp.x + self.long0);\n  return lp;\n}\n\nexport var names = ['General Oblique Transformation', 'General_Oblique_Transformation', 'ob_tran'];\nexport default {\n  init: init,\n  forward: forward,\n  inverse: inverse,\n  names: names\n};\n","import core from './core';\nimport Proj from './Proj';\nimport Point from './Point';\nimport common from './common/toPoint';\nimport defs from './defs';\nimport nadgrid from './nadgrid';\nimport transform from './transform';\nimport mgrs from 'mgrs';\nimport includedProjections from '../projs';\n\n/**\n * @typedef {Object} Mgrs\n * @property {(lonlat: [number, number]) => string} forward\n * @property {(mgrsString: string) => [number, number, number, number]} inverse\n * @property {(mgrsString: string) => [number, number]} toPoint\n */\n\n/**\n * @typedef {import('./defs').ProjectionDefinition} ProjectionDefinition\n * @typedef {import('./core').TemplateCoordinates} TemplateCoordinates\n * @typedef {import('./core').InterfaceCoordinates} InterfaceCoordinates\n * @typedef {import('./core').Converter} Converter\n * @typedef {import('./Proj').DatumDefinition} DatumDefinition\n */\n\n/**\n * @template {import('./core').TemplateCoordinates} T\n * @type {core<T> & {defaultDatum: string, Proj: typeof Proj, WGS84: Proj, Point: typeof Point, toPoint: typeof common, defs: typeof defs, nadgrid: typeof nadgrid, transform: typeof transform, mgrs: Mgrs, version: string}}\n */\nconst proj4 = Object.assign(core, {\n  defaultDatum: 'WGS84',\n  Proj,\n  WGS84: new Proj('WGS84'),\n  Point,\n  toPoint: common,\n  defs,\n  nadgrid,\n  transform,\n  mgrs,\n  version: '__VERSION__'\n});\nincludedProjections(proj4);\nexport default proj4;\n","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport eck6 from './lib/projections/eck6';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nimport tpers from './lib/projections/tpers';\nimport geos from './lib/projections/geos';\nimport eqearth from './lib/projections/eqearth';\nimport bonne from './lib/projections/bonne';\nimport ob_tran from './lib/projections/ob_tran';\nexport default function (proj4) {\n  proj4.Proj.projections.add(tmerc);\n  proj4.Proj.projections.add(etmerc);\n  proj4.Proj.projections.add(utm);\n  proj4.Proj.projections.add(sterea);\n  proj4.Proj.projections.add(stere);\n  proj4.Proj.projections.add(somerc);\n  proj4.Proj.projections.add(omerc);\n  proj4.Proj.projections.add(lcc);\n  proj4.Proj.projections.add(krovak);\n  proj4.Proj.projections.add(cass);\n  proj4.Proj.projections.add(laea);\n  proj4.Proj.projections.add(aea);\n  proj4.Proj.projections.add(gnom);\n  proj4.Proj.projections.add(cea);\n  proj4.Proj.projections.add(eqc);\n  proj4.Proj.projections.add(poly);\n  proj4.Proj.projections.add(nzmg);\n  proj4.Proj.projections.add(mill);\n  proj4.Proj.projections.add(sinu);\n  proj4.Proj.projections.add(eck6);\n  proj4.Proj.projections.add(moll);\n  proj4.Proj.projections.add(eqdc);\n  proj4.Proj.projections.add(vandg);\n  proj4.Proj.projections.add(aeqd);\n  proj4.Proj.projections.add(ortho);\n  proj4.Proj.projections.add(qsc);\n  proj4.Proj.projections.add(robin);\n  proj4.Proj.projections.add(geocent);\n  proj4.Proj.projections.add(tpers);\n  proj4.Proj.projections.add(geos);\n  proj4.Proj.projections.add(eqearth);\n  proj4.Proj.projections.add(bonne);\n  proj4.Proj.projections.add(ob_tran);\n}\n","'use strict';\n\nvar callBound = require('call-bound');\nvar isRegex = require('is-regex');\n\nvar $exec = callBound('RegExp.prototype.exec');\nvar $TypeError = require('es-errors/type');\n\n/** @type {import('.')} */\nmodule.exports = function regexTester(regex) {\n\tif (!isRegex(regex)) {\n\t\tthrow new $TypeError('`regex` must be a RegExp');\n\t}\n\treturn function test(s) {\n\t\treturn $exec(regex, s) !== null;\n\t};\n};\n","/*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */\n!function(n){\"function\"==typeof define&&define.amd?define([\"jquery\"],n):\"object\"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(e)),n(t),t}:n(jQuery)}(function(t){var e,n,s,p,r,o,h,f,g,m,y,v,i,a,_,s=((u=t&&t.fn&&t.fn.select2&&t.fn.select2.amd?t.fn.select2.amd:u)&&u.requirejs||(u?n=u:u={},g={},m={},y={},v={},i=Object.prototype.hasOwnProperty,a=[].slice,_=/\\.js$/,h=function(e,t){var n,s,i=c(e),r=i[0],t=t[1];return e=i[1],r&&(n=x(r=l(r,t))),r?e=n&&n.normalize?n.normalize(e,(s=t,function(e){return l(e,s)})):l(e,t):(r=(i=c(e=l(e,t)))[0],e=i[1],r&&(n=x(r))),{f:r?r+\"!\"+e:e,n:e,pr:r,p:n}},f={require:function(e){return w(e)},exports:function(e){var t=g[e];return void 0!==t?t:g[e]={}},module:function(e){return{id:e,uri:\"\",exports:g[e],config:(t=e,function(){return y&&y.config&&y.config[t]||{}})};var t}},r=function(e,t,n,s){var i,r,o,a,l,c=[],u=typeof n,d=A(s=s||e);if(\"undefined\"==u||\"function\"==u){for(t=!t.length&&n.length?[\"require\",\"exports\",\"module\"]:t,a=0;a<t.length;a+=1)if(\"require\"===(r=(o=h(t[a],d)).f))c[a]=f.require(e);else if(\"exports\"===r)c[a]=f.exports(e),l=!0;else if(\"module\"===r)i=c[a]=f.module(e);else if(b(g,r)||b(m,r)||b(v,r))c[a]=x(r);else{if(!o.p)throw new Error(e+\" missing \"+r);o.p.load(o.n,w(s,!0),function(t){return function(e){g[t]=e}}(r),{}),c[a]=g[r]}u=n?n.apply(g[e],c):void 0,e&&(i&&i.exports!==p&&i.exports!==g[e]?g[e]=i.exports:u===p&&l||(g[e]=u))}else e&&(g[e]=n)},e=n=o=function(e,t,n,s,i){if(\"string\"==typeof e)return f[e]?f[e](t):x(h(e,A(t)).f);if(!e.splice){if((y=e).deps&&o(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=p}return t=t||function(){},\"function\"==typeof n&&(n=s,s=i),s?r(p,e,t,n):setTimeout(function(){r(p,e,t,n)},4),o},o.config=function(e){return o(e)},e._defined=g,(s=function(e,t,n){if(\"string\"!=typeof e)throw new Error(\"See almond README: incorrect module build, no module name\");t.splice||(n=t,t=[]),b(g,e)||b(m,e)||(m[e]=[e,t,n])}).amd={jQuery:!0},u.requirejs=e,u.require=n,u.define=s),u.define(\"almond\",function(){}),u.define(\"jquery\",[],function(){var e=t||$;return null==e&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),e}),u.define(\"select2/utils\",[\"jquery\"],function(r){var s={};function c(e){var t,n=e.prototype,s=[];for(t in n)\"function\"==typeof n[t]&&\"constructor\"!==t&&s.push(t);return s}s.Extend=function(e,t){var n,s={}.hasOwnProperty;function i(){this.constructor=e}for(n in t)s.call(t,n)&&(e[n]=t[n]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},s.Decorate=function(s,i){var e=c(i),t=c(s);function r(){var e=Array.prototype.unshift,t=i.prototype.constructor.length,n=s.prototype.constructor;0<t&&(e.call(arguments,s.prototype.constructor),n=i.prototype.constructor),n.apply(this,arguments)}i.displayName=s.displayName,r.prototype=new function(){this.constructor=r};for(var n=0;n<t.length;n++){var o=t[n];r.prototype[o]=s.prototype[o]}for(var a=0;a<e.length;a++){var l=e[a];r.prototype[l]=function(e){var t=function(){};e in r.prototype&&(t=r.prototype[e]);var n=i.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}(l)}return r};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},0===(n=null==n?[]:n).length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,s=e.length;n<s;n++)e[n].apply(this,t)},s.Observable=e,s.generateChars=function(e){for(var t=\"\",n=0;n<e;n++)t+=Math.floor(36*Math.random()).toString(36);return t},s.bind=function(e,t){return function(){e.apply(t,arguments)}},s._convertData=function(e){for(var t in e){var n=t.split(\"-\"),s=e;if(1!==n.length){for(var i=0;i<n.length;i++){var r=n[i];(r=r.substring(0,1).toLowerCase()+r.substring(1))in s||(s[r]={}),i==n.length-1&&(s[r]=e[t]),s=s[r]}delete e[t]}}return e},s.hasScroll=function(e,t){var n=r(t),s=t.style.overflowX,i=t.style.overflowY;return(s!==i||\"hidden\"!==i&&\"visible\"!==i)&&(\"scroll\"===s||\"scroll\"===i||(n.innerHeight()<t.scrollHeight||n.innerWidth()<t.scrollWidth))},s.escapeMarkup=function(e){var t={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#47;\"};return\"string\"!=typeof e?e:String(e).replace(/[&<>\"'\\/\\\\]/g,function(e){return t[e]})},s.__cache={};var n=0;return s.GetUniqueElementId=function(e){var t=e.getAttribute(\"data-select2-id\");return null!=t||(t=e.id?\"select2-data-\"+e.id:\"select2-data-\"+(++n).toString()+\"-\"+s.generateChars(4),e.setAttribute(\"data-select2-id\",t)),t},s.StoreData=function(e,t,n){e=s.GetUniqueElementId(e);s.__cache[e]||(s.__cache[e]={}),s.__cache[e][t]=n},s.GetData=function(e,t){var n=s.GetUniqueElementId(e);return t?s.__cache[n]&&null!=s.__cache[n][t]?s.__cache[n][t]:r(e).data(t):s.__cache[n]},s.RemoveData=function(e){var t=s.GetUniqueElementId(e);null!=s.__cache[t]&&delete s.__cache[t],e.removeAttribute(\"data-select2-id\")},s.copyNonInternalCssClasses=function(e,t){var n=(n=e.getAttribute(\"class\").trim().split(/\\s+/)).filter(function(e){return 0===e.indexOf(\"select2-\")}),t=(t=t.getAttribute(\"class\").trim().split(/\\s+/)).filter(function(e){return 0!==e.indexOf(\"select2-\")}),t=n.concat(t);e.setAttribute(\"class\",t.join(\" \"))},s}),u.define(\"select2/results\",[\"jquery\",\"./utils\"],function(d,p){function s(e,t,n){this.$element=e,this.data=n,this.options=t,s.__super__.constructor.call(this)}return p.Extend(s,p.Observable),s.prototype.render=function(){var e=d('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e},s.prototype.clear=function(){this.$results.empty()},s.prototype.displayMessage=function(e){var t=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var n=d('<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'),s=this.options.get(\"translations\").get(e.message);n.append(t(s(e.args))),n[0].className+=\" select2-results__message\",this.$results.append(n)},s.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},s.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var s=e.results[n],s=this.option(s);t.push(s)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},s.prototype.position=function(e,t){t.find(\".select2-results\").append(e)},s.prototype.sort=function(e){return this.options.get(\"sorter\")(e)},s.prototype.highlightFirstItem=function(){var e=this.$results.find(\".select2-results__option--selectable\"),t=e.filter(\".select2-results__option--selected\");(0<t.length?t:e).first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},s.prototype.setClasses=function(){var t=this;this.data.current(function(e){var s=e.map(function(e){return e.id.toString()});t.$results.find(\".select2-results__option--selectable\").each(function(){var e=d(this),t=p.GetData(this,\"data\"),n=\"\"+t.id;null!=t.element&&t.element.selected||null==t.element&&-1<s.indexOf(n)?(this.classList.add(\"select2-results__option--selected\"),e.attr(\"aria-selected\",\"true\")):(this.classList.remove(\"select2-results__option--selected\"),e.attr(\"aria-selected\",\"false\"))})})},s.prototype.showLoading=function(e){this.hideLoading();e={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(e)},e=this.option(e);e.className+=\" loading-results\",this.$results.prepend(e)},s.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},s.prototype.option=function(e){var t=document.createElement(\"li\");t.classList.add(\"select2-results__option\"),t.classList.add(\"select2-results__option--selectable\");var n,s={role:\"option\"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(n in(null!=e.element&&i.call(e.element,\":disabled\")||null==e.element&&e.disabled)&&(s[\"aria-disabled\"]=\"true\",t.classList.remove(\"select2-results__option--selectable\"),t.classList.add(\"select2-results__option--disabled\")),null==e.id&&t.classList.remove(\"select2-results__option--selectable\"),null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(s.role=\"group\",s[\"aria-label\"]=e.text,t.classList.remove(\"select2-results__option--selectable\"),t.classList.add(\"select2-results__option--group\")),s){var r=s[n];t.setAttribute(n,r)}if(e.children){var o=d(t),a=document.createElement(\"strong\");a.className=\"select2-results__group\",this.template(e,a);for(var l=[],c=0;c<e.children.length;c++){var u=e.children[c],u=this.option(u);l.push(u)}i=d(\"<ul></ul>\",{class:\"select2-results__options select2-results__options--nested\",role:\"none\"});i.append(l),o.append(a),o.append(i)}else this.template(e,t);return p.StoreData(t,\"data\",e),t},s.prototype.bind=function(t,e){var i=this,n=t.id+\"-results\";this.$results.attr(\"id\",n),t.on(\"results:all\",function(e){i.clear(),i.append(e.data),t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on(\"results:append\",function(e){i.append(e.data),t.isOpen()&&i.setClasses()}),t.on(\"query\",function(e){i.hideMessages(),i.showLoading(e)}),t.on(\"select\",function(){t.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())}),t.on(\"unselect\",function(){t.isOpen()&&(i.setClasses(),i.options.get(\"scrollAfterSelect\")&&i.highlightFirstItem())}),t.on(\"open\",function(){i.$results.attr(\"aria-expanded\",\"true\"),i.$results.attr(\"aria-hidden\",\"false\"),i.setClasses(),i.ensureHighlightVisible()}),t.on(\"close\",function(){i.$results.attr(\"aria-expanded\",\"false\"),i.$results.attr(\"aria-hidden\",\"true\"),i.$results.removeAttr(\"aria-activedescendant\")}),t.on(\"results:toggle\",function(){var e=i.getHighlightedResults();0!==e.length&&e.trigger(\"mouseup\")}),t.on(\"results:select\",function(){var e,t=i.getHighlightedResults();0!==t.length&&(e=p.GetData(t[0],\"data\"),t.hasClass(\"select2-results__option--selected\")?i.trigger(\"close\",{}):i.trigger(\"select\",{data:e}))}),t.on(\"results:previous\",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(\".select2-results__option--selectable\"),s=n.index(t);s<=0||(e=s-1,0===t.length&&(e=0),(s=n.eq(e)).trigger(\"mouseenter\"),t=i.$results.offset().top,n=s.offset().top,s=i.$results.scrollTop()+(n-t),0===e?i.$results.scrollTop(0):n-t<0&&i.$results.scrollTop(s))}),t.on(\"results:next\",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(\".select2-results__option--selectable\"),s=n.index(t)+1;s>=n.length||((e=n.eq(s)).trigger(\"mouseenter\"),t=i.$results.offset().top+i.$results.outerHeight(!1),n=e.offset().top+e.outerHeight(!1),e=i.$results.scrollTop()+n-t,0===s?i.$results.scrollTop(0):t<n&&i.$results.scrollTop(e))}),t.on(\"results:focus\",function(e){e.element[0].classList.add(\"select2-results__option--highlighted\"),e.element[0].setAttribute(\"aria-selected\",\"true\")}),t.on(\"results:message\",function(e){i.displayMessage(e)}),d.fn.mousewheel&&this.$results.on(\"mousewheel\",function(e){var t=i.$results.scrollTop(),n=i.$results.get(0).scrollHeight-t+e.deltaY,t=0<e.deltaY&&t-e.deltaY<=0,n=e.deltaY<0&&n<=i.$results.height();t?(i.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):n&&(i.$results.scrollTop(i.$results.get(0).scrollHeight-i.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on(\"mouseup\",\".select2-results__option--selectable\",function(e){var t=d(this),n=p.GetData(this,\"data\");t.hasClass(\"select2-results__option--selected\")?i.options.get(\"multiple\")?i.trigger(\"unselect\",{originalEvent:e,data:n}):i.trigger(\"close\",{}):i.trigger(\"select\",{originalEvent:e,data:n})}),this.$results.on(\"mouseenter\",\".select2-results__option--selectable\",function(e){var t=p.GetData(this,\"data\");i.getHighlightedResults().removeClass(\"select2-results__option--highlighted\").attr(\"aria-selected\",\"false\"),i.trigger(\"results:focus\",{data:t,element:d(this)})})},s.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},s.prototype.destroy=function(){this.$results.remove()},s.prototype.ensureHighlightVisible=function(){var e,t,n,s,i=this.getHighlightedResults();0!==i.length&&(e=this.$results.find(\".select2-results__option--selectable\").index(i),s=this.$results.offset().top,t=i.offset().top,n=this.$results.scrollTop()+(t-s),s=t-s,n-=2*i.outerHeight(!1),e<=2?this.$results.scrollTop(0):(s>this.$results.outerHeight()||s<0)&&this.$results.scrollTop(n))},s.prototype.template=function(e,t){var n=this.options.get(\"templateResult\"),s=this.options.get(\"escapeMarkup\"),e=n(e,t);null==e?t.style.display=\"none\":\"string\"==typeof e?t.innerHTML=s(e):d(t).append(e)},s}),u.define(\"select2/keys\",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),u.define(\"select2/selection/base\",[\"jquery\",\"../utils\",\"../keys\"],function(n,s,i){function r(e,t){this.$element=e,this.options=t,r.__super__.constructor.call(this)}return s.Extend(r,s.Observable),r.prototype.render=function(){var e=n('<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>');return this._tabindex=0,null!=s.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=s.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),e.attr(\"title\",this.$element.attr(\"title\")),e.attr(\"tabindex\",this._tabindex),e.attr(\"aria-disabled\",\"false\"),this.$selection=e},r.prototype.bind=function(e,t){var n=this,s=e.id+\"-results\";this.container=e,this.$selection.on(\"focus\",function(e){n.trigger(\"focus\",e)}),this.$selection.on(\"blur\",function(e){n._handleBlur(e)}),this.$selection.on(\"keydown\",function(e){n.trigger(\"keypress\",e),e.which===i.SPACE&&e.preventDefault()}),e.on(\"results:focus\",function(e){n.$selection.attr(\"aria-activedescendant\",e.data._resultId)}),e.on(\"selection:update\",function(e){n.update(e.data)}),e.on(\"open\",function(){n.$selection.attr(\"aria-expanded\",\"true\"),n.$selection.attr(\"aria-owns\",s),n._attachCloseHandler(e)}),e.on(\"close\",function(){n.$selection.attr(\"aria-expanded\",\"false\"),n.$selection.removeAttr(\"aria-activedescendant\"),n.$selection.removeAttr(\"aria-owns\"),n.$selection.trigger(\"focus\"),n._detachCloseHandler(e)}),e.on(\"enable\",function(){n.$selection.attr(\"tabindex\",n._tabindex),n.$selection.attr(\"aria-disabled\",\"false\")}),e.on(\"disable\",function(){n.$selection.attr(\"tabindex\",\"-1\"),n.$selection.attr(\"aria-disabled\",\"true\")})},r.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger(\"blur\",e)},1)},r.prototype._attachCloseHandler=function(e){n(document.body).on(\"mousedown.select2.\"+e.id,function(e){var t=n(e.target).closest(\".select2\");n(\".select2.select2-container--open\").each(function(){this!=t[0]&&s.GetData(this,\"element\").select2(\"close\")})})},r.prototype._detachCloseHandler=function(e){n(document.body).off(\"mousedown.select2.\"+e.id)},r.prototype.position=function(e,t){t.find(\".selection\").append(e)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(e){throw new Error(\"The `update` method must be defined in child classes.\")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get(\"disabled\")},r}),u.define(\"select2/selection/single\",[\"jquery\",\"./base\",\"../utils\",\"../keys\"],function(e,t,n,s){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e[0].classList.add(\"select2-selection--single\"),e.html('<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var s=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",s).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",s),this.$selection.attr(\"aria-controls\",s),this.$selection.on(\"mousedown\",function(e){1===e.which&&n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"focus\",function(e){}),this.$selection.on(\"blur\",function(e){}),t.on(\"focus\",function(e){t.isOpen()||n.$selection.trigger(\"focus\")})},i.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},i.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},i.prototype.selectionContainer=function(){return e(\"<span></span>\")},i.prototype.update=function(e){var t,n;0!==e.length?(n=e[0],t=this.$selection.find(\".select2-selection__rendered\"),e=this.display(n,t),t.empty().append(e),(n=n.title||n.text)?t.attr(\"title\",n):t.removeAttr(\"title\")):this.clear()},i}),u.define(\"select2/selection/multiple\",[\"jquery\",\"./base\",\"../utils\"],function(i,e,c){function r(e,t){r.__super__.constructor.apply(this,arguments)}return c.Extend(r,e),r.prototype.render=function(){var e=r.__super__.render.call(this);return e[0].classList.add(\"select2-selection--multiple\"),e.html('<ul class=\"select2-selection__rendered\"></ul>'),e},r.prototype.bind=function(e,t){var n=this;r.__super__.bind.apply(this,arguments);var s=e.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",s),this.$selection.on(\"click\",function(e){n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"click\",\".select2-selection__choice__remove\",function(e){var t;n.isDisabled()||(t=i(this).parent(),t=c.GetData(t[0],\"data\"),n.trigger(\"unselect\",{originalEvent:e,data:t}))}),this.$selection.on(\"keydown\",\".select2-selection__choice__remove\",function(e){n.isDisabled()||e.stopPropagation()})},r.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},r.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},r.prototype.selectionContainer=function(){return i('<li class=\"select2-selection__choice\"><button type=\"button\" class=\"select2-selection__choice__remove\" tabindex=\"-1\"><span aria-hidden=\"true\">&times;</span></button><span class=\"select2-selection__choice__display\"></span></li>')},r.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=this.$selection.find(\".select2-selection__rendered\").attr(\"id\")+\"-choice-\",s=0;s<e.length;s++){var i=e[s],r=this.selectionContainer(),o=this.display(i,r),a=n+c.generateChars(4)+\"-\";i.id?a+=i.id:a+=c.generateChars(4),r.find(\".select2-selection__choice__display\").append(o).attr(\"id\",a);var l=i.title||i.text;l&&r.attr(\"title\",l);o=this.options.get(\"translations\").get(\"removeItem\"),l=r.find(\".select2-selection__choice__remove\");l.attr(\"title\",o()),l.attr(\"aria-label\",o()),l.attr(\"aria-describedby\",a),c.StoreData(r[0],\"data\",i),t.push(r)}this.$selection.find(\".select2-selection__rendered\").append(t)}},r}),u.define(\"select2/selection/placeholder\",[],function(){function e(e,t,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n)}return e.prototype.normalizePlaceholder=function(e,t){return t=\"string\"==typeof t?{id:\"\",text:t}:t},e.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();n.html(this.display(t)),n[0].classList.add(\"select2-selection__placeholder\"),n[0].classList.remove(\"select2-selection__choice\");t=t.title||t.text||n.text();return this.$selection.find(\".select2-selection__rendered\").attr(\"title\",t),n},e.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1<t.length||n)return e.call(this,t);this.clear();t=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(t)},e}),u.define(\"select2/selection/allowClear\",[\"jquery\",\"../keys\",\"../utils\"],function(i,s,a){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",function(e){s._handleClear(e)}),t.on(\"keypress\",function(e){s._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(\".select2-selection__clear\");if(0!==n.length){t.stopPropagation();var s=a.GetData(n[0],\"data\"),i=this.$element.val();this.$element.val(this.placeholder.id);var r={data:s};if(this.trigger(\"clear\",r),r.prevented)this.$element.val(i);else{for(var o=0;o<s.length;o++)if(r={data:s[o]},this.trigger(\"unselect\",r),r.prevented)return void this.$element.val(i);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=s.DELETE&&t.which!=s.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){var n,s;e.call(this,t),this.$selection.find(\".select2-selection__clear\").remove(),this.$selection[0].classList.remove(\"select2-selection--clearable\"),0<this.$selection.find(\".select2-selection__placeholder\").length||0===t.length||(n=this.$selection.find(\".select2-selection__rendered\").attr(\"id\"),s=this.options.get(\"translations\").get(\"removeAllItems\"),(e=i('<button type=\"button\" class=\"select2-selection__clear\" tabindex=\"-1\"><span aria-hidden=\"true\">&times;</span></button>')).attr(\"title\",s()),e.attr(\"aria-label\",s()),e.attr(\"aria-describedby\",n),a.StoreData(e[0],\"data\",t),this.$selection.prepend(e),this.$selection[0].classList.add(\"select2-selection--clearable\"))},e}),u.define(\"select2/selection/search\",[\"jquery\",\"../utils\",\"../keys\"],function(s,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=this.options.get(\"translations\").get(\"search\"),n=s('<span class=\"select2-search select2-search--inline\"><textarea class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" ></textarea></span>');this.$searchContainer=n,this.$search=n.find(\"textarea\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",t());e=e.call(this);return this._transferTabIndex(),e.append(this.$searchContainer),e},e.prototype.bind=function(e,t,n){var s=this,i=t.id+\"-results\",r=t.id+\"-container\";e.call(this,t,n),s.$search.attr(\"aria-describedby\",r),t.on(\"open\",function(){s.$search.attr(\"aria-controls\",i),s.$search.trigger(\"focus\")}),t.on(\"close\",function(){s.$search.val(\"\"),s.resizeSearch(),s.$search.removeAttr(\"aria-controls\"),s.$search.removeAttr(\"aria-activedescendant\"),s.$search.trigger(\"focus\")}),t.on(\"enable\",function(){s.$search.prop(\"disabled\",!1),s._transferTabIndex()}),t.on(\"disable\",function(){s.$search.prop(\"disabled\",!0)}),t.on(\"focus\",function(e){s.$search.trigger(\"focus\")}),t.on(\"results:focus\",function(e){e.data._resultId?s.$search.attr(\"aria-activedescendant\",e.data._resultId):s.$search.removeAttr(\"aria-activedescendant\")}),this.$selection.on(\"focusin\",\".select2-search--inline\",function(e){s.trigger(\"focus\",e)}),this.$selection.on(\"focusout\",\".select2-search--inline\",function(e){s._handleBlur(e)}),this.$selection.on(\"keydown\",\".select2-search--inline\",function(e){var t;e.stopPropagation(),s.trigger(\"keypress\",e),s._keyUpPrevented=e.isDefaultPrevented(),e.which!==l.BACKSPACE||\"\"!==s.$search.val()||0<(t=s.$selection.find(\".select2-selection__choice\").last()).length&&(t=a.GetData(t[0],\"data\"),s.searchRemoveChoice(t),e.preventDefault())}),this.$selection.on(\"click\",\".select2-search--inline\",function(e){s.$search.val()&&e.stopPropagation()});var t=document.documentMode,o=t&&t<=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",function(e){o?s.$selection.off(\"input.search input.searchcheck\"):s.$selection.off(\"keyup.search\")}),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",function(e){var t;o&&\"input\"===e.type?s.$selection.off(\"input.search input.searchcheck\"):(t=e.which)!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&s.handleSearch(e)})},e.prototype._transferTabIndex=function(e){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},e.prototype.createPlaceholder=function(e,t){this.$search.attr(\"placeholder\",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),e.call(this,t),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},e.prototype.handleSearch=function(){var e;this.resizeSearch(),this._keyUpPrevented||(e=this.$search.val(),this.trigger(\"query\",{term:e})),this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger(\"unselect\",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var e=\"100%\";\"\"===this.$search.attr(\"placeholder\")&&(e=.75*(this.$search.val().length+1)+\"em\"),this.$search.css(\"width\",e)},e}),u.define(\"select2/selection/selectionCss\",[\"../utils\"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get(\"selectionCssClass\")||\"\";return-1!==e.indexOf(\":all:\")&&(e=e.replace(\":all:\",\"\"),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define(\"select2/selection/eventRelay\",[\"jquery\"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var s=this,i=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],r=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,t,n),t.on(\"*\",function(e,t){var n;-1!==i.indexOf(e)&&(t=t||{},n=o.Event(\"select2:\"+e,{params:t}),s.$element.trigger(n),-1!==r.indexOf(e)&&(t.prevented=n.isDefaultPrevented()))})},e}),u.define(\"select2/translation\",[\"jquery\",\"require\"],function(t,n){function s(e){this.dict=e||{}}return s.prototype.all=function(){return this.dict},s.prototype.get=function(e){return this.dict[e]},s.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},s._cache={},s.loadPath=function(e){var t;return e in s._cache||(t=n(e),s._cache[e]=t),new s(s._cache[e])},s}),u.define(\"select2/diacritics\",[],function(){return{\"Ⓐ\":\"A\",\"Ａ\":\"A\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ầ\":\"A\",\"Ấ\":\"A\",\"Ẫ\":\"A\",\"Ẩ\":\"A\",\"Ã\":\"A\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ằ\":\"A\",\"Ắ\":\"A\",\"Ẵ\":\"A\",\"Ẳ\":\"A\",\"Ȧ\":\"A\",\"Ǡ\":\"A\",\"Ä\":\"A\",\"Ǟ\":\"A\",\"Ả\":\"A\",\"Å\":\"A\",\"Ǻ\":\"A\",\"Ǎ\":\"A\",\"Ȁ\":\"A\",\"Ȃ\":\"A\",\"Ạ\":\"A\",\"Ậ\":\"A\",\"Ặ\":\"A\",\"Ḁ\":\"A\",\"Ą\":\"A\",\"Ⱥ\":\"A\",\"Ɐ\":\"A\",\"Ꜳ\":\"AA\",\"Æ\":\"AE\",\"Ǽ\":\"AE\",\"Ǣ\":\"AE\",\"Ꜵ\":\"AO\",\"Ꜷ\":\"AU\",\"Ꜹ\":\"AV\",\"Ꜻ\":\"AV\",\"Ꜽ\":\"AY\",\"Ⓑ\":\"B\",\"Ｂ\":\"B\",\"Ḃ\":\"B\",\"Ḅ\":\"B\",\"Ḇ\":\"B\",\"Ƀ\":\"B\",\"Ƃ\":\"B\",\"Ɓ\":\"B\",\"Ⓒ\":\"C\",\"Ｃ\":\"C\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"Ç\":\"C\",\"Ḉ\":\"C\",\"Ƈ\":\"C\",\"Ȼ\":\"C\",\"Ꜿ\":\"C\",\"Ⓓ\":\"D\",\"Ｄ\":\"D\",\"Ḋ\":\"D\",\"Ď\":\"D\",\"Ḍ\":\"D\",\"Ḑ\":\"D\",\"Ḓ\":\"D\",\"Ḏ\":\"D\",\"Đ\":\"D\",\"Ƌ\":\"D\",\"Ɗ\":\"D\",\"Ɖ\":\"D\",\"Ꝺ\":\"D\",\"Ǳ\":\"DZ\",\"Ǆ\":\"DZ\",\"ǲ\":\"Dz\",\"ǅ\":\"Dz\",\"Ⓔ\":\"E\",\"Ｅ\":\"E\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ề\":\"E\",\"Ế\":\"E\",\"Ễ\":\"E\",\"Ể\":\"E\",\"Ẽ\":\"E\",\"Ē\":\"E\",\"Ḕ\":\"E\",\"Ḗ\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ë\":\"E\",\"Ẻ\":\"E\",\"Ě\":\"E\",\"Ȅ\":\"E\",\"Ȇ\":\"E\",\"Ẹ\":\"E\",\"Ệ\":\"E\",\"Ȩ\":\"E\",\"Ḝ\":\"E\",\"Ę\":\"E\",\"Ḙ\":\"E\",\"Ḛ\":\"E\",\"Ɛ\":\"E\",\"Ǝ\":\"E\",\"Ⓕ\":\"F\",\"Ｆ\":\"F\",\"Ḟ\":\"F\",\"Ƒ\":\"F\",\"Ꝼ\":\"F\",\"Ⓖ\":\"G\",\"Ｇ\":\"G\",\"Ǵ\":\"G\",\"Ĝ\":\"G\",\"Ḡ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ǧ\":\"G\",\"Ģ\":\"G\",\"Ǥ\":\"G\",\"Ɠ\":\"G\",\"Ꞡ\":\"G\",\"Ᵹ\":\"G\",\"Ꝿ\":\"G\",\"Ⓗ\":\"H\",\"Ｈ\":\"H\",\"Ĥ\":\"H\",\"Ḣ\":\"H\",\"Ḧ\":\"H\",\"Ȟ\":\"H\",\"Ḥ\":\"H\",\"Ḩ\":\"H\",\"Ḫ\":\"H\",\"Ħ\":\"H\",\"Ⱨ\":\"H\",\"Ⱶ\":\"H\",\"Ɥ\":\"H\",\"Ⓘ\":\"I\",\"Ｉ\":\"I\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"İ\":\"I\",\"Ï\":\"I\",\"Ḯ\":\"I\",\"Ỉ\":\"I\",\"Ǐ\":\"I\",\"Ȉ\":\"I\",\"Ȋ\":\"I\",\"Ị\":\"I\",\"Į\":\"I\",\"Ḭ\":\"I\",\"Ɨ\":\"I\",\"Ⓙ\":\"J\",\"Ｊ\":\"J\",\"Ĵ\":\"J\",\"Ɉ\":\"J\",\"Ⓚ\":\"K\",\"Ｋ\":\"K\",\"Ḱ\":\"K\",\"Ǩ\":\"K\",\"Ḳ\":\"K\",\"Ķ\":\"K\",\"Ḵ\":\"K\",\"Ƙ\":\"K\",\"Ⱪ\":\"K\",\"Ꝁ\":\"K\",\"Ꝃ\":\"K\",\"Ꝅ\":\"K\",\"Ꞣ\":\"K\",\"Ⓛ\":\"L\",\"Ｌ\":\"L\",\"Ŀ\":\"L\",\"Ĺ\":\"L\",\"Ľ\":\"L\",\"Ḷ\":\"L\",\"Ḹ\":\"L\",\"Ļ\":\"L\",\"Ḽ\":\"L\",\"Ḻ\":\"L\",\"Ł\":\"L\",\"Ƚ\":\"L\",\"Ɫ\":\"L\",\"Ⱡ\":\"L\",\"Ꝉ\":\"L\",\"Ꝇ\":\"L\",\"Ꞁ\":\"L\",\"Ǉ\":\"LJ\",\"ǈ\":\"Lj\",\"Ⓜ\":\"M\",\"Ｍ\":\"M\",\"Ḿ\":\"M\",\"Ṁ\":\"M\",\"Ṃ\":\"M\",\"Ɱ\":\"M\",\"Ɯ\":\"M\",\"Ⓝ\":\"N\",\"Ｎ\":\"N\",\"Ǹ\":\"N\",\"Ń\":\"N\",\"Ñ\":\"N\",\"Ṅ\":\"N\",\"Ň\":\"N\",\"Ṇ\":\"N\",\"Ņ\":\"N\",\"Ṋ\":\"N\",\"Ṉ\":\"N\",\"Ƞ\":\"N\",\"Ɲ\":\"N\",\"Ꞑ\":\"N\",\"Ꞥ\":\"N\",\"Ǌ\":\"NJ\",\"ǋ\":\"Nj\",\"Ⓞ\":\"O\",\"Ｏ\":\"O\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Ồ\":\"O\",\"Ố\":\"O\",\"Ỗ\":\"O\",\"Ổ\":\"O\",\"Õ\":\"O\",\"Ṍ\":\"O\",\"Ȭ\":\"O\",\"Ṏ\":\"O\",\"Ō\":\"O\",\"Ṑ\":\"O\",\"Ṓ\":\"O\",\"Ŏ\":\"O\",\"Ȯ\":\"O\",\"Ȱ\":\"O\",\"Ö\":\"O\",\"Ȫ\":\"O\",\"Ỏ\":\"O\",\"Ő\":\"O\",\"Ǒ\":\"O\",\"Ȍ\":\"O\",\"Ȏ\":\"O\",\"Ơ\":\"O\",\"Ờ\":\"O\",\"Ớ\":\"O\",\"Ỡ\":\"O\",\"Ở\":\"O\",\"Ợ\":\"O\",\"Ọ\":\"O\",\"Ộ\":\"O\",\"Ǫ\":\"O\",\"Ǭ\":\"O\",\"Ø\":\"O\",\"Ǿ\":\"O\",\"Ɔ\":\"O\",\"Ɵ\":\"O\",\"Ꝋ\":\"O\",\"Ꝍ\":\"O\",\"Œ\":\"OE\",\"Ƣ\":\"OI\",\"Ꝏ\":\"OO\",\"Ȣ\":\"OU\",\"Ⓟ\":\"P\",\"Ｐ\":\"P\",\"Ṕ\":\"P\",\"Ṗ\":\"P\",\"Ƥ\":\"P\",\"Ᵽ\":\"P\",\"Ꝑ\":\"P\",\"Ꝓ\":\"P\",\"Ꝕ\":\"P\",\"Ⓠ\":\"Q\",\"Ｑ\":\"Q\",\"Ꝗ\":\"Q\",\"Ꝙ\":\"Q\",\"Ɋ\":\"Q\",\"Ⓡ\":\"R\",\"Ｒ\":\"R\",\"Ŕ\":\"R\",\"Ṙ\":\"R\",\"Ř\":\"R\",\"Ȑ\":\"R\",\"Ȓ\":\"R\",\"Ṛ\":\"R\",\"Ṝ\":\"R\",\"Ŗ\":\"R\",\"Ṟ\":\"R\",\"Ɍ\":\"R\",\"Ɽ\":\"R\",\"Ꝛ\":\"R\",\"Ꞧ\":\"R\",\"Ꞃ\":\"R\",\"Ⓢ\":\"S\",\"Ｓ\":\"S\",\"ẞ\":\"S\",\"Ś\":\"S\",\"Ṥ\":\"S\",\"Ŝ\":\"S\",\"Ṡ\":\"S\",\"Š\":\"S\",\"Ṧ\":\"S\",\"Ṣ\":\"S\",\"Ṩ\":\"S\",\"Ș\":\"S\",\"Ş\":\"S\",\"Ȿ\":\"S\",\"Ꞩ\":\"S\",\"Ꞅ\":\"S\",\"Ⓣ\":\"T\",\"Ｔ\":\"T\",\"Ṫ\":\"T\",\"Ť\":\"T\",\"Ṭ\":\"T\",\"Ț\":\"T\",\"Ţ\":\"T\",\"Ṱ\":\"T\",\"Ṯ\":\"T\",\"Ŧ\":\"T\",\"Ƭ\":\"T\",\"Ʈ\":\"T\",\"Ⱦ\":\"T\",\"Ꞇ\":\"T\",\"Ꜩ\":\"TZ\",\"Ⓤ\":\"U\",\"Ｕ\":\"U\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ũ\":\"U\",\"Ṹ\":\"U\",\"Ū\":\"U\",\"Ṻ\":\"U\",\"Ŭ\":\"U\",\"Ü\":\"U\",\"Ǜ\":\"U\",\"Ǘ\":\"U\",\"Ǖ\":\"U\",\"Ǚ\":\"U\",\"Ủ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ǔ\":\"U\",\"Ȕ\":\"U\",\"Ȗ\":\"U\",\"Ư\":\"U\",\"Ừ\":\"U\",\"Ứ\":\"U\",\"Ữ\":\"U\",\"Ử\":\"U\",\"Ự\":\"U\",\"Ụ\":\"U\",\"Ṳ\":\"U\",\"Ų\":\"U\",\"Ṷ\":\"U\",\"Ṵ\":\"U\",\"Ʉ\":\"U\",\"Ⓥ\":\"V\",\"Ｖ\":\"V\",\"Ṽ\":\"V\",\"Ṿ\":\"V\",\"Ʋ\":\"V\",\"Ꝟ\":\"V\",\"Ʌ\":\"V\",\"Ꝡ\":\"VY\",\"Ⓦ\":\"W\",\"Ｗ\":\"W\",\"Ẁ\":\"W\",\"Ẃ\":\"W\",\"Ŵ\":\"W\",\"Ẇ\":\"W\",\"Ẅ\":\"W\",\"Ẉ\":\"W\",\"Ⱳ\":\"W\",\"Ⓧ\":\"X\",\"Ｘ\":\"X\",\"Ẋ\":\"X\",\"Ẍ\":\"X\",\"Ⓨ\":\"Y\",\"Ｙ\":\"Y\",\"Ỳ\":\"Y\",\"Ý\":\"Y\",\"Ŷ\":\"Y\",\"Ỹ\":\"Y\",\"Ȳ\":\"Y\",\"Ẏ\":\"Y\",\"Ÿ\":\"Y\",\"Ỷ\":\"Y\",\"Ỵ\":\"Y\",\"Ƴ\":\"Y\",\"Ɏ\":\"Y\",\"Ỿ\":\"Y\",\"Ⓩ\":\"Z\",\"Ｚ\":\"Z\",\"Ź\":\"Z\",\"Ẑ\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"Ẓ\":\"Z\",\"Ẕ\":\"Z\",\"Ƶ\":\"Z\",\"Ȥ\":\"Z\",\"Ɀ\":\"Z\",\"Ⱬ\":\"Z\",\"Ꝣ\":\"Z\",\"ⓐ\":\"a\",\"ａ\":\"a\",\"ẚ\":\"a\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ầ\":\"a\",\"ấ\":\"a\",\"ẫ\":\"a\",\"ẩ\":\"a\",\"ã\":\"a\",\"ā\":\"a\",\"ă\":\"a\",\"ằ\":\"a\",\"ắ\":\"a\",\"ẵ\":\"a\",\"ẳ\":\"a\",\"ȧ\":\"a\",\"ǡ\":\"a\",\"ä\":\"a\",\"ǟ\":\"a\",\"ả\":\"a\",\"å\":\"a\",\"ǻ\":\"a\",\"ǎ\":\"a\",\"ȁ\":\"a\",\"ȃ\":\"a\",\"ạ\":\"a\",\"ậ\":\"a\",\"ặ\":\"a\",\"ḁ\":\"a\",\"ą\":\"a\",\"ⱥ\":\"a\",\"ɐ\":\"a\",\"ꜳ\":\"aa\",\"æ\":\"ae\",\"ǽ\":\"ae\",\"ǣ\":\"ae\",\"ꜵ\":\"ao\",\"ꜷ\":\"au\",\"ꜹ\":\"av\",\"ꜻ\":\"av\",\"ꜽ\":\"ay\",\"ⓑ\":\"b\",\"ｂ\":\"b\",\"ḃ\":\"b\",\"ḅ\":\"b\",\"ḇ\":\"b\",\"ƀ\":\"b\",\"ƃ\":\"b\",\"ɓ\":\"b\",\"ⓒ\":\"c\",\"ｃ\":\"c\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"ç\":\"c\",\"ḉ\":\"c\",\"ƈ\":\"c\",\"ȼ\":\"c\",\"ꜿ\":\"c\",\"ↄ\":\"c\",\"ⓓ\":\"d\",\"ｄ\":\"d\",\"ḋ\":\"d\",\"ď\":\"d\",\"ḍ\":\"d\",\"ḑ\":\"d\",\"ḓ\":\"d\",\"ḏ\":\"d\",\"đ\":\"d\",\"ƌ\":\"d\",\"ɖ\":\"d\",\"ɗ\":\"d\",\"ꝺ\":\"d\",\"ǳ\":\"dz\",\"ǆ\":\"dz\",\"ⓔ\":\"e\",\"ｅ\":\"e\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ề\":\"e\",\"ế\":\"e\",\"ễ\":\"e\",\"ể\":\"e\",\"ẽ\":\"e\",\"ē\":\"e\",\"ḕ\":\"e\",\"ḗ\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ë\":\"e\",\"ẻ\":\"e\",\"ě\":\"e\",\"ȅ\":\"e\",\"ȇ\":\"e\",\"ẹ\":\"e\",\"ệ\":\"e\",\"ȩ\":\"e\",\"ḝ\":\"e\",\"ę\":\"e\",\"ḙ\":\"e\",\"ḛ\":\"e\",\"ɇ\":\"e\",\"ɛ\":\"e\",\"ǝ\":\"e\",\"ⓕ\":\"f\",\"ｆ\":\"f\",\"ḟ\":\"f\",\"ƒ\":\"f\",\"ꝼ\":\"f\",\"ⓖ\":\"g\",\"ｇ\":\"g\",\"ǵ\":\"g\",\"ĝ\":\"g\",\"ḡ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ǧ\":\"g\",\"ģ\":\"g\",\"ǥ\":\"g\",\"ɠ\":\"g\",\"ꞡ\":\"g\",\"ᵹ\":\"g\",\"ꝿ\":\"g\",\"ⓗ\":\"h\",\"ｈ\":\"h\",\"ĥ\":\"h\",\"ḣ\":\"h\",\"ḧ\":\"h\",\"ȟ\":\"h\",\"ḥ\":\"h\",\"ḩ\":\"h\",\"ḫ\":\"h\",\"ẖ\":\"h\",\"ħ\":\"h\",\"ⱨ\":\"h\",\"ⱶ\":\"h\",\"ɥ\":\"h\",\"ƕ\":\"hv\",\"ⓘ\":\"i\",\"ｉ\":\"i\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"ï\":\"i\",\"ḯ\":\"i\",\"ỉ\":\"i\",\"ǐ\":\"i\",\"ȉ\":\"i\",\"ȋ\":\"i\",\"ị\":\"i\",\"į\":\"i\",\"ḭ\":\"i\",\"ɨ\":\"i\",\"ı\":\"i\",\"ⓙ\":\"j\",\"ｊ\":\"j\",\"ĵ\":\"j\",\"ǰ\":\"j\",\"ɉ\":\"j\",\"ⓚ\":\"k\",\"ｋ\":\"k\",\"ḱ\":\"k\",\"ǩ\":\"k\",\"ḳ\":\"k\",\"ķ\":\"k\",\"ḵ\":\"k\",\"ƙ\":\"k\",\"ⱪ\":\"k\",\"ꝁ\":\"k\",\"ꝃ\":\"k\",\"ꝅ\":\"k\",\"ꞣ\":\"k\",\"ⓛ\":\"l\",\"ｌ\":\"l\",\"ŀ\":\"l\",\"ĺ\":\"l\",\"ľ\":\"l\",\"ḷ\":\"l\",\"ḹ\":\"l\",\"ļ\":\"l\",\"ḽ\":\"l\",\"ḻ\":\"l\",\"ſ\":\"l\",\"ł\":\"l\",\"ƚ\":\"l\",\"ɫ\":\"l\",\"ⱡ\":\"l\",\"ꝉ\":\"l\",\"ꞁ\":\"l\",\"ꝇ\":\"l\",\"ǉ\":\"lj\",\"ⓜ\":\"m\",\"ｍ\":\"m\",\"ḿ\":\"m\",\"ṁ\":\"m\",\"ṃ\":\"m\",\"ɱ\":\"m\",\"ɯ\":\"m\",\"ⓝ\":\"n\",\"ｎ\":\"n\",\"ǹ\":\"n\",\"ń\":\"n\",\"ñ\":\"n\",\"ṅ\":\"n\",\"ň\":\"n\",\"ṇ\":\"n\",\"ņ\":\"n\",\"ṋ\":\"n\",\"ṉ\":\"n\",\"ƞ\":\"n\",\"ɲ\":\"n\",\"ŉ\":\"n\",\"ꞑ\":\"n\",\"ꞥ\":\"n\",\"ǌ\":\"nj\",\"ⓞ\":\"o\",\"ｏ\":\"o\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"ồ\":\"o\",\"ố\":\"o\",\"ỗ\":\"o\",\"ổ\":\"o\",\"õ\":\"o\",\"ṍ\":\"o\",\"ȭ\":\"o\",\"ṏ\":\"o\",\"ō\":\"o\",\"ṑ\":\"o\",\"ṓ\":\"o\",\"ŏ\":\"o\",\"ȯ\":\"o\",\"ȱ\":\"o\",\"ö\":\"o\",\"ȫ\":\"o\",\"ỏ\":\"o\",\"ő\":\"o\",\"ǒ\":\"o\",\"ȍ\":\"o\",\"ȏ\":\"o\",\"ơ\":\"o\",\"ờ\":\"o\",\"ớ\":\"o\",\"ỡ\":\"o\",\"ở\":\"o\",\"ợ\":\"o\",\"ọ\":\"o\",\"ộ\":\"o\",\"ǫ\":\"o\",\"ǭ\":\"o\",\"ø\":\"o\",\"ǿ\":\"o\",\"ɔ\":\"o\",\"ꝋ\":\"o\",\"ꝍ\":\"o\",\"ɵ\":\"o\",\"œ\":\"oe\",\"ƣ\":\"oi\",\"ȣ\":\"ou\",\"ꝏ\":\"oo\",\"ⓟ\":\"p\",\"ｐ\":\"p\",\"ṕ\":\"p\",\"ṗ\":\"p\",\"ƥ\":\"p\",\"ᵽ\":\"p\",\"ꝑ\":\"p\",\"ꝓ\":\"p\",\"ꝕ\":\"p\",\"ⓠ\":\"q\",\"ｑ\":\"q\",\"ɋ\":\"q\",\"ꝗ\":\"q\",\"ꝙ\":\"q\",\"ⓡ\":\"r\",\"ｒ\":\"r\",\"ŕ\":\"r\",\"ṙ\":\"r\",\"ř\":\"r\",\"ȑ\":\"r\",\"ȓ\":\"r\",\"ṛ\":\"r\",\"ṝ\":\"r\",\"ŗ\":\"r\",\"ṟ\":\"r\",\"ɍ\":\"r\",\"ɽ\":\"r\",\"ꝛ\":\"r\",\"ꞧ\":\"r\",\"ꞃ\":\"r\",\"ⓢ\":\"s\",\"ｓ\":\"s\",\"ß\":\"s\",\"ś\":\"s\",\"ṥ\":\"s\",\"ŝ\":\"s\",\"ṡ\":\"s\",\"š\":\"s\",\"ṧ\":\"s\",\"ṣ\":\"s\",\"ṩ\":\"s\",\"ș\":\"s\",\"ş\":\"s\",\"ȿ\":\"s\",\"ꞩ\":\"s\",\"ꞅ\":\"s\",\"ẛ\":\"s\",\"ⓣ\":\"t\",\"ｔ\":\"t\",\"ṫ\":\"t\",\"ẗ\":\"t\",\"ť\":\"t\",\"ṭ\":\"t\",\"ț\":\"t\",\"ţ\":\"t\",\"ṱ\":\"t\",\"ṯ\":\"t\",\"ŧ\":\"t\",\"ƭ\":\"t\",\"ʈ\":\"t\",\"ⱦ\":\"t\",\"ꞇ\":\"t\",\"ꜩ\":\"tz\",\"ⓤ\":\"u\",\"ｕ\":\"u\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ũ\":\"u\",\"ṹ\":\"u\",\"ū\":\"u\",\"ṻ\":\"u\",\"ŭ\":\"u\",\"ü\":\"u\",\"ǜ\":\"u\",\"ǘ\":\"u\",\"ǖ\":\"u\",\"ǚ\":\"u\",\"ủ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ǔ\":\"u\",\"ȕ\":\"u\",\"ȗ\":\"u\",\"ư\":\"u\",\"ừ\":\"u\",\"ứ\":\"u\",\"ữ\":\"u\",\"ử\":\"u\",\"ự\":\"u\",\"ụ\":\"u\",\"ṳ\":\"u\",\"ų\":\"u\",\"ṷ\":\"u\",\"ṵ\":\"u\",\"ʉ\":\"u\",\"ⓥ\":\"v\",\"ｖ\":\"v\",\"ṽ\":\"v\",\"ṿ\":\"v\",\"ʋ\":\"v\",\"ꝟ\":\"v\",\"ʌ\":\"v\",\"ꝡ\":\"vy\",\"ⓦ\":\"w\",\"ｗ\":\"w\",\"ẁ\":\"w\",\"ẃ\":\"w\",\"ŵ\":\"w\",\"ẇ\":\"w\",\"ẅ\":\"w\",\"ẘ\":\"w\",\"ẉ\":\"w\",\"ⱳ\":\"w\",\"ⓧ\":\"x\",\"ｘ\":\"x\",\"ẋ\":\"x\",\"ẍ\":\"x\",\"ⓨ\":\"y\",\"ｙ\":\"y\",\"ỳ\":\"y\",\"ý\":\"y\",\"ŷ\":\"y\",\"ỹ\":\"y\",\"ȳ\":\"y\",\"ẏ\":\"y\",\"ÿ\":\"y\",\"ỷ\":\"y\",\"ẙ\":\"y\",\"ỵ\":\"y\",\"ƴ\":\"y\",\"ɏ\":\"y\",\"ỿ\":\"y\",\"ⓩ\":\"z\",\"ｚ\":\"z\",\"ź\":\"z\",\"ẑ\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"ẓ\":\"z\",\"ẕ\":\"z\",\"ƶ\":\"z\",\"ȥ\":\"z\",\"ɀ\":\"z\",\"ⱬ\":\"z\",\"ꝣ\":\"z\",\"Ά\":\"Α\",\"Έ\":\"Ε\",\"Ή\":\"Η\",\"Ί\":\"Ι\",\"Ϊ\":\"Ι\",\"Ό\":\"Ο\",\"Ύ\":\"Υ\",\"Ϋ\":\"Υ\",\"Ώ\":\"Ω\",\"ά\":\"α\",\"έ\":\"ε\",\"ή\":\"η\",\"ί\":\"ι\",\"ϊ\":\"ι\",\"ΐ\":\"ι\",\"ό\":\"ο\",\"ύ\":\"υ\",\"ϋ\":\"υ\",\"ΰ\":\"υ\",\"ώ\":\"ω\",\"ς\":\"σ\",\"’\":\"'\"}}),u.define(\"select2/data/base\",[\"../utils\"],function(n){function s(e,t){s.__super__.constructor.call(this)}return n.Extend(s,n.Observable),s.prototype.current=function(e){throw new Error(\"The `current` method must be defined in child classes.\")},s.prototype.query=function(e,t){throw new Error(\"The `query` method must be defined in child classes.\")},s.prototype.bind=function(e,t){},s.prototype.destroy=function(){},s.prototype.generateResultId=function(e,t){e=e.id+\"-result-\";return e+=n.generateChars(4),null!=t.id?e+=\"-\"+t.id.toString():e+=\"-\"+n.generateChars(4),e},s}),u.define(\"select2/data/select\",[\"./base\",\"../utils\",\"jquery\"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var t=this;e(Array.prototype.map.call(this.$element[0].querySelectorAll(\":checked\"),function(e){return t.item(l(e))}))},n.prototype.select=function(i){var e,r=this;if(i.selected=!0,null!=i.element&&\"option\"===i.element.tagName.toLowerCase())return i.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");this.$element.prop(\"multiple\")?this.current(function(e){var t=[];(i=[i]).push.apply(i,e);for(var n=0;n<i.length;n++){var s=i[n].id;-1===t.indexOf(s)&&t.push(s)}r.$element.val(t),r.$element.trigger(\"input\").trigger(\"change\")}):(e=i.id,this.$element.val(e),this.$element.trigger(\"input\").trigger(\"change\"))},n.prototype.unselect=function(i){var r=this;if(this.$element.prop(\"multiple\")){if(i.selected=!1,null!=i.element&&\"option\"===i.element.tagName.toLowerCase())return i.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current(function(e){for(var t=[],n=0;n<e.length;n++){var s=e[n].id;s!==i.id&&-1===t.indexOf(s)&&t.push(s)}r.$element.val(t),r.$element.trigger(\"input\").trigger(\"change\")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on(\"select\",function(e){n.select(e.data)}),e.on(\"unselect\",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find(\"*\").each(function(){a.RemoveData(this)})},n.prototype.query=function(t,e){var n=[],s=this;this.$element.children().each(function(){var e;\"option\"!==this.tagName.toLowerCase()&&\"optgroup\"!==this.tagName.toLowerCase()||(e=l(this),e=s.item(e),null!==(e=s.matches(t,e))&&n.push(e))}),e({results:n})},n.prototype.addOptions=function(e){this.$element.append(e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement(\"optgroup\")).label=e.text:void 0!==(t=document.createElement(\"option\")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);e=this._normalizeItem(e);return e.element=t,a.StoreData(t,\"data\",e),l(t)},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],\"data\")))return t;var n=e[0];if(\"option\"===n.tagName.toLowerCase())t={id:e.val(),text:e.text(),disabled:e.prop(\"disabled\"),selected:e.prop(\"selected\"),title:e.prop(\"title\")};else if(\"optgroup\"===n.tagName.toLowerCase()){t={text:e.prop(\"label\"),children:[],title:e.prop(\"title\")};for(var s=e.children(\"option\"),i=[],r=0;r<s.length;r++){var o=l(s[r]),o=this.item(o);i.push(o)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],\"data\",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:\"\"},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get(\"matcher\")(e,t)},n}),u.define(\"select2/data/array\",[\"./select\",\"../utils\",\"jquery\"],function(e,t,c){function s(e,t){this._dataToConvert=t.get(\"data\")||[],s.__super__.constructor.call(this,e,t)}return t.Extend(s,e),s.prototype.bind=function(e,t){s.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},s.prototype.select=function(n){var e=this.$element.find(\"option\").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),s.__super__.select.call(this,n)},s.prototype.convertToOptions=function(e){var t=this,n=this.$element.find(\"option\"),s=n.map(function(){return t.item(c(this)).id}).get(),i=[];for(var r=0;r<e.length;r++){var o,a,l=this._normalizeItem(e[r]);0<=s.indexOf(l.id)?(o=n.filter(function(e){return function(){return c(this).val()==e.id}}(l)),a=this.item(o),a=c.extend(!0,{},l,a),a=this.option(a),o.replaceWith(a)):(a=this.option(l),l.children&&(l=this.convertToOptions(l.children),a.append(l)),i.push(a))}return i},s}),u.define(\"select2/data/ajax\",[\"./array\",\"../utils\",\"jquery\"],function(e,t,r){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return r.extend({},e,{q:e.term})},transport:function(e,t,n){e=r.ajax(e);return e.then(t),e.fail(n),e}};return r.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(t,n){var s=this;null!=this._request&&(\"function\"==typeof this._request.abort&&this._request.abort(),this._request=null);var i=r.extend({type:\"GET\"},this.ajaxOptions);function e(){var e=i.transport(i,function(e){e=s.processResults(e,t);s.options.get(\"debug\")&&window.console&&console.error&&(e&&e.results&&Array.isArray(e.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),n(e)},function(){\"status\"in e&&(0===e.status||\"0\"===e.status)||s.trigger(\"results:message\",{message:\"errorLoading\"})});s._request=e}\"function\"==typeof i.url&&(i.url=i.url.call(this.$element,t)),\"function\"==typeof i.data&&(i.data=i.data.call(this.$element,t)),this.ajaxOptions.delay&&null!=t.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),u.define(\"select2/data/tags\",[\"jquery\"],function(t){function e(e,t,n){var s=n.get(\"tags\"),i=n.get(\"createTag\");void 0!==i&&(this.createTag=i);i=n.get(\"insertTag\");if(void 0!==i&&(this.insertTag=i),e.call(this,t,n),Array.isArray(s))for(var r=0;r<s.length;r++){var o=s[r],o=this._normalizeItem(o),o=this.option(o);this.$element.append(o)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var s=t.results,i=0;i<s.length;i++){var r=s[i],o=null!=r.children&&!e({results:r.children},!0);if((r.text||\"\").toUpperCase()===(c.term||\"\").toUpperCase()||o)return!n&&(t.data=s,void u(t))}if(n)return!0;var a,l=d.createTag(c);null!=l&&((a=d.option(l)).attr(\"data-select2-tag\",\"true\"),d.addOptions([a]),d.insertTag(s,l)),t.results=s,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){if(null==t.term)return null;t=t.term.trim();return\"\"===t?null:{id:t,text:t}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find(\"option[data-select2-tag]\").each(function(){this.selected||t(this).remove()})},e}),u.define(\"select2/data/tokenizer\",[\"jquery\"],function(c){function e(e,t,n){var s=n.get(\"tokenizer\");void 0!==s&&(this.tokenizer=s),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(\".select2-search__field\")},e.prototype.query=function(e,t,n){var s=this;t.term=t.term||\"\";var i=this.tokenizer(t,this.options,function(e){var t,n=s._normalizeItem(e);s.$element.find(\"option\").filter(function(){return c(this).val()===n.id}).length||((t=s.option(n)).attr(\"data-select2-tag\",!0),s._removeOldTags(),s.addOptions([t])),t=n,s.trigger(\"select\",{data:t})});i.term!==t.term&&(this.$search.length&&(this.$search.val(i.term),this.$search.trigger(\"focus\")),t.term=i.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,s){for(var i=n.get(\"tokenSeparators\")||[],r=t.term,o=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};o<r.length;){var l=r[o];-1!==i.indexOf(l)?(l=r.substr(0,o),null!=(l=a(c.extend({},t,{term:l})))?(s(l),r=r.substr(o+1)||\"\",o=0):o++):o++}return{term:r}},e}),u.define(\"select2/data/minimumInputLength\",[],function(){function e(e,t,n){this.minimumInputLength=n.get(\"minimumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",t.term.length<this.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define(\"select2/data/maximumInputLength\",[],function(){function e(e,t,n){this.maximumInputLength=n.get(\"maximumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",0<this.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define(\"select2/data/maximumSelectionLength\",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"select\",function(){s._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var s=this;this._checkIfMaximumSelected(function(){e.call(s,t,n)})},e.prototype._checkIfMaximumSelected=function(e,t){var n=this;this.current(function(e){e=null!=e?e.length:0;0<n.maximumSelectionLength&&e>=n.maximumSelectionLength?n.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:n.maximumSelectionLength}}):t&&t()})},e}),u.define(\"select2/dropdown\",[\"jquery\",\"./utils\"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),u.define(\"select2/dropdown/search\",[\"jquery\"],function(r){function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"translations\").get(\"search\"),e=r('<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>');return this.$searchContainer=e,this.$search=e.find(\"input\"),this.$search.prop(\"autocomplete\",this.options.get(\"autocomplete\")),this.$search.attr(\"aria-label\",n()),t.prepend(e),t},e.prototype.bind=function(e,t,n){var s=this,i=t.id+\"-results\";e.call(this,t,n),this.$search.on(\"keydown\",function(e){s.trigger(\"keypress\",e),s._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on(\"input\",function(e){r(this).off(\"keyup\")}),this.$search.on(\"keyup input\",function(e){s.handleSearch(e)}),t.on(\"open\",function(){s.$search.attr(\"tabindex\",0),s.$search.attr(\"aria-controls\",i),s.$search.trigger(\"focus\"),window.setTimeout(function(){s.$search.trigger(\"focus\")},0)}),t.on(\"close\",function(){s.$search.attr(\"tabindex\",-1),s.$search.removeAttr(\"aria-controls\"),s.$search.removeAttr(\"aria-activedescendant\"),s.$search.val(\"\"),s.$search.trigger(\"blur\")}),t.on(\"focus\",function(){t.isOpen()||s.$search.trigger(\"focus\")}),t.on(\"results:all\",function(e){null!=e.query.term&&\"\"!==e.query.term||(s.showSearch(e)?s.$searchContainer[0].classList.remove(\"select2-search--hide\"):s.$searchContainer[0].classList.add(\"select2-search--hide\"))}),t.on(\"results:focus\",function(e){e.data._resultId?s.$search.attr(\"aria-activedescendant\",e.data._resultId):s.$search.removeAttr(\"aria-activedescendant\")})},e.prototype.handleSearch=function(e){var t;this._keyUpPrevented||(t=this.$search.val(),this.trigger(\"query\",{term:t})),this._keyUpPrevented=!1},e.prototype.showSearch=function(e,t){return!0},e}),u.define(\"select2/dropdown/hidePlaceholder\",[],function(){function e(e,t,n,s){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n,s)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return t=\"string\"==typeof t?{id:\"\",text:t}:t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),s=t.length-1;0<=s;s--){var i=t[s];this.placeholder.id===i.id&&n.splice(s,1)}return n},e}),u.define(\"select2/dropdown/infiniteScroll\",[\"jquery\"],function(n){function e(e,t,n,s){this.lastParams={},e.call(this,t,n,s),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"query\",function(e){s.lastParams=e,s.loading=!0}),t.on(\"query:append\",function(e){s.lastParams=e,s.loading=!0}),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&e&&(e=this.$results.offset().top+this.$results.outerHeight(!1),this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=e+50&&this.loadMore())},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'),t=this.options.get(\"translations\").get(\"loadingMore\");return e.html(t(this.lastParams)),e},e}),u.define(\"select2/dropdown/attachBody\",[\"jquery\",\"../utils\"],function(u,o){function e(e,t,n){this.$dropdownParent=u(n.get(\"dropdownParent\")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"open\",function(){s._showDropdown(),s._attachPositioningHandler(t),s._bindContainerResultHandlers(t)}),t.on(\"close\",function(){s._hideDropdown(),s._detachPositioningHandler(t)}),this.$dropdownContainer.on(\"mousedown\",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr(\"class\",n.attr(\"class\")),t[0].classList.remove(\"select2\"),t[0].classList.add(\"select2-container--open\"),t.css({position:\"absolute\",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=u(\"<span></span>\"),e=e.call(this);return t.append(e),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){var n;this._containerResultsHandlersBound||(n=this,t.on(\"results:all\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:append\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:message\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"select\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"unselect\",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0)},e.prototype._attachPositioningHandler=function(e,t){var n=this,s=\"scroll.select2.\"+t.id,i=\"resize.select2.\"+t.id,r=\"orientationchange.select2.\"+t.id,t=this.$container.parents().filter(o.hasScroll);t.each(function(){o.StoreData(this,\"select2-scroll-position\",{x:u(this).scrollLeft(),y:u(this).scrollTop()})}),t.on(s,function(e){var t=o.GetData(this,\"select2-scroll-position\");u(this).scrollTop(t.y)}),u(window).on(s+\" \"+i+\" \"+r,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n=\"scroll.select2.\"+t.id,s=\"resize.select2.\"+t.id,t=\"orientationchange.select2.\"+t.id;this.$container.parents().filter(o.hasScroll).off(n),u(window).off(n+\" \"+s+\" \"+t)},e.prototype._positionDropdown=function(){var e=u(window),t=this.$dropdown[0].classList.contains(\"select2-dropdown--above\"),n=this.$dropdown[0].classList.contains(\"select2-dropdown--below\"),s=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var r={height:this.$container.outerHeight(!1)};r.top=i.top,r.bottom=i.top+r.height;var o=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a<i.top-o,e=l>i.bottom+o,a={left:i.left,top:r.bottom},l=this.$dropdownParent;\"static\"===l.css(\"position\")&&(l=l.offsetParent());i={top:0,left:0};(u.contains(document.body,l[0])||l[0].isConnected)&&(i=l.offset()),a.top-=i.top,a.left-=i.left,t||n||(s=\"below\"),e||!c||t?!c&&e&&t&&(s=\"below\"):s=\"above\",(\"above\"==s||t&&\"below\"!==s)&&(a.top=r.top-i.top-o),null!=s&&(this.$dropdown[0].classList.remove(\"select2-dropdown--below\"),this.$dropdown[0].classList.remove(\"select2-dropdown--above\"),this.$dropdown[0].classList.add(\"select2-dropdown--\"+s),this.$container[0].classList.remove(\"select2-container--below\"),this.$container[0].classList.remove(\"select2-container--above\"),this.$container[0].classList.add(\"select2-container--\"+s)),this.$dropdownContainer.css(a)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(e.minWidth=e.width,e.position=\"relative\",e.width=\"auto\"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),u.define(\"select2/dropdown/minimumResultsForSearch\",[],function(){function e(e,t,n,s){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,s)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,s=0;s<t.length;s++){var i=t[s];i.children?n+=e(i.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),u.define(\"select2/dropdown/selectOnClose\",[\"../utils\"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"close\",function(e){s._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if(\"select\"===n._type||\"unselect\"===n._type)return}n=this.getHighlightedResults();n.length<1||(null!=(n=s.GetData(n[0],\"data\")).element&&n.element.selected||null==n.element&&n.selected||this.trigger(\"select\",{data:n}))},e}),u.define(\"select2/dropdown/closeOnSelect\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on(\"select\",function(e){s._selectTriggered(e)}),t.on(\"unselect\",function(e){s._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:t})},e}),u.define(\"select2/dropdown/dropdownCss\",[\"../utils\"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get(\"dropdownCssClass\")||\"\";return-1!==e.indexOf(\":all:\")&&(e=e.replace(\":all:\",\"\"),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define(\"select2/dropdown/tagsSearchHighlight\",[\"../utils\"],function(s){function e(){}return e.prototype.highlightFirstItem=function(e){var t=this.$results.find(\".select2-results__option--selectable:not(.select2-results__option--selected)\");if(0<t.length){var n=t.first(),t=s.GetData(n[0],\"data\").element;if(t&&t.getAttribute&&\"true\"===t.getAttribute(\"data-select2-tag\"))return void n.trigger(\"mouseenter\")}e.call(this)},e}),u.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,e=\"Please delete \"+t+\" character\";return 1!=t&&(e+=\"s\"),e},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"},removeItem:function(){return\"Remove item\"},search:function(){return\"Search\"}}}),u.define(\"select2/defaults\",[\"jquery\",\"./results\",\"./selection/single\",\"./selection/multiple\",\"./selection/placeholder\",\"./selection/allowClear\",\"./selection/search\",\"./selection/selectionCss\",\"./selection/eventRelay\",\"./utils\",\"./translation\",\"./diacritics\",\"./data/select\",\"./data/array\",\"./data/ajax\",\"./data/tags\",\"./data/tokenizer\",\"./data/minimumInputLength\",\"./data/maximumInputLength\",\"./data/maximumSelectionLength\",\"./dropdown\",\"./dropdown/search\",\"./dropdown/hidePlaceholder\",\"./dropdown/infiniteScroll\",\"./dropdown/attachBody\",\"./dropdown/minimumResultsForSearch\",\"./dropdown/selectOnClose\",\"./dropdown/closeOnSelect\",\"./dropdown/dropdownCss\",\"./dropdown/tagsSearchHighlight\",\"./i18n/en\"],function(l,r,o,a,c,u,d,p,h,f,g,t,m,y,v,_,b,$,w,x,A,D,S,E,O,C,L,T,q,I,e){function n(){this.reset()}return n.prototype.apply=function(e){var t;null==(e=l.extend(!0,{},this.defaults,e)).dataAdapter&&(null!=e.ajax?e.dataAdapter=v:null!=e.data?e.dataAdapter=y:e.dataAdapter=m,0<e.minimumInputLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,$)),0<e.maximumInputLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,w)),0<e.maximumSelectionLength&&(e.dataAdapter=f.Decorate(e.dataAdapter,x)),e.tags&&(e.dataAdapter=f.Decorate(e.dataAdapter,_)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=f.Decorate(e.dataAdapter,b))),null==e.resultsAdapter&&(e.resultsAdapter=r,null!=e.ajax&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,E)),null!=e.placeholder&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,S)),e.selectOnClose&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,L)),e.tags&&(e.resultsAdapter=f.Decorate(e.resultsAdapter,I))),null==e.dropdownAdapter&&(e.multiple?e.dropdownAdapter=A:(t=f.Decorate(A,D),e.dropdownAdapter=t),0!==e.minimumResultsForSearch&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,C)),e.closeOnSelect&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,T)),null!=e.dropdownCssClass&&(e.dropdownAdapter=f.Decorate(e.dropdownAdapter,q)),e.dropdownAdapter=f.Decorate(e.dropdownAdapter,O)),null==e.selectionAdapter&&(e.multiple?e.selectionAdapter=a:e.selectionAdapter=o,null!=e.placeholder&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,c)),e.allowClear&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,u)),e.multiple&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,d)),null!=e.selectionCssClass&&(e.selectionAdapter=f.Decorate(e.selectionAdapter,p)),e.selectionAdapter=f.Decorate(e.selectionAdapter,h)),e.language=this._resolveLanguage(e.language),e.language.push(\"en\");for(var n=[],s=0;s<e.language.length;s++){var i=e.language[s];-1===n.indexOf(i)&&n.push(i)}return e.language=n,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(/[^\\u0000-\\u007E]/g,function(e){return t[e]||e})}this.defaults={amdLanguageBase:\"./i18n/\",autocomplete:\"off\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:f.escapeMarkup,language:{},matcher:function e(t,n){if(null==t.term||\"\"===t.term.trim())return n;if(n.children&&0<n.children.length){for(var s=l.extend(!0,{},n),i=n.children.length-1;0<=i;i--)null==e(t,n.children[i])&&s.children.splice(i,1);return 0<s.children.length?s:e(t,s)}var r=a(n.text).toUpperCase(),o=a(t.term).toUpperCase();return-1<r.indexOf(o)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:\"default\",width:\"resolve\"}},n.prototype.applyFromElement=function(e,t){var n=e.language,s=this.defaults.language,i=t.prop(\"lang\"),t=t.closest(\"[lang]\").prop(\"lang\"),t=Array.prototype.concat.call(this._resolveLanguage(i),this._resolveLanguage(n),this._resolveLanguage(s),this._resolveLanguage(t));return e.language=t,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(l.isEmptyObject(e))return[];if(l.isPlainObject(e))return[e];for(var t,n=Array.isArray(e)?e:[e],s=[],i=0;i<n.length;i++)s.push(n[i]),\"string\"==typeof n[i]&&0<n[i].indexOf(\"-\")&&(t=n[i].split(\"-\")[0],s.push(t));return s},n.prototype._processTranslations=function(e,t){for(var n=new g,s=0;s<e.length;s++){var i=new g,r=e[s];if(\"string\"==typeof r)try{i=g.loadPath(r)}catch(e){try{r=this.defaults.amdLanguageBase+r,i=g.loadPath(r)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+r+'\" could not be automatically loaded. A fallback will be used instead.')}}else i=l.isPlainObject(r)?new g(r):r;n.extend(i)}return n},n.prototype.set=function(e,t){var n={};n[l.camelCase(e)]=t;n=f._convertData(n);l.extend(!0,this.defaults,n)},new n}),u.define(\"select2/options\",[\"jquery\",\"./defaults\",\"./utils\"],function(c,n,u){function e(e,t){this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=n.applyFromElement(this.options,t)),this.options=n.apply(this.options)}return e.prototype.fromElement=function(e){var t=[\"select2\"];null==this.options.multiple&&(this.options.multiple=e.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=e.prop(\"disabled\")),null==this.options.autocomplete&&e.prop(\"autocomplete\")&&(this.options.autocomplete=e.prop(\"autocomplete\")),null==this.options.dir&&(e.prop(\"dir\")?this.options.dir=e.prop(\"dir\"):e.closest(\"[dir]\").prop(\"dir\")?this.options.dir=e.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),e.prop(\"disabled\",this.options.disabled),e.prop(\"multiple\",this.options.multiple),u.GetData(e[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),u.StoreData(e[0],\"data\",u.GetData(e[0],\"select2Tags\")),u.StoreData(e[0],\"tags\",!0)),u.GetData(e[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),e.attr(\"ajax--url\",u.GetData(e[0],\"ajaxUrl\")),u.StoreData(e[0],\"ajax-Url\",u.GetData(e[0],\"ajaxUrl\")));var n={};function s(e,t){return t.toUpperCase()}for(var i=0;i<e[0].attributes.length;i++){var r=e[0].attributes[i].name,o=\"data-\";r.substr(0,o.length)==o&&(r=r.substring(o.length),o=u.GetData(e[0],r),n[r.replace(/-([a-z])/g,s)]=o)}c.fn.jquery&&\"1.\"==c.fn.jquery.substr(0,2)&&e[0].dataset&&(n=c.extend(!0,{},e[0].dataset,n));var a,l=c.extend(!0,{},u.GetData(e[0]),n);for(a in l=u._convertData(l))-1<t.indexOf(a)||(c.isPlainObject(this.options[a])?c.extend(this.options[a],l[a]):this.options[a]=l[a]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),u.define(\"select2/core\",[\"jquery\",\"./options\",\"./utils\",\"./keys\"],function(t,i,r,s){var o=function(e,t){null!=r.GetData(e[0],\"select2\")&&r.GetData(e[0],\"select2\").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new i(t,e),o.__super__.constructor.call(this);var n=e.attr(\"tabindex\")||0;r.StoreData(e[0],\"old-tabindex\",n),e.attr(\"tabindex\",\"-1\");t=this.options.get(\"dataAdapter\");this.dataAdapter=new t(e,this.options);n=this.render();this._placeContainer(n);t=this.options.get(\"selectionAdapter\");this.selection=new t(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,n);t=this.options.get(\"dropdownAdapter\");this.dropdown=new t(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,n);n=this.options.get(\"resultsAdapter\");this.results=new n(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var s=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){s.trigger(\"selection:update\",{data:e})}),e[0].classList.add(\"select2-hidden-accessible\"),e.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),r.StoreData(e[0],\"select2\",this),e.data(\"select2\",this)};return r.Extend(o,r.Observable),o.prototype._generateId=function(e){return\"select2-\"+(null!=e.attr(\"id\")?e.attr(\"id\"):null!=e.attr(\"name\")?e.attr(\"name\")+\"-\"+r.generateChars(2):r.generateChars(4)).replace(/(:|\\.|\\[|\\]|,)/g,\"\")},o.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=t&&e.css(\"width\",t)},o.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(\"resolve\"==t){var s=this._resolveWidth(e,\"style\");return null!=s?s:this._resolveWidth(e,\"element\")}if(\"element\"==t){s=e.outerWidth(!1);return s<=0?\"auto\":s+\"px\"}if(\"style\"!=t)return\"computedstyle\"!=t?t:window.getComputedStyle(e[0]).width;e=e.attr(\"style\");if(\"string\"!=typeof e)return null;for(var i=e.split(\";\"),r=0,o=i.length;r<o;r+=1){var a=i[r].replace(/\\s/g,\"\").match(n);if(null!==a&&1<=a.length)return a[1]}return null},o.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},o.prototype._registerDomEvents=function(){var t=this;this.$element.on(\"change.select2\",function(){t.dataAdapter.current(function(e){t.trigger(\"selection:update\",{data:e})})}),this.$element.on(\"focus.select2\",function(e){t.trigger(\"focus\",e)}),this._syncA=r.bind(this._syncAttributes,this),this._syncS=r.bind(this._syncSubtree,this),this._observer=new window.MutationObserver(function(e){t._syncA(),t._syncS(e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})},o.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on(\"*\",function(e,t){n.trigger(e,t)})},o.prototype._registerSelectionEvents=function(){var n=this,s=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",function(){n.toggleDropdown()}),this.selection.on(\"focus\",function(e){n.focus(e)}),this.selection.on(\"*\",function(e,t){-1===s.indexOf(e)&&n.trigger(e,t)})},o.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on(\"*\",function(e,t){n.trigger(e,t)})},o.prototype._registerResultsEvents=function(){var n=this;this.results.on(\"*\",function(e,t){n.trigger(e,t)})},o.prototype._registerEvents=function(){var n=this;this.on(\"open\",function(){n.$container[0].classList.add(\"select2-container--open\")}),this.on(\"close\",function(){n.$container[0].classList.remove(\"select2-container--open\")}),this.on(\"enable\",function(){n.$container[0].classList.remove(\"select2-container--disabled\")}),this.on(\"disable\",function(){n.$container[0].classList.add(\"select2-container--disabled\")}),this.on(\"blur\",function(){n.$container[0].classList.remove(\"select2-container--focus\")}),this.on(\"query\",function(t){n.isOpen()||n.trigger(\"open\",{}),this.dataAdapter.query(t,function(e){n.trigger(\"results:all\",{data:e,query:t})})}),this.on(\"query:append\",function(t){this.dataAdapter.query(t,function(e){n.trigger(\"results:append\",{data:e,query:t})})}),this.on(\"keypress\",function(e){var t=e.which;n.isOpen()?t===s.ESC||t===s.UP&&e.altKey?(n.close(e),e.preventDefault()):t===s.ENTER||t===s.TAB?(n.trigger(\"results:select\",{}),e.preventDefault()):t===s.SPACE&&e.ctrlKey?(n.trigger(\"results:toggle\",{}),e.preventDefault()):t===s.UP?(n.trigger(\"results:previous\",{}),e.preventDefault()):t===s.DOWN&&(n.trigger(\"results:next\",{}),e.preventDefault()):(t===s.ENTER||t===s.SPACE||t===s.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},o.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},o.prototype._isChangeMutation=function(e){var t=this;if(e.addedNodes&&0<e.addedNodes.length){for(var n=0;n<e.addedNodes.length;n++)if(e.addedNodes[n].selected)return!0}else{if(e.removedNodes&&0<e.removedNodes.length)return!0;if(Array.isArray(e))return e.some(function(e){return t._isChangeMutation(e)})}return!1},o.prototype._syncSubtree=function(e){var e=this._isChangeMutation(e),t=this;e&&this.dataAdapter.current(function(e){t.trigger(\"selection:update\",{data:e})})},o.prototype.trigger=function(e,t){var n=o.__super__.trigger,s={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===t&&(t={}),e in s){var i=s[e],s={prevented:!1,name:e,args:t};if(n.call(this,i,s),s.prevented)return void(t.prevented=!0)}n.call(this,e,t)},o.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},o.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},o.prototype.close=function(e){this.isOpen()&&this.trigger(\"close\",{originalEvent:e})},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get(\"disabled\")},o.prototype.isOpen=function(){return this.$container[0].classList.contains(\"select2-container--open\")},o.prototype.hasFocus=function(){return this.$container[0].classList.contains(\"select2-container--focus\")},o.prototype.focus=function(e){this.hasFocus()||(this.$container[0].classList.add(\"select2-container--focus\"),this.trigger(\"focus\",{}))},o.prototype.enable=function(e){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.');e=!(e=null==e||0===e.length?[!0]:e)[0];this.$element.prop(\"disabled\",e)},o.prototype.data=function(){this.options.get(\"debug\")&&0<arguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},o.prototype.val=function(e){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();e=e[0];Array.isArray(e)&&(e=e.map(function(e){return e.toString()})),this.$element.val(e).trigger(\"input\").trigger(\"change\")},o.prototype.destroy=function(){r.RemoveData(this.$container[0]),this.$container.remove(),this._observer.disconnect(),this._observer=null,this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",r.GetData(this.$element[0],\"old-tabindex\")),this.$element[0].classList.remove(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),r.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},o.prototype.render=function(){var e=t('<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container[0].classList.add(\"select2-container--\"+this.options.get(\"theme\")),r.StoreData(e[0],\"element\",this.$element),e},o}),u.define(\"jquery-mousewheel\",[\"jquery\"],function(e){return e}),u.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\"./select2/core\",\"./select2/defaults\",\"./select2/utils\"],function(i,e,r,t,o){var a;return null==i.fn.select2&&(a=[\"open\",\"close\",\"destroy\"],i.fn.select2=function(t){if(\"object\"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new r(i(this),e)}),this;if(\"string\"!=typeof t)throw new Error(\"Invalid arguments for Select2: \"+t);var n,s=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=o.GetData(this,\"select2\");null==e&&window.console&&console.error&&console.error(\"The select2('\"+t+\"') method was called on an element that is not using Select2.\"),n=e[t].apply(e,s)}),-1<a.indexOf(t)?this:n}),null==i.fn.select2.defaults&&(i.fn.select2.defaults=t),r}),{define:u.define,require:u.require});function b(e,t){return i.call(e,t)}function l(e,t){var n,s,i,r,o,a,l,c,u,d,p=t&&t.split(\"/\"),h=y.map,f=h&&h[\"*\"]||{};if(e){for(t=(e=e.split(\"/\")).length-1,y.nodeIdCompat&&_.test(e[t])&&(e[t]=e[t].replace(_,\"\")),\".\"===e[0].charAt(0)&&p&&(e=p.slice(0,p.length-1).concat(e)),c=0;c<e.length;c++)\".\"===(d=e[c])?(e.splice(c,1),--c):\"..\"===d&&(0===c||1===c&&\"..\"===e[2]||\"..\"===e[c-1]||0<c&&(e.splice(c-1,2),c-=2));e=e.join(\"/\")}if((p||f)&&h){for(c=(n=e.split(\"/\")).length;0<c;--c){if(s=n.slice(0,c).join(\"/\"),p)for(u=p.length;0<u;--u)if(i=h[p.slice(0,u).join(\"/\")],i=i&&i[s]){r=i,o=c;break}if(r)break;!a&&f&&f[s]&&(a=f[s],l=c)}!r&&a&&(r=a,o=l),r&&(n.splice(0,o,r),e=n.join(\"/\"))}return e}function w(t,n){return function(){var e=a.call(arguments,0);return\"string\"!=typeof e[0]&&1===e.length&&e.push(null),o.apply(p,e.concat([t,n]))}}function x(e){var t;if(b(m,e)&&(t=m[e],delete m[e],v[e]=!0,r.apply(p,t)),!b(g,e)&&!b(v,e))throw new Error(\"No \"+e);return g[e]}function c(e){var t,n=e?e.indexOf(\"!\"):-1;return-1<n&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function A(e){return e?c(e):[]}var u=s.require(\"jquery.select2\");return t.fn.select2.amd=s,u});","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","export default function(x) {\n  return x;\n}\n","export default function(array, n) {\n  var t, j = array.length, i = j - n;\n  while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n  if (transform == null) return identity;\n  var x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(input, i) {\n    if (!i) x0 = y0 = 0;\n    var j = 2, n = input.length, output = new Array(n);\n    output[0] = (x0 += input[0]) * kx + dx;\n    output[1] = (y0 += input[1]) * ky + dy;\n    while (j < n) output[j] = input[j], ++j;\n    return output;\n  };\n}\n","/*!\n * URI.js - Mutating URLs\n * IPv6 Support\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof module === 'object' && module.exports) {\n    // Node\n    module.exports = factory();\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(factory);\n  } else {\n    // Browser globals (root is window)\n    root.IPv6 = factory(root);\n  }\n}(this, function (root) {\n  'use strict';\n\n  /*\n  var _in = \"fe80:0000:0000:0000:0204:61ff:fe9d:f156\";\n  var _out = IPv6.best(_in);\n  var _expected = \"fe80::204:61ff:fe9d:f156\";\n\n  console.log(_in, _out, _expected, _out === _expected);\n  */\n\n  // save current IPv6 variable, if any\n  var _IPv6 = root && root.IPv6;\n\n  function bestPresentation(address) {\n    // based on:\n    // Javascript to test an IPv6 address for proper format, and to\n    // present the \"best text representation\" according to IETF Draft RFC at\n    // http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04\n    // 8 Feb 2010 Rich Brown, Dartware, LLC\n    // Please feel free to use this code as long as you provide a link to\n    // http://www.intermapper.com\n    // http://intermapper.com/support/tools/IPV6-Validator.aspx\n    // http://download.dartware.com/thirdparty/ipv6validator.js\n\n    var _address = address.toLowerCase();\n    var segments = _address.split(':');\n    var length = segments.length;\n    var total = 8;\n\n    // trim colons (:: or ::a:b:c… or …a:b:c::)\n    if (segments[0] === '' && segments[1] === '' && segments[2] === '') {\n      // must have been ::\n      // remove first two items\n      segments.shift();\n      segments.shift();\n    } else if (segments[0] === '' && segments[1] === '') {\n      // must have been ::xxxx\n      // remove the first item\n      segments.shift();\n    } else if (segments[length - 1] === '' && segments[length - 2] === '') {\n      // must have been xxxx::\n      segments.pop();\n    }\n\n    length = segments.length;\n\n    // adjust total segments for IPv4 trailer\n    if (segments[length - 1].indexOf('.') !== -1) {\n      // found a \".\" which means IPv4\n      total = 7;\n    }\n\n    // fill empty segments them with \"0000\"\n    var pos;\n    for (pos = 0; pos < length; pos++) {\n      if (segments[pos] === '') {\n        break;\n      }\n    }\n\n    if (pos < total) {\n      segments.splice(pos, 1, '0000');\n      while (segments.length < total) {\n        segments.splice(pos, 0, '0000');\n      }\n    }\n\n    // strip leading zeros\n    var _segments;\n    for (var i = 0; i < total; i++) {\n      _segments = segments[i].split('');\n      for (var j = 0; j < 3 ; j++) {\n        if (_segments[0] === '0' && _segments.length > 1) {\n          _segments.splice(0,1);\n        } else {\n          break;\n        }\n      }\n\n      segments[i] = _segments.join('');\n    }\n\n    // find longest sequence of zeroes and coalesce them into one segment\n    var best = -1;\n    var _best = 0;\n    var _current = 0;\n    var current = -1;\n    var inzeroes = false;\n    // i; already declared\n\n    for (i = 0; i < total; i++) {\n      if (inzeroes) {\n        if (segments[i] === '0') {\n          _current += 1;\n        } else {\n          inzeroes = false;\n          if (_current > _best) {\n            best = current;\n            _best = _current;\n          }\n        }\n      } else {\n        if (segments[i] === '0') {\n          inzeroes = true;\n          current = i;\n          _current = 1;\n        }\n      }\n    }\n\n    if (_current > _best) {\n      best = current;\n      _best = _current;\n    }\n\n    if (_best > 1) {\n      segments.splice(best, _best, '');\n    }\n\n    length = segments.length;\n\n    // assemble remaining segments\n    var result = '';\n    if (segments[0] === '')  {\n      result = ':';\n    }\n\n    for (i = 0; i < length; i++) {\n      result += segments[i];\n      if (i === length - 1) {\n        break;\n      }\n\n      result += ':';\n    }\n\n    if (segments[length - 1] === '') {\n      result += ':';\n    }\n\n    return result;\n  }\n\n  function noConflict() {\n    /*jshint validthis: true */\n    if (root.IPv6 === this) {\n      root.IPv6 = _IPv6;\n    }\n\n    return this;\n  }\n\n  return {\n    best: bestPresentation,\n    noConflict: noConflict\n  };\n}));\n","/*!\n * URI.js - Mutating URLs\n * Second Level Domain (SLD) Support\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof module === 'object' && module.exports) {\n    // Node\n    module.exports = factory();\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(factory);\n  } else {\n    // Browser globals (root is window)\n    root.SecondLevelDomains = factory(root);\n  }\n}(this, function (root) {\n  'use strict';\n\n  // save current SecondLevelDomains variable, if any\n  var _SecondLevelDomains = root && root.SecondLevelDomains;\n\n  var SLD = {\n    // list of known Second Level Domains\n    // converted list of SLDs from https://github.com/gavingmiller/second-level-domains\n    // ----\n    // publicsuffix.org is more current and actually used by a couple of browsers internally.\n    // downside is it also contains domains like \"dyndns.org\" - which is fine for the security\n    // issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js\n    // ----\n    list: {\n      'ac':' com gov mil net org ',\n      'ae':' ac co gov mil name net org pro sch ',\n      'af':' com edu gov net org ',\n      'al':' com edu gov mil net org ',\n      'ao':' co ed gv it og pb ',\n      'ar':' com edu gob gov int mil net org tur ',\n      'at':' ac co gv or ',\n      'au':' asn com csiro edu gov id net org ',\n      'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ',\n      'bb':' biz co com edu gov info net org store tv ',\n      'bh':' biz cc com edu gov info net org ',\n      'bn':' com edu gov net org ',\n      'bo':' com edu gob gov int mil net org tv ',\n      'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ',\n      'bs':' com edu gov net org ',\n      'bz':' du et om ov rg ',\n      'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ',\n      'ck':' biz co edu gen gov info net org ',\n      'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ',\n      'co':' com edu gov mil net nom org ',\n      'cr':' ac c co ed fi go or sa ',\n      'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ',\n      'do':' art com edu gob gov mil net org sld web ',\n      'dz':' art asso com edu gov net org pol ',\n      'ec':' com edu fin gov info med mil net org pro ',\n      'eg':' com edu eun gov mil name net org sci ',\n      'er':' com edu gov ind mil net org rochest w ',\n      'es':' com edu gob nom org ',\n      'et':' biz com edu gov info name net org ',\n      'fj':' ac biz com info mil name net org pro ',\n      'fk':' ac co gov net nom org ',\n      'fr':' asso com f gouv nom prd presse tm ',\n      'gg':' co net org ',\n      'gh':' com edu gov mil org ',\n      'gn':' ac com gov net org ',\n      'gr':' com edu gov mil net org ',\n      'gt':' com edu gob ind mil net org ',\n      'gu':' com edu gov net org ',\n      'hk':' com edu gov idv net org ',\n      'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ',\n      'id':' ac co go mil net or sch web ',\n      'il':' ac co gov idf k12 muni net org ',\n      'in':' ac co edu ernet firm gen gov i ind mil net nic org res ',\n      'iq':' com edu gov i mil net org ',\n      'ir':' ac co dnssec gov i id net org sch ',\n      'it':' edu gov ',\n      'je':' co net org ',\n      'jo':' com edu gov mil name net org sch ',\n      'jp':' ac ad co ed go gr lg ne or ',\n      'ke':' ac co go info me mobi ne or sc ',\n      'kh':' com edu gov mil net org per ',\n      'ki':' biz com de edu gov info mob net org tel ',\n      'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ',\n      'kn':' edu gov net org ',\n      'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ',\n      'kw':' com edu gov net org ',\n      'ky':' com edu gov net org ',\n      'kz':' com edu gov mil net org ',\n      'lb':' com edu gov net org ',\n      'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ',\n      'lr':' com edu gov net org ',\n      'lv':' asn com conf edu gov id mil net org ',\n      'ly':' com edu gov id med net org plc sch ',\n      'ma':' ac co gov m net org press ',\n      'mc':' asso tm ',\n      'me':' ac co edu gov its net org priv ',\n      'mg':' com edu gov mil nom org prd tm ',\n      'mk':' com edu gov inf name net org pro ',\n      'ml':' com edu gov net org presse ',\n      'mn':' edu gov org ',\n      'mo':' com edu gov net org ',\n      'mt':' com edu gov net org ',\n      'mv':' aero biz com coop edu gov info int mil museum name net org pro ',\n      'mw':' ac co com coop edu gov int museum net org ',\n      'mx':' com edu gob net org ',\n      'my':' com edu gov mil name net org sch ',\n      'nf':' arts com firm info net other per rec store web ',\n      'ng':' biz com edu gov mil mobi name net org sch ',\n      'ni':' ac co com edu gob mil net nom org ',\n      'np':' com edu gov mil net org ',\n      'nr':' biz com edu gov info net org ',\n      'om':' ac biz co com edu gov med mil museum net org pro sch ',\n      'pe':' com edu gob mil net nom org sld ',\n      'ph':' com edu gov i mil net ngo org ',\n      'pk':' biz com edu fam gob gok gon gop gos gov net org web ',\n      'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ',\n      'pr':' ac biz com edu est gov info isla name net org pro prof ',\n      'ps':' com edu gov net org plo sec ',\n      'pw':' belau co ed go ne or ',\n      'ro':' arts com firm info nom nt org rec store tm www ',\n      'rs':' ac co edu gov in org ',\n      'sb':' com edu gov net org ',\n      'sc':' com edu gov net org ',\n      'sh':' co com edu gov net nom org ',\n      'sl':' com edu gov net org ',\n      'st':' co com consulado edu embaixada gov mil net org principe saotome store ',\n      'sv':' com edu gob org red ',\n      'sz':' ac co org ',\n      'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ',\n      'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ',\n      'tw':' club com ebiz edu game gov idv mil net org ',\n      'mu':' ac co com gov net or org ',\n      'mz':' ac co edu gov org ',\n      'na':' co com ',\n      'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ',\n      'pa':' abo ac com edu gob ing med net nom org sld ',\n      'pt':' com edu gov int net nome org publ ',\n      'py':' com edu gov mil net org ',\n      'qa':' com edu gov mil net org ',\n      're':' asso com nom ',\n      'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ',\n      'rw':' ac co com edu gouv gov int mil net ',\n      'sa':' com edu gov med net org pub sch ',\n      'sd':' com edu gov info med net org tv ',\n      'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ',\n      'sg':' com edu gov idn net org per ',\n      'sn':' art com edu gouv org perso univ ',\n      'sy':' com edu gov mil net news org ',\n      'th':' ac co go in mi net or ',\n      'tj':' ac biz co com edu go gov info int mil name net nic org test web ',\n      'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ',\n      'tz':' ac co go ne or ',\n      'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ',\n      'ug':' ac co go ne or org sc ',\n      'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ',\n      'us':' dni fed isa kids nsn ',\n      'uy':' com edu gub mil net org ',\n      've':' co com edu gob info mil net org web ',\n      'vi':' co com k12 net org ',\n      'vn':' ac biz com edu gov health info int name net org pro ',\n      'ye':' co com gov ltd me net org plc ',\n      'yu':' ac co edu gov org ',\n      'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ',\n      'zm':' ac co com edu gov net org sch ',\n      // https://en.wikipedia.org/wiki/CentralNic#Second-level_domains\n      'com': 'ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ',\n      'net': 'gb jp se uk ',\n      'org': 'ae',\n      'de': 'com '\n    },\n    // gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost\n    // in both performance and memory footprint. No initialization required.\n    // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4\n    // Following methods use lastIndexOf() rather than array.split() in order\n    // to avoid any memory allocations.\n    has: function(domain) {\n      var tldOffset = domain.lastIndexOf('.');\n      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n        return false;\n      }\n      var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n      if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n        return false;\n      }\n      var sldList = SLD.list[domain.slice(tldOffset+1)];\n      if (!sldList) {\n        return false;\n      }\n      return sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0;\n    },\n    is: function(domain) {\n      var tldOffset = domain.lastIndexOf('.');\n      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n        return false;\n      }\n      var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n      if (sldOffset >= 0) {\n        return false;\n      }\n      var sldList = SLD.list[domain.slice(tldOffset+1)];\n      if (!sldList) {\n        return false;\n      }\n      return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0;\n    },\n    get: function(domain) {\n      var tldOffset = domain.lastIndexOf('.');\n      if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n        return null;\n      }\n      var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n      if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n        return null;\n      }\n      var sldList = SLD.list[domain.slice(tldOffset+1)];\n      if (!sldList) {\n        return null;\n      }\n      if (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) {\n        return null;\n      }\n      return domain.slice(sldOffset+1);\n    },\n    noConflict: function(){\n      if (root.SecondLevelDomains === this) {\n        root.SecondLevelDomains = _SecondLevelDomains;\n      }\n      return this;\n    }\n  };\n\n  return SLD;\n}));\n","/*!\n * URI.js - Mutating URLs\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n *   MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n(function (root, factory) {\n  'use strict';\n  // https://github.com/umdjs/umd/blob/master/returnExports.js\n  if (typeof module === 'object' && module.exports) {\n    // Node\n    module.exports = factory(require('./punycode'), require('./IPv6'), require('./SecondLevelDomains'));\n  } else if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['./punycode', './IPv6', './SecondLevelDomains'], factory);\n  } else {\n    // Browser globals (root is window)\n    root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root);\n  }\n}(this, function (punycode, IPv6, SLD, root) {\n  'use strict';\n  /*global location, escape, unescape */\n  // FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n  /*jshint camelcase: false */\n\n  // save current URI variable, if any\n  var _URI = root && root.URI;\n\n  function URI(url, base) {\n    var _urlSupplied = arguments.length >= 1;\n    var _baseSupplied = arguments.length >= 2;\n\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof URI)) {\n      if (_urlSupplied) {\n        if (_baseSupplied) {\n          return new URI(url, base);\n        }\n\n        return new URI(url);\n      }\n\n      return new URI();\n    }\n\n    if (url === undefined) {\n      if (_urlSupplied) {\n        throw new TypeError('undefined is not a valid argument for URI');\n      }\n\n      if (typeof location !== 'undefined') {\n        url = location.href + '';\n      } else {\n        url = '';\n      }\n    }\n\n    if (url === null) {\n      if (_urlSupplied) {\n        throw new TypeError('null is not a valid argument for URI');\n      }\n    }\n\n    this.href(url);\n\n    // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor\n    if (base !== undefined) {\n      return this.absoluteTo(base);\n    }\n\n    return this;\n  }\n\n  function isInteger(value) {\n    return /^[0-9]+$/.test(value);\n  }\n\n  URI.version = '1.19.11';\n\n  var p = URI.prototype;\n  var hasOwn = Object.prototype.hasOwnProperty;\n\n  function escapeRegEx(string) {\n    // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n    return string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n  }\n\n  function getType(value) {\n    // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value\n    if (value === undefined) {\n      return 'Undefined';\n    }\n\n    return String(Object.prototype.toString.call(value)).slice(8, -1);\n  }\n\n  function isArray(obj) {\n    return getType(obj) === 'Array';\n  }\n\n  function filterArrayValues(data, value) {\n    var lookup = {};\n    var i, length;\n\n    if (getType(value) === 'RegExp') {\n      lookup = null;\n    } else if (isArray(value)) {\n      for (i = 0, length = value.length; i < length; i++) {\n        lookup[value[i]] = true;\n      }\n    } else {\n      lookup[value] = true;\n    }\n\n    for (i = 0, length = data.length; i < length; i++) {\n      /*jshint laxbreak: true */\n      var _match = lookup && lookup[data[i]] !== undefined\n        || !lookup && value.test(data[i]);\n      /*jshint laxbreak: false */\n      if (_match) {\n        data.splice(i, 1);\n        length--;\n        i--;\n      }\n    }\n\n    return data;\n  }\n\n  function arrayContains(list, value) {\n    var i, length;\n\n    // value may be string, number, array, regexp\n    if (isArray(value)) {\n      // Note: this can be optimized to O(n) (instead of current O(m * n))\n      for (i = 0, length = value.length; i < length; i++) {\n        if (!arrayContains(list, value[i])) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    var _type = getType(value);\n    for (i = 0, length = list.length; i < length; i++) {\n      if (_type === 'RegExp') {\n        if (typeof list[i] === 'string' && list[i].match(value)) {\n          return true;\n        }\n      } else if (list[i] === value) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function arraysEqual(one, two) {\n    if (!isArray(one) || !isArray(two)) {\n      return false;\n    }\n\n    // arrays can't be equal if they have different amount of content\n    if (one.length !== two.length) {\n      return false;\n    }\n\n    one.sort();\n    two.sort();\n\n    for (var i = 0, l = one.length; i < l; i++) {\n      if (one[i] !== two[i]) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function trimSlashes(text) {\n    var trim_expression = /^\\/+|\\/+$/g;\n    return text.replace(trim_expression, '');\n  }\n\n  URI._parts = function() {\n    return {\n      protocol: null,\n      username: null,\n      password: null,\n      hostname: null,\n      urn: null,\n      port: null,\n      path: null,\n      query: null,\n      fragment: null,\n      // state\n      preventInvalidHostname: URI.preventInvalidHostname,\n      duplicateQueryParameters: URI.duplicateQueryParameters,\n      escapeQuerySpace: URI.escapeQuerySpace\n    };\n  };\n  // state: throw on invalid hostname\n  // see https://github.com/medialize/URI.js/pull/345\n  // and https://github.com/medialize/URI.js/issues/354\n  URI.preventInvalidHostname = false;\n  // state: allow duplicate query parameters (a=1&a=1)\n  URI.duplicateQueryParameters = false;\n  // state: replaces + with %20 (space in query strings)\n  URI.escapeQuerySpace = true;\n  // static properties\n  URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;\n  URI.idn_expression = /[^a-z0-9\\._-]/i;\n  URI.punycode_expression = /(xn--)/i;\n  // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?\n  URI.ip4_expression = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\n  // credits to Rich Brown\n  // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096\n  // specification: http://www.ietf.org/rfc/rfc4291.txt\n  URI.ip6_expression = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n  // expression used is \"gruber revised\" (@gruber v2) determined to be the\n  // best solution in a regex-golf we did a couple of ages ago at\n  // * http://mathiasbynens.be/demo/url-regex\n  // * http://rodneyrehm.de/t/url-regex.html\n  URI.find_uri_expression = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/ig;\n  URI.findUri = {\n    // valid \"scheme://\" or \"www.\"\n    start: /\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,\n    // everything up to the next whitespace\n    end: /[\\s\\r\\n]|$/,\n    // trim trailing punctuation captured by end RegExp\n    trim: /[`!()\\[\\]{};:'\".,<>?«»“”„‘’]+$/,\n    // balanced parens inclusion (), [], {}, <>\n    parens: /(\\([^\\)]*\\)|\\[[^\\]]*\\]|\\{[^}]*\\}|<[^>]*>)/g,\n  };\n  URI.leading_whitespace_expression = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  // https://infra.spec.whatwg.org/#ascii-tab-or-newline\n  URI.ascii_tab_whitespace = /[\\u0009\\u000A\\u000D]+/g\n  // http://www.iana.org/assignments/uri-schemes.html\n  // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports\n  URI.defaultPorts = {\n    http: '80',\n    https: '443',\n    ftp: '21',\n    gopher: '70',\n    ws: '80',\n    wss: '443'\n  };\n  // list of protocols which always require a hostname\n  URI.hostProtocols = [\n    'http',\n    'https'\n  ];\n\n  // allowed hostname characters according to RFC 3986\n  // ALPHA DIGIT \"-\" \".\" \"_\" \"~\" \"!\" \"$\" \"&\" \"'\" \"(\" \")\" \"*\" \"+\" \",\" \";\" \"=\" %encoded\n  // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . - _\n  URI.invalid_hostname_characters = /[^a-zA-Z0-9\\.\\-:_]/;\n  // map DOM Elements to their URI attribute\n  URI.domAttributes = {\n    'a': 'href',\n    'blockquote': 'cite',\n    'link': 'href',\n    'base': 'href',\n    'script': 'src',\n    'form': 'action',\n    'img': 'src',\n    'area': 'href',\n    'iframe': 'src',\n    'embed': 'src',\n    'source': 'src',\n    'track': 'src',\n    'input': 'src', // but only if type=\"image\"\n    'audio': 'src',\n    'video': 'src'\n  };\n  URI.getDomAttribute = function(node) {\n    if (!node || !node.nodeName) {\n      return undefined;\n    }\n\n    var nodeName = node.nodeName.toLowerCase();\n    // <input> should only expose src for type=\"image\"\n    if (nodeName === 'input' && node.type !== 'image') {\n      return undefined;\n    }\n\n    return URI.domAttributes[nodeName];\n  };\n\n  function escapeForDumbFirefox36(value) {\n    // https://github.com/medialize/URI.js/issues/91\n    return escape(value);\n  }\n\n  // encoding / decoding according to RFC3986\n  function strictEncodeURIComponent(string) {\n    // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent\n    return encodeURIComponent(string)\n      .replace(/[!'()*]/g, escapeForDumbFirefox36)\n      .replace(/\\*/g, '%2A');\n  }\n  URI.encode = strictEncodeURIComponent;\n  URI.decode = decodeURIComponent;\n  URI.iso8859 = function() {\n    URI.encode = escape;\n    URI.decode = unescape;\n  };\n  URI.unicode = function() {\n    URI.encode = strictEncodeURIComponent;\n    URI.decode = decodeURIComponent;\n  };\n  URI.characters = {\n    pathname: {\n      encode: {\n        // RFC3986 2.1: For consistency, URI producers and normalizers should\n        // use uppercase hexadecimal digits for all percent-encodings.\n        expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,\n        map: {\n          // -._~!'()*\n          '%24': '$',\n          '%26': '&',\n          '%2B': '+',\n          '%2C': ',',\n          '%3B': ';',\n          '%3D': '=',\n          '%3A': ':',\n          '%40': '@'\n        }\n      },\n      decode: {\n        expression: /[\\/\\?#]/g,\n        map: {\n          '/': '%2F',\n          '?': '%3F',\n          '#': '%23'\n        }\n      }\n    },\n    reserved: {\n      encode: {\n        // RFC3986 2.1: For consistency, URI producers and normalizers should\n        // use uppercase hexadecimal digits for all percent-encodings.\n        expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,\n        map: {\n          // gen-delims\n          '%3A': ':',\n          '%2F': '/',\n          '%3F': '?',\n          '%23': '#',\n          '%5B': '[',\n          '%5D': ']',\n          '%40': '@',\n          // sub-delims\n          '%21': '!',\n          '%24': '$',\n          '%26': '&',\n          '%27': '\\'',\n          '%28': '(',\n          '%29': ')',\n          '%2A': '*',\n          '%2B': '+',\n          '%2C': ',',\n          '%3B': ';',\n          '%3D': '='\n        }\n      }\n    },\n    urnpath: {\n      // The characters under `encode` are the characters called out by RFC 2141 as being acceptable\n      // for usage in a URN. RFC2141 also calls out \"-\", \".\", and \"_\" as acceptable characters, but\n      // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also\n      // note that the colon character is not featured in the encoding map; this is because URI.js\n      // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it\n      // should not appear unencoded in a segment itself.\n      // See also the note above about RFC3986 and capitalalized hex digits.\n      encode: {\n        expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,\n        map: {\n          '%21': '!',\n          '%24': '$',\n          '%27': '\\'',\n          '%28': '(',\n          '%29': ')',\n          '%2A': '*',\n          '%2B': '+',\n          '%2C': ',',\n          '%3B': ';',\n          '%3D': '=',\n          '%40': '@'\n        }\n      },\n      // These characters are the characters called out by RFC2141 as \"reserved\" characters that\n      // should never appear in a URN, plus the colon character (see note above).\n      decode: {\n        expression: /[\\/\\?#:]/g,\n        map: {\n          '/': '%2F',\n          '?': '%3F',\n          '#': '%23',\n          ':': '%3A'\n        }\n      }\n    }\n  };\n  URI.encodeQuery = function(string, escapeQuerySpace) {\n    var escaped = URI.encode(string + '');\n    if (escapeQuerySpace === undefined) {\n      escapeQuerySpace = URI.escapeQuerySpace;\n    }\n\n    return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;\n  };\n  URI.decodeQuery = function(string, escapeQuerySpace) {\n    string += '';\n    if (escapeQuerySpace === undefined) {\n      escapeQuerySpace = URI.escapeQuerySpace;\n    }\n\n    try {\n      return URI.decode(escapeQuerySpace ? string.replace(/\\+/g, '%20') : string);\n    } catch(e) {\n      // we're not going to mess with weird encodings,\n      // give up and return the undecoded original string\n      // see https://github.com/medialize/URI.js/issues/87\n      // see https://github.com/medialize/URI.js/issues/92\n      return string;\n    }\n  };\n  // generate encode/decode path functions\n  var _parts = {'encode':'encode', 'decode':'decode'};\n  var _part;\n  var generateAccessor = function(_group, _part) {\n    return function(string) {\n      try {\n        return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {\n          return URI.characters[_group][_part].map[c];\n        });\n      } catch (e) {\n        // we're not going to mess with weird encodings,\n        // give up and return the undecoded original string\n        // see https://github.com/medialize/URI.js/issues/87\n        // see https://github.com/medialize/URI.js/issues/92\n        return string;\n      }\n    };\n  };\n\n  for (_part in _parts) {\n    URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);\n    URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);\n  }\n\n  var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {\n    return function(string) {\n      // Why pass in names of functions, rather than the function objects themselves? The\n      // definitions of some functions (but in particular, URI.decode) will occasionally change due\n      // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure\n      // that the functions we use here are \"fresh\".\n      var actualCodingFunc;\n      if (!_innerCodingFuncName) {\n        actualCodingFunc = URI[_codingFuncName];\n      } else {\n        actualCodingFunc = function(string) {\n          return URI[_codingFuncName](URI[_innerCodingFuncName](string));\n        };\n      }\n\n      var segments = (string + '').split(_sep);\n\n      for (var i = 0, length = segments.length; i < length; i++) {\n        segments[i] = actualCodingFunc(segments[i]);\n      }\n\n      return segments.join(_sep);\n    };\n  };\n\n  // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.\n  URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');\n  URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');\n  URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');\n  URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');\n\n  URI.encodeReserved = generateAccessor('reserved', 'encode');\n\n  URI.parse = function(string, parts) {\n    var pos;\n    if (!parts) {\n      parts = {\n        preventInvalidHostname: URI.preventInvalidHostname\n      };\n    }\n\n    string = string.replace(URI.leading_whitespace_expression, '')\n    // https://infra.spec.whatwg.org/#ascii-tab-or-newline\n    string = string.replace(URI.ascii_tab_whitespace, '')\n\n    // [protocol\"://\"[username[\":\"password]\"@\"]hostname[\":\"port]\"/\"?][path][\"?\"querystring][\"#\"fragment]\n\n    // extract fragment\n    pos = string.indexOf('#');\n    if (pos > -1) {\n      // escaping?\n      parts.fragment = string.substring(pos + 1) || null;\n      string = string.substring(0, pos);\n    }\n\n    // extract query\n    pos = string.indexOf('?');\n    if (pos > -1) {\n      // escaping?\n      parts.query = string.substring(pos + 1) || null;\n      string = string.substring(0, pos);\n    }\n\n    // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws)\n    string = string.replace(/^(https?|ftp|wss?)?:+[/\\\\]*/i, '$1://');\n    // slashes and backslashes have lost all meaning for scheme relative URLs\n    string = string.replace(/^[/\\\\]{2,}/i, '//');\n\n    // extract protocol\n    if (string.substring(0, 2) === '//') {\n      // relative-scheme\n      parts.protocol = null;\n      string = string.substring(2);\n      // extract \"user:pass@host:port\"\n      string = URI.parseAuthority(string, parts);\n    } else {\n      pos = string.indexOf(':');\n      if (pos > -1) {\n        parts.protocol = string.substring(0, pos) || null;\n        if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {\n          // : may be within the path\n          parts.protocol = undefined;\n        } else if (string.substring(pos + 1, pos + 3).replace(/\\\\/g, '/') === '//') {\n          string = string.substring(pos + 3);\n\n          // extract \"user:pass@host:port\"\n          string = URI.parseAuthority(string, parts);\n        } else {\n          string = string.substring(pos + 1);\n          parts.urn = true;\n        }\n      }\n    }\n\n    // what's left must be the path\n    parts.path = string;\n\n    // and we're done\n    return parts;\n  };\n  URI.parseHost = function(string, parts) {\n    if (!string) {\n      string = '';\n    }\n\n    // Copy chrome, IE, opera backslash-handling behavior.\n    // Back slashes before the query string get converted to forward slashes\n    // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124\n    // See: https://code.google.com/p/chromium/issues/detail?id=25916\n    // https://github.com/medialize/URI.js/pull/233\n    string = string.replace(/\\\\/g, '/');\n\n    // extract host:port\n    var pos = string.indexOf('/');\n    var bracketPos;\n    var t;\n\n    if (pos === -1) {\n      pos = string.length;\n    }\n\n    if (string.charAt(0) === '[') {\n      // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6\n      // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts\n      // IPv6+port in the format [2001:db8::1]:80 (for the time being)\n      bracketPos = string.indexOf(']');\n      parts.hostname = string.substring(1, bracketPos) || null;\n      parts.port = string.substring(bracketPos + 2, pos) || null;\n      if (parts.port === '/') {\n        parts.port = null;\n      }\n    } else {\n      var firstColon = string.indexOf(':');\n      var firstSlash = string.indexOf('/');\n      var nextColon = string.indexOf(':', firstColon + 1);\n      if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {\n        // IPv6 host contains multiple colons - but no port\n        // this notation is actually not allowed by RFC 3986, but we're a liberal parser\n        parts.hostname = string.substring(0, pos) || null;\n        parts.port = null;\n      } else {\n        t = string.substring(0, pos).split(':');\n        parts.hostname = t[0] || null;\n        parts.port = t[1] || null;\n      }\n    }\n\n    if (parts.hostname && string.substring(pos).charAt(0) !== '/') {\n      pos++;\n      string = '/' + string;\n    }\n\n    if (parts.preventInvalidHostname) {\n      URI.ensureValidHostname(parts.hostname, parts.protocol);\n    }\n\n    if (parts.port) {\n      URI.ensureValidPort(parts.port);\n    }\n\n    return string.substring(pos) || '/';\n  };\n  URI.parseAuthority = function(string, parts) {\n    string = URI.parseUserinfo(string, parts);\n    return URI.parseHost(string, parts);\n  };\n  URI.parseUserinfo = function(string, parts) {\n    // extract username:password\n    var _string = string\n    var firstBackSlash = string.indexOf('\\\\');\n    if (firstBackSlash !== -1) {\n      string = string.replace(/\\\\/g, '/')\n    }\n    var firstSlash = string.indexOf('/');\n    var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);\n    var t;\n\n    // authority@ must come before /path or \\path\n    if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {\n      t = string.substring(0, pos).split(':');\n      parts.username = t[0] ? URI.decode(t[0]) : null;\n      t.shift();\n      parts.password = t[0] ? URI.decode(t.join(':')) : null;\n      string = _string.substring(pos + 1);\n    } else {\n      parts.username = null;\n      parts.password = null;\n    }\n\n    return string;\n  };\n  URI.parseQuery = function(string, escapeQuerySpace) {\n    if (!string) {\n      return {};\n    }\n\n    // throw out the funky business - \"?\"[name\"=\"value\"&\"]+\n    string = string.replace(/&+/g, '&').replace(/^\\?*&*|&+$/g, '');\n\n    if (!string) {\n      return {};\n    }\n\n    var items = {};\n    var splits = string.split('&');\n    var length = splits.length;\n    var v, name, value;\n\n    for (var i = 0; i < length; i++) {\n      v = splits[i].split('=');\n      name = URI.decodeQuery(v.shift(), escapeQuerySpace);\n      // no \"=\" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters\n      value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;\n\n      if (name === '__proto__') {\n        // ignore attempt at exploiting JavaScript internals\n        continue;\n      } else if (hasOwn.call(items, name)) {\n        if (typeof items[name] === 'string' || items[name] === null) {\n          items[name] = [items[name]];\n        }\n\n        items[name].push(value);\n      } else {\n        items[name] = value;\n      }\n    }\n\n    return items;\n  };\n\n  URI.build = function(parts) {\n    var t = '';\n    var requireAbsolutePath = false\n\n    if (parts.protocol) {\n      t += parts.protocol + ':';\n    }\n\n    if (!parts.urn && (t || parts.hostname)) {\n      t += '//';\n      requireAbsolutePath = true\n    }\n\n    t += (URI.buildAuthority(parts) || '');\n\n    if (typeof parts.path === 'string') {\n      if (parts.path.charAt(0) !== '/' && requireAbsolutePath) {\n        t += '/';\n      }\n\n      t += parts.path;\n    }\n\n    if (typeof parts.query === 'string' && parts.query) {\n      t += '?' + parts.query;\n    }\n\n    if (typeof parts.fragment === 'string' && parts.fragment) {\n      t += '#' + parts.fragment;\n    }\n    return t;\n  };\n  URI.buildHost = function(parts) {\n    var t = '';\n\n    if (!parts.hostname) {\n      return '';\n    } else if (URI.ip6_expression.test(parts.hostname)) {\n      t += '[' + parts.hostname + ']';\n    } else {\n      t += parts.hostname;\n    }\n\n    if (parts.port) {\n      t += ':' + parts.port;\n    }\n\n    return t;\n  };\n  URI.buildAuthority = function(parts) {\n    return URI.buildUserinfo(parts) + URI.buildHost(parts);\n  };\n  URI.buildUserinfo = function(parts) {\n    var t = '';\n\n    if (parts.username) {\n      t += URI.encode(parts.username);\n    }\n\n    if (parts.password) {\n      t += ':' + URI.encode(parts.password);\n    }\n\n    if (t) {\n      t += '@';\n    }\n\n    return t;\n  };\n  URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {\n    // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html\n    // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed\n    // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!\n    // URI.js treats the query string as being application/x-www-form-urlencoded\n    // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type\n\n    var t = '';\n    var unique, key, i, length;\n    for (key in data) {\n      if (key === '__proto__') {\n        // ignore attempt at exploiting JavaScript internals\n        continue;\n      } else if (hasOwn.call(data, key)) {\n        if (isArray(data[key])) {\n          unique = {};\n          for (i = 0, length = data[key].length; i < length; i++) {\n            if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {\n              t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);\n              if (duplicateQueryParameters !== true) {\n                unique[data[key][i] + ''] = true;\n              }\n            }\n          }\n        } else if (data[key] !== undefined) {\n          t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);\n        }\n      }\n    }\n\n    return t.substring(1);\n  };\n  URI.buildQueryParameter = function(name, value, escapeQuerySpace) {\n    // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded\n    // don't append \"=\" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization\n    return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');\n  };\n\n  URI.addQuery = function(data, name, value) {\n    if (typeof name === 'object') {\n      for (var key in name) {\n        if (hasOwn.call(name, key)) {\n          URI.addQuery(data, key, name[key]);\n        }\n      }\n    } else if (typeof name === 'string') {\n      if (data[name] === undefined) {\n        data[name] = value;\n        return;\n      } else if (typeof data[name] === 'string') {\n        data[name] = [data[name]];\n      }\n\n      if (!isArray(value)) {\n        value = [value];\n      }\n\n      data[name] = (data[name] || []).concat(value);\n    } else {\n      throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n    }\n  };\n\n  URI.setQuery = function(data, name, value) {\n    if (typeof name === 'object') {\n      for (var key in name) {\n        if (hasOwn.call(name, key)) {\n          URI.setQuery(data, key, name[key]);\n        }\n      }\n    } else if (typeof name === 'string') {\n      data[name] = value === undefined ? null : value;\n    } else {\n      throw new TypeError('URI.setQuery() accepts an object, string as the name parameter');\n    }\n  };\n\n  URI.removeQuery = function(data, name, value) {\n    var i, length, key;\n\n    if (isArray(name)) {\n      for (i = 0, length = name.length; i < length; i++) {\n        data[name[i]] = undefined;\n      }\n    } else if (getType(name) === 'RegExp') {\n      for (key in data) {\n        if (name.test(key)) {\n          data[key] = undefined;\n        }\n      }\n    } else if (typeof name === 'object') {\n      for (key in name) {\n        if (hasOwn.call(name, key)) {\n          URI.removeQuery(data, key, name[key]);\n        }\n      }\n    } else if (typeof name === 'string') {\n      if (value !== undefined) {\n        if (getType(value) === 'RegExp') {\n          if (!isArray(data[name]) && value.test(data[name])) {\n            data[name] = undefined;\n          } else {\n            data[name] = filterArrayValues(data[name], value);\n          }\n        } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {\n          data[name] = undefined;\n        } else if (isArray(data[name])) {\n          data[name] = filterArrayValues(data[name], value);\n        }\n      } else {\n        data[name] = undefined;\n      }\n    } else {\n      throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');\n    }\n  };\n  URI.hasQuery = function(data, name, value, withinArray) {\n    switch (getType(name)) {\n      case 'String':\n        // Nothing to do here\n        break;\n\n      case 'RegExp':\n        for (var key in data) {\n          if (hasOwn.call(data, key)) {\n            if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) {\n              return true;\n            }\n          }\n        }\n\n        return false;\n\n      case 'Object':\n        for (var _key in name) {\n          if (hasOwn.call(name, _key)) {\n            if (!URI.hasQuery(data, _key, name[_key])) {\n              return false;\n            }\n          }\n        }\n\n        return true;\n\n      default:\n        throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter');\n    }\n\n    switch (getType(value)) {\n      case 'Undefined':\n        // true if exists (but may be empty)\n        return name in data; // data[name] !== undefined;\n\n      case 'Boolean':\n        // true if exists and non-empty\n        var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);\n        return value === _booly;\n\n      case 'Function':\n        // allow complex comparison\n        return !!value(data[name], name, data);\n\n      case 'Array':\n        if (!isArray(data[name])) {\n          return false;\n        }\n\n        var op = withinArray ? arrayContains : arraysEqual;\n        return op(data[name], value);\n\n      case 'RegExp':\n        if (!isArray(data[name])) {\n          return Boolean(data[name] && data[name].match(value));\n        }\n\n        if (!withinArray) {\n          return false;\n        }\n\n        return arrayContains(data[name], value);\n\n      case 'Number':\n        value = String(value);\n        /* falls through */\n      case 'String':\n        if (!isArray(data[name])) {\n          return data[name] === value;\n        }\n\n        if (!withinArray) {\n          return false;\n        }\n\n        return arrayContains(data[name], value);\n\n      default:\n        throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');\n    }\n  };\n\n\n  URI.joinPaths = function() {\n    var input = [];\n    var segments = [];\n    var nonEmptySegments = 0;\n\n    for (var i = 0; i < arguments.length; i++) {\n      var url = new URI(arguments[i]);\n      input.push(url);\n      var _segments = url.segment();\n      for (var s = 0; s < _segments.length; s++) {\n        if (typeof _segments[s] === 'string') {\n          segments.push(_segments[s]);\n        }\n\n        if (_segments[s]) {\n          nonEmptySegments++;\n        }\n      }\n    }\n\n    if (!segments.length || !nonEmptySegments) {\n      return new URI('');\n    }\n\n    var uri = new URI('').segment(segments);\n\n    if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') {\n      uri.path('/' + uri.path());\n    }\n\n    return uri.normalize();\n  };\n\n  URI.commonPath = function(one, two) {\n    var length = Math.min(one.length, two.length);\n    var pos;\n\n    // find first non-matching character\n    for (pos = 0; pos < length; pos++) {\n      if (one.charAt(pos) !== two.charAt(pos)) {\n        pos--;\n        break;\n      }\n    }\n\n    if (pos < 1) {\n      return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';\n    }\n\n    // revert to last /\n    if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {\n      pos = one.substring(0, pos).lastIndexOf('/');\n    }\n\n    return one.substring(0, pos + 1);\n  };\n\n  URI.withinString = function(string, callback, options) {\n    options || (options = {});\n    var _start = options.start || URI.findUri.start;\n    var _end = options.end || URI.findUri.end;\n    var _trim = options.trim || URI.findUri.trim;\n    var _parens = options.parens || URI.findUri.parens;\n    var _attributeOpen = /[a-z0-9-]=[\"']?$/i;\n\n    _start.lastIndex = 0;\n    while (true) {\n      var match = _start.exec(string);\n      if (!match) {\n        break;\n      }\n\n      var start = match.index;\n      if (options.ignoreHtml) {\n        // attribut(e=[\"']?$)\n        var attributeOpen = string.slice(Math.max(start - 3, 0), start);\n        if (attributeOpen && _attributeOpen.test(attributeOpen)) {\n          continue;\n        }\n      }\n\n      var end = start + string.slice(start).search(_end);\n      var slice = string.slice(start, end);\n      // make sure we include well balanced parens\n      var parensEnd = -1;\n      while (true) {\n        var parensMatch = _parens.exec(slice);\n        if (!parensMatch) {\n          break;\n        }\n\n        var parensMatchEnd = parensMatch.index + parensMatch[0].length;\n        parensEnd = Math.max(parensEnd, parensMatchEnd);\n      }\n\n      if (parensEnd > -1) {\n        slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, '');\n      } else {\n        slice = slice.replace(_trim, '');\n      }\n\n      if (slice.length <= match[0].length) {\n        // the extract only contains the starting marker of a URI,\n        // e.g. \"www\" or \"http://\"\n        continue;\n      }\n\n      if (options.ignore && options.ignore.test(slice)) {\n        continue;\n      }\n\n      end = start + slice.length;\n      var result = callback(slice, start, end, string);\n      if (result === undefined) {\n        _start.lastIndex = end;\n        continue;\n      }\n\n      result = String(result);\n      string = string.slice(0, start) + result + string.slice(end);\n      _start.lastIndex = start + result.length;\n    }\n\n    _start.lastIndex = 0;\n    return string;\n  };\n\n  URI.ensureValidHostname = function(v, protocol) {\n    // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)\n    // they are not part of DNS and therefore ignored by URI.js\n\n    var hasHostname = !!v; // not null and not an empty string\n    var hasProtocol = !!protocol;\n    var rejectEmptyHostname = false;\n\n    if (hasProtocol) {\n      rejectEmptyHostname = arrayContains(URI.hostProtocols, protocol);\n    }\n\n    if (rejectEmptyHostname && !hasHostname) {\n      throw new TypeError('Hostname cannot be empty, if protocol is ' + protocol);\n    } else if (v && v.match(URI.invalid_hostname_characters)) {\n      // test punycode\n      if (!punycode) {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');\n      }\n      if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-:_]');\n      }\n    }\n  };\n\n  URI.ensureValidPort = function (v) {\n    if (!v) {\n      return;\n    }\n\n    var port = Number(v);\n    if (isInteger(port) && (port > 0) && (port < 65536)) {\n      return;\n    }\n\n    throw new TypeError('Port \"' + v + '\" is not a valid port');\n  };\n\n  // noConflict\n  URI.noConflict = function(removeAll) {\n    if (removeAll) {\n      var unconflicted = {\n        URI: this.noConflict()\n      };\n\n      if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {\n        unconflicted.URITemplate = root.URITemplate.noConflict();\n      }\n\n      if (root.IPv6 && typeof root.IPv6.noConflict === 'function') {\n        unconflicted.IPv6 = root.IPv6.noConflict();\n      }\n\n      if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {\n        unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();\n      }\n\n      return unconflicted;\n    } else if (root.URI === this) {\n      root.URI = _URI;\n    }\n\n    return this;\n  };\n\n  p.build = function(deferBuild) {\n    if (deferBuild === true) {\n      this._deferred_build = true;\n    } else if (deferBuild === undefined || this._deferred_build) {\n      this._string = URI.build(this._parts);\n      this._deferred_build = false;\n    }\n\n    return this;\n  };\n\n  p.clone = function() {\n    return new URI(this);\n  };\n\n  p.valueOf = p.toString = function() {\n    return this.build(false)._string;\n  };\n\n\n  function generateSimpleAccessor(_part){\n    return function(v, build) {\n      if (v === undefined) {\n        return this._parts[_part] || '';\n      } else {\n        this._parts[_part] = v || null;\n        this.build(!build);\n        return this;\n      }\n    };\n  }\n\n  function generatePrefixAccessor(_part, _key){\n    return function(v, build) {\n      if (v === undefined) {\n        return this._parts[_part] || '';\n      } else {\n        if (v !== null) {\n          v = v + '';\n          if (v.charAt(0) === _key) {\n            v = v.substring(1);\n          }\n        }\n\n        this._parts[_part] = v;\n        this.build(!build);\n        return this;\n      }\n    };\n  }\n\n  p.protocol = generateSimpleAccessor('protocol');\n  p.username = generateSimpleAccessor('username');\n  p.password = generateSimpleAccessor('password');\n  p.hostname = generateSimpleAccessor('hostname');\n  p.port = generateSimpleAccessor('port');\n  p.query = generatePrefixAccessor('query', '?');\n  p.fragment = generatePrefixAccessor('fragment', '#');\n\n  p.search = function(v, build) {\n    var t = this.query(v, build);\n    return typeof t === 'string' && t.length ? ('?' + t) : t;\n  };\n  p.hash = function(v, build) {\n    var t = this.fragment(v, build);\n    return typeof t === 'string' && t.length ? ('#' + t) : t;\n  };\n\n  p.pathname = function(v, build) {\n    if (v === undefined || v === true) {\n      var res = this._parts.path || (this._parts.hostname ? '/' : '');\n      return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;\n    } else {\n      if (this._parts.urn) {\n        this._parts.path = v ? URI.recodeUrnPath(v) : '';\n      } else {\n        this._parts.path = v ? URI.recodePath(v) : '/';\n      }\n      this.build(!build);\n      return this;\n    }\n  };\n  p.path = p.pathname;\n  p.href = function(href, build) {\n    var key;\n\n    if (href === undefined) {\n      return this.toString();\n    }\n\n    this._string = '';\n    this._parts = URI._parts();\n\n    var _URI = href instanceof URI;\n    var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);\n    if (href.nodeName) {\n      var attribute = URI.getDomAttribute(href);\n      href = href[attribute] || '';\n      _object = false;\n    }\n\n    // window.location is reported to be an object, but it's not the sort\n    // of object we're looking for:\n    // * location.protocol ends with a colon\n    // * location.query != object.search\n    // * location.hash != object.fragment\n    // simply serializing the unknown object should do the trick\n    // (for location, not for everything...)\n    if (!_URI && _object && href.pathname !== undefined) {\n      href = href.toString();\n    }\n\n    if (typeof href === 'string' || href instanceof String) {\n      this._parts = URI.parse(String(href), this._parts);\n    } else if (_URI || _object) {\n      var src = _URI ? href._parts : href;\n      for (key in src) {\n        if (key === 'query') { continue; }\n        if (hasOwn.call(this._parts, key)) {\n          this._parts[key] = src[key];\n        }\n      }\n      if (src.query) {\n        this.query(src.query, false);\n      }\n    } else {\n      throw new TypeError('invalid input');\n    }\n\n    this.build(!build);\n    return this;\n  };\n\n  // identification accessors\n  p.is = function(what) {\n    var ip = false;\n    var ip4 = false;\n    var ip6 = false;\n    var name = false;\n    var sld = false;\n    var idn = false;\n    var punycode = false;\n    var relative = !this._parts.urn;\n\n    if (this._parts.hostname) {\n      relative = false;\n      ip4 = URI.ip4_expression.test(this._parts.hostname);\n      ip6 = URI.ip6_expression.test(this._parts.hostname);\n      ip = ip4 || ip6;\n      name = !ip;\n      sld = name && SLD && SLD.has(this._parts.hostname);\n      idn = name && URI.idn_expression.test(this._parts.hostname);\n      punycode = name && URI.punycode_expression.test(this._parts.hostname);\n    }\n\n    switch (what.toLowerCase()) {\n      case 'relative':\n        return relative;\n\n      case 'absolute':\n        return !relative;\n\n      // hostname identification\n      case 'domain':\n      case 'name':\n        return name;\n\n      case 'sld':\n        return sld;\n\n      case 'ip':\n        return ip;\n\n      case 'ip4':\n      case 'ipv4':\n      case 'inet4':\n        return ip4;\n\n      case 'ip6':\n      case 'ipv6':\n      case 'inet6':\n        return ip6;\n\n      case 'idn':\n        return idn;\n\n      case 'url':\n        return !this._parts.urn;\n\n      case 'urn':\n        return !!this._parts.urn;\n\n      case 'punycode':\n        return punycode;\n    }\n\n    return null;\n  };\n\n  // component specific input validation\n  var _protocol = p.protocol;\n  var _port = p.port;\n  var _hostname = p.hostname;\n\n  p.protocol = function(v, build) {\n    if (v) {\n      // accept trailing ://\n      v = v.replace(/:(\\/\\/)?$/, '');\n\n      if (!v.match(URI.protocol_expression)) {\n        throw new TypeError('Protocol \"' + v + '\" contains characters other than [A-Z0-9.+-] or doesn\\'t start with [A-Z]');\n      }\n    }\n\n    return _protocol.call(this, v, build);\n  };\n  p.scheme = p.protocol;\n  p.port = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v !== undefined) {\n      if (v === 0) {\n        v = null;\n      }\n\n      if (v) {\n        v += '';\n        if (v.charAt(0) === ':') {\n          v = v.substring(1);\n        }\n\n        URI.ensureValidPort(v);\n      }\n    }\n    return _port.call(this, v, build);\n  };\n  p.hostname = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v !== undefined) {\n      var x = { preventInvalidHostname: this._parts.preventInvalidHostname };\n      var res = URI.parseHost(v, x);\n      if (res !== '/') {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n      }\n\n      v = x.hostname;\n      if (this._parts.preventInvalidHostname) {\n        URI.ensureValidHostname(v, this._parts.protocol);\n      }\n    }\n\n    return _hostname.call(this, v, build);\n  };\n\n  // compound accessors\n  p.origin = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      var protocol = this.protocol();\n      var authority = this.authority();\n      if (!authority) {\n        return '';\n      }\n\n      return (protocol ? protocol + '://' : '') + this.authority();\n    } else {\n      var origin = URI(v);\n      this\n        .protocol(origin.protocol())\n        .authority(origin.authority())\n        .build(!build);\n      return this;\n    }\n  };\n  p.host = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      return this._parts.hostname ? URI.buildHost(this._parts) : '';\n    } else {\n      var res = URI.parseHost(v, this._parts);\n      if (res !== '/') {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.authority = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      return this._parts.hostname ? URI.buildAuthority(this._parts) : '';\n    } else {\n      var res = URI.parseAuthority(v, this._parts);\n      if (res !== '/') {\n        throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.userinfo = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined) {\n      var t = URI.buildUserinfo(this._parts);\n      return t ? t.substring(0, t.length -1) : t;\n    } else {\n      if (v[v.length-1] !== '@') {\n        v += '@';\n      }\n\n      URI.parseUserinfo(v, this._parts);\n      this.build(!build);\n      return this;\n    }\n  };\n  p.resource = function(v, build) {\n    var parts;\n\n    if (v === undefined) {\n      return this.path() + this.search() + this.hash();\n    }\n\n    parts = URI.parse(v);\n    this._parts.path = parts.path;\n    this._parts.query = parts.query;\n    this._parts.fragment = parts.fragment;\n    this.build(!build);\n    return this;\n  };\n\n  // fraction accessors\n  p.subdomain = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    // convenience, return \"www\" from \"www.example.org\"\n    if (v === undefined) {\n      if (!this._parts.hostname || this.is('IP')) {\n        return '';\n      }\n\n      // grab domain and add another segment\n      var end = this._parts.hostname.length - this.domain().length - 1;\n      return this._parts.hostname.substring(0, end) || '';\n    } else {\n      var e = this._parts.hostname.length - this.domain().length;\n      var sub = this._parts.hostname.substring(0, e);\n      var replace = new RegExp('^' + escapeRegEx(sub));\n\n      if (v && v.charAt(v.length - 1) !== '.') {\n        v += '.';\n      }\n\n      if (v.indexOf(':') !== -1) {\n        throw new TypeError('Domains cannot contain colons');\n      }\n\n      if (v) {\n        URI.ensureValidHostname(v, this._parts.protocol);\n      }\n\n      this._parts.hostname = this._parts.hostname.replace(replace, v);\n      this.build(!build);\n      return this;\n    }\n  };\n  p.domain = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (typeof v === 'boolean') {\n      build = v;\n      v = undefined;\n    }\n\n    // convenience, return \"example.org\" from \"www.example.org\"\n    if (v === undefined) {\n      if (!this._parts.hostname || this.is('IP')) {\n        return '';\n      }\n\n      // if hostname consists of 1 or 2 segments, it must be the domain\n      var t = this._parts.hostname.match(/\\./g);\n      if (t && t.length < 2) {\n        return this._parts.hostname;\n      }\n\n      // grab tld and add another segment\n      var end = this._parts.hostname.length - this.tld(build).length - 1;\n      end = this._parts.hostname.lastIndexOf('.', end -1) + 1;\n      return this._parts.hostname.substring(end) || '';\n    } else {\n      if (!v) {\n        throw new TypeError('cannot set domain empty');\n      }\n\n      if (v.indexOf(':') !== -1) {\n        throw new TypeError('Domains cannot contain colons');\n      }\n\n      URI.ensureValidHostname(v, this._parts.protocol);\n\n      if (!this._parts.hostname || this.is('IP')) {\n        this._parts.hostname = v;\n      } else {\n        var replace = new RegExp(escapeRegEx(this.domain()) + '$');\n        this._parts.hostname = this._parts.hostname.replace(replace, v);\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.tld = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (typeof v === 'boolean') {\n      build = v;\n      v = undefined;\n    }\n\n    // return \"org\" from \"www.example.org\"\n    if (v === undefined) {\n      if (!this._parts.hostname || this.is('IP')) {\n        return '';\n      }\n\n      var pos = this._parts.hostname.lastIndexOf('.');\n      var tld = this._parts.hostname.substring(pos + 1);\n\n      if (build !== true && SLD && SLD.list[tld.toLowerCase()]) {\n        return SLD.get(this._parts.hostname) || tld;\n      }\n\n      return tld;\n    } else {\n      var replace;\n\n      if (!v) {\n        throw new TypeError('cannot set TLD empty');\n      } else if (v.match(/[^a-zA-Z0-9-]/)) {\n        if (SLD && SLD.is(v)) {\n          replace = new RegExp(escapeRegEx(this.tld()) + '$');\n          this._parts.hostname = this._parts.hostname.replace(replace, v);\n        } else {\n          throw new TypeError('TLD \"' + v + '\" contains characters other than [A-Z0-9]');\n        }\n      } else if (!this._parts.hostname || this.is('IP')) {\n        throw new ReferenceError('cannot set TLD on non-domain host');\n      } else {\n        replace = new RegExp(escapeRegEx(this.tld()) + '$');\n        this._parts.hostname = this._parts.hostname.replace(replace, v);\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.directory = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined || v === true) {\n      if (!this._parts.path && !this._parts.hostname) {\n        return '';\n      }\n\n      if (this._parts.path === '/') {\n        return '/';\n      }\n\n      var end = this._parts.path.length - this.filename().length - 1;\n      var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');\n\n      return v ? URI.decodePath(res) : res;\n\n    } else {\n      var e = this._parts.path.length - this.filename().length;\n      var directory = this._parts.path.substring(0, e);\n      var replace = new RegExp('^' + escapeRegEx(directory));\n\n      // fully qualifier directories begin with a slash\n      if (!this.is('relative')) {\n        if (!v) {\n          v = '/';\n        }\n\n        if (v.charAt(0) !== '/') {\n          v = '/' + v;\n        }\n      }\n\n      // directories always end with a slash\n      if (v && v.charAt(v.length - 1) !== '/') {\n        v += '/';\n      }\n\n      v = URI.recodePath(v);\n      this._parts.path = this._parts.path.replace(replace, v);\n      this.build(!build);\n      return this;\n    }\n  };\n  p.filename = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (typeof v !== 'string') {\n      if (!this._parts.path || this._parts.path === '/') {\n        return '';\n      }\n\n      var pos = this._parts.path.lastIndexOf('/');\n      var res = this._parts.path.substring(pos+1);\n\n      return v ? URI.decodePathSegment(res) : res;\n    } else {\n      var mutatedDirectory = false;\n\n      if (v.charAt(0) === '/') {\n        v = v.substring(1);\n      }\n\n      if (v.match(/\\.?\\//)) {\n        mutatedDirectory = true;\n      }\n\n      var replace = new RegExp(escapeRegEx(this.filename()) + '$');\n      v = URI.recodePath(v);\n      this._parts.path = this._parts.path.replace(replace, v);\n\n      if (mutatedDirectory) {\n        this.normalizePath(build);\n      } else {\n        this.build(!build);\n      }\n\n      return this;\n    }\n  };\n  p.suffix = function(v, build) {\n    if (this._parts.urn) {\n      return v === undefined ? '' : this;\n    }\n\n    if (v === undefined || v === true) {\n      if (!this._parts.path || this._parts.path === '/') {\n        return '';\n      }\n\n      var filename = this.filename();\n      var pos = filename.lastIndexOf('.');\n      var s, res;\n\n      if (pos === -1) {\n        return '';\n      }\n\n      // suffix may only contain alnum characters (yup, I made this up.)\n      s = filename.substring(pos+1);\n      res = (/^[a-z0-9%]+$/i).test(s) ? s : '';\n      return v ? URI.decodePathSegment(res) : res;\n    } else {\n      if (v.charAt(0) === '.') {\n        v = v.substring(1);\n      }\n\n      var suffix = this.suffix();\n      var replace;\n\n      if (!suffix) {\n        if (!v) {\n          return this;\n        }\n\n        this._parts.path += '.' + URI.recodePath(v);\n      } else if (!v) {\n        replace = new RegExp(escapeRegEx('.' + suffix) + '$');\n      } else {\n        replace = new RegExp(escapeRegEx(suffix) + '$');\n      }\n\n      if (replace) {\n        v = URI.recodePath(v);\n        this._parts.path = this._parts.path.replace(replace, v);\n      }\n\n      this.build(!build);\n      return this;\n    }\n  };\n  p.segment = function(segment, v, build) {\n    var separator = this._parts.urn ? ':' : '/';\n    var path = this.path();\n    var absolute = path.substring(0, 1) === '/';\n    var segments = path.split(separator);\n\n    if (segment !== undefined && typeof segment !== 'number') {\n      build = v;\n      v = segment;\n      segment = undefined;\n    }\n\n    if (segment !== undefined && typeof segment !== 'number') {\n      throw new Error('Bad segment \"' + segment + '\", must be 0-based integer');\n    }\n\n    if (absolute) {\n      segments.shift();\n    }\n\n    if (segment < 0) {\n      // allow negative indexes to address from the end\n      segment = Math.max(segments.length + segment, 0);\n    }\n\n    if (v === undefined) {\n      /*jshint laxbreak: true */\n      return segment === undefined\n        ? segments\n        : segments[segment];\n      /*jshint laxbreak: false */\n    } else if (segment === null || segments[segment] === undefined) {\n      if (isArray(v)) {\n        segments = [];\n        // collapse empty elements within array\n        for (var i=0, l=v.length; i < l; i++) {\n          if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {\n            continue;\n          }\n\n          if (segments.length && !segments[segments.length -1].length) {\n            segments.pop();\n          }\n\n          segments.push(trimSlashes(v[i]));\n        }\n      } else if (v || typeof v === 'string') {\n        v = trimSlashes(v);\n        if (segments[segments.length -1] === '') {\n          // empty trailing elements have to be overwritten\n          // to prevent results such as /foo//bar\n          segments[segments.length -1] = v;\n        } else {\n          segments.push(v);\n        }\n      }\n    } else {\n      if (v) {\n        segments[segment] = trimSlashes(v);\n      } else {\n        segments.splice(segment, 1);\n      }\n    }\n\n    if (absolute) {\n      segments.unshift('');\n    }\n\n    return this.path(segments.join(separator), build);\n  };\n  p.segmentCoded = function(segment, v, build) {\n    var segments, i, l;\n\n    if (typeof segment !== 'number') {\n      build = v;\n      v = segment;\n      segment = undefined;\n    }\n\n    if (v === undefined) {\n      segments = this.segment(segment, v, build);\n      if (!isArray(segments)) {\n        segments = segments !== undefined ? URI.decode(segments) : undefined;\n      } else {\n        for (i = 0, l = segments.length; i < l; i++) {\n          segments[i] = URI.decode(segments[i]);\n        }\n      }\n\n      return segments;\n    }\n\n    if (!isArray(v)) {\n      v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;\n    } else {\n      for (i = 0, l = v.length; i < l; i++) {\n        v[i] = URI.encode(v[i]);\n      }\n    }\n\n    return this.segment(segment, v, build);\n  };\n\n  // mutating query string\n  var q = p.query;\n  p.query = function(v, build) {\n    if (v === true) {\n      return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    } else if (typeof v === 'function') {\n      var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n      var result = v.call(this, data);\n      this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n      this.build(!build);\n      return this;\n    } else if (v !== undefined && typeof v !== 'string') {\n      this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n      this.build(!build);\n      return this;\n    } else {\n      return q.call(this, v, build);\n    }\n  };\n  p.setQuery = function(name, value, build) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\n    if (typeof name === 'string' || name instanceof String) {\n      data[name] = value !== undefined ? value : null;\n    } else if (typeof name === 'object') {\n      for (var key in name) {\n        if (hasOwn.call(name, key)) {\n          data[key] = name[key];\n        }\n      }\n    } else {\n      throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n    }\n\n    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.addQuery = function(name, value, build) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    URI.addQuery(data, name, value === undefined ? null : value);\n    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.removeQuery = function(name, value, build) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    URI.removeQuery(data, name, value);\n    this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n    if (typeof name !== 'string') {\n      build = value;\n    }\n\n    this.build(!build);\n    return this;\n  };\n  p.hasQuery = function(name, value, withinArray) {\n    var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n    return URI.hasQuery(data, name, value, withinArray);\n  };\n  p.setSearch = p.setQuery;\n  p.addSearch = p.addQuery;\n  p.removeSearch = p.removeQuery;\n  p.hasSearch = p.hasQuery;\n\n  // sanitizing URLs\n  p.normalize = function() {\n    if (this._parts.urn) {\n      return this\n        .normalizeProtocol(false)\n        .normalizePath(false)\n        .normalizeQuery(false)\n        .normalizeFragment(false)\n        .build();\n    }\n\n    return this\n      .normalizeProtocol(false)\n      .normalizeHostname(false)\n      .normalizePort(false)\n      .normalizePath(false)\n      .normalizeQuery(false)\n      .normalizeFragment(false)\n      .build();\n  };\n  p.normalizeProtocol = function(build) {\n    if (typeof this._parts.protocol === 'string') {\n      this._parts.protocol = this._parts.protocol.toLowerCase();\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizeHostname = function(build) {\n    if (this._parts.hostname) {\n      if (this.is('IDN') && punycode) {\n        this._parts.hostname = punycode.toASCII(this._parts.hostname);\n      } else if (this.is('IPv6') && IPv6) {\n        this._parts.hostname = IPv6.best(this._parts.hostname);\n      }\n\n      this._parts.hostname = this._parts.hostname.toLowerCase();\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizePort = function(build) {\n    // remove port of it's the protocol's default\n    if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {\n      this._parts.port = null;\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizePath = function(build) {\n    var _path = this._parts.path;\n    if (!_path) {\n      return this;\n    }\n\n    if (this._parts.urn) {\n      this._parts.path = URI.recodeUrnPath(this._parts.path);\n      this.build(!build);\n      return this;\n    }\n\n    if (this._parts.path === '/') {\n      return this;\n    }\n\n    _path = URI.recodePath(_path);\n\n    var _was_relative;\n    var _leadingParents = '';\n    var _parent, _pos;\n\n    // handle relative paths\n    if (_path.charAt(0) !== '/') {\n      _was_relative = true;\n      _path = '/' + _path;\n    }\n\n    // handle relative files (as opposed to directories)\n    if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {\n      _path += '/';\n    }\n\n    // resolve simples\n    _path = _path\n      .replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g, '/')\n      .replace(/\\/{2,}/g, '/');\n\n    // remember leading parents\n    if (_was_relative) {\n      _leadingParents = _path.substring(1).match(/^(\\.\\.\\/)+/) || '';\n      if (_leadingParents) {\n        _leadingParents = _leadingParents[0];\n      }\n    }\n\n    // resolve parents\n    while (true) {\n      _parent = _path.search(/\\/\\.\\.(\\/|$)/);\n      if (_parent === -1) {\n        // no more ../ to resolve\n        break;\n      } else if (_parent === 0) {\n        // top level cannot be relative, skip it\n        _path = _path.substring(3);\n        continue;\n      }\n\n      _pos = _path.substring(0, _parent).lastIndexOf('/');\n      if (_pos === -1) {\n        _pos = _parent;\n      }\n      _path = _path.substring(0, _pos) + _path.substring(_parent + 3);\n    }\n\n    // revert to relative\n    if (_was_relative && this.is('relative')) {\n      _path = _leadingParents + _path.substring(1);\n    }\n\n    this._parts.path = _path;\n    this.build(!build);\n    return this;\n  };\n  p.normalizePathname = p.normalizePath;\n  p.normalizeQuery = function(build) {\n    if (typeof this._parts.query === 'string') {\n      if (!this._parts.query.length) {\n        this._parts.query = null;\n      } else {\n        this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));\n      }\n\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizeFragment = function(build) {\n    if (!this._parts.fragment) {\n      this._parts.fragment = null;\n      this.build(!build);\n    }\n\n    return this;\n  };\n  p.normalizeSearch = p.normalizeQuery;\n  p.normalizeHash = p.normalizeFragment;\n\n  p.iso8859 = function() {\n    // expect unicode input, iso8859 output\n    var e = URI.encode;\n    var d = URI.decode;\n\n    URI.encode = escape;\n    URI.decode = decodeURIComponent;\n    try {\n      this.normalize();\n    } finally {\n      URI.encode = e;\n      URI.decode = d;\n    }\n    return this;\n  };\n\n  p.unicode = function() {\n    // expect iso8859 input, unicode output\n    var e = URI.encode;\n    var d = URI.decode;\n\n    URI.encode = strictEncodeURIComponent;\n    URI.decode = unescape;\n    try {\n      this.normalize();\n    } finally {\n      URI.encode = e;\n      URI.decode = d;\n    }\n    return this;\n  };\n\n  p.readable = function() {\n    var uri = this.clone();\n    // removing username, password, because they shouldn't be displayed according to RFC 3986\n    uri.username('').password('').normalize();\n    var t = '';\n    if (uri._parts.protocol) {\n      t += uri._parts.protocol + '://';\n    }\n\n    if (uri._parts.hostname) {\n      if (uri.is('punycode') && punycode) {\n        t += punycode.toUnicode(uri._parts.hostname);\n        if (uri._parts.port) {\n          t += ':' + uri._parts.port;\n        }\n      } else {\n        t += uri.host();\n      }\n    }\n\n    if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {\n      t += '/';\n    }\n\n    t += uri.path(true);\n    if (uri._parts.query) {\n      var q = '';\n      for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {\n        var kv = (qp[i] || '').split('=');\n        q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)\n          .replace(/&/g, '%26');\n\n        if (kv[1] !== undefined) {\n          q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)\n            .replace(/&/g, '%26');\n        }\n      }\n      t += '?' + q.substring(1);\n    }\n\n    t += URI.decodeQuery(uri.hash(), true);\n    return t;\n  };\n\n  // resolving relative and absolute URLs\n  p.absoluteTo = function(base) {\n    var resolved = this.clone();\n    var properties = ['protocol', 'username', 'password', 'hostname', 'port'];\n    var basedir, i, p;\n\n    if (this._parts.urn) {\n      throw new Error('URNs do not have any generally defined hierarchical components');\n    }\n\n    if (!(base instanceof URI)) {\n      base = new URI(base);\n    }\n\n    if (resolved._parts.protocol) {\n      // Directly returns even if this._parts.hostname is empty.\n      return resolved;\n    } else {\n      resolved._parts.protocol = base._parts.protocol;\n    }\n\n    if (this._parts.hostname) {\n      return resolved;\n    }\n\n    for (i = 0; (p = properties[i]); i++) {\n      resolved._parts[p] = base._parts[p];\n    }\n\n    if (!resolved._parts.path) {\n      resolved._parts.path = base._parts.path;\n      if (!resolved._parts.query) {\n        resolved._parts.query = base._parts.query;\n      }\n    } else {\n      if (resolved._parts.path.substring(-2) === '..') {\n        resolved._parts.path += '/';\n      }\n\n      if (resolved.path().charAt(0) !== '/') {\n        basedir = base.directory();\n        basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';\n        resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;\n        resolved.normalizePath();\n      }\n    }\n\n    resolved.build();\n    return resolved;\n  };\n  p.relativeTo = function(base) {\n    var relative = this.clone().normalize();\n    var relativeParts, baseParts, common, relativePath, basePath;\n\n    if (relative._parts.urn) {\n      throw new Error('URNs do not have any generally defined hierarchical components');\n    }\n\n    base = new URI(base).normalize();\n    relativeParts = relative._parts;\n    baseParts = base._parts;\n    relativePath = relative.path();\n    basePath = base.path();\n\n    if (relativePath.charAt(0) !== '/') {\n      throw new Error('URI is already relative');\n    }\n\n    if (basePath.charAt(0) !== '/') {\n      throw new Error('Cannot calculate a URI relative to another relative URI');\n    }\n\n    if (relativeParts.protocol === baseParts.protocol) {\n      relativeParts.protocol = null;\n    }\n\n    if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {\n      return relative.build();\n    }\n\n    if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {\n      return relative.build();\n    }\n\n    if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {\n      relativeParts.hostname = null;\n      relativeParts.port = null;\n    } else {\n      return relative.build();\n    }\n\n    if (relativePath === basePath) {\n      relativeParts.path = '';\n      return relative.build();\n    }\n\n    // determine common sub path\n    common = URI.commonPath(relativePath, basePath);\n\n    // If the paths have nothing in common, return a relative URL with the absolute path.\n    if (!common) {\n      return relative.build();\n    }\n\n    var parents = baseParts.path\n      .substring(common.length)\n      .replace(/[^\\/]*$/, '')\n      .replace(/.*?\\//g, '../');\n\n    relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';\n\n    return relative.build();\n  };\n\n  // comparing URIs\n  p.equals = function(uri) {\n    var one = this.clone();\n    var two = new URI(uri);\n    var one_map = {};\n    var two_map = {};\n    var checked = {};\n    var one_query, two_query, key;\n\n    one.normalize();\n    two.normalize();\n\n    // exact match\n    if (one.toString() === two.toString()) {\n      return true;\n    }\n\n    // extract query string\n    one_query = one.query();\n    two_query = two.query();\n    one.query('');\n    two.query('');\n\n    // definitely not equal if not even non-query parts match\n    if (one.toString() !== two.toString()) {\n      return false;\n    }\n\n    // query parameters have the same length, even if they're permuted\n    if (one_query.length !== two_query.length) {\n      return false;\n    }\n\n    one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);\n    two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);\n\n    for (key in one_map) {\n      if (hasOwn.call(one_map, key)) {\n        if (!isArray(one_map[key])) {\n          if (one_map[key] !== two_map[key]) {\n            return false;\n          }\n        } else if (!arraysEqual(one_map[key], two_map[key])) {\n          return false;\n        }\n\n        checked[key] = true;\n      }\n    }\n\n    for (key in two_map) {\n      if (hasOwn.call(two_map, key)) {\n        if (!checked[key]) {\n          // two contains a parameter not present in one\n          return false;\n        }\n      }\n    }\n\n    return true;\n  };\n\n  // state\n  p.preventInvalidHostname = function(v) {\n    this._parts.preventInvalidHostname = !!v;\n    return this;\n  };\n\n  p.duplicateQueryParameters = function(v) {\n    this._parts.duplicateQueryParameters = !!v;\n    return this;\n  };\n\n  p.escapeQuerySpace = function(v) {\n    this._parts.escapeQuerySpace = !!v;\n    return this;\n  };\n\n  return URI;\n}));\n","/*! https://mths.be/punycode v1.4.0 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n  return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n  var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n  if (typeof value !== 'object') {\n    return false;\n  }\n  try {\n    prototypeValueOf(value);\n    return true;\n  } catch(e) {\n    return false;\n  }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n    return ArrayBuffer.isView(value);\n  }\n\n  return (\n    isTypedArray(value) ||\n    isDataView(value)\n  );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n  return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n  return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n  return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n  return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n  return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n  return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n  return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n  return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n  return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n  return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n  return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n  return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n  typeof Map !== 'undefined' &&\n  isMapToString(new Map())\n);\n\nfunction isMap(value) {\n  if (typeof Map === 'undefined') {\n    return false;\n  }\n\n  return isMapToString.working\n    ? isMapToString(value)\n    : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n  return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n  typeof Set !== 'undefined' &&\n  isSetToString(new Set())\n);\nfunction isSet(value) {\n  if (typeof Set === 'undefined') {\n    return false;\n  }\n\n  return isSetToString.working\n    ? isSetToString(value)\n    : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n  return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n  typeof WeakMap !== 'undefined' &&\n  isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n  if (typeof WeakMap === 'undefined') {\n    return false;\n  }\n\n  return isWeakMapToString.working\n    ? isWeakMapToString(value)\n    : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n  return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n  typeof WeakSet !== 'undefined' &&\n  isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n  return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n  return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n  if (typeof ArrayBuffer === 'undefined') {\n    return false;\n  }\n\n  return isArrayBufferToString.working\n    ? isArrayBufferToString(value)\n    : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n  return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n  typeof ArrayBuffer !== 'undefined' &&\n  typeof DataView !== 'undefined' &&\n  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n  if (typeof DataView === 'undefined') {\n    return false;\n  }\n\n  return isDataViewToString.working\n    ? isDataViewToString(value)\n    : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n  return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n  if (typeof SharedArrayBufferCopy === 'undefined') {\n    return false;\n  }\n\n  if (typeof isSharedArrayBufferToString.working === 'undefined') {\n    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n  }\n\n  return isSharedArrayBufferToString.working\n    ? isSharedArrayBufferToString(value)\n    : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n  return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n  return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n  return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n  return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n  return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n  return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n  return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n  return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n  return (\n    isNumberObject(value) ||\n    isStringObject(value) ||\n    isBooleanObject(value) ||\n    isBigIntObject(value) ||\n    isSymbolObject(value)\n  );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n  return typeof Uint8Array !== 'undefined' && (\n    isArrayBuffer(value) ||\n    isSharedArrayBuffer(value)\n  );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n  Object.defineProperty(exports, method, {\n    enumerable: false,\n    value: function() {\n      throw new Error(method + ' is not supported in userland');\n    }\n  });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n  var debugEnv = process.env.NODE_DEBUG;\n  debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n    .replace(/\\*/g, '.*')\n    .replace(/,/g, '$|^')\n    .toUpperCase();\n  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (debugEnvRegex.test(set)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').slice(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.slice(1, -1);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bound');\nvar gOPD = require('gopd');\nvar getProto = require('get-proto');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\n\n/** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {import('./types').Getter} Getter */\n/** @type {import('./types').Cache} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getProto) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr && getProto) {\n\t\t\tvar proto = getProto(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor && proto) {\n\t\t\t\tvar superProto = getProto(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\tif (descriptor && descriptor.get) {\n\t\t\t\tvar bound = callBind(descriptor.get);\n\t\t\t\tcache[\n\t\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t\t] = bound;\n\t\t\t}\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\tvar bound = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ (\n\t\t\t\t// @ts-expect-error TODO FIXME\n\t\t\t\tcallBind(fn)\n\t\t\t);\n\t\t\tcache[\n\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t] = bound;\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType<typeof tryAllTypedArrays>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(typedArray, 1));\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType<typeof tryAllSlices>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */(cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(name, 1));\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","'use strict';\n\nvar possibleNames = require('possible-typed-array-names');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\n/** @type {import('.')} */\nmodule.exports = function availableTypedArrays() {\n\tvar /** @type {ReturnType<typeof availableTypedArrays>} */ out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\t// @ts-expect-error\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","\"use strict\";\n\n// Bundlers are able to synchronously require an ESM module from a CommonJS one.\nconst { jQuery } = require( \"../../dist-module/jquery.module.js\" );\nmodule.exports = jQuery;\n","// GENERATED FILE. DO NOT EDIT.\n(function (global, factory) {\n  function preferDefault(exports) {\n    return exports.default || exports;\n  }\n  if (typeof define === \"function\" && define.amd) {\n    define([], function () {\n      var exports = {};\n      factory(exports);\n      return preferDefault(exports);\n    });\n  } else if (typeof exports === \"object\") {\n    factory(exports);\n    if (typeof module === \"object\") module.exports = preferDefault(exports);\n  } else {\n    (function () {\n      var exports = {};\n      factory(exports);\n      global.Long = preferDefault(exports);\n    })();\n  }\n})(\n  typeof globalThis !== \"undefined\"\n    ? globalThis\n    : typeof self !== \"undefined\"\n      ? self\n      : this,\n  function (_exports) {\n    \"use strict\";\n\n    Object.defineProperty(_exports, \"__esModule\", {\n      value: true,\n    });\n    _exports.default = void 0;\n    /**\n     * @license\n     * Copyright 2009 The Closure Library Authors\n     * Copyright 2020 Daniel Wirtz / The long.js Authors.\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *     http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     *\n     * SPDX-License-Identifier: Apache-2.0\n     */\n\n    // WebAssembly optimizations to do native i64 multiplication and divide\n    var wasm = null;\n    try {\n      wasm = new WebAssembly.Instance(\n        new WebAssembly.Module(\n          new Uint8Array([\n            // \\0asm\n            0, 97, 115, 109,\n            // version 1\n            1, 0, 0, 0,\n            // section \"type\"\n            1, 13, 2,\n            // 0, () => i32\n            96, 0, 1, 127,\n            // 1, (i32, i32, i32, i32) => i32\n            96, 4, 127, 127, 127, 127, 1, 127,\n            // section \"function\"\n            3, 7, 6,\n            // 0, type 0\n            0,\n            // 1, type 1\n            1,\n            // 2, type 1\n            1,\n            // 3, type 1\n            1,\n            // 4, type 1\n            1,\n            // 5, type 1\n            1,\n            // section \"global\"\n            6, 6, 1,\n            // 0, \"high\", mutable i32\n            127, 1, 65, 0, 11,\n            // section \"export\"\n            7, 50, 6,\n            // 0, \"mul\"\n            3, 109, 117, 108, 0, 1,\n            // 1, \"div_s\"\n            5, 100, 105, 118, 95, 115, 0, 2,\n            // 2, \"div_u\"\n            5, 100, 105, 118, 95, 117, 0, 3,\n            // 3, \"rem_s\"\n            5, 114, 101, 109, 95, 115, 0, 4,\n            // 4, \"rem_u\"\n            5, 114, 101, 109, 95, 117, 0, 5,\n            // 5, \"get_high\"\n            8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0,\n            // section \"code\"\n            10, 191, 1, 6,\n            // 0, \"get_high\"\n            4, 0, 35, 0, 11,\n            // 1, \"mul\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 2, \"div_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 3, \"div_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 4, \"rem_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 5, \"rem_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n          ]),\n        ),\n        {},\n      ).exports;\n    } catch {\n      // no wasm support :(\n    }\n\n    /**\n     * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n     *  See the from* functions below for more convenient ways of constructing Longs.\n     * @exports Long\n     * @class A Long class for representing a 64 bit two's-complement integer value.\n     * @param {number} low The low (signed) 32 bits of the long\n     * @param {number} high The high (signed) 32 bits of the long\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @constructor\n     */\n    function Long(low, high, unsigned) {\n      /**\n       * The low 32 bits as a signed value.\n       * @type {number}\n       */\n      this.low = low | 0;\n\n      /**\n       * The high 32 bits as a signed value.\n       * @type {number}\n       */\n      this.high = high | 0;\n\n      /**\n       * Whether unsigned or not.\n       * @type {boolean}\n       */\n      this.unsigned = !!unsigned;\n    }\n\n    // The internal representation of a long is the two given signed, 32-bit values.\n    // We use 32-bit pieces because these are the size of integers on which\n    // Javascript performs bit-operations.  For operations like addition and\n    // multiplication, we split each number into 16 bit pieces, which can easily be\n    // multiplied within Javascript's floating-point representation without overflow\n    // or change in sign.\n    //\n    // In the algorithms below, we frequently reduce the negative case to the\n    // positive case by negating the input(s) and then post-processing the result.\n    // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n    // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n    // a positive number, it overflows back into a negative).  Not handling this\n    // case would often result in infinite recursion.\n    //\n    // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n    // methods on which they depend.\n\n    /**\n     * An indicator used to reliably determine if an object is a Long or not.\n     * @type {boolean}\n     * @const\n     * @private\n     */\n    Long.prototype.__isLong__;\n    Object.defineProperty(Long.prototype, \"__isLong__\", {\n      value: true,\n    });\n\n    /**\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     * @inner\n     */\n    function isLong(obj) {\n      return (obj && obj[\"__isLong__\"]) === true;\n    }\n\n    /**\n     * @function\n     * @param {*} value number\n     * @returns {number}\n     * @inner\n     */\n    function ctz32(value) {\n      var c = Math.clz32(value & -value);\n      return value ? 31 - c : c;\n    }\n\n    /**\n     * Tests if the specified object is a Long.\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     */\n    Long.isLong = isLong;\n\n    /**\n     * A cache of the Long representations of small integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var INT_CACHE = {};\n\n    /**\n     * A cache of the Long representations of small unsigned integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var UINT_CACHE = {};\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromInt(value, unsigned) {\n      var obj, cachedObj, cache;\n      if (unsigned) {\n        value >>>= 0;\n        if ((cache = 0 <= value && value < 256)) {\n          cachedObj = UINT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, 0, true);\n        if (cache) UINT_CACHE[value] = obj;\n        return obj;\n      } else {\n        value |= 0;\n        if ((cache = -128 <= value && value < 128)) {\n          cachedObj = INT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\n        if (cache) INT_CACHE[value] = obj;\n        return obj;\n      }\n    }\n\n    /**\n     * Returns a Long representing the given 32 bit integer value.\n     * @function\n     * @param {number} value The 32 bit integer in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromInt = fromInt;\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromNumber(value, unsigned) {\n      if (isNaN(value)) return unsigned ? UZERO : ZERO;\n      if (unsigned) {\n        if (value < 0) return UZERO;\n        if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n      } else {\n        if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n        if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n      }\n      if (value < 0) return fromNumber(-value, unsigned).neg();\n      return fromBits(\n        value % TWO_PWR_32_DBL | 0,\n        (value / TWO_PWR_32_DBL) | 0,\n        unsigned,\n      );\n    }\n\n    /**\n     * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n     * @function\n     * @param {number} value The number in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromNumber = fromNumber;\n\n    /**\n     * @param {number} lowBits\n     * @param {number} highBits\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromBits(lowBits, highBits, unsigned) {\n      return new Long(lowBits, highBits, unsigned);\n    }\n\n    /**\n     * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n     *  assumed to use 32 bits.\n     * @function\n     * @param {number} lowBits The low 32 bits\n     * @param {number} highBits The high 32 bits\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromBits = fromBits;\n\n    /**\n     * @function\n     * @param {number} base\n     * @param {number} exponent\n     * @returns {number}\n     * @inner\n     */\n    var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n\n    /**\n     * @param {string} str\n     * @param {(boolean|number)=} unsigned\n     * @param {number=} radix\n     * @returns {!Long}\n     * @inner\n     */\n    function fromString(str, unsigned, radix) {\n      if (str.length === 0) throw Error(\"empty string\");\n      if (typeof unsigned === \"number\") {\n        // For goog.math.long compatibility\n        radix = unsigned;\n        unsigned = false;\n      } else {\n        unsigned = !!unsigned;\n      }\n      if (\n        str === \"NaN\" ||\n        str === \"Infinity\" ||\n        str === \"+Infinity\" ||\n        str === \"-Infinity\"\n      )\n        return unsigned ? UZERO : ZERO;\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      var p;\n      if ((p = str.indexOf(\"-\")) > 0) throw Error(\"interior hyphen\");\n      else if (p === 0) {\n        return fromString(str.substring(1), unsigned, radix).neg();\n      }\n\n      // Do several (8) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 8));\n      var result = ZERO;\n      for (var i = 0; i < str.length; i += 8) {\n        var size = Math.min(8, str.length - i),\n          value = parseInt(str.substring(i, i + size), radix);\n        if (size < 8) {\n          var power = fromNumber(pow_dbl(radix, size));\n          result = result.mul(power).add(fromNumber(value));\n        } else {\n          result = result.mul(radixToPower);\n          result = result.add(fromNumber(value));\n        }\n      }\n      result.unsigned = unsigned;\n      return result;\n    }\n\n    /**\n     * Returns a Long representation of the given string, written using the specified radix.\n     * @function\n     * @param {string} str The textual representation of the Long\n     * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n     * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromString = fromString;\n\n    /**\n     * @function\n     * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromValue(val, unsigned) {\n      if (typeof val === \"number\") return fromNumber(val, unsigned);\n      if (typeof val === \"string\") return fromString(val, unsigned);\n      // Throws for non-objects, converts non-instanceof Long:\n      return fromBits(\n        val.low,\n        val.high,\n        typeof unsigned === \"boolean\" ? unsigned : val.unsigned,\n      );\n    }\n\n    /**\n     * Converts the specified value to a Long using the appropriate from* function for its type.\n     * @function\n     * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long}\n     */\n    Long.fromValue = fromValue;\n\n    // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n    // no runtime penalty for these.\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_16_DBL = 1 << 16;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24_DBL = 1 << 24;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n\n    /**\n     * @type {!Long}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ZERO = fromInt(0);\n\n    /**\n     * Signed zero.\n     * @type {!Long}\n     */\n    Long.ZERO = ZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UZERO = fromInt(0, true);\n\n    /**\n     * Unsigned zero.\n     * @type {!Long}\n     */\n    Long.UZERO = UZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ONE = fromInt(1);\n\n    /**\n     * Signed one.\n     * @type {!Long}\n     */\n    Long.ONE = ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UONE = fromInt(1, true);\n\n    /**\n     * Unsigned one.\n     * @type {!Long}\n     */\n    Long.UONE = UONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var NEG_ONE = fromInt(-1);\n\n    /**\n     * Signed negative one.\n     * @type {!Long}\n     */\n    Long.NEG_ONE = NEG_ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false);\n\n    /**\n     * Maximum signed value.\n     * @type {!Long}\n     */\n    Long.MAX_VALUE = MAX_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true);\n\n    /**\n     * Maximum unsigned value.\n     * @type {!Long}\n     */\n    Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n\n    /**\n     * Minimum signed value.\n     * @type {!Long}\n     */\n    Long.MIN_VALUE = MIN_VALUE;\n\n    /**\n     * @alias Long.prototype\n     * @inner\n     */\n    var LongPrototype = Long.prototype;\n\n    /**\n     * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toInt = function toInt() {\n      return this.unsigned ? this.low >>> 0 : this.low;\n    };\n\n    /**\n     * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toNumber = function toNumber() {\n      if (this.unsigned)\n        return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n      return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n    };\n\n    /**\n     * Converts the Long to a string written in the specified radix.\n     * @this {!Long}\n     * @param {number=} radix Radix (2-36), defaults to 10\n     * @returns {string}\n     * @override\n     * @throws {RangeError} If `radix` is out of range\n     */\n    LongPrototype.toString = function toString(radix) {\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      if (this.isZero()) return \"0\";\n      if (this.isNegative()) {\n        // Unsigned Longs are never negative\n        if (this.eq(MIN_VALUE)) {\n          // We need to change the Long value before it can be negated, so we remove\n          // the bottom-most digit in this base and then recurse to do the rest.\n          var radixLong = fromNumber(radix),\n            div = this.div(radixLong),\n            rem1 = div.mul(radixLong).sub(this);\n          return div.toString(radix) + rem1.toInt().toString(radix);\n        } else return \"-\" + this.neg().toString(radix);\n      }\n\n      // Do several (6) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n        rem = this;\n      var result = \"\";\n      while (true) {\n        var remDiv = rem.div(radixToPower),\n          intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n          digits = intval.toString(radix);\n        rem = remDiv;\n        if (rem.isZero()) return digits + result;\n        else {\n          while (digits.length < 6) digits = \"0\" + digits;\n          result = \"\" + digits + result;\n        }\n      }\n    };\n\n    /**\n     * Gets the high 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed high bits\n     */\n    LongPrototype.getHighBits = function getHighBits() {\n      return this.high;\n    };\n\n    /**\n     * Gets the high 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned high bits\n     */\n    LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n      return this.high >>> 0;\n    };\n\n    /**\n     * Gets the low 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed low bits\n     */\n    LongPrototype.getLowBits = function getLowBits() {\n      return this.low;\n    };\n\n    /**\n     * Gets the low 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned low bits\n     */\n    LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n      return this.low >>> 0;\n    };\n\n    /**\n     * Gets the number of bits needed to represent the absolute value of this Long.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n      if (this.isNegative())\n        // Unsigned Longs are never negative\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n      var val = this.high != 0 ? this.high : this.low;\n      for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break;\n      return this.high != 0 ? bit + 33 : bit + 1;\n    };\n\n    /**\n     * Tests if this Long can be safely represented as a JavaScript number.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isSafeInteger = function isSafeInteger() {\n      // 2^53-1 is the maximum safe value\n      var top11Bits = this.high >> 21;\n      // [0, 2^53-1]\n      if (!top11Bits) return true;\n      // > 2^53-1\n      if (this.unsigned) return false;\n      // [-2^53, -1] except -2^53\n      return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000);\n    };\n\n    /**\n     * Tests if this Long's value equals zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isZero = function isZero() {\n      return this.high === 0 && this.low === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n     * @returns {boolean}\n     */\n    LongPrototype.eqz = LongPrototype.isZero;\n\n    /**\n     * Tests if this Long's value is negative.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isNegative = function isNegative() {\n      return !this.unsigned && this.high < 0;\n    };\n\n    /**\n     * Tests if this Long's value is positive or zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isPositive = function isPositive() {\n      return this.unsigned || this.high >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is odd.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isOdd = function isOdd() {\n      return (this.low & 1) === 1;\n    };\n\n    /**\n     * Tests if this Long's value is even.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isEven = function isEven() {\n      return (this.low & 1) === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.equals = function equals(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (\n        this.unsigned !== other.unsigned &&\n        this.high >>> 31 === 1 &&\n        other.high >>> 31 === 1\n      )\n        return false;\n      return this.high === other.high && this.low === other.low;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.eq = LongPrototype.equals;\n\n    /**\n     * Tests if this Long's value differs from the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.notEquals = function notEquals(other) {\n      return !this.eq(/* validates */ other);\n    };\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.neq = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ne = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value is less than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThan = function lessThan(other) {\n      return this.comp(/* validates */ other) < 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lt = LongPrototype.lessThan;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n      return this.comp(/* validates */ other) <= 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lte = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.le = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThan = function greaterThan(other) {\n      return this.comp(/* validates */ other) > 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gt = LongPrototype.greaterThan;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n      return this.comp(/* validates */ other) >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Compares this Long's value with the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.compare = function compare(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (this.eq(other)) return 0;\n      var thisNeg = this.isNegative(),\n        otherNeg = other.isNegative();\n      if (thisNeg && !otherNeg) return -1;\n      if (!thisNeg && otherNeg) return 1;\n      // At this point the sign bits are the same\n      if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;\n      // Both are positive if at least one is unsigned\n      return other.high >>> 0 > this.high >>> 0 ||\n        (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n        ? -1\n        : 1;\n    };\n\n    /**\n     * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.comp = LongPrototype.compare;\n\n    /**\n     * Negates this Long's value.\n     * @this {!Long}\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.negate = function negate() {\n      if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n      return this.not().add(ONE);\n    };\n\n    /**\n     * Negates this Long's value. This is an alias of {@link Long#negate}.\n     * @function\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.neg = LongPrototype.negate;\n\n    /**\n     * Returns the sum of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} addend Addend\n     * @returns {!Long} Sum\n     */\n    LongPrototype.add = function add(addend) {\n      if (!isLong(addend)) addend = fromValue(addend);\n\n      // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = addend.high >>> 16;\n      var b32 = addend.high & 0xffff;\n      var b16 = addend.low >>> 16;\n      var b00 = addend.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 + b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 + b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 + b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 + b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the difference of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.subtract = function subtract(subtrahend) {\n      if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n      return this.add(subtrahend.neg());\n    };\n\n    /**\n     * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n     * @function\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.sub = LongPrototype.subtract;\n\n    /**\n     * Returns the product of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.multiply = function multiply(multiplier) {\n      if (this.isZero()) return this;\n      if (!isLong(multiplier)) multiplier = fromValue(multiplier);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = wasm[\"mul\"](\n          this.low,\n          this.high,\n          multiplier.low,\n          multiplier.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n      if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n      if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n      if (this.isNegative()) {\n        if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());\n        else return this.neg().mul(multiplier).neg();\n      } else if (multiplier.isNegative())\n        return this.mul(multiplier.neg()).neg();\n\n      // If both longs are small, use float multiplication\n      if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\n        return fromNumber(\n          this.toNumber() * multiplier.toNumber(),\n          this.unsigned,\n        );\n\n      // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n      // We can skip products that would overflow.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = multiplier.high >>> 16;\n      var b32 = multiplier.high & 0xffff;\n      var b16 = multiplier.low >>> 16;\n      var b00 = multiplier.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 * b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 * b00;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c16 += a00 * b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 * b00;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a16 * b16;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a00 * b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n     * @function\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.mul = LongPrototype.multiply;\n\n    /**\n     * Returns this Long divided by the specified. The result is signed if this Long is signed or\n     *  unsigned if this Long is unsigned.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.divide = function divide(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n      if (divisor.isZero()) throw Error(\"division by zero\");\n\n      // use wasm support if present\n      if (wasm) {\n        // guard against signed division overflow: the largest\n        // negative number / -1 would be 1 larger than the largest\n        // positive number, due to two's complement.\n        if (\n          !this.unsigned &&\n          this.high === -0x80000000 &&\n          divisor.low === -1 &&\n          divisor.high === -1\n        ) {\n          // be consistent with non-wasm code path\n          return this;\n        }\n        var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n      var approx, rem, res;\n      if (!this.unsigned) {\n        // This section is only relevant for signed longs and is derived from the\n        // closure library as a whole.\n        if (this.eq(MIN_VALUE)) {\n          if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\n            return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n          else if (divisor.eq(MIN_VALUE)) return ONE;\n          else {\n            // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n            var halfThis = this.shr(1);\n            approx = halfThis.div(divisor).shl(1);\n            if (approx.eq(ZERO)) {\n              return divisor.isNegative() ? ONE : NEG_ONE;\n            } else {\n              rem = this.sub(divisor.mul(approx));\n              res = approx.add(rem.div(divisor));\n              return res;\n            }\n          }\n        } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n        if (this.isNegative()) {\n          if (divisor.isNegative()) return this.neg().div(divisor.neg());\n          return this.neg().div(divisor).neg();\n        } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n        res = ZERO;\n      } else {\n        // The algorithm below has not been made for unsigned longs. It's therefore\n        // required to take special care of the MSB prior to running it.\n        if (!divisor.unsigned) divisor = divisor.toUnsigned();\n        if (divisor.gt(this)) return UZERO;\n        if (divisor.gt(this.shru(1)))\n          // 15 >>> 1 = 7 ; with divisor = 8 ; true\n          return UONE;\n        res = UZERO;\n      }\n\n      // Repeat the following until the remainder is less than other:  find a\n      // floating-point that approximates remainder / other *from below*, add this\n      // into the result, and subtract it from the remainder.  It is critical that\n      // the approximate value is less than or equal to the real value so that the\n      // remainder never becomes negative.\n      rem = this;\n      while (rem.gte(divisor)) {\n        // Approximate the result of division. This may be a little greater or\n        // smaller than the actual value.\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\n\n        // We will tweak the approximate result by changing it in the 48-th digit or\n        // the smallest non-fractional digit, whichever is larger.\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n          delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n          // Decrease the approximation until it is smaller than the remainder.  Note\n          // that if it is too large, the product overflows and is negative.\n          approxRes = fromNumber(approx),\n          approxRem = approxRes.mul(divisor);\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\n          approx -= delta;\n          approxRes = fromNumber(approx, this.unsigned);\n          approxRem = approxRes.mul(divisor);\n        }\n\n        // We know the answer can't be zero... and actually, zero would cause\n        // infinite recursion since we would make no progress.\n        if (approxRes.isZero()) approxRes = ONE;\n        res = res.add(approxRes);\n        rem = rem.sub(approxRem);\n      }\n      return res;\n    };\n\n    /**\n     * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.div = LongPrototype.divide;\n\n    /**\n     * Returns this Long modulo the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.modulo = function modulo(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      return this.sub(this.div(divisor).mul(divisor));\n    };\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.mod = LongPrototype.modulo;\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.rem = LongPrototype.modulo;\n\n    /**\n     * Returns the bitwise NOT of this Long.\n     * @this {!Long}\n     * @returns {!Long}\n     */\n    LongPrototype.not = function not() {\n      return fromBits(~this.low, ~this.high, this.unsigned);\n    };\n\n    /**\n     * Returns count leading zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countLeadingZeros = function countLeadingZeros() {\n      return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n    };\n\n    /**\n     * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.clz = LongPrototype.countLeadingZeros;\n\n    /**\n     * Returns count trailing zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countTrailingZeros = function countTrailingZeros() {\n      return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n    };\n\n    /**\n     * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.ctz = LongPrototype.countTrailingZeros;\n\n    /**\n     * Returns the bitwise AND of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.and = function and(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low & other.low,\n        this.high & other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise OR of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.or = function or(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low | other.low,\n        this.high | other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise XOR of this Long and the given one.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.xor = function xor(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low ^ other.low,\n        this.high ^ other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftLeft = function shiftLeft(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          this.low << numBits,\n          (this.high << numBits) | (this.low >>> (32 - numBits)),\n          this.unsigned,\n        );\n      else return fromBits(0, this.low << (numBits - 32), this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shl = LongPrototype.shiftLeft;\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRight = function shiftRight(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >> numBits,\n          this.unsigned,\n        );\n      else\n        return fromBits(\n          this.high >> (numBits - 32),\n          this.high >= 0 ? 0 : -1,\n          this.unsigned,\n        );\n    };\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr = LongPrototype.shiftRight;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >>> numBits,\n          this.unsigned,\n        );\n      if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n      return fromBits(this.high >>> (numBits - 32), 0, this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits rotated to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateLeft = function rotateLeft(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.low << numBits) | (this.high >>> b),\n          (this.high << numBits) | (this.low >>> b),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.high << numBits) | (this.low >>> b),\n        (this.low << numBits) | (this.high >>> b),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotl = LongPrototype.rotateLeft;\n\n    /**\n     * Returns this Long with bits rotated to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateRight = function rotateRight(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.high << b) | (this.low >>> numBits),\n          (this.low << b) | (this.high >>> numBits),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.low << b) | (this.high >>> numBits),\n        (this.high << b) | (this.low >>> numBits),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotr = LongPrototype.rotateRight;\n\n    /**\n     * Converts this Long to signed.\n     * @this {!Long}\n     * @returns {!Long} Signed long\n     */\n    LongPrototype.toSigned = function toSigned() {\n      if (!this.unsigned) return this;\n      return fromBits(this.low, this.high, false);\n    };\n\n    /**\n     * Converts this Long to unsigned.\n     * @this {!Long}\n     * @returns {!Long} Unsigned long\n     */\n    LongPrototype.toUnsigned = function toUnsigned() {\n      if (this.unsigned) return this;\n      return fromBits(this.low, this.high, true);\n    };\n\n    /**\n     * Converts this Long to its byte representation.\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @this {!Long}\n     * @returns {!Array.<number>} Byte representation\n     */\n    LongPrototype.toBytes = function toBytes(le) {\n      return le ? this.toBytesLE() : this.toBytesBE();\n    };\n\n    /**\n     * Converts this Long to its little endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Little endian byte representation\n     */\n    LongPrototype.toBytesLE = function toBytesLE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        lo & 0xff,\n        (lo >>> 8) & 0xff,\n        (lo >>> 16) & 0xff,\n        lo >>> 24,\n        hi & 0xff,\n        (hi >>> 8) & 0xff,\n        (hi >>> 16) & 0xff,\n        hi >>> 24,\n      ];\n    };\n\n    /**\n     * Converts this Long to its big endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Big endian byte representation\n     */\n    LongPrototype.toBytesBE = function toBytesBE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        hi >>> 24,\n        (hi >>> 16) & 0xff,\n        (hi >>> 8) & 0xff,\n        hi & 0xff,\n        lo >>> 24,\n        (lo >>> 16) & 0xff,\n        (lo >>> 8) & 0xff,\n        lo & 0xff,\n      ];\n    };\n\n    /**\n     * Creates a Long from its byte representation.\n     * @param {!Array.<number>} bytes Byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n      return le\n        ? Long.fromBytesLE(bytes, unsigned)\n        : Long.fromBytesBE(bytes, unsigned);\n    };\n\n    /**\n     * Creates a Long from its little endian byte representation.\n     * @param {!Array.<number>} bytes Little endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n      return new Long(\n        bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24),\n        bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24),\n        unsigned,\n      );\n    };\n\n    /**\n     * Creates a Long from its big endian byte representation.\n     * @param {!Array.<number>} bytes Big endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n      return new Long(\n        (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7],\n        (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3],\n        unsigned,\n      );\n    };\n\n    // Support conversion to/from BigInt where available\n    if (typeof BigInt === \"function\") {\n      /**\n       * Returns a Long representing the given big integer.\n       * @function\n       * @param {number} value The big integer value\n       * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n       * @returns {!Long} The corresponding Long value\n       */\n      Long.fromBigInt = function fromBigInt(value, unsigned) {\n        var lowBits = Number(BigInt.asIntN(32, value));\n        var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));\n        return fromBits(lowBits, highBits, unsigned);\n      };\n\n      // Override\n      Long.fromValue = function fromValueWithBigInt(value, unsigned) {\n        if (typeof value === \"bigint\") return Long.fromBigInt(value, unsigned);\n        return fromValue(value, unsigned);\n      };\n\n      /**\n       * Converts the Long to its big integer representation.\n       * @this {!Long}\n       * @returns {bigint}\n       */\n      LongPrototype.toBigInt = function toBigInt() {\n        var lowBigInt = BigInt(this.low >>> 0);\n        var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);\n        return (highBigInt << BigInt(32)) | lowBigInt;\n      };\n    }\n    var _default = (_exports.default = Long);\n  },\n);\n","/*!\n * protobuf.js v8.7.1 (c) 2016, daniel wirtz\n * compiled mon, 13 jul 2026 11:04:12 utc\n * licensed under the bsd-3-clause license\n * see: https://github.com/dcodeio/protobuf.js for details\n */\n(function(undefined){\"use strict\";(function prelude(modules, cache, entries) {\n\n    // This is the prelude used to bundle protobuf.js for the browser. Wraps up the CommonJS\n    // sources through a conflict-free require shim and is again wrapped within an iife that\n    // provides a minification-friendly `undefined` var plus a global \"use strict\" directive\n    // so that minification can remove the directives of each module.\n\n    function $require(name) {\n        var $module = cache[name];\n        if (!$module)\n            modules[name][0].call($module = cache[name] = { exports: {} }, $require, $module, $module.exports);\n        return $module.exports;\n    }\n\n    var protobuf = $require(entries[0]);\n\n    // Expose globally\n    protobuf.util.global.protobuf = protobuf;\n\n    // Be nice to AMD\n    if (typeof define === \"function\" && define.amd)\n        define([\"long\"], function(Long) {\n            if (Long && Long.isLong) {\n                protobuf.util.Long = Long;\n                protobuf.configure();\n            }\n            return protobuf;\n        });\n\n    // Be nice to CommonJS\n    if (typeof module === \"object\" && module && module.exports)\n        module.exports = protobuf;\n\n})/* end of prelude */({1:[function(require,module,exports){\n\"use strict\";\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nexports.build = \"minimal\";\n\n// Serialization\nexports.Writer       = require(15);\nexports.BufferWriter = require(16);\nexports.Reader       = require(2);\nexports.BufferReader = require(3);\n\n// Utility\nexports.util         = require(12);\nexports.rpc          = require(5);\nexports.roots        = require(4);\nexports.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    exports.util.LongBits._configure(exports.util.Long);\n    exports.Writer._configure(exports.BufferWriter);\n    exports.Reader._configure(exports.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n\n},{\"12\":12,\"15\":15,\"16\":16,\"2\":2,\"3\":3,\"4\":4,\"5\":5}],2:[function(require,module,exports){\n\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(12);\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`.\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    /**\n     * Cached DataView for packed reads.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Whether to discard unknown fields while decoding.\n     * @type {boolean}\n     */\n    this.discardUnknown = Reader.discardUnknown;\n}\n\nfunction create_array(buffer) {\n    // TODO: Remove plain array reader support in the next major release.\n    if (Array.isArray(buffer))\n        buffer = new Uint8Array(buffer);\n    if (buffer instanceof Uint8Array)\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\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Raw bytes\n */\nReader.prototype.raw = function read_raw(start, end) {\n    return this.buf.subarray(start, end);\n};\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() {\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n\n    for (var i = 0; i < 5; ++i) {\n        /* istanbul ignore if */\n        if (pos >= this.len) {\n            this.pos = pos;\n            throw indexOutOfRange(this);\n        }\n        if (buf[pos++] < 128) {\n            this.pos = pos;\n            return value;\n        }\n    }\n    /* istanbul ignore next */\n    this.pos = pos;\n    throw Error(\"invalid varint encoding\");\n};\n\n/**\n * Reads a field tag.\n * @function\n * @returns {number} Tag read\n */\nReader.prototype.tag = function read_tag() {\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos] < 128 && (buf[pos] & 112) === 0) {\n        this.pos = pos + 1;\n        return value;\n    }\n\n    this.pos = pos + 1;\n    throw Error(\"invalid tag encoding\");\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 < 4; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\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        throw indexOutOfRange(this);\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    var value = false,\n        b;\n    for (var i = 0; i < 10; ++i) {\n        /* istanbul ignore if */\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        b = this.buf[this.pos++];\n        if (b & 127)\n            value = true;\n        if (b < 128)\n            return value;\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\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 packed repeated field of unsigned 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.uint32s = function read_uint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.uint32());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.int32s = function read_int32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.int32());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sint32s = function read_sint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.sint32());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of booleans.\n * @param {boolean[]} [array] Array to read into; a new one is created if omitted\n * @returns {boolean[]} Array read into\n */\nReader.prototype.bools = function read_bools(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.bool());\n    return array;\n};\n\n// The view allocation only pays off when amortized over enough reads\nvar VIEW_THRESHOLD_FLOAT = 8,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(reader, count, threshold) {\n    var view = reader.view;\n    if (view || count < threshold)\n        return view;\n    var buf = reader.buf;\n    return reader.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Reads a packed repeated field of unsigned 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.fixed32s = function read_fixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getUint32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sfixed32s = function read_sfixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getInt32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4) | 0;\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of floats (32 bit).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.floats = function read_floats(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getFloat32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = util.float.readFloatLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of doubles (64 bit float).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.doubles = function read_doubles(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 8) array[i++] = dv.getFloat64(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 8) array[i++] = util.float.readDoubleLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.uint64s = function read_uint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.uint64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.int64s = function read_int64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.int64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sint64s = function read_sint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos;\n    while (this.pos < end)\n        array.push(this.sint64());\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.fixed64s = function read_fixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.fixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sfixed64s = function read_sfixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.sfixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\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 = end;\n    return this.raw(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 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 = end;\n    return utf8.read(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint, rejecting invalid UTF8.\n * @returns {string} Value read\n */\nReader.prototype.stringVerify = function read_string_verify() {\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 = end;\n    return utf8.readStrict(this.buf, start, end);\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 * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Whether readers discard unknown fields while decoding.\n * @type {boolean}\n */\nReader.discardUnknown = true;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @param {number} [fieldNumber] Field number for validating group end tags\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth, fieldNumber) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (fieldNumber === 0)\n        throw Error(\"illegal tag: field number 0\");\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 (true) {\n                var tag = this.tag();\n                var nestedField = tag >>> 3;\n                wireType = tag & 7;\n                if (!nestedField)\n                    throw Error(\"illegal tag: field number 0\");\n                if (wireType === 4) {\n                    if (fieldNumber !== undefined && nestedField !== fieldNumber)\n                        throw Error(\"invalid end group tag\");\n                    break;\n                }\n                this.skipType(wireType, depth + 1, nestedField);\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\n},{\"12\":12}],3:[function(require,module,exports){\n\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(2);\nBufferReader.prototype = Object.create(Reader.prototype, {\n    constructor: {\n        value: BufferReader,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(12);\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 * Returns raw bytes from the backing buffer without advancing the reader.\n * @name BufferReader#raw\n * @function\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Buffer} Raw bytes\n */\nBufferReader.prototype.raw = function read_raw_buffer(start, end) {\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(), // modifies pos\n        start = this.pos,\n        end = this.pos + len;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw RangeError(\"index out of range: \" + this.pos + \" + \" + len + \" > \" + this.len);\n\n    this.pos = end;\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(start, end)\n        : this.buf.toString(\"utf-8\", start, end);\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\n},{\"12\":12,\"2\":2}],4:[function(require,module,exports){\n\"use strict\";\nmodule.exports = Object.create(null);\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 across modules.\n * @name roots\n * @type {Object.<string,Root>}\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\n},{}],5:[function(require,module,exports){\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<{}>,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(6);\n\n},{\"6\":6}],6:[function(require,module,exports){\n\"use strict\";\nmodule.exports = Service;\n\nvar util = require(12);\n\n// Extends EventEmitter\nService.prototype = Object.create(util.EventEmitter.prototype, {\n    constructor: {\n        value: Service,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\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<TRes>\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<TReq>\n * @template TRes extends Message<TRes>\n * @type {{\n *   (request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;\n *   (request: TReq|Properties<TReq>): Promise<TRes>;\n *   readonly name: string;\n *   readonly path: string;\n *   readonly requestType: string;\n *   readonly responseType: string;\n *   readonly requestStream: true|undefined;\n *   readonly responseStream: true|undefined;\n * }}\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<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\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\n},{\"12\":12}],7:[function(require,module,exports){\n\"use strict\";\nmodule.exports = asPromise;\n\n/**\n * Callback as used by {@link util.asPromise}.\n * @typedef asPromiseCallback\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {...*} params Additional arguments\n * @returns {undefined}\n */\n\n/**\n * Returns a promise from a node-style callback function.\n * @memberof util\n * @param {asPromiseCallback} fn Function to call\n * @param {*} ctx Function context\n * @param {...*} params Function arguments\n * @returns {Promise<*>} Promisified function\n */\nfunction asPromise(fn, ctx/*, varargs */) {\n    var params  = new Array(arguments.length - 1),\n        offset  = 0,\n        index   = 2,\n        pending = true;\n    while (index < arguments.length)\n        params[offset++] = arguments[index++];\n    return new Promise(function executor(resolve, reject) {\n        params[offset] = function callback(err/*, varargs */) {\n            if (pending) {\n                pending = false;\n                if (err)\n                    reject(err);\n                else {\n                    var params = new Array(arguments.length - 1),\n                        offset = 0;\n                    while (offset < params.length)\n                        params[offset++] = arguments[offset];\n                    resolve.apply(null, params);\n                }\n            }\n        };\n        try {\n            fn.apply(ctx || null, params);\n        } catch (err) {\n            if (pending) {\n                pending = false;\n                reject(err);\n            }\n        }\n    });\n}\n\n},{}],8:[function(require,module,exports){\n\"use strict\";\n\n/**\n * A minimal base64 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar base64 = exports;\n\n/**\n * Calculates the byte length of a base64 encoded string.\n * @param {string} string Base64 encoded string\n * @returns {number} Byte length\n */\nbase64.length = function length(string) {\n    var p = string.length;\n    if (!p)\n        return 0;\n    while (p > 0 && string.charAt(p - 1) === \"=\")\n        --p;\n    return Math.floor(p * 3 / 4);\n};\n\n// Base64 encoding table\nvar b64 = new Array(64);\n\n// Base64 decoding table\nvar s64 = new Array(123);\n\n// 65..90, 97..122, 48..57, 43, 47\nfor (var i = 0; i < 64;)\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\n\ns64[45] = 62; // - -> +\ns64[95] = 63; // _ -> /\n\n/**\n * Encodes a buffer to a base64 encoded string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} Base64 encoded string\n */\nbase64.encode = function encode(buffer, start, end) {\n    var parts = null,\n        chunk = [];\n    var i = 0, // output index\n        j = 0, // goto index\n        t;     // temporary\n    while (start < end) {\n        var b = buffer[start++];\n        switch (j) {\n            case 0:\n                chunk[i++] = b64[b >> 2];\n                t = (b & 3) << 4;\n                j = 1;\n                break;\n            case 1:\n                chunk[i++] = b64[t | b >> 4];\n                t = (b & 15) << 2;\n                j = 2;\n                break;\n            case 2:\n                chunk[i++] = b64[t | b >> 6];\n                chunk[i++] = b64[b & 63];\n                j = 0;\n                break;\n        }\n        if (i > 8191) {\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\n            i = 0;\n        }\n    }\n    if (j) {\n        chunk[i++] = b64[t];\n        chunk[i++] = 61;\n        if (j === 1)\n            chunk[i++] = 61;\n    }\n    if (parts) {\n        if (i)\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\n        return parts.join(\"\");\n    }\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\n};\n\nvar invalidEncoding = \"invalid encoding\";\n\n/**\n * Decodes a base64 encoded string to a buffer.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Number of bytes written\n * @throws {Error} If encoding is invalid\n */\nbase64.decode = function decode(string, buffer, offset) {\n    var start = offset;\n    var j = 0, // goto index\n        t;     // temporary\n    for (var i = 0; i < string.length;) {\n        var c = string.charCodeAt(i++);\n        if (c === 61 && j > 1)\n            break;\n        if ((c = s64[c]) === undefined)\n            throw Error(invalidEncoding);\n        switch (j) {\n            case 0:\n                t = c;\n                j = 1;\n                break;\n            case 1:\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\n                t = c;\n                j = 2;\n                break;\n            case 2:\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\n                t = c;\n                j = 3;\n                break;\n            case 3:\n                buffer[offset++] = (t & 3) << 6 | c;\n                j = 0;\n                break;\n        }\n    }\n    if (j === 1)\n        throw Error(invalidEncoding);\n    return offset - start;\n};\n\nvar base64Re = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n    base64UrlRe = /[-_]/,\n    base64UrlNoPaddingRe = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?)?$/;\n\n/**\n * Tests if the specified string appears to be base64 encoded.\n * @param {string} string String to test\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\n */\nbase64.test = function test(string) {\n    return base64Re.test(string)\n        || base64UrlRe.test(string) && base64UrlNoPaddingRe.test(string);\n};\n\n},{}],9:[function(require,module,exports){\n\"use strict\";\nmodule.exports = EventEmitter;\n\n/**\n * Constructs a new event emitter instance.\n * @classdesc A minimal event emitter.\n * @memberof util\n * @constructor\n */\nfunction EventEmitter() {\n\n    /**\n     * Registered listeners.\n     * @type {Object.<string,*>}\n     * @private\n     */\n    this._listeners = Object.create(null);\n}\n\n/**\n * Event listener as used by {@link util.EventEmitter}.\n * @typedef EventEmitterListener\n * @type {function}\n * @param {...*} args Arguments\n * @returns {undefined}\n */\n\n/**\n * Registers an event listener.\n * @param {string} evt Event name\n * @param {EventEmitterListener} fn Listener\n * @param {*} [ctx] Listener context\n * @returns {this} `this`\n */\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\n        fn  : fn,\n        ctx : ctx || this\n    });\n    return this;\n};\n\n/**\n * Removes an event listener or any matching listeners if arguments are omitted.\n * @param {string} [evt] Event name. Removes all listeners if omitted.\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\n * @returns {this} `this`\n */\nEventEmitter.prototype.off = function off(evt, fn) {\n    if (evt === undefined)\n        this._listeners = Object.create(null);\n    else {\n        if (fn === undefined)\n            this._listeners[evt] = [];\n        else {\n            var listeners = this._listeners[evt];\n            if (!listeners)\n                return this;\n            for (var i = 0; i < listeners.length;)\n                if (listeners[i].fn === fn)\n                    listeners.splice(i, 1);\n                else\n                    ++i;\n        }\n    }\n    return this;\n};\n\n/**\n * Emits an event by calling its listeners with the specified arguments.\n * @param {string} evt Event name\n * @param {...*} args Arguments\n * @returns {this} `this`\n */\nEventEmitter.prototype.emit = function emit(evt) {\n    var listeners = this._listeners[evt];\n    if (listeners) {\n        var args = [],\n            i = 1;\n        for (; i < arguments.length;)\n            args.push(arguments[i++]);\n        for (i = 0; i < listeners.length;)\n            listeners[i].fn.apply(listeners[i++].ctx, args);\n    }\n    return this;\n};\n\n},{}],10:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = factory(factory);\n\n/**\n * Reads / writes floats / doubles from / to buffers.\n * @name util.float\n * @namespace\n */\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order.\n * @name util.float.writeFloatLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order.\n * @name util.float.writeFloatBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order.\n * @name util.float.readFloatLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order.\n * @name util.float.readFloatBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order.\n * @name util.float.writeDoubleLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order.\n * @name util.float.writeDoubleBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order.\n * @name util.float.readDoubleLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order.\n * @name util.float.readDoubleBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n// Factory function for the purpose of node-based testing in modified global environments\nfunction factory(exports) {\n\n    // float: typed array\n    if (typeof Float32Array !== \"undefined\") (function() {\n\n        var f32 = new Float32Array([ -0 ]),\n            f8b = new Uint8Array(f32.buffer),\n            le  = f8b[3] === 128;\n\n        function writeFloat_f32_cpy(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n        }\n\n        function writeFloat_f32_rev(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[3];\n            buf[pos + 1] = f8b[2];\n            buf[pos + 2] = f8b[1];\n            buf[pos + 3] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\n\n        function readFloat_f32_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            return f32[0];\n        }\n\n        function readFloat_f32_rev(buf, pos) {\n            f8b[3] = buf[pos    ];\n            f8b[2] = buf[pos + 1];\n            f8b[1] = buf[pos + 2];\n            f8b[0] = buf[pos + 3];\n            return f32[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\n\n    // float: ieee754\n    })(); else (function() {\n\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0)\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\n            else if (isNaN(val))\n                writeUint(2143289344, buf, pos);\n            else if (val > 3.4028234663852886e+38) // +-Infinity\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\n            else if (val < 1.1754943508222875e-38) // denormal\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\n            else {\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\n            }\n        }\n\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\n\n        function readFloat_ieee754(readUint, buf, pos) {\n            var uint = readUint(buf, pos),\n                sign = (uint >> 31) * 2 + 1,\n                exponent = uint >>> 23 & 255,\n                mantissa = uint & 8388607;\n            return exponent === 255\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 1.401298464324817e-45 * mantissa\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\n        }\n\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\n\n    })();\n\n    // double: typed array\n    if (typeof Float64Array !== \"undefined\") (function() {\n\n        var f64 = new Float64Array([-0]),\n            f8b = new Uint8Array(f64.buffer),\n            le  = f8b[7] === 128;\n\n        function writeDouble_f64_cpy(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n            buf[pos + 4] = f8b[4];\n            buf[pos + 5] = f8b[5];\n            buf[pos + 6] = f8b[6];\n            buf[pos + 7] = f8b[7];\n        }\n\n        function writeDouble_f64_rev(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[7];\n            buf[pos + 1] = f8b[6];\n            buf[pos + 2] = f8b[5];\n            buf[pos + 3] = f8b[4];\n            buf[pos + 4] = f8b[3];\n            buf[pos + 5] = f8b[2];\n            buf[pos + 6] = f8b[1];\n            buf[pos + 7] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\n\n        function readDouble_f64_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            f8b[4] = buf[pos + 4];\n            f8b[5] = buf[pos + 5];\n            f8b[6] = buf[pos + 6];\n            f8b[7] = buf[pos + 7];\n            return f64[0];\n        }\n\n        function readDouble_f64_rev(buf, pos) {\n            f8b[7] = buf[pos    ];\n            f8b[6] = buf[pos + 1];\n            f8b[5] = buf[pos + 2];\n            f8b[4] = buf[pos + 3];\n            f8b[3] = buf[pos + 4];\n            f8b[2] = buf[pos + 5];\n            f8b[1] = buf[pos + 6];\n            f8b[0] = buf[pos + 7];\n            return f64[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\n\n    // double: ieee754\n    })(); else (function() {\n\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0) {\n                writeUint(0, buf, pos + off0);\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\n            } else if (isNaN(val)) {\n                writeUint(0, buf, pos + off0);\n                writeUint(2146959360, buf, pos + off1);\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\n                writeUint(0, buf, pos + off0);\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\n            } else {\n                var mantissa;\n                if (val < 2.2250738585072014e-308) { // denormal\n                    mantissa = val / 5e-324;\n                    writeUint(mantissa >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\n                } else {\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\n                    if (exponent === 1024)\n                        exponent = 1023;\n                    mantissa = val * Math.pow(2, -exponent);\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\n                }\n            }\n        }\n\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\n\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\n            var lo = readUint(buf, pos + off0),\n                hi = readUint(buf, pos + off1);\n            var sign = (hi >> 31) * 2 + 1,\n                exponent = hi >>> 20 & 2047,\n                mantissa = 4294967296 * (hi & 1048575) + lo;\n            return exponent === 2047\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 5e-324 * mantissa\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\n        }\n\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\n\n    })();\n\n    return exports;\n}\n\n// uint helpers\n\nfunction writeUintLE(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\nfunction writeUintBE(val, buf, pos) {\n    buf[pos    ] =  val >>> 24;\n    buf[pos + 1] =  val >>> 16 & 255;\n    buf[pos + 2] =  val >>> 8  & 255;\n    buf[pos + 3] =  val        & 255;\n}\n\nfunction readUintLE(buf, pos) {\n    return (buf[pos    ]\n          | buf[pos + 1] << 8\n          | buf[pos + 2] << 16\n          | buf[pos + 3] << 24) >>> 0;\n}\n\nfunction readUintBE(buf, pos) {\n    return (buf[pos    ] << 24\n          | buf[pos + 1] << 16\n          | buf[pos + 2] << 8\n          | buf[pos + 3]) >>> 0;\n}\n\n},{}],11:[function(require,module,exports){\n\"use strict\";\nmodule.exports = LongBits;\n\nvar Long;\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 (typeof value === \"string\" || value instanceof String) {\n        /* istanbul ignore else */\n        if (Long)\n            value = 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 Long\n        ? new 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\nLongBits._configure = function(Long_) {\n    Long = Long_;\n};\n\n},{}],12:[function(require,module,exports){\n\"use strict\";\n/* global globalThis */\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(7);\n\n// converts to / from base64 encoded strings\nutil.base64 = require(8);\n\n// base class of rpc.Service\nutil.EventEmitter = require(9);\n\n// float handling accross browsers\nutil.float = require(10);\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(14);\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(13);\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(11);\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n    return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\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           || typeof globalThis !== \"undefined\" && globalThis\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 && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\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<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.global.Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons)\n        return Buffer.prototype.utf8Write || util.isNode ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\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    var Buffer = util.Buffer;\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? Buffer\n            ? Buffer.allocUnsafe(sizeOrArray)\n            : new Uint8Array(sizeOrArray)\n        : Buffer\n            ? Buffer.from(sizeOrArray)\n            : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Prepends a raw field tag to raw field data.\n * @param {number} id Field id\n * @param {number} wireType Wire type\n * @param {Uint8Array} data Raw field data\n * @returns {Uint8Array|Buffer} Raw field bytes\n * @ignore\n */\nutil.rawField = function rawField(id, wireType, data) {\n    var out = [],\n        tag = id << 3 | wireType;\n    tag >>>= 0;\n    while (tag > 127) {\n        out.push(tag & 127 | 128);\n        tag >>>= 7;\n    }\n    out.push(tag);\n    for (var i = 0; i < data.length; ++i)\n        out.push(data[i]);\n    return util.newBuffer(out);\n};\n\n/**\n * Array implementation used in the browser.\n * @type {Constructor<Uint8Array>}\n * @deprecated Use `Uint8Array` instead.\n */\nutil.Array = Uint8Array;\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<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || (function() {\n                try {\n                    var Long = require(\"long\");\n                    return Long && Long.isLong ? Long : null;\n                } catch (e) {\n                    /* istanbul ignore next */\n                    return null;\n                }\n            })();\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]*))$/; // eslint-disable-line no-control-regex\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 * Converts a 64 bit key to a long or number if it is an 8 characters long hash string.\n * @param {string} key Map key\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number|string} Original value\n */\nutil.longFromKey = function longFromKey(key, unsigned) {\n    return util.key64Re.test(key) && !util.key32Re.test(key)\n        ? util.longFromHash(key, unsigned)\n        : key;\n};\n\n/**\n * Converts a boolean key to a boolean value.\n * @param {string} key Map key\n * @returns {boolean} Boolean value\n */\nutil.boolFromKey = function boolFromKey(key) {\n    return key === \"true\" || key === \"1\";\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {...(Object.<string,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n    var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n        limit = ifNotSet ? arguments.length - 1 : arguments.length;\n    ifNotSet = ifNotSet && arguments[arguments.length - 1];\n    for (var a = 1; a < limit; ++a) {\n        var src = arguments[a];\n        if (!src)\n            continue;\n        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n            if (!isUnsafeProperty(keys[i]) && (!ifNotSet || !Object.prototype.hasOwnProperty.call(dst, keys[i]) || dst[keys[i]] === undefined))\n                dst[keys[i]] = src[keys[i]];\n    }\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @param {boolean} [enumerable=true] Whether the property should be enumerable\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key, enumerable) {\n    if (Object.prototype.hasOwnProperty.call(obj, key))\n        return;\n    Object.defineProperty(obj, key, {\n        enumerable: enumerable === undefined ? true : enumerable,\n        configurable: true,\n        writable: true\n    });\n};\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<Error>} 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, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\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<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [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<T>}\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},{\"10\":10,\"11\":11,\"13\":13,\"14\":14,\"7\":7,\"8\":8,\"9\":9,\"long\":\"long\"}],13:[function(require,module,exports){\n\"use strict\";\nmodule.exports = pool;\n\n/**\n * An allocator as used by {@link util.pool}.\n * @typedef PoolAllocator\n * @type {function}\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\n\n/**\n * A slicer as used by {@link util.pool}.\n * @typedef PoolSlicer\n * @type {function}\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Buffer slice\n * @this Uint8Array\n */\n\n/**\n * A general purpose buffer pool.\n * @memberof util\n * @function\n * @param {PoolAllocator} alloc Allocator\n * @param {PoolSlicer} slice Slicer\n * @param {number} [size=8192] Slab size\n * @returns {PoolAllocator} Pooled allocator\n */\nfunction pool(alloc, slice, size) {\n    var SIZE   = size || 8192;\n    var MAX    = SIZE >>> 1;\n    var slab   = null;\n    var offset = SIZE;\n    return function pool_alloc(size) {\n        if (size < 1 || size > MAX)\n            return alloc(size);\n        if (offset + size > SIZE) {\n            slab = alloc(SIZE);\n            offset = 0;\n        }\n        var buf = slice.call(slab, offset, offset += size);\n        if (offset & 7) // align to 32 bit\n            offset = (offset | 7) + 1;\n        return buf;\n    };\n}\n\n},{}],14:[function(require,module,exports){\n\"use strict\";\n\n/**\n * A minimal UTF8 implementation.\n * @memberof util\n * @namespace\n */\nvar utf8 = exports,\n    replacementChar = \"\\ufffd\",\n    looseDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true }),\n    strictDecoder;\nvar TEXT_DECODER_MIN_LENGTH = 64;\n\ntry {\n    strictDecoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n} catch (err) {\n    // \"fatal\" option is not supported on Node.js compiled without ICU\n    strictDecoder = looseDecoder;\n}\n\n/**\n * Calculates the UTF8 byte length of a string.\n * @param {string} string String\n * @returns {number} Byte length\n */\nutf8.length = function utf8_length(string) {\n    var len = 0,\n        c = 0;\n    for (var i = 0; i < string.length; ++i) {\n        c = string.charCodeAt(i);\n        if (c < 128)\n            len += 1;\n        else if (c < 2048)\n            len += 2;\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n            ++i;\n            len += 4;\n        } else\n            len += 3;\n    }\n    return len;\n};\n\nfunction utf8_read_js(buffer, start, end, str) {\n    for (var i = start; i < end;) {\n        var t = buffer[i++];\n        if (t <= 0x7F) {\n            str += String.fromCharCode(t);\n        } else if (t >= 0xC0 && t < 0xE0) {\n            var c2 = (t & 0x1F) << 6 | buffer[i++] & 0x3F;\n            str += c2 >= 0x80 ? String.fromCharCode(c2) : replacementChar;\n        } else if (t >= 0xE0 && t < 0xF0) {\n            var c3 = (t & 0xF) << 12 | (buffer[i++] & 0x3F) << 6 | buffer[i++] & 0x3F;\n            str += c3 >= 0x800 ? String.fromCharCode(c3) : replacementChar;\n        } else if (t >= 0xF0) {\n            var t2 = (t & 7) << 18 | (buffer[i++] & 0x3F) << 12 | (buffer[i++] & 0x3F) << 6 | buffer[i++] & 0x3F;\n            if (t2 < 0x10000 || t2 > 0x10FFFF)\n                str += replacementChar;\n            else {\n                t2 -= 0x10000;\n                str += String.fromCharCode(0xD800 + (t2 >> 10));\n                str += String.fromCharCode(0xDC00 + (t2 & 0x3FF));\n            }\n        }\n    }\n    return str;\n}\n\nfunction utf8_read_decoder(decoder, buffer, start, end) {\n    var source = start === 0 && end === buffer.length\n        ? buffer\n        : buffer.subarray(start, end);\n    return decoder.decode(source);\n}\n\n/**\n * Reads UTF8 bytes as a string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.read = function utf8_read_loose(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(looseDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return utf8_read_js(buffer, i, end, str);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return utf8_read_js(buffer, i, end, str);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Reads UTF8 bytes as a string, rejecting invalid UTF8.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.readStrict = function utf8_read_strict(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(strictDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Writes a string as UTF8 bytes.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Bytes written\n */\nutf8.write = function utf8_write(string, buffer, offset) {\n    var start = offset,\n        c1, // character 1\n        c2; // character 2\n    for (var i = 0; i < string.length; ++i) {\n        c1 = string.charCodeAt(i);\n        if (c1 < 128) {\n            buffer[offset++] = c1;\n        } else if (c1 < 2048) {\n            buffer[offset++] = c1 >> 6       | 192;\n            buffer[offset++] = c1       & 63 | 128;\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\n            ++i;\n            buffer[offset++] = c1 >> 18      | 240;\n            buffer[offset++] = c1 >> 12 & 63 | 128;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        } else {\n            buffer[offset++] = c1 >> 12      | 224;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        }\n    }\n    return offset - start;\n};\n\n},{}],15:[function(require,module,exports){\n\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(12);\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Write cursor into {@link Writer#buf}.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Backing buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = this.constructor.alloc(64);\n\n    /**\n     * Cached DataView over {@link Writer#buf}.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Stack of forked length-prefix positions.\n     * @type {Array<number>|null}\n     */\n    this.states = null;\n}\n\n/**\n * Current write position.\n * @name Writer#len\n * @type {number}\n * @deprecated Use {@link Writer#pos} instead.\n */\nObject.defineProperty(Writer.prototype, \"len\", {\n    configurable: true,\n    enumerable: true,\n    get: function get_len() {\n        return this.pos;\n    }\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 Uint8Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\nWriter.alloc = util.pool(Writer.alloc, Uint8Array.prototype.subarray);\n\n/**\n * Calculates the number of bytes a value occupies as a varint.\n * @param {number} value Value to size (unsigned)\n * @returns {number} Byte length (1..5)\n * @ignore\n */\nfunction sizeVarint32(value) {\n    return value         < 128       ? 1\n         : value         < 16384     ? 2\n         : value         < 2097152   ? 3\n         : value         < 268435456 ? 4\n         :                             5;\n}\n\n/**\n * Ensures that at least `n` more bytes fit into the backing buffer, doubling it if not.\n * @param {number} n Number of additional bytes required\n * @returns {undefined}\n * @private\n */\nWriter.prototype._reserve = function _reserve(n) {\n    var need = this.pos + n;\n    if (need > this.buf.length) {\n        var size = this.buf.length << 1;\n        if (size < need)\n            size = need;\n        var buf = this.constructor.alloc(size);\n        buf.set(this.buf.subarray(0, this.pos), 0);\n        this.buf = buf;\n        this.view = null; // invalidate\n    }\n};\n\nfunction writeStringAscii(val, buf, pos) {\n    for (var i = 0; i < val.length;)\n        buf[pos++] = val.charCodeAt(i++);\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    return pos + 1;\n}\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    value = value >>> 0;\n    this._reserve(5);\n    var pos = this.pos;\n    this.pos = writeVarint32(value, this.buf, pos);\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    if ((value |= 0) < 0) { // 10 bytes per spec\n        this._reserve(10);\n        writeVarint64(LongBits.fromNumber(value), this.buf, this.pos);\n        this.pos += 10;\n        return this;\n    }\n    return 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    var lo = val.lo,\n        hi = val.hi;\n    while (hi) {\n        buf[pos++] = lo & 127 | 128;\n        lo = (lo >>> 7 | hi << 25) >>> 0;\n        hi >>>= 7;\n    }\n    while (lo > 127) {\n        buf[pos++] = lo & 127 | 128;\n        lo = lo >>> 7;\n    }\n    buf[pos] = lo;\n    return pos + 1;\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    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\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    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\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    this._reserve(1);\n    this.buf[this.pos++] = value ? 1 : 0;\n    return this;\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    this._reserve(4);\n    writeFixed32(value >>> 0, this.buf, this.pos);\n    this.pos += 4;\n    return this;\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    this._reserve(8);\n    writeFixed32(bits.lo, this.buf, this.pos);\n    writeFixed32(bits.hi, this.buf, this.pos + 4);\n    this.pos += 8;\n    return this;\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    this._reserve(4);\n    util.float.writeFloatLE(value, this.buf, this.pos);\n    this.pos += 4;\n    return this;\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    this._reserve(8);\n    util.float.writeDoubleLE(value, this.buf, this.pos);\n    this.pos += 8;\n    return this;\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        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\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    this.uint32(len);\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes raw bytes without a tag or length prefix.\n * @param {Uint8Array} value Raw bytes\n * @returns {Writer} `this`\n */\nWriter.prototype.raw = function write_raw(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this;\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Backfills the length varint.\n * @param {number} pos Position of reserved length byte\n * @param {number} len Length of content after length varint\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._delim = function _delim(pos, len) {\n    var n = sizeVarint32(len);\n    if (n > 1)\n        this.buf.copyWithin(pos + n, pos + 1, pos + 1 + len);\n    writeVarint32(len, this.buf, pos);\n    this.pos = pos + n + len;\n    return this;\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 n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var lenPos = this.pos;\n        return this._delim(lenPos, utf8.write(value, this.buf, lenPos + 1));\n    }\n    var len = utf8.length(value);\n    this.uint32(len);\n    this._reserve(len);\n    if (len === value.length)\n        writeStringAscii(value, this.buf, this.pos);\n    else\n        utf8.write(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes an array of unsigned 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32s = function write_uint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5); // worst case: 5 bytes per value + length varint\n    var buf = this.buf, lenPos = this.pos, p = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        p = writeVarint32(value[i] >>> 0, buf, p);\n    return this._delim(lenPos, p - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32s = function write_int32s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5); // worst case: 10 bytes per negative value + length varint\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1, val;\n    for (var i = 0; i < n; ++i) {\n        if ((val = value[i] | 0) < 0) { // negatives are 10 bytes per spec\n            pos = writeVarint64(LongBits.fromNumber(val), buf, pos);\n        } else {\n            pos = writeVarint32(val, buf, pos);\n        }\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of 32 bit values as packed, zig-zag encoded varints.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32s = function write_sint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        pos = writeVarint32((value[i] << 1 ^ value[i] >> 31) >>> 0, buf, pos);\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of unsigned 64 bit values as a packed repeated field.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint64s = function write_uint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 64 bit values as a packed repeated field.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int64s = Writer.prototype.uint64s;\n\n/**\n * Writes an array of 64 bit values as packed, zig-zag encoded varints.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint64s = function write_sint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]).zzEncode(), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of boolish values as a packed repeated field.\n * @param {boolean[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bools = function write_bools(value) {\n    var n = value.length;\n    this.uint32(n); // one byte per value\n    this._reserve(n);\n    var buf = this.buf, p = this.pos;\n    for (var i = 0; i < n; ++i)\n        buf[p++] = value[i] ? 1 : 0;\n    this.pos += n;\n    return this;\n};\n\n// The view allocation only pays off when amortized over enough writes\nvar VIEW_THRESHOLD_FLOAT = 16,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(writer, count, threshold) {\n    var view = writer.view;\n    if (view || count < threshold)\n        return view;\n    var buf = writer.buf;\n    return writer.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Writes an array of unsigned 32 bit values as packed, fixed 32 bits.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32s = function write_fixed32s(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes); // length is known exactly\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setUint32(p, value[i] >>> 0, true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { writeFixed32(value[i] >>> 0, buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 32 bit values as packed, fixed 32 bits.\n * @function\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32s = Writer.prototype.fixed32s;\n\n/**\n * Writes an array of unsigned 64 bit values as packed, fixed 64 bits.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed64s = function write_fixed64s(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, bits, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); dv.setUint32(p, bits.lo, true); dv.setUint32(p + 4, bits.hi, true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); writeFixed32(bits.lo, buf, p); writeFixed32(bits.hi, buf, p + 4); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 64 bit values as packed, fixed 64 bits.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed64s = Writer.prototype.fixed64s;\n\n/**\n * Writes an array of floats (32 bit) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.floats = function write_floats(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat32(p, value[i], true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeFloatLE(value[i], buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of doubles (64 bit float) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.doubles = function write_doubles(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat64(p, value[i], true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeDoubleLE(value[i], buf, p); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this._reserve(1);\n    (this.states || (this.states = [])).push(this.pos);\n    this.pos += 1;\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    var states = this.states;\n    if (states && states.length) {\n        this.pos = states.pop();\n    } else {\n        this.pos = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and prepends the fork state's current write length as a varint.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var states = this.states,\n        len,\n        vlen;\n    if (states && states.length) {\n        var lenPos = states.pop();\n        len = this.pos - lenPos - 1;\n        vlen = sizeVarint32(len);\n        if (vlen > 1) { // grow the reserved single byte and shift content forward\n            this._reserve(vlen - 1);\n            this.buf.copyWithin(lenPos + vlen, lenPos + 1, lenPos + 1 + len);\n            this.pos += vlen - 1;\n            writeVarint32(len, this.buf, lenPos);\n        } else {\n            this.buf[lenPos] = len;\n        }\n    } else { // not forked: prefix the entire buffer with its length\n        // TODO: Compatibility with older generated code.\n        // Remove this branch in the next major release.\n        len = this.pos;\n        vlen = sizeVarint32(len);\n        this._reserve(vlen);\n        this.buf.copyWithin(vlen, 0, len);\n        writeVarint32(len, this.buf, 0);\n        this.pos += vlen;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * Returns a buffer sized to the written data by default.\n * @param {boolean} [shared=false] Whether to return a shared view instead of a unique copy\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish(shared) {\n    if (shared)\n        return this.buf.subarray(0, this.pos);\n    var buf = this.constructor.alloc(this.pos);\n    buf.set(this.buf.subarray(0, this.pos), 0);\n    return buf;\n};\n\n/**\n * Finishes the write operation, writing into the provided buffer.\n * The caller must ensure that `buf` has enough space starting at `offset`\n * to hold {@link Writer#pos} bytes.\n * @param {T} buf Target buffer\n * @param {number} [offset=0] Offset to start writing at\n * @returns {T} The provided buffer\n * @template T extends Uint8Array\n */\nWriter.prototype.finishInto = function finishInto(buf, offset) {\n    if (offset === undefined)\n        offset = 0;\n    buf.set(this.buf.subarray(0, this.pos), offset);\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n\n},{\"12\":12}],16:[function(require,module,exports){\n\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(15);\nBufferWriter.prototype = Object.create(Writer.prototype, {\n    constructor: {\n        value: BufferWriter,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(12);\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\nvar writeStringBuffer;\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 && util.Buffer.allocUnsafe;\n\n    writeStringBuffer = util.Buffer && util.Buffer.prototype.utf8Write\n        ? function writeStringBuffer_utf8Write(val, buf, pos) {\n            return buf.utf8Write(val, pos);\n        }\n        : function writeStringBuffer_write(val, buf, pos) {\n            return buf.write(val, pos);\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._reserve(len);\n        this.buf.set(value, this.pos);\n        this.pos += len;\n    }\n    return this;\n};\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var pos = this.pos,\n            buf = this.buf;\n        return this._delim(pos,\n            n < 40\n                ? util.utf8.write(value, buf, pos + 1)\n                : writeStringBuffer(value, buf, pos + 1)\n        );\n    }\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    this._reserve(len);\n    writeStringBuffer(value, this.buf, this.pos);\n    this.pos += len;\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\n},{\"12\":12,\"15\":15}]},{},[1])\n\n})();\n//# sourceMappingURL=protobuf.js.map\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport buildModuleUrl from \"./buildModuleUrl.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\n\nconst scratchDiagonalCartesianNE = new Cartesian3();\nconst scratchDiagonalCartesianSW = new Cartesian3();\nconst scratchDiagonalCartographic = new Cartographic();\nconst scratchCenterCartesian = new Cartesian3();\nconst scratchSurfaceCartesian = new Cartesian3();\n\nconst scratchBoundingSphere = new BoundingSphere();\nconst tilingScheme = new GeographicTilingScheme();\nconst scratchCorners = [\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n];\nconst scratchTileXY = new Cartesian2();\n\n/**\n * A collection of functions for approximating terrain height\n * @private\n */\nconst ApproximateTerrainHeights = {};\n\n/**\n * Initializes the minimum and maximum terrain heights\n * @return {Promise<void>}\n */\nApproximateTerrainHeights.initialize = function () {\n  let initPromise = ApproximateTerrainHeights._initPromise;\n  if (defined(initPromise)) {\n    return initPromise;\n  }\n  initPromise = Resource.fetchJson(\n    buildModuleUrl(\"Assets/approximateTerrainHeights.json\"),\n  ).then(function (json) {\n    ApproximateTerrainHeights._terrainHeights = json;\n  });\n  ApproximateTerrainHeights._initPromise = initPromise;\n\n  return initPromise;\n};\n\n/**\n * Computes the minimum and maximum terrain heights for a given rectangle\n * @param {Rectangle} rectangle The bounding rectangle\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid\n * @return {{minimumTerrainHeight: number, maximumTerrainHeight: number}}\n */\nApproximateTerrainHeights.getMinimumMaximumHeights = function (\n  rectangle,\n  ellipsoid,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"rectangle\", rectangle);\n  if (!defined(ApproximateTerrainHeights._terrainHeights)) {\n    throw new DeveloperError(\n      \"You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function\",\n    );\n  }\n  //>>includeEnd('debug');\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  const xyLevel = getTileXYLevel(rectangle);\n\n  // Get the terrain min/max for that tile\n  let minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\n  let maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n  if (defined(xyLevel)) {\n    const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`;\n    const heights = ApproximateTerrainHeights._terrainHeights[key];\n    if (defined(heights)) {\n      minTerrainHeight = heights[0];\n      maxTerrainHeight = heights[1];\n    }\n\n    // Compute min by taking the center of the NE->SW diagonal and finding distance to the surface\n    ellipsoid.cartographicToCartesian(\n      Rectangle.northeast(rectangle, scratchDiagonalCartographic),\n      scratchDiagonalCartesianNE,\n    );\n    ellipsoid.cartographicToCartesian(\n      Rectangle.southwest(rectangle, scratchDiagonalCartographic),\n      scratchDiagonalCartesianSW,\n    );\n\n    Cartesian3.midpoint(\n      scratchDiagonalCartesianSW,\n      scratchDiagonalCartesianNE,\n      scratchCenterCartesian,\n    );\n    const surfacePosition = ellipsoid.scaleToGeodeticSurface(\n      scratchCenterCartesian,\n      scratchSurfaceCartesian,\n    );\n    if (defined(surfacePosition)) {\n      const distance = Cartesian3.distance(\n        scratchCenterCartesian,\n        surfacePosition,\n      );\n      minTerrainHeight = Math.min(minTerrainHeight, -distance);\n    } else {\n      minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\n    }\n  }\n\n  minTerrainHeight = Math.max(\n    ApproximateTerrainHeights._defaultMinTerrainHeight,\n    minTerrainHeight,\n  );\n\n  return {\n    minimumTerrainHeight: minTerrainHeight,\n    maximumTerrainHeight: maxTerrainHeight,\n  };\n};\n\n/**\n * Computes the bounding sphere based on the tile heights in the rectangle\n * @param {Rectangle} rectangle The bounding rectangle\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid\n * @return {BoundingSphere} The result bounding sphere\n */\nApproximateTerrainHeights.getBoundingSphere = function (rectangle, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"rectangle\", rectangle);\n  if (!defined(ApproximateTerrainHeights._terrainHeights)) {\n    throw new DeveloperError(\n      \"You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function\",\n    );\n  }\n  //>>includeEnd('debug');\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  const xyLevel = getTileXYLevel(rectangle);\n\n  // Get the terrain max for that tile\n  let maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n  if (defined(xyLevel)) {\n    const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`;\n    const heights = ApproximateTerrainHeights._terrainHeights[key];\n    if (defined(heights)) {\n      maxTerrainHeight = heights[1];\n    }\n  }\n\n  const result = BoundingSphere.fromRectangle3D(rectangle, ellipsoid, 0.0);\n  BoundingSphere.fromRectangle3D(\n    rectangle,\n    ellipsoid,\n    maxTerrainHeight,\n    scratchBoundingSphere,\n  );\n\n  return BoundingSphere.union(result, scratchBoundingSphere, result);\n};\n\nfunction getTileXYLevel(rectangle) {\n  Cartographic.fromRadians(\n    rectangle.east,\n    rectangle.north,\n    0.0,\n    scratchCorners[0],\n  );\n  Cartographic.fromRadians(\n    rectangle.west,\n    rectangle.north,\n    0.0,\n    scratchCorners[1],\n  );\n  Cartographic.fromRadians(\n    rectangle.east,\n    rectangle.south,\n    0.0,\n    scratchCorners[2],\n  );\n  Cartographic.fromRadians(\n    rectangle.west,\n    rectangle.south,\n    0.0,\n    scratchCorners[3],\n  );\n\n  // Determine which tile the bounding rectangle is in\n  let lastLevelX = 0,\n    lastLevelY = 0;\n  let currentX = 0,\n    currentY = 0;\n  const maxLevel = ApproximateTerrainHeights._terrainHeightsMaxLevel;\n  let i;\n  for (i = 0; i <= maxLevel; ++i) {\n    let failed = false;\n    for (let j = 0; j < 4; ++j) {\n      const corner = scratchCorners[j];\n      tilingScheme.positionToTileXY(corner, i, scratchTileXY);\n      if (j === 0) {\n        currentX = scratchTileXY.x;\n        currentY = scratchTileXY.y;\n      } else if (currentX !== scratchTileXY.x || currentY !== scratchTileXY.y) {\n        failed = true;\n        break;\n      }\n    }\n\n    if (failed) {\n      break;\n    }\n\n    lastLevelX = currentX;\n    lastLevelY = currentY;\n  }\n\n  if (i === 0) {\n    return undefined;\n  }\n\n  return {\n    x: lastLevelX,\n    y: lastLevelY,\n    level: i > maxLevel ? maxLevel : i - 1,\n  };\n}\n\nApproximateTerrainHeights._terrainHeightsMaxLevel = 6;\nApproximateTerrainHeights._defaultMaxTerrainHeight = 9000.0;\nApproximateTerrainHeights._defaultMinTerrainHeight = -100000.0;\nApproximateTerrainHeights._terrainHeights = undefined;\nApproximateTerrainHeights._initPromise = undefined;\n\nObject.defineProperties(ApproximateTerrainHeights, {\n  /**\n   * Determines if the terrain heights are initialized and ready to use. To initialize the terrain heights,\n   * call {@link ApproximateTerrainHeights#initialize} and wait for the returned promise to resolve.\n   * @type {boolean}\n   * @readonly\n   * @memberof ApproximateTerrainHeights\n   */\n  initialized: {\n    get: function () {\n      return defined(ApproximateTerrainHeights._terrainHeights);\n    },\n  },\n});\nexport default ApproximateTerrainHeights;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport HeightmapEncoding from \"./HeightmapEncoding.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Request from \"./Request.js\";\nimport RequestState from \"./RequestState.js\";\nimport RequestType from \"./RequestType.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\nimport TileAvailability from \"./TileAvailability.js\";\nimport TileProviderError from \"./TileProviderError.js\";\nimport WebMercatorTilingScheme from \"./WebMercatorTilingScheme.js\";\n\nconst ALL_CHILDREN = 15;\n\n/**\n * @typedef {object} ArcGISTiledElevationTerrainProvider.ConstructorOptions\n *\n * Initialization options for the ArcGISTiledElevationTerrainProvider constructor\n *\n * @property {string} [token] The authorization token to use to connect to the service.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If the tilingScheme is specified,\n *                    this parameter is ignored and the tiling scheme's ellipsoid is used instead.\n *                    If neither parameter is specified, the default ellipsoid is used.\n */\n\n/**\n * Used to track creation details while fetching initial metadata\n *\n * @constructor\n * @private\n *\n * @param {ArcGISTiledElevationTerrainProvider.ConstructorOptions} [options] An object describing initialization options.\n */\nfunction TerrainProviderBuilder(options) {\n  this.ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n\n  this.credit = undefined;\n  this.tilingScheme = undefined;\n  this.height = undefined;\n  this.width = undefined;\n  this.encoding = undefined;\n  this.lodCount = undefined;\n  this.hasAvailability = false;\n  this.tilesAvailable = undefined;\n  this.tilesAvailabilityLoaded = undefined;\n  this.levelZeroMaximumGeometricError = undefined;\n  this.terrainDataStructure = undefined;\n}\n\n/**\n * Complete ArcGISTiledElevationTerrainProvider creation based on builder values.\n *\n * @private\n *\n * @param {ArcGISTiledElevationTerrainProvider} provider\n */\nTerrainProviderBuilder.prototype.build = function (provider) {\n  provider._credit = this.credit;\n  provider._tilingScheme = this.tilingScheme;\n  provider._height = this.height;\n  provider._width = this.width;\n  provider._encoding = this.encoding;\n  provider._lodCount = this.lodCount;\n  provider._hasAvailability = this.hasAvailability;\n  provider._tilesAvailable = this.tilesAvailable;\n  provider._tilesAvailabilityLoaded = this.tilesAvailabilityLoaded;\n  provider._levelZeroMaximumGeometricError =\n    this.levelZeroMaximumGeometricError;\n  provider._terrainDataStructure = this.terrainDataStructure;\n};\n\nfunction parseMetadataSuccess(terrainProviderBuilder, metadata) {\n  const copyrightText = metadata.copyrightText;\n  if (defined(copyrightText)) {\n    terrainProviderBuilder.credit = new Credit(copyrightText);\n  }\n\n  const spatialReference = metadata.spatialReference;\n  const wkid = spatialReference.latestWkid ?? spatialReference.wkid;\n  const extent = metadata.extent;\n  const tilingSchemeOptions = {\n    ellipsoid: terrainProviderBuilder.ellipsoid,\n  };\n  if (wkid === 4326) {\n    tilingSchemeOptions.rectangle = Rectangle.fromDegrees(\n      extent.xmin,\n      extent.ymin,\n      extent.xmax,\n      extent.ymax,\n    );\n    terrainProviderBuilder.tilingScheme = new GeographicTilingScheme(\n      tilingSchemeOptions,\n    );\n  } else if (wkid === 3857) {\n    // Clamp extent to EPSG 3857 bounds\n    const epsg3857Bounds =\n      Math.PI * terrainProviderBuilder.ellipsoid.maximumRadius;\n    if (metadata.extent.xmax > epsg3857Bounds) {\n      metadata.extent.xmax = epsg3857Bounds;\n    }\n    if (metadata.extent.ymax > epsg3857Bounds) {\n      metadata.extent.ymax = epsg3857Bounds;\n    }\n    if (metadata.extent.xmin < -epsg3857Bounds) {\n      metadata.extent.xmin = -epsg3857Bounds;\n    }\n    if (metadata.extent.ymin < -epsg3857Bounds) {\n      metadata.extent.ymin = -epsg3857Bounds;\n    }\n\n    tilingSchemeOptions.rectangleSouthwestInMeters = new Cartesian2(\n      extent.xmin,\n      extent.ymin,\n    );\n    tilingSchemeOptions.rectangleNortheastInMeters = new Cartesian2(\n      extent.xmax,\n      extent.ymax,\n    );\n    terrainProviderBuilder.tilingScheme = new WebMercatorTilingScheme(\n      tilingSchemeOptions,\n    );\n  } else {\n    throw new RuntimeError(\"Invalid spatial reference\");\n  }\n\n  const tileInfo = metadata.tileInfo;\n  if (!defined(tileInfo)) {\n    throw new RuntimeError(\"tileInfo is required\");\n  }\n\n  terrainProviderBuilder.width = tileInfo.rows + 1;\n  terrainProviderBuilder.height = tileInfo.cols + 1;\n  terrainProviderBuilder.encoding =\n    tileInfo.format === \"LERC\"\n      ? HeightmapEncoding.LERC\n      : HeightmapEncoding.NONE;\n  terrainProviderBuilder.lodCount = tileInfo.lods.length - 1;\n\n  const hasAvailability = (terrainProviderBuilder.hasAvailability =\n    metadata.capabilities.indexOf(\"Tilemap\") !== -1);\n  if (hasAvailability) {\n    terrainProviderBuilder.tilesAvailable = new TileAvailability(\n      terrainProviderBuilder.tilingScheme,\n      terrainProviderBuilder.lodCount,\n    );\n    terrainProviderBuilder.tilesAvailable.addAvailableTileRange(\n      0,\n      0,\n      0,\n      terrainProviderBuilder.tilingScheme.getNumberOfXTilesAtLevel(0),\n      terrainProviderBuilder.tilingScheme.getNumberOfYTilesAtLevel(0),\n    );\n    terrainProviderBuilder.tilesAvailabilityLoaded = new TileAvailability(\n      terrainProviderBuilder.tilingScheme,\n      terrainProviderBuilder.lodCount,\n    );\n  }\n\n  terrainProviderBuilder.levelZeroMaximumGeometricError =\n    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n      terrainProviderBuilder.tilingScheme.ellipsoid,\n      terrainProviderBuilder.width,\n      terrainProviderBuilder.tilingScheme.getNumberOfXTilesAtLevel(0),\n    );\n\n  if (metadata.bandCount > 1) {\n    console.log(\n      \"ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one.\",\n    );\n  }\n\n  if (defined(metadata.minValues) && defined(metadata.maxValues)) {\n    terrainProviderBuilder.terrainDataStructure = {\n      elementMultiplier: 1.0,\n      lowestEncodedHeight: metadata.minValues[0],\n      highestEncodedHeight: metadata.maxValues[0],\n    };\n  } else {\n    terrainProviderBuilder.terrainDataStructure = {\n      elementMultiplier: 1.0,\n    };\n  }\n}\n\nasync function requestMetadata(\n  terrainProviderBuilder,\n  metadataResource,\n  provider,\n) {\n  try {\n    const metadata = await metadataResource.fetchJson();\n    parseMetadataSuccess(terrainProviderBuilder, metadata);\n  } catch (error) {\n    const message = `An error occurred while accessing ${metadataResource}.`;\n    TileProviderError.reportError(\n      undefined,\n      provider,\n      defined(provider) ? provider._errorEvent : undefined,\n      message,\n    );\n\n    throw error;\n  }\n}\n\n/**\n * <div class=\"notice\">\n * To construct a CesiumTerrainProvider, call {@link ArcGISTiledElevationTerrainProvider.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps\n * retrieved from Elevation Tiles of an an ArcGIS ImageService.\n *\n * @alias ArcGISTiledElevationTerrainProvider\n * @constructor\n *\n * @param {CesiumTerrainProvider.ConstructorOptions} [options] A url or an object describing initialization options\n *\n * @example\n * const terrainProvider = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(\"https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer\", {\n *   token: \"KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg..\"\n * });\n * viewer.terrainProvider = terrainProvider;\n *\n * @see TerrainProvider\n */\nfunction ArcGISTiledElevationTerrainProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._resource = undefined;\n  this._credit = undefined;\n  this._tilingScheme = undefined;\n  this._levelZeroMaximumGeometricError = undefined;\n  this._maxLevel = undefined;\n  this._terrainDataStructure = undefined;\n  this._width = undefined;\n  this._height = undefined;\n  this._encoding = undefined;\n  this._lodCount = undefined;\n\n  this._hasAvailability = false;\n  this._tilesAvailable = undefined;\n  this._tilesAvailabilityLoaded = undefined;\n  this._availableCache = {};\n\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof ArcGISTiledElevationTerrainProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active.  Typically this is used to credit\n   * the source of the terrain.\n   * @memberof ArcGISTiledElevationTerrainProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof ArcGISTiledElevationTerrainProvider.prototype\n   * @type {GeographicTilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask.  The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * @memberof ArcGISTiledElevationTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasWaterMask: {\n    get: function () {\n      return false;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * @memberof ArcGISTiledElevationTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasVertexNormals: {\n    get: function () {\n      return false;\n    },\n  },\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles. This property may be undefined if availability\n   * information is not available.\n   * @memberof ArcGISTiledElevationTerrainProvider.prototype\n   * @type {TileAvailability|undefined}\n   * @readonly\n   */\n  availability: {\n    get: function () {\n      return this._tilesAvailable;\n    },\n  },\n});\n\n/**\n * Creates a {@link TerrainProvider} that produces terrain geometry by tessellating height maps\n * retrieved from Elevation Tiles of an an ArcGIS ImageService.\n *\n * @param {Resource|string|Promise<Resource>|Promise<string>} url The URL of the ArcGIS ImageServer service.\n * @param {ArcGISTiledElevationTerrainProvider.ConstructorOptions} [options] A url or an object describing initialization options.\n * @returns {Promise<ArcGISTiledElevationTerrainProvider>}\n *\n * @example\n * const terrainProvider = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(\"https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer\", {\n *   token: \"KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg..\"\n * });\n * viewer.terrainProvider = terrainProvider;\n *\n * @exception {RuntimeError} metadata specifies invalid spatial reference\n * @exception {RuntimeError} metadata does not specify tileInfo\n */\nArcGISTiledElevationTerrainProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  url = await Promise.resolve(url);\n  let resource = Resource.createIfNeeded(url);\n  resource.appendForwardSlash();\n  if (defined(options.token)) {\n    resource = resource.getDerivedResource({\n      queryParameters: {\n        token: options.token,\n      },\n    });\n  }\n\n  const metadataResource = resource.getDerivedResource({\n    queryParameters: {\n      f: \"pjson\",\n    },\n  });\n\n  const terrainProviderBuilder = new TerrainProviderBuilder(options);\n  await requestMetadata(terrainProviderBuilder, metadataResource);\n\n  const provider = new ArcGISTiledElevationTerrainProvider(options);\n  terrainProviderBuilder.build(provider);\n  provider._resource = resource;\n\n  return provider;\n};\n\n/**\n * Requests the geometry for a given tile. The result includes terrain\n * data and indicates that all child tiles are available.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<TerrainData>|undefined} A promise for the requested geometry.  If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n */\nArcGISTiledElevationTerrainProvider.prototype.requestTileGeometry = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const tileResource = this._resource.getDerivedResource({\n    url: `tile/${level}/${y}/${x}`,\n    request: request,\n  });\n\n  const hasAvailability = this._hasAvailability;\n  let availabilityPromise = Promise.resolve(true);\n  let availabilityRequest;\n  if (\n    hasAvailability &&\n    !defined(isTileAvailable(this, level + 1, x * 2, y * 2))\n  ) {\n    // We need to load child availability\n    const availabilityResult = requestAvailability(\n      this,\n      level + 1,\n      x * 2,\n      y * 2,\n    );\n\n    availabilityPromise = availabilityResult.promise;\n    availabilityRequest = availabilityResult.request;\n  }\n\n  const promise = tileResource.fetchArrayBuffer();\n  if (!defined(promise) || !defined(availabilityPromise)) {\n    return undefined;\n  }\n\n  const that = this;\n  const tilesAvailable = this._tilesAvailable;\n  return Promise.all([promise, availabilityPromise])\n    .then(function (result) {\n      return new HeightmapTerrainData({\n        buffer: result[0],\n        width: that._width,\n        height: that._height,\n        childTileMask: hasAvailability\n          ? tilesAvailable.computeChildMaskForTile(level, x, y)\n          : ALL_CHILDREN,\n        structure: that._terrainDataStructure,\n        encoding: that._encoding,\n      });\n    })\n    .catch(async function (error) {\n      if (\n        defined(availabilityRequest) &&\n        availabilityRequest.state === RequestState.CANCELLED\n      ) {\n        request.cancel();\n\n        // Don't reject the promise till the request is actually cancelled\n        // Otherwise it will think the request failed, but it didn't.\n        try {\n          await request.deferred?.promise;\n        } catch {\n          // Eat this error\n        }\n\n        request.state = RequestState.CANCELLED;\n        return Promise.reject(error);\n      }\n      return Promise.reject(error);\n    });\n};\n\nfunction isTileAvailable(that, level, x, y) {\n  if (!that._hasAvailability) {\n    return undefined;\n  }\n\n  const tilesAvailabilityLoaded = that._tilesAvailabilityLoaded;\n  const tilesAvailable = that._tilesAvailable;\n\n  if (level > that._lodCount) {\n    return false;\n  }\n\n  // Check if tiles are known to be available\n  if (tilesAvailable.isTileAvailable(level, x, y)) {\n    return true;\n  }\n\n  // or to not be available\n  if (tilesAvailabilityLoaded.isTileAvailable(level, x, y)) {\n    return false;\n  }\n\n  return undefined;\n}\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nArcGISTiledElevationTerrainProvider.prototype.getLevelMaximumGeometricError =\n  function (level) {\n    return this._levelZeroMaximumGeometricError / (1 << level);\n  };\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported, otherwise true or false.\n */\nArcGISTiledElevationTerrainProvider.prototype.getTileDataAvailable = function (\n  x,\n  y,\n  level,\n) {\n  if (!this._hasAvailability) {\n    return undefined;\n  }\n\n  const result = isTileAvailable(this, level, x, y);\n  if (defined(result)) {\n    return result;\n  }\n\n  requestAvailability(this, level, x, y);\n\n  return undefined;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {undefined} This provider does not support loading availability.\n */\nArcGISTiledElevationTerrainProvider.prototype.loadTileDataAvailability =\n  function (x, y, level) {\n    return undefined;\n  };\n\nfunction findRange(origin, width, height, data) {\n  const endCol = width - 1;\n  const endRow = height - 1;\n\n  const value = data[origin.y * width + origin.x];\n  const endingIndices = [];\n  const range = {\n    startX: origin.x,\n    startY: origin.y,\n    endX: 0,\n    endY: 0,\n  };\n\n  const corner = new Cartesian2(origin.x + 1, origin.y + 1);\n  let doneX = false;\n  let doneY = false;\n  while (!(doneX && doneY)) {\n    // We want to use the original value when checking Y,\n    //  so get it before it possibly gets incremented\n    let endX = corner.x;\n\n    // If we no longer move in the Y direction we need to check the corner tile in X pass\n    const endY = doneY ? corner.y + 1 : corner.y;\n\n    // Check X range\n    if (!doneX) {\n      for (let y = origin.y; y < endY; ++y) {\n        if (data[y * width + corner.x] !== value) {\n          doneX = true;\n          break;\n        }\n      }\n\n      if (doneX) {\n        endingIndices.push(new Cartesian2(corner.x, origin.y));\n\n        // Use the last good column so we can continue with Y\n        --corner.x;\n        --endX;\n        range.endX = corner.x;\n      } else if (corner.x === endCol) {\n        range.endX = corner.x;\n        doneX = true;\n      } else {\n        ++corner.x;\n      }\n    }\n\n    // Check Y range - The corner tile is checked here\n    if (!doneY) {\n      const col = corner.y * width;\n      for (let x = origin.x; x <= endX; ++x) {\n        if (data[col + x] !== value) {\n          doneY = true;\n          break;\n        }\n      }\n\n      if (doneY) {\n        endingIndices.push(new Cartesian2(origin.x, corner.y));\n\n        // Use the last good row so we can continue with X\n        --corner.y;\n        range.endY = corner.y;\n      } else if (corner.y === endRow) {\n        range.endY = corner.y;\n        doneY = true;\n      } else {\n        ++corner.y;\n      }\n    }\n  }\n\n  return {\n    endingIndices: endingIndices,\n    range: range,\n    value: value,\n  };\n}\n\nfunction computeAvailability(x, y, width, height, data) {\n  const ranges = [];\n\n  const singleValue = data.every(function (val) {\n    return val === data[0];\n  });\n  if (singleValue) {\n    if (data[0] === 1) {\n      ranges.push({\n        startX: x,\n        startY: y,\n        endX: x + width - 1,\n        endY: y + height - 1,\n      });\n    }\n\n    return ranges;\n  }\n\n  let positions = [new Cartesian2(0, 0)];\n  while (positions.length > 0) {\n    const origin = positions.pop();\n    const result = findRange(origin, width, height, data);\n\n    if (result.value === 1) {\n      // Convert range into the array into global tile coordinates\n      const range = result.range;\n      range.startX += x;\n      range.endX += x;\n      range.startY += y;\n      range.endY += y;\n      ranges.push(range);\n    }\n\n    const endingIndices = result.endingIndices;\n    if (endingIndices.length > 0) {\n      positions = positions.concat(endingIndices);\n    }\n  }\n\n  return ranges;\n}\n\nfunction requestAvailability(that, level, x, y) {\n  if (!that._hasAvailability) {\n    return {};\n  }\n\n  // Fetch 128x128 availability list, so we make the minimum amount of requests\n  const xOffset = Math.floor(x / 128) * 128;\n  const yOffset = Math.floor(y / 128) * 128;\n\n  const dim = Math.min(1 << level, 128);\n  const url = `tilemap/${level}/${yOffset}/${xOffset}/${dim}/${dim}`;\n\n  const availableCache = that._availableCache;\n  if (defined(availableCache[url])) {\n    return availableCache[url];\n  }\n\n  const request = new Request({\n    throttle: false,\n    throttleByServer: true,\n    type: RequestType.TERRAIN,\n  });\n\n  const tilemapResource = that._resource.getDerivedResource({\n    url: url,\n    request: request,\n  });\n\n  let promise = tilemapResource.fetchJson();\n  if (!defined(promise)) {\n    return {};\n  }\n\n  promise = promise.then(function (result) {\n    const available = computeAvailability(\n      xOffset,\n      yOffset,\n      dim,\n      dim,\n      result.data,\n    );\n\n    // Mark whole area as having availability loaded\n    that._tilesAvailabilityLoaded.addAvailableTileRange(\n      level,\n      xOffset,\n      yOffset,\n      xOffset + dim,\n      yOffset + dim,\n    );\n\n    const tilesAvailable = that._tilesAvailable;\n    for (let i = 0; i < available.length; ++i) {\n      const range = available[i];\n      tilesAvailable.addAvailableTileRange(\n        level,\n        range.startX,\n        range.startY,\n        range.endX,\n        range.endY,\n      );\n    }\n\n    // Conveniently return availability of original tile\n    return isTileAvailable(that, level, x, y);\n  });\n\n  availableCache[url] = {\n    promise: promise,\n    request: request,\n  };\n\n  promise = promise.finally(function (result) {\n    delete availableCache[url];\n\n    return result;\n  });\n\n  return {\n    promise: promise,\n    request: request,\n  };\n}\nexport default ArcGISTiledElevationTerrainProvider;\n","/**\n * ArcType defines the path that should be taken connecting vertices.\n *\n * @enum {number}\n */\nconst ArcType = {\n  /**\n   * Straight line that does not conform to the surface of the ellipsoid.\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n\n  /**\n   * Follow geodesic path.\n   *\n   * @type {number}\n   * @constant\n   */\n  GEODESIC: 1,\n\n  /**\n   * Follow rhumb or loxodrome path.\n   *\n   * @type {number}\n   * @constant\n   */\n  RHUMB: 2,\n};\nexport default Object.freeze(ArcType);\n","/**\n * An enum describing the type of motion that is defined by an articulation stage\n * in the AGI_articulations extension.\n *\n * @alias {ArticulationStageType}\n * @enum {string}\n *\n * @private\n */\nconst ArticulationStageType = {\n  XTRANSLATE: \"xTranslate\",\n  YTRANSLATE: \"yTranslate\",\n  ZTRANSLATE: \"zTranslate\",\n  XROTATE: \"xRotate\",\n  YROTATE: \"yRotate\",\n  ZROTATE: \"zRotate\",\n  XSCALE: \"xScale\",\n  YSCALE: \"yScale\",\n  ZSCALE: \"zScale\",\n  UNIFORMSCALE: \"uniformScale\",\n};\n\nexport default Object.freeze(ArticulationStageType);\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A collection of key-value pairs that is stored as a hash for easy\n * lookup but also provides an array for fast iteration.\n * @alias AssociativeArray\n * @constructor\n */\nfunction AssociativeArray() {\n  this._array = [];\n  this._hash = {};\n}\n\nObject.defineProperties(AssociativeArray.prototype, {\n  /**\n   * Gets the number of items in the collection.\n   * @memberof AssociativeArray.prototype\n   *\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      return this._array.length;\n    },\n  },\n  /**\n   * Gets an unordered array of all values in the collection.\n   * This is a live array that will automatically reflect the values in the collection,\n   * it should not be modified directly.\n   * @memberof AssociativeArray.prototype\n   *\n   * @type {Array}\n   */\n  values: {\n    get: function () {\n      return this._array;\n    },\n  },\n});\n\n/**\n * Determines if the provided key is in the array.\n *\n * @param {string|number} key The key to check.\n * @returns {boolean} <code>true</code> if the key is in the array, <code>false</code> otherwise.\n */\nAssociativeArray.prototype.contains = function (key) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof key !== \"string\" && typeof key !== \"number\") {\n    throw new DeveloperError(\"key is required to be a string or number.\");\n  }\n  //>>includeEnd('debug');\n  return defined(this._hash[key]);\n};\n\n/**\n * Associates the provided key with the provided value.  If the key already\n * exists, it is overwritten with the new value.\n *\n * @param {string|number} key A unique identifier.\n * @param {*} value The value to associate with the provided key.\n */\nAssociativeArray.prototype.set = function (key, value) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof key !== \"string\" && typeof key !== \"number\") {\n    throw new DeveloperError(\"key is required to be a string or number.\");\n  }\n  //>>includeEnd('debug');\n\n  const oldValue = this._hash[key];\n  if (value !== oldValue) {\n    this.remove(key);\n    this._hash[key] = value;\n    this._array.push(value);\n  }\n};\n\n/**\n * Retrieves the value associated with the provided key.\n *\n * @param {string|number} key The key whose value is to be retrieved.\n * @returns {*} The associated value, or undefined if the key does not exist in the collection.\n */\nAssociativeArray.prototype.get = function (key) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof key !== \"string\" && typeof key !== \"number\") {\n    throw new DeveloperError(\"key is required to be a string or number.\");\n  }\n  //>>includeEnd('debug');\n  return this._hash[key];\n};\n\n/**\n * Removes a key-value pair from the collection.\n *\n * @param {string|number} key The key to be removed.\n * @returns {boolean} True if it was removed, false if the key was not in the collection.\n */\nAssociativeArray.prototype.remove = function (key) {\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(key) && typeof key !== \"string\" && typeof key !== \"number\") {\n    throw new DeveloperError(\"key is required to be a string or number.\");\n  }\n  //>>includeEnd('debug');\n\n  const value = this._hash[key];\n  const hasValue = defined(value);\n  if (hasValue) {\n    const array = this._array;\n    array.splice(array.indexOf(value), 1);\n    delete this._hash[key];\n  }\n  return hasValue;\n};\n\n/**\n * Clears the collection.\n */\nAssociativeArray.prototype.removeAll = function () {\n  const array = this._array;\n  if (array.length > 0) {\n    this._hash = {};\n    array.length = 0;\n  }\n};\nexport default AssociativeArray;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport AttributeType from \"../Scene/AttributeType.js\";\n\nconst RIGHT_SHIFT8 = 1.0 / 256.0;\nconst LEFT_SHIFT16 = 65536.0;\nconst LEFT_SHIFT8 = 256.0;\n\n/**\n * Attribute compression and decompression functions.\n *\n * @namespace AttributeCompression\n *\n * @private\n */\nconst AttributeCompression = {};\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-rangeMax] following the 'oct' encoding.\n *\n * Oct encoding is a compact representation of unit length vectors.\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\n * Cigolle et al 2014: {@link http://jcgt.org/published/0003/02/01/}\n *\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 component 'oct' encoding.\n * @param {Cartesian2} result The 2 component oct-encoded unit length vector.\n * @param {number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\n * @returns {Cartesian2} The 2 component oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n *\n * @see AttributeCompression.octDecodeInRange\n */\nAttributeCompression.octEncodeInRange = function (vector, rangeMax, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"vector\", vector);\n  Check.defined(\"result\", result);\n  const magSquared = Cartesian3.magnitudeSquared(vector);\n  if (Math.abs(magSquared - 1.0) > CesiumMath.EPSILON6) {\n    throw new DeveloperError(\"vector must be normalized.\");\n  }\n  //>>includeEnd('debug');\n\n  result.x =\n    vector.x / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n  result.y =\n    vector.y / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\n  if (vector.z < 0) {\n    const x = result.x;\n    const y = result.y;\n    result.x = (1.0 - Math.abs(y)) * CesiumMath.signNotZero(x);\n    result.y = (1.0 - Math.abs(x)) * CesiumMath.signNotZero(y);\n  }\n\n  result.x = CesiumMath.toSNorm(result.x, rangeMax);\n  result.y = CesiumMath.toSNorm(result.y, rangeMax);\n\n  return result;\n};\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding.\n *\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding.\n * @param {Cartesian2} result The 2 byte oct-encoded unit length vector.\n * @returns {Cartesian2} The 2 byte oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n *\n * @see AttributeCompression.octEncodeInRange\n * @see AttributeCompression.octDecode\n */\nAttributeCompression.octEncode = function (vector, result) {\n  return AttributeCompression.octEncodeInRange(vector, 255, result);\n};\n\nconst octEncodeScratch = new Cartesian2();\nconst uint8ForceArray = new Uint8Array(1);\nfunction forceUint8(value) {\n  uint8ForceArray[0] = value;\n  return uint8ForceArray[0];\n}\n/**\n * @param {Cartesian3} vector The normalized vector to be compressed into 4 byte 'oct' encoding.\n * @param {Cartesian4} result The 4 byte oct-encoded unit length vector.\n * @returns {Cartesian4} The 4 byte oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n *\n * @see AttributeCompression.octEncodeInRange\n * @see AttributeCompression.octDecodeFromCartesian4\n */\nAttributeCompression.octEncodeToCartesian4 = function (vector, result) {\n  AttributeCompression.octEncodeInRange(vector, 65535, octEncodeScratch);\n  result.x = forceUint8(octEncodeScratch.x * RIGHT_SHIFT8);\n  result.y = forceUint8(octEncodeScratch.x);\n  result.z = forceUint8(octEncodeScratch.y * RIGHT_SHIFT8);\n  result.w = forceUint8(octEncodeScratch.y);\n  return result;\n};\n\n/**\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component vector.\n *\n * @param {number} x The x component of the oct-encoded unit length vector.\n * @param {number} y The y component of the oct-encoded unit length vector.\n * @param {number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\n * @param {Cartesian3} result The decoded and normalized vector\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n * @exception {DeveloperError} x and y must be unsigned normalized integers between 0 and rangeMax.\n *\n * @see AttributeCompression.octEncodeInRange\n */\nAttributeCompression.octDecodeInRange = function (x, y, rangeMax, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"result\", result);\n  if (x < 0 || x > rangeMax || y < 0 || y > rangeMax) {\n    throw new DeveloperError(\n      `x and y must be unsigned normalized integers between 0 and ${rangeMax}`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  result.x = CesiumMath.fromSNorm(x, rangeMax);\n  result.y = CesiumMath.fromSNorm(y, rangeMax);\n  result.z = 1.0 - (Math.abs(result.x) + Math.abs(result.y));\n\n  if (result.z < 0.0) {\n    const oldVX = result.x;\n    result.x = (1.0 - Math.abs(result.y)) * CesiumMath.signNotZero(oldVX);\n    result.y = (1.0 - Math.abs(oldVX)) * CesiumMath.signNotZero(result.y);\n  }\n\n  return Cartesian3.normalize(result, result);\n};\n\n/**\n * Decodes a unit-length vector in 2 byte 'oct' encoding to a normalized 3-component vector.\n *\n * @param {number} x The x component of the oct-encoded unit length vector.\n * @param {number} y The y component of the oct-encoded unit length vector.\n * @param {Cartesian3} result The decoded and normalized vector.\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n * @exception {DeveloperError} x and y must be an unsigned normalized integer between 0 and 255.\n *\n * @see AttributeCompression.octDecodeInRange\n */\nAttributeCompression.octDecode = function (x, y, result) {\n  return AttributeCompression.octDecodeInRange(x, y, 255, result);\n};\n\n/**\n * Decodes a unit-length vector in 4 byte 'oct' encoding to a normalized 3-component vector.\n *\n * @param {Cartesian4} encoded The oct-encoded unit length vector.\n * @param {Cartesian3} result The decoded and normalized vector.\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n * @exception {DeveloperError} x, y, z, and w must be unsigned normalized integers between 0 and 255.\n *\n * @see AttributeCompression.octDecodeInRange\n * @see AttributeCompression.octEncodeToCartesian4\n */\nAttributeCompression.octDecodeFromCartesian4 = function (encoded, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"encoded\", encoded);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n  const x = encoded.x;\n  const y = encoded.y;\n  const z = encoded.z;\n  const w = encoded.w;\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    x < 0 ||\n    x > 255 ||\n    y < 0 ||\n    y > 255 ||\n    z < 0 ||\n    z > 255 ||\n    w < 0 ||\n    w > 255\n  ) {\n    throw new DeveloperError(\n      \"x, y, z, and w must be unsigned normalized integers between 0 and 255\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const xOct16 = x * LEFT_SHIFT8 + y;\n  const yOct16 = z * LEFT_SHIFT8 + w;\n  return AttributeCompression.octDecodeInRange(xOct16, yOct16, 65535, result);\n};\n\n/**\n * Packs an oct encoded vector into a single floating-point number.\n *\n * @param {Cartesian2} encoded The oct encoded vector.\n * @returns {number} The oct encoded vector packed into a single float.\n *\n */\nAttributeCompression.octPackFloat = function (encoded) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"encoded\", encoded);\n  //>>includeEnd('debug');\n  return 256.0 * encoded.x + encoded.y;\n};\n\nconst scratchEncodeCart2 = new Cartesian2();\n\n/**\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding and\n * stores those values in a single float-point number.\n *\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding.\n * @returns {number} The 2 byte oct-encoded unit length vector.\n *\n * @exception {DeveloperError} vector must be normalized.\n */\nAttributeCompression.octEncodeFloat = function (vector) {\n  AttributeCompression.octEncode(vector, scratchEncodeCart2);\n  return AttributeCompression.octPackFloat(scratchEncodeCart2);\n};\n\n/**\n * Decodes a unit-length vector in 'oct' encoding packed in a floating-point number to a normalized 3-component vector.\n *\n * @param {number} value The oct-encoded unit length vector stored as a single floating-point number.\n * @param {Cartesian3} result The decoded and normalized vector\n * @returns {Cartesian3} The decoded and normalized vector.\n *\n */\nAttributeCompression.octDecodeFloat = function (value, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"value\", value);\n  //>>includeEnd('debug');\n\n  const temp = value / 256.0;\n  const x = Math.floor(temp);\n  const y = (temp - x) * 256.0;\n\n  return AttributeCompression.octDecode(x, y, result);\n};\n\n/**\n * Encodes three normalized vectors into 6 SNORM values in the range of [0-255] following the 'oct' encoding and\n * packs those into two floating-point numbers.\n *\n * @param {Cartesian3} v1 A normalized vector to be compressed.\n * @param {Cartesian3} v2 A normalized vector to be compressed.\n * @param {Cartesian3} v3 A normalized vector to be compressed.\n * @param {Cartesian2} result The 'oct' encoded vectors packed into two floating-point numbers.\n * @returns {Cartesian2} The 'oct' encoded vectors packed into two floating-point numbers.\n *\n */\nAttributeCompression.octPack = function (v1, v2, v3, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"v1\", v1);\n  Check.defined(\"v2\", v2);\n  Check.defined(\"v3\", v3);\n  Check.defined(\"result\", result);\n  //>>includeEnd('debug');\n\n  const encoded1 = AttributeCompression.octEncodeFloat(v1);\n  const encoded2 = AttributeCompression.octEncodeFloat(v2);\n\n  const encoded3 = AttributeCompression.octEncode(v3, scratchEncodeCart2);\n  result.x = 65536.0 * encoded3.x + encoded1;\n  result.y = 65536.0 * encoded3.y + encoded2;\n  return result;\n};\n\n/**\n * Decodes three unit-length vectors in 'oct' encoding packed into a floating-point number to a normalized 3-component vector.\n *\n * @param {Cartesian2} packed The three oct-encoded unit length vectors stored as two floating-point number.\n * @param {Cartesian3} v1 One decoded and normalized vector.\n * @param {Cartesian3} v2 One decoded and normalized vector.\n * @param {Cartesian3} v3 One decoded and normalized vector.\n */\nAttributeCompression.octUnpack = function (packed, v1, v2, v3) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"packed\", packed);\n  Check.defined(\"v1\", v1);\n  Check.defined(\"v2\", v2);\n  Check.defined(\"v3\", v3);\n  //>>includeEnd('debug');\n\n  let temp = packed.x / 65536.0;\n  const x = Math.floor(temp);\n  const encodedFloat1 = (temp - x) * 65536.0;\n\n  temp = packed.y / 65536.0;\n  const y = Math.floor(temp);\n  const encodedFloat2 = (temp - y) * 65536.0;\n\n  AttributeCompression.octDecodeFloat(encodedFloat1, v1);\n  AttributeCompression.octDecodeFloat(encodedFloat2, v2);\n  AttributeCompression.octDecode(x, y, v3);\n};\n\n/**\n * Pack texture coordinates into a single float. The texture coordinates will only preserve 12 bits of precision.\n *\n * @param {Cartesian2} textureCoordinates The texture coordinates to compress.  Both coordinates must be in the range 0.0-1.0.\n * @returns {number} The packed texture coordinates.\n *\n */\nAttributeCompression.compressTextureCoordinates = function (\n  textureCoordinates,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"textureCoordinates\", textureCoordinates);\n  //>>includeEnd('debug');\n\n  // Move x and y to the range 0-4095;\n  const x = (textureCoordinates.x * 4095.0) | 0;\n  const y = (textureCoordinates.y * 4095.0) | 0;\n  return 4096.0 * x + y;\n};\n\n/**\n * Decompresses texture coordinates that were packed into a single float.\n *\n * @param {number} compressed The compressed texture coordinates.\n * @param {Cartesian2} result The decompressed texture coordinates.\n * @returns {Cartesian2} The modified result parameter.\n *\n */\nAttributeCompression.decompressTextureCoordinates = function (\n  compressed,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"compressed\", compressed);\n  Check.defined(\"result\", result);\n  //>>includeEnd('debug');\n\n  const temp = compressed / 4096.0;\n  const xZeroTo4095 = Math.floor(temp);\n  result.x = xZeroTo4095 / 4095.0;\n  result.y = (compressed - xZeroTo4095 * 4096) / 4095;\n  return result;\n};\n\nfunction zigZagDecode(value) {\n  return (value >> 1) ^ -(value & 1);\n}\n\n/**\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\n *\n * @param {Uint16Array} uBuffer The buffer view of u values.\n * @param {Uint16Array} vBuffer The buffer view of v values.\n * @param {Uint16Array} [heightBuffer] The buffer view of height values.\n *\n * @see {@link https://github.com/CesiumGS/quantized-mesh|quantized-mesh-1.0 terrain format}\n */\nAttributeCompression.zigZagDeltaDecode = function (\n  uBuffer,\n  vBuffer,\n  heightBuffer,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"uBuffer\", uBuffer);\n  Check.defined(\"vBuffer\", vBuffer);\n  Check.typeOf.number.equals(\n    \"uBuffer.length\",\n    \"vBuffer.length\",\n    uBuffer.length,\n    vBuffer.length,\n  );\n  if (defined(heightBuffer)) {\n    Check.typeOf.number.equals(\n      \"uBuffer.length\",\n      \"heightBuffer.length\",\n      uBuffer.length,\n      heightBuffer.length,\n    );\n  }\n  //>>includeEnd('debug');\n\n  const count = uBuffer.length;\n\n  let u = 0;\n  let v = 0;\n  let height = 0;\n\n  for (let i = 0; i < count; ++i) {\n    u += zigZagDecode(uBuffer[i]);\n    v += zigZagDecode(vBuffer[i]);\n\n    uBuffer[i] = u;\n    vBuffer[i] = v;\n\n    if (defined(heightBuffer)) {\n      height += zigZagDecode(heightBuffer[i]);\n      heightBuffer[i] = height;\n    }\n  }\n};\n\n/**\n * Dequantizes a quantized typed array into a floating point typed array.\n *\n * @see {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data}\n *\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array} typedArray The typed array for the quantized data.\n * @param {ComponentDatatype} componentDatatype The component datatype of the quantized data.\n * @param {AttributeType} type The attribute type of the quantized data.\n * @param {number} count The number of attributes referenced in the dequantized array.\n *\n * @returns {Float32Array} The dequantized array.\n */\nAttributeCompression.dequantize = function (\n  typedArray,\n  componentDatatype,\n  type,\n  count,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"typedArray\", typedArray);\n  Check.defined(\"componentDatatype\", componentDatatype);\n  Check.defined(\"type\", type);\n  Check.defined(\"count\", count);\n  //>>includeEnd('debug');\n\n  const componentsPerAttribute = AttributeType.getNumberOfComponents(type);\n\n  let divisor;\n  switch (componentDatatype) {\n    case ComponentDatatype.BYTE:\n      divisor = 127.0;\n      break;\n    case ComponentDatatype.UNSIGNED_BYTE:\n      divisor = 255.0;\n      break;\n    case ComponentDatatype.SHORT:\n      divisor = 32767.0;\n      break;\n    case ComponentDatatype.UNSIGNED_SHORT:\n      divisor = 65535.0;\n      break;\n    case ComponentDatatype.INT:\n      divisor = 2147483647.0;\n      break;\n    case ComponentDatatype.UNSIGNED_INT:\n      divisor = 4294967295.0;\n      break;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\n        `Cannot dequantize component datatype: ${componentDatatype}`,\n      );\n    //>>includeEnd('debug');\n  }\n\n  const dequantizedTypedArray = new Float32Array(\n    count * componentsPerAttribute,\n  );\n\n  for (let i = 0; i < count; i++) {\n    for (let j = 0; j < componentsPerAttribute; j++) {\n      const index = i * componentsPerAttribute + j;\n      dequantizedTypedArray[index] = Math.max(\n        typedArray[index] / divisor,\n        -1.0,\n      );\n    }\n  }\n\n  return dequantizedTypedArray;\n};\n\n/**\n * Encodes RGB values at 8-bit precision into a single float, equivalent\n * to 0xFFFFFF representation in JavaScript. Perceptually near-lossless\n * in the \"srgb\" color space; \"srgb-linear\" and wide-gamut color spaces\n * benefit from 10+ bit precision.\n *\n * @param {Color} color\n * @returns {number}\n */\nAttributeCompression.encodeRGB8 = function (color) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"color\", color);\n  //>>includeEnd('debug');\n\n  return (\n    Math.round(CesiumMath.clamp(color.red * 255, 0, 255)) * LEFT_SHIFT16 +\n    Math.round(CesiumMath.clamp(color.green * 255, 0, 255)) * LEFT_SHIFT8 +\n    Math.round(CesiumMath.clamp(color.blue * 255, 0, 255))\n  );\n};\n\n/**\n * Decodes RGB values at 8-bit precision from a signle float, equivalent\n * to 0xFFFFFF representation in JavaScript. Perceptually near-lossless\n * in the \"srgb\" color space; \"srgb-linear\" and wide-gamut color spaces\n * benefit from 10+ bit precision.\n *\n * @param {number} encoded\n * @param {Color} result\n * @returns {Color}\n */\nAttributeCompression.decodeRGB8 = function (encoded, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"encoded\", encoded);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  encoded = Math.floor(encoded);\n\n  result.red = ((encoded >> 16) & 255) / 255;\n  result.green = ((encoded >> 8) & 255) / 255;\n  result.blue = (encoded & 255) / 255;\n\n  return result;\n};\n\n/**\n * Decode RGB565-encoded colors into a floating point typed array containing\n * normalized RGB values.\n *\n * @param {Uint16Array} typedArray Array of RGB565 values\n * @param {Float32Array} [result] Array to store the normalized VEC3 result\n */\nAttributeCompression.decodeRGB565 = function (typedArray, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"typedArray\", typedArray);\n\n  const expectedLength = typedArray.length * 3;\n  if (defined(result)) {\n    Check.typeOf.number.equals(\n      \"result.length\",\n      \"typedArray.length * 3\",\n      result.length,\n      expectedLength,\n    );\n  }\n  //>>includeEnd('debug');\n\n  const count = typedArray.length;\n  if (!defined(result)) {\n    result = new Float32Array(count * 3);\n  }\n\n  const mask5 = (1 << 5) - 1;\n  const mask6 = (1 << 6) - 1;\n  const normalize5 = 1.0 / 31.0;\n  const normalize6 = 1.0 / 63.0;\n  for (let i = 0; i < count; i++) {\n    const value = typedArray[i];\n    const red = value >> 11;\n    const green = (value >> 5) & mask6;\n    const blue = value & mask5;\n\n    const offset = 3 * i;\n    result[offset] = red * normalize5;\n    result[offset + 1] = green * normalize6;\n    result[offset + 2] = blue * normalize5;\n  }\n\n  return result;\n};\n\nexport default AttributeCompression;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Intersect from \"./Intersect.js\";\n\n/**\n * Creates an instance of an AxisAlignedBoundingBox from the minimum and maximum points along the x, y, and z axes.\n * @alias AxisAlignedBoundingBox\n * @constructor\n *\n * @param {Cartesian3} [minimum=Cartesian3.ZERO] The minimum point along the x, y, and z axes.\n * @param {Cartesian3} [maximum=Cartesian3.ZERO] The maximum point along the x, y, and z axes.\n * @param {Cartesian3} [center] The center of the box; automatically computed if not supplied.\n *\n * @see BoundingSphere\n * @see BoundingRectangle\n */\nfunction AxisAlignedBoundingBox(minimum, maximum, center) {\n  /**\n   * The minimum point defining the bounding box.\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   */\n  this.minimum = Cartesian3.clone(minimum ?? Cartesian3.ZERO);\n\n  /**\n   * The maximum point defining the bounding box.\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   */\n  this.maximum = Cartesian3.clone(maximum ?? Cartesian3.ZERO);\n\n  // If center was not defined, compute it.\n  if (!defined(center)) {\n    center = Cartesian3.midpoint(this.minimum, this.maximum, new Cartesian3());\n  } else {\n    center = Cartesian3.clone(center);\n  }\n\n  /**\n   * The center point of the bounding box.\n   * @type {Cartesian3}\n   */\n  this.center = center;\n}\n\n/**\n * Creates an instance of an AxisAlignedBoundingBox from its corners.\n *\n * @param {Cartesian3} minimum The minimum point along the x, y, and z axes.\n * @param {Cartesian3} maximum The maximum point along the x, y, and z axes.\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\n *\n * @example\n * // Compute an axis aligned bounding box from the two corners.\n * const box = Cesium.AxisAlignedBoundingBox.fromCorners(new Cesium.Cartesian3(-1, -1, -1), new Cesium.Cartesian3(1, 1, 1));\n */\nAxisAlignedBoundingBox.fromCorners = function (minimum, maximum, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"minimum\", minimum);\n  Check.defined(\"maximum\", maximum);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new AxisAlignedBoundingBox();\n  }\n\n  result.minimum = Cartesian3.clone(minimum, result.minimum);\n  result.maximum = Cartesian3.clone(maximum, result.maximum);\n  result.center = Cartesian3.midpoint(minimum, maximum, result.center);\n\n  return result;\n};\n\n/**\n * Computes an instance of an AxisAlignedBoundingBox. The box is determined by\n * finding the points spaced the farthest apart on the x, y, and z axes.\n *\n * @param {Cartesian3[]} positions List of points that the bounding box will enclose.  Each point must have a <code>x</code>, <code>y</code>, and <code>z</code> properties.\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\n *\n * @example\n * // Compute an axis aligned bounding box enclosing two points.\n * const box = Cesium.AxisAlignedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);\n */\nAxisAlignedBoundingBox.fromPoints = function (positions, result) {\n  if (!defined(result)) {\n    result = new AxisAlignedBoundingBox();\n  }\n\n  if (!defined(positions) || positions.length === 0) {\n    result.minimum = Cartesian3.clone(Cartesian3.ZERO, result.minimum);\n    result.maximum = Cartesian3.clone(Cartesian3.ZERO, result.maximum);\n    result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n    return result;\n  }\n\n  let minimumX = positions[0].x;\n  let minimumY = positions[0].y;\n  let minimumZ = positions[0].z;\n\n  let maximumX = positions[0].x;\n  let maximumY = positions[0].y;\n  let maximumZ = positions[0].z;\n\n  const length = positions.length;\n  for (let i = 1; i < length; i++) {\n    const p = positions[i];\n    const x = p.x;\n    const y = p.y;\n    const z = p.z;\n\n    minimumX = Math.min(x, minimumX);\n    maximumX = Math.max(x, maximumX);\n    minimumY = Math.min(y, minimumY);\n    maximumY = Math.max(y, maximumY);\n    minimumZ = Math.min(z, minimumZ);\n    maximumZ = Math.max(z, maximumZ);\n  }\n\n  const minimum = result.minimum;\n  minimum.x = minimumX;\n  minimum.y = minimumY;\n  minimum.z = minimumZ;\n\n  const maximum = result.maximum;\n  maximum.x = maximumX;\n  maximum.y = maximumY;\n  maximum.z = maximumZ;\n\n  result.center = Cartesian3.midpoint(minimum, maximum, result.center);\n\n  return result;\n};\n\n/**\n * Duplicates a AxisAlignedBoundingBox instance.\n *\n * @param {AxisAlignedBoundingBox} box The bounding box to duplicate.\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if none was provided. (Returns undefined if box is undefined)\n */\nAxisAlignedBoundingBox.clone = function (box, result) {\n  if (!defined(box)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new AxisAlignedBoundingBox(box.minimum, box.maximum, box.center);\n  }\n\n  result.minimum = Cartesian3.clone(box.minimum, result.minimum);\n  result.maximum = Cartesian3.clone(box.maximum, result.maximum);\n  result.center = Cartesian3.clone(box.center, result.center);\n  return result;\n};\n\n/**\n * Compares the provided AxisAlignedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {AxisAlignedBoundingBox} [left] The first AxisAlignedBoundingBox.\n * @param {AxisAlignedBoundingBox} [right] The second AxisAlignedBoundingBox.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nAxisAlignedBoundingBox.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Cartesian3.equals(left.center, right.center) &&\n      Cartesian3.equals(left.minimum, right.minimum) &&\n      Cartesian3.equals(left.maximum, right.maximum))\n  );\n};\n\nlet intersectScratch = new Cartesian3();\n/**\n * Determines which side of a plane a box is located.\n *\n * @param {AxisAlignedBoundingBox} box The bounding box to test.\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the box\n *                      intersects the plane.\n */\nAxisAlignedBoundingBox.intersectPlane = function (box, plane) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"box\", box);\n  Check.defined(\"plane\", plane);\n  //>>includeEnd('debug');\n\n  intersectScratch = Cartesian3.subtract(\n    box.maximum,\n    box.minimum,\n    intersectScratch,\n  );\n  const h = Cartesian3.multiplyByScalar(\n    intersectScratch,\n    0.5,\n    intersectScratch,\n  ); //The positive half diagonal\n  const normal = plane.normal;\n  const e =\n    h.x * Math.abs(normal.x) +\n    h.y * Math.abs(normal.y) +\n    h.z * Math.abs(normal.z);\n  const s = Cartesian3.dot(box.center, normal) + plane.distance; //signed distance from center\n\n  if (s - e > 0) {\n    return Intersect.INSIDE;\n  }\n\n  if (s + e < 0) {\n    //Not in front because normals point inward\n    return Intersect.OUTSIDE;\n  }\n\n  return Intersect.INTERSECTING;\n};\n\n/**\n * Determines whether two axis aligned bounding boxes intersect.\n *\n * @param {AxisAlignedBoundingBox} box first box\n * @param {AxisAlignedBoundingBox} other second box\n * @returns {boolean} <code>true</code> if the boxes intersect; otherwise, <code>false</code>.\n */\nAxisAlignedBoundingBox.intersectAxisAlignedBoundingBox = function (box, other) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"box\", box);\n  Check.defined(\"other\", other);\n  //>>includeEnd('debug');\n\n  // This short circuits in favor of AABBs that do not intersect.\n  return (\n    box.minimum.x <= other.maximum.x &&\n    box.maximum.x >= other.minimum.x &&\n    box.minimum.y <= other.maximum.y &&\n    box.maximum.y >= other.minimum.y &&\n    box.minimum.z <= other.maximum.z &&\n    box.maximum.z >= other.minimum.z\n  );\n};\n\n/**\n * Duplicates this AxisAlignedBoundingBox instance.\n *\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\n */\nAxisAlignedBoundingBox.prototype.clone = function (result) {\n  return AxisAlignedBoundingBox.clone(this, result);\n};\n\n/**\n * Determines which side of a plane this box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the box\n *                      intersects the plane.\n */\nAxisAlignedBoundingBox.prototype.intersectPlane = function (plane) {\n  return AxisAlignedBoundingBox.intersectPlane(this, plane);\n};\n\n/**\n * Determines whether some other axis aligned bounding box intersects this box.\n *\n * @param {AxisAlignedBoundingBox} other The other axis aligned bounding box.\n * @returns {boolean} <code>true</code> if the boxes intersect; otherwise, <code>false</code>.\n */\nAxisAlignedBoundingBox.prototype.intersectAxisAlignedBoundingBox = function (\n  other,\n) {\n  return AxisAlignedBoundingBox.intersectAxisAlignedBoundingBox(this, other);\n};\n\n/**\n * Compares this AxisAlignedBoundingBox against the provided AxisAlignedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {AxisAlignedBoundingBox} [right] The right hand side AxisAlignedBoundingBox.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nAxisAlignedBoundingBox.prototype.equals = function (right) {\n  return AxisAlignedBoundingBox.equals(this, right);\n};\nexport default AxisAlignedBoundingBox;\n","import Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\nconst url = \"https://dev.virtualearth.net/REST/v1/Locations\";\n\n/**\n * Provides geocoding through Bing Maps.\n *\n * @see {@link https://www.microsoft.com/en-us/maps/bing-maps/product|Microsoft Bing Maps Platform APIs Terms Of Use}\n * @alias BingMapsGeocoderService\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.key A key to use with the Bing Maps geocoding service\n * @param {string} [options.culture] A Bing Maps {@link https://docs.microsoft.com/en-us/bingmaps/rest-services/common-parameters-and-types/supported-culture-codes|Culture Code} to return results in a specific culture and language.\n */\nfunction BingMapsGeocoderService(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const key = options.key;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(key)) {\n    throw new DeveloperError(\"options.key is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._key = key;\n\n  const queryParameters = {\n    key: key,\n  };\n\n  if (defined(options.culture)) {\n    queryParameters.culture = options.culture;\n  }\n\n  this._resource = new Resource({\n    url: url,\n    queryParameters: queryParameters,\n  });\n\n  this._credit = new Credit(\n    `<img src=\"http:\\/\\/dev.virtualearth.net\\/Branding\\/logo_powered_by.png\"\\/>`,\n    false,\n  );\n}\n\nObject.defineProperties(BingMapsGeocoderService.prototype, {\n  /**\n   * The URL endpoint for the Bing geocoder service\n   * @type {string}\n   * @memberof BingMapsGeocoderService.prototype\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return url;\n    },\n  },\n\n  /**\n   * The key for the Bing geocoder service\n   * @type {string}\n   * @memberof BingMapsGeocoderService.prototype\n   * @readonly\n   */\n  key: {\n    get: function () {\n      return this._key;\n    },\n  },\n  /**\n   * Gets the credit to display after a geocode is performed. Typically this is used to credit\n   * the geocoder service.\n   * @memberof BingMapsGeocoderService.prototype\n   * @type {Credit|undefined}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n});\n\n/**\n * @function\n *\n * @param {string} query The query to be sent to the geocoder service\n * @returns {Promise<GeocoderService.Result[]>}\n */\nBingMapsGeocoderService.prototype.geocode = async function (query) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"query\", query);\n  //>>includeEnd('debug');\n\n  const resource = this._resource.getDerivedResource({\n    queryParameters: {\n      query: query,\n    },\n  });\n\n  return resource.fetchJsonp(\"jsonp\").then(function (result) {\n    if (result.resourceSets.length === 0) {\n      return [];\n    }\n\n    const results = result.resourceSets[0].resources;\n\n    return results.map(function (resource) {\n      const bbox = resource.bbox;\n      const south = bbox[0];\n      const west = bbox[1];\n      const north = bbox[2];\n      const east = bbox[3];\n      return {\n        displayName: resource.name,\n        destination: Rectangle.fromDegrees(west, south, east, north),\n      };\n    });\n  });\n};\nexport default BingMapsGeocoderService;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Intersect from \"./Intersect.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * A bounding rectangle given by a corner, width and height.\n * @alias BoundingRectangle\n * @constructor\n *\n * @param {number} [x=0.0] The x coordinate of the rectangle.\n * @param {number} [y=0.0] The y coordinate of the rectangle.\n * @param {number} [width=0.0] The width of the rectangle.\n * @param {number} [height=0.0] The height of the rectangle.\n *\n * @see BoundingSphere\n * @see Packable\n */\nfunction BoundingRectangle(x, y, width, height) {\n  /**\n   * The x coordinate of the rectangle.\n   * @type {number}\n   * @default 0.0\n   */\n  this.x = x ?? 0.0;\n\n  /**\n   * The y coordinate of the rectangle.\n   * @type {number}\n   * @default 0.0\n   */\n  this.y = y ?? 0.0;\n\n  /**\n   * The width of the rectangle.\n   * @type {number}\n   * @default 0.0\n   */\n  this.width = width ?? 0.0;\n\n  /**\n   * The height of the rectangle.\n   * @type {number}\n   * @default 0.0\n   */\n  this.height = height ?? 0.0;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nBoundingRectangle.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoundingRectangle} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nBoundingRectangle.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.x;\n  array[startingIndex++] = value.y;\n  array[startingIndex++] = value.width;\n  array[startingIndex] = value.height;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoundingRectangle} [result] The object into which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n  result.x = array[startingIndex++];\n  result.y = array[startingIndex++];\n  result.width = array[startingIndex++];\n  result.height = array[startingIndex];\n  return result;\n};\n\n/**\n * Computes a bounding rectangle enclosing the list of 2D points.\n * The rectangle is oriented with the corner at the bottom left.\n *\n * @param {Cartesian2[]} positions List of points that the bounding rectangle will enclose.  Each point must have <code>x</code> and <code>y</code> properties.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.fromPoints = function (positions, result) {\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n\n  if (!defined(positions) || positions.length === 0) {\n    result.x = 0;\n    result.y = 0;\n    result.width = 0;\n    result.height = 0;\n    return result;\n  }\n\n  const length = positions.length;\n\n  let minimumX = positions[0].x;\n  let minimumY = positions[0].y;\n\n  let maximumX = positions[0].x;\n  let maximumY = positions[0].y;\n\n  for (let i = 1; i < length; i++) {\n    const p = positions[i];\n    const x = p.x;\n    const y = p.y;\n\n    minimumX = Math.min(x, minimumX);\n    maximumX = Math.max(x, maximumX);\n    minimumY = Math.min(y, minimumY);\n    maximumY = Math.max(y, maximumY);\n  }\n\n  result.x = minimumX;\n  result.y = minimumY;\n  result.width = maximumX - minimumX;\n  result.height = maximumY - minimumY;\n  return result;\n};\n\nconst defaultProjection = new GeographicProjection();\nconst fromRectangleLowerLeft = new Cartographic();\nconst fromRectangleUpperRight = new Cartographic();\n/**\n * Computes a bounding rectangle from a rectangle.\n *\n * @param {Rectangle} rectangle The valid rectangle used to create a bounding rectangle.\n * @param {object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.fromRectangle = function (rectangle, projection, result) {\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n\n  if (!defined(rectangle)) {\n    result.x = 0;\n    result.y = 0;\n    result.width = 0;\n    result.height = 0;\n    return result;\n  }\n\n  defaultProjection._ellipsoid = Ellipsoid.default;\n  projection = projection ?? defaultProjection;\n\n  const lowerLeft = projection.project(\n    Rectangle.southwest(rectangle, fromRectangleLowerLeft),\n  );\n  const upperRight = projection.project(\n    Rectangle.northeast(rectangle, fromRectangleUpperRight),\n  );\n\n  Cartesian2.subtract(upperRight, lowerLeft, upperRight);\n\n  result.x = lowerLeft.x;\n  result.y = lowerLeft.y;\n  result.width = upperRight.x;\n  result.height = upperRight.y;\n  return result;\n};\n\n/**\n * Duplicates a BoundingRectangle instance.\n *\n * @param {BoundingRectangle} rectangle The bounding rectangle to duplicate.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. (Returns undefined if rectangle is undefined)\n */\nBoundingRectangle.clone = function (rectangle, result) {\n  if (!defined(rectangle)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new BoundingRectangle(\n      rectangle.x,\n      rectangle.y,\n      rectangle.width,\n      rectangle.height,\n    );\n  }\n\n  result.x = rectangle.x;\n  result.y = rectangle.y;\n  result.width = rectangle.width;\n  result.height = rectangle.height;\n  return result;\n};\n\n/**\n * Computes a bounding rectangle that is the union of the left and right bounding rectangles.\n *\n * @param {BoundingRectangle} left A rectangle to enclose in bounding rectangle.\n * @param {BoundingRectangle} right A rectangle to enclose in a bounding rectangle.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.union = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n\n  const lowerLeftX = Math.min(left.x, right.x);\n  const lowerLeftY = Math.min(left.y, right.y);\n  const upperRightX = Math.max(left.x + left.width, right.x + right.width);\n  const upperRightY = Math.max(left.y + left.height, right.y + right.height);\n\n  result.x = lowerLeftX;\n  result.y = lowerLeftY;\n  result.width = upperRightX - lowerLeftX;\n  result.height = upperRightY - lowerLeftY;\n  return result;\n};\n\n/**\n * Computes a bounding rectangle by enlarging the provided rectangle until it contains the provided point.\n *\n * @param {BoundingRectangle} rectangle A rectangle to expand.\n * @param {Cartesian2} point A point to enclose in a bounding rectangle.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.expand = function (rectangle, point, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Check.typeOf.object(\"point\", point);\n  //>>includeEnd('debug');\n\n  result = BoundingRectangle.clone(rectangle, result);\n\n  const width = point.x - result.x;\n  const height = point.y - result.y;\n\n  if (width > result.width) {\n    result.width = width;\n  } else if (width < 0) {\n    result.width -= width;\n    result.x = point.x;\n  }\n\n  if (height > result.height) {\n    result.height = height;\n  } else if (height < 0) {\n    result.height -= height;\n    result.y = point.y;\n  }\n\n  return result;\n};\n\n/**\n * Determines if two rectangles intersect.\n *\n * @param {BoundingRectangle} left A rectangle to check for intersection.\n * @param {BoundingRectangle} right The other rectangle to check for intersection.\n * @returns {Intersect} <code>Intersect.INTERSECTING</code> if the rectangles intersect, <code>Intersect.OUTSIDE</code> otherwise.\n */\nBoundingRectangle.intersect = function (left, right) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  //>>includeEnd('debug');\n\n  const leftX = left.x;\n  const leftY = left.y;\n  const rightX = right.x;\n  const rightY = right.y;\n  if (\n    !(\n      leftX > rightX + right.width ||\n      leftX + left.width < rightX ||\n      leftY + left.height < rightY ||\n      leftY > rightY + right.height\n    )\n  ) {\n    return Intersect.INTERSECTING;\n  }\n\n  return Intersect.OUTSIDE;\n};\n\n/**\n * Compares the provided BoundingRectangles componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingRectangle} [left] The first BoundingRectangle.\n * @param {BoundingRectangle} [right] The second BoundingRectangle.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nBoundingRectangle.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.x === right.x &&\n      left.y === right.y &&\n      left.width === right.width &&\n      left.height === right.height)\n  );\n};\n\n/**\n * Duplicates this BoundingRectangle instance.\n *\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBoundingRectangle.prototype.clone = function (result) {\n  return BoundingRectangle.clone(this, result);\n};\n\n/**\n * Determines if this rectangle intersects with another.\n *\n * @param {BoundingRectangle} right A rectangle to check for intersection.\n * @returns {Intersect} <code>Intersect.INTERSECTING</code> if the rectangles intersect, <code>Intersect.OUTSIDE</code> otherwise.\n */\nBoundingRectangle.prototype.intersect = function (right) {\n  return BoundingRectangle.intersect(this, right);\n};\n\n/**\n * Compares this BoundingRectangle against the provided BoundingRectangle componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingRectangle} [right] The right hand side BoundingRectangle.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nBoundingRectangle.prototype.equals = function (right) {\n  return BoundingRectangle.equals(this, right);\n};\nexport default BoundingRectangle;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Intersect from \"./Intersect.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * A bounding sphere with a center and a radius.\n * @alias BoundingSphere\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere.\n * @param {number} [radius=0.0] The radius of the bounding sphere.\n *\n * @see AxisAlignedBoundingBox\n * @see BoundingRectangle\n * @see Packable\n */\nfunction BoundingSphere(center, radius) {\n  /**\n   * The center point of the sphere.\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   */\n  this.center = Cartesian3.clone(center ?? Cartesian3.ZERO);\n\n  /**\n   * The radius of the sphere.\n   * @type {number}\n   * @default 0.0\n   */\n  this.radius = radius ?? 0.0;\n}\n\nconst fromPointsXMin = new Cartesian3();\nconst fromPointsYMin = new Cartesian3();\nconst fromPointsZMin = new Cartesian3();\nconst fromPointsXMax = new Cartesian3();\nconst fromPointsYMax = new Cartesian3();\nconst fromPointsZMax = new Cartesian3();\nconst fromPointsCurrentPos = new Cartesian3();\nconst fromPointsScratch = new Cartesian3();\nconst fromPointsRitterCenter = new Cartesian3();\nconst fromPointsMinBoxPt = new Cartesian3();\nconst fromPointsMaxBoxPt = new Cartesian3();\nconst fromPointsNaiveCenterScratch = new Cartesian3();\nconst volumeConstant = (4.0 / 3.0) * CesiumMath.PI;\n\n/**\n * Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points.\n * The bounding sphere is computed by running two algorithms, a naive algorithm and\n * Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit.\n *\n * @param {Cartesian3[]} [positions] An array of points that the bounding sphere will enclose.  Each point must have <code>x</code>, <code>y</code>, and <code>z</code> properties.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n *\n * @see {@link http://help.agi.com/AGIComponents/html/BlogBoundingSphere.htm|Bounding Sphere computation article}\n */\nBoundingSphere.fromPoints = function (positions, result) {\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  if (!defined(positions) || positions.length === 0) {\n    result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n    result.radius = 0.0;\n    return result;\n  }\n\n  const currentPos = Cartesian3.clone(positions[0], fromPointsCurrentPos);\n\n  const xMin = Cartesian3.clone(currentPos, fromPointsXMin);\n  const yMin = Cartesian3.clone(currentPos, fromPointsYMin);\n  const zMin = Cartesian3.clone(currentPos, fromPointsZMin);\n\n  const xMax = Cartesian3.clone(currentPos, fromPointsXMax);\n  const yMax = Cartesian3.clone(currentPos, fromPointsYMax);\n  const zMax = Cartesian3.clone(currentPos, fromPointsZMax);\n\n  const numPositions = positions.length;\n  let i;\n  for (i = 1; i < numPositions; i++) {\n    Cartesian3.clone(positions[i], currentPos);\n\n    const x = currentPos.x;\n    const y = currentPos.y;\n    const z = currentPos.z;\n\n    // Store points containing the the smallest and largest components\n    if (x < xMin.x) {\n      Cartesian3.clone(currentPos, xMin);\n    }\n\n    if (x > xMax.x) {\n      Cartesian3.clone(currentPos, xMax);\n    }\n\n    if (y < yMin.y) {\n      Cartesian3.clone(currentPos, yMin);\n    }\n\n    if (y > yMax.y) {\n      Cartesian3.clone(currentPos, yMax);\n    }\n\n    if (z < zMin.z) {\n      Cartesian3.clone(currentPos, zMin);\n    }\n\n    if (z > zMax.z) {\n      Cartesian3.clone(currentPos, zMax);\n    }\n  }\n\n  // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n  const xSpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(xMax, xMin, fromPointsScratch),\n  );\n  const ySpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(yMax, yMin, fromPointsScratch),\n  );\n  const zSpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(zMax, zMin, fromPointsScratch),\n  );\n\n  // Set the diameter endpoints to the largest span.\n  let diameter1 = xMin;\n  let diameter2 = xMax;\n  let maxSpan = xSpan;\n  if (ySpan > maxSpan) {\n    maxSpan = ySpan;\n    diameter1 = yMin;\n    diameter2 = yMax;\n  }\n  if (zSpan > maxSpan) {\n    maxSpan = zSpan;\n    diameter1 = zMin;\n    diameter2 = zMax;\n  }\n\n  // Calculate the center of the initial sphere found by Ritter's algorithm\n  const ritterCenter = fromPointsRitterCenter;\n  ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n  ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n  ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n  // Calculate the radius of the initial sphere found by Ritter's algorithm\n  let radiusSquared = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch),\n  );\n  let ritterRadius = Math.sqrt(radiusSquared);\n\n  // Find the center of the sphere found using the Naive method.\n  const minBoxPt = fromPointsMinBoxPt;\n  minBoxPt.x = xMin.x;\n  minBoxPt.y = yMin.y;\n  minBoxPt.z = zMin.z;\n\n  const maxBoxPt = fromPointsMaxBoxPt;\n  maxBoxPt.x = xMax.x;\n  maxBoxPt.y = yMax.y;\n  maxBoxPt.z = zMax.z;\n\n  const naiveCenter = Cartesian3.midpoint(\n    minBoxPt,\n    maxBoxPt,\n    fromPointsNaiveCenterScratch,\n  );\n\n  // Begin 2nd pass to find naive radius and modify the ritter sphere.\n  let naiveRadius = 0;\n  for (i = 0; i < numPositions; i++) {\n    Cartesian3.clone(positions[i], currentPos);\n\n    // Find the furthest point from the naive center to calculate the naive radius.\n    const r = Cartesian3.magnitude(\n      Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch),\n    );\n    if (r > naiveRadius) {\n      naiveRadius = r;\n    }\n\n    // Make adjustments to the Ritter Sphere to include all points.\n    const oldCenterToPointSquared = Cartesian3.magnitudeSquared(\n      Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch),\n    );\n    if (oldCenterToPointSquared > radiusSquared) {\n      const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n      // Calculate new radius to include the point that lies outside\n      ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n      radiusSquared = ritterRadius * ritterRadius;\n      // Calculate center of new Ritter sphere\n      const oldToNew = oldCenterToPoint - ritterRadius;\n      ritterCenter.x =\n        (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\n        oldCenterToPoint;\n      ritterCenter.y =\n        (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\n        oldCenterToPoint;\n      ritterCenter.z =\n        (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\n        oldCenterToPoint;\n    }\n  }\n\n  if (ritterRadius < naiveRadius) {\n    Cartesian3.clone(ritterCenter, result.center);\n    result.radius = ritterRadius;\n  } else {\n    Cartesian3.clone(naiveCenter, result.center);\n    result.radius = naiveRadius;\n  }\n\n  return result;\n};\n\nconst defaultProjection = new GeographicProjection();\nconst fromRectangle2DLowerLeft = new Cartesian3();\nconst fromRectangle2DUpperRight = new Cartesian3();\nconst fromRectangle2DSouthwest = new Cartographic();\nconst fromRectangle2DNortheast = new Cartographic();\n\n/**\n * Computes a bounding sphere from a rectangle projected in 2D.\n *\n * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere.\n * @param {object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromRectangle2D = function (rectangle, projection, result) {\n  return BoundingSphere.fromRectangleWithHeights2D(\n    rectangle,\n    projection,\n    0.0,\n    0.0,\n    result,\n  );\n};\n\n/**\n * Computes a bounding sphere from a rectangle projected in 2D.  The bounding sphere accounts for the\n * object's minimum and maximum heights over the rectangle.\n *\n * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere.\n * @param {object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\n * @param {number} [minimumHeight=0.0] The minimum height over the rectangle.\n * @param {number} [maximumHeight=0.0] The maximum height over the rectangle.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromRectangleWithHeights2D = function (\n  rectangle,\n  projection,\n  minimumHeight,\n  maximumHeight,\n  result,\n) {\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  if (!defined(rectangle)) {\n    result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n    result.radius = 0.0;\n    return result;\n  }\n\n  defaultProjection._ellipsoid = Ellipsoid.default;\n  projection = projection ?? defaultProjection;\n\n  Rectangle.southwest(rectangle, fromRectangle2DSouthwest);\n  fromRectangle2DSouthwest.height = minimumHeight;\n  Rectangle.northeast(rectangle, fromRectangle2DNortheast);\n  fromRectangle2DNortheast.height = maximumHeight;\n\n  const lowerLeft = projection.project(\n    fromRectangle2DSouthwest,\n    fromRectangle2DLowerLeft,\n  );\n  const upperRight = projection.project(\n    fromRectangle2DNortheast,\n    fromRectangle2DUpperRight,\n  );\n\n  const width = upperRight.x - lowerLeft.x;\n  const height = upperRight.y - lowerLeft.y;\n  const elevation = upperRight.z - lowerLeft.z;\n\n  result.radius =\n    Math.sqrt(width * width + height * height + elevation * elevation) * 0.5;\n  const center = result.center;\n  center.x = lowerLeft.x + width * 0.5;\n  center.y = lowerLeft.y + height * 0.5;\n  center.z = lowerLeft.z + elevation * 0.5;\n  return result;\n};\n\nconst fromRectangle3DScratch = [];\n\n/**\n * Computes a bounding sphere from a rectangle in 3D. The bounding sphere is created using a subsample of points\n * on the ellipsoid and contained in the rectangle. It may not be accurate for all rectangles on all types of ellipsoids.\n *\n * @param {Rectangle} [rectangle] The valid rectangle used to create a bounding sphere.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid used to determine positions of the rectangle.\n * @param {number} [surfaceHeight=0.0] The height above the surface of the ellipsoid.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromRectangle3D = function (\n  rectangle,\n  ellipsoid,\n  surfaceHeight,\n  result,\n) {\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  surfaceHeight = surfaceHeight ?? 0.0;\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  if (!defined(rectangle)) {\n    result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n    result.radius = 0.0;\n    return result;\n  }\n\n  const positions = Rectangle.subsample(\n    rectangle,\n    ellipsoid,\n    surfaceHeight,\n    fromRectangle3DScratch,\n  );\n  return BoundingSphere.fromPoints(positions, result);\n};\n\n/**\n * Computes a tight-fitting bounding sphere enclosing a list of 3D points, where the points are\n * stored in a flat array in X, Y, Z, order.  The bounding sphere is computed by running two\n * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to\n * ensure a tight fit.\n *\n * @param {number[]} [positions] An array of points that the bounding sphere will enclose.  Each point\n *        is formed from three elements in the array in the order X, Y, Z.\n * @param {Cartesian3} [center=Cartesian3.ZERO] The position to which the positions are relative, which need not be the\n *        origin of the coordinate system.  This is useful when the positions are to be used for\n *        relative-to-center (RTC) rendering.\n * @param {number} [stride=3] The number of array elements per vertex.  It must be at least 3, but it may\n *        be higher.  Regardless of the value of this parameter, the X coordinate of the first position\n *        is at array index 0, the Y coordinate is at array index 1, and the Z coordinate is at array index\n *        2.  When stride is 3, the X coordinate of the next position then begins at array index 3.  If\n *        the stride is 5, however, two array elements are skipped and the next position begins at array\n *        index 5.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n *\n * @example\n * // Compute the bounding sphere from 3 positions, each specified relative to a center.\n * // In addition to the X, Y, and Z coordinates, the points array contains two additional\n * // elements per point which are ignored for the purpose of computing the bounding sphere.\n * const center = new Cesium.Cartesian3(1.0, 2.0, 3.0);\n * const points = [1.0, 2.0, 3.0, 0.1, 0.2,\n *               4.0, 5.0, 6.0, 0.1, 0.2,\n *               7.0, 8.0, 9.0, 0.1, 0.2];\n * const sphere = Cesium.BoundingSphere.fromVertices(points, center, 5);\n *\n * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article}\n */\nBoundingSphere.fromVertices = function (positions, center, stride, result) {\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  if (!defined(positions) || positions.length === 0) {\n    result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n    result.radius = 0.0;\n    return result;\n  }\n\n  center = center ?? Cartesian3.ZERO;\n\n  stride = stride ?? 3;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"stride\", stride, 3);\n  //>>includeEnd('debug');\n\n  const currentPos = fromPointsCurrentPos;\n  currentPos.x = positions[0] + center.x;\n  currentPos.y = positions[1] + center.y;\n  currentPos.z = positions[2] + center.z;\n\n  const xMin = Cartesian3.clone(currentPos, fromPointsXMin);\n  const yMin = Cartesian3.clone(currentPos, fromPointsYMin);\n  const zMin = Cartesian3.clone(currentPos, fromPointsZMin);\n\n  const xMax = Cartesian3.clone(currentPos, fromPointsXMax);\n  const yMax = Cartesian3.clone(currentPos, fromPointsYMax);\n  const zMax = Cartesian3.clone(currentPos, fromPointsZMax);\n\n  const numElements = positions.length;\n  let i;\n  for (i = 0; i < numElements; i += stride) {\n    const x = positions[i] + center.x;\n    const y = positions[i + 1] + center.y;\n    const z = positions[i + 2] + center.z;\n\n    currentPos.x = x;\n    currentPos.y = y;\n    currentPos.z = z;\n\n    // Store points containing the the smallest and largest components\n    if (x < xMin.x) {\n      Cartesian3.clone(currentPos, xMin);\n    }\n\n    if (x > xMax.x) {\n      Cartesian3.clone(currentPos, xMax);\n    }\n\n    if (y < yMin.y) {\n      Cartesian3.clone(currentPos, yMin);\n    }\n\n    if (y > yMax.y) {\n      Cartesian3.clone(currentPos, yMax);\n    }\n\n    if (z < zMin.z) {\n      Cartesian3.clone(currentPos, zMin);\n    }\n\n    if (z > zMax.z) {\n      Cartesian3.clone(currentPos, zMax);\n    }\n  }\n\n  // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n  const xSpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(xMax, xMin, fromPointsScratch),\n  );\n  const ySpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(yMax, yMin, fromPointsScratch),\n  );\n  const zSpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(zMax, zMin, fromPointsScratch),\n  );\n\n  // Set the diameter endpoints to the largest span.\n  let diameter1 = xMin;\n  let diameter2 = xMax;\n  let maxSpan = xSpan;\n  if (ySpan > maxSpan) {\n    maxSpan = ySpan;\n    diameter1 = yMin;\n    diameter2 = yMax;\n  }\n  if (zSpan > maxSpan) {\n    maxSpan = zSpan;\n    diameter1 = zMin;\n    diameter2 = zMax;\n  }\n\n  // Calculate the center of the initial sphere found by Ritter's algorithm\n  const ritterCenter = fromPointsRitterCenter;\n  ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n  ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n  ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n  // Calculate the radius of the initial sphere found by Ritter's algorithm\n  let radiusSquared = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch),\n  );\n  let ritterRadius = Math.sqrt(radiusSquared);\n\n  // Find the center of the sphere found using the Naive method.\n  const minBoxPt = fromPointsMinBoxPt;\n  minBoxPt.x = xMin.x;\n  minBoxPt.y = yMin.y;\n  minBoxPt.z = zMin.z;\n\n  const maxBoxPt = fromPointsMaxBoxPt;\n  maxBoxPt.x = xMax.x;\n  maxBoxPt.y = yMax.y;\n  maxBoxPt.z = zMax.z;\n\n  const naiveCenter = Cartesian3.midpoint(\n    minBoxPt,\n    maxBoxPt,\n    fromPointsNaiveCenterScratch,\n  );\n\n  // Begin 2nd pass to find naive radius and modify the ritter sphere.\n  let naiveRadius = 0;\n  for (i = 0; i < numElements; i += stride) {\n    currentPos.x = positions[i] + center.x;\n    currentPos.y = positions[i + 1] + center.y;\n    currentPos.z = positions[i + 2] + center.z;\n\n    // Find the furthest point from the naive center to calculate the naive radius.\n    const r = Cartesian3.magnitude(\n      Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch),\n    );\n    if (r > naiveRadius) {\n      naiveRadius = r;\n    }\n\n    // Make adjustments to the Ritter Sphere to include all points.\n    const oldCenterToPointSquared = Cartesian3.magnitudeSquared(\n      Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch),\n    );\n    if (oldCenterToPointSquared > radiusSquared) {\n      const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n      // Calculate new radius to include the point that lies outside\n      ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n      radiusSquared = ritterRadius * ritterRadius;\n      // Calculate center of new Ritter sphere\n      const oldToNew = oldCenterToPoint - ritterRadius;\n      ritterCenter.x =\n        (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\n        oldCenterToPoint;\n      ritterCenter.y =\n        (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\n        oldCenterToPoint;\n      ritterCenter.z =\n        (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\n        oldCenterToPoint;\n    }\n  }\n\n  if (ritterRadius < naiveRadius) {\n    Cartesian3.clone(ritterCenter, result.center);\n    result.radius = ritterRadius;\n  } else {\n    Cartesian3.clone(naiveCenter, result.center);\n    result.radius = naiveRadius;\n  }\n\n  return result;\n};\n\n/**\n * Computes a tight-fitting bounding sphere enclosing a list of EncodedCartesian3s, where the points are\n * stored in parallel flat arrays in X, Y, Z, order.  The bounding sphere is computed by running two\n * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to\n * ensure a tight fit.\n *\n * @param {number[]} [positionsHigh] An array of high bits of the encoded cartesians that the bounding sphere will enclose.  Each point\n *        is formed from three elements in the array in the order X, Y, Z.\n * @param {number[]} [positionsLow] An array of low bits of the encoded cartesians that the bounding sphere will enclose.  Each point\n *        is formed from three elements in the array in the order X, Y, Z.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n *\n * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article}\n */\nBoundingSphere.fromEncodedCartesianVertices = function (\n  positionsHigh,\n  positionsLow,\n  result,\n) {\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  if (\n    !defined(positionsHigh) ||\n    !defined(positionsLow) ||\n    positionsHigh.length !== positionsLow.length ||\n    positionsHigh.length === 0\n  ) {\n    result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n    result.radius = 0.0;\n    return result;\n  }\n\n  const currentPos = fromPointsCurrentPos;\n  currentPos.x = positionsHigh[0] + positionsLow[0];\n  currentPos.y = positionsHigh[1] + positionsLow[1];\n  currentPos.z = positionsHigh[2] + positionsLow[2];\n\n  const xMin = Cartesian3.clone(currentPos, fromPointsXMin);\n  const yMin = Cartesian3.clone(currentPos, fromPointsYMin);\n  const zMin = Cartesian3.clone(currentPos, fromPointsZMin);\n\n  const xMax = Cartesian3.clone(currentPos, fromPointsXMax);\n  const yMax = Cartesian3.clone(currentPos, fromPointsYMax);\n  const zMax = Cartesian3.clone(currentPos, fromPointsZMax);\n\n  const numElements = positionsHigh.length;\n  let i;\n  for (i = 0; i < numElements; i += 3) {\n    const x = positionsHigh[i] + positionsLow[i];\n    const y = positionsHigh[i + 1] + positionsLow[i + 1];\n    const z = positionsHigh[i + 2] + positionsLow[i + 2];\n\n    currentPos.x = x;\n    currentPos.y = y;\n    currentPos.z = z;\n\n    // Store points containing the the smallest and largest components\n    if (x < xMin.x) {\n      Cartesian3.clone(currentPos, xMin);\n    }\n\n    if (x > xMax.x) {\n      Cartesian3.clone(currentPos, xMax);\n    }\n\n    if (y < yMin.y) {\n      Cartesian3.clone(currentPos, yMin);\n    }\n\n    if (y > yMax.y) {\n      Cartesian3.clone(currentPos, yMax);\n    }\n\n    if (z < zMin.z) {\n      Cartesian3.clone(currentPos, zMin);\n    }\n\n    if (z > zMax.z) {\n      Cartesian3.clone(currentPos, zMax);\n    }\n  }\n\n  // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\n  const xSpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(xMax, xMin, fromPointsScratch),\n  );\n  const ySpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(yMax, yMin, fromPointsScratch),\n  );\n  const zSpan = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(zMax, zMin, fromPointsScratch),\n  );\n\n  // Set the diameter endpoints to the largest span.\n  let diameter1 = xMin;\n  let diameter2 = xMax;\n  let maxSpan = xSpan;\n  if (ySpan > maxSpan) {\n    maxSpan = ySpan;\n    diameter1 = yMin;\n    diameter2 = yMax;\n  }\n  if (zSpan > maxSpan) {\n    maxSpan = zSpan;\n    diameter1 = zMin;\n    diameter2 = zMax;\n  }\n\n  // Calculate the center of the initial sphere found by Ritter's algorithm\n  const ritterCenter = fromPointsRitterCenter;\n  ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\n  ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\n  ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\n\n  // Calculate the radius of the initial sphere found by Ritter's algorithm\n  let radiusSquared = Cartesian3.magnitudeSquared(\n    Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch),\n  );\n  let ritterRadius = Math.sqrt(radiusSquared);\n\n  // Find the center of the sphere found using the Naive method.\n  const minBoxPt = fromPointsMinBoxPt;\n  minBoxPt.x = xMin.x;\n  minBoxPt.y = yMin.y;\n  minBoxPt.z = zMin.z;\n\n  const maxBoxPt = fromPointsMaxBoxPt;\n  maxBoxPt.x = xMax.x;\n  maxBoxPt.y = yMax.y;\n  maxBoxPt.z = zMax.z;\n\n  const naiveCenter = Cartesian3.midpoint(\n    minBoxPt,\n    maxBoxPt,\n    fromPointsNaiveCenterScratch,\n  );\n\n  // Begin 2nd pass to find naive radius and modify the ritter sphere.\n  let naiveRadius = 0;\n  for (i = 0; i < numElements; i += 3) {\n    currentPos.x = positionsHigh[i] + positionsLow[i];\n    currentPos.y = positionsHigh[i + 1] + positionsLow[i + 1];\n    currentPos.z = positionsHigh[i + 2] + positionsLow[i + 2];\n\n    // Find the furthest point from the naive center to calculate the naive radius.\n    const r = Cartesian3.magnitude(\n      Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch),\n    );\n    if (r > naiveRadius) {\n      naiveRadius = r;\n    }\n\n    // Make adjustments to the Ritter Sphere to include all points.\n    const oldCenterToPointSquared = Cartesian3.magnitudeSquared(\n      Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch),\n    );\n    if (oldCenterToPointSquared > radiusSquared) {\n      const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\n      // Calculate new radius to include the point that lies outside\n      ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\n      radiusSquared = ritterRadius * ritterRadius;\n      // Calculate center of new Ritter sphere\n      const oldToNew = oldCenterToPoint - ritterRadius;\n      ritterCenter.x =\n        (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\n        oldCenterToPoint;\n      ritterCenter.y =\n        (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\n        oldCenterToPoint;\n      ritterCenter.z =\n        (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\n        oldCenterToPoint;\n    }\n  }\n\n  if (ritterRadius < naiveRadius) {\n    Cartesian3.clone(ritterCenter, result.center);\n    result.radius = ritterRadius;\n  } else {\n    Cartesian3.clone(naiveCenter, result.center);\n    result.radius = naiveRadius;\n  }\n\n  return result;\n};\n\n/**\n * Computes a bounding sphere from the corner points of an axis-aligned bounding box.  The sphere\n * tightly and fully encompasses the box.\n *\n * @param {Cartesian3} [corner] The minimum height over the rectangle.\n * @param {Cartesian3} [oppositeCorner] The maximum height over the rectangle.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n *\n * @example\n * // Create a bounding sphere around the unit cube\n * const sphere = Cesium.BoundingSphere.fromCornerPoints(new Cesium.Cartesian3(-0.5, -0.5, -0.5), new Cesium.Cartesian3(0.5, 0.5, 0.5));\n */\nBoundingSphere.fromCornerPoints = function (corner, oppositeCorner, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"corner\", corner);\n  Check.typeOf.object(\"oppositeCorner\", oppositeCorner);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  const center = Cartesian3.midpoint(corner, oppositeCorner, result.center);\n  result.radius = Cartesian3.distance(center, oppositeCorner);\n  return result;\n};\n\n/**\n * Creates a bounding sphere encompassing an ellipsoid.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid around which to create a bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n *\n * @example\n * const boundingSphere = Cesium.BoundingSphere.fromEllipsoid(ellipsoid);\n */\nBoundingSphere.fromEllipsoid = function (ellipsoid, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"ellipsoid\", ellipsoid);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  Cartesian3.clone(Cartesian3.ZERO, result.center);\n  result.radius = ellipsoid.maximumRadius;\n  return result;\n};\n\nconst fromBoundingSpheresScratch = new Cartesian3();\n\n/**\n * Computes a tight-fitting bounding sphere enclosing the provided array of bounding spheres.\n *\n * @param {BoundingSphere[]} [boundingSpheres] The array of bounding spheres.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromBoundingSpheres = function (boundingSpheres, result) {\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  if (!defined(boundingSpheres) || boundingSpheres.length === 0) {\n    result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\n    result.radius = 0.0;\n    return result;\n  }\n\n  const length = boundingSpheres.length;\n  if (length === 1) {\n    return BoundingSphere.clone(boundingSpheres[0], result);\n  }\n\n  if (length === 2) {\n    return BoundingSphere.union(boundingSpheres[0], boundingSpheres[1], result);\n  }\n\n  const positions = [];\n  let i;\n  for (i = 0; i < length; i++) {\n    positions.push(boundingSpheres[i].center);\n  }\n\n  result = BoundingSphere.fromPoints(positions, result);\n\n  const center = result.center;\n  let radius = result.radius;\n  for (i = 0; i < length; i++) {\n    const tmp = boundingSpheres[i];\n    radius = Math.max(\n      radius,\n      Cartesian3.distance(center, tmp.center, fromBoundingSpheresScratch) +\n        tmp.radius,\n    );\n  }\n  result.radius = radius;\n\n  return result;\n};\n\nconst fromOrientedBoundingBoxScratchU = new Cartesian3();\nconst fromOrientedBoundingBoxScratchV = new Cartesian3();\nconst fromOrientedBoundingBoxScratchW = new Cartesian3();\n\n/**\n * Computes a tight-fitting bounding sphere enclosing the provided oriented bounding box.\n *\n * @param {OrientedBoundingBox} orientedBoundingBox The oriented bounding box.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromOrientedBoundingBox = function (\n  orientedBoundingBox,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"orientedBoundingBox\", orientedBoundingBox);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  const halfAxes = orientedBoundingBox.halfAxes;\n  const u = Matrix3.getColumn(halfAxes, 0, fromOrientedBoundingBoxScratchU);\n  const v = Matrix3.getColumn(halfAxes, 1, fromOrientedBoundingBoxScratchV);\n  const w = Matrix3.getColumn(halfAxes, 2, fromOrientedBoundingBoxScratchW);\n\n  Cartesian3.add(u, v, u);\n  Cartesian3.add(u, w, u);\n\n  result.center = Cartesian3.clone(orientedBoundingBox.center, result.center);\n  result.radius = Cartesian3.magnitude(u);\n\n  return result;\n};\n\nconst scratchFromTransformationCenter = new Cartesian3();\nconst scratchFromTransformationScale = new Cartesian3();\n\n/**\n * Computes a tight-fitting bounding sphere enclosing the provided affine transformation.\n *\n * @param {Matrix4} transformation The affine transformation.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.fromTransformation = function (transformation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"transformation\", transformation);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  const center = Matrix4.getTranslation(\n    transformation,\n    scratchFromTransformationCenter,\n  );\n  const scale = Matrix4.getScale(\n    transformation,\n    scratchFromTransformationScale,\n  );\n  const radius = 0.5 * Cartesian3.magnitude(scale);\n  result.center = Cartesian3.clone(center, result.center);\n  result.radius = radius;\n\n  return result;\n};\n\n/**\n * Duplicates a BoundingSphere instance.\n *\n * @param {BoundingSphere} sphere The bounding sphere to duplicate.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. (Returns undefined if sphere is undefined)\n */\nBoundingSphere.clone = function (sphere, result) {\n  if (!defined(sphere)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new BoundingSphere(sphere.center, sphere.radius);\n  }\n\n  result.center = Cartesian3.clone(sphere.center, result.center);\n  result.radius = sphere.radius;\n  return result;\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nBoundingSphere.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoundingSphere} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nBoundingSphere.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const center = value.center;\n  array[startingIndex++] = center.x;\n  array[startingIndex++] = center.y;\n  array[startingIndex++] = center.z;\n  array[startingIndex] = value.radius;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoundingSphere} [result] The object into which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\n */\nBoundingSphere.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  const center = result.center;\n  center.x = array[startingIndex++];\n  center.y = array[startingIndex++];\n  center.z = array[startingIndex++];\n  result.radius = array[startingIndex];\n  return result;\n};\n\nconst unionScratch = new Cartesian3();\nconst unionScratchCenter = new Cartesian3();\n/**\n * Computes a bounding sphere that contains both the left and right bounding spheres.\n *\n * @param {BoundingSphere} left A sphere to enclose in a bounding sphere.\n * @param {BoundingSphere} right A sphere to enclose in a bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.union = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  const leftCenter = left.center;\n  const leftRadius = left.radius;\n  const rightCenter = right.center;\n  const rightRadius = right.radius;\n\n  const toRightCenter = Cartesian3.subtract(\n    rightCenter,\n    leftCenter,\n    unionScratch,\n  );\n  const centerSeparation = Cartesian3.magnitude(toRightCenter);\n\n  if (leftRadius >= centerSeparation + rightRadius) {\n    // Left sphere wins.\n    left.clone(result);\n    return result;\n  }\n\n  if (rightRadius >= centerSeparation + leftRadius) {\n    // Right sphere wins.\n    right.clone(result);\n    return result;\n  }\n\n  // There are two tangent points, one on far side of each sphere.\n  const halfDistanceBetweenTangentPoints =\n    (leftRadius + centerSeparation + rightRadius) * 0.5;\n\n  // Compute the center point halfway between the two tangent points.\n  const center = Cartesian3.multiplyByScalar(\n    toRightCenter,\n    (-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation,\n    unionScratchCenter,\n  );\n  Cartesian3.add(center, leftCenter, center);\n  Cartesian3.clone(center, result.center);\n  result.radius = halfDistanceBetweenTangentPoints;\n\n  return result;\n};\n\nconst expandScratch = new Cartesian3();\n/**\n * Computes a bounding sphere by enlarging the provided sphere to contain the provided point.\n *\n * @param {BoundingSphere} sphere A sphere to expand.\n * @param {Cartesian3} point A point to enclose in a bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.expand = function (sphere, point, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  Check.typeOf.object(\"point\", point);\n  //>>includeEnd('debug');\n\n  result = BoundingSphere.clone(sphere, result);\n\n  const radius = Cartesian3.magnitude(\n    Cartesian3.subtract(point, result.center, expandScratch),\n  );\n  if (radius > result.radius) {\n    result.radius = radius;\n  }\n\n  return result;\n};\n\n/**\n * Determines which side of a plane a sphere is located.\n *\n * @param {BoundingSphere} sphere The bounding sphere to test.\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\n *                      intersects the plane.\n */\nBoundingSphere.intersectPlane = function (sphere, plane) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  Check.typeOf.object(\"plane\", plane);\n  //>>includeEnd('debug');\n\n  const center = sphere.center;\n  const radius = sphere.radius;\n  const normal = plane.normal;\n  const distanceToPlane = Cartesian3.dot(normal, center) + plane.distance;\n\n  if (distanceToPlane < -radius) {\n    // The center point is negative side of the plane normal\n    return Intersect.OUTSIDE;\n  } else if (distanceToPlane < radius) {\n    // The center point is positive side of the plane, but radius extends beyond it; partial overlap\n    return Intersect.INTERSECTING;\n  }\n  return Intersect.INSIDE;\n};\n\n/**\n * Applies a 4x4 affine transformation matrix to a bounding sphere.\n *\n * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.\n * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.transform = function (sphere, transform, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  Check.typeOf.object(\"transform\", transform);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  result.center = Matrix4.multiplyByPoint(\n    transform,\n    sphere.center,\n    result.center,\n  );\n  result.radius = Matrix4.getMaximumScale(transform) * sphere.radius;\n\n  return result;\n};\n\nconst distanceSquaredToScratch = new Cartesian3();\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n *\n * @param {BoundingSphere} sphere The sphere.\n * @param {Cartesian3} cartesian The point\n * @returns {number} The distance squared from the bounding sphere to the point. Returns 0 if the point is inside the sphere.\n *\n * @example\n * // Sort bounding spheres from back to front\n * spheres.sort(function(a, b) {\n *     return Cesium.BoundingSphere.distanceSquaredTo(b, camera.positionWC) - Cesium.BoundingSphere.distanceSquaredTo(a, camera.positionWC);\n * });\n */\nBoundingSphere.distanceSquaredTo = function (sphere, cartesian) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  const diff = Cartesian3.subtract(\n    sphere.center,\n    cartesian,\n    distanceSquaredToScratch,\n  );\n\n  const distance = Cartesian3.magnitude(diff) - sphere.radius;\n  if (distance <= 0.0) {\n    return 0.0;\n  }\n\n  return distance * distance;\n};\n\n/**\n * Applies a 4x4 affine transformation matrix to a bounding sphere where there is no scale\n * The transformation matrix is not verified to have a uniform scale of 1.\n * This method is faster than computing the general bounding sphere transform using {@link BoundingSphere.transform}.\n *\n * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.\n * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n *\n * @example\n * const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid);\n * const boundingSphere = new Cesium.BoundingSphere();\n * const newBoundingSphere = Cesium.BoundingSphere.transformWithoutScale(boundingSphere, modelMatrix);\n */\nBoundingSphere.transformWithoutScale = function (sphere, transform, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  Check.typeOf.object(\"transform\", transform);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new BoundingSphere();\n  }\n\n  result.center = Matrix4.multiplyByPoint(\n    transform,\n    sphere.center,\n    result.center,\n  );\n  result.radius = sphere.radius;\n\n  return result;\n};\n\nconst scratchCartesian3 = new Cartesian3();\n/**\n * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction\n * plus/minus the radius of the bounding sphere.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding sphere.\n *\n * @param {BoundingSphere} sphere The bounding sphere to calculate the distance to.\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction.\n */\nBoundingSphere.computePlaneDistances = function (\n  sphere,\n  position,\n  direction,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  Check.typeOf.object(\"position\", position);\n  Check.typeOf.object(\"direction\", direction);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Interval();\n  }\n\n  const toCenter = Cartesian3.subtract(\n    sphere.center,\n    position,\n    scratchCartesian3,\n  );\n  const mag = Cartesian3.dot(direction, toCenter);\n\n  result.start = mag - sphere.radius;\n  result.stop = mag + sphere.radius;\n  return result;\n};\n\nconst projectTo2DNormalScratch = new Cartesian3();\nconst projectTo2DEastScratch = new Cartesian3();\nconst projectTo2DNorthScratch = new Cartesian3();\nconst projectTo2DWestScratch = new Cartesian3();\nconst projectTo2DSouthScratch = new Cartesian3();\nconst projectTo2DCartographicScratch = new Cartographic();\nconst projectTo2DPositionsScratch = new Array(8);\nfor (let n = 0; n < 8; ++n) {\n  projectTo2DPositionsScratch[n] = new Cartesian3();\n}\n\nconst projectTo2DProjection = new GeographicProjection();\n/**\n * Creates a bounding sphere in 2D from a bounding sphere in 3D world coordinates.\n *\n * @param {BoundingSphere} sphere The bounding sphere to transform to 2D.\n * @param {object} [projection=GeographicProjection] The projection to 2D.\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.projectTo2D = function (sphere, projection, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  //>>includeEnd('debug');\n\n  projectTo2DProjection._ellipsoid = Ellipsoid.default;\n  projection = projection ?? projectTo2DProjection;\n\n  const ellipsoid = projection.ellipsoid;\n  let center = sphere.center;\n  const radius = sphere.radius;\n\n  let normal;\n  if (Cartesian3.equals(center, Cartesian3.ZERO)) {\n    // Bounding sphere is at the center. The geodetic surface normal is not\n    // defined here so pick the x-axis as a fallback.\n    normal = Cartesian3.clone(Cartesian3.UNIT_X, projectTo2DNormalScratch);\n  } else {\n    normal = ellipsoid.geodeticSurfaceNormal(center, projectTo2DNormalScratch);\n  }\n  const east = Cartesian3.cross(\n    Cartesian3.UNIT_Z,\n    normal,\n    projectTo2DEastScratch,\n  );\n  Cartesian3.normalize(east, east);\n  const north = Cartesian3.cross(normal, east, projectTo2DNorthScratch);\n  Cartesian3.normalize(north, north);\n\n  Cartesian3.multiplyByScalar(normal, radius, normal);\n  Cartesian3.multiplyByScalar(north, radius, north);\n  Cartesian3.multiplyByScalar(east, radius, east);\n\n  const south = Cartesian3.negate(north, projectTo2DSouthScratch);\n  const west = Cartesian3.negate(east, projectTo2DWestScratch);\n\n  const positions = projectTo2DPositionsScratch;\n\n  // top NE corner\n  let corner = positions[0];\n  Cartesian3.add(normal, north, corner);\n  Cartesian3.add(corner, east, corner);\n\n  // top NW corner\n  corner = positions[1];\n  Cartesian3.add(normal, north, corner);\n  Cartesian3.add(corner, west, corner);\n\n  // top SW corner\n  corner = positions[2];\n  Cartesian3.add(normal, south, corner);\n  Cartesian3.add(corner, west, corner);\n\n  // top SE corner\n  corner = positions[3];\n  Cartesian3.add(normal, south, corner);\n  Cartesian3.add(corner, east, corner);\n\n  Cartesian3.negate(normal, normal);\n\n  // bottom NE corner\n  corner = positions[4];\n  Cartesian3.add(normal, north, corner);\n  Cartesian3.add(corner, east, corner);\n\n  // bottom NW corner\n  corner = positions[5];\n  Cartesian3.add(normal, north, corner);\n  Cartesian3.add(corner, west, corner);\n\n  // bottom SW corner\n  corner = positions[6];\n  Cartesian3.add(normal, south, corner);\n  Cartesian3.add(corner, west, corner);\n\n  // bottom SE corner\n  corner = positions[7];\n  Cartesian3.add(normal, south, corner);\n  Cartesian3.add(corner, east, corner);\n\n  const length = positions.length;\n  for (let i = 0; i < length; ++i) {\n    const position = positions[i];\n    Cartesian3.add(center, position, position);\n    const cartographic = ellipsoid.cartesianToCartographic(\n      position,\n      projectTo2DCartographicScratch,\n    );\n    projection.project(cartographic, position);\n  }\n\n  result = BoundingSphere.fromPoints(positions, result);\n\n  // swizzle center components\n  center = result.center;\n  const x = center.x;\n  const y = center.y;\n  const z = center.z;\n  center.x = z;\n  center.y = x;\n  center.z = y;\n\n  return result;\n};\n\n/**\n * Determines whether or not a sphere is hidden from view by the occluder.\n *\n * @param {BoundingSphere} sphere The bounding sphere surrounding the occluded object.\n * @param {Occluder} occluder The occluder.\n * @returns {boolean} <code>true</code> if the sphere is not visible; otherwise <code>false</code>.\n */\nBoundingSphere.isOccluded = function (sphere, occluder) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"sphere\", sphere);\n  Check.typeOf.object(\"occluder\", occluder);\n  //>>includeEnd('debug');\n  return !occluder.isBoundingSphereVisible(sphere);\n};\n\n/**\n * Compares the provided BoundingSphere componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingSphere} [left] The first BoundingSphere.\n * @param {BoundingSphere} [right] The second BoundingSphere.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nBoundingSphere.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Cartesian3.equals(left.center, right.center) &&\n      left.radius === right.radius)\n  );\n};\n\n/**\n * Determines which side of a plane the sphere is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\n *                      intersects the plane.\n */\nBoundingSphere.prototype.intersectPlane = function (plane) {\n  return BoundingSphere.intersectPlane(this, plane);\n};\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding sphere to a point.\n *\n * @param {Cartesian3} cartesian The point\n * @returns {number} The estimated distance squared from the bounding sphere to the point.\n *\n * @example\n * // Sort bounding spheres from back to front\n * spheres.sort(function(a, b) {\n *     return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);\n * });\n */\nBoundingSphere.prototype.distanceSquaredTo = function (cartesian) {\n  return BoundingSphere.distanceSquaredTo(this, cartesian);\n};\n\n/**\n * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction\n * plus/minus the radius of the bounding sphere.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding sphere.\n *\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction.\n */\nBoundingSphere.prototype.computePlaneDistances = function (\n  position,\n  direction,\n  result,\n) {\n  return BoundingSphere.computePlaneDistances(\n    this,\n    position,\n    direction,\n    result,\n  );\n};\n\n/**\n * Determines whether or not a sphere is hidden from view by the occluder.\n *\n * @param {Occluder} occluder The occluder.\n * @returns {boolean} <code>true</code> if the sphere is not visible; otherwise <code>false</code>.\n */\nBoundingSphere.prototype.isOccluded = function (occluder) {\n  return BoundingSphere.isOccluded(this, occluder);\n};\n\n/**\n * Compares this BoundingSphere against the provided BoundingSphere componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {BoundingSphere} [right] The right hand side BoundingSphere.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nBoundingSphere.prototype.equals = function (right) {\n  return BoundingSphere.equals(this, right);\n};\n\n/**\n * Duplicates this BoundingSphere instance.\n *\n * @param {BoundingSphere} [result] The object onto which to store the result.\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\n */\nBoundingSphere.prototype.clone = function (result) {\n  return BoundingSphere.clone(this, result);\n};\n\n/**\n * Computes the radius of the BoundingSphere.\n * @returns {number} The radius of the BoundingSphere.\n */\nBoundingSphere.prototype.volume = function () {\n  const radius = this.radius;\n  return volumeConstant * radius * radius * radius;\n};\nexport default BoundingSphere;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst diffScratch = new Cartesian3();\n\n/**\n * Describes a cube centered at the origin.\n *\n * @alias BoxGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box.\n * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @see BoxGeometry.fromDimensions\n * @see BoxGeometry.createGeometry\n * @see Packable\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=box|Cesium Sandcastle Box Demo}\n *\n * @example\n * const box = new Cesium.BoxGeometry({\n *   vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n *   maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0),\n *   minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0)\n * });\n * const geometry = Cesium.BoxGeometry.createGeometry(box);\n */\nfunction BoxGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const min = options.minimum;\n  const max = options.maximum;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"min\", min);\n  Check.typeOf.object(\"max\", max);\n  if (\n    defined(options.offsetAttribute) &&\n    options.offsetAttribute === GeometryOffsetAttribute.TOP\n  ) {\n    throw new DeveloperError(\n      \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n\n  this._minimum = Cartesian3.clone(min);\n  this._maximum = Cartesian3.clone(max);\n  this._vertexFormat = vertexFormat;\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createBoxGeometry\";\n}\n\n/**\n * Creates a cube centered at the origin given its dimensions.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the <code>Cartesian3</code>, respectively.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @returns {BoxGeometry}\n *\n * @exception {DeveloperError} All dimensions components must be greater than or equal to zero.\n *\n *\n * @example\n * const box = Cesium.BoxGeometry.fromDimensions({\n *   vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n *   dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0)\n * });\n * const geometry = Cesium.BoxGeometry.createGeometry(box);\n *\n * @see BoxGeometry.createGeometry\n */\nBoxGeometry.fromDimensions = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const dimensions = options.dimensions;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"dimensions\", dimensions);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0);\n  //>>includeEnd('debug');\n\n  const corner = Cartesian3.multiplyByScalar(dimensions, 0.5, new Cartesian3());\n\n  return new BoxGeometry({\n    minimum: Cartesian3.negate(corner, new Cartesian3()),\n    maximum: corner,\n    vertexFormat: options.vertexFormat,\n    offsetAttribute: options.offsetAttribute,\n  });\n};\n\n/**\n * Creates a cube from the dimensions of an AxisAlignedBoundingBox.\n *\n * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox.\n * @returns {BoxGeometry}\n *\n *\n *\n * @example\n * const aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([\n *      -72.0, 40.0,\n *      -70.0, 35.0,\n *      -75.0, 30.0,\n *      -70.0, 30.0,\n *      -68.0, 40.0\n * ]));\n * const box = Cesium.BoxGeometry.fromAxisAlignedBoundingBox(aabb);\n *\n * @see BoxGeometry.createGeometry\n */\nBoxGeometry.fromAxisAlignedBoundingBox = function (boundingBox) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"boundingBox\", boundingBox);\n  //>>includeEnd('debug');\n\n  return new BoxGeometry({\n    minimum: boundingBox.minimum,\n    maximum: boundingBox.maximum,\n  });\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nBoxGeometry.packedLength =\n  2 * Cartesian3.packedLength + VertexFormat.packedLength + 1;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoxGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nBoxGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value._minimum, array, startingIndex);\n  Cartesian3.pack(\n    value._maximum,\n    array,\n    startingIndex + Cartesian3.packedLength,\n  );\n  VertexFormat.pack(\n    value._vertexFormat,\n    array,\n    startingIndex + 2 * Cartesian3.packedLength,\n  );\n  array[\n    startingIndex + 2 * Cartesian3.packedLength + VertexFormat.packedLength\n  ] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchMin = new Cartesian3();\nconst scratchMax = new Cartesian3();\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  minimum: scratchMin,\n  maximum: scratchMax,\n  vertexFormat: scratchVertexFormat,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoxGeometry} [result] The object into which to store the result.\n * @returns {BoxGeometry} The modified result parameter or a new BoxGeometry instance if one was not provided.\n */\nBoxGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const min = Cartesian3.unpack(array, startingIndex, scratchMin);\n  const max = Cartesian3.unpack(\n    array,\n    startingIndex + Cartesian3.packedLength,\n    scratchMax,\n  );\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex + 2 * Cartesian3.packedLength,\n    scratchVertexFormat,\n  );\n  const offsetAttribute =\n    array[\n      startingIndex + 2 * Cartesian3.packedLength + VertexFormat.packedLength\n    ];\n\n  if (!defined(result)) {\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n    return new BoxGeometry(scratchOptions);\n  }\n\n  result._minimum = Cartesian3.clone(min, result._minimum);\n  result._maximum = Cartesian3.clone(max, result._maximum);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of a box, including its vertices, indices, and a bounding sphere.\n *\n * @param {BoxGeometry} boxGeometry A description of the box.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nBoxGeometry.createGeometry = function (boxGeometry) {\n  const min = boxGeometry._minimum;\n  const max = boxGeometry._maximum;\n  const vertexFormat = boxGeometry._vertexFormat;\n\n  if (Cartesian3.equals(min, max)) {\n    return;\n  }\n\n  const attributes = new GeometryAttributes();\n  let indices;\n  let positions;\n\n  if (\n    vertexFormat.position &&\n    (vertexFormat.st ||\n      vertexFormat.normal ||\n      vertexFormat.tangent ||\n      vertexFormat.bitangent)\n  ) {\n    if (vertexFormat.position) {\n      // 8 corner points.  Duplicated 3 times each for each incident edge/face.\n      positions = new Float64Array(6 * 4 * 3);\n\n      // +z face\n      positions[0] = min.x;\n      positions[1] = min.y;\n      positions[2] = max.z;\n      positions[3] = max.x;\n      positions[4] = min.y;\n      positions[5] = max.z;\n      positions[6] = max.x;\n      positions[7] = max.y;\n      positions[8] = max.z;\n      positions[9] = min.x;\n      positions[10] = max.y;\n      positions[11] = max.z;\n\n      // -z face\n      positions[12] = min.x;\n      positions[13] = min.y;\n      positions[14] = min.z;\n      positions[15] = max.x;\n      positions[16] = min.y;\n      positions[17] = min.z;\n      positions[18] = max.x;\n      positions[19] = max.y;\n      positions[20] = min.z;\n      positions[21] = min.x;\n      positions[22] = max.y;\n      positions[23] = min.z;\n\n      // +x face\n      positions[24] = max.x;\n      positions[25] = min.y;\n      positions[26] = min.z;\n      positions[27] = max.x;\n      positions[28] = max.y;\n      positions[29] = min.z;\n      positions[30] = max.x;\n      positions[31] = max.y;\n      positions[32] = max.z;\n      positions[33] = max.x;\n      positions[34] = min.y;\n      positions[35] = max.z;\n\n      // -x face\n      positions[36] = min.x;\n      positions[37] = min.y;\n      positions[38] = min.z;\n      positions[39] = min.x;\n      positions[40] = max.y;\n      positions[41] = min.z;\n      positions[42] = min.x;\n      positions[43] = max.y;\n      positions[44] = max.z;\n      positions[45] = min.x;\n      positions[46] = min.y;\n      positions[47] = max.z;\n\n      // +y face\n      positions[48] = min.x;\n      positions[49] = max.y;\n      positions[50] = min.z;\n      positions[51] = max.x;\n      positions[52] = max.y;\n      positions[53] = min.z;\n      positions[54] = max.x;\n      positions[55] = max.y;\n      positions[56] = max.z;\n      positions[57] = min.x;\n      positions[58] = max.y;\n      positions[59] = max.z;\n\n      // -y face\n      positions[60] = min.x;\n      positions[61] = min.y;\n      positions[62] = min.z;\n      positions[63] = max.x;\n      positions[64] = min.y;\n      positions[65] = min.z;\n      positions[66] = max.x;\n      positions[67] = min.y;\n      positions[68] = max.z;\n      positions[69] = min.x;\n      positions[70] = min.y;\n      positions[71] = max.z;\n\n      attributes.position = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.DOUBLE,\n        componentsPerAttribute: 3,\n        values: positions,\n      });\n    }\n\n    if (vertexFormat.normal) {\n      const normals = new Float32Array(6 * 4 * 3);\n\n      // +z face\n      normals[0] = 0.0;\n      normals[1] = 0.0;\n      normals[2] = 1.0;\n      normals[3] = 0.0;\n      normals[4] = 0.0;\n      normals[5] = 1.0;\n      normals[6] = 0.0;\n      normals[7] = 0.0;\n      normals[8] = 1.0;\n      normals[9] = 0.0;\n      normals[10] = 0.0;\n      normals[11] = 1.0;\n\n      // -z face\n      normals[12] = 0.0;\n      normals[13] = 0.0;\n      normals[14] = -1.0;\n      normals[15] = 0.0;\n      normals[16] = 0.0;\n      normals[17] = -1.0;\n      normals[18] = 0.0;\n      normals[19] = 0.0;\n      normals[20] = -1.0;\n      normals[21] = 0.0;\n      normals[22] = 0.0;\n      normals[23] = -1.0;\n\n      // +x face\n      normals[24] = 1.0;\n      normals[25] = 0.0;\n      normals[26] = 0.0;\n      normals[27] = 1.0;\n      normals[28] = 0.0;\n      normals[29] = 0.0;\n      normals[30] = 1.0;\n      normals[31] = 0.0;\n      normals[32] = 0.0;\n      normals[33] = 1.0;\n      normals[34] = 0.0;\n      normals[35] = 0.0;\n\n      // -x face\n      normals[36] = -1.0;\n      normals[37] = 0.0;\n      normals[38] = 0.0;\n      normals[39] = -1.0;\n      normals[40] = 0.0;\n      normals[41] = 0.0;\n      normals[42] = -1.0;\n      normals[43] = 0.0;\n      normals[44] = 0.0;\n      normals[45] = -1.0;\n      normals[46] = 0.0;\n      normals[47] = 0.0;\n\n      // +y face\n      normals[48] = 0.0;\n      normals[49] = 1.0;\n      normals[50] = 0.0;\n      normals[51] = 0.0;\n      normals[52] = 1.0;\n      normals[53] = 0.0;\n      normals[54] = 0.0;\n      normals[55] = 1.0;\n      normals[56] = 0.0;\n      normals[57] = 0.0;\n      normals[58] = 1.0;\n      normals[59] = 0.0;\n\n      // -y face\n      normals[60] = 0.0;\n      normals[61] = -1.0;\n      normals[62] = 0.0;\n      normals[63] = 0.0;\n      normals[64] = -1.0;\n      normals[65] = 0.0;\n      normals[66] = 0.0;\n      normals[67] = -1.0;\n      normals[68] = 0.0;\n      normals[69] = 0.0;\n      normals[70] = -1.0;\n      normals[71] = 0.0;\n\n      attributes.normal = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: normals,\n      });\n    }\n\n    if (vertexFormat.st) {\n      const texCoords = new Float32Array(6 * 4 * 2);\n\n      // +z face\n      texCoords[0] = 0.0;\n      texCoords[1] = 0.0;\n      texCoords[2] = 1.0;\n      texCoords[3] = 0.0;\n      texCoords[4] = 1.0;\n      texCoords[5] = 1.0;\n      texCoords[6] = 0.0;\n      texCoords[7] = 1.0;\n\n      // -z face\n      texCoords[8] = 1.0;\n      texCoords[9] = 0.0;\n      texCoords[10] = 0.0;\n      texCoords[11] = 0.0;\n      texCoords[12] = 0.0;\n      texCoords[13] = 1.0;\n      texCoords[14] = 1.0;\n      texCoords[15] = 1.0;\n\n      //+x face\n      texCoords[16] = 0.0;\n      texCoords[17] = 0.0;\n      texCoords[18] = 1.0;\n      texCoords[19] = 0.0;\n      texCoords[20] = 1.0;\n      texCoords[21] = 1.0;\n      texCoords[22] = 0.0;\n      texCoords[23] = 1.0;\n\n      // -x face\n      texCoords[24] = 1.0;\n      texCoords[25] = 0.0;\n      texCoords[26] = 0.0;\n      texCoords[27] = 0.0;\n      texCoords[28] = 0.0;\n      texCoords[29] = 1.0;\n      texCoords[30] = 1.0;\n      texCoords[31] = 1.0;\n\n      // +y face\n      texCoords[32] = 1.0;\n      texCoords[33] = 0.0;\n      texCoords[34] = 0.0;\n      texCoords[35] = 0.0;\n      texCoords[36] = 0.0;\n      texCoords[37] = 1.0;\n      texCoords[38] = 1.0;\n      texCoords[39] = 1.0;\n\n      // -y face\n      texCoords[40] = 0.0;\n      texCoords[41] = 0.0;\n      texCoords[42] = 1.0;\n      texCoords[43] = 0.0;\n      texCoords[44] = 1.0;\n      texCoords[45] = 1.0;\n      texCoords[46] = 0.0;\n      texCoords[47] = 1.0;\n\n      attributes.st = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 2,\n        values: texCoords,\n      });\n    }\n\n    if (vertexFormat.tangent) {\n      const tangents = new Float32Array(6 * 4 * 3);\n\n      // +z face\n      tangents[0] = 1.0;\n      tangents[1] = 0.0;\n      tangents[2] = 0.0;\n      tangents[3] = 1.0;\n      tangents[4] = 0.0;\n      tangents[5] = 0.0;\n      tangents[6] = 1.0;\n      tangents[7] = 0.0;\n      tangents[8] = 0.0;\n      tangents[9] = 1.0;\n      tangents[10] = 0.0;\n      tangents[11] = 0.0;\n\n      // -z face\n      tangents[12] = -1.0;\n      tangents[13] = 0.0;\n      tangents[14] = 0.0;\n      tangents[15] = -1.0;\n      tangents[16] = 0.0;\n      tangents[17] = 0.0;\n      tangents[18] = -1.0;\n      tangents[19] = 0.0;\n      tangents[20] = 0.0;\n      tangents[21] = -1.0;\n      tangents[22] = 0.0;\n      tangents[23] = 0.0;\n\n      // +x face\n      tangents[24] = 0.0;\n      tangents[25] = 1.0;\n      tangents[26] = 0.0;\n      tangents[27] = 0.0;\n      tangents[28] = 1.0;\n      tangents[29] = 0.0;\n      tangents[30] = 0.0;\n      tangents[31] = 1.0;\n      tangents[32] = 0.0;\n      tangents[33] = 0.0;\n      tangents[34] = 1.0;\n      tangents[35] = 0.0;\n\n      // -x face\n      tangents[36] = 0.0;\n      tangents[37] = -1.0;\n      tangents[38] = 0.0;\n      tangents[39] = 0.0;\n      tangents[40] = -1.0;\n      tangents[41] = 0.0;\n      tangents[42] = 0.0;\n      tangents[43] = -1.0;\n      tangents[44] = 0.0;\n      tangents[45] = 0.0;\n      tangents[46] = -1.0;\n      tangents[47] = 0.0;\n\n      // +y face\n      tangents[48] = -1.0;\n      tangents[49] = 0.0;\n      tangents[50] = 0.0;\n      tangents[51] = -1.0;\n      tangents[52] = 0.0;\n      tangents[53] = 0.0;\n      tangents[54] = -1.0;\n      tangents[55] = 0.0;\n      tangents[56] = 0.0;\n      tangents[57] = -1.0;\n      tangents[58] = 0.0;\n      tangents[59] = 0.0;\n\n      // -y face\n      tangents[60] = 1.0;\n      tangents[61] = 0.0;\n      tangents[62] = 0.0;\n      tangents[63] = 1.0;\n      tangents[64] = 0.0;\n      tangents[65] = 0.0;\n      tangents[66] = 1.0;\n      tangents[67] = 0.0;\n      tangents[68] = 0.0;\n      tangents[69] = 1.0;\n      tangents[70] = 0.0;\n      tangents[71] = 0.0;\n\n      attributes.tangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: tangents,\n      });\n    }\n\n    if (vertexFormat.bitangent) {\n      const bitangents = new Float32Array(6 * 4 * 3);\n\n      // +z face\n      bitangents[0] = 0.0;\n      bitangents[1] = 1.0;\n      bitangents[2] = 0.0;\n      bitangents[3] = 0.0;\n      bitangents[4] = 1.0;\n      bitangents[5] = 0.0;\n      bitangents[6] = 0.0;\n      bitangents[7] = 1.0;\n      bitangents[8] = 0.0;\n      bitangents[9] = 0.0;\n      bitangents[10] = 1.0;\n      bitangents[11] = 0.0;\n\n      // -z face\n      bitangents[12] = 0.0;\n      bitangents[13] = 1.0;\n      bitangents[14] = 0.0;\n      bitangents[15] = 0.0;\n      bitangents[16] = 1.0;\n      bitangents[17] = 0.0;\n      bitangents[18] = 0.0;\n      bitangents[19] = 1.0;\n      bitangents[20] = 0.0;\n      bitangents[21] = 0.0;\n      bitangents[22] = 1.0;\n      bitangents[23] = 0.0;\n\n      // +x face\n      bitangents[24] = 0.0;\n      bitangents[25] = 0.0;\n      bitangents[26] = 1.0;\n      bitangents[27] = 0.0;\n      bitangents[28] = 0.0;\n      bitangents[29] = 1.0;\n      bitangents[30] = 0.0;\n      bitangents[31] = 0.0;\n      bitangents[32] = 1.0;\n      bitangents[33] = 0.0;\n      bitangents[34] = 0.0;\n      bitangents[35] = 1.0;\n\n      // -x face\n      bitangents[36] = 0.0;\n      bitangents[37] = 0.0;\n      bitangents[38] = 1.0;\n      bitangents[39] = 0.0;\n      bitangents[40] = 0.0;\n      bitangents[41] = 1.0;\n      bitangents[42] = 0.0;\n      bitangents[43] = 0.0;\n      bitangents[44] = 1.0;\n      bitangents[45] = 0.0;\n      bitangents[46] = 0.0;\n      bitangents[47] = 1.0;\n\n      // +y face\n      bitangents[48] = 0.0;\n      bitangents[49] = 0.0;\n      bitangents[50] = 1.0;\n      bitangents[51] = 0.0;\n      bitangents[52] = 0.0;\n      bitangents[53] = 1.0;\n      bitangents[54] = 0.0;\n      bitangents[55] = 0.0;\n      bitangents[56] = 1.0;\n      bitangents[57] = 0.0;\n      bitangents[58] = 0.0;\n      bitangents[59] = 1.0;\n\n      // -y face\n      bitangents[60] = 0.0;\n      bitangents[61] = 0.0;\n      bitangents[62] = 1.0;\n      bitangents[63] = 0.0;\n      bitangents[64] = 0.0;\n      bitangents[65] = 1.0;\n      bitangents[66] = 0.0;\n      bitangents[67] = 0.0;\n      bitangents[68] = 1.0;\n      bitangents[69] = 0.0;\n      bitangents[70] = 0.0;\n      bitangents[71] = 1.0;\n\n      attributes.bitangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: bitangents,\n      });\n    }\n\n    // 12 triangles:  6 faces, 2 triangles each.\n    indices = new Uint16Array(6 * 2 * 3);\n\n    // +z face\n    indices[0] = 0;\n    indices[1] = 1;\n    indices[2] = 2;\n    indices[3] = 0;\n    indices[4] = 2;\n    indices[5] = 3;\n\n    // -z face\n    indices[6] = 4 + 2;\n    indices[7] = 4 + 1;\n    indices[8] = 4 + 0;\n    indices[9] = 4 + 3;\n    indices[10] = 4 + 2;\n    indices[11] = 4 + 0;\n\n    // +x face\n    indices[12] = 8 + 0;\n    indices[13] = 8 + 1;\n    indices[14] = 8 + 2;\n    indices[15] = 8 + 0;\n    indices[16] = 8 + 2;\n    indices[17] = 8 + 3;\n\n    // -x face\n    indices[18] = 12 + 2;\n    indices[19] = 12 + 1;\n    indices[20] = 12 + 0;\n    indices[21] = 12 + 3;\n    indices[22] = 12 + 2;\n    indices[23] = 12 + 0;\n\n    // +y face\n    indices[24] = 16 + 2;\n    indices[25] = 16 + 1;\n    indices[26] = 16 + 0;\n    indices[27] = 16 + 3;\n    indices[28] = 16 + 2;\n    indices[29] = 16 + 0;\n\n    // -y face\n    indices[30] = 20 + 0;\n    indices[31] = 20 + 1;\n    indices[32] = 20 + 2;\n    indices[33] = 20 + 0;\n    indices[34] = 20 + 2;\n    indices[35] = 20 + 3;\n  } else {\n    // Positions only - no need to duplicate corner points\n    positions = new Float64Array(8 * 3);\n\n    positions[0] = min.x;\n    positions[1] = min.y;\n    positions[2] = min.z;\n    positions[3] = max.x;\n    positions[4] = min.y;\n    positions[5] = min.z;\n    positions[6] = max.x;\n    positions[7] = max.y;\n    positions[8] = min.z;\n    positions[9] = min.x;\n    positions[10] = max.y;\n    positions[11] = min.z;\n    positions[12] = min.x;\n    positions[13] = min.y;\n    positions[14] = max.z;\n    positions[15] = max.x;\n    positions[16] = min.y;\n    positions[17] = max.z;\n    positions[18] = max.x;\n    positions[19] = max.y;\n    positions[20] = max.z;\n    positions[21] = min.x;\n    positions[22] = max.y;\n    positions[23] = max.z;\n\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    });\n\n    // 12 triangles:  6 faces, 2 triangles each.\n    indices = new Uint16Array(6 * 2 * 3);\n\n    // plane z = corner.Z\n    indices[0] = 4;\n    indices[1] = 5;\n    indices[2] = 6;\n    indices[3] = 4;\n    indices[4] = 6;\n    indices[5] = 7;\n\n    // plane z = -corner.Z\n    indices[6] = 1;\n    indices[7] = 0;\n    indices[8] = 3;\n    indices[9] = 1;\n    indices[10] = 3;\n    indices[11] = 2;\n\n    // plane x = corner.X\n    indices[12] = 1;\n    indices[13] = 6;\n    indices[14] = 5;\n    indices[15] = 1;\n    indices[16] = 2;\n    indices[17] = 6;\n\n    // plane y = corner.Y\n    indices[18] = 2;\n    indices[19] = 3;\n    indices[20] = 7;\n    indices[21] = 2;\n    indices[22] = 7;\n    indices[23] = 6;\n\n    // plane x = -corner.X\n    indices[24] = 3;\n    indices[25] = 0;\n    indices[26] = 4;\n    indices[27] = 3;\n    indices[28] = 4;\n    indices[29] = 7;\n\n    // plane y = -corner.Y\n    indices[30] = 0;\n    indices[31] = 1;\n    indices[32] = 5;\n    indices[33] = 0;\n    indices[34] = 5;\n    indices[35] = 4;\n  }\n\n  const diff = Cartesian3.subtract(max, min, diffScratch);\n  const radius = Cartesian3.magnitude(diff) * 0.5;\n\n  if (defined(boxGeometry._offsetAttribute)) {\n    const length = positions.length;\n    const offsetValue =\n      boxGeometry._offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n    const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: new BoundingSphere(Cartesian3.ZERO, radius),\n    offsetAttribute: boxGeometry._offsetAttribute,\n  });\n};\n\nlet unitBoxGeometry;\n\n/**\n * Returns the geometric representation of a unit box, including its vertices, indices, and a bounding sphere.\n * @returns {Geometry} The computed vertices and indices.\n *\n * @private\n */\nBoxGeometry.getUnitBox = function () {\n  if (!defined(unitBoxGeometry)) {\n    unitBoxGeometry = BoxGeometry.createGeometry(\n      BoxGeometry.fromDimensions({\n        dimensions: new Cartesian3(1.0, 1.0, 1.0),\n        vertexFormat: VertexFormat.POSITION_ONLY,\n      }),\n    );\n  }\n  return unitBoxGeometry;\n};\nexport default BoxGeometry;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nconst diffScratch = new Cartesian3();\n\n/**\n * A description of the outline of a cube centered at the origin.\n *\n * @alias BoxOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box.\n * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box.\n *\n * @see BoxOutlineGeometry.fromDimensions\n * @see BoxOutlineGeometry.createGeometry\n * @see Packable\n *\n * @example\n * const box = new Cesium.BoxOutlineGeometry({\n *   maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0),\n *   minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0)\n * });\n * const geometry = Cesium.BoxOutlineGeometry.createGeometry(box);\n */\nfunction BoxOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const min = options.minimum;\n  const max = options.maximum;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"min\", min);\n  Check.typeOf.object(\"max\", max);\n  if (\n    defined(options.offsetAttribute) &&\n    options.offsetAttribute === GeometryOffsetAttribute.TOP\n  ) {\n    throw new DeveloperError(\n      \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._min = Cartesian3.clone(min);\n  this._max = Cartesian3.clone(max);\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createBoxOutlineGeometry\";\n}\n\n/**\n * Creates an outline of a cube centered at the origin given its dimensions.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the <code>Cartesian3</code>, respectively.\n * @returns {BoxOutlineGeometry}\n *\n * @exception {DeveloperError} All dimensions components must be greater than or equal to zero.\n *\n *\n * @example\n * const box = Cesium.BoxOutlineGeometry.fromDimensions({\n *   dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0)\n * });\n * const geometry = Cesium.BoxOutlineGeometry.createGeometry(box);\n *\n * @see BoxOutlineGeometry.createGeometry\n */\nBoxOutlineGeometry.fromDimensions = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const dimensions = options.dimensions;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"dimensions\", dimensions);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0);\n  //>>includeEnd('debug');\n\n  const corner = Cartesian3.multiplyByScalar(dimensions, 0.5, new Cartesian3());\n\n  return new BoxOutlineGeometry({\n    minimum: Cartesian3.negate(corner, new Cartesian3()),\n    maximum: corner,\n    offsetAttribute: options.offsetAttribute,\n  });\n};\n\n/**\n * Creates an outline of a cube from the dimensions of an AxisAlignedBoundingBox.\n *\n * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox.\n * @returns {BoxOutlineGeometry}\n *\n *\n *\n * @example\n * const aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([\n *      -72.0, 40.0,\n *      -70.0, 35.0,\n *      -75.0, 30.0,\n *      -70.0, 30.0,\n *      -68.0, 40.0\n * ]));\n * const box = Cesium.BoxOutlineGeometry.fromAxisAlignedBoundingBox(aabb);\n *\n *  @see BoxOutlineGeometry.createGeometry\n */\nBoxOutlineGeometry.fromAxisAlignedBoundingBox = function (boundingBox) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"boundindBox\", boundingBox);\n  //>>includeEnd('debug');\n\n  return new BoxOutlineGeometry({\n    minimum: boundingBox.minimum,\n    maximum: boundingBox.maximum,\n  });\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nBoxOutlineGeometry.packedLength = 2 * Cartesian3.packedLength + 1;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {BoxOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nBoxOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value._min, array, startingIndex);\n  Cartesian3.pack(value._max, array, startingIndex + Cartesian3.packedLength);\n  array[startingIndex + Cartesian3.packedLength * 2] =\n    value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchMin = new Cartesian3();\nconst scratchMax = new Cartesian3();\nconst scratchOptions = {\n  minimum: scratchMin,\n  maximum: scratchMax,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {BoxOutlineGeometry} [result] The object into which to store the result.\n * @returns {BoxOutlineGeometry} The modified result parameter or a new BoxOutlineGeometry instance if one was not provided.\n */\nBoxOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const min = Cartesian3.unpack(array, startingIndex, scratchMin);\n  const max = Cartesian3.unpack(\n    array,\n    startingIndex + Cartesian3.packedLength,\n    scratchMax,\n  );\n  const offsetAttribute = array[startingIndex + Cartesian3.packedLength * 2];\n\n  if (!defined(result)) {\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n    return new BoxOutlineGeometry(scratchOptions);\n  }\n\n  result._min = Cartesian3.clone(min, result._min);\n  result._max = Cartesian3.clone(max, result._max);\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a box, including its vertices, indices, and a bounding sphere.\n *\n * @param {BoxOutlineGeometry} boxGeometry A description of the box outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nBoxOutlineGeometry.createGeometry = function (boxGeometry) {\n  const min = boxGeometry._min;\n  const max = boxGeometry._max;\n\n  if (Cartesian3.equals(min, max)) {\n    return;\n  }\n\n  const attributes = new GeometryAttributes();\n  const indices = new Uint16Array(12 * 2);\n  const positions = new Float64Array(8 * 3);\n\n  positions[0] = min.x;\n  positions[1] = min.y;\n  positions[2] = min.z;\n  positions[3] = max.x;\n  positions[4] = min.y;\n  positions[5] = min.z;\n  positions[6] = max.x;\n  positions[7] = max.y;\n  positions[8] = min.z;\n  positions[9] = min.x;\n  positions[10] = max.y;\n  positions[11] = min.z;\n\n  positions[12] = min.x;\n  positions[13] = min.y;\n  positions[14] = max.z;\n  positions[15] = max.x;\n  positions[16] = min.y;\n  positions[17] = max.z;\n  positions[18] = max.x;\n  positions[19] = max.y;\n  positions[20] = max.z;\n  positions[21] = min.x;\n  positions[22] = max.y;\n  positions[23] = max.z;\n\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: positions,\n  });\n\n  // top\n  indices[0] = 4;\n  indices[1] = 5;\n  indices[2] = 5;\n  indices[3] = 6;\n  indices[4] = 6;\n  indices[5] = 7;\n  indices[6] = 7;\n  indices[7] = 4;\n\n  // bottom\n  indices[8] = 0;\n  indices[9] = 1;\n  indices[10] = 1;\n  indices[11] = 2;\n  indices[12] = 2;\n  indices[13] = 3;\n  indices[14] = 3;\n  indices[15] = 0;\n\n  // left\n  indices[16] = 0;\n  indices[17] = 4;\n  indices[18] = 1;\n  indices[19] = 5;\n\n  //right\n  indices[20] = 2;\n  indices[21] = 6;\n  indices[22] = 3;\n  indices[23] = 7;\n\n  const diff = Cartesian3.subtract(max, min, diffScratch);\n  const radius = Cartesian3.magnitude(diff) * 0.5;\n\n  if (defined(boxGeometry._offsetAttribute)) {\n    const length = positions.length;\n    const offsetValue =\n      boxGeometry._offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n    const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: new BoundingSphere(Cartesian3.ZERO, radius),\n    offsetAttribute: boxGeometry._offsetAttribute,\n  });\n};\nexport default BoxOutlineGeometry;\n","// @ts-check\n\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/** @import {TypedArray} from \"./globalTypes.js\"; */\n/** @import Cartesian3 from \"./Cartesian3.js\"; */\n/** @import Cartesian4 from \"./Cartesian4.js\"; */\n\n/**\n * A 2D Cartesian point.\n *\n * @see Cartesian3\n * @see Cartesian4\n * @see Packable\n */\nclass Cartesian2 {\n  /**\n   * @param {number} [x=0.0] The X component.\n   * @param {number} [y=0.0] The Y component.\n   */\n  constructor(x, y) {\n    /**\n     * The X component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.x = x ?? 0.0;\n\n    /**\n     * The Y component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.y = y ?? 0.0;\n  }\n\n  /**\n   * Creates a Cartesian2 instance from x and y coordinates.\n   *\n   * @param {number} x The x coordinate.\n   * @param {number} y The y coordinate.\n   * @param {Cartesian2} [result] The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n   */\n  static fromElements(x, y, result) {\n    if (!defined(result)) {\n      return new Cartesian2(x, y);\n    }\n\n    result.x = x;\n    result.y = y;\n    return result;\n  }\n\n  /**\n   * Duplicates a Cartesian2 instance.\n   *\n   * @param {Cartesian2} cartesian The Cartesian to duplicate.\n   * @param {Cartesian2} [result] The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. (Returns undefined if cartesian is undefined)\n   */\n  static clone(cartesian, result) {\n    if (!defined(cartesian)) {\n      return undefined;\n    }\n    if (!defined(result)) {\n      return new Cartesian2(cartesian.x, cartesian.y);\n    }\n\n    result.x = cartesian.x;\n    result.y = cartesian.y;\n    return result;\n  }\n\n  /**\n   * Stores the provided instance into the provided array.\n   *\n   * @param {Cartesian2} value The value to pack.\n   * @param {number[]|TypedArray} array The array to pack into.\n   * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n   *\n   * @returns {number[]|TypedArray} The array that was packed into\n   */\n  static pack(value, array, startingIndex) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"value\", value);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n\n    array[startingIndex++] = value.x;\n    array[startingIndex] = value.y;\n\n    return array;\n  }\n\n  /**\n   * Retrieves an instance from a packed array.\n   *\n   * @param {number[]|TypedArray} array The packed array.\n   * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n   * @param {Cartesian2} [result] The object into which to store the result.\n   * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n   */\n  static unpack(array, startingIndex, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n\n    if (!defined(result)) {\n      result = new Cartesian2();\n    }\n    result.x = array[startingIndex++];\n    result.y = array[startingIndex];\n    return result;\n  }\n\n  /**\n   * Flattens an array of Cartesian2s into an array of components.\n   *\n   * @param {Cartesian2[]} array The array of cartesians to pack.\n   * @param {number[]|TypedArray} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 2 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 2) elements.\n   * @returns {number[]|TypedArray} The packed array.\n   */\n  static packArray(array, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    const length = array.length;\n    const resultLength = length * 2;\n    if (!defined(result)) {\n      result = new Array(resultLength);\n    } else if (!Array.isArray(result) && result.length !== resultLength) {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\n        \"If result is a typed array, it must have exactly array.length * 2 elements\",\n      );\n      //>>includeEnd('debug');\n    } else if (result.length !== resultLength) {\n      /** @type {number[]} */ (result).length = resultLength;\n    }\n\n    for (let i = 0; i < length; ++i) {\n      Cartesian2.pack(array[i], result, i * 2);\n    }\n    return result;\n  }\n\n  /**\n   * Unpacks an array of cartesian components into an array of Cartesian2s.\n   *\n   * @param {number[]} array The array of components to unpack.\n   * @param {Cartesian2[]} [result] The array onto which to store the result.\n   * @returns {Cartesian2[]} The unpacked array.\n   */\n  static unpackArray(array, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 2);\n    if (array.length % 2 !== 0) {\n      throw new DeveloperError(\"array length must be a multiple of 2.\");\n    }\n    //>>includeEnd('debug');\n\n    const length = array.length;\n    if (!defined(result)) {\n      result = new Array(length / 2);\n    } else {\n      result.length = length / 2;\n    }\n\n    for (let i = 0; i < length; i += 2) {\n      const index = i / 2;\n      result[index] = Cartesian2.unpack(array, i, result[index]);\n    }\n    return result;\n  }\n\n  /**\n   * Computes the value of the maximum component for the supplied Cartesian.\n   *\n   * @param {Cartesian2} cartesian The cartesian to use.\n   * @returns {number} The value of the maximum component.\n   */\n  static maximumComponent(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return Math.max(cartesian.x, cartesian.y);\n  }\n\n  /**\n   * Computes the value of the minimum component for the supplied Cartesian.\n   *\n   * @param {Cartesian2} cartesian The cartesian to use.\n   * @returns {number} The value of the minimum component.\n   */\n  static minimumComponent(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return Math.min(cartesian.x, cartesian.y);\n  }\n\n  /**\n   * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\n   *\n   * @param {Cartesian2} first A cartesian to compare.\n   * @param {Cartesian2} second A cartesian to compare.\n   * @param {Cartesian2} result The object into which to store the result.\n   * @returns {Cartesian2} A cartesian with the minimum components.\n   */\n  static minimumByComponent(first, second, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"first\", first);\n    Check.typeOf.object(\"second\", second);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.min(first.x, second.x);\n    result.y = Math.min(first.y, second.y);\n\n    return result;\n  }\n\n  /**\n   * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\n   *\n   * @param {Cartesian2} first A cartesian to compare.\n   * @param {Cartesian2} second A cartesian to compare.\n   * @param {Cartesian2} result The object into which to store the result.\n   * @returns {Cartesian2} A cartesian with the maximum components.\n   */\n  static maximumByComponent(first, second, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"first\", first);\n    Check.typeOf.object(\"second\", second);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.max(first.x, second.x);\n    result.y = Math.max(first.y, second.y);\n    return result;\n  }\n\n  /**\n   * Constrain a value to lie between two values.\n   *\n   * @param {Cartesian2} value The value to clamp.\n   * @param {Cartesian2} min The minimum bound.\n   * @param {Cartesian2} max The maximum bound.\n   * @param {Cartesian2} result The object into which to store the result.\n   * @returns {Cartesian2} The clamped value such that min <= result <= max.\n   */\n  static clamp(value, min, max, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"value\", value);\n    Check.typeOf.object(\"min\", min);\n    Check.typeOf.object(\"max\", max);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const x = CesiumMath.clamp(value.x, min.x, max.x);\n    const y = CesiumMath.clamp(value.y, min.y, max.y);\n\n    result.x = x;\n    result.y = y;\n\n    return result;\n  }\n\n  /**\n   * Computes the provided Cartesian's squared magnitude.\n   *\n   * @param {Cartesian2} cartesian The Cartesian instance whose squared magnitude is to be computed.\n   * @returns {number} The squared magnitude.\n   */\n  static magnitudeSquared(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return cartesian.x * cartesian.x + cartesian.y * cartesian.y;\n  }\n\n  /**\n   * Computes the Cartesian's magnitude (length).\n   *\n   * @param {Cartesian2} cartesian The Cartesian instance whose magnitude is to be computed.\n   * @returns {number} The magnitude.\n   */\n  static magnitude(cartesian) {\n    return Math.sqrt(Cartesian2.magnitudeSquared(cartesian));\n  }\n\n  /**\n   * Computes the distance between two points.\n   *\n   * @param {Cartesian2} left The first point to compute the distance from.\n   * @param {Cartesian2} right The second point to compute the distance to.\n   * @returns {number} The distance between two points.\n   *\n   * @example\n   * // Returns 1.0\n   * const d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(2.0, 0.0));\n   */\n  static distance(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian2.subtract(left, right, distanceScratch);\n    return Cartesian2.magnitude(distanceScratch);\n  }\n\n  /**\n   * Computes the squared distance between two points.  Comparing squared distances\n   * using this function is more efficient than comparing distances using {@link Cartesian2#distance}.\n   *\n   * @param {Cartesian2} left The first point to compute the distance from.\n   * @param {Cartesian2} right The second point to compute the distance to.\n   * @returns {number} The distance between two points.\n   *\n   * @example\n   * // Returns 4.0, not 2.0\n   * const d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(3.0, 0.0));\n   */\n  static distanceSquared(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian2.subtract(left, right, distanceScratch);\n    return Cartesian2.magnitudeSquared(distanceScratch);\n  }\n\n  /**\n   * Computes the normalized form of the supplied Cartesian.\n   *\n   * @param {Cartesian2} cartesian The Cartesian to be normalized.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static normalize(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const magnitude = Cartesian2.magnitude(cartesian);\n\n    result.x = cartesian.x / magnitude;\n    result.y = cartesian.y / magnitude;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (isNaN(result.x) || isNaN(result.y)) {\n      throw new DeveloperError(\"normalized result is not a number\");\n    }\n    //>>includeEnd('debug');\n\n    return result;\n  }\n\n  /**\n   * Computes the dot (scalar) product of two Cartesians.\n   *\n   * @param {Cartesian2} left The first Cartesian.\n   * @param {Cartesian2} right The second Cartesian.\n   * @returns {number} The dot product.\n   */\n  static dot(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    return left.x * right.x + left.y * right.y;\n  }\n\n  /**\n   * Computes the magnitude of the cross product that would result from implicitly setting the Z coordinate of the input vectors to 0\n   *\n   * @param {Cartesian2} left The first Cartesian.\n   * @param {Cartesian2} right The second Cartesian.\n   * @returns {number} The cross product.\n   */\n  static cross(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    return left.x * right.y - left.y * right.x;\n  }\n\n  /**\n   * Computes the componentwise product of two Cartesians.\n   *\n   * @param {Cartesian2} left The first Cartesian.\n   * @param {Cartesian2} right The second Cartesian.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static multiplyComponents(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x * right.x;\n    result.y = left.y * right.y;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise quotient of two Cartesians.\n   *\n   * @param {Cartesian2} left The first Cartesian.\n   * @param {Cartesian2} right The second Cartesian.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static divideComponents(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x / right.x;\n    result.y = left.y / right.y;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise sum of two Cartesians.\n   *\n   * @param {Cartesian2} left The first Cartesian.\n   * @param {Cartesian2} right The second Cartesian.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static add(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x + right.x;\n    result.y = left.y + right.y;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise difference of two Cartesians.\n   *\n   * @param {Cartesian2} left The first Cartesian.\n   * @param {Cartesian2} right The second Cartesian.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static subtract(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x - right.x;\n    result.y = left.y - right.y;\n    return result;\n  }\n\n  /**\n   * Multiplies the provided Cartesian componentwise by the provided scalar.\n   *\n   * @param {Cartesian2} cartesian The Cartesian to be scaled.\n   * @param {number} scalar The scalar to multiply with.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static multiplyByScalar(cartesian, scalar, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.number(\"scalar\", scalar);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = cartesian.x * scalar;\n    result.y = cartesian.y * scalar;\n    return result;\n  }\n\n  /**\n   * Divides the provided Cartesian componentwise by the provided scalar.\n   *\n   * @param {Cartesian2} cartesian The Cartesian to be divided.\n   * @param {number} scalar The scalar to divide by.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static divideByScalar(cartesian, scalar, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.number(\"scalar\", scalar);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = cartesian.x / scalar;\n    result.y = cartesian.y / scalar;\n    return result;\n  }\n\n  /**\n   * Negates the provided Cartesian.\n   *\n   * @param {Cartesian2} cartesian The Cartesian to be negated.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static negate(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = -cartesian.x;\n    result.y = -cartesian.y;\n    return result;\n  }\n\n  /**\n   * Computes the absolute value of the provided Cartesian.\n   *\n   * @param {Cartesian2} cartesian The Cartesian whose absolute value is to be computed.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static abs(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.abs(cartesian.x);\n    result.y = Math.abs(cartesian.y);\n    return result;\n  }\n\n  /**\n   * Computes the linear interpolation or extrapolation at t using the provided cartesians.\n   *\n   * @param {Cartesian2} start The value corresponding to t at 0.0.\n   * @param {Cartesian2} end The value corresponding to t at 1.0.\n   * @param {number} t The point along t at which to interpolate.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter.\n   */\n  static lerp(start, end, t, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"start\", start);\n    Check.typeOf.object(\"end\", end);\n    Check.typeOf.number(\"t\", t);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    Cartesian2.multiplyByScalar(end, t, lerpScratch);\n    result = Cartesian2.multiplyByScalar(start, 1.0 - t, result);\n    return Cartesian2.add(lerpScratch, result, result);\n  }\n\n  /**\n   * Returns the angle, in radians, between the provided Cartesians.\n   *\n   * @param {Cartesian2} left The first Cartesian.\n   * @param {Cartesian2} right The second Cartesian.\n   * @returns {number} The angle between the Cartesians.\n   */\n  static angleBetween(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian2.normalize(left, angleBetweenScratch);\n    Cartesian2.normalize(right, angleBetweenScratch2);\n    return CesiumMath.acosClamped(\n      Cartesian2.dot(angleBetweenScratch, angleBetweenScratch2),\n    );\n  }\n\n  /**\n   * Returns the axis that is most orthogonal to the provided Cartesian.\n   *\n   * @param {Cartesian2} cartesian The Cartesian on which to find the most orthogonal axis.\n   * @param {Cartesian2} result The object onto which to store the result.\n   * @returns {Cartesian2} The most orthogonal axis.\n   */\n  static mostOrthogonalAxis(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const f = Cartesian2.normalize(cartesian, mostOrthogonalAxisScratch);\n    Cartesian2.abs(f, f);\n\n    if (f.x <= f.y) {\n      result = Cartesian2.clone(Cartesian2.UNIT_X, result);\n    } else {\n      result = Cartesian2.clone(Cartesian2.UNIT_Y, result);\n    }\n\n    return result;\n  }\n\n  /**\n   * Compares the provided Cartesians componentwise and returns\n   * <code>true</code> if they are equal, <code>false</code> otherwise.\n   *\n   * @param {Cartesian2} [left] The first Cartesian.\n   * @param {Cartesian2} [right] The second Cartesian.\n   * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n   */\n  static equals(left, right) {\n    return (\n      left === right ||\n      (defined(left) &&\n        defined(right) &&\n        left.x === right.x &&\n        left.y === right.y)\n    );\n  }\n\n  /**\n   * @param {Cartesian2} cartesian\n   * @param {number[]} array\n   * @param {number} offset\n   * @private\n   */\n  static equalsArray(cartesian, array, offset) {\n    return cartesian.x === array[offset] && cartesian.y === array[offset + 1];\n  }\n\n  /**\n   * Compares the provided Cartesians componentwise and returns\n   * <code>true</code> if they pass an absolute or relative tolerance test,\n   * <code>false</code> otherwise.\n   *\n   * @param {Cartesian2} [left] The first Cartesian.\n   * @param {Cartesian2} [right] The second Cartesian.\n   * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n   * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n   * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n   */\n  static equalsEpsilon(left, right, relativeEpsilon, absoluteEpsilon) {\n    return (\n      left === right ||\n      (defined(left) &&\n        defined(right) &&\n        CesiumMath.equalsEpsilon(\n          left.x,\n          right.x,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ) &&\n        CesiumMath.equalsEpsilon(\n          left.y,\n          right.y,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ))\n    );\n  }\n\n  /**\n   * Duplicates this Cartesian2 instance.\n   *\n   * @param {Cartesian2} [result] The object onto which to store the result.\n   * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n   */\n  clone(result) {\n    return Cartesian2.clone(this, result);\n  }\n\n  /**\n   * Compares this Cartesian against the provided Cartesian componentwise and returns\n   * <code>true</code> if they are equal, <code>false</code> otherwise.\n   *\n   * @param {Cartesian2} [right] The right hand side Cartesian.\n   * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n   */\n  equals(right) {\n    return Cartesian2.equals(this, right);\n  }\n\n  /**\n   * Compares this Cartesian against the provided Cartesian componentwise and returns\n   * <code>true</code> if they pass an absolute or relative tolerance test,\n   * <code>false</code> otherwise.\n   *\n   * @param {Cartesian2} [right] The right hand side Cartesian.\n   * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n   * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n   * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n   */\n  equalsEpsilon(right, relativeEpsilon, absoluteEpsilon) {\n    return Cartesian2.equalsEpsilon(\n      this,\n      right,\n      relativeEpsilon,\n      absoluteEpsilon,\n    );\n  }\n\n  /**\n   * Creates a string representing this Cartesian in the format '(x, y)'.\n   *\n   * @returns {string} A string representing the provided Cartesian in the format '(x, y)'.\n   */\n  toString() {\n    return `(${this.x}, ${this.y})`;\n  }\n}\n\n/**\n * Creates a Cartesian2 instance from an existing Cartesian3.  This simply takes the\n * x and y properties of the Cartesian3 and drops z.\n * @function\n *\n * @param {Cartesian3} cartesian The Cartesian3 instance to create a Cartesian2 instance from.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n */\nCartesian2.fromCartesian3 = Cartesian2.clone;\n\n/**\n * Creates a Cartesian2 instance from an existing Cartesian4.  This simply takes the\n * x and y properties of the Cartesian4 and drops z and w.\n * @function\n *\n * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian2 instance from.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n */\nCartesian2.fromCartesian4 = Cartesian2.clone;\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nCartesian2.packedLength = 2;\n\n/**\n * Creates a Cartesian2 from two consecutive elements in an array.\n * @function\n *\n * @param {number[]} array The array whose two consecutive elements correspond to the x and y components, respectively.\n * @param {number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\n *\n * @example\n * // Create a Cartesian2 with (1.0, 2.0)\n * const v = [1.0, 2.0];\n * const p = Cesium.Cartesian2.fromArray(v);\n *\n * // Create a Cartesian2 with (1.0, 2.0) using an offset into an array\n * const v2 = [0.0, 0.0, 1.0, 2.0];\n * const p2 = Cesium.Cartesian2.fromArray(v2, 2);\n */\nCartesian2.fromArray = Cartesian2.unpack;\n\nconst distanceScratch = new Cartesian2();\n\nconst lerpScratch = new Cartesian2();\n\nconst angleBetweenScratch = new Cartesian2();\nconst angleBetweenScratch2 = new Cartesian2();\n\nconst mostOrthogonalAxisScratch = new Cartesian2();\n\n/**\n * An immutable Cartesian2 instance initialized to (0.0, 0.0).\n *\n * @type {Cartesian2}\n * @constant\n */\nCartesian2.ZERO = Object.freeze(new Cartesian2(0.0, 0.0));\n\n/**\n * An immutable Cartesian2 instance initialized to (1.0, 1.0).\n *\n * @type {Cartesian2}\n * @constant\n */\nCartesian2.ONE = Object.freeze(new Cartesian2(1.0, 1.0));\n\n/**\n * An immutable Cartesian2 instance initialized to (1.0, 0.0).\n *\n * @type {Cartesian2}\n * @constant\n */\nCartesian2.UNIT_X = Object.freeze(new Cartesian2(1.0, 0.0));\n\n/**\n * An immutable Cartesian2 instance initialized to (0.0, 1.0).\n *\n * @type {Cartesian2}\n * @constant\n */\nCartesian2.UNIT_Y = Object.freeze(new Cartesian2(0.0, 1.0));\n\nexport default Cartesian2;\n","// @ts-check\n\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/** @import {TypedArray} from \"./globalTypes.js\"; */\n/** @import Cartesian4 from \"./Cartesian4.js\"; */\n/** @import Ellipsoid from \"./Ellipsoid.js\"; */\n/** @import Spherical from \"./Spherical.js\"; */\n\n/**\n * A 3D Cartesian point.\n *\n * @see Cartesian2\n * @see Cartesian4\n * @see Packable\n */\nclass Cartesian3 {\n  /**\n   * @param {number} [x=0.0] The X component.\n   * @param {number} [y=0.0] The Y component.\n   * @param {number} [z=0.0] The Z component.\n   */\n  constructor(x, y, z) {\n    /**\n     * The X component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.x = x ?? 0.0;\n\n    /**\n     * The Y component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.y = y ?? 0.0;\n\n    /**\n     * The Z component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.z = z ?? 0.0;\n  }\n\n  /**\n   * Converts the provided Spherical into Cartesian3 coordinates.\n   *\n   * @param {Spherical} spherical The Spherical to be converted to Cartesian3.\n   * @param {Cartesian3} [result] The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n   */\n  static fromSpherical(spherical, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"spherical\", spherical);\n    //>>includeEnd('debug');\n\n    if (!defined(result)) {\n      result = new Cartesian3();\n    }\n\n    const clock = spherical.clock;\n    const cone = spherical.cone;\n    const magnitude = spherical.magnitude ?? 1.0;\n    const radial = magnitude * Math.sin(cone);\n    result.x = radial * Math.cos(clock);\n    result.y = radial * Math.sin(clock);\n    result.z = magnitude * Math.cos(cone);\n    return result;\n  }\n\n  /**\n   * Creates a Cartesian3 instance from x, y and z coordinates.\n   *\n   * @param {number} x The x coordinate.\n   * @param {number} y The y coordinate.\n   * @param {number} z The z coordinate.\n   * @param {Cartesian3} [result] The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n   */\n  static fromElements(x, y, z, result) {\n    if (!defined(result)) {\n      return new Cartesian3(x, y, z);\n    }\n\n    result.x = x;\n    result.y = y;\n    result.z = z;\n    return result;\n  }\n\n  /**\n   * Duplicates a Cartesian3 instance.\n   *\n   * @param {Cartesian3} cartesian The Cartesian to duplicate.\n   * @param {Cartesian3} [result] The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. (Returns undefined if cartesian is undefined)\n   */\n  static clone(cartesian, result) {\n    if (!defined(cartesian)) {\n      return undefined;\n    }\n    if (!defined(result)) {\n      return new Cartesian3(cartesian.x, cartesian.y, cartesian.z);\n    }\n\n    result.x = cartesian.x;\n    result.y = cartesian.y;\n    result.z = cartesian.z;\n    return result;\n  }\n\n  /**\n   * Stores the provided instance into the provided array.\n   *\n   * @param {Cartesian3} value The value to pack.\n   * @param {number[]|TypedArray} array The array to pack into.\n   * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n   *\n   * @returns {number[]|TypedArray} The array that was packed into\n   */\n  static pack(value, array, startingIndex) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"value\", value);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n\n    array[startingIndex++] = value.x;\n    array[startingIndex++] = value.y;\n    array[startingIndex] = value.z;\n\n    return array;\n  }\n\n  /**\n   * Retrieves an instance from a packed array.\n   *\n   * @param {number[]|TypedArray} array The packed array.\n   * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n   * @param {Cartesian3} [result] The object into which to store the result.\n   * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n   */\n  static unpack(array, startingIndex, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n\n    if (!defined(result)) {\n      result = new Cartesian3();\n    }\n    result.x = array[startingIndex++];\n    result.y = array[startingIndex++];\n    result.z = array[startingIndex];\n    return result;\n  }\n\n  /**\n   * Flattens an array of Cartesian3s into an array of components.\n   *\n   * @param {Cartesian3[]} array The array of cartesians to pack.\n   * @param {number[]|TypedArray} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 3 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 3) elements.\n   * @returns {number[]|TypedArray} The packed array.\n   */\n  static packArray(array, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    const length = array.length;\n    const resultLength = length * 3;\n    if (!defined(result)) {\n      result = new Array(resultLength);\n    } else if (!Array.isArray(result) && result.length !== resultLength) {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\n        \"If result is a typed array, it must have exactly array.length * 3 elements\",\n      );\n      //>>includeEnd('debug');\n    } else if (result.length !== resultLength) {\n      /** @type {number[]} */ (result).length = resultLength;\n    }\n\n    for (let i = 0; i < length; ++i) {\n      Cartesian3.pack(array[i], result, i * 3);\n    }\n    return result;\n  }\n\n  /**\n   * Unpacks an array of cartesian components into an array of Cartesian3s.\n   *\n   * @param {number[]|TypedArray} array The array of components to unpack.\n   * @param {Cartesian3[]} [result] The array onto which to store the result.\n   * @returns {Cartesian3[]} The unpacked array.\n   */\n  static unpackArray(array, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 3);\n    if (array.length % 3 !== 0) {\n      throw new DeveloperError(\"array length must be a multiple of 3.\");\n    }\n    //>>includeEnd('debug');\n\n    const length = array.length;\n    if (!defined(result)) {\n      result = new Array(length / 3);\n    } else {\n      result.length = length / 3;\n    }\n\n    for (let i = 0; i < length; i += 3) {\n      const index = i / 3;\n      result[index] = Cartesian3.unpack(array, i, result[index]);\n    }\n    return result;\n  }\n\n  /**\n   * Computes the value of the maximum component for the supplied Cartesian.\n   *\n   * @param {Cartesian3} cartesian The cartesian to use.\n   * @returns {number} The value of the maximum component.\n   */\n  static maximumComponent(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return Math.max(cartesian.x, cartesian.y, cartesian.z);\n  }\n\n  /**\n   * Computes the value of the minimum component for the supplied Cartesian.\n   *\n   * @param {Cartesian3} cartesian The cartesian to use.\n   * @returns {number} The value of the minimum component.\n   */\n  static minimumComponent(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return Math.min(cartesian.x, cartesian.y, cartesian.z);\n  }\n\n  /**\n   * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\n   *\n   * @param {Cartesian3} first A cartesian to compare.\n   * @param {Cartesian3} second A cartesian to compare.\n   * @param {Cartesian3} result The object into which to store the result.\n   * @returns {Cartesian3} A cartesian with the minimum components.\n   */\n  static minimumByComponent(first, second, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"first\", first);\n    Check.typeOf.object(\"second\", second);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.min(first.x, second.x);\n    result.y = Math.min(first.y, second.y);\n    result.z = Math.min(first.z, second.z);\n\n    return result;\n  }\n\n  /**\n   * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\n   *\n   * @param {Cartesian3} first A cartesian to compare.\n   * @param {Cartesian3} second A cartesian to compare.\n   * @param {Cartesian3} result The object into which to store the result.\n   * @returns {Cartesian3} A cartesian with the maximum components.\n   */\n  static maximumByComponent(first, second, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"first\", first);\n    Check.typeOf.object(\"second\", second);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.max(first.x, second.x);\n    result.y = Math.max(first.y, second.y);\n    result.z = Math.max(first.z, second.z);\n    return result;\n  }\n\n  /**\n   * Constrain a value to lie between two values.\n   *\n   * @param {Cartesian3} value The value to clamp.\n   * @param {Cartesian3} min The minimum bound.\n   * @param {Cartesian3} max The maximum bound.\n   * @param {Cartesian3} result The object into which to store the result.\n   * @returns {Cartesian3} The clamped value such that min <= value <= max.\n   */\n  static clamp(value, min, max, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"value\", value);\n    Check.typeOf.object(\"min\", min);\n    Check.typeOf.object(\"max\", max);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const x = CesiumMath.clamp(value.x, min.x, max.x);\n    const y = CesiumMath.clamp(value.y, min.y, max.y);\n    const z = CesiumMath.clamp(value.z, min.z, max.z);\n\n    result.x = x;\n    result.y = y;\n    result.z = z;\n\n    return result;\n  }\n\n  /**\n   * Computes the provided Cartesian's squared magnitude.\n   *\n   * @param {Cartesian3} cartesian The Cartesian instance whose squared magnitude is to be computed.\n   * @returns {number} The squared magnitude.\n   */\n  static magnitudeSquared(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return (\n      cartesian.x * cartesian.x +\n      cartesian.y * cartesian.y +\n      cartesian.z * cartesian.z\n    );\n  }\n\n  /**\n   * Computes the Cartesian's magnitude (length).\n   *\n   * @param {Cartesian3} cartesian The Cartesian instance whose magnitude is to be computed.\n   * @returns {number} The magnitude.\n   */\n  static magnitude(cartesian) {\n    return Math.sqrt(Cartesian3.magnitudeSquared(cartesian));\n  }\n\n  /**\n   * Computes the distance between two points.\n   *\n   * @param {Cartesian3} left The first point to compute the distance from.\n   * @param {Cartesian3} right The second point to compute the distance to.\n   * @returns {number} The distance between two points.\n   *\n   * @example\n   * // Returns 1.0\n   * const d = Cesium.Cartesian3.distance(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(2.0, 0.0, 0.0));\n   */\n  static distance(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian3.subtract(left, right, distanceScratch);\n    return Cartesian3.magnitude(distanceScratch);\n  }\n\n  /**\n   * Computes the squared distance between two points.  Comparing squared distances\n   * using this function is more efficient than comparing distances using {@link Cartesian3#distance}.\n   *\n   * @param {Cartesian3} left The first point to compute the distance from.\n   * @param {Cartesian3} right The second point to compute the distance to.\n   * @returns {number} The distance between two points.\n   *\n   * @example\n   * // Returns 4.0, not 2.0\n   * const d = Cesium.Cartesian3.distanceSquared(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(3.0, 0.0, 0.0));\n   */\n  static distanceSquared(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian3.subtract(left, right, distanceScratch);\n    return Cartesian3.magnitudeSquared(distanceScratch);\n  }\n\n  /**\n   * Computes the normalized form of the supplied Cartesian.\n   *\n   * @param {Cartesian3} cartesian The Cartesian to be normalized.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static normalize(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const magnitude = Cartesian3.magnitude(cartesian);\n\n    result.x = cartesian.x / magnitude;\n    result.y = cartesian.y / magnitude;\n    result.z = cartesian.z / magnitude;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (isNaN(result.x) || isNaN(result.y) || isNaN(result.z)) {\n      throw new DeveloperError(\"normalized result is not a number\");\n    }\n    //>>includeEnd('debug');\n\n    return result;\n  }\n\n  /**\n   * Computes the dot (scalar) product of two Cartesians.\n   *\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @returns {number} The dot product.\n   */\n  static dot(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    return left.x * right.x + left.y * right.y + left.z * right.z;\n  }\n\n  /**\n   * Computes the componentwise product of two Cartesians.\n   *\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static multiplyComponents(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x * right.x;\n    result.y = left.y * right.y;\n    result.z = left.z * right.z;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise quotient of two Cartesians.\n   *\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static divideComponents(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x / right.x;\n    result.y = left.y / right.y;\n    result.z = left.z / right.z;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise sum of two Cartesians.\n   *\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static add(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x + right.x;\n    result.y = left.y + right.y;\n    result.z = left.z + right.z;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise difference of two Cartesians.\n   *\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static subtract(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x - right.x;\n    result.y = left.y - right.y;\n    result.z = left.z - right.z;\n    return result;\n  }\n\n  /**\n   * Multiplies the provided Cartesian componentwise by the provided scalar.\n   *\n   * @param {Cartesian3} cartesian The Cartesian to be scaled.\n   * @param {number} scalar The scalar to multiply with.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static multiplyByScalar(cartesian, scalar, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.number(\"scalar\", scalar);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = cartesian.x * scalar;\n    result.y = cartesian.y * scalar;\n    result.z = cartesian.z * scalar;\n    return result;\n  }\n\n  /**\n   * Divides the provided Cartesian componentwise by the provided scalar.\n   *\n   * @param {Cartesian3} cartesian The Cartesian to be divided.\n   * @param {number} scalar The scalar to divide by.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static divideByScalar(cartesian, scalar, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.number(\"scalar\", scalar);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = cartesian.x / scalar;\n    result.y = cartesian.y / scalar;\n    result.z = cartesian.z / scalar;\n    return result;\n  }\n\n  /**\n   * Negates the provided Cartesian.\n   *\n   * @param {Cartesian3} cartesian The Cartesian to be negated.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static negate(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = -cartesian.x;\n    result.y = -cartesian.y;\n    result.z = -cartesian.z;\n    return result;\n  }\n\n  /**\n   * Computes the absolute value of the provided Cartesian.\n   *\n   * @param {Cartesian3} cartesian The Cartesian whose absolute value is to be computed.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static abs(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.abs(cartesian.x);\n    result.y = Math.abs(cartesian.y);\n    result.z = Math.abs(cartesian.z);\n    return result;\n  }\n\n  /**\n   * Computes the linear interpolation or extrapolation at t using the provided cartesians.\n   *\n   * @param {Cartesian3} start The value corresponding to t at 0.0.\n   * @param {Cartesian3} end The value corresponding to t at 1.0.\n   * @param {number} t The point along t at which to interpolate.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter.\n   */\n  static lerp(start, end, t, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"start\", start);\n    Check.typeOf.object(\"end\", end);\n    Check.typeOf.number(\"t\", t);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    Cartesian3.multiplyByScalar(end, t, lerpScratch);\n    result = Cartesian3.multiplyByScalar(start, 1.0 - t, result);\n    return Cartesian3.add(lerpScratch, result, result);\n  }\n\n  /**\n   * Returns the angle, in radians, between the provided Cartesians.\n   *\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @returns {number} The angle between the Cartesians.\n   */\n  static angleBetween(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian3.normalize(left, angleBetweenScratch);\n    Cartesian3.normalize(right, angleBetweenScratch2);\n    const cosine = Cartesian3.dot(angleBetweenScratch, angleBetweenScratch2);\n    const sine = Cartesian3.magnitude(\n      Cartesian3.cross(\n        angleBetweenScratch,\n        angleBetweenScratch2,\n        angleBetweenScratch,\n      ),\n    );\n    return Math.atan2(sine, cosine);\n  }\n\n  /**\n   * Returns the axis that is most orthogonal to the provided Cartesian.\n   *\n   * @param {Cartesian3} cartesian The Cartesian on which to find the most orthogonal axis.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The most orthogonal axis.\n   */\n  static mostOrthogonalAxis(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const f = Cartesian3.normalize(cartesian, mostOrthogonalAxisScratch);\n    Cartesian3.abs(f, f);\n\n    if (f.x <= f.y) {\n      if (f.x <= f.z) {\n        result = Cartesian3.clone(Cartesian3.UNIT_X, result);\n      } else {\n        result = Cartesian3.clone(Cartesian3.UNIT_Z, result);\n      }\n    } else if (f.y <= f.z) {\n      result = Cartesian3.clone(Cartesian3.UNIT_Y, result);\n    } else {\n      result = Cartesian3.clone(Cartesian3.UNIT_Z, result);\n    }\n\n    return result;\n  }\n\n  /**\n   * Projects vector a onto vector b\n   * @param {Cartesian3} a The vector that needs projecting\n   * @param {Cartesian3} b The vector to project onto\n   * @param {Cartesian3} result The result cartesian\n   * @returns {Cartesian3} The modified result parameter\n   */\n  static projectVector(a, b, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"a\", a);\n    Check.defined(\"b\", b);\n    Check.defined(\"result\", result);\n    //>>includeEnd('debug');\n\n    const scalar = Cartesian3.dot(a, b) / Cartesian3.dot(b, b);\n    return Cartesian3.multiplyByScalar(b, scalar, result);\n  }\n\n  /**\n   * Compares the provided Cartesians componentwise and returns\n   * <code>true</code> if they are equal, <code>false</code> otherwise.\n   *\n   * @param {Cartesian3} [left] The first Cartesian.\n   * @param {Cartesian3} [right] The second Cartesian.\n   * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n   */\n  static equals(left, right) {\n    return (\n      left === right ||\n      (defined(left) &&\n        defined(right) &&\n        left.x === right.x &&\n        left.y === right.y &&\n        left.z === right.z)\n    );\n  }\n\n  /**\n   * @param {Cartesian3} cartesian\n   * @param {number[]} array\n   * @param {number} offset\n   * @private\n   */\n  static equalsArray(cartesian, array, offset) {\n    return (\n      cartesian.x === array[offset] &&\n      cartesian.y === array[offset + 1] &&\n      cartesian.z === array[offset + 2]\n    );\n  }\n\n  /**\n   * Compares the provided Cartesians componentwise and returns\n   * <code>true</code> if they pass an absolute or relative tolerance test,\n   * <code>false</code> otherwise.\n   *\n   * @param {Cartesian3} [left] The first Cartesian.\n   * @param {Cartesian3} [right] The second Cartesian.\n   * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n   * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n   * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n   */\n  static equalsEpsilon(left, right, relativeEpsilon, absoluteEpsilon) {\n    return (\n      left === right ||\n      (defined(left) &&\n        defined(right) &&\n        CesiumMath.equalsEpsilon(\n          left.x,\n          right.x,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ) &&\n        CesiumMath.equalsEpsilon(\n          left.y,\n          right.y,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ) &&\n        CesiumMath.equalsEpsilon(\n          left.z,\n          right.z,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ))\n    );\n  }\n\n  /**\n   * Computes the cross (outer) product of two Cartesians.\n   *\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The cross product.\n   */\n  static cross(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const leftX = left.x;\n    const leftY = left.y;\n    const leftZ = left.z;\n    const rightX = right.x;\n    const rightY = right.y;\n    const rightZ = right.z;\n\n    const x = leftY * rightZ - leftZ * rightY;\n    const y = leftZ * rightX - leftX * rightZ;\n    const z = leftX * rightY - leftY * rightX;\n\n    result.x = x;\n    result.y = y;\n    result.z = z;\n    return result;\n  }\n\n  /**\n   * Computes the midpoint between the right and left Cartesian.\n   * @param {Cartesian3} left The first Cartesian.\n   * @param {Cartesian3} right The second Cartesian.\n   * @param {Cartesian3} result The object onto which to store the result.\n   * @returns {Cartesian3} The midpoint.\n   */\n  static midpoint(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = (left.x + right.x) * 0.5;\n    result.y = (left.y + right.y) * 0.5;\n    result.z = (left.z + right.z) * 0.5;\n\n    return result;\n  }\n\n  /**\n   * Returns a Cartesian3 position from longitude and latitude values given in degrees.\n   *\n   * @param {number} longitude The longitude, in degrees\n   * @param {number} latitude The latitude, in degrees\n   * @param {number} [height=0.0] The height, in meters, above the ellipsoid.\n   * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the position lies.\n   * @param {Cartesian3} [result] The object onto which to store the result.\n   * @returns {Cartesian3} The position\n   *\n   * @example\n   * const position = Cesium.Cartesian3.fromDegrees(-115.0, 37.0);\n   */\n  static fromDegrees(longitude, latitude, height, ellipsoid, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number(\"longitude\", longitude);\n    Check.typeOf.number(\"latitude\", latitude);\n    //>>includeEnd('debug');\n\n    longitude = CesiumMath.toRadians(longitude);\n    latitude = CesiumMath.toRadians(latitude);\n    return Cartesian3.fromRadians(\n      longitude,\n      latitude,\n      height,\n      ellipsoid,\n      result,\n    );\n  }\n\n  /**\n   * Returns a Cartesian3 position from longitude and latitude values given in radians.\n   *\n   * @param {number} longitude The longitude, in radians\n   * @param {number} latitude The latitude, in radians\n   * @param {number} [height=0.0] The height, in meters, above the ellipsoid.\n   * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the position lies.\n   * @param {Cartesian3} [result] The object onto which to store the result.\n   * @returns {Cartesian3} The position\n   *\n   * @example\n   * const position = Cesium.Cartesian3.fromRadians(-2.007, 0.645);\n   */\n  static fromRadians(longitude, latitude, height, ellipsoid, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number(\"longitude\", longitude);\n    Check.typeOf.number(\"latitude\", latitude);\n    //>>includeEnd('debug');\n\n    height = height ?? 0.0;\n\n    const radiiSquared = !defined(ellipsoid)\n      ? Cartesian3._ellipsoidRadiiSquared\n      : // @ts-expect-error Requires type-checking on Ellipsoid.js.\n        ellipsoid.radiiSquared;\n\n    const cosLatitude = Math.cos(latitude);\n    scratchN.x = cosLatitude * Math.cos(longitude);\n    scratchN.y = cosLatitude * Math.sin(longitude);\n    scratchN.z = Math.sin(latitude);\n    scratchN = Cartesian3.normalize(scratchN, scratchN);\n\n    Cartesian3.multiplyComponents(radiiSquared, scratchN, scratchK);\n    const gamma = Math.sqrt(Cartesian3.dot(scratchN, scratchK));\n    scratchK = Cartesian3.divideByScalar(scratchK, gamma, scratchK);\n    scratchN = Cartesian3.multiplyByScalar(scratchN, height, scratchN);\n\n    if (!defined(result)) {\n      result = new Cartesian3();\n    }\n    return Cartesian3.add(scratchK, scratchN, result);\n  }\n\n  /**\n   * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in degrees.\n   *\n   * @param {number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...].\n   * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the coordinates lie.\n   * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n   * @returns {Cartesian3[]} The array of positions.\n   *\n   * @example\n   * const positions = Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -107.0, 33.0]);\n   */\n  static fromDegreesArray(coordinates, ellipsoid, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"coordinates\", coordinates);\n    if (coordinates.length < 2 || coordinates.length % 2 !== 0) {\n      throw new DeveloperError(\n        \"the number of coordinates must be a multiple of 2 and at least 2\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const length = coordinates.length;\n    if (!defined(result)) {\n      result = new Array(length / 2);\n    } else {\n      result.length = length / 2;\n    }\n\n    for (let i = 0; i < length; i += 2) {\n      const longitude = coordinates[i];\n      const latitude = coordinates[i + 1];\n      const index = i / 2;\n      result[index] = Cartesian3.fromDegrees(\n        longitude,\n        latitude,\n        0,\n        ellipsoid,\n        result[index],\n      );\n    }\n\n    return result;\n  }\n\n  /**\n   * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in radians.\n   *\n   * @param {number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...].\n   * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the coordinates lie.\n   * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n   * @returns {Cartesian3[]} The array of positions.\n   *\n   * @example\n   * const positions = Cesium.Cartesian3.fromRadiansArray([-2.007, 0.645, -1.867, .575]);\n   */\n  static fromRadiansArray(coordinates, ellipsoid, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"coordinates\", coordinates);\n    if (coordinates.length < 2 || coordinates.length % 2 !== 0) {\n      throw new DeveloperError(\n        \"the number of coordinates must be a multiple of 2 and at least 2\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const length = coordinates.length;\n    if (!defined(result)) {\n      result = new Array(length / 2);\n    } else {\n      result.length = length / 2;\n    }\n\n    for (let i = 0; i < length; i += 2) {\n      const longitude = coordinates[i];\n      const latitude = coordinates[i + 1];\n      const index = i / 2;\n      result[index] = Cartesian3.fromRadians(\n        longitude,\n        latitude,\n        0,\n        ellipsoid,\n        result[index],\n      );\n    }\n\n    return result;\n  }\n\n  /**\n   * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in degrees.\n   *\n   * @param {number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...].\n   * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the position lies.\n   * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n   * @returns {Cartesian3[]} The array of positions.\n   *\n   * @example\n   * const positions = Cesium.Cartesian3.fromDegreesArrayHeights([-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]);\n   */\n  static fromDegreesArrayHeights(coordinates, ellipsoid, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"coordinates\", coordinates);\n    if (coordinates.length < 3 || coordinates.length % 3 !== 0) {\n      throw new DeveloperError(\n        \"the number of coordinates must be a multiple of 3 and at least 3\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const length = coordinates.length;\n    if (!defined(result)) {\n      result = new Array(length / 3);\n    } else {\n      result.length = length / 3;\n    }\n\n    for (let i = 0; i < length; i += 3) {\n      const longitude = coordinates[i];\n      const latitude = coordinates[i + 1];\n      const height = coordinates[i + 2];\n      const index = i / 3;\n      result[index] = Cartesian3.fromDegrees(\n        longitude,\n        latitude,\n        height,\n        ellipsoid,\n        result[index],\n      );\n    }\n\n    return result;\n  }\n\n  /**\n   * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in radians.\n   *\n   * @param {number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...].\n   * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the position lies.\n   * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\n   * @returns {Cartesian3[]} The array of positions.\n   *\n   * @example\n   * const positions = Cesium.Cartesian3.fromRadiansArrayHeights([-2.007, 0.645, 100000.0, -1.867, .575, 150000.0]);\n   */\n  static fromRadiansArrayHeights(coordinates, ellipsoid, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"coordinates\", coordinates);\n    if (coordinates.length < 3 || coordinates.length % 3 !== 0) {\n      throw new DeveloperError(\n        \"the number of coordinates must be a multiple of 3 and at least 3\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const length = coordinates.length;\n    if (!defined(result)) {\n      result = new Array(length / 3);\n    } else {\n      result.length = length / 3;\n    }\n\n    for (let i = 0; i < length; i += 3) {\n      const longitude = coordinates[i];\n      const latitude = coordinates[i + 1];\n      const height = coordinates[i + 2];\n      const index = i / 3;\n      result[index] = Cartesian3.fromRadians(\n        longitude,\n        latitude,\n        height,\n        ellipsoid,\n        result[index],\n      );\n    }\n\n    return result;\n  }\n\n  /**\n   * Duplicates this Cartesian3 instance.\n   *\n   * @param {Cartesian3} [result] The object onto which to store the result.\n   * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n   */\n  clone(result) {\n    return Cartesian3.clone(this, result);\n  }\n\n  /**\n   * Compares this Cartesian against the provided Cartesian componentwise and returns\n   * <code>true</code> if they are equal, <code>false</code> otherwise.\n   *\n   * @param {Cartesian3} [right] The right hand side Cartesian.\n   * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n   */\n  equals(right) {\n    return Cartesian3.equals(this, right);\n  }\n\n  /**\n   * Compares this Cartesian against the provided Cartesian componentwise and returns\n   * <code>true</code> if they pass an absolute or relative tolerance test,\n   * <code>false</code> otherwise.\n   *\n   * @param {Cartesian3} [right] The right hand side Cartesian.\n   * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n   * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n   * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n   */\n  equalsEpsilon(right, relativeEpsilon, absoluteEpsilon) {\n    return Cartesian3.equalsEpsilon(\n      this,\n      right,\n      relativeEpsilon,\n      absoluteEpsilon,\n    );\n  }\n\n  /**\n   * Creates a string representing this Cartesian in the format '(x, y, z)'.\n   *\n   * @returns {string} A string representing this Cartesian in the format '(x, y, z)'.\n   */\n  toString() {\n    return `(${this.x}, ${this.y}, ${this.z})`;\n  }\n}\n\n/**\n * Creates a Cartesian3 instance from an existing Cartesian4.  This simply takes the\n * x, y, and z properties of the Cartesian4 and drops w.\n * @function\n *\n * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian3 instance from.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nCartesian3.fromCartesian4 = Cartesian3.clone;\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nCartesian3.packedLength = 3;\n\n/**\n * Creates a Cartesian3 from three consecutive elements in an array.\n * @function\n *\n * @param {number[]} array The array whose three consecutive elements correspond to the x, y, and z components, respectively.\n * @param {number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n *\n * @example\n * // Create a Cartesian3 with (1.0, 2.0, 3.0)\n * const v = [1.0, 2.0, 3.0];\n * const p = Cesium.Cartesian3.fromArray(v);\n *\n * // Create a Cartesian3 with (1.0, 2.0, 3.0) using an offset into an array\n * const v2 = [0.0, 0.0, 1.0, 2.0, 3.0];\n * const p2 = Cesium.Cartesian3.fromArray(v2, 2);\n */\nCartesian3.fromArray = Cartesian3.unpack;\n\nconst distanceScratch = new Cartesian3();\n\nconst lerpScratch = new Cartesian3();\n\nconst angleBetweenScratch = new Cartesian3();\nconst angleBetweenScratch2 = new Cartesian3();\n\nconst mostOrthogonalAxisScratch = new Cartesian3();\n\nlet scratchN = new Cartesian3();\nlet scratchK = new Cartesian3();\n\n// To prevent a circular dependency, this value is overridden by Ellipsoid when Ellipsoid.default is set\nCartesian3._ellipsoidRadiiSquared = new Cartesian3(\n  6378137.0 * 6378137.0,\n  6378137.0 * 6378137.0,\n  6356752.3142451793 * 6356752.3142451793,\n);\n\n/**\n * An immutable Cartesian3 instance initialized to (0.0, 0.0, 0.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.ZERO = Object.freeze(new Cartesian3(0.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian3 instance initialized to (1.0, 1.0, 1.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.ONE = Object.freeze(new Cartesian3(1.0, 1.0, 1.0));\n\n/**\n * An immutable Cartesian3 instance initialized to (1.0, 0.0, 0.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.UNIT_X = Object.freeze(new Cartesian3(1.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian3 instance initialized to (0.0, 1.0, 0.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.UNIT_Y = Object.freeze(new Cartesian3(0.0, 1.0, 0.0));\n\n/**\n * An immutable Cartesian3 instance initialized to (0.0, 0.0, 1.0).\n *\n * @type {Cartesian3}\n * @constant\n */\nCartesian3.UNIT_Z = Object.freeze(new Cartesian3(0.0, 0.0, 1.0));\n\nexport default Cartesian3;\n","// @ts-check\n\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/** @import {TypedArray} from \"./globalTypes.js\"; */\n/** @import Color from \"./Color.js\"; */\n\n/**\n * A 4D Cartesian point.\n *\n * @see Cartesian2\n * @see Cartesian3\n * @see Packable\n */\nclass Cartesian4 {\n  /**\n   * @param {number} [x=0.0] The X component.\n   * @param {number} [y=0.0] The Y component.\n   * @param {number} [z=0.0] The Z component.\n   * @param {number} [w=0.0] The W component.\n   */\n  constructor(x, y, z, w) {\n    /**\n     * The X component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.x = x ?? 0.0;\n\n    /**\n     * The Y component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.y = y ?? 0.0;\n\n    /**\n     * The Z component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.z = z ?? 0.0;\n\n    /**\n     * The W component.\n     * @type {number}\n     * @default 0.0\n     */\n    this.w = w ?? 0.0;\n  }\n\n  /**\n   * Creates a Cartesian4 instance from x, y, z and w coordinates.\n   *\n   * @param {number} x The x coordinate.\n   * @param {number} y The y coordinate.\n   * @param {number} z The z coordinate.\n   * @param {number} w The w coordinate.\n   * @param {Cartesian4} [result] The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n   */\n  static fromElements(x, y, z, w, result) {\n    if (!defined(result)) {\n      return new Cartesian4(x, y, z, w);\n    }\n\n    result.x = x;\n    result.y = y;\n    result.z = z;\n    result.w = w;\n    return result;\n  }\n\n  /**\n   * Creates a Cartesian4 instance from a {@link Color}. <code>red</code>, <code>green</code>, <code>blue</code>,\n   * and <code>alpha</code> map to <code>x</code>, <code>y</code>, <code>z</code>, and <code>w</code>, respectively.\n   *\n   * @param {Color} color The source color.\n   * @param {Cartesian4} [result] The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n   */\n  static fromColor(color, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"color\", color);\n    //>>includeEnd('debug');\n    if (!defined(result)) {\n      return new Cartesian4(color.red, color.green, color.blue, color.alpha);\n    }\n\n    result.x = color.red;\n    result.y = color.green;\n    result.z = color.blue;\n    result.w = color.alpha;\n    return result;\n  }\n\n  /**\n   * Duplicates a Cartesian4 instance.\n   *\n   * @param {Cartesian4} cartesian The Cartesian to duplicate.\n   * @param {Cartesian4} [result] The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. (Returns undefined if cartesian is undefined)\n   */\n  static clone(cartesian, result) {\n    if (!defined(cartesian)) {\n      return undefined;\n    }\n\n    if (!defined(result)) {\n      return new Cartesian4(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n    }\n\n    result.x = cartesian.x;\n    result.y = cartesian.y;\n    result.z = cartesian.z;\n    result.w = cartesian.w;\n    return result;\n  }\n\n  /**\n   * Stores the provided instance into the provided array.\n   *\n   * @param {Cartesian4} value The value to pack.\n   * @param {number[]|TypedArray} array The array to pack into.\n   * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n   *\n   * @returns {number[]|TypedArray} The array that was packed into\n   */\n  static pack(value, array, startingIndex) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"value\", value);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n\n    array[startingIndex++] = value.x;\n    array[startingIndex++] = value.y;\n    array[startingIndex++] = value.z;\n    array[startingIndex] = value.w;\n\n    return array;\n  }\n\n  /**\n   * Retrieves an instance from a packed array.\n   *\n   * @param {number[]|TypedArray} array The packed array.\n   * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n   * @param {Cartesian4} [result] The object into which to store the result.\n   * @returns {Cartesian4}  The modified result parameter or a new Cartesian4 instance if one was not provided.\n   */\n  static unpack(array, startingIndex, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n\n    if (!defined(result)) {\n      result = new Cartesian4();\n    }\n    result.x = array[startingIndex++];\n    result.y = array[startingIndex++];\n    result.z = array[startingIndex++];\n    result.w = array[startingIndex];\n    return result;\n  }\n\n  /**\n   * Flattens an array of Cartesian4s into an array of components.\n   *\n   * @param {Cartesian4[]} array The array of cartesians to pack.\n   * @param {number[]|TypedArray} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements.\n   * @returns {number[]|TypedArray} The packed array.\n   */\n  static packArray(array, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    //>>includeEnd('debug');\n\n    const length = array.length;\n    const resultLength = length * 4;\n    if (!defined(result)) {\n      result = new Array(resultLength);\n    } else if (!Array.isArray(result) && result.length !== resultLength) {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\n        \"If result is a typed array, it must have exactly array.length * 4 elements\",\n      );\n      //>>includeEnd('debug');\n    } else if (result.length !== resultLength) {\n      /** @type {number[]} */ (result).length = resultLength;\n    }\n\n    for (let i = 0; i < length; ++i) {\n      Cartesian4.pack(array[i], result, i * 4);\n    }\n    return result;\n  }\n\n  /**\n   * Unpacks an array of cartesian components into an array of Cartesian4s.\n   *\n   * @param {number[]|TypedArray} array The array of components to unpack.\n   * @param {Cartesian4[]} [result] The array onto which to store the result.\n   * @returns {Cartesian4[]} The unpacked array.\n   */\n  static unpackArray(array, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"array\", array);\n    Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 4);\n    if (array.length % 4 !== 0) {\n      throw new DeveloperError(\"array length must be a multiple of 4.\");\n    }\n    //>>includeEnd('debug');\n\n    const length = array.length;\n    if (!defined(result)) {\n      result = new Array(length / 4);\n    } else {\n      result.length = length / 4;\n    }\n\n    for (let i = 0; i < length; i += 4) {\n      const index = i / 4;\n      result[index] = Cartesian4.unpack(array, i, result[index]);\n    }\n    return result;\n  }\n\n  /**\n   * Computes the value of the maximum component for the supplied Cartesian.\n   *\n   * @param {Cartesian4} cartesian The cartesian to use.\n   * @returns {number} The value of the maximum component.\n   */\n  static maximumComponent(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return Math.max(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n  }\n\n  /**\n   * Computes the value of the minimum component for the supplied Cartesian.\n   *\n   * @param {Cartesian4} cartesian The cartesian to use.\n   * @returns {number} The value of the minimum component.\n   */\n  static minimumComponent(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return Math.min(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n  }\n\n  /**\n   * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\n   *\n   * @param {Cartesian4} first A cartesian to compare.\n   * @param {Cartesian4} second A cartesian to compare.\n   * @param {Cartesian4} result The object into which to store the result.\n   * @returns {Cartesian4} A cartesian with the minimum components.\n   */\n  static minimumByComponent(first, second, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"first\", first);\n    Check.typeOf.object(\"second\", second);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.min(first.x, second.x);\n    result.y = Math.min(first.y, second.y);\n    result.z = Math.min(first.z, second.z);\n    result.w = Math.min(first.w, second.w);\n\n    return result;\n  }\n\n  /**\n   * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\n   *\n   * @param {Cartesian4} first A cartesian to compare.\n   * @param {Cartesian4} second A cartesian to compare.\n   * @param {Cartesian4} result The object into which to store the result.\n   * @returns {Cartesian4} A cartesian with the maximum components.\n   */\n  static maximumByComponent(first, second, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"first\", first);\n    Check.typeOf.object(\"second\", second);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.max(first.x, second.x);\n    result.y = Math.max(first.y, second.y);\n    result.z = Math.max(first.z, second.z);\n    result.w = Math.max(first.w, second.w);\n\n    return result;\n  }\n\n  /**\n   * Constrain a value to lie between two values.\n   *\n   * @param {Cartesian4} value The value to clamp.\n   * @param {Cartesian4} min The minimum bound.\n   * @param {Cartesian4} max The maximum bound.\n   * @param {Cartesian4} result The object into which to store the result.\n   * @returns {Cartesian4} The clamped value such that min <= result <= max.\n   */\n  static clamp(value, min, max, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"value\", value);\n    Check.typeOf.object(\"min\", min);\n    Check.typeOf.object(\"max\", max);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const x = CesiumMath.clamp(value.x, min.x, max.x);\n    const y = CesiumMath.clamp(value.y, min.y, max.y);\n    const z = CesiumMath.clamp(value.z, min.z, max.z);\n    const w = CesiumMath.clamp(value.w, min.w, max.w);\n\n    result.x = x;\n    result.y = y;\n    result.z = z;\n    result.w = w;\n\n    return result;\n  }\n\n  /**\n   * Computes the provided Cartesian's squared magnitude.\n   *\n   * @param {Cartesian4} cartesian The Cartesian instance whose squared magnitude is to be computed.\n   * @returns {number} The squared magnitude.\n   */\n  static magnitudeSquared(cartesian) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    //>>includeEnd('debug');\n\n    return (\n      cartesian.x * cartesian.x +\n      cartesian.y * cartesian.y +\n      cartesian.z * cartesian.z +\n      cartesian.w * cartesian.w\n    );\n  }\n\n  /**\n   * Computes the Cartesian's magnitude (length).\n   *\n   * @param {Cartesian4} cartesian The Cartesian instance whose magnitude is to be computed.\n   * @returns {number} The magnitude.\n   */\n  static magnitude(cartesian) {\n    return Math.sqrt(Cartesian4.magnitudeSquared(cartesian));\n  }\n\n  /**\n   * Computes the 4-space distance between two points.\n   *\n   * @param {Cartesian4} left The first point to compute the distance from.\n   * @param {Cartesian4} right The second point to compute the distance to.\n   * @returns {number} The distance between two points.\n   *\n   * @example\n   * // Returns 1.0\n   * const d = Cesium.Cartesian4.distance(\n   *   new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0),\n   *   new Cesium.Cartesian4(2.0, 0.0, 0.0, 0.0));\n   */\n  static distance(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian4.subtract(left, right, distanceScratch);\n    return Cartesian4.magnitude(distanceScratch);\n  }\n\n  /**\n   * Computes the squared distance between two points.  Comparing squared distances\n   * using this function is more efficient than comparing distances using {@link Cartesian4#distance}.\n   *\n   * @param {Cartesian4} left The first point to compute the distance from.\n   * @param {Cartesian4} right The second point to compute the distance to.\n   * @returns {number} The distance between two points.\n   *\n   * @example\n   * // Returns 4.0, not 2.0\n   * const d = Cesium.Cartesian4.distance(\n   *   new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0),\n   *   new Cesium.Cartesian4(3.0, 0.0, 0.0, 0.0));\n   */\n  static distanceSquared(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    Cartesian4.subtract(left, right, distanceScratch);\n    return Cartesian4.magnitudeSquared(distanceScratch);\n  }\n\n  /**\n   * Computes the normalized form of the supplied Cartesian.\n   *\n   * @param {Cartesian4} cartesian The Cartesian to be normalized.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static normalize(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const magnitude = Cartesian4.magnitude(cartesian);\n\n    result.x = cartesian.x / magnitude;\n    result.y = cartesian.y / magnitude;\n    result.z = cartesian.z / magnitude;\n    result.w = cartesian.w / magnitude;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (\n      isNaN(result.x) ||\n      isNaN(result.y) ||\n      isNaN(result.z) ||\n      isNaN(result.w)\n    ) {\n      throw new DeveloperError(\"normalized result is not a number\");\n    }\n    //>>includeEnd('debug');\n\n    return result;\n  }\n\n  /**\n   * Computes the dot (scalar) product of two Cartesians.\n   *\n   * @param {Cartesian4} left The first Cartesian.\n   * @param {Cartesian4} right The second Cartesian.\n   * @returns {number} The dot product.\n   */\n  static dot(left, right) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    //>>includeEnd('debug');\n\n    return (\n      left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w\n    );\n  }\n\n  /**\n   * Computes the componentwise product of two Cartesians.\n   *\n   * @param {Cartesian4} left The first Cartesian.\n   * @param {Cartesian4} right The second Cartesian.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static multiplyComponents(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x * right.x;\n    result.y = left.y * right.y;\n    result.z = left.z * right.z;\n    result.w = left.w * right.w;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise quotient of two Cartesians.\n   *\n   * @param {Cartesian4} left The first Cartesian.\n   * @param {Cartesian4} right The second Cartesian.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static divideComponents(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x / right.x;\n    result.y = left.y / right.y;\n    result.z = left.z / right.z;\n    result.w = left.w / right.w;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise sum of two Cartesians.\n   *\n   * @param {Cartesian4} left The first Cartesian.\n   * @param {Cartesian4} right The second Cartesian.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static add(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x + right.x;\n    result.y = left.y + right.y;\n    result.z = left.z + right.z;\n    result.w = left.w + right.w;\n    return result;\n  }\n\n  /**\n   * Computes the componentwise difference of two Cartesians.\n   *\n   * @param {Cartesian4} left The first Cartesian.\n   * @param {Cartesian4} right The second Cartesian.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static subtract(left, right, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"left\", left);\n    Check.typeOf.object(\"right\", right);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = left.x - right.x;\n    result.y = left.y - right.y;\n    result.z = left.z - right.z;\n    result.w = left.w - right.w;\n    return result;\n  }\n\n  /**\n   * Multiplies the provided Cartesian componentwise by the provided scalar.\n   *\n   * @param {Cartesian4} cartesian The Cartesian to be scaled.\n   * @param {number} scalar The scalar to multiply with.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static multiplyByScalar(cartesian, scalar, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.number(\"scalar\", scalar);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = cartesian.x * scalar;\n    result.y = cartesian.y * scalar;\n    result.z = cartesian.z * scalar;\n    result.w = cartesian.w * scalar;\n    return result;\n  }\n\n  /**\n   * Divides the provided Cartesian componentwise by the provided scalar.\n   *\n   * @param {Cartesian4} cartesian The Cartesian to be divided.\n   * @param {number} scalar The scalar to divide by.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static divideByScalar(cartesian, scalar, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.number(\"scalar\", scalar);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = cartesian.x / scalar;\n    result.y = cartesian.y / scalar;\n    result.z = cartesian.z / scalar;\n    result.w = cartesian.w / scalar;\n    return result;\n  }\n\n  /**\n   * Negates the provided Cartesian.\n   *\n   * @param {Cartesian4} cartesian The Cartesian to be negated.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static negate(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = -cartesian.x;\n    result.y = -cartesian.y;\n    result.z = -cartesian.z;\n    result.w = -cartesian.w;\n    return result;\n  }\n\n  /**\n   * Computes the absolute value of the provided Cartesian.\n   *\n   * @param {Cartesian4} cartesian The Cartesian whose absolute value is to be computed.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static abs(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    result.x = Math.abs(cartesian.x);\n    result.y = Math.abs(cartesian.y);\n    result.z = Math.abs(cartesian.z);\n    result.w = Math.abs(cartesian.w);\n    return result;\n  }\n\n  /**\n   * Computes the linear interpolation or extrapolation at t using the provided cartesians.\n   *\n   * @param {Cartesian4} start The value corresponding to t at 0.0.\n   * @param {Cartesian4}end The value corresponding to t at 1.0.\n   * @param {number} t The point along t at which to interpolate.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter.\n   */\n  static lerp(start, end, t, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"start\", start);\n    Check.typeOf.object(\"end\", end);\n    Check.typeOf.number(\"t\", t);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    Cartesian4.multiplyByScalar(end, t, lerpScratch);\n    result = Cartesian4.multiplyByScalar(start, 1.0 - t, result);\n    return Cartesian4.add(lerpScratch, result, result);\n  }\n\n  /**\n   * Returns the axis that is most orthogonal to the provided Cartesian.\n   *\n   * @param {Cartesian4} cartesian The Cartesian on which to find the most orthogonal axis.\n   * @param {Cartesian4} result The object onto which to store the result.\n   * @returns {Cartesian4} The most orthogonal axis.\n   */\n  static mostOrthogonalAxis(cartesian, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"cartesian\", cartesian);\n    Check.typeOf.object(\"result\", result);\n    //>>includeEnd('debug');\n\n    const f = Cartesian4.normalize(cartesian, mostOrthogonalAxisScratch);\n    Cartesian4.abs(f, f);\n\n    if (f.x <= f.y) {\n      if (f.x <= f.z) {\n        if (f.x <= f.w) {\n          result = Cartesian4.clone(Cartesian4.UNIT_X, result);\n        } else {\n          result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n        }\n      } else if (f.z <= f.w) {\n        result = Cartesian4.clone(Cartesian4.UNIT_Z, result);\n      } else {\n        result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n      }\n    } else if (f.y <= f.z) {\n      if (f.y <= f.w) {\n        result = Cartesian4.clone(Cartesian4.UNIT_Y, result);\n      } else {\n        result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n      }\n    } else if (f.z <= f.w) {\n      result = Cartesian4.clone(Cartesian4.UNIT_Z, result);\n    } else {\n      result = Cartesian4.clone(Cartesian4.UNIT_W, result);\n    }\n\n    return result;\n  }\n\n  /**\n   * Compares the provided Cartesians componentwise and returns\n   * <code>true</code> if they are equal, <code>false</code> otherwise.\n   *\n   * @param {Cartesian4} [left] The first Cartesian.\n   * @param {Cartesian4} [right] The second Cartesian.\n   * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n   */\n  static equals(left, right) {\n    return (\n      left === right ||\n      (defined(left) &&\n        defined(right) &&\n        left.x === right.x &&\n        left.y === right.y &&\n        left.z === right.z &&\n        left.w === right.w)\n    );\n  }\n\n  /**\n   * @param {Cartesian4} cartesian\n   * @param {number[]} array\n   * @param {number} offset\n   * @private\n   */\n  static equalsArray(cartesian, array, offset) {\n    return (\n      cartesian.x === array[offset] &&\n      cartesian.y === array[offset + 1] &&\n      cartesian.z === array[offset + 2] &&\n      cartesian.w === array[offset + 3]\n    );\n  }\n\n  /**\n   * Compares the provided Cartesians componentwise and returns\n   * <code>true</code> if they pass an absolute or relative tolerance test,\n   * <code>false</code> otherwise.\n   *\n   * @param {Cartesian4} [left] The first Cartesian.\n   * @param {Cartesian4} [right] The second Cartesian.\n   * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n   * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n   * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n   */\n  static equalsEpsilon(left, right, relativeEpsilon, absoluteEpsilon) {\n    return (\n      left === right ||\n      (defined(left) &&\n        defined(right) &&\n        CesiumMath.equalsEpsilon(\n          left.x,\n          right.x,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ) &&\n        CesiumMath.equalsEpsilon(\n          left.y,\n          right.y,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ) &&\n        CesiumMath.equalsEpsilon(\n          left.z,\n          right.z,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ) &&\n        CesiumMath.equalsEpsilon(\n          left.w,\n          right.w,\n          relativeEpsilon,\n          absoluteEpsilon,\n        ))\n    );\n  }\n\n  /**\n   * Duplicates this Cartesian4 instance.\n   *\n   * @param {Cartesian4} [result] The object onto which to store the result.\n   * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\n   */\n  clone(result) {\n    return Cartesian4.clone(this, result);\n  }\n\n  /**\n   * Compares this Cartesian against the provided Cartesian componentwise and returns\n   * <code>true</code> if they are equal, <code>false</code> otherwise.\n   *\n   * @param {Cartesian4} [right] The right hand side Cartesian.\n   * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n   */\n  equals(right) {\n    return Cartesian4.equals(this, right);\n  }\n\n  /**\n   * Compares this Cartesian against the provided Cartesian componentwise and returns\n   * <code>true</code> if they pass an absolute or relative tolerance test,\n   * <code>false</code> otherwise.\n   *\n   * @param {Cartesian4} [right] The right hand side Cartesian.\n   * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n   * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n   * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n   */\n  equalsEpsilon(right, relativeEpsilon, absoluteEpsilon) {\n    return Cartesian4.equalsEpsilon(\n      this,\n      right,\n      relativeEpsilon,\n      absoluteEpsilon,\n    );\n  }\n\n  /**\n   * Creates a string representing this Cartesian in the format '(x, y, z, w)'.\n   *\n   * @returns {string} A string representing the provided Cartesian in the format '(x, y, z, w)'.\n   */\n  toString() {\n    return `(${this.x}, ${this.y}, ${this.z}, ${this.w})`;\n  }\n\n  /**\n   * Packs an arbitrary floating point value to 4 values representable using uint8.\n   *\n   * @param {number} value A floating point number.\n   * @param {Cartesian4} [result] The Cartesian4 that will contain the packed float.\n   * @returns {Cartesian4} A Cartesian4 representing the float packed to values in x, y, z, and w.\n   */\n  static packFloat(value, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number(\"value\", value);\n    //>>includeEnd('debug');\n\n    if (!defined(result)) {\n      result = new Cartesian4();\n    }\n\n    // scratchU8Array and scratchF32Array are views into the same buffer\n    scratchF32Array[0] = value;\n\n    if (littleEndian) {\n      result.x = scratchU8Array[0];\n      result.y = scratchU8Array[1];\n      result.z = scratchU8Array[2];\n      result.w = scratchU8Array[3];\n    } else {\n      // convert from big-endian to little-endian\n      result.x = scratchU8Array[3];\n      result.y = scratchU8Array[2];\n      result.z = scratchU8Array[1];\n      result.w = scratchU8Array[0];\n    }\n    return result;\n  }\n\n  /**\n   * Unpacks a float packed using Cartesian4.packFloat.\n   *\n   * @param {Cartesian4} packedFloat A Cartesian4 containing a float packed to 4 values representable using uint8.\n   * @returns {number} The unpacked float.\n   * @private\n   */\n  static unpackFloat(packedFloat) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"packedFloat\", packedFloat);\n    //>>includeEnd('debug');\n\n    // scratchU8Array and scratchF32Array are views into the same buffer\n    if (littleEndian) {\n      scratchU8Array[0] = packedFloat.x;\n      scratchU8Array[1] = packedFloat.y;\n      scratchU8Array[2] = packedFloat.z;\n      scratchU8Array[3] = packedFloat.w;\n    } else {\n      // convert from little-endian to big-endian\n      scratchU8Array[0] = packedFloat.w;\n      scratchU8Array[1] = packedFloat.z;\n      scratchU8Array[2] = packedFloat.y;\n      scratchU8Array[3] = packedFloat.x;\n    }\n    return scratchF32Array[0];\n  }\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nCartesian4.packedLength = 4;\n\n/**\n * Creates a Cartesian4 from four consecutive elements in an array.\n * @function\n *\n * @param {number[]} array The array whose four consecutive elements correspond to the x, y, z, and w components, respectively.\n * @param {number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4}  The modified result parameter or a new Cartesian4 instance if one was not provided.\n *\n * @example\n * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0)\n * const v = [1.0, 2.0, 3.0, 4.0];\n * const p = Cesium.Cartesian4.fromArray(v);\n *\n * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0) using an offset into an array\n * const v2 = [0.0, 0.0, 1.0, 2.0, 3.0, 4.0];\n * const p2 = Cesium.Cartesian4.fromArray(v2, 2);\n */\nCartesian4.fromArray = Cartesian4.unpack;\n\nconst distanceScratch = new Cartesian4();\n\nconst lerpScratch = new Cartesian4();\n\nconst mostOrthogonalAxisScratch = new Cartesian4();\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.ZERO = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (1.0, 1.0, 1.0, 1.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.ONE = Object.freeze(new Cartesian4(1.0, 1.0, 1.0, 1.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (1.0, 0.0, 0.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_X = Object.freeze(new Cartesian4(1.0, 0.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 1.0, 0.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_Y = Object.freeze(new Cartesian4(0.0, 1.0, 0.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 1.0, 0.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_Z = Object.freeze(new Cartesian4(0.0, 0.0, 1.0, 0.0));\n\n/**\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 1.0).\n *\n * @type {Cartesian4}\n * @constant\n */\nCartesian4.UNIT_W = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 1.0));\n\n// scratchU8Array and scratchF32Array are views into the same buffer\nconst scratchF32Array = new Float32Array(1);\nconst scratchU8Array = new Uint8Array(scratchF32Array.buffer);\n\nconst testU32 = new Uint32Array([0x11223344]);\nconst testU8 = new Uint8Array(testU32.buffer);\nconst littleEndian = testU8[0] === 0x44;\n\nexport default Cartesian4;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport scaleToGeodeticSurface from \"./scaleToGeodeticSurface.js\";\n\n/**\n * A position defined by longitude, latitude, and height.\n * @alias Cartographic\n * @constructor\n *\n * @param {number} [longitude=0.0] The longitude, in radians.\n * @param {number} [latitude=0.0] The latitude, in radians.\n * @param {number} [height=0.0] The height, in meters, above the ellipsoid.\n *\n * @see Ellipsoid\n */\nfunction Cartographic(longitude, latitude, height) {\n  /**\n   * The longitude, in radians.\n   * @type {number}\n   * @default 0.0\n   */\n  this.longitude = longitude ?? 0.0;\n\n  /**\n   * The latitude, in radians.\n   * @type {number}\n   * @default 0.0\n   */\n  this.latitude = latitude ?? 0.0;\n\n  /**\n   * The height, in meters, above the ellipsoid.\n   * @type {number}\n   * @default 0.0\n   */\n  this.height = height ?? 0.0;\n}\n\n/**\n * Creates a new Cartographic instance from longitude and latitude\n * specified in radians.\n *\n * @param {number} longitude The longitude, in radians.\n * @param {number} latitude The latitude, in radians.\n * @param {number} [height=0.0] The height, in meters, above the ellipsoid.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\n */\nCartographic.fromRadians = function (longitude, latitude, height, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"longitude\", longitude);\n  Check.typeOf.number(\"latitude\", latitude);\n  //>>includeEnd('debug');\n\n  height = height ?? 0.0;\n\n  if (!defined(result)) {\n    return new Cartographic(longitude, latitude, height);\n  }\n\n  result.longitude = longitude;\n  result.latitude = latitude;\n  result.height = height;\n  return result;\n};\n\n/**\n * Creates a new Cartographic instance from longitude and latitude\n * specified in degrees.  The values in the resulting object will\n * be in radians.\n *\n * @param {number} longitude The longitude, in degrees.\n * @param {number} latitude The latitude, in degrees.\n * @param {number} [height=0.0] The height, in meters, above the ellipsoid.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\n */\nCartographic.fromDegrees = function (longitude, latitude, height, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"longitude\", longitude);\n  Check.typeOf.number(\"latitude\", latitude);\n  //>>includeEnd('debug');\n\n  longitude = CesiumMath.toRadians(longitude);\n  latitude = CesiumMath.toRadians(latitude);\n\n  return Cartographic.fromRadians(longitude, latitude, height, result);\n};\n\nconst cartesianToCartographicN = new Cartesian3();\nconst cartesianToCartographicP = new Cartesian3();\nconst cartesianToCartographicH = new Cartesian3();\n\n// To avoid circular dependencies, these are set by Ellipsoid when Ellipsoid.default is set.\nCartographic._ellipsoidOneOverRadii = new Cartesian3(\n  1.0 / 6378137.0,\n  1.0 / 6378137.0,\n  1.0 / 6356752.3142451793,\n);\nCartographic._ellipsoidOneOverRadiiSquared = new Cartesian3(\n  1.0 / (6378137.0 * 6378137.0),\n  1.0 / (6378137.0 * 6378137.0),\n  1.0 / (6356752.3142451793 * 6356752.3142451793),\n);\nCartographic._ellipsoidCenterToleranceSquared = CesiumMath.EPSILON1;\n\n/**\n * Creates a new Cartographic instance from a Cartesian position. The values in the\n * resulting object will be in radians.\n *\n * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the position lies.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\n */\nCartographic.fromCartesian = function (cartesian, ellipsoid, result) {\n  const oneOverRadii = defined(ellipsoid)\n    ? ellipsoid.oneOverRadii\n    : Cartographic._ellipsoidOneOverRadii;\n  const oneOverRadiiSquared = defined(ellipsoid)\n    ? ellipsoid.oneOverRadiiSquared\n    : Cartographic._ellipsoidOneOverRadiiSquared;\n  const centerToleranceSquared = defined(ellipsoid)\n    ? ellipsoid._centerToleranceSquared\n    : Cartographic._ellipsoidCenterToleranceSquared;\n\n  //`cartesian is required.` is thrown from scaleToGeodeticSurface\n  const p = scaleToGeodeticSurface(\n    cartesian,\n    oneOverRadii,\n    oneOverRadiiSquared,\n    centerToleranceSquared,\n    cartesianToCartographicP,\n  );\n\n  if (!defined(p)) {\n    return undefined;\n  }\n\n  let n = Cartesian3.multiplyComponents(\n    p,\n    oneOverRadiiSquared,\n    cartesianToCartographicN,\n  );\n  n = Cartesian3.normalize(n, n);\n\n  const h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH);\n\n  const longitude = Math.atan2(n.y, n.x);\n  const latitude = Math.asin(n.z);\n  const height =\n    CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h);\n\n  if (!defined(result)) {\n    return new Cartographic(longitude, latitude, height);\n  }\n  result.longitude = longitude;\n  result.latitude = latitude;\n  result.height = height;\n  return result;\n};\n\n/**\n * Creates a new Cartesian3 instance from a Cartographic input. The values in the inputted\n * object should be in radians.\n *\n * @param {Cartographic} cartographic Input to be converted into a Cartesian3 output.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the position lies.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The position\n */\nCartographic.toCartesian = function (cartographic, ellipsoid, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartographic\", cartographic);\n  //>>includeEnd('debug');\n\n  return Cartesian3.fromRadians(\n    cartographic.longitude,\n    cartographic.latitude,\n    cartographic.height,\n    ellipsoid,\n    result,\n  );\n};\n\n/**\n * Duplicates a Cartographic instance.\n *\n * @param {Cartographic} cartographic The cartographic to duplicate.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided. (Returns undefined if cartographic is undefined)\n */\nCartographic.clone = function (cartographic, result) {\n  if (!defined(cartographic)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new Cartographic(\n      cartographic.longitude,\n      cartographic.latitude,\n      cartographic.height,\n    );\n  }\n  result.longitude = cartographic.longitude;\n  result.latitude = cartographic.latitude;\n  result.height = cartographic.height;\n  return result;\n};\n\n/**\n * Compares the provided cartographics componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartographic} [left] The first cartographic.\n * @param {Cartographic} [right] The second cartographic.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCartographic.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.longitude === right.longitude &&\n      left.latitude === right.latitude &&\n      left.height === right.height)\n  );\n};\n\n/**\n * Compares the provided cartographics componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Cartographic} [left] The first cartographic.\n * @param {Cartographic} [right] The second cartographic.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nCartographic.equalsEpsilon = function (left, right, epsilon) {\n  epsilon = epsilon ?? 0;\n\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(left.longitude - right.longitude) <= epsilon &&\n      Math.abs(left.latitude - right.latitude) <= epsilon &&\n      Math.abs(left.height - right.height) <= epsilon)\n  );\n};\n\n/**\n * An immutable Cartographic instance initialized to (0.0, 0.0, 0.0).\n *\n * @type {Cartographic}\n * @constant\n */\nCartographic.ZERO = Object.freeze(new Cartographic(0.0, 0.0, 0.0));\n\n/**\n * Duplicates this instance.\n *\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\n */\nCartographic.prototype.clone = function (result) {\n  return Cartographic.clone(this, result);\n};\n\n/**\n * Compares the provided against this cartographic componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Cartographic} [right] The second cartographic.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCartographic.prototype.equals = function (right) {\n  return Cartographic.equals(this, right);\n};\n\n/**\n * Compares the provided against this cartographic componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Cartographic} [right] The second cartographic.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nCartographic.prototype.equalsEpsilon = function (right, epsilon) {\n  return Cartographic.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this cartographic in the format '(longitude, latitude, height)'.\n *\n * @returns {string} A string representing the provided cartographic in the format '(longitude, latitude, height)'.\n */\nCartographic.prototype.toString = function () {\n  return `(${this.longitude}, ${this.latitude}, ${this.height})`;\n};\nexport default Cartographic;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\n\n/**\n * Geocodes queries containing longitude and latitude coordinates and an optional height.\n * Query format: `longitude latitude (height)` with longitude/latitude in degrees and height in meters.\n *\n * @alias CartographicGeocoderService\n * @constructor\n */\nfunction CartographicGeocoderService() {}\n\nObject.defineProperties(CartographicGeocoderService.prototype, {\n  /**\n   * Gets the credit to display after a geocode is performed. Typically this is used to credit\n   * the geocoder service.\n   * @memberof CartographicGeocoderService.prototype\n   * @type {Credit|undefined}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return undefined;\n    },\n  },\n});\n\n/**\n * @function\n *\n * @param {string} query The query to be sent to the geocoder service\n * @returns {Promise<GeocoderService.Result[]>}\n */\nCartographicGeocoderService.prototype.geocode = function (query) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"query\", query);\n  //>>includeEnd('debug');\n\n  const splitQuery = query.match(/[^\\s,\\n]+/g);\n  if (splitQuery.length === 2 || splitQuery.length === 3) {\n    let longitude = +splitQuery[0];\n    let latitude = +splitQuery[1];\n    const height = splitQuery.length === 3 ? +splitQuery[2] : 300.0;\n\n    if (isNaN(longitude) && isNaN(latitude)) {\n      const coordTest = /^(\\d+.?\\d*)([nsew])/i;\n      for (let i = 0; i < splitQuery.length; ++i) {\n        const splitCoord = splitQuery[i].match(coordTest);\n        if (coordTest.test(splitQuery[i]) && splitCoord.length === 3) {\n          if (/^[ns]/i.test(splitCoord[2])) {\n            latitude = /^[n]/i.test(splitCoord[2])\n              ? +splitCoord[1]\n              : -splitCoord[1];\n          } else if (/^[ew]/i.test(splitCoord[2])) {\n            longitude = /^[e]/i.test(splitCoord[2])\n              ? +splitCoord[1]\n              : -splitCoord[1];\n          }\n        }\n      }\n    }\n\n    if (!isNaN(longitude) && !isNaN(latitude) && !isNaN(height)) {\n      const result = {\n        displayName: query,\n        destination: Cartesian3.fromDegrees(longitude, latitude, height),\n      };\n      return Promise.resolve([result]);\n    }\n  }\n  return Promise.resolve([]);\n};\nexport default CartographicGeocoderService;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport HermiteSpline from \"./HermiteSpline.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Spline from \"./Spline.js\";\n\nconst scratchTimeVec = new Cartesian4();\nconst scratchTemp0 = new Cartesian3();\nconst scratchTemp1 = new Cartesian3();\n\nfunction createEvaluateFunction(spline) {\n  const points = spline.points;\n  const times = spline.times;\n\n  if (points.length < 3) {\n    const t0 = times[0];\n    const invSpan = 1.0 / (times[1] - t0);\n\n    const p0 = points[0];\n    const p1 = points[1];\n\n    return function (time, result) {\n      if (!defined(result)) {\n        result = new Cartesian3();\n      }\n      const u = (time - t0) * invSpan;\n      return Cartesian3.lerp(p0, p1, u, result);\n    };\n  }\n\n  return function (time, result) {\n    if (!defined(result)) {\n      result = new Cartesian3();\n    }\n    const i = (spline._lastTimeIndex = spline.findTimeInterval(\n      time,\n      spline._lastTimeIndex,\n    ));\n    const u = (time - times[i]) / (times[i + 1] - times[i]);\n\n    const timeVec = scratchTimeVec;\n    timeVec.z = u;\n    timeVec.y = u * u;\n    timeVec.x = timeVec.y * u;\n    timeVec.w = 1.0;\n\n    let p0;\n    let p1;\n    let p2;\n    let p3;\n    let coefs;\n\n    if (i === 0) {\n      p0 = points[0];\n      p1 = points[1];\n      p2 = spline.firstTangent;\n\n      p3 = Cartesian3.subtract(points[2], p0, scratchTemp0);\n      Cartesian3.multiplyByScalar(p3, 0.5, p3);\n\n      coefs = Matrix4.multiplyByVector(\n        HermiteSpline.hermiteCoefficientMatrix,\n        timeVec,\n        timeVec,\n      );\n    } else if (i === points.length - 2) {\n      p0 = points[i];\n      p1 = points[i + 1];\n      p3 = spline.lastTangent;\n\n      p2 = Cartesian3.subtract(p1, points[i - 1], scratchTemp0);\n      Cartesian3.multiplyByScalar(p2, 0.5, p2);\n\n      coefs = Matrix4.multiplyByVector(\n        HermiteSpline.hermiteCoefficientMatrix,\n        timeVec,\n        timeVec,\n      );\n    } else {\n      p0 = points[i - 1];\n      p1 = points[i];\n      p2 = points[i + 1];\n      p3 = points[i + 2];\n      coefs = Matrix4.multiplyByVector(\n        CatmullRomSpline.catmullRomCoefficientMatrix,\n        timeVec,\n        timeVec,\n      );\n    }\n    result = Cartesian3.multiplyByScalar(p0, coefs.x, result);\n    Cartesian3.multiplyByScalar(p1, coefs.y, scratchTemp1);\n    Cartesian3.add(result, scratchTemp1, result);\n    Cartesian3.multiplyByScalar(p2, coefs.z, scratchTemp1);\n    Cartesian3.add(result, scratchTemp1, result);\n    Cartesian3.multiplyByScalar(p3, coefs.w, scratchTemp1);\n    return Cartesian3.add(result, scratchTemp1, result);\n  };\n}\n\nconst firstTangentScratch = new Cartesian3();\nconst lastTangentScratch = new Cartesian3();\n\n/**\n * A Catmull-Rom spline is a cubic spline where the tangent at control points,\n * except the first and last, are computed using the previous and next control points.\n * Catmull-Rom splines are in the class C<sup>1</sup>.\n *\n * @alias CatmullRomSpline\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n *                The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Cartesian3[]} options.points The array of {@link Cartesian3} control points.\n * @param {Cartesian3} [options.firstTangent] The tangent of the curve at the first control point.\n *                     If the tangent is not given, it will be estimated.\n * @param {Cartesian3} [options.lastTangent] The tangent of the curve at the last control point.\n *                     If the tangent is not given, it will be estimated.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n *\n * @example\n * // spline above the earth from Philadelphia to Los Angeles\n * const spline = new Cesium.CatmullRomSpline({\n *     times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],\n *     points : [\n *         new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n *         new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n *         new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n *         new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n *         new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n *     ]\n * });\n *\n * const p0 = spline.evaluate(times[i]);         // equal to positions[i]\n * const p1 = spline.evaluate(times[i] + delta); // interpolated value when delta < times[i + 1] - times[i]\n *\n * @see ConstantSpline\n * @see SteppedSpline\n * @see HermiteSpline\n * @see LinearSpline\n * @see QuaternionSpline\n * @see MorphWeightSpline\n */\nfunction CatmullRomSpline(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const points = options.points;\n  const times = options.times;\n  let firstTangent = options.firstTangent;\n  let lastTangent = options.lastTangent;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"points\", points);\n  Check.defined(\"times\", times);\n  Check.typeOf.number.greaterThanOrEquals(\"points.length\", points.length, 2);\n  Check.typeOf.number.equals(\n    \"times.length\",\n    \"points.length\",\n    times.length,\n    points.length,\n  );\n  //>>includeEnd('debug');\n\n  if (points.length > 2) {\n    if (!defined(firstTangent)) {\n      firstTangent = firstTangentScratch;\n      Cartesian3.multiplyByScalar(points[1], 2.0, firstTangent);\n      Cartesian3.subtract(firstTangent, points[2], firstTangent);\n      Cartesian3.subtract(firstTangent, points[0], firstTangent);\n      Cartesian3.multiplyByScalar(firstTangent, 0.5, firstTangent);\n    }\n\n    if (!defined(lastTangent)) {\n      const n = points.length - 1;\n      lastTangent = lastTangentScratch;\n      Cartesian3.multiplyByScalar(points[n - 1], 2.0, lastTangent);\n      Cartesian3.subtract(points[n], lastTangent, lastTangent);\n      Cartesian3.add(lastTangent, points[n - 2], lastTangent);\n      Cartesian3.multiplyByScalar(lastTangent, 0.5, lastTangent);\n    }\n  }\n\n  this._times = times;\n  this._points = points;\n  this._firstTangent = Cartesian3.clone(firstTangent);\n  this._lastTangent = Cartesian3.clone(lastTangent);\n\n  this._evaluateFunction = createEvaluateFunction(this);\n  this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(CatmullRomSpline.prototype, {\n  /**\n   * An array of times for the control points.\n   *\n   * @memberof CatmullRomSpline.prototype\n   *\n   * @type {number[]}\n   * @readonly\n   */\n  times: {\n    get: function () {\n      return this._times;\n    },\n  },\n\n  /**\n   * An array of {@link Cartesian3} control points.\n   *\n   * @memberof CatmullRomSpline.prototype\n   *\n   * @type {Cartesian3[]}\n   * @readonly\n   */\n  points: {\n    get: function () {\n      return this._points;\n    },\n  },\n\n  /**\n   * The tangent at the first control point.\n   *\n   * @memberof CatmullRomSpline.prototype\n   *\n   * @type {Cartesian3}\n   * @readonly\n   */\n  firstTangent: {\n    get: function () {\n      return this._firstTangent;\n    },\n  },\n\n  /**\n   * The tangent at the last control point.\n   *\n   * @memberof CatmullRomSpline.prototype\n   *\n   * @type {Cartesian3}\n   * @readonly\n   */\n  lastTangent: {\n    get: function () {\n      return this._lastTangent;\n    },\n  },\n});\n\n/**\n * @private\n */\nCatmullRomSpline.catmullRomCoefficientMatrix = new Matrix4(\n  -0.5,\n  1.0,\n  -0.5,\n  0.0,\n  1.5,\n  -2.5,\n  0.0,\n  1.0,\n  -1.5,\n  2.0,\n  0.5,\n  0.0,\n  0.5,\n  -0.5,\n  0.0,\n  0.0,\n);\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {number} time The time.\n * @returns {number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nCatmullRomSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around to the updated animation.\n */\nCatmullRomSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nCatmullRomSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nCatmullRomSpline.prototype.evaluate = function (time, result) {\n  return this._evaluateFunction(time, result);\n};\nexport default CatmullRomSpline;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cesium3DTilesTerrainGeometryProcessor from \"./Cesium3DTilesTerrainGeometryProcessor.js\";\nimport CesiumMath from \"./Math.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Frozen from \"./Frozen.js\";\nimport Intersections2D from \"./Intersections2D.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TerrainData from \"./TerrainData.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\n\n/**\n * Terrain data for a single tile where the terrain data is represented as a glb (binary glTF).\n *\n * @alias Cesium3DTilesTerrainData\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Object.<string,*>} options.gltf The parsed glTF JSON.\n * @param {number} options.minimumHeight The minimum terrain height within the tile, in meters above the ellipsoid.\n * @param {number} options.maximumHeight The maximum terrain height within the tile, in meters above the ellipsoid.\n * @param {BoundingSphere} options.boundingSphere A sphere bounding all of the vertices in the mesh.\n * @param {OrientedBoundingBox} options.orientedBoundingBox An oriented bounding box containing all of the vertices in the mesh.\n * @param {Cartesian3} options.horizonOcclusionPoint The horizon occlusion point of the mesh. If this point\n *                      is below the horizon, the entire tile is assumed to be below the horizon as well.\n *                      The point is expressed in ellipsoid-scaled coordinates.\n * @param {number} options.skirtHeight The height of the skirt to add on the edges of the tile.\n * @param {boolean} [options.requestVertexNormals=false] Indicates whether normals should be loaded.\n * @param {boolean} [options.requestWaterMask=false] Indicates whether water mask data should be loaded.\n * @param {Credit[]} [options.credits] Array of credits for this tile.\n * @param {number} [options.childTileMask=15] A bit mask indicating which of this tile's four children exist.\n *                 If a child's bit is set, geometry will be requested for that tile as well when it\n *                 is needed.  If the bit is cleared, the child tile is not requested and geometry is\n *                 instead upsampled from the parent.  The bit values are as follows:\n *                 <table>\n *                  <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n *                  <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n *                  <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n *                  <tr><td>2</td><td>4</td><td>Northwest</td></tr>\n *                  <tr><td>3</td><td>8</td><td>Northeast</td></tr>\n *                 </table>\n * @param {Uint8Array} [options.waterMask] The buffer containing the water mask.\n * @see TerrainData\n * @see QuantizedMeshTerrainData\n * @see HeightmapTerrainData\n * @see GoogleEarthEnterpriseTerrainData\n */\nfunction Cesium3DTilesTerrainData(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug)\n  Check.defined(\"options.gltf\", options.gltf);\n  Check.typeOf.number(\"options.minimumHeight\", options.minimumHeight);\n  Check.typeOf.number(\"options.maximumHeight\", options.maximumHeight);\n  Check.typeOf.object(\"options.boundingSphere\", options.boundingSphere);\n  Check.typeOf.object(\n    \"option.orientedBoundingBox\",\n    options.orientedBoundingBox,\n  );\n  Check.typeOf.object(\n    \"options.horizonOcclusionPoint\",\n    options.horizonOcclusionPoint,\n  );\n  Check.typeOf.number(\"options.skirtHeight\", options.skirtHeight);\n  //>>includeEnd('debug');\n\n  this._minimumHeight = options.minimumHeight;\n  this._maximumHeight = options.maximumHeight;\n  this._skirtHeight = options.skirtHeight;\n  this._boundingSphere = BoundingSphere.clone(\n    options.boundingSphere,\n    new BoundingSphere(),\n  );\n  this._orientedBoundingBox = OrientedBoundingBox.clone(\n    options.orientedBoundingBox,\n    new OrientedBoundingBox(),\n  );\n  this._horizonOcclusionPoint = Cartesian3.clone(\n    options.horizonOcclusionPoint,\n    new Cartesian3(),\n  );\n  this._hasVertexNormals = options.requestVertexNormals ?? false;\n  this._hasWaterMask = options.requestWaterMask ?? false;\n  this._hasWebMercatorT = true;\n  this._credits = options.credits;\n  this._childTileMask = options.childTileMask ?? 15;\n  this._gltf = options.gltf;\n\n  /**\n   * @private\n   * @type {TerrainMesh|undefined}\n   */\n  this._mesh = undefined;\n\n  this._waterMask = options.waterMask;\n}\n\nObject.defineProperties(Cesium3DTilesTerrainData.prototype, {\n  /**\n   * An array of credits for this tile.\n   * @memberof Cesium3DTilesTerrainData.prototype\n   * @type {Credit[]|undefined}\n   */\n  credits: {\n    get: function () {\n      return this._credits;\n    },\n  },\n  /**\n   * The water mask included in this terrain data, if any. A water mask is a rectangular\n   * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n   * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n   * @memberof Cesium3DTilesTerrainData.prototype\n   * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement|ImageBitmap|undefined}\n   */\n  waterMask: {\n    get: function () {\n      return this._waterMask;\n    },\n  },\n});\n\n/**\n * Returns the terrain height at a specified longitude and latitude, or undefined if the mesh is undefined.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {number} longitude The longitude in radians.\n * @param {number} latitude The latitude in radians.\n * @returns {number|undefined} The terrain height at the specified position, or undefined if the mesh is undefined.\n *          If the position is outside the rectangle, this method will extrapolate the height,\n *          which is likely to be wildly incorrect for positions far outside the rectangle.\n */\nCesium3DTilesTerrainData.prototype.interpolateHeight = function (\n  rectangle,\n  longitude,\n  latitude,\n) {\n  const mesh = this._mesh;\n  if (mesh === undefined) {\n    return undefined;\n  }\n\n  const height = interpolateMeshHeight(mesh, rectangle, longitude, latitude);\n  return height;\n};\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link TerrainData#childTileMask}. The given child tile coordinates are assumed\n * to be one of the four children of this tile. If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {number} thisX The tile X coordinate of this (the parent) tile.\n * @param {number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {number} childX The tile X coordinate of the child tile to check for availability.\n * @param {number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {boolean} True if the child tile is available; otherwise, false.\n */\nCesium3DTilesTerrainData.prototype.isChildAvailable = function (\n  thisX,\n  thisY,\n  childX,\n  childY,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"thisX\", thisX);\n  Check.typeOf.number(\"thisY\", thisY);\n  Check.typeOf.number(\"childX\", childX);\n  Check.typeOf.number(\"childY\", childY);\n  //>>includeEnd('debug');\n\n  let bitNumber = 2; // northwest child\n  if (childX !== thisX * 2) {\n    ++bitNumber; // east child\n  }\n  if (childY !== thisY * 2) {\n    bitNumber -= 2; // south child\n  }\n\n  return (this._childTileMask & (1 << bitNumber)) !== 0;\n};\n\nconst createMeshTaskName = \"createVerticesFromCesium3DTilesTerrain\";\nconst createMeshTaskProcessorNoThrottle = new TaskProcessor(createMeshTaskName);\nconst createMeshTaskProcessorThrottle = new TaskProcessor(\n  createMeshTaskName,\n  TerrainData.maximumAsynchronousTasks,\n);\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n * @param {boolean} [options.throttle=true] If true, indicates that this operation will need to be retried if too many asynchronous mesh creations are already in progress.\n * @returns {Promise.<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n *          asynchronous mesh creations are already in progress and the operation should\n *          be retried later.\n */\nCesium3DTilesTerrainData.prototype.createMesh = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug)\n  Check.typeOf.object(\"options.tilingScheme\", options.tilingScheme);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  Check.typeOf.number(\"options.level\", options.level);\n  //>>includeEnd('debug');\n\n  const throttle = options.throttle ?? true;\n  const createMeshTaskProcessor = throttle\n    ? createMeshTaskProcessorThrottle\n    : createMeshTaskProcessorNoThrottle;\n\n  const tilingScheme = options.tilingScheme;\n  const ellipsoid = tilingScheme.ellipsoid;\n  const x = options.x;\n  const y = options.y;\n  const level = options.level;\n  const rectangle = tilingScheme.tileXYToRectangle(\n    x,\n    y,\n    level,\n    new Rectangle(),\n  );\n\n  const gltf = this._gltf;\n  const verticesPromise = createMeshTaskProcessor.scheduleTask({\n    ellipsoid: ellipsoid,\n    rectangle: rectangle,\n    hasVertexNormals: this._hasVertexNormals,\n    hasWaterMask: this._hasWaterMask,\n    hasWebMercatorT: this._hasWebMercatorT,\n    gltf: gltf,\n    minimumHeight: this._minimumHeight,\n    maximumHeight: this._maximumHeight,\n    boundingSphere: this._boundingSphere,\n    orientedBoundingBox: this._orientedBoundingBox,\n    horizonOcclusionPoint: this._horizonOcclusionPoint,\n    skirtHeight: this._skirtHeight,\n    exaggeration: options.exaggeration,\n    exaggerationRelativeHeight: options.exaggerationRelativeHeight,\n  });\n\n  if (!defined(verticesPromise)) {\n    // Too many active requests. Postponed.\n    return undefined;\n  }\n\n  const that = this;\n  return Promise.resolve(verticesPromise).then(function (result) {\n    const taskResult = result;\n\n    // Need to re-clone and re-wrap all buffers and complex objects to put them back into their normal state\n    const encoding = TerrainEncoding.clone(\n      taskResult.encoding,\n      new TerrainEncoding(),\n    );\n    const vertices = new Float32Array(taskResult.verticesBuffer);\n    const vertexCount = vertices.length / encoding.stride;\n    const vertexCountWithoutSkirts = taskResult.vertexCountWithoutSkirts;\n    // For consistency with glTF spec, 16 bit index buffer can't contain 65535\n    const SizedIndexType = vertexCount <= 65535 ? Uint16Array : Uint32Array;\n    const indices = new SizedIndexType(taskResult.indicesBuffer);\n    const westIndices = new SizedIndexType(taskResult.westIndicesBuffer);\n    const eastIndices = new SizedIndexType(taskResult.eastIndicesBuffer);\n    const southIndices = new SizedIndexType(taskResult.southIndicesBuffer);\n    const northIndices = new SizedIndexType(taskResult.northIndicesBuffer);\n    const indexCountWithoutSkirts = taskResult.indexCountWithoutSkirts;\n    const minimumHeight = that._minimumHeight;\n    const maximumHeight = that._maximumHeight;\n    const center = Cartesian3.clone(encoding.center, new Cartesian3());\n    const boundingSphere = BoundingSphere.clone(\n      that._boundingSphere,\n      new BoundingSphere(),\n    );\n    const horizonOcclusionPoint = Cartesian3.clone(\n      that._horizonOcclusionPoint,\n      new Cartesian3(),\n    );\n    const orientedBoundingBox = OrientedBoundingBox.clone(\n      that._orientedBoundingBox,\n      new OrientedBoundingBox(),\n    );\n\n    const mesh = new TerrainMesh(\n      center,\n      vertices,\n      indices,\n      indexCountWithoutSkirts,\n      vertexCountWithoutSkirts,\n      minimumHeight,\n      maximumHeight,\n      rectangle,\n      boundingSphere,\n      horizonOcclusionPoint,\n      encoding.stride,\n      orientedBoundingBox,\n      encoding,\n      westIndices,\n      southIndices,\n      eastIndices,\n      northIndices,\n    );\n\n    that._mesh = mesh;\n\n    return Promise.resolve(mesh);\n  });\n};\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data synchronously.\n *\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n * @returns {Promise.<TerrainMesh>} A promise for the terrain mesh.\n */\nCesium3DTilesTerrainData.prototype._createMeshSync = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug)\n  Check.typeOf.object(\"options.tilingScheme\", options.tilingScheme);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  Check.typeOf.number(\"options.level\", options.level);\n  //>>includeEnd('debug');\n\n  const tilingScheme = options.tilingScheme;\n  const ellipsoid = tilingScheme.ellipsoid;\n  const x = options.x;\n  const y = options.y;\n  const level = options.level;\n  const rectangle = tilingScheme.tileXYToRectangle(\n    x,\n    y,\n    level,\n    new Rectangle(),\n  );\n\n  const meshPromise = Cesium3DTilesTerrainGeometryProcessor.createMesh({\n    ellipsoid: ellipsoid,\n    rectangle: rectangle,\n    hasVertexNormals: this._hasVertexNormals,\n    hasWebMercatorT: this._hasWebMercatorT,\n    gltf: this._gltf,\n    minimumHeight: this._minimumHeight,\n    maximumHeight: this._maximumHeight,\n    boundingSphere: this._boundingSphere,\n    orientedBoundingBox: this._orientedBoundingBox,\n    horizonOcclusionPoint: this._horizonOcclusionPoint,\n    skirtHeight: this._skirtHeight,\n    exaggeration: options.exaggeration,\n    exaggerationRelativeHeight: options.exaggerationRelativeHeight,\n  });\n\n  const that = this;\n  return Promise.resolve(meshPromise).then(function (mesh) {\n    that._mesh = mesh;\n    return Promise.resolve(mesh);\n  });\n};\n\n/**\n * Upsamples this terrain data for use by a descendant tile.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<TerrainData>|undefined} A promise for upsampled terrain data for the descendant tile, or undefined if createMesh has not been called yet or too many asynchronous upsample operations are in progress and the request has been deferred.\n */\nCesium3DTilesTerrainData.prototype.upsample = function (\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  // mesh is not defined, so there are no UVs yet, so exit early\n  const mesh = this._mesh;\n  if (mesh === undefined) {\n    return undefined;\n  }\n\n  const isSynchronous = false;\n  const upsampledTerrainData = upsampleMesh(\n    isSynchronous,\n    mesh,\n    this._skirtHeight,\n    this._credits,\n    tilingScheme,\n    thisX,\n    thisY,\n    thisLevel,\n    descendantX,\n    descendantY,\n    descendantLevel,\n  );\n  return upsampledTerrainData;\n};\n\n/**\n * Upsamples this terrain data for use by a descendant tile synchronously.\n *\n * @private\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<TerrainData>|undefined} A promise for upsampled terrain data for the descendant tile, or undefined if createMesh has not been called yet.\n */\nCesium3DTilesTerrainData.prototype._upsampleSync = function (\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  // mesh is not defined, so there are no UVs yet, so exit early\n  const mesh = this._mesh;\n  if (mesh === undefined) {\n    return undefined;\n  }\n\n  const isSynchronous = true;\n  const upsampledTerrainData = upsampleMesh(\n    isSynchronous,\n    mesh,\n    this._skirtHeight,\n    this._credits,\n    tilingScheme,\n    thisX,\n    thisY,\n    thisLevel,\n    descendantX,\n    descendantY,\n    descendantLevel,\n  );\n  return upsampledTerrainData;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data. If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server. This method should return true for instances\n * returned from a call to {@link Cesium3DTilesTerrainData#upsample}.\n *\n * @returns {boolean} True if this instance was created by upsampling; otherwise, false.\n */\nCesium3DTilesTerrainData.prototype.wasCreatedByUpsampling = function () {\n  return false;\n};\n\n/**\n * @private\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {TerrainMesh} options.terrainMesh The terrain mesh.\n * @param {number} options.skirtHeight The height of the skirt to add on the edges of the tile.\n * @param {Credit[]} [options.credits] Array of credits for this tile.\n */\nfunction Cesium3DTilesUpsampleTerrainData(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug)\n  Check.defined(\"options.terrainMesh\", options.terrainMesh);\n  Check.defined(\"options.skirtHeight\", options.skirtHeight);\n  //>>includeEnd('debug');\n\n  this._mesh = options.terrainMesh;\n  this._skirtHeight = options.skirtHeight;\n  this._credits = options.credits;\n}\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n * @param {boolean} [options.throttle=true] If true, indicates that this operation will need to be retried if too many asynchronous mesh creations are already in progress.\n * @returns {Promise.<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many asynchronous mesh creations are already in progress and the operation should be retried later.\n */\nCesium3DTilesUpsampleTerrainData.prototype.createMesh = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.tilingScheme\", options.tilingScheme);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  Check.typeOf.number(\"options.level\", options.level);\n  //>>includeEnd('debug');\n\n  return Promise.resolve(this._mesh);\n};\n\n/**\n * Upsamples this terrain data for use by a descendant tile.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<TerrainData>|undefined} A promise for upsampled terrain data for the descendant tile, or undefined if too many asynchronous upsample operations are in progress and the request has been deferred.\n */\nCesium3DTilesUpsampleTerrainData.prototype.upsample = function (\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  const isSynchronous = false;\n  const upsampledTerrainData = upsampleMesh(\n    isSynchronous,\n    this._mesh,\n    this._skirtHeight,\n    this._credits,\n    tilingScheme,\n    thisX,\n    thisY,\n    thisLevel,\n    descendantX,\n    descendantY,\n    descendantLevel,\n  );\n  return upsampledTerrainData;\n};\n\n/**\n * Upsamples this terrain data for use by a descendant tile synchronously.\n *\n * @private\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<TerrainData>} A promise for upsampled terrain data for the descendant tile.\n */\nCesium3DTilesUpsampleTerrainData.prototype._upsampleSync = function (\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  const isSynchronous = true;\n  return upsampleMesh(\n    isSynchronous,\n    this._mesh,\n    this._skirtHeight,\n    this._credits,\n    tilingScheme,\n    thisX,\n    thisY,\n    thisLevel,\n    descendantX,\n    descendantY,\n    descendantLevel,\n  );\n};\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {number} longitude The longitude in radians.\n * @param {number} latitude The latitude in radians.\n * @returns {number} The terrain height at the specified position. If the position is outside the rectangle, this method will extrapolate the height, which is likely to be wildly incorrect for positions far outside the rectangle.\n */\nCesium3DTilesUpsampleTerrainData.prototype.interpolateHeight = function (\n  rectangle,\n  longitude,\n  latitude,\n) {\n  const mesh = this._mesh;\n  const height = interpolateMeshHeight(mesh, rectangle, longitude, latitude);\n  return height;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data. If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server. This method should return true for instances\n * returned from a call to {@link TerrainData#upsample}.\n *\n * @returns {boolean} True if this instance was created by upsampling; otherwise, false.\n */\nCesium3DTilesUpsampleTerrainData.prototype.wasCreatedByUpsampling =\n  function () {\n    return true;\n  };\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link TerrainData#childTileMask}. The given child tile coordinates are assumed\n * to be one of the four children of this tile. If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {number} _thisX The tile X coordinate of this (the parent) tile.\n * @param {number} _thisY The tile Y coordinate of this (the parent) tile.\n * @param {number} _childX The tile X coordinate of the child tile to check for availability.\n * @param {number} _childY The tile Y coordinate of the child tile to check for availability.\n * @returns {boolean} True if the child tile is available; otherwise, false.\n */\nCesium3DTilesUpsampleTerrainData.prototype.isChildAvailable = function (\n  _thisX,\n  _thisY,\n  _childX,\n  _childY,\n) {\n  // upsample tiles are dynamic so they don't have children\n  return false;\n};\n\nObject.defineProperties(Cesium3DTilesUpsampleTerrainData.prototype, {\n  /**\n   * An array of credits for this tile.\n   * @memberof Cesium3DTilesUpsampleTerrainData.prototype\n   * @type {Credit[]|undefined}\n   */\n  credits: {\n    get: function () {\n      return this._credits;\n    },\n  },\n  /**\n   * The water mask included in this terrain data, if any. A water mask is a rectangular\n   * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n   * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n   * @memberof Cesium3DTilesUpsampleTerrainData.prototype\n   * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement|ImageBitmap|undefined}\n   */\n  waterMask: {\n    get: function () {\n      // Note: watermask not needed because there's a fallback in another file that checks for ancestor tile water mask\n      return undefined;\n    },\n  },\n});\n\nconst upsampleTaskProcessor = new TaskProcessor(\n  \"upsampleVerticesFromCesium3DTilesTerrain\",\n  TerrainData.maximumAsynchronousTasks,\n);\n\n/**\n * Upsamples this terrain data for use by a descendant tile.\n * @private\n * @param {boolean} synchronous\n * @param {TerrainMesh} thisMesh The mesh that is being upsampled\n * @param {number} thisSkirtHeight The mesh's skirt height\n * @param {Credit[]|undefined} credits The credits\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise.<TerrainData>|undefined} A promise for upsampled terrain data for the descendant tile, or undefined if too many asynchronous upsample operations are in progress and the request has been deferred.\n */\nfunction upsampleMesh(\n  synchronous,\n  thisMesh,\n  thisSkirtHeight,\n  credits,\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  //>>includeStart('debug', pragmas.debug)\n  Check.typeOf.bool(\"synchronous\", synchronous);\n  Check.typeOf.object(\"thisMesh\", thisMesh);\n  Check.typeOf.number(\"thisSkirtHeight\", thisSkirtHeight);\n  Check.typeOf.object(\"tilingScheme\", tilingScheme);\n  Check.typeOf.number(\"thisX\", thisX);\n  Check.typeOf.number(\"thisY\", thisY);\n  Check.typeOf.number(\"thisLevel\", thisLevel);\n  Check.typeOf.number(\"descendantX\", descendantX);\n  Check.typeOf.number(\"descendantY\", descendantY);\n  Check.typeOf.number(\"descendantLevel\", descendantLevel);\n  //>>includeEnd('debug');\n\n  const levelDifference = descendantLevel - thisLevel;\n  if (levelDifference > 1) {\n    throw new DeveloperError(\n      \"Upsampling through more than one level at a time is not currently supported.\",\n    );\n  }\n\n  const upsampleSkirtHeight = thisSkirtHeight * 0.5;\n  const isEastChild = thisX * 2 !== descendantX;\n  const isNorthChild = thisY * 2 === descendantY;\n  const upsampleRectangle = tilingScheme.tileXYToRectangle(\n    descendantX,\n    descendantY,\n    descendantLevel,\n    new Rectangle(),\n  );\n  const ellipsoid = tilingScheme.ellipsoid;\n\n  const options = {\n    isEastChild: isEastChild,\n    isNorthChild: isNorthChild,\n    rectangle: upsampleRectangle,\n    ellipsoid: ellipsoid,\n    skirtHeight: upsampleSkirtHeight,\n    parentVertices: thisMesh.vertices,\n    parentIndices: thisMesh.indices,\n    parentVertexCountWithoutSkirts: thisMesh.vertexCountWithoutSkirts,\n    parentIndexCountWithoutSkirts: thisMesh.indexCountWithoutSkirts,\n    parentMinimumHeight: thisMesh.minimumHeight,\n    parentMaximumHeight: thisMesh.maximumHeight,\n    parentEncoding: thisMesh.encoding,\n  };\n\n  if (synchronous) {\n    const upsampledMesh =\n      Cesium3DTilesTerrainGeometryProcessor.upsampleMesh(options);\n\n    const upsampledTerrainData = new Cesium3DTilesUpsampleTerrainData({\n      terrainMesh: upsampledMesh,\n      skirtHeight: upsampleSkirtHeight,\n      credits: credits,\n    });\n\n    return Promise.resolve(upsampledTerrainData);\n  }\n\n  const upsamplePromise = upsampleTaskProcessor.scheduleTask(options);\n\n  if (upsamplePromise === undefined) {\n    // Postponed\n    return undefined;\n  }\n\n  return upsamplePromise.then(function (taskResult) {\n    // Need to re-clone and re-wrap all buffers and complex objects to put them back into their normal state\n    const encoding = TerrainEncoding.clone(\n      taskResult.encoding,\n      new TerrainEncoding(),\n    );\n    const stride = encoding.stride;\n    const vertices = new Float32Array(taskResult.verticesBuffer);\n    const vertexCount = vertices.length / stride;\n    const vertexCountWithoutSkirts = taskResult.vertexCountWithoutSkirts;\n    // For consistency with glTF spec, 16 bit index buffer can't contain 65535\n    const SizedIndexType = vertexCount <= 65535 ? Uint16Array : Uint32Array;\n    const indices = new SizedIndexType(taskResult.indicesBuffer);\n    const westIndices = new SizedIndexType(taskResult.westIndicesBuffer);\n    const eastIndices = new SizedIndexType(taskResult.eastIndicesBuffer);\n    const southIndices = new SizedIndexType(taskResult.southIndicesBuffer);\n    const northIndices = new SizedIndexType(taskResult.northIndicesBuffer);\n    const indexCountWithoutSkirts = taskResult.indexCountWithoutSkirts;\n    const minimumHeight = taskResult.minimumHeight;\n    const maximumHeight = taskResult.maximumHeight;\n    const center = Cartesian3.clone(encoding.center, new Cartesian3());\n    const boundingSphere = BoundingSphere.clone(\n      taskResult.boundingSphere,\n      new BoundingSphere(),\n    );\n    const horizonOcclusionPoint = Cartesian3.clone(\n      taskResult.horizonOcclusionPoint,\n      new Cartesian3(),\n    );\n    const orientedBoundingBox = OrientedBoundingBox.clone(\n      taskResult.orientedBoundingBox,\n      new OrientedBoundingBox(),\n    );\n\n    const upsampledMesh = new TerrainMesh(\n      center,\n      vertices,\n      indices,\n      indexCountWithoutSkirts,\n      vertexCountWithoutSkirts,\n      minimumHeight,\n      maximumHeight,\n      upsampleRectangle,\n      boundingSphere,\n      horizonOcclusionPoint,\n      stride,\n      orientedBoundingBox,\n      encoding,\n      westIndices,\n      southIndices,\n      eastIndices,\n      northIndices,\n    );\n\n    const upsampledTerrainData = new Cesium3DTilesUpsampleTerrainData({\n      terrainMesh: upsampledMesh,\n      skirtHeight: upsampleSkirtHeight,\n      credits: credits,\n    });\n\n    return Promise.resolve(upsampledTerrainData);\n  });\n}\n\nconst scratchUv0 = new Cartesian2();\nconst scratchUv1 = new Cartesian2();\nconst scratchUv2 = new Cartesian2();\nconst scratchBary = new Cartesian3();\n\n/**\n * Computes the terrain height at a specified longitude and latitude. Returns 0.0 if the position is outside the mesh.\n * @private\n * @param {TerrainMesh} mesh The terrain mesh.\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {number} longitude The longitude in radians.\n * @param {number} latitude The latitude in radians.\n * @returns {number} The terrain height at the specified position. If the position is outside the rectangle, this method will extrapolate the height, which is likely to be wildly incorrect for positions far outside the rectangle.\n */\nfunction interpolateMeshHeight(mesh, rectangle, longitude, latitude) {\n  const u = CesiumMath.clamp(\n    (longitude - rectangle.west) / rectangle.width,\n    0.0,\n    1.0,\n  );\n\n  const v = CesiumMath.clamp(\n    (latitude - rectangle.south) / rectangle.height,\n    0.0,\n    1.0,\n  );\n\n  const { vertices, encoding, indices } = mesh;\n\n  for (let i = 0; i < mesh.indexCountWithoutSkirts; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n\n    const uv0 = encoding.decodeTextureCoordinates(vertices, i0, scratchUv0);\n    const uv1 = encoding.decodeTextureCoordinates(vertices, i1, scratchUv1);\n    const uv2 = encoding.decodeTextureCoordinates(vertices, i2, scratchUv2);\n\n    const minU = Math.min(uv0.x, uv1.x, uv2.x);\n    const maxU = Math.max(uv0.x, uv1.x, uv2.x);\n    const minV = Math.min(uv0.y, uv1.y, uv2.y);\n    const maxV = Math.max(uv0.y, uv1.y, uv2.y);\n\n    if (u >= minU && u <= maxU && v >= minV && v <= maxV) {\n      const barycentric = Intersections2D.computeBarycentricCoordinates(\n        u,\n        v,\n        uv0.x,\n        uv0.y,\n        uv1.x,\n        uv1.y,\n        uv2.x,\n        uv2.y,\n        scratchBary,\n      );\n      if (\n        barycentric.x >= 0.0 &&\n        barycentric.y >= 0.0 &&\n        barycentric.z >= 0.0\n      ) {\n        const h0 = encoding.decodeHeight(vertices, i0);\n        const h1 = encoding.decodeHeight(vertices, i1);\n        const h2 = encoding.decodeHeight(vertices, i2);\n        const height =\n          barycentric.x * h0 + barycentric.y * h1 + barycentric.z * h2;\n        return height;\n      }\n    }\n  }\n\n  // Position does not lie in any triangle in this mesh.\n  // This should not happen often since we start by clamping to the rectangle.\n  return 0.0;\n}\n\nexport default Cesium3DTilesTerrainData;\n","import { MeshoptDecoder } from \"meshoptimizer\";\nimport AttributeCompression from \"./AttributeCompression.js\";\nimport Axis from \"../Scene/Axis.js\";\nimport AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\nimport binarySearch from \"./binarySearch.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport CesiumMath from \"./Math.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidalOccluder from \"./EllipsoidalOccluder.js\";\nimport Frozen from \"./Frozen.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\nimport Transforms from \"./Transforms.js\";\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\n\n/**\n * Contains functions to create a mesh from 3D Tiles terrain data.\n *\n * @namespace Cesium3DTilesTerrainGeometryProcessor\n *\n * @private\n */\nconst Cesium3DTilesTerrainGeometryProcessor = {};\n\n/**\n * Contains information about geometry-related vertex arrays in a glTF asset.\n * @private\n * @typedef GltfInfo\n *\n * @property {Float32Array} positions The decoded position attributes.\n * @property {Float32Array|undefined} normals The decoded normal attributes, or <code>undefined</code> if the glTF has no normals.\n * @property {Uint16Array|Uint32Array} indices The decoded indices.\n * @property {Uint16Array|Uint32Array} edgeIndicesWest The edge indices along the West side of the tile.\n * @property {Uint16Array|Uint32Array} edgeIndicesSouth The edge indices along the South side of the tile.\n * @property {Uint16Array|Uint32Array} edgeIndicesEast The edge indices along the East side of the tile.\n * @property {Uint16Array|Uint32Array} edgeIndicesNorth The edge indices along the North side of the tile.\n */\n\nconst scratchGltfInfo = {\n  positions: undefined,\n  normals: undefined,\n  indices: undefined,\n  edgeIndicesWest: undefined,\n  edgeIndicesSouth: undefined,\n  edgeIndicesEast: undefined,\n  edgeIndicesNorth: undefined,\n};\n\nconst scratchCenterCartographic = new Cartographic();\nconst scratchCenterCartesian = new Cartesian3();\nconst scratchEnuToEcef = new Matrix4();\nconst scratchEcefToEnu = new Matrix4();\nconst scratchTilesetTransform = new Matrix4();\nconst scratchMinimumPositionENU = new Cartesian3();\nconst scratchMaximumPositionENU = new Cartesian3();\nconst scratchPosLocal = new Cartesian3();\nconst scratchPosEcef = new Cartesian3();\nconst scratchCartographic = new Cartographic();\nconst scratchUV = new Cartesian2();\nconst scratchNormal = new Cartesian3();\nconst scratchNormalOct = new Cartesian2();\nconst scratchGeodeticSurfaceNormal = new Cartesian3();\nconst scratchPosEnu = new Cartesian3();\n\n/**\n * Compares two edge indices for sorting.\n * @private\n * @param {number} a The first edge index.\n * @param {number} b The second edge index.\n * @returns {number} A negative number if <code>a</code> is less than <code>b</code>, a positive number if <code>a</code> is greater than <code>b</code>, or zero if they are equal.\n */\nconst sortedEdgeCompare = function (a, b) {\n  return a - b;\n};\n\n/**\n * @typedef {object} Cesium3DTilesTerrainGeometryProcessor.CreateMeshOptions\n * @property {Ellipsoid} ellipsoid The ellipsoid.\n * @property {Rectangle} rectangle The rectangle covered by the tile.\n * @property {boolean} hasVertexNormals <code>true</code> if the tile has vertex normals.\n * @property {boolean} hasWebMercatorT <code>true</code> if the tile has Web Mercator T coordinates.\n * @property {Object.<string,*>} gltf The glTF JSON of the tile.\n * @property {number} minimumHeight The minimum height of the tile.\n * @property {number} maximumHeight The maximum height of the tile.\n * @property {BoundingSphere} boundingSphere The bounding sphere of the tile.\n * @property {OrientedBoundingBox} orientedBoundingBox The oriented bounding box of the tile.\n * @property {Cartesian3} horizonOcclusionPoint The horizon occlusion point of the tile.\n * @property {number} skirtHeight The height of the skirts.\n * @property {number} [exaggeration=1.0] The scale used to exaggerate the terrain.\n * @property {number} [exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n */\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n * @function\n *\n * @private\n *\n * @param {Cesium3DTilesTerrainGeometryProcessor.CreateMeshOptions} options An object describing options for mesh creation.\n * @returns {Promise.<TerrainMesh>} A promise to a terrain mesh.\n */\nCesium3DTilesTerrainGeometryProcessor.createMesh = async function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    exaggeration = 1.0,\n    exaggerationRelativeHeight = 0.0,\n    hasVertexNormals,\n    hasWebMercatorT,\n    gltf,\n    minimumHeight,\n    maximumHeight,\n    skirtHeight,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.ellipsoid\", options.ellipsoid);\n  Check.typeOf.object(\"options.rectangle\", options.rectangle);\n  Check.typeOf.bool(\"options.hasVertexNormals\", hasVertexNormals);\n  Check.typeOf.bool(\"options.hasWebMercatorT\", hasWebMercatorT);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.minimumHeight\", minimumHeight);\n  Check.typeOf.number(\"options.maximumHeight\", maximumHeight);\n  Check.typeOf.object(\"options.boundingSphere\", options.boundingSphere);\n  Check.typeOf.object(\n    \"options.orientedBoundingBox\",\n    options.orientedBoundingBox,\n  );\n  Check.typeOf.object(\n    \"options.horizonOcclusionPoint\",\n    options.horizonOcclusionPoint,\n  );\n  Check.typeOf.number(\"options.skirtHeight\", skirtHeight);\n  //>>includeEnd('debug');\n\n  const hasExaggeration = exaggeration !== 1.0;\n  const hasGeodeticSurfaceNormals = hasExaggeration;\n\n  const boundingSphere = BoundingSphere.clone(\n    options.boundingSphere,\n    new BoundingSphere(),\n  );\n  const orientedBoundingBox = OrientedBoundingBox.clone(\n    options.orientedBoundingBox,\n    new OrientedBoundingBox(),\n  );\n  const horizonOcclusionPoint = Cartesian3.clone(\n    options.horizonOcclusionPoint,\n    new Cartesian3(),\n  );\n  const ellipsoid = Ellipsoid.clone(options.ellipsoid, new Ellipsoid());\n  const rectangle = Rectangle.clone(options.rectangle, new Rectangle());\n\n  const hasMeshOptCompression =\n    gltf.extensionsRequired !== undefined &&\n    gltf.extensionsRequired.indexOf(\"EXT_meshopt_compression\") !== -1;\n\n  const decoderPromise = hasMeshOptCompression\n    ? MeshoptDecoder.ready\n    : Promise.resolve(undefined);\n\n  await decoderPromise;\n\n  const tileMinLongitude = rectangle.west;\n  const tileMinLatitude = rectangle.south;\n  const tileMaxLatitude = rectangle.north;\n  const tileLengthLongitude = rectangle.width;\n  const tileLengthLatitude = rectangle.height;\n\n  const approximateCenterCartographic = Rectangle.center(\n    rectangle,\n    scratchCenterCartographic,\n  );\n  approximateCenterCartographic.height = 0.5 * (minimumHeight + maximumHeight);\n\n  const approximateCenterPosition = Cartographic.toCartesian(\n    approximateCenterCartographic,\n    ellipsoid,\n    scratchCenterCartesian,\n  );\n\n  const enuToEcef = Transforms.eastNorthUpToFixedFrame(\n    approximateCenterPosition,\n    ellipsoid,\n    scratchEnuToEcef,\n  );\n  const ecefToEnu = Matrix4.inverseTransformation(enuToEcef, scratchEcefToEnu);\n\n  let tilesetTransform = Matrix4.unpack(\n    gltf.nodes[0].matrix,\n    0,\n    scratchTilesetTransform,\n  );\n\n  tilesetTransform = Matrix4.multiply(\n    Axis.Y_UP_TO_Z_UP,\n    tilesetTransform,\n    tilesetTransform,\n  );\n\n  const gltfInfo = decodeGltf(gltf, hasVertexNormals, scratchGltfInfo);\n\n  const skirtVertexCount = TerrainProvider.getSkirtVertexCount(\n    gltfInfo.edgeIndicesWest,\n    gltfInfo.edgeIndicesSouth,\n    gltfInfo.edgeIndicesEast,\n    gltfInfo.edgeIndicesNorth,\n  );\n\n  const positionsLocalWithoutSkirts = gltfInfo.positions;\n  const normalsWithoutSkirts = gltfInfo.normals;\n  const indicesWithoutSkirts = gltfInfo.indices;\n  const vertexCountWithoutSkirts = positionsLocalWithoutSkirts.length / 3;\n  const vertexCountWithSkirts = vertexCountWithoutSkirts + skirtVertexCount;\n  const indexCountWithoutSkirts = indicesWithoutSkirts.length;\n  const skirtIndexCount =\n    TerrainProvider.getSkirtIndexCountWithFilledCorners(skirtVertexCount);\n\n  // For consistency with glTF spec, 16 bit index buffer can't contain 65535\n  const SizedIndexTypeWithSkirts =\n    vertexCountWithSkirts <= 65535 ? Uint16Array : Uint32Array;\n  // Make the index buffer large enough that we can add in the skirt indices later\n  const indexBufferWithSkirts = new SizedIndexTypeWithSkirts(\n    indexCountWithoutSkirts + skirtIndexCount,\n  );\n  indexBufferWithSkirts.set(indicesWithoutSkirts);\n\n  const westIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesWest);\n  const southIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesSouth);\n  const eastIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesEast);\n  const northIndices = new SizedIndexTypeWithSkirts(gltfInfo.edgeIndicesNorth);\n\n  const sortedWestIndices = new SizedIndexTypeWithSkirts(westIndices).sort();\n  const sortedSouthIndices = new SizedIndexTypeWithSkirts(southIndices).sort();\n  const sortedEastIndices = new SizedIndexTypeWithSkirts(eastIndices).sort();\n  const sortedNorthIndices = new SizedIndexTypeWithSkirts(northIndices).sort();\n\n  const southMercatorAngle =\n    WebMercatorProjection.geodeticLatitudeToMercatorAngle(tileMinLatitude);\n  const northMercatorAngle =\n    WebMercatorProjection.geodeticLatitudeToMercatorAngle(tileMaxLatitude);\n\n  const oneOverMercatorHeight = 1.0 / (northMercatorAngle - southMercatorAngle);\n\n  // Use a terrain encoding without quantization.\n  // This is just an easier way to save intermediate state\n  let minPosEnu = Cartesian3.fromElements(\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    scratchMinimumPositionENU,\n  );\n  let maxPosEnu = Cartesian3.fromElements(\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    scratchMaximumPositionENU,\n  );\n  const tempTerrainEncoding = new TerrainEncoding(\n    boundingSphere.center,\n    undefined,\n    undefined,\n    undefined,\n    undefined,\n    hasVertexNormals,\n    hasWebMercatorT,\n    hasGeodeticSurfaceNormals,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n\n  const tempBufferStride = tempTerrainEncoding.stride;\n  const tempBuffer = new Float32Array(vertexCountWithSkirts * tempBufferStride);\n  let tempBufferOffset = 0;\n\n  for (let i = 0; i < vertexCountWithoutSkirts; i++) {\n    const posLocal = Cartesian3.unpack(\n      positionsLocalWithoutSkirts,\n      i * 3,\n      scratchPosLocal,\n    );\n\n    const posECEF = Matrix4.multiplyByPoint(\n      tilesetTransform,\n      posLocal,\n      scratchPosEcef,\n    );\n\n    const cartographic = Cartographic.fromCartesian(\n      posECEF,\n      ellipsoid,\n      scratchCartographic,\n    );\n\n    const { longitude, latitude, height } = cartographic;\n\n    // If a vertex is an edge vertex we already know its exact UV and don't need to derive it from the position (which can have accuracy issues).\n\n    let u = (longitude - tileMinLongitude) / tileLengthLongitude;\n    let v = (latitude - tileMinLatitude) / tileLengthLatitude;\n\n    // Clamp the UVs to the valid range\n    // This should only happen when the cartesian to cartographic conversion introduces error on a point that is already very close the edge\n    u = CesiumMath.clamp(u, 0.0, 1.0);\n    v = CesiumMath.clamp(v, 0.0, 1.0);\n\n    if (binarySearch(sortedWestIndices, i, sortedEdgeCompare) >= 0) {\n      u = 0.0;\n    } else if (binarySearch(sortedEastIndices, i, sortedEdgeCompare) >= 0) {\n      u = 1.0;\n    }\n\n    if (binarySearch(sortedSouthIndices, i, sortedEdgeCompare) >= 0) {\n      v = 0.0;\n    } else if (binarySearch(sortedNorthIndices, i, sortedEdgeCompare) >= 0) {\n      v = 1.0;\n    }\n\n    const uv = Cartesian2.fromElements(u, v, scratchUV);\n\n    let normalOct;\n    if (hasVertexNormals) {\n      let normal = Cartesian3.unpack(\n        normalsWithoutSkirts,\n        i * 3,\n        scratchNormal,\n      );\n      normal = Matrix4.multiplyByPointAsVector(\n        tilesetTransform,\n        normal,\n        scratchNormal,\n      );\n\n      normal = Cartesian3.normalize(normal, scratchNormal);\n\n      normalOct = AttributeCompression.octEncode(normal, scratchNormalOct);\n    }\n\n    let webMercatorT;\n    if (hasWebMercatorT) {\n      const mercatorAngle =\n        WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude);\n      webMercatorT =\n        (mercatorAngle - southMercatorAngle) * oneOverMercatorHeight;\n    }\n\n    let geodeticSurfaceNormal;\n    if (hasGeodeticSurfaceNormals) {\n      geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n        posECEF,\n        scratchGeodeticSurfaceNormal,\n      );\n    }\n\n    tempBufferOffset = tempTerrainEncoding.encode(\n      tempBuffer,\n      tempBufferOffset,\n      posECEF,\n      uv,\n      height,\n      normalOct,\n      webMercatorT,\n      geodeticSurfaceNormal,\n    );\n\n    const posEnu = Matrix4.multiplyByPoint(ecefToEnu, posECEF, scratchPosEnu);\n    minPosEnu = Cartesian3.minimumByComponent(posEnu, minPosEnu, minPosEnu);\n    maxPosEnu = Cartesian3.maximumByComponent(posEnu, maxPosEnu, maxPosEnu);\n  }\n\n  const mesh = new TerrainMesh(\n    Cartesian3.clone(tempTerrainEncoding.center, new Cartesian3()),\n    tempBuffer,\n    indexBufferWithSkirts,\n    indexCountWithoutSkirts,\n    vertexCountWithoutSkirts,\n    minimumHeight,\n    maximumHeight,\n    rectangle,\n    BoundingSphere.clone(boundingSphere, new BoundingSphere()),\n    Cartesian3.clone(horizonOcclusionPoint, new Cartesian3()),\n    tempBufferStride,\n    OrientedBoundingBox.clone(orientedBoundingBox, new OrientedBoundingBox()),\n    tempTerrainEncoding,\n    westIndices,\n    southIndices,\n    eastIndices,\n    northIndices,\n  );\n\n  addSkirtsToMesh(\n    mesh,\n    rectangle,\n    ellipsoid,\n    minPosEnu,\n    maxPosEnu,\n    enuToEcef,\n    ecefToEnu,\n    skirtHeight,\n  );\n\n  return Promise.resolve(mesh);\n};\n\nconst scratchMinUV = new Cartesian2();\nconst scratchMaxUV = new Cartesian2();\nconst scratchPolygonIndices = new Array(6);\nconst scratchUvA = new Cartesian2();\nconst scratchUvB = new Cartesian2();\nconst scratchUvC = new Cartesian2();\nconst scratchNormalA = new Cartesian3();\nconst scratchNormalB = new Cartesian3();\nconst scratchNormalC = new Cartesian3();\nconst scratchCenterCartographicUpsample = new Cartographic();\nconst scratchCenterCartesianUpsample = new Cartesian3();\nconst scratchCartographicSkirt = new Cartographic();\nconst scratchCartographicUpsample = new Cartographic();\nconst scratchPosEcefSkirt = new Cartesian3();\nconst scratchPosEcefUpsample = new Cartesian3();\nconst scratchPosEnuSkirt = new Cartesian3();\nconst scratchPosEnuUpsample = new Cartesian3();\nconst scratchMinimumPositionENUSkirt = new Cartesian3();\nconst scratchMaximumPositionENUSkirt = new Cartesian3();\nconst scratchMinimumPositionENUUpsample = new Cartesian3();\nconst scratchMaximumPositionENUUpsample = new Cartesian3();\nconst scratchEnuToEcefUpsample = new Matrix4();\nconst scratchEcefToEnuUpsample = new Matrix4();\nconst scratchUVSkirt = new Cartesian2();\nconst scratchUVUpsample = new Cartesian2();\nconst scratchHorizonOcclusionPoint = new Cartesian3();\nconst scratchBoundingSphere = new BoundingSphere();\nconst scratchOrientedBoundingBox = new OrientedBoundingBox();\nconst scratchAABBEnuSkirt = new AxisAlignedBoundingBox();\nconst scratchNormalUpsample = new Cartesian3();\nconst scratchNormalOctSkirt = new Cartesian2();\nconst scratchNormalOctUpsample = new Cartesian2();\nconst scratchGeodeticSurfaceNormalSkirt = new Cartesian3();\nconst scratchGeodeticSurfaceNormalUpsample = new Cartesian3();\n\n/**\n * Decode the position attributes from a glTF object.\n * @private\n * @param {Object.<string,*>} gltf The glTF JSON.\n * @returns {Float32Array} The decoded positions, as a flattened array of x, y, z values.\n */\nfunction decodePositions(gltf) {\n  const primitive = gltf.meshes[0].primitives[0];\n  const accessor = gltf.accessors[primitive.attributes[\"POSITION\"]];\n  const bufferView = gltf.bufferViews[accessor.bufferView];\n  const positionCount = accessor.count;\n\n  const bufferViewMeshOpt = bufferView.extensions\n    ? bufferView.extensions[\"EXT_meshopt_compression\"]\n    : undefined;\n\n  if (bufferViewMeshOpt === undefined) {\n    const buffer = gltf.buffers[bufferView.buffer].extras._pipeline.source;\n\n    return new Float32Array(\n      buffer.buffer,\n      buffer.byteOffset + // offset from the start of the glb\n        (bufferView.byteOffset ?? 0) +\n        (accessor.byteOffset ?? 0),\n      positionCount * 3,\n    );\n  }\n\n  const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;\n\n  const compressedBuffer = new Uint8Array(\n    buffer.buffer,\n    buffer.byteOffset + // offset from the start of the glb\n      (bufferViewMeshOpt.byteOffset ?? 0) +\n      (accessor.byteOffset ?? 0),\n    bufferViewMeshOpt.byteLength,\n  );\n\n  const positionByteLength = bufferViewMeshOpt.byteStride;\n  const PositionType = positionByteLength === 4 ? Uint8Array : Uint16Array;\n  const positionsResult = new PositionType(positionCount * 4);\n  MeshoptDecoder.decodeVertexBuffer(\n    new Uint8Array(positionsResult.buffer),\n    positionCount,\n    positionByteLength,\n    compressedBuffer,\n  );\n\n  const positionStorageValueMax =\n    (1 << (positionsResult.BYTES_PER_ELEMENT * 8)) - 1;\n  const positions = new Float32Array(positionCount * 3);\n  for (let p = 0; p < positionCount; p++) {\n    // only the first 3 components are used\n    positions[p * 3 + 0] = positionsResult[p * 4 + 0] / positionStorageValueMax;\n    positions[p * 3 + 1] = positionsResult[p * 4 + 1] / positionStorageValueMax;\n    positions[p * 3 + 2] = positionsResult[p * 4 + 2] / positionStorageValueMax;\n    // fourth component is not used\n  }\n  return positions;\n}\n\n/**\n * Decode the normal attributes from a glTF object.\n * @private\n * @param {Object.<string,*>} gltf The glTF JSON.\n * @returns {Float32Array} The decoded normals, as a flattened array of x, y, z values.\n */\nfunction decodeNormals(gltf) {\n  const primitive = gltf.meshes[0].primitives[0];\n  const accessor = gltf.accessors[primitive.attributes[\"NORMAL\"]];\n  const bufferView = gltf.bufferViews[accessor.bufferView];\n  const normalCount = accessor.count;\n\n  const bufferViewMeshOpt = bufferView.extensions\n    ? bufferView.extensions[\"EXT_meshopt_compression\"]\n    : undefined;\n\n  if (bufferViewMeshOpt === undefined) {\n    const buffer = gltf.buffers[bufferView.buffer].extras._pipeline.source;\n\n    return new Float32Array(\n      buffer.buffer,\n      buffer.byteOffset + // offset from the start of the glb\n        (bufferView.byteOffset ?? 0) +\n        (accessor.byteOffset ?? 0),\n      normalCount * 3,\n    );\n  }\n\n  const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;\n\n  const compressedBuffer = new Uint8Array(\n    buffer.buffer,\n    buffer.byteOffset + // offset from the start of the glb\n      (bufferViewMeshOpt.byteOffset ?? 0) +\n      (accessor.byteOffset ?? 0),\n    bufferViewMeshOpt.byteLength,\n  );\n\n  const normalByteLength = bufferViewMeshOpt.byteStride;\n  const normalsResult = new Int8Array(normalCount * normalByteLength);\n\n  MeshoptDecoder.decodeVertexBuffer(\n    new Uint8Array(normalsResult.buffer),\n    normalCount,\n    normalByteLength,\n    compressedBuffer,\n  );\n\n  const normals = new Float32Array(normalCount * 3);\n  for (let i = 0; i < normalCount; i++) {\n    // AttributeCompression.octDecodeInRange is not compatible with KHR_mesh_quantization, so do the oct decode manually\n    // The quantization puts values between -127 and +127, but clamp in case it has -128\n    // The third component is unused until normals support non-8-bit quantization\n    // The fourth component is always unused\n    let octX = Math.max(normalsResult[i * 4 + 0] / 127.0, -1.0);\n    let octY = Math.max(normalsResult[i * 4 + 1] / 127.0, -1.0);\n    const octZ = 1.0 - (Math.abs(octX) + Math.abs(octY));\n\n    if (octZ < 0.0) {\n      const oldX = octX;\n      const oldY = octY;\n      octX = (1.0 - Math.abs(oldY)) * CesiumMath.signNotZero(oldX);\n      octY = (1.0 - Math.abs(oldX)) * CesiumMath.signNotZero(oldY);\n    }\n\n    let normal = scratchNormal;\n    normal.x = octX;\n    normal.y = octY;\n    normal.z = octZ;\n    normal = Cartesian3.normalize(normal, scratchNormal);\n\n    normals[i * 3 + 0] = normal.x;\n    normals[i * 3 + 1] = normal.y;\n    normals[i * 3 + 2] = normal.z;\n  }\n  return normals;\n}\n\n/**\n * Decode the index attributes from a glTF object.\n * @private\n * @param {Object.<string,*>} gltf The glTF JSON.\n * @returns {Uint16Array|Uint32Array} An array of indices.\n */\nfunction decodeIndices(gltf) {\n  const primitive = gltf.meshes[0].primitives[0];\n  const accessor = gltf.accessors[primitive.indices];\n  const bufferView = gltf.bufferViews[accessor.bufferView];\n  const indexCount = accessor.count;\n\n  const SizedIndexType =\n    accessor.componentType === ComponentDatatype.UNSIGNED_SHORT\n      ? Uint16Array\n      : Uint32Array;\n\n  const bufferViewMeshOpt = bufferView.extensions\n    ? bufferView.extensions[\"EXT_meshopt_compression\"]\n    : undefined;\n\n  if (bufferViewMeshOpt === undefined) {\n    const buffer = gltf.buffers[bufferView.buffer].extras._pipeline.source;\n    return new SizedIndexType(\n      buffer.buffer,\n      buffer.byteOffset + // offset from the glb\n        (bufferView.byteOffset ?? 0) +\n        (accessor.byteOffset ?? 0),\n      indexCount,\n    );\n  }\n\n  const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;\n  const compressedBuffer = new Uint8Array(\n    buffer.buffer,\n    buffer.byteOffset + // offset from the start of the glb\n      (bufferViewMeshOpt.byteOffset ?? 0) +\n      (accessor.byteOffset ?? 0),\n    bufferViewMeshOpt.byteLength,\n  );\n\n  const indices = new SizedIndexType(indexCount);\n  MeshoptDecoder.decodeIndexBuffer(\n    new Uint8Array(indices.buffer),\n    indexCount,\n    bufferViewMeshOpt.byteStride,\n    compressedBuffer,\n  );\n  return indices;\n}\n\n/**\n * Decode the edge index attributes from a glTF object.\n * @private\n * @param {Object.<string,*>} gltf The glTF JSON.\n * @param {string} name The name of the edge indices to decode.\n * @returns {Uint16Array|Uint32Array} An array of edge indices.\n */\nfunction decodeEdgeIndices(gltf, name) {\n  const primitive = gltf.meshes[0].primitives[0];\n  const accessor = gltf.accessors[primitive.extensions.CESIUM_tile_edges[name]];\n  const bufferView = gltf.bufferViews[accessor.bufferView];\n\n  const indexCount = accessor.count;\n  const SizedIndexType =\n    accessor.componentType === ComponentDatatype.UNSIGNED_SHORT\n      ? Uint16Array\n      : Uint32Array;\n\n  const bufferViewMeshOpt = bufferView.extensions\n    ? bufferView.extensions[\"EXT_meshopt_compression\"]\n    : undefined;\n\n  if (bufferViewMeshOpt === undefined) {\n    const buffer = gltf.buffers[bufferView.buffer].extras._pipeline.source;\n\n    return new SizedIndexType(\n      buffer.buffer,\n      buffer.byteOffset + // offset from the glb\n        (bufferView.byteOffset ?? 0) +\n        (accessor.byteOffset ?? 0),\n      indexCount,\n    );\n  }\n\n  const buffer = gltf.buffers[bufferViewMeshOpt.buffer].extras._pipeline.source;\n  const compressedBuffer = new Uint8Array(\n    buffer.buffer,\n    buffer.byteOffset + // offset from the start of the glb\n      (bufferViewMeshOpt.byteOffset ?? 0) +\n      (accessor.byteOffset ?? 0),\n    bufferViewMeshOpt.byteLength,\n  );\n\n  const indices = new SizedIndexType(indexCount);\n  const indexByteLength = bufferViewMeshOpt.byteStride;\n  MeshoptDecoder.decodeIndexSequence(\n    new Uint8Array(indices.buffer),\n    indexCount,\n    indexByteLength,\n    compressedBuffer,\n  );\n  return indices;\n}\n\n/**\n * Decodes geometry-related vertex arrays from a glTF asset.\n * @private\n * @param {Object.<string,*>} gltf The glTF JSON.\n * @param {boolean} hasNormals <code>true</code> if the glTF has normal attributes.\n * @param {GltfInfo} result The object to store the decoded arrays.\n * @returns {GltfInfo} The decoded geometry info.\n */\nfunction decodeGltf(gltf, hasNormals, result) {\n  result.positions = decodePositions(gltf);\n  result.normals = hasNormals ? decodeNormals(gltf) : undefined;\n  result.indices = decodeIndices(gltf);\n  result.edgeIndicesWest = decodeEdgeIndices(gltf, \"left\");\n  result.edgeIndicesSouth = decodeEdgeIndices(gltf, \"bottom\");\n  result.edgeIndicesEast = decodeEdgeIndices(gltf, \"right\");\n  result.edgeIndicesNorth = decodeEdgeIndices(gltf, \"top\");\n  return result;\n}\n\n/**\n * @typedef {object} Cesium3DTilesTerrainGeometryProcessor.UpsampleMeshOptions\n * @property {boolean} isEastChild <code>true</code> if the tile is the east child of its parent.\n * @property {boolean} isNorthChild <code>true</code> if the tile is the north child of its parent.\n * @property {Rectangle} rectangle The rectangle covered by the tile.\n * @property {Ellipsoid} ellipsoid The ellipsoid.\n * @property {number} skirtHeight The height of the skirts.\n * @property {Float32Array} parentVertices The parent tile's vertex buffer.\n * @property {Uint8Array|Uint16Array|Uint32Array} parentIndices The parent tile's index buffer.\n * @property {number} parentVertexCountWithoutSkirts The number of vertices in the parent tile excluding skirts.\n * @property {number} parentIndexCountWithoutSkirts The number of indices in the parent tile excluding skirts.\n * @property {number} parentMinimumHeight The minimum height of the parent tile.\n * @property {number} parentMaximumHeight The maximum height of the parent tile.\n * @property {TerrainEncoding} parentEncoding The parent tile's terrain encoding.\n */\n\n/**\n * Upsamples a parent tile's mesh to create a higher-detail child tile's mesh.\n *\n * Overview: Only include triangles that are inside the UV clipping region.\n * If a triangle is partly outside, it will be clipped at the border.\n * The clipping function returns a polygon where each point is a barycentric coordinate of the input triangle.\n * Most of the time the triangle will not be clipped, so the polygon will be the three barycentric coordinates of the input triangle.\n * If the triangle is completely outside the clipping region, the polygon will have no points and will be ignored.\n * If the triangle is clipped, the polygon will have between four and six points and needs to be triangulated.\n *  Vertex data for points that fall inside the triangle will be interpolated using the barycentric coordinates.\n * Each vertex in the polygon is added to the new vertex list, with some special handling to avoid duplicate points between triangles.\n *\n * @private\n * @param {Cesium3DTilesTerrainGeometryProcessor.UpsampleMeshOptions} options An object describing options for mesh upsampling.\n * @returns {TerrainMesh} The upsampled terrain mesh.\n */\nCesium3DTilesTerrainGeometryProcessor.upsampleMesh = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const {\n    isEastChild,\n    isNorthChild,\n    parentMinimumHeight,\n    parentMaximumHeight,\n    skirtHeight,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug)\n  Check.typeOf.bool(\"options.isEastChild\", isEastChild);\n  Check.typeOf.bool(\"options.isNorthChild\", isNorthChild);\n  Check.typeOf.object(\"options.parentVertices\", options.parentVertices);\n  Check.typeOf.object(\"options.parentIndices\", options.parentIndices);\n  Check.typeOf.number(\n    \"options.parentVertexCountWithoutSkirts\",\n    options.parentVertexCountWithoutSkirts,\n  );\n  Check.typeOf.number(\n    \"options.parentIndexCountWithoutSkirts\",\n    options.parentIndexCountWithoutSkirts,\n  );\n  Check.typeOf.number(\"options.parentMinimumHeight\", parentMinimumHeight);\n  Check.typeOf.number(\"options.parentMaximumHeight\", parentMaximumHeight);\n  Check.typeOf.object(\"options.parentEncoding\", options.parentEncoding);\n  Check.typeOf.object(\"options.rectangle\", options.rectangle);\n  Check.typeOf.number(\"options.skirtHeight\", skirtHeight);\n  Check.typeOf.object(\"options.ellipsoid\", options.ellipsoid);\n  //>>includeEnd('debug');\n\n  const indexCount = options.parentIndexCountWithoutSkirts;\n  const indices = options.parentIndices;\n  const vertexCount = options.parentVertexCountWithoutSkirts;\n  const vertexBuffer = options.parentVertices;\n  const encoding = TerrainEncoding.clone(\n    options.parentEncoding,\n    new TerrainEncoding(),\n  );\n  const hasVertexNormals = encoding.hasVertexNormals;\n  const hasWebMercatorT = encoding.hasWebMercatorT;\n  const exaggeration = encoding.exaggeration;\n  const exaggerationRelativeHeight = encoding.exaggerationRelativeHeight;\n  const hasExaggeration = exaggeration !== 1.0;\n  const hasGeodeticSurfaceNormals = hasExaggeration;\n  const upsampleRectangle = Rectangle.clone(options.rectangle, new Rectangle());\n  const ellipsoid = Ellipsoid.clone(options.ellipsoid);\n\n  const upsampledTriIDs = [];\n  const upsampledUVs = [];\n  const upsampledBarys = [];\n  const upsampledIndices = [];\n  const upsampledWestIndices = [];\n  const upsampledSouthIndices = [];\n  const upsampledEastIndices = [];\n  const upsampledNorthIndices = [];\n\n  clipTileFromQuadrant(\n    isEastChild,\n    isNorthChild,\n    indexCount,\n    indices,\n    vertexCount,\n    vertexBuffer,\n    encoding,\n    upsampledIndices,\n    upsampledWestIndices,\n    upsampledSouthIndices,\n    upsampledEastIndices,\n    upsampledNorthIndices,\n    upsampledTriIDs,\n    upsampledBarys,\n    upsampledUVs,\n  );\n\n  // Don't know the min and max height of the upsampled positions yet,\n  // so calculate a center point from the parent's min and max height\n  const approximateCenterCartographic = Rectangle.center(\n    upsampleRectangle,\n    scratchCenterCartographicUpsample,\n  );\n  approximateCenterCartographic.height =\n    0.5 * (parentMinimumHeight + parentMaximumHeight);\n  const approximateCenterPosition = Cartographic.toCartesian(\n    approximateCenterCartographic,\n    ellipsoid,\n    scratchCenterCartesianUpsample,\n  );\n\n  const upsampledVertexCountWithoutSkirts = upsampledTriIDs.length;\n  const upsampledTerrainEncoding = new TerrainEncoding(\n    approximateCenterPosition,\n    undefined,\n    undefined,\n    undefined,\n    undefined,\n    hasVertexNormals,\n    hasWebMercatorT,\n    hasGeodeticSurfaceNormals,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n  const upsampledVertexBufferStride = upsampledTerrainEncoding.stride;\n\n  const upsampledSkirtVertexCount = TerrainProvider.getSkirtVertexCount(\n    upsampledWestIndices,\n    upsampledSouthIndices,\n    upsampledEastIndices,\n    upsampledNorthIndices,\n  );\n  const upsampledVertexCountWithSkirts =\n    upsampledVertexCountWithoutSkirts + upsampledSkirtVertexCount;\n  const upsampledIndexCountWithoutSkirts = upsampledIndices.length;\n  const upsampledSkirtIndexCount =\n    TerrainProvider.getSkirtIndexCountWithFilledCorners(\n      upsampledSkirtVertexCount,\n    );\n  const upsampledIndexCountWithSkirts =\n    upsampledIndexCountWithoutSkirts + upsampledSkirtIndexCount;\n  // For consistency with glTF spec, 16 bit index buffer can't contain 65535\n  const SizedIndexTypeWithSkirts =\n    upsampledVertexCountWithSkirts <= 65535 ? Uint16Array : Uint32Array;\n  const upsampledIndexBuffer = new SizedIndexTypeWithSkirts(\n    upsampledIndexCountWithSkirts,\n  );\n  upsampledIndexBuffer.set(upsampledIndices);\n\n  const upsampledWestIndicesBuffer = new SizedIndexTypeWithSkirts(\n    upsampledWestIndices,\n  );\n\n  const upsampledSouthIndicesBuffer = new SizedIndexTypeWithSkirts(\n    upsampledSouthIndices,\n  );\n\n  const upsampledEastIndicesBuffer = new SizedIndexTypeWithSkirts(\n    upsampledEastIndices,\n  );\n\n  const upsampledNorthIndicesBuffer = new SizedIndexTypeWithSkirts(\n    upsampledNorthIndices,\n  );\n\n  const upsampledVertexBuffer = new Float32Array(\n    upsampledVertexCountWithSkirts * upsampledVertexBufferStride,\n  );\n  let upsampledVertexBufferOffset = 0;\n\n  const enuToEcef = Transforms.eastNorthUpToFixedFrame(\n    approximateCenterPosition,\n    ellipsoid,\n    scratchEnuToEcefUpsample,\n  );\n  const ecefToEnu = Matrix4.inverseTransformation(\n    enuToEcef,\n    scratchEcefToEnuUpsample,\n  );\n\n  const minimumLongitude = upsampleRectangle.west;\n  const maximumLongitude = upsampleRectangle.east;\n  const minimumLatitude = upsampleRectangle.south;\n  const maximumLatitude = upsampleRectangle.north;\n\n  const southMercatorAngle =\n    WebMercatorProjection.geodeticLatitudeToMercatorAngle(minimumLatitude);\n  const northMercatorAngle =\n    WebMercatorProjection.geodeticLatitudeToMercatorAngle(maximumLatitude);\n  const oneOverMercatorHeight = 1.0 / (northMercatorAngle - southMercatorAngle);\n\n  let minimumHeight = Number.POSITIVE_INFINITY;\n  let maximumHeight = Number.NEGATIVE_INFINITY;\n\n  let minPosEnu = Cartesian3.fromElements(\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    scratchMinimumPositionENUUpsample,\n  );\n  let maxPosEnu = Cartesian3.fromElements(\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    scratchMaximumPositionENUUpsample,\n  );\n\n  for (let i = 0; i < upsampledVertexCountWithoutSkirts; i++) {\n    const triId = upsampledTriIDs[i];\n    const indexA = indices[triId * 3 + 0];\n    const indexB = indices[triId * 3 + 1];\n    const indexC = indices[triId * 3 + 2];\n\n    const uv = scratchUVUpsample;\n    uv.x = upsampledUVs[i * 2 + 0];\n    uv.y = upsampledUVs[i * 2 + 1];\n    const u = uv.x;\n    const v = uv.y;\n\n    const baryA = upsampledBarys[i * 2 + 0];\n    const baryB = upsampledBarys[i * 2 + 1];\n    const baryC = 1.0 - baryA - baryB;\n\n    const heightA = encoding.decodeHeight(vertexBuffer, indexA);\n    const heightB = encoding.decodeHeight(vertexBuffer, indexB);\n    const heightC = encoding.decodeHeight(vertexBuffer, indexC);\n\n    const height = heightA * baryA + heightB * baryB + heightC * baryC;\n    minimumHeight = Math.min(height, minimumHeight);\n    maximumHeight = Math.max(height, maximumHeight);\n\n    const lon = CesiumMath.lerp(minimumLongitude, maximumLongitude, u);\n    const lat = CesiumMath.lerp(minimumLatitude, maximumLatitude, v);\n    const carto = Cartographic.fromRadians(\n      lon,\n      lat,\n      height,\n      scratchCartographicUpsample,\n    );\n    const position = Cartographic.toCartesian(\n      carto,\n      ellipsoid,\n      scratchPosEcefUpsample,\n    );\n\n    const posEnu = Matrix4.multiplyByPoint(\n      ecefToEnu,\n      position,\n      scratchPosEnuUpsample,\n    );\n    minPosEnu = Cartesian3.minimumByComponent(posEnu, minPosEnu, minPosEnu);\n    maxPosEnu = Cartesian3.maximumByComponent(posEnu, maxPosEnu, maxPosEnu);\n\n    let normalOct;\n    if (hasVertexNormals) {\n      const normalA = encoding.decodeNormal(\n        vertexBuffer,\n        indexA,\n        scratchNormalA,\n      );\n      const normalB = encoding.decodeNormal(\n        vertexBuffer,\n        indexB,\n        scratchNormalB,\n      );\n      const normalC = encoding.decodeNormal(\n        vertexBuffer,\n        indexC,\n        scratchNormalC,\n      );\n\n      let normal = Cartesian3.fromElements(\n        normalA.x * baryA + normalB.x * baryB + normalC.x * baryC,\n        normalA.y * baryA + normalB.y * baryB + normalC.y * baryC,\n        normalA.z * baryA + normalB.z * baryB + normalC.z * baryC,\n        scratchNormalUpsample,\n      );\n      normal = Cartesian3.normalize(normal, scratchNormalUpsample);\n      normalOct = AttributeCompression.octEncode(\n        normal,\n        scratchNormalOctUpsample,\n      );\n    }\n\n    let webMercatorT;\n    if (hasWebMercatorT) {\n      const mercatorAngle =\n        WebMercatorProjection.geodeticLatitudeToMercatorAngle(lat);\n      webMercatorT =\n        (mercatorAngle - southMercatorAngle) * oneOverMercatorHeight;\n    }\n\n    let geodeticSurfaceNormal;\n    if (hasGeodeticSurfaceNormals) {\n      geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n        position,\n        scratchGeodeticSurfaceNormalUpsample,\n      );\n    }\n\n    upsampledVertexBufferOffset = upsampledTerrainEncoding.encode(\n      upsampledVertexBuffer,\n      upsampledVertexBufferOffset,\n      position,\n      uv,\n      height,\n      normalOct,\n      webMercatorT,\n      geodeticSurfaceNormal,\n    );\n  }\n\n  // Now generate the more tight-fitting bounding volumes that are used for culling and other things\n  const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n    upsampleRectangle,\n    minimumHeight,\n    maximumHeight,\n    ellipsoid,\n    scratchOrientedBoundingBox,\n  );\n  const boundingSphere = BoundingSphere.fromVertices(\n    upsampledVertexBuffer,\n    upsampledTerrainEncoding.center,\n    upsampledVertexBufferStride,\n    scratchBoundingSphere,\n  );\n  const occluder = new EllipsoidalOccluder(ellipsoid);\n  const horizonOcclusionPoint =\n    occluder.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(\n      upsampledTerrainEncoding.center, // vector from ellipsoid center to horizon occlusion point\n      upsampledVertexBuffer,\n      upsampledVertexBufferStride,\n      upsampledTerrainEncoding.center,\n      minimumHeight,\n      scratchHorizonOcclusionPoint,\n    );\n\n  const upsampledMesh = new TerrainMesh(\n    Cartesian3.clone(upsampledTerrainEncoding.center, new Cartesian3()),\n    upsampledVertexBuffer,\n    upsampledIndexBuffer,\n    upsampledIndexCountWithoutSkirts,\n    upsampledVertexCountWithoutSkirts,\n    minimumHeight,\n    maximumHeight,\n    upsampleRectangle,\n    BoundingSphere.clone(boundingSphere),\n    Cartesian3.clone(horizonOcclusionPoint),\n    upsampledVertexBufferStride,\n    OrientedBoundingBox.clone(orientedBoundingBox),\n    upsampledTerrainEncoding,\n    upsampledWestIndicesBuffer,\n    upsampledSouthIndicesBuffer,\n    upsampledEastIndicesBuffer,\n    upsampledNorthIndicesBuffer,\n  );\n\n  addSkirtsToMesh(\n    upsampledMesh,\n    upsampleRectangle,\n    ellipsoid,\n    minPosEnu,\n    maxPosEnu,\n    enuToEcef,\n    ecefToEnu,\n    skirtHeight,\n  );\n\n  return upsampledMesh;\n};\n\n/**\n * Helper function that adds skirts to a TerrainMesh. The mesh's vertex and index\n * buffers are expected to be pre-allocated to fit the skirts.\n * The mesh's vertex buffer must have quantization disabled.\n * If the final quantization changes, a new vertex buffer will be allocated using the new quantization.\n * Currently skirts do not affect the tile's bounding volume.\n * @private\n * @param {TerrainMesh} mesh\n * @param {Rectangle} rectangle\n * @param {Ellipsoid} ellipsoid\n * @param {Cartesian3} enuMinimum\n * @param {Cartesian3} enuMaximum\n * @param {Matrix4} enuToEcef\n * @param {Matrix4} ecefToEnu\n * @param {number} skirtHeight\n */\nfunction addSkirtsToMesh(\n  mesh,\n  rectangle,\n  ellipsoid,\n  enuMinimum,\n  enuMaximum,\n  enuToEcef,\n  ecefToEnu,\n  skirtHeight,\n) {\n  const { encoding } = mesh;\n  const vertexStride = encoding.stride;\n  const vertexBuffer = mesh.vertices;\n  const {\n    hasVertexNormals,\n    hasWebMercatorT,\n    exaggeration,\n    exaggerationRelativeHeight,\n  } = encoding;\n  const hasExaggeration = exaggeration !== 1.0;\n  const hasGeodeticSurfaceNormals = hasExaggeration;\n\n  const vertexCountWithoutSkirts = mesh.vertexCountWithoutSkirts;\n  let vertexBufferOffset = vertexCountWithoutSkirts * vertexStride;\n  const vertexCountWithSkirts = vertexBuffer.length / vertexStride;\n  const skirtVertexCount = vertexCountWithSkirts - vertexCountWithoutSkirts;\n  const indices = mesh.indices;\n  const indexCountWithoutSkirts = mesh.indexCountWithoutSkirts;\n\n  const westIndices = mesh.westIndicesSouthToNorth;\n  const southIndices = mesh.southIndicesEastToWest;\n  const eastIndices = mesh.eastIndicesNorthToSouth;\n  const northIndices = mesh.northIndicesWestToEast;\n\n  TerrainProvider.addSkirtIndicesWithFilledCorners(\n    westIndices,\n    southIndices,\n    eastIndices,\n    northIndices,\n    vertexCountWithoutSkirts,\n    indices,\n    indexCountWithoutSkirts,\n  );\n\n  const westOffset = 0;\n  const southOffset = westOffset + westIndices.length;\n  const eastOffset = southOffset + southIndices.length;\n  const northOffset = eastOffset + eastIndices.length;\n  const edges = [westIndices, southIndices, eastIndices, northIndices];\n  const edgeIndexOffset = [westOffset, southOffset, eastOffset, northOffset];\n  const edgeLongitudeSign = [-1.0, 0.0, +1.0, 0.0];\n  const edgeLatitudeSign = [0.0, -1.0, 0.0, +1.0];\n\n  const minimumPositionENUWithSkirts = Cartesian3.clone(\n    enuMinimum,\n    scratchMinimumPositionENUSkirt,\n  );\n  const maximumPositionENUWithSkirts = Cartesian3.clone(\n    enuMaximum,\n    scratchMaximumPositionENUSkirt,\n  );\n  const maximumHeight = mesh.maximumHeight;\n  const minimumHeightWithSkirts = mesh.minimumHeight - skirtHeight;\n  for (let skirtId = 0; skirtId < skirtVertexCount; skirtId++) {\n    let side = 0;\n    for (side = 0; side < 3; side++) {\n      if (skirtId < edgeIndexOffset[side + 1]) {\n        break;\n      }\n    }\n    const vertexIndex = edges[side][skirtId - edgeIndexOffset[side]];\n\n    const uv = encoding.decodeTextureCoordinates(\n      vertexBuffer,\n      vertexIndex,\n      scratchUVSkirt,\n    );\n\n    const skirtLonLatOffsetPercent = 0.0001;\n    const longitudeT =\n      uv.x + edgeLongitudeSign[side] * skirtLonLatOffsetPercent;\n    const latitudeT = uv.y + edgeLatitudeSign[side] * skirtLonLatOffsetPercent;\n\n    const longitude = CesiumMath.lerp(\n      rectangle.west,\n      rectangle.east,\n      longitudeT,\n    );\n    // Don't offset the skirt past the poles, it will screw up the cartographic -> cartesian\n    const latitude = CesiumMath.clamp(\n      CesiumMath.lerp(rectangle.south, rectangle.north, latitudeT),\n      -CesiumMath.PI_OVER_TWO,\n      +CesiumMath.PI_OVER_TWO,\n    );\n\n    const vertHeight = encoding.decodeHeight(vertexBuffer, vertexIndex);\n    const height = vertHeight - skirtHeight;\n\n    const cartographic = Cartographic.fromRadians(\n      longitude,\n      latitude,\n      height,\n      scratchCartographicSkirt,\n    );\n\n    const positionEcef = Cartographic.toCartesian(\n      cartographic,\n      ellipsoid,\n      scratchPosEcefSkirt,\n    );\n\n    let normalOct;\n    if (hasVertexNormals) {\n      normalOct = encoding.getOctEncodedNormal(\n        vertexBuffer,\n        vertexIndex,\n        scratchNormalOctSkirt,\n      );\n    }\n\n    let webMercatorT;\n    if (hasWebMercatorT) {\n      webMercatorT = encoding.decodeWebMercatorT(vertexBuffer, vertexIndex);\n    }\n\n    let geodeticSurfaceNormal;\n    if (hasGeodeticSurfaceNormals) {\n      geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n        positionEcef,\n        scratchGeodeticSurfaceNormalSkirt,\n      );\n    }\n\n    vertexBufferOffset = encoding.encode(\n      vertexBuffer,\n      vertexBufferOffset,\n      positionEcef,\n      uv,\n      height,\n      normalOct,\n      webMercatorT,\n      geodeticSurfaceNormal,\n    );\n\n    const positionENU = Matrix4.multiplyByPoint(\n      ecefToEnu,\n      positionEcef,\n      scratchPosEnuSkirt,\n    );\n    Cartesian3.minimumByComponent(\n      positionENU,\n      minimumPositionENUWithSkirts,\n      minimumPositionENUWithSkirts,\n    );\n    Cartesian3.maximumByComponent(\n      positionENU,\n      maximumPositionENUWithSkirts,\n      maximumPositionENUWithSkirts,\n    );\n  }\n\n  const aabbEnuWithSkirts = AxisAlignedBoundingBox.fromCorners(\n    minimumPositionENUWithSkirts,\n    maximumPositionENUWithSkirts,\n    scratchAABBEnuSkirt,\n  );\n\n  // Check if the final terrain encoding has a different quantization. If so,\n  // the vertices need to be re-encoded with the new quantization. Otherwise,\n  // use the vertex buffer as-is.\n  const encodingWithSkirts = new TerrainEncoding(\n    encoding.center,\n    aabbEnuWithSkirts,\n    minimumHeightWithSkirts,\n    maximumHeight,\n    enuToEcef,\n    encoding.hasVertexNormals,\n    encoding.hasWebMercatorT,\n    hasGeodeticSurfaceNormals,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n  if (encoding.quantization !== encodingWithSkirts.quantization) {\n    const finalEncoding = encodingWithSkirts;\n    const finalVertexStride = finalEncoding.stride;\n    const finalVertexBuffer = new Float32Array(\n      vertexCountWithSkirts * finalVertexStride,\n    );\n    let finalVertexBufferOffset = 0;\n    for (let i = 0; i < vertexCountWithSkirts; i++) {\n      finalVertexBufferOffset = finalEncoding.encode(\n        finalVertexBuffer,\n        finalVertexBufferOffset,\n        encoding.decodePosition(vertexBuffer, i, scratchPosEcefSkirt),\n        encoding.decodeTextureCoordinates(vertexBuffer, i, scratchUVSkirt),\n        encoding.decodeHeight(vertexBuffer, i),\n        encoding.hasVertexNormals\n          ? encoding.getOctEncodedNormal(vertexBuffer, i, scratchNormalOctSkirt)\n          : undefined,\n        encoding.hasWebMercatorT\n          ? encoding.decodeWebMercatorT(vertexBuffer, i)\n          : undefined,\n        encoding.hasGeodeticSurfaceNormals\n          ? encoding.decodeGeodeticSurfaceNormal(\n              vertexBuffer,\n              i,\n              scratchGeodeticSurfaceNormalSkirt,\n            )\n          : undefined,\n      );\n    }\n    mesh.vertices = finalVertexBuffer;\n    mesh.stride = finalVertexStride;\n    mesh.encoding = finalEncoding;\n  }\n\n  return mesh;\n}\n\nconst EDGE_ID_LEFT = 0;\nconst EDGE_ID_TOP = 1;\nconst EDGE_ID_RIGHT = 2;\nconst EDGE_ID_BOTTOM = 3;\nconst EDGE_COUNT = 4;\n\nconst scratchIntersection = new Cartesian3();\n\nconst scratchInBarys = [\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n];\nconst scratchInPoints = [\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n];\n\nconst scratchOutBarys = [\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n];\nconst scratchOutPoints = [\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n];\n\n/**\n * Check if a given point is inside the limits of a box.\n * @private\n * @param {Cartesian2} boxMinimum The lower left corner of the box.\n * @param {Cartesian2} boxMaximum The upper right corner of the box.\n * @param {number} edgeId The ID of the edge to test against.\n * @param {Cartesian2} p The point to test.\n * @returns {number} Positive if inside, negative if outside, zero if on the edge.\n */\nfunction inside(boxMinimum, boxMaximum, edgeId, p) {\n  switch (edgeId) {\n    case EDGE_ID_LEFT:\n      return CesiumMath.sign(p.x - boxMinimum.x);\n    case EDGE_ID_RIGHT:\n      return CesiumMath.sign(boxMaximum.x - p.x);\n    case EDGE_ID_BOTTOM:\n      return CesiumMath.sign(p.y - boxMinimum.y);\n    default:\n      // EDGE_ID_TOP\n      return CesiumMath.sign(boxMaximum.y - p.y);\n  }\n}\n\n/**\n * Compute the intersection of a line segment against one edge of a box.\n * @private\n * @param {Cartesian2} boxMinimum The lower left corner of the box.\n * @param {Cartesian2} boxMaximum The upper right corner of the box.\n * @param {number} edgeId The ID of the edge to intersect against.\n * @param {Cartesian2} a The beginning of the line segment.\n * @param {Cartesian2} b The end of the line segment.\n * @param {Cartesian3} result The object into which to copy the result.\n * @returns {Cartesian3} The intersection point in 2D coordinates and the interpolation factor t as the third component.\n */\nfunction intersect(boxMinimum, boxMaximum, edgeId, a, b, result) {\n  let t, intersectX, intersectY;\n  switch (edgeId) {\n    case EDGE_ID_LEFT:\n      t = (boxMinimum.x - a.x) / (b.x - a.x);\n      intersectX = boxMinimum.x;\n      intersectY = a.y + (b.y - a.y) * t;\n      break;\n    case EDGE_ID_RIGHT:\n      t = (boxMaximum.x - a.x) / (b.x - a.x);\n      intersectX = boxMaximum.x;\n      intersectY = a.y + (b.y - a.y) * t;\n      break;\n    case EDGE_ID_BOTTOM:\n      t = (boxMinimum.y - a.y) / (b.y - a.y);\n      intersectX = a.x + (b.x - a.x) * t;\n      intersectY = boxMinimum.y;\n      break;\n    default:\n      // EDGE_ID_TOP\n      t = (boxMaximum.y - a.y) / (b.y - a.y);\n      intersectX = a.x + (b.x - a.x) * t;\n      intersectY = boxMaximum.y;\n      break;\n  }\n  return Cartesian3.fromElements(intersectX, intersectY, t, result);\n}\n\n/**\n * Coordinates of a quadrilateral resulting from clipping a triangle against a box.\n * @private\n * @typedef PolygonResult\n *\n * @property {number} length\n * @property {Cartesian2[]} coordinates A pre-allocated array of six 2D coordinates.\n * @property {Cartesian3[]} barycentricCoordinates A pre-allocated array of six barycentric coordinates.\n */\n\n/**\n * A scratch polygon result for use in clipping.\n * @private\n * @type {PolygonResult}\n */\nconst scratchPolygon = {\n  length: 0,\n  coordinates: [\n    new Cartesian2(),\n    new Cartesian2(),\n    new Cartesian2(),\n    new Cartesian2(),\n    new Cartesian2(),\n    new Cartesian2(),\n  ],\n  barycentricCoordinates: [\n    new Cartesian3(),\n    new Cartesian3(),\n    new Cartesian3(),\n    new Cartesian3(),\n    new Cartesian3(),\n    new Cartesian3(),\n  ],\n};\n\n/**\n * Clips a 2D triangle against axis-aligned edges of a box using the Sutherland-Hodgman\n * clipping algorithm. The resulting polygon will have between 0 and 6 vertices.\n *\n * @private\n * @param {number} edgeStart The first edge to clip against.\n * @param {number} edgeCount The number of edges to clip against, starting from edgeStart.\n * @param {Cartesian2} boxMinimum The bottom-left corner of the axis-aligned box.\n * @param {Cartesian2} boxMaximum The top-right corner of the axis-aligned box.\n * @param {Cartesian2} p0 The coordinates of the first vertex in the triangle, in counter-clockwise order.\n * @param {Cartesian2} p1 The coordinates of the second vertex in the triangle, in counter-clockwise order.\n * @param {Cartesian2} p2 The coordinates of the third vertex in the triangle, in counter-clockwise order.\n * @param {PolygonResult} result The object into which to copy the result.\n * @returns {PolygonResult} The polygon that results after the clip, specified as a list of coordinates in counter-clockwise order.\n */\nfunction clipTriangleAgainstBoxEdgeRange(\n  edgeStart,\n  edgeCount,\n  boxMinimum,\n  boxMaximum,\n  p0,\n  p1,\n  p2,\n  result,\n) {\n  let inputLength = 0;\n  let inputPoints = scratchInPoints;\n  let inputBarys = scratchInBarys;\n\n  let outputLength = 3;\n  let outputPoints = scratchOutPoints;\n  Cartesian2.clone(p0, outputPoints[0]);\n  Cartesian2.clone(p1, outputPoints[1]);\n  Cartesian2.clone(p2, outputPoints[2]);\n\n  let outputBarys = scratchOutBarys;\n  Cartesian3.fromElements(1, 0, 0, outputBarys[0]);\n  Cartesian3.fromElements(0, 1, 0, outputBarys[1]);\n  Cartesian3.fromElements(0, 0, 1, outputBarys[2]);\n\n  // Loop over the clip window edges\n  for (let e = 0; e < edgeCount; e++) {\n    const edgeId = (edgeStart + e) % EDGE_COUNT;\n\n    // Swap the input and output arrays\n    const tempPoints = inputPoints;\n    const tempBarys = inputBarys;\n\n    inputPoints = outputPoints;\n    inputBarys = outputBarys;\n    inputLength = outputLength;\n\n    outputPoints = tempPoints;\n    outputBarys = tempBarys;\n    outputLength = 0;\n\n    // Check each polygon edge against each clip window edge\n    let prevIdx = inputLength - 1;\n    let prevPoint = inputPoints[prevIdx];\n    let prevBary = inputBarys[prevIdx];\n    let prevInside = inside(boxMinimum, boxMaximum, edgeId, prevPoint);\n\n    for (let currIdx = 0; currIdx < inputLength; currIdx++) {\n      const currPoint = inputPoints[currIdx];\n      const currBary = inputBarys[currIdx];\n      const currInside = inside(boxMinimum, boxMaximum, edgeId, currPoint);\n\n      // Check if the two points are on opposite sides of the edge.\n      // If so, there's an intersection, and a new point is created.\n      if (prevInside * currInside === -1) {\n        const intersection = intersect(\n          boxMinimum,\n          boxMaximum,\n          edgeId,\n          prevPoint,\n          currPoint,\n          scratchIntersection,\n        );\n        const { x, y, z: t } = intersection;\n        const tInv = 1.0 - t;\n\n        // Interpolate the barycentric coordinates\n        const baryA = prevBary.x * tInv + currBary.x * t;\n        const baryB = prevBary.y * tInv + currBary.y * t;\n        const baryC = prevBary.z * tInv + currBary.z * t;\n\n        Cartesian2.fromElements(x, y, outputPoints[outputLength]);\n        Cartesian3.fromElements(baryA, baryB, baryC, outputBarys[outputLength]);\n        outputLength++;\n      }\n\n      // If the second point is on or inside, add it\n      if (currInside >= 0) {\n        Cartesian2.clone(currPoint, outputPoints[outputLength]);\n        Cartesian3.clone(currBary, outputBarys[outputLength]);\n        outputLength++;\n      }\n\n      prevIdx = currIdx;\n      prevPoint = currPoint;\n      prevBary = currBary;\n      prevInside = currInside;\n    }\n\n    // All points were outside, so break early\n    if (outputLength === 0) {\n      break;\n    }\n  }\n\n  result.length = outputLength;\n  for (let i = 0; i < outputLength; i++) {\n    Cartesian2.clone(outputPoints[i], result.coordinates[i]);\n    Cartesian3.clone(outputBarys[i], result.barycentricCoordinates[i]);\n  }\n  return result;\n}\n\n/**\n * Clips a 2D triangle against one quadrant of a box.\n * @private\n * @param {boolean} isEastChild <code>true</code> if the quadrant is on the east side of the box.\n * @param {boolean} isNorthChild <code>true</code> if the quadrant is on the north side of the box.\n * @param {Cartesian2} boxMinimum The lower left corner of the box.\n * @param {Cartesian2} boxMaximum The upper right corner of the box.\n * @param {Cartesian2} p0 The first vertex of the triangle.\n * @param {Cartesian2} p1 The second vertex of the triangle.\n * @param {Cartesian2} p2 The third vertex of the triangle.\n * @param {PolygonResult} result The object into which to copy the result.\n * @returns {PolygonResult} The polygon that results after the clip, specified as a list of coordinates in counter-clockwise order.\n */\nfunction clipTriangleFromQuadrant(\n  isEastChild,\n  isNorthChild,\n  boxMinimum,\n  boxMaximum,\n  p0,\n  p1,\n  p2,\n  result,\n) {\n  const edgeStart = isEastChild\n    ? isNorthChild\n      ? EDGE_ID_BOTTOM\n      : EDGE_ID_LEFT\n    : isNorthChild\n      ? EDGE_ID_RIGHT\n      : EDGE_ID_TOP;\n\n  return clipTriangleAgainstBoxEdgeRange(\n    edgeStart,\n    2,\n    boxMinimum,\n    boxMaximum,\n    p0,\n    p1,\n    p2,\n    result,\n  );\n}\n\nconst lookUpTableBaryToPrim = [\n  [], // 000\n  [0], // 001\n  [1], // 010\n  [0, 1], // 011\n  [2], // 100\n  [0, 2], // 101\n  [1, 2], // 110\n  [0, 1, 2], // 111\n];\n\n/**\n * Returns triangles that are clipped against a quadrant of a tile.\n * @private\n * @param {boolean} isEastChild <code>true</code> if the quadrant is on the east side of the tile.\n * @param {boolean} isNorthChild <code>true</code> if the quadrant is on the north side of the tile.\n * @param {number} indexCount Number of indices in the original triangle list.\n * @param {Uint8Array|Uint16Array|Uint32Array} indices Original triangle index list.\n * @param {number} vertexCount Number of vertices in the original vertex list.\n * @param {Float32Array} vertices Original vertex list.\n * @param {TerrainEncoding} vertexEncoding Encoding of the original vertices.\n * @param {number[]} resultIndices Indices of the clipped triangles.\n * @param {number[]} resultWestIndices Indices on the west edge.\n * @param {number[]} resultSouthIndices Indices on the south edge.\n * @param {number[]} resultEastIndices Indices on the east edge.\n * @param {number[]} resultNorthIndices Indices on the north edge.\n * @param {number[]} resultTriIds Per-vertex index to the originating triangle in indices.\n * @param {number[]} resultBary Per-vertex barycentric coordinate corresponding to the originating triangle.\n * @param {number[]} resultUVs Per-vertex UV within the quadrant.\n */\nfunction clipTileFromQuadrant(\n  isEastChild,\n  isNorthChild,\n  indexCount,\n  indices,\n  vertexCount,\n  vertices,\n  vertexEncoding,\n  resultIndices,\n  resultWestIndices,\n  resultSouthIndices,\n  resultEastIndices,\n  resultNorthIndices,\n  resultTriIds,\n  resultBary,\n  resultUVs,\n) {\n  const upsampledVertexMap = {};\n\n  const minU = isEastChild ? 0.5 : 0.0;\n  const maxU = isEastChild ? 1.0 : 0.5;\n  const minV = isNorthChild ? 0.5 : 0.0;\n  const maxV = isNorthChild ? 1.0 : 0.5;\n\n  const minUV = scratchMinUV;\n  minUV.x = minU;\n  minUV.y = minV;\n\n  const maxUV = scratchMaxUV;\n  maxUV.x = maxU;\n  maxUV.y = maxV;\n\n  let upsampledVertexCount = 0;\n\n  // Loop over all the original triangles\n  for (let i = 0; i < indexCount; i += 3) {\n    const indexA = indices[i + 0];\n    const indexB = indices[i + 1];\n    const indexC = indices[i + 2];\n\n    const uvA = vertexEncoding.decodeTextureCoordinates(\n      vertices,\n      indexA,\n      scratchUvA,\n    );\n    const uvB = vertexEncoding.decodeTextureCoordinates(\n      vertices,\n      indexB,\n      scratchUvB,\n    );\n    const uvC = vertexEncoding.decodeTextureCoordinates(\n      vertices,\n      indexC,\n      scratchUvC,\n    );\n\n    const clippedPolygon = clipTriangleFromQuadrant(\n      isEastChild,\n      isNorthChild,\n      minUV,\n      maxUV,\n      uvA,\n      uvB,\n      uvC,\n      scratchPolygon,\n    );\n    const clippedPolygonLength = clippedPolygon.length;\n    if (clippedPolygonLength < 3) {\n      // Triangle is outside clipping window, so skip it\n      continue;\n    }\n\n    const polygonUpsampledIndices = scratchPolygonIndices;\n\n    for (let p = 0; p < clippedPolygonLength; p++) {\n      const polygonBary = clippedPolygon.barycentricCoordinates[p];\n      const bA = polygonBary.x;\n      const bB = polygonBary.y;\n      const bC = polygonBary.z;\n\n      // Convert the barycentric coords to a bitfield to find out which vertices are involved\n      const baryId =\n        Math.ceil(bA) | (Math.ceil(bB) << 1) | (Math.ceil(bC) << 2);\n      const primitiveIds = lookUpTableBaryToPrim[baryId];\n\n      let upsampledIndex;\n      let isNewVertex = false;\n\n      if (primitiveIds.length === 1) {\n        //-------------------------------------------------------\n        // Vertex: Only one barycentric coord is set, so it's on a vertex\n        //-------------------------------------------------------\n        const pointPrimitiveId = primitiveIds[0];\n        const pointIndex = indices[i + pointPrimitiveId];\n\n        // Add the vertex if it doesn't exist already\n        const pointKey = pointIndex;\n        upsampledIndex = upsampledVertexMap[pointKey];\n        if (upsampledIndex === undefined) {\n          isNewVertex = true;\n          upsampledIndex = upsampledVertexCount++;\n          upsampledVertexMap[pointKey] = upsampledIndex;\n        }\n      } else if (primitiveIds.length === 2) {\n        //-------------------------------------------------------\n        // Edge: Only two barycentric coords are set, so it's on an edge\n        //-------------------------------------------------------\n        const edgePrimitiveIdA = primitiveIds[0];\n        const edgePrimitiveIdB = primitiveIds[1];\n        const edgeIndexA = indices[i + edgePrimitiveIdA];\n        const edgeIndexB = indices[i + edgePrimitiveIdB];\n\n        // Detect if a clipped position was already added by a triangle that shares the same edge.\n        // The key is based on the two edge indices and whether it is the first or second clipped position on the edge (an edge can be clipped by a convex shape at most twice).\n        const prevBary =\n          clippedPolygon.barycentricCoordinates[\n            (p + clippedPolygonLength - 1) % clippedPolygonLength\n          ];\n        const prevBaryId =\n          Math.ceil(prevBary.x) |\n          (Math.ceil(prevBary.y) << 1) |\n          (Math.ceil(prevBary.z) << 2);\n        const sameEdge = baryId === prevBaryId;\n\n        // The winding order of the edge will consty between triangles (i.e. A -> B vs B -> A), so take the min/max to make the key consistent.\n        const minIndex = Math.min(edgeIndexA, edgeIndexB);\n        const maxIndex = Math.max(edgeIndexA, edgeIndexB);\n        const baseKey = vertexCount + 2 * (minIndex * vertexCount + maxIndex);\n\n        const firstKey = baseKey + 0;\n        const secondKey = baseKey + 1;\n        const firstEntry = upsampledVertexMap[firstKey];\n        const secondEntry = upsampledVertexMap[secondKey];\n\n        // !firstEntry && !sameEdge                -> firstEntry (undefined)\n        // !secondEntry && sameEdge                -> secondEntry (undefined)\n        // firstEntry && !secondEntry && !sameEdge -> firstEntry (reverse solo)\n        // firstEntry && secondEntry && !sameEdge  -> secondEntry (reverse first)\n        // firstEntry && secondEntry && sameEdge   -> firstEntry (reverse second)\n        const useFirst =\n          !sameEdge === (firstEntry === undefined || secondEntry === undefined);\n        upsampledIndex = useFirst ? firstEntry : secondEntry;\n\n        // Add the vertex if it doesn't already exist\n        if (upsampledIndex === undefined) {\n          isNewVertex = true;\n          upsampledIndex = upsampledVertexCount++;\n          const edgeKey = useFirst ? firstKey : secondKey;\n          upsampledVertexMap[edgeKey] = upsampledIndex;\n        }\n      } else {\n        //-------------------------------------------------------\n        // Face: All three barycentric coords are set, so it's inside the triangle\n        //-------------------------------------------------------\n        isNewVertex = true;\n        upsampledIndex = upsampledVertexCount++;\n      }\n\n      // Store the index for this point in the polygon\n      polygonUpsampledIndices[p] = upsampledIndex;\n\n      if (isNewVertex) {\n        const triId = i / 3;\n        resultTriIds.push(triId);\n        const polygonUV = clippedPolygon.coordinates[p];\n        const u = (polygonUV.x - minU) / (maxU - minU);\n        const v = (polygonUV.y - minV) / (maxV - minV);\n\n        resultUVs.push(u, v);\n        resultBary.push(bA, bB);\n\n        if (u === 0.0) {\n          resultWestIndices.push(upsampledIndex);\n        } else if (u === 1.0) {\n          resultEastIndices.push(upsampledIndex);\n        }\n        if (v === 0.0) {\n          resultSouthIndices.push(upsampledIndex);\n        } else if (v === 1.0) {\n          resultNorthIndices.push(upsampledIndex);\n        }\n      }\n    }\n\n    // Triangulate the polygon by connecting vertices in a fan shape\n    const ui0 = polygonUpsampledIndices[0];\n    let ui1 = polygonUpsampledIndices[1];\n    let ui2 = polygonUpsampledIndices[2];\n    resultIndices.push(ui0, ui1, ui2);\n    for (let j = 3; j < clippedPolygonLength; j++) {\n      ui1 = ui2;\n      ui2 = polygonUpsampledIndices[j];\n      resultIndices.push(ui0, ui1, ui2);\n    }\n  }\n\n  resultWestIndices.sort(function (a, b) {\n    return resultUVs[a * 2 + 1] - resultUVs[b * 2 + 1];\n  });\n  resultSouthIndices.sort(function (a, b) {\n    return resultUVs[b * 2 + 0] - resultUVs[a * 2 + 0];\n  });\n  resultEastIndices.sort(function (a, b) {\n    return resultUVs[b * 2 + 1] - resultUVs[a * 2 + 1];\n  });\n  resultNorthIndices.sort(function (a, b) {\n    return resultUVs[a * 2 + 0] - resultUVs[b * 2 + 0];\n  });\n}\n\nexport default Cesium3DTilesTerrainGeometryProcessor;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cesium3DTilesTerrainData from \"./Cesium3DTilesTerrainData.js\";\nimport CesiumMath from \"./Math.js\";\nimport Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport DoubleEndedPriorityQueue from \"./DoubleEndedPriorityQueue.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport Frozen from \"./Frozen.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport ImplicitSubtree from \"../Scene/ImplicitSubtree.js\";\nimport ImplicitTileCoordinates from \"../Scene/ImplicitTileCoordinates.js\";\nimport IonResource from \"./IonResource.js\";\nimport ImplicitTileset from \"../Scene/ImplicitTileset.js\";\nimport loadImageFromTypedArray from \"./loadImageFromTypedArray.js\";\nimport MetadataSchema from \"../Scene/MetadataSchema.js\";\nimport MetadataSchemaLoader from \"../Scene/MetadataSchemaLoader.js\";\nimport MetadataSemantic from \"../Scene/MetadataSemantic.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport parseGlb from \"../Scene/GltfPipeline/parseGlb.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\nimport ResourceCache from \"../Scene/ResourceCache.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\n\n/**\n * @typedef {object} Cesium3DTilesTerrainProvider.ConstructorOptions\n *\n * Initialization options for the Cesium3DTilesTerrainProvider constructor\n *\n * @property {boolean} [requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server, in the form of per vertex normals if available.\n * @property {boolean} [requestWaterMask=false] Flag that indicates if the client should request per tile water masks from the server, if available.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the WGS84 ellipsoid is used.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * <div class=\"notice\">\n * To construct a Cesium3DTilesTerrainProvider, call {@link Cesium3DTilesTerrainProvider.fromIonAssetId} or {@link Cesium3DTilesTerrainProvider.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * A {@link TerrainProvider} that accesses terrain data in a 3D Tiles format.\n *\n * @alias Cesium3DTilesTerrainProvider\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n * @constructor\n *\n * @param {Cesium3DTilesTerrainProvider.ConstructorOptions}[options] An object describing initialization options\n *\n * @see TerrainProvider\n * @see Cesium3DTilesTerrainProvider.fromUrl\n * @see Cesium3DTilesTerrainProvider.fromIonAssetId\n *\n * // Create GTOPO30 with vertex normals\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.Cesium3DTilesTerrainProvider.fromIonAssetId(2732686, {\n *         requestVertexNormals: true\n *     })\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n */\nfunction Cesium3DTilesTerrainProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n  this._tileCredits = undefined;\n  this._errorEvent = new Event();\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.WGS84;\n\n  this._tilingScheme = new GeographicTilingScheme({\n    ellipsoid: this._ellipsoid,\n  });\n\n  this._subtreeCache = new ImplicitSubtreeCache({\n    provider: this,\n  });\n\n  /**\n   * @private\n   * @type {ImplicitTileset|undefined}\n   */\n  this._tileset0 = undefined;\n  /**\n   * @private\n   * @type {ImplicitTileset|undefined}\n   */\n  this._tileset1 = undefined;\n\n  this._resource = undefined;\n\n  /**\n   * Boolean flag that indicates if the client should request vertex normals from the server.\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  this._requestVertexNormals = options.requestVertexNormals ?? false;\n\n  /**\n   * Boolean flag that indicates if the client should request tile watermasks from the server.\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  this._requestWaterMask = options.requestWaterMask ?? false;\n}\n\n/**\n * Creates a {@link TerrainProvider} that accesses terrain data in a Cesium 3D Tiles format.\n *\n * @param {Resource|string|Promise<Resource>|Promise<string>} url The URL of the Cesium terrain server.\n * @param {Cesium3DTilesTerrainProvider.ConstructorOptions} [options] An object describing initialization options.\n * @returns {Promise<Cesium3DTilesTerrainProvider>} A promise that resolves to the terrain provider.\n *\n * @example\n * // Create terrain with normals.\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.Cesium3DTilesTerrainProvider.fromUrl(\n *       Cesium.IonResource.fromAssetId(3956), {\n *         requestVertexNormals: true\n *     })\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n */\nCesium3DTilesTerrainProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  url = await Promise.resolve(url);\n  const resource = Resource.createIfNeeded(url);\n\n  let tilesetJson;\n  try {\n    tilesetJson = await resource.fetchJson();\n  } catch (error) {\n    throw new RuntimeError(\"Could not load tileset JSON\", error);\n  }\n\n  const provider = new Cesium3DTilesTerrainProvider(options);\n  // ion resources have a credits property we can use for additional attribution.\n  provider._tileCredits = resource.credits;\n  provider._resource = resource;\n\n  const childrenJson = tilesetJson[\"root\"][\"children\"];\n  const child0Json = childrenJson[0];\n  const child1Json = childrenJson[1];\n\n  const metadataSchemaJson = tilesetJson[\"schema\"];\n  const metadataSchema = MetadataSchema.fromJson(metadataSchemaJson);\n\n  provider._tileset0 = new ImplicitTileset(\n    resource,\n    child0Json,\n    metadataSchema,\n  );\n  provider._tileset1 = new ImplicitTileset(\n    resource,\n    child1Json,\n    metadataSchema,\n  );\n\n  return provider;\n};\n\n/**\n * Creates a {@link TerrainProvider} from a Cesium ion asset ID that accesses terrain data in a Cesium 3D Tiles format\n *\n * @param {number} assetId The Cesium ion asset id.\n * @param {CesiumTerrainProvider.ConstructorOptions} [options] An object describing initialization options.\n * @returns {Promise<CesiumTerrainProvider>}\n *\n * @example\n * // Create GTOPO30 with vertex normals\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.Cesium3DTilesTerrainProvider.fromIonAssetId(2732686, {\n *         requestVertexNormals: true\n *     })\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n * @exception {RuntimeError} layer.json does not specify a format\n * @exception {RuntimeError} layer.json specifies an unknown format\n * @exception {RuntimeError} layer.json specifies an unsupported quantized-mesh version\n * @exception {RuntimeError} layer.json does not specify a tiles property, or specifies an empty array\n * @exception {RuntimeError} layer.json does not specify any tile URL templates\n */\nCesium3DTilesTerrainProvider.fromIonAssetId = async function (\n  assetId,\n  options,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"assetId\", assetId);\n  //>>includeEnd('debug');\n\n  const resource = await IonResource.fromAssetId(assetId);\n  return Cesium3DTilesTerrainProvider.fromUrl(resource, options);\n};\n\nconst scratchPromises = new Array(3);\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link Cesium3DTilesTerrainProvider#ready} returns true. The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise.<Cesium3DTilesTerrainData>|undefined} A promise for the requested geometry. If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n */\nCesium3DTilesTerrainProvider.prototype.requestTileGeometry = async function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const rootId = getRootIdFromGeographic(level, x);\n  const implicitTileset = rootId === 0 ? this._tileset0 : this._tileset1;\n\n  const tileCoord = getImplicitTileCoordinatesFromGeographicCoordinates(\n    implicitTileset,\n    level,\n    x,\n    y,\n  );\n\n  const subtreeCoord = tileCoord.getSubtreeCoordinates();\n\n  const cache = this._subtreeCache;\n  let subtree = cache.find(rootId, subtreeCoord);\n\n  const requestWaterMask = this._requestWaterMask;\n  const that = this;\n\n  let subtreePromise;\n  if (subtree === undefined) {\n    const subtreeRelative =\n      implicitTileset.subtreeUriTemplate.getDerivedResource({\n        templateValues: subtreeCoord.getTemplateValues(),\n      });\n    const subtreeResource = implicitTileset.baseResource.getDerivedResource({\n      url: subtreeRelative.url,\n    });\n    subtreePromise = subtreeResource\n      .fetchArrayBuffer()\n      .then(async function (arrayBuffer) {\n        // Check if the subtree exists again in case multiple fetches for the same subtree went out at the same time. Don't want to double-add to the cache\n        subtree = cache.find(rootId, subtreeCoord);\n        if (subtree === undefined) {\n          const bufferU8 = new Uint8Array(arrayBuffer);\n          subtree = await ImplicitSubtree.fromSubtreeJson(\n            that._resource,\n            undefined,\n            bufferU8,\n            implicitTileset,\n            subtreeCoord,\n          );\n          cache.addSubtree(rootId, subtree);\n        }\n\n        return subtree;\n      });\n  } else {\n    subtreePromise = Promise.resolve(subtree);\n  }\n\n  // Note: only one content for terrain\n  const glbRelative = implicitTileset.contentUriTemplates[0].getDerivedResource(\n    {\n      templateValues: tileCoord.getTemplateValues(),\n    },\n  );\n  const glbResource = implicitTileset.baseResource.getDerivedResource({\n    url: glbRelative.url,\n  });\n\n  // Start fetching the glb right away -- possibly even before the subtree is loaded in some cases\n  const glbPromise = glbResource.fetchArrayBuffer();\n  if (glbPromise === undefined) {\n    return undefined;\n  }\n\n  const gltfPromise = glbPromise.then((glbBuffer) =>\n    parseGlb(new Uint8Array(glbBuffer)),\n  );\n\n  const promises = scratchPromises;\n  promises[0] = subtreePromise;\n  promises[1] = gltfPromise;\n  promises[2] = requestWaterMask\n    ? gltfPromise.then((gltf) => loadWaterMask(gltf, glbResource))\n    : undefined;\n\n  try {\n    const results = await Promise.all(promises);\n    const subtree = results[0];\n    const gltf = results[1];\n    const waterMask = results[2];\n\n    const metadataView = subtree.getTileMetadataView(tileCoord);\n\n    const minimumHeight = metadataView.getPropertyBySemantic(\n      MetadataSemantic.TILE_MINIMUM_HEIGHT,\n    );\n\n    const maximumHeight = metadataView.getPropertyBySemantic(\n      MetadataSemantic.TILE_MAXIMUM_HEIGHT,\n    );\n\n    const boundingSphereArray = metadataView.getPropertyBySemantic(\n      MetadataSemantic.TILE_BOUNDING_SPHERE,\n    );\n    const boundingSphere = BoundingSphere.unpack(\n      boundingSphereArray,\n      0,\n      new BoundingSphere(),\n    );\n\n    const horizonOcclusionPoint = metadataView.getPropertyBySemantic(\n      MetadataSemantic.TILE_HORIZON_OCCLUSION_POINT,\n    );\n\n    const tilingScheme = that._tilingScheme;\n\n    // The tiling scheme uses geographic coords, not implicit coords\n    const rectangle = tilingScheme.tileXYToRectangle(\n      x,\n      y,\n      level,\n      new Rectangle(),\n    );\n\n    const ellipsoid = that._ellipsoid;\n\n    const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n      rectangle,\n      minimumHeight,\n      maximumHeight,\n      ellipsoid,\n      new OrientedBoundingBox(),\n    );\n\n    const skirtHeight = that.getLevelMaximumGeometricError(level) * 5.0;\n\n    const hasSW = isChildAvailable(implicitTileset, subtree, tileCoord, 0, 0);\n    const hasSE = isChildAvailable(implicitTileset, subtree, tileCoord, 1, 0);\n    const hasNW = isChildAvailable(implicitTileset, subtree, tileCoord, 0, 1);\n    const hasNE = isChildAvailable(implicitTileset, subtree, tileCoord, 1, 1);\n    const childTileMask =\n      (hasSW ? 1 : 0) | (hasSE ? 2 : 0) | (hasNW ? 4 : 0) | (hasNE ? 8 : 0);\n\n    const terrainData = new Cesium3DTilesTerrainData({\n      gltf: gltf,\n      minimumHeight: minimumHeight,\n      maximumHeight: maximumHeight,\n      boundingSphere: boundingSphere,\n      orientedBoundingBox: orientedBoundingBox,\n      horizonOcclusionPoint: horizonOcclusionPoint,\n      skirtHeight: skirtHeight,\n      requestVertexNormals: that._requestVertexNormals,\n      childTileMask: childTileMask,\n      credits: that._tileCredits,\n      waterMask: waterMask,\n    });\n\n    return Promise.resolve(terrainData);\n  } catch (err) {\n    console.log(\n      `Could not load subtree: ${rootId} ${subtreeCoord.level} ${subtreeCoord.x} ${subtreeCoord.y}: ${err}`,\n    );\n\n    console.log(\n      `Could not load tile: ${rootId} ${tileCoord.level} ${tileCoord.x} ${tileCoord.y}: ${err}`,\n    );\n    return undefined;\n  }\n};\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported or availability is unknown, otherwise true or false.\n */\nCesium3DTilesTerrainProvider.prototype.getTileDataAvailable = function (\n  x,\n  y,\n  level,\n) {\n  const cache = this._subtreeCache;\n\n  const rootId = getRootIdFromGeographic(level, x);\n  const implicitTileset = rootId === 0 ? this._tileset0 : this._tileset1;\n  const tileCoord = getImplicitTileCoordinatesFromGeographicCoordinates(\n    implicitTileset,\n    level,\n    x,\n    y,\n  );\n\n  const subtreeCoord = tileCoord.getSubtreeCoordinates();\n  const subtree = cache.find(rootId, subtreeCoord);\n\n  // If the subtree is loaded, return the tile's availability\n  if (subtree !== undefined) {\n    const available = subtree.tileIsAvailableAtCoordinates(tileCoord);\n    return available;\n  }\n\n  if (subtreeCoord.isImplicitTilesetRoot()) {\n    if (tileCoord.isSubtreeRoot()) {\n      // The subtree's root tile is always available\n      return true;\n    }\n    // Don't know if the tile is available because its subtree hasn't been loaded yet\n    return undefined;\n  }\n\n  const parentSubtreeCoord = subtreeCoord.getParentSubtreeCoordinates();\n\n  // Check the parent subtree's child subtree availability to know if this subtree is available.\n  const parentSubtree = cache.find(rootId, parentSubtreeCoord);\n  if (parentSubtree !== undefined) {\n    const isChildSubtreeAvailable =\n      parentSubtree.childSubtreeIsAvailableAtCoordinates(subtreeCoord);\n\n    if (isChildSubtreeAvailable) {\n      return tileCoord.isSubtreeRoot()\n        ? true // The root tile of the subtree is always available\n        : undefined; // Don't know if the tile is available because the subtree hasn't been loaded yet\n    }\n    // Child subtree not available, so this tile isn't either\n    return false;\n  }\n\n  // The parent subtree isn't loaded either, so we don't even know if the child subtree is available\n  return undefined;\n};\n\n/**\n * Gets the root ID from geographic tile coordinates.\n * There are 2 root tiles in a geographic tiling scheme: one for each hemisphere.\n * @private\n * @param {number} level The level of the tile\n * @param {number} x The x coordinate of the tile\n * @returns {number} The root tile ID (0 or 1)\n */\nfunction getRootIdFromGeographic(level, x) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.number(\"x\", x);\n  //>>includeEnd('debug');\n\n  const numberOfYTilesAtLevel = 1 << level;\n  const rootId = (x / numberOfYTilesAtLevel) | 0;\n  return rootId;\n}\n\n/**\n * Gets the implicit tile coordinates from geographic tile coordinates.\n * @private\n * @param {ImplicitTileset} implicitTileset\n * @param {number} level The level of the tile\n * @param {number} x The x coordinate of the tile\n * @param {number} y The y coordinate of the tile\n * @returns {ImplicitTileCoordinates} The implicit tile coordinates\n */\nfunction getImplicitTileCoordinatesFromGeographicCoordinates(\n  implicitTileset,\n  level,\n  x,\n  y,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"implicitTileset\", implicitTileset);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  //>>includeEnd('debug');\n\n  const numberOfYTilesAtLevel = 1 << level;\n  const implicitLevel = level;\n  const implicitX = x % numberOfYTilesAtLevel;\n  const implicitY = numberOfYTilesAtLevel - y - 1;\n  const { subdivisionScheme, subtreeLevels } = implicitTileset;\n\n  return new ImplicitTileCoordinates({\n    subdivisionScheme: subdivisionScheme,\n    subtreeLevels: subtreeLevels,\n    level: implicitLevel,\n    x: implicitX,\n    y: implicitY,\n  });\n}\n\n/**\n * Loads the water mask image texture from the glTF.\n * @private\n * @param {Object.<string,*>} gltf The glTF JSON.\n * @param {Resource} gltfResource The resource pointing to the glTF.\n * @returns {Promise<HTMLImageElement|HTMLCanvasElement|ImageBitmap>|undefined} A promise that resolves to the loaded image. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nasync function loadWaterMask(gltf, gltfResource) {\n  const extension = gltf.extensions?.[\"EXT_structural_metadata\"];\n  if (!defined(extension) || !defined(extension.propertyTextures)) {\n    return;\n  }\n\n  const schemaLoader = new MetadataSchemaLoader({\n    schema: extension.schema,\n  });\n\n  await schemaLoader.load();\n  const schema = schemaLoader.schema;\n\n  let metadataClass, waterMaskProperty;\n  if (defined(schema.classes)) {\n    for (const classId in schema.classes) {\n      if (schema.classes.hasOwnProperty(classId)) {\n        metadataClass = schema.classes[classId];\n        waterMaskProperty = metadataClass.propertiesBySemantic[\"WATERMASK\"];\n        if (defined(waterMaskProperty)) {\n          break;\n        }\n      }\n    }\n  }\n\n  if (!defined(waterMaskProperty)) {\n    return;\n  }\n\n  const propertyTextureData = extension.propertyTextures.find(\n    (data) => data.class === metadataClass.id,\n  );\n  if (!defined(propertyTextureData)) {\n    throw new DeveloperError(\n      `Expected a propertyTexture with a class ${metadataClass.id}`,\n    );\n  }\n\n  const textureInfo = propertyTextureData.properties[waterMaskProperty.id];\n  const texture = gltf.textures[textureInfo.index];\n  const bufferViewId = gltf.images[texture.source]?.bufferView;\n\n  const bufferViewLoader = ResourceCache.getBufferViewLoader({\n    gltf: gltf,\n    bufferViewId: bufferViewId,\n    gltfResource: gltfResource,\n    baseResource: gltfResource,\n  });\n  await bufferViewLoader.load();\n\n  const image = await loadImageFromTypedArray({\n    uint8Array: new Uint8Array(bufferViewLoader.typedArray),\n    format: \"image/png\",\n    flipY: false,\n    skipColorSpaceConversion: true,\n  });\n\n  return image;\n}\n\n/**\n * Checks whether a child tile at a given tile coordinate is available in the given subtree.\n * @private\n * @param {ImplicitTileset} implicitTileset The implicit tileset\n * @param {ImplicitSubtree} subtree The subtree\n * @param {ImplicitTileCoordinates} coord The tile coordinates of the parent tile\n * @param {number} x The x coordinate of the child tile\n * @param {number} y The y coordinate of the child tile\n * @returns {boolean} <code>true</code> if the child tile is available. <code>false</code> otherwise.\n */\nfunction isChildAvailable(implicitTileset, subtree, coord, x, y) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"implicitTileset\", implicitTileset);\n  Check.typeOf.object(\"subtree\", subtree);\n  Check.typeOf.object(\"coord\", coord);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  //>>includeEnd('debug');\n\n  // For terrain it's required that the root tile of any available subtree is also available, so\n  // when the child tile belongs to a child subtree, we only need to check if the child subtree itself is available.\n  const isBottomOfSubtree = coord.isBottomOfSubtree();\n\n  const localLevel = 1;\n  const offset = getImplicitTileCoordinates(implicitTileset, localLevel, x, y);\n  const childCoord = coord.getDescendantCoordinates(offset);\n\n  const isAvailable = isBottomOfSubtree\n    ? subtree.childSubtreeIsAvailableAtCoordinates(childCoord)\n    : subtree.tileIsAvailableAtCoordinates(childCoord);\n\n  return isAvailable;\n}\n\n/**\n * Gets the implicit tile coordinates from geographic tile coordinates.\n * @private\n * @param {ImplicitTileset} implicitTileset\n * @param {number} level The level of the tile\n * @param {number} x The x coordinate of the tile\n * @param {number} y The y coordinate of the tile\n * @returns {ImplicitTileCoordinates}\n */\nfunction getImplicitTileCoordinates(implicitTileset, level, x, y) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"implicitTileset\", implicitTileset);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  //>>includeEnd('debug');\n\n  const { subdivisionScheme, subtreeLevels } = implicitTileset;\n\n  return new ImplicitTileCoordinates({\n    subdivisionScheme: subdivisionScheme,\n    subtreeLevels: subtreeLevels,\n    level: level,\n    x: x,\n    y: y,\n  });\n}\n\n/**\n * Make sure we load availability data for a tile\n *\n * @param {number} _x The X coordinate of the tile for which to request geometry.\n * @param {number} _y The Y coordinate of the tile for which to request geometry.\n * @param {number} _level The level of the tile for which to request geometry.\n * @returns {Promise<void>|undefined} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nCesium3DTilesTerrainProvider.prototype.loadTileDataAvailability = function (\n  _x,\n  _y,\n  _level,\n) {\n  return undefined;\n};\n\n/**\n * Get the maximum geometric error allowed in a tile at a given level.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nCesium3DTilesTerrainProvider.prototype.getLevelMaximumGeometricError =\n  function (level) {\n    const ellipsoid = this._ellipsoid;\n    const rootError =\n      TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n        ellipsoid,\n        64,\n        2,\n      );\n    return rootError / (1 << level);\n  };\n\nObject.defineProperties(Cesium3DTilesTerrainProvider.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof Cesium3DTilesTerrainProvider.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n   * the source of the terrain.\n   * @memberof Cesium3DTilesTerrainProvider.prototype\n   * @type {Credit}\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof Cesium3DTilesTerrainProvider.prototype\n   * @type {TilingScheme}\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask. The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * @memberof Cesium3DTilesTerrainProvider.prototype\n   * @type {boolean}\n   */\n  hasWaterMask: {\n    get: function () {\n      return this._requestWaterMask;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * @memberof Cesium3DTilesTerrainProvider.prototype\n   * @type {boolean}\n   */\n  hasVertexNormals: {\n    get: function () {\n      return this._requestVertexNormals;\n    },\n  },\n\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles.\n   * @memberof Cesium3DTilesTerrainProvider.prototype\n   * @type {TileAvailability|undefined}\n   */\n  availability: {\n    get: function () {\n      return this._subtreeCache;\n    },\n  },\n});\n\n/**\n * A node in the implicit subtree cache.\n * @private\n * @constructor\n * @param {number} rootId The root tile ID (0 or 1)\n * @param {ImplicitSubtree} subtree The subtree\n * @param {number} stamp The timestamp used for priority ordering\n */\nfunction ImplicitSubtreeCacheNode(rootId, subtree, stamp) {\n  this.rootId = rootId;\n  this.subtree = subtree;\n  this.stamp = stamp;\n}\n\n/**\n * A cache for implicit subtrees.\n * @private\n * @constructor\n * @param {object} options Object with the following properties\n * @param {Cesium3DTilesTerrainProvider} options.provider\n * @param {number} [options.maximumSubtreeCount=0] The total number of subtrees this cache can store. If adding a new subtree would exceed this limit, the lowest priority subtrees will be removed until there is room, unless the subtree that is going to be removed is the parent of the new subtree, in which case it will not be removed and the new subtree will still be added, exceeding the memory limit.\n */\nfunction ImplicitSubtreeCache(options) {\n  this._maximumSubtreeCount = options.maximumSubtreeCount ?? 0;\n  this._subtreeRequestCounter = 0;\n\n  this._queue = new DoubleEndedPriorityQueue({\n    comparator: ImplicitSubtreeCache.comparator,\n  });\n\n  this._provider = options.provider;\n}\n\n/**\n * @param {ImplicitSubtreeCacheNode} a\n * @param {ImplicitSubtreeCacheNode} b\n * @returns {number}\n */\nImplicitSubtreeCache.comparator = function (a, b) {\n  const aCoord = a.subtree.implicitCoordinates;\n  const bCoord = b.subtree.implicitCoordinates;\n  if (aCoord.isAncestor(bCoord)) {\n    // Technically this shouldn't happen because the ancestor subtree was supposed to be added to the cache first.\n    return +1.0;\n  } else if (bCoord.isAncestor(aCoord)) {\n    return -1.0;\n  }\n  return a.stamp - b.stamp;\n};\n\n/**\n * Adds a subtree to the cache.\n * @param {number} rootId The root tile ID (0 or 1)\n * @param {ImplicitSubtree} subtree The subtree\n */\nImplicitSubtreeCache.prototype.addSubtree = function (rootId, subtree) {\n  const cacheNode = new ImplicitSubtreeCacheNode(\n    rootId,\n    subtree,\n    this._subtreeRequestCounter,\n  );\n  this._queue.insert(cacheNode);\n\n  this._subtreeRequestCounter++;\n\n  const subtreeCoord = subtree.implicitCoordinates;\n\n  // Make sure the parent subtree exists in the cache\n  if (subtreeCoord.level > 0) {\n    const parentCoord = subtreeCoord.getParentSubtreeCoordinates();\n    const parentNode = this.find(rootId, parentCoord);\n\n    //>>includeStart('debug', pragmas.debug)\n    if (parentNode === undefined) {\n      throw new DeveloperError(\"parent node needs to exist\");\n    }\n    //>>includeEnd('debug');\n  }\n\n  if (this._maximumSubtreeCount > 0) {\n    while (this._queue.length > this._maximumSubtreeCount) {\n      const lowestPriorityNode = this._queue.getMinimum();\n      if (lowestPriorityNode === cacheNode) {\n        // Don't remove itself\n        break;\n      }\n\n      this._queue.removeMinimum();\n    }\n  }\n};\n\n/**\n * Finds a subtree in the cache.\n * @param {number} rootId The root tile ID (0 or 1)\n * @param {ImplicitTileCoordinates} subtreeCoord The coordinates of the subtree\n * @returns {ImplicitSubtree|undefined} The subtree if found; otherwise undefined.\n */\nImplicitSubtreeCache.prototype.find = function (rootId, subtreeCoord) {\n  const queue = this._queue;\n  const array = queue.internalArray;\n  const { level, x, y } = subtreeCoord;\n\n  for (let i = 0; i < queue.length; i++) {\n    const other = array[i];\n    const otherRootId = other.rootId;\n    const otherCoord = other.subtree.implicitCoordinates;\n    if (\n      otherRootId === rootId &&\n      otherCoord.level === level &&\n      otherCoord.x === x &&\n      otherCoord.y === y\n    ) {\n      return other.subtree;\n    }\n  }\n  return undefined;\n};\n\n/**\n * Determines the {@link ImplicitTileCoordinates} of the most detailed tile covering the position.\n *\n * @param {Cartographic} position The position for which to determine the maximum coordinates. The height component is ignored.\n * @returns {ImplicitTileCoordinates|undefined} The coordinates of the most detailed tile covering the position.\n * @throws {DeveloperError} If position is outside any tile according to the tiling scheme.\n */\n\nImplicitSubtreeCache.prototype._computeMaximumImplicitTileCoordinatesAtPosition =\n  function (position) {\n    const { longitude, latitude } = position;\n    const provider = this._provider;\n    const rootId = longitude < 0.0 ? 0 : 1;\n    const implicitTileset =\n      rootId === 0 ? provider._tileset0 : provider._tileset1;\n    const subtreeLevels = implicitTileset.subtreeLevels;\n    const rootSubtreeCoord = getImplicitTileCoordinates(\n      implicitTileset,\n      0,\n      0,\n      0,\n    );\n\n    let subtree = this.find(rootId, rootSubtreeCoord);\n    if (subtree === undefined) {\n      // Nothing has been loaded yet\n      return undefined;\n    }\n\n    let subtreeCoord = subtree.implicitCoordinates;\n    let subtreeX = subtreeCoord.x;\n    let subtreeY = subtreeCoord.y;\n    let subtreeLevel = subtreeCoord.level;\n\n    const globalMinimumLongitude = -CesiumMath.PI;\n    const globalMaximumLongitude = +CesiumMath.PI;\n    const rootLongitudeStart = CesiumMath.lerp(\n      globalMinimumLongitude,\n      globalMaximumLongitude,\n      rootId / 2.0,\n    );\n    const rootLongitudeEnd = CesiumMath.lerp(\n      globalMinimumLongitude,\n      globalMaximumLongitude,\n      (rootId + 1) / 2,\n    );\n    const rootLatitudeStart = -CesiumMath.PI * 0.5;\n    const rootLatitudeEnd = +CesiumMath.PI * 0.5;\n\n    let u = 0.0;\n    let v = 0.0;\n\n    // Find the deepest available subtree\n    let childSubtreeLoaded = true;\n    while (childSubtreeLoaded) {\n      const invDim = 1.0 / (1 << subtreeLevel);\n\n      const lonLength = (rootLongitudeEnd - rootLongitudeStart) * invDim;\n      const lonMin = rootLongitudeStart + subtreeX * lonLength;\n\n      const latLength = (rootLatitudeEnd - rootLatitudeStart) * invDim;\n      const latMin = rootLatitudeStart + subtreeY * latLength;\n\n      u = (longitude - lonMin) / lonLength;\n      v = (latitude - latMin) / latLength;\n\n      const childSubtreeCoord = computeDescendantCoordinatesAtUv(\n        implicitTileset,\n        subtreeCoord,\n        u,\n        v,\n        subtreeLevels,\n      );\n\n      if (subtree.childSubtreeIsAvailableAtCoordinates(childSubtreeCoord)) {\n        const childSubtree = this.find(rootId, childSubtreeCoord);\n        if (childSubtree !== undefined) {\n          subtree = childSubtree;\n          subtreeCoord = subtree.implicitCoordinates;\n          subtreeX = subtreeCoord.x;\n          subtreeY = subtreeCoord.y;\n          subtreeLevel = subtreeCoord.level;\n        } else {\n          // Child subtree is available but has not been loaded yet\n          // Since the root node of a subtree is always available, return the level of the child subtree\n          // sampleTerrainMostDetailed will keep calling this function until all available subtrees in the chain have been loaded\n          return childSubtreeCoord;\n        }\n      } else {\n        // Child subtree is not available\n        childSubtreeLoaded = false;\n      }\n    }\n\n    // Find the deepest level in the subtree\n    let deepestTileCoord;\n    for (let localLevel = 0; localLevel < subtreeLevels; localLevel++) {\n      const childCoord = computeDescendantCoordinatesAtUv(\n        implicitTileset,\n        subtreeCoord,\n        u,\n        v,\n        localLevel,\n      );\n\n      if (subtree.tileIsAvailableAtCoordinates(childCoord)) {\n        deepestTileCoord = childCoord;\n      } else {\n        break;\n      }\n    }\n\n    return deepestTileCoord;\n  };\n\n/**\n * Computes the descendant tile coordinates at a given (u,v) location within a subtree.\n * @private\n * @param {ImplicitTileset} implicitTileset\n * @param {ImplicitTileCoordinates} subtreeCoord\n * @param {number} u\n * @param {number} v\n * @param {number} levelOffset\n * @returns {ImplicitTileCoordinates} The parent subtree coordinate\n */\nfunction computeDescendantCoordinatesAtUv(\n  implicitTileset,\n  subtreeCoord,\n  u,\n  v,\n  levelOffset,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"implicitTileset\", implicitTileset);\n  Check.typeOf.object(\"subtreeCoord\", subtreeCoord);\n  Check.typeOf.number(\"u\", u);\n  Check.typeOf.number(\"v\", v);\n  Check.typeOf.number(\"levelOffset\", levelOffset);\n  //>>includeEnd('debug');\n\n  const dimension = 1 << levelOffset;\n  const localX = CesiumMath.clamp((u * dimension) | 0, 0, dimension - 1);\n  const localY = CesiumMath.clamp((v * dimension) | 0, 0, dimension - 1);\n  const offset = getImplicitTileCoordinates(\n    implicitTileset,\n    levelOffset,\n    localX,\n    localY,\n  );\n  return subtreeCoord.getDescendantCoordinates(offset);\n}\n\n// NOTE: ImplicitSubtreeCache implements just enough of the TileAvailability interface to support `sampleTerrain` and `sampleTerrainMostDetailed`.\n// Right now this just means implementing `computeMaximumLevelAtPosition`.\n// It's more difficult to implement the rest of the methods because doing everything in terms of ranges instead of bits is kind of awkward.\n\n/**\n * Determines the level of the most detailed tile covering the position.\n *\n * @param {Cartographic} position The position for which to determine the maximum available level. The height component is ignored.\n * @returns {number} The level of the most detailed tile covering the position.\n * @throws {DeveloperError} If position is outside any tile according to the tiling scheme.\n */\nImplicitSubtreeCache.prototype.computeMaximumLevelAtPosition = function (\n  position,\n) {\n  const tileCoordinates =\n    this._computeMaximumImplicitTileCoordinatesAtPosition(position);\n  if (tileCoordinates === undefined) {\n    return 0;\n  }\n  return tileCoordinates.level;\n};\n\nexport default Cesium3DTilesTerrainProvider;\n","import AttributeCompression from \"./AttributeCompression.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport WebMercatorTilingScheme from \"./WebMercatorTilingScheme.js\";\nimport getJsonFromTypedArray from \"./getJsonFromTypedArray.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport IonResource from \"./IonResource.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport QuantizedMeshTerrainData from \"./QuantizedMeshTerrainData.js\";\nimport Request from \"./Request.js\";\nimport RequestType from \"./RequestType.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\nimport TileAvailability from \"./TileAvailability.js\";\nimport TileProviderError from \"./TileProviderError.js\";\n\nfunction LayerInformation(layer) {\n  this.resource = layer.resource;\n  this.version = layer.version;\n  this.isHeightmap = layer.isHeightmap;\n  this.tileUrlTemplates = layer.tileUrlTemplates;\n  this.availability = layer.availability;\n  this.hasVertexNormals = layer.hasVertexNormals;\n  this.hasWaterMask = layer.hasWaterMask;\n  this.hasMetadata = layer.hasMetadata;\n  this.availabilityLevels = layer.availabilityLevels;\n  this.availabilityTilesLoaded = layer.availabilityTilesLoaded;\n  this.littleEndianExtensionSize = layer.littleEndianExtensionSize;\n  this.availabilityPromiseCache = {};\n}\n\n/**\n * @typedef {object} CesiumTerrainProvider.ConstructorOptions\n *\n * Initialization options for the CesiumTerrainProvider constructor\n *\n * @property {boolean} [requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server, in the form of per vertex normals if available.\n * @property {boolean} [requestWaterMask=false] Flag that indicates if the client should request per tile water masks from the server, if available.\n * @property {boolean} [requestMetadata=true] Flag that indicates if the client should request per tile metadata from the server, if available.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * Used to track creation details while fetching initial metadata\n *\n * @constructor\n * @private\n *\n * @param {CesiumTerrainProvider.ConstructorOptions} options An object describing initialization options\n */\nfunction TerrainProviderBuilder(options) {\n  this.requestVertexNormals = options.requestVertexNormals ?? false;\n  this.requestWaterMask = options.requestWaterMask ?? false;\n  this.requestMetadata = options.requestMetadata ?? true;\n  this.ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n\n  this.heightmapWidth = 65;\n  this.heightmapStructure = undefined;\n  this.hasWaterMask = false;\n  this.hasMetadata = false;\n  this.hasVertexNormals = false;\n  this.scheme = undefined;\n\n  this.lastResource = undefined;\n  this.layerJsonResource = undefined;\n  this.previousError = undefined;\n  this.availability = undefined;\n  this.tilingScheme = undefined;\n  this.levelZeroMaximumGeometricError = undefined;\n  this.heightmapStructure = undefined;\n  this.layers = [];\n  this.attribution = \"\";\n  this.overallAvailability = [];\n  this.overallMaxZoom = 0;\n  this.tileCredits = [];\n}\n\n/**\n * Complete CesiumTerrainProvider creation based on builder values.\n *\n * @private\n *\n * @param {CesiumTerrainProvider} provider\n */\nTerrainProviderBuilder.prototype.build = function (provider) {\n  provider._heightmapWidth = this.heightmapWidth;\n  provider._scheme = this.scheme;\n\n  // ion resources have a credits property we can use for additional attribution.\n  const credits = defined(this.lastResource.credits)\n    ? this.lastResource.credits\n    : [];\n  provider._tileCredits = credits.concat(this.tileCredits);\n  provider._availability = this.availability;\n  provider._tilingScheme = this.tilingScheme;\n  provider._requestWaterMask = this.requestWaterMask;\n  provider._levelZeroMaximumGeometricError =\n    this.levelZeroMaximumGeometricError;\n  provider._heightmapStructure = this.heightmapStructure;\n  provider._layers = this.layers;\n\n  provider._hasWaterMask = this.hasWaterMask;\n  provider._hasVertexNormals = this.hasVertexNormals;\n  provider._hasMetadata = this.hasMetadata;\n};\n\nasync function parseMetadataSuccess(terrainProviderBuilder, data, provider) {\n  if (!data.format) {\n    const message = \"The tile format is not specified in the layer.json file.\";\n    terrainProviderBuilder.previousError = TileProviderError.reportError(\n      terrainProviderBuilder.previousError,\n      provider,\n      defined(provider) ? provider._errorEvent : undefined,\n      message,\n    );\n\n    throw new RuntimeError(message);\n  }\n\n  if (!data.tiles || data.tiles.length === 0) {\n    const message =\n      \"The layer.json file does not specify any tile URL templates.\";\n    terrainProviderBuilder.previousError = TileProviderError.reportError(\n      terrainProviderBuilder.previousError,\n      provider,\n      defined(provider) ? provider._errorEvent : undefined,\n      message,\n    );\n\n    throw new RuntimeError(message);\n  }\n\n  let hasVertexNormals = false;\n  let hasWaterMask = false;\n  let hasMetadata = false;\n  let littleEndianExtensionSize = true;\n  let isHeightmap = false;\n  if (data.format === \"heightmap-1.0\") {\n    isHeightmap = true;\n    if (!defined(terrainProviderBuilder.heightmapStructure)) {\n      terrainProviderBuilder.heightmapStructure = {\n        heightScale: 1.0 / 5.0,\n        heightOffset: -1000.0,\n        elementsPerHeight: 1,\n        stride: 1,\n        elementMultiplier: 256.0,\n        isBigEndian: false,\n        lowestEncodedHeight: 0,\n        highestEncodedHeight: 256 * 256 - 1,\n      };\n    }\n    hasWaterMask = true;\n    terrainProviderBuilder.requestWaterMask = true;\n  } else if (data.format.indexOf(\"quantized-mesh-1.\") !== 0) {\n    const message = `The tile format \"${data.format}\" is invalid or not supported.`;\n    terrainProviderBuilder.previousError = TileProviderError.reportError(\n      terrainProviderBuilder.previousError,\n      provider,\n      defined(provider) ? provider._errorEvent : undefined,\n      message,\n    );\n\n    throw new RuntimeError(message);\n  }\n\n  const tileUrlTemplates = data.tiles;\n\n  const maxZoom = data.maxzoom;\n  terrainProviderBuilder.overallMaxZoom = Math.max(\n    terrainProviderBuilder.overallMaxZoom,\n    maxZoom,\n  );\n\n  // Keeps track of which of the availability containing tiles have been loaded\n  if (!data.projection || data.projection === \"EPSG:4326\") {\n    terrainProviderBuilder.tilingScheme = new GeographicTilingScheme({\n      numberOfLevelZeroTilesX: 2,\n      numberOfLevelZeroTilesY: 1,\n      ellipsoid: terrainProviderBuilder.ellipsoid,\n    });\n  } else if (data.projection === \"EPSG:3857\") {\n    terrainProviderBuilder.tilingScheme = new WebMercatorTilingScheme({\n      numberOfLevelZeroTilesX: 1,\n      numberOfLevelZeroTilesY: 1,\n      ellipsoid: terrainProviderBuilder.ellipsoid,\n    });\n  } else {\n    const message = `The projection \"${data.projection}\" is invalid or not supported.`;\n    terrainProviderBuilder.previousError = TileProviderError.reportError(\n      terrainProviderBuilder.previousError,\n      provider,\n      defined(provider) ? provider._errorEvent : undefined,\n      message,\n    );\n\n    throw new RuntimeError(message);\n  }\n\n  terrainProviderBuilder.levelZeroMaximumGeometricError =\n    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n      terrainProviderBuilder.tilingScheme.ellipsoid,\n      terrainProviderBuilder.heightmapWidth,\n      terrainProviderBuilder.tilingScheme.getNumberOfXTilesAtLevel(0),\n    );\n  if (!data.scheme || data.scheme === \"tms\" || data.scheme === \"slippyMap\") {\n    terrainProviderBuilder.scheme = data.scheme;\n  } else {\n    const message = `The scheme \"${data.scheme}\" is invalid or not supported.`;\n    terrainProviderBuilder.previousError = TileProviderError.reportError(\n      terrainProviderBuilder.previousError,\n      provider,\n      defined(provider) ? provider._errorEvent : undefined,\n      message,\n    );\n\n    throw new RuntimeError(message);\n  }\n\n  let availabilityTilesLoaded;\n\n  // The vertex normals defined in the 'octvertexnormals' extension is identical to the original\n  // contents of the original 'vertexnormals' extension.  'vertexnormals' extension is now\n  // deprecated, as the extensionLength for this extension was incorrectly using big endian.\n  // We maintain backwards compatibility with the legacy 'vertexnormal' implementation\n  // by setting the _littleEndianExtensionSize to false. Always prefer 'octvertexnormals'\n  // over 'vertexnormals' if both extensions are supported by the server.\n  if (\n    defined(data.extensions) &&\n    data.extensions.indexOf(\"octvertexnormals\") !== -1\n  ) {\n    hasVertexNormals = true;\n  } else if (\n    defined(data.extensions) &&\n    data.extensions.indexOf(\"vertexnormals\") !== -1\n  ) {\n    hasVertexNormals = true;\n    littleEndianExtensionSize = false;\n  }\n  if (defined(data.extensions) && data.extensions.indexOf(\"watermask\") !== -1) {\n    hasWaterMask = true;\n  }\n  if (defined(data.extensions) && data.extensions.indexOf(\"metadata\") !== -1) {\n    hasMetadata = true;\n  }\n\n  const availabilityLevels = data.metadataAvailability;\n  const availableTiles = data.available;\n  let availability;\n  if (defined(availableTiles) && !defined(availabilityLevels)) {\n    availability = new TileAvailability(\n      terrainProviderBuilder.tilingScheme,\n      availableTiles.length,\n    );\n    for (let level = 0; level < availableTiles.length; ++level) {\n      const rangesAtLevel = availableTiles[level];\n      const yTiles =\n        terrainProviderBuilder.tilingScheme.getNumberOfYTilesAtLevel(level);\n      if (!defined(terrainProviderBuilder.overallAvailability[level])) {\n        terrainProviderBuilder.overallAvailability[level] = [];\n      }\n\n      for (\n        let rangeIndex = 0;\n        rangeIndex < rangesAtLevel.length;\n        ++rangeIndex\n      ) {\n        const range = rangesAtLevel[rangeIndex];\n        const yStart = yTiles - range.endY - 1;\n        const yEnd = yTiles - range.startY - 1;\n        terrainProviderBuilder.overallAvailability[level].push([\n          range.startX,\n          yStart,\n          range.endX,\n          yEnd,\n        ]);\n        availability.addAvailableTileRange(\n          level,\n          range.startX,\n          yStart,\n          range.endX,\n          yEnd,\n        );\n      }\n    }\n  } else if (defined(availabilityLevels)) {\n    availabilityTilesLoaded = new TileAvailability(\n      terrainProviderBuilder.tilingScheme,\n      maxZoom,\n    );\n    availability = new TileAvailability(\n      terrainProviderBuilder.tilingScheme,\n      maxZoom,\n    );\n    terrainProviderBuilder.overallAvailability[0] = [[0, 0, 1, 0]];\n    availability.addAvailableTileRange(0, 0, 0, 1, 0);\n  }\n\n  terrainProviderBuilder.hasWaterMask =\n    terrainProviderBuilder.hasWaterMask || hasWaterMask;\n  terrainProviderBuilder.hasVertexNormals =\n    terrainProviderBuilder.hasVertexNormals || hasVertexNormals;\n  terrainProviderBuilder.hasMetadata =\n    terrainProviderBuilder.hasMetadata || hasMetadata;\n\n  if (defined(data.attribution)) {\n    if (terrainProviderBuilder.attribution.length > 0) {\n      terrainProviderBuilder.attribution += \" \";\n    }\n    terrainProviderBuilder.attribution += data.attribution;\n  }\n\n  terrainProviderBuilder.layers.push(\n    new LayerInformation({\n      resource: terrainProviderBuilder.lastResource,\n      version: data.version,\n      isHeightmap: isHeightmap,\n      tileUrlTemplates: tileUrlTemplates,\n      availability: availability,\n      hasVertexNormals: hasVertexNormals,\n      hasWaterMask: hasWaterMask,\n      hasMetadata: hasMetadata,\n      availabilityLevels: availabilityLevels,\n      availabilityTilesLoaded: availabilityTilesLoaded,\n      littleEndianExtensionSize: littleEndianExtensionSize,\n    }),\n  );\n\n  const parentUrl = data.parentUrl;\n  if (defined(parentUrl)) {\n    if (!defined(availability)) {\n      console.log(\n        \"A layer.json can't have a parentUrl if it does't have an available array.\",\n      );\n      return true;\n    }\n\n    terrainProviderBuilder.lastResource =\n      terrainProviderBuilder.lastResource.getDerivedResource({\n        url: parentUrl,\n      });\n    terrainProviderBuilder.lastResource.appendForwardSlash(); // Terrain always expects a directory\n    terrainProviderBuilder.layerJsonResource =\n      terrainProviderBuilder.lastResource.getDerivedResource({\n        url: \"layer.json\",\n      });\n    await requestLayerJson(terrainProviderBuilder);\n    return true;\n  }\n\n  return true;\n}\n\nfunction parseMetadataFailure(terrainProviderBuilder, error, provider) {\n  let message = `An error occurred while accessing ${terrainProviderBuilder.layerJsonResource.url}.`;\n  if (defined(error)) {\n    message += `\\n${error.message}`;\n  }\n\n  terrainProviderBuilder.previousError = TileProviderError.reportError(\n    terrainProviderBuilder.previousError,\n    provider,\n    defined(provider) ? provider._errorEvent : undefined,\n    message,\n  );\n\n  // If we can retry, do so. Otherwise throw the error.\n  if (terrainProviderBuilder.previousError.retry) {\n    return requestLayerJson(terrainProviderBuilder, provider);\n  }\n\n  throw new RuntimeError(message);\n}\n\nasync function metadataSuccess(terrainProviderBuilder, data, provider) {\n  await parseMetadataSuccess(terrainProviderBuilder, data, provider);\n\n  const length = terrainProviderBuilder.overallAvailability.length;\n  if (length > 0) {\n    const availability = (terrainProviderBuilder.availability =\n      new TileAvailability(\n        terrainProviderBuilder.tilingScheme,\n        terrainProviderBuilder.overallMaxZoom,\n      ));\n    for (let level = 0; level < length; ++level) {\n      const levelRanges = terrainProviderBuilder.overallAvailability[level];\n      for (let i = 0; i < levelRanges.length; ++i) {\n        const range = levelRanges[i];\n        availability.addAvailableTileRange(\n          level,\n          range[0],\n          range[1],\n          range[2],\n          range[3],\n        );\n      }\n    }\n  }\n\n  if (terrainProviderBuilder.attribution.length > 0) {\n    const layerJsonCredit = new Credit(terrainProviderBuilder.attribution);\n    terrainProviderBuilder.tileCredits.push(layerJsonCredit);\n  }\n\n  return true;\n}\n\nasync function requestLayerJson(terrainProviderBuilder, provider) {\n  try {\n    const data = await terrainProviderBuilder.layerJsonResource.fetchJson();\n    return metadataSuccess(terrainProviderBuilder, data, provider);\n  } catch (error) {\n    // If the metadata is not found, assume this is a pre-metadata heightmap tileset.\n    if (defined(error) && error.statusCode === 404) {\n      await parseMetadataSuccess(\n        terrainProviderBuilder,\n        {\n          tilejson: \"2.1.0\",\n          format: \"heightmap-1.0\",\n          version: \"1.0.0\",\n          scheme: \"tms\",\n          tiles: [\"{z}/{x}/{y}.terrain?v={version}\"],\n        },\n        provider,\n      );\n\n      return true;\n    }\n\n    return parseMetadataFailure(terrainProviderBuilder, error, provider);\n  }\n}\n\n/**\n * <div class=\"notice\">\n * To construct a CesiumTerrainProvider, call {@link CesiumTerrainProvider.fromIonAssetId} or {@link CesiumTerrainProvider.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * A {@link TerrainProvider} that accesses terrain data in a Cesium terrain format.\n * Terrain formats can be one of the following:\n * <ul>\n * <li> {@link https://github.com/AnalyticalGraphicsInc/quantized-mesh Quantized Mesh} </li>\n * <li> {@link https://github.com/AnalyticalGraphicsInc/cesium/wiki/heightmap-1.0 Height Map} </li>\n * </ul>\n *\n * @alias CesiumTerrainProvider\n * @constructor\n *\n * @param {CesiumTerrainProvider.ConstructorOptions} [options] An object describing initialization options\n *\n * @example\n * // Create Arctic DEM terrain with normals.\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.CesiumTerrainProvider.fromIonAssetId(3956, {\n *       requestVertexNormals: true\n *     })\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n * @see createWorldTerrain\n * @see CesiumTerrainProvider.fromUrl\n * @see CesiumTerrainProvider.fromIonAssetId\n * @see TerrainProvider\n */\nfunction CesiumTerrainProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._heightmapWidth = undefined;\n  this._heightmapStructure = undefined;\n  this._hasWaterMask = false;\n  this._hasVertexNormals = false;\n  this._hasMetadata = false;\n  this._scheme = undefined;\n  this._ellipsoid = options.ellipsoid;\n\n  /**\n   * Boolean flag that indicates if the client should request vertex normals from the server.\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  this._requestVertexNormals = options.requestVertexNormals ?? false;\n\n  /**\n   * Boolean flag that indicates if the client should request tile watermasks from the server.\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  this._requestWaterMask = options.requestWaterMask ?? false;\n\n  /**\n   * Boolean flag that indicates if the client should request tile metadata from the server.\n   * @type {boolean}\n   * @default true\n   * @private\n   */\n  this._requestMetadata = options.requestMetadata ?? true;\n\n  this._errorEvent = new Event();\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n\n  this._availability = undefined;\n  this._tilingScheme = undefined;\n  this._levelZeroMaximumGeometricError = undefined;\n  this._layers = undefined;\n  this._tileCredits = undefined;\n}\n\n/**\n * When using the Quantized-Mesh format, a tile may be returned that includes additional extensions, such as PerVertexNormals, watermask, etc.\n * This enumeration defines the unique identifiers for each type of extension data that has been appended to the standard mesh data.\n *\n * @namespace QuantizedMeshExtensionIds\n * @see CesiumTerrainProvider\n * @private\n */\nconst QuantizedMeshExtensionIds = {\n  /**\n   * Oct-Encoded Per-Vertex Normals are included as an extension to the tile mesh\n   *\n   * @type {number}\n   * @constant\n   * @default 1\n   */\n  OCT_VERTEX_NORMALS: 1,\n  /**\n   * A watermask is included as an extension to the tile mesh\n   *\n   * @type {number}\n   * @constant\n   * @default 2\n   */\n  WATER_MASK: 2,\n  /**\n   * A json object contain metadata about the tile\n   *\n   * @type {number}\n   * @constant\n   * @default 4\n   */\n  METADATA: 4,\n};\n\nfunction getRequestHeader(extensionsList) {\n  if (!defined(extensionsList) || extensionsList.length === 0) {\n    return {\n      Accept:\n        \"application/vnd.quantized-mesh,application/octet-stream;q=0.9,*/*;q=0.01\",\n    };\n  }\n  const extensions = extensionsList.join(\"-\");\n  return {\n    Accept: `application/vnd.quantized-mesh;extensions=${extensions},application/octet-stream;q=0.9,*/*;q=0.01`,\n  };\n}\n\nfunction createHeightmapTerrainData(provider, buffer, level, x, y) {\n  const heightBuffer = new Uint16Array(\n    buffer,\n    0,\n    provider._heightmapWidth * provider._heightmapWidth,\n  );\n  return new HeightmapTerrainData({\n    buffer: heightBuffer,\n    childTileMask: new Uint8Array(buffer, heightBuffer.byteLength, 1)[0],\n    waterMask: new Uint8Array(\n      buffer,\n      heightBuffer.byteLength + 1,\n      buffer.byteLength - heightBuffer.byteLength - 1,\n    ),\n    width: provider._heightmapWidth,\n    height: provider._heightmapWidth,\n    structure: provider._heightmapStructure,\n    credits: provider._tileCredits,\n  });\n}\n\nfunction createQuantizedMeshTerrainData(provider, buffer, level, x, y, layer) {\n  const littleEndianExtensionSize = layer.littleEndianExtensionSize;\n  let pos = 0;\n  const cartesian3Elements = 3;\n  const boundingSphereElements = cartesian3Elements + 1;\n  const cartesian3Length = Float64Array.BYTES_PER_ELEMENT * cartesian3Elements;\n  const boundingSphereLength =\n    Float64Array.BYTES_PER_ELEMENT * boundingSphereElements;\n  const encodedVertexElements = 3;\n  const encodedVertexLength =\n    Uint16Array.BYTES_PER_ELEMENT * encodedVertexElements;\n  const triangleElements = 3;\n  let bytesPerIndex = Uint16Array.BYTES_PER_ELEMENT;\n  let triangleLength = bytesPerIndex * triangleElements;\n\n  const view = new DataView(buffer);\n  const center = new Cartesian3(\n    view.getFloat64(pos, true),\n    view.getFloat64(pos + 8, true),\n    view.getFloat64(pos + 16, true),\n  );\n  pos += cartesian3Length;\n\n  const minimumHeight = view.getFloat32(pos, true);\n  pos += Float32Array.BYTES_PER_ELEMENT;\n  const maximumHeight = view.getFloat32(pos, true);\n  pos += Float32Array.BYTES_PER_ELEMENT;\n\n  const boundingSphere = new BoundingSphere(\n    new Cartesian3(\n      view.getFloat64(pos, true),\n      view.getFloat64(pos + 8, true),\n      view.getFloat64(pos + 16, true),\n    ),\n    view.getFloat64(pos + cartesian3Length, true),\n  );\n  pos += boundingSphereLength;\n\n  const horizonOcclusionPoint = new Cartesian3(\n    view.getFloat64(pos, true),\n    view.getFloat64(pos + 8, true),\n    view.getFloat64(pos + 16, true),\n  );\n  pos += cartesian3Length;\n\n  const vertexCount = view.getUint32(pos, true);\n  pos += Uint32Array.BYTES_PER_ELEMENT;\n  const encodedVertexBuffer = new Uint16Array(buffer, pos, vertexCount * 3);\n  pos += vertexCount * encodedVertexLength;\n\n  if (vertexCount > 64 * 1024) {\n    // More than 64k vertices, so indices are 32-bit.\n    bytesPerIndex = Uint32Array.BYTES_PER_ELEMENT;\n    triangleLength = bytesPerIndex * triangleElements;\n  }\n\n  // Decode the vertex buffer.\n  const uBuffer = encodedVertexBuffer.subarray(0, vertexCount);\n  const vBuffer = encodedVertexBuffer.subarray(vertexCount, 2 * vertexCount);\n  const heightBuffer = encodedVertexBuffer.subarray(\n    vertexCount * 2,\n    3 * vertexCount,\n  );\n\n  AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\n\n  // skip over any additional padding that was added for 2/4 byte alignment\n  if (pos % bytesPerIndex !== 0) {\n    pos += bytesPerIndex - (pos % bytesPerIndex);\n  }\n\n  const triangleCount = view.getUint32(pos, true);\n  pos += Uint32Array.BYTES_PER_ELEMENT;\n  const indices = IndexDatatype.createTypedArrayFromArrayBuffer(\n    vertexCount,\n    buffer,\n    pos,\n    triangleCount * triangleElements,\n  );\n  pos += triangleCount * triangleLength;\n\n  // High water mark decoding based on decompressIndices_ in webgl-loader's loader.js.\n  // https://code.google.com/p/webgl-loader/source/browse/trunk/samples/loader.js?r=99#55\n  // Copyright 2012 Google Inc., Apache 2.0 license.\n  let highest = 0;\n  const length = indices.length;\n  for (let i = 0; i < length; ++i) {\n    const code = indices[i];\n    indices[i] = highest - code;\n    if (code === 0) {\n      ++highest;\n    }\n  }\n\n  const westVertexCount = view.getUint32(pos, true);\n  pos += Uint32Array.BYTES_PER_ELEMENT;\n  const westIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n    vertexCount,\n    buffer,\n    pos,\n    westVertexCount,\n  );\n  pos += westVertexCount * bytesPerIndex;\n\n  const southVertexCount = view.getUint32(pos, true);\n  pos += Uint32Array.BYTES_PER_ELEMENT;\n  const southIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n    vertexCount,\n    buffer,\n    pos,\n    southVertexCount,\n  );\n  pos += southVertexCount * bytesPerIndex;\n\n  const eastVertexCount = view.getUint32(pos, true);\n  pos += Uint32Array.BYTES_PER_ELEMENT;\n  const eastIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n    vertexCount,\n    buffer,\n    pos,\n    eastVertexCount,\n  );\n  pos += eastVertexCount * bytesPerIndex;\n\n  const northVertexCount = view.getUint32(pos, true);\n  pos += Uint32Array.BYTES_PER_ELEMENT;\n  const northIndices = IndexDatatype.createTypedArrayFromArrayBuffer(\n    vertexCount,\n    buffer,\n    pos,\n    northVertexCount,\n  );\n  pos += northVertexCount * bytesPerIndex;\n\n  let encodedNormalBuffer;\n  let waterMaskBuffer;\n  while (pos < view.byteLength) {\n    const extensionId = view.getUint8(pos, true);\n    pos += Uint8Array.BYTES_PER_ELEMENT;\n    const extensionLength = view.getUint32(pos, littleEndianExtensionSize);\n    pos += Uint32Array.BYTES_PER_ELEMENT;\n\n    if (\n      extensionId === QuantizedMeshExtensionIds.OCT_VERTEX_NORMALS &&\n      provider._requestVertexNormals\n    ) {\n      encodedNormalBuffer = new Uint8Array(buffer, pos, vertexCount * 2);\n    } else if (\n      extensionId === QuantizedMeshExtensionIds.WATER_MASK &&\n      provider._requestWaterMask\n    ) {\n      waterMaskBuffer = new Uint8Array(buffer, pos, extensionLength);\n    } else if (\n      extensionId === QuantizedMeshExtensionIds.METADATA &&\n      provider._requestMetadata\n    ) {\n      const stringLength = view.getUint32(pos, true);\n      if (stringLength > 0) {\n        const metadata = getJsonFromTypedArray(\n          new Uint8Array(buffer),\n          pos + Uint32Array.BYTES_PER_ELEMENT,\n          stringLength,\n        );\n        const availableTiles = metadata.available;\n        if (defined(availableTiles)) {\n          for (let offset = 0; offset < availableTiles.length; ++offset) {\n            const availableLevel = level + offset + 1;\n            const rangesAtLevel = availableTiles[offset];\n            const yTiles =\n              provider._tilingScheme.getNumberOfYTilesAtLevel(availableLevel);\n\n            for (\n              let rangeIndex = 0;\n              rangeIndex < rangesAtLevel.length;\n              ++rangeIndex\n            ) {\n              const range = rangesAtLevel[rangeIndex];\n              const yStart = yTiles - range.endY - 1;\n              const yEnd = yTiles - range.startY - 1;\n              provider.availability.addAvailableTileRange(\n                availableLevel,\n                range.startX,\n                yStart,\n                range.endX,\n                yEnd,\n              );\n              layer.availability.addAvailableTileRange(\n                availableLevel,\n                range.startX,\n                yStart,\n                range.endX,\n                yEnd,\n              );\n            }\n          }\n        }\n      }\n      layer.availabilityTilesLoaded.addAvailableTileRange(level, x, y, x, y);\n    }\n    pos += extensionLength;\n  }\n\n  const skirtHeight = provider.getLevelMaximumGeometricError(level) * 5.0;\n\n  // The skirt is not included in the OBB computation. If this ever\n  // causes any rendering artifacts (cracks), they are expected to be\n  // minor and in the corners of the screen. It's possible that this\n  // might need to be changed - just change to `minimumHeight - skirtHeight`\n  // A similar change might also be needed in `upsampleQuantizedTerrainMesh.js`.\n  const rectangle = provider._tilingScheme.tileXYToRectangle(x, y, level);\n  const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n    rectangle,\n    minimumHeight,\n    maximumHeight,\n    provider._tilingScheme.ellipsoid,\n  );\n\n  return new QuantizedMeshTerrainData({\n    center: center,\n    minimumHeight: minimumHeight,\n    maximumHeight: maximumHeight,\n    boundingSphere: boundingSphere,\n    orientedBoundingBox: orientedBoundingBox,\n    horizonOcclusionPoint: horizonOcclusionPoint,\n    quantizedVertices: encodedVertexBuffer,\n    encodedNormals: encodedNormalBuffer,\n    indices: indices,\n    westIndices: westIndices,\n    southIndices: southIndices,\n    eastIndices: eastIndices,\n    northIndices: northIndices,\n    westSkirtHeight: skirtHeight,\n    southSkirtHeight: skirtHeight,\n    eastSkirtHeight: skirtHeight,\n    northSkirtHeight: skirtHeight,\n    childTileMask: provider.availability.computeChildMaskForTile(level, x, y),\n    waterMask: waterMaskBuffer,\n    credits: provider._tileCredits,\n  });\n}\n\n/**\n * Requests the geometry for a given tile. The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise<TerrainData>|undefined} A promise for the requested geometry.  If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n *\n */\nCesiumTerrainProvider.prototype.requestTileGeometry = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const layers = this._layers;\n  let layerToUse;\n  const layerCount = layers.length;\n  let unknownAvailability = false;\n  let availabilityPromise = Promise.resolve();\n\n  if (layerCount === 1) {\n    // Optimized path for single layers\n    layerToUse = layers[0];\n  } else {\n    for (let i = 0; i < layerCount; ++i) {\n      const layer = layers[i];\n      if (\n        !defined(layer.availability) ||\n        layer.availability.isTileAvailable(level, x, y)\n      ) {\n        layerToUse = layer;\n        break;\n      }\n\n      const availabilityUnloaded = checkLayer(\n        this,\n        x,\n        y,\n        level,\n        layer,\n        i === 0,\n      );\n      if (availabilityUnloaded.result) {\n        // We can't know yet since the availability is not yet loaded\n        unknownAvailability = true;\n        availabilityPromise = availabilityPromise.then(\n          () => availabilityUnloaded.promise,\n        );\n      }\n    }\n  }\n\n  if (!defined(layerToUse) && unknownAvailability) {\n    // Try again when availability data is ready– Otherwise the tile will be marked as failed and never re-requested\n    return availabilityPromise.then(() => {\n      // handle promise or undefined return\n      return new Promise((resolve) => {\n        // defer execution to the next event loop\n        setTimeout(() => {\n          const promise = this.requestTileGeometry(x, y, level, request);\n          resolve(promise);\n        }, 0); // next tick\n      });\n    });\n  }\n  // call overridden function below\n  return requestTileGeometry(this, x, y, level, layerToUse, request);\n};\n\nfunction requestTileGeometry(provider, x, y, level, layerToUse, request) {\n  if (!defined(layerToUse)) {\n    return Promise.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n  }\n\n  const urlTemplates = layerToUse.tileUrlTemplates;\n  if (urlTemplates.length === 0) {\n    return undefined;\n  }\n\n  // The TileMapService scheme counts from the bottom left\n  let terrainY;\n  if (!provider._scheme || provider._scheme === \"tms\") {\n    const yTiles = provider._tilingScheme.getNumberOfYTilesAtLevel(level);\n    terrainY = yTiles - y - 1;\n  } else {\n    terrainY = y;\n  }\n\n  const extensionList = [];\n  if (provider._requestVertexNormals && layerToUse.hasVertexNormals) {\n    extensionList.push(\n      layerToUse.littleEndianExtensionSize\n        ? \"octvertexnormals\"\n        : \"vertexnormals\",\n    );\n  }\n  if (provider._requestWaterMask && layerToUse.hasWaterMask) {\n    extensionList.push(\"watermask\");\n  }\n  if (provider._requestMetadata && layerToUse.hasMetadata) {\n    extensionList.push(\"metadata\");\n  }\n\n  let headers;\n  let query;\n  const url = urlTemplates[(x + terrainY + level) % urlTemplates.length];\n\n  const resource = layerToUse.resource;\n  if (\n    defined(resource._ionEndpoint) &&\n    !defined(resource._ionEndpoint.externalType)\n  ) {\n    // ion uses query parameters to request extensions\n    if (extensionList.length !== 0) {\n      query = { extensions: extensionList.join(\"-\") };\n    }\n    headers = getRequestHeader(undefined);\n  } else {\n    //All other terrain servers\n    headers = getRequestHeader(extensionList);\n  }\n\n  const promise = resource\n    .getDerivedResource({\n      url: url,\n      templateValues: {\n        version: layerToUse.version,\n        z: level,\n        x: x,\n        y: terrainY,\n      },\n      queryParameters: query,\n      headers: headers,\n      request: request,\n    })\n    .fetchArrayBuffer();\n\n  if (!defined(promise)) {\n    return undefined;\n  }\n\n  return promise.then(function (buffer) {\n    if (!defined(buffer)) {\n      return Promise.reject(new RuntimeError(\"Mesh buffer doesn't exist.\"));\n    }\n    if (defined(provider._heightmapStructure)) {\n      return createHeightmapTerrainData(provider, buffer, level, x, y);\n    }\n    return createQuantizedMeshTerrainData(\n      provider,\n      buffer,\n      level,\n      x,\n      y,\n      layerToUse,\n    );\n  });\n}\n\nObject.defineProperties(CesiumTerrainProvider.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active.  Typically this is used to credit\n   * the source of the terrain.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {GeographicTilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask.  The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasWaterMask: {\n    get: function () {\n      return this._hasWaterMask && this._requestWaterMask;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasVertexNormals: {\n    get: function () {\n      // returns true if we can request vertex normals from the server\n      return this._hasVertexNormals && this._requestVertexNormals;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include metadata.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasMetadata: {\n    get: function () {\n      // returns true if we can request metadata from the server\n      return this._hasMetadata && this._requestMetadata;\n    },\n  },\n\n  /**\n   * Boolean flag that indicates if the client should request vertex normals from the server.\n   * Vertex normals data is appended to the standard tile mesh data only if the client requests the vertex normals and\n   * if the server provides vertex normals.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  requestVertexNormals: {\n    get: function () {\n      return this._requestVertexNormals;\n    },\n  },\n\n  /**\n   * Boolean flag that indicates if the client should request a watermask from the server.\n   * Watermask data is appended to the standard tile mesh data only if the client requests the watermask and\n   * if the server provides a watermask.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  requestWaterMask: {\n    get: function () {\n      return this._requestWaterMask;\n    },\n  },\n\n  /**\n   * Boolean flag that indicates if the client should request metadata from the server.\n   * Metadata is appended to the standard tile mesh data only if the client requests the metadata and\n   * if the server provides a metadata.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  requestMetadata: {\n    get: function () {\n      return this._requestMetadata;\n    },\n  },\n\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles. This property may be undefined if availability\n   * information is not available. Note that this reflects tiles that are known to be available currently.\n   * Additional tiles may be discovered to be available in the future, e.g. if availability information\n   * exists deeper in the tree rather than it all being discoverable at the root. However, a tile that\n   * is available now will not become unavailable in the future.\n   * @memberof CesiumTerrainProvider.prototype\n   * @type {TileAvailability|undefined}\n   * @readonly\n   */\n  availability: {\n    get: function () {\n      return this._availability;\n    },\n  },\n});\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nCesiumTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n  level,\n) {\n  return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\n/**\n * Creates a {@link TerrainProvider} from a Cesium ion asset ID that accesses terrain data in a Cesium terrain format\n * Terrain formats can be one of the following:\n * <ul>\n * <li> {@link https://github.com/AnalyticalGraphicsInc/quantized-mesh Quantized Mesh} </li>\n * <li> {@link https://github.com/AnalyticalGraphicsInc/cesium/wiki/heightmap-1.0 Height Map} </li>\n * </ul>\n *\n * @param {number} assetId The Cesium ion asset id.\n * @param {CesiumTerrainProvider.ConstructorOptions} [options] An object describing initialization options.\n * @returns {Promise<CesiumTerrainProvider>}\n *\n * @example\n * // Create Arctic DEM terrain with normals.\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.CesiumTerrainProvider.fromIonAssetId(3956, {\n *         requestVertexNormals: true\n *     })\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n * @exception {RuntimeError} layer.json does not specify a format\n * @exception {RuntimeError} layer.json specifies an unknown format\n * @exception {RuntimeError} layer.json specifies an unsupported quantized-mesh version\n * @exception {RuntimeError} layer.json does not specify a tiles property, or specifies an empty array\n * @exception {RuntimeError} layer.json does not specify any tile URL templates\n */\nCesiumTerrainProvider.fromIonAssetId = async function (assetId, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"assetId\", assetId);\n  //>>includeEnd('debug');\n\n  const resource = await IonResource.fromAssetId(assetId);\n  return CesiumTerrainProvider.fromUrl(resource, options);\n};\n\n/**\n * Creates a {@link TerrainProvider} that accesses terrain data in a Cesium terrain format.\n * Terrain formats can be one of the following:\n * <ul>\n * <li> {@link https://github.com/AnalyticalGraphicsInc/quantized-mesh Quantized Mesh} </li>\n * <li> {@link https://github.com/AnalyticalGraphicsInc/cesium/wiki/heightmap-1.0 Height Map} </li>\n * </ul>\n *\n * @param {Resource|string|Promise<Resource>|Promise<string>} url The URL of the Cesium terrain server.\n * @param {CesiumTerrainProvider.ConstructorOptions} [options] An object describing initialization options.\n * @returns {Promise<CesiumTerrainProvider>}\n *\n * @example\n * // Create Arctic DEM terrain with normals.\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.CesiumTerrainProvider.fromUrl(\n *       Cesium.IonResource.fromAssetId(3956), {\n *         requestVertexNormals: true\n *     })\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n * @exception {RuntimeError} layer.json does not specify a format\n * @exception {RuntimeError} layer.json specifies an unknown format\n * @exception {RuntimeError} layer.json specifies an unsupported quantized-mesh version\n * @exception {RuntimeError} layer.json does not specify a tiles property, or specifies an empty array\n * @exception {RuntimeError} layer.json does not specify any tile URL templates\n */\nCesiumTerrainProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  url = await Promise.resolve(url);\n  const resource = Resource.createIfNeeded(url);\n  resource.appendForwardSlash();\n\n  const terrainProviderBuilder = new TerrainProviderBuilder(options);\n  terrainProviderBuilder.lastResource = resource;\n  terrainProviderBuilder.layerJsonResource =\n    terrainProviderBuilder.lastResource.getDerivedResource({\n      url: \"layer.json\",\n    });\n\n  await requestLayerJson(terrainProviderBuilder);\n\n  const provider = new CesiumTerrainProvider(options);\n  terrainProviderBuilder.build(provider);\n\n  return provider;\n};\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported or availability is unknown, otherwise true or false.\n */\nCesiumTerrainProvider.prototype.getTileDataAvailable = function (x, y, level) {\n  if (!defined(this._availability)) {\n    return undefined;\n  }\n  if (level > this._availability._maximumLevel) {\n    return false;\n  }\n\n  if (this._availability.isTileAvailable(level, x, y)) {\n    // If the tile is listed as available, then we are done\n    return true;\n  }\n  if (!this._hasMetadata) {\n    // If we don't have any layers with the metadata extension then we don't have this tile\n    return false;\n  }\n\n  const layers = this._layers;\n  const count = layers.length;\n  for (let i = 0; i < count; ++i) {\n    const layerResult = checkLayer(this, x, y, level, layers[i], i === 0);\n    if (layerResult.result) {\n      // There is a layer that may or may not have the tile\n      return undefined;\n    }\n  }\n\n  return false;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nCesiumTerrainProvider.prototype.loadTileDataAvailability = function (\n  x,\n  y,\n  level,\n) {\n  if (\n    !defined(this._availability) ||\n    level > this._availability._maximumLevel ||\n    this._availability.isTileAvailable(level, x, y) ||\n    !this._hasMetadata\n  ) {\n    // We know the tile is either available or not available so nothing to wait on\n    return undefined;\n  }\n\n  const layers = this._layers;\n  const count = layers.length;\n  for (let i = 0; i < count; ++i) {\n    const layerResult = checkLayer(this, x, y, level, layers[i], i === 0);\n    if (defined(layerResult.promise)) {\n      return layerResult.promise;\n    }\n  }\n};\n\nfunction getAvailabilityTile(layer, x, y, level) {\n  if (level === 0) {\n    return;\n  }\n\n  const availabilityLevels = layer.availabilityLevels;\n  const parentLevel =\n    level % availabilityLevels === 0\n      ? level - availabilityLevels\n      : ((level / availabilityLevels) | 0) * availabilityLevels;\n  const divisor = 1 << (level - parentLevel);\n  const parentX = (x / divisor) | 0;\n  const parentY = (y / divisor) | 0;\n\n  return {\n    level: parentLevel,\n    x: parentX,\n    y: parentY,\n  };\n}\n\nfunction checkLayer(provider, x, y, level, layer, topLayer) {\n  if (!defined(layer.availabilityLevels)) {\n    // It's definitely not in this layer\n    return {\n      result: false,\n    };\n  }\n\n  let cacheKey;\n  const deleteFromCache = function () {\n    delete layer.availabilityPromiseCache[cacheKey];\n  };\n  const availabilityTilesLoaded = layer.availabilityTilesLoaded;\n  const availability = layer.availability;\n\n  let tile = getAvailabilityTile(layer, x, y, level);\n  while (defined(tile)) {\n    if (\n      availability.isTileAvailable(tile.level, tile.x, tile.y) &&\n      !availabilityTilesLoaded.isTileAvailable(tile.level, tile.x, tile.y)\n    ) {\n      let requestPromise;\n      if (!topLayer) {\n        cacheKey = `${tile.level}-${tile.x}-${tile.y}`;\n        requestPromise = layer.availabilityPromiseCache[cacheKey];\n        if (!defined(requestPromise)) {\n          // For cutout terrain, if this isn't the top layer the availability tiles\n          //  may never get loaded, so request it here.\n          const request = new Request({\n            throttle: false,\n            throttleByServer: true,\n            type: RequestType.TERRAIN,\n          });\n          requestPromise = requestTileGeometry(\n            provider,\n            tile.x,\n            tile.y,\n            tile.level,\n            layer,\n            request,\n          );\n          if (defined(requestPromise)) {\n            layer.availabilityPromiseCache[cacheKey] = requestPromise;\n            requestPromise.then(deleteFromCache);\n          }\n        }\n      }\n\n      // The availability tile is available, but not loaded, so there\n      //  is still a chance that it may become available at some point\n      return {\n        result: true,\n        promise: requestPromise,\n      };\n    }\n\n    tile = getAvailabilityTile(layer, tile.x, tile.y, tile.level);\n  }\n\n  return {\n    result: false,\n  };\n}\n\n// Used for testing\nCesiumTerrainProvider._getAvailabilityTile = getAvailabilityTile;\nexport default CesiumTerrainProvider;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Contains functions for checking that supplied arguments are of a specified type\n * or meet specified conditions\n */\nconst Check = {};\n\n/**\n * Contains type checking functions, all using the typeof operator\n */\nCheck.typeOf = {};\n\nfunction getUndefinedErrorMessage(name) {\n  return `${name} is required, actual value was undefined`;\n}\n\nfunction getFailedTypeErrorMessage(actual, expected, name) {\n  return `Expected ${name} to be typeof ${expected}, actual typeof was ${actual}`;\n}\n\n/**\n * Throws if test is not defined\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value that is to be checked\n * @exception {DeveloperError} test must be defined\n */\nCheck.defined = function (name, test) {\n  if (!defined(test)) {\n    throw new DeveloperError(getUndefinedErrorMessage(name));\n  }\n};\n\n/**\n * Throws if test is not typeof 'function'\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'function'\n */\nCheck.typeOf.func = function (name, test) {\n  if (typeof test !== \"function\") {\n    throw new DeveloperError(\n      getFailedTypeErrorMessage(typeof test, \"function\", name),\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'string'\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'string'\n */\nCheck.typeOf.string = function (name, test) {\n  if (typeof test !== \"string\") {\n    throw new DeveloperError(\n      getFailedTypeErrorMessage(typeof test, \"string\", name),\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'number'\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'number'\n */\nCheck.typeOf.number = function (name, test) {\n  if (typeof test !== \"number\") {\n    throw new DeveloperError(\n      getFailedTypeErrorMessage(typeof test, \"number\", name),\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'number' and less than limit\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and less than limit\n */\nCheck.typeOf.number.lessThan = function (name, test, limit) {\n  Check.typeOf.number(name, test);\n  if (test >= limit) {\n    throw new DeveloperError(\n      `Expected ${name} to be less than ${limit}, actual value was ${test}`,\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'number' and less than or equal to limit\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and less than or equal to limit\n */\nCheck.typeOf.number.lessThanOrEquals = function (name, test, limit) {\n  Check.typeOf.number(name, test);\n  if (test > limit) {\n    throw new DeveloperError(\n      `Expected ${name} to be less than or equal to ${limit}, actual value was ${test}`,\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'number' and greater than limit\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and greater than limit\n */\nCheck.typeOf.number.greaterThan = function (name, test, limit) {\n  Check.typeOf.number(name, test);\n  if (test <= limit) {\n    throw new DeveloperError(\n      `Expected ${name} to be greater than ${limit}, actual value was ${test}`,\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'number' and greater than or equal to limit\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @param {number} limit The limit value to compare against\n * @exception {DeveloperError} test must be typeof 'number' and greater than or equal to limit\n */\nCheck.typeOf.number.greaterThanOrEquals = function (name, test, limit) {\n  Check.typeOf.number(name, test);\n  if (test < limit) {\n    throw new DeveloperError(\n      `Expected ${name} to be greater than or equal to ${limit}, actual value was ${test}`,\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'object'\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'object'\n */\nCheck.typeOf.object = function (name, test) {\n  if (typeof test !== \"object\") {\n    throw new DeveloperError(\n      getFailedTypeErrorMessage(typeof test, \"object\", name),\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'boolean'\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'boolean'\n */\nCheck.typeOf.bool = function (name, test) {\n  if (typeof test !== \"boolean\") {\n    throw new DeveloperError(\n      getFailedTypeErrorMessage(typeof test, \"boolean\", name),\n    );\n  }\n};\n\n/**\n * Throws if test is not typeof 'bigint'\n *\n * @param {string} name The name of the variable being tested\n * @param {*} test The value to test\n * @exception {DeveloperError} test must be typeof 'bigint'\n */\nCheck.typeOf.bigint = function (name, test) {\n  if (typeof test !== \"bigint\") {\n    throw new DeveloperError(\n      getFailedTypeErrorMessage(typeof test, \"bigint\", name),\n    );\n  }\n};\n\n/**\n * Throws if test1 and test2 is not typeof 'number' and not equal in value\n *\n * @param {string} name1 The name of the first variable being tested\n * @param {string} name2 The name of the second variable being tested against\n * @param {*} test1 The value to test\n * @param {*} test2 The value to test against\n * @exception {DeveloperError} test1 and test2 should be type of 'number' and be equal in value\n */\nCheck.typeOf.number.equals = function (name1, name2, test1, test2) {\n  Check.typeOf.number(name1, test1);\n  Check.typeOf.number(name2, test2);\n  if (test1 !== test2) {\n    throw new DeveloperError(\n      `${name1} must be equal to ${name2}, the actual values are ${test1} and ${test2}`,\n    );\n  }\n};\nexport default Check;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport EllipseGeometry from \"./EllipseGeometry.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\n/**\n * A description of a circle on the ellipsoid. Circle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias CircleGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.center The circle's center point in the fixed frame.\n * @param {number} options.radius The radius in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid the circle will be on.\n * @param {number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface.\n * @param {number} [options.granularity=0.02] The angular distance between points on the circle in radians.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface.\n * @param {number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n *\n * @exception {DeveloperError} radius must be greater than zero.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n * @see CircleGeometry.createGeometry\n * @see Packable\n *\n * @example\n * // Create a circle.\n * const circle = new Cesium.CircleGeometry({\n *   center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n *   radius : 100000.0\n * });\n * const geometry = Cesium.CircleGeometry.createGeometry(circle);\n */\nfunction CircleGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const radius = options.radius;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"radius\", radius);\n  //>>includeEnd('debug');\n\n  const ellipseGeometryOptions = {\n    center: options.center,\n    semiMajorAxis: radius,\n    semiMinorAxis: radius,\n    ellipsoid: options.ellipsoid,\n    height: options.height,\n    extrudedHeight: options.extrudedHeight,\n    granularity: options.granularity,\n    vertexFormat: options.vertexFormat,\n    stRotation: options.stRotation,\n    shadowVolume: options.shadowVolume,\n  };\n  this._ellipseGeometry = new EllipseGeometry(ellipseGeometryOptions);\n  this._workerName = \"createCircleGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nCircleGeometry.packedLength = EllipseGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CircleGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCircleGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  //>>includeEnd('debug');\n  return EllipseGeometry.pack(value._ellipseGeometry, array, startingIndex);\n};\n\nconst scratchEllipseGeometry = new EllipseGeometry({\n  center: new Cartesian3(),\n  semiMajorAxis: 1.0,\n  semiMinorAxis: 1.0,\n});\nconst scratchOptions = {\n  center: new Cartesian3(),\n  radius: undefined,\n  ellipsoid: Ellipsoid.clone(Ellipsoid.default),\n  height: undefined,\n  extrudedHeight: undefined,\n  granularity: undefined,\n  vertexFormat: new VertexFormat(),\n  stRotation: undefined,\n  semiMajorAxis: undefined,\n  semiMinorAxis: undefined,\n  shadowVolume: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CircleGeometry} [result] The object into which to store the result.\n * @returns {CircleGeometry} The modified result parameter or a new CircleGeometry instance if one was not provided.\n */\nCircleGeometry.unpack = function (array, startingIndex, result) {\n  const ellipseGeometry = EllipseGeometry.unpack(\n    array,\n    startingIndex,\n    scratchEllipseGeometry,\n  );\n  scratchOptions.center = Cartesian3.clone(\n    ellipseGeometry._center,\n    scratchOptions.center,\n  );\n  scratchOptions.ellipsoid = Ellipsoid.clone(\n    ellipseGeometry._ellipsoid,\n    scratchOptions.ellipsoid,\n  );\n  scratchOptions.ellipsoid = Ellipsoid.clone(\n    ellipseGeometry._ellipsoid,\n    scratchEllipseGeometry._ellipsoid,\n  );\n  scratchOptions.height = ellipseGeometry._height;\n  scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight;\n  scratchOptions.granularity = ellipseGeometry._granularity;\n  scratchOptions.vertexFormat = VertexFormat.clone(\n    ellipseGeometry._vertexFormat,\n    scratchOptions.vertexFormat,\n  );\n  scratchOptions.stRotation = ellipseGeometry._stRotation;\n  scratchOptions.shadowVolume = ellipseGeometry._shadowVolume;\n\n  if (!defined(result)) {\n    scratchOptions.radius = ellipseGeometry._semiMajorAxis;\n    return new CircleGeometry(scratchOptions);\n  }\n\n  scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis;\n  scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis;\n  result._ellipseGeometry = new EllipseGeometry(scratchOptions);\n  return result;\n};\n\n/**\n * Computes the geometric representation of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {CircleGeometry} circleGeometry A description of the circle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCircleGeometry.createGeometry = function (circleGeometry) {\n  return EllipseGeometry.createGeometry(circleGeometry._ellipseGeometry);\n};\n\n/**\n * @private\n */\nCircleGeometry.createShadowVolume = function (\n  circleGeometry,\n  minHeightFunc,\n  maxHeightFunc,\n) {\n  const granularity = circleGeometry._ellipseGeometry._granularity;\n  const ellipsoid = circleGeometry._ellipseGeometry._ellipsoid;\n\n  const minHeight = minHeightFunc(granularity, ellipsoid);\n  const maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n  return new CircleGeometry({\n    center: circleGeometry._ellipseGeometry._center,\n    radius: circleGeometry._ellipseGeometry._semiMajorAxis,\n    ellipsoid: ellipsoid,\n    stRotation: circleGeometry._ellipseGeometry._stRotation,\n    granularity: granularity,\n    extrudedHeight: minHeight,\n    height: maxHeight,\n    vertexFormat: VertexFormat.POSITION_ONLY,\n    shadowVolume: true,\n  });\n};\n\nObject.defineProperties(CircleGeometry.prototype, {\n  /**\n   * @private\n   */\n  rectangle: {\n    get: function () {\n      return this._ellipseGeometry.rectangle;\n    },\n  },\n  /**\n   * For remapping texture coordinates when rendering CircleGeometries as GroundPrimitives.\n   * @private\n   */\n  textureCoordinateRotationPoints: {\n    get: function () {\n      return this._ellipseGeometry.textureCoordinateRotationPoints;\n    },\n  },\n});\nexport default CircleGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport EllipseOutlineGeometry from \"./EllipseOutlineGeometry.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\n\n/**\n * A description of the outline of a circle on the ellipsoid.\n *\n * @alias CircleOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.center The circle's center point in the fixed frame.\n * @param {number} options.radius The radius in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid the circle will be on.\n * @param {number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface.\n * @param {number} [options.granularity=0.02] The angular distance between points on the circle in radians.\n * @param {number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface.\n * @param {number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom of an extruded circle.\n *\n * @exception {DeveloperError} radius must be greater than zero.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n * @see CircleOutlineGeometry.createGeometry\n * @see Packable\n *\n * @example\n * // Create a circle.\n * const circle = new Cesium.CircleOutlineGeometry({\n *   center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n *   radius : 100000.0\n * });\n * const geometry = Cesium.CircleOutlineGeometry.createGeometry(circle);\n */\nfunction CircleOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const radius = options.radius;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"radius\", radius);\n  //>>includeEnd('debug');\n\n  const ellipseGeometryOptions = {\n    center: options.center,\n    semiMajorAxis: radius,\n    semiMinorAxis: radius,\n    ellipsoid: options.ellipsoid,\n    height: options.height,\n    extrudedHeight: options.extrudedHeight,\n    granularity: options.granularity,\n    numberOfVerticalLines: options.numberOfVerticalLines,\n  };\n  this._ellipseGeometry = new EllipseOutlineGeometry(ellipseGeometryOptions);\n  this._workerName = \"createCircleOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nCircleOutlineGeometry.packedLength = EllipseOutlineGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CircleOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCircleOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  //>>includeEnd('debug');\n  return EllipseOutlineGeometry.pack(\n    value._ellipseGeometry,\n    array,\n    startingIndex,\n  );\n};\n\nconst scratchEllipseGeometry = new EllipseOutlineGeometry({\n  center: new Cartesian3(),\n  semiMajorAxis: 1.0,\n  semiMinorAxis: 1.0,\n});\nconst scratchOptions = {\n  center: new Cartesian3(),\n  radius: undefined,\n  ellipsoid: Ellipsoid.clone(Ellipsoid.UNIT_SPHERE),\n  height: undefined,\n  extrudedHeight: undefined,\n  granularity: undefined,\n  numberOfVerticalLines: undefined,\n  semiMajorAxis: undefined,\n  semiMinorAxis: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CircleOutlineGeometry} [result] The object into which to store the result.\n * @returns {CircleOutlineGeometry} The modified result parameter or a new CircleOutlineGeometry instance if one was not provided.\n */\nCircleOutlineGeometry.unpack = function (array, startingIndex, result) {\n  const ellipseGeometry = EllipseOutlineGeometry.unpack(\n    array,\n    startingIndex,\n    scratchEllipseGeometry,\n  );\n  scratchOptions.center = Cartesian3.clone(\n    ellipseGeometry._center,\n    scratchOptions.center,\n  );\n  scratchOptions.ellipsoid = Ellipsoid.clone(\n    ellipseGeometry._ellipsoid,\n    scratchOptions.ellipsoid,\n  );\n  scratchOptions.height = ellipseGeometry._height;\n  scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight;\n  scratchOptions.granularity = ellipseGeometry._granularity;\n  scratchOptions.numberOfVerticalLines = ellipseGeometry._numberOfVerticalLines;\n\n  if (!defined(result)) {\n    scratchOptions.radius = ellipseGeometry._semiMajorAxis;\n    return new CircleOutlineGeometry(scratchOptions);\n  }\n\n  scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis;\n  scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis;\n  result._ellipseGeometry = new EllipseOutlineGeometry(scratchOptions);\n  return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {CircleOutlineGeometry} circleGeometry A description of the circle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCircleOutlineGeometry.createGeometry = function (circleGeometry) {\n  return EllipseOutlineGeometry.createGeometry(circleGeometry._ellipseGeometry);\n};\nexport default CircleOutlineGeometry;\n","import ClockRange from \"./ClockRange.js\";\nimport ClockStep from \"./ClockStep.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport getTimestamp from \"./getTimestamp.js\";\nimport JulianDate from \"./JulianDate.js\";\n\n/**\n * A simple clock for keeping track of simulated time.\n *\n * @alias Clock\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {JulianDate} [options.startTime] The start time of the clock.\n * @param {JulianDate} [options.stopTime] The stop time of the clock.\n * @param {JulianDate} [options.currentTime] The current time.\n * @param {number} [options.multiplier=1.0] Determines how much time advances when {@link Clock#tick} is called, negative values allow for advancing backwards.\n * @param {ClockStep} [options.clockStep=ClockStep.SYSTEM_CLOCK_MULTIPLIER] Determines if calls to {@link Clock#tick} are frame dependent or system clock dependent.\n * @param {ClockRange} [options.clockRange=ClockRange.UNBOUNDED] Determines how the clock should behave when {@link Clock#startTime} or {@link Clock#stopTime} is reached.\n * @param {boolean} [options.canAnimate=true] Indicates whether {@link Clock#tick} can advance time.  This could be false if data is being buffered, for example.  The clock will only tick when both {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n * @param {boolean} [options.shouldAnimate=false] Indicates whether {@link Clock#tick} should attempt to advance time.  The clock will only tick when both {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n *\n * @exception {DeveloperError} startTime must come before stopTime.\n *\n *\n * @example\n * // Create a clock that loops on Christmas day 2013 and runs in real-time.\n * const clock = new Cesium.Clock({\n *    startTime : Cesium.JulianDate.fromIso8601(\"2013-12-25\"),\n *    currentTime : Cesium.JulianDate.fromIso8601(\"2013-12-25\"),\n *    stopTime : Cesium.JulianDate.fromIso8601(\"2013-12-26\"),\n *    clockRange : Cesium.ClockRange.LOOP_STOP,\n *    clockStep : Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER\n * });\n *\n * @see ClockStep\n * @see ClockRange\n * @see JulianDate\n */\nfunction Clock(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let currentTime = options.currentTime;\n  let startTime = options.startTime;\n  let stopTime = options.stopTime;\n\n  if (!defined(currentTime)) {\n    // if not specified, current time is the start time,\n    // or if that is not specified, 1 day before the stop time,\n    // or if that is not specified, then now.\n    if (defined(startTime)) {\n      currentTime = JulianDate.clone(startTime);\n    } else if (defined(stopTime)) {\n      currentTime = JulianDate.addDays(stopTime, -1.0, new JulianDate());\n    } else {\n      currentTime = JulianDate.now();\n    }\n  } else {\n    currentTime = JulianDate.clone(currentTime);\n  }\n\n  if (!defined(startTime)) {\n    // if not specified, start time is the current time\n    // (as determined above)\n    startTime = JulianDate.clone(currentTime);\n  } else {\n    startTime = JulianDate.clone(startTime);\n  }\n\n  if (!defined(stopTime)) {\n    // if not specified, stop time is 1 day after the start time\n    // (as determined above)\n    stopTime = JulianDate.addDays(startTime, 1.0, new JulianDate());\n  } else {\n    stopTime = JulianDate.clone(stopTime);\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (JulianDate.greaterThan(startTime, stopTime)) {\n    throw new DeveloperError(\"startTime must come before stopTime.\");\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * The start time of the clock.\n   * @type {JulianDate}\n   */\n  this.startTime = startTime;\n\n  /**\n   * The stop time of the clock.\n   * @type {JulianDate}\n   */\n  this.stopTime = stopTime;\n\n  /**\n   * Determines how the clock should behave when\n   * {@link Clock#startTime} or {@link Clock#stopTime}\n   * is reached.\n   * @type {ClockRange}\n   * @default {@link ClockRange.UNBOUNDED}\n   */\n  this.clockRange = options.clockRange ?? ClockRange.UNBOUNDED;\n\n  /**\n   * Indicates whether {@link Clock#tick} can advance time.  This could be false if data is being buffered,\n   * for example.  The clock will only advance time when both\n   * {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n   * @type {boolean}\n   * @default true\n   */\n  this.canAnimate = options.canAnimate ?? true;\n\n  /**\n   * An {@link Event} that is fired whenever {@link Clock#tick} is called.\n   * @type {Event}\n   */\n  this.onTick = new Event();\n  /**\n   * An {@link Event} that is fired whenever {@link Clock#stopTime} is reached.\n   * @type {Event}\n   */\n  this.onStop = new Event();\n\n  this._currentTime = undefined;\n  this._multiplier = undefined;\n  this._clockStep = undefined;\n  this._shouldAnimate = undefined;\n  this._lastSystemTime = getTimestamp();\n\n  // set values using the property setters to\n  // make values consistent.\n\n  this.currentTime = currentTime;\n  this.multiplier = options.multiplier ?? 1.0;\n  this.shouldAnimate = options.shouldAnimate ?? false;\n  this.clockStep = options.clockStep ?? ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n}\n\nObject.defineProperties(Clock.prototype, {\n  /**\n   * The current time.\n   * Changing this property will change\n   * {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to\n   * {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}.\n   * @memberof Clock.prototype\n   * @type {JulianDate}\n   */\n  currentTime: {\n    get: function () {\n      return this._currentTime;\n    },\n    set: function (value) {\n      if (JulianDate.equals(this._currentTime, value)) {\n        return;\n      }\n\n      if (this._clockStep === ClockStep.SYSTEM_CLOCK) {\n        this._clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n      }\n\n      this._currentTime = value;\n    },\n  },\n\n  /**\n   * Gets or sets how much time advances when {@link Clock#tick} is called. Negative values allow for advancing backwards.\n   * If {@link Clock#clockStep} is set to {@link ClockStep.TICK_DEPENDENT}, this is the number of seconds to advance.\n   * If {@link Clock#clockStep} is set to {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}, this value is multiplied by the\n   * elapsed system time since the last call to {@link Clock#tick}.\n   * Changing this property will change\n   * {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to\n   * {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}.\n   * @memberof Clock.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  multiplier: {\n    get: function () {\n      return this._multiplier;\n    },\n    set: function (value) {\n      if (this._multiplier === value) {\n        return;\n      }\n\n      if (this._clockStep === ClockStep.SYSTEM_CLOCK) {\n        this._clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n      }\n\n      this._multiplier = value;\n    },\n  },\n\n  /**\n   * Determines if calls to {@link Clock#tick} are frame dependent or system clock dependent.\n   * Changing this property to {@link ClockStep.SYSTEM_CLOCK} will set\n   * {@link Clock#multiplier} to 1.0, {@link Clock#shouldAnimate} to true, and\n   * {@link Clock#currentTime} to the current system clock time.\n   * @memberof Clock.prototype\n   * @type ClockStep\n   * @default {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}\n   */\n  clockStep: {\n    get: function () {\n      return this._clockStep;\n    },\n    set: function (value) {\n      if (value === ClockStep.SYSTEM_CLOCK) {\n        this._multiplier = 1.0;\n        this._shouldAnimate = true;\n        this._currentTime = JulianDate.now();\n      }\n\n      this._clockStep = value;\n    },\n  },\n\n  /**\n   * Indicates whether {@link Clock#tick} should attempt to advance time.\n   * The clock will only advance time when both\n   * {@link Clock#canAnimate} and {@link Clock#shouldAnimate} are true.\n   * Changing this property will change\n   * {@link Clock#clockStep} from {@link ClockStep.SYSTEM_CLOCK} to\n   * {@link ClockStep.SYSTEM_CLOCK_MULTIPLIER}.\n   * @memberof Clock.prototype\n   * @type {boolean}\n   * @default false\n   */\n  shouldAnimate: {\n    get: function () {\n      return this._shouldAnimate;\n    },\n    set: function (value) {\n      if (this._shouldAnimate === value) {\n        return;\n      }\n\n      if (this._clockStep === ClockStep.SYSTEM_CLOCK) {\n        this._clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n      }\n\n      this._shouldAnimate = value;\n    },\n  },\n});\n\n/**\n * Advances the clock from the current time based on the current configuration options.\n * tick should be called every frame, regardless of whether animation is taking place\n * or not.  To control animation, use the {@link Clock#shouldAnimate} property.\n *\n * @returns {JulianDate} The new value of the {@link Clock#currentTime} property.\n */\nClock.prototype.tick = function () {\n  const currentSystemTime = getTimestamp();\n  let currentTime = JulianDate.clone(this._currentTime);\n\n  if (this.canAnimate && this._shouldAnimate) {\n    const clockStep = this._clockStep;\n    if (clockStep === ClockStep.SYSTEM_CLOCK) {\n      currentTime = JulianDate.now(currentTime);\n    } else {\n      const multiplier = this._multiplier;\n\n      if (clockStep === ClockStep.TICK_DEPENDENT) {\n        currentTime = JulianDate.addSeconds(\n          currentTime,\n          multiplier,\n          currentTime,\n        );\n      } else {\n        const milliseconds = currentSystemTime - this._lastSystemTime;\n        currentTime = JulianDate.addSeconds(\n          currentTime,\n          multiplier * (milliseconds / 1000.0),\n          currentTime,\n        );\n      }\n\n      const clockRange = this.clockRange;\n      const startTime = this.startTime;\n      const stopTime = this.stopTime;\n\n      if (clockRange === ClockRange.CLAMPED) {\n        if (JulianDate.lessThan(currentTime, startTime)) {\n          currentTime = JulianDate.clone(startTime, currentTime);\n        } else if (JulianDate.greaterThan(currentTime, stopTime)) {\n          currentTime = JulianDate.clone(stopTime, currentTime);\n          this.onStop.raiseEvent(this);\n        }\n      } else if (clockRange === ClockRange.LOOP_STOP) {\n        if (JulianDate.lessThan(currentTime, startTime)) {\n          currentTime = JulianDate.clone(startTime, currentTime);\n        }\n        while (JulianDate.greaterThan(currentTime, stopTime)) {\n          currentTime = JulianDate.addSeconds(\n            startTime,\n            JulianDate.secondsDifference(currentTime, stopTime),\n            currentTime,\n          );\n          this.onStop.raiseEvent(this);\n        }\n      }\n    }\n  }\n\n  this._currentTime = currentTime;\n  this._lastSystemTime = currentSystemTime;\n  this.onTick.raiseEvent(this);\n  return currentTime;\n};\nexport default Clock;\n","/**\n * Constants used by {@link Clock#tick} to determine behavior\n * when {@link Clock#startTime} or {@link Clock#stopTime} is reached.\n *\n * @enum {number}\n *\n * @see Clock\n * @see ClockStep\n */\nconst ClockRange = {\n  /**\n   * {@link Clock#tick} will always advances the clock in its current direction.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNBOUNDED: 0,\n\n  /**\n   * When {@link Clock#startTime} or {@link Clock#stopTime} is reached,\n   * {@link Clock#tick} will not advance {@link Clock#currentTime} any further.\n   *\n   * @type {number}\n   * @constant\n   */\n  CLAMPED: 1,\n\n  /**\n   * When {@link Clock#stopTime} is reached, {@link Clock#tick} will advance\n   * {@link Clock#currentTime} to the opposite end of the interval.  When\n   * time is moving backwards, {@link Clock#tick} will not advance past\n   * {@link Clock#startTime}\n   *\n   * @type {number}\n   * @constant\n   */\n  LOOP_STOP: 2,\n};\nexport default Object.freeze(ClockRange);\n","/**\n * Constants to determine how much time advances with each call\n * to {@link Clock#tick}.\n *\n * @enum {number}\n *\n * @see Clock\n * @see ClockRange\n */\nconst ClockStep = {\n  /**\n   * {@link Clock#tick} advances the current time by a fixed step,\n   * which is the number of seconds specified by {@link Clock#multiplier}.\n   *\n   * @type {number}\n   * @constant\n   */\n  TICK_DEPENDENT: 0,\n\n  /**\n   * {@link Clock#tick} advances the current time by the amount of system\n   * time elapsed since the previous call multiplied by {@link Clock#multiplier}.\n   *\n   * @type {number}\n   * @constant\n   */\n  SYSTEM_CLOCK_MULTIPLIER: 1,\n\n  /**\n   * {@link Clock#tick} sets the clock to the current system time;\n   * ignoring all other settings.\n   *\n   * @type {number}\n   * @constant\n   */\n  SYSTEM_CLOCK: 2,\n};\nexport default Object.freeze(ClockStep);\n","import Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport CesiumMath from \"./Math.js\";\n\nfunction hue2rgb(m1, m2, h) {\n  if (h < 0) {\n    h += 1;\n  }\n  if (h > 1) {\n    h -= 1;\n  }\n  if (h * 6 < 1) {\n    return m1 + (m2 - m1) * 6 * h;\n  }\n  if (h * 2 < 1) {\n    return m2;\n  }\n  if (h * 3 < 2) {\n    return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n  }\n  return m1;\n}\n\n/**\n * A color, specified using red, green, blue, and alpha values,\n * which range from <code>0</code> (no intensity) to <code>1.0</code> (full intensity).\n * @param {number} [red=1.0] The red component.\n * @param {number} [green=1.0] The green component.\n * @param {number} [blue=1.0] The blue component.\n * @param {number} [alpha=1.0] The alpha component.\n *\n * @constructor\n * @alias Color\n *\n * @see Packable\n */\nfunction Color(red, green, blue, alpha) {\n  /**\n   * The red component.\n   * @type {number}\n   * @default 1.0\n   */\n  this.red = red ?? 1.0;\n  /**\n   * The green component.\n   * @type {number}\n   * @default 1.0\n   */\n  this.green = green ?? 1.0;\n  /**\n   * The blue component.\n   * @type {number}\n   * @default 1.0\n   */\n  this.blue = blue ?? 1.0;\n  /**\n   * The alpha component.\n   * @type {number}\n   * @default 1.0\n   */\n  this.alpha = alpha ?? 1.0;\n}\n\n/**\n * Creates a Color instance from a {@link Cartesian4}. <code>x</code>, <code>y</code>, <code>z</code>,\n * and <code>w</code> map to <code>red</code>, <code>green</code>, <code>blue</code>, and <code>alpha</code>, respectively.\n *\n * @param {Cartesian4} cartesian The source cartesian.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nColor.fromCartesian4 = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Color(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\n  }\n\n  result.red = cartesian.x;\n  result.green = cartesian.y;\n  result.blue = cartesian.z;\n  result.alpha = cartesian.w;\n  return result;\n};\n\n/**\n * Creates a new Color specified using red, green, blue, and alpha values\n * that are in the range of 0 to 255, converting them internally to a range of 0.0 to 1.0.\n *\n * @param {number} [red=255] The red component.\n * @param {number} [green=255] The green component.\n * @param {number} [blue=255] The blue component.\n * @param {number} [alpha=255] The alpha component.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nColor.fromBytes = function (red, green, blue, alpha, result) {\n  red = Color.byteToFloat(red ?? 255.0);\n  green = Color.byteToFloat(green ?? 255.0);\n  blue = Color.byteToFloat(blue ?? 255.0);\n  alpha = Color.byteToFloat(alpha ?? 255.0);\n\n  if (!defined(result)) {\n    return new Color(red, green, blue, alpha);\n  }\n\n  result.red = red;\n  result.green = green;\n  result.blue = blue;\n  result.alpha = alpha;\n  return result;\n};\n\n/**\n * Creates a new Color that has the same red, green, and blue components\n * of the specified color, but with the specified alpha value.\n *\n * @param {Color} color The base color\n * @param {number} alpha The new alpha component.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n *\n * @example const translucentRed = Cesium.Color.fromAlpha(Cesium.Color.RED, 0.9);\n */\nColor.fromAlpha = function (color, alpha, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"color\", color);\n  Check.typeOf.number(\"alpha\", alpha);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Color(color.red, color.green, color.blue, alpha);\n  }\n\n  result.red = color.red;\n  result.green = color.green;\n  result.blue = color.blue;\n  result.alpha = alpha;\n  return result;\n};\n\nlet scratchArrayBuffer;\nlet scratchUint32Array;\nlet scratchUint8Array;\nif (FeatureDetection.supportsTypedArrays()) {\n  scratchArrayBuffer = new ArrayBuffer(4);\n  scratchUint32Array = new Uint32Array(scratchArrayBuffer);\n  scratchUint8Array = new Uint8Array(scratchArrayBuffer);\n}\n\n/**\n * Creates a new Color from a single numeric unsigned 32-bit RGBA value, using the endianness\n * of the system.\n *\n * @param {number} rgba A single numeric unsigned 32-bit RGBA value.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The color object.\n *\n * @example\n * const color = Cesium.Color.fromRgba(0x67ADDFFF);\n *\n * @see Color#toRgba\n */\nColor.fromRgba = function (rgba, result) {\n  // scratchUint32Array and scratchUint8Array share an underlying array buffer\n  scratchUint32Array[0] = rgba;\n  return Color.fromBytes(\n    scratchUint8Array[0],\n    scratchUint8Array[1],\n    scratchUint8Array[2],\n    scratchUint8Array[3],\n    result,\n  );\n};\n\n/**\n * Creates a Color instance from hue, saturation, and lightness.\n *\n * @param {number} [hue=0] The hue angle 0...1\n * @param {number} [saturation=0] The saturation value 0...1\n * @param {number} [lightness=0] The lightness value 0...1\n * @param {number} [alpha=1.0] The alpha component 0...1\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The color object.\n *\n * @see {@link http://www.w3.org/TR/css3-color/#hsl-color|CSS color values}\n */\nColor.fromHsl = function (hue, saturation, lightness, alpha, result) {\n  hue = (hue ?? 0.0) % 1.0;\n  saturation = saturation ?? 0.0;\n  lightness = lightness ?? 0.0;\n  alpha = alpha ?? 1.0;\n\n  let red = lightness;\n  let green = lightness;\n  let blue = lightness;\n\n  if (saturation !== 0) {\n    let m2;\n    if (lightness < 0.5) {\n      m2 = lightness * (1 + saturation);\n    } else {\n      m2 = lightness + saturation - lightness * saturation;\n    }\n\n    const m1 = 2.0 * lightness - m2;\n    red = hue2rgb(m1, m2, hue + 1 / 3);\n    green = hue2rgb(m1, m2, hue);\n    blue = hue2rgb(m1, m2, hue - 1 / 3);\n  }\n\n  if (!defined(result)) {\n    return new Color(red, green, blue, alpha);\n  }\n\n  result.red = red;\n  result.green = green;\n  result.blue = blue;\n  result.alpha = alpha;\n  return result;\n};\n\n/**\n * Creates a random color using the provided options. For reproducible random colors, you should\n * call {@link CesiumMath#setRandomNumberSeed} once at the beginning of your application.\n *\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.red] If specified, the red component to use instead of a randomized value.\n * @param {number} [options.minimumRed=0.0] The maximum red value to generate if none was specified.\n * @param {number} [options.maximumRed=1.0] The minimum red value to generate if none was specified.\n * @param {number} [options.green] If specified, the green component to use instead of a randomized value.\n * @param {number} [options.minimumGreen=0.0] The maximum green value to generate if none was specified.\n * @param {number} [options.maximumGreen=1.0] The minimum green value to generate if none was specified.\n * @param {number} [options.blue] If specified, the blue component to use instead of a randomized value.\n * @param {number} [options.minimumBlue=0.0] The maximum blue value to generate if none was specified.\n * @param {number} [options.maximumBlue=1.0] The minimum blue value to generate if none was specified.\n * @param {number} [options.alpha] If specified, the alpha component to use instead of a randomized value.\n * @param {number} [options.minimumAlpha=0.0] The maximum alpha value to generate if none was specified.\n * @param {number} [options.maximumAlpha=1.0] The minimum alpha value to generate if none was specified.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The modified result parameter or a new instance if result was undefined.\n *\n * @exception {DeveloperError} minimumRed must be less than or equal to maximumRed.\n * @exception {DeveloperError} minimumGreen must be less than or equal to maximumGreen.\n * @exception {DeveloperError} minimumBlue must be less than or equal to maximumBlue.\n * @exception {DeveloperError} minimumAlpha must be less than or equal to maximumAlpha.\n *\n * @example\n * //Create a completely random color\n * const color = Cesium.Color.fromRandom();\n *\n * //Create a random shade of yellow.\n * const color1 = Cesium.Color.fromRandom({\n *     red : 1.0,\n *     green : 1.0,\n *     alpha : 1.0\n * });\n *\n * //Create a random bright color.\n * const color2 = Cesium.Color.fromRandom({\n *     minimumRed : 0.75,\n *     minimumGreen : 0.75,\n *     minimumBlue : 0.75,\n *     alpha : 1.0\n * });\n */\nColor.fromRandom = function (options, result) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let red = options.red;\n  if (!defined(red)) {\n    const minimumRed = options.minimumRed ?? 0;\n    const maximumRed = options.maximumRed ?? 1.0;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number.lessThanOrEquals(\"minimumRed\", minimumRed, maximumRed);\n    //>>includeEnd('debug');\n\n    red =\n      minimumRed + CesiumMath.nextRandomNumber() * (maximumRed - minimumRed);\n  }\n\n  let green = options.green;\n  if (!defined(green)) {\n    const minimumGreen = options.minimumGreen ?? 0;\n    const maximumGreen = options.maximumGreen ?? 1.0;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number.lessThanOrEquals(\n      \"minimumGreen\",\n      minimumGreen,\n      maximumGreen,\n    );\n    //>>includeEnd('debug');\n    green =\n      minimumGreen +\n      CesiumMath.nextRandomNumber() * (maximumGreen - minimumGreen);\n  }\n\n  let blue = options.blue;\n  if (!defined(blue)) {\n    const minimumBlue = options.minimumBlue ?? 0;\n    const maximumBlue = options.maximumBlue ?? 1.0;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number.lessThanOrEquals(\n      \"minimumBlue\",\n      minimumBlue,\n      maximumBlue,\n    );\n    //>>includeEnd('debug');\n\n    blue =\n      minimumBlue + CesiumMath.nextRandomNumber() * (maximumBlue - minimumBlue);\n  }\n\n  let alpha = options.alpha;\n  if (!defined(alpha)) {\n    const minimumAlpha = options.minimumAlpha ?? 0;\n    const maximumAlpha = options.maximumAlpha ?? 1.0;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number.lessThanOrEquals(\n      \"minimumAlpha\",\n      minimumAlpha,\n      maximumAlpha,\n    );\n    //>>includeEnd('debug');\n\n    alpha =\n      minimumAlpha +\n      CesiumMath.nextRandomNumber() * (maximumAlpha - minimumAlpha);\n  }\n\n  if (!defined(result)) {\n    return new Color(red, green, blue, alpha);\n  }\n\n  result.red = red;\n  result.green = green;\n  result.blue = blue;\n  result.alpha = alpha;\n  return result;\n};\n\n//#rgba\nconst rgbaMatcher = /^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i;\n//#rrggbbaa\nconst rrggbbaaMatcher =\n  /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i;\n//rgb(), rgba(), or rgb%()\nconst rgbParenthesesMatcher =\n  /^rgba?\\s*\\(\\s*([0-9.]+%?)\\s*[,\\s]+\\s*([0-9.]+%?)\\s*[,\\s]+\\s*([0-9.]+%?)(?:\\s*[,\\s/]+\\s*([0-9.]+))?\\s*\\)$/i;\n//hsl() or hsla()\nconst hslParenthesesMatcher =\n  /^hsla?\\s*\\(\\s*([0-9.]+)\\s*[,\\s]+\\s*([0-9.]+%)\\s*[,\\s]+\\s*([0-9.]+%)(?:\\s*[,\\s/]+\\s*([0-9.]+))?\\s*\\)$/i;\n\n/**\n * Creates a Color instance from a CSS color value.\n *\n * @param {string} color The CSS color value in #rgb, #rgba, #rrggbb, #rrggbbaa, rgb(), rgba(), hsl(), or hsla() format.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The color object, or undefined if the string was not a valid CSS color.\n *\n *\n * @example\n * const cesiumBlue = Cesium.Color.fromCssColorString('#67ADDF');\n * const green = Cesium.Color.fromCssColorString('green');\n *\n * @see {@link http://www.w3.org/TR/css3-color|CSS color values}\n */\nColor.fromCssColorString = function (color, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"color\", color);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Color();\n  }\n\n  // Remove all surrounding whitespaces from the color string\n  color = color.trim();\n\n  const namedColor = Color[color.toUpperCase()];\n  if (defined(namedColor)) {\n    Color.clone(namedColor, result);\n    return result;\n  }\n\n  let matches = rgbaMatcher.exec(color);\n  if (matches !== null) {\n    result.red = parseInt(matches[1], 16) / 15;\n    result.green = parseInt(matches[2], 16) / 15.0;\n    result.blue = parseInt(matches[3], 16) / 15.0;\n    result.alpha = parseInt(matches[4] ?? \"f\", 16) / 15.0;\n    return result;\n  }\n\n  matches = rrggbbaaMatcher.exec(color);\n  if (matches !== null) {\n    result.red = parseInt(matches[1], 16) / 255.0;\n    result.green = parseInt(matches[2], 16) / 255.0;\n    result.blue = parseInt(matches[3], 16) / 255.0;\n    result.alpha = parseInt(matches[4] ?? \"ff\", 16) / 255.0;\n    return result;\n  }\n\n  matches = rgbParenthesesMatcher.exec(color);\n  if (matches !== null) {\n    result.red =\n      parseFloat(matches[1]) / (\"%\" === matches[1].substr(-1) ? 100.0 : 255.0);\n    result.green =\n      parseFloat(matches[2]) / (\"%\" === matches[2].substr(-1) ? 100.0 : 255.0);\n    result.blue =\n      parseFloat(matches[3]) / (\"%\" === matches[3].substr(-1) ? 100.0 : 255.0);\n    result.alpha = parseFloat(matches[4] ?? \"1.0\");\n    return result;\n  }\n\n  matches = hslParenthesesMatcher.exec(color);\n  if (matches !== null) {\n    return Color.fromHsl(\n      parseFloat(matches[1]) / 360.0,\n      parseFloat(matches[2]) / 100.0,\n      parseFloat(matches[3]) / 100.0,\n      parseFloat(matches[4] ?? \"1.0\"),\n      result,\n    );\n  }\n\n  result = undefined;\n  return result;\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nColor.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Color} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nColor.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n  array[startingIndex++] = value.red;\n  array[startingIndex++] = value.green;\n  array[startingIndex++] = value.blue;\n  array[startingIndex] = value.alpha;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Color} [result] The object into which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nColor.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n  if (!defined(result)) {\n    result = new Color();\n  }\n  result.red = array[startingIndex++];\n  result.green = array[startingIndex++];\n  result.blue = array[startingIndex++];\n  result.alpha = array[startingIndex];\n  return result;\n};\n\n/**\n * Converts a 'byte' color component in the range of 0 to 255 into\n * a 'float' color component in the range of 0 to 1.0.\n *\n * @param {number} number The number to be converted.\n * @returns {number} The converted number.\n */\nColor.byteToFloat = function (number) {\n  return number / 255.0;\n};\n\n/**\n * Converts a 'float' color component in the range of 0 to 1.0 into\n * a 'byte' color component in the range of 0 to 255.\n *\n * @param {number} number The number to be converted.\n * @returns {number} The converted number.\n */\nColor.floatToByte = function (number) {\n  return number === 1.0 ? 255.0 : (number * 256.0) | 0;\n};\n\n/**\n * Duplicates a Color.\n *\n * @param {Color} color The Color to duplicate.\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The modified result parameter or a new instance if result was undefined. (Returns undefined if color is undefined)\n */\nColor.clone = function (color, result) {\n  if (!defined(color)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new Color(color.red, color.green, color.blue, color.alpha);\n  }\n  result.red = color.red;\n  result.green = color.green;\n  result.blue = color.blue;\n  result.alpha = color.alpha;\n  return result;\n};\n\n/**\n * Returns true if the first Color equals the second color.\n *\n * @param {Color} [left] The first Color to compare for equality.\n * @param {Color} [right] The second Color to compare for equality.\n * @returns {boolean} <code>true</code> if the Colors are equal; otherwise, <code>false</code>.\n */\nColor.equals = function (left, right) {\n  return (\n    left === right || //\n    (defined(left) && //\n      defined(right) && //\n      left.red === right.red && //\n      left.green === right.green && //\n      left.blue === right.blue && //\n      left.alpha === right.alpha)\n  );\n};\n\n/**\n * @private\n */\nColor.equalsArray = function (color, array, offset) {\n  return (\n    color.red === array[offset] &&\n    color.green === array[offset + 1] &&\n    color.blue === array[offset + 2] &&\n    color.alpha === array[offset + 3]\n  );\n};\n\n/**\n * Returns a duplicate of a Color instance.\n *\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\n * @returns {Color} The modified result parameter or a new instance if result was undefined.\n */\nColor.prototype.clone = function (result) {\n  return Color.clone(this, result);\n};\n\n/**\n * Returns true if this Color equals other.\n *\n * @param {Color} [other] The Color to compare for equality.\n * @returns {boolean} <code>true</code> if the Colors are equal; otherwise, <code>false</code>.\n */\nColor.prototype.equals = function (other) {\n  return Color.equals(this, other);\n};\n\n/**\n * Returns <code>true</code> if this Color equals other componentwise within the specified epsilon.\n *\n * @param {Color} other The Color to compare for equality.\n * @param {number} [epsilon=0.0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if the Colors are equal within the specified epsilon; otherwise, <code>false</code>.\n */\nColor.prototype.equalsEpsilon = function (other, epsilon) {\n  return (\n    this === other || //\n    (defined(other) && //\n      Math.abs(this.red - other.red) <= epsilon && //\n      Math.abs(this.green - other.green) <= epsilon && //\n      Math.abs(this.blue - other.blue) <= epsilon && //\n      Math.abs(this.alpha - other.alpha) <= epsilon)\n  );\n};\n\n/**\n * Creates a string representing this Color in the format '(red, green, blue, alpha)'.\n *\n * @returns {string} A string representing this Color in the format '(red, green, blue, alpha)'.\n */\nColor.prototype.toString = function () {\n  return `(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`;\n};\n\n/**\n * Creates a string containing the CSS color value for this color.\n *\n * @returns {string} The CSS equivalent of this color.\n *\n * @see {@link http://www.w3.org/TR/css3-color/#rgba-color|CSS RGB or RGBA color values}\n */\nColor.prototype.toCssColorString = function () {\n  const red = Color.floatToByte(this.red);\n  const green = Color.floatToByte(this.green);\n  const blue = Color.floatToByte(this.blue);\n  if (this.alpha === 1) {\n    return `rgb(${red},${green},${blue})`;\n  }\n  return `rgba(${red},${green},${blue},${this.alpha})`;\n};\n\n/**\n * Creates a string containing CSS hex string color value for this color.\n *\n * @returns {string} The CSS hex string equivalent of this color.\n */\nColor.prototype.toCssHexString = function () {\n  let r = Color.floatToByte(this.red).toString(16);\n  if (r.length < 2) {\n    r = `0${r}`;\n  }\n  let g = Color.floatToByte(this.green).toString(16);\n  if (g.length < 2) {\n    g = `0${g}`;\n  }\n  let b = Color.floatToByte(this.blue).toString(16);\n  if (b.length < 2) {\n    b = `0${b}`;\n  }\n  if (this.alpha < 1) {\n    let hexAlpha = Color.floatToByte(this.alpha).toString(16);\n    if (hexAlpha.length < 2) {\n      hexAlpha = `0${hexAlpha}`;\n    }\n    return `#${r}${g}${b}${hexAlpha}`;\n  }\n  return `#${r}${g}${b}`;\n};\n\n/**\n * Converts this color to an array of red, green, blue, and alpha values\n * that are in the range of 0 to 255.\n *\n * @param {number[]} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {number[]} The modified result parameter or a new instance if result was undefined.\n */\nColor.prototype.toBytes = function (result) {\n  const red = Color.floatToByte(this.red);\n  const green = Color.floatToByte(this.green);\n  const blue = Color.floatToByte(this.blue);\n  const alpha = Color.floatToByte(this.alpha);\n\n  if (!defined(result)) {\n    return [red, green, blue, alpha];\n  }\n  result[0] = red;\n  result[1] = green;\n  result[2] = blue;\n  result[3] = alpha;\n  return result;\n};\n\n/**\n * Converts RGBA values in bytes to a single numeric unsigned 32-bit RGBA value, using the endianness\n * of the system.\n *\n * @returns {number} A single numeric unsigned 32-bit RGBA value.\n *\n * @see Color.toRgba\n */\nColor.bytesToRgba = function (red, green, blue, alpha) {\n  // scratchUint32Array and scratchUint8Array share an underlying array buffer\n  scratchUint8Array[0] = red;\n  scratchUint8Array[1] = green;\n  scratchUint8Array[2] = blue;\n  scratchUint8Array[3] = alpha;\n  return scratchUint32Array[0];\n};\n\n/**\n * Converts this color to a single numeric unsigned 32-bit RGBA value, using the endianness\n * of the system.\n *\n * @returns {number} A single numeric unsigned 32-bit RGBA value.\n *\n *\n * @example\n * const rgba = Cesium.Color.BLUE.toRgba();\n *\n * @see Color.fromRgba\n */\nColor.prototype.toRgba = function () {\n  return Color.bytesToRgba(\n    Color.floatToByte(this.red),\n    Color.floatToByte(this.green),\n    Color.floatToByte(this.blue),\n    Color.floatToByte(this.alpha),\n  );\n};\n\n/**\n * Brightens this color by the provided magnitude.\n *\n * @param {number} magnitude A positive number indicating the amount to brighten.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n *\n * @example\n * const brightBlue = Cesium.Color.BLUE.brighten(0.5, new Cesium.Color());\n */\nColor.prototype.brighten = function (magnitude, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"magnitude\", magnitude);\n  Check.typeOf.number.greaterThanOrEquals(\"magnitude\", magnitude, 0.0);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  magnitude = 1.0 - magnitude;\n  result.red = 1.0 - (1.0 - this.red) * magnitude;\n  result.green = 1.0 - (1.0 - this.green) * magnitude;\n  result.blue = 1.0 - (1.0 - this.blue) * magnitude;\n  result.alpha = this.alpha;\n  return result;\n};\n\n/**\n * Darkens this color by the provided magnitude.\n *\n * @param {number} magnitude A positive number indicating the amount to darken.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n *\n * @example\n * const darkBlue = Cesium.Color.BLUE.darken(0.5, new Cesium.Color());\n */\nColor.prototype.darken = function (magnitude, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"magnitude\", magnitude);\n  Check.typeOf.number.greaterThanOrEquals(\"magnitude\", magnitude, 0.0);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  magnitude = 1.0 - magnitude;\n  result.red = this.red * magnitude;\n  result.green = this.green * magnitude;\n  result.blue = this.blue * magnitude;\n  result.alpha = this.alpha;\n  return result;\n};\n\n/**\n * Creates a new Color that has the same red, green, and blue components\n * as this Color, but with the specified alpha value.\n *\n * @param {number} alpha The new alpha component.\n * @param {Color} [result] The object onto which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n *\n * @example const translucentRed = Cesium.Color.RED.withAlpha(0.9);\n */\nColor.prototype.withAlpha = function (alpha, result) {\n  return Color.fromAlpha(this, alpha, result);\n};\n\n/**\n * Computes the componentwise sum of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.add = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = left.red + right.red;\n  result.green = left.green + right.green;\n  result.blue = left.blue + right.blue;\n  result.alpha = left.alpha + right.alpha;\n  return result;\n};\n\n/**\n * Computes the componentwise difference of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.subtract = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = left.red - right.red;\n  result.green = left.green - right.green;\n  result.blue = left.blue - right.blue;\n  result.alpha = left.alpha - right.alpha;\n  return result;\n};\n\n/**\n * Computes the componentwise product of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.multiply = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = left.red * right.red;\n  result.green = left.green * right.green;\n  result.blue = left.blue * right.blue;\n  result.alpha = left.alpha * right.alpha;\n  return result;\n};\n\n/**\n * Computes the componentwise quotient of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.divide = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = left.red / right.red;\n  result.green = left.green / right.green;\n  result.blue = left.blue / right.blue;\n  result.alpha = left.alpha / right.alpha;\n  return result;\n};\n\n/**\n * Computes the componentwise modulus of two Colors.\n *\n * @param {Color} left The first Color.\n * @param {Color} right The second Color.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.mod = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = left.red % right.red;\n  result.green = left.green % right.green;\n  result.blue = left.blue % right.blue;\n  result.alpha = left.alpha % right.alpha;\n  return result;\n};\n\n/**\n * Computes the linear interpolation or extrapolation at t between the provided colors.\n *\n * @param {Color} start The color corresponding to t at 0.0.\n * @param {Color} end The color corresponding to t at 1.0.\n * @param {number} t The point along t at which to interpolate.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.lerp = function (start, end, t, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"start\", start);\n  Check.typeOf.object(\"end\", end);\n  Check.typeOf.number(\"t\", t);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = CesiumMath.lerp(start.red, end.red, t);\n  result.green = CesiumMath.lerp(start.green, end.green, t);\n  result.blue = CesiumMath.lerp(start.blue, end.blue, t);\n  result.alpha = CesiumMath.lerp(start.alpha, end.alpha, t);\n  return result;\n};\n\n/**\n * Multiplies the provided Color componentwise by the provided scalar.\n *\n * @param {Color} color The Color to be scaled.\n * @param {number} scalar The scalar to multiply with.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.multiplyByScalar = function (color, scalar, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"color\", color);\n  Check.typeOf.number(\"scalar\", scalar);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = color.red * scalar;\n  result.green = color.green * scalar;\n  result.blue = color.blue * scalar;\n  result.alpha = color.alpha * scalar;\n  return result;\n};\n\n/**\n * Divides the provided Color componentwise by the provided scalar.\n *\n * @param {Color} color The Color to be divided.\n * @param {number} scalar The scalar to divide with.\n * @param {Color} result The object onto which to store the result.\n * @returns {Color} The modified result parameter.\n */\nColor.divideByScalar = function (color, scalar, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"color\", color);\n  Check.typeOf.number(\"scalar\", scalar);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.red = color.red / scalar;\n  result.green = color.green / scalar;\n  result.blue = color.blue / scalar;\n  result.alpha = color.alpha / scalar;\n  return result;\n};\n\n/**\n * An immutable Color instance initialized to CSS color #F0F8FF\n * <span class=\"colorSwath\" style=\"background: #F0F8FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ALICEBLUE = Object.freeze(Color.fromCssColorString(\"#F0F8FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FAEBD7\n * <span class=\"colorSwath\" style=\"background: #FAEBD7;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ANTIQUEWHITE = Object.freeze(Color.fromCssColorString(\"#FAEBD7\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FFFF\n * <span class=\"colorSwath\" style=\"background: #00FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.AQUA = Object.freeze(Color.fromCssColorString(\"#00FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #7FFFD4\n * <span class=\"colorSwath\" style=\"background: #7FFFD4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.AQUAMARINE = Object.freeze(Color.fromCssColorString(\"#7FFFD4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F0FFFF\n * <span class=\"colorSwath\" style=\"background: #F0FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.AZURE = Object.freeze(Color.fromCssColorString(\"#F0FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5F5DC\n * <span class=\"colorSwath\" style=\"background: #F5F5DC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BEIGE = Object.freeze(Color.fromCssColorString(\"#F5F5DC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFE4C4\n * <span class=\"colorSwath\" style=\"background: #FFE4C4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BISQUE = Object.freeze(Color.fromCssColorString(\"#FFE4C4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #000000\n * <span class=\"colorSwath\" style=\"background: #000000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLACK = Object.freeze(Color.fromCssColorString(\"#000000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFEBCD\n * <span class=\"colorSwath\" style=\"background: #FFEBCD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLANCHEDALMOND = Object.freeze(Color.fromCssColorString(\"#FFEBCD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #0000FF\n * <span class=\"colorSwath\" style=\"background: #0000FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLUE = Object.freeze(Color.fromCssColorString(\"#0000FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8A2BE2\n * <span class=\"colorSwath\" style=\"background: #8A2BE2;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BLUEVIOLET = Object.freeze(Color.fromCssColorString(\"#8A2BE2\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A52A2A\n * <span class=\"colorSwath\" style=\"background: #A52A2A;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BROWN = Object.freeze(Color.fromCssColorString(\"#A52A2A\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DEB887\n * <span class=\"colorSwath\" style=\"background: #DEB887;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.BURLYWOOD = Object.freeze(Color.fromCssColorString(\"#DEB887\"));\n\n/**\n * An immutable Color instance initialized to CSS color #5F9EA0\n * <span class=\"colorSwath\" style=\"background: #5F9EA0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CADETBLUE = Object.freeze(Color.fromCssColorString(\"#5F9EA0\"));\n/**\n * An immutable Color instance initialized to CSS color #7FFF00\n * <span class=\"colorSwath\" style=\"background: #7FFF00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CHARTREUSE = Object.freeze(Color.fromCssColorString(\"#7FFF00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D2691E\n * <span class=\"colorSwath\" style=\"background: #D2691E;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CHOCOLATE = Object.freeze(Color.fromCssColorString(\"#D2691E\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF7F50\n * <span class=\"colorSwath\" style=\"background: #FF7F50;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CORAL = Object.freeze(Color.fromCssColorString(\"#FF7F50\"));\n\n/**\n * An immutable Color instance initialized to CSS color #6495ED\n * <span class=\"colorSwath\" style=\"background: #6495ED;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CORNFLOWERBLUE = Object.freeze(Color.fromCssColorString(\"#6495ED\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFF8DC\n * <span class=\"colorSwath\" style=\"background: #FFF8DC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CORNSILK = Object.freeze(Color.fromCssColorString(\"#FFF8DC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DC143C\n * <span class=\"colorSwath\" style=\"background: #DC143C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CRIMSON = Object.freeze(Color.fromCssColorString(\"#DC143C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FFFF\n * <span class=\"colorSwath\" style=\"background: #00FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.CYAN = Object.freeze(Color.fromCssColorString(\"#00FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00008B\n * <span class=\"colorSwath\" style=\"background: #00008B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKBLUE = Object.freeze(Color.fromCssColorString(\"#00008B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #008B8B\n * <span class=\"colorSwath\" style=\"background: #008B8B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKCYAN = Object.freeze(Color.fromCssColorString(\"#008B8B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #B8860B\n * <span class=\"colorSwath\" style=\"background: #B8860B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGOLDENROD = Object.freeze(Color.fromCssColorString(\"#B8860B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A9A9A9\n * <span class=\"colorSwath\" style=\"background: #A9A9A9;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGRAY = Object.freeze(Color.fromCssColorString(\"#A9A9A9\"));\n\n/**\n * An immutable Color instance initialized to CSS color #006400\n * <span class=\"colorSwath\" style=\"background: #006400;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGREEN = Object.freeze(Color.fromCssColorString(\"#006400\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A9A9A9\n * <span class=\"colorSwath\" style=\"background: #A9A9A9;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKGREY = Color.DARKGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #BDB76B\n * <span class=\"colorSwath\" style=\"background: #BDB76B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKKHAKI = Object.freeze(Color.fromCssColorString(\"#BDB76B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8B008B\n * <span class=\"colorSwath\" style=\"background: #8B008B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKMAGENTA = Object.freeze(Color.fromCssColorString(\"#8B008B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #556B2F\n * <span class=\"colorSwath\" style=\"background: #556B2F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKOLIVEGREEN = Object.freeze(Color.fromCssColorString(\"#556B2F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF8C00\n * <span class=\"colorSwath\" style=\"background: #FF8C00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKORANGE = Object.freeze(Color.fromCssColorString(\"#FF8C00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9932CC\n * <span class=\"colorSwath\" style=\"background: #9932CC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKORCHID = Object.freeze(Color.fromCssColorString(\"#9932CC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8B0000\n * <span class=\"colorSwath\" style=\"background: #8B0000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKRED = Object.freeze(Color.fromCssColorString(\"#8B0000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #E9967A\n * <span class=\"colorSwath\" style=\"background: #E9967A;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSALMON = Object.freeze(Color.fromCssColorString(\"#E9967A\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8FBC8F\n * <span class=\"colorSwath\" style=\"background: #8FBC8F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSEAGREEN = Object.freeze(Color.fromCssColorString(\"#8FBC8F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #483D8B\n * <span class=\"colorSwath\" style=\"background: #483D8B;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSLATEBLUE = Object.freeze(Color.fromCssColorString(\"#483D8B\"));\n\n/**\n * An immutable Color instance initialized to CSS color #2F4F4F\n * <span class=\"colorSwath\" style=\"background: #2F4F4F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSLATEGRAY = Object.freeze(Color.fromCssColorString(\"#2F4F4F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #2F4F4F\n * <span class=\"colorSwath\" style=\"background: #2F4F4F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKSLATEGREY = Color.DARKSLATEGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #00CED1\n * <span class=\"colorSwath\" style=\"background: #00CED1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKTURQUOISE = Object.freeze(Color.fromCssColorString(\"#00CED1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9400D3\n * <span class=\"colorSwath\" style=\"background: #9400D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DARKVIOLET = Object.freeze(Color.fromCssColorString(\"#9400D3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF1493\n * <span class=\"colorSwath\" style=\"background: #FF1493;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DEEPPINK = Object.freeze(Color.fromCssColorString(\"#FF1493\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00BFFF\n * <span class=\"colorSwath\" style=\"background: #00BFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DEEPSKYBLUE = Object.freeze(Color.fromCssColorString(\"#00BFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #696969\n * <span class=\"colorSwath\" style=\"background: #696969;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DIMGRAY = Object.freeze(Color.fromCssColorString(\"#696969\"));\n\n/**\n * An immutable Color instance initialized to CSS color #696969\n * <span class=\"colorSwath\" style=\"background: #696969;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DIMGREY = Color.DIMGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #1E90FF\n * <span class=\"colorSwath\" style=\"background: #1E90FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.DODGERBLUE = Object.freeze(Color.fromCssColorString(\"#1E90FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #B22222\n * <span class=\"colorSwath\" style=\"background: #B22222;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FIREBRICK = Object.freeze(Color.fromCssColorString(\"#B22222\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFAF0\n * <span class=\"colorSwath\" style=\"background: #FFFAF0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FLORALWHITE = Object.freeze(Color.fromCssColorString(\"#FFFAF0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #228B22\n * <span class=\"colorSwath\" style=\"background: #228B22;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FORESTGREEN = Object.freeze(Color.fromCssColorString(\"#228B22\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF00FF\n * <span class=\"colorSwath\" style=\"background: #FF00FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.FUCHSIA = Object.freeze(Color.fromCssColorString(\"#FF00FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DCDCDC\n * <span class=\"colorSwath\" style=\"background: #DCDCDC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GAINSBORO = Object.freeze(Color.fromCssColorString(\"#DCDCDC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F8F8FF\n * <span class=\"colorSwath\" style=\"background: #F8F8FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GHOSTWHITE = Object.freeze(Color.fromCssColorString(\"#F8F8FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFD700\n * <span class=\"colorSwath\" style=\"background: #FFD700;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GOLD = Object.freeze(Color.fromCssColorString(\"#FFD700\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DAA520\n * <span class=\"colorSwath\" style=\"background: #DAA520;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GOLDENROD = Object.freeze(Color.fromCssColorString(\"#DAA520\"));\n\n/**\n * An immutable Color instance initialized to CSS color #808080\n * <span class=\"colorSwath\" style=\"background: #808080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GRAY = Object.freeze(Color.fromCssColorString(\"#808080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #008000\n * <span class=\"colorSwath\" style=\"background: #008000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GREEN = Object.freeze(Color.fromCssColorString(\"#008000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #ADFF2F\n * <span class=\"colorSwath\" style=\"background: #ADFF2F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GREENYELLOW = Object.freeze(Color.fromCssColorString(\"#ADFF2F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #808080\n * <span class=\"colorSwath\" style=\"background: #808080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.GREY = Color.GRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #F0FFF0\n * <span class=\"colorSwath\" style=\"background: #F0FFF0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.HONEYDEW = Object.freeze(Color.fromCssColorString(\"#F0FFF0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF69B4\n * <span class=\"colorSwath\" style=\"background: #FF69B4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.HOTPINK = Object.freeze(Color.fromCssColorString(\"#FF69B4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #CD5C5C\n * <span class=\"colorSwath\" style=\"background: #CD5C5C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.INDIANRED = Object.freeze(Color.fromCssColorString(\"#CD5C5C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #4B0082\n * <span class=\"colorSwath\" style=\"background: #4B0082;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.INDIGO = Object.freeze(Color.fromCssColorString(\"#4B0082\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFFF0\n * <span class=\"colorSwath\" style=\"background: #FFFFF0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.IVORY = Object.freeze(Color.fromCssColorString(\"#FFFFF0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F0E68C\n * <span class=\"colorSwath\" style=\"background: #F0E68C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.KHAKI = Object.freeze(Color.fromCssColorString(\"#F0E68C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #E6E6FA\n * <span class=\"colorSwath\" style=\"background: #E6E6FA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LAVENDER = Object.freeze(Color.fromCssColorString(\"#E6E6FA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFF0F5\n * <span class=\"colorSwath\" style=\"background: #FFF0F5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LAVENDAR_BLUSH = Object.freeze(Color.fromCssColorString(\"#FFF0F5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #7CFC00\n * <span class=\"colorSwath\" style=\"background: #7CFC00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LAWNGREEN = Object.freeze(Color.fromCssColorString(\"#7CFC00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFACD\n * <span class=\"colorSwath\" style=\"background: #FFFACD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LEMONCHIFFON = Object.freeze(Color.fromCssColorString(\"#FFFACD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #ADD8E6\n * <span class=\"colorSwath\" style=\"background: #ADD8E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTBLUE = Object.freeze(Color.fromCssColorString(\"#ADD8E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F08080\n * <span class=\"colorSwath\" style=\"background: #F08080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTCORAL = Object.freeze(Color.fromCssColorString(\"#F08080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #E0FFFF\n * <span class=\"colorSwath\" style=\"background: #E0FFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTCYAN = Object.freeze(Color.fromCssColorString(\"#E0FFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FAFAD2\n * <span class=\"colorSwath\" style=\"background: #FAFAD2;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGOLDENRODYELLOW = Object.freeze(Color.fromCssColorString(\"#FAFAD2\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D3D3D3\n * <span class=\"colorSwath\" style=\"background: #D3D3D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGRAY = Object.freeze(Color.fromCssColorString(\"#D3D3D3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #90EE90\n * <span class=\"colorSwath\" style=\"background: #90EE90;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGREEN = Object.freeze(Color.fromCssColorString(\"#90EE90\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D3D3D3\n * <span class=\"colorSwath\" style=\"background: #D3D3D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTGREY = Color.LIGHTGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #FFB6C1\n * <span class=\"colorSwath\" style=\"background: #FFB6C1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTPINK = Object.freeze(Color.fromCssColorString(\"#FFB6C1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #20B2AA\n * <span class=\"colorSwath\" style=\"background: #20B2AA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSEAGREEN = Object.freeze(Color.fromCssColorString(\"#20B2AA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #87CEFA\n * <span class=\"colorSwath\" style=\"background: #87CEFA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSKYBLUE = Object.freeze(Color.fromCssColorString(\"#87CEFA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #778899\n * <span class=\"colorSwath\" style=\"background: #778899;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSLATEGRAY = Object.freeze(Color.fromCssColorString(\"#778899\"));\n\n/**\n * An immutable Color instance initialized to CSS color #778899\n * <span class=\"colorSwath\" style=\"background: #778899;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSLATEGREY = Color.LIGHTSLATEGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #B0C4DE\n * <span class=\"colorSwath\" style=\"background: #B0C4DE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTSTEELBLUE = Object.freeze(Color.fromCssColorString(\"#B0C4DE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFFE0\n * <span class=\"colorSwath\" style=\"background: #FFFFE0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIGHTYELLOW = Object.freeze(Color.fromCssColorString(\"#FFFFE0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FF00\n * <span class=\"colorSwath\" style=\"background: #00FF00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIME = Object.freeze(Color.fromCssColorString(\"#00FF00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #32CD32\n * <span class=\"colorSwath\" style=\"background: #32CD32;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LIMEGREEN = Object.freeze(Color.fromCssColorString(\"#32CD32\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FAF0E6\n * <span class=\"colorSwath\" style=\"background: #FAF0E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.LINEN = Object.freeze(Color.fromCssColorString(\"#FAF0E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF00FF\n * <span class=\"colorSwath\" style=\"background: #FF00FF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MAGENTA = Object.freeze(Color.fromCssColorString(\"#FF00FF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #800000\n * <span class=\"colorSwath\" style=\"background: #800000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MAROON = Object.freeze(Color.fromCssColorString(\"#800000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #66CDAA\n * <span class=\"colorSwath\" style=\"background: #66CDAA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMAQUAMARINE = Object.freeze(Color.fromCssColorString(\"#66CDAA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #0000CD\n * <span class=\"colorSwath\" style=\"background: #0000CD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMBLUE = Object.freeze(Color.fromCssColorString(\"#0000CD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #BA55D3\n * <span class=\"colorSwath\" style=\"background: #BA55D3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMORCHID = Object.freeze(Color.fromCssColorString(\"#BA55D3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9370DB\n * <span class=\"colorSwath\" style=\"background: #9370DB;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMPURPLE = Object.freeze(Color.fromCssColorString(\"#9370DB\"));\n\n/**\n * An immutable Color instance initialized to CSS color #3CB371\n * <span class=\"colorSwath\" style=\"background: #3CB371;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMSEAGREEN = Object.freeze(Color.fromCssColorString(\"#3CB371\"));\n\n/**\n * An immutable Color instance initialized to CSS color #7B68EE\n * <span class=\"colorSwath\" style=\"background: #7B68EE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMSLATEBLUE = Object.freeze(Color.fromCssColorString(\"#7B68EE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FA9A\n * <span class=\"colorSwath\" style=\"background: #00FA9A;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMSPRINGGREEN = Object.freeze(Color.fromCssColorString(\"#00FA9A\"));\n\n/**\n * An immutable Color instance initialized to CSS color #48D1CC\n * <span class=\"colorSwath\" style=\"background: #48D1CC;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMTURQUOISE = Object.freeze(Color.fromCssColorString(\"#48D1CC\"));\n\n/**\n * An immutable Color instance initialized to CSS color #C71585\n * <span class=\"colorSwath\" style=\"background: #C71585;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MEDIUMVIOLETRED = Object.freeze(Color.fromCssColorString(\"#C71585\"));\n\n/**\n * An immutable Color instance initialized to CSS color #191970\n * <span class=\"colorSwath\" style=\"background: #191970;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MIDNIGHTBLUE = Object.freeze(Color.fromCssColorString(\"#191970\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5FFFA\n * <span class=\"colorSwath\" style=\"background: #F5FFFA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MINTCREAM = Object.freeze(Color.fromCssColorString(\"#F5FFFA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFE4E1\n * <span class=\"colorSwath\" style=\"background: #FFE4E1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MISTYROSE = Object.freeze(Color.fromCssColorString(\"#FFE4E1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFE4B5\n * <span class=\"colorSwath\" style=\"background: #FFE4B5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.MOCCASIN = Object.freeze(Color.fromCssColorString(\"#FFE4B5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFDEAD\n * <span class=\"colorSwath\" style=\"background: #FFDEAD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.NAVAJOWHITE = Object.freeze(Color.fromCssColorString(\"#FFDEAD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #000080\n * <span class=\"colorSwath\" style=\"background: #000080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.NAVY = Object.freeze(Color.fromCssColorString(\"#000080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FDF5E6\n * <span class=\"colorSwath\" style=\"background: #FDF5E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.OLDLACE = Object.freeze(Color.fromCssColorString(\"#FDF5E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #808000\n * <span class=\"colorSwath\" style=\"background: #808000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.OLIVE = Object.freeze(Color.fromCssColorString(\"#808000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #6B8E23\n * <span class=\"colorSwath\" style=\"background: #6B8E23;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.OLIVEDRAB = Object.freeze(Color.fromCssColorString(\"#6B8E23\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFA500\n * <span class=\"colorSwath\" style=\"background: #FFA500;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ORANGE = Object.freeze(Color.fromCssColorString(\"#FFA500\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF4500\n * <span class=\"colorSwath\" style=\"background: #FF4500;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ORANGERED = Object.freeze(Color.fromCssColorString(\"#FF4500\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DA70D6\n * <span class=\"colorSwath\" style=\"background: #DA70D6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ORCHID = Object.freeze(Color.fromCssColorString(\"#DA70D6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #EEE8AA\n * <span class=\"colorSwath\" style=\"background: #EEE8AA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALEGOLDENROD = Object.freeze(Color.fromCssColorString(\"#EEE8AA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #98FB98\n * <span class=\"colorSwath\" style=\"background: #98FB98;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALEGREEN = Object.freeze(Color.fromCssColorString(\"#98FB98\"));\n\n/**\n * An immutable Color instance initialized to CSS color #AFEEEE\n * <span class=\"colorSwath\" style=\"background: #AFEEEE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALETURQUOISE = Object.freeze(Color.fromCssColorString(\"#AFEEEE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DB7093\n * <span class=\"colorSwath\" style=\"background: #DB7093;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PALEVIOLETRED = Object.freeze(Color.fromCssColorString(\"#DB7093\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFEFD5\n * <span class=\"colorSwath\" style=\"background: #FFEFD5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PAPAYAWHIP = Object.freeze(Color.fromCssColorString(\"#FFEFD5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFDAB9\n * <span class=\"colorSwath\" style=\"background: #FFDAB9;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PEACHPUFF = Object.freeze(Color.fromCssColorString(\"#FFDAB9\"));\n\n/**\n * An immutable Color instance initialized to CSS color #CD853F\n * <span class=\"colorSwath\" style=\"background: #CD853F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PERU = Object.freeze(Color.fromCssColorString(\"#CD853F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFC0CB\n * <span class=\"colorSwath\" style=\"background: #FFC0CB;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PINK = Object.freeze(Color.fromCssColorString(\"#FFC0CB\"));\n\n/**\n * An immutable Color instance initialized to CSS color #DDA0DD\n * <span class=\"colorSwath\" style=\"background: #DDA0DD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PLUM = Object.freeze(Color.fromCssColorString(\"#DDA0DD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #B0E0E6\n * <span class=\"colorSwath\" style=\"background: #B0E0E6;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.POWDERBLUE = Object.freeze(Color.fromCssColorString(\"#B0E0E6\"));\n\n/**\n * An immutable Color instance initialized to CSS color #800080\n * <span class=\"colorSwath\" style=\"background: #800080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.PURPLE = Object.freeze(Color.fromCssColorString(\"#800080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF0000\n * <span class=\"colorSwath\" style=\"background: #FF0000;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.RED = Object.freeze(Color.fromCssColorString(\"#FF0000\"));\n\n/**\n * An immutable Color instance initialized to CSS color #BC8F8F\n * <span class=\"colorSwath\" style=\"background: #BC8F8F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ROSYBROWN = Object.freeze(Color.fromCssColorString(\"#BC8F8F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #4169E1\n * <span class=\"colorSwath\" style=\"background: #4169E1;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.ROYALBLUE = Object.freeze(Color.fromCssColorString(\"#4169E1\"));\n\n/**\n * An immutable Color instance initialized to CSS color #8B4513\n * <span class=\"colorSwath\" style=\"background: #8B4513;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SADDLEBROWN = Object.freeze(Color.fromCssColorString(\"#8B4513\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FA8072\n * <span class=\"colorSwath\" style=\"background: #FA8072;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SALMON = Object.freeze(Color.fromCssColorString(\"#FA8072\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F4A460\n * <span class=\"colorSwath\" style=\"background: #F4A460;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SANDYBROWN = Object.freeze(Color.fromCssColorString(\"#F4A460\"));\n\n/**\n * An immutable Color instance initialized to CSS color #2E8B57\n * <span class=\"colorSwath\" style=\"background: #2E8B57;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SEAGREEN = Object.freeze(Color.fromCssColorString(\"#2E8B57\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFF5EE\n * <span class=\"colorSwath\" style=\"background: #FFF5EE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SEASHELL = Object.freeze(Color.fromCssColorString(\"#FFF5EE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #A0522D\n * <span class=\"colorSwath\" style=\"background: #A0522D;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SIENNA = Object.freeze(Color.fromCssColorString(\"#A0522D\"));\n\n/**\n * An immutable Color instance initialized to CSS color #C0C0C0\n * <span class=\"colorSwath\" style=\"background: #C0C0C0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SILVER = Object.freeze(Color.fromCssColorString(\"#C0C0C0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #87CEEB\n * <span class=\"colorSwath\" style=\"background: #87CEEB;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SKYBLUE = Object.freeze(Color.fromCssColorString(\"#87CEEB\"));\n\n/**\n * An immutable Color instance initialized to CSS color #6A5ACD\n * <span class=\"colorSwath\" style=\"background: #6A5ACD;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SLATEBLUE = Object.freeze(Color.fromCssColorString(\"#6A5ACD\"));\n\n/**\n * An immutable Color instance initialized to CSS color #708090\n * <span class=\"colorSwath\" style=\"background: #708090;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SLATEGRAY = Object.freeze(Color.fromCssColorString(\"#708090\"));\n\n/**\n * An immutable Color instance initialized to CSS color #708090\n * <span class=\"colorSwath\" style=\"background: #708090;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SLATEGREY = Color.SLATEGRAY;\n\n/**\n * An immutable Color instance initialized to CSS color #FFFAFA\n * <span class=\"colorSwath\" style=\"background: #FFFAFA;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SNOW = Object.freeze(Color.fromCssColorString(\"#FFFAFA\"));\n\n/**\n * An immutable Color instance initialized to CSS color #00FF7F\n * <span class=\"colorSwath\" style=\"background: #00FF7F;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.SPRINGGREEN = Object.freeze(Color.fromCssColorString(\"#00FF7F\"));\n\n/**\n * An immutable Color instance initialized to CSS color #4682B4\n * <span class=\"colorSwath\" style=\"background: #4682B4;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.STEELBLUE = Object.freeze(Color.fromCssColorString(\"#4682B4\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D2B48C\n * <span class=\"colorSwath\" style=\"background: #D2B48C;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TAN = Object.freeze(Color.fromCssColorString(\"#D2B48C\"));\n\n/**\n * An immutable Color instance initialized to CSS color #008080\n * <span class=\"colorSwath\" style=\"background: #008080;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TEAL = Object.freeze(Color.fromCssColorString(\"#008080\"));\n\n/**\n * An immutable Color instance initialized to CSS color #D8BFD8\n * <span class=\"colorSwath\" style=\"background: #D8BFD8;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.THISTLE = Object.freeze(Color.fromCssColorString(\"#D8BFD8\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FF6347\n * <span class=\"colorSwath\" style=\"background: #FF6347;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TOMATO = Object.freeze(Color.fromCssColorString(\"#FF6347\"));\n\n/**\n * An immutable Color instance initialized to CSS color #40E0D0\n * <span class=\"colorSwath\" style=\"background: #40E0D0;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TURQUOISE = Object.freeze(Color.fromCssColorString(\"#40E0D0\"));\n\n/**\n * An immutable Color instance initialized to CSS color #EE82EE\n * <span class=\"colorSwath\" style=\"background: #EE82EE;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.VIOLET = Object.freeze(Color.fromCssColorString(\"#EE82EE\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5DEB3\n * <span class=\"colorSwath\" style=\"background: #F5DEB3;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.WHEAT = Object.freeze(Color.fromCssColorString(\"#F5DEB3\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFFFF\n * <span class=\"colorSwath\" style=\"background: #FFFFFF;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.WHITE = Object.freeze(Color.fromCssColorString(\"#FFFFFF\"));\n\n/**\n * An immutable Color instance initialized to CSS color #F5F5F5\n * <span class=\"colorSwath\" style=\"background: #F5F5F5;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.WHITESMOKE = Object.freeze(Color.fromCssColorString(\"#F5F5F5\"));\n\n/**\n * An immutable Color instance initialized to CSS color #FFFF00\n * <span class=\"colorSwath\" style=\"background: #FFFF00;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.YELLOW = Object.freeze(Color.fromCssColorString(\"#FFFF00\"));\n\n/**\n * An immutable Color instance initialized to CSS color #9ACD32\n * <span class=\"colorSwath\" style=\"background: #9ACD32;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.YELLOWGREEN = Object.freeze(Color.fromCssColorString(\"#9ACD32\"));\n\n/**\n * An immutable Color instance initialized to CSS transparent.\n * <span class=\"colorSwath\" style=\"background: transparent;\"></span>\n *\n * @constant\n * @type {Color}\n */\nColor.TRANSPARENT = Object.freeze(new Color(0, 0, 0, 0));\nexport default Color;\n","import Color from \"./Color.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Value and type information for per-instance geometry color.\n *\n * @alias ColorGeometryInstanceAttribute\n * @constructor\n *\n * @param {number} [red=1.0] The red component.\n * @param {number} [green=1.0] The green component.\n * @param {number} [blue=1.0] The blue component.\n * @param {number} [alpha=1.0] The alpha component.\n *\n *\n * @example\n * const instance = new Cesium.GeometryInstance({\n *   geometry : Cesium.BoxGeometry.fromDimensions({\n *     dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0)\n *   }),\n *   modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *     Cesium.Cartesian3.fromDegrees(0.0, 0.0)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n *   id : 'box',\n *   attributes : {\n *     color : new Cesium.ColorGeometryInstanceAttribute(red, green, blue, alpha)\n *   }\n * });\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction ColorGeometryInstanceAttribute(red, green, blue, alpha) {\n  red = red ?? 1.0;\n  green = green ?? 1.0;\n  blue = blue ?? 1.0;\n  alpha = alpha ?? 1.0;\n\n  /**\n   * The values for the attributes stored in a typed array.\n   *\n   * @type Uint8Array\n   *\n   * @default [255, 255, 255, 255]\n   */\n  this.value = new Uint8Array([\n    Color.floatToByte(red),\n    Color.floatToByte(green),\n    Color.floatToByte(blue),\n    Color.floatToByte(alpha),\n  ]);\n}\n\nObject.defineProperties(ColorGeometryInstanceAttribute.prototype, {\n  /**\n   * The datatype of each component in the attribute, e.g., individual elements in\n   * {@link ColorGeometryInstanceAttribute#value}.\n   *\n   * @memberof ColorGeometryInstanceAttribute.prototype\n   *\n   * @type {ComponentDatatype}\n   * @readonly\n   *\n   * @default {@link ComponentDatatype.UNSIGNED_BYTE}\n   */\n  componentDatatype: {\n    get: function () {\n      return ComponentDatatype.UNSIGNED_BYTE;\n    },\n  },\n\n  /**\n   * The number of components in the attributes, i.e., {@link ColorGeometryInstanceAttribute#value}.\n   *\n   * @memberof ColorGeometryInstanceAttribute.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @default 4\n   */\n  componentsPerAttribute: {\n    get: function () {\n      return 4;\n    },\n  },\n\n  /**\n   * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n   * indicate that the components should be mapped to the range [0, 1] (unsigned)\n   * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n   *\n   * @memberof ColorGeometryInstanceAttribute.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  normalize: {\n    get: function () {\n      return true;\n    },\n  },\n});\n\n/**\n * Creates a new {@link ColorGeometryInstanceAttribute} instance given the provided {@link Color}.\n *\n * @param {Color} color The color.\n * @returns {ColorGeometryInstanceAttribute} The new {@link ColorGeometryInstanceAttribute} instance.\n *\n * @example\n * const instance = new Cesium.GeometryInstance({\n *   geometry : geometry,\n *   attributes : {\n *     color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.CORNFLOWERBLUE),\n *   }\n * });\n */\nColorGeometryInstanceAttribute.fromColor = function (color) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(color)) {\n    throw new DeveloperError(\"color is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return new ColorGeometryInstanceAttribute(\n    color.red,\n    color.green,\n    color.blue,\n    color.alpha,\n  );\n};\n\n/**\n * Converts a color to a typed array that can be used to assign a color attribute.\n *\n * @param {Color} color The color.\n * @param {Uint8Array} [result] The array to store the result in, if undefined a new instance will be created.\n *\n * @returns {Uint8Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA, attributes.color);\n */\nColorGeometryInstanceAttribute.toValue = function (color, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(color)) {\n    throw new DeveloperError(\"color is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Uint8Array(color.toBytes());\n  }\n  return color.toBytes(result);\n};\n\n/**\n * Compares the provided ColorGeometryInstanceAttributes and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {ColorGeometryInstanceAttribute} [left] The first ColorGeometryInstanceAttribute.\n * @param {ColorGeometryInstanceAttribute} [right] The second ColorGeometryInstanceAttribute.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nColorGeometryInstanceAttribute.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.value[0] === right.value[0] &&\n      left.value[1] === right.value[1] &&\n      left.value[2] === right.value[2] &&\n      left.value[3] === right.value[3])\n  );\n};\nexport default ColorGeometryInstanceAttribute;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * WebGL component datatypes.  Components are intrinsics,\n * which form attributes, which form vertices.\n *\n * @enum {number}\n */\nconst ComponentDatatype = {\n  /**\n   * 8-bit signed byte corresponding to <code>gl.BYTE</code> and the type\n   * of an element in <code>Int8Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  BYTE: WebGLConstants.BYTE,\n\n  /**\n   * 8-bit unsigned byte corresponding to <code>UNSIGNED_BYTE</code> and the type\n   * of an element in <code>Uint8Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\n\n  /**\n   * 16-bit signed short corresponding to <code>SHORT</code> and the type\n   * of an element in <code>Int16Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  SHORT: WebGLConstants.SHORT,\n\n  /**\n   * 16-bit unsigned short corresponding to <code>UNSIGNED_SHORT</code> and the type\n   * of an element in <code>Uint16Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\n\n  /**\n   * 32-bit signed int corresponding to <code>INT</code> and the type\n   * of an element in <code>Int32Array</code>.\n   *\n   * @memberOf ComponentDatatype\n   *\n   * @type {number}\n   * @constant\n   */\n  INT: WebGLConstants.INT,\n\n  /**\n   * 32-bit unsigned int corresponding to <code>UNSIGNED_INT</code> and the type\n   * of an element in <code>Uint32Array</code>.\n   *\n   * @memberOf ComponentDatatype\n   *\n   * @type {number}\n   * @constant\n   */\n  UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\n\n  /**\n   * 32-bit floating-point corresponding to <code>FLOAT</code> and the type\n   * of an element in <code>Float32Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  FLOAT: WebGLConstants.FLOAT,\n\n  /**\n   * 64-bit floating-point corresponding to <code>gl.DOUBLE</code> (in Desktop OpenGL;\n   * this is not supported in WebGL, and is emulated in Cesium via {@link GeometryPipeline.encodeAttribute})\n   * and the type of an element in <code>Float64Array</code>.\n   *\n   * @memberOf ComponentDatatype\n   *\n   * @type {number}\n   * @constant\n   * @default 0x140A\n   */\n  DOUBLE: WebGLConstants.DOUBLE,\n};\n\n/**\n * Returns the size, in bytes, of the corresponding datatype.\n *\n * @param {ComponentDatatype} componentDatatype The component datatype to get the size of.\n * @returns {number} The size in bytes.\n *\n * @exception {DeveloperError} componentDatatype is not a valid value.\n *\n * @example\n * // Returns Int8Array.BYTES_PER_ELEMENT\n * const size = Cesium.ComponentDatatype.getSizeInBytes(Cesium.ComponentDatatype.BYTE);\n */\nComponentDatatype.getSizeInBytes = function (componentDatatype) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(componentDatatype)) {\n    throw new DeveloperError(\"value is required.\");\n  }\n  //>>includeEnd('debug');\n\n  switch (componentDatatype) {\n    case ComponentDatatype.BYTE:\n      return Int8Array.BYTES_PER_ELEMENT;\n    case ComponentDatatype.UNSIGNED_BYTE:\n      return Uint8Array.BYTES_PER_ELEMENT;\n    case ComponentDatatype.SHORT:\n      return Int16Array.BYTES_PER_ELEMENT;\n    case ComponentDatatype.UNSIGNED_SHORT:\n      return Uint16Array.BYTES_PER_ELEMENT;\n    case ComponentDatatype.INT:\n      return Int32Array.BYTES_PER_ELEMENT;\n    case ComponentDatatype.UNSIGNED_INT:\n      return Uint32Array.BYTES_PER_ELEMENT;\n    case ComponentDatatype.FLOAT:\n      return Float32Array.BYTES_PER_ELEMENT;\n    case ComponentDatatype.DOUBLE:\n      return Float64Array.BYTES_PER_ELEMENT;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"componentDatatype is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Gets the {@link ComponentDatatype} for the provided TypedArray instance.\n *\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} array The typed array.\n * @returns {ComponentDatatype} The ComponentDatatype for the provided array, or undefined if the array is not a TypedArray.\n */\nComponentDatatype.fromTypedArray = function (array) {\n  if (array instanceof Int8Array) {\n    return ComponentDatatype.BYTE;\n  }\n  if (array instanceof Uint8Array) {\n    return ComponentDatatype.UNSIGNED_BYTE;\n  }\n  if (array instanceof Int16Array) {\n    return ComponentDatatype.SHORT;\n  }\n  if (array instanceof Uint16Array) {\n    return ComponentDatatype.UNSIGNED_SHORT;\n  }\n  if (array instanceof Int32Array) {\n    return ComponentDatatype.INT;\n  }\n  if (array instanceof Uint32Array) {\n    return ComponentDatatype.UNSIGNED_INT;\n  }\n  if (array instanceof Float32Array) {\n    return ComponentDatatype.FLOAT;\n  }\n  if (array instanceof Float64Array) {\n    return ComponentDatatype.DOUBLE;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"array must be an Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, or Float64Array.\",\n  );\n  //>>includeEnd('debug');\n};\n\n/**\n * Validates that the provided component datatype is a valid {@link ComponentDatatype}\n *\n * @param {ComponentDatatype} componentDatatype The component datatype to validate.\n * @returns {boolean} <code>true</code> if the provided component datatype is a valid value; otherwise, <code>false</code>.\n *\n * @example\n * if (!Cesium.ComponentDatatype.validate(componentDatatype)) {\n *   throw new Cesium.DeveloperError('componentDatatype must be a valid value.');\n * }\n */\nComponentDatatype.validate = function (componentDatatype) {\n  return (\n    defined(componentDatatype) &&\n    (componentDatatype === ComponentDatatype.BYTE ||\n      componentDatatype === ComponentDatatype.UNSIGNED_BYTE ||\n      componentDatatype === ComponentDatatype.SHORT ||\n      componentDatatype === ComponentDatatype.UNSIGNED_SHORT ||\n      componentDatatype === ComponentDatatype.INT ||\n      componentDatatype === ComponentDatatype.UNSIGNED_INT ||\n      componentDatatype === ComponentDatatype.FLOAT ||\n      componentDatatype === ComponentDatatype.DOUBLE)\n  );\n};\n\n/**\n * Creates a typed array corresponding to component data type.\n *\n * @param {ComponentDatatype} componentDatatype The component data type.\n * @param {number|Array} valuesOrLength The length of the array to create or an array.\n * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array.\n *\n * @exception {DeveloperError} componentDatatype is not a valid value.\n *\n * @example\n * // creates a Float32Array with length of 100\n * const typedArray = Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, 100);\n */\nComponentDatatype.createTypedArray = function (\n  componentDatatype,\n  valuesOrLength,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(componentDatatype)) {\n    throw new DeveloperError(\"componentDatatype is required.\");\n  }\n  if (!defined(valuesOrLength)) {\n    throw new DeveloperError(\"valuesOrLength is required.\");\n  }\n  //>>includeEnd('debug');\n\n  switch (componentDatatype) {\n    case ComponentDatatype.BYTE:\n      return new Int8Array(valuesOrLength);\n    case ComponentDatatype.UNSIGNED_BYTE:\n      return new Uint8Array(valuesOrLength);\n    case ComponentDatatype.SHORT:\n      return new Int16Array(valuesOrLength);\n    case ComponentDatatype.UNSIGNED_SHORT:\n      return new Uint16Array(valuesOrLength);\n    case ComponentDatatype.INT:\n      return new Int32Array(valuesOrLength);\n    case ComponentDatatype.UNSIGNED_INT:\n      return new Uint32Array(valuesOrLength);\n    case ComponentDatatype.FLOAT:\n      return new Float32Array(valuesOrLength);\n    case ComponentDatatype.DOUBLE:\n      return new Float64Array(valuesOrLength);\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"componentDatatype is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Creates a typed view of an array of bytes.\n *\n * @param {ComponentDatatype} componentDatatype The type of the view to create.\n * @param {ArrayBuffer} buffer The buffer storage to use for the view.\n * @param {number} [byteOffset] The offset, in bytes, to the first element in the view.\n * @param {number} [length] The number of elements in the view.\n * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array view of the buffer.\n *\n * @exception {DeveloperError} componentDatatype is not a valid value.\n */\nComponentDatatype.createArrayBufferView = function (\n  componentDatatype,\n  buffer,\n  byteOffset,\n  length,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(componentDatatype)) {\n    throw new DeveloperError(\"componentDatatype is required.\");\n  }\n  if (!defined(buffer)) {\n    throw new DeveloperError(\"buffer is required.\");\n  }\n  //>>includeEnd('debug');\n\n  byteOffset = byteOffset ?? 0;\n  length =\n    length ??\n    (buffer.byteLength - byteOffset) /\n      ComponentDatatype.getSizeInBytes(componentDatatype);\n\n  switch (componentDatatype) {\n    case ComponentDatatype.BYTE:\n      return new Int8Array(buffer, byteOffset, length);\n    case ComponentDatatype.UNSIGNED_BYTE:\n      return new Uint8Array(buffer, byteOffset, length);\n    case ComponentDatatype.SHORT:\n      return new Int16Array(buffer, byteOffset, length);\n    case ComponentDatatype.UNSIGNED_SHORT:\n      return new Uint16Array(buffer, byteOffset, length);\n    case ComponentDatatype.INT:\n      return new Int32Array(buffer, byteOffset, length);\n    case ComponentDatatype.UNSIGNED_INT:\n      return new Uint32Array(buffer, byteOffset, length);\n    case ComponentDatatype.FLOAT:\n      return new Float32Array(buffer, byteOffset, length);\n    case ComponentDatatype.DOUBLE:\n      return new Float64Array(buffer, byteOffset, length);\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"componentDatatype is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Get the ComponentDatatype from its name.\n *\n * @param {string} name The name of the ComponentDatatype.\n * @returns {ComponentDatatype} The ComponentDatatype.\n *\n * @exception {DeveloperError} name is not a valid value.\n */\nComponentDatatype.fromName = function (name) {\n  switch (name) {\n    case \"BYTE\":\n      return ComponentDatatype.BYTE;\n    case \"UNSIGNED_BYTE\":\n      return ComponentDatatype.UNSIGNED_BYTE;\n    case \"SHORT\":\n      return ComponentDatatype.SHORT;\n    case \"UNSIGNED_SHORT\":\n      return ComponentDatatype.UNSIGNED_SHORT;\n    case \"INT\":\n      return ComponentDatatype.INT;\n    case \"UNSIGNED_INT\":\n      return ComponentDatatype.UNSIGNED_INT;\n    case \"FLOAT\":\n      return ComponentDatatype.FLOAT;\n    case \"DOUBLE\":\n      return ComponentDatatype.DOUBLE;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"name is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\nexport default Object.freeze(ComponentDatatype);\n","import defined from \"./defined.js\";\n\n/**\n * Describes a compressed texture and contains a compressed texture buffer.\n * @alias CompressedTextureBuffer\n * @constructor\n *\n * @param {PixelFormat} internalFormat The pixel format of the compressed texture.\n * @param {PixelDatatype} pixelDatatype The pixel datatype of the compressed texture.\n * @param {number} width The width of the texture.\n * @param {number} height The height of the texture.\n * @param {Uint8Array} buffer The compressed texture buffer.\n */\nfunction CompressedTextureBuffer(\n  internalFormat,\n  pixelDatatype,\n  width,\n  height,\n  buffer,\n) {\n  this._format = internalFormat;\n  this._datatype = pixelDatatype;\n  this._width = width;\n  this._height = height;\n  this._buffer = buffer;\n}\n\nObject.defineProperties(CompressedTextureBuffer.prototype, {\n  /**\n   * The format of the compressed texture.\n   * @type {PixelFormat}\n   * @readonly\n   * @memberof CompressedTextureBuffer.prototype\n   */\n  internalFormat: {\n    get: function () {\n      return this._format;\n    },\n  },\n  /**\n   * The datatype of the compressed texture.\n   * @type {PixelDatatype}\n   * @readonly\n   * @memberof CompressedTextureBuffer.prototype\n   */\n  pixelDatatype: {\n    get: function () {\n      return this._datatype;\n    },\n  },\n  /**\n   * The width of the texture.\n   * @type {number}\n   * @readonly\n   * @memberof CompressedTextureBuffer.prototype\n   */\n  width: {\n    get: function () {\n      return this._width;\n    },\n  },\n  /**\n   * The height of the texture.\n   * @type {number}\n   * @readonly\n   * @memberof CompressedTextureBuffer.prototype\n   */\n  height: {\n    get: function () {\n      return this._height;\n    },\n  },\n  /**\n   * The compressed texture buffer.\n   * @type {Uint8Array}\n   * @readonly\n   * @memberof CompressedTextureBuffer.prototype\n   */\n  bufferView: {\n    get: function () {\n      return this._buffer;\n    },\n  },\n  /**\n   * The compressed texture buffer. Alias for bufferView.\n   * @type {Uint8Array}\n   * @readonly\n   * @memberof CompressedTextureBuffer.prototype\n   */\n  arrayBufferView: {\n    get: function () {\n      return this._buffer;\n    },\n  },\n});\n\n/**\n * Creates a shallow clone of a compressed texture buffer.\n *\n * @param {CompressedTextureBuffer} object The compressed texture buffer to be cloned.\n * @return {CompressedTextureBuffer} A shallow clone of the compressed texture buffer.\n */\nCompressedTextureBuffer.clone = function (object) {\n  if (!defined(object)) {\n    return undefined;\n  }\n\n  return new CompressedTextureBuffer(\n    object._format,\n    object._datatype,\n    object._width,\n    object._height,\n    object._buffer,\n  );\n};\n\n/**\n * Creates a shallow clone of this compressed texture buffer.\n *\n * @return {CompressedTextureBuffer} A shallow clone of the compressed texture buffer.\n */\nCompressedTextureBuffer.prototype.clone = function () {\n  return CompressedTextureBuffer.clone(this);\n};\nexport default CompressedTextureBuffer;\n","import Check from \"./Check.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Spline from \"./Spline.js\";\n\n/**\n * A spline that evaluates to a constant value. Although this follows the {@link Spline} interface,\n * it does not maintain an internal array of times since its value never changes.\n *\n * @alias ConstantSpline\n * @constructor\n *\n * @param {number|Cartesian3|Quaternion} value The constant value that the spline evaluates to.\n *\n * @example\n * const position = new Cesium.Cartesian3(1.0, 2.0, 3.0);\n * const spline = new Cesium.ConstantSpline(position);\n *\n * const p0 = spline.evaluate(0.0);\n *\n * @see LinearSpline\n * @see HermiteSpline\n * @see CatmullRomSpline\n * @see QuaternionSpline\n * @see MorphWeightSpline\n */\nfunction ConstantSpline(value) {\n  this._value = value;\n  this._valueType = Spline.getPointType(value);\n}\n\nObject.defineProperties(ConstantSpline.prototype, {\n  /**\n   * The constant value that the spline evaluates to.\n   *\n   * @memberof ConstantSpline.prototype\n   *\n   * @type {number|Cartesian3|Quaternion}\n   * @readonly\n   */\n  value: {\n    get: function () {\n      return this._value;\n    },\n  },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n *\n * Since a constant spline has no internal times array, this will throw an error.\n * @function\n *\n * @param {number} time The time.\n *\n * @exception {DeveloperError} findTimeInterval cannot be called on a ConstantSpline.\n */\nConstantSpline.prototype.findTimeInterval = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"findTimeInterval cannot be called on a ConstantSpline.\",\n  );\n  //>>includeEnd('debug');\n};\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around to the updated animation.\n */\nConstantSpline.prototype.wrapTime = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"time\", time);\n  //>>includeEnd('debug');\n\n  return 0.0;\n};\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nConstantSpline.prototype.clampTime = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"time\", time);\n  //>>includeEnd('debug');\n\n  return 0.0;\n};\n\n/**\n * Evaluates the curve at a given time.\n * @function\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {Cartesian3|Quaternion} [result] The object onto which to store the result.\n * @returns {number|Cartesian3|Quaternion} The modified result parameter or the value that the constant spline represents.\n */\nConstantSpline.prototype.evaluate = function (time, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"time\", time);\n  //>>includeEnd('debug');\n\n  const value = this._value;\n  const ValueType = this._valueType;\n\n  if (ValueType === Number) {\n    return value;\n  }\n\n  return ValueType.clone(value, result);\n};\n\nexport default ConstantSpline;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CoplanarPolygonGeometryLibrary from \"./CoplanarPolygonGeometryLibrary.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst scratchPosition = new Cartesian3();\nconst scratchBR = new BoundingRectangle();\nconst stScratch = new Cartesian2();\nconst textureCoordinatesOrigin = new Cartesian2();\nconst scratchNormal = new Cartesian3();\nconst scratchTangent = new Cartesian3();\nconst scratchBitangent = new Cartesian3();\nconst centerScratch = new Cartesian3();\nconst axis1Scratch = new Cartesian3();\nconst axis2Scratch = new Cartesian3();\nconst quaternionScratch = new Quaternion();\nconst textureMatrixScratch = new Matrix3();\nconst tangentRotationScratch = new Matrix3();\nconst surfaceNormalScratch = new Cartesian3();\n\nfunction createGeometryFromPolygon(\n  polygon,\n  vertexFormat,\n  boundingRectangle,\n  stRotation,\n  hardcodedTextureCoordinates,\n  projectPointTo2D,\n  normal,\n  tangent,\n  bitangent,\n) {\n  const positions = polygon.positions;\n  let indices = PolygonPipeline.triangulate(polygon.positions2D, polygon.holes);\n\n  /* If polygon is completely unrenderable, just use the first three vertices */\n  if (indices.length < 3) {\n    indices = [0, 1, 2];\n  }\n\n  const newIndices = IndexDatatype.createTypedArray(\n    positions.length,\n    indices.length,\n  );\n  newIndices.set(indices);\n\n  let textureMatrix = textureMatrixScratch;\n  if (stRotation !== 0.0) {\n    let rotation = Quaternion.fromAxisAngle(\n      normal,\n      stRotation,\n      quaternionScratch,\n    );\n    textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\n\n    if (vertexFormat.tangent || vertexFormat.bitangent) {\n      rotation = Quaternion.fromAxisAngle(\n        normal,\n        -stRotation,\n        quaternionScratch,\n      );\n      const tangentRotation = Matrix3.fromQuaternion(\n        rotation,\n        tangentRotationScratch,\n      );\n\n      tangent = Cartesian3.normalize(\n        Matrix3.multiplyByVector(tangentRotation, tangent, tangent),\n        tangent,\n      );\n      if (vertexFormat.bitangent) {\n        bitangent = Cartesian3.normalize(\n          Cartesian3.cross(normal, tangent, bitangent),\n          bitangent,\n        );\n      }\n    }\n  } else {\n    textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\n  }\n\n  const stOrigin = textureCoordinatesOrigin;\n  if (vertexFormat.st) {\n    stOrigin.x = boundingRectangle.x;\n    stOrigin.y = boundingRectangle.y;\n  }\n\n  const length = positions.length;\n  const size = length * 3;\n  const flatPositions = new Float64Array(size);\n  const normals = vertexFormat.normal ? new Float32Array(size) : undefined;\n  const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(size)\n    : undefined;\n  const textureCoordinates = vertexFormat.st\n    ? new Float32Array(length * 2)\n    : undefined;\n\n  let positionIndex = 0;\n  let normalIndex = 0;\n  let bitangentIndex = 0;\n  let tangentIndex = 0;\n  let stIndex = 0;\n\n  for (let i = 0; i < length; i++) {\n    const position = positions[i];\n    flatPositions[positionIndex++] = position.x;\n    flatPositions[positionIndex++] = position.y;\n    flatPositions[positionIndex++] = position.z;\n\n    if (vertexFormat.st) {\n      if (\n        defined(hardcodedTextureCoordinates) &&\n        hardcodedTextureCoordinates.positions.length === length\n      ) {\n        textureCoordinates[stIndex++] =\n          hardcodedTextureCoordinates.positions[i].x;\n        textureCoordinates[stIndex++] =\n          hardcodedTextureCoordinates.positions[i].y;\n      } else {\n        const p = Matrix3.multiplyByVector(\n          textureMatrix,\n          position,\n          scratchPosition,\n        );\n        const st = projectPointTo2D(p, stScratch);\n        Cartesian2.subtract(st, stOrigin, st);\n\n        const stx = CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1);\n        const sty = CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1);\n        textureCoordinates[stIndex++] = stx;\n        textureCoordinates[stIndex++] = sty;\n      }\n    }\n\n    if (vertexFormat.normal) {\n      normals[normalIndex++] = normal.x;\n      normals[normalIndex++] = normal.y;\n      normals[normalIndex++] = normal.z;\n    }\n\n    if (vertexFormat.tangent) {\n      tangents[tangentIndex++] = tangent.x;\n      tangents[tangentIndex++] = tangent.y;\n      tangents[tangentIndex++] = tangent.z;\n    }\n\n    if (vertexFormat.bitangent) {\n      bitangents[bitangentIndex++] = bitangent.x;\n      bitangents[bitangentIndex++] = bitangent.y;\n      bitangents[bitangentIndex++] = bitangent.z;\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n\n  if (vertexFormat.position) {\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: flatPositions,\n    });\n  }\n\n  if (vertexFormat.normal) {\n    attributes.normal = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: normals,\n    });\n  }\n\n  if (vertexFormat.tangent) {\n    attributes.tangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: tangents,\n    });\n  }\n\n  if (vertexFormat.bitangent) {\n    attributes.bitangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: bitangents,\n    });\n  }\n\n  if (vertexFormat.st) {\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: textureCoordinates,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: newIndices,\n    primitiveType: PrimitiveType.TRIANGLES,\n  });\n}\n\n/**\n * A description of a polygon composed of arbitrary coplanar positions.\n *\n * @alias CoplanarPolygonGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n * @param {number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points.\n *\n * @example\n * const polygonGeometry = new Cesium.CoplanarPolygonGeometry({\n *  polygonHierarchy: new Cesium.PolygonHierarchy(\n *     Cesium.Cartesian3.fromDegreesArrayHeights([\n *      -90.0, 30.0, 0.0,\n *      -90.0, 30.0, 300000.0,\n *      -80.0, 30.0, 300000.0,\n *      -80.0, 30.0, 0.0\n *   ]))\n * });\n *\n */\nfunction CoplanarPolygonGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const polygonHierarchy = options.polygonHierarchy;\n  const textureCoordinates = options.textureCoordinates;\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.polygonHierarchy\", polygonHierarchy);\n  //>>includeEnd('debug');\n\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n  this._vertexFormat = VertexFormat.clone(vertexFormat);\n  this._polygonHierarchy = polygonHierarchy;\n  this._stRotation = options.stRotation ?? 0.0;\n  this._ellipsoid = Ellipsoid.clone(options.ellipsoid ?? Ellipsoid.default);\n  this._workerName = \"createCoplanarPolygonGeometry\";\n  this._textureCoordinates = textureCoordinates;\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    PolygonGeometryLibrary.computeHierarchyPackedLength(\n      polygonHierarchy,\n      Cartesian3,\n    ) +\n    VertexFormat.packedLength +\n    Ellipsoid.packedLength +\n    (defined(textureCoordinates)\n      ? PolygonGeometryLibrary.computeHierarchyPackedLength(\n          textureCoordinates,\n          Cartesian2,\n        )\n      : 1) +\n    2;\n}\n\n/**\n * A description of a coplanar polygon from an array of positions.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points.\n * @returns {CoplanarPolygonGeometry}\n *\n * @example\n * // create a polygon from points\n * const polygon = Cesium.CoplanarPolygonGeometry.fromPositions({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     -72.0, 40.0,\n *     -70.0, 35.0,\n *     -75.0, 30.0,\n *     -70.0, 30.0,\n *     -68.0, 40.0\n *   ])\n * });\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygon);\n *\n * @see PolygonGeometry#createGeometry\n */\nCoplanarPolygonGeometry.fromPositions = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.positions\", options.positions);\n  //>>includeEnd('debug');\n\n  const newOptions = {\n    polygonHierarchy: {\n      positions: options.positions,\n    },\n    vertexFormat: options.vertexFormat,\n    stRotation: options.stRotation,\n    ellipsoid: options.ellipsoid,\n    textureCoordinates: options.textureCoordinates,\n  };\n  return new CoplanarPolygonGeometry(newOptions);\n};\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CoplanarPolygonGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCoplanarPolygonGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n    value._polygonHierarchy,\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._stRotation;\n  if (defined(value._textureCoordinates)) {\n    startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n      value._textureCoordinates,\n      array,\n      startingIndex,\n      Cartesian2,\n    );\n  } else {\n    array[startingIndex++] = -1.0;\n  }\n  array[startingIndex++] = value.packedLength;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  polygonHierarchy: {},\n};\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CoplanarPolygonGeometry} [result] The object into which to store the result.\n * @returns {CoplanarPolygonGeometry} The modified result parameter or a new CoplanarPolygonGeometry instance if one was not provided.\n */\nCoplanarPolygonGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n  startingIndex = polygonHierarchy.startingIndex;\n  delete polygonHierarchy.startingIndex;\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const stRotation = array[startingIndex++];\n  const textureCoordinates =\n    array[startingIndex] === -1.0\n      ? undefined\n      : PolygonGeometryLibrary.unpackPolygonHierarchy(\n          array,\n          startingIndex,\n          Cartesian2,\n        );\n  if (defined(textureCoordinates)) {\n    startingIndex = textureCoordinates.startingIndex;\n    delete textureCoordinates.startingIndex;\n  } else {\n    startingIndex++;\n  }\n  const packedLength = array[startingIndex++];\n\n  if (!defined(result)) {\n    result = new CoplanarPolygonGeometry(scratchOptions);\n  }\n\n  result._polygonHierarchy = polygonHierarchy;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._stRotation = stRotation;\n  result._textureCoordinates = textureCoordinates;\n  result.packedLength = packedLength;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere.\n *\n * @param {CoplanarPolygonGeometry} polygonGeometry A description of the polygon.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCoplanarPolygonGeometry.createGeometry = function (polygonGeometry) {\n  const vertexFormat = polygonGeometry._vertexFormat;\n  const polygonHierarchy = polygonGeometry._polygonHierarchy;\n  const stRotation = polygonGeometry._stRotation;\n  const textureCoordinates = polygonGeometry._textureCoordinates;\n  const hasTextureCoordinates = defined(textureCoordinates);\n\n  let outerPositions = polygonHierarchy.positions;\n  outerPositions = arrayRemoveDuplicates(\n    outerPositions,\n    Cartesian3.equalsEpsilon,\n    true,\n  );\n  if (outerPositions.length < 3) {\n    return;\n  }\n\n  let normal = scratchNormal;\n  let tangent = scratchTangent;\n  let bitangent = scratchBitangent;\n  let axis1 = axis1Scratch;\n  const axis2 = axis2Scratch;\n\n  const validGeometry =\n    CoplanarPolygonGeometryLibrary.computeProjectTo2DArguments(\n      outerPositions,\n      centerScratch,\n      axis1,\n      axis2,\n    );\n  if (!validGeometry) {\n    return undefined;\n  }\n\n  normal = Cartesian3.cross(axis1, axis2, normal);\n  normal = Cartesian3.normalize(normal, normal);\n\n  if (\n    !Cartesian3.equalsEpsilon(\n      centerScratch,\n      Cartesian3.ZERO,\n      CesiumMath.EPSILON6,\n    )\n  ) {\n    const surfaceNormal = polygonGeometry._ellipsoid.geodeticSurfaceNormal(\n      centerScratch,\n      surfaceNormalScratch,\n    );\n    if (Cartesian3.dot(normal, surfaceNormal) < 0) {\n      normal = Cartesian3.negate(normal, normal);\n      axis1 = Cartesian3.negate(axis1, axis1);\n    }\n  }\n\n  const projectPoints =\n    CoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction(\n      centerScratch,\n      axis1,\n      axis2,\n    );\n  const projectPoint =\n    CoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction(\n      centerScratch,\n      axis1,\n      axis2,\n    );\n\n  if (vertexFormat.tangent) {\n    tangent = Cartesian3.clone(axis1, tangent);\n  }\n  if (vertexFormat.bitangent) {\n    bitangent = Cartesian3.clone(axis2, bitangent);\n  }\n\n  const results = PolygonGeometryLibrary.polygonsFromHierarchy(\n    polygonHierarchy,\n    hasTextureCoordinates,\n    projectPoints,\n    false,\n  );\n  const hierarchy = results.hierarchy;\n  const polygons = results.polygons;\n\n  const dummyFunction = function (identity) {\n    return identity;\n  };\n\n  const textureCoordinatePolygons = hasTextureCoordinates\n    ? PolygonGeometryLibrary.polygonsFromHierarchy(\n        textureCoordinates,\n        true,\n        dummyFunction,\n        false,\n      ).polygons\n    : undefined;\n\n  if (hierarchy.length === 0) {\n    return;\n  }\n  outerPositions = hierarchy[0].outerRing;\n\n  const boundingSphere = BoundingSphere.fromPoints(outerPositions);\n  const boundingRectangle = PolygonGeometryLibrary.computeBoundingRectangle(\n    normal,\n    projectPoint,\n    outerPositions,\n    stRotation,\n    scratchBR,\n  );\n\n  const geometries = [];\n  for (let i = 0; i < polygons.length; i++) {\n    const geometryInstance = new GeometryInstance({\n      geometry: createGeometryFromPolygon(\n        polygons[i],\n        vertexFormat,\n        boundingRectangle,\n        stRotation,\n        hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined,\n        projectPoint,\n        normal,\n        tangent,\n        bitangent,\n      ),\n    });\n\n    geometries.push(geometryInstance);\n  }\n\n  const geometry = GeometryPipeline.combineInstances(geometries)[0];\n  geometry.attributes.position.values = new Float64Array(\n    geometry.attributes.position.values,\n  );\n  geometry.indices = IndexDatatype.createTypedArray(\n    geometry.attributes.position.values.length / 3,\n    geometry.indices,\n  );\n\n  const attributes = geometry.attributes;\n  if (!vertexFormat.position) {\n    delete attributes.position;\n  }\n  return new Geometry({\n    attributes: attributes,\n    indices: geometry.indices,\n    primitiveType: geometry.primitiveType,\n    boundingSphere: boundingSphere,\n  });\n};\nexport default CoplanarPolygonGeometry;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\n\n/**\n * @private\n */\nconst CoplanarPolygonGeometryLibrary = {};\n\nconst scratchIntersectionPoint = new Cartesian3();\nconst scratchXAxis = new Cartesian3();\nconst scratchYAxis = new Cartesian3();\nconst scratchZAxis = new Cartesian3();\nconst obbScratch = new OrientedBoundingBox();\n\nCoplanarPolygonGeometryLibrary.validOutline = function (positions) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"positions\", positions);\n  //>>includeEnd('debug');\n\n  const orientedBoundingBox = OrientedBoundingBox.fromPoints(\n    positions,\n    obbScratch,\n  );\n  const halfAxes = orientedBoundingBox.halfAxes;\n  const xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\n  const yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\n  const zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\n\n  const xMag = Cartesian3.magnitude(xAxis);\n  const yMag = Cartesian3.magnitude(yAxis);\n  const zMag = Cartesian3.magnitude(zAxis);\n\n  // If all the points are on a line return undefined because we can't draw a polygon\n  return !(\n    (xMag === 0 && (yMag === 0 || zMag === 0)) ||\n    (yMag === 0 && zMag === 0)\n  );\n};\n\n// call after removeDuplicates\nCoplanarPolygonGeometryLibrary.computeProjectTo2DArguments = function (\n  positions,\n  centerResult,\n  planeAxis1Result,\n  planeAxis2Result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"positions\", positions);\n  Check.defined(\"centerResult\", centerResult);\n  Check.defined(\"planeAxis1Result\", planeAxis1Result);\n  Check.defined(\"planeAxis2Result\", planeAxis2Result);\n  //>>includeEnd('debug');\n\n  const orientedBoundingBox = OrientedBoundingBox.fromPoints(\n    positions,\n    obbScratch,\n  );\n  const halfAxes = orientedBoundingBox.halfAxes;\n  const xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\n  const yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\n  const zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\n\n  const xMag = Cartesian3.magnitude(xAxis);\n  const yMag = Cartesian3.magnitude(yAxis);\n  const zMag = Cartesian3.magnitude(zAxis);\n  const min = Math.min(xMag, yMag, zMag);\n\n  // If all the points are on a line return undefined because we can't draw a polygon\n  if (\n    (xMag === 0 && (yMag === 0 || zMag === 0)) ||\n    (yMag === 0 && zMag === 0)\n  ) {\n    return false;\n  }\n\n  let planeAxis1;\n  let planeAxis2;\n\n  if (min === yMag || min === zMag) {\n    planeAxis1 = xAxis;\n  }\n  if (min === xMag) {\n    planeAxis1 = yAxis;\n  } else if (min === zMag) {\n    planeAxis2 = yAxis;\n  }\n  if (min === xMag || min === yMag) {\n    planeAxis2 = zAxis;\n  }\n\n  Cartesian3.normalize(planeAxis1, planeAxis1Result);\n  Cartesian3.normalize(planeAxis2, planeAxis2Result);\n  Cartesian3.clone(orientedBoundingBox.center, centerResult);\n  return true;\n};\n\nfunction projectTo2D(position, center, axis1, axis2, result) {\n  const v = Cartesian3.subtract(position, center, scratchIntersectionPoint);\n  const x = Cartesian3.dot(axis1, v);\n  const y = Cartesian3.dot(axis2, v);\n\n  return Cartesian2.fromElements(x, y, result);\n}\n\nCoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction = function (\n  center,\n  axis1,\n  axis2,\n) {\n  return function (positions) {\n    const positionResults = new Array(positions.length);\n    for (let i = 0; i < positions.length; i++) {\n      positionResults[i] = projectTo2D(positions[i], center, axis1, axis2);\n    }\n\n    return positionResults;\n  };\n};\n\nCoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction = function (\n  center,\n  axis1,\n  axis2,\n) {\n  return function (position, result) {\n    return projectTo2D(position, center, axis1, axis2, result);\n  };\n};\nexport default CoplanarPolygonGeometryLibrary;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CoplanarPolygonGeometryLibrary from \"./CoplanarPolygonGeometryLibrary.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nfunction createGeometryFromPositions(positions) {\n  const length = positions.length;\n  const flatPositions = new Float64Array(length * 3);\n  const indices = IndexDatatype.createTypedArray(length, length * 2);\n\n  let positionIndex = 0;\n  let index = 0;\n\n  for (let i = 0; i < length; i++) {\n    const position = positions[i];\n    flatPositions[positionIndex++] = position.x;\n    flatPositions[positionIndex++] = position.y;\n    flatPositions[positionIndex++] = position.z;\n\n    indices[index++] = i;\n    indices[index++] = (i + 1) % length;\n  }\n\n  const attributes = new GeometryAttributes({\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: flatPositions,\n    }),\n  });\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n  });\n}\n\n/**\n * A description of the outline of a polygon composed of arbitrary coplanar positions.\n *\n * @alias CoplanarPolygonOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n *\n * @see CoplanarPolygonOutlineGeometry.createGeometry\n *\n * @example\n * const polygonOutline = new Cesium.CoplanarPolygonOutlineGeometry({\n *   positions : Cesium.Cartesian3.fromDegreesArrayHeights([\n *      -90.0, 30.0, 0.0,\n *      -90.0, 30.0, 1000.0,\n *      -80.0, 30.0, 1000.0,\n *      -80.0, 30.0, 0.0\n *   ])\n * });\n * const geometry = Cesium.CoplanarPolygonOutlineGeometry.createGeometry(polygonOutline);\n */\nfunction CoplanarPolygonOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const polygonHierarchy = options.polygonHierarchy;\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.polygonHierarchy\", polygonHierarchy);\n  //>>includeEnd('debug');\n\n  this._polygonHierarchy = polygonHierarchy;\n  this._workerName = \"createCoplanarPolygonOutlineGeometry\";\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    PolygonGeometryLibrary.computeHierarchyPackedLength(\n      polygonHierarchy,\n      Cartesian3,\n    ) + 1;\n}\n\n/**\n * A description of a coplanar polygon outline from an array of positions.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @returns {CoplanarPolygonOutlineGeometry}\n */\nCoplanarPolygonOutlineGeometry.fromPositions = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.positions\", options.positions);\n  //>>includeEnd('debug');\n\n  const newOptions = {\n    polygonHierarchy: {\n      positions: options.positions,\n    },\n  };\n  return new CoplanarPolygonOutlineGeometry(newOptions);\n};\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CoplanarPolygonOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCoplanarPolygonOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n    value._polygonHierarchy,\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n\n  array[startingIndex] = value.packedLength;\n\n  return array;\n};\n\nconst scratchOptions = {\n  polygonHierarchy: {},\n};\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CoplanarPolygonOutlineGeometry} [result] The object into which to store the result.\n * @returns {CoplanarPolygonOutlineGeometry} The modified result parameter or a new CoplanarPolygonOutlineGeometry instance if one was not provided.\n */\nCoplanarPolygonOutlineGeometry.unpack = function (\n  array,\n  startingIndex,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n  startingIndex = polygonHierarchy.startingIndex;\n  delete polygonHierarchy.startingIndex;\n  const packedLength = array[startingIndex];\n\n  if (!defined(result)) {\n    result = new CoplanarPolygonOutlineGeometry(scratchOptions);\n  }\n\n  result._polygonHierarchy = polygonHierarchy;\n  result.packedLength = packedLength;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere.\n *\n * @param {CoplanarPolygonOutlineGeometry} polygonGeometry A description of the polygon.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCoplanarPolygonOutlineGeometry.createGeometry = function (polygonGeometry) {\n  const polygonHierarchy = polygonGeometry._polygonHierarchy;\n\n  let outerPositions = polygonHierarchy.positions;\n  outerPositions = arrayRemoveDuplicates(\n    outerPositions,\n    Cartesian3.equalsEpsilon,\n    true,\n  );\n  if (outerPositions.length < 3) {\n    return;\n  }\n  const isValid = CoplanarPolygonGeometryLibrary.validOutline(outerPositions);\n  if (!isValid) {\n    return undefined;\n  }\n\n  const polygons = PolygonGeometryLibrary.polygonOutlinesFromHierarchy(\n    polygonHierarchy,\n    false,\n  );\n\n  if (polygons.length === 0) {\n    return undefined;\n  }\n\n  const geometries = [];\n\n  for (let i = 0; i < polygons.length; i++) {\n    const geometryInstance = new GeometryInstance({\n      geometry: createGeometryFromPositions(polygons[i]),\n    });\n    geometries.push(geometryInstance);\n  }\n\n  const geometry = GeometryPipeline.combineInstances(geometries)[0];\n  const boundingSphere = BoundingSphere.fromPoints(polygonHierarchy.positions);\n\n  return new Geometry({\n    attributes: geometry.attributes,\n    indices: geometry.indices,\n    primitiveType: geometry.primitiveType,\n    boundingSphere: boundingSphere,\n  });\n};\nexport default CoplanarPolygonOutlineGeometry;\n","/**\n * Style options for corners.\n *\n * @demo The {@link https://sandcastle.cesium.com/index.html?id=corridor|Corridor Demo}\n * demonstrates the three corner types, as used by {@link CorridorGraphics}.\n *\n * @enum {number}\n */\nconst CornerType = {\n  /**\n   * <img src=\"Images/CornerTypeRounded.png\" style=\"vertical-align: middle;\" width=\"186\" height=\"189\" />\n   *\n   * Corner has a smooth edge.\n   * @type {number}\n   * @constant\n   */\n  ROUNDED: 0,\n\n  /**\n   * <img src=\"Images/CornerTypeMitered.png\" style=\"vertical-align: middle;\" width=\"186\" height=\"189\" />\n   *\n   * Corner point is the intersection of adjacent edges.\n   * @type {number}\n   * @constant\n   */\n  MITERED: 1,\n\n  /**\n   * <img src=\"Images/CornerTypeBeveled.png\" style=\"vertical-align: middle;\" width=\"186\" height=\"189\" />\n   *\n   * Corner is clipped.\n   * @type {number}\n   * @constant\n   */\n  BEVELED: 2,\n};\nexport default Object.freeze(CornerType);\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport CorridorGeometryLibrary from \"./CorridorGeometryLibrary.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst cartesian1 = new Cartesian3();\nconst cartesian2 = new Cartesian3();\nconst cartesian3 = new Cartesian3();\nconst cartesian4 = new Cartesian3();\nconst cartesian5 = new Cartesian3();\nconst cartesian6 = new Cartesian3();\n\nconst scratch1 = new Cartesian3();\nconst scratch2 = new Cartesian3();\n\nfunction scaleToSurface(positions, ellipsoid) {\n  for (let i = 0; i < positions.length; i++) {\n    positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]);\n  }\n  return positions;\n}\n\nfunction addNormals(attr, normal, left, front, back, vertexFormat) {\n  const normals = attr.normals;\n  const tangents = attr.tangents;\n  const bitangents = attr.bitangents;\n  const forward = Cartesian3.normalize(\n    Cartesian3.cross(left, normal, scratch1),\n    scratch1,\n  );\n  if (vertexFormat.normal) {\n    CorridorGeometryLibrary.addAttribute(normals, normal, front, back);\n  }\n  if (vertexFormat.tangent) {\n    CorridorGeometryLibrary.addAttribute(tangents, forward, front, back);\n  }\n  if (vertexFormat.bitangent) {\n    CorridorGeometryLibrary.addAttribute(bitangents, left, front, back);\n  }\n}\n\nfunction combine(computedPositions, vertexFormat, ellipsoid) {\n  const positions = computedPositions.positions;\n  const corners = computedPositions.corners;\n  const endPositions = computedPositions.endPositions;\n  const computedLefts = computedPositions.lefts;\n  const computedNormals = computedPositions.normals;\n  const attributes = new GeometryAttributes();\n  let corner;\n  let leftCount = 0;\n  let rightCount = 0;\n  let i;\n  let indicesLength = 0;\n  let length;\n  for (i = 0; i < positions.length; i += 2) {\n    length = positions[i].length - 3;\n    leftCount += length; //subtracting 3 to account for duplicate points at corners\n    indicesLength += length * 2;\n    rightCount += positions[i + 1].length - 3;\n  }\n  leftCount += 3; //add back count for end positions\n  rightCount += 3;\n  for (i = 0; i < corners.length; i++) {\n    corner = corners[i];\n    const leftSide = corners[i].leftPositions;\n    if (defined(leftSide)) {\n      length = leftSide.length;\n      leftCount += length;\n      indicesLength += length;\n    } else {\n      length = corners[i].rightPositions.length;\n      rightCount += length;\n      indicesLength += length;\n    }\n  }\n\n  const addEndPositions = defined(endPositions);\n  let endPositionLength;\n  if (addEndPositions) {\n    endPositionLength = endPositions[0].length - 3;\n    leftCount += endPositionLength;\n    rightCount += endPositionLength;\n    endPositionLength /= 3;\n    indicesLength += endPositionLength * 6;\n  }\n  const size = leftCount + rightCount;\n  const finalPositions = new Float64Array(size);\n  const normals = vertexFormat.normal ? new Float32Array(size) : undefined;\n  const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(size)\n    : undefined;\n  const attr = {\n    normals: normals,\n    tangents: tangents,\n    bitangents: bitangents,\n  };\n  let front = 0;\n  let back = size - 1;\n  let UL, LL, UR, LR;\n  let normal = cartesian1;\n  let left = cartesian2;\n  let rightPos, leftPos;\n  const halfLength = endPositionLength / 2;\n\n  const indices = IndexDatatype.createTypedArray(size / 3, indicesLength);\n  let index = 0;\n  if (addEndPositions) {\n    // add rounded end\n    leftPos = cartesian3;\n    rightPos = cartesian4;\n    const firstEndPositions = endPositions[0];\n    normal = Cartesian3.fromArray(computedNormals, 0, normal);\n    left = Cartesian3.fromArray(computedLefts, 0, left);\n    for (i = 0; i < halfLength; i++) {\n      leftPos = Cartesian3.fromArray(\n        firstEndPositions,\n        (halfLength - 1 - i) * 3,\n        leftPos,\n      );\n      rightPos = Cartesian3.fromArray(\n        firstEndPositions,\n        (halfLength + i) * 3,\n        rightPos,\n      );\n      CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n      CorridorGeometryLibrary.addAttribute(\n        finalPositions,\n        leftPos,\n        undefined,\n        back,\n      );\n      addNormals(attr, normal, left, front, back, vertexFormat);\n\n      LL = front / 3;\n      LR = LL + 1;\n      UL = (back - 2) / 3;\n      UR = UL - 1;\n      indices[index++] = UL;\n      indices[index++] = LL;\n      indices[index++] = UR;\n      indices[index++] = UR;\n      indices[index++] = LL;\n      indices[index++] = LR;\n\n      front += 3;\n      back -= 3;\n    }\n  }\n\n  let posIndex = 0;\n  let compIndex = 0;\n  let rightEdge = positions[posIndex++]; //add first two edges\n  let leftEdge = positions[posIndex++];\n  finalPositions.set(rightEdge, front);\n  finalPositions.set(leftEdge, back - leftEdge.length + 1);\n\n  left = Cartesian3.fromArray(computedLefts, compIndex, left);\n  let rightNormal;\n  let leftNormal;\n  length = leftEdge.length - 3;\n  for (i = 0; i < length; i += 3) {\n    rightNormal = ellipsoid.geodeticSurfaceNormal(\n      Cartesian3.fromArray(rightEdge, i, scratch1),\n      scratch1,\n    );\n    leftNormal = ellipsoid.geodeticSurfaceNormal(\n      Cartesian3.fromArray(leftEdge, length - i, scratch2),\n      scratch2,\n    );\n    normal = Cartesian3.normalize(\n      Cartesian3.add(rightNormal, leftNormal, normal),\n      normal,\n    );\n    addNormals(attr, normal, left, front, back, vertexFormat);\n\n    LL = front / 3;\n    LR = LL + 1;\n    UL = (back - 2) / 3;\n    UR = UL - 1;\n    indices[index++] = UL;\n    indices[index++] = LL;\n    indices[index++] = UR;\n    indices[index++] = UR;\n    indices[index++] = LL;\n    indices[index++] = LR;\n\n    front += 3;\n    back -= 3;\n  }\n\n  rightNormal = ellipsoid.geodeticSurfaceNormal(\n    Cartesian3.fromArray(rightEdge, length, scratch1),\n    scratch1,\n  );\n  leftNormal = ellipsoid.geodeticSurfaceNormal(\n    Cartesian3.fromArray(leftEdge, length, scratch2),\n    scratch2,\n  );\n  normal = Cartesian3.normalize(\n    Cartesian3.add(rightNormal, leftNormal, normal),\n    normal,\n  );\n  compIndex += 3;\n  for (i = 0; i < corners.length; i++) {\n    let j;\n    corner = corners[i];\n    const l = corner.leftPositions;\n    const r = corner.rightPositions;\n    let pivot;\n    let start;\n    let outsidePoint = cartesian6;\n    let previousPoint = cartesian3;\n    let nextPoint = cartesian4;\n    normal = Cartesian3.fromArray(computedNormals, compIndex, normal);\n    if (defined(l)) {\n      addNormals(attr, normal, left, undefined, back, vertexFormat);\n      back -= 3;\n      pivot = LR;\n      start = UR;\n      for (j = 0; j < l.length / 3; j++) {\n        outsidePoint = Cartesian3.fromArray(l, j * 3, outsidePoint);\n        indices[index++] = pivot;\n        indices[index++] = start - j - 1;\n        indices[index++] = start - j;\n        CorridorGeometryLibrary.addAttribute(\n          finalPositions,\n          outsidePoint,\n          undefined,\n          back,\n        );\n        previousPoint = Cartesian3.fromArray(\n          finalPositions,\n          (start - j - 1) * 3,\n          previousPoint,\n        );\n        nextPoint = Cartesian3.fromArray(finalPositions, pivot * 3, nextPoint);\n        left = Cartesian3.normalize(\n          Cartesian3.subtract(previousPoint, nextPoint, left),\n          left,\n        );\n        addNormals(attr, normal, left, undefined, back, vertexFormat);\n        back -= 3;\n      }\n      outsidePoint = Cartesian3.fromArray(\n        finalPositions,\n        pivot * 3,\n        outsidePoint,\n      );\n      previousPoint = Cartesian3.subtract(\n        Cartesian3.fromArray(finalPositions, start * 3, previousPoint),\n        outsidePoint,\n        previousPoint,\n      );\n      nextPoint = Cartesian3.subtract(\n        Cartesian3.fromArray(finalPositions, (start - j) * 3, nextPoint),\n        outsidePoint,\n        nextPoint,\n      );\n      left = Cartesian3.normalize(\n        Cartesian3.add(previousPoint, nextPoint, left),\n        left,\n      );\n      addNormals(attr, normal, left, front, undefined, vertexFormat);\n      front += 3;\n    } else {\n      addNormals(attr, normal, left, front, undefined, vertexFormat);\n      front += 3;\n      pivot = UR;\n      start = LR;\n      for (j = 0; j < r.length / 3; j++) {\n        outsidePoint = Cartesian3.fromArray(r, j * 3, outsidePoint);\n        indices[index++] = pivot;\n        indices[index++] = start + j;\n        indices[index++] = start + j + 1;\n        CorridorGeometryLibrary.addAttribute(\n          finalPositions,\n          outsidePoint,\n          front,\n        );\n        previousPoint = Cartesian3.fromArray(\n          finalPositions,\n          pivot * 3,\n          previousPoint,\n        );\n        nextPoint = Cartesian3.fromArray(\n          finalPositions,\n          (start + j) * 3,\n          nextPoint,\n        );\n        left = Cartesian3.normalize(\n          Cartesian3.subtract(previousPoint, nextPoint, left),\n          left,\n        );\n        addNormals(attr, normal, left, front, undefined, vertexFormat);\n        front += 3;\n      }\n      outsidePoint = Cartesian3.fromArray(\n        finalPositions,\n        pivot * 3,\n        outsidePoint,\n      );\n      previousPoint = Cartesian3.subtract(\n        Cartesian3.fromArray(finalPositions, (start + j) * 3, previousPoint),\n        outsidePoint,\n        previousPoint,\n      );\n      nextPoint = Cartesian3.subtract(\n        Cartesian3.fromArray(finalPositions, start * 3, nextPoint),\n        outsidePoint,\n        nextPoint,\n      );\n      left = Cartesian3.normalize(\n        Cartesian3.negate(Cartesian3.add(nextPoint, previousPoint, left), left),\n        left,\n      );\n      addNormals(attr, normal, left, undefined, back, vertexFormat);\n      back -= 3;\n    }\n    rightEdge = positions[posIndex++];\n    leftEdge = positions[posIndex++];\n    rightEdge.splice(0, 3); //remove duplicate points added by corner\n    leftEdge.splice(leftEdge.length - 3, 3);\n    finalPositions.set(rightEdge, front);\n    finalPositions.set(leftEdge, back - leftEdge.length + 1);\n    length = leftEdge.length - 3;\n\n    compIndex += 3;\n    left = Cartesian3.fromArray(computedLefts, compIndex, left);\n    for (j = 0; j < leftEdge.length; j += 3) {\n      rightNormal = ellipsoid.geodeticSurfaceNormal(\n        Cartesian3.fromArray(rightEdge, j, scratch1),\n        scratch1,\n      );\n      leftNormal = ellipsoid.geodeticSurfaceNormal(\n        Cartesian3.fromArray(leftEdge, length - j, scratch2),\n        scratch2,\n      );\n      normal = Cartesian3.normalize(\n        Cartesian3.add(rightNormal, leftNormal, normal),\n        normal,\n      );\n      addNormals(attr, normal, left, front, back, vertexFormat);\n\n      LR = front / 3;\n      LL = LR - 1;\n      UR = (back - 2) / 3;\n      UL = UR + 1;\n      indices[index++] = UL;\n      indices[index++] = LL;\n      indices[index++] = UR;\n      indices[index++] = UR;\n      indices[index++] = LL;\n      indices[index++] = LR;\n\n      front += 3;\n      back -= 3;\n    }\n    front -= 3;\n    back += 3;\n  }\n  normal = Cartesian3.fromArray(\n    computedNormals,\n    computedNormals.length - 3,\n    normal,\n  );\n  addNormals(attr, normal, left, front, back, vertexFormat);\n\n  if (addEndPositions) {\n    // add rounded end\n    front += 3;\n    back -= 3;\n    leftPos = cartesian3;\n    rightPos = cartesian4;\n    const lastEndPositions = endPositions[1];\n    for (i = 0; i < halfLength; i++) {\n      leftPos = Cartesian3.fromArray(\n        lastEndPositions,\n        (endPositionLength - i - 1) * 3,\n        leftPos,\n      );\n      rightPos = Cartesian3.fromArray(lastEndPositions, i * 3, rightPos);\n      CorridorGeometryLibrary.addAttribute(\n        finalPositions,\n        leftPos,\n        undefined,\n        back,\n      );\n      CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n      addNormals(attr, normal, left, front, back, vertexFormat);\n\n      LR = front / 3;\n      LL = LR - 1;\n      UR = (back - 2) / 3;\n      UL = UR + 1;\n      indices[index++] = UL;\n      indices[index++] = LL;\n      indices[index++] = UR;\n      indices[index++] = UR;\n      indices[index++] = LL;\n      indices[index++] = LR;\n\n      front += 3;\n      back -= 3;\n    }\n  }\n\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: finalPositions,\n  });\n\n  if (vertexFormat.st) {\n    const st = new Float32Array((size / 3) * 2);\n    let rightSt;\n    let leftSt;\n    let stIndex = 0;\n    if (addEndPositions) {\n      leftCount /= 3;\n      rightCount /= 3;\n      const theta = Math.PI / (endPositionLength + 1);\n      leftSt = 1 / (leftCount - endPositionLength + 1);\n      rightSt = 1 / (rightCount - endPositionLength + 1);\n      let a;\n      const halfEndPos = endPositionLength / 2;\n      for (i = halfEndPos + 1; i < endPositionLength + 1; i++) {\n        // lower left rounded end\n        a = CesiumMath.PI_OVER_TWO + theta * i;\n        st[stIndex++] = rightSt * (1 + Math.cos(a));\n        st[stIndex++] = 0.5 * (1 + Math.sin(a));\n      }\n      for (i = 1; i < rightCount - endPositionLength + 1; i++) {\n        // bottom edge\n        st[stIndex++] = i * rightSt;\n        st[stIndex++] = 0;\n      }\n      for (i = endPositionLength; i > halfEndPos; i--) {\n        // lower right rounded end\n        a = CesiumMath.PI_OVER_TWO - i * theta;\n        st[stIndex++] = 1 - rightSt * (1 + Math.cos(a));\n        st[stIndex++] = 0.5 * (1 + Math.sin(a));\n      }\n      for (i = halfEndPos; i > 0; i--) {\n        // upper right rounded end\n        a = CesiumMath.PI_OVER_TWO - theta * i;\n        st[stIndex++] = 1 - leftSt * (1 + Math.cos(a));\n        st[stIndex++] = 0.5 * (1 + Math.sin(a));\n      }\n      for (i = leftCount - endPositionLength; i > 0; i--) {\n        // top edge\n        st[stIndex++] = i * leftSt;\n        st[stIndex++] = 1;\n      }\n      for (i = 1; i < halfEndPos + 1; i++) {\n        // upper left rounded end\n        a = CesiumMath.PI_OVER_TWO + theta * i;\n        st[stIndex++] = leftSt * (1 + Math.cos(a));\n        st[stIndex++] = 0.5 * (1 + Math.sin(a));\n      }\n    } else {\n      leftCount /= 3;\n      rightCount /= 3;\n      leftSt = 1 / (leftCount - 1);\n      rightSt = 1 / (rightCount - 1);\n      for (i = 0; i < rightCount; i++) {\n        // bottom edge\n        st[stIndex++] = i * rightSt;\n        st[stIndex++] = 0;\n      }\n      for (i = leftCount; i > 0; i--) {\n        // top edge\n        st[stIndex++] = (i - 1) * leftSt;\n        st[stIndex++] = 1;\n      }\n    }\n\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: st,\n    });\n  }\n\n  if (vertexFormat.normal) {\n    attributes.normal = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: attr.normals,\n    });\n  }\n\n  if (vertexFormat.tangent) {\n    attributes.tangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: attr.tangents,\n    });\n  }\n\n  if (vertexFormat.bitangent) {\n    attributes.bitangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: attr.bitangents,\n    });\n  }\n\n  return {\n    attributes: attributes,\n    indices: indices,\n  };\n}\n\nfunction extrudedAttributes(attributes, vertexFormat) {\n  if (\n    !vertexFormat.normal &&\n    !vertexFormat.tangent &&\n    !vertexFormat.bitangent &&\n    !vertexFormat.st\n  ) {\n    return attributes;\n  }\n  const positions = attributes.position.values;\n  let topNormals;\n  let topBitangents;\n  if (vertexFormat.normal || vertexFormat.bitangent) {\n    topNormals = attributes.normal.values;\n    topBitangents = attributes.bitangent.values;\n  }\n  const size = attributes.position.values.length / 18;\n  const threeSize = size * 3;\n  const twoSize = size * 2;\n  const sixSize = threeSize * 2;\n  let i;\n  if (vertexFormat.normal || vertexFormat.bitangent || vertexFormat.tangent) {\n    const normals = vertexFormat.normal\n      ? new Float32Array(threeSize * 6)\n      : undefined;\n    const tangents = vertexFormat.tangent\n      ? new Float32Array(threeSize * 6)\n      : undefined;\n    const bitangents = vertexFormat.bitangent\n      ? new Float32Array(threeSize * 6)\n      : undefined;\n    let topPosition = cartesian1;\n    let bottomPosition = cartesian2;\n    let previousPosition = cartesian3;\n    let normal = cartesian4;\n    let tangent = cartesian5;\n    let bitangent = cartesian6;\n    let attrIndex = sixSize;\n    for (i = 0; i < threeSize; i += 3) {\n      const attrIndexOffset = attrIndex + sixSize;\n      topPosition = Cartesian3.fromArray(positions, i, topPosition);\n      bottomPosition = Cartesian3.fromArray(\n        positions,\n        i + threeSize,\n        bottomPosition,\n      );\n      previousPosition = Cartesian3.fromArray(\n        positions,\n        (i + 3) % threeSize,\n        previousPosition,\n      );\n      bottomPosition = Cartesian3.subtract(\n        bottomPosition,\n        topPosition,\n        bottomPosition,\n      );\n      previousPosition = Cartesian3.subtract(\n        previousPosition,\n        topPosition,\n        previousPosition,\n      );\n      normal = Cartesian3.normalize(\n        Cartesian3.cross(bottomPosition, previousPosition, normal),\n        normal,\n      );\n      if (vertexFormat.normal) {\n        CorridorGeometryLibrary.addAttribute(normals, normal, attrIndexOffset);\n        CorridorGeometryLibrary.addAttribute(\n          normals,\n          normal,\n          attrIndexOffset + 3,\n        );\n        CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex);\n        CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex + 3);\n      }\n      if (vertexFormat.tangent || vertexFormat.bitangent) {\n        bitangent = Cartesian3.fromArray(topNormals, i, bitangent);\n        if (vertexFormat.bitangent) {\n          CorridorGeometryLibrary.addAttribute(\n            bitangents,\n            bitangent,\n            attrIndexOffset,\n          );\n          CorridorGeometryLibrary.addAttribute(\n            bitangents,\n            bitangent,\n            attrIndexOffset + 3,\n          );\n          CorridorGeometryLibrary.addAttribute(\n            bitangents,\n            bitangent,\n            attrIndex,\n          );\n          CorridorGeometryLibrary.addAttribute(\n            bitangents,\n            bitangent,\n            attrIndex + 3,\n          );\n        }\n\n        if (vertexFormat.tangent) {\n          tangent = Cartesian3.normalize(\n            Cartesian3.cross(bitangent, normal, tangent),\n            tangent,\n          );\n          CorridorGeometryLibrary.addAttribute(\n            tangents,\n            tangent,\n            attrIndexOffset,\n          );\n          CorridorGeometryLibrary.addAttribute(\n            tangents,\n            tangent,\n            attrIndexOffset + 3,\n          );\n          CorridorGeometryLibrary.addAttribute(tangents, tangent, attrIndex);\n          CorridorGeometryLibrary.addAttribute(\n            tangents,\n            tangent,\n            attrIndex + 3,\n          );\n        }\n      }\n      attrIndex += 6;\n    }\n\n    if (vertexFormat.normal) {\n      normals.set(topNormals); //top\n      for (i = 0; i < threeSize; i += 3) {\n        //bottom normals\n        normals[i + threeSize] = -topNormals[i];\n        normals[i + threeSize + 1] = -topNormals[i + 1];\n        normals[i + threeSize + 2] = -topNormals[i + 2];\n      }\n      attributes.normal.values = normals;\n    } else {\n      attributes.normal = undefined;\n    }\n\n    if (vertexFormat.bitangent) {\n      bitangents.set(topBitangents); //top\n      bitangents.set(topBitangents, threeSize); //bottom\n      attributes.bitangent.values = bitangents;\n    } else {\n      attributes.bitangent = undefined;\n    }\n\n    if (vertexFormat.tangent) {\n      const topTangents = attributes.tangent.values;\n      tangents.set(topTangents); //top\n      tangents.set(topTangents, threeSize); //bottom\n      attributes.tangent.values = tangents;\n    }\n  }\n  if (vertexFormat.st) {\n    const topSt = attributes.st.values;\n    const st = new Float32Array(twoSize * 6);\n    st.set(topSt); //top\n    st.set(topSt, twoSize); //bottom\n    let index = twoSize * 2;\n\n    for (let j = 0; j < 2; j++) {\n      st[index++] = topSt[0];\n      st[index++] = topSt[1];\n      for (i = 2; i < twoSize; i += 2) {\n        const s = topSt[i];\n        const t = topSt[i + 1];\n        st[index++] = s;\n        st[index++] = t;\n        st[index++] = s;\n        st[index++] = t;\n      }\n      st[index++] = topSt[0];\n      st[index++] = topSt[1];\n    }\n    attributes.st.values = st;\n  }\n\n  return attributes;\n}\n\nfunction addWallPositions(positions, index, wallPositions) {\n  wallPositions[index++] = positions[0];\n  wallPositions[index++] = positions[1];\n  wallPositions[index++] = positions[2];\n  for (let i = 3; i < positions.length; i += 3) {\n    const x = positions[i];\n    const y = positions[i + 1];\n    const z = positions[i + 2];\n    wallPositions[index++] = x;\n    wallPositions[index++] = y;\n    wallPositions[index++] = z;\n    wallPositions[index++] = x;\n    wallPositions[index++] = y;\n    wallPositions[index++] = z;\n  }\n  wallPositions[index++] = positions[0];\n  wallPositions[index++] = positions[1];\n  wallPositions[index++] = positions[2];\n\n  return wallPositions;\n}\n\nfunction computePositionsExtruded(params, vertexFormat) {\n  const topVertexFormat = new VertexFormat({\n    position: vertexFormat.position,\n    normal:\n      vertexFormat.normal || vertexFormat.bitangent || params.shadowVolume,\n    tangent: vertexFormat.tangent,\n    bitangent: vertexFormat.normal || vertexFormat.bitangent,\n    st: vertexFormat.st,\n  });\n  const ellipsoid = params.ellipsoid;\n  const computedPositions = CorridorGeometryLibrary.computePositions(params);\n  const attr = combine(computedPositions, topVertexFormat, ellipsoid);\n  const height = params.height;\n  const extrudedHeight = params.extrudedHeight;\n  let attributes = attr.attributes;\n  const indices = attr.indices;\n  let positions = attributes.position.values;\n  let length = positions.length;\n  const newPositions = new Float64Array(length * 6);\n  let extrudedPositions = new Float64Array(length);\n  extrudedPositions.set(positions);\n  let wallPositions = new Float64Array(length * 4);\n\n  positions = PolygonPipeline.scaleToGeodeticHeight(\n    positions,\n    height,\n    ellipsoid,\n  );\n  wallPositions = addWallPositions(positions, 0, wallPositions);\n  extrudedPositions = PolygonPipeline.scaleToGeodeticHeight(\n    extrudedPositions,\n    extrudedHeight,\n    ellipsoid,\n  );\n  wallPositions = addWallPositions(\n    extrudedPositions,\n    length * 2,\n    wallPositions,\n  );\n  newPositions.set(positions);\n  newPositions.set(extrudedPositions, length);\n  newPositions.set(wallPositions, length * 2);\n  attributes.position.values = newPositions;\n\n  attributes = extrudedAttributes(attributes, vertexFormat);\n  let i;\n  const size = length / 3;\n  if (params.shadowVolume) {\n    const topNormals = attributes.normal.values;\n    length = topNormals.length;\n\n    let extrudeNormals = new Float32Array(length * 6);\n    for (i = 0; i < length; i++) {\n      topNormals[i] = -topNormals[i];\n    }\n    //only get normals for bottom layer that's going to be pushed down\n    extrudeNormals.set(topNormals, length); //bottom face\n    extrudeNormals = addWallPositions(topNormals, length * 4, extrudeNormals); //bottom wall\n    attributes.extrudeDirection = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: extrudeNormals,\n    });\n    if (!vertexFormat.normal) {\n      attributes.normal = undefined;\n    }\n  }\n  if (defined(params.offsetAttribute)) {\n    let applyOffset = new Uint8Array(size * 6);\n    if (params.offsetAttribute === GeometryOffsetAttribute.TOP) {\n      applyOffset = applyOffset\n        .fill(1, 0, size) // top face\n        .fill(1, size * 2, size * 4); // top wall\n    } else {\n      const applyOffsetValue =\n        params.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n      applyOffset = applyOffset.fill(applyOffsetValue);\n    }\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  const iLength = indices.length;\n  const twoSize = size + size;\n  const newIndices = IndexDatatype.createTypedArray(\n    newPositions.length / 3,\n    iLength * 2 + twoSize * 3,\n  );\n  newIndices.set(indices);\n  let index = iLength;\n  for (i = 0; i < iLength; i += 3) {\n    // bottom indices\n    const v0 = indices[i];\n    const v1 = indices[i + 1];\n    const v2 = indices[i + 2];\n    newIndices[index++] = v2 + size;\n    newIndices[index++] = v1 + size;\n    newIndices[index++] = v0 + size;\n  }\n\n  let UL, LL, UR, LR;\n\n  for (i = 0; i < twoSize; i += 2) {\n    //wall indices\n    UL = i + twoSize;\n    LL = UL + twoSize;\n    UR = UL + 1;\n    LR = LL + 1;\n    newIndices[index++] = UL;\n    newIndices[index++] = LL;\n    newIndices[index++] = UR;\n    newIndices[index++] = UR;\n    newIndices[index++] = LL;\n    newIndices[index++] = LR;\n  }\n\n  return {\n    attributes: attributes,\n    indices: newIndices,\n  };\n}\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartographic = new Cartographic();\n\nfunction computeOffsetPoints(\n  position1,\n  position2,\n  ellipsoid,\n  halfWidth,\n  min,\n  max,\n) {\n  // Compute direction of offset the point\n  const direction = Cartesian3.subtract(\n    position2,\n    position1,\n    scratchCartesian1,\n  );\n  Cartesian3.normalize(direction, direction);\n  const normal = ellipsoid.geodeticSurfaceNormal(position1, scratchCartesian2);\n  const offsetDirection = Cartesian3.cross(\n    direction,\n    normal,\n    scratchCartesian1,\n  );\n  Cartesian3.multiplyByScalar(offsetDirection, halfWidth, offsetDirection);\n\n  let minLat = min.latitude;\n  let minLon = min.longitude;\n  let maxLat = max.latitude;\n  let maxLon = max.longitude;\n\n  // Compute 2 offset points\n  Cartesian3.add(position1, offsetDirection, scratchCartesian2);\n  ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic);\n\n  let lat = scratchCartographic.latitude;\n  let lon = scratchCartographic.longitude;\n  minLat = Math.min(minLat, lat);\n  minLon = Math.min(minLon, lon);\n  maxLat = Math.max(maxLat, lat);\n  maxLon = Math.max(maxLon, lon);\n\n  Cartesian3.subtract(position1, offsetDirection, scratchCartesian2);\n  ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic);\n\n  lat = scratchCartographic.latitude;\n  lon = scratchCartographic.longitude;\n  minLat = Math.min(minLat, lat);\n  minLon = Math.min(minLon, lon);\n  maxLat = Math.max(maxLat, lat);\n  maxLon = Math.max(maxLon, lon);\n\n  min.latitude = minLat;\n  min.longitude = minLon;\n  max.latitude = maxLat;\n  max.longitude = maxLon;\n}\n\nconst scratchCartesianOffset = new Cartesian3();\nconst scratchCartesianEnds = new Cartesian3();\nconst scratchCartographicMin = new Cartographic();\nconst scratchCartographicMax = new Cartographic();\n\nfunction computeRectangle(positions, ellipsoid, width, cornerType, result) {\n  positions = scaleToSurface(positions, ellipsoid);\n  const cleanPositions = arrayRemoveDuplicates(\n    positions,\n    Cartesian3.equalsEpsilon,\n  );\n  const length = cleanPositions.length;\n  if (length < 2 || width <= 0) {\n    return new Rectangle();\n  }\n  const halfWidth = width * 0.5;\n\n  scratchCartographicMin.latitude = Number.POSITIVE_INFINITY;\n  scratchCartographicMin.longitude = Number.POSITIVE_INFINITY;\n  scratchCartographicMax.latitude = Number.NEGATIVE_INFINITY;\n  scratchCartographicMax.longitude = Number.NEGATIVE_INFINITY;\n\n  let lat, lon;\n  if (cornerType === CornerType.ROUNDED) {\n    // Compute start cap\n    const first = cleanPositions[0];\n    Cartesian3.subtract(first, cleanPositions[1], scratchCartesianOffset);\n    Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset);\n    Cartesian3.multiplyByScalar(\n      scratchCartesianOffset,\n      halfWidth,\n      scratchCartesianOffset,\n    );\n    Cartesian3.add(first, scratchCartesianOffset, scratchCartesianEnds);\n\n    ellipsoid.cartesianToCartographic(\n      scratchCartesianEnds,\n      scratchCartographic,\n    );\n    lat = scratchCartographic.latitude;\n    lon = scratchCartographic.longitude;\n    scratchCartographicMin.latitude = Math.min(\n      scratchCartographicMin.latitude,\n      lat,\n    );\n    scratchCartographicMin.longitude = Math.min(\n      scratchCartographicMin.longitude,\n      lon,\n    );\n    scratchCartographicMax.latitude = Math.max(\n      scratchCartographicMax.latitude,\n      lat,\n    );\n    scratchCartographicMax.longitude = Math.max(\n      scratchCartographicMax.longitude,\n      lon,\n    );\n  }\n\n  // Compute the rest\n  for (let i = 0; i < length - 1; ++i) {\n    computeOffsetPoints(\n      cleanPositions[i],\n      cleanPositions[i + 1],\n      ellipsoid,\n      halfWidth,\n      scratchCartographicMin,\n      scratchCartographicMax,\n    );\n  }\n\n  // Compute ending point\n  const last = cleanPositions[length - 1];\n  Cartesian3.subtract(last, cleanPositions[length - 2], scratchCartesianOffset);\n  Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset);\n  Cartesian3.multiplyByScalar(\n    scratchCartesianOffset,\n    halfWidth,\n    scratchCartesianOffset,\n  );\n  Cartesian3.add(last, scratchCartesianOffset, scratchCartesianEnds);\n  computeOffsetPoints(\n    last,\n    scratchCartesianEnds,\n    ellipsoid,\n    halfWidth,\n    scratchCartographicMin,\n    scratchCartographicMax,\n  );\n\n  if (cornerType === CornerType.ROUNDED) {\n    // Compute end cap\n    ellipsoid.cartesianToCartographic(\n      scratchCartesianEnds,\n      scratchCartographic,\n    );\n    lat = scratchCartographic.latitude;\n    lon = scratchCartographic.longitude;\n    scratchCartographicMin.latitude = Math.min(\n      scratchCartographicMin.latitude,\n      lat,\n    );\n    scratchCartographicMin.longitude = Math.min(\n      scratchCartographicMin.longitude,\n      lon,\n    );\n    scratchCartographicMax.latitude = Math.max(\n      scratchCartographicMax.latitude,\n      lat,\n    );\n    scratchCartographicMax.longitude = Math.max(\n      scratchCartographicMax.longitude,\n      lon,\n    );\n  }\n\n  const rectangle = defined(result) ? result : new Rectangle();\n  rectangle.north = scratchCartographicMax.latitude;\n  rectangle.south = scratchCartographicMin.latitude;\n  rectangle.east = scratchCartographicMax.longitude;\n  rectangle.west = scratchCartographicMin.longitude;\n\n  return rectangle;\n}\n\n/**\n * A description of a corridor. Corridor geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias CorridorGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor.\n * @param {number} options.width The distance between the edges of the corridor in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {number} [options.height=0] The distance in meters between the ellipsoid surface and the positions.\n * @param {number} [options.extrudedHeight] The distance in meters between the ellipsoid surface and the extruded face.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see CorridorGeometry.createGeometry\n * @see Packable\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=corridor|Cesium Sandcastle Corridor Demo}\n *\n * @example\n * const corridor = new Cesium.CorridorGeometry({\n *   vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n *   positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]),\n *   width : 100000\n * });\n */\nfunction CorridorGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n  const width = options.width;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.positions\", positions);\n  Check.defined(\"options.width\", width);\n  //>>includeEnd('debug');\n\n  const height = options.height ?? 0.0;\n  const extrudedHeight = options.extrudedHeight ?? height;\n\n  this._positions = positions;\n  this._ellipsoid = Ellipsoid.clone(options.ellipsoid ?? Ellipsoid.default);\n  this._vertexFormat = VertexFormat.clone(\n    options.vertexFormat ?? VertexFormat.DEFAULT,\n  );\n  this._width = width;\n  this._height = Math.max(height, extrudedHeight);\n  this._extrudedHeight = Math.min(height, extrudedHeight);\n  this._cornerType = options.cornerType ?? CornerType.ROUNDED;\n  this._granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  this._shadowVolume = options.shadowVolume ?? false;\n  this._workerName = \"createCorridorGeometry\";\n  this._offsetAttribute = options.offsetAttribute;\n  this._rectangle = undefined;\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    1 +\n    positions.length * Cartesian3.packedLength +\n    Ellipsoid.packedLength +\n    VertexFormat.packedLength +\n    7;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CorridorGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCorridorGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const positions = value._positions;\n  const length = positions.length;\n  array[startingIndex++] = length;\n\n  for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._width;\n  array[startingIndex++] = value._height;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex++] = value._cornerType;\n  array[startingIndex++] = value._granularity;\n  array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  positions: undefined,\n  ellipsoid: scratchEllipsoid,\n  vertexFormat: scratchVertexFormat,\n  width: undefined,\n  height: undefined,\n  extrudedHeight: undefined,\n  cornerType: undefined,\n  granularity: undefined,\n  shadowVolume: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CorridorGeometry} [result] The object into which to store the result.\n * @returns {CorridorGeometry} The modified result parameter or a new CorridorGeometry instance if one was not provided.\n */\nCorridorGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const width = array[startingIndex++];\n  const height = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const cornerType = array[startingIndex++];\n  const granularity = array[startingIndex++];\n  const shadowVolume = array[startingIndex++] === 1.0;\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.positions = positions;\n    scratchOptions.width = width;\n    scratchOptions.height = height;\n    scratchOptions.extrudedHeight = extrudedHeight;\n    scratchOptions.cornerType = cornerType;\n    scratchOptions.granularity = granularity;\n    scratchOptions.shadowVolume = shadowVolume;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n\n    return new CorridorGeometry(scratchOptions);\n  }\n\n  result._positions = positions;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._width = width;\n  result._height = height;\n  result._extrudedHeight = extrudedHeight;\n  result._cornerType = cornerType;\n  result._granularity = granularity;\n  result._shadowVolume = shadowVolume;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the bounding rectangle given the provided options\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor.\n * @param {number} options.width The distance between the edges of the corridor in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n * @param {Rectangle} [result] An object in which to store the result.\n *\n * @returns {Rectangle} The result rectangle.\n */\nCorridorGeometry.computeRectangle = function (options, result) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n  const width = options.width;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.positions\", positions);\n  Check.defined(\"options.width\", width);\n  //>>includeEnd('debug');\n\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const cornerType = options.cornerType ?? CornerType.ROUNDED;\n\n  return computeRectangle(positions, ellipsoid, width, cornerType, result);\n};\n\n/**\n * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere.\n *\n * @param {CorridorGeometry} corridorGeometry A description of the corridor.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCorridorGeometry.createGeometry = function (corridorGeometry) {\n  let positions = corridorGeometry._positions;\n  const width = corridorGeometry._width;\n  const ellipsoid = corridorGeometry._ellipsoid;\n\n  positions = scaleToSurface(positions, ellipsoid);\n  const cleanPositions = arrayRemoveDuplicates(\n    positions,\n    Cartesian3.equalsEpsilon,\n  );\n\n  if (cleanPositions.length < 2 || width <= 0) {\n    return;\n  }\n\n  const height = corridorGeometry._height;\n  const extrudedHeight = corridorGeometry._extrudedHeight;\n  const extrude = !CesiumMath.equalsEpsilon(\n    height,\n    extrudedHeight,\n    0,\n    CesiumMath.EPSILON2,\n  );\n\n  const vertexFormat = corridorGeometry._vertexFormat;\n  const params = {\n    ellipsoid: ellipsoid,\n    positions: cleanPositions,\n    width: width,\n    cornerType: corridorGeometry._cornerType,\n    granularity: corridorGeometry._granularity,\n    saveAttributes: true,\n  };\n  let attr;\n  if (extrude) {\n    params.height = height;\n    params.extrudedHeight = extrudedHeight;\n    params.shadowVolume = corridorGeometry._shadowVolume;\n    params.offsetAttribute = corridorGeometry._offsetAttribute;\n    attr = computePositionsExtruded(params, vertexFormat);\n  } else {\n    const computedPositions = CorridorGeometryLibrary.computePositions(params);\n    attr = combine(computedPositions, vertexFormat, ellipsoid);\n    attr.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n      attr.attributes.position.values,\n      height,\n      ellipsoid,\n    );\n\n    if (defined(corridorGeometry._offsetAttribute)) {\n      const applyOffsetValue =\n        corridorGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n          ? 0\n          : 1;\n      const length = attr.attributes.position.values.length;\n      const applyOffset = new Uint8Array(length / 3).fill(applyOffsetValue);\n      attr.attributes.applyOffset = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        componentsPerAttribute: 1,\n        values: applyOffset,\n      });\n    }\n  }\n  const attributes = attr.attributes;\n  const boundingSphere = BoundingSphere.fromVertices(\n    attributes.position.values,\n    undefined,\n    3,\n  );\n  if (!vertexFormat.position) {\n    attr.attributes.position.values = undefined;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: attr.indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: boundingSphere,\n    offsetAttribute: corridorGeometry._offsetAttribute,\n  });\n};\n\n/**\n * @private\n */\nCorridorGeometry.createShadowVolume = function (\n  corridorGeometry,\n  minHeightFunc,\n  maxHeightFunc,\n) {\n  const granularity = corridorGeometry._granularity;\n  const ellipsoid = corridorGeometry._ellipsoid;\n\n  const minHeight = minHeightFunc(granularity, ellipsoid);\n  const maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n  return new CorridorGeometry({\n    positions: corridorGeometry._positions,\n    width: corridorGeometry._width,\n    cornerType: corridorGeometry._cornerType,\n    ellipsoid: ellipsoid,\n    granularity: granularity,\n    extrudedHeight: minHeight,\n    height: maxHeight,\n    vertexFormat: VertexFormat.POSITION_ONLY,\n    shadowVolume: true,\n  });\n};\n\nObject.defineProperties(CorridorGeometry.prototype, {\n  /**\n   * @private\n   */\n  rectangle: {\n    get: function () {\n      if (!defined(this._rectangle)) {\n        this._rectangle = computeRectangle(\n          this._positions,\n          this._ellipsoid,\n          this._width,\n          this._cornerType,\n        );\n      }\n      return this._rectangle;\n    },\n  },\n  /**\n   * For remapping texture coordinates when rendering CorridorGeometries as GroundPrimitives.\n   *\n   * Corridors don't support stRotation,\n   * so just return the corners of the original system.\n   * @private\n   */\n  textureCoordinateRotationPoints: {\n    get: function () {\n      return [0, 0, 0, 1, 1, 0];\n    },\n  },\n});\nexport default CorridorGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport CornerType from \"./CornerType.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\nimport Quaternion from \"./Quaternion.js\";\n\n/**\n * @private\n */\nconst CorridorGeometryLibrary = {};\n\nconst scratch1 = new Cartesian3();\nconst scratch2 = new Cartesian3();\nconst scratch3 = new Cartesian3();\nconst scratch4 = new Cartesian3();\n\nconst scaleArray2 = [new Cartesian3(), new Cartesian3()];\n\nconst cartesian1 = new Cartesian3();\nconst cartesian2 = new Cartesian3();\nconst cartesian3 = new Cartesian3();\nconst cartesian4 = new Cartesian3();\nconst cartesian5 = new Cartesian3();\nconst cartesian6 = new Cartesian3();\nconst cartesian7 = new Cartesian3();\nconst cartesian8 = new Cartesian3();\nconst cartesian9 = new Cartesian3();\nconst cartesian10 = new Cartesian3();\n\nconst quaterion = new Quaternion();\nconst rotMatrix = new Matrix3();\nfunction computeRoundCorner(\n  cornerPoint,\n  startPoint,\n  endPoint,\n  cornerType,\n  leftIsOutside,\n) {\n  const angle = Cartesian3.angleBetween(\n    Cartesian3.subtract(startPoint, cornerPoint, scratch1),\n    Cartesian3.subtract(endPoint, cornerPoint, scratch2),\n  );\n  const granularity =\n    cornerType === CornerType.BEVELED\n      ? 1\n      : Math.ceil(angle / CesiumMath.toRadians(5)) + 1;\n\n  const size = granularity * 3;\n  const array = new Array(size);\n\n  array[size - 3] = endPoint.x;\n  array[size - 2] = endPoint.y;\n  array[size - 1] = endPoint.z;\n\n  let m;\n  if (leftIsOutside) {\n    m = Matrix3.fromQuaternion(\n      Quaternion.fromAxisAngle(\n        Cartesian3.negate(cornerPoint, scratch1),\n        angle / granularity,\n        quaterion,\n      ),\n      rotMatrix,\n    );\n  } else {\n    m = Matrix3.fromQuaternion(\n      Quaternion.fromAxisAngle(cornerPoint, angle / granularity, quaterion),\n      rotMatrix,\n    );\n  }\n\n  let index = 0;\n  startPoint = Cartesian3.clone(startPoint, scratch1);\n  for (let i = 0; i < granularity; i++) {\n    startPoint = Matrix3.multiplyByVector(m, startPoint, startPoint);\n    array[index++] = startPoint.x;\n    array[index++] = startPoint.y;\n    array[index++] = startPoint.z;\n  }\n\n  return array;\n}\n\nfunction addEndCaps(calculatedPositions) {\n  let cornerPoint = cartesian1;\n  let startPoint = cartesian2;\n  let endPoint = cartesian3;\n\n  let leftEdge = calculatedPositions[1];\n  startPoint = Cartesian3.fromArray(\n    calculatedPositions[1],\n    leftEdge.length - 3,\n    startPoint,\n  );\n  endPoint = Cartesian3.fromArray(calculatedPositions[0], 0, endPoint);\n  cornerPoint = Cartesian3.midpoint(startPoint, endPoint, cornerPoint);\n  const firstEndCap = computeRoundCorner(\n    cornerPoint,\n    startPoint,\n    endPoint,\n    CornerType.ROUNDED,\n    false,\n  );\n\n  const length = calculatedPositions.length - 1;\n  const rightEdge = calculatedPositions[length - 1];\n  leftEdge = calculatedPositions[length];\n  startPoint = Cartesian3.fromArray(\n    rightEdge,\n    rightEdge.length - 3,\n    startPoint,\n  );\n  endPoint = Cartesian3.fromArray(leftEdge, 0, endPoint);\n  cornerPoint = Cartesian3.midpoint(startPoint, endPoint, cornerPoint);\n  const lastEndCap = computeRoundCorner(\n    cornerPoint,\n    startPoint,\n    endPoint,\n    CornerType.ROUNDED,\n    false,\n  );\n\n  return [firstEndCap, lastEndCap];\n}\n\nfunction computeMiteredCorner(\n  position,\n  leftCornerDirection,\n  lastPoint,\n  leftIsOutside,\n) {\n  let cornerPoint = scratch1;\n  if (leftIsOutside) {\n    cornerPoint = Cartesian3.add(position, leftCornerDirection, cornerPoint);\n  } else {\n    leftCornerDirection = Cartesian3.negate(\n      leftCornerDirection,\n      leftCornerDirection,\n    );\n    cornerPoint = Cartesian3.add(position, leftCornerDirection, cornerPoint);\n  }\n  return [\n    cornerPoint.x,\n    cornerPoint.y,\n    cornerPoint.z,\n    lastPoint.x,\n    lastPoint.y,\n    lastPoint.z,\n  ];\n}\n\nfunction addShiftedPositions(positions, left, scalar, calculatedPositions) {\n  const rightPositions = new Array(positions.length);\n  const leftPositions = new Array(positions.length);\n  const scaledLeft = Cartesian3.multiplyByScalar(left, scalar, scratch1);\n  const scaledRight = Cartesian3.negate(scaledLeft, scratch2);\n  let rightIndex = 0;\n  let leftIndex = positions.length - 1;\n\n  for (let i = 0; i < positions.length; i += 3) {\n    const pos = Cartesian3.fromArray(positions, i, scratch3);\n    const rightPos = Cartesian3.add(pos, scaledRight, scratch4);\n    rightPositions[rightIndex++] = rightPos.x;\n    rightPositions[rightIndex++] = rightPos.y;\n    rightPositions[rightIndex++] = rightPos.z;\n\n    const leftPos = Cartesian3.add(pos, scaledLeft, scratch4);\n    leftPositions[leftIndex--] = leftPos.z;\n    leftPositions[leftIndex--] = leftPos.y;\n    leftPositions[leftIndex--] = leftPos.x;\n  }\n  calculatedPositions.push(rightPositions, leftPositions);\n\n  return calculatedPositions;\n}\n\n/**\n * @private\n */\nCorridorGeometryLibrary.addAttribute = function (\n  attribute,\n  value,\n  front,\n  back,\n) {\n  const x = value.x;\n  const y = value.y;\n  const z = value.z;\n  if (defined(front)) {\n    attribute[front] = x;\n    attribute[front + 1] = y;\n    attribute[front + 2] = z;\n  }\n  if (defined(back)) {\n    attribute[back] = z;\n    attribute[back - 1] = y;\n    attribute[back - 2] = x;\n  }\n};\n\nconst scratchForwardProjection = new Cartesian3();\nconst scratchBackwardProjection = new Cartesian3();\n\n/**\n * @private\n */\nCorridorGeometryLibrary.computePositions = function (params) {\n  const granularity = params.granularity;\n  const positions = params.positions;\n  const ellipsoid = params.ellipsoid;\n  const width = params.width / 2;\n  const cornerType = params.cornerType;\n  const saveAttributes = params.saveAttributes;\n  let normal = cartesian1;\n  let forward = cartesian2;\n  let backward = cartesian3;\n  let left = cartesian4;\n  let cornerDirection = cartesian5;\n  let startPoint = cartesian6;\n  let previousPos = cartesian7;\n  let rightPos = cartesian8;\n  let leftPos = cartesian9;\n  let center = cartesian10;\n  let calculatedPositions = [];\n  const calculatedLefts = saveAttributes ? [] : undefined;\n  const calculatedNormals = saveAttributes ? [] : undefined;\n  let position = positions[0]; //add first point\n  let nextPosition = positions[1];\n\n  forward = Cartesian3.normalize(\n    Cartesian3.subtract(nextPosition, position, forward),\n    forward,\n  );\n  normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n  left = Cartesian3.normalize(Cartesian3.cross(normal, forward, left), left);\n  if (saveAttributes) {\n    calculatedLefts.push(left.x, left.y, left.z);\n    calculatedNormals.push(normal.x, normal.y, normal.z);\n  }\n  previousPos = Cartesian3.clone(position, previousPos);\n  position = nextPosition;\n  backward = Cartesian3.negate(forward, backward);\n\n  let subdividedPositions;\n  const corners = [];\n  let i;\n  const length = positions.length;\n  for (i = 1; i < length - 1; i++) {\n    // add middle points and corners\n    normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n    nextPosition = positions[i + 1];\n    forward = Cartesian3.normalize(\n      Cartesian3.subtract(nextPosition, position, forward),\n      forward,\n    );\n\n    const forwardProjection = Cartesian3.multiplyByScalar(\n      normal,\n      Cartesian3.dot(forward, normal),\n      scratchForwardProjection,\n    );\n    Cartesian3.subtract(forward, forwardProjection, forwardProjection);\n    Cartesian3.normalize(forwardProjection, forwardProjection);\n\n    const backwardProjection = Cartesian3.multiplyByScalar(\n      normal,\n      Cartesian3.dot(backward, normal),\n      scratchBackwardProjection,\n    );\n    Cartesian3.subtract(backward, backwardProjection, backwardProjection);\n    Cartesian3.normalize(backwardProjection, backwardProjection);\n\n    const doCorner = !CesiumMath.equalsEpsilon(\n      Math.abs(Cartesian3.dot(forwardProjection, backwardProjection)),\n      1.0,\n      CesiumMath.EPSILON7,\n    );\n\n    if (doCorner) {\n      cornerDirection = Cartesian3.normalize(\n        Cartesian3.add(forward, backward, cornerDirection),\n        cornerDirection,\n      );\n      cornerDirection = Cartesian3.cross(\n        cornerDirection,\n        normal,\n        cornerDirection,\n      );\n      cornerDirection = Cartesian3.cross(\n        normal,\n        cornerDirection,\n        cornerDirection,\n      );\n      cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\n      const scalar =\n        width /\n        Math.max(\n          0.25,\n          Cartesian3.magnitude(\n            Cartesian3.cross(cornerDirection, backward, scratch1),\n          ),\n        );\n      const leftIsOutside = PolylineVolumeGeometryLibrary.angleIsGreaterThanPi(\n        forward,\n        backward,\n        position,\n        ellipsoid,\n      );\n      cornerDirection = Cartesian3.multiplyByScalar(\n        cornerDirection,\n        scalar,\n        cornerDirection,\n      );\n      if (leftIsOutside) {\n        rightPos = Cartesian3.add(position, cornerDirection, rightPos);\n        center = Cartesian3.add(\n          rightPos,\n          Cartesian3.multiplyByScalar(left, width, center),\n          center,\n        );\n        leftPos = Cartesian3.add(\n          rightPos,\n          Cartesian3.multiplyByScalar(left, width * 2, leftPos),\n          leftPos,\n        );\n        scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\n        scaleArray2[1] = Cartesian3.clone(center, scaleArray2[1]);\n        subdividedPositions = PolylinePipeline.generateArc({\n          positions: scaleArray2,\n          granularity: granularity,\n          ellipsoid: ellipsoid,\n        });\n        calculatedPositions = addShiftedPositions(\n          subdividedPositions,\n          left,\n          width,\n          calculatedPositions,\n        );\n        if (saveAttributes) {\n          calculatedLefts.push(left.x, left.y, left.z);\n          calculatedNormals.push(normal.x, normal.y, normal.z);\n        }\n        startPoint = Cartesian3.clone(leftPos, startPoint);\n        left = Cartesian3.normalize(\n          Cartesian3.cross(normal, forward, left),\n          left,\n        );\n        leftPos = Cartesian3.add(\n          rightPos,\n          Cartesian3.multiplyByScalar(left, width * 2, leftPos),\n          leftPos,\n        );\n        previousPos = Cartesian3.add(\n          rightPos,\n          Cartesian3.multiplyByScalar(left, width, previousPos),\n          previousPos,\n        );\n        if (\n          cornerType === CornerType.ROUNDED ||\n          cornerType === CornerType.BEVELED\n        ) {\n          corners.push({\n            leftPositions: computeRoundCorner(\n              rightPos,\n              startPoint,\n              leftPos,\n              cornerType,\n              leftIsOutside,\n            ),\n          });\n        } else {\n          corners.push({\n            leftPositions: computeMiteredCorner(\n              position,\n              Cartesian3.negate(cornerDirection, cornerDirection),\n              leftPos,\n              leftIsOutside,\n            ),\n          });\n        }\n      } else {\n        leftPos = Cartesian3.add(position, cornerDirection, leftPos);\n        center = Cartesian3.add(\n          leftPos,\n          Cartesian3.negate(\n            Cartesian3.multiplyByScalar(left, width, center),\n            center,\n          ),\n          center,\n        );\n        rightPos = Cartesian3.add(\n          leftPos,\n          Cartesian3.negate(\n            Cartesian3.multiplyByScalar(left, width * 2, rightPos),\n            rightPos,\n          ),\n          rightPos,\n        );\n        scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\n        scaleArray2[1] = Cartesian3.clone(center, scaleArray2[1]);\n        subdividedPositions = PolylinePipeline.generateArc({\n          positions: scaleArray2,\n          granularity: granularity,\n          ellipsoid: ellipsoid,\n        });\n        calculatedPositions = addShiftedPositions(\n          subdividedPositions,\n          left,\n          width,\n          calculatedPositions,\n        );\n        if (saveAttributes) {\n          calculatedLefts.push(left.x, left.y, left.z);\n          calculatedNormals.push(normal.x, normal.y, normal.z);\n        }\n        startPoint = Cartesian3.clone(rightPos, startPoint);\n        left = Cartesian3.normalize(\n          Cartesian3.cross(normal, forward, left),\n          left,\n        );\n        rightPos = Cartesian3.add(\n          leftPos,\n          Cartesian3.negate(\n            Cartesian3.multiplyByScalar(left, width * 2, rightPos),\n            rightPos,\n          ),\n          rightPos,\n        );\n        previousPos = Cartesian3.add(\n          leftPos,\n          Cartesian3.negate(\n            Cartesian3.multiplyByScalar(left, width, previousPos),\n            previousPos,\n          ),\n          previousPos,\n        );\n        if (\n          cornerType === CornerType.ROUNDED ||\n          cornerType === CornerType.BEVELED\n        ) {\n          corners.push({\n            rightPositions: computeRoundCorner(\n              leftPos,\n              startPoint,\n              rightPos,\n              cornerType,\n              leftIsOutside,\n            ),\n          });\n        } else {\n          corners.push({\n            rightPositions: computeMiteredCorner(\n              position,\n              cornerDirection,\n              rightPos,\n              leftIsOutside,\n            ),\n          });\n        }\n      }\n      backward = Cartesian3.negate(forward, backward);\n    }\n    position = nextPosition;\n  }\n\n  normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n  scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\n  scaleArray2[1] = Cartesian3.clone(position, scaleArray2[1]);\n  subdividedPositions = PolylinePipeline.generateArc({\n    positions: scaleArray2,\n    granularity: granularity,\n    ellipsoid: ellipsoid,\n  });\n  calculatedPositions = addShiftedPositions(\n    subdividedPositions,\n    left,\n    width,\n    calculatedPositions,\n  );\n  if (saveAttributes) {\n    calculatedLefts.push(left.x, left.y, left.z);\n    calculatedNormals.push(normal.x, normal.y, normal.z);\n  }\n\n  let endPositions;\n  if (cornerType === CornerType.ROUNDED) {\n    endPositions = addEndCaps(calculatedPositions);\n  }\n\n  return {\n    positions: calculatedPositions,\n    corners: corners,\n    lefts: calculatedLefts,\n    normals: calculatedNormals,\n    endPositions: endPositions,\n  };\n};\nexport default CorridorGeometryLibrary;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport CorridorGeometryLibrary from \"./CorridorGeometryLibrary.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nconst cartesian1 = new Cartesian3();\nconst cartesian2 = new Cartesian3();\nconst cartesian3 = new Cartesian3();\n\nfunction scaleToSurface(positions, ellipsoid) {\n  for (let i = 0; i < positions.length; i++) {\n    positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]);\n  }\n  return positions;\n}\n\nfunction combine(computedPositions, cornerType) {\n  const wallIndices = [];\n  const positions = computedPositions.positions;\n  const corners = computedPositions.corners;\n  const endPositions = computedPositions.endPositions;\n  const attributes = new GeometryAttributes();\n  let corner;\n  let leftCount = 0;\n  let rightCount = 0;\n  let i;\n  let indicesLength = 0;\n  let length;\n  for (i = 0; i < positions.length; i += 2) {\n    length = positions[i].length - 3;\n    leftCount += length; //subtracting 3 to account for duplicate points at corners\n    indicesLength += (length / 3) * 4;\n    rightCount += positions[i + 1].length - 3;\n  }\n  leftCount += 3; //add back count for end positions\n  rightCount += 3;\n  for (i = 0; i < corners.length; i++) {\n    corner = corners[i];\n    const leftSide = corners[i].leftPositions;\n    if (defined(leftSide)) {\n      length = leftSide.length;\n      leftCount += length;\n      indicesLength += (length / 3) * 2;\n    } else {\n      length = corners[i].rightPositions.length;\n      rightCount += length;\n      indicesLength += (length / 3) * 2;\n    }\n  }\n\n  const addEndPositions = defined(endPositions);\n  let endPositionLength;\n  if (addEndPositions) {\n    endPositionLength = endPositions[0].length - 3;\n    leftCount += endPositionLength;\n    rightCount += endPositionLength;\n    endPositionLength /= 3;\n    indicesLength += endPositionLength * 4;\n  }\n  const size = leftCount + rightCount;\n  const finalPositions = new Float64Array(size);\n  let front = 0;\n  let back = size - 1;\n  let UL, LL, UR, LR;\n  let rightPos, leftPos;\n  const halfLength = endPositionLength / 2;\n\n  const indices = IndexDatatype.createTypedArray(size / 3, indicesLength + 4);\n  let index = 0;\n\n  indices[index++] = front / 3;\n  indices[index++] = (back - 2) / 3;\n  if (addEndPositions) {\n    // add rounded end\n    wallIndices.push(front / 3);\n    leftPos = cartesian1;\n    rightPos = cartesian2;\n    const firstEndPositions = endPositions[0];\n    for (i = 0; i < halfLength; i++) {\n      leftPos = Cartesian3.fromArray(\n        firstEndPositions,\n        (halfLength - 1 - i) * 3,\n        leftPos,\n      );\n      rightPos = Cartesian3.fromArray(\n        firstEndPositions,\n        (halfLength + i) * 3,\n        rightPos,\n      );\n      CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n      CorridorGeometryLibrary.addAttribute(\n        finalPositions,\n        leftPos,\n        undefined,\n        back,\n      );\n\n      LL = front / 3;\n      LR = LL + 1;\n      UL = (back - 2) / 3;\n      UR = UL - 1;\n      indices[index++] = UL;\n      indices[index++] = UR;\n      indices[index++] = LL;\n      indices[index++] = LR;\n\n      front += 3;\n      back -= 3;\n    }\n  }\n\n  let posIndex = 0;\n  let rightEdge = positions[posIndex++]; //add first two edges\n  let leftEdge = positions[posIndex++];\n  finalPositions.set(rightEdge, front);\n  finalPositions.set(leftEdge, back - leftEdge.length + 1);\n\n  length = leftEdge.length - 3;\n  wallIndices.push(front / 3, (back - 2) / 3);\n  for (i = 0; i < length; i += 3) {\n    LL = front / 3;\n    LR = LL + 1;\n    UL = (back - 2) / 3;\n    UR = UL - 1;\n    indices[index++] = UL;\n    indices[index++] = UR;\n    indices[index++] = LL;\n    indices[index++] = LR;\n\n    front += 3;\n    back -= 3;\n  }\n\n  for (i = 0; i < corners.length; i++) {\n    let j;\n    corner = corners[i];\n    const l = corner.leftPositions;\n    const r = corner.rightPositions;\n    let start;\n    let outsidePoint = cartesian3;\n    if (defined(l)) {\n      back -= 3;\n      start = UR;\n      wallIndices.push(LR);\n      for (j = 0; j < l.length / 3; j++) {\n        outsidePoint = Cartesian3.fromArray(l, j * 3, outsidePoint);\n        indices[index++] = start - j - 1;\n        indices[index++] = start - j;\n        CorridorGeometryLibrary.addAttribute(\n          finalPositions,\n          outsidePoint,\n          undefined,\n          back,\n        );\n        back -= 3;\n      }\n      wallIndices.push(start - Math.floor(l.length / 6));\n      if (cornerType === CornerType.BEVELED) {\n        wallIndices.push((back - 2) / 3 + 1);\n      }\n      front += 3;\n    } else {\n      front += 3;\n      start = LR;\n      wallIndices.push(UR);\n      for (j = 0; j < r.length / 3; j++) {\n        outsidePoint = Cartesian3.fromArray(r, j * 3, outsidePoint);\n        indices[index++] = start + j;\n        indices[index++] = start + j + 1;\n        CorridorGeometryLibrary.addAttribute(\n          finalPositions,\n          outsidePoint,\n          front,\n        );\n        front += 3;\n      }\n      wallIndices.push(start + Math.floor(r.length / 6));\n      if (cornerType === CornerType.BEVELED) {\n        wallIndices.push(front / 3 - 1);\n      }\n      back -= 3;\n    }\n    rightEdge = positions[posIndex++];\n    leftEdge = positions[posIndex++];\n    rightEdge.splice(0, 3); //remove duplicate points added by corner\n    leftEdge.splice(leftEdge.length - 3, 3);\n    finalPositions.set(rightEdge, front);\n    finalPositions.set(leftEdge, back - leftEdge.length + 1);\n    length = leftEdge.length - 3;\n\n    for (j = 0; j < leftEdge.length; j += 3) {\n      LR = front / 3;\n      LL = LR - 1;\n      UR = (back - 2) / 3;\n      UL = UR + 1;\n      indices[index++] = UL;\n      indices[index++] = UR;\n      indices[index++] = LL;\n      indices[index++] = LR;\n      front += 3;\n      back -= 3;\n    }\n    front -= 3;\n    back += 3;\n    wallIndices.push(front / 3, (back - 2) / 3);\n  }\n\n  if (addEndPositions) {\n    // add rounded end\n    front += 3;\n    back -= 3;\n    leftPos = cartesian1;\n    rightPos = cartesian2;\n    const lastEndPositions = endPositions[1];\n    for (i = 0; i < halfLength; i++) {\n      leftPos = Cartesian3.fromArray(\n        lastEndPositions,\n        (endPositionLength - i - 1) * 3,\n        leftPos,\n      );\n      rightPos = Cartesian3.fromArray(lastEndPositions, i * 3, rightPos);\n      CorridorGeometryLibrary.addAttribute(\n        finalPositions,\n        leftPos,\n        undefined,\n        back,\n      );\n      CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\n\n      LR = front / 3;\n      LL = LR - 1;\n      UR = (back - 2) / 3;\n      UL = UR + 1;\n      indices[index++] = UL;\n      indices[index++] = UR;\n      indices[index++] = LL;\n      indices[index++] = LR;\n\n      front += 3;\n      back -= 3;\n    }\n\n    wallIndices.push(front / 3);\n  } else {\n    wallIndices.push(front / 3, (back - 2) / 3);\n  }\n  indices[index++] = front / 3;\n  indices[index++] = (back - 2) / 3;\n\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: finalPositions,\n  });\n\n  return {\n    attributes: attributes,\n    indices: indices,\n    wallIndices: wallIndices,\n  };\n}\n\nfunction computePositionsExtruded(params) {\n  const ellipsoid = params.ellipsoid;\n  const computedPositions = CorridorGeometryLibrary.computePositions(params);\n  const attr = combine(computedPositions, params.cornerType);\n  const wallIndices = attr.wallIndices;\n  const height = params.height;\n  const extrudedHeight = params.extrudedHeight;\n  const attributes = attr.attributes;\n  const indices = attr.indices;\n  let positions = attributes.position.values;\n  let length = positions.length;\n  let extrudedPositions = new Float64Array(length);\n  extrudedPositions.set(positions);\n  const newPositions = new Float64Array(length * 2);\n\n  positions = PolygonPipeline.scaleToGeodeticHeight(\n    positions,\n    height,\n    ellipsoid,\n  );\n  extrudedPositions = PolygonPipeline.scaleToGeodeticHeight(\n    extrudedPositions,\n    extrudedHeight,\n    ellipsoid,\n  );\n  newPositions.set(positions);\n  newPositions.set(extrudedPositions, length);\n  attributes.position.values = newPositions;\n\n  length /= 3;\n  if (defined(params.offsetAttribute)) {\n    let applyOffset = new Uint8Array(length * 2);\n    if (params.offsetAttribute === GeometryOffsetAttribute.TOP) {\n      applyOffset = applyOffset.fill(1, 0, length);\n    } else {\n      const applyOffsetValue =\n        params.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n      applyOffset = applyOffset.fill(applyOffsetValue);\n    }\n\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  let i;\n  const iLength = indices.length;\n  const newIndices = IndexDatatype.createTypedArray(\n    newPositions.length / 3,\n    (iLength + wallIndices.length) * 2,\n  );\n  newIndices.set(indices);\n  let index = iLength;\n  for (i = 0; i < iLength; i += 2) {\n    // bottom indices\n    const v0 = indices[i];\n    const v1 = indices[i + 1];\n    newIndices[index++] = v0 + length;\n    newIndices[index++] = v1 + length;\n  }\n\n  let UL, LL;\n  for (i = 0; i < wallIndices.length; i++) {\n    //wall indices\n    UL = wallIndices[i];\n    LL = UL + length;\n    newIndices[index++] = UL;\n    newIndices[index++] = LL;\n  }\n\n  return {\n    attributes: attributes,\n    indices: newIndices,\n  };\n}\n\n/**\n * A description of a corridor outline.\n *\n * @alias CorridorOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor outline.\n * @param {number} options.width The distance between the edges of the corridor outline.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {number} [options.height=0] The distance in meters between the positions and the ellipsoid surface.\n * @param {number} [options.extrudedHeight] The distance in meters between the extruded face and the ellipsoid surface.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see CorridorOutlineGeometry.createGeometry\n *\n * @example\n * const corridor = new Cesium.CorridorOutlineGeometry({\n *   positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]),\n *   width : 100000\n * });\n */\nfunction CorridorOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n  const width = options.width;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.positions\", positions);\n  Check.typeOf.number(\"options.width\", width);\n  //>>includeEnd('debug');\n\n  const height = options.height ?? 0.0;\n  const extrudedHeight = options.extrudedHeight ?? height;\n\n  this._positions = positions;\n  this._ellipsoid = Ellipsoid.clone(options.ellipsoid ?? Ellipsoid.default);\n  this._width = width;\n  this._height = Math.max(height, extrudedHeight);\n  this._extrudedHeight = Math.min(height, extrudedHeight);\n  this._cornerType = options.cornerType ?? CornerType.ROUNDED;\n  this._granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createCorridorOutlineGeometry\";\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    1 + positions.length * Cartesian3.packedLength + Ellipsoid.packedLength + 6;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CorridorOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCorridorOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.typeOf.object(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const positions = value._positions;\n  const length = positions.length;\n  array[startingIndex++] = length;\n\n  for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  array[startingIndex++] = value._width;\n  array[startingIndex++] = value._height;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex++] = value._cornerType;\n  array[startingIndex++] = value._granularity;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchOptions = {\n  positions: undefined,\n  ellipsoid: scratchEllipsoid,\n  width: undefined,\n  height: undefined,\n  extrudedHeight: undefined,\n  cornerType: undefined,\n  granularity: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CorridorOutlineGeometry} [result] The object into which to store the result.\n * @returns {CorridorOutlineGeometry} The modified result parameter or a new CorridorOutlineGeometry instance if one was not provided.\n */\nCorridorOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const width = array[startingIndex++];\n  const height = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const cornerType = array[startingIndex++];\n  const granularity = array[startingIndex++];\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.positions = positions;\n    scratchOptions.width = width;\n    scratchOptions.height = height;\n    scratchOptions.extrudedHeight = extrudedHeight;\n    scratchOptions.cornerType = cornerType;\n    scratchOptions.granularity = granularity;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n    return new CorridorOutlineGeometry(scratchOptions);\n  }\n\n  result._positions = positions;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._width = width;\n  result._height = height;\n  result._extrudedHeight = extrudedHeight;\n  result._cornerType = cornerType;\n  result._granularity = granularity;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere.\n *\n * @param {CorridorOutlineGeometry} corridorOutlineGeometry A description of the corridor.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCorridorOutlineGeometry.createGeometry = function (corridorOutlineGeometry) {\n  let positions = corridorOutlineGeometry._positions;\n  const width = corridorOutlineGeometry._width;\n  const ellipsoid = corridorOutlineGeometry._ellipsoid;\n\n  positions = scaleToSurface(positions, ellipsoid);\n  const cleanPositions = arrayRemoveDuplicates(\n    positions,\n    Cartesian3.equalsEpsilon,\n  );\n\n  if (cleanPositions.length < 2 || width <= 0) {\n    return;\n  }\n\n  const height = corridorOutlineGeometry._height;\n  const extrudedHeight = corridorOutlineGeometry._extrudedHeight;\n  const extrude = !CesiumMath.equalsEpsilon(\n    height,\n    extrudedHeight,\n    0,\n    CesiumMath.EPSILON2,\n  );\n\n  const params = {\n    ellipsoid: ellipsoid,\n    positions: cleanPositions,\n    width: width,\n    cornerType: corridorOutlineGeometry._cornerType,\n    granularity: corridorOutlineGeometry._granularity,\n    saveAttributes: false,\n  };\n  let attr;\n  if (extrude) {\n    params.height = height;\n    params.extrudedHeight = extrudedHeight;\n    params.offsetAttribute = corridorOutlineGeometry._offsetAttribute;\n    attr = computePositionsExtruded(params);\n  } else {\n    const computedPositions = CorridorGeometryLibrary.computePositions(params);\n    attr = combine(computedPositions, params.cornerType);\n    attr.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n      attr.attributes.position.values,\n      height,\n      ellipsoid,\n    );\n\n    if (defined(corridorOutlineGeometry._offsetAttribute)) {\n      const length = attr.attributes.position.values.length;\n      const offsetValue =\n        corridorOutlineGeometry._offsetAttribute ===\n        GeometryOffsetAttribute.NONE\n          ? 0\n          : 1;\n      const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n      attr.attributes.applyOffset = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        componentsPerAttribute: 1,\n        values: applyOffset,\n      });\n    }\n  }\n  const attributes = attr.attributes;\n  const boundingSphere = BoundingSphere.fromVertices(\n    attributes.position.values,\n    undefined,\n    3,\n  );\n\n  return new Geometry({\n    attributes: attributes,\n    indices: attr.indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: boundingSphere,\n    offsetAttribute: corridorOutlineGeometry._offsetAttribute,\n  });\n};\nexport default CorridorOutlineGeometry;\n","/*! @license DOMPurify 3.4.16 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.16/LICENSE */\nfunction _OverloadYield(e, d) {\n\tthis.v = e, this.k = d;\n}\nfunction _arrayLikeToArray(r, a) {\n\t(null == a || a > r.length) && (a = r.length);\n\tfor (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n\treturn n;\n}\nfunction _arrayWithHoles(r) {\n\tif (Array.isArray(r)) return r;\n}\nfunction _iterableToArrayLimit(r, l) {\n\tvar t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n\tif (null != t) {\n\t\tvar e, n, i, u, a = [], f = !0, o = !1;\n\t\ttry {\n\t\t\tif (i = (t = t.call(r)).next, 0 === l) {\n\t\t\t\tif (Object(t) !== t) return;\n\t\t\t\tf = !1;\n\t\t\t} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n\t\t} catch (r) {\n\t\t\to = !0, n = r;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n\t\t\t} finally {\n\t\t\t\tif (o) throw n;\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t}\n}\nfunction _nonIterableRest() {\n\tthrow new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */\nfunction _slicedToArray(r, e) {\n\treturn _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _unsupportedIterableToArray(r, a) {\n\tif (r) {\n\t\tif (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n\t\tvar t = {}.toString.call(r).slice(8, -1);\n\t\treturn \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n\t}\n}\nfunction AsyncGenerator(e) {\n\tvar t, n;\n\tfunction resume(t, n) {\n\t\ttry {\n\t\t\tvar r = e[t](n), o = r.value, u = o instanceof _OverloadYield;\n\t\t\tPromise.resolve(u ? o.v : o).then(function(n) {\n\t\t\t\tif (u) {\n\t\t\t\t\tvar i = \"return\" === t && o.k ? t : \"next\";\n\t\t\t\t\tif (!o.k || n.done) return resume(i, n);\n\t\t\t\t\tn = e[i](n).value;\n\t\t\t\t}\n\t\t\t\tsettle(!!r.done, n);\n\t\t\t}, function(e) {\n\t\t\t\tresume(\"throw\", e);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tsettle(2, e);\n\t\t}\n\t}\n\tfunction settle(e, r) {\n\t\t2 === e ? t.reject(r) : t.resolve({\n\t\t\tvalue: r,\n\t\t\tdone: e\n\t\t}), (t = t.next) ? resume(t.key, t.arg) : n = null;\n\t}\n\tthis._invoke = function(e, r) {\n\t\treturn new Promise(function(o, u) {\n\t\t\tvar i = {\n\t\t\t\tkey: e,\n\t\t\t\targ: r,\n\t\t\t\tresolve: o,\n\t\t\t\treject: u,\n\t\t\t\tnext: null\n\t\t\t};\n\t\t\tn ? n = n.next = i : (t = n = i, resume(e, r));\n\t\t});\n\t}, \"function\" != typeof e.return && (this.return = void 0);\n}\nAsyncGenerator.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function() {\n\treturn this;\n}, AsyncGenerator.prototype.next = function(e) {\n\treturn this._invoke(\"next\", e);\n}, AsyncGenerator.prototype.throw = function(e) {\n\treturn this._invoke(\"throw\", e);\n}, AsyncGenerator.prototype.return = function(e) {\n\treturn this._invoke(\"return\", e);\n};\nconst entries = Object.entries;\nconst setPrototypeOf = Object.setPrototypeOf;\nconst isFrozen = Object.isFrozen;\nconst getPrototypeOf = Object.getPrototypeOf;\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nlet freeze = Object.freeze;\nlet seal = Object.seal;\nlet create = Object.create;\nlet _ref = typeof Reflect !== \"undefined\" && Reflect;\nlet apply = _ref.apply;\nlet construct = _ref.construct;\nif (!freeze) freeze = function freeze(x) {\n\treturn x;\n};\nif (!seal) seal = function seal(x) {\n\treturn x;\n};\nif (!apply) apply = function apply(func, thisArg) {\n\tfor (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];\n\treturn func.apply(thisArg, args);\n};\nif (!construct) construct = function construct(Func) {\n\tfor (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];\n\treturn new Func(...args);\n};\nconst arrayForEach = unapply(Array.prototype.forEach);\nArray.prototype.indexOf;\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nArray.prototype.slice;\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString = typeof BigInt === \"undefined\" ? null : unapply(BigInt.prototype.toString);\nconst symbolToString = typeof Symbol === \"undefined\" ? null : unapply(Symbol.prototype.toString);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n* Creates a new function that calls the given function with a specified thisArg and arguments.\n*\n* @param func - The function to be wrapped and called.\n* @returns A new function that calls the given function with a specified thisArg and arguments.\n*/\nfunction unapply(func) {\n\treturn function(thisArg) {\n\t\tif (thisArg instanceof RegExp) thisArg.lastIndex = 0;\n\t\tfor (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) args[_key3 - 1] = arguments[_key3];\n\t\treturn apply(func, thisArg, args);\n\t};\n}\n/**\n* Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n*\n* @param func - The constructor function to be wrapped and called.\n* @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n*/\nfunction unconstruct(Func) {\n\treturn function() {\n\t\tfor (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];\n\t\treturn construct(Func, args);\n\t};\n}\n/**\n* Add properties to a lookup table\n*\n* @param set - The set to which elements will be added.\n* @param array - The array containing elements to be added to the set.\n* @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n* @returns The modified set with added elements.\n*/\nfunction addToSet(set, array) {\n\tlet transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;\n\tif (setPrototypeOf) setPrototypeOf(set, null);\n\tif (!arrayIsArray(array)) return set;\n\tlet l = array.length;\n\twhile (l--) {\n\t\tlet element = array[l];\n\t\tif (typeof element === \"string\") {\n\t\t\tconst lcElement = transformCaseFunc(element);\n\t\t\tif (lcElement !== element) {\n\t\t\t\tif (!isFrozen(array)) array[l] = lcElement;\n\t\t\t\telement = lcElement;\n\t\t\t}\n\t\t}\n\t\tset[element] = true;\n\t}\n\treturn set;\n}\n/**\n* Clean up an array to harden against CSPP\n*\n* @param array - The array to be cleaned.\n* @returns The cleaned version of the array\n*/\nfunction cleanArray(array) {\n\tfor (let index = 0; index < array.length; index++) if (!objectHasOwnProperty(array, index)) array[index] = null;\n\treturn array;\n}\n/**\n* Shallow clone an object\n*\n* @param object - The object to be cloned.\n* @returns A new object that copies the original.\n*/\nfunction clone(object) {\n\tconst newObject = create(null);\n\tfor (const _ref2 of entries(object)) {\n\t\tvar _ref3 = _slicedToArray(_ref2, 2);\n\t\tconst property = _ref3[0];\n\t\tconst value = _ref3[1];\n\t\tif (objectHasOwnProperty(object, property)) {\n\t\t\tif (arrayIsArray(value)) newObject[property] = cleanArray(value);\n\t\t\telse if (value && typeof value === \"object\" && value.constructor === Object) newObject[property] = clone(value);\n\t\t\telse newObject[property] = value;\n\t\t}\n\t}\n\treturn newObject;\n}\n/**\n* Convert non-node values into strings without depending on direct property access.\n*\n* @param value - The value to stringify.\n* @returns A string representation of the provided value.\n*/\nfunction stringifyValue(value) {\n\tswitch (typeof value) {\n\t\tcase \"string\": return value;\n\t\tcase \"number\": return numberToString(value);\n\t\tcase \"boolean\": return booleanToString(value);\n\t\tcase \"bigint\": return bigintToString ? bigintToString(value) : \"0\";\n\t\tcase \"symbol\": return symbolToString ? symbolToString(value) : \"Symbol()\";\n\t\tcase \"undefined\": return objectToString(value);\n\t\tcase \"function\":\n\t\tcase \"object\": {\n\t\t\tif (value === null) return objectToString(value);\n\t\t\tconst valueAsRecord = value;\n\t\t\tconst valueToString = lookupGetter(valueAsRecord, \"toString\");\n\t\t\tif (typeof valueToString === \"function\") {\n\t\t\t\tconst stringified = valueToString(valueAsRecord);\n\t\t\t\treturn typeof stringified === \"string\" ? stringified : objectToString(stringified);\n\t\t\t}\n\t\t\treturn objectToString(value);\n\t\t}\n\t\tdefault: return objectToString(value);\n\t}\n}\n/**\n* This method automatically checks if the prop is function or getter and behaves accordingly.\n*\n* @param object - The object to look up the getter function in its prototype chain.\n* @param prop - The property name for which to find the getter function.\n* @returns The getter function found in the prototype chain or a fallback function.\n*/\nfunction lookupGetter(object, prop) {\n\twhile (object !== null) {\n\t\tconst desc = getOwnPropertyDescriptor(object, prop);\n\t\tif (desc) {\n\t\t\tif (desc.get) return unapply(desc.get);\n\t\t\tif (typeof desc.value === \"function\") return unapply(desc.value);\n\t\t}\n\t\tobject = getPrototypeOf(object);\n\t}\n\tfunction fallbackValue() {\n\t\treturn null;\n\t}\n\treturn fallbackValue;\n}\nfunction isRegex(value) {\n\ttry {\n\t\tregExpTest(value, \"\");\n\t\treturn true;\n\t} catch (_unused) {\n\t\treturn false;\n\t}\n}\nconst html$1 = freeze([\n\t\"a\",\n\t\"abbr\",\n\t\"acronym\",\n\t\"address\",\n\t\"area\",\n\t\"article\",\n\t\"aside\",\n\t\"audio\",\n\t\"b\",\n\t\"bdi\",\n\t\"bdo\",\n\t\"big\",\n\t\"blink\",\n\t\"blockquote\",\n\t\"body\",\n\t\"br\",\n\t\"button\",\n\t\"canvas\",\n\t\"caption\",\n\t\"center\",\n\t\"cite\",\n\t\"code\",\n\t\"col\",\n\t\"colgroup\",\n\t\"content\",\n\t\"data\",\n\t\"datalist\",\n\t\"dd\",\n\t\"decorator\",\n\t\"del\",\n\t\"details\",\n\t\"dfn\",\n\t\"dialog\",\n\t\"dir\",\n\t\"div\",\n\t\"dl\",\n\t\"dt\",\n\t\"element\",\n\t\"em\",\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"font\",\n\t\"footer\",\n\t\"form\",\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"head\",\n\t\"header\",\n\t\"hgroup\",\n\t\"hr\",\n\t\"html\",\n\t\"i\",\n\t\"img\",\n\t\"input\",\n\t\"ins\",\n\t\"kbd\",\n\t\"label\",\n\t\"legend\",\n\t\"li\",\n\t\"main\",\n\t\"map\",\n\t\"mark\",\n\t\"marquee\",\n\t\"menu\",\n\t\"menuitem\",\n\t\"meter\",\n\t\"nav\",\n\t\"nobr\",\n\t\"ol\",\n\t\"optgroup\",\n\t\"option\",\n\t\"output\",\n\t\"p\",\n\t\"picture\",\n\t\"pre\",\n\t\"progress\",\n\t\"q\",\n\t\"rp\",\n\t\"rt\",\n\t\"ruby\",\n\t\"s\",\n\t\"samp\",\n\t\"search\",\n\t\"section\",\n\t\"select\",\n\t\"shadow\",\n\t\"slot\",\n\t\"small\",\n\t\"source\",\n\t\"spacer\",\n\t\"span\",\n\t\"strike\",\n\t\"strong\",\n\t\"style\",\n\t\"sub\",\n\t\"summary\",\n\t\"sup\",\n\t\"table\",\n\t\"tbody\",\n\t\"td\",\n\t\"template\",\n\t\"textarea\",\n\t\"tfoot\",\n\t\"th\",\n\t\"thead\",\n\t\"time\",\n\t\"tr\",\n\t\"track\",\n\t\"tt\",\n\t\"u\",\n\t\"ul\",\n\t\"var\",\n\t\"video\",\n\t\"wbr\"\n]);\nconst svg$1 = freeze([\n\t\"svg\",\n\t\"a\",\n\t\"altglyph\",\n\t\"altglyphdef\",\n\t\"altglyphitem\",\n\t\"animatecolor\",\n\t\"animatemotion\",\n\t\"animatetransform\",\n\t\"circle\",\n\t\"clippath\",\n\t\"defs\",\n\t\"desc\",\n\t\"ellipse\",\n\t\"enterkeyhint\",\n\t\"exportparts\",\n\t\"filter\",\n\t\"font\",\n\t\"g\",\n\t\"glyph\",\n\t\"glyphref\",\n\t\"hkern\",\n\t\"image\",\n\t\"inputmode\",\n\t\"line\",\n\t\"lineargradient\",\n\t\"marker\",\n\t\"mask\",\n\t\"metadata\",\n\t\"mpath\",\n\t\"part\",\n\t\"path\",\n\t\"pattern\",\n\t\"polygon\",\n\t\"polyline\",\n\t\"radialgradient\",\n\t\"rect\",\n\t\"stop\",\n\t\"style\",\n\t\"switch\",\n\t\"symbol\",\n\t\"text\",\n\t\"textpath\",\n\t\"title\",\n\t\"tref\",\n\t\"tspan\",\n\t\"view\",\n\t\"vkern\"\n]);\nconst svgFilters = freeze([\n\t\"feBlend\",\n\t\"feColorMatrix\",\n\t\"feComponentTransfer\",\n\t\"feComposite\",\n\t\"feConvolveMatrix\",\n\t\"feDiffuseLighting\",\n\t\"feDisplacementMap\",\n\t\"feDistantLight\",\n\t\"feDropShadow\",\n\t\"feFlood\",\n\t\"feFuncA\",\n\t\"feFuncB\",\n\t\"feFuncG\",\n\t\"feFuncR\",\n\t\"feGaussianBlur\",\n\t\"feImage\",\n\t\"feMerge\",\n\t\"feMergeNode\",\n\t\"feMorphology\",\n\t\"feOffset\",\n\t\"fePointLight\",\n\t\"feSpecularLighting\",\n\t\"feSpotLight\",\n\t\"feTile\",\n\t\"feTurbulence\"\n]);\nconst svgDisallowed = freeze([\n\t\"animate\",\n\t\"color-profile\",\n\t\"cursor\",\n\t\"discard\",\n\t\"font-face\",\n\t\"font-face-format\",\n\t\"font-face-name\",\n\t\"font-face-src\",\n\t\"font-face-uri\",\n\t\"foreignobject\",\n\t\"hatch\",\n\t\"hatchpath\",\n\t\"mesh\",\n\t\"meshgradient\",\n\t\"meshpatch\",\n\t\"meshrow\",\n\t\"missing-glyph\",\n\t\"script\",\n\t\"set\",\n\t\"solidcolor\",\n\t\"unknown\",\n\t\"use\"\n]);\nconst mathMl$1 = freeze([\n\t\"math\",\n\t\"menclose\",\n\t\"merror\",\n\t\"mfenced\",\n\t\"mfrac\",\n\t\"mglyph\",\n\t\"mi\",\n\t\"mlabeledtr\",\n\t\"mmultiscripts\",\n\t\"mn\",\n\t\"mo\",\n\t\"mover\",\n\t\"mpadded\",\n\t\"mphantom\",\n\t\"mroot\",\n\t\"mrow\",\n\t\"ms\",\n\t\"mspace\",\n\t\"msqrt\",\n\t\"mstyle\",\n\t\"msub\",\n\t\"msup\",\n\t\"msubsup\",\n\t\"mtable\",\n\t\"mtd\",\n\t\"mtext\",\n\t\"mtr\",\n\t\"munder\",\n\t\"munderover\",\n\t\"mprescripts\"\n]);\nconst mathMlDisallowed = freeze([\n\t\"maction\",\n\t\"maligngroup\",\n\t\"malignmark\",\n\t\"mlongdiv\",\n\t\"mscarries\",\n\t\"mscarry\",\n\t\"msgroup\",\n\t\"mstack\",\n\t\"msline\",\n\t\"msrow\",\n\t\"semantics\",\n\t\"annotation\",\n\t\"annotation-xml\",\n\t\"mprescripts\",\n\t\"none\"\n]);\nconst text = freeze([\"#text\"]);\nconst html = freeze([\n\t\"accept\",\n\t\"action\",\n\t\"align\",\n\t\"alt\",\n\t\"autocapitalize\",\n\t\"autocomplete\",\n\t\"autopictureinpicture\",\n\t\"autoplay\",\n\t\"background\",\n\t\"bgcolor\",\n\t\"border\",\n\t\"capture\",\n\t\"cellpadding\",\n\t\"cellspacing\",\n\t\"checked\",\n\t\"cite\",\n\t\"class\",\n\t\"clear\",\n\t\"color\",\n\t\"cols\",\n\t\"colspan\",\n\t\"command\",\n\t\"commandfor\",\n\t\"controls\",\n\t\"controlslist\",\n\t\"coords\",\n\t\"crossorigin\",\n\t\"datetime\",\n\t\"decoding\",\n\t\"default\",\n\t\"dir\",\n\t\"disabled\",\n\t\"disablepictureinpicture\",\n\t\"disableremoteplayback\",\n\t\"download\",\n\t\"draggable\",\n\t\"enctype\",\n\t\"enterkeyhint\",\n\t\"exportparts\",\n\t\"face\",\n\t\"for\",\n\t\"headers\",\n\t\"height\",\n\t\"hidden\",\n\t\"high\",\n\t\"href\",\n\t\"hreflang\",\n\t\"id\",\n\t\"inert\",\n\t\"inputmode\",\n\t\"integrity\",\n\t\"ismap\",\n\t\"kind\",\n\t\"label\",\n\t\"lang\",\n\t\"list\",\n\t\"loading\",\n\t\"loop\",\n\t\"low\",\n\t\"max\",\n\t\"maxlength\",\n\t\"media\",\n\t\"method\",\n\t\"min\",\n\t\"minlength\",\n\t\"multiple\",\n\t\"muted\",\n\t\"name\",\n\t\"nonce\",\n\t\"noshade\",\n\t\"novalidate\",\n\t\"nowrap\",\n\t\"open\",\n\t\"optimum\",\n\t\"part\",\n\t\"pattern\",\n\t\"placeholder\",\n\t\"playsinline\",\n\t\"popover\",\n\t\"popovertarget\",\n\t\"popovertargetaction\",\n\t\"poster\",\n\t\"preload\",\n\t\"pubdate\",\n\t\"radiogroup\",\n\t\"readonly\",\n\t\"rel\",\n\t\"required\",\n\t\"rev\",\n\t\"reversed\",\n\t\"role\",\n\t\"rows\",\n\t\"rowspan\",\n\t\"spellcheck\",\n\t\"scope\",\n\t\"selected\",\n\t\"shape\",\n\t\"size\",\n\t\"sizes\",\n\t\"slot\",\n\t\"span\",\n\t\"srclang\",\n\t\"start\",\n\t\"src\",\n\t\"srcset\",\n\t\"step\",\n\t\"style\",\n\t\"summary\",\n\t\"tabindex\",\n\t\"title\",\n\t\"translate\",\n\t\"type\",\n\t\"usemap\",\n\t\"valign\",\n\t\"value\",\n\t\"width\",\n\t\"wrap\",\n\t\"xmlns\"\n]);\nconst svg = freeze([\n\t\"accent-height\",\n\t\"accumulate\",\n\t\"additive\",\n\t\"alignment-baseline\",\n\t\"amplitude\",\n\t\"ascent\",\n\t\"attributename\",\n\t\"attributetype\",\n\t\"azimuth\",\n\t\"basefrequency\",\n\t\"baseline-shift\",\n\t\"begin\",\n\t\"bias\",\n\t\"by\",\n\t\"class\",\n\t\"clip\",\n\t\"clippathunits\",\n\t\"clip-path\",\n\t\"clip-rule\",\n\t\"color\",\n\t\"color-interpolation\",\n\t\"color-interpolation-filters\",\n\t\"color-profile\",\n\t\"color-rendering\",\n\t\"cx\",\n\t\"cy\",\n\t\"d\",\n\t\"dx\",\n\t\"dy\",\n\t\"diffuseconstant\",\n\t\"direction\",\n\t\"display\",\n\t\"divisor\",\n\t\"dominant-baseline\",\n\t\"dur\",\n\t\"edgemode\",\n\t\"elevation\",\n\t\"end\",\n\t\"exponent\",\n\t\"fill\",\n\t\"fill-opacity\",\n\t\"fill-rule\",\n\t\"filter\",\n\t\"filterunits\",\n\t\"flood-color\",\n\t\"flood-opacity\",\n\t\"font-family\",\n\t\"font-size\",\n\t\"font-size-adjust\",\n\t\"font-stretch\",\n\t\"font-style\",\n\t\"font-variant\",\n\t\"font-weight\",\n\t\"fx\",\n\t\"fy\",\n\t\"g1\",\n\t\"g2\",\n\t\"glyph-name\",\n\t\"glyphref\",\n\t\"gradientunits\",\n\t\"gradienttransform\",\n\t\"height\",\n\t\"href\",\n\t\"id\",\n\t\"image-rendering\",\n\t\"in\",\n\t\"in2\",\n\t\"intercept\",\n\t\"k\",\n\t\"k1\",\n\t\"k2\",\n\t\"k3\",\n\t\"k4\",\n\t\"kerning\",\n\t\"keypoints\",\n\t\"keysplines\",\n\t\"keytimes\",\n\t\"lang\",\n\t\"lengthadjust\",\n\t\"letter-spacing\",\n\t\"kernelmatrix\",\n\t\"kernelunitlength\",\n\t\"lighting-color\",\n\t\"local\",\n\t\"marker-end\",\n\t\"marker-mid\",\n\t\"marker-start\",\n\t\"markerheight\",\n\t\"markerunits\",\n\t\"markerwidth\",\n\t\"maskcontentunits\",\n\t\"maskunits\",\n\t\"max\",\n\t\"mask\",\n\t\"mask-type\",\n\t\"media\",\n\t\"method\",\n\t\"mode\",\n\t\"min\",\n\t\"name\",\n\t\"numoctaves\",\n\t\"offset\",\n\t\"operator\",\n\t\"opacity\",\n\t\"order\",\n\t\"orient\",\n\t\"orientation\",\n\t\"origin\",\n\t\"overflow\",\n\t\"paint-order\",\n\t\"path\",\n\t\"pathlength\",\n\t\"patterncontentunits\",\n\t\"patterntransform\",\n\t\"patternunits\",\n\t\"pointer-events\",\n\t\"points\",\n\t\"preservealpha\",\n\t\"preserveaspectratio\",\n\t\"primitiveunits\",\n\t\"r\",\n\t\"rx\",\n\t\"ry\",\n\t\"radius\",\n\t\"refx\",\n\t\"refy\",\n\t\"repeatcount\",\n\t\"repeatdur\",\n\t\"restart\",\n\t\"result\",\n\t\"rotate\",\n\t\"scale\",\n\t\"seed\",\n\t\"shape-rendering\",\n\t\"slope\",\n\t\"specularconstant\",\n\t\"specularexponent\",\n\t\"spreadmethod\",\n\t\"startoffset\",\n\t\"stddeviation\",\n\t\"stitchtiles\",\n\t\"stop-color\",\n\t\"stop-opacity\",\n\t\"stroke-dasharray\",\n\t\"stroke-dashoffset\",\n\t\"stroke-linecap\",\n\t\"stroke-linejoin\",\n\t\"stroke-miterlimit\",\n\t\"stroke-opacity\",\n\t\"stroke\",\n\t\"stroke-width\",\n\t\"style\",\n\t\"surfacescale\",\n\t\"systemlanguage\",\n\t\"tabindex\",\n\t\"tablevalues\",\n\t\"targetx\",\n\t\"targety\",\n\t\"transform\",\n\t\"transform-origin\",\n\t\"text-anchor\",\n\t\"text-decoration\",\n\t\"text-orientation\",\n\t\"text-rendering\",\n\t\"textlength\",\n\t\"type\",\n\t\"u1\",\n\t\"u2\",\n\t\"unicode\",\n\t\"values\",\n\t\"vector-effect\",\n\t\"viewbox\",\n\t\"visibility\",\n\t\"version\",\n\t\"vert-adv-y\",\n\t\"vert-origin-x\",\n\t\"vert-origin-y\",\n\t\"width\",\n\t\"word-spacing\",\n\t\"wrap\",\n\t\"writing-mode\",\n\t\"xchannelselector\",\n\t\"ychannelselector\",\n\t\"x\",\n\t\"x1\",\n\t\"x2\",\n\t\"xmlns\",\n\t\"y\",\n\t\"y1\",\n\t\"y2\",\n\t\"z\",\n\t\"zoomandpan\"\n]);\nconst mathMl = freeze([\n\t\"accent\",\n\t\"accentunder\",\n\t\"align\",\n\t\"bevelled\",\n\t\"close\",\n\t\"columnalign\",\n\t\"columnlines\",\n\t\"columnspacing\",\n\t\"columnspan\",\n\t\"denomalign\",\n\t\"depth\",\n\t\"dir\",\n\t\"display\",\n\t\"displaystyle\",\n\t\"encoding\",\n\t\"fence\",\n\t\"frame\",\n\t\"height\",\n\t\"href\",\n\t\"id\",\n\t\"largeop\",\n\t\"length\",\n\t\"linethickness\",\n\t\"lquote\",\n\t\"lspace\",\n\t\"mathbackground\",\n\t\"mathcolor\",\n\t\"mathsize\",\n\t\"mathvariant\",\n\t\"maxsize\",\n\t\"minsize\",\n\t\"movablelimits\",\n\t\"notation\",\n\t\"numalign\",\n\t\"open\",\n\t\"rowalign\",\n\t\"rowlines\",\n\t\"rowspacing\",\n\t\"rowspan\",\n\t\"rspace\",\n\t\"rquote\",\n\t\"scriptlevel\",\n\t\"scriptminsize\",\n\t\"scriptsizemultiplier\",\n\t\"selection\",\n\t\"separator\",\n\t\"separators\",\n\t\"stretchy\",\n\t\"subscriptshift\",\n\t\"supscriptshift\",\n\t\"symmetric\",\n\t\"voffset\",\n\t\"width\",\n\t\"xmlns\"\n]);\nconst xml = freeze([\n\t\"xlink:href\",\n\t\"xml:id\",\n\t\"xlink:title\",\n\t\"xml:space\",\n\t\"xmlns:xlink\"\n]);\nconst MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nconst ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/);\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\nconst ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nconst COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nconst FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nconst SELF_CLOSING_TAG = seal(/\\/>/i);\nconst NODE_TYPE = {\n\telement: 1,\n\tattribute: 2,\n\ttext: 3,\n\tcdataSection: 4,\n\tentityReference: 5,\n\tentityNode: 6,\n\tprocessingInstruction: 7,\n\tcomment: 8,\n\tdocument: 9,\n\tdocumentType: 10,\n\tdocumentFragment: 11,\n\tnotation: 12\n};\nconst LITERAL_TEXT_ELEMENT_NAMES = [\n\t\"style\",\n\t\"script\",\n\t\"xmp\",\n\t\"iframe\",\n\t\"noembed\",\n\t\"noframes\",\n\t\"plaintext\",\n\t\"noscript\"\n];\nconst LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, LITERAL_TEXT_ELEMENT_NAMES));\nconst LITERAL_TEXT_CLOSE = function() {\n\tconst map = {};\n\tarrayForEach(LITERAL_TEXT_ELEMENT_NAMES, (name) => {\n\t\tmap[name] = seal(new RegExp(\"</\" + name + \"(?=[\\\\t\\\\n\\\\f\\\\r />])\", \"i\"));\n\t});\n\treturn freeze(map);\n}();\nconst getGlobal = function getGlobal() {\n\treturn typeof window === \"undefined\" ? null : window;\n};\n/**\n* Creates a no-op policy for internal use only.\n* Don't export this function outside this module!\n* @param trustedTypes The policy factory.\n* @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n* @return The policy created (or null, if Trusted Types\n* are not supported or creating the policy failed).\n*/\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n\tif (typeof trustedTypes !== \"object\" || typeof trustedTypes.createPolicy !== \"function\") return null;\n\tlet suffix = null;\n\tconst ATTR_NAME = \"data-tt-policy-suffix\";\n\tif (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) suffix = purifyHostElement.getAttribute(ATTR_NAME);\n\tconst policyName = \"dompurify\" + (suffix ? \"#\" + suffix : \"\");\n\ttry {\n\t\treturn trustedTypes.createPolicy(policyName, {\n\t\t\tcreateHTML(html) {\n\t\t\t\treturn html;\n\t\t\t},\n\t\t\tcreateScriptURL(scriptUrl) {\n\t\t\t\treturn scriptUrl;\n\t\t\t}\n\t\t});\n\t} catch (_) {\n\t\tconsole.warn(\"TrustedTypes policy \" + policyName + \" could not be created.\");\n\t\treturn null;\n\t}\n};\nconst _createHooksMap = function _createHooksMap() {\n\treturn {\n\t\tafterSanitizeAttributes: [],\n\t\tafterSanitizeElements: [],\n\t\tafterSanitizeShadowDOM: [],\n\t\tbeforeSanitizeAttributes: [],\n\t\tbeforeSanitizeElements: [],\n\t\tbeforeSanitizeShadowDOM: [],\n\t\tuponSanitizeAttribute: [],\n\t\tuponSanitizeElement: [],\n\t\tuponSanitizeShadowNode: []\n\t};\n};\n/**\n* Resolve a set-valued configuration option: a fresh set built from\n* cfg[key] when it is an own array property (seeded with a clone of\n* options.base when given, case-normalized via options.transform),\n* the fallback set otherwise.\n*\n* @param cfg the cloned, prototype-free configuration object\n* @param key the configuration property to read\n* @param fallback the set to use when the option is absent or not an array\n* @param options transform and optional base set to merge into\n* @returns the resolved set\n*/\nconst _resolveSetOption = function _resolveSetOption(cfg, key, fallback, options) {\n\treturn objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;\n};\n/**\n* Resolve an object-valued configuration option: a prototype-free clone\n* of cfg[key] when it is an own, truthy object property, else a fresh\n* fallback built by makeFallback (fresh on every parse, so a previous\n* parse can never leak state into the next one).\n*\n* @param cfg the cloned, prototype-free configuration object\n* @param key the configuration property to read\n* @param makeFallback builds the fallback value when the option is absent\n* @returns the resolved object\n*/\nconst _resolveObjectOption = function _resolveObjectOption(cfg, key, makeFallback) {\n\tconst value = objectHasOwnProperty(cfg, key) ? cfg[key] : void 0;\n\treturn value && typeof value === \"object\" ? clone(value) : makeFallback();\n};\nfunction createDOMPurify() {\n\tlet window = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();\n\tconst DOMPurify = (root) => createDOMPurify(root);\n\tDOMPurify.version = \"3.4.16\";\n\tDOMPurify.removed = [];\n\tif (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n\t\tDOMPurify.isSupported = false;\n\t\treturn DOMPurify;\n\t}\n\tlet document = window.document;\n\tconst originalDocument = document;\n\tconst currentScript = originalDocument.currentScript;\n\twindow.DocumentFragment;\n\tconst HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter;\n\twindow.NamedNodeMap === void 0 && (window.NamedNodeMap || window.MozNamedAttrMap);\n\twindow.HTMLFormElement;\n\tconst DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;\n\tconst ElementPrototype = Element.prototype;\n\tconst cloneNode = lookupGetter(ElementPrototype, \"cloneNode\");\n\tconst remove = lookupGetter(ElementPrototype, \"remove\");\n\tconst removeAttributeNode = lookupGetter(ElementPrototype, \"removeAttributeNode\");\n\tconst getNextSibling = lookupGetter(ElementPrototype, \"nextSibling\");\n\tconst getChildNodes = lookupGetter(ElementPrototype, \"childNodes\");\n\tconst getParentNode = lookupGetter(ElementPrototype, \"parentNode\");\n\tconst getShadowRoot = lookupGetter(ElementPrototype, \"shadowRoot\");\n\tconst getAttributes = lookupGetter(ElementPrototype, \"attributes\");\n\tconst getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, \"nodeType\") : null;\n\tconst getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, \"nodeName\") : null;\n\tconst getOwnerDocument = Node && Node.prototype ? lookupGetter(Node.prototype, \"ownerDocument\") : null;\n\tconst _readNodeType = function _readNodeType(node) {\n\t\treturn getNodeType ? getNodeType(node) : node.nodeType;\n\t};\n\tconst _readNodeName = function _readNodeName(node) {\n\t\treturn getNodeName ? getNodeName(node) : node.nodeName;\n\t};\n\tif (typeof HTMLTemplateElement === \"function\") {\n\t\tconst template = document.createElement(\"template\");\n\t\tif (template.content && template.content.ownerDocument) document = template.content.ownerDocument;\n\t}\n\tlet trustedTypesPolicy;\n\tlet emptyHTML = \"\";\n\tlet defaultTrustedTypesPolicy;\n\tlet defaultTrustedTypesPolicyResolved = false;\n\tlet IN_TRUSTED_TYPES_POLICY = 0;\n\tconst _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {\n\t\tif (IN_TRUSTED_TYPES_POLICY > 0) throw typeErrorCreate(\"A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the \\\"DOMPurify and Trusted Types\\\" section of the README.\");\n\t};\n\tconst _createTrustedHTML = function _createTrustedHTML(html) {\n\t\t_assertNotInTrustedTypesPolicy();\n\t\tIN_TRUSTED_TYPES_POLICY++;\n\t\ttry {\n\t\t\treturn trustedTypesPolicy.createHTML(html);\n\t\t} finally {\n\t\t\tIN_TRUSTED_TYPES_POLICY--;\n\t\t}\n\t};\n\tconst _createTrustedScriptURL = function _createTrustedScriptURL(scriptUrl) {\n\t\t_assertNotInTrustedTypesPolicy();\n\t\tIN_TRUSTED_TYPES_POLICY++;\n\t\ttry {\n\t\t\treturn trustedTypesPolicy.createScriptURL(scriptUrl);\n\t\t} finally {\n\t\t\tIN_TRUSTED_TYPES_POLICY--;\n\t\t}\n\t};\n\tconst _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy() {\n\t\tif (!defaultTrustedTypesPolicyResolved) {\n\t\t\tdefaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n\t\t\tdefaultTrustedTypesPolicyResolved = true;\n\t\t}\n\t\treturn defaultTrustedTypesPolicy;\n\t};\n\tconst _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n\tconst importNode = originalDocument.importNode;\n\tlet hooks = _createHooksMap();\n\t/**\n\t* Expose whether this browser supports running the full DOMPurify.\n\t*/\n\tDOMPurify.isSupported = typeof entries === \"function\" && typeof getParentNode === \"function\" && implementation && implementation.createHTMLDocument !== void 0;\n\tconst MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, TMPLIT_EXPR$1 = TMPLIT_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE, CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n\tlet IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n\t/**\n\t* We consider the elements and attributes below to be safe. Ideally\n\t* don't add any new ones but feel free to remove unwanted ones.\n\t*/\n\tlet ALLOWED_TAGS = null;\n\tconst DEFAULT_ALLOWED_TAGS = addToSet({}, [\n\t\t...html$1,\n\t\t...svg$1,\n\t\t...svgFilters,\n\t\t...mathMl$1,\n\t\t...text\n\t]);\n\tlet ALLOWED_ATTR = null;\n\tconst DEFAULT_ALLOWED_ATTR = addToSet({}, [\n\t\t...html,\n\t\t...svg,\n\t\t...mathMl,\n\t\t...xml\n\t]);\n\tlet CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n\t\ttagNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tattributeNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tallowCustomizedBuiltInElements: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: false\n\t\t}\n\t}));\n\tlet FORBID_TAGS = null;\n\tlet FORBID_ATTR = null;\n\tconst EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n\t\ttagCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tattributeCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t}\n\t}));\n\tlet ALLOW_ARIA_ATTR = true;\n\tlet ALLOW_DATA_ATTR = true;\n\tlet ALLOW_UNKNOWN_PROTOCOLS = false;\n\tlet ALLOW_SELF_CLOSE_IN_ATTR = true;\n\tlet SAFE_FOR_TEMPLATES = false;\n\tlet SAFE_FOR_XML = true;\n\tlet WHOLE_DOCUMENT = false;\n\tlet SET_CONFIG = false;\n\tlet SET_CONFIG_ALLOWED_TAGS = null;\n\tlet SET_CONFIG_ALLOWED_ATTR = null;\n\tlet FORCE_BODY = false;\n\tlet RETURN_DOM = false;\n\tlet RETURN_DOM_FRAGMENT = false;\n\tlet RETURN_TRUSTED_TYPE = false;\n\tlet SANITIZE_DOM = true;\n\tlet SANITIZE_NAMED_PROPS = false;\n\tconst SANITIZE_NAMED_PROPS_PREFIX = \"user-content-\";\n\tlet KEEP_CONTENT = true;\n\tlet IN_PLACE = false;\n\tlet USE_PROFILES = {};\n\tlet FORBID_CONTENTS = null;\n\tconst DEFAULT_FORBID_CONTENTS = addToSet({}, [\n\t\t\"annotation-xml\",\n\t\t\"audio\",\n\t\t\"colgroup\",\n\t\t\"desc\",\n\t\t\"foreignobject\",\n\t\t\"head\",\n\t\t\"iframe\",\n\t\t\"math\",\n\t\t\"mi\",\n\t\t\"mn\",\n\t\t\"mo\",\n\t\t\"ms\",\n\t\t\"mtext\",\n\t\t\"noembed\",\n\t\t\"noframes\",\n\t\t\"noscript\",\n\t\t\"plaintext\",\n\t\t\"script\",\n\t\t\"selectedcontent\",\n\t\t\"style\",\n\t\t\"svg\",\n\t\t\"template\",\n\t\t\"thead\",\n\t\t\"title\",\n\t\t\"video\",\n\t\t\"xmp\"\n\t]);\n\tlet DATA_URI_TAGS = null;\n\tconst DEFAULT_DATA_URI_TAGS = addToSet({}, [\n\t\t\"audio\",\n\t\t\"video\",\n\t\t\"img\",\n\t\t\"source\",\n\t\t\"image\",\n\t\t\"track\"\n\t]);\n\tlet URI_SAFE_ATTRIBUTES = null;\n\tconst DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n\t\t\"alt\",\n\t\t\"class\",\n\t\t\"for\",\n\t\t\"id\",\n\t\t\"label\",\n\t\t\"name\",\n\t\t\"pattern\",\n\t\t\"placeholder\",\n\t\t\"role\",\n\t\t\"summary\",\n\t\t\"title\",\n\t\t\"value\",\n\t\t\"style\",\n\t\t\"xmlns\"\n\t]);\n\tconst MATHML_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\";\n\tconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\n\tconst HTML_NAMESPACE = \"http://www.w3.org/1999/xhtml\";\n\tlet NAMESPACE = HTML_NAMESPACE;\n\tlet IS_EMPTY_INPUT = false;\n\tlet ALLOWED_NAMESPACES = null;\n\tconst DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [\n\t\tMATHML_NAMESPACE,\n\t\tSVG_NAMESPACE,\n\t\tHTML_NAMESPACE\n\t], stringToString);\n\tconst DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze([\n\t\t\"mi\",\n\t\t\"mo\",\n\t\t\"mn\",\n\t\t\"ms\",\n\t\t\"mtext\"\n\t]);\n\tlet MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);\n\tconst DEFAULT_HTML_INTEGRATION_POINTS = freeze([\"annotation-xml\"]);\n\tlet HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);\n\tconst COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n\t\t\"title\",\n\t\t\"style\",\n\t\t\"font\",\n\t\t\"a\",\n\t\t\"script\"\n\t]);\n\tlet PARSER_MEDIA_TYPE = null;\n\tconst SUPPORTED_PARSER_MEDIA_TYPES = [\"application/xhtml+xml\", \"text/html\"];\n\tconst DEFAULT_PARSER_MEDIA_TYPE = \"text/html\";\n\tlet transformCaseFunc = null;\n\tlet CONFIG = null;\n\tconst formElement = document.createElement(\"form\");\n\tconst isRegexOrFunction = function isRegexOrFunction(testValue) {\n\t\treturn testValue instanceof RegExp || testValue instanceof Function;\n\t};\n\t/**\n\t* _parseConfig\n\t*\n\t* @param cfg optional config literal\n\t*/\n\tconst _parseConfig = function _parseConfig() {\n\t\tlet cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n\t\tif (CONFIG && CONFIG === cfg) return;\n\t\tif (!cfg || typeof cfg !== \"object\") cfg = {};\n\t\tcfg = clone(cfg);\n\t\tPARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\t\ttransformCaseFunc = PARSER_MEDIA_TYPE === \"application/xhtml+xml\" ? stringToString : stringToLowerCase;\n\t\tALLOWED_TAGS = _resolveSetOption(cfg, \"ALLOWED_TAGS\", DEFAULT_ALLOWED_TAGS, { transform: transformCaseFunc });\n\t\tALLOWED_ATTR = _resolveSetOption(cfg, \"ALLOWED_ATTR\", DEFAULT_ALLOWED_ATTR, { transform: transformCaseFunc });\n\t\tALLOWED_NAMESPACES = _resolveSetOption(cfg, \"ALLOWED_NAMESPACES\", DEFAULT_ALLOWED_NAMESPACES, { transform: stringToString });\n\t\tURI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, \"ADD_URI_SAFE_ATTR\", DEFAULT_URI_SAFE_ATTRIBUTES, {\n\t\t\ttransform: transformCaseFunc,\n\t\t\tbase: DEFAULT_URI_SAFE_ATTRIBUTES\n\t\t});\n\t\tDATA_URI_TAGS = _resolveSetOption(cfg, \"ADD_DATA_URI_TAGS\", DEFAULT_DATA_URI_TAGS, {\n\t\t\ttransform: transformCaseFunc,\n\t\t\tbase: DEFAULT_DATA_URI_TAGS\n\t\t});\n\t\tFORBID_CONTENTS = _resolveSetOption(cfg, \"FORBID_CONTENTS\", DEFAULT_FORBID_CONTENTS, { transform: transformCaseFunc });\n\t\tFORBID_TAGS = _resolveSetOption(cfg, \"FORBID_TAGS\", clone({}), { transform: transformCaseFunc });\n\t\tFORBID_ATTR = _resolveSetOption(cfg, \"FORBID_ATTR\", clone({}), { transform: transformCaseFunc });\n\t\tUSE_PROFILES = objectHasOwnProperty(cfg, \"USE_PROFILES\") ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === \"object\" ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;\n\t\tALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n\t\tALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n\t\tALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n\t\tALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;\n\t\tSAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n\t\tSAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;\n\t\tWHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n\t\tRETURN_DOM = cfg.RETURN_DOM || false;\n\t\tRETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n\t\tRETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n\t\tFORCE_BODY = cfg.FORCE_BODY || false;\n\t\tSANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n\t\tSANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;\n\t\tKEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n\t\tIN_PLACE = cfg.IN_PLACE || false;\n\t\tIS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI;\n\t\tNAMESPACE = typeof cfg.NAMESPACE === \"string\" ? cfg.NAMESPACE : HTML_NAMESPACE;\n\t\tMATHML_TEXT_INTEGRATION_POINTS = _resolveObjectOption(cfg, \"MATHML_TEXT_INTEGRATION_POINTS\", () => addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS));\n\t\tHTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, \"HTML_INTEGRATION_POINTS\", () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS));\n\t\tconst customElementHandling = _resolveObjectOption(cfg, \"CUSTOM_ELEMENT_HANDLING\", () => create(null));\n\t\tCUSTOM_ELEMENT_HANDLING = create(null);\n\t\tif (objectHasOwnProperty(customElementHandling, \"tagNameCheck\") && isRegexOrFunction(customElementHandling.tagNameCheck)) CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck;\n\t\tif (objectHasOwnProperty(customElementHandling, \"attributeNameCheck\") && isRegexOrFunction(customElementHandling.attributeNameCheck)) CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck;\n\t\tif (objectHasOwnProperty(customElementHandling, \"allowCustomizedBuiltInElements\") && typeof customElementHandling.allowCustomizedBuiltInElements === \"boolean\") CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements;\n\t\tseal(CUSTOM_ELEMENT_HANDLING);\n\t\tif (SAFE_FOR_TEMPLATES) ALLOW_DATA_ATTR = false;\n\t\tif (RETURN_DOM_FRAGMENT) RETURN_DOM = true;\n\t\tif (USE_PROFILES) {\n\t\t\tALLOWED_TAGS = addToSet({}, text);\n\t\t\tALLOWED_ATTR = create(null);\n\t\t\tif (USE_PROFILES.html === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, html$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, html);\n\t\t\t}\n\t\t\tif (USE_PROFILES.svg === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svg$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t\tif (USE_PROFILES.svgFilters === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svgFilters);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t\tif (USE_PROFILES.mathMl === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, mathMl$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, mathMl);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t}\n\t\tEXTRA_ELEMENT_HANDLING.tagCheck = null;\n\t\tEXTRA_ELEMENT_HANDLING.attributeCheck = null;\n\t\tif (objectHasOwnProperty(cfg, \"ADD_TAGS\")) {\n\t\t\tif (typeof cfg.ADD_TAGS === \"function\") EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n\t\t\telse if (arrayIsArray(cfg.ADD_TAGS)) {\n\t\t\t\tif (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) ALLOWED_TAGS = clone(ALLOWED_TAGS);\n\t\t\t\taddToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n\t\t\t}\n\t\t}\n\t\tif (objectHasOwnProperty(cfg, \"ADD_ATTR\")) {\n\t\t\tif (typeof cfg.ADD_ATTR === \"function\") EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n\t\t\telse if (arrayIsArray(cfg.ADD_ATTR)) {\n\t\t\t\tif (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) ALLOWED_ATTR = clone(ALLOWED_ATTR);\n\t\t\t\taddToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n\t\t\t}\n\t\t}\n\t\tif (objectHasOwnProperty(cfg, \"ADD_FORBID_CONTENTS\") && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {\n\t\t\tif (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);\n\t\t\taddToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n\t\t}\n\t\tif (KEEP_CONTENT) ALLOWED_TAGS[\"#text\"] = true;\n\t\tif (WHOLE_DOCUMENT) addToSet(ALLOWED_TAGS, [\n\t\t\t\"html\",\n\t\t\t\"head\",\n\t\t\t\"body\"\n\t\t]);\n\t\tif (ALLOWED_TAGS.table) {\n\t\t\taddToSet(ALLOWED_TAGS, [\"tbody\"]);\n\t\t\tdelete FORBID_TAGS.tbody;\n\t\t}\n\t\tif (cfg.TRUSTED_TYPES_POLICY) {\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== \"function\") throw typeErrorCreate(\"TRUSTED_TYPES_POLICY configuration option must provide a \\\"createHTML\\\" hook.\");\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== \"function\") throw typeErrorCreate(\"TRUSTED_TYPES_POLICY configuration option must provide a \\\"createScriptURL\\\" hook.\");\n\t\t\tconst previousTrustedTypesPolicy = trustedTypesPolicy;\n\t\t\ttrustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\t\t\ttry {\n\t\t\t\temptyHTML = _createTrustedHTML(\"\");\n\t\t\t} catch (error) {\n\t\t\t\ttrustedTypesPolicy = previousTrustedTypesPolicy;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} else if (cfg.TRUSTED_TYPES_POLICY === null) {\n\t\t\ttrustedTypesPolicy = void 0;\n\t\t\temptyHTML = \"\";\n\t\t} else {\n\t\t\tif (trustedTypesPolicy === void 0) trustedTypesPolicy = _getDefaultTrustedTypesPolicy();\n\t\t\tif (trustedTypesPolicy && typeof emptyHTML === \"string\") emptyHTML = _createTrustedHTML(\"\");\n\t\t}\n\t\tif (freeze) freeze(cfg);\n\t\tCONFIG = cfg;\n\t};\n\tconst ALL_SVG_TAGS = addToSet({}, [\n\t\t...svg$1,\n\t\t...svgFilters,\n\t\t...svgDisallowed\n\t]);\n\tconst ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\t/**\n\t* Namespace rules for an element in the SVG namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === HTML_NAMESPACE) return tagName === \"svg\";\n\t\tif (parent.namespaceURI === MATHML_NAMESPACE) return tagName === \"svg\" && (parentTagName === \"annotation-xml\" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n\t\treturn Boolean(ALL_SVG_TAGS[tagName]);\n\t};\n\t/**\n\t* Namespace rules for an element in the MathML namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === HTML_NAMESPACE) return tagName === \"math\";\n\t\tif (parent.namespaceURI === SVG_NAMESPACE) return tagName === \"math\" && HTML_INTEGRATION_POINTS[parentTagName];\n\t\treturn Boolean(ALL_MATHML_TAGS[tagName]);\n\t};\n\t/**\n\t* Namespace rules for an element in the HTML namespace.\n\t*\n\t* @param tagName the element's lowercase tag name\n\t* @param parent the (possibly simulated) parent node\n\t* @param parentTagName the parent's lowercase tag name\n\t* @returns true if a spec-compliant parser could produce this element\n\t*/\n\tconst _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {\n\t\tif (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) return false;\n\t\tif (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) return false;\n\t\treturn !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n\t};\n\t/**\n\t* @param element a DOM element whose namespace is being checked\n\t* @returns Return false if the element has a\n\t*  namespace that a spec-compliant parser would never\n\t*  return. Return true otherwise.\n\t*/\n\tconst _checkValidNamespace = function _checkValidNamespace(element) {\n\t\tlet parent = getParentNode(element);\n\t\tif (!parent || !parent.tagName) parent = {\n\t\t\tnamespaceURI: NAMESPACE,\n\t\t\ttagName: \"template\"\n\t\t};\n\t\tconst tagName = stringToLowerCase(element.tagName);\n\t\tconst parentTagName = stringToLowerCase(parent.tagName);\n\t\tif (!ALLOWED_NAMESPACES[element.namespaceURI]) return false;\n\t\tif (element.namespaceURI === SVG_NAMESPACE) return _checkSvgNamespace(tagName, parent, parentTagName);\n\t\tif (element.namespaceURI === MATHML_NAMESPACE) return _checkMathMlNamespace(tagName, parent, parentTagName);\n\t\tif (element.namespaceURI === HTML_NAMESPACE) return _checkHtmlNamespace(tagName, parent, parentTagName);\n\t\tif (PARSER_MEDIA_TYPE === \"application/xhtml+xml\" && ALLOWED_NAMESPACES[element.namespaceURI]) return true;\n\t\treturn false;\n\t};\n\t/**\n\t* _forceRemove\n\t*\n\t* @param node a DOM node\n\t*/\n\tconst _forceRemove = function _forceRemove(node) {\n\t\tarrayPush(DOMPurify.removed, { element: node });\n\t\ttry {\n\t\t\tgetParentNode(node).removeChild(node);\n\t\t} catch (_) {\n\t\t\tremove(node);\n\t\t\tif (!getParentNode(node)) throw typeErrorCreate(\"a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place\");\n\t\t}\n\t};\n\t/**\n\t* _stripAttributeNode\n\t*\n\t* Remove a single Attr node case/namespace-exactly on an attribute-teardown\n\t* path. Name-based removeAttribute() ASCII-lowercases its lookup key for an\n\t* HTML element in an HTML document and so silently misses a case-preserved\n\t* handler (e.g. `ONERROR` off an XML/XHTML import) - the same defect\n\t* _removeAttribute() was fixed for, which a name-based call would reintroduce\n\t* on these IN_PLACE teardown paths. Unlike _removeAttribute this does not\n\t* record into DOMPurify.removed: the neutralize passes intentionally do not\n\t* book-keep. A clobbered/detached node falls back to best-effort name-based\n\t* removal.\n\t*\n\t* @param element the element to strip the attribute from\n\t* @param attribute the Attr node to remove\n\t* @param name the attribute's name, for the fallback path\n\t*/\n\tconst _stripAttributeNode = function _stripAttributeNode(element, attribute, name) {\n\t\ttry {\n\t\t\tremoveAttributeNode(element, attribute);\n\t\t} catch (_) {\n\t\t\ttry {\n\t\t\t\telement.removeAttribute(name);\n\t\t\t} catch (_) {}\n\t\t}\n\t};\n\t/**\n\t* _neutralizeRoot\n\t*\n\t* Fail-closed teardown of an in-place root after the sanitize walk aborts\n\t* (campaign-3 F2). An internal throw mid-walk — e.g. a page-registered\n\t* custom element's reaction detaches a node so `_forceRemove`'s deliberate\n\t* parentless guard throws, or any other re-entrant engine mutation — would\n\t* otherwise leave the caller's *live* tree half-sanitized, with everything\n\t* after the abort point still carrying its handlers. There is no safe way\n\t* to resume the walk (the tree mutated under us), so we strip the root bare:\n\t* remove every child and every attribute, then let the caller's catch see\n\t* the original error. Clobber-safe (cached `remove`/`childNodes`/`attributes`\n\t* getters; the root was already clobber-pre-flighted at the IN_PLACE entry).\n\t*\n\t* @param root the in-place root to empty\n\t*/\n\tconst _neutralizeRoot = function _neutralizeRoot(root) {\n\t\t_neutralizeSubtree(root);\n\t\tconst childNodes = getChildNodes(root);\n\t\tif (childNodes) {\n\t\t\tconst snapshot = [];\n\t\t\tarrayForEach(childNodes, (child) => {\n\t\t\t\tarrayPush(snapshot, child);\n\t\t\t});\n\t\t\tarrayForEach(snapshot, (child) => {\n\t\t\t\ttry {\n\t\t\t\t\tremove(child);\n\t\t\t\t} catch (_) {}\n\t\t\t});\n\t\t}\n\t\tconst attributes = getAttributes(root);\n\t\tif (attributes) for (let i = attributes.length - 1; i >= 0; --i) {\n\t\t\tconst attribute = attributes[i];\n\t\t\tconst name = attribute && attribute.name;\n\t\t\tif (typeof name === \"string\") _stripAttributeNode(root, attribute, name);\n\t\t}\n\t};\n\t/**\n\t* _removeAttribute\n\t*\n\t* Name-based getAttributeNode()/removeAttribute() ASCII-lowercase their\n\t* lookup key for HTML elements in an HTML document, so they silently miss an\n\t* attribute whose stored qualified name still contains uppercase ASCII\n\t* letters. That happens when the node came from a case-preserving source\n\t* (an XML/XHTML document imported via importNode(), or createAttributeNS()),\n\t* where e.g. `ONERROR` survives the walk: the policy check lowercases to\n\t* `onerror` and rejects it, but `removeAttribute('ONERROR')` looks up\n\t* `onerror` and finds nothing. Remove the exact Attr node instead, which is\n\t* case- and namespace-exact, and fall back to name-based removal only when\n\t* the caller could not supply the node.\n\t*\n\t* @param name an Attribute name\n\t* @param element a DOM node\n\t* @param attr the exact Attr node to remove, when the caller has it\n\t*/\n\tconst _removeAttribute = function _removeAttribute(name, element, attr) {\n\t\tif (!attr) try {\n\t\t\tattr = element.getAttributeNode(name);\n\t\t} catch (_) {\n\t\t\tattr = null;\n\t\t}\n\t\tarrayPush(DOMPurify.removed, {\n\t\t\tattribute: attr || null,\n\t\t\tfrom: element\n\t\t});\n\t\ttry {\n\t\t\tif (attr) removeAttributeNode(element, attr);\n\t\t\telse element.removeAttribute(name);\n\t\t} catch (_) {\n\t\t\ttry {\n\t\t\t\telement.removeAttribute(name);\n\t\t\t} catch (_) {}\n\t\t}\n\t\tif (name === \"is\") {\n\t\t\tif (RETURN_DOM || RETURN_DOM_FRAGMENT) try {\n\t\t\t\t_forceRemove(element);\n\t\t\t} catch (_) {}\n\t\t\telse try {\n\t\t\t\telement.setAttribute(name, \"\");\n\t\t\t} catch (_) {}\n\t\t}\n\t};\n\t/**\n\t* _stripDisallowedAttributes\n\t*\n\t* Removes every attribute the active configuration does not allow from a\n\t* single element, using the same allowlist as the main attribute pass (so\n\t* `on*` handlers go, but no `/^on/` blocklist is introduced). Used only to\n\t* neutralise nodes that are being discarded from an in-place tree.\n\t*\n\t* @param element the element to strip\n\t*/\n\tconst _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {\n\t\tconst attributes = getAttributes(element);\n\t\tif (!attributes) return;\n\t\tfor (let i = attributes.length - 1; i >= 0; --i) {\n\t\t\tconst attribute = attributes[i];\n\t\t\tconst name = attribute && attribute.name;\n\t\t\tif (typeof name !== \"string\" || ALLOWED_ATTR[transformCaseFunc(name)]) continue;\n\t\t\t_stripAttributeNode(element, attribute, name);\n\t\t}\n\t};\n\t/**\n\t* _neutralizeSubtree\n\t*\n\t* Completes the audit-5 F1 fix across every removal path. The KEEP_CONTENT\n\t* move-hoist neutralises only disallowed-tag removals; clobber, mXSS-canary,\n\t* namespace, comment, processing-instruction and KEEP_CONTENT:false removals\n\t* all drop their subtree wholesale via `_forceRemove`. On the IN_PLACE path\n\t* those dropped nodes are detached from the caller's LIVE tree but a\n\t* handler-bearing original among them (an `<img onerror>`/`<video>` that was\n\t* loading) keeps its queued resource event, which fires in page scope after\n\t* sanitize returns. This walks a removed subtree and strips every attribute\n\t* the active configuration does not allow — so `on*` handlers are cancelled\n\t* through the SAME allowlist that governs kept nodes, not a separate `/^on/`\n\t* blocklist. Run synchronously before sanitize returns, i.e. before any\n\t* queued event can fire. Hook-free by design: these nodes leave the output,\n\t* so firing attribute hooks for them would be surprising. Clobber-safe reads;\n\t* a doomed clobbered node may shadow `removeAttribute` (its own attributes are\n\t* irrelevant — it is discarded — while its non-clobbered descendants, e.g.\n\t* the `<img>`, are reached and scrubbed).\n\t*\n\t* @param root the root of a removed subtree to neutralise\n\t*/\n\tconst _neutralizeSubtree = function _neutralizeSubtree(root) {\n\t\tconst stack = [root];\n\t\twhile (stack.length > 0) {\n\t\t\tconst node = stack.pop();\n\t\t\tif (_readNodeType(node) === NODE_TYPE.element) _stripDisallowedAttributes(node);\n\t\t\tconst childNodes = getChildNodes(node);\n\t\t\tif (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push(childNodes[i]);\n\t\t}\n\t};\n\t/**\n\t* _neutralizePatchLinkage\n\t*\n\t* IN_PLACE entry pre-pass (declarative-partial-updates / streaming\n\t* hardening, https://github.com/WICG/declarative-partial-updates).\n\t*\n\t* The main walk strips patch linkage (`for`/`patchsrc`) and removes range\n\t* markers (PIs / markup comments) node-by-node, in document order, AS it\n\t* reaches each node. On a live in-place root that leaves a window: from the\n\t* moment the root is connected until the walk arrives at a given node, that\n\t* node's linkage is live. A patch applied on connection/stream can fire as\n\t* a microtask during the walk and inject or teleport an unsanitized DOM\n\t* range into a region the iterator has already passed and will not revisit,\n\t* so the post-return \"tree is sanitized\" contract is violated. Sweep the\n\t* whole tree once up front and sever every linkage before the walk begins,\n\t* closing that window.\n\t*\n\t* This CANNOT undo a patch that already fired before sanitize ran — that is\n\t* the irreducible \"do not IN_PLACE a live-connected attacker tree\" caveat —\n\t* but it closes everything from sanitize-start onward. Gated on SAFE_FOR_XML\n\t* to group with the rest of the declarative-partial-updates handling and\n\t* stay overridable, consistent with the codebase.\n\t*\n\t* Clobber-safe traversal (cached childNodes getter); per-node try/catch so a\n\t* clobbered root cannot defeat the sweep of its non-clobbered descendants.\n\t*\n\t* NOTE (pending real-Chrome confirmation, see test/declarative-patch-probe\n\t* .html Q1): this mirrors the existing policy of keeping `for` on\n\t* <label>/<output>. If the shipping feature can drive a patch through a\n\t* surviving `for`-on-label/output + `id` pair, this pre-pass and the\n\t* attribute check at _isBasicCustomElement's caller must additionally drop\n\t* that pair on the IN_PLACE path. Left as-is until the taxonomy is verified.\n\t*\n\t* @param root the in-place root to sweep\n\t*/\n\t/**\n\t* Central policy for declarative-partial-updates patch-linkage attributes,\n\t* shared by the _neutralizePatchLinkage pre-pass and _isValidAttribute so\n\t* the two sites cannot drift: `patchsrc` always links, `for` links\n\t* everywhere except on <label>/<output>, and the whole policy is gated on\n\t* SAFE_FOR_XML (see the rationale block in _isValidAttribute).\n\t*\n\t* @param lcName the transformCaseFunc'd attribute name\n\t* @param lcTag the transformCaseFunc'd tag name of the carrying element\n\t* @return true if the attribute is patch linkage and must be dropped\n\t*/\n\tconst _isPatchLinkageAttribute = function _isPatchLinkageAttribute(lcName, lcTag) {\n\t\tif (!SAFE_FOR_XML) return false;\n\t\tif (lcName === \"patchsrc\") return true;\n\t\treturn lcName === \"for\" && lcTag !== \"label\" && lcTag !== \"output\";\n\t};\n\tconst _neutralizePatchLinkage = function _neutralizePatchLinkage(root) {\n\t\tif (!SAFE_FOR_XML) return;\n\t\tconst stack = [root];\n\t\twhile (stack.length > 0) {\n\t\t\tconst node = stack.pop();\n\t\t\tconst nodeType = _readNodeType(node);\n\t\t\tif (nodeType === NODE_TYPE.processingInstruction || nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, node.data)) {\n\t\t\t\ttry {\n\t\t\t\t\tremove(node);\n\t\t\t\t} catch (_) {}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (nodeType === NODE_TYPE.element) {\n\t\t\t\tconst element = node;\n\t\t\t\tconst lcTag = transformCaseFunc(_readNodeName(node));\n\t\t\t\ttry {\n\t\t\t\t\tif (element.hasAttribute && element.hasAttribute(\"patchsrc\")) element.removeAttribute(\"patchsrc\");\n\t\t\t\t\tif (element.hasAttribute && element.hasAttribute(\"for\") && _isPatchLinkageAttribute(\"for\", lcTag)) element.removeAttribute(\"for\");\n\t\t\t\t} catch (_) {}\n\t\t\t}\n\t\t\tconst childNodes = getChildNodes(node);\n\t\t\tif (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push(childNodes[i]);\n\t\t}\n\t};\n\t/**\n\t* _initDocument\n\t*\n\t* @param dirty - a string of dirty markup\n\t* @return a DOM, filled with the dirty markup\n\t*/\n\tconst _initDocument = function _initDocument(dirty) {\n\t\tlet doc = null;\n\t\tlet leadingWhitespace = null;\n\t\tif (FORCE_BODY) dirty = \"<remove></remove>\" + dirty;\n\t\telse {\n\t\t\tconst matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n\t\t\tleadingWhitespace = matches && matches[0];\n\t\t}\n\t\tif (PARSER_MEDIA_TYPE === \"application/xhtml+xml\" && NAMESPACE === HTML_NAMESPACE) dirty = \"<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\"><head></head><body>\" + dirty + \"</body></html>\";\n\t\tconst dirtyPayload = trustedTypesPolicy ? _createTrustedHTML(dirty) : dirty;\n\t\tif (NAMESPACE === HTML_NAMESPACE) try {\n\t\t\tdoc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n\t\t} catch (_) {}\n\t\tif (!doc || !doc.documentElement) {\n\t\t\tdoc = implementation.createDocument(NAMESPACE, \"template\", null);\n\t\t\ttry {\n\t\t\t\tdoc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n\t\t\t} catch (_) {}\n\t\t}\n\t\tconst body = doc.body || doc.documentElement;\n\t\tif (dirty && leadingWhitespace) body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n\t\tif (NAMESPACE === HTML_NAMESPACE) return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? \"html\" : \"body\")[0];\n\t\treturn WHOLE_DOCUMENT ? doc.documentElement : body;\n\t};\n\t/**\n\t* Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n\t*\n\t* @param root The root element or node to start traversing on.\n\t* @return The created NodeIterator\n\t*/\n\tconst _createNodeIterator = function _createNodeIterator(root) {\n\t\tconst doc = getOwnerDocument ? getOwnerDocument(root) : root.ownerDocument;\n\t\treturn createNodeIterator.call(doc || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n\t};\n\t/**\n\t* Replace template expression syntax (mustache, ERB, template\n\t* literal) with a space; shared by all SAFE_FOR_TEMPLATES scrub\n\t* sites. Order matters: mustache, then ERB, then template literal.\n\t*\n\t* @param value the string to scrub\n\t* @returns the scrubbed string\n\t*/\n\tconst _stripTemplateExpressions = function _stripTemplateExpressions(value) {\n\t\tvalue = stringReplace(value, MUSTACHE_EXPR$1, \" \");\n\t\tvalue = stringReplace(value, ERB_EXPR$1, \" \");\n\t\tvalue = stringReplace(value, TMPLIT_EXPR$1, \" \");\n\t\treturn value;\n\t};\n\t/**\n\t* Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the\n\t* character data of an element subtree. Used as the final safety net for\n\t* SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions\n\t* which only form after text-node normalization (e.g. fragments split across\n\t* stripped elements) cannot survive into a template-evaluating framework.\n\t*\n\t* Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`\n\t* in place rather than round-tripping through innerHTML. This preserves\n\t* descendant node references (important for IN_PLACE callers), avoids a\n\t* serialize/reparse cycle, and reads literal character data — which means\n\t* `<%...%>` in text content matches the ERB regex against its real bytes\n\t* instead of the HTML-entity-escaped form innerHTML would produce.\n\t*\n\t* Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for\n\t* attributes is performed during the per-node `_sanitizeAttributes` pass.\n\t*\n\t* @param node The root element whose character data should be scrubbed.\n\t*/\n\tconst _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {\n\t\tvar _node$querySelectorAl;\n\t\tnode.normalize();\n\t\tconst doc = getOwnerDocument ? getOwnerDocument(node) : node.ownerDocument;\n\t\tconst walker = createNodeIterator.call(doc || node, node, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);\n\t\tlet currentNode = walker.nextNode();\n\t\twhile (currentNode) {\n\t\t\tcurrentNode.data = _stripTemplateExpressions(currentNode.data);\n\t\t\tcurrentNode = walker.nextNode();\n\t\t}\n\t\tconst templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === void 0 ? void 0 : _node$querySelectorAl.call(node, \"template\");\n\t\tif (templates) arrayForEach(templates, (tmpl) => {\n\t\t\tif (_isDocumentFragment(tmpl.content)) _scrubTemplateExpressions2(tmpl.content);\n\t\t});\n\t};\n\t/**\n\t* _isClobbered\n\t*\n\t* Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML\n\t* interface with [LegacyOverrideBuiltIns]; a descendant element with a\n\t* `name` attribute matching a prototype property shadows that property\n\t* on direct reads. We use this check at the IN_PLACE entry-point and\n\t* during attribute sanitization to refuse clobbered forms.\n\t*\n\t* @param element element to check for clobbering attacks\n\t* @return true if clobbered, false if safe\n\t*/\n\tconst _isClobbered = function _isClobbered(element) {\n\t\tconst realTagName = getNodeName ? getNodeName(element) : null;\n\t\tif (typeof realTagName !== \"string\") return false;\n\t\tif (transformCaseFunc(realTagName) !== \"form\") return false;\n\t\treturn typeof element.nodeName !== \"string\" || typeof element.textContent !== \"string\" || typeof element.removeChild !== \"function\" || element.attributes !== getAttributes(element) || typeof element.removeAttribute !== \"function\" || typeof element.removeAttributeNode !== \"function\" || typeof element.getAttributeNode !== \"function\" || typeof element.setAttribute !== \"function\" || typeof element.namespaceURI !== \"string\" || typeof element.insertBefore !== \"function\" || typeof element.hasChildNodes !== \"function\" || element.nodeType !== getNodeType(element) || element.childNodes !== getChildNodes(element);\n\t};\n\t/**\n\t* Checks whether the given value is a DocumentFragment from any realm.\n\t*\n\t* The realm-independent replacement reads `nodeType` through the cached\n\t* Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE\n\t* constant (11). nodeType is a numeric value resolved from the node's\n\t* internal slot, identical across realms for the same kind of node.\n\t*\n\t* @param value object to check\n\t* @return true if value is a DocumentFragment-shaped node from any realm\n\t*/\n\tconst _isDocumentFragment = function _isDocumentFragment(value) {\n\t\tif (!getNodeType || typeof value !== \"object\" || value === null) return false;\n\t\ttry {\n\t\t\treturn getNodeType(value) === NODE_TYPE.documentFragment;\n\t\t} catch (_) {\n\t\t\treturn false;\n\t\t}\n\t};\n\t/**\n\t* Checks whether the given object is a DOM node, including nodes that\n\t* originate from a different window/realm (e.g. an iframe's\n\t* contentDocument). The previous `value instanceof Node` check was\n\t* realm-bound: nodes from a different window failed it, causing\n\t* sanitize() to silently stringify them and reset IN_PLACE to false,\n\t* returning the original node unsanitized. See GHSA-4w3q-35jp-p934.\n\t*\n\t* @param value object to check whether it's a DOM node\n\t* @return true if value is a DOM node from any realm\n\t*/\n\tconst _isNode = function _isNode(value) {\n\t\tif (!getNodeType || typeof value !== \"object\" || value === null) return false;\n\t\ttry {\n\t\t\treturn typeof getNodeType(value) === \"number\";\n\t\t} catch (_) {\n\t\t\treturn false;\n\t\t}\n\t};\n\tfunction _executeHooks(hooks, currentNode, data) {\n\t\tif (hooks.length === 0) return;\n\t\tarrayForEach(hooks, (hook) => {\n\t\t\thook.call(DOMPurify, currentNode, data, CONFIG);\n\t\t});\n\t}\n\t/**\n\t* Structural-threat checks that condemn a node regardless of the\n\t* allowlists: mXSS via namespace confusion, risky CSS construction,\n\t* processing instructions, markup-bearing comments. Pure predicate;\n\t* the caller removes. Check order is load-bearing.\n\t*\n\t* @param currentNode the node to inspect\n\t* @param tagName the node's transformCaseFunc'd tag name\n\t* @return true if the node must be removed\n\t*/\n\tconst _isUnsafeNode = function _isUnsafeNode(currentNode, tagName) {\n\t\tif (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) return true;\n\t\tif (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && LITERAL_TEXT_ELEMENTS[tagName] && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === \"string\" && regExpTest(LITERAL_TEXT_CLOSE[tagName], currentNode.textContent))) return true;\n\t\tif (currentNode.nodeType === NODE_TYPE.processingInstruction) return true;\n\t\tif (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) return true;\n\t\treturn false;\n\t};\n\t/**\n\t* Evaluate a CUSTOM_ELEMENT_HANDLING check (a RegExp or a predicate\n\t* function, per the validation in _parseConfig) against a name.\n\t* Additional arguments are forwarded to predicate functions - the\n\t* attributeNameCheck predicate receives the tag name as its second\n\t* argument. A null/absent check never matches.\n\t*\n\t* @param check the configured tagNameCheck / attributeNameCheck value\n\t* @param name the name to test\n\t* @param args extra arguments forwarded to a predicate function\n\t* @return true if the check matches the name\n\t*/\n\tconst _matchesNameCheck = function _matchesNameCheck(check, name) {\n\t\tif (check instanceof RegExp) return regExpTest(check, name);\n\t\tif (check instanceof Function) {\n\t\t\tfor (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];\n\t\t\treturn Boolean(check(name, ...args));\n\t\t}\n\t\treturn false;\n\t};\n\t/**\n\t* Handle a node whose tag is forbidden or not allowlisted: keep\n\t* allowed custom elements (false return exits _sanitizeElements\n\t* early - the namespace and fallback-tag removal checks are\n\t* intentionally skipped for kept custom elements), else hoist\n\t* content per KEEP_CONTENT and remove.\n\t*\n\t* A kept custom element is the ONLY case in which this function\n\t* returns false, so the caller uses that return value to run the\n\t* afterSanitizeElements hook on the kept element and keep the\n\t* element-hook lifecycle consistent with normal allowlisted\n\t* elements (GHSA-c2j3-45gr-mqc4).\n\t*\n\t* @param currentNode the disallowed node\n\t* @param tagName the node's transformCaseFunc'd tag name\n\t* @return true if the node was removed, false if kept\n\t*/\n\tconst _sanitizeDisallowedNode = function _sanitizeDisallowedNode(currentNode, tagName, root) {\n\t\tif (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n\t\tif (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n\t\t\tconst parentNode = getParentNode(currentNode);\n\t\t\tconst childNodes = getChildNodes(currentNode);\n\t\t\tif (childNodes && parentNode) {\n\t\t\t\tconst childCount = childNodes.length;\n\t\t\t\tfor (let i = childCount - 1; i >= 0; --i) {\n\t\t\t\t\tconst hoisted = currentNode === root ? cloneNode(childNodes[i], true) : childNodes[i];\n\t\t\t\t\tparentNode.insertBefore(hoisted, getNextSibling(currentNode));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_forceRemove(currentNode);\n\t\treturn true;\n\t};\n\t/**\n\t* Fork a hook-mutable allowlist off its shared binding the first time a\n\t* (possibly lazily-installed) uponSanitize* hook is about to see it, so the\n\t* hook cannot widen the per-instance default or the setConfig binding by\n\t* reference and leak past the call. Returns the set unchanged once it is\n\t* already call-local, so repeated calls across elements are idempotent.\n\t*\n\t* @param hookList the uponSanitize* hook array for this event\n\t* @param set the current ALLOWED_TAGS / ALLOWED_ATTR binding\n\t* @param defaultSet the per-instance DEFAULT_ALLOWED_* constant\n\t* @param setConfigSet the captured setConfig() binding, or null\n\t* @return a call-local clone if a hook is present and set is still shared,\n\t*   else set unchanged\n\t*/\n\tconst _forkSharedAllowlist = function _forkSharedAllowlist(hookList, set, defaultSet, setConfigSet) {\n\t\tif (hookList.length === 0) return set;\n\t\treturn set === defaultSet || set === setConfigSet ? clone(set) : set;\n\t};\n\t/**\n\t* Shared guard for a node that a hook has detached from the walk tree,\n\t* used after each element-hook site in _sanitizeElements. Detaching is a\n\t* long-standing user pattern (issue #469; draw.io-style foreignObject\n\t* filtering). Per the cached, unclobberable parentNode getter the node is\n\t* genuinely out of the tree, so it can reach neither the serialized\n\t* output nor an IN_PLACE live tree; treat it as removed and stop\n\t* processing it. Without this guard, the unsafe-node / namespace checks\n\t* would call _forceRemove on a parentless node and hit the REPORT-3\n\t* fail-closed throw — which exists for nodes DOMPurify wants gone but\n\t* *cannot* detach (clobbered / parentless roots), the opposite of a node\n\t* that is already safely gone. The walk root is exempt: a detached\n\t* IN_PLACE root is legitimate input and must still be fully sanitized,\n\t* and a kill-decision on it must keep hitting the REPORT-3 throw.\n\t*\n\t* Nodes detached by hooks stay the hook's responsibility for placement:\n\t* they are not recorded in DOMPurify.removed, so the post-walk IN_PLACE\n\t* pass (which iterates DOMPurify.removed) does not reach them. But a\n\t* hook-detached subtree can still hold a queued resource-event handler -\n\t* e.g. an <img onload> that began loading when the caller built the live\n\t* tree - which fires in page scope after sanitize returns even though the\n\t* handler never reached the returned tree. That is the audit-5 F1 hazard,\n\t* and the documented node.remove() hook pattern walks straight into it.\n\t* So on the IN_PLACE path we neutralize the detached subtree inline,\n\t* stripping its non-allow-listed attributes before returning, exactly as\n\t* the post-walk pass does for _forceRemove'd subtrees.\n\t*\n\t* @param currentNode the node a hook may have detached\n\t* @param root the current walk root\n\t* @return true if the node is detached and now handled, false otherwise\n\t*/\n\tconst _handleHookDetachedNode = function _handleHookDetachedNode(currentNode, root) {\n\t\tif (currentNode === root || getParentNode(currentNode) !== null) return false;\n\t\tif (IN_PLACE) _neutralizeSubtree(currentNode);\n\t\treturn true;\n\t};\n\t/**\n\t* _sanitizeElements\n\t*\n\t* @protect nodeName\n\t* @protect textContent\n\t* @protect removeChild\n\t* @param currentNode to check for permission to exist\n\t* @return true if node was killed, false if left alive\n\t*/\n\tconst _sanitizeElements = function _sanitizeElements(currentNode, root) {\n\t\t_executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n\t\tif (_handleHookDetachedNode(currentNode, root)) return true;\n\t\tif (_isClobbered(currentNode)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tconst tagName = transformCaseFunc(_readNodeName(currentNode));\n\t\tALLOWED_TAGS = _forkSharedAllowlist(hooks.uponSanitizeElement, ALLOWED_TAGS, DEFAULT_ALLOWED_TAGS, SET_CONFIG_ALLOWED_TAGS);\n\t\t_executeHooks(hooks.uponSanitizeElement, currentNode, {\n\t\t\ttagName,\n\t\t\tallowedTags: ALLOWED_TAGS\n\t\t});\n\t\tif (_handleHookDetachedNode(currentNode, root)) return true;\n\t\tif (_isUnsafeNode(currentNode, tagName)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tif (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {\n\t\t\tconst removed = _sanitizeDisallowedNode(currentNode, tagName, root);\n\t\t\tif (removed === false) {\n\t\t\t\t_executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\t\t\t\tif (_handleHookDetachedNode(currentNode, root)) return true;\n\t\t\t}\n\t\t\treturn removed;\n\t\t}\n\t\tif (_readNodeType(currentNode) === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tif ((tagName === \"noscript\" || tagName === \"noembed\" || tagName === \"noframes\") && regExpTest(FALLBACK_TAG_CLOSE, currentNode.innerHTML)) {\n\t\t\t_forceRemove(currentNode);\n\t\t\treturn true;\n\t\t}\n\t\tif (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n\t\t\tconst content = _stripTemplateExpressions(currentNode.textContent);\n\t\t\tif (currentNode.textContent !== content) {\n\t\t\t\tarrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n\t\t\t\tcurrentNode.textContent = content;\n\t\t\t}\n\t\t}\n\t\t_executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\t\treturn _handleHookDetachedNode(currentNode, root);\n\t};\n\t/**\n\t* _isValidAttribute\n\t*\n\t* @param lcTag Lowercase tag name of containing element.\n\t* @param lcName Lowercase attribute name.\n\t* @param value Attribute value.\n\t* @return Returns true if `value` is valid, otherwise false.\n\t*/\n\tconst _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n\t\tif (FORBID_ATTR[lcName]) return false;\n\t\tif (_isPatchLinkageAttribute(lcName, lcTag)) return false;\n\t\tif (SANITIZE_DOM && (lcName === \"id\" || lcName === \"name\") && (value in document || value in formElement)) return false;\n\t\tconst nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);\n\t\tif (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName)) return true;\n\t\tif (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) return true;\n\t\tif (!nameIsPermitted) return _isBasicCustomElement(lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName, lcTag) || lcName === \"is\" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value);\n\t\tif (URI_SAFE_ATTRIBUTES[lcName]) return true;\n\t\tif (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, \"\"))) return true;\n\t\tif ((lcName === \"src\" || lcName === \"xlink:href\" || lcName === \"href\") && lcTag !== \"script\" && stringIndexOf(value, \"data:\") === 0 && DATA_URI_TAGS[lcTag]) return true;\n\t\tif (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, \"\"))) return true;\n\t\treturn !value;\n\t};\n\tconst RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, [\n\t\t\"annotation-xml\",\n\t\t\"color-profile\",\n\t\t\"font-face\",\n\t\t\"font-face-format\",\n\t\t\"font-face-name\",\n\t\t\"font-face-src\",\n\t\t\"font-face-uri\",\n\t\t\"missing-glyph\"\n\t]);\n\t/**\n\t* _isBasicCustomElement\n\t* checks if at least one dash is included in tagName, and it's not the first char\n\t* for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n\t*\n\t* @param tagName name of the tag of the node to sanitize\n\t* @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n\t*/\n\tconst _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n\t\treturn !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);\n\t};\n\t/**\n\t* Wrap an attribute value in the matching Trusted Types object when\n\t* the active policy requires it. Namespaced attributes pass through\n\t* unchanged (no TT support yet, see\n\t* https://bugs.chromium.org/p/chromium/issues/detail?id=1305293).\n\t*\n\t* @param lcTag lowercase tag name of the containing element\n\t* @param lcName lowercase attribute name\n\t* @param namespaceURI the attribute's namespace, if any\n\t* @param value the attribute value to wrap\n\t* @return the value, wrapped when Trusted Types demand it\n\t*/\n\tconst _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value) {\n\t\tif (trustedTypesPolicy && typeof trustedTypes === \"object\" && typeof trustedTypes.getAttributeType === \"function\" && !namespaceURI) switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n\t\t\tcase \"TrustedHTML\": return _createTrustedHTML(value);\n\t\t\tcase \"TrustedScriptURL\": return _createTrustedScriptURL(value);\n\t\t}\n\t\treturn value;\n\t};\n\t/**\n\t* Write a modified attribute value back onto the element. On\n\t* success, re-probe for clobbering introduced by the new value and\n\t* remove the element when found; otherwise, when this writeback is the\n\t* recreate half of the SANITIZE_NAMED_PROPS remove-and-recreate, pop the\n\t* removal entry that path recorded so it does not show as removed. On\n\t* failure, remove the attribute instead.\n\t*\n\t* Returns true only on a clean write (the value was set and the new value\n\t* introduced no clobbering). The caller uses that, together with its own\n\t* knowledge of whether this attribute pushed a DOMPurify.removed record, to\n\t* decide whether to pop that record. The pop must happen ONLY for the\n\t* named-prop remove-and-recreate; popping on any other value change (trim,\n\t* template scrubbing, Trusted Types) would consume an unrelated _forceRemove\n\t* subtree-cleanup record and let that detached subtree keep a live event\n\t* handler through the IN_PLACE neutralization pass (SO-001).\n\t*\n\t* @param currentNode the element carrying the attribute\n\t* @param name the attribute name as present on the element\n\t* @param namespaceURI the attribute's namespace, if any\n\t* @param value the new attribute value\n\t* @return true if the value was written without introducing clobbering\n\t*/\n\tconst _setAttributeValue = function _setAttributeValue(currentNode, name, namespaceURI, value) {\n\t\ttry {\n\t\t\tif (namespaceURI) currentNode.setAttributeNS(namespaceURI, name, value);\n\t\t\telse currentNode.setAttribute(name, value);\n\t\t\tif (_isClobbered(currentNode)) {\n\t\t\t\t_forceRemove(currentNode);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (_) {\n\t\t\t_removeAttribute(name, currentNode);\n\t\t\treturn false;\n\t\t}\n\t};\n\t/**\n\t* _sanitizeAttributes\n\t*\n\t* @protect attributes\n\t* @protect nodeName\n\t* @protect removeAttribute\n\t* @protect setAttribute\n\t*\n\t* @param currentNode to sanitize\n\t* @param root the current walk root\n\t*/\n\tconst _sanitizeAttributes = function _sanitizeAttributes(currentNode, root) {\n\t\t_executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n\t\tif (_handleHookDetachedNode(currentNode, root)) return;\n\t\tconst attributes = currentNode.attributes;\n\t\tif (!attributes || _isClobbered(currentNode)) return;\n\t\tALLOWED_ATTR = _forkSharedAllowlist(hooks.uponSanitizeAttribute, ALLOWED_ATTR, DEFAULT_ALLOWED_ATTR, SET_CONFIG_ALLOWED_ATTR);\n\t\tconst hookEvent = {\n\t\t\tattrName: \"\",\n\t\t\tattrValue: \"\",\n\t\t\tkeepAttr: true,\n\t\t\tallowedAttributes: ALLOWED_ATTR,\n\t\t\tforceKeepAttr: void 0\n\t\t};\n\t\tlet l = attributes.length;\n\t\tconst lcTag = transformCaseFunc(currentNode.nodeName);\n\t\twhile (l--) {\n\t\t\tconst attr = attributes[l];\n\t\t\tconst name = attr.name, namespaceURI = attr.namespaceURI, attrValue = attr.value;\n\t\t\tconst lcName = transformCaseFunc(name);\n\t\t\tconst initValue = attrValue;\n\t\t\tlet value = name === \"value\" ? initValue : stringTrim(initValue);\n\t\t\tlet recreatedNamedProp = false;\n\t\t\thookEvent.attrName = lcName;\n\t\t\thookEvent.attrValue = value;\n\t\t\thookEvent.keepAttr = true;\n\t\t\thookEvent.forceKeepAttr = void 0;\n\t\t\t_executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n\t\t\tvalue = hookEvent.attrValue;\n\t\t\tif (SANITIZE_NAMED_PROPS && (lcName === \"id\" || lcName === \"name\") && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tvalue = SANITIZE_NAMED_PROPS_PREFIX + value;\n\t\t\t\trecreatedNamedProp = true;\n\t\t\t}\n\t\t\tif (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (lcName === \"attributename\" && stringMatch(value, \"href\")) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (hookEvent.forceKeepAttr) continue;\n\t\t\tif (!hookEvent.keepAttr) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value)) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (SAFE_FOR_TEMPLATES) value = _stripTemplateExpressions(value);\n\t\t\tif (!_isValidAttribute(lcTag, lcName, value)) {\n\t\t\t\t_removeAttribute(name, currentNode, attr);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvalue = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);\n\t\t\tif (value !== initValue) {\n\t\t\t\tif (_setAttributeValue(currentNode, name, namespaceURI, value) && recreatedNamedProp) arrayPop(DOMPurify.removed);\n\t\t\t}\n\t\t}\n\t\t_executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n\t\t_handleHookDetachedNode(currentNode, root);\n\t};\n\t/**\n\t* _sanitizeShadowDOM\n\t*\n\t* @param fragment to iterate over recursively\n\t*/\n\tconst _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {\n\t\tlet shadowNode = null;\n\t\tconst shadowIterator = _createNodeIterator(fragment);\n\t\t_executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n\t\twhile (shadowNode = shadowIterator.nextNode()) {\n\t\t\t_executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n\t\t\t_sanitizeElements(shadowNode, fragment);\n\t\t\t_sanitizeAttributes(shadowNode, fragment);\n\t\t\tif (_isDocumentFragment(shadowNode.content)) _sanitizeShadowDOM2(shadowNode.content);\n\t\t\tif (_readNodeType(shadowNode) === NODE_TYPE.element) {\n\t\t\t\tconst innerSr = getShadowRoot(shadowNode);\n\t\t\t\tif (_isDocumentFragment(innerSr)) {\n\t\t\t\t\t_sanitizeAttachedShadowRoots(innerSr);\n\t\t\t\t\t_sanitizeShadowDOM2(innerSr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n\t};\n\t/**\n\t* _sanitizeAttachedShadowRoots\n\t*\n\t* Walks `root` and feeds every attached shadow root we encounter into\n\t* the existing _sanitizeShadowDOM pipeline. The default node iterator\n\t* does not descend into shadow trees, so nodes inside an attached\n\t* shadow root would otherwise be skipped entirely.\n\t*\n\t* Two real input paths put attached shadow roots in front of us:\n\t*   1. IN_PLACE on a DOM node that already has shadow roots attached.\n\t*   2. DOM-node input where importNode(dirty, true) deep-clones the\n\t*      shadow root because it was created with `clonable: true`.\n\t*\n\t* This pass runs once, up front, so the main iteration loop (and the\n\t* existing _sanitizeShadowDOM template-content recursion) stay\n\t* untouched — string-input paths are not affected.\n\t*\n\t* @param root the subtree root to walk for attached shadow roots\n\t*/\n\tconst _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots(root) {\n\t\tconst stack = [{\n\t\t\tnode: root,\n\t\t\tshadow: null\n\t\t}];\n\t\twhile (stack.length > 0) {\n\t\t\tconst item = stack.pop();\n\t\t\tif (item.shadow) {\n\t\t\t\t_sanitizeShadowDOM2(item.shadow);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst node = item.node;\n\t\t\tconst isElement = _readNodeType(node) === NODE_TYPE.element;\n\t\t\tconst childNodes = getChildNodes(node);\n\t\t\tif (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push({\n\t\t\t\tnode: childNodes[i],\n\t\t\t\tshadow: null\n\t\t\t});\n\t\t\tif (isElement) {\n\t\t\t\tconst rootName = getNodeName ? getNodeName(node) : null;\n\t\t\t\tif (typeof rootName === \"string\" && transformCaseFunc(rootName) === \"template\") {\n\t\t\t\t\tconst content = node.content;\n\t\t\t\t\tif (_isDocumentFragment(content)) stack.push({\n\t\t\t\t\t\tnode: content,\n\t\t\t\t\t\tshadow: null\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isElement) {\n\t\t\t\tconst sr = getShadowRoot(node);\n\t\t\t\tif (_isDocumentFragment(sr)) stack.push({\n\t\t\t\t\tnode: null,\n\t\t\t\t\tshadow: sr\n\t\t\t\t}, {\n\t\t\t\t\tnode: sr,\n\t\t\t\t\tshadow: null\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\tDOMPurify.sanitize = function(dirty) {\n\t\tlet cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n\t\tlet body = null;\n\t\tlet importedNode = null;\n\t\tlet currentNode = null;\n\t\tlet returnNode = null;\n\t\tIS_EMPTY_INPUT = !dirty;\n\t\tif (IS_EMPTY_INPUT) dirty = \"<!-->\";\n\t\tif (typeof dirty !== \"string\" && !_isNode(dirty)) {\n\t\t\tdirty = stringifyValue(dirty);\n\t\t\tif (typeof dirty !== \"string\") throw typeErrorCreate(\"dirty is not a string, aborting\");\n\t\t}\n\t\tif (!DOMPurify.isSupported) return dirty;\n\t\tif (SET_CONFIG) {\n\t\t\tALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;\n\t\t\tALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;\n\t\t} else _parseConfig(cfg);\n\t\tif (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) ALLOWED_TAGS = clone(ALLOWED_TAGS);\n\t\tif (hooks.uponSanitizeAttribute.length > 0) ALLOWED_ATTR = clone(ALLOWED_ATTR);\n\t\tDOMPurify.removed = [];\n\t\tconst inPlace = IN_PLACE && typeof dirty !== \"string\" && _isNode(dirty);\n\t\tif (inPlace) {\n\t\t\t_neutralizePatchLinkage(dirty);\n\t\t\tconst nn = _readNodeName(dirty);\n\t\t\tif (typeof nn === \"string\") {\n\t\t\t\tconst tagName = transformCaseFunc(nn);\n\t\t\t\tif (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n\t\t\t\t\t_neutralizeRoot(dirty);\n\t\t\t\t\tthrow typeErrorCreate(\"root node is forbidden and cannot be sanitized in-place\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (_isClobbered(dirty)) {\n\t\t\t\t_neutralizeRoot(dirty);\n\t\t\t\tthrow typeErrorCreate(\"root node is clobbered and cannot be sanitized in-place\");\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t_sanitizeAttachedShadowRoots(dirty);\n\t\t\t} catch (error) {\n\t\t\t\t_neutralizeRoot(dirty);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} else if (_isNode(dirty)) {\n\t\t\tbody = _initDocument(\"<!---->\");\n\t\t\timportedNode = body.ownerDocument.importNode(dirty, true);\n\t\t\tif (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === \"BODY\") body = importedNode;\n\t\t\telse if (importedNode.nodeName === \"HTML\") body = importedNode;\n\t\t\telse body.appendChild(importedNode);\n\t\t\t_sanitizeAttachedShadowRoots(body);\n\t\t} else {\n\t\t\tif (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf(\"<\") === -1) return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(dirty) : dirty;\n\t\t\tbody = _initDocument(dirty);\n\t\t\tif (!body) return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : \"\";\n\t\t}\n\t\tif (body && FORCE_BODY) _forceRemove(body.firstChild);\n\t\tconst walkRoot = inPlace ? dirty : body;\n\t\ttry {\n\t\t\tconst nodeIterator = _createNodeIterator(walkRoot);\n\t\t\twhile (currentNode = nodeIterator.nextNode()) {\n\t\t\t\t_sanitizeElements(currentNode, walkRoot);\n\t\t\t\t_sanitizeAttributes(currentNode, walkRoot);\n\t\t\t\tif (_isDocumentFragment(currentNode.content)) _sanitizeShadowDOM2(currentNode.content);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (inPlace) {\n\t\t\t\t_neutralizeRoot(dirty);\n\t\t\t\tarrayForEach(DOMPurify.removed, (entry) => {\n\t\t\t\t\tif (entry.element) _neutralizeSubtree(entry.element);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tif (inPlace) {\n\t\t\tlet rootWasRemoved = false;\n\t\t\tarrayForEach(DOMPurify.removed, (entry) => {\n\t\t\t\tif (entry.element) {\n\t\t\t\t\tif (entry.element === dirty) rootWasRemoved = true;\n\t\t\t\t\t_neutralizeSubtree(entry.element);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (rootWasRemoved) throw typeErrorCreate(\"a node selected for removal could not be safely returned; refusing to sanitize in place\");\n\t\t\tif (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(dirty);\n\t\t\treturn dirty;\n\t\t}\n\t\tif (RETURN_DOM) {\n\t\t\tif (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(body);\n\t\t\tif (RETURN_DOM_FRAGMENT) {\n\t\t\t\treturnNode = createDocumentFragment.call(body.ownerDocument);\n\t\t\t\twhile (body.firstChild) returnNode.appendChild(body.firstChild);\n\t\t\t} else returnNode = body;\n\t\t\tif (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) returnNode = importNode.call(originalDocument, returnNode, true);\n\t\t\treturn returnNode;\n\t\t}\n\t\tlet serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\t\tif (WHOLE_DOCUMENT && ALLOWED_TAGS[\"!doctype\"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) serializedHTML = \"<!DOCTYPE \" + body.ownerDocument.doctype.name + \">\\n\" + serializedHTML;\n\t\tif (SAFE_FOR_TEMPLATES) serializedHTML = _stripTemplateExpressions(serializedHTML);\n\t\treturn trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(serializedHTML) : serializedHTML;\n\t};\n\tDOMPurify.setConfig = function() {\n\t\tlet cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n\t\t_parseConfig(cfg);\n\t\tSET_CONFIG = true;\n\t\tSET_CONFIG_ALLOWED_TAGS = ALLOWED_TAGS;\n\t\tSET_CONFIG_ALLOWED_ATTR = ALLOWED_ATTR;\n\t};\n\tDOMPurify.clearConfig = function() {\n\t\tCONFIG = null;\n\t\tSET_CONFIG = false;\n\t\tSET_CONFIG_ALLOWED_TAGS = null;\n\t\tSET_CONFIG_ALLOWED_ATTR = null;\n\t\ttrustedTypesPolicy = defaultTrustedTypesPolicy;\n\t\temptyHTML = \"\";\n\t};\n\tDOMPurify.isValidAttribute = function(tag, attr, value) {\n\t\tif (!CONFIG) _parseConfig({});\n\t\tconst lcTag = transformCaseFunc(tag);\n\t\tconst lcName = transformCaseFunc(attr);\n\t\treturn _isValidAttribute(lcTag, lcName, value);\n\t};\n\tDOMPurify.addHook = function(entryPoint, hookFunction) {\n\t\tif (typeof hookFunction !== \"function\") return;\n\t\tif (!objectHasOwnProperty(hooks, entryPoint)) return;\n\t\tarrayPush(hooks[entryPoint], hookFunction);\n\t};\n\tDOMPurify.removeHook = function(entryPoint, hookFunction) {\n\t\tif (!objectHasOwnProperty(hooks, entryPoint)) return;\n\t\tif (hookFunction !== void 0) {\n\t\t\tconst index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n\t\t\treturn index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];\n\t\t}\n\t\treturn arrayPop(hooks[entryPoint]);\n\t};\n\tDOMPurify.removeHooks = function(entryPoint) {\n\t\tif (!objectHasOwnProperty(hooks, entryPoint)) return;\n\t\thooks[entryPoint] = [];\n\t};\n\tDOMPurify.removeAllHooks = function() {\n\t\thooks = _createHooksMap();\n\t};\n\treturn DOMPurify;\n}\nvar purify_default = createDOMPurify();\nexport { purify_default as default };\n\n//# sourceMappingURL=purify.es.mjs.map","import DOMPurify from \"dompurify\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\nlet nextCreditId = 0;\nconst creditToId = {};\n\n/**\n * A credit contains data pertaining to how to display attributions/credits for certain content on the screen.\n * @param {string} html An string representing an html code snippet\n * @param {boolean} [showOnScreen=false] If true, the credit will be visible in the main credit container.  Otherwise, it will appear in a popover. All credits are displayed `inline`, if you have an image we recommend sizing it correctly to match the text or use css to `vertical-align` it.\n *\n * @alias Credit\n * @constructor\n *\n * @exception {DeveloperError} html is required.\n *\n * @example\n * // Create a credit with a tooltip, image and link\n * const credit = new Cesium.Credit('<a href=\"https://cesium.com/\" target=\"_blank\"><img src=\"/images/cesium_logo.png\"  style=\"vertical-align: -7px\" title=\"Cesium\"/></a>');\n */\nfunction Credit(html, showOnScreen) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"html\", html);\n  //>>includeEnd('debug');\n  let id;\n  const key = html;\n\n  if (defined(creditToId[key])) {\n    id = creditToId[key];\n  } else {\n    id = nextCreditId++;\n    creditToId[key] = id;\n  }\n\n  showOnScreen = showOnScreen ?? false;\n\n  // Credits are immutable so generate an id to use to optimize equal()\n  this._id = id;\n  this._html = html;\n  this._showOnScreen = showOnScreen;\n  this._element = undefined;\n}\n\nObject.defineProperties(Credit.prototype, {\n  /**\n   * The credit content\n   * @memberof Credit.prototype\n   * @type {string}\n   * @readonly\n   */\n  html: {\n    get: function () {\n      return this._html;\n    },\n  },\n\n  /**\n   * @memberof Credit.prototype\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * Whether the credit should be displayed on screen or in a lightbox\n   * @memberof Credit.prototype\n   * @type {boolean}\n   */\n  showOnScreen: {\n    get: function () {\n      return this._showOnScreen;\n    },\n    set: function (value) {\n      this._showOnScreen = value;\n    },\n  },\n\n  /**\n   * Gets the credit element\n   * @memberof Credit.prototype\n   * @type {HTMLElement}\n   * @readonly\n   */\n  element: {\n    get: function () {\n      if (!defined(this._element)) {\n        const html = DOMPurify.sanitize(this._html);\n\n        const div = document.createElement(\"div\");\n        div.className = \"cesium-credit-wrapper\";\n        div._creditId = this._id;\n        div.style.display = \"inline\";\n        div.innerHTML = html;\n\n        const links = div.querySelectorAll(\"a\");\n        for (let i = 0; i < links.length; i++) {\n          links[i].setAttribute(\"target\", \"_blank\");\n        }\n\n        this._element = div;\n      }\n      return this._element;\n    },\n  },\n});\n\n/**\n * Returns true if the credits are equal\n *\n * @param {Credit} [left] The first credit\n * @param {Credit} [right] The second credit\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCredit.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left._id === right._id &&\n      left._showOnScreen === right._showOnScreen)\n  );\n};\n\n/**\n * Returns true if the credits are equal\n *\n * @param {Credit} [credit] The credit to compare to.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCredit.prototype.equals = function (credit) {\n  return Credit.equals(this, credit);\n};\n\n/**\n * @private\n */\nCredit.prototype.isIon = function () {\n  return this.html.indexOf(\"ion-credit.png\") !== -1;\n};\n\n/**\n * @private\n * @param attribution\n * @return {Credit}\n */\nCredit.getIonCredit = function (attribution) {\n  const showOnScreen =\n    defined(attribution.collapsible) && !attribution.collapsible;\n  const credit = new Credit(attribution.html, showOnScreen);\n\n  return credit;\n};\n\n/**\n * Duplicates a Credit instance.\n *\n * @param {Credit} [credit] The Credit to duplicate.\n * @returns {Credit} A new Credit instance that is a duplicate of the one provided. (Returns undefined if the credit is undefined)\n */\nCredit.clone = function (credit) {\n  if (defined(credit)) {\n    return new Credit(credit.html, credit.showOnScreen);\n  }\n};\nexport default Credit;\n","import DeveloperError from \"./DeveloperError.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\n\n/**\n * Defines functions for 3rd order polynomial functions of one variable with only real coefficients.\n *\n * @namespace CubicRealPolynomial\n */\nconst CubicRealPolynomial = {};\n\n/**\n * Provides the discriminant of the cubic equation from the supplied coefficients.\n *\n * @param {number} a The coefficient of the 3rd order monomial.\n * @param {number} b The coefficient of the 2nd order monomial.\n * @param {number} c The coefficient of the 1st order monomial.\n * @param {number} d The coefficient of the 0th order monomial.\n * @returns {number} The value of the discriminant.\n */\nCubicRealPolynomial.computeDiscriminant = function (a, b, c, d) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof a !== \"number\") {\n    throw new DeveloperError(\"a is a required number.\");\n  }\n  if (typeof b !== \"number\") {\n    throw new DeveloperError(\"b is a required number.\");\n  }\n  if (typeof c !== \"number\") {\n    throw new DeveloperError(\"c is a required number.\");\n  }\n  if (typeof d !== \"number\") {\n    throw new DeveloperError(\"d is a required number.\");\n  }\n  //>>includeEnd('debug');\n\n  const a2 = a * a;\n  const b2 = b * b;\n  const c2 = c * c;\n  const d2 = d * d;\n\n  const discriminant =\n    18.0 * a * b * c * d +\n    b2 * c2 -\n    27.0 * a2 * d2 -\n    4.0 * (a * c2 * c + b2 * b * d);\n  return discriminant;\n};\n\nfunction computeRealRoots(a, b, c, d) {\n  const A = a;\n  const B = b / 3.0;\n  const C = c / 3.0;\n  const D = d;\n\n  const AC = A * C;\n  const BD = B * D;\n  const B2 = B * B;\n  const C2 = C * C;\n  const delta1 = A * C - B2;\n  const delta2 = A * D - B * C;\n  const delta3 = B * D - C2;\n\n  const discriminant = 4.0 * delta1 * delta3 - delta2 * delta2;\n  let temp;\n  let temp1;\n\n  if (discriminant < 0.0) {\n    let ABar;\n    let CBar;\n    let DBar;\n\n    if (B2 * BD >= AC * C2) {\n      ABar = A;\n      CBar = delta1;\n      DBar = -2.0 * B * delta1 + A * delta2;\n    } else {\n      ABar = D;\n      CBar = delta3;\n      DBar = -D * delta2 + 2.0 * C * delta3;\n    }\n\n    const s = DBar < 0.0 ? -1.0 : 1.0; // This is not Math.Sign()!\n    const temp0 = -s * Math.abs(ABar) * Math.sqrt(-discriminant);\n    temp1 = -DBar + temp0;\n\n    const x = temp1 / 2.0;\n    const p = x < 0.0 ? -Math.pow(-x, 1.0 / 3.0) : Math.pow(x, 1.0 / 3.0);\n    const q = temp1 === temp0 ? -p : -CBar / p;\n\n    temp = CBar <= 0.0 ? p + q : -DBar / (p * p + q * q + CBar);\n\n    if (B2 * BD >= AC * C2) {\n      return [(temp - B) / A];\n    }\n\n    return [-D / (temp + C)];\n  }\n\n  const CBarA = delta1;\n  const DBarA = -2.0 * B * delta1 + A * delta2;\n\n  const CBarD = delta3;\n  const DBarD = -D * delta2 + 2.0 * C * delta3;\n\n  const squareRootOfDiscriminant = Math.sqrt(discriminant);\n  const halfSquareRootOf3 = Math.sqrt(3.0) / 2.0;\n\n  let theta = Math.abs(Math.atan2(A * squareRootOfDiscriminant, -DBarA) / 3.0);\n  temp = 2.0 * Math.sqrt(-CBarA);\n  let cosine = Math.cos(theta);\n  temp1 = temp * cosine;\n  let temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\n\n  const numeratorLarge = temp1 + temp3 > 2.0 * B ? temp1 - B : temp3 - B;\n  const denominatorLarge = A;\n\n  const root1 = numeratorLarge / denominatorLarge;\n\n  theta = Math.abs(Math.atan2(D * squareRootOfDiscriminant, -DBarD) / 3.0);\n  temp = 2.0 * Math.sqrt(-CBarD);\n  cosine = Math.cos(theta);\n  temp1 = temp * cosine;\n  temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\n\n  const numeratorSmall = -D;\n  const denominatorSmall = temp1 + temp3 < 2.0 * C ? temp1 + C : temp3 + C;\n\n  const root3 = numeratorSmall / denominatorSmall;\n\n  const E = denominatorLarge * denominatorSmall;\n  const F =\n    -numeratorLarge * denominatorSmall - denominatorLarge * numeratorSmall;\n  const G = numeratorLarge * numeratorSmall;\n\n  const root2 = (C * F - B * G) / (-B * F + C * E);\n\n  if (root1 <= root2) {\n    if (root1 <= root3) {\n      if (root2 <= root3) {\n        return [root1, root2, root3];\n      }\n      return [root1, root3, root2];\n    }\n    return [root3, root1, root2];\n  }\n  if (root1 <= root3) {\n    return [root2, root1, root3];\n  }\n  if (root2 <= root3) {\n    return [root2, root3, root1];\n  }\n  return [root3, root2, root1];\n}\n\n/**\n * Provides the real valued roots of the cubic polynomial with the provided coefficients.\n *\n * @param {number} a The coefficient of the 3rd order monomial.\n * @param {number} b The coefficient of the 2nd order monomial.\n * @param {number} c The coefficient of the 1st order monomial.\n * @param {number} d The coefficient of the 0th order monomial.\n * @returns {number[]} The real valued roots.\n */\nCubicRealPolynomial.computeRealRoots = function (a, b, c, d) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof a !== \"number\") {\n    throw new DeveloperError(\"a is a required number.\");\n  }\n  if (typeof b !== \"number\") {\n    throw new DeveloperError(\"b is a required number.\");\n  }\n  if (typeof c !== \"number\") {\n    throw new DeveloperError(\"c is a required number.\");\n  }\n  if (typeof d !== \"number\") {\n    throw new DeveloperError(\"d is a required number.\");\n  }\n  //>>includeEnd('debug');\n\n  let roots;\n  let ratio;\n  if (a === 0.0) {\n    // Quadratic function: b * x^2 + c * x + d = 0.\n    return QuadraticRealPolynomial.computeRealRoots(b, c, d);\n  } else if (b === 0.0) {\n    if (c === 0.0) {\n      if (d === 0.0) {\n        // 3rd order monomial: a * x^3 = 0.\n        return [0.0, 0.0, 0.0];\n      }\n\n      // a * x^3 + d = 0\n      ratio = -d / a;\n      const root =\n        ratio < 0.0 ? -Math.pow(-ratio, 1.0 / 3.0) : Math.pow(ratio, 1.0 / 3.0);\n      return [root, root, root];\n    } else if (d === 0.0) {\n      // x * (a * x^2 + c) = 0.\n      roots = QuadraticRealPolynomial.computeRealRoots(a, 0, c);\n\n      // Return the roots in ascending order.\n      if (roots.Length === 0) {\n        return [0.0];\n      }\n      return [roots[0], 0.0, roots[1]];\n    }\n\n    // Deflated cubic polynomial: a * x^3 + c * x + d= 0.\n    return computeRealRoots(a, 0, c, d);\n  } else if (c === 0.0) {\n    if (d === 0.0) {\n      // x^2 * (a * x + b) = 0.\n      ratio = -b / a;\n      if (ratio < 0.0) {\n        return [ratio, 0.0, 0.0];\n      }\n      return [0.0, 0.0, ratio];\n    }\n    // a * x^3 + b * x^2 + d = 0.\n    return computeRealRoots(a, b, 0, d);\n  } else if (d === 0.0) {\n    // x * (a * x^2 + b * x + c) = 0\n    roots = QuadraticRealPolynomial.computeRealRoots(a, b, c);\n\n    // Return the roots in ascending order.\n    if (roots.length === 0) {\n      return [0.0];\n    } else if (roots[1] <= 0.0) {\n      return [roots[0], roots[1], 0.0];\n    } else if (roots[0] >= 0.0) {\n      return [0.0, roots[0], roots[1]];\n    }\n    return [roots[0], 0.0, roots[1]];\n  }\n\n  return computeRealRoots(a, b, c, d);\n};\nexport default CubicRealPolynomial;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Intersect from \"./Intersect.js\";\nimport Plane from \"./Plane.js\";\n\n/**\n * The culling volume defined by planes.\n *\n * @alias CullingVolume\n * @constructor\n *\n * @param {Cartesian4[]} [planes] An array of clipping planes.\n */\nfunction CullingVolume(planes) {\n  /**\n   * Each plane is represented by a Cartesian4 object, where the x, y, and z components\n   * define the unit vector normal to the plane, and the w component is the distance of the\n   * plane from the origin.\n   * @type {Cartesian4[]}\n   * @default []\n   */\n  this.planes = planes ?? [];\n}\n\nconst faces = [new Cartesian3(), new Cartesian3(), new Cartesian3()];\nCartesian3.clone(Cartesian3.UNIT_X, faces[0]);\nCartesian3.clone(Cartesian3.UNIT_Y, faces[1]);\nCartesian3.clone(Cartesian3.UNIT_Z, faces[2]);\n\nconst scratchPlaneCenter = new Cartesian3();\nconst scratchPlaneNormal = new Cartesian3();\nconst scratchPlane = new Plane(new Cartesian3(1.0, 0.0, 0.0), 0.0);\n\n/**\n * Constructs a culling volume from a bounding sphere. Creates six planes that create a box containing the sphere.\n * The planes are aligned to the x, y, and z axes in world coordinates.\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere used to create the culling volume.\n * @param {CullingVolume} [result] The object onto which to store the result.\n * @returns {CullingVolume} The culling volume created from the bounding sphere.\n */\nCullingVolume.fromBoundingSphere = function (boundingSphere, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(boundingSphere)) {\n    throw new DeveloperError(\"boundingSphere is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new CullingVolume();\n  }\n\n  const length = faces.length;\n  const planes = result.planes;\n  planes.length = 2 * length;\n\n  const center = boundingSphere.center;\n  const radius = boundingSphere.radius;\n\n  let planeIndex = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const faceNormal = faces[i];\n\n    let plane0 = planes[planeIndex];\n    let plane1 = planes[planeIndex + 1];\n\n    if (!defined(plane0)) {\n      plane0 = planes[planeIndex] = new Cartesian4();\n    }\n    if (!defined(plane1)) {\n      plane1 = planes[planeIndex + 1] = new Cartesian4();\n    }\n\n    Cartesian3.multiplyByScalar(faceNormal, -radius, scratchPlaneCenter);\n    Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\n\n    plane0.x = faceNormal.x;\n    plane0.y = faceNormal.y;\n    plane0.z = faceNormal.z;\n    plane0.w = -Cartesian3.dot(faceNormal, scratchPlaneCenter);\n\n    Cartesian3.multiplyByScalar(faceNormal, radius, scratchPlaneCenter);\n    Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\n\n    plane1.x = -faceNormal.x;\n    plane1.y = -faceNormal.y;\n    plane1.z = -faceNormal.z;\n    plane1.w = -Cartesian3.dot(\n      Cartesian3.negate(faceNormal, scratchPlaneNormal),\n      scratchPlaneCenter,\n    );\n\n    planeIndex += 2;\n  }\n\n  return result;\n};\n\n/**\n * Determines whether a bounding volume intersects the culling volume.\n *\n * @param {object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\n * @returns {Intersect}  Intersect.OUTSIDE, Intersect.INTERSECTING, or Intersect.INSIDE.\n */\nCullingVolume.prototype.computeVisibility = function (boundingVolume) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(boundingVolume)) {\n    throw new DeveloperError(\"boundingVolume is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const planes = this.planes;\n  let intersecting = false;\n  for (let k = 0, len = planes.length; k < len; ++k) {\n    const result = boundingVolume.intersectPlane(\n      Plane.fromCartesian4(planes[k], scratchPlane),\n    );\n    if (result === Intersect.OUTSIDE) {\n      return Intersect.OUTSIDE;\n    } else if (result === Intersect.INTERSECTING) {\n      intersecting = true;\n    }\n  }\n\n  return intersecting ? Intersect.INTERSECTING : Intersect.INSIDE;\n};\n\n/**\n * Determines whether a bounding volume intersects the culling volume.\n *\n * @param {object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\n * @param {number} parentPlaneMask A bit mask from the boundingVolume's parent's check against the same culling\n *                                 volume, such that if (planeMask & (1 << planeIndex) === 0), for k < 31, then\n *                                 the parent (and therefore this) volume is completely inside plane[planeIndex]\n *                                 and that plane check can be skipped.\n * @returns {number} A plane mask as described above (which can be applied to this boundingVolume's children).\n *\n * @private\n */\nCullingVolume.prototype.computeVisibilityWithPlaneMask = function (\n  boundingVolume,\n  parentPlaneMask,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(boundingVolume)) {\n    throw new DeveloperError(\"boundingVolume is required.\");\n  }\n  if (!defined(parentPlaneMask)) {\n    throw new DeveloperError(\"parentPlaneMask is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (\n    parentPlaneMask === CullingVolume.MASK_OUTSIDE ||\n    parentPlaneMask === CullingVolume.MASK_INSIDE\n  ) {\n    // parent is completely outside or completely inside, so this child is as well.\n    return parentPlaneMask;\n  }\n\n  // Start with MASK_INSIDE (all zeros) so that after the loop, the return value can be compared with MASK_INSIDE.\n  // (Because if there are fewer than 31 planes, the upper bits wont be changed.)\n  let mask = CullingVolume.MASK_INSIDE;\n\n  const planes = this.planes;\n  for (let k = 0, len = planes.length; k < len; ++k) {\n    // For k greater than 31 (since 31 is the maximum number of INSIDE/INTERSECTING bits we can store), skip the optimization.\n    const flag = k < 31 ? 1 << k : 0;\n    if (k < 31 && (parentPlaneMask & flag) === 0) {\n      // boundingVolume is known to be INSIDE this plane.\n      continue;\n    }\n\n    const result = boundingVolume.intersectPlane(\n      Plane.fromCartesian4(planes[k], scratchPlane),\n    );\n    if (result === Intersect.OUTSIDE) {\n      return CullingVolume.MASK_OUTSIDE;\n    } else if (result === Intersect.INTERSECTING) {\n      mask |= flag;\n    }\n  }\n\n  return mask;\n};\n\n/**\n * For plane masks (as used in {@link CullingVolume#computeVisibilityWithPlaneMask}), this special value\n * represents the case where the object bounding volume is entirely outside the culling volume.\n *\n * @type {number}\n * @private\n */\nCullingVolume.MASK_OUTSIDE = 0xffffffff;\n\n/**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume is entirely inside the culling volume.\n *\n * @type {number}\n * @private\n */\nCullingVolume.MASK_INSIDE = 0x00000000;\n\n/**\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\n * represents the case where the object bounding volume (may) intersect all planes of the culling volume.\n *\n * @type {number}\n * @private\n */\nCullingVolume.MASK_INDETERMINATE = 0x7fffffff;\nexport default CullingVolume;\n","import Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\n\n/**\n * @callback CustomHeightmapTerrainProvider.GeometryCallback\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array|number[]|Promise<Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array|number[]>|undefined} An array or a promise to an array of heights in row-major order. If undefined, the globe will render the parent tile.\n */\n\n/**\n * A simple {@link TerrainProvider} that gets height values from a callback function.\n * It can be used for procedurally generated terrain or as a way to load custom\n * heightmap data without creating a subclass of {@link TerrainProvider}.\n *\n * There are some limitations such as no water mask, no vertex normals, and no\n * availability, so a full-fledged {@link TerrainProvider} subclass is better suited\n * for these more sophisticated use cases.\n *\n * @alias CustomHeightmapTerrainProvider\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {CustomHeightmapTerrainProvider.GeometryCallback} options.callback The callback function for requesting tile geometry.\n * @param {number} options.width The number of columns per heightmap tile.\n * @param {number} options.height The number of rows per heightmap tile.\n * @param {TilingScheme} [options.tilingScheme] The tiling scheme specifying how the ellipsoidal\n * surface is broken into tiles. If this parameter is not provided, a {@link GeographicTilingScheme}\n * is used.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid.  If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the default ellipsoid is used.\n * @param {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @example\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   terrainProvider: new Cesium.CustomHeightmapTerrainProvider({\n *     width: 32,\n *     height: 32,\n *     callback: function (x, y, level) {\n *       return new Float32Array(32 * 32); // all zeros\n *     },\n *   }),\n * });\n *\n * @see TerrainProvider\n */\nfunction CustomHeightmapTerrainProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.callback\", options.callback);\n  Check.defined(\"options.width\", options.width);\n  Check.defined(\"options.height\", options.height);\n  //>>includeEnd('debug');\n\n  this._callback = options.callback;\n\n  this._tilingScheme = options.tilingScheme;\n  if (!defined(this._tilingScheme)) {\n    this._tilingScheme = new GeographicTilingScheme({\n      ellipsoid: options.ellipsoid ?? Ellipsoid.default,\n    });\n  }\n\n  this._width = options.width;\n  this._height = options.height;\n  const maxTileDimensions = Math.max(this._width, this._height);\n\n  this._levelZeroMaximumGeometricError =\n    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n      this._tilingScheme.ellipsoid,\n      maxTileDimensions,\n      this._tilingScheme.getNumberOfXTilesAtLevel(0),\n    );\n\n  this._errorEvent = new Event();\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n}\n\nObject.defineProperties(CustomHeightmapTerrainProvider.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error. By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n   * the source of the terrain.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask. The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * Water mask is not supported by {@link CustomHeightmapTerrainProvider}, so the return\n   * value will always be false.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasWaterMask: {\n    get: function () {\n      return false;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * Vertex normals are not supported by {@link CustomHeightmapTerrainProvider}, so the return\n   * value will always be false.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasVertexNormals: {\n    get: function () {\n      return false;\n    },\n  },\n\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles. This property may be undefined if availability\n   * information is not available.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {TileAvailability}\n   * @readonly\n   */\n  availability: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the number of columns per heightmap tile.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  width: {\n    get: function () {\n      return this._width;\n    },\n  },\n\n  /**\n   * Gets the number of rows per heightmap tile.\n   * @memberof CustomHeightmapTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  height: {\n    get: function () {\n      return this._height;\n    },\n  },\n});\n\n/**\n * Requests the geometry for a given tile. The result includes terrain\n * data and indicates that all child tiles are available.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise<TerrainData>|undefined} A promise for the requested geometry. If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n */\nCustomHeightmapTerrainProvider.prototype.requestTileGeometry = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const promise = this._callback(x, y, level);\n  if (!defined(promise)) {\n    return undefined;\n  }\n\n  const width = this._width;\n  const height = this._height;\n\n  return Promise.resolve(promise).then(function (heightmapData) {\n    let buffer = heightmapData;\n    if (Array.isArray(buffer)) {\n      // HeightmapTerrainData expects a TypedArray, so convert from number[] to Float64Array\n      buffer = new Float64Array(buffer);\n    }\n\n    return new HeightmapTerrainData({\n      buffer: buffer,\n      width: width,\n      height: height,\n    });\n  });\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nCustomHeightmapTerrainProvider.prototype.getLevelMaximumGeometricError =\n  function (level) {\n    return this._levelZeroMaximumGeometricError / (1 << level);\n  };\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported, otherwise true or false.\n */\nCustomHeightmapTerrainProvider.prototype.getTileDataAvailable = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nCustomHeightmapTerrainProvider.prototype.loadTileDataAvailability = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\nexport default CustomHeightmapTerrainProvider;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CylinderGeometryLibrary from \"./CylinderGeometryLibrary.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst radiusScratch = new Cartesian2();\nconst normalScratch = new Cartesian3();\nconst bitangentScratch = new Cartesian3();\nconst tangentScratch = new Cartesian3();\nconst positionScratch = new Cartesian3();\n\n/**\n * A description of a cylinder.\n *\n * @alias CylinderGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number} options.length The length of the cylinder.\n * @param {number} options.topRadius The radius of the top of the cylinder.\n * @param {number} options.bottomRadius The radius of the bottom of the cylinder.\n * @param {number} [options.slices=128] The number of edges around the perimeter of the cylinder.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} options.slices must be greater than or equal to 3.\n *\n * @see CylinderGeometry.createGeometry\n *\n * @example\n * // create cylinder geometry\n * const cylinder = new Cesium.CylinderGeometry({\n *     length: 200000,\n *     topRadius: 80000,\n *     bottomRadius: 200000,\n * });\n * const geometry = Cesium.CylinderGeometry.createGeometry(cylinder);\n */\nfunction CylinderGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const length = options.length;\n  const topRadius = options.topRadius;\n  const bottomRadius = options.bottomRadius;\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n  const slices = options.slices ?? 128;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(length)) {\n    throw new DeveloperError(\"options.length must be defined.\");\n  }\n  if (!defined(topRadius)) {\n    throw new DeveloperError(\"options.topRadius must be defined.\");\n  }\n  if (!defined(bottomRadius)) {\n    throw new DeveloperError(\"options.bottomRadius must be defined.\");\n  }\n  if (slices < 3) {\n    throw new DeveloperError(\n      \"options.slices must be greater than or equal to 3.\",\n    );\n  }\n  if (\n    defined(options.offsetAttribute) &&\n    options.offsetAttribute === GeometryOffsetAttribute.TOP\n  ) {\n    throw new DeveloperError(\n      \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._length = length;\n  this._topRadius = topRadius;\n  this._bottomRadius = bottomRadius;\n  this._vertexFormat = VertexFormat.clone(vertexFormat);\n  this._slices = slices;\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createCylinderGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nCylinderGeometry.packedLength = VertexFormat.packedLength + 5;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CylinderGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCylinderGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._length;\n  array[startingIndex++] = value._topRadius;\n  array[startingIndex++] = value._bottomRadius;\n  array[startingIndex++] = value._slices;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  vertexFormat: scratchVertexFormat,\n  length: undefined,\n  topRadius: undefined,\n  bottomRadius: undefined,\n  slices: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CylinderGeometry} [result] The object into which to store the result.\n * @returns {CylinderGeometry} The modified result parameter or a new CylinderGeometry instance if one was not provided.\n */\nCylinderGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const length = array[startingIndex++];\n  const topRadius = array[startingIndex++];\n  const bottomRadius = array[startingIndex++];\n  const slices = array[startingIndex++];\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.length = length;\n    scratchOptions.topRadius = topRadius;\n    scratchOptions.bottomRadius = bottomRadius;\n    scratchOptions.slices = slices;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n    return new CylinderGeometry(scratchOptions);\n  }\n\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._length = length;\n  result._topRadius = topRadius;\n  result._bottomRadius = bottomRadius;\n  result._slices = slices;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of a cylinder, including its vertices, indices, and a bounding sphere.\n *\n * @param {CylinderGeometry} cylinderGeometry A description of the cylinder.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCylinderGeometry.createGeometry = function (cylinderGeometry) {\n  let length = cylinderGeometry._length;\n  const topRadius = cylinderGeometry._topRadius;\n  const bottomRadius = cylinderGeometry._bottomRadius;\n  const vertexFormat = cylinderGeometry._vertexFormat;\n  const slices = cylinderGeometry._slices;\n\n  if (\n    length <= 0 ||\n    topRadius < 0 ||\n    bottomRadius < 0 ||\n    (topRadius === 0 && bottomRadius === 0)\n  ) {\n    return;\n  }\n\n  const twoSlices = slices + slices;\n  const threeSlices = slices + twoSlices;\n  const numVertices = twoSlices + twoSlices;\n\n  const positions = CylinderGeometryLibrary.computePositions(\n    length,\n    topRadius,\n    bottomRadius,\n    slices,\n    true,\n  );\n\n  const st = vertexFormat.st ? new Float32Array(numVertices * 2) : undefined;\n  const normals = vertexFormat.normal\n    ? new Float32Array(numVertices * 3)\n    : undefined;\n  const tangents = vertexFormat.tangent\n    ? new Float32Array(numVertices * 3)\n    : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(numVertices * 3)\n    : undefined;\n\n  let i;\n  const computeNormal =\n    vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent;\n\n  if (computeNormal) {\n    const computeTangent = vertexFormat.tangent || vertexFormat.bitangent;\n\n    let normalIndex = 0;\n    let tangentIndex = 0;\n    let bitangentIndex = 0;\n\n    const theta = Math.atan2(bottomRadius - topRadius, length);\n    const normal = normalScratch;\n    normal.z = Math.sin(theta);\n    const normalScale = Math.cos(theta);\n    let tangent = tangentScratch;\n    let bitangent = bitangentScratch;\n\n    for (i = 0; i < slices; i++) {\n      const angle = (i / slices) * CesiumMath.TWO_PI;\n      const x = normalScale * Math.cos(angle);\n      const y = normalScale * Math.sin(angle);\n      if (computeNormal) {\n        normal.x = x;\n        normal.y = y;\n\n        if (computeTangent) {\n          tangent = Cartesian3.normalize(\n            Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent),\n            tangent,\n          );\n        }\n\n        if (vertexFormat.normal) {\n          normals[normalIndex++] = normal.x;\n          normals[normalIndex++] = normal.y;\n          normals[normalIndex++] = normal.z;\n          normals[normalIndex++] = normal.x;\n          normals[normalIndex++] = normal.y;\n          normals[normalIndex++] = normal.z;\n        }\n\n        if (vertexFormat.tangent) {\n          tangents[tangentIndex++] = tangent.x;\n          tangents[tangentIndex++] = tangent.y;\n          tangents[tangentIndex++] = tangent.z;\n          tangents[tangentIndex++] = tangent.x;\n          tangents[tangentIndex++] = tangent.y;\n          tangents[tangentIndex++] = tangent.z;\n        }\n\n        if (vertexFormat.bitangent) {\n          bitangent = Cartesian3.normalize(\n            Cartesian3.cross(normal, tangent, bitangent),\n            bitangent,\n          );\n          bitangents[bitangentIndex++] = bitangent.x;\n          bitangents[bitangentIndex++] = bitangent.y;\n          bitangents[bitangentIndex++] = bitangent.z;\n          bitangents[bitangentIndex++] = bitangent.x;\n          bitangents[bitangentIndex++] = bitangent.y;\n          bitangents[bitangentIndex++] = bitangent.z;\n        }\n      }\n    }\n\n    for (i = 0; i < slices; i++) {\n      if (vertexFormat.normal) {\n        normals[normalIndex++] = 0;\n        normals[normalIndex++] = 0;\n        normals[normalIndex++] = -1;\n      }\n      if (vertexFormat.tangent) {\n        tangents[tangentIndex++] = 1;\n        tangents[tangentIndex++] = 0;\n        tangents[tangentIndex++] = 0;\n      }\n      if (vertexFormat.bitangent) {\n        bitangents[bitangentIndex++] = 0;\n        bitangents[bitangentIndex++] = -1;\n        bitangents[bitangentIndex++] = 0;\n      }\n    }\n\n    for (i = 0; i < slices; i++) {\n      if (vertexFormat.normal) {\n        normals[normalIndex++] = 0;\n        normals[normalIndex++] = 0;\n        normals[normalIndex++] = 1;\n      }\n      if (vertexFormat.tangent) {\n        tangents[tangentIndex++] = 1;\n        tangents[tangentIndex++] = 0;\n        tangents[tangentIndex++] = 0;\n      }\n      if (vertexFormat.bitangent) {\n        bitangents[bitangentIndex++] = 0;\n        bitangents[bitangentIndex++] = 1;\n        bitangents[bitangentIndex++] = 0;\n      }\n    }\n  }\n\n  const numIndices = 12 * slices - 12;\n  const indices = IndexDatatype.createTypedArray(numVertices, numIndices);\n  let index = 0;\n  let j = 0;\n  for (i = 0; i < slices - 1; i++) {\n    indices[index++] = j;\n    indices[index++] = j + 2;\n    indices[index++] = j + 3;\n\n    indices[index++] = j;\n    indices[index++] = j + 3;\n    indices[index++] = j + 1;\n\n    j += 2;\n  }\n\n  indices[index++] = twoSlices - 2;\n  indices[index++] = 0;\n  indices[index++] = 1;\n  indices[index++] = twoSlices - 2;\n  indices[index++] = 1;\n  indices[index++] = twoSlices - 1;\n\n  for (i = 1; i < slices - 1; i++) {\n    indices[index++] = twoSlices + i + 1;\n    indices[index++] = twoSlices + i;\n    indices[index++] = twoSlices;\n  }\n\n  for (i = 1; i < slices - 1; i++) {\n    indices[index++] = threeSlices;\n    indices[index++] = threeSlices + i;\n    indices[index++] = threeSlices + i + 1;\n  }\n\n  let textureCoordIndex = 0;\n  if (vertexFormat.st) {\n    const rad = Math.max(topRadius, bottomRadius);\n    for (i = 0; i < numVertices; i++) {\n      const position = Cartesian3.fromArray(positions, i * 3, positionScratch);\n      st[textureCoordIndex++] = (position.x + rad) / (2.0 * rad);\n      st[textureCoordIndex++] = (position.y + rad) / (2.0 * rad);\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n  if (vertexFormat.position) {\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    });\n  }\n\n  if (vertexFormat.normal) {\n    attributes.normal = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: normals,\n    });\n  }\n\n  if (vertexFormat.tangent) {\n    attributes.tangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: tangents,\n    });\n  }\n\n  if (vertexFormat.bitangent) {\n    attributes.bitangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: bitangents,\n    });\n  }\n\n  if (vertexFormat.st) {\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: st,\n    });\n  }\n\n  radiusScratch.x = length * 0.5;\n  radiusScratch.y = Math.max(bottomRadius, topRadius);\n\n  const boundingSphere = new BoundingSphere(\n    Cartesian3.ZERO,\n    Cartesian2.magnitude(radiusScratch),\n  );\n\n  if (defined(cylinderGeometry._offsetAttribute)) {\n    length = positions.length;\n    const offsetValue =\n      cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n        ? 0\n        : 1;\n    const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: boundingSphere,\n    offsetAttribute: cylinderGeometry._offsetAttribute,\n  });\n};\n\nlet unitCylinderGeometry;\n\n/**\n * Returns the geometric representation of a unit cylinder, including its vertices, indices, and a bounding sphere.\n * @returns {Geometry} The computed vertices and indices.\n *\n * @private\n */\nCylinderGeometry.getUnitCylinder = function () {\n  if (!defined(unitCylinderGeometry)) {\n    unitCylinderGeometry = CylinderGeometry.createGeometry(\n      new CylinderGeometry({\n        topRadius: 1.0,\n        bottomRadius: 1.0,\n        length: 1.0,\n        vertexFormat: VertexFormat.POSITION_ONLY,\n      }),\n    );\n  }\n  return unitCylinderGeometry;\n};\nexport default CylinderGeometry;\n","import CesiumMath from \"./Math.js\";\n\n/**\n * @private\n */\nconst CylinderGeometryLibrary = {};\n\n/**\n * @private\n */\nCylinderGeometryLibrary.computePositions = function (\n  length,\n  topRadius,\n  bottomRadius,\n  slices,\n  fill,\n) {\n  const topZ = length * 0.5;\n  const bottomZ = -topZ;\n\n  const twoSlice = slices + slices;\n  const size = fill ? 2 * twoSlice : twoSlice;\n  const positions = new Float64Array(size * 3);\n  let i;\n  let index = 0;\n  let tbIndex = 0;\n  const bottomOffset = fill ? twoSlice * 3 : 0;\n  const topOffset = fill ? (twoSlice + slices) * 3 : slices * 3;\n\n  for (i = 0; i < slices; i++) {\n    const angle = (i / slices) * CesiumMath.TWO_PI;\n    const x = Math.cos(angle);\n    const y = Math.sin(angle);\n    const bottomX = x * bottomRadius;\n    const bottomY = y * bottomRadius;\n    const topX = x * topRadius;\n    const topY = y * topRadius;\n\n    positions[tbIndex + bottomOffset] = bottomX;\n    positions[tbIndex + bottomOffset + 1] = bottomY;\n    positions[tbIndex + bottomOffset + 2] = bottomZ;\n\n    positions[tbIndex + topOffset] = topX;\n    positions[tbIndex + topOffset + 1] = topY;\n    positions[tbIndex + topOffset + 2] = topZ;\n    tbIndex += 3;\n    if (fill) {\n      positions[index++] = bottomX;\n      positions[index++] = bottomY;\n      positions[index++] = bottomZ;\n      positions[index++] = topX;\n      positions[index++] = topY;\n      positions[index++] = topZ;\n    }\n  }\n\n  return positions;\n};\nexport default CylinderGeometryLibrary;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CylinderGeometryLibrary from \"./CylinderGeometryLibrary.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nconst radiusScratch = new Cartesian2();\n\n/**\n * A description of the outline of a cylinder.\n *\n * @alias CylinderOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number} options.length The length of the cylinder.\n * @param {number} options.topRadius The radius of the top of the cylinder.\n * @param {number} options.bottomRadius The radius of the bottom of the cylinder.\n * @param {number} [options.slices=128] The number of edges around the perimeter of the cylinder.\n * @param {number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surfaces of the cylinder.\n *\n * @exception {DeveloperError} options.length must be greater than 0.\n * @exception {DeveloperError} options.topRadius must be greater than 0.\n * @exception {DeveloperError} options.bottomRadius must be greater than 0.\n * @exception {DeveloperError} bottomRadius and topRadius cannot both equal 0.\n * @exception {DeveloperError} options.slices must be greater than or equal to 3.\n *\n * @see CylinderOutlineGeometry.createGeometry\n *\n * @example\n * // create cylinder geometry\n * const cylinder = new Cesium.CylinderOutlineGeometry({\n *     length: 200000,\n *     topRadius: 80000,\n *     bottomRadius: 200000,\n * });\n * const geometry = Cesium.CylinderOutlineGeometry.createGeometry(cylinder);\n */\nfunction CylinderOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const length = options.length;\n  const topRadius = options.topRadius;\n  const bottomRadius = options.bottomRadius;\n  const slices = options.slices ?? 128;\n  const numberOfVerticalLines = Math.max(\n    options.numberOfVerticalLines ?? 16,\n    0,\n  );\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"options.positions\", length);\n  Check.typeOf.number(\"options.topRadius\", topRadius);\n  Check.typeOf.number(\"options.bottomRadius\", bottomRadius);\n  Check.typeOf.number.greaterThanOrEquals(\"options.slices\", slices, 3);\n  if (\n    defined(options.offsetAttribute) &&\n    options.offsetAttribute === GeometryOffsetAttribute.TOP\n  ) {\n    throw new DeveloperError(\n      \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._length = length;\n  this._topRadius = topRadius;\n  this._bottomRadius = bottomRadius;\n  this._slices = slices;\n  this._numberOfVerticalLines = numberOfVerticalLines;\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createCylinderOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nCylinderOutlineGeometry.packedLength = 6;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {CylinderOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nCylinderOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value._length;\n  array[startingIndex++] = value._topRadius;\n  array[startingIndex++] = value._bottomRadius;\n  array[startingIndex++] = value._slices;\n  array[startingIndex++] = value._numberOfVerticalLines;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchOptions = {\n  length: undefined,\n  topRadius: undefined,\n  bottomRadius: undefined,\n  slices: undefined,\n  numberOfVerticalLines: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {CylinderOutlineGeometry} [result] The object into which to store the result.\n * @returns {CylinderOutlineGeometry} The modified result parameter or a new CylinderOutlineGeometry instance if one was not provided.\n */\nCylinderOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const length = array[startingIndex++];\n  const topRadius = array[startingIndex++];\n  const bottomRadius = array[startingIndex++];\n  const slices = array[startingIndex++];\n  const numberOfVerticalLines = array[startingIndex++];\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.length = length;\n    scratchOptions.topRadius = topRadius;\n    scratchOptions.bottomRadius = bottomRadius;\n    scratchOptions.slices = slices;\n    scratchOptions.numberOfVerticalLines = numberOfVerticalLines;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n    return new CylinderOutlineGeometry(scratchOptions);\n  }\n\n  result._length = length;\n  result._topRadius = topRadius;\n  result._bottomRadius = bottomRadius;\n  result._slices = slices;\n  result._numberOfVerticalLines = numberOfVerticalLines;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a cylinder, including its vertices, indices, and a bounding sphere.\n *\n * @param {CylinderOutlineGeometry} cylinderGeometry A description of the cylinder outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nCylinderOutlineGeometry.createGeometry = function (cylinderGeometry) {\n  let length = cylinderGeometry._length;\n  const topRadius = cylinderGeometry._topRadius;\n  const bottomRadius = cylinderGeometry._bottomRadius;\n  const slices = cylinderGeometry._slices;\n  const numberOfVerticalLines = cylinderGeometry._numberOfVerticalLines;\n\n  if (\n    length <= 0 ||\n    topRadius < 0 ||\n    bottomRadius < 0 ||\n    (topRadius === 0 && bottomRadius === 0)\n  ) {\n    return;\n  }\n\n  const numVertices = slices * 2;\n\n  const positions = CylinderGeometryLibrary.computePositions(\n    length,\n    topRadius,\n    bottomRadius,\n    slices,\n    false,\n  );\n  let numIndices = slices * 2;\n  let numSide;\n  if (numberOfVerticalLines > 0) {\n    const numSideLines = Math.min(numberOfVerticalLines, slices);\n    numSide = Math.round(slices / numSideLines);\n    numIndices += numSideLines;\n  }\n\n  const indices = IndexDatatype.createTypedArray(numVertices, numIndices * 2);\n  let index = 0;\n  let i;\n  for (i = 0; i < slices - 1; i++) {\n    indices[index++] = i;\n    indices[index++] = i + 1;\n    indices[index++] = i + slices;\n    indices[index++] = i + 1 + slices;\n  }\n\n  indices[index++] = slices - 1;\n  indices[index++] = 0;\n  indices[index++] = slices + slices - 1;\n  indices[index++] = slices;\n\n  if (numberOfVerticalLines > 0) {\n    for (i = 0; i < slices; i += numSide) {\n      indices[index++] = i;\n      indices[index++] = i + slices;\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: positions,\n  });\n\n  radiusScratch.x = length * 0.5;\n  radiusScratch.y = Math.max(bottomRadius, topRadius);\n\n  const boundingSphere = new BoundingSphere(\n    Cartesian3.ZERO,\n    Cartesian2.magnitude(radiusScratch),\n  );\n\n  if (defined(cylinderGeometry._offsetAttribute)) {\n    length = positions.length;\n    const offsetValue =\n      cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n        ? 0\n        : 1;\n    const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: boundingSphere,\n    offsetAttribute: cylinderGeometry._offsetAttribute,\n  });\n};\nexport default CylinderOutlineGeometry;\n","/**\n * A simple proxy that appends the desired resource as the sole query parameter\n * to the given proxy URL.\n *\n * @alias DefaultProxy\n * @constructor\n * @extends {Proxy}\n *\n * @param {string} proxy The proxy URL that will be used to requests all resources.\n */\nfunction DefaultProxy(proxy) {\n  this.proxy = proxy;\n}\n\n/**\n * Get the final URL to use to request a given resource.\n *\n * @param {string} resource The resource to request.\n * @returns {string} proxied resource\n */\nDefaultProxy.prototype.getURL = function (resource) {\n  const prefix = this.proxy.indexOf(\"?\") === -1 ? \"?\" : \"\";\n  return this.proxy + prefix + encodeURIComponent(resource);\n};\n\nexport default DefaultProxy;\n","import defined from \"./defined.js\";\n\n/**\n * Constructs an exception object that is thrown due to a developer error, e.g., invalid argument,\n * argument out of range, etc.  This exception should only be thrown during development;\n * it usually indicates a bug in the calling code.  This exception should never be\n * caught; instead the calling code should strive not to generate it.\n * <br /><br />\n * On the other hand, a {@link RuntimeError} indicates an exception that may\n * be thrown at runtime, e.g., out of memory, that the calling code should be prepared\n * to catch.\n *\n * @alias DeveloperError\n * @constructor\n * @extends Error\n *\n * @param {string} [message] The error message for this exception.\n *\n * @see RuntimeError\n */\nfunction DeveloperError(message) {\n  /**\n   * 'DeveloperError' indicating that this exception was thrown due to a developer error.\n   * @type {string}\n   * @readonly\n   */\n  this.name = \"DeveloperError\";\n\n  /**\n   * The explanation for why this exception was thrown.\n   * @type {string}\n   * @readonly\n   */\n  this.message = message;\n\n  //Browsers such as IE don't have a stack property until you actually throw the error.\n  let stack;\n  try {\n    throw new Error();\n  } catch (e) {\n    stack = e.stack;\n  }\n\n  /**\n   * The stack trace of this exception, if available.\n   * @type {string}\n   * @readonly\n   */\n  this.stack = stack;\n}\n\nif (defined(Object.create)) {\n  DeveloperError.prototype = Object.create(Error.prototype);\n  DeveloperError.prototype.constructor = DeveloperError;\n}\n\nDeveloperError.prototype.toString = function () {\n  let str = `${this.name}: ${this.message}`;\n\n  if (defined(this.stack)) {\n    str += `\\n${this.stack.toString()}`;\n  }\n\n  return str;\n};\n\n/**\n * @private\n */\nDeveloperError.throwInstantiationError = function () {\n  throw new DeveloperError(\n    \"This function defines an interface and should not be called directly.\",\n  );\n};\nexport default DeveloperError;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Determines visibility based on the distance to the camera.\n *\n * @alias DistanceDisplayCondition\n * @constructor\n *\n * @param {number} [near=0.0] The smallest distance in the interval where the object is visible.\n * @param {number} [far=Number.MAX_VALUE] The largest distance in the interval where the object is visible.\n *\n * @example\n * // Make a billboard that is only visible when the distance to the camera is between 10 and 20 meters.\n * billboard.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(10.0, 20.0);\n */\nfunction DistanceDisplayCondition(near, far) {\n  near = near ?? 0.0;\n  this._near = near;\n\n  far = far ?? Number.MAX_VALUE;\n  this._far = far;\n}\n\nObject.defineProperties(DistanceDisplayCondition.prototype, {\n  /**\n   * The smallest distance in the interval where the object is visible.\n   * @memberof DistanceDisplayCondition.prototype\n   * @type {number}\n   * @default 0.0\n   */\n  near: {\n    get: function () {\n      return this._near;\n    },\n    set: function (value) {\n      this._near = value;\n    },\n  },\n  /**\n   * The largest distance in the interval where the object is visible.\n   * @memberof DistanceDisplayCondition.prototype\n   * @type {number}\n   * @default Number.MAX_VALUE\n   */\n  far: {\n    get: function () {\n      return this._far;\n    },\n    set: function (value) {\n      this._far = value;\n    },\n  },\n});\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nDistanceDisplayCondition.packedLength = 2;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {DistanceDisplayCondition} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nDistanceDisplayCondition.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.near;\n  array[startingIndex] = value.far;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {DistanceDisplayCondition} [result] The object into which to store the result.\n * @returns {DistanceDisplayCondition} The modified result parameter or a new DistanceDisplayCondition instance if one was not provided.\n */\nDistanceDisplayCondition.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new DistanceDisplayCondition();\n  }\n  result.near = array[startingIndex++];\n  result.far = array[startingIndex];\n  return result;\n};\n\n/**\n * Determines if two distance display conditions are equal.\n *\n * @param {DistanceDisplayCondition} [left] A distance display condition.\n * @param {DistanceDisplayCondition} [right] Another distance display condition.\n * @return {boolean} Whether the two distance display conditions are equal.\n */\nDistanceDisplayCondition.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.near === right.near &&\n      left.far === right.far)\n  );\n};\n\n/**\n * Duplicates a distance display condition instance.\n *\n * @param {DistanceDisplayCondition} [value] The distance display condition to duplicate.\n * @param {DistanceDisplayCondition} [result] The result onto which to store the result.\n * @return {DistanceDisplayCondition} The duplicated instance.\n */\nDistanceDisplayCondition.clone = function (value, result) {\n  if (!defined(value)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    result = new DistanceDisplayCondition();\n  }\n\n  result.near = value.near;\n  result.far = value.far;\n  return result;\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {DistanceDisplayCondition} [result] The result onto which to store the result.\n * @return {DistanceDisplayCondition} The duplicated instance.\n */\nDistanceDisplayCondition.prototype.clone = function (result) {\n  return DistanceDisplayCondition.clone(this, result);\n};\n\n/**\n * Determines if this distance display condition is equal to another.\n *\n * @param {DistanceDisplayCondition} [other] Another distance display condition.\n * @return {boolean} Whether this distance display condition is equal to the other.\n */\nDistanceDisplayCondition.prototype.equals = function (other) {\n  return DistanceDisplayCondition.equals(this, other);\n};\nexport default DistanceDisplayCondition;\n","import ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Value and type information for per-instance geometry attribute that determines if the geometry instance has a distance display condition.\n *\n * @alias DistanceDisplayConditionGeometryInstanceAttribute\n * @constructor\n *\n * @param {number} [near=0.0] The near distance.\n * @param {number} [far=Number.MAX_VALUE] The far distance.\n *\n * @exception {DeveloperError} far must be greater than near.\n *\n * @example\n * const instance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.BoxGeometry({\n *     vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,\n *     minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0),\n *     maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0)\n *   }),\n *   modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *     Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n *   id : 'box',\n *   attributes : {\n *     distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(100.0, 10000.0)\n *   }\n * });\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction DistanceDisplayConditionGeometryInstanceAttribute(near, far) {\n  near = near ?? 0.0;\n  far = far ?? Number.MAX_VALUE;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (far <= near) {\n    throw new DeveloperError(\n      \"far distance must be greater than near distance.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * The values for the attributes stored in a typed array.\n   *\n   * @type {Float32Array}\n   *\n   * @default [0.0, 0.0, Number.MAX_VALUE]\n   */\n  this.value = new Float32Array([near, far]);\n}\n\nObject.defineProperties(\n  DistanceDisplayConditionGeometryInstanceAttribute.prototype,\n  {\n    /**\n     * The datatype of each component in the attribute, e.g., individual elements in\n     * {@link DistanceDisplayConditionGeometryInstanceAttribute#value}.\n     *\n     * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype\n     *\n     * @type {ComponentDatatype}\n     * @readonly\n     *\n     * @default {@link ComponentDatatype.FLOAT}\n     */\n    componentDatatype: {\n      get: function () {\n        return ComponentDatatype.FLOAT;\n      },\n    },\n\n    /**\n     * The number of components in the attributes, i.e., {@link DistanceDisplayConditionGeometryInstanceAttribute#value}.\n     *\n     * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype\n     *\n     * @type {number}\n     * @readonly\n     *\n     * @default 3\n     */\n    componentsPerAttribute: {\n      get: function () {\n        return 2;\n      },\n    },\n\n    /**\n     * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n     * indicate that the components should be mapped to the range [0, 1] (unsigned)\n     * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n     *\n     * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype\n     *\n     * @type {boolean}\n     * @readonly\n     *\n     * @default false\n     */\n    normalize: {\n      get: function () {\n        return false;\n      },\n    },\n  },\n);\n\n/**\n * Creates a new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}.\n *\n * @param {DistanceDisplayCondition} distanceDisplayCondition The distance display condition.\n * @returns {DistanceDisplayConditionGeometryInstanceAttribute} The new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance.\n *\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @example\n * const distanceDisplayCondition = new Cesium.DistanceDisplayCondition(100.0, 10000.0);\n * const instance = new Cesium.GeometryInstance({\n *   geometry : geometry,\n *   attributes : {\n *     distanceDisplayCondition : Cesium.DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(distanceDisplayCondition)\n *   }\n * });\n */\nDistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition =\n  function (distanceDisplayCondition) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(distanceDisplayCondition)) {\n      throw new DeveloperError(\"distanceDisplayCondition is required.\");\n    }\n    if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n      throw new DeveloperError(\n        \"distanceDisplayCondition.far distance must be greater than distanceDisplayCondition.near distance.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    return new DistanceDisplayConditionGeometryInstanceAttribute(\n      distanceDisplayCondition.near,\n      distanceDisplayCondition.far,\n    );\n  };\n\n/**\n * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute.\n *\n * @param {DistanceDisplayCondition} distanceDisplayCondition The distance display condition value.\n * @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {Float32Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.distanceDisplayCondition = Cesium.DistanceDisplayConditionGeometryInstanceAttribute.toValue(distanceDisplayCondition, attributes.distanceDisplayCondition);\n */\nDistanceDisplayConditionGeometryInstanceAttribute.toValue = function (\n  distanceDisplayCondition,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(distanceDisplayCondition)) {\n    throw new DeveloperError(\"distanceDisplayCondition is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Float32Array([\n      distanceDisplayCondition.near,\n      distanceDisplayCondition.far,\n    ]);\n  }\n  result[0] = distanceDisplayCondition.near;\n  result[1] = distanceDisplayCondition.far;\n  return result;\n};\nexport default DistanceDisplayConditionGeometryInstanceAttribute;\n","import CesiumMath from \"./Math.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Array-backed min-max heap implementation of a double-ended priority queue.\n * This data structure allows for efficient removal of minimum and maximum elements.\n *\n * @alias DoubleEndedPriorityQueue\n * @constructor\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {DoubleEndedPriorityQueue.ComparatorCallback} options.comparator The comparator to use for the queue. If comparator(a, b) is less than 0, a is lower priority than b.\n * @param {number} [options.maximumLength] The maximum length of the queue. If an element is inserted when the queue is at full capacity, the minimum element is removed. By default, the size of the queue is unlimited.\n */\nfunction DoubleEndedPriorityQueue(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.defined(\"options.comparator\", options.comparator);\n  if (defined(options.maximumLength)) {\n    Check.typeOf.number.greaterThanOrEquals(\n      \"options.maximumLength\",\n      options.maximumLength,\n      0,\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._comparator = options.comparator;\n  this._maximumLength = options.maximumLength;\n  this._array = defined(options.maximumLength)\n    ? new Array(options.maximumLength)\n    : [];\n  this._length = 0;\n}\n\nObject.defineProperties(DoubleEndedPriorityQueue.prototype, {\n  /**\n   * Gets the number of elements in the queue.\n   *\n   * @memberof DoubleEndedPriorityQueue.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._length;\n    },\n  },\n\n  /**\n   * Gets or sets the maximum number of elements in the queue.\n   * If set to a smaller value than the current length of the queue, the lowest priority elements are removed.\n   * If an element is inserted when the queue is at full capacity, the minimum element is removed.\n   * If set to undefined, the size of the queue is unlimited.\n   *\n   * @memberof DoubleEndedPriorityQueue.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  maximumLength: {\n    get: function () {\n      return this._maximumLength;\n    },\n    set: function (value) {\n      if (defined(value)) {\n        //>>includeStart('debug', pragmas.debug);\n        Check.typeOf.number.greaterThanOrEquals(\"maximumLength\", value, 0);\n        //>>includeEnd('debug');\n\n        // Remove elements until the maximum length is met.\n        while (this._length > value) {\n          this.removeMinimum();\n        }\n\n        // The array size is fixed to the maximum length\n        this._array.length = value;\n      }\n      this._maximumLength = value;\n    },\n  },\n\n  /**\n   * Gets the internal array.\n   *\n   * @memberof DoubleEndedPriorityQueue.prototype\n   *\n   * @type {Array}\n   * @readonly\n   */\n  internalArray: {\n    get: function () {\n      return this._array;\n    },\n  },\n\n  /**\n   * The comparator used by the queue.\n   * If comparator(a, b) is less than 0, a is lower priority than b.\n   *\n   * @memberof DoubleEndedPriorityQueue.prototype\n   *\n   * @type {DoubleEndedPriorityQueue.ComparatorCallback}\n   * @readonly\n   */\n  comparator: {\n    get: function () {\n      return this._comparator;\n    },\n  },\n});\n\n/**\n * Clones the double ended priority queue.\n *\n * @returns {DoubleEndedPriorityQueue} The cloned double ended priority queue.\n */\nDoubleEndedPriorityQueue.prototype.clone = function () {\n  const maximumLength = this._maximumLength;\n  const comparator = this._comparator;\n  const array = this._array;\n  const length = this._length;\n\n  const result = new DoubleEndedPriorityQueue({\n    comparator: comparator,\n    maximumLength: maximumLength,\n  });\n\n  result._length = length;\n  for (let i = 0; i < length; i++) {\n    result._array[i] = array[i];\n  }\n\n  return result;\n};\n\n/**\n * Removes all elements from the queue.\n */\nDoubleEndedPriorityQueue.prototype.reset = function () {\n  this._length = 0;\n\n  // Dereference elements\n  const maximumLength = this._maximumLength;\n  if (defined(maximumLength)) {\n    // Dereference all elements but keep the array the same size\n    for (let i = 0; i < maximumLength; i++) {\n      this._array[i] = undefined;\n    }\n  } else {\n    // Dereference all elements by clearing the array\n    this._array.length = 0;\n  }\n};\n\n/**\n * Resort the queue.\n */\nDoubleEndedPriorityQueue.prototype.resort = function () {\n  const length = this._length;\n\n  // Fix the queue from the top-down\n  for (let i = 0; i < length; i++) {\n    pushUp(this, i);\n  }\n};\n\n/**\n * Inserts an element into the queue.\n * If the queue is at full capacity, the minimum element is removed.\n * The new element is returned (and not added) if it is less than or equal priority to the minimum element.\n *\n * @param {*} element\n * @returns {*|undefined} The minimum element if the queue is at full capacity. Returns undefined if there is no maximum length.\n */\nDoubleEndedPriorityQueue.prototype.insert = function (element) {\n  let removedElement;\n\n  const maximumLength = this._maximumLength;\n  if (defined(maximumLength)) {\n    if (maximumLength === 0) {\n      return undefined;\n    } else if (this._length === maximumLength) {\n      // It's faster to access the minimum directly instead of calling the getter\n      // because it avoids the length === 0 check.\n      const minimumElement = this._array[0];\n      if (this._comparator(element, minimumElement) <= 0.0) {\n        // The element that is being inserted is less than or equal to\n        // the minimum element, so don't insert anything and exit early.\n        return element;\n      }\n      removedElement = this.removeMinimum();\n    }\n  }\n\n  const index = this._length;\n  this._array[index] = element;\n  this._length++;\n  pushUp(this, index);\n\n  return removedElement;\n};\n\n/**\n * Removes the minimum element from the queue and returns it.\n * If the queue is empty, the return value is undefined.\n *\n * @returns {*|undefined} The minimum element, or undefined if the queue is empty.\n */\nDoubleEndedPriorityQueue.prototype.removeMinimum = function () {\n  const length = this._length;\n  if (length === 0) {\n    return undefined;\n  }\n\n  this._length--;\n\n  // The minimum element is always the root\n  const minimumElement = this._array[0];\n\n  if (length >= 2) {\n    this._array[0] = this._array[length - 1];\n    pushDown(this, 0);\n  }\n\n  // Dereference removed element\n  this._array[length - 1] = undefined;\n\n  return minimumElement;\n};\n\n/**\n * Removes the maximum element from the queue and returns it.\n * If the queue is empty, the return value is undefined.\n *\n * @returns {*|undefined} The maximum element, or undefined if the queue is empty.\n */\nDoubleEndedPriorityQueue.prototype.removeMaximum = function () {\n  const length = this._length;\n  if (length === 0) {\n    return undefined;\n  }\n\n  this._length--;\n  let maximumElement;\n\n  // If the root has no children, the maximum is the root.\n  // If the root has one child, the maximum is the child.\n  if (length <= 2) {\n    maximumElement = this._array[length - 1];\n  } else {\n    // Otherwise, the maximum is the larger of the root's two children.\n    const maximumElementIndex = greaterThan(this, 1, 2) ? 1 : 2;\n    maximumElement = this._array[maximumElementIndex];\n\n    // Re-balance the heap\n    this._array[maximumElementIndex] = this._array[length - 1];\n    if (length >= 4) {\n      pushDown(this, maximumElementIndex);\n    }\n  }\n\n  // Dereference removed element\n  this._array[length - 1] = undefined;\n\n  return maximumElement;\n};\n\n/**\n * Gets the minimum element in the queue.\n * If the queue is empty, the result is undefined.\n *\n * @returns {*|undefined} element\n */\n\nDoubleEndedPriorityQueue.prototype.getMinimum = function () {\n  const length = this._length;\n  if (length === 0) {\n    return undefined;\n  }\n\n  // The minimum element is always the root\n  return this._array[0];\n};\n\n/**\n * Gets the maximum element in the queue.\n * If the queue is empty, the result is undefined.\n *\n * @returns {*|undefined} element\n */\nDoubleEndedPriorityQueue.prototype.getMaximum = function () {\n  const length = this._length;\n  if (length === 0) {\n    return undefined;\n  }\n\n  // If the root has no children, the maximum is the root.\n  // If the root has one child, the maximum is the child.\n  if (length <= 2) {\n    return this._array[length - 1];\n  }\n\n  // Otherwise, the maximum is the larger of the root's two children.\n  return this._array[greaterThan(this, 1, 2) ? 1 : 2];\n};\n\n// Helper functions\n\nfunction swap(that, indexA, indexB) {\n  const array = that._array;\n  const temp = array[indexA];\n  array[indexA] = array[indexB];\n  array[indexB] = temp;\n}\n\nfunction lessThan(that, indexA, indexB) {\n  return that._comparator(that._array[indexA], that._array[indexB]) < 0.0;\n}\n\nfunction greaterThan(that, indexA, indexB) {\n  return that._comparator(that._array[indexA], that._array[indexB]) > 0.0;\n}\n\nfunction pushUp(that, index) {\n  if (index === 0) {\n    return;\n  }\n  const onMinLevel = Math.floor(CesiumMath.log2(index + 1)) % 2 === 0;\n  const parentIndex = Math.floor((index - 1) / 2);\n  const lessThanParent = lessThan(that, index, parentIndex);\n\n  // Get the element onto the correct level if it's not already\n  if (lessThanParent !== onMinLevel) {\n    swap(that, index, parentIndex);\n    index = parentIndex;\n  }\n\n  // Swap element with grandparent as long as it:\n  // 1) has a grandparent\n  // 2A) is less than the grandparent when on a min level\n  // 2B) is greater than the grandparent when on a max level\n  while (index >= 3) {\n    const grandparentIndex = Math.floor((index - 3) / 4);\n    if (lessThan(that, index, grandparentIndex) !== lessThanParent) {\n      break;\n    }\n    swap(that, index, grandparentIndex);\n    index = grandparentIndex;\n  }\n}\n\nfunction pushDown(that, index) {\n  const length = that._length;\n  const onMinLevel = Math.floor(CesiumMath.log2(index + 1)) % 2 === 0;\n\n  // Loop as long as there is a left child.\n  let leftChildIndex;\n  while ((leftChildIndex = 2 * index + 1) < length) {\n    // Find the minimum (or maximum) child or grandchild\n    let target = leftChildIndex;\n    const rightChildIndex = leftChildIndex + 1;\n    if (rightChildIndex < length) {\n      if (lessThan(that, rightChildIndex, target) === onMinLevel) {\n        target = rightChildIndex;\n      }\n      const grandChildStart = 2 * leftChildIndex + 1;\n      const grandChildCount = Math.max(\n        Math.min(length - grandChildStart, 4),\n        0,\n      );\n      for (let i = 0; i < grandChildCount; i++) {\n        const grandChildIndex = grandChildStart + i;\n        if (lessThan(that, grandChildIndex, target) === onMinLevel) {\n          target = grandChildIndex;\n        }\n      }\n    }\n\n    // Swap the element into the correct spot\n    if (lessThan(that, target, index) === onMinLevel) {\n      swap(that, target, index);\n      if (target !== leftChildIndex && target !== rightChildIndex) {\n        const parentOfGrandchildIndex = Math.floor((target - 1) / 2);\n        if (greaterThan(that, target, parentOfGrandchildIndex) === onMinLevel) {\n          swap(that, target, parentOfGrandchildIndex);\n        }\n      }\n    }\n\n    index = target;\n  }\n}\n\n/**\n * The comparator to use for the queue.\n * @callback DoubleEndedPriorityQueue.ComparatorCallback\n * @param {*} a An element in the queue.\n * @param {*} b An element in the queue.\n * @returns {number} If the result of the comparison is less than 0, a is lower priority than b.\n */\nexport default DoubleEndedPriorityQueue;\n","import defined from \"./defined.js\";\n\n/**\n * @private\n */\nfunction DoublyLinkedList() {\n  this.head = undefined;\n  this.tail = undefined;\n  this._length = 0;\n}\n\nObject.defineProperties(DoublyLinkedList.prototype, {\n  length: {\n    get: function () {\n      return this._length;\n    },\n  },\n});\n\n/**\n * @private\n */\nfunction DoublyLinkedListNode(item, previous, next) {\n  this.item = item;\n  this.previous = previous;\n  this.next = next;\n}\n\n/**\n * Adds the item to the end of the list\n * @param {*} [item]\n * @return {DoublyLinkedListNode}\n */\nDoublyLinkedList.prototype.add = function (item) {\n  const node = new DoublyLinkedListNode(item, this.tail, undefined);\n\n  if (defined(this.tail)) {\n    this.tail.next = node;\n    this.tail = node;\n  } else {\n    this.head = node;\n    this.tail = node;\n  }\n\n  ++this._length;\n\n  return node;\n};\n\nfunction remove(list, node) {\n  if (defined(node.previous) && defined(node.next)) {\n    node.previous.next = node.next;\n    node.next.previous = node.previous;\n  } else if (defined(node.previous)) {\n    // Remove last node\n    node.previous.next = undefined;\n    list.tail = node.previous;\n  } else if (defined(node.next)) {\n    // Remove first node\n    node.next.previous = undefined;\n    list.head = node.next;\n  } else {\n    // Remove last node in the linked list\n    list.head = undefined;\n    list.tail = undefined;\n  }\n\n  node.next = undefined;\n  node.previous = undefined;\n}\n\n/**\n * Removes the given node from the list\n * @param {DoublyLinkedListNode} node\n */\nDoublyLinkedList.prototype.remove = function (node) {\n  if (!defined(node)) {\n    return;\n  }\n\n  remove(this, node);\n\n  --this._length;\n};\n\n/**\n * Moves nextNode after node\n * @param {DoublyLinkedListNode} node\n * @param {DoublyLinkedListNode} nextNode\n */\nDoublyLinkedList.prototype.splice = function (node, nextNode) {\n  if (node === nextNode) {\n    return;\n  }\n\n  // Remove nextNode, then insert after node\n  remove(this, nextNode);\n\n  const oldNodeNext = node.next;\n  node.next = nextNode;\n\n  // nextNode is the new tail\n  if (this.tail === node) {\n    this.tail = nextNode;\n  } else {\n    oldNodeNext.previous = nextNode;\n  }\n\n  nextNode.next = oldNodeNext;\n  nextNode.previous = node;\n};\nexport default DoublyLinkedList;\n","import binarySearch from \"./binarySearch.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport EarthOrientationParametersSample from \"./EarthOrientationParametersSample.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport LeapSecond from \"./LeapSecond.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TimeConstants from \"./TimeConstants.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\n/**\n * Specifies Earth polar motion coordinates and the difference between UT1 and UTC.\n * These Earth Orientation Parameters (EOP) are primarily used in the transformation from\n * the International Celestial Reference Frame (ICRF) to the International Terrestrial\n * Reference Frame (ITRF).\n * This object is normally not instantiated directly, use {@link EarthOrientationParameters.fromUrl}.\n *\n * @alias EarthOrientationParameters\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {object} [options.data] The actual EOP data.  If neither this\n *                 parameter nor options.data is specified, all EOP values are assumed\n *                 to be 0.0.\n * @param {boolean} [options.addNewLeapSeconds=true] True if leap seconds that\n *                  are specified in the EOP data but not in {@link JulianDate.leapSeconds}\n *                  should be added to {@link JulianDate.leapSeconds}.  False if\n *                  new leap seconds should be handled correctly in the context\n *                  of the EOP data but otherwise ignored.\n *\n * @private\n */\nfunction EarthOrientationParameters(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._dates = undefined;\n  this._samples = undefined;\n\n  this._dateColumn = -1;\n  this._xPoleWanderRadiansColumn = -1;\n  this._yPoleWanderRadiansColumn = -1;\n  this._ut1MinusUtcSecondsColumn = -1;\n  this._xCelestialPoleOffsetRadiansColumn = -1;\n  this._yCelestialPoleOffsetRadiansColumn = -1;\n  this._taiMinusUtcSecondsColumn = -1;\n\n  this._columnCount = 0;\n  this._lastIndex = -1;\n\n  this._addNewLeapSeconds = options.addNewLeapSeconds ?? true;\n\n  if (defined(options.data)) {\n    // Use supplied EOP data.\n    onDataReady(this, options.data);\n  } else {\n    // Use all zeros for EOP data.\n    onDataReady(this, {\n      columnNames: [\n        \"dateIso8601\",\n        \"modifiedJulianDateUtc\",\n        \"xPoleWanderRadians\",\n        \"yPoleWanderRadians\",\n        \"ut1MinusUtcSeconds\",\n        \"lengthOfDayCorrectionSeconds\",\n        \"xCelestialPoleOffsetRadians\",\n        \"yCelestialPoleOffsetRadians\",\n        \"taiMinusUtcSeconds\",\n      ],\n      samples: [],\n    });\n  }\n}\n\n/**\n *\n * @param {Resource|string} [url] The URL from which to obtain EOP data.  If neither this\n *                 parameter nor options.data is specified, all EOP values are assumed\n *                 to be 0.0.  If options.data is specified, this parameter is\n *                 ignored.\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.addNewLeapSeconds=true] True if leap seconds that\n *                  are specified in the EOP data but not in {@link JulianDate.leapSeconds}\n *                  should be added to {@link JulianDate.leapSeconds}.  False if\n *                  new leap seconds should be handled correctly in the context\n *                  of the EOP data but otherwise ignored.\n *\n * @example\n * // An example EOP data file, EOP.json:\n * {\n *   \"columnNames\" : [\"dateIso8601\",\"modifiedJulianDateUtc\",\"xPoleWanderRadians\",\"yPoleWanderRadians\",\"ut1MinusUtcSeconds\",\"lengthOfDayCorrectionSeconds\",\"xCelestialPoleOffsetRadians\",\"yCelestialPoleOffsetRadians\",\"taiMinusUtcSeconds\"],\n *   \"samples\" : [\n *      \"2011-07-01T00:00:00Z\",55743.0,2.117957047295119e-7,2.111518721609984e-6,-0.2908948,-2.956e-4,3.393695767766752e-11,3.3452143996557983e-10,34.0,\n *      \"2011-07-02T00:00:00Z\",55744.0,2.193297093339541e-7,2.115460256837405e-6,-0.29065,-1.824e-4,-8.241832578862112e-11,5.623838700870617e-10,34.0,\n *      \"2011-07-03T00:00:00Z\",55745.0,2.262286080161428e-7,2.1191157519929706e-6,-0.2905572,1.9e-6,-3.490658503988659e-10,6.981317007977318e-10,34.0\n *   ]\n * }\n *\n * @example\n * // Loading the EOP data\n * const eop = await Cesium.EarthOrientationParameters.fromUrl('Data/EOP.json');\n * Cesium.Transforms.earthOrientationParameters = eop;\n */\nEarthOrientationParameters.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const resource = Resource.createIfNeeded(url);\n\n  // Download EOP data.\n  let eopData;\n  try {\n    eopData = await resource.fetchJson();\n  } catch (e) {\n    throw new RuntimeError(\n      `An error occurred while retrieving the EOP data from the URL ${resource.url}.`,\n    );\n  }\n\n  return new EarthOrientationParameters({\n    addNewLeapSeconds: options.addNewLeapSeconds,\n    data: eopData,\n  });\n};\n\n/**\n * A default {@link EarthOrientationParameters} instance that returns zero for all EOP values.\n */\nEarthOrientationParameters.NONE = Object.freeze({\n  compute: function (date, result) {\n    if (!defined(result)) {\n      result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0);\n    } else {\n      result.xPoleWander = 0.0;\n      result.yPoleWander = 0.0;\n      result.xPoleOffset = 0.0;\n      result.yPoleOffset = 0.0;\n      result.ut1MinusUtc = 0.0;\n    }\n    return result;\n  },\n});\n\n/**\n * Computes the Earth Orientation Parameters (EOP) for a given date by interpolating.\n * If the EOP data has not yet been download, this method returns undefined.\n *\n * @param {JulianDate} date The date for each to evaluate the EOP.\n * @param {EarthOrientationParametersSample} [result] The instance to which to copy the result.\n *        If this parameter is undefined, a new instance is created and returned.\n * @returns {EarthOrientationParametersSample} The EOP evaluated at the given date, or\n *          undefined if the data necessary to evaluate EOP at the date has not yet been\n *          downloaded.\n *\n * @exception {RuntimeError} The loaded EOP data has an error and cannot be used.\n *\n * @see EarthOrientationParameters#fromUrl\n */\nEarthOrientationParameters.prototype.compute = function (date, result) {\n  // We cannot compute until the samples are available.\n  if (!defined(this._samples)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0);\n  }\n\n  if (this._samples.length === 0) {\n    result.xPoleWander = 0.0;\n    result.yPoleWander = 0.0;\n    result.xPoleOffset = 0.0;\n    result.yPoleOffset = 0.0;\n    result.ut1MinusUtc = 0.0;\n    return result;\n  }\n\n  const dates = this._dates;\n  const lastIndex = this._lastIndex;\n\n  let before = 0;\n  let after = 0;\n  if (defined(lastIndex)) {\n    const previousIndexDate = dates[lastIndex];\n    const nextIndexDate = dates[lastIndex + 1];\n    const isAfterPrevious = JulianDate.lessThanOrEquals(\n      previousIndexDate,\n      date,\n    );\n    const isAfterLastSample = !defined(nextIndexDate);\n    const isBeforeNext =\n      isAfterLastSample || JulianDate.greaterThanOrEquals(nextIndexDate, date);\n\n    if (isAfterPrevious && isBeforeNext) {\n      before = lastIndex;\n\n      if (!isAfterLastSample && nextIndexDate.equals(date)) {\n        ++before;\n      }\n      after = before + 1;\n\n      interpolate(this, dates, this._samples, date, before, after, result);\n      return result;\n    }\n  }\n\n  let index = binarySearch(dates, date, JulianDate.compare, this._dateColumn);\n  if (index >= 0) {\n    // If the next entry is the same date, use the later entry.  This way, if two entries\n    // describe the same moment, one before a leap second and the other after, then we will use\n    // the post-leap second data.\n    if (index < dates.length - 1 && dates[index + 1].equals(date)) {\n      ++index;\n    }\n    before = index;\n    after = index;\n  } else {\n    after = ~index;\n    before = after - 1;\n\n    // Use the first entry if the date requested is before the beginning of the data.\n    if (before < 0) {\n      before = 0;\n    }\n  }\n\n  this._lastIndex = before;\n\n  interpolate(this, dates, this._samples, date, before, after, result);\n  return result;\n};\n\nfunction compareLeapSecondDates(leapSecond, dateToFind) {\n  return JulianDate.compare(leapSecond.julianDate, dateToFind);\n}\n\nfunction onDataReady(eop, eopData) {\n  if (!defined(eopData.columnNames)) {\n    throw new RuntimeError(\n      \"Error in loaded EOP data: The columnNames property is required.\",\n    );\n  }\n\n  if (!defined(eopData.samples)) {\n    throw new RuntimeError(\n      \"Error in loaded EOP data: The samples property is required.\",\n    );\n  }\n\n  const dateColumn = eopData.columnNames.indexOf(\"modifiedJulianDateUtc\");\n  const xPoleWanderRadiansColumn =\n    eopData.columnNames.indexOf(\"xPoleWanderRadians\");\n  const yPoleWanderRadiansColumn =\n    eopData.columnNames.indexOf(\"yPoleWanderRadians\");\n  const ut1MinusUtcSecondsColumn =\n    eopData.columnNames.indexOf(\"ut1MinusUtcSeconds\");\n  const xCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf(\n    \"xCelestialPoleOffsetRadians\",\n  );\n  const yCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf(\n    \"yCelestialPoleOffsetRadians\",\n  );\n  const taiMinusUtcSecondsColumn =\n    eopData.columnNames.indexOf(\"taiMinusUtcSeconds\");\n\n  if (\n    dateColumn < 0 ||\n    xPoleWanderRadiansColumn < 0 ||\n    yPoleWanderRadiansColumn < 0 ||\n    ut1MinusUtcSecondsColumn < 0 ||\n    xCelestialPoleOffsetRadiansColumn < 0 ||\n    yCelestialPoleOffsetRadiansColumn < 0 ||\n    taiMinusUtcSecondsColumn < 0\n  ) {\n    throw new RuntimeError(\n      \"Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns\",\n    );\n  }\n\n  const samples = (eop._samples = eopData.samples);\n  const dates = (eop._dates = []);\n\n  eop._dateColumn = dateColumn;\n  eop._xPoleWanderRadiansColumn = xPoleWanderRadiansColumn;\n  eop._yPoleWanderRadiansColumn = yPoleWanderRadiansColumn;\n  eop._ut1MinusUtcSecondsColumn = ut1MinusUtcSecondsColumn;\n  eop._xCelestialPoleOffsetRadiansColumn = xCelestialPoleOffsetRadiansColumn;\n  eop._yCelestialPoleOffsetRadiansColumn = yCelestialPoleOffsetRadiansColumn;\n  eop._taiMinusUtcSecondsColumn = taiMinusUtcSecondsColumn;\n\n  eop._columnCount = eopData.columnNames.length;\n  eop._lastIndex = undefined;\n\n  let lastTaiMinusUtc;\n\n  const addNewLeapSeconds = eop._addNewLeapSeconds;\n\n  // Convert the ISO8601 dates to JulianDates.\n  for (let i = 0, len = samples.length; i < len; i += eop._columnCount) {\n    const mjd = samples[i + dateColumn];\n    const taiMinusUtc = samples[i + taiMinusUtcSecondsColumn];\n    const day = mjd + TimeConstants.MODIFIED_JULIAN_DATE_DIFFERENCE;\n    const date = new JulianDate(day, taiMinusUtc, TimeStandard.TAI);\n    dates.push(date);\n\n    if (addNewLeapSeconds) {\n      if (taiMinusUtc !== lastTaiMinusUtc && defined(lastTaiMinusUtc)) {\n        // We crossed a leap second boundary, so add the leap second\n        // if it does not already exist.\n        const leapSeconds = JulianDate.leapSeconds;\n        const leapSecondIndex = binarySearch(\n          leapSeconds,\n          date,\n          compareLeapSecondDates,\n        );\n        if (leapSecondIndex < 0) {\n          const leapSecond = new LeapSecond(date, taiMinusUtc);\n          leapSeconds.splice(~leapSecondIndex, 0, leapSecond);\n        }\n      }\n      lastTaiMinusUtc = taiMinusUtc;\n    }\n  }\n}\n\nfunction fillResultFromIndex(eop, samples, index, columnCount, result) {\n  const start = index * columnCount;\n  result.xPoleWander = samples[start + eop._xPoleWanderRadiansColumn];\n  result.yPoleWander = samples[start + eop._yPoleWanderRadiansColumn];\n  result.xPoleOffset = samples[start + eop._xCelestialPoleOffsetRadiansColumn];\n  result.yPoleOffset = samples[start + eop._yCelestialPoleOffsetRadiansColumn];\n  result.ut1MinusUtc = samples[start + eop._ut1MinusUtcSecondsColumn];\n}\n\nfunction linearInterp(dx, y1, y2) {\n  return y1 + dx * (y2 - y1);\n}\n\nfunction interpolate(eop, dates, samples, date, before, after, result) {\n  const columnCount = eop._columnCount;\n\n  // First check the bounds on the EOP data\n  // If we are after the bounds of the data, return zeros.\n  // The 'before' index should never be less than zero.\n  if (after > dates.length - 1) {\n    result.xPoleWander = 0;\n    result.yPoleWander = 0;\n    result.xPoleOffset = 0;\n    result.yPoleOffset = 0;\n    result.ut1MinusUtc = 0;\n    return result;\n  }\n\n  const beforeDate = dates[before];\n  const afterDate = dates[after];\n  if (beforeDate.equals(afterDate) || date.equals(beforeDate)) {\n    fillResultFromIndex(eop, samples, before, columnCount, result);\n    return result;\n  } else if (date.equals(afterDate)) {\n    fillResultFromIndex(eop, samples, after, columnCount, result);\n    return result;\n  }\n\n  const factor =\n    JulianDate.secondsDifference(date, beforeDate) /\n    JulianDate.secondsDifference(afterDate, beforeDate);\n\n  const startBefore = before * columnCount;\n  const startAfter = after * columnCount;\n\n  // Handle UT1 leap second edge case\n  let beforeUt1MinusUtc = samples[startBefore + eop._ut1MinusUtcSecondsColumn];\n  let afterUt1MinusUtc = samples[startAfter + eop._ut1MinusUtcSecondsColumn];\n\n  const offsetDifference = afterUt1MinusUtc - beforeUt1MinusUtc;\n  if (offsetDifference > 0.5 || offsetDifference < -0.5) {\n    // The absolute difference between the values is more than 0.5, so we may have\n    // crossed a leap second.  Check if this is the case and, if so, adjust the\n    // afterValue to account for the leap second.  This way, our interpolation will\n    // produce reasonable results.\n    const beforeTaiMinusUtc =\n      samples[startBefore + eop._taiMinusUtcSecondsColumn];\n    const afterTaiMinusUtc =\n      samples[startAfter + eop._taiMinusUtcSecondsColumn];\n    if (beforeTaiMinusUtc !== afterTaiMinusUtc) {\n      if (afterDate.equals(date)) {\n        // If we are at the end of the leap second interval, take the second value\n        // Otherwise, the interpolation below will yield the wrong side of the\n        // discontinuity\n        // At the end of the leap second, we need to start accounting for the jump\n        beforeUt1MinusUtc = afterUt1MinusUtc;\n      } else {\n        // Otherwise, remove the leap second so that the interpolation is correct\n        afterUt1MinusUtc -= afterTaiMinusUtc - beforeTaiMinusUtc;\n      }\n    }\n  }\n\n  result.xPoleWander = linearInterp(\n    factor,\n    samples[startBefore + eop._xPoleWanderRadiansColumn],\n    samples[startAfter + eop._xPoleWanderRadiansColumn],\n  );\n  result.yPoleWander = linearInterp(\n    factor,\n    samples[startBefore + eop._yPoleWanderRadiansColumn],\n    samples[startAfter + eop._yPoleWanderRadiansColumn],\n  );\n  result.xPoleOffset = linearInterp(\n    factor,\n    samples[startBefore + eop._xCelestialPoleOffsetRadiansColumn],\n    samples[startAfter + eop._xCelestialPoleOffsetRadiansColumn],\n  );\n  result.yPoleOffset = linearInterp(\n    factor,\n    samples[startBefore + eop._yCelestialPoleOffsetRadiansColumn],\n    samples[startAfter + eop._yCelestialPoleOffsetRadiansColumn],\n  );\n  result.ut1MinusUtc = linearInterp(\n    factor,\n    beforeUt1MinusUtc,\n    afterUt1MinusUtc,\n  );\n  return result;\n}\n\nexport default EarthOrientationParameters;\n","/**\n * A set of Earth Orientation Parameters (EOP) sampled at a time.\n *\n * @alias EarthOrientationParametersSample\n * @constructor\n *\n * @param {number} xPoleWander The pole wander about the X axis, in radians.\n * @param {number} yPoleWander The pole wander about the Y axis, in radians.\n * @param {number} xPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians.\n * @param {number} yPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians.\n * @param {number} ut1MinusUtc The difference in time standards, UT1 - UTC, in seconds.\n *\n * @private\n */\nfunction EarthOrientationParametersSample(\n  xPoleWander,\n  yPoleWander,\n  xPoleOffset,\n  yPoleOffset,\n  ut1MinusUtc,\n) {\n  /**\n   * The pole wander about the X axis, in radians.\n   * @type {number}\n   */\n  this.xPoleWander = xPoleWander;\n\n  /**\n   * The pole wander about the Y axis, in radians.\n   * @type {number}\n   */\n  this.yPoleWander = yPoleWander;\n\n  /**\n   * The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians.\n   * @type {number}\n   */\n  this.xPoleOffset = xPoleOffset;\n\n  /**\n   * The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians.\n   * @type {number}\n   */\n  this.yPoleOffset = yPoleOffset;\n\n  /**\n   * The difference in time standards, UT1 - UTC, in seconds.\n   * @type {number}\n   */\n  this.ut1MinusUtc = ut1MinusUtc;\n}\nexport default EarthOrientationParametersSample;\n","import { Easing } from \"@tweenjs/tween.js\";\n\n/**\n * Easing functions for use with TweenCollection.  These function are from\n * {@link https://github.com/sole/tween.js/|Tween.js} and Robert Penner.  See the\n * {@link http://sole.github.io/tween.js/examples/03_graphs.html|Tween.js graphs for each function}.\n *\n * @namespace\n */\nconst EasingFunction = {\n  /**\n   * Linear easing.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  LINEAR_NONE: Easing.Linear.None,\n\n  /**\n   * Quadratic in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUADRATIC_IN: Easing.Quadratic.In,\n  /**\n   * Quadratic out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUADRATIC_OUT: Easing.Quadratic.Out,\n  /**\n   * Quadratic in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUADRATIC_IN_OUT: Easing.Quadratic.InOut,\n\n  /**\n   * Cubic in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  CUBIC_IN: Easing.Cubic.In,\n  /**\n   * Cubic out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  CUBIC_OUT: Easing.Cubic.Out,\n  /**\n   * Cubic in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  CUBIC_IN_OUT: Easing.Cubic.InOut,\n\n  /**\n   * Quartic in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUARTIC_IN: Easing.Quartic.In,\n  /**\n   * Quartic out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUARTIC_OUT: Easing.Quartic.Out,\n  /**\n   * Quartic in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUARTIC_IN_OUT: Easing.Quartic.InOut,\n\n  /**\n   * Quintic in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUINTIC_IN: Easing.Quintic.In,\n  /**\n   * Quintic out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUINTIC_OUT: Easing.Quintic.Out,\n  /**\n   * Quintic in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  QUINTIC_IN_OUT: Easing.Quintic.InOut,\n\n  /**\n   * Sinusoidal in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  SINUSOIDAL_IN: Easing.Sinusoidal.In,\n  /**\n   * Sinusoidal out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  SINUSOIDAL_OUT: Easing.Sinusoidal.Out,\n  /**\n   * Sinusoidal in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  SINUSOIDAL_IN_OUT: Easing.Sinusoidal.InOut,\n\n  /**\n   * Exponential in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  EXPONENTIAL_IN: Easing.Exponential.In,\n  /**\n   * Exponential out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  EXPONENTIAL_OUT: Easing.Exponential.Out,\n  /**\n   * Exponential in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  EXPONENTIAL_IN_OUT: Easing.Exponential.InOut,\n\n  /**\n   * Circular in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  CIRCULAR_IN: Easing.Circular.In,\n  /**\n   * Circular out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  CIRCULAR_OUT: Easing.Circular.Out,\n  /**\n   * Circular in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  CIRCULAR_IN_OUT: Easing.Circular.InOut,\n\n  /**\n   * Elastic in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  ELASTIC_IN: Easing.Elastic.In,\n  /**\n   * Elastic out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  ELASTIC_OUT: Easing.Elastic.Out,\n  /**\n   * Elastic in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  ELASTIC_IN_OUT: Easing.Elastic.InOut,\n\n  /**\n   * Back in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  BACK_IN: Easing.Back.In,\n  /**\n   * Back out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  BACK_OUT: Easing.Back.Out,\n  /**\n   * Back in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  BACK_IN_OUT: Easing.Back.InOut,\n\n  /**\n   * Bounce in.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  BOUNCE_IN: Easing.Bounce.In,\n  /**\n   * Bounce out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  BOUNCE_OUT: Easing.Bounce.Out,\n  /**\n   * Bounce in then out.\n   *\n   * @type {EasingFunction.Callback}\n   * @constant\n   */\n  BOUNCE_IN_OUT: Easing.Bounce.InOut,\n};\n\n/**\n * Function interface for implementing a custom easing function.\n * @callback EasingFunction.Callback\n * @param {number} time The time in the range <code>[0, 1]</code>.\n * @returns {number} The value of the function at the given time.\n *\n * @example\n * function quadraticIn(time) {\n *     return time * time;\n * }\n *\n * @example\n * function quadraticOut(time) {\n *     return time * (2.0 - time);\n * }\n */\n\nexport default Object.freeze(EasingFunction);\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EllipseGeometryLibrary from \"./EllipseGeometryLibrary.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\nconst scratchCartesian4 = new Cartesian3();\nconst texCoordScratch = new Cartesian2();\nconst textureMatrixScratch = new Matrix3();\nconst tangentMatrixScratch = new Matrix3();\nconst quaternionScratch = new Quaternion();\n\nconst scratchNormal = new Cartesian3();\nconst scratchTangent = new Cartesian3();\nconst scratchBitangent = new Cartesian3();\n\nconst scratchCartographic = new Cartographic();\nconst projectedCenterScratch = new Cartesian3();\n\nconst scratchMinTexCoord = new Cartesian2();\nconst scratchMaxTexCoord = new Cartesian2();\n\nfunction computeTopBottomAttributes(positions, options, extrude) {\n  const vertexFormat = options.vertexFormat;\n  const center = options.center;\n  const semiMajorAxis = options.semiMajorAxis;\n  const semiMinorAxis = options.semiMinorAxis;\n  const ellipsoid = options.ellipsoid;\n  const stRotation = options.stRotation;\n  const size = extrude ? (positions.length / 3) * 2 : positions.length / 3;\n  const shadowVolume = options.shadowVolume;\n\n  const textureCoordinates = vertexFormat.st\n    ? new Float32Array(size * 2)\n    : undefined;\n  const normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined;\n  const tangents = vertexFormat.tangent\n    ? new Float32Array(size * 3)\n    : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(size * 3)\n    : undefined;\n\n  const extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined;\n\n  let textureCoordIndex = 0;\n\n  // Raise positions to a height above the ellipsoid and compute the\n  // texture coordinates, normals, tangents, and bitangents.\n  let normal = scratchNormal;\n  let tangent = scratchTangent;\n  let bitangent = scratchBitangent;\n\n  const projection = new GeographicProjection(ellipsoid);\n  const projectedCenter = projection.project(\n    ellipsoid.cartesianToCartographic(center, scratchCartographic),\n    projectedCenterScratch,\n  );\n\n  const geodeticNormal = ellipsoid.scaleToGeodeticSurface(\n    center,\n    scratchCartesian1,\n  );\n  ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal);\n\n  let textureMatrix = textureMatrixScratch;\n  let tangentMatrix = tangentMatrixScratch;\n  if (stRotation !== 0) {\n    let rotation = Quaternion.fromAxisAngle(\n      geodeticNormal,\n      stRotation,\n      quaternionScratch,\n    );\n    textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\n\n    rotation = Quaternion.fromAxisAngle(\n      geodeticNormal,\n      -stRotation,\n      quaternionScratch,\n    );\n    tangentMatrix = Matrix3.fromQuaternion(rotation, tangentMatrix);\n  } else {\n    textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\n    tangentMatrix = Matrix3.clone(Matrix3.IDENTITY, tangentMatrix);\n  }\n\n  const minTexCoord = Cartesian2.fromElements(\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    scratchMinTexCoord,\n  );\n  const maxTexCoord = Cartesian2.fromElements(\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    scratchMaxTexCoord,\n  );\n\n  let length = positions.length;\n  const bottomOffset = extrude ? length : 0;\n  const stOffset = (bottomOffset / 3) * 2;\n  for (let i = 0; i < length; i += 3) {\n    const i1 = i + 1;\n    const i2 = i + 2;\n    const position = Cartesian3.fromArray(positions, i, scratchCartesian1);\n\n    if (vertexFormat.st) {\n      const rotatedPoint = Matrix3.multiplyByVector(\n        textureMatrix,\n        position,\n        scratchCartesian2,\n      );\n      const projectedPoint = projection.project(\n        ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic),\n        scratchCartesian3,\n      );\n      Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint);\n\n      texCoordScratch.x =\n        (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis);\n      texCoordScratch.y =\n        (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis);\n\n      minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x);\n      minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y);\n      maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x);\n      maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y);\n\n      if (extrude) {\n        textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x;\n        textureCoordinates[textureCoordIndex + 1 + stOffset] =\n          texCoordScratch.y;\n      }\n\n      textureCoordinates[textureCoordIndex++] = texCoordScratch.x;\n      textureCoordinates[textureCoordIndex++] = texCoordScratch.y;\n    }\n\n    if (\n      vertexFormat.normal ||\n      vertexFormat.tangent ||\n      vertexFormat.bitangent ||\n      shadowVolume\n    ) {\n      normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n\n      if (shadowVolume) {\n        extrudeNormals[i + bottomOffset] = -normal.x;\n        extrudeNormals[i1 + bottomOffset] = -normal.y;\n        extrudeNormals[i2 + bottomOffset] = -normal.z;\n      }\n\n      if (\n        vertexFormat.normal ||\n        vertexFormat.tangent ||\n        vertexFormat.bitangent\n      ) {\n        if (vertexFormat.tangent || vertexFormat.bitangent) {\n          tangent = Cartesian3.normalize(\n            Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent),\n            tangent,\n          );\n          Matrix3.multiplyByVector(tangentMatrix, tangent, tangent);\n        }\n        if (vertexFormat.normal) {\n          normals[i] = normal.x;\n          normals[i1] = normal.y;\n          normals[i2] = normal.z;\n          if (extrude) {\n            normals[i + bottomOffset] = -normal.x;\n            normals[i1 + bottomOffset] = -normal.y;\n            normals[i2 + bottomOffset] = -normal.z;\n          }\n        }\n\n        if (vertexFormat.tangent) {\n          tangents[i] = tangent.x;\n          tangents[i1] = tangent.y;\n          tangents[i2] = tangent.z;\n          if (extrude) {\n            tangents[i + bottomOffset] = -tangent.x;\n            tangents[i1 + bottomOffset] = -tangent.y;\n            tangents[i2 + bottomOffset] = -tangent.z;\n          }\n        }\n\n        if (vertexFormat.bitangent) {\n          bitangent = Cartesian3.normalize(\n            Cartesian3.cross(normal, tangent, bitangent),\n            bitangent,\n          );\n          bitangents[i] = bitangent.x;\n          bitangents[i1] = bitangent.y;\n          bitangents[i2] = bitangent.z;\n          if (extrude) {\n            bitangents[i + bottomOffset] = bitangent.x;\n            bitangents[i1 + bottomOffset] = bitangent.y;\n            bitangents[i2 + bottomOffset] = bitangent.z;\n          }\n        }\n      }\n    }\n  }\n\n  if (vertexFormat.st) {\n    length = textureCoordinates.length;\n    for (let k = 0; k < length; k += 2) {\n      textureCoordinates[k] =\n        (textureCoordinates[k] - minTexCoord.x) /\n        (maxTexCoord.x - minTexCoord.x);\n      textureCoordinates[k + 1] =\n        (textureCoordinates[k + 1] - minTexCoord.y) /\n        (maxTexCoord.y - minTexCoord.y);\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n\n  if (vertexFormat.position) {\n    const finalPositions = EllipseGeometryLibrary.raisePositionsToHeight(\n      positions,\n      options,\n      extrude,\n    );\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: finalPositions,\n    });\n  }\n\n  if (vertexFormat.st) {\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: textureCoordinates,\n    });\n  }\n\n  if (vertexFormat.normal) {\n    attributes.normal = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: normals,\n    });\n  }\n\n  if (vertexFormat.tangent) {\n    attributes.tangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: tangents,\n    });\n  }\n\n  if (vertexFormat.bitangent) {\n    attributes.bitangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: bitangents,\n    });\n  }\n\n  if (shadowVolume) {\n    attributes.extrudeDirection = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: extrudeNormals,\n    });\n  }\n\n  if (extrude && defined(options.offsetAttribute)) {\n    let offsetAttribute = new Uint8Array(size);\n    if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n      offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\n    } else {\n      const offsetValue =\n        options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n      offsetAttribute = offsetAttribute.fill(offsetValue);\n    }\n\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: offsetAttribute,\n    });\n  }\n\n  return attributes;\n}\n\nfunction topIndices(numPts) {\n  // numTriangles in half = 3 + 8 + 12 + ... = -1 + 4 + (4 + 4) + (4 + 4 + 4) + ... = -1 + 4 * (1 + 2 + 3 + ...)\n  //              = -1 + 4 * ((n * ( n + 1)) / 2)\n  // total triangles = 2 * numTriangles in half\n  // indices = total triangles * 3;\n  // Substitute numPts for n above\n\n  const indices = new Array(12 * (numPts * (numPts + 1)) - 6);\n  let indicesIndex = 0;\n  let prevIndex;\n  let numInterior;\n  let positionIndex;\n  let i;\n  let j;\n  // Indices triangles to the 'right' of the north vector\n\n  prevIndex = 0;\n  positionIndex = 1;\n  for (i = 0; i < 3; i++) {\n    indices[indicesIndex++] = positionIndex++;\n    indices[indicesIndex++] = prevIndex;\n    indices[indicesIndex++] = positionIndex;\n  }\n\n  for (i = 2; i < numPts + 1; ++i) {\n    positionIndex = i * (i + 1) - 1;\n    prevIndex = (i - 1) * i - 1;\n\n    indices[indicesIndex++] = positionIndex++;\n    indices[indicesIndex++] = prevIndex;\n    indices[indicesIndex++] = positionIndex;\n\n    numInterior = 2 * i;\n    for (j = 0; j < numInterior - 1; ++j) {\n      indices[indicesIndex++] = positionIndex;\n      indices[indicesIndex++] = prevIndex++;\n      indices[indicesIndex++] = prevIndex;\n\n      indices[indicesIndex++] = positionIndex++;\n      indices[indicesIndex++] = prevIndex;\n      indices[indicesIndex++] = positionIndex;\n    }\n\n    indices[indicesIndex++] = positionIndex++;\n    indices[indicesIndex++] = prevIndex;\n    indices[indicesIndex++] = positionIndex;\n  }\n\n  // Indices for center column of triangles\n  numInterior = numPts * 2;\n  ++positionIndex;\n  ++prevIndex;\n  for (i = 0; i < numInterior - 1; ++i) {\n    indices[indicesIndex++] = positionIndex;\n    indices[indicesIndex++] = prevIndex++;\n    indices[indicesIndex++] = prevIndex;\n\n    indices[indicesIndex++] = positionIndex++;\n    indices[indicesIndex++] = prevIndex;\n    indices[indicesIndex++] = positionIndex;\n  }\n\n  indices[indicesIndex++] = positionIndex;\n  indices[indicesIndex++] = prevIndex++;\n  indices[indicesIndex++] = prevIndex;\n\n  indices[indicesIndex++] = positionIndex++;\n  indices[indicesIndex++] = prevIndex++;\n  indices[indicesIndex++] = prevIndex;\n\n  // Reverse the process creating indices to the 'left' of the north vector\n  ++prevIndex;\n  for (i = numPts - 1; i > 1; --i) {\n    indices[indicesIndex++] = prevIndex++;\n    indices[indicesIndex++] = prevIndex;\n    indices[indicesIndex++] = positionIndex;\n\n    numInterior = 2 * i;\n    for (j = 0; j < numInterior - 1; ++j) {\n      indices[indicesIndex++] = positionIndex;\n      indices[indicesIndex++] = prevIndex++;\n      indices[indicesIndex++] = prevIndex;\n\n      indices[indicesIndex++] = positionIndex++;\n      indices[indicesIndex++] = prevIndex;\n      indices[indicesIndex++] = positionIndex;\n    }\n\n    indices[indicesIndex++] = prevIndex++;\n    indices[indicesIndex++] = prevIndex++;\n    indices[indicesIndex++] = positionIndex++;\n  }\n\n  for (i = 0; i < 3; i++) {\n    indices[indicesIndex++] = prevIndex++;\n    indices[indicesIndex++] = prevIndex;\n    indices[indicesIndex++] = positionIndex;\n  }\n  return indices;\n}\n\nlet boundingSphereCenter = new Cartesian3();\n\nfunction computeEllipse(options) {\n  const center = options.center;\n  boundingSphereCenter = Cartesian3.multiplyByScalar(\n    options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter),\n    options.height,\n    boundingSphereCenter,\n  );\n  boundingSphereCenter = Cartesian3.add(\n    center,\n    boundingSphereCenter,\n    boundingSphereCenter,\n  );\n  const boundingSphere = new BoundingSphere(\n    boundingSphereCenter,\n    options.semiMajorAxis,\n  );\n  const cep = EllipseGeometryLibrary.computeEllipsePositions(\n    options,\n    true,\n    false,\n  );\n  const positions = cep.positions;\n  const numPts = cep.numPts;\n  const attributes = computeTopBottomAttributes(positions, options, false);\n  let indices = topIndices(numPts);\n  indices = IndexDatatype.createTypedArray(positions.length / 3, indices);\n  return {\n    boundingSphere: boundingSphere,\n    attributes: attributes,\n    indices: indices,\n  };\n}\n\nfunction computeWallAttributes(positions, options) {\n  const vertexFormat = options.vertexFormat;\n  const center = options.center;\n  const semiMajorAxis = options.semiMajorAxis;\n  const semiMinorAxis = options.semiMinorAxis;\n  const ellipsoid = options.ellipsoid;\n  const height = options.height;\n  const extrudedHeight = options.extrudedHeight;\n  const stRotation = options.stRotation;\n  const size = (positions.length / 3) * 2;\n\n  const finalPositions = new Float64Array(size * 3);\n  const textureCoordinates = vertexFormat.st\n    ? new Float32Array(size * 2)\n    : undefined;\n  const normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined;\n  const tangents = vertexFormat.tangent\n    ? new Float32Array(size * 3)\n    : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(size * 3)\n    : undefined;\n\n  const shadowVolume = options.shadowVolume;\n  const extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined;\n\n  let textureCoordIndex = 0;\n\n  // Raise positions to a height above the ellipsoid and compute the\n  // texture coordinates, normals, tangents, and bitangents.\n  let normal = scratchNormal;\n  let tangent = scratchTangent;\n  let bitangent = scratchBitangent;\n\n  const projection = new GeographicProjection(ellipsoid);\n  const projectedCenter = projection.project(\n    ellipsoid.cartesianToCartographic(center, scratchCartographic),\n    projectedCenterScratch,\n  );\n\n  const geodeticNormal = ellipsoid.scaleToGeodeticSurface(\n    center,\n    scratchCartesian1,\n  );\n  ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal);\n  const rotation = Quaternion.fromAxisAngle(\n    geodeticNormal,\n    stRotation,\n    quaternionScratch,\n  );\n  const textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrixScratch);\n\n  const minTexCoord = Cartesian2.fromElements(\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    scratchMinTexCoord,\n  );\n  const maxTexCoord = Cartesian2.fromElements(\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    scratchMaxTexCoord,\n  );\n\n  let length = positions.length;\n  const stOffset = (length / 3) * 2;\n  for (let i = 0; i < length; i += 3) {\n    const i1 = i + 1;\n    const i2 = i + 2;\n    let position = Cartesian3.fromArray(positions, i, scratchCartesian1);\n    let extrudedPosition;\n\n    if (vertexFormat.st) {\n      const rotatedPoint = Matrix3.multiplyByVector(\n        textureMatrix,\n        position,\n        scratchCartesian2,\n      );\n      const projectedPoint = projection.project(\n        ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic),\n        scratchCartesian3,\n      );\n      Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint);\n\n      texCoordScratch.x =\n        (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis);\n      texCoordScratch.y =\n        (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis);\n\n      minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x);\n      minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y);\n      maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x);\n      maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y);\n\n      textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x;\n      textureCoordinates[textureCoordIndex + 1 + stOffset] = texCoordScratch.y;\n\n      textureCoordinates[textureCoordIndex++] = texCoordScratch.x;\n      textureCoordinates[textureCoordIndex++] = texCoordScratch.y;\n    }\n\n    position = ellipsoid.scaleToGeodeticSurface(position, position);\n    extrudedPosition = Cartesian3.clone(position, scratchCartesian2);\n    normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n\n    if (shadowVolume) {\n      extrudeNormals[i + length] = -normal.x;\n      extrudeNormals[i1 + length] = -normal.y;\n      extrudeNormals[i2 + length] = -normal.z;\n    }\n\n    let scaledNormal = Cartesian3.multiplyByScalar(\n      normal,\n      height,\n      scratchCartesian4,\n    );\n    position = Cartesian3.add(position, scaledNormal, position);\n    scaledNormal = Cartesian3.multiplyByScalar(\n      normal,\n      extrudedHeight,\n      scaledNormal,\n    );\n    extrudedPosition = Cartesian3.add(\n      extrudedPosition,\n      scaledNormal,\n      extrudedPosition,\n    );\n\n    if (vertexFormat.position) {\n      finalPositions[i + length] = extrudedPosition.x;\n      finalPositions[i1 + length] = extrudedPosition.y;\n      finalPositions[i2 + length] = extrudedPosition.z;\n\n      finalPositions[i] = position.x;\n      finalPositions[i1] = position.y;\n      finalPositions[i2] = position.z;\n    }\n\n    if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n      bitangent = Cartesian3.clone(normal, bitangent);\n      const next = Cartesian3.fromArray(\n        positions,\n        (i + 3) % length,\n        scratchCartesian4,\n      );\n      Cartesian3.subtract(next, position, next);\n      const bottom = Cartesian3.subtract(\n        extrudedPosition,\n        position,\n        scratchCartesian3,\n      );\n\n      normal = Cartesian3.normalize(\n        Cartesian3.cross(bottom, next, normal),\n        normal,\n      );\n\n      if (vertexFormat.normal) {\n        normals[i] = normal.x;\n        normals[i1] = normal.y;\n        normals[i2] = normal.z;\n\n        normals[i + length] = normal.x;\n        normals[i1 + length] = normal.y;\n        normals[i2 + length] = normal.z;\n      }\n\n      if (vertexFormat.tangent) {\n        tangent = Cartesian3.normalize(\n          Cartesian3.cross(bitangent, normal, tangent),\n          tangent,\n        );\n        tangents[i] = tangent.x;\n        tangents[i1] = tangent.y;\n        tangents[i2] = tangent.z;\n\n        tangents[i + length] = tangent.x;\n        tangents[i + 1 + length] = tangent.y;\n        tangents[i + 2 + length] = tangent.z;\n      }\n\n      if (vertexFormat.bitangent) {\n        bitangents[i] = bitangent.x;\n        bitangents[i1] = bitangent.y;\n        bitangents[i2] = bitangent.z;\n\n        bitangents[i + length] = bitangent.x;\n        bitangents[i1 + length] = bitangent.y;\n        bitangents[i2 + length] = bitangent.z;\n      }\n    }\n  }\n\n  if (vertexFormat.st) {\n    length = textureCoordinates.length;\n    for (let k = 0; k < length; k += 2) {\n      textureCoordinates[k] =\n        (textureCoordinates[k] - minTexCoord.x) /\n        (maxTexCoord.x - minTexCoord.x);\n      textureCoordinates[k + 1] =\n        (textureCoordinates[k + 1] - minTexCoord.y) /\n        (maxTexCoord.y - minTexCoord.y);\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n\n  if (vertexFormat.position) {\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: finalPositions,\n    });\n  }\n\n  if (vertexFormat.st) {\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: textureCoordinates,\n    });\n  }\n\n  if (vertexFormat.normal) {\n    attributes.normal = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: normals,\n    });\n  }\n\n  if (vertexFormat.tangent) {\n    attributes.tangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: tangents,\n    });\n  }\n\n  if (vertexFormat.bitangent) {\n    attributes.bitangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: bitangents,\n    });\n  }\n\n  if (shadowVolume) {\n    attributes.extrudeDirection = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: extrudeNormals,\n    });\n  }\n\n  if (defined(options.offsetAttribute)) {\n    let offsetAttribute = new Uint8Array(size);\n    if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n      offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\n    } else {\n      const offsetValue =\n        options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n      offsetAttribute = offsetAttribute.fill(offsetValue);\n    }\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: offsetAttribute,\n    });\n  }\n\n  return attributes;\n}\n\nfunction computeWallIndices(positions) {\n  const length = positions.length / 3;\n  const indices = IndexDatatype.createTypedArray(length, length * 6);\n  let index = 0;\n  for (let i = 0; i < length; i++) {\n    const UL = i;\n    const LL = i + length;\n    const UR = (UL + 1) % length;\n    const LR = UR + length;\n    indices[index++] = UL;\n    indices[index++] = LL;\n    indices[index++] = UR;\n    indices[index++] = UR;\n    indices[index++] = LL;\n    indices[index++] = LR;\n  }\n\n  return indices;\n}\n\nconst topBoundingSphere = new BoundingSphere();\nconst bottomBoundingSphere = new BoundingSphere();\n\nfunction computeExtrudedEllipse(options) {\n  const center = options.center;\n  const ellipsoid = options.ellipsoid;\n  const semiMajorAxis = options.semiMajorAxis;\n  let scaledNormal = Cartesian3.multiplyByScalar(\n    ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1),\n    options.height,\n    scratchCartesian1,\n  );\n  topBoundingSphere.center = Cartesian3.add(\n    center,\n    scaledNormal,\n    topBoundingSphere.center,\n  );\n  topBoundingSphere.radius = semiMajorAxis;\n\n  scaledNormal = Cartesian3.multiplyByScalar(\n    ellipsoid.geodeticSurfaceNormal(center, scaledNormal),\n    options.extrudedHeight,\n    scaledNormal,\n  );\n  bottomBoundingSphere.center = Cartesian3.add(\n    center,\n    scaledNormal,\n    bottomBoundingSphere.center,\n  );\n  bottomBoundingSphere.radius = semiMajorAxis;\n\n  const cep = EllipseGeometryLibrary.computeEllipsePositions(\n    options,\n    true,\n    true,\n  );\n  const positions = cep.positions;\n  const numPts = cep.numPts;\n  const outerPositions = cep.outerPositions;\n  const boundingSphere = BoundingSphere.union(\n    topBoundingSphere,\n    bottomBoundingSphere,\n  );\n  const topBottomAttributes = computeTopBottomAttributes(\n    positions,\n    options,\n    true,\n  );\n  let indices = topIndices(numPts);\n  const length = indices.length;\n  indices.length = length * 2;\n  const posLength = positions.length / 3;\n  for (let i = 0; i < length; i += 3) {\n    indices[i + length] = indices[i + 2] + posLength;\n    indices[i + 1 + length] = indices[i + 1] + posLength;\n    indices[i + 2 + length] = indices[i] + posLength;\n  }\n\n  const topBottomIndices = IndexDatatype.createTypedArray(\n    (posLength * 2) / 3,\n    indices,\n  );\n\n  const topBottomGeo = new Geometry({\n    attributes: topBottomAttributes,\n    indices: topBottomIndices,\n    primitiveType: PrimitiveType.TRIANGLES,\n  });\n\n  const wallAttributes = computeWallAttributes(outerPositions, options);\n  indices = computeWallIndices(outerPositions);\n  const wallIndices = IndexDatatype.createTypedArray(\n    (outerPositions.length * 2) / 3,\n    indices,\n  );\n\n  const wallGeo = new Geometry({\n    attributes: wallAttributes,\n    indices: wallIndices,\n    primitiveType: PrimitiveType.TRIANGLES,\n  });\n\n  const geo = GeometryPipeline.combineInstances([\n    new GeometryInstance({\n      geometry: topBottomGeo,\n    }),\n    new GeometryInstance({\n      geometry: wallGeo,\n    }),\n  ]);\n\n  return {\n    boundingSphere: boundingSphere,\n    attributes: geo[0].attributes,\n    indices: geo[0].indices,\n  };\n}\n\nfunction computeRectangle(\n  center,\n  semiMajorAxis,\n  semiMinorAxis,\n  rotation,\n  granularity,\n  ellipsoid,\n  result,\n) {\n  const cep = EllipseGeometryLibrary.computeEllipsePositions(\n    {\n      center: center,\n      semiMajorAxis: semiMajorAxis,\n      semiMinorAxis: semiMinorAxis,\n      rotation: rotation,\n      granularity: granularity,\n    },\n    false,\n    true,\n  );\n  const positionsFlat = cep.outerPositions;\n  const positionsCount = positionsFlat.length / 3;\n  const positions = new Array(positionsCount);\n  for (let i = 0; i < positionsCount; ++i) {\n    positions[i] = Cartesian3.fromArray(positionsFlat, i * 3);\n  }\n  const rectangle = Rectangle.fromCartesianArray(positions, ellipsoid, result);\n  // Rectangle width goes beyond 180 degrees when the ellipse crosses a pole.\n  // When this happens, make the rectangle into a \"circle\" around the pole\n  if (rectangle.width > CesiumMath.PI) {\n    rectangle.north =\n      rectangle.north > 0.0\n        ? CesiumMath.PI_OVER_TWO - CesiumMath.EPSILON7\n        : rectangle.north;\n    rectangle.south =\n      rectangle.south < 0.0\n        ? CesiumMath.EPSILON7 - CesiumMath.PI_OVER_TWO\n        : rectangle.south;\n    rectangle.east = CesiumMath.PI;\n    rectangle.west = -CesiumMath.PI;\n  }\n  return rectangle;\n}\n\n/**\n * A description of an ellipse on an ellipsoid. Ellipse geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias EllipseGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\n * @param {number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\n * @param {number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid the ellipse will be on.\n * @param {number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface.\n * @param {number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface.\n * @param {number} [options.rotation=0.0] The angle of rotation counter-clockwise from north.\n * @param {number} [options.stRotation=0.0] The rotation of the texture coordinates counter-clockwise from north.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero.\n * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n *\n * @example\n * // Create an ellipse.\n * const ellipse = new Cesium.EllipseGeometry({\n *   center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n *   semiMajorAxis : 500000.0,\n *   semiMinorAxis : 300000.0,\n *   rotation : Cesium.Math.toRadians(60.0)\n * });\n * const geometry = Cesium.EllipseGeometry.createGeometry(ellipse);\n *\n * @see EllipseGeometry.createGeometry\n */\nfunction EllipseGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const center = options.center;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const semiMajorAxis = options.semiMajorAxis;\n  const semiMinorAxis = options.semiMinorAxis;\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.center\", center);\n  Check.typeOf.number(\"options.semiMajorAxis\", semiMajorAxis);\n  Check.typeOf.number(\"options.semiMinorAxis\", semiMinorAxis);\n  if (semiMajorAxis < semiMinorAxis) {\n    throw new DeveloperError(\n      \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\",\n    );\n  }\n  if (granularity <= 0.0) {\n    throw new DeveloperError(\"granularity must be greater than zero.\");\n  }\n  //>>includeEnd('debug');\n\n  const height = options.height ?? 0.0;\n  const extrudedHeight = options.extrudedHeight ?? height;\n\n  this._center = Cartesian3.clone(center);\n  this._semiMajorAxis = semiMajorAxis;\n  this._semiMinorAxis = semiMinorAxis;\n  this._ellipsoid = Ellipsoid.clone(ellipsoid);\n  this._rotation = options.rotation ?? 0.0;\n  this._stRotation = options.stRotation ?? 0.0;\n  this._height = Math.max(extrudedHeight, height);\n  this._granularity = granularity;\n  this._vertexFormat = VertexFormat.clone(vertexFormat);\n  this._extrudedHeight = Math.min(extrudedHeight, height);\n  this._shadowVolume = options.shadowVolume ?? false;\n  this._workerName = \"createEllipseGeometry\";\n  this._offsetAttribute = options.offsetAttribute;\n\n  this._rectangle = undefined;\n  this._textureCoordinateRotationPoints = undefined;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nEllipseGeometry.packedLength =\n  Cartesian3.packedLength +\n  Ellipsoid.packedLength +\n  VertexFormat.packedLength +\n  9;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipseGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nEllipseGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value._center, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._semiMajorAxis;\n  array[startingIndex++] = value._semiMinorAxis;\n  array[startingIndex++] = value._rotation;\n  array[startingIndex++] = value._stRotation;\n  array[startingIndex++] = value._height;\n  array[startingIndex++] = value._granularity;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchCenter = new Cartesian3();\nconst scratchEllipsoid = new Ellipsoid();\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  center: scratchCenter,\n  ellipsoid: scratchEllipsoid,\n  vertexFormat: scratchVertexFormat,\n  semiMajorAxis: undefined,\n  semiMinorAxis: undefined,\n  rotation: undefined,\n  stRotation: undefined,\n  height: undefined,\n  granularity: undefined,\n  extrudedHeight: undefined,\n  shadowVolume: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipseGeometry} [result] The object into which to store the result.\n * @returns {EllipseGeometry} The modified result parameter or a new EllipseGeometry instance if one was not provided.\n */\nEllipseGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const center = Cartesian3.unpack(array, startingIndex, scratchCenter);\n  startingIndex += Cartesian3.packedLength;\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const semiMajorAxis = array[startingIndex++];\n  const semiMinorAxis = array[startingIndex++];\n  const rotation = array[startingIndex++];\n  const stRotation = array[startingIndex++];\n  const height = array[startingIndex++];\n  const granularity = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const shadowVolume = array[startingIndex++] === 1.0;\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.height = height;\n    scratchOptions.extrudedHeight = extrudedHeight;\n    scratchOptions.granularity = granularity;\n    scratchOptions.stRotation = stRotation;\n    scratchOptions.rotation = rotation;\n    scratchOptions.semiMajorAxis = semiMajorAxis;\n    scratchOptions.semiMinorAxis = semiMinorAxis;\n    scratchOptions.shadowVolume = shadowVolume;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n\n    return new EllipseGeometry(scratchOptions);\n  }\n\n  result._center = Cartesian3.clone(center, result._center);\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._semiMajorAxis = semiMajorAxis;\n  result._semiMinorAxis = semiMinorAxis;\n  result._rotation = rotation;\n  result._stRotation = stRotation;\n  result._height = height;\n  result._granularity = granularity;\n  result._extrudedHeight = extrudedHeight;\n  result._shadowVolume = shadowVolume;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the bounding rectangle based on the provided options\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\n * @param {number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\n * @param {number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid the ellipse will be on.\n * @param {number} [options.rotation=0.0] The angle of rotation counter-clockwise from north.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians.\n * @param {Rectangle} [result] An object in which to store the result\n *\n * @returns {Rectangle} The result rectangle\n */\nEllipseGeometry.computeRectangle = function (options, result) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const center = options.center;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const semiMajorAxis = options.semiMajorAxis;\n  const semiMinorAxis = options.semiMinorAxis;\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const rotation = options.rotation ?? 0.0;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.center\", center);\n  Check.typeOf.number(\"options.semiMajorAxis\", semiMajorAxis);\n  Check.typeOf.number(\"options.semiMinorAxis\", semiMinorAxis);\n  if (semiMajorAxis < semiMinorAxis) {\n    throw new DeveloperError(\n      \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\",\n    );\n  }\n  if (granularity <= 0.0) {\n    throw new DeveloperError(\"granularity must be greater than zero.\");\n  }\n  //>>includeEnd('debug');\n\n  return computeRectangle(\n    center,\n    semiMajorAxis,\n    semiMinorAxis,\n    rotation,\n    granularity,\n    ellipsoid,\n    result,\n  );\n};\n\n/**\n * Computes the geometric representation of a ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipseGeometry} ellipseGeometry A description of the ellipse.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipseGeometry.createGeometry = function (ellipseGeometry) {\n  if (\n    ellipseGeometry._semiMajorAxis <= 0.0 ||\n    ellipseGeometry._semiMinorAxis <= 0.0\n  ) {\n    return;\n  }\n\n  const height = ellipseGeometry._height;\n  const extrudedHeight = ellipseGeometry._extrudedHeight;\n  const extrude = !CesiumMath.equalsEpsilon(\n    height,\n    extrudedHeight,\n    0,\n    CesiumMath.EPSILON2,\n  );\n\n  ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface(\n    ellipseGeometry._center,\n    ellipseGeometry._center,\n  );\n  const options = {\n    center: ellipseGeometry._center,\n    semiMajorAxis: ellipseGeometry._semiMajorAxis,\n    semiMinorAxis: ellipseGeometry._semiMinorAxis,\n    ellipsoid: ellipseGeometry._ellipsoid,\n    rotation: ellipseGeometry._rotation,\n    height: height,\n    granularity: ellipseGeometry._granularity,\n    vertexFormat: ellipseGeometry._vertexFormat,\n    stRotation: ellipseGeometry._stRotation,\n  };\n  let geometry;\n  if (extrude) {\n    options.extrudedHeight = extrudedHeight;\n    options.shadowVolume = ellipseGeometry._shadowVolume;\n    options.offsetAttribute = ellipseGeometry._offsetAttribute;\n    geometry = computeExtrudedEllipse(options);\n  } else {\n    geometry = computeEllipse(options);\n\n    if (defined(ellipseGeometry._offsetAttribute)) {\n      const length = geometry.attributes.position.values.length;\n      const offsetValue =\n        ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n          ? 0\n          : 1;\n      const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n      geometry.attributes.applyOffset = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        componentsPerAttribute: 1,\n        values: applyOffset,\n      });\n    }\n  }\n\n  return new Geometry({\n    attributes: geometry.attributes,\n    indices: geometry.indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: geometry.boundingSphere,\n    offsetAttribute: ellipseGeometry._offsetAttribute,\n  });\n};\n\n/**\n * @private\n */\nEllipseGeometry.createShadowVolume = function (\n  ellipseGeometry,\n  minHeightFunc,\n  maxHeightFunc,\n) {\n  const granularity = ellipseGeometry._granularity;\n  const ellipsoid = ellipseGeometry._ellipsoid;\n\n  const minHeight = minHeightFunc(granularity, ellipsoid);\n  const maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n  return new EllipseGeometry({\n    center: ellipseGeometry._center,\n    semiMajorAxis: ellipseGeometry._semiMajorAxis,\n    semiMinorAxis: ellipseGeometry._semiMinorAxis,\n    ellipsoid: ellipsoid,\n    rotation: ellipseGeometry._rotation,\n    stRotation: ellipseGeometry._stRotation,\n    granularity: granularity,\n    extrudedHeight: minHeight,\n    height: maxHeight,\n    vertexFormat: VertexFormat.POSITION_ONLY,\n    shadowVolume: true,\n  });\n};\n\nfunction textureCoordinateRotationPoints(ellipseGeometry) {\n  const stRotation = -ellipseGeometry._stRotation;\n  if (stRotation === 0.0) {\n    return [0, 0, 0, 1, 1, 0];\n  }\n\n  const cep = EllipseGeometryLibrary.computeEllipsePositions(\n    {\n      center: ellipseGeometry._center,\n      semiMajorAxis: ellipseGeometry._semiMajorAxis,\n      semiMinorAxis: ellipseGeometry._semiMinorAxis,\n      rotation: ellipseGeometry._rotation,\n      granularity: ellipseGeometry._granularity,\n    },\n    false,\n    true,\n  );\n  const positionsFlat = cep.outerPositions;\n  const positionsCount = positionsFlat.length / 3;\n  const positions = new Array(positionsCount);\n  for (let i = 0; i < positionsCount; ++i) {\n    positions[i] = Cartesian3.fromArray(positionsFlat, i * 3);\n  }\n\n  const ellipsoid = ellipseGeometry._ellipsoid;\n  const boundingRectangle = ellipseGeometry.rectangle;\n  return Geometry._textureCoordinateRotationPoints(\n    positions,\n    stRotation,\n    ellipsoid,\n    boundingRectangle,\n  );\n}\n\nObject.defineProperties(EllipseGeometry.prototype, {\n  /**\n   * @private\n   */\n  rectangle: {\n    get: function () {\n      if (!defined(this._rectangle)) {\n        this._rectangle = computeRectangle(\n          this._center,\n          this._semiMajorAxis,\n          this._semiMinorAxis,\n          this._rotation,\n          this._granularity,\n          this._ellipsoid,\n        );\n      }\n      return this._rectangle;\n    },\n  },\n  /**\n   * For remapping texture coordinates when rendering EllipseGeometries as GroundPrimitives.\n   * @private\n   */\n  textureCoordinateRotationPoints: {\n    get: function () {\n      if (!defined(this._textureCoordinateRotationPoints)) {\n        this._textureCoordinateRotationPoints =\n          textureCoordinateRotationPoints(this);\n      }\n      return this._textureCoordinateRotationPoints;\n    },\n  },\n});\nexport default EllipseGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Quaternion from \"./Quaternion.js\";\n\nconst EllipseGeometryLibrary = {};\n\nconst rotAxis = new Cartesian3();\nconst tempVec = new Cartesian3();\nconst unitQuat = new Quaternion();\nconst rotMtx = new Matrix3();\n\nfunction pointOnEllipsoid(\n  theta,\n  rotation,\n  northVec,\n  eastVec,\n  aSqr,\n  ab,\n  bSqr,\n  mag,\n  unitPos,\n  result,\n) {\n  const azimuth = theta + rotation;\n\n  Cartesian3.multiplyByScalar(eastVec, Math.cos(azimuth), rotAxis);\n  Cartesian3.multiplyByScalar(northVec, Math.sin(azimuth), tempVec);\n  Cartesian3.add(rotAxis, tempVec, rotAxis);\n\n  let cosThetaSquared = Math.cos(theta);\n  cosThetaSquared = cosThetaSquared * cosThetaSquared;\n\n  let sinThetaSquared = Math.sin(theta);\n  sinThetaSquared = sinThetaSquared * sinThetaSquared;\n\n  const radius =\n    ab / Math.sqrt(bSqr * cosThetaSquared + aSqr * sinThetaSquared);\n  const angle = radius / mag;\n\n  // Create the quaternion to rotate the position vector to the boundary of the ellipse.\n  Quaternion.fromAxisAngle(rotAxis, angle, unitQuat);\n  Matrix3.fromQuaternion(unitQuat, rotMtx);\n\n  Matrix3.multiplyByVector(rotMtx, unitPos, result);\n  Cartesian3.normalize(result, result);\n  Cartesian3.multiplyByScalar(result, mag, result);\n  return result;\n}\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\nconst scratchNormal = new Cartesian3();\n/**\n * Returns the positions raised to the given heights\n * @private\n */\nEllipseGeometryLibrary.raisePositionsToHeight = function (\n  positions,\n  options,\n  extrude,\n) {\n  const ellipsoid = options.ellipsoid;\n  const height = options.height;\n  const extrudedHeight = options.extrudedHeight;\n  const size = extrude ? (positions.length / 3) * 2 : positions.length / 3;\n\n  const finalPositions = new Float64Array(size * 3);\n\n  const length = positions.length;\n  const bottomOffset = extrude ? length : 0;\n  for (let i = 0; i < length; i += 3) {\n    const i1 = i + 1;\n    const i2 = i + 2;\n\n    const position = Cartesian3.fromArray(positions, i, scratchCartesian1);\n    ellipsoid.scaleToGeodeticSurface(position, position);\n\n    const extrudedPosition = Cartesian3.clone(position, scratchCartesian2);\n    const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal);\n    const scaledNormal = Cartesian3.multiplyByScalar(\n      normal,\n      height,\n      scratchCartesian3,\n    );\n    Cartesian3.add(position, scaledNormal, position);\n\n    if (extrude) {\n      Cartesian3.multiplyByScalar(normal, extrudedHeight, scaledNormal);\n      Cartesian3.add(extrudedPosition, scaledNormal, extrudedPosition);\n\n      finalPositions[i + bottomOffset] = extrudedPosition.x;\n      finalPositions[i1 + bottomOffset] = extrudedPosition.y;\n      finalPositions[i2 + bottomOffset] = extrudedPosition.z;\n    }\n\n    finalPositions[i] = position.x;\n    finalPositions[i1] = position.y;\n    finalPositions[i2] = position.z;\n  }\n\n  return finalPositions;\n};\n\nconst unitPosScratch = new Cartesian3();\nconst eastVecScratch = new Cartesian3();\nconst northVecScratch = new Cartesian3();\n/**\n * Returns an array of positions that make up the ellipse.\n * @private\n */\nEllipseGeometryLibrary.computeEllipsePositions = function (\n  options,\n  addFillPositions,\n  addEdgePositions,\n) {\n  const semiMinorAxis = options.semiMinorAxis;\n  const semiMajorAxis = options.semiMajorAxis;\n  const rotation = options.rotation;\n  const center = options.center;\n\n  // Computing the arc-length of the ellipse is too expensive to be practical. Estimating it using the\n  // arc length of the sphere is too inaccurate and creates sharp edges when either the semi-major or\n  // semi-minor axis is much bigger than the other. Instead, scale the angle delta to make\n  // the distance along the ellipse boundary more closely match the granularity.\n  const granularity = options.granularity * 8.0;\n\n  const aSqr = semiMinorAxis * semiMinorAxis;\n  const bSqr = semiMajorAxis * semiMajorAxis;\n  const ab = semiMajorAxis * semiMinorAxis;\n\n  const mag = Cartesian3.magnitude(center);\n\n  const unitPos = Cartesian3.normalize(center, unitPosScratch);\n  let eastVec = Cartesian3.cross(Cartesian3.UNIT_Z, center, eastVecScratch);\n  eastVec = Cartesian3.normalize(eastVec, eastVec);\n  const northVec = Cartesian3.cross(unitPos, eastVec, northVecScratch);\n\n  // The number of points in the first quadrant\n  let numPts = 1 + Math.ceil(CesiumMath.PI_OVER_TWO / granularity);\n\n  const deltaTheta = CesiumMath.PI_OVER_TWO / (numPts - 1);\n  let theta = CesiumMath.PI_OVER_TWO - numPts * deltaTheta;\n  if (theta < 0.0) {\n    numPts -= Math.ceil(Math.abs(theta) / deltaTheta);\n  }\n\n  // If the number of points were three, the ellipse\n  // would be tessellated like below:\n  //\n  //         *---*\n  //       / | \\ | \\\n  //     *---*---*---*\n  //   / | \\ | \\ | \\ | \\\n  //  / .*---*---*---*. \\\n  // * ` | \\ | \\ | \\ | `*\n  //  \\`.*---*---*---*.`/\n  //   \\ | \\ | \\ | \\ | /\n  //     *---*---*---*\n  //       \\ | \\ | /\n  //         *---*\n  // The first and last column have one position and fan to connect to the adjacent column.\n  // Each other vertical column contains an even number of positions.\n  const size = 2 * (numPts * (numPts + 2));\n  const positions = addFillPositions ? new Array(size * 3) : undefined;\n  let positionIndex = 0;\n  let position = scratchCartesian1;\n  let reflectedPosition = scratchCartesian2;\n\n  const outerPositionsLength = numPts * 4 * 3;\n  let outerRightIndex = outerPositionsLength - 1;\n  let outerLeftIndex = 0;\n  const outerPositions = addEdgePositions\n    ? new Array(outerPositionsLength)\n    : undefined;\n\n  let i;\n  let j;\n  let numInterior;\n  let t;\n  let interiorPosition;\n\n  // Compute points in the 'eastern' half of the ellipse\n  theta = CesiumMath.PI_OVER_TWO;\n  position = pointOnEllipsoid(\n    theta,\n    rotation,\n    northVec,\n    eastVec,\n    aSqr,\n    ab,\n    bSqr,\n    mag,\n    unitPos,\n    position,\n  );\n  if (addFillPositions) {\n    positions[positionIndex++] = position.x;\n    positions[positionIndex++] = position.y;\n    positions[positionIndex++] = position.z;\n  }\n  if (addEdgePositions) {\n    outerPositions[outerRightIndex--] = position.z;\n    outerPositions[outerRightIndex--] = position.y;\n    outerPositions[outerRightIndex--] = position.x;\n  }\n  theta = CesiumMath.PI_OVER_TWO - deltaTheta;\n  for (i = 1; i < numPts + 1; ++i) {\n    position = pointOnEllipsoid(\n      theta,\n      rotation,\n      northVec,\n      eastVec,\n      aSqr,\n      ab,\n      bSqr,\n      mag,\n      unitPos,\n      position,\n    );\n    reflectedPosition = pointOnEllipsoid(\n      Math.PI - theta,\n      rotation,\n      northVec,\n      eastVec,\n      aSqr,\n      ab,\n      bSqr,\n      mag,\n      unitPos,\n      reflectedPosition,\n    );\n\n    if (addFillPositions) {\n      positions[positionIndex++] = position.x;\n      positions[positionIndex++] = position.y;\n      positions[positionIndex++] = position.z;\n\n      numInterior = 2 * i + 2;\n      for (j = 1; j < numInterior - 1; ++j) {\n        t = j / (numInterior - 1);\n        interiorPosition = Cartesian3.lerp(\n          position,\n          reflectedPosition,\n          t,\n          scratchCartesian3,\n        );\n        positions[positionIndex++] = interiorPosition.x;\n        positions[positionIndex++] = interiorPosition.y;\n        positions[positionIndex++] = interiorPosition.z;\n      }\n\n      positions[positionIndex++] = reflectedPosition.x;\n      positions[positionIndex++] = reflectedPosition.y;\n      positions[positionIndex++] = reflectedPosition.z;\n    }\n\n    if (addEdgePositions) {\n      outerPositions[outerRightIndex--] = position.z;\n      outerPositions[outerRightIndex--] = position.y;\n      outerPositions[outerRightIndex--] = position.x;\n      outerPositions[outerLeftIndex++] = reflectedPosition.x;\n      outerPositions[outerLeftIndex++] = reflectedPosition.y;\n      outerPositions[outerLeftIndex++] = reflectedPosition.z;\n    }\n\n    theta = CesiumMath.PI_OVER_TWO - (i + 1) * deltaTheta;\n  }\n\n  // Compute points in the 'western' half of the ellipse\n  for (i = numPts; i > 1; --i) {\n    theta = CesiumMath.PI_OVER_TWO - (i - 1) * deltaTheta;\n\n    position = pointOnEllipsoid(\n      -theta,\n      rotation,\n      northVec,\n      eastVec,\n      aSqr,\n      ab,\n      bSqr,\n      mag,\n      unitPos,\n      position,\n    );\n    reflectedPosition = pointOnEllipsoid(\n      theta + Math.PI,\n      rotation,\n      northVec,\n      eastVec,\n      aSqr,\n      ab,\n      bSqr,\n      mag,\n      unitPos,\n      reflectedPosition,\n    );\n\n    if (addFillPositions) {\n      positions[positionIndex++] = position.x;\n      positions[positionIndex++] = position.y;\n      positions[positionIndex++] = position.z;\n\n      numInterior = 2 * (i - 1) + 2;\n      for (j = 1; j < numInterior - 1; ++j) {\n        t = j / (numInterior - 1);\n        interiorPosition = Cartesian3.lerp(\n          position,\n          reflectedPosition,\n          t,\n          scratchCartesian3,\n        );\n        positions[positionIndex++] = interiorPosition.x;\n        positions[positionIndex++] = interiorPosition.y;\n        positions[positionIndex++] = interiorPosition.z;\n      }\n\n      positions[positionIndex++] = reflectedPosition.x;\n      positions[positionIndex++] = reflectedPosition.y;\n      positions[positionIndex++] = reflectedPosition.z;\n    }\n\n    if (addEdgePositions) {\n      outerPositions[outerRightIndex--] = position.z;\n      outerPositions[outerRightIndex--] = position.y;\n      outerPositions[outerRightIndex--] = position.x;\n      outerPositions[outerLeftIndex++] = reflectedPosition.x;\n      outerPositions[outerLeftIndex++] = reflectedPosition.y;\n      outerPositions[outerLeftIndex++] = reflectedPosition.z;\n    }\n  }\n\n  theta = CesiumMath.PI_OVER_TWO;\n  position = pointOnEllipsoid(\n    -theta,\n    rotation,\n    northVec,\n    eastVec,\n    aSqr,\n    ab,\n    bSqr,\n    mag,\n    unitPos,\n    position,\n  );\n\n  const r = {};\n  if (addFillPositions) {\n    positions[positionIndex++] = position.x;\n    positions[positionIndex++] = position.y;\n    positions[positionIndex++] = position.z;\n    r.positions = positions;\n    r.numPts = numPts;\n  }\n  if (addEdgePositions) {\n    outerPositions[outerRightIndex--] = position.z;\n    outerPositions[outerRightIndex--] = position.y;\n    outerPositions[outerRightIndex--] = position.x;\n    r.outerPositions = outerPositions;\n  }\n\n  return r;\n};\nexport default EllipseGeometryLibrary;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EllipseGeometryLibrary from \"./EllipseGeometryLibrary.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nconst scratchCartesian1 = new Cartesian3();\nlet boundingSphereCenter = new Cartesian3();\n\nfunction computeEllipse(options) {\n  const center = options.center;\n  boundingSphereCenter = Cartesian3.multiplyByScalar(\n    options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter),\n    options.height,\n    boundingSphereCenter,\n  );\n  boundingSphereCenter = Cartesian3.add(\n    center,\n    boundingSphereCenter,\n    boundingSphereCenter,\n  );\n  const boundingSphere = new BoundingSphere(\n    boundingSphereCenter,\n    options.semiMajorAxis,\n  );\n  const positions = EllipseGeometryLibrary.computeEllipsePositions(\n    options,\n    false,\n    true,\n  ).outerPositions;\n\n  const attributes = new GeometryAttributes({\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: EllipseGeometryLibrary.raisePositionsToHeight(\n        positions,\n        options,\n        false,\n      ),\n    }),\n  });\n\n  const length = positions.length / 3;\n  const indices = IndexDatatype.createTypedArray(length, length * 2);\n  let index = 0;\n  for (let i = 0; i < length; ++i) {\n    indices[index++] = i;\n    indices[index++] = (i + 1) % length;\n  }\n\n  return {\n    boundingSphere: boundingSphere,\n    attributes: attributes,\n    indices: indices,\n  };\n}\n\nconst topBoundingSphere = new BoundingSphere();\nconst bottomBoundingSphere = new BoundingSphere();\nfunction computeExtrudedEllipse(options) {\n  const center = options.center;\n  const ellipsoid = options.ellipsoid;\n  const semiMajorAxis = options.semiMajorAxis;\n  let scaledNormal = Cartesian3.multiplyByScalar(\n    ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1),\n    options.height,\n    scratchCartesian1,\n  );\n  topBoundingSphere.center = Cartesian3.add(\n    center,\n    scaledNormal,\n    topBoundingSphere.center,\n  );\n  topBoundingSphere.radius = semiMajorAxis;\n\n  scaledNormal = Cartesian3.multiplyByScalar(\n    ellipsoid.geodeticSurfaceNormal(center, scaledNormal),\n    options.extrudedHeight,\n    scaledNormal,\n  );\n  bottomBoundingSphere.center = Cartesian3.add(\n    center,\n    scaledNormal,\n    bottomBoundingSphere.center,\n  );\n  bottomBoundingSphere.radius = semiMajorAxis;\n\n  let positions = EllipseGeometryLibrary.computeEllipsePositions(\n    options,\n    false,\n    true,\n  ).outerPositions;\n  const attributes = new GeometryAttributes({\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: EllipseGeometryLibrary.raisePositionsToHeight(\n        positions,\n        options,\n        true,\n      ),\n    }),\n  });\n\n  positions = attributes.position.values;\n  const boundingSphere = BoundingSphere.union(\n    topBoundingSphere,\n    bottomBoundingSphere,\n  );\n  let length = positions.length / 3;\n\n  if (defined(options.offsetAttribute)) {\n    let applyOffset = new Uint8Array(length);\n    if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n      applyOffset = applyOffset.fill(1, 0, length / 2);\n    } else {\n      const offsetValue =\n        options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n      applyOffset = applyOffset.fill(offsetValue);\n    }\n\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  let numberOfVerticalLines = options.numberOfVerticalLines ?? 16;\n  numberOfVerticalLines = CesiumMath.clamp(\n    numberOfVerticalLines,\n    0,\n    length / 2,\n  );\n\n  const indices = IndexDatatype.createTypedArray(\n    length,\n    length * 2 + numberOfVerticalLines * 2,\n  );\n\n  length /= 2;\n  let index = 0;\n  let i;\n  for (i = 0; i < length; ++i) {\n    indices[index++] = i;\n    indices[index++] = (i + 1) % length;\n    indices[index++] = i + length;\n    indices[index++] = ((i + 1) % length) + length;\n  }\n\n  let numSide;\n  if (numberOfVerticalLines > 0) {\n    const numSideLines = Math.min(numberOfVerticalLines, length);\n    numSide = Math.round(length / numSideLines);\n\n    const maxI = Math.min(numSide * numberOfVerticalLines, length);\n    for (i = 0; i < maxI; i += numSide) {\n      indices[index++] = i;\n      indices[index++] = i + length;\n    }\n  }\n\n  return {\n    boundingSphere: boundingSphere,\n    attributes: attributes,\n    indices: indices,\n  };\n}\n\n/**\n * A description of the outline of an ellipse on an ellipsoid.\n *\n * @alias EllipseOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\n * @param {number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\n * @param {number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid the ellipse will be on.\n * @param {number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface.\n * @param {number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface.\n * @param {number} [options.rotation=0.0] The angle from north (counter-clockwise) in radians.\n * @param {number} [options.granularity=0.02] The angular distance between points on the ellipse in radians.\n * @param {number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surface of an extruded ellipse.\n *\n * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero.\n * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis.\n * @exception {DeveloperError} granularity must be greater than zero.\n *\n * @see EllipseOutlineGeometry.createGeometry\n *\n * @example\n * const ellipse = new Cesium.EllipseOutlineGeometry({\n *   center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\n *   semiMajorAxis : 500000.0,\n *   semiMinorAxis : 300000.0,\n *   rotation : Cesium.Math.toRadians(60.0)\n * });\n * const geometry = Cesium.EllipseOutlineGeometry.createGeometry(ellipse);\n */\nfunction EllipseOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const center = options.center;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const semiMajorAxis = options.semiMajorAxis;\n  const semiMinorAxis = options.semiMinorAxis;\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(center)) {\n    throw new DeveloperError(\"center is required.\");\n  }\n  if (!defined(semiMajorAxis)) {\n    throw new DeveloperError(\"semiMajorAxis is required.\");\n  }\n  if (!defined(semiMinorAxis)) {\n    throw new DeveloperError(\"semiMinorAxis is required.\");\n  }\n  if (semiMajorAxis < semiMinorAxis) {\n    throw new DeveloperError(\n      \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\",\n    );\n  }\n  if (granularity <= 0.0) {\n    throw new DeveloperError(\"granularity must be greater than zero.\");\n  }\n  //>>includeEnd('debug');\n\n  const height = options.height ?? 0.0;\n  const extrudedHeight = options.extrudedHeight ?? height;\n\n  this._center = Cartesian3.clone(center);\n  this._semiMajorAxis = semiMajorAxis;\n  this._semiMinorAxis = semiMinorAxis;\n  this._ellipsoid = Ellipsoid.clone(ellipsoid);\n  this._rotation = options.rotation ?? 0.0;\n  this._height = Math.max(extrudedHeight, height);\n  this._granularity = granularity;\n  this._extrudedHeight = Math.min(extrudedHeight, height);\n  this._numberOfVerticalLines = Math.max(\n    options.numberOfVerticalLines ?? 16,\n    0,\n  );\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createEllipseOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nEllipseOutlineGeometry.packedLength =\n  Cartesian3.packedLength + Ellipsoid.packedLength + 8;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipseOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nEllipseOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value._center, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  array[startingIndex++] = value._semiMajorAxis;\n  array[startingIndex++] = value._semiMinorAxis;\n  array[startingIndex++] = value._rotation;\n  array[startingIndex++] = value._height;\n  array[startingIndex++] = value._granularity;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex++] = value._numberOfVerticalLines;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchCenter = new Cartesian3();\nconst scratchEllipsoid = new Ellipsoid();\nconst scratchOptions = {\n  center: scratchCenter,\n  ellipsoid: scratchEllipsoid,\n  semiMajorAxis: undefined,\n  semiMinorAxis: undefined,\n  rotation: undefined,\n  height: undefined,\n  granularity: undefined,\n  extrudedHeight: undefined,\n  numberOfVerticalLines: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipseOutlineGeometry} [result] The object into which to store the result.\n * @returns {EllipseOutlineGeometry} The modified result parameter or a new EllipseOutlineGeometry instance if one was not provided.\n */\nEllipseOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const center = Cartesian3.unpack(array, startingIndex, scratchCenter);\n  startingIndex += Cartesian3.packedLength;\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const semiMajorAxis = array[startingIndex++];\n  const semiMinorAxis = array[startingIndex++];\n  const rotation = array[startingIndex++];\n  const height = array[startingIndex++];\n  const granularity = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const numberOfVerticalLines = array[startingIndex++];\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.height = height;\n    scratchOptions.extrudedHeight = extrudedHeight;\n    scratchOptions.granularity = granularity;\n    scratchOptions.rotation = rotation;\n    scratchOptions.semiMajorAxis = semiMajorAxis;\n    scratchOptions.semiMinorAxis = semiMinorAxis;\n    scratchOptions.numberOfVerticalLines = numberOfVerticalLines;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n\n    return new EllipseOutlineGeometry(scratchOptions);\n  }\n\n  result._center = Cartesian3.clone(center, result._center);\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._semiMajorAxis = semiMajorAxis;\n  result._semiMinorAxis = semiMinorAxis;\n  result._rotation = rotation;\n  result._height = height;\n  result._granularity = granularity;\n  result._extrudedHeight = extrudedHeight;\n  result._numberOfVerticalLines = numberOfVerticalLines;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of an outline of an ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipseOutlineGeometry} ellipseGeometry A description of the ellipse.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipseOutlineGeometry.createGeometry = function (ellipseGeometry) {\n  if (\n    ellipseGeometry._semiMajorAxis <= 0.0 ||\n    ellipseGeometry._semiMinorAxis <= 0.0\n  ) {\n    return;\n  }\n\n  const height = ellipseGeometry._height;\n  const extrudedHeight = ellipseGeometry._extrudedHeight;\n  const extrude = !CesiumMath.equalsEpsilon(\n    height,\n    extrudedHeight,\n    0,\n    CesiumMath.EPSILON2,\n  );\n\n  ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface(\n    ellipseGeometry._center,\n    ellipseGeometry._center,\n  );\n  const options = {\n    center: ellipseGeometry._center,\n    semiMajorAxis: ellipseGeometry._semiMajorAxis,\n    semiMinorAxis: ellipseGeometry._semiMinorAxis,\n    ellipsoid: ellipseGeometry._ellipsoid,\n    rotation: ellipseGeometry._rotation,\n    height: height,\n    granularity: ellipseGeometry._granularity,\n    numberOfVerticalLines: ellipseGeometry._numberOfVerticalLines,\n  };\n  let geometry;\n  if (extrude) {\n    options.extrudedHeight = extrudedHeight;\n    options.offsetAttribute = ellipseGeometry._offsetAttribute;\n    geometry = computeExtrudedEllipse(options);\n  } else {\n    geometry = computeEllipse(options);\n\n    if (defined(ellipseGeometry._offsetAttribute)) {\n      const length = geometry.attributes.position.values.length;\n      const offsetValue =\n        ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n          ? 0\n          : 1;\n      const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n      geometry.attributes.applyOffset = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        componentsPerAttribute: 1,\n        values: applyOffset,\n      });\n    }\n  }\n\n  return new Geometry({\n    attributes: geometry.attributes,\n    indices: geometry.indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: geometry.boundingSphere,\n    offsetAttribute: ellipseGeometry._offsetAttribute,\n  });\n};\nexport default EllipseOutlineGeometry;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport scaleToGeodeticSurface from \"./scaleToGeodeticSurface.js\";\n\nfunction initialize(ellipsoid, x, y, z) {\n  x = x ?? 0.0;\n  y = y ?? 0.0;\n  z = z ?? 0.0;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"x\", x, 0.0);\n  Check.typeOf.number.greaterThanOrEquals(\"y\", y, 0.0);\n  Check.typeOf.number.greaterThanOrEquals(\"z\", z, 0.0);\n  //>>includeEnd('debug');\n\n  ellipsoid._radii = new Cartesian3(x, y, z);\n\n  ellipsoid._radiiSquared = new Cartesian3(x * x, y * y, z * z);\n\n  ellipsoid._radiiToTheFourth = new Cartesian3(\n    x * x * x * x,\n    y * y * y * y,\n    z * z * z * z,\n  );\n\n  ellipsoid._oneOverRadii = new Cartesian3(\n    x === 0.0 ? 0.0 : 1.0 / x,\n    y === 0.0 ? 0.0 : 1.0 / y,\n    z === 0.0 ? 0.0 : 1.0 / z,\n  );\n\n  ellipsoid._oneOverRadiiSquared = new Cartesian3(\n    x === 0.0 ? 0.0 : 1.0 / (x * x),\n    y === 0.0 ? 0.0 : 1.0 / (y * y),\n    z === 0.0 ? 0.0 : 1.0 / (z * z),\n  );\n\n  ellipsoid._minimumRadius = Math.min(x, y, z);\n\n  ellipsoid._maximumRadius = Math.max(x, y, z);\n\n  ellipsoid._centerToleranceSquared = CesiumMath.EPSILON1;\n\n  if (ellipsoid._radiiSquared.z !== 0) {\n    ellipsoid._squaredXOverSquaredZ =\n      ellipsoid._radiiSquared.x / ellipsoid._radiiSquared.z;\n  }\n}\n\n/**\n * A quadratic surface defined in Cartesian coordinates by the equation\n * <code>(x / a)^2 + (y / b)^2 + (z / c)^2 = 1</code>.  Primarily used\n * by Cesium to represent the shape of planetary bodies.\n *\n * Rather than constructing this object directly, one of the provided\n * constants is normally used.\n * @alias Ellipsoid\n * @constructor\n *\n * @param {number} [x=0] The radius in the x direction.\n * @param {number} [y=0] The radius in the y direction.\n * @param {number} [z=0] The radius in the z direction.\n *\n * @exception {DeveloperError} All radii components must be greater than or equal to zero.\n *\n * @see Ellipsoid.fromCartesian3\n * @see Ellipsoid.WGS84\n * @see Ellipsoid.UNIT_SPHERE\n */\nfunction Ellipsoid(x, y, z) {\n  this._radii = undefined;\n  this._radiiSquared = undefined;\n  this._radiiToTheFourth = undefined;\n  this._oneOverRadii = undefined;\n  this._oneOverRadiiSquared = undefined;\n  this._minimumRadius = undefined;\n  this._maximumRadius = undefined;\n  this._centerToleranceSquared = undefined;\n  this._squaredXOverSquaredZ = undefined;\n\n  initialize(this, x, y, z);\n}\n\nObject.defineProperties(Ellipsoid.prototype, {\n  /**\n   * Gets the radii of the ellipsoid.\n   * @memberof Ellipsoid.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  radii: {\n    get: function () {\n      return this._radii;\n    },\n  },\n  /**\n   * Gets the squared radii of the ellipsoid.\n   * @memberof Ellipsoid.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  radiiSquared: {\n    get: function () {\n      return this._radiiSquared;\n    },\n  },\n  /**\n   * Gets the radii of the ellipsoid raise to the fourth power.\n   * @memberof Ellipsoid.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  radiiToTheFourth: {\n    get: function () {\n      return this._radiiToTheFourth;\n    },\n  },\n  /**\n   * Gets one over the radii of the ellipsoid.\n   * @memberof Ellipsoid.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  oneOverRadii: {\n    get: function () {\n      return this._oneOverRadii;\n    },\n  },\n  /**\n   * Gets one over the squared radii of the ellipsoid.\n   * @memberof Ellipsoid.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  oneOverRadiiSquared: {\n    get: function () {\n      return this._oneOverRadiiSquared;\n    },\n  },\n  /**\n   * Gets the minimum radius of the ellipsoid.\n   * @memberof Ellipsoid.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumRadius: {\n    get: function () {\n      return this._minimumRadius;\n    },\n  },\n  /**\n   * Gets the maximum radius of the ellipsoid.\n   * @memberof Ellipsoid.prototype\n   * @type {number}\n   * @readonly\n   */\n  maximumRadius: {\n    get: function () {\n      return this._maximumRadius;\n    },\n  },\n});\n\n/**\n * Duplicates an Ellipsoid instance.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid to duplicate.\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\n *                    instance should be created.\n * @returns {Ellipsoid} The cloned Ellipsoid. (Returns undefined if ellipsoid is undefined)\n */\nEllipsoid.clone = function (ellipsoid, result) {\n  if (!defined(ellipsoid)) {\n    return undefined;\n  }\n  const radii = ellipsoid._radii;\n\n  if (!defined(result)) {\n    return new Ellipsoid(radii.x, radii.y, radii.z);\n  }\n\n  Cartesian3.clone(radii, result._radii);\n  Cartesian3.clone(ellipsoid._radiiSquared, result._radiiSquared);\n  Cartesian3.clone(ellipsoid._radiiToTheFourth, result._radiiToTheFourth);\n  Cartesian3.clone(ellipsoid._oneOverRadii, result._oneOverRadii);\n  Cartesian3.clone(ellipsoid._oneOverRadiiSquared, result._oneOverRadiiSquared);\n  result._minimumRadius = ellipsoid._minimumRadius;\n  result._maximumRadius = ellipsoid._maximumRadius;\n  result._centerToleranceSquared = ellipsoid._centerToleranceSquared;\n\n  return result;\n};\n\n/**\n * Computes an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions.\n *\n * @param {Cartesian3} [cartesian=Cartesian3.ZERO] The ellipsoid's radius in the x, y, and z directions.\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\n *                    instance should be created.\n * @returns {Ellipsoid} A new Ellipsoid instance.\n *\n * @exception {DeveloperError} All radii components must be greater than or equal to zero.\n *\n * @see Ellipsoid.WGS84\n * @see Ellipsoid.UNIT_SPHERE\n */\nEllipsoid.fromCartesian3 = function (cartesian, result) {\n  if (!defined(result)) {\n    result = new Ellipsoid();\n  }\n\n  if (!defined(cartesian)) {\n    return result;\n  }\n\n  initialize(result, cartesian.x, cartesian.y, cartesian.z);\n  return result;\n};\n\n/**\n * An Ellipsoid instance initialized to the WGS84 standard.\n *\n * @type {Ellipsoid}\n * @constant\n */\nEllipsoid.WGS84 = Object.freeze(\n  new Ellipsoid(6378137.0, 6378137.0, 6356752.3142451793),\n);\n\n/**\n * An Ellipsoid instance initialized to radii of (1.0, 1.0, 1.0).\n *\n * @type {Ellipsoid}\n * @constant\n */\nEllipsoid.UNIT_SPHERE = Object.freeze(new Ellipsoid(1.0, 1.0, 1.0));\n\n/**\n * An Ellipsoid instance initialized to a sphere with the lunar radius.\n *\n * @type {Ellipsoid}\n * @constant\n */\nEllipsoid.MOON = Object.freeze(\n  new Ellipsoid(\n    CesiumMath.LUNAR_RADIUS,\n    CesiumMath.LUNAR_RADIUS,\n    CesiumMath.LUNAR_RADIUS,\n  ),\n);\n\n/**\n * An Ellipsoid instance initialized to a sphere with the mean radii of Mars.\n * Source: https://epsg.io/104905\n *\n * @type {Ellipsoid}\n * @constant\n */\nEllipsoid.MARS = Object.freeze(new Ellipsoid(3396190.0, 3396190.0, 3376200.0));\n\nEllipsoid._default = Ellipsoid.WGS84;\nObject.defineProperties(Ellipsoid, {\n  /**\n   * The default ellipsoid used when not otherwise specified.\n   * @memberof Ellipsoid\n   * @type {Ellipsoid}\n   * @example\n   * Cesium.Ellipsoid.default = Cesium.Ellipsoid.MOON;\n   *\n   * // Apollo 11 landing site\n   * const position = Cesium.Cartesian3.fromRadians(\n   *   0.67416,\n   *   23.47315,\n   * );\n   */\n  default: {\n    get: function () {\n      return Ellipsoid._default;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      Ellipsoid._default = value;\n      Cartesian3._ellipsoidRadiiSquared = value.radiiSquared;\n      Cartographic._ellipsoidOneOverRadii = value.oneOverRadii;\n      Cartographic._ellipsoidOneOverRadiiSquared = value.oneOverRadiiSquared;\n      Cartographic._ellipsoidCenterToleranceSquared =\n        value._centerToleranceSquared;\n    },\n  },\n});\n\n/**\n * Duplicates an Ellipsoid instance.\n *\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\n *                    instance should be created.\n * @returns {Ellipsoid} The cloned Ellipsoid.\n */\nEllipsoid.prototype.clone = function (result) {\n  return Ellipsoid.clone(this, result);\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nEllipsoid.packedLength = Cartesian3.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Ellipsoid} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nEllipsoid.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value._radii, array, startingIndex);\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Ellipsoid} [result] The object into which to store the result.\n * @returns {Ellipsoid} The modified result parameter or a new Ellipsoid instance if one was not provided.\n */\nEllipsoid.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const radii = Cartesian3.unpack(array, startingIndex);\n  return Ellipsoid.fromCartesian3(radii, result);\n};\n\n/**\n * Computes the unit vector directed from the center of this ellipsoid toward the provided Cartesian position.\n * @function\n *\n * @param {Cartesian3} cartesian The Cartesian for which to to determine the geocentric normal.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoid.prototype.geocentricSurfaceNormal = Cartesian3.normalize;\n\n/**\n * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.\n *\n * @param {Cartographic} cartographic The cartographic position for which to to determine the geodetic normal.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoid.prototype.geodeticSurfaceNormalCartographic = function (\n  cartographic,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartographic\", cartographic);\n  //>>includeEnd('debug');\n\n  const longitude = cartographic.longitude;\n  const latitude = cartographic.latitude;\n  const cosLatitude = Math.cos(latitude);\n\n  const x = cosLatitude * Math.cos(longitude);\n  const y = cosLatitude * Math.sin(longitude);\n  const z = Math.sin(latitude);\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return Cartesian3.normalize(result, result);\n};\n\n/**\n * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.\n *\n * @param {Cartesian3} cartesian The Cartesian position for which to to determine the surface normal.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided, or undefined if a normal cannot be found.\n */\nEllipsoid.prototype.geodeticSurfaceNormal = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  if (isNaN(cartesian.x) || isNaN(cartesian.y) || isNaN(cartesian.z)) {\n    throw new DeveloperError(\"cartesian has a NaN component\");\n  }\n  //>>includeEnd('debug');\n  if (\n    Cartesian3.equalsEpsilon(cartesian, Cartesian3.ZERO, CesiumMath.EPSILON14)\n  ) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n  result = Cartesian3.multiplyComponents(\n    cartesian,\n    this._oneOverRadiiSquared,\n    result,\n  );\n  return Cartesian3.normalize(result, result);\n};\n\nconst cartographicToCartesianNormal = new Cartesian3();\nconst cartographicToCartesianK = new Cartesian3();\n\n/**\n * Converts the provided cartographic to Cartesian representation.\n *\n * @param {Cartographic} cartographic The cartographic position.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n *\n * @example\n * //Create a Cartographic and determine it's Cartesian representation on a WGS84 ellipsoid.\n * const position = new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 5000);\n * const cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position);\n */\nEllipsoid.prototype.cartographicToCartesian = function (cartographic, result) {\n  //`cartographic is required` is thrown from geodeticSurfaceNormalCartographic.\n  const n = cartographicToCartesianNormal;\n  const k = cartographicToCartesianK;\n  this.geodeticSurfaceNormalCartographic(cartographic, n);\n  Cartesian3.multiplyComponents(this._radiiSquared, n, k);\n  const gamma = Math.sqrt(Cartesian3.dot(n, k));\n  Cartesian3.divideByScalar(k, gamma, k);\n  Cartesian3.multiplyByScalar(n, cartographic.height, n);\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n  return Cartesian3.add(k, n, result);\n};\n\n/**\n * Converts the provided array of cartographics to an array of Cartesians.\n *\n * @param {Cartographic[]} cartographics An array of cartographic positions.\n * @param {Cartesian3[]} [result] The object onto which to store the result.\n * @returns {Cartesian3[]} The modified result parameter or a new Array instance if none was provided.\n *\n * @example\n * //Convert an array of Cartographics and determine their Cartesian representation on a WGS84 ellipsoid.\n * const positions = [new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 0),\n *                  new Cesium.Cartographic(Cesium.Math.toRadians(21.321), Cesium.Math.toRadians(78.123), 100),\n *                  new Cesium.Cartographic(Cesium.Math.toRadians(21.645), Cesium.Math.toRadians(78.456), 250)];\n * const cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions);\n */\nEllipsoid.prototype.cartographicArrayToCartesianArray = function (\n  cartographics,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartographics\", cartographics);\n  //>>includeEnd('debug');\n\n  const length = cartographics.length;\n  if (!defined(result)) {\n    result = new Array(length);\n  } else {\n    result.length = length;\n  }\n  for (let i = 0; i < length; i++) {\n    result[i] = this.cartographicToCartesian(cartographics[i], result[i]);\n  }\n  return result;\n};\n\nconst cartesianToCartographicN = new Cartesian3();\nconst cartesianToCartographicP = new Cartesian3();\nconst cartesianToCartographicH = new Cartesian3();\n\n/**\n * Converts the provided cartesian to cartographic representation.\n * The cartesian is undefined at the center of the ellipsoid.\n *\n * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation.\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\n *\n * @example\n * //Create a Cartesian and determine it's Cartographic representation on a WGS84 ellipsoid.\n * const position = new Cesium.Cartesian3(17832.12, 83234.52, 952313.73);\n * const cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);\n */\nEllipsoid.prototype.cartesianToCartographic = function (cartesian, result) {\n  //`cartesian is required.` is thrown from scaleToGeodeticSurface\n  const p = this.scaleToGeodeticSurface(cartesian, cartesianToCartographicP);\n\n  if (!defined(p)) {\n    return undefined;\n  }\n\n  const n = this.geodeticSurfaceNormal(p, cartesianToCartographicN);\n  const h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH);\n\n  const longitude = Math.atan2(n.y, n.x);\n  const latitude = Math.asin(n.z);\n  const height =\n    CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h);\n\n  if (!defined(result)) {\n    return new Cartographic(longitude, latitude, height);\n  }\n  result.longitude = longitude;\n  result.latitude = latitude;\n  result.height = height;\n  return result;\n};\n\n/**\n * Converts the provided array of cartesians to an array of cartographics.\n *\n * @param {Cartesian3[]} cartesians An array of Cartesian positions.\n * @param {Cartographic[]} [result] The object onto which to store the result.\n * @returns {Cartographic[]} The modified result parameter or a new Array instance if none was provided.\n *\n * @example\n * //Create an array of Cartesians and determine their Cartographic representation on a WGS84 ellipsoid.\n * const positions = [new Cesium.Cartesian3(17832.12, 83234.52, 952313.73),\n *                  new Cesium.Cartesian3(17832.13, 83234.53, 952313.73),\n *                  new Cesium.Cartesian3(17832.14, 83234.54, 952313.73)]\n * const cartographicPositions = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions);\n */\nEllipsoid.prototype.cartesianArrayToCartographicArray = function (\n  cartesians,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  //>>includeEnd('debug');\n\n  const length = cartesians.length;\n  if (!defined(result)) {\n    result = new Array(length);\n  } else {\n    result.length = length;\n  }\n  for (let i = 0; i < length; ++i) {\n    result[i] = this.cartesianToCartographic(cartesians[i], result[i]);\n  }\n  return result;\n};\n\n/**\n * Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid.  If the position is\n * at the center of the ellipsoid, this function returns undefined.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\n */\nEllipsoid.prototype.scaleToGeodeticSurface = function (cartesian, result) {\n  return scaleToGeodeticSurface(\n    cartesian,\n    this._oneOverRadii,\n    this._oneOverRadiiSquared,\n    this._centerToleranceSquared,\n    result,\n  );\n};\n\n/**\n * Scales the provided Cartesian position along the geocentric surface normal\n * so that it is on the surface of this ellipsoid.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoid.prototype.scaleToGeocentricSurface = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  const positionX = cartesian.x;\n  const positionY = cartesian.y;\n  const positionZ = cartesian.z;\n  const oneOverRadiiSquared = this._oneOverRadiiSquared;\n\n  const beta =\n    1.0 /\n    Math.sqrt(\n      positionX * positionX * oneOverRadiiSquared.x +\n        positionY * positionY * oneOverRadiiSquared.y +\n        positionZ * positionZ * oneOverRadiiSquared.z,\n    );\n\n  return Cartesian3.multiplyByScalar(cartesian, beta, result);\n};\n\n/**\n * Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying\n * its components by the result of {@link Ellipsoid#oneOverRadii}.\n *\n * @param {Cartesian3} position The position to transform.\n * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and\n *        return a new instance.\n * @returns {Cartesian3} The position expressed in the scaled space.  The returned instance is the\n *          one passed as the result parameter if it is not undefined, or a new instance of it is.\n */\nEllipsoid.prototype.transformPositionToScaledSpace = function (\n  position,\n  result,\n) {\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  return Cartesian3.multiplyComponents(position, this._oneOverRadii, result);\n};\n\n/**\n * Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying\n * its components by the result of {@link Ellipsoid#radii}.\n *\n * @param {Cartesian3} position The position to transform.\n * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and\n *        return a new instance.\n * @returns {Cartesian3} The position expressed in the unscaled space.  The returned instance is the\n *          one passed as the result parameter if it is not undefined, or a new instance of it is.\n */\nEllipsoid.prototype.transformPositionFromScaledSpace = function (\n  position,\n  result,\n) {\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  return Cartesian3.multiplyComponents(position, this._radii, result);\n};\n\n/**\n * Compares this Ellipsoid against the provided Ellipsoid componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Ellipsoid} [right] The other Ellipsoid.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nEllipsoid.prototype.equals = function (right) {\n  return (\n    this === right ||\n    (defined(right) && Cartesian3.equals(this._radii, right._radii))\n  );\n};\n\n/**\n * Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'.\n *\n * @returns {string} A string representing this ellipsoid in the format '(radii.x, radii.y, radii.z)'.\n */\nEllipsoid.prototype.toString = function () {\n  return this._radii.toString();\n};\n\n/**\n * Computes a point which is the intersection of the surface normal with the z-axis.\n *\n * @param {Cartesian3} position the position. must be on the surface of the ellipsoid.\n * @param {number} [buffer = 0.0] A buffer to subtract from the ellipsoid size when checking if the point is inside the ellipsoid.\n *                                In earth case, with common earth datums, there is no need for this buffer since the intersection point is always (relatively) very close to the center.\n *                                In WGS84 datum, intersection point is at max z = +-42841.31151331382 (0.673% of z-axis).\n *                                Intersection point could be outside the ellipsoid if the ratio of MajorAxis / AxisOfRotation is bigger than the square root of 2\n * @param {Cartesian3} [result] The cartesian to which to copy the result, or undefined to create and\n *        return a new instance.\n * @returns {Cartesian3 | undefined} the intersection point if it's inside the ellipsoid, undefined otherwise\n *\n * @exception {DeveloperError} position is required.\n * @exception {DeveloperError} Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y).\n * @exception {DeveloperError} Ellipsoid.radii.z must be greater than 0.\n */\nEllipsoid.prototype.getSurfaceNormalIntersectionWithZAxis = function (\n  position,\n  buffer,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"position\", position);\n\n  if (\n    !CesiumMath.equalsEpsilon(\n      this._radii.x,\n      this._radii.y,\n      CesiumMath.EPSILON15,\n    )\n  ) {\n    throw new DeveloperError(\n      \"Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\",\n    );\n  }\n\n  Check.typeOf.number.greaterThan(\"Ellipsoid.radii.z\", this._radii.z, 0);\n  //>>includeEnd('debug');\n\n  buffer = buffer ?? 0.0;\n\n  const squaredXOverSquaredZ = this._squaredXOverSquaredZ;\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  result.x = 0.0;\n  result.y = 0.0;\n  result.z = position.z * (1 - squaredXOverSquaredZ);\n\n  if (Math.abs(result.z) >= this._radii.z - buffer) {\n    return undefined;\n  }\n\n  return result;\n};\n\nconst scratchEndpoint = new Cartesian3();\n\n/**\n * Computes the ellipsoid curvatures at a given position on the surface.\n *\n * @param {Cartesian3} surfacePosition The position on the ellipsoid surface where curvatures will be calculated.\n * @param {Cartesian2} [result] The cartesian to which to copy the result, or undefined to create and return a new instance.\n * @returns {Cartesian2} The local curvature of the ellipsoid surface at the provided position, in east and north directions.\n *\n * @exception {DeveloperError} position is required.\n */\nEllipsoid.prototype.getLocalCurvature = function (surfacePosition, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"surfacePosition\", surfacePosition);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian2();\n  }\n\n  const primeVerticalEndpoint = this.getSurfaceNormalIntersectionWithZAxis(\n    surfacePosition,\n    0.0,\n    scratchEndpoint,\n  );\n  const primeVerticalRadius = Cartesian3.distance(\n    surfacePosition,\n    primeVerticalEndpoint,\n  );\n  // meridional radius = (1 - e^2) * primeVerticalRadius^3 / a^2\n  // where 1 - e^2 = b^2 / a^2,\n  // so meridional = b^2 * primeVerticalRadius^3 / a^4\n  //   = (b * primeVerticalRadius / a^2)^2 * primeVertical\n  const radiusRatio =\n    (this.minimumRadius * primeVerticalRadius) / this.maximumRadius ** 2;\n  const meridionalRadius = primeVerticalRadius * radiusRatio ** 2;\n\n  return Cartesian2.fromElements(\n    1.0 / primeVerticalRadius,\n    1.0 / meridionalRadius,\n    result,\n  );\n};\n\nconst abscissas = [\n  0.14887433898163, 0.43339539412925, 0.67940956829902, 0.86506336668898,\n  0.97390652851717, 0.0,\n];\nconst weights = [\n  0.29552422471475, 0.26926671930999, 0.21908636251598, 0.14945134915058,\n  0.066671344308684, 0.0,\n];\n\n/**\n * Compute the 10th order Gauss-Legendre Quadrature of the given definite integral.\n *\n * @param {number} a The lower bound for the integration.\n * @param {number} b The upper bound for the integration.\n * @param {Ellipsoid~RealValuedScalarFunction} func The function to integrate.\n * @returns {number} The value of the integral of the given function over the given domain.\n *\n * @private\n */\nfunction gaussLegendreQuadrature(a, b, func) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"a\", a);\n  Check.typeOf.number(\"b\", b);\n  Check.typeOf.func(\"func\", func);\n  //>>includeEnd('debug');\n\n  // The range is half of the normal range since the five weights add to one (ten weights add to two).\n  // The values of the abscissas are multiplied by two to account for this.\n  const xMean = 0.5 * (b + a);\n  const xRange = 0.5 * (b - a);\n\n  let sum = 0.0;\n  for (let i = 0; i < 5; i++) {\n    const dx = xRange * abscissas[i];\n    sum += weights[i] * (func(xMean + dx) + func(xMean - dx));\n  }\n\n  // Scale the sum to the range of x.\n  sum *= xRange;\n  return sum;\n}\n\n/**\n * A real valued scalar function.\n * @callback Ellipsoid~RealValuedScalarFunction\n *\n * @param {number} x The value used to evaluate the function.\n * @returns {number} The value of the function at x.\n *\n * @private\n */\n\n/**\n * Computes an approximation of the surface area of a rectangle on the surface of an ellipsoid using\n * Gauss-Legendre 10th order quadrature.\n *\n * @param {Rectangle} rectangle The rectangle used for computing the surface area.\n * @returns {number} The approximate area of the rectangle on the surface of this ellipsoid.\n */\nEllipsoid.prototype.surfaceArea = function (rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n  const minLongitude = rectangle.west;\n  let maxLongitude = rectangle.east;\n  const minLatitude = rectangle.south;\n  const maxLatitude = rectangle.north;\n\n  while (maxLongitude < minLongitude) {\n    maxLongitude += CesiumMath.TWO_PI;\n  }\n\n  const radiiSquared = this._radiiSquared;\n  const a2 = radiiSquared.x;\n  const b2 = radiiSquared.y;\n  const c2 = radiiSquared.z;\n  const a2b2 = a2 * b2;\n  return gaussLegendreQuadrature(minLatitude, maxLatitude, function (lat) {\n    // phi represents the angle measured from the north pole\n    // sin(phi) = sin(pi / 2 - lat) = cos(lat), cos(phi) is similar\n    const sinPhi = Math.cos(lat);\n    const cosPhi = Math.sin(lat);\n    return (\n      Math.cos(lat) *\n      gaussLegendreQuadrature(minLongitude, maxLongitude, function (lon) {\n        const cosTheta = Math.cos(lon);\n        const sinTheta = Math.sin(lon);\n        return Math.sqrt(\n          a2b2 * cosPhi * cosPhi +\n            c2 *\n              (b2 * cosTheta * cosTheta + a2 * sinTheta * sinTheta) *\n              sinPhi *\n              sinPhi,\n        );\n      })\n    );\n  });\n};\n\nexport default Ellipsoid;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\n\nfunction setConstants(ellipsoidGeodesic) {\n  const uSquared = ellipsoidGeodesic._uSquared;\n  const a = ellipsoidGeodesic._ellipsoid.maximumRadius;\n  const b = ellipsoidGeodesic._ellipsoid.minimumRadius;\n  const f = (a - b) / a;\n\n  const cosineHeading = Math.cos(ellipsoidGeodesic._startHeading);\n  const sineHeading = Math.sin(ellipsoidGeodesic._startHeading);\n\n  const tanU = (1 - f) * Math.tan(ellipsoidGeodesic._start.latitude);\n\n  const cosineU = 1.0 / Math.sqrt(1.0 + tanU * tanU);\n  const sineU = cosineU * tanU;\n\n  const sigma = Math.atan2(tanU, cosineHeading);\n\n  const sineAlpha = cosineU * sineHeading;\n  const sineSquaredAlpha = sineAlpha * sineAlpha;\n\n  const cosineSquaredAlpha = 1.0 - sineSquaredAlpha;\n  const cosineAlpha = Math.sqrt(cosineSquaredAlpha);\n\n  const u2Over4 = uSquared / 4.0;\n  const u4Over16 = u2Over4 * u2Over4;\n  const u6Over64 = u4Over16 * u2Over4;\n  const u8Over256 = u4Over16 * u4Over16;\n\n  const a0 =\n    1.0 +\n    u2Over4 -\n    (3.0 * u4Over16) / 4.0 +\n    (5.0 * u6Over64) / 4.0 -\n    (175.0 * u8Over256) / 64.0;\n  const a1 = 1.0 - u2Over4 + (15.0 * u4Over16) / 8.0 - (35.0 * u6Over64) / 8.0;\n  const a2 = 1.0 - 3.0 * u2Over4 + (35.0 * u4Over16) / 4.0;\n  const a3 = 1.0 - 5.0 * u2Over4;\n\n  const distanceRatio =\n    a0 * sigma -\n    (a1 * Math.sin(2.0 * sigma) * u2Over4) / 2.0 -\n    (a2 * Math.sin(4.0 * sigma) * u4Over16) / 16.0 -\n    (a3 * Math.sin(6.0 * sigma) * u6Over64) / 48.0 -\n    (Math.sin(8.0 * sigma) * 5.0 * u8Over256) / 512;\n\n  const constants = ellipsoidGeodesic._constants;\n\n  constants.a = a;\n  constants.b = b;\n  constants.f = f;\n  constants.cosineHeading = cosineHeading;\n  constants.sineHeading = sineHeading;\n  constants.tanU = tanU;\n  constants.cosineU = cosineU;\n  constants.sineU = sineU;\n  constants.sigma = sigma;\n  constants.sineAlpha = sineAlpha;\n  constants.sineSquaredAlpha = sineSquaredAlpha;\n  constants.cosineSquaredAlpha = cosineSquaredAlpha;\n  constants.cosineAlpha = cosineAlpha;\n  constants.u2Over4 = u2Over4;\n  constants.u4Over16 = u4Over16;\n  constants.u6Over64 = u6Over64;\n  constants.u8Over256 = u8Over256;\n  constants.a0 = a0;\n  constants.a1 = a1;\n  constants.a2 = a2;\n  constants.a3 = a3;\n  constants.distanceRatio = distanceRatio;\n}\n\nfunction computeC(f, cosineSquaredAlpha) {\n  return (\n    (f * cosineSquaredAlpha * (4.0 + f * (4.0 - 3.0 * cosineSquaredAlpha))) /\n    16.0\n  );\n}\n\nfunction computeDeltaLambda(\n  f,\n  sineAlpha,\n  cosineSquaredAlpha,\n  sigma,\n  sineSigma,\n  cosineSigma,\n  cosineTwiceSigmaMidpoint,\n) {\n  const C = computeC(f, cosineSquaredAlpha);\n\n  return (\n    (1.0 - C) *\n    f *\n    sineAlpha *\n    (sigma +\n      C *\n        sineSigma *\n        (cosineTwiceSigmaMidpoint +\n          C *\n            cosineSigma *\n            (2.0 * cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint - 1.0)))\n  );\n}\n\nfunction vincentyInverseFormula(\n  ellipsoidGeodesic,\n  major,\n  minor,\n  firstLongitude,\n  firstLatitude,\n  secondLongitude,\n  secondLatitude,\n) {\n  const eff = (major - minor) / major;\n  const l = secondLongitude - firstLongitude;\n\n  const u1 = Math.atan((1 - eff) * Math.tan(firstLatitude));\n  const u2 = Math.atan((1 - eff) * Math.tan(secondLatitude));\n\n  const cosineU1 = Math.cos(u1);\n  const sineU1 = Math.sin(u1);\n  const cosineU2 = Math.cos(u2);\n  const sineU2 = Math.sin(u2);\n\n  const cc = cosineU1 * cosineU2;\n  const cs = cosineU1 * sineU2;\n  const ss = sineU1 * sineU2;\n  const sc = sineU1 * cosineU2;\n\n  let lambda = l;\n  let lambdaDot = CesiumMath.TWO_PI;\n\n  let cosineLambda = Math.cos(lambda);\n  let sineLambda = Math.sin(lambda);\n\n  let sigma;\n  let cosineSigma;\n  let sineSigma;\n  let cosineSquaredAlpha;\n  let cosineTwiceSigmaMidpoint;\n\n  do {\n    cosineLambda = Math.cos(lambda);\n    sineLambda = Math.sin(lambda);\n\n    const temp = cs - sc * cosineLambda;\n    sineSigma = Math.sqrt(\n      cosineU2 * cosineU2 * sineLambda * sineLambda + temp * temp,\n    );\n    cosineSigma = ss + cc * cosineLambda;\n\n    sigma = Math.atan2(sineSigma, cosineSigma);\n\n    let sineAlpha;\n\n    if (sineSigma === 0.0) {\n      sineAlpha = 0.0;\n      cosineSquaredAlpha = 1.0;\n    } else {\n      sineAlpha = (cc * sineLambda) / sineSigma;\n      cosineSquaredAlpha = 1.0 - sineAlpha * sineAlpha;\n    }\n\n    lambdaDot = lambda;\n\n    cosineTwiceSigmaMidpoint = cosineSigma - (2.0 * ss) / cosineSquaredAlpha;\n\n    if (!isFinite(cosineTwiceSigmaMidpoint)) {\n      cosineTwiceSigmaMidpoint = 0.0;\n    }\n\n    lambda =\n      l +\n      computeDeltaLambda(\n        eff,\n        sineAlpha,\n        cosineSquaredAlpha,\n        sigma,\n        sineSigma,\n        cosineSigma,\n        cosineTwiceSigmaMidpoint,\n      );\n  } while (Math.abs(lambda - lambdaDot) > CesiumMath.EPSILON12);\n\n  const uSquared =\n    (cosineSquaredAlpha * (major * major - minor * minor)) / (minor * minor);\n  const A =\n    1.0 +\n    (uSquared *\n      (4096.0 + uSquared * (uSquared * (320.0 - 175.0 * uSquared) - 768.0))) /\n      16384.0;\n  const B =\n    (uSquared *\n      (256.0 + uSquared * (uSquared * (74.0 - 47.0 * uSquared) - 128.0))) /\n    1024.0;\n\n  const cosineSquaredTwiceSigmaMidpoint =\n    cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint;\n  const deltaSigma =\n    B *\n    sineSigma *\n    (cosineTwiceSigmaMidpoint +\n      (B *\n        (cosineSigma * (2.0 * cosineSquaredTwiceSigmaMidpoint - 1.0) -\n          (B *\n            cosineTwiceSigmaMidpoint *\n            (4.0 * sineSigma * sineSigma - 3.0) *\n            (4.0 * cosineSquaredTwiceSigmaMidpoint - 3.0)) /\n            6.0)) /\n        4.0);\n\n  const distance = minor * A * (sigma - deltaSigma);\n\n  const startHeading = Math.atan2(\n    cosineU2 * sineLambda,\n    cs - sc * cosineLambda,\n  );\n  const endHeading = Math.atan2(cosineU1 * sineLambda, cs * cosineLambda - sc);\n\n  ellipsoidGeodesic._distance = distance;\n  ellipsoidGeodesic._startHeading = startHeading;\n  ellipsoidGeodesic._endHeading = endHeading;\n  ellipsoidGeodesic._uSquared = uSquared;\n}\n\nconst scratchCart1 = new Cartesian3();\nconst scratchCart2 = new Cartesian3();\nfunction computeProperties(ellipsoidGeodesic, start, end, ellipsoid) {\n  const firstCartesian = Cartesian3.normalize(\n    ellipsoid.cartographicToCartesian(start, scratchCart2),\n    scratchCart1,\n  );\n  const lastCartesian = Cartesian3.normalize(\n    ellipsoid.cartographicToCartesian(end, scratchCart2),\n    scratchCart2,\n  );\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"value\",\n    Math.abs(\n      Math.abs(Cartesian3.angleBetween(firstCartesian, lastCartesian)) -\n        Math.PI,\n    ),\n    0.0125,\n  );\n  //>>includeEnd('debug');\n\n  vincentyInverseFormula(\n    ellipsoidGeodesic,\n    ellipsoid.maximumRadius,\n    ellipsoid.minimumRadius,\n    start.longitude,\n    start.latitude,\n    end.longitude,\n    end.latitude,\n  );\n\n  ellipsoidGeodesic._start = Cartographic.clone(\n    start,\n    ellipsoidGeodesic._start,\n  );\n  ellipsoidGeodesic._end = Cartographic.clone(end, ellipsoidGeodesic._end);\n  ellipsoidGeodesic._start.height = 0;\n  ellipsoidGeodesic._end.height = 0;\n\n  setConstants(ellipsoidGeodesic);\n}\n\n/**\n * Initializes a geodesic on the ellipsoid connecting the two provided planetodetic points.\n *\n * @alias EllipsoidGeodesic\n * @constructor\n *\n * @param {Cartographic} [start] The initial planetodetic point on the path.\n * @param {Cartographic} [end] The final planetodetic point on the path.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the geodesic lies.\n */\nfunction EllipsoidGeodesic(start, end, ellipsoid) {\n  const e = ellipsoid ?? Ellipsoid.default;\n  this._ellipsoid = e;\n  this._start = new Cartographic();\n  this._end = new Cartographic();\n\n  this._constants = {};\n  this._startHeading = undefined;\n  this._endHeading = undefined;\n  this._distance = undefined;\n  this._uSquared = undefined;\n\n  if (defined(start) && defined(end)) {\n    computeProperties(this, start, end, e);\n  }\n}\n\nObject.defineProperties(EllipsoidGeodesic.prototype, {\n  /**\n   * Gets the ellipsoid.\n   * @memberof EllipsoidGeodesic.prototype\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the surface distance between the start and end point\n   * @memberof EllipsoidGeodesic.prototype\n   * @type {number}\n   * @readonly\n   */\n  surfaceDistance: {\n    get: function () {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"distance\", this._distance);\n      //>>includeEnd('debug');\n\n      return this._distance;\n    },\n  },\n\n  /**\n   * Gets the initial planetodetic point on the path.\n   * @memberof EllipsoidGeodesic.prototype\n   * @type {Cartographic}\n   * @readonly\n   */\n  start: {\n    get: function () {\n      return this._start;\n    },\n  },\n\n  /**\n   * Gets the final planetodetic point on the path.\n   * @memberof EllipsoidGeodesic.prototype\n   * @type {Cartographic}\n   * @readonly\n   */\n  end: {\n    get: function () {\n      return this._end;\n    },\n  },\n\n  /**\n   * Gets the heading at the initial point.\n   * @memberof EllipsoidGeodesic.prototype\n   * @type {number}\n   * @readonly\n   */\n  startHeading: {\n    get: function () {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"distance\", this._distance);\n      //>>includeEnd('debug');\n\n      return this._startHeading;\n    },\n  },\n\n  /**\n   * Gets the heading at the final point.\n   * @memberof EllipsoidGeodesic.prototype\n   * @type {number}\n   * @readonly\n   */\n  endHeading: {\n    get: function () {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"distance\", this._distance);\n      //>>includeEnd('debug');\n\n      return this._endHeading;\n    },\n  },\n});\n\n/**\n * Sets the start and end points of the geodesic\n *\n * @param {Cartographic} start The initial planetodetic point on the path.\n * @param {Cartographic} end The final planetodetic point on the path.\n */\nEllipsoidGeodesic.prototype.setEndPoints = function (start, end) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"start\", start);\n  Check.defined(\"end\", end);\n  //>>includeEnd('debug');\n\n  computeProperties(this, start, end, this._ellipsoid);\n};\n\n/**\n * Provides the location of a point at the indicated portion along the geodesic.\n *\n * @param {number} fraction The portion of the distance between the initial and final points.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the geodesic.\n */\nEllipsoidGeodesic.prototype.interpolateUsingFraction = function (\n  fraction,\n  result,\n) {\n  return this.interpolateUsingSurfaceDistance(\n    this._distance * fraction,\n    result,\n  );\n};\n\n/**\n * Provides the location of a point at the indicated distance along the geodesic.\n *\n * @param {number} distance The distance from the initial point to the point of interest along the geodesic\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the geodesic.\n *\n * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance\n */\nEllipsoidGeodesic.prototype.interpolateUsingSurfaceDistance = function (\n  distance,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"distance\", this._distance);\n  //>>includeEnd('debug');\n\n  const constants = this._constants;\n\n  const s = constants.distanceRatio + distance / constants.b;\n\n  const cosine2S = Math.cos(2.0 * s);\n  const cosine4S = Math.cos(4.0 * s);\n  const cosine6S = Math.cos(6.0 * s);\n  const sine2S = Math.sin(2.0 * s);\n  const sine4S = Math.sin(4.0 * s);\n  const sine6S = Math.sin(6.0 * s);\n  const sine8S = Math.sin(8.0 * s);\n\n  const s2 = s * s;\n  const s3 = s * s2;\n\n  const u8Over256 = constants.u8Over256;\n  const u2Over4 = constants.u2Over4;\n  const u6Over64 = constants.u6Over64;\n  const u4Over16 = constants.u4Over16;\n  let sigma =\n    (2.0 * s3 * u8Over256 * cosine2S) / 3.0 +\n    s *\n      (1.0 -\n        u2Over4 +\n        (7.0 * u4Over16) / 4.0 -\n        (15.0 * u6Over64) / 4.0 +\n        (579.0 * u8Over256) / 64.0 -\n        (u4Over16 - (15.0 * u6Over64) / 4.0 + (187.0 * u8Over256) / 16.0) *\n          cosine2S -\n        ((5.0 * u6Over64) / 4.0 - (115.0 * u8Over256) / 16.0) * cosine4S -\n        (29.0 * u8Over256 * cosine6S) / 16.0) +\n    (u2Over4 / 2.0 -\n      u4Over16 +\n      (71.0 * u6Over64) / 32.0 -\n      (85.0 * u8Over256) / 16.0) *\n      sine2S +\n    ((5.0 * u4Over16) / 16.0 -\n      (5.0 * u6Over64) / 4.0 +\n      (383.0 * u8Over256) / 96.0) *\n      sine4S -\n    s2 *\n      ((u6Over64 - (11.0 * u8Over256) / 2.0) * sine2S +\n        (5.0 * u8Over256 * sine4S) / 2.0) +\n    ((29.0 * u6Over64) / 96.0 - (29.0 * u8Over256) / 16.0) * sine6S +\n    (539.0 * u8Over256 * sine8S) / 1536.0;\n\n  const theta = Math.asin(Math.sin(sigma) * constants.cosineAlpha);\n  const latitude = Math.atan((constants.a / constants.b) * Math.tan(theta));\n\n  // Redefine in terms of relative argument of latitude.\n  sigma = sigma - constants.sigma;\n\n  const cosineTwiceSigmaMidpoint = Math.cos(2.0 * constants.sigma + sigma);\n\n  const sineSigma = Math.sin(sigma);\n  const cosineSigma = Math.cos(sigma);\n\n  const cc = constants.cosineU * cosineSigma;\n  const ss = constants.sineU * sineSigma;\n\n  const lambda = Math.atan2(\n    sineSigma * constants.sineHeading,\n    cc - ss * constants.cosineHeading,\n  );\n\n  const l =\n    lambda -\n    computeDeltaLambda(\n      constants.f,\n      constants.sineAlpha,\n      constants.cosineSquaredAlpha,\n      sigma,\n      sineSigma,\n      cosineSigma,\n      cosineTwiceSigmaMidpoint,\n    );\n\n  if (defined(result)) {\n    result.longitude = this._start.longitude + l;\n    result.latitude = latitude;\n    result.height = 0.0;\n    return result;\n  }\n\n  return new Cartographic(this._start.longitude + l, latitude, 0.0);\n};\nexport default EllipsoidGeodesic;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst scratchPosition = new Cartesian3();\nconst scratchNormal = new Cartesian3();\nconst scratchTangent = new Cartesian3();\nconst scratchBitangent = new Cartesian3();\nconst scratchNormalST = new Cartesian3();\nconst defaultRadii = new Cartesian3(1.0, 1.0, 1.0);\n\nconst cos = Math.cos;\nconst sin = Math.sin;\n\n/**\n * A description of an ellipsoid centered at the origin.\n *\n * @alias EllipsoidGeometry\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions.\n * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions.\n * @param {number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks.\n * @param {number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} options.slicePartitions cannot be less than three.\n * @exception {DeveloperError} options.stackPartitions cannot be less than three.\n *\n * @see EllipsoidGeometry#createGeometry\n *\n * @example\n * const ellipsoid = new Cesium.EllipsoidGeometry({\n *   vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n *   radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0)\n * });\n * const geometry = Cesium.EllipsoidGeometry.createGeometry(ellipsoid);\n */\nfunction EllipsoidGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const radii = options.radii ?? defaultRadii;\n  const innerRadii = options.innerRadii ?? radii;\n  const minimumClock = options.minimumClock ?? 0.0;\n  const maximumClock = options.maximumClock ?? CesiumMath.TWO_PI;\n  const minimumCone = options.minimumCone ?? 0.0;\n  const maximumCone = options.maximumCone ?? CesiumMath.PI;\n  const stackPartitions = Math.round(options.stackPartitions ?? 64);\n  const slicePartitions = Math.round(options.slicePartitions ?? 64);\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (slicePartitions < 3) {\n    throw new DeveloperError(\n      \"options.slicePartitions cannot be less than three.\",\n    );\n  }\n  if (stackPartitions < 3) {\n    throw new DeveloperError(\n      \"options.stackPartitions cannot be less than three.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._radii = Cartesian3.clone(radii);\n  this._innerRadii = Cartesian3.clone(innerRadii);\n  this._minimumClock = minimumClock;\n  this._maximumClock = maximumClock;\n  this._minimumCone = minimumCone;\n  this._maximumCone = maximumCone;\n  this._stackPartitions = stackPartitions;\n  this._slicePartitions = slicePartitions;\n  this._vertexFormat = VertexFormat.clone(vertexFormat);\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createEllipsoidGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nEllipsoidGeometry.packedLength =\n  2 * Cartesian3.packedLength + VertexFormat.packedLength + 7;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipsoidGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nEllipsoidGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value._radii, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n\n  Cartesian3.pack(value._innerRadii, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._minimumClock;\n  array[startingIndex++] = value._maximumClock;\n  array[startingIndex++] = value._minimumCone;\n  array[startingIndex++] = value._maximumCone;\n  array[startingIndex++] = value._stackPartitions;\n  array[startingIndex++] = value._slicePartitions;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchRadii = new Cartesian3();\nconst scratchInnerRadii = new Cartesian3();\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  radii: scratchRadii,\n  innerRadii: scratchInnerRadii,\n  vertexFormat: scratchVertexFormat,\n  minimumClock: undefined,\n  maximumClock: undefined,\n  minimumCone: undefined,\n  maximumCone: undefined,\n  stackPartitions: undefined,\n  slicePartitions: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipsoidGeometry} [result] The object into which to store the result.\n * @returns {EllipsoidGeometry} The modified result parameter or a new EllipsoidGeometry instance if one was not provided.\n */\nEllipsoidGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const radii = Cartesian3.unpack(array, startingIndex, scratchRadii);\n  startingIndex += Cartesian3.packedLength;\n\n  const innerRadii = Cartesian3.unpack(array, startingIndex, scratchInnerRadii);\n  startingIndex += Cartesian3.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const minimumClock = array[startingIndex++];\n  const maximumClock = array[startingIndex++];\n  const minimumCone = array[startingIndex++];\n  const maximumCone = array[startingIndex++];\n  const stackPartitions = array[startingIndex++];\n  const slicePartitions = array[startingIndex++];\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.minimumClock = minimumClock;\n    scratchOptions.maximumClock = maximumClock;\n    scratchOptions.minimumCone = minimumCone;\n    scratchOptions.maximumCone = maximumCone;\n    scratchOptions.stackPartitions = stackPartitions;\n    scratchOptions.slicePartitions = slicePartitions;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n    return new EllipsoidGeometry(scratchOptions);\n  }\n\n  result._radii = Cartesian3.clone(radii, result._radii);\n  result._innerRadii = Cartesian3.clone(innerRadii, result._innerRadii);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._minimumClock = minimumClock;\n  result._maximumClock = maximumClock;\n  result._minimumCone = minimumCone;\n  result._maximumCone = maximumCone;\n  result._stackPartitions = stackPartitions;\n  result._slicePartitions = slicePartitions;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipsoidGeometry} ellipsoidGeometry A description of the ellipsoid.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipsoidGeometry.createGeometry = function (ellipsoidGeometry) {\n  const radii = ellipsoidGeometry._radii;\n  if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) {\n    return;\n  }\n\n  const innerRadii = ellipsoidGeometry._innerRadii;\n  if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) {\n    return;\n  }\n\n  const minimumClock = ellipsoidGeometry._minimumClock;\n  const maximumClock = ellipsoidGeometry._maximumClock;\n  const minimumCone = ellipsoidGeometry._minimumCone;\n  const maximumCone = ellipsoidGeometry._maximumCone;\n  const vertexFormat = ellipsoidGeometry._vertexFormat;\n\n  // Add an extra slice and stack so that the number of partitions is the\n  // number of surfaces rather than the number of joints\n  let slicePartitions = ellipsoidGeometry._slicePartitions + 1;\n  let stackPartitions = ellipsoidGeometry._stackPartitions + 1;\n\n  slicePartitions = Math.round(\n    (slicePartitions * Math.abs(maximumClock - minimumClock)) /\n      CesiumMath.TWO_PI,\n  );\n  stackPartitions = Math.round(\n    (stackPartitions * Math.abs(maximumCone - minimumCone)) / CesiumMath.PI,\n  );\n\n  if (slicePartitions < 2) {\n    slicePartitions = 2;\n  }\n  if (stackPartitions < 2) {\n    stackPartitions = 2;\n  }\n\n  let i;\n  let j;\n  let index = 0;\n\n  // Create arrays for theta and phi. Duplicate first and last angle to\n  // allow different normals at the intersections.\n  const phis = [minimumCone];\n  const thetas = [minimumClock];\n  for (i = 0; i < stackPartitions; i++) {\n    phis.push(\n      minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1),\n    );\n  }\n  phis.push(maximumCone);\n  for (j = 0; j < slicePartitions; j++) {\n    thetas.push(\n      minimumClock +\n        (j * (maximumClock - minimumClock)) / (slicePartitions - 1),\n    );\n  }\n  thetas.push(maximumClock);\n  const numPhis = phis.length;\n  const numThetas = thetas.length;\n\n  // Allow for extra indices if there is an inner surface and if we need\n  // to close the sides if the clock range is not a full circle\n  let extraIndices = 0;\n  let vertexMultiplier = 1.0;\n  const hasInnerSurface =\n    innerRadii.x !== radii.x ||\n    innerRadii.y !== radii.y ||\n    innerRadii.z !== radii.z;\n  let isTopOpen = false;\n  let isBotOpen = false;\n  let isClockOpen = false;\n  if (hasInnerSurface) {\n    vertexMultiplier = 2.0;\n    if (minimumCone > 0.0) {\n      isTopOpen = true;\n      extraIndices += slicePartitions - 1;\n    }\n    if (maximumCone < Math.PI) {\n      isBotOpen = true;\n      extraIndices += slicePartitions - 1;\n    }\n    if ((maximumClock - minimumClock) % CesiumMath.TWO_PI) {\n      isClockOpen = true;\n      extraIndices += (stackPartitions - 1) * 2 + 1;\n    } else {\n      extraIndices += 1;\n    }\n  }\n\n  const vertexCount = numThetas * numPhis * vertexMultiplier;\n  const positions = new Float64Array(vertexCount * 3);\n  const isInner = new Array(vertexCount).fill(false);\n  const negateNormal = new Array(vertexCount).fill(false);\n\n  // Multiply by 6 because there are two triangles per sector\n  const indexCount = slicePartitions * stackPartitions * vertexMultiplier;\n  const numIndices =\n    6 *\n    (indexCount +\n      extraIndices +\n      1 -\n      (slicePartitions + stackPartitions) * vertexMultiplier);\n  const indices = IndexDatatype.createTypedArray(indexCount, numIndices);\n\n  const normals = vertexFormat.normal\n    ? new Float32Array(vertexCount * 3)\n    : undefined;\n  const tangents = vertexFormat.tangent\n    ? new Float32Array(vertexCount * 3)\n    : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(vertexCount * 3)\n    : undefined;\n  const st = vertexFormat.st ? new Float32Array(vertexCount * 2) : undefined;\n\n  // Calculate sin/cos phi\n  const sinPhi = new Array(numPhis);\n  const cosPhi = new Array(numPhis);\n  for (i = 0; i < numPhis; i++) {\n    sinPhi[i] = sin(phis[i]);\n    cosPhi[i] = cos(phis[i]);\n  }\n\n  // Calculate sin/cos theta\n  const sinTheta = new Array(numThetas);\n  const cosTheta = new Array(numThetas);\n  for (j = 0; j < numThetas; j++) {\n    cosTheta[j] = cos(thetas[j]);\n    sinTheta[j] = sin(thetas[j]);\n  }\n\n  // Create outer surface\n  for (i = 0; i < numPhis; i++) {\n    for (j = 0; j < numThetas; j++) {\n      positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\n      positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\n      positions[index++] = radii.z * cosPhi[i];\n    }\n  }\n\n  // Create inner surface\n  let vertexIndex = vertexCount / 2.0;\n  if (hasInnerSurface) {\n    for (i = 0; i < numPhis; i++) {\n      for (j = 0; j < numThetas; j++) {\n        positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\n        positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\n        positions[index++] = innerRadii.z * cosPhi[i];\n\n        // Keep track of which vertices are the inner and which ones\n        // need the normal to be negated\n        isInner[vertexIndex] = true;\n        if (i > 0 && i !== numPhis - 1 && j !== 0 && j !== numThetas - 1) {\n          negateNormal[vertexIndex] = true;\n        }\n        vertexIndex++;\n      }\n    }\n  }\n\n  // Create indices for outer surface\n  index = 0;\n  let topOffset;\n  let bottomOffset;\n  for (i = 1; i < numPhis - 2; i++) {\n    topOffset = i * numThetas;\n    bottomOffset = (i + 1) * numThetas;\n\n    for (j = 1; j < numThetas - 2; j++) {\n      indices[index++] = bottomOffset + j;\n      indices[index++] = bottomOffset + j + 1;\n      indices[index++] = topOffset + j + 1;\n\n      indices[index++] = bottomOffset + j;\n      indices[index++] = topOffset + j + 1;\n      indices[index++] = topOffset + j;\n    }\n  }\n\n  // Create indices for inner surface\n  if (hasInnerSurface) {\n    const offset = numPhis * numThetas;\n    for (i = 1; i < numPhis - 2; i++) {\n      topOffset = offset + i * numThetas;\n      bottomOffset = offset + (i + 1) * numThetas;\n\n      for (j = 1; j < numThetas - 2; j++) {\n        indices[index++] = bottomOffset + j;\n        indices[index++] = topOffset + j;\n        indices[index++] = topOffset + j + 1;\n\n        indices[index++] = bottomOffset + j;\n        indices[index++] = topOffset + j + 1;\n        indices[index++] = bottomOffset + j + 1;\n      }\n    }\n  }\n\n  let outerOffset;\n  let innerOffset;\n  if (hasInnerSurface) {\n    if (isTopOpen) {\n      // Connect the top of the inner surface to the top of the outer surface\n      innerOffset = numPhis * numThetas;\n      for (i = 1; i < numThetas - 2; i++) {\n        indices[index++] = i;\n        indices[index++] = i + 1;\n        indices[index++] = innerOffset + i + 1;\n\n        indices[index++] = i;\n        indices[index++] = innerOffset + i + 1;\n        indices[index++] = innerOffset + i;\n      }\n    }\n\n    if (isBotOpen) {\n      // Connect the bottom of the inner surface to the bottom of the outer surface\n      outerOffset = numPhis * numThetas - numThetas;\n      innerOffset = numPhis * numThetas * vertexMultiplier - numThetas;\n      for (i = 1; i < numThetas - 2; i++) {\n        indices[index++] = outerOffset + i + 1;\n        indices[index++] = outerOffset + i;\n        indices[index++] = innerOffset + i;\n\n        indices[index++] = outerOffset + i + 1;\n        indices[index++] = innerOffset + i;\n        indices[index++] = innerOffset + i + 1;\n      }\n    }\n  }\n\n  // Connect the edges if clock is not closed\n  if (isClockOpen) {\n    for (i = 1; i < numPhis - 2; i++) {\n      innerOffset = numThetas * numPhis + numThetas * i;\n      outerOffset = numThetas * i;\n      indices[index++] = innerOffset;\n      indices[index++] = outerOffset + numThetas;\n      indices[index++] = outerOffset;\n\n      indices[index++] = innerOffset;\n      indices[index++] = innerOffset + numThetas;\n      indices[index++] = outerOffset + numThetas;\n    }\n\n    for (i = 1; i < numPhis - 2; i++) {\n      innerOffset = numThetas * numPhis + numThetas * (i + 1) - 1;\n      outerOffset = numThetas * (i + 1) - 1;\n      indices[index++] = outerOffset + numThetas;\n      indices[index++] = innerOffset;\n      indices[index++] = outerOffset;\n\n      indices[index++] = outerOffset + numThetas;\n      indices[index++] = innerOffset + numThetas;\n      indices[index++] = innerOffset;\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n\n  if (vertexFormat.position) {\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    });\n  }\n\n  let stIndex = 0;\n  let normalIndex = 0;\n  let tangentIndex = 0;\n  let bitangentIndex = 0;\n  const vertexCountHalf = vertexCount / 2.0;\n\n  let ellipsoid;\n  const ellipsoidOuter = Ellipsoid.fromCartesian3(radii);\n  const ellipsoidInner = Ellipsoid.fromCartesian3(innerRadii);\n\n  if (\n    vertexFormat.st ||\n    vertexFormat.normal ||\n    vertexFormat.tangent ||\n    vertexFormat.bitangent\n  ) {\n    for (i = 0; i < vertexCount; i++) {\n      ellipsoid = isInner[i] ? ellipsoidInner : ellipsoidOuter;\n      const position = Cartesian3.fromArray(positions, i * 3, scratchPosition);\n      const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal);\n      if (negateNormal[i]) {\n        Cartesian3.negate(normal, normal);\n      }\n\n      if (vertexFormat.st) {\n        const normalST = Cartesian2.negate(normal, scratchNormalST);\n        st[stIndex++] =\n          Math.atan2(normalST.y, normalST.x) / CesiumMath.TWO_PI + 0.5;\n        st[stIndex++] = Math.asin(normal.z) / Math.PI + 0.5;\n      }\n\n      if (vertexFormat.normal) {\n        normals[normalIndex++] = normal.x;\n        normals[normalIndex++] = normal.y;\n        normals[normalIndex++] = normal.z;\n      }\n\n      if (vertexFormat.tangent || vertexFormat.bitangent) {\n        const tangent = scratchTangent;\n\n        // Use UNIT_X for the poles\n        let tangetOffset = 0;\n        let unit;\n        if (isInner[i]) {\n          tangetOffset = vertexCountHalf;\n        }\n        if (\n          !isTopOpen &&\n          i >= tangetOffset &&\n          i < tangetOffset + numThetas * 2\n        ) {\n          unit = Cartesian3.UNIT_X;\n        } else {\n          unit = Cartesian3.UNIT_Z;\n        }\n        Cartesian3.cross(unit, normal, tangent);\n        Cartesian3.normalize(tangent, tangent);\n\n        if (vertexFormat.tangent) {\n          tangents[tangentIndex++] = tangent.x;\n          tangents[tangentIndex++] = tangent.y;\n          tangents[tangentIndex++] = tangent.z;\n        }\n\n        if (vertexFormat.bitangent) {\n          const bitangent = Cartesian3.cross(normal, tangent, scratchBitangent);\n          Cartesian3.normalize(bitangent, bitangent);\n\n          bitangents[bitangentIndex++] = bitangent.x;\n          bitangents[bitangentIndex++] = bitangent.y;\n          bitangents[bitangentIndex++] = bitangent.z;\n        }\n      }\n    }\n\n    if (vertexFormat.st) {\n      attributes.st = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 2,\n        values: st,\n      });\n    }\n\n    if (vertexFormat.normal) {\n      attributes.normal = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: normals,\n      });\n    }\n\n    if (vertexFormat.tangent) {\n      attributes.tangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: tangents,\n      });\n    }\n\n    if (vertexFormat.bitangent) {\n      attributes.bitangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: bitangents,\n      });\n    }\n  }\n\n  if (defined(ellipsoidGeometry._offsetAttribute)) {\n    const length = positions.length;\n    const offsetValue =\n      ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n        ? 0\n        : 1;\n    const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: BoundingSphere.fromEllipsoid(ellipsoidOuter),\n    offsetAttribute: ellipsoidGeometry._offsetAttribute,\n  });\n};\n\nlet unitEllipsoidGeometry;\n\n/**\n * Returns the geometric representation of a unit ellipsoid, including its vertices, indices, and a bounding sphere.\n * @returns {Geometry} The computed vertices and indices.\n *\n * @private\n */\nEllipsoidGeometry.getUnitEllipsoid = function () {\n  if (!defined(unitEllipsoidGeometry)) {\n    unitEllipsoidGeometry = EllipsoidGeometry.createGeometry(\n      new EllipsoidGeometry({\n        radii: new Cartesian3(1.0, 1.0, 1.0),\n        vertexFormat: VertexFormat.POSITION_ONLY,\n      }),\n    );\n  }\n  return unitEllipsoidGeometry;\n};\nexport default EllipsoidGeometry;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nconst defaultRadii = new Cartesian3(1.0, 1.0, 1.0);\nconst cos = Math.cos;\nconst sin = Math.sin;\n\n/**\n * A description of the outline of an ellipsoid centered at the origin.\n *\n * @alias EllipsoidOutlineGeometry\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions.\n * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions.\n * @param {number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis.\n * @param {number} [options.stackPartitions=10] The count of stacks for the ellipsoid (1 greater than the number of parallel lines).\n * @param {number} [options.slicePartitions=8] The count of slices for the ellipsoid (Equal to the number of radial lines).\n * @param {number} [options.subdivisions=128] The number of points per line, determining the granularity of the curvature.\n *\n * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one.\n * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero.\n * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero.\n *\n * @example\n * const ellipsoid = new Cesium.EllipsoidOutlineGeometry({\n *   radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0),\n *   stackPartitions: 6,\n *   slicePartitions: 5\n * });\n * const geometry = Cesium.EllipsoidOutlineGeometry.createGeometry(ellipsoid);\n */\nfunction EllipsoidOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const radii = options.radii ?? defaultRadii;\n  const innerRadii = options.innerRadii ?? radii;\n  const minimumClock = options.minimumClock ?? 0.0;\n  const maximumClock = options.maximumClock ?? CesiumMath.TWO_PI;\n  const minimumCone = options.minimumCone ?? 0.0;\n  const maximumCone = options.maximumCone ?? CesiumMath.PI;\n  const stackPartitions = Math.round(options.stackPartitions ?? 10);\n  const slicePartitions = Math.round(options.slicePartitions ?? 8);\n  const subdivisions = Math.round(options.subdivisions ?? 128);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (stackPartitions < 1) {\n    throw new DeveloperError(\"options.stackPartitions cannot be less than 1\");\n  }\n  if (slicePartitions < 0) {\n    throw new DeveloperError(\"options.slicePartitions cannot be less than 0\");\n  }\n  if (subdivisions < 0) {\n    throw new DeveloperError(\n      \"options.subdivisions must be greater than or equal to zero.\",\n    );\n  }\n  if (\n    defined(options.offsetAttribute) &&\n    options.offsetAttribute === GeometryOffsetAttribute.TOP\n  ) {\n    throw new DeveloperError(\n      \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._radii = Cartesian3.clone(radii);\n  this._innerRadii = Cartesian3.clone(innerRadii);\n  this._minimumClock = minimumClock;\n  this._maximumClock = maximumClock;\n  this._minimumCone = minimumCone;\n  this._maximumCone = maximumCone;\n  this._stackPartitions = stackPartitions;\n  this._slicePartitions = slicePartitions;\n  this._subdivisions = subdivisions;\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createEllipsoidOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nEllipsoidOutlineGeometry.packedLength = 2 * Cartesian3.packedLength + 8;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {EllipsoidOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nEllipsoidOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value._radii, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n\n  Cartesian3.pack(value._innerRadii, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n\n  array[startingIndex++] = value._minimumClock;\n  array[startingIndex++] = value._maximumClock;\n  array[startingIndex++] = value._minimumCone;\n  array[startingIndex++] = value._maximumCone;\n  array[startingIndex++] = value._stackPartitions;\n  array[startingIndex++] = value._slicePartitions;\n  array[startingIndex++] = value._subdivisions;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchRadii = new Cartesian3();\nconst scratchInnerRadii = new Cartesian3();\nconst scratchOptions = {\n  radii: scratchRadii,\n  innerRadii: scratchInnerRadii,\n  minimumClock: undefined,\n  maximumClock: undefined,\n  minimumCone: undefined,\n  maximumCone: undefined,\n  stackPartitions: undefined,\n  slicePartitions: undefined,\n  subdivisions: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {EllipsoidOutlineGeometry} [result] The object into which to store the result.\n * @returns {EllipsoidOutlineGeometry} The modified result parameter or a new EllipsoidOutlineGeometry instance if one was not provided.\n */\nEllipsoidOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const radii = Cartesian3.unpack(array, startingIndex, scratchRadii);\n  startingIndex += Cartesian3.packedLength;\n\n  const innerRadii = Cartesian3.unpack(array, startingIndex, scratchInnerRadii);\n  startingIndex += Cartesian3.packedLength;\n\n  const minimumClock = array[startingIndex++];\n  const maximumClock = array[startingIndex++];\n  const minimumCone = array[startingIndex++];\n  const maximumCone = array[startingIndex++];\n  const stackPartitions = array[startingIndex++];\n  const slicePartitions = array[startingIndex++];\n  const subdivisions = array[startingIndex++];\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.minimumClock = minimumClock;\n    scratchOptions.maximumClock = maximumClock;\n    scratchOptions.minimumCone = minimumCone;\n    scratchOptions.maximumCone = maximumCone;\n    scratchOptions.stackPartitions = stackPartitions;\n    scratchOptions.slicePartitions = slicePartitions;\n    scratchOptions.subdivisions = subdivisions;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n    return new EllipsoidOutlineGeometry(scratchOptions);\n  }\n\n  result._radii = Cartesian3.clone(radii, result._radii);\n  result._innerRadii = Cartesian3.clone(innerRadii, result._innerRadii);\n  result._minimumClock = minimumClock;\n  result._maximumClock = maximumClock;\n  result._minimumCone = minimumCone;\n  result._maximumCone = maximumCone;\n  result._stackPartitions = stackPartitions;\n  result._slicePartitions = slicePartitions;\n  result._subdivisions = subdivisions;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of an outline of an ellipsoid, including its vertices, indices, and a bounding sphere.\n *\n * @param {EllipsoidOutlineGeometry} ellipsoidGeometry A description of the ellipsoid outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nEllipsoidOutlineGeometry.createGeometry = function (ellipsoidGeometry) {\n  const radii = ellipsoidGeometry._radii;\n  if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) {\n    return;\n  }\n\n  const innerRadii = ellipsoidGeometry._innerRadii;\n  if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) {\n    return;\n  }\n\n  const minimumClock = ellipsoidGeometry._minimumClock;\n  const maximumClock = ellipsoidGeometry._maximumClock;\n  const minimumCone = ellipsoidGeometry._minimumCone;\n  const maximumCone = ellipsoidGeometry._maximumCone;\n  const subdivisions = ellipsoidGeometry._subdivisions;\n  const ellipsoid = Ellipsoid.fromCartesian3(radii);\n\n  // Add an extra slice and stack to remain consistent with EllipsoidGeometry\n  let slicePartitions = ellipsoidGeometry._slicePartitions + 1;\n  let stackPartitions = ellipsoidGeometry._stackPartitions + 1;\n\n  slicePartitions = Math.round(\n    (slicePartitions * Math.abs(maximumClock - minimumClock)) /\n      CesiumMath.TWO_PI,\n  );\n  stackPartitions = Math.round(\n    (stackPartitions * Math.abs(maximumCone - minimumCone)) / CesiumMath.PI,\n  );\n\n  if (slicePartitions < 2) {\n    slicePartitions = 2;\n  }\n  if (stackPartitions < 2) {\n    stackPartitions = 2;\n  }\n\n  let extraIndices = 0;\n  let vertexMultiplier = 1.0;\n  const hasInnerSurface =\n    innerRadii.x !== radii.x ||\n    innerRadii.y !== radii.y ||\n    innerRadii.z !== radii.z;\n  let isTopOpen = false;\n  let isBotOpen = false;\n  if (hasInnerSurface) {\n    vertexMultiplier = 2.0;\n    // Add 2x slicePartitions to connect the top/bottom of the outer to\n    // the top/bottom of the inner\n    if (minimumCone > 0.0) {\n      isTopOpen = true;\n      extraIndices += slicePartitions;\n    }\n    if (maximumCone < Math.PI) {\n      isBotOpen = true;\n      extraIndices += slicePartitions;\n    }\n  }\n\n  const vertexCount =\n    subdivisions * vertexMultiplier * (stackPartitions + slicePartitions);\n  const positions = new Float64Array(vertexCount * 3);\n\n  // Multiply by two because two points define each line segment\n  const numIndices =\n    2 *\n    (vertexCount +\n      extraIndices -\n      (slicePartitions + stackPartitions) * vertexMultiplier);\n  const indices = IndexDatatype.createTypedArray(vertexCount, numIndices);\n\n  let i;\n  let j;\n  let theta;\n  let phi;\n  let index = 0;\n\n  // Calculate sin/cos phi\n  const sinPhi = new Array(stackPartitions);\n  const cosPhi = new Array(stackPartitions);\n  for (i = 0; i < stackPartitions; i++) {\n    phi =\n      minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1);\n    sinPhi[i] = sin(phi);\n    cosPhi[i] = cos(phi);\n  }\n\n  // Calculate sin/cos theta\n  const sinTheta = new Array(subdivisions);\n  const cosTheta = new Array(subdivisions);\n  for (i = 0; i < subdivisions; i++) {\n    theta =\n      minimumClock + (i * (maximumClock - minimumClock)) / (subdivisions - 1);\n    sinTheta[i] = sin(theta);\n    cosTheta[i] = cos(theta);\n  }\n\n  // Calculate the latitude lines on the outer surface\n  for (i = 0; i < stackPartitions; i++) {\n    for (j = 0; j < subdivisions; j++) {\n      positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\n      positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\n      positions[index++] = radii.z * cosPhi[i];\n    }\n  }\n\n  // Calculate the latitude lines on the inner surface\n  if (hasInnerSurface) {\n    for (i = 0; i < stackPartitions; i++) {\n      for (j = 0; j < subdivisions; j++) {\n        positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\n        positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\n        positions[index++] = innerRadii.z * cosPhi[i];\n      }\n    }\n  }\n\n  // Calculate sin/cos phi\n  sinPhi.length = subdivisions;\n  cosPhi.length = subdivisions;\n  for (i = 0; i < subdivisions; i++) {\n    phi = minimumCone + (i * (maximumCone - minimumCone)) / (subdivisions - 1);\n    sinPhi[i] = sin(phi);\n    cosPhi[i] = cos(phi);\n  }\n\n  // Calculate sin/cos theta for each slice partition\n  sinTheta.length = slicePartitions;\n  cosTheta.length = slicePartitions;\n  for (i = 0; i < slicePartitions; i++) {\n    theta =\n      minimumClock +\n      (i * (maximumClock - minimumClock)) / (slicePartitions - 1);\n    sinTheta[i] = sin(theta);\n    cosTheta[i] = cos(theta);\n  }\n\n  // Calculate the longitude lines on the outer surface\n  for (i = 0; i < subdivisions; i++) {\n    for (j = 0; j < slicePartitions; j++) {\n      positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\n      positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\n      positions[index++] = radii.z * cosPhi[i];\n    }\n  }\n\n  // Calculate the longitude lines on the inner surface\n  if (hasInnerSurface) {\n    for (i = 0; i < subdivisions; i++) {\n      for (j = 0; j < slicePartitions; j++) {\n        positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\n        positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\n        positions[index++] = innerRadii.z * cosPhi[i];\n      }\n    }\n  }\n\n  // Create indices for the latitude lines\n  index = 0;\n  for (i = 0; i < stackPartitions * vertexMultiplier; i++) {\n    const topOffset = i * subdivisions;\n    for (j = 0; j < subdivisions - 1; j++) {\n      indices[index++] = topOffset + j;\n      indices[index++] = topOffset + j + 1;\n    }\n  }\n\n  // Create indices for the outer longitude lines\n  let offset = stackPartitions * subdivisions * vertexMultiplier;\n  for (i = 0; i < slicePartitions; i++) {\n    for (j = 0; j < subdivisions - 1; j++) {\n      indices[index++] = offset + i + j * slicePartitions;\n      indices[index++] = offset + i + (j + 1) * slicePartitions;\n    }\n  }\n\n  // Create indices for the inner longitude lines\n  if (hasInnerSurface) {\n    offset =\n      stackPartitions * subdivisions * vertexMultiplier +\n      slicePartitions * subdivisions;\n    for (i = 0; i < slicePartitions; i++) {\n      for (j = 0; j < subdivisions - 1; j++) {\n        indices[index++] = offset + i + j * slicePartitions;\n        indices[index++] = offset + i + (j + 1) * slicePartitions;\n      }\n    }\n  }\n\n  if (hasInnerSurface) {\n    let outerOffset = stackPartitions * subdivisions * vertexMultiplier;\n    let innerOffset = outerOffset + subdivisions * slicePartitions;\n    if (isTopOpen) {\n      // Draw lines from the top of the inner surface to the top of the outer surface\n      for (i = 0; i < slicePartitions; i++) {\n        indices[index++] = outerOffset + i;\n        indices[index++] = innerOffset + i;\n      }\n    }\n\n    if (isBotOpen) {\n      // Draw lines from the top of the inner surface to the top of the outer surface\n      outerOffset += subdivisions * slicePartitions - slicePartitions;\n      innerOffset += subdivisions * slicePartitions - slicePartitions;\n      for (i = 0; i < slicePartitions; i++) {\n        indices[index++] = outerOffset + i;\n        indices[index++] = innerOffset + i;\n      }\n    }\n  }\n\n  const attributes = new GeometryAttributes({\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    }),\n  });\n\n  if (defined(ellipsoidGeometry._offsetAttribute)) {\n    const length = positions.length;\n    const offsetValue =\n      ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n        ? 0\n        : 1;\n    const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n    attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: applyOffset,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: BoundingSphere.fromEllipsoid(ellipsoid),\n    offsetAttribute: ellipsoidGeometry._offsetAttribute,\n  });\n};\nexport default EllipsoidOutlineGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\n\nfunction calculateM(ellipticity, major, latitude) {\n  if (ellipticity === 0.0) {\n    // sphere\n    return major * latitude;\n  }\n\n  const e2 = ellipticity * ellipticity;\n  const e4 = e2 * e2;\n  const e6 = e4 * e2;\n  const e8 = e6 * e2;\n  const e10 = e8 * e2;\n  const e12 = e10 * e2;\n  const phi = latitude;\n  const sin2Phi = Math.sin(2 * phi);\n  const sin4Phi = Math.sin(4 * phi);\n  const sin6Phi = Math.sin(6 * phi);\n  const sin8Phi = Math.sin(8 * phi);\n  const sin10Phi = Math.sin(10 * phi);\n  const sin12Phi = Math.sin(12 * phi);\n\n  return (\n    major *\n    ((1 -\n      e2 / 4 -\n      (3 * e4) / 64 -\n      (5 * e6) / 256 -\n      (175 * e8) / 16384 -\n      (441 * e10) / 65536 -\n      (4851 * e12) / 1048576) *\n      phi -\n      ((3 * e2) / 8 +\n        (3 * e4) / 32 +\n        (45 * e6) / 1024 +\n        (105 * e8) / 4096 +\n        (2205 * e10) / 131072 +\n        (6237 * e12) / 524288) *\n        sin2Phi +\n      ((15 * e4) / 256 +\n        (45 * e6) / 1024 +\n        (525 * e8) / 16384 +\n        (1575 * e10) / 65536 +\n        (155925 * e12) / 8388608) *\n        sin4Phi -\n      ((35 * e6) / 3072 +\n        (175 * e8) / 12288 +\n        (3675 * e10) / 262144 +\n        (13475 * e12) / 1048576) *\n        sin6Phi +\n      ((315 * e8) / 131072 + (2205 * e10) / 524288 + (43659 * e12) / 8388608) *\n        sin8Phi -\n      ((693 * e10) / 1310720 + (6237 * e12) / 5242880) * sin10Phi +\n      ((1001 * e12) / 8388608) * sin12Phi)\n  );\n}\n\nfunction calculateInverseM(M, ellipticity, major) {\n  const d = M / major;\n\n  if (ellipticity === 0.0) {\n    // sphere\n    return d;\n  }\n\n  const d2 = d * d;\n  const d3 = d2 * d;\n  const d4 = d3 * d;\n  const e = ellipticity;\n  const e2 = e * e;\n  const e4 = e2 * e2;\n  const e6 = e4 * e2;\n  const e8 = e6 * e2;\n  const e10 = e8 * e2;\n  const e12 = e10 * e2;\n  const sin2D = Math.sin(2 * d);\n  const cos2D = Math.cos(2 * d);\n  const sin4D = Math.sin(4 * d);\n  const cos4D = Math.cos(4 * d);\n  const sin6D = Math.sin(6 * d);\n  const cos6D = Math.cos(6 * d);\n  const sin8D = Math.sin(8 * d);\n  const cos8D = Math.cos(8 * d);\n  const sin10D = Math.sin(10 * d);\n  const cos10D = Math.cos(10 * d);\n  const sin12D = Math.sin(12 * d);\n\n  return (\n    d +\n    (d * e2) / 4 +\n    (7 * d * e4) / 64 +\n    (15 * d * e6) / 256 +\n    (579 * d * e8) / 16384 +\n    (1515 * d * e10) / 65536 +\n    (16837 * d * e12) / 1048576 +\n    ((3 * d * e4) / 16 +\n      (45 * d * e6) / 256 -\n      (d * (32 * d2 - 561) * e8) / 4096 -\n      (d * (232 * d2 - 1677) * e10) / 16384 +\n      (d * (399985 - 90560 * d2 + 512 * d4) * e12) / 5242880) *\n      cos2D +\n    ((21 * d * e6) / 256 +\n      (483 * d * e8) / 4096 -\n      (d * (224 * d2 - 1969) * e10) / 16384 -\n      (d * (33152 * d2 - 112599) * e12) / 1048576) *\n      cos4D +\n    ((151 * d * e8) / 4096 +\n      (4681 * d * e10) / 65536 +\n      (1479 * d * e12) / 16384 -\n      (453 * d3 * e12) / 32768) *\n      cos6D +\n    ((1097 * d * e10) / 65536 + (42783 * d * e12) / 1048576) * cos8D +\n    ((8011 * d * e12) / 1048576) * cos10D +\n    ((3 * e2) / 8 +\n      (3 * e4) / 16 +\n      (213 * e6) / 2048 -\n      (3 * d2 * e6) / 64 +\n      (255 * e8) / 4096 -\n      (33 * d2 * e8) / 512 +\n      (20861 * e10) / 524288 -\n      (33 * d2 * e10) / 512 +\n      (d4 * e10) / 1024 +\n      (28273 * e12) / 1048576 -\n      (471 * d2 * e12) / 8192 +\n      (9 * d4 * e12) / 4096) *\n      sin2D +\n    ((21 * e4) / 256 +\n      (21 * e6) / 256 +\n      (533 * e8) / 8192 -\n      (21 * d2 * e8) / 512 +\n      (197 * e10) / 4096 -\n      (315 * d2 * e10) / 4096 +\n      (584039 * e12) / 16777216 -\n      (12517 * d2 * e12) / 131072 +\n      (7 * d4 * e12) / 2048) *\n      sin4D +\n    ((151 * e6) / 6144 +\n      (151 * e8) / 4096 +\n      (5019 * e10) / 131072 -\n      (453 * d2 * e10) / 16384 +\n      (26965 * e12) / 786432 -\n      (8607 * d2 * e12) / 131072) *\n      sin6D +\n    ((1097 * e8) / 131072 +\n      (1097 * e10) / 65536 +\n      (225797 * e12) / 10485760 -\n      (1097 * d2 * e12) / 65536) *\n      sin8D +\n    ((8011 * e10) / 2621440 + (8011 * e12) / 1048576) * sin10D +\n    ((293393 * e12) / 251658240) * sin12D\n  );\n}\n\nfunction calculateSigma(ellipticity, latitude) {\n  if (ellipticity === 0.0) {\n    // sphere\n    return Math.log(Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + latitude)));\n  }\n\n  const eSinL = ellipticity * Math.sin(latitude);\n  return (\n    Math.log(Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + latitude))) -\n    (ellipticity / 2.0) * Math.log((1 + eSinL) / (1 - eSinL))\n  );\n}\n\nfunction calculateHeading(\n  ellipsoidRhumbLine,\n  firstLongitude,\n  firstLatitude,\n  secondLongitude,\n  secondLatitude,\n) {\n  const sigma1 = calculateSigma(ellipsoidRhumbLine._ellipticity, firstLatitude);\n  const sigma2 = calculateSigma(\n    ellipsoidRhumbLine._ellipticity,\n    secondLatitude,\n  );\n  return Math.atan2(\n    CesiumMath.negativePiToPi(secondLongitude - firstLongitude),\n    sigma2 - sigma1,\n  );\n}\n\nfunction calculateArcLength(\n  ellipsoidRhumbLine,\n  major,\n  minor,\n  firstLongitude,\n  firstLatitude,\n  secondLongitude,\n  secondLatitude,\n) {\n  const heading = ellipsoidRhumbLine._heading;\n  const deltaLongitude = secondLongitude - firstLongitude;\n\n  let distance = 0.0;\n\n  //Check to see if the rhumb line has constant latitude\n  //This equation will diverge if heading gets close to 90 degrees\n  if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(heading),\n      CesiumMath.PI_OVER_TWO,\n      CesiumMath.EPSILON8,\n    )\n  ) {\n    //If heading is close to 90 degrees\n    if (major === minor) {\n      distance =\n        major *\n        Math.cos(firstLatitude) *\n        CesiumMath.negativePiToPi(deltaLongitude);\n    } else {\n      const sinPhi = Math.sin(firstLatitude);\n      distance =\n        (major *\n          Math.cos(firstLatitude) *\n          CesiumMath.negativePiToPi(deltaLongitude)) /\n        Math.sqrt(1 - ellipsoidRhumbLine._ellipticitySquared * sinPhi * sinPhi);\n    }\n  } else {\n    const M1 = calculateM(\n      ellipsoidRhumbLine._ellipticity,\n      major,\n      firstLatitude,\n    );\n    const M2 = calculateM(\n      ellipsoidRhumbLine._ellipticity,\n      major,\n      secondLatitude,\n    );\n\n    distance = (M2 - M1) / Math.cos(heading);\n  }\n  return Math.abs(distance);\n}\n\nconst scratchCart1 = new Cartesian3();\nconst scratchCart2 = new Cartesian3();\n\nfunction computeProperties(ellipsoidRhumbLine, start, end, ellipsoid) {\n  const firstCartesian = Cartesian3.normalize(\n    ellipsoid.cartographicToCartesian(start, scratchCart2),\n    scratchCart1,\n  );\n  const lastCartesian = Cartesian3.normalize(\n    ellipsoid.cartographicToCartesian(end, scratchCart2),\n    scratchCart2,\n  );\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"value\",\n    Math.abs(\n      Math.abs(Cartesian3.angleBetween(firstCartesian, lastCartesian)) -\n        Math.PI,\n    ),\n    0.0125,\n  );\n  //>>includeEnd('debug');\n\n  const major = ellipsoid.maximumRadius;\n  const minor = ellipsoid.minimumRadius;\n  const majorSquared = major * major;\n  const minorSquared = minor * minor;\n  ellipsoidRhumbLine._ellipticitySquared =\n    (majorSquared - minorSquared) / majorSquared;\n  ellipsoidRhumbLine._ellipticity = Math.sqrt(\n    ellipsoidRhumbLine._ellipticitySquared,\n  );\n\n  ellipsoidRhumbLine._start = Cartographic.clone(\n    start,\n    ellipsoidRhumbLine._start,\n  );\n  ellipsoidRhumbLine._start.height = 0;\n\n  ellipsoidRhumbLine._end = Cartographic.clone(end, ellipsoidRhumbLine._end);\n  ellipsoidRhumbLine._end.height = 0;\n\n  ellipsoidRhumbLine._heading = calculateHeading(\n    ellipsoidRhumbLine,\n    start.longitude,\n    start.latitude,\n    end.longitude,\n    end.latitude,\n  );\n  ellipsoidRhumbLine._distance = calculateArcLength(\n    ellipsoidRhumbLine,\n    ellipsoid.maximumRadius,\n    ellipsoid.minimumRadius,\n    start.longitude,\n    start.latitude,\n    end.longitude,\n    end.latitude,\n  );\n}\n\nfunction interpolateUsingSurfaceDistance(\n  start,\n  heading,\n  distance,\n  major,\n  ellipticity,\n  result,\n) {\n  if (distance === 0.0) {\n    return Cartographic.clone(start, result);\n  }\n\n  const ellipticitySquared = ellipticity * ellipticity;\n\n  let longitude;\n  let latitude;\n  let deltaLongitude;\n\n  //Check to see if the rhumb line has constant latitude\n  //This won't converge if heading is close to 90 degrees\n  if (\n    Math.abs(CesiumMath.PI_OVER_TWO - Math.abs(heading)) > CesiumMath.EPSILON8\n  ) {\n    //Calculate latitude of the second point\n    const M1 = calculateM(ellipticity, major, start.latitude);\n    const deltaM = distance * Math.cos(heading);\n    const M2 = M1 + deltaM;\n    latitude = calculateInverseM(M2, ellipticity, major);\n\n    //Now find the longitude of the second point\n\n    // Check to see if the rhumb line has constant longitude\n    if (Math.abs(heading) < CesiumMath.EPSILON10) {\n      longitude = CesiumMath.negativePiToPi(start.longitude);\n    } else {\n      const sigma1 = calculateSigma(ellipticity, start.latitude);\n      const sigma2 = calculateSigma(ellipticity, latitude);\n      deltaLongitude = Math.tan(heading) * (sigma2 - sigma1);\n      longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\n    }\n  } else {\n    //If heading is close to 90 degrees\n    latitude = start.latitude;\n    let localRad;\n\n    if (ellipticity === 0.0) {\n      // sphere\n      localRad = major * Math.cos(start.latitude);\n    } else {\n      const sinPhi = Math.sin(start.latitude);\n      localRad =\n        (major * Math.cos(start.latitude)) /\n        Math.sqrt(1 - ellipticitySquared * sinPhi * sinPhi);\n    }\n\n    deltaLongitude = distance / localRad;\n    if (heading > 0.0) {\n      longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\n    } else {\n      longitude = CesiumMath.negativePiToPi(start.longitude - deltaLongitude);\n    }\n  }\n\n  if (defined(result)) {\n    result.longitude = longitude;\n    result.latitude = latitude;\n    result.height = 0;\n\n    return result;\n  }\n\n  return new Cartographic(longitude, latitude, 0);\n}\n\n/**\n * Initializes a rhumb line on the ellipsoid connecting the two provided planetodetic points.\n *\n * @alias EllipsoidRhumbLine\n * @constructor\n *\n * @param {Cartographic} [start] The initial planetodetic point on the path.\n * @param {Cartographic} [end] The final planetodetic point on the path.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the rhumb line lies.\n *\n * @exception {DeveloperError} angle between start and end must be at least 0.0125 radians.\n */\nfunction EllipsoidRhumbLine(start, end, ellipsoid) {\n  const e = ellipsoid ?? Ellipsoid.default;\n  this._ellipsoid = e;\n  this._start = new Cartographic();\n  this._end = new Cartographic();\n\n  this._heading = undefined;\n  this._distance = undefined;\n  this._ellipticity = undefined;\n  this._ellipticitySquared = undefined;\n\n  if (defined(start) && defined(end)) {\n    computeProperties(this, start, end, e);\n  }\n}\n\nObject.defineProperties(EllipsoidRhumbLine.prototype, {\n  /**\n   * Gets the ellipsoid.\n   * @memberof EllipsoidRhumbLine.prototype\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the surface distance between the start and end point\n   * @memberof EllipsoidRhumbLine.prototype\n   * @type {number}\n   * @readonly\n   */\n  surfaceDistance: {\n    get: function () {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"distance\", this._distance);\n      //>>includeEnd('debug');\n\n      return this._distance;\n    },\n  },\n\n  /**\n   * Gets the initial planetodetic point on the path.\n   * @memberof EllipsoidRhumbLine.prototype\n   * @type {Cartographic}\n   * @readonly\n   */\n  start: {\n    get: function () {\n      return this._start;\n    },\n  },\n\n  /**\n   * Gets the final planetodetic point on the path.\n   * @memberof EllipsoidRhumbLine.prototype\n   * @type {Cartographic}\n   * @readonly\n   */\n  end: {\n    get: function () {\n      return this._end;\n    },\n  },\n\n  /**\n   * Gets the heading from the start point to the end point.\n   * @memberof EllipsoidRhumbLine.prototype\n   * @type {number}\n   * @readonly\n   */\n  heading: {\n    get: function () {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"distance\", this._distance);\n      //>>includeEnd('debug');\n\n      return this._heading;\n    },\n  },\n});\n\n/**\n * Create a rhumb line using an initial position with a heading and distance.\n *\n * @param {Cartographic} start The initial planetodetic point on the path.\n * @param {number} heading The heading in radians.\n * @param {number} distance The rhumb line distance between the start and end point.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the rhumb line lies.\n * @param {EllipsoidRhumbLine} [result] The object in which to store the result.\n * @returns {EllipsoidRhumbLine} The EllipsoidRhumbLine object.\n */\nEllipsoidRhumbLine.fromStartHeadingDistance = function (\n  start,\n  heading,\n  distance,\n  ellipsoid,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"start\", start);\n  Check.defined(\"heading\", heading);\n  Check.defined(\"distance\", distance);\n  Check.typeOf.number.greaterThan(\"distance\", distance, 0.0);\n  //>>includeEnd('debug');\n\n  const e = ellipsoid ?? Ellipsoid.default;\n  const major = e.maximumRadius;\n  const minor = e.minimumRadius;\n  const majorSquared = major * major;\n  const minorSquared = minor * minor;\n  const ellipticity = Math.sqrt((majorSquared - minorSquared) / majorSquared);\n\n  heading = CesiumMath.negativePiToPi(heading);\n  const end = interpolateUsingSurfaceDistance(\n    start,\n    heading,\n    distance,\n    e.maximumRadius,\n    ellipticity,\n  );\n\n  if (\n    !defined(result) ||\n    (defined(ellipsoid) && !ellipsoid.equals(result.ellipsoid))\n  ) {\n    return new EllipsoidRhumbLine(start, end, e);\n  }\n\n  result.setEndPoints(start, end);\n  return result;\n};\n\n/**\n * Sets the start and end points of the rhumb line.\n *\n * @param {Cartographic} start The initial planetodetic point on the path.\n * @param {Cartographic} end The final planetodetic point on the path.\n */\nEllipsoidRhumbLine.prototype.setEndPoints = function (start, end) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"start\", start);\n  Check.defined(\"end\", end);\n  //>>includeEnd('debug');\n\n  computeProperties(this, start, end, this._ellipsoid);\n};\n\n/**\n * Provides the location of a point at the indicated portion along the rhumb line.\n *\n * @param {number} fraction The portion of the distance between the initial and final points.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the rhumb line.\n */\nEllipsoidRhumbLine.prototype.interpolateUsingFraction = function (\n  fraction,\n  result,\n) {\n  return this.interpolateUsingSurfaceDistance(\n    fraction * this._distance,\n    result,\n  );\n};\n\n/**\n * Provides the location of a point at the indicated distance along the rhumb line.\n *\n * @param {number} distance The distance from the initial point to the point of interest along the rhumbLine.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the point along the rhumb line.\n *\n * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance\n */\nEllipsoidRhumbLine.prototype.interpolateUsingSurfaceDistance = function (\n  distance,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"distance\", distance);\n  if (!defined(this._distance) || this._distance === 0.0) {\n    throw new DeveloperError(\n      \"EllipsoidRhumbLine must have distinct start and end set.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return interpolateUsingSurfaceDistance(\n    this._start,\n    this._heading,\n    distance,\n    this._ellipsoid.maximumRadius,\n    this._ellipticity,\n    result,\n  );\n};\n\n/**\n * Provides the location of a point at the indicated longitude along the rhumb line.\n * If the longitude is outside the range of start and end points, the first intersection with the longitude from the start point in the direction of the heading is returned. This follows the spiral property of a rhumb line.\n *\n * @param {number} intersectionLongitude The longitude, in radians, at which to find the intersection point from the starting point using the heading.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections.\n *\n * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude.\n */\nEllipsoidRhumbLine.prototype.findIntersectionWithLongitude = function (\n  intersectionLongitude,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"intersectionLongitude\", intersectionLongitude);\n  if (!defined(this._distance) || this._distance === 0.0) {\n    throw new DeveloperError(\n      \"EllipsoidRhumbLine must have distinct start and end set.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const ellipticity = this._ellipticity;\n  const heading = this._heading;\n  const absHeading = Math.abs(heading);\n  const start = this._start;\n\n  intersectionLongitude = CesiumMath.negativePiToPi(intersectionLongitude);\n\n  if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(intersectionLongitude),\n      Math.PI,\n      CesiumMath.EPSILON14,\n    )\n  ) {\n    intersectionLongitude = CesiumMath.sign(start.longitude) * Math.PI;\n  }\n\n  if (!defined(result)) {\n    result = new Cartographic();\n  }\n\n  // If heading is -PI/2 or PI/2, this is an E-W rhumb line\n  // If heading is 0 or PI, this is an N-S rhumb line\n  if (Math.abs(CesiumMath.PI_OVER_TWO - absHeading) <= CesiumMath.EPSILON8) {\n    result.longitude = intersectionLongitude;\n    result.latitude = start.latitude;\n    result.height = 0;\n    return result;\n  } else if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(CesiumMath.PI_OVER_TWO - absHeading),\n      CesiumMath.PI_OVER_TWO,\n      CesiumMath.EPSILON8,\n    )\n  ) {\n    if (\n      CesiumMath.equalsEpsilon(\n        intersectionLongitude,\n        start.longitude,\n        CesiumMath.EPSILON12,\n      )\n    ) {\n      return undefined;\n    }\n\n    result.longitude = intersectionLongitude;\n    result.latitude =\n      CesiumMath.PI_OVER_TWO *\n      CesiumMath.sign(CesiumMath.PI_OVER_TWO - heading);\n    result.height = 0;\n    return result;\n  }\n\n  // Use iterative solver from Equation 9 from http://edwilliams.org/ellipsoid/ellipsoid.pdf\n  const phi1 = start.latitude;\n  const eSinPhi1 = ellipticity * Math.sin(phi1);\n  const leftComponent =\n    Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + phi1)) *\n    Math.exp((intersectionLongitude - start.longitude) / Math.tan(heading));\n  const denominator = (1 + eSinPhi1) / (1 - eSinPhi1);\n\n  let newPhi = start.latitude;\n  let phi;\n  do {\n    phi = newPhi;\n    const eSinPhi = ellipticity * Math.sin(phi);\n    const numerator = (1 + eSinPhi) / (1 - eSinPhi);\n    newPhi =\n      2 *\n        Math.atan(\n          leftComponent * Math.pow(numerator / denominator, ellipticity / 2),\n        ) -\n      CesiumMath.PI_OVER_TWO;\n  } while (!CesiumMath.equalsEpsilon(newPhi, phi, CesiumMath.EPSILON12));\n\n  result.longitude = intersectionLongitude;\n  result.latitude = newPhi;\n  result.height = 0;\n  return result;\n};\n\n/**\n * Provides the location of a point at the indicated latitude along the rhumb line.\n * If the latitude is outside the range of start and end points, the first intersection with the latitude from that start point in the direction of the heading is returned. This follows the spiral property of a rhumb line.\n *\n * @param {number} intersectionLatitude The latitude, in radians, at which to find the intersection point from the starting point using the heading.\n * @param {Cartographic} [result] The object in which to store the result.\n * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections.\n *\n * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude.\n */\nEllipsoidRhumbLine.prototype.findIntersectionWithLatitude = function (\n  intersectionLatitude,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"intersectionLatitude\", intersectionLatitude);\n  if (!defined(this._distance) || this._distance === 0.0) {\n    throw new DeveloperError(\n      \"EllipsoidRhumbLine must have distinct start and end set.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const ellipticity = this._ellipticity;\n  const heading = this._heading;\n  const start = this._start;\n\n  // If start and end have same latitude, return undefined since it's either no intersection or infinite intersections\n  if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(heading),\n      CesiumMath.PI_OVER_TWO,\n      CesiumMath.EPSILON8,\n    )\n  ) {\n    return;\n  }\n\n  // Can be solved using the same equations from interpolateUsingSurfaceDistance\n  const sigma1 = calculateSigma(ellipticity, start.latitude);\n  const sigma2 = calculateSigma(ellipticity, intersectionLatitude);\n  const deltaLongitude = Math.tan(heading) * (sigma2 - sigma1);\n  const longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\n\n  if (defined(result)) {\n    result.longitude = longitude;\n    result.latitude = intersectionLatitude;\n    result.height = 0;\n\n    return result;\n  }\n\n  return new Cartographic(longitude, intersectionLatitude, 0);\n};\nexport default EllipsoidRhumbLine;\n","import AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\nimport Ray from \"./Ray.js\";\nimport Transforms from \"./Transforms.js\";\n\nconst scratchCart4 = new Cartesian4();\n/**\n * A plane tangent to the provided ellipsoid at the provided origin.\n * If origin is not on the surface of the ellipsoid, it's surface projection will be used.\n * If origin is at the center of the ellipsoid, an exception will be thrown.\n * @alias EllipsoidTangentPlane\n * @constructor\n *\n * @param {Cartesian3} origin The point on the surface of the ellipsoid where the tangent plane touches.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to use.\n *\n * @exception {DeveloperError} origin must not be at the center of the ellipsoid.\n */\nfunction EllipsoidTangentPlane(origin, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"origin\", origin);\n  //>>includeEnd('debug');\n\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  origin = ellipsoid.scaleToGeodeticSurface(origin);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(origin)) {\n    throw new DeveloperError(\n      \"origin must not be at the center of the ellipsoid.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const eastNorthUp = Transforms.eastNorthUpToFixedFrame(origin, ellipsoid);\n  this._ellipsoid = ellipsoid;\n  this._origin = origin;\n  this._xAxis = Cartesian3.fromCartesian4(\n    Matrix4.getColumn(eastNorthUp, 0, scratchCart4),\n  );\n  this._yAxis = Cartesian3.fromCartesian4(\n    Matrix4.getColumn(eastNorthUp, 1, scratchCart4),\n  );\n\n  const normal = Cartesian3.fromCartesian4(\n    Matrix4.getColumn(eastNorthUp, 2, scratchCart4),\n  );\n  this._plane = Plane.fromPointNormal(origin, normal);\n}\n\nObject.defineProperties(EllipsoidTangentPlane.prototype, {\n  /**\n   * Gets the ellipsoid.\n   * @memberof EllipsoidTangentPlane.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the origin.\n   * @memberof EllipsoidTangentPlane.prototype\n   * @type {Cartesian3}\n   */\n  origin: {\n    get: function () {\n      return this._origin;\n    },\n  },\n\n  /**\n   * Gets the plane which is tangent to the ellipsoid.\n   * @memberof EllipsoidTangentPlane.prototype\n   * @readonly\n   * @type {Plane}\n   */\n  plane: {\n    get: function () {\n      return this._plane;\n    },\n  },\n\n  /**\n   * Gets the local X-axis (east) of the tangent plane.\n   * @memberof EllipsoidTangentPlane.prototype\n   * @readonly\n   * @type {Cartesian3}\n   */\n  xAxis: {\n    get: function () {\n      return this._xAxis;\n    },\n  },\n\n  /**\n   * Gets the local Y-axis (north) of the tangent plane.\n   * @memberof EllipsoidTangentPlane.prototype\n   * @readonly\n   * @type {Cartesian3}\n   */\n  yAxis: {\n    get: function () {\n      return this._yAxis;\n    },\n  },\n\n  /**\n   * Gets the local Z-axis (up) of the tangent plane.\n   * @memberof EllipsoidTangentPlane.prototype\n   * @readonly\n   * @type {Cartesian3}\n   */\n  zAxis: {\n    get: function () {\n      return this._plane.normal;\n    },\n  },\n});\n\nconst tmp = new AxisAlignedBoundingBox();\n/**\n * Creates a new instance from the provided ellipsoid and the center\n * point of the provided Cartesians.\n *\n * @param {Cartesian3[]} cartesians The list of positions surrounding the center point.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to use.\n * @returns {EllipsoidTangentPlane} The new instance of EllipsoidTangentPlane.\n */\nEllipsoidTangentPlane.fromPoints = function (cartesians, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  //>>includeEnd('debug');\n\n  const box = AxisAlignedBoundingBox.fromPoints(cartesians, tmp);\n  return new EllipsoidTangentPlane(box.center, ellipsoid);\n};\n\nconst scratchProjectPointOntoPlaneRay = new Ray();\nconst scratchProjectPointOntoPlaneCartesian3 = new Cartesian3();\n\n/**\n * Computes the projection of the provided 3D position onto the 2D plane, radially outward from the {@link EllipsoidTangentPlane.ellipsoid} coordinate system origin.\n *\n * @param {Cartesian3} cartesian The point to project.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided. Undefined if there is no intersection point\n */\nEllipsoidTangentPlane.prototype.projectPointOntoPlane = function (\n  cartesian,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  const ray = scratchProjectPointOntoPlaneRay;\n  ray.origin = cartesian;\n  Cartesian3.normalize(cartesian, ray.direction);\n\n  let intersectionPoint = IntersectionTests.rayPlane(\n    ray,\n    this._plane,\n    scratchProjectPointOntoPlaneCartesian3,\n  );\n  if (!defined(intersectionPoint)) {\n    Cartesian3.negate(ray.direction, ray.direction);\n    intersectionPoint = IntersectionTests.rayPlane(\n      ray,\n      this._plane,\n      scratchProjectPointOntoPlaneCartesian3,\n    );\n  }\n\n  if (defined(intersectionPoint)) {\n    const v = Cartesian3.subtract(\n      intersectionPoint,\n      this._origin,\n      intersectionPoint,\n    );\n    const x = Cartesian3.dot(this._xAxis, v);\n    const y = Cartesian3.dot(this._yAxis, v);\n\n    if (!defined(result)) {\n      return new Cartesian2(x, y);\n    }\n    result.x = x;\n    result.y = y;\n    return result;\n  }\n  return undefined;\n};\n\n/**\n * Computes the projection of the provided 3D positions onto the 2D plane (where possible), radially outward from the global origin.\n * The resulting array may be shorter than the input array - if a single projection is impossible it will not be included.\n *\n * @see EllipsoidTangentPlane.projectPointOntoPlane\n *\n * @param {Cartesian3[]} cartesians The array of points to project.\n * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results.\n * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointsOntoPlane = function (\n  cartesians,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = [];\n  }\n\n  let count = 0;\n  const length = cartesians.length;\n  for (let i = 0; i < length; i++) {\n    const p = this.projectPointOntoPlane(cartesians[i], result[count]);\n    if (defined(p)) {\n      result[count] = p;\n      count++;\n    }\n  }\n  result.length = count;\n  return result;\n};\n\n/**\n * Computes the projection of the provided 3D position onto the 2D plane, along the plane normal.\n *\n * @param {Cartesian3} cartesian The point to project.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointToNearestOnPlane = function (\n  cartesian,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian2();\n  }\n\n  const ray = scratchProjectPointOntoPlaneRay;\n  ray.origin = cartesian;\n  Cartesian3.clone(this._plane.normal, ray.direction);\n\n  let intersectionPoint = IntersectionTests.rayPlane(\n    ray,\n    this._plane,\n    scratchProjectPointOntoPlaneCartesian3,\n  );\n  if (!defined(intersectionPoint)) {\n    Cartesian3.negate(ray.direction, ray.direction);\n    intersectionPoint = IntersectionTests.rayPlane(\n      ray,\n      this._plane,\n      scratchProjectPointOntoPlaneCartesian3,\n    );\n  }\n\n  const v = Cartesian3.subtract(\n    intersectionPoint,\n    this._origin,\n    intersectionPoint,\n  );\n  const x = Cartesian3.dot(this._xAxis, v);\n  const y = Cartesian3.dot(this._yAxis, v);\n\n  result.x = x;\n  result.y = y;\n  return result;\n};\n\n/**\n * Computes the projection of the provided 3D positions onto the 2D plane, along the plane normal.\n *\n * @see EllipsoidTangentPlane.projectPointToNearestOnPlane\n *\n * @param {Cartesian3[]} cartesians The array of points to project.\n * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results.\n * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided. This will have the same length as <code>cartesians</code>.\n */\nEllipsoidTangentPlane.prototype.projectPointsToNearestOnPlane = function (\n  cartesians,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = [];\n  }\n\n  const length = cartesians.length;\n  result.length = length;\n  for (let i = 0; i < length; i++) {\n    result[i] = this.projectPointToNearestOnPlane(cartesians[i], result[i]);\n  }\n  return result;\n};\n\nconst projectPointsOntoEllipsoidScratch = new Cartesian3();\n/**\n * Computes the projection of the provided 2D position onto the 3D ellipsoid.\n *\n * @param {Cartesian2} cartesian The points to project.\n * @param {Cartesian3} [result] The Cartesian3 instance to store result.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointOntoEllipsoid = function (\n  cartesian,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  const ellipsoid = this._ellipsoid;\n  const origin = this._origin;\n  const xAxis = this._xAxis;\n  const yAxis = this._yAxis;\n  const tmp = projectPointsOntoEllipsoidScratch;\n\n  Cartesian3.multiplyByScalar(xAxis, cartesian.x, tmp);\n  result = Cartesian3.add(origin, tmp, result);\n  Cartesian3.multiplyByScalar(yAxis, cartesian.y, tmp);\n  Cartesian3.add(result, tmp, result);\n  ellipsoid.scaleToGeocentricSurface(result, result);\n\n  return result;\n};\n\n/**\n * Computes the projection of the provided 2D positions onto the 3D ellipsoid.\n *\n * @param {Cartesian2[]} cartesians The array of points to project.\n * @param {Cartesian3[]} [result] The array of Cartesian3 instances onto which to store results.\n * @returns {Cartesian3[]} The modified result parameter or a new array of Cartesian3 instances if none was provided.\n */\nEllipsoidTangentPlane.prototype.projectPointsOntoEllipsoid = function (\n  cartesians,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  //>>includeEnd('debug');\n\n  const length = cartesians.length;\n  if (!defined(result)) {\n    result = new Array(length);\n  } else {\n    result.length = length;\n  }\n\n  for (let i = 0; i < length; ++i) {\n    result[i] = this.projectPointOntoEllipsoid(cartesians[i], result[i]);\n  }\n\n  return result;\n};\nexport default EllipsoidTangentPlane;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\n\n/**\n * A very simple {@link TerrainProvider} that produces geometry by tessellating an ellipsoidal\n * surface.\n *\n * @alias EllipsoidTerrainProvider\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {TilingScheme} [options.tilingScheme] The tiling scheme specifying how the ellipsoidal\n * surface is broken into tiles.  If this parameter is not provided, a {@link GeographicTilingScheme}\n * is used.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid.  If the tilingScheme is specified,\n * this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n * parameter is specified, the default ellipsoid is used.\n *\n * @see TerrainProvider\n */\nfunction EllipsoidTerrainProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._tilingScheme = options.tilingScheme;\n  if (!defined(this._tilingScheme)) {\n    this._tilingScheme = new GeographicTilingScheme({\n      ellipsoid: options.ellipsoid ?? Ellipsoid.default,\n    });\n  }\n\n  // Note: the 64 below does NOT need to match the actual vertex dimensions, because\n  // the ellipsoid is significantly smoother than actual terrain.\n  this._levelZeroMaximumGeometricError =\n    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n      this._tilingScheme.ellipsoid,\n      64,\n      this._tilingScheme.getNumberOfXTilesAtLevel(0),\n    );\n\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(EllipsoidTerrainProvider.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof EllipsoidTerrainProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active.  Typically this is used to credit\n   * the source of the terrain.\n   * @memberof EllipsoidTerrainProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof EllipsoidTerrainProvider.prototype\n   * @type {GeographicTilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask.  The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * @memberof EllipsoidTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasWaterMask: {\n    get: function () {\n      return false;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * @memberof EllipsoidTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasVertexNormals: {\n    get: function () {\n      return false;\n    },\n  },\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles. This property may be undefined if availability\n   * information is not available.\n   * @memberof EllipsoidTerrainProvider.prototype\n   * @type {TileAvailability|undefined}\n   * @readonly\n   */\n  availability: {\n    get: function () {\n      return undefined;\n    },\n  },\n});\n\n/**\n * Requests the geometry for a given tile. The result includes terrain\n * data and indicates that all child tiles are available.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise<TerrainData>|undefined} A promise for the requested geometry.  If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n */\nEllipsoidTerrainProvider.prototype.requestTileGeometry = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const width = 16;\n  const height = 16;\n  return Promise.resolve(\n    new HeightmapTerrainData({\n      buffer: new Uint8Array(width * height),\n      width: width,\n      height: height,\n    }),\n  );\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nEllipsoidTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n  level,\n) {\n  return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported, otherwise true or false.\n */\nEllipsoidTerrainProvider.prototype.getTileDataAvailable = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {undefined} This provider does not support loading availability.\n */\nEllipsoidTerrainProvider.prototype.loadTileDataAvailability = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\nexport default EllipsoidTerrainProvider;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * Determine whether or not other objects are visible or hidden behind the visible horizon defined by\n * an {@link Ellipsoid} and a camera position.  The ellipsoid is assumed to be located at the\n * origin of the coordinate system.  This class uses the algorithm described in the\n * {@link https://cesium.com/blog/2013/04/25/Horizon-culling/|Horizon Culling} blog post.\n *\n * @alias EllipsoidalOccluder\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid to use as an occluder.\n * @param {Cartesian3} [cameraPosition] The coordinate of the viewer/camera.  If this parameter is not\n *        specified, {@link EllipsoidalOccluder#cameraPosition} must be called before\n *        testing visibility.\n *\n * @constructor\n *\n * @example\n * // Construct an ellipsoidal occluder with radii 1.0, 1.1, and 0.9.\n * const cameraPosition = new Cesium.Cartesian3(5.0, 6.0, 7.0);\n * const occluderEllipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\n * const occluder = new Cesium.EllipsoidalOccluder(occluderEllipsoid, cameraPosition);\n *\n * @private\n */\nfunction EllipsoidalOccluder(ellipsoid, cameraPosition) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"ellipsoid\", ellipsoid);\n  //>>includeEnd('debug');\n\n  this._ellipsoid = ellipsoid;\n  this._cameraPosition = new Cartesian3();\n  this._cameraPositionInScaledSpace = new Cartesian3();\n  this._distanceToLimbInScaledSpaceSquared = 0.0;\n\n  // cameraPosition fills in the above values\n  if (defined(cameraPosition)) {\n    this.cameraPosition = cameraPosition;\n  }\n}\n\nObject.defineProperties(EllipsoidalOccluder.prototype, {\n  /**\n   * Gets the occluding ellipsoid.\n   * @memberof EllipsoidalOccluder.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n  /**\n   * Gets or sets the position of the camera.\n   * @memberof EllipsoidalOccluder.prototype\n   * @type {Cartesian3}\n   */\n  cameraPosition: {\n    get: function () {\n      return this._cameraPosition;\n    },\n    set: function (cameraPosition) {\n      // See https://cesium.com/blog/2013/04/25/Horizon-culling/\n      const ellipsoid = this._ellipsoid;\n      const cv = ellipsoid.transformPositionToScaledSpace(\n        cameraPosition,\n        this._cameraPositionInScaledSpace,\n      );\n      const vhMagnitudeSquared = Cartesian3.magnitudeSquared(cv) - 1.0;\n\n      Cartesian3.clone(cameraPosition, this._cameraPosition);\n      this._cameraPositionInScaledSpace = cv;\n      this._distanceToLimbInScaledSpaceSquared = vhMagnitudeSquared;\n    },\n  },\n});\n\nconst scratchCartesian = new Cartesian3();\n\n/**\n * Determines whether or not a point, the <code>occludee</code>, is hidden from view by the occluder.\n *\n * @param {Cartesian3} occludee The point to test for visibility.\n * @returns {boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n * @example\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 2.5);\n * const ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\n * const occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition);\n * const point = new Cesium.Cartesian3(0, -3, -3);\n * occluder.isPointVisible(point); //returns true\n */\nEllipsoidalOccluder.prototype.isPointVisible = function (occludee) {\n  const ellipsoid = this._ellipsoid;\n  const occludeeScaledSpacePosition = ellipsoid.transformPositionToScaledSpace(\n    occludee,\n    scratchCartesian,\n  );\n  return isScaledSpacePointVisible(\n    occludeeScaledSpacePosition,\n    this._cameraPositionInScaledSpace,\n    this._distanceToLimbInScaledSpaceSquared,\n  );\n};\n\n/**\n * Determines whether or not a point expressed in the ellipsoid scaled space, is hidden from view by the\n * occluder.  To transform a Cartesian X, Y, Z position in the coordinate system aligned with the ellipsoid\n * into the scaled space, call {@link Ellipsoid#transformPositionToScaledSpace}.\n *\n * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space.\n * @returns {boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n * @example\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 2.5);\n * const ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\n * const occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition);\n * const point = new Cesium.Cartesian3(0, -3, -3);\n * const scaledSpacePoint = ellipsoid.transformPositionToScaledSpace(point);\n * occluder.isScaledSpacePointVisible(scaledSpacePoint); //returns true\n */\nEllipsoidalOccluder.prototype.isScaledSpacePointVisible = function (\n  occludeeScaledSpacePosition,\n) {\n  return isScaledSpacePointVisible(\n    occludeeScaledSpacePosition,\n    this._cameraPositionInScaledSpace,\n    this._distanceToLimbInScaledSpaceSquared,\n  );\n};\n\nconst scratchCameraPositionInScaledSpaceShrunk = new Cartesian3();\n\n/**\n * Similar to {@link EllipsoidalOccluder#isScaledSpacePointVisible} except tests against an\n * ellipsoid that has been shrunk by the minimum height when the minimum height is below\n * the ellipsoid. This is intended to be used with points generated by\n * {@link EllipsoidalOccluder#computeHorizonCullingPointPossiblyUnderEllipsoid} or\n * {@link EllipsoidalOccluder#computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid}.\n *\n * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space of the possibly-shrunk ellipsoid.\n * @returns {boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n */\nEllipsoidalOccluder.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid =\n  function (occludeeScaledSpacePosition, minimumHeight) {\n    const ellipsoid = this._ellipsoid;\n    let vhMagnitudeSquared;\n    let cv;\n\n    if (\n      defined(minimumHeight) &&\n      minimumHeight < 0.0 &&\n      ellipsoid.minimumRadius > -minimumHeight\n    ) {\n      // This code is similar to the cameraPosition setter, but unrolled for performance because it will be called a lot.\n      cv = scratchCameraPositionInScaledSpaceShrunk;\n      cv.x = this._cameraPosition.x / (ellipsoid.radii.x + minimumHeight);\n      cv.y = this._cameraPosition.y / (ellipsoid.radii.y + minimumHeight);\n      cv.z = this._cameraPosition.z / (ellipsoid.radii.z + minimumHeight);\n      vhMagnitudeSquared = cv.x * cv.x + cv.y * cv.y + cv.z * cv.z - 1.0;\n    } else {\n      cv = this._cameraPositionInScaledSpace;\n      vhMagnitudeSquared = this._distanceToLimbInScaledSpaceSquared;\n    }\n\n    return isScaledSpacePointVisible(\n      occludeeScaledSpacePosition,\n      cv,\n      vhMagnitudeSquared,\n    );\n  };\n\n/**\n * Computes a point that can be used for horizon culling from a list of positions.  If the point is below\n * the horizon, all of the positions are guaranteed to be below the horizon as well.  The returned point\n * is expressed in the ellipsoid-scaled space and is suitable for use with\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n *                     A reasonable direction to use is the direction from the center of the ellipsoid to\n *                     the center of the bounding sphere computed from the positions.  The direction need not\n *                     be normalized.\n * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point.  The positions\n *                       must be expressed in a reference frame centered at the ellipsoid and aligned with the\n *                       ellipsoid's axes.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPoint = function (\n  directionToPoint,\n  positions,\n  result,\n) {\n  return computeHorizonCullingPointFromPositions(\n    this._ellipsoid,\n    directionToPoint,\n    positions,\n    result,\n  );\n};\n\nconst scratchEllipsoidShrunk = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\n\n/**\n * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPoint} except computes the culling\n * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below\n * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable\n * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n *                     A reasonable direction to use is the direction from the center of the ellipsoid to\n *                     the center of the bounding sphere computed from the positions.  The direction need not\n *                     be normalized.\n * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point.  The positions\n *                       must be expressed in a reference frame centered at the ellipsoid and aligned with the\n *                       ellipsoid's axes.\n * @param {number} [minimumHeight] The minimum height of all positions. If this value is undefined, all positions are assumed to be above the ellipsoid.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid =\n  function (directionToPoint, positions, minimumHeight, result) {\n    const possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid(\n      this._ellipsoid,\n      minimumHeight,\n      scratchEllipsoidShrunk,\n    );\n    return computeHorizonCullingPointFromPositions(\n      possiblyShrunkEllipsoid,\n      directionToPoint,\n      positions,\n      result,\n    );\n  };\n/**\n * Computes a point that can be used for horizon culling from a list of positions.  If the point is below\n * the horizon, all of the positions are guaranteed to be below the horizon as well.  The returned point\n * is expressed in the ellipsoid-scaled space and is suitable for use with\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n *                     A reasonable direction to use is the direction from the center of the ellipsoid to\n *                     the center of the bounding sphere computed from the positions.  The direction need not\n *                     be normalized.\n * @param {number[]|Float32Array|Float64Array} vertices  The vertices from which to compute the horizon culling point. The positions\n *                   must be expressed in a reference frame centered at the ellipsoid and aligned with the\n *                   ellipsoid's axes.\n * @param {number} [stride=3]\n * @param {Cartesian3} [center=Cartesian3.ZERO]\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromVertices =\n  function (directionToPoint, vertices, stride, center, result) {\n    return computeHorizonCullingPointFromVertices(\n      this._ellipsoid,\n      directionToPoint,\n      vertices,\n      stride,\n      center,\n      result,\n    );\n  };\n\n/**\n * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPointFromVertices} except computes the culling\n * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below\n * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable\n * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}.\n *\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\n *                     A reasonable direction to use is the direction from the center of the ellipsoid to\n *                     the center of the bounding sphere computed from the positions.  The direction need not\n *                     be normalized.\n * @param {number[]|Float32Array|Float64Array} vertices  The vertices from which to compute the horizon culling point.  The positions\n *                   must be expressed in a reference frame centered at the ellipsoid and aligned with the\n *                   ellipsoid's axes.\n * @param {number} [stride=3]\n * @param {Cartesian3} [center=Cartesian3.ZERO]\n * @param {number} [minimumHeight] The minimum height of all vertices. If this value is undefined, all vertices are assumed to be above the ellipsoid.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid =\n  function (directionToPoint, vertices, stride, center, minimumHeight, result) {\n    const possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid(\n      this._ellipsoid,\n      minimumHeight,\n      scratchEllipsoidShrunk,\n    );\n    return computeHorizonCullingPointFromVertices(\n      possiblyShrunkEllipsoid,\n      directionToPoint,\n      vertices,\n      stride,\n      center,\n      result,\n    );\n  };\n\nconst subsampleScratch = [];\n\n/**\n * Computes a point that can be used for horizon culling of a rectangle.  If the point is below\n * the horizon, the ellipsoid-conforming rectangle is guaranteed to be below the horizon as well.\n * The returned point is expressed in the ellipsoid-scaled space and is suitable for use with\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\n *\n * @param {Rectangle} rectangle The rectangle for which to compute the horizon culling point.\n * @param {Ellipsoid} ellipsoid The ellipsoid on which the rectangle is defined.  This may be different from\n *                    the ellipsoid used by this instance for occlusion testing.\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\n */\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromRectangle =\n  function (rectangle, ellipsoid, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"rectangle\", rectangle);\n    //>>includeEnd('debug');\n\n    const positions = Rectangle.subsample(\n      rectangle,\n      ellipsoid,\n      0.0,\n      subsampleScratch,\n    );\n    const bs = BoundingSphere.fromPoints(positions);\n\n    // If the bounding sphere center is too close to the center of the occluder, it doesn't make\n    // sense to try to horizon cull it.\n    if (Cartesian3.magnitude(bs.center) < 0.1 * ellipsoid.minimumRadius) {\n      return undefined;\n    }\n\n    return this.computeHorizonCullingPoint(bs.center, positions, result);\n  };\n\nconst scratchEllipsoidShrunkRadii = new Cartesian3();\n\nfunction getPossiblyShrunkEllipsoid(ellipsoid, minimumHeight, result) {\n  if (\n    defined(minimumHeight) &&\n    minimumHeight < 0.0 &&\n    ellipsoid.minimumRadius > -minimumHeight\n  ) {\n    const ellipsoidShrunkRadii = Cartesian3.fromElements(\n      ellipsoid.radii.x + minimumHeight,\n      ellipsoid.radii.y + minimumHeight,\n      ellipsoid.radii.z + minimumHeight,\n      scratchEllipsoidShrunkRadii,\n    );\n    ellipsoid = Ellipsoid.fromCartesian3(ellipsoidShrunkRadii, result);\n  }\n  return ellipsoid;\n}\n\nfunction computeHorizonCullingPointFromPositions(\n  ellipsoid,\n  directionToPoint,\n  positions,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"directionToPoint\", directionToPoint);\n  Check.defined(\"positions\", positions);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  const scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint(\n    ellipsoid,\n    directionToPoint,\n  );\n  let resultMagnitude = 0.0;\n\n  for (let i = 0, len = positions.length; i < len; ++i) {\n    const position = positions[i];\n    const candidateMagnitude = computeMagnitude(\n      ellipsoid,\n      position,\n      scaledSpaceDirectionToPoint,\n    );\n    if (candidateMagnitude < 0.0) {\n      // all points should face the same direction, but this one doesn't, so return undefined\n      return undefined;\n    }\n    resultMagnitude = Math.max(resultMagnitude, candidateMagnitude);\n  }\n\n  return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result);\n}\n\nconst positionScratch = new Cartesian3();\n\nfunction computeHorizonCullingPointFromVertices(\n  ellipsoid,\n  directionToPoint,\n  vertices,\n  stride,\n  center,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"directionToPoint\", directionToPoint);\n  Check.defined(\"vertices\", vertices);\n  Check.typeOf.number(\"stride\", stride);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  stride = stride ?? 3;\n  center = center ?? Cartesian3.ZERO;\n  const scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint(\n    ellipsoid,\n    directionToPoint,\n  );\n  let resultMagnitude = 0.0;\n\n  for (let i = 0, len = vertices.length; i < len; i += stride) {\n    positionScratch.x = vertices[i] + center.x;\n    positionScratch.y = vertices[i + 1] + center.y;\n    positionScratch.z = vertices[i + 2] + center.z;\n\n    const candidateMagnitude = computeMagnitude(\n      ellipsoid,\n      positionScratch,\n      scaledSpaceDirectionToPoint,\n    );\n    if (candidateMagnitude < 0.0) {\n      // all points should face the same direction, but this one doesn't, so return undefined\n      return undefined;\n    }\n    resultMagnitude = Math.max(resultMagnitude, candidateMagnitude);\n  }\n\n  return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result);\n}\n\nfunction isScaledSpacePointVisible(\n  occludeeScaledSpacePosition,\n  cameraPositionInScaledSpace,\n  distanceToLimbInScaledSpaceSquared,\n) {\n  // See https://cesium.com/blog/2013/04/25/Horizon-culling/\n  const cv = cameraPositionInScaledSpace;\n  const vhMagnitudeSquared = distanceToLimbInScaledSpaceSquared;\n  const vt = Cartesian3.subtract(\n    occludeeScaledSpacePosition,\n    cv,\n    scratchCartesian,\n  );\n  const vtDotVc = -Cartesian3.dot(vt, cv);\n  // If vhMagnitudeSquared < 0 then we are below the surface of the ellipsoid and\n  // in this case, set the culling plane to be on V.\n  const isOccluded =\n    vhMagnitudeSquared < 0\n      ? vtDotVc > 0\n      : vtDotVc > vhMagnitudeSquared &&\n        (vtDotVc * vtDotVc) / Cartesian3.magnitudeSquared(vt) >\n          vhMagnitudeSquared;\n  return !isOccluded;\n}\n\nconst scaledSpaceScratch = new Cartesian3();\nconst directionScratch = new Cartesian3();\n\nfunction computeMagnitude(ellipsoid, position, scaledSpaceDirectionToPoint) {\n  const scaledSpacePosition = ellipsoid.transformPositionToScaledSpace(\n    position,\n    scaledSpaceScratch,\n  );\n  let magnitudeSquared = Cartesian3.magnitudeSquared(scaledSpacePosition);\n  let magnitude = Math.sqrt(magnitudeSquared);\n  const direction = Cartesian3.divideByScalar(\n    scaledSpacePosition,\n    magnitude,\n    directionScratch,\n  );\n\n  // For the purpose of this computation, points below the ellipsoid are consider to be on it instead.\n  magnitudeSquared = Math.max(1.0, magnitudeSquared);\n  magnitude = Math.max(1.0, magnitude);\n\n  const cosAlpha = Cartesian3.dot(direction, scaledSpaceDirectionToPoint);\n  const sinAlpha = Cartesian3.magnitude(\n    Cartesian3.cross(direction, scaledSpaceDirectionToPoint, direction),\n  );\n  const cosBeta = 1.0 / magnitude;\n  const sinBeta = Math.sqrt(magnitudeSquared - 1.0) * cosBeta;\n\n  return 1.0 / (cosAlpha * cosBeta - sinAlpha * sinBeta);\n}\n\nfunction magnitudeToPoint(\n  scaledSpaceDirectionToPoint,\n  resultMagnitude,\n  result,\n) {\n  // The horizon culling point is undefined if there were no positions from which to compute it,\n  // the directionToPoint is pointing opposite all of the positions,  or if we computed NaN or infinity.\n  if (\n    resultMagnitude <= 0.0 ||\n    resultMagnitude === 1.0 / 0.0 ||\n    resultMagnitude !== resultMagnitude\n  ) {\n    return undefined;\n  }\n\n  return Cartesian3.multiplyByScalar(\n    scaledSpaceDirectionToPoint,\n    resultMagnitude,\n    result,\n  );\n}\n\nconst directionToPointScratch = new Cartesian3();\n\nfunction computeScaledSpaceDirectionToPoint(ellipsoid, directionToPoint) {\n  if (Cartesian3.equals(directionToPoint, Cartesian3.ZERO)) {\n    return directionToPoint;\n  }\n\n  ellipsoid.transformPositionToScaledSpace(\n    directionToPoint,\n    directionToPointScratch,\n  );\n  return Cartesian3.normalize(directionToPointScratch, directionToPointScratch);\n}\nexport default EllipsoidalOccluder;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * A fixed-point encoding of a {@link Cartesian3} with 64-bit floating-point components, as two {@link Cartesian3}\n * values that, when converted to 32-bit floating-point and added, approximate the original input.\n * <p>\n * This is used to encode positions in vertex buffers for rendering without jittering artifacts\n * as described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n * </p>\n *\n * @alias EncodedCartesian3\n * @constructor\n *\n * @private\n */\nfunction EncodedCartesian3() {\n  /**\n   * The high bits for each component.  Bits 0 to 22 store the whole value.  Bits 23 to 31 are not used.\n   *\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   */\n  this.high = Cartesian3.clone(Cartesian3.ZERO);\n\n  /**\n   * The low bits for each component.  Bits 7 to 22 store the whole value, and bits 0 to 6 store the fraction.  Bits 23 to 31 are not used.\n   *\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   */\n  this.low = Cartesian3.clone(Cartesian3.ZERO);\n}\n\n/**\n * Encodes a 64-bit floating-point value as two floating-point values that, when converted to\n * 32-bit floating-point and added, approximate the original input.  The returned object\n * has <code>high</code> and <code>low</code> properties for the high and low bits, respectively.\n * <p>\n * The fixed-point encoding follows {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n * </p>\n *\n * @param {number} value The floating-point value to encode.\n * @param {object} [result] The object onto which to store the result.\n * @returns {object} The modified result parameter or a new instance if one was not provided.\n *\n * @example\n * const value = 1234567.1234567;\n * const splitValue = Cesium.EncodedCartesian3.encode(value);\n */\nEncodedCartesian3.encode = function (value, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"value\", value);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = {\n      high: 0.0,\n      low: 0.0,\n    };\n  }\n\n  let doubleHigh;\n  if (value >= 0.0) {\n    doubleHigh = Math.floor(value / 65536.0) * 65536.0;\n    result.high = doubleHigh;\n    result.low = value - doubleHigh;\n  } else {\n    doubleHigh = Math.floor(-value / 65536.0) * 65536.0;\n    result.high = -doubleHigh;\n    result.low = value + doubleHigh;\n  }\n\n  return result;\n};\n\nconst scratchEncode = {\n  high: 0.0,\n  low: 0.0,\n};\n\n/**\n * Encodes a {@link Cartesian3} with 64-bit floating-point components as two {@link Cartesian3}\n * values that, when converted to 32-bit floating-point and added, approximate the original input.\n * <p>\n * The fixed-point encoding follows {@link https://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n * </p>\n *\n * @param {Cartesian3} cartesian The cartesian to encode.\n * @param {EncodedCartesian3} [result] The object onto which to store the result.\n * @returns {EncodedCartesian3} The modified result parameter or a new EncodedCartesian3 instance if one was not provided.\n *\n * @example\n * const cart = new Cesium.Cartesian3(-10000000.0, 0.0, 10000000.0);\n * const encoded = Cesium.EncodedCartesian3.fromCartesian(cart);\n */\nEncodedCartesian3.fromCartesian = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new EncodedCartesian3();\n  }\n\n  const high = result.high;\n  const low = result.low;\n\n  EncodedCartesian3.encode(cartesian.x, scratchEncode);\n  high.x = scratchEncode.high;\n  low.x = scratchEncode.low;\n\n  EncodedCartesian3.encode(cartesian.y, scratchEncode);\n  high.y = scratchEncode.high;\n  low.y = scratchEncode.low;\n\n  EncodedCartesian3.encode(cartesian.z, scratchEncode);\n  high.z = scratchEncode.high;\n  low.z = scratchEncode.low;\n\n  return result;\n};\n\nconst encodedP = new EncodedCartesian3();\n\n/**\n * Encodes the provided <code>cartesian</code>, and writes it to an array with <code>high</code>\n * components followed by <code>low</code> components, i.e. <code>[high.x, high.y, high.z, low.x, low.y, low.z]</code>.\n * <p>\n * This is used to create interleaved high-precision position vertex attributes.\n * </p>\n *\n * @param {Cartesian3} cartesian The cartesian to encode.\n * @param {number[]} cartesianArray The array to write to.\n * @param {number} index The index into the array to start writing.  Six elements will be written.\n *\n * @exception {DeveloperError} index must be a number greater than or equal to 0.\n *\n * @example\n * const positions = [\n *    new Cesium.Cartesian3(),\n *    // ...\n * ];\n * const encodedPositions = new Float32Array(2 * 3 * positions.length);\n * let j = 0;\n * for (let i = 0; i < positions.length; ++i) {\n *   Cesium.EncodedCartesian3.writeElement(positions[i], encodedPositions, j);\n *   j += 6;\n * }\n */\nEncodedCartesian3.writeElements = function (cartesian, cartesianArray, index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesianArray\", cartesianArray);\n  Check.typeOf.number(\"index\", index);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  //>>includeEnd('debug');\n\n  EncodedCartesian3.fromCartesian(cartesian, encodedP);\n  const high = encodedP.high;\n  const low = encodedP.low;\n\n  cartesianArray[index] = high.x;\n  cartesianArray[index + 1] = high.y;\n  cartesianArray[index + 2] = high.z;\n  cartesianArray[index + 3] = low.x;\n  cartesianArray[index + 4] = low.y;\n  cartesianArray[index + 5] = low.z;\n};\nexport default EncodedCartesian3;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * A generic utility class for managing subscribers for a particular event.\n * This class is usually instantiated inside of a container class and\n * exposed as a property for others to subscribe to.\n *\n * @alias Event\n * @template Listener extends (...args: any[]) => void = (...args: any[]) => void\n * @constructor\n * @example\n * MyObject.prototype.myListener = function(arg1, arg2) {\n *     this.myArg1Copy = arg1;\n *     this.myArg2Copy = arg2;\n * }\n *\n * const myObjectInstance = new MyObject();\n * const evt = new Cesium.Event();\n * evt.addEventListener(MyObject.prototype.myListener, myObjectInstance);\n * evt.raiseEvent('1', '2');\n * evt.removeEventListener(MyObject.prototype.myListener);\n */\nfunction Event() {\n  /**\n   * @type {Map<Listener,Set<object>>}\n   * @private\n   */\n  this._listeners = new Map();\n  /**\n   * @type {Map<Listener,Set<object>>}\n   * @private\n   */\n  this._toRemove = new Map();\n  /**\n   * @type {Map<Listener,Set<object>>}\n   * @private\n   */\n  this._toAdd = new Map();\n  this._invokingListeners = false;\n  this._listenerCount = 0; // Tracks number of listener + scope pairs\n}\n\nObject.defineProperties(Event.prototype, {\n  /**\n   * The number of listeners currently subscribed to the event.\n   * @memberof Event.prototype\n   * @type {number}\n   * @readonly\n   */\n  numberOfListeners: {\n    get: function () {\n      return this._listenerCount;\n    },\n  },\n});\n\n/**\n * Registers a callback function to be executed whenever the event is raised.\n * An optional scope can be provided to serve as the <code>this</code> pointer\n * in which the function will execute.\n *\n * @param {Listener} listener The function to be executed when the event is raised.\n * @param {object} [scope] An optional object scope to serve as the <code>this</code>\n *        pointer in which the listener function will execute.\n * @returns {Event.RemoveCallback} A function that will remove this event listener when invoked.\n *\n * @see Event#raiseEvent\n * @see Event#removeEventListener\n */\nEvent.prototype.addEventListener = function (listener, scope) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.func(\"listener\", listener);\n  //>>includeEnd('debug');\n  const event = this;\n\n  const listenerMap = event._invokingListeners\n    ? event._toAdd\n    : event._listeners;\n  const added = addEventListener(this, listenerMap, listener, scope);\n  if (added) {\n    event._listenerCount++;\n  }\n\n  return function () {\n    event.removeEventListener(listener, scope);\n  };\n};\n\nfunction addEventListener(event, listenerMap, listener, scope) {\n  if (!listenerMap.has(listener)) {\n    listenerMap.set(listener, new Set());\n  }\n  const scopes = listenerMap.get(listener);\n  if (!scopes.has(scope)) {\n    scopes.add(scope);\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Unregisters a previously registered callback.\n *\n * @param {Listener} listener The function to be unregistered.\n * @param {object} [scope] The scope that was originally passed to addEventListener.\n * @returns {boolean} <code>true</code> if the listener was removed; <code>false</code> if the listener and scope are not registered with the event.\n *\n * @see Event#addEventListener\n * @see Event#raiseEvent\n */\nEvent.prototype.removeEventListener = function (listener, scope) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.func(\"listener\", listener);\n  //>>includeEnd('debug');\n\n  const removedFromListeners = removeEventListener(\n    this,\n    this._listeners,\n    listener,\n    scope,\n  );\n  const removedFromToAdd = removeEventListener(\n    this,\n    this._toAdd,\n    listener,\n    scope,\n  );\n\n  const removed = removedFromListeners || removedFromToAdd;\n  if (removed) {\n    this._listenerCount--;\n  }\n\n  return removed;\n};\n\nfunction removeEventListener(event, listenerMap, listener, scope) {\n  const scopes = listenerMap.get(listener);\n  if (!scopes || !scopes.has(scope)) {\n    return false;\n  }\n\n  if (event._invokingListeners) {\n    if (!addEventListener(event, event._toRemove, listener, scope)) {\n      // Already marked for removal\n      return false;\n    }\n  } else {\n    scopes.delete(scope);\n    if (scopes.size === 0) {\n      listenerMap.delete(listener);\n    }\n  }\n\n  return true;\n}\n\n/**\n * Raises the event by calling each registered listener with all supplied arguments.\n *\n * @param {...Parameters<Listener>} arguments This method takes any number of parameters and passes them through to the listener functions.\n *\n * @see Event#addEventListener\n * @see Event#removeEventListener\n */\nEvent.prototype.raiseEvent = function () {\n  this._invokingListeners = true;\n\n  for (const [listener, scopes] of this._listeners.entries()) {\n    if (!defined(listener)) {\n      continue;\n    }\n\n    for (const scope of scopes) {\n      listener.apply(scope, arguments);\n    }\n  }\n\n  this._invokingListeners = false;\n\n  // Actually add items marked for addition\n  for (const [listener, scopes] of this._toAdd.entries()) {\n    for (const scope of scopes) {\n      addEventListener(this, this._listeners, listener, scope);\n    }\n  }\n  this._toAdd.clear();\n\n  // Actually remove items marked for removal\n  for (const [listener, scopes] of this._toRemove.entries()) {\n    for (const scope of scopes) {\n      removeEventListener(this, this._listeners, listener, scope);\n    }\n  }\n  this._toRemove.clear();\n};\n\n/**\n * A function that removes a listener.\n * @callback Event.RemoveCallback\n */\n\nexport default Event;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A convenience object that simplifies the common pattern of attaching event listeners\n * to several events, then removing all those listeners at once later, for example, in\n * a destroy method.\n *\n * @alias EventHelper\n * @constructor\n *\n *\n * @example\n * const helper = new Cesium.EventHelper();\n *\n * helper.add(someObject.event, listener1, this);\n * helper.add(otherObject.event, listener2, this);\n *\n * // later...\n * helper.removeAll();\n *\n * @see Event\n */\nfunction EventHelper() {\n  this._removalFunctions = [];\n}\n\n/**\n * Adds a listener to an event, and records the registration to be cleaned up later.\n *\n * @param {Event} event The event to attach to.\n * @param {Function} listener The function to be executed when the event is raised.\n * @param {object} [scope] An optional object scope to serve as the <code>this</code>\n *        pointer in which the listener function will execute.\n * @returns {EventHelper.RemoveCallback} A function that will remove this event listener when invoked.\n *\n * @see Event#addEventListener\n */\nEventHelper.prototype.add = function (event, listener, scope) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(event)) {\n    throw new DeveloperError(\"event is required\");\n  }\n  //>>includeEnd('debug');\n\n  const removalFunction = event.addEventListener(listener, scope);\n  this._removalFunctions.push(removalFunction);\n\n  const that = this;\n  return function () {\n    removalFunction();\n    const removalFunctions = that._removalFunctions;\n    removalFunctions.splice(removalFunctions.indexOf(removalFunction), 1);\n  };\n};\n\n/**\n * Unregisters all previously added listeners.\n *\n * @see Event#removeEventListener\n */\nEventHelper.prototype.removeAll = function () {\n  const removalFunctions = this._removalFunctions;\n  for (let i = 0, len = removalFunctions.length; i < len; ++i) {\n    removalFunctions[i]();\n  }\n  removalFunctions.length = 0;\n};\n\n/**\n * A function that removes a listener.\n * @callback EventHelper.RemoveCallback\n */\nexport default EventHelper;\n","/**\n * Constants to determine how an interpolated value is extrapolated\n * when querying outside the bounds of available data.\n *\n * @enum {number}\n *\n * @see SampledProperty\n */\nconst ExtrapolationType = {\n  /**\n   * No extrapolation occurs.\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n\n  /**\n   * The first or last value is used when outside the range of sample data.\n   *\n   * @type {number}\n   * @constant\n   */\n  HOLD: 1,\n\n  /**\n   * The value is extrapolated.\n   *\n   * @type {number}\n   * @constant\n   */\n  EXTRAPOLATE: 2,\n};\nexport default Object.freeze(ExtrapolationType);\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Fullscreen from \"./Fullscreen.js\";\n\nlet theNavigator;\nif (typeof navigator !== \"undefined\") {\n  theNavigator = navigator;\n} else {\n  theNavigator = {};\n}\n\nfunction extractVersion(versionString) {\n  const parts = versionString.split(\".\");\n  for (let i = 0, len = parts.length; i < len; ++i) {\n    parts[i] = parseInt(parts[i], 10);\n  }\n  return parts;\n}\n\nlet isChromeResult;\nlet chromeVersionResult;\nfunction isChrome() {\n  if (!defined(isChromeResult)) {\n    isChromeResult = false;\n    // Edge contains Chrome in the user agent too\n    if (!isEdge()) {\n      const fields = / Chrome\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n      if (fields !== null) {\n        isChromeResult = true;\n        chromeVersionResult = extractVersion(fields[1]);\n      }\n    }\n  }\n\n  return isChromeResult;\n}\n\nfunction chromeVersion() {\n  return isChrome() && chromeVersionResult;\n}\n\nlet isSafariResult;\nlet safariVersionResult;\nfunction isSafari() {\n  if (!defined(isSafariResult)) {\n    isSafariResult = false;\n\n    // Chrome and Edge contain Safari in the user agent too\n    if (\n      !isChrome() &&\n      !isEdge() &&\n      / Safari\\/[\\.0-9]+/.test(theNavigator.userAgent)\n    ) {\n      const fields = / Version\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n      if (fields !== null) {\n        isSafariResult = true;\n        safariVersionResult = extractVersion(fields[1]);\n      }\n    }\n  }\n\n  return isSafariResult;\n}\n\nfunction safariVersion() {\n  return isSafari() && safariVersionResult;\n}\n\nlet isWebkitResult;\nlet webkitVersionResult;\nfunction isWebkit() {\n  if (!defined(isWebkitResult)) {\n    isWebkitResult = false;\n\n    const fields = / AppleWebKit\\/([\\.0-9]+)(\\+?)/.exec(theNavigator.userAgent);\n    if (fields !== null) {\n      isWebkitResult = true;\n      webkitVersionResult = extractVersion(fields[1]);\n      webkitVersionResult.isNightly = !!fields[2];\n    }\n  }\n\n  return isWebkitResult;\n}\n\nfunction webkitVersion() {\n  return isWebkit() && webkitVersionResult;\n}\n\nlet isEdgeResult;\nlet edgeVersionResult;\nfunction isEdge() {\n  if (!defined(isEdgeResult)) {\n    isEdgeResult = false;\n    const fields = / Edg\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n    if (fields !== null) {\n      isEdgeResult = true;\n      edgeVersionResult = extractVersion(fields[1]);\n    }\n  }\n  return isEdgeResult;\n}\n\nfunction edgeVersion() {\n  return isEdge() && edgeVersionResult;\n}\n\nlet isFirefoxResult;\nlet firefoxVersionResult;\nfunction isFirefox() {\n  if (!defined(isFirefoxResult)) {\n    isFirefoxResult = false;\n\n    const fields = /Firefox\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\n    if (fields !== null) {\n      isFirefoxResult = true;\n      firefoxVersionResult = extractVersion(fields[1]);\n    }\n  }\n  return isFirefoxResult;\n}\n\nlet isWindowsResult;\nfunction isWindows() {\n  if (!defined(isWindowsResult)) {\n    isWindowsResult = /Windows/i.test(theNavigator.appVersion);\n  }\n  return isWindowsResult;\n}\n\nlet isIPadOrIOSResult;\nfunction isIPadOrIOS() {\n  if (!defined(isIPadOrIOSResult)) {\n    isIPadOrIOSResult =\n      navigator.platform === \"iPhone\" ||\n      navigator.platform === \"iPod\" ||\n      navigator.platform === \"iPad\";\n  }\n\n  return isIPadOrIOSResult;\n}\n\nfunction firefoxVersion() {\n  return isFirefox() && firefoxVersionResult;\n}\n\nlet hasPointerEvents;\nfunction supportsPointerEvents() {\n  if (!defined(hasPointerEvents)) {\n    //While navigator.pointerEnabled is deprecated in the W3C specification\n    //we still need to use it if it exists in order to support browsers\n    //that rely on it, such as the Windows WebBrowser control which defines\n    //PointerEvent but sets navigator.pointerEnabled to false.\n\n    //Firefox disabled because of https://github.com/CesiumGS/cesium/issues/6372\n    hasPointerEvents =\n      !isFirefox() &&\n      typeof PointerEvent !== \"undefined\" &&\n      (!defined(theNavigator.pointerEnabled) || theNavigator.pointerEnabled);\n  }\n  return hasPointerEvents;\n}\n\nlet imageRenderingValueResult;\nlet supportsImageRenderingPixelatedResult;\nfunction supportsImageRenderingPixelated() {\n  if (!defined(supportsImageRenderingPixelatedResult)) {\n    const canvas = document.createElement(\"canvas\");\n    canvas.setAttribute(\n      \"style\",\n      \"image-rendering: -moz-crisp-edges;\" + \"image-rendering: pixelated;\",\n    );\n    //canvas.style.imageRendering will be undefined, null or an empty string on unsupported browsers.\n    const tmp = canvas.style.imageRendering;\n    supportsImageRenderingPixelatedResult = defined(tmp) && tmp !== \"\";\n    if (supportsImageRenderingPixelatedResult) {\n      imageRenderingValueResult = tmp;\n    }\n  }\n  return supportsImageRenderingPixelatedResult;\n}\n\nfunction imageRenderingValue() {\n  return supportsImageRenderingPixelated()\n    ? imageRenderingValueResult\n    : undefined;\n}\n\nfunction supportsWebP() {\n  //>>includeStart('debug', pragmas.debug);\n  if (!supportsWebP.initialized) {\n    throw new DeveloperError(\n      \"You must call FeatureDetection.supportsWebP.initialize and wait for the promise to resolve before calling FeatureDetection.supportsWebP\",\n    );\n  }\n  //>>includeEnd('debug');\n  return supportsWebP._result;\n}\nsupportsWebP._promise = undefined;\nsupportsWebP._result = undefined;\nsupportsWebP.initialize = function () {\n  // From https://developers.google.com/speed/webp/faq#how_can_i_detect_browser_support_for_webp\n  if (defined(supportsWebP._promise)) {\n    return supportsWebP._promise;\n  }\n\n  supportsWebP._promise = new Promise((resolve) => {\n    const image = new Image();\n    image.onload = function () {\n      supportsWebP._result = image.width > 0 && image.height > 0;\n      resolve(supportsWebP._result);\n    };\n\n    image.onerror = function () {\n      supportsWebP._result = false;\n      resolve(supportsWebP._result);\n    };\n    image.src =\n      \"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\";\n  });\n\n  return supportsWebP._promise;\n};\nObject.defineProperties(supportsWebP, {\n  initialized: {\n    get: function () {\n      return defined(supportsWebP._result);\n    },\n  },\n});\n\nconst typedArrayTypes = [];\nif (typeof ArrayBuffer !== \"undefined\") {\n  typedArrayTypes.push(\n    Int8Array,\n    Uint8Array,\n    Int16Array,\n    Uint16Array,\n    Int32Array,\n    Uint32Array,\n    Float32Array,\n    Float64Array,\n  );\n\n  if (typeof Uint8ClampedArray !== \"undefined\") {\n    typedArrayTypes.push(Uint8ClampedArray);\n  }\n\n  if (typeof Uint8ClampedArray !== \"undefined\") {\n    typedArrayTypes.push(Uint8ClampedArray);\n  }\n\n  if (typeof BigInt64Array !== \"undefined\") {\n    typedArrayTypes.push(BigInt64Array);\n  }\n\n  if (typeof BigUint64Array !== \"undefined\") {\n    typedArrayTypes.push(BigUint64Array);\n  }\n}\n\n/**\n * A set of functions to detect whether the current browser supports\n * various features.\n *\n * @namespace FeatureDetection\n */\nconst FeatureDetection = {\n  isChrome: isChrome,\n  chromeVersion: chromeVersion,\n  isSafari: isSafari,\n  safariVersion: safariVersion,\n  isWebkit: isWebkit,\n  webkitVersion: webkitVersion,\n\n  isEdge: isEdge,\n  edgeVersion: edgeVersion,\n  isFirefox: isFirefox,\n  firefoxVersion: firefoxVersion,\n  isWindows: isWindows,\n  isIPadOrIOS: isIPadOrIOS,\n  hardwareConcurrency: theNavigator.hardwareConcurrency ?? 3,\n  supportsPointerEvents: supportsPointerEvents,\n  supportsImageRenderingPixelated: supportsImageRenderingPixelated,\n  supportsWebP: supportsWebP,\n  imageRenderingValue: imageRenderingValue,\n  typedArrayTypes: typedArrayTypes,\n};\n\n/**\n * Detects whether the current browser supports Basis Universal textures and the web assembly modules needed to transcode them.\n *\n * @param {Scene} scene\n * @returns {boolean} true if the browser supports web assembly modules and the scene supports Basis Universal textures, false if not.\n */\nFeatureDetection.supportsBasis = function (scene) {\n  return FeatureDetection.supportsWebAssembly() && scene.context.supportsBasis;\n};\n\n/**\n * Detects whether the current browser supports the full screen standard.\n *\n * @returns {boolean} true if the browser supports the full screen standard, false if not.\n *\n * @see Fullscreen\n * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification}\n */\nFeatureDetection.supportsFullscreen = function () {\n  return Fullscreen.supportsFullscreen();\n};\n\n/**\n * Detects whether the current browser supports typed arrays.\n *\n * @returns {boolean} true if the browser supports typed arrays, false if not.\n *\n * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification}\n */\nFeatureDetection.supportsTypedArrays = function () {\n  return typeof ArrayBuffer !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports BigInt64Array typed arrays.\n *\n * @returns {boolean} true if the browser supports BigInt64Array typed arrays, false if not.\n *\n * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification}\n */\nFeatureDetection.supportsBigInt64Array = function () {\n  return typeof BigInt64Array !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports BigUint64Array typed arrays.\n *\n * @returns {boolean} true if the browser supports BigUint64Array typed arrays, false if not.\n *\n * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification}\n */\nFeatureDetection.supportsBigUint64Array = function () {\n  return typeof BigUint64Array !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports BigInt.\n *\n * @returns {boolean} true if the browser supports BigInt, false if not.\n *\n * @see {@link https://tc39.es/ecma262/#sec-bigint-objects|BigInt Specification}\n */\nFeatureDetection.supportsBigInt = function () {\n  return typeof BigInt !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports Web Workers.\n *\n * @returns {boolean} true if the browsers supports Web Workers, false if not.\n *\n * @see {@link http://www.w3.org/TR/workers/}\n */\nFeatureDetection.supportsWebWorkers = function () {\n  return typeof Worker !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports Web Assembly.\n *\n * @returns {boolean} true if the browsers supports Web Assembly, false if not.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/WebAssembly}\n */\nFeatureDetection.supportsWebAssembly = function () {\n  return typeof WebAssembly !== \"undefined\";\n};\n\n/**\n * Detects whether the current browser supports a WebGL2 rendering context for the specified scene.\n *\n * @param {Scene} scene the Cesium scene specifying the rendering context\n * @returns {boolean} true if the browser supports a WebGL2 rendering context, false if not.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext|WebGL2RenderingContext}\n */\nFeatureDetection.supportsWebgl2 = function (scene) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  return scene.context.webgl2;\n};\n\n/**\n * Detects whether the current browser supports ECMAScript modules in web workers.\n * @returns {boolean} true if the browser supports ECMAScript modules in web workers.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Worker|Worker}\n */\nFeatureDetection.supportsEsmWebWorkers = function () {\n  return !isFirefox() || parseInt(firefoxVersionResult) >= 114;\n};\n\nexport default FeatureDetection;\n","/**\n * Utilities helpful for setting a default value for a parameter.\n *\n * @namespace Frozen\n */\nconst Frozen = {};\n\n/**\n * A frozen empty object that can be used as the default value for options passed as\n * an object literal.\n * @type {object}\n * @memberof Frozen\n */\nFrozen.EMPTY_OBJECT = Object.freeze({});\n\n/**\n * A frozen empty array that can be used as the default value for options passed as\n * an array literal.\n * @type {array}\n * @memberof Frozen\n */\nFrozen.EMPTY_ARRAY = Object.freeze([]);\n\nexport default Frozen;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport OrthographicFrustum from \"./OrthographicFrustum.js\";\nimport PerspectiveFrustum from \"./PerspectiveFrustum.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst PERSPECTIVE = 0;\nconst ORTHOGRAPHIC = 1;\n\n/**\n * Describes a frustum at the given the origin and orientation.\n *\n * @alias FrustumGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum.\n * @param {Cartesian3} options.origin The origin of the frustum.\n * @param {Quaternion} options.orientation The orientation of the frustum.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n */\nfunction FrustumGeometry(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.frustum\", options.frustum);\n  Check.typeOf.object(\"options.origin\", options.origin);\n  Check.typeOf.object(\"options.orientation\", options.orientation);\n  //>>includeEnd('debug');\n\n  const frustum = options.frustum;\n  const orientation = options.orientation;\n  const origin = options.origin;\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n\n  // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by\n  // creating multiple FrustumGeometry objects. This way the near plane of one frustum doesn't overlap\n  // the far plane of another.\n  const drawNearPlane = options._drawNearPlane ?? true;\n\n  let frustumType;\n  let frustumPackedLength;\n  if (frustum instanceof PerspectiveFrustum) {\n    frustumType = PERSPECTIVE;\n    frustumPackedLength = PerspectiveFrustum.packedLength;\n  } else if (frustum instanceof OrthographicFrustum) {\n    frustumType = ORTHOGRAPHIC;\n    frustumPackedLength = OrthographicFrustum.packedLength;\n  }\n\n  this._frustumType = frustumType;\n  this._frustum = frustum.clone();\n  this._origin = Cartesian3.clone(origin);\n  this._orientation = Quaternion.clone(orientation);\n  this._drawNearPlane = drawNearPlane;\n  this._vertexFormat = vertexFormat;\n  this._workerName = \"createFrustumGeometry\";\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    2 +\n    frustumPackedLength +\n    Cartesian3.packedLength +\n    Quaternion.packedLength +\n    VertexFormat.packedLength;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {FrustumGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nFrustumGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const frustumType = value._frustumType;\n  const frustum = value._frustum;\n\n  array[startingIndex++] = frustumType;\n\n  if (frustumType === PERSPECTIVE) {\n    PerspectiveFrustum.pack(frustum, array, startingIndex);\n    startingIndex += PerspectiveFrustum.packedLength;\n  } else {\n    OrthographicFrustum.pack(frustum, array, startingIndex);\n    startingIndex += OrthographicFrustum.packedLength;\n  }\n\n  Cartesian3.pack(value._origin, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n  Quaternion.pack(value._orientation, array, startingIndex);\n  startingIndex += Quaternion.packedLength;\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n  array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0;\n\n  return array;\n};\n\nconst scratchPackPerspective = new PerspectiveFrustum();\nconst scratchPackOrthographic = new OrthographicFrustum();\nconst scratchPackQuaternion = new Quaternion();\nconst scratchPackorigin = new Cartesian3();\nconst scratchVertexFormat = new VertexFormat();\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {FrustumGeometry} [result] The object into which to store the result.\n */\nFrustumGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const frustumType = array[startingIndex++];\n\n  let frustum;\n  if (frustumType === PERSPECTIVE) {\n    frustum = PerspectiveFrustum.unpack(\n      array,\n      startingIndex,\n      scratchPackPerspective,\n    );\n    startingIndex += PerspectiveFrustum.packedLength;\n  } else {\n    frustum = OrthographicFrustum.unpack(\n      array,\n      startingIndex,\n      scratchPackOrthographic,\n    );\n    startingIndex += OrthographicFrustum.packedLength;\n  }\n\n  const origin = Cartesian3.unpack(array, startingIndex, scratchPackorigin);\n  startingIndex += Cartesian3.packedLength;\n  const orientation = Quaternion.unpack(\n    array,\n    startingIndex,\n    scratchPackQuaternion,\n  );\n  startingIndex += Quaternion.packedLength;\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n  const drawNearPlane = array[startingIndex] === 1.0;\n\n  if (!defined(result)) {\n    return new FrustumGeometry({\n      frustum: frustum,\n      origin: origin,\n      orientation: orientation,\n      vertexFormat: vertexFormat,\n      _drawNearPlane: drawNearPlane,\n    });\n  }\n\n  const frustumResult =\n    frustumType === result._frustumType ? result._frustum : undefined;\n  result._frustum = frustum.clone(frustumResult);\n\n  result._frustumType = frustumType;\n  result._origin = Cartesian3.clone(origin, result._origin);\n  result._orientation = Quaternion.clone(orientation, result._orientation);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._drawNearPlane = drawNearPlane;\n\n  return result;\n};\n\nfunction getAttributes(\n  offset,\n  normals,\n  tangents,\n  bitangents,\n  st,\n  normal,\n  tangent,\n  bitangent,\n) {\n  const stOffset = (offset / 3) * 2;\n\n  for (let i = 0; i < 4; ++i) {\n    if (defined(normals)) {\n      normals[offset] = normal.x;\n      normals[offset + 1] = normal.y;\n      normals[offset + 2] = normal.z;\n    }\n    if (defined(tangents)) {\n      tangents[offset] = tangent.x;\n      tangents[offset + 1] = tangent.y;\n      tangents[offset + 2] = tangent.z;\n    }\n    if (defined(bitangents)) {\n      bitangents[offset] = bitangent.x;\n      bitangents[offset + 1] = bitangent.y;\n      bitangents[offset + 2] = bitangent.z;\n    }\n    offset += 3;\n  }\n\n  st[stOffset] = 0.0;\n  st[stOffset + 1] = 0.0;\n  st[stOffset + 2] = 1.0;\n  st[stOffset + 3] = 0.0;\n  st[stOffset + 4] = 1.0;\n  st[stOffset + 5] = 1.0;\n  st[stOffset + 6] = 0.0;\n  st[stOffset + 7] = 1.0;\n}\n\nconst scratchRotationMatrix = new Matrix3();\nconst scratchViewMatrix = new Matrix4();\nconst scratchInverseMatrix = new Matrix4();\n\nconst scratchXDirection = new Cartesian3();\nconst scratchYDirection = new Cartesian3();\nconst scratchZDirection = new Cartesian3();\nconst scratchNegativeX = new Cartesian3();\nconst scratchNegativeY = new Cartesian3();\nconst scratchNegativeZ = new Cartesian3();\n\nconst frustumSplits = new Array(3);\n\nconst frustumCornersNDC = new Array(4);\nfrustumCornersNDC[0] = new Cartesian4(-1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[1] = new Cartesian4(1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[2] = new Cartesian4(1.0, 1.0, 1.0, 1.0);\nfrustumCornersNDC[3] = new Cartesian4(-1.0, 1.0, 1.0, 1.0);\n\nconst scratchFrustumCorners = new Array(4);\nfor (let i = 0; i < 4; ++i) {\n  scratchFrustumCorners[i] = new Cartesian4();\n}\n\nFrustumGeometry._computeNearFarPlanes = function (\n  origin,\n  orientation,\n  frustumType,\n  frustum,\n  positions,\n  xDirection,\n  yDirection,\n  zDirection,\n) {\n  const rotationMatrix = Matrix3.fromQuaternion(\n    orientation,\n    scratchRotationMatrix,\n  );\n  let x = xDirection ?? scratchXDirection;\n  let y = yDirection ?? scratchYDirection;\n  let z = zDirection ?? scratchZDirection;\n\n  x = Matrix3.getColumn(rotationMatrix, 0, x);\n  y = Matrix3.getColumn(rotationMatrix, 1, y);\n  z = Matrix3.getColumn(rotationMatrix, 2, z);\n\n  Cartesian3.normalize(x, x);\n  Cartesian3.normalize(y, y);\n  Cartesian3.normalize(z, z);\n\n  Cartesian3.negate(x, x);\n\n  const view = Matrix4.computeView(origin, z, y, x, scratchViewMatrix);\n\n  let inverseView;\n  let inverseViewProjection;\n  const projection = frustum.projectionMatrix;\n  if (frustumType === PERSPECTIVE) {\n    const viewProjection = Matrix4.multiply(\n      projection,\n      view,\n      scratchInverseMatrix,\n    );\n    inverseViewProjection = Matrix4.inverse(\n      viewProjection,\n      scratchInverseMatrix,\n    );\n  } else {\n    inverseView = Matrix4.inverseTransformation(view, scratchInverseMatrix);\n  }\n\n  if (defined(inverseViewProjection)) {\n    frustumSplits[0] = frustum.near;\n    frustumSplits[1] = frustum.far;\n  } else {\n    frustumSplits[0] = 0.0;\n    frustumSplits[1] = frustum.near;\n    frustumSplits[2] = frustum.far;\n  }\n\n  for (let i = 0; i < 2; ++i) {\n    for (let j = 0; j < 4; ++j) {\n      let corner = Cartesian4.clone(\n        frustumCornersNDC[j],\n        scratchFrustumCorners[j],\n      );\n\n      if (!defined(inverseViewProjection)) {\n        const offCenterFrustum = frustum.offCenterFrustum;\n        if (defined(offCenterFrustum)) {\n          frustum = offCenterFrustum;\n        }\n\n        const near = frustumSplits[i];\n        const far = frustumSplits[i + 1];\n\n        corner.x =\n          (corner.x * (frustum.right - frustum.left) +\n            frustum.left +\n            frustum.right) *\n          0.5;\n        corner.y =\n          (corner.y * (frustum.top - frustum.bottom) +\n            frustum.bottom +\n            frustum.top) *\n          0.5;\n        corner.z = (corner.z * (near - far) - near - far) * 0.5;\n        corner.w = 1.0;\n\n        Matrix4.multiplyByVector(inverseView, corner, corner);\n      } else {\n        corner = Matrix4.multiplyByVector(\n          inverseViewProjection,\n          corner,\n          corner,\n        );\n\n        // Reverse perspective divide\n        const w = 1.0 / corner.w;\n        Cartesian3.multiplyByScalar(corner, w, corner);\n\n        Cartesian3.subtract(corner, origin, corner);\n        Cartesian3.normalize(corner, corner);\n\n        const fac = Cartesian3.dot(z, corner);\n        Cartesian3.multiplyByScalar(corner, frustumSplits[i] / fac, corner);\n        Cartesian3.add(corner, origin, corner);\n      }\n\n      positions[12 * i + j * 3] = corner.x;\n      positions[12 * i + j * 3 + 1] = corner.y;\n      positions[12 * i + j * 3 + 2] = corner.z;\n    }\n  }\n};\n\n/**\n * Computes the geometric representation of a frustum, including its vertices, indices, and a bounding sphere.\n *\n * @param {FrustumGeometry} frustumGeometry A description of the frustum.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nFrustumGeometry.createGeometry = function (frustumGeometry) {\n  const frustumType = frustumGeometry._frustumType;\n  const frustum = frustumGeometry._frustum;\n  const origin = frustumGeometry._origin;\n  const orientation = frustumGeometry._orientation;\n  const drawNearPlane = frustumGeometry._drawNearPlane;\n  const vertexFormat = frustumGeometry._vertexFormat;\n\n  const numberOfPlanes = drawNearPlane ? 6 : 5;\n  let positions = new Float64Array(3 * 4 * 6);\n  FrustumGeometry._computeNearFarPlanes(\n    origin,\n    orientation,\n    frustumType,\n    frustum,\n    positions,\n  );\n\n  // -x plane\n  let offset = 3 * 4 * 2;\n  positions[offset] = positions[3 * 4];\n  positions[offset + 1] = positions[3 * 4 + 1];\n  positions[offset + 2] = positions[3 * 4 + 2];\n  positions[offset + 3] = positions[0];\n  positions[offset + 4] = positions[1];\n  positions[offset + 5] = positions[2];\n  positions[offset + 6] = positions[3 * 3];\n  positions[offset + 7] = positions[3 * 3 + 1];\n  positions[offset + 8] = positions[3 * 3 + 2];\n  positions[offset + 9] = positions[3 * 7];\n  positions[offset + 10] = positions[3 * 7 + 1];\n  positions[offset + 11] = positions[3 * 7 + 2];\n\n  // -y plane\n  offset += 3 * 4;\n  positions[offset] = positions[3 * 5];\n  positions[offset + 1] = positions[3 * 5 + 1];\n  positions[offset + 2] = positions[3 * 5 + 2];\n  positions[offset + 3] = positions[3];\n  positions[offset + 4] = positions[3 + 1];\n  positions[offset + 5] = positions[3 + 2];\n  positions[offset + 6] = positions[0];\n  positions[offset + 7] = positions[1];\n  positions[offset + 8] = positions[2];\n  positions[offset + 9] = positions[3 * 4];\n  positions[offset + 10] = positions[3 * 4 + 1];\n  positions[offset + 11] = positions[3 * 4 + 2];\n\n  // +x plane\n  offset += 3 * 4;\n  positions[offset] = positions[3];\n  positions[offset + 1] = positions[3 + 1];\n  positions[offset + 2] = positions[3 + 2];\n  positions[offset + 3] = positions[3 * 5];\n  positions[offset + 4] = positions[3 * 5 + 1];\n  positions[offset + 5] = positions[3 * 5 + 2];\n  positions[offset + 6] = positions[3 * 6];\n  positions[offset + 7] = positions[3 * 6 + 1];\n  positions[offset + 8] = positions[3 * 6 + 2];\n  positions[offset + 9] = positions[3 * 2];\n  positions[offset + 10] = positions[3 * 2 + 1];\n  positions[offset + 11] = positions[3 * 2 + 2];\n\n  // +y plane\n  offset += 3 * 4;\n  positions[offset] = positions[3 * 2];\n  positions[offset + 1] = positions[3 * 2 + 1];\n  positions[offset + 2] = positions[3 * 2 + 2];\n  positions[offset + 3] = positions[3 * 6];\n  positions[offset + 4] = positions[3 * 6 + 1];\n  positions[offset + 5] = positions[3 * 6 + 2];\n  positions[offset + 6] = positions[3 * 7];\n  positions[offset + 7] = positions[3 * 7 + 1];\n  positions[offset + 8] = positions[3 * 7 + 2];\n  positions[offset + 9] = positions[3 * 3];\n  positions[offset + 10] = positions[3 * 3 + 1];\n  positions[offset + 11] = positions[3 * 3 + 2];\n\n  if (!drawNearPlane) {\n    positions = positions.subarray(3 * 4);\n  }\n\n  const attributes = new GeometryAttributes({\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    }),\n  });\n\n  if (\n    defined(vertexFormat.normal) ||\n    defined(vertexFormat.tangent) ||\n    defined(vertexFormat.bitangent) ||\n    defined(vertexFormat.st)\n  ) {\n    const normals = defined(vertexFormat.normal)\n      ? new Float32Array(3 * 4 * numberOfPlanes)\n      : undefined;\n    const tangents = defined(vertexFormat.tangent)\n      ? new Float32Array(3 * 4 * numberOfPlanes)\n      : undefined;\n    const bitangents = defined(vertexFormat.bitangent)\n      ? new Float32Array(3 * 4 * numberOfPlanes)\n      : undefined;\n    const st = defined(vertexFormat.st)\n      ? new Float32Array(2 * 4 * numberOfPlanes)\n      : undefined;\n\n    const x = scratchXDirection;\n    const y = scratchYDirection;\n    const z = scratchZDirection;\n\n    const negativeX = Cartesian3.negate(x, scratchNegativeX);\n    const negativeY = Cartesian3.negate(y, scratchNegativeY);\n    const negativeZ = Cartesian3.negate(z, scratchNegativeZ);\n\n    offset = 0;\n    if (drawNearPlane) {\n      getAttributes(offset, normals, tangents, bitangents, st, negativeZ, x, y); // near\n      offset += 3 * 4;\n    }\n    getAttributes(offset, normals, tangents, bitangents, st, z, negativeX, y); // far\n    offset += 3 * 4;\n    getAttributes(\n      offset,\n      normals,\n      tangents,\n      bitangents,\n      st,\n      negativeX,\n      negativeZ,\n      y,\n    ); // -x\n    offset += 3 * 4;\n    getAttributes(\n      offset,\n      normals,\n      tangents,\n      bitangents,\n      st,\n      negativeY,\n      negativeZ,\n      negativeX,\n    ); // -y\n    offset += 3 * 4;\n    getAttributes(offset, normals, tangents, bitangents, st, x, z, y); // +x\n    offset += 3 * 4;\n    getAttributes(offset, normals, tangents, bitangents, st, y, z, negativeX); // +y\n\n    if (defined(normals)) {\n      attributes.normal = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: normals,\n      });\n    }\n    if (defined(tangents)) {\n      attributes.tangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: tangents,\n      });\n    }\n    if (defined(bitangents)) {\n      attributes.bitangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: bitangents,\n      });\n    }\n    if (defined(st)) {\n      attributes.st = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 2,\n        values: st,\n      });\n    }\n  }\n\n  const indices = new Uint16Array(6 * numberOfPlanes);\n  for (let i = 0; i < numberOfPlanes; ++i) {\n    const indexOffset = i * 6;\n    const index = i * 4;\n\n    indices[indexOffset] = index;\n    indices[indexOffset + 1] = index + 1;\n    indices[indexOffset + 2] = index + 2;\n    indices[indexOffset + 3] = index;\n    indices[indexOffset + 4] = index + 2;\n    indices[indexOffset + 5] = index + 3;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: BoundingSphere.fromVertices(positions),\n  });\n};\nexport default FrustumGeometry;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport FrustumGeometry from \"./FrustumGeometry.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport OrthographicFrustum from \"./OrthographicFrustum.js\";\nimport PerspectiveFrustum from \"./PerspectiveFrustum.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\n\nconst PERSPECTIVE = 0;\nconst ORTHOGRAPHIC = 1;\n\n/**\n * A description of the outline of a frustum with the given the origin and orientation.\n *\n * @alias FrustumOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum.\n * @param {Cartesian3} options.origin The origin of the frustum.\n * @param {Quaternion} options.orientation The orientation of the frustum.\n */\nfunction FrustumOutlineGeometry(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.frustum\", options.frustum);\n  Check.typeOf.object(\"options.origin\", options.origin);\n  Check.typeOf.object(\"options.orientation\", options.orientation);\n  //>>includeEnd('debug');\n\n  const frustum = options.frustum;\n  const orientation = options.orientation;\n  const origin = options.origin;\n\n  // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by\n  // creating multiple FrustumOutlineGeometrys. This way the near plane of one frustum doesn't overlap\n  // the far plane of another.\n  const drawNearPlane = options._drawNearPlane ?? true;\n\n  let frustumType;\n  let frustumPackedLength;\n  if (frustum instanceof PerspectiveFrustum) {\n    frustumType = PERSPECTIVE;\n    frustumPackedLength = PerspectiveFrustum.packedLength;\n  } else if (frustum instanceof OrthographicFrustum) {\n    frustumType = ORTHOGRAPHIC;\n    frustumPackedLength = OrthographicFrustum.packedLength;\n  }\n\n  this._frustumType = frustumType;\n  this._frustum = frustum.clone();\n  this._origin = Cartesian3.clone(origin);\n  this._orientation = Quaternion.clone(orientation);\n  this._drawNearPlane = drawNearPlane;\n  this._workerName = \"createFrustumOutlineGeometry\";\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    2 + frustumPackedLength + Cartesian3.packedLength + Quaternion.packedLength;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {FrustumOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nFrustumOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const frustumType = value._frustumType;\n  const frustum = value._frustum;\n\n  array[startingIndex++] = frustumType;\n\n  if (frustumType === PERSPECTIVE) {\n    PerspectiveFrustum.pack(frustum, array, startingIndex);\n    startingIndex += PerspectiveFrustum.packedLength;\n  } else {\n    OrthographicFrustum.pack(frustum, array, startingIndex);\n    startingIndex += OrthographicFrustum.packedLength;\n  }\n\n  Cartesian3.pack(value._origin, array, startingIndex);\n  startingIndex += Cartesian3.packedLength;\n  Quaternion.pack(value._orientation, array, startingIndex);\n  startingIndex += Quaternion.packedLength;\n  array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0;\n\n  return array;\n};\n\nconst scratchPackPerspective = new PerspectiveFrustum();\nconst scratchPackOrthographic = new OrthographicFrustum();\nconst scratchPackQuaternion = new Quaternion();\nconst scratchPackorigin = new Cartesian3();\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {FrustumOutlineGeometry} [result] The object into which to store the result.\n */\nFrustumOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const frustumType = array[startingIndex++];\n\n  let frustum;\n  if (frustumType === PERSPECTIVE) {\n    frustum = PerspectiveFrustum.unpack(\n      array,\n      startingIndex,\n      scratchPackPerspective,\n    );\n    startingIndex += PerspectiveFrustum.packedLength;\n  } else {\n    frustum = OrthographicFrustum.unpack(\n      array,\n      startingIndex,\n      scratchPackOrthographic,\n    );\n    startingIndex += OrthographicFrustum.packedLength;\n  }\n\n  const origin = Cartesian3.unpack(array, startingIndex, scratchPackorigin);\n  startingIndex += Cartesian3.packedLength;\n  const orientation = Quaternion.unpack(\n    array,\n    startingIndex,\n    scratchPackQuaternion,\n  );\n  startingIndex += Quaternion.packedLength;\n  const drawNearPlane = array[startingIndex] === 1.0;\n\n  if (!defined(result)) {\n    return new FrustumOutlineGeometry({\n      frustum: frustum,\n      origin: origin,\n      orientation: orientation,\n      _drawNearPlane: drawNearPlane,\n    });\n  }\n\n  const frustumResult =\n    frustumType === result._frustumType ? result._frustum : undefined;\n  result._frustum = frustum.clone(frustumResult);\n\n  result._frustumType = frustumType;\n  result._origin = Cartesian3.clone(origin, result._origin);\n  result._orientation = Quaternion.clone(orientation, result._orientation);\n  result._drawNearPlane = drawNearPlane;\n\n  return result;\n};\n\n/**\n * Computes the geometric representation of a frustum outline, including its vertices, indices, and a bounding sphere.\n *\n * @param {FrustumOutlineGeometry} frustumGeometry A description of the frustum.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nFrustumOutlineGeometry.createGeometry = function (frustumGeometry) {\n  const frustumType = frustumGeometry._frustumType;\n  const frustum = frustumGeometry._frustum;\n  const origin = frustumGeometry._origin;\n  const orientation = frustumGeometry._orientation;\n  const drawNearPlane = frustumGeometry._drawNearPlane;\n\n  const positions = new Float64Array(3 * 4 * 2);\n  FrustumGeometry._computeNearFarPlanes(\n    origin,\n    orientation,\n    frustumType,\n    frustum,\n    positions,\n  );\n\n  const attributes = new GeometryAttributes({\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    }),\n  });\n\n  let offset;\n  let index;\n\n  const numberOfPlanes = drawNearPlane ? 2 : 1;\n  const indices = new Uint16Array(8 * (numberOfPlanes + 1));\n\n  // Build the near/far planes\n  let i = drawNearPlane ? 0 : 1;\n  for (; i < 2; ++i) {\n    offset = drawNearPlane ? i * 8 : 0;\n    index = i * 4;\n\n    indices[offset] = index;\n    indices[offset + 1] = index + 1;\n    indices[offset + 2] = index + 1;\n    indices[offset + 3] = index + 2;\n    indices[offset + 4] = index + 2;\n    indices[offset + 5] = index + 3;\n    indices[offset + 6] = index + 3;\n    indices[offset + 7] = index;\n  }\n\n  // Build the sides of the frustums\n  for (i = 0; i < 2; ++i) {\n    offset = (numberOfPlanes + i) * 8;\n    index = i * 4;\n\n    indices[offset] = index;\n    indices[offset + 1] = index + 4;\n    indices[offset + 2] = index + 1;\n    indices[offset + 3] = index + 5;\n    indices[offset + 4] = index + 2;\n    indices[offset + 5] = index + 6;\n    indices[offset + 6] = index + 3;\n    indices[offset + 7] = index + 7;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: BoundingSphere.fromVertices(positions),\n  });\n};\nexport default FrustumOutlineGeometry;\n","import defined from \"./defined.js\";\n\nlet _supportsFullscreen;\nconst _names = {\n  requestFullscreen: undefined,\n  exitFullscreen: undefined,\n  fullscreenEnabled: undefined,\n  fullscreenElement: undefined,\n  fullscreenchange: undefined,\n  fullscreenerror: undefined,\n};\n\n/**\n * Browser-independent functions for working with the standard fullscreen API.\n *\n * @namespace Fullscreen\n *\n * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification}\n */\nconst Fullscreen = {};\n\nObject.defineProperties(Fullscreen, {\n  /**\n   * The element that is currently fullscreen, if any.  To simply check if the\n   * browser is in fullscreen mode or not, use {@link Fullscreen#fullscreen}.\n   * @memberof Fullscreen\n   * @type {object}\n   * @readonly\n   */\n  element: {\n    get: function () {\n      if (!Fullscreen.supportsFullscreen()) {\n        return undefined;\n      }\n\n      return document[_names.fullscreenElement];\n    },\n  },\n\n  /**\n   * The name of the event on the document that is fired when fullscreen is\n   * entered or exited.  This event name is intended for use with addEventListener.\n   * In your event handler, to determine if the browser is in fullscreen mode or not,\n   * use {@link Fullscreen#fullscreen}.\n   * @memberof Fullscreen\n   * @type {string}\n   * @readonly\n   */\n  changeEventName: {\n    get: function () {\n      if (!Fullscreen.supportsFullscreen()) {\n        return undefined;\n      }\n\n      return _names.fullscreenchange;\n    },\n  },\n\n  /**\n   * The name of the event that is fired when a fullscreen error\n   * occurs.  This event name is intended for use with addEventListener.\n   * @memberof Fullscreen\n   * @type {string}\n   * @readonly\n   */\n  errorEventName: {\n    get: function () {\n      if (!Fullscreen.supportsFullscreen()) {\n        return undefined;\n      }\n\n      return _names.fullscreenerror;\n    },\n  },\n\n  /**\n   * Determine whether the browser will allow an element to be made fullscreen, or not.\n   * For example, by default, iframes cannot go fullscreen unless the containing page\n   * adds an \"allowfullscreen\" attribute (or prefixed equivalent).\n   * @memberof Fullscreen\n   * @type {boolean}\n   * @readonly\n   */\n  enabled: {\n    get: function () {\n      if (!Fullscreen.supportsFullscreen()) {\n        return undefined;\n      }\n\n      return document[_names.fullscreenEnabled];\n    },\n  },\n\n  /**\n   * Determines if the browser is currently in fullscreen mode.\n   * @memberof Fullscreen\n   * @type {boolean}\n   * @readonly\n   */\n  fullscreen: {\n    get: function () {\n      if (!Fullscreen.supportsFullscreen()) {\n        return undefined;\n      }\n\n      return Fullscreen.element !== null;\n    },\n  },\n});\n\n/**\n * Detects whether the browser supports the standard fullscreen API.\n *\n * @returns {boolean} <code>true</code> if the browser supports the standard fullscreen API,\n * <code>false</code> otherwise.\n */\nFullscreen.supportsFullscreen = function () {\n  if (defined(_supportsFullscreen)) {\n    return _supportsFullscreen;\n  }\n\n  _supportsFullscreen = false;\n\n  const body = document.body;\n  if (typeof body.requestFullscreen === \"function\") {\n    // go with the unprefixed, standard set of names\n    _names.requestFullscreen = \"requestFullscreen\";\n    _names.exitFullscreen = \"exitFullscreen\";\n    _names.fullscreenEnabled = \"fullscreenEnabled\";\n    _names.fullscreenElement = \"fullscreenElement\";\n    _names.fullscreenchange = \"fullscreenchange\";\n    _names.fullscreenerror = \"fullscreenerror\";\n    _supportsFullscreen = true;\n    return _supportsFullscreen;\n  }\n\n  //check for the correct combination of prefix plus the various names that browsers use\n  const prefixes = [\"webkit\", \"moz\", \"o\", \"ms\", \"khtml\"];\n  let name;\n  for (let i = 0, len = prefixes.length; i < len; ++i) {\n    const prefix = prefixes[i];\n\n    // casing of Fullscreen differs across browsers\n    name = `${prefix}RequestFullscreen`;\n    if (typeof body[name] === \"function\") {\n      _names.requestFullscreen = name;\n      _supportsFullscreen = true;\n    } else {\n      name = `${prefix}RequestFullScreen`;\n      if (typeof body[name] === \"function\") {\n        _names.requestFullscreen = name;\n        _supportsFullscreen = true;\n      }\n    }\n\n    // disagreement about whether it's \"exit\" as per spec, or \"cancel\"\n    name = `${prefix}ExitFullscreen`;\n    if (typeof document[name] === \"function\") {\n      _names.exitFullscreen = name;\n    } else {\n      name = `${prefix}CancelFullScreen`;\n      if (typeof document[name] === \"function\") {\n        _names.exitFullscreen = name;\n      }\n    }\n\n    // casing of Fullscreen differs across browsers\n    name = `${prefix}FullscreenEnabled`;\n    if (document[name] !== undefined) {\n      _names.fullscreenEnabled = name;\n    } else {\n      name = `${prefix}FullScreenEnabled`;\n      if (document[name] !== undefined) {\n        _names.fullscreenEnabled = name;\n      }\n    }\n\n    // casing of Fullscreen differs across browsers\n    name = `${prefix}FullscreenElement`;\n    if (document[name] !== undefined) {\n      _names.fullscreenElement = name;\n    } else {\n      name = `${prefix}FullScreenElement`;\n      if (document[name] !== undefined) {\n        _names.fullscreenElement = name;\n      }\n    }\n\n    // thankfully, event names are all lowercase per spec\n    name = `${prefix}fullscreenchange`;\n    // event names do not have 'on' in the front, but the property on the document does\n    if (document[`on${name}`] !== undefined) {\n      //except on IE\n      if (prefix === \"ms\") {\n        name = \"MSFullscreenChange\";\n      }\n      _names.fullscreenchange = name;\n    }\n\n    name = `${prefix}fullscreenerror`;\n    if (document[`on${name}`] !== undefined) {\n      //except on IE\n      if (prefix === \"ms\") {\n        name = \"MSFullscreenError\";\n      }\n      _names.fullscreenerror = name;\n    }\n  }\n\n  return _supportsFullscreen;\n};\n\n/**\n * Asynchronously requests the browser to enter fullscreen mode on the given element.\n * If fullscreen mode is not supported by the browser, does nothing.\n *\n * @param {object} element The HTML element which will be placed into fullscreen mode.\n * @param {object} [vrDevice] The HMDVRDevice device.\n *\n * @example\n * // Put the entire page into fullscreen.\n * Cesium.Fullscreen.requestFullscreen(document.body)\n *\n * // Place only the Cesium canvas into fullscreen.\n * Cesium.Fullscreen.requestFullscreen(scene.canvas)\n */\nFullscreen.requestFullscreen = function (element, vrDevice) {\n  if (!Fullscreen.supportsFullscreen()) {\n    return;\n  }\n\n  element[_names.requestFullscreen]({ vrDisplay: vrDevice });\n};\n\n/**\n * Asynchronously exits fullscreen mode.  If the browser is not currently\n * in fullscreen, or if fullscreen mode is not supported by the browser, does nothing.\n */\nFullscreen.exitFullscreen = function () {\n  if (!Fullscreen.supportsFullscreen()) {\n    return;\n  }\n\n  document[_names.exitFullscreen]();\n};\n\n//For unit tests\nFullscreen._names = _names;\nexport default Fullscreen;\n","/**\n * The type of geocoding to be performed by a {@link GeocoderService}.\n * @enum {number}\n * @see Geocoder\n */\nconst GeocodeType = {\n  /**\n   * Perform a search where the input is considered complete.\n   *\n   * @type {number}\n   * @constant\n   */\n  SEARCH: 0,\n\n  /**\n   * Perform an auto-complete using partial input, typically\n   * reserved for providing possible results as a user is typing.\n   *\n   * @type {number}\n   * @constant\n   */\n  AUTOCOMPLETE: 1,\n};\nexport default Object.freeze(GeocodeType);\n","import Credit from \"./Credit.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * @typedef {object} GeocoderService.Result\n * @property {string} displayName The display name for a location\n * @property {Rectangle|Cartesian3} destination The bounding box for a location\n * @property {object[]} [attributions]\n */\n\n/**\n * Provides geocoding through an external service. This type describes an interface and\n * is not intended to be used.\n * @alias GeocoderService\n * @constructor\n *\n * @see BingMapsGeocoderService\n * @see PeliasGeocoderService\n * @see OpenCageGeocoderService\n */\nfunction GeocoderService() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(GeocoderService.prototype, {\n  /**\n   * Gets the credit to display after a geocode is performed. Typically this is used to credit\n   * the geocoder service.\n   * @memberof GeocoderService.prototype\n   * @type {Credit|undefined}\n   * @readonly\n   */\n  credit: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Parses credits from the geocoder result attributions, if present.\n * @param {GeocoderService.Result} geocoderResult The geocoder result\n * @returns {Credit[]|undefined} A list of credits if present in the result, otherwise undefined\n */\nGeocoderService.getCreditsFromResult = function (geocoderResult) {\n  if (defined(geocoderResult.attributions)) {\n    return geocoderResult.attributions.map(Credit.getIonCredit);\n  }\n\n  return undefined;\n};\n\n/**\n * @function\n *\n * @param {string} query The query to be sent to the geocoder service\n * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform.\n * @returns {Promise<GeocoderService.Result[]>}\n */\nGeocoderService.prototype.geocode = DeveloperError.throwInstantiationError;\nexport default GeocoderService;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\n\n/**\n * A simple map projection where longitude and latitude are linearly mapped to X and Y by multiplying\n * them by the {@link Ellipsoid#maximumRadius}.  This projection\n * is commonly known as geographic, equirectangular, equidistant cylindrical, or plate carrée. When using the WGS84 ellipsoid, it\n * is also known as EPSG:4326.\n *\n * @alias GeographicProjection\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.\n *\n * @see WebMercatorProjection\n */\nfunction GeographicProjection(ellipsoid) {\n  this._ellipsoid = ellipsoid ?? Ellipsoid.default;\n  this._semimajorAxis = this._ellipsoid.maximumRadius;\n  this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis;\n}\n\nObject.defineProperties(GeographicProjection.prototype, {\n  /**\n   * Gets the {@link Ellipsoid}.\n   *\n   * @memberof GeographicProjection.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n});\n\n/**\n * Projects a set of {@link Cartographic} coordinates, in radians, to map coordinates, in meters.\n * X and Y are the longitude and latitude, respectively, multiplied by the maximum radius of the\n * ellipsoid.  Z is the unmodified height.\n *\n * @param {Cartographic} cartographic The coordinates to project.\n * @param {Cartesian3} [result] An instance into which to copy the result.  If this parameter is\n *        undefined, a new instance is created and returned.\n * @returns {Cartesian3} The projected coordinates.  If the result parameter is not undefined, the\n *          coordinates are copied there and that instance is returned.  Otherwise, a new instance is\n *          created and returned.\n */\nGeographicProjection.prototype.project = function (cartographic, result) {\n  // Actually this is the special case of equidistant cylindrical called the plate carree\n  const semimajorAxis = this._semimajorAxis;\n  const x = cartographic.longitude * semimajorAxis;\n  const y = cartographic.latitude * semimajorAxis;\n  const z = cartographic.height;\n\n  if (!defined(result)) {\n    return new Cartesian3(x, y, z);\n  }\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return result;\n};\n\n/**\n * Unprojects a set of projected {@link Cartesian3} coordinates, in meters, to {@link Cartographic}\n * coordinates, in radians.  Longitude and Latitude are the X and Y coordinates, respectively,\n * divided by the maximum radius of the ellipsoid.  Height is the unmodified Z coordinate.\n *\n * @param {Cartesian3} cartesian The Cartesian position to unproject with height (z) in meters.\n * @param {Cartographic} [result] An instance into which to copy the result.  If this parameter is\n *        undefined, a new instance is created and returned.\n * @returns {Cartographic} The unprojected coordinates.  If the result parameter is not undefined, the\n *          coordinates are copied there and that instance is returned.  Otherwise, a new instance is\n *          created and returned.\n */\nGeographicProjection.prototype.unproject = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required\");\n  }\n  //>>includeEnd('debug');\n\n  const oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis;\n  const longitude = cartesian.x * oneOverEarthSemimajorAxis;\n  const latitude = cartesian.y * oneOverEarthSemimajorAxis;\n  const height = cartesian.z;\n\n  if (!defined(result)) {\n    return new Cartographic(longitude, latitude, height);\n  }\n\n  result.longitude = longitude;\n  result.latitude = latitude;\n  result.height = height;\n  return result;\n};\n\nexport default GeographicProjection;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * A tiling scheme for geometry referenced to a simple {@link GeographicProjection} where\n * longitude and latitude are directly mapped to X and Y.  This projection is commonly\n * known as geographic, equirectangular, equidistant cylindrical, or plate carrée.\n *\n * @alias GeographicTilingScheme\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid whose surface is being tiled. Defaults to\n * the default ellipsoid.\n * @param {Rectangle} [options.rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the tiling scheme.\n * @param {number} [options.numberOfLevelZeroTilesX=2] The number of tiles in the X direction at level zero of\n * the tile tree.\n * @param {number} [options.numberOfLevelZeroTilesY=1] The number of tiles in the Y direction at level zero of\n * the tile tree.\n */\nfunction GeographicTilingScheme(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  this._rectangle = options.rectangle ?? Rectangle.MAX_VALUE;\n  this._projection = new GeographicProjection(this._ellipsoid);\n  this._numberOfLevelZeroTilesX = options.numberOfLevelZeroTilesX ?? 2;\n  this._numberOfLevelZeroTilesY = options.numberOfLevelZeroTilesY ?? 1;\n}\n\nObject.defineProperties(GeographicTilingScheme.prototype, {\n  /**\n   * Gets the ellipsoid that is tiled by this tiling scheme.\n   * @memberof GeographicTilingScheme.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, covered by this tiling scheme.\n   * @memberof GeographicTilingScheme.prototype\n   * @type {Rectangle}\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n\n  /**\n   * Gets the map projection used by this tiling scheme.\n   * @memberof GeographicTilingScheme.prototype\n   * @type {MapProjection}\n   */\n  projection: {\n    get: function () {\n      return this._projection;\n    },\n  },\n});\n\n/**\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\n *\n * @param {number} level The level-of-detail.\n * @returns {number} The number of tiles in the X direction at the given level.\n */\nGeographicTilingScheme.prototype.getNumberOfXTilesAtLevel = function (level) {\n  return this._numberOfLevelZeroTilesX << level;\n};\n\n/**\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\n *\n * @param {number} level The level-of-detail.\n * @returns {number} The number of tiles in the Y direction at the given level.\n */\nGeographicTilingScheme.prototype.getNumberOfYTilesAtLevel = function (level) {\n  return this._numberOfLevelZeroTilesY << level;\n};\n\n/**\n * Transforms a rectangle specified in geodetic radians to the native coordinate system\n * of this tiling scheme.\n *\n * @param {Rectangle} rectangle The rectangle to transform.\n * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result'\n *          is undefined.\n */\nGeographicTilingScheme.prototype.rectangleToNativeRectangle = function (\n  rectangle,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  const west = CesiumMath.toDegrees(rectangle.west);\n  const south = CesiumMath.toDegrees(rectangle.south);\n  const east = CesiumMath.toDegrees(rectangle.east);\n  const north = CesiumMath.toDegrees(rectangle.north);\n\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n  return result;\n};\n\n/**\n * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates\n * of the tiling scheme.\n *\n * @param {number} x The integer x coordinate of the tile.\n * @param {number} y The integer y coordinate of the tile.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {object} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n *          if 'result' is undefined.\n */\nGeographicTilingScheme.prototype.tileXYToNativeRectangle = function (\n  x,\n  y,\n  level,\n  result,\n) {\n  const rectangleRadians = this.tileXYToRectangle(x, y, level, result);\n  rectangleRadians.west = CesiumMath.toDegrees(rectangleRadians.west);\n  rectangleRadians.south = CesiumMath.toDegrees(rectangleRadians.south);\n  rectangleRadians.east = CesiumMath.toDegrees(rectangleRadians.east);\n  rectangleRadians.north = CesiumMath.toDegrees(rectangleRadians.north);\n  return rectangleRadians;\n};\n\n/**\n * Converts tile x, y coordinates and level to a cartographic rectangle in radians.\n *\n * @param {number} x The integer x coordinate of the tile.\n * @param {number} y The integer y coordinate of the tile.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {object} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n *          if 'result' is undefined.\n */\nGeographicTilingScheme.prototype.tileXYToRectangle = function (\n  x,\n  y,\n  level,\n  result,\n) {\n  const rectangle = this._rectangle;\n\n  const xTiles = this.getNumberOfXTilesAtLevel(level);\n  const yTiles = this.getNumberOfYTilesAtLevel(level);\n\n  const xTileWidth = rectangle.width / xTiles;\n  const west = x * xTileWidth + rectangle.west;\n  const east = (x + 1) * xTileWidth + rectangle.west;\n\n  const yTileHeight = rectangle.height / yTiles;\n  const north = rectangle.north - y * yTileHeight;\n  const south = rectangle.north - (y + 1) * yTileHeight;\n\n  if (!defined(result)) {\n    result = new Rectangle(west, south, east, north);\n  }\n\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n  return result;\n};\n\n/**\n * Calculates the tile x, y coordinates of the tile containing\n * a given cartographic position.\n *\n * @param {Cartographic} position The position.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates\n *          if 'result' is undefined.\n */\nGeographicTilingScheme.prototype.positionToTileXY = function (\n  position,\n  level,\n  result,\n) {\n  const rectangle = this._rectangle;\n  if (!Rectangle.contains(rectangle, position)) {\n    // outside the bounds of the tiling scheme\n    return undefined;\n  }\n\n  const xTiles = this.getNumberOfXTilesAtLevel(level);\n  const yTiles = this.getNumberOfYTilesAtLevel(level);\n\n  const xTileWidth = rectangle.width / xTiles;\n  const yTileHeight = rectangle.height / yTiles;\n\n  let longitude = position.longitude;\n  if (rectangle.east < rectangle.west) {\n    longitude += CesiumMath.TWO_PI;\n  }\n\n  let xTileCoordinate = ((longitude - rectangle.west) / xTileWidth) | 0;\n  if (xTileCoordinate >= xTiles) {\n    xTileCoordinate = xTiles - 1;\n  }\n\n  let yTileCoordinate =\n    ((rectangle.north - position.latitude) / yTileHeight) | 0;\n  if (yTileCoordinate >= yTiles) {\n    yTileCoordinate = yTiles - 1;\n  }\n\n  if (!defined(result)) {\n    return new Cartesian2(xTileCoordinate, yTileCoordinate);\n  }\n\n  result.x = xTileCoordinate;\n  result.y = yTileCoordinate;\n  return result;\n};\nexport default GeographicTilingScheme;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport GeometryType from \"./GeometryType.js\";\nimport Matrix2 from \"./Matrix2.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Transforms from \"./Transforms.js\";\n\n/**\n * A geometry representation with attributes forming vertices and optional index data\n * defining primitives.  Geometries and an {@link Appearance}, which describes the shading,\n * can be assigned to a {@link Primitive} for visualization.  A <code>Primitive</code> can\n * be created from many heterogeneous - in many cases - geometries for performance.\n * <p>\n * Geometries can be transformed and optimized using functions in {@link GeometryPipeline}.\n * </p>\n *\n * @alias Geometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {GeometryAttributes} options.attributes Attributes, which make up the geometry's vertices.\n * @param {PrimitiveType} [options.primitiveType=PrimitiveType.TRIANGLES] The type of primitives in the geometry.\n * @param {Uint16Array|Uint32Array} [options.indices] Optional index data that determines the primitives in the geometry.\n * @param {BoundingSphere} [options.boundingSphere] An optional bounding sphere that fully enclosed the geometry.\n *\n * @see PolygonGeometry\n * @see RectangleGeometry\n * @see EllipseGeometry\n * @see CircleGeometry\n * @see WallGeometry\n * @see SimplePolylineGeometry\n * @see BoxGeometry\n * @see EllipsoidGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=geometry-and-appearances|Geometry and Appearances Demo}\n *\n * @example\n * // Create geometry with a position attribute and indexed lines.\n * const positions = new Float64Array([\n *   0.0, 0.0, 0.0,\n *   7500000.0, 0.0, 0.0,\n *   0.0, 7500000.0, 0.0\n * ]);\n *\n * const geometry = new Cesium.Geometry({\n *   attributes : {\n *     position : new Cesium.GeometryAttribute({\n *       componentDatatype : Cesium.ComponentDatatype.DOUBLE,\n *       componentsPerAttribute : 3,\n *       values : positions\n *     })\n *   },\n *   indices : new Uint16Array([0, 1, 1, 2, 2, 0]),\n *   primitiveType : Cesium.PrimitiveType.LINES,\n *   boundingSphere : Cesium.BoundingSphere.fromVertices(positions)\n * });\n */\nfunction Geometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.attributes\", options.attributes);\n  //>>includeEnd('debug');\n\n  /**\n   * Attributes, which make up the geometry's vertices.  Each property in this object corresponds to a\n   * {@link GeometryAttribute} containing the attribute's data.\n   * <p>\n   * Attributes are always stored non-interleaved in a Geometry.\n   * </p>\n   * <p>\n   * There are reserved attribute names with well-known semantics.  The following attributes\n   * are created by a Geometry (depending on the provided {@link VertexFormat}.\n   * <ul>\n   *    <li><code>position</code> - 3D vertex position.  64-bit floating-point (for precision).  3 components per attribute.  See {@link VertexFormat#position}.</li>\n   *    <li><code>normal</code> - Normal (normalized), commonly used for lighting.  32-bit floating-point.  3 components per attribute.  See {@link VertexFormat#normal}.</li>\n   *    <li><code>st</code> - 2D texture coordinate.  32-bit floating-point.  2 components per attribute.  See {@link VertexFormat#st}.</li>\n   *    <li><code>bitangent</code> - Bitangent (normalized), used for tangent-space effects like bump mapping.  32-bit floating-point.  3 components per attribute.  See {@link VertexFormat#bitangent}.</li>\n   *    <li><code>tangent</code> - Tangent (normalized), used for tangent-space effects like bump mapping.  32-bit floating-point.  3 components per attribute.  See {@link VertexFormat#tangent}.</li>\n   * </ul>\n   * </p>\n   * <p>\n   * The following attribute names are generally not created by a Geometry, but are added\n   * to a Geometry by a {@link Primitive} or {@link GeometryPipeline} functions to prepare\n   * the geometry for rendering.\n   * <ul>\n   *    <li><code>position3DHigh</code> - High 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}.  32-bit floating-point.  4 components per attribute.</li>\n   *    <li><code>position3DLow</code> - Low 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}.  32-bit floating-point.  4 components per attribute.</li>\n   *    <li><code>position2DHigh</code> - High 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}.  32-bit floating-point.  4 components per attribute.</li>\n   *    <li><code>position2DLow</code> - Low 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}.  32-bit floating-point.  4 components per attribute.</li>\n   *    <li><code>color</code> - RGBA color (normalized) usually from {@link GeometryInstance#color}.  32-bit floating-point.  4 components per attribute.</li>\n   *    <li><code>pickColor</code> - RGBA color used for picking.  32-bit floating-point.  4 components per attribute.</li>\n   * </ul>\n   * </p>\n   *\n   * @type GeometryAttributes\n   *\n   *\n   * @example\n   * geometry.attributes.position = new Cesium.GeometryAttribute({\n   *   componentDatatype : Cesium.ComponentDatatype.FLOAT,\n   *   componentsPerAttribute : 3,\n   *   values : new Float32Array(0)\n   * });\n   *\n   * @see GeometryAttribute\n   * @see VertexFormat\n   */\n  this.attributes = options.attributes;\n\n  /**\n   * Optional index data that - along with {@link Geometry#primitiveType} -\n   * determines the primitives in the geometry.\n   *\n   * @type {Array|undefined}\n   *\n   * @default undefined\n   */\n  this.indices = options.indices;\n\n  /**\n   * The type of primitives in the geometry.  This is most often {@link PrimitiveType.TRIANGLES},\n   * but can varying based on the specific geometry.\n   *\n   * @type {PrimitiveType|undefined}\n   *\n   * @default PrimitiveType.TRIANGLES\n   */\n  this.primitiveType = options.primitiveType ?? PrimitiveType.TRIANGLES;\n\n  /**\n   * An optional bounding sphere that fully encloses the geometry.  This is\n   * commonly used for culling.\n   *\n   * @type {BoundingSphere|undefined}\n   *\n   * @default undefined\n   */\n  this.boundingSphere = options.boundingSphere;\n\n  /**\n   * @private\n   */\n  this.geometryType = options.geometryType ?? GeometryType.NONE;\n\n  /**\n   * @private\n   */\n  this.boundingSphereCV = options.boundingSphereCV;\n\n  /**\n   * Used for computing the bounding sphere for geometry using the applyOffset vertex attribute\n   * @private\n   */\n  this.offsetAttribute = options.offsetAttribute;\n}\n\n/**\n * Computes the number of vertices in a geometry.  The runtime is linear with\n * respect to the number of attributes in a vertex, not the number of vertices.\n *\n * @param {Geometry} geometry The geometry.\n * @returns {number} The number of vertices in the geometry.\n *\n * @example\n * const numVertices = Cesium.Geometry.computeNumberOfVertices(geometry);\n */\nGeometry.computeNumberOfVertices = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"geometry\", geometry);\n  //>>includeEnd('debug');\n\n  let numberOfVertices = -1;\n  for (const property in geometry.attributes) {\n    if (\n      geometry.attributes.hasOwnProperty(property) &&\n      defined(geometry.attributes[property]) &&\n      defined(geometry.attributes[property].values)\n    ) {\n      const attribute = geometry.attributes[property];\n      const num = attribute.values.length / attribute.componentsPerAttribute;\n      //>>includeStart('debug', pragmas.debug);\n      if (numberOfVertices !== num && numberOfVertices !== -1) {\n        throw new DeveloperError(\n          \"All attribute lists must have the same number of attributes.\",\n        );\n      }\n      //>>includeEnd('debug');\n      numberOfVertices = num;\n    }\n  }\n\n  return numberOfVertices;\n};\n\nconst rectangleCenterScratch = new Cartographic();\nconst enuCenterScratch = new Cartesian3();\nconst fixedFrameToEnuScratch = new Matrix4();\nconst boundingRectanglePointsCartographicScratch = [\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n];\nconst boundingRectanglePointsEnuScratch = [\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n];\nconst points2DScratch = [new Cartesian2(), new Cartesian2(), new Cartesian2()];\nconst pointEnuScratch = new Cartesian3();\nconst enuRotationScratch = new Quaternion();\nconst enuRotationMatrixScratch = new Matrix4();\nconst rotation2DScratch = new Matrix2();\n\n/**\n * For remapping texture coordinates when rendering GroundPrimitives with materials.\n * GroundPrimitive texture coordinates are computed to align with the cartographic coordinate system on the globe.\n * However, EllipseGeometry, RectangleGeometry, and PolygonGeometry all bake rotations to per-vertex texture coordinates\n * using different strategies.\n *\n * This method is used by EllipseGeometry and PolygonGeometry to approximate the same visual effect.\n * We encapsulate rotation and scale by computing a \"transformed\" texture coordinate system and computing\n * a set of reference points from which \"cartographic\" texture coordinates can be remapped to the \"transformed\"\n * system using distances to lines in 2D.\n *\n * This approximation becomes less accurate as the covered area increases, especially for GroundPrimitives near the poles,\n * but is generally reasonable for polygons and ellipses around the size of USA states.\n *\n * RectangleGeometry has its own version of this method that computes remapping coordinates using cartographic space\n * as an intermediary instead of local ENU, which is more accurate for large-area rectangles.\n *\n * @param {Cartesian3[]} positions Array of positions outlining the geometry\n * @param {number} stRotation Texture coordinate rotation.\n * @param {Ellipsoid} ellipsoid Ellipsoid for projecting and generating local vectors.\n * @param {Rectangle} boundingRectangle Bounding rectangle around the positions.\n * @returns {number[]} An array of 6 numbers specifying [minimum point, u extent, v extent] as points in the \"cartographic\" system.\n * @private\n */\nGeometry._textureCoordinateRotationPoints = function (\n  positions,\n  stRotation,\n  ellipsoid,\n  boundingRectangle,\n) {\n  let i;\n\n  // Create a local east-north-up coordinate system centered on the polygon's bounding rectangle.\n  // Project the southwest, northwest, and southeast corners of the bounding rectangle into the plane of ENU as 2D points.\n  // These are the equivalents of (0,0), (0,1), and (1,0) in the texture coordinate system computed in ShadowVolumeAppearanceFS,\n  // aka \"ENU texture space.\"\n  const rectangleCenter = Rectangle.center(\n    boundingRectangle,\n    rectangleCenterScratch,\n  );\n  const enuCenter = Cartographic.toCartesian(\n    rectangleCenter,\n    ellipsoid,\n    enuCenterScratch,\n  );\n  const enuToFixedFrame = Transforms.eastNorthUpToFixedFrame(\n    enuCenter,\n    ellipsoid,\n    fixedFrameToEnuScratch,\n  );\n  const fixedFrameToEnu = Matrix4.inverse(\n    enuToFixedFrame,\n    fixedFrameToEnuScratch,\n  );\n\n  const boundingPointsEnu = boundingRectanglePointsEnuScratch;\n  const boundingPointsCarto = boundingRectanglePointsCartographicScratch;\n\n  boundingPointsCarto[0].longitude = boundingRectangle.west;\n  boundingPointsCarto[0].latitude = boundingRectangle.south;\n\n  boundingPointsCarto[1].longitude = boundingRectangle.west;\n  boundingPointsCarto[1].latitude = boundingRectangle.north;\n\n  boundingPointsCarto[2].longitude = boundingRectangle.east;\n  boundingPointsCarto[2].latitude = boundingRectangle.south;\n\n  let posEnu = pointEnuScratch;\n\n  for (i = 0; i < 3; i++) {\n    Cartographic.toCartesian(boundingPointsCarto[i], ellipsoid, posEnu);\n    posEnu = Matrix4.multiplyByPointAsVector(fixedFrameToEnu, posEnu, posEnu);\n    boundingPointsEnu[i].x = posEnu.x;\n    boundingPointsEnu[i].y = posEnu.y;\n  }\n\n  // Rotate each point in the polygon around the up vector in the ENU by -stRotation and project into ENU as 2D.\n  // Compute the bounding box of these rotated points in the 2D ENU plane.\n  // Rotate the corners back by stRotation, then compute their equivalents in the ENU texture space using the corners computed earlier.\n  const rotation = Quaternion.fromAxisAngle(\n    Cartesian3.UNIT_Z,\n    -stRotation,\n    enuRotationScratch,\n  );\n  const textureMatrix = Matrix3.fromQuaternion(\n    rotation,\n    enuRotationMatrixScratch,\n  );\n\n  const positionsLength = positions.length;\n  let enuMinX = Number.POSITIVE_INFINITY;\n  let enuMinY = Number.POSITIVE_INFINITY;\n  let enuMaxX = Number.NEGATIVE_INFINITY;\n  let enuMaxY = Number.NEGATIVE_INFINITY;\n  for (i = 0; i < positionsLength; i++) {\n    posEnu = Matrix4.multiplyByPointAsVector(\n      fixedFrameToEnu,\n      positions[i],\n      posEnu,\n    );\n    posEnu = Matrix3.multiplyByVector(textureMatrix, posEnu, posEnu);\n\n    enuMinX = Math.min(enuMinX, posEnu.x);\n    enuMinY = Math.min(enuMinY, posEnu.y);\n    enuMaxX = Math.max(enuMaxX, posEnu.x);\n    enuMaxY = Math.max(enuMaxY, posEnu.y);\n  }\n\n  const toDesiredInComputed = Matrix2.fromRotation(\n    stRotation,\n    rotation2DScratch,\n  );\n\n  const points2D = points2DScratch;\n  points2D[0].x = enuMinX;\n  points2D[0].y = enuMinY;\n\n  points2D[1].x = enuMinX;\n  points2D[1].y = enuMaxY;\n\n  points2D[2].x = enuMaxX;\n  points2D[2].y = enuMinY;\n\n  const boundingEnuMin = boundingPointsEnu[0];\n  const boundingPointsWidth = boundingPointsEnu[2].x - boundingEnuMin.x;\n  const boundingPointsHeight = boundingPointsEnu[1].y - boundingEnuMin.y;\n\n  for (i = 0; i < 3; i++) {\n    const point2D = points2D[i];\n    // rotate back\n    Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D);\n\n    // Convert point into east-north texture coordinate space\n    point2D.x = (point2D.x - boundingEnuMin.x) / boundingPointsWidth;\n    point2D.y = (point2D.y - boundingEnuMin.y) / boundingPointsHeight;\n  }\n\n  const minXYCorner = points2D[0];\n  const maxYCorner = points2D[1];\n  const maxXCorner = points2D[2];\n  const result = new Array(6);\n  Cartesian2.pack(minXYCorner, result);\n  Cartesian2.pack(maxYCorner, result, 2);\n  Cartesian2.pack(maxXCorner, result, 4);\n\n  return result;\n};\nexport default Geometry;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Values and type information for geometry attributes.  A {@link Geometry}\n * generally contains one or more attributes.  All attributes together form\n * the geometry's vertices.\n *\n * @alias GeometryAttribute\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {ComponentDatatype} options.componentDatatype The datatype of each component in the attribute, e.g., individual elements in values.\n * @param {number} options.componentsPerAttribute A number between 1 and 4 that defines the number of components in an attributes.\n * @param {boolean} [options.normalize=false] When <code>true</code> and <code>componentDatatype</code> is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n * @param {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} options.values The values for the attributes stored in a typed array.\n *\n * @exception {DeveloperError} options.componentsPerAttribute must be between 1 and 4.\n *\n *\n * @example\n * const geometry = new Cesium.Geometry({\n *   attributes : {\n *     position : new Cesium.GeometryAttribute({\n *       componentDatatype : Cesium.ComponentDatatype.FLOAT,\n *       componentsPerAttribute : 3,\n *       values : new Float32Array([\n *         0.0, 0.0, 0.0,\n *         7500000.0, 0.0, 0.0,\n *         0.0, 7500000.0, 0.0\n *       ])\n *     })\n *   },\n *   primitiveType : Cesium.PrimitiveType.LINE_LOOP\n * });\n *\n * @see Geometry\n */\nfunction GeometryAttribute(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.componentDatatype)) {\n    throw new DeveloperError(\"options.componentDatatype is required.\");\n  }\n  if (!defined(options.componentsPerAttribute)) {\n    throw new DeveloperError(\"options.componentsPerAttribute is required.\");\n  }\n  if (\n    options.componentsPerAttribute < 1 ||\n    options.componentsPerAttribute > 4\n  ) {\n    throw new DeveloperError(\n      \"options.componentsPerAttribute must be between 1 and 4.\",\n    );\n  }\n  if (!defined(options.values)) {\n    throw new DeveloperError(\"options.values is required.\");\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * The datatype of each component in the attribute, e.g., individual elements in\n   * {@link GeometryAttribute#values}.\n   *\n   * @type {ComponentDatatype}\n   *\n   */\n  this.componentDatatype = options.componentDatatype;\n\n  /**\n   * A number between 1 and 4 that defines the number of components in an attributes.\n   * For example, a position attribute with x, y, and z components would have 3 as\n   * shown in the code example.\n   *\n   * @type {number}\n   *\n   * @example\n   * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT;\n   * attribute.componentsPerAttribute = 3;\n   * attribute.values = new Float32Array([\n   *   0.0, 0.0, 0.0,\n   *   7500000.0, 0.0, 0.0,\n   *   0.0, 7500000.0, 0.0\n   * ]);\n   */\n  this.componentsPerAttribute = options.componentsPerAttribute;\n\n  /**\n   * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n   * indicate that the components should be mapped to the range [0, 1] (unsigned)\n   * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n   * <p>\n   * This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   *\n   * @example\n   * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE;\n   * attribute.componentsPerAttribute = 4;\n   * attribute.normalize = true;\n   * attribute.values = new Uint8Array([\n   *   Cesium.Color.floatToByte(color.red),\n   *   Cesium.Color.floatToByte(color.green),\n   *   Cesium.Color.floatToByte(color.blue),\n   *   Cesium.Color.floatToByte(color.alpha)\n   * ]);\n   */\n  this.normalize = options.normalize ?? false;\n\n  /**\n   * The values for the attributes stored in a typed array.  In the code example,\n   * every three elements in <code>values</code> defines one attributes since\n   * <code>componentsPerAttribute</code> is 3.\n   *\n   * @type {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array}\n   *\n   * @example\n   * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT;\n   * attribute.componentsPerAttribute = 3;\n   * attribute.values = new Float32Array([\n   *   0.0, 0.0, 0.0,\n   *   7500000.0, 0.0, 0.0,\n   *   0.0, 7500000.0, 0.0\n   * ]);\n   */\n  this.values = options.values;\n}\nexport default GeometryAttribute;\n","import Frozen from \"./Frozen.js\";\n\n/**\n * Attributes, which make up a geometry's vertices.  Each property in this object corresponds to a\n * {@link GeometryAttribute} containing the attribute's data.\n * <p>\n * Attributes are always stored non-interleaved in a Geometry.\n * </p>\n *\n * @alias GeometryAttributes\n * @constructor\n */\nfunction GeometryAttributes(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The 3D position attribute.\n   * <p>\n   * 64-bit floating-point (for precision).  3 components per attribute.\n   * </p>\n   *\n   * @type {GeometryAttribute|undefined}\n   *\n   * @default undefined\n   */\n  this.position = options.position;\n\n  /**\n   * The normal attribute (normalized), which is commonly used for lighting.\n   * <p>\n   * 32-bit floating-point.  3 components per attribute.\n   * </p>\n   *\n   * @type {GeometryAttribute|undefined}\n   *\n   * @default undefined\n   */\n  this.normal = options.normal;\n\n  /**\n   * The 2D texture coordinate attribute.\n   * <p>\n   * 32-bit floating-point.  2 components per attribute\n   * </p>\n   *\n   * @type {GeometryAttribute|undefined}\n   *\n   * @default undefined\n   */\n  this.st = options.st;\n\n  /**\n   * The bitangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n   * <p>\n   * 32-bit floating-point.  3 components per attribute.\n   * </p>\n   *\n   * @type {GeometryAttribute|undefined}\n   *\n   * @default undefined\n   */\n  this.bitangent = options.bitangent;\n\n  /**\n   * The tangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n   * <p>\n   * 32-bit floating-point.  3 components per attribute.\n   * </p>\n   *\n   * @type {GeometryAttribute|undefined}\n   *\n   * @default undefined\n   */\n  this.tangent = options.tangent;\n\n  /**\n   * The color attribute.\n   * <p>\n   * 8-bit unsigned integer. 4 components per attribute.\n   * </p>\n   *\n   * @type {GeometryAttribute|undefined}\n   *\n   * @default undefined\n   */\n  this.color = options.color;\n}\nexport default GeometryAttributes;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Base class for all geometry creation utility classes that can be passed to {@link GeometryInstance}\n * for asynchronous geometry creation.\n *\n * @constructor\n * @class\n * @abstract\n */\nfunction GeometryFactory() {\n  DeveloperError.throwInstantiationError();\n}\n\n/**\n * Returns a geometry.\n *\n * @param {GeometryFactory} geometryFactory A description of the circle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nGeometryFactory.createGeometry = function (geometryFactory) {\n  DeveloperError.throwInstantiationError();\n};\n\nexport default GeometryFactory;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * Geometry instancing allows one {@link Geometry} object to be positions in several\n * different locations and colored uniquely.  For example, one {@link BoxGeometry} can\n * be instanced several times, each with a different <code>modelMatrix</code> to change\n * its position, rotation, and scale.\n *\n * @alias GeometryInstance\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Geometry|GeometryFactory} options.geometry The geometry to instance.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The model matrix that transforms to transform the geometry from model to world coordinates.\n * @param {object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick} or get/set per-instance attributes with {@link Primitive#getGeometryInstanceAttributes}.\n * @param {object} [options.attributes] Per-instance attributes like a show or color attribute shown in the example below.\n *\n *\n * @example\n * // Create geometry for a box, and two instances that refer to it.\n * // One instance positions the box on the bottom and colored aqua.\n * // The other instance positions the box on the top and color white.\n * const geometry = Cesium.BoxGeometry.fromDimensions({\n *   vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,\n *   dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0)\n * });\n * const instanceBottom = new Cesium.GeometryInstance({\n *   geometry : geometry,\n *   modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *     Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n *   attributes : {\n *     color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n *   },\n *   id : 'bottom'\n * });\n * const instanceTop = new Cesium.GeometryInstance({\n *   geometry : geometry,\n *   modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *     Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 3000000.0), new Cesium.Matrix4()),\n *   attributes : {\n *     color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n *   },\n *   id : 'top'\n * });\n *\n * @see Geometry\n */\nfunction GeometryInstance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.geometry)) {\n    throw new DeveloperError(\"options.geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * The geometry being instanced.\n   *\n   * @type Geometry\n   *\n   */\n  this.geometry = options.geometry;\n\n  /**\n   * The 4x4 transformation matrix that transforms the geometry from model to world coordinates.\n   * When this is the identity matrix, the geometry is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * @type Matrix4\n   *\n   * @default Matrix4.IDENTITY\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n\n  /**\n   * User-defined object returned when the instance is picked or used to get/set per-instance attributes.\n   *\n   * @type {object|undefined}\n   *\n   * @default undefined\n   *\n   * @see Scene#pick\n   * @see Primitive#getGeometryInstanceAttributes\n   */\n  this.id = options.id;\n\n  /**\n   * Used for picking primitives that wrap geometry instances.\n   *\n   * @private\n   */\n  this.pickPrimitive = options.pickPrimitive;\n\n  /**\n   * Per-instance attributes like {@link ColorGeometryInstanceAttribute} or {@link ShowGeometryInstanceAttribute}.\n   * {@link Geometry} attributes varying per vertex; these attributes are constant for the entire instance.\n   *\n   * @type {object}\n   *\n   * @default {}\n   */\n  this.attributes = options.attributes ?? {};\n\n  /**\n   * @private\n   */\n  this.westHemisphereGeometry = undefined;\n  /**\n   * @private\n   */\n  this.eastHemisphereGeometry = undefined;\n}\nexport default GeometryInstance;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Values and type information for per-instance geometry attributes.\n *\n * @alias GeometryInstanceAttribute\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {ComponentDatatype} options.componentDatatype The datatype of each component in the attribute, e.g., individual elements in values.\n * @param {number} options.componentsPerAttribute A number between 1 and 4 that defines the number of components in an attributes.\n * @param {boolean} [options.normalize=false] When <code>true</code> and <code>componentDatatype</code> is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n * @param {number[]} options.value The value for the attribute.\n *\n * @exception {DeveloperError} options.componentsPerAttribute must be between 1 and 4.\n *\n *\n * @example\n * const instance = new Cesium.GeometryInstance({\n *   geometry : Cesium.BoxGeometry.fromDimensions({\n *     dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0)\n *   }),\n *   modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *     Cesium.Cartesian3.fromDegrees(0.0, 0.0)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n *   id : 'box',\n *   attributes : {\n *     color : new Cesium.GeometryInstanceAttribute({\n *       componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE,\n *       componentsPerAttribute : 4,\n *       normalize : true,\n *       value : [255, 255, 0, 255]\n *     })\n *   }\n * });\n *\n * @see ColorGeometryInstanceAttribute\n * @see ShowGeometryInstanceAttribute\n * @see DistanceDisplayConditionGeometryInstanceAttribute\n */\nfunction GeometryInstanceAttribute(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.componentDatatype)) {\n    throw new DeveloperError(\"options.componentDatatype is required.\");\n  }\n  if (!defined(options.componentsPerAttribute)) {\n    throw new DeveloperError(\"options.componentsPerAttribute is required.\");\n  }\n  if (\n    options.componentsPerAttribute < 1 ||\n    options.componentsPerAttribute > 4\n  ) {\n    throw new DeveloperError(\n      \"options.componentsPerAttribute must be between 1 and 4.\",\n    );\n  }\n  if (!defined(options.value)) {\n    throw new DeveloperError(\"options.value is required.\");\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * The datatype of each component in the attribute, e.g., individual elements in\n   * {@link GeometryInstanceAttribute#value}.\n   *\n   * @type ComponentDatatype\n   *\n   */\n  this.componentDatatype = options.componentDatatype;\n\n  /**\n   * A number between 1 and 4 that defines the number of components in an attributes.\n   * For example, a position attribute with x, y, and z components would have 3 as\n   * shown in the code example.\n   *\n   * @type {number}\n   *\n   * @example\n   * show : new Cesium.GeometryInstanceAttribute({\n   *   componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE,\n   *   componentsPerAttribute : 1,\n   *   normalize : true,\n   *   value : [1.0]\n   * })\n   */\n  this.componentsPerAttribute = options.componentsPerAttribute;\n\n  /**\n   * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n   * indicate that the components should be mapped to the range [0, 1] (unsigned)\n   * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n   * <p>\n   * This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   *\n   * @example\n   * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE;\n   * attribute.componentsPerAttribute = 4;\n   * attribute.normalize = true;\n   * attribute.value = [\n   *   Cesium.Color.floatToByte(color.red),\n   *   Cesium.Color.floatToByte(color.green),\n   *   Cesium.Color.floatToByte(color.blue),\n   *   Cesium.Color.floatToByte(color.alpha)\n   * ];\n   */\n  this.normalize = options.normalize ?? false;\n\n  /**\n   * The values for the attributes stored in a typed array.  In the code example,\n   * every three elements in <code>values</code> defines one attributes since\n   * <code>componentsPerAttribute</code> is 3.\n   *\n   * @type {number[]}\n   *\n   * @example\n   * show : new Cesium.GeometryInstanceAttribute({\n   *   componentDatatype : Cesium.ComponentDatatype.UNSIGNED_BYTE,\n   *   componentsPerAttribute : 1,\n   *   normalize : true,\n   *   value : [1.0]\n   * })\n   */\n  this.value = options.value;\n}\nexport default GeometryInstanceAttribute;\n","/**\n * Represents which vertices should have a value of `true` for the `applyOffset` attribute\n * @private\n */\nconst GeometryOffsetAttribute = {\n  NONE: 0,\n  TOP: 1,\n  ALL: 2,\n};\nexport default Object.freeze(GeometryOffsetAttribute);\n","import AttributeCompression from \"./AttributeCompression.js\";\nimport barycentricCoordinates from \"./barycentricCoordinates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EncodedCartesian3 from \"./EncodedCartesian3.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryType from \"./GeometryType.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport Intersect from \"./Intersect.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Tipsify from \"./Tipsify.js\";\n\n/**\n * Content pipeline functions for geometries.\n *\n * @namespace GeometryPipeline\n *\n * @see Geometry\n */\nconst GeometryPipeline = {};\n\nfunction addTriangle(lines, index, i0, i1, i2) {\n  lines[index++] = i0;\n  lines[index++] = i1;\n\n  lines[index++] = i1;\n  lines[index++] = i2;\n\n  lines[index++] = i2;\n  lines[index] = i0;\n}\n\nfunction trianglesToLines(triangles) {\n  const count = triangles.length;\n  const size = (count / 3) * 6;\n  const lines = IndexDatatype.createTypedArray(count, size);\n\n  let index = 0;\n  for (let i = 0; i < count; i += 3, index += 6) {\n    addTriangle(lines, index, triangles[i], triangles[i + 1], triangles[i + 2]);\n  }\n\n  return lines;\n}\n\nfunction triangleStripToLines(triangles) {\n  const count = triangles.length;\n  if (count >= 3) {\n    const size = (count - 2) * 6;\n    const lines = IndexDatatype.createTypedArray(count, size);\n\n    addTriangle(lines, 0, triangles[0], triangles[1], triangles[2]);\n    let index = 6;\n\n    for (let i = 3; i < count; ++i, index += 6) {\n      addTriangle(\n        lines,\n        index,\n        triangles[i - 1],\n        triangles[i],\n        triangles[i - 2],\n      );\n    }\n\n    return lines;\n  }\n\n  return new Uint16Array();\n}\n\nfunction triangleFanToLines(triangles) {\n  if (triangles.length > 0) {\n    const count = triangles.length - 1;\n    const size = (count - 1) * 6;\n    const lines = IndexDatatype.createTypedArray(count, size);\n\n    const base = triangles[0];\n    let index = 0;\n    for (let i = 1; i < count; ++i, index += 6) {\n      addTriangle(lines, index, base, triangles[i], triangles[i + 1]);\n    }\n\n    return lines;\n  }\n\n  return new Uint16Array();\n}\n\n/**\n * Converts a geometry's triangle indices to line indices.  If the geometry has an <code>indices</code>\n * and its <code>primitiveType</code> is <code>TRIANGLES</code>, <code>TRIANGLE_STRIP</code>,\n * <code>TRIANGLE_FAN</code>, it is converted to <code>LINES</code>; otherwise, the geometry is not changed.\n * <p>\n * This is commonly used to create a wireframe geometry for visual debugging.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its triangle indices converted to lines.\n *\n * @exception {DeveloperError} geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.toWireframe(geometry);\n */\nGeometryPipeline.toWireframe = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const indices = geometry.indices;\n  if (defined(indices)) {\n    switch (geometry.primitiveType) {\n      case PrimitiveType.TRIANGLES:\n        geometry.indices = trianglesToLines(indices);\n        break;\n      case PrimitiveType.TRIANGLE_STRIP:\n        geometry.indices = triangleStripToLines(indices);\n        break;\n      case PrimitiveType.TRIANGLE_FAN:\n        geometry.indices = triangleFanToLines(indices);\n        break;\n      //>>includeStart('debug', pragmas.debug);\n      default:\n        throw new DeveloperError(\n          \"geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\",\n        );\n      //>>includeEnd('debug');\n    }\n\n    geometry.primitiveType = PrimitiveType.LINES;\n  }\n\n  return geometry;\n};\n\n/**\n * Creates a new {@link Geometry} with <code>LINES</code> representing the provided\n * attribute (<code>attributeName</code>) for the provided geometry.  This is used to\n * visualize vector attributes like normals, tangents, and bitangents.\n *\n * @param {Geometry} geometry The <code>Geometry</code> instance with the attribute.\n * @param {string} [attributeName='normal'] The name of the attribute.\n * @param {number} [length=10000.0] The length of each line segment in meters.  This can be negative to point the vector in the opposite direction.\n * @returns {Geometry} A new <code>Geometry</code> instance with line segments for the vector.\n *\n * @exception {DeveloperError} geometry.attributes must have an attribute with the same name as the attributeName parameter.\n *\n * @example\n * const geometry = Cesium.GeometryPipeline.createLineSegmentsForVectors(instance.geometry, 'bitangent', 100000.0);\n */\nGeometryPipeline.createLineSegmentsForVectors = function (\n  geometry,\n  attributeName,\n  length,\n) {\n  attributeName = attributeName ?? \"normal\";\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  if (!defined(geometry.attributes.position)) {\n    throw new DeveloperError(\"geometry.attributes.position is required.\");\n  }\n  if (!defined(geometry.attributes[attributeName])) {\n    throw new DeveloperError(\n      `geometry.attributes must have an attribute with the same name as the attributeName parameter, ${attributeName}.`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  length = length ?? 10000.0;\n\n  const positions = geometry.attributes.position.values;\n  const vectors = geometry.attributes[attributeName].values;\n  const positionsLength = positions.length;\n\n  const newPositions = new Float64Array(2 * positionsLength);\n\n  let j = 0;\n  for (let i = 0; i < positionsLength; i += 3) {\n    newPositions[j++] = positions[i];\n    newPositions[j++] = positions[i + 1];\n    newPositions[j++] = positions[i + 2];\n\n    newPositions[j++] = positions[i] + vectors[i] * length;\n    newPositions[j++] = positions[i + 1] + vectors[i + 1] * length;\n    newPositions[j++] = positions[i + 2] + vectors[i + 2] * length;\n  }\n\n  let newBoundingSphere;\n  const bs = geometry.boundingSphere;\n  if (defined(bs)) {\n    newBoundingSphere = new BoundingSphere(bs.center, bs.radius + length);\n  }\n\n  return new Geometry({\n    attributes: {\n      position: new GeometryAttribute({\n        componentDatatype: ComponentDatatype.DOUBLE,\n        componentsPerAttribute: 3,\n        values: newPositions,\n      }),\n    },\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: newBoundingSphere,\n  });\n};\n\n/**\n * Creates an object that maps attribute names to unique locations (indices)\n * for matching vertex attributes and shader programs.\n *\n * @param {Geometry} geometry The geometry, which is not modified, to create the object for.\n * @returns {object} An object with attribute name / index pairs.\n *\n * @example\n * const attributeLocations = Cesium.GeometryPipeline.createAttributeLocations(geometry);\n * // Example output\n * // {\n * //   'position' : 0,\n * //   'normal' : 1\n * // }\n */\nGeometryPipeline.createAttributeLocations = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // There can be a WebGL performance hit when attribute 0 is disabled, so\n  // assign attribute locations to well-known attributes.\n  const semantics = [\n    \"position\",\n    \"positionHigh\",\n    \"positionLow\",\n\n    // From VertexFormat.position - after 2D projection and high-precision encoding\n    \"position3DHigh\",\n    \"position3DLow\",\n    \"position2DHigh\",\n    \"position2DLow\",\n\n    // From Primitive\n    \"pickColor\",\n\n    // From VertexFormat\n    \"normal\",\n    \"st\",\n    \"tangent\",\n    \"bitangent\",\n\n    // For shadow volumes\n    \"extrudeDirection\",\n\n    // From compressing texture coordinates and normals\n    \"compressedAttributes\",\n  ];\n\n  const attributes = geometry.attributes;\n  const indices = {};\n  let j = 0;\n  let i;\n  const len = semantics.length;\n\n  // Attribute locations for well-known attributes\n  for (i = 0; i < len; ++i) {\n    const semantic = semantics[i];\n\n    if (defined(attributes[semantic])) {\n      indices[semantic] = j++;\n    }\n  }\n\n  // Locations for custom attributes\n  for (const name in attributes) {\n    if (attributes.hasOwnProperty(name) && !defined(indices[name])) {\n      indices[name] = j++;\n    }\n  }\n\n  return indices;\n};\n\n/**\n * Reorders a geometry's attributes and <code>indices</code> to achieve better performance from the GPU's pre-vertex-shader cache.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its attributes and indices reordered for the GPU's pre-vertex-shader cache.\n *\n * @exception {DeveloperError} Each attribute array in geometry.attributes must have the same number of attributes.\n *\n *\n * @example\n * geometry = Cesium.GeometryPipeline.reorderForPreVertexCache(geometry);\n *\n * @see GeometryPipeline.reorderForPostVertexCache\n */\nGeometryPipeline.reorderForPreVertexCache = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const numVertices = Geometry.computeNumberOfVertices(geometry);\n\n  const indices = geometry.indices;\n  if (defined(indices)) {\n    const indexCrossReferenceOldToNew = new Int32Array(numVertices);\n    for (let i = 0; i < numVertices; i++) {\n      indexCrossReferenceOldToNew[i] = -1;\n    }\n\n    // Construct cross reference and reorder indices\n    const indicesIn = indices;\n    const numIndices = indicesIn.length;\n    const indicesOut = IndexDatatype.createTypedArray(numVertices, numIndices);\n\n    let intoIndicesIn = 0;\n    let intoIndicesOut = 0;\n    let nextIndex = 0;\n    let tempIndex;\n    while (intoIndicesIn < numIndices) {\n      tempIndex = indexCrossReferenceOldToNew[indicesIn[intoIndicesIn]];\n      if (tempIndex !== -1) {\n        indicesOut[intoIndicesOut] = tempIndex;\n      } else {\n        tempIndex = indicesIn[intoIndicesIn];\n        indexCrossReferenceOldToNew[tempIndex] = nextIndex;\n\n        indicesOut[intoIndicesOut] = nextIndex;\n        ++nextIndex;\n      }\n      ++intoIndicesIn;\n      ++intoIndicesOut;\n    }\n    geometry.indices = indicesOut;\n\n    // Reorder attributes\n    const attributes = geometry.attributes;\n    for (const property in attributes) {\n      if (\n        attributes.hasOwnProperty(property) &&\n        defined(attributes[property]) &&\n        defined(attributes[property].values)\n      ) {\n        const attribute = attributes[property];\n        const elementsIn = attribute.values;\n        let intoElementsIn = 0;\n        const numComponents = attribute.componentsPerAttribute;\n        const elementsOut = ComponentDatatype.createTypedArray(\n          attribute.componentDatatype,\n          nextIndex * numComponents,\n        );\n        while (intoElementsIn < numVertices) {\n          const temp = indexCrossReferenceOldToNew[intoElementsIn];\n          if (temp !== -1) {\n            for (let j = 0; j < numComponents; j++) {\n              elementsOut[numComponents * temp + j] =\n                elementsIn[numComponents * intoElementsIn + j];\n            }\n          }\n          ++intoElementsIn;\n        }\n        attribute.values = elementsOut;\n      }\n    }\n  }\n\n  return geometry;\n};\n\n/**\n * Reorders a geometry's <code>indices</code> to achieve better performance from the GPU's\n * post vertex-shader cache by using the Tipsify algorithm.  If the geometry <code>primitiveType</code>\n * is not <code>TRIANGLES</code> or the geometry does not have an <code>indices</code>, this function has no effect.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {number} [cacheCapacity=24] The number of vertices that can be held in the GPU's vertex cache.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its indices reordered for the post-vertex-shader cache.\n *\n * @exception {DeveloperError} cacheCapacity must be greater than two.\n *\n *\n * @example\n * geometry = Cesium.GeometryPipeline.reorderForPostVertexCache(geometry);\n *\n * @see GeometryPipeline.reorderForPreVertexCache\n * @see {@link http://gfx.cs.princ0eton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf|Fast Triangle Reordering for Vertex Locality and Reduced Overdraw}\n * by Sander, Nehab, and Barczak\n */\nGeometryPipeline.reorderForPostVertexCache = function (\n  geometry,\n  cacheCapacity,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const indices = geometry.indices;\n  if (geometry.primitiveType === PrimitiveType.TRIANGLES && defined(indices)) {\n    const numIndices = indices.length;\n    let maximumIndex = 0;\n    for (let j = 0; j < numIndices; j++) {\n      if (indices[j] > maximumIndex) {\n        maximumIndex = indices[j];\n      }\n    }\n    geometry.indices = Tipsify.tipsify({\n      indices: indices,\n      maximumIndex: maximumIndex,\n      cacheSize: cacheCapacity,\n    });\n  }\n\n  return geometry;\n};\n\nfunction copyAttributesDescriptions(attributes) {\n  const newAttributes = {};\n\n  for (const attribute in attributes) {\n    if (\n      attributes.hasOwnProperty(attribute) &&\n      defined(attributes[attribute]) &&\n      defined(attributes[attribute].values)\n    ) {\n      const attr = attributes[attribute];\n      newAttributes[attribute] = new GeometryAttribute({\n        componentDatatype: attr.componentDatatype,\n        componentsPerAttribute: attr.componentsPerAttribute,\n        normalize: attr.normalize,\n        values: [],\n      });\n    }\n  }\n\n  return newAttributes;\n}\n\nfunction copyVertex(destinationAttributes, sourceAttributes, index) {\n  for (const attribute in sourceAttributes) {\n    if (\n      sourceAttributes.hasOwnProperty(attribute) &&\n      defined(sourceAttributes[attribute]) &&\n      defined(sourceAttributes[attribute].values)\n    ) {\n      const attr = sourceAttributes[attribute];\n\n      for (let k = 0; k < attr.componentsPerAttribute; ++k) {\n        destinationAttributes[attribute].values.push(\n          attr.values[index * attr.componentsPerAttribute + k],\n        );\n      }\n    }\n  }\n}\n\n/**\n * Splits a geometry into multiple geometries, if necessary, to ensure that indices in the\n * <code>indices</code> fit into unsigned shorts.  This is used to meet the WebGL requirements\n * when unsigned int indices are not supported.\n * <p>\n * If the geometry does not have any <code>indices</code>, this function has no effect.\n * </p>\n *\n * @param {Geometry} geometry The geometry to be split into multiple geometries.\n * @returns {Geometry[]} An array of geometries, each with indices that fit into unsigned shorts.\n *\n * @exception {DeveloperError} geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS\n * @exception {DeveloperError} All geometry attribute lists must have the same number of attributes.\n *\n * @example\n * const geometries = Cesium.GeometryPipeline.fitToUnsignedShortIndices(geometry);\n */\nGeometryPipeline.fitToUnsignedShortIndices = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  if (\n    defined(geometry.indices) &&\n    geometry.primitiveType !== PrimitiveType.TRIANGLES &&\n    geometry.primitiveType !== PrimitiveType.LINES &&\n    geometry.primitiveType !== PrimitiveType.POINTS\n  ) {\n    throw new DeveloperError(\n      \"geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const geometries = [];\n\n  // If there's an index list and more than 64K attributes, it is possible that\n  // some indices are outside the range of unsigned short [0, 64K - 1]\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n  if (\n    defined(geometry.indices) &&\n    numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES\n  ) {\n    let oldToNewIndex = [];\n    let newIndices = [];\n    let currentIndex = 0;\n    let newAttributes = copyAttributesDescriptions(geometry.attributes);\n\n    const originalIndices = geometry.indices;\n    const numberOfIndices = originalIndices.length;\n\n    let indicesPerPrimitive;\n\n    if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\n      indicesPerPrimitive = 3;\n    } else if (geometry.primitiveType === PrimitiveType.LINES) {\n      indicesPerPrimitive = 2;\n    } else if (geometry.primitiveType === PrimitiveType.POINTS) {\n      indicesPerPrimitive = 1;\n    }\n\n    for (let j = 0; j < numberOfIndices; j += indicesPerPrimitive) {\n      for (let k = 0; k < indicesPerPrimitive; ++k) {\n        const x = originalIndices[j + k];\n        let i = oldToNewIndex[x];\n        if (!defined(i)) {\n          i = currentIndex++;\n          oldToNewIndex[x] = i;\n          copyVertex(newAttributes, geometry.attributes, x);\n        }\n        newIndices.push(i);\n      }\n\n      if (\n        currentIndex + indicesPerPrimitive >=\n        CesiumMath.SIXTY_FOUR_KILOBYTES\n      ) {\n        geometries.push(\n          new Geometry({\n            attributes: newAttributes,\n            indices: newIndices,\n            primitiveType: geometry.primitiveType,\n            boundingSphere: geometry.boundingSphere,\n            boundingSphereCV: geometry.boundingSphereCV,\n          }),\n        );\n\n        // Reset for next vertex-array\n        oldToNewIndex = [];\n        newIndices = [];\n        currentIndex = 0;\n        newAttributes = copyAttributesDescriptions(geometry.attributes);\n      }\n    }\n\n    if (newIndices.length !== 0) {\n      geometries.push(\n        new Geometry({\n          attributes: newAttributes,\n          indices: newIndices,\n          primitiveType: geometry.primitiveType,\n          boundingSphere: geometry.boundingSphere,\n          boundingSphereCV: geometry.boundingSphereCV,\n        }),\n      );\n    }\n  } else {\n    // No need to split into multiple geometries\n    geometries.push(geometry);\n  }\n\n  return geometries;\n};\n\nconst scratchProjectTo2DCartesian3 = new Cartesian3();\nconst scratchProjectTo2DCartographic = new Cartographic();\n\n/**\n * Projects a geometry's 3D <code>position</code> attribute to 2D, replacing the <code>position</code>\n * attribute with separate <code>position3D</code> and <code>position2D</code> attributes.\n * <p>\n * If the geometry does not have a <code>position</code>, this function has no effect.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {string} attributeName The name of the attribute.\n * @param {string} attributeName3D The name of the attribute in 3D.\n * @param {string} attributeName2D The name of the attribute in 2D.\n * @param {object} [projection=new GeographicProjection()] The projection to use.\n * @returns {Geometry} The modified <code>geometry</code> argument with <code>position3D</code> and <code>position2D</code> attributes.\n *\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\n * @exception {DeveloperError} Could not project a point to 2D.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.projectTo2D(geometry, 'position', 'position3D', 'position2D');\n */\nGeometryPipeline.projectTo2D = function (\n  geometry,\n  attributeName,\n  attributeName3D,\n  attributeName2D,\n  projection,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  if (!defined(attributeName)) {\n    throw new DeveloperError(\"attributeName is required.\");\n  }\n  if (!defined(attributeName3D)) {\n    throw new DeveloperError(\"attributeName3D is required.\");\n  }\n  if (!defined(attributeName2D)) {\n    throw new DeveloperError(\"attributeName2D is required.\");\n  }\n  if (!defined(geometry.attributes[attributeName])) {\n    throw new DeveloperError(\n      `geometry must have attribute matching the attributeName argument: ${attributeName}.`,\n    );\n  }\n  if (\n    geometry.attributes[attributeName].componentDatatype !==\n    ComponentDatatype.DOUBLE\n  ) {\n    throw new DeveloperError(\n      \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const attribute = geometry.attributes[attributeName];\n  projection = defined(projection) ? projection : new GeographicProjection();\n  const ellipsoid = projection.ellipsoid;\n\n  // Project original values to 2D.\n  const values3D = attribute.values;\n  const projectedValues = new Float64Array(values3D.length);\n  let index = 0;\n\n  for (let i = 0; i < values3D.length; i += 3) {\n    const value = Cartesian3.fromArray(\n      values3D,\n      i,\n      scratchProjectTo2DCartesian3,\n    );\n\n    const lonLat = ellipsoid.cartesianToCartographic(\n      value,\n      scratchProjectTo2DCartographic,\n    );\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(lonLat)) {\n      throw new DeveloperError(\n        `Could not project point (${value.x}, ${value.y}, ${value.z}) to 2D.`,\n      );\n    }\n    //>>includeEnd('debug');\n\n    const projectedLonLat = projection.project(\n      lonLat,\n      scratchProjectTo2DCartesian3,\n    );\n\n    projectedValues[index++] = projectedLonLat.x;\n    projectedValues[index++] = projectedLonLat.y;\n    projectedValues[index++] = projectedLonLat.z;\n  }\n\n  // Rename original cartesians to ellipsoid cartesians.\n  geometry.attributes[attributeName3D] = attribute;\n\n  // Replace original cartesians with 2D projected cartesians\n  geometry.attributes[attributeName2D] = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: projectedValues,\n  });\n  delete geometry.attributes[attributeName];\n\n  return geometry;\n};\n\nconst encodedResult = {\n  high: 0.0,\n  low: 0.0,\n};\n\n/**\n * Encodes floating-point geometry attribute values as two separate attributes to improve\n * rendering precision.\n * <p>\n * This is commonly used to create high-precision position vertex attributes.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {string} attributeName The name of the attribute.\n * @param {string} attributeHighName The name of the attribute for the encoded high bits.\n * @param {string} attributeLowName The name of the attribute for the encoded low bits.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its encoded attribute.\n *\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.encodeAttribute(geometry, 'position3D', 'position3DHigh', 'position3DLow');\n */\nGeometryPipeline.encodeAttribute = function (\n  geometry,\n  attributeName,\n  attributeHighName,\n  attributeLowName,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  if (!defined(attributeName)) {\n    throw new DeveloperError(\"attributeName is required.\");\n  }\n  if (!defined(attributeHighName)) {\n    throw new DeveloperError(\"attributeHighName is required.\");\n  }\n  if (!defined(attributeLowName)) {\n    throw new DeveloperError(\"attributeLowName is required.\");\n  }\n  if (!defined(geometry.attributes[attributeName])) {\n    throw new DeveloperError(\n      `geometry must have attribute matching the attributeName argument: ${attributeName}.`,\n    );\n  }\n  if (\n    geometry.attributes[attributeName].componentDatatype !==\n    ComponentDatatype.DOUBLE\n  ) {\n    throw new DeveloperError(\n      \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const attribute = geometry.attributes[attributeName];\n  const values = attribute.values;\n  const length = values.length;\n  const highValues = new Float32Array(length);\n  const lowValues = new Float32Array(length);\n\n  for (let i = 0; i < length; ++i) {\n    EncodedCartesian3.encode(values[i], encodedResult);\n    highValues[i] = encodedResult.high;\n    lowValues[i] = encodedResult.low;\n  }\n\n  const componentsPerAttribute = attribute.componentsPerAttribute;\n\n  geometry.attributes[attributeHighName] = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: componentsPerAttribute,\n    values: highValues,\n  });\n  geometry.attributes[attributeLowName] = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: componentsPerAttribute,\n    values: lowValues,\n  });\n  delete geometry.attributes[attributeName];\n\n  return geometry;\n};\n\nlet scratchCartesian3 = new Cartesian3();\n\nfunction transformPoint(matrix, attribute) {\n  if (defined(attribute)) {\n    const values = attribute.values;\n    const length = values.length;\n    for (let i = 0; i < length; i += 3) {\n      Cartesian3.unpack(values, i, scratchCartesian3);\n      Matrix4.multiplyByPoint(matrix, scratchCartesian3, scratchCartesian3);\n      Cartesian3.pack(scratchCartesian3, values, i);\n    }\n  }\n}\n\nfunction transformVector(matrix, attribute) {\n  if (defined(attribute)) {\n    const values = attribute.values;\n    const length = values.length;\n    for (let i = 0; i < length; i += 3) {\n      Cartesian3.unpack(values, i, scratchCartesian3);\n      Matrix3.multiplyByVector(matrix, scratchCartesian3, scratchCartesian3);\n      scratchCartesian3 = Cartesian3.normalize(\n        scratchCartesian3,\n        scratchCartesian3,\n      );\n      Cartesian3.pack(scratchCartesian3, values, i);\n    }\n  }\n}\n\nconst inverseTranspose = new Matrix4();\nconst normalMatrix = new Matrix3();\n\n/**\n * Transforms a geometry instance to world coordinates.  This changes\n * the instance's <code>modelMatrix</code> to {@link Matrix4.IDENTITY} and transforms the\n * following attributes if they are present: <code>position</code>, <code>normal</code>,\n * <code>tangent</code>, and <code>bitangent</code>.\n *\n * @param {GeometryInstance} instance The geometry instance to modify.\n * @returns {GeometryInstance} The modified <code>instance</code> argument, with its attributes transforms to world coordinates.\n *\n * @example\n * Cesium.GeometryPipeline.transformToWorldCoordinates(instance);\n */\nGeometryPipeline.transformToWorldCoordinates = function (instance) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(instance)) {\n    throw new DeveloperError(\"instance is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const modelMatrix = instance.modelMatrix;\n\n  if (Matrix4.equals(modelMatrix, Matrix4.IDENTITY)) {\n    // Already in world coordinates\n    return instance;\n  }\n\n  const attributes = instance.geometry.attributes;\n\n  // Transform attributes in known vertex formats\n  transformPoint(modelMatrix, attributes.position);\n  transformPoint(modelMatrix, attributes.prevPosition);\n  transformPoint(modelMatrix, attributes.nextPosition);\n\n  if (\n    defined(attributes.normal) ||\n    defined(attributes.tangent) ||\n    defined(attributes.bitangent)\n  ) {\n    Matrix4.inverse(modelMatrix, inverseTranspose);\n    Matrix4.transpose(inverseTranspose, inverseTranspose);\n    Matrix4.getMatrix3(inverseTranspose, normalMatrix);\n\n    transformVector(normalMatrix, attributes.normal);\n    transformVector(normalMatrix, attributes.tangent);\n    transformVector(normalMatrix, attributes.bitangent);\n  }\n\n  const boundingSphere = instance.geometry.boundingSphere;\n  if (defined(boundingSphere)) {\n    instance.geometry.boundingSphere = BoundingSphere.transform(\n      boundingSphere,\n      modelMatrix,\n      boundingSphere,\n    );\n  }\n\n  instance.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n  return instance;\n};\n\nfunction findAttributesInAllGeometries(instances, propertyName) {\n  const length = instances.length;\n\n  const attributesInAllGeometries = {};\n\n  const attributes0 = instances[0][propertyName].attributes;\n  let name;\n\n  for (name in attributes0) {\n    if (\n      attributes0.hasOwnProperty(name) &&\n      defined(attributes0[name]) &&\n      defined(attributes0[name].values)\n    ) {\n      const attribute = attributes0[name];\n      let numberOfComponents = attribute.values.length;\n      let inAllGeometries = true;\n\n      // Does this same attribute exist in all geometries?\n      for (let i = 1; i < length; ++i) {\n        const otherAttribute = instances[i][propertyName].attributes[name];\n\n        if (\n          !defined(otherAttribute) ||\n          attribute.componentDatatype !== otherAttribute.componentDatatype ||\n          attribute.componentsPerAttribute !==\n            otherAttribute.componentsPerAttribute ||\n          attribute.normalize !== otherAttribute.normalize\n        ) {\n          inAllGeometries = false;\n          break;\n        }\n\n        numberOfComponents += otherAttribute.values.length;\n      }\n\n      if (inAllGeometries) {\n        attributesInAllGeometries[name] = new GeometryAttribute({\n          componentDatatype: attribute.componentDatatype,\n          componentsPerAttribute: attribute.componentsPerAttribute,\n          normalize: attribute.normalize,\n          values: ComponentDatatype.createTypedArray(\n            attribute.componentDatatype,\n            numberOfComponents,\n          ),\n        });\n      }\n    }\n  }\n\n  return attributesInAllGeometries;\n}\n\nconst tempScratch = new Cartesian3();\n\nfunction combineGeometries(instances, propertyName) {\n  const length = instances.length;\n\n  let name;\n  let i;\n  let j;\n  let k;\n\n  const m = instances[0].modelMatrix;\n  const haveIndices = defined(instances[0][propertyName].indices);\n  const primitiveType = instances[0][propertyName].primitiveType;\n\n  //>>includeStart('debug', pragmas.debug);\n  for (i = 1; i < length; ++i) {\n    if (!Matrix4.equals(instances[i].modelMatrix, m)) {\n      throw new DeveloperError(\"All instances must have the same modelMatrix.\");\n    }\n    if (defined(instances[i][propertyName].indices) !== haveIndices) {\n      throw new DeveloperError(\n        \"All instance geometries must have an indices or not have one.\",\n      );\n    }\n    if (instances[i][propertyName].primitiveType !== primitiveType) {\n      throw new DeveloperError(\n        \"All instance geometries must have the same primitiveType.\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  // Find subset of attributes in all geometries\n  const attributes = findAttributesInAllGeometries(instances, propertyName);\n  let values;\n  let sourceValues;\n  let sourceValuesLength;\n\n  // Combine attributes from each geometry into a single typed array\n  for (name in attributes) {\n    if (attributes.hasOwnProperty(name)) {\n      values = attributes[name].values;\n\n      k = 0;\n      for (i = 0; i < length; ++i) {\n        sourceValues = instances[i][propertyName].attributes[name].values;\n        sourceValuesLength = sourceValues.length;\n\n        for (j = 0; j < sourceValuesLength; ++j) {\n          values[k++] = sourceValues[j];\n        }\n      }\n    }\n  }\n\n  // Combine index lists\n  let indices;\n\n  if (haveIndices) {\n    let numberOfIndices = 0;\n    for (i = 0; i < length; ++i) {\n      numberOfIndices += instances[i][propertyName].indices.length;\n    }\n\n    const numberOfVertices = Geometry.computeNumberOfVertices(\n      new Geometry({\n        attributes: attributes,\n        primitiveType: PrimitiveType.POINTS,\n      }),\n    );\n    const destIndices = IndexDatatype.createTypedArray(\n      numberOfVertices,\n      numberOfIndices,\n    );\n\n    let destOffset = 0;\n    let offset = 0;\n\n    for (i = 0; i < length; ++i) {\n      const sourceIndices = instances[i][propertyName].indices;\n      const sourceIndicesLen = sourceIndices.length;\n\n      for (k = 0; k < sourceIndicesLen; ++k) {\n        destIndices[destOffset++] = offset + sourceIndices[k];\n      }\n\n      offset += Geometry.computeNumberOfVertices(instances[i][propertyName]);\n    }\n\n    indices = destIndices;\n  }\n\n  // Create bounding sphere that includes all instances\n  let center = new Cartesian3();\n  let radius = 0.0;\n  let bs;\n\n  for (i = 0; i < length; ++i) {\n    bs = instances[i][propertyName].boundingSphere;\n    if (!defined(bs)) {\n      // If any geometries have an undefined bounding sphere, then so does the combined geometry\n      center = undefined;\n      break;\n    }\n\n    Cartesian3.add(bs.center, center, center);\n  }\n\n  if (defined(center)) {\n    Cartesian3.divideByScalar(center, length, center);\n\n    for (i = 0; i < length; ++i) {\n      bs = instances[i][propertyName].boundingSphere;\n      const tempRadius =\n        Cartesian3.magnitude(\n          Cartesian3.subtract(bs.center, center, tempScratch),\n        ) + bs.radius;\n\n      if (tempRadius > radius) {\n        radius = tempRadius;\n      }\n    }\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: primitiveType,\n    boundingSphere: defined(center)\n      ? new BoundingSphere(center, radius)\n      : undefined,\n  });\n}\n\n/**\n * Combines geometry from several {@link GeometryInstance} objects into one geometry.\n * This concatenates the attributes, concatenates and adjusts the indices, and creates\n * a bounding sphere encompassing all instances.\n * <p>\n * If the instances do not have the same attributes, a subset of attributes common\n * to all instances is used, and the others are ignored.\n * </p>\n * <p>\n * This is used by {@link Primitive} to efficiently render a large amount of static data.\n * </p>\n *\n * @private\n *\n * @param {GeometryInstance[]} [instances] The array of {@link GeometryInstance} objects whose geometry will be combined.\n * @returns {Geometry} A single geometry created from the provided geometry instances.\n *\n * @exception {DeveloperError} All instances must have the same modelMatrix.\n * @exception {DeveloperError} All instance geometries must have an indices or not have one.\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n *\n *\n * @example\n * for (let i = 0; i < instances.length; ++i) {\n *   Cesium.GeometryPipeline.transformToWorldCoordinates(instances[i]);\n * }\n * const geometries = Cesium.GeometryPipeline.combineInstances(instances);\n *\n * @see GeometryPipeline.transformToWorldCoordinates\n */\nGeometryPipeline.combineInstances = function (instances) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(instances) || instances.length < 1) {\n    throw new DeveloperError(\n      \"instances is required and must have length greater than zero.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const instanceGeometry = [];\n  const instanceSplitGeometry = [];\n  const length = instances.length;\n  for (let i = 0; i < length; ++i) {\n    const instance = instances[i];\n\n    if (defined(instance.geometry)) {\n      instanceGeometry.push(instance);\n    } else if (\n      defined(instance.westHemisphereGeometry) &&\n      defined(instance.eastHemisphereGeometry)\n    ) {\n      instanceSplitGeometry.push(instance);\n    }\n  }\n\n  const geometries = [];\n  if (instanceGeometry.length > 0) {\n    geometries.push(combineGeometries(instanceGeometry, \"geometry\"));\n  }\n\n  if (instanceSplitGeometry.length > 0) {\n    geometries.push(\n      combineGeometries(instanceSplitGeometry, \"westHemisphereGeometry\"),\n    );\n    geometries.push(\n      combineGeometries(instanceSplitGeometry, \"eastHemisphereGeometry\"),\n    );\n  }\n\n  return geometries;\n};\n\nconst normal = new Cartesian3();\nconst v0 = new Cartesian3();\nconst v1 = new Cartesian3();\nconst v2 = new Cartesian3();\n\n/**\n * Computes per-vertex normals for a geometry containing <code>TRIANGLES</code> by averaging the normals of\n * all triangles incident to the vertex.  The result is a new <code>normal</code> attribute added to the geometry.\n * This assumes a counter-clockwise winding order.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument with the computed <code>normal</code> attribute.\n *\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\n *\n * @example\n * Cesium.GeometryPipeline.computeNormal(geometry);\n */\nGeometryPipeline.computeNormal = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  if (\n    !defined(geometry.attributes.position) ||\n    !defined(geometry.attributes.position.values)\n  ) {\n    throw new DeveloperError(\n      \"geometry.attributes.position.values is required.\",\n    );\n  }\n  if (!defined(geometry.indices)) {\n    throw new DeveloperError(\"geometry.indices is required.\");\n  }\n  if (geometry.indices.length < 2 || geometry.indices.length % 3 !== 0) {\n    throw new DeveloperError(\n      \"geometry.indices length must be greater than 0 and be a multiple of 3.\",\n    );\n  }\n  if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\n    throw new DeveloperError(\n      \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const indices = geometry.indices;\n  const attributes = geometry.attributes;\n  const vertices = attributes.position.values;\n  const numVertices = attributes.position.values.length / 3;\n  const numIndices = indices.length;\n  const normalsPerVertex = new Array(numVertices);\n  const normalsPerTriangle = new Array(numIndices / 3);\n  const normalIndices = new Array(numIndices);\n  let i;\n  for (i = 0; i < numVertices; i++) {\n    normalsPerVertex[i] = {\n      indexOffset: 0,\n      count: 0,\n      currentCount: 0,\n    };\n  }\n\n  let j = 0;\n  for (i = 0; i < numIndices; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n    const i03 = i0 * 3;\n    const i13 = i1 * 3;\n    const i23 = i2 * 3;\n\n    v0.x = vertices[i03];\n    v0.y = vertices[i03 + 1];\n    v0.z = vertices[i03 + 2];\n    v1.x = vertices[i13];\n    v1.y = vertices[i13 + 1];\n    v1.z = vertices[i13 + 2];\n    v2.x = vertices[i23];\n    v2.y = vertices[i23 + 1];\n    v2.z = vertices[i23 + 2];\n\n    normalsPerVertex[i0].count++;\n    normalsPerVertex[i1].count++;\n    normalsPerVertex[i2].count++;\n\n    Cartesian3.subtract(v1, v0, v1);\n    Cartesian3.subtract(v2, v0, v2);\n    normalsPerTriangle[j] = Cartesian3.cross(v1, v2, new Cartesian3());\n    j++;\n  }\n\n  let indexOffset = 0;\n  for (i = 0; i < numVertices; i++) {\n    normalsPerVertex[i].indexOffset += indexOffset;\n    indexOffset += normalsPerVertex[i].count;\n  }\n\n  j = 0;\n  let vertexNormalData;\n  for (i = 0; i < numIndices; i += 3) {\n    vertexNormalData = normalsPerVertex[indices[i]];\n    let index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n    normalIndices[index] = j;\n    vertexNormalData.currentCount++;\n\n    vertexNormalData = normalsPerVertex[indices[i + 1]];\n    index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n    normalIndices[index] = j;\n    vertexNormalData.currentCount++;\n\n    vertexNormalData = normalsPerVertex[indices[i + 2]];\n    index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n    normalIndices[index] = j;\n    vertexNormalData.currentCount++;\n\n    j++;\n  }\n\n  const normalValues = new Float32Array(numVertices * 3);\n  for (i = 0; i < numVertices; i++) {\n    const i3 = i * 3;\n    vertexNormalData = normalsPerVertex[i];\n    Cartesian3.clone(Cartesian3.ZERO, normal);\n    if (vertexNormalData.count > 0) {\n      for (j = 0; j < vertexNormalData.count; j++) {\n        Cartesian3.add(\n          normal,\n          normalsPerTriangle[normalIndices[vertexNormalData.indexOffset + j]],\n          normal,\n        );\n      }\n\n      // We can run into an issue where a vertex is used with 2 primitives that have opposite winding order.\n      if (\n        Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\n      ) {\n        Cartesian3.clone(\n          normalsPerTriangle[normalIndices[vertexNormalData.indexOffset]],\n          normal,\n        );\n      }\n    }\n\n    // We end up with a zero vector probably because of a degenerate triangle\n    if (\n      Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\n    ) {\n      // Default to (0,0,1)\n      normal.z = 1.0;\n    }\n\n    Cartesian3.normalize(normal, normal);\n    normalValues[i3] = normal.x;\n    normalValues[i3 + 1] = normal.y;\n    normalValues[i3 + 2] = normal.z;\n  }\n\n  geometry.attributes.normal = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 3,\n    values: normalValues,\n  });\n\n  return geometry;\n};\n\nconst normalScratch = new Cartesian3();\nconst normalScale = new Cartesian3();\nconst tScratch = new Cartesian3();\n\n/**\n * Computes per-vertex tangents and bitangents for a geometry containing <code>TRIANGLES</code>.\n * The result is new <code>tangent</code> and <code>bitangent</code> attributes added to the geometry.\n * This assumes a counter-clockwise winding order.\n * <p>\n * Based on <a href=\"http://www.terathon.com/code/tangent.html\">Computing Tangent Space Basis Vectors\n * for an Arbitrary Mesh</a> by Eric Lengyel.\n * </p>\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument with the computed <code>tangent</code> and <code>bitangent</code> attributes.\n *\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\n *\n * @example\n * Cesium.GeometryPipeline.computeTangentAndBiTangent(geometry);\n */\nGeometryPipeline.computeTangentAndBitangent = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const attributes = geometry.attributes;\n  const indices = geometry.indices;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(attributes.position) || !defined(attributes.position.values)) {\n    throw new DeveloperError(\n      \"geometry.attributes.position.values is required.\",\n    );\n  }\n  if (!defined(attributes.normal) || !defined(attributes.normal.values)) {\n    throw new DeveloperError(\"geometry.attributes.normal.values is required.\");\n  }\n  if (!defined(attributes.st) || !defined(attributes.st.values)) {\n    throw new DeveloperError(\"geometry.attributes.st.values is required.\");\n  }\n  if (!defined(indices)) {\n    throw new DeveloperError(\"geometry.indices is required.\");\n  }\n  if (indices.length < 2 || indices.length % 3 !== 0) {\n    throw new DeveloperError(\n      \"geometry.indices length must be greater than 0 and be a multiple of 3.\",\n    );\n  }\n  if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\n    throw new DeveloperError(\n      \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const vertices = geometry.attributes.position.values;\n  const normals = geometry.attributes.normal.values;\n  const st = geometry.attributes.st.values;\n\n  const numVertices = geometry.attributes.position.values.length / 3;\n  const numIndices = indices.length;\n  const tan1 = new Array(numVertices * 3);\n\n  let i;\n  for (i = 0; i < tan1.length; i++) {\n    tan1[i] = 0;\n  }\n\n  let i03;\n  let i13;\n  let i23;\n  for (i = 0; i < numIndices; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n    i03 = i0 * 3;\n    i13 = i1 * 3;\n    i23 = i2 * 3;\n    const i02 = i0 * 2;\n    const i12 = i1 * 2;\n    const i22 = i2 * 2;\n\n    const ux = vertices[i03];\n    const uy = vertices[i03 + 1];\n    const uz = vertices[i03 + 2];\n\n    const wx = st[i02];\n    const wy = st[i02 + 1];\n    const t1 = st[i12 + 1] - wy;\n    const t2 = st[i22 + 1] - wy;\n\n    const r = 1.0 / ((st[i12] - wx) * t2 - (st[i22] - wx) * t1);\n    const sdirx = (t2 * (vertices[i13] - ux) - t1 * (vertices[i23] - ux)) * r;\n    const sdiry =\n      (t2 * (vertices[i13 + 1] - uy) - t1 * (vertices[i23 + 1] - uy)) * r;\n    const sdirz =\n      (t2 * (vertices[i13 + 2] - uz) - t1 * (vertices[i23 + 2] - uz)) * r;\n\n    tan1[i03] += sdirx;\n    tan1[i03 + 1] += sdiry;\n    tan1[i03 + 2] += sdirz;\n\n    tan1[i13] += sdirx;\n    tan1[i13 + 1] += sdiry;\n    tan1[i13 + 2] += sdirz;\n\n    tan1[i23] += sdirx;\n    tan1[i23 + 1] += sdiry;\n    tan1[i23 + 2] += sdirz;\n  }\n\n  const tangentValues = new Float32Array(numVertices * 3);\n  const bitangentValues = new Float32Array(numVertices * 3);\n\n  for (i = 0; i < numVertices; i++) {\n    i03 = i * 3;\n    i13 = i03 + 1;\n    i23 = i03 + 2;\n\n    const n = Cartesian3.fromArray(normals, i03, normalScratch);\n    const t = Cartesian3.fromArray(tan1, i03, tScratch);\n    const scalar = Cartesian3.dot(n, t);\n    Cartesian3.multiplyByScalar(n, scalar, normalScale);\n    Cartesian3.normalize(Cartesian3.subtract(t, normalScale, t), t);\n\n    tangentValues[i03] = t.x;\n    tangentValues[i13] = t.y;\n    tangentValues[i23] = t.z;\n\n    Cartesian3.normalize(Cartesian3.cross(n, t, t), t);\n\n    bitangentValues[i03] = t.x;\n    bitangentValues[i13] = t.y;\n    bitangentValues[i23] = t.z;\n  }\n\n  geometry.attributes.tangent = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 3,\n    values: tangentValues,\n  });\n\n  geometry.attributes.bitangent = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 3,\n    values: bitangentValues,\n  });\n\n  return geometry;\n};\n\nconst scratchCartesian2 = new Cartesian2();\nconst toEncode1 = new Cartesian3();\nconst toEncode2 = new Cartesian3();\nconst toEncode3 = new Cartesian3();\nlet encodeResult2 = new Cartesian2();\n/**\n * Compresses and packs geometry normal attribute values to save memory.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified <code>geometry</code> argument, with its normals compressed and packed.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.compressVertices(geometry);\n */\nGeometryPipeline.compressVertices = function (geometry) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const extrudeAttribute = geometry.attributes.extrudeDirection;\n  let i;\n  let numVertices;\n  if (defined(extrudeAttribute)) {\n    //only shadow volumes use extrudeDirection, and shadow volumes use vertexFormat: POSITION_ONLY so we don't need to check other attributes\n    const extrudeDirections = extrudeAttribute.values;\n    numVertices = extrudeDirections.length / 3.0;\n    const compressedDirections = new Float32Array(numVertices * 2);\n\n    let i2 = 0;\n    for (i = 0; i < numVertices; ++i) {\n      Cartesian3.fromArray(extrudeDirections, i * 3.0, toEncode1);\n      if (Cartesian3.equals(toEncode1, Cartesian3.ZERO)) {\n        i2 += 2;\n        continue;\n      }\n      encodeResult2 = AttributeCompression.octEncodeInRange(\n        toEncode1,\n        65535,\n        encodeResult2,\n      );\n      compressedDirections[i2++] = encodeResult2.x;\n      compressedDirections[i2++] = encodeResult2.y;\n    }\n\n    geometry.attributes.compressedAttributes = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: compressedDirections,\n    });\n    delete geometry.attributes.extrudeDirection;\n    return geometry;\n  }\n\n  const normalAttribute = geometry.attributes.normal;\n  const stAttribute = geometry.attributes.st;\n\n  const hasNormal = defined(normalAttribute);\n  const hasSt = defined(stAttribute);\n  if (!hasNormal && !hasSt) {\n    return geometry;\n  }\n\n  const tangentAttribute = geometry.attributes.tangent;\n  const bitangentAttribute = geometry.attributes.bitangent;\n\n  const hasTangent = defined(tangentAttribute);\n  const hasBitangent = defined(bitangentAttribute);\n\n  let normals;\n  let st;\n  let tangents;\n  let bitangents;\n\n  if (hasNormal) {\n    normals = normalAttribute.values;\n  }\n  if (hasSt) {\n    st = stAttribute.values;\n  }\n  if (hasTangent) {\n    tangents = tangentAttribute.values;\n  }\n  if (hasBitangent) {\n    bitangents = bitangentAttribute.values;\n  }\n\n  const length = hasNormal ? normals.length : st.length;\n  const numComponents = hasNormal ? 3.0 : 2.0;\n  numVertices = length / numComponents;\n\n  let compressedLength = numVertices;\n  let numCompressedComponents = hasSt && hasNormal ? 2.0 : 1.0;\n  numCompressedComponents += hasTangent || hasBitangent ? 1.0 : 0.0;\n  compressedLength *= numCompressedComponents;\n\n  const compressedAttributes = new Float32Array(compressedLength);\n\n  let normalIndex = 0;\n  for (i = 0; i < numVertices; ++i) {\n    if (hasSt) {\n      Cartesian2.fromArray(st, i * 2.0, scratchCartesian2);\n      compressedAttributes[normalIndex++] =\n        AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n    }\n\n    const index = i * 3.0;\n    if (hasNormal && defined(tangents) && defined(bitangents)) {\n      Cartesian3.fromArray(normals, index, toEncode1);\n      Cartesian3.fromArray(tangents, index, toEncode2);\n      Cartesian3.fromArray(bitangents, index, toEncode3);\n\n      AttributeCompression.octPack(\n        toEncode1,\n        toEncode2,\n        toEncode3,\n        scratchCartesian2,\n      );\n      compressedAttributes[normalIndex++] = scratchCartesian2.x;\n      compressedAttributes[normalIndex++] = scratchCartesian2.y;\n    } else {\n      if (hasNormal) {\n        Cartesian3.fromArray(normals, index, toEncode1);\n        compressedAttributes[normalIndex++] =\n          AttributeCompression.octEncodeFloat(toEncode1);\n      }\n\n      if (hasTangent) {\n        Cartesian3.fromArray(tangents, index, toEncode1);\n        compressedAttributes[normalIndex++] =\n          AttributeCompression.octEncodeFloat(toEncode1);\n      }\n\n      if (hasBitangent) {\n        Cartesian3.fromArray(bitangents, index, toEncode1);\n        compressedAttributes[normalIndex++] =\n          AttributeCompression.octEncodeFloat(toEncode1);\n      }\n    }\n  }\n\n  geometry.attributes.compressedAttributes = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: numCompressedComponents,\n    values: compressedAttributes,\n  });\n\n  if (hasNormal) {\n    delete geometry.attributes.normal;\n  }\n  if (hasSt) {\n    delete geometry.attributes.st;\n  }\n  if (hasBitangent) {\n    delete geometry.attributes.bitangent;\n  }\n  if (hasTangent) {\n    delete geometry.attributes.tangent;\n  }\n\n  return geometry;\n};\n\nfunction indexTriangles(geometry) {\n  if (defined(geometry.indices)) {\n    return geometry;\n  }\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numberOfVertices < 3) {\n    throw new DeveloperError(\"The number of vertices must be at least three.\");\n  }\n  if (numberOfVertices % 3 !== 0) {\n    throw new DeveloperError(\n      \"The number of vertices must be a multiple of three.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const indices = IndexDatatype.createTypedArray(\n    numberOfVertices,\n    numberOfVertices,\n  );\n  for (let i = 0; i < numberOfVertices; ++i) {\n    indices[i] = i;\n  }\n\n  geometry.indices = indices;\n  return geometry;\n}\n\nfunction indexTriangleFan(geometry) {\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numberOfVertices < 3) {\n    throw new DeveloperError(\"The number of vertices must be at least three.\");\n  }\n  //>>includeEnd('debug');\n\n  const indices = IndexDatatype.createTypedArray(\n    numberOfVertices,\n    (numberOfVertices - 2) * 3,\n  );\n  indices[0] = 1;\n  indices[1] = 0;\n  indices[2] = 2;\n\n  let indicesIndex = 3;\n  for (let i = 3; i < numberOfVertices; ++i) {\n    indices[indicesIndex++] = i - 1;\n    indices[indicesIndex++] = 0;\n    indices[indicesIndex++] = i;\n  }\n\n  geometry.indices = indices;\n  geometry.primitiveType = PrimitiveType.TRIANGLES;\n  return geometry;\n}\n\nfunction indexTriangleStrip(geometry) {\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numberOfVertices < 3) {\n    throw new DeveloperError(\"The number of vertices must be at least 3.\");\n  }\n  //>>includeEnd('debug');\n\n  const indices = IndexDatatype.createTypedArray(\n    numberOfVertices,\n    (numberOfVertices - 2) * 3,\n  );\n  indices[0] = 0;\n  indices[1] = 1;\n  indices[2] = 2;\n\n  if (numberOfVertices > 3) {\n    indices[3] = 0;\n    indices[4] = 2;\n    indices[5] = 3;\n  }\n\n  let indicesIndex = 6;\n  for (let i = 3; i < numberOfVertices - 1; i += 2) {\n    indices[indicesIndex++] = i;\n    indices[indicesIndex++] = i - 1;\n    indices[indicesIndex++] = i + 1;\n\n    if (i + 2 < numberOfVertices) {\n      indices[indicesIndex++] = i;\n      indices[indicesIndex++] = i + 1;\n      indices[indicesIndex++] = i + 2;\n    }\n  }\n\n  geometry.indices = indices;\n  geometry.primitiveType = PrimitiveType.TRIANGLES;\n  return geometry;\n}\n\nfunction indexLines(geometry) {\n  if (defined(geometry.indices)) {\n    return geometry;\n  }\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numberOfVertices < 2) {\n    throw new DeveloperError(\"The number of vertices must be at least two.\");\n  }\n  if (numberOfVertices % 2 !== 0) {\n    throw new DeveloperError(\"The number of vertices must be a multiple of 2.\");\n  }\n  //>>includeEnd('debug');\n\n  const indices = IndexDatatype.createTypedArray(\n    numberOfVertices,\n    numberOfVertices,\n  );\n  for (let i = 0; i < numberOfVertices; ++i) {\n    indices[i] = i;\n  }\n\n  geometry.indices = indices;\n  return geometry;\n}\n\nfunction indexLineStrip(geometry) {\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numberOfVertices < 2) {\n    throw new DeveloperError(\"The number of vertices must be at least two.\");\n  }\n  //>>includeEnd('debug');\n\n  const indices = IndexDatatype.createTypedArray(\n    numberOfVertices,\n    (numberOfVertices - 1) * 2,\n  );\n  indices[0] = 0;\n  indices[1] = 1;\n  let indicesIndex = 2;\n  for (let i = 2; i < numberOfVertices; ++i) {\n    indices[indicesIndex++] = i - 1;\n    indices[indicesIndex++] = i;\n  }\n\n  geometry.indices = indices;\n  geometry.primitiveType = PrimitiveType.LINES;\n  return geometry;\n}\n\nfunction indexLineLoop(geometry) {\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numberOfVertices < 2) {\n    throw new DeveloperError(\"The number of vertices must be at least two.\");\n  }\n  //>>includeEnd('debug');\n\n  const indices = IndexDatatype.createTypedArray(\n    numberOfVertices,\n    numberOfVertices * 2,\n  );\n\n  indices[0] = 0;\n  indices[1] = 1;\n\n  let indicesIndex = 2;\n  for (let i = 2; i < numberOfVertices; ++i) {\n    indices[indicesIndex++] = i - 1;\n    indices[indicesIndex++] = i;\n  }\n\n  indices[indicesIndex++] = numberOfVertices - 1;\n  indices[indicesIndex] = 0;\n\n  geometry.indices = indices;\n  geometry.primitiveType = PrimitiveType.LINES;\n  return geometry;\n}\n\nfunction indexPrimitive(geometry) {\n  switch (geometry.primitiveType) {\n    case PrimitiveType.TRIANGLE_FAN:\n      return indexTriangleFan(geometry);\n    case PrimitiveType.TRIANGLE_STRIP:\n      return indexTriangleStrip(geometry);\n    case PrimitiveType.TRIANGLES:\n      return indexTriangles(geometry);\n    case PrimitiveType.LINE_STRIP:\n      return indexLineStrip(geometry);\n    case PrimitiveType.LINE_LOOP:\n      return indexLineLoop(geometry);\n    case PrimitiveType.LINES:\n      return indexLines(geometry);\n  }\n\n  return geometry;\n}\n\nfunction offsetPointFromXZPlane(p, isBehind) {\n  if (Math.abs(p.y) < CesiumMath.EPSILON6) {\n    if (isBehind) {\n      p.y = -CesiumMath.EPSILON6;\n    } else {\n      p.y = CesiumMath.EPSILON6;\n    }\n  }\n}\n\nfunction offsetTriangleFromXZPlane(p0, p1, p2) {\n  if (p0.y !== 0.0 && p1.y !== 0.0 && p2.y !== 0.0) {\n    offsetPointFromXZPlane(p0, p0.y < 0.0);\n    offsetPointFromXZPlane(p1, p1.y < 0.0);\n    offsetPointFromXZPlane(p2, p2.y < 0.0);\n    return;\n  }\n\n  const p0y = Math.abs(p0.y);\n  const p1y = Math.abs(p1.y);\n  const p2y = Math.abs(p2.y);\n\n  let sign;\n  if (p0y > p1y) {\n    if (p0y > p2y) {\n      sign = CesiumMath.sign(p0.y);\n    } else {\n      sign = CesiumMath.sign(p2.y);\n    }\n  } else if (p1y > p2y) {\n    sign = CesiumMath.sign(p1.y);\n  } else {\n    sign = CesiumMath.sign(p2.y);\n  }\n\n  const isBehind = sign < 0.0;\n  offsetPointFromXZPlane(p0, isBehind);\n  offsetPointFromXZPlane(p1, isBehind);\n  offsetPointFromXZPlane(p2, isBehind);\n}\n\nconst c3 = new Cartesian3();\nfunction getXZIntersectionOffsetPoints(p, p1, u1, v1) {\n  Cartesian3.add(\n    p,\n    Cartesian3.multiplyByScalar(\n      Cartesian3.subtract(p1, p, c3),\n      p.y / (p.y - p1.y),\n      c3,\n    ),\n    u1,\n  );\n  Cartesian3.clone(u1, v1);\n  offsetPointFromXZPlane(u1, true);\n  offsetPointFromXZPlane(v1, false);\n}\n\nconst u1 = new Cartesian3();\nconst u2 = new Cartesian3();\nconst q1 = new Cartesian3();\nconst q2 = new Cartesian3();\n\nconst splitTriangleResult = {\n  positions: new Array(7),\n  indices: new Array(3 * 3),\n};\n\nfunction splitTriangle(p0, p1, p2) {\n  // In ellipsoid coordinates, for a triangle approximately on the\n  // ellipsoid to cross the IDL, first it needs to be on the\n  // negative side of the plane x = 0.\n  if (p0.x >= 0.0 || p1.x >= 0.0 || p2.x >= 0.0) {\n    return undefined;\n  }\n\n  offsetTriangleFromXZPlane(p0, p1, p2);\n\n  const p0Behind = p0.y < 0.0;\n  const p1Behind = p1.y < 0.0;\n  const p2Behind = p2.y < 0.0;\n\n  let numBehind = 0;\n  numBehind += p0Behind ? 1 : 0;\n  numBehind += p1Behind ? 1 : 0;\n  numBehind += p2Behind ? 1 : 0;\n\n  const indices = splitTriangleResult.indices;\n\n  if (numBehind === 1) {\n    indices[1] = 3;\n    indices[2] = 4;\n    indices[5] = 6;\n    indices[7] = 6;\n    indices[8] = 5;\n\n    if (p0Behind) {\n      getXZIntersectionOffsetPoints(p0, p1, u1, q1);\n      getXZIntersectionOffsetPoints(p0, p2, u2, q2);\n\n      indices[0] = 0;\n      indices[3] = 1;\n      indices[4] = 2;\n      indices[6] = 1;\n    } else if (p1Behind) {\n      getXZIntersectionOffsetPoints(p1, p2, u1, q1);\n      getXZIntersectionOffsetPoints(p1, p0, u2, q2);\n\n      indices[0] = 1;\n      indices[3] = 2;\n      indices[4] = 0;\n      indices[6] = 2;\n    } else if (p2Behind) {\n      getXZIntersectionOffsetPoints(p2, p0, u1, q1);\n      getXZIntersectionOffsetPoints(p2, p1, u2, q2);\n\n      indices[0] = 2;\n      indices[3] = 0;\n      indices[4] = 1;\n      indices[6] = 0;\n    }\n  } else if (numBehind === 2) {\n    indices[2] = 4;\n    indices[4] = 4;\n    indices[5] = 3;\n    indices[7] = 5;\n    indices[8] = 6;\n\n    if (!p0Behind) {\n      getXZIntersectionOffsetPoints(p0, p1, u1, q1);\n      getXZIntersectionOffsetPoints(p0, p2, u2, q2);\n\n      indices[0] = 1;\n      indices[1] = 2;\n      indices[3] = 1;\n      indices[6] = 0;\n    } else if (!p1Behind) {\n      getXZIntersectionOffsetPoints(p1, p2, u1, q1);\n      getXZIntersectionOffsetPoints(p1, p0, u2, q2);\n\n      indices[0] = 2;\n      indices[1] = 0;\n      indices[3] = 2;\n      indices[6] = 1;\n    } else if (!p2Behind) {\n      getXZIntersectionOffsetPoints(p2, p0, u1, q1);\n      getXZIntersectionOffsetPoints(p2, p1, u2, q2);\n\n      indices[0] = 0;\n      indices[1] = 1;\n      indices[3] = 0;\n      indices[6] = 2;\n    }\n  }\n\n  const positions = splitTriangleResult.positions;\n  positions[0] = p0;\n  positions[1] = p1;\n  positions[2] = p2;\n  positions.length = 3;\n\n  if (numBehind === 1 || numBehind === 2) {\n    positions[3] = u1;\n    positions[4] = u2;\n    positions[5] = q1;\n    positions[6] = q2;\n    positions.length = 7;\n  }\n\n  return splitTriangleResult;\n}\n\nfunction updateGeometryAfterSplit(geometry, computeBoundingSphere) {\n  const attributes = geometry.attributes;\n\n  if (attributes.position.values.length === 0) {\n    return undefined;\n  }\n\n  for (const property in attributes) {\n    if (\n      attributes.hasOwnProperty(property) &&\n      defined(attributes[property]) &&\n      defined(attributes[property].values)\n    ) {\n      const attribute = attributes[property];\n      attribute.values = ComponentDatatype.createTypedArray(\n        attribute.componentDatatype,\n        attribute.values,\n      );\n    }\n  }\n\n  const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n  geometry.indices = IndexDatatype.createTypedArray(\n    numberOfVertices,\n    geometry.indices,\n  );\n\n  if (computeBoundingSphere) {\n    geometry.boundingSphere = BoundingSphere.fromVertices(\n      attributes.position.values,\n    );\n  }\n\n  return geometry;\n}\n\nfunction copyGeometryForSplit(geometry) {\n  const attributes = geometry.attributes;\n  const copiedAttributes = {};\n\n  for (const property in attributes) {\n    if (\n      attributes.hasOwnProperty(property) &&\n      defined(attributes[property]) &&\n      defined(attributes[property].values)\n    ) {\n      const attribute = attributes[property];\n      copiedAttributes[property] = new GeometryAttribute({\n        componentDatatype: attribute.componentDatatype,\n        componentsPerAttribute: attribute.componentsPerAttribute,\n        normalize: attribute.normalize,\n        values: [],\n      });\n    }\n  }\n\n  return new Geometry({\n    attributes: copiedAttributes,\n    indices: [],\n    primitiveType: geometry.primitiveType,\n  });\n}\n\nfunction updateInstanceAfterSplit(instance, westGeometry, eastGeometry) {\n  const computeBoundingSphere = defined(instance.geometry.boundingSphere);\n\n  westGeometry = updateGeometryAfterSplit(westGeometry, computeBoundingSphere);\n  eastGeometry = updateGeometryAfterSplit(eastGeometry, computeBoundingSphere);\n\n  if (defined(eastGeometry) && !defined(westGeometry)) {\n    instance.geometry = eastGeometry;\n  } else if (!defined(eastGeometry) && defined(westGeometry)) {\n    instance.geometry = westGeometry;\n  } else {\n    instance.westHemisphereGeometry = westGeometry;\n    instance.eastHemisphereGeometry = eastGeometry;\n    instance.geometry = undefined;\n  }\n}\n\nfunction generateBarycentricInterpolateFunction(\n  CartesianType,\n  numberOfComponents,\n) {\n  const v0Scratch = new CartesianType();\n  const v1Scratch = new CartesianType();\n  const v2Scratch = new CartesianType();\n\n  return function (\n    i0,\n    i1,\n    i2,\n    coords,\n    sourceValues,\n    currentValues,\n    insertedIndex,\n    normalize,\n  ) {\n    const v0 = CartesianType.fromArray(\n      sourceValues,\n      i0 * numberOfComponents,\n      v0Scratch,\n    );\n    const v1 = CartesianType.fromArray(\n      sourceValues,\n      i1 * numberOfComponents,\n      v1Scratch,\n    );\n    const v2 = CartesianType.fromArray(\n      sourceValues,\n      i2 * numberOfComponents,\n      v2Scratch,\n    );\n\n    CartesianType.multiplyByScalar(v0, coords.x, v0);\n    CartesianType.multiplyByScalar(v1, coords.y, v1);\n    CartesianType.multiplyByScalar(v2, coords.z, v2);\n\n    const value = CartesianType.add(v0, v1, v0);\n    CartesianType.add(value, v2, value);\n\n    if (normalize) {\n      CartesianType.normalize(value, value);\n    }\n\n    CartesianType.pack(\n      value,\n      currentValues,\n      insertedIndex * numberOfComponents,\n    );\n  };\n}\n\nconst interpolateAndPackCartesian4 = generateBarycentricInterpolateFunction(\n  Cartesian4,\n  4,\n);\nconst interpolateAndPackCartesian3 = generateBarycentricInterpolateFunction(\n  Cartesian3,\n  3,\n);\nconst interpolateAndPackCartesian2 = generateBarycentricInterpolateFunction(\n  Cartesian2,\n  2,\n);\nconst interpolateAndPackBoolean = function (\n  i0,\n  i1,\n  i2,\n  coords,\n  sourceValues,\n  currentValues,\n  insertedIndex,\n) {\n  const v1 = sourceValues[i0] * coords.x;\n  const v2 = sourceValues[i1] * coords.y;\n  const v3 = sourceValues[i2] * coords.z;\n  currentValues[insertedIndex] = v1 + v2 + v3 > CesiumMath.EPSILON6 ? 1 : 0;\n};\n\nconst p0Scratch = new Cartesian3();\nconst p1Scratch = new Cartesian3();\nconst p2Scratch = new Cartesian3();\nconst barycentricScratch = new Cartesian3();\n\nfunction computeTriangleAttributes(\n  i0,\n  i1,\n  i2,\n  point,\n  positions,\n  normals,\n  tangents,\n  bitangents,\n  texCoords,\n  extrudeDirections,\n  applyOffset,\n  currentAttributes,\n  customAttributeNames,\n  customAttributesLength,\n  allAttributes,\n  insertedIndex,\n) {\n  if (\n    !defined(normals) &&\n    !defined(tangents) &&\n    !defined(bitangents) &&\n    !defined(texCoords) &&\n    !defined(extrudeDirections) &&\n    customAttributesLength === 0\n  ) {\n    return;\n  }\n\n  const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n  const p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\n  const p2 = Cartesian3.fromArray(positions, i2 * 3, p2Scratch);\n  const coords = barycentricCoordinates(point, p0, p1, p2, barycentricScratch);\n  if (!defined(coords)) {\n    return;\n  }\n\n  if (defined(normals)) {\n    interpolateAndPackCartesian3(\n      i0,\n      i1,\n      i2,\n      coords,\n      normals,\n      currentAttributes.normal.values,\n      insertedIndex,\n      true,\n    );\n  }\n\n  if (defined(extrudeDirections)) {\n    const d0 = Cartesian3.fromArray(extrudeDirections, i0 * 3, p0Scratch);\n    const d1 = Cartesian3.fromArray(extrudeDirections, i1 * 3, p1Scratch);\n    const d2 = Cartesian3.fromArray(extrudeDirections, i2 * 3, p2Scratch);\n\n    Cartesian3.multiplyByScalar(d0, coords.x, d0);\n    Cartesian3.multiplyByScalar(d1, coords.y, d1);\n    Cartesian3.multiplyByScalar(d2, coords.z, d2);\n\n    let direction;\n    if (\n      !Cartesian3.equals(d0, Cartesian3.ZERO) ||\n      !Cartesian3.equals(d1, Cartesian3.ZERO) ||\n      !Cartesian3.equals(d2, Cartesian3.ZERO)\n    ) {\n      direction = Cartesian3.add(d0, d1, d0);\n      Cartesian3.add(direction, d2, direction);\n      Cartesian3.normalize(direction, direction);\n    } else {\n      direction = p0Scratch;\n      direction.x = 0;\n      direction.y = 0;\n      direction.z = 0;\n    }\n    Cartesian3.pack(\n      direction,\n      currentAttributes.extrudeDirection.values,\n      insertedIndex * 3,\n    );\n  }\n\n  if (defined(applyOffset)) {\n    interpolateAndPackBoolean(\n      i0,\n      i1,\n      i2,\n      coords,\n      applyOffset,\n      currentAttributes.applyOffset.values,\n      insertedIndex,\n    );\n  }\n\n  if (defined(tangents)) {\n    interpolateAndPackCartesian3(\n      i0,\n      i1,\n      i2,\n      coords,\n      tangents,\n      currentAttributes.tangent.values,\n      insertedIndex,\n      true,\n    );\n  }\n\n  if (defined(bitangents)) {\n    interpolateAndPackCartesian3(\n      i0,\n      i1,\n      i2,\n      coords,\n      bitangents,\n      currentAttributes.bitangent.values,\n      insertedIndex,\n      true,\n    );\n  }\n\n  if (defined(texCoords)) {\n    interpolateAndPackCartesian2(\n      i0,\n      i1,\n      i2,\n      coords,\n      texCoords,\n      currentAttributes.st.values,\n      insertedIndex,\n    );\n  }\n\n  if (customAttributesLength > 0) {\n    for (let i = 0; i < customAttributesLength; i++) {\n      const attributeName = customAttributeNames[i];\n      genericInterpolate(\n        i0,\n        i1,\n        i2,\n        coords,\n        insertedIndex,\n        allAttributes[attributeName],\n        currentAttributes[attributeName],\n      );\n    }\n  }\n}\n\nfunction genericInterpolate(\n  i0,\n  i1,\n  i2,\n  coords,\n  insertedIndex,\n  sourceAttribute,\n  currentAttribute,\n) {\n  const componentsPerAttribute = sourceAttribute.componentsPerAttribute;\n  const sourceValues = sourceAttribute.values;\n  const currentValues = currentAttribute.values;\n  switch (componentsPerAttribute) {\n    case 4:\n      interpolateAndPackCartesian4(\n        i0,\n        i1,\n        i2,\n        coords,\n        sourceValues,\n        currentValues,\n        insertedIndex,\n        false,\n      );\n      break;\n    case 3:\n      interpolateAndPackCartesian3(\n        i0,\n        i1,\n        i2,\n        coords,\n        sourceValues,\n        currentValues,\n        insertedIndex,\n        false,\n      );\n      break;\n    case 2:\n      interpolateAndPackCartesian2(\n        i0,\n        i1,\n        i2,\n        coords,\n        sourceValues,\n        currentValues,\n        insertedIndex,\n        false,\n      );\n      break;\n    default:\n      currentValues[insertedIndex] =\n        sourceValues[i0] * coords.x +\n        sourceValues[i1] * coords.y +\n        sourceValues[i2] * coords.z;\n  }\n}\n\nfunction insertSplitPoint(\n  currentAttributes,\n  currentIndices,\n  currentIndexMap,\n  indices,\n  currentIndex,\n  point,\n) {\n  const insertIndex = currentAttributes.position.values.length / 3;\n\n  if (currentIndex !== -1) {\n    const prevIndex = indices[currentIndex];\n    const newIndex = currentIndexMap[prevIndex];\n\n    if (newIndex === -1) {\n      currentIndexMap[prevIndex] = insertIndex;\n      currentAttributes.position.values.push(point.x, point.y, point.z);\n      currentIndices.push(insertIndex);\n      return insertIndex;\n    }\n\n    currentIndices.push(newIndex);\n    return newIndex;\n  }\n\n  currentAttributes.position.values.push(point.x, point.y, point.z);\n  currentIndices.push(insertIndex);\n  return insertIndex;\n}\n\nconst NAMED_ATTRIBUTES = {\n  position: true,\n  normal: true,\n  bitangent: true,\n  tangent: true,\n  st: true,\n  extrudeDirection: true,\n  applyOffset: true,\n};\nfunction splitLongitudeTriangles(instance) {\n  const geometry = instance.geometry;\n  const attributes = geometry.attributes;\n  const positions = attributes.position.values;\n  const normals = defined(attributes.normal)\n    ? attributes.normal.values\n    : undefined;\n  const bitangents = defined(attributes.bitangent)\n    ? attributes.bitangent.values\n    : undefined;\n  const tangents = defined(attributes.tangent)\n    ? attributes.tangent.values\n    : undefined;\n  const texCoords = defined(attributes.st) ? attributes.st.values : undefined;\n  const extrudeDirections = defined(attributes.extrudeDirection)\n    ? attributes.extrudeDirection.values\n    : undefined;\n  const applyOffset = defined(attributes.applyOffset)\n    ? attributes.applyOffset.values\n    : undefined;\n  const indices = geometry.indices;\n\n  const customAttributeNames = [];\n  for (const attributeName in attributes) {\n    if (\n      attributes.hasOwnProperty(attributeName) &&\n      !NAMED_ATTRIBUTES[attributeName] &&\n      defined(attributes[attributeName])\n    ) {\n      customAttributeNames.push(attributeName);\n    }\n  }\n  const customAttributesLength = customAttributeNames.length;\n\n  const eastGeometry = copyGeometryForSplit(geometry);\n  const westGeometry = copyGeometryForSplit(geometry);\n\n  let currentAttributes;\n  let currentIndices;\n  let currentIndexMap;\n  let insertedIndex;\n  let i;\n\n  const westGeometryIndexMap = [];\n  westGeometryIndexMap.length = positions.length / 3;\n\n  const eastGeometryIndexMap = [];\n  eastGeometryIndexMap.length = positions.length / 3;\n\n  for (i = 0; i < westGeometryIndexMap.length; ++i) {\n    westGeometryIndexMap[i] = -1;\n    eastGeometryIndexMap[i] = -1;\n  }\n\n  const len = indices.length;\n  for (i = 0; i < len; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n\n    let p0 = Cartesian3.fromArray(positions, i0 * 3);\n    let p1 = Cartesian3.fromArray(positions, i1 * 3);\n    let p2 = Cartesian3.fromArray(positions, i2 * 3);\n\n    const result = splitTriangle(p0, p1, p2);\n    if (defined(result) && result.positions.length > 3) {\n      const resultPositions = result.positions;\n      const resultIndices = result.indices;\n      const resultLength = resultIndices.length;\n\n      for (let j = 0; j < resultLength; ++j) {\n        const resultIndex = resultIndices[j];\n        const point = resultPositions[resultIndex];\n\n        if (point.y < 0.0) {\n          currentAttributes = westGeometry.attributes;\n          currentIndices = westGeometry.indices;\n          currentIndexMap = westGeometryIndexMap;\n        } else {\n          currentAttributes = eastGeometry.attributes;\n          currentIndices = eastGeometry.indices;\n          currentIndexMap = eastGeometryIndexMap;\n        }\n\n        insertedIndex = insertSplitPoint(\n          currentAttributes,\n          currentIndices,\n          currentIndexMap,\n          indices,\n          resultIndex < 3 ? i + resultIndex : -1,\n          point,\n        );\n        computeTriangleAttributes(\n          i0,\n          i1,\n          i2,\n          point,\n          positions,\n          normals,\n          tangents,\n          bitangents,\n          texCoords,\n          extrudeDirections,\n          applyOffset,\n          currentAttributes,\n          customAttributeNames,\n          customAttributesLength,\n          attributes,\n          insertedIndex,\n        );\n      }\n    } else {\n      if (defined(result)) {\n        p0 = result.positions[0];\n        p1 = result.positions[1];\n        p2 = result.positions[2];\n      }\n\n      if (p0.y < 0.0) {\n        currentAttributes = westGeometry.attributes;\n        currentIndices = westGeometry.indices;\n        currentIndexMap = westGeometryIndexMap;\n      } else {\n        currentAttributes = eastGeometry.attributes;\n        currentIndices = eastGeometry.indices;\n        currentIndexMap = eastGeometryIndexMap;\n      }\n\n      insertedIndex = insertSplitPoint(\n        currentAttributes,\n        currentIndices,\n        currentIndexMap,\n        indices,\n        i,\n        p0,\n      );\n      computeTriangleAttributes(\n        i0,\n        i1,\n        i2,\n        p0,\n        positions,\n        normals,\n        tangents,\n        bitangents,\n        texCoords,\n        extrudeDirections,\n        applyOffset,\n        currentAttributes,\n        customAttributeNames,\n        customAttributesLength,\n        attributes,\n        insertedIndex,\n      );\n\n      insertedIndex = insertSplitPoint(\n        currentAttributes,\n        currentIndices,\n        currentIndexMap,\n        indices,\n        i + 1,\n        p1,\n      );\n      computeTriangleAttributes(\n        i0,\n        i1,\n        i2,\n        p1,\n        positions,\n        normals,\n        tangents,\n        bitangents,\n        texCoords,\n        extrudeDirections,\n        applyOffset,\n        currentAttributes,\n        customAttributeNames,\n        customAttributesLength,\n        attributes,\n        insertedIndex,\n      );\n\n      insertedIndex = insertSplitPoint(\n        currentAttributes,\n        currentIndices,\n        currentIndexMap,\n        indices,\n        i + 2,\n        p2,\n      );\n      computeTriangleAttributes(\n        i0,\n        i1,\n        i2,\n        p2,\n        positions,\n        normals,\n        tangents,\n        bitangents,\n        texCoords,\n        extrudeDirections,\n        applyOffset,\n        currentAttributes,\n        customAttributeNames,\n        customAttributesLength,\n        attributes,\n        insertedIndex,\n      );\n    }\n  }\n\n  updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\nconst xzPlane = Plane.fromPointNormal(Cartesian3.ZERO, Cartesian3.UNIT_Y);\n\nconst offsetScratch = new Cartesian3();\nconst offsetPointScratch = new Cartesian3();\n\nfunction computeLineAttributes(\n  i0,\n  i1,\n  point,\n  positions,\n  insertIndex,\n  currentAttributes,\n  applyOffset,\n) {\n  if (!defined(applyOffset)) {\n    return;\n  }\n\n  const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n  if (Cartesian3.equalsEpsilon(p0, point, CesiumMath.EPSILON10)) {\n    currentAttributes.applyOffset.values[insertIndex] = applyOffset[i0];\n  } else {\n    currentAttributes.applyOffset.values[insertIndex] = applyOffset[i1];\n  }\n}\n\nfunction splitLongitudeLines(instance) {\n  const geometry = instance.geometry;\n  const attributes = geometry.attributes;\n  const positions = attributes.position.values;\n  const applyOffset = defined(attributes.applyOffset)\n    ? attributes.applyOffset.values\n    : undefined;\n  const indices = geometry.indices;\n\n  const eastGeometry = copyGeometryForSplit(geometry);\n  const westGeometry = copyGeometryForSplit(geometry);\n\n  let i;\n  const length = indices.length;\n\n  const westGeometryIndexMap = [];\n  westGeometryIndexMap.length = positions.length / 3;\n\n  const eastGeometryIndexMap = [];\n  eastGeometryIndexMap.length = positions.length / 3;\n\n  for (i = 0; i < westGeometryIndexMap.length; ++i) {\n    westGeometryIndexMap[i] = -1;\n    eastGeometryIndexMap[i] = -1;\n  }\n\n  for (i = 0; i < length; i += 2) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n\n    const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n    const p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\n    let insertIndex;\n\n    if (Math.abs(p0.y) < CesiumMath.EPSILON6) {\n      if (p0.y < 0.0) {\n        p0.y = -CesiumMath.EPSILON6;\n      } else {\n        p0.y = CesiumMath.EPSILON6;\n      }\n    }\n\n    if (Math.abs(p1.y) < CesiumMath.EPSILON6) {\n      if (p1.y < 0.0) {\n        p1.y = -CesiumMath.EPSILON6;\n      } else {\n        p1.y = CesiumMath.EPSILON6;\n      }\n    }\n\n    let p0Attributes = eastGeometry.attributes;\n    let p0Indices = eastGeometry.indices;\n    let p0IndexMap = eastGeometryIndexMap;\n    let p1Attributes = westGeometry.attributes;\n    let p1Indices = westGeometry.indices;\n    let p1IndexMap = westGeometryIndexMap;\n\n    const intersection = IntersectionTests.lineSegmentPlane(\n      p0,\n      p1,\n      xzPlane,\n      p2Scratch,\n    );\n    if (defined(intersection)) {\n      // move point on the xz-plane slightly away from the plane\n      const offset = Cartesian3.multiplyByScalar(\n        Cartesian3.UNIT_Y,\n        5.0 * CesiumMath.EPSILON9,\n        offsetScratch,\n      );\n      if (p0.y < 0.0) {\n        Cartesian3.negate(offset, offset);\n\n        p0Attributes = westGeometry.attributes;\n        p0Indices = westGeometry.indices;\n        p0IndexMap = westGeometryIndexMap;\n        p1Attributes = eastGeometry.attributes;\n        p1Indices = eastGeometry.indices;\n        p1IndexMap = eastGeometryIndexMap;\n      }\n\n      const offsetPoint = Cartesian3.add(\n        intersection,\n        offset,\n        offsetPointScratch,\n      );\n\n      insertIndex = insertSplitPoint(\n        p0Attributes,\n        p0Indices,\n        p0IndexMap,\n        indices,\n        i,\n        p0,\n      );\n      computeLineAttributes(\n        i0,\n        i1,\n        p0,\n        positions,\n        insertIndex,\n        p0Attributes,\n        applyOffset,\n      );\n\n      insertIndex = insertSplitPoint(\n        p0Attributes,\n        p0Indices,\n        p0IndexMap,\n        indices,\n        -1,\n        offsetPoint,\n      );\n      computeLineAttributes(\n        i0,\n        i1,\n        offsetPoint,\n        positions,\n        insertIndex,\n        p0Attributes,\n        applyOffset,\n      );\n\n      Cartesian3.negate(offset, offset);\n      Cartesian3.add(intersection, offset, offsetPoint);\n      insertIndex = insertSplitPoint(\n        p1Attributes,\n        p1Indices,\n        p1IndexMap,\n        indices,\n        -1,\n        offsetPoint,\n      );\n      computeLineAttributes(\n        i0,\n        i1,\n        offsetPoint,\n        positions,\n        insertIndex,\n        p1Attributes,\n        applyOffset,\n      );\n\n      insertIndex = insertSplitPoint(\n        p1Attributes,\n        p1Indices,\n        p1IndexMap,\n        indices,\n        i + 1,\n        p1,\n      );\n      computeLineAttributes(\n        i0,\n        i1,\n        p1,\n        positions,\n        insertIndex,\n        p1Attributes,\n        applyOffset,\n      );\n    } else {\n      let currentAttributes;\n      let currentIndices;\n      let currentIndexMap;\n\n      if (p0.y < 0.0) {\n        currentAttributes = westGeometry.attributes;\n        currentIndices = westGeometry.indices;\n        currentIndexMap = westGeometryIndexMap;\n      } else {\n        currentAttributes = eastGeometry.attributes;\n        currentIndices = eastGeometry.indices;\n        currentIndexMap = eastGeometryIndexMap;\n      }\n\n      insertIndex = insertSplitPoint(\n        currentAttributes,\n        currentIndices,\n        currentIndexMap,\n        indices,\n        i,\n        p0,\n      );\n      computeLineAttributes(\n        i0,\n        i1,\n        p0,\n        positions,\n        insertIndex,\n        currentAttributes,\n        applyOffset,\n      );\n\n      insertIndex = insertSplitPoint(\n        currentAttributes,\n        currentIndices,\n        currentIndexMap,\n        indices,\n        i + 1,\n        p1,\n      );\n      computeLineAttributes(\n        i0,\n        i1,\n        p1,\n        positions,\n        insertIndex,\n        currentAttributes,\n        applyOffset,\n      );\n    }\n  }\n\n  updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\nconst cartesian2Scratch0 = new Cartesian2();\nconst cartesian2Scratch1 = new Cartesian2();\n\nconst cartesian3Scratch0 = new Cartesian3();\nconst cartesian3Scratch2 = new Cartesian3();\nconst cartesian3Scratch3 = new Cartesian3();\nconst cartesian3Scratch4 = new Cartesian3();\nconst cartesian3Scratch5 = new Cartesian3();\nconst cartesian3Scratch6 = new Cartesian3();\n\nconst cartesian4Scratch0 = new Cartesian4();\n\nfunction updateAdjacencyAfterSplit(geometry) {\n  const attributes = geometry.attributes;\n  const positions = attributes.position.values;\n  const prevPositions = attributes.prevPosition.values;\n  const nextPositions = attributes.nextPosition.values;\n\n  const length = positions.length;\n  for (let j = 0; j < length; j += 3) {\n    const position = Cartesian3.unpack(positions, j, cartesian3Scratch0);\n    if (position.x > 0.0) {\n      continue;\n    }\n\n    const prevPosition = Cartesian3.unpack(\n      prevPositions,\n      j,\n      cartesian3Scratch2,\n    );\n    if (\n      (position.y < 0.0 && prevPosition.y > 0.0) ||\n      (position.y > 0.0 && prevPosition.y < 0.0)\n    ) {\n      if (j - 3 > 0) {\n        prevPositions[j] = positions[j - 3];\n        prevPositions[j + 1] = positions[j - 2];\n        prevPositions[j + 2] = positions[j - 1];\n      } else {\n        Cartesian3.pack(position, prevPositions, j);\n      }\n    }\n\n    const nextPosition = Cartesian3.unpack(\n      nextPositions,\n      j,\n      cartesian3Scratch3,\n    );\n    if (\n      (position.y < 0.0 && nextPosition.y > 0.0) ||\n      (position.y > 0.0 && nextPosition.y < 0.0)\n    ) {\n      if (j + 3 < length) {\n        nextPositions[j] = positions[j + 3];\n        nextPositions[j + 1] = positions[j + 4];\n        nextPositions[j + 2] = positions[j + 5];\n      } else {\n        Cartesian3.pack(position, nextPositions, j);\n      }\n    }\n  }\n}\n\nconst offsetScalar = 5.0 * CesiumMath.EPSILON9;\nconst coplanarOffset = CesiumMath.EPSILON6;\n\nfunction splitLongitudePolyline(instance) {\n  const geometry = instance.geometry;\n  const attributes = geometry.attributes;\n  const positions = attributes.position.values;\n  const prevPositions = attributes.prevPosition.values;\n  const nextPositions = attributes.nextPosition.values;\n  const expandAndWidths = attributes.expandAndWidth.values;\n\n  const texCoords = defined(attributes.st) ? attributes.st.values : undefined;\n  const colors = defined(attributes.color)\n    ? attributes.color.values\n    : undefined;\n\n  const eastGeometry = copyGeometryForSplit(geometry);\n  const westGeometry = copyGeometryForSplit(geometry);\n\n  let i;\n  let j;\n  let index;\n\n  let intersectionFound = false;\n\n  const length = positions.length / 3;\n  for (i = 0; i < length; i += 4) {\n    const i0 = i;\n    const i2 = i + 2;\n\n    const p0 = Cartesian3.fromArray(positions, i0 * 3, cartesian3Scratch0);\n    const p2 = Cartesian3.fromArray(positions, i2 * 3, cartesian3Scratch2);\n\n    // Offset points that are close to the 180 longitude and change the previous/next point\n    // to be the same offset point so it can be projected to 2D. There is special handling in the\n    // shader for when position == prevPosition || position == nextPosition.\n    if (Math.abs(p0.y) < coplanarOffset) {\n      p0.y = coplanarOffset * (p2.y < 0.0 ? -1.0 : 1.0);\n      positions[i * 3 + 1] = p0.y;\n      positions[(i + 1) * 3 + 1] = p0.y;\n\n      for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\n        prevPositions[j] = positions[i * 3];\n        prevPositions[j + 1] = positions[i * 3 + 1];\n        prevPositions[j + 2] = positions[i * 3 + 2];\n      }\n    }\n\n    // Do the same but for when the line crosses 180 longitude in the opposite direction.\n    if (Math.abs(p2.y) < coplanarOffset) {\n      p2.y = coplanarOffset * (p0.y < 0.0 ? -1.0 : 1.0);\n      positions[(i + 2) * 3 + 1] = p2.y;\n      positions[(i + 3) * 3 + 1] = p2.y;\n\n      for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\n        nextPositions[j] = positions[(i + 2) * 3];\n        nextPositions[j + 1] = positions[(i + 2) * 3 + 1];\n        nextPositions[j + 2] = positions[(i + 2) * 3 + 2];\n      }\n    }\n\n    let p0Attributes = eastGeometry.attributes;\n    let p0Indices = eastGeometry.indices;\n    let p2Attributes = westGeometry.attributes;\n    let p2Indices = westGeometry.indices;\n\n    const intersection = IntersectionTests.lineSegmentPlane(\n      p0,\n      p2,\n      xzPlane,\n      cartesian3Scratch4,\n    );\n    if (defined(intersection)) {\n      intersectionFound = true;\n\n      // move point on the xz-plane slightly away from the plane\n      const offset = Cartesian3.multiplyByScalar(\n        Cartesian3.UNIT_Y,\n        offsetScalar,\n        cartesian3Scratch5,\n      );\n      if (p0.y < 0.0) {\n        Cartesian3.negate(offset, offset);\n        p0Attributes = westGeometry.attributes;\n        p0Indices = westGeometry.indices;\n        p2Attributes = eastGeometry.attributes;\n        p2Indices = eastGeometry.indices;\n      }\n\n      const offsetPoint = Cartesian3.add(\n        intersection,\n        offset,\n        cartesian3Scratch6,\n      );\n      p0Attributes.position.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\n      p0Attributes.position.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p0Attributes.position.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n\n      p0Attributes.prevPosition.values.push(\n        prevPositions[i0 * 3],\n        prevPositions[i0 * 3 + 1],\n        prevPositions[i0 * 3 + 2],\n      );\n      p0Attributes.prevPosition.values.push(\n        prevPositions[i0 * 3 + 3],\n        prevPositions[i0 * 3 + 4],\n        prevPositions[i0 * 3 + 5],\n      );\n      p0Attributes.prevPosition.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\n\n      p0Attributes.nextPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p0Attributes.nextPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p0Attributes.nextPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p0Attributes.nextPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n\n      Cartesian3.negate(offset, offset);\n      Cartesian3.add(intersection, offset, offsetPoint);\n      p2Attributes.position.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p2Attributes.position.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p2Attributes.position.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\n\n      p2Attributes.prevPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p2Attributes.prevPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p2Attributes.prevPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n      p2Attributes.prevPosition.values.push(\n        offsetPoint.x,\n        offsetPoint.y,\n        offsetPoint.z,\n      );\n\n      p2Attributes.nextPosition.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\n      p2Attributes.nextPosition.values.push(\n        nextPositions[i2 * 3],\n        nextPositions[i2 * 3 + 1],\n        nextPositions[i2 * 3 + 2],\n      );\n      p2Attributes.nextPosition.values.push(\n        nextPositions[i2 * 3 + 3],\n        nextPositions[i2 * 3 + 4],\n        nextPositions[i2 * 3 + 5],\n      );\n\n      const ew0 = Cartesian2.fromArray(\n        expandAndWidths,\n        i0 * 2,\n        cartesian2Scratch0,\n      );\n      const width = Math.abs(ew0.y);\n\n      p0Attributes.expandAndWidth.values.push(-1, width, 1, width);\n      p0Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\n      p2Attributes.expandAndWidth.values.push(-1, width, 1, width);\n      p2Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\n\n      let t = Cartesian3.magnitudeSquared(\n        Cartesian3.subtract(intersection, p0, cartesian3Scratch3),\n      );\n      t /= Cartesian3.magnitudeSquared(\n        Cartesian3.subtract(p2, p0, cartesian3Scratch3),\n      );\n\n      if (defined(colors)) {\n        const c0 = Cartesian4.fromArray(colors, i0 * 4, cartesian4Scratch0);\n        const c2 = Cartesian4.fromArray(colors, i2 * 4, cartesian4Scratch0);\n\n        const r = CesiumMath.lerp(c0.x, c2.x, t);\n        const g = CesiumMath.lerp(c0.y, c2.y, t);\n        const b = CesiumMath.lerp(c0.z, c2.z, t);\n        const a = CesiumMath.lerp(c0.w, c2.w, t);\n\n        for (j = i0 * 4; j < i0 * 4 + 2 * 4; ++j) {\n          p0Attributes.color.values.push(colors[j]);\n        }\n        p0Attributes.color.values.push(r, g, b, a);\n        p0Attributes.color.values.push(r, g, b, a);\n        p2Attributes.color.values.push(r, g, b, a);\n        p2Attributes.color.values.push(r, g, b, a);\n        for (j = i2 * 4; j < i2 * 4 + 2 * 4; ++j) {\n          p2Attributes.color.values.push(colors[j]);\n        }\n      }\n\n      if (defined(texCoords)) {\n        const s0 = Cartesian2.fromArray(texCoords, i0 * 2, cartesian2Scratch0);\n        const s3 = Cartesian2.fromArray(\n          texCoords,\n          (i + 3) * 2,\n          cartesian2Scratch1,\n        );\n\n        const sx = CesiumMath.lerp(s0.x, s3.x, t);\n\n        for (j = i0 * 2; j < i0 * 2 + 2 * 2; ++j) {\n          p0Attributes.st.values.push(texCoords[j]);\n        }\n        p0Attributes.st.values.push(sx, s0.y);\n        p0Attributes.st.values.push(sx, s3.y);\n        p2Attributes.st.values.push(sx, s0.y);\n        p2Attributes.st.values.push(sx, s3.y);\n        for (j = i2 * 2; j < i2 * 2 + 2 * 2; ++j) {\n          p2Attributes.st.values.push(texCoords[j]);\n        }\n      }\n\n      index = p0Attributes.position.values.length / 3 - 4;\n      p0Indices.push(index, index + 2, index + 1);\n      p0Indices.push(index + 1, index + 2, index + 3);\n\n      index = p2Attributes.position.values.length / 3 - 4;\n      p2Indices.push(index, index + 2, index + 1);\n      p2Indices.push(index + 1, index + 2, index + 3);\n    } else {\n      let currentAttributes;\n      let currentIndices;\n\n      if (p0.y < 0.0) {\n        currentAttributes = westGeometry.attributes;\n        currentIndices = westGeometry.indices;\n      } else {\n        currentAttributes = eastGeometry.attributes;\n        currentIndices = eastGeometry.indices;\n      }\n\n      currentAttributes.position.values.push(p0.x, p0.y, p0.z);\n      currentAttributes.position.values.push(p0.x, p0.y, p0.z);\n      currentAttributes.position.values.push(p2.x, p2.y, p2.z);\n      currentAttributes.position.values.push(p2.x, p2.y, p2.z);\n\n      for (j = i * 3; j < i * 3 + 4 * 3; ++j) {\n        currentAttributes.prevPosition.values.push(prevPositions[j]);\n        currentAttributes.nextPosition.values.push(nextPositions[j]);\n      }\n\n      for (j = i * 2; j < i * 2 + 4 * 2; ++j) {\n        currentAttributes.expandAndWidth.values.push(expandAndWidths[j]);\n        if (defined(texCoords)) {\n          currentAttributes.st.values.push(texCoords[j]);\n        }\n      }\n\n      if (defined(colors)) {\n        for (j = i * 4; j < i * 4 + 4 * 4; ++j) {\n          currentAttributes.color.values.push(colors[j]);\n        }\n      }\n\n      index = currentAttributes.position.values.length / 3 - 4;\n      currentIndices.push(index, index + 2, index + 1);\n      currentIndices.push(index + 1, index + 2, index + 3);\n    }\n  }\n\n  if (intersectionFound) {\n    updateAdjacencyAfterSplit(westGeometry);\n    updateAdjacencyAfterSplit(eastGeometry);\n  }\n\n  updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\n/**\n * Splits the instances's geometry, by introducing new vertices and indices,that\n * intersect the International Date Line and Prime Meridian so that no primitives cross longitude\n * -180/180 degrees.  This is not required for 3D drawing, but is required for\n * correcting drawing in 2D and Columbus view.\n *\n * @private\n *\n * @param {GeometryInstance} instance The instance to modify.\n * @returns {GeometryInstance} The modified <code>instance</code> argument, with it's geometry split at the International Date Line.\n *\n * @example\n * instance = Cesium.GeometryPipeline.splitLongitude(instance);\n */\nGeometryPipeline.splitLongitude = function (instance) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(instance)) {\n    throw new DeveloperError(\"instance is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const geometry = instance.geometry;\n  const boundingSphere = geometry.boundingSphere;\n  if (defined(boundingSphere)) {\n    const minX = boundingSphere.center.x - boundingSphere.radius;\n    if (\n      minX > 0 ||\n      BoundingSphere.intersectPlane(boundingSphere, Plane.ORIGIN_ZX_PLANE) !==\n        Intersect.INTERSECTING\n    ) {\n      return instance;\n    }\n  }\n\n  if (geometry.geometryType !== GeometryType.NONE) {\n    switch (geometry.geometryType) {\n      case GeometryType.POLYLINES:\n        splitLongitudePolyline(instance);\n        break;\n      case GeometryType.TRIANGLES:\n        splitLongitudeTriangles(instance);\n        break;\n      case GeometryType.LINES:\n        splitLongitudeLines(instance);\n        break;\n    }\n  } else {\n    indexPrimitive(geometry);\n    if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\n      splitLongitudeTriangles(instance);\n    } else if (geometry.primitiveType === PrimitiveType.LINES) {\n      splitLongitudeLines(instance);\n    }\n  }\n\n  return instance;\n};\nexport default GeometryPipeline;\n","/**\n * @private\n */\nconst GeometryType = {\n  NONE: 0,\n  TRIANGLES: 1,\n  LINES: 2,\n  POLYLINES: 3,\n};\nexport default Object.freeze(GeometryType);\n","import * as protobuf from \"protobufjs/dist/minimal/protobuf.js\";\nimport buildModuleUrl from \"./buildModuleUrl.js\";\nimport Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport defined from \"./defined.js\";\nimport GoogleEarthEnterpriseTileInformation from \"./GoogleEarthEnterpriseTileInformation.js\";\nimport isBitSet from \"./isBitSet.js\";\nimport loadAndExecuteScript from \"./loadAndExecuteScript.js\";\nimport CesiumMath from \"./Math.js\";\nimport Request from \"./Request.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\n\nfunction stringToBuffer(str) {\n  const len = str.length;\n  const buffer = new ArrayBuffer(len);\n  const ui8 = new Uint8Array(buffer);\n  for (let i = 0; i < len; ++i) {\n    ui8[i] = str.charCodeAt(i);\n  }\n\n  return buffer;\n}\n\n// Decodes packet with a key that has been around since the beginning of Google Earth Enterprise\nconst defaultKey = stringToBuffer(\n  \"\\x45\\xf4\\xbd\\x0b\\x79\\xe2\\x6a\\x45\\x22\\x05\\x92\\x2c\\x17\\xcd\\x06\\x71\\xf8\\x49\\x10\\x46\\x67\\x51\\x00\\x42\\x25\\xc6\\xe8\\x61\\x2c\\x66\\x29\\x08\\xc6\\x34\\xdc\\x6a\\x62\\x25\\x79\\x0a\\x77\\x1d\\x6d\\x69\\xd6\\xf0\\x9c\\x6b\\x93\\xa1\\xbd\\x4e\\x75\\xe0\\x41\\x04\\x5b\\xdf\\x40\\x56\\x0c\\xd9\\xbb\\x72\\x9b\\x81\\x7c\\x10\\x33\\x53\\xee\\x4f\\x6c\\xd4\\x71\\x05\\xb0\\x7b\\xc0\\x7f\\x45\\x03\\x56\\x5a\\xad\\x77\\x55\\x65\\x0b\\x33\\x92\\x2a\\xac\\x19\\x6c\\x35\\x14\\xc5\\x1d\\x30\\x73\\xf8\\x33\\x3e\\x6d\\x46\\x38\\x4a\\xb4\\xdd\\xf0\\x2e\\xdd\\x17\\x75\\x16\\xda\\x8c\\x44\\x74\\x22\\x06\\xfa\\x61\\x22\\x0c\\x33\\x22\\x53\\x6f\\xaf\\x39\\x44\\x0b\\x8c\\x0e\\x39\\xd9\\x39\\x13\\x4c\\xb9\\xbf\\x7f\\xab\\x5c\\x8c\\x50\\x5f\\x9f\\x22\\x75\\x78\\x1f\\xe9\\x07\\x71\\x91\\x68\\x3b\\xc1\\xc4\\x9b\\x7f\\xf0\\x3c\\x56\\x71\\x48\\x82\\x05\\x27\\x55\\x66\\x59\\x4e\\x65\\x1d\\x98\\x75\\xa3\\x61\\x46\\x7d\\x61\\x3f\\x15\\x41\\x00\\x9f\\x14\\x06\\xd7\\xb4\\x34\\x4d\\xce\\x13\\x87\\x46\\xb0\\x1a\\xd5\\x05\\x1c\\xb8\\x8a\\x27\\x7b\\x8b\\xdc\\x2b\\xbb\\x4d\\x67\\x30\\xc8\\xd1\\xf6\\x5c\\x8f\\x50\\xfa\\x5b\\x2f\\x46\\x9b\\x6e\\x35\\x18\\x2f\\x27\\x43\\x2e\\xeb\\x0a\\x0c\\x5e\\x10\\x05\\x10\\xa5\\x73\\x1b\\x65\\x34\\xe5\\x6c\\x2e\\x6a\\x43\\x27\\x63\\x14\\x23\\x55\\xa9\\x3f\\x71\\x7b\\x67\\x43\\x7d\\x3a\\xaf\\xcd\\xe2\\x54\\x55\\x9c\\xfd\\x4b\\xc6\\xe2\\x9f\\x2f\\x28\\xed\\xcb\\x5c\\xc6\\x2d\\x66\\x07\\x88\\xa7\\x3b\\x2f\\x18\\x2a\\x22\\x4e\\x0e\\xb0\\x6b\\x2e\\xdd\\x0d\\x95\\x7d\\x7d\\x47\\xba\\x43\\xb2\\x11\\xb2\\x2b\\x3e\\x4d\\xaa\\x3e\\x7d\\xe6\\xce\\x49\\x89\\xc6\\xe6\\x78\\x0c\\x61\\x31\\x05\\x2d\\x01\\xa4\\x4f\\xa5\\x7e\\x71\\x20\\x88\\xec\\x0d\\x31\\xe8\\x4e\\x0b\\x00\\x6e\\x50\\x68\\x7d\\x17\\x3d\\x08\\x0d\\x17\\x95\\xa6\\x6e\\xa3\\x68\\x97\\x24\\x5b\\x6b\\xf3\\x17\\x23\\xf3\\xb6\\x73\\xb3\\x0d\\x0b\\x40\\xc0\\x9f\\xd8\\x04\\x51\\x5d\\xfa\\x1a\\x17\\x22\\x2e\\x15\\x6a\\xdf\\x49\\x00\\xb9\\xa0\\x77\\x55\\xc6\\xef\\x10\\x6a\\xbf\\x7b\\x47\\x4c\\x7f\\x83\\x17\\x05\\xee\\xdc\\xdc\\x46\\x85\\xa9\\xad\\x53\\x07\\x2b\\x53\\x34\\x06\\x07\\xff\\x14\\x94\\x59\\x19\\x02\\xe4\\x38\\xe8\\x31\\x83\\x4e\\xb9\\x58\\x46\\x6b\\xcb\\x2d\\x23\\x86\\x92\\x70\\x00\\x35\\x88\\x22\\xcf\\x31\\xb2\\x26\\x2f\\xe7\\xc3\\x75\\x2d\\x36\\x2c\\x72\\x74\\xb0\\x23\\x47\\xb7\\xd3\\xd1\\x26\\x16\\x85\\x37\\x72\\xe2\\x00\\x8c\\x44\\xcf\\x10\\xda\\x33\\x2d\\x1a\\xde\\x60\\x86\\x69\\x23\\x69\\x2a\\x7c\\xcd\\x4b\\x51\\x0d\\x95\\x54\\x39\\x77\\x2e\\x29\\xea\\x1b\\xa6\\x50\\xa2\\x6a\\x8f\\x6f\\x50\\x99\\x5c\\x3e\\x54\\xfb\\xef\\x50\\x5b\\x0b\\x07\\x45\\x17\\x89\\x6d\\x28\\x13\\x77\\x37\\x1d\\xdb\\x8e\\x1e\\x4a\\x05\\x66\\x4a\\x6f\\x99\\x20\\xe5\\x70\\xe2\\xb9\\x71\\x7e\\x0c\\x6d\\x49\\x04\\x2d\\x7a\\xfe\\x72\\xc7\\xf2\\x59\\x30\\x8f\\xbb\\x02\\x5d\\x73\\xe5\\xc9\\x20\\xea\\x78\\xec\\x20\\x90\\xf0\\x8a\\x7f\\x42\\x17\\x7c\\x47\\x19\\x60\\xb0\\x16\\xbd\\x26\\xb7\\x71\\xb6\\xc7\\x9f\\x0e\\xd1\\x33\\x82\\x3d\\xd3\\xab\\xee\\x63\\x99\\xc8\\x2b\\x53\\xa0\\x44\\x5c\\x71\\x01\\xc6\\xcc\\x44\\x1f\\x32\\x4f\\x3c\\xca\\xc0\\x29\\x3d\\x52\\xd3\\x61\\x19\\x58\\xa9\\x7d\\x65\\xb4\\xdc\\xcf\\x0d\\xf4\\x3d\\xf1\\x08\\xa9\\x42\\xda\\x23\\x09\\xd8\\xbf\\x5e\\x50\\x49\\xf8\\x4d\\xc0\\xcb\\x47\\x4c\\x1c\\x4f\\xf7\\x7b\\x2b\\xd8\\x16\\x18\\xc5\\x31\\x92\\x3b\\xb5\\x6f\\xdc\\x6c\\x0d\\x92\\x88\\x16\\xd1\\x9e\\xdb\\x3f\\xe2\\xe9\\xda\\x5f\\xd4\\x84\\xe2\\x46\\x61\\x5a\\xde\\x1c\\x55\\xcf\\xa4\\x00\\xbe\\xfd\\xce\\x67\\xf1\\x4a\\x69\\x1c\\x97\\xe6\\x20\\x48\\xd8\\x5d\\x7f\\x7e\\xae\\x71\\x20\\x0e\\x4e\\xae\\xc0\\x56\\xa9\\x91\\x01\\x3c\\x82\\x1d\\x0f\\x72\\xe7\\x76\\xec\\x29\\x49\\xd6\\x5d\\x2d\\x83\\xe3\\xdb\\x36\\x06\\xa9\\x3b\\x66\\x13\\x97\\x87\\x6a\\xd5\\xb6\\x3d\\x50\\x5e\\x52\\xb9\\x4b\\xc7\\x73\\x57\\x78\\xc9\\xf4\\x2e\\x59\\x07\\x95\\x93\\x6f\\xd0\\x4b\\x17\\x57\\x19\\x3e\\x27\\x27\\xc7\\x60\\xdb\\x3b\\xed\\x9a\\x0e\\x53\\x44\\x16\\x3e\\x3f\\x8d\\x92\\x6d\\x77\\xa2\\x0a\\xeb\\x3f\\x52\\xa8\\xc6\\x55\\x5e\\x31\\x49\\x37\\x85\\xf4\\xc5\\x1f\\x26\\x2d\\xa9\\x1c\\xbf\\x8b\\x27\\x54\\xda\\xc3\\x6a\\x20\\xe5\\x2a\\x78\\x04\\xb0\\xd6\\x90\\x70\\x72\\xaa\\x8b\\x68\\xbd\\x88\\xf7\\x02\\x5f\\x48\\xb1\\x7e\\xc0\\x58\\x4c\\x3f\\x66\\x1a\\xf9\\x3e\\xe1\\x65\\xc0\\x70\\xa7\\xcf\\x38\\x69\\xaf\\xf0\\x56\\x6c\\x64\\x49\\x9c\\x27\\xad\\x78\\x74\\x4f\\xc2\\x87\\xde\\x56\\x39\\x00\\xda\\x77\\x0b\\xcb\\x2d\\x1b\\x89\\xfb\\x35\\x4f\\x02\\xf5\\x08\\x51\\x13\\x60\\xc1\\x0a\\x5a\\x47\\x4d\\x26\\x1c\\x33\\x30\\x78\\xda\\xc0\\x9c\\x46\\x47\\xe2\\x5b\\x79\\x60\\x49\\x6e\\x37\\x67\\x53\\x0a\\x3e\\xe9\\xec\\x46\\x39\\xb2\\xf1\\x34\\x0d\\xc6\\x84\\x53\\x75\\x6e\\xe1\\x0c\\x59\\xd9\\x1e\\xde\\x29\\x85\\x10\\x7b\\x49\\x49\\xa5\\x77\\x79\\xbe\\x49\\x56\\x2e\\x36\\xe7\\x0b\\x3a\\xbb\\x4f\\x03\\x62\\x7b\\xd2\\x4d\\x31\\x95\\x2f\\xbd\\x38\\x7b\\xa8\\x4f\\x21\\xe1\\xec\\x46\\x70\\x76\\x95\\x7d\\x29\\x22\\x78\\x88\\x0a\\x90\\xdd\\x9d\\x5c\\xda\\xde\\x19\\x51\\xcf\\xf0\\xfc\\x59\\x52\\x65\\x7c\\x33\\x13\\xdf\\xf3\\x48\\xda\\xbb\\x2a\\x75\\xdb\\x60\\xb2\\x02\\x15\\xd4\\xfc\\x19\\xed\\x1b\\xec\\x7f\\x35\\xa8\\xff\\x28\\x31\\x07\\x2d\\x12\\xc8\\xdc\\x88\\x46\\x7c\\x8a\\x5b\\x22\",\n);\n\n/**\n * <div class=\"notice\">\n * To construct GoogleEarthEnterpriseMetadata, call {@link GoogleEarthEnterpriseMetadata.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * Provides metadata using the Google Earth Enterprise REST API. This is used by the GoogleEarthEnterpriseImageryProvider\n *  and GoogleEarthEnterpriseTerrainProvider to share metadata requests.\n *\n * @alias GoogleEarthEnterpriseMetadata\n * @constructor\n *\n * @see GoogleEarthEnterpriseImageryProvider\n * @see GoogleEarthEnterpriseTerrainProvider\n *\n */\nfunction GoogleEarthEnterpriseMetadata(resourceOrUrl) {\n  /**\n   * True if imagery is available.\n   * @type {boolean}\n   * @default true\n   */\n  this.imageryPresent = true;\n\n  /**\n   * True if imagery is sent as a protocol buffer, false if sent as plain images. If undefined we will try both.\n   * @type {boolean|undefined}\n   * @default undefined\n   */\n  this.protoImagery = undefined;\n\n  /**\n   * True if terrain is available.\n   * @type {boolean}\n   * @default true\n   */\n  this.terrainPresent = true;\n\n  /**\n   * Exponent used to compute constant to calculate negative height values.\n   * @type {number}\n   * @default 32\n   */\n  this.negativeAltitudeExponentBias = 32;\n\n  /**\n   * Threshold where any numbers smaller are actually negative values. They are multiplied by -2^negativeAltitudeExponentBias.\n   * @type {number}\n   * @default EPSILON12\n   */\n  this.negativeAltitudeThreshold = CesiumMath.EPSILON12;\n\n  /**\n   * Dictionary of provider id to copyright strings.\n   * @type {object}\n   * @default {}\n   */\n  this.providers = {};\n\n  /**\n   * Key used to decode packets\n   * @type {ArrayBuffer}\n   */\n  this.key = undefined;\n\n  this._resource = undefined;\n  this._quadPacketVersion = 1;\n  this._tileInfo = {};\n  this._subtreePromises = {};\n}\n\nObject.defineProperties(GoogleEarthEnterpriseMetadata.prototype, {\n  /**\n   * Gets the name of the Google Earth Enterprise server.\n   * @memberof GoogleEarthEnterpriseMetadata.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource.url;\n    },\n  },\n\n  /**\n   * Gets the proxy used for metadata requests.\n   * @memberof GoogleEarthEnterpriseMetadata.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the resource used for metadata requests.\n   * @memberof GoogleEarthEnterpriseMetadata.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n});\n\n/**\n * Creates a metadata object using the Google Earth Enterprise REST API. This is used by the GoogleEarthEnterpriseImageryProvider\n * and GoogleEarthEnterpriseTerrainProvider to share metadata requests.\n *\n * @param {Resource|string} resourceOrUrl The url of the Google Earth Enterprise server hosting the imagery.\n *\n * @returns {Promise<GoogleEarthEnterpriseMetadata>} A promise which resolves to the created GoogleEarthEnterpriseMetadata instance/\n */\nGoogleEarthEnterpriseMetadata.fromUrl = async function (resourceOrUrl) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"resourceOrUrl\", resourceOrUrl);\n  //>>includeEnd('debug');\n  let url = resourceOrUrl;\n\n  if (typeof url !== \"string\" && !(url instanceof Resource)) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.string(\"resourceOrUrl.url\", resourceOrUrl.url);\n    //>>includeEnd('debug');\n\n    url = resourceOrUrl.url;\n  }\n\n  const resource = Resource.createIfNeeded(url);\n  resource.appendForwardSlash();\n\n  const metadata = new GoogleEarthEnterpriseMetadata();\n  metadata._resource = resource;\n\n  try {\n    await requestDbRoot(metadata);\n    await metadata.getQuadTreePacket(\"\", metadata._quadPacketVersion);\n  } catch (error) {\n    const message = `An error occurred while accessing ${\n      getMetadataResource(metadata, \"\", 1).url\n    }: ${error}`;\n\n    throw new RuntimeError(message);\n  }\n\n  return metadata;\n};\n\n/**\n * Converts a tiles (x, y, level) position into a quadkey used to request an image\n * from a Google Earth Enterprise server.\n *\n * @param {number} x The tile's x coordinate.\n * @param {number} y The tile's y coordinate.\n * @param {number} level The tile's zoom level.\n *\n * @see GoogleEarthEnterpriseMetadata#quadKeyToTileXY\n */\nGoogleEarthEnterpriseMetadata.tileXYToQuadKey = function (x, y, level) {\n  let quadkey = \"\";\n  for (let i = level; i >= 0; --i) {\n    const bitmask = 1 << i;\n    let digit = 0;\n\n    // Tile Layout\n    // ___ ___\n    //|   |   |\n    //| 3 | 2 |\n    //|-------|\n    //| 0 | 1 |\n    //|___|___|\n    //\n\n    if (!isBitSet(y, bitmask)) {\n      // Top Row\n      digit |= 2;\n      if (!isBitSet(x, bitmask)) {\n        // Right to left\n        digit |= 1;\n      }\n    } else if (isBitSet(x, bitmask)) {\n      // Left to right\n      digit |= 1;\n    }\n\n    quadkey += digit;\n  }\n  return quadkey;\n};\n\n/**\n * Converts a tile's quadkey used to request an image from a Google Earth Enterprise server into the\n * (x, y, level) position.\n *\n * @param {string} quadkey The tile's quad key\n *\n * @see GoogleEarthEnterpriseMetadata#tileXYToQuadKey\n */\nGoogleEarthEnterpriseMetadata.quadKeyToTileXY = function (quadkey) {\n  let x = 0;\n  let y = 0;\n  const level = quadkey.length - 1;\n  for (let i = level; i >= 0; --i) {\n    const bitmask = 1 << i;\n    const digit = +quadkey[level - i];\n\n    if (isBitSet(digit, 2)) {\n      // Top Row\n      if (!isBitSet(digit, 1)) {\n        // // Right to left\n        x |= bitmask;\n      }\n    } else {\n      y |= bitmask;\n      if (isBitSet(digit, 1)) {\n        // Left to right\n        x |= bitmask;\n      }\n    }\n  }\n  return {\n    x: x,\n    y: y,\n    level: level,\n  };\n};\n\nGoogleEarthEnterpriseMetadata.prototype.isValid = function (quadKey) {\n  let info = this.getTileInformationFromQuadKey(quadKey);\n  if (defined(info)) {\n    return info !== null;\n  }\n\n  let valid = true;\n  let q = quadKey;\n  let last;\n  while (q.length > 1) {\n    last = q.substring(q.length - 1);\n    q = q.substring(0, q.length - 1);\n    info = this.getTileInformationFromQuadKey(q);\n    if (defined(info)) {\n      if (!info.hasSubtree() && !info.hasChild(parseInt(last))) {\n        // We have no subtree or child available at some point in this node's ancestry\n        valid = false;\n      }\n\n      break;\n    } else if (info === null) {\n      // Some node in the ancestry was loaded and said there wasn't a subtree\n      valid = false;\n      break;\n    }\n  }\n\n  return valid;\n};\n\nconst taskProcessor = new TaskProcessor(\"decodeGoogleEarthEnterprisePacket\");\n\n/**\n * Retrieves a Google Earth Enterprise quadtree packet.\n *\n * @param {string} [quadKey=''] The quadkey to retrieve the packet for.\n * @param {number} [version=1] The cnode version to be used in the request.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.getQuadTreePacket = function (\n  quadKey,\n  version,\n  request,\n) {\n  version = version ?? 1;\n  quadKey = quadKey ?? \"\";\n  const resource = getMetadataResource(this, quadKey, version, request);\n\n  const promise = resource.fetchArrayBuffer();\n\n  if (!defined(promise)) {\n    return undefined; // Throttled\n  }\n\n  const tileInfo = this._tileInfo;\n  const key = this.key;\n  return promise.then(function (metadata) {\n    const decodePromise = taskProcessor.scheduleTask(\n      {\n        buffer: metadata,\n        quadKey: quadKey,\n        type: \"Metadata\",\n        key: key,\n      },\n      [metadata],\n    );\n\n    return decodePromise.then(function (result) {\n      let root;\n      let topLevelKeyLength = -1;\n      if (quadKey !== \"\") {\n        // Root tile has no data except children bits, so put them into the tile info\n        topLevelKeyLength = quadKey.length + 1;\n        const top = result[quadKey];\n        root = tileInfo[quadKey];\n        root._bits |= top._bits;\n\n        delete result[quadKey];\n      }\n\n      // Copy the resulting objects into tileInfo\n      // Make sure we start with shorter quadkeys first, so we know the parents have\n      //  already been processed. Otherwise we can lose ancestorHasTerrain along the way.\n      const keys = Object.keys(result);\n      keys.sort(function (a, b) {\n        return a.length - b.length;\n      });\n      const keysLength = keys.length;\n      for (let i = 0; i < keysLength; ++i) {\n        const key = keys[i];\n        const r = result[key];\n        if (r !== null) {\n          const info = GoogleEarthEnterpriseTileInformation.clone(result[key]);\n          const keyLength = key.length;\n          if (keyLength === topLevelKeyLength) {\n            info.setParent(root);\n          } else if (keyLength > 1) {\n            const parent = tileInfo[key.substring(0, key.length - 1)];\n            info.setParent(parent);\n          }\n          tileInfo[key] = info;\n        } else {\n          tileInfo[key] = null;\n        }\n      }\n    });\n  });\n};\n\n/**\n * Populates the metadata subtree down to the specified tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise<GoogleEarthEnterpriseTileInformation>} A promise that resolves to the tile info for the requested quad key\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.populateSubtree = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const quadkey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n  return populateSubtree(this, quadkey, request);\n};\n\nfunction populateSubtree(that, quadKey, request) {\n  const tileInfo = that._tileInfo;\n  let q = quadKey;\n  let t = tileInfo[q];\n  // If we have tileInfo make sure sure it is not a node with a subtree that's not loaded\n  if (defined(t) && (!t.hasSubtree() || t.hasChildren())) {\n    return t;\n  }\n\n  while (t === undefined && q.length > 1) {\n    q = q.substring(0, q.length - 1);\n    t = tileInfo[q];\n  }\n\n  let subtreeRequest;\n  const subtreePromises = that._subtreePromises;\n  let promise = subtreePromises[q];\n  if (defined(promise)) {\n    return promise.then(function () {\n      // Recursively call this in case we need multiple subtree requests\n      subtreeRequest = new Request({\n        throttle: request.throttle,\n        throttleByServer: request.throttleByServer,\n        type: request.type,\n        priorityFunction: request.priorityFunction,\n      });\n      return populateSubtree(that, quadKey, subtreeRequest);\n    });\n  }\n\n  // t is either\n  //   null so one of its parents was a leaf node, so this tile doesn't exist\n  //   exists but doesn't have a subtree to request\n  //   undefined so no parent exists - this shouldn't ever happen once the provider is ready\n  if (!defined(t) || !t.hasSubtree()) {\n    return Promise.reject(\n      new RuntimeError(`Couldn't load metadata for tile ${quadKey}`),\n    );\n  }\n\n  // We need to split up the promise here because when will execute syncronously if getQuadTreePacket\n  //  is already resolved (like in the tests), so subtreePromises will never get cleared out.\n  //  Only the initial request will also remove the promise from subtreePromises.\n  promise = that.getQuadTreePacket(q, t.cnodeVersion, request);\n  if (!defined(promise)) {\n    return undefined;\n  }\n  subtreePromises[q] = promise;\n\n  return promise\n    .then(function () {\n      // Recursively call this in case we need multiple subtree requests\n      subtreeRequest = new Request({\n        throttle: request.throttle,\n        throttleByServer: request.throttleByServer,\n        type: request.type,\n        priorityFunction: request.priorityFunction,\n      });\n      return populateSubtree(that, quadKey, subtreeRequest);\n    })\n    .finally(function () {\n      delete subtreePromises[q];\n    });\n}\n\n/**\n * Gets information about a tile\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @returns {GoogleEarthEnterpriseTileInformation|undefined} Information about the tile or undefined if it isn't loaded.\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.getTileInformation = function (\n  x,\n  y,\n  level,\n) {\n  const quadkey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n  return this._tileInfo[quadkey];\n};\n\n/**\n * Gets information about a tile from a quadKey\n *\n * @param {string} quadkey The quadkey for the tile\n * @returns {GoogleEarthEnterpriseTileInformation|undefined} Information about the tile or undefined if it isn't loaded.\n *\n * @private\n */\nGoogleEarthEnterpriseMetadata.prototype.getTileInformationFromQuadKey =\n  function (quadkey) {\n    return this._tileInfo[quadkey];\n  };\n\nfunction getMetadataResource(that, quadKey, version, request) {\n  return that._resource.getDerivedResource({\n    url: `flatfile?q2-0${quadKey}-q.${version.toString()}`,\n    request: request,\n  });\n}\n\nlet dbrootParser;\nlet dbrootParserPromise;\nfunction requestDbRoot(that) {\n  const resource = that._resource.getDerivedResource({\n    url: \"dbRoot.v5\",\n    queryParameters: {\n      output: \"proto\",\n    },\n  });\n\n  if (!defined(dbrootParserPromise)) {\n    const url = buildModuleUrl(\"ThirdParty/google-earth-dbroot-parser.js\");\n    const oldValue = window.cesiumGoogleEarthDbRootParser;\n    dbrootParserPromise = loadAndExecuteScript(url).then(function () {\n      dbrootParser = window.cesiumGoogleEarthDbRootParser(protobuf);\n      if (defined(oldValue)) {\n        window.cesiumGoogleEarthDbRootParser = oldValue;\n      } else {\n        delete window.cesiumGoogleEarthDbRootParser;\n      }\n    });\n  }\n\n  return dbrootParserPromise\n    .then(function () {\n      return resource.fetchArrayBuffer();\n    })\n    .then(function (buf) {\n      const encryptedDbRootProto = dbrootParser.EncryptedDbRootProto.decode(\n        new Uint8Array(buf),\n      );\n\n      let byteArray = encryptedDbRootProto.encryptionData;\n      let offset = byteArray.byteOffset;\n      let end = offset + byteArray.byteLength;\n      const key = (that.key = byteArray.buffer.slice(offset, end));\n\n      byteArray = encryptedDbRootProto.dbrootData;\n      offset = byteArray.byteOffset;\n      end = offset + byteArray.byteLength;\n      const dbRootCompressed = byteArray.buffer.slice(offset, end);\n      return taskProcessor.scheduleTask(\n        {\n          buffer: dbRootCompressed,\n          type: \"DbRoot\",\n          key: key,\n        },\n        [dbRootCompressed],\n      );\n    })\n    .then(function (result) {\n      const dbRoot = dbrootParser.DbRootProto.decode(\n        new Uint8Array(result.buffer),\n      );\n      that.imageryPresent = dbRoot.imageryPresent ?? that.imageryPresent;\n      that.protoImagery = dbRoot.protoImagery;\n      that.terrainPresent = dbRoot.terrainPresent ?? that.terrainPresent;\n      if (defined(dbRoot.endSnippet) && defined(dbRoot.endSnippet.model)) {\n        const model = dbRoot.endSnippet.model;\n        that.negativeAltitudeExponentBias =\n          model.negativeAltitudeExponentBias ??\n          that.negativeAltitudeExponentBias;\n        that.negativeAltitudeThreshold =\n          model.compressedNegativeAltitudeThreshold ??\n          that.negativeAltitudeThreshold;\n      }\n      if (defined(dbRoot.databaseVersion)) {\n        that._quadPacketVersion =\n          dbRoot.databaseVersion.quadtreeVersion ?? that._quadPacketVersion;\n      }\n      const providers = that.providers;\n      const providerInfo = dbRoot.providerInfo ?? [];\n      const count = providerInfo.length;\n      for (let i = 0; i < count; ++i) {\n        const provider = providerInfo[i];\n        const copyrightString = provider.copyrightString;\n        if (defined(copyrightString)) {\n          providers[provider.providerId] = new Credit(copyrightString.value);\n        }\n      }\n    })\n    .catch(function () {\n      // Just eat the error and use the default values.\n      console.log(`Failed to retrieve ${resource.url}. Using defaults.`);\n      that.key = defaultKey;\n    });\n}\nexport default GoogleEarthEnterpriseMetadata;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport Intersections2D from \"./Intersections2D.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport QuantizedMeshTerrainData from \"./QuantizedMeshTerrainData.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TerrainData from \"./TerrainData.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\n\n/**\n * Terrain data for a single tile from a Google Earth Enterprise server.\n *\n * @alias GoogleEarthEnterpriseTerrainData\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {ArrayBuffer} options.buffer The buffer containing terrain data.\n * @param {number} options.negativeAltitudeExponentBias Multiplier for negative terrain heights that are encoded as very small positive values.\n * @param {number} options.negativeElevationThreshold Threshold for negative values\n * @param {number} [options.childTileMask=15] A bit mask indicating which of this tile's four children exist.\n *                 If a child's bit is set, geometry will be requested for that tile as well when it\n *                 is needed.  If the bit is cleared, the child tile is not requested and geometry is\n *                 instead upsampled from the parent.  The bit values are as follows:\n *                 <table>\n *                  <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n *                  <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n *                  <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n *                  <tr><td>2</td><td>4</td><td>Northeast</td></tr>\n *                  <tr><td>3</td><td>8</td><td>Northwest</td></tr>\n *                 </table>\n * @param {boolean} [options.createdByUpsampling=false] True if this instance was created by upsampling another instance;\n *                  otherwise, false.\n * @param {Credit[]} [options.credits] Array of credits for this tile.\n *\n *\n * @example\n * const buffer = ...\n * const childTileMask = ...\n * const terrainData = new Cesium.GoogleEarthEnterpriseTerrainData({\n *   buffer : heightBuffer,\n *   childTileMask : childTileMask\n * });\n *\n * @see TerrainData\n * @see HeightmapTerrainData\n * @see QuantizedMeshTerrainData\n */\nfunction GoogleEarthEnterpriseTerrainData(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.buffer\", options.buffer);\n  Check.typeOf.number(\n    \"options.negativeAltitudeExponentBias\",\n    options.negativeAltitudeExponentBias,\n  );\n  Check.typeOf.number(\n    \"options.negativeElevationThreshold\",\n    options.negativeElevationThreshold,\n  );\n  //>>includeEnd('debug');\n\n  this._buffer = options.buffer;\n  this._credits = options.credits;\n  this._negativeAltitudeExponentBias = options.negativeAltitudeExponentBias;\n  this._negativeElevationThreshold = options.negativeElevationThreshold;\n\n  // Convert from google layout to layout of other providers\n  // 3 2 -> 2 3\n  // 0 1 -> 0 1\n  const googleChildTileMask = options.childTileMask ?? 15;\n  let childTileMask = googleChildTileMask & 3; // Bottom row is identical\n  childTileMask |= googleChildTileMask & 4 ? 8 : 0; // NE\n  childTileMask |= googleChildTileMask & 8 ? 4 : 0; // NW\n\n  this._childTileMask = childTileMask;\n\n  this._createdByUpsampling = options.createdByUpsampling ?? false;\n\n  this._skirtHeight = undefined;\n  this._bufferType = this._buffer.constructor;\n  this._mesh = undefined;\n  this._minimumHeight = undefined;\n  this._maximumHeight = undefined;\n}\n\nObject.defineProperties(GoogleEarthEnterpriseTerrainData.prototype, {\n  /**\n   * An array of credits for this tile\n   * @memberof GoogleEarthEnterpriseTerrainData.prototype\n   * @type {Credit[]}\n   */\n  credits: {\n    get: function () {\n      return this._credits;\n    },\n  },\n  /**\n   * The water mask included in this terrain data, if any.  A water mask is a rectangular\n   * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n   * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n   * @memberof GoogleEarthEnterpriseTerrainData.prototype\n   * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement|undefined}\n   */\n  waterMask: {\n    get: function () {\n      return undefined;\n    },\n  },\n});\n\nconst createMeshTaskName = \"createVerticesFromGoogleEarthEnterpriseBuffer\";\nconst createMeshTaskProcessorNoThrottle = new TaskProcessor(createMeshTaskName);\nconst createMeshTaskProcessorThrottle = new TaskProcessor(\n  createMeshTaskName,\n  TerrainData.maximumAsynchronousTasks,\n);\n\nconst nativeRectangleScratch = new Rectangle();\nconst rectangleScratch = new Rectangle();\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height from which terrain is exaggerated.\n * @param {boolean} [options.throttle=true] If true, indicates that this operation will need to be retried if too many asynchronous mesh creations are already in progress.\n * @returns {Promise<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n *          asynchronous mesh creations are already in progress and the operation should\n *          be retried later.\n */\nGoogleEarthEnterpriseTerrainData.prototype.createMesh = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.tilingScheme\", options.tilingScheme);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  Check.typeOf.number(\"options.level\", options.level);\n  //>>includeEnd('debug');\n\n  const tilingScheme = options.tilingScheme;\n  const x = options.x;\n  const y = options.y;\n  const level = options.level;\n  const exaggeration = options.exaggeration ?? 1.0;\n  const exaggerationRelativeHeight = options.exaggerationRelativeHeight ?? 0.0;\n  const throttle = options.throttle ?? true;\n\n  const ellipsoid = tilingScheme.ellipsoid;\n  tilingScheme.tileXYToNativeRectangle(x, y, level, nativeRectangleScratch);\n  tilingScheme.tileXYToRectangle(x, y, level, rectangleScratch);\n\n  // Compute the center of the tile for RTC rendering.\n  const center = ellipsoid.cartographicToCartesian(\n    Rectangle.center(rectangleScratch),\n  );\n\n  const levelZeroMaxError = 40075.16; // From Google's Doc\n  const thisLevelMaxError = levelZeroMaxError / (1 << level);\n  this._skirtHeight = Math.min(thisLevelMaxError * 8.0, 1000.0);\n\n  const createMeshTaskProcessor = throttle\n    ? createMeshTaskProcessorThrottle\n    : createMeshTaskProcessorNoThrottle;\n\n  const verticesPromise = createMeshTaskProcessor.scheduleTask({\n    buffer: this._buffer,\n    nativeRectangle: nativeRectangleScratch,\n    rectangle: rectangleScratch,\n    relativeToCenter: center,\n    ellipsoid: ellipsoid,\n    skirtHeight: this._skirtHeight,\n    exaggeration: exaggeration,\n    exaggerationRelativeHeight: exaggerationRelativeHeight,\n    includeWebMercatorT: true,\n    negativeAltitudeExponentBias: this._negativeAltitudeExponentBias,\n    negativeElevationThreshold: this._negativeElevationThreshold,\n  });\n\n  if (!defined(verticesPromise)) {\n    // Postponed\n    return undefined;\n  }\n\n  const that = this;\n  return verticesPromise.then(function (result) {\n    // Clone complex result objects because the transfer from the web worker\n    // has stripped them down to JSON-style objects.\n    that._mesh = new TerrainMesh(\n      center,\n      new Float32Array(result.vertices),\n      new Uint16Array(result.indices),\n      result.indexCountWithoutSkirts,\n      result.vertexCountWithoutSkirts,\n      result.minimumHeight,\n      result.maximumHeight,\n      rectangleScratch,\n      BoundingSphere.clone(result.boundingSphere3D),\n      Cartesian3.clone(result.occludeePointInScaledSpace),\n      result.numberOfAttributes,\n      OrientedBoundingBox.clone(result.orientedBoundingBox),\n      TerrainEncoding.clone(result.encoding),\n      result.westIndicesSouthToNorth,\n      result.southIndicesEastToWest,\n      result.eastIndicesNorthToSouth,\n      result.northIndicesWestToEast,\n    );\n\n    that._minimumHeight = result.minimumHeight;\n    that._maximumHeight = result.maximumHeight;\n\n    // Free memory received from server after mesh is created.\n    that._buffer = undefined;\n    return that._mesh;\n  });\n};\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {number} longitude The longitude in radians.\n * @param {number} latitude The latitude in radians.\n * @returns {number} The terrain height at the specified position.  If the position\n *          is outside the rectangle, this method will extrapolate the height, which is likely to be wildly\n *          incorrect for positions far outside the rectangle.\n */\nGoogleEarthEnterpriseTerrainData.prototype.interpolateHeight = function (\n  rectangle,\n  longitude,\n  latitude,\n) {\n  const u = CesiumMath.clamp(\n    (longitude - rectangle.west) / rectangle.width,\n    0.0,\n    1.0,\n  );\n  const v = CesiumMath.clamp(\n    (latitude - rectangle.south) / rectangle.height,\n    0.0,\n    1.0,\n  );\n\n  if (!defined(this._mesh)) {\n    return interpolateHeight(this, u, v, rectangle);\n  }\n\n  return interpolateMeshHeight(this, u, v);\n};\n\nconst upsampleTaskProcessor = new TaskProcessor(\n  \"upsampleQuantizedTerrainMesh\",\n  TerrainData.maximumAsynchronousTasks,\n);\n\n/**\n * Upsamples this terrain data for use by a descendant tile.  The resulting instance will contain a subset of the\n * height samples in this instance, interpolated if necessary.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise<HeightmapTerrainData>|undefined} A promise for upsampled heightmap terrain data for the descendant tile,\n *          or undefined if too many asynchronous upsample operations are in progress and the request has been\n *          deferred.\n */\nGoogleEarthEnterpriseTerrainData.prototype.upsample = function (\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"tilingScheme\", tilingScheme);\n  Check.typeOf.number(\"thisX\", thisX);\n  Check.typeOf.number(\"thisY\", thisY);\n  Check.typeOf.number(\"thisLevel\", thisLevel);\n  Check.typeOf.number(\"descendantX\", descendantX);\n  Check.typeOf.number(\"descendantY\", descendantY);\n  Check.typeOf.number(\"descendantLevel\", descendantLevel);\n  const levelDifference = descendantLevel - thisLevel;\n  if (levelDifference > 1) {\n    throw new DeveloperError(\n      \"Upsampling through more than one level at a time is not currently supported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const mesh = this._mesh;\n  if (!defined(this._mesh)) {\n    return undefined;\n  }\n\n  const isEastChild = thisX * 2 !== descendantX;\n  const isNorthChild = thisY * 2 === descendantY;\n\n  const ellipsoid = tilingScheme.ellipsoid;\n  const childRectangle = tilingScheme.tileXYToRectangle(\n    descendantX,\n    descendantY,\n    descendantLevel,\n  );\n\n  const upsamplePromise = upsampleTaskProcessor.scheduleTask({\n    vertices: mesh.vertices,\n    indices: mesh.indices,\n    indexCountWithoutSkirts: mesh.indexCountWithoutSkirts,\n    vertexCountWithoutSkirts: mesh.vertexCountWithoutSkirts,\n    encoding: mesh.encoding,\n    minimumHeight: this._minimumHeight,\n    maximumHeight: this._maximumHeight,\n    isEastChild: isEastChild,\n    isNorthChild: isNorthChild,\n    childRectangle: childRectangle,\n    ellipsoid: ellipsoid,\n  });\n\n  if (!defined(upsamplePromise)) {\n    // Postponed\n    return undefined;\n  }\n\n  const that = this;\n  return upsamplePromise.then(function (result) {\n    const quantizedVertices = new Uint16Array(result.vertices);\n    const indicesTypedArray = IndexDatatype.createTypedArray(\n      quantizedVertices.length / 3,\n      result.indices,\n    );\n\n    const skirtHeight = that._skirtHeight;\n\n    // Use QuantizedMeshTerrainData since we have what we need already parsed\n    return new QuantizedMeshTerrainData({\n      quantizedVertices: quantizedVertices,\n      indices: indicesTypedArray,\n      minimumHeight: result.minimumHeight,\n      maximumHeight: result.maximumHeight,\n      boundingSphere: BoundingSphere.clone(result.boundingSphere),\n      orientedBoundingBox: OrientedBoundingBox.clone(\n        result.orientedBoundingBox,\n      ),\n      horizonOcclusionPoint: Cartesian3.clone(result.horizonOcclusionPoint),\n      westIndices: result.westIndices,\n      southIndices: result.southIndices,\n      eastIndices: result.eastIndices,\n      northIndices: result.northIndices,\n      westSkirtHeight: skirtHeight,\n      southSkirtHeight: skirtHeight,\n      eastSkirtHeight: skirtHeight,\n      northSkirtHeight: skirtHeight,\n      childTileMask: 0,\n      createdByUpsampling: true,\n      credits: that._credits,\n    });\n  });\n};\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link GoogleEarthEnterpriseTerrainData.childTileMask}.  The given child tile coordinates are assumed\n * to be one of the four children of this tile.  If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {number} thisX The tile X coordinate of this (the parent) tile.\n * @param {number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {number} childX The tile X coordinate of the child tile to check for availability.\n * @param {number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {boolean} True if the child tile is available; otherwise, false.\n */\nGoogleEarthEnterpriseTerrainData.prototype.isChildAvailable = function (\n  thisX,\n  thisY,\n  childX,\n  childY,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"thisX\", thisX);\n  Check.typeOf.number(\"thisY\", thisY);\n  Check.typeOf.number(\"childX\", childX);\n  Check.typeOf.number(\"childY\", childY);\n  //>>includeEnd('debug');\n\n  let bitNumber = 2; // northwest child\n  if (childX !== thisX * 2) {\n    ++bitNumber; // east child\n  }\n  if (childY !== thisY * 2) {\n    bitNumber -= 2; // south child\n  }\n\n  return (this._childTileMask & (1 << bitNumber)) !== 0;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data.  If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server.  This method should return true for instances\n * returned from a call to {@link HeightmapTerrainData#upsample}.\n *\n * @returns {boolean} True if this instance was created by upsampling; otherwise, false.\n */\nGoogleEarthEnterpriseTerrainData.prototype.wasCreatedByUpsampling =\n  function () {\n    return this._createdByUpsampling;\n  };\n\nconst texCoordScratch0 = new Cartesian2();\nconst texCoordScratch1 = new Cartesian2();\nconst texCoordScratch2 = new Cartesian2();\nconst barycentricCoordinateScratch = new Cartesian3();\n\nfunction interpolateMeshHeight(terrainData, u, v) {\n  const mesh = terrainData._mesh;\n  const vertices = mesh.vertices;\n  const encoding = mesh.encoding;\n  const indices = mesh.indices;\n\n  for (let i = 0, len = indices.length; i < len; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n\n    const uv0 = encoding.decodeTextureCoordinates(\n      vertices,\n      i0,\n      texCoordScratch0,\n    );\n    const uv1 = encoding.decodeTextureCoordinates(\n      vertices,\n      i1,\n      texCoordScratch1,\n    );\n    const uv2 = encoding.decodeTextureCoordinates(\n      vertices,\n      i2,\n      texCoordScratch2,\n    );\n\n    const barycentric = Intersections2D.computeBarycentricCoordinates(\n      u,\n      v,\n      uv0.x,\n      uv0.y,\n      uv1.x,\n      uv1.y,\n      uv2.x,\n      uv2.y,\n      barycentricCoordinateScratch,\n    );\n    if (\n      barycentric.x >= -1e-15 &&\n      barycentric.y >= -1e-15 &&\n      barycentric.z >= -1e-15\n    ) {\n      const h0 = encoding.decodeHeight(vertices, i0);\n      const h1 = encoding.decodeHeight(vertices, i1);\n      const h2 = encoding.decodeHeight(vertices, i2);\n      return barycentric.x * h0 + barycentric.y * h1 + barycentric.z * h2;\n    }\n  }\n\n  // Position does not lie in any triangle in this mesh.\n  return undefined;\n}\n\nconst sizeOfUint16 = Uint16Array.BYTES_PER_ELEMENT;\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\nconst sizeOfInt32 = Int32Array.BYTES_PER_ELEMENT;\nconst sizeOfFloat = Float32Array.BYTES_PER_ELEMENT;\nconst sizeOfDouble = Float64Array.BYTES_PER_ELEMENT;\n\nfunction interpolateHeight(terrainData, u, v, rectangle) {\n  const buffer = terrainData._buffer;\n  let quad = 0; // SW\n  let uStart = 0.0;\n  let vStart = 0.0;\n  if (v > 0.5) {\n    // Upper row\n    if (u > 0.5) {\n      // NE\n      quad = 2;\n      uStart = 0.5;\n    } else {\n      // NW\n      quad = 3;\n    }\n    vStart = 0.5;\n  } else if (u > 0.5) {\n    // SE\n    quad = 1;\n    uStart = 0.5;\n  }\n\n  const dv = new DataView(buffer);\n  let offset = 0;\n  for (let q = 0; q < quad; ++q) {\n    offset += dv.getUint32(offset, true);\n    offset += sizeOfUint32;\n  }\n  offset += sizeOfUint32; // Skip length of quad\n  offset += 2 * sizeOfDouble; // Skip origin\n\n  // Read sizes\n  const xSize = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n  offset += sizeOfDouble;\n  const ySize = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\n  offset += sizeOfDouble;\n\n  // Samples per quad\n  const xScale = rectangle.width / xSize / 2;\n  const yScale = rectangle.height / ySize / 2;\n\n  // Number of points\n  const numPoints = dv.getInt32(offset, true);\n  offset += sizeOfInt32;\n\n  // Number of faces\n  const numIndices = dv.getInt32(offset, true) * 3;\n  offset += sizeOfInt32;\n\n  offset += sizeOfInt32; // Skip Level\n\n  const uBuffer = new Array(numPoints);\n  const vBuffer = new Array(numPoints);\n  const heights = new Array(numPoints);\n  let i;\n  for (i = 0; i < numPoints; ++i) {\n    uBuffer[i] = uStart + dv.getUint8(offset++) * xScale;\n    vBuffer[i] = vStart + dv.getUint8(offset++) * yScale;\n\n    // Height is stored in units of (1/EarthRadius) or (1/6371010.0)\n    heights[i] = dv.getFloat32(offset, true) * 6371010.0;\n    offset += sizeOfFloat;\n  }\n\n  const indices = new Array(numIndices);\n  for (i = 0; i < numIndices; ++i) {\n    indices[i] = dv.getUint16(offset, true);\n    offset += sizeOfUint16;\n  }\n\n  for (i = 0; i < numIndices; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n\n    const u0 = uBuffer[i0];\n    const u1 = uBuffer[i1];\n    const u2 = uBuffer[i2];\n\n    const v0 = vBuffer[i0];\n    const v1 = vBuffer[i1];\n    const v2 = vBuffer[i2];\n\n    const barycentric = Intersections2D.computeBarycentricCoordinates(\n      u,\n      v,\n      u0,\n      v0,\n      u1,\n      v1,\n      u2,\n      v2,\n      barycentricCoordinateScratch,\n    );\n    if (\n      barycentric.x >= -1e-15 &&\n      barycentric.y >= -1e-15 &&\n      barycentric.z >= -1e-15\n    ) {\n      return (\n        barycentric.x * heights[i0] +\n        barycentric.y * heights[i1] +\n        barycentric.z * heights[i2]\n      );\n    }\n  }\n\n  // Position does not lie in any triangle in this mesh.\n  return undefined;\n}\nexport default GoogleEarthEnterpriseTerrainData;\n","import Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport GoogleEarthEnterpriseMetadata from \"./GoogleEarthEnterpriseMetadata.js\";\nimport GoogleEarthEnterpriseTerrainData from \"./GoogleEarthEnterpriseTerrainData.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Request from \"./Request.js\";\nimport RequestState from \"./RequestState.js\";\nimport RequestType from \"./RequestType.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\n\nconst TerrainState = {\n  UNKNOWN: 0,\n  NONE: 1,\n  SELF: 2,\n  PARENT: 3,\n};\n\nconst julianDateScratch = new JulianDate();\n\nfunction TerrainCache() {\n  this._terrainCache = {};\n  this._lastTidy = JulianDate.now();\n}\n\nTerrainCache.prototype.add = function (quadKey, buffer) {\n  this._terrainCache[quadKey] = {\n    buffer: buffer,\n    timestamp: JulianDate.now(),\n  };\n};\n\nTerrainCache.prototype.get = function (quadKey) {\n  const terrainCache = this._terrainCache;\n  const result = terrainCache[quadKey];\n  if (defined(result)) {\n    delete this._terrainCache[quadKey];\n    return result.buffer;\n  }\n};\n\nTerrainCache.prototype.tidy = function () {\n  JulianDate.now(julianDateScratch);\n  if (JulianDate.secondsDifference(julianDateScratch, this._lastTidy) > 10) {\n    const terrainCache = this._terrainCache;\n    const keys = Object.keys(terrainCache);\n    const count = keys.length;\n    for (let i = 0; i < count; ++i) {\n      const k = keys[i];\n      const e = terrainCache[k];\n      if (JulianDate.secondsDifference(julianDateScratch, e.timestamp) > 10) {\n        delete terrainCache[k];\n      }\n    }\n\n    JulianDate.clone(julianDateScratch, this._lastTidy);\n  }\n};\n\n/**\n * @typedef {object} GoogleEarthEnterpriseTerrainProvider.ConstructorOptions\n *\n * Initialization options for GoogleEarthEnterpriseTerrainProvider constructor\n *\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * <div class=\"notice\">\n * To construct a GoogleEarthEnterpriseTerrainProvider, call {@link  GoogleEarthEnterpriseTerrainProvider.fromMetadata}. Do not call the constructor directly.\n * </div>\n *\n * Provides tiled terrain using the Google Earth Enterprise REST API.\n *\n * @alias GoogleEarthEnterpriseTerrainProvider\n * @constructor\n *\n * @param {GoogleEarthEnterpriseTerrainProvider.ConstructorOptions} [options] An object describing initialization options\n *\n * @see GoogleEarthEnterpriseTerrainProvider.fromMetadata\n * @see GoogleEarthEnterpriseMetadata.fromUrl\n * @see GoogleEarthEnterpriseImageryProvider\n * @see CesiumTerrainProvider\n *\n * @example\n * const geeMetadata = await GoogleEarthEnterpriseMetadata.fromUrl(\"http://www.example.com\");\n * const gee = Cesium.GoogleEarthEnterpriseTerrainProvider.fromMetadata(geeMetadata);\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction GoogleEarthEnterpriseTerrainProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._tilingScheme = new GeographicTilingScheme({\n    numberOfLevelZeroTilesX: 2,\n    numberOfLevelZeroTilesY: 2,\n    rectangle: new Rectangle(\n      -CesiumMath.PI,\n      -CesiumMath.PI,\n      CesiumMath.PI,\n      CesiumMath.PI,\n    ),\n    ellipsoid: options.ellipsoid,\n  });\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n\n  // Pulled from Google's documentation\n  this._levelZeroMaximumGeometricError = 40075.16;\n\n  this._terrainCache = new TerrainCache();\n  this._terrainPromises = {};\n  this._terrainRequests = {};\n\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(GoogleEarthEnterpriseTerrainProvider.prototype, {\n  /**\n   * Gets the name of the Google Earth Enterprise server url hosting the imagery.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._metadata.url;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._metadata.proxy;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active.  Typically this is used to credit\n   * the source of the terrain.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask.  The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasWaterMask: {\n    get: function () {\n      return false;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasVertexNormals: {\n    get: function () {\n      return false;\n    },\n  },\n\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles. This property may be undefined if availability\n   * information is not available.\n   * @memberof GoogleEarthEnterpriseTerrainProvider.prototype\n   * @type {TileAvailability|undefined}\n   * @readonly\n   */\n  availability: {\n    get: function () {\n      return undefined;\n    },\n  },\n});\n\n/**\n * Creates a GoogleEarthTerrainProvider from GoogleEarthEnterpriseMetadata\n *\n * @param {GoogleEarthEnterpriseMetadata} metadata A metadata object that can be used to share metadata requests with a GoogleEarthEnterpriseImageryProvider.\n * @param {GoogleEarthEnterpriseTerrainProvider.ConstructorOptions} options An object describing initialization options\n * @returns {GoogleEarthEnterpriseTerrainProvider}\n *\n * @see GoogleEarthEnterpriseMetadata.fromUrl\n *\n * @exception {RuntimeError} metadata does not specify terrain\n *\n * @example\n * const geeMetadata = await GoogleEarthEnterpriseMetadata.fromUrl(\"http://www.example.com\");\n * const gee = Cesium.GoogleEarthEnterpriseTerrainProvider.fromMetadata(geeMetadata);\n */\nGoogleEarthEnterpriseTerrainProvider.fromMetadata = function (\n  metadata,\n  options,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"metadata\", metadata);\n  //>>includeEnd('debug');\n\n  if (!metadata.terrainPresent) {\n    throw new RuntimeError(`The server ${metadata.url} doesn't have terrain`);\n  }\n\n  const provider = new GoogleEarthEnterpriseTerrainProvider(options);\n  provider._metadata = metadata;\n\n  return provider;\n};\n\nconst taskProcessor = new TaskProcessor(\"decodeGoogleEarthEnterprisePacket\");\n\n// If the tile has its own terrain, then you can just use its child bitmask. If it was requested using it's parent\n//  then you need to check all of its children to see if they have terrain.\nfunction computeChildMask(quadKey, info, metadata) {\n  let childMask = info.getChildBitmask();\n  if (info.terrainState === TerrainState.PARENT) {\n    childMask = 0;\n    for (let i = 0; i < 4; ++i) {\n      const child = metadata.getTileInformationFromQuadKey(\n        quadKey + i.toString(),\n      );\n      if (defined(child) && child.hasTerrain()) {\n        childMask |= 1 << i;\n      }\n    }\n  }\n\n  return childMask;\n}\n\n/**\n * Requests the geometry for a given tile.   The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<TerrainData>|undefined} A promise for the requested geometry.  If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.requestTileGeometry = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n  const terrainCache = this._terrainCache;\n  const metadata = this._metadata;\n  const info = metadata.getTileInformationFromQuadKey(quadKey);\n\n  // Check if this tile is even possibly available\n  if (!defined(info)) {\n    return Promise.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n  }\n\n  let terrainState = info.terrainState;\n  if (!defined(terrainState)) {\n    // First time we have tried to load this tile, so set terrain state to UNKNOWN\n    terrainState = info.terrainState = TerrainState.UNKNOWN;\n  }\n\n  // If its in the cache, return it\n  const buffer = terrainCache.get(quadKey);\n  if (defined(buffer)) {\n    const credit = metadata.providers[info.terrainProvider];\n    return Promise.resolve(\n      new GoogleEarthEnterpriseTerrainData({\n        buffer: buffer,\n        childTileMask: computeChildMask(quadKey, info, metadata),\n        credits: defined(credit) ? [credit] : undefined,\n        negativeAltitudeExponentBias: metadata.negativeAltitudeExponentBias,\n        negativeElevationThreshold: metadata.negativeAltitudeThreshold,\n      }),\n    );\n  }\n\n  // Clean up the cache\n  terrainCache.tidy();\n\n  // We have a tile, check to see if no ancestors have terrain or that we know for sure it doesn't\n  if (!info.ancestorHasTerrain) {\n    // We haven't reached a level with terrain, so return the ellipsoid\n    return Promise.resolve(\n      new HeightmapTerrainData({\n        buffer: new Uint8Array(16 * 16),\n        width: 16,\n        height: 16,\n      }),\n    );\n  } else if (terrainState === TerrainState.NONE) {\n    // Already have info and there isn't any terrain here\n    return Promise.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n  }\n\n  // Figure out where we are getting the terrain and what version\n  let parentInfo;\n  let q = quadKey;\n  let terrainVersion = -1;\n  switch (terrainState) {\n    case TerrainState.SELF: // We have terrain and have retrieved it before\n      terrainVersion = info.terrainVersion;\n      break;\n    case TerrainState.PARENT: // We have terrain in our parent\n      q = q.substring(0, q.length - 1);\n      parentInfo = metadata.getTileInformationFromQuadKey(q);\n      terrainVersion = parentInfo.terrainVersion;\n      break;\n    case TerrainState.UNKNOWN: // We haven't tried to retrieve terrain yet\n      if (info.hasTerrain()) {\n        terrainVersion = info.terrainVersion; // We should have terrain\n      } else {\n        q = q.substring(0, q.length - 1);\n        parentInfo = metadata.getTileInformationFromQuadKey(q);\n        if (defined(parentInfo) && parentInfo.hasTerrain()) {\n          terrainVersion = parentInfo.terrainVersion; // Try checking in the parent\n        }\n      }\n      break;\n  }\n\n  // We can't figure out where to get the terrain\n  if (terrainVersion < 0) {\n    return Promise.reject(new RuntimeError(\"Terrain tile doesn't exist\"));\n  }\n\n  // Load that terrain\n  const terrainPromises = this._terrainPromises;\n  const terrainRequests = this._terrainRequests;\n  let sharedPromise;\n  let sharedRequest;\n  if (defined(terrainPromises[q])) {\n    // Already being loaded possibly from another child, so return existing promise\n    sharedPromise = terrainPromises[q];\n    sharedRequest = terrainRequests[q];\n  } else {\n    // Create new request for terrain\n    sharedRequest = request;\n    const requestPromise = buildTerrainResource(\n      this,\n      q,\n      terrainVersion,\n      sharedRequest,\n    ).fetchArrayBuffer();\n\n    if (!defined(requestPromise)) {\n      return undefined; // Throttled\n    }\n\n    sharedPromise = requestPromise.then(function (terrain) {\n      if (defined(terrain)) {\n        return taskProcessor\n          .scheduleTask(\n            {\n              buffer: terrain,\n              type: \"Terrain\",\n              key: metadata.key,\n            },\n            [terrain],\n          )\n          .then(function (terrainTiles) {\n            // Add requested tile and mark it as SELF\n            const requestedInfo = metadata.getTileInformationFromQuadKey(q);\n            requestedInfo.terrainState = TerrainState.SELF;\n            terrainCache.add(q, terrainTiles[0]);\n            const provider = requestedInfo.terrainProvider;\n\n            // Add children to cache\n            const count = terrainTiles.length - 1;\n            for (let j = 0; j < count; ++j) {\n              const childKey = q + j.toString();\n              const child = metadata.getTileInformationFromQuadKey(childKey);\n              if (defined(child)) {\n                terrainCache.add(childKey, terrainTiles[j + 1]);\n                child.terrainState = TerrainState.PARENT;\n                if (child.terrainProvider === 0) {\n                  child.terrainProvider = provider;\n                }\n              }\n            }\n          });\n      }\n\n      return Promise.reject(new RuntimeError(\"Failed to load terrain.\"));\n    });\n\n    terrainPromises[q] = sharedPromise; // Store promise without delete from terrainPromises\n    terrainRequests[q] = sharedRequest;\n\n    // Set promise so we remove from terrainPromises just one time\n    sharedPromise = sharedPromise.finally(function () {\n      delete terrainPromises[q];\n      delete terrainRequests[q];\n    });\n  }\n\n  return sharedPromise\n    .then(function () {\n      const buffer = terrainCache.get(quadKey);\n      if (defined(buffer)) {\n        const credit = metadata.providers[info.terrainProvider];\n        return new GoogleEarthEnterpriseTerrainData({\n          buffer: buffer,\n          childTileMask: computeChildMask(quadKey, info, metadata),\n          credits: defined(credit) ? [credit] : undefined,\n          negativeAltitudeExponentBias: metadata.negativeAltitudeExponentBias,\n          negativeElevationThreshold: metadata.negativeAltitudeThreshold,\n        });\n      }\n\n      return Promise.reject(new RuntimeError(\"Failed to load terrain.\"));\n    })\n    .catch(function (error) {\n      if (sharedRequest.state === RequestState.CANCELLED) {\n        request.state = sharedRequest.state;\n        return Promise.reject(error);\n      }\n      info.terrainState = TerrainState.NONE;\n      return Promise.reject(error);\n    });\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.getLevelMaximumGeometricError =\n  function (level) {\n    return this._levelZeroMaximumGeometricError / (1 << level);\n  };\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported, otherwise true or false.\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.getTileDataAvailable = function (\n  x,\n  y,\n  level,\n) {\n  const metadata = this._metadata;\n  let quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n\n  const info = metadata.getTileInformation(x, y, level);\n  if (info === null) {\n    return false;\n  }\n\n  if (defined(info)) {\n    if (!info.ancestorHasTerrain) {\n      return true; // We'll just return the ellipsoid\n    }\n\n    const terrainState = info.terrainState;\n    if (terrainState === TerrainState.NONE) {\n      return false; // Terrain is not available\n    }\n\n    if (!defined(terrainState) || terrainState === TerrainState.UNKNOWN) {\n      info.terrainState = TerrainState.UNKNOWN;\n      if (!info.hasTerrain()) {\n        quadKey = quadKey.substring(0, quadKey.length - 1);\n        const parentInfo = metadata.getTileInformationFromQuadKey(quadKey);\n        if (!defined(parentInfo) || !parentInfo.hasTerrain()) {\n          return false;\n        }\n      }\n    }\n\n    return true;\n  }\n\n  if (metadata.isValid(quadKey)) {\n    // We will need this tile, so request metadata and return false for now\n    const request = new Request({\n      throttle: false,\n      throttleByServer: true,\n      type: RequestType.TERRAIN,\n    });\n    metadata.populateSubtree(x, y, level, request);\n  }\n  return false;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {undefined}\n */\nGoogleEarthEnterpriseTerrainProvider.prototype.loadTileDataAvailability =\n  function (x, y, level) {\n    return undefined;\n  };\n\n//\n// Functions to handle imagery packets\n//\nfunction buildTerrainResource(terrainProvider, quadKey, version, request) {\n  version = defined(version) && version > 0 ? version : 1;\n  return terrainProvider._metadata.resource.getDerivedResource({\n    url: `flatfile?f1c-0${quadKey}-t.${version.toString()}`,\n    request: request,\n  });\n}\nexport default GoogleEarthEnterpriseTerrainProvider;\n","import defined from \"./defined.js\";\nimport isBitSet from \"./isBitSet.js\";\n\n// Bitmask for checking tile properties\nconst childrenBitmasks = [0x01, 0x02, 0x04, 0x08];\nconst anyChildBitmask = 0x0f;\nconst cacheFlagBitmask = 0x10; // True if there is a child subtree\nconst imageBitmask = 0x40;\nconst terrainBitmask = 0x80;\n\n/**\n * Contains information about each tile from a Google Earth Enterprise server\n *\n * @param {number} bits Bitmask that contains the type of data and available children for each tile.\n * @param {number} cnodeVersion Version of the request for subtree metadata.\n * @param {number} imageryVersion Version of the request for imagery tile.\n * @param {number} terrainVersion Version of the request for terrain tile.\n * @param {number} imageryProvider Id of imagery provider.\n * @param {number} terrainProvider Id of terrain provider.\n *\n * @private\n */\nfunction GoogleEarthEnterpriseTileInformation(\n  bits,\n  cnodeVersion,\n  imageryVersion,\n  terrainVersion,\n  imageryProvider,\n  terrainProvider,\n) {\n  this._bits = bits;\n  this.cnodeVersion = cnodeVersion;\n  this.imageryVersion = imageryVersion;\n  this.terrainVersion = terrainVersion;\n  this.imageryProvider = imageryProvider;\n  this.terrainProvider = terrainProvider;\n  this.ancestorHasTerrain = false; // Set it later once we find its parent\n  this.terrainState = undefined;\n}\n\n/**\n * Creates GoogleEarthEnterpriseTileInformation from an object\n *\n * @param {object} info Object to be cloned\n * @param {GoogleEarthEnterpriseTileInformation} [result] The object onto which to store the result.\n * @returns {GoogleEarthEnterpriseTileInformation} The modified result parameter or a new GoogleEarthEnterpriseTileInformation instance if none was provided.\n */\nGoogleEarthEnterpriseTileInformation.clone = function (info, result) {\n  if (!defined(result)) {\n    result = new GoogleEarthEnterpriseTileInformation(\n      info._bits,\n      info.cnodeVersion,\n      info.imageryVersion,\n      info.terrainVersion,\n      info.imageryProvider,\n      info.terrainProvider,\n    );\n  } else {\n    result._bits = info._bits;\n    result.cnodeVersion = info.cnodeVersion;\n    result.imageryVersion = info.imageryVersion;\n    result.terrainVersion = info.terrainVersion;\n    result.imageryProvider = info.imageryProvider;\n    result.terrainProvider = info.terrainProvider;\n  }\n  result.ancestorHasTerrain = info.ancestorHasTerrain;\n  result.terrainState = info.terrainState;\n\n  return result;\n};\n\n/**\n * Sets the parent for the tile\n *\n * @param {GoogleEarthEnterpriseTileInformation} parent Parent tile\n */\nGoogleEarthEnterpriseTileInformation.prototype.setParent = function (parent) {\n  this.ancestorHasTerrain = parent.ancestorHasTerrain || this.hasTerrain();\n};\n\n/**\n * Gets whether a subtree is available\n *\n * @returns {boolean} true if subtree is available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasSubtree = function () {\n  return isBitSet(this._bits, cacheFlagBitmask);\n};\n\n/**\n * Gets whether imagery is available\n *\n * @returns {boolean} true if imagery is available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasImagery = function () {\n  return isBitSet(this._bits, imageBitmask);\n};\n\n/**\n * Gets whether terrain is available\n *\n * @returns {boolean} true if terrain is available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasTerrain = function () {\n  return isBitSet(this._bits, terrainBitmask);\n};\n\n/**\n * Gets whether any children are present\n *\n * @returns {boolean} true if any children are available, false otherwise.\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasChildren = function () {\n  return isBitSet(this._bits, anyChildBitmask);\n};\n\n/**\n * Gets whether a specified child is available\n *\n * @param {number} index Index of child tile\n *\n * @returns {boolean} true if child is available, false otherwise\n */\nGoogleEarthEnterpriseTileInformation.prototype.hasChild = function (index) {\n  return isBitSet(this._bits, childrenBitmasks[index]);\n};\n\n/**\n * Gets bitmask containing children\n *\n * @returns {number} Children bitmask\n */\nGoogleEarthEnterpriseTileInformation.prototype.getChildBitmask = function () {\n  return this._bits & anyChildBitmask;\n};\nexport default GoogleEarthEnterpriseTileInformation;\n","import Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\nconst API_URL = \"https://maps.googleapis.com/maps/api/geocode/json\";\nconst CREDIT_HTML = `<img alt=\"Google\" src=\"https://assets.ion.cesium.com/google-credit.png\" style=\"vertical-align:-5px\">`;\n\n/**\n * Provides geocoding through Google.\n *\n * @see {@link https://developers.google.com/maps/documentation/geocoding/policies|Google Geocoding Policies}\n * @alias GoogleGeocoderService\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.key An API key to use with the Google geocoding service\n */\nfunction GoogleGeocoderService(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const key = options.key;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(key)) {\n    throw new DeveloperError(\"options.key is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._resource = new Resource({\n    url: API_URL,\n    queryParameters: { key },\n  });\n\n  this._credit = new Credit(CREDIT_HTML, true);\n}\n\nObject.defineProperties(GoogleGeocoderService.prototype, {\n  /**\n   * Gets the credit to display after a geocode is performed. Typically this is used to credit\n   * the geocoder service.\n   * @memberof GoogleGeocoderService.prototype\n   * @type {Credit|undefined}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n});\n\n/**\n * Get a list of possible locations that match a search string.\n *\n * @function\n *\n * @param {string} query The query to be sent to the geocoder service\n * @returns {Promise<GeocoderService.Result[]>}\n * @throws {RuntimeError} If the services returns a status other than <code>OK</code> or <code>ZERO_RESULTS</code>\n */\nGoogleGeocoderService.prototype.geocode = async function (query) {\n  // See API documentation at https://developers.google.com/maps/documentation/geocoding/requests-geocoding\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"query\", query);\n  //>>includeEnd('debug');\n\n  const resource = this._resource.getDerivedResource({\n    queryParameters: {\n      address: query,\n    },\n  });\n\n  const response = await resource.fetchJson();\n\n  if (response.status === \"ZERO_RESULTS\") {\n    return [];\n  }\n\n  if (response.status !== \"OK\") {\n    throw new RuntimeError(\n      `GoogleGeocoderService got a bad response ${response.status}: ${response.error_message}`,\n    );\n  }\n\n  const results = response.results.map((result) => {\n    const southWest = result.geometry.viewport.southwest;\n    const northEast = result.geometry.viewport.northeast;\n    return {\n      displayName: result.formatted_address,\n      destination: Rectangle.fromDegrees(\n        southWest.lng,\n        southWest.lat,\n        northEast.lng,\n        northEast.lat,\n      ),\n      attribution: {\n        html: CREDIT_HTML,\n        collapsible: false,\n      },\n    };\n  });\n\n  return results;\n};\n\nexport default GoogleGeocoderService;\n","import Credit from \"./Credit.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * Default settings for accessing the Google Maps API.\n * <br/>\n * An API key is only required if you are directly using any Google Maps APIs, such as through {@link createGooglePhotorealistic3DTileset}.\n * Follow instructions for managing API keys for the Google Maps Platform at {@link https://developers.google.com/maps/documentation/embed/get-api-key}.\n * <br/>\n * You can enable multiple Google Maps Platform APIs on a single API key.\n * However, a separate {@link GoogleMaps.defaultStreetViewStaticApiKey}\n * is available if you prefer to use a dedicated key for the Street View Static API.\n *\n * @see createGooglePhotorealistic3DTileset\n * @see https://developers.google.com/maps/documentation/embed/get-api-key\n *\n * @namespace GoogleMaps\n */\nconst GoogleMaps = {};\n\n/**\n * Gets or sets the default Google Maps API key.\n *\n * @type {undefined|string}\n */\nGoogleMaps.defaultApiKey = undefined;\n\n/**\n * Gets or sets the default Google Map Tiles API endpoint.\n *\n * @type {string|Resource}\n * @default https://tile.googleapis.com/\n */\nGoogleMaps.mapTilesApiEndpoint = new Resource({\n  url: \"https://tile.googleapis.com/\",\n});\n\n/**\n * Gets or sets the default Google Maps Street View Static API key.\n *\n * @type {undefined|string}\n */\nGoogleMaps.defaultStreetViewStaticApiKey = undefined;\n\n/**\n * Gets or sets the default Google Street View Static API endpoint.\n *\n * @type {string|Resource}\n * @default https://maps.googleapis.com/maps/api/streetview\n */\nGoogleMaps.streetViewStaticApiEndpoint = new Resource({\n  url: \"https://maps.googleapis.com/maps/api/streetview\",\n});\n\nGoogleMaps.getDefaultCredit = function () {\n  return new Credit(\n    `<img alt=\\\"Google\\\" src=\\\"https://assets.ion.cesium.com/google-credit.png\\\" style=\\\"vertical-align:-6px\\\">`,\n    true,\n  );\n};\nexport default GoogleMaps;\n","import Check from \"./Check.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport isLeapYear from \"./isLeapYear.js\";\n\nconst daysInYear = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n/**\n * Represents a Gregorian date in a more precise format than the JavaScript Date object.\n * In addition to submillisecond precision, this object can also represent leap seconds.\n * @alias GregorianDate\n * @constructor\n *\n * @param {number} [year] The year as a whole number.\n * @param {number} [month] The month as a whole number with range [1, 12].\n * @param {number} [day] The day of the month as a whole number starting at 1.\n * @param {number} [hour] The hour as a whole number with range [0, 23].\n * @param {number} [minute] The minute of the hour as a whole number with range [0, 59].\n * @param {number} [second] The second of the minute as a whole number with range [0, 60], with 60 representing a leap second.\n * @param {number} [millisecond] The millisecond of the second as a floating point number with range [0.0, 1000.0).\n * @param {boolean} [isLeapSecond] Whether this time is during a leap second.\n *\n * @see JulianDate#toGregorianDate\n */\nfunction GregorianDate(\n  year,\n  month,\n  day,\n  hour,\n  minute,\n  second,\n  millisecond,\n  isLeapSecond,\n) {\n  const minimumYear = 1;\n  const minimumMonth = 1;\n  const minimumDay = 1;\n  const minimumHour = 0;\n  const minimumMinute = 0;\n  const minimumSecond = 0;\n  const minimumMillisecond = 0;\n\n  year = year ?? minimumYear;\n  month = month ?? minimumMonth;\n  day = day ?? minimumDay;\n  hour = hour ?? minimumHour;\n  minute = minute ?? minimumMinute;\n  second = second ?? minimumSecond;\n  millisecond = millisecond ?? minimumMillisecond;\n  isLeapSecond = isLeapSecond ?? false;\n  //>>includeStart('debug', pragmas.debug);\n  validateRange();\n  validateDate();\n  //>>includeEnd('debug');\n\n  /**\n   * Gets or sets the year as a whole number.\n   * @type {number}\n   */\n  this.year = year;\n  /**\n   * Gets or sets the month as a whole number with range [1, 12].\n   * @type {number}\n   */\n  this.month = month;\n  /**\n   * Gets or sets the day of the month as a whole number starting at 1.\n   * @type {number}\n   */\n  this.day = day;\n  /**\n   * Gets or sets the hour as a whole number with range [0, 23].\n   * @type {number}\n   */\n  this.hour = hour;\n  /**\n   * Gets or sets the minute of the hour as a whole number with range [0, 59].\n   * @type {number}\n   */\n  this.minute = minute;\n  /**\n   * Gets or sets the second of the minute as a whole number with range [0, 60], with 60 representing a leap second.\n   * @type {number}\n   */\n  this.second = second;\n  /**\n   * Gets or sets the millisecond of the second as a floating point number with range [0.0, 1000.0).\n   * @type {number}\n   */\n  this.millisecond = millisecond;\n  /**\n   * Gets or sets whether this time is during a leap second.\n   * @type {boolean}\n   */\n  this.isLeapSecond = isLeapSecond;\n\n  function validateRange() {\n    const maximumYear = 9999;\n    const maximumMonth = 12;\n    const maximumDay = 31;\n    const maximumHour = 23;\n    const maximumMinute = 59;\n    const maximumSecond = 59;\n    const excludedMaximumMilisecond = 1000;\n\n    Check.typeOf.number.greaterThanOrEquals(\"Year\", year, minimumYear);\n    Check.typeOf.number.lessThanOrEquals(\"Year\", year, maximumYear);\n\n    Check.typeOf.number.greaterThanOrEquals(\"Month\", month, minimumMonth);\n    Check.typeOf.number.lessThanOrEquals(\"Month\", month, maximumMonth);\n\n    Check.typeOf.number.greaterThanOrEquals(\"Day\", day, minimumDay);\n    Check.typeOf.number.lessThanOrEquals(\"Day\", day, maximumDay);\n\n    Check.typeOf.number.greaterThanOrEquals(\"Hour\", hour, minimumHour);\n    Check.typeOf.number.lessThanOrEquals(\"Hour\", hour, maximumHour);\n\n    Check.typeOf.number.greaterThanOrEquals(\"Minute\", minute, minimumMinute);\n    Check.typeOf.number.lessThanOrEquals(\"Minute\", minute, maximumMinute);\n\n    Check.typeOf.bool(\"IsLeapSecond\", isLeapSecond);\n\n    Check.typeOf.number.greaterThanOrEquals(\"Second\", second, minimumSecond);\n    Check.typeOf.number.lessThanOrEquals(\n      \"Second\",\n      second,\n      isLeapSecond ? maximumSecond + 1 : maximumSecond,\n    );\n\n    Check.typeOf.number.greaterThanOrEquals(\n      \"Millisecond\",\n      millisecond,\n      minimumMillisecond,\n    );\n    Check.typeOf.number.lessThan(\n      \"Millisecond\",\n      millisecond,\n      excludedMaximumMilisecond,\n    );\n  }\n\n  // Javascript date object supports only dates greater than 1901. Thus validating with custom logic\n  function validateDate() {\n    const daysInMonth =\n      month === 2 && isLeapYear(year)\n        ? daysInYear[month - 1] + 1\n        : daysInYear[month - 1];\n\n    if (day > daysInMonth) {\n      throw new DeveloperError(\"Month and Day represents invalid date\");\n    }\n  }\n}\nexport default GregorianDate;\n","import ApproximateTerrainHeights from \"./ApproximateTerrainHeights.js\";\nimport ArcType from \"./ArcType.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport EncodedCartesian3 from \"./EncodedCartesian3.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Plane from \"./Plane.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\n\nconst PROJECTIONS = [GeographicProjection, WebMercatorProjection];\nconst PROJECTION_COUNT = PROJECTIONS.length;\n\nconst MITER_BREAK_SMALL = Math.cos(CesiumMath.toRadians(30.0));\nconst MITER_BREAK_LARGE = Math.cos(CesiumMath.toRadians(150.0));\n\n// Initial heights for constructing the wall.\n// Keeping WALL_INITIAL_MIN_HEIGHT near the ellipsoid surface helps\n// prevent precision problems with planes in the shader.\n// Putting the start point of a plane at ApproximateTerrainHeights._defaultMinTerrainHeight,\n// which is a highly conservative bound, usually puts the plane origin several thousands\n// of meters away from the actual terrain, causing floating point problems when checking\n// fragments on terrain against the plane.\n// Ellipsoid height is generally much closer.\n// The initial max height is arbitrary.\n// Both heights are corrected using ApproximateTerrainHeights for computing the actual volume geometry.\nconst WALL_INITIAL_MIN_HEIGHT = 0.0;\nconst WALL_INITIAL_MAX_HEIGHT = 1000.0;\n\n/**\n * A description of a polyline on terrain or 3D Tiles. Only to be used with {@link GroundPolylinePrimitive}.\n *\n * @alias GroundPolylineGeometry\n * @constructor\n *\n * @param {object} options Options with the following properties:\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the polyline's points. Heights above the ellipsoid will be ignored.\n * @param {number} [options.width=1.0] The screen space width in pixels.\n * @param {number} [options.granularity=9999.0] The distance interval in meters used for interpolating options.points. Defaults to 9999.0 meters. Zero indicates no interpolation.\n * @param {boolean} [options.loop=false] Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n *\n * @exception {DeveloperError} At least two positions are required.\n *\n * @see GroundPolylinePrimitive\n *\n * @example\n * const positions = Cesium.Cartesian3.fromDegreesArray([\n *   -112.1340164450331, 36.05494287836128,\n *   -112.08821010582645, 36.097804071380715,\n *   -112.13296079730024, 36.168769146801104\n * ]);\n *\n * const geometry = new Cesium.GroundPolylineGeometry({\n *   positions : positions\n * });\n */\nfunction GroundPolylineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions) || positions.length < 2) {\n    throw new DeveloperError(\"At least two positions are required.\");\n  }\n  if (\n    defined(options.arcType) &&\n    options.arcType !== ArcType.GEODESIC &&\n    options.arcType !== ArcType.RHUMB\n  ) {\n    throw new DeveloperError(\n      \"Valid options for arcType are ArcType.GEODESIC and ArcType.RHUMB.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * The screen space width in pixels.\n   * @type {number}\n   */\n  this.width = options.width ?? 1.0; // Doesn't get packed, not necessary for computing geometry.\n\n  this._positions = positions;\n\n  /**\n   * The distance interval used for interpolating options.points. Zero indicates no interpolation.\n   * Default of 9999.0 allows centimeter accuracy with 32 bit floating point.\n   * @type {boolean}\n   * @default 9999.0\n   */\n  this.granularity = options.granularity ?? 9999.0;\n\n  /**\n   * Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop.\n   * If the geometry has two positions this parameter will be ignored.\n   * @type {boolean}\n   * @default false\n   */\n  this.loop = options.loop ?? false;\n\n  /**\n   * The type of path the polyline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n   * @type {ArcType}\n   * @default ArcType.GEODESIC\n   */\n  this.arcType = options.arcType ?? ArcType.GEODESIC;\n\n  this._ellipsoid = Ellipsoid.default;\n\n  // MapProjections can't be packed, so store the index to a known MapProjection.\n  this._projectionIndex = 0;\n  this._workerName = \"createGroundPolylineGeometry\";\n\n  // Used by GroundPolylinePrimitive to signal worker that scenemode is 3D only.\n  this._scene3DOnly = false;\n}\n\nObject.defineProperties(GroundPolylineGeometry.prototype, {\n  /**\n   * The number of elements used to pack the object into an array.\n   * @memberof GroundPolylineGeometry.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  packedLength: {\n    get: function () {\n      return (\n        1.0 +\n        this._positions.length * 3 +\n        1.0 +\n        1.0 +\n        1.0 +\n        Ellipsoid.packedLength +\n        1.0 +\n        1.0\n      );\n    },\n  },\n});\n\n/**\n * Set the GroundPolylineGeometry's projection and ellipsoid.\n * Used by GroundPolylinePrimitive to signal scene information to the geometry for generating 2D attributes.\n *\n * @param {GroundPolylineGeometry} groundPolylineGeometry GroundPolylinGeometry describing a polyline on terrain or 3D Tiles.\n * @param {Projection} mapProjection A MapProjection used for projecting cartographic coordinates to 2D.\n * @private\n */\nGroundPolylineGeometry.setProjectionAndEllipsoid = function (\n  groundPolylineGeometry,\n  mapProjection,\n) {\n  let projectionIndex = 0;\n  for (let i = 0; i < PROJECTION_COUNT; i++) {\n    if (mapProjection instanceof PROJECTIONS[i]) {\n      projectionIndex = i;\n      break;\n    }\n  }\n\n  groundPolylineGeometry._projectionIndex = projectionIndex;\n  groundPolylineGeometry._ellipsoid = mapProjection.ellipsoid;\n};\n\nconst cart3Scratch1 = new Cartesian3();\nconst cart3Scratch2 = new Cartesian3();\nconst cart3Scratch3 = new Cartesian3();\nfunction computeRightNormal(start, end, maxHeight, ellipsoid, result) {\n  const startBottom = getPosition(ellipsoid, start, 0.0, cart3Scratch1);\n  const startTop = getPosition(ellipsoid, start, maxHeight, cart3Scratch2);\n  const endBottom = getPosition(ellipsoid, end, 0.0, cart3Scratch3);\n\n  const up = direction(startTop, startBottom, cart3Scratch2);\n  const forward = direction(endBottom, startBottom, cart3Scratch3);\n\n  Cartesian3.cross(forward, up, result);\n  return Cartesian3.normalize(result, result);\n}\n\nconst interpolatedCartographicScratch = new Cartographic();\nconst interpolatedBottomScratch = new Cartesian3();\nconst interpolatedTopScratch = new Cartesian3();\nconst interpolatedNormalScratch = new Cartesian3();\nfunction interpolateSegment(\n  start,\n  end,\n  minHeight,\n  maxHeight,\n  granularity,\n  arcType,\n  ellipsoid,\n  normalsArray,\n  bottomPositionsArray,\n  topPositionsArray,\n  cartographicsArray,\n) {\n  if (granularity === 0.0) {\n    return;\n  }\n\n  let ellipsoidLine;\n  if (arcType === ArcType.GEODESIC) {\n    ellipsoidLine = new EllipsoidGeodesic(start, end, ellipsoid);\n  } else if (arcType === ArcType.RHUMB) {\n    ellipsoidLine = new EllipsoidRhumbLine(start, end, ellipsoid);\n  }\n\n  const surfaceDistance = ellipsoidLine.surfaceDistance;\n  if (surfaceDistance < granularity) {\n    return;\n  }\n\n  // Compute rightwards normal applicable at all interpolated points\n  const interpolatedNormal = computeRightNormal(\n    start,\n    end,\n    maxHeight,\n    ellipsoid,\n    interpolatedNormalScratch,\n  );\n\n  const segments = Math.ceil(surfaceDistance / granularity);\n  const interpointDistance = surfaceDistance / segments;\n  let distanceFromStart = interpointDistance;\n  const pointsToAdd = segments - 1;\n  let packIndex = normalsArray.length;\n  for (let i = 0; i < pointsToAdd; i++) {\n    const interpolatedCartographic =\n      ellipsoidLine.interpolateUsingSurfaceDistance(\n        distanceFromStart,\n        interpolatedCartographicScratch,\n      );\n    const interpolatedBottom = getPosition(\n      ellipsoid,\n      interpolatedCartographic,\n      minHeight,\n      interpolatedBottomScratch,\n    );\n    const interpolatedTop = getPosition(\n      ellipsoid,\n      interpolatedCartographic,\n      maxHeight,\n      interpolatedTopScratch,\n    );\n\n    Cartesian3.pack(interpolatedNormal, normalsArray, packIndex);\n    Cartesian3.pack(interpolatedBottom, bottomPositionsArray, packIndex);\n    Cartesian3.pack(interpolatedTop, topPositionsArray, packIndex);\n    cartographicsArray.push(interpolatedCartographic.latitude);\n    cartographicsArray.push(interpolatedCartographic.longitude);\n\n    packIndex += 3;\n    distanceFromStart += interpointDistance;\n  }\n}\n\nconst heightlessCartographicScratch = new Cartographic();\nfunction getPosition(ellipsoid, cartographic, height, result) {\n  Cartographic.clone(cartographic, heightlessCartographicScratch);\n  heightlessCartographicScratch.height = height;\n  return Cartographic.toCartesian(\n    heightlessCartographicScratch,\n    ellipsoid,\n    result,\n  );\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolygonGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nGroundPolylineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  let index = startingIndex ?? 0;\n\n  const positions = value._positions;\n  const positionsLength = positions.length;\n\n  array[index++] = positionsLength;\n\n  for (let i = 0; i < positionsLength; ++i) {\n    const cartesian = positions[i];\n    Cartesian3.pack(cartesian, array, index);\n    index += 3;\n  }\n\n  array[index++] = value.granularity;\n  array[index++] = value.loop ? 1.0 : 0.0;\n  array[index++] = value.arcType;\n\n  Ellipsoid.pack(value._ellipsoid, array, index);\n  index += Ellipsoid.packedLength;\n\n  array[index++] = value._projectionIndex;\n  array[index++] = value._scene3DOnly ? 1.0 : 0.0;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolygonGeometry} [result] The object into which to store the result.\n */\nGroundPolylineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  let index = startingIndex ?? 0;\n  const positionsLength = array[index++];\n  const positions = new Array(positionsLength);\n\n  for (let i = 0; i < positionsLength; i++) {\n    positions[i] = Cartesian3.unpack(array, index);\n    index += 3;\n  }\n\n  const granularity = array[index++];\n  const loop = array[index++] === 1.0;\n  const arcType = array[index++];\n\n  const ellipsoid = Ellipsoid.unpack(array, index);\n  index += Ellipsoid.packedLength;\n\n  const projectionIndex = array[index++];\n  const scene3DOnly = array[index++] === 1.0;\n\n  if (!defined(result)) {\n    result = new GroundPolylineGeometry({\n      positions: positions,\n    });\n  }\n\n  result._positions = positions;\n  result.granularity = granularity;\n  result.loop = loop;\n  result.arcType = arcType;\n  result._ellipsoid = ellipsoid;\n  result._projectionIndex = projectionIndex;\n  result._scene3DOnly = scene3DOnly;\n\n  return result;\n};\n\nfunction direction(target, origin, result) {\n  Cartesian3.subtract(target, origin, result);\n  Cartesian3.normalize(result, result);\n  return result;\n}\n\nfunction tangentDirection(target, origin, up, result) {\n  result = direction(target, origin, result);\n\n  // orthogonalize\n  result = Cartesian3.cross(result, up, result);\n  result = Cartesian3.normalize(result, result);\n  result = Cartesian3.cross(up, result, result);\n  return result;\n}\n\nconst toPreviousScratch = new Cartesian3();\nconst toNextScratch = new Cartesian3();\nconst forwardScratch = new Cartesian3();\nconst vertexUpScratch = new Cartesian3();\nconst cosine90 = 0.0;\nconst cosine180 = -1.0;\nfunction computeVertexMiterNormal(\n  previousBottom,\n  vertexBottom,\n  vertexTop,\n  nextBottom,\n  result,\n) {\n  const up = direction(vertexTop, vertexBottom, vertexUpScratch);\n\n  // Compute vectors pointing towards neighboring points but tangent to this point on the ellipsoid\n  const toPrevious = tangentDirection(\n    previousBottom,\n    vertexBottom,\n    up,\n    toPreviousScratch,\n  );\n  const toNext = tangentDirection(nextBottom, vertexBottom, up, toNextScratch);\n\n  // Check if tangents are almost opposite - if so, no need to miter.\n  if (\n    CesiumMath.equalsEpsilon(\n      Cartesian3.dot(toPrevious, toNext),\n      cosine180,\n      CesiumMath.EPSILON5,\n    )\n  ) {\n    result = Cartesian3.cross(up, toPrevious, result);\n    result = Cartesian3.normalize(result, result);\n    return result;\n  }\n\n  // Average directions to previous and to next in the plane of Up\n  result = Cartesian3.add(toNext, toPrevious, result);\n  result = Cartesian3.normalize(result, result);\n\n  // Flip the normal if it isn't pointing roughly bound right (aka if forward is pointing more \"backwards\")\n  const forward = Cartesian3.cross(up, result, forwardScratch);\n  if (Cartesian3.dot(toNext, forward) < cosine90) {\n    result = Cartesian3.negate(result, result);\n  }\n\n  return result;\n}\n\nconst XZ_PLANE = Plane.fromPointNormal(Cartesian3.ZERO, Cartesian3.UNIT_Y);\n\nconst previousBottomScratch = new Cartesian3();\nconst vertexBottomScratch = new Cartesian3();\nconst vertexTopScratch = new Cartesian3();\nconst nextBottomScratch = new Cartesian3();\nconst vertexNormalScratch = new Cartesian3();\nconst intersectionScratch = new Cartesian3();\nconst cartographicScratch0 = new Cartographic();\nconst cartographicScratch1 = new Cartographic();\nconst cartographicIntersectionScratch = new Cartographic();\n/**\n * Computes shadow volumes for the ground polyline, consisting of its vertices, indices, and a bounding sphere.\n * Vertices are \"fat,\" packing all the data needed in each volume to describe a line on terrain or 3D Tiles.\n * Should not be called independent of {@link GroundPolylinePrimitive}.\n *\n * @param {GroundPolylineGeometry} groundPolylineGeometry\n * @private\n */\nGroundPolylineGeometry.createGeometry = function (groundPolylineGeometry) {\n  const compute2dAttributes = !groundPolylineGeometry._scene3DOnly;\n  let loop = groundPolylineGeometry.loop;\n  const ellipsoid = groundPolylineGeometry._ellipsoid;\n  const granularity = groundPolylineGeometry.granularity;\n  const arcType = groundPolylineGeometry.arcType;\n  const projection = new PROJECTIONS[groundPolylineGeometry._projectionIndex](\n    ellipsoid,\n  );\n\n  const minHeight = WALL_INITIAL_MIN_HEIGHT;\n  const maxHeight = WALL_INITIAL_MAX_HEIGHT;\n\n  let index;\n  let i;\n\n  const positions = groundPolylineGeometry._positions;\n  const positionsLength = positions.length;\n\n  if (positionsLength === 2) {\n    loop = false;\n  }\n\n  // Split positions across the IDL and the Prime Meridian as well.\n  // Split across prime meridian because very large geometries crossing the Prime Meridian but not the IDL\n  // may get split by the plane of IDL + Prime Meridian.\n  let p0;\n  let p1;\n  let c0;\n  let c1;\n  const rhumbLine = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n  let intersection;\n  let intersectionCartographic;\n  let intersectionLongitude;\n  const splitPositions = [positions[0]];\n  for (i = 0; i < positionsLength - 1; i++) {\n    p0 = positions[i];\n    p1 = positions[i + 1];\n    intersection = IntersectionTests.lineSegmentPlane(\n      p0,\n      p1,\n      XZ_PLANE,\n      intersectionScratch,\n    );\n    if (\n      defined(intersection) &&\n      !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n      !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n    ) {\n      if (groundPolylineGeometry.arcType === ArcType.GEODESIC) {\n        splitPositions.push(Cartesian3.clone(intersection));\n      } else if (groundPolylineGeometry.arcType === ArcType.RHUMB) {\n        intersectionLongitude = ellipsoid.cartesianToCartographic(\n          intersection,\n          cartographicScratch0,\n        ).longitude;\n        c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0);\n        c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1);\n        rhumbLine.setEndPoints(c0, c1);\n        intersectionCartographic = rhumbLine.findIntersectionWithLongitude(\n          intersectionLongitude,\n          cartographicIntersectionScratch,\n        );\n        intersection = ellipsoid.cartographicToCartesian(\n          intersectionCartographic,\n          intersectionScratch,\n        );\n        if (\n          defined(intersection) &&\n          !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n          !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n        ) {\n          splitPositions.push(Cartesian3.clone(intersection));\n        }\n      }\n    }\n    splitPositions.push(p1);\n  }\n\n  if (loop) {\n    p0 = positions[positionsLength - 1];\n    p1 = positions[0];\n    intersection = IntersectionTests.lineSegmentPlane(\n      p0,\n      p1,\n      XZ_PLANE,\n      intersectionScratch,\n    );\n    if (\n      defined(intersection) &&\n      !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n      !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n    ) {\n      if (groundPolylineGeometry.arcType === ArcType.GEODESIC) {\n        splitPositions.push(Cartesian3.clone(intersection));\n      } else if (groundPolylineGeometry.arcType === ArcType.RHUMB) {\n        intersectionLongitude = ellipsoid.cartesianToCartographic(\n          intersection,\n          cartographicScratch0,\n        ).longitude;\n        c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0);\n        c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1);\n        rhumbLine.setEndPoints(c0, c1);\n        intersectionCartographic = rhumbLine.findIntersectionWithLongitude(\n          intersectionLongitude,\n          cartographicIntersectionScratch,\n        );\n        intersection = ellipsoid.cartographicToCartesian(\n          intersectionCartographic,\n          intersectionScratch,\n        );\n        if (\n          defined(intersection) &&\n          !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\n          !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\n        ) {\n          splitPositions.push(Cartesian3.clone(intersection));\n        }\n      }\n    }\n  }\n  let cartographicsLength = splitPositions.length;\n\n  let cartographics = new Array(cartographicsLength);\n  for (i = 0; i < cartographicsLength; i++) {\n    const cartographic = Cartographic.fromCartesian(\n      splitPositions[i],\n      ellipsoid,\n    );\n    cartographic.height = 0.0;\n    cartographics[i] = cartographic;\n  }\n\n  cartographics = arrayRemoveDuplicates(\n    cartographics,\n    Cartographic.equalsEpsilon,\n  );\n  cartographicsLength = cartographics.length;\n\n  if (cartographicsLength < 2) {\n    return undefined;\n  }\n\n  /**** Build heap-side arrays for positions, interpolated cartographics, and normals from which to compute vertices ****/\n  // We build a \"wall\" and then decompose it into separately connected component \"volumes\" because we need a lot\n  // of information about the wall. Also, this simplifies interpolation.\n  // Convention: \"next\" and \"end\" are locally forward to each segment of the wall,\n  // and we are computing normals pointing towards the local right side of the vertices in each segment.\n  const cartographicsArray = [];\n  const normalsArray = [];\n  const bottomPositionsArray = [];\n  const topPositionsArray = [];\n\n  let previousBottom = previousBottomScratch;\n  let vertexBottom = vertexBottomScratch;\n  let vertexTop = vertexTopScratch;\n  let nextBottom = nextBottomScratch;\n  let vertexNormal = vertexNormalScratch;\n\n  // First point - either loop or attach a \"perpendicular\" normal\n  const startCartographic = cartographics[0];\n  const nextCartographic = cartographics[1];\n\n  const prestartCartographic = cartographics[cartographicsLength - 1];\n  previousBottom = getPosition(\n    ellipsoid,\n    prestartCartographic,\n    minHeight,\n    previousBottom,\n  );\n  nextBottom = getPosition(ellipsoid, nextCartographic, minHeight, nextBottom);\n  vertexBottom = getPosition(\n    ellipsoid,\n    startCartographic,\n    minHeight,\n    vertexBottom,\n  );\n  vertexTop = getPosition(ellipsoid, startCartographic, maxHeight, vertexTop);\n\n  if (loop) {\n    vertexNormal = computeVertexMiterNormal(\n      previousBottom,\n      vertexBottom,\n      vertexTop,\n      nextBottom,\n      vertexNormal,\n    );\n  } else {\n    vertexNormal = computeRightNormal(\n      startCartographic,\n      nextCartographic,\n      maxHeight,\n      ellipsoid,\n      vertexNormal,\n    );\n  }\n\n  Cartesian3.pack(vertexNormal, normalsArray, 0);\n  Cartesian3.pack(vertexBottom, bottomPositionsArray, 0);\n  Cartesian3.pack(vertexTop, topPositionsArray, 0);\n  cartographicsArray.push(startCartographic.latitude);\n  cartographicsArray.push(startCartographic.longitude);\n\n  interpolateSegment(\n    startCartographic,\n    nextCartographic,\n    minHeight,\n    maxHeight,\n    granularity,\n    arcType,\n    ellipsoid,\n    normalsArray,\n    bottomPositionsArray,\n    topPositionsArray,\n    cartographicsArray,\n  );\n\n  // All inbetween points\n  for (i = 1; i < cartographicsLength - 1; ++i) {\n    previousBottom = Cartesian3.clone(vertexBottom, previousBottom);\n    vertexBottom = Cartesian3.clone(nextBottom, vertexBottom);\n    const vertexCartographic = cartographics[i];\n    getPosition(ellipsoid, vertexCartographic, maxHeight, vertexTop);\n    getPosition(ellipsoid, cartographics[i + 1], minHeight, nextBottom);\n\n    computeVertexMiterNormal(\n      previousBottom,\n      vertexBottom,\n      vertexTop,\n      nextBottom,\n      vertexNormal,\n    );\n\n    index = normalsArray.length;\n    Cartesian3.pack(vertexNormal, normalsArray, index);\n    Cartesian3.pack(vertexBottom, bottomPositionsArray, index);\n    Cartesian3.pack(vertexTop, topPositionsArray, index);\n    cartographicsArray.push(vertexCartographic.latitude);\n    cartographicsArray.push(vertexCartographic.longitude);\n\n    interpolateSegment(\n      cartographics[i],\n      cartographics[i + 1],\n      minHeight,\n      maxHeight,\n      granularity,\n      arcType,\n      ellipsoid,\n      normalsArray,\n      bottomPositionsArray,\n      topPositionsArray,\n      cartographicsArray,\n    );\n  }\n\n  // Last point - either loop or attach a normal \"perpendicular\" to the wall.\n  const endCartographic = cartographics[cartographicsLength - 1];\n  const preEndCartographic = cartographics[cartographicsLength - 2];\n\n  vertexBottom = getPosition(\n    ellipsoid,\n    endCartographic,\n    minHeight,\n    vertexBottom,\n  );\n  vertexTop = getPosition(ellipsoid, endCartographic, maxHeight, vertexTop);\n\n  if (loop) {\n    const postEndCartographic = cartographics[0];\n    previousBottom = getPosition(\n      ellipsoid,\n      preEndCartographic,\n      minHeight,\n      previousBottom,\n    );\n    nextBottom = getPosition(\n      ellipsoid,\n      postEndCartographic,\n      minHeight,\n      nextBottom,\n    );\n\n    vertexNormal = computeVertexMiterNormal(\n      previousBottom,\n      vertexBottom,\n      vertexTop,\n      nextBottom,\n      vertexNormal,\n    );\n  } else {\n    vertexNormal = computeRightNormal(\n      preEndCartographic,\n      endCartographic,\n      maxHeight,\n      ellipsoid,\n      vertexNormal,\n    );\n  }\n\n  index = normalsArray.length;\n  Cartesian3.pack(vertexNormal, normalsArray, index);\n  Cartesian3.pack(vertexBottom, bottomPositionsArray, index);\n  Cartesian3.pack(vertexTop, topPositionsArray, index);\n  cartographicsArray.push(endCartographic.latitude);\n  cartographicsArray.push(endCartographic.longitude);\n\n  if (loop) {\n    interpolateSegment(\n      endCartographic,\n      startCartographic,\n      minHeight,\n      maxHeight,\n      granularity,\n      arcType,\n      ellipsoid,\n      normalsArray,\n      bottomPositionsArray,\n      topPositionsArray,\n      cartographicsArray,\n    );\n    index = normalsArray.length;\n    for (i = 0; i < 3; ++i) {\n      normalsArray[index + i] = normalsArray[i];\n      bottomPositionsArray[index + i] = bottomPositionsArray[i];\n      topPositionsArray[index + i] = topPositionsArray[i];\n    }\n    cartographicsArray.push(startCartographic.latitude);\n    cartographicsArray.push(startCartographic.longitude);\n  }\n\n  return generateGeometryAttributes(\n    loop,\n    projection,\n    bottomPositionsArray,\n    topPositionsArray,\n    normalsArray,\n    cartographicsArray,\n    compute2dAttributes,\n  );\n};\n\n// If the end normal angle is too steep compared to the direction of the line segment,\n// \"break\" the miter by rotating the normal 90 degrees around the \"up\" direction at the point\n// For ultra precision we would want to project into a plane, but in practice this is sufficient.\nconst lineDirectionScratch = new Cartesian3();\nconst matrix3Scratch = new Matrix3();\nconst quaternionScratch = new Quaternion();\nfunction breakMiter(endGeometryNormal, startBottom, endBottom, endTop) {\n  const lineDirection = direction(endBottom, startBottom, lineDirectionScratch);\n\n  const dot = Cartesian3.dot(lineDirection, endGeometryNormal);\n  if (dot > MITER_BREAK_SMALL || dot < MITER_BREAK_LARGE) {\n    const vertexUp = direction(endTop, endBottom, vertexUpScratch);\n    const angle =\n      dot < MITER_BREAK_LARGE\n        ? CesiumMath.PI_OVER_TWO\n        : -CesiumMath.PI_OVER_TWO;\n    const quaternion = Quaternion.fromAxisAngle(\n      vertexUp,\n      angle,\n      quaternionScratch,\n    );\n    const rotationMatrix = Matrix3.fromQuaternion(quaternion, matrix3Scratch);\n    Matrix3.multiplyByVector(\n      rotationMatrix,\n      endGeometryNormal,\n      endGeometryNormal,\n    );\n    return true;\n  }\n  return false;\n}\n\nconst endPosCartographicScratch = new Cartographic();\nconst normalStartpointScratch = new Cartesian3();\nconst normalEndpointScratch = new Cartesian3();\nfunction projectNormal(\n  projection,\n  cartographic,\n  normal,\n  projectedPosition,\n  result,\n) {\n  const position = Cartographic.toCartesian(\n    cartographic,\n    projection._ellipsoid,\n    normalStartpointScratch,\n  );\n  let normalEndpoint = Cartesian3.add(position, normal, normalEndpointScratch);\n  let flipNormal = false;\n\n  const ellipsoid = projection._ellipsoid;\n  let normalEndpointCartographic = ellipsoid.cartesianToCartographic(\n    normalEndpoint,\n    endPosCartographicScratch,\n  );\n  // If normal crosses the IDL, go the other way and flip the result.\n  // In practice this almost never happens because the cartographic start\n  // and end points of each segment are \"nudged\" to be on the same side\n  // of the IDL and slightly away from the IDL.\n  if (\n    Math.abs(cartographic.longitude - normalEndpointCartographic.longitude) >\n    CesiumMath.PI_OVER_TWO\n  ) {\n    flipNormal = true;\n    normalEndpoint = Cartesian3.subtract(\n      position,\n      normal,\n      normalEndpointScratch,\n    );\n    normalEndpointCartographic = ellipsoid.cartesianToCartographic(\n      normalEndpoint,\n      endPosCartographicScratch,\n    );\n  }\n\n  normalEndpointCartographic.height = 0.0;\n  const normalEndpointProjected = projection.project(\n    normalEndpointCartographic,\n    result,\n  );\n  result = Cartesian3.subtract(\n    normalEndpointProjected,\n    projectedPosition,\n    result,\n  );\n  result.z = 0.0;\n  result = Cartesian3.normalize(result, result);\n  if (flipNormal) {\n    Cartesian3.negate(result, result);\n  }\n  return result;\n}\n\nconst adjustHeightNormalScratch = new Cartesian3();\nconst adjustHeightOffsetScratch = new Cartesian3();\nfunction adjustHeights(\n  bottom,\n  top,\n  minHeight,\n  maxHeight,\n  adjustHeightBottom,\n  adjustHeightTop,\n) {\n  // bottom and top should be at WALL_INITIAL_MIN_HEIGHT and WALL_INITIAL_MAX_HEIGHT, respectively\n  const adjustHeightNormal = Cartesian3.subtract(\n    top,\n    bottom,\n    adjustHeightNormalScratch,\n  );\n  Cartesian3.normalize(adjustHeightNormal, adjustHeightNormal);\n\n  const distanceForBottom = minHeight - WALL_INITIAL_MIN_HEIGHT;\n  let adjustHeightOffset = Cartesian3.multiplyByScalar(\n    adjustHeightNormal,\n    distanceForBottom,\n    adjustHeightOffsetScratch,\n  );\n  Cartesian3.add(bottom, adjustHeightOffset, adjustHeightBottom);\n\n  const distanceForTop = maxHeight - WALL_INITIAL_MAX_HEIGHT;\n  adjustHeightOffset = Cartesian3.multiplyByScalar(\n    adjustHeightNormal,\n    distanceForTop,\n    adjustHeightOffsetScratch,\n  );\n  Cartesian3.add(top, adjustHeightOffset, adjustHeightTop);\n}\n\nconst nudgeDirectionScratch = new Cartesian3();\nfunction nudgeXZ(start, end) {\n  const startToXZdistance = Plane.getPointDistance(XZ_PLANE, start);\n  const endToXZdistance = Plane.getPointDistance(XZ_PLANE, end);\n  let offset = nudgeDirectionScratch;\n  // Larger epsilon than what's used in GeometryPipeline, a centimeter in world space\n  if (CesiumMath.equalsEpsilon(startToXZdistance, 0.0, CesiumMath.EPSILON2)) {\n    offset = direction(end, start, offset);\n    Cartesian3.multiplyByScalar(offset, CesiumMath.EPSILON2, offset);\n    Cartesian3.add(start, offset, start);\n  } else if (\n    CesiumMath.equalsEpsilon(endToXZdistance, 0.0, CesiumMath.EPSILON2)\n  ) {\n    offset = direction(start, end, offset);\n    Cartesian3.multiplyByScalar(offset, CesiumMath.EPSILON2, offset);\n    Cartesian3.add(end, offset, end);\n  }\n}\n\n// \"Nudge\" cartographic coordinates so start and end are on the same side of the IDL.\n// Nudge amounts are tiny, basically just an IDL flip.\n// Only used for 2D/CV.\nfunction nudgeCartographic(start, end) {\n  const absStartLon = Math.abs(start.longitude);\n  const absEndLon = Math.abs(end.longitude);\n  if (\n    CesiumMath.equalsEpsilon(absStartLon, CesiumMath.PI, CesiumMath.EPSILON11)\n  ) {\n    const endSign = CesiumMath.sign(end.longitude);\n    start.longitude = endSign * (absStartLon - CesiumMath.EPSILON11);\n    return 1;\n  } else if (\n    CesiumMath.equalsEpsilon(absEndLon, CesiumMath.PI, CesiumMath.EPSILON11)\n  ) {\n    const startSign = CesiumMath.sign(start.longitude);\n    end.longitude = startSign * (absEndLon - CesiumMath.EPSILON11);\n    return 2;\n  }\n  return 0;\n}\n\nconst startCartographicScratch = new Cartographic();\nconst endCartographicScratch = new Cartographic();\n\nconst segmentStartTopScratch = new Cartesian3();\nconst segmentEndTopScratch = new Cartesian3();\nconst segmentStartBottomScratch = new Cartesian3();\nconst segmentEndBottomScratch = new Cartesian3();\nconst segmentStartNormalScratch = new Cartesian3();\nconst segmentEndNormalScratch = new Cartesian3();\n\nconst getHeightCartographics = [\n  startCartographicScratch,\n  endCartographicScratch,\n];\nconst getHeightRectangleScratch = new Rectangle();\n\nconst adjustHeightStartTopScratch = new Cartesian3();\nconst adjustHeightEndTopScratch = new Cartesian3();\nconst adjustHeightStartBottomScratch = new Cartesian3();\nconst adjustHeightEndBottomScratch = new Cartesian3();\n\nconst segmentStart2DScratch = new Cartesian3();\nconst segmentEnd2DScratch = new Cartesian3();\nconst segmentStartNormal2DScratch = new Cartesian3();\nconst segmentEndNormal2DScratch = new Cartesian3();\n\nconst offsetScratch = new Cartesian3();\nconst startUpScratch = new Cartesian3();\nconst endUpScratch = new Cartesian3();\nconst rightScratch = new Cartesian3();\nconst startPlaneNormalScratch = new Cartesian3();\nconst endPlaneNormalScratch = new Cartesian3();\nconst encodeScratch = new EncodedCartesian3();\n\nconst encodeScratch2D = new EncodedCartesian3();\nconst forwardOffset2DScratch = new Cartesian3();\nconst right2DScratch = new Cartesian3();\n\nconst normalNudgeScratch = new Cartesian3();\n\nconst scratchBoundingSpheres = [new BoundingSphere(), new BoundingSphere()];\n\n// Winding order is reversed so each segment's volume is inside-out\nconst REFERENCE_INDICES = [\n  0,\n  2,\n  1,\n  0,\n  3,\n  2, // right\n  0,\n  7,\n  3,\n  0,\n  4,\n  7, // start\n  0,\n  5,\n  4,\n  0,\n  1,\n  5, // bottom\n  5,\n  7,\n  4,\n  5,\n  6,\n  7, // left\n  5,\n  2,\n  6,\n  5,\n  1,\n  2, // end\n  3,\n  6,\n  2,\n  3,\n  7,\n  6, // top\n];\nconst REFERENCE_INDICES_LENGTH = REFERENCE_INDICES.length;\n\n// Decompose the \"wall\" into a series of shadow volumes.\n// Each shadow volume's vertices encode a description of the line it contains,\n// including mitering planes at the end points, a plane along the line itself,\n// and attributes for computing length-wise texture coordinates.\nfunction generateGeometryAttributes(\n  loop,\n  projection,\n  bottomPositionsArray,\n  topPositionsArray,\n  normalsArray,\n  cartographicsArray,\n  compute2dAttributes,\n) {\n  let i;\n  let index;\n  const ellipsoid = projection._ellipsoid;\n\n  // Each segment will have 8 vertices\n  const segmentCount = bottomPositionsArray.length / 3 - 1;\n  const vertexCount = segmentCount * 8;\n  const arraySizeVec4 = vertexCount * 4;\n  const indexCount = segmentCount * 36;\n\n  const indices =\n    vertexCount > 65535\n      ? new Uint32Array(indexCount)\n      : new Uint16Array(indexCount);\n  const positionsArray = new Float64Array(vertexCount * 3);\n\n  const startHiAndForwardOffsetX = new Float32Array(arraySizeVec4);\n  const startLoAndForwardOffsetY = new Float32Array(arraySizeVec4);\n  const startNormalAndForwardOffsetZ = new Float32Array(arraySizeVec4);\n  const endNormalAndTextureCoordinateNormalizationX = new Float32Array(\n    arraySizeVec4,\n  );\n  const rightNormalAndTextureCoordinateNormalizationY = new Float32Array(\n    arraySizeVec4,\n  );\n\n  let startHiLo2D;\n  let offsetAndRight2D;\n  let startEndNormals2D;\n  let texcoordNormalization2D;\n\n  if (compute2dAttributes) {\n    startHiLo2D = new Float32Array(arraySizeVec4);\n    offsetAndRight2D = new Float32Array(arraySizeVec4);\n    startEndNormals2D = new Float32Array(arraySizeVec4);\n    texcoordNormalization2D = new Float32Array(vertexCount * 2);\n  }\n\n  /*** Compute total lengths for texture coordinate normalization ***/\n  // 2D\n  const cartographicsLength = cartographicsArray.length / 2;\n  let length2D = 0.0;\n\n  const startCartographic = startCartographicScratch;\n  startCartographic.height = 0.0;\n  const endCartographic = endCartographicScratch;\n  endCartographic.height = 0.0;\n\n  let segmentStartCartesian = segmentStartTopScratch;\n  let segmentEndCartesian = segmentEndTopScratch;\n\n  if (compute2dAttributes) {\n    index = 0;\n    for (i = 1; i < cartographicsLength; i++) {\n      // Don't clone anything from previous segment b/c possible IDL touch\n      startCartographic.latitude = cartographicsArray[index];\n      startCartographic.longitude = cartographicsArray[index + 1];\n      endCartographic.latitude = cartographicsArray[index + 2];\n      endCartographic.longitude = cartographicsArray[index + 3];\n\n      segmentStartCartesian = projection.project(\n        startCartographic,\n        segmentStartCartesian,\n      );\n      segmentEndCartesian = projection.project(\n        endCartographic,\n        segmentEndCartesian,\n      );\n      length2D += Cartesian3.distance(\n        segmentStartCartesian,\n        segmentEndCartesian,\n      );\n      index += 2;\n    }\n  }\n\n  // 3D\n  const positionsLength = topPositionsArray.length / 3;\n  segmentEndCartesian = Cartesian3.unpack(\n    topPositionsArray,\n    0,\n    segmentEndCartesian,\n  );\n  let length3D = 0.0;\n\n  index = 3;\n  for (i = 1; i < positionsLength; i++) {\n    segmentStartCartesian = Cartesian3.clone(\n      segmentEndCartesian,\n      segmentStartCartesian,\n    );\n    segmentEndCartesian = Cartesian3.unpack(\n      topPositionsArray,\n      index,\n      segmentEndCartesian,\n    );\n    length3D += Cartesian3.distance(segmentStartCartesian, segmentEndCartesian);\n    index += 3;\n  }\n\n  /*** Generate segments ***/\n  let j;\n  index = 3;\n  let cartographicsIndex = 0;\n  let vec2sWriteIndex = 0;\n  let vec3sWriteIndex = 0;\n  let vec4sWriteIndex = 0;\n  let miterBroken = false;\n\n  let endBottom = Cartesian3.unpack(\n    bottomPositionsArray,\n    0,\n    segmentEndBottomScratch,\n  );\n  let endTop = Cartesian3.unpack(topPositionsArray, 0, segmentEndTopScratch);\n  let endGeometryNormal = Cartesian3.unpack(\n    normalsArray,\n    0,\n    segmentEndNormalScratch,\n  );\n\n  if (loop) {\n    const preEndBottom = Cartesian3.unpack(\n      bottomPositionsArray,\n      bottomPositionsArray.length - 6,\n      segmentStartBottomScratch,\n    );\n    if (breakMiter(endGeometryNormal, preEndBottom, endBottom, endTop)) {\n      // Miter broken as if for the last point in the loop, needs to be inverted for first point (clone of endBottom)\n      endGeometryNormal = Cartesian3.negate(\n        endGeometryNormal,\n        endGeometryNormal,\n      );\n    }\n  }\n\n  let lengthSoFar3D = 0.0;\n  let lengthSoFar2D = 0.0;\n\n  // For translating bounding volume\n  let sumHeights = 0.0;\n\n  for (i = 0; i < segmentCount; i++) {\n    const startBottom = Cartesian3.clone(endBottom, segmentStartBottomScratch);\n    const startTop = Cartesian3.clone(endTop, segmentStartTopScratch);\n    let startGeometryNormal = Cartesian3.clone(\n      endGeometryNormal,\n      segmentStartNormalScratch,\n    );\n\n    if (miterBroken) {\n      startGeometryNormal = Cartesian3.negate(\n        startGeometryNormal,\n        startGeometryNormal,\n      );\n    }\n\n    endBottom = Cartesian3.unpack(\n      bottomPositionsArray,\n      index,\n      segmentEndBottomScratch,\n    );\n    endTop = Cartesian3.unpack(topPositionsArray, index, segmentEndTopScratch);\n    endGeometryNormal = Cartesian3.unpack(\n      normalsArray,\n      index,\n      segmentEndNormalScratch,\n    );\n\n    miterBroken = breakMiter(endGeometryNormal, startBottom, endBottom, endTop);\n\n    // 2D - don't clone anything from previous segment b/c possible IDL touch\n    startCartographic.latitude = cartographicsArray[cartographicsIndex];\n    startCartographic.longitude = cartographicsArray[cartographicsIndex + 1];\n    endCartographic.latitude = cartographicsArray[cartographicsIndex + 2];\n    endCartographic.longitude = cartographicsArray[cartographicsIndex + 3];\n    let start2D;\n    let end2D;\n    let startGeometryNormal2D;\n    let endGeometryNormal2D;\n\n    if (compute2dAttributes) {\n      const nudgeResult = nudgeCartographic(startCartographic, endCartographic);\n      start2D = projection.project(startCartographic, segmentStart2DScratch);\n      end2D = projection.project(endCartographic, segmentEnd2DScratch);\n      const direction2D = direction(end2D, start2D, forwardOffset2DScratch);\n      direction2D.y = Math.abs(direction2D.y);\n\n      startGeometryNormal2D = segmentStartNormal2DScratch;\n      endGeometryNormal2D = segmentEndNormal2DScratch;\n      if (\n        nudgeResult === 0 ||\n        Cartesian3.dot(direction2D, Cartesian3.UNIT_Y) > MITER_BREAK_SMALL\n      ) {\n        // No nudge - project the original normal\n        // Or, if the line's angle relative to the IDL is very acute,\n        // in which case snapping will produce oddly shaped volumes.\n        startGeometryNormal2D = projectNormal(\n          projection,\n          startCartographic,\n          startGeometryNormal,\n          start2D,\n          segmentStartNormal2DScratch,\n        );\n        endGeometryNormal2D = projectNormal(\n          projection,\n          endCartographic,\n          endGeometryNormal,\n          end2D,\n          segmentEndNormal2DScratch,\n        );\n      } else if (nudgeResult === 1) {\n        // Start is close to IDL - snap start normal to align with IDL\n        endGeometryNormal2D = projectNormal(\n          projection,\n          endCartographic,\n          endGeometryNormal,\n          end2D,\n          segmentEndNormal2DScratch,\n        );\n        startGeometryNormal2D.x = 0.0;\n        // If start longitude is negative and end longitude is less negative, relative right is unit -Y\n        // If start longitude is positive and end longitude is less positive, relative right is unit +Y\n        startGeometryNormal2D.y = CesiumMath.sign(\n          startCartographic.longitude - Math.abs(endCartographic.longitude),\n        );\n        startGeometryNormal2D.z = 0.0;\n      } else {\n        // End is close to IDL - snap end normal to align with IDL\n        startGeometryNormal2D = projectNormal(\n          projection,\n          startCartographic,\n          startGeometryNormal,\n          start2D,\n          segmentStartNormal2DScratch,\n        );\n        endGeometryNormal2D.x = 0.0;\n        // If end longitude is negative and start longitude is less negative, relative right is unit Y\n        // If end longitude is positive and start longitude is less positive, relative right is unit -Y\n        endGeometryNormal2D.y = CesiumMath.sign(\n          startCartographic.longitude - endCartographic.longitude,\n        );\n        endGeometryNormal2D.z = 0.0;\n      }\n    }\n\n    /****************************************\n     * Geometry descriptors of a \"line on terrain,\"\n     * as opposed to the \"shadow volume used to draw\n     * the line on terrain\":\n     * - position of start + offset to end\n     * - start, end, and right-facing planes\n     * - encoded texture coordinate offsets\n     ****************************************/\n\n    /* 3D */\n    const segmentLength3D = Cartesian3.distance(startTop, endTop);\n\n    const encodedStart = EncodedCartesian3.fromCartesian(\n      startBottom,\n      encodeScratch,\n    );\n    const forwardOffset = Cartesian3.subtract(\n      endBottom,\n      startBottom,\n      offsetScratch,\n    );\n    const forward = Cartesian3.normalize(forwardOffset, rightScratch);\n\n    let startUp = Cartesian3.subtract(startTop, startBottom, startUpScratch);\n    startUp = Cartesian3.normalize(startUp, startUp);\n    let rightNormal = Cartesian3.cross(forward, startUp, rightScratch);\n    rightNormal = Cartesian3.normalize(rightNormal, rightNormal);\n\n    let startPlaneNormal = Cartesian3.cross(\n      startUp,\n      startGeometryNormal,\n      startPlaneNormalScratch,\n    );\n    startPlaneNormal = Cartesian3.normalize(startPlaneNormal, startPlaneNormal);\n\n    let endUp = Cartesian3.subtract(endTop, endBottom, endUpScratch);\n    endUp = Cartesian3.normalize(endUp, endUp);\n    let endPlaneNormal = Cartesian3.cross(\n      endGeometryNormal,\n      endUp,\n      endPlaneNormalScratch,\n    );\n    endPlaneNormal = Cartesian3.normalize(endPlaneNormal, endPlaneNormal);\n\n    const texcoordNormalization3DX = segmentLength3D / length3D;\n    const texcoordNormalization3DY = lengthSoFar3D / length3D;\n\n    /* 2D */\n    let segmentLength2D = 0.0;\n    let encodedStart2D;\n    let forwardOffset2D;\n    let right2D;\n    let texcoordNormalization2DX = 0.0;\n    let texcoordNormalization2DY = 0.0;\n    if (compute2dAttributes) {\n      segmentLength2D = Cartesian3.distance(start2D, end2D);\n\n      encodedStart2D = EncodedCartesian3.fromCartesian(\n        start2D,\n        encodeScratch2D,\n      );\n      forwardOffset2D = Cartesian3.subtract(\n        end2D,\n        start2D,\n        forwardOffset2DScratch,\n      );\n\n      // Right direction is just forward direction rotated by -90 degrees around Z\n      // Similarly with plane normals\n      right2D = Cartesian3.normalize(forwardOffset2D, right2DScratch);\n      const swap = right2D.x;\n      right2D.x = right2D.y;\n      right2D.y = -swap;\n\n      texcoordNormalization2DX = segmentLength2D / length2D;\n      texcoordNormalization2DY = lengthSoFar2D / length2D;\n    }\n    /** Pack **/\n    for (j = 0; j < 8; j++) {\n      const vec4Index = vec4sWriteIndex + j * 4;\n      const vec2Index = vec2sWriteIndex + j * 2;\n      const wIndex = vec4Index + 3;\n\n      // Encode sidedness of vertex relative to right plane in texture coordinate normalization X,\n      // whether vertex is top or bottom of volume in sign/magnitude of normalization Y.\n      const rightPlaneSide = j < 4 ? 1.0 : -1.0;\n      const topBottomSide =\n        j === 2 || j === 3 || j === 6 || j === 7 ? 1.0 : -1.0;\n\n      // 3D\n      Cartesian3.pack(encodedStart.high, startHiAndForwardOffsetX, vec4Index);\n      startHiAndForwardOffsetX[wIndex] = forwardOffset.x;\n\n      Cartesian3.pack(encodedStart.low, startLoAndForwardOffsetY, vec4Index);\n      startLoAndForwardOffsetY[wIndex] = forwardOffset.y;\n\n      Cartesian3.pack(\n        startPlaneNormal,\n        startNormalAndForwardOffsetZ,\n        vec4Index,\n      );\n      startNormalAndForwardOffsetZ[wIndex] = forwardOffset.z;\n\n      Cartesian3.pack(\n        endPlaneNormal,\n        endNormalAndTextureCoordinateNormalizationX,\n        vec4Index,\n      );\n      endNormalAndTextureCoordinateNormalizationX[wIndex] =\n        texcoordNormalization3DX * rightPlaneSide;\n\n      Cartesian3.pack(\n        rightNormal,\n        rightNormalAndTextureCoordinateNormalizationY,\n        vec4Index,\n      );\n\n      let texcoordNormalization = texcoordNormalization3DY * topBottomSide;\n      if (texcoordNormalization === 0.0 && topBottomSide < 0.0) {\n        texcoordNormalization = 9.0; // some value greater than 1.0\n      }\n      rightNormalAndTextureCoordinateNormalizationY[wIndex] =\n        texcoordNormalization;\n\n      // 2D\n      if (compute2dAttributes) {\n        startHiLo2D[vec4Index] = encodedStart2D.high.x;\n        startHiLo2D[vec4Index + 1] = encodedStart2D.high.y;\n        startHiLo2D[vec4Index + 2] = encodedStart2D.low.x;\n        startHiLo2D[vec4Index + 3] = encodedStart2D.low.y;\n\n        startEndNormals2D[vec4Index] = -startGeometryNormal2D.y;\n        startEndNormals2D[vec4Index + 1] = startGeometryNormal2D.x;\n        startEndNormals2D[vec4Index + 2] = endGeometryNormal2D.y;\n        startEndNormals2D[vec4Index + 3] = -endGeometryNormal2D.x;\n\n        offsetAndRight2D[vec4Index] = forwardOffset2D.x;\n        offsetAndRight2D[vec4Index + 1] = forwardOffset2D.y;\n        offsetAndRight2D[vec4Index + 2] = right2D.x;\n        offsetAndRight2D[vec4Index + 3] = right2D.y;\n\n        texcoordNormalization2D[vec2Index] =\n          texcoordNormalization2DX * rightPlaneSide;\n\n        texcoordNormalization = texcoordNormalization2DY * topBottomSide;\n        if (texcoordNormalization === 0.0 && topBottomSide < 0.0) {\n          texcoordNormalization = 9.0; // some value greater than 1.0\n        }\n        texcoordNormalization2D[vec2Index + 1] = texcoordNormalization;\n      }\n    }\n\n    // Adjust height of volume in 3D\n    const adjustHeightStartBottom = adjustHeightStartBottomScratch;\n    const adjustHeightEndBottom = adjustHeightEndBottomScratch;\n    const adjustHeightStartTop = adjustHeightStartTopScratch;\n    const adjustHeightEndTop = adjustHeightEndTopScratch;\n\n    const getHeightsRectangle = Rectangle.fromCartographicArray(\n      getHeightCartographics,\n      getHeightRectangleScratch,\n    );\n    const minMaxHeights = ApproximateTerrainHeights.getMinimumMaximumHeights(\n      getHeightsRectangle,\n      ellipsoid,\n    );\n    const minHeight = minMaxHeights.minimumTerrainHeight;\n    const maxHeight = minMaxHeights.maximumTerrainHeight;\n\n    // Sum using abs() to properly account for negative eleavtions in calculating bounding sphere radius\n    sumHeights += Math.abs(minHeight);\n    sumHeights += Math.abs(maxHeight);\n\n    adjustHeights(\n      startBottom,\n      startTop,\n      minHeight,\n      maxHeight,\n      adjustHeightStartBottom,\n      adjustHeightStartTop,\n    );\n    adjustHeights(\n      endBottom,\n      endTop,\n      minHeight,\n      maxHeight,\n      adjustHeightEndBottom,\n      adjustHeightEndTop,\n    );\n\n    // Nudge the positions away from the \"polyline\" a little bit to prevent errors in GeometryPipeline\n    let normalNudge = Cartesian3.multiplyByScalar(\n      rightNormal,\n      CesiumMath.EPSILON5,\n      normalNudgeScratch,\n    );\n    Cartesian3.add(\n      adjustHeightStartBottom,\n      normalNudge,\n      adjustHeightStartBottom,\n    );\n    Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom);\n    Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop);\n    Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop);\n\n    // If the segment is very close to the XZ plane, nudge the vertices slightly to avoid touching it.\n    nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom);\n    nudgeXZ(adjustHeightStartTop, adjustHeightEndTop);\n\n    Cartesian3.pack(adjustHeightStartBottom, positionsArray, vec3sWriteIndex);\n    Cartesian3.pack(adjustHeightEndBottom, positionsArray, vec3sWriteIndex + 3);\n    Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 6);\n    Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 9);\n\n    normalNudge = Cartesian3.multiplyByScalar(\n      rightNormal,\n      -2.0 * CesiumMath.EPSILON5,\n      normalNudgeScratch,\n    );\n    Cartesian3.add(\n      adjustHeightStartBottom,\n      normalNudge,\n      adjustHeightStartBottom,\n    );\n    Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom);\n    Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop);\n    Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop);\n\n    nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom);\n    nudgeXZ(adjustHeightStartTop, adjustHeightEndTop);\n\n    Cartesian3.pack(\n      adjustHeightStartBottom,\n      positionsArray,\n      vec3sWriteIndex + 12,\n    );\n    Cartesian3.pack(\n      adjustHeightEndBottom,\n      positionsArray,\n      vec3sWriteIndex + 15,\n    );\n    Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 18);\n    Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 21);\n\n    cartographicsIndex += 2;\n    index += 3;\n\n    vec2sWriteIndex += 16;\n    vec3sWriteIndex += 24;\n    vec4sWriteIndex += 32;\n\n    lengthSoFar3D += segmentLength3D;\n    lengthSoFar2D += segmentLength2D;\n  }\n\n  index = 0;\n  let indexOffset = 0;\n  for (i = 0; i < segmentCount; i++) {\n    for (j = 0; j < REFERENCE_INDICES_LENGTH; j++) {\n      indices[index + j] = REFERENCE_INDICES[j] + indexOffset;\n    }\n    indexOffset += 8;\n    index += REFERENCE_INDICES_LENGTH;\n  }\n\n  const boundingSpheres = scratchBoundingSpheres;\n  BoundingSphere.fromVertices(\n    bottomPositionsArray,\n    Cartesian3.ZERO,\n    3,\n    boundingSpheres[0],\n  );\n  BoundingSphere.fromVertices(\n    topPositionsArray,\n    Cartesian3.ZERO,\n    3,\n    boundingSpheres[1],\n  );\n  const boundingSphere = BoundingSphere.fromBoundingSpheres(boundingSpheres);\n\n  // Adjust bounding sphere height and radius to cover more of the volume\n  boundingSphere.radius += sumHeights / (segmentCount * 2.0);\n\n  const attributes = {\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      normalize: false,\n      values: positionsArray,\n    }),\n    startHiAndForwardOffsetX: getVec4GeometryAttribute(\n      startHiAndForwardOffsetX,\n    ),\n    startLoAndForwardOffsetY: getVec4GeometryAttribute(\n      startLoAndForwardOffsetY,\n    ),\n    startNormalAndForwardOffsetZ: getVec4GeometryAttribute(\n      startNormalAndForwardOffsetZ,\n    ),\n    endNormalAndTextureCoordinateNormalizationX: getVec4GeometryAttribute(\n      endNormalAndTextureCoordinateNormalizationX,\n    ),\n    rightNormalAndTextureCoordinateNormalizationY: getVec4GeometryAttribute(\n      rightNormalAndTextureCoordinateNormalizationY,\n    ),\n  };\n\n  if (compute2dAttributes) {\n    attributes.startHiLo2D = getVec4GeometryAttribute(startHiLo2D);\n    attributes.offsetAndRight2D = getVec4GeometryAttribute(offsetAndRight2D);\n    attributes.startEndNormals2D = getVec4GeometryAttribute(startEndNormals2D);\n    attributes.texcoordNormalization2D = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      normalize: false,\n      values: texcoordNormalization2D,\n    });\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    boundingSphere: boundingSphere,\n  });\n}\n\nfunction getVec4GeometryAttribute(typedArray) {\n  return new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 4,\n    normalize: false,\n    values: typedArray,\n  });\n}\n\n/**\n * Approximates an ellipsoid-tangent vector in 2D by projecting the end point into 2D.\n * Exposed for testing.\n *\n * @param {MapProjection} projection Map Projection for projecting coordinates to 2D.\n * @param {Cartographic} cartographic The cartographic origin point of the normal.\n *   Used to check if the normal crosses the IDL during projection.\n * @param {Cartesian3} normal The normal in 3D.\n * @param {Cartesian3} projectedPosition The projected origin point of the normal in 2D.\n * @param {Cartesian3} result Result parameter on which to store the projected normal.\n * @private\n */\nGroundPolylineGeometry._projectNormal = projectNormal;\nexport default GroundPolylineGeometry;\n","import defined from \"./defined.js\";\n\n/**\n * Defines a heading angle, pitch angle, and range in a local frame.\n * Heading is the rotation from the local east direction where a positive angle is increasing southward.\n * Pitch is the rotation from the local xy-plane. Positive pitch angles are above the plane. Negative pitch\n * angles are below the plane. Range is the distance from the center of the frame.\n * @alias HeadingPitchRange\n * @constructor\n *\n * @param {number} [heading=0.0] The heading angle in radians.\n * @param {number} [pitch=0.0] The pitch angle in radians.\n * @param {number} [range=0.0] The distance from the center in meters.\n */\nfunction HeadingPitchRange(heading, pitch, range) {\n  /**\n   * Heading is the rotation from the local east direction where a positive angle is increasing southward.\n   * @type {number}\n   * @default 0.0\n   */\n  this.heading = heading ?? 0.0;\n\n  /**\n   * Pitch is the rotation from the local xy-plane. Positive pitch angles\n   * are above the plane. Negative pitch angles are below the plane.\n   * @type {number}\n   * @default 0.0\n   */\n  this.pitch = pitch ?? 0.0;\n\n  /**\n   * Range is the distance from the center of the local frame.\n   * @type {number}\n   * @default 0.0\n   */\n  this.range = range ?? 0.0;\n}\n\n/**\n * Duplicates a HeadingPitchRange instance.\n *\n * @param {HeadingPitchRange} hpr The HeadingPitchRange to duplicate.\n * @param {HeadingPitchRange} [result] The object onto which to store the result.\n * @returns {HeadingPitchRange} The modified result parameter or a new HeadingPitchRange instance if one was not provided. (Returns undefined if hpr is undefined)\n */\nHeadingPitchRange.clone = function (hpr, result) {\n  if (!defined(hpr)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    result = new HeadingPitchRange();\n  }\n\n  result.heading = hpr.heading;\n  result.pitch = hpr.pitch;\n  result.range = hpr.range;\n  return result;\n};\nexport default HeadingPitchRange;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A rotation expressed as a heading, pitch, and roll. Heading is the rotation about the\n * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about\n * the positive x axis.\n * @alias HeadingPitchRoll\n * @constructor\n *\n * @param {number} [heading=0.0] The heading component in radians.\n * @param {number} [pitch=0.0] The pitch component in radians.\n * @param {number} [roll=0.0] The roll component in radians.\n */\nfunction HeadingPitchRoll(heading, pitch, roll) {\n  /**\n   * Gets or sets the heading.\n   * @type {number}\n   * @default 0.0\n   */\n  this.heading = heading ?? 0.0;\n  /**\n   * Gets or sets the pitch.\n   * @type {number}\n   * @default 0.0\n   */\n  this.pitch = pitch ?? 0.0;\n  /**\n   * Gets or sets the roll.\n   * @type {number}\n   * @default 0.0\n   */\n  this.roll = roll ?? 0.0;\n}\n\n/**\n * Computes the heading, pitch and roll from a quaternion (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles )\n *\n * @param {Quaternion} quaternion The quaternion from which to retrieve heading, pitch, and roll, all expressed in radians.\n * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided.\n */\nHeadingPitchRoll.fromQuaternion = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(quaternion)) {\n    throw new DeveloperError(\"quaternion is required\");\n  }\n  //>>includeEnd('debug');\n  if (!defined(result)) {\n    result = new HeadingPitchRoll();\n  }\n  const test = 2 * (quaternion.w * quaternion.y - quaternion.z * quaternion.x);\n  const denominatorRoll =\n    1 - 2 * (quaternion.x * quaternion.x + quaternion.y * quaternion.y);\n  const numeratorRoll =\n    2 * (quaternion.w * quaternion.x + quaternion.y * quaternion.z);\n  const denominatorHeading =\n    1 - 2 * (quaternion.y * quaternion.y + quaternion.z * quaternion.z);\n  const numeratorHeading =\n    2 * (quaternion.w * quaternion.z + quaternion.x * quaternion.y);\n  result.heading = -Math.atan2(numeratorHeading, denominatorHeading);\n  result.roll = Math.atan2(numeratorRoll, denominatorRoll);\n  result.pitch = -CesiumMath.asinClamped(test);\n  return result;\n};\n\n/**\n * Returns a new HeadingPitchRoll instance from angles given in degrees.\n *\n * @param {number} heading the heading in degrees\n * @param {number} pitch the pitch in degrees\n * @param {number} roll the heading in degrees\n * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned.\n * @returns {HeadingPitchRoll} A new HeadingPitchRoll instance\n */\nHeadingPitchRoll.fromDegrees = function (heading, pitch, roll, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(heading)) {\n    throw new DeveloperError(\"heading is required\");\n  }\n  if (!defined(pitch)) {\n    throw new DeveloperError(\"pitch is required\");\n  }\n  if (!defined(roll)) {\n    throw new DeveloperError(\"roll is required\");\n  }\n  //>>includeEnd('debug');\n  if (!defined(result)) {\n    result = new HeadingPitchRoll();\n  }\n  result.heading = heading * CesiumMath.RADIANS_PER_DEGREE;\n  result.pitch = pitch * CesiumMath.RADIANS_PER_DEGREE;\n  result.roll = roll * CesiumMath.RADIANS_PER_DEGREE;\n  return result;\n};\n\n/**\n * Duplicates a HeadingPitchRoll instance.\n *\n * @param {HeadingPitchRoll} headingPitchRoll The HeadingPitchRoll to duplicate.\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided. (Returns undefined if headingPitchRoll is undefined)\n */\nHeadingPitchRoll.clone = function (headingPitchRoll, result) {\n  if (!defined(headingPitchRoll)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new HeadingPitchRoll(\n      headingPitchRoll.heading,\n      headingPitchRoll.pitch,\n      headingPitchRoll.roll,\n    );\n  }\n  result.heading = headingPitchRoll.heading;\n  result.pitch = headingPitchRoll.pitch;\n  result.roll = headingPitchRoll.roll;\n  return result;\n};\n\n/**\n * Compares the provided HeadingPitchRolls componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll.\n * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nHeadingPitchRoll.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.heading === right.heading &&\n      left.pitch === right.pitch &&\n      left.roll === right.roll)\n  );\n};\n\n/**\n * Compares the provided HeadingPitchRolls componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll.\n * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll.\n * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nHeadingPitchRoll.equalsEpsilon = function (\n  left,\n  right,\n  relativeEpsilon,\n  absoluteEpsilon,\n) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      CesiumMath.equalsEpsilon(\n        left.heading,\n        right.heading,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        left.pitch,\n        right.pitch,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        left.roll,\n        right.roll,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ))\n  );\n};\n\n/**\n * Duplicates this HeadingPitchRoll instance.\n *\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided.\n */\nHeadingPitchRoll.prototype.clone = function (result) {\n  return HeadingPitchRoll.clone(this, result);\n};\n\n/**\n * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nHeadingPitchRoll.prototype.equals = function (right) {\n  return HeadingPitchRoll.equals(this, right);\n};\n\n/**\n * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll.\n * @param {number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\n * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nHeadingPitchRoll.prototype.equalsEpsilon = function (\n  right,\n  relativeEpsilon,\n  absoluteEpsilon,\n) {\n  return HeadingPitchRoll.equalsEpsilon(\n    this,\n    right,\n    relativeEpsilon,\n    absoluteEpsilon,\n  );\n};\n\n/**\n * Creates a string representing this HeadingPitchRoll in the format '(heading, pitch, roll)' in radians.\n *\n * @returns {string} A string representing the provided HeadingPitchRoll in the format '(heading, pitch, roll)'.\n */\nHeadingPitchRoll.prototype.toString = function () {\n  return `(${this.heading}, ${this.pitch}, ${this.roll})`;\n};\nexport default HeadingPitchRoll;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Array implementation of a heap.\n *\n * @alias Heap\n * @constructor\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {Heap.ComparatorCallback} options.comparator The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\n */\nfunction Heap(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.defined(\"options.comparator\", options.comparator);\n  //>>includeEnd('debug');\n\n  this._comparator = options.comparator;\n  this._array = [];\n  this._length = 0;\n  this._maximumLength = undefined;\n}\n\nObject.defineProperties(Heap.prototype, {\n  /**\n   * Gets the length of the heap.\n   *\n   * @memberof Heap.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._length;\n    },\n  },\n\n  /**\n   * Gets the internal array.\n   *\n   * @memberof Heap.prototype\n   *\n   * @type {Array}\n   * @readonly\n   */\n  internalArray: {\n    get: function () {\n      return this._array;\n    },\n  },\n\n  /**\n   * Gets and sets the maximum length of the heap.\n   *\n   * @memberof Heap.prototype\n   *\n   * @type {number}\n   */\n  maximumLength: {\n    get: function () {\n      return this._maximumLength;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"maximumLength\", value, 0);\n      //>>includeEnd('debug');\n      const originalLength = this._length;\n      if (value < originalLength) {\n        const array = this._array;\n        // Remove trailing references\n        for (let i = value; i < originalLength; ++i) {\n          array[i] = undefined;\n        }\n        this._length = value;\n        array.length = value;\n      }\n      this._maximumLength = value;\n    },\n  },\n\n  /**\n   * The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\n   *\n   * @memberof Heap.prototype\n   *\n   * @type {Heap.ComparatorCallback}\n   */\n  comparator: {\n    get: function () {\n      return this._comparator;\n    },\n  },\n});\n\nfunction swap(array, a, b) {\n  const temp = array[a];\n  array[a] = array[b];\n  array[b] = temp;\n}\n\n/**\n * Resizes the internal array of the heap.\n *\n * @param {number} [length] The length to resize internal array to. Defaults to the current length of the heap.\n */\nHeap.prototype.reserve = function (length) {\n  length = length ?? this._length;\n  this._array.length = length;\n};\n\n/**\n * Update the heap so that index and all descendants satisfy the heap property.\n *\n * @param {number} [index=0] The starting index to heapify from.\n */\nHeap.prototype.heapify = function (index) {\n  index = index ?? 0;\n  const length = this._length;\n  const comparator = this._comparator;\n  const array = this._array;\n  let candidate = -1;\n  let inserting = true;\n\n  while (inserting) {\n    const right = 2 * (index + 1);\n    const left = right - 1;\n\n    if (left < length && comparator(array[left], array[index]) < 0) {\n      candidate = left;\n    } else {\n      candidate = index;\n    }\n\n    if (right < length && comparator(array[right], array[candidate]) < 0) {\n      candidate = right;\n    }\n    if (candidate !== index) {\n      swap(array, candidate, index);\n      index = candidate;\n    } else {\n      inserting = false;\n    }\n  }\n};\n\n/**\n * Resort the heap.\n */\nHeap.prototype.resort = function () {\n  const length = this._length;\n  for (let i = Math.ceil(length / 2); i >= 0; --i) {\n    this.heapify(i);\n  }\n};\n\n/**\n * Insert an element into the heap. If the length would grow greater than maximumLength\n * of the heap, extra elements are removed.\n *\n * @param {*} element The element to insert\n *\n * @return {*} The element that was removed from the heap if the heap is at full capacity.\n */\nHeap.prototype.insert = function (element) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"element\", element);\n  //>>includeEnd('debug');\n\n  const array = this._array;\n  const comparator = this._comparator;\n  const maximumLength = this._maximumLength;\n\n  let index = this._length++;\n  if (index < array.length) {\n    array[index] = element;\n  } else {\n    array.push(element);\n  }\n\n  while (index !== 0) {\n    const parent = Math.floor((index - 1) / 2);\n    if (comparator(array[index], array[parent]) < 0) {\n      swap(array, index, parent);\n      index = parent;\n    } else {\n      break;\n    }\n  }\n\n  let removedElement;\n\n  if (defined(maximumLength) && this._length > maximumLength) {\n    removedElement = array[maximumLength];\n    this._length = maximumLength;\n  }\n\n  return removedElement;\n};\n\n/**\n * Remove the element specified by index from the heap and return it.\n *\n * @param {number} [index=0] The index to remove.\n * @returns {*} The specified element of the heap.\n */\nHeap.prototype.pop = function (index) {\n  index = index ?? 0;\n  if (this._length === 0) {\n    return undefined;\n  }\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.lessThan(\"index\", index, this._length);\n  //>>includeEnd('debug');\n\n  const array = this._array;\n  const root = array[index];\n  swap(array, index, --this._length);\n  this.heapify(index);\n  array[this._length] = undefined; // Remove trailing reference\n  return root;\n};\n\n/**\n * The comparator to use for the heap.\n * @callback Heap.ComparatorCallback\n * @param {*} a An element in the heap.\n * @param {*} b An element in the heap.\n * @returns {number} If the result of the comparison is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\n */\nexport default Heap;\n","/**\n * The encoding that is used for a heightmap\n *\n * @enum {number}\n */\nconst HeightmapEncoding = {\n  /**\n   * No encoding\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n\n  /**\n   * LERC encoding\n   *\n   * @type {number}\n   * @constant\n   *\n   * @see {@link https://github.com/Esri/lerc|The LERC specification}\n   */\n  LERC: 1,\n};\nexport default Object.freeze(HeightmapEncoding);\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport HeightmapEncoding from \"./HeightmapEncoding.js\";\nimport HeightmapTessellator from \"./HeightmapTessellator.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TerrainData from \"./TerrainData.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\n\n/**\n * Terrain data for a single tile where the terrain data is represented as a heightmap.  A heightmap\n * is a rectangular array of heights in row-major order from north to south and west to east.\n *\n * @alias HeightmapTerrainData\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} options.buffer The buffer containing height data.\n * @param {number} options.width The width (longitude direction) of the heightmap, in samples.\n * @param {number} options.height The height (latitude direction) of the heightmap, in samples.\n * @param {number} [options.childTileMask=15] A bit mask indicating which of this tile's four children exist.\n *                 If a child's bit is set, geometry will be requested for that tile as well when it\n *                 is needed.  If the bit is cleared, the child tile is not requested and geometry is\n *                 instead upsampled from the parent.  The bit values are as follows:\n *                 <table>\n *                  <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n *                  <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n *                  <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n *                  <tr><td>2</td><td>4</td><td>Northwest</td></tr>\n *                  <tr><td>3</td><td>8</td><td>Northeast</td></tr>\n *                 </table>\n * @param {Uint8Array} [options.waterMask] The water mask included in this terrain data, if any.  A water mask is a square\n *                     Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n *                     Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n * @param {object} [options.structure] An object describing the structure of the height data.\n * @param {number} [options.structure.heightScale=1.0] The factor by which to multiply height samples in order to obtain\n *                 the height above the heightOffset, in meters.  The heightOffset is added to the resulting\n *                 height after multiplying by the scale.\n * @param {number} [options.structure.heightOffset=0.0] The offset to add to the scaled height to obtain the final\n *                 height in meters.  The offset is added after the height sample is multiplied by the\n *                 heightScale.\n * @param {number} [options.structure.elementsPerHeight=1] The number of elements in the buffer that make up a single height\n *                 sample.  This is usually 1, indicating that each element is a separate height sample.  If\n *                 it is greater than 1, that number of elements together form the height sample, which is\n *                 computed according to the structure.elementMultiplier and structure.isBigEndian properties.\n * @param {number} [options.structure.stride=1] The number of elements to skip to get from the first element of\n *                 one height to the first element of the next height.\n * @param {number} [options.structure.elementMultiplier=256.0] The multiplier used to compute the height value when the\n *                 stride property is greater than 1.  For example, if the stride is 4 and the strideMultiplier\n *                 is 256, the height is computed as follows:\n *                 `height = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256`\n *                 This is assuming that the isBigEndian property is false.  If it is true, the order of the\n *                 elements is reversed.\n * @param {boolean} [options.structure.isBigEndian=false] Indicates endianness of the elements in the buffer when the\n *                  stride property is greater than 1.  If this property is false, the first element is the\n *                  low-order element.  If it is true, the first element is the high-order element.\n * @param {number} [options.structure.lowestEncodedHeight] The lowest value that can be stored in the height buffer.  Any heights that are lower\n *                 than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value.  For example, if the height\n *                 buffer is a `Uint16Array`, this value should be 0 because a `Uint16Array` cannot store negative numbers.  If this parameter is\n *                 not specified, no minimum value is enforced.\n * @param {number} [options.structure.highestEncodedHeight] The highest value that can be stored in the height buffer.  Any heights that are higher\n *                 than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value.  For example, if the height\n *                 buffer is a `Uint16Array`, this value should be `256 * 256 - 1` or 65535 because a `Uint16Array` cannot store numbers larger\n *                 than 65535.  If this parameter is not specified, no maximum value is enforced.\n * @param {HeightmapEncoding} [options.encoding=HeightmapEncoding.NONE] The encoding that is used on the buffer.\n * @param {boolean} [options.createdByUpsampling=false] True if this instance was created by upsampling another instance;\n *                  otherwise, false.\n *\n *\n * @example\n * const buffer = ...\n * const heightBuffer = new Uint16Array(buffer, 0, that._heightmapWidth * that._heightmapWidth);\n * const childTileMask = new Uint8Array(buffer, heightBuffer.byteLength, 1)[0];\n * const waterMask = new Uint8Array(buffer, heightBuffer.byteLength + 1, buffer.byteLength - heightBuffer.byteLength - 1);\n * const terrainData = new Cesium.HeightmapTerrainData({\n *   buffer : heightBuffer,\n *   width : 65,\n *   height : 65,\n *   childTileMask : childTileMask,\n *   waterMask : waterMask\n * });\n *\n * @see TerrainData\n * @see QuantizedMeshTerrainData\n * @see GoogleEarthEnterpriseTerrainData\n */\nfunction HeightmapTerrainData(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.buffer\", options.buffer);\n  Check.typeOf.number(\"options.width\", options.width);\n  Check.typeOf.number(\"options.height\", options.height);\n  //>>includeEnd('debug');\n\n  this._buffer = options.buffer;\n  this._width = options.width;\n  this._height = options.height;\n  this._childTileMask = options.childTileMask ?? 15;\n  this._encoding = options.encoding ?? HeightmapEncoding.NONE;\n\n  const defaultStructure = HeightmapTessellator.DEFAULT_STRUCTURE;\n  let structure = options.structure;\n  if (!defined(structure)) {\n    structure = defaultStructure;\n  } else if (structure !== defaultStructure) {\n    structure.heightScale =\n      structure.heightScale ?? defaultStructure.heightScale;\n    structure.heightOffset =\n      structure.heightOffset ?? defaultStructure.heightOffset;\n    structure.elementsPerHeight =\n      structure.elementsPerHeight ?? defaultStructure.elementsPerHeight;\n    structure.stride = structure.stride ?? defaultStructure.stride;\n    structure.elementMultiplier =\n      structure.elementMultiplier ?? defaultStructure.elementMultiplier;\n    structure.isBigEndian =\n      structure.isBigEndian ?? defaultStructure.isBigEndian;\n  }\n\n  this._structure = structure;\n  this._createdByUpsampling = options.createdByUpsampling ?? false;\n  this._waterMask = options.waterMask;\n\n  this._skirtHeight = undefined;\n  this._bufferType =\n    this._encoding === HeightmapEncoding.LERC\n      ? Float32Array\n      : this._buffer.constructor;\n  this._mesh = undefined;\n}\n\nObject.defineProperties(HeightmapTerrainData.prototype, {\n  /**\n   * An array of credits for this tile.\n   * @memberof HeightmapTerrainData.prototype\n   * @type {Credit[]}\n   */\n  credits: {\n    get: function () {\n      return undefined;\n    },\n  },\n  /**\n   * The water mask included in this terrain data, if any.  A water mask is a square\n   * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n   * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n   * @memberof HeightmapTerrainData.prototype\n   * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement|ImageBitmap|undefined}\n   */\n  waterMask: {\n    get: function () {\n      return this._waterMask;\n    },\n  },\n\n  childTileMask: {\n    get: function () {\n      return this._childTileMask;\n    },\n  },\n});\n\nconst createMeshTaskName = \"createVerticesFromHeightmap\";\nconst createMeshTaskProcessorNoThrottle = new TaskProcessor(createMeshTaskName);\nconst createMeshTaskProcessorThrottle = new TaskProcessor(\n  createMeshTaskName,\n  TerrainData.maximumAsynchronousTasks,\n);\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n * @param {boolean} [options.throttle=true] If true, indicates that this operation will need to be retried if too many asynchronous mesh creations are already in progress.\n * @returns {Promise<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n *          asynchronous mesh creations are already in progress and the operation should\n *          be retried later.\n */\nHeightmapTerrainData.prototype.createMesh = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.tilingScheme\", options.tilingScheme);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  Check.typeOf.number(\"options.level\", options.level);\n  //>>includeEnd('debug');\n\n  const tilingScheme = options.tilingScheme;\n  const x = options.x;\n  const y = options.y;\n  const level = options.level;\n  const exaggeration = options.exaggeration ?? 1.0;\n  const exaggerationRelativeHeight = options.exaggerationRelativeHeight ?? 0.0;\n  const throttle = options.throttle ?? true;\n\n  const ellipsoid = tilingScheme.ellipsoid;\n  const nativeRectangle = tilingScheme.tileXYToNativeRectangle(x, y, level);\n  const rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n\n  // Compute the center of the tile for RTC rendering.\n  const center = ellipsoid.cartographicToCartesian(Rectangle.center(rectangle));\n\n  const structure = this._structure;\n\n  const levelZeroMaxError =\n    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n      ellipsoid,\n      this._width,\n      tilingScheme.getNumberOfXTilesAtLevel(0),\n    );\n  const thisLevelMaxError = levelZeroMaxError / (1 << level);\n  this._skirtHeight = Math.min(thisLevelMaxError * 4.0, 1000.0);\n\n  const createMeshTaskProcessor = throttle\n    ? createMeshTaskProcessorThrottle\n    : createMeshTaskProcessorNoThrottle;\n\n  const verticesPromise = createMeshTaskProcessor.scheduleTask({\n    heightmap: this._buffer,\n    structure: structure,\n    includeWebMercatorT: true,\n    width: this._width,\n    height: this._height,\n    nativeRectangle: nativeRectangle,\n    rectangle: rectangle,\n    relativeToCenter: center,\n    ellipsoid: ellipsoid,\n    skirtHeight: this._skirtHeight,\n    isGeographic: tilingScheme.projection instanceof GeographicProjection,\n    exaggeration: exaggeration,\n    exaggerationRelativeHeight: exaggerationRelativeHeight,\n    encoding: this._encoding,\n  });\n\n  if (!defined(verticesPromise)) {\n    // Postponed\n    return undefined;\n  }\n\n  const that = this;\n  return Promise.resolve(verticesPromise).then(function (result) {\n    let indicesAndEdges;\n    if (that._skirtHeight > 0.0) {\n      indicesAndEdges =\n        TerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices(\n          result.gridWidth,\n          result.gridHeight,\n        );\n    } else {\n      indicesAndEdges = TerrainProvider.getRegularGridIndicesAndEdgeIndices(\n        result.gridWidth,\n        result.gridHeight,\n      );\n    }\n\n    const vertexCountWithoutSkirts = result.gridWidth * result.gridHeight;\n\n    // Clone complex result objects because the transfer from the web worker\n    // has stripped them down to JSON-style objects.\n    that._mesh = new TerrainMesh(\n      center,\n      new Float32Array(result.vertices),\n      indicesAndEdges.indices,\n      indicesAndEdges.indexCountWithoutSkirts,\n      vertexCountWithoutSkirts,\n      result.minimumHeight,\n      result.maximumHeight,\n      rectangle,\n      BoundingSphere.clone(result.boundingSphere3D),\n      Cartesian3.clone(result.occludeePointInScaledSpace),\n      result.numberOfAttributes,\n      OrientedBoundingBox.clone(result.orientedBoundingBox),\n      TerrainEncoding.clone(result.encoding),\n      indicesAndEdges.westIndicesSouthToNorth,\n      indicesAndEdges.southIndicesEastToWest,\n      indicesAndEdges.eastIndicesNorthToSouth,\n      indicesAndEdges.northIndicesWestToEast,\n    );\n\n    // Free memory received from server after mesh is created.\n    that._buffer = undefined;\n    return that._mesh;\n  });\n};\n\n/**\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n *\n * @private\n */\nHeightmapTerrainData.prototype._createMeshSync = function (options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.tilingScheme\", options.tilingScheme);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  Check.typeOf.number(\"options.level\", options.level);\n  //>>includeEnd('debug');\n\n  const tilingScheme = options.tilingScheme;\n  const x = options.x;\n  const y = options.y;\n  const level = options.level;\n  const exaggeration = options.exaggeration ?? 1.0;\n  const exaggerationRelativeHeight = options.exaggerationRelativeHeight ?? 0.0;\n\n  const ellipsoid = tilingScheme.ellipsoid;\n  const nativeRectangle = tilingScheme.tileXYToNativeRectangle(x, y, level);\n  const rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n\n  // Compute the center of the tile for RTC rendering.\n  const center = ellipsoid.cartographicToCartesian(Rectangle.center(rectangle));\n\n  const structure = this._structure;\n\n  const levelZeroMaxError =\n    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n      ellipsoid,\n      this._width,\n      tilingScheme.getNumberOfXTilesAtLevel(0),\n    );\n  const thisLevelMaxError = levelZeroMaxError / (1 << level);\n  this._skirtHeight = Math.min(thisLevelMaxError * 4.0, 1000.0);\n\n  const result = HeightmapTessellator.computeVertices({\n    heightmap: this._buffer,\n    structure: structure,\n    includeWebMercatorT: true,\n    width: this._width,\n    height: this._height,\n    nativeRectangle: nativeRectangle,\n    rectangle: rectangle,\n    relativeToCenter: center,\n    ellipsoid: ellipsoid,\n    skirtHeight: this._skirtHeight,\n    isGeographic: tilingScheme.projection instanceof GeographicProjection,\n    exaggeration: exaggeration,\n    exaggerationRelativeHeight: exaggerationRelativeHeight,\n  });\n\n  // Free memory received from server after mesh is created.\n  this._buffer = undefined;\n\n  let indicesAndEdges;\n  if (this._skirtHeight > 0.0) {\n    indicesAndEdges =\n      TerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices(\n        this._width,\n        this._height,\n      );\n  } else {\n    indicesAndEdges = TerrainProvider.getRegularGridIndicesAndEdgeIndices(\n      this._width,\n      this._height,\n    );\n  }\n\n  const vertexCountWithoutSkirts = result.gridWidth * result.gridHeight;\n\n  // No need to clone here (as we do in the async version) because the result\n  // is not coming from a web worker.\n  this._mesh = new TerrainMesh(\n    center,\n    result.vertices,\n    indicesAndEdges.indices,\n    indicesAndEdges.indexCountWithoutSkirts,\n    vertexCountWithoutSkirts,\n    result.minimumHeight,\n    result.maximumHeight,\n    rectangle,\n    result.boundingSphere3D,\n    result.occludeePointInScaledSpace,\n    result.encoding.stride,\n    result.orientedBoundingBox,\n    result.encoding,\n    indicesAndEdges.westIndicesSouthToNorth,\n    indicesAndEdges.southIndicesEastToWest,\n    indicesAndEdges.eastIndicesNorthToSouth,\n    indicesAndEdges.northIndicesWestToEast,\n  );\n\n  return this._mesh;\n};\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {number} longitude The longitude in radians.\n * @param {number} latitude The latitude in radians.\n * @returns {number} The terrain height at the specified position.  If the position\n *          is outside the rectangle, this method will extrapolate the height, which is likely to be wildly\n *          incorrect for positions far outside the rectangle.\n */\nHeightmapTerrainData.prototype.interpolateHeight = function (\n  rectangle,\n  longitude,\n  latitude,\n) {\n  const width = this._width;\n  const height = this._height;\n\n  const structure = this._structure;\n  const stride = structure.stride;\n  const elementsPerHeight = structure.elementsPerHeight;\n  const elementMultiplier = structure.elementMultiplier;\n  const isBigEndian = structure.isBigEndian;\n  const heightOffset = structure.heightOffset;\n  const heightScale = structure.heightScale;\n\n  const isMeshCreated = defined(this._mesh);\n  const isLERCEncoding = this._encoding === HeightmapEncoding.LERC;\n  const isInterpolationImpossible = !isMeshCreated && isLERCEncoding;\n  if (isInterpolationImpossible) {\n    // We can't interpolate using the buffer because it's LERC encoded\n    //  so please call createMesh() first and interpolate using the mesh;\n    //  as mesh creation will decode the LERC buffer\n    return undefined;\n  }\n\n  let heightSample;\n  if (isMeshCreated) {\n    const buffer = this._mesh.vertices;\n    const encoding = this._mesh.encoding;\n    heightSample = interpolateMeshHeight(\n      buffer,\n      encoding,\n      heightOffset,\n      heightScale,\n      rectangle,\n      width,\n      height,\n      longitude,\n      latitude,\n    );\n  } else {\n    heightSample = interpolateHeight(\n      this._buffer,\n      elementsPerHeight,\n      elementMultiplier,\n      stride,\n      isBigEndian,\n      rectangle,\n      width,\n      height,\n      longitude,\n      latitude,\n    );\n    heightSample = heightSample * heightScale + heightOffset;\n  }\n\n  return heightSample;\n};\n\n/**\n * Upsamples this terrain data for use by a descendant tile.  The resulting instance will contain a subset of the\n * height samples in this instance, interpolated if necessary.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise<HeightmapTerrainData>|undefined} A promise for upsampled heightmap terrain data for the descendant tile,\n *          or undefined if the mesh is unavailable.\n */\nHeightmapTerrainData.prototype.upsample = function (\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(tilingScheme)) {\n    throw new DeveloperError(\"tilingScheme is required.\");\n  }\n  if (!defined(thisX)) {\n    throw new DeveloperError(\"thisX is required.\");\n  }\n  if (!defined(thisY)) {\n    throw new DeveloperError(\"thisY is required.\");\n  }\n  if (!defined(thisLevel)) {\n    throw new DeveloperError(\"thisLevel is required.\");\n  }\n  if (!defined(descendantX)) {\n    throw new DeveloperError(\"descendantX is required.\");\n  }\n  if (!defined(descendantY)) {\n    throw new DeveloperError(\"descendantY is required.\");\n  }\n  if (!defined(descendantLevel)) {\n    throw new DeveloperError(\"descendantLevel is required.\");\n  }\n  const levelDifference = descendantLevel - thisLevel;\n  if (levelDifference > 1) {\n    throw new DeveloperError(\n      \"Upsampling through more than one level at a time is not currently supported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const meshData = this._mesh;\n  if (!defined(meshData)) {\n    return undefined;\n  }\n\n  const width = this._width;\n  const height = this._height;\n  const structure = this._structure;\n  const stride = structure.stride;\n\n  const heights = new this._bufferType(width * height * stride);\n\n  const buffer = meshData.vertices;\n  const encoding = meshData.encoding;\n\n  // PERFORMANCE_IDEA: don't recompute these rectangles - the caller already knows them.\n  const sourceRectangle = tilingScheme.tileXYToRectangle(\n    thisX,\n    thisY,\n    thisLevel,\n  );\n  const destinationRectangle = tilingScheme.tileXYToRectangle(\n    descendantX,\n    descendantY,\n    descendantLevel,\n  );\n\n  const heightOffset = structure.heightOffset;\n  const heightScale = structure.heightScale;\n\n  const elementsPerHeight = structure.elementsPerHeight;\n  const elementMultiplier = structure.elementMultiplier;\n  const isBigEndian = structure.isBigEndian;\n\n  const divisor = Math.pow(elementMultiplier, elementsPerHeight - 1);\n\n  for (let j = 0; j < height; ++j) {\n    const latitude = CesiumMath.lerp(\n      destinationRectangle.north,\n      destinationRectangle.south,\n      j / (height - 1),\n    );\n    for (let i = 0; i < width; ++i) {\n      const longitude = CesiumMath.lerp(\n        destinationRectangle.west,\n        destinationRectangle.east,\n        i / (width - 1),\n      );\n      let heightSample = interpolateMeshHeight(\n        buffer,\n        encoding,\n        heightOffset,\n        heightScale,\n        sourceRectangle,\n        width,\n        height,\n        longitude,\n        latitude,\n      );\n\n      // Use conditionals here instead of Math.min and Math.max so that an undefined\n      // lowestEncodedHeight or highestEncodedHeight has no effect.\n      heightSample =\n        heightSample < structure.lowestEncodedHeight\n          ? structure.lowestEncodedHeight\n          : heightSample;\n      heightSample =\n        heightSample > structure.highestEncodedHeight\n          ? structure.highestEncodedHeight\n          : heightSample;\n\n      setHeight(\n        heights,\n        elementsPerHeight,\n        elementMultiplier,\n        divisor,\n        stride,\n        isBigEndian,\n        j * width + i,\n        heightSample,\n      );\n    }\n  }\n\n  return Promise.resolve(\n    new HeightmapTerrainData({\n      buffer: heights,\n      width: width,\n      height: height,\n      childTileMask: 0,\n      structure: this._structure,\n      createdByUpsampling: true,\n    }),\n  );\n};\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link HeightmapTerrainData.childTileMask}.  The given child tile coordinates are assumed\n * to be one of the four children of this tile.  If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {number} thisX The tile X coordinate of this (the parent) tile.\n * @param {number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {number} childX The tile X coordinate of the child tile to check for availability.\n * @param {number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {boolean} True if the child tile is available; otherwise, false.\n */\nHeightmapTerrainData.prototype.isChildAvailable = function (\n  thisX,\n  thisY,\n  childX,\n  childY,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"thisX\", thisX);\n  Check.typeOf.number(\"thisY\", thisY);\n  Check.typeOf.number(\"childX\", childX);\n  Check.typeOf.number(\"childY\", childY);\n  //>>includeEnd('debug');\n\n  let bitNumber = 2; // northwest child\n  if (childX !== thisX * 2) {\n    ++bitNumber; // east child\n  }\n  if (childY !== thisY * 2) {\n    bitNumber -= 2; // south child\n  }\n\n  return (this._childTileMask & (1 << bitNumber)) !== 0;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data.  If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server.  This method should return true for instances\n * returned from a call to {@link HeightmapTerrainData#upsample}.\n *\n * @returns {boolean} True if this instance was created by upsampling; otherwise, false.\n */\nHeightmapTerrainData.prototype.wasCreatedByUpsampling = function () {\n  return this._createdByUpsampling;\n};\n\nfunction interpolateHeight(\n  sourceHeights,\n  elementsPerHeight,\n  elementMultiplier,\n  stride,\n  isBigEndian,\n  sourceRectangle,\n  width,\n  height,\n  longitude,\n  latitude,\n) {\n  const fromWest =\n    ((longitude - sourceRectangle.west) * (width - 1)) /\n    (sourceRectangle.east - sourceRectangle.west);\n  const fromSouth =\n    ((latitude - sourceRectangle.south) * (height - 1)) /\n    (sourceRectangle.north - sourceRectangle.south);\n\n  let westInteger = fromWest | 0;\n  let eastInteger = westInteger + 1;\n  if (eastInteger >= width) {\n    eastInteger = width - 1;\n    westInteger = width - 2;\n  }\n\n  let southInteger = fromSouth | 0;\n  let northInteger = southInteger + 1;\n  if (northInteger >= height) {\n    northInteger = height - 1;\n    southInteger = height - 2;\n  }\n\n  const dx = fromWest - westInteger;\n  const dy = fromSouth - southInteger;\n\n  southInteger = height - 1 - southInteger;\n  northInteger = height - 1 - northInteger;\n\n  const southwestHeight = getHeight(\n    sourceHeights,\n    elementsPerHeight,\n    elementMultiplier,\n    stride,\n    isBigEndian,\n    southInteger * width + westInteger,\n  );\n  const southeastHeight = getHeight(\n    sourceHeights,\n    elementsPerHeight,\n    elementMultiplier,\n    stride,\n    isBigEndian,\n    southInteger * width + eastInteger,\n  );\n  const northwestHeight = getHeight(\n    sourceHeights,\n    elementsPerHeight,\n    elementMultiplier,\n    stride,\n    isBigEndian,\n    northInteger * width + westInteger,\n  );\n  const northeastHeight = getHeight(\n    sourceHeights,\n    elementsPerHeight,\n    elementMultiplier,\n    stride,\n    isBigEndian,\n    northInteger * width + eastInteger,\n  );\n\n  return triangleInterpolateHeight(\n    dx,\n    dy,\n    southwestHeight,\n    southeastHeight,\n    northwestHeight,\n    northeastHeight,\n  );\n}\n\nfunction interpolateMeshHeight(\n  buffer,\n  encoding,\n  heightOffset,\n  heightScale,\n  sourceRectangle,\n  width,\n  height,\n  longitude,\n  latitude,\n) {\n  // returns a height encoded according to the structure's heightScale and heightOffset.\n  const fromWest =\n    ((longitude - sourceRectangle.west) * (width - 1)) /\n    (sourceRectangle.east - sourceRectangle.west);\n  const fromSouth =\n    ((latitude - sourceRectangle.south) * (height - 1)) /\n    (sourceRectangle.north - sourceRectangle.south);\n\n  let westInteger = fromWest | 0;\n  let eastInteger = westInteger + 1;\n  if (eastInteger >= width) {\n    eastInteger = width - 1;\n    westInteger = width - 2;\n  }\n\n  let southInteger = fromSouth | 0;\n  let northInteger = southInteger + 1;\n  if (northInteger >= height) {\n    northInteger = height - 1;\n    southInteger = height - 2;\n  }\n\n  const dx = fromWest - westInteger;\n  const dy = fromSouth - southInteger;\n\n  southInteger = height - 1 - southInteger;\n  northInteger = height - 1 - northInteger;\n\n  const southwestHeight =\n    (encoding.decodeHeight(buffer, southInteger * width + westInteger) -\n      heightOffset) /\n    heightScale;\n  const southeastHeight =\n    (encoding.decodeHeight(buffer, southInteger * width + eastInteger) -\n      heightOffset) /\n    heightScale;\n  const northwestHeight =\n    (encoding.decodeHeight(buffer, northInteger * width + westInteger) -\n      heightOffset) /\n    heightScale;\n  const northeastHeight =\n    (encoding.decodeHeight(buffer, northInteger * width + eastInteger) -\n      heightOffset) /\n    heightScale;\n\n  return triangleInterpolateHeight(\n    dx,\n    dy,\n    southwestHeight,\n    southeastHeight,\n    northwestHeight,\n    northeastHeight,\n  );\n}\n\nfunction triangleInterpolateHeight(\n  dX,\n  dY,\n  southwestHeight,\n  southeastHeight,\n  northwestHeight,\n  northeastHeight,\n) {\n  // The HeightmapTessellator bisects the quad from southwest to northeast.\n  if (dY < dX) {\n    // Lower right triangle\n    return (\n      southwestHeight +\n      dX * (southeastHeight - southwestHeight) +\n      dY * (northeastHeight - southeastHeight)\n    );\n  }\n\n  // Upper left triangle\n  return (\n    southwestHeight +\n    dX * (northeastHeight - northwestHeight) +\n    dY * (northwestHeight - southwestHeight)\n  );\n}\n\nfunction getHeight(\n  heights,\n  elementsPerHeight,\n  elementMultiplier,\n  stride,\n  isBigEndian,\n  index,\n) {\n  index *= stride;\n\n  let height = 0;\n  let i;\n\n  if (isBigEndian) {\n    for (i = 0; i < elementsPerHeight; ++i) {\n      height = height * elementMultiplier + heights[index + i];\n    }\n  } else {\n    for (i = elementsPerHeight - 1; i >= 0; --i) {\n      height = height * elementMultiplier + heights[index + i];\n    }\n  }\n\n  return height;\n}\n\nfunction setHeight(\n  heights,\n  elementsPerHeight,\n  elementMultiplier,\n  divisor,\n  stride,\n  isBigEndian,\n  index,\n  height,\n) {\n  index *= stride;\n\n  let i;\n  if (isBigEndian) {\n    for (i = 0; i < elementsPerHeight - 1; ++i) {\n      heights[index + i] = (height / divisor) | 0;\n      height -= heights[index + i] * divisor;\n      divisor /= elementMultiplier;\n    }\n  } else {\n    for (i = elementsPerHeight - 1; i > 0; --i) {\n      heights[index + i] = (height / divisor) | 0;\n      height -= heights[index + i] * divisor;\n      divisor /= elementMultiplier;\n    }\n  }\n  heights[index + i] = height;\n}\nexport default HeightmapTerrainData;\n","import AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidalOccluder from \"./EllipsoidalOccluder.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport Transforms from \"./Transforms.js\";\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\n\n/**\n * Contains functions to create a mesh from a heightmap image.\n *\n * @namespace HeightmapTessellator\n *\n * @private\n */\nconst HeightmapTessellator = {};\n\n/**\n * The default structure of a heightmap, as given to {@link HeightmapTessellator.computeVertices}.\n *\n * @constant\n */\nHeightmapTessellator.DEFAULT_STRUCTURE = Object.freeze({\n  heightScale: 1.0,\n  heightOffset: 0.0,\n  elementsPerHeight: 1,\n  stride: 1,\n  elementMultiplier: 256.0,\n  isBigEndian: false,\n});\n\nconst cartesian3Scratch = new Cartesian3();\nconst matrix4Scratch = new Matrix4();\nconst minimumScratch = new Cartesian3();\nconst maximumScratch = new Cartesian3();\n\n/**\n * Fills an array of vertices from a heightmap image.\n *\n * @param {object} options Object with the following properties:\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} options.heightmap The heightmap to tessellate.\n * @param {number} options.width The width of the heightmap, in height samples.\n * @param {number} options.height The height of the heightmap, in height samples.\n * @param {number} options.skirtHeight The height of skirts to drape at the edges of the heightmap.\n * @param {Rectangle} options.nativeRectangle A rectangle in the native coordinates of the heightmap's projection.  For\n *                 a heightmap with a geographic projection, this is degrees.  For the web mercator\n *                 projection, this is meters.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height from which terrain is exaggerated.\n * @param {Rectangle} [options.rectangle] The rectangle covered by the heightmap, in geodetic coordinates with north, south, east and\n *                 west properties in radians.  Either rectangle or nativeRectangle must be provided.  If both\n *                 are provided, they're assumed to be consistent.\n * @param {boolean} [options.isGeographic=true] True if the heightmap uses a {@link GeographicProjection}, or false if it uses\n *                  a {@link WebMercatorProjection}.\n * @param {Cartesian3} [options.relativeToCenter=Cartesian3.ZERO] The positions will be computed as <code>Cartesian3.subtract(worldPosition, relativeToCenter)</code>.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to which the heightmap applies.\n * @param {object} [options.structure] An object describing the structure of the height data.\n * @param {number} [options.structure.heightScale=1.0] The factor by which to multiply height samples in order to obtain\n *                 the height above the heightOffset, in meters.  The heightOffset is added to the resulting\n *                 height after multiplying by the scale.\n * @param {number} [options.structure.heightOffset=0.0] The offset to add to the scaled height to obtain the final\n *                 height in meters.  The offset is added after the height sample is multiplied by the\n *                 heightScale.\n * @param {number} [options.structure.elementsPerHeight=1] The number of elements in the buffer that make up a single height\n *                 sample.  This is usually 1, indicating that each element is a separate height sample.  If\n *                 it is greater than 1, that number of elements together form the height sample, which is\n *                 computed according to the structure.elementMultiplier and structure.isBigEndian properties.\n * @param {number} [options.structure.stride=1] The number of elements to skip to get from the first element of\n *                 one height to the first element of the next height.\n * @param {number} [options.structure.elementMultiplier=256.0] The multiplier used to compute the height value when the\n *                 stride property is greater than 1.  For example, if the stride is 4 and the strideMultiplier\n *                 is 256, the height is computed as follows:\n *                 `height = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256`\n *                 This is assuming that the isBigEndian property is false.  If it is true, the order of the\n *                 elements is reversed.\n * @param {number} [options.structure.lowestEncodedHeight] The lowest value that can be stored in the height buffer.  Any heights that are lower\n *                 than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value.  For example, if the height\n *                 buffer is a `Uint16Array`, this value should be 0 because a `Uint16Array` cannot store negative numbers.  If this parameter is\n *                 not specified, no minimum value is enforced.\n * @param {number} [options.structure.highestEncodedHeight] The highest value that can be stored in the height buffer.  Any heights that are higher\n *                 than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value.  For example, if the height\n *                 buffer is a `Uint16Array`, this value should be `256 * 256 - 1` or 65535 because a `Uint16Array` cannot store numbers larger\n *                 than 65535.  If this parameter is not specified, no maximum value is enforced.\n * @param {boolean} [options.structure.isBigEndian=false] Indicates endianness of the elements in the buffer when the\n *                  stride property is greater than 1.  If this property is false, the first element is the\n *                  low-order element.  If it is true, the first element is the high-order element.\n *\n * @example\n * const width = 5;\n * const height = 5;\n * const statistics = Cesium.HeightmapTessellator.computeVertices({\n *     heightmap : [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0],\n *     width : width,\n *     height : height,\n *     skirtHeight : 0.0,\n *     nativeRectangle : {\n *         west : 10.0,\n *         east : 20.0,\n *         south : 30.0,\n *         north : 40.0\n *     }\n * });\n *\n * const encoding = statistics.encoding;\n * const position = encoding.decodePosition(statistics.vertices, index);\n */\nHeightmapTessellator.computeVertices = function (options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.heightmap)) {\n    throw new DeveloperError(\"options.heightmap is required.\");\n  }\n  if (!defined(options.width) || !defined(options.height)) {\n    throw new DeveloperError(\"options.width and options.height are required.\");\n  }\n  if (!defined(options.nativeRectangle)) {\n    throw new DeveloperError(\"options.nativeRectangle is required.\");\n  }\n  if (!defined(options.skirtHeight)) {\n    throw new DeveloperError(\"options.skirtHeight is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // This function tends to be a performance hotspot for terrain rendering,\n  // so it employs a lot of inlining and unrolling as an optimization.\n  // In particular, the functionality of Ellipsoid.cartographicToCartesian\n  // is inlined.\n\n  const cos = Math.cos;\n  const sin = Math.sin;\n  const sqrt = Math.sqrt;\n  const atan = Math.atan;\n  const exp = Math.exp;\n  const piOverTwo = CesiumMath.PI_OVER_TWO;\n  const toRadians = CesiumMath.toRadians;\n\n  const heightmap = options.heightmap;\n  const width = options.width;\n  const height = options.height;\n  const skirtHeight = options.skirtHeight;\n  const hasSkirts = skirtHeight > 0.0;\n\n  const isGeographic = options.isGeographic ?? true;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n\n  const oneOverGlobeSemimajorAxis = 1.0 / ellipsoid.maximumRadius;\n\n  const nativeRectangle = Rectangle.clone(options.nativeRectangle);\n  const rectangle = Rectangle.clone(options.rectangle);\n\n  let geographicWest;\n  let geographicSouth;\n  let geographicEast;\n  let geographicNorth;\n\n  if (!defined(rectangle)) {\n    if (isGeographic) {\n      geographicWest = toRadians(nativeRectangle.west);\n      geographicSouth = toRadians(nativeRectangle.south);\n      geographicEast = toRadians(nativeRectangle.east);\n      geographicNorth = toRadians(nativeRectangle.north);\n    } else {\n      geographicWest = nativeRectangle.west * oneOverGlobeSemimajorAxis;\n      geographicSouth =\n        piOverTwo -\n        2.0 * atan(exp(-nativeRectangle.south * oneOverGlobeSemimajorAxis));\n      geographicEast = nativeRectangle.east * oneOverGlobeSemimajorAxis;\n      geographicNorth =\n        piOverTwo -\n        2.0 * atan(exp(-nativeRectangle.north * oneOverGlobeSemimajorAxis));\n    }\n  } else {\n    geographicWest = rectangle.west;\n    geographicSouth = rectangle.south;\n    geographicEast = rectangle.east;\n    geographicNorth = rectangle.north;\n  }\n\n  let relativeToCenter = options.relativeToCenter;\n  const hasRelativeToCenter = defined(relativeToCenter);\n  relativeToCenter = hasRelativeToCenter ? relativeToCenter : Cartesian3.ZERO;\n  const includeWebMercatorT = options.includeWebMercatorT ?? false;\n\n  const exaggeration = options.exaggeration ?? 1.0;\n  const exaggerationRelativeHeight = options.exaggerationRelativeHeight ?? 0.0;\n  const hasExaggeration = exaggeration !== 1.0;\n  const includeGeodeticSurfaceNormals = hasExaggeration;\n\n  const structure = options.structure ?? HeightmapTessellator.DEFAULT_STRUCTURE;\n  const heightScale =\n    structure.heightScale ?? HeightmapTessellator.DEFAULT_STRUCTURE.heightScale;\n  const heightOffset =\n    structure.heightOffset ??\n    HeightmapTessellator.DEFAULT_STRUCTURE.heightOffset;\n  const elementsPerHeight =\n    structure.elementsPerHeight ??\n    HeightmapTessellator.DEFAULT_STRUCTURE.elementsPerHeight;\n  const stride =\n    structure.stride ?? HeightmapTessellator.DEFAULT_STRUCTURE.stride;\n  const elementMultiplier =\n    structure.elementMultiplier ??\n    HeightmapTessellator.DEFAULT_STRUCTURE.elementMultiplier;\n  const isBigEndian =\n    structure.isBigEndian ?? HeightmapTessellator.DEFAULT_STRUCTURE.isBigEndian;\n\n  let rectangleWidth = Rectangle.computeWidth(nativeRectangle);\n  let rectangleHeight = Rectangle.computeHeight(nativeRectangle);\n\n  const granularityX = rectangleWidth / (width - 1);\n  const granularityY = rectangleHeight / (height - 1);\n\n  if (!isGeographic) {\n    rectangleWidth *= oneOverGlobeSemimajorAxis;\n    rectangleHeight *= oneOverGlobeSemimajorAxis;\n  }\n\n  const radiiSquared = ellipsoid.radiiSquared;\n  const radiiSquaredX = radiiSquared.x;\n  const radiiSquaredY = radiiSquared.y;\n  const radiiSquaredZ = radiiSquared.z;\n\n  let minimumHeight = 65536.0;\n  let maximumHeight = -65536.0;\n\n  const fromENU = Transforms.eastNorthUpToFixedFrame(\n    relativeToCenter,\n    ellipsoid,\n  );\n  const toENU = Matrix4.inverseTransformation(fromENU, matrix4Scratch);\n\n  let southMercatorY;\n  let oneOverMercatorHeight;\n  if (includeWebMercatorT) {\n    southMercatorY =\n      WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicSouth);\n    oneOverMercatorHeight =\n      1.0 /\n      (WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicNorth) -\n        southMercatorY);\n  }\n\n  const minimum = minimumScratch;\n  minimum.x = Number.POSITIVE_INFINITY;\n  minimum.y = Number.POSITIVE_INFINITY;\n  minimum.z = Number.POSITIVE_INFINITY;\n\n  const maximum = maximumScratch;\n  maximum.x = Number.NEGATIVE_INFINITY;\n  maximum.y = Number.NEGATIVE_INFINITY;\n  maximum.z = Number.NEGATIVE_INFINITY;\n\n  let hMin = Number.POSITIVE_INFINITY;\n\n  const gridVertexCount = width * height;\n  const edgeVertexCount = skirtHeight > 0.0 ? width * 2 + height * 2 : 0;\n  const vertexCount = gridVertexCount + edgeVertexCount;\n\n  const positions = new Array(vertexCount);\n  const heights = new Array(vertexCount);\n  const uvs = new Array(vertexCount);\n  const webMercatorTs = includeWebMercatorT ? new Array(vertexCount) : [];\n  const geodeticSurfaceNormals = includeGeodeticSurfaceNormals\n    ? new Array(vertexCount)\n    : [];\n\n  let startRow = 0;\n  let endRow = height;\n  let startCol = 0;\n  let endCol = width;\n\n  if (hasSkirts) {\n    --startRow;\n    ++endRow;\n    --startCol;\n    ++endCol;\n  }\n\n  const skirtOffsetPercentage = 0.00001;\n\n  for (let rowIndex = startRow; rowIndex < endRow; ++rowIndex) {\n    let row = rowIndex;\n    if (row < 0) {\n      row = 0;\n    }\n    if (row >= height) {\n      row = height - 1;\n    }\n\n    let latitude = nativeRectangle.north - granularityY * row;\n\n    if (!isGeographic) {\n      latitude =\n        piOverTwo - 2.0 * atan(exp(-latitude * oneOverGlobeSemimajorAxis));\n    } else {\n      latitude = toRadians(latitude);\n    }\n\n    let v = (latitude - geographicSouth) / (geographicNorth - geographicSouth);\n    v = CesiumMath.clamp(v, 0.0, 1.0);\n\n    const isNorthEdge = rowIndex === startRow;\n    const isSouthEdge = rowIndex === endRow - 1;\n    if (skirtHeight > 0.0) {\n      if (isNorthEdge) {\n        latitude += skirtOffsetPercentage * rectangleHeight;\n      } else if (isSouthEdge) {\n        latitude -= skirtOffsetPercentage * rectangleHeight;\n      }\n    }\n\n    const cosLatitude = cos(latitude);\n    const nZ = sin(latitude);\n    const kZ = radiiSquaredZ * nZ;\n\n    let webMercatorT;\n    if (includeWebMercatorT) {\n      webMercatorT =\n        (WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) -\n          southMercatorY) *\n        oneOverMercatorHeight;\n    }\n\n    for (let colIndex = startCol; colIndex < endCol; ++colIndex) {\n      let col = colIndex;\n      if (col < 0) {\n        col = 0;\n      }\n      if (col >= width) {\n        col = width - 1;\n      }\n\n      const terrainOffset = row * (width * stride) + col * stride;\n\n      let heightSample;\n      if (elementsPerHeight === 1) {\n        heightSample = heightmap[terrainOffset];\n      } else {\n        heightSample = 0;\n\n        let elementOffset;\n        if (isBigEndian) {\n          for (\n            elementOffset = 0;\n            elementOffset < elementsPerHeight;\n            ++elementOffset\n          ) {\n            heightSample =\n              heightSample * elementMultiplier +\n              heightmap[terrainOffset + elementOffset];\n          }\n        } else {\n          for (\n            elementOffset = elementsPerHeight - 1;\n            elementOffset >= 0;\n            --elementOffset\n          ) {\n            heightSample =\n              heightSample * elementMultiplier +\n              heightmap[terrainOffset + elementOffset];\n          }\n        }\n      }\n\n      heightSample = heightSample * heightScale + heightOffset;\n\n      maximumHeight = Math.max(maximumHeight, heightSample);\n      minimumHeight = Math.min(minimumHeight, heightSample);\n\n      let longitude = nativeRectangle.west + granularityX * col;\n\n      if (!isGeographic) {\n        longitude = longitude * oneOverGlobeSemimajorAxis;\n      } else {\n        longitude = toRadians(longitude);\n      }\n\n      let u = (longitude - geographicWest) / (geographicEast - geographicWest);\n      u = CesiumMath.clamp(u, 0.0, 1.0);\n\n      let index = row * width + col;\n\n      if (skirtHeight > 0.0) {\n        const isWestEdge = colIndex === startCol;\n        const isEastEdge = colIndex === endCol - 1;\n        const isEdge = isNorthEdge || isSouthEdge || isWestEdge || isEastEdge;\n        const isCorner =\n          (isNorthEdge || isSouthEdge) && (isWestEdge || isEastEdge);\n        if (isCorner) {\n          // Don't generate skirts on the corners.\n          continue;\n        } else if (isEdge) {\n          heightSample -= skirtHeight;\n\n          if (isWestEdge) {\n            // The outer loop iterates north to south but the indices are ordered south to north, hence the index flip below\n            index = gridVertexCount + (height - row - 1);\n            longitude -= skirtOffsetPercentage * rectangleWidth;\n          } else if (isSouthEdge) {\n            // Add after west indices. South indices are ordered east to west.\n            index = gridVertexCount + height + (width - col - 1);\n          } else if (isEastEdge) {\n            // Add after west and south indices. East indices are ordered north to south. The index is flipped like above.\n            index = gridVertexCount + height + width + row;\n            longitude += skirtOffsetPercentage * rectangleWidth;\n          } else if (isNorthEdge) {\n            // Add after west, south, and east indices. North indices are ordered west to east.\n            index = gridVertexCount + height + width + height + col;\n          }\n        }\n      }\n\n      const nX = cosLatitude * cos(longitude);\n      const nY = cosLatitude * sin(longitude);\n\n      const kX = radiiSquaredX * nX;\n      const kY = radiiSquaredY * nY;\n\n      const gamma = sqrt(kX * nX + kY * nY + kZ * nZ);\n      const oneOverGamma = 1.0 / gamma;\n\n      const rSurfaceX = kX * oneOverGamma;\n      const rSurfaceY = kY * oneOverGamma;\n      const rSurfaceZ = kZ * oneOverGamma;\n\n      const position = new Cartesian3();\n      position.x = rSurfaceX + nX * heightSample;\n      position.y = rSurfaceY + nY * heightSample;\n      position.z = rSurfaceZ + nZ * heightSample;\n\n      Matrix4.multiplyByPoint(toENU, position, cartesian3Scratch);\n      Cartesian3.minimumByComponent(cartesian3Scratch, minimum, minimum);\n      Cartesian3.maximumByComponent(cartesian3Scratch, maximum, maximum);\n      hMin = Math.min(hMin, heightSample);\n\n      positions[index] = position;\n      uvs[index] = new Cartesian2(u, v);\n      heights[index] = heightSample;\n\n      if (includeWebMercatorT) {\n        webMercatorTs[index] = webMercatorT;\n      }\n\n      if (includeGeodeticSurfaceNormals) {\n        geodeticSurfaceNormals[index] =\n          ellipsoid.geodeticSurfaceNormal(position);\n      }\n    }\n  }\n\n  const boundingSphere3D = BoundingSphere.fromPoints(positions);\n  let orientedBoundingBox;\n  if (defined(rectangle)) {\n    orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n      rectangle,\n      minimumHeight,\n      maximumHeight,\n      ellipsoid,\n    );\n  }\n\n  let occludeePointInScaledSpace;\n  if (hasRelativeToCenter) {\n    const occluder = new EllipsoidalOccluder(ellipsoid);\n    occludeePointInScaledSpace =\n      occluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n        relativeToCenter,\n        positions,\n        minimumHeight,\n      );\n  }\n\n  const aaBox = new AxisAlignedBoundingBox(minimum, maximum, relativeToCenter);\n  const encoding = new TerrainEncoding(\n    relativeToCenter,\n    aaBox,\n    hMin,\n    maximumHeight,\n    fromENU,\n    false,\n    includeWebMercatorT,\n    includeGeodeticSurfaceNormals,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n  const vertices = new Float32Array(vertexCount * encoding.stride);\n\n  let bufferIndex = 0;\n  for (let j = 0; j < vertexCount; ++j) {\n    bufferIndex = encoding.encode(\n      vertices,\n      bufferIndex,\n      positions[j],\n      uvs[j],\n      heights[j],\n      undefined,\n      webMercatorTs[j],\n      geodeticSurfaceNormals[j],\n    );\n  }\n\n  return {\n    vertices: vertices,\n    maximumHeight: maximumHeight,\n    minimumHeight: minimumHeight,\n    encoding: encoding,\n    boundingSphere3D: boundingSphere3D,\n    orientedBoundingBox: orientedBoundingBox,\n    occludeePointInScaledSpace: occludeePointInScaledSpace,\n  };\n};\nexport default HeightmapTessellator;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\nconst factorial = CesiumMath.factorial;\n\nfunction calculateCoefficientTerm(\n  x,\n  zIndices,\n  xTable,\n  derivOrder,\n  termOrder,\n  reservedIndices,\n) {\n  let result = 0;\n  let reserved;\n  let i;\n  let j;\n\n  if (derivOrder > 0) {\n    for (i = 0; i < termOrder; i++) {\n      reserved = false;\n      for (j = 0; j < reservedIndices.length && !reserved; j++) {\n        if (i === reservedIndices[j]) {\n          reserved = true;\n        }\n      }\n\n      if (!reserved) {\n        reservedIndices.push(i);\n        result += calculateCoefficientTerm(\n          x,\n          zIndices,\n          xTable,\n          derivOrder - 1,\n          termOrder,\n          reservedIndices,\n        );\n        reservedIndices.splice(reservedIndices.length - 1, 1);\n      }\n    }\n\n    return result;\n  }\n\n  result = 1;\n  for (i = 0; i < termOrder; i++) {\n    reserved = false;\n    for (j = 0; j < reservedIndices.length && !reserved; j++) {\n      if (i === reservedIndices[j]) {\n        reserved = true;\n      }\n    }\n\n    if (!reserved) {\n      result *= x - xTable[zIndices[i]];\n    }\n  }\n\n  return result;\n}\n\n/**\n * An {@link InterpolationAlgorithm} for performing Hermite interpolation.\n *\n * @namespace HermitePolynomialApproximation\n */\nconst HermitePolynomialApproximation = {\n  type: \"Hermite\",\n};\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n *\n * @param {number} degree The desired degree of interpolation.\n * @param {number} [inputOrder=0]  The order of the inputs (0 means just the data, 1 means the data and its derivative, etc).\n * @returns {number} The number of required data points needed for the desired degree of interpolation.\n * @exception {DeveloperError} degree must be 0 or greater.\n * @exception {DeveloperError} inputOrder must be 0 or greater.\n */\nHermitePolynomialApproximation.getRequiredDataPoints = function (\n  degree,\n  inputOrder,\n) {\n  inputOrder = inputOrder ?? 0;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(degree)) {\n    throw new DeveloperError(\"degree is required.\");\n  }\n  if (degree < 0) {\n    throw new DeveloperError(\"degree must be 0 or greater.\");\n  }\n  if (inputOrder < 0) {\n    throw new DeveloperError(\"inputOrder must be 0 or greater.\");\n  }\n  //>>includeEnd('debug');\n\n  return Math.max(Math.floor((degree + 1) / (inputOrder + 1)), 2);\n};\n\n/**\n * Interpolates values using Hermite Polynomial Approximation.\n *\n * @param {number} x The independent variable for which the dependent variables will be interpolated.\n * @param {number[]} xTable The array of independent variables to use to interpolate.  The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {number[]} yTable The array of dependent variables to use to interpolate.  For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {number[]} [result] An existing array into which to store the result.\n * @returns {number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nHermitePolynomialApproximation.interpolateOrderZero = function (\n  x,\n  xTable,\n  yTable,\n  yStride,\n  result,\n) {\n  if (!defined(result)) {\n    result = new Array(yStride);\n  }\n\n  let i;\n  let j;\n  let d;\n  let s;\n  let len;\n  let index;\n  const length = xTable.length;\n  const coefficients = new Array(yStride);\n\n  for (i = 0; i < yStride; i++) {\n    result[i] = 0;\n\n    const l = new Array(length);\n    coefficients[i] = l;\n    for (j = 0; j < length; j++) {\n      l[j] = [];\n    }\n  }\n\n  const zIndicesLength = length,\n    zIndices = new Array(zIndicesLength);\n\n  for (i = 0; i < zIndicesLength; i++) {\n    zIndices[i] = i;\n  }\n\n  let highestNonZeroCoef = length - 1;\n  for (s = 0; s < yStride; s++) {\n    for (j = 0; j < zIndicesLength; j++) {\n      index = zIndices[j] * yStride + s;\n      coefficients[s][0].push(yTable[index]);\n    }\n\n    for (i = 1; i < zIndicesLength; i++) {\n      let nonZeroCoefficients = false;\n      for (j = 0; j < zIndicesLength - i; j++) {\n        const zj = xTable[zIndices[j]];\n        const zn = xTable[zIndices[j + i]];\n\n        let numerator;\n        if (zn - zj <= 0) {\n          index = zIndices[j] * yStride + yStride * i + s;\n          numerator = yTable[index];\n          coefficients[s][i].push(numerator / factorial(i));\n        } else {\n          numerator = coefficients[s][i - 1][j + 1] - coefficients[s][i - 1][j];\n          coefficients[s][i].push(numerator / (zn - zj));\n        }\n        nonZeroCoefficients = nonZeroCoefficients || numerator !== 0;\n      }\n\n      if (!nonZeroCoefficients) {\n        highestNonZeroCoef = i - 1;\n      }\n    }\n  }\n\n  for (d = 0, len = 0; d <= len; d++) {\n    for (i = d; i <= highestNonZeroCoef; i++) {\n      const tempTerm = calculateCoefficientTerm(x, zIndices, xTable, d, i, []);\n      for (s = 0; s < yStride; s++) {\n        const coeff = coefficients[s][i][0];\n        result[s + d * yStride] += coeff * tempTerm;\n      }\n    }\n  }\n\n  return result;\n};\n\nconst arrayScratch = [];\n\n/**\n * Interpolates values using Hermite Polynomial Approximation.\n *\n * @param {number} x The independent variable for which the dependent variables will be interpolated.\n * @param {number[]} xTable The array of independent variables to use to interpolate.  The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {number[]} yTable The array of dependent variables to use to interpolate.  For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {number} inputOrder The number of derivatives supplied for input.\n * @param {number} outputOrder The number of derivatives desired for output.\n * @param {number[]} [result] An existing array into which to store the result.\n *\n * @returns {number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nHermitePolynomialApproximation.interpolate = function (\n  x,\n  xTable,\n  yTable,\n  yStride,\n  inputOrder,\n  outputOrder,\n  result,\n) {\n  const resultLength = yStride * (outputOrder + 1);\n  if (!defined(result)) {\n    result = new Array(resultLength);\n  }\n  for (let r = 0; r < resultLength; r++) {\n    result[r] = 0;\n  }\n\n  const length = xTable.length;\n  // The zIndices array holds copies of the addresses of the xTable values\n  // in the range we're looking at. Even though this just holds information already\n  // available in xTable this is a much more convenient format.\n  const zIndices = new Array(length * (inputOrder + 1));\n  let i;\n  for (i = 0; i < length; i++) {\n    for (let j = 0; j < inputOrder + 1; j++) {\n      zIndices[i * (inputOrder + 1) + j] = i;\n    }\n  }\n\n  const zIndiceslength = zIndices.length;\n  const coefficients = arrayScratch;\n  const highestNonZeroCoef = fillCoefficientList(\n    coefficients,\n    zIndices,\n    xTable,\n    yTable,\n    yStride,\n    inputOrder,\n  );\n  const reservedIndices = [];\n\n  const tmp = (zIndiceslength * (zIndiceslength + 1)) / 2;\n  const loopStop = Math.min(highestNonZeroCoef, outputOrder);\n  for (let d = 0; d <= loopStop; d++) {\n    for (i = d; i <= highestNonZeroCoef; i++) {\n      reservedIndices.length = 0;\n      const tempTerm = calculateCoefficientTerm(\n        x,\n        zIndices,\n        xTable,\n        d,\n        i,\n        reservedIndices,\n      );\n      const dimTwo = Math.floor((i * (1 - i)) / 2) + zIndiceslength * i;\n\n      for (let s = 0; s < yStride; s++) {\n        const dimOne = Math.floor(s * tmp);\n        const coef = coefficients[dimOne + dimTwo];\n        result[s + d * yStride] += coef * tempTerm;\n      }\n    }\n  }\n\n  return result;\n};\n\nfunction fillCoefficientList(\n  coefficients,\n  zIndices,\n  xTable,\n  yTable,\n  yStride,\n  inputOrder,\n) {\n  let j;\n  let index;\n  let highestNonZero = -1;\n  const zIndiceslength = zIndices.length;\n  const tmp = (zIndiceslength * (zIndiceslength + 1)) / 2;\n\n  for (let s = 0; s < yStride; s++) {\n    const dimOne = Math.floor(s * tmp);\n\n    for (j = 0; j < zIndiceslength; j++) {\n      index = zIndices[j] * yStride * (inputOrder + 1) + s;\n      coefficients[dimOne + j] = yTable[index];\n    }\n\n    for (let i = 1; i < zIndiceslength; i++) {\n      let coefIndex = 0;\n      const dimTwo = Math.floor((i * (1 - i)) / 2) + zIndiceslength * i;\n      let nonZeroCoefficients = false;\n\n      for (j = 0; j < zIndiceslength - i; j++) {\n        const zj = xTable[zIndices[j]];\n        const zn = xTable[zIndices[j + i]];\n\n        let numerator;\n        let coefficient;\n        if (zn - zj <= 0) {\n          index = zIndices[j] * yStride * (inputOrder + 1) + yStride * i + s;\n          numerator = yTable[index];\n          coefficient = numerator / CesiumMath.factorial(i);\n          coefficients[dimOne + dimTwo + coefIndex] = coefficient;\n          coefIndex++;\n        } else {\n          const dimTwoMinusOne =\n            Math.floor(((i - 1) * (2 - i)) / 2) + zIndiceslength * (i - 1);\n          numerator =\n            coefficients[dimOne + dimTwoMinusOne + j + 1] -\n            coefficients[dimOne + dimTwoMinusOne + j];\n          coefficient = numerator / (zn - zj);\n          coefficients[dimOne + dimTwo + coefIndex] = coefficient;\n          coefIndex++;\n        }\n        nonZeroCoefficients = nonZeroCoefficients || numerator !== 0.0;\n      }\n\n      if (nonZeroCoefficients) {\n        highestNonZero = Math.max(highestNonZero, i);\n      }\n    }\n  }\n\n  return highestNonZero;\n}\nexport default HermitePolynomialApproximation;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport LinearSpline from \"./LinearSpline.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Spline from \"./Spline.js\";\nimport TridiagonalSystemSolver from \"./TridiagonalSystemSolver.js\";\n\nconst scratchLower = [];\nconst scratchDiagonal = [];\nconst scratchUpper = [];\nconst scratchRight = [];\n\nfunction generateClamped(points, firstTangent, lastTangent) {\n  const l = scratchLower;\n  const u = scratchUpper;\n  const d = scratchDiagonal;\n  const r = scratchRight;\n\n  l.length = u.length = points.length - 1;\n  d.length = r.length = points.length;\n\n  let i;\n  l[0] = d[0] = 1.0;\n  u[0] = 0.0;\n\n  let right = r[0];\n  if (!defined(right)) {\n    right = r[0] = new Cartesian3();\n  }\n  Cartesian3.clone(firstTangent, right);\n\n  for (i = 1; i < l.length - 1; ++i) {\n    l[i] = u[i] = 1.0;\n    d[i] = 4.0;\n\n    right = r[i];\n    if (!defined(right)) {\n      right = r[i] = new Cartesian3();\n    }\n    Cartesian3.subtract(points[i + 1], points[i - 1], right);\n    Cartesian3.multiplyByScalar(right, 3.0, right);\n  }\n\n  l[i] = 0.0;\n  u[i] = 1.0;\n  d[i] = 4.0;\n\n  right = r[i];\n  if (!defined(right)) {\n    right = r[i] = new Cartesian3();\n  }\n  Cartesian3.subtract(points[i + 1], points[i - 1], right);\n  Cartesian3.multiplyByScalar(right, 3.0, right);\n\n  d[i + 1] = 1.0;\n  right = r[i + 1];\n  if (!defined(right)) {\n    right = r[i + 1] = new Cartesian3();\n  }\n  Cartesian3.clone(lastTangent, right);\n\n  return TridiagonalSystemSolver.solve(l, d, u, r);\n}\n\nfunction generateNatural(points) {\n  const l = scratchLower;\n  const u = scratchUpper;\n  const d = scratchDiagonal;\n  const r = scratchRight;\n\n  l.length = u.length = points.length - 1;\n  d.length = r.length = points.length;\n\n  let i;\n  l[0] = u[0] = 1.0;\n  d[0] = 2.0;\n\n  let right = r[0];\n  if (!defined(right)) {\n    right = r[0] = new Cartesian3();\n  }\n  Cartesian3.subtract(points[1], points[0], right);\n  Cartesian3.multiplyByScalar(right, 3.0, right);\n\n  for (i = 1; i < l.length; ++i) {\n    l[i] = u[i] = 1.0;\n    d[i] = 4.0;\n\n    right = r[i];\n    if (!defined(right)) {\n      right = r[i] = new Cartesian3();\n    }\n    Cartesian3.subtract(points[i + 1], points[i - 1], right);\n    Cartesian3.multiplyByScalar(right, 3.0, right);\n  }\n\n  d[i] = 2.0;\n\n  right = r[i];\n  if (!defined(right)) {\n    right = r[i] = new Cartesian3();\n  }\n  Cartesian3.subtract(points[i], points[i - 1], right);\n  Cartesian3.multiplyByScalar(right, 3.0, right);\n\n  return TridiagonalSystemSolver.solve(l, d, u, r);\n}\n\n/**\n * A Hermite spline is a cubic interpolating spline. Points, incoming tangents, outgoing tangents, and times\n * must be defined for each control point. The outgoing tangents are defined for points [0, n - 2] and the incoming\n * tangents are defined for points [1, n - 1]. For example, when interpolating a segment of the curve between <code>points[i]</code> and\n * <code>points[i + 1]</code>, the tangents at the points will be <code>outTangents[i]</code> and <code>inTangents[i]</code>,\n * respectively.\n *\n * @alias HermiteSpline\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n *                The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Cartesian3[]} options.points The array of control points.\n * @param {Cartesian3[]} options.inTangents The array of incoming tangents at each control point.\n * @param {Cartesian3[]} options.outTangents The array of outgoing tangents at each control point.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n * @exception {DeveloperError} inTangents and outTangents must have a length equal to points.length - 1.\n * @exception {DeveloperError} inTangents and outTangents must be of the same type as points.\n *\n * @example\n * // Create a G<sup>1</sup> continuous Hermite spline\n * const times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];\n * const spline = new Cesium.HermiteSpline({\n *     times : times,\n *     points : [\n *         new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n *         new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n *         new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n *         new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n *         new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n *     ],\n *     outTangents : [\n *         new Cesium.Cartesian3(1125196, -161816, 270551),\n *         new Cesium.Cartesian3(-996690.5, -365906.5, 184028.5),\n *         new Cesium.Cartesian3(-2096917, 48379.5, -292683.5),\n *         new Cesium.Cartesian3(-890902.5, 408999.5, -447115)\n *     ],\n *     inTangents : [\n *         new Cesium.Cartesian3(-1993381, -731813, 368057),\n *         new Cesium.Cartesian3(-4193834, 96759, -585367),\n *         new Cesium.Cartesian3(-1781805, 817999, -894230),\n *         new Cesium.Cartesian3(1165345, 112641, 47281)\n *     ]\n * });\n *\n * const p0 = spline.evaluate(times[0]);\n *\n * @see ConstantSpline\n * @see SteppedSpline\n * @see LinearSpline\n * @see CatmullRomSpline\n * @see QuaternionSpline\n * @see MorphWeightSpline\n */\nfunction HermiteSpline(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const points = options.points;\n  const times = options.times;\n  const inTangents = options.inTangents;\n  const outTangents = options.outTangents;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(points) ||\n    !defined(times) ||\n    !defined(inTangents) ||\n    !defined(outTangents)\n  ) {\n    throw new DeveloperError(\n      \"times, points, inTangents, and outTangents are required.\",\n    );\n  }\n  if (points.length < 2) {\n    throw new DeveloperError(\n      \"points.length must be greater than or equal to 2.\",\n    );\n  }\n  if (times.length !== points.length) {\n    throw new DeveloperError(\"times.length must be equal to points.length.\");\n  }\n  if (\n    inTangents.length !== outTangents.length ||\n    inTangents.length !== points.length - 1\n  ) {\n    throw new DeveloperError(\n      \"inTangents and outTangents must have a length equal to points.length - 1.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._times = times;\n  this._points = points;\n  this._pointType = Spline.getPointType(points[0]);\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    this._pointType !== Spline.getPointType(inTangents[0]) ||\n    this._pointType !== Spline.getPointType(outTangents[0])\n  ) {\n    throw new DeveloperError(\n      \"inTangents and outTangents must be of the same type as points.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._inTangents = inTangents;\n  this._outTangents = outTangents;\n\n  this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(HermiteSpline.prototype, {\n  /**\n   * An array of times for the control points.\n   *\n   * @memberof HermiteSpline.prototype\n   *\n   * @type {number[]}\n   * @readonly\n   */\n  times: {\n    get: function () {\n      return this._times;\n    },\n  },\n\n  /**\n   * An array of control points.\n   *\n   * @memberof HermiteSpline.prototype\n   *\n   * @type {Cartesian3[]}\n   * @readonly\n   */\n  points: {\n    get: function () {\n      return this._points;\n    },\n  },\n\n  /**\n   * An array of incoming tangents at each control point.\n   *\n   * @memberof HermiteSpline.prototype\n   *\n   * @type {Cartesian3[]}\n   * @readonly\n   */\n  inTangents: {\n    get: function () {\n      return this._inTangents;\n    },\n  },\n\n  /**\n   * An array of outgoing tangents at each control point.\n   *\n   * @memberof HermiteSpline.prototype\n   *\n   * @type {Cartesian3[]}\n   * @readonly\n   */\n  outTangents: {\n    get: function () {\n      return this._outTangents;\n    },\n  },\n});\n\n/**\n * Creates a spline where the tangents at each control point are the same.\n * The curves are guaranteed to be at least in the class C<sup>1</sup>.\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times The array of control point times.\n * @param {Cartesian3[]} options.points The array of control points.\n * @param {Cartesian3[]} options.tangents The array of tangents at the control points.\n * @returns {HermiteSpline} A hermite spline.\n *\n * @exception {DeveloperError} points, times and tangents are required.\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times, points and tangents must have the same length.\n *\n * @example\n * const points = [\n *     new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n *     new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n *     new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n *     new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n *     new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n * ];\n *\n * // Add tangents\n * const tangents = new Array(points.length);\n * tangents[0] = new Cesium.Cartesian3(1125196, -161816, 270551);\n * const temp = new Cesium.Cartesian3();\n * for (let i = 1; i < tangents.length - 1; ++i) {\n *     tangents[i] = Cesium.Cartesian3.multiplyByScalar(Cesium.Cartesian3.subtract(points[i + 1], points[i - 1], temp), 0.5, new Cesium.Cartesian3());\n * }\n * tangents[tangents.length - 1] = new Cesium.Cartesian3(1165345, 112641, 47281);\n *\n * const spline = Cesium.HermiteSpline.createC1({\n *     times : times,\n *     points : points,\n *     tangents : tangents\n * });\n */\nHermiteSpline.createC1 = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const times = options.times;\n  const points = options.points;\n  const tangents = options.tangents;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(points) || !defined(times) || !defined(tangents)) {\n    throw new DeveloperError(\"points, times and tangents are required.\");\n  }\n  if (points.length < 2) {\n    throw new DeveloperError(\n      \"points.length must be greater than or equal to 2.\",\n    );\n  }\n  if (times.length !== points.length || times.length !== tangents.length) {\n    throw new DeveloperError(\n      \"times, points and tangents must have the same length.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const outTangents = tangents.slice(0, tangents.length - 1);\n  const inTangents = tangents.slice(1, tangents.length);\n\n  return new HermiteSpline({\n    times: times,\n    points: points,\n    inTangents: inTangents,\n    outTangents: outTangents,\n  });\n};\n\n/**\n * Creates a natural cubic spline. The tangents at the control points are generated\n * to create a curve in the class C<sup>2</sup>.\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times The array of control point times.\n * @param {Cartesian3[]} options.points The array of control points.\n * @returns {HermiteSpline|LinearSpline} A hermite spline, or a linear spline if less than 3 control points were given.\n *\n * @exception {DeveloperError} points and times are required.\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n * @example\n * // Create a natural cubic spline above the earth from Philadelphia to Los Angeles.\n * const spline = Cesium.HermiteSpline.createNaturalCubic({\n *     times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],\n *     points : [\n *         new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n *         new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n *         new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n *         new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n *         new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n *     ]\n * });\n */\nHermiteSpline.createNaturalCubic = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const times = options.times;\n  const points = options.points;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(points) || !defined(times)) {\n    throw new DeveloperError(\"points and times are required.\");\n  }\n  if (points.length < 2) {\n    throw new DeveloperError(\n      \"points.length must be greater than or equal to 2.\",\n    );\n  }\n  if (times.length !== points.length) {\n    throw new DeveloperError(\"times.length must be equal to points.length.\");\n  }\n  //>>includeEnd('debug');\n\n  if (points.length < 3) {\n    return new LinearSpline({\n      points: points,\n      times: times,\n    });\n  }\n\n  const tangents = generateNatural(points);\n  const outTangents = tangents.slice(0, tangents.length - 1);\n  const inTangents = tangents.slice(1, tangents.length);\n\n  return new HermiteSpline({\n    times: times,\n    points: points,\n    inTangents: inTangents,\n    outTangents: outTangents,\n  });\n};\n\n/**\n * Creates a clamped cubic spline. The tangents at the interior control points are generated\n * to create a curve in the class C<sup>2</sup>.\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times The array of control point times.\n * @param {number[]|Cartesian3[]} options.points The array of control points.\n * @param {Cartesian3} options.firstTangent The outgoing tangent of the first control point.\n * @param {Cartesian3} options.lastTangent The incoming tangent of the last control point.\n * @returns {HermiteSpline|LinearSpline} A hermite spline, or a linear spline if less than 3 control points were given.\n *\n * @exception {DeveloperError} points, times, firstTangent and lastTangent are required.\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n * @exception {DeveloperError} firstTangent and lastTangent must be of the same type as points.\n *\n * @example\n * // Create a clamped cubic spline above the earth from Philadelphia to Los Angeles.\n * const spline = Cesium.HermiteSpline.createClampedCubic({\n *     times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],\n *     points : [\n *         new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n *         new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n *         new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n *         new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n *         new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n *     ],\n *     firstTangent : new Cesium.Cartesian3(1125196, -161816, 270551),\n *     lastTangent : new Cesium.Cartesian3(1165345, 112641, 47281)\n * });\n */\nHermiteSpline.createClampedCubic = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const times = options.times;\n  const points = options.points;\n  const firstTangent = options.firstTangent;\n  const lastTangent = options.lastTangent;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(points) ||\n    !defined(times) ||\n    !defined(firstTangent) ||\n    !defined(lastTangent)\n  ) {\n    throw new DeveloperError(\n      \"points, times, firstTangent and lastTangent are required.\",\n    );\n  }\n  if (points.length < 2) {\n    throw new DeveloperError(\n      \"points.length must be greater than or equal to 2.\",\n    );\n  }\n  if (times.length !== points.length) {\n    throw new DeveloperError(\"times.length must be equal to points.length.\");\n  }\n  //>>includeEnd('debug');\n\n  const PointType = Spline.getPointType(points[0]);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    PointType !== Spline.getPointType(firstTangent) ||\n    PointType !== Spline.getPointType(lastTangent)\n  ) {\n    throw new DeveloperError(\n      \"firstTangent and lastTangent must be of the same type as points.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (points.length < 3) {\n    return new LinearSpline({\n      points: points,\n      times: times,\n    });\n  }\n\n  const tangents = generateClamped(points, firstTangent, lastTangent);\n  const outTangents = tangents.slice(0, tangents.length - 1);\n  const inTangents = tangents.slice(1, tangents.length);\n\n  return new HermiteSpline({\n    times: times,\n    points: points,\n    inTangents: inTangents,\n    outTangents: outTangents,\n  });\n};\n\n//prettier-ignore\nHermiteSpline.hermiteCoefficientMatrix = new Matrix4(\n  2.0, -3.0, 0.0, 1.0,\n  -2.0, 3.0, 0.0, 0.0,\n  1.0, -2.0, 1.0, 0.0,\n  1.0, -1.0, 0.0, 0.0\n);\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {number} time The time.\n * @returns {number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nHermiteSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\nconst scratchTimeVec = new Cartesian4();\nconst scratchTemp = new Cartesian3();\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around to the updated animation.\n */\nHermiteSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nHermiteSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nHermiteSpline.prototype.evaluate = function (time, result) {\n  const points = this.points;\n  const times = this.times;\n  const inTangents = this.inTangents;\n  const outTangents = this.outTangents;\n\n  this._lastTimeIndex = this.findTimeInterval(time, this._lastTimeIndex);\n  const i = this._lastTimeIndex;\n\n  const timesDelta = times[i + 1] - times[i];\n  const u = (time - times[i]) / timesDelta;\n\n  const timeVec = scratchTimeVec;\n  timeVec.z = u;\n  timeVec.y = u * u;\n  timeVec.x = timeVec.y * u;\n  timeVec.w = 1.0;\n\n  // Coefficients are returned in the following order:\n  // start, end, out-tangent, in-tangent\n  const coefs = Matrix4.multiplyByVector(\n    HermiteSpline.hermiteCoefficientMatrix,\n    timeVec,\n    timeVec,\n  );\n\n  // Multiply the out-tangent and in-tangent values by the time delta.\n  coefs.z *= timesDelta;\n  coefs.w *= timesDelta;\n\n  const PointType = this._pointType;\n\n  if (PointType === Number) {\n    return (\n      points[i] * coefs.x +\n      points[i + 1] * coefs.y +\n      outTangents[i] * coefs.z +\n      inTangents[i] * coefs.w\n    );\n  }\n\n  if (!defined(result)) {\n    result = new PointType();\n  }\n\n  result = PointType.multiplyByScalar(points[i], coefs.x, result);\n  PointType.multiplyByScalar(points[i + 1], coefs.y, scratchTemp);\n  PointType.add(result, scratchTemp, result);\n  PointType.multiplyByScalar(outTangents[i], coefs.z, scratchTemp);\n  PointType.add(result, scratchTemp, result);\n  PointType.multiplyByScalar(inTangents[i], coefs.w, scratchTemp);\n  return PointType.add(result, scratchTemp, result);\n};\nexport default HermiteSpline;\n","import Check from \"./Check.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Hilbert Order helper functions.\n *\n * @namespace HilbertOrder\n */\nconst HilbertOrder = {};\n\n/**\n * Computes the Hilbert index at the given level from 2D coordinates.\n *\n * @param {number} level The level of the curve\n * @param {number} x The X coordinate\n * @param {number} y The Y coordinate\n * @returns {number} The Hilbert index.\n * @private\n */\nHilbertOrder.encode2D = function (level, x, y) {\n  const n = Math.pow(2, level);\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  if (level < 1) {\n    throw new DeveloperError(\"Hilbert level cannot be less than 1.\");\n  }\n  if (x < 0 || x >= n || y < 0 || y >= n) {\n    throw new DeveloperError(\"Invalid coordinates for given level.\");\n  }\n  //>>includeEnd('debug');\n\n  const p = {\n    x: x,\n    y: y,\n  };\n  let rx,\n    ry,\n    s,\n    index = BigInt(0);\n\n  for (s = n / 2; s > 0; s /= 2) {\n    rx = (p.x & s) > 0 ? 1 : 0;\n    ry = (p.y & s) > 0 ? 1 : 0;\n    index += BigInt(((3 * rx) ^ ry) * s * s);\n    rotate(n, p, rx, ry);\n  }\n\n  return index;\n};\n\n/**\n * Computes the 2D coordinates from the Hilbert index at the given level.\n *\n * @param {number} level The level of the curve\n * @param {bigint} index The Hilbert index\n * @returns {number[]} An array containing the 2D coordinates ([x, y]) corresponding to the Morton index.\n * @private\n */\nHilbertOrder.decode2D = function (level, index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.bigint(\"index\", index);\n  if (level < 1) {\n    throw new DeveloperError(\"Hilbert level cannot be less than 1.\");\n  }\n  if (index < BigInt(0) || index >= BigInt(Math.pow(4, level))) {\n    throw new DeveloperError(\n      \"Hilbert index exceeds valid maximum for given level.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const n = Math.pow(2, level);\n  const p = {\n    x: 0,\n    y: 0,\n  };\n  let rx, ry, s, t;\n\n  for (s = 1, t = index; s < n; s *= 2) {\n    rx = 1 & Number(t / BigInt(2));\n    ry = 1 & Number(t ^ BigInt(rx));\n    rotate(s, p, rx, ry);\n    p.x += s * rx;\n    p.y += s * ry;\n    t /= BigInt(4);\n  }\n\n  return [p.x, p.y];\n};\n\n/**\n * @private\n */\nfunction rotate(n, p, rx, ry) {\n  if (ry !== 0) {\n    return;\n  }\n\n  if (rx === 1) {\n    p.x = n - 1 - p.x;\n    p.y = n - 1 - p.y;\n  }\n\n  const t = p.x;\n  p.x = p.y;\n  p.y = t;\n}\n\nexport default HilbertOrder;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * Default settings for accessing the iTwin platform.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @see ITwinData\n * @namespace ITwinPlatform\n */\nconst ITwinPlatform = {};\n\n/**\n * Status states for a mesh-export export.\n * Valid values are: <code>NotStarted</code>, <code>InProgress</code>, <code>Complete</code>, <code>Invalid</code>\n * @enum {string}\n */\nITwinPlatform.ExportStatus = Object.freeze({\n  NotStarted: \"NotStarted\",\n  InProgress: \"InProgress\",\n  Complete: \"Complete\",\n  Invalid: \"Invalid\",\n});\n\n/**\n * Types of mesh-export exports. CesiumJS only supports loading <code>3DTILES</code> type exports.\n * Valid values are: <code>IMODEL</code>, <code>CESIUM</code>, <code>3DTILES</code>\n * @enum {string}\n */\nITwinPlatform.ExportType = Object.freeze({\n  IMODEL: \"IMODEL\",\n  CESIUM: \"CESIUM\",\n  \"3DTILES\": \"3DTILES\",\n});\n\n/**\n * Types of Reality data. This is a partial list of types we know we can support\n *\n * @see https://developer.bentley.com/apis/reality-management/rm-rd-details/#types\n * @enum {string}\n */\nITwinPlatform.RealityDataType = Object.freeze({\n  Cesium3DTiles: \"Cesium3DTiles\",\n  PNTS: \"PNTS\",\n  RealityMesh3DTiles: \"RealityMesh3DTiles\",\n  Terrain3DTiles: \"Terrain3DTiles\",\n  KML: \"KML\",\n  GeoJSON: \"GeoJSON\",\n  Unstructured: \"Unstructured\",\n});\n\n/**\n * Gets or sets the default iTwin access token. This token should have the <code>itwin-platform</code> scope.\n *\n * This value will be ignored if {@link ITwinPlatform.defaultShareKey} is defined.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @type {string|undefined}\n */\nITwinPlatform.defaultAccessToken = undefined;\n\n/**\n * Gets or sets the default iTwin share key. If this value is provided it will override {@link ITwinPlatform.defaultAccessToken} in all requests.\n *\n * Share keys can be generated using the iTwin Shares api\n * https://developer.bentley.com/apis/access-control-v2/operations/create-itwin-share/\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @type {string|undefined}\n */\nITwinPlatform.defaultShareKey = undefined;\n\n/**\n * Create the necessary Authorization header based on which key/token is set.\n * If the {@link ITwinPlatform.defaultShareKey} is set it takes precedence and\n * will be used regardless if the {@link ITwinPlatform.defaultAccessToken} is set\n * @private\n * @returns {string} full auth header with basic/bearer method\n */\nITwinPlatform._getAuthorizationHeader = function () {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(ITwinPlatform.defaultAccessToken) &&\n    !defined(ITwinPlatform.defaultShareKey)\n  ) {\n    throw new DeveloperError(\n      \"Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (defined(ITwinPlatform.defaultShareKey)) {\n    return `Basic ${ITwinPlatform.defaultShareKey}`;\n  }\n  return `Bearer ${ITwinPlatform.defaultAccessToken}`;\n};\n\n/**\n * Gets or sets the default iTwin API endpoint.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @type {string|Resource}\n * @default \"https://api.bentley.com\"\n */\nITwinPlatform.apiEndpoint = new Resource({\n  url: \"https://api.bentley.com\",\n});\n\n/**\n * @typedef {object} ExportRequest\n * @private\n * @property {string} iModelId\n * @property {string} changesetId\n * @property {ITwinPlatform.ExportType} exportType Type of the export. CesiumJS only supports the 3DTILES type\n */\n\n/**\n * @typedef {object} Link\n * @private\n * @property {string} href\n */\n\n/**\n * @typedef {object} ExportRepresentation\n * The export objects from get-exports when using return=representation\n * @private\n * @property {string} id Export id\n * @property {string} displayName Name of the iModel\n * @property {ITwinPlatform.ExportStatus} status Status of this export\n * @property {string} lastModified\n * @property {ExportRequest} request Object containing info about the export itself\n * @property {{mesh: Link}} _links Object containing relevant links. For Exports this includes the access url for the mesh itself\n */\n\n/**\n * @typedef {object} GetExportsResponse\n * @private\n * @property {ExportRepresentation[]} exports The list of exports for the current page\n * @property {{self: Link, next: Link | undefined, prev: Link | undefined}} _links Pagination links\n */\n\n/**\n * Get the list of exports for the specified iModel at it's most current version.\n * This will only return the top 5 exports with {@link ITwinPlatform.ExportType} of <code>3DTILES</code>.\n *\n * @private\n *\n * @param {string} iModelId iModel id\n * @param {string} [changesetId] The id of the changeset to filter results by. If not provided, exports from the latest available changesets will be returned.\n * @returns {Promise<GetExportsResponse>}\n *\n * @throws {RuntimeError} If the iTwin API request is not successful\n */\nITwinPlatform.getExports = async function (iModelId, changesetId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"iModelId\", iModelId);\n  if (defined(changesetId)) {\n    Check.typeOf.string(\"changesetId\", changesetId);\n  }\n  if (\n    !defined(ITwinPlatform.defaultAccessToken) &&\n    !defined(ITwinPlatform.defaultShareKey)\n  ) {\n    throw new DeveloperError(\n      \"Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const resource = new Resource({\n    url: `${ITwinPlatform.apiEndpoint}mesh-export`,\n    headers: {\n      Authorization: ITwinPlatform._getAuthorizationHeader(),\n      Accept: \"application/vnd.bentley.itwin-platform.v1+json\",\n      Prefer: \"return=representation\",\n    },\n    queryParameters: {\n      iModelId: iModelId,\n      exportType: ITwinPlatform.ExportType[\"3DTILES\"],\n      // With the export auto-generation it will auto-delete the 6th export so\n      // there should never be more than 5 results. Just request them all and parse\n      // for ones that are COMPLETE\n      $top: \"5\",\n      client: \"CesiumJS\",\n    },\n  });\n  /* global CESIUM_VERSION */\n  if (typeof CESIUM_VERSION !== \"undefined\") {\n    resource.appendQueryParameters({ clientVersion: CESIUM_VERSION });\n  }\n  if (defined(changesetId) && changesetId !== \"\") {\n    resource.appendQueryParameters({ changesetId: changesetId });\n  }\n\n  try {\n    const response = await resource.fetchJson();\n    return response;\n  } catch (error) {\n    const result = JSON.parse(error.response);\n    if (error.statusCode === 401) {\n      const code = result.error.details?.[0].code ?? \"\";\n      throw new RuntimeError(\n        `Unauthorized, bad token, wrong scopes or headers bad. ${code}`,\n      );\n    } else if (error.statusCode === 403) {\n      console.error(result.error.code, result.error.message);\n      throw new RuntimeError(\"Not allowed, forbidden\");\n    } else if (error.statusCode === 422) {\n      throw new RuntimeError(\n        `Unprocessable Entity:${result.error.code} ${result.error.message}`,\n      );\n    } else if (error.statusCode === 429) {\n      throw new RuntimeError(\"Too many requests\");\n    }\n    throw new RuntimeError(`Unknown request failure ${error.statusCode}`);\n  }\n};\n\n/**\n * @typedef {object} RealityDataExtent\n * @private\n * @property {{latitude: number, longitude: number}} southWest\n * @property {{latitude: number, longitude: number}} northEast\n */\n\n/**\n * @typedef {object} RealityDataRepresentation\n * @private\n * @property {string} id \"95d8dccd-d89e-4287-bb5f-3219acbc71ae\",\n * @property {string} displayName \"Name of reality data\",\n * @property {string} dataset \"Dataset\",\n * @property {string} group \"73d09423-28c3-4fdb-ab4a-03a47a5b04f8\",\n * @property {string} description \"Description of reality data\",\n * @property {string} rootDocument \"Directory/SubDirectory/realityData.3mx\",\n * @property {number} size 6521212,\n * @property {string} classification \"Model\",\n * @property {ITwinPlatform.RealityDataType} type \"3MX\",\n * @property {{startDateTime: string, endDateTime: string, acquirer: string}} acquisition\n * @property {RealityDataExtent} extent\n * @property {boolean} authoring false,\n * @property {string} dataCenterLocation \"North Europe\",\n * @property {string} modifiedDateTime \"2021-04-09T19:03:12Z\",\n * @property {string} lastAccessedDateTime \"2021-04-09T00:00:00Z\",\n * @property {string} createdDateTime \"2021-02-22T20:03:40Z\",\n * @property {string} ownerId \"f1d49cc7-f9b3-494f-9c67-563ea5597063\",\n */\n\n/**\n * Load the full metadata for the given iTwin id and reality data id.\n *\n * @private\n *\n * @param {string} iTwinId The id of the iTwin to load data from\n * @param {string} realityDataId The id of the reality data to load\n * @returns {Promise<RealityDataRepresentation>}\n */\nITwinPlatform.getRealityDataMetadata = async function (iTwinId, realityDataId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"iTwinId\", iTwinId);\n  Check.typeOf.string(\"realityDataId\", realityDataId);\n  if (\n    !defined(ITwinPlatform.defaultAccessToken) &&\n    !defined(ITwinPlatform.defaultShareKey)\n  ) {\n    throw new DeveloperError(\n      \"Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const resource = new Resource({\n    url: `${ITwinPlatform.apiEndpoint}reality-management/reality-data/${realityDataId}`,\n    headers: {\n      Authorization: ITwinPlatform._getAuthorizationHeader(),\n      Accept: \"application/vnd.bentley.itwin-platform.v1+json\",\n    },\n    queryParameters: { iTwinId: iTwinId },\n  });\n\n  try {\n    const response = await resource.fetchJson();\n    return response.realityData;\n  } catch (error) {\n    const result = JSON.parse(error.response);\n    if (error.statusCode === 401) {\n      const code = result.error.details?.[0].code ?? \"\";\n      throw new RuntimeError(\n        `Unauthorized, bad token, wrong scopes or headers bad. ${code}`,\n      );\n    } else if (error.statusCode === 403) {\n      console.error(result.error.code, result.error.message);\n      throw new RuntimeError(\"Not allowed, forbidden\");\n    } else if (error.statusCode === 404) {\n      throw new RuntimeError(\n        `Reality data not found: ${iTwinId}, ${realityDataId}`,\n      );\n    } else if (error.statusCode === 422) {\n      throw new RuntimeError(\n        `Unprocessable Entity:${result.error.code} ${result.error.message}`,\n      );\n    } else if (error.statusCode === 429) {\n      throw new RuntimeError(\"Too many requests\");\n    }\n    throw new RuntimeError(`Unknown request failure ${error.statusCode}`);\n  }\n};\n\n/**\n * Request the access url for the given iTwin id, reality data id and root document.\n * The root document can be requested from the list using <code>return=representation</code>\n * or the metadata route from {@link ITwinPlatform.getRealityDataMetadata}\n *\n * @private\n *\n * @param {string} iTwinId The id of the iTwin to load data from\n * @param {string} realityDataId The id of the reality data to load\n * @param {string} rootDocument The path of the root document for this reality data\n * @returns {Promise<string>}\n */\nITwinPlatform.getRealityDataURL = async function (\n  iTwinId,\n  realityDataId,\n  rootDocument,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"iTwinId\", iTwinId);\n  Check.typeOf.string(\"realityDataId\", realityDataId);\n  Check.typeOf.string(\"rootDocument\", rootDocument);\n  if (\n    !defined(ITwinPlatform.defaultAccessToken) &&\n    !defined(ITwinPlatform.defaultShareKey)\n  ) {\n    throw new DeveloperError(\n      \"Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const resource = new Resource({\n    url: `${ITwinPlatform.apiEndpoint}reality-management/reality-data/${realityDataId}/readaccess`,\n    headers: {\n      Authorization: ITwinPlatform._getAuthorizationHeader(),\n      Accept: \"application/vnd.bentley.itwin-platform.v1+json\",\n    },\n    queryParameters: { iTwinId: iTwinId },\n  });\n\n  try {\n    const result = await resource.fetchJson();\n\n    const containerUrl = result._links.containerUrl.href;\n    const tilesetUrl = new URL(containerUrl);\n    tilesetUrl.pathname = `${tilesetUrl.pathname}/${rootDocument}`;\n\n    return tilesetUrl.toString();\n  } catch (error) {\n    const result = JSON.parse(error.response);\n    if (error.statusCode === 401) {\n      const code = result.error.details?.[0].code ?? \"\";\n      throw new RuntimeError(\n        `Unauthorized, bad token, wrong scopes or headers bad. ${code}`,\n      );\n    } else if (error.statusCode === 403) {\n      console.error(result.error.code, result.error.message);\n      throw new RuntimeError(\"Not allowed, forbidden\");\n    } else if (error.statusCode === 404) {\n      throw new RuntimeError(\n        `Reality data not found: ${iTwinId}, ${realityDataId}`,\n      );\n    } else if (error.statusCode === 422) {\n      throw new RuntimeError(\n        `Unprocessable Entity:${result.error.code} ${result.error.message}`,\n      );\n    } else if (error.statusCode === 429) {\n      throw new RuntimeError(\"Too many requests\");\n    }\n    throw new RuntimeError(`Unknown request failure ${error.statusCode}`);\n  }\n};\n\nexport default ITwinPlatform;\n","import defined from \"./defined.js\";\nimport IauOrientationParameters from \"./IauOrientationParameters.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport TimeConstants from \"./TimeConstants.js\";\n\n/**\n * This is a collection of the orientation information available for central bodies.\n * The data comes from the Report of the IAU/IAG Working Group on Cartographic\n * Coordinates and Rotational Elements: 2000.\n *\n * @namespace Iau2000Orientation\n *\n * @private\n */\nconst Iau2000Orientation = {};\n\nconst TdtMinusTai = 32.184;\nconst J2000d = 2451545.0;\n\nconst c1 = -0.0529921;\nconst c2 = -0.1059842;\nconst c3 = 13.0120009;\nconst c4 = 13.3407154;\nconst c5 = 0.9856003;\nconst c6 = 26.4057084;\nconst c7 = 13.064993;\nconst c8 = 0.3287146;\nconst c9 = 1.7484877;\nconst c10 = -0.1589763;\nconst c11 = 0.0036096;\nconst c12 = 0.1643573;\nconst c13 = 12.9590088;\nlet dateTT = new JulianDate();\n\n/**\n * Compute the orientation parameters for the Moon.\n *\n * @param {JulianDate} [date=JulianDate.now()] The date to evaluate the parameters.\n * @param {IauOrientationParameters} [result] The object onto which to store the result.\n * @returns {IauOrientationParameters} The modified result parameter or a new instance representing the orientation of the Earth's Moon.\n * @private\n */\nIau2000Orientation.ComputeMoon = function (date, result) {\n  if (!defined(date)) {\n    date = JulianDate.now();\n  }\n\n  dateTT = JulianDate.addSeconds(date, TdtMinusTai, dateTT);\n  const d = JulianDate.totalDays(dateTT) - J2000d;\n  const T = d / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n\n  const E1 = (125.045 + c1 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E2 = (250.089 + c2 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E3 = (260.008 + c3 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E4 = (176.625 + c4 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E5 = (357.529 + c5 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E6 = (311.589 + c6 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E7 = (134.963 + c7 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E8 = (276.617 + c8 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E9 = (34.226 + c9 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E10 = (15.134 + c10 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E11 = (119.743 + c11 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E12 = (239.961 + c12 * d) * CesiumMath.RADIANS_PER_DEGREE;\n  const E13 = (25.053 + c13 * d) * CesiumMath.RADIANS_PER_DEGREE;\n\n  const sinE1 = Math.sin(E1);\n  const sinE2 = Math.sin(E2);\n  const sinE3 = Math.sin(E3);\n  const sinE4 = Math.sin(E4);\n  const sinE5 = Math.sin(E5);\n  const sinE6 = Math.sin(E6);\n  const sinE7 = Math.sin(E7);\n  const sinE8 = Math.sin(E8);\n  const sinE9 = Math.sin(E9);\n  const sinE10 = Math.sin(E10);\n  const sinE11 = Math.sin(E11);\n  const sinE12 = Math.sin(E12);\n  const sinE13 = Math.sin(E13);\n\n  const cosE1 = Math.cos(E1);\n  const cosE2 = Math.cos(E2);\n  const cosE3 = Math.cos(E3);\n  const cosE4 = Math.cos(E4);\n  const cosE5 = Math.cos(E5);\n  const cosE6 = Math.cos(E6);\n  const cosE7 = Math.cos(E7);\n  const cosE8 = Math.cos(E8);\n  const cosE9 = Math.cos(E9);\n  const cosE10 = Math.cos(E10);\n  const cosE11 = Math.cos(E11);\n  const cosE12 = Math.cos(E12);\n  const cosE13 = Math.cos(E13);\n\n  const rightAscension =\n    (269.9949 +\n      0.0031 * T -\n      3.8787 * sinE1 -\n      0.1204 * sinE2 +\n      0.07 * sinE3 -\n      0.0172 * sinE4 +\n      0.0072 * sinE6 -\n      0.0052 * sinE10 +\n      0.0043 * sinE13) *\n    CesiumMath.RADIANS_PER_DEGREE;\n  const declination =\n    (66.5392 +\n      0.013 * T +\n      1.5419 * cosE1 +\n      0.0239 * cosE2 -\n      0.0278 * cosE3 +\n      0.0068 * cosE4 -\n      0.0029 * cosE6 +\n      0.0009 * cosE7 +\n      0.0008 * cosE10 -\n      0.0009 * cosE13) *\n    CesiumMath.RADIANS_PER_DEGREE;\n  const rotation =\n    (38.3213 +\n      13.17635815 * d -\n      1.4e-12 * d * d +\n      3.561 * sinE1 +\n      0.1208 * sinE2 -\n      0.0642 * sinE3 +\n      0.0158 * sinE4 +\n      0.0252 * sinE5 -\n      0.0066 * sinE6 -\n      0.0047 * sinE7 -\n      0.0046 * sinE8 +\n      0.0028 * sinE9 +\n      0.0052 * sinE10 +\n      0.004 * sinE11 +\n      0.0019 * sinE12 -\n      0.0044 * sinE13) *\n    CesiumMath.RADIANS_PER_DEGREE;\n\n  const rotationRate =\n    ((13.17635815 -\n      1.4e-12 * (2.0 * d) +\n      3.561 * cosE1 * c1 +\n      0.1208 * cosE2 * c2 -\n      0.0642 * cosE3 * c3 +\n      0.0158 * cosE4 * c4 +\n      0.0252 * cosE5 * c5 -\n      0.0066 * cosE6 * c6 -\n      0.0047 * cosE7 * c7 -\n      0.0046 * cosE8 * c8 +\n      0.0028 * cosE9 * c9 +\n      0.0052 * cosE10 * c10 +\n      0.004 * cosE11 * c11 +\n      0.0019 * cosE12 * c12 -\n      0.0044 * cosE13 * c13) /\n      86400.0) *\n    CesiumMath.RADIANS_PER_DEGREE;\n\n  if (!defined(result)) {\n    result = new IauOrientationParameters();\n  }\n\n  result.rightAscension = rightAscension;\n  result.declination = declination;\n  result.rotation = rotation;\n  result.rotationRate = rotationRate;\n\n  return result;\n};\nexport default Iau2000Orientation;\n","import buildModuleUrl from \"./buildModuleUrl.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Iau2006XysSample from \"./Iau2006XysSample.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport Resource from \"./Resource.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\n/**\n * A set of IAU2006 XYS data that is used to evaluate the transformation between the International\n * Celestial Reference Frame (ICRF) and the International Terrestrial Reference Frame (ITRF).\n *\n * @alias Iau2006XysData\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Resource|string} [options.xysFileUrlTemplate='Assets/IAU2006_XYS/IAU2006_XYS_{0}.json'] A template URL for obtaining the XYS data.  In the template,\n *                 `{0}` will be replaced with the file index.\n * @param {number} [options.interpolationOrder=9] The order of interpolation to perform on the XYS data.\n * @param {number} [options.sampleZeroJulianEphemerisDate=2442396.5] The Julian ephemeris date (JED) of the\n *                 first XYS sample.\n * @param {number} [options.stepSizeDays=1.0] The step size, in days, between successive XYS samples.\n * @param {number} [options.samplesPerXysFile=1000] The number of samples in each XYS file.\n * @param {number} [options.totalSamples=27426] The total number of samples in all XYS files.\n *\n * @private\n */\nfunction Iau2006XysData(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._xysFileUrlTemplate = Resource.createIfNeeded(\n    options.xysFileUrlTemplate,\n  );\n  this._interpolationOrder = options.interpolationOrder ?? 9;\n  this._sampleZeroJulianEphemerisDate =\n    options.sampleZeroJulianEphemerisDate ?? 2442396.5;\n  this._sampleZeroDateTT = new JulianDate(\n    this._sampleZeroJulianEphemerisDate,\n    0.0,\n    TimeStandard.TAI,\n  );\n  this._stepSizeDays = options.stepSizeDays ?? 1.0;\n  this._samplesPerXysFile = options.samplesPerXysFile ?? 1000;\n  this._totalSamples = options.totalSamples ?? 27426;\n  this._samples = new Array(this._totalSamples * 3);\n  this._chunkDownloadsInProgress = [];\n\n  const order = this._interpolationOrder;\n\n  // Compute denominators and X values for interpolation.\n  const denom = (this._denominators = new Array(order + 1));\n  const xTable = (this._xTable = new Array(order + 1));\n\n  const stepN = Math.pow(this._stepSizeDays, order);\n\n  for (let i = 0; i <= order; ++i) {\n    denom[i] = stepN;\n    xTable[i] = i * this._stepSizeDays;\n\n    for (let j = 0; j <= order; ++j) {\n      if (j !== i) {\n        denom[i] *= i - j;\n      }\n    }\n\n    denom[i] = 1.0 / denom[i];\n  }\n\n  // Allocate scratch arrays for interpolation.\n  this._work = new Array(order + 1);\n  this._coef = new Array(order + 1);\n}\n\nconst julianDateScratch = new JulianDate(0, 0.0, TimeStandard.TAI);\n\nfunction getDaysSinceEpoch(xys, dayTT, secondTT) {\n  const dateTT = julianDateScratch;\n  dateTT.dayNumber = dayTT;\n  dateTT.secondsOfDay = secondTT;\n  return JulianDate.daysDifference(dateTT, xys._sampleZeroDateTT);\n}\n\n/**\n * Preloads XYS data for a specified date range.\n *\n * @param {number} startDayTT The Julian day number of the beginning of the interval to preload, expressed in\n *                 the Terrestrial Time (TT) time standard.\n * @param {number} startSecondTT The seconds past noon of the beginning of the interval to preload, expressed in\n *                 the Terrestrial Time (TT) time standard.\n * @param {number} stopDayTT The Julian day number of the end of the interval to preload, expressed in\n *                 the Terrestrial Time (TT) time standard.\n * @param {number} stopSecondTT The seconds past noon of the end of the interval to preload, expressed in\n *                 the Terrestrial Time (TT) time standard.\n * @returns {Promise<void>} A promise that, when resolved, indicates that the requested interval has been\n *                    preloaded.\n */\nIau2006XysData.prototype.preload = function (\n  startDayTT,\n  startSecondTT,\n  stopDayTT,\n  stopSecondTT,\n) {\n  const startDaysSinceEpoch = getDaysSinceEpoch(\n    this,\n    startDayTT,\n    startSecondTT,\n  );\n  const stopDaysSinceEpoch = getDaysSinceEpoch(this, stopDayTT, stopSecondTT);\n\n  let startIndex =\n    (startDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) |\n    0;\n  if (startIndex < 0) {\n    startIndex = 0;\n  }\n\n  let stopIndex =\n    (stopDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) |\n    (0 + this._interpolationOrder);\n  if (stopIndex >= this._totalSamples) {\n    stopIndex = this._totalSamples - 1;\n  }\n\n  const startChunk = (startIndex / this._samplesPerXysFile) | 0;\n  const stopChunk = (stopIndex / this._samplesPerXysFile) | 0;\n\n  const promises = [];\n  for (let i = startChunk; i <= stopChunk; ++i) {\n    promises.push(requestXysChunk(this, i));\n  }\n\n  return Promise.all(promises);\n};\n\n/**\n * Computes the XYS values for a given date by interpolating.  If the required data is not yet downloaded,\n * this method will return undefined.\n *\n * @param {number} dayTT The Julian day number for which to compute the XYS value, expressed in\n *                 the Terrestrial Time (TT) time standard.\n * @param {number} secondTT The seconds past noon of the date for which to compute the XYS value, expressed in\n *                 the Terrestrial Time (TT) time standard.\n * @param {Iau2006XysSample} [result] The instance to which to copy the interpolated result.  If this parameter\n *                           is undefined, a new instance is allocated and returned.\n * @returns {Iau2006XysSample} The interpolated XYS values, or undefined if the required data for this\n *                             computation has not yet been downloaded.\n *\n * @see Iau2006XysData#preload\n */\nIau2006XysData.prototype.computeXysRadians = function (\n  dayTT,\n  secondTT,\n  result,\n) {\n  const daysSinceEpoch = getDaysSinceEpoch(this, dayTT, secondTT);\n  if (daysSinceEpoch < 0.0) {\n    // Can't evaluate prior to the epoch of the data.\n    return undefined;\n  }\n\n  const centerIndex = (daysSinceEpoch / this._stepSizeDays) | 0;\n  if (centerIndex >= this._totalSamples) {\n    // Can't evaluate after the last sample in the data.\n    return undefined;\n  }\n\n  const degree = this._interpolationOrder;\n\n  let firstIndex = centerIndex - ((degree / 2) | 0);\n  if (firstIndex < 0) {\n    firstIndex = 0;\n  }\n  let lastIndex = firstIndex + degree;\n  if (lastIndex >= this._totalSamples) {\n    lastIndex = this._totalSamples - 1;\n    firstIndex = lastIndex - degree;\n    if (firstIndex < 0) {\n      firstIndex = 0;\n    }\n  }\n\n  // Are all the samples we need present?\n  // We can assume so if the first and last are present\n  let isDataMissing = false;\n  const samples = this._samples;\n  if (!defined(samples[firstIndex * 3])) {\n    requestXysChunk(this, (firstIndex / this._samplesPerXysFile) | 0);\n    isDataMissing = true;\n  }\n\n  if (!defined(samples[lastIndex * 3])) {\n    requestXysChunk(this, (lastIndex / this._samplesPerXysFile) | 0);\n    isDataMissing = true;\n  }\n\n  if (isDataMissing) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    result = new Iau2006XysSample(0.0, 0.0, 0.0);\n  } else {\n    result.x = 0.0;\n    result.y = 0.0;\n    result.s = 0.0;\n  }\n\n  const x = daysSinceEpoch - firstIndex * this._stepSizeDays;\n\n  const work = this._work;\n  const denom = this._denominators;\n  const coef = this._coef;\n  const xTable = this._xTable;\n\n  let i, j;\n  for (i = 0; i <= degree; ++i) {\n    work[i] = x - xTable[i];\n  }\n\n  for (i = 0; i <= degree; ++i) {\n    coef[i] = 1.0;\n\n    for (j = 0; j <= degree; ++j) {\n      if (j !== i) {\n        coef[i] *= work[j];\n      }\n    }\n\n    coef[i] *= denom[i];\n\n    let sampleIndex = (firstIndex + i) * 3;\n    result.x += coef[i] * samples[sampleIndex++];\n    result.y += coef[i] * samples[sampleIndex++];\n    result.s += coef[i] * samples[sampleIndex];\n  }\n\n  return result;\n};\n\nfunction requestXysChunk(xysData, chunkIndex) {\n  if (xysData._chunkDownloadsInProgress[chunkIndex]) {\n    // Chunk has already been requested.\n    return xysData._chunkDownloadsInProgress[chunkIndex];\n  }\n\n  let chunkUrl;\n  const xysFileUrlTemplate = xysData._xysFileUrlTemplate;\n  if (defined(xysFileUrlTemplate)) {\n    chunkUrl = xysFileUrlTemplate.getDerivedResource({\n      templateValues: {\n        0: chunkIndex,\n      },\n    });\n  } else {\n    chunkUrl = new Resource({\n      url: buildModuleUrl(`Assets/IAU2006_XYS/IAU2006_XYS_${chunkIndex}.json`),\n    });\n  }\n\n  const promise = chunkUrl.fetchJson().then(function (chunk) {\n    xysData._chunkDownloadsInProgress[chunkIndex] = false;\n\n    const samples = xysData._samples;\n    const newSamples = chunk.samples;\n    const startIndex = chunkIndex * xysData._samplesPerXysFile * 3;\n\n    for (let i = 0, len = newSamples.length; i < len; ++i) {\n      samples[startIndex + i] = newSamples[i];\n    }\n  });\n  xysData._chunkDownloadsInProgress[chunkIndex] = promise;\n\n  return promise;\n}\nexport default Iau2006XysData;\n","/**\n * An IAU 2006 XYS value sampled at a particular time.\n *\n * @alias Iau2006XysSample\n * @constructor\n *\n * @param {number} x The X value.\n * @param {number} y The Y value.\n * @param {number} s The S value.\n *\n * @private\n */\nfunction Iau2006XysSample(x, y, s) {\n  /**\n   * The X value.\n   * @type {number}\n   */\n  this.x = x;\n\n  /**\n   * The Y value.\n   * @type {number}\n   */\n  this.y = y;\n\n  /**\n   * The S value.\n   * @type {number}\n   */\n  this.s = s;\n}\nexport default Iau2006XysSample;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport Iau2000Orientation from \"./Iau2000Orientation.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Quaternion from \"./Quaternion.js\";\n\n/**\n * The Axes representing the orientation of a Globe as represented by the data\n * from the IAU/IAG Working Group reports on rotational elements.\n * @alias IauOrientationAxes\n * @constructor\n *\n * @param {IauOrientationAxes.ComputeFunction} [computeFunction] The function that computes the {@link IauOrientationParameters} given a {@link JulianDate}.\n *\n * @see Iau2000Orientation\n *\n * @private\n */\nfunction IauOrientationAxes(computeFunction) {\n  if (!defined(computeFunction) || typeof computeFunction !== \"function\") {\n    computeFunction = Iau2000Orientation.ComputeMoon;\n  }\n\n  this._computeFunction = computeFunction;\n}\n\nconst xAxisScratch = new Cartesian3();\nconst yAxisScratch = new Cartesian3();\nconst zAxisScratch = new Cartesian3();\n\nfunction computeRotationMatrix(alpha, delta, result) {\n  const xAxis = xAxisScratch;\n  xAxis.x = Math.cos(alpha + CesiumMath.PI_OVER_TWO);\n  xAxis.y = Math.sin(alpha + CesiumMath.PI_OVER_TWO);\n  xAxis.z = 0.0;\n\n  const cosDec = Math.cos(delta);\n\n  const zAxis = zAxisScratch;\n  zAxis.x = cosDec * Math.cos(alpha);\n  zAxis.y = cosDec * Math.sin(alpha);\n  zAxis.z = Math.sin(delta);\n\n  const yAxis = Cartesian3.cross(zAxis, xAxis, yAxisScratch);\n\n  if (!defined(result)) {\n    result = new Matrix3();\n  }\n\n  result[0] = xAxis.x;\n  result[1] = yAxis.x;\n  result[2] = zAxis.x;\n  result[3] = xAxis.y;\n  result[4] = yAxis.y;\n  result[5] = zAxis.y;\n  result[6] = xAxis.z;\n  result[7] = yAxis.z;\n  result[8] = zAxis.z;\n\n  return result;\n}\n\nconst rotMtxScratch = new Matrix3();\nconst quatScratch = new Quaternion();\n\n/**\n * Computes a rotation from ICRF to a Globe's Fixed axes.\n *\n * @param {JulianDate} date The date to evaluate the matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new instance of the rotation from ICRF to Fixed.\n */\nIauOrientationAxes.prototype.evaluate = function (date, result) {\n  if (!defined(date)) {\n    date = JulianDate.now();\n  }\n\n  const alphaDeltaW = this._computeFunction(date);\n  const precMtx = computeRotationMatrix(\n    alphaDeltaW.rightAscension,\n    alphaDeltaW.declination,\n    result,\n  );\n\n  const rot = CesiumMath.zeroToTwoPi(alphaDeltaW.rotation);\n  const quat = Quaternion.fromAxisAngle(Cartesian3.UNIT_Z, rot, quatScratch);\n  const rotMtx = Matrix3.fromQuaternion(\n    Quaternion.conjugate(quat, quat),\n    rotMtxScratch,\n  );\n\n  const cbi2cbf = Matrix3.multiply(rotMtx, precMtx, precMtx);\n  return cbi2cbf;\n};\n\n/**\n * A function that computes the {@link IauOrientationParameters} for a {@link JulianDate}.\n * @callback IauOrientationAxes.ComputeFunction\n * @param {JulianDate} date The date to evaluate the parameters.\n * @returns {IauOrientationParameters} The orientation parameters.\n * @private\n */\nexport default IauOrientationAxes;\n","/**\n * A structure containing the orientation data computed at a particular time. The data\n * represents the direction of the pole of rotation and the rotation about that pole.\n * <p>\n * These parameters correspond to the parameters in the Report from the IAU/IAG Working Group\n * except that they are expressed in radians.\n * </p>\n *\n * @namespace IauOrientationParameters\n *\n * @private\n */\nfunction IauOrientationParameters(\n  rightAscension,\n  declination,\n  rotation,\n  rotationRate,\n) {\n  /**\n   * The right ascension of the north pole of the body with respect to\n   * the International Celestial Reference Frame, in radians.\n   * @type {number}\n   *\n   * @private\n   */\n  this.rightAscension = rightAscension;\n\n  /**\n   * The declination of the north pole of the body with respect to\n   * the International Celestial Reference Frame, in radians.\n   * @type {number}\n   *\n   * @private\n   */\n  this.declination = declination;\n\n  /**\n   * The rotation about the north pole used to align a set of axes with\n   * the meridian defined by the IAU report, in radians.\n   * @type {number}\n   *\n   * @private\n   */\n  this.rotation = rotation;\n\n  /**\n   * The instantaneous rotation rate about the north pole, in radians per second.\n   * @type {number}\n   *\n   * @private\n   */\n  this.rotationRate = rotationRate;\n}\nexport default IauOrientationParameters;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * Constants for WebGL index datatypes.  These corresponds to the\n * <code>type</code> parameter of {@link http://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawElements.xml|drawElements}.\n *\n * @enum {number}\n */\nconst IndexDatatype = {\n  /**\n   * 8-bit unsigned byte corresponding to <code>UNSIGNED_BYTE</code> and the type\n   * of an element in <code>Uint8Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\n\n  /**\n   * 16-bit unsigned short corresponding to <code>UNSIGNED_SHORT</code> and the type\n   * of an element in <code>Uint16Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\n\n  /**\n   * 32-bit unsigned int corresponding to <code>UNSIGNED_INT</code> and the type\n   * of an element in <code>Uint32Array</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\n};\n\n/**\n * Returns the size, in bytes, of the corresponding datatype.\n *\n * @param {IndexDatatype} indexDatatype The index datatype to get the size of.\n * @returns {number} The size in bytes.\n *\n * @example\n * // Returns 2\n * const size = Cesium.IndexDatatype.getSizeInBytes(Cesium.IndexDatatype.UNSIGNED_SHORT);\n */\nIndexDatatype.getSizeInBytes = function (indexDatatype) {\n  switch (indexDatatype) {\n    case IndexDatatype.UNSIGNED_BYTE:\n      return Uint8Array.BYTES_PER_ELEMENT;\n    case IndexDatatype.UNSIGNED_SHORT:\n      return Uint16Array.BYTES_PER_ELEMENT;\n    case IndexDatatype.UNSIGNED_INT:\n      return Uint32Array.BYTES_PER_ELEMENT;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"indexDatatype is required and must be a valid IndexDatatype constant.\",\n  );\n  //>>includeEnd('debug');\n};\n\n/**\n * Gets the datatype with a given size in bytes.\n *\n * @param {number} sizeInBytes The size of a single index in bytes.\n * @returns {IndexDatatype} The index datatype with the given size.\n */\nIndexDatatype.fromSizeInBytes = function (sizeInBytes) {\n  switch (sizeInBytes) {\n    case 2:\n      return IndexDatatype.UNSIGNED_SHORT;\n    case 4:\n      return IndexDatatype.UNSIGNED_INT;\n    case 1:\n      return IndexDatatype.UNSIGNED_BYTE;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\n        \"Size in bytes cannot be mapped to an IndexDatatype\",\n      );\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Validates that the provided index datatype is a valid {@link IndexDatatype}.\n *\n * @param {IndexDatatype} indexDatatype The index datatype to validate.\n * @returns {boolean} <code>true</code> if the provided index datatype is a valid value; otherwise, <code>false</code>.\n *\n * @example\n * if (!Cesium.IndexDatatype.validate(indexDatatype)) {\n *   throw new Cesium.DeveloperError('indexDatatype must be a valid value.');\n * }\n */\nIndexDatatype.validate = function (indexDatatype) {\n  return (\n    defined(indexDatatype) &&\n    (indexDatatype === IndexDatatype.UNSIGNED_BYTE ||\n      indexDatatype === IndexDatatype.UNSIGNED_SHORT ||\n      indexDatatype === IndexDatatype.UNSIGNED_INT)\n  );\n};\n\n/**\n * Creates a typed array that will store indices, using either <code><Uint16Array</code>\n * or <code>Uint32Array</code> depending on the number of vertices.\n *\n * @param {number} numberOfVertices Number of vertices that the indices will reference.\n * @param {number|Array} indicesLengthOrArray Passed through to the typed array constructor.\n * @returns {Uint16Array|Uint32Array} A <code>Uint16Array</code> or <code>Uint32Array</code> constructed with <code>indicesLengthOrArray</code>.\n *\n * @example\n * this.indices = Cesium.IndexDatatype.createTypedArray(positions.length / 3, numberOfIndices);\n */\nIndexDatatype.createTypedArray = function (\n  numberOfVertices,\n  indicesLengthOrArray,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(numberOfVertices)) {\n    throw new DeveloperError(\"numberOfVertices is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES) {\n    return new Uint32Array(indicesLengthOrArray);\n  }\n\n  return new Uint16Array(indicesLengthOrArray);\n};\n\n/**\n * Creates a typed array from a source array buffer.  The resulting typed array will store indices, using either <code><Uint16Array</code>\n * or <code>Uint32Array</code> depending on the number of vertices.\n *\n * @param {number} numberOfVertices Number of vertices that the indices will reference.\n * @param {ArrayBuffer} sourceArray Passed through to the typed array constructor.\n * @param {number} byteOffset Passed through to the typed array constructor.\n * @param {number} length Passed through to the typed array constructor.\n * @returns {Uint16Array|Uint32Array} A <code>Uint16Array</code> or <code>Uint32Array</code> constructed with <code>sourceArray</code>, <code>byteOffset</code>, and <code>length</code>.\n *\n */\nIndexDatatype.createTypedArrayFromArrayBuffer = function (\n  numberOfVertices,\n  sourceArray,\n  byteOffset,\n  length,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(numberOfVertices)) {\n    throw new DeveloperError(\"numberOfVertices is required.\");\n  }\n  if (!defined(sourceArray)) {\n    throw new DeveloperError(\"sourceArray is required.\");\n  }\n  if (!defined(byteOffset)) {\n    throw new DeveloperError(\"byteOffset is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES) {\n    return new Uint32Array(sourceArray, byteOffset, length);\n  }\n\n  return new Uint16Array(sourceArray, byteOffset, length);\n};\n\n/**\n * Gets the {@link IndexDatatype} for the provided TypedArray instance.\n *\n * @param {Uint8Array|Uint16Array|Uint32Array} array The typed array.\n * @returns {IndexDatatype} The IndexDatatype for the provided array, or undefined if the array is not a Uint8Array, Uint16Array, or Uint32Array.\n */\nIndexDatatype.fromTypedArray = function (array) {\n  if (array instanceof Uint8Array) {\n    return IndexDatatype.UNSIGNED_BYTE;\n  }\n  if (array instanceof Uint16Array) {\n    return IndexDatatype.UNSIGNED_SHORT;\n  }\n  if (array instanceof Uint32Array) {\n    return IndexDatatype.UNSIGNED_INT;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"array must be a Uint8Array, Uint16Array, or Uint32Array.\",\n  );\n  //>>includeEnd('debug');\n};\n\nexport default Object.freeze(IndexDatatype);\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * The interface for interpolation algorithms.\n *\n * @interface InterpolationAlgorithm\n *\n * @see LagrangePolynomialApproximation\n * @see LinearApproximation\n * @see HermitePolynomialApproximation\n */\nconst InterpolationAlgorithm = {};\n\n/**\n * Gets the name of this interpolation algorithm.\n * @type {string}\n */\nInterpolationAlgorithm.type = undefined;\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n * @function\n *\n * @param {number} degree The desired degree of interpolation.\n * @returns {number} The number of required data points needed for the desired degree of interpolation.\n */\nInterpolationAlgorithm.getRequiredDataPoints =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Performs zero order interpolation.\n * @function\n *\n * @param {number} x The independent variable for which the dependent variables will be interpolated.\n * @param {number[]} xTable The array of independent variables to use to interpolate.  The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {number[]} yTable The array of dependent variables to use to interpolate.  For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {number[]} [result] An existing array into which to store the result.\n *\n * @returns {number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nInterpolationAlgorithm.interpolateOrderZero =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Performs higher order interpolation.  Not all interpolators need to support high-order interpolation,\n * if this function remains undefined on implementing objects, interpolateOrderZero will be used instead.\n * @function\n * @param {number} x The independent variable for which the dependent variables will be interpolated.\n * @param {number[]} xTable The array of independent variables to use to interpolate.  The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {number[]} yTable The array of dependent variables to use to interpolate.  For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {number} inputOrder The number of derivatives supplied for input.\n * @param {number} outputOrder The number of derivatives desired for output.\n * @param {number[]} [result] An existing array into which to store the result.\n * @returns {number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nInterpolationAlgorithm.interpolate = DeveloperError.throwInstantiationError;\nexport default InterpolationAlgorithm;\n","/**\n * An enum describing the type of interpolation used in a glTF animation.\n *\n * @enum {number}\n *\n * @private\n */\nconst InterpolationType = {\n  STEP: 0,\n  LINEAR: 1,\n  CUBICSPLINE: 2,\n};\n\nexport default Object.freeze(InterpolationType);\n","/**\n * This enumerated type is used in determining where, relative to the frustum, an\n * object is located. The object can either be fully contained within the frustum (INSIDE),\n * partially inside the frustum and partially outside (INTERSECTING), or somewhere entirely\n * outside of the frustum's 6 planes (OUTSIDE).\n *\n * @enum {number}\n */\nconst Intersect = {\n  /**\n   * Represents that an object is not contained within the frustum.\n   *\n   * @type {number}\n   * @constant\n   */\n  OUTSIDE: -1,\n\n  /**\n   * Represents that an object intersects one of the frustum's planes.\n   *\n   * @type {number}\n   * @constant\n   */\n  INTERSECTING: 0,\n\n  /**\n   * Represents that an object is fully within the frustum.\n   *\n   * @type {number}\n   * @constant\n   */\n  INSIDE: 1,\n};\nexport default Object.freeze(Intersect);\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\nimport QuarticRealPolynomial from \"./QuarticRealPolynomial.js\";\nimport Ray from \"./Ray.js\";\n\n/**\n * Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids.\n *\n * @namespace IntersectionTests\n */\nconst IntersectionTests = {};\n\n/**\n * Computes the intersection of a ray and a plane.\n *\n * @param {Ray} ray The ray.\n * @param {Plane} plane The plane.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.rayPlane = function (ray, plane, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(ray)) {\n    throw new DeveloperError(\"ray is required.\");\n  }\n  if (!defined(plane)) {\n    throw new DeveloperError(\"plane is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  const origin = ray.origin;\n  const direction = ray.direction;\n  const normal = plane.normal;\n  const denominator = Cartesian3.dot(normal, direction);\n\n  if (Math.abs(denominator) < CesiumMath.EPSILON15) {\n    // Ray is parallel to plane.  The ray may be in the polygon's plane.\n    return undefined;\n  }\n\n  const t = (-plane.distance - Cartesian3.dot(normal, origin)) / denominator;\n\n  if (t < 0) {\n    return undefined;\n  }\n\n  result = Cartesian3.multiplyByScalar(direction, t, result);\n  return Cartesian3.add(origin, result, result);\n};\n\nconst scratchEdge0 = new Cartesian3();\nconst scratchEdge1 = new Cartesian3();\nconst scratchPVec = new Cartesian3();\nconst scratchTVec = new Cartesian3();\nconst scratchQVec = new Cartesian3();\n\n/**\n * Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray.\n *\n * Implements {@link https://cadxfem.org/inf/Fast MinimumStorage RayTriangle Intersection.pdf|\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\n *\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n *                  and return undefined for intersections with the back face.\n * @returns {number} The intersection as a parametric distance along the ray, or undefined if there is no intersection.\n */\nIntersectionTests.rayTriangleParametric = function (\n  ray,\n  p0,\n  p1,\n  p2,\n  cullBackFaces,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(ray)) {\n    throw new DeveloperError(\"ray is required.\");\n  }\n  if (!defined(p0)) {\n    throw new DeveloperError(\"p0 is required.\");\n  }\n  if (!defined(p1)) {\n    throw new DeveloperError(\"p1 is required.\");\n  }\n  if (!defined(p2)) {\n    throw new DeveloperError(\"p2 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  cullBackFaces = cullBackFaces ?? false;\n\n  const origin = ray.origin;\n  const direction = ray.direction;\n\n  const edge0 = Cartesian3.subtract(p1, p0, scratchEdge0);\n  const edge1 = Cartesian3.subtract(p2, p0, scratchEdge1);\n\n  const p = Cartesian3.cross(direction, edge1, scratchPVec);\n  const det = Cartesian3.dot(edge0, p);\n\n  let tvec;\n  let q;\n\n  let u;\n  let v;\n  let t;\n\n  if (cullBackFaces) {\n    if (det < CesiumMath.EPSILON6) {\n      return undefined;\n    }\n\n    tvec = Cartesian3.subtract(origin, p0, scratchTVec);\n    u = Cartesian3.dot(tvec, p);\n    if (u < 0.0 || u > det) {\n      return undefined;\n    }\n\n    q = Cartesian3.cross(tvec, edge0, scratchQVec);\n\n    v = Cartesian3.dot(direction, q);\n    if (v < 0.0 || u + v > det) {\n      return undefined;\n    }\n\n    t = Cartesian3.dot(edge1, q) / det;\n  } else {\n    if (Math.abs(det) < CesiumMath.EPSILON6) {\n      return undefined;\n    }\n    const invDet = 1.0 / det;\n\n    tvec = Cartesian3.subtract(origin, p0, scratchTVec);\n    u = Cartesian3.dot(tvec, p) * invDet;\n    if (u < 0.0 || u > 1.0) {\n      return undefined;\n    }\n\n    q = Cartesian3.cross(tvec, edge0, scratchQVec);\n\n    v = Cartesian3.dot(direction, q) * invDet;\n    if (v < 0.0 || u + v > 1.0) {\n      return undefined;\n    }\n\n    t = Cartesian3.dot(edge1, q) * invDet;\n  }\n\n  return t;\n};\n\n/**\n * Computes the intersection of a ray and a triangle as a Cartesian3 coordinate.\n *\n * Implements {@link https://cadxfem.org/inf/Fast MinimumStorage RayTriangle Intersection.pdf|\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\n *\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n *                  and return undefined for intersections with the back face.\n * @param {Cartesian3} [result] The <code>Cartesian3</code> onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.rayTriangle = function (\n  ray,\n  p0,\n  p1,\n  p2,\n  cullBackFaces,\n  result,\n) {\n  const t = IntersectionTests.rayTriangleParametric(\n    ray,\n    p0,\n    p1,\n    p2,\n    cullBackFaces,\n  );\n  if (!defined(t) || t < 0.0) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  Cartesian3.multiplyByScalar(ray.direction, t, result);\n  return Cartesian3.add(ray.origin, result, result);\n};\n\nconst scratchLineSegmentTriangleRay = new Ray();\n\n/**\n * Computes the intersection of a line segment and a triangle.\n * @memberof IntersectionTests\n *\n * @param {Cartesian3} v0 The an end point of the line segment.\n * @param {Cartesian3} v1 The other end point of the line segment.\n * @param {Cartesian3} p0 The first vertex of the triangle.\n * @param {Cartesian3} p1 The second vertex of the triangle.\n * @param {Cartesian3} p2 The third vertex of the triangle.\n * @param {boolean} [cullBackFaces=false] If <code>true</code>, will only compute an intersection with the front face of the triangle\n *                  and return undefined for intersections with the back face.\n * @param {Cartesian3} [result] The <code>Cartesian3</code> onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\n */\nIntersectionTests.lineSegmentTriangle = function (\n  v0,\n  v1,\n  p0,\n  p1,\n  p2,\n  cullBackFaces,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(v0)) {\n    throw new DeveloperError(\"v0 is required.\");\n  }\n  if (!defined(v1)) {\n    throw new DeveloperError(\"v1 is required.\");\n  }\n  if (!defined(p0)) {\n    throw new DeveloperError(\"p0 is required.\");\n  }\n  if (!defined(p1)) {\n    throw new DeveloperError(\"p1 is required.\");\n  }\n  if (!defined(p2)) {\n    throw new DeveloperError(\"p2 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const ray = scratchLineSegmentTriangleRay;\n  Cartesian3.clone(v0, ray.origin);\n  Cartesian3.subtract(v1, v0, ray.direction);\n  Cartesian3.normalize(ray.direction, ray.direction);\n\n  const t = IntersectionTests.rayTriangleParametric(\n    ray,\n    p0,\n    p1,\n    p2,\n    cullBackFaces,\n  );\n  if (!defined(t) || t < 0.0 || t > Cartesian3.distance(v0, v1)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  Cartesian3.multiplyByScalar(ray.direction, t, result);\n  return Cartesian3.add(ray.origin, result, result);\n};\n\nfunction solveQuadratic(a, b, c, result) {\n  const det = b * b - 4.0 * a * c;\n  if (det < 0.0) {\n    return undefined;\n  } else if (det > 0.0) {\n    const denom = 1.0 / (2.0 * a);\n    const disc = Math.sqrt(det);\n    const root0 = (-b + disc) * denom;\n    const root1 = (-b - disc) * denom;\n\n    if (root0 < root1) {\n      result.root0 = root0;\n      result.root1 = root1;\n    } else {\n      result.root0 = root1;\n      result.root1 = root0;\n    }\n\n    return result;\n  }\n\n  const root = -b / (2.0 * a);\n  if (root === 0.0) {\n    return undefined;\n  }\n\n  result.root0 = result.root1 = root;\n  return result;\n}\n\nconst raySphereRoots = {\n  root0: 0.0,\n  root1: 0.0,\n};\n\nfunction raySphere(ray, sphere, result) {\n  if (!defined(result)) {\n    result = new Interval();\n  }\n\n  const origin = ray.origin;\n  const direction = ray.direction;\n\n  const center = sphere.center;\n  const radiusSquared = sphere.radius * sphere.radius;\n\n  const diff = Cartesian3.subtract(origin, center, scratchPVec);\n\n  const a = Cartesian3.dot(direction, direction);\n  const b = 2.0 * Cartesian3.dot(direction, diff);\n  const c = Cartesian3.magnitudeSquared(diff) - radiusSquared;\n\n  const roots = solveQuadratic(a, b, c, raySphereRoots);\n  if (!defined(roots)) {\n    return undefined;\n  }\n\n  result.start = roots.root0;\n  result.stop = roots.root1;\n  return result;\n}\n\n/**\n * Computes the intersection points of a ray with a sphere.\n * @memberof IntersectionTests\n *\n * @param {Ray} ray The ray.\n * @param {BoundingSphere} sphere The sphere.\n * @param {Interval} [result] The result onto which to store the result.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.raySphere = function (ray, sphere, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(ray)) {\n    throw new DeveloperError(\"ray is required.\");\n  }\n  if (!defined(sphere)) {\n    throw new DeveloperError(\"sphere is required.\");\n  }\n  //>>includeEnd('debug');\n\n  result = raySphere(ray, sphere, result);\n  if (!defined(result) || result.stop < 0.0) {\n    return undefined;\n  }\n\n  result.start = Math.max(result.start, 0.0);\n  return result;\n};\n\nconst scratchLineSegmentRay = new Ray();\n\n/**\n * Computes the intersection points of a line segment with a sphere.\n * @memberof IntersectionTests\n *\n * @param {Cartesian3} p0 An end point of the line segment.\n * @param {Cartesian3} p1 The other end point of the line segment.\n * @param {BoundingSphere} sphere The sphere.\n * @param {Interval} [result] The result onto which to store the result.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.lineSegmentSphere = function (p0, p1, sphere, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(p0)) {\n    throw new DeveloperError(\"p0 is required.\");\n  }\n  if (!defined(p1)) {\n    throw new DeveloperError(\"p1 is required.\");\n  }\n  if (!defined(sphere)) {\n    throw new DeveloperError(\"sphere is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const ray = scratchLineSegmentRay;\n  Cartesian3.clone(p0, ray.origin);\n  const direction = Cartesian3.subtract(p1, p0, ray.direction);\n\n  const maxT = Cartesian3.magnitude(direction);\n  Cartesian3.normalize(direction, direction);\n\n  result = raySphere(ray, sphere, result);\n  if (!defined(result) || result.stop < 0.0 || result.start > maxT) {\n    return undefined;\n  }\n\n  result.start = Math.max(result.start, 0.0);\n  result.stop = Math.min(result.stop, maxT);\n  return result;\n};\n\nconst scratchQ = new Cartesian3();\nconst scratchW = new Cartesian3();\n\n/**\n * Computes the intersection points of a ray with an ellipsoid.\n *\n * @param {Ray} ray The ray.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.rayEllipsoid = function (ray, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(ray)) {\n    throw new DeveloperError(\"ray is required.\");\n  }\n  if (!defined(ellipsoid)) {\n    throw new DeveloperError(\"ellipsoid is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const inverseRadii = ellipsoid.oneOverRadii;\n  const q = Cartesian3.multiplyComponents(inverseRadii, ray.origin, scratchQ);\n  const w = Cartesian3.multiplyComponents(\n    inverseRadii,\n    ray.direction,\n    scratchW,\n  );\n\n  const q2 = Cartesian3.magnitudeSquared(q);\n  const qw = Cartesian3.dot(q, w);\n\n  let difference, w2, product, discriminant, temp;\n\n  if (q2 > 1.0) {\n    // Outside ellipsoid.\n    if (qw >= 0.0) {\n      // Looking outward or tangent (0 intersections).\n      return undefined;\n    }\n\n    // qw < 0.0.\n    const qw2 = qw * qw;\n    difference = q2 - 1.0; // Positively valued.\n    w2 = Cartesian3.magnitudeSquared(w);\n    product = w2 * difference;\n\n    if (qw2 < product) {\n      // Imaginary roots (0 intersections).\n      return undefined;\n    } else if (qw2 > product) {\n      // Distinct roots (2 intersections).\n      discriminant = qw * qw - product;\n      temp = -qw + Math.sqrt(discriminant); // Avoid cancellation.\n      const root0 = temp / w2;\n      const root1 = difference / temp;\n      if (root0 < root1) {\n        return new Interval(root0, root1);\n      }\n\n      return {\n        start: root1,\n        stop: root0,\n      };\n    }\n    // qw2 == product.  Repeated roots (2 intersections).\n    const root = Math.sqrt(difference / w2);\n    return new Interval(root, root);\n  } else if (q2 < 1.0) {\n    // Inside ellipsoid (2 intersections).\n    difference = q2 - 1.0; // Negatively valued.\n    w2 = Cartesian3.magnitudeSquared(w);\n    product = w2 * difference; // Negatively valued.\n\n    discriminant = qw * qw - product;\n    temp = -qw + Math.sqrt(discriminant); // Positively valued.\n    return new Interval(0.0, temp / w2);\n  }\n  // q2 == 1.0. On ellipsoid.\n  if (qw < 0.0) {\n    // Looking inward.\n    w2 = Cartesian3.magnitudeSquared(w);\n    return new Interval(0.0, -qw / w2);\n  }\n\n  // qw >= 0.0.  Looking outward or tangent.\n  return undefined;\n};\n\nconst scratchRayIntervalX = new Interval();\nconst scratchRayIntervalY = new Interval();\nconst scratchRayIntervalZ = new Interval();\n\n/**\n * Computes the intersection points of a ray with an axis-aligned bounding box. (axis-aligned in the same space as the ray)\n *\n * @param {Ray} ray The ray.\n * @param {AxisAlignedBoundingBox} box The axis-aligned bounding box.\n * @param {Interval | undefined} result The interval containing scalar points along the ray or undefined if there are no intersections.\n */\nIntersectionTests.rayAxisAlignedBoundingBox = function (ray, box, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(ray)) {\n    throw new DeveloperError(\"ray is required.\");\n  }\n  if (!defined(box)) {\n    throw new DeveloperError(\"box is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Interval();\n  }\n\n  const tx = rayIntervalAlongAABBAxis(\n    ray.origin.x,\n    ray.direction.x,\n    box.minimum.x,\n    box.maximum.x,\n    scratchRayIntervalX,\n  );\n  const ty = rayIntervalAlongAABBAxis(\n    ray.origin.y,\n    ray.direction.y,\n    box.minimum.y,\n    box.maximum.y,\n    scratchRayIntervalY,\n  );\n  const tz = rayIntervalAlongAABBAxis(\n    ray.origin.z,\n    ray.direction.z,\n    box.minimum.z,\n    box.maximum.z,\n    scratchRayIntervalZ,\n  );\n\n  result.start = tx.start > ty.start ? tx.start : ty.start; //Get Greatest Min\n  result.stop = tx.stop < ty.stop ? tx.stop : ty.stop; //Get Smallest Max\n\n  if (tx.start > ty.stop || ty.start > tx.stop) {\n    return undefined;\n  }\n\n  if (result.start > tz.stop || tz.start > result.stop) {\n    return undefined;\n  }\n\n  if (tz.start > result.start) {\n    result.start = tz.start;\n  }\n  if (tz.stop < result.stop) {\n    result.stop = tz.stop;\n  }\n\n  return result;\n};\n\nfunction rayIntervalAlongAABBAxis(origin, direction, min, max, result) {\n  result.start = (min - origin) / direction;\n  result.stop = (max - origin) / direction;\n  if (result.stop < result.start) {\n    const tmp = result.stop;\n    result.stop = result.start;\n    result.start = tmp;\n  }\n\n  return result;\n}\n\nfunction addWithCancellationCheck(left, right, tolerance) {\n  const difference = left + right;\n  if (\n    CesiumMath.sign(left) !== CesiumMath.sign(right) &&\n    Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\n  ) {\n    return 0.0;\n  }\n\n  return difference;\n}\n\n/**\n * @private\n */\nIntersectionTests.quadraticVectorExpression = function (A, b, c, x, w) {\n  const xSquared = x * x;\n  const wSquared = w * w;\n\n  const l2 = (A[Matrix3.COLUMN1ROW1] - A[Matrix3.COLUMN2ROW2]) * wSquared;\n  const l1 =\n    w *\n    (x *\n      addWithCancellationCheck(\n        A[Matrix3.COLUMN1ROW0],\n        A[Matrix3.COLUMN0ROW1],\n        CesiumMath.EPSILON15,\n      ) +\n      b.y);\n  const l0 =\n    A[Matrix3.COLUMN0ROW0] * xSquared +\n    A[Matrix3.COLUMN2ROW2] * wSquared +\n    x * b.x +\n    c;\n\n  const r1 =\n    wSquared *\n    addWithCancellationCheck(\n      A[Matrix3.COLUMN2ROW1],\n      A[Matrix3.COLUMN1ROW2],\n      CesiumMath.EPSILON15,\n    );\n  const r0 =\n    w *\n    (x *\n      addWithCancellationCheck(A[Matrix3.COLUMN2ROW0], A[Matrix3.COLUMN0ROW2]) +\n      b.z);\n\n  let cosines;\n  const solutions = [];\n  if (r0 === 0.0 && r1 === 0.0) {\n    cosines = QuadraticRealPolynomial.computeRealRoots(l2, l1, l0);\n    if (cosines.length === 0) {\n      return solutions;\n    }\n\n    const cosine0 = cosines[0];\n    const sine0 = Math.sqrt(Math.max(1.0 - cosine0 * cosine0, 0.0));\n    solutions.push(new Cartesian3(x, w * cosine0, w * -sine0));\n    solutions.push(new Cartesian3(x, w * cosine0, w * sine0));\n\n    if (cosines.length === 2) {\n      const cosine1 = cosines[1];\n      const sine1 = Math.sqrt(Math.max(1.0 - cosine1 * cosine1, 0.0));\n      solutions.push(new Cartesian3(x, w * cosine1, w * -sine1));\n      solutions.push(new Cartesian3(x, w * cosine1, w * sine1));\n    }\n\n    return solutions;\n  }\n\n  const r0Squared = r0 * r0;\n  const r1Squared = r1 * r1;\n  const l2Squared = l2 * l2;\n  const r0r1 = r0 * r1;\n\n  const c4 = l2Squared + r1Squared;\n  const c3 = 2.0 * (l1 * l2 + r0r1);\n  const c2 = 2.0 * l0 * l2 + l1 * l1 - r1Squared + r0Squared;\n  const c1 = 2.0 * (l0 * l1 - r0r1);\n  const c0 = l0 * l0 - r0Squared;\n\n  if (c4 === 0.0 && c3 === 0.0 && c2 === 0.0 && c1 === 0.0) {\n    return solutions;\n  }\n\n  cosines = QuarticRealPolynomial.computeRealRoots(c4, c3, c2, c1, c0);\n  const length = cosines.length;\n  if (length === 0) {\n    return solutions;\n  }\n\n  for (let i = 0; i < length; ++i) {\n    const cosine = cosines[i];\n    const cosineSquared = cosine * cosine;\n    const sineSquared = Math.max(1.0 - cosineSquared, 0.0);\n    const sine = Math.sqrt(sineSquared);\n\n    //const left = l2 * cosineSquared + l1 * cosine + l0;\n    let left;\n    if (CesiumMath.sign(l2) === CesiumMath.sign(l0)) {\n      left = addWithCancellationCheck(\n        l2 * cosineSquared + l0,\n        l1 * cosine,\n        CesiumMath.EPSILON12,\n      );\n    } else if (CesiumMath.sign(l0) === CesiumMath.sign(l1 * cosine)) {\n      left = addWithCancellationCheck(\n        l2 * cosineSquared,\n        l1 * cosine + l0,\n        CesiumMath.EPSILON12,\n      );\n    } else {\n      left = addWithCancellationCheck(\n        l2 * cosineSquared + l1 * cosine,\n        l0,\n        CesiumMath.EPSILON12,\n      );\n    }\n\n    const right = addWithCancellationCheck(\n      r1 * cosine,\n      r0,\n      CesiumMath.EPSILON15,\n    );\n    const product = left * right;\n\n    if (product < 0.0) {\n      solutions.push(new Cartesian3(x, w * cosine, w * sine));\n    } else if (product > 0.0) {\n      solutions.push(new Cartesian3(x, w * cosine, w * -sine));\n    } else if (sine !== 0.0) {\n      solutions.push(new Cartesian3(x, w * cosine, w * -sine));\n      solutions.push(new Cartesian3(x, w * cosine, w * sine));\n      ++i;\n    } else {\n      solutions.push(new Cartesian3(x, w * cosine, w * sine));\n    }\n  }\n\n  return solutions;\n};\n\nconst firstAxisScratch = new Cartesian3();\nconst secondAxisScratch = new Cartesian3();\nconst thirdAxisScratch = new Cartesian3();\nconst referenceScratch = new Cartesian3();\nconst bCart = new Cartesian3();\nconst bScratch = new Matrix3();\nconst btScratch = new Matrix3();\nconst diScratch = new Matrix3();\nconst dScratch = new Matrix3();\nconst cScratch = new Matrix3();\nconst tempMatrix = new Matrix3();\nconst aScratch = new Matrix3();\nconst sScratch = new Cartesian3();\nconst closestScratch = new Cartesian3();\nconst surfPointScratch = new Cartographic();\n\n/**\n * Provides the point along the ray which is nearest to the ellipsoid.\n *\n * @param {Ray} ray The ray.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @returns {Cartesian3} The nearest planetodetic point on the ray.\n */\nIntersectionTests.grazingAltitudeLocation = function (ray, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(ray)) {\n    throw new DeveloperError(\"ray is required.\");\n  }\n  if (!defined(ellipsoid)) {\n    throw new DeveloperError(\"ellipsoid is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const position = ray.origin;\n  const direction = ray.direction;\n\n  if (!Cartesian3.equals(position, Cartesian3.ZERO)) {\n    const normal = ellipsoid.geodeticSurfaceNormal(position, firstAxisScratch);\n    if (Cartesian3.dot(direction, normal) >= 0.0) {\n      // The location provided is the closest point in altitude\n      return position;\n    }\n  }\n\n  const intersects = defined(this.rayEllipsoid(ray, ellipsoid));\n\n  // Compute the scaled direction vector.\n  const f = ellipsoid.transformPositionToScaledSpace(\n    direction,\n    firstAxisScratch,\n  );\n\n  // Constructs a basis from the unit scaled direction vector. Construct its rotation and transpose.\n  const firstAxis = Cartesian3.normalize(f, f);\n  const reference = Cartesian3.mostOrthogonalAxis(f, referenceScratch);\n  const secondAxis = Cartesian3.normalize(\n    Cartesian3.cross(reference, firstAxis, secondAxisScratch),\n    secondAxisScratch,\n  );\n  const thirdAxis = Cartesian3.normalize(\n    Cartesian3.cross(firstAxis, secondAxis, thirdAxisScratch),\n    thirdAxisScratch,\n  );\n  const B = bScratch;\n  B[0] = firstAxis.x;\n  B[1] = firstAxis.y;\n  B[2] = firstAxis.z;\n  B[3] = secondAxis.x;\n  B[4] = secondAxis.y;\n  B[5] = secondAxis.z;\n  B[6] = thirdAxis.x;\n  B[7] = thirdAxis.y;\n  B[8] = thirdAxis.z;\n\n  const B_T = Matrix3.transpose(B, btScratch);\n\n  // Get the scaling matrix and its inverse.\n  const D_I = Matrix3.fromScale(ellipsoid.radii, diScratch);\n  const D = Matrix3.fromScale(ellipsoid.oneOverRadii, dScratch);\n\n  const C = cScratch;\n  C[0] = 0.0;\n  C[1] = -direction.z;\n  C[2] = direction.y;\n  C[3] = direction.z;\n  C[4] = 0.0;\n  C[5] = -direction.x;\n  C[6] = -direction.y;\n  C[7] = direction.x;\n  C[8] = 0.0;\n\n  const temp = Matrix3.multiply(\n    Matrix3.multiply(B_T, D, tempMatrix),\n    C,\n    tempMatrix,\n  );\n  const A = Matrix3.multiply(\n    Matrix3.multiply(temp, D_I, aScratch),\n    B,\n    aScratch,\n  );\n  const b = Matrix3.multiplyByVector(temp, position, bCart);\n\n  // Solve for the solutions to the expression in standard form:\n  const solutions = IntersectionTests.quadraticVectorExpression(\n    A,\n    Cartesian3.negate(b, firstAxisScratch),\n    0.0,\n    0.0,\n    1.0,\n  );\n\n  let s;\n  let altitude;\n  const length = solutions.length;\n  if (length > 0) {\n    let closest = Cartesian3.clone(Cartesian3.ZERO, closestScratch);\n    let maximumValue = Number.NEGATIVE_INFINITY;\n\n    for (let i = 0; i < length; ++i) {\n      s = Matrix3.multiplyByVector(\n        D_I,\n        Matrix3.multiplyByVector(B, solutions[i], sScratch),\n        sScratch,\n      );\n      const v = Cartesian3.normalize(\n        Cartesian3.subtract(s, position, referenceScratch),\n        referenceScratch,\n      );\n      const dotProduct = Cartesian3.dot(v, direction);\n\n      if (dotProduct > maximumValue) {\n        maximumValue = dotProduct;\n        closest = Cartesian3.clone(s, closest);\n      }\n    }\n\n    const surfacePoint = ellipsoid.cartesianToCartographic(\n      closest,\n      surfPointScratch,\n    );\n    maximumValue = CesiumMath.clamp(maximumValue, 0.0, 1.0);\n    altitude =\n      Cartesian3.magnitude(\n        Cartesian3.subtract(closest, position, referenceScratch),\n      ) * Math.sqrt(1.0 - maximumValue * maximumValue);\n    altitude = intersects ? -altitude : altitude;\n    surfacePoint.height = altitude;\n    return ellipsoid.cartographicToCartesian(surfacePoint, new Cartesian3());\n  }\n\n  return undefined;\n};\n\nconst lineSegmentPlaneDifference = new Cartesian3();\n\n/**\n * Computes the intersection of a line segment and a plane.\n *\n * @param {Cartesian3} endPoint0 An end point of the line segment.\n * @param {Cartesian3} endPoint1 The other end point of the line segment.\n * @param {Plane} plane The plane.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The intersection point or undefined if there is no intersection.\n *\n * @example\n * const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * const normal = ellipsoid.geodeticSurfaceNormal(origin);\n * const plane = Cesium.Plane.fromPointNormal(origin, normal);\n *\n * const p0 = new Cesium.Cartesian3(...);\n * const p1 = new Cesium.Cartesian3(...);\n *\n * // find the intersection of the line segment from p0 to p1 and the tangent plane at origin.\n * const intersection = Cesium.IntersectionTests.lineSegmentPlane(p0, p1, plane);\n */\nIntersectionTests.lineSegmentPlane = function (\n  endPoint0,\n  endPoint1,\n  plane,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(endPoint0)) {\n    throw new DeveloperError(\"endPoint0 is required.\");\n  }\n  if (!defined(endPoint1)) {\n    throw new DeveloperError(\"endPoint1 is required.\");\n  }\n  if (!defined(plane)) {\n    throw new DeveloperError(\"plane is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  const difference = Cartesian3.subtract(\n    endPoint1,\n    endPoint0,\n    lineSegmentPlaneDifference,\n  );\n  const normal = plane.normal;\n  const nDotDiff = Cartesian3.dot(normal, difference);\n\n  // check if the segment and plane are parallel\n  if (Math.abs(nDotDiff) < CesiumMath.EPSILON6) {\n    return undefined;\n  }\n\n  const nDotP0 = Cartesian3.dot(normal, endPoint0);\n  const t = -(plane.distance + nDotP0) / nDotDiff;\n\n  // intersection only if t is in [0, 1]\n  if (t < 0.0 || t > 1.0) {\n    return undefined;\n  }\n\n  // intersection is endPoint0 + t * (endPoint1 - endPoint0)\n  Cartesian3.multiplyByScalar(difference, t, result);\n  Cartesian3.add(endPoint0, result, result);\n  return result;\n};\n\n/**\n * Computes the intersection of a triangle and a plane\n *\n * @param {Cartesian3} p0 First point of the triangle\n * @param {Cartesian3} p1 Second point of the triangle\n * @param {Cartesian3} p2 Third point of the triangle\n * @param {Plane} plane Intersection plane\n * @returns {object} An object with properties <code>positions</code> and <code>indices</code>, which are arrays that represent three triangles that do not cross the plane. (Undefined if no intersection exists)\n *\n * @example\n * const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n * const normal = ellipsoid.geodeticSurfaceNormal(origin);\n * const plane = Cesium.Plane.fromPointNormal(origin, normal);\n *\n * const p0 = new Cesium.Cartesian3(...);\n * const p1 = new Cesium.Cartesian3(...);\n * const p2 = new Cesium.Cartesian3(...);\n *\n * // convert the triangle composed of points (p0, p1, p2) to three triangles that don't cross the plane\n * const triangles = Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane);\n */\nIntersectionTests.trianglePlaneIntersection = function (p0, p1, p2, plane) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(p0) || !defined(p1) || !defined(p2) || !defined(plane)) {\n    throw new DeveloperError(\"p0, p1, p2, and plane are required.\");\n  }\n  //>>includeEnd('debug');\n\n  const planeNormal = plane.normal;\n  const planeD = plane.distance;\n  const p0Behind = Cartesian3.dot(planeNormal, p0) + planeD < 0.0;\n  const p1Behind = Cartesian3.dot(planeNormal, p1) + planeD < 0.0;\n  const p2Behind = Cartesian3.dot(planeNormal, p2) + planeD < 0.0;\n  // Given these dots products, the calls to lineSegmentPlaneIntersection\n  // always have defined results.\n\n  let numBehind = 0;\n  numBehind += p0Behind ? 1 : 0;\n  numBehind += p1Behind ? 1 : 0;\n  numBehind += p2Behind ? 1 : 0;\n\n  let u1, u2;\n  if (numBehind === 1 || numBehind === 2) {\n    u1 = new Cartesian3();\n    u2 = new Cartesian3();\n  }\n\n  if (numBehind === 1) {\n    if (p0Behind) {\n      IntersectionTests.lineSegmentPlane(p0, p1, plane, u1);\n      IntersectionTests.lineSegmentPlane(p0, p2, plane, u2);\n\n      return {\n        positions: [p0, p1, p2, u1, u2],\n        indices: [\n          // Behind\n          0, 3, 4,\n\n          // In front\n          1, 2, 4, 1, 4, 3,\n        ],\n      };\n    } else if (p1Behind) {\n      IntersectionTests.lineSegmentPlane(p1, p2, plane, u1);\n      IntersectionTests.lineSegmentPlane(p1, p0, plane, u2);\n\n      return {\n        positions: [p0, p1, p2, u1, u2],\n        indices: [\n          // Behind\n          1, 3, 4,\n\n          // In front\n          2, 0, 4, 2, 4, 3,\n        ],\n      };\n    } else if (p2Behind) {\n      IntersectionTests.lineSegmentPlane(p2, p0, plane, u1);\n      IntersectionTests.lineSegmentPlane(p2, p1, plane, u2);\n\n      return {\n        positions: [p0, p1, p2, u1, u2],\n        indices: [\n          // Behind\n          2, 3, 4,\n\n          // In front\n          0, 1, 4, 0, 4, 3,\n        ],\n      };\n    }\n  } else if (numBehind === 2) {\n    if (!p0Behind) {\n      IntersectionTests.lineSegmentPlane(p1, p0, plane, u1);\n      IntersectionTests.lineSegmentPlane(p2, p0, plane, u2);\n\n      return {\n        positions: [p0, p1, p2, u1, u2],\n        indices: [\n          // Behind\n          1, 2, 4, 1, 4, 3,\n\n          // In front\n          0, 3, 4,\n        ],\n      };\n    } else if (!p1Behind) {\n      IntersectionTests.lineSegmentPlane(p2, p1, plane, u1);\n      IntersectionTests.lineSegmentPlane(p0, p1, plane, u2);\n\n      return {\n        positions: [p0, p1, p2, u1, u2],\n        indices: [\n          // Behind\n          2, 0, 4, 2, 4, 3,\n\n          // In front\n          1, 3, 4,\n        ],\n      };\n    } else if (!p2Behind) {\n      IntersectionTests.lineSegmentPlane(p0, p2, plane, u1);\n      IntersectionTests.lineSegmentPlane(p1, p2, plane, u2);\n\n      return {\n        positions: [p0, p1, p2, u1, u2],\n        indices: [\n          // Behind\n          0, 1, 4, 0, 4, 3,\n\n          // In front\n          2, 3, 4,\n        ],\n      };\n    }\n  }\n\n  // if numBehind is 3, the triangle is completely behind the plane;\n  // otherwise, it is completely in front (numBehind is 0).\n  return undefined;\n};\nexport default IntersectionTests;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Contains functions for operating on 2D triangles.\n *\n * @namespace Intersections2D\n */\nconst Intersections2D = {};\n\n/**\n * Splits a 2D triangle at given axis-aligned threshold value and returns the resulting\n * polygon on a given side of the threshold.  The resulting polygon may have 0, 1, 2,\n * 3, or 4 vertices.\n *\n * @param {number} threshold The threshold coordinate value at which to clip the triangle.\n * @param {boolean} keepAbove true to keep the portion of the triangle above the threshold, or false\n *                            to keep the portion below.\n * @param {number} u0 The coordinate of the first vertex in the triangle, in counter-clockwise order.\n * @param {number} u1 The coordinate of the second vertex in the triangle, in counter-clockwise order.\n * @param {number} u2 The coordinate of the third vertex in the triangle, in counter-clockwise order.\n * @param {number[]} [result] The array into which to copy the result.  If this parameter is not supplied,\n *                            a new array is constructed and returned.\n * @returns {number[]} The polygon that results after the clip, specified as a list of\n *                     vertices.  The vertices are specified in counter-clockwise order.\n *                     Each vertex is either an index from the existing list (identified as\n *                     a 0, 1, or 2) or -1 indicating a new vertex not in the original triangle.\n *                     For new vertices, the -1 is followed by three additional numbers: the\n *                     index of each of the two original vertices forming the line segment that\n *                     the new vertex lies on, and the fraction of the distance from the first\n *                     vertex to the second one.\n *\n * @example\n * const result = Cesium.Intersections2D.clipTriangleAtAxisAlignedThreshold(0.5, false, 0.2, 0.6, 0.4);\n * // result === [2, 0, -1, 1, 0, 0.25, -1, 1, 2, 0.5]\n */\nIntersections2D.clipTriangleAtAxisAlignedThreshold = function (\n  threshold,\n  keepAbove,\n  u0,\n  u1,\n  u2,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(threshold)) {\n    throw new DeveloperError(\"threshold is required.\");\n  }\n  if (!defined(keepAbove)) {\n    throw new DeveloperError(\"keepAbove is required.\");\n  }\n  if (!defined(u0)) {\n    throw new DeveloperError(\"u0 is required.\");\n  }\n  if (!defined(u1)) {\n    throw new DeveloperError(\"u1 is required.\");\n  }\n  if (!defined(u2)) {\n    throw new DeveloperError(\"u2 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = [];\n  } else {\n    result.length = 0;\n  }\n\n  let u0Behind;\n  let u1Behind;\n  let u2Behind;\n  if (keepAbove) {\n    u0Behind = u0 < threshold;\n    u1Behind = u1 < threshold;\n    u2Behind = u2 < threshold;\n  } else {\n    u0Behind = u0 > threshold;\n    u1Behind = u1 > threshold;\n    u2Behind = u2 > threshold;\n  }\n\n  const numBehind = u0Behind + u1Behind + u2Behind;\n\n  let u01Ratio;\n  let u02Ratio;\n  let u12Ratio;\n  let u10Ratio;\n  let u20Ratio;\n  let u21Ratio;\n\n  if (numBehind === 1) {\n    if (u0Behind) {\n      u01Ratio = (threshold - u0) / (u1 - u0);\n      u02Ratio = (threshold - u0) / (u2 - u0);\n\n      result.push(1);\n\n      result.push(2);\n\n      if (u02Ratio !== 1.0) {\n        result.push(-1);\n        result.push(0);\n        result.push(2);\n        result.push(u02Ratio);\n      }\n\n      if (u01Ratio !== 1.0) {\n        result.push(-1);\n        result.push(0);\n        result.push(1);\n        result.push(u01Ratio);\n      }\n    } else if (u1Behind) {\n      u12Ratio = (threshold - u1) / (u2 - u1);\n      u10Ratio = (threshold - u1) / (u0 - u1);\n\n      result.push(2);\n\n      result.push(0);\n\n      if (u10Ratio !== 1.0) {\n        result.push(-1);\n        result.push(1);\n        result.push(0);\n        result.push(u10Ratio);\n      }\n\n      if (u12Ratio !== 1.0) {\n        result.push(-1);\n        result.push(1);\n        result.push(2);\n        result.push(u12Ratio);\n      }\n    } else if (u2Behind) {\n      u20Ratio = (threshold - u2) / (u0 - u2);\n      u21Ratio = (threshold - u2) / (u1 - u2);\n\n      result.push(0);\n\n      result.push(1);\n\n      if (u21Ratio !== 1.0) {\n        result.push(-1);\n        result.push(2);\n        result.push(1);\n        result.push(u21Ratio);\n      }\n\n      if (u20Ratio !== 1.0) {\n        result.push(-1);\n        result.push(2);\n        result.push(0);\n        result.push(u20Ratio);\n      }\n    }\n  } else if (numBehind === 2) {\n    if (!u0Behind && u0 !== threshold) {\n      u10Ratio = (threshold - u1) / (u0 - u1);\n      u20Ratio = (threshold - u2) / (u0 - u2);\n\n      result.push(0);\n\n      result.push(-1);\n      result.push(1);\n      result.push(0);\n      result.push(u10Ratio);\n\n      result.push(-1);\n      result.push(2);\n      result.push(0);\n      result.push(u20Ratio);\n    } else if (!u1Behind && u1 !== threshold) {\n      u21Ratio = (threshold - u2) / (u1 - u2);\n      u01Ratio = (threshold - u0) / (u1 - u0);\n\n      result.push(1);\n\n      result.push(-1);\n      result.push(2);\n      result.push(1);\n      result.push(u21Ratio);\n\n      result.push(-1);\n      result.push(0);\n      result.push(1);\n      result.push(u01Ratio);\n    } else if (!u2Behind && u2 !== threshold) {\n      u02Ratio = (threshold - u0) / (u2 - u0);\n      u12Ratio = (threshold - u1) / (u2 - u1);\n\n      result.push(2);\n\n      result.push(-1);\n      result.push(0);\n      result.push(2);\n      result.push(u02Ratio);\n\n      result.push(-1);\n      result.push(1);\n      result.push(2);\n      result.push(u12Ratio);\n    }\n  } else if (numBehind !== 3) {\n    // Completely in front of threshold\n    result.push(0);\n    result.push(1);\n    result.push(2);\n  }\n  // else Completely behind threshold\n\n  return result;\n};\n\n/**\n * Compute the barycentric coordinates of a 2D position within a 2D triangle.\n *\n * @param {number} x The x coordinate of the position for which to find the barycentric coordinates.\n * @param {number} y The y coordinate of the position for which to find the barycentric coordinates.\n * @param {number} x1 The x coordinate of the triangle's first vertex.\n * @param {number} y1 The y coordinate of the triangle's first vertex.\n * @param {number} x2 The x coordinate of the triangle's second vertex.\n * @param {number} y2 The y coordinate of the triangle's second vertex.\n * @param {number} x3 The x coordinate of the triangle's third vertex.\n * @param {number} y3 The y coordinate of the triangle's third vertex.\n * @param {Cartesian3} [result] The instance into to which to copy the result.  If this parameter\n *                     is undefined, a new instance is created and returned.\n * @returns {Cartesian3} The barycentric coordinates of the position within the triangle.\n *\n * @example\n * const result = Cesium.Intersections2D.computeBarycentricCoordinates(0.0, 0.0, 0.0, 1.0, -1, -0.5, 1, -0.5);\n * // result === new Cesium.Cartesian3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0);\n */\nIntersections2D.computeBarycentricCoordinates = function (\n  x,\n  y,\n  x1,\n  y1,\n  x2,\n  y2,\n  x3,\n  y3,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(x)) {\n    throw new DeveloperError(\"x is required.\");\n  }\n  if (!defined(y)) {\n    throw new DeveloperError(\"y is required.\");\n  }\n  if (!defined(x1)) {\n    throw new DeveloperError(\"x1 is required.\");\n  }\n  if (!defined(y1)) {\n    throw new DeveloperError(\"y1 is required.\");\n  }\n  if (!defined(x2)) {\n    throw new DeveloperError(\"x2 is required.\");\n  }\n  if (!defined(y2)) {\n    throw new DeveloperError(\"y2 is required.\");\n  }\n  if (!defined(x3)) {\n    throw new DeveloperError(\"x3 is required.\");\n  }\n  if (!defined(y3)) {\n    throw new DeveloperError(\"y3 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const x1mx3 = x1 - x3;\n  const x3mx2 = x3 - x2;\n  const y2my3 = y2 - y3;\n  const y1my3 = y1 - y3;\n  const inverseDeterminant = 1.0 / (y2my3 * x1mx3 + x3mx2 * y1my3);\n  const ymy3 = y - y3;\n  const xmx3 = x - x3;\n  const l1 = (y2my3 * xmx3 + x3mx2 * ymy3) * inverseDeterminant;\n  const l2 = (-y1my3 * xmx3 + x1mx3 * ymy3) * inverseDeterminant;\n  const l3 = 1.0 - l1 - l2;\n\n  if (defined(result)) {\n    result.x = l1;\n    result.y = l2;\n    result.z = l3;\n    return result;\n  }\n  return new Cartesian3(l1, l2, l3);\n};\n\n/**\n * Compute the intersection between 2 line segments\n *\n * @param {number} x00 The x coordinate of the first line's first vertex.\n * @param {number} y00 The y coordinate of the first line's first vertex.\n * @param {number} x01 The x coordinate of the first line's second vertex.\n * @param {number} y01 The y coordinate of the first line's second vertex.\n * @param {number} x10 The x coordinate of the second line's first vertex.\n * @param {number} y10 The y coordinate of the second line's first vertex.\n * @param {number} x11 The x coordinate of the second line's second vertex.\n * @param {number} y11 The y coordinate of the second line's second vertex.\n * @param {Cartesian2} [result] The instance into to which to copy the result. If this parameter\n *                     is undefined, a new instance is created and returned.\n * @returns {Cartesian2} The intersection point, undefined if there is no intersection point or lines are coincident.\n *\n * @example\n * const result = Cesium.Intersections2D.computeLineSegmentLineSegmentIntersection(0.0, 0.0, 0.0, 2.0, -1, 1, 1, 1);\n * // result === new Cesium.Cartesian2(0.0, 1.0);\n */\nIntersections2D.computeLineSegmentLineSegmentIntersection = function (\n  x00,\n  y00,\n  x01,\n  y01,\n  x10,\n  y10,\n  x11,\n  y11,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"x00\", x00);\n  Check.typeOf.number(\"y00\", y00);\n  Check.typeOf.number(\"x01\", x01);\n  Check.typeOf.number(\"y01\", y01);\n  Check.typeOf.number(\"x10\", x10);\n  Check.typeOf.number(\"y10\", y10);\n  Check.typeOf.number(\"x11\", x11);\n  Check.typeOf.number(\"y11\", y11);\n  //>>includeEnd('debug');\n\n  const numerator1A = (x11 - x10) * (y00 - y10) - (y11 - y10) * (x00 - x10);\n  const numerator1B = (x01 - x00) * (y00 - y10) - (y01 - y00) * (x00 - x10);\n  const denominator1 = (y11 - y10) * (x01 - x00) - (x11 - x10) * (y01 - y00);\n\n  // If denominator = 0, then lines are parallel. If denominator = 0 and both numerators are 0, then coincident\n  if (denominator1 === 0) {\n    return;\n  }\n\n  const ua1 = numerator1A / denominator1;\n  const ub1 = numerator1B / denominator1;\n\n  if (ua1 >= 0 && ua1 <= 1 && ub1 >= 0 && ub1 <= 1) {\n    if (!defined(result)) {\n      result = new Cartesian2();\n    }\n\n    result.x = x00 + ua1 * (x01 - x00);\n    result.y = y00 + ua1 * (y01 - y00);\n\n    return result;\n  }\n};\nexport default Intersections2D;\n","/**\n * Represents the closed interval [start, stop].\n * @alias Interval\n * @constructor\n *\n * @param {number} [start=0.0] The beginning of the interval.\n * @param {number} [stop=0.0] The end of the interval.\n */\nfunction Interval(start, stop) {\n  /**\n   * The beginning of the interval.\n   * @type {number}\n   * @default 0.0\n   */\n  this.start = start ?? 0.0;\n  /**\n   * The end of the interval.\n   * @type {number}\n   * @default 0.0\n   */\n  this.stop = stop ?? 0.0;\n}\nexport default Interval;\n","import Credit from \"./Credit.js\";\nimport defined from \"./defined.js\";\nimport Resource from \"./Resource.js\";\n\nlet defaultTokenCredit;\nconst defaultAccessToken =\n  \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhMzVlNTU2ZC1lYmM1LTQ2OWEtODRhOS0wYTFkODZmZTQ0OTgiLCJpZCI6MjU5LCJpYXQiOjE3NzI0ODIxOTR9.1oVHvVA9yr1C3CbLjlzcQQUyBuUuNaNCcc9_Giy8t7U\";\n/**\n * Default settings for accessing the Cesium ion API.\n *\n * An ion access token is only required if you are using any ion related APIs.\n * A default access token is provided for evaluation purposes only.\n * Sign up for a free ion account and get your own access token at {@link https://cesium.com}\n *\n * @see IonResource\n * @see IonImageryProvider\n * @see IonGeocoderService\n * @see createWorldImagery\n * @see createWorldTerrain\n * @namespace Ion\n */\nconst Ion = {};\n\n/**\n * Gets or sets the default Cesium ion access token.\n *\n * @type {string}\n */\nIon.defaultAccessToken = defaultAccessToken;\n\n/**\n * Gets or sets the default Cesium ion server.\n *\n * @type {string|Resource}\n * @default https://api.cesium.com\n */\nIon.defaultServer = new Resource({ url: \"https://api.cesium.com/\" });\n\nIon.getDefaultTokenCredit = function (providedKey) {\n  if (providedKey !== defaultAccessToken) {\n    return undefined;\n  }\n\n  if (!defined(defaultTokenCredit)) {\n    const defaultTokenMessage =\n      '<b> \\\n            This application is using Cesium\\'s default ion access token. Please assign <i>Cesium.Ion.defaultAccessToken</i> \\\n            with an access token from your ion account before making any Cesium API calls. \\\n            You can sign up for a free ion account at <a href=\"https://cesium.com\">https://cesium.com</a>.</b>';\n\n    defaultTokenCredit = new Credit(defaultTokenMessage, true);\n  }\n\n  return defaultTokenCredit;\n};\nexport default Ion;\n","/**\n * Underlying geocoding services that can be used via Cesium ion.\n *\n * @enum {string}\n */\nconst IonGeocodeProviderType = {\n  /**\n   * Google geocoder, for use with Google data.\n   *\n   * @type {string}\n   * @constant\n   */\n  GOOGLE: \"GOOGLE\",\n\n  /**\n   * Bing geocoder, for use with Bing data.\n   *\n   * @type {string}\n   * @constant\n   */\n  BING: \"BING\",\n\n  /**\n   * Use the default geocoder as set on the server.  Used when neither Bing or\n   * Google data is used.\n   *\n   * @type {string}\n   * @constant\n   */\n  DEFAULT: \"DEFAULT\",\n};\n\nexport default Object.freeze(IonGeocodeProviderType);\n","import Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ion from \"./Ion.js\";\nimport IonGeocodeProviderType from \"./IonGeocodeProviderType.js\";\nimport PeliasGeocoderService from \"./PeliasGeocoderService.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * @param {*} geocodeProviderType\n * @throws {DeveloperError}\n * @private\n */\nfunction validateIonGeocodeProviderType(geocodeProviderType) {\n  if (\n    !Object.values(IonGeocodeProviderType).some(\n      (value) => value === geocodeProviderType,\n    )\n  ) {\n    throw new DeveloperError(\n      `Invalid geocodeProviderType: \"${geocodeProviderType}\"`,\n    );\n  }\n}\n\nconst providerToParameterMap = Object.freeze({\n  [IonGeocodeProviderType.GOOGLE]: \"google\",\n  [IonGeocodeProviderType.BING]: \"bing\",\n  [IonGeocodeProviderType.DEFAULT]: undefined,\n});\n\nfunction providerToQueryParameter(provider) {\n  return providerToParameterMap[provider];\n}\n\nfunction queryParameterToProvider(parameter) {\n  return Object.entries(providerToParameterMap).find(\n    (entry) => entry[1] === parameter,\n  )[0];\n}\n\n/**\n * Provides geocoding through Cesium ion.\n * @alias IonGeocoderService\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Scene} options.scene The scene\n * @param {string} [options.accessToken=Ion.defaultAccessToken] The access token to use.\n * @param {string|Resource} [options.server=Ion.defaultServer] The resource to the Cesium ion API server.\n * @param {IonGeocodeProviderType} [options.geocodeProviderType=IonGeocodeProviderType.DEFAULT] The geocoder the Cesium ion API server should use to fulfill this request.\n *\n * @see Ion\n */\nfunction IonGeocoderService(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.scene\", options.scene);\n  //>>includeEnd('debug');\n\n  const geocodeProviderType =\n    options.geocodeProviderType ?? IonGeocodeProviderType.DEFAULT;\n  //>>includeStart('debug', pragmas.debug);\n  validateIonGeocodeProviderType(geocodeProviderType);\n  //>>includeEnd('debug');\n\n  const accessToken = options.accessToken ?? Ion.defaultAccessToken;\n  const server = Resource.createIfNeeded(options.server ?? Ion.defaultServer);\n  server.appendForwardSlash();\n\n  const defaultTokenCredit = Ion.getDefaultTokenCredit(accessToken);\n  if (defined(defaultTokenCredit)) {\n    options.scene.frameState.creditDisplay.addStaticCredit(\n      Credit.clone(defaultTokenCredit),\n    );\n  }\n\n  const searchEndpoint = server.getDerivedResource({\n    url: \"v1/geocode\",\n  });\n\n  if (defined(accessToken)) {\n    searchEndpoint.appendQueryParameters({ access_token: accessToken });\n  }\n\n  this._accessToken = accessToken;\n  this._server = server;\n  this._pelias = new PeliasGeocoderService(searchEndpoint);\n  // geocoderProviderType isn't stored here directly but instead relies on the\n  // query parameters of this._pelias.url.  Use the setter logic to update value.\n  this.geocodeProviderType = geocodeProviderType;\n}\n\nObject.defineProperties(IonGeocoderService.prototype, {\n  /**\n   * Gets the credit to display after a geocode is performed. Typically this is used to credit\n   * the geocoder service.\n   * @memberof IonGeocoderService.prototype\n   * @type {Credit|undefined}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return undefined;\n    },\n  },\n  /**\n   * The geocoding service that Cesium ion API server should use to fulfill geocding requests.\n   * @memberof IonGeocoderService.prototype\n   * @type {IonGeocodeProviderType}\n   * @default IonGeocodeProviderType.DEFAULT\n   */\n  geocodeProviderType: {\n    get: function () {\n      return queryParameterToProvider(\n        this._pelias.url.queryParameters[\"geocoder\"],\n      );\n    },\n    set: function (geocodeProviderType) {\n      validateIonGeocodeProviderType(geocodeProviderType);\n      const query = {\n        ...this._pelias.url.queryParameters,\n        geocoder: providerToQueryParameter(geocodeProviderType),\n      };\n      // Delete the geocoder parameter to prevent sending &geocoder=undefined in the query\n      if (!defined(query.geocoder)) {\n        delete query.geocoder;\n      }\n      this._pelias.url.setQueryParameters(query);\n    },\n  },\n});\n\n/**\n * @function\n *\n * @param {string} query The query to be sent to the geocoder service\n * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform.\n * @returns {Promise<GeocoderService.Result[]>}\n */\nIonGeocoderService.prototype.geocode = async function (query, geocodeType) {\n  return this._pelias.geocode(query, geocodeType);\n};\nexport default IonGeocoderService;\n","import Uri from \"urijs\";\nimport Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ion from \"./Ion.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * A function that will be invoked when the access token is refreshed.\n * @callback IonResourceRefreshCallback\n * @param {IonResource} ionResource The root IonResource being refreshed.\n * @param {object} endpoint The result of the Cesium ion asset endpoint service. This may be modified in place by the callback.\n * @private\n */\n\n/**\n * A {@link Resource} instance that encapsulates Cesium ion asset access.\n * This object is normally not instantiated directly, use {@link IonResource.fromAssetId}.\n *\n * @alias IonResource\n * @constructor\n * @augments Resource\n *\n * @param {object} endpoint The result of the Cesium ion asset endpoint service.\n * @param {Resource} endpointResource The original resource used to retrieve the endpoint.\n *\n * @see Ion\n * @see IonImageryProvider\n * @see createWorldTerrain\n * @see https://cesium.com\n */\nfunction IonResource(endpoint, endpointResource) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"endpoint\", endpoint);\n  Check.defined(\"endpointResource\", endpointResource);\n  //>>includeEnd('debug');\n\n  let options;\n  const externalType = endpoint.externalType;\n  const isExternal = defined(externalType);\n\n  if (!isExternal) {\n    options = {\n      url: endpoint.url,\n      retryAttempts: 1,\n      retryCallback: retryCallback,\n    };\n  } else if (\n    externalType === \"3DTILES\" ||\n    externalType === \"STK_TERRAIN_SERVER\"\n  ) {\n    // 3D Tiles and STK Terrain Server external assets can still be represented as an IonResource\n    options = { url: endpoint.options.url };\n  } else {\n    //External imagery assets have additional configuration that can't be represented as a Resource\n    throw new RuntimeError(\n      \"Ion.createResource does not support external imagery assets; use IonImageryProvider instead.\",\n    );\n  }\n\n  Resource.call(this, options);\n\n  // The asset endpoint data returned from ion.\n  this._ionEndpoint = endpoint;\n  this._ionEndpointDomain = isExternal\n    ? undefined\n    : new Uri(endpoint.url).authority();\n\n  // The endpoint resource to fetch when a new token is needed\n  this._ionEndpointResource = endpointResource;\n\n  // The primary IonResource from which an instance is derived\n  this._ionRoot = undefined;\n\n  // Shared promise for endpooint requests amd credits (only ever set on the root request)\n  this._pendingPromise = undefined;\n  this._credits = undefined;\n  this._isExternal = isExternal;\n\n  /**\n   * A function that, if defined, will be invoked when the access token is refreshed.\n   * @private\n   * @type {IonResourceRefreshCallback|undefined}\n   */\n  this.refreshCallback = undefined;\n}\n\nif (defined(Object.create)) {\n  IonResource.prototype = Object.create(Resource.prototype);\n  IonResource.prototype.constructor = IonResource;\n}\n\n/**\n * Asynchronously creates an instance.\n *\n * @param {number} assetId The Cesium ion asset id.\n * @param {object} [options] An object with the following properties:\n * @param {string} [options.accessToken=Ion.defaultAccessToken] The access token to use.\n * @param {string|Resource} [options.server=Ion.defaultServer] The resource to the Cesium ion API server.\n * @returns {Promise<IonResource>} A Promise to an instance representing the Cesium ion Asset.\n *\n * @example\n * // Load a Cesium3DTileset with asset ID of 124624234\n * try {\n *   const resource = await Cesium.IonResource.fromAssetId(124624234);\n *   const tileset = await Cesium.Cesium3DTileset.fromUrl(resource);\n *   scene.primitives.add(tileset);\n * } catch (error) {\n *   console.error(`Error creating tileset: ${error}`);\n * }\n *\n * @example\n * //Load a CZML file with asset ID of 10890\n * Cesium.IonResource.fromAssetId(10890)\n *   .then(function (resource) {\n *     viewer.dataSources.add(Cesium.CzmlDataSource.load(resource));\n *   });\n */\nIonResource.fromAssetId = function (assetId, options) {\n  const endpointResource = IonResource._createEndpointResource(\n    assetId,\n    options,\n  );\n\n  return endpointResource.fetchJson().then(function (endpoint) {\n    return new IonResource(endpoint, endpointResource);\n  });\n};\n\nObject.defineProperties(IonResource.prototype, {\n  /**\n   * Gets the credits required for attribution of the asset.\n   *\n   * @memberof IonResource.prototype\n   * @type {Credit[]}\n   * @readonly\n   */\n  credits: {\n    get: function () {\n      // Only we're not the root, return its credits;\n      if (defined(this._ionRoot)) {\n        return this._ionRoot.credits;\n      }\n\n      // We are the root\n      if (defined(this._credits)) {\n        return this._credits;\n      }\n\n      this._credits = IonResource.getCreditsFromEndpoint(\n        this._ionEndpoint,\n        this._ionEndpointResource,\n      );\n\n      return this._credits;\n    },\n  },\n});\n\n/** @private */\nIonResource.getCreditsFromEndpoint = function (endpoint, endpointResource) {\n  const credits = endpoint.attributions.map(Credit.getIonCredit);\n  const defaultTokenCredit = Ion.getDefaultTokenCredit(\n    endpointResource.queryParameters.access_token,\n  );\n  if (defined(defaultTokenCredit)) {\n    credits.push(Credit.clone(defaultTokenCredit));\n  }\n  return credits;\n};\n\n/** @inheritdoc */\nIonResource.prototype.clone = function (result) {\n  // We always want to use the root's information because it's the most up-to-date\n  const ionRoot = this._ionRoot ?? this;\n\n  if (!defined(result)) {\n    result = new IonResource(\n      ionRoot._ionEndpoint,\n      ionRoot._ionEndpointResource,\n    );\n  }\n\n  result = Resource.prototype.clone.call(this, result);\n  result._ionRoot = ionRoot;\n  result._isExternal = this._isExternal;\n\n  return result;\n};\n\nIonResource.prototype.fetchImage = function (options) {\n  if (!this._isExternal) {\n    const userOptions = options;\n    options = {\n      preferBlob: true,\n    };\n    if (defined(userOptions)) {\n      options.flipY = userOptions.flipY;\n      options.preferImageBitmap = userOptions.preferImageBitmap;\n    }\n  }\n\n  return Resource.prototype.fetchImage.call(this, options);\n};\n\nIonResource.prototype._makeRequest = function (options) {\n  // Don't send ion access token to non-ion servers.\n  if (\n    this._isExternal ||\n    new Uri(this.url).authority() !== this._ionEndpointDomain\n  ) {\n    return Resource.prototype._makeRequest.call(this, options);\n  }\n\n  options.headers = addClientHeaders(options.headers);\n  options.headers.Authorization = `Bearer ${this._ionEndpoint.accessToken}`;\n\n  return Resource.prototype._makeRequest.call(this, options);\n};\n\n/**\n * @private\n **/\nIonResource._createEndpointResource = function (assetId, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"assetId\", assetId);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  let server = options.server ?? Ion.defaultServer;\n  const accessToken = options.accessToken ?? Ion.defaultAccessToken;\n  server = Resource.createIfNeeded(server);\n\n  const resourceOptions = {\n    url: `v1/assets/${assetId}/endpoint`,\n  };\n\n  if (defined(accessToken)) {\n    resourceOptions.queryParameters = { access_token: accessToken };\n  }\n\n  if (defined(options.queryParameters)) {\n    resourceOptions.queryParameters = {\n      ...resourceOptions.queryParameters,\n      ...options.queryParameters,\n    };\n  }\n\n  resourceOptions.headers = addClientHeaders(resourceOptions.headers);\n\n  return server.getDerivedResource(resourceOptions);\n};\n\n/**\n * Adds CesiumJS client headers to the provided headers object.\n * @private\n * @param {object} [headers={}] The headers to modify.\n * @returns {object} The modified headers.\n */\nfunction addClientHeaders(headers = {}) {\n  headers[\"X-Cesium-Client\"] = \"CesiumJS\";\n\n  /* global CESIUM_VERSION */\n  if (typeof CESIUM_VERSION !== \"undefined\") {\n    headers[\"X-Cesium-Client-Version\"] = CESIUM_VERSION;\n  }\n\n  return headers;\n}\n\nfunction retryCallback(that, error) {\n  const ionRoot = that._ionRoot ?? that;\n  const endpointResource = ionRoot._ionEndpointResource;\n\n  // Image is not available in worker threads, so this avoids\n  // a ReferenceError\n  const imageDefined = typeof Image !== \"undefined\";\n\n  // We only want to retry in the case of invalid credentials (401) or image\n  // requests(since Image failures can not provide a status code)\n  if (\n    !defined(error) ||\n    (error.statusCode !== 401 &&\n      !(imageDefined && error.target instanceof Image))\n  ) {\n    return Promise.resolve(false);\n  }\n\n  // We use a shared pending promise for all derived assets, since they share\n  // a common access_token.  If we're already requesting a new token for this\n  // asset, we wait on the same promise.\n  if (!defined(ionRoot._pendingPromise)) {\n    ionRoot._pendingPromise = endpointResource\n      .fetchJson()\n      .then(function (newEndpoint) {\n        const refreshCallback = that.refreshCallback ?? ionRoot.refreshCallback;\n        if (defined(refreshCallback)) {\n          refreshCallback(ionRoot, newEndpoint);\n        }\n\n        // Set the token for root resource so new derived resources automatically pick it up\n        ionRoot._ionEndpoint = newEndpoint;\n        return ionRoot._ionEndpoint;\n      })\n      .finally(function (newEndpoint) {\n        // Pass or fail, we're done with this promise, the next failure should use a new one.\n        ionRoot._pendingPromise = undefined;\n        return newEndpoint;\n      });\n  }\n\n  return ionRoot._pendingPromise.then(function (newEndpoint) {\n    // Set the new token and endpoint for this resource\n    that._ionEndpoint = newEndpoint;\n    return true;\n  });\n}\n\nexport default IonResource;\n","import JulianDate from \"./JulianDate.js\";\nimport TimeInterval from \"./TimeInterval.js\";\n\nconst MINIMUM_VALUE = Object.freeze(\n  JulianDate.fromIso8601(\"0000-01-01T00:00:00Z\"),\n);\nconst MAXIMUM_VALUE = Object.freeze(\n  JulianDate.fromIso8601(\"9999-12-31T24:00:00Z\"),\n);\nconst MAXIMUM_INTERVAL = Object.freeze(\n  new TimeInterval({\n    start: MINIMUM_VALUE,\n    stop: MAXIMUM_VALUE,\n  }),\n);\n\n/**\n * Constants related to ISO8601 support.\n *\n * @namespace\n *\n * @see {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601 on Wikipedia}\n * @see JulianDate\n * @see TimeInterval\n */\nconst Iso8601 = {\n  /**\n   * A {@link JulianDate} representing the earliest time representable by an ISO8601 date.\n   * This is equivalent to the date string '0000-01-01T00:00:00Z'\n   *\n   * @type {JulianDate}\n   * @constant\n   */\n  MINIMUM_VALUE: MINIMUM_VALUE,\n\n  /**\n   * A {@link JulianDate} representing the latest time representable by an ISO8601 date.\n   * This is equivalent to the date string '9999-12-31T24:00:00Z'\n   *\n   * @type {JulianDate}\n   * @constant\n   */\n  MAXIMUM_VALUE: MAXIMUM_VALUE,\n\n  /**\n   * A {@link TimeInterval} representing the largest interval representable by an ISO8601 interval.\n   * This is equivalent to the interval string '0000-01-01T00:00:00Z/9999-12-31T24:00:00Z'\n   *\n   * @type {TimeInterval}\n   * @constant\n   */\n  MAXIMUM_INTERVAL: MAXIMUM_INTERVAL,\n};\nexport default Iso8601;\n","import binarySearch from \"./binarySearch.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport GregorianDate from \"./GregorianDate.js\";\nimport isLeapYear from \"./isLeapYear.js\";\nimport LeapSecond from \"./LeapSecond.js\";\nimport TimeConstants from \"./TimeConstants.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\nconst gregorianDateScratch = new GregorianDate();\nconst daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst daysInLeapFebruary = 29;\n\nfunction compareLeapSecondDates(leapSecond, dateToFind) {\n  return JulianDate.compare(leapSecond.julianDate, dateToFind.julianDate);\n}\n\n// we don't really need a leap second instance, anything with a julianDate property will do\nconst binarySearchScratchLeapSecond = new LeapSecond();\n\nfunction convertUtcToTai(julianDate) {\n  //Even though julianDate is in UTC, we'll treat it as TAI and\n  //search the leap second table for it.\n  binarySearchScratchLeapSecond.julianDate = julianDate;\n  const leapSeconds = JulianDate.leapSeconds;\n  let index = binarySearch(\n    leapSeconds,\n    binarySearchScratchLeapSecond,\n    compareLeapSecondDates,\n  );\n\n  if (index < 0) {\n    index = ~index;\n  }\n\n  if (index >= leapSeconds.length) {\n    index = leapSeconds.length - 1;\n  }\n\n  let offset = leapSeconds[index].offset;\n  if (index > 0) {\n    //Now we have the index of the closest leap second that comes on or after our UTC time.\n    //However, if the difference between the UTC date being converted and the TAI\n    //defined leap second is greater than the offset, we are off by one and need to use\n    //the previous leap second.\n    const difference = JulianDate.secondsDifference(\n      leapSeconds[index].julianDate,\n      julianDate,\n    );\n    if (difference > offset) {\n      index--;\n      offset = leapSeconds[index].offset;\n    }\n  }\n\n  JulianDate.addSeconds(julianDate, offset, julianDate);\n}\n\nfunction convertTaiToUtc(julianDate, result) {\n  binarySearchScratchLeapSecond.julianDate = julianDate;\n  const leapSeconds = JulianDate.leapSeconds;\n  let index = binarySearch(\n    leapSeconds,\n    binarySearchScratchLeapSecond,\n    compareLeapSecondDates,\n  );\n  if (index < 0) {\n    index = ~index;\n  }\n\n  //All times before our first leap second get the first offset.\n  if (index === 0) {\n    return JulianDate.addSeconds(julianDate, -leapSeconds[0].offset, result);\n  }\n\n  //All times after our leap second get the last offset.\n  if (index >= leapSeconds.length) {\n    return JulianDate.addSeconds(\n      julianDate,\n      -leapSeconds[index - 1].offset,\n      result,\n    );\n  }\n\n  //Compute the difference between the found leap second and the time we are converting.\n  const difference = JulianDate.secondsDifference(\n    leapSeconds[index].julianDate,\n    julianDate,\n  );\n\n  if (difference === 0) {\n    //The date is in our leap second table.\n    return JulianDate.addSeconds(\n      julianDate,\n      -leapSeconds[index].offset,\n      result,\n    );\n  }\n\n  if (difference <= 1.0) {\n    //The requested date is during the moment of a leap second, then we cannot convert to UTC\n    return undefined;\n  }\n\n  //The time is in between two leap seconds, index is the leap second after the date\n  //we're converting, so we subtract one to get the correct LeapSecond instance.\n  return JulianDate.addSeconds(\n    julianDate,\n    -leapSeconds[--index].offset,\n    result,\n  );\n}\n\nfunction setComponents(wholeDays, secondsOfDay, julianDate) {\n  const extraDays = (secondsOfDay / TimeConstants.SECONDS_PER_DAY) | 0;\n  wholeDays += extraDays;\n  secondsOfDay -= TimeConstants.SECONDS_PER_DAY * extraDays;\n\n  if (secondsOfDay < 0) {\n    wholeDays--;\n    secondsOfDay += TimeConstants.SECONDS_PER_DAY;\n  }\n\n  julianDate.dayNumber = wholeDays;\n  julianDate.secondsOfDay = secondsOfDay;\n  return julianDate;\n}\n\nfunction computeJulianDateComponents(\n  year,\n  month,\n  day,\n  hour,\n  minute,\n  second,\n  millisecond,\n) {\n  // Algorithm from page 604 of the Explanatory Supplement to the\n  // Astronomical Almanac (Seidelmann 1992).\n\n  const a = ((month - 14) / 12) | 0;\n  const b = year + 4800 + a;\n  let dayNumber =\n    (((1461 * b) / 4) | 0) +\n    (((367 * (month - 2 - 12 * a)) / 12) | 0) -\n    (((3 * (((b + 100) / 100) | 0)) / 4) | 0) +\n    day -\n    32075;\n\n  // JulianDates are noon-based\n  hour = hour - 12;\n  if (hour < 0) {\n    hour += 24;\n  }\n\n  const secondsOfDay =\n    second +\n    (hour * TimeConstants.SECONDS_PER_HOUR +\n      minute * TimeConstants.SECONDS_PER_MINUTE +\n      millisecond * TimeConstants.SECONDS_PER_MILLISECOND);\n\n  if (secondsOfDay >= 43200.0) {\n    dayNumber -= 1;\n  }\n\n  return [dayNumber, secondsOfDay];\n}\n\n//Regular expressions used for ISO8601 date parsing.\n//YYYY\nconst matchCalendarYear = /^(\\d{4})$/;\n//YYYY-MM (YYYYMM is invalid)\nconst matchCalendarMonth = /^(\\d{4})-(\\d{2})$/;\n//YYYY-DDD or YYYYDDD\nconst matchOrdinalDate = /^(\\d{4})-?(\\d{3})$/;\n//YYYY-Www or YYYYWww or YYYY-Www-D or YYYYWwwD\nconst matchWeekDate = /^(\\d{4})-?W(\\d{2})-?(\\d{1})?$/;\n//YYYY-MM-DD or YYYYMMDD\nconst matchCalendarDate = /^(\\d{4})-?(\\d{2})-?(\\d{2})$/;\n// Match utc offset\nconst utcOffset = /([Z+\\-])?(\\d{2})?:?(\\d{2})?$/;\n// Match hours HH or HH.xxxxx\nconst matchHours = /^(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\n// Match hours/minutes HH:MM HHMM.xxxxx\nconst matchHoursMinutes = /^(\\d{2}):?(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\n// Match hours/minutes HH:MM:SS HHMMSS.xxxxx\nconst matchHoursMinutesSeconds =\n  /^(\\d{2}):?(\\d{2}):?(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\n\nconst iso8601ErrorMessage = \"Invalid ISO 8601 date.\";\n\n/**\n * Represents an astronomical Julian date, which is the number of days since noon on January 1, -4712 (4713 BC).\n * For increased precision, this class stores the whole number part of the date and the seconds\n * part of the date in separate components.  In order to be safe for arithmetic and represent\n * leap seconds, the date is always stored in the International Atomic Time standard\n * {@link TimeStandard.TAI}.\n * @alias JulianDate\n * @constructor\n *\n * @param {number} [julianDayNumber=0.0] The Julian Day Number representing the number of whole days.  Fractional days will also be handled correctly.\n * @param {number} [secondsOfDay=0.0] The number of seconds into the current Julian Day Number.  Fractional seconds, negative seconds and seconds greater than a day will be handled correctly.\n * @param {TimeStandard} [timeStandard=TimeStandard.UTC] The time standard in which the first two parameters are defined.\n */\nfunction JulianDate(julianDayNumber, secondsOfDay, timeStandard) {\n  /**\n   * Gets or sets the number of whole days.\n   * @type {number}\n   */\n  this.dayNumber = undefined;\n\n  /**\n   * Gets or sets the number of seconds into the current day.\n   * @type {number}\n   */\n  this.secondsOfDay = undefined;\n\n  julianDayNumber = julianDayNumber ?? 0.0;\n  secondsOfDay = secondsOfDay ?? 0.0;\n  timeStandard = timeStandard ?? TimeStandard.UTC;\n\n  //If julianDayNumber is fractional, make it an integer and add the number of seconds the fraction represented.\n  const wholeDays = julianDayNumber | 0;\n  secondsOfDay =\n    secondsOfDay +\n    (julianDayNumber - wholeDays) * TimeConstants.SECONDS_PER_DAY;\n\n  setComponents(wholeDays, secondsOfDay, this);\n\n  if (timeStandard === TimeStandard.UTC) {\n    convertUtcToTai(this);\n  }\n}\n\n/**\n * Creates a new instance from a GregorianDate.\n *\n * @param {GregorianDate} date A GregorianDate.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n *\n * @exception {DeveloperError} date must be a valid GregorianDate.\n */\nJulianDate.fromGregorianDate = function (date, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!(date instanceof GregorianDate)) {\n    throw new DeveloperError(\"date must be a valid GregorianDate.\");\n  }\n  //>>includeEnd('debug');\n\n  const components = computeJulianDateComponents(\n    date.year,\n    date.month,\n    date.day,\n    date.hour,\n    date.minute,\n    date.second,\n    date.millisecond,\n  );\n  if (!defined(result)) {\n    return new JulianDate(components[0], components[1], TimeStandard.UTC);\n  }\n  setComponents(components[0], components[1], result);\n  convertUtcToTai(result);\n  return result;\n};\n\n/**\n * Creates a new instance from a JavaScript Date.\n *\n * @param {Date} date A JavaScript Date.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n *\n * @exception {DeveloperError} date must be a valid JavaScript Date.\n */\nJulianDate.fromDate = function (date, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!(date instanceof Date) || isNaN(date.getTime())) {\n    throw new DeveloperError(\"date must be a valid JavaScript Date.\");\n  }\n  //>>includeEnd('debug');\n\n  const components = computeJulianDateComponents(\n    date.getUTCFullYear(),\n    date.getUTCMonth() + 1,\n    date.getUTCDate(),\n    date.getUTCHours(),\n    date.getUTCMinutes(),\n    date.getUTCSeconds(),\n    date.getUTCMilliseconds(),\n  );\n  if (!defined(result)) {\n    return new JulianDate(components[0], components[1], TimeStandard.UTC);\n  }\n  setComponents(components[0], components[1], result);\n  convertUtcToTai(result);\n  return result;\n};\n\n/**\n * Creates a new instance from a from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date.\n * This method is superior to <code>Date.parse</code> because it will handle all valid formats defined by the ISO 8601\n * specification, including leap seconds and sub-millisecond times, which discarded by most JavaScript implementations.\n *\n * @param {string} iso8601String An ISO 8601 date.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n *\n * @exception {DeveloperError} Invalid ISO 8601 date.\n */\nJulianDate.fromIso8601 = function (iso8601String, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof iso8601String !== \"string\") {\n    throw new DeveloperError(iso8601ErrorMessage);\n  }\n  //>>includeEnd('debug');\n\n  //Comma and decimal point both indicate a fractional number according to ISO 8601,\n  //start out by blanket replacing , with . which is the only valid such symbol in JS.\n  iso8601String = iso8601String.replace(\",\", \".\");\n\n  //Split the string into its date and time components, denoted by a mandatory T\n  let tokens = iso8601String.split(\"T\");\n  let year;\n  let month = 1;\n  let day = 1;\n  let hour = 0;\n  let minute = 0;\n  let second = 0;\n  let millisecond = 0;\n\n  //Lacking a time is okay, but a missing date is illegal.\n  const date = tokens[0];\n  const time = tokens[1];\n  let tmp;\n  let inLeapYear;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(date)) {\n    throw new DeveloperError(iso8601ErrorMessage);\n  }\n\n  let dashCount;\n  //>>includeEnd('debug');\n\n  //First match the date against possible regular expressions.\n  tokens = date.match(matchCalendarDate);\n  if (tokens !== null) {\n    //>>includeStart('debug', pragmas.debug);\n    dashCount = date.split(\"-\").length - 1;\n    if (dashCount > 0 && dashCount !== 2) {\n      throw new DeveloperError(iso8601ErrorMessage);\n    }\n    //>>includeEnd('debug');\n    year = +tokens[1];\n    month = +tokens[2];\n    day = +tokens[3];\n  } else {\n    tokens = date.match(matchCalendarMonth);\n    if (tokens !== null) {\n      year = +tokens[1];\n      month = +tokens[2];\n    } else {\n      tokens = date.match(matchCalendarYear);\n      if (tokens !== null) {\n        year = +tokens[1];\n      } else {\n        //Not a year/month/day so it must be an ordinal date.\n        let dayOfYear;\n        tokens = date.match(matchOrdinalDate);\n        if (tokens !== null) {\n          year = +tokens[1];\n          dayOfYear = +tokens[2];\n          inLeapYear = isLeapYear(year);\n\n          //This validation is only applicable for this format.\n          //>>includeStart('debug', pragmas.debug);\n          if (\n            dayOfYear < 1 ||\n            (inLeapYear && dayOfYear > 366) ||\n            (!inLeapYear && dayOfYear > 365)\n          ) {\n            throw new DeveloperError(iso8601ErrorMessage);\n          }\n          //>>includeEnd('debug');\n        } else {\n          tokens = date.match(matchWeekDate);\n          if (tokens !== null) {\n            //ISO week date to ordinal date from\n            //http://en.wikipedia.org/w/index.php?title=ISO_week_date&oldid=474176775\n            year = +tokens[1];\n            const weekNumber = +tokens[2];\n            const dayOfWeek = +tokens[3] || 0;\n\n            //>>includeStart('debug', pragmas.debug);\n            dashCount = date.split(\"-\").length - 1;\n            if (\n              dashCount > 0 &&\n              ((!defined(tokens[3]) && dashCount !== 1) ||\n                (defined(tokens[3]) && dashCount !== 2))\n            ) {\n              throw new DeveloperError(iso8601ErrorMessage);\n            }\n            //>>includeEnd('debug');\n\n            const january4 = new Date(Date.UTC(year, 0, 4));\n            dayOfYear = weekNumber * 7 + dayOfWeek - january4.getUTCDay() - 3;\n          } else {\n            //None of our regular expressions succeeded in parsing the date properly.\n            //>>includeStart('debug', pragmas.debug);\n            throw new DeveloperError(iso8601ErrorMessage);\n            //>>includeEnd('debug');\n          }\n        }\n        //Split an ordinal date into month/day.\n        tmp = new Date(Date.UTC(year, 0, 1));\n        tmp.setUTCDate(dayOfYear);\n        month = tmp.getUTCMonth() + 1;\n        day = tmp.getUTCDate();\n      }\n    }\n  }\n\n  //Now that we have all of the date components, validate them to make sure nothing is out of range.\n  inLeapYear = isLeapYear(year);\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    month < 1 ||\n    month > 12 ||\n    day < 1 ||\n    ((month !== 2 || !inLeapYear) && day > daysInMonth[month - 1]) ||\n    (inLeapYear && month === 2 && day > daysInLeapFebruary)\n  ) {\n    throw new DeveloperError(iso8601ErrorMessage);\n  }\n  //>>includeEnd('debug');\n\n  //Now move onto the time string, which is much simpler.\n  //If no time is specified, it is considered the beginning of the day, UTC to match Javascript's implementation.\n  let offsetIndex;\n  if (defined(time)) {\n    tokens = time.match(matchHoursMinutesSeconds);\n    if (tokens !== null) {\n      //>>includeStart('debug', pragmas.debug);\n      dashCount = time.split(\":\").length - 1;\n      if (dashCount > 0 && dashCount !== 2 && dashCount !== 3) {\n        throw new DeveloperError(iso8601ErrorMessage);\n      }\n      //>>includeEnd('debug');\n\n      hour = +tokens[1];\n      minute = +tokens[2];\n      second = +tokens[3];\n      millisecond = +(tokens[4] || 0) * 1000.0;\n      offsetIndex = 5;\n    } else {\n      tokens = time.match(matchHoursMinutes);\n      if (tokens !== null) {\n        //>>includeStart('debug', pragmas.debug);\n        dashCount = time.split(\":\").length - 1;\n        if (dashCount > 2) {\n          throw new DeveloperError(iso8601ErrorMessage);\n        }\n        //>>includeEnd('debug');\n\n        hour = +tokens[1];\n        minute = +tokens[2];\n        second = +(tokens[3] || 0) * 60.0;\n        offsetIndex = 4;\n      } else {\n        tokens = time.match(matchHours);\n        if (tokens !== null) {\n          hour = +tokens[1];\n          minute = +(tokens[2] || 0) * 60.0;\n          offsetIndex = 3;\n        } else {\n          //>>includeStart('debug', pragmas.debug);\n          throw new DeveloperError(iso8601ErrorMessage);\n          //>>includeEnd('debug');\n        }\n      }\n    }\n\n    //Validate that all values are in proper range.  Minutes and hours have special cases at 60 and 24.\n    //>>includeStart('debug', pragmas.debug);\n    if (\n      minute >= 60 ||\n      second >= 61 ||\n      hour > 24 ||\n      (hour === 24 && (minute > 0 || second > 0 || millisecond > 0))\n    ) {\n      throw new DeveloperError(iso8601ErrorMessage);\n    }\n    //>>includeEnd('debug');\n\n    //Check the UTC offset value, if no value exists, use local time\n    //a Z indicates UTC, + or - are offsets.\n    const offset = tokens[offsetIndex];\n    const offsetHours = +tokens[offsetIndex + 1];\n    const offsetMinutes = +(tokens[offsetIndex + 2] || 0);\n    switch (offset) {\n      case \"+\":\n        hour = hour - offsetHours;\n        minute = minute - offsetMinutes;\n        break;\n      case \"-\":\n        hour = hour + offsetHours;\n        minute = minute + offsetMinutes;\n        break;\n      case \"Z\":\n        break;\n      default:\n        minute =\n          minute +\n          new Date(\n            Date.UTC(year, month - 1, day, hour, minute),\n          ).getTimezoneOffset();\n        break;\n    }\n  }\n\n  //ISO8601 denotes a leap second by any time having a seconds component of 60 seconds.\n  //If that's the case, we need to temporarily subtract a second in order to build a UTC date.\n  //Then we add it back in after converting to TAI.\n  const isLeapSecond = second === 60;\n  if (isLeapSecond) {\n    second--;\n  }\n\n  //Even if we successfully parsed the string into its components, after applying UTC offset or\n  //special cases like 24:00:00 denoting midnight, we need to normalize the data appropriately.\n\n  //milliseconds can never be greater than 1000, and seconds can't be above 60, so we start with minutes\n  while (minute >= 60) {\n    minute -= 60;\n    hour++;\n  }\n\n  while (hour >= 24) {\n    hour -= 24;\n    day++;\n  }\n\n  tmp = inLeapYear && month === 2 ? daysInLeapFebruary : daysInMonth[month - 1];\n  while (day > tmp) {\n    day -= tmp;\n    month++;\n\n    if (month > 12) {\n      month -= 12;\n      year++;\n    }\n\n    tmp =\n      inLeapYear && month === 2 ? daysInLeapFebruary : daysInMonth[month - 1];\n  }\n\n  //If UTC offset is at the beginning/end of the day, minutes can be negative.\n  while (minute < 0) {\n    minute += 60;\n    hour--;\n  }\n\n  while (hour < 0) {\n    hour += 24;\n    day--;\n  }\n\n  while (day < 1) {\n    month--;\n    if (month < 1) {\n      month += 12;\n      year--;\n    }\n\n    tmp =\n      inLeapYear && month === 2 ? daysInLeapFebruary : daysInMonth[month - 1];\n    day += tmp;\n  }\n\n  //Now create the JulianDate components from the Gregorian date and actually create our instance.\n  const components = computeJulianDateComponents(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n  );\n\n  if (!defined(result)) {\n    result = new JulianDate(components[0], components[1], TimeStandard.UTC);\n  } else {\n    setComponents(components[0], components[1], result);\n    convertUtcToTai(result);\n  }\n\n  //If we were on a leap second, add it back.\n  if (isLeapSecond) {\n    JulianDate.addSeconds(result, 1, result);\n  }\n\n  return result;\n};\n\n/**\n * Creates a new instance that represents the current system time.\n * This is equivalent to calling <code>JulianDate.fromDate(new Date());</code>.\n *\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n */\nJulianDate.now = function (result) {\n  return JulianDate.fromDate(new Date(), result);\n};\n\nconst toGregorianDateScratch = new JulianDate(0, 0, TimeStandard.TAI);\n\n/**\n * Creates a {@link GregorianDate} from the provided instance.\n *\n * @param {JulianDate} julianDate The date to be converted.\n * @param {GregorianDate} [result] An existing instance to use for the result.\n * @returns {GregorianDate} The modified result parameter or a new instance if none was provided.\n */\nJulianDate.toGregorianDate = function (julianDate, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let isLeapSecond = false;\n  let thisUtc = convertTaiToUtc(julianDate, toGregorianDateScratch);\n  if (!defined(thisUtc)) {\n    //Conversion to UTC will fail if we are during a leap second.\n    //If that's the case, subtract a second and convert again.\n    //JavaScript doesn't support leap seconds, so this results in second 59 being repeated twice.\n    JulianDate.addSeconds(julianDate, -1, toGregorianDateScratch);\n    thisUtc = convertTaiToUtc(toGregorianDateScratch, toGregorianDateScratch);\n    isLeapSecond = true;\n  }\n\n  let julianDayNumber = thisUtc.dayNumber;\n  const secondsOfDay = thisUtc.secondsOfDay;\n\n  if (secondsOfDay >= 43200.0) {\n    julianDayNumber += 1;\n  }\n\n  // Algorithm from page 604 of the Explanatory Supplement to the\n  // Astronomical Almanac (Seidelmann 1992).\n  let L = (julianDayNumber + 68569) | 0;\n  const N = ((4 * L) / 146097) | 0;\n  L = (L - (((146097 * N + 3) / 4) | 0)) | 0;\n  const I = ((4000 * (L + 1)) / 1461001) | 0;\n  L = (L - (((1461 * I) / 4) | 0) + 31) | 0;\n  const J = ((80 * L) / 2447) | 0;\n  const day = (L - (((2447 * J) / 80) | 0)) | 0;\n  L = (J / 11) | 0;\n  const month = (J + 2 - 12 * L) | 0;\n  const year = (100 * (N - 49) + I + L) | 0;\n\n  let hour = (secondsOfDay / TimeConstants.SECONDS_PER_HOUR) | 0;\n  let remainingSeconds = secondsOfDay - hour * TimeConstants.SECONDS_PER_HOUR;\n  const minute = (remainingSeconds / TimeConstants.SECONDS_PER_MINUTE) | 0;\n  remainingSeconds =\n    remainingSeconds - minute * TimeConstants.SECONDS_PER_MINUTE;\n  let second = remainingSeconds | 0;\n  const millisecond =\n    (remainingSeconds - second) / TimeConstants.SECONDS_PER_MILLISECOND;\n\n  // JulianDates are noon-based\n  hour += 12;\n  if (hour > 23) {\n    hour -= 24;\n  }\n\n  //If we were on a leap second, add it back.\n  if (isLeapSecond) {\n    second += 1;\n  }\n\n  if (!defined(result)) {\n    return new GregorianDate(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      isLeapSecond,\n    );\n  }\n\n  result.year = year;\n  result.month = month;\n  result.day = day;\n  result.hour = hour;\n  result.minute = minute;\n  result.second = second;\n  result.millisecond = millisecond;\n  result.isLeapSecond = isLeapSecond;\n  return result;\n};\n\n/**\n * Creates a JavaScript Date from the provided instance.\n * Since JavaScript dates are only accurate to the nearest millisecond and\n * cannot represent a leap second, consider using {@link JulianDate.toGregorianDate} instead.\n * If the provided JulianDate is during a leap second, the previous second is used.\n *\n * @param {JulianDate} julianDate The date to be converted.\n * @returns {Date} A new instance representing the provided date.\n */\nJulianDate.toDate = function (julianDate) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch);\n  let second = gDate.second;\n  if (gDate.isLeapSecond) {\n    second -= 1;\n  }\n  return new Date(\n    Date.UTC(\n      gDate.year,\n      gDate.month - 1,\n      gDate.day,\n      gDate.hour,\n      gDate.minute,\n      second,\n      gDate.millisecond,\n    ),\n  );\n};\n\n/**\n * Creates an ISO8601 representation of the provided date.\n *\n * @param {JulianDate} julianDate The date to be converted.\n * @param {number} [precision] The number of fractional digits used to represent the seconds component.  By default, the most precise representation is used.\n * @returns {string} The ISO8601 representation of the provided date.\n */\nJulianDate.toIso8601 = function (julianDate, precision) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch);\n  let year = gDate.year;\n  let month = gDate.month;\n  let day = gDate.day;\n  let hour = gDate.hour;\n  const minute = gDate.minute;\n  const second = gDate.second;\n  const millisecond = gDate.millisecond;\n\n  // special case - Iso8601.MAXIMUM_VALUE produces a string which we can't parse unless we adjust.\n  // 10000-01-01T00:00:00 is the same instant as 9999-12-31T24:00:00\n  if (\n    year === 10000 &&\n    month === 1 &&\n    day === 1 &&\n    hour === 0 &&\n    minute === 0 &&\n    second === 0 &&\n    millisecond === 0\n  ) {\n    year = 9999;\n    month = 12;\n    day = 31;\n    hour = 24;\n  }\n\n  let millisecondStr;\n\n  if (!defined(precision) && millisecond !== 0) {\n    // Forces milliseconds into a number with at least 3 digits.\n    const millisecondHundreds = millisecond * 0.01;\n    // Below 1e-6, toString returns scientific notation, so it should be replaced by toFixed with appropriate number of digits.\n    // 20 digits is a trade-off choice guided by JavaScript's Number representation accuracy (15-17 decimal digits for most numbers).\n    // Using toFixed(20) ensures capturing enough precision while avoiding inaccuracies due to floating-point limitations.\n    millisecondStr =\n      millisecondHundreds < 1e-6\n        ? millisecondHundreds.toFixed(20).replace(\".\", \"\").replace(/0+$/, \"\")\n        : millisecondHundreds.toString().replace(\".\", \"\");\n    return `${year.toString().padStart(4, \"0\")}-${month\n      .toString()\n      .padStart(2, \"0\")}-${day.toString().padStart(2, \"0\")}T${hour\n      .toString()\n      .padStart(2, \"0\")}:${minute.toString().padStart(2, \"0\")}:${second\n      .toString()\n      .padStart(2, \"0\")}.${millisecondStr}Z`;\n  }\n\n  //Precision is either 0 or milliseconds is 0 with undefined precision, in either case, leave off milliseconds entirely\n  if (!defined(precision) || precision === 0) {\n    return `${year.toString().padStart(4, \"0\")}-${month\n      .toString()\n      .padStart(2, \"0\")}-${day.toString().padStart(2, \"0\")}T${hour\n      .toString()\n      .padStart(2, \"0\")}:${minute\n      .toString()\n      .padStart(2, \"0\")}:${second.toString().padStart(2, \"0\")}Z`;\n  }\n\n  //Forces milliseconds into a number with at least 3 digits to whatever the specified precision is.\n  millisecondStr = (millisecond * 0.01)\n    .toFixed(precision)\n    .replace(\".\", \"\")\n    .slice(0, precision);\n  return `${year.toString().padStart(4, \"0\")}-${month\n    .toString()\n    .padStart(2, \"0\")}-${day.toString().padStart(2, \"0\")}T${hour\n    .toString()\n    .padStart(2, \"0\")}:${minute.toString().padStart(2, \"0\")}:${second\n    .toString()\n    .padStart(2, \"0\")}.${millisecondStr}Z`;\n};\n\n/**\n * Duplicates a JulianDate instance.\n *\n * @param {JulianDate} julianDate The date to duplicate.\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided. Returns undefined if julianDate is undefined.\n */\nJulianDate.clone = function (julianDate, result) {\n  if (!defined(julianDate)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new JulianDate(\n      julianDate.dayNumber,\n      julianDate.secondsOfDay,\n      TimeStandard.TAI,\n    );\n  }\n  result.dayNumber = julianDate.dayNumber;\n  result.secondsOfDay = julianDate.secondsOfDay;\n  return result;\n};\n\n/**\n * Compares two instances.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {number} A negative value if left is less than right, a positive value if left is greater than right, or zero if left and right are equal.\n */\nJulianDate.compare = function (left, right) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"left is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"right is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const julianDayNumberDifference = left.dayNumber - right.dayNumber;\n  if (julianDayNumberDifference !== 0) {\n    return julianDayNumberDifference;\n  }\n  return left.secondsOfDay - right.secondsOfDay;\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {JulianDate} [left] The first instance.\n * @param {JulianDate} [right] The second instance.\n * @returns {boolean} <code>true</code> if the dates are equal; otherwise, <code>false</code>.\n */\nJulianDate.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.dayNumber === right.dayNumber &&\n      left.secondsOfDay === right.secondsOfDay)\n  );\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are within <code>epsilon</code> seconds of\n * each other.  That is, in order for the dates to be considered equal (and for\n * this function to return <code>true</code>), the absolute value of the difference between them, in\n * seconds, must be less than <code>epsilon</code>.\n *\n * @param {JulianDate} [left] The first instance.\n * @param {JulianDate} [right] The second instance.\n * @param {number} [epsilon=0] The maximum number of seconds that should separate the two instances.\n * @returns {boolean} <code>true</code> if the two dates are within <code>epsilon</code> seconds of each other; otherwise <code>false</code>.\n */\nJulianDate.equalsEpsilon = function (left, right, epsilon) {\n  epsilon = epsilon ?? 0;\n\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(JulianDate.secondsDifference(left, right)) <= epsilon)\n  );\n};\n\n/**\n * Computes the total number of whole and fractional days represented by the provided instance.\n *\n * @param {JulianDate} julianDate The date.\n * @returns {number} The Julian date as single floating point number.\n */\nJulianDate.totalDays = function (julianDate) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  //>>includeEnd('debug');\n  return (\n    julianDate.dayNumber +\n    julianDate.secondsOfDay / TimeConstants.SECONDS_PER_DAY\n  );\n};\n\n/**\n * Computes the difference in seconds between the provided instance.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {number} The difference, in seconds, when subtracting <code>right</code> from <code>left</code>.\n */\nJulianDate.secondsDifference = function (left, right) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"left is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"right is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const dayDifference =\n    (left.dayNumber - right.dayNumber) * TimeConstants.SECONDS_PER_DAY;\n  return dayDifference + (left.secondsOfDay - right.secondsOfDay);\n};\n\n/**\n * Computes the difference in days between the provided instance.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {number} The difference, in days, when subtracting <code>right</code> from <code>left</code>.\n */\nJulianDate.daysDifference = function (left, right) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"left is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"right is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const dayDifference = left.dayNumber - right.dayNumber;\n  const secondDifference =\n    (left.secondsOfDay - right.secondsOfDay) / TimeConstants.SECONDS_PER_DAY;\n  return dayDifference + secondDifference;\n};\n\n/**\n * Computes the number of seconds the provided instance is ahead of UTC.\n *\n * @param {JulianDate} julianDate The date.\n * @returns {number} The number of seconds the provided instance is ahead of UTC\n */\nJulianDate.computeTaiMinusUtc = function (julianDate) {\n  binarySearchScratchLeapSecond.julianDate = julianDate;\n  const leapSeconds = JulianDate.leapSeconds;\n  let index = binarySearch(\n    leapSeconds,\n    binarySearchScratchLeapSecond,\n    compareLeapSecondDates,\n  );\n  if (index < 0) {\n    index = ~index;\n    --index;\n    if (index < 0) {\n      index = 0;\n    }\n  }\n  return leapSeconds[index].offset;\n};\n\n/**\n * Adds the provided number of seconds to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {number} seconds The number of seconds to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addSeconds = function (julianDate, seconds, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  if (!defined(seconds)) {\n    throw new DeveloperError(\"seconds is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return setComponents(\n    julianDate.dayNumber,\n    julianDate.secondsOfDay + seconds,\n    result,\n  );\n};\n\n/**\n * Adds the provided number of minutes to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {number} minutes The number of minutes to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addMinutes = function (julianDate, minutes, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  if (!defined(minutes)) {\n    throw new DeveloperError(\"minutes is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const newSecondsOfDay =\n    julianDate.secondsOfDay + minutes * TimeConstants.SECONDS_PER_MINUTE;\n  return setComponents(julianDate.dayNumber, newSecondsOfDay, result);\n};\n\n/**\n * Adds the provided number of hours to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {number} hours The number of hours to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addHours = function (julianDate, hours, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  if (!defined(hours)) {\n    throw new DeveloperError(\"hours is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const newSecondsOfDay =\n    julianDate.secondsOfDay + hours * TimeConstants.SECONDS_PER_HOUR;\n  return setComponents(julianDate.dayNumber, newSecondsOfDay, result);\n};\n\n/**\n * Adds the provided number of days to the provided date instance.\n *\n * @param {JulianDate} julianDate The date.\n * @param {number} days The number of days to add or subtract.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n */\nJulianDate.addDays = function (julianDate, days, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(julianDate)) {\n    throw new DeveloperError(\"julianDate is required.\");\n  }\n  if (!defined(days)) {\n    throw new DeveloperError(\"days is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const newJulianDayNumber = julianDate.dayNumber + days;\n  return setComponents(newJulianDayNumber, julianDate.secondsOfDay, result);\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is earlier than <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {boolean} <code>true</code> if <code>left</code> is earlier than <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.lessThan = function (left, right) {\n  return JulianDate.compare(left, right) < 0;\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is earlier than or equal to <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {boolean} <code>true</code> if <code>left</code> is earlier than or equal to <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.lessThanOrEquals = function (left, right) {\n  return JulianDate.compare(left, right) <= 0;\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is later than <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {boolean} <code>true</code> if <code>left</code> is later than <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.greaterThan = function (left, right) {\n  return JulianDate.compare(left, right) > 0;\n};\n\n/**\n * Compares the provided instances and returns <code>true</code> if <code>left</code> is later than or equal to <code>right</code>, <code>false</code> otherwise.\n *\n * @param {JulianDate} left The first instance.\n * @param {JulianDate} right The second instance.\n * @returns {boolean} <code>true</code> if <code>left</code> is later than or equal to <code>right</code>, <code>false</code> otherwise.\n */\nJulianDate.greaterThanOrEquals = function (left, right) {\n  return JulianDate.compare(left, right) >= 0;\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {JulianDate} [result] An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\n */\nJulianDate.prototype.clone = function (result) {\n  return JulianDate.clone(this, result);\n};\n\n/**\n * Compares this and the provided instance and returns <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {JulianDate} [right] The second instance.\n * @returns {boolean} <code>true</code> if the dates are equal; otherwise, <code>false</code>.\n */\nJulianDate.prototype.equals = function (right) {\n  return JulianDate.equals(this, right);\n};\n\n/**\n * Compares this and the provided instance and returns <code>true</code> if they are within <code>epsilon</code> seconds of\n * each other.  That is, in order for the dates to be considered equal (and for\n * this function to return <code>true</code>), the absolute value of the difference between them, in\n * seconds, must be less than <code>epsilon</code>.\n *\n * @param {JulianDate} [right] The second instance.\n * @param {number} [epsilon=0] The maximum number of seconds that should separate the two instances.\n * @returns {boolean} <code>true</code> if the two dates are within <code>epsilon</code> seconds of each other; otherwise <code>false</code>.\n */\nJulianDate.prototype.equalsEpsilon = function (right, epsilon) {\n  return JulianDate.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this date in ISO8601 format.\n *\n * @returns {string} A string representing this date in ISO8601 format.\n */\nJulianDate.prototype.toString = function () {\n  return JulianDate.toIso8601(this);\n};\n\n/**\n * Gets or sets the list of leap seconds used throughout Cesium.\n * @memberof JulianDate\n * @type {LeapSecond[]}\n */\nJulianDate.leapSeconds = [\n  new LeapSecond(new JulianDate(2441317, 43210.0, TimeStandard.TAI), 10), // January 1, 1972 00:00:00 UTC\n  new LeapSecond(new JulianDate(2441499, 43211.0, TimeStandard.TAI), 11), // July 1, 1972 00:00:00 UTC\n  new LeapSecond(new JulianDate(2441683, 43212.0, TimeStandard.TAI), 12), // January 1, 1973 00:00:00 UTC\n  new LeapSecond(new JulianDate(2442048, 43213.0, TimeStandard.TAI), 13), // January 1, 1974 00:00:00 UTC\n  new LeapSecond(new JulianDate(2442413, 43214.0, TimeStandard.TAI), 14), // January 1, 1975 00:00:00 UTC\n  new LeapSecond(new JulianDate(2442778, 43215.0, TimeStandard.TAI), 15), // January 1, 1976 00:00:00 UTC\n  new LeapSecond(new JulianDate(2443144, 43216.0, TimeStandard.TAI), 16), // January 1, 1977 00:00:00 UTC\n  new LeapSecond(new JulianDate(2443509, 43217.0, TimeStandard.TAI), 17), // January 1, 1978 00:00:00 UTC\n  new LeapSecond(new JulianDate(2443874, 43218.0, TimeStandard.TAI), 18), // January 1, 1979 00:00:00 UTC\n  new LeapSecond(new JulianDate(2444239, 43219.0, TimeStandard.TAI), 19), // January 1, 1980 00:00:00 UTC\n  new LeapSecond(new JulianDate(2444786, 43220.0, TimeStandard.TAI), 20), // July 1, 1981 00:00:00 UTC\n  new LeapSecond(new JulianDate(2445151, 43221.0, TimeStandard.TAI), 21), // July 1, 1982 00:00:00 UTC\n  new LeapSecond(new JulianDate(2445516, 43222.0, TimeStandard.TAI), 22), // July 1, 1983 00:00:00 UTC\n  new LeapSecond(new JulianDate(2446247, 43223.0, TimeStandard.TAI), 23), // July 1, 1985 00:00:00 UTC\n  new LeapSecond(new JulianDate(2447161, 43224.0, TimeStandard.TAI), 24), // January 1, 1988 00:00:00 UTC\n  new LeapSecond(new JulianDate(2447892, 43225.0, TimeStandard.TAI), 25), // January 1, 1990 00:00:00 UTC\n  new LeapSecond(new JulianDate(2448257, 43226.0, TimeStandard.TAI), 26), // January 1, 1991 00:00:00 UTC\n  new LeapSecond(new JulianDate(2448804, 43227.0, TimeStandard.TAI), 27), // July 1, 1992 00:00:00 UTC\n  new LeapSecond(new JulianDate(2449169, 43228.0, TimeStandard.TAI), 28), // July 1, 1993 00:00:00 UTC\n  new LeapSecond(new JulianDate(2449534, 43229.0, TimeStandard.TAI), 29), // July 1, 1994 00:00:00 UTC\n  new LeapSecond(new JulianDate(2450083, 43230.0, TimeStandard.TAI), 30), // January 1, 1996 00:00:00 UTC\n  new LeapSecond(new JulianDate(2450630, 43231.0, TimeStandard.TAI), 31), // July 1, 1997 00:00:00 UTC\n  new LeapSecond(new JulianDate(2451179, 43232.0, TimeStandard.TAI), 32), // January 1, 1999 00:00:00 UTC\n  new LeapSecond(new JulianDate(2453736, 43233.0, TimeStandard.TAI), 33), // January 1, 2006 00:00:00 UTC\n  new LeapSecond(new JulianDate(2454832, 43234.0, TimeStandard.TAI), 34), // January 1, 2009 00:00:00 UTC\n  new LeapSecond(new JulianDate(2456109, 43235.0, TimeStandard.TAI), 35), // July 1, 2012 00:00:00 UTC\n  new LeapSecond(new JulianDate(2457204, 43236.0, TimeStandard.TAI), 36), // July 1, 2015 00:00:00 UTC\n  new LeapSecond(new JulianDate(2457754, 43237.0, TimeStandard.TAI), 37), // January 1, 2017 00:00:00 UTC\n];\nexport default JulianDate;\n","import Check from \"./Check.js\";\nimport CompressedTextureBuffer from \"./CompressedTextureBuffer.js\";\nimport defined from \"./defined.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\n\n/**\n * Transcodes KTX2 textures using web workers.\n *\n * @private\n */\nfunction KTX2Transcoder() {}\n\nKTX2Transcoder._transcodeTaskProcessor = new TaskProcessor(\n  \"transcodeKTX2\",\n  Number.POSITIVE_INFINITY, // KTX2 transcoding is used in place of Resource.fetchImage, so it can't reject as \"just soooo busy right now\"\n);\n\nKTX2Transcoder._readyPromise = undefined;\n\nfunction makeReadyPromise() {\n  const readyPromise = KTX2Transcoder._transcodeTaskProcessor\n    .initWebAssemblyModule({\n      wasmBinaryFile: \"ThirdParty/basis_transcoder.wasm\",\n    })\n    .then(function (result) {\n      if (result) {\n        return KTX2Transcoder._transcodeTaskProcessor;\n      }\n\n      throw new RuntimeError(\"KTX2 transcoder could not be initialized.\");\n    });\n  KTX2Transcoder._readyPromise = readyPromise;\n}\n\nKTX2Transcoder.transcode = function (ktx2Buffer, supportedTargetFormats) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"supportedTargetFormats\", supportedTargetFormats);\n  //>>includeEnd('debug');\n\n  if (!defined(KTX2Transcoder._readyPromise)) {\n    makeReadyPromise();\n  }\n\n  return KTX2Transcoder._readyPromise\n    .then(function (taskProcessor) {\n      let bufferView = ktx2Buffer;\n      if (ktx2Buffer instanceof ArrayBuffer) {\n        bufferView = new Uint8Array(ktx2Buffer);\n      }\n      const parameters = {\n        supportedTargetFormats: supportedTargetFormats,\n        ktx2Buffer: bufferView,\n      };\n      return taskProcessor.scheduleTask(parameters, [bufferView.buffer]);\n    })\n    .then(function (result) {\n      const levelsLength = result.length;\n      const faceKeys = Object.keys(result[0]);\n\n      for (let i = 0; i < levelsLength; i++) {\n        const faces = result[i];\n        for (let j = 0; j < faceKeys.length; j++) {\n          const face = faces[faceKeys[j]];\n          faces[faceKeys[j]] = new CompressedTextureBuffer(\n            face.internalFormat,\n            face.datatype,\n            face.width,\n            face.height,\n            face.levelBuffer,\n          );\n        }\n      }\n\n      // Cleaning up parsed result if it's a single image\n      if (faceKeys.length === 1) {\n        for (let i = 0; i < levelsLength; ++i) {\n          result[i] = result[i][faceKeys[0]];\n        }\n\n        if (levelsLength === 1) {\n          result = result[0];\n        }\n      }\n      return result;\n    })\n    .catch(function (error) {\n      throw error;\n    });\n};\n\nexport default KTX2Transcoder;\n","/**\n * This enumerated type is for representing keyboard modifiers. These are keys\n * that are held down in addition to other event types.\n *\n * @enum {number}\n */\nconst KeyboardEventModifier = {\n  /**\n   * Represents the shift key being held down.\n   *\n   * @type {number}\n   * @constant\n   */\n  SHIFT: 0,\n\n  /**\n   * Represents the control key being held down.\n   *\n   * @type {number}\n   * @constant\n   */\n  CTRL: 1,\n\n  /**\n   * Represents the alt key being held down.\n   *\n   * @type {number}\n   * @constant\n   */\n  ALT: 2,\n};\nexport default Object.freeze(KeyboardEventModifier);\n","import defined from \"./defined.js\";\n\n/**\n * An {@link InterpolationAlgorithm} for performing Lagrange interpolation.\n *\n * @namespace LagrangePolynomialApproximation\n */\nconst LagrangePolynomialApproximation = {\n  type: \"Lagrange\",\n};\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n *\n * @param {number} degree The desired degree of interpolation.\n * @returns {number} The number of required data points needed for the desired degree of interpolation.\n */\nLagrangePolynomialApproximation.getRequiredDataPoints = function (degree) {\n  return Math.max(degree + 1.0, 2);\n};\n\n/**\n * Interpolates values using Lagrange Polynomial Approximation.\n *\n * @param {number} x The independent variable for which the dependent variables will be interpolated.\n * @param {number[]} xTable The array of independent variables to use to interpolate.  The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {number[]} yTable The array of dependent variables to use to interpolate.  For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {number[]} [result] An existing array into which to store the result.\n * @returns {number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nLagrangePolynomialApproximation.interpolateOrderZero = function (\n  x,\n  xTable,\n  yTable,\n  yStride,\n  result,\n) {\n  if (!defined(result)) {\n    result = new Array(yStride);\n  }\n\n  let i;\n  let j;\n  const length = xTable.length;\n\n  for (i = 0; i < yStride; i++) {\n    result[i] = 0;\n  }\n\n  for (i = 0; i < length; i++) {\n    let coefficient = 1;\n\n    for (j = 0; j < length; j++) {\n      if (j !== i) {\n        const diffX = xTable[i] - xTable[j];\n        coefficient *= (x - xTable[j]) / diffX;\n      }\n    }\n\n    for (j = 0; j < yStride; j++) {\n      result[j] += coefficient * yTable[i * yStride + j];\n    }\n  }\n\n  return result;\n};\nexport default LagrangePolynomialApproximation;\n","/**\n * Describes a single leap second, which is constructed from a {@link JulianDate} and a\n * numerical offset representing the number of seconds TAI is ahead of the UTC time standard.\n * @alias LeapSecond\n * @constructor\n *\n * @param {JulianDate} [date] A Julian date representing the time of the leap second.\n * @param {number} [offset] The cumulative number of seconds that TAI is ahead of UTC at the provided date.\n */\nfunction LeapSecond(date, offset) {\n  /**\n   * Gets or sets the date at which this leap second occurs.\n   * @type {JulianDate}\n   */\n  this.julianDate = date;\n\n  /**\n   * Gets or sets the cumulative number of seconds between the UTC and TAI time standards at the time\n   * of this leap second.\n   * @type {number}\n   */\n  this.offset = offset;\n}\nexport default LeapSecond;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * An {@link InterpolationAlgorithm} for performing linear interpolation.\n *\n * @namespace LinearApproximation\n */\nconst LinearApproximation = {\n  type: \"Linear\",\n};\n\n/**\n * Given the desired degree, returns the number of data points required for interpolation.\n * Since linear interpolation can only generate a first degree polynomial, this function\n * always returns 2.\n * @param {number} degree The desired degree of interpolation.\n * @returns {number} This function always returns 2.\n *\n */\nLinearApproximation.getRequiredDataPoints = function (degree) {\n  return 2;\n};\n\n/**\n * Interpolates values using linear approximation.\n *\n * @param {number} x The independent variable for which the dependent variables will be interpolated.\n * @param {number[]} xTable The array of independent variables to use to interpolate.  The values\n * in this array must be in increasing order and the same value must not occur twice in the array.\n * @param {number[]} yTable The array of dependent variables to use to interpolate.  For a set of three\n * dependent values (p,q,w) at time 1 and time 2 this should be as follows: {p1, q1, w1, p2, q2, w2}.\n * @param {number} yStride The number of dependent variable values in yTable corresponding to\n * each independent variable value in xTable.\n * @param {number[]} [result] An existing array into which to store the result.\n * @returns {number[]} The array of interpolated values, or the result parameter if one was provided.\n */\nLinearApproximation.interpolateOrderZero = function (\n  x,\n  xTable,\n  yTable,\n  yStride,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (xTable.length !== 2) {\n    throw new DeveloperError(\n      \"The xTable provided to the linear interpolator must have exactly two elements.\",\n    );\n  } else if (yStride <= 0) {\n    throw new DeveloperError(\n      \"There must be at least 1 dependent variable for each independent variable.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Array(yStride);\n  }\n\n  let i;\n  let y0;\n  let y1;\n  const x0 = xTable[0];\n  const x1 = xTable[1];\n\n  //>>includeStart('debug', pragmas.debug);\n  if (x0 === x1) {\n    throw new DeveloperError(\n      \"Divide by zero error: xTable[0] and xTable[1] are equal\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  for (i = 0; i < yStride; i++) {\n    y0 = yTable[i];\n    y1 = yTable[i + yStride];\n    result[i] = ((y1 - y0) * x + x1 * y0 - x0 * y1) / (x1 - x0);\n  }\n\n  return result;\n};\nexport default LinearApproximation;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Spline from \"./Spline.js\";\n\n/**\n * A spline that uses piecewise linear interpolation to create a curve.\n *\n * @alias LinearSpline\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n *                The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {number[]|Cartesian3[]} options.points The array of control points.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n *\n * @example\n * const times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];\n * const spline = new Cesium.LinearSpline({\n *     times : times,\n *     points : [\n *         new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n *         new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n *         new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n *         new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n *         new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n *     ]\n * });\n *\n * const p0 = spline.evaluate(times[0]);\n *\n * @see ConstantSpline\n * @see SteppedSpline\n * @see HermiteSpline\n * @see CatmullRomSpline\n * @see QuaternionSpline\n * @see MorphWeightSpline\n */\nfunction LinearSpline(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const points = options.points;\n  const times = options.times;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(points) || !defined(times)) {\n    throw new DeveloperError(\"points and times are required.\");\n  }\n  if (points.length < 2) {\n    throw new DeveloperError(\n      \"points.length must be greater than or equal to 2.\",\n    );\n  }\n  if (times.length !== points.length) {\n    throw new DeveloperError(\"times.length must be equal to points.length.\");\n  }\n  //>>includeEnd('debug');\n\n  this._times = times;\n  this._points = points;\n  this._pointType = Spline.getPointType(points[0]);\n\n  this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(LinearSpline.prototype, {\n  /**\n   * An array of times for the control points.\n   *\n   * @memberof LinearSpline.prototype\n   *\n   * @type {number[]}\n   * @readonly\n   */\n  times: {\n    get: function () {\n      return this._times;\n    },\n  },\n\n  /**\n   * An array of {@link Cartesian3} control points.\n   *\n   * @memberof LinearSpline.prototype\n   *\n   * @type {number[]|Cartesian3[]}\n   * @readonly\n   */\n  points: {\n    get: function () {\n      return this._points;\n    },\n  },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {number} time The time.\n * @returns {number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nLinearSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around to the updated animation.\n */\nLinearSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nLinearSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {number|Cartesian3} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nLinearSpline.prototype.evaluate = function (time, result) {\n  const points = this.points;\n  const times = this.times;\n\n  const i = (this._lastTimeIndex = this.findTimeInterval(\n    time,\n    this._lastTimeIndex,\n  ));\n  const u = (time - times[i]) / (times[i + 1] - times[i]);\n\n  const PointType = this._pointType;\n  if (PointType === Number) {\n    return (1.0 - u) * points[i] + u * points[i + 1];\n  }\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  return Cartesian3.lerp(points[i], points[i + 1], u, result);\n};\n\nexport default LinearSpline;\n","import Check from \"./Check.js\";\n\n/**\n * A wrapper around arrays so that the internal length of the array can be manually managed.\n *\n * @alias ManagedArray\n * @constructor\n * @private\n *\n * @param {number} [length=0] The initial length of the array.\n */\nfunction ManagedArray(length) {\n  length = length ?? 0;\n  this._array = new Array(length);\n  this._length = length;\n}\n\nObject.defineProperties(ManagedArray.prototype, {\n  /**\n   * Gets or sets the length of the array.\n   * If the set length is greater than the length of the internal array, the internal array is resized.\n   *\n   * @memberof ManagedArray.prototype\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      return this._length;\n    },\n    set: function (length) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"length\", length, 0);\n      //>>includeEnd('debug');\n      const array = this._array;\n      const originalLength = this._length;\n      if (length < originalLength) {\n        // Remove trailing references\n        for (let i = length; i < originalLength; ++i) {\n          array[i] = undefined;\n        }\n      } else if (length > array.length) {\n        array.length = length;\n      }\n      this._length = length;\n    },\n  },\n\n  /**\n   * Gets the internal array.\n   *\n   * @memberof ManagedArray.prototype\n   * @type {Array}\n   * @readonly\n   */\n  values: {\n    get: function () {\n      return this._array;\n    },\n  },\n});\n\n/**\n * Gets the element at an index.\n *\n * @param {number} index The index to get.\n */\nManagedArray.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.lessThan(\"index\", index, this._array.length);\n  //>>includeEnd('debug');\n\n  return this._array[index];\n};\n\n/**\n * Sets the element at an index. Resizes the array if index is greater than the length of the array.\n *\n * @param {number} index The index to set.\n * @param {*} element The element to set at index.\n */\nManagedArray.prototype.set = function (index, element) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  if (index >= this._length) {\n    this.length = index + 1;\n  }\n  this._array[index] = element;\n};\n\n/**\n * Returns the last element in the array without modifying the array.\n *\n * @returns {*} The last element in the array.\n */\nManagedArray.prototype.peek = function () {\n  return this._array[this._length - 1];\n};\n\n/**\n * Push an element into the array.\n *\n * @param {*} element The element to push.\n */\nManagedArray.prototype.push = function (element) {\n  const index = this.length++;\n  this._array[index] = element;\n};\n\n/**\n * Pop an element from the array.\n *\n * @returns {*} The last element in the array.\n */\nManagedArray.prototype.pop = function () {\n  if (this._length === 0) {\n    return undefined;\n  }\n  const element = this._array[this._length - 1];\n  --this.length;\n  return element;\n};\n\n/**\n * Resize the internal array if length > _array.length.\n *\n * @param {number} length The length.\n */\nManagedArray.prototype.reserve = function (length) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"length\", length, 0);\n  //>>includeEnd('debug');\n\n  if (length > this._array.length) {\n    this._array.length = length;\n  }\n};\n\n/**\n * Resize the array.\n *\n * @param {number} length The length.\n */\nManagedArray.prototype.resize = function (length) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"length\", length, 0);\n  //>>includeEnd('debug');\n\n  this.length = length;\n};\n\n/**\n * Trim the internal array to the specified length. Defaults to the current length.\n *\n * @param {number} [length] The length.\n */\nManagedArray.prototype.trim = function (length) {\n  length = length ?? this._length;\n  this._array.length = length;\n};\nexport default ManagedArray;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Defines how geodetic ellipsoid coordinates ({@link Cartographic}) project to a\n * flat map like Cesium's 2D and Columbus View modes.\n *\n * @alias MapProjection\n * @constructor\n * @abstract\n *\n * @see GeographicProjection\n * @see WebMercatorProjection\n */\nfunction MapProjection() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(MapProjection.prototype, {\n  /**\n   * Gets the {@link Ellipsoid}.\n   *\n   * @memberof MapProjection.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Projects {@link Cartographic} coordinates, in radians, to projection-specific map coordinates, in meters.\n *\n * @memberof MapProjection\n * @function\n *\n * @param {Cartographic} cartographic The coordinates to project.\n * @param {Cartesian3} [result] An instance into which to copy the result.  If this parameter is\n *        undefined, a new instance is created and returned.\n * @returns {Cartesian3} The projected coordinates.  If the result parameter is not undefined, the\n *          coordinates are copied there and that instance is returned.  Otherwise, a new instance is\n *          created and returned.\n */\nMapProjection.prototype.project = DeveloperError.throwInstantiationError;\n\n/**\n * Unprojects projection-specific map {@link Cartesian3} coordinates, in meters, to {@link Cartographic}\n * coordinates, in radians.\n *\n * @memberof MapProjection\n * @function\n *\n * @param {Cartesian3} cartesian The Cartesian position to unproject with height (z) in meters.\n * @param {Cartographic} [result] An instance into which to copy the result.  If this parameter is\n *        undefined, a new instance is created and returned.\n * @returns {Cartographic} The unprojected coordinates.  If the result parameter is not undefined, the\n *          coordinates are copied there and that instance is returned.  Otherwise, a new instance is\n *          created and returned.\n */\nMapProjection.prototype.unproject = DeveloperError.throwInstantiationError;\nexport default MapProjection;\n","import MersenneTwister from \"mersenne-twister\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Math functions.\n *\n * @exports CesiumMath\n * @alias Math\n */\nconst CesiumMath = {};\n\n/**\n * 0.1\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON1 = 0.1;\n\n/**\n * 0.01\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON2 = 0.01;\n\n/**\n * 0.001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON3 = 0.001;\n\n/**\n * 0.0001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON4 = 0.0001;\n\n/**\n * 0.00001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON5 = 0.00001;\n\n/**\n * 0.000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON6 = 0.000001;\n\n/**\n * 0.0000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON7 = 0.0000001;\n\n/**\n * 0.00000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON8 = 0.00000001;\n\n/**\n * 0.000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON9 = 0.000000001;\n\n/**\n * 0.0000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON10 = 0.0000000001;\n\n/**\n * 0.00000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON11 = 0.00000000001;\n\n/**\n * 0.000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON12 = 0.000000000001;\n\n/**\n * 0.0000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON13 = 0.0000000000001;\n\n/**\n * 0.00000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON14 = 0.00000000000001;\n\n/**\n * 0.000000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON15 = 0.000000000000001;\n\n/**\n * 0.0000000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON16 = 0.0000000000000001;\n\n/**\n * 0.00000000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON17 = 0.00000000000000001;\n\n/**\n * 0.000000000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON18 = 0.000000000000000001;\n\n/**\n * 0.0000000000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON19 = 0.0000000000000000001;\n\n/**\n * 0.00000000000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON20 = 0.00000000000000000001;\n\n/**\n * 0.000000000000000000001\n * @type {number}\n * @constant\n */\nCesiumMath.EPSILON21 = 0.000000000000000000001;\n\n/**\n * The gravitational parameter of the Earth in meters cubed\n * per second squared as defined by the WGS84 model: 3.986004418e14\n * @type {number}\n * @constant\n */\nCesiumMath.GRAVITATIONALPARAMETER = 3.986004418e14;\n\n/**\n * Radius of the sun in meters: 6.955e8\n * @type {number}\n * @constant\n */\nCesiumMath.SOLAR_RADIUS = 6.955e8;\n\n/**\n * The mean radius of the moon, according to the \"Report of the IAU/IAG Working Group on\n * Cartographic Coordinates and Rotational Elements of the Planets and satellites: 2000\",\n * Celestial Mechanics 82: 83-110, 2002.\n * @type {number}\n * @constant\n */\nCesiumMath.LUNAR_RADIUS = 1737400.0;\n\n/**\n * 64 * 1024\n * @type {number}\n * @constant\n */\nCesiumMath.SIXTY_FOUR_KILOBYTES = 64 * 1024;\n\n/**\n * 4 * 1024 * 1024 * 1024\n * @type {number}\n * @constant\n */\nCesiumMath.FOUR_GIGABYTES = 4 * 1024 * 1024 * 1024;\n\n/**\n * Returns the sign of the value; 1 if the value is positive, -1 if the value is\n * negative, or 0 if the value is 0.\n *\n * @function\n * @param {number} value The value to return the sign of.\n * @returns {number} The sign of value.\n */\nCesiumMath.sign =\n  Math.sign ??\n  function sign(value) {\n    value = +value; // coerce to number\n    if (value === 0 || value !== value) {\n      // zero or NaN\n      return value;\n    }\n    return value > 0 ? 1 : -1;\n  };\n\n/**\n * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative.\n * This is similar to {@link CesiumMath#sign} except that returns 1.0 instead of\n * 0.0 when the input value is 0.0.\n * @param {number} value The value to return the sign of.\n * @returns {number} The sign of value.\n */\nCesiumMath.signNotZero = function (value) {\n  return value < 0.0 ? -1.0 : 1.0;\n};\n\n/**\n * Converts a scalar value in the range [-1.0, 1.0] to a SNORM in the range [0, rangeMaximum]\n * @param {number} value The scalar value in the range [-1.0, 1.0]\n * @param {number} [rangeMaximum=255] The maximum value in the mapped range, 255 by default.\n * @returns {number} A SNORM value, where 0 maps to -1.0 and rangeMaximum maps to 1.0.\n *\n * @see CesiumMath.fromSNorm\n */\nCesiumMath.toSNorm = function (value, rangeMaximum) {\n  rangeMaximum = rangeMaximum ?? 255;\n  return Math.round(\n    (CesiumMath.clamp(value, -1.0, 1.0) * 0.5 + 0.5) * rangeMaximum,\n  );\n};\n\n/**\n * Converts a SNORM value in the range [0, rangeMaximum] to a scalar in the range [-1.0, 1.0].\n * @param {number} value SNORM value in the range [0, rangeMaximum]\n * @param {number} [rangeMaximum=255] The maximum value in the SNORM range, 255 by default.\n * @returns {number} Scalar in the range [-1.0, 1.0].\n *\n * @see CesiumMath.toSNorm\n */\nCesiumMath.fromSNorm = function (value, rangeMaximum) {\n  rangeMaximum = rangeMaximum ?? 255;\n  return (\n    (CesiumMath.clamp(value, 0.0, rangeMaximum) / rangeMaximum) * 2.0 - 1.0\n  );\n};\n\n/**\n * Converts a scalar value in the range [rangeMinimum, rangeMaximum] to a scalar in the range [0.0, 1.0]\n * @param {number} value The scalar value in the range [rangeMinimum, rangeMaximum]\n * @param {number} rangeMinimum The minimum value in the mapped range.\n * @param {number} rangeMaximum The maximum value in the mapped range.\n * @returns {number} A scalar value, where rangeMinimum maps to 0.0 and rangeMaximum maps to 1.0.\n */\nCesiumMath.normalize = function (value, rangeMinimum, rangeMaximum) {\n  rangeMaximum = Math.max(rangeMaximum - rangeMinimum, 0.0);\n  return rangeMaximum === 0.0\n    ? 0.0\n    : CesiumMath.clamp((value - rangeMinimum) / rangeMaximum, 0.0, 1.0);\n};\n\n/**\n * Returns the hyperbolic sine of a number.\n * The hyperbolic sine of <em>value</em> is defined to be\n * (<em>e<sup>x</sup>&nbsp;-&nbsp;e<sup>-x</sup></em>)/2.0\n * where <i>e</i> is Euler's number, approximately 2.71828183.\n *\n * <p>Special cases:\n *   <ul>\n *     <li>If the argument is NaN, then the result is NaN.</li>\n *\n *     <li>If the argument is infinite, then the result is an infinity\n *     with the same sign as the argument.</li>\n *\n *     <li>If the argument is zero, then the result is a zero with the\n *     same sign as the argument.</li>\n *   </ul>\n *</p>\n *\n * @function\n * @param {number} value The number whose hyperbolic sine is to be returned.\n * @returns {number} The hyperbolic sine of <code>value</code>.\n */\nCesiumMath.sinh =\n  Math.sinh ??\n  function sinh(value) {\n    return (Math.exp(value) - Math.exp(-value)) / 2.0;\n  };\n\n/**\n * Returns the hyperbolic cosine of a number.\n * The hyperbolic cosine of <strong>value</strong> is defined to be\n * (<em>e<sup>x</sup>&nbsp;+&nbsp;e<sup>-x</sup></em>)/2.0\n * where <i>e</i> is Euler's number, approximately 2.71828183.\n *\n * <p>Special cases:\n *   <ul>\n *     <li>If the argument is NaN, then the result is NaN.</li>\n *\n *     <li>If the argument is infinite, then the result is positive infinity.</li>\n *\n *     <li>If the argument is zero, then the result is 1.0.</li>\n *   </ul>\n *</p>\n *\n * @function\n * @param {number} value The number whose hyperbolic cosine is to be returned.\n * @returns {number} The hyperbolic cosine of <code>value</code>.\n */\nCesiumMath.cosh =\n  Math.cosh ??\n  function cosh(value) {\n    return (Math.exp(value) + Math.exp(-value)) / 2.0;\n  };\n\n/**\n * Computes the linear interpolation of two values.\n *\n * @param {number} p The start value to interpolate.\n * @param {number} q The end value to interpolate.\n * @param {number} time The time of interpolation generally in the range <code>[0.0, 1.0]</code>.\n * @returns {number} The linearly interpolated value.\n *\n * @example\n * const n = Cesium.Math.lerp(0.0, 2.0, 0.5); // returns 1.0\n */\nCesiumMath.lerp = function (p, q, time) {\n  return (1.0 - time) * p + time * q;\n};\n\n/**\n * pi\n *\n * @type {number}\n * @constant\n */\nCesiumMath.PI = Math.PI;\n\n/**\n * 1/pi\n *\n * @type {number}\n * @constant\n */\nCesiumMath.ONE_OVER_PI = 1.0 / Math.PI;\n\n/**\n * pi/2\n *\n * @type {number}\n * @constant\n */\nCesiumMath.PI_OVER_TWO = Math.PI / 2.0;\n\n/**\n * pi/3\n *\n * @type {number}\n * @constant\n */\nCesiumMath.PI_OVER_THREE = Math.PI / 3.0;\n\n/**\n * pi/4\n *\n * @type {number}\n * @constant\n */\nCesiumMath.PI_OVER_FOUR = Math.PI / 4.0;\n\n/**\n * pi/6\n *\n * @type {number}\n * @constant\n */\nCesiumMath.PI_OVER_SIX = Math.PI / 6.0;\n\n/**\n * 3pi/2\n *\n * @type {number}\n * @constant\n */\nCesiumMath.THREE_PI_OVER_TWO = (3.0 * Math.PI) / 2.0;\n\n/**\n * 2pi\n *\n * @type {number}\n * @constant\n */\nCesiumMath.TWO_PI = 2.0 * Math.PI;\n\n/**\n * 1/2pi\n *\n * @type {number}\n * @constant\n */\nCesiumMath.ONE_OVER_TWO_PI = 1.0 / (2.0 * Math.PI);\n\n/**\n * The number of radians in a degree.\n *\n * @type {number}\n * @constant\n */\nCesiumMath.RADIANS_PER_DEGREE = Math.PI / 180.0;\n\n/**\n * The number of degrees in a radian.\n *\n * @type {number}\n * @constant\n */\nCesiumMath.DEGREES_PER_RADIAN = 180.0 / Math.PI;\n\n/**\n * The number of radians in an arc second.\n *\n * @type {number}\n * @constant\n */\nCesiumMath.RADIANS_PER_ARCSECOND = CesiumMath.RADIANS_PER_DEGREE / 3600.0;\n\n/**\n * Converts degrees to radians.\n * @param {number} degrees The angle to convert in degrees.\n * @returns {number} The corresponding angle in radians.\n */\nCesiumMath.toRadians = function (degrees) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(degrees)) {\n    throw new DeveloperError(\"degrees is required.\");\n  }\n  //>>includeEnd('debug');\n  return degrees * CesiumMath.RADIANS_PER_DEGREE;\n};\n\n/**\n * Converts radians to degrees.\n * @param {number} radians The angle to convert in radians.\n * @returns {number} The corresponding angle in degrees.\n */\nCesiumMath.toDegrees = function (radians) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(radians)) {\n    throw new DeveloperError(\"radians is required.\");\n  }\n  //>>includeEnd('debug');\n  return radians * CesiumMath.DEGREES_PER_RADIAN;\n};\n\n/**\n * Converts a longitude value, in radians, to the range [<code>-Math.PI</code>, <code>Math.PI</code>).\n *\n * @param {number} angle The longitude value, in radians, to convert to the range [<code>-Math.PI</code>, <code>Math.PI</code>).\n * @returns {number} The equivalent longitude value in the range [<code>-Math.PI</code>, <code>Math.PI</code>).\n *\n * @example\n * // Convert 270 degrees to -90 degrees longitude\n * const longitude = Cesium.Math.convertLongitudeRange(Cesium.Math.toRadians(270.0));\n */\nCesiumMath.convertLongitudeRange = function (angle) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(angle)) {\n    throw new DeveloperError(\"angle is required.\");\n  }\n  //>>includeEnd('debug');\n  const twoPi = CesiumMath.TWO_PI;\n\n  const simplified = angle - Math.floor(angle / twoPi) * twoPi;\n\n  if (simplified < -Math.PI) {\n    return simplified + twoPi;\n  }\n  if (simplified >= Math.PI) {\n    return simplified - twoPi;\n  }\n\n  return simplified;\n};\n\n/**\n * Convenience function that clamps a latitude value, in radians, to the range [<code>-Math.PI/2</code>, <code>Math.PI/2</code>).\n * Useful for sanitizing data before use in objects requiring correct range.\n *\n * @param {number} angle The latitude value, in radians, to clamp to the range [<code>-Math.PI/2</code>, <code>Math.PI/2</code>).\n * @returns {number} The latitude value clamped to the range [<code>-Math.PI/2</code>, <code>Math.PI/2</code>).\n *\n * @example\n * // Clamp 108 degrees latitude to 90 degrees latitude\n * const latitude = Cesium.Math.clampToLatitudeRange(Cesium.Math.toRadians(108.0));\n */\nCesiumMath.clampToLatitudeRange = function (angle) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(angle)) {\n    throw new DeveloperError(\"angle is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return CesiumMath.clamp(\n    angle,\n    -1 * CesiumMath.PI_OVER_TWO,\n    CesiumMath.PI_OVER_TWO,\n  );\n};\n\n/**\n * Produces an angle in the range -Pi <= angle <= Pi which is equivalent to the provided angle.\n *\n * @param {number} angle in radians\n * @returns {number} The angle in the range [<code>-CesiumMath.PI</code>, <code>CesiumMath.PI</code>].\n */\nCesiumMath.negativePiToPi = function (angle) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(angle)) {\n    throw new DeveloperError(\"angle is required.\");\n  }\n  //>>includeEnd('debug');\n  if (angle >= -CesiumMath.PI && angle <= CesiumMath.PI) {\n    // Early exit if the input is already inside the range. This avoids\n    // unnecessary math which could introduce floating point error.\n    return angle;\n  }\n  return CesiumMath.zeroToTwoPi(angle + CesiumMath.PI) - CesiumMath.PI;\n};\n\n/**\n * Produces an angle in the range 0 <= angle <= 2Pi which is equivalent to the provided angle.\n *\n * @param {number} angle in radians\n * @returns {number} The angle in the range [0, <code>CesiumMath.TWO_PI</code>].\n */\nCesiumMath.zeroToTwoPi = function (angle) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(angle)) {\n    throw new DeveloperError(\"angle is required.\");\n  }\n  //>>includeEnd('debug');\n  if (angle >= 0 && angle <= CesiumMath.TWO_PI) {\n    // Early exit if the input is already inside the range. This avoids\n    // unnecessary math which could introduce floating point error.\n    return angle;\n  }\n  const mod = CesiumMath.mod(angle, CesiumMath.TWO_PI);\n  if (\n    Math.abs(mod) < CesiumMath.EPSILON14 &&\n    Math.abs(angle) > CesiumMath.EPSILON14\n  ) {\n    return CesiumMath.TWO_PI;\n  }\n  return mod;\n};\n\n/**\n * The modulo operation that also works for negative dividends.\n *\n * @param {number} m The dividend.\n * @param {number} n The divisor.\n * @returns {number} The remainder.\n */\nCesiumMath.mod = function (m, n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(m)) {\n    throw new DeveloperError(\"m is required.\");\n  }\n  if (!defined(n)) {\n    throw new DeveloperError(\"n is required.\");\n  }\n  if (n === 0.0) {\n    throw new DeveloperError(\"divisor cannot be 0.\");\n  }\n  //>>includeEnd('debug');\n  if (CesiumMath.sign(m) === CesiumMath.sign(n) && Math.abs(m) < Math.abs(n)) {\n    // Early exit if the input does not need to be modded. This avoids\n    // unnecessary math which could introduce floating point error.\n    return m;\n  }\n\n  return ((m % n) + n) % n;\n};\n\n/**\n * Determines if two values are equal using an absolute or relative tolerance test. This is useful\n * to avoid problems due to roundoff error when comparing floating-point values directly. The values are\n * first compared using an absolute tolerance test. If that fails, a relative tolerance test is performed.\n * Use this test if you are unsure of the magnitudes of left and right.\n *\n * @param {number} left The first value to compare.\n * @param {number} right The other value to compare.\n * @param {number} [relativeEpsilon=0] The maximum inclusive delta between <code>left</code> and <code>right</code> for the relative tolerance test.\n * @param {number} [absoluteEpsilon=relativeEpsilon] The maximum inclusive delta between <code>left</code> and <code>right</code> for the absolute tolerance test.\n * @returns {boolean} <code>true</code> if the values are equal within the epsilon; otherwise, <code>false</code>.\n *\n * @example\n * const a = Cesium.Math.equalsEpsilon(0.0, 0.01, Cesium.Math.EPSILON2); // true\n * const b = Cesium.Math.equalsEpsilon(0.0, 0.1, Cesium.Math.EPSILON2);  // false\n * const c = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON7); // true\n * const d = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON9); // false\n */\nCesiumMath.equalsEpsilon = function (\n  left,\n  right,\n  relativeEpsilon,\n  absoluteEpsilon,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"left is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"right is required.\");\n  }\n  //>>includeEnd('debug');\n\n  relativeEpsilon = relativeEpsilon ?? 0.0;\n  absoluteEpsilon = absoluteEpsilon ?? relativeEpsilon;\n  const absDiff = Math.abs(left - right);\n  return (\n    absDiff <= absoluteEpsilon ||\n    absDiff <= relativeEpsilon * Math.max(Math.abs(left), Math.abs(right))\n  );\n};\n\n/**\n * Determines if the left value is less than the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns false.\n *\n * @param {number} left The first number to compare.\n * @param {number} right The second number to compare.\n * @param {number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {boolean} <code>true</code> if <code>left</code> is less than <code>right</code> by more than\n *          <code>absoluteEpsilon<code>. <code>false</code> if <code>left</code> is greater or if the two\n *          values are nearly equal.\n */\nCesiumMath.lessThan = function (left, right, absoluteEpsilon) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"first is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"second is required.\");\n  }\n  if (!defined(absoluteEpsilon)) {\n    throw new DeveloperError(\"absoluteEpsilon is required.\");\n  }\n  //>>includeEnd('debug');\n  return left - right < -absoluteEpsilon;\n};\n\n/**\n * Determines if the left value is less than or equal to the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns true.\n *\n * @param {number} left The first number to compare.\n * @param {number} right The second number to compare.\n * @param {number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {boolean} <code>true</code> if <code>left</code> is less than <code>right</code> or if the\n *          the values are nearly equal.\n */\nCesiumMath.lessThanOrEquals = function (left, right, absoluteEpsilon) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"first is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"second is required.\");\n  }\n  if (!defined(absoluteEpsilon)) {\n    throw new DeveloperError(\"absoluteEpsilon is required.\");\n  }\n  //>>includeEnd('debug');\n  return left - right < absoluteEpsilon;\n};\n\n/**\n * Determines if the left value is greater the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns false.\n *\n * @param {number} left The first number to compare.\n * @param {number} right The second number to compare.\n * @param {number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {boolean} <code>true</code> if <code>left</code> is greater than <code>right</code> by more than\n *          <code>absoluteEpsilon<code>. <code>false</code> if <code>left</code> is less or if the two\n *          values are nearly equal.\n */\nCesiumMath.greaterThan = function (left, right, absoluteEpsilon) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"first is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"second is required.\");\n  }\n  if (!defined(absoluteEpsilon)) {\n    throw new DeveloperError(\"absoluteEpsilon is required.\");\n  }\n  //>>includeEnd('debug');\n  return left - right > absoluteEpsilon;\n};\n\n/**\n * Determines if the left value is greater than or equal to the right value. If the two values are within\n * <code>absoluteEpsilon</code> of each other, they are considered equal and this function returns true.\n *\n * @param {number} left The first number to compare.\n * @param {number} right The second number to compare.\n * @param {number} absoluteEpsilon The absolute epsilon to use in comparison.\n * @returns {boolean} <code>true</code> if <code>left</code> is greater than <code>right</code> or if the\n *          the values are nearly equal.\n */\nCesiumMath.greaterThanOrEquals = function (left, right, absoluteEpsilon) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(left)) {\n    throw new DeveloperError(\"first is required.\");\n  }\n  if (!defined(right)) {\n    throw new DeveloperError(\"second is required.\");\n  }\n  if (!defined(absoluteEpsilon)) {\n    throw new DeveloperError(\"absoluteEpsilon is required.\");\n  }\n  //>>includeEnd('debug');\n  return left - right > -absoluteEpsilon;\n};\n\nconst factorials = [1];\n\n/**\n * Computes the factorial of the provided number.\n *\n * @param {number} n The number whose factorial is to be computed.\n * @returns {number} The factorial of the provided number or undefined if the number is less than 0.\n *\n * @exception {DeveloperError} A number greater than or equal to 0 is required.\n *\n *\n * @example\n * //Compute 7!, which is equal to 5040\n * const computedFactorial = Cesium.Math.factorial(7);\n *\n * @see {@link http://en.wikipedia.org/wiki/Factorial|Factorial on Wikipedia}\n */\nCesiumMath.factorial = function (n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof n !== \"number\" || n < 0) {\n    throw new DeveloperError(\n      \"A number greater than or equal to 0 is required.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const length = factorials.length;\n  if (n >= length) {\n    let sum = factorials[length - 1];\n    for (let i = length; i <= n; i++) {\n      const next = sum * i;\n      factorials.push(next);\n      sum = next;\n    }\n  }\n  return factorials[n];\n};\n\n/**\n * Increments a number with a wrapping to a minimum value if the number exceeds the maximum value.\n *\n * @param {number} [n] The number to be incremented.\n * @param {number} [maximumValue] The maximum incremented value before rolling over to the minimum value.\n * @param {number} [minimumValue=0.0] The number reset to after the maximum value has been exceeded.\n * @returns {number} The incremented number.\n *\n * @exception {DeveloperError} Maximum value must be greater than minimum value.\n *\n * @example\n * const n = Cesium.Math.incrementWrap(5, 10, 0); // returns 6\n * const m = Cesium.Math.incrementWrap(10, 10, 0); // returns 0\n */\nCesiumMath.incrementWrap = function (n, maximumValue, minimumValue) {\n  minimumValue = minimumValue ?? 0.0;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(n)) {\n    throw new DeveloperError(\"n is required.\");\n  }\n  if (maximumValue <= minimumValue) {\n    throw new DeveloperError(\"maximumValue must be greater than minimumValue.\");\n  }\n  //>>includeEnd('debug');\n\n  ++n;\n  if (n > maximumValue) {\n    n = minimumValue;\n  }\n  return n;\n};\n\n/**\n * Determines if a non-negative integer is a power of two.\n * The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript.\n *\n * @param {number} n The integer to test in the range [0, (2^32)-1].\n * @returns {boolean} <code>true</code> if the number if a power of two; otherwise, <code>false</code>.\n *\n * @exception {DeveloperError} A number between 0 and (2^32)-1 is required.\n *\n * @example\n * const t = Cesium.Math.isPowerOfTwo(16); // true\n * const f = Cesium.Math.isPowerOfTwo(20); // false\n */\nCesiumMath.isPowerOfTwo = function (n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof n !== \"number\" || n < 0 || n > 4294967295) {\n    throw new DeveloperError(\"A number between 0 and (2^32)-1 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return n !== 0 && (n & (n - 1)) === 0;\n};\n\n/**\n * Computes the next power-of-two integer greater than or equal to the provided non-negative integer.\n * The maximum allowed input is 2^31 due to 32-bit bitwise operator limitation in Javascript.\n *\n * @param {number} n The integer to test in the range [0, 2^31].\n * @returns {number} The next power-of-two integer.\n *\n * @exception {DeveloperError} A number between 0 and 2^31 is required.\n *\n * @example\n * const n = Cesium.Math.nextPowerOfTwo(29); // 32\n * const m = Cesium.Math.nextPowerOfTwo(32); // 32\n */\nCesiumMath.nextPowerOfTwo = function (n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof n !== \"number\" || n < 0 || n > 2147483648) {\n    throw new DeveloperError(\"A number between 0 and 2^31 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2\n  --n;\n  n |= n >> 1;\n  n |= n >> 2;\n  n |= n >> 4;\n  n |= n >> 8;\n  n |= n >> 16;\n  ++n;\n\n  return n;\n};\n\n/**\n * Computes the previous power-of-two integer less than or equal to the provided non-negative integer.\n * The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript.\n *\n * @param {number} n The integer to test in the range [0, (2^32)-1].\n * @returns {number} The previous power-of-two integer.\n *\n * @exception {DeveloperError} A number between 0 and (2^32)-1 is required.\n *\n * @example\n * const n = Cesium.Math.previousPowerOfTwo(29); // 16\n * const m = Cesium.Math.previousPowerOfTwo(32); // 32\n */\nCesiumMath.previousPowerOfTwo = function (n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof n !== \"number\" || n < 0 || n > 4294967295) {\n    throw new DeveloperError(\"A number between 0 and (2^32)-1 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  n |= n >> 1;\n  n |= n >> 2;\n  n |= n >> 4;\n  n |= n >> 8;\n  n |= n >> 16;\n  n |= n >> 32;\n\n  // The previous bitwise operations implicitly convert to signed 32-bit. Use `>>>` to convert to unsigned\n  n = (n >>> 0) - (n >>> 1);\n\n  return n;\n};\n\n/**\n * Constraint a value to lie between two values.\n *\n * @param {number} value The value to clamp.\n * @param {number} min The minimum value.\n * @param {number} max The maximum value.\n * @returns {number} The clamped value such that min <= result <= max.\n */\nCesiumMath.clamp = function (value, min, max) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"value\", value);\n  Check.typeOf.number(\"min\", min);\n  Check.typeOf.number(\"max\", max);\n  //>>includeEnd('debug');\n\n  return value < min ? min : value > max ? max : value;\n};\n\nlet randomNumberGenerator = new MersenneTwister();\n\n/**\n * Sets the seed used by the random number generator\n * in {@link CesiumMath#nextRandomNumber}.\n *\n * @param {number} seed An integer used as the seed.\n */\nCesiumMath.setRandomNumberSeed = function (seed) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(seed)) {\n    throw new DeveloperError(\"seed is required.\");\n  }\n  //>>includeEnd('debug');\n\n  randomNumberGenerator = new MersenneTwister(seed);\n};\n\n/**\n * Generates a random floating point number in the range of [0.0, 1.0)\n * using a Mersenne twister.\n *\n * @returns {number} A random number in the range of [0.0, 1.0).\n *\n * @see CesiumMath.setRandomNumberSeed\n * @see {@link http://en.wikipedia.org/wiki/Mersenne_twister|Mersenne twister on Wikipedia}\n */\nCesiumMath.nextRandomNumber = function () {\n  return randomNumberGenerator.random();\n};\n\n/**\n * Generates a random number between two numbers.\n *\n * @param {number} min The minimum value.\n * @param {number} max The maximum value.\n * @returns {number} A random number between the min and max.\n */\nCesiumMath.randomBetween = function (min, max) {\n  return CesiumMath.nextRandomNumber() * (max - min) + min;\n};\n\n/**\n * Computes <code>Math.acos(value)</code>, but first clamps <code>value</code> to the range [-1.0, 1.0]\n * so that the function will never return NaN.\n *\n * @param {number} value The value for which to compute acos.\n * @returns {number} The acos of the value if the value is in the range [-1.0, 1.0], or the acos of -1.0 or 1.0,\n *          whichever is closer, if the value is outside the range.\n */\nCesiumMath.acosClamped = function (value) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required.\");\n  }\n  //>>includeEnd('debug');\n  return Math.acos(CesiumMath.clamp(value, -1.0, 1.0));\n};\n\n/**\n * Computes <code>Math.asin(value)</code>, but first clamps <code>value</code> to the range [-1.0, 1.0]\n * so that the function will never return NaN.\n *\n * @param {number} value The value for which to compute asin.\n * @returns {number} The asin of the value if the value is in the range [-1.0, 1.0], or the asin of -1.0 or 1.0,\n *          whichever is closer, if the value is outside the range.\n */\nCesiumMath.asinClamped = function (value) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required.\");\n  }\n  //>>includeEnd('debug');\n  return Math.asin(CesiumMath.clamp(value, -1.0, 1.0));\n};\n\n/**\n * Finds the chord length between two points given the circle's radius and the angle between the points.\n *\n * @param {number} angle The angle between the two points.\n * @param {number} radius The radius of the circle.\n * @returns {number} The chord length.\n */\nCesiumMath.chordLength = function (angle, radius) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(angle)) {\n    throw new DeveloperError(\"angle is required.\");\n  }\n  if (!defined(radius)) {\n    throw new DeveloperError(\"radius is required.\");\n  }\n  //>>includeEnd('debug');\n  return 2.0 * radius * Math.sin(angle * 0.5);\n};\n\n/**\n * Finds the logarithm of a number to a base.\n *\n * @param {number} number The number.\n * @param {number} base The base.\n * @returns {number} The result.\n */\nCesiumMath.logBase = function (number, base) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(number)) {\n    throw new DeveloperError(\"number is required.\");\n  }\n  if (!defined(base)) {\n    throw new DeveloperError(\"base is required.\");\n  }\n  //>>includeEnd('debug');\n  return Math.log(number) / Math.log(base);\n};\n\n/**\n * Finds the cube root of a number.\n * Returns NaN if <code>number</code> is not provided.\n *\n * @function\n * @param {number} [number] The number.\n * @returns {number} The result.\n */\nCesiumMath.cbrt =\n  Math.cbrt ??\n  function cbrt(number) {\n    const result = Math.pow(Math.abs(number), 1.0 / 3.0);\n    return number < 0.0 ? -result : result;\n  };\n\n/**\n * Finds the base 2 logarithm of a number.\n *\n * @function\n * @param {number} number The number.\n * @returns {number} The result.\n */\nCesiumMath.log2 =\n  Math.log2 ??\n  function log2(number) {\n    return Math.log(number) * Math.LOG2E;\n  };\n\n/**\n * Calculate the fog impact at a given distance. Useful for culling.\n * Matches the equation in `fog.glsl`\n * @private\n */\nCesiumMath.fog = function (distanceToCamera, density) {\n  const scalar = distanceToCamera * density;\n  return 1.0 - Math.exp(-(scalar * scalar));\n};\n\n/**\n * Computes a fast approximation of Atan for input in the range [-1, 1].\n *\n * Based on Michal Drobot's approximation from ShaderFastLibs,\n * which in turn is based on \"Efficient approximations for the arctangent function,\"\n * Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.\n * Adapted from ShaderFastLibs under MIT License.\n *\n * @param {number} x An input number in the range [-1, 1]\n * @returns {number} An approximation of atan(x)\n */\nCesiumMath.fastApproximateAtan = function (x) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"x\", x);\n  //>>includeEnd('debug');\n\n  return x * (-0.1784 * Math.abs(x) - 0.0663 * x * x + 1.0301);\n};\n\n/**\n * Computes a fast approximation of Atan2(x, y) for arbitrary input scalars.\n *\n * Range reduction math based on nvidia's cg reference implementation: http://developer.download.nvidia.com/cg/atan2.html\n *\n * @param {number} x An input number that isn't zero if y is zero.\n * @param {number} y An input number that isn't zero if x is zero.\n * @returns {number} An approximation of atan2(x, y)\n */\nCesiumMath.fastApproximateAtan2 = function (x, y) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  //>>includeEnd('debug');\n\n  // atan approximations are usually only reliable over [-1, 1]\n  // So reduce the range by flipping whether x or y is on top based on which is bigger.\n  let opposite;\n  let t = Math.abs(x); // t used as swap and atan result.\n  opposite = Math.abs(y);\n  const adjacent = Math.max(t, opposite);\n  opposite = Math.min(t, opposite);\n\n  const oppositeOverAdjacent = opposite / adjacent;\n  //>>includeStart('debug', pragmas.debug);\n  if (isNaN(oppositeOverAdjacent)) {\n    throw new DeveloperError(\"either x or y must be nonzero\");\n  }\n  //>>includeEnd('debug');\n  t = CesiumMath.fastApproximateAtan(oppositeOverAdjacent);\n\n  // Undo range reduction\n  t = Math.abs(y) > Math.abs(x) ? CesiumMath.PI_OVER_TWO - t : t;\n  t = x < 0.0 ? CesiumMath.PI - t : t;\n  t = y < 0.0 ? -t : t;\n  return t;\n};\nexport default CesiumMath;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A 2x2 matrix, indexable as a column-major order array.\n * Constructor parameters are in row-major order for code readability.\n * @alias Matrix2\n * @constructor\n * @implements {ArrayLike<number>}\n *\n * @param {number} [column0Row0=0.0] The value for column 0, row 0.\n * @param {number} [column1Row0=0.0] The value for column 1, row 0.\n * @param {number} [column0Row1=0.0] The value for column 0, row 1.\n * @param {number} [column1Row1=0.0] The value for column 1, row 1.\n *\n * @see Matrix2.fromArray\n * @see Matrix2.fromColumnMajorArray\n * @see Matrix2.fromRowMajorArray\n * @see Matrix2.fromScale\n * @see Matrix2.fromUniformScale\n * @see Matrix2.fromRotation\n * @see Matrix3\n * @see Matrix4\n */\nfunction Matrix2(column0Row0, column1Row0, column0Row1, column1Row1) {\n  this[0] = column0Row0 ?? 0.0;\n  this[1] = column0Row1 ?? 0.0;\n  this[2] = column1Row0 ?? 0.0;\n  this[3] = column1Row1 ?? 0.0;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nMatrix2.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Matrix2} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nMatrix2.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value[0];\n  array[startingIndex++] = value[1];\n  array[startingIndex++] = value[2];\n  array[startingIndex++] = value[3];\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Matrix2} [result] The object into which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\n */\nMatrix2.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new Matrix2();\n  }\n\n  result[0] = array[startingIndex++];\n  result[1] = array[startingIndex++];\n  result[2] = array[startingIndex++];\n  result[3] = array[startingIndex++];\n  return result;\n};\n\n/**\n * Flattens an array of Matrix2s into an array of components. The components\n * are stored in column-major order.\n *\n * @param {Matrix2[]} array The array of matrices to pack.\n * @param {number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements.\n * @returns {number[]} The packed array.\n */\nMatrix2.packArray = function (array, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  const length = array.length;\n  const resultLength = length * 4;\n  if (!defined(result)) {\n    result = new Array(resultLength);\n  } else if (!Array.isArray(result) && result.length !== resultLength) {\n    //>>includeStart('debug', pragmas.debug);\n    throw new DeveloperError(\n      \"If result is a typed array, it must have exactly array.length * 4 elements\",\n    );\n    //>>includeEnd('debug');\n  } else if (result.length !== resultLength) {\n    result.length = resultLength;\n  }\n\n  for (let i = 0; i < length; ++i) {\n    Matrix2.pack(array[i], result, i * 4);\n  }\n  return result;\n};\n\n/**\n * Unpacks an array of column-major matrix components into an array of Matrix2s.\n *\n * @param {number[]} array The array of components to unpack.\n * @param {Matrix2[]} [result] The array onto which to store the result.\n * @returns {Matrix2[]} The unpacked array.\n */\nMatrix2.unpackArray = function (array, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 4);\n  if (array.length % 4 !== 0) {\n    throw new DeveloperError(\"array length must be a multiple of 4.\");\n  }\n  //>>includeEnd('debug');\n\n  const length = array.length;\n  if (!defined(result)) {\n    result = new Array(length / 4);\n  } else {\n    result.length = length / 4;\n  }\n\n  for (let i = 0; i < length; i += 4) {\n    const index = i / 4;\n    result[index] = Matrix2.unpack(array, i, result[index]);\n  }\n  return result;\n};\n\n/**\n * Duplicates a Matrix2 instance.\n *\n * @param {Matrix2} matrix The matrix to duplicate.\n * @param {Matrix2} [result] The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided. (Returns undefined if matrix is undefined)\n */\nMatrix2.clone = function (matrix, result) {\n  if (!defined(matrix)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new Matrix2(matrix[0], matrix[2], matrix[1], matrix[3]);\n  }\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n  return result;\n};\n\n/**\n * Creates a Matrix2 from 4 consecutive elements in an array.\n *\n * @function\n * @param {number[]} array The array whose 4 consecutive elements correspond to the positions of the matrix.  Assumes column-major order.\n * @param {number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\n * @param {Matrix2} [result] The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Create the Matrix2:\n * // [1.0, 2.0]\n * // [1.0, 2.0]\n *\n * const v = [1.0, 1.0, 2.0, 2.0];\n * const m = Cesium.Matrix2.fromArray(v);\n *\n * // Create same Matrix2 with using an offset into an array\n * const v2 = [0.0, 0.0, 1.0, 1.0, 2.0, 2.0];\n * const m2 = Cesium.Matrix2.fromArray(v2, 2);\n */\nMatrix2.fromArray = Matrix2.unpack;\n/**\n * Creates a Matrix2 instance from a column-major order array.\n *\n * @param {number[]} values The column-major order array.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n */\nMatrix2.fromColumnMajorArray = function (values, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"values\", values);\n  //>>includeEnd('debug');\n\n  return Matrix2.clone(values, result);\n};\n\n/**\n * Creates a Matrix2 instance from a row-major order array.\n * The resulting matrix will be in column-major order.\n *\n * @param {number[]} values The row-major order array.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n */\nMatrix2.fromRowMajorArray = function (values, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"values\", values);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix2(values[0], values[1], values[2], values[3]);\n  }\n  result[0] = values[0];\n  result[1] = values[2];\n  result[2] = values[1];\n  result[3] = values[3];\n  return result;\n};\n\n/**\n * Computes a Matrix2 instance representing a non-uniform scale.\n *\n * @param {Cartesian2} scale The x and y scale factors.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Creates\n * //   [7.0, 0.0]\n * //   [0.0, 8.0]\n * const m = Cesium.Matrix2.fromScale(new Cesium.Cartesian2(7.0, 8.0));\n */\nMatrix2.fromScale = function (scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scale\", scale);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix2(scale.x, 0.0, 0.0, scale.y);\n  }\n\n  result[0] = scale.x;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = scale.y;\n  return result;\n};\n\n/**\n * Computes a Matrix2 instance representing a uniform scale.\n *\n * @param {number} scale The uniform scale factor.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Creates\n * //   [2.0, 0.0]\n * //   [0.0, 2.0]\n * const m = Cesium.Matrix2.fromUniformScale(2.0);\n */\nMatrix2.fromUniformScale = function (scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"scale\", scale);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix2(scale, 0.0, 0.0, scale);\n  }\n\n  result[0] = scale;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = scale;\n  return result;\n};\n\n/**\n * Creates a rotation matrix.\n *\n * @param {number} angle The angle, in radians, of the rotation.  Positive angles are counterclockwise.\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise.\n * const p = new Cesium.Cartesian2(5, 6);\n * const m = Cesium.Matrix2.fromRotation(Cesium.Math.toRadians(45.0));\n * const rotated = Cesium.Matrix2.multiplyByVector(m, p, new Cesium.Cartesian2());\n */\nMatrix2.fromRotation = function (angle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"angle\", angle);\n  //>>includeEnd('debug');\n\n  const cosAngle = Math.cos(angle);\n  const sinAngle = Math.sin(angle);\n\n  if (!defined(result)) {\n    return new Matrix2(cosAngle, -sinAngle, sinAngle, cosAngle);\n  }\n  result[0] = cosAngle;\n  result[1] = sinAngle;\n  result[2] = -sinAngle;\n  result[3] = cosAngle;\n  return result;\n};\n\n/**\n * Creates an Array from the provided Matrix2 instance.\n * The array will be in column-major order.\n *\n * @param {Matrix2} matrix The matrix to use..\n * @param {number[]} [result] The Array onto which to store the result.\n * @returns {number[]} The modified Array parameter or a new Array instance if one was not provided.\n */\nMatrix2.toArray = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return [matrix[0], matrix[1], matrix[2], matrix[3]];\n  }\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n  return result;\n};\n\n/**\n * Computes the array index of the element at the provided row and column.\n *\n * @param {number} row The zero-based index of the row.\n * @param {number} column The zero-based index of the column.\n * @returns {number} The index of the element at the provided row and column.\n *\n * @exception {DeveloperError} row must be 0 or 1.\n * @exception {DeveloperError} column must be 0 or 1.\n *\n * @example\n * const myMatrix = new Cesium.Matrix2();\n * const column1Row0Index = Cesium.Matrix2.getElementIndex(1, 0);\n * const column1Row0 = myMatrix[column1Row0Index]\n * myMatrix[column1Row0Index] = 10.0;\n */\nMatrix2.getElementIndex = function (column, row) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\n  Check.typeOf.number.lessThanOrEquals(\"row\", row, 1);\n\n  Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\n  Check.typeOf.number.lessThanOrEquals(\"column\", column, 1);\n  //>>includeEnd('debug');\n\n  return column * 2 + row;\n};\n\n/**\n * Retrieves a copy of the matrix column at the provided index as a Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {number} index The zero-based index of the column to retrieve.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.getColumn = function (matrix, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const startIndex = index * 2;\n  const x = matrix[startIndex];\n  const y = matrix[startIndex + 1];\n\n  result.x = x;\n  result.y = y;\n  return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {number} index The zero-based index of the column to set.\n * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified column.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.setColumn = function (matrix, index, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result = Matrix2.clone(matrix, result);\n  const startIndex = index * 2;\n  result[startIndex] = cartesian.x;\n  result[startIndex + 1] = cartesian.y;\n  return result;\n};\n\n/**\n * Retrieves a copy of the matrix row at the provided index as a Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {number} index The zero-based index of the row to retrieve.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.getRow = function (matrix, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const x = matrix[index];\n  const y = matrix[index + 2];\n\n  result.x = x;\n  result.y = y;\n  return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian2 instance.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {number} index The zero-based index of the row to set.\n * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified row.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0 or 1.\n */\nMatrix2.setRow = function (matrix, index, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\n\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result = Matrix2.clone(matrix, result);\n  result[index] = cartesian.x;\n  result[index + 2] = cartesian.y;\n  return result;\n};\n\nconst scaleScratch1 = new Cartesian2();\n\n/**\n * Computes a new matrix that replaces the scale with the provided scale.\n * This assumes the matrix is an affine transformation.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {Cartesian2} scale The scale that replaces the scale of the provided matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @see Matrix2.setUniformScale\n * @see Matrix2.fromScale\n * @see Matrix2.fromUniformScale\n * @see Matrix2.multiplyByScale\n * @see Matrix2.multiplyByUniformScale\n * @see Matrix2.getScale\n */\nMatrix2.setScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const existingScale = Matrix2.getScale(matrix, scaleScratch1);\n  const scaleRatioX = scale.x / existingScale.x;\n  const scaleRatioY = scale.y / existingScale.y;\n\n  result[0] = matrix[0] * scaleRatioX;\n  result[1] = matrix[1] * scaleRatioX;\n  result[2] = matrix[2] * scaleRatioY;\n  result[3] = matrix[3] * scaleRatioY;\n\n  return result;\n};\n\nconst scaleScratch2 = new Cartesian2();\n\n/**\n * Computes a new matrix that replaces the scale with the provided uniform scale.\n * This assumes the matrix is an affine transformation.\n *\n * @param {Matrix2} matrix The matrix to use.\n * @param {number} scale The uniform scale that replaces the scale of the provided matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @see Matrix2.setScale\n * @see Matrix2.fromScale\n * @see Matrix2.fromUniformScale\n * @see Matrix2.multiplyByScale\n * @see Matrix2.multiplyByUniformScale\n * @see Matrix2.getScale\n */\nMatrix2.setUniformScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const existingScale = Matrix2.getScale(matrix, scaleScratch2);\n  const scaleRatioX = scale / existingScale.x;\n  const scaleRatioY = scale / existingScale.y;\n\n  result[0] = matrix[0] * scaleRatioX;\n  result[1] = matrix[1] * scaleRatioX;\n  result[2] = matrix[2] * scaleRatioY;\n  result[3] = matrix[3] * scaleRatioY;\n\n  return result;\n};\n\nconst scratchColumn = new Cartesian2();\n\n/**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n *\n * @see Matrix2.multiplyByScale\n * @see Matrix2.multiplyByUniformScale\n * @see Matrix2.fromScale\n * @see Matrix2.fromUniformScale\n * @see Matrix2.setScale\n * @see Matrix2.setUniformScale\n */\nMatrix2.getScale = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = Cartesian2.magnitude(\n    Cartesian2.fromElements(matrix[0], matrix[1], scratchColumn),\n  );\n  result.y = Cartesian2.magnitude(\n    Cartesian2.fromElements(matrix[2], matrix[3], scratchColumn),\n  );\n  return result;\n};\n\nconst scaleScratch3 = new Cartesian2();\n\n/**\n * Computes the maximum scale assuming the matrix is an affine transformation.\n * The maximum scale is the maximum length of the column vectors.\n *\n * @param {Matrix2} matrix The matrix.\n * @returns {number} The maximum scale.\n */\nMatrix2.getMaximumScale = function (matrix) {\n  Matrix2.getScale(matrix, scaleScratch3);\n  return Cartesian2.maximumComponent(scaleScratch3);\n};\n\nconst scaleScratch4 = new Cartesian2();\n\n/**\n * Sets the rotation assuming the matrix is an affine transformation.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {Matrix2} rotation The rotation matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @see Matrix2.fromRotation\n * @see Matrix2.getRotation\n */\nMatrix2.setRotation = function (matrix, rotation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const scale = Matrix2.getScale(matrix, scaleScratch4);\n\n  result[0] = rotation[0] * scale.x;\n  result[1] = rotation[1] * scale.x;\n  result[2] = rotation[2] * scale.y;\n  result[3] = rotation[3] * scale.y;\n\n  return result;\n};\n\nconst scaleScratch5 = new Cartesian2();\n\n/**\n * Extracts the rotation matrix assuming the matrix is an affine transformation.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @see Matrix2.setRotation\n * @see Matrix2.fromRotation\n */\nMatrix2.getRotation = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const scale = Matrix2.getScale(matrix, scaleScratch5);\n\n  result[0] = matrix[0] / scale.x;\n  result[1] = matrix[1] / scale.x;\n  result[2] = matrix[2] / scale.y;\n  result[3] = matrix[3] / scale.y;\n\n  return result;\n};\n\n/**\n * Computes the product of two matrices.\n *\n * @param {Matrix2} left The first matrix.\n * @param {Matrix2} right The second matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.multiply = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const column0Row0 = left[0] * right[0] + left[2] * right[1];\n  const column1Row0 = left[0] * right[2] + left[2] * right[3];\n  const column0Row1 = left[1] * right[0] + left[3] * right[1];\n  const column1Row1 = left[1] * right[2] + left[3] * right[3];\n\n  result[0] = column0Row0;\n  result[1] = column0Row1;\n  result[2] = column1Row0;\n  result[3] = column1Row1;\n  return result;\n};\n\n/**\n * Computes the sum of two matrices.\n *\n * @param {Matrix2} left The first matrix.\n * @param {Matrix2} right The second matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.add = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = left[0] + right[0];\n  result[1] = left[1] + right[1];\n  result[2] = left[2] + right[2];\n  result[3] = left[3] + right[3];\n  return result;\n};\n\n/**\n * Computes the difference of two matrices.\n *\n * @param {Matrix2} left The first matrix.\n * @param {Matrix2} right The second matrix.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.subtract = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = left[0] - right[0];\n  result[1] = left[1] - right[1];\n  result[2] = left[2] - right[2];\n  result[3] = left[3] - right[3];\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a column vector.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {Cartesian2} cartesian The column.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter.\n */\nMatrix2.multiplyByVector = function (matrix, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const x = matrix[0] * cartesian.x + matrix[2] * cartesian.y;\n  const y = matrix[1] * cartesian.x + matrix[3] * cartesian.y;\n\n  result.x = x;\n  result.y = y;\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a scalar.\n *\n * @param {Matrix2} matrix The matrix.\n * @param {number} scalar The number to multiply by.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.multiplyByScalar = function (matrix, scalar, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scalar\", scalar);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scalar;\n  result[1] = matrix[1] * scalar;\n  result[2] = matrix[2] * scalar;\n  result[3] = matrix[3] * scalar;\n  return result;\n};\n\n/**\n * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix.\n *\n * @param {Matrix2} matrix The matrix on the left-hand side.\n * @param {Cartesian2} scale The non-uniform scale on the right-hand side.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n *\n * @example\n * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromScale(scale), m);\n * Cesium.Matrix2.multiplyByScale(m, scale, m);\n *\n * @see Matrix2.multiplyByUniformScale\n * @see Matrix2.fromScale\n * @see Matrix2.fromUniformScale\n * @see Matrix2.setScale\n * @see Matrix2.setUniformScale\n * @see Matrix2.getScale\n */\nMatrix2.multiplyByScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scale.x;\n  result[1] = matrix[1] * scale.x;\n  result[2] = matrix[2] * scale.y;\n  result[3] = matrix[3] * scale.y;\n\n  return result;\n};\n\n/**\n * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix.\n *\n * @param {Matrix2} matrix The matrix on the left-hand side.\n * @param {number} scale The uniform scale on the right-hand side.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n *\n * @example\n * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromUniformScale(scale), m);\n * Cesium.Matrix2.multiplyByUniformScale(m, scale, m);\n *\n * @see Matrix2.multiplyByScale\n * @see Matrix2.fromScale\n * @see Matrix2.fromUniformScale\n * @see Matrix2.setScale\n * @see Matrix2.setUniformScale\n * @see Matrix2.getScale\n */\nMatrix2.multiplyByUniformScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scale;\n  result[1] = matrix[1] * scale;\n  result[2] = matrix[2] * scale;\n  result[3] = matrix[3] * scale;\n\n  return result;\n};\n\n/**\n * Creates a negated copy of the provided matrix.\n *\n * @param {Matrix2} matrix The matrix to negate.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.negate = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = -matrix[0];\n  result[1] = -matrix[1];\n  result[2] = -matrix[2];\n  result[3] = -matrix[3];\n  return result;\n};\n\n/**\n * Computes the transpose of the provided matrix.\n *\n * @param {Matrix2} matrix The matrix to transpose.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.transpose = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const column0Row0 = matrix[0];\n  const column0Row1 = matrix[2];\n  const column1Row0 = matrix[1];\n  const column1Row1 = matrix[3];\n\n  result[0] = column0Row0;\n  result[1] = column0Row1;\n  result[2] = column1Row0;\n  result[3] = column1Row1;\n  return result;\n};\n\n/**\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\n *\n * @param {Matrix2} matrix The matrix with signed elements.\n * @param {Matrix2} result The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter.\n */\nMatrix2.abs = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = Math.abs(matrix[0]);\n  result[1] = Math.abs(matrix[1]);\n  result[2] = Math.abs(matrix[2]);\n  result[3] = Math.abs(matrix[3]);\n\n  return result;\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix2} [left] The first matrix.\n * @param {Matrix2} [right] The second matrix.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nMatrix2.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left[0] === right[0] &&\n      left[1] === right[1] &&\n      left[2] === right[2] &&\n      left[3] === right[3])\n  );\n};\n\n/**\n * @private\n */\nMatrix2.equalsArray = function (matrix, array, offset) {\n  return (\n    matrix[0] === array[offset] &&\n    matrix[1] === array[offset + 1] &&\n    matrix[2] === array[offset + 2] &&\n    matrix[3] === array[offset + 3]\n  );\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix2} [left] The first matrix.\n * @param {Matrix2} [right] The second matrix.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix2.equalsEpsilon = function (left, right, epsilon) {\n  epsilon = epsilon ?? 0;\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(left[0] - right[0]) <= epsilon &&\n      Math.abs(left[1] - right[1]) <= epsilon &&\n      Math.abs(left[2] - right[2]) <= epsilon &&\n      Math.abs(left[3] - right[3]) <= epsilon)\n  );\n};\n\n/**\n * An immutable Matrix2 instance initialized to the identity matrix.\n *\n * @type {Matrix2}\n * @constant\n */\nMatrix2.IDENTITY = Object.freeze(new Matrix2(1.0, 0.0, 0.0, 1.0));\n\n/**\n * An immutable Matrix2 instance initialized to the zero matrix.\n *\n * @type {Matrix2}\n * @constant\n */\nMatrix2.ZERO = Object.freeze(new Matrix2(0.0, 0.0, 0.0, 0.0));\n\n/**\n * The index into Matrix2 for column 0, row 0.\n *\n * @type {number}\n * @constant\n *\n * @example\n * const matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN0ROW0] = 5.0; // set column 0, row 0 to 5.0\n */\nMatrix2.COLUMN0ROW0 = 0;\n\n/**\n * The index into Matrix2 for column 0, row 1.\n *\n * @type {number}\n * @constant\n *\n * @example\n * const matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN0ROW1] = 5.0; // set column 0, row 1 to 5.0\n */\nMatrix2.COLUMN0ROW1 = 1;\n\n/**\n * The index into Matrix2 for column 1, row 0.\n *\n * @type {number}\n * @constant\n *\n * @example\n * const matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN1ROW0] = 5.0; // set column 1, row 0 to 5.0\n */\nMatrix2.COLUMN1ROW0 = 2;\n\n/**\n * The index into Matrix2 for column 1, row 1.\n *\n * @type {number}\n * @constant\n *\n * @example\n * const matrix = new Cesium.Matrix2();\n * matrix[Cesium.Matrix2.COLUMN1ROW1] = 5.0; // set column 1, row 1 to 5.0\n */\nMatrix2.COLUMN1ROW1 = 3;\n\nObject.defineProperties(Matrix2.prototype, {\n  /**\n   * Gets the number of items in the collection.\n   * @memberof Matrix2.prototype\n   *\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      return Matrix2.packedLength;\n    },\n  },\n});\n\n/**\n * Duplicates the provided Matrix2 instance.\n *\n * @param {Matrix2} [result] The object onto which to store the result.\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\n */\nMatrix2.prototype.clone = function (result) {\n  return Matrix2.clone(this, result);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix2} [right] The right hand side matrix.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nMatrix2.prototype.equals = function (right) {\n  return Matrix2.equals(this, right);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix2} [right] The right hand side matrix.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix2.prototype.equalsEpsilon = function (right, epsilon) {\n  return Matrix2.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this Matrix with each row being\n * on a separate line and in the format '(column0, column1)'.\n *\n * @returns {string} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1)'.\n */\nMatrix2.prototype.toString = function () {\n  return `(${this[0]}, ${this[2]})\\n` + `(${this[1]}, ${this[3]})`;\n};\nexport default Matrix2;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * A 3x3 matrix, indexable as a column-major order array.\n * Constructor parameters are in row-major order for code readability.\n * @alias Matrix3\n * @constructor\n * @implements {ArrayLike<number>}\n *\n * @param {number} [column0Row0=0.0] The value for column 0, row 0.\n * @param {number} [column1Row0=0.0] The value for column 1, row 0.\n * @param {number} [column2Row0=0.0] The value for column 2, row 0.\n * @param {number} [column0Row1=0.0] The value for column 0, row 1.\n * @param {number} [column1Row1=0.0] The value for column 1, row 1.\n * @param {number} [column2Row1=0.0] The value for column 2, row 1.\n * @param {number} [column0Row2=0.0] The value for column 0, row 2.\n * @param {number} [column1Row2=0.0] The value for column 1, row 2.\n * @param {number} [column2Row2=0.0] The value for column 2, row 2.\n *\n * @see Matrix3.fromArray\n * @see Matrix3.fromColumnMajorArray\n * @see Matrix3.fromRowMajorArray\n * @see Matrix3.fromQuaternion\n * @see Matrix3.fromHeadingPitchRoll\n * @see Matrix3.fromScale\n * @see Matrix3.fromUniformScale\n * @see Matrix3.fromCrossProduct\n * @see Matrix3.fromRotationX\n * @see Matrix3.fromRotationY\n * @see Matrix3.fromRotationZ\n * @see Matrix2\n * @see Matrix4\n */\nfunction Matrix3(\n  column0Row0,\n  column1Row0,\n  column2Row0,\n  column0Row1,\n  column1Row1,\n  column2Row1,\n  column0Row2,\n  column1Row2,\n  column2Row2,\n) {\n  this[0] = column0Row0 ?? 0.0;\n  this[1] = column0Row1 ?? 0.0;\n  this[2] = column0Row2 ?? 0.0;\n  this[3] = column1Row0 ?? 0.0;\n  this[4] = column1Row1 ?? 0.0;\n  this[5] = column1Row2 ?? 0.0;\n  this[6] = column2Row0 ?? 0.0;\n  this[7] = column2Row1 ?? 0.0;\n  this[8] = column2Row2 ?? 0.0;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nMatrix3.packedLength = 9;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Matrix3} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nMatrix3.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value[0];\n  array[startingIndex++] = value[1];\n  array[startingIndex++] = value[2];\n  array[startingIndex++] = value[3];\n  array[startingIndex++] = value[4];\n  array[startingIndex++] = value[5];\n  array[startingIndex++] = value[6];\n  array[startingIndex++] = value[7];\n  array[startingIndex++] = value[8];\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Matrix3} [result] The object into which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\n */\nMatrix3.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new Matrix3();\n  }\n\n  result[0] = array[startingIndex++];\n  result[1] = array[startingIndex++];\n  result[2] = array[startingIndex++];\n  result[3] = array[startingIndex++];\n  result[4] = array[startingIndex++];\n  result[5] = array[startingIndex++];\n  result[6] = array[startingIndex++];\n  result[7] = array[startingIndex++];\n  result[8] = array[startingIndex++];\n  return result;\n};\n\n/**\n * Flattens an array of Matrix3s into an array of components. The components\n * are stored in column-major order.\n *\n * @param {Matrix3[]} array The array of matrices to pack.\n * @param {number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 9 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 9) elements.\n * @returns {number[]} The packed array.\n */\nMatrix3.packArray = function (array, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  const length = array.length;\n  const resultLength = length * 9;\n  if (!defined(result)) {\n    result = new Array(resultLength);\n  } else if (!Array.isArray(result) && result.length !== resultLength) {\n    //>>includeStart('debug', pragmas.debug);\n    throw new DeveloperError(\n      \"If result is a typed array, it must have exactly array.length * 9 elements\",\n    );\n    //>>includeEnd('debug');\n  } else if (result.length !== resultLength) {\n    result.length = resultLength;\n  }\n\n  for (let i = 0; i < length; ++i) {\n    Matrix3.pack(array[i], result, i * 9);\n  }\n  return result;\n};\n\n/**\n * Unpacks an array of column-major matrix components into an array of Matrix3s.\n *\n * @param {number[]} array The array of components to unpack.\n * @param {Matrix3[]} [result] The array onto which to store the result.\n * @returns {Matrix3[]} The unpacked array.\n */\nMatrix3.unpackArray = function (array, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 9);\n  if (array.length % 9 !== 0) {\n    throw new DeveloperError(\"array length must be a multiple of 9.\");\n  }\n  //>>includeEnd('debug');\n\n  const length = array.length;\n  if (!defined(result)) {\n    result = new Array(length / 9);\n  } else {\n    result.length = length / 9;\n  }\n\n  for (let i = 0; i < length; i += 9) {\n    const index = i / 9;\n    result[index] = Matrix3.unpack(array, i, result[index]);\n  }\n  return result;\n};\n\n/**\n * Duplicates a Matrix3 instance.\n *\n * @param {Matrix3} matrix The matrix to duplicate.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided. (Returns undefined if matrix is undefined)\n */\nMatrix3.clone = function (matrix, result) {\n  if (!defined(matrix)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new Matrix3(\n      matrix[0],\n      matrix[3],\n      matrix[6],\n      matrix[1],\n      matrix[4],\n      matrix[7],\n      matrix[2],\n      matrix[5],\n      matrix[8],\n    );\n  }\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n  result[4] = matrix[4];\n  result[5] = matrix[5];\n  result[6] = matrix[6];\n  result[7] = matrix[7];\n  result[8] = matrix[8];\n  return result;\n};\n\n/**\n * Creates a Matrix3 from 9 consecutive elements in an array.\n *\n * @function\n * @param {number[]} array The array whose 9 consecutive elements correspond to the positions of the matrix.  Assumes column-major order.\n * @param {number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Create the Matrix3:\n * // [1.0, 2.0, 3.0]\n * // [1.0, 2.0, 3.0]\n * // [1.0, 2.0, 3.0]\n *\n * const v = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0];\n * const m = Cesium.Matrix3.fromArray(v);\n *\n * // Create same Matrix3 with using an offset into an array\n * const v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0];\n * const m2 = Cesium.Matrix3.fromArray(v2, 2);\n */\nMatrix3.fromArray = Matrix3.unpack;\n\n/**\n * Creates a Matrix3 instance from a column-major order array.\n *\n * @param {number[]} values The column-major order array.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n */\nMatrix3.fromColumnMajorArray = function (values, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"values\", values);\n  //>>includeEnd('debug');\n\n  return Matrix3.clone(values, result);\n};\n\n/**\n * Creates a Matrix3 instance from a row-major order array.\n * The resulting matrix will be in column-major order.\n *\n * @param {number[]} values The row-major order array.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n */\nMatrix3.fromRowMajorArray = function (values, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"values\", values);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix3(\n      values[0],\n      values[1],\n      values[2],\n      values[3],\n      values[4],\n      values[5],\n      values[6],\n      values[7],\n      values[8],\n    );\n  }\n  result[0] = values[0];\n  result[1] = values[3];\n  result[2] = values[6];\n  result[3] = values[1];\n  result[4] = values[4];\n  result[5] = values[7];\n  result[6] = values[2];\n  result[7] = values[5];\n  result[8] = values[8];\n  return result;\n};\n\n/**\n * Computes a 3x3 rotation matrix from the provided quaternion.\n *\n * @param {Quaternion} quaternion the quaternion to use.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The 3x3 rotation matrix from this quaternion.\n */\nMatrix3.fromQuaternion = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  //>>includeEnd('debug');\n\n  const x2 = quaternion.x * quaternion.x;\n  const xy = quaternion.x * quaternion.y;\n  const xz = quaternion.x * quaternion.z;\n  const xw = quaternion.x * quaternion.w;\n  const y2 = quaternion.y * quaternion.y;\n  const yz = quaternion.y * quaternion.z;\n  const yw = quaternion.y * quaternion.w;\n  const z2 = quaternion.z * quaternion.z;\n  const zw = quaternion.z * quaternion.w;\n  const w2 = quaternion.w * quaternion.w;\n\n  const m00 = x2 - y2 - z2 + w2;\n  const m01 = 2.0 * (xy - zw);\n  const m02 = 2.0 * (xz + yw);\n\n  const m10 = 2.0 * (xy + zw);\n  const m11 = -x2 + y2 - z2 + w2;\n  const m12 = 2.0 * (yz - xw);\n\n  const m20 = 2.0 * (xz - yw);\n  const m21 = 2.0 * (yz + xw);\n  const m22 = -x2 - y2 + z2 + w2;\n\n  if (!defined(result)) {\n    return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22);\n  }\n  result[0] = m00;\n  result[1] = m10;\n  result[2] = m20;\n  result[3] = m01;\n  result[4] = m11;\n  result[5] = m21;\n  result[6] = m02;\n  result[7] = m12;\n  result[8] = m22;\n  return result;\n};\n\n/**\n * Computes a 3x3 rotation matrix from the provided headingPitchRoll. (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles )\n *\n * @param {HeadingPitchRoll} headingPitchRoll the headingPitchRoll to use.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The 3x3 rotation matrix from this headingPitchRoll.\n */\nMatrix3.fromHeadingPitchRoll = function (headingPitchRoll, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"headingPitchRoll\", headingPitchRoll);\n  //>>includeEnd('debug');\n\n  const cosTheta = Math.cos(-headingPitchRoll.pitch);\n  const cosPsi = Math.cos(-headingPitchRoll.heading);\n  const cosPhi = Math.cos(headingPitchRoll.roll);\n  const sinTheta = Math.sin(-headingPitchRoll.pitch);\n  const sinPsi = Math.sin(-headingPitchRoll.heading);\n  const sinPhi = Math.sin(headingPitchRoll.roll);\n\n  const m00 = cosTheta * cosPsi;\n  const m01 = -cosPhi * sinPsi + sinPhi * sinTheta * cosPsi;\n  const m02 = sinPhi * sinPsi + cosPhi * sinTheta * cosPsi;\n\n  const m10 = cosTheta * sinPsi;\n  const m11 = cosPhi * cosPsi + sinPhi * sinTheta * sinPsi;\n  const m12 = -sinPhi * cosPsi + cosPhi * sinTheta * sinPsi;\n\n  const m20 = -sinTheta;\n  const m21 = sinPhi * cosTheta;\n  const m22 = cosPhi * cosTheta;\n\n  if (!defined(result)) {\n    return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22);\n  }\n  result[0] = m00;\n  result[1] = m10;\n  result[2] = m20;\n  result[3] = m01;\n  result[4] = m11;\n  result[5] = m21;\n  result[6] = m02;\n  result[7] = m12;\n  result[8] = m22;\n  return result;\n};\n\n/**\n * Computes a Matrix3 instance representing a non-uniform scale.\n *\n * @param {Cartesian3} scale The x, y, and z scale factors.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Creates\n * //   [7.0, 0.0, 0.0]\n * //   [0.0, 8.0, 0.0]\n * //   [0.0, 0.0, 9.0]\n * const m = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0));\n */\nMatrix3.fromScale = function (scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scale\", scale);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix3(scale.x, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, scale.z);\n  }\n\n  result[0] = scale.x;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = scale.y;\n  result[5] = 0.0;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = scale.z;\n  return result;\n};\n\n/**\n * Computes a Matrix3 instance representing a uniform scale.\n *\n * @param {number} scale The uniform scale factor.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Creates\n * //   [2.0, 0.0, 0.0]\n * //   [0.0, 2.0, 0.0]\n * //   [0.0, 0.0, 2.0]\n * const m = Cesium.Matrix3.fromUniformScale(2.0);\n */\nMatrix3.fromUniformScale = function (scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"scale\", scale);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix3(scale, 0.0, 0.0, 0.0, scale, 0.0, 0.0, 0.0, scale);\n  }\n\n  result[0] = scale;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = scale;\n  result[5] = 0.0;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = scale;\n  return result;\n};\n\n/**\n * Computes a Matrix3 instance representing the cross product equivalent matrix of a Cartesian3 vector.\n *\n * @param {Cartesian3} vector the vector on the left hand side of the cross product operation.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Creates\n * //   [0.0, -9.0,  8.0]\n * //   [9.0,  0.0, -7.0]\n * //   [-8.0, 7.0,  0.0]\n * const m = Cesium.Matrix3.fromCrossProduct(new Cesium.Cartesian3(7.0, 8.0, 9.0));\n */\nMatrix3.fromCrossProduct = function (vector, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"vector\", vector);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix3(\n      0.0,\n      -vector.z,\n      vector.y,\n      vector.z,\n      0.0,\n      -vector.x,\n      -vector.y,\n      vector.x,\n      0.0,\n    );\n  }\n\n  result[0] = 0.0;\n  result[1] = vector.z;\n  result[2] = -vector.y;\n  result[3] = -vector.z;\n  result[4] = 0.0;\n  result[5] = vector.x;\n  result[6] = vector.y;\n  result[7] = -vector.x;\n  result[8] = 0.0;\n  return result;\n};\n\n/**\n * Creates a rotation matrix around the x-axis.\n *\n * @param {number} angle The angle, in radians, of the rotation.  Positive angles are counterclockwise.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise around the x-axis.\n * const p = new Cesium.Cartesian3(5, 6, 7);\n * const m = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(45.0));\n * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\n */\nMatrix3.fromRotationX = function (angle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"angle\", angle);\n  //>>includeEnd('debug');\n\n  const cosAngle = Math.cos(angle);\n  const sinAngle = Math.sin(angle);\n\n  if (!defined(result)) {\n    return new Matrix3(\n      1.0,\n      0.0,\n      0.0,\n      0.0,\n      cosAngle,\n      -sinAngle,\n      0.0,\n      sinAngle,\n      cosAngle,\n    );\n  }\n\n  result[0] = 1.0;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = cosAngle;\n  result[5] = sinAngle;\n  result[6] = 0.0;\n  result[7] = -sinAngle;\n  result[8] = cosAngle;\n\n  return result;\n};\n\n/**\n * Creates a rotation matrix around the y-axis.\n *\n * @param {number} angle The angle, in radians, of the rotation.  Positive angles are counterclockwise.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise around the y-axis.\n * const p = new Cesium.Cartesian3(5, 6, 7);\n * const m = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(45.0));\n * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\n */\nMatrix3.fromRotationY = function (angle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"angle\", angle);\n  //>>includeEnd('debug');\n\n  const cosAngle = Math.cos(angle);\n  const sinAngle = Math.sin(angle);\n\n  if (!defined(result)) {\n    return new Matrix3(\n      cosAngle,\n      0.0,\n      sinAngle,\n      0.0,\n      1.0,\n      0.0,\n      -sinAngle,\n      0.0,\n      cosAngle,\n    );\n  }\n\n  result[0] = cosAngle;\n  result[1] = 0.0;\n  result[2] = -sinAngle;\n  result[3] = 0.0;\n  result[4] = 1.0;\n  result[5] = 0.0;\n  result[6] = sinAngle;\n  result[7] = 0.0;\n  result[8] = cosAngle;\n\n  return result;\n};\n\n/**\n * Creates a rotation matrix around the z-axis.\n *\n * @param {number} angle The angle, in radians, of the rotation.  Positive angles are counterclockwise.\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\n *\n * @example\n * // Rotate a point 45 degrees counterclockwise around the z-axis.\n * const p = new Cesium.Cartesian3(5, 6, 7);\n * const m = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(45.0));\n * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\n */\nMatrix3.fromRotationZ = function (angle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"angle\", angle);\n  //>>includeEnd('debug');\n\n  const cosAngle = Math.cos(angle);\n  const sinAngle = Math.sin(angle);\n\n  if (!defined(result)) {\n    return new Matrix3(\n      cosAngle,\n      -sinAngle,\n      0.0,\n      sinAngle,\n      cosAngle,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    );\n  }\n\n  result[0] = cosAngle;\n  result[1] = sinAngle;\n  result[2] = 0.0;\n  result[3] = -sinAngle;\n  result[4] = cosAngle;\n  result[5] = 0.0;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = 1.0;\n\n  return result;\n};\n\n/**\n * Creates an Array from the provided Matrix3 instance.\n * The array will be in column-major order.\n *\n * @param {Matrix3} matrix The matrix to use..\n * @param {number[]} [result] The Array onto which to store the result.\n * @returns {number[]} The modified Array parameter or a new Array instance if one was not provided.\n */\nMatrix3.toArray = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return [\n      matrix[0],\n      matrix[1],\n      matrix[2],\n      matrix[3],\n      matrix[4],\n      matrix[5],\n      matrix[6],\n      matrix[7],\n      matrix[8],\n    ];\n  }\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n  result[4] = matrix[4];\n  result[5] = matrix[5];\n  result[6] = matrix[6];\n  result[7] = matrix[7];\n  result[8] = matrix[8];\n  return result;\n};\n\n/**\n * Computes the array index of the element at the provided row and column.\n *\n * @param {number} column The zero-based index of the column.\n * @param {number} row The zero-based index of the row.\n * @returns {number} The index of the element at the provided row and column.\n *\n * @exception {DeveloperError} row must be 0, 1, or 2.\n * @exception {DeveloperError} column must be 0, 1, or 2.\n *\n * @example\n * const myMatrix = new Cesium.Matrix3();\n * const column1Row0Index = Cesium.Matrix3.getElementIndex(1, 0);\n * const column1Row0 = myMatrix[column1Row0Index]\n * myMatrix[column1Row0Index] = 10.0;\n */\nMatrix3.getElementIndex = function (column, row) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\n  Check.typeOf.number.lessThanOrEquals(\"row\", row, 2);\n  Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\n  Check.typeOf.number.lessThanOrEquals(\"column\", column, 2);\n  //>>includeEnd('debug');\n\n  return column * 3 + row;\n};\n\n/**\n * Retrieves a copy of the matrix column at the provided index as a Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {number} index The zero-based index of the column to retrieve.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.getColumn = function (matrix, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const startIndex = index * 3;\n  const x = matrix[startIndex];\n  const y = matrix[startIndex + 1];\n  const z = matrix[startIndex + 2];\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {number} index The zero-based index of the column to set.\n * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified column.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.setColumn = function (matrix, index, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result = Matrix3.clone(matrix, result);\n  const startIndex = index * 3;\n  result[startIndex] = cartesian.x;\n  result[startIndex + 1] = cartesian.y;\n  result[startIndex + 2] = cartesian.z;\n  return result;\n};\n\n/**\n * Retrieves a copy of the matrix row at the provided index as a Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {number} index The zero-based index of the row to retrieve.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.getRow = function (matrix, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const x = matrix[index];\n  const y = matrix[index + 3];\n  const z = matrix[index + 6];\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian3 instance.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {number} index The zero-based index of the row to set.\n * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified row.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, or 2.\n */\nMatrix3.setRow = function (matrix, index, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result = Matrix3.clone(matrix, result);\n  result[index] = cartesian.x;\n  result[index + 3] = cartesian.y;\n  result[index + 6] = cartesian.z;\n  return result;\n};\n\nconst scaleScratch1 = new Cartesian3();\n\n/**\n * Computes a new matrix that replaces the scale with the provided scale.\n * This assumes the matrix is an affine transformation.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {Cartesian3} scale The scale that replaces the scale of the provided matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @see Matrix3.setUniformScale\n * @see Matrix3.fromScale\n * @see Matrix3.fromUniformScale\n * @see Matrix3.multiplyByScale\n * @see Matrix3.multiplyByUniformScale\n * @see Matrix3.getScale\n */\nMatrix3.setScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const existingScale = Matrix3.getScale(matrix, scaleScratch1);\n  const scaleRatioX = scale.x / existingScale.x;\n  const scaleRatioY = scale.y / existingScale.y;\n  const scaleRatioZ = scale.z / existingScale.z;\n\n  result[0] = matrix[0] * scaleRatioX;\n  result[1] = matrix[1] * scaleRatioX;\n  result[2] = matrix[2] * scaleRatioX;\n  result[3] = matrix[3] * scaleRatioY;\n  result[4] = matrix[4] * scaleRatioY;\n  result[5] = matrix[5] * scaleRatioY;\n  result[6] = matrix[6] * scaleRatioZ;\n  result[7] = matrix[7] * scaleRatioZ;\n  result[8] = matrix[8] * scaleRatioZ;\n\n  return result;\n};\n\nconst scaleScratch2 = new Cartesian3();\n\n/**\n * Computes a new matrix that replaces the scale with the provided uniform scale.\n * This assumes the matrix is an affine transformation.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @param {number} scale The uniform scale that replaces the scale of the provided matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @see Matrix3.setScale\n * @see Matrix3.fromScale\n * @see Matrix3.fromUniformScale\n * @see Matrix3.multiplyByScale\n * @see Matrix3.multiplyByUniformScale\n * @see Matrix3.getScale\n */\nMatrix3.setUniformScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const existingScale = Matrix3.getScale(matrix, scaleScratch2);\n  const scaleRatioX = scale / existingScale.x;\n  const scaleRatioY = scale / existingScale.y;\n  const scaleRatioZ = scale / existingScale.z;\n\n  result[0] = matrix[0] * scaleRatioX;\n  result[1] = matrix[1] * scaleRatioX;\n  result[2] = matrix[2] * scaleRatioX;\n  result[3] = matrix[3] * scaleRatioY;\n  result[4] = matrix[4] * scaleRatioY;\n  result[5] = matrix[5] * scaleRatioY;\n  result[6] = matrix[6] * scaleRatioZ;\n  result[7] = matrix[7] * scaleRatioZ;\n  result[8] = matrix[8] * scaleRatioZ;\n\n  return result;\n};\n\nconst scratchColumn = new Cartesian3();\n\n/**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @see Matrix3.multiplyByScale\n * @see Matrix3.multiplyByUniformScale\n * @see Matrix3.fromScale\n * @see Matrix3.fromUniformScale\n * @see Matrix3.setScale\n * @see Matrix3.setUniformScale\n */\nMatrix3.getScale = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = Cartesian3.magnitude(\n    Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn),\n  );\n  result.y = Cartesian3.magnitude(\n    Cartesian3.fromElements(matrix[3], matrix[4], matrix[5], scratchColumn),\n  );\n  result.z = Cartesian3.magnitude(\n    Cartesian3.fromElements(matrix[6], matrix[7], matrix[8], scratchColumn),\n  );\n  return result;\n};\n\nconst scaleScratch3 = new Cartesian3();\n\n/**\n * Computes the maximum scale assuming the matrix is an affine transformation.\n * The maximum scale is the maximum length of the column vectors.\n *\n * @param {Matrix3} matrix The matrix.\n * @returns {number} The maximum scale.\n */\nMatrix3.getMaximumScale = function (matrix) {\n  Matrix3.getScale(matrix, scaleScratch3);\n  return Cartesian3.maximumComponent(scaleScratch3);\n};\n\nconst scaleScratch4 = new Cartesian3();\n\n/**\n * Sets the rotation assuming the matrix is an affine transformation.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Matrix3} rotation The rotation matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @see Matrix3.getRotation\n */\nMatrix3.setRotation = function (matrix, rotation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const scale = Matrix3.getScale(matrix, scaleScratch4);\n\n  result[0] = rotation[0] * scale.x;\n  result[1] = rotation[1] * scale.x;\n  result[2] = rotation[2] * scale.x;\n  result[3] = rotation[3] * scale.y;\n  result[4] = rotation[4] * scale.y;\n  result[5] = rotation[5] * scale.y;\n  result[6] = rotation[6] * scale.z;\n  result[7] = rotation[7] * scale.z;\n  result[8] = rotation[8] * scale.z;\n\n  return result;\n};\n\nconst scaleScratch5 = new Cartesian3();\n\n/**\n * Extracts the rotation matrix assuming the matrix is an affine transformation.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @see Matrix3.setRotation\n */\nMatrix3.getRotation = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const scale = Matrix3.getScale(matrix, scaleScratch5);\n\n  result[0] = matrix[0] / scale.x;\n  result[1] = matrix[1] / scale.x;\n  result[2] = matrix[2] / scale.x;\n  result[3] = matrix[3] / scale.y;\n  result[4] = matrix[4] / scale.y;\n  result[5] = matrix[5] / scale.y;\n  result[6] = matrix[6] / scale.z;\n  result[7] = matrix[7] / scale.z;\n  result[8] = matrix[8] / scale.z;\n\n  return result;\n};\n\n/**\n * Computes the product of two matrices.\n *\n * @param {Matrix3} left The first matrix.\n * @param {Matrix3} right The second matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.multiply = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const column0Row0 =\n    left[0] * right[0] + left[3] * right[1] + left[6] * right[2];\n  const column0Row1 =\n    left[1] * right[0] + left[4] * right[1] + left[7] * right[2];\n  const column0Row2 =\n    left[2] * right[0] + left[5] * right[1] + left[8] * right[2];\n\n  const column1Row0 =\n    left[0] * right[3] + left[3] * right[4] + left[6] * right[5];\n  const column1Row1 =\n    left[1] * right[3] + left[4] * right[4] + left[7] * right[5];\n  const column1Row2 =\n    left[2] * right[3] + left[5] * right[4] + left[8] * right[5];\n\n  const column2Row0 =\n    left[0] * right[6] + left[3] * right[7] + left[6] * right[8];\n  const column2Row1 =\n    left[1] * right[6] + left[4] * right[7] + left[7] * right[8];\n  const column2Row2 =\n    left[2] * right[6] + left[5] * right[7] + left[8] * right[8];\n\n  result[0] = column0Row0;\n  result[1] = column0Row1;\n  result[2] = column0Row2;\n  result[3] = column1Row0;\n  result[4] = column1Row1;\n  result[5] = column1Row2;\n  result[6] = column2Row0;\n  result[7] = column2Row1;\n  result[8] = column2Row2;\n  return result;\n};\n\n/**\n * Computes the sum of two matrices.\n *\n * @param {Matrix3} left The first matrix.\n * @param {Matrix3} right The second matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.add = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = left[0] + right[0];\n  result[1] = left[1] + right[1];\n  result[2] = left[2] + right[2];\n  result[3] = left[3] + right[3];\n  result[4] = left[4] + right[4];\n  result[5] = left[5] + right[5];\n  result[6] = left[6] + right[6];\n  result[7] = left[7] + right[7];\n  result[8] = left[8] + right[8];\n  return result;\n};\n\n/**\n * Computes the difference of two matrices.\n *\n * @param {Matrix3} left The first matrix.\n * @param {Matrix3} right The second matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.subtract = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = left[0] - right[0];\n  result[1] = left[1] - right[1];\n  result[2] = left[2] - right[2];\n  result[3] = left[3] - right[3];\n  result[4] = left[4] - right[4];\n  result[5] = left[5] - right[5];\n  result[6] = left[6] - right[6];\n  result[7] = left[7] - right[7];\n  result[8] = left[8] - right[8];\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a column vector.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {Cartesian3} cartesian The column.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nMatrix3.multiplyByVector = function (matrix, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const vX = cartesian.x;\n  const vY = cartesian.y;\n  const vZ = cartesian.z;\n\n  const x = matrix[0] * vX + matrix[3] * vY + matrix[6] * vZ;\n  const y = matrix[1] * vX + matrix[4] * vY + matrix[7] * vZ;\n  const z = matrix[2] * vX + matrix[5] * vY + matrix[8] * vZ;\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a scalar.\n *\n * @param {Matrix3} matrix The matrix.\n * @param {number} scalar The number to multiply by.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.multiplyByScalar = function (matrix, scalar, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scalar\", scalar);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scalar;\n  result[1] = matrix[1] * scalar;\n  result[2] = matrix[2] * scalar;\n  result[3] = matrix[3] * scalar;\n  result[4] = matrix[4] * scalar;\n  result[5] = matrix[5] * scalar;\n  result[6] = matrix[6] * scalar;\n  result[7] = matrix[7] * scalar;\n  result[8] = matrix[8] * scalar;\n  return result;\n};\n\n/**\n * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix.\n *\n * @param {Matrix3} matrix The matrix on the left-hand side.\n * @param {Cartesian3} scale The non-uniform scale on the right-hand side.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n *\n * @example\n * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromScale(scale), m);\n * Cesium.Matrix3.multiplyByScale(m, scale, m);\n *\n * @see Matrix3.multiplyByUniformScale\n * @see Matrix3.fromScale\n * @see Matrix3.fromUniformScale\n * @see Matrix3.setScale\n * @see Matrix3.setUniformScale\n * @see Matrix3.getScale\n */\nMatrix3.multiplyByScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scale.x;\n  result[1] = matrix[1] * scale.x;\n  result[2] = matrix[2] * scale.x;\n  result[3] = matrix[3] * scale.y;\n  result[4] = matrix[4] * scale.y;\n  result[5] = matrix[5] * scale.y;\n  result[6] = matrix[6] * scale.z;\n  result[7] = matrix[7] * scale.z;\n  result[8] = matrix[8] * scale.z;\n\n  return result;\n};\n\n/**\n * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix.\n *\n * @param {Matrix3} matrix The matrix on the left-hand side.\n * @param {number} scale The uniform scale on the right-hand side.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @example\n * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromUniformScale(scale), m);\n * Cesium.Matrix3.multiplyByUniformScale(m, scale, m);\n *\n * @see Matrix3.multiplyByScale\n * @see Matrix3.fromScale\n * @see Matrix3.fromUniformScale\n * @see Matrix3.setScale\n * @see Matrix3.setUniformScale\n * @see Matrix3.getScale\n */\nMatrix3.multiplyByUniformScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scale;\n  result[1] = matrix[1] * scale;\n  result[2] = matrix[2] * scale;\n  result[3] = matrix[3] * scale;\n  result[4] = matrix[4] * scale;\n  result[5] = matrix[5] * scale;\n  result[6] = matrix[6] * scale;\n  result[7] = matrix[7] * scale;\n  result[8] = matrix[8] * scale;\n\n  return result;\n};\n\n/**\n * Creates a negated copy of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to negate.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.negate = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = -matrix[0];\n  result[1] = -matrix[1];\n  result[2] = -matrix[2];\n  result[3] = -matrix[3];\n  result[4] = -matrix[4];\n  result[5] = -matrix[5];\n  result[6] = -matrix[6];\n  result[7] = -matrix[7];\n  result[8] = -matrix[8];\n  return result;\n};\n\n/**\n * Computes the transpose of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to transpose.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.transpose = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const column0Row0 = matrix[0];\n  const column0Row1 = matrix[3];\n  const column0Row2 = matrix[6];\n  const column1Row0 = matrix[1];\n  const column1Row1 = matrix[4];\n  const column1Row2 = matrix[7];\n  const column2Row0 = matrix[2];\n  const column2Row1 = matrix[5];\n  const column2Row2 = matrix[8];\n\n  result[0] = column0Row0;\n  result[1] = column0Row1;\n  result[2] = column0Row2;\n  result[3] = column1Row0;\n  result[4] = column1Row1;\n  result[5] = column1Row2;\n  result[6] = column2Row0;\n  result[7] = column2Row1;\n  result[8] = column2Row2;\n  return result;\n};\n\nfunction computeFrobeniusNorm(matrix) {\n  let norm = 0.0;\n  for (let i = 0; i < 9; ++i) {\n    const temp = matrix[i];\n    norm += temp * temp;\n  }\n\n  return Math.sqrt(norm);\n}\n\nconst rowVal = [1, 0, 0];\nconst colVal = [2, 2, 1];\n\nfunction offDiagonalFrobeniusNorm(matrix) {\n  // Computes the \"off-diagonal\" Frobenius norm.\n  // Assumes matrix is symmetric.\n\n  let norm = 0.0;\n  for (let i = 0; i < 3; ++i) {\n    const temp = matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])];\n    norm += 2.0 * temp * temp;\n  }\n\n  return Math.sqrt(norm);\n}\n\nfunction shurDecomposition(matrix, result) {\n  // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\n  // section 8.4.2 The 2by2 Symmetric Schur Decomposition.\n  //\n  // The routine takes a matrix, which is assumed to be symmetric, and\n  // finds the largest off-diagonal term, and then creates\n  // a matrix (result) which can be used to help reduce it\n\n  const tolerance = CesiumMath.EPSILON15;\n\n  let maxDiagonal = 0.0;\n  let rotAxis = 1;\n\n  // find pivot (rotAxis) based on max diagonal of matrix\n  for (let i = 0; i < 3; ++i) {\n    const temp = Math.abs(\n      matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])],\n    );\n    if (temp > maxDiagonal) {\n      rotAxis = i;\n      maxDiagonal = temp;\n    }\n  }\n\n  let c = 1.0;\n  let s = 0.0;\n\n  const p = rowVal[rotAxis];\n  const q = colVal[rotAxis];\n\n  if (Math.abs(matrix[Matrix3.getElementIndex(q, p)]) > tolerance) {\n    const qq = matrix[Matrix3.getElementIndex(q, q)];\n    const pp = matrix[Matrix3.getElementIndex(p, p)];\n    const qp = matrix[Matrix3.getElementIndex(q, p)];\n\n    const tau = (qq - pp) / 2.0 / qp;\n    let t;\n\n    if (tau < 0.0) {\n      t = -1.0 / (-tau + Math.sqrt(1.0 + tau * tau));\n    } else {\n      t = 1.0 / (tau + Math.sqrt(1.0 + tau * tau));\n    }\n\n    c = 1.0 / Math.sqrt(1.0 + t * t);\n    s = t * c;\n  }\n\n  result = Matrix3.clone(Matrix3.IDENTITY, result);\n\n  result[Matrix3.getElementIndex(p, p)] = result[\n    Matrix3.getElementIndex(q, q)\n  ] = c;\n  result[Matrix3.getElementIndex(q, p)] = s;\n  result[Matrix3.getElementIndex(p, q)] = -s;\n\n  return result;\n}\n\nconst jMatrix = new Matrix3();\nconst jMatrixTranspose = new Matrix3();\n\n/**\n * Computes the eigenvectors and eigenvalues of a symmetric matrix.\n * <p>\n * Returns a diagonal matrix and unitary matrix such that:\n * <code>matrix = unitary matrix * diagonal matrix * transpose(unitary matrix)</code>\n * </p>\n * <p>\n * The values along the diagonal of the diagonal matrix are the eigenvalues. The columns\n * of the unitary matrix are the corresponding eigenvectors.\n * </p>\n *\n * @param {Matrix3} matrix The matrix to decompose into diagonal and unitary matrix. Expected to be symmetric.\n * @param {object} [result] An object with unitary and diagonal properties which are matrices onto which to store the result.\n * @returns {object} An object with unitary and diagonal properties which are the unitary and diagonal matrices, respectively.\n *\n * @example\n * const a = //... symetric matrix\n * const result = {\n *     unitary : new Cesium.Matrix3(),\n *     diagonal : new Cesium.Matrix3()\n * };\n * Cesium.Matrix3.computeEigenDecomposition(a, result);\n *\n * const unitaryTranspose = Cesium.Matrix3.transpose(result.unitary, new Cesium.Matrix3());\n * const b = Cesium.Matrix3.multiply(result.unitary, result.diagonal, new Cesium.Matrix3());\n * Cesium.Matrix3.multiply(b, unitaryTranspose, b); // b is now equal to a\n *\n * const lambda = Cesium.Matrix3.getColumn(result.diagonal, 0, new Cesium.Cartesian3()).x;  // first eigenvalue\n * const v = Cesium.Matrix3.getColumn(result.unitary, 0, new Cesium.Cartesian3());          // first eigenvector\n * const c = Cesium.Cartesian3.multiplyByScalar(v, lambda, new Cesium.Cartesian3());        // equal to Cesium.Matrix3.multiplyByVector(a, v)\n */\nMatrix3.computeEigenDecomposition = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  //>>includeEnd('debug');\n\n  // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\n  // section 8.4.3 The Classical Jacobi Algorithm\n\n  const tolerance = CesiumMath.EPSILON20;\n  const maxSweeps = 10;\n\n  let count = 0;\n  let sweep = 0;\n\n  if (!defined(result)) {\n    result = {};\n  }\n\n  const unitaryMatrix = (result.unitary = Matrix3.clone(\n    Matrix3.IDENTITY,\n    result.unitary,\n  ));\n  const diagMatrix = (result.diagonal = Matrix3.clone(matrix, result.diagonal));\n\n  const epsilon = tolerance * computeFrobeniusNorm(diagMatrix);\n\n  while (sweep < maxSweeps && offDiagonalFrobeniusNorm(diagMatrix) > epsilon) {\n    shurDecomposition(diagMatrix, jMatrix);\n    Matrix3.transpose(jMatrix, jMatrixTranspose);\n    Matrix3.multiply(diagMatrix, jMatrix, diagMatrix);\n    Matrix3.multiply(jMatrixTranspose, diagMatrix, diagMatrix);\n    Matrix3.multiply(unitaryMatrix, jMatrix, unitaryMatrix);\n\n    if (++count > 2) {\n      ++sweep;\n      count = 0;\n    }\n  }\n\n  return result;\n};\n\n/**\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\n *\n * @param {Matrix3} matrix The matrix with signed elements.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.abs = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = Math.abs(matrix[0]);\n  result[1] = Math.abs(matrix[1]);\n  result[2] = Math.abs(matrix[2]);\n  result[3] = Math.abs(matrix[3]);\n  result[4] = Math.abs(matrix[4]);\n  result[5] = Math.abs(matrix[5]);\n  result[6] = Math.abs(matrix[6]);\n  result[7] = Math.abs(matrix[7]);\n  result[8] = Math.abs(matrix[8]);\n\n  return result;\n};\n\n/**\n * Computes the determinant of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to use.\n * @returns {number} The value of the determinant of the matrix.\n */\nMatrix3.determinant = function (matrix) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  //>>includeEnd('debug');\n\n  const m11 = matrix[0];\n  const m21 = matrix[3];\n  const m31 = matrix[6];\n  const m12 = matrix[1];\n  const m22 = matrix[4];\n  const m32 = matrix[7];\n  const m13 = matrix[2];\n  const m23 = matrix[5];\n  const m33 = matrix[8];\n\n  return (\n    m11 * (m22 * m33 - m23 * m32) +\n    m12 * (m23 * m31 - m21 * m33) +\n    m13 * (m21 * m32 - m22 * m31)\n  );\n};\n\n/**\n * Computes the inverse of the provided matrix.\n *\n * @param {Matrix3} matrix The matrix to invert.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @exception {DeveloperError} matrix is not invertible.\n */\nMatrix3.inverse = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const m11 = matrix[0];\n  const m21 = matrix[1];\n  const m31 = matrix[2];\n  const m12 = matrix[3];\n  const m22 = matrix[4];\n  const m32 = matrix[5];\n  const m13 = matrix[6];\n  const m23 = matrix[7];\n  const m33 = matrix[8];\n\n  const determinant = Matrix3.determinant(matrix);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (Math.abs(determinant) <= CesiumMath.EPSILON15) {\n    throw new DeveloperError(\"matrix is not invertible\");\n  }\n  //>>includeEnd('debug');\n\n  result[0] = m22 * m33 - m23 * m32;\n  result[1] = m23 * m31 - m21 * m33;\n  result[2] = m21 * m32 - m22 * m31;\n  result[3] = m13 * m32 - m12 * m33;\n  result[4] = m11 * m33 - m13 * m31;\n  result[5] = m12 * m31 - m11 * m32;\n  result[6] = m12 * m23 - m13 * m22;\n  result[7] = m13 * m21 - m11 * m23;\n  result[8] = m11 * m22 - m12 * m21;\n\n  const scale = 1.0 / determinant;\n  return Matrix3.multiplyByScalar(result, scale, result);\n};\n\nconst scratchTransposeMatrix = new Matrix3();\n\n/**\n * Computes the inverse transpose of a matrix.\n *\n * @param {Matrix3} matrix The matrix to transpose and invert.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n */\nMatrix3.inverseTranspose = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  return Matrix3.inverse(\n    Matrix3.transpose(matrix, scratchTransposeMatrix),\n    result,\n  );\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix3} [left] The first matrix.\n * @param {Matrix3} [right] The second matrix.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nMatrix3.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left[0] === right[0] &&\n      left[1] === right[1] &&\n      left[2] === right[2] &&\n      left[3] === right[3] &&\n      left[4] === right[4] &&\n      left[5] === right[5] &&\n      left[6] === right[6] &&\n      left[7] === right[7] &&\n      left[8] === right[8])\n  );\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix3} [left] The first matrix.\n * @param {Matrix3} [right] The second matrix.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix3.equalsEpsilon = function (left, right, epsilon) {\n  epsilon = epsilon ?? 0;\n\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(left[0] - right[0]) <= epsilon &&\n      Math.abs(left[1] - right[1]) <= epsilon &&\n      Math.abs(left[2] - right[2]) <= epsilon &&\n      Math.abs(left[3] - right[3]) <= epsilon &&\n      Math.abs(left[4] - right[4]) <= epsilon &&\n      Math.abs(left[5] - right[5]) <= epsilon &&\n      Math.abs(left[6] - right[6]) <= epsilon &&\n      Math.abs(left[7] - right[7]) <= epsilon &&\n      Math.abs(left[8] - right[8]) <= epsilon)\n  );\n};\n\n/**\n * An immutable Matrix3 instance initialized to the identity matrix.\n *\n * @type {Matrix3}\n * @constant\n */\nMatrix3.IDENTITY = Object.freeze(\n  new Matrix3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0),\n);\n\n/**\n * An immutable Matrix3 instance initialized to the zero matrix.\n *\n * @type {Matrix3}\n * @constant\n */\nMatrix3.ZERO = Object.freeze(\n  new Matrix3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0),\n);\n\n/**\n * The index into Matrix3 for column 0, row 0.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN0ROW0 = 0;\n\n/**\n * The index into Matrix3 for column 0, row 1.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN0ROW1 = 1;\n\n/**\n * The index into Matrix3 for column 0, row 2.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN0ROW2 = 2;\n\n/**\n * The index into Matrix3 for column 1, row 0.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN1ROW0 = 3;\n\n/**\n * The index into Matrix3 for column 1, row 1.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN1ROW1 = 4;\n\n/**\n * The index into Matrix3 for column 1, row 2.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN1ROW2 = 5;\n\n/**\n * The index into Matrix3 for column 2, row 0.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN2ROW0 = 6;\n\n/**\n * The index into Matrix3 for column 2, row 1.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN2ROW1 = 7;\n\n/**\n * The index into Matrix3 for column 2, row 2.\n *\n * @type {number}\n * @constant\n */\nMatrix3.COLUMN2ROW2 = 8;\n\nObject.defineProperties(Matrix3.prototype, {\n  /**\n   * Gets the number of items in the collection.\n   * @memberof Matrix3.prototype\n   *\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      return Matrix3.packedLength;\n    },\n  },\n});\n\n/**\n * Duplicates the provided Matrix3 instance.\n *\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\n */\nMatrix3.prototype.clone = function (result) {\n  return Matrix3.clone(this, result);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix3} [right] The right hand side matrix.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nMatrix3.prototype.equals = function (right) {\n  return Matrix3.equals(this, right);\n};\n\n/**\n * @private\n */\nMatrix3.equalsArray = function (matrix, array, offset) {\n  return (\n    matrix[0] === array[offset] &&\n    matrix[1] === array[offset + 1] &&\n    matrix[2] === array[offset + 2] &&\n    matrix[3] === array[offset + 3] &&\n    matrix[4] === array[offset + 4] &&\n    matrix[5] === array[offset + 5] &&\n    matrix[6] === array[offset + 6] &&\n    matrix[7] === array[offset + 7] &&\n    matrix[8] === array[offset + 8]\n  );\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix3} [right] The right hand side matrix.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix3.prototype.equalsEpsilon = function (right, epsilon) {\n  return Matrix3.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Creates a string representing this Matrix with each row being\n * on a separate line and in the format '(column0, column1, column2)'.\n *\n * @returns {string} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2)'.\n */\nMatrix3.prototype.toString = function () {\n  return (\n    `(${this[0]}, ${this[3]}, ${this[6]})\\n` +\n    `(${this[1]}, ${this[4]}, ${this[7]})\\n` +\n    `(${this[2]}, ${this[5]}, ${this[8]})`\n  );\n};\nexport default Matrix3;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * A 4x4 matrix, indexable as a column-major order array.\n * Constructor parameters are in row-major order for code readability.\n * @alias Matrix4\n * @constructor\n * @implements {ArrayLike<number>}\n *\n * @param {number} [column0Row0=0.0] The value for column 0, row 0.\n * @param {number} [column1Row0=0.0] The value for column 1, row 0.\n * @param {number} [column2Row0=0.0] The value for column 2, row 0.\n * @param {number} [column3Row0=0.0] The value for column 3, row 0.\n * @param {number} [column0Row1=0.0] The value for column 0, row 1.\n * @param {number} [column1Row1=0.0] The value for column 1, row 1.\n * @param {number} [column2Row1=0.0] The value for column 2, row 1.\n * @param {number} [column3Row1=0.0] The value for column 3, row 1.\n * @param {number} [column0Row2=0.0] The value for column 0, row 2.\n * @param {number} [column1Row2=0.0] The value for column 1, row 2.\n * @param {number} [column2Row2=0.0] The value for column 2, row 2.\n * @param {number} [column3Row2=0.0] The value for column 3, row 2.\n * @param {number} [column0Row3=0.0] The value for column 0, row 3.\n * @param {number} [column1Row3=0.0] The value for column 1, row 3.\n * @param {number} [column2Row3=0.0] The value for column 2, row 3.\n * @param {number} [column3Row3=0.0] The value for column 3, row 3.\n *\n * @see Matrix4.fromArray\n * @see Matrix4.fromColumnMajorArray\n * @see Matrix4.fromRowMajorArray\n * @see Matrix4.fromRotationTranslation\n * @see Matrix4.fromTranslationQuaternionRotationScale\n * @see Matrix4.fromTranslationRotationScale\n * @see Matrix4.fromTranslation\n * @see Matrix4.fromScale\n * @see Matrix4.fromUniformScale\n * @see Matrix4.fromRotation\n * @see Matrix4.fromCamera\n * @see Matrix4.computePerspectiveFieldOfView\n * @see Matrix4.computeOrthographicOffCenter\n * @see Matrix4.computePerspectiveOffCenter\n * @see Matrix4.computeInfinitePerspectiveOffCenter\n * @see Matrix4.computeViewportTransformation\n * @see Matrix4.computeView\n * @see Matrix2\n * @see Matrix3\n * @see Packable\n */\nfunction Matrix4(\n  column0Row0,\n  column1Row0,\n  column2Row0,\n  column3Row0,\n  column0Row1,\n  column1Row1,\n  column2Row1,\n  column3Row1,\n  column0Row2,\n  column1Row2,\n  column2Row2,\n  column3Row2,\n  column0Row3,\n  column1Row3,\n  column2Row3,\n  column3Row3,\n) {\n  this[0] = column0Row0 ?? 0.0;\n  this[1] = column0Row1 ?? 0.0;\n  this[2] = column0Row2 ?? 0.0;\n  this[3] = column0Row3 ?? 0.0;\n  this[4] = column1Row0 ?? 0.0;\n  this[5] = column1Row1 ?? 0.0;\n  this[6] = column1Row2 ?? 0.0;\n  this[7] = column1Row3 ?? 0.0;\n  this[8] = column2Row0 ?? 0.0;\n  this[9] = column2Row1 ?? 0.0;\n  this[10] = column2Row2 ?? 0.0;\n  this[11] = column2Row3 ?? 0.0;\n  this[12] = column3Row0 ?? 0.0;\n  this[13] = column3Row1 ?? 0.0;\n  this[14] = column3Row2 ?? 0.0;\n  this[15] = column3Row3 ?? 0.0;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nMatrix4.packedLength = 16;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Matrix4} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nMatrix4.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value[0];\n  array[startingIndex++] = value[1];\n  array[startingIndex++] = value[2];\n  array[startingIndex++] = value[3];\n  array[startingIndex++] = value[4];\n  array[startingIndex++] = value[5];\n  array[startingIndex++] = value[6];\n  array[startingIndex++] = value[7];\n  array[startingIndex++] = value[8];\n  array[startingIndex++] = value[9];\n  array[startingIndex++] = value[10];\n  array[startingIndex++] = value[11];\n  array[startingIndex++] = value[12];\n  array[startingIndex++] = value[13];\n  array[startingIndex++] = value[14];\n  array[startingIndex] = value[15];\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Matrix4} [result] The object into which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\n */\nMatrix4.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new Matrix4();\n  }\n\n  result[0] = array[startingIndex++];\n  result[1] = array[startingIndex++];\n  result[2] = array[startingIndex++];\n  result[3] = array[startingIndex++];\n  result[4] = array[startingIndex++];\n  result[5] = array[startingIndex++];\n  result[6] = array[startingIndex++];\n  result[7] = array[startingIndex++];\n  result[8] = array[startingIndex++];\n  result[9] = array[startingIndex++];\n  result[10] = array[startingIndex++];\n  result[11] = array[startingIndex++];\n  result[12] = array[startingIndex++];\n  result[13] = array[startingIndex++];\n  result[14] = array[startingIndex++];\n  result[15] = array[startingIndex];\n  return result;\n};\n\n/**\n * Flattens an array of Matrix4s into an array of components. The components\n * are stored in column-major order.\n *\n * @param {Matrix4[]} array The array of matrices to pack.\n * @param {number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 16 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 16) elements.\n * @returns {number[]} The packed array.\n */\nMatrix4.packArray = function (array, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  const length = array.length;\n  const resultLength = length * 16;\n  if (!defined(result)) {\n    result = new Array(resultLength);\n  } else if (!Array.isArray(result) && result.length !== resultLength) {\n    //>>includeStart('debug', pragmas.debug);\n    throw new DeveloperError(\n      \"If result is a typed array, it must have exactly array.length * 16 elements\",\n    );\n    //>>includeEnd('debug');\n  } else if (result.length !== resultLength) {\n    result.length = resultLength;\n  }\n\n  for (let i = 0; i < length; ++i) {\n    Matrix4.pack(array[i], result, i * 16);\n  }\n  return result;\n};\n\n/**\n * Unpacks an array of column-major matrix components into an array of Matrix4s.\n *\n * @param {number[]} array The array of components to unpack.\n * @param {Matrix4[]} [result] The array onto which to store the result.\n * @returns {Matrix4[]} The unpacked array.\n */\nMatrix4.unpackArray = function (array, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 16);\n  if (array.length % 16 !== 0) {\n    throw new DeveloperError(\"array length must be a multiple of 16.\");\n  }\n  //>>includeEnd('debug');\n\n  const length = array.length;\n  if (!defined(result)) {\n    result = new Array(length / 16);\n  } else {\n    result.length = length / 16;\n  }\n\n  for (let i = 0; i < length; i += 16) {\n    const index = i / 16;\n    result[index] = Matrix4.unpack(array, i, result[index]);\n  }\n  return result;\n};\n\n/**\n * Duplicates a Matrix4 instance.\n *\n * @param {Matrix4} matrix The matrix to duplicate.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. (Returns undefined if matrix is undefined)\n */\nMatrix4.clone = function (matrix, result) {\n  if (!defined(matrix)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new Matrix4(\n      matrix[0],\n      matrix[4],\n      matrix[8],\n      matrix[12],\n      matrix[1],\n      matrix[5],\n      matrix[9],\n      matrix[13],\n      matrix[2],\n      matrix[6],\n      matrix[10],\n      matrix[14],\n      matrix[3],\n      matrix[7],\n      matrix[11],\n      matrix[15],\n    );\n  }\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n  result[4] = matrix[4];\n  result[5] = matrix[5];\n  result[6] = matrix[6];\n  result[7] = matrix[7];\n  result[8] = matrix[8];\n  result[9] = matrix[9];\n  result[10] = matrix[10];\n  result[11] = matrix[11];\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n  return result;\n};\n\n/**\n * Creates a Matrix4 from 16 consecutive elements in an array.\n * @function\n *\n * @param {number[]} array The array whose 16 consecutive elements correspond to the positions of the matrix.  Assumes column-major order.\n * @param {number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\n *\n * @example\n * // Create the Matrix4:\n * // [1.0, 2.0, 3.0, 4.0]\n * // [1.0, 2.0, 3.0, 4.0]\n * // [1.0, 2.0, 3.0, 4.0]\n * // [1.0, 2.0, 3.0, 4.0]\n *\n * const v = [1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0];\n * const m = Cesium.Matrix4.fromArray(v);\n *\n * // Create same Matrix4 with using an offset into an array\n * const v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0];\n * const m2 = Cesium.Matrix4.fromArray(v2, 2);\n */\nMatrix4.fromArray = Matrix4.unpack;\n\n/**\n * Computes a Matrix4 instance from a column-major order array.\n *\n * @param {number[]} values The column-major order array.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromColumnMajorArray = function (values, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"values\", values);\n  //>>includeEnd('debug');\n\n  return Matrix4.clone(values, result);\n};\n\n/**\n * Computes a Matrix4 instance from a row-major order array.\n * The resulting matrix will be in column-major order.\n *\n * @param {number[]} values The row-major order array.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromRowMajorArray = function (values, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"values\", values);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix4(\n      values[0],\n      values[1],\n      values[2],\n      values[3],\n      values[4],\n      values[5],\n      values[6],\n      values[7],\n      values[8],\n      values[9],\n      values[10],\n      values[11],\n      values[12],\n      values[13],\n      values[14],\n      values[15],\n    );\n  }\n  result[0] = values[0];\n  result[1] = values[4];\n  result[2] = values[8];\n  result[3] = values[12];\n  result[4] = values[1];\n  result[5] = values[5];\n  result[6] = values[9];\n  result[7] = values[13];\n  result[8] = values[2];\n  result[9] = values[6];\n  result[10] = values[10];\n  result[11] = values[14];\n  result[12] = values[3];\n  result[13] = values[7];\n  result[14] = values[11];\n  result[15] = values[15];\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance from a Matrix3 representing the rotation\n * and a Cartesian3 representing the translation.\n *\n * @param {Matrix3} rotation The upper left portion of the matrix representing the rotation.\n * @param {Cartesian3} [translation=Cartesian3.ZERO] The upper right portion of the matrix representing the translation.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromRotationTranslation = function (rotation, translation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rotation\", rotation);\n  //>>includeEnd('debug');\n\n  translation = translation ?? Cartesian3.ZERO;\n\n  if (!defined(result)) {\n    return new Matrix4(\n      rotation[0],\n      rotation[3],\n      rotation[6],\n      translation.x,\n      rotation[1],\n      rotation[4],\n      rotation[7],\n      translation.y,\n      rotation[2],\n      rotation[5],\n      rotation[8],\n      translation.z,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    );\n  }\n\n  result[0] = rotation[0];\n  result[1] = rotation[1];\n  result[2] = rotation[2];\n  result[3] = 0.0;\n  result[4] = rotation[3];\n  result[5] = rotation[4];\n  result[6] = rotation[5];\n  result[7] = 0.0;\n  result[8] = rotation[6];\n  result[9] = rotation[7];\n  result[10] = rotation[8];\n  result[11] = 0.0;\n  result[12] = translation.x;\n  result[13] = translation.y;\n  result[14] = translation.z;\n  result[15] = 1.0;\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance from a translation, rotation, and scale (TRS)\n * representation with the rotation represented as a quaternion.\n *\n * @param {Cartesian3} translation The translation transformation.\n * @param {Quaternion} rotation The rotation transformation.\n * @param {Cartesian3} scale The non-uniform scale transformation.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @example\n * const result = Cesium.Matrix4.fromTranslationQuaternionRotationScale(\n *   new Cesium.Cartesian3(1.0, 2.0, 3.0), // translation\n *   Cesium.Quaternion.IDENTITY,           // rotation\n *   new Cesium.Cartesian3(7.0, 8.0, 9.0), // scale\n *   result);\n */\nMatrix4.fromTranslationQuaternionRotationScale = function (\n  translation,\n  rotation,\n  scale,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"translation\", translation);\n  Check.typeOf.object(\"rotation\", rotation);\n  Check.typeOf.object(\"scale\", scale);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Matrix4();\n  }\n\n  const scaleX = scale.x;\n  const scaleY = scale.y;\n  const scaleZ = scale.z;\n\n  const x2 = rotation.x * rotation.x;\n  const xy = rotation.x * rotation.y;\n  const xz = rotation.x * rotation.z;\n  const xw = rotation.x * rotation.w;\n  const y2 = rotation.y * rotation.y;\n  const yz = rotation.y * rotation.z;\n  const yw = rotation.y * rotation.w;\n  const z2 = rotation.z * rotation.z;\n  const zw = rotation.z * rotation.w;\n  const w2 = rotation.w * rotation.w;\n\n  const m00 = x2 - y2 - z2 + w2;\n  const m01 = 2.0 * (xy - zw);\n  const m02 = 2.0 * (xz + yw);\n\n  const m10 = 2.0 * (xy + zw);\n  const m11 = -x2 + y2 - z2 + w2;\n  const m12 = 2.0 * (yz - xw);\n\n  const m20 = 2.0 * (xz - yw);\n  const m21 = 2.0 * (yz + xw);\n  const m22 = -x2 - y2 + z2 + w2;\n\n  result[0] = m00 * scaleX;\n  result[1] = m10 * scaleX;\n  result[2] = m20 * scaleX;\n  result[3] = 0.0;\n  result[4] = m01 * scaleY;\n  result[5] = m11 * scaleY;\n  result[6] = m21 * scaleY;\n  result[7] = 0.0;\n  result[8] = m02 * scaleZ;\n  result[9] = m12 * scaleZ;\n  result[10] = m22 * scaleZ;\n  result[11] = 0.0;\n  result[12] = translation.x;\n  result[13] = translation.y;\n  result[14] = translation.z;\n  result[15] = 1.0;\n\n  return result;\n};\n\n/**\n * Creates a Matrix4 instance from a {@link TranslationRotationScale} instance.\n *\n * @param {TranslationRotationScale} translationRotationScale The instance.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromTranslationRotationScale = function (\n  translationRotationScale,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"translationRotationScale\", translationRotationScale);\n  //>>includeEnd('debug');\n\n  return Matrix4.fromTranslationQuaternionRotationScale(\n    translationRotationScale.translation,\n    translationRotationScale.rotation,\n    translationRotationScale.scale,\n    result,\n  );\n};\n\n/**\n * Creates a Matrix4 instance from a Cartesian3 representing the translation.\n *\n * @param {Cartesian3} translation The upper right portion of the matrix representing the translation.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @see Matrix4.multiplyByTranslation\n */\nMatrix4.fromTranslation = function (translation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"translation\", translation);\n  //>>includeEnd('debug');\n\n  return Matrix4.fromRotationTranslation(Matrix3.IDENTITY, translation, result);\n};\n\n/**\n * Computes a Matrix4 instance representing a non-uniform scale.\n *\n * @param {Cartesian3} scale The x, y, and z scale factors.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @example\n * // Creates\n * //   [7.0, 0.0, 0.0, 0.0]\n * //   [0.0, 8.0, 0.0, 0.0]\n * //   [0.0, 0.0, 9.0, 0.0]\n * //   [0.0, 0.0, 0.0, 1.0]\n * const m = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0));\n */\nMatrix4.fromScale = function (scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scale\", scale);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix4(\n      scale.x,\n      0.0,\n      0.0,\n      0.0,\n      0.0,\n      scale.y,\n      0.0,\n      0.0,\n      0.0,\n      0.0,\n      scale.z,\n      0.0,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    );\n  }\n\n  result[0] = scale.x;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = 0.0;\n  result[5] = scale.y;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = 0.0;\n  result[9] = 0.0;\n  result[10] = scale.z;\n  result[11] = 0.0;\n  result[12] = 0.0;\n  result[13] = 0.0;\n  result[14] = 0.0;\n  result[15] = 1.0;\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance representing a uniform scale.\n *\n * @param {number} scale The uniform scale factor.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n *\n * @example\n * // Creates\n * //   [2.0, 0.0, 0.0, 0.0]\n * //   [0.0, 2.0, 0.0, 0.0]\n * //   [0.0, 0.0, 2.0, 0.0]\n * //   [0.0, 0.0, 0.0, 1.0]\n * const m = Cesium.Matrix4.fromUniformScale(2.0);\n */\nMatrix4.fromUniformScale = function (scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"scale\", scale);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Matrix4(\n      scale,\n      0.0,\n      0.0,\n      0.0,\n      0.0,\n      scale,\n      0.0,\n      0.0,\n      0.0,\n      0.0,\n      scale,\n      0.0,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    );\n  }\n\n  result[0] = scale;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = 0.0;\n  result[5] = scale;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = 0.0;\n  result[9] = 0.0;\n  result[10] = scale;\n  result[11] = 0.0;\n  result[12] = 0.0;\n  result[13] = 0.0;\n  result[14] = 0.0;\n  result[15] = 1.0;\n  return result;\n};\n\n/**\n * Creates a rotation matrix.\n *\n * @param {Matrix3} rotation The rotation matrix.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromRotation = function (rotation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rotation\", rotation);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Matrix4();\n  }\n  result[0] = rotation[0];\n  result[1] = rotation[1];\n  result[2] = rotation[2];\n  result[3] = 0.0;\n\n  result[4] = rotation[3];\n  result[5] = rotation[4];\n  result[6] = rotation[5];\n  result[7] = 0.0;\n\n  result[8] = rotation[6];\n  result[9] = rotation[7];\n  result[10] = rotation[8];\n  result[11] = 0.0;\n\n  result[12] = 0.0;\n  result[13] = 0.0;\n  result[14] = 0.0;\n  result[15] = 1.0;\n\n  return result;\n};\n\nconst fromCameraF = new Cartesian3();\nconst fromCameraR = new Cartesian3();\nconst fromCameraU = new Cartesian3();\n\n/**\n * Computes a Matrix4 instance from a Camera.\n *\n * @param {Camera} camera The camera to use.\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\n */\nMatrix4.fromCamera = function (camera, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"camera\", camera);\n  //>>includeEnd('debug');\n\n  const position = camera.position;\n  const direction = camera.direction;\n  const up = camera.up;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"camera.position\", position);\n  Check.typeOf.object(\"camera.direction\", direction);\n  Check.typeOf.object(\"camera.up\", up);\n  //>>includeEnd('debug');\n\n  Cartesian3.normalize(direction, fromCameraF);\n  Cartesian3.normalize(\n    Cartesian3.cross(fromCameraF, up, fromCameraR),\n    fromCameraR,\n  );\n  Cartesian3.normalize(\n    Cartesian3.cross(fromCameraR, fromCameraF, fromCameraU),\n    fromCameraU,\n  );\n\n  const sX = fromCameraR.x;\n  const sY = fromCameraR.y;\n  const sZ = fromCameraR.z;\n  const fX = fromCameraF.x;\n  const fY = fromCameraF.y;\n  const fZ = fromCameraF.z;\n  const uX = fromCameraU.x;\n  const uY = fromCameraU.y;\n  const uZ = fromCameraU.z;\n  const positionX = position.x;\n  const positionY = position.y;\n  const positionZ = position.z;\n  const t0 = sX * -positionX + sY * -positionY + sZ * -positionZ;\n  const t1 = uX * -positionX + uY * -positionY + uZ * -positionZ;\n  const t2 = fX * positionX + fY * positionY + fZ * positionZ;\n\n  // The code below this comment is an optimized\n  // version of the commented lines.\n  // Rather that create two matrices and then multiply,\n  // we just bake in the multiplcation as part of creation.\n  // const rotation = new Matrix4(\n  //                 sX,  sY,  sZ, 0.0,\n  //                 uX,  uY,  uZ, 0.0,\n  //                -fX, -fY, -fZ, 0.0,\n  //                 0.0,  0.0,  0.0, 1.0);\n  // const translation = new Matrix4(\n  //                 1.0, 0.0, 0.0, -position.x,\n  //                 0.0, 1.0, 0.0, -position.y,\n  //                 0.0, 0.0, 1.0, -position.z,\n  //                 0.0, 0.0, 0.0, 1.0);\n  // return rotation.multiply(translation);\n  if (!defined(result)) {\n    return new Matrix4(\n      sX,\n      sY,\n      sZ,\n      t0,\n      uX,\n      uY,\n      uZ,\n      t1,\n      -fX,\n      -fY,\n      -fZ,\n      t2,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    );\n  }\n  result[0] = sX;\n  result[1] = uX;\n  result[2] = -fX;\n  result[3] = 0.0;\n  result[4] = sY;\n  result[5] = uY;\n  result[6] = -fY;\n  result[7] = 0.0;\n  result[8] = sZ;\n  result[9] = uZ;\n  result[10] = -fZ;\n  result[11] = 0.0;\n  result[12] = t0;\n  result[13] = t1;\n  result[14] = t2;\n  result[15] = 1.0;\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance representing a perspective transformation matrix.\n *\n * @param {number} fovY The field of view along the Y axis in radians.\n * @param {number} aspectRatio The aspect ratio.\n * @param {number} near The distance to the near plane in meters.\n * @param {number} far The distance to the far plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {DeveloperError} fovY must be in (0, PI].\n * @exception {DeveloperError} aspectRatio must be greater than zero.\n * @exception {DeveloperError} near must be greater than zero.\n * @exception {DeveloperError} far must be greater than zero.\n */\nMatrix4.computePerspectiveFieldOfView = function (\n  fovY,\n  aspectRatio,\n  near,\n  far,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"fovY\", fovY, 0.0);\n  Check.typeOf.number.lessThan(\"fovY\", fovY, Math.PI);\n  Check.typeOf.number.greaterThan(\"near\", near, 0.0);\n  Check.typeOf.number.greaterThan(\"far\", far, 0.0);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const bottom = Math.tan(fovY * 0.5);\n\n  const column1Row1 = 1.0 / bottom;\n  const column0Row0 = column1Row1 / aspectRatio;\n  const column2Row2 = (far + near) / (near - far);\n  const column3Row2 = (2.0 * far * near) / (near - far);\n\n  result[0] = column0Row0;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = 0.0;\n  result[5] = column1Row1;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = 0.0;\n  result[9] = 0.0;\n  result[10] = column2Row2;\n  result[11] = -1.0;\n  result[12] = 0.0;\n  result[13] = 0.0;\n  result[14] = column3Row2;\n  result[15] = 0.0;\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance representing an orthographic transformation matrix.\n *\n * @param {number} left The number of meters to the left of the camera that will be in view.\n * @param {number} right The number of meters to the right of the camera that will be in view.\n * @param {number} bottom The number of meters below of the camera that will be in view.\n * @param {number} top The number of meters above of the camera that will be in view.\n * @param {number} near The distance to the near plane in meters.\n * @param {number} far The distance to the far plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computeOrthographicOffCenter = function (\n  left,\n  right,\n  bottom,\n  top,\n  near,\n  far,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"left\", left);\n  Check.typeOf.number(\"right\", right);\n  Check.typeOf.number(\"bottom\", bottom);\n  Check.typeOf.number(\"top\", top);\n  Check.typeOf.number(\"near\", near);\n  Check.typeOf.number(\"far\", far);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  let a = 1.0 / (right - left);\n  let b = 1.0 / (top - bottom);\n  let c = 1.0 / (far - near);\n\n  const tx = -(right + left) * a;\n  const ty = -(top + bottom) * b;\n  const tz = -(far + near) * c;\n  a *= 2.0;\n  b *= 2.0;\n  c *= -2.0;\n\n  result[0] = a;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = 0.0;\n  result[5] = b;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = 0.0;\n  result[9] = 0.0;\n  result[10] = c;\n  result[11] = 0.0;\n  result[12] = tx;\n  result[13] = ty;\n  result[14] = tz;\n  result[15] = 1.0;\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance representing an off center perspective transformation.\n *\n * @param {number} left The number of meters to the left of the camera that will be in view.\n * @param {number} right The number of meters to the right of the camera that will be in view.\n * @param {number} bottom The number of meters below the camera that will be in view.\n * @param {number} top The number of meters above the camera that will be in view.\n * @param {number} near The distance to the near plane in meters.\n * @param {number} far The distance to the far plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computePerspectiveOffCenter = function (\n  left,\n  right,\n  bottom,\n  top,\n  near,\n  far,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"left\", left);\n  Check.typeOf.number(\"right\", right);\n  Check.typeOf.number(\"bottom\", bottom);\n  Check.typeOf.number(\"top\", top);\n  Check.typeOf.number(\"near\", near);\n  Check.typeOf.number(\"far\", far);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const column0Row0 = (2.0 * near) / (right - left);\n  const column1Row1 = (2.0 * near) / (top - bottom);\n  const column2Row0 = (right + left) / (right - left);\n  const column2Row1 = (top + bottom) / (top - bottom);\n  const column2Row2 = -(far + near) / (far - near);\n  const column2Row3 = -1.0;\n  const column3Row2 = (-2.0 * far * near) / (far - near);\n\n  result[0] = column0Row0;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = 0.0;\n  result[5] = column1Row1;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = column2Row0;\n  result[9] = column2Row1;\n  result[10] = column2Row2;\n  result[11] = column2Row3;\n  result[12] = 0.0;\n  result[13] = 0.0;\n  result[14] = column3Row2;\n  result[15] = 0.0;\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance representing an infinite off center perspective transformation.\n *\n * @param {number} left The number of meters to the left of the camera that will be in view.\n * @param {number} right The number of meters to the right of the camera that will be in view.\n * @param {number} bottom The number of meters below of the camera that will be in view.\n * @param {number} top The number of meters above of the camera that will be in view.\n * @param {number} near The distance to the near plane in meters.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computeInfinitePerspectiveOffCenter = function (\n  left,\n  right,\n  bottom,\n  top,\n  near,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"left\", left);\n  Check.typeOf.number(\"right\", right);\n  Check.typeOf.number(\"bottom\", bottom);\n  Check.typeOf.number(\"top\", top);\n  Check.typeOf.number(\"near\", near);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const column0Row0 = (2.0 * near) / (right - left);\n  const column1Row1 = (2.0 * near) / (top - bottom);\n  const column2Row0 = (right + left) / (right - left);\n  const column2Row1 = (top + bottom) / (top - bottom);\n  const column2Row2 = -1.0;\n  const column2Row3 = -1.0;\n  const column3Row2 = -2.0 * near;\n\n  result[0] = column0Row0;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = 0.0;\n  result[5] = column1Row1;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = column2Row0;\n  result[9] = column2Row1;\n  result[10] = column2Row2;\n  result[11] = column2Row3;\n  result[12] = 0.0;\n  result[13] = 0.0;\n  result[14] = column3Row2;\n  result[15] = 0.0;\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance that transforms from normalized device coordinates to window coordinates.\n *\n * @param {object} [viewport = { x : 0.0, y : 0.0, width : 0.0, height : 0.0 }] The viewport's corners as shown in Example 1.\n * @param {number} [nearDepthRange=0.0] The near plane distance in window coordinates.\n * @param {number} [farDepthRange=1.0] The far plane distance in window coordinates.\n * @param {Matrix4} [result] The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * // Create viewport transformation using an explicit viewport and depth range.\n * const m = Cesium.Matrix4.computeViewportTransformation({\n *     x : 0.0,\n *     y : 0.0,\n *     width : 1024.0,\n *     height : 768.0\n * }, 0.0, 1.0, new Cesium.Matrix4());\n */\nMatrix4.computeViewportTransformation = function (\n  viewport,\n  nearDepthRange,\n  farDepthRange,\n  result,\n) {\n  if (!defined(result)) {\n    result = new Matrix4();\n  }\n\n  viewport = viewport ?? Frozen.EMPTY_OBJECT;\n  const x = viewport.x ?? 0.0;\n  const y = viewport.y ?? 0.0;\n  const width = viewport.width ?? 0.0;\n  const height = viewport.height ?? 0.0;\n  nearDepthRange = nearDepthRange ?? 0.0;\n  farDepthRange = farDepthRange ?? 1.0;\n\n  const halfWidth = width * 0.5;\n  const halfHeight = height * 0.5;\n  const halfDepth = (farDepthRange - nearDepthRange) * 0.5;\n\n  const column0Row0 = halfWidth;\n  const column1Row1 = halfHeight;\n  const column2Row2 = halfDepth;\n  const column3Row0 = x + halfWidth;\n  const column3Row1 = y + halfHeight;\n  const column3Row2 = nearDepthRange + halfDepth;\n  const column3Row3 = 1.0;\n\n  result[0] = column0Row0;\n  result[1] = 0.0;\n  result[2] = 0.0;\n  result[3] = 0.0;\n  result[4] = 0.0;\n  result[5] = column1Row1;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = 0.0;\n  result[9] = 0.0;\n  result[10] = column2Row2;\n  result[11] = 0.0;\n  result[12] = column3Row0;\n  result[13] = column3Row1;\n  result[14] = column3Row2;\n  result[15] = column3Row3;\n\n  return result;\n};\n\n/**\n * Computes a Matrix4 instance that transforms from world space to view space.\n *\n * @param {Cartesian3} position The position of the camera.\n * @param {Cartesian3} direction The forward direction.\n * @param {Cartesian3} up The up direction.\n * @param {Cartesian3} right The right direction.\n * @param {Matrix4} result The object in which the result will be stored.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.computeView = function (position, direction, up, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"position\", position);\n  Check.typeOf.object(\"direction\", direction);\n  Check.typeOf.object(\"up\", up);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = right.x;\n  result[1] = up.x;\n  result[2] = -direction.x;\n  result[3] = 0.0;\n  result[4] = right.y;\n  result[5] = up.y;\n  result[6] = -direction.y;\n  result[7] = 0.0;\n  result[8] = right.z;\n  result[9] = up.z;\n  result[10] = -direction.z;\n  result[11] = 0.0;\n  result[12] = -Cartesian3.dot(right, position);\n  result[13] = -Cartesian3.dot(up, position);\n  result[14] = Cartesian3.dot(direction, position);\n  result[15] = 1.0;\n  return result;\n};\n\n/**\n * Computes an Array from the provided Matrix4 instance.\n * The array will be in column-major order.\n *\n * @param {Matrix4} matrix The matrix to use..\n * @param {number[]} [result] The Array onto which to store the result.\n * @returns {number[]} The modified Array parameter or a new Array instance if one was not provided.\n *\n * @example\n * //create an array from an instance of Matrix4\n * // m = [10.0, 14.0, 18.0, 22.0]\n * //     [11.0, 15.0, 19.0, 23.0]\n * //     [12.0, 16.0, 20.0, 24.0]\n * //     [13.0, 17.0, 21.0, 25.0]\n * const a = Cesium.Matrix4.toArray(m);\n *\n * // m remains the same\n * //creates a = [10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0]\n */\nMatrix4.toArray = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return [\n      matrix[0],\n      matrix[1],\n      matrix[2],\n      matrix[3],\n      matrix[4],\n      matrix[5],\n      matrix[6],\n      matrix[7],\n      matrix[8],\n      matrix[9],\n      matrix[10],\n      matrix[11],\n      matrix[12],\n      matrix[13],\n      matrix[14],\n      matrix[15],\n    ];\n  }\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n  result[4] = matrix[4];\n  result[5] = matrix[5];\n  result[6] = matrix[6];\n  result[7] = matrix[7];\n  result[8] = matrix[8];\n  result[9] = matrix[9];\n  result[10] = matrix[10];\n  result[11] = matrix[11];\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n  return result;\n};\n\n/**\n * Computes the array index of the element at the provided row and column.\n *\n * @param {number} row The zero-based index of the row.\n * @param {number} column The zero-based index of the column.\n * @returns {number} The index of the element at the provided row and column.\n *\n * @exception {DeveloperError} row must be 0, 1, 2, or 3.\n * @exception {DeveloperError} column must be 0, 1, 2, or 3.\n *\n * @example\n * const myMatrix = new Cesium.Matrix4();\n * const column1Row0Index = Cesium.Matrix4.getElementIndex(1, 0);\n * const column1Row0 = myMatrix[column1Row0Index];\n * myMatrix[column1Row0Index] = 10.0;\n */\nMatrix4.getElementIndex = function (column, row) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\n  Check.typeOf.number.lessThanOrEquals(\"row\", row, 3);\n\n  Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\n  Check.typeOf.number.lessThanOrEquals(\"column\", column, 3);\n  //>>includeEnd('debug');\n\n  return column * 4 + row;\n};\n\n/**\n * Retrieves a copy of the matrix column at the provided index as a Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {number} index The zero-based index of the column to retrieve.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //returns a Cartesian4 instance with values from the specified column\n * // m = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [18.0, 19.0, 20.0, 21.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n *\n * //Example 1: Creates an instance of Cartesian\n * const a = Cesium.Matrix4.getColumn(m, 2, new Cesium.Cartesian4());\n *\n * @example\n * //Example 2: Sets values for Cartesian instance\n * const a = new Cesium.Cartesian4();\n * Cesium.Matrix4.getColumn(m, 2, a);\n *\n * // a.x = 12.0; a.y = 16.0; a.z = 20.0; a.w = 24.0;\n */\nMatrix4.getColumn = function (matrix, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const startIndex = index * 4;\n  const x = matrix[startIndex];\n  const y = matrix[startIndex + 1];\n  const z = matrix[startIndex + 2];\n  const w = matrix[startIndex + 3];\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  result.w = w;\n  return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {number} index The zero-based index of the column to set.\n * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified column.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //creates a new Matrix4 instance with new column values from the Cartesian4 instance\n * // m = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [18.0, 19.0, 20.0, 21.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n *\n * const a = Cesium.Matrix4.setColumn(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [10.0, 11.0, 99.0, 13.0]\n * //     [14.0, 15.0, 98.0, 17.0]\n * //     [18.0, 19.0, 97.0, 21.0]\n * //     [22.0, 23.0, 96.0, 25.0]\n */\nMatrix4.setColumn = function (matrix, index, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result = Matrix4.clone(matrix, result);\n  const startIndex = index * 4;\n  result[startIndex] = cartesian.x;\n  result[startIndex + 1] = cartesian.y;\n  result[startIndex + 2] = cartesian.z;\n  result[startIndex + 3] = cartesian.w;\n  return result;\n};\n\n/**\n * Retrieves a copy of the matrix row at the provided index as a Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {number} index The zero-based index of the row to retrieve.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //returns a Cartesian4 instance with values from the specified column\n * // m = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [18.0, 19.0, 20.0, 21.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n *\n * //Example 1: Returns an instance of Cartesian\n * const a = Cesium.Matrix4.getRow(m, 2, new Cesium.Cartesian4());\n *\n * @example\n * //Example 2: Sets values for a Cartesian instance\n * const a = new Cesium.Cartesian4();\n * Cesium.Matrix4.getRow(m, 2, a);\n *\n * // a.x = 18.0; a.y = 19.0; a.z = 20.0; a.w = 21.0;\n */\nMatrix4.getRow = function (matrix, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const x = matrix[index];\n  const y = matrix[index + 4];\n  const z = matrix[index + 8];\n  const w = matrix[index + 12];\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  result.w = w;\n  return result;\n};\n\n/**\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian4 instance.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {number} index The zero-based index of the row to set.\n * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified row.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\n *\n * @example\n * //create a new Matrix4 instance with new row values from the Cartesian4 instance\n * // m = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [18.0, 19.0, 20.0, 21.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n *\n * const a = Cesium.Matrix4.setRow(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [99.0, 98.0, 97.0, 96.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n */\nMatrix4.setRow = function (matrix, index, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\n\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result = Matrix4.clone(matrix, result);\n  result[index] = cartesian.x;\n  result[index + 4] = cartesian.y;\n  result[index + 8] = cartesian.z;\n  result[index + 12] = cartesian.w;\n  return result;\n};\n\n/**\n * Computes a new matrix that replaces the translation in the rightmost column of the provided\n * matrix with the provided translation. This assumes the matrix is an affine transformation.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Cartesian3} translation The translation that replaces the translation of the provided matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.setTranslation = function (matrix, translation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"translation\", translation);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n\n  result[4] = matrix[4];\n  result[5] = matrix[5];\n  result[6] = matrix[6];\n  result[7] = matrix[7];\n\n  result[8] = matrix[8];\n  result[9] = matrix[9];\n  result[10] = matrix[10];\n  result[11] = matrix[11];\n\n  result[12] = translation.x;\n  result[13] = translation.y;\n  result[14] = translation.z;\n  result[15] = matrix[15];\n\n  return result;\n};\n\nconst scaleScratch1 = new Cartesian3();\n\n/**\n * Computes a new matrix that replaces the scale with the provided scale.\n * This assumes the matrix is an affine transformation.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Cartesian3} scale The scale that replaces the scale of the provided matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @see Matrix4.setUniformScale\n * @see Matrix4.fromScale\n * @see Matrix4.fromUniformScale\n * @see Matrix4.multiplyByScale\n * @see Matrix4.multiplyByUniformScale\n * @see Matrix4.getScale\n */\nMatrix4.setScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const existingScale = Matrix4.getScale(matrix, scaleScratch1);\n  const scaleRatioX = scale.x / existingScale.x;\n  const scaleRatioY = scale.y / existingScale.y;\n  const scaleRatioZ = scale.z / existingScale.z;\n\n  result[0] = matrix[0] * scaleRatioX;\n  result[1] = matrix[1] * scaleRatioX;\n  result[2] = matrix[2] * scaleRatioX;\n  result[3] = matrix[3];\n\n  result[4] = matrix[4] * scaleRatioY;\n  result[5] = matrix[5] * scaleRatioY;\n  result[6] = matrix[6] * scaleRatioY;\n  result[7] = matrix[7];\n\n  result[8] = matrix[8] * scaleRatioZ;\n  result[9] = matrix[9] * scaleRatioZ;\n  result[10] = matrix[10] * scaleRatioZ;\n  result[11] = matrix[11];\n\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n\n  return result;\n};\n\nconst scaleScratch2 = new Cartesian3();\n\n/**\n * Computes a new matrix that replaces the scale with the provided uniform scale.\n * This assumes the matrix is an affine transformation.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {number} scale The uniform scale that replaces the scale of the provided matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @see Matrix4.setScale\n * @see Matrix4.fromScale\n * @see Matrix4.fromUniformScale\n * @see Matrix4.multiplyByScale\n * @see Matrix4.multiplyByUniformScale\n * @see Matrix4.getScale\n */\nMatrix4.setUniformScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const existingScale = Matrix4.getScale(matrix, scaleScratch2);\n  const scaleRatioX = scale / existingScale.x;\n  const scaleRatioY = scale / existingScale.y;\n  const scaleRatioZ = scale / existingScale.z;\n\n  result[0] = matrix[0] * scaleRatioX;\n  result[1] = matrix[1] * scaleRatioX;\n  result[2] = matrix[2] * scaleRatioX;\n  result[3] = matrix[3];\n\n  result[4] = matrix[4] * scaleRatioY;\n  result[5] = matrix[5] * scaleRatioY;\n  result[6] = matrix[6] * scaleRatioY;\n  result[7] = matrix[7];\n\n  result[8] = matrix[8] * scaleRatioZ;\n  result[9] = matrix[9] * scaleRatioZ;\n  result[10] = matrix[10] * scaleRatioZ;\n  result[11] = matrix[11];\n\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n\n  return result;\n};\n\nconst scratchColumn = new Cartesian3();\n\n/**\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter\n *\n * @see Matrix4.multiplyByScale\n * @see Matrix4.multiplyByUniformScale\n * @see Matrix4.fromScale\n * @see Matrix4.fromUniformScale\n * @see Matrix4.setScale\n * @see Matrix4.setUniformScale\n */\nMatrix4.getScale = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = Cartesian3.magnitude(\n    Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn),\n  );\n  result.y = Cartesian3.magnitude(\n    Cartesian3.fromElements(matrix[4], matrix[5], matrix[6], scratchColumn),\n  );\n  result.z = Cartesian3.magnitude(\n    Cartesian3.fromElements(matrix[8], matrix[9], matrix[10], scratchColumn),\n  );\n  return result;\n};\n\nconst scaleScratch3 = new Cartesian3();\n\n/**\n * Computes the maximum scale assuming the matrix is an affine transformation.\n * The maximum scale is the maximum length of the column vectors in the upper-left\n * 3x3 matrix.\n *\n * @param {Matrix4} matrix The matrix.\n * @returns {number} The maximum scale.\n */\nMatrix4.getMaximumScale = function (matrix) {\n  Matrix4.getScale(matrix, scaleScratch3);\n  return Cartesian3.maximumComponent(scaleScratch3);\n};\n\nconst scaleScratch4 = new Cartesian3();\n\n/**\n * Sets the rotation assuming the matrix is an affine transformation.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Matrix3} rotation The rotation matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @see Matrix4.fromRotation\n * @see Matrix4.getRotation\n */\nMatrix4.setRotation = function (matrix, rotation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const scale = Matrix4.getScale(matrix, scaleScratch4);\n\n  result[0] = rotation[0] * scale.x;\n  result[1] = rotation[1] * scale.x;\n  result[2] = rotation[2] * scale.x;\n  result[3] = matrix[3];\n\n  result[4] = rotation[3] * scale.y;\n  result[5] = rotation[4] * scale.y;\n  result[6] = rotation[5] * scale.y;\n  result[7] = matrix[7];\n\n  result[8] = rotation[6] * scale.z;\n  result[9] = rotation[7] * scale.z;\n  result[10] = rotation[8] * scale.z;\n  result[11] = matrix[11];\n\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n\n  return result;\n};\n\nconst scaleScratch5 = new Cartesian3();\n\n/**\n * Extracts the rotation matrix assuming the matrix is an affine transformation.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @see Matrix4.setRotation\n * @see Matrix4.fromRotation\n */\nMatrix4.getRotation = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const scale = Matrix4.getScale(matrix, scaleScratch5);\n\n  result[0] = matrix[0] / scale.x;\n  result[1] = matrix[1] / scale.x;\n  result[2] = matrix[2] / scale.x;\n\n  result[3] = matrix[4] / scale.y;\n  result[4] = matrix[5] / scale.y;\n  result[5] = matrix[6] / scale.y;\n\n  result[6] = matrix[8] / scale.z;\n  result[7] = matrix[9] / scale.z;\n  result[8] = matrix[10] / scale.z;\n\n  return result;\n};\n\n/**\n * Computes the product of two matrices.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.multiply = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const left0 = left[0];\n  const left1 = left[1];\n  const left2 = left[2];\n  const left3 = left[3];\n  const left4 = left[4];\n  const left5 = left[5];\n  const left6 = left[6];\n  const left7 = left[7];\n  const left8 = left[8];\n  const left9 = left[9];\n  const left10 = left[10];\n  const left11 = left[11];\n  const left12 = left[12];\n  const left13 = left[13];\n  const left14 = left[14];\n  const left15 = left[15];\n\n  const right0 = right[0];\n  const right1 = right[1];\n  const right2 = right[2];\n  const right3 = right[3];\n  const right4 = right[4];\n  const right5 = right[5];\n  const right6 = right[6];\n  const right7 = right[7];\n  const right8 = right[8];\n  const right9 = right[9];\n  const right10 = right[10];\n  const right11 = right[11];\n  const right12 = right[12];\n  const right13 = right[13];\n  const right14 = right[14];\n  const right15 = right[15];\n\n  const column0Row0 =\n    left0 * right0 + left4 * right1 + left8 * right2 + left12 * right3;\n  const column0Row1 =\n    left1 * right0 + left5 * right1 + left9 * right2 + left13 * right3;\n  const column0Row2 =\n    left2 * right0 + left6 * right1 + left10 * right2 + left14 * right3;\n  const column0Row3 =\n    left3 * right0 + left7 * right1 + left11 * right2 + left15 * right3;\n\n  const column1Row0 =\n    left0 * right4 + left4 * right5 + left8 * right6 + left12 * right7;\n  const column1Row1 =\n    left1 * right4 + left5 * right5 + left9 * right6 + left13 * right7;\n  const column1Row2 =\n    left2 * right4 + left6 * right5 + left10 * right6 + left14 * right7;\n  const column1Row3 =\n    left3 * right4 + left7 * right5 + left11 * right6 + left15 * right7;\n\n  const column2Row0 =\n    left0 * right8 + left4 * right9 + left8 * right10 + left12 * right11;\n  const column2Row1 =\n    left1 * right8 + left5 * right9 + left9 * right10 + left13 * right11;\n  const column2Row2 =\n    left2 * right8 + left6 * right9 + left10 * right10 + left14 * right11;\n  const column2Row3 =\n    left3 * right8 + left7 * right9 + left11 * right10 + left15 * right11;\n\n  const column3Row0 =\n    left0 * right12 + left4 * right13 + left8 * right14 + left12 * right15;\n  const column3Row1 =\n    left1 * right12 + left5 * right13 + left9 * right14 + left13 * right15;\n  const column3Row2 =\n    left2 * right12 + left6 * right13 + left10 * right14 + left14 * right15;\n  const column3Row3 =\n    left3 * right12 + left7 * right13 + left11 * right14 + left15 * right15;\n\n  result[0] = column0Row0;\n  result[1] = column0Row1;\n  result[2] = column0Row2;\n  result[3] = column0Row3;\n  result[4] = column1Row0;\n  result[5] = column1Row1;\n  result[6] = column1Row2;\n  result[7] = column1Row3;\n  result[8] = column2Row0;\n  result[9] = column2Row1;\n  result[10] = column2Row2;\n  result[11] = column2Row3;\n  result[12] = column3Row0;\n  result[13] = column3Row1;\n  result[14] = column3Row2;\n  result[15] = column3Row3;\n  return result;\n};\n\n/**\n * Computes the sum of two matrices.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.add = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = left[0] + right[0];\n  result[1] = left[1] + right[1];\n  result[2] = left[2] + right[2];\n  result[3] = left[3] + right[3];\n  result[4] = left[4] + right[4];\n  result[5] = left[5] + right[5];\n  result[6] = left[6] + right[6];\n  result[7] = left[7] + right[7];\n  result[8] = left[8] + right[8];\n  result[9] = left[9] + right[9];\n  result[10] = left[10] + right[10];\n  result[11] = left[11] + right[11];\n  result[12] = left[12] + right[12];\n  result[13] = left[13] + right[13];\n  result[14] = left[14] + right[14];\n  result[15] = left[15] + right[15];\n  return result;\n};\n\n/**\n * Computes the difference of two matrices.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.subtract = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = left[0] - right[0];\n  result[1] = left[1] - right[1];\n  result[2] = left[2] - right[2];\n  result[3] = left[3] - right[3];\n  result[4] = left[4] - right[4];\n  result[5] = left[5] - right[5];\n  result[6] = left[6] - right[6];\n  result[7] = left[7] - right[7];\n  result[8] = left[8] - right[8];\n  result[9] = left[9] - right[9];\n  result[10] = left[10] - right[10];\n  result[11] = left[11] - right[11];\n  result[12] = left[12] - right[12];\n  result[13] = left[13] - right[13];\n  result[14] = left[14] - right[14];\n  result[15] = left[15] - right[15];\n  return result;\n};\n\n/**\n * Computes the product of two matrices assuming the matrices are affine transformation matrices,\n * where the upper left 3x3 elements are any matrix, and\n * the upper three elements in the fourth column are the translation.\n * The bottom row is assumed to be [0, 0, 0, 1].\n * The matrix is not verified to be in the proper form.\n * This method is faster than computing the product for general 4x4\n * matrices using {@link Matrix4.multiply}.\n *\n * @param {Matrix4} left The first matrix.\n * @param {Matrix4} right The second matrix.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * const m1 = new Cesium.Matrix4(1.0, 6.0, 7.0, 0.0, 2.0, 5.0, 8.0, 0.0, 3.0, 4.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0);\n * const m2 = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3(1.0, 1.0, 1.0));\n * const m3 = Cesium.Matrix4.multiplyTransformation(m1, m2, new Cesium.Matrix4());\n */\nMatrix4.multiplyTransformation = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const left0 = left[0];\n  const left1 = left[1];\n  const left2 = left[2];\n  const left4 = left[4];\n  const left5 = left[5];\n  const left6 = left[6];\n  const left8 = left[8];\n  const left9 = left[9];\n  const left10 = left[10];\n  const left12 = left[12];\n  const left13 = left[13];\n  const left14 = left[14];\n\n  const right0 = right[0];\n  const right1 = right[1];\n  const right2 = right[2];\n  const right4 = right[4];\n  const right5 = right[5];\n  const right6 = right[6];\n  const right8 = right[8];\n  const right9 = right[9];\n  const right10 = right[10];\n  const right12 = right[12];\n  const right13 = right[13];\n  const right14 = right[14];\n\n  const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\n  const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\n  const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\n\n  const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\n  const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\n  const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\n\n  const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\n  const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\n  const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\n\n  const column3Row0 =\n    left0 * right12 + left4 * right13 + left8 * right14 + left12;\n  const column3Row1 =\n    left1 * right12 + left5 * right13 + left9 * right14 + left13;\n  const column3Row2 =\n    left2 * right12 + left6 * right13 + left10 * right14 + left14;\n\n  result[0] = column0Row0;\n  result[1] = column0Row1;\n  result[2] = column0Row2;\n  result[3] = 0.0;\n  result[4] = column1Row0;\n  result[5] = column1Row1;\n  result[6] = column1Row2;\n  result[7] = 0.0;\n  result[8] = column2Row0;\n  result[9] = column2Row1;\n  result[10] = column2Row2;\n  result[11] = 0.0;\n  result[12] = column3Row0;\n  result[13] = column3Row1;\n  result[14] = column3Row2;\n  result[15] = 1.0;\n  return result;\n};\n\n/**\n * Multiplies a transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)\n * by a 3x3 rotation matrix.  This is an optimization\n * for <code>Matrix4.multiply(m, Matrix4.fromRotationTranslation(rotation), m);</code> with less allocations and arithmetic operations.\n *\n * @param {Matrix4} matrix The matrix on the left-hand side.\n * @param {Matrix3} rotation The 3x3 rotation matrix on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromRotationTranslation(rotation), m);\n * Cesium.Matrix4.multiplyByMatrix3(m, rotation, m);\n */\nMatrix4.multiplyByMatrix3 = function (matrix, rotation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"rotation\", rotation);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const left0 = matrix[0];\n  const left1 = matrix[1];\n  const left2 = matrix[2];\n  const left4 = matrix[4];\n  const left5 = matrix[5];\n  const left6 = matrix[6];\n  const left8 = matrix[8];\n  const left9 = matrix[9];\n  const left10 = matrix[10];\n\n  const right0 = rotation[0];\n  const right1 = rotation[1];\n  const right2 = rotation[2];\n  const right4 = rotation[3];\n  const right5 = rotation[4];\n  const right6 = rotation[5];\n  const right8 = rotation[6];\n  const right9 = rotation[7];\n  const right10 = rotation[8];\n\n  const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\n  const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\n  const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\n\n  const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\n  const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\n  const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\n\n  const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\n  const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\n  const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\n\n  result[0] = column0Row0;\n  result[1] = column0Row1;\n  result[2] = column0Row2;\n  result[3] = 0.0;\n  result[4] = column1Row0;\n  result[5] = column1Row1;\n  result[6] = column1Row2;\n  result[7] = 0.0;\n  result[8] = column2Row0;\n  result[9] = column2Row1;\n  result[10] = column2Row2;\n  result[11] = 0.0;\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n  return result;\n};\n\n/**\n * Multiplies a transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)\n * by an implicit translation matrix defined by a {@link Cartesian3}.  This is an optimization\n * for <code>Matrix4.multiply(m, Matrix4.fromTranslation(position), m);</code> with less allocations and arithmetic operations.\n *\n * @param {Matrix4} matrix The matrix on the left-hand side.\n * @param {Cartesian3} translation The translation on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromTranslation(position), m);\n * Cesium.Matrix4.multiplyByTranslation(m, position, m);\n */\nMatrix4.multiplyByTranslation = function (matrix, translation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"translation\", translation);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const x = translation.x;\n  const y = translation.y;\n  const z = translation.z;\n\n  const tx = x * matrix[0] + y * matrix[4] + z * matrix[8] + matrix[12];\n  const ty = x * matrix[1] + y * matrix[5] + z * matrix[9] + matrix[13];\n  const tz = x * matrix[2] + y * matrix[6] + z * matrix[10] + matrix[14];\n\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[3];\n  result[4] = matrix[4];\n  result[5] = matrix[5];\n  result[6] = matrix[6];\n  result[7] = matrix[7];\n  result[8] = matrix[8];\n  result[9] = matrix[9];\n  result[10] = matrix[10];\n  result[11] = matrix[11];\n  result[12] = tx;\n  result[13] = ty;\n  result[14] = tz;\n  result[15] = matrix[15];\n  return result;\n};\n\n/**\n * Multiplies an affine transformation matrix (with a bottom row of <code>[0.0, 0.0, 0.0, 1.0]</code>)\n * by an implicit non-uniform scale matrix. This is an optimization\n * for <code>Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);</code>, where\n * <code>m</code> must be an affine matrix.\n * This function performs fewer allocations and arithmetic operations.\n *\n * @param {Matrix4} matrix The affine matrix on the left-hand side.\n * @param {Cartesian3} scale The non-uniform scale on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromScale(scale), m);\n * Cesium.Matrix4.multiplyByScale(m, scale, m);\n *\n * @see Matrix4.multiplyByUniformScale\n * @see Matrix4.fromScale\n * @see Matrix4.fromUniformScale\n * @see Matrix4.setScale\n * @see Matrix4.setUniformScale\n * @see Matrix4.getScale\n */\nMatrix4.multiplyByScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const scaleX = scale.x;\n  const scaleY = scale.y;\n  const scaleZ = scale.z;\n\n  // Faster than Cartesian3.equals\n  if (scaleX === 1.0 && scaleY === 1.0 && scaleZ === 1.0) {\n    return Matrix4.clone(matrix, result);\n  }\n\n  result[0] = scaleX * matrix[0];\n  result[1] = scaleX * matrix[1];\n  result[2] = scaleX * matrix[2];\n  result[3] = matrix[3];\n\n  result[4] = scaleY * matrix[4];\n  result[5] = scaleY * matrix[5];\n  result[6] = scaleY * matrix[6];\n  result[7] = matrix[7];\n\n  result[8] = scaleZ * matrix[8];\n  result[9] = scaleZ * matrix[9];\n  result[10] = scaleZ * matrix[10];\n  result[11] = matrix[11];\n\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n\n  return result;\n};\n\n/**\n * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix.\n *\n * @param {Matrix4} matrix The matrix on the left-hand side.\n * @param {number} scale The uniform scale on the right-hand side.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromUniformScale(scale), m);\n * Cesium.Matrix4.multiplyByUniformScale(m, scale, m);\n *\n * @see Matrix4.multiplyByScale\n * @see Matrix4.fromScale\n * @see Matrix4.fromUniformScale\n * @see Matrix4.setScale\n * @see Matrix4.setUniformScale\n * @see Matrix4.getScale\n */\nMatrix4.multiplyByUniformScale = function (matrix, scale, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scale\", scale);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scale;\n  result[1] = matrix[1] * scale;\n  result[2] = matrix[2] * scale;\n  result[3] = matrix[3];\n\n  result[4] = matrix[4] * scale;\n  result[5] = matrix[5] * scale;\n  result[6] = matrix[6] * scale;\n  result[7] = matrix[7];\n\n  result[8] = matrix[8] * scale;\n  result[9] = matrix[9] * scale;\n  result[10] = matrix[10] * scale;\n  result[11] = matrix[11];\n\n  result[12] = matrix[12];\n  result[13] = matrix[13];\n  result[14] = matrix[14];\n  result[15] = matrix[15];\n\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a column vector.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian4} cartesian The vector.\n * @param {Cartesian4} result The object onto which to store the result.\n * @returns {Cartesian4} The modified result parameter.\n */\nMatrix4.multiplyByVector = function (matrix, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const vX = cartesian.x;\n  const vY = cartesian.y;\n  const vZ = cartesian.z;\n  const vW = cartesian.w;\n\n  const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12] * vW;\n  const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13] * vW;\n  const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14] * vW;\n  const w = matrix[3] * vX + matrix[7] * vY + matrix[11] * vZ + matrix[15] * vW;\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  result.w = w;\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a {@link Cartesian3}.  This is equivalent to calling {@link Matrix4.multiplyByVector}\n * with a {@link Cartesian4} with a <code>w</code> component of zero.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian3} cartesian The point.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @example\n * const p = new Cesium.Cartesian3(1.0, 2.0, 3.0);\n * const result = Cesium.Matrix4.multiplyByPointAsVector(matrix, p, new Cesium.Cartesian3());\n * // A shortcut for\n * //   Cartesian3 p = ...\n * //   Cesium.Matrix4.multiplyByVector(matrix, new Cesium.Cartesian4(p.x, p.y, p.z, 0.0), result);\n */\nMatrix4.multiplyByPointAsVector = function (matrix, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const vX = cartesian.x;\n  const vY = cartesian.y;\n  const vZ = cartesian.z;\n\n  const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ;\n  const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ;\n  const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ;\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector}\n * with a {@link Cartesian4} with a <code>w</code> component of 1, but returns a {@link Cartesian3} instead of a {@link Cartesian4}.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {Cartesian3} cartesian The point.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n *\n * @example\n * const p = new Cesium.Cartesian3(1.0, 2.0, 3.0);\n * const result = Cesium.Matrix4.multiplyByPoint(matrix, p, new Cesium.Cartesian3());\n */\nMatrix4.multiplyByPoint = function (matrix, cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const vX = cartesian.x;\n  const vY = cartesian.y;\n  const vZ = cartesian.z;\n\n  const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12];\n  const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13];\n  const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14];\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return result;\n};\n\n/**\n * Computes the product of a matrix and a scalar.\n *\n * @param {Matrix4} matrix The matrix.\n * @param {number} scalar The number to multiply by.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * //create a Matrix4 instance which is a scaled version of the supplied Matrix4\n * // m = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [18.0, 19.0, 20.0, 21.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n *\n * const a = Cesium.Matrix4.multiplyByScalar(m, -2, new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [-20.0, -22.0, -24.0, -26.0]\n * //     [-28.0, -30.0, -32.0, -34.0]\n * //     [-36.0, -38.0, -40.0, -42.0]\n * //     [-44.0, -46.0, -48.0, -50.0]\n */\nMatrix4.multiplyByScalar = function (matrix, scalar, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.number(\"scalar\", scalar);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0] * scalar;\n  result[1] = matrix[1] * scalar;\n  result[2] = matrix[2] * scalar;\n  result[3] = matrix[3] * scalar;\n  result[4] = matrix[4] * scalar;\n  result[5] = matrix[5] * scalar;\n  result[6] = matrix[6] * scalar;\n  result[7] = matrix[7] * scalar;\n  result[8] = matrix[8] * scalar;\n  result[9] = matrix[9] * scalar;\n  result[10] = matrix[10] * scalar;\n  result[11] = matrix[11] * scalar;\n  result[12] = matrix[12] * scalar;\n  result[13] = matrix[13] * scalar;\n  result[14] = matrix[14] * scalar;\n  result[15] = matrix[15] * scalar;\n  return result;\n};\n\n/**\n * Computes a negated copy of the provided matrix.\n *\n * @param {Matrix4} matrix The matrix to negate.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * //create a new Matrix4 instance which is a negation of a Matrix4\n * // m = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [18.0, 19.0, 20.0, 21.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n *\n * const a = Cesium.Matrix4.negate(m, new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [-10.0, -11.0, -12.0, -13.0]\n * //     [-14.0, -15.0, -16.0, -17.0]\n * //     [-18.0, -19.0, -20.0, -21.0]\n * //     [-22.0, -23.0, -24.0, -25.0]\n */\nMatrix4.negate = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = -matrix[0];\n  result[1] = -matrix[1];\n  result[2] = -matrix[2];\n  result[3] = -matrix[3];\n  result[4] = -matrix[4];\n  result[5] = -matrix[5];\n  result[6] = -matrix[6];\n  result[7] = -matrix[7];\n  result[8] = -matrix[8];\n  result[9] = -matrix[9];\n  result[10] = -matrix[10];\n  result[11] = -matrix[11];\n  result[12] = -matrix[12];\n  result[13] = -matrix[13];\n  result[14] = -matrix[14];\n  result[15] = -matrix[15];\n  return result;\n};\n\n/**\n * Computes the transpose of the provided matrix.\n *\n * @param {Matrix4} matrix The matrix to transpose.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @example\n * //returns transpose of a Matrix4\n * // m = [10.0, 11.0, 12.0, 13.0]\n * //     [14.0, 15.0, 16.0, 17.0]\n * //     [18.0, 19.0, 20.0, 21.0]\n * //     [22.0, 23.0, 24.0, 25.0]\n *\n * const a = Cesium.Matrix4.transpose(m, new Cesium.Matrix4());\n *\n * // m remains the same\n * // a = [10.0, 14.0, 18.0, 22.0]\n * //     [11.0, 15.0, 19.0, 23.0]\n * //     [12.0, 16.0, 20.0, 24.0]\n * //     [13.0, 17.0, 21.0, 25.0]\n */\nMatrix4.transpose = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const matrix1 = matrix[1];\n  const matrix2 = matrix[2];\n  const matrix3 = matrix[3];\n  const matrix6 = matrix[6];\n  const matrix7 = matrix[7];\n  const matrix11 = matrix[11];\n\n  result[0] = matrix[0];\n  result[1] = matrix[4];\n  result[2] = matrix[8];\n  result[3] = matrix[12];\n  result[4] = matrix1;\n  result[5] = matrix[5];\n  result[6] = matrix[9];\n  result[7] = matrix[13];\n  result[8] = matrix2;\n  result[9] = matrix6;\n  result[10] = matrix[10];\n  result[11] = matrix[14];\n  result[12] = matrix3;\n  result[13] = matrix7;\n  result[14] = matrix11;\n  result[15] = matrix[15];\n  return result;\n};\n\n/**\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\n *\n * @param {Matrix4} matrix The matrix with signed elements.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.abs = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = Math.abs(matrix[0]);\n  result[1] = Math.abs(matrix[1]);\n  result[2] = Math.abs(matrix[2]);\n  result[3] = Math.abs(matrix[3]);\n  result[4] = Math.abs(matrix[4]);\n  result[5] = Math.abs(matrix[5]);\n  result[6] = Math.abs(matrix[6]);\n  result[7] = Math.abs(matrix[7]);\n  result[8] = Math.abs(matrix[8]);\n  result[9] = Math.abs(matrix[9]);\n  result[10] = Math.abs(matrix[10]);\n  result[11] = Math.abs(matrix[11]);\n  result[12] = Math.abs(matrix[12]);\n  result[13] = Math.abs(matrix[13]);\n  result[14] = Math.abs(matrix[14]);\n  result[15] = Math.abs(matrix[15]);\n\n  return result;\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix4} [left] The first matrix.\n * @param {Matrix4} [right] The second matrix.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n *\n * @example\n * //compares two Matrix4 instances\n *\n * // a = [10.0, 14.0, 18.0, 22.0]\n * //     [11.0, 15.0, 19.0, 23.0]\n * //     [12.0, 16.0, 20.0, 24.0]\n * //     [13.0, 17.0, 21.0, 25.0]\n *\n * // b = [10.0, 14.0, 18.0, 22.0]\n * //     [11.0, 15.0, 19.0, 23.0]\n * //     [12.0, 16.0, 20.0, 24.0]\n * //     [13.0, 17.0, 21.0, 25.0]\n *\n * if(Cesium.Matrix4.equals(a,b)) {\n *      console.log(\"Both matrices are equal\");\n * } else {\n *      console.log(\"They are not equal\");\n * }\n *\n * //Prints \"Both matrices are equal\" on the console\n */\nMatrix4.equals = function (left, right) {\n  // Given that most matrices will be transformation matrices, the elements\n  // are tested in order such that the test is likely to fail as early\n  // as possible.  I _think_ this is just as friendly to the L1 cache\n  // as testing in index order.  It is certainty faster in practice.\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      // Translation\n      left[12] === right[12] &&\n      left[13] === right[13] &&\n      left[14] === right[14] &&\n      // Rotation/scale\n      left[0] === right[0] &&\n      left[1] === right[1] &&\n      left[2] === right[2] &&\n      left[4] === right[4] &&\n      left[5] === right[5] &&\n      left[6] === right[6] &&\n      left[8] === right[8] &&\n      left[9] === right[9] &&\n      left[10] === right[10] &&\n      // Bottom row\n      left[3] === right[3] &&\n      left[7] === right[7] &&\n      left[11] === right[11] &&\n      left[15] === right[15])\n  );\n};\n\n/**\n * Compares the provided matrices componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix4} [left] The first matrix.\n * @param {Matrix4} [right] The second matrix.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n *\n * @example\n * //compares two Matrix4 instances\n *\n * // a = [10.5, 14.5, 18.5, 22.5]\n * //     [11.5, 15.5, 19.5, 23.5]\n * //     [12.5, 16.5, 20.5, 24.5]\n * //     [13.5, 17.5, 21.5, 25.5]\n *\n * // b = [10.0, 14.0, 18.0, 22.0]\n * //     [11.0, 15.0, 19.0, 23.0]\n * //     [12.0, 16.0, 20.0, 24.0]\n * //     [13.0, 17.0, 21.0, 25.0]\n *\n * if(Cesium.Matrix4.equalsEpsilon(a,b,0.1)){\n *      console.log(\"Difference between both the matrices is less than 0.1\");\n * } else {\n *      console.log(\"Difference between both the matrices is not less than 0.1\");\n * }\n *\n * //Prints \"Difference between both the matrices is not less than 0.1\" on the console\n */\nMatrix4.equalsEpsilon = function (left, right, epsilon) {\n  epsilon = epsilon ?? 0;\n\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(left[0] - right[0]) <= epsilon &&\n      Math.abs(left[1] - right[1]) <= epsilon &&\n      Math.abs(left[2] - right[2]) <= epsilon &&\n      Math.abs(left[3] - right[3]) <= epsilon &&\n      Math.abs(left[4] - right[4]) <= epsilon &&\n      Math.abs(left[5] - right[5]) <= epsilon &&\n      Math.abs(left[6] - right[6]) <= epsilon &&\n      Math.abs(left[7] - right[7]) <= epsilon &&\n      Math.abs(left[8] - right[8]) <= epsilon &&\n      Math.abs(left[9] - right[9]) <= epsilon &&\n      Math.abs(left[10] - right[10]) <= epsilon &&\n      Math.abs(left[11] - right[11]) <= epsilon &&\n      Math.abs(left[12] - right[12]) <= epsilon &&\n      Math.abs(left[13] - right[13]) <= epsilon &&\n      Math.abs(left[14] - right[14]) <= epsilon &&\n      Math.abs(left[15] - right[15]) <= epsilon)\n  );\n};\n\n/**\n * Gets the translation portion of the provided matrix, assuming the matrix is an affine transformation matrix.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nMatrix4.getTranslation = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = matrix[12];\n  result.y = matrix[13];\n  result.z = matrix[14];\n  return result;\n};\n\n/**\n * Gets the upper left 3x3 matrix of the provided matrix.\n *\n * @param {Matrix4} matrix The matrix to use.\n * @param {Matrix3} result The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter.\n *\n * @example\n * // returns a Matrix3 instance from a Matrix4 instance\n *\n * // m = [10.0, 14.0, 18.0, 22.0]\n * //     [11.0, 15.0, 19.0, 23.0]\n * //     [12.0, 16.0, 20.0, 24.0]\n * //     [13.0, 17.0, 21.0, 25.0]\n *\n * const b = new Cesium.Matrix3();\n * Cesium.Matrix4.getMatrix3(m,b);\n *\n * // b = [10.0, 14.0, 18.0]\n * //     [11.0, 15.0, 19.0]\n * //     [12.0, 16.0, 20.0]\n */\nMatrix4.getMatrix3 = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result[0] = matrix[0];\n  result[1] = matrix[1];\n  result[2] = matrix[2];\n  result[3] = matrix[4];\n  result[4] = matrix[5];\n  result[5] = matrix[6];\n  result[6] = matrix[8];\n  result[7] = matrix[9];\n  result[8] = matrix[10];\n  return result;\n};\n\nconst scratchInverseRotation = new Matrix3();\nconst scratchMatrix3Zero = new Matrix3();\nconst scratchBottomRow = new Cartesian4();\nconst scratchExpectedBottomRow = new Cartesian4(0.0, 0.0, 0.0, 1.0);\n\n/**\n * Computes the inverse of the provided matrix using Cramers Rule.\n * If the determinant is zero, the matrix can not be inverted, and an exception is thrown.\n * If the matrix is a proper rigid transformation, it is more efficient\n * to invert it with {@link Matrix4.inverseTransformation}.\n *\n * @param {Matrix4} matrix The matrix to invert.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n *\n * @exception {RuntimeError} matrix is not invertible because its determinate is zero.\n */\nMatrix4.inverse = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n  //\n  // Ported from:\n  //   ftp://download.intel.com/design/PentiumIII/sml/24504301.pdf\n  //\n  const src0 = matrix[0];\n  const src1 = matrix[4];\n  const src2 = matrix[8];\n  const src3 = matrix[12];\n  const src4 = matrix[1];\n  const src5 = matrix[5];\n  const src6 = matrix[9];\n  const src7 = matrix[13];\n  const src8 = matrix[2];\n  const src9 = matrix[6];\n  const src10 = matrix[10];\n  const src11 = matrix[14];\n  const src12 = matrix[3];\n  const src13 = matrix[7];\n  const src14 = matrix[11];\n  const src15 = matrix[15];\n\n  // calculate pairs for first 8 elements (cofactors)\n  let tmp0 = src10 * src15;\n  let tmp1 = src11 * src14;\n  let tmp2 = src9 * src15;\n  let tmp3 = src11 * src13;\n  let tmp4 = src9 * src14;\n  let tmp5 = src10 * src13;\n  let tmp6 = src8 * src15;\n  let tmp7 = src11 * src12;\n  let tmp8 = src8 * src14;\n  let tmp9 = src10 * src12;\n  let tmp10 = src8 * src13;\n  let tmp11 = src9 * src12;\n\n  // calculate first 8 elements (cofactors)\n  const dst0 =\n    tmp0 * src5 +\n    tmp3 * src6 +\n    tmp4 * src7 -\n    (tmp1 * src5 + tmp2 * src6 + tmp5 * src7);\n  const dst1 =\n    tmp1 * src4 +\n    tmp6 * src6 +\n    tmp9 * src7 -\n    (tmp0 * src4 + tmp7 * src6 + tmp8 * src7);\n  const dst2 =\n    tmp2 * src4 +\n    tmp7 * src5 +\n    tmp10 * src7 -\n    (tmp3 * src4 + tmp6 * src5 + tmp11 * src7);\n  const dst3 =\n    tmp5 * src4 +\n    tmp8 * src5 +\n    tmp11 * src6 -\n    (tmp4 * src4 + tmp9 * src5 + tmp10 * src6);\n  const dst4 =\n    tmp1 * src1 +\n    tmp2 * src2 +\n    tmp5 * src3 -\n    (tmp0 * src1 + tmp3 * src2 + tmp4 * src3);\n  const dst5 =\n    tmp0 * src0 +\n    tmp7 * src2 +\n    tmp8 * src3 -\n    (tmp1 * src0 + tmp6 * src2 + tmp9 * src3);\n  const dst6 =\n    tmp3 * src0 +\n    tmp6 * src1 +\n    tmp11 * src3 -\n    (tmp2 * src0 + tmp7 * src1 + tmp10 * src3);\n  const dst7 =\n    tmp4 * src0 +\n    tmp9 * src1 +\n    tmp10 * src2 -\n    (tmp5 * src0 + tmp8 * src1 + tmp11 * src2);\n\n  // calculate pairs for second 8 elements (cofactors)\n  tmp0 = src2 * src7;\n  tmp1 = src3 * src6;\n  tmp2 = src1 * src7;\n  tmp3 = src3 * src5;\n  tmp4 = src1 * src6;\n  tmp5 = src2 * src5;\n  tmp6 = src0 * src7;\n  tmp7 = src3 * src4;\n  tmp8 = src0 * src6;\n  tmp9 = src2 * src4;\n  tmp10 = src0 * src5;\n  tmp11 = src1 * src4;\n\n  // calculate second 8 elements (cofactors)\n  const dst8 =\n    tmp0 * src13 +\n    tmp3 * src14 +\n    tmp4 * src15 -\n    (tmp1 * src13 + tmp2 * src14 + tmp5 * src15);\n  const dst9 =\n    tmp1 * src12 +\n    tmp6 * src14 +\n    tmp9 * src15 -\n    (tmp0 * src12 + tmp7 * src14 + tmp8 * src15);\n  const dst10 =\n    tmp2 * src12 +\n    tmp7 * src13 +\n    tmp10 * src15 -\n    (tmp3 * src12 + tmp6 * src13 + tmp11 * src15);\n  const dst11 =\n    tmp5 * src12 +\n    tmp8 * src13 +\n    tmp11 * src14 -\n    (tmp4 * src12 + tmp9 * src13 + tmp10 * src14);\n  const dst12 =\n    tmp2 * src10 +\n    tmp5 * src11 +\n    tmp1 * src9 -\n    (tmp4 * src11 + tmp0 * src9 + tmp3 * src10);\n  const dst13 =\n    tmp8 * src11 +\n    tmp0 * src8 +\n    tmp7 * src10 -\n    (tmp6 * src10 + tmp9 * src11 + tmp1 * src8);\n  const dst14 =\n    tmp6 * src9 +\n    tmp11 * src11 +\n    tmp3 * src8 -\n    (tmp10 * src11 + tmp2 * src8 + tmp7 * src9);\n  const dst15 =\n    tmp10 * src10 +\n    tmp4 * src8 +\n    tmp9 * src9 -\n    (tmp8 * src9 + tmp11 * src10 + tmp5 * src8);\n\n  // calculate determinant\n  let det = src0 * dst0 + src1 * dst1 + src2 * dst2 + src3 * dst3;\n\n  if (Math.abs(det) < CesiumMath.EPSILON21) {\n    // Special case for a zero scale matrix that can occur, for example,\n    // when a model's node has a [0, 0, 0] scale.\n    if (\n      Matrix3.equalsEpsilon(\n        Matrix4.getMatrix3(matrix, scratchInverseRotation),\n        scratchMatrix3Zero,\n        CesiumMath.EPSILON7,\n      ) &&\n      Cartesian4.equals(\n        Matrix4.getRow(matrix, 3, scratchBottomRow),\n        scratchExpectedBottomRow,\n      )\n    ) {\n      result[0] = 0.0;\n      result[1] = 0.0;\n      result[2] = 0.0;\n      result[3] = 0.0;\n      result[4] = 0.0;\n      result[5] = 0.0;\n      result[6] = 0.0;\n      result[7] = 0.0;\n      result[8] = 0.0;\n      result[9] = 0.0;\n      result[10] = 0.0;\n      result[11] = 0.0;\n      result[12] = -matrix[12];\n      result[13] = -matrix[13];\n      result[14] = -matrix[14];\n      result[15] = 1.0;\n      return result;\n    }\n\n    throw new RuntimeError(\n      \"matrix is not invertible because its determinate is zero.\",\n    );\n  }\n\n  // calculate matrix inverse\n  det = 1.0 / det;\n\n  result[0] = dst0 * det;\n  result[1] = dst1 * det;\n  result[2] = dst2 * det;\n  result[3] = dst3 * det;\n  result[4] = dst4 * det;\n  result[5] = dst5 * det;\n  result[6] = dst6 * det;\n  result[7] = dst7 * det;\n  result[8] = dst8 * det;\n  result[9] = dst9 * det;\n  result[10] = dst10 * det;\n  result[11] = dst11 * det;\n  result[12] = dst12 * det;\n  result[13] = dst13 * det;\n  result[14] = dst14 * det;\n  result[15] = dst15 * det;\n  return result;\n};\n\n/**\n * Computes the inverse of the provided matrix assuming it is a proper rigid matrix,\n * where the upper left 3x3 elements are a rotation matrix,\n * and the upper three elements in the fourth column are the translation.\n * The bottom row is assumed to be [0, 0, 0, 1].\n * The matrix is not verified to be in the proper form.\n * This method is faster than computing the inverse for a general 4x4\n * matrix using {@link Matrix4.inverse}.\n *\n * @param {Matrix4} matrix The matrix to invert.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.inverseTransformation = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  //This function is an optimized version of the below 4 lines.\n  //const rT = Matrix3.transpose(Matrix4.getMatrix3(matrix));\n  //const rTN = Matrix3.negate(rT);\n  //const rTT = Matrix3.multiplyByVector(rTN, Matrix4.getTranslation(matrix));\n  //return Matrix4.fromRotationTranslation(rT, rTT, result);\n\n  const matrix0 = matrix[0];\n  const matrix1 = matrix[1];\n  const matrix2 = matrix[2];\n  const matrix4 = matrix[4];\n  const matrix5 = matrix[5];\n  const matrix6 = matrix[6];\n  const matrix8 = matrix[8];\n  const matrix9 = matrix[9];\n  const matrix10 = matrix[10];\n\n  const vX = matrix[12];\n  const vY = matrix[13];\n  const vZ = matrix[14];\n\n  const x = -matrix0 * vX - matrix1 * vY - matrix2 * vZ;\n  const y = -matrix4 * vX - matrix5 * vY - matrix6 * vZ;\n  const z = -matrix8 * vX - matrix9 * vY - matrix10 * vZ;\n\n  result[0] = matrix0;\n  result[1] = matrix4;\n  result[2] = matrix8;\n  result[3] = 0.0;\n  result[4] = matrix1;\n  result[5] = matrix5;\n  result[6] = matrix9;\n  result[7] = 0.0;\n  result[8] = matrix2;\n  result[9] = matrix6;\n  result[10] = matrix10;\n  result[11] = 0.0;\n  result[12] = x;\n  result[13] = y;\n  result[14] = z;\n  result[15] = 1.0;\n  return result;\n};\n\nconst scratchTransposeMatrix = new Matrix4();\n\n/**\n * Computes the inverse transpose of a matrix.\n *\n * @param {Matrix4} matrix The matrix to transpose and invert.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter.\n */\nMatrix4.inverseTranspose = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  return Matrix4.inverse(\n    Matrix4.transpose(matrix, scratchTransposeMatrix),\n    result,\n  );\n};\n\n/**\n * An immutable Matrix4 instance initialized to the identity matrix.\n *\n * @type {Matrix4}\n * @constant\n */\nMatrix4.IDENTITY = Object.freeze(\n  new Matrix4(\n    1.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    1.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    1.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    1.0,\n  ),\n);\n\n/**\n * An immutable Matrix4 instance initialized to the zero matrix.\n *\n * @type {Matrix4}\n * @constant\n */\nMatrix4.ZERO = Object.freeze(\n  new Matrix4(\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n  ),\n);\n\n/**\n * The index into Matrix4 for column 0, row 0.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN0ROW0 = 0;\n\n/**\n * The index into Matrix4 for column 0, row 1.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN0ROW1 = 1;\n\n/**\n * The index into Matrix4 for column 0, row 2.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN0ROW2 = 2;\n\n/**\n * The index into Matrix4 for column 0, row 3.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN0ROW3 = 3;\n\n/**\n * The index into Matrix4 for column 1, row 0.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN1ROW0 = 4;\n\n/**\n * The index into Matrix4 for column 1, row 1.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN1ROW1 = 5;\n\n/**\n * The index into Matrix4 for column 1, row 2.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN1ROW2 = 6;\n\n/**\n * The index into Matrix4 for column 1, row 3.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN1ROW3 = 7;\n\n/**\n * The index into Matrix4 for column 2, row 0.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN2ROW0 = 8;\n\n/**\n * The index into Matrix4 for column 2, row 1.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN2ROW1 = 9;\n\n/**\n * The index into Matrix4 for column 2, row 2.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN2ROW2 = 10;\n\n/**\n * The index into Matrix4 for column 2, row 3.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN2ROW3 = 11;\n\n/**\n * The index into Matrix4 for column 3, row 0.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN3ROW0 = 12;\n\n/**\n * The index into Matrix4 for column 3, row 1.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN3ROW1 = 13;\n\n/**\n * The index into Matrix4 for column 3, row 2.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN3ROW2 = 14;\n\n/**\n * The index into Matrix4 for column 3, row 3.\n *\n * @type {number}\n * @constant\n */\nMatrix4.COLUMN3ROW3 = 15;\n\nObject.defineProperties(Matrix4.prototype, {\n  /**\n   * Gets the number of items in the collection.\n   * @memberof Matrix4.prototype\n   *\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      return Matrix4.packedLength;\n    },\n  },\n});\n\n/**\n * Duplicates the provided Matrix4 instance.\n *\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\n */\nMatrix4.prototype.clone = function (result) {\n  return Matrix4.clone(this, result);\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Matrix4} [right] The right hand side matrix.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nMatrix4.prototype.equals = function (right) {\n  return Matrix4.equals(this, right);\n};\n\n/**\n * @private\n */\nMatrix4.equalsArray = function (matrix, array, offset) {\n  return (\n    matrix[0] === array[offset] &&\n    matrix[1] === array[offset + 1] &&\n    matrix[2] === array[offset + 2] &&\n    matrix[3] === array[offset + 3] &&\n    matrix[4] === array[offset + 4] &&\n    matrix[5] === array[offset + 5] &&\n    matrix[6] === array[offset + 6] &&\n    matrix[7] === array[offset + 7] &&\n    matrix[8] === array[offset + 8] &&\n    matrix[9] === array[offset + 9] &&\n    matrix[10] === array[offset + 10] &&\n    matrix[11] === array[offset + 11] &&\n    matrix[12] === array[offset + 12] &&\n    matrix[13] === array[offset + 13] &&\n    matrix[14] === array[offset + 14] &&\n    matrix[15] === array[offset + 15]\n  );\n};\n\n/**\n * Compares this matrix to the provided matrix componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Matrix4} [right] The right hand side matrix.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nMatrix4.prototype.equalsEpsilon = function (right, epsilon) {\n  return Matrix4.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Computes a string representing this Matrix with each row being\n * on a separate line and in the format '(column0, column1, column2, column3)'.\n *\n * @returns {string} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2, column3)'.\n */\nMatrix4.prototype.toString = function () {\n  return (\n    `(${this[0]}, ${this[4]}, ${this[8]}, ${this[12]})\\n` +\n    `(${this[1]}, ${this[5]}, ${this[9]}, ${this[13]})\\n` +\n    `(${this[2]}, ${this[6]}, ${this[10]}, ${this[14]})\\n` +\n    `(${this[3]}, ${this[7]}, ${this[11]}, ${this[15]})`\n  );\n};\nexport default Matrix4;\n","import Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Spline from \"./Spline.js\";\n\n/**\n * A spline that linearly interpolates over an array of weight values used by morph targets.\n *\n * @alias MorphWeightSpline\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n *                The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {number[]} options.weights The array of floating-point control weights given. The weights are ordered such\n *                that all weights for the targets are given in chronological order and order in which they appear in\n *                the glTF from which the morph targets come. This means for 2 targets, weights = [w(0,0), w(0,1), w(1,0), w(1,1) ...]\n *                where i and j in w(i,j) are the time indices and target indices, respectively.\n *\n * @exception {DeveloperError} weights.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be a factor of weights.length.\n *\n *\n * @example\n * const times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];\n * const weights = [0.0, 1.0, 0.25, 0.75, 0.5, 0.5, 0.75, 0.25, 1.0, 0.0]; //Two targets\n * const spline = new Cesium.WeightSpline({\n *     times : times,\n *     weights : weights\n * });\n *\n * const p0 = spline.evaluate(times[0]);\n *\n * @see ConstantSpline\n * @see SteppedSpline\n * @see LinearSpline\n * @see HermiteSpline\n * @see CatmullRomSpline\n * @see QuaternionSpline\n */\nfunction MorphWeightSpline(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const weights = options.weights;\n  const times = options.times;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"weights\", weights);\n  Check.defined(\"times\", times);\n  Check.typeOf.number.greaterThanOrEquals(\"weights.length\", weights.length, 3);\n  if (weights.length % times.length !== 0) {\n    throw new DeveloperError(\n      \"times.length must be a factor of weights.length.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._times = times;\n  this._weights = weights;\n  this._count = weights.length / times.length;\n\n  this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(MorphWeightSpline.prototype, {\n  /**\n   * An array of times for the control weights.\n   *\n   * @memberof WeightSpline.prototype\n   *\n   * @type {number[]}\n   * @readonly\n   */\n  times: {\n    get: function () {\n      return this._times;\n    },\n  },\n\n  /**\n   * An array of floating-point array control weights.\n   *\n   * @memberof WeightSpline.prototype\n   *\n   * @type {number[]}\n   * @readonly\n   */\n  weights: {\n    get: function () {\n      return this._weights;\n    },\n  },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {number} time The time.\n * @returns {number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nMorphWeightSpline.prototype.findTimeInterval =\n  Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around to the updated animation.\n */\nMorphWeightSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nMorphWeightSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {number[]} [result] The object onto which to store the result.\n * @returns {number[]} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nMorphWeightSpline.prototype.evaluate = function (time, result) {\n  const weights = this.weights;\n  const times = this.times;\n\n  const i = (this._lastTimeIndex = this.findTimeInterval(\n    time,\n    this._lastTimeIndex,\n  ));\n  const u = (time - times[i]) / (times[i + 1] - times[i]);\n\n  if (!defined(result)) {\n    result = new Array(this._count);\n  }\n\n  for (let j = 0; j < this._count; j++) {\n    const index = i * this._count + j;\n    result[j] = weights[index] * (1.0 - u) + weights[index + this._count] * u;\n  }\n\n  return result;\n};\nexport default MorphWeightSpline;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Morton Order (aka Z-Order Curve) helper functions.\n * @see {@link https://en.wikipedia.org/wiki/Z-order_curve}\n *\n * @namespace MortonOrder\n * @private\n */\nconst MortonOrder = {};\n\n/**\n * Inserts one 0 bit of spacing between a number's bits. This is the opposite of removeOneSpacing.\n *\n * Example:\n *  input: 6\n *  input (binary):  110\n *  output (binary): 10100\n *                    ^ ^ (added)\n *  output: 20\n *\n * @private\n * @param {number} v A 16-bit unsigned integer.\n * @returns {number} A 32-bit unsigned integer.\n * @see {@link https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/}\n * @private\n */\nfunction insertOneSpacing(v) {\n  v = (v ^ (v << 8)) & 0x00ff00ff;\n  v = (v ^ (v << 4)) & 0x0f0f0f0f;\n  v = (v ^ (v << 2)) & 0x33333333;\n  v = (v ^ (v << 1)) & 0x55555555;\n  return v;\n}\n\n/**\n * Inserts two 0 bits of spacing between a number's bits. This is the opposite of removeTwoSpacing.\n *\n * Example:\n *  input: 6\n *  input (binary):  110\n *  output (binary): 1001000\n *                    ^^ ^^ (added)\n *  output: 72\n *\n * @private\n * @param {number} v A 10-bit unsigned integer.\n * @returns {number} A 30-bit unsigned integer.\n * @see {@link https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/}\n */\nfunction insertTwoSpacing(v) {\n  v = (v ^ (v << 16)) & 0x030000ff;\n  v = (v ^ (v << 8)) & 0x0300f00f;\n  v = (v ^ (v << 4)) & 0x030c30c3;\n  v = (v ^ (v << 2)) & 0x09249249;\n  return v;\n}\n\n/**\n * Removes one bit of spacing between bits. This is the opposite of insertOneSpacing.\n *\n * Example:\n *  input: 20\n *  input (binary):  10100\n *                    ^ ^ (removed)\n *  output (binary): 110\n *  output: 6\n *\n * @private\n * @param {number} v A 32-bit unsigned integer.\n * @returns {number} A 16-bit unsigned integer.\n * @see {@link https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/}\n */\nfunction removeOneSpacing(v) {\n  v &= 0x55555555;\n  v = (v ^ (v >> 1)) & 0x33333333;\n  v = (v ^ (v >> 2)) & 0x0f0f0f0f;\n  v = (v ^ (v >> 4)) & 0x00ff00ff;\n  v = (v ^ (v >> 8)) & 0x0000ffff;\n  return v;\n}\n\n/**\n * Removes two bits of spacing between bits. This is the opposite of insertTwoSpacing.\n *\n * Example:\n *  input: 72\n *  input (binary):  1001000\n *                    ^^ ^^ (removed)\n *  output (binary): 110\n *  output: 6\n *\n * @private\n * @param {number} v A 30-bit unsigned integer.\n * @returns {number} A 10-bit unsigned integer.\n * @see {@link https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/}\n */\nfunction removeTwoSpacing(v) {\n  v &= 0x09249249;\n  v = (v ^ (v >> 2)) & 0x030c30c3;\n  v = (v ^ (v >> 4)) & 0x0300f00f;\n  v = (v ^ (v >> 8)) & 0xff0000ff;\n  v = (v ^ (v >> 16)) & 0x000003ff;\n  return v;\n}\n\n/**\n * Computes the Morton index from 2D coordinates. This is equivalent to interleaving their bits.\n * The inputs must be 16-bit unsigned integers (resulting in 32-bit Morton index) due to 32-bit bitwise operator limitation in JavaScript.\n *\n * @param {number} x The X coordinate in the range [0, (2^16)-1].\n * @param {number} y The Y coordinate in the range [0, (2^16)-1].\n * @returns {number} The Morton index.\n * @private\n */\nMortonOrder.encode2D = function (x, y) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  if (x < 0 || x > 65535 || y < 0 || y > 65535) {\n    throw new DeveloperError(\"inputs must be 16-bit unsigned integers\");\n  }\n  //>>includeEnd('debug');\n\n  // Note: JavaScript bitwise operations return signed 32-bit integers, so the\n  // final result needs to be reintepreted as an unsigned integer using >>> 0.\n  // This is not needed for encode3D because the result is guaranteed to be at most\n  // 30 bits and thus will always be interpreted as an unsigned value.\n  return (insertOneSpacing(x) | (insertOneSpacing(y) << 1)) >>> 0;\n};\n\n/**\n * Computes the 2D coordinates from a Morton index. This is equivalent to deinterleaving their bits.\n * The input must be a 32-bit unsigned integer (resulting in 16 bits per coordinate) due to 32-bit bitwise operator limitation in JavaScript.\n *\n * @param {number} mortonIndex The Morton index in the range [0, (2^32)-1].\n * @param {number[]} [result] The array onto which to store the result.\n * @returns {number[]} An array containing the 2D coordinates correspoding to the Morton index.\n * @private\n */\nMortonOrder.decode2D = function (mortonIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"mortonIndex\", mortonIndex);\n  if (mortonIndex < 0 || mortonIndex > 4294967295) {\n    throw new DeveloperError(\"input must be a 32-bit unsigned integer\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Array(2);\n  }\n\n  result[0] = removeOneSpacing(mortonIndex);\n  result[1] = removeOneSpacing(mortonIndex >> 1);\n  return result;\n};\n\n/**\n * Computes the Morton index from 3D coordinates. This is equivalent to interleaving their bits.\n * The inputs must be 10-bit unsigned integers (resulting in 30-bit Morton index) due to 32-bit bitwise operator limitation in JavaScript.\n *\n * @param {number} x The X coordinate in the range [0, (2^10)-1].\n * @param {number} y The Y coordinate in the range [0, (2^10)-1].\n * @param {number} z The Z coordinate in the range [0, (2^10)-1].\n * @returns {number} The Morton index.\n * @private\n */\nMortonOrder.encode3D = function (x, y, z) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  Check.typeOf.number(\"z\", z);\n  if (x < 0 || x > 1023 || y < 0 || y > 1023 || z < 0 || z > 1023) {\n    throw new DeveloperError(\"inputs must be 10-bit unsigned integers\");\n  }\n  //>>includeEnd('debug');\n\n  return (\n    insertTwoSpacing(x) |\n    (insertTwoSpacing(y) << 1) |\n    (insertTwoSpacing(z) << 2)\n  );\n};\n\n/**\n * Computes the 3D coordinates from a Morton index. This is equivalent to deinterleaving their bits.\n * The input must be a 30-bit unsigned integer (resulting in 10 bits per coordinate) due to 32-bit bitwise operator limitation in JavaScript.\n *\n * @param {number} mortonIndex The Morton index in the range [0, (2^30)-1].\n * @param {number[]} [result] The array onto which to store the result.\n * @returns {number[]} An array containing the 3D coordinates corresponding to the Morton index.\n * @private\n */\nMortonOrder.decode3D = function (mortonIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"mortonIndex\", mortonIndex);\n  if (mortonIndex < 0 || mortonIndex > 1073741823) {\n    throw new DeveloperError(\"input must be a 30-bit unsigned integer\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Array(3);\n  }\n\n  result[0] = removeTwoSpacing(mortonIndex);\n  result[1] = removeTwoSpacing(mortonIndex >> 1);\n  result[2] = removeTwoSpacing(mortonIndex >> 2);\n  return result;\n};\n\nexport default MortonOrder;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Represents a scalar value's lower and upper bound at a near distance and far distance in eye space.\n * @alias NearFarScalar\n * @constructor\n *\n * @param {number} [near=0.0] The lower bound of the camera range.\n * @param {number} [nearValue=0.0] The value at the lower bound of the camera range.\n * @param {number} [far=1.0] The upper bound of the camera range.\n * @param {number} [farValue=0.0] The value at the upper bound of the camera range.\n *\n * @see Packable\n */\nfunction NearFarScalar(near, nearValue, far, farValue) {\n  /**\n   * The lower bound of the camera range.\n   * @type {number}\n   * @default 0.0\n   */\n  this.near = near ?? 0.0;\n  /**\n   * The value at the lower bound of the camera range.\n   * @type {number}\n   * @default 0.0\n   */\n  this.nearValue = nearValue ?? 0.0;\n  /**\n   * The upper bound of the camera range.\n   * @type {number}\n   * @default 1.0\n   */\n  this.far = far ?? 1.0;\n  /**\n   * The value at the upper bound of the camera range.\n   * @type {number}\n   * @default 0.0\n   */\n  this.farValue = farValue ?? 0.0;\n}\n\n/**\n * Duplicates a NearFarScalar instance.\n *\n * @param {NearFarScalar} nearFarScalar The NearFarScalar to duplicate.\n * @param {NearFarScalar} [result] The object onto which to store the result.\n * @returns {NearFarScalar} The modified result parameter or a new NearFarScalar instance if one was not provided. (Returns undefined if nearFarScalar is undefined)\n */\nNearFarScalar.clone = function (nearFarScalar, result) {\n  if (!defined(nearFarScalar)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new NearFarScalar(\n      nearFarScalar.near,\n      nearFarScalar.nearValue,\n      nearFarScalar.far,\n      nearFarScalar.farValue,\n    );\n  }\n\n  result.near = nearFarScalar.near;\n  result.nearValue = nearFarScalar.nearValue;\n  result.far = nearFarScalar.far;\n  result.farValue = nearFarScalar.farValue;\n  return result;\n};\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nNearFarScalar.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {NearFarScalar} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nNearFarScalar.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.near;\n  array[startingIndex++] = value.nearValue;\n  array[startingIndex++] = value.far;\n  array[startingIndex] = value.farValue;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {NearFarScalar} [result] The object into which to store the result.\n * @returns {NearFarScalar} The modified result parameter or a new NearFarScalar instance if one was not provided.\n */\nNearFarScalar.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new NearFarScalar();\n  }\n  result.near = array[startingIndex++];\n  result.nearValue = array[startingIndex++];\n  result.far = array[startingIndex++];\n  result.farValue = array[startingIndex];\n  return result;\n};\n\n/**\n * Compares the provided NearFarScalar and returns <code>true</code> if they are equal,\n * <code>false</code> otherwise.\n *\n * @param {NearFarScalar} [left] The first NearFarScalar.\n * @param {NearFarScalar} [right] The second NearFarScalar.\n * @returns {boolean} <code>true</code> if left and right are equal; otherwise <code>false</code>.\n */\nNearFarScalar.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.near === right.near &&\n      left.nearValue === right.nearValue &&\n      left.far === right.far &&\n      left.farValue === right.farValue)\n  );\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {NearFarScalar} [result] The object onto which to store the result.\n * @returns {NearFarScalar} The modified result parameter or a new NearFarScalar instance if one was not provided.\n */\nNearFarScalar.prototype.clone = function (result) {\n  return NearFarScalar.clone(this, result);\n};\n\n/**\n * Compares this instance to the provided NearFarScalar and returns <code>true</code> if they are equal,\n * <code>false</code> otherwise.\n *\n * @param {NearFarScalar} [right] The right hand side NearFarScalar.\n * @returns {boolean} <code>true</code> if left and right are equal; otherwise <code>false</code>.\n */\nNearFarScalar.prototype.equals = function (right) {\n  return NearFarScalar.equals(this, right);\n};\nexport default NearFarScalar;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Visibility from \"./Visibility.js\";\n\n/**\n * Creates an Occluder derived from an object's position and radius, as well as the camera position.\n * The occluder can be used to determine whether or not other objects are visible or hidden behind the\n * visible horizon defined by the occluder and camera position.\n *\n * @alias Occluder\n *\n * @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.\n * @param {Cartesian3} cameraPosition The coordinate of the viewer/camera.\n *\n * @constructor\n *\n * @example\n * // Construct an occluder one unit away from the origin with a radius of one.\n * const cameraPosition = Cesium.Cartesian3.ZERO;\n * const occluderBoundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 1);\n * const occluder = new Cesium.Occluder(occluderBoundingSphere, cameraPosition);\n */\nfunction Occluder(occluderBoundingSphere, cameraPosition) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(occluderBoundingSphere)) {\n    throw new DeveloperError(\"occluderBoundingSphere is required.\");\n  }\n  if (!defined(cameraPosition)) {\n    throw new DeveloperError(\"camera position is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._occluderPosition = Cartesian3.clone(occluderBoundingSphere.center);\n  this._occluderRadius = occluderBoundingSphere.radius;\n\n  this._horizonDistance = 0.0;\n  this._horizonPlaneNormal = undefined;\n  this._horizonPlanePosition = undefined;\n  this._cameraPosition = undefined;\n\n  // cameraPosition fills in the above values\n  this.cameraPosition = cameraPosition;\n}\n\nconst scratchCartesian3 = new Cartesian3();\n\nObject.defineProperties(Occluder.prototype, {\n  /**\n   * The position of the occluder.\n   * @memberof Occluder.prototype\n   * @type {Cartesian3}\n   */\n  position: {\n    get: function () {\n      return this._occluderPosition;\n    },\n  },\n\n  /**\n   * The radius of the occluder.\n   * @memberof Occluder.prototype\n   * @type {number}\n   */\n  radius: {\n    get: function () {\n      return this._occluderRadius;\n    },\n  },\n\n  /**\n   * The position of the camera.\n   * @memberof Occluder.prototype\n   * @type {Cartesian3}\n   */\n  cameraPosition: {\n    set: function (cameraPosition) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(cameraPosition)) {\n        throw new DeveloperError(\"cameraPosition is required.\");\n      }\n      //>>includeEnd('debug');\n\n      cameraPosition = Cartesian3.clone(cameraPosition, this._cameraPosition);\n\n      const cameraToOccluderVec = Cartesian3.subtract(\n        this._occluderPosition,\n        cameraPosition,\n        scratchCartesian3,\n      );\n      let invCameraToOccluderDistance =\n        Cartesian3.magnitudeSquared(cameraToOccluderVec);\n      const occluderRadiusSqrd = this._occluderRadius * this._occluderRadius;\n\n      let horizonDistance;\n      let horizonPlaneNormal;\n      let horizonPlanePosition;\n      if (invCameraToOccluderDistance > occluderRadiusSqrd) {\n        horizonDistance = Math.sqrt(\n          invCameraToOccluderDistance - occluderRadiusSqrd,\n        );\n        invCameraToOccluderDistance =\n          1.0 / Math.sqrt(invCameraToOccluderDistance);\n        horizonPlaneNormal = Cartesian3.multiplyByScalar(\n          cameraToOccluderVec,\n          invCameraToOccluderDistance,\n          scratchCartesian3,\n        );\n        const nearPlaneDistance =\n          horizonDistance * horizonDistance * invCameraToOccluderDistance;\n        horizonPlanePosition = Cartesian3.add(\n          cameraPosition,\n          Cartesian3.multiplyByScalar(\n            horizonPlaneNormal,\n            nearPlaneDistance,\n            scratchCartesian3,\n          ),\n          scratchCartesian3,\n        );\n      } else {\n        horizonDistance = Number.MAX_VALUE;\n      }\n\n      this._horizonDistance = horizonDistance;\n      this._horizonPlaneNormal = horizonPlaneNormal;\n      this._horizonPlanePosition = horizonPlanePosition;\n      this._cameraPosition = cameraPosition;\n    },\n  },\n});\n\n/**\n * Creates an occluder from a bounding sphere and the camera position.\n *\n * @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.\n * @param {Cartesian3} cameraPosition The coordinate of the viewer/camera.\n * @param {Occluder} [result] The object onto which to store the result.\n * @returns {Occluder} The occluder derived from an object's position and radius, as well as the camera position.\n */\nOccluder.fromBoundingSphere = function (\n  occluderBoundingSphere,\n  cameraPosition,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(occluderBoundingSphere)) {\n    throw new DeveloperError(\"occluderBoundingSphere is required.\");\n  }\n\n  if (!defined(cameraPosition)) {\n    throw new DeveloperError(\"camera position is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Occluder(occluderBoundingSphere, cameraPosition);\n  }\n\n  Cartesian3.clone(occluderBoundingSphere.center, result._occluderPosition);\n  result._occluderRadius = occluderBoundingSphere.radius;\n  result.cameraPosition = cameraPosition;\n\n  return result;\n};\n\nconst tempVecScratch = new Cartesian3();\n\n/**\n * Determines whether or not a point, the <code>occludee</code>, is hidden from view by the occluder.\n *\n * @param {Cartesian3} occludee The point surrounding the occludee object.\n * @returns {boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n *\n * @example\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * const littleSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 0.25);\n * const occluder = new Cesium.Occluder(littleSphere, cameraPosition);\n * const point = new Cesium.Cartesian3(0, 0, -3);\n * occluder.isPointVisible(point); //returns true\n *\n * @see Occluder#computeVisibility\n */\nOccluder.prototype.isPointVisible = function (occludee) {\n  if (this._horizonDistance !== Number.MAX_VALUE) {\n    let tempVec = Cartesian3.subtract(\n      occludee,\n      this._occluderPosition,\n      tempVecScratch,\n    );\n    let temp = this._occluderRadius;\n    temp = Cartesian3.magnitudeSquared(tempVec) - temp * temp;\n    if (temp > 0.0) {\n      temp = Math.sqrt(temp) + this._horizonDistance;\n      tempVec = Cartesian3.subtract(occludee, this._cameraPosition, tempVec);\n      return temp * temp > Cartesian3.magnitudeSquared(tempVec);\n    }\n  }\n  return false;\n};\n\nconst occludeePositionScratch = new Cartesian3();\n\n/**\n * Determines whether or not a sphere, the <code>occludee</code>, is hidden from view by the occluder.\n *\n * @param {BoundingSphere} occludee The bounding sphere surrounding the occludee object.\n * @returns {boolean} <code>true</code> if the occludee is visible; otherwise <code>false</code>.\n *\n *\n * @example\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * const littleSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1), 0.25);\n * const occluder = new Cesium.Occluder(littleSphere, cameraPosition);\n * const bigSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -3), 1);\n * occluder.isBoundingSphereVisible(bigSphere); //returns true\n *\n * @see Occluder#computeVisibility\n */\nOccluder.prototype.isBoundingSphereVisible = function (occludee) {\n  const occludeePosition = Cartesian3.clone(\n    occludee.center,\n    occludeePositionScratch,\n  );\n  const occludeeRadius = occludee.radius;\n\n  if (this._horizonDistance !== Number.MAX_VALUE) {\n    let tempVec = Cartesian3.subtract(\n      occludeePosition,\n      this._occluderPosition,\n      tempVecScratch,\n    );\n    let temp = this._occluderRadius - occludeeRadius;\n    temp = Cartesian3.magnitudeSquared(tempVec) - temp * temp;\n    if (occludeeRadius < this._occluderRadius) {\n      if (temp > 0.0) {\n        temp = Math.sqrt(temp) + this._horizonDistance;\n        tempVec = Cartesian3.subtract(\n          occludeePosition,\n          this._cameraPosition,\n          tempVec,\n        );\n        return (\n          temp * temp + occludeeRadius * occludeeRadius >\n          Cartesian3.magnitudeSquared(tempVec)\n        );\n      }\n      return false;\n    }\n\n    // Prevent against the case where the occludee radius is larger than the occluder's; since this is\n    // an uncommon case, the following code should rarely execute.\n    if (temp > 0.0) {\n      tempVec = Cartesian3.subtract(\n        occludeePosition,\n        this._cameraPosition,\n        tempVec,\n      );\n      const tempVecMagnitudeSquared = Cartesian3.magnitudeSquared(tempVec);\n      const occluderRadiusSquared = this._occluderRadius * this._occluderRadius;\n      const occludeeRadiusSquared = occludeeRadius * occludeeRadius;\n      if (\n        (this._horizonDistance * this._horizonDistance +\n          occluderRadiusSquared) *\n          occludeeRadiusSquared >\n        tempVecMagnitudeSquared * occluderRadiusSquared\n      ) {\n        // The occludee is close enough that the occluder cannot possible occlude the occludee\n        return true;\n      }\n      temp = Math.sqrt(temp) + this._horizonDistance;\n      return temp * temp + occludeeRadiusSquared > tempVecMagnitudeSquared;\n    }\n\n    // The occludee completely encompasses the occluder\n    return true;\n  }\n\n  return false;\n};\n\nconst tempScratch = new Cartesian3();\n/**\n * Determine to what extent an occludee is visible (not visible, partially visible,  or fully visible).\n *\n * @param {BoundingSphere} occludeeBS The bounding sphere of the occludee.\n * @returns {Visibility} Visibility.NONE if the occludee is not visible,\n *                       Visibility.PARTIAL if the occludee is partially visible, or\n *                       Visibility.FULL if the occludee is fully visible.\n *\n *\n * @example\n * const sphere1 = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -1.5), 0.5);\n * const sphere2 = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -2.5), 0.5);\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * const occluder = new Cesium.Occluder(sphere1, cameraPosition);\n * occluder.computeVisibility(sphere2); //returns Visibility.NONE\n */\nOccluder.prototype.computeVisibility = function (occludeeBS) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(occludeeBS)) {\n    throw new DeveloperError(\"occludeeBS is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // If the occludee radius is larger than the occluders, this will return that\n  // the entire ocludee is visible, even though that may not be the case, though this should\n  // not occur too often.\n  const occludeePosition = Cartesian3.clone(occludeeBS.center);\n  const occludeeRadius = occludeeBS.radius;\n\n  if (occludeeRadius > this._occluderRadius) {\n    return Visibility.FULL;\n  }\n\n  if (this._horizonDistance !== Number.MAX_VALUE) {\n    // The camera is outside the occluder\n    let tempVec = Cartesian3.subtract(\n      occludeePosition,\n      this._occluderPosition,\n      tempScratch,\n    );\n    let temp = this._occluderRadius - occludeeRadius;\n    const occluderToOccludeeDistSqrd = Cartesian3.magnitudeSquared(tempVec);\n    temp = occluderToOccludeeDistSqrd - temp * temp;\n    if (temp > 0.0) {\n      // The occludee is not completely inside the occluder\n      // Check to see if the occluder completely hides the occludee\n      temp = Math.sqrt(temp) + this._horizonDistance;\n      tempVec = Cartesian3.subtract(\n        occludeePosition,\n        this._cameraPosition,\n        tempVec,\n      );\n      const cameraToOccludeeDistSqrd = Cartesian3.magnitudeSquared(tempVec);\n      if (\n        temp * temp + occludeeRadius * occludeeRadius <\n        cameraToOccludeeDistSqrd\n      ) {\n        return Visibility.NONE;\n      }\n\n      // Check to see whether the occluder is fully or partially visible\n      // when the occludee does not intersect the occluder\n      temp = this._occluderRadius + occludeeRadius;\n      temp = occluderToOccludeeDistSqrd - temp * temp;\n      if (temp > 0.0) {\n        // The occludee does not intersect the occluder.\n        temp = Math.sqrt(temp) + this._horizonDistance;\n        return cameraToOccludeeDistSqrd <\n          temp * temp + occludeeRadius * occludeeRadius\n          ? Visibility.FULL\n          : Visibility.PARTIAL;\n      }\n\n      //Check to see if the occluder is fully or partially visible when the occludee DOES\n      //intersect the occluder\n      tempVec = Cartesian3.subtract(\n        occludeePosition,\n        this._horizonPlanePosition,\n        tempVec,\n      );\n      return Cartesian3.dot(tempVec, this._horizonPlaneNormal) > -occludeeRadius\n        ? Visibility.PARTIAL\n        : Visibility.FULL;\n    }\n  }\n  return Visibility.NONE;\n};\n\nconst occludeePointScratch = new Cartesian3();\n/**\n * Computes a point that can be used as the occludee position to the visibility functions.\n * Use a radius of zero for the occludee radius.  Typically, a user computes a bounding sphere around\n * an object that is used for visibility; however it is also possible to compute a point that if\n * seen/not seen would also indicate if an object is visible/not visible.  This function is better\n * called for objects that do not move relative to the occluder and is large, such as a chunk of\n * terrain.  You are better off not calling this and using the object's bounding sphere for objects\n * such as a satellite or ground vehicle.\n *\n * @param {BoundingSphere} occluderBoundingSphere The bounding sphere surrounding the occluder.\n * @param {Cartesian3} occludeePosition The point where the occludee (bounding sphere of radius 0) is located.\n * @param {Cartesian3[]} positions List of altitude points on the horizon near the surface of the occluder.\n * @returns {object} An object containing two attributes: <code>occludeePoint</code> and <code>valid</code>\n * which is a boolean value.\n *\n * @exception {DeveloperError} <code>positions</code> must contain at least one element.\n * @exception {DeveloperError} <code>occludeePosition</code> must have a value other than <code>occluderBoundingSphere.center</code>.\n *\n * @example\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 0);\n * const occluderBoundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(0, 0, -8), 2);\n * const occluder = new Cesium.Occluder(occluderBoundingSphere, cameraPosition);\n * const positions = [new Cesium.Cartesian3(-0.25, 0, -5.3), new Cesium.Cartesian3(0.25, 0, -5.3)];\n * const tileOccluderSphere = Cesium.BoundingSphere.fromPoints(positions);\n * const occludeePosition = tileOccluderSphere.center;\n * const occludeePt = Cesium.Occluder.computeOccludeePoint(occluderBoundingSphere, occludeePosition, positions);\n */\nOccluder.computeOccludeePoint = function (\n  occluderBoundingSphere,\n  occludeePosition,\n  positions,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(occluderBoundingSphere)) {\n    throw new DeveloperError(\"occluderBoundingSphere is required.\");\n  }\n  if (!defined(positions)) {\n    throw new DeveloperError(\"positions is required.\");\n  }\n  if (positions.length === 0) {\n    throw new DeveloperError(\"positions must contain at least one element\");\n  }\n  //>>includeEnd('debug');\n\n  const occludeePos = Cartesian3.clone(occludeePosition);\n  const occluderPosition = Cartesian3.clone(occluderBoundingSphere.center);\n  const occluderRadius = occluderBoundingSphere.radius;\n  const numPositions = positions.length;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (Cartesian3.equals(occluderPosition, occludeePosition)) {\n    throw new DeveloperError(\n      \"occludeePosition must be different than occluderBoundingSphere.center\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  // Compute a plane with a normal from the occluder to the occludee position.\n  const occluderPlaneNormal = Cartesian3.normalize(\n    Cartesian3.subtract(occludeePos, occluderPosition, occludeePointScratch),\n    occludeePointScratch,\n  );\n  const occluderPlaneD = -Cartesian3.dot(occluderPlaneNormal, occluderPosition);\n\n  //For each position, determine the horizon intersection. Choose the position and intersection\n  //that results in the greatest angle with the occcluder plane.\n  const aRotationVector = Occluder._anyRotationVector(\n    occluderPosition,\n    occluderPlaneNormal,\n    occluderPlaneD,\n  );\n  let dot = Occluder._horizonToPlaneNormalDotProduct(\n    occluderBoundingSphere,\n    occluderPlaneNormal,\n    occluderPlaneD,\n    aRotationVector,\n    positions[0],\n  );\n  if (!dot) {\n    //The position is inside the mimimum radius, which is invalid\n    return undefined;\n  }\n  let tempDot;\n  for (let i = 1; i < numPositions; ++i) {\n    tempDot = Occluder._horizonToPlaneNormalDotProduct(\n      occluderBoundingSphere,\n      occluderPlaneNormal,\n      occluderPlaneD,\n      aRotationVector,\n      positions[i],\n    );\n    if (!tempDot) {\n      //The position is inside the minimum radius, which is invalid\n      return undefined;\n    }\n    if (tempDot < dot) {\n      dot = tempDot;\n    }\n  }\n  //Verify that the dot is not near 90 degress\n  // eslint-disable-next-line no-loss-of-precision\n  if (dot < 0.00174532836589830883577820272085) {\n    return undefined;\n  }\n\n  const distance = occluderRadius / dot;\n  return Cartesian3.add(\n    occluderPosition,\n    Cartesian3.multiplyByScalar(\n      occluderPlaneNormal,\n      distance,\n      occludeePointScratch,\n    ),\n    occludeePointScratch,\n  );\n};\n\nconst computeOccludeePointFromRectangleScratch = [];\n/**\n * Computes a point that can be used as the occludee position to the visibility functions from a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle used to create a bounding sphere.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid used to determine positions of the rectangle.\n * @returns {object} An object containing two attributes: <code>occludeePoint</code> and <code>valid</code>\n * which is a boolean value.\n */\nOccluder.computeOccludeePointFromRectangle = function (rectangle, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(rectangle)) {\n    throw new DeveloperError(\"rectangle is required.\");\n  }\n  //>>includeEnd('debug');\n\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  const positions = Rectangle.subsample(\n    rectangle,\n    ellipsoid,\n    0.0,\n    computeOccludeePointFromRectangleScratch,\n  );\n  const bs = BoundingSphere.fromPoints(positions);\n\n  // Assumes the ellipsoid is centered at the origin\n  const ellipsoidCenter = Cartesian3.ZERO;\n  if (!Cartesian3.equals(ellipsoidCenter, bs.center)) {\n    return Occluder.computeOccludeePoint(\n      new BoundingSphere(ellipsoidCenter, ellipsoid.minimumRadius),\n      bs.center,\n      positions,\n    );\n  }\n\n  return undefined;\n};\n\nconst tempVec0Scratch = new Cartesian3();\nOccluder._anyRotationVector = function (\n  occluderPosition,\n  occluderPlaneNormal,\n  occluderPlaneD,\n) {\n  const tempVec0 = Cartesian3.abs(occluderPlaneNormal, tempVec0Scratch);\n  let majorAxis = tempVec0.x > tempVec0.y ? 0 : 1;\n  if (\n    (majorAxis === 0 && tempVec0.z > tempVec0.x) ||\n    (majorAxis === 1 && tempVec0.z > tempVec0.y)\n  ) {\n    majorAxis = 2;\n  }\n  const tempVec = new Cartesian3();\n  let tempVec1;\n  if (majorAxis === 0) {\n    tempVec0.x = occluderPosition.x;\n    tempVec0.y = occluderPosition.y + 1.0;\n    tempVec0.z = occluderPosition.z + 1.0;\n    tempVec1 = Cartesian3.UNIT_X;\n  } else if (majorAxis === 1) {\n    tempVec0.x = occluderPosition.x + 1.0;\n    tempVec0.y = occluderPosition.y;\n    tempVec0.z = occluderPosition.z + 1.0;\n    tempVec1 = Cartesian3.UNIT_Y;\n  } else {\n    tempVec0.x = occluderPosition.x + 1.0;\n    tempVec0.y = occluderPosition.y + 1.0;\n    tempVec0.z = occluderPosition.z;\n    tempVec1 = Cartesian3.UNIT_Z;\n  }\n  const u =\n    (Cartesian3.dot(occluderPlaneNormal, tempVec0) + occluderPlaneD) /\n    -Cartesian3.dot(occluderPlaneNormal, tempVec1);\n  return Cartesian3.normalize(\n    Cartesian3.subtract(\n      Cartesian3.add(\n        tempVec0,\n        Cartesian3.multiplyByScalar(tempVec1, u, tempVec),\n        tempVec0,\n      ),\n      occluderPosition,\n      tempVec0,\n    ),\n    tempVec0,\n  );\n};\n\nconst posDirectionScratch = new Cartesian3();\nOccluder._rotationVector = function (\n  occluderPosition,\n  occluderPlaneNormal,\n  occluderPlaneD,\n  position,\n  anyRotationVector,\n) {\n  //Determine the angle between the occluder plane normal and the position direction\n  let positionDirection = Cartesian3.subtract(\n    position,\n    occluderPosition,\n    posDirectionScratch,\n  );\n  positionDirection = Cartesian3.normalize(\n    positionDirection,\n    positionDirection,\n  );\n  if (\n    Cartesian3.dot(occluderPlaneNormal, positionDirection) <\n    // eslint-disable-next-line no-loss-of-precision\n    0.99999998476912904932780850903444\n  ) {\n    const crossProduct = Cartesian3.cross(\n      occluderPlaneNormal,\n      positionDirection,\n      positionDirection,\n    );\n    const length = Cartesian3.magnitude(crossProduct);\n    if (length > CesiumMath.EPSILON13) {\n      return Cartesian3.normalize(crossProduct, new Cartesian3());\n    }\n  }\n  //The occluder plane normal and the position direction are colinear. Use any\n  //vector in the occluder plane as the rotation vector\n  return anyRotationVector;\n};\n\nconst posScratch1 = new Cartesian3();\nconst occluerPosScratch = new Cartesian3();\nconst posScratch2 = new Cartesian3();\nconst horizonPlanePosScratch = new Cartesian3();\nOccluder._horizonToPlaneNormalDotProduct = function (\n  occluderBS,\n  occluderPlaneNormal,\n  occluderPlaneD,\n  anyRotationVector,\n  position,\n) {\n  const pos = Cartesian3.clone(position, posScratch1);\n  const occluderPosition = Cartesian3.clone(\n    occluderBS.center,\n    occluerPosScratch,\n  );\n  const occluderRadius = occluderBS.radius;\n\n  //Verify that the position is outside the occluder\n  let positionToOccluder = Cartesian3.subtract(\n    occluderPosition,\n    pos,\n    posScratch2,\n  );\n  const occluderToPositionDistanceSquared =\n    Cartesian3.magnitudeSquared(positionToOccluder);\n  const occluderRadiusSquared = occluderRadius * occluderRadius;\n  if (occluderToPositionDistanceSquared < occluderRadiusSquared) {\n    return false;\n  }\n\n  //Horizon parameters\n  const horizonDistanceSquared =\n    occluderToPositionDistanceSquared - occluderRadiusSquared;\n  const horizonDistance = Math.sqrt(horizonDistanceSquared);\n  const occluderToPositionDistance = Math.sqrt(\n    occluderToPositionDistanceSquared,\n  );\n  const invOccluderToPositionDistance = 1.0 / occluderToPositionDistance;\n  const cosTheta = horizonDistance * invOccluderToPositionDistance;\n  const horizonPlaneDistance = cosTheta * horizonDistance;\n  positionToOccluder = Cartesian3.normalize(\n    positionToOccluder,\n    positionToOccluder,\n  );\n  const horizonPlanePosition = Cartesian3.add(\n    pos,\n    Cartesian3.multiplyByScalar(\n      positionToOccluder,\n      horizonPlaneDistance,\n      horizonPlanePosScratch,\n    ),\n    horizonPlanePosScratch,\n  );\n  const horizonCrossDistance = Math.sqrt(\n    horizonDistanceSquared - horizonPlaneDistance * horizonPlaneDistance,\n  );\n\n  //Rotate the position to occluder vector 90 degrees\n  let tempVec = this._rotationVector(\n    occluderPosition,\n    occluderPlaneNormal,\n    occluderPlaneD,\n    pos,\n    anyRotationVector,\n  );\n  let horizonCrossDirection = Cartesian3.fromElements(\n    tempVec.x * tempVec.x * positionToOccluder.x +\n      (tempVec.x * tempVec.y - tempVec.z) * positionToOccluder.y +\n      (tempVec.x * tempVec.z + tempVec.y) * positionToOccluder.z,\n    (tempVec.x * tempVec.y + tempVec.z) * positionToOccluder.x +\n      tempVec.y * tempVec.y * positionToOccluder.y +\n      (tempVec.y * tempVec.z - tempVec.x) * positionToOccluder.z,\n    (tempVec.x * tempVec.z - tempVec.y) * positionToOccluder.x +\n      (tempVec.y * tempVec.z + tempVec.x) * positionToOccluder.y +\n      tempVec.z * tempVec.z * positionToOccluder.z,\n    posScratch1,\n  );\n  horizonCrossDirection = Cartesian3.normalize(\n    horizonCrossDirection,\n    horizonCrossDirection,\n  );\n\n  //Horizon positions\n  const offset = Cartesian3.multiplyByScalar(\n    horizonCrossDirection,\n    horizonCrossDistance,\n    posScratch1,\n  );\n  tempVec = Cartesian3.normalize(\n    Cartesian3.subtract(\n      Cartesian3.add(horizonPlanePosition, offset, posScratch2),\n      occluderPosition,\n      posScratch2,\n    ),\n    posScratch2,\n  );\n  const dot0 = Cartesian3.dot(occluderPlaneNormal, tempVec);\n  tempVec = Cartesian3.normalize(\n    Cartesian3.subtract(\n      Cartesian3.subtract(horizonPlanePosition, offset, tempVec),\n      occluderPosition,\n      tempVec,\n    ),\n    tempVec,\n  );\n  const dot1 = Cartesian3.dot(occluderPlaneNormal, tempVec);\n  return dot0 < dot1 ? dot0 : dot1;\n};\nexport default Occluder;\n","import Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Value and type information for per-instance geometry attribute that determines the geometry instance offset\n *\n * @alias OffsetGeometryInstanceAttribute\n * @constructor\n *\n * @param {number} [x=0] The x translation\n * @param {number} [y=0] The y translation\n * @param {number} [z=0] The z translation\n *\n * @private\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction OffsetGeometryInstanceAttribute(x, y, z) {\n  x = x ?? 0;\n  y = y ?? 0;\n  z = z ?? 0;\n\n  /**\n   * The values for the attributes stored in a typed array.\n   *\n   * @type Float32Array\n   */\n  this.value = new Float32Array([x, y, z]);\n}\n\nObject.defineProperties(OffsetGeometryInstanceAttribute.prototype, {\n  /**\n   * The datatype of each component in the attribute, e.g., individual elements in\n   * {@link OffsetGeometryInstanceAttribute#value}.\n   *\n   * @memberof OffsetGeometryInstanceAttribute.prototype\n   *\n   * @type {ComponentDatatype}\n   * @readonly\n   *\n   * @default {@link ComponentDatatype.FLOAT}\n   */\n  componentDatatype: {\n    get: function () {\n      return ComponentDatatype.FLOAT;\n    },\n  },\n\n  /**\n   * The number of components in the attributes, i.e., {@link OffsetGeometryInstanceAttribute#value}.\n   *\n   * @memberof OffsetGeometryInstanceAttribute.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @default 3\n   */\n  componentsPerAttribute: {\n    get: function () {\n      return 3;\n    },\n  },\n\n  /**\n   * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n   * indicate that the components should be mapped to the range [0, 1] (unsigned)\n   * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n   *\n   * @memberof OffsetGeometryInstanceAttribute.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  normalize: {\n    get: function () {\n      return false;\n    },\n  },\n});\n\n/**\n * Creates a new {@link OffsetGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}.\n *\n * @param {Cartesian3} offset The cartesian offset\n * @returns {OffsetGeometryInstanceAttribute} The new {@link OffsetGeometryInstanceAttribute} instance.\n */\nOffsetGeometryInstanceAttribute.fromCartesian3 = function (offset) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"offset\", offset);\n  //>>includeEnd('debug');\n\n  return new OffsetGeometryInstanceAttribute(offset.x, offset.y, offset.z);\n};\n\n/**\n * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute.\n *\n * @param {Cartesian3} offset The cartesian offset\n * @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {Float32Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.modelMatrix = Cesium.OffsetGeometryInstanceAttribute.toValue(modelMatrix, attributes.modelMatrix);\n */\nOffsetGeometryInstanceAttribute.toValue = function (offset, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"offset\", offset);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Float32Array([offset.x, offset.y, offset.z]);\n  }\n\n  result[0] = offset.x;\n  result[1] = offset.y;\n  result[2] = offset.z;\n  return result;\n};\nexport default OffsetGeometryInstanceAttribute;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport combine from \"./combine.js\";\nimport Credit from \"./Credit.js\";\nimport defined from \"./defined.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * Provides geocoding via a {@link https://opencagedata.com/|OpenCage} server.\n * @alias OpenCageGeocoderService\n * @constructor\n *\n * @param {Resource|string} url The endpoint to the OpenCage server.\n * @param {string} apiKey The OpenCage API Key.\n * @param {object} [params] An object with the following properties (See https://opencagedata.com/api#forward-opt):\n * @param {number} [params.abbrv] When set to 1 we attempt to abbreviate and shorten the formatted string we return.\n * @param {number} [options.add_request] When set to 1 the various request parameters are added to the response for ease of debugging.\n * @param {string} [options.bounds] Provides the geocoder with a hint to the region that the query resides in.\n * @param {string} [options.countrycode] Restricts the results to the specified country or countries (as defined by the ISO 3166-1 Alpha 2 standard).\n * @param {string} [options.jsonp] Wraps the returned JSON with a function name.\n * @param {string} [options.language] An IETF format language code.\n * @param {number} [options.limit] The maximum number of results we should return.\n * @param {number} [options.min_confidence] An integer from 1-10. Only results with at least this confidence will be returned.\n * @param {number} [options.no_annotations] When set to 1 results will not contain annotations.\n * @param {number} [options.no_dedupe] When set to 1 results will not be deduplicated.\n * @param {number} [options.no_record] When set to 1 the query contents are not logged.\n * @param {number} [options.pretty] When set to 1 results are 'pretty' printed for easier reading. Useful for debugging.\n * @param {string} [options.proximity] Provides the geocoder with a hint to bias results in favour of those closer to the specified location (For example: 41.40139,2.12870).\n *\n * @example\n * // Configure a Viewer to use the OpenCage Geocoder\n * const viewer = new Cesium.Viewer('cesiumContainer', {\n *   geocoder: new Cesium.OpenCageGeocoderService('https://api.opencagedata.com/geocode/v1/', '<API key>')\n * });\n */\nfunction OpenCageGeocoderService(url, apiKey, params) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  Check.defined(\"apiKey\", apiKey);\n  if (defined(params)) {\n    Check.typeOf.object(\"params\", params);\n  }\n  //>>includeEnd('debug');\n\n  url = Resource.createIfNeeded(url);\n  url.appendForwardSlash();\n  url.setQueryParameters({ key: apiKey });\n  this._url = url;\n  this._params = params ?? {};\n  this._credit = new Credit(\n    `Geodata copyright <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> contributors`,\n    false,\n  );\n}\n\nObject.defineProperties(OpenCageGeocoderService.prototype, {\n  /**\n   * The Resource used to access the OpenCage endpoint.\n   * @type {Resource}\n   * @memberof OpenCageGeocoderService.prototype\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._url;\n    },\n  },\n  /**\n   * Optional params passed to OpenCage in order to customize geocoding\n   * @type {object}\n   * @memberof OpenCageGeocoderService.prototype\n   * @readonly\n   */\n  params: {\n    get: function () {\n      return this._params;\n    },\n  },\n  /**\n   * Gets the credit to display after a geocode is performed. Typically this is used to credit\n   * the geocoder service.\n   * @memberof OpenCageGeocoderService.prototype\n   * @type {Credit|undefined}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n});\n\n/**\n * @function\n *\n * @param {string} query The query to be sent to the geocoder service\n * @returns {Promise<GeocoderService.Result[]>}\n */\nOpenCageGeocoderService.prototype.geocode = async function (query) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"query\", query);\n  //>>includeEnd('debug');\n\n  const resource = this._url.getDerivedResource({\n    url: \"json\",\n    queryParameters: combine(this._params, { q: query }),\n  });\n  return resource.fetchJson().then(function (response) {\n    return response.results.map(function (resultObject) {\n      let destination;\n      const bounds = resultObject.bounds;\n\n      if (defined(bounds)) {\n        destination = Rectangle.fromDegrees(\n          bounds.southwest.lng,\n          bounds.southwest.lat,\n          bounds.northeast.lng,\n          bounds.northeast.lat,\n        );\n      } else {\n        const { lng, lat } = resultObject.geometry;\n        destination = Cartesian3.fromDegrees(lng, lat);\n      }\n\n      return {\n        displayName: resultObject.formatted,\n        destination: destination,\n      };\n    });\n  });\n};\nexport default OpenCageGeocoderService;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport Intersect from \"./Intersect.js\";\nimport Interval from \"./Interval.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * Creates an instance of an OrientedBoundingBox.\n * An OrientedBoundingBox of some object is a closed and convex rectangular cuboid. It can provide a tighter bounding volume than {@link BoundingSphere} or {@link AxisAlignedBoundingBox} in many cases.\n * @alias OrientedBoundingBox\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the box.\n * @param {Matrix3} [halfAxes=Matrix3.ZERO] The three orthogonal half-axes of the bounding box.\n *                                          Equivalently, the transformation matrix, to rotate and scale a 2x2x2\n *                                          cube centered at the origin.\n *\n *\n * @example\n * // Create an OrientedBoundingBox using a transformation matrix, a position where the box will be translated, and a scale.\n * const center = new Cesium.Cartesian3(1.0, 0.0, 0.0);\n * const halfAxes = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(1.0, 3.0, 2.0), new Cesium.Matrix3());\n *\n * const obb = new Cesium.OrientedBoundingBox(center, halfAxes);\n *\n * @see BoundingSphere\n * @see BoundingRectangle\n */\nfunction OrientedBoundingBox(center, halfAxes) {\n  /**\n   * The center of the box.\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   */\n  this.center = Cartesian3.clone(center ?? Cartesian3.ZERO);\n  /**\n   * The three orthogonal half-axes of the bounding box. Equivalently, the\n   * transformation matrix, to rotate and scale a 2x2x2 cube centered at the\n   * origin.\n   * @type {Matrix3}\n   * @default {@link Matrix3.ZERO}\n   */\n  this.halfAxes = Matrix3.clone(halfAxes ?? Matrix3.ZERO);\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nOrientedBoundingBox.packedLength =\n  Cartesian3.packedLength + Matrix3.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {OrientedBoundingBox} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nOrientedBoundingBox.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Cartesian3.pack(value.center, array, startingIndex);\n  Matrix3.pack(value.halfAxes, array, startingIndex + Cartesian3.packedLength);\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {OrientedBoundingBox} [result] The object into which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n */\nOrientedBoundingBox.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new OrientedBoundingBox();\n  }\n\n  Cartesian3.unpack(array, startingIndex, result.center);\n  Matrix3.unpack(\n    array,\n    startingIndex + Cartesian3.packedLength,\n    result.halfAxes,\n  );\n  return result;\n};\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\nconst scratchCartesian4 = new Cartesian3();\nconst scratchCartesian5 = new Cartesian3();\nconst scratchCartesian6 = new Cartesian3();\nconst scratchCovarianceResult = new Matrix3();\nconst scratchEigenResult = {\n  unitary: new Matrix3(),\n  diagonal: new Matrix3(),\n};\n\n/**\n * Computes an instance of an OrientedBoundingBox of the given positions.\n * This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis).\n * Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf\n *\n * @param {Cartesian3[]} [positions] List of {@link Cartesian3} points that the bounding box will enclose.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n *\n * @example\n * // Compute an object oriented bounding box enclosing two points.\n * const box = Cesium.OrientedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);\n */\nOrientedBoundingBox.fromPoints = function (positions, result) {\n  if (!defined(result)) {\n    result = new OrientedBoundingBox();\n  }\n\n  if (!defined(positions) || positions.length === 0) {\n    result.halfAxes = Matrix3.ZERO;\n    result.center = Cartesian3.ZERO;\n    return result;\n  }\n\n  let i;\n  const length = positions.length;\n\n  const meanPoint = Cartesian3.clone(positions[0], scratchCartesian1);\n  for (i = 1; i < length; i++) {\n    Cartesian3.add(meanPoint, positions[i], meanPoint);\n  }\n  const invLength = 1.0 / length;\n  Cartesian3.multiplyByScalar(meanPoint, invLength, meanPoint);\n\n  let exx = 0.0;\n  let exy = 0.0;\n  let exz = 0.0;\n  let eyy = 0.0;\n  let eyz = 0.0;\n  let ezz = 0.0;\n  let p;\n\n  for (i = 0; i < length; i++) {\n    p = Cartesian3.subtract(positions[i], meanPoint, scratchCartesian2);\n    exx += p.x * p.x;\n    exy += p.x * p.y;\n    exz += p.x * p.z;\n    eyy += p.y * p.y;\n    eyz += p.y * p.z;\n    ezz += p.z * p.z;\n  }\n\n  exx *= invLength;\n  exy *= invLength;\n  exz *= invLength;\n  eyy *= invLength;\n  eyz *= invLength;\n  ezz *= invLength;\n\n  const covarianceMatrix = scratchCovarianceResult;\n  covarianceMatrix[0] = exx;\n  covarianceMatrix[1] = exy;\n  covarianceMatrix[2] = exz;\n  covarianceMatrix[3] = exy;\n  covarianceMatrix[4] = eyy;\n  covarianceMatrix[5] = eyz;\n  covarianceMatrix[6] = exz;\n  covarianceMatrix[7] = eyz;\n  covarianceMatrix[8] = ezz;\n\n  const eigenDecomposition = Matrix3.computeEigenDecomposition(\n    covarianceMatrix,\n    scratchEigenResult,\n  );\n  const rotation = Matrix3.clone(eigenDecomposition.unitary, result.halfAxes);\n\n  let v1 = Matrix3.getColumn(rotation, 0, scratchCartesian4);\n  let v2 = Matrix3.getColumn(rotation, 1, scratchCartesian5);\n  let v3 = Matrix3.getColumn(rotation, 2, scratchCartesian6);\n\n  let u1 = -Number.MAX_VALUE;\n  let u2 = -Number.MAX_VALUE;\n  let u3 = -Number.MAX_VALUE;\n  let l1 = Number.MAX_VALUE;\n  let l2 = Number.MAX_VALUE;\n  let l3 = Number.MAX_VALUE;\n\n  for (i = 0; i < length; i++) {\n    p = positions[i];\n    u1 = Math.max(Cartesian3.dot(v1, p), u1);\n    u2 = Math.max(Cartesian3.dot(v2, p), u2);\n    u3 = Math.max(Cartesian3.dot(v3, p), u3);\n\n    l1 = Math.min(Cartesian3.dot(v1, p), l1);\n    l2 = Math.min(Cartesian3.dot(v2, p), l2);\n    l3 = Math.min(Cartesian3.dot(v3, p), l3);\n  }\n\n  v1 = Cartesian3.multiplyByScalar(v1, 0.5 * (l1 + u1), v1);\n  v2 = Cartesian3.multiplyByScalar(v2, 0.5 * (l2 + u2), v2);\n  v3 = Cartesian3.multiplyByScalar(v3, 0.5 * (l3 + u3), v3);\n\n  const center = Cartesian3.add(v1, v2, result.center);\n  Cartesian3.add(center, v3, center);\n\n  const scale = scratchCartesian3;\n  scale.x = u1 - l1;\n  scale.y = u2 - l2;\n  scale.z = u3 - l3;\n  Cartesian3.multiplyByScalar(scale, 0.5, scale);\n  Matrix3.multiplyByScale(result.halfAxes, scale, result.halfAxes);\n\n  return result;\n};\n\nconst scratchOffset = new Cartesian3();\nconst scratchScale = new Cartesian3();\nfunction fromPlaneExtents(\n  planeOrigin,\n  planeXAxis,\n  planeYAxis,\n  planeZAxis,\n  minimumX,\n  maximumX,\n  minimumY,\n  maximumY,\n  minimumZ,\n  maximumZ,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(minimumX) ||\n    !defined(maximumX) ||\n    !defined(minimumY) ||\n    !defined(maximumY) ||\n    !defined(minimumZ) ||\n    !defined(maximumZ)\n  ) {\n    throw new DeveloperError(\n      \"all extents (minimum/maximum X/Y/Z) are required.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new OrientedBoundingBox();\n  }\n\n  const halfAxes = result.halfAxes;\n  Matrix3.setColumn(halfAxes, 0, planeXAxis, halfAxes);\n  Matrix3.setColumn(halfAxes, 1, planeYAxis, halfAxes);\n  Matrix3.setColumn(halfAxes, 2, planeZAxis, halfAxes);\n\n  let centerOffset = scratchOffset;\n  centerOffset.x = (minimumX + maximumX) / 2.0;\n  centerOffset.y = (minimumY + maximumY) / 2.0;\n  centerOffset.z = (minimumZ + maximumZ) / 2.0;\n\n  const scale = scratchScale;\n  scale.x = (maximumX - minimumX) / 2.0;\n  scale.y = (maximumY - minimumY) / 2.0;\n  scale.z = (maximumZ - minimumZ) / 2.0;\n\n  const center = result.center;\n  centerOffset = Matrix3.multiplyByVector(halfAxes, centerOffset, centerOffset);\n  Cartesian3.add(planeOrigin, centerOffset, center);\n  Matrix3.multiplyByScale(halfAxes, scale, halfAxes);\n\n  return result;\n}\n\nconst scratchRectangleCenterCartographic = new Cartographic();\nconst scratchRectangleCenter = new Cartesian3();\nconst scratchPerimeterCartographicNC = new Cartographic();\nconst scratchPerimeterCartographicNW = new Cartographic();\nconst scratchPerimeterCartographicCW = new Cartographic();\nconst scratchPerimeterCartographicSW = new Cartographic();\nconst scratchPerimeterCartographicSC = new Cartographic();\nconst scratchPerimeterCartesianNC = new Cartesian3();\nconst scratchPerimeterCartesianNW = new Cartesian3();\nconst scratchPerimeterCartesianCW = new Cartesian3();\nconst scratchPerimeterCartesianSW = new Cartesian3();\nconst scratchPerimeterCartesianSC = new Cartesian3();\nconst scratchPerimeterProjectedNC = new Cartesian2();\nconst scratchPerimeterProjectedNW = new Cartesian2();\nconst scratchPerimeterProjectedCW = new Cartesian2();\nconst scratchPerimeterProjectedSW = new Cartesian2();\nconst scratchPerimeterProjectedSC = new Cartesian2();\n\nconst scratchPlaneOrigin = new Cartesian3();\nconst scratchPlaneNormal = new Cartesian3();\nconst scratchPlaneXAxis = new Cartesian3();\nconst scratchHorizonCartesian = new Cartesian3();\nconst scratchHorizonProjected = new Cartesian2();\nconst scratchMaxY = new Cartesian3();\nconst scratchMinY = new Cartesian3();\nconst scratchZ = new Cartesian3();\nconst scratchPlane = new Plane(Cartesian3.UNIT_X, 0.0);\n\n/**\n * Computes an OrientedBoundingBox that bounds a {@link Rectangle} on the surface of an {@link Ellipsoid}.\n * There are no guarantees about the orientation of the bounding box.\n *\n * @param {Rectangle} rectangle The cartographic rectangle on the surface of the ellipsoid.\n * @param {number} [minimumHeight=0.0] The minimum height (elevation) within the tile.\n * @param {number} [maximumHeight=0.0] The maximum height (elevation) within the tile.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the rectangle is defined.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided.\n *\n * @exception {DeveloperError} rectangle.width must be between 0 and 2 * pi.\n * @exception {DeveloperError} rectangle.height must be between 0 and pi.\n * @exception {DeveloperError} ellipsoid must be an ellipsoid of revolution (<code>radii.x == radii.y</code>)\n */\nOrientedBoundingBox.fromRectangle = function (\n  rectangle,\n  minimumHeight,\n  maximumHeight,\n  ellipsoid,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(rectangle)) {\n    throw new DeveloperError(\"rectangle is required\");\n  }\n  if (rectangle.width < 0.0 || rectangle.width > CesiumMath.TWO_PI) {\n    throw new DeveloperError(\"Rectangle width must be between 0 and 2 * pi\");\n  }\n  if (rectangle.height < 0.0 || rectangle.height > CesiumMath.PI) {\n    throw new DeveloperError(\"Rectangle height must be between 0 and pi\");\n  }\n  if (\n    defined(ellipsoid) &&\n    !CesiumMath.equalsEpsilon(\n      ellipsoid.radii.x,\n      ellipsoid.radii.y,\n      CesiumMath.EPSILON15,\n    )\n  ) {\n    throw new DeveloperError(\n      \"Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  minimumHeight = minimumHeight ?? 0.0;\n  maximumHeight = maximumHeight ?? 0.0;\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  let minX, maxX, minY, maxY, minZ, maxZ, plane;\n\n  if (rectangle.width <= CesiumMath.PI) {\n    // The bounding box will be aligned with the tangent plane at the center of the rectangle.\n    const tangentPointCartographic = Rectangle.center(\n      rectangle,\n      scratchRectangleCenterCartographic,\n    );\n    const tangentPoint = ellipsoid.cartographicToCartesian(\n      tangentPointCartographic,\n      scratchRectangleCenter,\n    );\n    const tangentPlane = new EllipsoidTangentPlane(tangentPoint, ellipsoid);\n    plane = tangentPlane.plane;\n\n    // If the rectangle spans the equator, CW is instead aligned with the equator (because it sticks out the farthest at the equator).\n    const lonCenter = tangentPointCartographic.longitude;\n    const latCenter =\n      rectangle.south < 0.0 && rectangle.north > 0.0\n        ? 0.0\n        : tangentPointCartographic.latitude;\n\n    // Compute XY extents using the rectangle at maximum height\n    const perimeterCartographicNC = Cartographic.fromRadians(\n      lonCenter,\n      rectangle.north,\n      maximumHeight,\n      scratchPerimeterCartographicNC,\n    );\n    const perimeterCartographicNW = Cartographic.fromRadians(\n      rectangle.west,\n      rectangle.north,\n      maximumHeight,\n      scratchPerimeterCartographicNW,\n    );\n    const perimeterCartographicCW = Cartographic.fromRadians(\n      rectangle.west,\n      latCenter,\n      maximumHeight,\n      scratchPerimeterCartographicCW,\n    );\n    const perimeterCartographicSW = Cartographic.fromRadians(\n      rectangle.west,\n      rectangle.south,\n      maximumHeight,\n      scratchPerimeterCartographicSW,\n    );\n    const perimeterCartographicSC = Cartographic.fromRadians(\n      lonCenter,\n      rectangle.south,\n      maximumHeight,\n      scratchPerimeterCartographicSC,\n    );\n\n    const perimeterCartesianNC = ellipsoid.cartographicToCartesian(\n      perimeterCartographicNC,\n      scratchPerimeterCartesianNC,\n    );\n    let perimeterCartesianNW = ellipsoid.cartographicToCartesian(\n      perimeterCartographicNW,\n      scratchPerimeterCartesianNW,\n    );\n    const perimeterCartesianCW = ellipsoid.cartographicToCartesian(\n      perimeterCartographicCW,\n      scratchPerimeterCartesianCW,\n    );\n    let perimeterCartesianSW = ellipsoid.cartographicToCartesian(\n      perimeterCartographicSW,\n      scratchPerimeterCartesianSW,\n    );\n    const perimeterCartesianSC = ellipsoid.cartographicToCartesian(\n      perimeterCartographicSC,\n      scratchPerimeterCartesianSC,\n    );\n\n    const perimeterProjectedNC = tangentPlane.projectPointToNearestOnPlane(\n      perimeterCartesianNC,\n      scratchPerimeterProjectedNC,\n    );\n    const perimeterProjectedNW = tangentPlane.projectPointToNearestOnPlane(\n      perimeterCartesianNW,\n      scratchPerimeterProjectedNW,\n    );\n    const perimeterProjectedCW = tangentPlane.projectPointToNearestOnPlane(\n      perimeterCartesianCW,\n      scratchPerimeterProjectedCW,\n    );\n    const perimeterProjectedSW = tangentPlane.projectPointToNearestOnPlane(\n      perimeterCartesianSW,\n      scratchPerimeterProjectedSW,\n    );\n    const perimeterProjectedSC = tangentPlane.projectPointToNearestOnPlane(\n      perimeterCartesianSC,\n      scratchPerimeterProjectedSC,\n    );\n\n    minX = Math.min(\n      perimeterProjectedNW.x,\n      perimeterProjectedCW.x,\n      perimeterProjectedSW.x,\n    );\n    maxX = -minX; // symmetrical\n\n    maxY = Math.max(perimeterProjectedNW.y, perimeterProjectedNC.y);\n    minY = Math.min(perimeterProjectedSW.y, perimeterProjectedSC.y);\n\n    // Compute minimum Z using the rectangle at minimum height, since it will be deeper than the maximum height\n    perimeterCartographicNW.height = perimeterCartographicSW.height =\n      minimumHeight;\n    perimeterCartesianNW = ellipsoid.cartographicToCartesian(\n      perimeterCartographicNW,\n      scratchPerimeterCartesianNW,\n    );\n    perimeterCartesianSW = ellipsoid.cartographicToCartesian(\n      perimeterCartographicSW,\n      scratchPerimeterCartesianSW,\n    );\n\n    minZ = Math.min(\n      Plane.getPointDistance(plane, perimeterCartesianNW),\n      Plane.getPointDistance(plane, perimeterCartesianSW),\n    );\n    maxZ = maximumHeight; // Since the tangent plane touches the surface at height = 0, this is okay\n\n    return fromPlaneExtents(\n      tangentPlane.origin,\n      tangentPlane.xAxis,\n      tangentPlane.yAxis,\n      tangentPlane.zAxis,\n      minX,\n      maxX,\n      minY,\n      maxY,\n      minZ,\n      maxZ,\n      result,\n    );\n  }\n\n  // Handle the case where rectangle width is greater than PI (wraps around more than half the ellipsoid).\n  const fullyAboveEquator = rectangle.south > 0.0;\n  const fullyBelowEquator = rectangle.north < 0.0;\n  const latitudeNearestToEquator = fullyAboveEquator\n    ? rectangle.south\n    : fullyBelowEquator\n      ? rectangle.north\n      : 0.0;\n  const centerLongitude = Rectangle.center(\n    rectangle,\n    scratchRectangleCenterCartographic,\n  ).longitude;\n\n  // Plane is located at the rectangle's center longitude and the rectangle's latitude that is closest to the equator. It rotates around the Z axis.\n  // This results in a better fit than the obb approach for smaller rectangles, which orients with the rectangle's center normal.\n  const planeOrigin = Cartesian3.fromRadians(\n    centerLongitude,\n    latitudeNearestToEquator,\n    maximumHeight,\n    ellipsoid,\n    scratchPlaneOrigin,\n  );\n  planeOrigin.z = 0.0; // center the plane on the equator to simpify plane normal calculation\n  const isPole =\n    Math.abs(planeOrigin.x) < CesiumMath.EPSILON10 &&\n    Math.abs(planeOrigin.y) < CesiumMath.EPSILON10;\n  const planeNormal = !isPole\n    ? Cartesian3.normalize(planeOrigin, scratchPlaneNormal)\n    : Cartesian3.UNIT_X;\n  const planeYAxis = Cartesian3.UNIT_Z;\n  const planeXAxis = Cartesian3.cross(\n    planeNormal,\n    planeYAxis,\n    scratchPlaneXAxis,\n  );\n  plane = Plane.fromPointNormal(planeOrigin, planeNormal, scratchPlane);\n\n  // Get the horizon point relative to the center. This will be the farthest extent in the plane's X dimension.\n  const horizonCartesian = Cartesian3.fromRadians(\n    centerLongitude + CesiumMath.PI_OVER_TWO,\n    latitudeNearestToEquator,\n    maximumHeight,\n    ellipsoid,\n    scratchHorizonCartesian,\n  );\n  maxX = Cartesian3.dot(\n    Plane.projectPointOntoPlane(\n      plane,\n      horizonCartesian,\n      scratchHorizonProjected,\n    ),\n    planeXAxis,\n  );\n  minX = -maxX; // symmetrical\n\n  // Get the min and max Y, using the height that will give the largest extent\n  maxY = Cartesian3.fromRadians(\n    0.0,\n    rectangle.north,\n    fullyBelowEquator ? minimumHeight : maximumHeight,\n    ellipsoid,\n    scratchMaxY,\n  ).z;\n  minY = Cartesian3.fromRadians(\n    0.0,\n    rectangle.south,\n    fullyAboveEquator ? minimumHeight : maximumHeight,\n    ellipsoid,\n    scratchMinY,\n  ).z;\n\n  const farZ = Cartesian3.fromRadians(\n    rectangle.east,\n    latitudeNearestToEquator,\n    maximumHeight,\n    ellipsoid,\n    scratchZ,\n  );\n  minZ = Plane.getPointDistance(plane, farZ);\n  maxZ = 0.0; // plane origin starts at maxZ already\n\n  // min and max are local to the plane axes\n  return fromPlaneExtents(\n    planeOrigin,\n    planeXAxis,\n    planeYAxis,\n    planeNormal,\n    minX,\n    maxX,\n    minY,\n    maxY,\n    minZ,\n    maxZ,\n    result,\n  );\n};\n\n/**\n * Computes an OrientedBoundingBox that bounds an affine transformation.\n *\n * @param {Matrix4} transformation The affine transformation.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided.\n */\nOrientedBoundingBox.fromTransformation = function (transformation, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"transformation\", transformation);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new OrientedBoundingBox();\n  }\n\n  result.center = Matrix4.getTranslation(transformation, result.center);\n  result.halfAxes = Matrix4.getMatrix3(transformation, result.halfAxes);\n  result.halfAxes = Matrix3.multiplyByScalar(\n    result.halfAxes,\n    0.5,\n    result.halfAxes,\n  );\n  return result;\n};\n\n/**\n * Duplicates a OrientedBoundingBox instance.\n *\n * @param {OrientedBoundingBox} box The bounding box to duplicate.\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. (Returns undefined if box is undefined)\n */\nOrientedBoundingBox.clone = function (box, result) {\n  if (!defined(box)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new OrientedBoundingBox(box.center, box.halfAxes);\n  }\n\n  Cartesian3.clone(box.center, result.center);\n  Matrix3.clone(box.halfAxes, result.halfAxes);\n\n  return result;\n};\n\n/**\n * Determines which side of a plane the oriented bounding box is located.\n *\n * @param {OrientedBoundingBox} box The oriented bounding box to test.\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the box\n *                      intersects the plane.\n */\nOrientedBoundingBox.intersectPlane = function (box, plane) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(box)) {\n    throw new DeveloperError(\"box is required.\");\n  }\n\n  if (!defined(plane)) {\n    throw new DeveloperError(\"plane is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const center = box.center;\n  const normal = plane.normal;\n  const halfAxes = box.halfAxes;\n  const normalX = normal.x,\n    normalY = normal.y,\n    normalZ = normal.z;\n  // plane is used as if it is its normal; the first three components are assumed to be normalized\n  const radEffective =\n    Math.abs(\n      normalX * halfAxes[Matrix3.COLUMN0ROW0] +\n        normalY * halfAxes[Matrix3.COLUMN0ROW1] +\n        normalZ * halfAxes[Matrix3.COLUMN0ROW2],\n    ) +\n    Math.abs(\n      normalX * halfAxes[Matrix3.COLUMN1ROW0] +\n        normalY * halfAxes[Matrix3.COLUMN1ROW1] +\n        normalZ * halfAxes[Matrix3.COLUMN1ROW2],\n    ) +\n    Math.abs(\n      normalX * halfAxes[Matrix3.COLUMN2ROW0] +\n        normalY * halfAxes[Matrix3.COLUMN2ROW1] +\n        normalZ * halfAxes[Matrix3.COLUMN2ROW2],\n    );\n  const distanceToPlane = Cartesian3.dot(normal, center) + plane.distance;\n\n  if (distanceToPlane <= -radEffective) {\n    // The entire box is on the negative side of the plane normal\n    return Intersect.OUTSIDE;\n  } else if (distanceToPlane >= radEffective) {\n    // The entire box is on the positive side of the plane normal\n    return Intersect.INSIDE;\n  }\n  return Intersect.INTERSECTING;\n};\n\nconst scratchCartesianU = new Cartesian3();\nconst scratchCartesianV = new Cartesian3();\nconst scratchCartesianW = new Cartesian3();\nconst scratchValidAxis2 = new Cartesian3();\nconst scratchValidAxis3 = new Cartesian3();\nconst scratchPPrime = new Cartesian3();\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\n *\n * @param {OrientedBoundingBox} box The box.\n * @param {Cartesian3} cartesian The point\n * @returns {number} The distance squared from the oriented bounding box to the point. Returns 0 if the point is inside the box.\n *\n * @example\n * // Sort bounding boxes from back to front\n * boxes.sort(function(a, b) {\n *     return Cesium.OrientedBoundingBox.distanceSquaredTo(b, camera.positionWC) - Cesium.OrientedBoundingBox.distanceSquaredTo(a, camera.positionWC);\n * });\n */\nOrientedBoundingBox.distanceSquaredTo = function (box, cartesian) {\n  // See Geometric Tools for Computer Graphics 10.4.2\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(box)) {\n    throw new DeveloperError(\"box is required.\");\n  }\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const offset = Cartesian3.subtract(cartesian, box.center, scratchOffset);\n\n  const halfAxes = box.halfAxes;\n  let u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\n  let v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\n  let w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\n\n  const uHalf = Cartesian3.magnitude(u);\n  const vHalf = Cartesian3.magnitude(v);\n  const wHalf = Cartesian3.magnitude(w);\n\n  let uValid = true;\n  let vValid = true;\n  let wValid = true;\n\n  if (uHalf > 0) {\n    Cartesian3.divideByScalar(u, uHalf, u);\n  } else {\n    uValid = false;\n  }\n\n  if (vHalf > 0) {\n    Cartesian3.divideByScalar(v, vHalf, v);\n  } else {\n    vValid = false;\n  }\n\n  if (wHalf > 0) {\n    Cartesian3.divideByScalar(w, wHalf, w);\n  } else {\n    wValid = false;\n  }\n\n  const numberOfDegenerateAxes = !uValid + !vValid + !wValid;\n  let validAxis1;\n  let validAxis2;\n  let validAxis3;\n\n  if (numberOfDegenerateAxes === 1) {\n    let degenerateAxis = u;\n    validAxis1 = v;\n    validAxis2 = w;\n    if (!vValid) {\n      degenerateAxis = v;\n      validAxis1 = u;\n    } else if (!wValid) {\n      degenerateAxis = w;\n      validAxis2 = u;\n    }\n\n    validAxis3 = Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3);\n\n    if (degenerateAxis === u) {\n      u = validAxis3;\n    } else if (degenerateAxis === v) {\n      v = validAxis3;\n    } else if (degenerateAxis === w) {\n      w = validAxis3;\n    }\n  } else if (numberOfDegenerateAxes === 2) {\n    validAxis1 = u;\n    if (vValid) {\n      validAxis1 = v;\n    } else if (wValid) {\n      validAxis1 = w;\n    }\n\n    let crossVector = Cartesian3.UNIT_Y;\n    if (crossVector.equalsEpsilon(validAxis1, CesiumMath.EPSILON3)) {\n      crossVector = Cartesian3.UNIT_X;\n    }\n\n    validAxis2 = Cartesian3.cross(validAxis1, crossVector, scratchValidAxis2);\n    Cartesian3.normalize(validAxis2, validAxis2);\n    validAxis3 = Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3);\n    Cartesian3.normalize(validAxis3, validAxis3);\n\n    if (validAxis1 === u) {\n      v = validAxis2;\n      w = validAxis3;\n    } else if (validAxis1 === v) {\n      w = validAxis2;\n      u = validAxis3;\n    } else if (validAxis1 === w) {\n      u = validAxis2;\n      v = validAxis3;\n    }\n  } else if (numberOfDegenerateAxes === 3) {\n    u = Cartesian3.UNIT_X;\n    v = Cartesian3.UNIT_Y;\n    w = Cartesian3.UNIT_Z;\n  }\n\n  const pPrime = scratchPPrime;\n  pPrime.x = Cartesian3.dot(offset, u);\n  pPrime.y = Cartesian3.dot(offset, v);\n  pPrime.z = Cartesian3.dot(offset, w);\n\n  let distanceSquared = 0.0;\n  let d;\n\n  if (pPrime.x < -uHalf) {\n    d = pPrime.x + uHalf;\n    distanceSquared += d * d;\n  } else if (pPrime.x > uHalf) {\n    d = pPrime.x - uHalf;\n    distanceSquared += d * d;\n  }\n\n  if (pPrime.y < -vHalf) {\n    d = pPrime.y + vHalf;\n    distanceSquared += d * d;\n  } else if (pPrime.y > vHalf) {\n    d = pPrime.y - vHalf;\n    distanceSquared += d * d;\n  }\n\n  if (pPrime.z < -wHalf) {\n    d = pPrime.z + wHalf;\n    distanceSquared += d * d;\n  } else if (pPrime.z > wHalf) {\n    d = pPrime.z - wHalf;\n    distanceSquared += d * d;\n  }\n\n  return distanceSquared;\n};\n\nconst scratchCorner = new Cartesian3();\nconst scratchToCenter = new Cartesian3();\n\n/**\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding box.\n *\n * @param {OrientedBoundingBox} box The bounding box to calculate the distance to.\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\n */\nOrientedBoundingBox.computePlaneDistances = function (\n  box,\n  position,\n  direction,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(box)) {\n    throw new DeveloperError(\"box is required.\");\n  }\n\n  if (!defined(position)) {\n    throw new DeveloperError(\"position is required.\");\n  }\n\n  if (!defined(direction)) {\n    throw new DeveloperError(\"direction is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Interval();\n  }\n\n  let minDist = Number.POSITIVE_INFINITY;\n  let maxDist = Number.NEGATIVE_INFINITY;\n\n  const center = box.center;\n  const halfAxes = box.halfAxes;\n\n  const u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\n  const v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\n  const w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\n\n  // project first corner\n  const corner = Cartesian3.add(u, v, scratchCorner);\n  Cartesian3.add(corner, w, corner);\n  Cartesian3.add(corner, center, corner);\n\n  const toCenter = Cartesian3.subtract(corner, position, scratchToCenter);\n  let mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  // project second corner\n  Cartesian3.add(center, u, corner);\n  Cartesian3.add(corner, v, corner);\n  Cartesian3.subtract(corner, w, corner);\n\n  Cartesian3.subtract(corner, position, toCenter);\n  mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  // project third corner\n  Cartesian3.add(center, u, corner);\n  Cartesian3.subtract(corner, v, corner);\n  Cartesian3.add(corner, w, corner);\n\n  Cartesian3.subtract(corner, position, toCenter);\n  mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  // project fourth corner\n  Cartesian3.add(center, u, corner);\n  Cartesian3.subtract(corner, v, corner);\n  Cartesian3.subtract(corner, w, corner);\n\n  Cartesian3.subtract(corner, position, toCenter);\n  mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  // project fifth corner\n  Cartesian3.subtract(center, u, corner);\n  Cartesian3.add(corner, v, corner);\n  Cartesian3.add(corner, w, corner);\n\n  Cartesian3.subtract(corner, position, toCenter);\n  mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  // project sixth corner\n  Cartesian3.subtract(center, u, corner);\n  Cartesian3.add(corner, v, corner);\n  Cartesian3.subtract(corner, w, corner);\n\n  Cartesian3.subtract(corner, position, toCenter);\n  mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  // project seventh corner\n  Cartesian3.subtract(center, u, corner);\n  Cartesian3.subtract(corner, v, corner);\n  Cartesian3.add(corner, w, corner);\n\n  Cartesian3.subtract(corner, position, toCenter);\n  mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  // project eighth corner\n  Cartesian3.subtract(center, u, corner);\n  Cartesian3.subtract(corner, v, corner);\n  Cartesian3.subtract(corner, w, corner);\n\n  Cartesian3.subtract(corner, position, toCenter);\n  mag = Cartesian3.dot(direction, toCenter);\n\n  minDist = Math.min(mag, minDist);\n  maxDist = Math.max(mag, maxDist);\n\n  result.start = minDist;\n  result.stop = maxDist;\n  return result;\n};\n\nconst scratchXAxis = new Cartesian3();\nconst scratchYAxis = new Cartesian3();\nconst scratchZAxis = new Cartesian3();\n\n/**\n * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).\n *\n * @param {OrientedBoundingBox} box The oriented bounding box.\n * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners.\n * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided.\n */\nOrientedBoundingBox.computeCorners = function (box, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"box\", box);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = [\n      new Cartesian3(),\n      new Cartesian3(),\n      new Cartesian3(),\n      new Cartesian3(),\n      new Cartesian3(),\n      new Cartesian3(),\n      new Cartesian3(),\n      new Cartesian3(),\n    ];\n  }\n\n  const center = box.center;\n  const halfAxes = box.halfAxes;\n  const xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\n  const yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\n  const zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\n\n  Cartesian3.clone(center, result[0]);\n  Cartesian3.subtract(result[0], xAxis, result[0]);\n  Cartesian3.subtract(result[0], yAxis, result[0]);\n  Cartesian3.subtract(result[0], zAxis, result[0]);\n\n  Cartesian3.clone(center, result[1]);\n  Cartesian3.subtract(result[1], xAxis, result[1]);\n  Cartesian3.subtract(result[1], yAxis, result[1]);\n  Cartesian3.add(result[1], zAxis, result[1]);\n\n  Cartesian3.clone(center, result[2]);\n  Cartesian3.subtract(result[2], xAxis, result[2]);\n  Cartesian3.add(result[2], yAxis, result[2]);\n  Cartesian3.subtract(result[2], zAxis, result[2]);\n\n  Cartesian3.clone(center, result[3]);\n  Cartesian3.subtract(result[3], xAxis, result[3]);\n  Cartesian3.add(result[3], yAxis, result[3]);\n  Cartesian3.add(result[3], zAxis, result[3]);\n\n  Cartesian3.clone(center, result[4]);\n  Cartesian3.add(result[4], xAxis, result[4]);\n  Cartesian3.subtract(result[4], yAxis, result[4]);\n  Cartesian3.subtract(result[4], zAxis, result[4]);\n\n  Cartesian3.clone(center, result[5]);\n  Cartesian3.add(result[5], xAxis, result[5]);\n  Cartesian3.subtract(result[5], yAxis, result[5]);\n  Cartesian3.add(result[5], zAxis, result[5]);\n\n  Cartesian3.clone(center, result[6]);\n  Cartesian3.add(result[6], xAxis, result[6]);\n  Cartesian3.add(result[6], yAxis, result[6]);\n  Cartesian3.subtract(result[6], zAxis, result[6]);\n\n  Cartesian3.clone(center, result[7]);\n  Cartesian3.add(result[7], xAxis, result[7]);\n  Cartesian3.add(result[7], yAxis, result[7]);\n  Cartesian3.add(result[7], zAxis, result[7]);\n\n  return result;\n};\n\nconst scratchRotationScale = new Matrix3();\n\n/**\n * Computes a transformation matrix from an oriented bounding box.\n *\n * @param {OrientedBoundingBox} box The oriented bounding box.\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided.\n */\nOrientedBoundingBox.computeTransformation = function (box, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"box\", box);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Matrix4();\n  }\n\n  const translation = box.center;\n  const rotationScale = Matrix3.multiplyByUniformScale(\n    box.halfAxes,\n    2.0,\n    scratchRotationScale,\n  );\n  return Matrix4.fromRotationTranslation(rotationScale, translation, result);\n};\n\nconst scratchBoundingSphere = new BoundingSphere();\n\n/**\n * Determines whether or not a bounding box is hidden from view by the occluder.\n *\n * @param {OrientedBoundingBox} box The bounding box surrounding the occludee object.\n * @param {Occluder} occluder The occluder.\n * @returns {boolean} <code>true</code> if the box is not visible; otherwise <code>false</code>.\n */\nOrientedBoundingBox.isOccluded = function (box, occluder) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(box)) {\n    throw new DeveloperError(\"box is required.\");\n  }\n  if (!defined(occluder)) {\n    throw new DeveloperError(\"occluder is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const sphere = BoundingSphere.fromOrientedBoundingBox(\n    box,\n    scratchBoundingSphere,\n  );\n\n  return !occluder.isBoundingSphereVisible(sphere);\n};\n\n/**\n * Determines which side of a plane the oriented bounding box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the box\n *                      intersects the plane.\n */\nOrientedBoundingBox.prototype.intersectPlane = function (plane) {\n  return OrientedBoundingBox.intersectPlane(this, plane);\n};\n\n/**\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\n *\n * @param {Cartesian3} cartesian The point\n * @returns {number} The estimated distance squared from the bounding sphere to the point.\n *\n * @example\n * // Sort bounding boxes from back to front\n * boxes.sort(function(a, b) {\n *     return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);\n * });\n */\nOrientedBoundingBox.prototype.distanceSquaredTo = function (cartesian) {\n  return OrientedBoundingBox.distanceSquaredTo(this, cartesian);\n};\n\n/**\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\n * <br>\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\n * closest and farthest planes from position that intersect the bounding box.\n *\n * @param {Cartesian3} position The position to calculate the distance from.\n * @param {Cartesian3} direction The direction from position.\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\n */\nOrientedBoundingBox.prototype.computePlaneDistances = function (\n  position,\n  direction,\n  result,\n) {\n  return OrientedBoundingBox.computePlaneDistances(\n    this,\n    position,\n    direction,\n    result,\n  );\n};\n\n/**\n * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).\n *\n * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners.\n * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided.\n */\nOrientedBoundingBox.prototype.computeCorners = function (result) {\n  return OrientedBoundingBox.computeCorners(this, result);\n};\n\n/**\n * Computes a transformation matrix from an oriented bounding box.\n *\n * @param {Matrix4} result The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided.\n */\nOrientedBoundingBox.prototype.computeTransformation = function (result) {\n  return OrientedBoundingBox.computeTransformation(this, result);\n};\n\n/**\n * Determines whether or not a bounding box is hidden from view by the occluder.\n *\n * @param {Occluder} occluder The occluder.\n * @returns {boolean} <code>true</code> if the sphere is not visible; otherwise <code>false</code>.\n */\nOrientedBoundingBox.prototype.isOccluded = function (occluder) {\n  return OrientedBoundingBox.isOccluded(this, occluder);\n};\n\n/**\n * Compares the provided OrientedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrientedBoundingBox} [left] The first OrientedBoundingBox.\n * @param {OrientedBoundingBox} [right] The second OrientedBoundingBox.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nOrientedBoundingBox.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Cartesian3.equals(left.center, right.center) &&\n      Matrix3.equals(left.halfAxes, right.halfAxes))\n  );\n};\n\n/**\n * Duplicates this OrientedBoundingBox instance.\n *\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\n */\nOrientedBoundingBox.prototype.clone = function (result) {\n  return OrientedBoundingBox.clone(this, result);\n};\n\n/**\n * Compares this OrientedBoundingBox against the provided OrientedBoundingBox componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrientedBoundingBox} [right] The right hand side OrientedBoundingBox.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrientedBoundingBox.prototype.equals = function (right) {\n  return OrientedBoundingBox.equals(this, right);\n};\nexport default OrientedBoundingBox;\n","import Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrthographicOffCenterFrustum from \"./OrthographicOffCenterFrustum.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias OrthographicFrustum\n * @constructor\n *\n * @param {object} [options] An object with the following properties:\n * @param {number} [options.width] The width of the frustum in meters.\n * @param {number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\n * @param {number} [options.near=1.0] The distance of the near plane.\n * @param {number} [options.far=500000000.0] The distance of the far plane.\n *\n * @example\n * const maxRadii = ellipsoid.maximumRadius;\n *\n * const frustum = new Cesium.OrthographicFrustum();\n * frustum.near = 0.01 * maxRadii;\n * frustum.far = 50.0 * maxRadii;\n */\nfunction OrthographicFrustum(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._offCenterFrustum = new OrthographicOffCenterFrustum();\n\n  /**\n   * The horizontal width of the frustum in meters.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.width = options.width;\n  this._width = undefined;\n\n  /**\n   * The aspect ratio of the frustum's width to it's height.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.aspectRatio = options.aspectRatio;\n  this._aspectRatio = undefined;\n\n  /**\n   * The distance of the near plane.\n   * @type {number}\n   * @default 1.0\n   */\n  this.near = options.near ?? 1.0;\n  this._near = this.near;\n\n  /**\n   * The distance of the far plane.\n   * @type {number}\n   * @default 500000000.0;\n   */\n  this.far = options.far ?? 500000000.0;\n  this._far = this.far;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nOrthographicFrustum.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {OrthographicFrustum} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nOrthographicFrustum.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.width;\n  array[startingIndex++] = value.aspectRatio;\n  array[startingIndex++] = value.near;\n  array[startingIndex] = value.far;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {OrthographicFrustum} [result] The object into which to store the result.\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\n */\nOrthographicFrustum.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new OrthographicFrustum();\n  }\n\n  result.width = array[startingIndex++];\n  result.aspectRatio = array[startingIndex++];\n  result.near = array[startingIndex++];\n  result.far = array[startingIndex];\n\n  return result;\n};\n\nfunction update(frustum) {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(frustum.width) ||\n    !defined(frustum.aspectRatio) ||\n    !defined(frustum.near) ||\n    !defined(frustum.far)\n  ) {\n    throw new DeveloperError(\n      \"width, aspectRatio, near, or far parameters are not set.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const f = frustum._offCenterFrustum;\n\n  if (\n    frustum.width !== frustum._width ||\n    frustum.aspectRatio !== frustum._aspectRatio ||\n    frustum.near !== frustum._near ||\n    frustum.far !== frustum._far\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    if (frustum.aspectRatio < 0) {\n      throw new DeveloperError(\"aspectRatio must be positive.\");\n    }\n    if (frustum.near < 0 || frustum.near > frustum.far) {\n      throw new DeveloperError(\n        \"near must be greater than zero and less than far.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    frustum._aspectRatio = frustum.aspectRatio;\n    frustum._width = frustum.width;\n    frustum._near = frustum.near;\n    frustum._far = frustum.far;\n\n    const ratio = 1.0 / frustum.aspectRatio;\n    f.right = frustum.width * 0.5;\n    f.left = -f.right;\n    f.top = ratio * f.right;\n    f.bottom = -f.top;\n    f.near = frustum.near;\n    f.far = frustum.far;\n  }\n}\n\nObject.defineProperties(OrthographicFrustum.prototype, {\n  /**\n   * Gets the orthographic projection matrix computed from the view frustum.\n   * @memberof OrthographicFrustum.prototype\n   * @type {Matrix4}\n   * @readonly\n   */\n  projectionMatrix: {\n    get: function () {\n      update(this);\n      return this._offCenterFrustum.projectionMatrix;\n    },\n  },\n  /**\n   * Gets the orthographic projection matrix computed from the view frustum.\n   * @memberof OrthographicFrustum.prototype\n   * @type {OrthographicOffCenterFrustum}\n   * @readonly\n   * @private\n   */\n  offCenterFrustum: {\n    get: function () {\n      update(this);\n      return this._offCenterFrustum;\n    },\n  },\n});\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nOrthographicFrustum.prototype.computeCullingVolume = function (\n  position,\n  direction,\n  up,\n) {\n  update(this);\n  return this._offCenterFrustum.computeCullingVolume(position, direction, up);\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {number} drawingBufferWidth The width of the drawing buffer.\n * @param {number} drawingBufferHeight The height of the drawing buffer.\n * @param {number} distance The distance to the near plane in meters.\n * @param {number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\n */\nOrthographicFrustum.prototype.getPixelDimensions = function (\n  drawingBufferWidth,\n  drawingBufferHeight,\n  distance,\n  pixelRatio,\n  result,\n) {\n  update(this);\n  return this._offCenterFrustum.getPixelDimensions(\n    drawingBufferWidth,\n    drawingBufferHeight,\n    distance,\n    pixelRatio,\n    result,\n  );\n};\n\n/**\n * Returns a duplicate of a OrthographicFrustum instance.\n *\n * @param {OrthographicFrustum} [result] The object onto which to store the result.\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\n */\nOrthographicFrustum.prototype.clone = function (result) {\n  if (!defined(result)) {\n    result = new OrthographicFrustum();\n  }\n\n  result.aspectRatio = this.aspectRatio;\n  result.width = this.width;\n  result.near = this.near;\n  result.far = this.far;\n\n  // force update of clone to compute matrices\n  result._aspectRatio = undefined;\n  result._width = undefined;\n  result._near = undefined;\n  result._far = undefined;\n\n  this._offCenterFrustum.clone(result._offCenterFrustum);\n\n  return result;\n};\n\n/**\n * Compares the provided OrthographicFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrthographicFrustum} [other] The right hand side OrthographicFrustum.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrthographicFrustum.prototype.equals = function (other) {\n  if (!defined(other) || !(other instanceof OrthographicFrustum)) {\n    return false;\n  }\n\n  update(this);\n  update(other);\n\n  return (\n    this.width === other.width &&\n    this.aspectRatio === other.aspectRatio &&\n    this._offCenterFrustum.equals(other._offCenterFrustum)\n  );\n};\n\n/**\n * Compares the provided OrthographicFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {OrthographicFrustum} other The right hand side OrthographicFrustum.\n * @param {number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nOrthographicFrustum.prototype.equalsEpsilon = function (\n  other,\n  relativeEpsilon,\n  absoluteEpsilon,\n) {\n  if (!defined(other) || !(other instanceof OrthographicFrustum)) {\n    return false;\n  }\n\n  update(this);\n  update(other);\n\n  return (\n    CesiumMath.equalsEpsilon(\n      this.width,\n      other.width,\n      relativeEpsilon,\n      absoluteEpsilon,\n    ) &&\n    CesiumMath.equalsEpsilon(\n      this.aspectRatio,\n      other.aspectRatio,\n      relativeEpsilon,\n      absoluteEpsilon,\n    ) &&\n    this._offCenterFrustum.equalsEpsilon(\n      other._offCenterFrustum,\n      relativeEpsilon,\n      absoluteEpsilon,\n    )\n  );\n};\nexport default OrthographicFrustum;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport CullingVolume from \"./CullingVolume.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias OrthographicOffCenterFrustum\n * @constructor\n *\n * @param {object} [options] An object with the following properties:\n * @param {number} [options.left] The left clipping plane distance.\n * @param {number} [options.right] The right clipping plane distance.\n * @param {number} [options.top] The top clipping plane distance.\n * @param {number} [options.bottom] The bottom clipping plane distance.\n * @param {number} [options.near=1.0] The near clipping plane distance.\n * @param {number} [options.far=500000000.0] The far clipping plane distance.\n *\n * @example\n * const maxRadii = ellipsoid.maximumRadius;\n *\n * const frustum = new Cesium.OrthographicOffCenterFrustum();\n * frustum.right = maxRadii * Cesium.Math.PI;\n * frustum.left = -c.frustum.right;\n * frustum.top = c.frustum.right * (canvas.clientHeight / canvas.clientWidth);\n * frustum.bottom = -c.frustum.top;\n * frustum.near = 0.01 * maxRadii;\n * frustum.far = 50.0 * maxRadii;\n */\nfunction OrthographicOffCenterFrustum(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The left clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.left = options.left;\n  this._left = undefined;\n\n  /**\n   * The right clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.right = options.right;\n  this._right = undefined;\n\n  /**\n   * The top clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.top = options.top;\n  this._top = undefined;\n\n  /**\n   * The bottom clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.bottom = options.bottom;\n  this._bottom = undefined;\n\n  /**\n   * The distance of the near plane.\n   * @type {number}\n   * @default 1.0\n   */\n  this.near = options.near ?? 1.0;\n  this._near = this.near;\n\n  /**\n   * The distance of the far plane.\n   * @type {number}\n   * @default 500000000.0;\n   */\n  this.far = options.far ?? 500000000.0;\n  this._far = this.far;\n\n  this._cullingVolume = new CullingVolume();\n  this._orthographicMatrix = new Matrix4();\n}\n\nfunction update(frustum) {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(frustum.right) ||\n    !defined(frustum.left) ||\n    !defined(frustum.top) ||\n    !defined(frustum.bottom) ||\n    !defined(frustum.near) ||\n    !defined(frustum.far)\n  ) {\n    throw new DeveloperError(\n      \"right, left, top, bottom, near, or far parameters are not set.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (\n    frustum.top !== frustum._top ||\n    frustum.bottom !== frustum._bottom ||\n    frustum.left !== frustum._left ||\n    frustum.right !== frustum._right ||\n    frustum.near !== frustum._near ||\n    frustum.far !== frustum._far\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    if (frustum.left > frustum.right) {\n      throw new DeveloperError(\"right must be greater than left.\");\n    }\n    if (frustum.bottom > frustum.top) {\n      throw new DeveloperError(\"top must be greater than bottom.\");\n    }\n    if (frustum.near <= 0 || frustum.near > frustum.far) {\n      throw new DeveloperError(\n        \"near must be greater than zero and less than far.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    frustum._left = frustum.left;\n    frustum._right = frustum.right;\n    frustum._top = frustum.top;\n    frustum._bottom = frustum.bottom;\n    frustum._near = frustum.near;\n    frustum._far = frustum.far;\n    frustum._orthographicMatrix = Matrix4.computeOrthographicOffCenter(\n      frustum.left,\n      frustum.right,\n      frustum.bottom,\n      frustum.top,\n      frustum.near,\n      frustum.far,\n      frustum._orthographicMatrix,\n    );\n  }\n}\n\nObject.defineProperties(OrthographicOffCenterFrustum.prototype, {\n  /**\n   * Gets the orthographic projection matrix computed from the view frustum.\n   * @memberof OrthographicOffCenterFrustum.prototype\n   * @type {Matrix4}\n   * @readonly\n   */\n  projectionMatrix: {\n    get: function () {\n      update(this);\n      return this._orthographicMatrix;\n    },\n  },\n});\n\nconst getPlanesRight = new Cartesian3();\nconst getPlanesNearCenter = new Cartesian3();\nconst getPlanesPoint = new Cartesian3();\nconst negateScratch = new Cartesian3();\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nOrthographicOffCenterFrustum.prototype.computeCullingVolume = function (\n  position,\n  direction,\n  up,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(position)) {\n    throw new DeveloperError(\"position is required.\");\n  }\n  if (!defined(direction)) {\n    throw new DeveloperError(\"direction is required.\");\n  }\n  if (!defined(up)) {\n    throw new DeveloperError(\"up is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const planes = this._cullingVolume.planes;\n  const t = this.top;\n  const b = this.bottom;\n  const r = this.right;\n  const l = this.left;\n  const n = this.near;\n  const f = this.far;\n\n  const right = Cartesian3.cross(direction, up, getPlanesRight);\n  Cartesian3.normalize(right, right);\n  const nearCenter = getPlanesNearCenter;\n  Cartesian3.multiplyByScalar(direction, n, nearCenter);\n  Cartesian3.add(position, nearCenter, nearCenter);\n\n  const point = getPlanesPoint;\n\n  // Left plane\n  Cartesian3.multiplyByScalar(right, l, point);\n  Cartesian3.add(nearCenter, point, point);\n\n  let plane = planes[0];\n  if (!defined(plane)) {\n    plane = planes[0] = new Cartesian4();\n  }\n  plane.x = right.x;\n  plane.y = right.y;\n  plane.z = right.z;\n  plane.w = -Cartesian3.dot(right, point);\n\n  // Right plane\n  Cartesian3.multiplyByScalar(right, r, point);\n  Cartesian3.add(nearCenter, point, point);\n\n  plane = planes[1];\n  if (!defined(plane)) {\n    plane = planes[1] = new Cartesian4();\n  }\n  plane.x = -right.x;\n  plane.y = -right.y;\n  plane.z = -right.z;\n  plane.w = -Cartesian3.dot(Cartesian3.negate(right, negateScratch), point);\n\n  // Bottom plane\n  Cartesian3.multiplyByScalar(up, b, point);\n  Cartesian3.add(nearCenter, point, point);\n\n  plane = planes[2];\n  if (!defined(plane)) {\n    plane = planes[2] = new Cartesian4();\n  }\n  plane.x = up.x;\n  plane.y = up.y;\n  plane.z = up.z;\n  plane.w = -Cartesian3.dot(up, point);\n\n  // Top plane\n  Cartesian3.multiplyByScalar(up, t, point);\n  Cartesian3.add(nearCenter, point, point);\n\n  plane = planes[3];\n  if (!defined(plane)) {\n    plane = planes[3] = new Cartesian4();\n  }\n  plane.x = -up.x;\n  plane.y = -up.y;\n  plane.z = -up.z;\n  plane.w = -Cartesian3.dot(Cartesian3.negate(up, negateScratch), point);\n\n  // Near plane\n  plane = planes[4];\n  if (!defined(plane)) {\n    plane = planes[4] = new Cartesian4();\n  }\n  plane.x = direction.x;\n  plane.y = direction.y;\n  plane.z = direction.z;\n  plane.w = -Cartesian3.dot(direction, nearCenter);\n\n  // Far plane\n  Cartesian3.multiplyByScalar(direction, f, point);\n  Cartesian3.add(position, point, point);\n\n  plane = planes[5];\n  if (!defined(plane)) {\n    plane = planes[5] = new Cartesian4();\n  }\n  plane.x = -direction.x;\n  plane.y = -direction.y;\n  plane.z = -direction.z;\n  plane.w = -Cartesian3.dot(Cartesian3.negate(direction, negateScratch), point);\n\n  return this._cullingVolume;\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {number} drawingBufferWidth The width of the drawing buffer.\n * @param {number} drawingBufferHeight The height of the drawing buffer.\n * @param {number} distance The distance to the near plane in meters.\n * @param {number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\n */\nOrthographicOffCenterFrustum.prototype.getPixelDimensions = function (\n  drawingBufferWidth,\n  drawingBufferHeight,\n  distance,\n  pixelRatio,\n  result,\n) {\n  update(this);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\n    throw new DeveloperError(\n      \"Both drawingBufferWidth and drawingBufferHeight are required.\",\n    );\n  }\n  if (drawingBufferWidth <= 0) {\n    throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\n  }\n  if (drawingBufferHeight <= 0) {\n    throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\n  }\n  if (!defined(distance)) {\n    throw new DeveloperError(\"distance is required.\");\n  }\n  if (!defined(pixelRatio)) {\n    throw new DeveloperError(\"pixelRatio is required.\");\n  }\n  if (pixelRatio <= 0) {\n    throw new DeveloperError(\"pixelRatio must be greater than zero.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"A result object is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const frustumWidth = this.right - this.left;\n  const frustumHeight = this.top - this.bottom;\n  const pixelWidth = (pixelRatio * frustumWidth) / drawingBufferWidth;\n  const pixelHeight = (pixelRatio * frustumHeight) / drawingBufferHeight;\n\n  result.x = pixelWidth;\n  result.y = pixelHeight;\n  return result;\n};\n\n/**\n * Returns a duplicate of a OrthographicOffCenterFrustum instance.\n *\n * @param {OrthographicOffCenterFrustum} [result] The object onto which to store the result.\n * @returns {OrthographicOffCenterFrustum} The modified result parameter or a new OrthographicOffCenterFrustum instance if one was not provided.\n */\nOrthographicOffCenterFrustum.prototype.clone = function (result) {\n  if (!defined(result)) {\n    result = new OrthographicOffCenterFrustum();\n  }\n\n  result.left = this.left;\n  result.right = this.right;\n  result.top = this.top;\n  result.bottom = this.bottom;\n  result.near = this.near;\n  result.far = this.far;\n\n  // force update of clone to compute matrices\n  result._left = undefined;\n  result._right = undefined;\n  result._top = undefined;\n  result._bottom = undefined;\n  result._near = undefined;\n  result._far = undefined;\n\n  return result;\n};\n\n/**\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {OrthographicOffCenterFrustum} [other] The right hand side OrthographicOffCenterFrustum.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nOrthographicOffCenterFrustum.prototype.equals = function (other) {\n  return (\n    defined(other) &&\n    other instanceof OrthographicOffCenterFrustum &&\n    this.right === other.right &&\n    this.left === other.left &&\n    this.top === other.top &&\n    this.bottom === other.bottom &&\n    this.near === other.near &&\n    this.far === other.far\n  );\n};\n\n/**\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {OrthographicOffCenterFrustum} other The right hand side OrthographicOffCenterFrustum.\n * @param {number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nOrthographicOffCenterFrustum.prototype.equalsEpsilon = function (\n  other,\n  relativeEpsilon,\n  absoluteEpsilon,\n) {\n  return (\n    other === this ||\n    (defined(other) &&\n      other instanceof OrthographicOffCenterFrustum &&\n      CesiumMath.equalsEpsilon(\n        this.right,\n        other.right,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.left,\n        other.left,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.top,\n        other.top,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.bottom,\n        other.bottom,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.near,\n        other.near,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.far,\n        other.far,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ))\n  );\n};\nexport default OrthographicOffCenterFrustum;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Static interface for types which can store their values as packed\n * elements in an array.  These methods and properties are expected to be\n * defined on a constructor function.\n *\n * @interface Packable\n *\n * @see PackableForInterpolation\n */\nconst Packable = {\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  packedLength: undefined,\n\n  /**\n   * Stores the provided instance into the provided array.\n   * @function\n   *\n   * @param {*} value The value to pack.\n   * @param {number[]} array The array to pack into.\n   * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n   */\n  pack: DeveloperError.throwInstantiationError,\n\n  /**\n   * Retrieves an instance from a packed array.\n   * @function\n   *\n   * @param {number[]} array The packed array.\n   * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n   * @param {object} [result] The object into which to store the result.\n   * @returns {object} The modified result parameter or a new Object instance if one was not provided.\n   */\n  unpack: DeveloperError.throwInstantiationError,\n};\nexport default Packable;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Static interface for {@link Packable} types which are interpolated in a\n * different representation than their packed value.  These methods and\n * properties are expected to be defined on a constructor function.\n *\n * @namespace PackableForInterpolation\n *\n * @see Packable\n */\nconst PackableForInterpolation = {\n  /**\n   * The number of elements used to store the object into an array in its interpolatable form.\n   * @type {number}\n   */\n  packedInterpolationLength: undefined,\n\n  /**\n   * Converts a packed array into a form suitable for interpolation.\n   * @function\n   *\n   * @param {number[]} packedArray The packed array.\n   * @param {number} [startingIndex=0] The index of the first element to be converted.\n   * @param {number} [lastIndex=packedArray.length] The index of the last element to be converted.\n   * @param {number[]} [result] The object into which to store the result.\n   */\n  convertPackedArrayForInterpolation: DeveloperError.throwInstantiationError,\n\n  /**\n   * Retrieves an instance from a packed array converted with {@link PackableForInterpolation.convertPackedArrayForInterpolation}.\n   * @function\n   *\n   * @param {number[]} array The array previously packed for interpolation.\n   * @param {number[]} sourceArray The original packed array.\n   * @param {number} [startingIndex=0] The startingIndex used to convert the array.\n   * @param {number} [lastIndex=packedArray.length] The lastIndex used to convert the array.\n   * @param {object} [result] The object into which to store the result.\n   * @returns {object} The modified result parameter or a new Object instance if one was not provided.\n   */\n  unpackInterpolationResult: DeveloperError.throwInstantiationError,\n};\nexport default PackableForInterpolation;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport GeocodeType from \"./GeocodeType.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * Provides geocoding via a {@link https://pelias.io/|Pelias} server.\n * @alias PeliasGeocoderService\n * @constructor\n *\n * @param {Resource|string} url The endpoint to the Pelias server.\n *\n * @example\n * // Configure a Viewer to use the Pelias server hosted by https://geocode.earth/\n * const viewer = new Cesium.Viewer('cesiumContainer', {\n *   geocoder: new Cesium.PeliasGeocoderService(new Cesium.Resource({\n *     url: 'https://api.geocode.earth/v1/',\n *       queryParameters: {\n *         api_key: '<Your geocode.earth API key>'\n *     }\n *   }))\n * });\n */\nfunction PeliasGeocoderService(url) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  this._url = Resource.createIfNeeded(url);\n  this._url.appendForwardSlash();\n}\n\nObject.defineProperties(PeliasGeocoderService.prototype, {\n  /**\n   * The Resource used to access the Pelias endpoint.\n   * @type {Resource}\n   * @memberof PeliasGeocoderService.prototype\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._url;\n    },\n  },\n  /**\n   * Gets the credit to display after a geocode is performed. Typically this is used to credit\n   * the geocoder service.\n   * @memberof PeliasGeocoderService.prototype\n   * @type {Credit|undefined}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return undefined;\n    },\n  },\n});\n\n/**\n * @function\n *\n * @param {string} query The query to be sent to the geocoder service\n * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform.\n * @returns {Promise<GeocoderService.Result[]>}\n */\nPeliasGeocoderService.prototype.geocode = async function (query, type) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"query\", query);\n  //>>includeEnd('debug');\n\n  const resource = this._url.getDerivedResource({\n    url: type === GeocodeType.AUTOCOMPLETE ? \"autocomplete\" : \"search\",\n    queryParameters: {\n      text: query,\n    },\n  });\n\n  return resource.fetchJson().then(function (results) {\n    return results.features.map(function (resultObject) {\n      let destination;\n      const bboxDegrees = resultObject.bbox;\n\n      if (defined(bboxDegrees)) {\n        destination = Rectangle.fromDegrees(\n          bboxDegrees[0],\n          bboxDegrees[1],\n          bboxDegrees[2],\n          bboxDegrees[3],\n        );\n      } else {\n        const lon = resultObject.geometry.coordinates[0];\n        const lat = resultObject.geometry.coordinates[1];\n        destination = Cartesian3.fromDegrees(lon, lat);\n      }\n\n      return {\n        displayName: resultObject.properties.label,\n        destination: destination,\n        attributions: results.attributions,\n      };\n    });\n  });\n};\nexport default PeliasGeocoderService;\n","import Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport PerspectiveOffCenterFrustum from \"./PerspectiveOffCenterFrustum.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias PerspectiveFrustum\n * @constructor\n *\n * @param {object} [options] An object with the following properties:\n * @param {number} [options.fov] The angle of the field of view (FOV), in radians.\n * @param {number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\n * @param {number} [options.near=1.0] The distance of the near plane.\n * @param {number} [options.far=500000000.0] The distance of the far plane.\n * @param {number} [options.xOffset=0.0] The offset in the x direction.\n * @param {number} [options.yOffset=0.0] The offset in the y direction.\n *\n * @example\n * const frustum = new Cesium.PerspectiveFrustum({\n *     fov : Cesium.Math.PI_OVER_THREE,\n *     aspectRatio : canvas.clientWidth / canvas.clientHeight\n *     near : 1.0,\n *     far : 1000.0\n * });\n *\n * @see PerspectiveOffCenterFrustum\n */\nfunction PerspectiveFrustum(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._offCenterFrustum = new PerspectiveOffCenterFrustum();\n\n  /**\n   * The angle of the field of view (FOV), in radians.  This angle will be used\n   * as the horizontal FOV if the width is greater than the height, otherwise\n   * it will be the vertical FOV.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.fov = options.fov;\n  this._fov = undefined;\n  this._fovy = undefined;\n\n  this._sseDenominator = undefined;\n\n  /**\n   * The aspect ratio of the frustum's width to it's height.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.aspectRatio = options.aspectRatio;\n  this._aspectRatio = undefined;\n\n  /**\n   * The distance of the near plane.\n   * @type {number}\n   * @default 1.0\n   */\n  this.near = options.near ?? 1.0;\n  this._near = this.near;\n\n  /**\n   * The distance of the far plane.\n   * @type {number}\n   * @default 500000000.0\n   */\n  this.far = options.far ?? 500000000.0;\n  this._far = this.far;\n\n  /**\n   * Offsets the frustum in the x direction.\n   * @type {number}\n   * @default 0.0\n   */\n  this.xOffset = options.xOffset ?? 0.0;\n  this._xOffset = this.xOffset;\n\n  /**\n   * Offsets the frustum in the y direction.\n   * @type {number}\n   * @default 0.0\n   */\n  this.yOffset = options.yOffset ?? 0.0;\n  this._yOffset = this.yOffset;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nPerspectiveFrustum.packedLength = 6;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PerspectiveFrustum} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nPerspectiveFrustum.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.fov;\n  array[startingIndex++] = value.aspectRatio;\n  array[startingIndex++] = value.near;\n  array[startingIndex++] = value.far;\n  array[startingIndex++] = value.xOffset;\n  array[startingIndex] = value.yOffset;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PerspectiveFrustum} [result] The object into which to store the result.\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveFrustum.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new PerspectiveFrustum();\n  }\n\n  result.fov = array[startingIndex++];\n  result.aspectRatio = array[startingIndex++];\n  result.near = array[startingIndex++];\n  result.far = array[startingIndex++];\n  result.xOffset = array[startingIndex++];\n  result.yOffset = array[startingIndex];\n\n  return result;\n};\n\nfunction update(frustum) {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(frustum.fov) ||\n    !defined(frustum.aspectRatio) ||\n    !defined(frustum.near) ||\n    !defined(frustum.far)\n  ) {\n    throw new DeveloperError(\n      \"fov, aspectRatio, near, or far parameters are not set.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const changed =\n    frustum.fov !== frustum._fov ||\n    frustum.aspectRatio !== frustum._aspectRatio ||\n    frustum.near !== frustum._near ||\n    frustum.far !== frustum._far ||\n    frustum.xOffset !== frustum._xOffset ||\n    frustum.yOffset !== frustum._yOffset;\n\n  if (!changed) {\n    return;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"fov\", frustum.fov, 0.0);\n  Check.typeOf.number.lessThan(\"fov\", frustum.fov, Math.PI);\n\n  Check.typeOf.number.greaterThanOrEquals(\n    \"aspectRatio\",\n    frustum.aspectRatio,\n    0.0,\n  );\n\n  Check.typeOf.number.greaterThanOrEquals(\"near\", frustum.near, 0.0);\n  if (frustum.near > frustum.far) {\n    throw new DeveloperError(\"near must be less than far.\");\n  }\n  //>>includeEnd('debug');\n\n  frustum._aspectRatio = frustum.aspectRatio;\n  frustum._fov = frustum.fov;\n  frustum._fovy =\n    frustum.aspectRatio <= 1\n      ? frustum.fov\n      : Math.atan(Math.tan(frustum.fov * 0.5) / frustum.aspectRatio) * 2.0;\n  frustum._near = frustum.near;\n  frustum._far = frustum.far;\n  frustum._sseDenominator = 2.0 * Math.tan(0.5 * frustum._fovy);\n  frustum._xOffset = frustum.xOffset;\n  frustum._yOffset = frustum.yOffset;\n\n  const f = frustum._offCenterFrustum;\n\n  f.top = frustum.near * Math.tan(0.5 * frustum._fovy);\n  f.bottom = -f.top;\n  f.right = frustum.aspectRatio * f.top;\n  f.left = -f.right;\n  f.near = frustum.near;\n  f.far = frustum.far;\n\n  f.right += frustum.xOffset;\n  f.left += frustum.xOffset;\n  f.top += frustum.yOffset;\n  f.bottom += frustum.yOffset;\n}\n\nObject.defineProperties(PerspectiveFrustum.prototype, {\n  /**\n   * Gets the perspective projection matrix computed from the view frustum.\n   * If necessary, the projection matrix will be recomputed.\n   *\n   * @memberof PerspectiveFrustum.prototype\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @see PerspectiveOffCenterFrustum#projectionMatrix.\n   * @see PerspectiveFrustum#infiniteProjectionMatrix\n   */\n  projectionMatrix: {\n    get: function () {\n      update(this);\n      return this._offCenterFrustum.projectionMatrix;\n    },\n  },\n\n  /**\n   * The perspective projection matrix computed from the view frustum with an infinite far plane.\n   * @memberof PerspectiveFrustum.prototype\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @see PerspectiveFrustum#projectionMatrix\n   */\n  infiniteProjectionMatrix: {\n    get: function () {\n      update(this);\n      return this._offCenterFrustum.infiniteProjectionMatrix;\n    },\n  },\n\n  /**\n   * Gets the angle of the vertical field of view, in radians.\n   * @memberof PerspectiveFrustum.prototype\n   * @type {number|undefined}\n   * @readonly\n   * @default undefined\n   */\n  fovy: {\n    get: function () {\n      update(this);\n      return this._fovy;\n    },\n  },\n\n  /**\n   * @readonly\n   * @private\n   */\n  sseDenominator: {\n    get: function () {\n      update(this);\n      return this._sseDenominator;\n    },\n  },\n\n  /**\n   * Gets the orthographic projection matrix computed from the view frustum.\n   * @memberof PerspectiveFrustum.prototype\n   * @type {PerspectiveOffCenterFrustum}\n   * @readonly\n   * @private\n   */\n  offCenterFrustum: {\n    get: function () {\n      update(this);\n      return this._offCenterFrustum;\n    },\n  },\n});\n\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nPerspectiveFrustum.prototype.computeCullingVolume = function (\n  position,\n  direction,\n  up,\n) {\n  update(this);\n  return this._offCenterFrustum.computeCullingVolume(position, direction, up);\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {number} drawingBufferWidth The width of the drawing buffer.\n * @param {number} drawingBufferHeight The height of the drawing buffer.\n * @param {number} distance The distance to the near plane in meters.\n * @param {number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\n *\n * @example\n * // Example 2\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\n * // For example, get the size of a pixel of an image on a billboard.\n * const position = camera.position;\n * const direction = camera.direction;\n * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3());      // vector from camera to a primitive\n * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\n * const distance = Cesium.Cartesian3.magnitude(toCenterProj);\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\n */\nPerspectiveFrustum.prototype.getPixelDimensions = function (\n  drawingBufferWidth,\n  drawingBufferHeight,\n  distance,\n  pixelRatio,\n  result,\n) {\n  update(this);\n  return this._offCenterFrustum.getPixelDimensions(\n    drawingBufferWidth,\n    drawingBufferHeight,\n    distance,\n    pixelRatio,\n    result,\n  );\n};\n\n/**\n * Returns a duplicate of a PerspectiveFrustum instance.\n *\n * @param {PerspectiveFrustum} [result] The object onto which to store the result.\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveFrustum.prototype.clone = function (result) {\n  if (!defined(result)) {\n    result = new PerspectiveFrustum();\n  }\n\n  result.aspectRatio = this.aspectRatio;\n  result.fov = this.fov;\n  result.near = this.near;\n  result.far = this.far;\n\n  // force update of clone to compute matrices\n  result._aspectRatio = undefined;\n  result._fov = undefined;\n  result._near = undefined;\n  result._far = undefined;\n\n  this._offCenterFrustum.clone(result._offCenterFrustum);\n\n  return result;\n};\n\n/**\n * Compares the provided PerspectiveFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {PerspectiveFrustum} [other] The right hand side PerspectiveFrustum.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nPerspectiveFrustum.prototype.equals = function (other) {\n  if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\n    return false;\n  }\n\n  update(this);\n  update(other);\n\n  return (\n    this.fov === other.fov &&\n    this.aspectRatio === other.aspectRatio &&\n    this._offCenterFrustum.equals(other._offCenterFrustum)\n  );\n};\n\n/**\n * Compares the provided PerspectiveFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {PerspectiveFrustum} other The right hand side PerspectiveFrustum.\n * @param {number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nPerspectiveFrustum.prototype.equalsEpsilon = function (\n  other,\n  relativeEpsilon,\n  absoluteEpsilon,\n) {\n  if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\n    return false;\n  }\n\n  update(this);\n  update(other);\n\n  return (\n    CesiumMath.equalsEpsilon(\n      this.fov,\n      other.fov,\n      relativeEpsilon,\n      absoluteEpsilon,\n    ) &&\n    CesiumMath.equalsEpsilon(\n      this.aspectRatio,\n      other.aspectRatio,\n      relativeEpsilon,\n      absoluteEpsilon,\n    ) &&\n    this._offCenterFrustum.equalsEpsilon(\n      other._offCenterFrustum,\n      relativeEpsilon,\n      absoluteEpsilon,\n    )\n  );\n};\nexport default PerspectiveFrustum;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport CullingVolume from \"./CullingVolume.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias PerspectiveOffCenterFrustum\n * @constructor\n *\n * @param {object} [options] An object with the following properties:\n * @param {number} [options.left] The left clipping plane distance.\n * @param {number} [options.right] The right clipping plane distance.\n * @param {number} [options.top] The top clipping plane distance.\n * @param {number} [options.bottom] The bottom clipping plane distance.\n * @param {number} [options.near=1.0] The near clipping plane distance.\n * @param {number} [options.far=500000000.0] The far clipping plane distance.\n *\n * @example\n * const frustum = new Cesium.PerspectiveOffCenterFrustum({\n *     left : -1.0,\n *     right : 1.0,\n *     top : 1.0,\n *     bottom : -1.0,\n *     near : 1.0,\n *     far : 100.0\n * });\n *\n * @see PerspectiveFrustum\n */\nfunction PerspectiveOffCenterFrustum(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * Defines the left clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.left = options.left;\n  this._left = undefined;\n\n  /**\n   * Defines the right clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.right = options.right;\n  this._right = undefined;\n\n  /**\n   * Defines the top clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.top = options.top;\n  this._top = undefined;\n\n  /**\n   * Defines the bottom clipping plane.\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.bottom = options.bottom;\n  this._bottom = undefined;\n\n  /**\n   * The distance of the near plane.\n   * @type {number}\n   * @default 1.0\n   */\n  this.near = options.near ?? 1.0;\n  this._near = this.near;\n\n  /**\n   * The distance of the far plane.\n   * @type {number}\n   * @default 500000000.0\n   */\n  this.far = options.far ?? 500000000.0;\n  this._far = this.far;\n\n  this._cullingVolume = new CullingVolume();\n  this._perspectiveMatrix = new Matrix4();\n  this._infinitePerspective = new Matrix4();\n}\n\nfunction update(frustum) {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(frustum.right) ||\n    !defined(frustum.left) ||\n    !defined(frustum.top) ||\n    !defined(frustum.bottom) ||\n    !defined(frustum.near) ||\n    !defined(frustum.far)\n  ) {\n    throw new DeveloperError(\n      \"right, left, top, bottom, near, or far parameters are not set.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const { top, bottom, right, left, near, far } = frustum;\n\n  const changed =\n    top !== frustum._top ||\n    bottom !== frustum._bottom ||\n    left !== frustum._left ||\n    right !== frustum._right ||\n    near !== frustum._near ||\n    far !== frustum._far;\n  if (!changed) {\n    return;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (frustum.near <= 0 || frustum.near > frustum.far) {\n    throw new DeveloperError(\n      \"near must be greater than zero and less than far.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  frustum._left = left;\n  frustum._right = right;\n  frustum._top = top;\n  frustum._bottom = bottom;\n  frustum._near = near;\n  frustum._far = far;\n  frustum._perspectiveMatrix = Matrix4.computePerspectiveOffCenter(\n    left,\n    right,\n    bottom,\n    top,\n    near,\n    far,\n    frustum._perspectiveMatrix,\n  );\n  frustum._infinitePerspective = Matrix4.computeInfinitePerspectiveOffCenter(\n    left,\n    right,\n    bottom,\n    top,\n    near,\n    frustum._infinitePerspective,\n  );\n}\n\nObject.defineProperties(PerspectiveOffCenterFrustum.prototype, {\n  /**\n   * Gets the perspective projection matrix computed from the view frustum.\n   * The projection matrix will be recomputed if any frustum parameters have changed.\n   *\n   * @memberof PerspectiveOffCenterFrustum.prototype\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @see PerspectiveOffCenterFrustum#infiniteProjectionMatrix\n   */\n  projectionMatrix: {\n    get: function () {\n      update(this);\n      return this._perspectiveMatrix;\n    },\n  },\n\n  /**\n   * Gets the perspective projection matrix computed from the view frustum with an infinite far plane.\n   * @memberof PerspectiveOffCenterFrustum.prototype\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @see PerspectiveOffCenterFrustum#projectionMatrix\n   */\n  infiniteProjectionMatrix: {\n    get: function () {\n      update(this);\n      return this._infinitePerspective;\n    },\n  },\n});\n\nconst getPlanesRight = new Cartesian3();\nconst getPlanesNearCenter = new Cartesian3();\nconst getPlanesFarCenter = new Cartesian3();\nconst getPlanesNormal = new Cartesian3();\n/**\n * Creates a culling volume for this frustum.\n *\n * @param {Cartesian3} position The eye position.\n * @param {Cartesian3} direction The view direction.\n * @param {Cartesian3} up The up direction.\n * @returns {CullingVolume} A culling volume at the given position and orientation.\n *\n * @example\n * // Check if a bounding volume intersects the frustum.\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\n */\nPerspectiveOffCenterFrustum.prototype.computeCullingVolume = function (\n  position,\n  direction,\n  up,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(position)) {\n    throw new DeveloperError(\"position is required.\");\n  }\n\n  if (!defined(direction)) {\n    throw new DeveloperError(\"direction is required.\");\n  }\n\n  if (!defined(up)) {\n    throw new DeveloperError(\"up is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const planes = this._cullingVolume.planes;\n\n  const t = this.top;\n  const b = this.bottom;\n  const r = this.right;\n  const l = this.left;\n  const n = this.near;\n  const f = this.far;\n\n  const right = Cartesian3.cross(direction, up, getPlanesRight);\n\n  const nearCenter = getPlanesNearCenter;\n  Cartesian3.multiplyByScalar(direction, n, nearCenter);\n  Cartesian3.add(position, nearCenter, nearCenter);\n\n  const farCenter = getPlanesFarCenter;\n  Cartesian3.multiplyByScalar(direction, f, farCenter);\n  Cartesian3.add(position, farCenter, farCenter);\n\n  const normal = getPlanesNormal;\n\n  //Left plane computation\n  Cartesian3.multiplyByScalar(right, l, normal);\n  Cartesian3.add(nearCenter, normal, normal);\n  Cartesian3.subtract(normal, position, normal);\n  Cartesian3.normalize(normal, normal);\n  Cartesian3.cross(normal, up, normal);\n  Cartesian3.normalize(normal, normal);\n\n  let plane = planes[0];\n  if (!defined(plane)) {\n    plane = planes[0] = new Cartesian4();\n  }\n  plane.x = normal.x;\n  plane.y = normal.y;\n  plane.z = normal.z;\n  plane.w = -Cartesian3.dot(normal, position);\n\n  //Right plane computation\n  Cartesian3.multiplyByScalar(right, r, normal);\n  Cartesian3.add(nearCenter, normal, normal);\n  Cartesian3.subtract(normal, position, normal);\n  Cartesian3.cross(up, normal, normal);\n  Cartesian3.normalize(normal, normal);\n\n  plane = planes[1];\n  if (!defined(plane)) {\n    plane = planes[1] = new Cartesian4();\n  }\n  plane.x = normal.x;\n  plane.y = normal.y;\n  plane.z = normal.z;\n  plane.w = -Cartesian3.dot(normal, position);\n\n  //Bottom plane computation\n  Cartesian3.multiplyByScalar(up, b, normal);\n  Cartesian3.add(nearCenter, normal, normal);\n  Cartesian3.subtract(normal, position, normal);\n  Cartesian3.cross(right, normal, normal);\n  Cartesian3.normalize(normal, normal);\n\n  plane = planes[2];\n  if (!defined(plane)) {\n    plane = planes[2] = new Cartesian4();\n  }\n  plane.x = normal.x;\n  plane.y = normal.y;\n  plane.z = normal.z;\n  plane.w = -Cartesian3.dot(normal, position);\n\n  //Top plane computation\n  Cartesian3.multiplyByScalar(up, t, normal);\n  Cartesian3.add(nearCenter, normal, normal);\n  Cartesian3.subtract(normal, position, normal);\n  Cartesian3.cross(normal, right, normal);\n  Cartesian3.normalize(normal, normal);\n\n  plane = planes[3];\n  if (!defined(plane)) {\n    plane = planes[3] = new Cartesian4();\n  }\n  plane.x = normal.x;\n  plane.y = normal.y;\n  plane.z = normal.z;\n  plane.w = -Cartesian3.dot(normal, position);\n\n  //Near plane computation\n  plane = planes[4];\n  if (!defined(plane)) {\n    plane = planes[4] = new Cartesian4();\n  }\n  plane.x = direction.x;\n  plane.y = direction.y;\n  plane.z = direction.z;\n  plane.w = -Cartesian3.dot(direction, nearCenter);\n\n  //Far plane computation\n  Cartesian3.negate(direction, normal);\n\n  plane = planes[5];\n  if (!defined(plane)) {\n    plane = planes[5] = new Cartesian4();\n  }\n  plane.x = normal.x;\n  plane.y = normal.y;\n  plane.z = normal.z;\n  plane.w = -Cartesian3.dot(normal, farCenter);\n\n  return this._cullingVolume;\n};\n\n/**\n * Returns the pixel's width and height in meters.\n *\n * @param {number} drawingBufferWidth The width of the drawing buffer.\n * @param {number} drawingBufferHeight The height of the drawing buffer.\n * @param {number} distance The distance to the near plane in meters.\n * @param {number} pixelRatio The scaling factor from pixel space to coordinate space.\n * @param {Cartesian2} result The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\n *\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\n * @exception {DeveloperError} pixelRatio must be greater than zero.\n *\n * @example\n * // Example 1\n * // Get the width and height of a pixel.\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\n *\n * @example\n * // Example 2\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\n * // For example, get the size of a pixel of an image on a billboard.\n * const position = camera.position;\n * const direction = camera.direction;\n * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3());      // vector from camera to a primitive\n * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\n * const distance = Cesium.Cartesian3.magnitude(toCenterProj);\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\n */\nPerspectiveOffCenterFrustum.prototype.getPixelDimensions = function (\n  drawingBufferWidth,\n  drawingBufferHeight,\n  distance,\n  pixelRatio,\n  result,\n) {\n  update(this);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\n    throw new DeveloperError(\n      \"Both drawingBufferWidth and drawingBufferHeight are required.\",\n    );\n  }\n  if (drawingBufferWidth <= 0) {\n    throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\n  }\n  if (drawingBufferHeight <= 0) {\n    throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\n  }\n  if (!defined(distance)) {\n    throw new DeveloperError(\"distance is required.\");\n  }\n  if (!defined(pixelRatio)) {\n    throw new DeveloperError(\"pixelRatio is required\");\n  }\n  if (pixelRatio <= 0) {\n    throw new DeveloperError(\"pixelRatio must be greater than zero.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"A result object is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const inverseNear = 1.0 / this.near;\n  let tanTheta = this.top * inverseNear;\n  const pixelHeight =\n    (2.0 * pixelRatio * distance * tanTheta) / drawingBufferHeight;\n  tanTheta = this.right * inverseNear;\n  const pixelWidth =\n    (2.0 * pixelRatio * distance * tanTheta) / drawingBufferWidth;\n\n  result.x = pixelWidth;\n  result.y = pixelHeight;\n  return result;\n};\n\n/**\n * Returns a duplicate of a PerspectiveOffCenterFrustum instance.\n *\n * @param {PerspectiveOffCenterFrustum} [result] The object onto which to store the result.\n * @returns {PerspectiveOffCenterFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\n */\nPerspectiveOffCenterFrustum.prototype.clone = function (result) {\n  if (!defined(result)) {\n    result = new PerspectiveOffCenterFrustum();\n  }\n\n  result.right = this.right;\n  result.left = this.left;\n  result.top = this.top;\n  result.bottom = this.bottom;\n  result.near = this.near;\n  result.far = this.far;\n\n  // force update of clone to compute matrices\n  result._left = undefined;\n  result._right = undefined;\n  result._top = undefined;\n  result._bottom = undefined;\n  result._near = undefined;\n  result._far = undefined;\n\n  return result;\n};\n\n/**\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {PerspectiveOffCenterFrustum} [other] The right hand side PerspectiveOffCenterFrustum.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nPerspectiveOffCenterFrustum.prototype.equals = function (other) {\n  return (\n    defined(other) &&\n    other instanceof PerspectiveOffCenterFrustum &&\n    this.right === other.right &&\n    this.left === other.left &&\n    this.top === other.top &&\n    this.bottom === other.bottom &&\n    this.near === other.near &&\n    this.far === other.far\n  );\n};\n\n/**\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {PerspectiveOffCenterFrustum} other The right hand side PerspectiveOffCenterFrustum.\n * @param {number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\n * @param {number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if this and other are within the provided epsilon, <code>false</code> otherwise.\n */\nPerspectiveOffCenterFrustum.prototype.equalsEpsilon = function (\n  other,\n  relativeEpsilon,\n  absoluteEpsilon,\n) {\n  return (\n    other === this ||\n    (defined(other) &&\n      other instanceof PerspectiveOffCenterFrustum &&\n      CesiumMath.equalsEpsilon(\n        this.right,\n        other.right,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.left,\n        other.left,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.top,\n        other.top,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.bottom,\n        other.bottom,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.near,\n        other.near,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        this.far,\n        other.far,\n        relativeEpsilon,\n        absoluteEpsilon,\n      ))\n  );\n};\nexport default PerspectiveOffCenterFrustum;\n","import buildModuleUrl from \"./buildModuleUrl.js\";\nimport Color from \"./Color.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Resource from \"./Resource.js\";\nimport writeTextToCanvas from \"./writeTextToCanvas.js\";\n\n/**\n * A utility class for generating custom map pins as canvas elements.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/PinBuilder.png' width='500'/><br />\n * Example pins generated using both the maki icon set, which ships with Cesium, and single character text.\n * </div>\n *\n * @alias PinBuilder\n * @constructor\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=map-pins|Cesium Sandcastle PinBuilder Demo}\n */\nfunction PinBuilder() {\n  this._cache = {};\n}\n\n/**\n * Creates an empty pin of the specified color and size.\n *\n * @param {Color} color The color of the pin.\n * @param {number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement} The canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromColor = function (color, size) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(color)) {\n    throw new DeveloperError(\"color is required\");\n  }\n  if (!defined(size)) {\n    throw new DeveloperError(\"size is required\");\n  }\n  //>>includeEnd('debug');\n  return createPin(undefined, undefined, color, size, this._cache);\n};\n\n/**\n * Creates a pin with the specified icon, color, and size.\n *\n * @param {Resource|string} url The url of the image to be stamped onto the pin.\n * @param {Color} color The color of the pin.\n * @param {number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement|Promise<HTMLCanvasElement>} The canvas element or a Promise to the canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromUrl = function (url, color, size) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(url)) {\n    throw new DeveloperError(\"url is required\");\n  }\n  if (!defined(color)) {\n    throw new DeveloperError(\"color is required\");\n  }\n  if (!defined(size)) {\n    throw new DeveloperError(\"size is required\");\n  }\n  //>>includeEnd('debug');\n  return createPin(url, undefined, color, size, this._cache);\n};\n\n/**\n * Creates a pin with the specified {@link https://www.mapbox.com/maki/|maki} icon identifier, color, and size.\n *\n * @param {string} id The id of the maki icon to be stamped onto the pin.\n * @param {Color} color The color of the pin.\n * @param {number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement|Promise<HTMLCanvasElement>} The canvas element or a Promise to the canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromMakiIconId = function (id, color, size) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(id)) {\n    throw new DeveloperError(\"id is required\");\n  }\n  if (!defined(color)) {\n    throw new DeveloperError(\"color is required\");\n  }\n  if (!defined(size)) {\n    throw new DeveloperError(\"size is required\");\n  }\n  //>>includeEnd('debug');\n  return createPin(\n    buildModuleUrl(`Assets/Textures/maki/${encodeURIComponent(id)}.png`),\n    undefined,\n    color,\n    size,\n    this._cache,\n  );\n};\n\n/**\n * Creates a pin with the specified text, color, and size.  The text will be sized to be as large as possible\n * while still being contained completely within the pin.\n *\n * @param {string} text The text to be stamped onto the pin.\n * @param {Color} color The color of the pin.\n * @param {number} size The size of the pin, in pixels.\n * @returns {HTMLCanvasElement} The canvas element that represents the generated pin.\n */\nPinBuilder.prototype.fromText = function (text, color, size) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(text)) {\n    throw new DeveloperError(\"text is required\");\n  }\n  if (!defined(color)) {\n    throw new DeveloperError(\"color is required\");\n  }\n  if (!defined(size)) {\n    throw new DeveloperError(\"size is required\");\n  }\n  //>>includeEnd('debug');\n\n  return createPin(undefined, text, color, size, this._cache);\n};\n\nconst colorScratch = new Color();\n\n//This function (except for the 3 commented lines) was auto-generated from an online tool,\n//http://www.professorcloud.com/svg-to-canvas/, using Assets/Textures/pin.svg as input.\n//The reason we simply can't load and draw the SVG directly to the canvas is because\n//it taints the canvas in Internet Explorer (and possibly some other browsers); making\n//it impossible to create a WebGL texture from the result.\nfunction drawPin(context2D, color, size) {\n  context2D.save();\n  context2D.scale(size / 24, size / 24); //Added to auto-generated code to scale up to desired size.\n  context2D.fillStyle = color.toCssColorString(); //Modified from auto-generated code.\n  context2D.strokeStyle = color.brighten(0.6, colorScratch).toCssColorString(); //Modified from auto-generated code.\n  context2D.lineWidth = 0.846;\n  context2D.beginPath();\n  context2D.moveTo(6.72, 0.422);\n  context2D.lineTo(17.28, 0.422);\n  context2D.bezierCurveTo(18.553, 0.422, 19.577, 1.758, 19.577, 3.415);\n  context2D.lineTo(19.577, 10.973);\n  context2D.bezierCurveTo(19.577, 12.63, 18.553, 13.966, 17.282, 13.966);\n  context2D.lineTo(14.386, 14.008);\n  context2D.lineTo(11.826, 23.578);\n  context2D.lineTo(9.614, 14.008);\n  context2D.lineTo(6.719, 13.965);\n  context2D.bezierCurveTo(5.446, 13.983, 4.422, 12.629, 4.422, 10.972);\n  context2D.lineTo(4.422, 3.416);\n  context2D.bezierCurveTo(4.423, 1.76, 5.447, 0.423, 6.718, 0.423);\n  context2D.closePath();\n  context2D.fill();\n  context2D.stroke();\n  context2D.restore();\n}\n\n//This function takes an image or canvas and uses it as a template\n//to \"stamp\" the pin with a white image outlined in black.  The color\n//values of the input image are ignored completely and only the alpha\n//values are used.\nfunction drawIcon(context2D, image, size) {\n  //Size is the largest image that looks good inside of pin box.\n  const imageSize = size / 2.5;\n  let sizeX = imageSize;\n  let sizeY = imageSize;\n\n  if (image.width > image.height) {\n    sizeY = imageSize * (image.height / image.width);\n  } else if (image.width < image.height) {\n    sizeX = imageSize * (image.width / image.height);\n  }\n\n  //x and y are the center of the pin box\n  const x = Math.round((size - sizeX) / 2);\n  const y = Math.round((7 / 24) * size - sizeY / 2);\n\n  context2D.globalCompositeOperation = \"destination-out\";\n  context2D.drawImage(image, x - 1, y, sizeX, sizeY);\n  context2D.drawImage(image, x, y - 1, sizeX, sizeY);\n  context2D.drawImage(image, x + 1, y, sizeX, sizeY);\n  context2D.drawImage(image, x, y + 1, sizeX, sizeY);\n\n  context2D.globalCompositeOperation = \"destination-over\";\n  context2D.fillStyle = Color.BLACK.toCssColorString();\n  context2D.fillRect(x - 1, y - 1, sizeX + 2, sizeY + 2);\n\n  context2D.globalCompositeOperation = \"destination-out\";\n  context2D.drawImage(image, x, y, sizeX, sizeY);\n\n  context2D.globalCompositeOperation = \"destination-over\";\n  context2D.fillStyle = Color.WHITE.toCssColorString();\n  context2D.fillRect(x - 1, y - 2, sizeX + 2, sizeY + 2);\n}\n\nconst stringifyScratch = new Array(4);\nfunction createPin(url, label, color, size, cache) {\n  //Use the parameters as a unique ID for caching.\n  stringifyScratch[0] = url;\n  stringifyScratch[1] = label;\n  stringifyScratch[2] = color;\n  stringifyScratch[3] = size;\n  const id = JSON.stringify(stringifyScratch);\n\n  const item = cache[id];\n  if (defined(item)) {\n    return item;\n  }\n\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = size;\n  canvas.height = size;\n\n  const context2D = canvas.getContext(\"2d\");\n  drawPin(context2D, color, size);\n\n  if (defined(url)) {\n    const resource = Resource.createIfNeeded(url);\n\n    //If we have an image url, load it and then stamp the pin.\n    const promise = resource.fetchImage().then(function (image) {\n      drawIcon(context2D, image, size);\n      cache[id] = canvas;\n      return canvas;\n    });\n    cache[id] = promise;\n    return promise;\n  } else if (defined(label)) {\n    //If we have a label, write it to a canvas and then stamp the pin.\n    const image = writeTextToCanvas(label, {\n      font: `bold ${size}px sans-serif`,\n    });\n    drawIcon(context2D, image, size);\n  }\n\n  cache[id] = canvas;\n  return canvas;\n}\nexport default PinBuilder;\n","import PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * The format of a pixel, i.e., the number of components it has and what they represent.\n *\n * @enum {number}\n */\nconst PixelFormat = {\n  /**\n   * A pixel format containing a depth value.\n   *\n   * @type {number}\n   * @constant\n   */\n  DEPTH_COMPONENT: WebGLConstants.DEPTH_COMPONENT,\n\n  /**\n   * A pixel format containing a depth and stencil value, most often used with {@link PixelDatatype.UNSIGNED_INT_24_8}.\n   *\n   * @type {number}\n   * @constant\n   */\n  DEPTH_STENCIL: WebGLConstants.DEPTH_STENCIL,\n\n  /**\n   * A pixel format containing an alpha channel.\n   *\n   * @type {number}\n   * @constant\n   */\n  ALPHA: WebGLConstants.ALPHA,\n\n  /**\n   * A pixel format containing a red channel\n   *\n   * @type {number}\n   * @constant\n   */\n  RED: WebGLConstants.RED,\n\n  /**\n   * A pixel format containing red and green channels.\n   *\n   * @type {number}\n   * @constant\n   */\n  RG: WebGLConstants.RG,\n\n  /**\n   * A pixel format containing red, green, and blue channels.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGB: WebGLConstants.RGB,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA: WebGLConstants.RGBA,\n\n  /**\n   * A pixel format containing a red channel as an integer.\n   * @type {number}\n   * @constant\n   */\n  RED_INTEGER: WebGLConstants.RED_INTEGER,\n\n  /**\n   * A pixel format containing red and green channels as integers.\n   * @type {number}\n   * @constant\n   */\n  RG_INTEGER: WebGLConstants.RG_INTEGER,\n\n  /**\n   * A pixel format containing red, green, and blue channels as integers.\n   * @type {number}\n   * @constant\n   */\n  RGB_INTEGER: WebGLConstants.RGB_INTEGER,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels as integers.\n   * @type {number}\n   * @constant\n   */\n  RGBA_INTEGER: WebGLConstants.RGBA_INTEGER,\n\n  /**\n   * A pixel format containing a luminance (intensity) channel.\n   *\n   * @type {number}\n   * @constant\n   */\n  LUMINANCE: WebGLConstants.LUMINANCE,\n\n  /**\n   * A pixel format containing luminance (intensity) and alpha channels.\n   *\n   * @type {number}\n   * @constant\n   */\n  LUMINANCE_ALPHA: WebGLConstants.LUMINANCE_ALPHA,\n\n  /**\n   * A pixel format containing red, green, and blue channels that is DXT1 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGB_DXT1: WebGLConstants.COMPRESSED_RGB_S3TC_DXT1_EXT,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is DXT1 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA_DXT1: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is DXT3 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA_DXT3: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is DXT5 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA_DXT5: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n\n  /**\n   * A pixel format containing red, green, and blue channels that is PVR 4bpp compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGB_PVRTC_4BPPV1: WebGLConstants.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n\n  /**\n   * A pixel format containing red, green, and blue channels that is PVR 2bpp compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGB_PVRTC_2BPPV1: WebGLConstants.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is PVR 4bpp compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA_PVRTC_4BPPV1: WebGLConstants.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is PVR 2bpp compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA_PVRTC_2BPPV1: WebGLConstants.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is ASTC compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA_ASTC: WebGLConstants.COMPRESSED_RGBA_ASTC_4x4_WEBGL,\n\n  /**\n   * A pixel format containing red, green, and blue channels that is ETC1 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGB_ETC1: WebGLConstants.COMPRESSED_RGB_ETC1_WEBGL,\n\n  /**\n   * A pixel format containing red, green, and blue channels that is ETC2 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGB8_ETC2: WebGLConstants.COMPRESSED_RGB8_ETC2,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is ETC2 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA8_ETC2_EAC: WebGLConstants.COMPRESSED_RGBA8_ETC2_EAC,\n\n  /**\n   * A pixel format containing red, green, blue, and alpha channels that is BC7 compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  RGBA_BC7: WebGLConstants.COMPRESSED_RGBA_BPTC_UNORM,\n};\n\n/**\n * @private\n */\nPixelFormat.componentsLength = function (pixelFormat) {\n  switch (pixelFormat) {\n    case PixelFormat.RGB:\n    case PixelFormat.RGB_INTEGER:\n      return 3;\n    case PixelFormat.RGBA:\n    case PixelFormat.RGBA_INTEGER:\n      return 4;\n    case PixelFormat.LUMINANCE_ALPHA:\n    case PixelFormat.RG:\n    case PixelFormat.RG_INTEGER:\n      return 2;\n    case PixelFormat.ALPHA:\n    case PixelFormat.RED:\n    case PixelFormat.RED_INTEGER:\n    case PixelFormat.LUMINANCE:\n      return 1;\n    default:\n      return 1;\n  }\n};\n\n/**\n * @private\n */\nPixelFormat.validate = function (pixelFormat) {\n  return (\n    pixelFormat === PixelFormat.DEPTH_COMPONENT ||\n    pixelFormat === PixelFormat.DEPTH_STENCIL ||\n    pixelFormat === PixelFormat.ALPHA ||\n    pixelFormat === PixelFormat.RED ||\n    pixelFormat === PixelFormat.RG ||\n    pixelFormat === PixelFormat.RGB ||\n    pixelFormat === PixelFormat.RGBA ||\n    pixelFormat === PixelFormat.RED_INTEGER ||\n    pixelFormat === PixelFormat.RG_INTEGER ||\n    pixelFormat === PixelFormat.RGB_INTEGER ||\n    pixelFormat === PixelFormat.RGBA_INTEGER ||\n    pixelFormat === PixelFormat.LUMINANCE ||\n    pixelFormat === PixelFormat.LUMINANCE_ALPHA ||\n    pixelFormat === PixelFormat.RGB_DXT1 ||\n    pixelFormat === PixelFormat.RGBA_DXT1 ||\n    pixelFormat === PixelFormat.RGBA_DXT3 ||\n    pixelFormat === PixelFormat.RGBA_DXT5 ||\n    pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\n    pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_ASTC ||\n    pixelFormat === PixelFormat.RGB_ETC1 ||\n    pixelFormat === PixelFormat.RGB8_ETC2 ||\n    pixelFormat === PixelFormat.RGBA8_ETC2_EAC ||\n    pixelFormat === PixelFormat.RGBA_BC7\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.isColorFormat = function (pixelFormat) {\n  return (\n    pixelFormat === PixelFormat.RED ||\n    pixelFormat === PixelFormat.ALPHA ||\n    pixelFormat === PixelFormat.RGB ||\n    pixelFormat === PixelFormat.RGBA ||\n    pixelFormat === PixelFormat.LUMINANCE ||\n    pixelFormat === PixelFormat.LUMINANCE_ALPHA\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.isDepthFormat = function (pixelFormat) {\n  return (\n    pixelFormat === PixelFormat.DEPTH_COMPONENT ||\n    pixelFormat === PixelFormat.DEPTH_STENCIL\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.isCompressedFormat = function (pixelFormat) {\n  return (\n    pixelFormat === PixelFormat.RGB_DXT1 ||\n    pixelFormat === PixelFormat.RGBA_DXT1 ||\n    pixelFormat === PixelFormat.RGBA_DXT3 ||\n    pixelFormat === PixelFormat.RGBA_DXT5 ||\n    pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\n    pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_ASTC ||\n    pixelFormat === PixelFormat.RGB_ETC1 ||\n    pixelFormat === PixelFormat.RGB8_ETC2 ||\n    pixelFormat === PixelFormat.RGBA8_ETC2_EAC ||\n    pixelFormat === PixelFormat.RGBA_BC7\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.isDXTFormat = function (pixelFormat) {\n  return (\n    pixelFormat === PixelFormat.RGB_DXT1 ||\n    pixelFormat === PixelFormat.RGBA_DXT1 ||\n    pixelFormat === PixelFormat.RGBA_DXT3 ||\n    pixelFormat === PixelFormat.RGBA_DXT5\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.isPVRTCFormat = function (pixelFormat) {\n  return (\n    pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\n    pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\n    pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.isASTCFormat = function (pixelFormat) {\n  return pixelFormat === PixelFormat.RGBA_ASTC;\n};\n\n/**\n * @private\n */\nPixelFormat.isETC1Format = function (pixelFormat) {\n  return pixelFormat === PixelFormat.RGB_ETC1;\n};\n\n/**\n * @private\n */\nPixelFormat.isETC2Format = function (pixelFormat) {\n  return (\n    pixelFormat === PixelFormat.RGB8_ETC2 ||\n    pixelFormat === PixelFormat.RGBA8_ETC2_EAC\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.isBC7Format = function (pixelFormat) {\n  return pixelFormat === PixelFormat.RGBA_BC7;\n};\n\n/**\n * @private\n */\nPixelFormat.compressedTextureSizeInBytes = function (\n  pixelFormat,\n  width,\n  height,\n) {\n  switch (pixelFormat) {\n    case PixelFormat.RGB_DXT1:\n    case PixelFormat.RGBA_DXT1:\n    case PixelFormat.RGB_ETC1:\n    case PixelFormat.RGB8_ETC2:\n      return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n\n    case PixelFormat.RGBA_DXT3:\n    case PixelFormat.RGBA_DXT5:\n    case PixelFormat.RGBA_ASTC:\n    case PixelFormat.RGBA8_ETC2_EAC:\n      return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n\n    case PixelFormat.RGB_PVRTC_4BPPV1:\n    case PixelFormat.RGBA_PVRTC_4BPPV1:\n      return Math.floor((Math.max(width, 8) * Math.max(height, 8) * 4 + 7) / 8);\n\n    case PixelFormat.RGB_PVRTC_2BPPV1:\n    case PixelFormat.RGBA_PVRTC_2BPPV1:\n      return Math.floor(\n        (Math.max(width, 16) * Math.max(height, 8) * 2 + 7) / 8,\n      );\n\n    case PixelFormat.RGBA_BC7:\n      return Math.ceil(width / 4) * Math.ceil(height / 4) * 16;\n\n    default:\n      return 0;\n  }\n};\n\n/**\n * @private\n */\nPixelFormat.textureSizeInBytes = function (\n  pixelFormat,\n  pixelDatatype,\n  width,\n  height,\n) {\n  let componentsLength = PixelFormat.componentsLength(pixelFormat);\n  if (PixelDatatype.isPacked(pixelDatatype)) {\n    componentsLength = 1;\n  }\n  return (\n    componentsLength * PixelDatatype.sizeInBytes(pixelDatatype) * width * height\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.texture3DSizeInBytes = function (\n  pixelFormat,\n  pixelDatatype,\n  width,\n  height,\n  depth,\n) {\n  let componentsLength = PixelFormat.componentsLength(pixelFormat);\n  if (PixelDatatype.isPacked(pixelDatatype)) {\n    componentsLength = 1;\n  }\n  return (\n    componentsLength *\n    PixelDatatype.sizeInBytes(pixelDatatype) *\n    width *\n    height *\n    depth\n  );\n};\n\n/**\n * @private\n */\nPixelFormat.alignmentInBytes = function (pixelFormat, pixelDatatype, width) {\n  const mod =\n    PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, width, 1) % 4;\n  return mod === 0 ? 4 : mod === 2 ? 2 : 1;\n};\n\n/**\n * @private\n * @param {PixelFormat} pixelFormat The pixel format.\n * @param {PixelDatatype} pixelDatatype The pixel datatype.\n * @param {number} width The width of the texture.\n * @param {number} height The height of the texture.\n * @returns {TypedArray} The typed array.\n */\nPixelFormat.createTypedArray = function (\n  pixelFormat,\n  pixelDatatype,\n  width,\n  height,\n) {\n  const constructor = PixelDatatype.getTypedArrayConstructor(pixelDatatype);\n  const size = PixelFormat.componentsLength(pixelFormat) * width * height;\n  return new constructor(size);\n};\n\n/**\n * @private\n */\nPixelFormat.flipY = function (\n  bufferView,\n  pixelFormat,\n  pixelDatatype,\n  width,\n  height,\n) {\n  if (height === 1) {\n    return bufferView;\n  }\n  const flipped = PixelFormat.createTypedArray(\n    pixelFormat,\n    pixelDatatype,\n    width,\n    height,\n  );\n  const numberOfComponents = PixelFormat.componentsLength(pixelFormat);\n  const textureWidth = width * numberOfComponents;\n  for (let i = 0; i < height; ++i) {\n    const row = i * width * numberOfComponents;\n    const flippedRow = (height - i - 1) * width * numberOfComponents;\n    for (let j = 0; j < textureWidth; ++j) {\n      flipped[flippedRow + j] = bufferView[row + j];\n    }\n  }\n  return flipped;\n};\n\n/**\n * @private\n */\nPixelFormat.toInternalFormat = function (pixelFormat, pixelDatatype, context) {\n  // WebGL 1 require internalFormat to be the same as PixelFormat\n  if (!context.webgl2) {\n    return pixelFormat;\n  }\n\n  // Convert pixelFormat to correct internalFormat for WebGL 2\n  if (pixelFormat === PixelFormat.DEPTH_STENCIL) {\n    return WebGLConstants.DEPTH24_STENCIL8;\n  }\n\n  if (pixelFormat === PixelFormat.DEPTH_COMPONENT) {\n    if (pixelDatatype === PixelDatatype.UNSIGNED_SHORT) {\n      return WebGLConstants.DEPTH_COMPONENT16;\n    } else if (pixelDatatype === PixelDatatype.UNSIGNED_INT) {\n      return WebGLConstants.DEPTH_COMPONENT24;\n    }\n  }\n\n  if (pixelDatatype === PixelDatatype.FLOAT) {\n    switch (pixelFormat) {\n      case PixelFormat.RGBA:\n        return WebGLConstants.RGBA32F;\n      case PixelFormat.RGB:\n        return WebGLConstants.RGB32F;\n      case PixelFormat.RG:\n        return WebGLConstants.RG32F;\n      case PixelFormat.RED:\n        return WebGLConstants.R32F;\n    }\n  }\n\n  if (pixelDatatype === PixelDatatype.HALF_FLOAT) {\n    switch (pixelFormat) {\n      case PixelFormat.RGBA:\n        return WebGLConstants.RGBA16F;\n      case PixelFormat.RGB:\n        return WebGLConstants.RGB16F;\n      case PixelFormat.RG:\n        return WebGLConstants.RG16F;\n      case PixelFormat.RED:\n        return WebGLConstants.R16F;\n    }\n  }\n\n  if (pixelDatatype === PixelDatatype.UNSIGNED_BYTE) {\n    switch (pixelFormat) {\n      case PixelFormat.RGBA:\n        return WebGLConstants.RGBA8;\n      case PixelFormat.RGB:\n        return WebGLConstants.RGB8;\n      case PixelFormat.RG:\n        return WebGLConstants.RG8;\n      case PixelFormat.RED:\n        return WebGLConstants.R8;\n    }\n  }\n\n  if (pixelDatatype === PixelDatatype.INT) {\n    switch (pixelFormat) {\n      case PixelFormat.RGBA_INTEGER:\n        return WebGLConstants.RGBA32I;\n      case PixelFormat.RGB_INTEGER:\n        return WebGLConstants.RGB32I;\n      case PixelFormat.RG_INTEGER:\n        return WebGLConstants.RG32I;\n      case PixelFormat.RED_INTEGER:\n        return WebGLConstants.R32I;\n    }\n  }\n\n  if (pixelDatatype === PixelDatatype.UNSIGNED_INT) {\n    switch (pixelFormat) {\n      case PixelFormat.RGBA_INTEGER:\n        return WebGLConstants.RGBA32UI;\n      case PixelFormat.RGB_INTEGER:\n        return WebGLConstants.RGB32UI;\n      case PixelFormat.RG_INTEGER:\n        return WebGLConstants.RG32UI;\n      case PixelFormat.RED_INTEGER:\n        return WebGLConstants.R32UI;\n    }\n  }\n\n  return pixelFormat;\n};\n\nexport default Object.freeze(PixelFormat);\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * A plane in Hessian Normal Form defined by\n * <pre>\n * ax + by + cz + d = 0\n * </pre>\n * where (a, b, c) is the plane's <code>normal</code>, d is the signed\n * <code>distance</code> to the plane, and (x, y, z) is any point on\n * the plane.\n *\n * @alias Plane\n * @constructor\n *\n * @param {Cartesian3} normal The plane's normal (normalized).\n * @param {number} distance The shortest distance from the origin to the plane.  The sign of\n * <code>distance</code> determines which side of the plane the origin\n * is on.  If <code>distance</code> is positive, the origin is in the half-space\n * in the direction of the normal; if negative, the origin is in the half-space\n * opposite to the normal; if zero, the plane passes through the origin.\n *\n * @example\n * // The plane x=0\n * const plane = new Cesium.Plane(Cesium.Cartesian3.UNIT_X, 0.0);\n *\n * @exception {DeveloperError} Normal must be normalized\n */\nfunction Plane(normal, distance) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"normal\", normal);\n  if (\n    !CesiumMath.equalsEpsilon(\n      Cartesian3.magnitude(normal),\n      1.0,\n      CesiumMath.EPSILON6,\n    )\n  ) {\n    throw new DeveloperError(\"normal must be normalized.\");\n  }\n  Check.typeOf.number(\"distance\", distance);\n  //>>includeEnd('debug');\n\n  /**\n   * The plane's normal.\n   *\n   * @type {Cartesian3}\n   */\n  this.normal = Cartesian3.clone(normal);\n\n  /**\n   * The shortest distance from the origin to the plane.  The sign of\n   * <code>distance</code> determines which side of the plane the origin\n   * is on.  If <code>distance</code> is positive, the origin is in the half-space\n   * in the direction of the normal; if negative, the origin is in the half-space\n   * opposite to the normal; if zero, the plane passes through the origin.\n   *\n   * @type {number}\n   */\n  this.distance = distance;\n}\n\n/**\n * Creates a plane from a normal and a point on the plane.\n *\n * @param {Cartesian3} point The point on the plane.\n * @param {Cartesian3} normal The plane's normal (normalized).\n * @param {Plane} [result] The object onto which to store the result.\n * @returns {Plane} A new plane instance or the modified result parameter.\n *\n * @example\n * const point = Cesium.Cartesian3.fromDegrees(-72.0, 40.0);\n * const normal = ellipsoid.geodeticSurfaceNormal(point);\n * const tangentPlane = Cesium.Plane.fromPointNormal(point, normal);\n *\n * @exception {DeveloperError} Normal must be normalized\n */\nPlane.fromPointNormal = function (point, normal, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"point\", point);\n  Check.typeOf.object(\"normal\", normal);\n  if (\n    !CesiumMath.equalsEpsilon(\n      Cartesian3.magnitude(normal),\n      1.0,\n      CesiumMath.EPSILON6,\n    )\n  ) {\n    throw new DeveloperError(\"normal must be normalized.\");\n  }\n  //>>includeEnd('debug');\n\n  const distance = -Cartesian3.dot(normal, point);\n\n  if (!defined(result)) {\n    return new Plane(normal, distance);\n  }\n\n  Cartesian3.clone(normal, result.normal);\n  result.distance = distance;\n  return result;\n};\n\nconst scratchNormal = new Cartesian3();\n/**\n * Creates a plane from the general equation\n *\n * @param {Cartesian4} coefficients The plane's normal (normalized).\n * @param {Plane} [result] The object onto which to store the result.\n * @returns {Plane} A new plane instance or the modified result parameter.\n *\n * @exception {DeveloperError} Normal must be normalized\n */\nPlane.fromCartesian4 = function (coefficients, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"coefficients\", coefficients);\n  //>>includeEnd('debug');\n\n  const normal = Cartesian3.fromCartesian4(coefficients, scratchNormal);\n  const distance = coefficients.w;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !CesiumMath.equalsEpsilon(\n      Cartesian3.magnitude(normal),\n      1.0,\n      CesiumMath.EPSILON6,\n    )\n  ) {\n    throw new DeveloperError(\"normal must be normalized.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Plane(normal, distance);\n  }\n  Cartesian3.clone(normal, result.normal);\n  result.distance = distance;\n  return result;\n};\n\n/**\n * Computes the signed shortest distance of a point to a plane.\n * The sign of the distance determines which side of the plane the point\n * is on.  If the distance is positive, the point is in the half-space\n * in the direction of the normal; if negative, the point is in the half-space\n * opposite to the normal; if zero, the plane passes through the point.\n *\n * @param {Plane} plane The plane.\n * @param {Cartesian3} point The point.\n * @returns {number} The signed shortest distance of the point to the plane.\n */\nPlane.getPointDistance = function (plane, point) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"plane\", plane);\n  Check.typeOf.object(\"point\", point);\n  //>>includeEnd('debug');\n\n  return Cartesian3.dot(plane.normal, point) + plane.distance;\n};\n\nconst scratchCartesian = new Cartesian3();\n/**\n * Projects a point onto the plane.\n * @param {Plane} plane The plane to project the point onto\n * @param {Cartesian3} point The point to project onto the plane\n * @param {Cartesian3} [result] The result point.  If undefined, a new Cartesian3 will be created.\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\n */\nPlane.projectPointOntoPlane = function (plane, point, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"plane\", plane);\n  Check.typeOf.object(\"point\", point);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  // projectedPoint = point - (normal.point + scale) * normal\n  const pointDistance = Plane.getPointDistance(plane, point);\n  const scaledNormal = Cartesian3.multiplyByScalar(\n    plane.normal,\n    pointDistance,\n    scratchCartesian,\n  );\n\n  return Cartesian3.subtract(point, scaledNormal, result);\n};\n\nconst scratchInverseTranspose = new Matrix4();\nconst scratchPlaneCartesian4 = new Cartesian4();\nconst scratchTransformNormal = new Cartesian3();\n/**\n * Transforms the plane by the given transformation matrix.\n *\n * @param {Plane} plane The plane.\n * @param {Matrix4} transform The transformation matrix.\n * @param {Plane} [result] The object into which to store the result.\n * @returns {Plane} The plane transformed by the given transformation matrix.\n */\nPlane.transform = function (plane, transform, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"plane\", plane);\n  Check.typeOf.object(\"transform\", transform);\n  //>>includeEnd('debug');\n\n  const normal = plane.normal;\n  const distance = plane.distance;\n  const inverseTranspose = Matrix4.inverseTranspose(\n    transform,\n    scratchInverseTranspose,\n  );\n  let planeAsCartesian4 = Cartesian4.fromElements(\n    normal.x,\n    normal.y,\n    normal.z,\n    distance,\n    scratchPlaneCartesian4,\n  );\n  planeAsCartesian4 = Matrix4.multiplyByVector(\n    inverseTranspose,\n    planeAsCartesian4,\n    planeAsCartesian4,\n  );\n\n  // Convert the transformed plane to Hessian Normal Form\n  const transformedNormal = Cartesian3.fromCartesian4(\n    planeAsCartesian4,\n    scratchTransformNormal,\n  );\n\n  planeAsCartesian4 = Cartesian4.divideByScalar(\n    planeAsCartesian4,\n    Cartesian3.magnitude(transformedNormal),\n    planeAsCartesian4,\n  );\n\n  return Plane.fromCartesian4(planeAsCartesian4, result);\n};\n\n/**\n * Duplicates a Plane instance.\n *\n * @param {Plane} plane The plane to duplicate.\n * @param {Plane} [result] The object onto which to store the result.\n * @returns {Plane} The modified result parameter or a new Plane instance if one was not provided.\n */\nPlane.clone = function (plane, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"plane\", plane);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Plane(plane.normal, plane.distance);\n  }\n\n  Cartesian3.clone(plane.normal, result.normal);\n  result.distance = plane.distance;\n\n  return result;\n};\n\n/**\n * Compares the provided Planes by normal and distance and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Plane} left The first plane.\n * @param {Plane} right The second plane.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPlane.equals = function (left, right) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  //>>includeEnd('debug');\n\n  return (\n    left.distance === right.distance &&\n    Cartesian3.equals(left.normal, right.normal)\n  );\n};\n\n/**\n * A constant initialized to the XY plane passing through the origin, with normal in positive Z.\n *\n * @type {Plane}\n * @constant\n */\nPlane.ORIGIN_XY_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_Z, 0.0));\n\n/**\n * A constant initialized to the YZ plane passing through the origin, with normal in positive X.\n *\n * @type {Plane}\n * @constant\n */\nPlane.ORIGIN_YZ_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_X, 0.0));\n\n/**\n * A constant initialized to the ZX plane passing through the origin, with normal in positive Y.\n *\n * @type {Plane}\n * @constant\n */\nPlane.ORIGIN_ZX_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_Y, 0.0));\nexport default Plane;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\n/**\n * Describes geometry representing a plane centered at the origin, with a unit width and length.\n *\n * @alias PlaneGeometry\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @example\n * const planeGeometry = new Cesium.PlaneGeometry({\n *   vertexFormat : Cesium.VertexFormat.POSITION_ONLY\n * });\n */\nfunction PlaneGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n\n  this._vertexFormat = vertexFormat;\n  this._workerName = \"createPlaneGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nPlaneGeometry.packedLength = VertexFormat.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PlaneGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nPlaneGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n\n  return array;\n};\n\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  vertexFormat: scratchVertexFormat,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PlaneGeometry} [result] The object into which to store the result.\n * @returns {PlaneGeometry} The modified result parameter or a new PlaneGeometry instance if one was not provided.\n */\nPlaneGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n\n  if (!defined(result)) {\n    return new PlaneGeometry(scratchOptions);\n  }\n\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n\n  return result;\n};\n\nconst min = new Cartesian3(-0.5, -0.5, 0.0);\nconst max = new Cartesian3(0.5, 0.5, 0.0);\n\n/**\n * Computes the geometric representation of a plane, including its vertices, indices, and a bounding sphere.\n *\n * @param {PlaneGeometry} planeGeometry A description of the plane.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPlaneGeometry.createGeometry = function (planeGeometry) {\n  const vertexFormat = planeGeometry._vertexFormat;\n\n  const attributes = new GeometryAttributes();\n  let indices;\n  let positions;\n\n  if (vertexFormat.position) {\n    // 4 corner points.  Duplicated 3 times each for each incident edge/face.\n    positions = new Float64Array(4 * 3);\n\n    // +z face\n    positions[0] = min.x;\n    positions[1] = min.y;\n    positions[2] = 0.0;\n    positions[3] = max.x;\n    positions[4] = min.y;\n    positions[5] = 0.0;\n    positions[6] = max.x;\n    positions[7] = max.y;\n    positions[8] = 0.0;\n    positions[9] = min.x;\n    positions[10] = max.y;\n    positions[11] = 0.0;\n\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    });\n\n    if (vertexFormat.normal) {\n      const normals = new Float32Array(4 * 3);\n\n      // +z face\n      normals[0] = 0.0;\n      normals[1] = 0.0;\n      normals[2] = 1.0;\n      normals[3] = 0.0;\n      normals[4] = 0.0;\n      normals[5] = 1.0;\n      normals[6] = 0.0;\n      normals[7] = 0.0;\n      normals[8] = 1.0;\n      normals[9] = 0.0;\n      normals[10] = 0.0;\n      normals[11] = 1.0;\n\n      attributes.normal = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: normals,\n      });\n    }\n\n    if (vertexFormat.st) {\n      const texCoords = new Float32Array(4 * 2);\n\n      // +z face\n      texCoords[0] = 0.0;\n      texCoords[1] = 0.0;\n      texCoords[2] = 1.0;\n      texCoords[3] = 0.0;\n      texCoords[4] = 1.0;\n      texCoords[5] = 1.0;\n      texCoords[6] = 0.0;\n      texCoords[7] = 1.0;\n\n      attributes.st = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 2,\n        values: texCoords,\n      });\n    }\n\n    if (vertexFormat.tangent) {\n      const tangents = new Float32Array(4 * 3);\n\n      // +z face\n      tangents[0] = 1.0;\n      tangents[1] = 0.0;\n      tangents[2] = 0.0;\n      tangents[3] = 1.0;\n      tangents[4] = 0.0;\n      tangents[5] = 0.0;\n      tangents[6] = 1.0;\n      tangents[7] = 0.0;\n      tangents[8] = 0.0;\n      tangents[9] = 1.0;\n      tangents[10] = 0.0;\n      tangents[11] = 0.0;\n\n      attributes.tangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: tangents,\n      });\n    }\n\n    if (vertexFormat.bitangent) {\n      const bitangents = new Float32Array(4 * 3);\n\n      // +z face\n      bitangents[0] = 0.0;\n      bitangents[1] = 1.0;\n      bitangents[2] = 0.0;\n      bitangents[3] = 0.0;\n      bitangents[4] = 1.0;\n      bitangents[5] = 0.0;\n      bitangents[6] = 0.0;\n      bitangents[7] = 1.0;\n      bitangents[8] = 0.0;\n      bitangents[9] = 0.0;\n      bitangents[10] = 1.0;\n      bitangents[11] = 0.0;\n\n      attributes.bitangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: bitangents,\n      });\n    }\n\n    // 2 triangles\n    indices = new Uint16Array(2 * 3);\n\n    // +z face\n    indices[0] = 0;\n    indices[1] = 1;\n    indices[2] = 2;\n    indices[3] = 0;\n    indices[4] = 2;\n    indices[5] = 3;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: new BoundingSphere(Cartesian3.ZERO, Math.sqrt(2.0)),\n  });\n};\nexport default PlaneGeometry;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\n/**\n * Describes geometry representing the outline of a plane centered at the origin, with a unit width and length.\n *\n * @alias PlaneOutlineGeometry\n * @constructor\n *\n */\nfunction PlaneOutlineGeometry() {\n  this._workerName = \"createPlaneOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nPlaneOutlineGeometry.packedLength = 0;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PlaneOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n *\n * @returns {number[]} The array that was packed into\n */\nPlaneOutlineGeometry.pack = function (value, array) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PlaneOutlineGeometry} [result] The object into which to store the result.\n * @returns {PlaneOutlineGeometry} The modified result parameter or a new PlaneOutlineGeometry instance if one was not provided.\n */\nPlaneOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new PlaneOutlineGeometry();\n  }\n\n  return result;\n};\n\nconst min = new Cartesian3(-0.5, -0.5, 0.0);\nconst max = new Cartesian3(0.5, 0.5, 0.0);\n\n/**\n * Computes the geometric representation of an outline of a plane, including its vertices, indices, and a bounding sphere.\n *\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPlaneOutlineGeometry.createGeometry = function () {\n  const attributes = new GeometryAttributes();\n  const indices = new Uint16Array(4 * 2);\n  const positions = new Float64Array(4 * 3);\n\n  positions[0] = min.x;\n  positions[1] = min.y;\n  positions[2] = min.z;\n  positions[3] = max.x;\n  positions[4] = min.y;\n  positions[5] = min.z;\n  positions[6] = max.x;\n  positions[7] = max.y;\n  positions[8] = min.z;\n  positions[9] = min.x;\n  positions[10] = max.y;\n  positions[11] = min.z;\n\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: positions,\n  });\n\n  indices[0] = 0;\n  indices[1] = 1;\n  indices[2] = 1;\n  indices[3] = 2;\n  indices[4] = 2;\n  indices[5] = 3;\n  indices[6] = 3;\n  indices[7] = 0;\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: new BoundingSphere(Cartesian3.ZERO, Math.sqrt(2.0)),\n  });\n};\nexport default PlaneOutlineGeometry;\n","import ArcType from \"./ArcType.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Stereographic from \"./Stereographic.js\";\nimport VertexFormat from \"./VertexFormat.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nconst scratchCarto1 = new Cartographic();\nconst scratchCarto2 = new Cartographic();\nfunction adjustPosHeightsForNormal(position, p1, p2, ellipsoid) {\n  const carto1 = ellipsoid.cartesianToCartographic(position, scratchCarto1);\n  const height = carto1.height;\n  const p1Carto = ellipsoid.cartesianToCartographic(p1, scratchCarto2);\n  p1Carto.height = height;\n  ellipsoid.cartographicToCartesian(p1Carto, p1);\n\n  const p2Carto = ellipsoid.cartesianToCartographic(p2, scratchCarto2);\n  p2Carto.height = height - 100;\n  ellipsoid.cartographicToCartesian(p2Carto, p2);\n}\n\nconst scratchBoundingRectangle = new BoundingRectangle();\nconst scratchPosition = new Cartesian3();\nconst scratchNormal = new Cartesian3();\nconst scratchTangent = new Cartesian3();\nconst scratchBitangent = new Cartesian3();\nconst p1Scratch = new Cartesian3();\nconst p2Scratch = new Cartesian3();\nlet scratchPerPosNormal = new Cartesian3();\nlet scratchPerPosTangent = new Cartesian3();\nlet scratchPerPosBitangent = new Cartesian3();\n\nconst appendTextureCoordinatesOrigin = new Cartesian2();\nconst appendTextureCoordinatesCartesian2 = new Cartesian2();\nconst appendTextureCoordinatesCartesian3 = new Cartesian3();\nconst appendTextureCoordinatesQuaternion = new Quaternion();\nconst appendTextureCoordinatesMatrix3 = new Matrix3();\nconst tangentMatrixScratch = new Matrix3();\n\nfunction computeAttributes(options) {\n  const vertexFormat = options.vertexFormat;\n  const geometry = options.geometry;\n  const shadowVolume = options.shadowVolume;\n  const flatPositions = geometry.attributes.position.values;\n  const flatTexcoords = defined(geometry.attributes.st)\n    ? geometry.attributes.st.values\n    : undefined;\n\n  let length = flatPositions.length;\n  const wall = options.wall;\n  const top = options.top || wall;\n  const bottom = options.bottom || wall;\n  if (\n    vertexFormat.st ||\n    vertexFormat.normal ||\n    vertexFormat.tangent ||\n    vertexFormat.bitangent ||\n    shadowVolume\n  ) {\n    // PERFORMANCE_IDEA: Compute before subdivision, then just interpolate during subdivision.\n    // PERFORMANCE_IDEA: Compute with createGeometryFromPositions() for fast path when there's no holes.\n    const boundingRectangle = options.boundingRectangle;\n    const rotationAxis = options.rotationAxis;\n    const projectTo2d = options.projectTo2d;\n    const ellipsoid = options.ellipsoid;\n    const stRotation = options.stRotation;\n    const perPositionHeight = options.perPositionHeight;\n\n    const origin = appendTextureCoordinatesOrigin;\n    origin.x = boundingRectangle.x;\n    origin.y = boundingRectangle.y;\n\n    const textureCoordinates = vertexFormat.st\n      ? new Float32Array(2 * (length / 3))\n      : undefined;\n    let normals;\n    if (vertexFormat.normal) {\n      if (perPositionHeight && top && !wall) {\n        normals = geometry.attributes.normal.values;\n      } else {\n        normals = new Float32Array(length);\n      }\n    }\n    const tangents = vertexFormat.tangent\n      ? new Float32Array(length)\n      : undefined;\n    const bitangents = vertexFormat.bitangent\n      ? new Float32Array(length)\n      : undefined;\n    const extrudeNormals = shadowVolume ? new Float32Array(length) : undefined;\n\n    let textureCoordIndex = 0;\n    let attrIndex = 0;\n\n    let normal = scratchNormal;\n    let tangent = scratchTangent;\n    let bitangent = scratchBitangent;\n    let recomputeNormal = true;\n\n    let textureMatrix = appendTextureCoordinatesMatrix3;\n    let tangentRotationMatrix = tangentMatrixScratch;\n    if (stRotation !== 0.0) {\n      let rotation = Quaternion.fromAxisAngle(\n        rotationAxis,\n        stRotation,\n        appendTextureCoordinatesQuaternion,\n      );\n      textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\n\n      rotation = Quaternion.fromAxisAngle(\n        rotationAxis,\n        -stRotation,\n        appendTextureCoordinatesQuaternion,\n      );\n      tangentRotationMatrix = Matrix3.fromQuaternion(\n        rotation,\n        tangentRotationMatrix,\n      );\n    } else {\n      textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\n      tangentRotationMatrix = Matrix3.clone(\n        Matrix3.IDENTITY,\n        tangentRotationMatrix,\n      );\n    }\n\n    let bottomOffset = 0;\n    let bottomOffset2 = 0;\n\n    if (top && bottom) {\n      bottomOffset = length / 2;\n      bottomOffset2 = length / 3;\n\n      length /= 2;\n    }\n\n    for (let i = 0; i < length; i += 3) {\n      const position = Cartesian3.fromArray(\n        flatPositions,\n        i,\n        appendTextureCoordinatesCartesian3,\n      );\n\n      if (vertexFormat.st) {\n        if (!defined(flatTexcoords)) {\n          let p = Matrix3.multiplyByVector(\n            textureMatrix,\n            position,\n            scratchPosition,\n          );\n          p = ellipsoid.scaleToGeodeticSurface(p, p);\n          const st = projectTo2d([p], appendTextureCoordinatesCartesian2)[0];\n          Cartesian2.subtract(st, origin, st);\n\n          const stx = CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1);\n          const sty = CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1);\n          if (bottom) {\n            textureCoordinates[textureCoordIndex + bottomOffset2] = stx;\n            textureCoordinates[textureCoordIndex + 1 + bottomOffset2] = sty;\n          }\n          if (top) {\n            textureCoordinates[textureCoordIndex] = stx;\n            textureCoordinates[textureCoordIndex + 1] = sty;\n          }\n\n          textureCoordIndex += 2;\n        }\n      }\n\n      if (\n        vertexFormat.normal ||\n        vertexFormat.tangent ||\n        vertexFormat.bitangent ||\n        shadowVolume\n      ) {\n        const attrIndex1 = attrIndex + 1;\n        const attrIndex2 = attrIndex + 2;\n\n        if (wall) {\n          if (i + 3 < length) {\n            const p1 = Cartesian3.fromArray(flatPositions, i + 3, p1Scratch);\n\n            if (recomputeNormal) {\n              const p2 = Cartesian3.fromArray(\n                flatPositions,\n                i + length,\n                p2Scratch,\n              );\n              if (perPositionHeight) {\n                adjustPosHeightsForNormal(position, p1, p2, ellipsoid);\n              }\n              Cartesian3.subtract(p1, position, p1);\n              Cartesian3.subtract(p2, position, p2);\n              normal = Cartesian3.normalize(\n                Cartesian3.cross(p2, p1, normal),\n                normal,\n              );\n              recomputeNormal = false;\n            }\n\n            if (Cartesian3.equalsEpsilon(p1, position, CesiumMath.EPSILON10)) {\n              // if we've reached a corner\n              recomputeNormal = true;\n            }\n          }\n\n          if (vertexFormat.tangent || vertexFormat.bitangent) {\n            bitangent = ellipsoid.geodeticSurfaceNormal(position, bitangent);\n            if (vertexFormat.tangent) {\n              tangent = Cartesian3.normalize(\n                Cartesian3.cross(bitangent, normal, tangent),\n                tangent,\n              );\n            }\n          }\n        } else {\n          normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n          if (vertexFormat.tangent || vertexFormat.bitangent) {\n            if (perPositionHeight) {\n              scratchPerPosNormal = Cartesian3.fromArray(\n                normals,\n                attrIndex,\n                scratchPerPosNormal,\n              );\n              scratchPerPosTangent = Cartesian3.cross(\n                Cartesian3.UNIT_Z,\n                scratchPerPosNormal,\n                scratchPerPosTangent,\n              );\n              scratchPerPosTangent = Cartesian3.normalize(\n                Matrix3.multiplyByVector(\n                  tangentRotationMatrix,\n                  scratchPerPosTangent,\n                  scratchPerPosTangent,\n                ),\n                scratchPerPosTangent,\n              );\n              if (vertexFormat.bitangent) {\n                scratchPerPosBitangent = Cartesian3.normalize(\n                  Cartesian3.cross(\n                    scratchPerPosNormal,\n                    scratchPerPosTangent,\n                    scratchPerPosBitangent,\n                  ),\n                  scratchPerPosBitangent,\n                );\n              }\n            }\n\n            tangent = Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent);\n            tangent = Cartesian3.normalize(\n              Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent),\n              tangent,\n            );\n            if (vertexFormat.bitangent) {\n              bitangent = Cartesian3.normalize(\n                Cartesian3.cross(normal, tangent, bitangent),\n                bitangent,\n              );\n            }\n          }\n        }\n\n        if (vertexFormat.normal) {\n          if (options.wall) {\n            normals[attrIndex + bottomOffset] = normal.x;\n            normals[attrIndex1 + bottomOffset] = normal.y;\n            normals[attrIndex2 + bottomOffset] = normal.z;\n          } else if (bottom) {\n            normals[attrIndex + bottomOffset] = -normal.x;\n            normals[attrIndex1 + bottomOffset] = -normal.y;\n            normals[attrIndex2 + bottomOffset] = -normal.z;\n          }\n\n          if ((top && !perPositionHeight) || wall) {\n            normals[attrIndex] = normal.x;\n            normals[attrIndex1] = normal.y;\n            normals[attrIndex2] = normal.z;\n          }\n        }\n\n        if (shadowVolume) {\n          if (wall) {\n            normal = ellipsoid.geodeticSurfaceNormal(position, normal);\n          }\n          extrudeNormals[attrIndex + bottomOffset] = -normal.x;\n          extrudeNormals[attrIndex1 + bottomOffset] = -normal.y;\n          extrudeNormals[attrIndex2 + bottomOffset] = -normal.z;\n        }\n\n        if (vertexFormat.tangent) {\n          if (options.wall) {\n            tangents[attrIndex + bottomOffset] = tangent.x;\n            tangents[attrIndex1 + bottomOffset] = tangent.y;\n            tangents[attrIndex2 + bottomOffset] = tangent.z;\n          } else if (bottom) {\n            tangents[attrIndex + bottomOffset] = -tangent.x;\n            tangents[attrIndex1 + bottomOffset] = -tangent.y;\n            tangents[attrIndex2 + bottomOffset] = -tangent.z;\n          }\n\n          if (top) {\n            if (perPositionHeight) {\n              tangents[attrIndex] = scratchPerPosTangent.x;\n              tangents[attrIndex1] = scratchPerPosTangent.y;\n              tangents[attrIndex2] = scratchPerPosTangent.z;\n            } else {\n              tangents[attrIndex] = tangent.x;\n              tangents[attrIndex1] = tangent.y;\n              tangents[attrIndex2] = tangent.z;\n            }\n          }\n        }\n\n        if (vertexFormat.bitangent) {\n          if (bottom) {\n            bitangents[attrIndex + bottomOffset] = bitangent.x;\n            bitangents[attrIndex1 + bottomOffset] = bitangent.y;\n            bitangents[attrIndex2 + bottomOffset] = bitangent.z;\n          }\n          if (top) {\n            if (perPositionHeight) {\n              bitangents[attrIndex] = scratchPerPosBitangent.x;\n              bitangents[attrIndex1] = scratchPerPosBitangent.y;\n              bitangents[attrIndex2] = scratchPerPosBitangent.z;\n            } else {\n              bitangents[attrIndex] = bitangent.x;\n              bitangents[attrIndex1] = bitangent.y;\n              bitangents[attrIndex2] = bitangent.z;\n            }\n          }\n        }\n        attrIndex += 3;\n      }\n    }\n\n    if (vertexFormat.st && !defined(flatTexcoords)) {\n      geometry.attributes.st = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 2,\n        values: textureCoordinates,\n      });\n    }\n\n    if (vertexFormat.normal) {\n      geometry.attributes.normal = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: normals,\n      });\n    }\n\n    if (vertexFormat.tangent) {\n      geometry.attributes.tangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: tangents,\n      });\n    }\n\n    if (vertexFormat.bitangent) {\n      geometry.attributes.bitangent = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: bitangents,\n      });\n    }\n\n    if (shadowVolume) {\n      geometry.attributes.extrudeDirection = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n        values: extrudeNormals,\n      });\n    }\n  }\n\n  if (options.extrude && defined(options.offsetAttribute)) {\n    const size = flatPositions.length / 3;\n    let offsetAttribute = new Uint8Array(size);\n\n    if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\n      if ((top && bottom) || wall) {\n        offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\n      } else if (top) {\n        offsetAttribute = offsetAttribute.fill(1);\n      }\n    } else {\n      const offsetValue =\n        options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\n      offsetAttribute = offsetAttribute.fill(offsetValue);\n    }\n\n    geometry.attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: offsetAttribute,\n    });\n  }\n\n  return geometry;\n}\n\nconst createGeometryFromPositionsExtrudedPositions = [];\n\nfunction createGeometryFromPositionsExtruded(\n  ellipsoid,\n  polygon,\n  textureCoordinates,\n  granularity,\n  hierarchy,\n  perPositionHeight,\n  closeTop,\n  closeBottom,\n  vertexFormat,\n  arcType,\n) {\n  const geos = {\n    walls: [],\n  };\n  let i;\n\n  if (closeTop || closeBottom) {\n    const topGeo = PolygonGeometryLibrary.createGeometryFromPositions(\n      ellipsoid,\n      polygon,\n      textureCoordinates,\n      granularity,\n      perPositionHeight,\n      vertexFormat,\n      arcType,\n    );\n\n    const edgePoints = topGeo.attributes.position.values;\n    const indices = topGeo.indices;\n    let numPositions;\n    let newIndices;\n\n    if (closeTop && closeBottom) {\n      const topBottomPositions = edgePoints.concat(edgePoints);\n\n      numPositions = topBottomPositions.length / 3;\n\n      newIndices = IndexDatatype.createTypedArray(\n        numPositions,\n        indices.length * 2,\n      );\n      newIndices.set(indices);\n      const ilength = indices.length;\n\n      const length = numPositions / 2;\n\n      for (i = 0; i < ilength; i += 3) {\n        const i0 = newIndices[i] + length;\n        const i1 = newIndices[i + 1] + length;\n        const i2 = newIndices[i + 2] + length;\n\n        newIndices[i + ilength] = i2;\n        newIndices[i + 1 + ilength] = i1;\n        newIndices[i + 2 + ilength] = i0;\n      }\n\n      topGeo.attributes.position.values = topBottomPositions;\n      if (perPositionHeight && vertexFormat.normal) {\n        const normals = topGeo.attributes.normal.values;\n        topGeo.attributes.normal.values = new Float32Array(\n          topBottomPositions.length,\n        );\n        topGeo.attributes.normal.values.set(normals);\n      }\n\n      if (vertexFormat.st && defined(textureCoordinates)) {\n        const texcoords = topGeo.attributes.st.values;\n        topGeo.attributes.st.values = new Float32Array(numPositions * 2);\n        topGeo.attributes.st.values = texcoords.concat(texcoords);\n      }\n\n      topGeo.indices = newIndices;\n    } else if (closeBottom) {\n      numPositions = edgePoints.length / 3;\n      newIndices = IndexDatatype.createTypedArray(numPositions, indices.length);\n\n      for (i = 0; i < indices.length; i += 3) {\n        newIndices[i] = indices[i + 2];\n        newIndices[i + 1] = indices[i + 1];\n        newIndices[i + 2] = indices[i];\n      }\n\n      topGeo.indices = newIndices;\n    }\n\n    geos.topAndBottom = new GeometryInstance({\n      geometry: topGeo,\n    });\n  }\n\n  let outerRing = hierarchy.outerRing;\n  const tangentPlane = EllipsoidTangentPlane.fromPoints(outerRing, ellipsoid);\n  let positions2D = tangentPlane.projectPointsOntoPlane(\n    outerRing,\n    createGeometryFromPositionsExtrudedPositions,\n  );\n\n  let windingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\n  if (windingOrder === WindingOrder.CLOCKWISE) {\n    outerRing = outerRing.slice().reverse();\n  }\n\n  let wallGeo = PolygonGeometryLibrary.computeWallGeometry(\n    outerRing,\n    textureCoordinates,\n    ellipsoid,\n    granularity,\n    perPositionHeight,\n    arcType,\n  );\n  geos.walls.push(\n    new GeometryInstance({\n      geometry: wallGeo,\n    }),\n  );\n\n  const holes = hierarchy.holes;\n  for (i = 0; i < holes.length; i++) {\n    let hole = holes[i];\n    positions2D = tangentPlane.projectPointsOntoPlane(\n      hole,\n      createGeometryFromPositionsExtrudedPositions,\n    );\n\n    windingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\n    if (windingOrder === WindingOrder.COUNTER_CLOCKWISE) {\n      hole = hole.slice().reverse();\n    }\n\n    wallGeo = PolygonGeometryLibrary.computeWallGeometry(\n      hole,\n      textureCoordinates,\n      ellipsoid,\n      granularity,\n      perPositionHeight,\n      arcType,\n    );\n    geos.walls.push(\n      new GeometryInstance({\n        geometry: wallGeo,\n      }),\n    );\n  }\n\n  return geos;\n}\n\n/**\n * A description of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias PolygonGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n * @param {number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface.\n * @param {number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open.\n * @param {boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives.\n *\n * @see PolygonGeometry#createGeometry\n * @see PolygonGeometry#fromPositions\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=polygon|Cesium Sandcastle Polygon Demo}\n *\n * @example\n * // 1. create a polygon from points\n * const polygon = new Cesium.PolygonGeometry({\n *   polygonHierarchy : new Cesium.PolygonHierarchy(\n *     Cesium.Cartesian3.fromDegreesArray([\n *       -72.0, 40.0,\n *       -70.0, 35.0,\n *       -75.0, 30.0,\n *       -70.0, 30.0,\n *       -68.0, 40.0\n *     ])\n *   )\n * });\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygon);\n *\n * // 2. create a nested polygon with holes\n * const polygonWithHole = new Cesium.PolygonGeometry({\n *   polygonHierarchy : new Cesium.PolygonHierarchy(\n *     Cesium.Cartesian3.fromDegreesArray([\n *       -109.0, 30.0,\n *       -95.0, 30.0,\n *       -95.0, 40.0,\n *       -109.0, 40.0\n *     ]),\n *     [new Cesium.PolygonHierarchy(\n *       Cesium.Cartesian3.fromDegreesArray([\n *         -107.0, 31.0,\n *         -107.0, 39.0,\n *         -97.0, 39.0,\n *         -97.0, 31.0\n *       ]),\n *       [new Cesium.PolygonHierarchy(\n *         Cesium.Cartesian3.fromDegreesArray([\n *           -105.0, 33.0,\n *           -99.0, 33.0,\n *           -99.0, 37.0,\n *           -105.0, 37.0\n *         ]),\n *         [new Cesium.PolygonHierarchy(\n *           Cesium.Cartesian3.fromDegreesArray([\n *             -103.0, 34.0,\n *             -101.0, 34.0,\n *             -101.0, 36.0,\n *             -103.0, 36.0\n *           ])\n *         )]\n *       )]\n *     )]\n *   )\n * });\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygonWithHole);\n *\n * // 3. create extruded polygon\n * const extrudedPolygon = new Cesium.PolygonGeometry({\n *   polygonHierarchy : new Cesium.PolygonHierarchy(\n *     Cesium.Cartesian3.fromDegreesArray([\n *       -72.0, 40.0,\n *       -70.0, 35.0,\n *       -75.0, 30.0,\n *       -70.0, 30.0,\n *       -68.0, 40.0\n *     ])\n *   ),\n *   extrudedHeight: 300000\n * });\n * const geometry = Cesium.PolygonGeometry.createGeometry(extrudedPolygon);\n */\nfunction PolygonGeometry(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\n  if (\n    defined(options.perPositionHeight) &&\n    options.perPositionHeight &&\n    defined(options.height)\n  ) {\n    throw new DeveloperError(\n      \"Cannot use both options.perPositionHeight and options.height\",\n    );\n  }\n  if (\n    defined(options.arcType) &&\n    options.arcType !== ArcType.GEODESIC &&\n    options.arcType !== ArcType.RHUMB\n  ) {\n    throw new DeveloperError(\n      \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const polygonHierarchy = options.polygonHierarchy;\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const stRotation = options.stRotation ?? 0.0;\n  const textureCoordinates = options.textureCoordinates;\n  const perPositionHeight = options.perPositionHeight ?? false;\n  const perPositionHeightExtrude =\n    perPositionHeight && defined(options.extrudedHeight);\n  let height = options.height ?? 0.0;\n  let extrudedHeight = options.extrudedHeight ?? height;\n\n  if (!perPositionHeightExtrude) {\n    const h = Math.max(height, extrudedHeight);\n    extrudedHeight = Math.min(height, extrudedHeight);\n    height = h;\n  }\n\n  this._vertexFormat = VertexFormat.clone(vertexFormat);\n  this._ellipsoid = Ellipsoid.clone(ellipsoid);\n  this._granularity = granularity;\n  this._stRotation = stRotation;\n  this._height = height;\n  this._extrudedHeight = extrudedHeight;\n  this._closeTop = options.closeTop ?? true;\n  this._closeBottom = options.closeBottom ?? true;\n  this._polygonHierarchy = polygonHierarchy;\n  this._perPositionHeight = perPositionHeight;\n  this._perPositionHeightExtrude = perPositionHeightExtrude;\n  this._shadowVolume = options.shadowVolume ?? false;\n  this._workerName = \"createPolygonGeometry\";\n  this._offsetAttribute = options.offsetAttribute;\n  this._arcType = options.arcType ?? ArcType.GEODESIC;\n\n  this._rectangle = undefined;\n  this._textureCoordinateRotationPoints = undefined;\n  this._textureCoordinates = textureCoordinates;\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    PolygonGeometryLibrary.computeHierarchyPackedLength(\n      polygonHierarchy,\n      Cartesian3,\n    ) +\n    Ellipsoid.packedLength +\n    VertexFormat.packedLength +\n    (textureCoordinates\n      ? PolygonGeometryLibrary.computeHierarchyPackedLength(\n          textureCoordinates,\n          Cartesian2,\n        )\n      : 1) +\n    12;\n}\n\n/**\n * A description of a polygon from an array of positions. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @param {number} [options.height=0.0] The height of the polygon.\n * @param {number} [options.extrudedHeight] The height of the polygon extrusion.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open.\n * @param {boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives.\n * @returns {PolygonGeometry}\n *\n * @example\n * // create a polygon from points\n * const polygon = Cesium.PolygonGeometry.fromPositions({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     -72.0, 40.0,\n *     -70.0, 35.0,\n *     -75.0, 30.0,\n *     -70.0, 30.0,\n *     -68.0, 40.0\n *   ])\n * });\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygon);\n *\n * @see PolygonGeometry#createGeometry\n */\nPolygonGeometry.fromPositions = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.positions\", options.positions);\n  //>>includeEnd('debug');\n\n  const newOptions = {\n    polygonHierarchy: {\n      positions: options.positions,\n    },\n    height: options.height,\n    extrudedHeight: options.extrudedHeight,\n    vertexFormat: options.vertexFormat,\n    stRotation: options.stRotation,\n    ellipsoid: options.ellipsoid,\n    granularity: options.granularity,\n    perPositionHeight: options.perPositionHeight,\n    closeTop: options.closeTop,\n    closeBottom: options.closeBottom,\n    offsetAttribute: options.offsetAttribute,\n    arcType: options.arcType,\n    textureCoordinates: options.textureCoordinates,\n  };\n  return new PolygonGeometry(newOptions);\n};\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolygonGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nPolygonGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n    value._polygonHierarchy,\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._height;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex++] = value._granularity;\n  array[startingIndex++] = value._stRotation;\n  array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0;\n  array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0;\n  array[startingIndex++] = value._closeTop ? 1.0 : 0.0;\n  array[startingIndex++] = value._closeBottom ? 1.0 : 0.0;\n  array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n  array[startingIndex++] = value._offsetAttribute ?? -1;\n  array[startingIndex++] = value._arcType;\n  if (defined(value._textureCoordinates)) {\n    startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n      value._textureCoordinates,\n      array,\n      startingIndex,\n      Cartesian2,\n    );\n  } else {\n    array[startingIndex++] = -1.0;\n  }\n  array[startingIndex++] = value.packedLength;\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchVertexFormat = new VertexFormat();\n\n//Only used to avoid inability to default construct.\nconst dummyOptions = {\n  polygonHierarchy: {},\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolygonGeometry} [result] The object into which to store the result.\n * @returns {PolygonGeometry} The modified result parameter or a new PolygonGeometry instance if one was not provided.\n */\nPolygonGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n  startingIndex = polygonHierarchy.startingIndex;\n  delete polygonHierarchy.startingIndex;\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const height = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const granularity = array[startingIndex++];\n  const stRotation = array[startingIndex++];\n  const perPositionHeightExtrude = array[startingIndex++] === 1.0;\n  const perPositionHeight = array[startingIndex++] === 1.0;\n  const closeTop = array[startingIndex++] === 1.0;\n  const closeBottom = array[startingIndex++] === 1.0;\n  const shadowVolume = array[startingIndex++] === 1.0;\n  const offsetAttribute = array[startingIndex++];\n  const arcType = array[startingIndex++];\n  const textureCoordinates =\n    array[startingIndex] === -1.0\n      ? undefined\n      : PolygonGeometryLibrary.unpackPolygonHierarchy(\n          array,\n          startingIndex,\n          Cartesian2,\n        );\n  if (defined(textureCoordinates)) {\n    startingIndex = textureCoordinates.startingIndex;\n    delete textureCoordinates.startingIndex;\n  } else {\n    startingIndex++;\n  }\n  const packedLength = array[startingIndex++];\n\n  if (!defined(result)) {\n    result = new PolygonGeometry(dummyOptions);\n  }\n\n  result._polygonHierarchy = polygonHierarchy;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._height = height;\n  result._extrudedHeight = extrudedHeight;\n  result._granularity = granularity;\n  result._stRotation = stRotation;\n  result._perPositionHeightExtrude = perPositionHeightExtrude;\n  result._perPositionHeight = perPositionHeight;\n  result._closeTop = closeTop;\n  result._closeBottom = closeBottom;\n  result._shadowVolume = shadowVolume;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n  result._arcType = arcType;\n  result._textureCoordinates = textureCoordinates;\n  result.packedLength = packedLength;\n\n  return result;\n};\n\nconst scratchCartesian0 = new Cartesian2();\nconst scratchCartesian1 = new Cartesian2();\nconst scratchPolarClosest = new Stereographic();\nfunction expandRectangle(\n  polar,\n  lastPolar,\n  ellipsoid,\n  arcType,\n  polygon,\n  result,\n) {\n  const longitude = polar.longitude;\n  const lonAdjusted =\n    longitude >= 0.0 ? longitude : longitude + CesiumMath.TWO_PI;\n  polygon.westOverIdl = Math.min(polygon.westOverIdl, lonAdjusted);\n  polygon.eastOverIdl = Math.max(polygon.eastOverIdl, lonAdjusted);\n\n  result.west = Math.min(result.west, longitude);\n  result.east = Math.max(result.east, longitude);\n\n  const latitude = polar.getLatitude(ellipsoid);\n  let segmentLatitude = latitude;\n\n  result.south = Math.min(result.south, latitude);\n  result.north = Math.max(result.north, latitude);\n\n  if (arcType !== ArcType.RHUMB) {\n    // Geodesics will need to find the closest point on line. Rhumb lines will not have a latitude greater in magnitude than either of their endpoints.\n    const segment = Cartesian2.subtract(\n      lastPolar.position,\n      polar.position,\n      scratchCartesian0,\n    );\n    const t =\n      Cartesian2.dot(lastPolar.position, segment) /\n      Cartesian2.dot(segment, segment);\n    if (t > 0.0 && t < 1.0) {\n      const projected = Cartesian2.add(\n        lastPolar.position,\n        Cartesian2.multiplyByScalar(segment, -t, segment),\n        scratchCartesian1,\n      );\n      const closestPolar = Stereographic.clone(lastPolar, scratchPolarClosest);\n      closestPolar.position = projected;\n      const adjustedLatitude = closestPolar.getLatitude(ellipsoid);\n      result.south = Math.min(result.south, adjustedLatitude);\n      result.north = Math.max(result.north, adjustedLatitude);\n\n      if (Math.abs(latitude) > Math.abs(adjustedLatitude)) {\n        segmentLatitude = adjustedLatitude;\n      }\n    }\n  }\n  const direction = lastPolar.x * polar.y - polar.x * lastPolar.y;\n\n  // The total internal angle in either hemisphere determines if the pole is inside or outside the polygon\n  let angle = Math.sign(direction);\n  if (angle !== 0.0) {\n    angle *= Cartesian2.angleBetween(lastPolar.position, polar.position);\n  }\n\n  if (segmentLatitude >= 0.0) {\n    polygon.northAngle += angle;\n  }\n\n  if (segmentLatitude <= 0.0) {\n    polygon.southAngle += angle;\n  }\n}\n\nconst scratchPolar = new Stereographic();\nconst scratchPolarPrevious = new Stereographic();\nconst polygon = {\n  northAngle: 0.0,\n  southAngle: 0.0,\n  westOverIdl: 0.0,\n  eastOverIdl: 0.0,\n};\n\n/**\n * Computes a rectangle which encloses the polygon defined by the list of positions, including cases over the international date line and the poles.\n *\n * @param {Cartesian3[]} positions A linear ring defining the outer boundary of the polygon.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {ArcType} [arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n * @param {Rectangle} [result] An object in which to store the result.\n *\n * @returns {Rectangle} The result rectangle\n */\nPolygonGeometry.computeRectangleFromPositions = function (\n  positions,\n  ellipsoid,\n  arcType,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"positions\", positions);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Rectangle();\n  }\n\n  if (positions.length < 3) {\n    return result;\n  }\n\n  result.west = Number.POSITIVE_INFINITY;\n  result.east = Number.NEGATIVE_INFINITY;\n  result.south = Number.POSITIVE_INFINITY;\n  result.north = Number.NEGATIVE_INFINITY;\n\n  polygon.northAngle = 0.0;\n  polygon.southAngle = 0.0;\n  polygon.westOverIdl = Number.POSITIVE_INFINITY;\n  polygon.eastOverIdl = Number.NEGATIVE_INFINITY;\n\n  const positionsLength = positions.length;\n  let lastPolarPosition = Stereographic.fromCartesian(\n    positions[0],\n    scratchPolarPrevious,\n  );\n  for (let i = 1; i < positionsLength; i++) {\n    const polarPosition = Stereographic.fromCartesian(\n      positions[i],\n      scratchPolar,\n    );\n    expandRectangle(\n      polarPosition,\n      lastPolarPosition,\n      ellipsoid,\n      arcType,\n      polygon,\n      result,\n    );\n\n    lastPolarPosition = Stereographic.clone(polarPosition, lastPolarPosition);\n  }\n\n  expandRectangle(\n    Stereographic.fromCartesian(positions[0], scratchPolar),\n    lastPolarPosition,\n    ellipsoid,\n    arcType,\n    polygon,\n    result,\n  );\n\n  if (result.east - result.west > polygon.eastOverIdl - polygon.westOverIdl) {\n    result.west = polygon.westOverIdl;\n    result.east = polygon.eastOverIdl;\n\n    if (result.east > CesiumMath.PI) {\n      result.east = result.east - CesiumMath.TWO_PI;\n    }\n    if (result.west > CesiumMath.PI) {\n      result.west = result.west - CesiumMath.TWO_PI;\n    }\n  }\n\n  // If either pole is inside the polygon, adjust the rectangle so the pole is included\n  if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(polygon.northAngle),\n      CesiumMath.TWO_PI,\n      CesiumMath.EPSILON10,\n    )\n  ) {\n    result.north = CesiumMath.PI_OVER_TWO;\n    result.east = CesiumMath.PI;\n    result.west = -CesiumMath.PI;\n  }\n\n  if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(polygon.southAngle),\n      CesiumMath.TWO_PI,\n      CesiumMath.EPSILON10,\n    )\n  ) {\n    result.south = -CesiumMath.PI_OVER_TWO;\n    result.east = CesiumMath.PI;\n    result.west = -CesiumMath.PI;\n  }\n\n  return result;\n};\n\nconst scratchPolarForPlane = new Stereographic();\nfunction getTangentPlane(rectangle, positions, ellipsoid) {\n  if (rectangle.height >= CesiumMath.PI || rectangle.width >= CesiumMath.PI) {\n    const polar = Stereographic.fromCartesian(\n      positions[0],\n      scratchPolarForPlane,\n    );\n    return polar.tangentPlane;\n  }\n\n  // Use a local tangent plane for smaller extents\n  return EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\n}\n\nconst scratchCartographicCyllindrical = new Cartographic();\nfunction createProjectTo2d(rectangle, outerPositions, ellipsoid) {\n  return (positions, results) => {\n    // If the polygon positions span a large enough extent, use a specialized projection\n    if (rectangle.height >= CesiumMath.PI || rectangle.width >= CesiumMath.PI) {\n      // polygons that cross the equator must use cyllindrical coordinates to correctly compute winding order.\n      if (rectangle.south < 0 && rectangle.north > 0) {\n        if (!defined(results)) {\n          results = [];\n        }\n\n        for (let i = 0; i < positions.length; ++i) {\n          const cartographic = ellipsoid.cartesianToCartographic(\n            positions[i],\n            scratchCartographicCyllindrical,\n          );\n          results[i] = new Cartesian2(\n            cartographic.longitude / CesiumMath.PI,\n            cartographic.latitude / CesiumMath.PI_OVER_TWO,\n          );\n        }\n\n        results.length = positions.length;\n        return results;\n      }\n\n      return Stereographic.fromCartesianArray(positions, results);\n    }\n\n    // Use a local tangent plane for smaller extents\n    const tangentPlane = EllipsoidTangentPlane.fromPoints(\n      outerPositions,\n      ellipsoid,\n    );\n    return tangentPlane.projectPointsOntoPlane(positions, results);\n  };\n}\n\nfunction createProjectPositionTo2d(rectangle, outerRing, ellipsoid) {\n  // If the polygon positions span a large enough extent, use a specialized projection\n  if (rectangle.height >= CesiumMath.PI || rectangle.width >= CesiumMath.PI) {\n    return (position, result) => {\n      // polygons that cross the equator must use cyllindrical coordinates to correctly compute winding order.\n      if (rectangle.south < 0 && rectangle.north > 0) {\n        const cartographic = ellipsoid.cartesianToCartographic(\n          position,\n          scratchCartographicCyllindrical,\n        );\n        if (!defined(result)) {\n          result = new Cartesian2();\n        }\n        result.x = cartographic.longitude / CesiumMath.PI;\n        result.y = cartographic.latitude / CesiumMath.PI_OVER_TWO;\n\n        return result;\n      }\n\n      return Stereographic.fromCartesian(position, result);\n    };\n  }\n\n  const tangentPlane = EllipsoidTangentPlane.fromPoints(outerRing, ellipsoid);\n  return (position, result) => {\n    // Use a local tangent plane for smaller extents\n    return tangentPlane.projectPointsOntoPlane(position, result);\n  };\n}\n\nfunction createSplitPolygons(rectangle, ellipsoid, arcType, perPositionHeight) {\n  return (polygons, results) => {\n    if (\n      !perPositionHeight &&\n      (rectangle.height >= CesiumMath.PI_OVER_TWO ||\n        rectangle.width >= 2 * CesiumMath.PI_OVER_THREE)\n    ) {\n      return PolygonGeometryLibrary.splitPolygonsOnEquator(\n        polygons,\n        ellipsoid,\n        arcType,\n        results,\n      );\n    }\n\n    return polygons;\n  };\n}\n\nfunction computeBoundingRectangle(outerRing, rectangle, ellipsoid, stRotation) {\n  if (rectangle.height >= CesiumMath.PI || rectangle.width >= CesiumMath.PI) {\n    return BoundingRectangle.fromRectangle(\n      rectangle,\n      undefined,\n      scratchBoundingRectangle,\n    );\n  }\n\n  const outerPositions = outerRing;\n  const tangentPlane = EllipsoidTangentPlane.fromPoints(\n    outerPositions,\n    ellipsoid,\n  );\n  return PolygonGeometryLibrary.computeBoundingRectangle(\n    tangentPlane.plane.normal,\n    tangentPlane.projectPointOntoPlane.bind(tangentPlane),\n    outerPositions,\n    stRotation,\n    scratchBoundingRectangle,\n  );\n}\n\n/**\n * Computes the geometric representation of a polygon, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolygonGeometry} polygonGeometry A description of the polygon.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolygonGeometry.createGeometry = function (polygonGeometry) {\n  const vertexFormat = polygonGeometry._vertexFormat;\n  const ellipsoid = polygonGeometry._ellipsoid;\n  const granularity = polygonGeometry._granularity;\n  const stRotation = polygonGeometry._stRotation;\n  const polygonHierarchy = polygonGeometry._polygonHierarchy;\n  const perPositionHeight = polygonGeometry._perPositionHeight;\n  const closeTop = polygonGeometry._closeTop;\n  const closeBottom = polygonGeometry._closeBottom;\n  const arcType = polygonGeometry._arcType;\n  const textureCoordinates = polygonGeometry._textureCoordinates;\n\n  const hasTextureCoordinates = defined(textureCoordinates);\n\n  const outerPositions = polygonHierarchy.positions;\n  if (outerPositions.length < 3) {\n    return;\n  }\n\n  const rectangle = polygonGeometry.rectangle;\n  const results = PolygonGeometryLibrary.polygonsFromHierarchy(\n    polygonHierarchy,\n    hasTextureCoordinates,\n    createProjectTo2d(rectangle, outerPositions, ellipsoid),\n    !perPositionHeight,\n    ellipsoid,\n    createSplitPolygons(rectangle, ellipsoid, arcType, perPositionHeight),\n  );\n\n  const hierarchy = results.hierarchy;\n  const polygons = results.polygons;\n\n  const dummyFunction = function (identity) {\n    return identity;\n  };\n\n  const textureCoordinatePolygons = hasTextureCoordinates\n    ? PolygonGeometryLibrary.polygonsFromHierarchy(\n        textureCoordinates,\n        true,\n        dummyFunction,\n        false,\n        ellipsoid,\n      ).polygons\n    : undefined;\n\n  if (hierarchy.length === 0) {\n    return;\n  }\n\n  const outerRing = hierarchy[0].outerRing;\n  const boundingRectangle = computeBoundingRectangle(\n    outerRing,\n    rectangle,\n    ellipsoid,\n    stRotation,\n  );\n\n  const geometries = [];\n\n  const height = polygonGeometry._height;\n  const extrudedHeight = polygonGeometry._extrudedHeight;\n  const extrude =\n    polygonGeometry._perPositionHeightExtrude ||\n    !CesiumMath.equalsEpsilon(height, extrudedHeight, 0, CesiumMath.EPSILON2);\n\n  const options = {\n    perPositionHeight: perPositionHeight,\n    vertexFormat: vertexFormat,\n    geometry: undefined,\n    rotationAxis: getTangentPlane(rectangle, outerRing, ellipsoid).plane.normal,\n    projectTo2d: createProjectPositionTo2d(rectangle, outerRing, ellipsoid),\n    boundingRectangle: boundingRectangle,\n    ellipsoid: ellipsoid,\n    stRotation: stRotation,\n    textureCoordinates: undefined,\n    bottom: false,\n    top: true,\n    wall: false,\n    extrude: false,\n    arcType: arcType,\n  };\n\n  let i;\n\n  if (extrude) {\n    options.extrude = true;\n    options.top = closeTop;\n    options.bottom = closeBottom;\n    options.shadowVolume = polygonGeometry._shadowVolume;\n    options.offsetAttribute = polygonGeometry._offsetAttribute;\n    for (i = 0; i < polygons.length; i++) {\n      const splitGeometry = createGeometryFromPositionsExtruded(\n        ellipsoid,\n        polygons[i],\n        hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined,\n        granularity,\n        hierarchy[i],\n        perPositionHeight,\n        closeTop,\n        closeBottom,\n        vertexFormat,\n        arcType,\n      );\n\n      let topAndBottom;\n      if (closeTop && closeBottom) {\n        topAndBottom = splitGeometry.topAndBottom;\n        options.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\n          topAndBottom.geometry,\n          height,\n          extrudedHeight,\n          ellipsoid,\n          perPositionHeight,\n        );\n      } else if (closeTop) {\n        topAndBottom = splitGeometry.topAndBottom;\n        topAndBottom.geometry.attributes.position.values =\n          PolygonPipeline.scaleToGeodeticHeight(\n            topAndBottom.geometry.attributes.position.values,\n            height,\n            ellipsoid,\n            !perPositionHeight,\n          );\n        options.geometry = topAndBottom.geometry;\n      } else if (closeBottom) {\n        topAndBottom = splitGeometry.topAndBottom;\n        topAndBottom.geometry.attributes.position.values =\n          PolygonPipeline.scaleToGeodeticHeight(\n            topAndBottom.geometry.attributes.position.values,\n            extrudedHeight,\n            ellipsoid,\n            true,\n          );\n        options.geometry = topAndBottom.geometry;\n      }\n      if (closeTop || closeBottom) {\n        options.wall = false;\n        topAndBottom.geometry = computeAttributes(options);\n        geometries.push(topAndBottom);\n      }\n\n      const walls = splitGeometry.walls;\n      options.wall = true;\n      for (let k = 0; k < walls.length; k++) {\n        const wall = walls[k];\n        options.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\n          wall.geometry,\n          height,\n          extrudedHeight,\n          ellipsoid,\n          perPositionHeight,\n        );\n        wall.geometry = computeAttributes(options);\n        geometries.push(wall);\n      }\n    }\n  } else {\n    for (i = 0; i < polygons.length; i++) {\n      const geometryInstance = new GeometryInstance({\n        geometry: PolygonGeometryLibrary.createGeometryFromPositions(\n          ellipsoid,\n          polygons[i],\n          hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined,\n          granularity,\n          perPositionHeight,\n          vertexFormat,\n          arcType,\n        ),\n      });\n      geometryInstance.geometry.attributes.position.values =\n        PolygonPipeline.scaleToGeodeticHeight(\n          geometryInstance.geometry.attributes.position.values,\n          height,\n          ellipsoid,\n          !perPositionHeight,\n        );\n      options.geometry = geometryInstance.geometry;\n\n      geometryInstance.geometry = computeAttributes(options);\n\n      if (defined(polygonGeometry._offsetAttribute)) {\n        const length =\n          geometryInstance.geometry.attributes.position.values.length;\n        const offsetValue =\n          polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n            ? 0\n            : 1;\n        const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n        geometryInstance.geometry.attributes.applyOffset =\n          new GeometryAttribute({\n            componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n            componentsPerAttribute: 1,\n            values: applyOffset,\n          });\n      }\n\n      geometries.push(geometryInstance);\n    }\n  }\n\n  const geometry = GeometryPipeline.combineInstances(geometries)[0];\n  geometry.attributes.position.values = new Float64Array(\n    geometry.attributes.position.values,\n  );\n  geometry.indices = IndexDatatype.createTypedArray(\n    geometry.attributes.position.values.length / 3,\n    geometry.indices,\n  );\n\n  const attributes = geometry.attributes;\n  const boundingSphere = BoundingSphere.fromVertices(\n    attributes.position.values,\n  );\n\n  if (!vertexFormat.position) {\n    delete attributes.position;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: geometry.indices,\n    primitiveType: geometry.primitiveType,\n    boundingSphere: boundingSphere,\n    offsetAttribute: polygonGeometry._offsetAttribute,\n  });\n};\n\n/**\n * @private\n */\nPolygonGeometry.createShadowVolume = function (\n  polygonGeometry,\n  minHeightFunc,\n  maxHeightFunc,\n) {\n  const granularity = polygonGeometry._granularity;\n  const ellipsoid = polygonGeometry._ellipsoid;\n\n  const minHeight = minHeightFunc(granularity, ellipsoid);\n  const maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n  return new PolygonGeometry({\n    polygonHierarchy: polygonGeometry._polygonHierarchy,\n    ellipsoid: ellipsoid,\n    stRotation: polygonGeometry._stRotation,\n    granularity: granularity,\n    perPositionHeight: false,\n    extrudedHeight: minHeight,\n    height: maxHeight,\n    vertexFormat: VertexFormat.POSITION_ONLY,\n    shadowVolume: true,\n    arcType: polygonGeometry._arcType,\n  });\n};\n\nfunction textureCoordinateRotationPoints(polygonGeometry) {\n  const stRotation = -polygonGeometry._stRotation;\n  if (stRotation === 0.0) {\n    return [0, 0, 0, 1, 1, 0];\n  }\n  const ellipsoid = polygonGeometry._ellipsoid;\n  const positions = polygonGeometry._polygonHierarchy.positions;\n  const boundingRectangle = polygonGeometry.rectangle;\n  return Geometry._textureCoordinateRotationPoints(\n    positions,\n    stRotation,\n    ellipsoid,\n    boundingRectangle,\n  );\n}\n\nObject.defineProperties(PolygonGeometry.prototype, {\n  /**\n   * @private\n   */\n  rectangle: {\n    get: function () {\n      if (!defined(this._rectangle)) {\n        const positions = this._polygonHierarchy.positions;\n        this._rectangle = PolygonGeometry.computeRectangleFromPositions(\n          positions,\n          this._ellipsoid,\n          this._arcType,\n        );\n      }\n\n      return this._rectangle;\n    },\n  },\n  /**\n   * For remapping texture coordinates when rendering PolygonGeometries as GroundPrimitives.\n   * @private\n   */\n  textureCoordinateRotationPoints: {\n    get: function () {\n      if (!defined(this._textureCoordinateRotationPoints)) {\n        this._textureCoordinateRotationPoints =\n          textureCoordinateRotationPoints(this);\n      }\n      return this._textureCoordinateRotationPoints;\n    },\n  },\n});\nexport default PolygonGeometry;\n","import ArcType from \"./ArcType.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Plane from \"./Plane.js\";\nimport PolygonHierarchy from \"./PolygonHierarchy.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Queue from \"./Queue.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\n/**\n * @private\n */\nconst PolygonGeometryLibrary = {};\n\nPolygonGeometryLibrary.computeHierarchyPackedLength = function (\n  polygonHierarchy,\n  CartesianX,\n) {\n  let numComponents = 0;\n  const stack = [polygonHierarchy];\n  while (stack.length > 0) {\n    const hierarchy = stack.pop();\n    if (!defined(hierarchy)) {\n      continue;\n    }\n\n    numComponents += 2;\n\n    const positions = hierarchy.positions;\n    const holes = hierarchy.holes;\n\n    if (defined(positions) && positions.length > 0) {\n      numComponents += positions.length * CartesianX.packedLength;\n    }\n\n    if (defined(holes)) {\n      const length = holes.length;\n      for (let i = 0; i < length; ++i) {\n        stack.push(holes[i]);\n      }\n    }\n  }\n\n  return numComponents;\n};\n\nPolygonGeometryLibrary.packPolygonHierarchy = function (\n  polygonHierarchy,\n  array,\n  startingIndex,\n  CartesianX,\n) {\n  const stack = [polygonHierarchy];\n  while (stack.length > 0) {\n    const hierarchy = stack.pop();\n    if (!defined(hierarchy)) {\n      continue;\n    }\n\n    const positions = hierarchy.positions;\n    const holes = hierarchy.holes;\n\n    array[startingIndex++] = defined(positions) ? positions.length : 0;\n    array[startingIndex++] = defined(holes) ? holes.length : 0;\n\n    if (defined(positions)) {\n      const positionsLength = positions.length;\n      for (\n        let i = 0;\n        i < positionsLength;\n        ++i, startingIndex += CartesianX.packedLength\n      ) {\n        CartesianX.pack(positions[i], array, startingIndex);\n      }\n    }\n\n    if (defined(holes)) {\n      const holesLength = holes.length;\n      for (let j = 0; j < holesLength; ++j) {\n        stack.push(holes[j]);\n      }\n    }\n  }\n\n  return startingIndex;\n};\n\nPolygonGeometryLibrary.unpackPolygonHierarchy = function (\n  array,\n  startingIndex,\n  CartesianX,\n) {\n  const positionsLength = array[startingIndex++];\n  const holesLength = array[startingIndex++];\n\n  const positions = new Array(positionsLength);\n  const holes = holesLength > 0 ? new Array(holesLength) : undefined;\n\n  for (\n    let i = 0;\n    i < positionsLength;\n    ++i, startingIndex += CartesianX.packedLength\n  ) {\n    positions[i] = CartesianX.unpack(array, startingIndex);\n  }\n\n  for (let j = 0; j < holesLength; ++j) {\n    holes[j] = PolygonGeometryLibrary.unpackPolygonHierarchy(\n      array,\n      startingIndex,\n      CartesianX,\n    );\n    startingIndex = holes[j].startingIndex;\n    delete holes[j].startingIndex;\n  }\n\n  return {\n    positions: positions,\n    holes: holes,\n    startingIndex: startingIndex,\n  };\n};\n\nconst distance2DScratch = new Cartesian2();\nfunction getPointAtDistance2D(p0, p1, distance, length) {\n  Cartesian2.subtract(p1, p0, distance2DScratch);\n  Cartesian2.multiplyByScalar(\n    distance2DScratch,\n    distance / length,\n    distance2DScratch,\n  );\n  Cartesian2.add(p0, distance2DScratch, distance2DScratch);\n  return [distance2DScratch.x, distance2DScratch.y];\n}\n\nconst distanceScratch = new Cartesian3();\nfunction getPointAtDistance(p0, p1, distance, length) {\n  Cartesian3.subtract(p1, p0, distanceScratch);\n  Cartesian3.multiplyByScalar(\n    distanceScratch,\n    distance / length,\n    distanceScratch,\n  );\n  Cartesian3.add(p0, distanceScratch, distanceScratch);\n  return [distanceScratch.x, distanceScratch.y, distanceScratch.z];\n}\n\nPolygonGeometryLibrary.subdivideLineCount = function (p0, p1, minDistance) {\n  const distance = Cartesian3.distance(p0, p1);\n  const n = distance / minDistance;\n  const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\n  return Math.pow(2, countDivide);\n};\n\nconst scratchCartographic0 = new Cartographic();\nconst scratchCartographic1 = new Cartographic();\nconst scratchCartographic2 = new Cartographic();\nconst scratchCartesian0 = new Cartesian3();\nconst scratchRhumbLine = new EllipsoidRhumbLine();\nPolygonGeometryLibrary.subdivideRhumbLineCount = function (\n  ellipsoid,\n  p0,\n  p1,\n  minDistance,\n) {\n  const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\n  const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\n  const rhumb = new EllipsoidRhumbLine(c0, c1, ellipsoid);\n  const n = rhumb.surfaceDistance / minDistance;\n  const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\n  return Math.pow(2, countDivide);\n};\n\n/**\n * Subdivides texture coordinates based on the subdivision of the associated world positions.\n *\n * @param {Cartesian2} t0 First texture coordinate.\n * @param {Cartesian2} t1 Second texture coordinate.\n * @param {Cartesian3} p0 First world position.\n * @param {Cartesian3} p1 Second world position.\n * @param {number} minDistance Minimum distance for a segment.\n * @param {Cartesian2[]} result The subdivided texture coordinates.\n *\n * @private\n */\nPolygonGeometryLibrary.subdivideTexcoordLine = function (\n  t0,\n  t1,\n  p0,\n  p1,\n  minDistance,\n  result,\n) {\n  // Compute the number of subdivisions.\n  const subdivisions = PolygonGeometryLibrary.subdivideLineCount(\n    p0,\n    p1,\n    minDistance,\n  );\n\n  // Compute the distance between each subdivided point.\n  const length2D = Cartesian2.distance(t0, t1);\n  const distanceBetweenCoords = length2D / subdivisions;\n\n  // Resize the result array.\n  const texcoords = result;\n  texcoords.length = subdivisions * 2;\n\n  // Compute texture coordinates using linear interpolation.\n  let index = 0;\n  for (let i = 0; i < subdivisions; i++) {\n    const t = getPointAtDistance2D(t0, t1, i * distanceBetweenCoords, length2D);\n    texcoords[index++] = t[0];\n    texcoords[index++] = t[1];\n  }\n\n  return texcoords;\n};\n\nPolygonGeometryLibrary.subdivideLine = function (p0, p1, minDistance, result) {\n  const numVertices = PolygonGeometryLibrary.subdivideLineCount(\n    p0,\n    p1,\n    minDistance,\n  );\n  const length = Cartesian3.distance(p0, p1);\n  const distanceBetweenVertices = length / numVertices;\n\n  if (!defined(result)) {\n    result = [];\n  }\n\n  const positions = result;\n  positions.length = numVertices * 3;\n\n  let index = 0;\n  for (let i = 0; i < numVertices; i++) {\n    const p = getPointAtDistance(p0, p1, i * distanceBetweenVertices, length);\n    positions[index++] = p[0];\n    positions[index++] = p[1];\n    positions[index++] = p[2];\n  }\n\n  return positions;\n};\n\n/**\n * Subdivides texture coordinates based on the subdivision of the associated world positions using a rhumb line.\n *\n * @param {Cartesian2} t0 First texture coordinate.\n * @param {Cartesian2} t1 Second texture coordinate.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @param {Cartesian3} p0 First world position.\n * @param {Cartesian3} p1 Second world position.\n * @param {number} minDistance Minimum distance for a segment.\n * @param {Cartesian2[]} result The subdivided texture coordinates.\n *\n * @private\n */\nPolygonGeometryLibrary.subdivideTexcoordRhumbLine = function (\n  t0,\n  t1,\n  ellipsoid,\n  p0,\n  p1,\n  minDistance,\n  result,\n) {\n  // Compute the surface distance.\n  const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\n  const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\n  scratchRhumbLine.setEndPoints(c0, c1);\n  const n = scratchRhumbLine.surfaceDistance / minDistance;\n\n  // Compute the number of subdivisions.\n  const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\n  const subdivisions = Math.pow(2, countDivide);\n\n  // Compute the distance between each subdivided point.\n  const length2D = Cartesian2.distance(t0, t1);\n  const distanceBetweenCoords = length2D / subdivisions;\n\n  // Resize the result array.\n  const texcoords = result;\n  texcoords.length = subdivisions * 2;\n\n  // Compute texture coordinates using linear interpolation.\n  let index = 0;\n  for (let i = 0; i < subdivisions; i++) {\n    const t = getPointAtDistance2D(t0, t1, i * distanceBetweenCoords, length2D);\n    texcoords[index++] = t[0];\n    texcoords[index++] = t[1];\n  }\n\n  return texcoords;\n};\n\n/**\n * Subdivide the line between 2 points every minDistance length\n * If the points are already closer than minDistance the first will be returned\n *\n * @private\n * @param {Ellipsoid} ellipsoid\n * @param {Cartesian3} p0 start point\n * @param {Cartesian3} p1 end point\n * @param {number} minDistance minimum distance between points in radians\n * @param {number[]} [result] if provided positions will be packed into this array starting at index 0\n * @returns {number[]} Cartesian3 positions packed into an array\n */\nPolygonGeometryLibrary.subdivideRhumbLine = function (\n  ellipsoid,\n  p0,\n  p1,\n  minDistance,\n  result,\n) {\n  const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\n  const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\n  const rhumb = new EllipsoidRhumbLine(c0, c1, ellipsoid);\n\n  if (!defined(result)) {\n    result = [];\n  }\n\n  if (rhumb.surfaceDistance <= minDistance) {\n    // no need to try and subdivide a line that's already shorter than the min distance\n    // this also inherently handles duplicated points which would have 0 distance\n    result.length = 3;\n    result[0] = p0.x;\n    result[1] = p0.y;\n    result[2] = p0.z;\n    return result;\n  }\n\n  const n = rhumb.surfaceDistance / minDistance;\n  const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\n  const numVertices = Math.pow(2, countDivide);\n  const distanceBetweenVertices = rhumb.surfaceDistance / numVertices;\n\n  const positions = result;\n  positions.length = numVertices * 3;\n\n  let index = 0;\n  for (let i = 0; i < numVertices; i++) {\n    const c = rhumb.interpolateUsingSurfaceDistance(\n      i * distanceBetweenVertices,\n      scratchCartographic2,\n    );\n    const p = ellipsoid.cartographicToCartesian(c, scratchCartesian0);\n    positions[index++] = p.x;\n    positions[index++] = p.y;\n    positions[index++] = p.z;\n  }\n\n  return positions;\n};\n\nconst scaleToGeodeticHeightN1 = new Cartesian3();\nconst scaleToGeodeticHeightN2 = new Cartesian3();\nconst scaleToGeodeticHeightP1 = new Cartesian3();\nconst scaleToGeodeticHeightP2 = new Cartesian3();\n\nPolygonGeometryLibrary.scaleToGeodeticHeightExtruded = function (\n  geometry,\n  maxHeight,\n  minHeight,\n  ellipsoid,\n  perPositionHeight,\n) {\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  const n1 = scaleToGeodeticHeightN1;\n  let n2 = scaleToGeodeticHeightN2;\n  const p = scaleToGeodeticHeightP1;\n  let p2 = scaleToGeodeticHeightP2;\n\n  if (\n    defined(geometry) &&\n    defined(geometry.attributes) &&\n    defined(geometry.attributes.position)\n  ) {\n    const positions = geometry.attributes.position.values;\n    const length = positions.length / 2;\n\n    for (let i = 0; i < length; i += 3) {\n      Cartesian3.fromArray(positions, i, p);\n\n      ellipsoid.geodeticSurfaceNormal(p, n1);\n      p2 = ellipsoid.scaleToGeodeticSurface(p, p2);\n      n2 = Cartesian3.multiplyByScalar(n1, minHeight, n2);\n      n2 = Cartesian3.add(p2, n2, n2);\n      positions[i + length] = n2.x;\n      positions[i + 1 + length] = n2.y;\n      positions[i + 2 + length] = n2.z;\n\n      if (perPositionHeight) {\n        p2 = Cartesian3.clone(p, p2);\n      }\n      n2 = Cartesian3.multiplyByScalar(n1, maxHeight, n2);\n      n2 = Cartesian3.add(p2, n2, n2);\n      positions[i] = n2.x;\n      positions[i + 1] = n2.y;\n      positions[i + 2] = n2.z;\n    }\n  }\n  return geometry;\n};\n\nPolygonGeometryLibrary.polygonOutlinesFromHierarchy = function (\n  polygonHierarchy,\n  scaleToEllipsoidSurface,\n  ellipsoid,\n) {\n  // create from a polygon hierarchy\n  // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf\n  const polygons = [];\n  const queue = new Queue();\n  queue.enqueue(polygonHierarchy);\n  let i;\n  let j;\n  let length;\n  while (queue.length !== 0) {\n    const outerNode = queue.dequeue();\n    let outerRing = outerNode.positions;\n    if (scaleToEllipsoidSurface) {\n      length = outerRing.length;\n      for (i = 0; i < length; i++) {\n        ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]);\n      }\n    }\n    outerRing = arrayRemoveDuplicates(\n      outerRing,\n      Cartesian3.equalsEpsilon,\n      true,\n    );\n    if (outerRing.length < 3) {\n      continue;\n    }\n\n    const numChildren = outerNode.holes ? outerNode.holes.length : 0;\n    // The outer polygon contains inner polygons\n    for (i = 0; i < numChildren; i++) {\n      const hole = outerNode.holes[i];\n      let holePositions = hole.positions;\n      if (scaleToEllipsoidSurface) {\n        length = holePositions.length;\n        for (j = 0; j < length; ++j) {\n          ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]);\n        }\n      }\n      holePositions = arrayRemoveDuplicates(\n        holePositions,\n        Cartesian3.equalsEpsilon,\n        true,\n      );\n      if (holePositions.length < 3) {\n        continue;\n      }\n      polygons.push(holePositions);\n\n      let numGrandchildren = 0;\n      if (defined(hole.holes)) {\n        numGrandchildren = hole.holes.length;\n      }\n\n      for (j = 0; j < numGrandchildren; j++) {\n        queue.enqueue(hole.holes[j]);\n      }\n    }\n\n    polygons.push(outerRing);\n  }\n\n  return polygons;\n};\n\nconst scratchRhumbIntersection = new Cartographic();\nfunction computeEquatorIntersectionRhumb(start, end, ellipsoid) {\n  const c0 = ellipsoid.cartesianToCartographic(start, scratchCartographic0);\n  const c1 = ellipsoid.cartesianToCartographic(end, scratchCartographic1);\n\n  if (Math.sign(c0.latitude) === Math.sign(c1.latitude)) {\n    return;\n  }\n\n  scratchRhumbLine.setEndPoints(c0, c1);\n\n  const intersection = scratchRhumbLine.findIntersectionWithLatitude(\n    0,\n    scratchRhumbIntersection,\n  );\n\n  if (!defined(intersection)) {\n    return;\n  }\n\n  let minLongitude = Math.min(c0.longitude, c1.longitude);\n  let maxLongitude = Math.max(c0.longitude, c1.longitude);\n\n  if (Math.abs(maxLongitude - minLongitude) > CesiumMath.PI) {\n    // Crosses IDL, flip min and max\n    const swap = minLongitude;\n    minLongitude = maxLongitude;\n    maxLongitude = swap;\n  }\n\n  if (\n    intersection.longitude < minLongitude ||\n    intersection.longitude > maxLongitude\n  ) {\n    return;\n  }\n\n  return ellipsoid.cartographicToCartesian(intersection);\n}\n\nfunction computeEquatorIntersection(start, end, ellipsoid, arcType) {\n  if (arcType === ArcType.RHUMB) {\n    return computeEquatorIntersectionRhumb(start, end, ellipsoid);\n  }\n\n  const intersection = IntersectionTests.lineSegmentPlane(\n    start,\n    end,\n    Plane.ORIGIN_XY_PLANE,\n  );\n\n  if (!defined(intersection)) {\n    return;\n  }\n\n  return ellipsoid.scaleToGeodeticSurface(intersection, intersection);\n}\n\nconst scratchCartographic = new Cartographic();\nfunction computeEdgesOnPlane(positions, ellipsoid, arcType) {\n  const edgesOnPlane = [];\n  let startPoint,\n    endPoint,\n    type,\n    next,\n    intersection,\n    i = 0;\n  while (i < positions.length) {\n    startPoint = positions[i];\n    endPoint = positions[(i + 1) % positions.length];\n\n    type = CesiumMath.sign(startPoint.z);\n    next = CesiumMath.sign(endPoint.z);\n\n    const getLongitude = (position) => {\n      const cartographic = ellipsoid.cartesianToCartographic(\n        position,\n        scratchCartographic,\n      );\n      return cartographic.longitude;\n    };\n\n    if (type === 0) {\n      // The start position is on the split\n      edgesOnPlane.push({\n        position: i,\n        type: type,\n        visited: false,\n        next: next,\n        theta: getLongitude(startPoint),\n      });\n    } else if (next !== 0) {\n      intersection = computeEquatorIntersection(\n        startPoint,\n        endPoint,\n        ellipsoid,\n        arcType,\n      );\n\n      ++i;\n      if (!defined(intersection)) {\n        // The line segment is entirely above or below\n        continue;\n      }\n\n      // The line segment passed through\n      positions.splice(i, 0, intersection);\n      edgesOnPlane.push({\n        position: i,\n        type: type,\n        visited: false,\n        next: next,\n        theta: getLongitude(intersection),\n      });\n    }\n\n    ++i;\n  }\n\n  return edgesOnPlane;\n}\n\nfunction wirePolygon(\n  polygons,\n  polygonIndex,\n  positions,\n  edgesOnPlane,\n  toDelete,\n  startIndex,\n  abovePlane,\n) {\n  const polygon = [];\n  let i = startIndex;\n  const getMatchingEdge = (i) => (edge) => edge.position === i;\n  const polygonsToWire = [];\n  do {\n    const position = positions[i];\n    polygon.push(position);\n\n    const edgeIndex = edgesOnPlane.findIndex(getMatchingEdge(i));\n    const edge = edgesOnPlane[edgeIndex];\n    if (!defined(edge)) {\n      // The current segment does not intersect\n      ++i;\n      continue;\n    }\n\n    const { visited: hasBeenVisited, type, next } = edge;\n    edge.visited = true;\n\n    if (type === 0) {\n      if (next === 0) {\n        // Special case where we'll need to backtrack along the edge\n        const previousEdge = edgesOnPlane[edgeIndex - (abovePlane ? 1 : -1)];\n        if (previousEdge?.position === i + 1) {\n          previousEdge.visited = true;\n        } else {\n          ++i;\n          continue;\n        }\n      }\n\n      // Special case where 3 polygons meet\n      if (\n        (!hasBeenVisited && abovePlane && next > 0) ||\n        (startIndex === i && !abovePlane && next < 0)\n      ) {\n        ++i;\n        continue;\n      }\n    }\n\n    const followEdge = abovePlane ? type >= 0 : type <= 0;\n    if (!followEdge) {\n      ++i;\n      continue;\n    }\n\n    if (!hasBeenVisited) {\n      // Wire another polygon starting at this position on the other side of the edge\n      polygonsToWire.push(i);\n    }\n\n    // Continue counter-clockwise to the next edge\n    const nextEdgeIndex = edgeIndex + (abovePlane ? 1 : -1);\n    const nextEdge = edgesOnPlane[nextEdgeIndex];\n    if (!defined(nextEdge)) {\n      ++i;\n      continue;\n    }\n\n    i = nextEdge.position;\n  } while (\n    i < positions.length &&\n    i >= 0 &&\n    i !== startIndex &&\n    polygon.length < positions.length\n  );\n\n  polygons.splice(polygonIndex, toDelete, polygon);\n\n  for (const index of polygonsToWire) {\n    polygonIndex = wirePolygon(\n      polygons,\n      ++polygonIndex,\n      positions,\n      edgesOnPlane,\n      0,\n      index,\n      !abovePlane,\n    );\n  }\n\n  return polygonIndex;\n}\n\n/**\n * Splits an array of polygons, defined as a list of Cartesian3 positions in counter-clockwise winding order, along the equator.\n *\n * @param {Array<Cartesian3[]>} outerRings An array of polygons, defined as a list of Cartesian3 positions in counter-clockwise winding order.\n * @param {Ellipsoid} ellipsoid The ellipsoid to be used as a reference.\n * @param {ArcType} arcType The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n * @param {Array<Cartesian3[]>} [result] An array of split polygons.\n *\n * @returns {Array<Cartesian3[]>} An array of split polygons.\n */\nPolygonGeometryLibrary.splitPolygonsOnEquator = function (\n  outerRings,\n  ellipsoid,\n  arcType,\n  result,\n) {\n  if (!defined(result)) {\n    result = [];\n  }\n\n  result.splice(0, 0, ...outerRings);\n  result.length = outerRings.length;\n\n  let currentPolygon = 0;\n  while (currentPolygon < result.length) {\n    // Adapted from https://www.sciencedirect.com/science/article/abs/pii/B9780125434577500589#:~:text=If%20the%20plane%20intersects%20the,tree%20and%20polygon%20intersection%20libraries\n    const outerRing = result[currentPolygon];\n    const positions = outerRing.slice();\n\n    if (outerRing.length < 3) {\n      result[currentPolygon] = positions;\n      ++currentPolygon;\n      continue;\n    }\n\n    // Step 1: Get all edges which intersect the split line, splciing any found intersections points into the list of positions\n    const edgesOnPlane = computeEdgesOnPlane(positions, ellipsoid, arcType);\n    // If nothing intersected (no point were added), or there is only a single point on the plane, use the original polygon\n    if (positions.length === outerRing.length || edgesOnPlane.length <= 1) {\n      result[currentPolygon] = positions;\n      ++currentPolygon;\n      continue;\n    }\n\n    // Step 2: Sort the edges along the split line by the distance between their starting points and the starting point of the split line.\n    edgesOnPlane.sort((a, b) => {\n      return a.theta - b.theta;\n    });\n\n    // Step 3: Rewire polygons, splicing each polygon into the array of results\n    const north = positions[0].z >= 0.0;\n    currentPolygon = wirePolygon(\n      result,\n      currentPolygon,\n      positions,\n      edgesOnPlane,\n      1,\n      0,\n      north,\n    );\n  }\n\n  return result;\n};\n\nPolygonGeometryLibrary.polygonsFromHierarchy = function (\n  polygonHierarchy,\n  keepDuplicates,\n  projectPointsTo2D,\n  scaleToEllipsoidSurface,\n  ellipsoid,\n  splitPolygons,\n) {\n  // create from a polygon hierarchy\n  // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf\n  const hierarchy = [];\n  const polygons = [];\n\n  const queue = new Queue();\n  queue.enqueue(polygonHierarchy);\n\n  let split = defined(splitPolygons);\n\n  while (queue.length !== 0) {\n    const outerNode = queue.dequeue();\n    let outerRing = outerNode.positions;\n    const holes = outerNode.holes;\n\n    let i;\n    let length;\n    if (scaleToEllipsoidSurface) {\n      length = outerRing.length;\n      for (i = 0; i < length; i++) {\n        ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]);\n      }\n    }\n\n    if (!keepDuplicates) {\n      outerRing = arrayRemoveDuplicates(\n        outerRing,\n        Cartesian3.equalsEpsilon,\n        true,\n      );\n    }\n    if (outerRing.length < 3) {\n      continue;\n    }\n\n    let positions2D = projectPointsTo2D(outerRing);\n    if (!defined(positions2D)) {\n      continue;\n    }\n    const holeIndices = [];\n\n    let originalWindingOrder =\n      PolygonPipeline.computeWindingOrder2D(positions2D);\n    if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n      positions2D.reverse();\n      outerRing = outerRing.slice().reverse();\n    }\n\n    if (split) {\n      split = false;\n      let polygons = [outerRing];\n      polygons = splitPolygons(polygons, polygons);\n\n      if (polygons.length > 1) {\n        for (const positions of polygons) {\n          queue.enqueue(new PolygonHierarchy(positions, holes));\n        }\n\n        continue;\n      }\n    }\n\n    let positions = outerRing.slice();\n    const numChildren = defined(holes) ? holes.length : 0;\n    const polygonHoles = [];\n    let j;\n\n    for (i = 0; i < numChildren; i++) {\n      const hole = holes[i];\n      let holePositions = hole.positions;\n      if (scaleToEllipsoidSurface) {\n        length = holePositions.length;\n        for (j = 0; j < length; ++j) {\n          ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]);\n        }\n      }\n\n      if (!keepDuplicates) {\n        holePositions = arrayRemoveDuplicates(\n          holePositions,\n          Cartesian3.equalsEpsilon,\n          true,\n        );\n      }\n      if (holePositions.length < 3) {\n        continue;\n      }\n\n      const holePositions2D = projectPointsTo2D(holePositions);\n      if (!defined(holePositions2D)) {\n        continue;\n      }\n\n      originalWindingOrder =\n        PolygonPipeline.computeWindingOrder2D(holePositions2D);\n      if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n        holePositions2D.reverse();\n        holePositions = holePositions.slice().reverse();\n      }\n\n      polygonHoles.push(holePositions);\n      holeIndices.push(positions.length);\n      positions = positions.concat(holePositions);\n      positions2D = positions2D.concat(holePositions2D);\n\n      let numGrandchildren = 0;\n      if (defined(hole.holes)) {\n        numGrandchildren = hole.holes.length;\n      }\n\n      for (j = 0; j < numGrandchildren; j++) {\n        queue.enqueue(hole.holes[j]);\n      }\n    }\n\n    hierarchy.push({\n      outerRing: outerRing,\n      holes: polygonHoles,\n    });\n    polygons.push({\n      positions: positions,\n      positions2D: positions2D,\n      holes: holeIndices,\n    });\n  }\n\n  return {\n    hierarchy: hierarchy,\n    polygons: polygons,\n  };\n};\n\nconst computeBoundingRectangleCartesian2 = new Cartesian2();\nconst computeBoundingRectangleCartesian3 = new Cartesian3();\nconst computeBoundingRectangleQuaternion = new Quaternion();\nconst computeBoundingRectangleMatrix3 = new Matrix3();\nPolygonGeometryLibrary.computeBoundingRectangle = function (\n  planeNormal,\n  projectPointTo2D,\n  positions,\n  angle,\n  result,\n) {\n  const rotation = Quaternion.fromAxisAngle(\n    planeNormal,\n    angle,\n    computeBoundingRectangleQuaternion,\n  );\n  const textureMatrix = Matrix3.fromQuaternion(\n    rotation,\n    computeBoundingRectangleMatrix3,\n  );\n\n  let minX = Number.POSITIVE_INFINITY;\n  let maxX = Number.NEGATIVE_INFINITY;\n  let minY = Number.POSITIVE_INFINITY;\n  let maxY = Number.NEGATIVE_INFINITY;\n\n  const length = positions.length;\n  for (let i = 0; i < length; ++i) {\n    const p = Cartesian3.clone(\n      positions[i],\n      computeBoundingRectangleCartesian3,\n    );\n    Matrix3.multiplyByVector(textureMatrix, p, p);\n    const st = projectPointTo2D(p, computeBoundingRectangleCartesian2);\n\n    if (defined(st)) {\n      minX = Math.min(minX, st.x);\n      maxX = Math.max(maxX, st.x);\n\n      minY = Math.min(minY, st.y);\n      maxY = Math.max(maxY, st.y);\n    }\n  }\n\n  result.x = minX;\n  result.y = minY;\n  result.width = maxX - minX;\n  result.height = maxY - minY;\n  return result;\n};\n\nPolygonGeometryLibrary.createGeometryFromPositions = function (\n  ellipsoid,\n  polygon,\n  textureCoordinates,\n  granularity,\n  perPositionHeight,\n  vertexFormat,\n  arcType,\n) {\n  let indices = PolygonPipeline.triangulate(polygon.positions2D, polygon.holes);\n\n  /* If polygon is completely unrenderable, just use the first three vertices */\n  if (indices.length < 3) {\n    indices = [0, 1, 2];\n  }\n\n  const positions = polygon.positions;\n\n  const hasTexcoords = defined(textureCoordinates);\n  const texcoords = hasTexcoords ? textureCoordinates.positions : undefined;\n\n  if (perPositionHeight) {\n    const length = positions.length;\n    const flattenedPositions = new Array(length * 3);\n    let index = 0;\n    for (let i = 0; i < length; i++) {\n      const p = positions[i];\n      flattenedPositions[index++] = p.x;\n      flattenedPositions[index++] = p.y;\n      flattenedPositions[index++] = p.z;\n    }\n\n    const geometryOptions = {\n      attributes: {\n        position: new GeometryAttribute({\n          componentDatatype: ComponentDatatype.DOUBLE,\n          componentsPerAttribute: 3,\n          values: flattenedPositions,\n        }),\n      },\n      indices: indices,\n      primitiveType: PrimitiveType.TRIANGLES,\n    };\n\n    if (hasTexcoords) {\n      geometryOptions.attributes.st = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 2,\n        values: Cartesian2.packArray(texcoords),\n      });\n    }\n\n    const geometry = new Geometry(geometryOptions);\n\n    if (vertexFormat.normal) {\n      return GeometryPipeline.computeNormal(geometry);\n    }\n\n    return geometry;\n  }\n\n  if (arcType === ArcType.GEODESIC) {\n    return PolygonPipeline.computeSubdivision(\n      ellipsoid,\n      positions,\n      indices,\n      texcoords,\n      granularity,\n    );\n  } else if (arcType === ArcType.RHUMB) {\n    return PolygonPipeline.computeRhumbLineSubdivision(\n      ellipsoid,\n      positions,\n      indices,\n      texcoords,\n      granularity,\n    );\n  }\n};\n\nconst computeWallTexcoordsSubdivided = [];\nconst computeWallIndicesSubdivided = [];\nconst p1Scratch = new Cartesian3();\nconst p2Scratch = new Cartesian3();\n\nPolygonGeometryLibrary.computeWallGeometry = function (\n  positions,\n  textureCoordinates,\n  ellipsoid,\n  granularity,\n  perPositionHeight,\n  arcType,\n) {\n  let edgePositions;\n  let topEdgeLength;\n  let i;\n  let p1;\n  let p2;\n  let t1;\n  let t2;\n  let edgeTexcoords;\n  let topEdgeTexcoordLength;\n\n  let length = positions.length;\n  let index = 0;\n  let textureIndex = 0;\n\n  const hasTexcoords = defined(textureCoordinates);\n  const texcoords = hasTexcoords ? textureCoordinates.positions : undefined;\n\n  if (!perPositionHeight) {\n    const minDistance = CesiumMath.chordLength(\n      granularity,\n      ellipsoid.maximumRadius,\n    );\n\n    let numVertices = 0;\n    if (arcType === ArcType.GEODESIC) {\n      for (i = 0; i < length; i++) {\n        numVertices += PolygonGeometryLibrary.subdivideLineCount(\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n        );\n      }\n    } else if (arcType === ArcType.RHUMB) {\n      for (i = 0; i < length; i++) {\n        numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\n          ellipsoid,\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n        );\n      }\n    }\n\n    topEdgeLength = (numVertices + length) * 3;\n    edgePositions = new Array(topEdgeLength * 2);\n\n    if (hasTexcoords) {\n      topEdgeTexcoordLength = (numVertices + length) * 2;\n      edgeTexcoords = new Array(topEdgeTexcoordLength * 2);\n    }\n\n    for (i = 0; i < length; i++) {\n      p1 = positions[i];\n      p2 = positions[(i + 1) % length];\n\n      let tempPositions;\n      let tempTexcoords;\n\n      if (hasTexcoords) {\n        t1 = texcoords[i];\n        t2 = texcoords[(i + 1) % length];\n      }\n\n      if (arcType === ArcType.GEODESIC) {\n        tempPositions = PolygonGeometryLibrary.subdivideLine(\n          p1,\n          p2,\n          minDistance,\n          computeWallIndicesSubdivided,\n        );\n        if (hasTexcoords) {\n          tempTexcoords = PolygonGeometryLibrary.subdivideTexcoordLine(\n            t1,\n            t2,\n            p1,\n            p2,\n            minDistance,\n            computeWallTexcoordsSubdivided,\n          );\n        }\n      } else if (arcType === ArcType.RHUMB) {\n        tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\n          ellipsoid,\n          p1,\n          p2,\n          minDistance,\n          computeWallIndicesSubdivided,\n        );\n        if (hasTexcoords) {\n          tempTexcoords = PolygonGeometryLibrary.subdivideTexcoordRhumbLine(\n            t1,\n            t2,\n            ellipsoid,\n            p1,\n            p2,\n            minDistance,\n            computeWallTexcoordsSubdivided,\n          );\n        }\n      }\n      const tempPositionsLength = tempPositions.length;\n      for (let j = 0; j < tempPositionsLength; ++j, ++index) {\n        edgePositions[index] = tempPositions[j];\n        edgePositions[index + topEdgeLength] = tempPositions[j];\n      }\n\n      edgePositions[index] = p2.x;\n      edgePositions[index + topEdgeLength] = p2.x;\n      ++index;\n\n      edgePositions[index] = p2.y;\n      edgePositions[index + topEdgeLength] = p2.y;\n      ++index;\n\n      edgePositions[index] = p2.z;\n      edgePositions[index + topEdgeLength] = p2.z;\n      ++index;\n\n      if (hasTexcoords) {\n        const tempTexcoordsLength = tempTexcoords.length;\n        for (let k = 0; k < tempTexcoordsLength; ++k, ++textureIndex) {\n          edgeTexcoords[textureIndex] = tempTexcoords[k];\n          edgeTexcoords[textureIndex + topEdgeTexcoordLength] =\n            tempTexcoords[k];\n        }\n\n        edgeTexcoords[textureIndex] = t2.x;\n        edgeTexcoords[textureIndex + topEdgeTexcoordLength] = t2.x;\n        ++textureIndex;\n\n        edgeTexcoords[textureIndex] = t2.y;\n        edgeTexcoords[textureIndex + topEdgeTexcoordLength] = t2.y;\n        ++textureIndex;\n      }\n    }\n  } else {\n    topEdgeLength = length * 3 * 2;\n    edgePositions = new Array(topEdgeLength * 2);\n\n    if (hasTexcoords) {\n      topEdgeTexcoordLength = length * 2 * 2;\n      edgeTexcoords = new Array(topEdgeTexcoordLength * 2);\n    }\n\n    for (i = 0; i < length; i++) {\n      p1 = positions[i];\n      p2 = positions[(i + 1) % length];\n      edgePositions[index] = edgePositions[index + topEdgeLength] = p1.x;\n      ++index;\n      edgePositions[index] = edgePositions[index + topEdgeLength] = p1.y;\n      ++index;\n      edgePositions[index] = edgePositions[index + topEdgeLength] = p1.z;\n      ++index;\n      edgePositions[index] = edgePositions[index + topEdgeLength] = p2.x;\n      ++index;\n      edgePositions[index] = edgePositions[index + topEdgeLength] = p2.y;\n      ++index;\n      edgePositions[index] = edgePositions[index + topEdgeLength] = p2.z;\n      ++index;\n\n      if (hasTexcoords) {\n        t1 = texcoords[i];\n        t2 = texcoords[(i + 1) % length];\n        edgeTexcoords[textureIndex] = edgeTexcoords[\n          textureIndex + topEdgeTexcoordLength\n        ] = t1.x;\n        ++textureIndex;\n        edgeTexcoords[textureIndex] = edgeTexcoords[\n          textureIndex + topEdgeTexcoordLength\n        ] = t1.y;\n        ++textureIndex;\n        edgeTexcoords[textureIndex] = edgeTexcoords[\n          textureIndex + topEdgeTexcoordLength\n        ] = t2.x;\n        ++textureIndex;\n        edgeTexcoords[textureIndex] = edgeTexcoords[\n          textureIndex + topEdgeTexcoordLength\n        ] = t2.y;\n        ++textureIndex;\n      }\n    }\n  }\n\n  length = edgePositions.length;\n  const indices = IndexDatatype.createTypedArray(\n    length / 3,\n    length - positions.length * 6,\n  );\n  let edgeIndex = 0;\n  length /= 6;\n\n  for (i = 0; i < length; i++) {\n    const UL = i;\n    const UR = UL + 1;\n    const LL = UL + length;\n    const LR = LL + 1;\n\n    p1 = Cartesian3.fromArray(edgePositions, UL * 3, p1Scratch);\n    p2 = Cartesian3.fromArray(edgePositions, UR * 3, p2Scratch);\n    if (\n      Cartesian3.equalsEpsilon(\n        p1,\n        p2,\n        CesiumMath.EPSILON10,\n        CesiumMath.EPSILON10,\n      )\n    ) {\n      //skip corner\n      continue;\n    }\n\n    indices[edgeIndex++] = UL;\n    indices[edgeIndex++] = LL;\n    indices[edgeIndex++] = UR;\n    indices[edgeIndex++] = UR;\n    indices[edgeIndex++] = LL;\n    indices[edgeIndex++] = LR;\n  }\n\n  const geometryOptions = {\n    attributes: new GeometryAttributes({\n      position: new GeometryAttribute({\n        componentDatatype: ComponentDatatype.DOUBLE,\n        componentsPerAttribute: 3,\n        values: edgePositions,\n      }),\n    }),\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n  };\n\n  if (hasTexcoords) {\n    geometryOptions.attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: edgeTexcoords,\n    });\n  }\n\n  const geometry = new Geometry(geometryOptions);\n\n  return geometry;\n};\nexport default PolygonGeometryLibrary;\n","import defined from \"./defined.js\";\n\n/**\n * An hierarchy of linear rings which define a polygon and its holes.\n * The holes themselves may also have holes which nest inner polygons.\n * @alias PolygonHierarchy\n * @constructor\n *\n * @param {Cartesian3[]} [positions] A linear ring defining the outer boundary of the polygon or hole.\n * @param {PolygonHierarchy[]} [holes] An array of polygon hierarchies defining holes in the polygon.\n */\nfunction PolygonHierarchy(positions, holes) {\n  /**\n   * A linear ring defining the outer boundary of the polygon or hole.\n   * @type {Cartesian3[]}\n   */\n  this.positions = defined(positions) ? positions : [];\n\n  /**\n   * An array of polygon hierarchies defining holes in the polygon.\n   * @type {PolygonHierarchy[]}\n   */\n  this.holes = defined(holes) ? holes : [];\n}\nexport default PolygonHierarchy;\n","import ArcType from \"./ArcType.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WindingOrder from \"./WindingOrder.js\";\nconst createGeometryFromPositionsPositions = [];\nconst createGeometryFromPositionsSubdivided = [];\n\nfunction createGeometryFromPositions(\n  ellipsoid,\n  positions,\n  minDistance,\n  perPositionHeight,\n  arcType,\n) {\n  const tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\n  const positions2D = tangentPlane.projectPointsOntoPlane(\n    positions,\n    createGeometryFromPositionsPositions,\n  );\n\n  const originalWindingOrder =\n    PolygonPipeline.computeWindingOrder2D(positions2D);\n  if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n    positions2D.reverse();\n    positions = positions.slice().reverse();\n  }\n\n  let subdividedPositions;\n  let i;\n\n  let length = positions.length;\n  let index = 0;\n\n  if (!perPositionHeight) {\n    let numVertices = 0;\n    if (arcType === ArcType.GEODESIC) {\n      for (i = 0; i < length; i++) {\n        numVertices += PolygonGeometryLibrary.subdivideLineCount(\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n        );\n      }\n    } else if (arcType === ArcType.RHUMB) {\n      for (i = 0; i < length; i++) {\n        numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\n          ellipsoid,\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n        );\n      }\n    }\n    subdividedPositions = new Float64Array(numVertices * 3);\n    for (i = 0; i < length; i++) {\n      let tempPositions;\n      if (arcType === ArcType.GEODESIC) {\n        tempPositions = PolygonGeometryLibrary.subdivideLine(\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n          createGeometryFromPositionsSubdivided,\n        );\n      } else if (arcType === ArcType.RHUMB) {\n        tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\n          ellipsoid,\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n          createGeometryFromPositionsSubdivided,\n        );\n      }\n      const tempPositionsLength = tempPositions.length;\n      for (let j = 0; j < tempPositionsLength; ++j) {\n        subdividedPositions[index++] = tempPositions[j];\n      }\n    }\n  } else {\n    subdividedPositions = new Float64Array(length * 2 * 3);\n    for (i = 0; i < length; i++) {\n      const p0 = positions[i];\n      const p1 = positions[(i + 1) % length];\n      subdividedPositions[index++] = p0.x;\n      subdividedPositions[index++] = p0.y;\n      subdividedPositions[index++] = p0.z;\n      subdividedPositions[index++] = p1.x;\n      subdividedPositions[index++] = p1.y;\n      subdividedPositions[index++] = p1.z;\n    }\n  }\n\n  length = subdividedPositions.length / 3;\n  const indicesSize = length * 2;\n  const indices = IndexDatatype.createTypedArray(length, indicesSize);\n  index = 0;\n  for (i = 0; i < length - 1; i++) {\n    indices[index++] = i;\n    indices[index++] = i + 1;\n  }\n  indices[index++] = length - 1;\n  indices[index++] = 0;\n\n  return new GeometryInstance({\n    geometry: new Geometry({\n      attributes: new GeometryAttributes({\n        position: new GeometryAttribute({\n          componentDatatype: ComponentDatatype.DOUBLE,\n          componentsPerAttribute: 3,\n          values: subdividedPositions,\n        }),\n      }),\n      indices: indices,\n      primitiveType: PrimitiveType.LINES,\n    }),\n  });\n}\n\nfunction createGeometryFromPositionsExtruded(\n  ellipsoid,\n  positions,\n  minDistance,\n  perPositionHeight,\n  arcType,\n) {\n  const tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\n  const positions2D = tangentPlane.projectPointsOntoPlane(\n    positions,\n    createGeometryFromPositionsPositions,\n  );\n\n  const originalWindingOrder =\n    PolygonPipeline.computeWindingOrder2D(positions2D);\n  if (originalWindingOrder === WindingOrder.CLOCKWISE) {\n    positions2D.reverse();\n    positions = positions.slice().reverse();\n  }\n\n  let subdividedPositions;\n  let i;\n\n  let length = positions.length;\n  const corners = new Array(length);\n  let index = 0;\n\n  if (!perPositionHeight) {\n    let numVertices = 0;\n    if (arcType === ArcType.GEODESIC) {\n      for (i = 0; i < length; i++) {\n        numVertices += PolygonGeometryLibrary.subdivideLineCount(\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n        );\n      }\n    } else if (arcType === ArcType.RHUMB) {\n      for (i = 0; i < length; i++) {\n        numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\n          ellipsoid,\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n        );\n      }\n    }\n\n    subdividedPositions = new Float64Array(numVertices * 3 * 2);\n    for (i = 0; i < length; ++i) {\n      corners[i] = index / 3;\n      let tempPositions;\n      if (arcType === ArcType.GEODESIC) {\n        tempPositions = PolygonGeometryLibrary.subdivideLine(\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n          createGeometryFromPositionsSubdivided,\n        );\n      } else if (arcType === ArcType.RHUMB) {\n        tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\n          ellipsoid,\n          positions[i],\n          positions[(i + 1) % length],\n          minDistance,\n          createGeometryFromPositionsSubdivided,\n        );\n      }\n      const tempPositionsLength = tempPositions.length;\n      for (let j = 0; j < tempPositionsLength; ++j) {\n        subdividedPositions[index++] = tempPositions[j];\n      }\n    }\n  } else {\n    subdividedPositions = new Float64Array(length * 2 * 3 * 2);\n    for (i = 0; i < length; ++i) {\n      corners[i] = index / 3;\n      const p0 = positions[i];\n      const p1 = positions[(i + 1) % length];\n\n      subdividedPositions[index++] = p0.x;\n      subdividedPositions[index++] = p0.y;\n      subdividedPositions[index++] = p0.z;\n      subdividedPositions[index++] = p1.x;\n      subdividedPositions[index++] = p1.y;\n      subdividedPositions[index++] = p1.z;\n    }\n  }\n\n  length = subdividedPositions.length / (3 * 2);\n  const cornersLength = corners.length;\n\n  const indicesSize = (length * 2 + cornersLength) * 2;\n  const indices = IndexDatatype.createTypedArray(\n    length + cornersLength,\n    indicesSize,\n  );\n\n  index = 0;\n  for (i = 0; i < length; ++i) {\n    indices[index++] = i;\n    indices[index++] = (i + 1) % length;\n    indices[index++] = i + length;\n    indices[index++] = ((i + 1) % length) + length;\n  }\n\n  for (i = 0; i < cornersLength; i++) {\n    const corner = corners[i];\n    indices[index++] = corner;\n    indices[index++] = corner + length;\n  }\n\n  return new GeometryInstance({\n    geometry: new Geometry({\n      attributes: new GeometryAttributes({\n        position: new GeometryAttribute({\n          componentDatatype: ComponentDatatype.DOUBLE,\n          componentsPerAttribute: 3,\n          values: subdividedPositions,\n        }),\n      }),\n      indices: indices,\n      primitiveType: PrimitiveType.LINES,\n    }),\n  });\n}\n\n/**\n * A description of the outline of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy.\n *\n * @alias PolygonOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\n * @param {number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface.\n * @param {number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\n *\n * @see PolygonOutlineGeometry#createGeometry\n * @see PolygonOutlineGeometry#fromPositions\n *\n * @example\n * // 1. create a polygon outline from points\n * const polygon = new Cesium.PolygonOutlineGeometry({\n *   polygonHierarchy : new Cesium.PolygonHierarchy(\n *     Cesium.Cartesian3.fromDegreesArray([\n *       -72.0, 40.0,\n *       -70.0, 35.0,\n *       -75.0, 30.0,\n *       -70.0, 30.0,\n *       -68.0, 40.0\n *     ])\n *   )\n * });\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon);\n *\n * // 2. create a nested polygon with holes outline\n * const polygonWithHole = new Cesium.PolygonOutlineGeometry({\n *   polygonHierarchy : new Cesium.PolygonHierarchy(\n *     Cesium.Cartesian3.fromDegreesArray([\n *       -109.0, 30.0,\n *       -95.0, 30.0,\n *       -95.0, 40.0,\n *       -109.0, 40.0\n *     ]),\n *     [new Cesium.PolygonHierarchy(\n *       Cesium.Cartesian3.fromDegreesArray([\n *         -107.0, 31.0,\n *         -107.0, 39.0,\n *         -97.0, 39.0,\n *         -97.0, 31.0\n *       ]),\n *       [new Cesium.PolygonHierarchy(\n *         Cesium.Cartesian3.fromDegreesArray([\n *           -105.0, 33.0,\n *           -99.0, 33.0,\n *           -99.0, 37.0,\n *           -105.0, 37.0\n *         ]),\n *         [new Cesium.PolygonHierarchy(\n *           Cesium.Cartesian3.fromDegreesArray([\n *             -103.0, 34.0,\n *             -101.0, 34.0,\n *             -101.0, 36.0,\n *             -103.0, 36.0\n *           ])\n *         )]\n *       )]\n *     )]\n *   )\n * });\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygonWithHole);\n *\n * // 3. create extruded polygon outline\n * const extrudedPolygon = new Cesium.PolygonOutlineGeometry({\n *   polygonHierarchy : new Cesium.PolygonHierarchy(\n *     Cesium.Cartesian3.fromDegreesArray([\n *       -72.0, 40.0,\n *       -70.0, 35.0,\n *       -75.0, 30.0,\n *       -70.0, 30.0,\n *       -68.0, 40.0\n *     ])\n *   ),\n *   extrudedHeight: 300000\n * });\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(extrudedPolygon);\n */\nfunction PolygonOutlineGeometry(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\n\n  if (options.perPositionHeight && defined(options.height)) {\n    throw new DeveloperError(\n      \"Cannot use both options.perPositionHeight and options.height\",\n    );\n  }\n  if (\n    defined(options.arcType) &&\n    options.arcType !== ArcType.GEODESIC &&\n    options.arcType !== ArcType.RHUMB\n  ) {\n    throw new DeveloperError(\n      \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const polygonHierarchy = options.polygonHierarchy;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const perPositionHeight = options.perPositionHeight ?? false;\n  const perPositionHeightExtrude =\n    perPositionHeight && defined(options.extrudedHeight);\n  const arcType = options.arcType ?? ArcType.GEODESIC;\n\n  let height = options.height ?? 0.0;\n  let extrudedHeight = options.extrudedHeight ?? height;\n\n  if (!perPositionHeightExtrude) {\n    const h = Math.max(height, extrudedHeight);\n    extrudedHeight = Math.min(height, extrudedHeight);\n    height = h;\n  }\n\n  this._ellipsoid = Ellipsoid.clone(ellipsoid);\n  this._granularity = granularity;\n  this._height = height;\n  this._extrudedHeight = extrudedHeight;\n  this._arcType = arcType;\n  this._polygonHierarchy = polygonHierarchy;\n  this._perPositionHeight = perPositionHeight;\n  this._perPositionHeightExtrude = perPositionHeightExtrude;\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createPolygonOutlineGeometry\";\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    PolygonGeometryLibrary.computeHierarchyPackedLength(\n      polygonHierarchy,\n      Cartesian3,\n    ) +\n    Ellipsoid.packedLength +\n    8;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolygonOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nPolygonOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\n    value._polygonHierarchy,\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  array[startingIndex++] = value._height;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex++] = value._granularity;\n  array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0;\n  array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0;\n  array[startingIndex++] = value._arcType;\n  array[startingIndex++] = value._offsetAttribute ?? -1;\n  array[startingIndex] = value.packedLength;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst dummyOptions = {\n  polygonHierarchy: {},\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolygonOutlineGeometry} [result] The object into which to store the result.\n * @returns {PolygonOutlineGeometry} The modified result parameter or a new PolygonOutlineGeometry instance if one was not provided.\n */\nPolygonOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\n    array,\n    startingIndex,\n    Cartesian3,\n  );\n  startingIndex = polygonHierarchy.startingIndex;\n  delete polygonHierarchy.startingIndex;\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const height = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const granularity = array[startingIndex++];\n  const perPositionHeightExtrude = array[startingIndex++] === 1.0;\n  const perPositionHeight = array[startingIndex++] === 1.0;\n  const arcType = array[startingIndex++];\n  const offsetAttribute = array[startingIndex++];\n  const packedLength = array[startingIndex];\n\n  if (!defined(result)) {\n    result = new PolygonOutlineGeometry(dummyOptions);\n  }\n\n  result._polygonHierarchy = polygonHierarchy;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._height = height;\n  result._extrudedHeight = extrudedHeight;\n  result._granularity = granularity;\n  result._perPositionHeight = perPositionHeight;\n  result._perPositionHeightExtrude = perPositionHeightExtrude;\n  result._arcType = arcType;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n  result.packedLength = packedLength;\n\n  return result;\n};\n\n/**\n * A description of a polygon outline from an array of positions.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\n * @param {number} [options.height=0.0] The height of the polygon.\n * @param {number} [options.extrudedHeight] The height of the polygon extrusion.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link LinkType.GEODESIC} and {@link ArcType.RHUMB}.\n * @returns {PolygonOutlineGeometry}\n *\n *\n * @example\n * // create a polygon from points\n * const polygon = Cesium.PolygonOutlineGeometry.fromPositions({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     -72.0, 40.0,\n *     -70.0, 35.0,\n *     -75.0, 30.0,\n *     -70.0, 30.0,\n *     -68.0, 40.0\n *   ])\n * });\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon);\n *\n * @see PolygonOutlineGeometry#createGeometry\n */\nPolygonOutlineGeometry.fromPositions = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.positions\", options.positions);\n  //>>includeEnd('debug');\n\n  const newOptions = {\n    polygonHierarchy: {\n      positions: options.positions,\n    },\n    height: options.height,\n    extrudedHeight: options.extrudedHeight,\n    ellipsoid: options.ellipsoid,\n    granularity: options.granularity,\n    perPositionHeight: options.perPositionHeight,\n    arcType: options.arcType,\n    offsetAttribute: options.offsetAttribute,\n  };\n  return new PolygonOutlineGeometry(newOptions);\n};\n\n/**\n * Computes the geometric representation of a polygon outline, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolygonOutlineGeometry} polygonGeometry A description of the polygon outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolygonOutlineGeometry.createGeometry = function (polygonGeometry) {\n  const ellipsoid = polygonGeometry._ellipsoid;\n  const granularity = polygonGeometry._granularity;\n  const polygonHierarchy = polygonGeometry._polygonHierarchy;\n  const perPositionHeight = polygonGeometry._perPositionHeight;\n  const arcType = polygonGeometry._arcType;\n\n  const polygons = PolygonGeometryLibrary.polygonOutlinesFromHierarchy(\n    polygonHierarchy,\n    !perPositionHeight,\n    ellipsoid,\n  );\n\n  if (polygons.length === 0) {\n    return undefined;\n  }\n\n  let geometryInstance;\n  const geometries = [];\n  const minDistance = CesiumMath.chordLength(\n    granularity,\n    ellipsoid.maximumRadius,\n  );\n\n  const height = polygonGeometry._height;\n  const extrudedHeight = polygonGeometry._extrudedHeight;\n  const extrude =\n    polygonGeometry._perPositionHeightExtrude ||\n    !CesiumMath.equalsEpsilon(height, extrudedHeight, 0, CesiumMath.EPSILON2);\n  let offsetValue;\n  let i;\n  if (extrude) {\n    for (i = 0; i < polygons.length; i++) {\n      geometryInstance = createGeometryFromPositionsExtruded(\n        ellipsoid,\n        polygons[i],\n        minDistance,\n        perPositionHeight,\n        arcType,\n      );\n      geometryInstance.geometry =\n        PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\n          geometryInstance.geometry,\n          height,\n          extrudedHeight,\n          ellipsoid,\n          perPositionHeight,\n        );\n      if (defined(polygonGeometry._offsetAttribute)) {\n        const size =\n          geometryInstance.geometry.attributes.position.values.length / 3;\n        let offsetAttribute = new Uint8Array(size);\n        if (polygonGeometry._offsetAttribute === GeometryOffsetAttribute.TOP) {\n          offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\n        } else {\n          offsetValue =\n            polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n              ? 0\n              : 1;\n          offsetAttribute = offsetAttribute.fill(offsetValue);\n        }\n\n        geometryInstance.geometry.attributes.applyOffset =\n          new GeometryAttribute({\n            componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n            componentsPerAttribute: 1,\n            values: offsetAttribute,\n          });\n      }\n      geometries.push(geometryInstance);\n    }\n  } else {\n    for (i = 0; i < polygons.length; i++) {\n      geometryInstance = createGeometryFromPositions(\n        ellipsoid,\n        polygons[i],\n        minDistance,\n        perPositionHeight,\n        arcType,\n      );\n      geometryInstance.geometry.attributes.position.values =\n        PolygonPipeline.scaleToGeodeticHeight(\n          geometryInstance.geometry.attributes.position.values,\n          height,\n          ellipsoid,\n          !perPositionHeight,\n        );\n\n      if (defined(polygonGeometry._offsetAttribute)) {\n        const length =\n          geometryInstance.geometry.attributes.position.values.length;\n        offsetValue =\n          polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n            ? 0\n            : 1;\n        const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n        geometryInstance.geometry.attributes.applyOffset =\n          new GeometryAttribute({\n            componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n            componentsPerAttribute: 1,\n            values: applyOffset,\n          });\n      }\n\n      geometries.push(geometryInstance);\n    }\n  }\n\n  const geometry = GeometryPipeline.combineInstances(geometries)[0];\n  const boundingSphere = BoundingSphere.fromVertices(\n    geometry.attributes.position.values,\n  );\n\n  return new Geometry({\n    attributes: geometry.attributes,\n    indices: geometry.indices,\n    primitiveType: geometry.primitiveType,\n    boundingSphere: boundingSphere,\n    offsetAttribute: polygonGeometry._offsetAttribute,\n  });\n};\nexport default PolygonOutlineGeometry;\n","\nexport default function earcut(data, holeIndices, dim = 2) {\n\n    const hasHoles = holeIndices && holeIndices.length;\n    const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n    let outerNode = linkedList(data, 0, outerLen, dim, true);\n    const triangles = [];\n\n    if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n    let minX, minY, invSize;\n\n    if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n    // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n    if (data.length > 80 * dim) {\n        minX = data[0];\n        minY = data[1];\n        let maxX = minX;\n        let maxY = minY;\n\n        for (let i = dim; i < outerLen; i += dim) {\n            const x = data[i];\n            const y = data[i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n        }\n\n        // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n        invSize = Math.max(maxX - minX, maxY - minY);\n        invSize = invSize !== 0 ? 32767 / invSize : 0;\n    }\n\n    earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n    return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n    let last;\n\n    if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n        for (let i = start; i < end; i += dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n    } else {\n        for (let i = end - dim; i >= start; i -= dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n    }\n\n    if (last && equals(last, last.next)) {\n        removeNode(last);\n        last = last.next;\n    }\n\n    return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n    if (!start) return start;\n    if (!end) end = start;\n\n    let p = start,\n        again;\n    do {\n        again = false;\n\n        if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n            removeNode(p);\n            p = end = p.prev;\n            if (p === p.next) break;\n            again = true;\n\n        } else {\n            p = p.next;\n        }\n    } while (again || p !== end);\n\n    return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n    if (!ear) return;\n\n    // interlink polygon nodes in z-order\n    if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n    let stop = ear;\n\n    // iterate through ears, slicing them one by one\n    while (ear.prev !== ear.next) {\n        const prev = ear.prev;\n        const next = ear.next;\n\n        if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n            triangles.push(prev.i, ear.i, next.i); // cut off the triangle\n\n            removeNode(ear);\n\n            // skipping the next vertex leads to less sliver triangles\n            ear = next.next;\n            stop = next.next;\n\n            continue;\n        }\n\n        ear = next;\n\n        // if we looped through the whole remaining polygon and can't find any more ears\n        if (ear === stop) {\n            // try filtering points and slicing again\n            if (!pass) {\n                earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n            // if this didn't work, try curing all small self-intersections locally\n            } else if (pass === 1) {\n                ear = cureLocalIntersections(filterPoints(ear), triangles);\n                earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n            // as a last resort, try splitting the remaining polygon into two\n            } else if (pass === 2) {\n                splitEarcut(ear, triangles, dim, minX, minY, invSize);\n            }\n\n            break;\n        }\n    }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n    const a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // now make sure we don't have other points inside the potential ear\n    const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n    // triangle bbox\n    const x0 = Math.min(ax, bx, cx),\n        y0 = Math.min(ay, by, cy),\n        x1 = Math.max(ax, bx, cx),\n        y1 = Math.max(ay, by, cy);\n\n    let p = c.next;\n    while (p !== a) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.next;\n    }\n\n    return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n    const a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n    // triangle bbox\n    const x0 = Math.min(ax, bx, cx),\n        y0 = Math.min(ay, by, cy),\n        x1 = Math.max(ax, bx, cx),\n        y1 = Math.max(ay, by, cy);\n\n    // z-order range for the current triangle bbox;\n    const minZ = zOrder(x0, y0, minX, minY, invSize),\n        maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n    let p = ear.prevZ,\n        n = ear.nextZ;\n\n    // look for points inside the triangle in both directions\n    while (p && p.z >= minZ && n && n.z <= maxZ) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n\n        if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    // look for remaining points in decreasing z-order\n    while (p && p.z >= minZ) {\n        if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n    }\n\n    // look for remaining points in increasing z-order\n    while (n && n.z <= maxZ) {\n        if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n            pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles) {\n    let p = start;\n    do {\n        const a = p.prev,\n            b = p.next.next;\n\n        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n            triangles.push(a.i, p.i, b.i);\n\n            // remove two nodes involved\n            removeNode(p);\n            removeNode(p.next);\n\n            p = start = b;\n        }\n        p = p.next;\n    } while (p !== start);\n\n    return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n    // look for a valid diagonal that divides the polygon into two\n    let a = start;\n    do {\n        let b = a.next.next;\n        while (b !== a.prev) {\n            if (a.i !== b.i && isValidDiagonal(a, b)) {\n                // split the polygon in two by the diagonal\n                let c = splitPolygon(a, b);\n\n                // filter colinear points around the cuts\n                a = filterPoints(a, a.next);\n                c = filterPoints(c, c.next);\n\n                // run earcut on each half\n                earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n                earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n                return;\n            }\n            b = b.next;\n        }\n        a = a.next;\n    } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n    const queue = [];\n\n    for (let i = 0, len = holeIndices.length; i < len; i++) {\n        const start = holeIndices[i] * dim;\n        const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n        const list = linkedList(data, start, end, dim, false);\n        if (list === list.next) list.steiner = true;\n        queue.push(getLeftmost(list));\n    }\n\n    queue.sort(compareXYSlope);\n\n    // process holes from left to right\n    for (let i = 0; i < queue.length; i++) {\n        outerNode = eliminateHole(queue[i], outerNode);\n    }\n\n    return outerNode;\n}\n\nfunction compareXYSlope(a, b) {\n    let result = a.x - b.x;\n    // when the left-most point of 2 holes meet at a vertex, sort the holes counterclockwise so that when we find\n    // the bridge to the outer shell is always the point that they meet at.\n    if (result === 0) {\n        result = a.y - b.y;\n        if (result === 0) {\n            const aSlope = (a.next.y - a.y) / (a.next.x - a.x);\n            const bSlope = (b.next.y - b.y) / (b.next.x - b.x);\n            result = aSlope - bSlope;\n        }\n    }\n    return result;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole(hole, outerNode) {\n    const bridge = findHoleBridge(hole, outerNode);\n    if (!bridge) {\n        return outerNode;\n    }\n\n    const bridgeReverse = splitPolygon(bridge, hole);\n\n    // filter collinear points around the cuts\n    filterPoints(bridgeReverse, bridgeReverse.next);\n    return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n    let p = outerNode;\n    const hx = hole.x;\n    const hy = hole.y;\n    let qx = -Infinity;\n    let m;\n\n    // find a segment intersected by a ray from the hole's leftmost point to the left;\n    // segment's endpoint with lesser x will be potential connection point\n    // unless they intersect at a vertex, then choose the vertex\n    if (equals(hole, p)) return p;\n    do {\n        if (equals(hole, p.next)) return p.next;\n        else if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n            const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n            if (x <= hx && x > qx) {\n                qx = x;\n                m = p.x < p.next.x ? p : p.next;\n                if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n            }\n        }\n        p = p.next;\n    } while (p !== outerNode);\n\n    if (!m) return null;\n\n    // look for points inside the triangle of hole point, segment intersection and endpoint;\n    // if there are no points found, we have a valid connection;\n    // otherwise choose the point of the minimum angle with the ray as connection point\n\n    const stop = m;\n    const mx = m.x;\n    const my = m.y;\n    let tanMin = Infinity;\n\n    p = m;\n\n    do {\n        if (hx >= p.x && p.x >= mx && hx !== p.x &&\n                pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n            const tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n            if (locallyInside(p, hole) &&\n                (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n                m = p;\n                tanMin = tan;\n            }\n        }\n\n        p = p.next;\n    } while (p !== stop);\n\n    return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n    return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n    let p = start;\n    do {\n        if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n        p.prevZ = p.prev;\n        p.nextZ = p.next;\n        p = p.next;\n    } while (p !== start);\n\n    p.prevZ.nextZ = null;\n    p.prevZ = null;\n\n    sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n    let numMerges;\n    let inSize = 1;\n\n    do {\n        let p = list;\n        let e;\n        list = null;\n        let tail = null;\n        numMerges = 0;\n\n        while (p) {\n            numMerges++;\n            let q = p;\n            let pSize = 0;\n            for (let i = 0; i < inSize; i++) {\n                pSize++;\n                q = q.nextZ;\n                if (!q) break;\n            }\n            let qSize = inSize;\n\n            while (pSize > 0 || (qSize > 0 && q)) {\n\n                if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                }\n\n                if (tail) tail.nextZ = e;\n                else list = e;\n\n                e.prevZ = tail;\n                tail = e;\n            }\n\n            p = q;\n        }\n\n        tail.nextZ = null;\n        inSize *= 2;\n\n    } while (numMerges > 1);\n\n    return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n    // coords are transformed into non-negative 15-bit integer range\n    x = (x - minX) * invSize | 0;\n    y = (y - minY) * invSize | 0;\n\n    x = (x | (x << 8)) & 0x00FF00FF;\n    x = (x | (x << 4)) & 0x0F0F0F0F;\n    x = (x | (x << 2)) & 0x33333333;\n    x = (x | (x << 1)) & 0x55555555;\n\n    y = (y | (y << 8)) & 0x00FF00FF;\n    y = (y | (y << 4)) & 0x0F0F0F0F;\n    y = (y | (y << 2)) & 0x33333333;\n    y = (y | (y << 1)) & 0x55555555;\n\n    return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n    let p = start,\n        leftmost = start;\n    do {\n        if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n        p = p.next;\n    } while (p !== start);\n\n    return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n    return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n           (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n           (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a point lies within a convex triangle but false if its equal to the first point of the triangle\nfunction pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, px, py) {\n    return !(ax === px && ay === py) && pointInTriangle(ax, ay, bx, by, cx, cy, px, py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n    return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // doesn't intersect other edges\n           (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n            (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n            equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n    return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n    return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n    const o1 = sign(area(p1, q1, p2));\n    const o2 = sign(area(p1, q1, q2));\n    const o3 = sign(area(p2, q2, p1));\n    const o4 = sign(area(p2, q2, q1));\n\n    if (o1 !== o2 && o3 !== o4) return true; // general case\n\n    if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n    if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n    if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n    if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n    return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n    return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n    return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n    let p = a;\n    do {\n        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n                intersects(p, p.next, a, b)) return true;\n        p = p.next;\n    } while (p !== a);\n\n    return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n    return area(a.prev, a, a.next) < 0 ?\n        area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n        area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n    let p = a;\n    let inside = false;\n    const px = (a.x + b.x) / 2;\n    const py = (a.y + b.y) / 2;\n    do {\n        if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n                (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n            inside = !inside;\n        p = p.next;\n    } while (p !== a);\n\n    return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n    const a2 = createNode(a.i, a.x, a.y),\n        b2 = createNode(b.i, b.x, b.y),\n        an = a.next,\n        bp = b.prev;\n\n    a.next = b;\n    b.prev = a;\n\n    a2.next = an;\n    an.prev = a2;\n\n    b2.next = a2;\n    a2.prev = b2;\n\n    bp.next = b2;\n    b2.prev = bp;\n\n    return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n    const p = createNode(i, x, y);\n\n    if (!last) {\n        p.prev = p;\n        p.next = p;\n\n    } else {\n        p.next = last.next;\n        p.prev = last;\n        last.next.prev = p;\n        last.next = p;\n    }\n    return p;\n}\n\nfunction removeNode(p) {\n    p.next.prev = p.prev;\n    p.prev.next = p.next;\n\n    if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n    if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction createNode(i, x, y) {\n    return {\n        i, // vertex index in coordinates array\n        x, y, // vertex coordinates\n        prev: null, // previous and next vertex nodes in a polygon ring\n        next: null,\n        z: 0, // z-order curve value\n        prevZ: null, // previous and next nodes in z-order\n        nextZ: null,\n        steiner: false // indicates whether this is a steiner point\n    };\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nexport function deviation(data, holeIndices, dim, triangles) {\n    const hasHoles = holeIndices && holeIndices.length;\n    const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n    let polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n    if (hasHoles) {\n        for (let i = 0, len = holeIndices.length; i < len; i++) {\n            const start = holeIndices[i] * dim;\n            const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n            polygonArea -= Math.abs(signedArea(data, start, end, dim));\n        }\n    }\n\n    let trianglesArea = 0;\n    for (let i = 0; i < triangles.length; i += 3) {\n        const a = triangles[i] * dim;\n        const b = triangles[i + 1] * dim;\n        const c = triangles[i + 2] * dim;\n        trianglesArea += Math.abs(\n            (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n            (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n    }\n\n    return polygonArea === 0 && trianglesArea === 0 ? 0 :\n        Math.abs((trianglesArea - polygonArea) / polygonArea);\n}\n\nfunction signedArea(data, start, end, dim) {\n    let sum = 0;\n    for (let i = start, j = end - dim; i < end; i += dim) {\n        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n        j = i;\n    }\n    return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nexport function flatten(data) {\n    const vertices = [];\n    const holes = [];\n    const dimensions = data[0][0].length;\n    let holeIndex = 0;\n    let prevLen = 0;\n\n    for (const ring of data) {\n        for (const p of ring) {\n            for (let d = 0; d < dimensions; d++) vertices.push(p[d]);\n        }\n        if (prevLen) {\n            holeIndex += prevLen;\n            holes.push(holeIndex);\n        }\n        prevLen = ring.length;\n    }\n    return {vertices, holes, dimensions};\n}\n","import earcut from \"earcut\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nconst scaleToGeodeticHeightN = new Cartesian3();\nconst scaleToGeodeticHeightP = new Cartesian3();\n\n/**\n * @private\n */\nconst PolygonPipeline = {};\n\n/**\n * @exception {DeveloperError} At least three positions are required.\n */\nPolygonPipeline.computeArea2D = function (positions) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"positions\", positions);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"positions.length\",\n    positions.length,\n    3,\n  );\n  //>>includeEnd('debug');\n\n  const length = positions.length;\n  let area = 0.0;\n\n  for (let i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) {\n    const v0 = positions[i0];\n    const v1 = positions[i1];\n\n    area += v0.x * v1.y - v1.x * v0.y;\n  }\n\n  return area * 0.5;\n};\n\n/**\n * @returns {WindingOrder} The winding order.\n *\n * @exception {DeveloperError} At least three positions are required.\n */\nPolygonPipeline.computeWindingOrder2D = function (positions) {\n  const area = PolygonPipeline.computeArea2D(positions);\n  return area > 0.0 ? WindingOrder.COUNTER_CLOCKWISE : WindingOrder.CLOCKWISE;\n};\n\n/**\n * Triangulate a polygon.\n *\n * @param {Cartesian2[]} positions Cartesian2 array containing the vertices of the polygon\n * @param {number[]} [holes] An array of the staring indices of the holes.\n * @returns {number[]} Index array representing triangles that fill the polygon\n */\nPolygonPipeline.triangulate = function (positions, holes) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"positions\", positions);\n  //>>includeEnd('debug');\n\n  const flattenedPositions = Cartesian2.packArray(positions);\n  return earcut(flattenedPositions, holes, 2);\n};\n\nconst subdivisionV0Scratch = new Cartesian3();\nconst subdivisionV1Scratch = new Cartesian3();\nconst subdivisionV2Scratch = new Cartesian3();\nconst subdivisionS0Scratch = new Cartesian3();\nconst subdivisionS1Scratch = new Cartesian3();\nconst subdivisionS2Scratch = new Cartesian3();\nconst subdivisionMidScratch = new Cartesian3();\nconst subdivisionT0Scratch = new Cartesian2();\nconst subdivisionT1Scratch = new Cartesian2();\nconst subdivisionT2Scratch = new Cartesian2();\nconst subdivisionTexcoordMidScratch = new Cartesian2();\n\n/**\n * Subdivides positions and raises points to the surface of the ellipsoid.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on.\n * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon.\n * @param {number[]} indices An array of indices that determines the triangles in the polygon.\n * @param {Cartesian2[]} texcoords An optional array of {@link Cartesian2} texture coordinates of the polygon.\n * @param {number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n *\n * @exception {DeveloperError} At least three indices are required.\n * @exception {DeveloperError} The number of indices must be divisable by three.\n * @exception {DeveloperError} Granularity must be greater than zero.\n */\nPolygonPipeline.computeSubdivision = function (\n  ellipsoid,\n  positions,\n  indices,\n  texcoords,\n  granularity,\n) {\n  granularity = granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n\n  const hasTexcoords = defined(texcoords);\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"ellipsoid\", ellipsoid);\n  Check.defined(\"positions\", positions);\n  Check.defined(\"indices\", indices);\n  Check.typeOf.number.greaterThanOrEquals(\"indices.length\", indices.length, 3);\n  Check.typeOf.number.equals(\"indices.length % 3\", \"0\", indices.length % 3, 0);\n  Check.typeOf.number.greaterThan(\"granularity\", granularity, 0.0);\n  //>>includeEnd('debug');\n\n  // triangles that need (or might need) to be subdivided.\n  const triangles = indices.slice(0);\n\n  // New positions due to edge splits are appended to the positions list.\n  let i;\n  const length = positions.length;\n  const subdividedPositions = new Array(length * 3);\n  const subdividedTexcoords = new Array(length * 2);\n  let q = 0;\n  let p = 0;\n  for (i = 0; i < length; i++) {\n    const item = positions[i];\n    subdividedPositions[q++] = item.x;\n    subdividedPositions[q++] = item.y;\n    subdividedPositions[q++] = item.z;\n\n    if (hasTexcoords) {\n      const texcoordItem = texcoords[i];\n      subdividedTexcoords[p++] = texcoordItem.x;\n      subdividedTexcoords[p++] = texcoordItem.y;\n    }\n  }\n\n  const subdividedIndices = [];\n\n  // Used to make sure shared edges are not split more than once.\n  const edges = {};\n\n  const radius = ellipsoid.maximumRadius;\n  const minDistance = CesiumMath.chordLength(granularity, radius);\n  const minDistanceSqrd = minDistance * minDistance;\n\n  while (triangles.length > 0) {\n    const i2 = triangles.pop();\n    const i1 = triangles.pop();\n    const i0 = triangles.pop();\n\n    const v0 = Cartesian3.fromArray(\n      subdividedPositions,\n      i0 * 3,\n      subdivisionV0Scratch,\n    );\n    const v1 = Cartesian3.fromArray(\n      subdividedPositions,\n      i1 * 3,\n      subdivisionV1Scratch,\n    );\n    const v2 = Cartesian3.fromArray(\n      subdividedPositions,\n      i2 * 3,\n      subdivisionV2Scratch,\n    );\n\n    let t0, t1, t2;\n    if (hasTexcoords) {\n      t0 = Cartesian2.fromArray(\n        subdividedTexcoords,\n        i0 * 2,\n        subdivisionT0Scratch,\n      );\n      t1 = Cartesian2.fromArray(\n        subdividedTexcoords,\n        i1 * 2,\n        subdivisionT1Scratch,\n      );\n      t2 = Cartesian2.fromArray(\n        subdividedTexcoords,\n        i2 * 2,\n        subdivisionT2Scratch,\n      );\n    }\n\n    const s0 = Cartesian3.multiplyByScalar(\n      Cartesian3.normalize(v0, subdivisionS0Scratch),\n      radius,\n      subdivisionS0Scratch,\n    );\n    const s1 = Cartesian3.multiplyByScalar(\n      Cartesian3.normalize(v1, subdivisionS1Scratch),\n      radius,\n      subdivisionS1Scratch,\n    );\n    const s2 = Cartesian3.multiplyByScalar(\n      Cartesian3.normalize(v2, subdivisionS2Scratch),\n      radius,\n      subdivisionS2Scratch,\n    );\n\n    const g0 = Cartesian3.magnitudeSquared(\n      Cartesian3.subtract(s0, s1, subdivisionMidScratch),\n    );\n    const g1 = Cartesian3.magnitudeSquared(\n      Cartesian3.subtract(s1, s2, subdivisionMidScratch),\n    );\n    const g2 = Cartesian3.magnitudeSquared(\n      Cartesian3.subtract(s2, s0, subdivisionMidScratch),\n    );\n\n    const max = Math.max(g0, g1, g2);\n    let edge;\n    let mid;\n    let midTexcoord;\n\n    // if the max length squared of a triangle edge is greater than the chord length of squared\n    // of the granularity, subdivide the triangle\n    if (max > minDistanceSqrd) {\n      if (g0 === max) {\n        edge = `${Math.min(i0, i1)} ${Math.max(i0, i1)}`;\n\n        i = edges[edge];\n        if (!defined(i)) {\n          mid = Cartesian3.add(v0, v1, subdivisionMidScratch);\n          Cartesian3.multiplyByScalar(mid, 0.5, mid);\n          subdividedPositions.push(mid.x, mid.y, mid.z);\n          i = subdividedPositions.length / 3 - 1;\n          edges[edge] = i;\n\n          if (hasTexcoords) {\n            midTexcoord = Cartesian2.add(t0, t1, subdivisionTexcoordMidScratch);\n            Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\n            subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\n          }\n        }\n\n        triangles.push(i0, i, i2);\n        triangles.push(i, i1, i2);\n      } else if (g1 === max) {\n        edge = `${Math.min(i1, i2)} ${Math.max(i1, i2)}`;\n\n        i = edges[edge];\n        if (!defined(i)) {\n          mid = Cartesian3.add(v1, v2, subdivisionMidScratch);\n          Cartesian3.multiplyByScalar(mid, 0.5, mid);\n          subdividedPositions.push(mid.x, mid.y, mid.z);\n          i = subdividedPositions.length / 3 - 1;\n          edges[edge] = i;\n\n          if (hasTexcoords) {\n            midTexcoord = Cartesian2.add(t1, t2, subdivisionTexcoordMidScratch);\n            Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\n            subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\n          }\n        }\n\n        triangles.push(i1, i, i0);\n        triangles.push(i, i2, i0);\n      } else if (g2 === max) {\n        edge = `${Math.min(i2, i0)} ${Math.max(i2, i0)}`;\n\n        i = edges[edge];\n        if (!defined(i)) {\n          mid = Cartesian3.add(v2, v0, subdivisionMidScratch);\n          Cartesian3.multiplyByScalar(mid, 0.5, mid);\n          subdividedPositions.push(mid.x, mid.y, mid.z);\n          i = subdividedPositions.length / 3 - 1;\n          edges[edge] = i;\n\n          if (hasTexcoords) {\n            midTexcoord = Cartesian2.add(t2, t0, subdivisionTexcoordMidScratch);\n            Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\n            subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\n          }\n        }\n\n        triangles.push(i2, i, i1);\n        triangles.push(i, i0, i1);\n      }\n    } else {\n      subdividedIndices.push(i0);\n      subdividedIndices.push(i1);\n      subdividedIndices.push(i2);\n    }\n  }\n\n  const geometryOptions = {\n    attributes: {\n      position: new GeometryAttribute({\n        componentDatatype: ComponentDatatype.DOUBLE,\n        componentsPerAttribute: 3,\n        values: subdividedPositions,\n      }),\n    },\n    indices: subdividedIndices,\n    primitiveType: PrimitiveType.TRIANGLES,\n  };\n\n  if (hasTexcoords) {\n    geometryOptions.attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: subdividedTexcoords,\n    });\n  }\n\n  return new Geometry(geometryOptions);\n};\n\nconst subdivisionC0Scratch = new Cartographic();\nconst subdivisionC1Scratch = new Cartographic();\nconst subdivisionC2Scratch = new Cartographic();\nconst subdivisionCartographicScratch = new Cartographic();\n\n/**\n * Subdivides positions on rhumb lines and raises points to the surface of the ellipsoid.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on.\n * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon.\n * @param {number[]} indices An array of indices that determines the triangles in the polygon.\n * @param {Cartesian2[]} texcoords An optional array of {@link Cartesian2} texture coordinates of the polygon.\n * @param {number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n *\n * @exception {DeveloperError} At least three indices are required.\n * @exception {DeveloperError} The number of indices must be divisable by three.\n * @exception {DeveloperError} Granularity must be greater than zero.\n */\nPolygonPipeline.computeRhumbLineSubdivision = function (\n  ellipsoid,\n  positions,\n  indices,\n  texcoords,\n  granularity,\n) {\n  granularity = granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n\n  const hasTexcoords = defined(texcoords);\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"ellipsoid\", ellipsoid);\n  Check.defined(\"positions\", positions);\n  Check.defined(\"indices\", indices);\n  Check.typeOf.number.greaterThanOrEquals(\"indices.length\", indices.length, 3);\n  Check.typeOf.number.equals(\"indices.length % 3\", \"0\", indices.length % 3, 0);\n  Check.typeOf.number.greaterThan(\"granularity\", granularity, 0.0);\n  //>>includeEnd('debug');\n\n  // triangles that need (or might need) to be subdivided.\n  const triangles = indices.slice(0);\n\n  // New positions due to edge splits are appended to the positions list.\n  let i;\n  const length = positions.length;\n  const subdividedPositions = new Array(length * 3);\n  const subdividedTexcoords = new Array(length * 2);\n  let q = 0;\n  let p = 0;\n  for (i = 0; i < length; i++) {\n    const item = positions[i];\n    subdividedPositions[q++] = item.x;\n    subdividedPositions[q++] = item.y;\n    subdividedPositions[q++] = item.z;\n\n    if (hasTexcoords) {\n      const texcoordItem = texcoords[i];\n      subdividedTexcoords[p++] = texcoordItem.x;\n      subdividedTexcoords[p++] = texcoordItem.y;\n    }\n  }\n\n  const subdividedIndices = [];\n\n  // Used to make sure shared edges are not split more than once.\n  const edges = {};\n\n  const radius = ellipsoid.maximumRadius;\n  const minDistance = CesiumMath.chordLength(granularity, radius);\n\n  const rhumb0 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n  const rhumb1 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n  const rhumb2 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n\n  while (triangles.length > 0) {\n    const i2 = triangles.pop();\n    const i1 = triangles.pop();\n    const i0 = triangles.pop();\n\n    const v0 = Cartesian3.fromArray(\n      subdividedPositions,\n      i0 * 3,\n      subdivisionV0Scratch,\n    );\n    const v1 = Cartesian3.fromArray(\n      subdividedPositions,\n      i1 * 3,\n      subdivisionV1Scratch,\n    );\n    const v2 = Cartesian3.fromArray(\n      subdividedPositions,\n      i2 * 3,\n      subdivisionV2Scratch,\n    );\n\n    let t0, t1, t2;\n    if (hasTexcoords) {\n      t0 = Cartesian2.fromArray(\n        subdividedTexcoords,\n        i0 * 2,\n        subdivisionT0Scratch,\n      );\n      t1 = Cartesian2.fromArray(\n        subdividedTexcoords,\n        i1 * 2,\n        subdivisionT1Scratch,\n      );\n      t2 = Cartesian2.fromArray(\n        subdividedTexcoords,\n        i2 * 2,\n        subdivisionT2Scratch,\n      );\n    }\n\n    const c0 = ellipsoid.cartesianToCartographic(v0, subdivisionC0Scratch);\n    const c1 = ellipsoid.cartesianToCartographic(v1, subdivisionC1Scratch);\n    const c2 = ellipsoid.cartesianToCartographic(v2, subdivisionC2Scratch);\n\n    rhumb0.setEndPoints(c0, c1);\n    const g0 = rhumb0.surfaceDistance;\n    rhumb1.setEndPoints(c1, c2);\n    const g1 = rhumb1.surfaceDistance;\n    rhumb2.setEndPoints(c2, c0);\n    const g2 = rhumb2.surfaceDistance;\n\n    const max = Math.max(g0, g1, g2);\n    let edge;\n    let mid;\n    let midHeight;\n    let midCartesian3;\n    let midTexcoord;\n\n    // if the max length squared of a triangle edge is greater than granularity, subdivide the triangle\n    if (max > minDistance) {\n      if (g0 === max) {\n        edge = `${Math.min(i0, i1)} ${Math.max(i0, i1)}`;\n\n        i = edges[edge];\n        if (!defined(i)) {\n          mid = rhumb0.interpolateUsingFraction(\n            0.5,\n            subdivisionCartographicScratch,\n          );\n          midHeight = (c0.height + c1.height) * 0.5;\n          midCartesian3 = Cartesian3.fromRadians(\n            mid.longitude,\n            mid.latitude,\n            midHeight,\n            ellipsoid,\n            subdivisionMidScratch,\n          );\n          subdividedPositions.push(\n            midCartesian3.x,\n            midCartesian3.y,\n            midCartesian3.z,\n          );\n          i = subdividedPositions.length / 3 - 1;\n          edges[edge] = i;\n\n          if (hasTexcoords) {\n            midTexcoord = Cartesian2.add(t0, t1, subdivisionTexcoordMidScratch);\n            Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\n            subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\n          }\n        }\n\n        triangles.push(i0, i, i2);\n        triangles.push(i, i1, i2);\n      } else if (g1 === max) {\n        edge = `${Math.min(i1, i2)} ${Math.max(i1, i2)}`;\n\n        i = edges[edge];\n        if (!defined(i)) {\n          mid = rhumb1.interpolateUsingFraction(\n            0.5,\n            subdivisionCartographicScratch,\n          );\n          midHeight = (c1.height + c2.height) * 0.5;\n          midCartesian3 = Cartesian3.fromRadians(\n            mid.longitude,\n            mid.latitude,\n            midHeight,\n            ellipsoid,\n            subdivisionMidScratch,\n          );\n          subdividedPositions.push(\n            midCartesian3.x,\n            midCartesian3.y,\n            midCartesian3.z,\n          );\n          i = subdividedPositions.length / 3 - 1;\n          edges[edge] = i;\n\n          if (hasTexcoords) {\n            midTexcoord = Cartesian2.add(t1, t2, subdivisionTexcoordMidScratch);\n            Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\n            subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\n          }\n        }\n\n        triangles.push(i1, i, i0);\n        triangles.push(i, i2, i0);\n      } else if (g2 === max) {\n        edge = `${Math.min(i2, i0)} ${Math.max(i2, i0)}`;\n\n        i = edges[edge];\n        if (!defined(i)) {\n          mid = rhumb2.interpolateUsingFraction(\n            0.5,\n            subdivisionCartographicScratch,\n          );\n          midHeight = (c2.height + c0.height) * 0.5;\n          midCartesian3 = Cartesian3.fromRadians(\n            mid.longitude,\n            mid.latitude,\n            midHeight,\n            ellipsoid,\n            subdivisionMidScratch,\n          );\n          subdividedPositions.push(\n            midCartesian3.x,\n            midCartesian3.y,\n            midCartesian3.z,\n          );\n          i = subdividedPositions.length / 3 - 1;\n          edges[edge] = i;\n\n          if (hasTexcoords) {\n            midTexcoord = Cartesian2.add(t2, t0, subdivisionTexcoordMidScratch);\n            Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\n            subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\n          }\n        }\n\n        triangles.push(i2, i, i1);\n        triangles.push(i, i0, i1);\n      }\n    } else {\n      subdividedIndices.push(i0);\n      subdividedIndices.push(i1);\n      subdividedIndices.push(i2);\n    }\n  }\n\n  const geometryOptions = {\n    attributes: {\n      position: new GeometryAttribute({\n        componentDatatype: ComponentDatatype.DOUBLE,\n        componentsPerAttribute: 3,\n        values: subdividedPositions,\n      }),\n    },\n    indices: subdividedIndices,\n    primitiveType: PrimitiveType.TRIANGLES,\n  };\n\n  if (hasTexcoords) {\n    geometryOptions.attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: subdividedTexcoords,\n    });\n  }\n\n  return new Geometry(geometryOptions);\n};\n\n/**\n * Scales each position of a geometry's position attribute to a height, in place.\n *\n * @param {number[]} positions The array of numbers representing the positions to be scaled\n * @param {number} [height=0.0] The desired height to add to the positions\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the positions lie.\n * @param {boolean} [scaleToSurface=true] <code>true</code> if the positions need to be scaled to the surface before the height is added.\n * @returns {number[]} The input array of positions, scaled to height\n */\nPolygonPipeline.scaleToGeodeticHeight = function (\n  positions,\n  height,\n  ellipsoid,\n  scaleToSurface,\n) {\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  let n = scaleToGeodeticHeightN;\n  let p = scaleToGeodeticHeightP;\n\n  height = height ?? 0.0;\n  scaleToSurface = scaleToSurface ?? true;\n\n  if (defined(positions)) {\n    const length = positions.length;\n\n    for (let i = 0; i < length; i += 3) {\n      Cartesian3.fromArray(positions, i, p);\n\n      if (scaleToSurface) {\n        p = ellipsoid.scaleToGeodeticSurface(p, p);\n      }\n\n      if (height !== 0) {\n        n = ellipsoid.geodeticSurfaceNormal(p, n);\n\n        Cartesian3.multiplyByScalar(n, height, n);\n        Cartesian3.add(p, n, p);\n      }\n\n      positions[i] = p.x;\n      positions[i + 1] = p.y;\n      positions[i + 2] = p.z;\n    }\n  }\n\n  return positions;\n};\nexport default PolygonPipeline;\n","import ArcType from \"./ArcType.js\";\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Color from \"./Color.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryType from \"./GeometryType.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst scratchInterpolateColorsArray = [];\n\nfunction interpolateColors(p0, p1, color0, color1, numPoints) {\n  const colors = scratchInterpolateColorsArray;\n  colors.length = numPoints;\n  let i;\n\n  const r0 = color0.red;\n  const g0 = color0.green;\n  const b0 = color0.blue;\n  const a0 = color0.alpha;\n\n  const r1 = color1.red;\n  const g1 = color1.green;\n  const b1 = color1.blue;\n  const a1 = color1.alpha;\n\n  if (Color.equals(color0, color1)) {\n    for (i = 0; i < numPoints; i++) {\n      colors[i] = Color.clone(color0);\n    }\n    return colors;\n  }\n\n  const redPerVertex = (r1 - r0) / numPoints;\n  const greenPerVertex = (g1 - g0) / numPoints;\n  const bluePerVertex = (b1 - b0) / numPoints;\n  const alphaPerVertex = (a1 - a0) / numPoints;\n\n  for (i = 0; i < numPoints; i++) {\n    colors[i] = new Color(\n      r0 + i * redPerVertex,\n      g0 + i * greenPerVertex,\n      b0 + i * bluePerVertex,\n      a0 + i * alphaPerVertex,\n    );\n  }\n\n  return colors;\n}\n\n/**\n * A description of a polyline modeled as a line strip; the first two positions define a line segment,\n * and each additional position defines a line segment from the previous position. The polyline is capable of\n * displaying with a material.\n *\n * @alias PolylineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip.\n * @param {number} [options.width=1.0] The width in pixels.\n * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors.\n * @param {boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n *\n * @exception {DeveloperError} At least two positions are required.\n * @exception {DeveloperError} width must be greater than or equal to one.\n * @exception {DeveloperError} colors has an invalid length.\n *\n * @see PolylineGeometry#createGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=polyline|Cesium Sandcastle Polyline Demo}\n *\n * @example\n * // A polyline with two connected line segments\n * const polyline = new Cesium.PolylineGeometry({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     0.0, 0.0,\n *     5.0, 0.0,\n *     5.0, 5.0\n *   ]),\n *   width : 10.0\n * });\n * const geometry = Cesium.PolylineGeometry.createGeometry(polyline);\n */\nfunction PolylineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n  const colors = options.colors;\n  const width = options.width ?? 1.0;\n  const colorsPerVertex = options.colorsPerVertex ?? false;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions) || positions.length < 2) {\n    throw new DeveloperError(\"At least two positions are required.\");\n  }\n  if (typeof width !== \"number\") {\n    throw new DeveloperError(\"width must be a number\");\n  }\n  if (\n    defined(colors) &&\n    ((colorsPerVertex && colors.length < positions.length) ||\n      (!colorsPerVertex && colors.length < positions.length - 1))\n  ) {\n    throw new DeveloperError(\"colors has an invalid length.\");\n  }\n  //>>includeEnd('debug');\n\n  this._positions = positions;\n  this._colors = colors;\n  this._width = width;\n  this._colorsPerVertex = colorsPerVertex;\n  this._vertexFormat = VertexFormat.clone(\n    options.vertexFormat ?? VertexFormat.DEFAULT,\n  );\n\n  this._arcType = options.arcType ?? ArcType.GEODESIC;\n  this._granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  this._ellipsoid = Ellipsoid.clone(options.ellipsoid ?? Ellipsoid.default);\n  this._workerName = \"createPolylineGeometry\";\n\n  let numComponents = 1 + positions.length * Cartesian3.packedLength;\n  numComponents += defined(colors) ? 1 + colors.length * Color.packedLength : 1;\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 4;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolylineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nPolylineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  const positions = value._positions;\n  let length = positions.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  const colors = value._colors;\n  length = defined(colors) ? colors.length : 0.0;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n    Color.pack(colors[i], array, startingIndex);\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._width;\n  array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0;\n  array[startingIndex++] = value._arcType;\n  array[startingIndex] = value._granularity;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  positions: undefined,\n  colors: undefined,\n  ellipsoid: scratchEllipsoid,\n  vertexFormat: scratchVertexFormat,\n  width: undefined,\n  colorsPerVertex: undefined,\n  arcType: undefined,\n  granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolylineGeometry} [result] The object into which to store the result.\n * @returns {PolylineGeometry} The modified result parameter or a new PolylineGeometry instance if one was not provided.\n */\nPolylineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  let length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  length = array[startingIndex++];\n  const colors = length > 0 ? new Array(length) : undefined;\n\n  for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n    colors[i] = Color.unpack(array, startingIndex);\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const width = array[startingIndex++];\n  const colorsPerVertex = array[startingIndex++] === 1.0;\n  const arcType = array[startingIndex++];\n  const granularity = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.positions = positions;\n    scratchOptions.colors = colors;\n    scratchOptions.width = width;\n    scratchOptions.colorsPerVertex = colorsPerVertex;\n    scratchOptions.arcType = arcType;\n    scratchOptions.granularity = granularity;\n    return new PolylineGeometry(scratchOptions);\n  }\n\n  result._positions = positions;\n  result._colors = colors;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._width = width;\n  result._colorsPerVertex = colorsPerVertex;\n  result._arcType = arcType;\n  result._granularity = granularity;\n\n  return result;\n};\n\nconst scratchCartesian3 = new Cartesian3();\nconst scratchPosition = new Cartesian3();\nconst scratchPrevPosition = new Cartesian3();\nconst scratchNextPosition = new Cartesian3();\n\n/**\n * Computes the geometric representation of a polyline, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolylineGeometry} polylineGeometry A description of the polyline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolylineGeometry.createGeometry = function (polylineGeometry) {\n  const width = polylineGeometry._width;\n  const vertexFormat = polylineGeometry._vertexFormat;\n  let colors = polylineGeometry._colors;\n  const colorsPerVertex = polylineGeometry._colorsPerVertex;\n  const arcType = polylineGeometry._arcType;\n  const granularity = polylineGeometry._granularity;\n  const ellipsoid = polylineGeometry._ellipsoid;\n\n  let i;\n  let j;\n  let k;\n\n  const removedIndices = [];\n  let positions = arrayRemoveDuplicates(\n    polylineGeometry._positions,\n    Cartesian3.equalsEpsilon,\n    false,\n    removedIndices,\n  );\n\n  if (defined(colors) && removedIndices.length > 0) {\n    let removedArrayIndex = 0;\n    let nextRemovedIndex = removedIndices[0];\n    colors = colors.filter(function (color, index) {\n      let remove = false;\n      if (colorsPerVertex) {\n        remove =\n          index === nextRemovedIndex || (index === 0 && nextRemovedIndex === 1);\n      } else {\n        remove = index + 1 === nextRemovedIndex;\n      }\n\n      if (remove) {\n        removedArrayIndex++;\n        nextRemovedIndex = removedIndices[removedArrayIndex];\n        return false;\n      }\n      return true;\n    });\n  }\n\n  let positionsLength = positions.length;\n\n  // A width of a pixel or less is not a valid geometry, but in order to support external data\n  // that may have errors we treat this as an empty geometry.\n  if (positionsLength < 2 || width <= 0.0) {\n    return undefined;\n  }\n\n  if (arcType === ArcType.GEODESIC || arcType === ArcType.RHUMB) {\n    let subdivisionSize;\n    let numberOfPointsFunction;\n    if (arcType === ArcType.GEODESIC) {\n      subdivisionSize = CesiumMath.chordLength(\n        granularity,\n        ellipsoid.maximumRadius,\n      );\n      numberOfPointsFunction = PolylinePipeline.numberOfPoints;\n    } else {\n      subdivisionSize = granularity;\n      numberOfPointsFunction = PolylinePipeline.numberOfPointsRhumbLine;\n    }\n\n    const heights = PolylinePipeline.extractHeights(positions, ellipsoid);\n\n    if (defined(colors)) {\n      let colorLength = 1;\n      for (i = 0; i < positionsLength - 1; ++i) {\n        colorLength += numberOfPointsFunction(\n          positions[i],\n          positions[i + 1],\n          subdivisionSize,\n        );\n      }\n\n      const newColors = new Array(colorLength);\n      let newColorIndex = 0;\n\n      for (i = 0; i < positionsLength - 1; ++i) {\n        const p0 = positions[i];\n        const p1 = positions[i + 1];\n        const c0 = colors[i];\n\n        const numColors = numberOfPointsFunction(p0, p1, subdivisionSize);\n        if (colorsPerVertex && i < colorLength) {\n          const c1 = colors[i + 1];\n          const interpolatedColors = interpolateColors(\n            p0,\n            p1,\n            c0,\n            c1,\n            numColors,\n          );\n          const interpolatedColorsLength = interpolatedColors.length;\n          for (j = 0; j < interpolatedColorsLength; ++j) {\n            newColors[newColorIndex++] = interpolatedColors[j];\n          }\n        } else {\n          for (j = 0; j < numColors; ++j) {\n            newColors[newColorIndex++] = Color.clone(c0);\n          }\n        }\n      }\n\n      newColors[newColorIndex] = Color.clone(colors[colors.length - 1]);\n      colors = newColors;\n\n      scratchInterpolateColorsArray.length = 0;\n    }\n\n    if (arcType === ArcType.GEODESIC) {\n      positions = PolylinePipeline.generateCartesianArc({\n        positions: positions,\n        minDistance: subdivisionSize,\n        ellipsoid: ellipsoid,\n        height: heights,\n      });\n    } else {\n      positions = PolylinePipeline.generateCartesianRhumbArc({\n        positions: positions,\n        granularity: subdivisionSize,\n        ellipsoid: ellipsoid,\n        height: heights,\n      });\n    }\n  }\n\n  positionsLength = positions.length;\n  const size = positionsLength * 4.0 - 4.0;\n\n  const finalPositions = new Float64Array(size * 3);\n  const prevPositions = new Float64Array(size * 3);\n  const nextPositions = new Float64Array(size * 3);\n  const expandAndWidth = new Float32Array(size * 2);\n  const st = vertexFormat.st ? new Float32Array(size * 2) : undefined;\n  const finalColors = defined(colors) ? new Uint8Array(size * 4) : undefined;\n\n  let positionIndex = 0;\n  let expandAndWidthIndex = 0;\n  let stIndex = 0;\n  let colorIndex = 0;\n  let position;\n\n  for (j = 0; j < positionsLength; ++j) {\n    if (j === 0) {\n      position = scratchCartesian3;\n      Cartesian3.subtract(positions[0], positions[1], position);\n      Cartesian3.add(positions[0], position, position);\n    } else {\n      position = positions[j - 1];\n    }\n\n    Cartesian3.clone(position, scratchPrevPosition);\n    Cartesian3.clone(positions[j], scratchPosition);\n\n    if (j === positionsLength - 1) {\n      position = scratchCartesian3;\n      Cartesian3.subtract(\n        positions[positionsLength - 1],\n        positions[positionsLength - 2],\n        position,\n      );\n      Cartesian3.add(positions[positionsLength - 1], position, position);\n    } else {\n      position = positions[j + 1];\n    }\n\n    Cartesian3.clone(position, scratchNextPosition);\n\n    let color0, color1;\n    if (defined(finalColors)) {\n      if (j !== 0 && !colorsPerVertex) {\n        color0 = colors[j - 1];\n      } else {\n        color0 = colors[j];\n      }\n\n      if (j !== positionsLength - 1) {\n        color1 = colors[j];\n      }\n    }\n\n    const startK = j === 0 ? 2 : 0;\n    const endK = j === positionsLength - 1 ? 2 : 4;\n\n    for (k = startK; k < endK; ++k) {\n      Cartesian3.pack(scratchPosition, finalPositions, positionIndex);\n      Cartesian3.pack(scratchPrevPosition, prevPositions, positionIndex);\n      Cartesian3.pack(scratchNextPosition, nextPositions, positionIndex);\n      positionIndex += 3;\n\n      const direction = k - 2 < 0 ? -1.0 : 1.0;\n      expandAndWidth[expandAndWidthIndex++] = 2 * (k % 2) - 1; // expand direction\n      expandAndWidth[expandAndWidthIndex++] = direction * width;\n\n      if (vertexFormat.st) {\n        st[stIndex++] = j / (positionsLength - 1);\n        st[stIndex++] = Math.max(expandAndWidth[expandAndWidthIndex - 2], 0.0);\n      }\n\n      if (defined(finalColors)) {\n        const color = k < 2 ? color0 : color1;\n\n        finalColors[colorIndex++] = Color.floatToByte(color.red);\n        finalColors[colorIndex++] = Color.floatToByte(color.green);\n        finalColors[colorIndex++] = Color.floatToByte(color.blue);\n        finalColors[colorIndex++] = Color.floatToByte(color.alpha);\n      }\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: finalPositions,\n  });\n\n  attributes.prevPosition = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: prevPositions,\n  });\n\n  attributes.nextPosition = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: nextPositions,\n  });\n\n  attributes.expandAndWidth = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 2,\n    values: expandAndWidth,\n  });\n\n  if (vertexFormat.st) {\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: st,\n    });\n  }\n\n  if (defined(finalColors)) {\n    attributes.color = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 4,\n      values: finalColors,\n      normalize: true,\n    });\n  }\n\n  const indices = IndexDatatype.createTypedArray(size, positionsLength * 6 - 6);\n  let index = 0;\n  let indicesIndex = 0;\n  const length = positionsLength - 1.0;\n  for (j = 0; j < length; ++j) {\n    indices[indicesIndex++] = index;\n    indices[indicesIndex++] = index + 2;\n    indices[indicesIndex++] = index + 1;\n\n    indices[indicesIndex++] = index + 1;\n    indices[indicesIndex++] = index + 2;\n    indices[indicesIndex++] = index + 3;\n\n    index += 4;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: BoundingSphere.fromPoints(positions),\n    geometryType: GeometryType.POLYLINES,\n  });\n};\nexport default PolylineGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\n\n/**\n * @private\n */\nconst PolylinePipeline = {};\n\nPolylinePipeline.numberOfPoints = function (p0, p1, minDistance) {\n  const distance = Cartesian3.distance(p0, p1);\n  return Math.ceil(distance / minDistance);\n};\n\nPolylinePipeline.numberOfPointsRhumbLine = function (p0, p1, granularity) {\n  const radiansDistanceSquared =\n    Math.pow(p0.longitude - p1.longitude, 2) +\n    Math.pow(p0.latitude - p1.latitude, 2);\n\n  return Math.max(\n    1,\n    Math.ceil(Math.sqrt(radiansDistanceSquared / (granularity * granularity))),\n  );\n};\n\nconst cartoScratch = new Cartographic();\nPolylinePipeline.extractHeights = function (positions, ellipsoid) {\n  const length = positions.length;\n  const heights = new Array(length);\n  for (let i = 0; i < length; i++) {\n    const p = positions[i];\n    heights[i] = ellipsoid.cartesianToCartographic(p, cartoScratch).height;\n  }\n  return heights;\n};\n\nconst wrapLongitudeInversMatrix = new Matrix4();\nconst wrapLongitudeOrigin = new Cartesian3();\nconst wrapLongitudeXZNormal = new Cartesian3();\nconst wrapLongitudeXZPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nconst wrapLongitudeYZNormal = new Cartesian3();\nconst wrapLongitudeYZPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nconst wrapLongitudeIntersection = new Cartesian3();\nconst wrapLongitudeOffset = new Cartesian3();\n\nconst subdivideHeightsScratchArray = [];\n\nfunction subdivideHeights(numPoints, h0, h1) {\n  const heights = subdivideHeightsScratchArray;\n  heights.length = numPoints;\n\n  let i;\n  if (h0 === h1) {\n    for (i = 0; i < numPoints; i++) {\n      heights[i] = h0;\n    }\n    return heights;\n  }\n\n  const dHeight = h1 - h0;\n  const heightPerVertex = dHeight / numPoints;\n\n  for (i = 0; i < numPoints; i++) {\n    const h = h0 + i * heightPerVertex;\n    heights[i] = h;\n  }\n\n  return heights;\n}\n\nconst carto1 = new Cartographic();\nconst carto2 = new Cartographic();\nconst cartesian = new Cartesian3();\nconst scaleFirst = new Cartesian3();\nconst scaleLast = new Cartesian3();\nconst ellipsoidGeodesic = new EllipsoidGeodesic();\nlet ellipsoidRhumb = new EllipsoidRhumbLine();\n\n//Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2.\n//Result includes p1, but not include p2.  This function is called for a sequence of line segments,\n//and this prevents duplication of end point.\nfunction generateCartesianArc(\n  p0,\n  p1,\n  minDistance,\n  ellipsoid,\n  h0,\n  h1,\n  array,\n  offset,\n) {\n  const first = ellipsoid.scaleToGeodeticSurface(p0, scaleFirst);\n  const last = ellipsoid.scaleToGeodeticSurface(p1, scaleLast);\n  const numPoints = PolylinePipeline.numberOfPoints(p0, p1, minDistance);\n  const start = ellipsoid.cartesianToCartographic(first, carto1);\n  const end = ellipsoid.cartesianToCartographic(last, carto2);\n  const heights = subdivideHeights(numPoints, h0, h1);\n\n  ellipsoidGeodesic.setEndPoints(start, end);\n  const surfaceDistanceBetweenPoints =\n    ellipsoidGeodesic.surfaceDistance / numPoints;\n\n  let index = offset;\n  start.height = h0;\n  let cart = ellipsoid.cartographicToCartesian(start, cartesian);\n  Cartesian3.pack(cart, array, index);\n  index += 3;\n\n  for (let i = 1; i < numPoints; i++) {\n    const carto = ellipsoidGeodesic.interpolateUsingSurfaceDistance(\n      i * surfaceDistanceBetweenPoints,\n      carto2,\n    );\n    carto.height = heights[i];\n    cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n    Cartesian3.pack(cart, array, index);\n    index += 3;\n  }\n\n  return index;\n}\n\n//Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2.\n//Result includes p1, but not include p2.  This function is called for a sequence of line segments,\n//and this prevents duplication of end point.\nfunction generateCartesianRhumbArc(\n  p0,\n  p1,\n  granularity,\n  ellipsoid,\n  h0,\n  h1,\n  array,\n  offset,\n) {\n  const start = ellipsoid.cartesianToCartographic(p0, carto1);\n  const end = ellipsoid.cartesianToCartographic(p1, carto2);\n  const numPoints = PolylinePipeline.numberOfPointsRhumbLine(\n    start,\n    end,\n    granularity,\n  );\n  start.height = 0.0;\n  end.height = 0.0;\n  const heights = subdivideHeights(numPoints, h0, h1);\n\n  if (!ellipsoidRhumb.ellipsoid.equals(ellipsoid)) {\n    ellipsoidRhumb = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\n  }\n  ellipsoidRhumb.setEndPoints(start, end);\n  const surfaceDistanceBetweenPoints =\n    ellipsoidRhumb.surfaceDistance / numPoints;\n\n  let index = offset;\n  start.height = h0;\n  let cart = ellipsoid.cartographicToCartesian(start, cartesian);\n  Cartesian3.pack(cart, array, index);\n  index += 3;\n\n  for (let i = 1; i < numPoints; i++) {\n    const carto = ellipsoidRhumb.interpolateUsingSurfaceDistance(\n      i * surfaceDistanceBetweenPoints,\n      carto2,\n    );\n    carto.height = heights[i];\n    cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n    Cartesian3.pack(cart, array, index);\n    index += 3;\n  }\n\n  return index;\n}\n\n/**\n * Breaks a {@link Polyline} into segments such that it does not cross the &plusmn;180 degree meridian of an ellipsoid.\n *\n * @param {Cartesian3[]} positions The polyline's Cartesian positions.\n * @param {Matrix4} [modelMatrix=Matrix4.IDENTITY] The polyline's model matrix. Assumed to be an affine\n * transformation matrix, where the upper left 3x3 elements are a rotation matrix, and\n * the upper three elements in the fourth column are the translation.  The bottom row is assumed to be [0, 0, 0, 1].\n * The matrix is not verified to be in the proper form.\n * @returns {object} An object with a <code>positions</code> property that is an array of positions and a\n * <code>segments</code> property.\n *\n *\n * @example\n * const polylines = new Cesium.PolylineCollection();\n * const polyline = polylines.add(...);\n * const positions = polyline.positions;\n * const modelMatrix = polylines.modelMatrix;\n * const segments = Cesium.PolylinePipeline.wrapLongitude(positions, modelMatrix);\n *\n * @see PolygonPipeline.wrapLongitude\n * @see Polyline\n * @see PolylineCollection\n */\nPolylinePipeline.wrapLongitude = function (positions, modelMatrix) {\n  const cartesians = [];\n  const segments = [];\n\n  if (defined(positions) && positions.length > 0) {\n    modelMatrix = modelMatrix ?? Matrix4.IDENTITY;\n    const inverseModelMatrix = Matrix4.inverseTransformation(\n      modelMatrix,\n      wrapLongitudeInversMatrix,\n    );\n\n    const origin = Matrix4.multiplyByPoint(\n      inverseModelMatrix,\n      Cartesian3.ZERO,\n      wrapLongitudeOrigin,\n    );\n    const xzNormal = Cartesian3.normalize(\n      Matrix4.multiplyByPointAsVector(\n        inverseModelMatrix,\n        Cartesian3.UNIT_Y,\n        wrapLongitudeXZNormal,\n      ),\n      wrapLongitudeXZNormal,\n    );\n    const xzPlane = Plane.fromPointNormal(\n      origin,\n      xzNormal,\n      wrapLongitudeXZPlane,\n    );\n    const yzNormal = Cartesian3.normalize(\n      Matrix4.multiplyByPointAsVector(\n        inverseModelMatrix,\n        Cartesian3.UNIT_X,\n        wrapLongitudeYZNormal,\n      ),\n      wrapLongitudeYZNormal,\n    );\n    const yzPlane = Plane.fromPointNormal(\n      origin,\n      yzNormal,\n      wrapLongitudeYZPlane,\n    );\n\n    let count = 1;\n    cartesians.push(Cartesian3.clone(positions[0]));\n    let prev = cartesians[0];\n\n    const length = positions.length;\n    for (let i = 1; i < length; ++i) {\n      const cur = positions[i];\n\n      // intersects the IDL if either endpoint is on the negative side of the yz-plane\n      if (\n        Plane.getPointDistance(yzPlane, prev) < 0.0 ||\n        Plane.getPointDistance(yzPlane, cur) < 0.0\n      ) {\n        // and intersects the xz-plane\n        const intersection = IntersectionTests.lineSegmentPlane(\n          prev,\n          cur,\n          xzPlane,\n          wrapLongitudeIntersection,\n        );\n        if (defined(intersection)) {\n          // move point on the xz-plane slightly away from the plane\n          const offset = Cartesian3.multiplyByScalar(\n            xzNormal,\n            5.0e-9,\n            wrapLongitudeOffset,\n          );\n          if (Plane.getPointDistance(xzPlane, prev) < 0.0) {\n            Cartesian3.negate(offset, offset);\n          }\n\n          cartesians.push(\n            Cartesian3.add(intersection, offset, new Cartesian3()),\n          );\n          segments.push(count + 1);\n\n          Cartesian3.negate(offset, offset);\n          cartesians.push(\n            Cartesian3.add(intersection, offset, new Cartesian3()),\n          );\n          count = 1;\n        }\n      }\n\n      cartesians.push(Cartesian3.clone(positions[i]));\n      count++;\n\n      prev = cur;\n    }\n\n    segments.push(count);\n  }\n\n  return {\n    positions: cartesians,\n    lengths: segments,\n  };\n};\n\n/**\n * Subdivides polyline and raises all points to the specified height.  Returns an array of numbers to represent the positions.\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {number|number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid on which the positions lie.\n * @returns {number[]} A new array of positions of type {number} that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * const positions = Cesium.Cartesian3.fromDegreesArray([\n *   -105.0, 40.0,\n *   -100.0, 38.0,\n *   -105.0, 35.0,\n *   -100.0, 32.0\n * ]);\n * const surfacePositions = Cesium.PolylinePipeline.generateArc({\n *   positons: positions\n * });\n */\nPolylinePipeline.generateArc = function (options) {\n  if (!defined(options)) {\n    options = {};\n  }\n  const positions = options.positions;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions)) {\n    throw new DeveloperError(\"options.positions is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const length = positions.length;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  let height = options.height ?? 0;\n  const hasHeightArray = Array.isArray(height);\n\n  if (length < 1) {\n    return [];\n  } else if (length === 1) {\n    const p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst);\n    height = hasHeightArray ? height[0] : height;\n    if (height !== 0) {\n      const n = ellipsoid.geodeticSurfaceNormal(p, cartesian);\n      Cartesian3.multiplyByScalar(n, height, n);\n      Cartesian3.add(p, n, p);\n    }\n\n    return [p.x, p.y, p.z];\n  }\n\n  let minDistance = options.minDistance;\n  if (!defined(minDistance)) {\n    const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n    minDistance = CesiumMath.chordLength(granularity, ellipsoid.maximumRadius);\n  }\n\n  let numPoints = 0;\n  let i;\n\n  for (i = 0; i < length - 1; i++) {\n    numPoints += PolylinePipeline.numberOfPoints(\n      positions[i],\n      positions[i + 1],\n      minDistance,\n    );\n  }\n\n  const arrayLength = (numPoints + 1) * 3;\n  const newPositions = new Array(arrayLength);\n  let offset = 0;\n\n  for (i = 0; i < length - 1; i++) {\n    const p0 = positions[i];\n    const p1 = positions[i + 1];\n\n    const h0 = hasHeightArray ? height[i] : height;\n    const h1 = hasHeightArray ? height[i + 1] : height;\n\n    offset = generateCartesianArc(\n      p0,\n      p1,\n      minDistance,\n      ellipsoid,\n      h0,\n      h1,\n      newPositions,\n      offset,\n    );\n  }\n\n  subdivideHeightsScratchArray.length = 0;\n\n  const lastPoint = positions[length - 1];\n  const carto = ellipsoid.cartesianToCartographic(lastPoint, carto1);\n  carto.height = hasHeightArray ? height[length - 1] : height;\n  const cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n  Cartesian3.pack(cart, newPositions, arrayLength - 3);\n\n  return newPositions;\n};\n\nconst scratchCartographic0 = new Cartographic();\nconst scratchCartographic1 = new Cartographic();\n\n/**\n * Subdivides polyline and raises all points to the specified height using Rhumb lines.  Returns an array of numbers to represent the positions.\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {number|number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid on which the positions lie.\n * @returns {number[]} A new array of positions of type {number} that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * const positions = Cesium.Cartesian3.fromDegreesArray([\n *   -105.0, 40.0,\n *   -100.0, 38.0,\n *   -105.0, 35.0,\n *   -100.0, 32.0\n * ]);\n * const surfacePositions = Cesium.PolylinePipeline.generateRhumbArc({\n *   positons: positions\n * });\n */\nPolylinePipeline.generateRhumbArc = function (options) {\n  if (!defined(options)) {\n    options = {};\n  }\n  const positions = options.positions;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions)) {\n    throw new DeveloperError(\"options.positions is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const length = positions.length;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  let height = options.height ?? 0;\n  const hasHeightArray = Array.isArray(height);\n\n  if (length < 1) {\n    return [];\n  } else if (length === 1) {\n    const p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst);\n    height = hasHeightArray ? height[0] : height;\n    if (height !== 0) {\n      const n = ellipsoid.geodeticSurfaceNormal(p, cartesian);\n      Cartesian3.multiplyByScalar(n, height, n);\n      Cartesian3.add(p, n, p);\n    }\n\n    return [p.x, p.y, p.z];\n  }\n\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n\n  let numPoints = 0;\n  let i;\n\n  let c0 = ellipsoid.cartesianToCartographic(\n    positions[0],\n    scratchCartographic0,\n  );\n  let c1;\n  for (i = 0; i < length - 1; i++) {\n    c1 = ellipsoid.cartesianToCartographic(\n      positions[i + 1],\n      scratchCartographic1,\n    );\n    numPoints += PolylinePipeline.numberOfPointsRhumbLine(c0, c1, granularity);\n    c0 = Cartographic.clone(c1, scratchCartographic0);\n  }\n\n  const arrayLength = (numPoints + 1) * 3;\n  const newPositions = new Array(arrayLength);\n  let offset = 0;\n\n  for (i = 0; i < length - 1; i++) {\n    const p0 = positions[i];\n    const p1 = positions[i + 1];\n\n    const h0 = hasHeightArray ? height[i] : height;\n    const h1 = hasHeightArray ? height[i + 1] : height;\n\n    offset = generateCartesianRhumbArc(\n      p0,\n      p1,\n      granularity,\n      ellipsoid,\n      h0,\n      h1,\n      newPositions,\n      offset,\n    );\n  }\n\n  subdivideHeightsScratchArray.length = 0;\n\n  const lastPoint = positions[length - 1];\n  const carto = ellipsoid.cartesianToCartographic(lastPoint, carto1);\n  carto.height = hasHeightArray ? height[length - 1] : height;\n  const cart = ellipsoid.cartographicToCartesian(carto, cartesian);\n  Cartesian3.pack(cart, newPositions, arrayLength - 3);\n\n  return newPositions;\n};\n\n/**\n * Subdivides polyline and raises all points to the specified height. Returns an array of new {Cartesian3} positions.\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {number|number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid on which the positions lie.\n * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * const positions = Cesium.Cartesian3.fromDegreesArray([\n *   -105.0, 40.0,\n *   -100.0, 38.0,\n *   -105.0, 35.0,\n *   -100.0, 32.0\n * ]);\n * const surfacePositions = Cesium.PolylinePipeline.generateCartesianArc({\n *   positons: positions\n * });\n */\nPolylinePipeline.generateCartesianArc = function (options) {\n  const numberArray = PolylinePipeline.generateArc(options);\n  const size = numberArray.length / 3;\n  const newPositions = new Array(size);\n  for (let i = 0; i < size; i++) {\n    newPositions[i] = Cartesian3.unpack(numberArray, i * 3);\n  }\n  return newPositions;\n};\n\n/**\n * Subdivides polyline and raises all points to the specified height using Rhumb Lines. Returns an array of new {Cartesian3} positions.\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\n * @param {number|number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\n * @param {number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid on which the positions lie.\n * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid.\n *\n * @example\n * const positions = Cesium.Cartesian3.fromDegreesArray([\n *   -105.0, 40.0,\n *   -100.0, 38.0,\n *   -105.0, 35.0,\n *   -100.0, 32.0\n * ]);\n * const surfacePositions = Cesium.PolylinePipeline.generateCartesianRhumbArc({\n *   positons: positions\n * });\n */\nPolylinePipeline.generateCartesianRhumbArc = function (options) {\n  const numberArray = PolylinePipeline.generateRhumbArc(options);\n  const size = numberArray.length / 3;\n  const newPositions = new Array(size);\n  for (let i = 0; i < size; i++) {\n    newPositions[i] = Cartesian3.unpack(numberArray, i * 3);\n  }\n  return newPositions;\n};\nexport default PolylinePipeline;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport oneTimeWarning from \"./oneTimeWarning.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nfunction computeAttributes(\n  combinedPositions,\n  shape,\n  boundingRectangle,\n  vertexFormat,\n) {\n  const attributes = new GeometryAttributes();\n  if (vertexFormat.position) {\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: combinedPositions,\n    });\n  }\n  const shapeLength = shape.length;\n  const vertexCount = combinedPositions.length / 3;\n  const length = (vertexCount - shapeLength * 2) / (shapeLength * 2);\n  const firstEndIndices = PolygonPipeline.triangulate(shape);\n\n  const indicesCount =\n    (length - 1) * shapeLength * 6 + firstEndIndices.length * 2;\n  const indices = IndexDatatype.createTypedArray(vertexCount, indicesCount);\n  let i, j;\n  let ll, ul, ur, lr;\n  const offset = shapeLength * 2;\n  let index = 0;\n  for (i = 0; i < length - 1; i++) {\n    for (j = 0; j < shapeLength - 1; j++) {\n      ll = j * 2 + i * shapeLength * 2;\n      lr = ll + offset;\n      ul = ll + 1;\n      ur = ul + offset;\n\n      indices[index++] = ul;\n      indices[index++] = ll;\n      indices[index++] = ur;\n      indices[index++] = ur;\n      indices[index++] = ll;\n      indices[index++] = lr;\n    }\n    ll = shapeLength * 2 - 2 + i * shapeLength * 2;\n    ul = ll + 1;\n    ur = ul + offset;\n    lr = ll + offset;\n\n    indices[index++] = ul;\n    indices[index++] = ll;\n    indices[index++] = ur;\n    indices[index++] = ur;\n    indices[index++] = ll;\n    indices[index++] = lr;\n  }\n\n  if (vertexFormat.st || vertexFormat.tangent || vertexFormat.bitangent) {\n    // st required for tangent/bitangent calculation\n    const st = new Float32Array(vertexCount * 2);\n    const lengthSt = 1 / (length - 1);\n    const heightSt = 1 / boundingRectangle.height;\n    const heightOffset = boundingRectangle.height / 2;\n    let s, t;\n    let stindex = 0;\n    for (i = 0; i < length; i++) {\n      s = i * lengthSt;\n      t = heightSt * (shape[0].y + heightOffset);\n      st[stindex++] = s;\n      st[stindex++] = t;\n      for (j = 1; j < shapeLength; j++) {\n        t = heightSt * (shape[j].y + heightOffset);\n        st[stindex++] = s;\n        st[stindex++] = t;\n        st[stindex++] = s;\n        st[stindex++] = t;\n      }\n      t = heightSt * (shape[0].y + heightOffset);\n      st[stindex++] = s;\n      st[stindex++] = t;\n    }\n    for (j = 0; j < shapeLength; j++) {\n      s = 0;\n      t = heightSt * (shape[j].y + heightOffset);\n      st[stindex++] = s;\n      st[stindex++] = t;\n    }\n    for (j = 0; j < shapeLength; j++) {\n      s = (length - 1) * lengthSt;\n      t = heightSt * (shape[j].y + heightOffset);\n      st[stindex++] = s;\n      st[stindex++] = t;\n    }\n\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: new Float32Array(st),\n    });\n  }\n\n  const endOffset = vertexCount - shapeLength * 2;\n  for (i = 0; i < firstEndIndices.length; i += 3) {\n    const v0 = firstEndIndices[i] + endOffset;\n    const v1 = firstEndIndices[i + 1] + endOffset;\n    const v2 = firstEndIndices[i + 2] + endOffset;\n\n    indices[index++] = v0;\n    indices[index++] = v1;\n    indices[index++] = v2;\n    indices[index++] = v2 + shapeLength;\n    indices[index++] = v1 + shapeLength;\n    indices[index++] = v0 + shapeLength;\n  }\n\n  let geometry = new Geometry({\n    attributes: attributes,\n    indices: indices,\n    boundingSphere: BoundingSphere.fromVertices(combinedPositions),\n    primitiveType: PrimitiveType.TRIANGLES,\n  });\n\n  if (vertexFormat.normal) {\n    geometry = GeometryPipeline.computeNormal(geometry);\n  }\n\n  if (vertexFormat.tangent || vertexFormat.bitangent) {\n    try {\n      geometry = GeometryPipeline.computeTangentAndBitangent(geometry);\n    } catch (e) {\n      oneTimeWarning(\n        \"polyline-volume-tangent-bitangent\",\n        \"Unable to compute tangents and bitangents for polyline volume geometry\",\n      );\n      //TODO https://github.com/CesiumGS/cesium/issues/3609\n    }\n\n    if (!vertexFormat.tangent) {\n      geometry.attributes.tangent = undefined;\n    }\n    if (!vertexFormat.bitangent) {\n      geometry.attributes.bitangent = undefined;\n    }\n    if (!vertexFormat.st) {\n      geometry.attributes.st = undefined;\n    }\n  }\n\n  return geometry;\n}\n\n/**\n * A description of a polyline with a volume (a 2D shape extruded along a polyline).\n *\n * @alias PolylineVolumeGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.polylinePositions An array of {@link Cartesian3} positions that define the center of the polyline volume.\n * @param {Cartesian2[]} options.shapePositions An array of {@link Cartesian2} positions that define the shape to be extruded along the polyline\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see PolylineVolumeGeometry#createGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=polyline-volume|Cesium Sandcastle Polyline Volume Demo}\n *\n * @example\n * function computeCircle(radius) {\n *   const positions = [];\n *   for (let i = 0; i < 360; i++) {\n *     const radians = Cesium.Math.toRadians(i);\n *     positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));\n *   }\n *   return positions;\n * }\n *\n * const volume = new Cesium.PolylineVolumeGeometry({\n *   vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\n *   polylinePositions : Cesium.Cartesian3.fromDegreesArray([\n *     -72.0, 40.0,\n *     -70.0, 35.0\n *   ]),\n *   shapePositions : computeCircle(100000.0)\n * });\n */\nfunction PolylineVolumeGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.polylinePositions;\n  const shape = options.shapePositions;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions)) {\n    throw new DeveloperError(\"options.polylinePositions is required.\");\n  }\n  if (!defined(shape)) {\n    throw new DeveloperError(\"options.shapePositions is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._positions = positions;\n  this._shape = shape;\n  this._ellipsoid = Ellipsoid.clone(options.ellipsoid ?? Ellipsoid.default);\n  this._cornerType = options.cornerType ?? CornerType.ROUNDED;\n  this._vertexFormat = VertexFormat.clone(\n    options.vertexFormat ?? VertexFormat.DEFAULT,\n  );\n  this._granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  this._workerName = \"createPolylineVolumeGeometry\";\n\n  let numComponents = 1 + positions.length * Cartesian3.packedLength;\n  numComponents += 1 + shape.length * Cartesian2.packedLength;\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 2;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolylineVolumeGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nPolylineVolumeGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  const positions = value._positions;\n  let length = positions.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  const shape = value._shape;\n  length = shape.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n    Cartesian2.pack(shape[i], array, startingIndex);\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._cornerType;\n  array[startingIndex] = value._granularity;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  polylinePositions: undefined,\n  shapePositions: undefined,\n  ellipsoid: scratchEllipsoid,\n  vertexFormat: scratchVertexFormat,\n  cornerType: undefined,\n  granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolylineVolumeGeometry} [result] The object into which to store the result.\n * @returns {PolylineVolumeGeometry} The modified result parameter or a new PolylineVolumeGeometry instance if one was not provided.\n */\nPolylineVolumeGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  let length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  length = array[startingIndex++];\n  const shape = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n    shape[i] = Cartesian2.unpack(array, startingIndex);\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const cornerType = array[startingIndex++];\n  const granularity = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.polylinePositions = positions;\n    scratchOptions.shapePositions = shape;\n    scratchOptions.cornerType = cornerType;\n    scratchOptions.granularity = granularity;\n    return new PolylineVolumeGeometry(scratchOptions);\n  }\n\n  result._positions = positions;\n  result._shape = shape;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._cornerType = cornerType;\n  result._granularity = granularity;\n\n  return result;\n};\n\nconst brScratch = new BoundingRectangle();\n\n/**\n * Computes the geometric representation of a polyline with a volume, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolylineVolumeGeometry} polylineVolumeGeometry A description of the polyline volume.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolylineVolumeGeometry.createGeometry = function (polylineVolumeGeometry) {\n  const positions = polylineVolumeGeometry._positions;\n  const cleanPositions = arrayRemoveDuplicates(\n    positions,\n    Cartesian3.equalsEpsilon,\n  );\n  let shape2D = polylineVolumeGeometry._shape;\n  shape2D = PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D);\n\n  if (cleanPositions.length < 2 || shape2D.length < 3) {\n    return undefined;\n  }\n\n  if (\n    PolygonPipeline.computeWindingOrder2D(shape2D) === WindingOrder.CLOCKWISE\n  ) {\n    shape2D.reverse();\n  }\n  const boundingRectangle = BoundingRectangle.fromPoints(shape2D, brScratch);\n\n  const computedPositions = PolylineVolumeGeometryLibrary.computePositions(\n    cleanPositions,\n    shape2D,\n    boundingRectangle,\n    polylineVolumeGeometry,\n    true,\n  );\n  return computeAttributes(\n    computedPositions,\n    shape2D,\n    boundingRectangle,\n    polylineVolumeGeometry._vertexFormat,\n  );\n};\nexport default PolylineVolumeGeometry;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport CornerType from \"./CornerType.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Transforms from \"./Transforms.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\n\nconst scratch2Array = [new Cartesian3(), new Cartesian3()];\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\nconst scratchCartesian4 = new Cartesian3();\nconst scratchCartesian5 = new Cartesian3();\nconst scratchCartesian6 = new Cartesian3();\nconst scratchCartesian7 = new Cartesian3();\nconst scratchCartesian8 = new Cartesian3();\nconst scratchCartesian9 = new Cartesian3();\n\nconst scratch1 = new Cartesian3();\nconst scratch2 = new Cartesian3();\n\n/**\n * @private\n */\nconst PolylineVolumeGeometryLibrary = {};\n\nlet cartographic = new Cartographic();\nfunction scaleToSurface(positions, ellipsoid) {\n  const heights = new Array(positions.length);\n  for (let i = 0; i < positions.length; i++) {\n    const pos = positions[i];\n    cartographic = ellipsoid.cartesianToCartographic(pos, cartographic);\n    heights[i] = cartographic.height;\n    positions[i] = ellipsoid.scaleToGeodeticSurface(pos, pos);\n  }\n  return heights;\n}\n\nfunction subdivideHeights(points, h0, h1, granularity) {\n  const p0 = points[0];\n  const p1 = points[1];\n  const angleBetween = Cartesian3.angleBetween(p0, p1);\n  const numPoints = Math.ceil(angleBetween / granularity);\n  const heights = new Array(numPoints);\n  let i;\n  if (h0 === h1) {\n    for (i = 0; i < numPoints; i++) {\n      heights[i] = h0;\n    }\n    heights.push(h1);\n    return heights;\n  }\n\n  const dHeight = h1 - h0;\n  const heightPerVertex = dHeight / numPoints;\n\n  for (i = 1; i < numPoints; i++) {\n    const h = h0 + i * heightPerVertex;\n    heights[i] = h;\n  }\n\n  heights[0] = h0;\n  heights.push(h1);\n  return heights;\n}\n\nconst nextScratch = new Cartesian3();\nconst prevScratch = new Cartesian3();\n\nfunction computeRotationAngle(start, end, position, ellipsoid) {\n  const tangentPlane = new EllipsoidTangentPlane(position, ellipsoid);\n  const next = tangentPlane.projectPointOntoPlane(\n    Cartesian3.add(position, start, nextScratch),\n    nextScratch,\n  );\n  const prev = tangentPlane.projectPointOntoPlane(\n    Cartesian3.add(position, end, prevScratch),\n    prevScratch,\n  );\n  const angle = Cartesian2.angleBetween(next, prev);\n\n  return prev.x * next.y - prev.y * next.x >= 0.0 ? -angle : angle;\n}\n\nconst negativeX = new Cartesian3(-1, 0, 0);\nlet transform = new Matrix4();\nconst translation = new Matrix4();\nlet rotationZ = new Matrix3();\nconst scaleMatrix = Matrix3.IDENTITY.clone();\nconst westScratch = new Cartesian3();\nconst finalPosScratch = new Cartesian4();\nconst heightCartesian = new Cartesian3();\nfunction addPosition(\n  center,\n  left,\n  shape,\n  finalPositions,\n  ellipsoid,\n  height,\n  xScalar,\n  repeat,\n) {\n  let west = westScratch;\n  let finalPosition = finalPosScratch;\n  transform = Transforms.eastNorthUpToFixedFrame(center, ellipsoid, transform);\n\n  west = Matrix4.multiplyByPointAsVector(transform, negativeX, west);\n  west = Cartesian3.normalize(west, west);\n  const angle = computeRotationAngle(west, left, center, ellipsoid);\n  rotationZ = Matrix3.fromRotationZ(angle, rotationZ);\n\n  heightCartesian.z = height;\n  transform = Matrix4.multiplyTransformation(\n    transform,\n    Matrix4.fromRotationTranslation(rotationZ, heightCartesian, translation),\n    transform,\n  );\n  const scale = scaleMatrix;\n  scale[0] = xScalar;\n\n  for (let j = 0; j < repeat; j++) {\n    for (let i = 0; i < shape.length; i += 3) {\n      finalPosition = Cartesian3.fromArray(shape, i, finalPosition);\n      finalPosition = Matrix3.multiplyByVector(\n        scale,\n        finalPosition,\n        finalPosition,\n      );\n      finalPosition = Matrix4.multiplyByPoint(\n        transform,\n        finalPosition,\n        finalPosition,\n      );\n      finalPositions.push(finalPosition.x, finalPosition.y, finalPosition.z);\n    }\n  }\n\n  return finalPositions;\n}\n\nconst centerScratch = new Cartesian3();\nfunction addPositions(\n  centers,\n  left,\n  shape,\n  finalPositions,\n  ellipsoid,\n  heights,\n  xScalar,\n) {\n  for (let i = 0; i < centers.length; i += 3) {\n    const center = Cartesian3.fromArray(centers, i, centerScratch);\n    finalPositions = addPosition(\n      center,\n      left,\n      shape,\n      finalPositions,\n      ellipsoid,\n      heights[i / 3],\n      xScalar,\n      1,\n    );\n  }\n  return finalPositions;\n}\n\nfunction convertShapeTo3DDuplicate(shape2D, boundingRectangle) {\n  //orientate 2D shape to XZ plane center at (0, 0, 0), duplicate points\n  const length = shape2D.length;\n  const shape = new Array(length * 6);\n  let index = 0;\n  const xOffset = boundingRectangle.x + boundingRectangle.width / 2;\n  const yOffset = boundingRectangle.y + boundingRectangle.height / 2;\n\n  let point = shape2D[0];\n  shape[index++] = point.x - xOffset;\n  shape[index++] = 0.0;\n  shape[index++] = point.y - yOffset;\n  for (let i = 1; i < length; i++) {\n    point = shape2D[i];\n    const x = point.x - xOffset;\n    const z = point.y - yOffset;\n    shape[index++] = x;\n    shape[index++] = 0.0;\n    shape[index++] = z;\n\n    shape[index++] = x;\n    shape[index++] = 0.0;\n    shape[index++] = z;\n  }\n  point = shape2D[0];\n  shape[index++] = point.x - xOffset;\n  shape[index++] = 0.0;\n  shape[index++] = point.y - yOffset;\n\n  return shape;\n}\n\nfunction convertShapeTo3D(shape2D, boundingRectangle) {\n  //orientate 2D shape to XZ plane center at (0, 0, 0)\n  const length = shape2D.length;\n  const shape = new Array(length * 3);\n  let index = 0;\n  const xOffset = boundingRectangle.x + boundingRectangle.width / 2;\n  const yOffset = boundingRectangle.y + boundingRectangle.height / 2;\n\n  for (let i = 0; i < length; i++) {\n    shape[index++] = shape2D[i].x - xOffset;\n    shape[index++] = 0;\n    shape[index++] = shape2D[i].y - yOffset;\n  }\n\n  return shape;\n}\n\nconst quaterion = new Quaternion();\nconst startPointScratch = new Cartesian3();\nconst rotMatrix = new Matrix3();\nfunction computeRoundCorner(\n  pivot,\n  startPoint,\n  endPoint,\n  cornerType,\n  leftIsOutside,\n  ellipsoid,\n  finalPositions,\n  shape,\n  height,\n  duplicatePoints,\n) {\n  const angle = Cartesian3.angleBetween(\n    Cartesian3.subtract(startPoint, pivot, scratch1),\n    Cartesian3.subtract(endPoint, pivot, scratch2),\n  );\n  const granularity =\n    cornerType === CornerType.BEVELED\n      ? 0\n      : Math.ceil(angle / CesiumMath.toRadians(5));\n\n  let m;\n  if (leftIsOutside) {\n    m = Matrix3.fromQuaternion(\n      Quaternion.fromAxisAngle(\n        Cartesian3.negate(pivot, scratch1),\n        angle / (granularity + 1),\n        quaterion,\n      ),\n      rotMatrix,\n    );\n  } else {\n    m = Matrix3.fromQuaternion(\n      Quaternion.fromAxisAngle(pivot, angle / (granularity + 1), quaterion),\n      rotMatrix,\n    );\n  }\n\n  let left;\n  let surfacePoint;\n  startPoint = Cartesian3.clone(startPoint, startPointScratch);\n  if (granularity > 0) {\n    const repeat = duplicatePoints ? 2 : 1;\n    for (let i = 0; i < granularity; i++) {\n      startPoint = Matrix3.multiplyByVector(m, startPoint, startPoint);\n      left = Cartesian3.subtract(startPoint, pivot, scratch1);\n      left = Cartesian3.normalize(left, left);\n      if (!leftIsOutside) {\n        left = Cartesian3.negate(left, left);\n      }\n      surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2);\n      finalPositions = addPosition(\n        surfacePoint,\n        left,\n        shape,\n        finalPositions,\n        ellipsoid,\n        height,\n        1,\n        repeat,\n      );\n    }\n  } else {\n    left = Cartesian3.subtract(startPoint, pivot, scratch1);\n    left = Cartesian3.normalize(left, left);\n    if (!leftIsOutside) {\n      left = Cartesian3.negate(left, left);\n    }\n    surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2);\n    finalPositions = addPosition(\n      surfacePoint,\n      left,\n      shape,\n      finalPositions,\n      ellipsoid,\n      height,\n      1,\n      1,\n    );\n\n    endPoint = Cartesian3.clone(endPoint, startPointScratch);\n    left = Cartesian3.subtract(endPoint, pivot, scratch1);\n    left = Cartesian3.normalize(left, left);\n    if (!leftIsOutside) {\n      left = Cartesian3.negate(left, left);\n    }\n    surfacePoint = ellipsoid.scaleToGeodeticSurface(endPoint, scratch2);\n    finalPositions = addPosition(\n      surfacePoint,\n      left,\n      shape,\n      finalPositions,\n      ellipsoid,\n      height,\n      1,\n      1,\n    );\n  }\n\n  return finalPositions;\n}\n\nPolylineVolumeGeometryLibrary.removeDuplicatesFromShape = function (\n  shapePositions,\n) {\n  const length = shapePositions.length;\n  const cleanedPositions = [];\n  for (let i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) {\n    const v0 = shapePositions[i0];\n    const v1 = shapePositions[i1];\n\n    if (!Cartesian2.equals(v0, v1)) {\n      cleanedPositions.push(v1); // Shallow copy!\n    }\n  }\n\n  return cleanedPositions;\n};\n\nPolylineVolumeGeometryLibrary.angleIsGreaterThanPi = function (\n  forward,\n  backward,\n  position,\n  ellipsoid,\n) {\n  const tangentPlane = new EllipsoidTangentPlane(position, ellipsoid);\n  const next = tangentPlane.projectPointOntoPlane(\n    Cartesian3.add(position, forward, nextScratch),\n    nextScratch,\n  );\n  const prev = tangentPlane.projectPointOntoPlane(\n    Cartesian3.add(position, backward, prevScratch),\n    prevScratch,\n  );\n\n  return prev.x * next.y - prev.y * next.x >= 0.0;\n};\n\nconst scratchForwardProjection = new Cartesian3();\nconst scratchBackwardProjection = new Cartesian3();\n\nPolylineVolumeGeometryLibrary.computePositions = function (\n  positions,\n  shape2D,\n  boundingRectangle,\n  geometry,\n  duplicatePoints,\n) {\n  const ellipsoid = geometry._ellipsoid;\n  const heights = scaleToSurface(positions, ellipsoid);\n  const granularity = geometry._granularity;\n  const cornerType = geometry._cornerType;\n  const shapeForSides = duplicatePoints\n    ? convertShapeTo3DDuplicate(shape2D, boundingRectangle)\n    : convertShapeTo3D(shape2D, boundingRectangle);\n  const shapeForEnds = duplicatePoints\n    ? convertShapeTo3D(shape2D, boundingRectangle)\n    : undefined;\n  const heightOffset = boundingRectangle.height / 2;\n  const width = boundingRectangle.width / 2;\n  let length = positions.length;\n  let finalPositions = [];\n  let ends = duplicatePoints ? [] : undefined;\n\n  let forward = scratchCartesian1;\n  let backward = scratchCartesian2;\n  let cornerDirection = scratchCartesian3;\n  let surfaceNormal = scratchCartesian4;\n  let pivot = scratchCartesian5;\n  let start = scratchCartesian6;\n  let end = scratchCartesian7;\n  let left = scratchCartesian8;\n  let previousPosition = scratchCartesian9;\n\n  let position = positions[0];\n  let nextPosition = positions[1];\n  surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal);\n  forward = Cartesian3.subtract(nextPosition, position, forward);\n  forward = Cartesian3.normalize(forward, forward);\n  left = Cartesian3.cross(surfaceNormal, forward, left);\n  left = Cartesian3.normalize(left, left);\n  let h0 = heights[0];\n  let h1 = heights[1];\n  if (duplicatePoints) {\n    ends = addPosition(\n      position,\n      left,\n      shapeForEnds,\n      ends,\n      ellipsoid,\n      h0 + heightOffset,\n      1,\n      1,\n    );\n  }\n  previousPosition = Cartesian3.clone(position, previousPosition);\n  position = nextPosition;\n  backward = Cartesian3.negate(forward, backward);\n  let subdividedHeights;\n  let subdividedPositions;\n  for (let i = 1; i < length - 1; i++) {\n    const repeat = duplicatePoints ? 2 : 1;\n    nextPosition = positions[i + 1];\n    if (position.equals(nextPosition)) {\n      oneTimeWarning(\n        \"Positions are too close and are considered equivalent with rounding error.\",\n      );\n      continue;\n    }\n    forward = Cartesian3.subtract(nextPosition, position, forward);\n    forward = Cartesian3.normalize(forward, forward);\n    surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal);\n\n    const forwardProjection = Cartesian3.multiplyByScalar(\n      surfaceNormal,\n      Cartesian3.dot(forward, surfaceNormal),\n      scratchForwardProjection,\n    );\n    Cartesian3.subtract(forward, forwardProjection, forwardProjection);\n    Cartesian3.normalize(forwardProjection, forwardProjection);\n\n    const backwardProjection = Cartesian3.multiplyByScalar(\n      surfaceNormal,\n      Cartesian3.dot(backward, surfaceNormal),\n      scratchBackwardProjection,\n    );\n    Cartesian3.subtract(backward, backwardProjection, backwardProjection);\n    Cartesian3.normalize(backwardProjection, backwardProjection);\n\n    const doCorner = !CesiumMath.equalsEpsilon(\n      Math.abs(Cartesian3.dot(forwardProjection, backwardProjection)),\n      1.0,\n      CesiumMath.EPSILON7,\n    );\n\n    if (doCorner) {\n      cornerDirection = Cartesian3.add(forward, backward, cornerDirection);\n      cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\n      cornerDirection = Cartesian3.cross(\n        cornerDirection,\n        surfaceNormal,\n        cornerDirection,\n      );\n      cornerDirection = Cartesian3.cross(\n        surfaceNormal,\n        cornerDirection,\n        cornerDirection,\n      );\n      cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\n      const scalar =\n        1 /\n        Math.max(\n          0.25,\n          Cartesian3.magnitude(\n            Cartesian3.cross(cornerDirection, backward, scratch1),\n          ),\n        );\n      const leftIsOutside = PolylineVolumeGeometryLibrary.angleIsGreaterThanPi(\n        forward,\n        backward,\n        position,\n        ellipsoid,\n      );\n      if (leftIsOutside) {\n        pivot = Cartesian3.add(\n          position,\n          Cartesian3.multiplyByScalar(\n            cornerDirection,\n            scalar * width,\n            cornerDirection,\n          ),\n          pivot,\n        );\n        start = Cartesian3.add(\n          pivot,\n          Cartesian3.multiplyByScalar(left, width, start),\n          start,\n        );\n        scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\n        scratch2Array[1] = Cartesian3.clone(start, scratch2Array[1]);\n        subdividedHeights = subdivideHeights(\n          scratch2Array,\n          h0 + heightOffset,\n          h1 + heightOffset,\n          granularity,\n        );\n        subdividedPositions = PolylinePipeline.generateArc({\n          positions: scratch2Array,\n          granularity: granularity,\n          ellipsoid: ellipsoid,\n        });\n        finalPositions = addPositions(\n          subdividedPositions,\n          left,\n          shapeForSides,\n          finalPositions,\n          ellipsoid,\n          subdividedHeights,\n          1,\n        );\n        left = Cartesian3.cross(surfaceNormal, forward, left);\n        left = Cartesian3.normalize(left, left);\n        end = Cartesian3.add(\n          pivot,\n          Cartesian3.multiplyByScalar(left, width, end),\n          end,\n        );\n        if (\n          cornerType === CornerType.ROUNDED ||\n          cornerType === CornerType.BEVELED\n        ) {\n          computeRoundCorner(\n            pivot,\n            start,\n            end,\n            cornerType,\n            leftIsOutside,\n            ellipsoid,\n            finalPositions,\n            shapeForSides,\n            h1 + heightOffset,\n            duplicatePoints,\n          );\n        } else {\n          cornerDirection = Cartesian3.negate(cornerDirection, cornerDirection);\n          finalPositions = addPosition(\n            position,\n            cornerDirection,\n            shapeForSides,\n            finalPositions,\n            ellipsoid,\n            h1 + heightOffset,\n            scalar,\n            repeat,\n          );\n        }\n        previousPosition = Cartesian3.clone(end, previousPosition);\n      } else {\n        pivot = Cartesian3.add(\n          position,\n          Cartesian3.multiplyByScalar(\n            cornerDirection,\n            scalar * width,\n            cornerDirection,\n          ),\n          pivot,\n        );\n        start = Cartesian3.add(\n          pivot,\n          Cartesian3.multiplyByScalar(left, -width, start),\n          start,\n        );\n        scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\n        scratch2Array[1] = Cartesian3.clone(start, scratch2Array[1]);\n        subdividedHeights = subdivideHeights(\n          scratch2Array,\n          h0 + heightOffset,\n          h1 + heightOffset,\n          granularity,\n        );\n        subdividedPositions = PolylinePipeline.generateArc({\n          positions: scratch2Array,\n          granularity: granularity,\n          ellipsoid: ellipsoid,\n        });\n        finalPositions = addPositions(\n          subdividedPositions,\n          left,\n          shapeForSides,\n          finalPositions,\n          ellipsoid,\n          subdividedHeights,\n          1,\n        );\n        left = Cartesian3.cross(surfaceNormal, forward, left);\n        left = Cartesian3.normalize(left, left);\n        end = Cartesian3.add(\n          pivot,\n          Cartesian3.multiplyByScalar(left, -width, end),\n          end,\n        );\n        if (\n          cornerType === CornerType.ROUNDED ||\n          cornerType === CornerType.BEVELED\n        ) {\n          computeRoundCorner(\n            pivot,\n            start,\n            end,\n            cornerType,\n            leftIsOutside,\n            ellipsoid,\n            finalPositions,\n            shapeForSides,\n            h1 + heightOffset,\n            duplicatePoints,\n          );\n        } else {\n          finalPositions = addPosition(\n            position,\n            cornerDirection,\n            shapeForSides,\n            finalPositions,\n            ellipsoid,\n            h1 + heightOffset,\n            scalar,\n            repeat,\n          );\n        }\n        previousPosition = Cartesian3.clone(end, previousPosition);\n      }\n      backward = Cartesian3.negate(forward, backward);\n    } else {\n      finalPositions = addPosition(\n        previousPosition,\n        left,\n        shapeForSides,\n        finalPositions,\n        ellipsoid,\n        h0 + heightOffset,\n        1,\n        1,\n      );\n      previousPosition = position;\n    }\n    h0 = h1;\n    h1 = heights[i + 1];\n    position = nextPosition;\n  }\n\n  scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\n  scratch2Array[1] = Cartesian3.clone(position, scratch2Array[1]);\n  subdividedHeights = subdivideHeights(\n    scratch2Array,\n    h0 + heightOffset,\n    h1 + heightOffset,\n    granularity,\n  );\n  subdividedPositions = PolylinePipeline.generateArc({\n    positions: scratch2Array,\n    granularity: granularity,\n    ellipsoid: ellipsoid,\n  });\n  finalPositions = addPositions(\n    subdividedPositions,\n    left,\n    shapeForSides,\n    finalPositions,\n    ellipsoid,\n    subdividedHeights,\n    1,\n  );\n  if (duplicatePoints) {\n    ends = addPosition(\n      position,\n      left,\n      shapeForEnds,\n      ends,\n      ellipsoid,\n      h1 + heightOffset,\n      1,\n      1,\n    );\n  }\n\n  length = finalPositions.length;\n  const posLength = duplicatePoints ? length + ends.length : length;\n  const combinedPositions = new Float64Array(posLength);\n  combinedPositions.set(finalPositions);\n  if (duplicatePoints) {\n    combinedPositions.set(ends, length);\n  }\n\n  return combinedPositions;\n};\nexport default PolylineVolumeGeometryLibrary;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport BoundingRectangle from \"./BoundingRectangle.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport CornerType from \"./CornerType.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WindingOrder from \"./WindingOrder.js\";\n\nfunction computeAttributes(positions, shape) {\n  const attributes = new GeometryAttributes();\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: positions,\n  });\n\n  const shapeLength = shape.length;\n  const vertexCount = attributes.position.values.length / 3;\n  const positionLength = positions.length / 3;\n  const shapeCount = positionLength / shapeLength;\n  const indices = IndexDatatype.createTypedArray(\n    vertexCount,\n    2 * shapeLength * (shapeCount + 1),\n  );\n  let i, j;\n  let index = 0;\n  i = 0;\n  let offset = i * shapeLength;\n  for (j = 0; j < shapeLength - 1; j++) {\n    indices[index++] = j + offset;\n    indices[index++] = j + offset + 1;\n  }\n  indices[index++] = shapeLength - 1 + offset;\n  indices[index++] = offset;\n\n  i = shapeCount - 1;\n  offset = i * shapeLength;\n  for (j = 0; j < shapeLength - 1; j++) {\n    indices[index++] = j + offset;\n    indices[index++] = j + offset + 1;\n  }\n  indices[index++] = shapeLength - 1 + offset;\n  indices[index++] = offset;\n\n  for (i = 0; i < shapeCount - 1; i++) {\n    const firstOffset = shapeLength * i;\n    const secondOffset = firstOffset + shapeLength;\n    for (j = 0; j < shapeLength; j++) {\n      indices[index++] = j + firstOffset;\n      indices[index++] = j + secondOffset;\n    }\n  }\n\n  const geometry = new Geometry({\n    attributes: attributes,\n    indices: IndexDatatype.createTypedArray(vertexCount, indices),\n    boundingSphere: BoundingSphere.fromVertices(positions),\n    primitiveType: PrimitiveType.LINES,\n  });\n\n  return geometry;\n}\n\n/**\n * A description of a polyline with a volume (a 2D shape extruded along a polyline).\n *\n * @alias PolylineVolumeOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.polylinePositions An array of positions that define the center of the polyline volume.\n * @param {Cartesian2[]} options.shapePositions An array of positions that define the shape to be extruded along the polyline\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\n *\n * @see PolylineVolumeOutlineGeometry#createGeometry\n *\n * @example\n * function computeCircle(radius) {\n *   const positions = [];\n *   for (let i = 0; i < 360; i++) {\n *     const radians = Cesium.Math.toRadians(i);\n *     positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));\n *   }\n *   return positions;\n * }\n *\n * const volumeOutline = new Cesium.PolylineVolumeOutlineGeometry({\n *   polylinePositions : Cesium.Cartesian3.fromDegreesArray([\n *     -72.0, 40.0,\n *     -70.0, 35.0\n *   ]),\n *   shapePositions : computeCircle(100000.0)\n * });\n */\nfunction PolylineVolumeOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.polylinePositions;\n  const shape = options.shapePositions;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions)) {\n    throw new DeveloperError(\"options.polylinePositions is required.\");\n  }\n  if (!defined(shape)) {\n    throw new DeveloperError(\"options.shapePositions is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._positions = positions;\n  this._shape = shape;\n  this._ellipsoid = Ellipsoid.clone(options.ellipsoid ?? Ellipsoid.default);\n  this._cornerType = options.cornerType ?? CornerType.ROUNDED;\n  this._granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  this._workerName = \"createPolylineVolumeOutlineGeometry\";\n\n  let numComponents = 1 + positions.length * Cartesian3.packedLength;\n  numComponents += 1 + shape.length * Cartesian2.packedLength;\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength = numComponents + Ellipsoid.packedLength + 2;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {PolylineVolumeOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nPolylineVolumeOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  const positions = value._positions;\n  let length = positions.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  const shape = value._shape;\n  length = shape.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n    Cartesian2.pack(shape[i], array, startingIndex);\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  array[startingIndex++] = value._cornerType;\n  array[startingIndex] = value._granularity;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchOptions = {\n  polylinePositions: undefined,\n  shapePositions: undefined,\n  ellipsoid: scratchEllipsoid,\n  height: undefined,\n  cornerType: undefined,\n  granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {PolylineVolumeOutlineGeometry} [result] The object into which to store the result.\n * @returns {PolylineVolumeOutlineGeometry} The modified result parameter or a new PolylineVolumeOutlineGeometry instance if one was not provided.\n */\nPolylineVolumeOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  let length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  length = array[startingIndex++];\n  const shape = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\n    shape[i] = Cartesian2.unpack(array, startingIndex);\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const cornerType = array[startingIndex++];\n  const granularity = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.polylinePositions = positions;\n    scratchOptions.shapePositions = shape;\n    scratchOptions.cornerType = cornerType;\n    scratchOptions.granularity = granularity;\n    return new PolylineVolumeOutlineGeometry(scratchOptions);\n  }\n\n  result._positions = positions;\n  result._shape = shape;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._cornerType = cornerType;\n  result._granularity = granularity;\n\n  return result;\n};\n\nconst brScratch = new BoundingRectangle();\n\n/**\n * Computes the geometric representation of the outline of a polyline with a volume, including its vertices, indices, and a bounding sphere.\n *\n * @param {PolylineVolumeOutlineGeometry} polylineVolumeOutlineGeometry A description of the polyline volume outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nPolylineVolumeOutlineGeometry.createGeometry = function (\n  polylineVolumeOutlineGeometry,\n) {\n  const positions = polylineVolumeOutlineGeometry._positions;\n  const cleanPositions = arrayRemoveDuplicates(\n    positions,\n    Cartesian3.equalsEpsilon,\n  );\n  let shape2D = polylineVolumeOutlineGeometry._shape;\n  shape2D = PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D);\n\n  if (cleanPositions.length < 2 || shape2D.length < 3) {\n    return undefined;\n  }\n\n  if (\n    PolygonPipeline.computeWindingOrder2D(shape2D) === WindingOrder.CLOCKWISE\n  ) {\n    shape2D.reverse();\n  }\n  const boundingRectangle = BoundingRectangle.fromPoints(shape2D, brScratch);\n\n  const computedPositions = PolylineVolumeGeometryLibrary.computePositions(\n    cleanPositions,\n    shape2D,\n    boundingRectangle,\n    polylineVolumeOutlineGeometry,\n    false,\n  );\n  return computeAttributes(computedPositions, shape2D);\n};\nexport default PolylineVolumeOutlineGeometry;\n","import WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * The type of a geometric primitive, i.e., points, lines, and triangles.\n *\n * @enum {number}\n */\nconst PrimitiveType = {\n  /**\n   * Points primitive where each vertex (or index) is a separate point.\n   *\n   * @type {number}\n   * @constant\n   */\n  POINTS: WebGLConstants.POINTS,\n\n  /**\n   * Lines primitive where each two vertices (or indices) is a line segment.  Line segments are not necessarily connected.\n   *\n   * @type {number}\n   * @constant\n   */\n  LINES: WebGLConstants.LINES,\n\n  /**\n   * Line loop primitive where each vertex (or index) after the first connects a line to\n   * the previous vertex, and the last vertex implicitly connects to the first.\n   *\n   * @type {number}\n   * @constant\n   */\n  LINE_LOOP: WebGLConstants.LINE_LOOP,\n\n  /**\n   * Line strip primitive where each vertex (or index) after the first connects a line to the previous vertex.\n   *\n   * @type {number}\n   * @constant\n   */\n  LINE_STRIP: WebGLConstants.LINE_STRIP,\n\n  /**\n   * Triangles primitive where each three vertices (or indices) is a triangle.  Triangles do not necessarily share edges.\n   *\n   * @type {number}\n   * @constant\n   */\n  TRIANGLES: WebGLConstants.TRIANGLES,\n\n  /**\n   * Triangle strip primitive where each vertex (or index) after the first two connect to\n   * the previous two vertices forming a triangle.  For example, this can be used to model a wall.\n   *\n   * @type {number}\n   * @constant\n   */\n  TRIANGLE_STRIP: WebGLConstants.TRIANGLE_STRIP,\n\n  /**\n   * Triangle fan primitive where each vertex (or index) after the first two connect to\n   * the previous vertex and the first vertex forming a triangle.  For example, this can be used\n   * to model a cone or circle.\n   *\n   * @type {number}\n   * @constant\n   */\n  TRIANGLE_FAN: WebGLConstants.TRIANGLE_FAN,\n};\n\n/**\n * @private\n */\nPrimitiveType.isLines = function (primitiveType) {\n  return (\n    primitiveType === PrimitiveType.LINES ||\n    primitiveType === PrimitiveType.LINE_LOOP ||\n    primitiveType === PrimitiveType.LINE_STRIP\n  );\n};\n\n/**\n * @private\n */\nPrimitiveType.isTriangles = function (primitiveType) {\n  return (\n    primitiveType === PrimitiveType.TRIANGLES ||\n    primitiveType === PrimitiveType.TRIANGLE_STRIP ||\n    primitiveType === PrimitiveType.TRIANGLE_FAN\n  );\n};\n\n/**\n * @private\n */\nPrimitiveType.validate = function (primitiveType) {\n  return (\n    primitiveType === PrimitiveType.POINTS ||\n    primitiveType === PrimitiveType.LINES ||\n    primitiveType === PrimitiveType.LINE_LOOP ||\n    primitiveType === PrimitiveType.LINE_STRIP ||\n    primitiveType === PrimitiveType.TRIANGLES ||\n    primitiveType === PrimitiveType.TRIANGLE_STRIP ||\n    primitiveType === PrimitiveType.TRIANGLE_FAN\n  );\n};\n\nexport default Object.freeze(PrimitiveType);\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Base class for proxying requested made by {@link Resource}.\n *\n * @alias Proxy\n * @constructor\n *\n * @see DefaultProxy\n */\nfunction Proxy() {\n  DeveloperError.throwInstantiationError();\n}\n\n/**\n * Get the final URL to use to request a given resource.\n *\n * @param {string} resource The resource to request.\n * @returns {string} proxied resource\n * @function\n */\nProxy.prototype.getURL = DeveloperError.throwInstantiationError;\n\nexport default Proxy;\n","import DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * Defines functions for 2nd order polynomial functions of one variable with only real coefficients.\n *\n * @namespace QuadraticRealPolynomial\n */\nconst QuadraticRealPolynomial = {};\n\n/**\n * Provides the discriminant of the quadratic equation from the supplied coefficients.\n *\n * @param {number} a The coefficient of the 2nd order monomial.\n * @param {number} b The coefficient of the 1st order monomial.\n * @param {number} c The coefficient of the 0th order monomial.\n * @returns {number} The value of the discriminant.\n */\nQuadraticRealPolynomial.computeDiscriminant = function (a, b, c) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof a !== \"number\") {\n    throw new DeveloperError(\"a is a required number.\");\n  }\n  if (typeof b !== \"number\") {\n    throw new DeveloperError(\"b is a required number.\");\n  }\n  if (typeof c !== \"number\") {\n    throw new DeveloperError(\"c is a required number.\");\n  }\n  //>>includeEnd('debug');\n\n  const discriminant = b * b - 4.0 * a * c;\n  return discriminant;\n};\n\nfunction addWithCancellationCheck(left, right, tolerance) {\n  const difference = left + right;\n  if (\n    CesiumMath.sign(left) !== CesiumMath.sign(right) &&\n    Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\n  ) {\n    return 0.0;\n  }\n\n  return difference;\n}\n\n/**\n * Provides the real valued roots of the quadratic polynomial with the provided coefficients.\n *\n * @param {number} a The coefficient of the 2nd order monomial.\n * @param {number} b The coefficient of the 1st order monomial.\n * @param {number} c The coefficient of the 0th order monomial.\n * @returns {number[]} The real valued roots.\n */\nQuadraticRealPolynomial.computeRealRoots = function (a, b, c) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof a !== \"number\") {\n    throw new DeveloperError(\"a is a required number.\");\n  }\n  if (typeof b !== \"number\") {\n    throw new DeveloperError(\"b is a required number.\");\n  }\n  if (typeof c !== \"number\") {\n    throw new DeveloperError(\"c is a required number.\");\n  }\n  //>>includeEnd('debug');\n\n  let ratio;\n  if (a === 0.0) {\n    if (b === 0.0) {\n      // Constant function: c = 0.\n      return [];\n    }\n\n    // Linear function: b * x + c = 0.\n    return [-c / b];\n  } else if (b === 0.0) {\n    if (c === 0.0) {\n      // 2nd order monomial: a * x^2 = 0.\n      return [0.0, 0.0];\n    }\n\n    const cMagnitude = Math.abs(c);\n    const aMagnitude = Math.abs(a);\n\n    if (\n      cMagnitude < aMagnitude &&\n      cMagnitude / aMagnitude < CesiumMath.EPSILON14\n    ) {\n      // c ~= 0.0.\n      // 2nd order monomial: a * x^2 = 0.\n      return [0.0, 0.0];\n    } else if (\n      cMagnitude > aMagnitude &&\n      aMagnitude / cMagnitude < CesiumMath.EPSILON14\n    ) {\n      // a ~= 0.0.\n      // Constant function: c = 0.\n      return [];\n    }\n\n    // a * x^2 + c = 0\n    ratio = -c / a;\n\n    if (ratio < 0.0) {\n      // Both roots are complex.\n      return [];\n    }\n\n    // Both roots are real.\n    const root = Math.sqrt(ratio);\n    return [-root, root];\n  } else if (c === 0.0) {\n    // a * x^2 + b * x = 0\n    ratio = -b / a;\n    if (ratio < 0.0) {\n      return [ratio, 0.0];\n    }\n\n    return [0.0, ratio];\n  }\n\n  // a * x^2 + b * x + c = 0\n  const b2 = b * b;\n  const four_ac = 4.0 * a * c;\n  const radicand = addWithCancellationCheck(b2, -four_ac, CesiumMath.EPSILON14);\n\n  if (radicand < 0.0) {\n    // Both roots are complex.\n    return [];\n  }\n\n  const q =\n    -0.5 *\n    addWithCancellationCheck(\n      b,\n      CesiumMath.sign(b) * Math.sqrt(radicand),\n      CesiumMath.EPSILON14,\n    );\n  if (b > 0.0) {\n    return [q / a, c / q];\n  }\n\n  return [c / q, q / a];\n};\nexport default QuadraticRealPolynomial;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport Intersections2D from \"./Intersections2D.js\";\nimport CesiumMath from \"./Math.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport TerrainData from \"./TerrainData.js\";\nimport TerrainEncoding from \"./TerrainEncoding.js\";\nimport TerrainMesh from \"./TerrainMesh.js\";\n\n/**\n * Terrain data for a single tile where the terrain data is represented as a quantized mesh.  A quantized\n * mesh consists of three vertex attributes, longitude, latitude, and height.  All attributes are expressed\n * as 16-bit values in the range 0 to 32767.  Longitude and latitude are zero at the southwest corner\n * of the tile and 32767 at the northeast corner.  Height is zero at the minimum height in the tile\n * and 32767 at the maximum height in the tile.\n *\n * @alias QuantizedMeshTerrainData\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Uint16Array} options.quantizedVertices The buffer containing the quantized mesh.\n * @param {Uint16Array|Uint32Array} options.indices The indices specifying how the quantized vertices are linked\n *                      together into triangles.  Each three indices specifies one triangle.\n * @param {number} options.minimumHeight The minimum terrain height within the tile, in meters above the ellipsoid.\n * @param {number} options.maximumHeight The maximum terrain height within the tile, in meters above the ellipsoid.\n * @param {BoundingSphere} options.boundingSphere A sphere bounding all of the vertices in the mesh.\n * @param {OrientedBoundingBox} [options.orientedBoundingBox] An OrientedBoundingBox bounding all of the vertices in the mesh.\n * @param {Cartesian3} options.horizonOcclusionPoint The horizon occlusion point of the mesh.  If this point\n *                      is below the horizon, the entire tile is assumed to be below the horizon as well.\n *                      The point is expressed in ellipsoid-scaled coordinates.\n * @param {number[]} options.westIndices The indices of the vertices on the western edge of the tile.\n * @param {number[]} options.southIndices The indices of the vertices on the southern edge of the tile.\n * @param {number[]} options.eastIndices The indices of the vertices on the eastern edge of the tile.\n * @param {number[]} options.northIndices The indices of the vertices on the northern edge of the tile.\n * @param {number} options.westSkirtHeight The height of the skirt to add on the western edge of the tile.\n * @param {number} options.southSkirtHeight The height of the skirt to add on the southern edge of the tile.\n * @param {number} options.eastSkirtHeight The height of the skirt to add on the eastern edge of the tile.\n * @param {number} options.northSkirtHeight The height of the skirt to add on the northern edge of the tile.\n * @param {number} [options.childTileMask=15] A bit mask indicating which of this tile's four children exist.\n *                 If a child's bit is set, geometry will be requested for that tile as well when it\n *                 is needed.  If the bit is cleared, the child tile is not requested and geometry is\n *                 instead upsampled from the parent.  The bit values are as follows:\n *                 <table>\n *                  <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n *                  <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n *                  <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n *                  <tr><td>2</td><td>4</td><td>Northwest</td></tr>\n *                  <tr><td>3</td><td>8</td><td>Northeast</td></tr>\n *                 </table>\n * @param {boolean} [options.createdByUpsampling=false] True if this instance was created by upsampling another instance;\n *                  otherwise, false.\n * @param {Uint8Array} [options.encodedNormals] The buffer containing per vertex normals, encoded using 'oct' encoding\n * @param {Uint8Array} [options.waterMask] The buffer containing the watermask.\n * @param {Credit[]} [options.credits] Array of credits for this tile.\n *\n *\n * @example\n * const data = new Cesium.QuantizedMeshTerrainData({\n *     minimumHeight : -100,\n *     maximumHeight : 2101,\n *     quantizedVertices : new Uint16Array([// order is SW NW SE NE\n *                                          // longitude\n *                                          0, 0, 32767, 32767,\n *                                          // latitude\n *                                          0, 32767, 0, 32767,\n *                                          // heights\n *                                          16384, 0, 32767, 16384]),\n *     indices : new Uint16Array([0, 3, 1,\n *                                0, 2, 3]),\n *     boundingSphere : new Cesium.BoundingSphere(new Cesium.Cartesian3(1.0, 2.0, 3.0), 10000),\n *     orientedBoundingBox : new Cesium.OrientedBoundingBox(new Cesium.Cartesian3(1.0, 2.0, 3.0), Cesium.Matrix3.fromRotationX(Cesium.Math.PI, new Cesium.Matrix3())),\n *     horizonOcclusionPoint : new Cesium.Cartesian3(3.0, 2.0, 1.0),\n *     westIndices : [0, 1],\n *     southIndices : [0, 1],\n *     eastIndices : [2, 3],\n *     northIndices : [1, 3],\n *     westSkirtHeight : 1.0,\n *     southSkirtHeight : 1.0,\n *     eastSkirtHeight : 1.0,\n *     northSkirtHeight : 1.0\n * });\n *\n * @see TerrainData\n * @see HeightmapTerrainData\n * @see GoogleEarthEnterpriseTerrainData\n */\nfunction QuantizedMeshTerrainData(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug)\n  Check.typeOf.object(\"options.quantizedVertices\", options.quantizedVertices);\n  Check.typeOf.object(\"options.indices\", options.indices);\n  Check.typeOf.number(\"options.minimumHeight\", options.minimumHeight);\n  Check.typeOf.number(\"options.maximumHeight\", options.maximumHeight);\n  Check.typeOf.object(\"options.boundingSphere\", options.boundingSphere);\n  Check.typeOf.object(\n    \"options.horizonOcclusionPoint\",\n    options.horizonOcclusionPoint,\n  );\n  Check.typeOf.object(\"options.westIndices\", options.westIndices);\n  Check.typeOf.object(\"options.southIndices\", options.southIndices);\n  Check.typeOf.object(\"options.eastIndices\", options.eastIndices);\n  Check.typeOf.object(\"options.northIndices\", options.northIndices);\n  Check.typeOf.number(\"options.westSkirtHeight\", options.westSkirtHeight);\n  Check.typeOf.number(\"options.southSkirtHeight\", options.southSkirtHeight);\n  Check.typeOf.number(\"options.eastSkirtHeight\", options.eastSkirtHeight);\n  Check.typeOf.number(\"options.northSkirtHeight\", options.northSkirtHeight);\n  //>>includeEnd('debug');\n\n  this._quantizedVertices = options.quantizedVertices;\n  this._encodedNormals = options.encodedNormals;\n  this._indices = options.indices;\n  this._minimumHeight = options.minimumHeight;\n  this._maximumHeight = options.maximumHeight;\n  this._boundingSphere = options.boundingSphere;\n  this._orientedBoundingBox = options.orientedBoundingBox;\n  this._horizonOcclusionPoint = options.horizonOcclusionPoint;\n  this._credits = options.credits;\n\n  const vertexCount = this._quantizedVertices.length / 3;\n  const uValues = (this._uValues = this._quantizedVertices.subarray(\n    0,\n    vertexCount,\n  ));\n  const vValues = (this._vValues = this._quantizedVertices.subarray(\n    vertexCount,\n    2 * vertexCount,\n  ));\n  this._heightValues = this._quantizedVertices.subarray(\n    2 * vertexCount,\n    3 * vertexCount,\n  );\n\n  // We don't assume that we can count on the edge vertices being sorted by u or v.\n  function sortByV(a, b) {\n    return vValues[a] - vValues[b];\n  }\n\n  function sortByU(a, b) {\n    return uValues[a] - uValues[b];\n  }\n\n  this._westIndices = sortIndicesIfNecessary(\n    options.westIndices,\n    sortByV,\n    vertexCount,\n  );\n  this._southIndices = sortIndicesIfNecessary(\n    options.southIndices,\n    sortByU,\n    vertexCount,\n  );\n  this._eastIndices = sortIndicesIfNecessary(\n    options.eastIndices,\n    sortByV,\n    vertexCount,\n  );\n  this._northIndices = sortIndicesIfNecessary(\n    options.northIndices,\n    sortByU,\n    vertexCount,\n  );\n\n  this._westSkirtHeight = options.westSkirtHeight;\n  this._southSkirtHeight = options.southSkirtHeight;\n  this._eastSkirtHeight = options.eastSkirtHeight;\n  this._northSkirtHeight = options.northSkirtHeight;\n\n  this._childTileMask = options.childTileMask ?? 15;\n\n  this._createdByUpsampling = options.createdByUpsampling ?? false;\n  this._waterMask = options.waterMask;\n\n  this._mesh = undefined;\n}\n\nObject.defineProperties(QuantizedMeshTerrainData.prototype, {\n  /**\n   * An array of credits for this tile.\n   * @memberof QuantizedMeshTerrainData.prototype\n   * @type {Credit[]}\n   */\n  credits: {\n    get: function () {\n      return this._credits;\n    },\n  },\n  /**\n   * The water mask included in this terrain data, if any.  A water mask is a rectangular\n   * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n   * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n   * @memberof QuantizedMeshTerrainData.prototype\n   * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement|undefined}\n   */\n  waterMask: {\n    get: function () {\n      return this._waterMask;\n    },\n  },\n\n  childTileMask: {\n    get: function () {\n      return this._childTileMask;\n    },\n  },\n\n  canUpsample: {\n    get: function () {\n      return defined(this._mesh);\n    },\n  },\n});\n\nconst arrayScratch = [];\n\nfunction sortIndicesIfNecessary(indices, sortFunction, vertexCount) {\n  arrayScratch.length = indices.length;\n\n  let needsSort = false;\n  for (let i = 0, len = indices.length; i < len; ++i) {\n    arrayScratch[i] = indices[i];\n    needsSort =\n      needsSort || (i > 0 && sortFunction(indices[i - 1], indices[i]) > 0);\n  }\n\n  if (needsSort) {\n    arrayScratch.sort(sortFunction);\n    return IndexDatatype.createTypedArray(vertexCount, arrayScratch);\n  }\n  return indices;\n}\n\nconst createMeshTaskName = \"createVerticesFromQuantizedTerrainMesh\";\nconst createMeshTaskProcessorNoThrottle = new TaskProcessor(createMeshTaskName);\nconst createMeshTaskProcessorThrottle = new TaskProcessor(\n  createMeshTaskName,\n  TerrainData.maximumAsynchronousTasks,\n);\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n *\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n * @param {boolean} [options.throttle=true] If true, indicates that this operation will need to be retried if too many asynchronous mesh creations are already in progress.\n * @returns {Promise<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n *          asynchronous mesh creations are already in progress and the operation should\n *          be retried later.\n */\nQuantizedMeshTerrainData.prototype.createMesh = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.tilingScheme\", options.tilingScheme);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  Check.typeOf.number(\"options.level\", options.level);\n  //>>includeEnd('debug');\n\n  const tilingScheme = options.tilingScheme;\n  const x = options.x;\n  const y = options.y;\n  const level = options.level;\n  const exaggeration = options.exaggeration ?? 1.0;\n  const exaggerationRelativeHeight = options.exaggerationRelativeHeight ?? 0.0;\n  const throttle = options.throttle ?? true;\n\n  const ellipsoid = tilingScheme.ellipsoid;\n  const rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n\n  const createMeshTaskProcessor = throttle\n    ? createMeshTaskProcessorThrottle\n    : createMeshTaskProcessorNoThrottle;\n\n  const verticesPromise = createMeshTaskProcessor.scheduleTask({\n    minimumHeight: this._minimumHeight,\n    maximumHeight: this._maximumHeight,\n    quantizedVertices: this._quantizedVertices,\n    octEncodedNormals: this._encodedNormals,\n    includeWebMercatorT: true,\n    indices: this._indices,\n    westIndices: this._westIndices,\n    southIndices: this._southIndices,\n    eastIndices: this._eastIndices,\n    northIndices: this._northIndices,\n    westSkirtHeight: this._westSkirtHeight,\n    southSkirtHeight: this._southSkirtHeight,\n    eastSkirtHeight: this._eastSkirtHeight,\n    northSkirtHeight: this._northSkirtHeight,\n    rectangle: rectangle,\n    relativeToCenter: this._boundingSphere.center,\n    ellipsoid: ellipsoid,\n    exaggeration: exaggeration,\n    exaggerationRelativeHeight: exaggerationRelativeHeight,\n  });\n\n  if (!defined(verticesPromise)) {\n    // Postponed\n    return undefined;\n  }\n\n  const that = this;\n  return Promise.resolve(verticesPromise).then(function (result) {\n    const vertexCountWithoutSkirts = that._quantizedVertices.length / 3;\n    const vertexCount =\n      vertexCountWithoutSkirts +\n      that._westIndices.length +\n      that._southIndices.length +\n      that._eastIndices.length +\n      that._northIndices.length;\n    const indicesTypedArray = IndexDatatype.createTypedArray(\n      vertexCount,\n      result.indices,\n    );\n\n    const vertices = new Float32Array(result.vertices);\n    const rtc = result.center;\n    const minimumHeight = result.minimumHeight;\n    const maximumHeight = result.maximumHeight;\n    const boundingSphere = that._boundingSphere;\n    const obb = that._orientedBoundingBox;\n    const occludeePointInScaledSpace =\n      Cartesian3.clone(result.occludeePointInScaledSpace) ??\n      that._horizonOcclusionPoint;\n    const stride = result.vertexStride;\n    const terrainEncoding = TerrainEncoding.clone(result.encoding);\n\n    // Clone complex result objects because the transfer from the web worker\n    // has stripped them down to JSON-style objects.\n    that._mesh = new TerrainMesh(\n      rtc,\n      vertices,\n      indicesTypedArray,\n      result.indexCountWithoutSkirts,\n      vertexCountWithoutSkirts,\n      minimumHeight,\n      maximumHeight,\n      rectangle,\n      boundingSphere,\n      occludeePointInScaledSpace,\n      stride,\n      obb,\n      terrainEncoding,\n      result.westIndicesSouthToNorth,\n      result.southIndicesEastToWest,\n      result.eastIndicesNorthToSouth,\n      result.northIndicesWestToEast,\n    );\n\n    // Free memory received from server after mesh is created.\n    that._quantizedVertices = undefined;\n    that._encodedNormals = undefined;\n    that._indices = undefined;\n\n    that._uValues = undefined;\n    that._vValues = undefined;\n    that._heightValues = undefined;\n\n    that._westIndices = undefined;\n    that._southIndices = undefined;\n    that._eastIndices = undefined;\n    that._northIndices = undefined;\n\n    return that._mesh;\n  });\n};\n\nconst upsampleTaskProcessor = new TaskProcessor(\n  \"upsampleQuantizedTerrainMesh\",\n  TerrainData.maximumAsynchronousTasks,\n);\n\n/**\n * Upsamples this terrain data for use by a descendant tile.  The resulting instance will contain a subset of the\n * vertices in this instance, interpolated if necessary.\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise<QuantizedMeshTerrainData>|undefined} A promise for upsampled heightmap terrain data for the descendant tile,\n *          or undefined if too many asynchronous upsample operations are in progress and the request has been\n *          deferred.\n */\nQuantizedMeshTerrainData.prototype.upsample = function (\n  tilingScheme,\n  thisX,\n  thisY,\n  thisLevel,\n  descendantX,\n  descendantY,\n  descendantLevel,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(tilingScheme)) {\n    throw new DeveloperError(\"tilingScheme is required.\");\n  }\n  if (!defined(thisX)) {\n    throw new DeveloperError(\"thisX is required.\");\n  }\n  if (!defined(thisY)) {\n    throw new DeveloperError(\"thisY is required.\");\n  }\n  if (!defined(thisLevel)) {\n    throw new DeveloperError(\"thisLevel is required.\");\n  }\n  if (!defined(descendantX)) {\n    throw new DeveloperError(\"descendantX is required.\");\n  }\n  if (!defined(descendantY)) {\n    throw new DeveloperError(\"descendantY is required.\");\n  }\n  if (!defined(descendantLevel)) {\n    throw new DeveloperError(\"descendantLevel is required.\");\n  }\n  const levelDifference = descendantLevel - thisLevel;\n  if (levelDifference > 1) {\n    throw new DeveloperError(\n      \"Upsampling through more than one level at a time is not currently supported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const mesh = this._mesh;\n  if (!defined(this._mesh)) {\n    return undefined;\n  }\n\n  const isEastChild = thisX * 2 !== descendantX;\n  const isNorthChild = thisY * 2 === descendantY;\n\n  const ellipsoid = tilingScheme.ellipsoid;\n  const childRectangle = tilingScheme.tileXYToRectangle(\n    descendantX,\n    descendantY,\n    descendantLevel,\n  );\n\n  const upsamplePromise = upsampleTaskProcessor.scheduleTask({\n    vertices: mesh.vertices,\n    vertexCountWithoutSkirts: mesh.vertexCountWithoutSkirts,\n    indices: mesh.indices,\n    indexCountWithoutSkirts: mesh.indexCountWithoutSkirts,\n    encoding: mesh.encoding,\n    minimumHeight: this._minimumHeight,\n    maximumHeight: this._maximumHeight,\n    isEastChild: isEastChild,\n    isNorthChild: isNorthChild,\n    childRectangle: childRectangle,\n    ellipsoid: ellipsoid,\n  });\n\n  if (!defined(upsamplePromise)) {\n    // Postponed\n    return undefined;\n  }\n\n  let shortestSkirt = Math.min(this._westSkirtHeight, this._eastSkirtHeight);\n  shortestSkirt = Math.min(shortestSkirt, this._southSkirtHeight);\n  shortestSkirt = Math.min(shortestSkirt, this._northSkirtHeight);\n\n  const westSkirtHeight = isEastChild\n    ? shortestSkirt * 0.5\n    : this._westSkirtHeight;\n  const southSkirtHeight = isNorthChild\n    ? shortestSkirt * 0.5\n    : this._southSkirtHeight;\n  const eastSkirtHeight = isEastChild\n    ? this._eastSkirtHeight\n    : shortestSkirt * 0.5;\n  const northSkirtHeight = isNorthChild\n    ? this._northSkirtHeight\n    : shortestSkirt * 0.5;\n  const credits = this._credits;\n\n  return Promise.resolve(upsamplePromise).then(function (result) {\n    const quantizedVertices = new Uint16Array(result.vertices);\n    const indicesTypedArray = IndexDatatype.createTypedArray(\n      quantizedVertices.length / 3,\n      result.indices,\n    );\n    let encodedNormals;\n    if (defined(result.encodedNormals)) {\n      encodedNormals = new Uint8Array(result.encodedNormals);\n    }\n\n    return new QuantizedMeshTerrainData({\n      quantizedVertices: quantizedVertices,\n      indices: indicesTypedArray,\n      encodedNormals: encodedNormals,\n      minimumHeight: result.minimumHeight,\n      maximumHeight: result.maximumHeight,\n      boundingSphere: BoundingSphere.clone(result.boundingSphere),\n      orientedBoundingBox: OrientedBoundingBox.clone(\n        result.orientedBoundingBox,\n      ),\n      horizonOcclusionPoint: Cartesian3.clone(result.horizonOcclusionPoint),\n      westIndices: result.westIndices,\n      southIndices: result.southIndices,\n      eastIndices: result.eastIndices,\n      northIndices: result.northIndices,\n      westSkirtHeight: westSkirtHeight,\n      southSkirtHeight: southSkirtHeight,\n      eastSkirtHeight: eastSkirtHeight,\n      northSkirtHeight: northSkirtHeight,\n      childTileMask: 0,\n      credits: credits,\n      createdByUpsampling: true,\n    });\n  });\n};\n\nconst maxShort = 32767;\nconst barycentricCoordinateScratch = new Cartesian3();\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {number} longitude The longitude in radians.\n * @param {number} latitude The latitude in radians.\n * @returns {number} The terrain height at the specified position.  The position is clamped to\n *          the rectangle, so expect incorrect results for positions far outside the rectangle.\n */\nQuantizedMeshTerrainData.prototype.interpolateHeight = function (\n  rectangle,\n  longitude,\n  latitude,\n) {\n  let u = CesiumMath.clamp(\n    (longitude - rectangle.west) / rectangle.width,\n    0.0,\n    1.0,\n  );\n  u *= maxShort;\n  let v = CesiumMath.clamp(\n    (latitude - rectangle.south) / rectangle.height,\n    0.0,\n    1.0,\n  );\n  v *= maxShort;\n\n  if (!defined(this._mesh)) {\n    return interpolateHeight(this, u, v);\n  }\n\n  return interpolateMeshHeight(this, u, v);\n};\n\nfunction pointInBoundingBox(u, v, u0, v0, u1, v1, u2, v2) {\n  const minU = Math.min(u0, u1, u2);\n  const maxU = Math.max(u0, u1, u2);\n  const minV = Math.min(v0, v1, v2);\n  const maxV = Math.max(v0, v1, v2);\n  return u >= minU && u <= maxU && v >= minV && v <= maxV;\n}\n\nconst texCoordScratch0 = new Cartesian2();\nconst texCoordScratch1 = new Cartesian2();\nconst texCoordScratch2 = new Cartesian2();\n\nfunction interpolateMeshHeight(terrainData, u, v) {\n  const mesh = terrainData._mesh;\n  const vertices = mesh.vertices;\n  const encoding = mesh.encoding;\n  const indices = mesh.indices;\n\n  for (let i = 0, len = indices.length; i < len; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n\n    const uv0 = encoding.decodeTextureCoordinates(\n      vertices,\n      i0,\n      texCoordScratch0,\n    );\n    const uv1 = encoding.decodeTextureCoordinates(\n      vertices,\n      i1,\n      texCoordScratch1,\n    );\n    const uv2 = encoding.decodeTextureCoordinates(\n      vertices,\n      i2,\n      texCoordScratch2,\n    );\n\n    if (pointInBoundingBox(u, v, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y)) {\n      const barycentric = Intersections2D.computeBarycentricCoordinates(\n        u,\n        v,\n        uv0.x,\n        uv0.y,\n        uv1.x,\n        uv1.y,\n        uv2.x,\n        uv2.y,\n        barycentricCoordinateScratch,\n      );\n      if (\n        barycentric.x >= -1e-15 &&\n        barycentric.y >= -1e-15 &&\n        barycentric.z >= -1e-15\n      ) {\n        const h0 = encoding.decodeHeight(vertices, i0);\n        const h1 = encoding.decodeHeight(vertices, i1);\n        const h2 = encoding.decodeHeight(vertices, i2);\n        return barycentric.x * h0 + barycentric.y * h1 + barycentric.z * h2;\n      }\n    }\n  }\n\n  // Position does not lie in any triangle in this mesh.\n  return undefined;\n}\n\nfunction interpolateHeight(terrainData, u, v) {\n  const uBuffer = terrainData._uValues;\n  const vBuffer = terrainData._vValues;\n  const heightBuffer = terrainData._heightValues;\n\n  const indices = terrainData._indices;\n  for (let i = 0, len = indices.length; i < len; i += 3) {\n    const i0 = indices[i];\n    const i1 = indices[i + 1];\n    const i2 = indices[i + 2];\n\n    const u0 = uBuffer[i0];\n    const u1 = uBuffer[i1];\n    const u2 = uBuffer[i2];\n\n    const v0 = vBuffer[i0];\n    const v1 = vBuffer[i1];\n    const v2 = vBuffer[i2];\n\n    if (pointInBoundingBox(u, v, u0, v0, u1, v1, u2, v2)) {\n      const barycentric = Intersections2D.computeBarycentricCoordinates(\n        u,\n        v,\n        u0,\n        v0,\n        u1,\n        v1,\n        u2,\n        v2,\n        barycentricCoordinateScratch,\n      );\n      if (\n        barycentric.x >= -1e-15 &&\n        barycentric.y >= -1e-15 &&\n        barycentric.z >= -1e-15\n      ) {\n        const quantizedHeight =\n          barycentric.x * heightBuffer[i0] +\n          barycentric.y * heightBuffer[i1] +\n          barycentric.z * heightBuffer[i2];\n        return CesiumMath.lerp(\n          terrainData._minimumHeight,\n          terrainData._maximumHeight,\n          quantizedHeight / maxShort,\n        );\n      }\n    }\n  }\n\n  // Position does not lie in any triangle in this mesh.\n  return undefined;\n}\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link QuantizedMeshTerrainData.childTileMask}.  The given child tile coordinates are assumed\n * to be one of the four children of this tile.  If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n *\n * @param {number} thisX The tile X coordinate of this (the parent) tile.\n * @param {number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {number} childX The tile X coordinate of the child tile to check for availability.\n * @param {number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {boolean} True if the child tile is available; otherwise, false.\n */\nQuantizedMeshTerrainData.prototype.isChildAvailable = function (\n  thisX,\n  thisY,\n  childX,\n  childY,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"thisX\", thisX);\n  Check.typeOf.number(\"thisY\", thisY);\n  Check.typeOf.number(\"childX\", childX);\n  Check.typeOf.number(\"childY\", childY);\n  //>>includeEnd('debug');\n\n  let bitNumber = 2; // northwest child\n  if (childX !== thisX * 2) {\n    ++bitNumber; // east child\n  }\n  if (childY !== thisY * 2) {\n    bitNumber -= 2; // south child\n  }\n\n  return (this._childTileMask & (1 << bitNumber)) !== 0;\n};\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data.  If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server.  This method should return true for instances\n * returned from a call to {@link HeightmapTerrainData#upsample}.\n *\n * @returns {boolean} True if this instance was created by upsampling; otherwise, false.\n */\nQuantizedMeshTerrainData.prototype.wasCreatedByUpsampling = function () {\n  return this._createdByUpsampling;\n};\nexport default QuantizedMeshTerrainData;\n","import CubicRealPolynomial from \"./CubicRealPolynomial.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\n\n/**\n * Defines functions for 4th order polynomial functions of one variable with only real coefficients.\n *\n * @namespace QuarticRealPolynomial\n */\nconst QuarticRealPolynomial = {};\n\n/**\n * Provides the discriminant of the quartic equation from the supplied coefficients.\n *\n * @param {number} a The coefficient of the 4th order monomial.\n * @param {number} b The coefficient of the 3rd order monomial.\n * @param {number} c The coefficient of the 2nd order monomial.\n * @param {number} d The coefficient of the 1st order monomial.\n * @param {number} e The coefficient of the 0th order monomial.\n * @returns {number} The value of the discriminant.\n */\nQuarticRealPolynomial.computeDiscriminant = function (a, b, c, d, e) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof a !== \"number\") {\n    throw new DeveloperError(\"a is a required number.\");\n  }\n  if (typeof b !== \"number\") {\n    throw new DeveloperError(\"b is a required number.\");\n  }\n  if (typeof c !== \"number\") {\n    throw new DeveloperError(\"c is a required number.\");\n  }\n  if (typeof d !== \"number\") {\n    throw new DeveloperError(\"d is a required number.\");\n  }\n  if (typeof e !== \"number\") {\n    throw new DeveloperError(\"e is a required number.\");\n  }\n  //>>includeEnd('debug');\n\n  const a2 = a * a;\n  const a3 = a2 * a;\n  const b2 = b * b;\n  const b3 = b2 * b;\n  const c2 = c * c;\n  const c3 = c2 * c;\n  const d2 = d * d;\n  const d3 = d2 * d;\n  const e2 = e * e;\n  const e3 = e2 * e;\n\n  const discriminant =\n    b2 * c2 * d2 -\n    4.0 * b3 * d3 -\n    4.0 * a * c3 * d2 +\n    18 * a * b * c * d3 -\n    27.0 * a2 * d2 * d2 +\n    256.0 * a3 * e3 +\n    e *\n      (18.0 * b3 * c * d -\n        4.0 * b2 * c3 +\n        16.0 * a * c2 * c2 -\n        80.0 * a * b * c2 * d -\n        6.0 * a * b2 * d2 +\n        144.0 * a2 * c * d2) +\n    e2 *\n      (144.0 * a * b2 * c -\n        27.0 * b2 * b2 -\n        128.0 * a2 * c2 -\n        192.0 * a2 * b * d);\n  return discriminant;\n};\n\nfunction original(a3, a2, a1, a0) {\n  const a3Squared = a3 * a3;\n\n  const p = a2 - (3.0 * a3Squared) / 8.0;\n  const q = a1 - (a2 * a3) / 2.0 + (a3Squared * a3) / 8.0;\n  const r =\n    a0 -\n    (a1 * a3) / 4.0 +\n    (a2 * a3Squared) / 16.0 -\n    (3.0 * a3Squared * a3Squared) / 256.0;\n\n  // Find the roots of the cubic equations:  h^6 + 2 p h^4 + (p^2 - 4 r) h^2 - q^2 = 0.\n  const cubicRoots = CubicRealPolynomial.computeRealRoots(\n    1.0,\n    2.0 * p,\n    p * p - 4.0 * r,\n    -q * q,\n  );\n\n  if (cubicRoots.length > 0) {\n    const temp = -a3 / 4.0;\n\n    // Use the largest positive root.\n    const hSquared = cubicRoots[cubicRoots.length - 1];\n\n    if (Math.abs(hSquared) < CesiumMath.EPSILON14) {\n      // y^4 + p y^2 + r = 0.\n      const roots = QuadraticRealPolynomial.computeRealRoots(1.0, p, r);\n\n      if (roots.length === 2) {\n        const root0 = roots[0];\n        const root1 = roots[1];\n\n        let y;\n        if (root0 >= 0.0 && root1 >= 0.0) {\n          const y0 = Math.sqrt(root0);\n          const y1 = Math.sqrt(root1);\n\n          return [temp - y1, temp - y0, temp + y0, temp + y1];\n        } else if (root0 >= 0.0 && root1 < 0.0) {\n          y = Math.sqrt(root0);\n          return [temp - y, temp + y];\n        } else if (root0 < 0.0 && root1 >= 0.0) {\n          y = Math.sqrt(root1);\n          return [temp - y, temp + y];\n        }\n      }\n      return [];\n    } else if (hSquared > 0.0) {\n      const h = Math.sqrt(hSquared);\n\n      const m = (p + hSquared - q / h) / 2.0;\n      const n = (p + hSquared + q / h) / 2.0;\n\n      // Now solve the two quadratic factors:  (y^2 + h y + m)(y^2 - h y + n);\n      const roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, h, m);\n      const roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, -h, n);\n\n      if (roots1.length !== 0) {\n        roots1[0] += temp;\n        roots1[1] += temp;\n\n        if (roots2.length !== 0) {\n          roots2[0] += temp;\n          roots2[1] += temp;\n\n          if (roots1[1] <= roots2[0]) {\n            return [roots1[0], roots1[1], roots2[0], roots2[1]];\n          } else if (roots2[1] <= roots1[0]) {\n            return [roots2[0], roots2[1], roots1[0], roots1[1]];\n          } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\n            return [roots2[0], roots1[0], roots1[1], roots2[1]];\n          } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\n            return [roots1[0], roots2[0], roots2[1], roots1[1]];\n          } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\n            return [roots2[0], roots1[0], roots2[1], roots1[1]];\n          }\n          return [roots1[0], roots2[0], roots1[1], roots2[1]];\n        }\n        return roots1;\n      }\n\n      if (roots2.length !== 0) {\n        roots2[0] += temp;\n        roots2[1] += temp;\n\n        return roots2;\n      }\n      return [];\n    }\n  }\n  return [];\n}\n\nfunction neumark(a3, a2, a1, a0) {\n  const a1Squared = a1 * a1;\n  const a2Squared = a2 * a2;\n  const a3Squared = a3 * a3;\n\n  const p = -2.0 * a2;\n  const q = a1 * a3 + a2Squared - 4.0 * a0;\n  const r = a3Squared * a0 - a1 * a2 * a3 + a1Squared;\n\n  const cubicRoots = CubicRealPolynomial.computeRealRoots(1.0, p, q, r);\n\n  if (cubicRoots.length > 0) {\n    // Use the most positive root\n    const y = cubicRoots[0];\n\n    const temp = a2 - y;\n    const tempSquared = temp * temp;\n\n    const g1 = a3 / 2.0;\n    const h1 = temp / 2.0;\n\n    const m = tempSquared - 4.0 * a0;\n    const mError = tempSquared + 4.0 * Math.abs(a0);\n\n    const n = a3Squared - 4.0 * y;\n    const nError = a3Squared + 4.0 * Math.abs(y);\n\n    let g2;\n    let h2;\n\n    if (y < 0.0 || m * nError < n * mError) {\n      const squareRootOfN = Math.sqrt(n);\n      g2 = squareRootOfN / 2.0;\n      h2 = squareRootOfN === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfN;\n    } else {\n      const squareRootOfM = Math.sqrt(m);\n      g2 = squareRootOfM === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfM;\n      h2 = squareRootOfM / 2.0;\n    }\n\n    let G;\n    let g;\n    if (g1 === 0.0 && g2 === 0.0) {\n      G = 0.0;\n      g = 0.0;\n    } else if (CesiumMath.sign(g1) === CesiumMath.sign(g2)) {\n      G = g1 + g2;\n      g = y / G;\n    } else {\n      g = g1 - g2;\n      G = y / g;\n    }\n\n    let H;\n    let h;\n    if (h1 === 0.0 && h2 === 0.0) {\n      H = 0.0;\n      h = 0.0;\n    } else if (CesiumMath.sign(h1) === CesiumMath.sign(h2)) {\n      H = h1 + h2;\n      h = a0 / H;\n    } else {\n      h = h1 - h2;\n      H = a0 / h;\n    }\n\n    // Now solve the two quadratic factors:  (y^2 + G y + H)(y^2 + g y + h);\n    const roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, G, H);\n    const roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, g, h);\n\n    if (roots1.length !== 0) {\n      if (roots2.length !== 0) {\n        if (roots1[1] <= roots2[0]) {\n          return [roots1[0], roots1[1], roots2[0], roots2[1]];\n        } else if (roots2[1] <= roots1[0]) {\n          return [roots2[0], roots2[1], roots1[0], roots1[1]];\n        } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\n          return [roots2[0], roots1[0], roots1[1], roots2[1]];\n        } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\n          return [roots1[0], roots2[0], roots2[1], roots1[1]];\n        } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\n          return [roots2[0], roots1[0], roots2[1], roots1[1]];\n        }\n        return [roots1[0], roots2[0], roots1[1], roots2[1]];\n      }\n      return roots1;\n    }\n    if (roots2.length !== 0) {\n      return roots2;\n    }\n  }\n  return [];\n}\n\n/**\n * Provides the real valued roots of the quartic polynomial with the provided coefficients.\n *\n * @param {number} a The coefficient of the 4th order monomial.\n * @param {number} b The coefficient of the 3rd order monomial.\n * @param {number} c The coefficient of the 2nd order monomial.\n * @param {number} d The coefficient of the 1st order monomial.\n * @param {number} e The coefficient of the 0th order monomial.\n * @returns {number[]} The real valued roots.\n */\nQuarticRealPolynomial.computeRealRoots = function (a, b, c, d, e) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof a !== \"number\") {\n    throw new DeveloperError(\"a is a required number.\");\n  }\n  if (typeof b !== \"number\") {\n    throw new DeveloperError(\"b is a required number.\");\n  }\n  if (typeof c !== \"number\") {\n    throw new DeveloperError(\"c is a required number.\");\n  }\n  if (typeof d !== \"number\") {\n    throw new DeveloperError(\"d is a required number.\");\n  }\n  if (typeof e !== \"number\") {\n    throw new DeveloperError(\"e is a required number.\");\n  }\n  //>>includeEnd('debug');\n\n  if (Math.abs(a) < CesiumMath.EPSILON15) {\n    return CubicRealPolynomial.computeRealRoots(b, c, d, e);\n  }\n  const a3 = b / a;\n  const a2 = c / a;\n  const a1 = d / a;\n  const a0 = e / a;\n\n  let k = a3 < 0.0 ? 1 : 0;\n  k += a2 < 0.0 ? k + 1 : k;\n  k += a1 < 0.0 ? k + 1 : k;\n  k += a0 < 0.0 ? k + 1 : k;\n\n  switch (k) {\n    case 0:\n      return original(a3, a2, a1, a0);\n    case 1:\n      return neumark(a3, a2, a1, a0);\n    case 2:\n      return neumark(a3, a2, a1, a0);\n    case 3:\n      return original(a3, a2, a1, a0);\n    case 4:\n      return original(a3, a2, a1, a0);\n    case 5:\n      return neumark(a3, a2, a1, a0);\n    case 6:\n      return original(a3, a2, a1, a0);\n    case 7:\n      return original(a3, a2, a1, a0);\n    case 8:\n      return neumark(a3, a2, a1, a0);\n    case 9:\n      return original(a3, a2, a1, a0);\n    case 10:\n      return original(a3, a2, a1, a0);\n    case 11:\n      return neumark(a3, a2, a1, a0);\n    case 12:\n      return original(a3, a2, a1, a0);\n    case 13:\n      return original(a3, a2, a1, a0);\n    case 14:\n      return original(a3, a2, a1, a0);\n    case 15:\n      return original(a3, a2, a1, a0);\n    default:\n      return undefined;\n  }\n};\nexport default QuarticRealPolynomial;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\n\n/**\n * A set of 4-dimensional coordinates used to represent rotation in 3-dimensional space.\n * @alias Quaternion\n * @constructor\n *\n * @param {number} [x=0.0] The X component.\n * @param {number} [y=0.0] The Y component.\n * @param {number} [z=0.0] The Z component.\n * @param {number} [w=0.0] The W component.\n *\n * @see PackableForInterpolation\n */\nfunction Quaternion(x, y, z, w) {\n  /**\n   * The X component.\n   * @type {number}\n   * @default 0.0\n   */\n  this.x = x ?? 0.0;\n\n  /**\n   * The Y component.\n   * @type {number}\n   * @default 0.0\n   */\n  this.y = y ?? 0.0;\n\n  /**\n   * The Z component.\n   * @type {number}\n   * @default 0.0\n   */\n  this.z = z ?? 0.0;\n\n  /**\n   * The W component.\n   * @type {number}\n   * @default 0.0\n   */\n  this.w = w ?? 0.0;\n}\n\nlet fromAxisAngleScratch = new Cartesian3();\n\n/**\n * Computes a quaternion representing a rotation around an axis.\n *\n * @param {Cartesian3} axis The axis of rotation.\n * @param {number} angle The angle in radians to rotate around the axis.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.fromAxisAngle = function (axis, angle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"axis\", axis);\n  Check.typeOf.number(\"angle\", angle);\n  //>>includeEnd('debug');\n\n  const halfAngle = angle / 2.0;\n  const s = Math.sin(halfAngle);\n  fromAxisAngleScratch = Cartesian3.normalize(axis, fromAxisAngleScratch);\n\n  const x = fromAxisAngleScratch.x * s;\n  const y = fromAxisAngleScratch.y * s;\n  const z = fromAxisAngleScratch.z * s;\n  const w = Math.cos(halfAngle);\n  if (!defined(result)) {\n    return new Quaternion(x, y, z, w);\n  }\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  result.w = w;\n  return result;\n};\n\nconst fromRotationMatrixNext = [1, 2, 0];\nconst fromRotationMatrixQuat = new Array(3);\n/**\n * Computes a Quaternion from the provided Matrix3 instance.\n *\n * @param {Matrix3} matrix The rotation matrix.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n *\n * @see Matrix3.fromQuaternion\n */\nQuaternion.fromRotationMatrix = function (matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"matrix\", matrix);\n  //>>includeEnd('debug');\n\n  let root;\n  let x;\n  let y;\n  let z;\n  let w;\n\n  const m00 = matrix[Matrix3.COLUMN0ROW0];\n  const m11 = matrix[Matrix3.COLUMN1ROW1];\n  const m22 = matrix[Matrix3.COLUMN2ROW2];\n  const trace = m00 + m11 + m22;\n\n  if (trace > 0.0) {\n    // |w| > 1/2, may as well choose w > 1/2\n    root = Math.sqrt(trace + 1.0); // 2w\n    w = 0.5 * root;\n    root = 0.5 / root; // 1/(4w)\n\n    x = (matrix[Matrix3.COLUMN1ROW2] - matrix[Matrix3.COLUMN2ROW1]) * root;\n    y = (matrix[Matrix3.COLUMN2ROW0] - matrix[Matrix3.COLUMN0ROW2]) * root;\n    z = (matrix[Matrix3.COLUMN0ROW1] - matrix[Matrix3.COLUMN1ROW0]) * root;\n  } else {\n    // |w| <= 1/2\n    const next = fromRotationMatrixNext;\n\n    let i = 0;\n    if (m11 > m00) {\n      i = 1;\n    }\n    if (m22 > m00 && m22 > m11) {\n      i = 2;\n    }\n    const j = next[i];\n    const k = next[j];\n\n    root = Math.sqrt(\n      matrix[Matrix3.getElementIndex(i, i)] -\n        matrix[Matrix3.getElementIndex(j, j)] -\n        matrix[Matrix3.getElementIndex(k, k)] +\n        1.0,\n    );\n\n    const quat = fromRotationMatrixQuat;\n    quat[i] = 0.5 * root;\n    root = 0.5 / root;\n    w =\n      (matrix[Matrix3.getElementIndex(k, j)] -\n        matrix[Matrix3.getElementIndex(j, k)]) *\n      root;\n    quat[j] =\n      (matrix[Matrix3.getElementIndex(j, i)] +\n        matrix[Matrix3.getElementIndex(i, j)]) *\n      root;\n    quat[k] =\n      (matrix[Matrix3.getElementIndex(k, i)] +\n        matrix[Matrix3.getElementIndex(i, k)]) *\n      root;\n\n    x = -quat[0];\n    y = -quat[1];\n    z = -quat[2];\n  }\n\n  if (!defined(result)) {\n    return new Quaternion(x, y, z, w);\n  }\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  result.w = w;\n  return result;\n};\n\nconst scratchHPRQuaternion = new Quaternion();\nlet scratchHeadingQuaternion = new Quaternion();\nlet scratchPitchQuaternion = new Quaternion();\nlet scratchRollQuaternion = new Quaternion();\n\n/**\n * Computes a rotation from the given heading, pitch and roll angles. Heading is the rotation about the\n * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about\n * the positive x axis.\n *\n * @param {HeadingPitchRoll} headingPitchRoll The rotation expressed as a heading, pitch and roll.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided.\n */\nQuaternion.fromHeadingPitchRoll = function (headingPitchRoll, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"headingPitchRoll\", headingPitchRoll);\n  //>>includeEnd('debug');\n\n  scratchRollQuaternion = Quaternion.fromAxisAngle(\n    Cartesian3.UNIT_X,\n    headingPitchRoll.roll,\n    scratchHPRQuaternion,\n  );\n  scratchPitchQuaternion = Quaternion.fromAxisAngle(\n    Cartesian3.UNIT_Y,\n    -headingPitchRoll.pitch,\n    result,\n  );\n  result = Quaternion.multiply(\n    scratchPitchQuaternion,\n    scratchRollQuaternion,\n    scratchPitchQuaternion,\n  );\n  scratchHeadingQuaternion = Quaternion.fromAxisAngle(\n    Cartesian3.UNIT_Z,\n    -headingPitchRoll.heading,\n    scratchHPRQuaternion,\n  );\n  return Quaternion.multiply(scratchHeadingQuaternion, result, result);\n};\n\nconst sampledQuaternionAxis = new Cartesian3();\nconst sampledQuaternionRotation = new Cartesian3();\nconst sampledQuaternionTempQuaternion = new Quaternion();\nconst sampledQuaternionQuaternion0 = new Quaternion();\nconst sampledQuaternionQuaternion0Conjugate = new Quaternion();\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nQuaternion.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Quaternion} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nQuaternion.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.x;\n  array[startingIndex++] = value.y;\n  array[startingIndex++] = value.z;\n  array[startingIndex] = value.w;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Quaternion} [result] The object into which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new Quaternion();\n  }\n  result.x = array[startingIndex];\n  result.y = array[startingIndex + 1];\n  result.z = array[startingIndex + 2];\n  result.w = array[startingIndex + 3];\n  return result;\n};\n\n/**\n * The number of elements used to store the object into an array in its interpolatable form.\n * @type {number}\n */\nQuaternion.packedInterpolationLength = 3;\n\n/**\n * Converts a packed array into a form suitable for interpolation.\n *\n * @param {number[]} packedArray The packed array.\n * @param {number} [startingIndex=0] The index of the first element to be converted.\n * @param {number} [lastIndex=packedArray.length] The index of the last element to be converted.\n * @param {number[]} [result] The object into which to store the result.\n */\nQuaternion.convertPackedArrayForInterpolation = function (\n  packedArray,\n  startingIndex,\n  lastIndex,\n  result,\n) {\n  Quaternion.unpack(\n    packedArray,\n    lastIndex * 4,\n    sampledQuaternionQuaternion0Conjugate,\n  );\n  Quaternion.conjugate(\n    sampledQuaternionQuaternion0Conjugate,\n    sampledQuaternionQuaternion0Conjugate,\n  );\n\n  for (let i = 0, len = lastIndex - startingIndex + 1; i < len; i++) {\n    const offset = i * 3;\n    Quaternion.unpack(\n      packedArray,\n      (startingIndex + i) * 4,\n      sampledQuaternionTempQuaternion,\n    );\n\n    Quaternion.multiply(\n      sampledQuaternionTempQuaternion,\n      sampledQuaternionQuaternion0Conjugate,\n      sampledQuaternionTempQuaternion,\n    );\n\n    if (sampledQuaternionTempQuaternion.w < 0) {\n      Quaternion.negate(\n        sampledQuaternionTempQuaternion,\n        sampledQuaternionTempQuaternion,\n      );\n    }\n\n    Quaternion.computeAxis(\n      sampledQuaternionTempQuaternion,\n      sampledQuaternionAxis,\n    );\n    const angle = Quaternion.computeAngle(sampledQuaternionTempQuaternion);\n    if (!defined(result)) {\n      result = [];\n    }\n    result[offset] = sampledQuaternionAxis.x * angle;\n    result[offset + 1] = sampledQuaternionAxis.y * angle;\n    result[offset + 2] = sampledQuaternionAxis.z * angle;\n  }\n};\n\n/**\n * Retrieves an instance from a packed array converted with {@link convertPackedArrayForInterpolation}.\n *\n * @param {number[]} array The array previously packed for interpolation.\n * @param {number[]} sourceArray The original packed array.\n * @param {number} [firstIndex=0] The firstIndex used to convert the array.\n * @param {number} [lastIndex=packedArray.length] The lastIndex used to convert the array.\n * @param {Quaternion} [result] The object into which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.unpackInterpolationResult = function (\n  array,\n  sourceArray,\n  firstIndex,\n  lastIndex,\n  result,\n) {\n  if (!defined(result)) {\n    result = new Quaternion();\n  }\n  Cartesian3.fromArray(array, 0, sampledQuaternionRotation);\n  const magnitude = Cartesian3.magnitude(sampledQuaternionRotation);\n\n  Quaternion.unpack(sourceArray, lastIndex * 4, sampledQuaternionQuaternion0);\n\n  if (magnitude === 0) {\n    Quaternion.clone(Quaternion.IDENTITY, sampledQuaternionTempQuaternion);\n  } else {\n    Quaternion.fromAxisAngle(\n      sampledQuaternionRotation,\n      magnitude,\n      sampledQuaternionTempQuaternion,\n    );\n  }\n\n  return Quaternion.multiply(\n    sampledQuaternionTempQuaternion,\n    sampledQuaternionQuaternion0,\n    result,\n  );\n};\n\n/**\n * Duplicates a Quaternion instance.\n *\n * @param {Quaternion} quaternion The quaternion to duplicate.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. (Returns undefined if quaternion is undefined)\n */\nQuaternion.clone = function (quaternion, result) {\n  if (!defined(quaternion)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new Quaternion(\n      quaternion.x,\n      quaternion.y,\n      quaternion.z,\n      quaternion.w,\n    );\n  }\n\n  result.x = quaternion.x;\n  result.y = quaternion.y;\n  result.z = quaternion.z;\n  result.w = quaternion.w;\n  return result;\n};\n\n/**\n * Computes the conjugate of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to conjugate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.conjugate = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = -quaternion.x;\n  result.y = -quaternion.y;\n  result.z = -quaternion.z;\n  result.w = quaternion.w;\n  return result;\n};\n\n/**\n * Computes magnitude squared for the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to conjugate.\n * @returns {number} The magnitude squared.\n */\nQuaternion.magnitudeSquared = function (quaternion) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  //>>includeEnd('debug');\n\n  return (\n    quaternion.x * quaternion.x +\n    quaternion.y * quaternion.y +\n    quaternion.z * quaternion.z +\n    quaternion.w * quaternion.w\n  );\n};\n\n/**\n * Computes magnitude for the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to conjugate.\n * @returns {number} The magnitude.\n */\nQuaternion.magnitude = function (quaternion) {\n  return Math.sqrt(Quaternion.magnitudeSquared(quaternion));\n};\n\n/**\n * Computes the normalized form of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to normalize.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.normalize = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const inverseMagnitude = 1.0 / Quaternion.magnitude(quaternion);\n  const x = quaternion.x * inverseMagnitude;\n  const y = quaternion.y * inverseMagnitude;\n  const z = quaternion.z * inverseMagnitude;\n  const w = quaternion.w * inverseMagnitude;\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  result.w = w;\n  return result;\n};\n\n/**\n * Computes the inverse of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to normalize.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.inverse = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const magnitudeSquared = Quaternion.magnitudeSquared(quaternion);\n  result = Quaternion.conjugate(quaternion, result);\n  return Quaternion.multiplyByScalar(result, 1.0 / magnitudeSquared, result);\n};\n\n/**\n * Computes the componentwise sum of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.add = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = left.x + right.x;\n  result.y = left.y + right.y;\n  result.z = left.z + right.z;\n  result.w = left.w + right.w;\n  return result;\n};\n\n/**\n * Computes the componentwise difference of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.subtract = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = left.x - right.x;\n  result.y = left.y - right.y;\n  result.z = left.z - right.z;\n  result.w = left.w - right.w;\n  return result;\n};\n\n/**\n * Negates the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to be negated.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.negate = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = -quaternion.x;\n  result.y = -quaternion.y;\n  result.z = -quaternion.z;\n  result.w = -quaternion.w;\n  return result;\n};\n\n/**\n * Computes the dot (scalar) product of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @returns {number} The dot product.\n */\nQuaternion.dot = function (left, right) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  //>>includeEnd('debug');\n\n  return (\n    left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w\n  );\n};\n\n/**\n * Computes the product of two quaternions.\n *\n * @param {Quaternion} left The first quaternion.\n * @param {Quaternion} right The second quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.multiply = function (left, right, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const leftX = left.x;\n  const leftY = left.y;\n  const leftZ = left.z;\n  const leftW = left.w;\n\n  const rightX = right.x;\n  const rightY = right.y;\n  const rightZ = right.z;\n  const rightW = right.w;\n\n  const x = leftW * rightX + leftX * rightW + leftY * rightZ - leftZ * rightY;\n  const y = leftW * rightY - leftX * rightZ + leftY * rightW + leftZ * rightX;\n  const z = leftW * rightZ + leftX * rightY - leftY * rightX + leftZ * rightW;\n  const w = leftW * rightW - leftX * rightX - leftY * rightY - leftZ * rightZ;\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  result.w = w;\n  return result;\n};\n\n/**\n * Multiplies the provided quaternion componentwise by the provided scalar.\n *\n * @param {Quaternion} quaternion The quaternion to be scaled.\n * @param {number} scalar The scalar to multiply with.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.multiplyByScalar = function (quaternion, scalar, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  Check.typeOf.number(\"scalar\", scalar);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = quaternion.x * scalar;\n  result.y = quaternion.y * scalar;\n  result.z = quaternion.z * scalar;\n  result.w = quaternion.w * scalar;\n  return result;\n};\n\n/**\n * Divides the provided quaternion componentwise by the provided scalar.\n *\n * @param {Quaternion} quaternion The quaternion to be divided.\n * @param {number} scalar The scalar to divide by.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.divideByScalar = function (quaternion, scalar, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  Check.typeOf.number(\"scalar\", scalar);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  result.x = quaternion.x / scalar;\n  result.y = quaternion.y / scalar;\n  result.z = quaternion.z / scalar;\n  result.w = quaternion.w / scalar;\n  return result;\n};\n\n/**\n * Computes the axis of rotation of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to use.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nQuaternion.computeAxis = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const w = quaternion.w;\n  if (\n    Math.abs(w - 1.0) < CesiumMath.EPSILON6 ||\n    Math.abs(w + 1.0) < CesiumMath.EPSILON6\n  ) {\n    result.x = 1;\n    result.y = result.z = 0;\n    return result;\n  }\n\n  const scalar = 1.0 / Math.sqrt(1.0 - w * w);\n\n  result.x = quaternion.x * scalar;\n  result.y = quaternion.y * scalar;\n  result.z = quaternion.z * scalar;\n  return result;\n};\n\n/**\n * Computes the angle of rotation of the provided quaternion.\n *\n * @param {Quaternion} quaternion The quaternion to use.\n * @returns {number} The angle of rotation.\n */\nQuaternion.computeAngle = function (quaternion) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  //>>includeEnd('debug');\n\n  if (Math.abs(quaternion.w - 1.0) < CesiumMath.EPSILON6) {\n    return 0.0;\n  }\n  return 2.0 * Math.acos(quaternion.w);\n};\n\nlet lerpScratch = new Quaternion();\n/**\n * Computes the linear interpolation or extrapolation at t using the provided quaternions.\n *\n * @param {Quaternion} start The value corresponding to t at 0.0.\n * @param {Quaternion} end The value corresponding to t at 1.0.\n * @param {number} t The point along t at which to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.lerp = function (start, end, t, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"start\", start);\n  Check.typeOf.object(\"end\", end);\n  Check.typeOf.number(\"t\", t);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  lerpScratch = Quaternion.multiplyByScalar(end, t, lerpScratch);\n  result = Quaternion.multiplyByScalar(start, 1.0 - t, result);\n  return Quaternion.add(lerpScratch, result, result);\n};\n\nlet slerpEndNegated = new Quaternion();\nlet slerpScaledP = new Quaternion();\nlet slerpScaledR = new Quaternion();\n/**\n * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions.\n *\n * @param {Quaternion} start The value corresponding to t at 0.0.\n * @param {Quaternion} end The value corresponding to t at 1.0.\n * @param {number} t The point along t at which to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n * @see Quaternion#fastSlerp\n */\nQuaternion.slerp = function (start, end, t, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"start\", start);\n  Check.typeOf.object(\"end\", end);\n  Check.typeOf.number(\"t\", t);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  let dot = Quaternion.dot(start, end);\n\n  // The angle between start must be acute. Since q and -q represent\n  // the same rotation, negate q to get the acute angle.\n  let r = end;\n  if (dot < 0.0) {\n    dot = -dot;\n    r = slerpEndNegated = Quaternion.negate(end, slerpEndNegated);\n  }\n\n  // dot > 0, as the dot product approaches 1, the angle between the\n  // quaternions vanishes. use linear interpolation.\n  if (1.0 - dot < CesiumMath.EPSILON6) {\n    return Quaternion.lerp(start, r, t, result);\n  }\n\n  const theta = Math.acos(dot);\n  slerpScaledP = Quaternion.multiplyByScalar(\n    start,\n    Math.sin((1 - t) * theta),\n    slerpScaledP,\n  );\n  slerpScaledR = Quaternion.multiplyByScalar(\n    r,\n    Math.sin(t * theta),\n    slerpScaledR,\n  );\n  result = Quaternion.add(slerpScaledP, slerpScaledR, result);\n  return Quaternion.multiplyByScalar(result, 1.0 / Math.sin(theta), result);\n};\n\n/**\n * The logarithmic quaternion function.\n *\n * @param {Quaternion} quaternion The unit quaternion.\n * @param {Cartesian3} result The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter.\n */\nQuaternion.log = function (quaternion, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"quaternion\", quaternion);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const theta = CesiumMath.acosClamped(quaternion.w);\n  let thetaOverSinTheta = 0.0;\n\n  if (theta !== 0.0) {\n    thetaOverSinTheta = theta / Math.sin(theta);\n  }\n\n  return Cartesian3.multiplyByScalar(quaternion, thetaOverSinTheta, result);\n};\n\n/**\n * The exponential quaternion function.\n *\n * @param {Cartesian3} cartesian The cartesian.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n */\nQuaternion.exp = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartesian\", cartesian);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const theta = Cartesian3.magnitude(cartesian);\n  let sinThetaOverTheta = 0.0;\n\n  if (theta !== 0.0) {\n    sinThetaOverTheta = Math.sin(theta) / theta;\n  }\n\n  result.x = cartesian.x * sinThetaOverTheta;\n  result.y = cartesian.y * sinThetaOverTheta;\n  result.z = cartesian.z * sinThetaOverTheta;\n  result.w = Math.cos(theta);\n\n  return result;\n};\n\nconst squadScratchCartesian0 = new Cartesian3();\nconst squadScratchCartesian1 = new Cartesian3();\nconst squadScratchQuaternion0 = new Quaternion();\nconst squadScratchQuaternion1 = new Quaternion();\n\n/**\n * Computes an inner quadrangle point.\n * <p>This will compute quaternions that ensure a squad curve is C<sup>1</sup>.</p>\n *\n * @param {Quaternion} q0 The first quaternion.\n * @param {Quaternion} q1 The second quaternion.\n * @param {Quaternion} q2 The third quaternion.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n * @see Quaternion#squad\n */\nQuaternion.computeInnerQuadrangle = function (q0, q1, q2, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"q0\", q0);\n  Check.typeOf.object(\"q1\", q1);\n  Check.typeOf.object(\"q2\", q2);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const qInv = Quaternion.conjugate(q1, squadScratchQuaternion0);\n  Quaternion.multiply(qInv, q2, squadScratchQuaternion1);\n  const cart0 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian0);\n\n  Quaternion.multiply(qInv, q0, squadScratchQuaternion1);\n  const cart1 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian1);\n\n  Cartesian3.add(cart0, cart1, cart0);\n  Cartesian3.multiplyByScalar(cart0, 0.25, cart0);\n  Cartesian3.negate(cart0, cart0);\n  Quaternion.exp(cart0, squadScratchQuaternion0);\n\n  return Quaternion.multiply(q1, squadScratchQuaternion0, result);\n};\n\n/**\n * Computes the spherical quadrangle interpolation between quaternions.\n *\n * @param {Quaternion} q0 The first quaternion.\n * @param {Quaternion} q1 The second quaternion.\n * @param {Quaternion} s0 The first inner quadrangle.\n * @param {Quaternion} s1 The second inner quadrangle.\n * @param {number} t The time in [0,1] used to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n *\n * @example\n * // 1. compute the squad interpolation between two quaternions on a curve\n * const s0 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i - 1], quaternions[i], quaternions[i + 1], new Cesium.Quaternion());\n * const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i], quaternions[i + 1], quaternions[i + 2], new Cesium.Quaternion());\n * const q = Cesium.Quaternion.squad(quaternions[i], quaternions[i + 1], s0, s1, t, new Cesium.Quaternion());\n *\n * // 2. compute the squad interpolation as above but where the first quaternion is a end point.\n * const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[0], quaternions[1], quaternions[2], new Cesium.Quaternion());\n * const q = Cesium.Quaternion.squad(quaternions[0], quaternions[1], quaternions[0], s1, t, new Cesium.Quaternion());\n *\n * @see Quaternion#computeInnerQuadrangle\n */\nQuaternion.squad = function (q0, q1, s0, s1, t, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"q0\", q0);\n  Check.typeOf.object(\"q1\", q1);\n  Check.typeOf.object(\"s0\", s0);\n  Check.typeOf.object(\"s1\", s1);\n  Check.typeOf.number(\"t\", t);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const slerp0 = Quaternion.slerp(q0, q1, t, squadScratchQuaternion0);\n  const slerp1 = Quaternion.slerp(s0, s1, t, squadScratchQuaternion1);\n  return Quaternion.slerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result);\n};\n\nconst fastSlerpScratchQuaternion = new Quaternion();\n// eslint-disable-next-line no-loss-of-precision\nconst opmu = 1.90110745351730037;\nconst u = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\nconst v = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\nconst bT = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\nconst bD = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\n\nfor (let i = 0; i < 7; ++i) {\n  const s = i + 1.0;\n  const t = 2.0 * s + 1.0;\n  u[i] = 1.0 / (s * t);\n  v[i] = s / t;\n}\n\nu[7] = opmu / (8.0 * 17.0);\nv[7] = (opmu * 8.0) / 17.0;\n\n/**\n * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions.\n * This implementation is faster than {@link Quaternion#slerp}, but is only accurate up to 10<sup>-6</sup>.\n *\n * @param {Quaternion} start The value corresponding to t at 0.0.\n * @param {Quaternion} end The value corresponding to t at 1.0.\n * @param {number} t The point along t at which to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter.\n *\n * @see Quaternion#slerp\n */\nQuaternion.fastSlerp = function (start, end, t, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"start\", start);\n  Check.typeOf.object(\"end\", end);\n  Check.typeOf.number(\"t\", t);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  let x = Quaternion.dot(start, end);\n\n  let sign;\n  if (x >= 0) {\n    sign = 1.0;\n  } else {\n    sign = -1.0;\n    x = -x;\n  }\n\n  const xm1 = x - 1.0;\n  const d = 1.0 - t;\n  const sqrT = t * t;\n  const sqrD = d * d;\n\n  for (let i = 7; i >= 0; --i) {\n    bT[i] = (u[i] * sqrT - v[i]) * xm1;\n    bD[i] = (u[i] * sqrD - v[i]) * xm1;\n  }\n\n  const cT =\n    sign *\n    t *\n    (1.0 +\n      bT[0] *\n        (1.0 +\n          bT[1] *\n            (1.0 +\n              bT[2] *\n                (1.0 +\n                  bT[3] *\n                    (1.0 +\n                      bT[4] *\n                        (1.0 + bT[5] * (1.0 + bT[6] * (1.0 + bT[7]))))))));\n  const cD =\n    d *\n    (1.0 +\n      bD[0] *\n        (1.0 +\n          bD[1] *\n            (1.0 +\n              bD[2] *\n                (1.0 +\n                  bD[3] *\n                    (1.0 +\n                      bD[4] *\n                        (1.0 + bD[5] * (1.0 + bD[6] * (1.0 + bD[7]))))))));\n\n  const temp = Quaternion.multiplyByScalar(\n    start,\n    cD,\n    fastSlerpScratchQuaternion,\n  );\n  Quaternion.multiplyByScalar(end, cT, result);\n  return Quaternion.add(temp, result, result);\n};\n\n/**\n * Computes the spherical quadrangle interpolation between quaternions.\n * An implementation that is faster than {@link Quaternion#squad}, but less accurate.\n *\n * @param {Quaternion} q0 The first quaternion.\n * @param {Quaternion} q1 The second quaternion.\n * @param {Quaternion} s0 The first inner quadrangle.\n * @param {Quaternion} s1 The second inner quadrangle.\n * @param {number} t The time in [0,1] used to interpolate.\n * @param {Quaternion} result The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new instance if none was provided.\n *\n * @see Quaternion#squad\n */\nQuaternion.fastSquad = function (q0, q1, s0, s1, t, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"q0\", q0);\n  Check.typeOf.object(\"q1\", q1);\n  Check.typeOf.object(\"s0\", s0);\n  Check.typeOf.object(\"s1\", s1);\n  Check.typeOf.number(\"t\", t);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const slerp0 = Quaternion.fastSlerp(q0, q1, t, squadScratchQuaternion0);\n  const slerp1 = Quaternion.fastSlerp(s0, s1, t, squadScratchQuaternion1);\n  return Quaternion.fastSlerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result);\n};\n\n/**\n * Compares the provided quaternions componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Quaternion} [left] The first quaternion.\n * @param {Quaternion} [right] The second quaternion.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nQuaternion.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.x === right.x &&\n      left.y === right.y &&\n      left.z === right.z &&\n      left.w === right.w)\n  );\n};\n\n/**\n * Compares the provided quaternions componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Quaternion} [left] The first quaternion.\n * @param {Quaternion} [right] The second quaternion.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nQuaternion.equalsEpsilon = function (left, right, epsilon) {\n  epsilon = epsilon ?? 0;\n\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(left.x - right.x) <= epsilon &&\n      Math.abs(left.y - right.y) <= epsilon &&\n      Math.abs(left.z - right.z) <= epsilon &&\n      Math.abs(left.w - right.w) <= epsilon)\n  );\n};\n\n/**\n * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 0.0).\n *\n * @type {Quaternion}\n * @constant\n */\nQuaternion.ZERO = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 0.0));\n\n/**\n * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 1.0).\n *\n * @type {Quaternion}\n * @constant\n */\nQuaternion.IDENTITY = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 1.0));\n\n/**\n * Duplicates this Quaternion instance.\n *\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\n */\nQuaternion.prototype.clone = function (result) {\n  return Quaternion.clone(this, result);\n};\n\n/**\n * Compares this and the provided quaternion componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Quaternion} [right] The right hand side quaternion.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nQuaternion.prototype.equals = function (right) {\n  return Quaternion.equals(this, right);\n};\n\n/**\n * Compares this and the provided quaternion componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Quaternion} [right] The right hand side quaternion.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nQuaternion.prototype.equalsEpsilon = function (right, epsilon) {\n  return Quaternion.equalsEpsilon(this, right, epsilon);\n};\n\n/**\n * Returns a string representing this quaternion in the format (x, y, z, w).\n *\n * @returns {string} A string representing this Quaternion.\n */\nQuaternion.prototype.toString = function () {\n  return `(${this.x}, ${this.y}, ${this.z}, ${this.w})`;\n};\nexport default Quaternion;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Spline from \"./Spline.js\";\n\nfunction createEvaluateFunction(spline) {\n  const points = spline.points;\n  const times = spline.times;\n\n  // use slerp interpolation\n  return function (time, result) {\n    if (!defined(result)) {\n      result = new Quaternion();\n    }\n    const i = (spline._lastTimeIndex = spline.findTimeInterval(\n      time,\n      spline._lastTimeIndex,\n    ));\n    const u = (time - times[i]) / (times[i + 1] - times[i]);\n\n    const q0 = points[i];\n    const q1 = points[i + 1];\n\n    return Quaternion.fastSlerp(q0, q1, u, result);\n  };\n}\n\n/**\n * A spline that uses spherical linear (slerp) interpolation to create a quaternion curve.\n * The generated curve is in the class C<sup>1</sup>.\n *\n * @alias QuaternionSpline\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point.\n *                The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {Quaternion[]} options.points The array of {@link Quaternion} control points.\n *\n * @exception {DeveloperError} points and times are required\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n\n * @see ConstantSpline\n * @see SteppedSpline\n * @see HermiteSpline\n * @see CatmullRomSpline\n * @see LinearSpline\n * @see MorphWeightSpline\n */\nfunction QuaternionSpline(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const points = options.points;\n  const times = options.times;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(points) || !defined(times)) {\n    throw new DeveloperError(\"points and times are required.\");\n  }\n  if (points.length < 2) {\n    throw new DeveloperError(\n      \"points.length must be greater than or equal to 2.\",\n    );\n  }\n  if (times.length !== points.length) {\n    throw new DeveloperError(\"times.length must be equal to points.length.\");\n  }\n  //>>includeEnd('debug');\n\n  this._times = times;\n  this._points = points;\n\n  this._evaluateFunction = createEvaluateFunction(this);\n  this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(QuaternionSpline.prototype, {\n  /**\n   * An array of times for the control points.\n   *\n   * @memberof QuaternionSpline.prototype\n   *\n   * @type {number[]}\n   * @readonly\n   */\n  times: {\n    get: function () {\n      return this._times;\n    },\n  },\n\n  /**\n   * An array of {@link Quaternion} control points.\n   *\n   * @memberof QuaternionSpline.prototype\n   *\n   * @type {Quaternion[]}\n   * @readonly\n   */\n  points: {\n    get: function () {\n      return this._points;\n    },\n  },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {number} time The time.\n * @returns {number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nQuaternionSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around to the updated animation.\n */\nQuaternionSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nQuaternionSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nQuaternionSpline.prototype.evaluate = function (time, result) {\n  return this._evaluateFunction(time, result);\n};\nexport default QuaternionSpline;\n","/**\n * A queue that can enqueue items at the end, and dequeue items from the front.\n *\n * @alias Queue\n * @constructor\n */\nfunction Queue() {\n  this._array = [];\n  this._offset = 0;\n  this._length = 0;\n}\n\nObject.defineProperties(Queue.prototype, {\n  /**\n   * The length of the queue.\n   *\n   * @memberof Queue.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._length;\n    },\n  },\n});\n\n/**\n * Enqueues the specified item.\n *\n * @param {*} item The item to enqueue.\n */\nQueue.prototype.enqueue = function (item) {\n  this._array.push(item);\n  this._length++;\n};\n\n/**\n * Dequeues an item.  Returns undefined if the queue is empty.\n *\n * @returns {*} The the dequeued item.\n */\nQueue.prototype.dequeue = function () {\n  if (this._length === 0) {\n    return undefined;\n  }\n\n  const array = this._array;\n  let offset = this._offset;\n  const item = array[offset];\n  array[offset] = undefined;\n\n  offset++;\n  if (offset > 10 && offset * 2 > array.length) {\n    //compact array\n    this._array = array.slice(offset);\n    offset = 0;\n  }\n\n  this._offset = offset;\n  this._length--;\n\n  return item;\n};\n\n/**\n * Returns the item at the front of the queue.  Returns undefined if the queue is empty.\n *\n * @returns {*} The item at the front of the queue.\n */\nQueue.prototype.peek = function () {\n  if (this._length === 0) {\n    return undefined;\n  }\n\n  return this._array[this._offset];\n};\n\n/**\n * Check whether this queue contains the specified item.\n *\n * @param {*} item The item to search for.\n */\nQueue.prototype.contains = function (item) {\n  return this._array.indexOf(item) !== -1;\n};\n\n/**\n * Remove all items from the queue.\n */\nQueue.prototype.clear = function () {\n  this._array.length = this._offset = this._length = 0;\n};\n\n/**\n * Sort the items in the queue in-place.\n *\n * @param {Queue.Comparator} compareFunction A function that defines the sort order.\n */\nQueue.prototype.sort = function (compareFunction) {\n  if (this._offset > 0) {\n    //compact array\n    this._array = this._array.slice(this._offset);\n    this._offset = 0;\n  }\n\n  this._array.sort(compareFunction);\n};\n\n/**\n * A function used to compare two items while sorting a queue.\n * @callback Queue.Comparator\n *\n * @param {*} a An item in the array.\n * @param {*} b An item in the array.\n * @returns {number} Returns a negative value if <code>a</code> is less than <code>b</code>,\n *          a positive value if <code>a</code> is greater than <code>b</code>, or\n *          0 if <code>a</code> is equal to <code>b</code>.\n *\n * @example\n * function compareNumbers(a, b) {\n *     return a - b;\n * }\n */\nexport default Queue;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Represents a ray that extends infinitely from the provided origin in the provided direction.\n * @alias Ray\n * @constructor\n *\n * @param {Cartesian3} [origin=Cartesian3.ZERO] The origin of the ray.\n * @param {Cartesian3} [direction=Cartesian3.ZERO] The direction of the ray.\n */\nfunction Ray(origin, direction) {\n  direction = Cartesian3.clone(direction ?? Cartesian3.ZERO);\n  if (!Cartesian3.equals(direction, Cartesian3.ZERO)) {\n    Cartesian3.normalize(direction, direction);\n  }\n\n  /**\n   * The origin of the ray.\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   */\n  this.origin = Cartesian3.clone(origin ?? Cartesian3.ZERO);\n\n  /**\n   * The direction of the ray.\n   * @type {Cartesian3}\n   */\n  this.direction = direction;\n}\n\n/**\n * Duplicates a Ray instance.\n *\n * @param {Ray} ray The ray to duplicate.\n * @param {Ray} [result] The object onto which to store the result.\n * @returns {Ray} The modified result parameter or a new Ray instance if one was not provided. (Returns undefined if ray is undefined)\n */\nRay.clone = function (ray, result) {\n  if (!defined(ray)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new Ray(ray.origin, ray.direction);\n  }\n  result.origin = Cartesian3.clone(ray.origin);\n  result.direction = Cartesian3.clone(ray.direction);\n  return result;\n};\n\n/**\n * Computes the point along the ray given by r(t) = o + t*d,\n * where o is the origin of the ray and d is the direction.\n *\n * @param {Ray} ray The ray.\n * @param {number} t A scalar value.\n * @param {Cartesian3} [result] The object in which the result will be stored.\n * @returns {Cartesian3} The modified result parameter, or a new instance if none was provided.\n *\n * @example\n * //Get the first intersection point of a ray and an ellipsoid.\n * const intersection = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid);\n * const point = Cesium.Ray.getPoint(ray, intersection.start);\n */\nRay.getPoint = function (ray, t, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"ray\", ray);\n  Check.typeOf.number(\"t\", t);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  result = Cartesian3.multiplyByScalar(ray.direction, t, result);\n  return Cartesian3.add(ray.origin, result, result);\n};\nexport default Ray;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\nimport Transforms from \"./Transforms.js\";\nimport Matrix4 from \"./Matrix4.js\";\n\n/**\n * A two dimensional region specified as longitude and latitude coordinates.\n *\n * @alias Rectangle\n * @constructor\n *\n * @param {number} [west=0.0] The westernmost longitude, in radians, in the range [-Pi, Pi].\n * @param {number} [south=0.0] The southernmost latitude, in radians, in the range [-Pi/2, Pi/2].\n * @param {number} [east=0.0] The easternmost longitude, in radians, in the range [-Pi, Pi].\n * @param {number} [north=0.0] The northernmost latitude, in radians, in the range [-Pi/2, Pi/2].\n *\n * @see Packable\n */\nfunction Rectangle(west, south, east, north) {\n  /**\n   * The westernmost longitude in radians in the range [-Pi, Pi].\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.west = west ?? 0.0;\n\n  /**\n   * The southernmost latitude in radians in the range [-Pi/2, Pi/2].\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.south = south ?? 0.0;\n\n  /**\n   * The easternmost longitude in radians in the range [-Pi, Pi].\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.east = east ?? 0.0;\n\n  /**\n   * The northernmost latitude in radians in the range [-Pi/2, Pi/2].\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.north = north ?? 0.0;\n}\n\nObject.defineProperties(Rectangle.prototype, {\n  /**\n   * Gets the width of the rectangle in radians.\n   * @memberof Rectangle.prototype\n   * @type {number}\n   * @readonly\n   */\n  width: {\n    get: function () {\n      return Rectangle.computeWidth(this);\n    },\n  },\n\n  /**\n   * Gets the height of the rectangle in radians.\n   * @memberof Rectangle.prototype\n   * @type {number}\n   * @readonly\n   */\n  height: {\n    get: function () {\n      return Rectangle.computeHeight(this);\n    },\n  },\n});\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nRectangle.packedLength = 4;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {Rectangle} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nRectangle.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.west;\n  array[startingIndex++] = value.south;\n  array[startingIndex++] = value.east;\n  array[startingIndex] = value.north;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {Rectangle} [result] The object into which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided.\n */\nRectangle.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new Rectangle();\n  }\n\n  result.west = array[startingIndex++];\n  result.south = array[startingIndex++];\n  result.east = array[startingIndex++];\n  result.north = array[startingIndex];\n  return result;\n};\n\n/**\n * Computes the width of a rectangle in radians.\n * @param {Rectangle} rectangle The rectangle to compute the width of.\n * @returns {number} The width.\n */\nRectangle.computeWidth = function (rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n  let east = rectangle.east;\n  const west = rectangle.west;\n  if (east < west) {\n    east += CesiumMath.TWO_PI;\n  }\n  return east - west;\n};\n\n/**\n * Computes the height of a rectangle in radians.\n * @param {Rectangle} rectangle The rectangle to compute the height of.\n * @returns {number} The height.\n */\nRectangle.computeHeight = function (rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n  return rectangle.north - rectangle.south;\n};\n\n/**\n * Creates a rectangle given the boundary longitude and latitude in degrees.\n *\n * @param {number} [west=0.0] The westernmost longitude in degrees in the range [-180.0, 180.0].\n * @param {number} [south=0.0] The southernmost latitude in degrees in the range [-90.0, 90.0].\n * @param {number} [east=0.0] The easternmost longitude in degrees in the range [-180.0, 180.0].\n * @param {number} [north=0.0] The northernmost latitude in degrees in the range [-90.0, 90.0].\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n *\n * @example\n * const rectangle = Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0);\n */\nRectangle.fromDegrees = function (west, south, east, north, result) {\n  west = CesiumMath.toRadians(west ?? 0.0);\n  south = CesiumMath.toRadians(south ?? 0.0);\n  east = CesiumMath.toRadians(east ?? 0.0);\n  north = CesiumMath.toRadians(north ?? 0.0);\n\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n\n  return result;\n};\n\n/**\n * Creates a rectangle given the boundary longitude and latitude in radians.\n *\n * @param {number} [west=0.0] The westernmost longitude in radians in the range [-Math.PI, Math.PI].\n * @param {number} [south=0.0] The southernmost latitude in radians in the range [-Math.PI/2, Math.PI/2].\n * @param {number} [east=0.0] The easternmost longitude in radians in the range [-Math.PI, Math.PI].\n * @param {number} [north=0.0] The northernmost latitude in radians in the range [-Math.PI/2, Math.PI/2].\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n *\n * @example\n * const rectangle = Cesium.Rectangle.fromRadians(0.0, Math.PI/4, Math.PI/8, 3*Math.PI/4);\n */\nRectangle.fromRadians = function (west, south, east, north, result) {\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n\n  result.west = west ?? 0.0;\n  result.south = south ?? 0.0;\n  result.east = east ?? 0.0;\n  result.north = north ?? 0.0;\n\n  return result;\n};\n\n/**\n * Creates the smallest possible Rectangle that encloses all positions in the provided array.\n *\n * @param {Cartographic[]} cartographics The list of Cartographic instances.\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.fromCartographicArray = function (cartographics, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartographics\", cartographics);\n  //>>includeEnd('debug');\n\n  let west = Number.MAX_VALUE;\n  let east = -Number.MAX_VALUE;\n  let westOverIDL = Number.MAX_VALUE;\n  let eastOverIDL = -Number.MAX_VALUE;\n  let south = Number.MAX_VALUE;\n  let north = -Number.MAX_VALUE;\n\n  for (let i = 0, len = cartographics.length; i < len; i++) {\n    const position = cartographics[i];\n    west = Math.min(west, position.longitude);\n    east = Math.max(east, position.longitude);\n    south = Math.min(south, position.latitude);\n    north = Math.max(north, position.latitude);\n\n    const lonAdjusted =\n      position.longitude >= 0\n        ? position.longitude\n        : position.longitude + CesiumMath.TWO_PI;\n    westOverIDL = Math.min(westOverIDL, lonAdjusted);\n    eastOverIDL = Math.max(eastOverIDL, lonAdjusted);\n  }\n\n  if (east - west > eastOverIDL - westOverIDL) {\n    west = westOverIDL;\n    east = eastOverIDL;\n\n    if (east > CesiumMath.PI) {\n      east = east - CesiumMath.TWO_PI;\n    }\n    if (west > CesiumMath.PI) {\n      west = west - CesiumMath.TWO_PI;\n    }\n  }\n\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n  return result;\n};\n\n/**\n * Creates the smallest possible Rectangle that encloses all positions in the provided array.\n *\n * @param {Cartesian3[]} cartesians The list of Cartesian instances.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid the cartesians are on.\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.fromCartesianArray = function (cartesians, ellipsoid, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  //>>includeEnd('debug');\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  let west = Number.MAX_VALUE;\n  let east = -Number.MAX_VALUE;\n  let westOverIDL = Number.MAX_VALUE;\n  let eastOverIDL = -Number.MAX_VALUE;\n  let south = Number.MAX_VALUE;\n  let north = -Number.MAX_VALUE;\n\n  for (let i = 0, len = cartesians.length; i < len; i++) {\n    const position = ellipsoid.cartesianToCartographic(cartesians[i]);\n    west = Math.min(west, position.longitude);\n    east = Math.max(east, position.longitude);\n    south = Math.min(south, position.latitude);\n    north = Math.max(north, position.latitude);\n\n    const lonAdjusted =\n      position.longitude >= 0\n        ? position.longitude\n        : position.longitude + CesiumMath.TWO_PI;\n    westOverIDL = Math.min(westOverIDL, lonAdjusted);\n    eastOverIDL = Math.max(eastOverIDL, lonAdjusted);\n  }\n\n  if (east - west > eastOverIDL - westOverIDL) {\n    west = westOverIDL;\n    east = eastOverIDL;\n\n    if (east > CesiumMath.PI) {\n      east = east - CesiumMath.TWO_PI;\n    }\n    if (west > CesiumMath.PI) {\n      west = west - CesiumMath.TWO_PI;\n    }\n  }\n\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n  return result;\n};\n\nconst fromBoundingSphereMatrixScratch = new Cartesian3();\nconst fromBoundingSphereEastScratch = new Cartesian3();\nconst fromBoundingSphereNorthScratch = new Cartesian3();\nconst fromBoundingSphereWestScratch = new Cartesian3();\nconst fromBoundingSphereSouthScratch = new Cartesian3();\nconst fromBoundingSpherePositionsScratch = new Array(5);\nfor (let n = 0; n < fromBoundingSpherePositionsScratch.length; ++n) {\n  fromBoundingSpherePositionsScratch[n] = new Cartesian3();\n}\n/**\n * Create a rectangle from a bounding sphere, ignoring height.\n *\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.fromBoundingSphere = function (boundingSphere, ellipsoid, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"boundingSphere\", boundingSphere);\n  //>>includeEnd('debug');\n\n  const center = boundingSphere.center;\n  const radius = boundingSphere.radius;\n\n  if (!defined(ellipsoid)) {\n    ellipsoid = Ellipsoid.default;\n  }\n\n  if (!defined(result)) {\n    result = new Rectangle();\n  }\n\n  if (Cartesian3.equals(center, Cartesian3.ZERO)) {\n    Rectangle.clone(Rectangle.MAX_VALUE, result);\n    return result;\n  }\n\n  const fromENU = Transforms.eastNorthUpToFixedFrame(\n    center,\n    ellipsoid,\n    fromBoundingSphereMatrixScratch,\n  );\n  const east = Matrix4.multiplyByPointAsVector(\n    fromENU,\n    Cartesian3.UNIT_X,\n    fromBoundingSphereEastScratch,\n  );\n  Cartesian3.normalize(east, east);\n  const north = Matrix4.multiplyByPointAsVector(\n    fromENU,\n    Cartesian3.UNIT_Y,\n    fromBoundingSphereNorthScratch,\n  );\n  Cartesian3.normalize(north, north);\n\n  Cartesian3.multiplyByScalar(north, radius, north);\n  Cartesian3.multiplyByScalar(east, radius, east);\n\n  const south = Cartesian3.negate(north, fromBoundingSphereSouthScratch);\n  const west = Cartesian3.negate(east, fromBoundingSphereWestScratch);\n\n  const positions = fromBoundingSpherePositionsScratch;\n\n  // North\n  let corner = positions[0];\n  Cartesian3.add(center, north, corner);\n\n  // West\n  corner = positions[1];\n  Cartesian3.add(center, west, corner);\n\n  // South\n  corner = positions[2];\n  Cartesian3.add(center, south, corner);\n\n  // East\n  corner = positions[3];\n  Cartesian3.add(center, east, corner);\n\n  positions[4] = center;\n\n  return Rectangle.fromCartesianArray(positions, ellipsoid, result);\n};\n\n/**\n * Duplicates a Rectangle.\n *\n * @param {Rectangle} rectangle The rectangle to clone.\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. (Returns undefined if rectangle is undefined)\n */\nRectangle.clone = function (rectangle, result) {\n  if (!defined(rectangle)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new Rectangle(\n      rectangle.west,\n      rectangle.south,\n      rectangle.east,\n      rectangle.north,\n    );\n  }\n\n  result.west = rectangle.west;\n  result.south = rectangle.south;\n  result.east = rectangle.east;\n  result.north = rectangle.north;\n  return result;\n};\n\n/**\n * Compares the provided Rectangles componentwise and returns\n * <code>true</code> if they pass an absolute or relative tolerance test,\n * <code>false</code> otherwise.\n *\n * @param {Rectangle} [left] The first Rectangle.\n * @param {Rectangle} [right] The second Rectangle.\n * @param {number} [absoluteEpsilon=0] The absolute epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if left and right are within the provided epsilon, <code>false</code> otherwise.\n */\nRectangle.equalsEpsilon = function (left, right, absoluteEpsilon) {\n  absoluteEpsilon = absoluteEpsilon ?? 0;\n\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(left.west - right.west) <= absoluteEpsilon &&\n      Math.abs(left.south - right.south) <= absoluteEpsilon &&\n      Math.abs(left.east - right.east) <= absoluteEpsilon &&\n      Math.abs(left.north - right.north) <= absoluteEpsilon)\n  );\n};\n\n/**\n * Duplicates this Rectangle.\n *\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.prototype.clone = function (result) {\n  return Rectangle.clone(this, result);\n};\n\n/**\n * Compares the provided Rectangle with this Rectangle componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Rectangle} [other] The Rectangle to compare.\n * @returns {boolean} <code>true</code> if the Rectangles are equal, <code>false</code> otherwise.\n */\nRectangle.prototype.equals = function (other) {\n  return Rectangle.equals(this, other);\n};\n\n/**\n * Compares the provided rectangles and returns <code>true</code> if they are equal,\n * <code>false</code> otherwise.\n *\n * @param {Rectangle} [left] The first Rectangle.\n * @param {Rectangle} [right] The second Rectangle.\n * @returns {boolean} <code>true</code> if left and right are equal; otherwise <code>false</code>.\n */\nRectangle.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.west === right.west &&\n      left.south === right.south &&\n      left.east === right.east &&\n      left.north === right.north)\n  );\n};\n\n/**\n * Compares the provided Rectangle with this Rectangle componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {Rectangle} [other] The Rectangle to compare.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @returns {boolean} <code>true</code> if the Rectangles are within the provided epsilon, <code>false</code> otherwise.\n */\nRectangle.prototype.equalsEpsilon = function (other, epsilon) {\n  return Rectangle.equalsEpsilon(this, other, epsilon);\n};\n\n/**\n * Checks a Rectangle's properties and throws if they are not in valid ranges.\n *\n * @param {Rectangle} rectangle The rectangle to validate\n *\n * @exception {DeveloperError} <code>north</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>south</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>east</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>west</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @private\n */\nRectangle._validate = function (rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n\n  const north = rectangle.north;\n  Check.typeOf.number.greaterThanOrEquals(\n    \"north\",\n    north,\n    -CesiumMath.PI_OVER_TWO,\n  );\n  Check.typeOf.number.lessThanOrEquals(\"north\", north, CesiumMath.PI_OVER_TWO);\n\n  const south = rectangle.south;\n  Check.typeOf.number.greaterThanOrEquals(\n    \"south\",\n    south,\n    -CesiumMath.PI_OVER_TWO,\n  );\n  Check.typeOf.number.lessThanOrEquals(\"south\", south, CesiumMath.PI_OVER_TWO);\n\n  const west = rectangle.west;\n  Check.typeOf.number.greaterThanOrEquals(\"west\", west, -Math.PI);\n  Check.typeOf.number.lessThanOrEquals(\"west\", west, Math.PI);\n\n  const east = rectangle.east;\n  Check.typeOf.number.greaterThanOrEquals(\"east\", east, -Math.PI);\n  Check.typeOf.number.lessThanOrEquals(\"east\", east, Math.PI);\n  //>>includeEnd('debug');\n};\n\n/**\n * Computes the southwest corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.southwest = function (rectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Cartographic(rectangle.west, rectangle.south);\n  }\n  result.longitude = rectangle.west;\n  result.latitude = rectangle.south;\n  result.height = 0.0;\n  return result;\n};\n\n/**\n * Computes the northwest corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.northwest = function (rectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Cartographic(rectangle.west, rectangle.north);\n  }\n  result.longitude = rectangle.west;\n  result.latitude = rectangle.north;\n  result.height = 0.0;\n  return result;\n};\n\n/**\n * Computes the northeast corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.northeast = function (rectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Cartographic(rectangle.east, rectangle.north);\n  }\n  result.longitude = rectangle.east;\n  result.latitude = rectangle.north;\n  result.height = 0.0;\n  return result;\n};\n\n/**\n * Computes the southeast corner of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the corner\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.southeast = function (rectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Cartographic(rectangle.east, rectangle.south);\n  }\n  result.longitude = rectangle.east;\n  result.latitude = rectangle.south;\n  result.height = 0.0;\n  return result;\n};\n\n/**\n * Computes the center of a rectangle.\n *\n * @param {Rectangle} rectangle The rectangle for which to find the center\n * @param {Cartographic} [result] The object onto which to store the result.\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\n */\nRectangle.center = function (rectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  let east = rectangle.east;\n  const west = rectangle.west;\n\n  if (east < west) {\n    east += CesiumMath.TWO_PI;\n  }\n\n  const longitude = CesiumMath.negativePiToPi((west + east) * 0.5);\n  const latitude = (rectangle.south + rectangle.north) * 0.5;\n\n  if (!defined(result)) {\n    return new Cartographic(longitude, latitude);\n  }\n\n  result.longitude = longitude;\n  result.latitude = latitude;\n  result.height = 0.0;\n  return result;\n};\n\n/**\n * Computes the intersection of two rectangles.  This function assumes that the rectangle's coordinates are\n * latitude and longitude in radians and produces a correct intersection, taking into account the fact that\n * the same angle can be represented with multiple values as well as the wrapping of longitude at the\n * anti-meridian.  For a simple intersection that ignores these factors and can be used with projected\n * coordinates, see {@link Rectangle.simpleIntersection}.\n *\n * @param {Rectangle} rectangle On rectangle to find an intersection\n * @param {Rectangle} otherRectangle Another rectangle to find an intersection\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection.\n */\nRectangle.intersection = function (rectangle, otherRectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Check.typeOf.object(\"otherRectangle\", otherRectangle);\n  //>>includeEnd('debug');\n\n  let rectangleEast = rectangle.east;\n  let rectangleWest = rectangle.west;\n\n  let otherRectangleEast = otherRectangle.east;\n  let otherRectangleWest = otherRectangle.west;\n\n  if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) {\n    rectangleEast += CesiumMath.TWO_PI;\n  } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) {\n    otherRectangleEast += CesiumMath.TWO_PI;\n  }\n\n  if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) {\n    otherRectangleWest += CesiumMath.TWO_PI;\n  } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) {\n    rectangleWest += CesiumMath.TWO_PI;\n  }\n\n  const west = CesiumMath.negativePiToPi(\n    Math.max(rectangleWest, otherRectangleWest),\n  );\n  const east = CesiumMath.negativePiToPi(\n    Math.min(rectangleEast, otherRectangleEast),\n  );\n\n  if (\n    (rectangle.west < rectangle.east ||\n      otherRectangle.west < otherRectangle.east) &&\n    east <= west\n  ) {\n    return undefined;\n  }\n\n  const south = Math.max(rectangle.south, otherRectangle.south);\n  const north = Math.min(rectangle.north, otherRectangle.north);\n\n  if (south >= north) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n  return result;\n};\n\n/**\n * Computes a simple intersection of two rectangles.  Unlike {@link Rectangle.intersection}, this function\n * does not attempt to put the angular coordinates into a consistent range or to account for crossing the\n * anti-meridian.  As such, it can be used for rectangles where the coordinates are not simply latitude\n * and longitude (i.e. projected coordinates).\n *\n * @param {Rectangle} rectangle On rectangle to find an intersection\n * @param {Rectangle} otherRectangle Another rectangle to find an intersection\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection.\n */\nRectangle.simpleIntersection = function (rectangle, otherRectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Check.typeOf.object(\"otherRectangle\", otherRectangle);\n  //>>includeEnd('debug');\n\n  const west = Math.max(rectangle.west, otherRectangle.west);\n  const south = Math.max(rectangle.south, otherRectangle.south);\n  const east = Math.min(rectangle.east, otherRectangle.east);\n  const north = Math.min(rectangle.north, otherRectangle.north);\n\n  if (south >= north || west >= east) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n  return result;\n};\n\n/**\n * Computes a rectangle that is the union of two rectangles.\n *\n * @param {Rectangle} rectangle A rectangle to enclose in rectangle.\n * @param {Rectangle} otherRectangle A rectangle to enclose in a rectangle.\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.union = function (rectangle, otherRectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Check.typeOf.object(\"otherRectangle\", otherRectangle);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Rectangle();\n  }\n\n  let rectangleEast = rectangle.east;\n  let rectangleWest = rectangle.west;\n\n  let otherRectangleEast = otherRectangle.east;\n  let otherRectangleWest = otherRectangle.west;\n\n  if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) {\n    rectangleEast += CesiumMath.TWO_PI;\n  } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) {\n    otherRectangleEast += CesiumMath.TWO_PI;\n  }\n\n  if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) {\n    otherRectangleWest += CesiumMath.TWO_PI;\n  } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) {\n    rectangleWest += CesiumMath.TWO_PI;\n  }\n\n  const west = CesiumMath.negativePiToPi(\n    Math.min(rectangleWest, otherRectangleWest),\n  );\n  const east = CesiumMath.negativePiToPi(\n    Math.max(rectangleEast, otherRectangleEast),\n  );\n\n  result.west = west;\n  result.south = Math.min(rectangle.south, otherRectangle.south);\n  result.east = east;\n  result.north = Math.max(rectangle.north, otherRectangle.north);\n\n  return result;\n};\n\n/**\n * Computes a rectangle by enlarging the provided rectangle until it contains the provided cartographic.\n *\n * @param {Rectangle} rectangle A rectangle to expand.\n * @param {Cartographic} cartographic A cartographic to enclose in a rectangle.\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided.\n */\nRectangle.expand = function (rectangle, cartographic, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Check.typeOf.object(\"cartographic\", cartographic);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Rectangle();\n  }\n\n  result.west = Math.min(rectangle.west, cartographic.longitude);\n  result.south = Math.min(rectangle.south, cartographic.latitude);\n  result.east = Math.max(rectangle.east, cartographic.longitude);\n  result.north = Math.max(rectangle.north, cartographic.latitude);\n\n  return result;\n};\n\n/**\n * Returns true if the cartographic is on or inside the rectangle, false otherwise.\n *\n * @param {Rectangle} rectangle The rectangle\n * @param {Cartographic} cartographic The cartographic to test.\n * @returns {boolean} true if the provided cartographic is inside the rectangle, false otherwise.\n */\nRectangle.contains = function (rectangle, cartographic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Check.typeOf.object(\"cartographic\", cartographic);\n  //>>includeEnd('debug');\n\n  let longitude = cartographic.longitude;\n  const latitude = cartographic.latitude;\n\n  const west = rectangle.west;\n  let east = rectangle.east;\n\n  if (east < west) {\n    east += CesiumMath.TWO_PI;\n    if (longitude < 0.0) {\n      longitude += CesiumMath.TWO_PI;\n    }\n  }\n  return (\n    (longitude > west ||\n      CesiumMath.equalsEpsilon(longitude, west, CesiumMath.EPSILON14)) &&\n    (longitude < east ||\n      CesiumMath.equalsEpsilon(longitude, east, CesiumMath.EPSILON14)) &&\n    latitude >= rectangle.south &&\n    latitude <= rectangle.north\n  );\n};\n\nconst subsampleLlaScratch = new Cartographic();\n/**\n * Samples a rectangle so that it includes a list of Cartesian points suitable for passing to\n * {@link BoundingSphere#fromPoints}.  Sampling is necessary to account\n * for rectangles that cover the poles or cross the equator.\n *\n * @param {Rectangle} rectangle The rectangle to subsample.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to use.\n * @param {number} [surfaceHeight=0.0] The height of the rectangle above the ellipsoid.\n * @param {Cartesian3[]} [result] The array of Cartesians onto which to store the result.\n * @returns {Cartesian3[]} The modified result parameter or a new Array of Cartesians instances if none was provided.\n */\nRectangle.subsample = function (rectangle, ellipsoid, surfaceHeight, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  surfaceHeight = surfaceHeight ?? 0.0;\n\n  if (!defined(result)) {\n    result = [];\n  }\n  let length = 0;\n\n  const north = rectangle.north;\n  const south = rectangle.south;\n  const east = rectangle.east;\n  const west = rectangle.west;\n\n  const lla = subsampleLlaScratch;\n  lla.height = surfaceHeight;\n\n  lla.longitude = west;\n  lla.latitude = north;\n  result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n  length++;\n\n  lla.longitude = east;\n  result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n  length++;\n\n  lla.latitude = south;\n  result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n  length++;\n\n  lla.longitude = west;\n  result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n  length++;\n\n  if (north < 0.0) {\n    lla.latitude = north;\n  } else if (south > 0.0) {\n    lla.latitude = south;\n  } else {\n    lla.latitude = 0.0;\n  }\n\n  for (let i = 1; i < 8; ++i) {\n    lla.longitude = -Math.PI + i * CesiumMath.PI_OVER_TWO;\n    if (Rectangle.contains(rectangle, lla)) {\n      result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n      length++;\n    }\n  }\n\n  if (lla.latitude === 0.0) {\n    lla.longitude = west;\n    result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n    length++;\n    lla.longitude = east;\n    result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\n    length++;\n  }\n  result.length = length;\n  return result;\n};\n\n/**\n * Computes a subsection of a rectangle from normalized coordinates in the range [0.0, 1.0].\n *\n * @param {Rectangle} rectangle The rectangle to subsection.\n * @param {number} westLerp The west interpolation factor in the range [0.0, 1.0]. Must be less than or equal to eastLerp.\n * @param {number} southLerp The south interpolation factor in the range [0.0, 1.0]. Must be less than or equal to northLerp.\n * @param {number} eastLerp The east interpolation factor in the range [0.0, 1.0]. Must be greater than or equal to westLerp.\n * @param {number} northLerp The north interpolation factor in the range [0.0, 1.0]. Must be greater than or equal to southLerp.\n * @param {Rectangle} [result] The object onto which to store the result.\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\n */\nRectangle.subsection = function (\n  rectangle,\n  westLerp,\n  southLerp,\n  eastLerp,\n  northLerp,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Check.typeOf.number.greaterThanOrEquals(\"westLerp\", westLerp, 0.0);\n  Check.typeOf.number.lessThanOrEquals(\"westLerp\", westLerp, 1.0);\n  Check.typeOf.number.greaterThanOrEquals(\"southLerp\", southLerp, 0.0);\n  Check.typeOf.number.lessThanOrEquals(\"southLerp\", southLerp, 1.0);\n  Check.typeOf.number.greaterThanOrEquals(\"eastLerp\", eastLerp, 0.0);\n  Check.typeOf.number.lessThanOrEquals(\"eastLerp\", eastLerp, 1.0);\n  Check.typeOf.number.greaterThanOrEquals(\"northLerp\", northLerp, 0.0);\n  Check.typeOf.number.lessThanOrEquals(\"northLerp\", northLerp, 1.0);\n\n  Check.typeOf.number.lessThanOrEquals(\"westLerp\", westLerp, eastLerp);\n  Check.typeOf.number.lessThanOrEquals(\"southLerp\", southLerp, northLerp);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Rectangle();\n  }\n\n  // This function doesn't use CesiumMath.lerp because it has floating point precision problems\n  // when the start and end values are the same but the t changes.\n\n  if (rectangle.west <= rectangle.east) {\n    const width = rectangle.east - rectangle.west;\n    result.west = rectangle.west + westLerp * width;\n    result.east = rectangle.west + eastLerp * width;\n  } else {\n    const width = CesiumMath.TWO_PI + rectangle.east - rectangle.west;\n    result.west = CesiumMath.negativePiToPi(rectangle.west + westLerp * width);\n    result.east = CesiumMath.negativePiToPi(rectangle.west + eastLerp * width);\n  }\n  const height = rectangle.north - rectangle.south;\n  result.south = rectangle.south + southLerp * height;\n  result.north = rectangle.south + northLerp * height;\n\n  // Fix floating point precision problems when t = 1\n  if (westLerp === 1.0) {\n    result.west = rectangle.east;\n  }\n  if (eastLerp === 1.0) {\n    result.east = rectangle.east;\n  }\n  if (southLerp === 1.0) {\n    result.south = rectangle.north;\n  }\n  if (northLerp === 1.0) {\n    result.north = rectangle.north;\n  }\n\n  return result;\n};\n\n/**\n * The largest possible rectangle.\n *\n * @type {Rectangle}\n * @constant\n */\nRectangle.MAX_VALUE = Object.freeze(\n  new Rectangle(\n    -Math.PI,\n    -CesiumMath.PI_OVER_TWO,\n    Math.PI,\n    CesiumMath.PI_OVER_TWO,\n  ),\n);\nexport default Rectangle;\n","import RBush from \"rbush\";\nimport Check from \"./Check.js\";\n\n/**\n * Wrapper around rbush for use with Rectangle types.\n * @private\n */\nfunction RectangleCollisionChecker() {\n  this._tree = new RBush();\n}\n\nfunction RectangleWithId() {\n  this.minX = 0.0;\n  this.minY = 0.0;\n  this.maxX = 0.0;\n  this.maxY = 0.0;\n  this.id = \"\";\n}\n\nRectangleWithId.fromRectangleAndId = function (id, rectangle, result) {\n  result.minX = rectangle.west;\n  result.minY = rectangle.south;\n  result.maxX = rectangle.east;\n  result.maxY = rectangle.north;\n  result.id = id;\n  return result;\n};\n\n/**\n * Insert a rectangle into the collision checker.\n *\n * @param {string} id Unique string ID for the rectangle being inserted.\n * @param {Rectangle} rectangle A Rectangle\n * @private\n */\nRectangleCollisionChecker.prototype.insert = function (id, rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"id\", id);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  const withId = RectangleWithId.fromRectangleAndId(\n    id,\n    rectangle,\n    new RectangleWithId(),\n  );\n  this._tree.insert(withId);\n};\n\nfunction idCompare(a, b) {\n  return a.id === b.id;\n}\n\nconst removalScratch = new RectangleWithId();\n/**\n * Remove a rectangle from the collision checker.\n *\n * @param {string} id Unique string ID for the rectangle being removed.\n * @param {Rectangle} rectangle A Rectangle\n * @private\n */\nRectangleCollisionChecker.prototype.remove = function (id, rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"id\", id);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  const withId = RectangleWithId.fromRectangleAndId(\n    id,\n    rectangle,\n    removalScratch,\n  );\n  this._tree.remove(withId, idCompare);\n};\n\nconst collisionScratch = new RectangleWithId();\n/**\n * Checks if a given rectangle collides with any of the rectangles in the collection.\n *\n * @param {Rectangle} rectangle A Rectangle that should be checked against the rectangles in the collision checker.\n * @returns {boolean} Whether the rectangle collides with any of the rectangles in the collision checker.\n */\nRectangleCollisionChecker.prototype.collides = function (rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  const withId = RectangleWithId.fromRectangleAndId(\n    \"\",\n    rectangle,\n    collisionScratch,\n  );\n  return this._tree.collides(withId);\n};\nexport default RectangleCollisionChecker;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryInstance from \"./GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport GeometryPipeline from \"./GeometryPipeline.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix2 from \"./Matrix2.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport RectangleGeometryLibrary from \"./RectangleGeometryLibrary.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\nconst positionScratch = new Cartesian3();\nconst normalScratch = new Cartesian3();\nconst tangentScratch = new Cartesian3();\nconst bitangentScratch = new Cartesian3();\nconst rectangleScratch = new Rectangle();\nconst stScratch = new Cartesian2();\nconst bottomBoundingSphere = new BoundingSphere();\nconst topBoundingSphere = new BoundingSphere();\n\nfunction createAttributes(vertexFormat, attributes) {\n  const geo = new Geometry({\n    attributes: new GeometryAttributes(),\n    primitiveType: PrimitiveType.TRIANGLES,\n  });\n\n  geo.attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: attributes.positions,\n  });\n  if (vertexFormat.normal) {\n    geo.attributes.normal = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: attributes.normals,\n    });\n  }\n  if (vertexFormat.tangent) {\n    geo.attributes.tangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: attributes.tangents,\n    });\n  }\n  if (vertexFormat.bitangent) {\n    geo.attributes.bitangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: attributes.bitangents,\n    });\n  }\n  return geo;\n}\n\nfunction calculateAttributes(\n  positions,\n  vertexFormat,\n  ellipsoid,\n  tangentRotationMatrix,\n) {\n  const length = positions.length;\n\n  const normals = vertexFormat.normal ? new Float32Array(length) : undefined;\n  const tangents = vertexFormat.tangent ? new Float32Array(length) : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(length)\n    : undefined;\n\n  let attrIndex = 0;\n  const bitangent = bitangentScratch;\n  const tangent = tangentScratch;\n  let normal = normalScratch;\n  if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n    for (let i = 0; i < length; i += 3) {\n      const p = Cartesian3.fromArray(positions, i, positionScratch);\n      const attrIndex1 = attrIndex + 1;\n      const attrIndex2 = attrIndex + 2;\n\n      normal = ellipsoid.geodeticSurfaceNormal(p, normal);\n      if (vertexFormat.tangent || vertexFormat.bitangent) {\n        Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent);\n        Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent);\n        Cartesian3.normalize(tangent, tangent);\n\n        if (vertexFormat.bitangent) {\n          Cartesian3.normalize(\n            Cartesian3.cross(normal, tangent, bitangent),\n            bitangent,\n          );\n        }\n      }\n\n      if (vertexFormat.normal) {\n        normals[attrIndex] = normal.x;\n        normals[attrIndex1] = normal.y;\n        normals[attrIndex2] = normal.z;\n      }\n      if (vertexFormat.tangent) {\n        tangents[attrIndex] = tangent.x;\n        tangents[attrIndex1] = tangent.y;\n        tangents[attrIndex2] = tangent.z;\n      }\n      if (vertexFormat.bitangent) {\n        bitangents[attrIndex] = bitangent.x;\n        bitangents[attrIndex1] = bitangent.y;\n        bitangents[attrIndex2] = bitangent.z;\n      }\n      attrIndex += 3;\n    }\n  }\n  return createAttributes(vertexFormat, {\n    positions: positions,\n    normals: normals,\n    tangents: tangents,\n    bitangents: bitangents,\n  });\n}\n\nconst v1Scratch = new Cartesian3();\nconst v2Scratch = new Cartesian3();\n\nfunction calculateAttributesWall(positions, vertexFormat, ellipsoid) {\n  const length = positions.length;\n\n  const normals = vertexFormat.normal ? new Float32Array(length) : undefined;\n  const tangents = vertexFormat.tangent ? new Float32Array(length) : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(length)\n    : undefined;\n\n  let normalIndex = 0;\n  let tangentIndex = 0;\n  let bitangentIndex = 0;\n  let recomputeNormal = true;\n\n  let bitangent = bitangentScratch;\n  let tangent = tangentScratch;\n  let normal = normalScratch;\n  if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n    for (let i = 0; i < length; i += 6) {\n      const p = Cartesian3.fromArray(positions, i, positionScratch);\n      const p1 = Cartesian3.fromArray(positions, (i + 6) % length, v1Scratch);\n      if (recomputeNormal) {\n        const p2 = Cartesian3.fromArray(positions, (i + 3) % length, v2Scratch);\n        Cartesian3.subtract(p1, p, p1);\n        Cartesian3.subtract(p2, p, p2);\n        normal = Cartesian3.normalize(Cartesian3.cross(p2, p1, normal), normal);\n        recomputeNormal = false;\n      }\n\n      if (Cartesian3.equalsEpsilon(p1, p, CesiumMath.EPSILON10)) {\n        // if we've reached a corner\n        recomputeNormal = true;\n      }\n\n      if (vertexFormat.tangent || vertexFormat.bitangent) {\n        bitangent = ellipsoid.geodeticSurfaceNormal(p, bitangent);\n        if (vertexFormat.tangent) {\n          tangent = Cartesian3.normalize(\n            Cartesian3.cross(bitangent, normal, tangent),\n            tangent,\n          );\n        }\n      }\n\n      if (vertexFormat.normal) {\n        normals[normalIndex++] = normal.x;\n        normals[normalIndex++] = normal.y;\n        normals[normalIndex++] = normal.z;\n        normals[normalIndex++] = normal.x;\n        normals[normalIndex++] = normal.y;\n        normals[normalIndex++] = normal.z;\n      }\n\n      if (vertexFormat.tangent) {\n        tangents[tangentIndex++] = tangent.x;\n        tangents[tangentIndex++] = tangent.y;\n        tangents[tangentIndex++] = tangent.z;\n        tangents[tangentIndex++] = tangent.x;\n        tangents[tangentIndex++] = tangent.y;\n        tangents[tangentIndex++] = tangent.z;\n      }\n\n      if (vertexFormat.bitangent) {\n        bitangents[bitangentIndex++] = bitangent.x;\n        bitangents[bitangentIndex++] = bitangent.y;\n        bitangents[bitangentIndex++] = bitangent.z;\n        bitangents[bitangentIndex++] = bitangent.x;\n        bitangents[bitangentIndex++] = bitangent.y;\n        bitangents[bitangentIndex++] = bitangent.z;\n      }\n    }\n  }\n\n  return createAttributes(vertexFormat, {\n    positions: positions,\n    normals: normals,\n    tangents: tangents,\n    bitangents: bitangents,\n  });\n}\n\nfunction constructRectangle(rectangleGeometry, computedOptions) {\n  const vertexFormat = rectangleGeometry._vertexFormat;\n  const ellipsoid = rectangleGeometry._ellipsoid;\n  const height = computedOptions.height;\n  const width = computedOptions.width;\n  const northCap = computedOptions.northCap;\n  const southCap = computedOptions.southCap;\n\n  let rowStart = 0;\n  let rowEnd = height;\n  let rowHeight = height;\n  let size = 0;\n  if (northCap) {\n    rowStart = 1;\n    rowHeight -= 1;\n    size += 1;\n  }\n  if (southCap) {\n    rowEnd -= 1;\n    rowHeight -= 1;\n    size += 1;\n  }\n  size += width * rowHeight;\n\n  const positions = vertexFormat.position\n    ? new Float64Array(size * 3)\n    : undefined;\n  const textureCoordinates = vertexFormat.st\n    ? new Float32Array(size * 2)\n    : undefined;\n\n  let posIndex = 0;\n  let stIndex = 0;\n\n  const position = positionScratch;\n  const st = stScratch;\n\n  let minX = Number.MAX_VALUE;\n  let minY = Number.MAX_VALUE;\n  let maxX = -Number.MAX_VALUE;\n  let maxY = -Number.MAX_VALUE;\n\n  for (let row = rowStart; row < rowEnd; ++row) {\n    for (let col = 0; col < width; ++col) {\n      RectangleGeometryLibrary.computePosition(\n        computedOptions,\n        ellipsoid,\n        vertexFormat.st,\n        row,\n        col,\n        position,\n        st,\n      );\n\n      positions[posIndex++] = position.x;\n      positions[posIndex++] = position.y;\n      positions[posIndex++] = position.z;\n\n      if (vertexFormat.st) {\n        textureCoordinates[stIndex++] = st.x;\n        textureCoordinates[stIndex++] = st.y;\n\n        minX = Math.min(minX, st.x);\n        minY = Math.min(minY, st.y);\n        maxX = Math.max(maxX, st.x);\n        maxY = Math.max(maxY, st.y);\n      }\n    }\n  }\n  if (northCap) {\n    RectangleGeometryLibrary.computePosition(\n      computedOptions,\n      ellipsoid,\n      vertexFormat.st,\n      0,\n      0,\n      position,\n      st,\n    );\n\n    positions[posIndex++] = position.x;\n    positions[posIndex++] = position.y;\n    positions[posIndex++] = position.z;\n\n    if (vertexFormat.st) {\n      textureCoordinates[stIndex++] = st.x;\n      textureCoordinates[stIndex++] = st.y;\n\n      minX = st.x;\n      minY = st.y;\n      maxX = st.x;\n      maxY = st.y;\n    }\n  }\n  if (southCap) {\n    RectangleGeometryLibrary.computePosition(\n      computedOptions,\n      ellipsoid,\n      vertexFormat.st,\n      height - 1,\n      0,\n      position,\n      st,\n    );\n\n    positions[posIndex++] = position.x;\n    positions[posIndex++] = position.y;\n    positions[posIndex] = position.z;\n\n    if (vertexFormat.st) {\n      textureCoordinates[stIndex++] = st.x;\n      textureCoordinates[stIndex] = st.y;\n\n      minX = Math.min(minX, st.x);\n      minY = Math.min(minY, st.y);\n      maxX = Math.max(maxX, st.x);\n      maxY = Math.max(maxY, st.y);\n    }\n  }\n\n  if (\n    vertexFormat.st &&\n    (minX < 0.0 || minY < 0.0 || maxX > 1.0 || maxY > 1.0)\n  ) {\n    for (let k = 0; k < textureCoordinates.length; k += 2) {\n      textureCoordinates[k] = (textureCoordinates[k] - minX) / (maxX - minX);\n      textureCoordinates[k + 1] =\n        (textureCoordinates[k + 1] - minY) / (maxY - minY);\n    }\n  }\n\n  const geo = calculateAttributes(\n    positions,\n    vertexFormat,\n    ellipsoid,\n    computedOptions.tangentRotationMatrix,\n  );\n\n  let indicesSize = 6 * (width - 1) * (rowHeight - 1);\n  if (northCap) {\n    indicesSize += 3 * (width - 1);\n  }\n  if (southCap) {\n    indicesSize += 3 * (width - 1);\n  }\n  const indices = IndexDatatype.createTypedArray(size, indicesSize);\n  let index = 0;\n  let indicesIndex = 0;\n  let i;\n  for (i = 0; i < rowHeight - 1; ++i) {\n    for (let j = 0; j < width - 1; ++j) {\n      const upperLeft = index;\n      const lowerLeft = upperLeft + width;\n      const lowerRight = lowerLeft + 1;\n      const upperRight = upperLeft + 1;\n      indices[indicesIndex++] = upperLeft;\n      indices[indicesIndex++] = lowerLeft;\n      indices[indicesIndex++] = upperRight;\n      indices[indicesIndex++] = upperRight;\n      indices[indicesIndex++] = lowerLeft;\n      indices[indicesIndex++] = lowerRight;\n      ++index;\n    }\n    ++index;\n  }\n  if (northCap || southCap) {\n    let northIndex = size - 1;\n    const southIndex = size - 1;\n    if (northCap && southCap) {\n      northIndex = size - 2;\n    }\n\n    let p1;\n    let p2;\n    index = 0;\n\n    if (northCap) {\n      for (i = 0; i < width - 1; i++) {\n        p1 = index;\n        p2 = p1 + 1;\n        indices[indicesIndex++] = northIndex;\n        indices[indicesIndex++] = p1;\n        indices[indicesIndex++] = p2;\n        ++index;\n      }\n    }\n    if (southCap) {\n      index = (rowHeight - 1) * width;\n      for (i = 0; i < width - 1; i++) {\n        p1 = index;\n        p2 = p1 + 1;\n        indices[indicesIndex++] = p1;\n        indices[indicesIndex++] = southIndex;\n        indices[indicesIndex++] = p2;\n        ++index;\n      }\n    }\n  }\n\n  geo.indices = indices;\n  if (vertexFormat.st) {\n    geo.attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: textureCoordinates,\n    });\n  }\n\n  return geo;\n}\n\nfunction addWallPositions(\n  wallPositions,\n  posIndex,\n  i,\n  topPositions,\n  bottomPositions,\n) {\n  wallPositions[posIndex++] = topPositions[i];\n  wallPositions[posIndex++] = topPositions[i + 1];\n  wallPositions[posIndex++] = topPositions[i + 2];\n  wallPositions[posIndex++] = bottomPositions[i];\n  wallPositions[posIndex++] = bottomPositions[i + 1];\n  wallPositions[posIndex] = bottomPositions[i + 2];\n  return wallPositions;\n}\n\nfunction addWallTextureCoordinates(wallTextures, stIndex, i, st) {\n  wallTextures[stIndex++] = st[i];\n  wallTextures[stIndex++] = st[i + 1];\n  wallTextures[stIndex++] = st[i];\n  wallTextures[stIndex] = st[i + 1];\n  return wallTextures;\n}\n\nconst scratchVertexFormat = new VertexFormat();\n\nfunction constructExtrudedRectangle(rectangleGeometry, computedOptions) {\n  const shadowVolume = rectangleGeometry._shadowVolume;\n  const offsetAttributeValue = rectangleGeometry._offsetAttribute;\n  const vertexFormat = rectangleGeometry._vertexFormat;\n  const minHeight = rectangleGeometry._extrudedHeight;\n  const maxHeight = rectangleGeometry._surfaceHeight;\n  const ellipsoid = rectangleGeometry._ellipsoid;\n\n  const height = computedOptions.height;\n  const width = computedOptions.width;\n\n  let i;\n\n  if (shadowVolume) {\n    const newVertexFormat = VertexFormat.clone(\n      vertexFormat,\n      scratchVertexFormat,\n    );\n    newVertexFormat.normal = true;\n    rectangleGeometry._vertexFormat = newVertexFormat;\n  }\n\n  const topBottomGeo = constructRectangle(rectangleGeometry, computedOptions);\n\n  if (shadowVolume) {\n    rectangleGeometry._vertexFormat = vertexFormat;\n  }\n\n  let topPositions = PolygonPipeline.scaleToGeodeticHeight(\n    topBottomGeo.attributes.position.values,\n    maxHeight,\n    ellipsoid,\n    false,\n  );\n  topPositions = new Float64Array(topPositions);\n  let length = topPositions.length;\n  const newLength = length * 2;\n  const positions = new Float64Array(newLength);\n  positions.set(topPositions);\n  const bottomPositions = PolygonPipeline.scaleToGeodeticHeight(\n    topBottomGeo.attributes.position.values,\n    minHeight,\n    ellipsoid,\n  );\n  positions.set(bottomPositions, length);\n  topBottomGeo.attributes.position.values = positions;\n\n  const normals = vertexFormat.normal ? new Float32Array(newLength) : undefined;\n  const tangents = vertexFormat.tangent\n    ? new Float32Array(newLength)\n    : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(newLength)\n    : undefined;\n  const textures = vertexFormat.st\n    ? new Float32Array((newLength / 3) * 2)\n    : undefined;\n  let topSt;\n  let topNormals;\n  if (vertexFormat.normal) {\n    topNormals = topBottomGeo.attributes.normal.values;\n    normals.set(topNormals);\n    for (i = 0; i < length; i++) {\n      topNormals[i] = -topNormals[i];\n    }\n    normals.set(topNormals, length);\n    topBottomGeo.attributes.normal.values = normals;\n  }\n  if (shadowVolume) {\n    topNormals = topBottomGeo.attributes.normal.values;\n    if (!vertexFormat.normal) {\n      topBottomGeo.attributes.normal = undefined;\n    }\n    const extrudeNormals = new Float32Array(newLength);\n    for (i = 0; i < length; i++) {\n      topNormals[i] = -topNormals[i];\n    }\n    extrudeNormals.set(topNormals, length); //only get normals for bottom layer that's going to be pushed down\n    topBottomGeo.attributes.extrudeDirection = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: extrudeNormals,\n    });\n  }\n\n  let offsetValue;\n  const hasOffsets = defined(offsetAttributeValue);\n  if (hasOffsets) {\n    const size = (length / 3) * 2;\n    let offsetAttribute = new Uint8Array(size);\n    if (offsetAttributeValue === GeometryOffsetAttribute.TOP) {\n      offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\n    } else {\n      offsetValue =\n        offsetAttributeValue === GeometryOffsetAttribute.NONE ? 0 : 1;\n      offsetAttribute = offsetAttribute.fill(offsetValue);\n    }\n\n    topBottomGeo.attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: offsetAttribute,\n    });\n  }\n\n  if (vertexFormat.tangent) {\n    const topTangents = topBottomGeo.attributes.tangent.values;\n    tangents.set(topTangents);\n    for (i = 0; i < length; i++) {\n      topTangents[i] = -topTangents[i];\n    }\n    tangents.set(topTangents, length);\n    topBottomGeo.attributes.tangent.values = tangents;\n  }\n  if (vertexFormat.bitangent) {\n    const topBitangents = topBottomGeo.attributes.bitangent.values;\n    bitangents.set(topBitangents);\n    bitangents.set(topBitangents, length);\n    topBottomGeo.attributes.bitangent.values = bitangents;\n  }\n  if (vertexFormat.st) {\n    topSt = topBottomGeo.attributes.st.values;\n    textures.set(topSt);\n    textures.set(topSt, (length / 3) * 2);\n    topBottomGeo.attributes.st.values = textures;\n  }\n\n  const indices = topBottomGeo.indices;\n  const indicesLength = indices.length;\n  const posLength = length / 3;\n  const newIndices = IndexDatatype.createTypedArray(\n    newLength / 3,\n    indicesLength * 2,\n  );\n  newIndices.set(indices);\n  for (i = 0; i < indicesLength; i += 3) {\n    newIndices[i + indicesLength] = indices[i + 2] + posLength;\n    newIndices[i + 1 + indicesLength] = indices[i + 1] + posLength;\n    newIndices[i + 2 + indicesLength] = indices[i] + posLength;\n  }\n  topBottomGeo.indices = newIndices;\n\n  const northCap = computedOptions.northCap;\n  const southCap = computedOptions.southCap;\n\n  let rowHeight = height;\n  let widthMultiplier = 2;\n  let perimeterPositions = 0;\n  let corners = 4;\n  let dupliateCorners = 4;\n  if (northCap) {\n    widthMultiplier -= 1;\n    rowHeight -= 1;\n    perimeterPositions += 1;\n    corners -= 2;\n    dupliateCorners -= 1;\n  }\n  if (southCap) {\n    widthMultiplier -= 1;\n    rowHeight -= 1;\n    perimeterPositions += 1;\n    corners -= 2;\n    dupliateCorners -= 1;\n  }\n  perimeterPositions += widthMultiplier * width + 2 * rowHeight - corners;\n\n  const wallCount = (perimeterPositions + dupliateCorners) * 2;\n\n  let wallPositions = new Float64Array(wallCount * 3);\n  const wallExtrudeNormals = shadowVolume\n    ? new Float32Array(wallCount * 3)\n    : undefined;\n  let wallOffsetAttribute = hasOffsets ? new Uint8Array(wallCount) : undefined;\n  let wallTextures = vertexFormat.st\n    ? new Float32Array(wallCount * 2)\n    : undefined;\n\n  const computeTopOffsets =\n    offsetAttributeValue === GeometryOffsetAttribute.TOP;\n  if (hasOffsets && !computeTopOffsets) {\n    offsetValue = offsetAttributeValue === GeometryOffsetAttribute.ALL ? 1 : 0;\n    wallOffsetAttribute = wallOffsetAttribute.fill(offsetValue);\n  }\n\n  let posIndex = 0;\n  let stIndex = 0;\n  let extrudeNormalIndex = 0;\n  let wallOffsetIndex = 0;\n  const area = width * rowHeight;\n  let threeI;\n  for (i = 0; i < area; i += width) {\n    threeI = i * 3;\n    wallPositions = addWallPositions(\n      wallPositions,\n      posIndex,\n      threeI,\n      topPositions,\n      bottomPositions,\n    );\n    posIndex += 6;\n    if (vertexFormat.st) {\n      wallTextures = addWallTextureCoordinates(\n        wallTextures,\n        stIndex,\n        i * 2,\n        topSt,\n      );\n      stIndex += 4;\n    }\n    if (shadowVolume) {\n      extrudeNormalIndex += 3;\n      wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n      wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n      wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n    }\n    if (computeTopOffsets) {\n      wallOffsetAttribute[wallOffsetIndex++] = 1;\n      wallOffsetIndex += 1;\n    }\n  }\n\n  if (!southCap) {\n    for (i = area - width; i < area; i++) {\n      threeI = i * 3;\n      wallPositions = addWallPositions(\n        wallPositions,\n        posIndex,\n        threeI,\n        topPositions,\n        bottomPositions,\n      );\n      posIndex += 6;\n      if (vertexFormat.st) {\n        wallTextures = addWallTextureCoordinates(\n          wallTextures,\n          stIndex,\n          i * 2,\n          topSt,\n        );\n        stIndex += 4;\n      }\n      if (shadowVolume) {\n        extrudeNormalIndex += 3;\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n      }\n      if (computeTopOffsets) {\n        wallOffsetAttribute[wallOffsetIndex++] = 1;\n        wallOffsetIndex += 1;\n      }\n    }\n  } else {\n    const southIndex = northCap ? area + 1 : area;\n    threeI = southIndex * 3;\n\n    for (i = 0; i < 2; i++) {\n      // duplicate corner points\n      wallPositions = addWallPositions(\n        wallPositions,\n        posIndex,\n        threeI,\n        topPositions,\n        bottomPositions,\n      );\n      posIndex += 6;\n      if (vertexFormat.st) {\n        wallTextures = addWallTextureCoordinates(\n          wallTextures,\n          stIndex,\n          southIndex * 2,\n          topSt,\n        );\n        stIndex += 4;\n      }\n      if (shadowVolume) {\n        extrudeNormalIndex += 3;\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n      }\n      if (computeTopOffsets) {\n        wallOffsetAttribute[wallOffsetIndex++] = 1;\n        wallOffsetIndex += 1;\n      }\n    }\n  }\n\n  for (i = area - 1; i > 0; i -= width) {\n    threeI = i * 3;\n    wallPositions = addWallPositions(\n      wallPositions,\n      posIndex,\n      threeI,\n      topPositions,\n      bottomPositions,\n    );\n    posIndex += 6;\n    if (vertexFormat.st) {\n      wallTextures = addWallTextureCoordinates(\n        wallTextures,\n        stIndex,\n        i * 2,\n        topSt,\n      );\n      stIndex += 4;\n    }\n    if (shadowVolume) {\n      extrudeNormalIndex += 3;\n      wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n      wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n      wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n    }\n    if (computeTopOffsets) {\n      wallOffsetAttribute[wallOffsetIndex++] = 1;\n      wallOffsetIndex += 1;\n    }\n  }\n\n  if (!northCap) {\n    for (i = width - 1; i >= 0; i--) {\n      threeI = i * 3;\n      wallPositions = addWallPositions(\n        wallPositions,\n        posIndex,\n        threeI,\n        topPositions,\n        bottomPositions,\n      );\n      posIndex += 6;\n      if (vertexFormat.st) {\n        wallTextures = addWallTextureCoordinates(\n          wallTextures,\n          stIndex,\n          i * 2,\n          topSt,\n        );\n        stIndex += 4;\n      }\n      if (shadowVolume) {\n        extrudeNormalIndex += 3;\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n      }\n      if (computeTopOffsets) {\n        wallOffsetAttribute[wallOffsetIndex++] = 1;\n        wallOffsetIndex += 1;\n      }\n    }\n  } else {\n    const northIndex = area;\n    threeI = northIndex * 3;\n\n    for (i = 0; i < 2; i++) {\n      // duplicate corner points\n      wallPositions = addWallPositions(\n        wallPositions,\n        posIndex,\n        threeI,\n        topPositions,\n        bottomPositions,\n      );\n      posIndex += 6;\n      if (vertexFormat.st) {\n        wallTextures = addWallTextureCoordinates(\n          wallTextures,\n          stIndex,\n          northIndex * 2,\n          topSt,\n        );\n        stIndex += 4;\n      }\n      if (shadowVolume) {\n        extrudeNormalIndex += 3;\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\n        wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\n      }\n      if (computeTopOffsets) {\n        wallOffsetAttribute[wallOffsetIndex++] = 1;\n        wallOffsetIndex += 1;\n      }\n    }\n  }\n\n  let geo = calculateAttributesWall(wallPositions, vertexFormat, ellipsoid);\n\n  if (vertexFormat.st) {\n    geo.attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: wallTextures,\n    });\n  }\n  if (shadowVolume) {\n    geo.attributes.extrudeDirection = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: wallExtrudeNormals,\n    });\n  }\n  if (hasOffsets) {\n    geo.attributes.applyOffset = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 1,\n      values: wallOffsetAttribute,\n    });\n  }\n\n  const wallIndices = IndexDatatype.createTypedArray(\n    wallCount,\n    perimeterPositions * 6,\n  );\n\n  let upperLeft;\n  let lowerLeft;\n  let lowerRight;\n  let upperRight;\n  length = wallPositions.length / 3;\n  let index = 0;\n  for (i = 0; i < length - 1; i += 2) {\n    upperLeft = i;\n    upperRight = (upperLeft + 2) % length;\n    const p1 = Cartesian3.fromArray(wallPositions, upperLeft * 3, v1Scratch);\n    const p2 = Cartesian3.fromArray(wallPositions, upperRight * 3, v2Scratch);\n    if (Cartesian3.equalsEpsilon(p1, p2, CesiumMath.EPSILON10)) {\n      continue;\n    }\n    lowerLeft = (upperLeft + 1) % length;\n    lowerRight = (lowerLeft + 2) % length;\n    wallIndices[index++] = upperLeft;\n    wallIndices[index++] = lowerLeft;\n    wallIndices[index++] = upperRight;\n    wallIndices[index++] = upperRight;\n    wallIndices[index++] = lowerLeft;\n    wallIndices[index++] = lowerRight;\n  }\n\n  geo.indices = wallIndices;\n\n  geo = GeometryPipeline.combineInstances([\n    new GeometryInstance({\n      geometry: topBottomGeo,\n    }),\n    new GeometryInstance({\n      geometry: geo,\n    }),\n  ]);\n\n  return geo[0];\n}\n\nconst scratchRectanglePoints = [\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n];\nconst nwScratch = new Cartographic();\nconst stNwScratch = new Cartographic();\nfunction computeRectangle(rectangle, granularity, rotation, ellipsoid, result) {\n  if (rotation === 0.0) {\n    return Rectangle.clone(rectangle, result);\n  }\n\n  const computedOptions = RectangleGeometryLibrary.computeOptions(\n    rectangle,\n    granularity,\n    rotation,\n    0,\n    rectangleScratch,\n    nwScratch,\n  );\n\n  const height = computedOptions.height;\n  const width = computedOptions.width;\n\n  const positions = scratchRectanglePoints;\n  RectangleGeometryLibrary.computePosition(\n    computedOptions,\n    ellipsoid,\n    false,\n    0,\n    0,\n    positions[0],\n  );\n  RectangleGeometryLibrary.computePosition(\n    computedOptions,\n    ellipsoid,\n    false,\n    0,\n    width - 1,\n    positions[1],\n  );\n  RectangleGeometryLibrary.computePosition(\n    computedOptions,\n    ellipsoid,\n    false,\n    height - 1,\n    0,\n    positions[2],\n  );\n  RectangleGeometryLibrary.computePosition(\n    computedOptions,\n    ellipsoid,\n    false,\n    height - 1,\n    width - 1,\n    positions[3],\n  );\n\n  return Rectangle.fromCartesianArray(positions, ellipsoid, result);\n}\n\n/**\n * A description of a cartographic rectangle on an ellipsoid centered at the origin. Rectangle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\n *\n * @alias RectangleGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid on which the rectangle lies.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface.\n * @param {number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\n * @param {number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\n * @param {number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface.\n *\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.south</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.east</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.west</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be greater than <code>options.rectangle.south</code>.\n *\n * @see RectangleGeometry#createGeometry\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=rectangle|Cesium Sandcastle Rectangle Demo}\n *\n * @example\n * // 1. create a rectangle\n * const rectangle = new Cesium.RectangleGeometry({\n *   ellipsoid : Cesium.Ellipsoid.default,\n *   rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\n *   height : 10000.0\n * });\n * const geometry = Cesium.RectangleGeometry.createGeometry(rectangle);\n *\n * // 2. create an extruded rectangle without a top\n * const rectangle = new Cesium.RectangleGeometry({\n *   ellipsoid : Cesium.Ellipsoid.default,\n *   rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\n *   height : 10000.0,\n *   extrudedHeight: 300000\n * });\n * const geometry = Cesium.RectangleGeometry.createGeometry(rectangle);\n */\nfunction RectangleGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const rectangle = options.rectangle;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Rectangle._validate(rectangle);\n  if (rectangle.north < rectangle.south) {\n    throw new DeveloperError(\n      \"options.rectangle.north must be greater than or equal to options.rectangle.south\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const height = options.height ?? 0.0;\n  const extrudedHeight = options.extrudedHeight ?? height;\n\n  this._rectangle = Rectangle.clone(rectangle);\n  this._granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  this._ellipsoid = Ellipsoid.clone(options.ellipsoid ?? Ellipsoid.default);\n  this._surfaceHeight = Math.max(height, extrudedHeight);\n  this._rotation = options.rotation ?? 0.0;\n  this._stRotation = options.stRotation ?? 0.0;\n  this._vertexFormat = VertexFormat.clone(\n    options.vertexFormat ?? VertexFormat.DEFAULT,\n  );\n  this._extrudedHeight = Math.min(height, extrudedHeight);\n  this._shadowVolume = options.shadowVolume ?? false;\n  this._workerName = \"createRectangleGeometry\";\n  this._offsetAttribute = options.offsetAttribute;\n  this._rotatedRectangle = undefined;\n\n  this._textureCoordinateRotationPoints = undefined;\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nRectangleGeometry.packedLength =\n  Rectangle.packedLength +\n  Ellipsoid.packedLength +\n  VertexFormat.packedLength +\n  7;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {RectangleGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nRectangleGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Rectangle.pack(value._rectangle, array, startingIndex);\n  startingIndex += Rectangle.packedLength;\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex++] = value._granularity;\n  array[startingIndex++] = value._surfaceHeight;\n  array[startingIndex++] = value._rotation;\n  array[startingIndex++] = value._stRotation;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchRectangle = new Rectangle();\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchOptions = {\n  rectangle: scratchRectangle,\n  ellipsoid: scratchEllipsoid,\n  vertexFormat: scratchVertexFormat,\n  granularity: undefined,\n  height: undefined,\n  rotation: undefined,\n  stRotation: undefined,\n  extrudedHeight: undefined,\n  shadowVolume: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {RectangleGeometry} [result] The object into which to store the result.\n * @returns {RectangleGeometry} The modified result parameter or a new RectangleGeometry instance if one was not provided.\n */\nRectangleGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const rectangle = Rectangle.unpack(array, startingIndex, scratchRectangle);\n  startingIndex += Rectangle.packedLength;\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const granularity = array[startingIndex++];\n  const surfaceHeight = array[startingIndex++];\n  const rotation = array[startingIndex++];\n  const stRotation = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const shadowVolume = array[startingIndex++] === 1.0;\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.granularity = granularity;\n    scratchOptions.height = surfaceHeight;\n    scratchOptions.rotation = rotation;\n    scratchOptions.stRotation = stRotation;\n    scratchOptions.extrudedHeight = extrudedHeight;\n    scratchOptions.shadowVolume = shadowVolume;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n\n    return new RectangleGeometry(scratchOptions);\n  }\n\n  result._rectangle = Rectangle.clone(rectangle, result._rectangle);\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._granularity = granularity;\n  result._surfaceHeight = surfaceHeight;\n  result._rotation = rotation;\n  result._stRotation = stRotation;\n  result._extrudedHeight = extrudedHeight;\n  result._shadowVolume = shadowVolume;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\n/**\n * Computes the bounding rectangle based on the provided options\n *\n * @param {object} options Object with the following properties:\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid on which the rectangle lies.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\n * @param {Rectangle} [result] An object in which to store the result.\n *\n * @returns {Rectangle} The result rectangle\n */\nRectangleGeometry.computeRectangle = function (options, result) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const rectangle = options.rectangle;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  Rectangle._validate(rectangle);\n  if (rectangle.north < rectangle.south) {\n    throw new DeveloperError(\n      \"options.rectangle.north must be greater than or equal to options.rectangle.south\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const rotation = options.rotation ?? 0.0;\n\n  return computeRectangle(rectangle, granularity, rotation, ellipsoid, result);\n};\n\nconst tangentRotationMatrixScratch = new Matrix3();\nconst quaternionScratch = new Quaternion();\nconst centerScratch = new Cartographic();\n/**\n * Computes the geometric representation of a rectangle, including its vertices, indices, and a bounding sphere.\n *\n * @param {RectangleGeometry} rectangleGeometry A description of the rectangle.\n * @returns {Geometry|undefined} The computed vertices and indices.\n *\n * @exception {DeveloperError} Rotated rectangle is invalid.\n */\nRectangleGeometry.createGeometry = function (rectangleGeometry) {\n  if (\n    CesiumMath.equalsEpsilon(\n      rectangleGeometry._rectangle.north,\n      rectangleGeometry._rectangle.south,\n      CesiumMath.EPSILON10,\n    ) ||\n    CesiumMath.equalsEpsilon(\n      rectangleGeometry._rectangle.east,\n      rectangleGeometry._rectangle.west,\n      CesiumMath.EPSILON10,\n    )\n  ) {\n    return undefined;\n  }\n\n  let rectangle = rectangleGeometry._rectangle;\n  const ellipsoid = rectangleGeometry._ellipsoid;\n  const rotation = rectangleGeometry._rotation;\n  const stRotation = rectangleGeometry._stRotation;\n  const vertexFormat = rectangleGeometry._vertexFormat;\n\n  const computedOptions = RectangleGeometryLibrary.computeOptions(\n    rectangle,\n    rectangleGeometry._granularity,\n    rotation,\n    stRotation,\n    rectangleScratch,\n    nwScratch,\n    stNwScratch,\n  );\n\n  const tangentRotationMatrix = tangentRotationMatrixScratch;\n  if (stRotation !== 0 || rotation !== 0) {\n    const center = Rectangle.center(rectangle, centerScratch);\n    const axis = ellipsoid.geodeticSurfaceNormalCartographic(center, v1Scratch);\n    Quaternion.fromAxisAngle(axis, -stRotation, quaternionScratch);\n    Matrix3.fromQuaternion(quaternionScratch, tangentRotationMatrix);\n  } else {\n    Matrix3.clone(Matrix3.IDENTITY, tangentRotationMatrix);\n  }\n\n  const surfaceHeight = rectangleGeometry._surfaceHeight;\n  const extrudedHeight = rectangleGeometry._extrudedHeight;\n  const extrude = !CesiumMath.equalsEpsilon(\n    surfaceHeight,\n    extrudedHeight,\n    0,\n    CesiumMath.EPSILON2,\n  );\n\n  computedOptions.lonScalar = 1.0 / rectangleGeometry._rectangle.width;\n  computedOptions.latScalar = 1.0 / rectangleGeometry._rectangle.height;\n  computedOptions.tangentRotationMatrix = tangentRotationMatrix;\n\n  let geometry;\n  let boundingSphere;\n  rectangle = rectangleGeometry._rectangle;\n  if (extrude) {\n    geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions);\n    const topBS = BoundingSphere.fromRectangle3D(\n      rectangle,\n      ellipsoid,\n      surfaceHeight,\n      topBoundingSphere,\n    );\n    const bottomBS = BoundingSphere.fromRectangle3D(\n      rectangle,\n      ellipsoid,\n      extrudedHeight,\n      bottomBoundingSphere,\n    );\n    boundingSphere = BoundingSphere.union(topBS, bottomBS);\n  } else {\n    geometry = constructRectangle(rectangleGeometry, computedOptions);\n    geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n      geometry.attributes.position.values,\n      surfaceHeight,\n      ellipsoid,\n      false,\n    );\n\n    if (defined(rectangleGeometry._offsetAttribute)) {\n      const length = geometry.attributes.position.values.length;\n      const offsetValue =\n        rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n          ? 0\n          : 1;\n      const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n      geometry.attributes.applyOffset = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        componentsPerAttribute: 1,\n        values: applyOffset,\n      });\n    }\n\n    boundingSphere = BoundingSphere.fromRectangle3D(\n      rectangle,\n      ellipsoid,\n      surfaceHeight,\n    );\n  }\n\n  if (!vertexFormat.position) {\n    delete geometry.attributes.position;\n  }\n\n  return new Geometry({\n    attributes: geometry.attributes,\n    indices: geometry.indices,\n    primitiveType: geometry.primitiveType,\n    boundingSphere: boundingSphere,\n    offsetAttribute: rectangleGeometry._offsetAttribute,\n  });\n};\n\n/**\n * @private\n */\nRectangleGeometry.createShadowVolume = function (\n  rectangleGeometry,\n  minHeightFunc,\n  maxHeightFunc,\n) {\n  const granularity = rectangleGeometry._granularity;\n  const ellipsoid = rectangleGeometry._ellipsoid;\n\n  const minHeight = minHeightFunc(granularity, ellipsoid);\n  const maxHeight = maxHeightFunc(granularity, ellipsoid);\n\n  return new RectangleGeometry({\n    rectangle: rectangleGeometry._rectangle,\n    rotation: rectangleGeometry._rotation,\n    ellipsoid: ellipsoid,\n    stRotation: rectangleGeometry._stRotation,\n    granularity: granularity,\n    extrudedHeight: maxHeight,\n    height: minHeight,\n    vertexFormat: VertexFormat.POSITION_ONLY,\n    shadowVolume: true,\n  });\n};\n\nconst unrotatedTextureRectangleScratch = new Rectangle();\nconst points2DScratch = [new Cartesian2(), new Cartesian2(), new Cartesian2()];\nconst rotation2DScratch = new Matrix2();\nconst rectangleCenterScratch = new Cartographic();\n\nfunction textureCoordinateRotationPoints(rectangleGeometry) {\n  if (rectangleGeometry._stRotation === 0.0) {\n    return [0, 0, 0, 1, 1, 0];\n  }\n\n  const rectangle = Rectangle.clone(\n    rectangleGeometry._rectangle,\n    unrotatedTextureRectangleScratch,\n  );\n  const granularity = rectangleGeometry._granularity;\n  const ellipsoid = rectangleGeometry._ellipsoid;\n\n  // Rotate to align the texture coordinates with ENU\n  const rotation = rectangleGeometry._rotation - rectangleGeometry._stRotation;\n\n  const unrotatedTextureRectangle = computeRectangle(\n    rectangle,\n    granularity,\n    rotation,\n    ellipsoid,\n    unrotatedTextureRectangleScratch,\n  );\n\n  // Assume a computed \"east-north\" texture coordinate system based on spherical or planar tricks, bounded by `boundingRectangle`.\n  // The \"desired\" texture coordinate system forms an oriented rectangle (un-oriented computed) around the geometry that completely and tightly bounds it.\n  // We want to map from the \"east-north\" texture coordinate system into the \"desired\" system using a pair of lines (analagous planes in 2D)\n  // Compute 3 corners of the \"desired\" texture coordinate system in \"east-north\" texture space by the following in cartographic space:\n  // - rotate 3 of the corners in unrotatedTextureRectangle by stRotation around the center of the bounding rectangle\n  // - apply the \"east-north\" system's normalization formula to the rotated cartographics, even though this is likely to produce values outside [0-1].\n  // This gives us a set of points in the \"east-north\" texture coordinate system that can be used to map \"east-north\" texture coordinates to \"desired.\"\n\n  const points2D = points2DScratch;\n  points2D[0].x = unrotatedTextureRectangle.west;\n  points2D[0].y = unrotatedTextureRectangle.south;\n\n  points2D[1].x = unrotatedTextureRectangle.west;\n  points2D[1].y = unrotatedTextureRectangle.north;\n\n  points2D[2].x = unrotatedTextureRectangle.east;\n  points2D[2].y = unrotatedTextureRectangle.south;\n\n  const boundingRectangle = rectangleGeometry.rectangle;\n  const toDesiredInComputed = Matrix2.fromRotation(\n    rectangleGeometry._stRotation,\n    rotation2DScratch,\n  );\n  const boundingRectangleCenter = Rectangle.center(\n    boundingRectangle,\n    rectangleCenterScratch,\n  );\n\n  for (let i = 0; i < 3; ++i) {\n    const point2D = points2D[i];\n    point2D.x -= boundingRectangleCenter.longitude;\n    point2D.y -= boundingRectangleCenter.latitude;\n    Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D);\n    point2D.x += boundingRectangleCenter.longitude;\n    point2D.y += boundingRectangleCenter.latitude;\n\n    // Convert point into east-north texture coordinate space\n    point2D.x = (point2D.x - boundingRectangle.west) / boundingRectangle.width;\n    point2D.y =\n      (point2D.y - boundingRectangle.south) / boundingRectangle.height;\n  }\n\n  const minXYCorner = points2D[0];\n  const maxYCorner = points2D[1];\n  const maxXCorner = points2D[2];\n  const result = new Array(6);\n  Cartesian2.pack(minXYCorner, result);\n  Cartesian2.pack(maxYCorner, result, 2);\n  Cartesian2.pack(maxXCorner, result, 4);\n  return result;\n}\n\nObject.defineProperties(RectangleGeometry.prototype, {\n  /**\n   * @private\n   */\n  rectangle: {\n    get: function () {\n      if (!defined(this._rotatedRectangle)) {\n        this._rotatedRectangle = computeRectangle(\n          this._rectangle,\n          this._granularity,\n          this._rotation,\n          this._ellipsoid,\n        );\n      }\n      return this._rotatedRectangle;\n    },\n  },\n  /**\n   * For remapping texture coordinates when rendering RectangleGeometries as GroundPrimitives.\n   * This version permits skew in textures by computing offsets directly in cartographic space and\n   * more accurately approximates rendering RectangleGeometries with height as standard Primitives.\n   * @see Geometry#_textureCoordinateRotationPoints\n   * @private\n   */\n  textureCoordinateRotationPoints: {\n    get: function () {\n      if (!defined(this._textureCoordinateRotationPoints)) {\n        this._textureCoordinateRotationPoints =\n          textureCoordinateRotationPoints(this);\n      }\n      return this._textureCoordinateRotationPoints;\n    },\n  },\n});\nexport default RectangleGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix2 from \"./Matrix2.js\";\nimport Rectangle from \"./Rectangle.js\";\n\nconst cos = Math.cos;\nconst sin = Math.sin;\nconst sqrt = Math.sqrt;\n\n/**\n * @private\n */\nconst RectangleGeometryLibrary = {};\n\n/**\n * @private\n */\nRectangleGeometryLibrary.computePosition = function (\n  computedOptions,\n  ellipsoid,\n  computeST,\n  row,\n  col,\n  position,\n  st,\n) {\n  const radiiSquared = ellipsoid.radiiSquared;\n  const nwCorner = computedOptions.nwCorner;\n  const rectangle = computedOptions.boundingRectangle;\n\n  let stLatitude =\n    nwCorner.latitude -\n    computedOptions.granYCos * row +\n    col * computedOptions.granXSin;\n  const cosLatitude = cos(stLatitude);\n  const nZ = sin(stLatitude);\n  const kZ = radiiSquared.z * nZ;\n\n  let stLongitude =\n    nwCorner.longitude +\n    row * computedOptions.granYSin +\n    col * computedOptions.granXCos;\n  const nX = cosLatitude * cos(stLongitude);\n  const nY = cosLatitude * sin(stLongitude);\n\n  const kX = radiiSquared.x * nX;\n  const kY = radiiSquared.y * nY;\n\n  const gamma = sqrt(kX * nX + kY * nY + kZ * nZ);\n\n  position.x = kX / gamma;\n  position.y = kY / gamma;\n  position.z = kZ / gamma;\n\n  if (computeST) {\n    const stNwCorner = computedOptions.stNwCorner;\n    if (defined(stNwCorner)) {\n      stLatitude =\n        stNwCorner.latitude -\n        computedOptions.stGranYCos * row +\n        col * computedOptions.stGranXSin;\n      stLongitude =\n        stNwCorner.longitude +\n        row * computedOptions.stGranYSin +\n        col * computedOptions.stGranXCos;\n\n      st.x = (stLongitude - computedOptions.stWest) * computedOptions.lonScalar;\n      st.y = (stLatitude - computedOptions.stSouth) * computedOptions.latScalar;\n    } else {\n      st.x = (stLongitude - rectangle.west) * computedOptions.lonScalar;\n      st.y = (stLatitude - rectangle.south) * computedOptions.latScalar;\n    }\n  }\n};\n\nconst rotationMatrixScratch = new Matrix2();\nlet nwCartesian = new Cartesian3();\nconst centerScratch = new Cartographic();\nlet centerCartesian = new Cartesian3();\nconst proj = new GeographicProjection();\n\nfunction getRotationOptions(\n  nwCorner,\n  rotation,\n  granularityX,\n  granularityY,\n  center,\n  width,\n  height,\n) {\n  const cosRotation = Math.cos(rotation);\n  const granYCos = granularityY * cosRotation;\n  const granXCos = granularityX * cosRotation;\n\n  const sinRotation = Math.sin(rotation);\n  const granYSin = granularityY * sinRotation;\n  const granXSin = granularityX * sinRotation;\n\n  proj._ellipsoid = Ellipsoid.default;\n  nwCartesian = proj.project(nwCorner, nwCartesian);\n\n  nwCartesian = Cartesian3.subtract(nwCartesian, centerCartesian, nwCartesian);\n  const rotationMatrix = Matrix2.fromRotation(rotation, rotationMatrixScratch);\n  nwCartesian = Matrix2.multiplyByVector(\n    rotationMatrix,\n    nwCartesian,\n    nwCartesian,\n  );\n  nwCartesian = Cartesian3.add(nwCartesian, centerCartesian, nwCartesian);\n  nwCorner = proj.unproject(nwCartesian, nwCorner);\n\n  width -= 1;\n  height -= 1;\n\n  const latitude = nwCorner.latitude;\n  const latitude0 = latitude + width * granXSin;\n  const latitude1 = latitude - granYCos * height;\n  const latitude2 = latitude - granYCos * height + width * granXSin;\n\n  const north = Math.max(latitude, latitude0, latitude1, latitude2);\n  const south = Math.min(latitude, latitude0, latitude1, latitude2);\n\n  const longitude = nwCorner.longitude;\n  const longitude0 = longitude + width * granXCos;\n  const longitude1 = longitude + height * granYSin;\n  const longitude2 = longitude + height * granYSin + width * granXCos;\n\n  const east = Math.max(longitude, longitude0, longitude1, longitude2);\n  const west = Math.min(longitude, longitude0, longitude1, longitude2);\n\n  return {\n    north: north,\n    south: south,\n    east: east,\n    west: west,\n    granYCos: granYCos,\n    granYSin: granYSin,\n    granXCos: granXCos,\n    granXSin: granXSin,\n    nwCorner: nwCorner,\n  };\n}\n\n/**\n * @private\n */\nRectangleGeometryLibrary.computeOptions = function (\n  rectangle,\n  granularity,\n  rotation,\n  stRotation,\n  boundingRectangleScratch,\n  nwCornerResult,\n  stNwCornerResult,\n) {\n  let east = rectangle.east;\n  let west = rectangle.west;\n  let north = rectangle.north;\n  let south = rectangle.south;\n\n  let northCap = false;\n  let southCap = false;\n\n  if (north === CesiumMath.PI_OVER_TWO) {\n    northCap = true;\n  }\n  if (south === -CesiumMath.PI_OVER_TWO) {\n    southCap = true;\n  }\n\n  let dx;\n  const dy = north - south;\n  if (west > east) {\n    dx = CesiumMath.TWO_PI - west + east;\n  } else {\n    dx = east - west;\n  }\n\n  const width = Math.ceil(dx / granularity) + 1;\n  const height = Math.ceil(dy / granularity) + 1;\n  const granularityX = dx / (width - 1);\n  const granularityY = dy / (height - 1);\n\n  const nwCorner = Rectangle.northwest(rectangle, nwCornerResult);\n  const center = Rectangle.center(rectangle, centerScratch);\n  if (rotation !== 0 || stRotation !== 0) {\n    if (center.longitude < nwCorner.longitude) {\n      center.longitude += CesiumMath.TWO_PI;\n    }\n    proj._ellipsoid = Ellipsoid.default;\n    centerCartesian = proj.project(center, centerCartesian);\n  }\n\n  const granYCos = granularityY;\n  const granXCos = granularityX;\n  const granYSin = 0.0;\n  const granXSin = 0.0;\n\n  const boundingRectangle = Rectangle.clone(\n    rectangle,\n    boundingRectangleScratch,\n  );\n\n  const computedOptions = {\n    granYCos: granYCos,\n    granYSin: granYSin,\n    granXCos: granXCos,\n    granXSin: granXSin,\n    nwCorner: nwCorner,\n    boundingRectangle: boundingRectangle,\n    width: width,\n    height: height,\n    northCap: northCap,\n    southCap: southCap,\n  };\n\n  if (rotation !== 0) {\n    const rotationOptions = getRotationOptions(\n      nwCorner,\n      rotation,\n      granularityX,\n      granularityY,\n      center,\n      width,\n      height,\n    );\n    north = rotationOptions.north;\n    south = rotationOptions.south;\n    east = rotationOptions.east;\n    west = rotationOptions.west;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (\n      north < -CesiumMath.PI_OVER_TWO ||\n      north > CesiumMath.PI_OVER_TWO ||\n      south < -CesiumMath.PI_OVER_TWO ||\n      south > CesiumMath.PI_OVER_TWO\n    ) {\n      throw new DeveloperError(\n        \"Rotated rectangle is invalid.  It crosses over either the north or south pole.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    computedOptions.granYCos = rotationOptions.granYCos;\n    computedOptions.granYSin = rotationOptions.granYSin;\n    computedOptions.granXCos = rotationOptions.granXCos;\n    computedOptions.granXSin = rotationOptions.granXSin;\n\n    boundingRectangle.north = north;\n    boundingRectangle.south = south;\n    boundingRectangle.east = east;\n    boundingRectangle.west = west;\n  }\n\n  if (stRotation !== 0) {\n    rotation = rotation - stRotation;\n    const stNwCorner = Rectangle.northwest(boundingRectangle, stNwCornerResult);\n\n    const stRotationOptions = getRotationOptions(\n      stNwCorner,\n      rotation,\n      granularityX,\n      granularityY,\n      center,\n      width,\n      height,\n    );\n\n    computedOptions.stGranYCos = stRotationOptions.granYCos;\n    computedOptions.stGranXCos = stRotationOptions.granXCos;\n    computedOptions.stGranYSin = stRotationOptions.granYSin;\n    computedOptions.stGranXSin = stRotationOptions.granXSin;\n    computedOptions.stNwCorner = stNwCorner;\n    computedOptions.stWest = stRotationOptions.west;\n    computedOptions.stSouth = stRotationOptions.south;\n  }\n\n  return computedOptions;\n};\nexport default RectangleGeometryLibrary;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolygonPipeline from \"./PolygonPipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport RectangleGeometryLibrary from \"./RectangleGeometryLibrary.js\";\n\nconst bottomBoundingSphere = new BoundingSphere();\nconst topBoundingSphere = new BoundingSphere();\nconst positionScratch = new Cartesian3();\nconst rectangleScratch = new Rectangle();\n\nfunction constructRectangle(geometry, computedOptions) {\n  const ellipsoid = geometry._ellipsoid;\n  const height = computedOptions.height;\n  const width = computedOptions.width;\n  const northCap = computedOptions.northCap;\n  const southCap = computedOptions.southCap;\n\n  let rowHeight = height;\n  let widthMultiplier = 2;\n  let size = 0;\n  let corners = 4;\n  if (northCap) {\n    widthMultiplier -= 1;\n    rowHeight -= 1;\n    size += 1;\n    corners -= 2;\n  }\n  if (southCap) {\n    widthMultiplier -= 1;\n    rowHeight -= 1;\n    size += 1;\n    corners -= 2;\n  }\n  size += widthMultiplier * width + 2 * rowHeight - corners;\n\n  const positions = new Float64Array(size * 3);\n\n  let posIndex = 0;\n  let row = 0;\n  let col;\n  const position = positionScratch;\n  if (northCap) {\n    RectangleGeometryLibrary.computePosition(\n      computedOptions,\n      ellipsoid,\n      false,\n      row,\n      0,\n      position,\n    );\n    positions[posIndex++] = position.x;\n    positions[posIndex++] = position.y;\n    positions[posIndex++] = position.z;\n  } else {\n    for (col = 0; col < width; col++) {\n      RectangleGeometryLibrary.computePosition(\n        computedOptions,\n        ellipsoid,\n        false,\n        row,\n        col,\n        position,\n      );\n      positions[posIndex++] = position.x;\n      positions[posIndex++] = position.y;\n      positions[posIndex++] = position.z;\n    }\n  }\n\n  col = width - 1;\n  for (row = 1; row < height; row++) {\n    RectangleGeometryLibrary.computePosition(\n      computedOptions,\n      ellipsoid,\n      false,\n      row,\n      col,\n      position,\n    );\n    positions[posIndex++] = position.x;\n    positions[posIndex++] = position.y;\n    positions[posIndex++] = position.z;\n  }\n\n  row = height - 1;\n  if (!southCap) {\n    // if southCap is true, we dont need to add any more points because the south pole point was added by the iteration above\n    for (col = width - 2; col >= 0; col--) {\n      RectangleGeometryLibrary.computePosition(\n        computedOptions,\n        ellipsoid,\n        false,\n        row,\n        col,\n        position,\n      );\n      positions[posIndex++] = position.x;\n      positions[posIndex++] = position.y;\n      positions[posIndex++] = position.z;\n    }\n  }\n\n  col = 0;\n  for (row = height - 2; row > 0; row--) {\n    RectangleGeometryLibrary.computePosition(\n      computedOptions,\n      ellipsoid,\n      false,\n      row,\n      col,\n      position,\n    );\n    positions[posIndex++] = position.x;\n    positions[posIndex++] = position.y;\n    positions[posIndex++] = position.z;\n  }\n\n  const indicesSize = (positions.length / 3) * 2;\n  const indices = IndexDatatype.createTypedArray(\n    positions.length / 3,\n    indicesSize,\n  );\n\n  let index = 0;\n  for (let i = 0; i < positions.length / 3 - 1; i++) {\n    indices[index++] = i;\n    indices[index++] = i + 1;\n  }\n  indices[index++] = positions.length / 3 - 1;\n  indices[index++] = 0;\n\n  const geo = new Geometry({\n    attributes: new GeometryAttributes(),\n    primitiveType: PrimitiveType.LINES,\n  });\n\n  geo.attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: positions,\n  });\n  geo.indices = indices;\n\n  return geo;\n}\n\nfunction constructExtrudedRectangle(rectangleGeometry, computedOptions) {\n  const maxHeight = rectangleGeometry._surfaceHeight;\n  const minHeight = rectangleGeometry._extrudedHeight;\n  const ellipsoid = rectangleGeometry._ellipsoid;\n  const geo = constructRectangle(rectangleGeometry, computedOptions);\n\n  const height = computedOptions.height;\n  const width = computedOptions.width;\n\n  const topPositions = PolygonPipeline.scaleToGeodeticHeight(\n    geo.attributes.position.values,\n    maxHeight,\n    ellipsoid,\n    false,\n  );\n  let length = topPositions.length;\n  const positions = new Float64Array(length * 2);\n  positions.set(topPositions);\n  const bottomPositions = PolygonPipeline.scaleToGeodeticHeight(\n    geo.attributes.position.values,\n    minHeight,\n    ellipsoid,\n  );\n  positions.set(bottomPositions, length);\n  geo.attributes.position.values = positions;\n\n  const northCap = computedOptions.northCap;\n  const southCap = computedOptions.southCap;\n  let corners = 4;\n  if (northCap) {\n    corners -= 1;\n  }\n  if (southCap) {\n    corners -= 1;\n  }\n\n  const indicesSize = (positions.length / 3 + corners) * 2;\n  const indices = IndexDatatype.createTypedArray(\n    positions.length / 3,\n    indicesSize,\n  );\n  length = positions.length / 6;\n  let index = 0;\n  for (let i = 0; i < length - 1; i++) {\n    indices[index++] = i;\n    indices[index++] = i + 1;\n    indices[index++] = i + length;\n    indices[index++] = i + length + 1;\n  }\n  indices[index++] = length - 1;\n  indices[index++] = 0;\n  indices[index++] = length + length - 1;\n  indices[index++] = length;\n\n  indices[index++] = 0;\n  indices[index++] = length;\n\n  let bottomCorner;\n  if (northCap) {\n    bottomCorner = height - 1;\n  } else {\n    const topRightCorner = width - 1;\n    indices[index++] = topRightCorner;\n    indices[index++] = topRightCorner + length;\n    bottomCorner = width + height - 2;\n  }\n\n  indices[index++] = bottomCorner;\n  indices[index++] = bottomCorner + length;\n\n  if (!southCap) {\n    const bottomLeftCorner = width + bottomCorner - 1;\n    indices[index++] = bottomLeftCorner;\n    indices[index] = bottomLeftCorner + length;\n  }\n\n  geo.indices = indices;\n\n  return geo;\n}\n\n/**\n * A description of the outline of a a cartographic rectangle on an ellipsoid centered at the origin.\n *\n * @alias RectangleOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid on which the rectangle lies.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface.\n * @param {number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\n * @param {number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface.\n *\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.south</code> must be in the interval [<code>-Pi/2</code>, <code>Pi/2</code>].\n * @exception {DeveloperError} <code>options.rectangle.east</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.west</code> must be in the interval [<code>-Pi</code>, <code>Pi</code>].\n * @exception {DeveloperError} <code>options.rectangle.north</code> must be greater than <code>rectangle.south</code>.\n *\n * @see RectangleOutlineGeometry#createGeometry\n *\n * @example\n * const rectangle = new Cesium.RectangleOutlineGeometry({\n *   ellipsoid : Cesium.Ellipsoid.WGS84,\n *   rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\n *   height : 10000.0\n * });\n * const geometry = Cesium.RectangleOutlineGeometry.createGeometry(rectangle);\n */\nfunction RectangleOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const rectangle = options.rectangle;\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  const rotation = options.rotation ?? 0.0;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(rectangle)) {\n    throw new DeveloperError(\"rectangle is required.\");\n  }\n  Rectangle._validate(rectangle);\n  if (rectangle.north < rectangle.south) {\n    throw new DeveloperError(\n      \"options.rectangle.north must be greater than options.rectangle.south\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const height = options.height ?? 0.0;\n  const extrudedHeight = options.extrudedHeight ?? height;\n\n  this._rectangle = Rectangle.clone(rectangle);\n  this._granularity = granularity;\n  this._ellipsoid = ellipsoid;\n  this._surfaceHeight = Math.max(height, extrudedHeight);\n  this._rotation = rotation;\n  this._extrudedHeight = Math.min(height, extrudedHeight);\n  this._offsetAttribute = options.offsetAttribute;\n  this._workerName = \"createRectangleOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nRectangleOutlineGeometry.packedLength =\n  Rectangle.packedLength + Ellipsoid.packedLength + 5;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {RectangleOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nRectangleOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  Rectangle.pack(value._rectangle, array, startingIndex);\n  startingIndex += Rectangle.packedLength;\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  array[startingIndex++] = value._granularity;\n  array[startingIndex++] = value._surfaceHeight;\n  array[startingIndex++] = value._rotation;\n  array[startingIndex++] = value._extrudedHeight;\n  array[startingIndex] = value._offsetAttribute ?? -1;\n\n  return array;\n};\n\nconst scratchRectangle = new Rectangle();\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchOptions = {\n  rectangle: scratchRectangle,\n  ellipsoid: scratchEllipsoid,\n  granularity: undefined,\n  height: undefined,\n  rotation: undefined,\n  extrudedHeight: undefined,\n  offsetAttribute: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {RectangleOutlineGeometry} [result] The object into which to store the result.\n * @returns {RectangleOutlineGeometry} The modified result parameter or a new RectangleOutlineGeometry instance if one was not provided.\n */\nRectangleOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  const rectangle = Rectangle.unpack(array, startingIndex, scratchRectangle);\n  startingIndex += Rectangle.packedLength;\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const granularity = array[startingIndex++];\n  const height = array[startingIndex++];\n  const rotation = array[startingIndex++];\n  const extrudedHeight = array[startingIndex++];\n  const offsetAttribute = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.granularity = granularity;\n    scratchOptions.height = height;\n    scratchOptions.rotation = rotation;\n    scratchOptions.extrudedHeight = extrudedHeight;\n    scratchOptions.offsetAttribute =\n      offsetAttribute === -1 ? undefined : offsetAttribute;\n\n    return new RectangleOutlineGeometry(scratchOptions);\n  }\n\n  result._rectangle = Rectangle.clone(rectangle, result._rectangle);\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._surfaceHeight = height;\n  result._rotation = rotation;\n  result._extrudedHeight = extrudedHeight;\n  result._offsetAttribute =\n    offsetAttribute === -1 ? undefined : offsetAttribute;\n\n  return result;\n};\n\nconst nwScratch = new Cartographic();\n/**\n * Computes the geometric representation of an outline of a rectangle, including its vertices, indices, and a bounding sphere.\n *\n * @param {RectangleOutlineGeometry} rectangleGeometry A description of the rectangle outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n *\n * @exception {DeveloperError} Rotated rectangle is invalid.\n */\nRectangleOutlineGeometry.createGeometry = function (rectangleGeometry) {\n  const rectangle = rectangleGeometry._rectangle;\n  const ellipsoid = rectangleGeometry._ellipsoid;\n  const computedOptions = RectangleGeometryLibrary.computeOptions(\n    rectangle,\n    rectangleGeometry._granularity,\n    rectangleGeometry._rotation,\n    0,\n    rectangleScratch,\n    nwScratch,\n  );\n\n  let geometry;\n  let boundingSphere;\n\n  if (\n    CesiumMath.equalsEpsilon(\n      rectangle.north,\n      rectangle.south,\n      CesiumMath.EPSILON10,\n    ) ||\n    CesiumMath.equalsEpsilon(\n      rectangle.east,\n      rectangle.west,\n      CesiumMath.EPSILON10,\n    )\n  ) {\n    return undefined;\n  }\n\n  const surfaceHeight = rectangleGeometry._surfaceHeight;\n  const extrudedHeight = rectangleGeometry._extrudedHeight;\n  const extrude = !CesiumMath.equalsEpsilon(\n    surfaceHeight,\n    extrudedHeight,\n    0,\n    CesiumMath.EPSILON2,\n  );\n  let offsetValue;\n  if (extrude) {\n    geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions);\n    if (defined(rectangleGeometry._offsetAttribute)) {\n      const size = geometry.attributes.position.values.length / 3;\n      let offsetAttribute = new Uint8Array(size);\n      if (rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.TOP) {\n        offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\n      } else {\n        offsetValue =\n          rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n            ? 0\n            : 1;\n        offsetAttribute = offsetAttribute.fill(offsetValue);\n      }\n\n      geometry.attributes.applyOffset = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        componentsPerAttribute: 1,\n        values: offsetAttribute,\n      });\n    }\n    const topBS = BoundingSphere.fromRectangle3D(\n      rectangle,\n      ellipsoid,\n      surfaceHeight,\n      topBoundingSphere,\n    );\n    const bottomBS = BoundingSphere.fromRectangle3D(\n      rectangle,\n      ellipsoid,\n      extrudedHeight,\n      bottomBoundingSphere,\n    );\n    boundingSphere = BoundingSphere.union(topBS, bottomBS);\n  } else {\n    geometry = constructRectangle(rectangleGeometry, computedOptions);\n    geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\n      geometry.attributes.position.values,\n      surfaceHeight,\n      ellipsoid,\n      false,\n    );\n\n    if (defined(rectangleGeometry._offsetAttribute)) {\n      const length = geometry.attributes.position.values.length;\n      offsetValue =\n        rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\n          ? 0\n          : 1;\n      const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\n      geometry.attributes.applyOffset = new GeometryAttribute({\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        componentsPerAttribute: 1,\n        values: applyOffset,\n      });\n    }\n\n    boundingSphere = BoundingSphere.fromRectangle3D(\n      rectangle,\n      ellipsoid,\n      surfaceHeight,\n    );\n  }\n\n  return new Geometry({\n    attributes: geometry.attributes,\n    indices: geometry.indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: boundingSphere,\n    offsetAttribute: rectangleGeometry._offsetAttribute,\n  });\n};\nexport default RectangleOutlineGeometry;\n","/**\n * Constants for identifying well-known reference frames.\n *\n * @enum {number}\n */\nconst ReferenceFrame = {\n  /**\n   * The fixed frame.\n   *\n   * @type {number}\n   * @constant\n   */\n  FIXED: 0,\n\n  /**\n   * The inertial frame.\n   *\n   * @type {number}\n   * @constant\n   */\n  INERTIAL: 1,\n};\nexport default Object.freeze(ReferenceFrame);\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport RequestState from \"./RequestState.js\";\nimport RequestType from \"./RequestType.js\";\n\n/**\n * Stores information for making a request. In general this does not need to be constructed directly.\n *\n * @alias Request\n * @constructor\n\n * @param {object} [options] An object with the following properties:\n * @param {string} [options.url] The url to request.\n * @param {Request.RequestCallback} [options.requestFunction] The function that makes the actual data request.\n * @param {Request.CancelCallback} [options.cancelFunction] The function that is called when the request is cancelled.\n * @param {Request.PriorityCallback} [options.priorityFunction] The function that is called to update the request's priority, which occurs once per frame.\n * @param {number} [options.priority=0.0] The initial priority of the request.\n * @param {boolean} [options.throttle=false] Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the request will be throttled and sent based on priority.\n * @param {boolean} [options.throttleByServer=false] Whether to throttle the request by server.\n * @param {RequestType} [options.type=RequestType.OTHER] The type of request.\n * @param {string} [options.serverKey] A key used to identify the server that a request is going to.\n */\nfunction Request(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const throttleByServer = options.throttleByServer ?? false;\n  const throttle = options.throttle ?? false;\n\n  /**\n   * The URL to request.\n   *\n   * @type {string}\n   */\n  this.url = options.url;\n\n  /**\n   * The function that makes the actual data request.\n   *\n   * @type {Request.RequestCallback}\n   */\n  this.requestFunction = options.requestFunction;\n\n  /**\n   * The function that is called when the request is cancelled.\n   *\n   * @type {Request.CancelCallback}\n   */\n  this.cancelFunction = options.cancelFunction;\n\n  /**\n   * The function that is called to update the request's priority, which occurs once per frame.\n   *\n   * @type {Request.PriorityCallback}\n   */\n  this.priorityFunction = options.priorityFunction;\n\n  /**\n   * Priority is a unit-less value where lower values represent higher priority.\n   * For world-based objects, this is usually the distance from the camera.\n   * A request that does not have a priority function defaults to a priority of 0.\n   *\n   * If priorityFunction is defined, this value is updated every frame with the result of that call.\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.priority = options.priority ?? 0.0;\n\n  /**\n   * Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the\n   * request will be throttled and sent based on priority.\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  this.throttle = throttle;\n\n  /**\n   * Whether to throttle the request by server. Browsers typically support about 6-8 parallel connections\n   * for HTTP/1 servers, and an unlimited amount of connections for HTTP/2 servers. Setting this value\n   * to <code>true</code> is preferable for requests going through HTTP/1 servers.\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  this.throttleByServer = throttleByServer;\n\n  /**\n   * Type of request.\n   *\n   * @type {RequestType}\n   * @readonly\n   *\n   * @default RequestType.OTHER\n   */\n  this.type = options.type ?? RequestType.OTHER;\n\n  /**\n   * A key used to identify the server that a request is going to. It is derived from the url's authority and scheme.\n   *\n   * @type {string}\n   *\n   * @private\n   */\n  this.serverKey = options.serverKey;\n\n  /**\n   * The current state of the request.\n   *\n   * @type {RequestState}\n   * @readonly\n   */\n  this.state = RequestState.UNISSUED;\n\n  /**\n   * The requests's deferred promise.\n   *\n   * @type {object}\n   *\n   * @private\n   */\n  this.deferred = undefined;\n\n  /**\n   * Whether the request was explicitly cancelled.\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  this.cancelled = false;\n}\n\n/**\n * Mark the request as cancelled.\n *\n * @private\n */\nRequest.prototype.cancel = function () {\n  this.cancelled = true;\n};\n\n/**\n * Duplicates a Request instance.\n *\n * @param {Request} [result] The object onto which to store the result.\n *\n * @returns {Request} The modified result parameter or a new Resource instance if one was not provided.\n */\nRequest.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new Request(this);\n  }\n\n  result.url = this.url;\n  result.requestFunction = this.requestFunction;\n  result.cancelFunction = this.cancelFunction;\n  result.priorityFunction = this.priorityFunction;\n  result.priority = this.priority;\n  result.throttle = this.throttle;\n  result.throttleByServer = this.throttleByServer;\n  result.type = this.type;\n  result.serverKey = this.serverKey;\n\n  // These get defaulted because the cloned request hasn't been issued\n  result.state = RequestState.UNISSUED;\n  result.deferred = undefined;\n  result.cancelled = false;\n\n  return result;\n};\n\n/**\n * The function that makes the actual data request.\n * @callback Request.RequestCallback\n * @returns {Promise<void>} A promise for the requested data.\n */\n\n/**\n * The function that is called when the request is cancelled.\n * @callback Request.CancelCallback\n */\n\n/**\n * The function that is called to update the request's priority, which occurs once per frame.\n * @callback Request.PriorityCallback\n * @returns {number} The updated priority value.\n */\nexport default Request;\n","import defined from \"./defined.js\";\nimport parseResponseHeaders from \"./parseResponseHeaders.js\";\n\n/**\n * An event that is raised when a request encounters an error.\n *\n * @constructor\n * @alias RequestErrorEvent\n *\n * @param {number} [statusCode] The HTTP error status code, such as 404.\n * @param {object} [response] The response included along with the error.\n * @param {string|object} [responseHeaders] The response headers, represented either as an object literal or as a\n *                        string in the format returned by XMLHttpRequest's getAllResponseHeaders() function.\n */\nfunction RequestErrorEvent(statusCode, response, responseHeaders) {\n  /**\n   * The HTTP error status code, such as 404.  If the error does not have a particular\n   * HTTP code, this property will be undefined.\n   *\n   * @type {number}\n   */\n  this.statusCode = statusCode;\n\n  /**\n   * The response included along with the error.  If the error does not include a response,\n   * this property will be undefined.\n   *\n   * @type {object}\n   */\n  this.response = response;\n\n  /**\n   * The headers included in the response, represented as an object literal of key/value pairs.\n   * If the error does not include any headers, this property will be undefined.\n   *\n   * @type {object}\n   */\n  this.responseHeaders = responseHeaders;\n\n  if (typeof this.responseHeaders === \"string\") {\n    this.responseHeaders = parseResponseHeaders(this.responseHeaders);\n  }\n}\n\n/**\n * Creates a string representing this RequestErrorEvent.\n * @memberof RequestErrorEvent\n *\n * @returns {string} A string representing the provided RequestErrorEvent.\n */\nRequestErrorEvent.prototype.toString = function () {\n  let str = \"Request has failed.\";\n  if (defined(this.statusCode)) {\n    str += ` Status Code: ${this.statusCode}`;\n  }\n  return str;\n};\nexport default RequestErrorEvent;\n","import Uri from \"urijs\";\nimport Check from \"./Check.js\";\nimport defer from \"./defer.js\";\nimport defined from \"./defined.js\";\nimport Event from \"./Event.js\";\nimport Heap from \"./Heap.js\";\nimport isBlobUri from \"./isBlobUri.js\";\nimport isDataUri from \"./isDataUri.js\";\nimport RequestState from \"./RequestState.js\";\n\nfunction sortRequests(a, b) {\n  return a.priority - b.priority;\n}\n\nconst statistics = {\n  numberOfAttemptedRequests: 0,\n  numberOfActiveRequests: 0,\n  numberOfCancelledRequests: 0,\n  numberOfCancelledActiveRequests: 0,\n  numberOfFailedRequests: 0,\n  numberOfActiveRequestsEver: 0,\n  lastNumberOfActiveRequests: 0,\n};\n\nlet priorityHeapLength = 20;\nconst requestHeap = new Heap({\n  comparator: sortRequests,\n});\nrequestHeap.maximumLength = priorityHeapLength;\nrequestHeap.reserve(priorityHeapLength);\n\nconst activeRequests = [];\nlet numberOfActiveRequestsByServer = {};\n\nconst pageUri =\n  typeof document !== \"undefined\" ? new Uri(document.location.href) : new Uri();\n\nconst requestCompletedEvent = new Event();\n\n/**\n * The request scheduler is used to track and constrain the number of active requests in order to prioritize incoming requests. The ability\n * to retain control over the number of requests in CesiumJS is important because due to events such as changes in the camera position,\n * a lot of new requests may be generated and a lot of in-flight requests may become redundant. The request scheduler manually constrains the\n * number of requests so that newer requests wait in a shorter queue and don't have to compete for bandwidth with requests that have expired.\n *\n * @namespace RequestScheduler\n *\n */\nfunction RequestScheduler() {}\n\n/**\n * The maximum number of simultaneous active requests. Un-throttled requests do not observe this limit.\n * @type {number}\n * @default 50\n */\nRequestScheduler.maximumRequests = 50;\n\n/**\n * The maximum number of simultaneous active requests per server. Un-throttled requests or servers specifically\n * listed in {@link requestsByServer} do not observe this limit.\n * @type {number}\n * @default 18\n */\nRequestScheduler.maximumRequestsPerServer = 18;\n\n/**\n * A per server key list of overrides to use for throttling instead of <code>maximumRequestsPerServer</code>.\n * Useful when streaming data from a known HTTP/2 or HTTP/3 server.\n * @type {object}\n *\n * @example\n * RequestScheduler.requestsByServer[\"myserver.com:443\"] = 18;\n *\n * @example\n * RequestScheduler.requestsByServer = {\n *   \"api.cesium.com:443\": 18,\n *   \"assets.cesium.com:443\": 18,\n * };\n */\nRequestScheduler.requestsByServer = {};\n\n/**\n * Specifies if the request scheduler should throttle incoming requests, or let the browser queue requests under its control.\n * @type {boolean}\n * @default true\n */\nRequestScheduler.throttleRequests = true;\n\n/**\n * When true, log statistics to the console every frame\n * @type {boolean}\n * @default false\n * @private\n */\nRequestScheduler.debugShowStatistics = false;\n\n/**\n * An event that's raised when a request is completed.  Event handlers are passed\n * the error object if the request fails.\n *\n * @type {Event}\n * @default Event()\n * @private\n */\nRequestScheduler.requestCompletedEvent = requestCompletedEvent;\n\nObject.defineProperties(RequestScheduler, {\n  /**\n   * Returns the statistics used by the request scheduler.\n   *\n   * @memberof RequestScheduler\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  statistics: {\n    get: function () {\n      return statistics;\n    },\n  },\n\n  /**\n   * The maximum size of the priority heap. This limits the number of requests that are sorted by priority. Only applies to requests that are not yet active.\n   *\n   * @memberof RequestScheduler\n   *\n   * @type {number}\n   * @default 20\n   * @private\n   */\n  priorityHeapLength: {\n    get: function () {\n      return priorityHeapLength;\n    },\n    set: function (value) {\n      // If the new length shrinks the heap, need to cancel some of the requests.\n      // Since this value is not intended to be tweaked regularly it is fine to just cancel the high priority requests.\n      if (value < priorityHeapLength) {\n        while (requestHeap.length > value) {\n          const request = requestHeap.pop();\n          cancelRequest(request);\n        }\n      }\n      priorityHeapLength = value;\n      requestHeap.maximumLength = value;\n      requestHeap.reserve(value);\n    },\n  },\n});\n\nfunction updatePriority(request) {\n  if (defined(request.priorityFunction)) {\n    request.priority = request.priorityFunction();\n  }\n}\n\n/**\n * Check if there are open slots for a particular server key. If desiredRequests is greater than 1, this checks if the queue has room for scheduling multiple requests.\n * @param {string} serverKey The server key returned by {@link RequestScheduler.getServerKey}.\n * @param {number} [desiredRequests=1] How many requests the caller plans to request\n * @return {boolean} True if there are enough open slots for <code>desiredRequests</code> more requests.\n * @private\n */\nRequestScheduler.serverHasOpenSlots = function (serverKey, desiredRequests) {\n  desiredRequests = desiredRequests ?? 1;\n\n  const maxRequests =\n    RequestScheduler.requestsByServer[serverKey] ??\n    RequestScheduler.maximumRequestsPerServer;\n  const hasOpenSlotsServer =\n    numberOfActiveRequestsByServer[serverKey] + desiredRequests <= maxRequests;\n\n  return hasOpenSlotsServer;\n};\n\n/**\n * Check if the priority heap has open slots, regardless of which server they\n * are from. This is used in {@link Multiple3DTileContent} for determining when\n * all requests can be scheduled\n * @param {number} desiredRequests The number of requests the caller intends to make\n * @return {boolean} <code>true</code> if the heap has enough available slots to meet the desiredRequests. <code>false</code> otherwise.\n *\n * @private\n */\nRequestScheduler.heapHasOpenSlots = function (desiredRequests) {\n  const hasOpenSlotsHeap =\n    requestHeap.length + desiredRequests <= priorityHeapLength;\n  return hasOpenSlotsHeap;\n};\n\nfunction issueRequest(request) {\n  if (request.state === RequestState.UNISSUED) {\n    request.state = RequestState.ISSUED;\n    request.deferred = defer();\n  }\n  return request.deferred.promise;\n}\n\nfunction getRequestReceivedFunction(request) {\n  return function (results) {\n    if (request.state === RequestState.CANCELLED) {\n      // If the data request comes back but the request is cancelled, ignore it.\n      return;\n    }\n    // explicitly set to undefined to ensure GC of request response data. See #8843\n    const deferred = request.deferred;\n\n    --statistics.numberOfActiveRequests;\n    --numberOfActiveRequestsByServer[request.serverKey];\n    requestCompletedEvent.raiseEvent();\n    request.state = RequestState.RECEIVED;\n    request.deferred = undefined;\n\n    deferred.resolve(results);\n  };\n}\n\nfunction getRequestFailedFunction(request) {\n  return function (error) {\n    if (request.state === RequestState.CANCELLED) {\n      // If the data request comes back but the request is cancelled, ignore it.\n      return;\n    }\n    ++statistics.numberOfFailedRequests;\n    --statistics.numberOfActiveRequests;\n    --numberOfActiveRequestsByServer[request.serverKey];\n    requestCompletedEvent.raiseEvent(error);\n    request.state = RequestState.FAILED;\n    request.deferred.reject(error);\n  };\n}\n\nfunction startRequest(request) {\n  const promise = issueRequest(request);\n  request.state = RequestState.ACTIVE;\n  activeRequests.push(request);\n  ++statistics.numberOfActiveRequests;\n  ++statistics.numberOfActiveRequestsEver;\n  ++numberOfActiveRequestsByServer[request.serverKey];\n  request\n    .requestFunction()\n    .then(getRequestReceivedFunction(request))\n    .catch(getRequestFailedFunction(request));\n  return promise;\n}\n\nfunction cancelRequest(request) {\n  const active = request.state === RequestState.ACTIVE;\n  request.state = RequestState.CANCELLED;\n  ++statistics.numberOfCancelledRequests;\n  // check that deferred has not been cleared since cancelRequest can be called\n  // on a finished request, e.g. by clearForSpecs during tests\n  if (defined(request.deferred)) {\n    const deferred = request.deferred;\n    request.deferred = undefined;\n    deferred.reject();\n  }\n\n  if (active) {\n    --statistics.numberOfActiveRequests;\n    --numberOfActiveRequestsByServer[request.serverKey];\n    ++statistics.numberOfCancelledActiveRequests;\n  }\n\n  if (defined(request.cancelFunction)) {\n    request.cancelFunction();\n  }\n}\n\n/**\n * Sort requests by priority and start requests.\n * @private\n */\nRequestScheduler.update = function () {\n  let i;\n  let request;\n\n  // Loop over all active requests. Cancelled, failed, or received requests are removed from the array to make room for new requests.\n  let removeCount = 0;\n  const activeLength = activeRequests.length;\n  for (i = 0; i < activeLength; ++i) {\n    request = activeRequests[i];\n    if (request.cancelled) {\n      // Request was explicitly cancelled\n      cancelRequest(request);\n    }\n    if (request.state !== RequestState.ACTIVE) {\n      // Request is no longer active, remove from array\n      ++removeCount;\n      continue;\n    }\n    if (removeCount > 0) {\n      // Shift back to fill in vacated slots from completed requests\n      activeRequests[i - removeCount] = request;\n    }\n  }\n  activeRequests.length -= removeCount;\n\n  // Update priority of issued requests and resort the heap\n  const issuedRequests = requestHeap.internalArray;\n  const issuedLength = requestHeap.length;\n  for (i = 0; i < issuedLength; ++i) {\n    updatePriority(issuedRequests[i]);\n  }\n  requestHeap.resort();\n\n  // Get the number of open slots and fill with the highest priority requests.\n  // Un-throttled requests are automatically added to activeRequests, so activeRequests.length may exceed maximumRequests\n  const openSlots = Math.max(\n    RequestScheduler.maximumRequests - activeRequests.length,\n    0,\n  );\n  let filledSlots = 0;\n  while (filledSlots < openSlots && requestHeap.length > 0) {\n    // Loop until all open slots are filled or the heap becomes empty\n    request = requestHeap.pop();\n    if (request.cancelled) {\n      // Request was explicitly cancelled\n      cancelRequest(request);\n      continue;\n    }\n\n    if (\n      request.throttleByServer &&\n      !RequestScheduler.serverHasOpenSlots(request.serverKey)\n    ) {\n      // Open slots are available, but the request is throttled by its server. Cancel and try again later.\n      cancelRequest(request);\n      continue;\n    }\n\n    startRequest(request);\n    ++filledSlots;\n  }\n\n  updateStatistics();\n};\n\n/**\n * Get the server key from a given url.\n *\n * @param {string} url The url.\n * @returns {string} The server key.\n * @private\n */\nRequestScheduler.getServerKey = function (url) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"url\", url);\n  //>>includeEnd('debug');\n\n  let uri = new Uri(url);\n  if (uri.scheme() === \"\") {\n    uri = uri.absoluteTo(pageUri);\n    uri.normalize();\n  }\n\n  let serverKey = uri.authority();\n  if (!/:/.test(serverKey)) {\n    // If the authority does not contain a port number, add port 443 for https or port 80 for http\n    serverKey = `${serverKey}:${uri.scheme() === \"https\" ? \"443\" : \"80\"}`;\n  }\n\n  const length = numberOfActiveRequestsByServer[serverKey];\n  if (!defined(length)) {\n    numberOfActiveRequestsByServer[serverKey] = 0;\n  }\n\n  return serverKey;\n};\n\n/**\n * Issue a request. If request.throttle is false, the request is sent immediately. Otherwise the request will be\n * queued and sorted by priority before being sent.\n *\n * @param {Request} request The request object.\n *\n * @returns {Promise|undefined} A Promise for the requested data, or undefined if this request does not have high enough priority to be issued.\n *\n * @private\n */\nRequestScheduler.request = function (request) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"request\", request);\n  Check.typeOf.string(\"request.url\", request.url);\n  Check.typeOf.func(\"request.requestFunction\", request.requestFunction);\n  //>>includeEnd('debug');\n\n  if (isDataUri(request.url) || isBlobUri(request.url)) {\n    requestCompletedEvent.raiseEvent();\n    request.state = RequestState.RECEIVED;\n    return request.requestFunction();\n  }\n\n  ++statistics.numberOfAttemptedRequests;\n\n  if (!defined(request.serverKey)) {\n    request.serverKey = RequestScheduler.getServerKey(request.url);\n  }\n\n  if (\n    RequestScheduler.throttleRequests &&\n    request.throttleByServer &&\n    !RequestScheduler.serverHasOpenSlots(request.serverKey)\n  ) {\n    // Server is saturated. Try again later.\n    return undefined;\n  }\n\n  if (!RequestScheduler.throttleRequests || !request.throttle) {\n    return startRequest(request);\n  }\n\n  if (activeRequests.length >= RequestScheduler.maximumRequests) {\n    // Active requests are saturated. Try again later.\n    return undefined;\n  }\n\n  // Insert into the priority heap and see if a request was bumped off. If this request is the lowest\n  // priority it will be returned.\n  updatePriority(request);\n  const removedRequest = requestHeap.insert(request);\n\n  if (defined(removedRequest)) {\n    if (removedRequest === request) {\n      // Request does not have high enough priority to be issued\n      return undefined;\n    }\n    // A previously issued request has been bumped off the priority heap, so cancel it\n    cancelRequest(removedRequest);\n  }\n\n  return issueRequest(request);\n};\n\nfunction updateStatistics() {\n  if (!RequestScheduler.debugShowStatistics) {\n    return;\n  }\n\n  if (\n    statistics.numberOfActiveRequests === 0 &&\n    statistics.lastNumberOfActiveRequests > 0\n  ) {\n    if (statistics.numberOfAttemptedRequests > 0) {\n      console.log(\n        `Number of attempted requests: ${statistics.numberOfAttemptedRequests}`,\n      );\n      statistics.numberOfAttemptedRequests = 0;\n    }\n\n    if (statistics.numberOfCancelledRequests > 0) {\n      console.log(\n        `Number of cancelled requests: ${statistics.numberOfCancelledRequests}`,\n      );\n      statistics.numberOfCancelledRequests = 0;\n    }\n\n    if (statistics.numberOfCancelledActiveRequests > 0) {\n      console.log(\n        `Number of cancelled active requests: ${statistics.numberOfCancelledActiveRequests}`,\n      );\n      statistics.numberOfCancelledActiveRequests = 0;\n    }\n\n    if (statistics.numberOfFailedRequests > 0) {\n      console.log(\n        `Number of failed requests: ${statistics.numberOfFailedRequests}`,\n      );\n      statistics.numberOfFailedRequests = 0;\n    }\n  }\n\n  statistics.lastNumberOfActiveRequests = statistics.numberOfActiveRequests;\n}\n\n/**\n * For testing only. Clears any requests that may not have completed from previous tests.\n *\n * @private\n */\nRequestScheduler.clearForSpecs = function () {\n  while (requestHeap.length > 0) {\n    const request = requestHeap.pop();\n    cancelRequest(request);\n  }\n  const length = activeRequests.length;\n  for (let i = 0; i < length; ++i) {\n    cancelRequest(activeRequests[i]);\n  }\n  activeRequests.length = 0;\n  numberOfActiveRequestsByServer = {};\n\n  // Clear stats\n  statistics.numberOfAttemptedRequests = 0;\n  statistics.numberOfActiveRequests = 0;\n  statistics.numberOfCancelledRequests = 0;\n  statistics.numberOfCancelledActiveRequests = 0;\n  statistics.numberOfFailedRequests = 0;\n  statistics.numberOfActiveRequestsEver = 0;\n  statistics.lastNumberOfActiveRequests = 0;\n};\n\n/**\n * For testing only.\n *\n * @private\n */\nRequestScheduler.numberOfActiveRequestsByServer = function (serverKey) {\n  return numberOfActiveRequestsByServer[serverKey];\n};\n\n/**\n * For testing only.\n *\n * @private\n */\nRequestScheduler.requestHeap = requestHeap;\nexport default RequestScheduler;\n","/**\n * State of the request.\n *\n * @enum {number}\n */\nconst RequestState = {\n  /**\n   * Initial unissued state.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNISSUED: 0,\n\n  /**\n   * Issued but not yet active. Will become active when open slots are available.\n   *\n   * @type {number}\n   * @constant\n   */\n  ISSUED: 1,\n\n  /**\n   * Actual http request has been sent.\n   *\n   * @type {number}\n   * @constant\n   */\n  ACTIVE: 2,\n\n  /**\n   * Request completed successfully.\n   *\n   * @type {number}\n   * @constant\n   */\n  RECEIVED: 3,\n\n  /**\n   * Request was cancelled, either explicitly or automatically because of low priority.\n   *\n   * @type {number}\n   * @constant\n   */\n  CANCELLED: 4,\n\n  /**\n   * Request failed.\n   *\n   * @type {number}\n   * @constant\n   */\n  FAILED: 5,\n};\nexport default Object.freeze(RequestState);\n","/**\n * An enum identifying the type of request. Used for finer grained logging and priority sorting.\n *\n * @enum {number}\n */\nconst RequestType = {\n  /**\n   * Terrain request.\n   *\n   * @type {number}\n   * @constant\n   */\n  TERRAIN: 0,\n\n  /**\n   * Imagery request.\n   *\n   * @type {number}\n   * @constant\n   */\n  IMAGERY: 1,\n\n  /**\n   * 3D Tiles request.\n   *\n   * @type {number}\n   * @constant\n   */\n  TILES3D: 2,\n\n  /**\n   * Other request.\n   *\n   * @type {number}\n   * @constant\n   */\n  OTHER: 3,\n};\nexport default Object.freeze(RequestType);\n","import Uri from \"urijs\";\nimport appendForwardSlash from \"./appendForwardSlash.js\";\nimport Check from \"./Check.js\";\nimport clone from \"./clone.js\";\nimport combine from \"./combine.js\";\nimport Frozen from \"./Frozen.js\";\nimport defer from \"./defer.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport getAbsoluteUri from \"./getAbsoluteUri.js\";\nimport getBaseUri from \"./getBaseUri.js\";\nimport getExtensionFromUri from \"./getExtensionFromUri.js\";\nimport getImagePixels from \"./getImagePixels.js\";\nimport isBlobUri from \"./isBlobUri.js\";\nimport isCrossOriginUrl from \"./isCrossOriginUrl.js\";\nimport isDataUri from \"./isDataUri.js\";\nimport loadAndExecuteScript from \"./loadAndExecuteScript.js\";\nimport CesiumMath from \"./Math.js\";\nimport objectToQuery from \"./objectToQuery.js\";\nimport queryToObject from \"./queryToObject.js\";\nimport Request from \"./Request.js\";\nimport RequestErrorEvent from \"./RequestErrorEvent.js\";\nimport RequestScheduler from \"./RequestScheduler.js\";\nimport RequestState from \"./RequestState.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TrustedServers from \"./TrustedServers.js\";\n\nconst xhrBlobSupported = (function () {\n  try {\n    const xhr = new XMLHttpRequest();\n    xhr.open(\"GET\", \"#\", true);\n    xhr.responseType = \"blob\";\n    return xhr.responseType === \"blob\";\n  } catch (e) {\n    return false;\n  }\n})();\n\n/**\n * @typedef {object} Resource.ConstructorOptions\n *\n * Initialization options for the Resource constructor\n *\n * @property {string} url The url of the resource.\n * @property {object} [queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @property {object} [templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @property {object} [headers={}] Additional HTTP headers that will be sent.\n * @property {Proxy} [proxy] A proxy to be used when loading the resource.\n * @property {Resource.RetryCallback} [retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @property {number} [retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @property {Request} [request] A Request object that will be used. Intended for internal use only.\n * @property {boolean} [parseUrl=true] If true, parse the url for query parameters; otherwise store the url without change\n */\n\n/**\n * A resource that includes the location and any other parameters we need to retrieve it or create derived resources. It also provides the ability to retry requests.\n *\n * @alias Resource\n * @constructor\n *\n * @param {string|Resource.ConstructorOptions} options A url or an object describing initialization options\n *\n * @example\n * function refreshTokenRetryCallback(resource, error) {\n *   if (error.statusCode === 403) {\n *     // 403 status code means a new token should be generated\n *     return getNewAccessToken()\n *       .then(function(token) {\n *         resource.queryParameters.access_token = token;\n *         return true;\n *       })\n *       .catch(function() {\n *         return false;\n *       });\n *   }\n *\n *   return false;\n * }\n *\n * const resource = new Resource({\n *    url: 'http://server.com/path/to/resource.json',\n *    proxy: new DefaultProxy('/proxy/'),\n *    headers: {\n *      'X-My-Header': 'valueOfHeader'\n *    },\n *    queryParameters: {\n *      'access_token': '123-435-456-000'\n *    },\n *    retryCallback: refreshTokenRetryCallback,\n *    retryAttempts: 1\n * });\n */\nfunction Resource(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  if (typeof options === \"string\") {\n    options = {\n      url: options,\n    };\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.url\", options.url);\n  //>>includeEnd('debug');\n\n  this._url = undefined;\n  this._templateValues = defaultClone(options.templateValues, {});\n  this._queryParameters = defaultClone(options.queryParameters, {});\n\n  /**\n   * Additional HTTP headers that will be sent with the request.\n   *\n   * @type {object}\n   */\n  this.headers = defaultClone(options.headers, {});\n\n  /**\n   * A Request object that will be used. Intended for internal use only.\n   *\n   * @type {Request}\n   */\n  this.request = options.request ?? new Request();\n\n  /**\n   * A proxy to be used when loading the resource.\n   *\n   * @type {Proxy}\n   */\n  this.proxy = options.proxy;\n\n  /**\n   * Function to call when a request for this resource fails. If it returns true or a Promise that resolves to true, the request will be retried.\n   *\n   * @type {Function}\n   */\n  this.retryCallback = options.retryCallback;\n\n  /**\n   * The number of times the retryCallback should be called before giving up.\n   *\n   * @type {number}\n   */\n  this.retryAttempts = options.retryAttempts ?? 0;\n  this._retryCount = 0;\n\n  const parseUrl = options.parseUrl ?? true;\n  if (parseUrl) {\n    this.parseUrl(options.url, true, true);\n  } else {\n    this._url = options.url;\n  }\n\n  this._credits = options.credits;\n}\n\n/**\n * Clones a value if it is defined, otherwise returns the default value\n *\n * @param {object} [value] The value to clone.\n * @param {object} [defaultValue] The default value.\n *\n * @returns {object} A clone of value or the defaultValue.\n *\n * @private\n */\nfunction defaultClone(value, defaultValue) {\n  return defined(value) ? clone(value) : defaultValue;\n}\n\n/**\n * A helper function to create a resource depending on whether we have a String or a Resource\n *\n * @param {Resource|string} resource A Resource or a String to use when creating a new Resource.\n *\n * @returns {Resource} If resource is a String, a Resource constructed with the url and options. Otherwise the resource parameter is returned.\n *\n * @private\n */\nResource.createIfNeeded = function (resource) {\n  if (resource instanceof Resource) {\n    // Keep existing request object. This function is used internally to duplicate a Resource, so that it can't\n    //  be modified outside of a class that holds it (eg. an imagery or terrain provider). Since the Request objects\n    //  are managed outside of the providers, by the tile loading code, we want to keep the request property the same so if it is changed\n    //  in the underlying tiling code the requests for this resource will use it.\n    return resource.getDerivedResource({\n      request: resource.request,\n    });\n  }\n\n  if (typeof resource !== \"string\") {\n    return resource;\n  }\n\n  return new Resource({\n    url: resource,\n  });\n};\n\nlet supportsImageBitmapOptionsPromise;\n/**\n * A helper function to check whether createImageBitmap supports passing ImageBitmapOptions.\n *\n * @returns {Promise<boolean>} A promise that resolves to true if this browser supports creating an ImageBitmap with options.\n *\n * @private\n */\nResource.supportsImageBitmapOptions = function () {\n  // Until the HTML folks figure out what to do about this, we need to actually try loading an image to\n  // know if this browser supports passing options to the createImageBitmap function.\n  // https://github.com/whatwg/html/pull/4248\n  //\n  // We also need to check whether the colorSpaceConversion option is supported.\n  // We do this by loading a PNG with an embedded color profile, first with\n  // colorSpaceConversion: \"none\" and then with colorSpaceConversion: \"default\".\n  // If the pixel color is different then we know the option is working.\n  // As of Webkit 17612.3.6.1.6 the createImageBitmap promise resolves but the\n  // option is not actually supported.\n  if (defined(supportsImageBitmapOptionsPromise)) {\n    return supportsImageBitmapOptionsPromise;\n  }\n\n  if (typeof createImageBitmap !== \"function\") {\n    supportsImageBitmapOptionsPromise = Promise.resolve(false);\n    return supportsImageBitmapOptionsPromise;\n  }\n\n  const imageDataUri =\n    \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAAE4g3rEiDgAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADElEQVQI12Ng6GAAAAEUAIngE3ZiAAAAAElFTkSuQmCC\";\n\n  supportsImageBitmapOptionsPromise = Resource.fetchBlob({\n    url: imageDataUri,\n  })\n    .then(function (blob) {\n      const imageBitmapOptions = {\n        // 'from-image' is deprecated, new option is 'none'. However, we still need to support older browsers,\n        // and there's no good way to detect support for these options. For now, continue to use 'from-image'. See: https://github.com/CesiumGS/cesium/issues/12846\n        imageOrientation: \"flipY\", // default is \"from-image\"\n        premultiplyAlpha: \"none\", // default is \"default\"\n        colorSpaceConversion: \"none\", // default is \"default\"\n      };\n      return Promise.all([\n        createImageBitmap(blob, imageBitmapOptions),\n        createImageBitmap(blob),\n      ]);\n    })\n    .then(function (imageBitmaps) {\n      // Check whether the colorSpaceConversion option had any effect on the green channel\n      const colorWithOptions = getImagePixels(imageBitmaps[0]);\n      const colorWithDefaults = getImagePixels(imageBitmaps[1]);\n      return colorWithOptions[1] !== colorWithDefaults[1];\n    })\n    .catch(function () {\n      return false;\n    });\n\n  return supportsImageBitmapOptionsPromise;\n};\n\nObject.defineProperties(Resource, {\n  /**\n   * Returns true if blobs are supported.\n   *\n   * @memberof Resource\n   * @type {boolean}\n   *\n   * @readonly\n   */\n  isBlobSupported: {\n    get: function () {\n      return xhrBlobSupported;\n    },\n  },\n});\n\nObject.defineProperties(Resource.prototype, {\n  /**\n   * Query parameters appended to the url.\n   *\n   * @memberof Resource.prototype\n   * @type {object}\n   *\n   * @readonly\n   */\n  queryParameters: {\n    get: function () {\n      return this._queryParameters;\n    },\n  },\n\n  /**\n   * The key/value pairs used to replace template parameters in the url.\n   *\n   * @memberof Resource.prototype\n   * @type {object}\n   *\n   * @readonly\n   */\n  templateValues: {\n    get: function () {\n      return this._templateValues;\n    },\n  },\n\n  /**\n   * The url to the resource with template values replaced, query string appended and encoded by proxy if one was set.\n   *\n   * @memberof Resource.prototype\n   * @type {string}\n   */\n  url: {\n    get: function () {\n      return this.getUrlComponent(true, true);\n    },\n    set: function (value) {\n      this.parseUrl(value, false, false);\n    },\n  },\n\n  /**\n   * The file extension of the resource.\n   *\n   * @memberof Resource.prototype\n   * @type {string}\n   *\n   * @readonly\n   */\n  extension: {\n    get: function () {\n      return getExtensionFromUri(this._url);\n    },\n  },\n\n  /**\n   * True if the Resource refers to a data URI.\n   *\n   * @memberof Resource.prototype\n   * @type {boolean}\n   */\n  isDataUri: {\n    get: function () {\n      return isDataUri(this._url);\n    },\n  },\n\n  /**\n   * True if the Resource refers to a blob URI.\n   *\n   * @memberof Resource.prototype\n   * @type {boolean}\n   */\n  isBlobUri: {\n    get: function () {\n      return isBlobUri(this._url);\n    },\n  },\n\n  /**\n   * True if the Resource refers to a cross origin URL.\n   *\n   * @memberof Resource.prototype\n   * @type {boolean}\n   */\n  isCrossOriginUrl: {\n    get: function () {\n      return isCrossOriginUrl(this._url);\n    },\n  },\n\n  /**\n   * True if the Resource has request headers. This is equivalent to checking if the headers property has any keys.\n   *\n   * @memberof Resource.prototype\n   * @type {boolean}\n   */\n  hasHeaders: {\n    get: function () {\n      return Object.keys(this.headers).length > 0;\n    },\n  },\n\n  /**\n   * Gets the credits required for attribution of an asset.\n   * @private\n   */\n  credits: {\n    get: function () {\n      return this._credits;\n    },\n  },\n});\n\n/**\n * Override Object#toString so that implicit string conversion gives the\n * complete URL represented by this Resource.\n *\n * @returns {string} The URL represented by this Resource\n */\nResource.prototype.toString = function () {\n  return this.getUrlComponent(true, true);\n};\n\n/**\n * Parse a url string, and store its info\n *\n * @param {string} url The input url string.\n * @param {boolean} merge If true, we'll merge with the resource's existing queryParameters. Otherwise they will be replaced.\n * @param {boolean} preserveQuery If true duplicate parameters will be concatenated into an array. If false, keys in url will take precedence.\n * @param {string} [baseUrl] If supplied, and input url is a relative url, it will be made absolute relative to baseUrl\n *\n * @private\n */\nResource.prototype.parseUrl = function (url, merge, preserveQuery, baseUrl) {\n  let uri = new Uri(url);\n  const query = parseQueryString(uri.query());\n\n  this._queryParameters = merge\n    ? combineQueryParameters(query, this.queryParameters, preserveQuery)\n    : query;\n\n  // Remove unneeded info from the Uri\n  uri.search(\"\");\n  uri.fragment(\"\");\n\n  if (defined(baseUrl) && uri.scheme() === \"\") {\n    uri = uri.absoluteTo(getAbsoluteUri(baseUrl));\n  }\n\n  this._url = uri.toString();\n};\n\n/**\n * Parses a query string and returns the object equivalent.\n *\n * @param {string} queryString The query string\n * @returns {object}\n *\n * @private\n */\nfunction parseQueryString(queryString) {\n  if (queryString.length === 0) {\n    return {};\n  }\n\n  // Special case where the querystring is just a string, not key/value pairs\n  if (queryString.indexOf(\"=\") === -1) {\n    return { [queryString]: undefined };\n  }\n\n  return queryToObject(queryString);\n}\n\n/**\n * This combines a map of query parameters.\n *\n * @param {object} q1 The first map of query parameters. Values in this map will take precedence if preserveQueryParameters is false.\n * @param {object} q2 The second map of query parameters.\n * @param {boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in q1 will take precedence.\n *\n * @returns {object} The combined map of query parameters.\n *\n * @example\n * const q1 = {\n *   a: 1,\n *   b: 2\n * };\n * const q2 = {\n *   a: 3,\n *   c: 4\n * };\n * const q3 = {\n *   b: [5, 6],\n *   d: 7\n * }\n *\n * // Returns\n * // {\n * //   a: [1, 3],\n * //   b: 2,\n * //   c: 4\n * // };\n * combineQueryParameters(q1, q2, true);\n *\n * // Returns\n * // {\n * //   a: 1,\n * //   b: 2,\n * //   c: 4\n * // };\n * combineQueryParameters(q1, q2, false);\n *\n * // Returns\n * // {\n * //   a: 1,\n * //   b: [2, 5, 6],\n * //   d: 7\n * // };\n * combineQueryParameters(q1, q3, true);\n *\n * // Returns\n * // {\n * //   a: 1,\n * //   b: 2,\n * //   d: 7\n * // };\n * combineQueryParameters(q1, q3, false);\n *\n * @private\n */\nfunction combineQueryParameters(q1, q2, preserveQueryParameters) {\n  if (!preserveQueryParameters) {\n    return combine(q1, q2);\n  }\n\n  const result = clone(q1, true);\n  for (const param in q2) {\n    if (q2.hasOwnProperty(param)) {\n      let value = result[param];\n      const q2Value = q2[param];\n      if (defined(value)) {\n        if (!Array.isArray(value)) {\n          value = result[param] = [value];\n        }\n\n        result[param] = value.concat(q2Value);\n      } else {\n        result[param] = Array.isArray(q2Value) ? q2Value.slice() : q2Value;\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Returns the url, optional with the query string and processed by a proxy.\n *\n * @param {boolean} [query=false] If true, the query string is included.\n * @param {boolean} [proxy=false] If true, the url is processed by the proxy object, if defined.\n *\n * @returns {string} The url with all the requested components.\n */\nResource.prototype.getUrlComponent = function (query, proxy) {\n  if (this.isDataUri) {\n    return this._url;\n  }\n\n  let url = this._url;\n  if (query) {\n    url = `${url}${stringifyQuery(this.queryParameters)}`;\n  }\n\n  // Restore the placeholders, which may have been escaped in objectToQuery or elsewhere\n  url = url.replace(/%7B/g, \"{\").replace(/%7D/g, \"}\");\n\n  const templateValues = this._templateValues;\n  if (Object.keys(templateValues).length > 0) {\n    url = url.replace(/{(.*?)}/g, function (match, key) {\n      const replacement = templateValues[key];\n      if (defined(replacement)) {\n        // use the replacement value from templateValues if there is one...\n        return encodeURIComponent(replacement);\n      }\n      // otherwise leave it unchanged\n      return match;\n    });\n  }\n\n  if (proxy && defined(this.proxy)) {\n    url = this.proxy.getURL(url);\n  }\n\n  return url;\n};\n\n/**\n * Converts a query object into a string.\n *\n * @param {object} queryObject The object with query parameters\n * @returns {string}\n *\n * @private\n */\nfunction stringifyQuery(queryObject) {\n  const keys = Object.keys(queryObject);\n\n  if (keys.length === 0) {\n    return \"\";\n  }\n  if (keys.length === 1 && !defined(queryObject[keys[0]])) {\n    // We have 1 key with an undefined value, so this is just a string, not key/value pairs\n    return `?${keys[0]}`;\n  }\n\n  return `?${objectToQuery(queryObject)}`;\n}\n\n/**\n * Combines the specified object and the existing query parameters. This allows you to add many parameters at once,\n *  as opposed to adding them one at a time to the queryParameters property. If a value is already set, it will be replaced with the new value.\n *\n * @param {object} params The query parameters\n * @param {boolean} [useAsDefault=false] If true the params will be used as the default values, so they will only be set if they are undefined.\n */\nResource.prototype.setQueryParameters = function (params, useAsDefault) {\n  if (useAsDefault) {\n    this._queryParameters = combineQueryParameters(\n      this._queryParameters,\n      params,\n      false,\n    );\n  } else {\n    this._queryParameters = combineQueryParameters(\n      params,\n      this._queryParameters,\n      false,\n    );\n  }\n};\n\n/**\n * Combines the specified object and the existing query parameters. This allows you to add many parameters at once,\n *  as opposed to adding them one at a time to the queryParameters property.\n *\n * @param {object} params The query parameters\n */\nResource.prototype.appendQueryParameters = function (params) {\n  this._queryParameters = combineQueryParameters(\n    params,\n    this._queryParameters,\n    true,\n  );\n};\n\n/**\n * Combines the specified object and the existing template values. This allows you to add many values at once,\n *  as opposed to adding them one at a time to the templateValues property. If a value is already set, it will become an array and the new value will be appended.\n *\n * @param {object} template The template values\n * @param {boolean} [useAsDefault=false] If true the values will be used as the default values, so they will only be set if they are undefined.\n */\nResource.prototype.setTemplateValues = function (template, useAsDefault) {\n  if (useAsDefault) {\n    this._templateValues = combine(this._templateValues, template);\n  } else {\n    this._templateValues = combine(template, this._templateValues);\n  }\n};\n\n/**\n * Returns a resource relative to the current instance. All properties remain the same as the current instance unless overridden in options.\n *\n * @param {object} options An object with the following properties\n * @param {string} [options.url]  The url that will be resolved relative to the url of the current instance.\n * @param {object} [options.queryParameters] An object containing query parameters that will be combined with those of the current instance.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). These will be combined with those of the current instance.\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The function to call when loading the resource fails.\n * @param {number} [options.retryAttempts] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {boolean} [options.preserveQueryParameters=false] If true, this will keep all query parameters from the current resource and derived resource. If false, derived parameters will replace those of the current resource.\n *\n * @returns {Resource} The resource derived from the current one.\n */\nResource.prototype.getDerivedResource = function (options) {\n  const resource = this.clone();\n  resource._retryCount = 0;\n\n  if (defined(options.url)) {\n    const preserveQuery = options.preserveQueryParameters ?? false;\n    resource.parseUrl(options.url, true, preserveQuery, this._url);\n  }\n\n  if (defined(options.queryParameters)) {\n    resource._queryParameters = combine(\n      options.queryParameters,\n      resource.queryParameters,\n    );\n  }\n  if (defined(options.templateValues)) {\n    resource._templateValues = combine(\n      options.templateValues,\n      resource.templateValues,\n    );\n  }\n  if (defined(options.headers)) {\n    resource.headers = combine(options.headers, resource.headers);\n  }\n  if (defined(options.proxy)) {\n    resource.proxy = options.proxy;\n  }\n  if (defined(options.request)) {\n    resource.request = options.request;\n  }\n  if (defined(options.retryCallback)) {\n    resource.retryCallback = options.retryCallback;\n  }\n  if (defined(options.retryAttempts)) {\n    resource.retryAttempts = options.retryAttempts;\n  }\n\n  return resource;\n};\n\n/**\n * Called when a resource fails to load. This will call the retryCallback function if defined until retryAttempts is reached.\n *\n * @param {RequestErrorEvent} [error] The error that was encountered.\n *\n * @returns {Promise<boolean>} A promise to a boolean, that if true will cause the resource request to be retried.\n *\n * @private\n */\nResource.prototype.retryOnError = function (error) {\n  const retryCallback = this.retryCallback;\n  if (\n    typeof retryCallback !== \"function\" ||\n    this._retryCount >= this.retryAttempts\n  ) {\n    return Promise.resolve(false);\n  }\n\n  const that = this;\n  return Promise.resolve(retryCallback(this, error)).then(function (result) {\n    ++that._retryCount;\n\n    return result;\n  });\n};\n\n/**\n * Duplicates a Resource instance.\n *\n * @param {Resource} [result] The object onto which to store the result.\n *\n * @returns {Resource} The modified result parameter or a new Resource instance if one was not provided.\n */\nResource.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new Resource({\n      url: this._url,\n      queryParameters: this.queryParameters,\n      templateValues: this.templateValues,\n      headers: this.headers,\n      proxy: this.proxy,\n      retryCallback: this.retryCallback,\n      retryAttempts: this.retryAttempts,\n      request: this.request.clone(),\n      parseUrl: false,\n      credits: defined(this.credits) ? this.credits.slice() : undefined,\n    });\n  }\n\n  result._url = this._url;\n  result._queryParameters = clone(this._queryParameters);\n  result._templateValues = clone(this._templateValues);\n  result.headers = clone(this.headers);\n  result.proxy = this.proxy;\n  result.retryCallback = this.retryCallback;\n  result.retryAttempts = this.retryAttempts;\n  result._retryCount = 0;\n  result.request = this.request.clone();\n\n  return result;\n};\n\n/**\n * Returns the base path of the Resource.\n *\n * @param {boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri\n *\n * @returns {string} The base URI of the resource\n */\nResource.prototype.getBaseUri = function (includeQuery) {\n  return getBaseUri(this.getUrlComponent(includeQuery), includeQuery);\n};\n\n/**\n * Appends a forward slash to the URL.\n */\nResource.prototype.appendForwardSlash = function () {\n  this._url = appendForwardSlash(this._url);\n};\n\n/**\n * Asynchronously loads the resource as raw binary data.  Returns a promise that will resolve to\n * an ArrayBuffer once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise<ArrayBuffer>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @example\n * // load a single URL asynchronously\n * resource.fetchArrayBuffer().then(function(arrayBuffer) {\n *     // use the data\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchArrayBuffer = function () {\n  return this.fetch({\n    responseType: \"arraybuffer\",\n  });\n};\n\n/**\n * Creates a Resource and calls fetchArrayBuffer() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise<ArrayBuffer>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchArrayBuffer = function (options) {\n  const resource = new Resource(options);\n  return resource.fetchArrayBuffer();\n};\n\n/**\n * Asynchronously loads the given resource as a blob.  Returns a promise that will resolve to\n * a Blob once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise<Blob>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @example\n * // load a single URL asynchronously\n * resource.fetchBlob().then(function(blob) {\n *     // use the data\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchBlob = function () {\n  return this.fetch({\n    responseType: \"blob\",\n  });\n};\n\n/**\n * Creates a Resource and calls fetchBlob() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise<Blob>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchBlob = function (options) {\n  const resource = new Resource(options);\n  return resource.fetchBlob();\n};\n\n/**\n * Asynchronously loads the given image resource.  Returns a promise that will resolve to\n * an {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap|ImageBitmap} if <code>preferImageBitmap</code> is true and the browser supports <code>createImageBitmap</code> or otherwise an\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement|Image} once loaded, or reject if the image failed to load.\n *\n * @param {object} [options] An object with the following properties.\n * @param {boolean} [options.preferBlob=false] If true, we will load the image via a blob.\n * @param {boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an <code>ImageBitmap</code> is returned.\n * @param {boolean} [options.flipY=false] If true, image will be vertically flipped during decode. Only applies if the browser supports <code>createImageBitmap</code>.\n * @param {boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies if the browser supports <code>createImageBitmap</code>.\n * @returns {Promise<ImageBitmap|HTMLImageElement>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * // load a single image asynchronously\n * resource.fetchImage().then(function(image) {\n *     // use the loaded image\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * // load several images in parallel\n * Promise.all([resource1.fetchImage(), resource2.fetchImage()]).then(function(images) {\n *     // images is an array containing all the loaded images\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchImage = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const preferImageBitmap = options.preferImageBitmap ?? false;\n  const preferBlob = options.preferBlob ?? false;\n  const flipY = options.flipY ?? false;\n  const skipColorSpaceConversion = options.skipColorSpaceConversion ?? false;\n\n  checkAndResetRequest(this.request);\n  // We try to load the image normally if\n  // 1. Blobs aren't supported\n  // 2. It's a data URI\n  // 3. It's a blob URI\n  // 4. It doesn't have request headers and we preferBlob is false\n  if (\n    !xhrBlobSupported ||\n    this.isDataUri ||\n    this.isBlobUri ||\n    (!this.hasHeaders && !preferBlob)\n  ) {\n    return this._fetchImage({\n      resource: this,\n      flipY: flipY,\n      skipColorSpaceConversion: skipColorSpaceConversion,\n      preferImageBitmap: preferImageBitmap,\n    });\n  }\n\n  const blobPromise = this.fetchBlob();\n  if (!defined(blobPromise)) {\n    return;\n  }\n\n  let supportsImageBitmap;\n  let useImageBitmap;\n  let generatedBlobResource;\n  let generatedBlob;\n  return Resource.supportsImageBitmapOptions()\n    .then(function (result) {\n      supportsImageBitmap = result;\n      useImageBitmap = supportsImageBitmap && preferImageBitmap;\n      return blobPromise;\n    })\n    .then(function (blob) {\n      if (!defined(blob)) {\n        return;\n      }\n      generatedBlob = blob;\n      if (useImageBitmap) {\n        return Resource.createImageBitmapFromBlob(blob, {\n          flipY: flipY,\n          premultiplyAlpha: false,\n          skipColorSpaceConversion: skipColorSpaceConversion,\n        });\n      }\n      const blobUrl = window.URL.createObjectURL(blob);\n      generatedBlobResource = new Resource({\n        url: blobUrl,\n      });\n\n      return generatedBlobResource._fetchImage({\n        flipY: flipY,\n        skipColorSpaceConversion: skipColorSpaceConversion,\n        preferImageBitmap: false,\n      });\n    })\n    .then(function (image) {\n      if (!defined(image)) {\n        return;\n      }\n\n      // The blob object may be needed for use by a TileDiscardPolicy,\n      // so attach it to the image.\n      image.blob = generatedBlob;\n\n      if (useImageBitmap) {\n        return image;\n      }\n\n      window.URL.revokeObjectURL(generatedBlobResource.url);\n      return image;\n    })\n    .catch(function (error) {\n      if (defined(generatedBlobResource)) {\n        window.URL.revokeObjectURL(generatedBlobResource.url);\n      }\n\n      // If the blob load succeeded but the image decode failed, attach the blob\n      // to the error object for use by a TileDiscardPolicy.\n      // In particular, BingMapsImageryProvider uses this to detect the\n      // zero-length response that is returned when a tile is not available.\n      error.blob = generatedBlob;\n\n      return Promise.reject(error);\n    });\n};\n\n/**\n * Fetches an image and returns a promise to it.\n * @param {object} [options] An object with the following properties.\n * @param {boolean} [options.preferImageBitmap] If true, image will be decoded during fetch and an <code>ImageBitmap</code> is returned.\n * @param {boolean} [options.flipY] If true, image will be vertically flipped during decode. Only applies if the browser supports <code>createImageBitmap</code>.\n * @param {boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies if the browser supports <code>createImageBitmap</code>.\n * @returns {Promise<ImageBitmap|HTMLImageElement>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if the request has been throttled and cannot be made at this time.\n * @private\n */\nResource.prototype._fetchImage = function (options) {\n  const resource = this;\n  const flipY = options.flipY;\n  const skipColorSpaceConversion = options.skipColorSpaceConversion;\n  const preferImageBitmap = options.preferImageBitmap;\n\n  const request = resource.request;\n  request.url = resource.url;\n  request.requestFunction = function () {\n    let crossOrigin = false;\n\n    // data URIs can't have crossorigin set.\n    if (!resource.isDataUri && !resource.isBlobUri) {\n      crossOrigin = resource.isCrossOriginUrl;\n    }\n\n    const deferred = defer();\n    Resource._Implementations.createImage(\n      request,\n      crossOrigin,\n      deferred,\n      flipY,\n      skipColorSpaceConversion,\n      preferImageBitmap,\n    );\n\n    return deferred.promise;\n  };\n\n  const promise = RequestScheduler.request(request);\n  if (!defined(promise)) {\n    return;\n  }\n\n  return promise.catch(function (e) {\n    // Don't retry cancelled or otherwise aborted requests\n    if (request.state !== RequestState.FAILED) {\n      return Promise.reject(e);\n    }\n    return resource.retryOnError(e).then(function (retry) {\n      if (retry) {\n        // Reset request so it can try again\n        request.state = RequestState.UNISSUED;\n        request.deferred = undefined;\n\n        return resource._fetchImage({\n          flipY: flipY,\n          skipColorSpaceConversion: skipColorSpaceConversion,\n          preferImageBitmap: preferImageBitmap,\n        });\n      }\n      return Promise.reject(e);\n    });\n  });\n};\n\n/**\n * Creates a Resource and calls fetchImage() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {boolean} [options.flipY=false] Whether to vertically flip the image during fetch and decode. Only applies when requesting an image and the browser supports <code>createImageBitmap</code>.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {boolean} [options.preferBlob=false]  If true, we will load the image via a blob.\n * @param {boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an <code>ImageBitmap</code> is returned.\n * @param {boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies when requesting an image and the browser supports <code>createImageBitmap</code>.\n * @returns {Promise<ImageBitmap|HTMLImageElement>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchImage = function (options) {\n  const resource = new Resource(options);\n  return resource.fetchImage({\n    flipY: options.flipY,\n    skipColorSpaceConversion: options.skipColorSpaceConversion,\n    preferBlob: options.preferBlob,\n    preferImageBitmap: options.preferImageBitmap,\n  });\n};\n\n/**\n * Asynchronously loads the given resource as text.  Returns a promise that will resolve to\n * a String once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise<string>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @example\n * // load text from a URL, setting a custom header\n * const resource = new Resource({\n *   url: 'http://someUrl.com/someJson.txt',\n *   headers: {\n *     'X-Custom-Header' : 'some value'\n *   }\n * });\n * resource.fetchText().then(function(text) {\n *     // Do something with the text\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchText = function () {\n  return this.fetch({\n    responseType: \"text\",\n  });\n};\n\n/**\n * Creates a Resource and calls fetchText() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise<string>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchText = function (options) {\n  const resource = new Resource(options);\n  return resource.fetchText();\n};\n\n// note: &#42;&#47;&#42; below is */* but that ends the comment block early\n/**\n * Asynchronously loads the given resource as JSON.  Returns a promise that will resolve to\n * a JSON object once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. This function\n * adds 'Accept: application/json,&#42;&#47;&#42;;q=0.01' to the request headers, if not\n * already specified.\n *\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.fetchJson().then(function(jsonData) {\n *     // Do something with the JSON object\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchJson = function () {\n  const promise = this.fetch({\n    responseType: \"text\",\n    headers: {\n      Accept: \"application/json,*/*;q=0.01\",\n    },\n  });\n\n  if (!defined(promise)) {\n    return undefined;\n  }\n\n  return promise.then(function (value) {\n    if (!defined(value)) {\n      return;\n    }\n    return JSON.parse(value);\n  });\n};\n\n/**\n * Creates a Resource and calls fetchJson() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchJson = function (options) {\n  const resource = new Resource(options);\n  return resource.fetchJson();\n};\n\n/**\n * Asynchronously loads the given resource as XML.  Returns a promise that will resolve to\n * an XML Document once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @returns {Promise<XMLDocument>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * // load XML from a URL, setting a custom header\n * Cesium.loadXML('http://someUrl.com/someXML.xml', {\n *   'X-Custom-Header' : 'some value'\n * }).then(function(document) {\n *     // Do something with the document\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchXML = function () {\n  return this.fetch({\n    responseType: \"document\",\n    overrideMimeType: \"text/xml\",\n  });\n};\n\n/**\n * Creates a Resource and calls fetchXML() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @returns {Promise<XMLDocument>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchXML = function (options) {\n  const resource = new Resource(options);\n  return resource.fetchXML();\n};\n\n/**\n * Requests a resource using JSONP.\n *\n * @param {string} [callbackParameterName='callback'] The callback parameter name that the server expects.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * // load a data asynchronously\n * resource.fetchJsonp().then(function(data) {\n *     // use the loaded data\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetchJsonp = function (callbackParameterName) {\n  callbackParameterName = callbackParameterName ?? \"callback\";\n\n  checkAndResetRequest(this.request);\n\n  //generate a unique function name\n  let functionName;\n  do {\n    functionName = `loadJsonp${CesiumMath.nextRandomNumber()\n      .toString()\n      .substring(2, 8)}`;\n  } while (defined(window[functionName]));\n\n  return fetchJsonp(this, callbackParameterName, functionName);\n};\n\nfunction fetchJsonp(resource, callbackParameterName, functionName) {\n  const callbackQuery = {};\n  callbackQuery[callbackParameterName] = functionName;\n  resource.setQueryParameters(callbackQuery);\n\n  const request = resource.request;\n  const url = resource.url;\n  request.url = url;\n  request.requestFunction = function () {\n    const deferred = defer();\n\n    //assign a function with that name in the global scope\n    window[functionName] = function (data) {\n      deferred.resolve(data);\n\n      try {\n        delete window[functionName];\n      } catch (e) {\n        window[functionName] = undefined;\n      }\n    };\n\n    Resource._Implementations.loadAndExecuteScript(url, functionName, deferred);\n    return deferred.promise;\n  };\n\n  const promise = RequestScheduler.request(request);\n  if (!defined(promise)) {\n    return;\n  }\n\n  return promise.catch(function (e) {\n    if (request.state !== RequestState.FAILED) {\n      return Promise.reject(e);\n    }\n\n    return resource.retryOnError(e).then(function (retry) {\n      if (retry) {\n        // Reset request so it can try again\n        request.state = RequestState.UNISSUED;\n        request.deferred = undefined;\n\n        return fetchJsonp(resource, callbackParameterName, functionName);\n      }\n\n      return Promise.reject(e);\n    });\n  });\n}\n\n/**\n * Creates a Resource from a URL and calls fetchJsonp() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.callbackParameterName='callback'] The callback parameter name that the server expects.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetchJsonp = function (options) {\n  const resource = new Resource(options);\n  return resource.fetchJsonp(options.callbackParameterName);\n};\n\n/**\n * @private\n */\nResource.prototype._makeRequest = function (options) {\n  const resource = this;\n  checkAndResetRequest(resource.request);\n\n  const request = resource.request;\n  const url = resource.url;\n  request.url = url;\n\n  request.requestFunction = function () {\n    const responseType = options.responseType;\n    const headers = combine(options.headers, resource.headers);\n    const overrideMimeType = options.overrideMimeType;\n    const method = options.method;\n    const data = options.data;\n    const deferred = defer();\n    const xhr = Resource._Implementations.loadWithXhr(\n      url,\n      responseType,\n      method,\n      data,\n      headers,\n      deferred,\n      overrideMimeType,\n    );\n    if (defined(xhr) && defined(xhr.abort)) {\n      request.cancelFunction = function () {\n        xhr.abort();\n      };\n    }\n    return deferred.promise;\n  };\n\n  const promise = RequestScheduler.request(request);\n  if (!defined(promise)) {\n    return;\n  }\n\n  return promise\n    .then(function (data) {\n      // explicitly set to undefined to ensure GC of request response data. See #8843\n      request.cancelFunction = undefined;\n      return data;\n    })\n    .catch(function (e) {\n      request.cancelFunction = undefined;\n      if (request.state !== RequestState.FAILED) {\n        return Promise.reject(e);\n      }\n\n      return resource.retryOnError(e).then(function (retry) {\n        if (retry) {\n          // Reset request so it can try again\n          request.state = RequestState.UNISSUED;\n          request.deferred = undefined;\n\n          return resource.fetch(options);\n        }\n\n        return Promise.reject(e);\n      });\n    });\n};\n\n/**\n * Checks to make sure the Resource isn't already being requested.\n *\n * @param {Request} request The request to check.\n *\n * @private\n */\nfunction checkAndResetRequest(request) {\n  if (\n    request.state === RequestState.ISSUED ||\n    request.state === RequestState.ACTIVE\n  ) {\n    throw new RuntimeError(\"The Resource is already being fetched.\");\n  }\n\n  request.state = RequestState.UNISSUED;\n  request.deferred = undefined;\n}\n\nconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\nfunction decodeDataUriText(isBase64, data) {\n  const result = decodeURIComponent(data);\n  if (isBase64) {\n    return atob(result);\n  }\n  return result;\n}\n\nfunction decodeDataUriArrayBuffer(isBase64, data) {\n  const byteString = decodeDataUriText(isBase64, data);\n  const buffer = new ArrayBuffer(byteString.length);\n  const view = new Uint8Array(buffer);\n  for (let i = 0; i < byteString.length; i++) {\n    view[i] = byteString.charCodeAt(i);\n  }\n  return buffer;\n}\n\nfunction decodeDataUri(dataUriRegexResult, responseType) {\n  responseType = responseType ?? \"\";\n  const mimeType = dataUriRegexResult[1];\n  const isBase64 = !!dataUriRegexResult[2];\n  const data = dataUriRegexResult[3];\n  let buffer;\n  let parser;\n\n  switch (responseType) {\n    case \"\":\n    case \"text\":\n      return decodeDataUriText(isBase64, data);\n    case \"arraybuffer\":\n      return decodeDataUriArrayBuffer(isBase64, data);\n    case \"blob\":\n      buffer = decodeDataUriArrayBuffer(isBase64, data);\n      return new Blob([buffer], {\n        type: mimeType,\n      });\n    case \"document\":\n      parser = new DOMParser();\n      return parser.parseFromString(\n        decodeDataUriText(isBase64, data),\n        mimeType,\n      );\n    case \"json\":\n      return JSON.parse(decodeDataUriText(isBase64, data));\n    default:\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(`Unhandled responseType: ${responseType}`);\n    //>>includeEnd('debug');\n  }\n}\n\n/**\n * Asynchronously loads the given resource.  Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. It's recommended that you use\n * the more specific functions eg. fetchJson, fetchBlob, etc.\n *\n * @param {object} [options] Object with the following properties:\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.fetch()\n *   .then(function(body) {\n *       // use the data\n *   }).catch(function(error) {\n *       // an error occurred\n *   });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.fetch = function (options) {\n  options = defaultClone(options, {});\n  options.method = \"GET\";\n\n  return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls fetch() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.fetch = function (options) {\n  const resource = new Resource(options);\n  return resource.fetch({\n    // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n    responseType: options.responseType,\n    overrideMimeType: options.overrideMimeType,\n  });\n};\n\n/**\n * Asynchronously deletes the given resource.  Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {object} [options] Object with the following properties:\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.delete()\n *   .then(function(body) {\n *       // use the data\n *   }).catch(function(error) {\n *       // an error occurred\n *   });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.delete = function (options) {\n  options = defaultClone(options, {});\n  options.method = \"DELETE\";\n\n  return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls delete() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.data] Data that is posted with the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.delete = function (options) {\n  const resource = new Resource(options);\n  return resource.delete({\n    // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n    responseType: options.responseType,\n    overrideMimeType: options.overrideMimeType,\n    data: options.data,\n  });\n};\n\n/**\n * Asynchronously gets headers the given resource.  Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {object} [options] Object with the following properties:\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.head()\n *   .then(function(headers) {\n *       // use the data\n *   }).catch(function(error) {\n *       // an error occurred\n *   });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.head = function (options) {\n  options = defaultClone(options, {});\n  options.method = \"HEAD\";\n\n  return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls head() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.head = function (options) {\n  const resource = new Resource(options);\n  return resource.head({\n    // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n    responseType: options.responseType,\n    overrideMimeType: options.overrideMimeType,\n  });\n};\n\n/**\n * Asynchronously gets options the given resource.  Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {object} [options] Object with the following properties:\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.options()\n *   .then(function(headers) {\n *       // use the data\n *   }).catch(function(error) {\n *       // an error occurred\n *   });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.options = function (options) {\n  options = defaultClone(options, {});\n  options.method = \"OPTIONS\";\n\n  return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls options() on it.\n *\n * @param {string|object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.options = function (options) {\n  const resource = new Resource(options);\n  return resource.options({\n    // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\n    responseType: options.responseType,\n    overrideMimeType: options.overrideMimeType,\n  });\n};\n\n/**\n * Asynchronously posts data to the given resource.  Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {object} data Data that is posted with the resource.\n * @param {object} [options] Object with the following properties:\n * @param {object} [options.data] Data that is posted with the resource.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.post(data)\n *   .then(function(result) {\n *       // use the result\n *   }).catch(function(error) {\n *       // an error occurred\n *   });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.post = function (data, options) {\n  Check.defined(\"data\", data);\n\n  options = defaultClone(options, {});\n  options.method = \"POST\";\n  options.data = data;\n\n  return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls post() on it.\n *\n * @param {object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} options.data Data that is posted with the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.post = function (options) {\n  const resource = new Resource(options);\n  return resource.post(options.data, {\n    // Make copy of just the needed fields because headers can be passed to both the constructor and to post\n    responseType: options.responseType,\n    overrideMimeType: options.overrideMimeType,\n  });\n};\n\n/**\n * Asynchronously puts data to the given resource.  Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {object} data Data that is posted with the resource.\n * @param {object} [options] Object with the following properties:\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.put(data)\n *   .then(function(result) {\n *       // use the result\n *   }).catch(function(error) {\n *       // an error occurred\n *   });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.put = function (data, options) {\n  Check.defined(\"data\", data);\n\n  options = defaultClone(options, {});\n  options.method = \"PUT\";\n  options.data = data;\n\n  return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls put() on it.\n *\n * @param {object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} options.data Data that is posted with the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.put = function (options) {\n  const resource = new Resource(options);\n  return resource.put(options.data, {\n    // Make copy of just the needed fields because headers can be passed to both the constructor and to post\n    responseType: options.responseType,\n    overrideMimeType: options.overrideMimeType,\n  });\n};\n\n/**\n * Asynchronously patches data to the given resource.  Returns a promise that will resolve to\n * the result once loaded, or reject if the resource failed to load.  The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\n *\n * @param {object} data Data that is posted with the resource.\n * @param {object} [options] Object with the following properties:\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {object} [options.headers] Additional HTTP headers to send with the request, if any.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n *\n * @example\n * resource.patch(data)\n *   .then(function(result) {\n *       // use the result\n *   }).catch(function(error) {\n *       // an error occurred\n *   });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n */\nResource.prototype.patch = function (data, options) {\n  Check.defined(\"data\", data);\n\n  options = defaultClone(options, {});\n  options.method = \"PATCH\";\n  options.data = data;\n\n  return this._makeRequest(options);\n};\n\n/**\n * Creates a Resource from a URL and calls patch() on it.\n *\n * @param {object} options A url or an object with the following properties\n * @param {string} options.url The url of the resource.\n * @param {object} options.data Data that is posted with the resource.\n * @param {object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\n * @param {object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\n * @param {object} [options.headers={}] Additional HTTP headers that will be sent.\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\n * @param {number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\n * @param {string} [options.responseType] The type of response.  This controls the type of item returned.\n * @param {string} [options.overrideMimeType] Overrides the MIME type returned by the server.\n * @returns {Promise<any>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n */\nResource.patch = function (options) {\n  const resource = new Resource(options);\n  return resource.patch(options.data, {\n    // Make copy of just the needed fields because headers can be passed to both the constructor and to post\n    responseType: options.responseType,\n    overrideMimeType: options.overrideMimeType,\n  });\n};\n\n/**\n * Contains implementations of functions that can be replaced for testing\n *\n * @private\n */\nResource._Implementations = {};\n\nResource._Implementations.loadImageElement = function (\n  url,\n  crossOrigin,\n  deferred,\n) {\n  const image = new Image();\n\n  image.onload = function () {\n    // work-around a known issue with Firefox and dimensionless SVG, see:\n    //   - https://github.com/whatwg/html/issues/3510\n    //   - https://bugzilla.mozilla.org/show_bug.cgi?id=700533\n    if (\n      image.naturalWidth === 0 &&\n      image.naturalHeight === 0 &&\n      image.width === 0 &&\n      image.height === 0\n    ) {\n      // these values affect rasterization and will likely mar the content\n      // until Firefox takes a stance on the issue, marred content is better than no content\n      // Chromium uses a more refined heuristic about its choice given nil viewBox, and a better stance and solution is\n      // proposed later in the original issue thread:\n      //   - Chromium behavior: https://github.com/CesiumGS/cesium/issues/9188#issuecomment-704400825\n      //   - Cesium's stance/solve: https://github.com/CesiumGS/cesium/issues/9188#issuecomment-720645777\n      image.width = 300;\n      image.height = 150;\n    }\n    deferred.resolve(image);\n  };\n\n  image.onerror = function (e) {\n    deferred.reject(e);\n  };\n\n  if (crossOrigin) {\n    if (TrustedServers.contains(url)) {\n      image.crossOrigin = \"use-credentials\";\n    } else {\n      image.crossOrigin = \"\";\n    }\n  }\n\n  image.src = url;\n};\n\nResource._Implementations.createImage = function (\n  request,\n  crossOrigin,\n  deferred,\n  flipY,\n  skipColorSpaceConversion,\n  preferImageBitmap,\n  headers,\n) {\n  const url = request.url;\n  // Passing an Image to createImageBitmap will force it to run on the main thread\n  // since DOM elements don't exist on workers. We convert it to a blob so it's non-blocking.\n  // See:\n  //    https://bugzilla.mozilla.org/show_bug.cgi?id=1044102#c38\n  //    https://bugs.chromium.org/p/chromium/issues/detail?id=580202#c10\n  Resource.supportsImageBitmapOptions()\n    .then(function (supportsImageBitmap) {\n      // We can only use ImageBitmap if we can flip on decode.\n      // See: https://github.com/CesiumGS/cesium/pull/7579#issuecomment-466146898\n      if (!(supportsImageBitmap && preferImageBitmap)) {\n        Resource._Implementations.loadImageElement(url, crossOrigin, deferred);\n        return;\n      }\n      const responseType = \"blob\";\n      const method = \"GET\";\n      const xhrDeferred = defer();\n      const xhr = Resource._Implementations.loadWithXhr(\n        url,\n        responseType,\n        method,\n        undefined,\n        headers,\n        xhrDeferred,\n        undefined,\n        undefined,\n        undefined,\n      );\n\n      if (defined(xhr) && defined(xhr.abort)) {\n        request.cancelFunction = function () {\n          xhr.abort();\n        };\n      }\n      return xhrDeferred.promise\n        .then(function (blob) {\n          if (!defined(blob)) {\n            deferred.reject(\n              new RuntimeError(\n                `Successfully retrieved ${url} but it contained no content.`,\n              ),\n            );\n            return;\n          }\n\n          return Resource.createImageBitmapFromBlob(blob, {\n            flipY: flipY,\n            premultiplyAlpha: false,\n            skipColorSpaceConversion: skipColorSpaceConversion,\n          });\n        })\n        .then(function (image) {\n          deferred.resolve(image);\n        });\n    })\n    .catch(function (e) {\n      deferred.reject(e);\n    });\n};\n\n/**\n * Wrapper for createImageBitmap\n *\n * @private\n * @param {Blob} blob The image blob.\n * @param {object} options An object containing the following properties:\n * @param {boolean} options.flipY Whether to flip the image Y axis.\n * @param {boolean} options.premultiplyAlpha Whether to premultiply the alpha channel.\n * @param {boolean} options.skipColorSpaceConversion Whether to skip color space conversion.\n * @returns {Promise<ImageBitmap>} A promise that resolves to the created image bitmap.\n */\nResource.createImageBitmapFromBlob = function (blob, options) {\n  Check.defined(\"options\", options);\n  Check.typeOf.bool(\"options.flipY\", options.flipY);\n  Check.typeOf.bool(\"options.premultiplyAlpha\", options.premultiplyAlpha);\n  Check.typeOf.bool(\n    \"options.skipColorSpaceConversion\",\n    options.skipColorSpaceConversion,\n  );\n\n  return createImageBitmap(blob, {\n    // 'from-image' is deprecated, new option is 'none'. However, we still need to support older browsers,\n    // and there's no good way to detect support for these options. For now, continue to use 'from-image'. See: https://github.com/CesiumGS/cesium/issues/12846\n    imageOrientation: options.flipY ? \"flipY\" : \"none\",\n    premultiplyAlpha: options.premultiplyAlpha ? \"premultiply\" : \"none\",\n    colorSpaceConversion: options.skipColorSpaceConversion ? \"none\" : \"default\",\n  });\n};\n\nfunction loadWithHttpRequest(\n  url,\n  responseType,\n  method,\n  data,\n  headers,\n  deferred,\n  overrideMimeType,\n) {\n  // Note: only the 'json' and 'text' responseTypes transforms the loaded buffer\n  fetch(url, {\n    method,\n    headers,\n  })\n    .then(async (response) => {\n      if (!response.ok) {\n        const responseHeaders = {};\n        response.headers.forEach((value, key) => {\n          responseHeaders[key] = value;\n        });\n        deferred.reject(\n          new RequestErrorEvent(response.status, response, responseHeaders),\n        );\n        return;\n      }\n\n      switch (responseType) {\n        case \"text\":\n          deferred.resolve(response.text());\n          break;\n        case \"json\":\n          deferred.resolve(response.json());\n          break;\n        default:\n          deferred.resolve(new Uint8Array(await response.arrayBuffer()).buffer);\n          break;\n      }\n    })\n    .catch(() => {\n      deferred.reject(new RequestErrorEvent());\n    });\n}\n\nconst noXMLHttpRequest = typeof XMLHttpRequest === \"undefined\";\nResource._Implementations.loadWithXhr = function (\n  url,\n  responseType,\n  method,\n  data,\n  headers,\n  deferred,\n  overrideMimeType,\n) {\n  const dataUriRegexResult = dataUriRegex.exec(url);\n  if (dataUriRegexResult !== null) {\n    deferred.resolve(decodeDataUri(dataUriRegexResult, responseType));\n    return;\n  }\n\n  if (noXMLHttpRequest) {\n    loadWithHttpRequest(\n      url,\n      responseType,\n      method,\n      data,\n      headers,\n      deferred,\n      overrideMimeType,\n    );\n    return;\n  }\n\n  const xhr = new XMLHttpRequest();\n\n  if (TrustedServers.contains(url)) {\n    xhr.withCredentials = true;\n  }\n\n  xhr.open(method, url, true);\n\n  if (defined(overrideMimeType) && defined(xhr.overrideMimeType)) {\n    xhr.overrideMimeType(overrideMimeType);\n  }\n\n  if (defined(headers)) {\n    for (const key in headers) {\n      if (headers.hasOwnProperty(key)) {\n        xhr.setRequestHeader(key, headers[key]);\n      }\n    }\n  }\n\n  if (defined(responseType)) {\n    xhr.responseType = responseType;\n  }\n\n  // While non-standard, file protocol always returns a status of 0 on success\n  let localFile = false;\n  if (typeof url === \"string\") {\n    localFile =\n      url.indexOf(\"file://\") === 0 ||\n      (typeof window !== \"undefined\" && window.location.origin === \"file://\");\n  }\n\n  xhr.onload = function () {\n    if (\n      (xhr.status < 200 || xhr.status >= 300) &&\n      !(localFile && xhr.status === 0)\n    ) {\n      deferred.reject(\n        new RequestErrorEvent(\n          xhr.status,\n          xhr.response,\n          xhr.getAllResponseHeaders(),\n        ),\n      );\n      return;\n    }\n\n    const response = xhr.response;\n    const browserResponseType = xhr.responseType;\n\n    if (method === \"HEAD\" || method === \"OPTIONS\") {\n      const responseHeaderString = xhr.getAllResponseHeaders();\n      const splitHeaders = responseHeaderString.trim().split(/[\\r\\n]+/);\n\n      const responseHeaders = {};\n      splitHeaders.forEach(function (line) {\n        const parts = line.split(\": \");\n        const header = parts.shift();\n        responseHeaders[header] = parts.join(\": \");\n      });\n\n      deferred.resolve(responseHeaders);\n      return;\n    }\n\n    //All modern browsers will go into either the first or second if block or last else block.\n    //Other code paths support older browsers that either do not support the supplied responseType\n    //or do not support the xhr.response property.\n    if (xhr.status === 204) {\n      // accept no content\n      deferred.resolve(undefined);\n    } else if (\n      defined(response) &&\n      (!defined(responseType) || browserResponseType === responseType)\n    ) {\n      deferred.resolve(response);\n    } else if (responseType === \"json\" && typeof response === \"string\") {\n      try {\n        deferred.resolve(JSON.parse(response));\n      } catch (e) {\n        deferred.reject(e);\n      }\n    } else if (\n      (browserResponseType === \"\" || browserResponseType === \"document\") &&\n      defined(xhr.responseXML) &&\n      xhr.responseXML.hasChildNodes()\n    ) {\n      deferred.resolve(xhr.responseXML);\n    } else if (\n      (browserResponseType === \"\" || browserResponseType === \"text\") &&\n      defined(xhr.responseText)\n    ) {\n      deferred.resolve(xhr.responseText);\n    } else {\n      deferred.reject(\n        new RuntimeError(\"Invalid XMLHttpRequest response type.\"),\n      );\n    }\n  };\n\n  xhr.onerror = function (e) {\n    deferred.reject(new RequestErrorEvent());\n  };\n\n  xhr.send(data);\n\n  return xhr;\n};\n\nResource._Implementations.loadAndExecuteScript = function (\n  url,\n  functionName,\n  deferred,\n) {\n  return loadAndExecuteScript(url, functionName).catch(function (e) {\n    deferred.reject(e);\n  });\n};\n\n/**\n * The default implementations\n *\n * @private\n */\nResource._DefaultImplementations = {};\nResource._DefaultImplementations.createImage =\n  Resource._Implementations.createImage;\nResource._DefaultImplementations.loadWithXhr =\n  Resource._Implementations.loadWithXhr;\nResource._DefaultImplementations.loadAndExecuteScript =\n  Resource._Implementations.loadAndExecuteScript;\n\n/**\n * A resource instance initialized to the current browser location\n *\n * @type {Resource}\n * @constant\n */\nResource.DEFAULT = Object.freeze(\n  new Resource({\n    url:\n      typeof document === \"undefined\"\n        ? \"\"\n        : document.location.href.split(\"?\")[0],\n  }),\n);\n\n/**\n * A function that returns the value of the property.\n * @callback Resource.RetryCallback\n *\n * @param {Resource} [resource] The resource that failed to load.\n * @param {RequestErrorEvent} [error] The error that occurred during the loading of the resource.\n * @returns {boolean|Promise<boolean>} If true or a promise that resolved to true, the resource will be retried. Otherwise the failure will be returned.\n */\nexport default Resource;\n","import defined from \"./defined.js\";\n\n/**\n * Constructs an exception object that is thrown due to an error that can occur at runtime, e.g.,\n * out of memory, could not compile shader, etc.  If a function may throw this\n * exception, the calling code should be prepared to catch it.\n * <br /><br />\n * On the other hand, a {@link DeveloperError} indicates an exception due\n * to a developer error, e.g., invalid argument, that usually indicates a bug in the\n * calling code.\n *\n * @alias RuntimeError\n * @constructor\n * @extends Error\n *\n * @param {string} [message] The error message for this exception.\n *\n * @see DeveloperError\n */\nfunction RuntimeError(message) {\n  /**\n   * 'RuntimeError' indicating that this exception was thrown due to a runtime error.\n   * @type {string}\n   * @readonly\n   */\n  this.name = \"RuntimeError\";\n\n  /**\n   * The explanation for why this exception was thrown.\n   * @type {string}\n   * @readonly\n   */\n  this.message = message;\n\n  //Browsers such as IE don't have a stack property until you actually throw the error.\n  let stack;\n  try {\n    throw new Error();\n  } catch (e) {\n    stack = e.stack;\n  }\n\n  /**\n   * The stack trace of this exception, if available.\n   * @type {string}\n   * @readonly\n   */\n  this.stack = stack;\n}\n\nif (defined(Object.create)) {\n  RuntimeError.prototype = Object.create(Error.prototype);\n  RuntimeError.prototype.constructor = RuntimeError;\n}\n\nRuntimeError.prototype.toString = function () {\n  let str = `${this.name}: ${this.message}`;\n\n  if (defined(this.stack)) {\n    str += `\\n${this.stack.toString()}`;\n  }\n\n  return str;\n};\nexport default RuntimeError;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * S2\n * --\n *\n * This implementation is based on the S2 C++ reference implementation: https://github.com/google/s2geometry\n *\n *\n * Overview:\n * ---------\n * The S2 library decomposes the unit sphere into a hierarchy of cells. A cell is a quadrilateral bounded by 4 geodesics.\n * The 6 root cells are obtained by projecting the six faces of a cube on a unit sphere. Each root cell follows a quadtree\n * subdivision scheme, i.e. each cell subdivides into 4 smaller cells that cover the same area as the parent cell. The S2 cell\n * hierarchy extends from level 0 (root cells) to level 30 (leaf cells). The root cells are rotated to enable a continuous Hilbert\n * curve to map all 6 faces of the cube.\n *\n *\n * Cell ID:\n * --------\n * Each cell in S2 can be uniquely identified using a 64-bit unsigned integer, its cell ID. The first 3 bits of the cell ID are the face bits, i.e.\n * they indicate which of the 6 faces of the cube a cell lies on. After the face bits are the position bits, i.e. they indicate the position\n * of the cell along the Hilbert curve. After the positions bits is the sentinel bit, which is always set to 1, and it indicates the level of the\n * cell. Again, the level can be between 0 and 30 in S2.\n *\n *   Note: In the illustration below, the face bits are marked with 'f', the position bits are marked with 'p', the zero bits are marked with '-'.\n *\n *   Cell ID (base 10): 3170534137668829184\n *   Cell ID (base 2) : 0010110000000000000000000000000000000000000000000000000000000000\n *\n *   001 0110000000000000000000000000000000000000000000000000000000000\n *   fff pps----------------------------------------------------------\n *\n * For the cell above, we can see that it lies on face 1 (01), with a Hilbert index of 1 (1).\n *\n *\n * Cell Subdivision:\n * ------------------\n * Cells in S2 subdivide recursively using quadtree subdivision. For each cell, you can get a child of index [0-3]. To compute the child at index i,\n * insert the base 2 representation of i to the right of the parent's position bits. Ensure that the sentinel bit is also shifted two places to the right.\n *\n *   Parent Cell ID (base 10) : 3170534137668829184\n *   Parent Cell ID (base 2)  : 0010110000000000000000000000000000000000000000000000000000000000\n *\n *   001 0110000000000000000000000000000000000000000000000000000000000\n *   fff pps----------------------------------------------------------\n *\n *   To get the 3rd child of the cell above, we insert the binary representation of 3 to the right of the parent's position bits:\n *\n *   Note: In the illustration below, the bits to be added are highlighted with '^'.\n *\n *   001 0111100000000000000000000000000000000000000000000000000000000\n *   fff pppps--------------------------------------------------------\n *         ^^\n *\n *   Child(3) Cell ID (base 10) : 3386706919782612992\n *   Child(3) Cell ID (base 2)  : 0010111100000000000000000000000000000000000000000000000000000000\n *\n * Cell Token:\n * -----------\n * To provide a more concise representation of the S2 cell ID, we can use their hexadecimal representation.\n *\n *   Cell ID (base 10): 3170534137668829184\n *   Cell ID (base 2) : 0010110000000000000000000000000000000000000000000000000000000000\n *\n *   We remove all trailing zero bits, until we reach the nybble (4 bits) that contains the sentinel bit.\n *\n *   Note: In the illustration below, the bits to be removed are highlighted with 'X'.\n *\n *   0010110000000000000000000000000000000000000000000000000000000000\n *   fffpps--XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n *\n *   We convert the remaining bits to their hexadecimal representation.\n *\n *   Base 2: 0010 1100\n *   Base 16: \"2\"  \"c\"\n *\n *   Cell Token: \"2c\"\n *\n * To compute the cell ID from the token, we simply add enough zeros to the right to make the ID span 64 bits.\n *\n * Coordinate Transforms:\n * ----------------------\n *\n * To go from a cell in S2 to a point on the ellipsoid, the following order of transforms is applied:\n *\n *   1. (Cell ID): S2 cell ID\n *   2. (Face, I, J): Leaf cell coordinates, where i and j are in range [0, 2^30 - 1]\n *   3. (Face, S, T): Cell space coordinates, where s and t are in range [0, 1].\n *   4. (Face, Si, Ti): Discrete cell space coordinates, where si and ti are in range [0, 2^31]\n *   5. (Face, U, V): Cube space coordinates, where u and v are in range [-1, 1]. We apply the non-linear quadratic transform here.\n *   6. (X, Y, Z): Direction vector, where vector may not be unit length. Can be normalized to obtain point on unit sphere\n *   7. (Latitude, Longitude): Direction vector, where latitude is in range [-90, 90] and longitude is in range [-180, 180]\n *\n * @ignore\n */\n\n// The maximum level supported within an S2 cell ID. Each level is represented by two bits in the final cell ID\nconst S2_MAX_LEVEL = 30;\n\n// The maximum index of a valid leaf cell plus one.  The range of valid leaf cell indices is [0..S2_LIMIT_IJ-1].\nconst S2_LIMIT_IJ = 1 << S2_MAX_LEVEL;\n\n// The maximum value of an si- or ti-coordinate.  The range of valid (si,ti) values is [0..S2_MAX_SITI].  Use `>>>` to convert to unsigned.\nconst S2_MAX_SITI = (1 << (S2_MAX_LEVEL + 1)) >>> 0;\n\n// The number of bits in a S2 cell ID used for specifying the position along the Hilbert curve\nconst S2_POSITION_BITS = 2 * S2_MAX_LEVEL + 1;\n\n// The number of bits per I and J in the lookup tables\nconst S2_LOOKUP_BITS = 4;\n\n// Lookup table for mapping 10 bits of IJ + orientation to 10 bits of Hilbert curve position + orientation.\nconst S2_LOOKUP_POSITIONS = [];\n\n// Lookup table for mapping 10 bits of IJ + orientation to 10 bits of Hilbert curve position + orientation.\nconst S2_LOOKUP_IJ = [];\n\n// Lookup table of two bits of IJ from two bits of curve position, based also on the current curve orientation from the swap and invert bits\nconst S2_POSITION_TO_IJ = [\n  [0, 1, 3, 2], // 0: Normal order, no swap or invert\n  [0, 2, 3, 1], // 1: Swap bit set, swap I and J bits\n  [3, 2, 0, 1], // 2: Invert bit set, invert bits\n  [3, 1, 0, 2], // 3: Swap and invert bits set\n];\n\n// Mask that specifies the swap orientation bit for the Hilbert curve\nconst S2_SWAP_MASK = 1;\n\n// Mask that specifies the invert orientation bit for the Hilbert curve\nconst S2_INVERT_MASK = 2;\n\n// Lookup for the orientation update mask of one of the four sub-cells within a higher level cell.\n// This mask is XOR'ed with the current orientation to get the sub-cell orientation.\nconst S2_POSITION_TO_ORIENTATION_MASK = [\n  S2_SWAP_MASK,\n  0,\n  0,\n  S2_SWAP_MASK | S2_INVERT_MASK,\n];\n\n/**\n * Represents a cell in the S2 geometry library.\n *\n * @alias S2Cell\n * @constructor\n *\n * @param {bigint} [cellId] The 64-bit S2CellId.\n * @private\n */\nfunction S2Cell(cellId) {\n  if (!FeatureDetection.supportsBigInt()) {\n    throw new RuntimeError(\"S2 required BigInt support\");\n  }\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cellId)) {\n    throw new DeveloperError(\"cell ID is required.\");\n  }\n  if (!S2Cell.isValidId(cellId)) {\n    throw new DeveloperError(\"cell ID is invalid.\");\n  }\n  //>>includeEnd('debug');\n\n  this._cellId = cellId;\n  this._level = S2Cell.getLevel(cellId);\n}\n\n/**\n * Creates a new S2Cell from a token. A token is a hexadecimal representation of the 64-bit S2CellId.\n *\n * @param {string} token The token for the S2 Cell.\n * @returns {S2Cell} Returns a new S2Cell.\n * @private\n */\nS2Cell.fromToken = function (token) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"token\", token);\n  if (!S2Cell.isValidToken(token)) {\n    throw new DeveloperError(\"token is invalid.\");\n  }\n  //>>includeEnd('debug');\n\n  return new S2Cell(S2Cell.getIdFromToken(token));\n};\n\n/**\n * Validates an S2 cell ID.\n *\n * @param {bigint} [cellId] The S2CellId.\n * @returns {boolean} Returns true if the cell ID is valid, returns false otherwise.\n * @private\n */\nS2Cell.isValidId = function (cellId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bigint(\"cellId\", cellId);\n  //>>includeEnd('debug');\n\n  // Check if sentinel bit is missing.\n  if (cellId <= 0) {\n    return false;\n  }\n\n  // Check if face bits indicate a valid value, in range [0-5].\n  if (cellId >> BigInt(S2_POSITION_BITS) > 5) {\n    return false;\n  }\n\n  // Check trailing 1 bit is in one of the even bit positions allowed for the 30 levels, using a bitmask.\n  const lowestSetBit = cellId & (~cellId + BigInt(1));\n  if (!(lowestSetBit & BigInt(\"0x1555555555555555\"))) {\n    return false;\n  }\n\n  return true;\n};\n\n/**\n * Validates an S2 cell token.\n *\n * @param {string} [token] The hexadecimal representation of an S2CellId.\n * @returns {boolean} Returns true if the token is valid, returns false otherwise.\n * @private\n */\nS2Cell.isValidToken = function (token) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"token\", token);\n  //>>includeEnd('debug');\n\n  if (!/^[0-9a-fA-F]{1,16}$/.test(token)) {\n    return false;\n  }\n\n  return S2Cell.isValidId(S2Cell.getIdFromToken(token));\n};\n\n/**\n * Converts an S2 cell token to a 64-bit S2 cell ID.\n *\n * @param {string} [token] The hexadecimal representation of an S2CellId. Expected to be a valid S2 token.\n * @returns {bigint} Returns the S2 cell ID.\n * @private\n */\nS2Cell.getIdFromToken = function (token) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"token\", token);\n  //>>includeEnd('debug');\n\n  return BigInt(\"0x\" + token + \"0\".repeat(16 - token.length)); // eslint-disable-line\n};\n\n/**\n * Converts a 64-bit S2 cell ID to an S2 cell token.\n *\n * @param {bigint} [cellId] The S2 cell ID.\n * @returns {string} Returns hexadecimal representation of an S2CellId.\n * @private\n */\nS2Cell.getTokenFromId = function (cellId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bigint(\"cellId\", cellId);\n  //>>includeEnd('debug');\n\n  const trailingZeroHexChars = Math.floor(countTrailingZeroBits(cellId) / 4);\n  const hexString = cellId.toString(16).replace(/0*$/, \"\");\n\n  const zeroString = Array(17 - trailingZeroHexChars - hexString.length).join(\n    \"0\",\n  );\n  return zeroString + hexString;\n};\n\n/**\n * Gets the level of the cell from the cell ID.\n *\n * @param {bigint} [cellId] The S2 cell ID.\n * @returns {number} Returns the level of the cell.\n * @private\n */\nS2Cell.getLevel = function (cellId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bigint(\"cellId\", cellId);\n  if (!S2Cell.isValidId(cellId)) {\n    throw new DeveloperError();\n  }\n  //>>includeEnd('debug');\n\n  let lsbPosition = 0;\n  while (cellId !== BigInt(0)) {\n    if (cellId & BigInt(1)) {\n      break;\n    }\n    lsbPosition++;\n    cellId = cellId >> BigInt(1);\n  }\n\n  // We use (>> 1) because there are 2 bits per level.\n  return S2_MAX_LEVEL - (lsbPosition >> 1);\n};\n\n/**\n * Gets the child cell of the cell at the given index.\n *\n * @param {number} index An integer index of the child.\n * @returns {S2Cell} The child of the S2Cell.\n * @private\n */\nS2Cell.prototype.getChild = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  if (index < 0 || index > 3) {\n    throw new DeveloperError(\"child index must be in the range [0-3].\");\n  }\n  if (this._level === 30) {\n    throw new DeveloperError(\"cannot get child of leaf cell.\");\n  }\n  //>>includeEnd('debug');\n\n  // Shift sentinel bit 2 positions to the right.\n  const newLsb = lsb(this._cellId) >> BigInt(2);\n  // Insert child index before the sentinel bit.\n  const childCellId = this._cellId + BigInt(2 * index + 1 - 4) * newLsb;\n  return new S2Cell(childCellId);\n};\n\n/**\n * Gets the parent cell of an S2Cell.\n *\n * @returns {S2Cell} Returns the parent of the S2Cell.\n * @private\n */\nS2Cell.prototype.getParent = function () {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._level === 0) {\n    throw new DeveloperError(\"cannot get parent of root cell.\");\n  }\n  //>>includeEnd('debug');\n  // Shift the sentinel bit 2 positions to the left.\n  const newLsb = lsb(this._cellId) << BigInt(2);\n  // Erase the left over bits to the right of the sentinel bit.\n  return new S2Cell((this._cellId & (~newLsb + BigInt(1))) | newLsb);\n};\n\n/**\n * Gets the parent cell at the given level.\n *\n * @returns {S2Cell} Returns the parent of the S2Cell.\n * @private\n */\nS2Cell.prototype.getParentAtLevel = function (level) {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._level === 0 || level < 0 || this._level < level) {\n    throw new DeveloperError(\"cannot get parent at invalid level.\");\n  }\n  //>>includeEnd('debug');\n  const newLsb = lsbForLevel(level);\n  return new S2Cell((this._cellId & -newLsb) | newLsb);\n};\n\n/**\n * Get center of the S2 cell.\n *\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n * @returns {Cartesian3} The position of center of the S2 cell.\n * @private\n */\nS2Cell.prototype.getCenter = function (ellipsoid) {\n  ellipsoid = ellipsoid ?? Ellipsoid.WGS84;\n\n  let center = getS2Center(this._cellId, this._level);\n  // Normalize XYZ.\n  center = Cartesian3.normalize(center, center);\n  const cartographic = new Cartographic.fromCartesian(\n    center,\n    Ellipsoid.UNIT_SPHERE,\n  );\n  // Interpret as geodetic coordinates on the ellipsoid.\n  return Cartographic.toCartesian(cartographic, ellipsoid, new Cartesian3());\n};\n\n/**\n * Get vertex of the S2 cell. Vertices are indexed in CCW order.\n *\n * @param {number} index An integer index of the vertex. Must be in the range [0-3].\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n * @returns {Cartesian3} The position of the vertex of the S2 cell.\n * @private\n */\nS2Cell.prototype.getVertex = function (index, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  if (index < 0 || index > 3) {\n    throw new DeveloperError(\"vertex index must be in the range [0-3].\");\n  }\n  //>>includeEnd('debug');\n\n  ellipsoid = ellipsoid ?? Ellipsoid.WGS84;\n\n  let vertex = getS2Vertex(this._cellId, this._level, index);\n  // Normalize XYZ.\n  vertex = Cartesian3.normalize(vertex, vertex);\n  const cartographic = new Cartographic.fromCartesian(\n    vertex,\n    Ellipsoid.UNIT_SPHERE,\n  );\n  // Interpret as geodetic coordinates on the ellipsoid.\n  return Cartographic.toCartesian(cartographic, ellipsoid, new Cartesian3());\n};\n\n/**\n * Creates an S2Cell from its face, position along the Hilbert curve for a given level.\n *\n * @param {number} face The root face of S2 this cell is on. Must be in the range [0-5].\n * @param {bigint} position The position along the Hilbert curve. Must be in the range [0-4**level).\n * @param {number} level The level of the S2 curve. Must be in the range [0-30].\n * @returns {S2Cell} A new S2Cell from the given parameters.\n * @private\n */\nS2Cell.fromFacePositionLevel = function (face, position, level) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bigint(\"position\", position);\n  if (face < 0 || face > 5) {\n    throw new DeveloperError(\"Invalid S2 Face (must be within 0-5)\");\n  }\n\n  if (level < 0 || level > S2_MAX_LEVEL) {\n    throw new DeveloperError(\"Invalid level (must be within 0-30)\");\n  }\n  if (position < 0 || position >= Math.pow(4, level)) {\n    throw new DeveloperError(\"Invalid Hilbert position for level\");\n  }\n  //>>includeEnd('debug');\n\n  const faceBitString =\n    (face < 4 ? \"0\" : \"\") + (face < 2 ? \"0\" : \"\") + face.toString(2);\n  const positionBitString = position.toString(2);\n  const positionPrefixPadding = Array(\n    2 * level - positionBitString.length + 1,\n  ).join(\"0\");\n  const positionSuffixPadding = Array(S2_POSITION_BITS - 2 * level).join(\"0\");\n\n  const cellId = BigInt(\n    `0b${faceBitString}${positionPrefixPadding}${positionBitString}1${\n      // Adding the sentinel bit that always follows the position bits.\n      positionSuffixPadding\n    }`,\n  );\n  return new S2Cell(cellId);\n};\n\n/**\n * @private\n */\nfunction getS2Center(cellId, level) {\n  const faceSiTi = convertCellIdToFaceSiTi(cellId, level);\n  return convertFaceSiTitoXYZ(faceSiTi[0], faceSiTi[1], faceSiTi[2]);\n}\n/**\n * @private\n */\nfunction getS2Vertex(cellId, level, index) {\n  const faceIJ = convertCellIdToFaceIJ(cellId, level);\n  const uv = convertIJLeveltoBoundUV([faceIJ[1], faceIJ[2]], level);\n  // Handles CCW ordering of the vertices.\n  const y = (index >> 1) & 1;\n  return convertFaceUVtoXYZ(faceIJ[0], uv[0][y ^ (index & 1)], uv[1][y]);\n}\n\n// S2 Coordinate Conversions\n\n/**\n * @private\n */\nfunction convertCellIdToFaceSiTi(cellId, level) {\n  const faceIJ = convertCellIdToFaceIJ(cellId);\n  const face = faceIJ[0];\n  const i = faceIJ[1];\n  const j = faceIJ[2];\n\n  // We're resolving the center when we do the coordinate transform here. For the leaf cells, we're adding half the cell size\n  // (remember that this space has 31 levels - which allows us to pick center and edges of the leaf cells). For non leaf cells,\n  // we get one of either two cells diagonal to the cell center. The correction is used to make sure we pick the leaf cell edges\n  // that represent the parent cell center.\n  const isLeaf = level === 30;\n  const shouldCorrect =\n    !isLeaf && (BigInt(i) ^ (cellId >> BigInt(2))) & BigInt(1);\n  const correction = isLeaf ? 1 : shouldCorrect ? 2 : 0;\n  const si = (i << 1) + correction;\n  const ti = (j << 1) + correction;\n  return [face, si, ti];\n}\n\n/**\n * @private\n */\nfunction convertCellIdToFaceIJ(cellId) {\n  if (S2_LOOKUP_POSITIONS.length === 0) {\n    generateLookupTable();\n  }\n\n  const face = Number(cellId >> BigInt(S2_POSITION_BITS));\n  let bits = face & S2_SWAP_MASK;\n  const lookupMask = (1 << S2_LOOKUP_BITS) - 1;\n\n  let i = 0;\n  let j = 0;\n\n  for (let k = 7; k >= 0; k--) {\n    const numberOfBits =\n      k === 7 ? S2_MAX_LEVEL - 7 * S2_LOOKUP_BITS : S2_LOOKUP_BITS;\n    const extractMask = (1 << (2 * numberOfBits)) - 1;\n    bits +=\n      Number(\n        (cellId >> BigInt(k * 2 * S2_LOOKUP_BITS + 1)) & BigInt(extractMask),\n      ) << 2;\n\n    bits = S2_LOOKUP_IJ[bits];\n\n    const offset = k * S2_LOOKUP_BITS;\n    i += (bits >> (S2_LOOKUP_BITS + 2)) << offset;\n    j += ((bits >> 2) & lookupMask) << offset;\n\n    bits &= S2_SWAP_MASK | S2_INVERT_MASK;\n  }\n\n  return [face, i, j];\n}\n\n/**\n * @private\n */\nfunction convertFaceSiTitoXYZ(face, si, ti) {\n  const s = convertSiTitoST(si);\n  const t = convertSiTitoST(ti);\n\n  const u = convertSTtoUV(s);\n  const v = convertSTtoUV(t);\n  return convertFaceUVtoXYZ(face, u, v);\n}\n\n/**\n * @private\n */\nfunction convertFaceUVtoXYZ(face, u, v) {\n  switch (face) {\n    case 0:\n      return new Cartesian3(1, u, v);\n    case 1:\n      return new Cartesian3(-u, 1, v);\n    case 2:\n      return new Cartesian3(-u, -v, 1);\n    case 3:\n      return new Cartesian3(-1, -v, -u);\n    case 4:\n      return new Cartesian3(v, -1, -u);\n    default:\n      return new Cartesian3(v, u, -1);\n  }\n}\n\n/**\n * S2 provides 3 methods for the non-linear transform: linear, quadratic and tangential.\n * This implementation uses the quadratic method because it provides a good balance of\n * accuracy and speed.\n *\n * For a more detailed comparison of these transform methods, see\n * {@link https://github.com/google/s2geometry/blob/0c4c460bdfe696da303641771f9def900b3e440f/src/s2/s2metrics.cc}\n * @private\n */\nfunction convertSTtoUV(s) {\n  if (s >= 0.5) {\n    return (1 / 3) * (4 * s * s - 1);\n  }\n  return (1 / 3) * (1 - 4 * (1 - s) * (1 - s));\n}\n\n/**\n * @private\n */\nfunction convertSiTitoST(si) {\n  return (1.0 / S2_MAX_SITI) * si;\n}\n\n/**\n * @private\n */\nfunction convertIJLeveltoBoundUV(ij, level) {\n  const result = [[], []];\n  const cellSize = getSizeIJ(level);\n  for (let d = 0; d < 2; ++d) {\n    const ijLow = ij[d] & -cellSize;\n    const ijHigh = ijLow + cellSize;\n    result[d][0] = convertSTtoUV(convertIJtoSTMinimum(ijLow));\n    result[d][1] = convertSTtoUV(convertIJtoSTMinimum(ijHigh));\n  }\n  return result;\n}\n\n/**\n * @private\n */\nfunction getSizeIJ(level) {\n  return (1 << (S2_MAX_LEVEL - level)) >>> 0;\n}\n\n/**\n * @private\n */\nfunction convertIJtoSTMinimum(i) {\n  return (1.0 / S2_LIMIT_IJ) * i;\n}\n\n// Utility Functions\n\n/**\n * This function generates 4 variations of a Hilbert curve of level 4, based on the S2_POSITION_TO_IJ table, for fast lookups of (i, j)\n * to position along Hilbert curve. The reference C++ implementation uses an iterative approach, however, this function is implemented\n * recursively.\n *\n * See {@link https://github.com/google/s2geometry/blob/c59d0ca01ae3976db7f8abdc83fcc871a3a95186/src/s2/s2cell_id.cc#L75-L109}\n * @private\n */\nfunction generateLookupCell(\n  level,\n  i,\n  j,\n  originalOrientation,\n  position,\n  orientation,\n) {\n  if (level === S2_LOOKUP_BITS) {\n    const ij = (i << S2_LOOKUP_BITS) + j;\n    S2_LOOKUP_POSITIONS[(ij << 2) + originalOrientation] =\n      (position << 2) + orientation;\n    S2_LOOKUP_IJ[(position << 2) + originalOrientation] =\n      (ij << 2) + orientation;\n  } else {\n    level++;\n    i <<= 1;\n    j <<= 1;\n    position <<= 2;\n    const r = S2_POSITION_TO_IJ[orientation];\n    generateLookupCell(\n      level,\n      i + (r[0] >> 1),\n      j + (r[0] & 1),\n      originalOrientation,\n      position,\n      orientation ^ S2_POSITION_TO_ORIENTATION_MASK[0],\n    );\n    generateLookupCell(\n      level,\n      i + (r[1] >> 1),\n      j + (r[1] & 1),\n      originalOrientation,\n      position + 1,\n      orientation ^ S2_POSITION_TO_ORIENTATION_MASK[1],\n    );\n    generateLookupCell(\n      level,\n      i + (r[2] >> 1),\n      j + (r[2] & 1),\n      originalOrientation,\n      position + 2,\n      orientation ^ S2_POSITION_TO_ORIENTATION_MASK[2],\n    );\n    generateLookupCell(\n      level,\n      i + (r[3] >> 1),\n      j + (r[3] & 1),\n      originalOrientation,\n      position + 3,\n      orientation ^ S2_POSITION_TO_ORIENTATION_MASK[3],\n    );\n  }\n}\n\n/**\n * @private\n */\nfunction generateLookupTable() {\n  generateLookupCell(0, 0, 0, 0, 0, 0);\n  generateLookupCell(0, 0, 0, S2_SWAP_MASK, 0, S2_SWAP_MASK);\n  generateLookupCell(0, 0, 0, S2_INVERT_MASK, 0, S2_INVERT_MASK);\n  generateLookupCell(\n    0,\n    0,\n    0,\n    S2_SWAP_MASK | S2_INVERT_MASK,\n    0,\n    S2_SWAP_MASK | S2_INVERT_MASK,\n  );\n}\n\n/**\n * Return the lowest-numbered bit that is on for this cell id\n * @private\n */\nfunction lsb(cellId) {\n  return cellId & (~cellId + BigInt(1));\n}\n\n/**\n * Return the lowest-numbered bit that is on for cells at the given level.\n * @private\n */\nfunction lsbForLevel(level) {\n  return BigInt(1) << BigInt(2 * (S2_MAX_LEVEL - level));\n}\n\n// Lookup table for getting trailing zero bits.\n// https://graphics.stanford.edu/~seander/bithacks.html\nconst Mod67BitPosition = [\n  64, 0, 1, 39, 2, 15, 40, 23, 3, 12, 16, 59, 41, 19, 24, 54, 4, 64, 13, 10, 17,\n  62, 60, 28, 42, 30, 20, 51, 25, 44, 55, 47, 5, 32, 65, 38, 14, 22, 11, 58, 18,\n  53, 63, 9, 61, 27, 29, 50, 43, 46, 31, 37, 21, 57, 52, 8, 26, 49, 45, 36, 56,\n  7, 48, 35, 6, 34, 33, 0,\n];\n\n/**\n * Return the number of trailing zeros in number.\n * @private\n */\nfunction countTrailingZeroBits(x) {\n  return Mod67BitPosition[(-x & x) % BigInt(67)];\n}\n\nexport default S2Cell;\n","import AssociativeArray from \"./AssociativeArray.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport defined from \"./defined.js\";\nimport destroyObject from \"./destroyObject.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport getTimestamp from \"./getTimestamp.js\";\nimport KeyboardEventModifier from \"./KeyboardEventModifier.js\";\nimport ScreenSpaceEventType from \"./ScreenSpaceEventType.js\";\n\nfunction getPosition(screenSpaceEventHandler, event, result) {\n  const element = screenSpaceEventHandler._element;\n  if (element === document) {\n    result.x = event.clientX;\n    result.y = event.clientY;\n    return result;\n  }\n\n  const rect = element.getBoundingClientRect();\n  result.x = event.clientX - rect.left;\n  result.y = event.clientY - rect.top;\n  return result;\n}\n\nfunction getInputEventKey(type, modifier) {\n  let key = type;\n  if (defined(modifier)) {\n    key += `+${modifier}`;\n  }\n  return key;\n}\n\nfunction getModifier(event) {\n  if (event.shiftKey) {\n    return KeyboardEventModifier.SHIFT;\n  } else if (event.ctrlKey) {\n    return KeyboardEventModifier.CTRL;\n  } else if (event.altKey) {\n    return KeyboardEventModifier.ALT;\n  }\n\n  return undefined;\n}\n\nconst MouseButton = {\n  LEFT: 0,\n  MIDDLE: 1,\n  RIGHT: 2,\n};\n\nfunction registerListener(screenSpaceEventHandler, domType, element, callback) {\n  function listener(e) {\n    callback(screenSpaceEventHandler, e);\n  }\n\n  element.addEventListener(domType, listener, {\n    capture: false,\n    passive: false,\n  });\n\n  screenSpaceEventHandler._removalFunctions.push(function () {\n    element.removeEventListener(domType, listener, false);\n  });\n}\n\nfunction registerListeners(screenSpaceEventHandler) {\n  const element = screenSpaceEventHandler._element;\n\n  // some listeners may be registered on the document, so we still get events even after\n  // leaving the bounds of element.\n  // this is affected by the existence of an undocumented disableRootEvents property on element.\n  const alternateElement = !defined(element.disableRootEvents)\n    ? document\n    : element;\n\n  if (FeatureDetection.supportsPointerEvents()) {\n    registerListener(\n      screenSpaceEventHandler,\n      \"pointerdown\",\n      element,\n      handlePointerDown,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"pointerup\",\n      element,\n      handlePointerUp,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"pointermove\",\n      element,\n      handlePointerMove,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"pointercancel\",\n      element,\n      handlePointerUp,\n    );\n  } else {\n    registerListener(\n      screenSpaceEventHandler,\n      \"mousedown\",\n      element,\n      handleMouseDown,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"mouseup\",\n      alternateElement,\n      handleMouseUp,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"mousemove\",\n      alternateElement,\n      handleMouseMove,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"touchstart\",\n      element,\n      handleTouchStart,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"touchend\",\n      alternateElement,\n      handleTouchEnd,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"touchmove\",\n      alternateElement,\n      handleTouchMove,\n    );\n    registerListener(\n      screenSpaceEventHandler,\n      \"touchcancel\",\n      alternateElement,\n      handleTouchEnd,\n    );\n  }\n\n  registerListener(\n    screenSpaceEventHandler,\n    \"dblclick\",\n    element,\n    handleDblClick,\n  );\n\n  // detect available wheel event\n  let wheelEvent;\n  if (\"onwheel\" in element) {\n    // spec event type\n    wheelEvent = \"wheel\";\n  } else if (document.onmousewheel !== undefined) {\n    // legacy event type\n    wheelEvent = \"mousewheel\";\n  } else {\n    // older Firefox\n    wheelEvent = \"DOMMouseScroll\";\n  }\n\n  registerListener(screenSpaceEventHandler, wheelEvent, element, handleWheel);\n}\n\nfunction unregisterListeners(screenSpaceEventHandler) {\n  const removalFunctions = screenSpaceEventHandler._removalFunctions;\n  for (let i = 0; i < removalFunctions.length; ++i) {\n    removalFunctions[i]();\n  }\n}\n\nconst mouseDownEvent = {\n  position: new Cartesian2(),\n};\n\nfunction gotTouchEvent(screenSpaceEventHandler) {\n  screenSpaceEventHandler._lastSeenTouchEvent = getTimestamp();\n}\n\nfunction canProcessMouseEvent(screenSpaceEventHandler) {\n  return (\n    getTimestamp() - screenSpaceEventHandler._lastSeenTouchEvent >\n    ScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds\n  );\n}\n\nfunction checkPixelTolerance(startPosition, endPosition, pixelTolerance) {\n  const xDiff = startPosition.x - endPosition.x;\n  const yDiff = startPosition.y - endPosition.y;\n  const totalPixels = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n\n  return totalPixels < pixelTolerance;\n}\n\nfunction handleMouseDown(screenSpaceEventHandler, event) {\n  if (!canProcessMouseEvent(screenSpaceEventHandler)) {\n    return;\n  }\n\n  const button = event.button;\n  screenSpaceEventHandler._buttonDown[button] = true;\n\n  let screenSpaceEventType;\n  if (button === MouseButton.LEFT) {\n    screenSpaceEventType = ScreenSpaceEventType.LEFT_DOWN;\n  } else if (button === MouseButton.MIDDLE) {\n    screenSpaceEventType = ScreenSpaceEventType.MIDDLE_DOWN;\n  } else if (button === MouseButton.RIGHT) {\n    screenSpaceEventType = ScreenSpaceEventType.RIGHT_DOWN;\n  } else {\n    return;\n  }\n\n  const position = getPosition(\n    screenSpaceEventHandler,\n    event,\n    screenSpaceEventHandler._primaryPosition,\n  );\n  Cartesian2.clone(position, screenSpaceEventHandler._primaryStartPosition);\n  Cartesian2.clone(position, screenSpaceEventHandler._primaryPreviousPosition);\n\n  const modifier = getModifier(event);\n\n  const action = screenSpaceEventHandler.getInputAction(\n    screenSpaceEventType,\n    modifier,\n  );\n\n  if (defined(action)) {\n    Cartesian2.clone(position, mouseDownEvent.position);\n\n    action(mouseDownEvent);\n\n    event.preventDefault();\n  }\n}\n\nconst mouseUpEvent = {\n  position: new Cartesian2(),\n};\nconst mouseClickEvent = {\n  position: new Cartesian2(),\n};\n\nfunction cancelMouseEvent(\n  screenSpaceEventHandler,\n  screenSpaceEventType,\n  clickScreenSpaceEventType,\n  event,\n) {\n  const modifier = getModifier(event);\n\n  const action = screenSpaceEventHandler.getInputAction(\n    screenSpaceEventType,\n    modifier,\n  );\n  const clickAction = screenSpaceEventHandler.getInputAction(\n    clickScreenSpaceEventType,\n    modifier,\n  );\n\n  if (defined(action) || defined(clickAction)) {\n    const position = getPosition(\n      screenSpaceEventHandler,\n      event,\n      screenSpaceEventHandler._primaryPosition,\n    );\n\n    if (defined(action)) {\n      Cartesian2.clone(position, mouseUpEvent.position);\n\n      action(mouseUpEvent);\n    }\n\n    if (defined(clickAction)) {\n      const startPosition = screenSpaceEventHandler._primaryStartPosition;\n      if (\n        checkPixelTolerance(\n          startPosition,\n          position,\n          screenSpaceEventHandler._clickPixelTolerance,\n        )\n      ) {\n        Cartesian2.clone(position, mouseClickEvent.position);\n\n        clickAction(mouseClickEvent);\n      }\n    }\n  }\n}\n\nfunction handleMouseUp(screenSpaceEventHandler, event) {\n  if (!canProcessMouseEvent(screenSpaceEventHandler)) {\n    return;\n  }\n\n  const button = event.button;\n\n  if (\n    button !== MouseButton.LEFT &&\n    button !== MouseButton.MIDDLE &&\n    button !== MouseButton.RIGHT\n  ) {\n    return;\n  }\n\n  if (screenSpaceEventHandler._buttonDown[MouseButton.LEFT]) {\n    cancelMouseEvent(\n      screenSpaceEventHandler,\n      ScreenSpaceEventType.LEFT_UP,\n      ScreenSpaceEventType.LEFT_CLICK,\n      event,\n    );\n    screenSpaceEventHandler._buttonDown[MouseButton.LEFT] = false;\n  }\n  if (screenSpaceEventHandler._buttonDown[MouseButton.MIDDLE]) {\n    cancelMouseEvent(\n      screenSpaceEventHandler,\n      ScreenSpaceEventType.MIDDLE_UP,\n      ScreenSpaceEventType.MIDDLE_CLICK,\n      event,\n    );\n    screenSpaceEventHandler._buttonDown[MouseButton.MIDDLE] = false;\n  }\n  if (screenSpaceEventHandler._buttonDown[MouseButton.RIGHT]) {\n    cancelMouseEvent(\n      screenSpaceEventHandler,\n      ScreenSpaceEventType.RIGHT_UP,\n      ScreenSpaceEventType.RIGHT_CLICK,\n      event,\n    );\n    screenSpaceEventHandler._buttonDown[MouseButton.RIGHT] = false;\n  }\n}\n\nconst mouseMoveEvent = {\n  startPosition: new Cartesian2(),\n  endPosition: new Cartesian2(),\n};\n\nfunction handleMouseMove(screenSpaceEventHandler, event) {\n  if (!canProcessMouseEvent(screenSpaceEventHandler)) {\n    return;\n  }\n\n  const modifier = getModifier(event);\n\n  const position = getPosition(\n    screenSpaceEventHandler,\n    event,\n    screenSpaceEventHandler._primaryPosition,\n  );\n  const previousPosition = screenSpaceEventHandler._primaryPreviousPosition;\n\n  const action = screenSpaceEventHandler.getInputAction(\n    ScreenSpaceEventType.MOUSE_MOVE,\n    modifier,\n  );\n\n  if (defined(action)) {\n    Cartesian2.clone(previousPosition, mouseMoveEvent.startPosition);\n    Cartesian2.clone(position, mouseMoveEvent.endPosition);\n\n    action(mouseMoveEvent);\n  }\n\n  Cartesian2.clone(position, previousPosition);\n\n  if (\n    screenSpaceEventHandler._buttonDown[MouseButton.LEFT] ||\n    screenSpaceEventHandler._buttonDown[MouseButton.MIDDLE] ||\n    screenSpaceEventHandler._buttonDown[MouseButton.RIGHT]\n  ) {\n    event.preventDefault();\n  }\n}\n\nconst mouseDblClickEvent = {\n  position: new Cartesian2(),\n};\n\nfunction handleDblClick(screenSpaceEventHandler, event) {\n  const button = event.button;\n\n  let screenSpaceEventType;\n  if (button === MouseButton.LEFT) {\n    screenSpaceEventType = ScreenSpaceEventType.LEFT_DOUBLE_CLICK;\n  } else {\n    return;\n  }\n\n  const modifier = getModifier(event);\n\n  const action = screenSpaceEventHandler.getInputAction(\n    screenSpaceEventType,\n    modifier,\n  );\n\n  if (defined(action)) {\n    getPosition(screenSpaceEventHandler, event, mouseDblClickEvent.position);\n\n    action(mouseDblClickEvent);\n  }\n}\n\nfunction handleWheel(screenSpaceEventHandler, event) {\n  // currently this event exposes the delta value in terms of\n  // the obsolete mousewheel event type.  so, for now, we adapt the other\n  // values to that scheme.\n  let delta;\n\n  // standard wheel event uses deltaY.  sign is opposite wheelDelta.\n  // deltaMode indicates what unit it is in.\n  if (defined(event.deltaY)) {\n    const deltaMode = event.deltaMode;\n    if (deltaMode === event.DOM_DELTA_PIXEL) {\n      delta = -event.deltaY;\n    } else if (deltaMode === event.DOM_DELTA_LINE) {\n      delta = -event.deltaY * 40;\n    } else {\n      // DOM_DELTA_PAGE\n      delta = -event.deltaY * 120;\n    }\n  } else if (event.detail > 0) {\n    // old Firefox versions use event.detail to count the number of clicks. The sign\n    // of the integer is the direction the wheel is scrolled.\n    delta = event.detail * -120;\n  } else {\n    delta = event.wheelDelta;\n  }\n\n  if (!defined(delta)) {\n    return;\n  }\n\n  const modifier = getModifier(event);\n  const action = screenSpaceEventHandler.getInputAction(\n    ScreenSpaceEventType.WHEEL,\n    modifier,\n  );\n\n  if (defined(action)) {\n    action(delta);\n\n    event.preventDefault();\n  }\n}\n\nfunction handleTouchStart(screenSpaceEventHandler, event) {\n  gotTouchEvent(screenSpaceEventHandler);\n\n  const changedTouches = event.changedTouches;\n\n  let i;\n  const length = changedTouches.length;\n  let touch;\n  let identifier;\n  const positions = screenSpaceEventHandler._positions;\n\n  for (i = 0; i < length; ++i) {\n    touch = changedTouches[i];\n    identifier = touch.identifier;\n    positions.set(\n      identifier,\n      getPosition(screenSpaceEventHandler, touch, new Cartesian2()),\n    );\n  }\n\n  fireTouchEvents(screenSpaceEventHandler, event);\n\n  const previousPositions = screenSpaceEventHandler._previousPositions;\n\n  for (i = 0; i < length; ++i) {\n    touch = changedTouches[i];\n    identifier = touch.identifier;\n    previousPositions.set(\n      identifier,\n      Cartesian2.clone(positions.get(identifier)),\n    );\n  }\n}\n\nfunction handleTouchEnd(screenSpaceEventHandler, event) {\n  gotTouchEvent(screenSpaceEventHandler);\n\n  const changedTouches = event.changedTouches;\n\n  let i;\n  const length = changedTouches.length;\n  let touch;\n  let identifier;\n  const positions = screenSpaceEventHandler._positions;\n\n  for (i = 0; i < length; ++i) {\n    touch = changedTouches[i];\n    identifier = touch.identifier;\n    positions.remove(identifier);\n  }\n\n  fireTouchEvents(screenSpaceEventHandler, event);\n\n  const previousPositions = screenSpaceEventHandler._previousPositions;\n\n  for (i = 0; i < length; ++i) {\n    touch = changedTouches[i];\n    identifier = touch.identifier;\n    previousPositions.remove(identifier);\n  }\n}\n\nconst touchStartEvent = {\n  position: new Cartesian2(),\n};\nconst touch2StartEvent = {\n  position1: new Cartesian2(),\n  position2: new Cartesian2(),\n};\nconst touchEndEvent = {\n  position: new Cartesian2(),\n};\nconst touchClickEvent = {\n  position: new Cartesian2(),\n};\nconst touchHoldEvent = {\n  position: new Cartesian2(),\n};\n\nfunction fireTouchEvents(screenSpaceEventHandler, event) {\n  const modifier = getModifier(event);\n  const positions = screenSpaceEventHandler._positions;\n  const numberOfTouches = positions.length;\n  let action;\n  let clickAction;\n  const pinching = screenSpaceEventHandler._isPinching;\n\n  if (\n    numberOfTouches !== 1 &&\n    screenSpaceEventHandler._buttonDown[MouseButton.LEFT]\n  ) {\n    // transitioning from single touch, trigger UP and might trigger CLICK\n    screenSpaceEventHandler._buttonDown[MouseButton.LEFT] = false;\n\n    if (defined(screenSpaceEventHandler._touchHoldTimer)) {\n      clearTimeout(screenSpaceEventHandler._touchHoldTimer);\n      screenSpaceEventHandler._touchHoldTimer = undefined;\n    }\n\n    action = screenSpaceEventHandler.getInputAction(\n      ScreenSpaceEventType.LEFT_UP,\n      modifier,\n    );\n\n    if (defined(action)) {\n      Cartesian2.clone(\n        screenSpaceEventHandler._primaryPosition,\n        touchEndEvent.position,\n      );\n\n      action(touchEndEvent);\n    }\n\n    if (numberOfTouches === 0 && !screenSpaceEventHandler._isTouchHolding) {\n      // releasing single touch, check for CLICK\n      clickAction = screenSpaceEventHandler.getInputAction(\n        ScreenSpaceEventType.LEFT_CLICK,\n        modifier,\n      );\n\n      if (defined(clickAction)) {\n        const startPosition = screenSpaceEventHandler._primaryStartPosition;\n        const endPosition =\n          screenSpaceEventHandler._previousPositions.values[0];\n        if (\n          checkPixelTolerance(\n            startPosition,\n            endPosition,\n            screenSpaceEventHandler._clickPixelTolerance,\n          )\n        ) {\n          Cartesian2.clone(\n            screenSpaceEventHandler._primaryPosition,\n            touchClickEvent.position,\n          );\n\n          clickAction(touchClickEvent);\n        }\n      }\n    }\n\n    screenSpaceEventHandler._isTouchHolding = false;\n\n    // Otherwise don't trigger CLICK, because we are adding more touches.\n  }\n\n  if (numberOfTouches === 0 && pinching) {\n    // transitioning from pinch, trigger PINCH_END\n    screenSpaceEventHandler._isPinching = false;\n\n    action = screenSpaceEventHandler.getInputAction(\n      ScreenSpaceEventType.PINCH_END,\n      modifier,\n    );\n\n    if (defined(action)) {\n      action();\n    }\n  }\n\n  if (numberOfTouches === 1 && !pinching) {\n    // transitioning to single touch, trigger DOWN\n    const position = positions.values[0];\n    Cartesian2.clone(position, screenSpaceEventHandler._primaryPosition);\n    Cartesian2.clone(position, screenSpaceEventHandler._primaryStartPosition);\n    Cartesian2.clone(\n      position,\n      screenSpaceEventHandler._primaryPreviousPosition,\n    );\n\n    screenSpaceEventHandler._buttonDown[MouseButton.LEFT] = true;\n\n    action = screenSpaceEventHandler.getInputAction(\n      ScreenSpaceEventType.LEFT_DOWN,\n      modifier,\n    );\n\n    if (defined(action)) {\n      Cartesian2.clone(position, touchStartEvent.position);\n\n      action(touchStartEvent);\n    }\n\n    screenSpaceEventHandler._touchHoldTimer = setTimeout(function () {\n      if (!screenSpaceEventHandler.isDestroyed()) {\n        screenSpaceEventHandler._touchHoldTimer = undefined;\n        screenSpaceEventHandler._isTouchHolding = true;\n\n        clickAction = screenSpaceEventHandler.getInputAction(\n          ScreenSpaceEventType.RIGHT_CLICK,\n          modifier,\n        );\n\n        if (defined(clickAction)) {\n          const startPosition = screenSpaceEventHandler._primaryStartPosition;\n          const endPosition =\n            screenSpaceEventHandler._previousPositions.values[0];\n          if (\n            checkPixelTolerance(\n              startPosition,\n              endPosition,\n              screenSpaceEventHandler._holdPixelTolerance,\n            )\n          ) {\n            Cartesian2.clone(\n              screenSpaceEventHandler._primaryPosition,\n              touchHoldEvent.position,\n            );\n\n            clickAction(touchHoldEvent);\n          }\n        }\n      }\n    }, ScreenSpaceEventHandler.touchHoldDelayMilliseconds);\n\n    event.preventDefault();\n  }\n\n  if (numberOfTouches === 2 && !pinching) {\n    // transitioning to pinch, trigger PINCH_START\n    screenSpaceEventHandler._isPinching = true;\n\n    action = screenSpaceEventHandler.getInputAction(\n      ScreenSpaceEventType.PINCH_START,\n      modifier,\n    );\n\n    if (defined(action)) {\n      Cartesian2.clone(positions.values[0], touch2StartEvent.position1);\n      Cartesian2.clone(positions.values[1], touch2StartEvent.position2);\n\n      action(touch2StartEvent);\n\n      // Touch-enabled devices, in particular iOS can have many default behaviours for\n      // \"pinch\" events, which can still be executed unless we prevent them here.\n      event.preventDefault();\n    }\n  }\n}\n\nfunction handleTouchMove(screenSpaceEventHandler, event) {\n  gotTouchEvent(screenSpaceEventHandler);\n\n  const changedTouches = event.changedTouches;\n\n  let i;\n  const length = changedTouches.length;\n  let touch;\n  let identifier;\n  const positions = screenSpaceEventHandler._positions;\n\n  for (i = 0; i < length; ++i) {\n    touch = changedTouches[i];\n    identifier = touch.identifier;\n    const position = positions.get(identifier);\n    if (defined(position)) {\n      getPosition(screenSpaceEventHandler, touch, position);\n    }\n  }\n\n  fireTouchMoveEvents(screenSpaceEventHandler, event);\n\n  const previousPositions = screenSpaceEventHandler._previousPositions;\n\n  for (i = 0; i < length; ++i) {\n    touch = changedTouches[i];\n    identifier = touch.identifier;\n    Cartesian2.clone(\n      positions.get(identifier),\n      previousPositions.get(identifier),\n    );\n  }\n}\n\nconst touchMoveEvent = {\n  startPosition: new Cartesian2(),\n  endPosition: new Cartesian2(),\n};\nconst touchPinchMovementEvent = {\n  distance: {\n    startPosition: new Cartesian2(),\n    endPosition: new Cartesian2(),\n  },\n  angleAndHeight: {\n    startPosition: new Cartesian2(),\n    endPosition: new Cartesian2(),\n  },\n};\n\nfunction fireTouchMoveEvents(screenSpaceEventHandler, event) {\n  const modifier = getModifier(event);\n  const positions = screenSpaceEventHandler._positions;\n  const previousPositions = screenSpaceEventHandler._previousPositions;\n  const numberOfTouches = positions.length;\n  let action;\n\n  if (\n    numberOfTouches === 1 &&\n    screenSpaceEventHandler._buttonDown[MouseButton.LEFT]\n  ) {\n    // moving single touch\n    const position = positions.values[0];\n    Cartesian2.clone(position, screenSpaceEventHandler._primaryPosition);\n\n    const previousPosition = screenSpaceEventHandler._primaryPreviousPosition;\n\n    action = screenSpaceEventHandler.getInputAction(\n      ScreenSpaceEventType.MOUSE_MOVE,\n      modifier,\n    );\n\n    if (defined(action)) {\n      Cartesian2.clone(previousPosition, touchMoveEvent.startPosition);\n      Cartesian2.clone(position, touchMoveEvent.endPosition);\n\n      action(touchMoveEvent);\n    }\n\n    Cartesian2.clone(position, previousPosition);\n\n    event.preventDefault();\n  } else if (numberOfTouches === 2 && screenSpaceEventHandler._isPinching) {\n    // moving pinch\n\n    action = screenSpaceEventHandler.getInputAction(\n      ScreenSpaceEventType.PINCH_MOVE,\n      modifier,\n    );\n    if (defined(action)) {\n      const position1 = positions.values[0];\n      const position2 = positions.values[1];\n      const previousPosition1 = previousPositions.values[0];\n      const previousPosition2 = previousPositions.values[1];\n\n      const dX = position2.x - position1.x;\n      const dY = position2.y - position1.y;\n      const dist = Math.sqrt(dX * dX + dY * dY) * 0.25;\n\n      const prevDX = previousPosition2.x - previousPosition1.x;\n      const prevDY = previousPosition2.y - previousPosition1.y;\n      const prevDist = Math.sqrt(prevDX * prevDX + prevDY * prevDY) * 0.25;\n\n      const cY = (position2.y + position1.y) * 0.125;\n      const prevCY = (previousPosition2.y + previousPosition1.y) * 0.125;\n      const angle = Math.atan2(dY, dX);\n      const prevAngle = Math.atan2(prevDY, prevDX);\n\n      Cartesian2.fromElements(\n        0.0,\n        prevDist,\n        touchPinchMovementEvent.distance.startPosition,\n      );\n      Cartesian2.fromElements(\n        0.0,\n        dist,\n        touchPinchMovementEvent.distance.endPosition,\n      );\n\n      Cartesian2.fromElements(\n        prevAngle,\n        prevCY,\n        touchPinchMovementEvent.angleAndHeight.startPosition,\n      );\n      Cartesian2.fromElements(\n        angle,\n        cY,\n        touchPinchMovementEvent.angleAndHeight.endPosition,\n      );\n\n      action(touchPinchMovementEvent);\n    }\n  }\n}\n\nfunction handlePointerDown(screenSpaceEventHandler, event) {\n  event.target.setPointerCapture(event.pointerId);\n\n  if (event.pointerType === \"touch\") {\n    const positions = screenSpaceEventHandler._positions;\n\n    const identifier = event.pointerId;\n    positions.set(\n      identifier,\n      getPosition(screenSpaceEventHandler, event, new Cartesian2()),\n    );\n\n    fireTouchEvents(screenSpaceEventHandler, event);\n\n    const previousPositions = screenSpaceEventHandler._previousPositions;\n    previousPositions.set(\n      identifier,\n      Cartesian2.clone(positions.get(identifier)),\n    );\n  } else {\n    handleMouseDown(screenSpaceEventHandler, event);\n  }\n}\n\nfunction handlePointerUp(screenSpaceEventHandler, event) {\n  if (event.pointerType === \"touch\") {\n    const positions = screenSpaceEventHandler._positions;\n\n    const identifier = event.pointerId;\n    positions.remove(identifier);\n\n    fireTouchEvents(screenSpaceEventHandler, event);\n\n    const previousPositions = screenSpaceEventHandler._previousPositions;\n    previousPositions.remove(identifier);\n  } else {\n    handleMouseUp(screenSpaceEventHandler, event);\n  }\n}\n\nfunction handlePointerMove(screenSpaceEventHandler, event) {\n  if (event.pointerType === \"touch\") {\n    const positions = screenSpaceEventHandler._positions;\n\n    const identifier = event.pointerId;\n    const position = positions.get(identifier);\n    if (!defined(position)) {\n      return;\n    }\n\n    getPosition(screenSpaceEventHandler, event, position);\n    fireTouchMoveEvents(screenSpaceEventHandler, event);\n\n    const previousPositions = screenSpaceEventHandler._previousPositions;\n    Cartesian2.clone(\n      positions.get(identifier),\n      previousPositions.get(identifier),\n    );\n  } else {\n    handleMouseMove(screenSpaceEventHandler, event);\n  }\n}\n\n/**\n * @typedef {object} ScreenSpaceEventHandler.PositionedEvent\n *\n * An Event that occurs at a single position on screen.\n *\n * @property {Cartesian2} position\n */\n\n/**\n * @callback ScreenSpaceEventHandler.PositionedEventCallback\n *\n * The callback invoked when a positioned event triggers an event listener.\n *\n * @param {ScreenSpaceEventHandler.PositionedEvent} event The event which triggered the listener\n */\n\n/**\n * @typedef {object} ScreenSpaceEventHandler.MotionEvent\n *\n * An Event that starts at one position and ends at another.\n *\n * @property {Cartesian2} startPosition\n * @property {Cartesian2} endPosition\n */\n\n/**\n * @callback ScreenSpaceEventHandler.MotionEventCallback\n *\n * The callback invoked when a motion event triggers an event listener.\n *\n * @param {ScreenSpaceEventHandler.MotionEvent} event The event which triggered the listener\n */\n\n/**\n * @typedef {object} ScreenSpaceEventHandler.TwoPointEvent\n *\n * An Event that occurs at a two positions on screen.\n *\n * @property {Cartesian2} position1\n * @property {Cartesian2} position2\n */\n\n/**\n * @callback ScreenSpaceEventHandler.TwoPointEventCallback\n *\n * The callback invoked when a two-point event triggers an event listener.\n *\n * @param {ScreenSpaceEventHandler.TwoPointEvent} event The event which triggered the listener\n */\n\n/**\n * @typedef {object} ScreenSpaceEventHandler.TwoPointMotionEvent\n *\n * An Event that starts at a two positions on screen and moves to two other positions.\n *\n * @property {Cartesian2} position1\n * @property {Cartesian2} position2\n * @property {Cartesian2} previousPosition1\n * @property {Cartesian2} previousPosition2\n */\n\n/**\n * @callback ScreenSpaceEventHandler.TwoPointMotionEventCallback\n *\n * The callback invoked when a two-point motion event triggers an event listener.\n *\n * @param {ScreenSpaceEventHandler.TwoPointMotionEvent} event The event which triggered the listener\n */\n\n/**\n * @callback ScreenSpaceEventHandler.WheelEventCallback\n *\n * The callback invoked when a mouse-wheel event triggers an event listener.\n *\n * @param {number} delta The amount that the mouse wheel moved\n */\n\n/**\n * Handles user input events. Custom functions can be added to be executed on\n * when the user enters input.\n *\n * @alias ScreenSpaceEventHandler\n *\n * @param {HTMLCanvasElement} [element=document] The element to add events to.\n *\n * @constructor\n */\nfunction ScreenSpaceEventHandler(element) {\n  this._inputEvents = {};\n  this._buttonDown = {\n    [MouseButton.LEFT]: false,\n    [MouseButton.MIDDLE]: false,\n    [MouseButton.RIGHT]: false,\n  };\n  this._isPinching = false;\n  this._isTouchHolding = false;\n  this._lastSeenTouchEvent =\n    -ScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds;\n\n  this._primaryStartPosition = new Cartesian2();\n  this._primaryPosition = new Cartesian2();\n  this._primaryPreviousPosition = new Cartesian2();\n\n  this._positions = new AssociativeArray();\n  this._previousPositions = new AssociativeArray();\n\n  this._removalFunctions = [];\n\n  this._touchHoldTimer = undefined;\n\n  // TODO: Revisit when doing mobile development. May need to be configurable\n  // or determined based on the platform?\n  this._clickPixelTolerance = 5;\n  this._holdPixelTolerance = 25;\n\n  this._element = element ?? document;\n\n  registerListeners(this);\n}\n\n/**\n * Set a function to be executed on an input event.\n *\n * @param {ScreenSpaceEventHandler.PositionedEventCallback|ScreenSpaceEventHandler.MotionEventCallback|ScreenSpaceEventHandler.WheelEventCallback|ScreenSpaceEventHandler.TwoPointEventCallback|ScreenSpaceEventHandler.TwoPointMotionEventCallback} action Function to be executed when the input event occurs.\n * @param {ScreenSpaceEventType} type The ScreenSpaceEventType of input event.\n * @param {KeyboardEventModifier} [modifier] A KeyboardEventModifier key that is held when a <code>type</code>\n * event occurs.\n *\n * @see ScreenSpaceEventHandler#getInputAction\n * @see ScreenSpaceEventHandler#removeInputAction\n */\nScreenSpaceEventHandler.prototype.setInputAction = function (\n  action,\n  type,\n  modifier,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(action)) {\n    throw new DeveloperError(\"action is required.\");\n  }\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getInputEventKey(type, modifier);\n  this._inputEvents[key] = action;\n};\n\n/**\n * Returns the function to be executed on an input event.\n *\n * @param {ScreenSpaceEventType} type The ScreenSpaceEventType of input event.\n * @param {KeyboardEventModifier} [modifier] A KeyboardEventModifier key that is held when a <code>type</code>\n * event occurs.\n *\n * @returns {ScreenSpaceEventHandler.PositionedEventCallback|ScreenSpaceEventHandler.MotionEventCallback|ScreenSpaceEventHandler.WheelEventCallback|ScreenSpaceEventHandler.TwoPointEventCallback|ScreenSpaceEventHandler.TwoPointMotionEventCallback} The function to be executed on an input event.\n *\n * @see ScreenSpaceEventHandler#setInputAction\n * @see ScreenSpaceEventHandler#removeInputAction\n */\nScreenSpaceEventHandler.prototype.getInputAction = function (type, modifier) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getInputEventKey(type, modifier);\n  return this._inputEvents[key];\n};\n\n/**\n * Removes the function to be executed on an input event.\n *\n * @param {ScreenSpaceEventType} type The ScreenSpaceEventType of input event.\n * @param {KeyboardEventModifier} [modifier] A KeyboardEventModifier key that is held when a <code>type</code>\n * event occurs.\n *\n * @see ScreenSpaceEventHandler#getInputAction\n * @see ScreenSpaceEventHandler#setInputAction\n */\nScreenSpaceEventHandler.prototype.removeInputAction = function (\n  type,\n  modifier,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getInputEventKey(type, modifier);\n  delete this._inputEvents[key];\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ScreenSpaceEventHandler#destroy\n */\nScreenSpaceEventHandler.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes listeners held by this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * handler = handler && handler.destroy();\n *\n * @see ScreenSpaceEventHandler#isDestroyed\n */\nScreenSpaceEventHandler.prototype.destroy = function () {\n  unregisterListeners(this);\n\n  return destroyObject(this);\n};\n\n/**\n * The amount of time, in milliseconds, that mouse events will be disabled after\n * receiving any touch events, such that any emulated mouse events will be ignored.\n * @type {number}\n * @default 800\n */\nScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds = 800;\n\n/**\n * The amount of time, in milliseconds, before a touch on the screen becomes a\n * touch and hold.\n * @type {number}\n * @default 1500\n */\nScreenSpaceEventHandler.touchHoldDelayMilliseconds = 1500;\nexport default ScreenSpaceEventHandler;\n","/**\n * This enumerated type is for classifying mouse events: down, up, click, double click, move and move while a button is held down.\n *\n * @enum {number}\n */\nconst ScreenSpaceEventType = {\n  /**\n   * Represents a mouse left button down event.\n   *\n   * @type {number}\n   * @constant\n   */\n  LEFT_DOWN: 0,\n\n  /**\n   * Represents a mouse left button up event.\n   *\n   * @type {number}\n   * @constant\n   */\n  LEFT_UP: 1,\n\n  /**\n   * Represents a mouse left click event.\n   *\n   * @type {number}\n   * @constant\n   */\n  LEFT_CLICK: 2,\n\n  /**\n   * Represents a mouse left double click event.\n   *\n   * @type {number}\n   * @constant\n   */\n  LEFT_DOUBLE_CLICK: 3,\n\n  /**\n   * Represents a mouse left button down event.\n   *\n   * @type {number}\n   * @constant\n   */\n  RIGHT_DOWN: 5,\n\n  /**\n   * Represents a mouse right button up event.\n   *\n   * @type {number}\n   * @constant\n   */\n  RIGHT_UP: 6,\n\n  /**\n   * Represents a mouse right click event.\n   *\n   * @type {number}\n   * @constant\n   */\n  RIGHT_CLICK: 7,\n\n  /**\n   * Represents a mouse middle button down event.\n   *\n   * @type {number}\n   * @constant\n   */\n  MIDDLE_DOWN: 10,\n\n  /**\n   * Represents a mouse middle button up event.\n   *\n   * @type {number}\n   * @constant\n   */\n  MIDDLE_UP: 11,\n\n  /**\n   * Represents a mouse middle click event.\n   *\n   * @type {number}\n   * @constant\n   */\n  MIDDLE_CLICK: 12,\n\n  /**\n   * Represents a mouse move event.\n   *\n   * @type {number}\n   * @constant\n   */\n  MOUSE_MOVE: 15,\n\n  /**\n   * Represents a mouse wheel event.\n   *\n   * @type {number}\n   * @constant\n   */\n  WHEEL: 16,\n\n  /**\n   * Represents the start of a two-finger event on a touch surface.\n   *\n   * @type {number}\n   * @constant\n   */\n  PINCH_START: 17,\n\n  /**\n   * Represents the end of a two-finger event on a touch surface.\n   *\n   * @type {number}\n   * @constant\n   */\n  PINCH_END: 18,\n\n  /**\n   * Represents a change of a two-finger event on a touch surface.\n   *\n   * @type {number}\n   * @constant\n   */\n  PINCH_MOVE: 19,\n};\nexport default Object.freeze(ScreenSpaceEventType);\n","import ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Value and type information for per-instance geometry attribute that determines if the geometry instance will be shown.\n *\n * @alias ShowGeometryInstanceAttribute\n * @constructor\n *\n * @param {boolean} [show=true] Determines if the geometry instance will be shown.\n *\n *\n * @example\n * const instance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.BoxGeometry({\n *     vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,\n *     minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0),\n *     maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0)\n *   }),\n *   modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *     Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\n *   id : 'box',\n *   attributes : {\n *     show : new Cesium.ShowGeometryInstanceAttribute(false)\n *   }\n * });\n *\n * @see GeometryInstance\n * @see GeometryInstanceAttribute\n */\nfunction ShowGeometryInstanceAttribute(show) {\n  show = show ?? true;\n\n  /**\n   * The values for the attributes stored in a typed array.\n   *\n   * @type Uint8Array\n   *\n   * @default [1.0]\n   */\n  this.value = ShowGeometryInstanceAttribute.toValue(show);\n}\n\nObject.defineProperties(ShowGeometryInstanceAttribute.prototype, {\n  /**\n   * The datatype of each component in the attribute, e.g., individual elements in\n   * {@link ColorGeometryInstanceAttribute#value}.\n   *\n   * @memberof ShowGeometryInstanceAttribute.prototype\n   *\n   * @type {ComponentDatatype}\n   * @readonly\n   *\n   * @default {@link ComponentDatatype.UNSIGNED_BYTE}\n   */\n  componentDatatype: {\n    get: function () {\n      return ComponentDatatype.UNSIGNED_BYTE;\n    },\n  },\n\n  /**\n   * The number of components in the attributes, i.e., {@link ColorGeometryInstanceAttribute#value}.\n   *\n   * @memberof ShowGeometryInstanceAttribute.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @default 1\n   */\n  componentsPerAttribute: {\n    get: function () {\n      return 1;\n    },\n  },\n\n  /**\n   * When <code>true</code> and <code>componentDatatype</code> is an integer format,\n   * indicate that the components should be mapped to the range [0, 1] (unsigned)\n   * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\n   *\n   * @memberof ShowGeometryInstanceAttribute.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  normalize: {\n    get: function () {\n      return false;\n    },\n  },\n});\n\n/**\n * Converts a boolean show to a typed array that can be used to assign a show attribute.\n *\n * @param {boolean} show The show value.\n * @param {Uint8Array} [result] The array to store the result in, if undefined a new instance will be created.\n * @returns {Uint8Array} The modified result parameter or a new instance if result was undefined.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true, attributes.show);\n */\nShowGeometryInstanceAttribute.toValue = function (show, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(show)) {\n    throw new DeveloperError(\"show is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Uint8Array([show]);\n  }\n  result[0] = show;\n  return result;\n};\nexport default ShowGeometryInstanceAttribute;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport TimeConstants from \"./TimeConstants.js\";\nimport TimeStandard from \"./TimeStandard.js\";\n\n/**\n * Contains functions for finding the Cartesian coordinates of the sun and the moon in the\n * Earth-centered inertial frame.\n *\n * @namespace Simon1994PlanetaryPositions\n */\nconst Simon1994PlanetaryPositions = {};\n\nfunction computeTdbMinusTtSpice(daysSinceJ2000InTerrestrialTime) {\n  /* STK Comments ------------------------------------------------------\n   * This function uses constants designed to be consistent with\n   * the SPICE Toolkit from JPL version N0051 (unitim.c)\n   * M0 = 6.239996\n   * M0Dot = 1.99096871e-7 rad/s = 0.01720197 rad/d\n   * EARTH_ECC = 1.671e-2\n   * TDB_AMPL = 1.657e-3 secs\n   *--------------------------------------------------------------------*/\n\n  //* Values taken as specified in STK Comments except: 0.01720197 rad/day = 1.99096871e-7 rad/sec\n  //* Here we use the more precise value taken from the SPICE value 1.99096871e-7 rad/sec converted to rad/day\n  //* All other constants are consistent with the SPICE implementation of the TDB conversion\n  //* except where we treat the independent time parameter to be in TT instead of TDB.\n  //* This is an approximation made to facilitate performance due to the higher prevalance of\n  //* the TT2TDB conversion over TDB2TT in order to avoid having to iterate when converting to TDB for the JPL ephemeris.\n  //* Days are used instead of seconds to provide a slight improvement in numerical precision.\n\n  //* For more information see:\n  //* http://www.cv.nrao.edu/~rfisher/Ephemerides/times.html#TDB\n  //* ftp://ssd.jpl.nasa.gov/pub/eph/planets/ioms/ExplSupplChap8.pdf\n\n  const g = 6.239996 + 0.0172019696544 * daysSinceJ2000InTerrestrialTime;\n  return 1.657e-3 * Math.sin(g + 1.671e-2 * Math.sin(g));\n}\n\nconst TdtMinusTai = 32.184;\nconst J2000d = 2451545;\nfunction taiToTdb(date, result) {\n  //Converts TAI to TT\n  result = JulianDate.addSeconds(date, TdtMinusTai, result);\n\n  //Converts TT to TDB\n  const days = JulianDate.totalDays(result) - J2000d;\n  result = JulianDate.addSeconds(result, computeTdbMinusTtSpice(days), result);\n\n  return result;\n}\n\nconst epoch = new JulianDate(2451545, 0, TimeStandard.TAI); //Actually TDB (not TAI)\nconst MetersPerKilometer = 1000.0;\nconst RadiansPerDegree = CesiumMath.RADIANS_PER_DEGREE;\nconst RadiansPerArcSecond = CesiumMath.RADIANS_PER_ARCSECOND;\nconst MetersPerAstronomicalUnit = 1.4959787e11; // IAU 1976 value\n\nconst perifocalToEquatorial = new Matrix3();\nfunction elementsToCartesian(\n  semimajorAxis,\n  eccentricity,\n  inclination,\n  longitudeOfPerigee,\n  longitudeOfNode,\n  meanLongitude,\n  result,\n) {\n  if (inclination < 0.0) {\n    inclination = -inclination;\n    longitudeOfNode += CesiumMath.PI;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (inclination < 0 || inclination > CesiumMath.PI) {\n    throw new DeveloperError(\n      \"The inclination is out of range. Inclination must be greater than or equal to zero and less than or equal to Pi radians.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const radiusOfPeriapsis = semimajorAxis * (1.0 - eccentricity);\n  const argumentOfPeriapsis = longitudeOfPerigee - longitudeOfNode;\n  const rightAscensionOfAscendingNode = longitudeOfNode;\n  const trueAnomaly = meanAnomalyToTrueAnomaly(\n    meanLongitude - longitudeOfPerigee,\n    eccentricity,\n  );\n  const type = chooseOrbit(eccentricity, 0.0);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    type === \"Hyperbolic\" &&\n    Math.abs(CesiumMath.negativePiToPi(trueAnomaly)) >=\n      Math.acos(-1.0 / eccentricity)\n  ) {\n    throw new DeveloperError(\n      \"The true anomaly of the hyperbolic orbit lies outside of the bounds of the hyperbola.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  perifocalToCartesianMatrix(\n    argumentOfPeriapsis,\n    inclination,\n    rightAscensionOfAscendingNode,\n    perifocalToEquatorial,\n  );\n  const semilatus = radiusOfPeriapsis * (1.0 + eccentricity);\n  const costheta = Math.cos(trueAnomaly);\n  const sintheta = Math.sin(trueAnomaly);\n\n  const denom = 1.0 + eccentricity * costheta;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (denom <= CesiumMath.Epsilon10) {\n    throw new DeveloperError(\"elements cannot be converted to cartesian\");\n  }\n  //>>includeEnd('debug');\n\n  const radius = semilatus / denom;\n  if (!defined(result)) {\n    result = new Cartesian3(radius * costheta, radius * sintheta, 0.0);\n  } else {\n    result.x = radius * costheta;\n    result.y = radius * sintheta;\n    result.z = 0.0;\n  }\n\n  return Matrix3.multiplyByVector(perifocalToEquatorial, result, result);\n}\n\nfunction chooseOrbit(eccentricity, tolerance) {\n  //>>includeStart('debug', pragmas.debug);\n  if (eccentricity < 0) {\n    throw new DeveloperError(\"eccentricity cannot be negative.\");\n  }\n  //>>includeEnd('debug');\n\n  if (eccentricity <= tolerance) {\n    return \"Circular\";\n  } else if (eccentricity < 1.0 - tolerance) {\n    return \"Elliptical\";\n  } else if (eccentricity <= 1.0 + tolerance) {\n    return \"Parabolic\";\n  }\n  return \"Hyperbolic\";\n}\n\n// Calculates the true anomaly given the mean anomaly and the eccentricity.\nfunction meanAnomalyToTrueAnomaly(meanAnomaly, eccentricity) {\n  //>>includeStart('debug', pragmas.debug);\n  if (eccentricity < 0.0 || eccentricity >= 1.0) {\n    throw new DeveloperError(\"eccentricity out of range.\");\n  }\n  //>>includeEnd('debug');\n\n  const eccentricAnomaly = meanAnomalyToEccentricAnomaly(\n    meanAnomaly,\n    eccentricity,\n  );\n  return eccentricAnomalyToTrueAnomaly(eccentricAnomaly, eccentricity);\n}\n\nconst maxIterationCount = 50;\nconst keplerEqConvergence = CesiumMath.EPSILON8;\n// Calculates the eccentric anomaly given the mean anomaly and the eccentricity.\nfunction meanAnomalyToEccentricAnomaly(meanAnomaly, eccentricity) {\n  //>>includeStart('debug', pragmas.debug);\n  if (eccentricity < 0.0 || eccentricity >= 1.0) {\n    throw new DeveloperError(\"eccentricity out of range.\");\n  }\n  //>>includeEnd('debug');\n\n  const revs = Math.floor(meanAnomaly / CesiumMath.TWO_PI);\n\n  // Find angle in current revolution\n  meanAnomaly -= revs * CesiumMath.TWO_PI;\n\n  // calculate starting value for iteration sequence\n  let iterationValue =\n    meanAnomaly +\n    (eccentricity * Math.sin(meanAnomaly)) /\n      (1.0 - Math.sin(meanAnomaly + eccentricity) + Math.sin(meanAnomaly));\n\n  // Perform Newton-Raphson iteration on Kepler's equation\n  let eccentricAnomaly = Number.MAX_VALUE;\n\n  let count;\n  for (\n    count = 0;\n    count < maxIterationCount &&\n    Math.abs(eccentricAnomaly - iterationValue) > keplerEqConvergence;\n    ++count\n  ) {\n    eccentricAnomaly = iterationValue;\n    const NRfunction =\n      eccentricAnomaly -\n      eccentricity * Math.sin(eccentricAnomaly) -\n      meanAnomaly;\n    const dNRfunction = 1 - eccentricity * Math.cos(eccentricAnomaly);\n    iterationValue = eccentricAnomaly - NRfunction / dNRfunction;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (count >= maxIterationCount) {\n    throw new DeveloperError(\"Kepler equation did not converge\");\n    // STK Components uses a numerical method to find the eccentric anomaly in the case that Kepler's\n    // equation does not converge. We don't expect that to ever be necessary for the reasonable orbits used here.\n  }\n  //>>includeEnd('debug');\n\n  eccentricAnomaly = iterationValue + revs * CesiumMath.TWO_PI;\n  return eccentricAnomaly;\n}\n\n// Calculates the true anomaly given the eccentric anomaly and the eccentricity.\nfunction eccentricAnomalyToTrueAnomaly(eccentricAnomaly, eccentricity) {\n  //>>includeStart('debug', pragmas.debug);\n  if (eccentricity < 0.0 || eccentricity >= 1.0) {\n    throw new DeveloperError(\"eccentricity out of range.\");\n  }\n  //>>includeEnd('debug');\n\n  // Calculate the number of previous revolutions\n  const revs = Math.floor(eccentricAnomaly / CesiumMath.TWO_PI);\n\n  // Find angle in current revolution\n  eccentricAnomaly -= revs * CesiumMath.TWO_PI;\n\n  // Calculate true anomaly from eccentric anomaly\n  const trueAnomalyX = Math.cos(eccentricAnomaly) - eccentricity;\n  const trueAnomalyY =\n    Math.sin(eccentricAnomaly) * Math.sqrt(1 - eccentricity * eccentricity);\n\n  let trueAnomaly = Math.atan2(trueAnomalyY, trueAnomalyX);\n\n  // Ensure the correct quadrant\n  trueAnomaly = CesiumMath.zeroToTwoPi(trueAnomaly);\n  if (eccentricAnomaly < 0) {\n    trueAnomaly -= CesiumMath.TWO_PI;\n  }\n\n  // Add on previous revolutions\n  trueAnomaly += revs * CesiumMath.TWO_PI;\n\n  return trueAnomaly;\n}\n\n// Calculates the transformation matrix to convert from the perifocal (PQW) coordinate\n// system to inertial cartesian coordinates.\nfunction perifocalToCartesianMatrix(\n  argumentOfPeriapsis,\n  inclination,\n  rightAscension,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (inclination < 0 || inclination > CesiumMath.PI) {\n    throw new DeveloperError(\"inclination out of range\");\n  }\n  //>>includeEnd('debug');\n\n  const cosap = Math.cos(argumentOfPeriapsis);\n  const sinap = Math.sin(argumentOfPeriapsis);\n\n  const cosi = Math.cos(inclination);\n  const sini = Math.sin(inclination);\n\n  const cosraan = Math.cos(rightAscension);\n  const sinraan = Math.sin(rightAscension);\n  if (!defined(result)) {\n    result = new Matrix3(\n      cosraan * cosap - sinraan * sinap * cosi,\n      -cosraan * sinap - sinraan * cosap * cosi,\n      sinraan * sini,\n\n      sinraan * cosap + cosraan * sinap * cosi,\n      -sinraan * sinap + cosraan * cosap * cosi,\n      -cosraan * sini,\n\n      sinap * sini,\n      cosap * sini,\n      cosi,\n    );\n  } else {\n    result[0] = cosraan * cosap - sinraan * sinap * cosi;\n    result[1] = sinraan * cosap + cosraan * sinap * cosi;\n    result[2] = sinap * sini;\n    result[3] = -cosraan * sinap - sinraan * cosap * cosi;\n    result[4] = -sinraan * sinap + cosraan * cosap * cosi;\n    result[5] = cosap * sini;\n    result[6] = sinraan * sini;\n    result[7] = -cosraan * sini;\n    result[8] = cosi;\n  }\n  return result;\n}\n\n// From section 5.8\nconst semiMajorAxis0 = 1.0000010178 * MetersPerAstronomicalUnit;\nconst meanLongitude0 = 100.46645683 * RadiansPerDegree;\nconst meanLongitude1 = 1295977422.83429 * RadiansPerArcSecond;\n\n// From table 6\nconst p1u = 16002;\nconst p2u = 21863;\nconst p3u = 32004;\nconst p4u = 10931;\nconst p5u = 14529;\nconst p6u = 16368;\nconst p7u = 15318;\nconst p8u = 32794;\n\nconst Ca1 = 64 * 1e-7 * MetersPerAstronomicalUnit;\nconst Ca2 = -152 * 1e-7 * MetersPerAstronomicalUnit;\nconst Ca3 = 62 * 1e-7 * MetersPerAstronomicalUnit;\nconst Ca4 = -8 * 1e-7 * MetersPerAstronomicalUnit;\nconst Ca5 = 32 * 1e-7 * MetersPerAstronomicalUnit;\nconst Ca6 = -41 * 1e-7 * MetersPerAstronomicalUnit;\nconst Ca7 = 19 * 1e-7 * MetersPerAstronomicalUnit;\nconst Ca8 = -11 * 1e-7 * MetersPerAstronomicalUnit;\n\nconst Sa1 = -150 * 1e-7 * MetersPerAstronomicalUnit;\nconst Sa2 = -46 * 1e-7 * MetersPerAstronomicalUnit;\nconst Sa3 = 68 * 1e-7 * MetersPerAstronomicalUnit;\nconst Sa4 = 54 * 1e-7 * MetersPerAstronomicalUnit;\nconst Sa5 = 14 * 1e-7 * MetersPerAstronomicalUnit;\nconst Sa6 = 24 * 1e-7 * MetersPerAstronomicalUnit;\nconst Sa7 = -28 * 1e-7 * MetersPerAstronomicalUnit;\nconst Sa8 = 22 * 1e-7 * MetersPerAstronomicalUnit;\n\nconst q1u = 10;\nconst q2u = 16002;\nconst q3u = 21863;\nconst q4u = 10931;\nconst q5u = 1473;\nconst q6u = 32004;\nconst q7u = 4387;\nconst q8u = 73;\n\nconst Cl1 = -325 * 1e-7;\nconst Cl2 = -322 * 1e-7;\nconst Cl3 = -79 * 1e-7;\nconst Cl4 = 232 * 1e-7;\nconst Cl5 = -52 * 1e-7;\nconst Cl6 = 97 * 1e-7;\nconst Cl7 = 55 * 1e-7;\nconst Cl8 = -41 * 1e-7;\n\nconst Sl1 = -105 * 1e-7;\nconst Sl2 = -137 * 1e-7;\nconst Sl3 = 258 * 1e-7;\nconst Sl4 = 35 * 1e-7;\nconst Sl5 = -116 * 1e-7;\nconst Sl6 = -88 * 1e-7;\nconst Sl7 = -112 * 1e-7;\nconst Sl8 = -80 * 1e-7;\n\nconst scratchDate = new JulianDate(0, 0.0, TimeStandard.TAI);\n// Gets a point describing the motion of the Earth-Moon barycenter according to the equations described in section 6.\nfunction computeSimonEarthMoonBarycenter(date, result) {\n  // t is thousands of years from J2000 TDB\n  taiToTdb(date, scratchDate);\n  const x =\n    scratchDate.dayNumber -\n    epoch.dayNumber +\n    (scratchDate.secondsOfDay - epoch.secondsOfDay) /\n      TimeConstants.SECONDS_PER_DAY;\n  const t = x / (TimeConstants.DAYS_PER_JULIAN_CENTURY * 10.0);\n\n  const u = 0.3595362 * t;\n  const semimajorAxis =\n    semiMajorAxis0 +\n    Ca1 * Math.cos(p1u * u) +\n    Sa1 * Math.sin(p1u * u) +\n    Ca2 * Math.cos(p2u * u) +\n    Sa2 * Math.sin(p2u * u) +\n    Ca3 * Math.cos(p3u * u) +\n    Sa3 * Math.sin(p3u * u) +\n    Ca4 * Math.cos(p4u * u) +\n    Sa4 * Math.sin(p4u * u) +\n    Ca5 * Math.cos(p5u * u) +\n    Sa5 * Math.sin(p5u * u) +\n    Ca6 * Math.cos(p6u * u) +\n    Sa6 * Math.sin(p6u * u) +\n    Ca7 * Math.cos(p7u * u) +\n    Sa7 * Math.sin(p7u * u) +\n    Ca8 * Math.cos(p8u * u) +\n    Sa8 * Math.sin(p8u * u);\n  const meanLongitude =\n    meanLongitude0 +\n    meanLongitude1 * t +\n    Cl1 * Math.cos(q1u * u) +\n    Sl1 * Math.sin(q1u * u) +\n    Cl2 * Math.cos(q2u * u) +\n    Sl2 * Math.sin(q2u * u) +\n    Cl3 * Math.cos(q3u * u) +\n    Sl3 * Math.sin(q3u * u) +\n    Cl4 * Math.cos(q4u * u) +\n    Sl4 * Math.sin(q4u * u) +\n    Cl5 * Math.cos(q5u * u) +\n    Sl5 * Math.sin(q5u * u) +\n    Cl6 * Math.cos(q6u * u) +\n    Sl6 * Math.sin(q6u * u) +\n    Cl7 * Math.cos(q7u * u) +\n    Sl7 * Math.sin(q7u * u) +\n    Cl8 * Math.cos(q8u * u) +\n    Sl8 * Math.sin(q8u * u);\n\n  // All constants in this part are from section 5.8\n  const eccentricity = 0.0167086342 - 0.0004203654 * t;\n  const longitudeOfPerigee =\n    102.93734808 * RadiansPerDegree + 11612.3529 * RadiansPerArcSecond * t;\n  const inclination = 469.97289 * RadiansPerArcSecond * t;\n  const longitudeOfNode =\n    174.87317577 * RadiansPerDegree - 8679.27034 * RadiansPerArcSecond * t;\n\n  return elementsToCartesian(\n    semimajorAxis,\n    eccentricity,\n    inclination,\n    longitudeOfPerigee,\n    longitudeOfNode,\n    meanLongitude,\n    result,\n  );\n}\n\n// Gets a point describing the position of the moon according to the equations described in section 4.\nfunction computeSimonMoon(date, result) {\n  taiToTdb(date, scratchDate);\n  const x =\n    scratchDate.dayNumber -\n    epoch.dayNumber +\n    (scratchDate.secondsOfDay - epoch.secondsOfDay) /\n      TimeConstants.SECONDS_PER_DAY;\n  const t = x / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n  const t2 = t * t;\n  const t3 = t2 * t;\n  const t4 = t3 * t;\n\n  // Terms from section 3.4 (b.1)\n  let semimajorAxis = 383397.7725 + 0.004 * t;\n  let eccentricity = 0.055545526 - 0.000000016 * t;\n  const inclinationConstant = 5.15668983 * RadiansPerDegree;\n  let inclinationSecPart =\n    -0.00008 * t + 0.02966 * t2 - 0.000042 * t3 - 0.00000013 * t4;\n  const longitudeOfPerigeeConstant = 83.35324312 * RadiansPerDegree;\n  let longitudeOfPerigeeSecPart =\n    14643420.2669 * t - 38.2702 * t2 - 0.045047 * t3 + 0.00021301 * t4;\n  const longitudeOfNodeConstant = 125.04455501 * RadiansPerDegree;\n  let longitudeOfNodeSecPart =\n    -6967919.3631 * t + 6.3602 * t2 + 0.007625 * t3 - 0.00003586 * t4;\n  const meanLongitudeConstant = 218.31664563 * RadiansPerDegree;\n  let meanLongitudeSecPart =\n    1732559343.4847 * t - 6.391 * t2 + 0.006588 * t3 - 0.00003169 * t4;\n\n  // Delaunay arguments from section 3.5 b\n  const D =\n    297.85019547 * RadiansPerDegree +\n    RadiansPerArcSecond *\n      (1602961601.209 * t - 6.3706 * t2 + 0.006593 * t3 - 0.00003169 * t4);\n  const F =\n    93.27209062 * RadiansPerDegree +\n    RadiansPerArcSecond *\n      (1739527262.8478 * t - 12.7512 * t2 - 0.001037 * t3 + 0.00000417 * t4);\n  const l =\n    134.96340251 * RadiansPerDegree +\n    RadiansPerArcSecond *\n      (1717915923.2178 * t + 31.8792 * t2 + 0.051635 * t3 - 0.0002447 * t4);\n  const lprime =\n    357.52910918 * RadiansPerDegree +\n    RadiansPerArcSecond *\n      (129596581.0481 * t - 0.5532 * t2 + 0.000136 * t3 - 0.00001149 * t4);\n  const psi =\n    310.17137918 * RadiansPerDegree -\n    RadiansPerArcSecond *\n      (6967051.436 * t + 6.2068 * t2 + 0.007618 * t3 - 0.00003219 * t4);\n\n  // Add terms from Table 4\n  const twoD = 2.0 * D;\n  const fourD = 4.0 * D;\n  const sixD = 6.0 * D;\n  const twol = 2.0 * l;\n  const threel = 3.0 * l;\n  const fourl = 4.0 * l;\n  const twoF = 2.0 * F;\n  semimajorAxis +=\n    3400.4 * Math.cos(twoD) -\n    635.6 * Math.cos(twoD - l) -\n    235.6 * Math.cos(l) +\n    218.1 * Math.cos(twoD - lprime) +\n    181.0 * Math.cos(twoD + l);\n  eccentricity +=\n    0.014216 * Math.cos(twoD - l) +\n    0.008551 * Math.cos(twoD - twol) -\n    0.001383 * Math.cos(l) +\n    0.001356 * Math.cos(twoD + l) -\n    0.001147 * Math.cos(fourD - threel) -\n    0.000914 * Math.cos(fourD - twol) +\n    0.000869 * Math.cos(twoD - lprime - l) -\n    0.000627 * Math.cos(twoD) -\n    0.000394 * Math.cos(fourD - fourl) +\n    0.000282 * Math.cos(twoD - lprime - twol) -\n    0.000279 * Math.cos(D - l) -\n    0.000236 * Math.cos(twol) +\n    0.000231 * Math.cos(fourD) +\n    0.000229 * Math.cos(sixD - fourl) -\n    0.000201 * Math.cos(twol - twoF);\n  inclinationSecPart +=\n    486.26 * Math.cos(twoD - twoF) -\n    40.13 * Math.cos(twoD) +\n    37.51 * Math.cos(twoF) +\n    25.73 * Math.cos(twol - twoF) +\n    19.97 * Math.cos(twoD - lprime - twoF);\n  longitudeOfPerigeeSecPart +=\n    -55609 * Math.sin(twoD - l) -\n    34711 * Math.sin(twoD - twol) -\n    9792 * Math.sin(l) +\n    9385 * Math.sin(fourD - threel) +\n    7505 * Math.sin(fourD - twol) +\n    5318 * Math.sin(twoD + l) +\n    3484 * Math.sin(fourD - fourl) -\n    3417 * Math.sin(twoD - lprime - l) -\n    2530 * Math.sin(sixD - fourl) -\n    2376 * Math.sin(twoD) -\n    2075 * Math.sin(twoD - threel) -\n    1883 * Math.sin(twol) -\n    1736 * Math.sin(sixD - 5.0 * l) +\n    1626 * Math.sin(lprime) -\n    1370 * Math.sin(sixD - threel);\n  longitudeOfNodeSecPart +=\n    -5392 * Math.sin(twoD - twoF) -\n    540 * Math.sin(lprime) -\n    441 * Math.sin(twoD) +\n    423 * Math.sin(twoF) -\n    288 * Math.sin(twol - twoF);\n  meanLongitudeSecPart +=\n    -3332.9 * Math.sin(twoD) +\n    1197.4 * Math.sin(twoD - l) -\n    662.5 * Math.sin(lprime) +\n    396.3 * Math.sin(l) -\n    218.0 * Math.sin(twoD - lprime);\n\n  // Add terms from Table 5\n  const twoPsi = 2.0 * psi;\n  const threePsi = 3.0 * psi;\n  inclinationSecPart +=\n    46.997 * Math.cos(psi) * t -\n    0.614 * Math.cos(twoD - twoF + psi) * t +\n    0.614 * Math.cos(twoD - twoF - psi) * t -\n    0.0297 * Math.cos(twoPsi) * t2 -\n    0.0335 * Math.cos(psi) * t2 +\n    0.0012 * Math.cos(twoD - twoF + twoPsi) * t2 -\n    0.00016 * Math.cos(psi) * t3 +\n    0.00004 * Math.cos(threePsi) * t3 +\n    0.00004 * Math.cos(twoPsi) * t3;\n  const perigeeAndMean =\n    2.116 * Math.sin(psi) * t -\n    0.111 * Math.sin(twoD - twoF - psi) * t -\n    0.0015 * Math.sin(psi) * t2;\n  longitudeOfPerigeeSecPart += perigeeAndMean;\n  meanLongitudeSecPart += perigeeAndMean;\n  longitudeOfNodeSecPart +=\n    -520.77 * Math.sin(psi) * t +\n    13.66 * Math.sin(twoD - twoF + psi) * t +\n    1.12 * Math.sin(twoD - psi) * t -\n    1.06 * Math.sin(twoF - psi) * t +\n    0.66 * Math.sin(twoPsi) * t2 +\n    0.371 * Math.sin(psi) * t2 -\n    0.035 * Math.sin(twoD - twoF + twoPsi) * t2 -\n    0.015 * Math.sin(twoD - twoF + psi) * t2 +\n    0.0014 * Math.sin(psi) * t3 -\n    0.0011 * Math.sin(threePsi) * t3 -\n    0.0009 * Math.sin(twoPsi) * t3;\n\n  // Add constants and convert units\n  semimajorAxis *= MetersPerKilometer;\n  const inclination =\n    inclinationConstant + inclinationSecPart * RadiansPerArcSecond;\n  const longitudeOfPerigee =\n    longitudeOfPerigeeConstant +\n    longitudeOfPerigeeSecPart * RadiansPerArcSecond;\n  const meanLongitude =\n    meanLongitudeConstant + meanLongitudeSecPart * RadiansPerArcSecond;\n  const longitudeOfNode =\n    longitudeOfNodeConstant + longitudeOfNodeSecPart * RadiansPerArcSecond;\n\n  return elementsToCartesian(\n    semimajorAxis,\n    eccentricity,\n    inclination,\n    longitudeOfPerigee,\n    longitudeOfNode,\n    meanLongitude,\n    result,\n  );\n}\n\n// Gets a point describing the motion of the Earth.  This point uses the Moon point and\n// the 1992 mu value (ratio between Moon and Earth masses) in Table 2 of the paper in order\n// to determine the position of the Earth relative to the Earth-Moon barycenter.\nconst moonEarthMassRatio = 0.012300034; // From 1992 mu value in Table 2\nconst factor = (moonEarthMassRatio / (moonEarthMassRatio + 1.0)) * -1;\nfunction computeSimonEarth(date, result) {\n  result = computeSimonMoon(date, result);\n  return Cartesian3.multiplyByScalar(result, factor, result);\n}\n\n// Values for the <code>axesTransformation</code> needed for the rotation were found using the STK Components\n// GeographicTransformer on the position of the sun center of mass point and the earth J2000 frame.\n\nconst axesTransformation = new Matrix3(\n  1.0000000000000002,\n  5.619723173785822e-16,\n  4.690511510146299e-19,\n  -5.154129427414611e-16,\n  0.9174820620691819,\n  -0.39777715593191376,\n  -2.23970096136568e-16,\n  0.39777715593191376,\n  0.9174820620691819,\n);\nlet translation = new Cartesian3();\n\n/**\n * Computes the position of the Sun in the Earth-centered inertial frame\n *\n * @param {JulianDate} [julianDate] The time at which to compute the Sun's position, if not provided the current system time is used.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} Calculated sun position\n */\nSimon1994PlanetaryPositions.computeSunPositionInEarthInertialFrame = function (\n  julianDate,\n  result,\n) {\n  if (!defined(julianDate)) {\n    julianDate = JulianDate.now();\n  }\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  //first forward transformation\n  translation = computeSimonEarthMoonBarycenter(julianDate, translation);\n  result = Cartesian3.negate(translation, result);\n\n  //second forward transformation\n  computeSimonEarth(julianDate, translation);\n\n  Cartesian3.subtract(result, translation, result);\n  Matrix3.multiplyByVector(axesTransformation, result, result);\n\n  return result;\n};\n\n/**\n * Computes the position of the Moon in the Earth-centered inertial frame\n *\n * @param {JulianDate} [julianDate] The time at which to compute the Moon's position, if not provided the current system time is used.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} Calculated moon position\n */\nSimon1994PlanetaryPositions.computeMoonPositionInEarthInertialFrame = function (\n  julianDate,\n  result,\n) {\n  if (!defined(julianDate)) {\n    julianDate = JulianDate.now();\n  }\n\n  result = computeSimonMoon(julianDate, result);\n  Matrix3.multiplyByVector(axesTransformation, result, result);\n\n  return result;\n};\n\nexport default Simon1994PlanetaryPositions;\n","import ArcType from \"./ArcType.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Color from \"./Color.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\nfunction interpolateColors(p0, p1, color0, color1, minDistance, array, offset) {\n  const numPoints = PolylinePipeline.numberOfPoints(p0, p1, minDistance);\n  let i;\n\n  const r0 = color0.red;\n  const g0 = color0.green;\n  const b0 = color0.blue;\n  const a0 = color0.alpha;\n\n  const r1 = color1.red;\n  const g1 = color1.green;\n  const b1 = color1.blue;\n  const a1 = color1.alpha;\n\n  if (Color.equals(color0, color1)) {\n    for (i = 0; i < numPoints; i++) {\n      array[offset++] = Color.floatToByte(r0);\n      array[offset++] = Color.floatToByte(g0);\n      array[offset++] = Color.floatToByte(b0);\n      array[offset++] = Color.floatToByte(a0);\n    }\n    return offset;\n  }\n\n  const redPerVertex = (r1 - r0) / numPoints;\n  const greenPerVertex = (g1 - g0) / numPoints;\n  const bluePerVertex = (b1 - b0) / numPoints;\n  const alphaPerVertex = (a1 - a0) / numPoints;\n\n  let index = offset;\n  for (i = 0; i < numPoints; i++) {\n    array[index++] = Color.floatToByte(r0 + i * redPerVertex);\n    array[index++] = Color.floatToByte(g0 + i * greenPerVertex);\n    array[index++] = Color.floatToByte(b0 + i * bluePerVertex);\n    array[index++] = Color.floatToByte(a0 + i * alphaPerVertex);\n  }\n\n  return index;\n}\n\n/**\n * A description of a polyline modeled as a line strip; the first two positions define a line segment,\n * and each additional position defines a line segment from the previous position.\n *\n * @alias SimplePolylineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip.\n * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors.\n * @param {boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices.\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid to be used as a reference.\n *\n * @exception {DeveloperError} At least two positions are required.\n * @exception {DeveloperError} colors has an invalid length.\n *\n * @see SimplePolylineGeometry#createGeometry\n *\n * @example\n * // A polyline with two connected line segments\n * const polyline = new Cesium.SimplePolylineGeometry({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     0.0, 0.0,\n *     5.0, 0.0,\n *     5.0, 5.0\n *   ])\n * });\n * const geometry = Cesium.SimplePolylineGeometry.createGeometry(polyline);\n */\nfunction SimplePolylineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n  const colors = options.colors;\n  const colorsPerVertex = options.colorsPerVertex ?? false;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions) || positions.length < 2) {\n    throw new DeveloperError(\"At least two positions are required.\");\n  }\n  if (\n    defined(colors) &&\n    ((colorsPerVertex && colors.length < positions.length) ||\n      (!colorsPerVertex && colors.length < positions.length - 1))\n  ) {\n    throw new DeveloperError(\"colors has an invalid length.\");\n  }\n  //>>includeEnd('debug');\n\n  this._positions = positions;\n  this._colors = colors;\n  this._colorsPerVertex = colorsPerVertex;\n\n  this._arcType = options.arcType ?? ArcType.GEODESIC;\n  this._granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  this._workerName = \"createSimplePolylineGeometry\";\n\n  let numComponents = 1 + positions.length * Cartesian3.packedLength;\n  numComponents += defined(colors) ? 1 + colors.length * Color.packedLength : 1;\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength = numComponents + Ellipsoid.packedLength + 3;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {SimplePolylineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nSimplePolylineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  const positions = value._positions;\n  let length = positions.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  const colors = value._colors;\n  length = defined(colors) ? colors.length : 0.0;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n    Color.pack(colors[i], array, startingIndex);\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0;\n  array[startingIndex++] = value._arcType;\n  array[startingIndex] = value._granularity;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {SimplePolylineGeometry} [result] The object into which to store the result.\n * @returns {SimplePolylineGeometry} The modified result parameter or a new SimplePolylineGeometry instance if one was not provided.\n */\nSimplePolylineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  let length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  length = array[startingIndex++];\n  const colors = length > 0 ? new Array(length) : undefined;\n\n  for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\n    colors[i] = Color.unpack(array, startingIndex);\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  const colorsPerVertex = array[startingIndex++] === 1.0;\n  const arcType = array[startingIndex++];\n  const granularity = array[startingIndex];\n\n  if (!defined(result)) {\n    return new SimplePolylineGeometry({\n      positions: positions,\n      colors: colors,\n      ellipsoid: ellipsoid,\n      colorsPerVertex: colorsPerVertex,\n      arcType: arcType,\n      granularity: granularity,\n    });\n  }\n\n  result._positions = positions;\n  result._colors = colors;\n  result._ellipsoid = ellipsoid;\n  result._colorsPerVertex = colorsPerVertex;\n  result._arcType = arcType;\n  result._granularity = granularity;\n\n  return result;\n};\n\nconst scratchArray1 = new Array(2);\nconst scratchArray2 = new Array(2);\nconst generateArcOptionsScratch = {\n  positions: scratchArray1,\n  height: scratchArray2,\n  ellipsoid: undefined,\n  minDistance: undefined,\n  granularity: undefined,\n};\n\n/**\n * Computes the geometric representation of a simple polyline, including its vertices, indices, and a bounding sphere.\n *\n * @param {SimplePolylineGeometry} simplePolylineGeometry A description of the polyline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nSimplePolylineGeometry.createGeometry = function (simplePolylineGeometry) {\n  const positions = simplePolylineGeometry._positions;\n  const colors = simplePolylineGeometry._colors;\n  const colorsPerVertex = simplePolylineGeometry._colorsPerVertex;\n  const arcType = simplePolylineGeometry._arcType;\n  const granularity = simplePolylineGeometry._granularity;\n  const ellipsoid = simplePolylineGeometry._ellipsoid;\n\n  const minDistance = CesiumMath.chordLength(\n    granularity,\n    ellipsoid.maximumRadius,\n  );\n  const perSegmentColors = defined(colors) && !colorsPerVertex;\n\n  let i;\n  const length = positions.length;\n\n  let positionValues;\n  let numberOfPositions;\n  let colorValues;\n  let color;\n  let offset = 0;\n\n  if (arcType === ArcType.GEODESIC || arcType === ArcType.RHUMB) {\n    let subdivisionSize;\n    let numberOfPointsFunction;\n    let generateArcFunction;\n    if (arcType === ArcType.GEODESIC) {\n      subdivisionSize = CesiumMath.chordLength(\n        granularity,\n        ellipsoid.maximumRadius,\n      );\n      numberOfPointsFunction = PolylinePipeline.numberOfPoints;\n      generateArcFunction = PolylinePipeline.generateArc;\n    } else {\n      subdivisionSize = granularity;\n      numberOfPointsFunction = PolylinePipeline.numberOfPointsRhumbLine;\n      generateArcFunction = PolylinePipeline.generateRhumbArc;\n    }\n\n    const heights = PolylinePipeline.extractHeights(positions, ellipsoid);\n\n    const generateArcOptions = generateArcOptionsScratch;\n    if (arcType === ArcType.GEODESIC) {\n      generateArcOptions.minDistance = minDistance;\n    } else {\n      generateArcOptions.granularity = granularity;\n    }\n    generateArcOptions.ellipsoid = ellipsoid;\n\n    if (perSegmentColors) {\n      let positionCount = 0;\n      for (i = 0; i < length - 1; i++) {\n        positionCount +=\n          numberOfPointsFunction(\n            positions[i],\n            positions[i + 1],\n            subdivisionSize,\n          ) + 1;\n      }\n\n      positionValues = new Float64Array(positionCount * 3);\n      colorValues = new Uint8Array(positionCount * 4);\n\n      generateArcOptions.positions = scratchArray1;\n      generateArcOptions.height = scratchArray2;\n\n      let ci = 0;\n      for (i = 0; i < length - 1; ++i) {\n        scratchArray1[0] = positions[i];\n        scratchArray1[1] = positions[i + 1];\n\n        scratchArray2[0] = heights[i];\n        scratchArray2[1] = heights[i + 1];\n\n        const pos = generateArcFunction(generateArcOptions);\n\n        if (defined(colors)) {\n          const segLen = pos.length / 3;\n          color = colors[i];\n          for (let k = 0; k < segLen; ++k) {\n            colorValues[ci++] = Color.floatToByte(color.red);\n            colorValues[ci++] = Color.floatToByte(color.green);\n            colorValues[ci++] = Color.floatToByte(color.blue);\n            colorValues[ci++] = Color.floatToByte(color.alpha);\n          }\n        }\n\n        positionValues.set(pos, offset);\n        offset += pos.length;\n      }\n    } else {\n      generateArcOptions.positions = positions;\n      generateArcOptions.height = heights;\n      positionValues = new Float64Array(\n        generateArcFunction(generateArcOptions),\n      );\n\n      if (defined(colors)) {\n        colorValues = new Uint8Array((positionValues.length / 3) * 4);\n\n        for (i = 0; i < length - 1; ++i) {\n          const p0 = positions[i];\n          const p1 = positions[i + 1];\n          const c0 = colors[i];\n          const c1 = colors[i + 1];\n          offset = interpolateColors(\n            p0,\n            p1,\n            c0,\n            c1,\n            minDistance,\n            colorValues,\n            offset,\n          );\n        }\n\n        const lastColor = colors[length - 1];\n        colorValues[offset++] = Color.floatToByte(lastColor.red);\n        colorValues[offset++] = Color.floatToByte(lastColor.green);\n        colorValues[offset++] = Color.floatToByte(lastColor.blue);\n        colorValues[offset++] = Color.floatToByte(lastColor.alpha);\n      }\n    }\n  } else {\n    numberOfPositions = perSegmentColors ? length * 2 - 2 : length;\n    positionValues = new Float64Array(numberOfPositions * 3);\n    colorValues = defined(colors)\n      ? new Uint8Array(numberOfPositions * 4)\n      : undefined;\n\n    let positionIndex = 0;\n    let colorIndex = 0;\n\n    for (i = 0; i < length; ++i) {\n      const p = positions[i];\n\n      if (perSegmentColors && i > 0) {\n        Cartesian3.pack(p, positionValues, positionIndex);\n        positionIndex += 3;\n\n        color = colors[i - 1];\n        colorValues[colorIndex++] = Color.floatToByte(color.red);\n        colorValues[colorIndex++] = Color.floatToByte(color.green);\n        colorValues[colorIndex++] = Color.floatToByte(color.blue);\n        colorValues[colorIndex++] = Color.floatToByte(color.alpha);\n      }\n\n      if (perSegmentColors && i === length - 1) {\n        break;\n      }\n\n      Cartesian3.pack(p, positionValues, positionIndex);\n      positionIndex += 3;\n\n      if (defined(colors)) {\n        color = colors[i];\n        colorValues[colorIndex++] = Color.floatToByte(color.red);\n        colorValues[colorIndex++] = Color.floatToByte(color.green);\n        colorValues[colorIndex++] = Color.floatToByte(color.blue);\n        colorValues[colorIndex++] = Color.floatToByte(color.alpha);\n      }\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n  attributes.position = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.DOUBLE,\n    componentsPerAttribute: 3,\n    values: positionValues,\n  });\n\n  if (defined(colors)) {\n    attributes.color = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 4,\n      values: colorValues,\n      normalize: true,\n    });\n  }\n\n  numberOfPositions = positionValues.length / 3;\n  const numberOfIndices = (numberOfPositions - 1) * 2;\n  const indices = IndexDatatype.createTypedArray(\n    numberOfPositions,\n    numberOfIndices,\n  );\n\n  let index = 0;\n  for (i = 0; i < numberOfPositions - 1; ++i) {\n    indices[index++] = i;\n    indices[index++] = i + 1;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: BoundingSphere.fromPoints(positions),\n  });\n};\nexport default SimplePolylineGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport EllipsoidGeometry from \"./EllipsoidGeometry.js\";\nimport VertexFormat from \"./VertexFormat.js\";\n\n/**\n * A description of a sphere centered at the origin.\n *\n * @alias SphereGeometry\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.radius=1.0] The radius of the sphere.\n * @param {number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks.\n * @param {number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices.\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} options.slicePartitions cannot be less than three.\n * @exception {DeveloperError} options.stackPartitions cannot be less than three.\n *\n * @see SphereGeometry#createGeometry\n *\n * @example\n * const sphere = new Cesium.SphereGeometry({\n *   radius : 100.0,\n *   vertexFormat : Cesium.VertexFormat.POSITION_ONLY\n * });\n * const geometry = Cesium.SphereGeometry.createGeometry(sphere);\n */\nfunction SphereGeometry(options) {\n  const radius = options.radius ?? 1.0;\n  const radii = new Cartesian3(radius, radius, radius);\n  const ellipsoidOptions = {\n    radii: radii,\n    stackPartitions: options.stackPartitions,\n    slicePartitions: options.slicePartitions,\n    vertexFormat: options.vertexFormat,\n  };\n\n  this._ellipsoidGeometry = new EllipsoidGeometry(ellipsoidOptions);\n  this._workerName = \"createSphereGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nSphereGeometry.packedLength = EllipsoidGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {SphereGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nSphereGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  //>>includeEnd('debug');\n\n  return EllipsoidGeometry.pack(value._ellipsoidGeometry, array, startingIndex);\n};\n\nconst scratchEllipsoidGeometry = new EllipsoidGeometry();\nconst scratchOptions = {\n  radius: undefined,\n  radii: new Cartesian3(),\n  vertexFormat: new VertexFormat(),\n  stackPartitions: undefined,\n  slicePartitions: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {SphereGeometry} [result] The object into which to store the result.\n * @returns {SphereGeometry} The modified result parameter or a new SphereGeometry instance if one was not provided.\n */\nSphereGeometry.unpack = function (array, startingIndex, result) {\n  const ellipsoidGeometry = EllipsoidGeometry.unpack(\n    array,\n    startingIndex,\n    scratchEllipsoidGeometry,\n  );\n  scratchOptions.vertexFormat = VertexFormat.clone(\n    ellipsoidGeometry._vertexFormat,\n    scratchOptions.vertexFormat,\n  );\n  scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions;\n  scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions;\n\n  if (!defined(result)) {\n    scratchOptions.radius = ellipsoidGeometry._radii.x;\n    return new SphereGeometry(scratchOptions);\n  }\n\n  Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii);\n  result._ellipsoidGeometry = new EllipsoidGeometry(scratchOptions);\n  return result;\n};\n\n/**\n * Computes the geometric representation of a sphere, including its vertices, indices, and a bounding sphere.\n *\n * @param {SphereGeometry} sphereGeometry A description of the sphere.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nSphereGeometry.createGeometry = function (sphereGeometry) {\n  return EllipsoidGeometry.createGeometry(sphereGeometry._ellipsoidGeometry);\n};\nexport default SphereGeometry;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport EllipsoidOutlineGeometry from \"./EllipsoidOutlineGeometry.js\";\n\n/**\n * A description of the outline of a sphere.\n *\n * @alias SphereOutlineGeometry\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.radius=1.0] The radius of the sphere.\n * @param {number} [options.stackPartitions=10] The count of stacks for the sphere (1 greater than the number of parallel lines).\n * @param {number} [options.slicePartitions=8] The count of slices for the sphere (Equal to the number of radial lines).\n * @param {number} [options.subdivisions=200] The number of points per line, determining the granularity of the curvature .\n *\n * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one.\n * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero.\n * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero.\n *\n * @example\n * const sphere = new Cesium.SphereOutlineGeometry({\n *   radius : 100.0,\n *   stackPartitions : 6,\n *   slicePartitions: 5\n * });\n * const geometry = Cesium.SphereOutlineGeometry.createGeometry(sphere);\n */\nfunction SphereOutlineGeometry(options) {\n  const radius = options.radius ?? 1.0;\n  const radii = new Cartesian3(radius, radius, radius);\n  const ellipsoidOptions = {\n    radii: radii,\n    stackPartitions: options.stackPartitions,\n    slicePartitions: options.slicePartitions,\n    subdivisions: options.subdivisions,\n  };\n\n  this._ellipsoidGeometry = new EllipsoidOutlineGeometry(ellipsoidOptions);\n  this._workerName = \"createSphereOutlineGeometry\";\n}\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nSphereOutlineGeometry.packedLength = EllipsoidOutlineGeometry.packedLength;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {SphereOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nSphereOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  //>>includeEnd('debug');\n\n  return EllipsoidOutlineGeometry.pack(\n    value._ellipsoidGeometry,\n    array,\n    startingIndex,\n  );\n};\n\nconst scratchEllipsoidGeometry = new EllipsoidOutlineGeometry();\nconst scratchOptions = {\n  radius: undefined,\n  radii: new Cartesian3(),\n  stackPartitions: undefined,\n  slicePartitions: undefined,\n  subdivisions: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {SphereOutlineGeometry} [result] The object into which to store the result.\n * @returns {SphereOutlineGeometry} The modified result parameter or a new SphereOutlineGeometry instance if one was not provided.\n */\nSphereOutlineGeometry.unpack = function (array, startingIndex, result) {\n  const ellipsoidGeometry = EllipsoidOutlineGeometry.unpack(\n    array,\n    startingIndex,\n    scratchEllipsoidGeometry,\n  );\n  scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions;\n  scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions;\n  scratchOptions.subdivisions = ellipsoidGeometry._subdivisions;\n\n  if (!defined(result)) {\n    scratchOptions.radius = ellipsoidGeometry._radii.x;\n    return new SphereOutlineGeometry(scratchOptions);\n  }\n\n  Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii);\n  result._ellipsoidGeometry = new EllipsoidOutlineGeometry(scratchOptions);\n  return result;\n};\n\n/**\n * Computes the geometric representation of an outline of a sphere, including its vertices, indices, and a bounding sphere.\n *\n * @param {SphereOutlineGeometry} sphereGeometry A description of the sphere outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nSphereOutlineGeometry.createGeometry = function (sphereGeometry) {\n  return EllipsoidOutlineGeometry.createGeometry(\n    sphereGeometry._ellipsoidGeometry,\n  );\n};\nexport default SphereOutlineGeometry;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * A set of curvilinear 3-dimensional coordinates.\n *\n * @alias Spherical\n * @constructor\n *\n * @param {number} [clock=0.0] The angular coordinate lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\n * @param {number} [cone=0.0] The angular coordinate measured from the positive z-axis and toward the negative z-axis.\n * @param {number} [magnitude=1.0] The linear coordinate measured from the origin.\n */\nfunction Spherical(clock, cone, magnitude) {\n  /**\n   * The clock component.\n   * @type {number}\n   * @default 0.0\n   */\n  this.clock = clock ?? 0.0;\n  /**\n   * The cone component.\n   * @type {number}\n   * @default 0.0\n   */\n  this.cone = cone ?? 0.0;\n  /**\n   * The magnitude component.\n   * @type {number}\n   * @default 1.0\n   */\n  this.magnitude = magnitude ?? 1.0;\n}\n\n/**\n * Converts the provided Cartesian3 into Spherical coordinates.\n *\n * @param {Cartesian3} cartesian3 The Cartesian3 to be converted to Spherical.\n * @param {Spherical} [result] The object in which the result will be stored, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter, or a new instance if one was not provided.\n */\nSpherical.fromCartesian3 = function (cartesian3, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartesian3\", cartesian3);\n  //>>includeEnd('debug');\n\n  const x = cartesian3.x;\n  const y = cartesian3.y;\n  const z = cartesian3.z;\n  const radialSquared = x * x + y * y;\n\n  if (!defined(result)) {\n    result = new Spherical();\n  }\n\n  result.clock = Math.atan2(y, x);\n  result.cone = Math.atan2(Math.sqrt(radialSquared), z);\n  result.magnitude = Math.sqrt(radialSquared + z * z);\n  return result;\n};\n\n/**\n * Creates a duplicate of a Spherical.\n *\n * @param {Spherical} spherical The spherical to clone.\n * @param {Spherical} [result] The object to store the result into, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter or a new instance if result was undefined. (Returns undefined if spherical is undefined)\n */\nSpherical.clone = function (spherical, result) {\n  if (!defined(spherical)) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    return new Spherical(spherical.clock, spherical.cone, spherical.magnitude);\n  }\n\n  result.clock = spherical.clock;\n  result.cone = spherical.cone;\n  result.magnitude = spherical.magnitude;\n  return result;\n};\n\n/**\n * Computes the normalized version of the provided spherical.\n *\n * @param {Spherical} spherical The spherical to be normalized.\n * @param {Spherical} [result] The object to store the result into, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter or a new instance if result was undefined.\n */\nSpherical.normalize = function (spherical, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"spherical\", spherical);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new Spherical(spherical.clock, spherical.cone, 1.0);\n  }\n\n  result.clock = spherical.clock;\n  result.cone = spherical.cone;\n  result.magnitude = 1.0;\n  return result;\n};\n\n/**\n * Returns true if the first spherical is equal to the second spherical, false otherwise.\n *\n * @param {Spherical} [left] The first Spherical to be compared.\n * @param {Spherical} [right] The second Spherical to be compared.\n * @returns {boolean} true if the first spherical is equal to the second spherical, false otherwise.\n */\nSpherical.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left.clock === right.clock &&\n      left.cone === right.cone &&\n      left.magnitude === right.magnitude)\n  );\n};\n\n/**\n * Returns true if the first spherical is within the provided epsilon of the second spherical, false otherwise.\n *\n * @param {Spherical} left The first Spherical to be compared.\n * @param {Spherical} right The second Spherical to be compared.\n * @param {number} [epsilon=0.0] The epsilon to compare against.\n * @returns {boolean} true if the first spherical is within the provided epsilon of the second spherical, false otherwise.\n */\nSpherical.equalsEpsilon = function (left, right, epsilon) {\n  epsilon = epsilon ?? 0.0;\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      Math.abs(left.clock - right.clock) <= epsilon &&\n      Math.abs(left.cone - right.cone) <= epsilon &&\n      Math.abs(left.magnitude - right.magnitude) <= epsilon)\n  );\n};\n\n/**\n * Returns true if this spherical is equal to the provided spherical, false otherwise.\n *\n * @param {Spherical} [other] The Spherical to be compared.\n * @returns {boolean} true if this spherical is equal to the provided spherical, false otherwise.\n */\nSpherical.prototype.equals = function (other) {\n  return Spherical.equals(this, other);\n};\n\n/**\n * Creates a duplicate of this Spherical.\n *\n * @param {Spherical} [result] The object to store the result into, if undefined a new instance will be created.\n * @returns {Spherical} The modified result parameter or a new instance if result was undefined.\n */\nSpherical.prototype.clone = function (result) {\n  return Spherical.clone(this, result);\n};\n\n/**\n * Returns true if this spherical is within the provided epsilon of the provided spherical, false otherwise.\n *\n * @param {Spherical} other The Spherical to be compared.\n * @param {number} epsilon The epsilon to compare against.\n * @returns {boolean} true if this spherical is within the provided epsilon of the provided spherical, false otherwise.\n */\nSpherical.prototype.equalsEpsilon = function (other, epsilon) {\n  return Spherical.equalsEpsilon(this, other, epsilon);\n};\n\n/**\n * Returns a string representing this instance in the format (clock, cone, magnitude).\n *\n * @returns {string} A string representing this instance.\n */\nSpherical.prototype.toString = function () {\n  return `(${this.clock}, ${this.cone}, ${this.magnitude})`;\n};\nexport default Spherical;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport CesiumMath from \"./Math.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Quaternion from \"./Quaternion.js\";\n\n/**\n * Creates a curve parameterized and evaluated by time. This type describes an interface\n * and is not intended to be instantiated directly.\n *\n * @alias Spline\n * @constructor\n *\n * @see CatmullRomSpline\n * @see LinearSpline\n * @see HermiteSpline\n * @see QuaternionSpline\n * @see MorphWeightSpline\n */\nfunction Spline() {\n  /**\n   * An array of times for the control points.\n   * @type {number[]}\n   * @default undefined\n   */\n  this.times = undefined;\n\n  /**\n   * An array of control points.\n   * @type {Cartesian3[]|Quaternion[]}\n   * @default undefined\n   */\n  this.points = undefined;\n\n  DeveloperError.throwInstantiationError();\n}\n\n/**\n * Gets the type of the point. This helps a spline determine how to interpolate\n * and return its values.\n *\n * @param {number|Cartesian3|Quaternion} point\n * @returns {*} The type of the point.\n *\n * @exception {DeveloperError} value must be a Cartesian3, Quaternion, or number.\n *\n * @private\n */\nSpline.getPointType = function (point) {\n  if (typeof point === \"number\") {\n    return Number;\n  }\n  if (point instanceof Cartesian3) {\n    return Cartesian3;\n  }\n  if (point instanceof Quaternion) {\n    return Quaternion;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"point must be a Cartesian3, Quaternion, or number.\",\n  );\n  //>>includeEnd('debug');\n};\n\n/**\n * Evaluates the curve at a given time.\n * @function\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {Cartesian3|Quaternion|number[]} [result] The object onto which to store the result.\n * @returns {Cartesian3|Quaternion|number[]} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nSpline.prototype.evaluate = DeveloperError.throwInstantiationError;\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n *\n * @param {number} time The time.\n * @param {number} startIndex The index from which to start the search.\n * @returns {number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nSpline.prototype.findTimeInterval = function (time, startIndex) {\n  const times = this.times;\n  const length = times.length;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"time\", time);\n  if (time < times[0] || time > times[length - 1]) {\n    throw new DeveloperError(\"time is out of range.\");\n  }\n  //>>includeEnd('debug');\n\n  // Take advantage of temporal coherence by checking current, next and previous intervals\n  // for containment of time.\n  startIndex = startIndex ?? 0;\n\n  if (time >= times[startIndex]) {\n    if (startIndex + 1 < length && time < times[startIndex + 1]) {\n      return startIndex;\n    } else if (startIndex + 2 < length && time < times[startIndex + 2]) {\n      return startIndex + 1;\n    }\n  } else if (startIndex - 1 >= 0 && time >= times[startIndex - 1]) {\n    return startIndex - 1;\n  }\n\n  // The above failed so do a linear search. For the use cases so far, the\n  // length of the list is less than 10. In the future, if there is a bottle neck,\n  // it might be here.\n\n  let i;\n  if (time > times[startIndex]) {\n    for (i = startIndex; i < length - 1; ++i) {\n      if (time >= times[i] && time < times[i + 1]) {\n        break;\n      }\n    }\n  } else {\n    for (i = startIndex - 1; i >= 0; --i) {\n      if (time >= times[i] && time < times[i + 1]) {\n        break;\n      }\n    }\n  }\n\n  if (i === length - 1) {\n    i = length - 2;\n  }\n\n  return i;\n};\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around the animation period.\n */\nSpline.prototype.wrapTime = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"time\", time);\n  //>>includeEnd('debug');\n\n  const times = this.times;\n  const timeEnd = times[times.length - 1];\n  const timeStart = times[0];\n  const timeStretch = timeEnd - timeStart;\n  let divs;\n  if (time < timeStart) {\n    divs = Math.floor((timeStart - time) / timeStretch) + 1;\n    time += divs * timeStretch;\n  }\n  if (time > timeEnd) {\n    divs = Math.floor((time - timeEnd) / timeStretch) + 1;\n    time -= divs * timeStretch;\n  }\n  return time;\n};\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nSpline.prototype.clampTime = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"time\", time);\n  //>>includeEnd('debug');\n\n  const times = this.times;\n  return CesiumMath.clamp(time, times[0], times[times.length - 1]);\n};\n\nexport default Spline;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Spline from \"./Spline.js\";\n\n/**\n * A spline that is composed of piecewise constants representing a step function.\n *\n * @alias SteppedSpline\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.times An array of strictly increasing, unit-less, floating-point times at each point. The values are in no way connected to the clock time. They are the parameterization for the curve.\n * @param {number[]|Cartesian3[]|Quaternion[]} options.points The array of control points.\n *\n * @exception {DeveloperError} points.length must be greater than or equal to 2.\n * @exception {DeveloperError} times.length must be equal to points.length.\n *\n * @example\n * const times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];\n * const spline = new Cesium.SteppedSpline({\n *     times : times,\n *     points : [\n *         new Cesium.Cartesian3(1235398.0, -4810983.0, 4146266.0),\n *         new Cesium.Cartesian3(1372574.0, -5345182.0, 4606657.0),\n *         new Cesium.Cartesian3(-757983.0, -5542796.0, 4514323.0),\n *         new Cesium.Cartesian3(-2821260.0, -5248423.0, 4021290.0),\n *         new Cesium.Cartesian3(-2539788.0, -4724797.0, 3620093.0)\n *     ]\n * });\n *\n * const p0 = spline.evaluate(times[0]);\n *\n * @see ConstantSpline\n * @see CatmullRomSpline\n * @see HermiteSpline\n * @see LinearSpline\n * @see QuaternionSpline\n * @see MorphWeightSpline\n */\nfunction SteppedSpline(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const points = options.points;\n  const times = options.times;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(points) || !defined(times)) {\n    throw new DeveloperError(\"points and times are required.\");\n  }\n  if (points.length < 2) {\n    throw new DeveloperError(\n      \"points.length must be greater than or equal to 2.\",\n    );\n  }\n  if (times.length !== points.length) {\n    throw new DeveloperError(\"times.length must be equal to points.length.\");\n  }\n  //>>includeEnd('debug');\n\n  this._times = times;\n  this._points = points;\n  this._pointType = Spline.getPointType(points[0]);\n\n  this._lastTimeIndex = 0;\n}\n\nObject.defineProperties(SteppedSpline.prototype, {\n  /**\n   * An array of times for the control points.\n   *\n   * @memberof SteppedSpline.prototype\n   *\n   * @type {number[]}\n   * @readonly\n   */\n  times: {\n    get: function () {\n      return this._times;\n    },\n  },\n\n  /**\n   * An array of control points.\n   *\n   * @memberof SteppedSpline.prototype\n   *\n   * @type {number[]|Cartesian3[]|Quaternion[]}\n   * @readonly\n   */\n  points: {\n    get: function () {\n      return this._points;\n    },\n  },\n});\n\n/**\n * Finds an index <code>i</code> in <code>times</code> such that the parameter\n * <code>time</code> is in the interval <code>[times[i], times[i + 1]]</code>.\n * @function\n *\n * @param {number} time The time.\n * @param {number} startIndex The index from which to start the search.\n * @returns {number} The index for the element at the start of the interval.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nSteppedSpline.prototype.findTimeInterval = Spline.prototype.findTimeInterval;\n\n/**\n * Wraps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, wrapped around to the updated animation.\n */\nSteppedSpline.prototype.wrapTime = Spline.prototype.wrapTime;\n\n/**\n * Clamps the given time to the period covered by the spline.\n * @function\n *\n * @param {number} time The time.\n * @return {number} The time, clamped to the animation period.\n */\nSteppedSpline.prototype.clampTime = Spline.prototype.clampTime;\n\n/**\n * Evaluates the curve at a given time.\n *\n * @param {number} time The time at which to evaluate the curve.\n * @param {Cartesian3|Quaternion} [result] The object onto which to store the result.\n * @returns {number|Cartesian3|Quaternion} The modified result parameter or a new instance of the point on the curve at the given time.\n *\n * @exception {DeveloperError} time must be in the range <code>[t<sub>0</sub>, t<sub>n</sub>]</code>, where <code>t<sub>0</sub></code>\n *                             is the first element in the array <code>times</code> and <code>t<sub>n</sub></code> is the last element\n *                             in the array <code>times</code>.\n */\nSteppedSpline.prototype.evaluate = function (time, result) {\n  const points = this.points;\n\n  this._lastTimeIndex = this.findTimeInterval(time, this._lastTimeIndex);\n  const i = this._lastTimeIndex;\n\n  const PointType = this._pointType;\n  if (PointType === Number) {\n    return points[i];\n  }\n\n  if (!defined(result)) {\n    result = new PointType();\n  }\n\n  return PointType.clone(points[i], result);\n};\n\nexport default SteppedSpline;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Ray from \"./Ray.js\";\n\n/**\n * Represents a point in stereographic coordinates, which can be obtained by projecting a cartesian coordinate from one pole onto a tangent plane at the other pole.\n * The stereographic projection faithfully represents the relative directions of all great circles passing through its center point.\n * To faithfully represents angles everywhere, this is a conformal projection, which means points are projected onto an arbrary sphere.\n * @param {Cartesian2} [position] The steroegraphic coordinates.\n * @param {EllipseGeometry} [tangentPlane] The tangent plane onto which the point was projected.\n */\nfunction Stereographic(position, tangentPlane) {\n  this.position = position;\n  if (!defined(this.position)) {\n    this.position = new Cartesian2();\n  }\n\n  this.tangentPlane = tangentPlane;\n  if (!defined(this.tangentPlane)) {\n    this.tangentPlane = Stereographic.NORTH_POLE_TANGENT_PLANE;\n  }\n}\n\nObject.defineProperties(Stereographic.prototype, {\n  /**\n   * Gets the ellipsoid.\n   * @memberof Stereographic.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: function () {\n      return this.tangentPlane.ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the x coordinate\n   * @memberof Stereographic.prototype\n   * @type {number}\n   */\n  x: {\n    get: function () {\n      return this.position.x;\n    },\n  },\n\n  /**\n   * Gets the y coordinate\n   * @memberof Stereographic.prototype\n   * @type {number}\n   */\n  y: {\n    get: function () {\n      return this.position.y;\n    },\n  },\n\n  /**\n   * Computes the conformal latitude, or the ellipsoidal latitude projected onto an arbitrary sphere.\n   * @memberof Stereographic.prototype\n   * @type {number}\n   */\n  conformalLatitude: {\n    get: function () {\n      const r = Cartesian2.magnitude(this.position);\n      const d = 2 * this.ellipsoid.maximumRadius;\n      const sign = this.tangentPlane.plane.normal.z;\n      return sign * (CesiumMath.PI_OVER_TWO - 2 * Math.atan2(r, d));\n    },\n  },\n\n  /**\n   * Computes the longitude\n   * @memberof Stereographic.prototype\n   * @type {number}\n   */\n  longitude: {\n    get: function () {\n      let longitude = CesiumMath.PI_OVER_TWO + Math.atan2(this.y, this.x);\n      if (longitude > Math.PI) {\n        longitude -= CesiumMath.TWO_PI;\n      }\n\n      return longitude;\n    },\n  },\n});\n\nconst scratchCartographic = new Cartographic();\nconst scratchCartesian = new Cartesian3();\n\n/**\n * Computes the latitude based on an ellipsoid.\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which to compute the longitude.\n * @returns {number} The latitude\n */\nStereographic.prototype.getLatitude = function (ellipsoid) {\n  if (!defined(ellipsoid)) {\n    ellipsoid = Ellipsoid.default;\n  }\n\n  scratchCartographic.latitude = this.conformalLatitude;\n  scratchCartographic.longitude = this.longitude;\n  scratchCartographic.height = 0.0;\n  const cartesian = this.ellipsoid.cartographicToCartesian(\n    scratchCartographic,\n    scratchCartesian,\n  );\n  ellipsoid.cartesianToCartographic(cartesian, scratchCartographic);\n  return scratchCartographic.latitude;\n};\n\nconst scratchProjectPointOntoPlaneRay = new Ray();\nconst scratchProjectPointOntoPlaneRayDirection = new Cartesian3();\nconst scratchProjectPointOntoPlaneCartesian3 = new Cartesian3();\n\n/**\n * Computes the projection of the provided 3D position onto the 2D polar plane, radially outward from the provided origin.\n *\n * @param {Cartesian3} cartesian The point to project.\n * @param {Stereographic} [result] The object onto which to store the result.\n * @returns {Sterographic} The modified result parameter or a new Sterographic instance if none was provided.\n */\nStereographic.fromCartesian = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesian\", cartesian);\n  //>>includeEnd('debug');\n\n  const sign = CesiumMath.signNotZero(cartesian.z);\n  let tangentPlane = Stereographic.NORTH_POLE_TANGENT_PLANE;\n  let origin = Stereographic.SOUTH_POLE;\n  if (sign < 0) {\n    tangentPlane = Stereographic.SOUTH_POLE_TANGENT_PLANE;\n    origin = Stereographic.NORTH_POLE;\n  }\n\n  const ray = scratchProjectPointOntoPlaneRay;\n  ray.origin = tangentPlane.ellipsoid.scaleToGeocentricSurface(\n    cartesian,\n    ray.origin,\n  );\n  ray.direction = Cartesian3.subtract(\n    ray.origin,\n    origin,\n    scratchProjectPointOntoPlaneRayDirection,\n  );\n  Cartesian3.normalize(ray.direction, ray.direction);\n\n  const intersectionPoint = IntersectionTests.rayPlane(\n    ray,\n    tangentPlane.plane,\n    scratchProjectPointOntoPlaneCartesian3,\n  );\n  const v = Cartesian3.subtract(intersectionPoint, origin, intersectionPoint);\n  const x = Cartesian3.dot(tangentPlane.xAxis, v);\n  const y = sign * Cartesian3.dot(tangentPlane.yAxis, v);\n\n  if (!defined(result)) {\n    return new Stereographic(new Cartesian2(x, y), tangentPlane);\n  }\n\n  result.position = new Cartesian2(x, y);\n  result.tangentPlane = tangentPlane;\n  return result;\n};\n\n/**\n * Computes the projection of the provided 3D positions onto the 2D polar plane, radially outward from the provided origin.\n *\n * @param {Cartesian3[]} cartesians The points to project.\n * @param {Stereographic[]} [result] The object onto which to store the result.\n * @returns {Sterographic[]} The modified result parameter or a new Sterographic instance if none was provided.\n */\nStereographic.fromCartesianArray = function (cartesians, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  //>>includeEnd('debug');\n\n  const length = cartesians.length;\n  if (!defined(result)) {\n    result = new Array(length);\n  } else {\n    result.length = length;\n  }\n  for (let i = 0; i < length; i++) {\n    result[i] = Stereographic.fromCartesian(cartesians[i], result[i]);\n  }\n  return result;\n};\n\n/**\n * Duplicates a Stereographic instance.\n *\n * @param {Stereographic} stereographic The Stereographic to duplicate.\n * @param {Stereographic} [result] The object onto which to store the result.\n * @returns {Stereographic} The modified result parameter or a new Stereographic instance if one was not provided. (Returns undefined if stereographic is undefined)\n */\nStereographic.clone = function (stereographic, result) {\n  if (!defined(stereographic)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new Stereographic(\n      stereographic.position,\n      stereographic.tangentPlane,\n    );\n  }\n\n  result.position = stereographic.position;\n  result.tangentPlane = stereographic.tangentPlane;\n\n  return result;\n};\n\n/**\n * An Ellipsoid instance initialized to radii of (0.5, 0.5, 0.5).\n *\n * @type {Stereographic}\n * @constant\n */\nStereographic.HALF_UNIT_SPHERE = Object.freeze(new Ellipsoid(0.5, 0.5, 0.5));\n\nStereographic.NORTH_POLE = Object.freeze(new Cartesian3(0.0, 0.0, 0.5));\nStereographic.SOUTH_POLE = Object.freeze(new Cartesian3(0.0, 0.0, -0.5));\n\nStereographic.NORTH_POLE_TANGENT_PLANE = Object.freeze(\n  new EllipsoidTangentPlane(\n    Stereographic.NORTH_POLE,\n    Stereographic.HALF_UNIT_SPHERE,\n  ),\n);\nStereographic.SOUTH_POLE_TANGENT_PLANE = Object.freeze(\n  new EllipsoidTangentPlane(\n    Stereographic.SOUTH_POLE,\n    Stereographic.HALF_UNIT_SPHERE,\n  ),\n);\n\nexport default Stereographic;\n","import Uri from \"urijs\";\nimport buildModuleUrl from \"./buildModuleUrl.js\";\nimport defined from \"./defined.js\";\nimport destroyObject from \"./destroyObject.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport FeatureDetection from \"./FeatureDetection.js\";\nimport isCrossOriginUrl from \"./isCrossOriginUrl.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\nfunction canTransferArrayBuffer() {\n  if (!defined(TaskProcessor._canTransferArrayBuffer)) {\n    const worker = createWorker(\"transferTypedArrayTest\");\n    worker.postMessage = worker.webkitPostMessage ?? worker.postMessage;\n\n    const value = 99;\n    const array = new Int8Array([value]);\n\n    try {\n      // postMessage might fail with a DataCloneError\n      // if transferring array buffers is not supported.\n      worker.postMessage(\n        {\n          array: array,\n        },\n        [array.buffer],\n      );\n    } catch (e) {\n      TaskProcessor._canTransferArrayBuffer = false;\n      return TaskProcessor._canTransferArrayBuffer;\n    }\n\n    TaskProcessor._canTransferArrayBuffer = new Promise((resolve) => {\n      worker.onmessage = function (event) {\n        const array = event.data.array;\n\n        // some versions of Firefox silently fail to transfer typed arrays.\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=841904\n        // Check to make sure the value round-trips successfully.\n        const result = defined(array) && array[0] === value;\n        resolve(result);\n\n        worker.terminate();\n\n        TaskProcessor._canTransferArrayBuffer = result;\n      };\n    });\n  }\n\n  return TaskProcessor._canTransferArrayBuffer;\n}\n\nconst taskCompletedEvent = new Event();\n\nfunction urlFromScript(script) {\n  let blob;\n  try {\n    blob = new Blob([script], {\n      type: \"application/javascript\",\n    });\n  } catch (e) {\n    const BlobBuilder =\n      window.BlobBuilder ||\n      window.WebKitBlobBuilder ||\n      window.MozBlobBuilder ||\n      window.MSBlobBuilder;\n    const blobBuilder = new BlobBuilder();\n    blobBuilder.append(script);\n    blob = blobBuilder.getBlob(\"application/javascript\");\n  }\n\n  const URL = window.URL || window.webkitURL;\n  return URL.createObjectURL(blob);\n}\n\nfunction createWorker(url) {\n  const uri = new Uri(url);\n  const isUri = uri.scheme().length !== 0 && uri.fragment().length === 0;\n  const moduleID = url.replace(/\\.js$/, \"\");\n\n  const options = {};\n  let workerPath;\n  let crossOriginUrl;\n\n  // If we are provided a fully resolved URL, check it is cross-origin\n  // Or if provided a module ID, check the full absolute URL instead.\n  if (isCrossOriginUrl(url)) {\n    crossOriginUrl = url;\n  } else if (!isUri) {\n    const moduleAbsoluteUrl = buildModuleUrl(\n      `${TaskProcessor._workerModulePrefix}/${moduleID}.js`,\n    );\n\n    if (isCrossOriginUrl(moduleAbsoluteUrl)) {\n      crossOriginUrl = moduleAbsoluteUrl;\n    }\n  }\n\n  if (crossOriginUrl) {\n    // To load cross-origin, create a shim worker from a blob URL\n    const script = `import \"${crossOriginUrl}\";`;\n    workerPath = urlFromScript(script);\n    options.type = \"module\";\n    return new Worker(workerPath, options);\n  }\n\n  /* global CESIUM_WORKERS */\n  if (!isUri && typeof CESIUM_WORKERS !== \"undefined\") {\n    // If the workers are embedded, create a shim worker from the embedded script data\n    const script = `\n      importScripts(\"${urlFromScript(CESIUM_WORKERS)}\");\n      CesiumWorkers[\"${moduleID}\"]();\n    `;\n    workerPath = urlFromScript(script);\n    return new Worker(workerPath, options);\n  }\n\n  workerPath = url;\n\n  if (!isUri) {\n    workerPath = buildModuleUrl(\n      `${TaskProcessor._workerModulePrefix + moduleID}.js`,\n    );\n  }\n\n  if (!FeatureDetection.supportsEsmWebWorkers()) {\n    throw new RuntimeError(\n      \"This browser is not supported. Please update your browser to continue.\",\n    );\n  }\n\n  options.type = \"module\";\n\n  return new Worker(workerPath, options);\n}\n\nasync function getWebAssemblyLoaderConfig(processor, wasmOptions) {\n  const config = {\n    modulePath: undefined,\n    wasmBinaryFile: undefined,\n    wasmBinary: undefined,\n  };\n\n  // Web assembly not supported, use fallback js module if provided\n  if (!FeatureDetection.supportsWebAssembly()) {\n    if (!defined(wasmOptions.fallbackModulePath)) {\n      throw new RuntimeError(\n        `This browser does not support Web Assembly, and no backup module was provided for ${processor._workerPath}`,\n      );\n    }\n\n    config.modulePath = buildModuleUrl(wasmOptions.fallbackModulePath);\n    return config;\n  }\n\n  config.wasmBinaryFile = buildModuleUrl(wasmOptions.wasmBinaryFile);\n\n  const arrayBuffer = await Resource.fetchArrayBuffer({\n    url: config.wasmBinaryFile,\n  });\n\n  config.wasmBinary = arrayBuffer;\n  return config;\n}\n\n/**\n * A wrapper around a web worker that allows scheduling tasks for a given worker,\n * returning results asynchronously via a promise.\n *\n * The Worker is not constructed until a task is scheduled.\n *\n * @alias TaskProcessor\n * @constructor\n *\n * @param {string} workerPath The Url to the worker. This can either be an absolute path or relative to the Cesium Workers folder.\n * @param {number} [maximumActiveTasks=Number.POSITIVE_INFINITY] The maximum number of active tasks.  Once exceeded,\n *                                        scheduleTask will not queue any more tasks, allowing\n *                                        work to be rescheduled in future frames.\n */\nfunction TaskProcessor(workerPath, maximumActiveTasks) {\n  this._workerPath = workerPath;\n  this._maximumActiveTasks = maximumActiveTasks ?? Number.POSITIVE_INFINITY;\n  this._activeTasks = 0;\n  this._nextID = 0;\n  this._webAssemblyPromise = undefined;\n}\n\nconst createOnmessageHandler = (worker, id, resolve, reject) => {\n  const listener = ({ data }) => {\n    if (data.id !== id) {\n      return;\n    }\n\n    if (defined(data.error)) {\n      let error = data.error;\n      if (error.name === \"RuntimeError\") {\n        error = new RuntimeError(data.error.message);\n        error.stack = data.error.stack;\n      } else if (error.name === \"DeveloperError\") {\n        error = new DeveloperError(data.error.message);\n        error.stack = data.error.stack;\n      } else if (error.name === \"Error\") {\n        error = new Error(data.error.message);\n        error.stack = data.error.stack;\n      }\n      taskCompletedEvent.raiseEvent(error);\n      reject(error);\n    } else {\n      taskCompletedEvent.raiseEvent();\n      resolve(data.result);\n    }\n\n    worker.removeEventListener(\"message\", listener);\n  };\n\n  return listener;\n};\n\nconst emptyTransferableObjectArray = [];\nasync function runTask(processor, parameters, transferableObjects) {\n  const canTransfer = await Promise.resolve(canTransferArrayBuffer());\n  if (!defined(transferableObjects)) {\n    transferableObjects = emptyTransferableObjectArray;\n  } else if (!canTransfer) {\n    transferableObjects.length = 0;\n  }\n\n  const id = processor._nextID++;\n  const promise = new Promise((resolve, reject) => {\n    processor._worker.addEventListener(\n      \"message\",\n      createOnmessageHandler(processor._worker, id, resolve, reject),\n    );\n  });\n\n  processor._worker.postMessage(\n    {\n      id: id,\n      baseUrl: buildModuleUrl.getCesiumBaseUrl().url,\n      parameters: parameters,\n      canTransferArrayBuffer: canTransfer,\n    },\n    transferableObjects,\n  );\n\n  return promise;\n}\n\nasync function scheduleTask(processor, parameters, transferableObjects) {\n  ++processor._activeTasks;\n\n  try {\n    const result = await runTask(processor, parameters, transferableObjects);\n    --processor._activeTasks;\n    return result;\n  } catch (error) {\n    --processor._activeTasks;\n    throw error;\n  }\n}\n\n/**\n * Schedule a task to be processed by the web worker asynchronously.  If there are currently more\n * tasks active than the maximum set by the constructor, will immediately return undefined.\n * Otherwise, returns a promise that will resolve to the result posted back by the worker when\n * finished.\n *\n * @param {object} parameters Any input data that will be posted to the worker.\n * @param {object[]} [transferableObjects] An array of objects contained in parameters that should be\n *                                      transferred to the worker instead of copied.\n * @returns {Promise<object>|undefined} Either a promise that will resolve to the result when available, or undefined\n *                    if there are too many active tasks,\n *\n * @example\n * const taskProcessor = new Cesium.TaskProcessor('myWorkerPath');\n * const promise = taskProcessor.scheduleTask({\n *     someParameter : true,\n *     another : 'hello'\n * });\n * if (!Cesium.defined(promise)) {\n *     // too many active tasks - try again later\n * } else {\n *     promise.then(function(result) {\n *         // use the result of the task\n *     });\n * }\n */\nTaskProcessor.prototype.scheduleTask = function (\n  parameters,\n  transferableObjects,\n) {\n  if (!defined(this._worker)) {\n    this._worker = createWorker(this._workerPath);\n  }\n\n  if (this._activeTasks >= this._maximumActiveTasks) {\n    return undefined;\n  }\n\n  return scheduleTask(this, parameters, transferableObjects);\n};\n\n/**\n * Posts a message to a web worker with configuration to initialize loading\n * and compiling a web assembly module asynchronously, as well as an optional\n * fallback JavaScript module to use if Web Assembly is not supported.\n *\n * @param {object} [webAssemblyOptions] An object with the following properties:\n * @param {string} [webAssemblyOptions.modulePath] The path of the web assembly JavaScript wrapper module.\n * @param {string} [webAssemblyOptions.wasmBinaryFile] The path of the web assembly binary file.\n * @param {string} [webAssemblyOptions.fallbackModulePath] The path of the fallback JavaScript module to use if web assembly is not supported.\n * @returns {Promise<*>} A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks.\n *\n * @exception {RuntimeError} This browser does not support Web Assembly, and no backup module was provided\n */\nTaskProcessor.prototype.initWebAssemblyModule = async function (\n  webAssemblyOptions,\n) {\n  if (defined(this._webAssemblyPromise)) {\n    return this._webAssemblyPromise;\n  }\n\n  const init = async () => {\n    const worker = (this._worker = createWorker(this._workerPath));\n    const wasmConfig = await getWebAssemblyLoaderConfig(\n      this,\n      webAssemblyOptions,\n    );\n    const canTransfer = await Promise.resolve(canTransferArrayBuffer());\n    let transferableObjects;\n    const binary = wasmConfig.wasmBinary;\n    if (defined(binary) && canTransfer) {\n      transferableObjects = [binary];\n    }\n\n    const promise = new Promise((resolve, reject) => {\n      worker.onmessage = function ({ data }) {\n        if (defined(data)) {\n          resolve(data.result);\n        } else {\n          reject(new RuntimeError(\"Could not configure wasm module\"));\n        }\n      };\n    });\n\n    worker.postMessage(\n      {\n        canTransferArrayBuffer: canTransfer,\n        parameters: { webAssemblyConfig: wasmConfig },\n      },\n      transferableObjects,\n    );\n\n    return promise;\n  };\n\n  this._webAssemblyPromise = init();\n  return this._webAssemblyPromise;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see TaskProcessor#destroy\n */\nTaskProcessor.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys this object.  This will immediately terminate the Worker.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n */\nTaskProcessor.prototype.destroy = function () {\n  if (defined(this._worker)) {\n    this._worker.terminate();\n  }\n  return destroyObject(this);\n};\n\n/**\n * An event that's raised when a task is completed successfully.  Event handlers are passed\n * the error object is a task fails.\n *\n * @type {Event}\n *\n * @private\n */\nTaskProcessor.taskCompletedEvent = taskCompletedEvent;\n\n// exposed for testing purposes\nTaskProcessor._defaultWorkerModulePrefix = \"Workers/\";\nTaskProcessor._workerModulePrefix = TaskProcessor._defaultWorkerModulePrefix;\nTaskProcessor._canTransferArrayBuffer = undefined;\nexport default TaskProcessor;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Terrain data for a single tile.  This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias TerrainData\n * @constructor\n *\n * @see HeightmapTerrainData\n * @see QuantizedMeshTerrainData\n * @see GoogleEarthEnterpriseTerrainData\n * @see Cesium3DTilesTerrainData\n */\nfunction TerrainData() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(TerrainData.prototype, {\n  /**\n   * An array of credits for this tile.\n   * @memberof TerrainData.prototype\n   * @type {Credit[]}\n   */\n  credits: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * The water mask included in this terrain data, if any.  A water mask is a rectangular\n   * Uint8Array or image where a value of 255 indicates water and a value of 0 indicates land.\n   * Values in between 0 and 255 are allowed as well to smoothly blend between land and water.\n   * @memberof TerrainData.prototype\n   * @type {Uint8Array|HTMLImageElement|HTMLCanvasElement|ImageBitmap|undefined}\n   */\n  waterMask: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Computes the terrain height at a specified longitude and latitude.\n * @function\n *\n * @param {Rectangle} rectangle The rectangle covered by this terrain data.\n * @param {number} longitude The longitude in radians.\n * @param {number} latitude The latitude in radians.\n * @returns {number} The terrain height at the specified position.  If the position\n *          is outside the rectangle, this method will extrapolate the height, which is likely to be wildly\n *          incorrect for positions far outside the rectangle.\n */\nTerrainData.prototype.interpolateHeight =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Determines if a given child tile is available, based on the\n * {@link TerrainData#childTileMask}.  The given child tile coordinates are assumed\n * to be one of the four children of this tile.  If non-child tile coordinates are\n * given, the availability of the southeast child tile is returned.\n * @function\n *\n * @param {number} thisX The tile X coordinate of this (the parent) tile.\n * @param {number} thisY The tile Y coordinate of this (the parent) tile.\n * @param {number} childX The tile X coordinate of the child tile to check for availability.\n * @param {number} childY The tile Y coordinate of the child tile to check for availability.\n * @returns {boolean} True if the child tile is available; otherwise, false.\n */\nTerrainData.prototype.isChildAvailable = DeveloperError.throwInstantiationError;\n\n/**\n * Creates a {@link TerrainMesh} from this terrain data.\n * @function\n *\n * @private\n *\n * @param {object} options Object with the following properties:\n * @param {TilingScheme} options.tilingScheme The tiling scheme to which this tile belongs.\n * @param {number} options.x The X coordinate of the tile for which to create the terrain data.\n * @param {number} options.y The Y coordinate of the tile for which to create the terrain data.\n * @param {number} options.level The level of the tile for which to create the terrain data.\n * @param {number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\n * @param {number} [options.exaggerationRelativeHeight=0.0] The height relative to which terrain is exaggerated.\n * @param {boolean} [options.throttle=true] If true, indicates that this operation will need to be retried if too many asynchronous mesh creations are already in progress.\n * @returns {Promise<TerrainMesh>|undefined} A promise for the terrain mesh, or undefined if too many\n *          asynchronous mesh creations are already in progress and the operation should\n *          be retried later.\n */\nTerrainData.prototype.createMesh = DeveloperError.throwInstantiationError;\n\n/**\n * Upsamples this terrain data for use by a descendant tile.\n * @function\n *\n * @param {TilingScheme} tilingScheme The tiling scheme of this terrain data.\n * @param {number} thisX The X coordinate of this tile in the tiling scheme.\n * @param {number} thisY The Y coordinate of this tile in the tiling scheme.\n * @param {number} thisLevel The level of this tile in the tiling scheme.\n * @param {number} descendantX The X coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantY The Y coordinate within the tiling scheme of the descendant tile for which we are upsampling.\n * @param {number} descendantLevel The level within the tiling scheme of the descendant tile for which we are upsampling.\n * @returns {Promise<TerrainData>|undefined} A promise for upsampled terrain data for the descendant tile,\n *          or undefined if too many asynchronous upsample operations are in progress and the request has been\n *          deferred.\n */\nTerrainData.prototype.upsample = DeveloperError.throwInstantiationError;\n\n/**\n * Gets a value indicating whether or not this terrain data was created by upsampling lower resolution\n * terrain data.  If this value is false, the data was obtained from some other source, such\n * as by downloading it from a remote server.  This method should return true for instances\n * returned from a call to {@link TerrainData#upsample}.\n * @function\n *\n * @returns {boolean} True if this instance was created by upsampling; otherwise, false.\n */\nTerrainData.prototype.wasCreatedByUpsampling =\n  DeveloperError.throwInstantiationError;\n\n/**\n * The maximum number of asynchronous tasks used for terrain processing.\n *\n * @type {number}\n * @private\n */\nTerrainData.maximumAsynchronousTasks = 5;\n\nexport default TerrainData;\n","import AttributeCompression from \"./AttributeCompression.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport VerticalExaggeration from \"./VerticalExaggeration.js\";\nimport TerrainQuantization from \"./TerrainQuantization.js\";\n\nconst cartesian3Scratch = new Cartesian3();\nconst cartesian3DimScratch = new Cartesian3();\nconst cartesian2Scratch = new Cartesian2();\nconst matrix4Scratch = new Matrix4();\nconst matrix4Scratch2 = new Matrix4();\n\nconst SHIFT_LEFT_12 = Math.pow(2.0, 12.0);\n\n/**\n * Data used to quantize and pack the terrain mesh. The position can be unpacked for picking and all attributes\n * are unpacked in the vertex shader.\n *\n * @alias TerrainEncoding\n * @constructor\n *\n * @param {Cartesian3} center The center point of the vertices.\n * @param {AxisAlignedBoundingBox} [axisAlignedBoundingBox] The bounds of the tile in the east-north-up coordinates at the tiles center.\n * @param {number} [minimumHeight] The minimum height.\n * @param {number} [maximumHeight] The maximum height.\n * @param {Matrix4} [fromENU] The east-north-up to fixed frame matrix at the center of the terrain mesh.\n * @param {boolean} [hasVertexNormals=false] If the mesh has vertex normals.\n * @param {boolean} [hasWebMercatorT=false] true if the terrain data includes a Web Mercator texture coordinate; otherwise, false.\n * @param {boolean} [hasGeodeticSurfaceNormals=false] true if the terrain data includes geodetic surface normals; otherwise, false.\n * @param {number} [exaggeration=1.0] A scalar used to exaggerate terrain.\n * @param {number} [exaggerationRelativeHeight=0.0] The relative height from which terrain is exaggerated.\n *\n * @private\n */\nfunction TerrainEncoding(\n  center,\n  axisAlignedBoundingBox,\n  minimumHeight,\n  maximumHeight,\n  fromENU,\n  hasVertexNormals,\n  hasWebMercatorT,\n  hasGeodeticSurfaceNormals,\n  exaggeration,\n  exaggerationRelativeHeight,\n) {\n  let quantization = TerrainQuantization.NONE;\n  let toENU;\n  let matrix;\n\n  if (\n    defined(axisAlignedBoundingBox) &&\n    defined(minimumHeight) &&\n    defined(maximumHeight) &&\n    defined(fromENU)\n  ) {\n    const minimum = axisAlignedBoundingBox.minimum;\n    const maximum = axisAlignedBoundingBox.maximum;\n\n    const dimensions = Cartesian3.subtract(\n      maximum,\n      minimum,\n      cartesian3DimScratch,\n    );\n    const hDim = maximumHeight - minimumHeight;\n    const maxDim = Math.max(Cartesian3.maximumComponent(dimensions), hDim);\n\n    if (maxDim < SHIFT_LEFT_12 - 1.0) {\n      quantization = TerrainQuantization.BITS12;\n    } else {\n      quantization = TerrainQuantization.NONE;\n    }\n\n    // Scale and bias from [0,1] to [ENU min, ENU max]\n    // Also compute the inverse of the scale and bias\n    let st = Matrix4.fromScale(dimensions, matrix4Scratch);\n    st = Matrix4.setTranslation(st, minimum, st);\n\n    let invSt = Matrix4.fromScale(\n      Cartesian3.fromElements(\n        1.0 / dimensions.x,\n        1.0 / dimensions.y,\n        1.0 / dimensions.z,\n        cartesian3Scratch,\n      ),\n      matrix4Scratch2,\n    );\n    invSt = Matrix4.multiplyByTranslation(\n      invSt,\n      Cartesian3.negate(minimum, cartesian3Scratch),\n      invSt,\n    );\n\n    matrix = Matrix4.clone(fromENU, new Matrix4());\n    let rtcOffset = Matrix4.getTranslation(fromENU, cartesian3Scratch);\n    rtcOffset = Cartesian3.subtract(rtcOffset, center, cartesian3Scratch);\n    matrix = Matrix4.setTranslation(matrix, rtcOffset, matrix);\n    matrix = Matrix4.multiply(matrix, st, matrix);\n\n    toENU = Matrix4.inverseTransformation(fromENU, new Matrix4());\n    toENU = Matrix4.multiply(invSt, toENU, toENU);\n\n    fromENU = Matrix4.multiply(fromENU, st, new Matrix4());\n  }\n\n  /**\n   * How the vertices of the mesh were compressed.\n   * @type {TerrainQuantization}\n   */\n  this.quantization = quantization;\n\n  /**\n   * The minimum height of the tile including the skirts.\n   * @type {number|undefined}\n   */\n  this.minimumHeight = minimumHeight;\n\n  /**\n   * The maximum height of the tile.\n   * @type {number|undefined}\n   */\n  this.maximumHeight = maximumHeight;\n\n  /**\n   * The center of the tile.\n   * @type {Cartesian3}\n   */\n  this.center = Cartesian3.clone(center);\n\n  /**\n   * A matrix that takes a vertex from the tile, transforms it to east-north-up at the center and scales\n   * it so each component is in the [0, 1] range.\n   * @type {Matrix4|undefined}\n   */\n  this.toScaledENU = toENU;\n\n  /**\n   * A matrix that restores a vertex transformed with toScaledENU back to the earth fixed reference frame\n   * @type {Matrix4|undefined}\n   */\n  this.fromScaledENU = fromENU;\n\n  /**\n   * The matrix used to decompress the terrain vertices in the shader for RTE rendering.\n   * @type {Matrix4|undefined}\n   */\n  this.matrix = matrix;\n\n  /**\n   * The terrain mesh contains normals.\n   * @type {boolean}\n   */\n  this.hasVertexNormals = hasVertexNormals ?? false;\n\n  /**\n   * The terrain mesh contains a vertical texture coordinate following the Web Mercator projection.\n   * @type {boolean}\n   */\n  this.hasWebMercatorT = hasWebMercatorT ?? false;\n\n  /**\n   * The terrain mesh contains geodetic surface normals, used for terrain exaggeration.\n   * @type {boolean}\n   */\n  this.hasGeodeticSurfaceNormals = hasGeodeticSurfaceNormals ?? false;\n\n  /**\n   * A scalar used to exaggerate terrain.\n   * @type {number}\n   */\n  this.exaggeration = exaggeration ?? 1.0;\n\n  /**\n   * The relative height from which terrain is exaggerated.\n   */\n  this.exaggerationRelativeHeight = exaggerationRelativeHeight ?? 0.0;\n\n  /**\n   * The number of components in each vertex. This value can differ with different quantizations.\n   * @type {number}\n   */\n  this.stride = 0;\n\n  this._offsetGeodeticSurfaceNormal = 0;\n  this._offsetVertexNormal = 0;\n\n  // Calculate the stride and offsets declared above\n  this._calculateStrideAndOffsets();\n}\n\n/**\n * Encode information about the terrain at a given position into the vertex buffer.\n * Position, texture coordinates, height, and (optionally) normal, projection information,\n * and geodetic surface normal are all packed into the same buffer.\n *\n * @param {Float32Array} vertexBuffer The buffer to write to.\n * @param {number} bufferIndex The index into the buffer to start writing at.\n * @param {Cartesian3} position The position of the vertex.\n * @param {Cartesian2} uv The texture coordinates of the vertex.\n * @param {number} height The height of the vertex.\n * @param {Cartesian2} [normalToPack] The normal vector of the vertex.\n * @param {number} [webMercatorT] The Web Mercator texture coordinate of the vertex.\n * @param {Cartesian3} [geodeticSurfaceNormal] The geodetic surface normal of the vertex.\n */\nTerrainEncoding.prototype.encode = function (\n  vertexBuffer,\n  bufferIndex,\n  position,\n  uv,\n  height,\n  normalToPack,\n  webMercatorT,\n  geodeticSurfaceNormal,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"vertexBuffer\", vertexBuffer);\n  Check.typeOf.number(\"bufferIndex\", bufferIndex);\n  Check.typeOf.object(\"position\", position);\n  Check.typeOf.object(\"uv\", uv);\n  Check.typeOf.number(\"height\", height);\n  //>>includeEnd('debug');\n\n  const u = uv.x;\n  const v = uv.y;\n\n  if (this.quantization === TerrainQuantization.BITS12) {\n    position = Matrix4.multiplyByPoint(\n      this.toScaledENU,\n      position,\n      cartesian3Scratch,\n    );\n\n    position.x = CesiumMath.clamp(position.x, 0.0, 1.0);\n    position.y = CesiumMath.clamp(position.y, 0.0, 1.0);\n    position.z = CesiumMath.clamp(position.z, 0.0, 1.0);\n\n    const hDim = this.maximumHeight - this.minimumHeight;\n    const h = CesiumMath.clamp((height - this.minimumHeight) / hDim, 0.0, 1.0);\n\n    Cartesian2.fromElements(position.x, position.y, cartesian2Scratch);\n    const compressed0 =\n      AttributeCompression.compressTextureCoordinates(cartesian2Scratch);\n\n    Cartesian2.fromElements(position.z, h, cartesian2Scratch);\n    const compressed1 =\n      AttributeCompression.compressTextureCoordinates(cartesian2Scratch);\n\n    Cartesian2.fromElements(u, v, cartesian2Scratch);\n    const compressed2 =\n      AttributeCompression.compressTextureCoordinates(cartesian2Scratch);\n\n    vertexBuffer[bufferIndex++] = compressed0;\n    vertexBuffer[bufferIndex++] = compressed1;\n    vertexBuffer[bufferIndex++] = compressed2;\n\n    if (this.hasWebMercatorT) {\n      Cartesian2.fromElements(webMercatorT, 0.0, cartesian2Scratch);\n      const compressed3 =\n        AttributeCompression.compressTextureCoordinates(cartesian2Scratch);\n      vertexBuffer[bufferIndex++] = compressed3;\n    }\n  } else {\n    vertexBuffer[bufferIndex++] = position.x - this.center.x;\n    vertexBuffer[bufferIndex++] = position.y - this.center.y;\n    vertexBuffer[bufferIndex++] = position.z - this.center.z;\n    vertexBuffer[bufferIndex++] = height;\n    vertexBuffer[bufferIndex++] = u;\n    vertexBuffer[bufferIndex++] = v;\n\n    if (this.hasWebMercatorT) {\n      vertexBuffer[bufferIndex++] = webMercatorT;\n    }\n  }\n\n  if (this.hasVertexNormals) {\n    vertexBuffer[bufferIndex++] =\n      AttributeCompression.octPackFloat(normalToPack);\n  }\n\n  if (this.hasGeodeticSurfaceNormals) {\n    vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.x;\n    vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.y;\n    vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.z;\n  }\n\n  return bufferIndex;\n};\n\nconst scratchPosition = new Cartesian3();\nconst scratchGeodeticSurfaceNormal = new Cartesian3();\n\n/**\n * Add geodetic surface normals to a terrain vertex buffer.\n * The new buffer will be larger than the old buffer.\n *\n * @param {Float32Array} oldBuffer The buffer without geodetic surface normals.\n * @param {Float32Array} newBuffer The buffer with geodetic surface normals.\n * @param {Ellipsoid} ellipsoid The ellipsoid to use to compute the geodetic surface normals.\n */\nTerrainEncoding.prototype.addGeodeticSurfaceNormals = function (\n  oldBuffer,\n  newBuffer,\n  ellipsoid,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"oldBuffer\", oldBuffer);\n  Check.typeOf.object(\"newBuffer\", newBuffer);\n  Check.typeOf.object(\"ellipsoid\", ellipsoid);\n  //>>includeEnd('debug');\n\n  if (this.hasGeodeticSurfaceNormals) {\n    return;\n  }\n\n  const oldStride = this.stride;\n  const vertexCount = oldBuffer.length / oldStride;\n  this.hasGeodeticSurfaceNormals = true;\n  this._calculateStrideAndOffsets();\n  const newStride = this.stride;\n\n  for (let index = 0; index < vertexCount; index++) {\n    for (let offset = 0; offset < oldStride; offset++) {\n      const oldIndex = index * oldStride + offset;\n      const newIndex = index * newStride + offset;\n      newBuffer[newIndex] = oldBuffer[oldIndex];\n    }\n    const position = this.decodePosition(newBuffer, index, scratchPosition);\n    const geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n      position,\n      scratchGeodeticSurfaceNormal,\n    );\n\n    const bufferIndex = index * newStride + this._offsetGeodeticSurfaceNormal;\n    newBuffer[bufferIndex] = geodeticSurfaceNormal.x;\n    newBuffer[bufferIndex + 1] = geodeticSurfaceNormal.y;\n    newBuffer[bufferIndex + 2] = geodeticSurfaceNormal.z;\n  }\n};\n\n/**\n * Remove geodetic surface normals from a terrain vertex buffer.\n *\n * @param {Float32Array} oldBuffer The buffer with geodetic surface normals.\n * @param {Float32Array} newBuffer The buffer without geodetic surface normals.\n */\nTerrainEncoding.prototype.removeGeodeticSurfaceNormals = function (\n  oldBuffer,\n  newBuffer,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"oldBuffer\", oldBuffer);\n  Check.typeOf.object(\"newBuffer\", newBuffer);\n  //>>includeEnd('debug');\n\n  if (!this.hasGeodeticSurfaceNormals) {\n    return;\n  }\n\n  const oldStride = this.stride;\n  const vertexCount = oldBuffer.length / oldStride;\n  this.hasGeodeticSurfaceNormals = false;\n  this._calculateStrideAndOffsets();\n  const newStride = this.stride;\n\n  for (let index = 0; index < vertexCount; index++) {\n    for (let offset = 0; offset < newStride; offset++) {\n      const oldIndex = index * oldStride + offset;\n      const newIndex = index * newStride + offset;\n      newBuffer[newIndex] = oldBuffer[oldIndex];\n    }\n  }\n};\n\n/**\n * Decode a position from the vertex buffer.\n *\n * @param {Float32Array} buffer The buffer to decode from.\n * @param {number} index The index of the vertex to decode.\n * @param {Cartesian3} [result] The object to store the result in.\n * @returns {Cartesian3} The decoded position.\n */\nTerrainEncoding.prototype.decodePosition = function (buffer, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  index *= this.stride;\n\n  if (this.quantization === TerrainQuantization.BITS12) {\n    const xy = AttributeCompression.decompressTextureCoordinates(\n      buffer[index],\n      cartesian2Scratch,\n    );\n    result.x = xy.x;\n    result.y = xy.y;\n\n    const zh = AttributeCompression.decompressTextureCoordinates(\n      buffer[index + 1],\n      cartesian2Scratch,\n    );\n    result.z = zh.x;\n\n    return Matrix4.multiplyByPoint(this.fromScaledENU, result, result);\n  }\n\n  result.x = buffer[index];\n  result.y = buffer[index + 1];\n  result.z = buffer[index + 2];\n  return Cartesian3.add(result, this.center, result);\n};\n\n/**\n * Decode a position from the vertex buffer and apply vertical exaggeration.\n *\n * @param {Float32Array} buffer\n * @param {number} index\n * @param {Cartesian3} [result]\n * @returns {Cartesian3} The exaggerated position.\n */\nTerrainEncoding.prototype.getExaggeratedPosition = function (\n  buffer,\n  index,\n  result,\n) {\n  result = this.decodePosition(buffer, index, result);\n\n  const exaggeration = this.exaggeration;\n  const exaggerationRelativeHeight = this.exaggerationRelativeHeight;\n  const hasExaggeration = exaggeration !== 1.0;\n  if (hasExaggeration && this.hasGeodeticSurfaceNormals) {\n    const geodeticSurfaceNormal = this.decodeGeodeticSurfaceNormal(\n      buffer,\n      index,\n      scratchGeodeticSurfaceNormal,\n    );\n    const rawHeight = this.decodeHeight(buffer, index);\n    const heightDifference =\n      VerticalExaggeration.getHeight(\n        rawHeight,\n        exaggeration,\n        exaggerationRelativeHeight,\n      ) - rawHeight;\n\n    // some math is unrolled for better performance\n    result.x += geodeticSurfaceNormal.x * heightDifference;\n    result.y += geodeticSurfaceNormal.y * heightDifference;\n    result.z += geodeticSurfaceNormal.z * heightDifference;\n  }\n\n  return result;\n};\n\n/**\n * Decode texture coordinates from the vertex buffer.\n *\n * @param {Float32Array} buffer The buffer to decode from.\n * @param {number} index The index of the vertex to decode.\n * @param {Cartesian2} [result] The object to store the result in.\n * @returns {Cartesian2} The decoded texture coordinates.\n */\nTerrainEncoding.prototype.decodeTextureCoordinates = function (\n  buffer,\n  index,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian2();\n  }\n\n  index *= this.stride;\n\n  if (this.quantization === TerrainQuantization.BITS12) {\n    return AttributeCompression.decompressTextureCoordinates(\n      buffer[index + 2],\n      result,\n    );\n  }\n\n  return Cartesian2.fromElements(buffer[index + 4], buffer[index + 5], result);\n};\n\n/**\n * Decode a height from the vertex buffer.\n *\n * @param {Float32Array} buffer The buffer to decode from.\n * @param {number} index The index of the vertex to decode.\n * @returns {number} The decoded height.\n */\nTerrainEncoding.prototype.decodeHeight = function (buffer, index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  index *= this.stride;\n\n  if (this.quantization === TerrainQuantization.BITS12) {\n    const zh = AttributeCompression.decompressTextureCoordinates(\n      buffer[index + 1],\n      cartesian2Scratch,\n    );\n    return (\n      zh.y * (this.maximumHeight - this.minimumHeight) + this.minimumHeight\n    );\n  }\n\n  return buffer[index + 3];\n};\n\n/**\n * Decode a web mercator T coordinate from the vertex buffer.\n *\n * @param {Float32Array} buffer The buffer to decode from.\n * @param {number} index The index of the vertex to decode.\n * @returns {number} The decoded web mercator T coordinate.\n */\nTerrainEncoding.prototype.decodeWebMercatorT = function (buffer, index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  index *= this.stride;\n\n  if (this.quantization === TerrainQuantization.BITS12) {\n    return AttributeCompression.decompressTextureCoordinates(\n      buffer[index + 3],\n      cartesian2Scratch,\n    ).x;\n  }\n\n  return buffer[index + 6];\n};\n\n/**\n * Decode an oct-encoded normal from the vertex buffer.\n *\n * @param {Float32Array} buffer The buffer to decode from.\n * @param {number} index The index of the vertex to decode.\n * @param {Cartesian2} [result] The object to store the result in.\n * @returns {Cartesian2} The decoded oct-encoded normal.\n */\nTerrainEncoding.prototype.getOctEncodedNormal = function (\n  buffer,\n  index,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  index = index * this.stride + this._offsetVertexNormal;\n\n  const temp = buffer[index] / 256.0;\n  const x = Math.floor(temp);\n  const y = (temp - x) * 256.0;\n\n  return Cartesian2.fromElements(x, y, result);\n};\n\n/**\n * @param {Float32Array} buffer\n * @param {number} index\n * @param {Cartesian3} result\n * @returns {Cartesian3}\n */\nTerrainEncoding.prototype.decodeNormal = function (buffer, index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.number(\"index\", index);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const bufferIndex = (index = index * this.stride + this._offsetVertexNormal);\n  return AttributeCompression.octDecodeFloat(buffer[bufferIndex], result);\n};\n\n/**\n * Decode a geodetic surface normal from the vertex buffer.\n *\n * @param {Float32Array} buffer The buffer to decode from.\n * @param {number} index The index of the vertex to decode.\n * @param {Cartesian3} result The object to store the result in.\n * @returns {Cartesian3} The decoded geodetic surface normal.\n */\nTerrainEncoding.prototype.decodeGeodeticSurfaceNormal = function (\n  buffer,\n  index,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.number(\"index\", index);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  index = index * this.stride + this._offsetGeodeticSurfaceNormal;\n\n  result.x = buffer[index];\n  result.y = buffer[index + 1];\n  result.z = buffer[index + 2];\n  return result;\n};\n\n/**\n * Calculate the stride and offsets for sampling the vertex buffer.\n */\nTerrainEncoding.prototype._calculateStrideAndOffsets = function () {\n  let vertexStride = 0;\n\n  switch (this.quantization) {\n    case TerrainQuantization.BITS12:\n      vertexStride += 3;\n      break;\n    default:\n      vertexStride += 6;\n  }\n  if (this.hasWebMercatorT) {\n    vertexStride += 1;\n  }\n  if (this.hasVertexNormals) {\n    this._offsetVertexNormal = vertexStride;\n    vertexStride += 1;\n  }\n  if (this.hasGeodeticSurfaceNormals) {\n    this._offsetGeodeticSurfaceNormal = vertexStride;\n    vertexStride += 3;\n  }\n\n  this.stride = vertexStride;\n};\n\nconst attributesIndicesNone = {\n  position3DAndHeight: 0,\n  textureCoordAndEncodedNormals: 1,\n  geodeticSurfaceNormal: 2,\n};\nconst attributesIndicesBits12 = {\n  compressed0: 0,\n  compressed1: 1,\n  geodeticSurfaceNormal: 2,\n};\n\n/**\n * Get descriptors of the attributes stored in the vertex buffer.\n *\n * @param {Float32Array} buffer The vertex buffer.\n * @returns {object[]} The attributes.\n */\nTerrainEncoding.prototype.getAttributes = function (buffer) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  //>>includeEnd('debug');\n\n  const datatype = ComponentDatatype.FLOAT;\n  const sizeInBytes = ComponentDatatype.getSizeInBytes(datatype);\n  const strideInBytes = this.stride * sizeInBytes;\n  let offsetInBytes = 0;\n\n  const attributes = [];\n  function addAttribute(index, componentsPerAttribute) {\n    attributes.push({\n      index: index,\n      vertexBuffer: buffer,\n      componentDatatype: datatype,\n      componentsPerAttribute: componentsPerAttribute,\n      offsetInBytes: offsetInBytes,\n      strideInBytes: strideInBytes,\n    });\n    offsetInBytes += componentsPerAttribute * sizeInBytes;\n  }\n\n  if (this.quantization === TerrainQuantization.NONE) {\n    addAttribute(attributesIndicesNone.position3DAndHeight, 4);\n\n    let componentsTexCoordAndNormals = 2;\n    componentsTexCoordAndNormals += this.hasWebMercatorT ? 1 : 0;\n    componentsTexCoordAndNormals += this.hasVertexNormals ? 1 : 0;\n    addAttribute(\n      attributesIndicesNone.textureCoordAndEncodedNormals,\n      componentsTexCoordAndNormals,\n    );\n\n    if (this.hasGeodeticSurfaceNormals) {\n      addAttribute(attributesIndicesNone.geodeticSurfaceNormal, 3);\n    }\n  } else {\n    // When there is no webMercatorT or vertex normals, the attribute only needs 3 components: x/y, z/h, u/v.\n    // WebMercatorT and vertex normals each take up one component, so if only one of them is present the first\n    // attribute gets a 4th component. If both are present, we need an additional attribute that has 1 component.\n    const usingAttribute0Component4 =\n      this.hasWebMercatorT || this.hasVertexNormals;\n    const usingAttribute1Component1 =\n      this.hasWebMercatorT && this.hasVertexNormals;\n    addAttribute(\n      attributesIndicesBits12.compressed0,\n      usingAttribute0Component4 ? 4 : 3,\n    );\n\n    if (usingAttribute1Component1) {\n      addAttribute(attributesIndicesBits12.compressed1, 1);\n    }\n\n    if (this.hasGeodeticSurfaceNormals) {\n      addAttribute(attributesIndicesBits12.geodeticSurfaceNormal, 3);\n    }\n  }\n\n  return attributes;\n};\n\n/**\n * Get indices pointing to the attribute locations in the vertex buffer.\n *\n * @returns {object} The attribute indices.\n */\nTerrainEncoding.prototype.getAttributeLocations = function () {\n  if (this.quantization === TerrainQuantization.NONE) {\n    return attributesIndicesNone;\n  }\n  return attributesIndicesBits12;\n};\n\n/**\n * Clones a TerrainEncoding object.\n *\n * @param {TerrainEncoding} [encoding] The encoding to clone.\n * @param {TerrainEncoding} [result] The object to store the cloned encoding.\n * @returns {TerrainEncoding|undefined} The cloned encoding.\n */\nTerrainEncoding.clone = function (encoding, result) {\n  if (!defined(encoding)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    result = new TerrainEncoding();\n  }\n\n  result.quantization = encoding.quantization;\n  result.minimumHeight = encoding.minimumHeight;\n  result.maximumHeight = encoding.maximumHeight;\n  result.center = Cartesian3.clone(encoding.center);\n  result.toScaledENU = Matrix4.clone(encoding.toScaledENU);\n  result.fromScaledENU = Matrix4.clone(encoding.fromScaledENU);\n  result.matrix = Matrix4.clone(encoding.matrix);\n  result.hasVertexNormals = encoding.hasVertexNormals;\n  result.hasWebMercatorT = encoding.hasWebMercatorT;\n  result.hasGeodeticSurfaceNormals = encoding.hasGeodeticSurfaceNormals;\n  result.exaggeration = encoding.exaggeration;\n  result.exaggerationRelativeHeight = encoding.exaggerationRelativeHeight;\n\n  result._calculateStrideAndOffsets();\n\n  return result;\n};\nexport default TerrainEncoding;\n","import SceneMode from \"../Scene/SceneMode.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\nimport TerrainPicker from \"./TerrainPicker.js\";\nimport Transforms from \"./Transforms.js\";\nimport VerticalExaggeration from \"./VerticalExaggeration.js\";\n\n/**\n * A mesh plus related metadata for a single tile of terrain.  Instances of this type are\n * usually created from raw {@link TerrainData}.\n *\n * @alias TerrainMesh\n * @constructor\n *\n * @param {Cartesian3} center The center of the tile.  Vertex positions are specified relative to this center.\n * @param {Float32Array} vertices The vertex data, including positions, texture coordinates, and heights.\n *                       The vertex data is in the order [X, Y, Z, H, U, V], where X, Y, and Z represent\n *                       the Cartesian position of the vertex, H is the height above the ellipsoid, and\n *                       U and V are the texture coordinates.\n * @param {Uint8Array|Uint16Array|Uint32Array} indices The indices describing how the vertices are connected to form triangles.\n * @param {number} indexCountWithoutSkirts The index count of the mesh not including skirts.\n * @param {number} vertexCountWithoutSkirts The vertex count of the mesh not including skirts.\n * @param {number} minimumHeight The lowest height in the tile, in meters above the ellipsoid.\n * @param {number} maximumHeight The highest height in the tile, in meters above the ellipsoid.\n * @param {Rectangle} rectangle The rectangle, in radians, covered by this tile.\n * @param {BoundingSphere} boundingSphere3D A bounding sphere that completely contains the tile.\n * @param {Cartesian3} occludeePointInScaledSpace The occludee point of the tile, represented in ellipsoid-\n *                     scaled space, and used for horizon culling.  If this point is below the horizon,\n *                     the tile is considered to be entirely below the horizon.\n * @param {number} [vertexStride=6] The number of components in each vertex.\n * @param {OrientedBoundingBox} [orientedBoundingBox] A bounding box that completely contains the tile.\n * @param {TerrainEncoding} encoding Information used to decode the mesh.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} westIndicesSouthToNorth The indices of the vertices on the Western edge of the tile, ordered from South to North (clockwise).\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} southIndicesEastToWest The indices of the vertices on the Southern edge of the tile, ordered from East to West (clockwise).\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} eastIndicesNorthToSouth The indices of the vertices on the Eastern edge of the tile, ordered from North to South (clockwise).\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} northIndicesWestToEast The indices of the vertices on the Northern edge of the tile, ordered from West to East (clockwise).\n *\n * @private\n */\nfunction TerrainMesh(\n  center,\n  vertices,\n  indices,\n  indexCountWithoutSkirts,\n  vertexCountWithoutSkirts,\n  minimumHeight,\n  maximumHeight,\n  rectangle,\n  boundingSphere3D,\n  occludeePointInScaledSpace,\n  vertexStride,\n  orientedBoundingBox,\n  encoding,\n  westIndicesSouthToNorth,\n  southIndicesEastToWest,\n  eastIndicesNorthToSouth,\n  northIndicesWestToEast,\n) {\n  /**\n   * The center of the tile.  Vertex positions are specified relative to this center.\n   * @type {Cartesian3}\n   */\n  this.center = center;\n\n  /**\n   * The vertex data, including positions, texture coordinates, and heights.\n   * The vertex data is in the order [X, Y, Z, H, U, V], where X, Y, and Z represent\n   * the Cartesian position of the vertex, H is the height above the ellipsoid, and\n   * U and V are the texture coordinates.  The vertex data may have additional attributes after those\n   * mentioned above when the {@link TerrainMesh#stride} is greater than 6.\n   * @type {Float32Array}\n   */\n  this.vertices = vertices;\n\n  /**\n   * The number of components in each vertex.  Typically this is 6 for the 6 components\n   * [X, Y, Z, H, U, V], but if each vertex has additional data (such as a vertex normal), this value\n   * may be higher.\n   * @type {number}\n   */\n  this.stride = vertexStride ?? 6;\n\n  /**\n   * The indices describing how the vertices are connected to form triangles.\n   * @type {Uint8Array|Uint16Array|Uint32Array}\n   */\n  this.indices = indices;\n\n  /**\n   * The index count of the mesh not including skirts.\n   * @type {number}\n   */\n  this.indexCountWithoutSkirts = indexCountWithoutSkirts;\n\n  /**\n   * The vertex count of the mesh not including skirts.\n   * @type {number}\n   */\n  this.vertexCountWithoutSkirts = vertexCountWithoutSkirts;\n\n  /**\n   * The lowest height in the tile, in meters above the ellipsoid.\n   * @type {number}\n   */\n  this.minimumHeight = minimumHeight;\n\n  /**\n   * The highest height in the tile, in meters above the ellipsoid.\n   * @type {number}\n   */\n  this.maximumHeight = maximumHeight;\n\n  /**\n   * The rectangle, in radians, covered by this tile.\n   * @type {Rectangle}\n   */\n  this.rectangle = rectangle;\n\n  /**\n   * A bounding sphere that completely contains the tile.\n   * @type {BoundingSphere}\n   */\n  this.boundingSphere3D = boundingSphere3D;\n\n  /**\n   * The occludee point of the tile, represented in ellipsoid-\n   * scaled space, and used for horizon culling.  If this point is below the horizon,\n   * the tile is considered to be entirely below the horizon.\n   * @type {Cartesian3}\n   */\n  this.occludeePointInScaledSpace = occludeePointInScaledSpace;\n\n  /**\n   * A bounding box that completely contains the tile.\n   * @type {OrientedBoundingBox}\n   */\n  this.orientedBoundingBox = orientedBoundingBox;\n\n  /**\n   * Information for decoding the mesh vertices.\n   * @type {TerrainEncoding}\n   */\n  this.encoding = encoding;\n\n  /**\n   * The indices of the vertices on the Western edge of the tile, ordered from South to North (clockwise).\n   * @type {number[]|Uint8Array|Uint16Array|Uint32Array}\n   */\n  this.westIndicesSouthToNorth = westIndicesSouthToNorth;\n\n  /**\n   * The indices of the vertices on the Southern edge of the tile, ordered from East to West (clockwise).\n   * @type {number[]|Uint8Array|Uint16Array|Uint32Array}\n   */\n  this.southIndicesEastToWest = southIndicesEastToWest;\n\n  /**\n   * The indices of the vertices on the Eastern edge of the tile, ordered from North to South (clockwise).\n   * @type {number[]|Uint8Array|Uint16Array|Uint32Array}\n   */\n  this.eastIndicesNorthToSouth = eastIndicesNorthToSouth;\n\n  /**\n   * The indices of the vertices on the Northern edge of the tile, ordered from West to East (clockwise).\n   * @type {number[]|Uint8Array|Uint16Array|Uint32Array}\n   */\n  this.northIndicesWestToEast = northIndicesWestToEast;\n\n  /**\n   * The transform from model to world coordinates based on the terrain mesh's oriented bounding box.\n   * In 3D mode, this is computed from the oriented bounding box.  In 2D and Columbus View modes,\n   * this is computed from the tile's rectangle's projected coordinates.\n   * @type {Matrix4}\n   */\n  this._transform = new Matrix4();\n\n  /**\n   * The scene mode used the last time a pick was performed on this terrain mesh.\n   * @type {SceneMode}\n   */\n  this._lastPickSceneMode = undefined;\n\n  /**\n   * The terrain picker for this mesh, used for ray intersection tests.\n   * @type {TerrainPicker}\n   */\n  this._terrainPicker = new TerrainPicker(vertices, indices, encoding);\n}\n\n/**\n * Get the terrain tile's model-to-world transform matrix for the given scene mode and projection.\n * @param {SceneMode} mode The scene mode (3D, 2D, or Columbus View).\n * @param {MapProjection} projection The map projection.\n * @returns {Matrix4} The transform matrix.\n * @private\n */\nTerrainMesh.prototype.getTransform = function (mode, projection) {\n  if (this._lastPickSceneMode === mode) {\n    return this._transform;\n  }\n  this._terrainPicker.needsRebuild = true;\n\n  if (!defined(mode) || mode === SceneMode.SCENE3D) {\n    return computeTransform(this, this._transform);\n  }\n\n  return computeTransform2D(this, projection, this._transform);\n};\n\nfunction computeTransform(mesh, result) {\n  const exaggeration = mesh.encoding.exaggeration;\n  const exaggerationRelativeHeight = mesh.encoding.exaggerationRelativeHeight;\n\n  const exaggeratedMinHeight = VerticalExaggeration.getHeight(\n    mesh.minimumHeight,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n\n  const exaggeratedMaxHeight = VerticalExaggeration.getHeight(\n    mesh.maximumHeight,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n\n  const obb = OrientedBoundingBox.fromRectangle(\n    mesh.rectangle,\n    exaggeratedMinHeight,\n    exaggeratedMaxHeight,\n    Ellipsoid.default,\n    mesh.orientedBoundingBox,\n  );\n\n  return OrientedBoundingBox.computeTransformation(obb, result);\n}\n\nconst scratchSWCartesian = new Cartesian3();\nconst scratchNECartesian = new Cartesian3();\nconst scratchSWCartographic = new Cartographic();\nconst scratchNECartographic = new Cartographic();\nconst scratchScale2D = new Cartesian3();\nconst scratchCenter2D = new Cartesian3();\n\n/**\n * Get the terrain tile's model-to-world transform matrix for 2D or Columbus View modes.\n * Assumes tiles in 2D are axis-aligned and still rectangular. (This is true for Web Mercator and Geographic projections.)\n * @param {TerrainMesh} mesh The terrain mesh.\n * @param {MapProjection} projection The map projection.\n * @param {Matrix4} result The object in which to store the result.\n * @returns {Matrix4} The transform matrix.\n * @private\n */\nfunction computeTransform2D(mesh, projection, result) {\n  const exaggeration = mesh.encoding.exaggeration;\n  const exaggerationRelativeHeight = mesh.encoding.exaggerationRelativeHeight;\n\n  const exaggeratedMinHeight = VerticalExaggeration.getHeight(\n    mesh.minimumHeight,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n\n  const exaggeratedMaxHeight = VerticalExaggeration.getHeight(\n    mesh.maximumHeight,\n    exaggeration,\n    exaggerationRelativeHeight,\n  );\n\n  const southwest = projection.project(\n    Cartographic.fromRadians(\n      mesh.rectangle.west,\n      mesh.rectangle.south,\n      0,\n      scratchSWCartographic,\n    ),\n    scratchSWCartesian,\n  );\n\n  const northeast = projection.project(\n    Cartographic.fromRadians(\n      mesh.rectangle.east,\n      mesh.rectangle.north,\n      0,\n      scratchNECartographic,\n    ),\n    scratchNECartesian,\n  );\n\n  const heightRange = exaggeratedMaxHeight - exaggeratedMinHeight;\n  const scale = Cartesian3.fromElements(\n    northeast.x - southwest.x,\n    northeast.y - southwest.y,\n    heightRange > 0 ? heightRange : 1.0, // Avoid zero scale\n    scratchScale2D,\n  );\n\n  const center = Cartesian3.fromElements(\n    southwest.x + scale.x * 0.5,\n    southwest.y + scale.y * 0.5,\n    exaggeratedMinHeight + scale.z * 0.5,\n    scratchCenter2D,\n  );\n\n  Matrix4.fromTranslation(center, result);\n  Matrix4.setScale(result, scale, result);\n  Matrix4.multiply(Transforms.SWIZZLE_3D_TO_2D_MATRIX, result, result);\n\n  return result;\n}\n\n/**\n * Gives the point on this terrain tile where the given ray intersects\n * @param {Ray} ray The ray to test for intersection.\n * @param {boolean} cullBackFaces Whether to consider back-facing triangles as intersections.\n * @param {SceneMode} mode The scene mode (3D, 2D, or Columbus View).\n * @param {MapProjection} projection The map projection.\n * @returns {Cartesian3} The point on the mesh where the ray intersects, or undefined if there is no intersection.\n * @private\n */\nTerrainMesh.prototype.pick = function (ray, cullBackFaces, mode, projection) {\n  const intersection = this._terrainPicker.rayIntersect(\n    ray,\n    this.getTransform(mode, projection),\n    cullBackFaces,\n    mode,\n    projection,\n  );\n\n  this._lastPickSceneMode = mode;\n  return intersection;\n};\n\n/**\n * Updates the terrain mesh to account for changes in vertical exaggeration.\n * @param {Number} exaggeration A scalar used to exaggerate terrain.\n * @param {Number} exaggerationRelativeHeight The relative height from which terrain is exaggerated.\n * @private\n */\nTerrainMesh.prototype.updateExaggeration = function (\n  exaggeration,\n  exaggerationRelativeHeight,\n) {\n  // The encoding stored on the TerrainMesh references the updated exaggeration values already. This is just used\n  // to trigger a rebuild on the terrain picker.\n  this._terrainPicker._vertices = this.vertices;\n  this._terrainPicker.needsRebuild = true;\n  this._lastPickSceneMode = undefined;\n};\n\n/**\n * Updates the terrain mesh to account for changes in scene mode.\n * @param {SceneMode} mode The scene mode (3D, 2D, or Columbus View).\n * @private\n */\nTerrainMesh.prototype.updateSceneMode = function (mode) {\n  this._terrainPicker.needsRebuild = true;\n  this._lastPickSceneMode = undefined;\n};\n\nexport default TerrainMesh;\n","import AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Ray from \"./Ray.js\";\nimport TaskProcessor from \"./TaskProcessor.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport Interval from \"./Interval.js\";\nimport Check from \"./Check.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\n// Terrain picker can be 4 levels deep (0-3)\nconst MAXIMUM_TERRAIN_PICKER_LEVEL = 3;\n\n/**\n * Creates an object that handles arbitrary ray intersections with a terrain mesh using a spatial acceleration structure.\n *\n * @alias TerrainPicker\n * @constructor\n *\n * @param {Float64Array} vertices The terrain mesh's vertex buffer.\n * @param {Uint8Array|Uint16Array|Uint32Array} indices The terrain mesh's index buffer.\n * @param {TerrainEncoding} encoding The terrain mesh's vertex encoding.\n *\n * @private\n */\nfunction TerrainPicker(vertices, indices, encoding) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"vertices\", vertices);\n  Check.defined(\"indices\", indices);\n  Check.defined(\"encoding\", encoding);\n  //>>includeEnd('debug');\n\n  /**\n   * The terrain mesh's vertex buffer.\n   * @type {Float64Array}\n   */\n  this._vertices = vertices;\n  /**\n   * The terrain mesh's index buffer.\n   * @type {Uint32Array}\n   */\n  this._indices = indices;\n  /**\n   * The terrain mesh's vertex encoding.\n   * @type {TerrainEncoding}\n   */\n  this._encoding = encoding;\n  /**\n   * The inverse of the terrain mesh tile's transform from world space to local space.\n   * @type {Matrix4}\n   */\n  this._inverseTransform = new Matrix4(); // Compute as-needed on rebuild\n  /**\n   * Whether or not to reset this terrain mesh's picker on the next ray intersection.\n   * @type {Boolean}\n   */\n  this._needsRebuild = true;\n  /**\n   * The root node of the terrain picker's quadtree.\n   * @type {TerrainPickerNode}\n   */\n  this._rootNode = new TerrainPickerNode();\n}\n\nconst incrementallyBuildTerrainPickerTaskProcessor = new TaskProcessor(\n  \"incrementallyBuildTerrainPicker\",\n);\n\nObject.defineProperties(TerrainPicker.prototype, {\n  /**\n   * Indicates whether the terrain picker needs to be rebuilt due to changes in the underlying terrain mesh's vertices or indices.\n   * @type {boolean}\n   */\n  needsRebuild: {\n    get: function () {\n      return this._needsRebuild;\n    },\n    set: function (value) {\n      this._needsRebuild = value;\n    },\n  },\n});\n\n/**\n * A node in the terrain picker quadtree.\n * @constructor\n * @private\n */\nfunction TerrainPickerNode() {\n  /**\n   * The tree-space x-coordinate of this node.\n   * @type {Number}\n   */\n  this.x = 0;\n  /**\n   * The tree-space y-coordinate of this node.\n   * @type {Number}\n   */\n  this.y = 0;\n  /**\n   * The level of this node in the quadtree.\n   * @type {Number}\n   */\n  this.level = 0;\n  /**\n   * The axis-aligned bounding box of this node (in the tree's local space).\n   * @type {AxisAlignedBoundingBox}\n   */\n  this.aabb = createAABBForNode(this.x, this.y, this.level);\n  /**\n   * The indices of the triangles that intersect this node.\n   * @type {Uint32Array}\n   */\n  this.intersectingTriangles = new Uint32Array(0);\n  /**\n   * The child terrain picker nodes of this node.\n   * @type {TerrainPickerNode[]}\n   */\n  this.children = [];\n  /**\n   * Whether or not this node is currently building its children on a worker.\n   * @type {Boolean}\n   */\n  this.buildingChildren = false;\n}\n\n/**\n * Adds a child node to this node.\n *\n * @param {number} childIdx The index of the child to add (0-3).\n * @memberof TerrainPickerNode\n */\nTerrainPickerNode.prototype.addChild = function (childIdx) {\n  //>>includeStart('debug', pragmas.debug);\n  if (childIdx < 0 || childIdx > 3) {\n    throw new DeveloperError(\n      \"TerrainPickerNode child index must be between 0 and 3, inclusive.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const childNode = new TerrainPickerNode();\n  // Use bitwise operations to get child x,y from child index and parent x,y\n  childNode.x = this.x * 2 + (childIdx & 1);\n  childNode.y = this.y * 2 + ((childIdx >> 1) & 1);\n  childNode.level = this.level + 1;\n  childNode.aabb = createAABBForNode(childNode.x, childNode.y, childNode.level);\n\n  this.children[childIdx] = childNode;\n};\n\nconst scratchTransformedRay = new Ray();\nconst scratchTrianglePoints = [\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n];\n\n/**\n * Determines the point on the mesh where the given ray intersects.\n * @param {Ray} ray The ray to test.\n * @param {Matrix4} tileTransform The terrain mesh tile's transform from local space to world space.\n * @param {Boolean} cullBackFaces Whether to consider back-facing triangles as intersections.\n * @param {SceneMode} mode The scene mode (2D/3D/Columbus View).\n * @param {MapProjection} projection The map projection.\n * @returns {Cartesian3 | undefined} result The intersection point, or undefined if there is no intersection.\n * @memberof TerrainPicker\n * @private\n */\nTerrainPicker.prototype.rayIntersect = function (\n  ray,\n  tileTransform,\n  cullBackFaces,\n  mode,\n  projection,\n) {\n  // Lazily (re)create the terrain picker\n  if (this._needsRebuild) {\n    reset(this, tileTransform);\n  }\n\n  const invTransform = this._inverseTransform;\n\n  const transformedRay = scratchTransformedRay;\n\n  transformedRay.origin = Matrix4.multiplyByPoint(\n    invTransform,\n    ray.origin,\n    transformedRay.origin,\n  );\n  transformedRay.direction = Matrix4.multiplyByPointAsVector(\n    invTransform,\n    ray.direction,\n    transformedRay.direction,\n  );\n\n  const intersections = [];\n  getNodesIntersectingRay(this._rootNode, transformedRay, intersections);\n\n  return findClosestPointInClosestNode(\n    this,\n    intersections,\n    ray,\n    cullBackFaces,\n    mode,\n    projection,\n  );\n};\n\n/**\n * Resets the terrain picker's quadtree structure to just the root node. Done whenever the underlying terrain mesh changes.\n * @param terrainPicker The terrain picker to reset.\n * @private\n */\nfunction reset(terrainPicker, tileTransform) {\n  // PERFORMANCE_IDEA: warm-start the terrain picker by building a level on a worker.\n  // This currently isn't feasible because you can only copy the vertex buffer to a worker (slow) or transfer ownership (can't do picking on main thread in meantime).\n  // SharedArrayBuffers could be used, but most environments do not support them.\n  Matrix4.inverse(tileTransform, terrainPicker._inverseTransform);\n\n  terrainPicker._needsRebuild = false;\n  const triangleCount = terrainPicker._indices.length / 3;\n  const intersectingTriangles = new Uint32Array(triangleCount);\n\n  for (let i = 0; i < triangleCount; ++i) {\n    intersectingTriangles[i] = i;\n  }\n\n  terrainPicker._rootNode.intersectingTriangles = intersectingTriangles;\n  terrainPicker._rootNode.children.length = 0;\n}\n\nconst scratchAABBMin = new Cartesian3();\nconst scratchAABBMax = new Cartesian3();\n\n/**\n * Creates an axis-aligned bounding box for a quadtree node at the given tree-space coordinates and level.\n * This AABB is in the tree's local space (where the root node of the tree is a unit cube in its own local space).\n *\n * @param {number} x The x coordinate of the node.\n * @param {number} y The y coordinate of the node.\n * @param {number} level The level of the node.\n * @returns {AxisAlignedBoundingBox} The axis-aligned bounding box for the node.\n */\nfunction createAABBForNode(x, y, level) {\n  const sizeAtLevel = 1.0 / Math.pow(2, level);\n\n  const aabbMin = Cartesian3.fromElements(\n    x * sizeAtLevel - 0.5,\n    y * sizeAtLevel - 0.5,\n    -0.5,\n    scratchAABBMin,\n  );\n\n  const aabbMax = Cartesian3.fromElements(\n    (x + 1) * sizeAtLevel - 0.5,\n    (y + 1) * sizeAtLevel - 0.5,\n    0.5,\n    scratchAABBMax,\n  );\n\n  return AxisAlignedBoundingBox.fromCorners(aabbMin, aabbMax);\n}\n\n/**\n * Packs triangle vertex positions and index into provided buffers, for the worker to process.\n * (The worker does tests to organize triangles into child nodes of the quadtree.)\n * @param {Float64Array} trianglePositionsBuffer The buffer to pack triangle vertex positions into.\n * @param {Uint32Array} triangleIndicesBuffer The buffer to pack triangle indices into.\n * @param {Cartesian3[]} trianglePositions The triangle's vertex positions.\n * @param {number} triangleIndex The triangle's index in the overall tile's index buffer.\n * @param {number} bufferIndex The index to use to pack into the buffers.\n * @private\n */\nfunction packTriangleBuffers(\n  trianglePositionsBuffer,\n  triangleIndicesBuffer,\n  trianglePositions,\n  triangleIndex,\n  bufferIndex,\n) {\n  Cartesian3.pack(\n    trianglePositions[0],\n    trianglePositionsBuffer,\n    9 * bufferIndex,\n  );\n  Cartesian3.pack(\n    trianglePositions[1],\n    trianglePositionsBuffer,\n    9 * bufferIndex + 3,\n  );\n  Cartesian3.pack(\n    trianglePositions[2],\n    trianglePositionsBuffer,\n    9 * bufferIndex + 6,\n  );\n  triangleIndicesBuffer[bufferIndex] = triangleIndex;\n}\n\n/**\n * @typedef {Object} IntersectingNode\n * @property {TerrainPickerNode} node - The intersecting quadtree node.\n * @property {Interval} interval - The interval along the ray where the intersection occurs.\n * @private\n */\n\nconst scratchInterval = new Interval();\n\n/**\n * Recursively gathers all nodes in the quadtree that intersect the ray.\n *\n * @param {TerrainPickerNode} currentNode The current node being tested.\n * @param {Ray} ray The ray to test.\n * @param {IntersectingNode[]} intersectingNodes The array to store intersecting nodes in.\n * @private\n */\nfunction getNodesIntersectingRay(currentNode, ray, intersectingNodes) {\n  const interval = IntersectionTests.rayAxisAlignedBoundingBox(\n    ray,\n    currentNode.aabb,\n    scratchInterval,\n  );\n\n  if (!defined(interval)) {\n    return;\n  }\n\n  const isLeaf = !currentNode.children.length || currentNode.buildingChildren;\n  if (isLeaf) {\n    intersectingNodes.push({\n      node: currentNode,\n      interval: new Interval(interval.start, interval.stop),\n    });\n    return;\n  }\n\n  for (let i = 0; i < currentNode.children.length; i++) {\n    getNodesIntersectingRay(currentNode.children[i], ray, intersectingNodes);\n  }\n}\n\n/**\n * Finds the closest intersecting node along the ray, in world space, and the closest point in that node,\n * by testing all triangles in the closest node against the ray.\n *\n * @param {TerrainPicker} terrainPicker The terrain picker.\n * @param {IntersectingNode[]} intersections The nodes that intersect the ray, along with the intersection intervals along said ray.\n * @param {Ray} ray The ray to test.\n * @param {boolean} cullBackFaces Whether to cull back faces.\n * @param {SceneMode} mode The scene mode (2D/3D/Columbus View).\n * @param {MapProjection} projection The map projection.\n * @returns The closest point in world space, or undefined if no intersection.\n * @private\n */\nfunction findClosestPointInClosestNode(\n  terrainPicker,\n  intersections,\n  ray,\n  cullBackFaces,\n  mode,\n  projection,\n) {\n  const sortedIntersections = intersections.sort(function (a, b) {\n    return a.interval.start - b.interval.start;\n  });\n\n  let minT = Number.MAX_VALUE;\n  for (let i = 0; i < sortedIntersections.length; i++) {\n    const intersection = sortedIntersections[i];\n    const intersectionResult = getClosestTriangleInNode(\n      terrainPicker,\n      ray,\n      intersection.node,\n      cullBackFaces,\n      mode,\n      projection,\n    );\n    minT = Math.min(intersectionResult, minT);\n    if (minT !== Number.MAX_VALUE) {\n      break;\n    }\n  }\n\n  if (minT !== Number.MAX_VALUE) {\n    return Ray.getPoint(ray, minT);\n  }\n\n  return undefined;\n}\n\n/**\n * Test all triangles in the given node against the ray, returning the closest intersection t value along the ray.\n * Additionally, collect the triangles' positions and indices along the way to launch worker process that uses them to build out child nodes.\n *\n * @param {TerrainPicker} terrainPicker The terrain picker.\n * @param {Ray} ray The ray to test.\n * @param {TerrainPickerNode} node The node to test.\n * @param {boolean} cullBackFaces Whether to cull back faces.\n * @param {SceneMode} mode The scene mode (2D/3D/Columbus View).\n * @param {MapProjection} projection The map projection.\n * @returns {number} The closest intersection t value along the ray, or Number.MAX_VALUE if no intersection.\n * @private\n */\nfunction getClosestTriangleInNode(\n  terrainPicker,\n  ray,\n  node,\n  cullBackFaces,\n  mode,\n  projection,\n) {\n  let result = Number.MAX_VALUE;\n  const encoding = terrainPicker._encoding;\n  const indices = terrainPicker._indices;\n  const vertices = terrainPicker._vertices;\n  const triangleCount = node.intersectingTriangles.length;\n  const isMaxLevel = node.level >= MAXIMUM_TERRAIN_PICKER_LEVEL;\n  const shouldBuildChildren = !isMaxLevel && !node.buildingChildren;\n\n  let trianglePositions;\n  let triangleIndices;\n  if (shouldBuildChildren) {\n    // If the tree can be built deeper, prepare buffers to store triangle data for child nodes\n    trianglePositions = new Float64Array(triangleCount * 9); // 3 vertices per triangle * 3 floats per vertex\n    triangleIndices = new Uint32Array(triangleCount);\n  }\n\n  for (let i = 0; i < triangleCount; i++) {\n    const triIndex = node.intersectingTriangles[i];\n    const v0 = getVertexPosition(\n      encoding,\n      mode,\n      projection,\n      ray,\n      vertices,\n      indices[3 * triIndex],\n      scratchTrianglePoints[0],\n    );\n    const v1 = getVertexPosition(\n      encoding,\n      mode,\n      projection,\n      ray,\n      vertices,\n      indices[3 * triIndex + 1],\n      scratchTrianglePoints[1],\n    );\n    const v2 = getVertexPosition(\n      encoding,\n      mode,\n      projection,\n      ray,\n      vertices,\n      indices[3 * triIndex + 2],\n      scratchTrianglePoints[2],\n    );\n\n    const triT = IntersectionTests.rayTriangleParametric(\n      ray,\n      v0,\n      v1,\n      v2,\n      cullBackFaces,\n    );\n\n    if (defined(triT) && triT < result && triT >= 0) {\n      result = triT;\n    }\n\n    if (shouldBuildChildren) {\n      packTriangleBuffers(\n        trianglePositions,\n        triangleIndices,\n        scratchTrianglePoints,\n        triIndex,\n        i,\n      );\n    }\n  }\n\n  if (shouldBuildChildren) {\n    for (let childIdx = 0; childIdx < 4; childIdx++) {\n      node.addChild(childIdx);\n    }\n\n    addTrianglesToChildrenNodes(\n      terrainPicker._inverseTransform,\n      node,\n      triangleIndices,\n      trianglePositions,\n    );\n  }\n\n  return result;\n}\n\nconst scratchCartographic = new Cartographic();\n\n/**\n * Gets a vertex position from the buffer, taking into account the exaggeration and scene mode of the terrain.\n *\n * @param {TerrainEncoding} encoding The terrain encoding.\n * @param {SceneMode} mode The scene mode (2D/3D/Columbus View).\n * @param {MapProjection} projection The map projection.\n * @param {Ray} ray The pick ray being tested (used here as a reference to resolve antimeridian wrapping in 2D/Columbus View).\n * @param {Float64Array} vertices The terrain mesh's vertex buffer.\n * @param {Number} index The index of the vertex to get.\n * @param {Cartesian3} result The decoded, exaggerated, and possibly projected vertex position.\n * @returns {Cartesian3} The result vertex position.\n * @private\n */\nfunction getVertexPosition(\n  encoding,\n  mode,\n  projection,\n  ray,\n  vertices,\n  index,\n  result,\n) {\n  let position = encoding.getExaggeratedPosition(vertices, index, result);\n  if (mode === SceneMode.SCENE3D) {\n    return position;\n  }\n\n  const ellipsoid = projection.ellipsoid;\n  const positionCartographic = ellipsoid.cartesianToCartographic(\n    position,\n    scratchCartographic,\n  );\n  position = projection.project(positionCartographic, result);\n  // Swizzle because coordinate basis are different in 2D/Columbus View\n  position = Cartesian3.fromElements(\n    position.z,\n    position.x,\n    position.y,\n    result,\n  );\n\n  // Due to wrapping in 2D/CV modes, near the antimeridian, the vertex\n  // position may correspond to the other side of the world from the ray origin.\n  // Compare the vertex position to the ray origin and adjust it accordingly.\n  // A spherical approximation is sufficient for cylindrical projections,\n  // like mercator and geographic.\n  const worldWidth = CesiumMath.TWO_PI * projection.ellipsoid.maximumRadius;\n  const k = Math.round((ray.origin.y - position.y) / worldWidth);\n  position.y += k * worldWidth;\n  return position;\n}\n\n/**\n * Adds triangles to the child nodes of the given node by launching a worker process to do AABB-triangle testing.\n *\n * @param {Matrix4} inverseTransform\n * @param {TerrainNode} node\n * @param {Uint32Array} triangleIndices\n * @param {Float64Array} trianglePositions\n * @returns {Promise<void>} A promise that resolves when the triangles have been added to the child nodes.\n * @private\n */\nasync function addTrianglesToChildrenNodes(\n  inverseTransform,\n  node,\n  triangleIndices,\n  trianglePositions,\n) {\n  node.buildingChildren = true;\n\n  // Prepare data to be sent to a worker\n  const inverseTransformPacked = new Float64Array(16);\n  Matrix4.pack(inverseTransform, inverseTransformPacked, 0);\n\n  const aabbArray = new Float64Array(6 * 4); // 6 elements per AABB, 4 children\n  for (let i = 0; i < 4; i++) {\n    Cartesian3.pack(node.children[i].aabb.minimum, aabbArray, i * 6);\n    Cartesian3.pack(node.children[i].aabb.maximum, aabbArray, i * 6 + 3);\n  }\n\n  const parameters = {\n    aabbs: aabbArray,\n    inverseTransform: inverseTransformPacked,\n    triangleIndices: triangleIndices,\n    trianglePositions: trianglePositions,\n  };\n\n  const transferableObjects = [\n    aabbArray.buffer,\n    inverseTransformPacked.buffer,\n    triangleIndices.buffer,\n    trianglePositions.buffer,\n  ];\n\n  const incrementallyBuildTerrainPickerPromise =\n    incrementallyBuildTerrainPickerTaskProcessor.scheduleTask(\n      parameters,\n      transferableObjects,\n    );\n\n  if (!defined(incrementallyBuildTerrainPickerPromise)) {\n    // Failed to schedule task, retry on next pick\n    node.buildingChildren = false;\n    return;\n  }\n\n  // After worker completes, it transfers back a buffer of intersecting triangles for each child node\n  // Assign these to the child nodes\n  const result = await incrementallyBuildTerrainPickerPromise;\n  result.intersectingTrianglesArrays.forEach((buffer, index) => {\n    // Guard against case where tree is reset while waiting for worker\n    if (defined(node.children[index])) {\n      node.children[index].intersectingTriangles = new Uint32Array(buffer);\n    }\n  });\n\n  // The node's triangles have been distributed to its children\n  node.intersectingTriangles = new Uint32Array(0);\n  node.buildingChildren = false;\n}\n\nexport default TerrainPicker;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * Provides terrain or other geometry for the surface of an ellipsoid.  The surface geometry is\n * organized into a pyramid of tiles according to a {@link TilingScheme}.  This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias TerrainProvider\n * @constructor\n *\n * @see EllipsoidTerrainProvider\n * @see CesiumTerrainProvider\n * @see VRTheWorldTerrainProvider\n * @see GoogleEarthEnterpriseTerrainProvider\n * @see ArcGISTiledElevationTerrainProvider\n * @see Cesium3DTilesTerrainProvider\n */\nfunction TerrainProvider() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(TerrainProvider.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof TerrainProvider.prototype\n   * @type {Event<TerrainProvider.ErrorEvent>}\n   * @readonly\n   */\n  errorEvent: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active.  Typically this is used to credit\n   * the source of the terrain.\n   * @memberof TerrainProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof TerrainProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask.  The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * @memberof TerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasWaterMask: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * @memberof TerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasVertexNormals: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles. This property may be undefined if availability\n   * information is not available.\n   * @memberof TerrainProvider.prototype\n   * @type {TileAvailability|undefined}\n   * @readonly\n   */\n  availability: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\nconst regularGridIndicesCache = [];\n\n/**\n * Gets a list of indices for a triangle mesh representing a regular grid.  Calling\n * this function multiple times with the same grid width and height returns the\n * same list of indices.  The total number of vertices must be less than or equal\n * to 65536.\n *\n * @param {number} width The number of vertices in the regular grid in the horizontal direction.\n * @param {number} height The number of vertices in the regular grid in the vertical direction.\n * @returns {Uint16Array|Uint32Array} The list of indices. Uint16Array gets returned for 64KB or less and Uint32Array for 4GB or less.\n */\nTerrainProvider.getRegularGridIndices = function (width, height) {\n  //>>includeStart('debug', pragmas.debug);\n  if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n    throw new DeveloperError(\n      \"The total number of vertices (width * height) must be less than 4,294,967,296.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let byWidth = regularGridIndicesCache[width];\n  if (!defined(byWidth)) {\n    regularGridIndicesCache[width] = byWidth = [];\n  }\n\n  let indices = byWidth[height];\n  if (!defined(indices)) {\n    if (width * height < CesiumMath.SIXTY_FOUR_KILOBYTES) {\n      indices = byWidth[height] = new Uint16Array(\n        (width - 1) * (height - 1) * 6,\n      );\n    } else {\n      indices = byWidth[height] = new Uint32Array(\n        (width - 1) * (height - 1) * 6,\n      );\n    }\n    addRegularGridIndices(width, height, indices, 0);\n  }\n\n  return indices;\n};\n\nconst regularGridAndEdgeIndicesCache = [];\n\n/**\n * @private\n */\nTerrainProvider.getRegularGridIndicesAndEdgeIndices = function (width, height) {\n  //>>includeStart('debug', pragmas.debug);\n  if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n    throw new DeveloperError(\n      \"The total number of vertices (width * height) must be less than 4,294,967,296.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let byWidth = regularGridAndEdgeIndicesCache[width];\n  if (!defined(byWidth)) {\n    regularGridAndEdgeIndicesCache[width] = byWidth = [];\n  }\n\n  let indicesAndEdges = byWidth[height];\n  if (!defined(indicesAndEdges)) {\n    const indices = TerrainProvider.getRegularGridIndices(width, height);\n\n    const edgeIndices = getEdgeIndices(width, height);\n    const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\n    const southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\n    const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\n    const northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\n\n    indicesAndEdges = byWidth[height] = {\n      indices: indices,\n      westIndicesSouthToNorth: westIndicesSouthToNorth,\n      southIndicesEastToWest: southIndicesEastToWest,\n      eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n      northIndicesWestToEast: northIndicesWestToEast,\n    };\n  }\n\n  return indicesAndEdges;\n};\n\nconst regularGridAndSkirtAndEdgeIndicesCache = [];\n\n/**\n * @private\n */\nTerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices = function (\n  width,\n  height,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n    throw new DeveloperError(\n      \"The total number of vertices (width * height) must be less than 4,294,967,296.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let byWidth = regularGridAndSkirtAndEdgeIndicesCache[width];\n  if (!defined(byWidth)) {\n    regularGridAndSkirtAndEdgeIndicesCache[width] = byWidth = [];\n  }\n\n  let indicesAndEdges = byWidth[height];\n  if (!defined(indicesAndEdges)) {\n    const gridVertexCount = width * height;\n    const gridIndexCount = (width - 1) * (height - 1) * 6;\n    const edgeVertexCount = width * 2 + height * 2;\n    const edgeIndexCount = Math.max(0, edgeVertexCount - 4) * 6;\n    const vertexCount = gridVertexCount + edgeVertexCount;\n    const indexCount = gridIndexCount + edgeIndexCount;\n\n    const edgeIndices = getEdgeIndices(width, height);\n    const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\n    const southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\n    const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\n    const northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\n\n    const indices = IndexDatatype.createTypedArray(vertexCount, indexCount);\n    addRegularGridIndices(width, height, indices, 0);\n    TerrainProvider.addSkirtIndices(\n      westIndicesSouthToNorth,\n      southIndicesEastToWest,\n      eastIndicesNorthToSouth,\n      northIndicesWestToEast,\n      gridVertexCount,\n      indices,\n      gridIndexCount,\n    );\n\n    indicesAndEdges = byWidth[height] = {\n      indices: indices,\n      westIndicesSouthToNorth: westIndicesSouthToNorth,\n      southIndicesEastToWest: southIndicesEastToWest,\n      eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n      northIndicesWestToEast: northIndicesWestToEast,\n      indexCountWithoutSkirts: gridIndexCount,\n    };\n  }\n\n  return indicesAndEdges;\n};\n\n/**\n * Calculates the number of skirt vertices given the edge indices.\n * @private\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} westIndicesSouthToNorth Edge indices along the west side of the tile.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} southIndicesEastToWest Edge indices along the south side of the tile.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} eastIndicesNorthToSouth Edge indices along the east side of the tile.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} northIndicesWestToEast Edge indices along the north side of the tile.\n * @returns {number} The number of skirt vertices.\n */\nTerrainProvider.getSkirtVertexCount = function (\n  westIndicesSouthToNorth,\n  southIndicesEastToWest,\n  eastIndicesNorthToSouth,\n  northIndicesWestToEast,\n) {\n  return (\n    westIndicesSouthToNorth.length +\n    southIndicesEastToWest.length +\n    eastIndicesNorthToSouth.length +\n    northIndicesWestToEast.length\n  );\n};\n\n/**\n * Compute the number of skirt indices given the number of skirt vertices.\n * Consider a 3x3 grid of vertices. There will be 8 skirt vertices around the edge:\n * - 16 edge triangles\n * - 48 indices\n *\n *   |\\|\\|\n * |/|   |/|\n * |/|   |/|\n *   |\\|\\|\n *\n * @private\n * @param {number} skirtVertexCount\n * @returns {number}\n */\nTerrainProvider.getSkirtIndexCount = function (skirtVertexCount) {\n  return (skirtVertexCount - 4) * 2 * 3;\n};\n\n/**\n * Compute the number of skirt indices given the number of skirt vertices with filled corners.\n * Consider a 3x3 grid of vertices. There will be 8 skirt vertices around the edge:\n * - 16 edge triangles\n * - 4 cap triangles\n * - 60 indices\n *\n *  /|\\|\\|\\\n * |/|   |/|\n * |/|   |/|\n *  \\|\\|\\|/\n *\n * @private\n * @param {number} skirtVertexCount\n * @returns {number}\n */\nTerrainProvider.getSkirtIndexCountWithFilledCorners = function (\n  skirtVertexCount,\n) {\n  return ((skirtVertexCount - 4) * 2 + 4) * 3;\n};\n\n/**\n * Adds skirt indices.\n * This does not add filled corners. Use {@link TerrainProvider.addSkirtIndicesWithFilledCorners} to add skirt indices with filled corners.\n * @private\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} westIndicesSouthToNorth The indices of the vertices on the Western edge of the tile, ordered from South to North.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} southIndicesEastToWest The indices of the vertices on the Southern edge of the tile, ordered from East to West.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} eastIndicesNorthToSouth The indices of the vertices on the Eastern edge of the tile, ordered from North to South.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} northIndicesWestToEast The indices of the vertices on the Northern edge of the tile, ordered from West to East.\n * @param {number} vertexCount The number of vertices in the tile before adding skirt vertices.\n * @param {Uint16Array|Uint32Array} indices The array of indices to which skirt indices are added.\n * @param {number} offset The offset into the indices array at which to start adding skirt indices.\n */\nTerrainProvider.addSkirtIndices = function (\n  westIndicesSouthToNorth,\n  southIndicesEastToWest,\n  eastIndicesNorthToSouth,\n  northIndicesWestToEast,\n  vertexCount,\n  indices,\n  offset,\n) {\n  let vertexIndex = vertexCount;\n  offset = addSkirtIndices(\n    westIndicesSouthToNorth,\n    vertexIndex,\n    indices,\n    offset,\n  );\n  vertexIndex += westIndicesSouthToNorth.length;\n  offset = addSkirtIndices(\n    southIndicesEastToWest,\n    vertexIndex,\n    indices,\n    offset,\n  );\n  vertexIndex += southIndicesEastToWest.length;\n  offset = addSkirtIndices(\n    eastIndicesNorthToSouth,\n    vertexIndex,\n    indices,\n    offset,\n  );\n  vertexIndex += eastIndicesNorthToSouth.length;\n  addSkirtIndices(northIndicesWestToEast, vertexIndex, indices, offset);\n};\n\n/**\n * Adds skirt indices with filled corners.\n * @private\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} westIndicesSouthToNorth The indices of the vertices on the Western edge of the tile, ordered from South to North.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} southIndicesEastToWest The indices of the vertices on the Southern edge of the tile, ordered from East to West.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} eastIndicesNorthToSouth The indices of the vertices on the Eastern edge of the tile, ordered from North to South.\n * @param {number[]|Uint8Array|Uint16Array|Uint32Array} northIndicesWestToEast The indices of the vertices on the Northern edge of the tile, ordered from West to East.\n * @param {number} vertexCount The number of vertices in the tile before adding skirt vertices.\n * @param {Uint16Array|Uint32Array} indices The array of indices to which skirt indices are added.\n * @param {number} offset The offset into the indices array at which to start adding skirt indices.\n */\nTerrainProvider.addSkirtIndicesWithFilledCorners = function (\n  westIndicesSouthToNorth,\n  southIndicesEastToWest,\n  eastIndicesNorthToSouth,\n  northIndicesWestToEast,\n  vertexCount,\n  indices,\n  offset,\n) {\n  // Add skirt indices without filled corners\n  TerrainProvider.addSkirtIndices(\n    westIndicesSouthToNorth,\n    southIndicesEastToWest,\n    eastIndicesNorthToSouth,\n    northIndicesWestToEast,\n    vertexCount,\n    indices,\n    offset,\n  );\n\n  const skirtVertexCount = TerrainProvider.getSkirtVertexCount(\n    westIndicesSouthToNorth,\n    southIndicesEastToWest,\n    eastIndicesNorthToSouth,\n    northIndicesWestToEast,\n  );\n  const skirtIndexCountWithoutCaps =\n    TerrainProvider.getSkirtIndexCount(skirtVertexCount);\n\n  const cornerStartIdx = offset + skirtIndexCountWithoutCaps;\n\n  const cornerSWIndex = westIndicesSouthToNorth[0];\n  const cornerNWIndex = northIndicesWestToEast[0];\n  const cornerNEIndex = eastIndicesNorthToSouth[0];\n  const cornerSEIndex = southIndicesEastToWest[0];\n\n  // Indices based on edge order in addSkirtIndices\n  const westSouthIndex = vertexCount;\n  const westNorthIndex = westSouthIndex + westIndicesSouthToNorth.length - 1;\n  const southEastIndex = westNorthIndex + 1;\n  const southWestIndex = southEastIndex + southIndicesEastToWest.length - 1;\n  const eastNorthIndex = southWestIndex + 1;\n  const eastSouthIndex = eastNorthIndex + eastIndicesNorthToSouth.length - 1;\n  const northWestIndex = eastSouthIndex + 1;\n  const northEastIndex = northWestIndex + northIndicesWestToEast.length - 1;\n\n  // Connect the corner vertices with the skirt vertices extending from the corner\n\n  indices[cornerStartIdx + 0] = cornerSWIndex;\n  indices[cornerStartIdx + 1] = westSouthIndex;\n  indices[cornerStartIdx + 2] = southWestIndex;\n\n  indices[cornerStartIdx + 3] = cornerSEIndex;\n  indices[cornerStartIdx + 4] = southEastIndex;\n  indices[cornerStartIdx + 5] = eastSouthIndex;\n\n  indices[cornerStartIdx + 6] = cornerNEIndex;\n  indices[cornerStartIdx + 7] = eastNorthIndex;\n  indices[cornerStartIdx + 8] = northEastIndex;\n\n  indices[cornerStartIdx + 9] = cornerNWIndex;\n  indices[cornerStartIdx + 10] = northWestIndex;\n  indices[cornerStartIdx + 11] = westNorthIndex;\n};\n\nfunction getEdgeIndices(width, height) {\n  const westIndicesSouthToNorth = new Array(height);\n  const southIndicesEastToWest = new Array(width);\n  const eastIndicesNorthToSouth = new Array(height);\n  const northIndicesWestToEast = new Array(width);\n\n  let i;\n  for (i = 0; i < width; ++i) {\n    northIndicesWestToEast[i] = i;\n    southIndicesEastToWest[i] = width * height - 1 - i;\n  }\n\n  for (i = 0; i < height; ++i) {\n    eastIndicesNorthToSouth[i] = (i + 1) * width - 1;\n    westIndicesSouthToNorth[i] = (height - i - 1) * width;\n  }\n\n  return {\n    westIndicesSouthToNorth: westIndicesSouthToNorth,\n    southIndicesEastToWest: southIndicesEastToWest,\n    eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n    northIndicesWestToEast: northIndicesWestToEast,\n  };\n}\n\nfunction addRegularGridIndices(width, height, indices, offset) {\n  let index = 0;\n  for (let j = 0; j < height - 1; ++j) {\n    for (let i = 0; i < width - 1; ++i) {\n      const upperLeft = index;\n      const lowerLeft = upperLeft + width;\n      const lowerRight = lowerLeft + 1;\n      const upperRight = upperLeft + 1;\n\n      indices[offset++] = upperLeft;\n      indices[offset++] = lowerLeft;\n      indices[offset++] = upperRight;\n      indices[offset++] = upperRight;\n      indices[offset++] = lowerLeft;\n      indices[offset++] = lowerRight;\n\n      ++index;\n    }\n    ++index;\n  }\n}\n\nfunction addSkirtIndices(edgeIndices, vertexIndex, indices, offset) {\n  let previousIndex = edgeIndices[0];\n\n  const length = edgeIndices.length;\n  for (let i = 1; i < length; ++i) {\n    const index = edgeIndices[i];\n\n    indices[offset++] = previousIndex;\n    indices[offset++] = index;\n    indices[offset++] = vertexIndex;\n\n    indices[offset++] = vertexIndex;\n    indices[offset++] = index;\n    indices[offset++] = vertexIndex + 1;\n\n    previousIndex = index;\n    ++vertexIndex;\n  }\n\n  return offset;\n}\n\n/**\n * Specifies the quality of terrain created from heightmaps.  A value of 1.0 will\n * ensure that adjacent heightmap vertices are separated by no more than\n * {@link Globe.maximumScreenSpaceError} screen pixels and will probably go very slowly.\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\n * @type {number}\n */\nTerrainProvider.heightmapTerrainQuality = 0.25;\n\n/**\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\n * @param {number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\n * @param {number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\n * @returns {number} An estimated geometric error.\n */\nTerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap = function (\n  ellipsoid,\n  tileImageWidth,\n  numberOfTilesAtLevelZero,\n) {\n  return (\n    (ellipsoid.maximumRadius *\n      2 *\n      Math.PI *\n      TerrainProvider.heightmapTerrainQuality) /\n    (tileImageWidth * numberOfTilesAtLevelZero)\n  );\n};\n\n/**\n * Requests the geometry for a given tile. The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n * @function\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise<TerrainData>|undefined} A promise for the requested geometry.  If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n */\nTerrainProvider.prototype.requestTileGeometry =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n * @function\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nTerrainProvider.prototype.getLevelMaximumGeometricError =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Determines whether data for a tile is available to be loaded.\n * @function\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported by the terrain provider, otherwise true or false.\n */\nTerrainProvider.prototype.getTileDataAvailable =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Makes sure we load availability data for a tile\n * @function\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nTerrainProvider.prototype.loadTileDataAvailability =\n  DeveloperError.throwInstantiationError;\nexport default TerrainProvider;\n\n/**\n * A function that is called when an error occurs.\n * @callback TerrainProvider.ErrorEvent\n *\n * @this TerrainProvider\n * @param {TileProviderError} err An object holding details about the error that occurred.\n */\n","/**\n * This enumerated type is used to determine how the vertices of the terrain mesh are compressed.\n *\n * @enum {number}\n *\n * @private\n */\nconst TerrainQuantization = {\n  /**\n   * The vertices are not compressed.\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n\n  /**\n   * The vertices are compressed to 12 bits.\n   *\n   * @type {number}\n   * @constant\n   */\n  BITS12: 1,\n};\nexport default Object.freeze(TerrainQuantization);\n","import BoundingRectangle from \"./BoundingRectangle.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * @typedef {object} TexturePacker.PackableObject\n * Any object, such as an <code>Image</code> with the following properties:\n * @private\n * @property {number} width The width of the image, or other object, usually in pixels\n * @property {number} height The height of the image, or other object, usually in pixels\n */\n\n/**\n * A texture atlas is recursively broken down into regions of space called nodes.\n * Nodes contain either an image reference or child nodes.\n * @private\n * @constructor\n * @param {object} options An options object with the following properties:\n * @param {number} options.x The x-offset of the texture node\n * @param {number} options.y The y-offset of the texture node\n * @param {number} options.width The width of the texture node\n * @param {number} options.height The width of the texture node\n */\nfunction TextureNode({ x, y, width, height }) {\n  /**\n   * @type {BoundingRectangle}\n   */\n  this.rectangle = new BoundingRectangle(x, y, width, height);\n\n  /**\n   * @type {TextureNode|undefined}\n   */\n  this.childNode1 = undefined;\n  /**\n   * @type {TextureNode|undefined}\n   */\n  this.childNode2 = undefined;\n\n  /**\n   * Identifier referencing an image or packed data\n   * @type {number|undefined}\n   */\n  this.index = undefined;\n}\n\n/**\n * Typically used with {@link TextureAtlas} to calculate efficient regions of the larger areas to store images or other data. Typically, all units are specified in pixels.\n * @alias TexturePacker\n * @constructor\n * @private\n * @param {options} options Object with the following properties:\n * @param {number} options.width Width of the atlas, in pixels\n * @param {number} options.height Height of atlas, in pixels\n * @param {number} options.borderPadding Amount of border padding, in pixels\n */\nfunction TexturePacker({ width, height, borderPadding }) {\n  this._width = width;\n  this._height = height;\n\n  this._borderPadding = borderPadding;\n\n  this._root = new TextureNode({\n    x: borderPadding,\n    y: borderPadding,\n    width: width - 2 * borderPadding,\n    height: height - 2 * borderPadding,\n  });\n}\n\n/**\n * Inserts the given object into the next available region based on it's dimensions. Where convenient, it's most efficient to pack items largest to smallest.\n * @private\n * @param {number} index An identifier referencing the image or other stored data\n * @param {TexturePacker.PackableObject} packableObject An object, such as an <code>Image</code>, with <code>width</code> and <code>height</code> properties in pixels.\n * @returns {TextureNode|undefined} The created region, or <code>undefined</code> if there is no region large enough to accommodate the object's dimensions.\n */\nTexturePacker.prototype.pack = function (index, { width, height }) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"image.width\", width, 1);\n  Check.typeOf.number.greaterThanOrEquals(\"image.height\", height, 1);\n  //>>includeEnd('debug');\n\n  const node = this._findNode(this._root, { width, height });\n  if (!defined(node)) {\n    return;\n  }\n\n  node.index = index;\n  return node;\n};\n\n// A recursive function that finds the best place to insert\n// a new image based on existing image 'nodes'.\n// Inspired by: http://blackpawn.com/texts/lightmaps/default.html\nTexturePacker.prototype._findNode = function (node, { width, height }) {\n  if (!defined(node)) {\n    return undefined;\n  }\n\n  // Leaf node\n  if (!defined(node.childNode1) && !defined(node.childNode2)) {\n    if (defined(node.index)) {\n      // Node already contains an image: Skip it.\n      return undefined;\n    }\n\n    const { rectangle } = node;\n\n    const nodeWidth = rectangle.width;\n    const nodeHeight = rectangle.height;\n    const widthDifference = nodeWidth - width;\n    const heightDifference = nodeHeight - height;\n\n    // Node is smaller than the image.\n    if (widthDifference < 0 || heightDifference < 0) {\n      return undefined;\n    }\n\n    // If the node is the same size as the image, return the node\n    if (widthDifference === 0 && heightDifference === 0) {\n      return node;\n    }\n\n    const borderPadding = this._borderPadding;\n\n    // Vertical split (childNode1 = left half, childNode2 = right half).\n    if (widthDifference > heightDifference) {\n      node.childNode1 = new TextureNode({\n        x: rectangle.x,\n        y: rectangle.y,\n        width,\n        height: nodeHeight,\n      });\n\n      // Apply padding only along the vertical \"cut\".\n      const widthDifferencePadded = widthDifference - borderPadding;\n\n      if (widthDifferencePadded > 0) {\n        node.childNode2 = new TextureNode({\n          x: rectangle.x + width + borderPadding,\n          y: rectangle.y,\n          width: widthDifferencePadded,\n          height: nodeHeight,\n        });\n      }\n\n      return this._findNode(node.childNode1, { width, height });\n    }\n\n    // Horizontal split (childNode1 = bottom half, childNode2 = top half).\n    node.childNode1 = new TextureNode({\n      x: rectangle.x,\n      y: rectangle.y,\n      width: nodeWidth,\n      height,\n    });\n\n    // Apply padding only along the horizontal \"cut\".\n    const heightDifferencePadded = heightDifference - borderPadding;\n\n    if (heightDifferencePadded > 0) {\n      node.childNode2 = new TextureNode({\n        x: rectangle.x,\n        y: rectangle.y + height + borderPadding,\n        width: nodeWidth,\n        height: heightDifferencePadded,\n      });\n    }\n\n    return this._findNode(node.childNode1, { width, height });\n  }\n\n  // If not a leaf node\n  return (\n    this._findNode(node.childNode1, { width, height }) ||\n    this._findNode(node.childNode2, { width, height })\n  );\n};\n\nexport default TexturePacker;\n","import binarySearch from \"./binarySearch.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport Rectangle from \"./Rectangle.js\";\n\n/**\n * Reports the availability of tiles in a {@link TilingScheme}.\n *\n * @alias TileAvailability\n * @constructor\n *\n * @param {TilingScheme} tilingScheme The tiling scheme in which to report availability.\n * @param {number} maximumLevel The maximum tile level that is potentially available.\n */\nfunction TileAvailability(tilingScheme, maximumLevel) {\n  this._tilingScheme = tilingScheme;\n  this._maximumLevel = maximumLevel;\n\n  this._rootNodes = [];\n}\n\nconst rectangleScratch = new Rectangle();\n\nfunction findNode(level, x, y, nodes) {\n  const count = nodes.length;\n  for (let i = 0; i < count; ++i) {\n    const node = nodes[i];\n    if (node.x === x && node.y === y && node.level === level) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Marks a rectangular range of tiles in a particular level as being available.  For best performance,\n * add your ranges in order of increasing level.\n *\n * @param {number} level The level.\n * @param {number} startX The X coordinate of the first available tiles at the level.\n * @param {number} startY The Y coordinate of the first available tiles at the level.\n * @param {number} endX The X coordinate of the last available tiles at the level.\n * @param {number} endY The Y coordinate of the last available tiles at the level.\n */\nTileAvailability.prototype.addAvailableTileRange = function (\n  level,\n  startX,\n  startY,\n  endX,\n  endY,\n) {\n  const tilingScheme = this._tilingScheme;\n\n  const rootNodes = this._rootNodes;\n  if (level === 0) {\n    for (let y = startY; y <= endY; ++y) {\n      for (let x = startX; x <= endX; ++x) {\n        if (!findNode(level, x, y, rootNodes)) {\n          rootNodes.push(new QuadtreeNode(tilingScheme, undefined, 0, x, y));\n        }\n      }\n    }\n  }\n\n  tilingScheme.tileXYToRectangle(startX, startY, level, rectangleScratch);\n  const west = rectangleScratch.west;\n  const north = rectangleScratch.north;\n\n  tilingScheme.tileXYToRectangle(endX, endY, level, rectangleScratch);\n  const east = rectangleScratch.east;\n  const south = rectangleScratch.south;\n\n  const rectangleWithLevel = new RectangleWithLevel(\n    level,\n    west,\n    south,\n    east,\n    north,\n  );\n\n  for (let i = 0; i < rootNodes.length; ++i) {\n    const rootNode = rootNodes[i];\n    if (rectanglesOverlap(rootNode.extent, rectangleWithLevel)) {\n      putRectangleInQuadtree(this._maximumLevel, rootNode, rectangleWithLevel);\n    }\n  }\n};\n\n/**\n * Determines the level of the most detailed tile covering the position.  This function\n * usually completes in time logarithmic to the number of rectangles added with\n * {@link TileAvailability#addAvailableTileRange}.\n *\n * @param {Cartographic} position The position for which to determine the maximum available level.  The height component is ignored.\n * @return {number} The level of the most detailed tile covering the position.\n * @throws {DeveloperError} If position is outside any tile according to the tiling scheme.\n */\nTileAvailability.prototype.computeMaximumLevelAtPosition = function (position) {\n  // Find the root node that contains this position.\n  let node;\n  for (let nodeIndex = 0; nodeIndex < this._rootNodes.length; ++nodeIndex) {\n    const rootNode = this._rootNodes[nodeIndex];\n    if (rectangleContainsPosition(rootNode.extent, position)) {\n      node = rootNode;\n      break;\n    }\n  }\n\n  if (!defined(node)) {\n    return -1;\n  }\n\n  return findMaxLevelFromNode(undefined, node, position);\n};\n\nconst rectanglesScratch = [];\nconst remainingToCoverByLevelScratch = [];\nconst westScratch = new Rectangle();\nconst eastScratch = new Rectangle();\n\n/**\n * Finds the most detailed level that is available _everywhere_ within a given rectangle.  More detailed\n * tiles may be available in parts of the rectangle, but not the whole thing.  The return value of this\n * function may be safely passed to {@link sampleTerrain} for any position within the rectangle.  This function\n * usually completes in time logarithmic to the number of rectangles added with\n * {@link TileAvailability#addAvailableTileRange}.\n *\n * @param {Rectangle} rectangle The rectangle.\n * @return {number} The best available level for the entire rectangle.\n */\nTileAvailability.prototype.computeBestAvailableLevelOverRectangle = function (\n  rectangle,\n) {\n  const rectangles = rectanglesScratch;\n  rectangles.length = 0;\n\n  if (rectangle.east < rectangle.west) {\n    // Rectangle crosses the IDL, make it two rectangles.\n    rectangles.push(\n      Rectangle.fromRadians(\n        -Math.PI,\n        rectangle.south,\n        rectangle.east,\n        rectangle.north,\n        westScratch,\n      ),\n    );\n    rectangles.push(\n      Rectangle.fromRadians(\n        rectangle.west,\n        rectangle.south,\n        Math.PI,\n        rectangle.north,\n        eastScratch,\n      ),\n    );\n  } else {\n    rectangles.push(rectangle);\n  }\n\n  const remainingToCoverByLevel = remainingToCoverByLevelScratch;\n  remainingToCoverByLevel.length = 0;\n\n  let i;\n  for (i = 0; i < this._rootNodes.length; ++i) {\n    updateCoverageWithNode(\n      remainingToCoverByLevel,\n      this._rootNodes[i],\n      rectangles,\n    );\n  }\n\n  for (i = remainingToCoverByLevel.length - 1; i >= 0; --i) {\n    if (\n      defined(remainingToCoverByLevel[i]) &&\n      remainingToCoverByLevel[i].length === 0\n    ) {\n      return i;\n    }\n  }\n\n  return 0;\n};\n\nconst cartographicScratch = new Cartographic();\n\n/**\n * Determines if a particular tile is available.\n * @param {number} level The tile level to check.\n * @param {number} x The X coordinate of the tile to check.\n * @param {number} y The Y coordinate of the tile to check.\n * @return {boolean} True if the tile is available; otherwise, false.\n */\nTileAvailability.prototype.isTileAvailable = function (level, x, y) {\n  // Get the center of the tile and find the maximum level at that position.\n  // Because availability is by tile, if the level is available at that point, it\n  // is sure to be available for the whole tile.  We assume that if a tile at level n exists,\n  // then all its parent tiles back to level 0 exist too.  This isn't really enforced\n  // anywhere, but Cesium would never load a tile for which this is not true.\n  const rectangle = this._tilingScheme.tileXYToRectangle(\n    x,\n    y,\n    level,\n    rectangleScratch,\n  );\n  Rectangle.center(rectangle, cartographicScratch);\n  return this.computeMaximumLevelAtPosition(cartographicScratch) >= level;\n};\n\n/**\n * Computes a bit mask indicating which of a tile's four children exist.\n * If a child's bit is set, a tile is available for that child.  If it is cleared,\n * the tile is not available.  The bit values are as follows:\n * <table>\n *     <tr><th>Bit Position</th><th>Bit Value</th><th>Child Tile</th></tr>\n *     <tr><td>0</td><td>1</td><td>Southwest</td></tr>\n *     <tr><td>1</td><td>2</td><td>Southeast</td></tr>\n *     <tr><td>2</td><td>4</td><td>Northwest</td></tr>\n *     <tr><td>3</td><td>8</td><td>Northeast</td></tr>\n * </table>\n *\n * @param {number} level The level of the parent tile.\n * @param {number} x The X coordinate of the parent tile.\n * @param {number} y The Y coordinate of the parent tile.\n * @return {number} The bit mask indicating child availability.\n */\nTileAvailability.prototype.computeChildMaskForTile = function (level, x, y) {\n  const childLevel = level + 1;\n  if (childLevel >= this._maximumLevel) {\n    return 0;\n  }\n\n  let mask = 0;\n\n  mask |= this.isTileAvailable(childLevel, 2 * x, 2 * y + 1) ? 1 : 0;\n  mask |= this.isTileAvailable(childLevel, 2 * x + 1, 2 * y + 1) ? 2 : 0;\n  mask |= this.isTileAvailable(childLevel, 2 * x, 2 * y) ? 4 : 0;\n  mask |= this.isTileAvailable(childLevel, 2 * x + 1, 2 * y) ? 8 : 0;\n\n  return mask;\n};\n\nfunction QuadtreeNode(tilingScheme, parent, level, x, y) {\n  this.tilingScheme = tilingScheme;\n  this.parent = parent;\n  this.level = level;\n  this.x = x;\n  this.y = y;\n  this.extent = tilingScheme.tileXYToRectangle(x, y, level);\n\n  this.rectangles = [];\n  this._sw = undefined;\n  this._se = undefined;\n  this._nw = undefined;\n  this._ne = undefined;\n}\n\nObject.defineProperties(QuadtreeNode.prototype, {\n  nw: {\n    get: function () {\n      if (!this._nw) {\n        this._nw = new QuadtreeNode(\n          this.tilingScheme,\n          this,\n          this.level + 1,\n          this.x * 2,\n          this.y * 2,\n        );\n      }\n      return this._nw;\n    },\n  },\n\n  ne: {\n    get: function () {\n      if (!this._ne) {\n        this._ne = new QuadtreeNode(\n          this.tilingScheme,\n          this,\n          this.level + 1,\n          this.x * 2 + 1,\n          this.y * 2,\n        );\n      }\n      return this._ne;\n    },\n  },\n\n  sw: {\n    get: function () {\n      if (!this._sw) {\n        this._sw = new QuadtreeNode(\n          this.tilingScheme,\n          this,\n          this.level + 1,\n          this.x * 2,\n          this.y * 2 + 1,\n        );\n      }\n      return this._sw;\n    },\n  },\n\n  se: {\n    get: function () {\n      if (!this._se) {\n        this._se = new QuadtreeNode(\n          this.tilingScheme,\n          this,\n          this.level + 1,\n          this.x * 2 + 1,\n          this.y * 2 + 1,\n        );\n      }\n      return this._se;\n    },\n  },\n});\n\nfunction RectangleWithLevel(level, west, south, east, north) {\n  this.level = level;\n  this.west = west;\n  this.south = south;\n  this.east = east;\n  this.north = north;\n}\n\nfunction rectanglesOverlap(rectangle1, rectangle2) {\n  const west = Math.max(rectangle1.west, rectangle2.west);\n  const south = Math.max(rectangle1.south, rectangle2.south);\n  const east = Math.min(rectangle1.east, rectangle2.east);\n  const north = Math.min(rectangle1.north, rectangle2.north);\n  return south < north && west < east;\n}\n\nfunction putRectangleInQuadtree(maxDepth, node, rectangle) {\n  while (node.level < maxDepth) {\n    if (rectangleFullyContainsRectangle(node.nw.extent, rectangle)) {\n      node = node.nw;\n    } else if (rectangleFullyContainsRectangle(node.ne.extent, rectangle)) {\n      node = node.ne;\n    } else if (rectangleFullyContainsRectangle(node.sw.extent, rectangle)) {\n      node = node.sw;\n    } else if (rectangleFullyContainsRectangle(node.se.extent, rectangle)) {\n      node = node.se;\n    } else {\n      break;\n    }\n  }\n\n  if (\n    node.rectangles.length === 0 ||\n    node.rectangles[node.rectangles.length - 1].level <= rectangle.level\n  ) {\n    node.rectangles.push(rectangle);\n  } else {\n    // Maintain ordering by level when inserting.\n    let index = binarySearch(\n      node.rectangles,\n      rectangle.level,\n      rectangleLevelComparator,\n    );\n    if (index < 0) {\n      index = ~index;\n    }\n    node.rectangles.splice(index, 0, rectangle);\n  }\n}\n\nfunction rectangleLevelComparator(a, b) {\n  return a.level - b;\n}\n\nfunction rectangleFullyContainsRectangle(potentialContainer, rectangleToTest) {\n  return (\n    rectangleToTest.west >= potentialContainer.west &&\n    rectangleToTest.east <= potentialContainer.east &&\n    rectangleToTest.south >= potentialContainer.south &&\n    rectangleToTest.north <= potentialContainer.north\n  );\n}\n\nfunction rectangleContainsPosition(potentialContainer, positionToTest) {\n  return (\n    positionToTest.longitude >= potentialContainer.west &&\n    positionToTest.longitude <= potentialContainer.east &&\n    positionToTest.latitude >= potentialContainer.south &&\n    positionToTest.latitude <= potentialContainer.north\n  );\n}\n\nfunction findMaxLevelFromNode(stopNode, node, position) {\n  let maxLevel = 0;\n\n  // Find the deepest quadtree node containing this point.\n  let found = false;\n  while (!found) {\n    const nw = node._nw && rectangleContainsPosition(node._nw.extent, position);\n    const ne = node._ne && rectangleContainsPosition(node._ne.extent, position);\n    const sw = node._sw && rectangleContainsPosition(node._sw.extent, position);\n    const se = node._se && rectangleContainsPosition(node._se.extent, position);\n\n    // The common scenario is that the point is in only one quadrant and we can simply\n    // iterate down the tree.  But if the point is on a boundary between tiles, it is\n    // in multiple tiles and we need to check all of them, so use recursion.\n    if (nw + ne + sw + se > 1) {\n      if (nw) {\n        maxLevel = Math.max(\n          maxLevel,\n          findMaxLevelFromNode(node, node._nw, position),\n        );\n      }\n      if (ne) {\n        maxLevel = Math.max(\n          maxLevel,\n          findMaxLevelFromNode(node, node._ne, position),\n        );\n      }\n      if (sw) {\n        maxLevel = Math.max(\n          maxLevel,\n          findMaxLevelFromNode(node, node._sw, position),\n        );\n      }\n      if (se) {\n        maxLevel = Math.max(\n          maxLevel,\n          findMaxLevelFromNode(node, node._se, position),\n        );\n      }\n      break;\n    } else if (nw) {\n      node = node._nw;\n    } else if (ne) {\n      node = node._ne;\n    } else if (sw) {\n      node = node._sw;\n    } else if (se) {\n      node = node._se;\n    } else {\n      found = true;\n    }\n  }\n\n  // Work up the tree until we find a rectangle that contains this point.\n  while (node !== stopNode) {\n    const rectangles = node.rectangles;\n\n    // Rectangles are sorted by level, lowest first.\n    for (\n      let i = rectangles.length - 1;\n      i >= 0 && rectangles[i].level > maxLevel;\n      --i\n    ) {\n      const rectangle = rectangles[i];\n      if (rectangleContainsPosition(rectangle, position)) {\n        maxLevel = rectangle.level;\n      }\n    }\n\n    node = node.parent;\n  }\n\n  return maxLevel;\n}\n\nfunction updateCoverageWithNode(\n  remainingToCoverByLevel,\n  node,\n  rectanglesToCover,\n) {\n  if (!node) {\n    return;\n  }\n\n  let i;\n  let anyOverlap = false;\n  for (i = 0; i < rectanglesToCover.length; ++i) {\n    anyOverlap =\n      anyOverlap || rectanglesOverlap(node.extent, rectanglesToCover[i]);\n  }\n\n  if (!anyOverlap) {\n    // This node is not applicable to the rectangle(s).\n    return;\n  }\n\n  const rectangles = node.rectangles;\n  for (i = 0; i < rectangles.length; ++i) {\n    const rectangle = rectangles[i];\n\n    if (!remainingToCoverByLevel[rectangle.level]) {\n      remainingToCoverByLevel[rectangle.level] = rectanglesToCover;\n    }\n\n    remainingToCoverByLevel[rectangle.level] = subtractRectangle(\n      remainingToCoverByLevel[rectangle.level],\n      rectangle,\n    );\n  }\n\n  // Update with child nodes.\n  updateCoverageWithNode(remainingToCoverByLevel, node._nw, rectanglesToCover);\n  updateCoverageWithNode(remainingToCoverByLevel, node._ne, rectanglesToCover);\n  updateCoverageWithNode(remainingToCoverByLevel, node._sw, rectanglesToCover);\n  updateCoverageWithNode(remainingToCoverByLevel, node._se, rectanglesToCover);\n}\n\nfunction subtractRectangle(rectangleList, rectangleToSubtract) {\n  const result = [];\n  for (let i = 0; i < rectangleList.length; ++i) {\n    const rectangle = rectangleList[i];\n    if (!rectanglesOverlap(rectangle, rectangleToSubtract)) {\n      // Disjoint rectangles.  Original rectangle is unmodified.\n      result.push(rectangle);\n    } else {\n      // rectangleToSubtract partially or completely overlaps rectangle.\n      if (rectangle.west < rectangleToSubtract.west) {\n        result.push(\n          new Rectangle(\n            rectangle.west,\n            rectangle.south,\n            rectangleToSubtract.west,\n            rectangle.north,\n          ),\n        );\n      }\n      if (rectangle.east > rectangleToSubtract.east) {\n        result.push(\n          new Rectangle(\n            rectangleToSubtract.east,\n            rectangle.south,\n            rectangle.east,\n            rectangle.north,\n          ),\n        );\n      }\n      if (rectangle.south < rectangleToSubtract.south) {\n        result.push(\n          new Rectangle(\n            Math.max(rectangleToSubtract.west, rectangle.west),\n            rectangle.south,\n            Math.min(rectangleToSubtract.east, rectangle.east),\n            rectangleToSubtract.south,\n          ),\n        );\n      }\n      if (rectangle.north > rectangleToSubtract.north) {\n        result.push(\n          new Rectangle(\n            Math.max(rectangleToSubtract.west, rectangle.west),\n            rectangleToSubtract.north,\n            Math.min(rectangleToSubtract.east, rectangle.east),\n            rectangle.north,\n          ),\n        );\n      }\n    }\n  }\n\n  return result;\n}\nexport default TileAvailability;\n","/**\n * @private\n */\nconst TileEdge = {\n  WEST: 0,\n  NORTH: 1,\n  EAST: 2,\n  SOUTH: 3,\n  NORTHWEST: 4,\n  NORTHEAST: 5,\n  SOUTHWEST: 6,\n  SOUTHEAST: 7,\n};\nexport default TileEdge;\n","import defined from \"./defined.js\";\nimport formatError from \"./formatError.js\";\n\n/**\n * Provides details about an error that occurred in an {@link ImageryProvider} or a {@link TerrainProvider}.\n *\n * @alias TileProviderError\n * @constructor\n *\n * @param {ImageryProvider|TerrainProvider} provider The imagery or terrain provider that experienced the error.\n * @param {string} message A message describing the error.\n * @param {number} [x] The X coordinate of the tile that experienced the error, or undefined if the error\n *        is not specific to a particular tile.\n * @param {number} [y] The Y coordinate of the tile that experienced the error, or undefined if the error\n *        is not specific to a particular tile.\n * @param {number} [level] The level of the tile that experienced the error, or undefined if the error\n *        is not specific to a particular tile.\n * @param {number} [timesRetried=0] The number of times this operation has been retried.\n * @param {Error} [error] The error or exception that occurred, if any.\n */\nfunction TileProviderError(\n  provider,\n  message,\n  x,\n  y,\n  level,\n  timesRetried,\n  error,\n) {\n  /**\n   * The {@link ImageryProvider} or {@link TerrainProvider} that experienced the error.\n   * @type {ImageryProvider|TerrainProvider}\n   */\n  this.provider = provider;\n\n  /**\n   * The message describing the error.\n   * @type {string}\n   */\n  this.message = message;\n\n  /**\n   * The X coordinate of the tile that experienced the error.  If the error is not specific\n   * to a particular tile, this property will be undefined.\n   * @type {number}\n   */\n  this.x = x;\n\n  /**\n   * The Y coordinate of the tile that experienced the error.  If the error is not specific\n   * to a particular tile, this property will be undefined.\n   * @type {number}\n   */\n  this.y = y;\n\n  /**\n   * The level-of-detail of the tile that experienced the error.  If the error is not specific\n   * to a particular tile, this property will be undefined.\n   * @type {number}\n   */\n  this.level = level;\n\n  /**\n   * The number of times this operation has been retried.\n   * @type {number}\n   * @default 0\n   */\n  this.timesRetried = timesRetried ?? 0;\n\n  /**\n   * True if the failed operation should be retried; otherwise, false.  The imagery or terrain provider\n   * will set the initial value of this property before raising the event, but any listeners\n   * can change it.  The value after the last listener is invoked will be acted upon.\n   * @type {boolean}\n   * @default false\n   */\n  this.retry = false;\n\n  /**\n   * The error or exception that occurred, if any.\n   * @type {Error}\n   */\n  this.error = error;\n}\n\n/**\n * Reports an error in an {@link ImageryProvider} or {@link TerrainProvider} by raising an event if it has any listeners, or by\n * logging the error to the console if the event has no listeners.  This method also tracks the number\n * of times the operation has been retried.\n *\n * @param {TileProviderError} previousError The error instance returned by this function the last\n *        time it was called for this error, or undefined if this is the first time this error has\n *        occurred.\n * @param {ImageryProvider|TerrainProvider} [provider] The imagery or terrain provider that encountered the error.\n * @param {Event} [event] The event to raise to inform listeners of the error.\n * @param {string} [message] The message describing the error.\n * @param {number} [x] The X coordinate of the tile that experienced the error, or undefined if the\n *        error is not specific to a particular tile.\n * @param {number} [y] The Y coordinate of the tile that experienced the error, or undefined if the\n *        error is not specific to a particular tile.\n * @param {number} [level] The level-of-detail of the tile that experienced the error, or undefined if the\n *        error is not specific to a particular tile.\n * @param {Error} [errorDetails] The error or exception that occurred, if any.\n * @returns {TileProviderError} The error instance that was passed to the event listeners and that\n *          should be passed to this function the next time it is called for the same error in order\n *          to track retry counts.\n */\nTileProviderError.reportError = function (\n  previousError,\n  provider,\n  event,\n  message,\n  x,\n  y,\n  level,\n  errorDetails,\n) {\n  let error = previousError;\n  if (!defined(previousError)) {\n    error = new TileProviderError(\n      provider,\n      message,\n      x,\n      y,\n      level,\n      0,\n      errorDetails,\n    );\n  } else {\n    error.provider = provider;\n    error.message = message;\n    error.x = x;\n    error.y = y;\n    error.level = level;\n    error.retry = false;\n    error.error = errorDetails;\n    ++error.timesRetried;\n  }\n\n  if (defined(event) && event.numberOfListeners > 0) {\n    event.raiseEvent(error);\n  } else if (defined(provider)) {\n    console.log(\n      `An error occurred in \"${provider.constructor.name}\": ${formatError(\n        message,\n      )}`,\n    );\n  }\n\n  return error;\n};\n\n/**\n * Reports success of an operation by resetting the retry count of a previous error, if any.  This way,\n * if the error occurs again in the future, the listeners will be informed that it has not yet been retried.\n *\n * @param {TileProviderError} previousError The previous error, or undefined if this operation has\n *        not previously resulted in an error.\n */\nTileProviderError.reportSuccess = function (previousError) {\n  if (defined(previousError)) {\n    previousError.timesRetried = -1;\n  }\n};\n\n/**\n * A function that will be called to retry the operation.\n * @callback TileProviderError.RetryFunction\n */\nexport default TileProviderError;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A tiling scheme for geometry or imagery on the surface of an ellipsoid.  At level-of-detail zero,\n * the coarsest, least-detailed level, the number of tiles is configurable.\n * At level of detail one, each of the level zero tiles has four children, two in each direction.\n * At level of detail two, each of the level one tiles has four children, two in each direction.\n * This continues for as many levels as are present in the geometry or imagery source.\n *\n * @alias TilingScheme\n * @constructor\n *\n * @see WebMercatorTilingScheme\n * @see GeographicTilingScheme\n */\nfunction TilingScheme(options) {\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"This type should not be instantiated directly.  Instead, use WebMercatorTilingScheme or GeographicTilingScheme.\",\n  );\n  //>>includeEnd('debug');\n}\n\nObject.defineProperties(TilingScheme.prototype, {\n  /**\n   * Gets the ellipsoid that is tiled by the tiling scheme.\n   * @memberof TilingScheme.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the rectangle, in radians, covered by this tiling scheme.\n   * @memberof TilingScheme.prototype\n   * @type {Rectangle}\n   */\n  rectangle: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the map projection used by the tiling scheme.\n   * @memberof TilingScheme.prototype\n   * @type {MapProjection}\n   */\n  projection: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\n * @function\n *\n * @param {number} level The level-of-detail.\n * @returns {number} The number of tiles in the X direction at the given level.\n */\nTilingScheme.prototype.getNumberOfXTilesAtLevel =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\n * @function\n *\n * @param {number} level The level-of-detail.\n * @returns {number} The number of tiles in the Y direction at the given level.\n */\nTilingScheme.prototype.getNumberOfYTilesAtLevel =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Transforms a rectangle specified in geodetic radians to the native coordinate system\n * of this tiling scheme.\n * @function\n *\n * @param {Rectangle} rectangle The rectangle to transform.\n * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result'\n *          is undefined.\n */\nTilingScheme.prototype.rectangleToNativeRectangle =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates\n * of the tiling scheme.\n * @function\n *\n * @param {number} x The integer x coordinate of the tile.\n * @param {number} y The integer y coordinate of the tile.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {object} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n *          if 'result' is undefined.\n */\nTilingScheme.prototype.tileXYToNativeRectangle =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Converts tile x, y coordinates and level to a cartographic rectangle in radians.\n * @function\n *\n * @param {number} x The integer x coordinate of the tile.\n * @param {number} y The integer y coordinate of the tile.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {object} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n *          if 'result' is undefined.\n */\nTilingScheme.prototype.tileXYToRectangle =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Calculates the tile x, y coordinates of the tile containing\n * a given cartographic position.\n * @function\n *\n * @param {Cartographic} position The position.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates\n *          if 'result' is undefined.\n */\nTilingScheme.prototype.positionToTileXY =\n  DeveloperError.throwInstantiationError;\nexport default TilingScheme;\n","/**\n * Constants for time conversions like those done by {@link JulianDate}.\n *\n * @namespace TimeConstants\n *\n * @see JulianDate\n *\n * @private\n */\nconst TimeConstants = {\n  /**\n   * The number of seconds in one millisecond: <code>0.001</code>\n   * @type {number}\n   * @constant\n   */\n  SECONDS_PER_MILLISECOND: 0.001,\n\n  /**\n   * The number of seconds in one minute: <code>60</code>.\n   * @type {number}\n   * @constant\n   */\n  SECONDS_PER_MINUTE: 60.0,\n\n  /**\n   * The number of minutes in one hour: <code>60</code>.\n   * @type {number}\n   * @constant\n   */\n  MINUTES_PER_HOUR: 60.0,\n\n  /**\n   * The number of hours in one day: <code>24</code>.\n   * @type {number}\n   * @constant\n   */\n  HOURS_PER_DAY: 24.0,\n\n  /**\n   * The number of seconds in one hour: <code>3600</code>.\n   * @type {number}\n   * @constant\n   */\n  SECONDS_PER_HOUR: 3600.0,\n\n  /**\n   * The number of minutes in one day: <code>1440</code>.\n   * @type {number}\n   * @constant\n   */\n  MINUTES_PER_DAY: 1440.0,\n\n  /**\n   * The number of seconds in one day, ignoring leap seconds: <code>86400</code>.\n   * @type {number}\n   * @constant\n   */\n  SECONDS_PER_DAY: 86400.0,\n\n  /**\n   * The number of days in one Julian century: <code>36525</code>.\n   * @type {number}\n   * @constant\n   */\n  DAYS_PER_JULIAN_CENTURY: 36525.0,\n\n  /**\n   * One trillionth of a second.\n   * @type {number}\n   * @constant\n   */\n  PICOSECOND: 0.000000001,\n\n  /**\n   * The number of days to subtract from a Julian date to determine the\n   * modified Julian date, which gives the number of days since midnight\n   * on November 17, 1858.\n   * @type {number}\n   * @constant\n   */\n  MODIFIED_JULIAN_DATE_DIFFERENCE: 2400000.5,\n};\nexport default Object.freeze(TimeConstants);\n","import Check from \"./Check.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport JulianDate from \"./JulianDate.js\";\n\n/**\n * An interval defined by a start and a stop time; optionally including those times as part of the interval.\n * Arbitrary data can optionally be associated with each instance for used with {@link TimeIntervalCollection}.\n *\n * @alias TimeInterval\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {JulianDate} [options.start=new JulianDate()] The start time of the interval.\n * @param {JulianDate} [options.stop=new JulianDate()] The stop time of the interval.\n * @param {boolean} [options.isStartIncluded=true] <code>true</code> if <code>options.start</code> is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.isStopIncluded=true] <code>true</code> if <code>options.stop</code> is included in the interval, <code>false</code> otherwise.\n * @param {object} [options.data] Arbitrary data associated with this interval.\n *\n * @example\n * // Create an instance that spans August 1st, 1980 and is associated\n * // with a Cartesian position.\n * const timeInterval = new Cesium.TimeInterval({\n *     start : Cesium.JulianDate.fromIso8601('1980-08-01T00:00:00Z'),\n *     stop : Cesium.JulianDate.fromIso8601('1980-08-02T00:00:00Z'),\n *     isStartIncluded : true,\n *     isStopIncluded : false,\n *     data : Cesium.Cartesian3.fromDegrees(39.921037, -75.170082)\n * });\n *\n * @example\n * // Create two instances from ISO 8601 intervals with associated numeric data\n * // then compute their intersection, summing the data they contain.\n * const left = Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '2000/2010',\n *     data : 2\n * });\n *\n * const right = Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '1995/2005',\n *     data : 3\n * });\n *\n * //The result of the below intersection will be an interval equivalent to\n * //const intersection = Cesium.TimeInterval.fromIso8601({\n * //  iso8601 : '2000/2005',\n * //  data : 5\n * //});\n * const intersection = new Cesium.TimeInterval();\n * Cesium.TimeInterval.intersect(left, right, intersection, function(leftData, rightData) {\n *     return leftData + rightData;\n * });\n *\n * @example\n * // Check if an interval contains a specific time.\n * const dateToCheck = Cesium.JulianDate.fromIso8601('1982-09-08T11:30:00Z');\n * const containsDate = Cesium.TimeInterval.contains(timeInterval, dateToCheck);\n */\nfunction TimeInterval(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  /**\n   * Gets or sets the start time of this interval.\n   * @type {JulianDate}\n   */\n  this.start = defined(options.start)\n    ? JulianDate.clone(options.start)\n    : new JulianDate();\n\n  /**\n   * Gets or sets the stop time of this interval.\n   * @type {JulianDate}\n   */\n  this.stop = defined(options.stop)\n    ? JulianDate.clone(options.stop)\n    : new JulianDate();\n\n  /**\n   * Gets or sets the data associated with this interval.\n   * @type {*}\n   */\n  this.data = options.data;\n\n  /**\n   * Gets or sets whether or not the start time is included in this interval.\n   * @type {boolean}\n   * @default true\n   */\n  this.isStartIncluded = options.isStartIncluded ?? true;\n\n  /**\n   * Gets or sets whether or not the stop time is included in this interval.\n   * @type {boolean}\n   * @default true\n   */\n  this.isStopIncluded = options.isStopIncluded ?? true;\n}\n\nObject.defineProperties(TimeInterval.prototype, {\n  /**\n   * Gets whether or not this interval is empty.\n   * @memberof TimeInterval.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isEmpty: {\n    get: function () {\n      const stopComparedToStart = JulianDate.compare(this.stop, this.start);\n      return (\n        stopComparedToStart < 0 ||\n        (stopComparedToStart === 0 &&\n          (!this.isStartIncluded || !this.isStopIncluded))\n      );\n    },\n  },\n});\n\nconst scratchInterval = {\n  start: undefined,\n  stop: undefined,\n  isStartIncluded: undefined,\n  isStopIncluded: undefined,\n  data: undefined,\n};\n\n/**\n * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} interval.\n *\n * @throws DeveloperError if options.iso8601 does not match proper formatting.\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.iso8601 An ISO 8601 interval.\n * @param {boolean} [options.isStartIncluded=true] <code>true</code> if <code>options.start</code> is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.isStopIncluded=true] <code>true</code> if <code>options.stop</code> is included in the interval, <code>false</code> otherwise.\n * @param {object} [options.data] Arbitrary data associated with this interval.\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @returns {TimeInterval} The modified result parameter or a new instance if none was provided.\n */\nTimeInterval.fromIso8601 = function (options, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.string(\"options.iso8601\", options.iso8601);\n  //>>includeEnd('debug');\n\n  const dates = options.iso8601.split(\"/\");\n  if (dates.length !== 2) {\n    throw new DeveloperError(\n      \"options.iso8601 is an invalid ISO 8601 interval.\",\n    );\n  }\n  const start = JulianDate.fromIso8601(dates[0]);\n  const stop = JulianDate.fromIso8601(dates[1]);\n  const isStartIncluded = options.isStartIncluded ?? true;\n  const isStopIncluded = options.isStopIncluded ?? true;\n  const data = options.data;\n\n  if (!defined(result)) {\n    scratchInterval.start = start;\n    scratchInterval.stop = stop;\n    scratchInterval.isStartIncluded = isStartIncluded;\n    scratchInterval.isStopIncluded = isStopIncluded;\n    scratchInterval.data = data;\n    return new TimeInterval(scratchInterval);\n  }\n\n  result.start = start;\n  result.stop = stop;\n  result.isStartIncluded = isStartIncluded;\n  result.isStopIncluded = isStopIncluded;\n  result.data = data;\n  return result;\n};\n\n/**\n * Creates an ISO8601 representation of the provided interval.\n *\n * @param {TimeInterval} timeInterval The interval to be converted.\n * @param {number} [precision] The number of fractional digits used to represent the seconds component.  By default, the most precise representation is used.\n * @returns {string} The ISO8601 representation of the provided interval.\n */\nTimeInterval.toIso8601 = function (timeInterval, precision) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"timeInterval\", timeInterval);\n  //>>includeEnd('debug');\n\n  return `${JulianDate.toIso8601(\n    timeInterval.start,\n    precision,\n  )}/${JulianDate.toIso8601(timeInterval.stop, precision)}`;\n};\n\n/**\n * Duplicates the provided instance.\n *\n * @param {TimeInterval} [timeInterval] The instance to clone.\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @returns {TimeInterval} The modified result parameter or a new instance if none was provided.\n */\nTimeInterval.clone = function (timeInterval, result) {\n  if (!defined(timeInterval)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    return new TimeInterval(timeInterval);\n  }\n  result.start = timeInterval.start;\n  result.stop = timeInterval.stop;\n  result.isStartIncluded = timeInterval.isStartIncluded;\n  result.isStopIncluded = timeInterval.isStopIncluded;\n  result.data = timeInterval.data;\n  return result;\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TimeInterval} [left] The first instance.\n * @param {TimeInterval} [right] The second instance.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals.  If omitted, reference equality is used.\n * @returns {boolean} <code>true</code> if the dates are equal; otherwise, <code>false</code>.\n */\nTimeInterval.equals = function (left, right, dataComparer) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      ((left.isEmpty && right.isEmpty) ||\n        (left.isStartIncluded === right.isStartIncluded &&\n          left.isStopIncluded === right.isStopIncluded &&\n          JulianDate.equals(left.start, right.start) &&\n          JulianDate.equals(left.stop, right.stop) &&\n          (left.data === right.data ||\n            (defined(dataComparer) && dataComparer(left.data, right.data))))))\n  );\n};\n\n/**\n * Compares two instances and returns <code>true</code> if they are within <code>epsilon</code> seconds of\n * each other.  That is, in order for the dates to be considered equal (and for\n * this function to return <code>true</code>), the absolute value of the difference between them, in\n * seconds, must be less than <code>epsilon</code>.\n *\n * @param {TimeInterval} [left] The first instance.\n * @param {TimeInterval} [right] The second instance.\n * @param {number} [epsilon=0] The maximum number of seconds that should separate the two instances.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals.  If omitted, reference equality is used.\n * @returns {boolean} <code>true</code> if the two dates are within <code>epsilon</code> seconds of each other; otherwise <code>false</code>.\n */\nTimeInterval.equalsEpsilon = function (left, right, epsilon, dataComparer) {\n  epsilon = epsilon ?? 0;\n\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      ((left.isEmpty && right.isEmpty) ||\n        (left.isStartIncluded === right.isStartIncluded &&\n          left.isStopIncluded === right.isStopIncluded &&\n          JulianDate.equalsEpsilon(left.start, right.start, epsilon) &&\n          JulianDate.equalsEpsilon(left.stop, right.stop, epsilon) &&\n          (left.data === right.data ||\n            (defined(dataComparer) && dataComparer(left.data, right.data))))))\n  );\n};\n\n/**\n * Computes the intersection of two intervals, optionally merging their data.\n *\n * @param {TimeInterval} left The first interval.\n * @param {TimeInterval} [right] The second interval.\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @param {TimeInterval.MergeCallback} [mergeCallback] A function which merges the data of the two intervals. If omitted, the data from the left interval will be used.\n * @returns {TimeInterval} The modified result parameter.\n */\nTimeInterval.intersect = function (left, right, result, mergeCallback) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  //>>includeEnd('debug');\n\n  if (!defined(right)) {\n    return TimeInterval.clone(TimeInterval.EMPTY, result);\n  }\n\n  const leftStart = left.start;\n  const leftStop = left.stop;\n\n  const rightStart = right.start;\n  const rightStop = right.stop;\n\n  const intersectsStartRight =\n    JulianDate.greaterThanOrEquals(rightStart, leftStart) &&\n    JulianDate.greaterThanOrEquals(leftStop, rightStart);\n  const intersectsStartLeft =\n    !intersectsStartRight &&\n    JulianDate.lessThanOrEquals(rightStart, leftStart) &&\n    JulianDate.lessThanOrEquals(leftStart, rightStop);\n\n  if (!intersectsStartRight && !intersectsStartLeft) {\n    return TimeInterval.clone(TimeInterval.EMPTY, result);\n  }\n\n  const leftIsStartIncluded = left.isStartIncluded;\n  const leftIsStopIncluded = left.isStopIncluded;\n  const rightIsStartIncluded = right.isStartIncluded;\n  const rightIsStopIncluded = right.isStopIncluded;\n  const leftLessThanRight = JulianDate.lessThan(leftStop, rightStop);\n\n  if (!defined(result)) {\n    result = new TimeInterval();\n  }\n\n  result.start = intersectsStartRight ? rightStart : leftStart;\n  result.isStartIncluded =\n    (leftIsStartIncluded && rightIsStartIncluded) ||\n    (!JulianDate.equals(rightStart, leftStart) &&\n      ((intersectsStartRight && rightIsStartIncluded) ||\n        (intersectsStartLeft && leftIsStartIncluded)));\n  result.stop = leftLessThanRight ? leftStop : rightStop;\n  result.isStopIncluded = leftLessThanRight\n    ? leftIsStopIncluded\n    : (leftIsStopIncluded && rightIsStopIncluded) ||\n      (!JulianDate.equals(rightStop, leftStop) && rightIsStopIncluded);\n  result.data = defined(mergeCallback)\n    ? mergeCallback(left.data, right.data)\n    : left.data;\n  return result;\n};\n\n/**\n * Checks if the specified date is inside the provided interval.\n *\n * @param {TimeInterval} timeInterval The interval.\n * @param {JulianDate} julianDate The date to check.\n * @returns {boolean} <code>true</code> if the interval contains the specified date, <code>false</code> otherwise.\n */\nTimeInterval.contains = function (timeInterval, julianDate) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"timeInterval\", timeInterval);\n  Check.typeOf.object(\"julianDate\", julianDate);\n  //>>includeEnd('debug');\n\n  if (timeInterval.isEmpty) {\n    return false;\n  }\n\n  const startComparedToDate = JulianDate.compare(\n    timeInterval.start,\n    julianDate,\n  );\n  if (startComparedToDate === 0) {\n    return timeInterval.isStartIncluded;\n  }\n\n  const dateComparedToStop = JulianDate.compare(julianDate, timeInterval.stop);\n  if (dateComparedToStop === 0) {\n    return timeInterval.isStopIncluded;\n  }\n\n  return startComparedToDate < 0 && dateComparedToStop < 0;\n};\n\n/**\n * Duplicates this instance.\n *\n * @param {TimeInterval} [result] An existing instance to use for the result.\n * @returns {TimeInterval} The modified result parameter or a new instance if none was provided.\n */\nTimeInterval.prototype.clone = function (result) {\n  return TimeInterval.clone(this, result);\n};\n\n/**\n * Compares this instance against the provided instance componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TimeInterval} [right] The right hand side interval.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals.  If omitted, reference equality is used.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nTimeInterval.prototype.equals = function (right, dataComparer) {\n  return TimeInterval.equals(this, right, dataComparer);\n};\n\n/**\n * Compares this instance against the provided instance componentwise and returns\n * <code>true</code> if they are within the provided epsilon,\n * <code>false</code> otherwise.\n *\n * @param {TimeInterval} [right] The right hand side interval.\n * @param {number} [epsilon=0] The epsilon to use for equality testing.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals.  If omitted, reference equality is used.\n * @returns {boolean} <code>true</code> if they are within the provided epsilon, <code>false</code> otherwise.\n */\nTimeInterval.prototype.equalsEpsilon = function (right, epsilon, dataComparer) {\n  return TimeInterval.equalsEpsilon(this, right, epsilon, dataComparer);\n};\n\n/**\n * Creates a string representing this TimeInterval in ISO8601 format.\n *\n * @returns {string} A string representing this TimeInterval in ISO8601 format.\n */\nTimeInterval.prototype.toString = function () {\n  return TimeInterval.toIso8601(this);\n};\n\n/**\n * An immutable empty interval.\n *\n * @type {TimeInterval}\n * @constant\n */\nTimeInterval.EMPTY = Object.freeze(\n  new TimeInterval({\n    start: new JulianDate(),\n    stop: new JulianDate(),\n    isStartIncluded: false,\n    isStopIncluded: false,\n  }),\n);\n\n/**\n * Function interface for merging interval data.\n * @callback TimeInterval.MergeCallback\n *\n * @param {*} leftData The first data instance.\n * @param {*} rightData The second data instance.\n * @returns {*} The result of merging the two data instances.\n */\n\n/**\n * Function interface for comparing interval data.\n * @callback TimeInterval.DataComparer\n * @param {*} leftData The first data instance.\n * @param {*} rightData The second data instance.\n * @returns {boolean} <code>true</code> if the provided instances are equal, <code>false</code> otherwise.\n */\nexport default TimeInterval;\n","import binarySearch from \"./binarySearch.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Event from \"./Event.js\";\nimport GregorianDate from \"./GregorianDate.js\";\nimport isLeapYear from \"./isLeapYear.js\";\nimport Iso8601 from \"./Iso8601.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport TimeInterval from \"./TimeInterval.js\";\n\nfunction compareIntervalStartTimes(left, right) {\n  return JulianDate.compare(left.start, right.start);\n}\n\n/**\n * A non-overlapping collection of {@link TimeInterval} instances sorted by start time.\n * @alias TimeIntervalCollection\n * @constructor\n *\n * @param {TimeInterval[]} [intervals] An array of intervals to add to the collection.\n */\nfunction TimeIntervalCollection(intervals) {\n  this._intervals = [];\n  this._changedEvent = new Event();\n\n  if (defined(intervals)) {\n    const length = intervals.length;\n    for (let i = 0; i < length; i++) {\n      this.addInterval(intervals[i]);\n    }\n  }\n}\n\nObject.defineProperties(TimeIntervalCollection.prototype, {\n  /**\n   * Gets an event that is raised whenever the collection of intervals change.\n   * @memberof TimeIntervalCollection.prototype\n   * @type {Event}\n   * @readonly\n   */\n  changedEvent: {\n    get: function () {\n      return this._changedEvent;\n    },\n  },\n\n  /**\n   * Gets the start time of the collection.\n   * @memberof TimeIntervalCollection.prototype\n   * @type {JulianDate}\n   * @readonly\n   */\n  start: {\n    get: function () {\n      const intervals = this._intervals;\n      return intervals.length === 0 ? undefined : intervals[0].start;\n    },\n  },\n\n  /**\n   * Gets whether or not the start time is included in the collection.\n   * @memberof TimeIntervalCollection.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isStartIncluded: {\n    get: function () {\n      const intervals = this._intervals;\n      return intervals.length === 0 ? false : intervals[0].isStartIncluded;\n    },\n  },\n\n  /**\n   * Gets the stop time of the collection.\n   * @memberof TimeIntervalCollection.prototype\n   * @type {JulianDate}\n   * @readonly\n   */\n  stop: {\n    get: function () {\n      const intervals = this._intervals;\n      const length = intervals.length;\n      return length === 0 ? undefined : intervals[length - 1].stop;\n    },\n  },\n\n  /**\n   * Gets whether or not the stop time is included in the collection.\n   * @memberof TimeIntervalCollection.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isStopIncluded: {\n    get: function () {\n      const intervals = this._intervals;\n      const length = intervals.length;\n      return length === 0 ? false : intervals[length - 1].isStopIncluded;\n    },\n  },\n\n  /**\n   * Gets the number of intervals in the collection.\n   * @memberof TimeIntervalCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._intervals.length;\n    },\n  },\n\n  /**\n   * Gets whether or not the collection is empty.\n   * @memberof TimeIntervalCollection.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isEmpty: {\n    get: function () {\n      return this._intervals.length === 0;\n    },\n  },\n});\n\n/**\n * Compares this instance against the provided instance componentwise and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TimeIntervalCollection} [right] The right hand side collection.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals.  If omitted, reference equality is used.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nTimeIntervalCollection.prototype.equals = function (right, dataComparer) {\n  if (this === right) {\n    return true;\n  }\n  if (!(right instanceof TimeIntervalCollection)) {\n    return false;\n  }\n  const intervals = this._intervals;\n  const rightIntervals = right._intervals;\n  const length = intervals.length;\n  if (length !== rightIntervals.length) {\n    return false;\n  }\n  for (let i = 0; i < length; i++) {\n    if (!TimeInterval.equals(intervals[i], rightIntervals[i], dataComparer)) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Gets the interval at the specified index.\n *\n * @param {number} index The index of the interval to retrieve.\n * @returns {TimeInterval|undefined} The interval at the specified index, or <code>undefined</code> if no interval exists as that index.\n */\nTimeIntervalCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._intervals[index];\n};\n\n/**\n * Removes all intervals from the collection.\n */\nTimeIntervalCollection.prototype.removeAll = function () {\n  if (this._intervals.length > 0) {\n    this._intervals.length = 0;\n    this._changedEvent.raiseEvent(this);\n  }\n};\n\n/**\n * Finds and returns the interval that contains the specified date.\n *\n * @param {JulianDate} date The date to search for.\n * @returns {TimeInterval|undefined} The interval containing the specified date, <code>undefined</code> if no such interval exists.\n */\nTimeIntervalCollection.prototype.findIntervalContainingDate = function (date) {\n  const index = this.indexOf(date);\n  return index >= 0 ? this._intervals[index] : undefined;\n};\n\n/**\n * Finds and returns the data for the interval that contains the specified date.\n *\n * @param {JulianDate} date The date to search for.\n * @returns {object} The data for the interval containing the specified date, or <code>undefined</code> if no such interval exists.\n */\nTimeIntervalCollection.prototype.findDataForIntervalContainingDate = function (\n  date,\n) {\n  const index = this.indexOf(date);\n  return index >= 0 ? this._intervals[index].data : undefined;\n};\n\n/**\n * Checks if the specified date is inside this collection.\n *\n * @param {JulianDate} julianDate The date to check.\n * @returns {boolean} <code>true</code> if the collection contains the specified date, <code>false</code> otherwise.\n */\nTimeIntervalCollection.prototype.contains = function (julianDate) {\n  return this.indexOf(julianDate) >= 0;\n};\n\nconst indexOfScratch = new TimeInterval();\n\n/**\n * Finds and returns the index of the interval in the collection that contains the specified date.\n *\n * @param {JulianDate} date The date to search for.\n * @returns {number} The index of the interval that contains the specified date, if no such interval exists,\n * it returns a negative number which is the bitwise complement of the index of the next interval that\n * starts after the date, or if no interval starts after the specified date, the bitwise complement of\n * the length of the collection.\n */\nTimeIntervalCollection.prototype.indexOf = function (date) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(date)) {\n    throw new DeveloperError(\"date is required\");\n  }\n  //>>includeEnd('debug');\n\n  const intervals = this._intervals;\n  indexOfScratch.start = date;\n  indexOfScratch.stop = date;\n  let index = binarySearch(\n    intervals,\n    indexOfScratch,\n    compareIntervalStartTimes,\n  );\n  if (index >= 0) {\n    if (intervals[index].isStartIncluded) {\n      return index;\n    }\n\n    if (\n      index > 0 &&\n      intervals[index - 1].stop.equals(date) &&\n      intervals[index - 1].isStopIncluded\n    ) {\n      return index - 1;\n    }\n    return ~index;\n  }\n\n  index = ~index;\n  if (\n    index > 0 &&\n    index - 1 < intervals.length &&\n    TimeInterval.contains(intervals[index - 1], date)\n  ) {\n    return index - 1;\n  }\n  return ~index;\n};\n\n/**\n * Returns the first interval in the collection that matches the specified parameters.\n * All parameters are optional and <code>undefined</code> parameters are treated as a don't care condition.\n *\n * @param {object} [options] Object with the following properties:\n * @param {JulianDate} [options.start] The start time of the interval.\n * @param {JulianDate} [options.stop] The stop time of the interval.\n * @param {boolean} [options.isStartIncluded] <code>true</code> if <code>options.start</code> is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.isStopIncluded] <code>true</code> if <code>options.stop</code> is included in the interval, <code>false</code> otherwise.\n * @returns {TimeInterval|undefined} The first interval in the collection that matches the specified parameters.\n */\nTimeIntervalCollection.prototype.findInterval = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const start = options.start;\n  const stop = options.stop;\n  const isStartIncluded = options.isStartIncluded;\n  const isStopIncluded = options.isStopIncluded;\n\n  const intervals = this._intervals;\n  for (let i = 0, len = intervals.length; i < len; i++) {\n    const interval = intervals[i];\n    if (\n      (!defined(start) || interval.start.equals(start)) &&\n      (!defined(stop) || interval.stop.equals(stop)) &&\n      (!defined(isStartIncluded) ||\n        interval.isStartIncluded === isStartIncluded) &&\n      (!defined(isStopIncluded) || interval.isStopIncluded === isStopIncluded)\n    ) {\n      return intervals[i];\n    }\n  }\n  return undefined;\n};\n\n/**\n * Adds an interval to the collection, merging intervals that contain the same data and\n * splitting intervals of different data as needed in order to maintain a non-overlapping collection.\n * The data in the new interval takes precedence over any existing intervals in the collection.\n *\n * @param {TimeInterval} interval The interval to add.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals.  If omitted, reference equality is used.\n */\nTimeIntervalCollection.prototype.addInterval = function (\n  interval,\n  dataComparer,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(interval)) {\n    throw new DeveloperError(\"interval is required\");\n  }\n  //>>includeEnd('debug');\n\n  if (interval.isEmpty) {\n    return;\n  }\n\n  const intervals = this._intervals;\n\n  // Handle the common case quickly: we're adding a new interval which is after all existing intervals.\n  if (\n    intervals.length === 0 ||\n    JulianDate.greaterThan(interval.start, intervals[intervals.length - 1].stop)\n  ) {\n    intervals.push(interval);\n    this._changedEvent.raiseEvent(this);\n    return;\n  }\n\n  // Keep the list sorted by the start date\n  let index = binarySearch(intervals, interval, compareIntervalStartTimes);\n  if (index < 0) {\n    index = ~index;\n  } else {\n    // interval's start date exactly equals the start date of at least one interval in the collection.\n    // It could actually equal the start date of two intervals if one of them does not actually\n    // include the date.  In that case, the binary search could have found either.  We need to\n    // look at the surrounding intervals and their IsStartIncluded properties in order to make sure\n    // we're working with the correct interval.\n\n    // eslint-disable-next-line no-lonely-if\n    if (\n      index > 0 &&\n      interval.isStartIncluded &&\n      intervals[index - 1].isStartIncluded &&\n      intervals[index - 1].start.equals(interval.start)\n    ) {\n      --index;\n    } else if (\n      index < intervals.length &&\n      !interval.isStartIncluded &&\n      intervals[index].isStartIncluded &&\n      intervals[index].start.equals(interval.start)\n    ) {\n      ++index;\n    }\n  }\n\n  let comparison;\n  if (index > 0) {\n    // Not the first thing in the list, so see if the interval before this one\n    // overlaps this one.\n\n    comparison = JulianDate.compare(intervals[index - 1].stop, interval.start);\n    if (\n      comparison > 0 ||\n      (comparison === 0 &&\n        (intervals[index - 1].isStopIncluded || interval.isStartIncluded))\n    ) {\n      // There is an overlap\n      if (\n        defined(dataComparer)\n          ? dataComparer(intervals[index - 1].data, interval.data)\n          : intervals[index - 1].data === interval.data\n      ) {\n        // Overlapping intervals have the same data, so combine them\n        if (JulianDate.greaterThan(interval.stop, intervals[index - 1].stop)) {\n          interval = new TimeInterval({\n            start: intervals[index - 1].start,\n            stop: interval.stop,\n            isStartIncluded: intervals[index - 1].isStartIncluded,\n            isStopIncluded: interval.isStopIncluded,\n            data: interval.data,\n          });\n        } else {\n          interval = new TimeInterval({\n            start: intervals[index - 1].start,\n            stop: intervals[index - 1].stop,\n            isStartIncluded: intervals[index - 1].isStartIncluded,\n            isStopIncluded:\n              intervals[index - 1].isStopIncluded ||\n              (interval.stop.equals(intervals[index - 1].stop) &&\n                interval.isStopIncluded),\n            data: interval.data,\n          });\n        }\n        intervals.splice(index - 1, 1);\n        --index;\n      } else {\n        // Overlapping intervals have different data.  The new interval\n        // being added 'wins' so truncate the previous interval.\n        // If the existing interval extends past the end of the new one,\n        // split the existing interval into two intervals.\n        comparison = JulianDate.compare(\n          intervals[index - 1].stop,\n          interval.stop,\n        );\n        if (\n          comparison > 0 ||\n          (comparison === 0 &&\n            intervals[index - 1].isStopIncluded &&\n            !interval.isStopIncluded)\n        ) {\n          intervals.splice(\n            index,\n            0,\n            new TimeInterval({\n              start: interval.stop,\n              stop: intervals[index - 1].stop,\n              isStartIncluded: !interval.isStopIncluded,\n              isStopIncluded: intervals[index - 1].isStopIncluded,\n              data: intervals[index - 1].data,\n            }),\n          );\n        }\n        intervals[index - 1] = new TimeInterval({\n          start: intervals[index - 1].start,\n          stop: interval.start,\n          isStartIncluded: intervals[index - 1].isStartIncluded,\n          isStopIncluded: !interval.isStartIncluded,\n          data: intervals[index - 1].data,\n        });\n      }\n    }\n  }\n\n  while (index < intervals.length) {\n    // Not the last thing in the list, so see if the intervals after this one overlap this one.\n    comparison = JulianDate.compare(interval.stop, intervals[index].start);\n    if (\n      comparison > 0 ||\n      (comparison === 0 &&\n        (interval.isStopIncluded || intervals[index].isStartIncluded))\n    ) {\n      // There is an overlap\n      if (\n        defined(dataComparer)\n          ? dataComparer(intervals[index].data, interval.data)\n          : intervals[index].data === interval.data\n      ) {\n        // Overlapping intervals have the same data, so combine them\n        interval = new TimeInterval({\n          start: interval.start,\n          stop: JulianDate.greaterThan(intervals[index].stop, interval.stop)\n            ? intervals[index].stop\n            : interval.stop,\n          isStartIncluded: interval.isStartIncluded,\n          isStopIncluded: JulianDate.greaterThan(\n            intervals[index].stop,\n            interval.stop,\n          )\n            ? intervals[index].isStopIncluded\n            : interval.isStopIncluded,\n          data: interval.data,\n        });\n        intervals.splice(index, 1);\n      } else {\n        // Overlapping intervals have different data.  The new interval\n        // being added 'wins' so truncate the next interval.\n        intervals[index] = new TimeInterval({\n          start: interval.stop,\n          stop: intervals[index].stop,\n          isStartIncluded: !interval.isStopIncluded,\n          isStopIncluded: intervals[index].isStopIncluded,\n          data: intervals[index].data,\n        });\n\n        if (intervals[index].isEmpty) {\n          intervals.splice(index, 1);\n        } else {\n          // Found a partial span, so it is not possible for the next\n          // interval to be spanned at all.  Stop looking.\n          break;\n        }\n      }\n    } else {\n      // Found the last one we're spanning, so stop looking.\n      break;\n    }\n  }\n\n  // Add the new interval\n  intervals.splice(index, 0, interval);\n  this._changedEvent.raiseEvent(this);\n};\n\n/**\n * Removes the specified interval from this interval collection, creating a hole over the specified interval.\n * The data property of the input interval is ignored.\n *\n * @param {TimeInterval} interval The interval to remove.\n * @returns {boolean} <code>true</code> if the interval was removed, <code>false</code> if no part of the interval was in the collection.\n */\nTimeIntervalCollection.prototype.removeInterval = function (interval) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(interval)) {\n    throw new DeveloperError(\"interval is required\");\n  }\n  //>>includeEnd('debug');\n\n  if (interval.isEmpty) {\n    return false;\n  }\n\n  const intervals = this._intervals;\n\n  let index = binarySearch(intervals, interval, compareIntervalStartTimes);\n  if (index < 0) {\n    index = ~index;\n  }\n\n  let result = false;\n\n  // Check for truncation of the end of the previous interval.\n  if (\n    index > 0 &&\n    (JulianDate.greaterThan(intervals[index - 1].stop, interval.start) ||\n      (intervals[index - 1].stop.equals(interval.start) &&\n        intervals[index - 1].isStopIncluded &&\n        interval.isStartIncluded))\n  ) {\n    result = true;\n\n    if (\n      JulianDate.greaterThan(intervals[index - 1].stop, interval.stop) ||\n      (intervals[index - 1].isStopIncluded &&\n        !interval.isStopIncluded &&\n        intervals[index - 1].stop.equals(interval.stop))\n    ) {\n      // Break the existing interval into two pieces\n      intervals.splice(\n        index,\n        0,\n        new TimeInterval({\n          start: interval.stop,\n          stop: intervals[index - 1].stop,\n          isStartIncluded: !interval.isStopIncluded,\n          isStopIncluded: intervals[index - 1].isStopIncluded,\n          data: intervals[index - 1].data,\n        }),\n      );\n    }\n    intervals[index - 1] = new TimeInterval({\n      start: intervals[index - 1].start,\n      stop: interval.start,\n      isStartIncluded: intervals[index - 1].isStartIncluded,\n      isStopIncluded: !interval.isStartIncluded,\n      data: intervals[index - 1].data,\n    });\n  }\n\n  // Check if the Start of the current interval should remain because interval.start is the same but\n  // it is not included.\n  if (\n    index < intervals.length &&\n    !interval.isStartIncluded &&\n    intervals[index].isStartIncluded &&\n    interval.start.equals(intervals[index].start)\n  ) {\n    result = true;\n\n    intervals.splice(\n      index,\n      0,\n      new TimeInterval({\n        start: intervals[index].start,\n        stop: intervals[index].start,\n        isStartIncluded: true,\n        isStopIncluded: true,\n        data: intervals[index].data,\n      }),\n    );\n    ++index;\n  }\n\n  // Remove any intervals that are completely overlapped by the input interval.\n  while (\n    index < intervals.length &&\n    JulianDate.greaterThan(interval.stop, intervals[index].stop)\n  ) {\n    result = true;\n    intervals.splice(index, 1);\n  }\n\n  // Check for the case where the input interval ends on the same date\n  // as an existing interval.\n  if (index < intervals.length && interval.stop.equals(intervals[index].stop)) {\n    result = true;\n\n    if (!interval.isStopIncluded && intervals[index].isStopIncluded) {\n      // Last point of interval should remain because the stop date is included in\n      // the existing interval but is not included in the input interval.\n      if (\n        index + 1 < intervals.length &&\n        intervals[index + 1].start.equals(interval.stop) &&\n        intervals[index].data === intervals[index + 1].data\n      ) {\n        // Combine single point with the next interval\n        intervals.splice(index, 1);\n        intervals[index] = new TimeInterval({\n          start: intervals[index].start,\n          stop: intervals[index].stop,\n          isStartIncluded: true,\n          isStopIncluded: intervals[index].isStopIncluded,\n          data: intervals[index].data,\n        });\n      } else {\n        intervals[index] = new TimeInterval({\n          start: interval.stop,\n          stop: interval.stop,\n          isStartIncluded: true,\n          isStopIncluded: true,\n          data: intervals[index].data,\n        });\n      }\n    } else {\n      // Interval is completely overlapped\n      intervals.splice(index, 1);\n    }\n  }\n\n  // Truncate any partially-overlapped intervals.\n  if (\n    index < intervals.length &&\n    (JulianDate.greaterThan(interval.stop, intervals[index].start) ||\n      (interval.stop.equals(intervals[index].start) &&\n        interval.isStopIncluded &&\n        intervals[index].isStartIncluded))\n  ) {\n    result = true;\n    intervals[index] = new TimeInterval({\n      start: interval.stop,\n      stop: intervals[index].stop,\n      isStartIncluded: !interval.isStopIncluded,\n      isStopIncluded: intervals[index].isStopIncluded,\n      data: intervals[index].data,\n    });\n  }\n\n  if (result) {\n    this._changedEvent.raiseEvent(this);\n  }\n\n  return result;\n};\n\n/**\n * Creates a new instance that is the intersection of this collection and the provided collection.\n *\n * @param {TimeIntervalCollection} other The collection to intersect with.\n * @param {TimeInterval.DataComparer} [dataComparer] A function which compares the data of the two intervals.  If omitted, reference equality is used.\n * @param {TimeInterval.MergeCallback} [mergeCallback] A function which merges the data of the two intervals. If omitted, the data from the left interval will be used.\n * @returns {TimeIntervalCollection} A new TimeIntervalCollection which is the intersection of this collection and the provided collection.\n */\nTimeIntervalCollection.prototype.intersect = function (\n  other,\n  dataComparer,\n  mergeCallback,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(other)) {\n    throw new DeveloperError(\"other is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const result = new TimeIntervalCollection();\n  let left = 0;\n  let right = 0;\n  const intervals = this._intervals;\n  const otherIntervals = other._intervals;\n\n  while (left < intervals.length && right < otherIntervals.length) {\n    const leftInterval = intervals[left];\n    const rightInterval = otherIntervals[right];\n    if (JulianDate.lessThan(leftInterval.stop, rightInterval.start)) {\n      ++left;\n    } else if (JulianDate.lessThan(rightInterval.stop, leftInterval.start)) {\n      ++right;\n    } else {\n      // The following will return an intersection whose data is 'merged' if the callback is defined\n      if (\n        defined(mergeCallback) ||\n        (defined(dataComparer) &&\n          dataComparer(leftInterval.data, rightInterval.data)) ||\n        (!defined(dataComparer) && rightInterval.data === leftInterval.data)\n      ) {\n        const intersection = TimeInterval.intersect(\n          leftInterval,\n          rightInterval,\n          new TimeInterval(),\n          mergeCallback,\n        );\n        if (!intersection.isEmpty) {\n          // Since we start with an empty collection for 'result', and there are no overlapping intervals in 'this' (as a rule),\n          // the 'intersection' will never overlap with a previous interval in 'result'.  So, no need to do any additional 'merging'.\n          result.addInterval(intersection, dataComparer);\n        }\n      }\n\n      if (\n        JulianDate.lessThan(leftInterval.stop, rightInterval.stop) ||\n        (leftInterval.stop.equals(rightInterval.stop) &&\n          !leftInterval.isStopIncluded &&\n          rightInterval.isStopIncluded)\n      ) {\n        ++left;\n      } else {\n        ++right;\n      }\n    }\n  }\n  return result;\n};\n\n/**\n * Creates a new instance from a JulianDate array.\n *\n * @param {object} options Object with the following properties:\n * @param {JulianDate[]} options.julianDates An array of ISO 8601 dates.\n * @param {boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time,  <code>false</code> otherwise.\n * @param {boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE,  <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromJulianDateArray = function (options, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options)) {\n    throw new DeveloperError(\"options is required.\");\n  }\n  if (!defined(options.julianDates)) {\n    throw new DeveloperError(\"options.iso8601Array is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new TimeIntervalCollection();\n  }\n\n  const julianDates = options.julianDates;\n  const length = julianDates.length;\n  const dataCallback = options.dataCallback;\n\n  const isStartIncluded = options.isStartIncluded ?? true;\n  const isStopIncluded = options.isStopIncluded ?? true;\n  const leadingInterval = options.leadingInterval ?? false;\n  const trailingInterval = options.trailingInterval ?? false;\n  let interval;\n\n  // Add a default interval, which will only end up being used up to first interval\n  let startIndex = 0;\n  if (leadingInterval) {\n    ++startIndex;\n    interval = new TimeInterval({\n      start: Iso8601.MINIMUM_VALUE,\n      stop: julianDates[0],\n      isStartIncluded: true,\n      isStopIncluded: !isStartIncluded,\n    });\n    interval.data = defined(dataCallback)\n      ? dataCallback(interval, result.length)\n      : result.length;\n    result.addInterval(interval);\n  }\n\n  for (let i = 0; i < length - 1; ++i) {\n    let startDate = julianDates[i];\n    const endDate = julianDates[i + 1];\n\n    interval = new TimeInterval({\n      start: startDate,\n      stop: endDate,\n      isStartIncluded: result.length === startIndex ? isStartIncluded : true,\n      isStopIncluded: i === length - 2 ? isStopIncluded : false,\n    });\n    interval.data = defined(dataCallback)\n      ? dataCallback(interval, result.length)\n      : result.length;\n    result.addInterval(interval);\n\n    startDate = endDate;\n  }\n\n  if (trailingInterval) {\n    interval = new TimeInterval({\n      start: julianDates[length - 1],\n      stop: Iso8601.MAXIMUM_VALUE,\n      isStartIncluded: !isStopIncluded,\n      isStopIncluded: true,\n    });\n    interval.data = defined(dataCallback)\n      ? dataCallback(interval, result.length)\n      : result.length;\n    result.addInterval(interval);\n  }\n\n  return result;\n};\n\nconst scratchGregorianDate = new GregorianDate();\nconst monthLengths = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n/**\n * Adds duration represented as a GregorianDate to a JulianDate\n *\n * @param {JulianDate} julianDate The date.\n * @param {GregorianDate} duration An duration represented as a GregorianDate.\n * @param {JulianDate} result An existing instance to use for the result.\n * @returns {JulianDate} The modified result parameter.\n *\n * @private\n */\nfunction addToDate(julianDate, duration, result) {\n  if (!defined(result)) {\n    result = new JulianDate();\n  }\n  JulianDate.toGregorianDate(julianDate, scratchGregorianDate);\n\n  let millisecond = scratchGregorianDate.millisecond + duration.millisecond;\n  let second = scratchGregorianDate.second + duration.second;\n  let minute = scratchGregorianDate.minute + duration.minute;\n  let hour = scratchGregorianDate.hour + duration.hour;\n  let day = scratchGregorianDate.day + duration.day;\n  let month = scratchGregorianDate.month + duration.month;\n  let year = scratchGregorianDate.year + duration.year;\n\n  if (millisecond >= 1000) {\n    second += Math.floor(millisecond / 1000);\n    millisecond = millisecond % 1000;\n  }\n\n  if (second >= 60) {\n    minute += Math.floor(second / 60);\n    second = second % 60;\n  }\n\n  if (minute >= 60) {\n    hour += Math.floor(minute / 60);\n    minute = minute % 60;\n  }\n\n  if (hour >= 24) {\n    day += Math.floor(hour / 24);\n    hour = hour % 24;\n  }\n\n  // If days is greater than the month's length we need to remove those number of days,\n  //  readjust month and year and repeat until days is less than the month's length.\n  monthLengths[2] = isLeapYear(year) ? 29 : 28;\n  while (day > monthLengths[month] || month >= 13) {\n    if (day > monthLengths[month]) {\n      day -= monthLengths[month];\n      ++month;\n    }\n\n    if (month >= 13) {\n      --month;\n      year += Math.floor(month / 12);\n      month = month % 12;\n      ++month;\n    }\n\n    monthLengths[2] = isLeapYear(year) ? 29 : 28;\n  }\n\n  scratchGregorianDate.millisecond = millisecond;\n  scratchGregorianDate.second = second;\n  scratchGregorianDate.minute = minute;\n  scratchGregorianDate.hour = hour;\n  scratchGregorianDate.day = day;\n  scratchGregorianDate.month = month;\n  scratchGregorianDate.year = year;\n\n  return JulianDate.fromGregorianDate(scratchGregorianDate, result);\n}\n\nconst scratchJulianDate = new JulianDate();\nconst durationRegex =\n  /P(?:([\\d.,]+)Y)?(?:([\\d.,]+)M)?(?:([\\d.,]+)W)?(?:([\\d.,]+)D)?(?:T(?:([\\d.,]+)H)?(?:([\\d.,]+)M)?(?:([\\d.,]+)S)?)?/;\n\n/**\n * Parses ISO8601 duration string\n *\n * @param {string} iso8601 An ISO 8601 duration.\n * @param {GregorianDate} result An existing instance to use for the result.\n * @returns {boolean} True is parsing succeeded, false otherwise\n *\n * @private\n */\nfunction parseDuration(iso8601, result) {\n  if (!defined(iso8601) || iso8601.length === 0) {\n    return false;\n  }\n\n  // Reset object\n  result.year = 0;\n  result.month = 0;\n  result.day = 0;\n  result.hour = 0;\n  result.minute = 0;\n  result.second = 0;\n  result.millisecond = 0;\n\n  if (iso8601[0] === \"P\") {\n    const matches = iso8601.match(durationRegex);\n    if (!defined(matches)) {\n      return false;\n    }\n    if (defined(matches[1])) {\n      // Years\n      result.year = Number(matches[1].replace(\",\", \".\"));\n    }\n    if (defined(matches[2])) {\n      // Months\n      result.month = Number(matches[2].replace(\",\", \".\"));\n    }\n    if (defined(matches[3])) {\n      // Weeks\n      result.day = Number(matches[3].replace(\",\", \".\")) * 7;\n    }\n    if (defined(matches[4])) {\n      // Days\n      result.day += Number(matches[4].replace(\",\", \".\"));\n    }\n    if (defined(matches[5])) {\n      // Hours\n      result.hour = Number(matches[5].replace(\",\", \".\"));\n    }\n    if (defined(matches[6])) {\n      // Weeks\n      result.minute = Number(matches[6].replace(\",\", \".\"));\n    }\n    if (defined(matches[7])) {\n      // Seconds\n      const seconds = Number(matches[7].replace(\",\", \".\"));\n      result.second = Math.floor(seconds);\n      result.millisecond = (seconds % 1) * 1000;\n    }\n  } else {\n    // They can technically specify the duration as a normal date with some caveats. Try our best to load it.\n    if (iso8601[iso8601.length - 1] !== \"Z\") {\n      // It's not a date, its a duration, so it always has to be UTC\n      iso8601 += \"Z\";\n    }\n    JulianDate.toGregorianDate(\n      JulianDate.fromIso8601(iso8601, scratchJulianDate),\n      result,\n    );\n  }\n\n  // A duration of 0 will cause an infinite loop, so just make sure something is non-zero\n  return (\n    result.year ||\n    result.month ||\n    result.day ||\n    result.hour ||\n    result.minute ||\n    result.second ||\n    result.millisecond\n  );\n}\n\nconst scratchDuration = new GregorianDate();\n/**\n * Creates a new instance from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} time interval (start/end/duration).\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.iso8601 An ISO 8601 interval.\n * @param {boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time,  <code>false</code> otherwise.\n * @param {boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE,  <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromIso8601 = function (options, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options)) {\n    throw new DeveloperError(\"options is required.\");\n  }\n  if (!defined(options.iso8601)) {\n    throw new DeveloperError(\"options.iso8601 is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const dates = options.iso8601.split(\"/\");\n  const start = JulianDate.fromIso8601(dates[0]);\n  const stop = JulianDate.fromIso8601(dates[1]);\n  const julianDates = [];\n\n  if (!parseDuration(dates[2], scratchDuration)) {\n    julianDates.push(start, stop);\n  } else {\n    let date = JulianDate.clone(start);\n    julianDates.push(date);\n    while (JulianDate.compare(date, stop) < 0) {\n      date = addToDate(date, scratchDuration);\n      const afterStop = JulianDate.compare(stop, date) <= 0;\n      if (afterStop) {\n        JulianDate.clone(stop, date);\n      }\n\n      julianDates.push(date);\n    }\n  }\n\n  return TimeIntervalCollection.fromJulianDateArray(\n    {\n      julianDates: julianDates,\n      isStartIncluded: options.isStartIncluded,\n      isStopIncluded: options.isStopIncluded,\n      leadingInterval: options.leadingInterval,\n      trailingInterval: options.trailingInterval,\n      dataCallback: options.dataCallback,\n    },\n    result,\n  );\n};\n\n/**\n * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date array.\n *\n * @param {object} options Object with the following properties:\n * @param {string[]} options.iso8601Dates An array of ISO 8601 dates.\n * @param {boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time,  <code>false</code> otherwise.\n * @param {boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE,  <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromIso8601DateArray = function (options, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options)) {\n    throw new DeveloperError(\"options is required.\");\n  }\n  if (!defined(options.iso8601Dates)) {\n    throw new DeveloperError(\"options.iso8601Dates is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return TimeIntervalCollection.fromJulianDateArray(\n    {\n      julianDates: options.iso8601Dates.map(function (date) {\n        return JulianDate.fromIso8601(date);\n      }),\n      isStartIncluded: options.isStartIncluded,\n      isStopIncluded: options.isStopIncluded,\n      leadingInterval: options.leadingInterval,\n      trailingInterval: options.trailingInterval,\n      dataCallback: options.dataCallback,\n    },\n    result,\n  );\n};\n\n/**\n * Creates a new instance from a {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} duration array.\n *\n * @param {object} options Object with the following properties:\n * @param {JulianDate} options.epoch An date that the durations are relative to.\n * @param {string} options.iso8601Durations An array of ISO 8601 durations.\n * @param {boolean} [options.relativeToPrevious=false] <code>true</code> if durations are relative to previous date, <code>false</code> if always relative to the epoch.\n * @param {boolean} [options.isStartIncluded=true] <code>true</code> if start time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.isStopIncluded=true] <code>true</code> if stop time is included in the interval, <code>false</code> otherwise.\n * @param {boolean} [options.leadingInterval=false] <code>true</code> if you want to add a interval from Iso8601.MINIMUM_VALUE to start time,  <code>false</code> otherwise.\n * @param {boolean} [options.trailingInterval=false] <code>true</code> if you want to add a interval from stop time to Iso8601.MAXIMUM_VALUE,  <code>false</code> otherwise.\n * @param {Function} [options.dataCallback] A function that will be return the data that is called with each interval before it is added to the collection. If unspecified, the data will be the index in the collection.\n * @param {TimeIntervalCollection} [result] An existing instance to use for the result.\n * @returns {TimeIntervalCollection} The modified result parameter or a new instance if none was provided.\n */\nTimeIntervalCollection.fromIso8601DurationArray = function (options, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options)) {\n    throw new DeveloperError(\"options is required.\");\n  }\n  if (!defined(options.epoch)) {\n    throw new DeveloperError(\"options.epoch is required.\");\n  }\n  if (!defined(options.iso8601Durations)) {\n    throw new DeveloperError(\"options.iso8601Durations is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const epoch = options.epoch;\n  const iso8601Durations = options.iso8601Durations;\n  const relativeToPrevious = options.relativeToPrevious ?? false;\n  const julianDates = [];\n  let date, previousDate;\n\n  const length = iso8601Durations.length;\n  for (let i = 0; i < length; ++i) {\n    // Allow a duration of 0 on the first iteration, because then it is just the epoch\n    if (parseDuration(iso8601Durations[i], scratchDuration) || i === 0) {\n      if (relativeToPrevious && defined(previousDate)) {\n        date = addToDate(previousDate, scratchDuration);\n      } else {\n        date = addToDate(epoch, scratchDuration);\n      }\n      julianDates.push(date);\n      previousDate = date;\n    }\n  }\n\n  return TimeIntervalCollection.fromJulianDateArray(\n    {\n      julianDates: julianDates,\n      isStartIncluded: options.isStartIncluded,\n      isStopIncluded: options.isStopIncluded,\n      leadingInterval: options.leadingInterval,\n      trailingInterval: options.trailingInterval,\n      dataCallback: options.dataCallback,\n    },\n    result,\n  );\n};\nexport default TimeIntervalCollection;\n","/**\n * Provides the type of time standards which JulianDate can take as input.\n *\n * @enum {number}\n *\n * @see JulianDate\n */\nconst TimeStandard = {\n  /**\n   * Represents the coordinated Universal Time (UTC) time standard.\n   *\n   * UTC is related to TAI according to the relationship\n   * <code>UTC = TAI - deltaT</code> where <code>deltaT</code> is the number of leap\n   * seconds which have been introduced as of the time in TAI.\n   *\n   * @type {number}\n   * @constant\n   */\n  UTC: 0,\n\n  /**\n   * Represents the International Atomic Time (TAI) time standard.\n   * TAI is the principal time standard to which the other time standards are related.\n   *\n   * @type {number}\n   * @constant\n   */\n  TAI: 1,\n};\nexport default Object.freeze(TimeStandard);\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Encapsulates an algorithm to optimize triangles for the post\n * vertex-shader cache.  This is based on the 2007 SIGGRAPH paper\n * 'Fast Triangle Reordering for Vertex Locality and Reduced Overdraw.'\n * The runtime is linear but several passes are made.\n *\n * @namespace Tipsify\n *\n * @see <a href='http://gfx.cs.princeton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf'>\n * Fast Triangle Reordering for Vertex Locality and Reduced Overdraw</a>\n * by Sander, Nehab, and Barczak\n *\n * @private\n */\nconst Tipsify = {};\n\n/**\n * Calculates the average cache miss ratio (ACMR) for a given set of indices.\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\n *                        in the vertex buffer that define the geometry's triangles.\n * @param {number} [options.maximumIndex] The maximum value of the elements in <code>args.indices</code>.\n *                                     If not supplied, this value will be computed.\n * @param {number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\n * @returns {number} The average cache miss ratio (ACMR).\n *\n * @exception {DeveloperError} indices length must be a multiple of three.\n * @exception {DeveloperError} cacheSize must be greater than two.\n *\n * @example\n * const indices = [0, 1, 2, 3, 4, 5];\n * const maxIndex = 5;\n * const cacheSize = 3;\n * const acmr = Cesium.Tipsify.calculateACMR({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\n */\nTipsify.calculateACMR = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const indices = options.indices;\n  let maximumIndex = options.maximumIndex;\n  const cacheSize = options.cacheSize ?? 24;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(indices)) {\n    throw new DeveloperError(\"indices is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const numIndices = indices.length;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numIndices < 3 || numIndices % 3 !== 0) {\n    throw new DeveloperError(\"indices length must be a multiple of three.\");\n  }\n  if (maximumIndex <= 0) {\n    throw new DeveloperError(\"maximumIndex must be greater than zero.\");\n  }\n  if (cacheSize < 3) {\n    throw new DeveloperError(\"cacheSize must be greater than two.\");\n  }\n  //>>includeEnd('debug');\n\n  // Compute the maximumIndex if not given\n  if (!defined(maximumIndex)) {\n    maximumIndex = 0;\n    let currentIndex = 0;\n    let intoIndices = indices[currentIndex];\n    while (currentIndex < numIndices) {\n      if (intoIndices > maximumIndex) {\n        maximumIndex = intoIndices;\n      }\n      ++currentIndex;\n      intoIndices = indices[currentIndex];\n    }\n  }\n\n  // Vertex time stamps\n  const vertexTimeStamps = [];\n  for (let i = 0; i < maximumIndex + 1; i++) {\n    vertexTimeStamps[i] = 0;\n  }\n\n  // Cache processing\n  let s = cacheSize + 1;\n  for (let j = 0; j < numIndices; ++j) {\n    if (s - vertexTimeStamps[indices[j]] > cacheSize) {\n      vertexTimeStamps[indices[j]] = s;\n      ++s;\n    }\n  }\n\n  return (s - cacheSize + 1) / (numIndices / 3);\n};\n\n/**\n * Optimizes triangles for the post-vertex shader cache.\n *\n * @param {object} options Object with the following properties:\n * @param {number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\n *                        in the vertex buffer that define the geometry's triangles.\n * @param {number} [options.maximumIndex] The maximum value of the elements in <code>args.indices</code>.\n *                                     If not supplied, this value will be computed.\n * @param {number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\n * @returns {number[]} A list of the input indices in an optimized order.\n *\n * @exception {DeveloperError} indices length must be a multiple of three.\n * @exception {DeveloperError} cacheSize must be greater than two.\n *\n * @example\n * const indices = [0, 1, 2, 3, 4, 5];\n * const maxIndex = 5;\n * const cacheSize = 3;\n * const reorderedIndices = Cesium.Tipsify.tipsify({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\n */\nTipsify.tipsify = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const indices = options.indices;\n  const maximumIndex = options.maximumIndex;\n  const cacheSize = options.cacheSize ?? 24;\n\n  let cursor;\n\n  function skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne) {\n    while (deadEnd.length >= 1) {\n      // while the stack is not empty\n      const d = deadEnd[deadEnd.length - 1]; // top of the stack\n      deadEnd.splice(deadEnd.length - 1, 1); // pop the stack\n\n      if (vertices[d].numLiveTriangles > 0) {\n        return d;\n      }\n    }\n\n    while (cursor < maximumIndexPlusOne) {\n      if (vertices[cursor].numLiveTriangles > 0) {\n        ++cursor;\n        return cursor - 1;\n      }\n      ++cursor;\n    }\n    return -1;\n  }\n\n  function getNextVertex(\n    indices,\n    cacheSize,\n    oneRing,\n    vertices,\n    s,\n    deadEnd,\n    maximumIndexPlusOne,\n  ) {\n    let n = -1;\n    let p;\n    let m = -1;\n    let itOneRing = 0;\n    while (itOneRing < oneRing.length) {\n      const index = oneRing[itOneRing];\n      if (vertices[index].numLiveTriangles) {\n        p = 0;\n        if (\n          s -\n            vertices[index].timeStamp +\n            2 * vertices[index].numLiveTriangles <=\n          cacheSize\n        ) {\n          p = s - vertices[index].timeStamp;\n        }\n        if (p > m || m === -1) {\n          m = p;\n          n = index;\n        }\n      }\n      ++itOneRing;\n    }\n    if (n === -1) {\n      return skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne);\n    }\n    return n;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(indices)) {\n    throw new DeveloperError(\"indices is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const numIndices = indices.length;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (numIndices < 3 || numIndices % 3 !== 0) {\n    throw new DeveloperError(\"indices length must be a multiple of three.\");\n  }\n  if (maximumIndex <= 0) {\n    throw new DeveloperError(\"maximumIndex must be greater than zero.\");\n  }\n  if (cacheSize < 3) {\n    throw new DeveloperError(\"cacheSize must be greater than two.\");\n  }\n  //>>includeEnd('debug');\n\n  // Determine maximum index\n  let maximumIndexPlusOne = 0;\n  let currentIndex = 0;\n  let intoIndices = indices[currentIndex];\n  const endIndex = numIndices;\n  if (defined(maximumIndex)) {\n    maximumIndexPlusOne = maximumIndex + 1;\n  } else {\n    while (currentIndex < endIndex) {\n      if (intoIndices > maximumIndexPlusOne) {\n        maximumIndexPlusOne = intoIndices;\n      }\n      ++currentIndex;\n      intoIndices = indices[currentIndex];\n    }\n    if (maximumIndexPlusOne === -1) {\n      return 0;\n    }\n    ++maximumIndexPlusOne;\n  }\n\n  // Vertices\n  const vertices = [];\n  let i;\n  for (i = 0; i < maximumIndexPlusOne; i++) {\n    vertices[i] = {\n      numLiveTriangles: 0,\n      timeStamp: 0,\n      vertexTriangles: [],\n    };\n  }\n  currentIndex = 0;\n  let triangle = 0;\n  while (currentIndex < endIndex) {\n    vertices[indices[currentIndex]].vertexTriangles.push(triangle);\n    ++vertices[indices[currentIndex]].numLiveTriangles;\n    vertices[indices[currentIndex + 1]].vertexTriangles.push(triangle);\n    ++vertices[indices[currentIndex + 1]].numLiveTriangles;\n    vertices[indices[currentIndex + 2]].vertexTriangles.push(triangle);\n    ++vertices[indices[currentIndex + 2]].numLiveTriangles;\n    ++triangle;\n    currentIndex += 3;\n  }\n\n  // Starting index\n  let f = 0;\n\n  // Time Stamp\n  let s = cacheSize + 1;\n  cursor = 1;\n\n  // Process\n  let oneRing = [];\n  const deadEnd = []; //Stack\n  let vertex;\n  let intoVertices;\n  let currentOutputIndex = 0;\n  const outputIndices = [];\n  const numTriangles = numIndices / 3;\n  const triangleEmitted = [];\n  for (i = 0; i < numTriangles; i++) {\n    triangleEmitted[i] = false;\n  }\n  let index;\n  let limit;\n  while (f !== -1) {\n    oneRing = [];\n    intoVertices = vertices[f];\n    limit = intoVertices.vertexTriangles.length;\n    for (let k = 0; k < limit; ++k) {\n      triangle = intoVertices.vertexTriangles[k];\n      if (!triangleEmitted[triangle]) {\n        triangleEmitted[triangle] = true;\n        currentIndex = triangle + triangle + triangle;\n        for (let j = 0; j < 3; ++j) {\n          // Set this index as a possible next index\n          index = indices[currentIndex];\n          oneRing.push(index);\n          deadEnd.push(index);\n\n          // Output index\n          outputIndices[currentOutputIndex] = index;\n          ++currentOutputIndex;\n\n          // Cache processing\n          vertex = vertices[index];\n          --vertex.numLiveTriangles;\n          if (s - vertex.timeStamp > cacheSize) {\n            vertex.timeStamp = s;\n            ++s;\n          }\n          ++currentIndex;\n        }\n      }\n    }\n    f = getNextVertex(\n      indices,\n      cacheSize,\n      oneRing,\n      vertices,\n      s,\n      deadEnd,\n      maximumIndexPlusOne,\n    );\n  }\n\n  return outputIndices;\n};\nexport default Tipsify;\n","/**\n * Constants for identifying well-known tracking reference frames.\n *\n * @enum {number}\n */\nconst TrackingReferenceFrame = {\n  /**\n   * Auto-detect algorithm. The reference frame used to track the Entity will\n   * be automatically selected based on its trajectory: near-surface slow moving\n   * objects will be tracked in the entity's local east-north-up reference\n   * frame, while faster objects like satellites will use VVLH (Vehicle Velocity,\n   * Local Horizontal).\n   *\n   * @type {number}\n   * @constant\n   */\n  AUTODETECT: 0,\n\n  /**\n   * The entity's local East-North-Up reference frame.\n   *\n   * @type {number}\n   * @constant\n   */\n  ENU: 1,\n\n  /**\n   * The entity's inertial reference frame. If entity has no defined orientation\n   * property, it falls back to auto-detect algorithm.\n   *\n   * @type {number}\n   * @constant\n   */\n  INERTIAL: 2,\n\n  /**\n   * The entity's inertial reference frame with orientation fixed to its\n   * {@link VelocityOrientationProperty}, ignoring its own orientation.\n   *\n   * @type {number}\n   * @constant\n   */\n  VELOCITY: 3,\n};\nexport default Object.freeze(TrackingReferenceFrame);\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EarthOrientationParameters from \"./EarthOrientationParameters.js\";\nimport EarthOrientationParametersSample from \"./EarthOrientationParametersSample.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport HeadingPitchRoll from \"./HeadingPitchRoll.js\";\nimport Iau2006XysData from \"./Iau2006XysData.js\";\nimport Iau2006XysSample from \"./Iau2006XysSample.js\";\nimport JulianDate from \"./JulianDate.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Quaternion from \"./Quaternion.js\";\nimport TimeConstants from \"./TimeConstants.js\";\n\n/**\n * Contains functions for transforming positions to various reference frames.\n *\n * @namespace Transforms\n */\nconst Transforms = {};\n\nconst vectorProductLocalFrame = {\n  up: {\n    south: \"east\",\n    north: \"west\",\n    west: \"south\",\n    east: \"north\",\n  },\n  down: {\n    south: \"west\",\n    north: \"east\",\n    west: \"north\",\n    east: \"south\",\n  },\n  south: {\n    up: \"west\",\n    down: \"east\",\n    west: \"down\",\n    east: \"up\",\n  },\n  north: {\n    up: \"east\",\n    down: \"west\",\n    west: \"up\",\n    east: \"down\",\n  },\n  west: {\n    up: \"north\",\n    down: \"south\",\n    north: \"down\",\n    south: \"up\",\n  },\n  east: {\n    up: \"south\",\n    down: \"north\",\n    north: \"up\",\n    south: \"down\",\n  },\n};\n\nconst degeneratePositionLocalFrame = {\n  north: [-1, 0, 0],\n  east: [0, 1, 0],\n  up: [0, 0, 1],\n  south: [1, 0, 0],\n  west: [0, -1, 0],\n  down: [0, 0, -1],\n};\n\nconst localFrameToFixedFrameCache = {};\n\nconst scratchCalculateCartesian = {\n  east: new Cartesian3(),\n  north: new Cartesian3(),\n  up: new Cartesian3(),\n  west: new Cartesian3(),\n  south: new Cartesian3(),\n  down: new Cartesian3(),\n};\nlet scratchFirstCartesian = new Cartesian3();\nlet scratchSecondCartesian = new Cartesian3();\nlet scratchThirdCartesian = new Cartesian3();\n/**\n * Generates a function that computes a 4x4 transformation matrix from a reference frame\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * @param  {string} firstAxis  name of the first axis of the local reference frame. Must be\n *  'east', 'north', 'up', 'west', 'south' or 'down'.\n * @param  {string} secondAxis  name of the second axis of the local reference frame. Must be\n *  'east', 'north', 'up', 'west', 'south' or 'down'.\n * @return {Transforms.LocalFrameToFixedFrame} The function that will computes a\n * 4x4 transformation matrix from a reference frame, with first axis and second axis compliant with the parameters,\n */\nTransforms.localFrameToFixedFrameGenerator = function (firstAxis, secondAxis) {\n  if (\n    !vectorProductLocalFrame.hasOwnProperty(firstAxis) ||\n    !vectorProductLocalFrame[firstAxis].hasOwnProperty(secondAxis)\n  ) {\n    throw new DeveloperError(\n      \"firstAxis and secondAxis must be east, north, up, west, south or down.\",\n    );\n  }\n  const thirdAxis = vectorProductLocalFrame[firstAxis][secondAxis];\n\n  /**\n   * Computes a 4x4 transformation matrix from a reference frame\n   * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n   * @callback Transforms.LocalFrameToFixedFrame\n   * @param {Cartesian3} origin The center point of the local reference frame.\n   * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n   * @param {Matrix4} [result] The object onto which to store the result.\n   * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n   */\n  let resultat;\n  const hashAxis = firstAxis + secondAxis;\n  if (defined(localFrameToFixedFrameCache[hashAxis])) {\n    resultat = localFrameToFixedFrameCache[hashAxis];\n  } else {\n    resultat = function (origin, ellipsoid, result) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(origin)) {\n        throw new DeveloperError(\"origin is required.\");\n      }\n      if (isNaN(origin.x) || isNaN(origin.y) || isNaN(origin.z)) {\n        throw new DeveloperError(\"origin has a NaN component\");\n      }\n      //>>includeEnd('debug');\n      if (!defined(result)) {\n        result = new Matrix4();\n      }\n      if (\n        Cartesian3.equalsEpsilon(origin, Cartesian3.ZERO, CesiumMath.EPSILON14)\n      ) {\n        // If x, y, and z are zero, use the degenerate local frame, which is a special case\n        Cartesian3.unpack(\n          degeneratePositionLocalFrame[firstAxis],\n          0,\n          scratchFirstCartesian,\n        );\n        Cartesian3.unpack(\n          degeneratePositionLocalFrame[secondAxis],\n          0,\n          scratchSecondCartesian,\n        );\n        Cartesian3.unpack(\n          degeneratePositionLocalFrame[thirdAxis],\n          0,\n          scratchThirdCartesian,\n        );\n      } else if (\n        CesiumMath.equalsEpsilon(origin.x, 0.0, CesiumMath.EPSILON14) &&\n        CesiumMath.equalsEpsilon(origin.y, 0.0, CesiumMath.EPSILON14)\n      ) {\n        // If x and y are zero, assume origin is at a pole, which is a special case.\n        const sign = CesiumMath.sign(origin.z);\n\n        Cartesian3.unpack(\n          degeneratePositionLocalFrame[firstAxis],\n          0,\n          scratchFirstCartesian,\n        );\n        if (firstAxis !== \"east\" && firstAxis !== \"west\") {\n          Cartesian3.multiplyByScalar(\n            scratchFirstCartesian,\n            sign,\n            scratchFirstCartesian,\n          );\n        }\n\n        Cartesian3.unpack(\n          degeneratePositionLocalFrame[secondAxis],\n          0,\n          scratchSecondCartesian,\n        );\n        if (secondAxis !== \"east\" && secondAxis !== \"west\") {\n          Cartesian3.multiplyByScalar(\n            scratchSecondCartesian,\n            sign,\n            scratchSecondCartesian,\n          );\n        }\n\n        Cartesian3.unpack(\n          degeneratePositionLocalFrame[thirdAxis],\n          0,\n          scratchThirdCartesian,\n        );\n        if (thirdAxis !== \"east\" && thirdAxis !== \"west\") {\n          Cartesian3.multiplyByScalar(\n            scratchThirdCartesian,\n            sign,\n            scratchThirdCartesian,\n          );\n        }\n      } else {\n        ellipsoid = ellipsoid ?? Ellipsoid.default;\n        ellipsoid.geodeticSurfaceNormal(origin, scratchCalculateCartesian.up);\n\n        const up = scratchCalculateCartesian.up;\n        const east = scratchCalculateCartesian.east;\n        east.x = -origin.y;\n        east.y = origin.x;\n        east.z = 0.0;\n        Cartesian3.normalize(east, scratchCalculateCartesian.east);\n        Cartesian3.cross(up, east, scratchCalculateCartesian.north);\n\n        Cartesian3.multiplyByScalar(\n          scratchCalculateCartesian.up,\n          -1,\n          scratchCalculateCartesian.down,\n        );\n        Cartesian3.multiplyByScalar(\n          scratchCalculateCartesian.east,\n          -1,\n          scratchCalculateCartesian.west,\n        );\n        Cartesian3.multiplyByScalar(\n          scratchCalculateCartesian.north,\n          -1,\n          scratchCalculateCartesian.south,\n        );\n\n        scratchFirstCartesian = scratchCalculateCartesian[firstAxis];\n        scratchSecondCartesian = scratchCalculateCartesian[secondAxis];\n        scratchThirdCartesian = scratchCalculateCartesian[thirdAxis];\n      }\n      result[0] = scratchFirstCartesian.x;\n      result[1] = scratchFirstCartesian.y;\n      result[2] = scratchFirstCartesian.z;\n      result[3] = 0.0;\n      result[4] = scratchSecondCartesian.x;\n      result[5] = scratchSecondCartesian.y;\n      result[6] = scratchSecondCartesian.z;\n      result[7] = 0.0;\n      result[8] = scratchThirdCartesian.x;\n      result[9] = scratchThirdCartesian.y;\n      result[10] = scratchThirdCartesian.z;\n      result[11] = 0.0;\n      result[12] = origin.x;\n      result[13] = origin.y;\n      result[14] = origin.z;\n      result[15] = 1.0;\n      return result;\n    };\n    localFrameToFixedFrameCache[hashAxis] = resultat;\n  }\n  return resultat;\n};\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local east direction.</li>\n * <li>The <code>y</code> axis points in the local north direction.</li>\n * <li>The <code>z</code> axis points in the direction of the ellipsoid surface normal which passes through the position.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local east-north-up at cartographic (0.0, 0.0) to Earth's fixed frame.\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n */\nTransforms.eastNorthUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\n  \"east\",\n  \"north\",\n);\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an north-east-down axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local north direction.</li>\n * <li>The <code>y</code> axis points in the local east direction.</li>\n * <li>The <code>z</code> axis points in the opposite direction of the ellipsoid surface normal which passes through the position.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local north-east-down at cartographic (0.0, 0.0) to Earth's fixed frame.\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const transform = Cesium.Transforms.northEastDownToFixedFrame(center);\n */\nTransforms.northEastDownToFixedFrame =\n  Transforms.localFrameToFixedFrameGenerator(\"north\", \"east\");\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an north-up-east axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local north direction.</li>\n * <li>The <code>y</code> axis points in the direction of the ellipsoid surface normal which passes through the position.</li>\n * <li>The <code>z</code> axis points in the local east direction.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local north-up-east at cartographic (0.0, 0.0) to Earth's fixed frame.\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const transform = Cesium.Transforms.northUpEastToFixedFrame(center);\n */\nTransforms.northUpEastToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\n  \"north\",\n  \"up\",\n);\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with an north-west-up axes\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\n * The local axes are defined as:\n * <ul>\n * <li>The <code>x</code> axis points in the local north direction.</li>\n * <li>The <code>y</code> axis points in the local west direction.</li>\n * <li>The <code>z</code> axis points in the direction of the ellipsoid surface normal which passes through the position.</li>\n * </ul>\n *\n * @function\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local north-West-Up at cartographic (0.0, 0.0) to Earth's fixed frame.\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const transform = Cesium.Transforms.northWestUpToFixedFrame(center);\n */\nTransforms.northWestUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\n  \"north\",\n  \"west\",\n);\n\nconst scratchHPRQuaternion = new Quaternion();\nconst scratchScale = new Cartesian3(1.0, 1.0, 1.0);\nconst scratchHPRMatrix4 = new Matrix4();\n\n/**\n * Computes a 4x4 transformation matrix from a reference frame with axes computed from the heading-pitch-roll angles\n * centered at the provided origin to the provided ellipsoid's fixed reference frame. Heading is the rotation from the local east\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\n *\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\n *  matrix from a reference frame to the provided ellipsoid's fixed reference frame\n * @param {Matrix4} [result] The object onto which to store the result.\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\n *\n * @example\n * // Get the transform from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame.\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const heading = -Cesium.Math.PI_OVER_TWO;\n * const pitch = Cesium.Math.PI_OVER_FOUR;\n * const roll = 0.0;\n * const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);\n * const transform = Cesium.Transforms.headingPitchRollToFixedFrame(center, hpr);\n */\nTransforms.headingPitchRollToFixedFrame = function (\n  origin,\n  headingPitchRoll,\n  ellipsoid,\n  fixedFrameTransform,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"HeadingPitchRoll\", headingPitchRoll);\n  //>>includeEnd('debug');\n\n  fixedFrameTransform =\n    fixedFrameTransform ?? Transforms.eastNorthUpToFixedFrame;\n  const hprQuaternion = Quaternion.fromHeadingPitchRoll(\n    headingPitchRoll,\n    scratchHPRQuaternion,\n  );\n  const hprMatrix = Matrix4.fromTranslationQuaternionRotationScale(\n    Cartesian3.ZERO,\n    hprQuaternion,\n    scratchScale,\n    scratchHPRMatrix4,\n  );\n  result = fixedFrameTransform(origin, ellipsoid, result);\n  return Matrix4.multiply(result, hprMatrix, result);\n};\n\nconst scratchENUMatrix4 = new Matrix4();\nconst scratchHPRMatrix3 = new Matrix3();\n\n/**\n * Computes a quaternion from a reference frame with axes computed from the heading-pitch-roll angles\n * centered at the provided origin. Heading is the rotation from the local east\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\n *\n * @param {Cartesian3} origin The center point of the local reference frame.\n * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\n *  matrix from a reference frame to the provided ellipsoid's fixed reference frame\n * @param {Quaternion} [result] The object onto which to store the result.\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided.\n *\n * @example\n * // Get the quaternion from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame.\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const heading = -Cesium.Math.PI_OVER_TWO;\n * const pitch = Cesium.Math.PI_OVER_FOUR;\n * const roll = 0.0;\n * const hpr = new HeadingPitchRoll(heading, pitch, roll);\n * const quaternion = Cesium.Transforms.headingPitchRollQuaternion(center, hpr);\n */\nTransforms.headingPitchRollQuaternion = function (\n  origin,\n  headingPitchRoll,\n  ellipsoid,\n  fixedFrameTransform,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"HeadingPitchRoll\", headingPitchRoll);\n  //>>includeEnd('debug');\n\n  const transform = Transforms.headingPitchRollToFixedFrame(\n    origin,\n    headingPitchRoll,\n    ellipsoid,\n    fixedFrameTransform,\n    scratchENUMatrix4,\n  );\n  const rotation = Matrix4.getMatrix3(transform, scratchHPRMatrix3);\n  return Quaternion.fromRotationMatrix(rotation, result);\n};\n\nconst noScale = new Cartesian3(1.0, 1.0, 1.0);\nconst hprCenterScratch = new Cartesian3();\nconst ffScratch = new Matrix4();\nconst hprTransformScratch = new Matrix4();\nconst hprRotationScratch = new Matrix3();\nconst hprQuaternionScratch = new Quaternion();\n/**\n * Computes heading-pitch-roll angles from a transform in a particular reference frame. Heading is the rotation from the local east\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\n *\n * @param {Matrix4} transform The transform\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\n *  matrix from a reference frame to the provided ellipsoid's fixed reference frame\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if none was provided.\n */\nTransforms.fixedFrameToHeadingPitchRoll = function (\n  transform,\n  ellipsoid,\n  fixedFrameTransform,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"transform\", transform);\n  //>>includeEnd('debug');\n\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  fixedFrameTransform =\n    fixedFrameTransform ?? Transforms.eastNorthUpToFixedFrame;\n  if (!defined(result)) {\n    result = new HeadingPitchRoll();\n  }\n\n  const center = Matrix4.getTranslation(transform, hprCenterScratch);\n  if (Cartesian3.equals(center, Cartesian3.ZERO)) {\n    result.heading = 0;\n    result.pitch = 0;\n    result.roll = 0;\n    return result;\n  }\n  let toFixedFrame = Matrix4.inverseTransformation(\n    fixedFrameTransform(center, ellipsoid, ffScratch),\n    ffScratch,\n  );\n  let transformCopy = Matrix4.setScale(transform, noScale, hprTransformScratch);\n  transformCopy = Matrix4.setTranslation(\n    transformCopy,\n    Cartesian3.ZERO,\n    transformCopy,\n  );\n\n  toFixedFrame = Matrix4.multiply(toFixedFrame, transformCopy, toFixedFrame);\n  let quaternionRotation = Quaternion.fromRotationMatrix(\n    Matrix4.getMatrix3(toFixedFrame, hprRotationScratch),\n    hprQuaternionScratch,\n  );\n  quaternionRotation = Quaternion.normalize(\n    quaternionRotation,\n    quaternionRotation,\n  );\n\n  return HeadingPitchRoll.fromQuaternion(quaternionRotation, result);\n};\n\nconst gmstConstant0 = 6 * 3600 + 41 * 60 + 50.54841;\nconst gmstConstant1 = 8640184.812866;\nconst gmstConstant2 = 0.093104;\nconst gmstConstant3 = -6.2e-6;\nconst rateCoef = 1.1772758384668e-19;\nconst wgs84WRPrecessing = 7.2921158553e-5;\nconst twoPiOverSecondsInDay = CesiumMath.TWO_PI / 86400.0;\nlet dateInUtc = new JulianDate();\n\n/**\n * The default function to compute a rotation matrix to transform a point or vector from the International Celestial\n * Reference Frame (GCRF/ICRF) inertial frame axes to the central body, typically Earth, fixed frame axis at a given\n * time for use in lighting and transformation from inertial reference frames. This function may return undefined if\n * the data necessary to do the transformation is not yet loaded.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result.  If this parameter is\n *                  not specified, a new instance is created and returned.\n * @returns {Matrix3|undefined} The rotation matrix, or undefined if the data necessary to do the\n *                   transformation is not yet loaded.\n *\n * @example\n * // Set the default ICRF to fixed transformation to that of the Moon.\n * Cesium.Transforms.computeIcrfToCentralBodyFixedMatrix = Cesium.Transforms.computeIcrfToMoonFixedMatrix;\n *\n * @see Transforms.computeIcrfToFixedMatrix\n * @see Transforms.computeTemeToPseudoFixedMatrix\n * @see Transforms.computeIcrfToMoonFixedMatrix\n */\nTransforms.computeIcrfToCentralBodyFixedMatrix = function (date, result) {\n  let transformMatrix = Transforms.computeIcrfToFixedMatrix(date, result);\n  if (!defined(transformMatrix)) {\n    transformMatrix = Transforms.computeTemeToPseudoFixedMatrix(date, result);\n  }\n\n  return transformMatrix;\n};\n\n/**\n * Computes a rotation matrix to transform a point or vector from True Equator Mean Equinox (TEME) axes to the\n * pseudo-fixed axes at a given time.  This method treats the UT1 time standard as equivalent to UTC.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided.\n *\n * @example\n * //Set the view to the inertial frame.\n * scene.postUpdate.addEventListener(function(scene, time) {\n *    const now = Cesium.JulianDate.now();\n *    const offset = Cesium.Matrix4.multiplyByPoint(camera.transform, camera.position, new Cesium.Cartesian3());\n *    const transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Transforms.computeTemeToPseudoFixedMatrix(now));\n *    const inverseTransform = Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4());\n *    Cesium.Matrix4.multiplyByPoint(inverseTransform, offset, offset);\n *    camera.lookAtTransform(transform, offset);\n * });\n */\nTransforms.computeTemeToPseudoFixedMatrix = function (date, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(date)) {\n    throw new DeveloperError(\"date is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // GMST is actually computed using UT1.  We're using UTC as an approximation of UT1.\n  // We do not want to use the function like convertTaiToUtc in JulianDate because\n  // we explicitly do not want to fail when inside the leap second.\n\n  dateInUtc = JulianDate.addSeconds(\n    date,\n    -JulianDate.computeTaiMinusUtc(date),\n    dateInUtc,\n  );\n  const utcDayNumber = dateInUtc.dayNumber;\n  const utcSecondsIntoDay = dateInUtc.secondsOfDay;\n\n  let t;\n  const diffDays = utcDayNumber - 2451545;\n  if (utcSecondsIntoDay >= 43200.0) {\n    t = (diffDays + 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n  } else {\n    t = (diffDays - 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;\n  }\n\n  const gmst0 =\n    gmstConstant0 +\n    t * (gmstConstant1 + t * (gmstConstant2 + t * gmstConstant3));\n  const angle = (gmst0 * twoPiOverSecondsInDay) % CesiumMath.TWO_PI;\n  const ratio = wgs84WRPrecessing + rateCoef * (utcDayNumber - 2451545.5);\n  const secondsSinceMidnight =\n    (utcSecondsIntoDay + TimeConstants.SECONDS_PER_DAY * 0.5) %\n    TimeConstants.SECONDS_PER_DAY;\n  const gha = angle + ratio * secondsSinceMidnight;\n  const cosGha = Math.cos(gha);\n  const sinGha = Math.sin(gha);\n\n  if (!defined(result)) {\n    return new Matrix3(\n      cosGha,\n      sinGha,\n      0.0,\n      -sinGha,\n      cosGha,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    );\n  }\n  result[0] = cosGha;\n  result[1] = -sinGha;\n  result[2] = 0.0;\n  result[3] = sinGha;\n  result[4] = cosGha;\n  result[5] = 0.0;\n  result[6] = 0.0;\n  result[7] = 0.0;\n  result[8] = 1.0;\n  return result;\n};\n\n/**\n * The source of IAU 2006 XYS data, used for computing the transformation between the\n * Fixed and ICRF axes.\n * @type {Iau2006XysData}\n *\n * @see Transforms.computeIcrfToFixedMatrix\n * @see Transforms.computeFixedToIcrfMatrix\n *\n * @private\n */\nTransforms.iau2006XysData = new Iau2006XysData();\n\n/**\n * The source of Earth Orientation Parameters (EOP) data, used for computing the transformation\n * between the Fixed and ICRF axes.  By default, zero values are used for all EOP values,\n * yielding a reasonable but not completely accurate representation of the ICRF axes.\n * @type {EarthOrientationParameters}\n *\n * @see Transforms.computeIcrfToFixedMatrix\n * @see Transforms.computeFixedToIcrfMatrix\n *\n * @private\n */\nTransforms.earthOrientationParameters = EarthOrientationParameters.NONE;\n\nconst ttMinusTai = 32.184;\nconst j2000ttDays = 2451545.0;\n\n/**\n * Preloads the data necessary to transform between the ICRF and Fixed axes, in either\n * direction, over a given interval.  This function returns a promise that, when resolved,\n * indicates that the preload has completed.\n *\n * @param {TimeInterval} timeInterval The interval to preload.\n * @returns {Promise<void>} A promise that, when resolved, indicates that the preload has completed\n *          and evaluation of the transformation between the fixed and ICRF axes will\n *          no longer return undefined for a time inside the interval.\n *\n *\n * @example\n * const interval = new Cesium.TimeInterval(...);\n * await Cesium.Transforms.preloadIcrfFixed(interval));\n * // the data is now loaded\n *\n * @see Transforms.computeIcrfToFixedMatrix\n * @see Transforms.computeFixedToIcrfMatrix\n */\nTransforms.preloadIcrfFixed = function (timeInterval) {\n  const startDayTT = timeInterval.start.dayNumber;\n  const startSecondTT = timeInterval.start.secondsOfDay + ttMinusTai;\n  const stopDayTT = timeInterval.stop.dayNumber;\n  const stopSecondTT = timeInterval.stop.secondsOfDay + ttMinusTai;\n\n  return Transforms.iau2006XysData.preload(\n    startDayTT,\n    startSecondTT,\n    stopDayTT,\n    stopSecondTT,\n  );\n};\n\n/**\n * Computes a rotation matrix to transform a point or vector from the International Celestial\n * Reference Frame (GCRF/ICRF) inertial frame axes to the Earth-Fixed frame axes (ITRF)\n * at a given time.  This function may return undefined if the data necessary to\n * do the transformation is not yet loaded.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result.  If this parameter is\n *                  not specified, a new instance is created and returned.\n * @returns {Matrix3|undefined} The rotation matrix, or undefined if the data necessary to do the\n *                   transformation is not yet loaded.\n *\n *\n * @example\n * scene.postUpdate.addEventListener(function(scene, time) {\n *   // View in ICRF.\n *   const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);\n *   if (Cesium.defined(icrfToFixed)) {\n *     const offset = Cesium.Cartesian3.clone(camera.position);\n *     const transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\n *     camera.lookAtTransform(transform, offset);\n *   }\n * });\n *\n * @see Transforms.preloadIcrfFixed\n */\nTransforms.computeIcrfToFixedMatrix = function (date, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(date)) {\n    throw new DeveloperError(\"date is required.\");\n  }\n  //>>includeEnd('debug');\n  if (!defined(result)) {\n    result = new Matrix3();\n  }\n\n  const fixedToIcrfMtx = Transforms.computeFixedToIcrfMatrix(date, result);\n  if (!defined(fixedToIcrfMtx)) {\n    return undefined;\n  }\n\n  return Matrix3.transpose(fixedToIcrfMtx, result);\n};\n\nconst TdtMinusTai = 32.184;\nconst J2000d = 2451545;\nconst scratchHpr = new HeadingPitchRoll();\nconst scratchRotationMatrix = new Matrix3();\nconst dateScratch = new JulianDate();\n\n/**\n * Computes a rotation matrix to transform a point or vector from the Moon-Fixed frame axes\n * to the International Celestial Reference Frame (GCRF/ICRF) inertial frame axes\n * at a given time.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result.  If this parameter is\n *                  not specified, a new instance is created and returned.\n * @returns {Matrix3} The rotation matrix.\n *\n * @example\n * // Transform a point from the Fixed axes to the ICRF axes.\n * const now = Cesium.JulianDate.now();\n * const pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const fixedToIcrf = Cesium.Transforms.computeMoonFixedToIcrfMatrix(now);\n * let pointInInertial = new Cesium.Cartesian3();\n * if (Cesium.defined(fixedToIcrf)) {\n *     pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial);\n * }\n */\nTransforms.computeMoonFixedToIcrfMatrix = function (date, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(date)) {\n    throw new DeveloperError(\"date is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Matrix3();\n  }\n\n  // Converts TAI to TT\n  const secondsTT = JulianDate.addSeconds(date, TdtMinusTai, dateScratch);\n\n  // Converts TT to TDB, interval in days since the standard epoch\n  const d = JulianDate.totalDays(secondsTT) - J2000d;\n\n  // Compute the approximate rotation, using https://articles.adsabs.harvard.edu//full/1980CeMec..22..205D/0000209.000.html\n  const e1 = CesiumMath.toRadians(12.112) - CesiumMath.toRadians(0.052992) * d;\n  const e2 = CesiumMath.toRadians(24.224) - CesiumMath.toRadians(0.105984) * d;\n  const e3 = CesiumMath.toRadians(227.645) + CesiumMath.toRadians(13.012) * d;\n  const e4 =\n    CesiumMath.toRadians(261.105) + CesiumMath.toRadians(13.340716) * d;\n  const e5 = CesiumMath.toRadians(358.0) + CesiumMath.toRadians(0.9856) * d;\n\n  scratchHpr.pitch =\n    CesiumMath.toRadians(270.0 - 90) -\n    CesiumMath.toRadians(3.878) * Math.sin(e1) -\n    CesiumMath.toRadians(0.12) * Math.sin(e2) +\n    CesiumMath.toRadians(0.07) * Math.sin(e3) -\n    CesiumMath.toRadians(0.017) * Math.sin(e4);\n  scratchHpr.roll =\n    CesiumMath.toRadians(66.53 - 90) +\n    CesiumMath.toRadians(1.543) * Math.cos(e1) +\n    CesiumMath.toRadians(0.24) * Math.cos(e2) -\n    CesiumMath.toRadians(0.028) * Math.cos(e3) +\n    CesiumMath.toRadians(0.007) * Math.cos(e4);\n  scratchHpr.heading =\n    CesiumMath.toRadians(244.375 - 90) +\n    CesiumMath.toRadians(13.17635831) * d +\n    CesiumMath.toRadians(3.558) * Math.sin(e1) +\n    CesiumMath.toRadians(0.121) * Math.sin(e2) -\n    CesiumMath.toRadians(0.064) * Math.sin(e3) +\n    CesiumMath.toRadians(0.016) * Math.sin(e4) +\n    CesiumMath.toRadians(0.025) * Math.sin(e5);\n  return Matrix3.fromHeadingPitchRoll(scratchHpr, scratchRotationMatrix);\n};\n\n/**\n * Computes a rotation matrix to transform a point or vector from the International Celestial\n * Reference Frame (GCRF/ICRF) inertial frame axes to the Moon-Fixed frame axes\n * at a given time.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result.  If this parameter is\n *                  not specified, a new instance is created and returned.\n * @returns {Matrix3} The rotation matrix.\n *\n * @example\n * // Set the default ICRF to fixed transformation to that of the Moon.\n * Cesium.Transforms.computeIcrfToCentralBodyFixedMatrix = Cesium.Transforms.computeIcrfToMoonFixedMatrix;\n */\nTransforms.computeIcrfToMoonFixedMatrix = function (date, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(date)) {\n    throw new DeveloperError(\"date is required.\");\n  }\n  //>>includeEnd('debug');\n  if (!defined(result)) {\n    result = new Matrix3();\n  }\n\n  const fixedToIcrfMtx = Transforms.computeMoonFixedToIcrfMatrix(date, result);\n  if (!defined(fixedToIcrfMtx)) {\n    return undefined;\n  }\n\n  return Matrix3.transpose(fixedToIcrfMtx, result);\n};\n\nconst xysScratch = new Iau2006XysSample(0.0, 0.0, 0.0);\nconst eopScratch = new EarthOrientationParametersSample(\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n);\nconst rotation1Scratch = new Matrix3();\nconst rotation2Scratch = new Matrix3();\n\n/**\n * Computes a rotation matrix to transform a point or vector from the Earth-Fixed frame axes (ITRF)\n * to the International Celestial Reference Frame (GCRF/ICRF) inertial frame axes\n * at a given time.  This function may return undefined if the data necessary to\n * do the transformation is not yet loaded.\n *\n * @param {JulianDate} date The time at which to compute the rotation matrix.\n * @param {Matrix3} [result] The object onto which to store the result.  If this parameter is\n *                  not specified, a new instance is created and returned.\n * @returns {Matrix3|undefined} The rotation matrix, or undefined if the data necessary to do the\n *                   transformation is not yet loaded.\n *\n *\n * @example\n * // Transform a point from the Fixed axes to the ICRF axes.\n * const now = Cesium.JulianDate.now();\n * const pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const fixedToIcrf = Cesium.Transforms.computeFixedToIcrfMatrix(now);\n * let pointInInertial = new Cesium.Cartesian3();\n * if (Cesium.defined(fixedToIcrf)) {\n *     pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial);\n * }\n *\n * @see Transforms.preloadIcrfFixed\n */\nTransforms.computeFixedToIcrfMatrix = function (date, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(date)) {\n    throw new DeveloperError(\"date is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Matrix3();\n  }\n\n  // Compute pole wander\n  const eop = Transforms.earthOrientationParameters.compute(date, eopScratch);\n  if (!defined(eop)) {\n    return undefined;\n  }\n\n  // There is no external conversion to Terrestrial Time (TT).\n  // So use International Atomic Time (TAI) and convert using offsets.\n  // Here we are assuming that dayTT and secondTT are positive\n  const dayTT = date.dayNumber;\n  // It's possible here that secondTT could roll over 86400\n  // This does not seem to affect the precision (unit tests check for this)\n  const secondTT = date.secondsOfDay + ttMinusTai;\n\n  const xys = Transforms.iau2006XysData.computeXysRadians(\n    dayTT,\n    secondTT,\n    xysScratch,\n  );\n  if (!defined(xys)) {\n    return undefined;\n  }\n\n  const x = xys.x + eop.xPoleOffset;\n  const y = xys.y + eop.yPoleOffset;\n\n  // Compute XYS rotation\n  const a = 1.0 / (1.0 + Math.sqrt(1.0 - x * x - y * y));\n\n  const rotation1 = rotation1Scratch;\n  rotation1[0] = 1.0 - a * x * x;\n  rotation1[3] = -a * x * y;\n  rotation1[6] = x;\n  rotation1[1] = -a * x * y;\n  rotation1[4] = 1 - a * y * y;\n  rotation1[7] = y;\n  rotation1[2] = -x;\n  rotation1[5] = -y;\n  rotation1[8] = 1 - a * (x * x + y * y);\n\n  const rotation2 = Matrix3.fromRotationZ(-xys.s, rotation2Scratch);\n  const matrixQ = Matrix3.multiply(rotation1, rotation2, rotation1Scratch);\n\n  // Similar to TT conversions above\n  // It's possible here that secondTT could roll over 86400\n  // This does not seem to affect the precision (unit tests check for this)\n  const dateUt1day = date.dayNumber;\n  const dateUt1sec =\n    date.secondsOfDay - JulianDate.computeTaiMinusUtc(date) + eop.ut1MinusUtc;\n\n  // Compute Earth rotation angle\n  // The IERS standard for era is\n  //    era = 0.7790572732640 + 1.00273781191135448 * Tu\n  // where\n  //    Tu = JulianDateInUt1 - 2451545.0\n  // However, you get much more precision if you make the following simplification\n  //    era = a + (1 + b) * (JulianDayNumber + FractionOfDay - 2451545)\n  //    era = a + (JulianDayNumber - 2451545) + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)\n  //    era = a + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)\n  // since (JulianDayNumber - 2451545) represents an integer number of revolutions which will be discarded anyway.\n  const daysSinceJ2000 = dateUt1day - 2451545;\n  const fractionOfDay = dateUt1sec / TimeConstants.SECONDS_PER_DAY;\n  let era =\n    0.779057273264 +\n    fractionOfDay +\n    0.00273781191135448 * (daysSinceJ2000 + fractionOfDay);\n  era = (era % 1.0) * CesiumMath.TWO_PI;\n\n  const earthRotation = Matrix3.fromRotationZ(era, rotation2Scratch);\n\n  // pseudoFixed to ICRF\n  const pfToIcrf = Matrix3.multiply(matrixQ, earthRotation, rotation1Scratch);\n\n  // Compute pole wander matrix\n  const cosxp = Math.cos(eop.xPoleWander);\n  const cosyp = Math.cos(eop.yPoleWander);\n  const sinxp = Math.sin(eop.xPoleWander);\n  const sinyp = Math.sin(eop.yPoleWander);\n\n  let ttt = dayTT - j2000ttDays + secondTT / TimeConstants.SECONDS_PER_DAY;\n  ttt /= 36525.0;\n\n  // approximate sp value in rad\n  const sp = (-47.0e-6 * ttt * CesiumMath.RADIANS_PER_DEGREE) / 3600.0;\n  const cossp = Math.cos(sp);\n  const sinsp = Math.sin(sp);\n\n  const fToPfMtx = rotation2Scratch;\n  fToPfMtx[0] = cosxp * cossp;\n  fToPfMtx[1] = cosxp * sinsp;\n  fToPfMtx[2] = sinxp;\n  fToPfMtx[3] = -cosyp * sinsp + sinyp * sinxp * cossp;\n  fToPfMtx[4] = cosyp * cossp + sinyp * sinxp * sinsp;\n  fToPfMtx[5] = -sinyp * cosxp;\n  fToPfMtx[6] = -sinyp * sinsp - cosyp * sinxp * cossp;\n  fToPfMtx[7] = sinyp * cossp - cosyp * sinxp * sinsp;\n  fToPfMtx[8] = cosyp * cosxp;\n\n  return Matrix3.multiply(pfToIcrf, fToPfMtx, result);\n};\n\nconst pointToWindowCoordinatesTemp = new Cartesian4();\n\n/**\n * Transform a point from model coordinates to window coordinates.\n *\n * @param {Matrix4} modelViewProjectionMatrix The 4x4 model-view-projection matrix.\n * @param {Matrix4} viewportTransformation The 4x4 viewport transformation.\n * @param {Cartesian3} point The point to transform.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided.\n */\nTransforms.pointToWindowCoordinates = function (\n  modelViewProjectionMatrix,\n  viewportTransformation,\n  point,\n  result,\n) {\n  result = Transforms.pointToGLWindowCoordinates(\n    modelViewProjectionMatrix,\n    viewportTransformation,\n    point,\n    result,\n  );\n  result.y = 2.0 * viewportTransformation[5] - result.y;\n  return result;\n};\n\n/**\n * @private\n */\nTransforms.pointToGLWindowCoordinates = function (\n  modelViewProjectionMatrix,\n  viewportTransformation,\n  point,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(modelViewProjectionMatrix)) {\n    throw new DeveloperError(\"modelViewProjectionMatrix is required.\");\n  }\n\n  if (!defined(viewportTransformation)) {\n    throw new DeveloperError(\"viewportTransformation is required.\");\n  }\n\n  if (!defined(point)) {\n    throw new DeveloperError(\"point is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian2();\n  }\n\n  const tmp = pointToWindowCoordinatesTemp;\n\n  Matrix4.multiplyByVector(\n    modelViewProjectionMatrix,\n    Cartesian4.fromElements(point.x, point.y, point.z, 1, tmp),\n    tmp,\n  );\n  Cartesian4.multiplyByScalar(tmp, 1.0 / tmp.w, tmp);\n  Matrix4.multiplyByVector(viewportTransformation, tmp, tmp);\n  return Cartesian2.fromCartesian4(tmp, result);\n};\n\nconst normalScratch = new Cartesian3();\nconst rightScratch = new Cartesian3();\nconst upScratch = new Cartesian3();\n\n/**\n * Transform a position and velocity to a rotation matrix.\n *\n * @param {Cartesian3} position The position to transform.\n * @param {Cartesian3} velocity The velocity vector to transform.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid whose fixed frame is used in the transformation.\n * @param {Matrix3} [result] The object onto which to store the result.\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided.\n */\nTransforms.rotationMatrixFromPositionVelocity = function (\n  position,\n  velocity,\n  ellipsoid,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(position)) {\n    throw new DeveloperError(\"position is required.\");\n  }\n\n  if (!defined(velocity)) {\n    throw new DeveloperError(\"velocity is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const normal = (ellipsoid ?? Ellipsoid.default).geodeticSurfaceNormal(\n    position,\n    normalScratch,\n  );\n  let right = Cartesian3.cross(velocity, normal, rightScratch);\n\n  if (Cartesian3.equalsEpsilon(right, Cartesian3.ZERO, CesiumMath.EPSILON6)) {\n    right = Cartesian3.clone(Cartesian3.UNIT_X, right);\n  }\n\n  const up = Cartesian3.cross(right, velocity, upScratch);\n  Cartesian3.normalize(up, up);\n  Cartesian3.cross(velocity, up, right);\n  Cartesian3.negate(right, right);\n  Cartesian3.normalize(right, right);\n\n  if (!defined(result)) {\n    result = new Matrix3();\n  }\n\n  result[0] = velocity.x;\n  result[1] = velocity.y;\n  result[2] = velocity.z;\n  result[3] = right.x;\n  result[4] = right.y;\n  result[5] = right.z;\n  result[6] = up.x;\n  result[7] = up.y;\n  result[8] = up.z;\n\n  return result;\n};\n\n/**\n * An immutable matrix that swaps x, y, z for 2D.\n *\n * @type {Matrix4}\n * @constant\n * @private\n */\nTransforms.SWIZZLE_3D_TO_2D_MATRIX = Object.freeze(\n  new Matrix4(\n    0.0,\n    0.0,\n    1.0,\n    0.0,\n    1.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    1.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    0.0,\n    1.0,\n  ),\n);\n\nconst scratchCartographic = new Cartographic();\nconst scratchCartesian3Projection = new Cartesian3();\nconst scratchCenter = new Cartesian3();\nconst scratchRotation = new Matrix3();\nconst scratchFromENU = new Matrix4();\nconst scratchToENU = new Matrix4();\n\n/**\n * @private\n */\nTransforms.basisTo2D = function (projection, matrix, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(projection)) {\n    throw new DeveloperError(\"projection is required.\");\n  }\n  if (!defined(matrix)) {\n    throw new DeveloperError(\"matrix is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const rtcCenter = Matrix4.getTranslation(matrix, scratchCenter);\n  const ellipsoid = projection.ellipsoid;\n\n  let projectedPosition;\n  if (Cartesian3.equals(rtcCenter, Cartesian3.ZERO)) {\n    projectedPosition = Cartesian3.clone(\n      Cartesian3.ZERO,\n      scratchCartesian3Projection,\n    );\n  } else {\n    // Get the 2D Center\n    const cartographic = ellipsoid.cartesianToCartographic(\n      rtcCenter,\n      scratchCartographic,\n    );\n\n    projectedPosition = projection.project(\n      cartographic,\n      scratchCartesian3Projection,\n    );\n    Cartesian3.fromElements(\n      projectedPosition.z,\n      projectedPosition.x,\n      projectedPosition.y,\n      projectedPosition,\n    );\n  }\n\n  // Assuming the instance are positioned on the ellipsoid, invert the ellipsoidal transform to get the local transform and then convert to 2D\n  const fromENU = Transforms.eastNorthUpToFixedFrame(\n    rtcCenter,\n    ellipsoid,\n    scratchFromENU,\n  );\n  const toENU = Matrix4.inverseTransformation(fromENU, scratchToENU);\n  const rotation = Matrix4.getMatrix3(matrix, scratchRotation);\n  const local = Matrix4.multiplyByMatrix3(toENU, rotation, result);\n  Matrix4.multiply(Transforms.SWIZZLE_3D_TO_2D_MATRIX, local, result); // Swap x, y, z for 2D\n  Matrix4.setTranslation(result, projectedPosition, result); // Use the projected center\n\n  return result;\n};\n\n/**\n * @private\n */\nTransforms.ellipsoidTo2DModelMatrix = function (projection, center, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(projection)) {\n    throw new DeveloperError(\"projection is required.\");\n  }\n  if (!defined(center)) {\n    throw new DeveloperError(\"center is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const ellipsoid = projection.ellipsoid;\n\n  const fromENU = Transforms.eastNorthUpToFixedFrame(\n    center,\n    ellipsoid,\n    scratchFromENU,\n  );\n  const toENU = Matrix4.inverseTransformation(fromENU, scratchToENU);\n\n  const cartographic = ellipsoid.cartesianToCartographic(\n    center,\n    scratchCartographic,\n  );\n  const projectedPosition = projection.project(\n    cartographic,\n    scratchCartesian3Projection,\n  );\n  Cartesian3.fromElements(\n    projectedPosition.z,\n    projectedPosition.x,\n    projectedPosition.y,\n    projectedPosition,\n  );\n\n  const translation = Matrix4.fromTranslation(\n    projectedPosition,\n    scratchFromENU,\n  );\n  Matrix4.multiply(Transforms.SWIZZLE_3D_TO_2D_MATRIX, toENU, result);\n  Matrix4.multiply(translation, result, result);\n\n  return result;\n};\nexport default Transforms;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport Quaternion from \"./Quaternion.js\";\n\nconst defaultScale = new Cartesian3(1.0, 1.0, 1.0);\nconst defaultTranslation = Cartesian3.ZERO;\nconst defaultRotation = Quaternion.IDENTITY;\n\n/**\n * An affine transformation defined by a translation, rotation, and scale.\n * @alias TranslationRotationScale\n * @constructor\n *\n * @param {Cartesian3} [translation=Cartesian3.ZERO] A {@link Cartesian3} specifying the (x, y, z) translation to apply to the node.\n * @param {Quaternion} [rotation=Quaternion.IDENTITY] A {@link Quaternion} specifying the (x, y, z, w) rotation to apply to the node.\n * @param {Cartesian3} [scale=new Cartesian3(1.0, 1.0, 1.0)] A {@link Cartesian3} specifying the (x, y, z) scaling to apply to the node.\n */\nfunction TranslationRotationScale(translation, rotation, scale) {\n  /**\n   * Gets or sets the (x, y, z) translation to apply to the node.\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   */\n  this.translation = Cartesian3.clone(translation ?? defaultTranslation);\n\n  /**\n   * Gets or sets the (x, y, z, w) rotation to apply to the node.\n   * @type {Quaternion}\n   * @default Quaternion.IDENTITY\n   */\n  this.rotation = Quaternion.clone(rotation ?? defaultRotation);\n\n  /**\n   * Gets or sets the (x, y, z) scaling to apply to the node.\n   * @type {Cartesian3}\n   * @default new Cartesian3(1.0, 1.0, 1.0)\n   */\n  this.scale = Cartesian3.clone(scale ?? defaultScale);\n}\n\n/**\n * Compares this instance against the provided instance and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {TranslationRotationScale} [right] The right hand side TranslationRotationScale.\n * @returns {boolean} <code>true</code> if they are equal, <code>false</code> otherwise.\n */\nTranslationRotationScale.prototype.equals = function (right) {\n  return (\n    this === right ||\n    (defined(right) &&\n      Cartesian3.equals(this.translation, right.translation) &&\n      Quaternion.equals(this.rotation, right.rotation) &&\n      Cartesian3.equals(this.scale, right.scale))\n  );\n};\nexport default TranslationRotationScale;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Uses the Tridiagonal Matrix Algorithm, also known as the Thomas Algorithm, to solve\n * a system of linear equations where the coefficient matrix is a tridiagonal matrix.\n *\n * @namespace TridiagonalSystemSolver\n */\nconst TridiagonalSystemSolver = {};\n\n/**\n * Solves a tridiagonal system of linear equations.\n *\n * @param {number[]} diagonal An array with length <code>n</code> that contains the diagonal of the coefficient matrix.\n * @param {number[]} lower An array with length <code>n - 1</code> that contains the lower diagonal of the coefficient matrix.\n * @param {number[]} upper An array with length <code>n - 1</code> that contains the upper diagonal of the coefficient matrix.\n * @param {Cartesian3[]} right An array of Cartesians with length <code>n</code> that is the right side of the system of equations.\n *\n * @exception {DeveloperError} diagonal and right must have the same lengths.\n * @exception {DeveloperError} lower and upper must have the same lengths.\n * @exception {DeveloperError} lower and upper must be one less than the length of diagonal.\n *\n * @performance Linear time.\n *\n * @example\n * const lowerDiagonal = [1.0, 1.0, 1.0, 1.0];\n * const diagonal = [2.0, 4.0, 4.0, 4.0, 2.0];\n * const upperDiagonal = [1.0, 1.0, 1.0, 1.0];\n * const rightHandSide = [\n *     new Cesium.Cartesian3(410757.0, -1595711.0, 1375302.0),\n *     new Cesium.Cartesian3(-5986705.0, -2190640.0, 1099600.0),\n *     new Cesium.Cartesian3(-12593180.0, 288588.0, -1755549.0),\n *     new Cesium.Cartesian3(-5349898.0, 2457005.0, -2685438.0),\n *     new Cesium.Cartesian3(845820.0, 1573488.0, -1205591.0)\n * ];\n *\n * const solution = Cesium.TridiagonalSystemSolver.solve(lowerDiagonal, diagonal, upperDiagonal, rightHandSide);\n *\n * @returns {Cartesian3[]} An array of Cartesians with length <code>n</code> that is the solution to the tridiagonal system of equations.\n */\nTridiagonalSystemSolver.solve = function (lower, diagonal, upper, right) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(lower) || !(lower instanceof Array)) {\n    throw new DeveloperError(\"The array lower is required.\");\n  }\n  if (!defined(diagonal) || !(diagonal instanceof Array)) {\n    throw new DeveloperError(\"The array diagonal is required.\");\n  }\n  if (!defined(upper) || !(upper instanceof Array)) {\n    throw new DeveloperError(\"The array upper is required.\");\n  }\n  if (!defined(right) || !(right instanceof Array)) {\n    throw new DeveloperError(\"The array right is required.\");\n  }\n  if (diagonal.length !== right.length) {\n    throw new DeveloperError(\"diagonal and right must have the same lengths.\");\n  }\n  if (lower.length !== upper.length) {\n    throw new DeveloperError(\"lower and upper must have the same lengths.\");\n  } else if (lower.length !== diagonal.length - 1) {\n    throw new DeveloperError(\n      \"lower and upper must be one less than the length of diagonal.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const c = new Array(upper.length);\n  const d = new Array(right.length);\n  const x = new Array(right.length);\n\n  let i;\n  for (i = 0; i < d.length; i++) {\n    d[i] = new Cartesian3();\n    x[i] = new Cartesian3();\n  }\n\n  c[0] = upper[0] / diagonal[0];\n  d[0] = Cartesian3.multiplyByScalar(right[0], 1.0 / diagonal[0], d[0]);\n\n  let scalar;\n  for (i = 1; i < c.length; ++i) {\n    scalar = 1.0 / (diagonal[i] - c[i - 1] * lower[i - 1]);\n    c[i] = upper[i] * scalar;\n    d[i] = Cartesian3.subtract(\n      right[i],\n      Cartesian3.multiplyByScalar(d[i - 1], lower[i - 1], d[i]),\n      d[i],\n    );\n    d[i] = Cartesian3.multiplyByScalar(d[i], scalar, d[i]);\n  }\n\n  scalar = 1.0 / (diagonal[i] - c[i - 1] * lower[i - 1]);\n  d[i] = Cartesian3.subtract(\n    right[i],\n    Cartesian3.multiplyByScalar(d[i - 1], lower[i - 1], d[i]),\n    d[i],\n  );\n  d[i] = Cartesian3.multiplyByScalar(d[i], scalar, d[i]);\n\n  x[x.length - 1] = d[d.length - 1];\n  for (i = x.length - 2; i >= 0; --i) {\n    x[i] = Cartesian3.subtract(\n      d[i],\n      Cartesian3.multiplyByScalar(x[i + 1], c[i], x[i]),\n      x[i],\n    );\n  }\n\n  return x;\n};\nexport default TridiagonalSystemSolver;\n","import Uri from \"urijs\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A singleton that contains all of the servers that are trusted. Credentials will be sent with\n * any requests to these servers.\n *\n * @namespace TrustedServers\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nconst TrustedServers = {};\nlet _servers = {};\n\n/**\n * Adds a trusted server to the registry\n *\n * @param {string} host The host to be added.\n * @param {number} port The port used to access the host.\n *\n * @example\n * // Add a trusted server\n * TrustedServers.add('my.server.com', 80);\n */\nTrustedServers.add = function (host, port) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(host)) {\n    throw new DeveloperError(\"host is required.\");\n  }\n  if (!defined(port) || port <= 0) {\n    throw new DeveloperError(\"port is required to be greater than 0.\");\n  }\n  //>>includeEnd('debug');\n\n  const authority = `${host.toLowerCase()}:${port}`;\n  if (!defined(_servers[authority])) {\n    _servers[authority] = true;\n  }\n};\n\n/**\n * Removes a trusted server from the registry\n *\n * @param {string} host The host to be removed.\n * @param {number} port The port used to access the host.\n *\n * @example\n * // Remove a trusted server\n * TrustedServers.remove('my.server.com', 80);\n */\nTrustedServers.remove = function (host, port) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(host)) {\n    throw new DeveloperError(\"host is required.\");\n  }\n  if (!defined(port) || port <= 0) {\n    throw new DeveloperError(\"port is required to be greater than 0.\");\n  }\n  //>>includeEnd('debug');\n\n  const authority = `${host.toLowerCase()}:${port}`;\n  if (defined(_servers[authority])) {\n    delete _servers[authority];\n  }\n};\n\nfunction getAuthority(url) {\n  const uri = new Uri(url);\n  uri.normalize();\n\n  // Removes username:password@ so we just have host[:port]\n  let authority = uri.authority();\n  if (authority.length === 0) {\n    return undefined; // Relative URL\n  }\n  uri.authority(authority);\n\n  if (authority.indexOf(\"@\") !== -1) {\n    const parts = authority.split(\"@\");\n    authority = parts[1];\n  }\n\n  // If the port is missing add one based on the scheme\n  if (authority.indexOf(\":\") === -1) {\n    let scheme = uri.scheme();\n    if (scheme.length === 0) {\n      scheme = window.location.protocol;\n      scheme = scheme.substring(0, scheme.length - 1);\n    }\n    if (scheme === \"http\") {\n      authority += \":80\";\n    } else if (scheme === \"https\") {\n      authority += \":443\";\n    } else {\n      return undefined;\n    }\n  }\n\n  return authority;\n}\n\n/**\n * Tests whether a server is trusted or not. The server must have been added with the port if it is included in the url.\n *\n * @param {string} url The url to be tested against the trusted list\n *\n * @returns {boolean} Returns true if url is trusted, false otherwise.\n *\n * @example\n * // Add server\n * TrustedServers.add('my.server.com', 81);\n *\n * // Check if server is trusted\n * if (TrustedServers.contains('https://my.server.com:81/path/to/file.png')) {\n *     // my.server.com:81 is trusted\n * }\n * if (TrustedServers.contains('https://my.server.com/path/to/file.png')) {\n *     // my.server.com isn't trusted\n * }\n */\nTrustedServers.contains = function (url) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(url)) {\n    throw new DeveloperError(\"url is required.\");\n  }\n  //>>includeEnd('debug');\n  const authority = getAuthority(url);\n  if (defined(authority) && defined(_servers[authority])) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Clears the registry\n *\n * @example\n * // Remove a trusted server\n * TrustedServers.clear();\n */\nTrustedServers.clear = function () {\n  _servers = {};\n};\nexport default TrustedServers;\n","import Check from \"./Check.js\";\nimport Credit from \"./Credit.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Event from \"./Event.js\";\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\nimport getImagePixels from \"./getImagePixels.js\";\nimport HeightmapTerrainData from \"./HeightmapTerrainData.js\";\nimport CesiumMath from \"./Math.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport Resource from \"./Resource.js\";\nimport RuntimeError from \"./RuntimeError.js\";\nimport TerrainProvider from \"./TerrainProvider.js\";\nimport TileProviderError from \"./TileProviderError.js\";\n\nfunction DataRectangle(rectangle, maxLevel) {\n  this.rectangle = rectangle;\n  this.maxLevel = maxLevel;\n}\n\n/**\n * @typedef {object} VRTheWorldTerrainProvider.ConstructorOptions\n *\n * Initialization options for the VRTheWorldTerrainProvider constructor\n *\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * Used to track creation details while fetching initial metadata\n *\n * @constructor\n * @private\n *\n * @param {VRTheWorldTerrainProvider.ConstructorOptions} options An object describing initialization options\n */\nfunction TerrainProviderBuilder(options) {\n  this.ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  this.tilingScheme = undefined;\n  this.heightmapWidth = undefined;\n  this.heightmapHeight = undefined;\n  this.levelZeroMaximumGeometricError = undefined;\n  this.rectangles = [];\n}\n\nTerrainProviderBuilder.prototype.build = function (provider) {\n  provider._tilingScheme = this.tilingScheme;\n  provider._heightmapWidth = this.heightmapWidth;\n  provider._heightmapHeight = this.heightmapHeight;\n  provider._levelZeroMaximumGeometricError =\n    this.levelZeroMaximumGeometricError;\n  provider._rectangles = this.rectangles;\n};\n\nfunction metadataSuccess(terrainProviderBuilder, xml) {\n  const srs = xml.getElementsByTagName(\"SRS\")[0].textContent;\n  if (srs === \"EPSG:4326\") {\n    terrainProviderBuilder.tilingScheme = new GeographicTilingScheme({\n      ellipsoid: terrainProviderBuilder.ellipsoid,\n    });\n  } else {\n    throw new RuntimeError(`SRS ${srs} is not supported`);\n  }\n\n  const tileFormat = xml.getElementsByTagName(\"TileFormat\")[0];\n  terrainProviderBuilder.heightmapWidth = parseInt(\n    tileFormat.getAttribute(\"width\"),\n    10,\n  );\n  terrainProviderBuilder.heightmapHeight = parseInt(\n    tileFormat.getAttribute(\"height\"),\n    10,\n  );\n  terrainProviderBuilder.levelZeroMaximumGeometricError =\n    TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(\n      terrainProviderBuilder.ellipsoid,\n      Math.min(\n        terrainProviderBuilder.heightmapWidth,\n        terrainProviderBuilder.heightmapHeight,\n      ),\n      terrainProviderBuilder.tilingScheme.getNumberOfXTilesAtLevel(0),\n    );\n\n  const dataRectangles = xml.getElementsByTagName(\"DataExtent\");\n\n  for (let i = 0; i < dataRectangles.length; ++i) {\n    const dataRectangle = dataRectangles[i];\n\n    const west = CesiumMath.toRadians(\n      parseFloat(dataRectangle.getAttribute(\"minx\")),\n    );\n    const south = CesiumMath.toRadians(\n      parseFloat(dataRectangle.getAttribute(\"miny\")),\n    );\n    const east = CesiumMath.toRadians(\n      parseFloat(dataRectangle.getAttribute(\"maxx\")),\n    );\n    const north = CesiumMath.toRadians(\n      parseFloat(dataRectangle.getAttribute(\"maxy\")),\n    );\n    const maxLevel = parseInt(dataRectangle.getAttribute(\"maxlevel\"), 10);\n\n    terrainProviderBuilder.rectangles.push(\n      new DataRectangle(new Rectangle(west, south, east, north), maxLevel),\n    );\n  }\n}\n\nfunction metadataFailure(resource, error, provider) {\n  let message = `An error occurred while accessing ${resource.url}`;\n\n  if (defined(error) && defined(error.message)) {\n    message = `${message}: ${error.message}`;\n  }\n\n  TileProviderError.reportError(\n    undefined,\n    provider,\n    defined(provider) ? provider._errorEvent : undefined,\n    message,\n  );\n\n  throw new RuntimeError(message);\n}\n\nasync function requestMetadata(terrainProviderBuilder, resource, provider) {\n  try {\n    const xml = await resource.fetchXML();\n    metadataSuccess(terrainProviderBuilder, xml);\n  } catch (error) {\n    metadataFailure(resource, error, provider);\n  }\n}\n\n/**\n * <div class=\"notice\">\n * To construct a VRTheWorldTerrainProvider, call {@link VRTheWorldTerrainProvider.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps\n * retrieved from a {@link http://vr-theworld.com/|VT MÄK VR-TheWorld server}.\n *\n * @alias VRTheWorldTerrainProvider\n * @constructor\n *\n * @param {VRTheWorldTerrainProvider.ConstructorOptions} [options] An object describing initialization options.\n *\n * @example\n * const terrainProvider = await Cesium.VRTheWorldTerrainProvider.fromUrl(\n *   \"https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/\"\n * );\n * viewer.terrainProvider = terrainProvider;\n *\n * @see TerrainProvider\n */\nfunction VRTheWorldTerrainProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._errorEvent = new Event();\n\n  this._terrainDataStructure = {\n    heightScale: 1.0 / 1000.0,\n    heightOffset: -1000.0,\n    elementsPerHeight: 3,\n    stride: 4,\n    elementMultiplier: 256.0,\n    isBigEndian: true,\n    lowestEncodedHeight: 0,\n    highestEncodedHeight: 256 * 256 * 256 - 1,\n  };\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n\n  this._tilingScheme = undefined;\n  this._rectangles = [];\n}\n\nObject.defineProperties(VRTheWorldTerrainProvider.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof VRTheWorldTerrainProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this terrain provider is active.  Typically this is used to credit\n   * the source of the terrain.\n   * @memberof VRTheWorldTerrainProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof VRTheWorldTerrainProvider.prototype\n   * @type {GeographicTilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the provider includes a water mask.  The water mask\n   * indicates which areas of the globe are water rather than land, so they can be rendered\n   * as a reflective surface with animated waves.\n   * @memberof VRTheWorldTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasWaterMask: {\n    get: function () {\n      return false;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the requested tiles include vertex normals.\n   * @memberof VRTheWorldTerrainProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasVertexNormals: {\n    get: function () {\n      return false;\n    },\n  },\n  /**\n   * Gets an object that can be used to determine availability of terrain from this provider, such as\n   * at points and in rectangles. This property may be undefined if availability\n   * information is not available.\n   * @memberof VRTheWorldTerrainProvider.prototype\n   * @type {TileAvailability|undefined}\n   * @readonly\n   */\n  availability: {\n    get: function () {\n      return undefined;\n    },\n  },\n});\n\n/**\n * Creates a {@link TerrainProvider} that produces terrain geometry by tessellating height maps\n * retrieved from a {@link http://vr-theworld.com/|VT MÄK VR-TheWorld server}.\n *\n * @param {Resource|string} url The URL of the VR-TheWorld TileMap.\n * @param {VRTheWorldTerrainProvider.ConstructorOptions} [options] An object describing initialization options.\n * @returns {Promise<VRTheWorldTerrainProvider>}\n *\n * @example\n * const terrainProvider = await Cesium.VRTheWorldTerrainProvider.fromUrl(\n *   \"https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/\"\n * );\n * viewer.terrainProvider = terrainProvider;\n *\n * @exception {RuntimeError} metadata specifies and unknown SRS\n */\nVRTheWorldTerrainProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const terrainProviderBuilder = new TerrainProviderBuilder(options);\n  const resource = Resource.createIfNeeded(url);\n\n  await requestMetadata(terrainProviderBuilder, resource);\n\n  const provider = new VRTheWorldTerrainProvider(options);\n  terrainProviderBuilder.build(provider);\n  provider._resource = resource;\n\n  return provider;\n};\n\n/**\n * Requests the geometry for a given tile. The result includes terrain\n * data and indicates that all child tiles are available.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<TerrainData>|undefined} A promise for the requested geometry.  If this method\n *          returns undefined instead of a promise, it is an indication that too many requests are already\n *          pending and the request will be retried later.\n */\nVRTheWorldTerrainProvider.prototype.requestTileGeometry = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const yTiles = this._tilingScheme.getNumberOfYTilesAtLevel(level);\n  const resource = this._resource.getDerivedResource({\n    url: `${level}/${x}/${yTiles - y - 1}.tif`,\n    queryParameters: {\n      cesium: true,\n    },\n    request: request,\n  });\n  const promise = resource.fetchImage({\n    preferImageBitmap: true,\n  });\n  if (!defined(promise)) {\n    return undefined;\n  }\n\n  const that = this;\n  return Promise.resolve(promise).then(function (image) {\n    return new HeightmapTerrainData({\n      buffer: getImagePixels(image),\n      width: that._heightmapWidth,\n      height: that._heightmapHeight,\n      childTileMask: getChildMask(that, x, y, level),\n      structure: that._terrainDataStructure,\n    });\n  });\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error.\n */\nVRTheWorldTerrainProvider.prototype.getLevelMaximumGeometricError = function (\n  level,\n) {\n  return this._levelZeroMaximumGeometricError / (1 << level);\n};\n\nconst rectangleScratch = new Rectangle();\n\nfunction getChildMask(provider, x, y, level) {\n  const tilingScheme = provider._tilingScheme;\n  const rectangles = provider._rectangles;\n  const parentRectangle = tilingScheme.tileXYToRectangle(x, y, level);\n\n  let childMask = 0;\n\n  for (let i = 0; i < rectangles.length && childMask !== 15; ++i) {\n    const rectangle = rectangles[i];\n    if (rectangle.maxLevel <= level) {\n      continue;\n    }\n\n    const testRectangle = rectangle.rectangle;\n\n    const intersection = Rectangle.intersection(\n      testRectangle,\n      parentRectangle,\n      rectangleScratch,\n    );\n    if (defined(intersection)) {\n      // Parent tile is inside this rectangle, so at least one child is, too.\n      if (\n        isTileInRectangle(tilingScheme, testRectangle, x * 2, y * 2, level + 1)\n      ) {\n        childMask |= 4; // northwest\n      }\n      if (\n        isTileInRectangle(\n          tilingScheme,\n          testRectangle,\n          x * 2 + 1,\n          y * 2,\n          level + 1,\n        )\n      ) {\n        childMask |= 8; // northeast\n      }\n      if (\n        isTileInRectangle(\n          tilingScheme,\n          testRectangle,\n          x * 2,\n          y * 2 + 1,\n          level + 1,\n        )\n      ) {\n        childMask |= 1; // southwest\n      }\n      if (\n        isTileInRectangle(\n          tilingScheme,\n          testRectangle,\n          x * 2 + 1,\n          y * 2 + 1,\n          level + 1,\n        )\n      ) {\n        childMask |= 2; // southeast\n      }\n    }\n  }\n\n  return childMask;\n}\n\nfunction isTileInRectangle(tilingScheme, rectangle, x, y, level) {\n  const tileRectangle = tilingScheme.tileXYToRectangle(x, y, level);\n  return defined(\n    Rectangle.intersection(tileRectangle, rectangle, rectangleScratch),\n  );\n}\n\n/**\n * Determines whether data for a tile is available to be loaded.\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {boolean|undefined} Undefined if not supported, otherwise true or false.\n */\nVRTheWorldTerrainProvider.prototype.getTileDataAvailable = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\n\n/**\n * Makes sure we load availability data for a tile\n *\n * @param {number} x The X coordinate of the tile for which to request geometry.\n * @param {number} y The Y coordinate of the tile for which to request geometry.\n * @param {number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise<void>} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nVRTheWorldTerrainProvider.prototype.loadTileDataAvailability = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\nexport default VRTheWorldTerrainProvider;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * A vertex format defines what attributes make up a vertex.  A VertexFormat can be provided\n * to a {@link Geometry} to request that certain properties be computed, e.g., just position,\n * position and normal, etc.\n *\n * @param {object} [options] An object with boolean properties corresponding to VertexFormat properties as shown in the code example.\n *\n * @alias VertexFormat\n * @constructor\n *\n * @example\n * // Create a vertex format with position and 2D texture coordinate attributes.\n * const format = new Cesium.VertexFormat({\n *   position : true,\n *   st : true\n * });\n *\n * @see Geometry#attributes\n * @see Packable\n */\nfunction VertexFormat(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * When <code>true</code>, the vertex has a 3D position attribute.\n   * <p>\n   * 64-bit floating-point (for precision).  3 components per attribute.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.position = options.position ?? false;\n\n  /**\n   * When <code>true</code>, the vertex has a normal attribute (normalized), which is commonly used for lighting.\n   * <p>\n   * 32-bit floating-point.  3 components per attribute.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.normal = options.normal ?? false;\n\n  /**\n   * When <code>true</code>, the vertex has a 2D texture coordinate attribute.\n   * <p>\n   * 32-bit floating-point.  2 components per attribute\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.st = options.st ?? false;\n\n  /**\n   * When <code>true</code>, the vertex has a bitangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n   * <p>\n   * 32-bit floating-point.  3 components per attribute.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.bitangent = options.bitangent ?? false;\n\n  /**\n   * When <code>true</code>, the vertex has a tangent attribute (normalized), which is used for tangent-space effects like bump mapping.\n   * <p>\n   * 32-bit floating-point.  3 components per attribute.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.tangent = options.tangent ?? false;\n\n  /**\n   * When <code>true</code>, the vertex has an RGB color attribute.\n   * <p>\n   * 8-bit unsigned byte.  3 components per attribute.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.color = options.color ?? false;\n}\n\n/**\n * An immutable vertex format with only a position attribute.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n */\nVertexFormat.POSITION_ONLY = Object.freeze(\n  new VertexFormat({\n    position: true,\n  }),\n);\n\n/**\n * An immutable vertex format with position and normal attributes.\n * This is compatible with per-instance color appearances like {@link PerInstanceColorAppearance}.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n */\nVertexFormat.POSITION_AND_NORMAL = Object.freeze(\n  new VertexFormat({\n    position: true,\n    normal: true,\n  }),\n);\n\n/**\n * An immutable vertex format with position, normal, and st attributes.\n * This is compatible with {@link MaterialAppearance} when {@link MaterialAppearance#materialSupport}\n * is <code>TEXTURED/code>.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n * @see VertexFormat#st\n */\nVertexFormat.POSITION_NORMAL_AND_ST = Object.freeze(\n  new VertexFormat({\n    position: true,\n    normal: true,\n    st: true,\n  }),\n);\n\n/**\n * An immutable vertex format with position and st attributes.\n * This is compatible with {@link EllipsoidSurfaceAppearance}.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#st\n */\nVertexFormat.POSITION_AND_ST = Object.freeze(\n  new VertexFormat({\n    position: true,\n    st: true,\n  }),\n);\n\n/**\n * An immutable vertex format with position and color attributes.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#color\n */\nVertexFormat.POSITION_AND_COLOR = Object.freeze(\n  new VertexFormat({\n    position: true,\n    color: true,\n  }),\n);\n\n/**\n * An immutable vertex format with well-known attributes: position, normal, st, tangent, and bitangent.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n * @see VertexFormat#st\n * @see VertexFormat#tangent\n * @see VertexFormat#bitangent\n */\nVertexFormat.ALL = Object.freeze(\n  new VertexFormat({\n    position: true,\n    normal: true,\n    st: true,\n    tangent: true,\n    bitangent: true,\n  }),\n);\n\n/**\n * An immutable vertex format with position, normal, and st attributes.\n * This is compatible with most appearances and materials; however\n * normal and st attributes are not always required.  When this is\n * known in advance, another <code>VertexFormat</code> should be used.\n *\n * @type {VertexFormat}\n * @constant\n *\n * @see VertexFormat#position\n * @see VertexFormat#normal\n */\nVertexFormat.DEFAULT = VertexFormat.POSITION_NORMAL_AND_ST;\n\n/**\n * The number of elements used to pack the object into an array.\n * @type {number}\n */\nVertexFormat.packedLength = 6;\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {VertexFormat} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nVertexFormat.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  array[startingIndex++] = value.position ? 1.0 : 0.0;\n  array[startingIndex++] = value.normal ? 1.0 : 0.0;\n  array[startingIndex++] = value.st ? 1.0 : 0.0;\n  array[startingIndex++] = value.tangent ? 1.0 : 0.0;\n  array[startingIndex++] = value.bitangent ? 1.0 : 0.0;\n  array[startingIndex] = value.color ? 1.0 : 0.0;\n\n  return array;\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {VertexFormat} [result] The object into which to store the result.\n * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided.\n */\nVertexFormat.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  if (!defined(result)) {\n    result = new VertexFormat();\n  }\n\n  result.position = array[startingIndex++] === 1.0;\n  result.normal = array[startingIndex++] === 1.0;\n  result.st = array[startingIndex++] === 1.0;\n  result.tangent = array[startingIndex++] === 1.0;\n  result.bitangent = array[startingIndex++] === 1.0;\n  result.color = array[startingIndex] === 1.0;\n  return result;\n};\n\n/**\n * Duplicates a VertexFormat instance.\n *\n * @param {VertexFormat} vertexFormat The vertex format to duplicate.\n * @param {VertexFormat} [result] The object onto which to store the result.\n * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided. (Returns undefined if vertexFormat is undefined)\n */\nVertexFormat.clone = function (vertexFormat, result) {\n  if (!defined(vertexFormat)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    result = new VertexFormat();\n  }\n\n  result.position = vertexFormat.position;\n  result.normal = vertexFormat.normal;\n  result.st = vertexFormat.st;\n  result.tangent = vertexFormat.tangent;\n  result.bitangent = vertexFormat.bitangent;\n  result.color = vertexFormat.color;\n  return result;\n};\nexport default VertexFormat;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport defined from \"./defined.js\";\n\n/**\n * @private\n */\nconst VerticalExaggeration = {};\n\n/**\n * Scales a height relative to an offset.\n *\n * @param {number} height The height.\n * @param {number} scale A scalar used to exaggerate the terrain. If the value is 1.0 there will be no effect.\n * @param {number} relativeHeight The height relative to which terrain is exaggerated. If the value is 0.0 terrain will be exaggerated relative to the ellipsoid surface.\n */\nVerticalExaggeration.getHeight = function (height, scale, relativeHeight) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!Number.isFinite(scale)) {\n    throw new DeveloperError(\"scale must be a finite number.\");\n  }\n  if (!Number.isFinite(relativeHeight)) {\n    throw new DeveloperError(\"relativeHeight must be a finite number.\");\n  }\n  //>>includeEnd('debug');\n  return (height - relativeHeight) * scale + relativeHeight;\n};\n\nconst scratchCartographic = new Cartographic();\n\n/**\n * Scales a position by exaggeration.\n *\n * @param {Cartesian3} position The position.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @param {number} verticalExaggeration A scalar used to exaggerate the terrain. If the value is 1.0 there will be no effect.\n * @param {number} verticalExaggerationRelativeHeight The height relative to which terrain is exaggerated. If the value is 0.0 terrain will be exaggerated relative to the ellipsoid surface.\n * @param {Cartesian3} [result] The object onto which to store the result.\n */\nVerticalExaggeration.getPosition = function (\n  position,\n  ellipsoid,\n  verticalExaggeration,\n  verticalExaggerationRelativeHeight,\n  result,\n) {\n  const cartographic = ellipsoid.cartesianToCartographic(\n    position,\n    scratchCartographic,\n  );\n  // If the position is too near the center of the ellipsoid, exaggeration is undefined.\n  if (!defined(cartographic)) {\n    return Cartesian3.clone(position, result);\n  }\n  const newHeight = VerticalExaggeration.getHeight(\n    cartographic.height,\n    verticalExaggeration,\n    verticalExaggerationRelativeHeight,\n  );\n  return Cartesian3.fromRadians(\n    cartographic.longitude,\n    cartographic.latitude,\n    newHeight,\n    ellipsoid,\n    result,\n  );\n};\n\nexport default VerticalExaggeration;\n","import Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport destroyObject from \"./destroyObject.js\";\nimport Iso8601 from \"./Iso8601.js\";\nimport JulianDate from \"./JulianDate.js\";\n\n/**\n * Synchronizes a video element with a simulation clock.\n *\n * @alias VideoSynchronizer\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Clock} [options.clock] The clock instance used to drive the video.\n * @param {HTMLVideoElement} [options.element] The video element to be synchronized.\n * @param {JulianDate} [options.epoch=Iso8601.MINIMUM_VALUE] The simulation time that marks the start of the video.\n * @param {number} [options.tolerance=1.0] The maximum amount of time, in seconds, that the clock and video can diverge.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=video|Video Material Demo}\n */\nfunction VideoSynchronizer(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._clock = undefined;\n  this._element = undefined;\n  this._clockSubscription = undefined;\n  this._seekFunction = undefined;\n  this._lastPlaybackRate = undefined;\n\n  this.clock = options.clock;\n  this.element = options.element;\n\n  /**\n   * Gets or sets the simulation time that marks the start of the video.\n   * @type {JulianDate}\n   * @default Iso8601.MINIMUM_VALUE\n   */\n  this.epoch = options.epoch ?? Iso8601.MINIMUM_VALUE;\n\n  /**\n   * Gets or sets the amount of time in seconds the video's currentTime\n   * and the clock's currentTime can diverge before a video seek is performed.\n   * Lower values make the synchronization more accurate but video\n   * performance might suffer.  Higher values provide better performance\n   * but at the cost of accuracy.\n   * @type {number}\n   * @default 1.0\n   */\n  this.tolerance = options.tolerance ?? 1.0;\n\n  this._seeking = false;\n  this._seekFunction = undefined;\n  this._firstTickAfterSeek = false;\n}\n\nObject.defineProperties(VideoSynchronizer.prototype, {\n  /**\n   * Gets or sets the clock used to drive the video element.\n   *\n   * @memberof VideoSynchronizer.prototype\n   * @type {Clock}\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n    set: function (value) {\n      const oldValue = this._clock;\n\n      if (oldValue === value) {\n        return;\n      }\n\n      if (defined(oldValue)) {\n        this._clockSubscription();\n        this._clockSubscription = undefined;\n      }\n\n      if (defined(value)) {\n        this._clockSubscription = value.onTick.addEventListener(\n          VideoSynchronizer.prototype._onTick,\n          this,\n        );\n      }\n\n      this._clock = value;\n    },\n  },\n  /**\n   * Gets or sets the video element to synchronize.\n   *\n   * @memberof VideoSynchronizer.prototype\n   * @type {HTMLVideoElement}\n   */\n  element: {\n    get: function () {\n      return this._element;\n    },\n    set: function (value) {\n      const oldValue = this._element;\n\n      if (oldValue === value) {\n        return;\n      }\n\n      if (defined(oldValue)) {\n        oldValue.removeEventListener(\"seeked\", this._seekFunction, false);\n      }\n\n      if (defined(value)) {\n        this._seeking = false;\n        this._seekFunction = createSeekFunction(this);\n        value.addEventListener(\"seeked\", this._seekFunction, false);\n      }\n\n      this._element = value;\n      this._seeking = false;\n      this._firstTickAfterSeek = false;\n    },\n  },\n});\n\n/**\n * Destroys and resources used by the object.  Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVideoSynchronizer.prototype.destroy = function () {\n  this.element = undefined;\n  this.clock = undefined;\n  return destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nVideoSynchronizer.prototype.isDestroyed = function () {\n  return false;\n};\n\nVideoSynchronizer.prototype._trySetPlaybackRate = function (clock) {\n  if (this._lastPlaybackRate === clock.multiplier) {\n    return;\n  }\n\n  const element = this._element;\n  try {\n    element.playbackRate = clock.multiplier;\n  } catch (error) {\n    // Seek manually for unsupported playbackRates.\n    element.playbackRate = 0.0;\n  }\n  this._lastPlaybackRate = clock.multiplier;\n};\n\nVideoSynchronizer.prototype._onTick = function (clock) {\n  const element = this._element;\n  if (!defined(element) || element.readyState < 2) {\n    return;\n  }\n\n  const paused = element.paused;\n  const shouldAnimate = clock.shouldAnimate;\n  if (shouldAnimate === paused) {\n    if (shouldAnimate) {\n      element.play();\n    } else {\n      element.pause();\n    }\n  }\n\n  //We need to avoid constant seeking or the video will\n  //never contain a complete frame for us to render.\n  //So don't do anything if we're seeing or on the first\n  //tick after a seek (the latter of which allows the frame\n  //to actually be rendered.\n  if (this._seeking || this._firstTickAfterSeek) {\n    this._firstTickAfterSeek = false;\n    return;\n  }\n\n  this._trySetPlaybackRate(clock);\n\n  const clockTime = clock.currentTime;\n  const epoch = this.epoch ?? Iso8601.MINIMUM_VALUE;\n  let videoTime = JulianDate.secondsDifference(clockTime, epoch);\n\n  const duration = element.duration;\n  let desiredTime;\n  const currentTime = element.currentTime;\n  if (element.loop) {\n    videoTime = videoTime % duration;\n    if (videoTime < 0.0) {\n      videoTime = duration - videoTime;\n    }\n    desiredTime = videoTime;\n  } else if (videoTime > duration) {\n    desiredTime = duration;\n  } else if (videoTime < 0.0) {\n    desiredTime = 0.0;\n  } else {\n    desiredTime = videoTime;\n  }\n\n  //If the playing video's time and the scene's clock time\n  //ever drift too far apart, we want to set the video to match\n  const tolerance = shouldAnimate ? (this.tolerance ?? 1.0) : 0.001;\n  if (Math.abs(desiredTime - currentTime) > tolerance) {\n    this._seeking = true;\n    element.currentTime = desiredTime;\n  }\n};\n\nfunction createSeekFunction(that) {\n  return function () {\n    that._seeking = false;\n    that._firstTickAfterSeek = true;\n  };\n}\nexport default VideoSynchronizer;\n","/**\n * This enumerated type is used in determining to what extent an object, the occludee,\n * is visible during horizon culling. An occluder may fully block an occludee, in which case\n * it has no visibility, may partially block an occludee from view, or may not block it at all,\n * leading to full visibility.\n *\n * @enum {number}\n */\nconst Visibility = {\n  /**\n   * Represents that no part of an object is visible.\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: -1,\n\n  /**\n   * Represents that part, but not all, of an object is visible\n   *\n   * @type {number}\n   * @constant\n   */\n  PARTIAL: 0,\n\n  /**\n   * Represents that an object is visible in its entirety.\n   *\n   * @type {number}\n   * @constant\n   */\n  FULL: 1,\n};\nexport default Object.freeze(Visibility);\n","/**\n * Enum containing Vulkan Constant values by name.\n *\n * These match the constants from the {@link https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-definition|Vulkan 1.2 specification}.\n *\n * @enum {number}\n * @private\n */\nconst VulkanConstants = {\n  VK_FORMAT_UNDEFINED: 0,\n  VK_FORMAT_R4G4_UNORM_PACK8: 1,\n  VK_FORMAT_R4G4B4A4_UNORM_PACK16: 2,\n  VK_FORMAT_B4G4R4A4_UNORM_PACK16: 3,\n  VK_FORMAT_R5G6B5_UNORM_PACK16: 4,\n  VK_FORMAT_B5G6R5_UNORM_PACK16: 5,\n  VK_FORMAT_R5G5B5A1_UNORM_PACK16: 6,\n  VK_FORMAT_B5G5R5A1_UNORM_PACK16: 7,\n  VK_FORMAT_A1R5G5B5_UNORM_PACK16: 8,\n  VK_FORMAT_R8_UNORM: 9,\n  VK_FORMAT_R8_SNORM: 10,\n  VK_FORMAT_R8_USCALED: 11,\n  VK_FORMAT_R8_SSCALED: 12,\n  VK_FORMAT_R8_UINT: 13,\n  VK_FORMAT_R8_SINT: 14,\n  VK_FORMAT_R8_SRGB: 15,\n  VK_FORMAT_R8G8_UNORM: 16,\n  VK_FORMAT_R8G8_SNORM: 17,\n  VK_FORMAT_R8G8_USCALED: 18,\n  VK_FORMAT_R8G8_SSCALED: 19,\n  VK_FORMAT_R8G8_UINT: 20,\n  VK_FORMAT_R8G8_SINT: 21,\n  VK_FORMAT_R8G8_SRGB: 22,\n  VK_FORMAT_R8G8B8_UNORM: 23,\n  VK_FORMAT_R8G8B8_SNORM: 24,\n  VK_FORMAT_R8G8B8_USCALED: 25,\n  VK_FORMAT_R8G8B8_SSCALED: 26,\n  VK_FORMAT_R8G8B8_UINT: 27,\n  VK_FORMAT_R8G8B8_SINT: 28,\n  VK_FORMAT_R8G8B8_SRGB: 29,\n  VK_FORMAT_B8G8R8_UNORM: 30,\n  VK_FORMAT_B8G8R8_SNORM: 31,\n  VK_FORMAT_B8G8R8_USCALED: 32,\n  VK_FORMAT_B8G8R8_SSCALED: 33,\n  VK_FORMAT_B8G8R8_UINT: 34,\n  VK_FORMAT_B8G8R8_SINT: 35,\n  VK_FORMAT_B8G8R8_SRGB: 36,\n  VK_FORMAT_R8G8B8A8_UNORM: 37,\n  VK_FORMAT_R8G8B8A8_SNORM: 38,\n  VK_FORMAT_R8G8B8A8_USCALED: 39,\n  VK_FORMAT_R8G8B8A8_SSCALED: 40,\n  VK_FORMAT_R8G8B8A8_UINT: 41,\n  VK_FORMAT_R8G8B8A8_SINT: 42,\n  VK_FORMAT_R8G8B8A8_SRGB: 43,\n  VK_FORMAT_B8G8R8A8_UNORM: 44,\n  VK_FORMAT_B8G8R8A8_SNORM: 45,\n  VK_FORMAT_B8G8R8A8_USCALED: 46,\n  VK_FORMAT_B8G8R8A8_SSCALED: 47,\n  VK_FORMAT_B8G8R8A8_UINT: 48,\n  VK_FORMAT_B8G8R8A8_SINT: 49,\n  VK_FORMAT_B8G8R8A8_SRGB: 50,\n  VK_FORMAT_A8B8G8R8_UNORM_PACK32: 51,\n  VK_FORMAT_A8B8G8R8_SNORM_PACK32: 52,\n  VK_FORMAT_A8B8G8R8_USCALED_PACK32: 53,\n  VK_FORMAT_A8B8G8R8_SSCALED_PACK32: 54,\n  VK_FORMAT_A8B8G8R8_UINT_PACK32: 55,\n  VK_FORMAT_A8B8G8R8_SINT_PACK32: 56,\n  VK_FORMAT_A8B8G8R8_SRGB_PACK32: 57,\n  VK_FORMAT_A2R10G10B10_UNORM_PACK32: 58,\n  VK_FORMAT_A2R10G10B10_SNORM_PACK32: 59,\n  VK_FORMAT_A2R10G10B10_USCALED_PACK32: 60,\n  VK_FORMAT_A2R10G10B10_SSCALED_PACK32: 61,\n  VK_FORMAT_A2R10G10B10_UINT_PACK32: 62,\n  VK_FORMAT_A2R10G10B10_SINT_PACK32: 63,\n  VK_FORMAT_A2B10G10R10_UNORM_PACK32: 64,\n  VK_FORMAT_A2B10G10R10_SNORM_PACK32: 65,\n  VK_FORMAT_A2B10G10R10_USCALED_PACK32: 66,\n  VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 67,\n  VK_FORMAT_A2B10G10R10_UINT_PACK32: 68,\n  VK_FORMAT_A2B10G10R10_SINT_PACK32: 69,\n  VK_FORMAT_R16_UNORM: 70,\n  VK_FORMAT_R16_SNORM: 71,\n  VK_FORMAT_R16_USCALED: 72,\n  VK_FORMAT_R16_SSCALED: 73,\n  VK_FORMAT_R16_UINT: 74,\n  VK_FORMAT_R16_SINT: 75,\n  VK_FORMAT_R16_SFLOAT: 76,\n  VK_FORMAT_R16G16_UNORM: 77,\n  VK_FORMAT_R16G16_SNORM: 78,\n  VK_FORMAT_R16G16_USCALED: 79,\n  VK_FORMAT_R16G16_SSCALED: 80,\n  VK_FORMAT_R16G16_UINT: 81,\n  VK_FORMAT_R16G16_SINT: 82,\n  VK_FORMAT_R16G16_SFLOAT: 83,\n  VK_FORMAT_R16G16B16_UNORM: 84,\n  VK_FORMAT_R16G16B16_SNORM: 85,\n  VK_FORMAT_R16G16B16_USCALED: 86,\n  VK_FORMAT_R16G16B16_SSCALED: 87,\n  VK_FORMAT_R16G16B16_UINT: 88,\n  VK_FORMAT_R16G16B16_SINT: 89,\n  VK_FORMAT_R16G16B16_SFLOAT: 90,\n  VK_FORMAT_R16G16B16A16_UNORM: 91,\n  VK_FORMAT_R16G16B16A16_SNORM: 92,\n  VK_FORMAT_R16G16B16A16_USCALED: 93,\n  VK_FORMAT_R16G16B16A16_SSCALED: 94,\n  VK_FORMAT_R16G16B16A16_UINT: 95,\n  VK_FORMAT_R16G16B16A16_SINT: 96,\n  VK_FORMAT_R16G16B16A16_SFLOAT: 97,\n  VK_FORMAT_R32_UINT: 98,\n  VK_FORMAT_R32_SINT: 99,\n  VK_FORMAT_R32_SFLOAT: 100,\n  VK_FORMAT_R32G32_UINT: 101,\n  VK_FORMAT_R32G32_SINT: 102,\n  VK_FORMAT_R32G32_SFLOAT: 103,\n  VK_FORMAT_R32G32B32_UINT: 104,\n  VK_FORMAT_R32G32B32_SINT: 105,\n  VK_FORMAT_R32G32B32_SFLOAT: 106,\n  VK_FORMAT_R32G32B32A32_UINT: 107,\n  VK_FORMAT_R32G32B32A32_SINT: 108,\n  VK_FORMAT_R32G32B32A32_SFLOAT: 109,\n  VK_FORMAT_R64_UINT: 110,\n  VK_FORMAT_R64_SINT: 111,\n  VK_FORMAT_R64_SFLOAT: 112,\n  VK_FORMAT_R64G64_UINT: 113,\n  VK_FORMAT_R64G64_SINT: 114,\n  VK_FORMAT_R64G64_SFLOAT: 115,\n  VK_FORMAT_R64G64B64_UINT: 116,\n  VK_FORMAT_R64G64B64_SINT: 117,\n  VK_FORMAT_R64G64B64_SFLOAT: 118,\n  VK_FORMAT_R64G64B64A64_UINT: 119,\n  VK_FORMAT_R64G64B64A64_SINT: 120,\n  VK_FORMAT_R64G64B64A64_SFLOAT: 121,\n  VK_FORMAT_B10G11R11_UFLOAT_PACK32: 122,\n  VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 123,\n  VK_FORMAT_D16_UNORM: 124,\n  VK_FORMAT_X8_D24_UNORM_PACK32: 125,\n  VK_FORMAT_D32_SFLOAT: 126,\n  VK_FORMAT_S8_UINT: 127,\n  VK_FORMAT_D16_UNORM_S8_UINT: 128,\n  VK_FORMAT_D24_UNORM_S8_UINT: 129,\n  VK_FORMAT_D32_SFLOAT_S8_UINT: 130,\n  VK_FORMAT_BC1_RGB_UNORM_BLOCK: 131,\n  VK_FORMAT_BC1_RGB_SRGB_BLOCK: 132,\n  VK_FORMAT_BC1_RGBA_UNORM_BLOCK: 133,\n  VK_FORMAT_BC1_RGBA_SRGB_BLOCK: 134,\n  VK_FORMAT_BC2_UNORM_BLOCK: 135,\n  VK_FORMAT_BC2_SRGB_BLOCK: 136,\n  VK_FORMAT_BC3_UNORM_BLOCK: 137,\n  VK_FORMAT_BC3_SRGB_BLOCK: 138,\n  VK_FORMAT_BC4_UNORM_BLOCK: 139,\n  VK_FORMAT_BC4_SNORM_BLOCK: 140,\n  VK_FORMAT_BC5_UNORM_BLOCK: 141,\n  VK_FORMAT_BC5_SNORM_BLOCK: 142,\n  VK_FORMAT_BC6H_UFLOAT_BLOCK: 143,\n  VK_FORMAT_BC6H_SFLOAT_BLOCK: 144,\n  VK_FORMAT_BC7_UNORM_BLOCK: 145,\n  VK_FORMAT_BC7_SRGB_BLOCK: 146,\n  VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: 147,\n  VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: 148,\n  VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: 149,\n  VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: 150,\n  VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: 151,\n  VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: 152,\n  VK_FORMAT_EAC_R11_UNORM_BLOCK: 153,\n  VK_FORMAT_EAC_R11_SNORM_BLOCK: 154,\n  VK_FORMAT_EAC_R11G11_UNORM_BLOCK: 155,\n  VK_FORMAT_EAC_R11G11_SNORM_BLOCK: 156,\n  VK_FORMAT_ASTC_4x4_UNORM_BLOCK: 157,\n  VK_FORMAT_ASTC_4x4_SRGB_BLOCK: 158,\n  VK_FORMAT_ASTC_5x4_UNORM_BLOCK: 159,\n  VK_FORMAT_ASTC_5x4_SRGB_BLOCK: 160,\n  VK_FORMAT_ASTC_5x5_UNORM_BLOCK: 161,\n  VK_FORMAT_ASTC_5x5_SRGB_BLOCK: 162,\n  VK_FORMAT_ASTC_6x5_UNORM_BLOCK: 163,\n  VK_FORMAT_ASTC_6x5_SRGB_BLOCK: 164,\n  VK_FORMAT_ASTC_6x6_UNORM_BLOCK: 165,\n  VK_FORMAT_ASTC_6x6_SRGB_BLOCK: 166,\n  VK_FORMAT_ASTC_8x5_UNORM_BLOCK: 167,\n  VK_FORMAT_ASTC_8x5_SRGB_BLOCK: 168,\n  VK_FORMAT_ASTC_8x6_UNORM_BLOCK: 169,\n  VK_FORMAT_ASTC_8x6_SRGB_BLOCK: 170,\n  VK_FORMAT_ASTC_8x8_UNORM_BLOCK: 171,\n  VK_FORMAT_ASTC_8x8_SRGB_BLOCK: 172,\n  VK_FORMAT_ASTC_10x5_UNORM_BLOCK: 173,\n  VK_FORMAT_ASTC_10x5_SRGB_BLOCK: 174,\n  VK_FORMAT_ASTC_10x6_UNORM_BLOCK: 175,\n  VK_FORMAT_ASTC_10x6_SRGB_BLOCK: 176,\n  VK_FORMAT_ASTC_10x8_UNORM_BLOCK: 177,\n  VK_FORMAT_ASTC_10x8_SRGB_BLOCK: 178,\n  VK_FORMAT_ASTC_10x10_UNORM_BLOCK: 179,\n  VK_FORMAT_ASTC_10x10_SRGB_BLOCK: 180,\n  VK_FORMAT_ASTC_12x10_UNORM_BLOCK: 181,\n  VK_FORMAT_ASTC_12x10_SRGB_BLOCK: 182,\n  VK_FORMAT_ASTC_12x12_UNORM_BLOCK: 183,\n  VK_FORMAT_ASTC_12x12_SRGB_BLOCK: 184,\n  VK_FORMAT_G8B8G8R8_422_UNORM: 1000156000,\n  VK_FORMAT_B8G8R8G8_422_UNORM: 1000156001,\n  VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: 1000156002,\n  VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: 1000156003,\n  VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM: 1000156004,\n  VK_FORMAT_G8_B8R8_2PLANE_422_UNORM: 1000156005,\n  VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM: 1000156006,\n  VK_FORMAT_R10X6_UNORM_PACK16: 1000156007,\n  VK_FORMAT_R10X6G10X6_UNORM_2PACK16: 1000156008,\n  VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16: 1000156009,\n  VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16: 1000156010,\n  VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16: 1000156011,\n  VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16: 1000156012,\n  VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: 1000156013,\n  VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16: 1000156014,\n  VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16: 1000156015,\n  VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16: 1000156016,\n  VK_FORMAT_R12X4_UNORM_PACK16: 1000156017,\n  VK_FORMAT_R12X4G12X4_UNORM_2PACK16: 1000156018,\n  VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16: 1000156019,\n  VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16: 1000156020,\n  VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16: 1000156021,\n  VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16: 1000156022,\n  VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16: 1000156023,\n  VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16: 1000156024,\n  VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16: 1000156025,\n  VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16: 1000156026,\n  VK_FORMAT_G16B16G16R16_422_UNORM: 1000156027,\n  VK_FORMAT_B16G16R16G16_422_UNORM: 1000156028,\n  VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM: 1000156029,\n  VK_FORMAT_G16_B16R16_2PLANE_420_UNORM: 1000156030,\n  VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM: 1000156031,\n  VK_FORMAT_G16_B16R16_2PLANE_422_UNORM: 1000156032,\n  VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM: 1000156033,\n  VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG: 1000054000,\n  VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG: 1000054001,\n  VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG: 1000054002,\n  VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG: 1000054003,\n  VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG: 1000054004,\n  VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG: 1000054005,\n  VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG: 1000054006,\n  VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: 1000054007,\n  VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT: 1000066000,\n  VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT: 1000066001,\n  VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT: 1000066002,\n  VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT: 1000066003,\n  VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT: 1000066004,\n  VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT: 1000066005,\n  VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT: 1000066006,\n  VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT: 1000066007,\n  VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT: 1000066008,\n  VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT: 1000066009,\n  VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT: 1000066010,\n  VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT: 1000066011,\n  VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT: 1000066012,\n  VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT: 1000066013,\n  VK_FORMAT_G8B8G8R8_422_UNORM_KHR: 1000156000,\n  VK_FORMAT_B8G8R8G8_422_UNORM_KHR: 1000156001,\n  VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR: 1000156002,\n  VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR: 1000156003,\n  VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR: 1000156004,\n  VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR: 1000156005,\n  VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR: 1000156006,\n  VK_FORMAT_R10X6_UNORM_PACK16_KHR: 1000156007,\n  VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR: 1000156008,\n  VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR: 1000156009,\n  VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR: 1000156010,\n  VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR: 1000156011,\n  VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR: 1000156012,\n  VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR: 1000156013,\n  VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR: 1000156014,\n  VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR: 1000156015,\n  VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR: 1000156016,\n  VK_FORMAT_R12X4_UNORM_PACK16_KHR: 1000156017,\n  VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR: 1000156018,\n  VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR: 1000156019,\n  VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR: 1000156020,\n  VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR: 1000156021,\n  VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR: 1000156022,\n  VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR: 1000156023,\n  VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR: 1000156024,\n  VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR: 1000156025,\n  VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR: 1000156026,\n  VK_FORMAT_G16B16G16R16_422_UNORM_KHR: 1000156027,\n  VK_FORMAT_B16G16R16G16_422_UNORM_KHR: 1000156028,\n  VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR: 1000156029,\n  VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR: 1000156030,\n  VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR: 1000156031,\n  VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR: 1000156032,\n  VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR: 1000156033,\n};\nexport default Object.freeze(VulkanConstants);\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport VertexFormat from \"./VertexFormat.js\";\nimport WallGeometryLibrary from \"./WallGeometryLibrary.js\";\n\nconst scratchCartesian3Position1 = new Cartesian3();\nconst scratchCartesian3Position2 = new Cartesian3();\nconst scratchCartesian3Position4 = new Cartesian3();\nconst scratchCartesian3Position5 = new Cartesian3();\nconst scratchBitangent = new Cartesian3();\nconst scratchTangent = new Cartesian3();\nconst scratchNormal = new Cartesian3();\n\n/**\n * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @alias WallGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {number[]} [options.maximumHeights] An array parallel to <code>positions</code> that give the maximum height of the\n *        wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {number[]} [options.minimumHeights] An array parallel to <code>positions</code> that give the minimum height of the\n *        wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid for coordinate manipulation\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n *\n * @exception {DeveloperError} positions length must be greater than or equal to 2.\n * @exception {DeveloperError} positions and maximumHeights must have the same length.\n * @exception {DeveloperError} positions and minimumHeights must have the same length.\n *\n * @see WallGeometry#createGeometry\n * @see WallGeometry#fromConstantHeight\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=wall|Cesium Sandcastle Wall Demo}\n *\n * @example\n * // create a wall that spans from ground level to 10000 meters\n * const wall = new Cesium.WallGeometry({\n *   positions : Cesium.Cartesian3.fromDegreesArrayHeights([\n *     19.0, 47.0, 10000.0,\n *     19.0, 48.0, 10000.0,\n *     20.0, 48.0, 10000.0,\n *     20.0, 47.0, 10000.0,\n *     19.0, 47.0, 10000.0\n *   ])\n * });\n * const geometry = Cesium.WallGeometry.createGeometry(wall);\n */\nfunction WallGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const wallPositions = options.positions;\n  const maximumHeights = options.maximumHeights;\n  const minimumHeights = options.minimumHeights;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(wallPositions)) {\n    throw new DeveloperError(\"options.positions is required.\");\n  }\n  if (\n    defined(maximumHeights) &&\n    maximumHeights.length !== wallPositions.length\n  ) {\n    throw new DeveloperError(\n      \"options.positions and options.maximumHeights must have the same length.\",\n    );\n  }\n  if (\n    defined(minimumHeights) &&\n    minimumHeights.length !== wallPositions.length\n  ) {\n    throw new DeveloperError(\n      \"options.positions and options.minimumHeights must have the same length.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const vertexFormat = options.vertexFormat ?? VertexFormat.DEFAULT;\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n\n  this._positions = wallPositions;\n  this._minimumHeights = minimumHeights;\n  this._maximumHeights = maximumHeights;\n  this._vertexFormat = VertexFormat.clone(vertexFormat);\n  this._granularity = granularity;\n  this._ellipsoid = Ellipsoid.clone(ellipsoid);\n  this._workerName = \"createWallGeometry\";\n\n  let numComponents = 1 + wallPositions.length * Cartesian3.packedLength + 2;\n  if (defined(minimumHeights)) {\n    numComponents += minimumHeights.length;\n  }\n  if (defined(maximumHeights)) {\n    numComponents += maximumHeights.length;\n  }\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength =\n    numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 1;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {WallGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nWallGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  const positions = value._positions;\n  let length = positions.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  const minimumHeights = value._minimumHeights;\n  length = defined(minimumHeights) ? minimumHeights.length : 0;\n  array[startingIndex++] = length;\n\n  if (defined(minimumHeights)) {\n    for (i = 0; i < length; ++i) {\n      array[startingIndex++] = minimumHeights[i];\n    }\n  }\n\n  const maximumHeights = value._maximumHeights;\n  length = defined(maximumHeights) ? maximumHeights.length : 0;\n  array[startingIndex++] = length;\n\n  if (defined(maximumHeights)) {\n    for (i = 0; i < length; ++i) {\n      array[startingIndex++] = maximumHeights[i];\n    }\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  VertexFormat.pack(value._vertexFormat, array, startingIndex);\n  startingIndex += VertexFormat.packedLength;\n\n  array[startingIndex] = value._granularity;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchVertexFormat = new VertexFormat();\nconst scratchOptions = {\n  positions: undefined,\n  minimumHeights: undefined,\n  maximumHeights: undefined,\n  ellipsoid: scratchEllipsoid,\n  vertexFormat: scratchVertexFormat,\n  granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {WallGeometry} [result] The object into which to store the result.\n * @returns {WallGeometry} The modified result parameter or a new WallGeometry instance if one was not provided.\n */\nWallGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  let length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  length = array[startingIndex++];\n  let minimumHeights;\n\n  if (length > 0) {\n    minimumHeights = new Array(length);\n    for (i = 0; i < length; ++i) {\n      minimumHeights[i] = array[startingIndex++];\n    }\n  }\n\n  length = array[startingIndex++];\n  let maximumHeights;\n\n  if (length > 0) {\n    maximumHeights = new Array(length);\n    for (i = 0; i < length; ++i) {\n      maximumHeights[i] = array[startingIndex++];\n    }\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const vertexFormat = VertexFormat.unpack(\n    array,\n    startingIndex,\n    scratchVertexFormat,\n  );\n  startingIndex += VertexFormat.packedLength;\n\n  const granularity = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.positions = positions;\n    scratchOptions.minimumHeights = minimumHeights;\n    scratchOptions.maximumHeights = maximumHeights;\n    scratchOptions.granularity = granularity;\n    return new WallGeometry(scratchOptions);\n  }\n\n  result._positions = positions;\n  result._minimumHeights = minimumHeights;\n  result._maximumHeights = maximumHeights;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\n  result._granularity = granularity;\n\n  return result;\n};\n\n/**\n * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {number} [options.maximumHeight] A constant that defines the maximum height of the\n *        wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {number} [options.minimumHeight] A constant that defines the minimum height of the\n *        wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid for coordinate manipulation\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\n * @returns {WallGeometry}\n *\n *\n * @example\n * // create a wall that spans from 10000 meters to 20000 meters\n * const wall = Cesium.WallGeometry.fromConstantHeights({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     19.0, 47.0,\n *     19.0, 48.0,\n *     20.0, 48.0,\n *     20.0, 47.0,\n *     19.0, 47.0,\n *   ]),\n *   minimumHeight : 20000.0,\n *   maximumHeight : 10000.0\n * });\n * const geometry = Cesium.WallGeometry.createGeometry(wall);\n *\n * @see WallGeometry#createGeometry\n */\nWallGeometry.fromConstantHeights = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions)) {\n    throw new DeveloperError(\"options.positions is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let minHeights;\n  let maxHeights;\n\n  const min = options.minimumHeight;\n  const max = options.maximumHeight;\n\n  const doMin = defined(min);\n  const doMax = defined(max);\n  if (doMin || doMax) {\n    const length = positions.length;\n    minHeights = doMin ? new Array(length) : undefined;\n    maxHeights = doMax ? new Array(length) : undefined;\n\n    for (let i = 0; i < length; ++i) {\n      if (doMin) {\n        minHeights[i] = min;\n      }\n\n      if (doMax) {\n        maxHeights[i] = max;\n      }\n    }\n  }\n\n  const newOptions = {\n    positions: positions,\n    maximumHeights: maxHeights,\n    minimumHeights: minHeights,\n    ellipsoid: options.ellipsoid,\n    vertexFormat: options.vertexFormat,\n  };\n  return new WallGeometry(newOptions);\n};\n\n/**\n * Computes the geometric representation of a wall, including its vertices, indices, and a bounding sphere.\n *\n * @param {WallGeometry} wallGeometry A description of the wall.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nWallGeometry.createGeometry = function (wallGeometry) {\n  const wallPositions = wallGeometry._positions;\n  const minimumHeights = wallGeometry._minimumHeights;\n  const maximumHeights = wallGeometry._maximumHeights;\n  const vertexFormat = wallGeometry._vertexFormat;\n  const granularity = wallGeometry._granularity;\n  const ellipsoid = wallGeometry._ellipsoid;\n\n  const pos = WallGeometryLibrary.computePositions(\n    ellipsoid,\n    wallPositions,\n    maximumHeights,\n    minimumHeights,\n    granularity,\n    true,\n  );\n  if (!defined(pos)) {\n    return;\n  }\n\n  const bottomPositions = pos.bottomPositions;\n  const topPositions = pos.topPositions;\n  const numCorners = pos.numCorners;\n\n  let length = topPositions.length;\n  let size = length * 2;\n\n  const positions = vertexFormat.position ? new Float64Array(size) : undefined;\n  const normals = vertexFormat.normal ? new Float32Array(size) : undefined;\n  const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\n  const bitangents = vertexFormat.bitangent\n    ? new Float32Array(size)\n    : undefined;\n  const textureCoordinates = vertexFormat.st\n    ? new Float32Array((size / 3) * 2)\n    : undefined;\n\n  let positionIndex = 0;\n  let normalIndex = 0;\n  let bitangentIndex = 0;\n  let tangentIndex = 0;\n  let stIndex = 0;\n\n  // add lower and upper points one after the other, lower\n  // points being even and upper points being odd\n  let normal = scratchNormal;\n  let tangent = scratchTangent;\n  let bitangent = scratchBitangent;\n  let recomputeNormal = true;\n  length /= 3;\n  let i;\n  let s = 0;\n  const ds = 1 / (length - numCorners - 1);\n  for (i = 0; i < length; ++i) {\n    const i3 = i * 3;\n    const topPosition = Cartesian3.fromArray(\n      topPositions,\n      i3,\n      scratchCartesian3Position1,\n    );\n    const bottomPosition = Cartesian3.fromArray(\n      bottomPositions,\n      i3,\n      scratchCartesian3Position2,\n    );\n    if (vertexFormat.position) {\n      // insert the lower point\n      positions[positionIndex++] = bottomPosition.x;\n      positions[positionIndex++] = bottomPosition.y;\n      positions[positionIndex++] = bottomPosition.z;\n\n      // insert the upper point\n      positions[positionIndex++] = topPosition.x;\n      positions[positionIndex++] = topPosition.y;\n      positions[positionIndex++] = topPosition.z;\n    }\n\n    if (vertexFormat.st) {\n      textureCoordinates[stIndex++] = s;\n      textureCoordinates[stIndex++] = 0.0;\n\n      textureCoordinates[stIndex++] = s;\n      textureCoordinates[stIndex++] = 1.0;\n    }\n\n    if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\n      let nextTop = Cartesian3.clone(\n        Cartesian3.ZERO,\n        scratchCartesian3Position5,\n      );\n      const groundPosition = Cartesian3.subtract(\n        topPosition,\n        ellipsoid.geodeticSurfaceNormal(\n          topPosition,\n          scratchCartesian3Position2,\n        ),\n        scratchCartesian3Position2,\n      );\n      if (i + 1 < length) {\n        nextTop = Cartesian3.fromArray(\n          topPositions,\n          i3 + 3,\n          scratchCartesian3Position5,\n        );\n      }\n\n      if (recomputeNormal) {\n        const scalednextPosition = Cartesian3.subtract(\n          nextTop,\n          topPosition,\n          scratchCartesian3Position4,\n        );\n        const scaledGroundPosition = Cartesian3.subtract(\n          groundPosition,\n          topPosition,\n          scratchCartesian3Position1,\n        );\n        normal = Cartesian3.normalize(\n          Cartesian3.cross(scaledGroundPosition, scalednextPosition, normal),\n          normal,\n        );\n        recomputeNormal = false;\n      }\n\n      if (\n        Cartesian3.equalsEpsilon(topPosition, nextTop, CesiumMath.EPSILON10)\n      ) {\n        recomputeNormal = true;\n      } else {\n        s += ds;\n        if (vertexFormat.tangent) {\n          tangent = Cartesian3.normalize(\n            Cartesian3.subtract(nextTop, topPosition, tangent),\n            tangent,\n          );\n        }\n        if (vertexFormat.bitangent) {\n          bitangent = Cartesian3.normalize(\n            Cartesian3.cross(normal, tangent, bitangent),\n            bitangent,\n          );\n        }\n      }\n\n      if (vertexFormat.normal) {\n        normals[normalIndex++] = normal.x;\n        normals[normalIndex++] = normal.y;\n        normals[normalIndex++] = normal.z;\n\n        normals[normalIndex++] = normal.x;\n        normals[normalIndex++] = normal.y;\n        normals[normalIndex++] = normal.z;\n      }\n\n      if (vertexFormat.tangent) {\n        tangents[tangentIndex++] = tangent.x;\n        tangents[tangentIndex++] = tangent.y;\n        tangents[tangentIndex++] = tangent.z;\n\n        tangents[tangentIndex++] = tangent.x;\n        tangents[tangentIndex++] = tangent.y;\n        tangents[tangentIndex++] = tangent.z;\n      }\n\n      if (vertexFormat.bitangent) {\n        bitangents[bitangentIndex++] = bitangent.x;\n        bitangents[bitangentIndex++] = bitangent.y;\n        bitangents[bitangentIndex++] = bitangent.z;\n\n        bitangents[bitangentIndex++] = bitangent.x;\n        bitangents[bitangentIndex++] = bitangent.y;\n        bitangents[bitangentIndex++] = bitangent.z;\n      }\n    }\n  }\n\n  const attributes = new GeometryAttributes();\n\n  if (vertexFormat.position) {\n    attributes.position = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    });\n  }\n\n  if (vertexFormat.normal) {\n    attributes.normal = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: normals,\n    });\n  }\n\n  if (vertexFormat.tangent) {\n    attributes.tangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: tangents,\n    });\n  }\n\n  if (vertexFormat.bitangent) {\n    attributes.bitangent = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n      values: bitangents,\n    });\n  }\n\n  if (vertexFormat.st) {\n    attributes.st = new GeometryAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n      values: textureCoordinates,\n    });\n  }\n\n  // prepare the side walls, two triangles for each wall\n  //\n  //    A (i+1)  B (i+3) E\n  //    +--------+-------+\n  //    |      / |      /|    triangles:  A C B\n  //    |     /  |     / |                B C D\n  //    |    /   |    /  |\n  //    |   /    |   /   |\n  //    |  /     |  /    |\n  //    | /      | /     |\n  //    +--------+-------+\n  //    C (i)    D (i+2) F\n  //\n\n  const numVertices = size / 3;\n  size -= 6 * (numCorners + 1);\n  const indices = IndexDatatype.createTypedArray(numVertices, size);\n\n  let edgeIndex = 0;\n  for (i = 0; i < numVertices - 2; i += 2) {\n    const LL = i;\n    const LR = i + 2;\n    const pl = Cartesian3.fromArray(\n      positions,\n      LL * 3,\n      scratchCartesian3Position1,\n    );\n    const pr = Cartesian3.fromArray(\n      positions,\n      LR * 3,\n      scratchCartesian3Position2,\n    );\n    if (Cartesian3.equalsEpsilon(pl, pr, CesiumMath.EPSILON10)) {\n      continue;\n    }\n    const UL = i + 1;\n    const UR = i + 3;\n\n    indices[edgeIndex++] = UL;\n    indices[edgeIndex++] = LL;\n    indices[edgeIndex++] = UR;\n    indices[edgeIndex++] = UR;\n    indices[edgeIndex++] = LL;\n    indices[edgeIndex++] = LR;\n  }\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingSphere: new BoundingSphere.fromVertices(positions),\n  });\n};\nexport default WallGeometry;\n","import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\nimport PolylinePipeline from \"./PolylinePipeline.js\";\n\n/**\n * @private\n */\nconst WallGeometryLibrary = {};\n\nfunction latLonEquals(c0, c1) {\n  return (\n    CesiumMath.equalsEpsilon(c0.latitude, c1.latitude, CesiumMath.EPSILON10) &&\n    CesiumMath.equalsEpsilon(c0.longitude, c1.longitude, CesiumMath.EPSILON10)\n  );\n}\n\nconst scratchCartographic1 = new Cartographic();\nconst scratchCartographic2 = new Cartographic();\nfunction removeDuplicates(ellipsoid, positions, topHeights, bottomHeights) {\n  positions = arrayRemoveDuplicates(positions, Cartesian3.equalsEpsilon);\n\n  const length = positions.length;\n  if (length < 2) {\n    return;\n  }\n\n  const hasBottomHeights = defined(bottomHeights);\n  const hasTopHeights = defined(topHeights);\n\n  const cleanedPositions = new Array(length);\n  const cleanedTopHeights = new Array(length);\n  const cleanedBottomHeights = new Array(length);\n\n  const v0 = positions[0];\n  cleanedPositions[0] = v0;\n\n  const c0 = ellipsoid.cartesianToCartographic(v0, scratchCartographic1);\n  if (hasTopHeights) {\n    c0.height = topHeights[0];\n  }\n\n  cleanedTopHeights[0] = c0.height;\n\n  if (hasBottomHeights) {\n    cleanedBottomHeights[0] = bottomHeights[0];\n  } else {\n    cleanedBottomHeights[0] = 0.0;\n  }\n\n  const startTopHeight = cleanedTopHeights[0];\n  const startBottomHeight = cleanedBottomHeights[0];\n  let hasAllSameHeights = startTopHeight === startBottomHeight;\n\n  let index = 1;\n  for (let i = 1; i < length; ++i) {\n    const v1 = positions[i];\n    const c1 = ellipsoid.cartesianToCartographic(v1, scratchCartographic2);\n    if (hasTopHeights) {\n      c1.height = topHeights[i];\n    }\n    hasAllSameHeights = hasAllSameHeights && c1.height === 0;\n\n    if (!latLonEquals(c0, c1)) {\n      cleanedPositions[index] = v1; // Shallow copy!\n      cleanedTopHeights[index] = c1.height;\n\n      if (hasBottomHeights) {\n        cleanedBottomHeights[index] = bottomHeights[i];\n      } else {\n        cleanedBottomHeights[index] = 0.0;\n      }\n      hasAllSameHeights =\n        hasAllSameHeights &&\n        cleanedTopHeights[index] === cleanedBottomHeights[index];\n\n      Cartographic.clone(c1, c0);\n      ++index;\n    } else if (c0.height < c1.height) {\n      // two adjacent positions are the same, so use whichever has the greater height\n      cleanedTopHeights[index - 1] = c1.height;\n    }\n  }\n\n  if (hasAllSameHeights || index < 2) {\n    return;\n  }\n\n  cleanedPositions.length = index;\n  cleanedTopHeights.length = index;\n  cleanedBottomHeights.length = index;\n\n  return {\n    positions: cleanedPositions,\n    topHeights: cleanedTopHeights,\n    bottomHeights: cleanedBottomHeights,\n  };\n}\n\nconst positionsArrayScratch = new Array(2);\nconst heightsArrayScratch = new Array(2);\nconst generateArcOptionsScratch = {\n  positions: undefined,\n  height: undefined,\n  granularity: undefined,\n  ellipsoid: undefined,\n};\n\n/**\n * @private\n */\nWallGeometryLibrary.computePositions = function (\n  ellipsoid,\n  wallPositions,\n  maximumHeights,\n  minimumHeights,\n  granularity,\n  duplicateCorners,\n) {\n  const o = removeDuplicates(\n    ellipsoid,\n    wallPositions,\n    maximumHeights,\n    minimumHeights,\n  );\n\n  if (!defined(o)) {\n    return;\n  }\n\n  wallPositions = o.positions;\n  maximumHeights = o.topHeights;\n  minimumHeights = o.bottomHeights;\n\n  const length = wallPositions.length;\n  const numCorners = length - 2;\n  let topPositions;\n  let bottomPositions;\n\n  const minDistance = CesiumMath.chordLength(\n    granularity,\n    ellipsoid.maximumRadius,\n  );\n\n  const generateArcOptions = generateArcOptionsScratch;\n  generateArcOptions.minDistance = minDistance;\n  generateArcOptions.ellipsoid = ellipsoid;\n\n  if (duplicateCorners) {\n    let count = 0;\n    let i;\n\n    for (i = 0; i < length - 1; i++) {\n      count +=\n        PolylinePipeline.numberOfPoints(\n          wallPositions[i],\n          wallPositions[i + 1],\n          minDistance,\n        ) + 1;\n    }\n\n    topPositions = new Float64Array(count * 3);\n    bottomPositions = new Float64Array(count * 3);\n\n    const generateArcPositions = positionsArrayScratch;\n    const generateArcHeights = heightsArrayScratch;\n    generateArcOptions.positions = generateArcPositions;\n    generateArcOptions.height = generateArcHeights;\n\n    let offset = 0;\n    for (i = 0; i < length - 1; i++) {\n      generateArcPositions[0] = wallPositions[i];\n      generateArcPositions[1] = wallPositions[i + 1];\n\n      generateArcHeights[0] = maximumHeights[i];\n      generateArcHeights[1] = maximumHeights[i + 1];\n\n      const pos = PolylinePipeline.generateArc(generateArcOptions);\n      topPositions.set(pos, offset);\n\n      generateArcHeights[0] = minimumHeights[i];\n      generateArcHeights[1] = minimumHeights[i + 1];\n\n      bottomPositions.set(\n        PolylinePipeline.generateArc(generateArcOptions),\n        offset,\n      );\n\n      offset += pos.length;\n    }\n  } else {\n    generateArcOptions.positions = wallPositions;\n    generateArcOptions.height = maximumHeights;\n    topPositions = new Float64Array(\n      PolylinePipeline.generateArc(generateArcOptions),\n    );\n\n    generateArcOptions.height = minimumHeights;\n    bottomPositions = new Float64Array(\n      PolylinePipeline.generateArc(generateArcOptions),\n    );\n  }\n\n  return {\n    bottomPositions: bottomPositions,\n    topPositions: topPositions,\n    numCorners: numCorners,\n  };\n};\nexport default WallGeometryLibrary;\n","import BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryAttributes from \"./GeometryAttributes.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport WallGeometryLibrary from \"./WallGeometryLibrary.js\";\n\nconst scratchCartesian3Position1 = new Cartesian3();\nconst scratchCartesian3Position2 = new Cartesian3();\n\n/**\n * A description of a wall outline. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @alias WallOutlineGeometry\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\n * @param {number[]} [options.maximumHeights] An array parallel to <code>positions</code> that give the maximum height of the\n *        wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {number[]} [options.minimumHeights] An array parallel to <code>positions</code> that give the minimum height of the\n *        wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid for coordinate manipulation\n *\n * @exception {DeveloperError} positions length must be greater than or equal to 2.\n * @exception {DeveloperError} positions and maximumHeights must have the same length.\n * @exception {DeveloperError} positions and minimumHeights must have the same length.\n *\n * @see WallGeometry#createGeometry\n * @see WallGeometry#fromConstantHeight\n *\n * @example\n * // create a wall outline that spans from ground level to 10000 meters\n * const wall = new Cesium.WallOutlineGeometry({\n *   positions : Cesium.Cartesian3.fromDegreesArrayHeights([\n *     19.0, 47.0, 10000.0,\n *     19.0, 48.0, 10000.0,\n *     20.0, 48.0, 10000.0,\n *     20.0, 47.0, 10000.0,\n *     19.0, 47.0, 10000.0\n *   ])\n * });\n * const geometry = Cesium.WallOutlineGeometry.createGeometry(wall);\n */\nfunction WallOutlineGeometry(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const wallPositions = options.positions;\n  const maximumHeights = options.maximumHeights;\n  const minimumHeights = options.minimumHeights;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(wallPositions)) {\n    throw new DeveloperError(\"options.positions is required.\");\n  }\n  if (\n    defined(maximumHeights) &&\n    maximumHeights.length !== wallPositions.length\n  ) {\n    throw new DeveloperError(\n      \"options.positions and options.maximumHeights must have the same length.\",\n    );\n  }\n  if (\n    defined(minimumHeights) &&\n    minimumHeights.length !== wallPositions.length\n  ) {\n    throw new DeveloperError(\n      \"options.positions and options.minimumHeights must have the same length.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n\n  this._positions = wallPositions;\n  this._minimumHeights = minimumHeights;\n  this._maximumHeights = maximumHeights;\n  this._granularity = granularity;\n  this._ellipsoid = Ellipsoid.clone(ellipsoid);\n  this._workerName = \"createWallOutlineGeometry\";\n\n  let numComponents = 1 + wallPositions.length * Cartesian3.packedLength + 2;\n  if (defined(minimumHeights)) {\n    numComponents += minimumHeights.length;\n  }\n  if (defined(maximumHeights)) {\n    numComponents += maximumHeights.length;\n  }\n\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  this.packedLength = numComponents + Ellipsoid.packedLength + 1;\n}\n\n/**\n * Stores the provided instance into the provided array.\n *\n * @param {WallOutlineGeometry} value The value to pack.\n * @param {number[]} array The array to pack into.\n * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n *\n * @returns {number[]} The array that was packed into\n */\nWallOutlineGeometry.pack = function (value, array, startingIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required\");\n  }\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  const positions = value._positions;\n  let length = positions.length;\n  array[startingIndex++] = length;\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    Cartesian3.pack(positions[i], array, startingIndex);\n  }\n\n  const minimumHeights = value._minimumHeights;\n  length = defined(minimumHeights) ? minimumHeights.length : 0;\n  array[startingIndex++] = length;\n\n  if (defined(minimumHeights)) {\n    for (i = 0; i < length; ++i) {\n      array[startingIndex++] = minimumHeights[i];\n    }\n  }\n\n  const maximumHeights = value._maximumHeights;\n  length = defined(maximumHeights) ? maximumHeights.length : 0;\n  array[startingIndex++] = length;\n\n  if (defined(maximumHeights)) {\n    for (i = 0; i < length; ++i) {\n      array[startingIndex++] = maximumHeights[i];\n    }\n  }\n\n  Ellipsoid.pack(value._ellipsoid, array, startingIndex);\n  startingIndex += Ellipsoid.packedLength;\n\n  array[startingIndex] = value._granularity;\n\n  return array;\n};\n\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\nconst scratchOptions = {\n  positions: undefined,\n  minimumHeights: undefined,\n  maximumHeights: undefined,\n  ellipsoid: scratchEllipsoid,\n  granularity: undefined,\n};\n\n/**\n * Retrieves an instance from a packed array.\n *\n * @param {number[]} array The packed array.\n * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n * @param {WallOutlineGeometry} [result] The object into which to store the result.\n * @returns {WallOutlineGeometry} The modified result parameter or a new WallOutlineGeometry instance if one was not provided.\n */\nWallOutlineGeometry.unpack = function (array, startingIndex, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required\");\n  }\n  //>>includeEnd('debug');\n\n  startingIndex = startingIndex ?? 0;\n\n  let i;\n\n  let length = array[startingIndex++];\n  const positions = new Array(length);\n\n  for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\n    positions[i] = Cartesian3.unpack(array, startingIndex);\n  }\n\n  length = array[startingIndex++];\n  let minimumHeights;\n\n  if (length > 0) {\n    minimumHeights = new Array(length);\n    for (i = 0; i < length; ++i) {\n      minimumHeights[i] = array[startingIndex++];\n    }\n  }\n\n  length = array[startingIndex++];\n  let maximumHeights;\n\n  if (length > 0) {\n    maximumHeights = new Array(length);\n    for (i = 0; i < length; ++i) {\n      maximumHeights[i] = array[startingIndex++];\n    }\n  }\n\n  const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\n  startingIndex += Ellipsoid.packedLength;\n\n  const granularity = array[startingIndex];\n\n  if (!defined(result)) {\n    scratchOptions.positions = positions;\n    scratchOptions.minimumHeights = minimumHeights;\n    scratchOptions.maximumHeights = maximumHeights;\n    scratchOptions.granularity = granularity;\n    return new WallOutlineGeometry(scratchOptions);\n  }\n\n  result._positions = positions;\n  result._minimumHeights = minimumHeights;\n  result._maximumHeights = maximumHeights;\n  result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\n  result._granularity = granularity;\n\n  return result;\n};\n\n/**\n * A description of a walloutline. A wall is defined by a series of points,\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\n * @param {number} [options.maximumHeight] A constant that defines the maximum height of the\n *        wall at <code>positions</code>. If undefined, the height of each position in used.\n * @param {number} [options.minimumHeight] A constant that defines the minimum height of the\n *        wall at <code>positions</code>. If undefined, the height at each position is 0.0.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid for coordinate manipulation\n * @returns {WallOutlineGeometry}\n *\n *\n * @example\n * // create a wall that spans from 10000 meters to 20000 meters\n * const wall = Cesium.WallOutlineGeometry.fromConstantHeights({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     19.0, 47.0,\n *     19.0, 48.0,\n *     20.0, 48.0,\n *     20.0, 47.0,\n *     19.0, 47.0,\n *   ]),\n *   minimumHeight : 20000.0,\n *   maximumHeight : 10000.0\n * });\n * const geometry = Cesium.WallOutlineGeometry.createGeometry(wall);\n *\n * @see WallOutlineGeometry#createGeometry\n */\nWallOutlineGeometry.fromConstantHeights = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const positions = options.positions;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positions)) {\n    throw new DeveloperError(\"options.positions is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let minHeights;\n  let maxHeights;\n\n  const min = options.minimumHeight;\n  const max = options.maximumHeight;\n\n  const doMin = defined(min);\n  const doMax = defined(max);\n  if (doMin || doMax) {\n    const length = positions.length;\n    minHeights = doMin ? new Array(length) : undefined;\n    maxHeights = doMax ? new Array(length) : undefined;\n\n    for (let i = 0; i < length; ++i) {\n      if (doMin) {\n        minHeights[i] = min;\n      }\n\n      if (doMax) {\n        maxHeights[i] = max;\n      }\n    }\n  }\n\n  const newOptions = {\n    positions: positions,\n    maximumHeights: maxHeights,\n    minimumHeights: minHeights,\n    ellipsoid: options.ellipsoid,\n  };\n  return new WallOutlineGeometry(newOptions);\n};\n\n/**\n * Computes the geometric representation of a wall outline, including its vertices, indices, and a bounding sphere.\n *\n * @param {WallOutlineGeometry} wallGeometry A description of the wall outline.\n * @returns {Geometry|undefined} The computed vertices and indices.\n */\nWallOutlineGeometry.createGeometry = function (wallGeometry) {\n  const wallPositions = wallGeometry._positions;\n  const minimumHeights = wallGeometry._minimumHeights;\n  const maximumHeights = wallGeometry._maximumHeights;\n  const granularity = wallGeometry._granularity;\n  const ellipsoid = wallGeometry._ellipsoid;\n\n  const pos = WallGeometryLibrary.computePositions(\n    ellipsoid,\n    wallPositions,\n    maximumHeights,\n    minimumHeights,\n    granularity,\n    false,\n  );\n  if (!defined(pos)) {\n    return;\n  }\n\n  const bottomPositions = pos.bottomPositions;\n  const topPositions = pos.topPositions;\n\n  let length = topPositions.length;\n  let size = length * 2;\n\n  const positions = new Float64Array(size);\n  let positionIndex = 0;\n\n  // add lower and upper points one after the other, lower\n  // points being even and upper points being odd\n  length /= 3;\n  let i;\n  for (i = 0; i < length; ++i) {\n    const i3 = i * 3;\n    const topPosition = Cartesian3.fromArray(\n      topPositions,\n      i3,\n      scratchCartesian3Position1,\n    );\n    const bottomPosition = Cartesian3.fromArray(\n      bottomPositions,\n      i3,\n      scratchCartesian3Position2,\n    );\n\n    // insert the lower point\n    positions[positionIndex++] = bottomPosition.x;\n    positions[positionIndex++] = bottomPosition.y;\n    positions[positionIndex++] = bottomPosition.z;\n\n    // insert the upper point\n    positions[positionIndex++] = topPosition.x;\n    positions[positionIndex++] = topPosition.y;\n    positions[positionIndex++] = topPosition.z;\n  }\n\n  const attributes = new GeometryAttributes({\n    position: new GeometryAttribute({\n      componentDatatype: ComponentDatatype.DOUBLE,\n      componentsPerAttribute: 3,\n      values: positions,\n    }),\n  });\n\n  const numVertices = size / 3;\n  size = 2 * numVertices - 4 + numVertices;\n  const indices = IndexDatatype.createTypedArray(numVertices, size);\n\n  let edgeIndex = 0;\n  for (i = 0; i < numVertices - 2; i += 2) {\n    const LL = i;\n    const LR = i + 2;\n    const pl = Cartesian3.fromArray(\n      positions,\n      LL * 3,\n      scratchCartesian3Position1,\n    );\n    const pr = Cartesian3.fromArray(\n      positions,\n      LR * 3,\n      scratchCartesian3Position2,\n    );\n    if (Cartesian3.equalsEpsilon(pl, pr, CesiumMath.EPSILON10)) {\n      continue;\n    }\n    const UL = i + 1;\n    const UR = i + 3;\n\n    indices[edgeIndex++] = UL;\n    indices[edgeIndex++] = LL;\n    indices[edgeIndex++] = UL;\n    indices[edgeIndex++] = UR;\n    indices[edgeIndex++] = LL;\n    indices[edgeIndex++] = LR;\n  }\n\n  indices[edgeIndex++] = numVertices - 2;\n  indices[edgeIndex++] = numVertices - 1;\n\n  return new Geometry({\n    attributes: attributes,\n    indices: indices,\n    primitiveType: PrimitiveType.LINES,\n    boundingSphere: new BoundingSphere.fromVertices(positions),\n  });\n};\nexport default WallOutlineGeometry;\n","/**\n * Enum containing WebGL Constant values by name.\n * for use without an active WebGL context, or in cases where certain constants are unavailable using the WebGL context\n * (For example, in [Safari 9]{@link https://github.com/CesiumGS/cesium/issues/2989}).\n *\n * These match the constants from the [WebGL 1.0]{@link https://www.khronos.org/registry/webgl/specs/latest/1.0/}\n * and [WebGL 2.0]{@link https://www.khronos.org/registry/webgl/specs/latest/2.0/}\n * specifications.\n *\n * @enum {number}\n */\nconst WebGLConstants = {\n  DEPTH_BUFFER_BIT: 0x00000100,\n  STENCIL_BUFFER_BIT: 0x00000400,\n  COLOR_BUFFER_BIT: 0x00004000,\n  POINTS: 0x0000,\n  LINES: 0x0001,\n  LINE_LOOP: 0x0002,\n  LINE_STRIP: 0x0003,\n  TRIANGLES: 0x0004,\n  TRIANGLE_STRIP: 0x0005,\n  TRIANGLE_FAN: 0x0006,\n  ZERO: 0,\n  ONE: 1,\n  SRC_COLOR: 0x0300,\n  ONE_MINUS_SRC_COLOR: 0x0301,\n  SRC_ALPHA: 0x0302,\n  ONE_MINUS_SRC_ALPHA: 0x0303,\n  DST_ALPHA: 0x0304,\n  ONE_MINUS_DST_ALPHA: 0x0305,\n  DST_COLOR: 0x0306,\n  ONE_MINUS_DST_COLOR: 0x0307,\n  SRC_ALPHA_SATURATE: 0x0308,\n  FUNC_ADD: 0x8006,\n  BLEND_EQUATION: 0x8009,\n  BLEND_EQUATION_RGB: 0x8009, // same as BLEND_EQUATION\n  BLEND_EQUATION_ALPHA: 0x883d,\n  FUNC_SUBTRACT: 0x800a,\n  FUNC_REVERSE_SUBTRACT: 0x800b,\n  BLEND_DST_RGB: 0x80c8,\n  BLEND_SRC_RGB: 0x80c9,\n  BLEND_DST_ALPHA: 0x80ca,\n  BLEND_SRC_ALPHA: 0x80cb,\n  CONSTANT_COLOR: 0x8001,\n  ONE_MINUS_CONSTANT_COLOR: 0x8002,\n  CONSTANT_ALPHA: 0x8003,\n  ONE_MINUS_CONSTANT_ALPHA: 0x8004,\n  BLEND_COLOR: 0x8005,\n  ARRAY_BUFFER: 0x8892,\n  ELEMENT_ARRAY_BUFFER: 0x8893,\n  ARRAY_BUFFER_BINDING: 0x8894,\n  ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,\n  STREAM_DRAW: 0x88e0,\n  STATIC_DRAW: 0x88e4,\n  DYNAMIC_DRAW: 0x88e8,\n  BUFFER_SIZE: 0x8764,\n  BUFFER_USAGE: 0x8765,\n  CURRENT_VERTEX_ATTRIB: 0x8626,\n  FRONT: 0x0404,\n  BACK: 0x0405,\n  FRONT_AND_BACK: 0x0408,\n  CULL_FACE: 0x0b44,\n  BLEND: 0x0be2,\n  DITHER: 0x0bd0,\n  STENCIL_TEST: 0x0b90,\n  DEPTH_TEST: 0x0b71,\n  SCISSOR_TEST: 0x0c11,\n  POLYGON_OFFSET_FILL: 0x8037,\n  SAMPLE_ALPHA_TO_COVERAGE: 0x809e,\n  SAMPLE_COVERAGE: 0x80a0,\n  NO_ERROR: 0,\n  INVALID_ENUM: 0x0500,\n  INVALID_VALUE: 0x0501,\n  INVALID_OPERATION: 0x0502,\n  OUT_OF_MEMORY: 0x0505,\n  CW: 0x0900,\n  CCW: 0x0901,\n  LINE_WIDTH: 0x0b21,\n  ALIASED_POINT_SIZE_RANGE: 0x846d,\n  ALIASED_LINE_WIDTH_RANGE: 0x846e,\n  CULL_FACE_MODE: 0x0b45,\n  FRONT_FACE: 0x0b46,\n  DEPTH_RANGE: 0x0b70,\n  DEPTH_WRITEMASK: 0x0b72,\n  DEPTH_CLEAR_VALUE: 0x0b73,\n  DEPTH_FUNC: 0x0b74,\n  STENCIL_CLEAR_VALUE: 0x0b91,\n  STENCIL_FUNC: 0x0b92,\n  STENCIL_FAIL: 0x0b94,\n  STENCIL_PASS_DEPTH_FAIL: 0x0b95,\n  STENCIL_PASS_DEPTH_PASS: 0x0b96,\n  STENCIL_REF: 0x0b97,\n  STENCIL_VALUE_MASK: 0x0b93,\n  STENCIL_WRITEMASK: 0x0b98,\n  STENCIL_BACK_FUNC: 0x8800,\n  STENCIL_BACK_FAIL: 0x8801,\n  STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,\n  STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,\n  STENCIL_BACK_REF: 0x8ca3,\n  STENCIL_BACK_VALUE_MASK: 0x8ca4,\n  STENCIL_BACK_WRITEMASK: 0x8ca5,\n  VIEWPORT: 0x0ba2,\n  SCISSOR_BOX: 0x0c10,\n  COLOR_CLEAR_VALUE: 0x0c22,\n  COLOR_WRITEMASK: 0x0c23,\n  UNPACK_ALIGNMENT: 0x0cf5,\n  PACK_ALIGNMENT: 0x0d05,\n  MAX_TEXTURE_SIZE: 0x0d33,\n  MAX_VIEWPORT_DIMS: 0x0d3a,\n  SUBPIXEL_BITS: 0x0d50,\n  RED_BITS: 0x0d52,\n  GREEN_BITS: 0x0d53,\n  BLUE_BITS: 0x0d54,\n  ALPHA_BITS: 0x0d55,\n  DEPTH_BITS: 0x0d56,\n  STENCIL_BITS: 0x0d57,\n  POLYGON_OFFSET_UNITS: 0x2a00,\n  POLYGON_OFFSET_FACTOR: 0x8038,\n  TEXTURE_BINDING_2D: 0x8069,\n  SAMPLE_BUFFERS: 0x80a8,\n  SAMPLES: 0x80a9,\n  SAMPLE_COVERAGE_VALUE: 0x80aa,\n  SAMPLE_COVERAGE_INVERT: 0x80ab,\n  COMPRESSED_TEXTURE_FORMATS: 0x86a3,\n  DONT_CARE: 0x1100,\n  FASTEST: 0x1101,\n  NICEST: 0x1102,\n  GENERATE_MIPMAP_HINT: 0x8192,\n  BYTE: 0x1400,\n  UNSIGNED_BYTE: 0x1401,\n  SHORT: 0x1402,\n  UNSIGNED_SHORT: 0x1403,\n  INT: 0x1404,\n  UNSIGNED_INT: 0x1405,\n  FLOAT: 0x1406,\n  DEPTH_COMPONENT: 0x1902,\n  ALPHA: 0x1906,\n  RGB: 0x1907,\n  RGBA: 0x1908,\n  LUMINANCE: 0x1909,\n  LUMINANCE_ALPHA: 0x190a,\n  UNSIGNED_SHORT_4_4_4_4: 0x8033,\n  UNSIGNED_SHORT_5_5_5_1: 0x8034,\n  UNSIGNED_SHORT_5_6_5: 0x8363,\n  FRAGMENT_SHADER: 0x8b30,\n  VERTEX_SHADER: 0x8b31,\n  MAX_VERTEX_ATTRIBS: 0x8869,\n  MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\n  MAX_VARYING_VECTORS: 0x8dfc,\n  MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\n  MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\n  MAX_TEXTURE_IMAGE_UNITS: 0x8872,\n  MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\n  SHADER_TYPE: 0x8b4f,\n  DELETE_STATUS: 0x8b80,\n  LINK_STATUS: 0x8b82,\n  VALIDATE_STATUS: 0x8b83,\n  ATTACHED_SHADERS: 0x8b85,\n  ACTIVE_UNIFORMS: 0x8b86,\n  ACTIVE_ATTRIBUTES: 0x8b89,\n  SHADING_LANGUAGE_VERSION: 0x8b8c,\n  CURRENT_PROGRAM: 0x8b8d,\n  NEVER: 0x0200,\n  LESS: 0x0201,\n  EQUAL: 0x0202,\n  LEQUAL: 0x0203,\n  GREATER: 0x0204,\n  NOTEQUAL: 0x0205,\n  GEQUAL: 0x0206,\n  ALWAYS: 0x0207,\n  KEEP: 0x1e00,\n  REPLACE: 0x1e01,\n  INCR: 0x1e02,\n  DECR: 0x1e03,\n  INVERT: 0x150a,\n  INCR_WRAP: 0x8507,\n  DECR_WRAP: 0x8508,\n  VENDOR: 0x1f00,\n  RENDERER: 0x1f01,\n  VERSION: 0x1f02,\n  NEAREST: 0x2600,\n  LINEAR: 0x2601,\n  NEAREST_MIPMAP_NEAREST: 0x2700,\n  LINEAR_MIPMAP_NEAREST: 0x2701,\n  NEAREST_MIPMAP_LINEAR: 0x2702,\n  LINEAR_MIPMAP_LINEAR: 0x2703,\n  TEXTURE_MAG_FILTER: 0x2800,\n  TEXTURE_MIN_FILTER: 0x2801,\n  TEXTURE_WRAP_S: 0x2802,\n  TEXTURE_WRAP_T: 0x2803,\n  TEXTURE_2D: 0x0de1,\n  TEXTURE: 0x1702,\n  TEXTURE_CUBE_MAP: 0x8513,\n  TEXTURE_BINDING_CUBE_MAP: 0x8514,\n  TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,\n  TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,\n  TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,\n  TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,\n  TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,\n  TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a,\n  MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c,\n  TEXTURE0: 0x84c0,\n  TEXTURE1: 0x84c1,\n  TEXTURE2: 0x84c2,\n  TEXTURE3: 0x84c3,\n  TEXTURE4: 0x84c4,\n  TEXTURE5: 0x84c5,\n  TEXTURE6: 0x84c6,\n  TEXTURE7: 0x84c7,\n  TEXTURE8: 0x84c8,\n  TEXTURE9: 0x84c9,\n  TEXTURE10: 0x84ca,\n  TEXTURE11: 0x84cb,\n  TEXTURE12: 0x84cc,\n  TEXTURE13: 0x84cd,\n  TEXTURE14: 0x84ce,\n  TEXTURE15: 0x84cf,\n  TEXTURE16: 0x84d0,\n  TEXTURE17: 0x84d1,\n  TEXTURE18: 0x84d2,\n  TEXTURE19: 0x84d3,\n  TEXTURE20: 0x84d4,\n  TEXTURE21: 0x84d5,\n  TEXTURE22: 0x84d6,\n  TEXTURE23: 0x84d7,\n  TEXTURE24: 0x84d8,\n  TEXTURE25: 0x84d9,\n  TEXTURE26: 0x84da,\n  TEXTURE27: 0x84db,\n  TEXTURE28: 0x84dc,\n  TEXTURE29: 0x84dd,\n  TEXTURE30: 0x84de,\n  TEXTURE31: 0x84df,\n  ACTIVE_TEXTURE: 0x84e0,\n  REPEAT: 0x2901,\n  CLAMP_TO_EDGE: 0x812f,\n  MIRRORED_REPEAT: 0x8370,\n  FLOAT_VEC2: 0x8b50,\n  FLOAT_VEC3: 0x8b51,\n  FLOAT_VEC4: 0x8b52,\n  INT_VEC2: 0x8b53,\n  INT_VEC3: 0x8b54,\n  INT_VEC4: 0x8b55,\n  BOOL: 0x8b56,\n  BOOL_VEC2: 0x8b57,\n  BOOL_VEC3: 0x8b58,\n  BOOL_VEC4: 0x8b59,\n  FLOAT_MAT2: 0x8b5a,\n  FLOAT_MAT3: 0x8b5b,\n  FLOAT_MAT4: 0x8b5c,\n  SAMPLER_2D: 0x8b5e,\n  SAMPLER_CUBE: 0x8b60,\n  VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622,\n  VERTEX_ATTRIB_ARRAY_SIZE: 0x8623,\n  VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624,\n  VERTEX_ATTRIB_ARRAY_TYPE: 0x8625,\n  VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886a,\n  VERTEX_ATTRIB_ARRAY_POINTER: 0x8645,\n  VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889f,\n  IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a,\n  IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b,\n  COMPILE_STATUS: 0x8b81,\n  LOW_FLOAT: 0x8df0,\n  MEDIUM_FLOAT: 0x8df1,\n  HIGH_FLOAT: 0x8df2,\n  LOW_INT: 0x8df3,\n  MEDIUM_INT: 0x8df4,\n  HIGH_INT: 0x8df5,\n  FRAMEBUFFER: 0x8d40,\n  RENDERBUFFER: 0x8d41,\n  RGBA4: 0x8056,\n  RGB5_A1: 0x8057,\n  RGB565: 0x8d62,\n  DEPTH_COMPONENT16: 0x81a5,\n  STENCIL_INDEX: 0x1901,\n  STENCIL_INDEX8: 0x8d48,\n  DEPTH_STENCIL: 0x84f9,\n  RENDERBUFFER_WIDTH: 0x8d42,\n  RENDERBUFFER_HEIGHT: 0x8d43,\n  RENDERBUFFER_INTERNAL_FORMAT: 0x8d44,\n  RENDERBUFFER_RED_SIZE: 0x8d50,\n  RENDERBUFFER_GREEN_SIZE: 0x8d51,\n  RENDERBUFFER_BLUE_SIZE: 0x8d52,\n  RENDERBUFFER_ALPHA_SIZE: 0x8d53,\n  RENDERBUFFER_DEPTH_SIZE: 0x8d54,\n  RENDERBUFFER_STENCIL_SIZE: 0x8d55,\n  FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0,\n  FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1,\n  FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2,\n  FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3,\n  COLOR_ATTACHMENT0: 0x8ce0,\n  DEPTH_ATTACHMENT: 0x8d00,\n  STENCIL_ATTACHMENT: 0x8d20,\n  DEPTH_STENCIL_ATTACHMENT: 0x821a,\n  NONE: 0,\n  FRAMEBUFFER_COMPLETE: 0x8cd5,\n  FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6,\n  FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7,\n  FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9,\n  FRAMEBUFFER_UNSUPPORTED: 0x8cdd,\n  FRAMEBUFFER_BINDING: 0x8ca6,\n  RENDERBUFFER_BINDING: 0x8ca7,\n  MAX_RENDERBUFFER_SIZE: 0x84e8,\n  INVALID_FRAMEBUFFER_OPERATION: 0x0506,\n  UNPACK_FLIP_Y_WEBGL: 0x9240,\n  UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,\n  CONTEXT_LOST_WEBGL: 0x9242,\n  UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,\n  BROWSER_DEFAULT_WEBGL: 0x9244,\n\n  // WEBGL_compressed_texture_s3tc\n  COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n  COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n  COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n  COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n\n  // WEBGL_compressed_texture_pvrtc\n  COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n  COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n  COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n  COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n\n  // WEBGL_compressed_texture_astc\n  COMPRESSED_RGBA_ASTC_4x4_WEBGL: 0x93b0,\n\n  // WEBGL_compressed_texture_etc1\n  COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n\n  // EXT_texture_compression_bptc\n  COMPRESSED_RGBA_BPTC_UNORM: 0x8e8c,\n\n  // EXT_color_buffer_half_float\n  HALF_FLOAT_OES: 0x8d61,\n\n  // Desktop OpenGL\n  DOUBLE: 0x140a,\n\n  // WebGL 2\n  READ_BUFFER: 0x0c02,\n  UNPACK_ROW_LENGTH: 0x0cf2,\n  UNPACK_SKIP_ROWS: 0x0cf3,\n  UNPACK_SKIP_PIXELS: 0x0cf4,\n  PACK_ROW_LENGTH: 0x0d02,\n  PACK_SKIP_ROWS: 0x0d03,\n  PACK_SKIP_PIXELS: 0x0d04,\n  COLOR: 0x1800,\n  DEPTH: 0x1801,\n  STENCIL: 0x1802,\n  RED: 0x1903,\n  RGB8: 0x8051,\n  RGBA8: 0x8058,\n  RGB10_A2: 0x8059,\n  TEXTURE_BINDING_3D: 0x806a,\n  UNPACK_SKIP_IMAGES: 0x806d,\n  UNPACK_IMAGE_HEIGHT: 0x806e,\n  TEXTURE_3D: 0x806f,\n  TEXTURE_WRAP_R: 0x8072,\n  MAX_3D_TEXTURE_SIZE: 0x8073,\n  UNSIGNED_INT_2_10_10_10_REV: 0x8368,\n  MAX_ELEMENTS_VERTICES: 0x80e8,\n  MAX_ELEMENTS_INDICES: 0x80e9,\n  TEXTURE_MIN_LOD: 0x813a,\n  TEXTURE_MAX_LOD: 0x813b,\n  TEXTURE_BASE_LEVEL: 0x813c,\n  TEXTURE_MAX_LEVEL: 0x813d,\n  MIN: 0x8007,\n  MAX: 0x8008,\n  DEPTH_COMPONENT24: 0x81a6,\n  MAX_TEXTURE_LOD_BIAS: 0x84fd,\n  TEXTURE_COMPARE_MODE: 0x884c,\n  TEXTURE_COMPARE_FUNC: 0x884d,\n  CURRENT_QUERY: 0x8865,\n  QUERY_RESULT: 0x8866,\n  QUERY_RESULT_AVAILABLE: 0x8867,\n  STREAM_READ: 0x88e1,\n  STREAM_COPY: 0x88e2,\n  STATIC_READ: 0x88e5,\n  STATIC_COPY: 0x88e6,\n  DYNAMIC_READ: 0x88e9,\n  DYNAMIC_COPY: 0x88ea,\n  MAX_DRAW_BUFFERS: 0x8824,\n  DRAW_BUFFER0: 0x8825,\n  DRAW_BUFFER1: 0x8826,\n  DRAW_BUFFER2: 0x8827,\n  DRAW_BUFFER3: 0x8828,\n  DRAW_BUFFER4: 0x8829,\n  DRAW_BUFFER5: 0x882a,\n  DRAW_BUFFER6: 0x882b,\n  DRAW_BUFFER7: 0x882c,\n  DRAW_BUFFER8: 0x882d,\n  DRAW_BUFFER9: 0x882e,\n  DRAW_BUFFER10: 0x882f,\n  DRAW_BUFFER11: 0x8830,\n  DRAW_BUFFER12: 0x8831,\n  DRAW_BUFFER13: 0x8832,\n  DRAW_BUFFER14: 0x8833,\n  DRAW_BUFFER15: 0x8834,\n  MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49,\n  MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a,\n  SAMPLER_3D: 0x8b5f,\n  SAMPLER_2D_SHADOW: 0x8b62,\n  FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,\n  PIXEL_PACK_BUFFER: 0x88eb,\n  PIXEL_UNPACK_BUFFER: 0x88ec,\n  PIXEL_PACK_BUFFER_BINDING: 0x88ed,\n  PIXEL_UNPACK_BUFFER_BINDING: 0x88ef,\n  FLOAT_MAT2x3: 0x8b65,\n  FLOAT_MAT2x4: 0x8b66,\n  FLOAT_MAT3x2: 0x8b67,\n  FLOAT_MAT3x4: 0x8b68,\n  FLOAT_MAT4x2: 0x8b69,\n  FLOAT_MAT4x3: 0x8b6a,\n  SRGB: 0x8c40,\n  SRGB8: 0x8c41,\n  SRGB8_ALPHA8: 0x8c43,\n  COMPARE_REF_TO_TEXTURE: 0x884e,\n  RGBA32F: 0x8814,\n  RGB32F: 0x8815,\n  RGBA16F: 0x881a,\n  RGB16F: 0x881b,\n  VERTEX_ATTRIB_ARRAY_INTEGER: 0x88fd,\n  MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,\n  MIN_PROGRAM_TEXEL_OFFSET: 0x8904,\n  MAX_PROGRAM_TEXEL_OFFSET: 0x8905,\n  MAX_VARYING_COMPONENTS: 0x8b4b,\n  TEXTURE_2D_ARRAY: 0x8c1a,\n  TEXTURE_BINDING_2D_ARRAY: 0x8c1d,\n  R11F_G11F_B10F: 0x8c3a,\n  UNSIGNED_INT_10F_11F_11F_REV: 0x8c3b,\n  RGB9_E5: 0x8c3d,\n  UNSIGNED_INT_5_9_9_9_REV: 0x8c3e,\n  TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8c7f,\n  MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8c80,\n  TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,\n  TRANSFORM_FEEDBACK_BUFFER_START: 0x8c84,\n  TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8c85,\n  TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,\n  RASTERIZER_DISCARD: 0x8c89,\n  MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8c8a,\n  MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8c8b,\n  INTERLEAVED_ATTRIBS: 0x8c8c,\n  SEPARATE_ATTRIBS: 0x8c8d,\n  TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,\n  TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,\n  RGBA32UI: 0x8d70,\n  RGB32UI: 0x8d71,\n  RGBA16UI: 0x8d76,\n  RGB16UI: 0x8d77,\n  RGBA8UI: 0x8d7c,\n  RGB8UI: 0x8d7d,\n  RGBA32I: 0x8d82,\n  RGB32I: 0x8d83,\n  RGBA16I: 0x8d88,\n  RGB16I: 0x8d89,\n  RGBA8I: 0x8d8e,\n  RGB8I: 0x8d8f,\n  RED_INTEGER: 0x8d94,\n  RGB_INTEGER: 0x8d98,\n  RGBA_INTEGER: 0x8d99,\n  SAMPLER_2D_ARRAY: 0x8dc1,\n  SAMPLER_2D_ARRAY_SHADOW: 0x8dc4,\n  SAMPLER_CUBE_SHADOW: 0x8dc5,\n  UNSIGNED_INT_VEC2: 0x8dc6,\n  UNSIGNED_INT_VEC3: 0x8dc7,\n  UNSIGNED_INT_VEC4: 0x8dc8,\n  INT_SAMPLER_2D: 0x8dca,\n  INT_SAMPLER_3D: 0x8dcb,\n  INT_SAMPLER_CUBE: 0x8dcc,\n  INT_SAMPLER_2D_ARRAY: 0x8dcf,\n  UNSIGNED_INT_SAMPLER_2D: 0x8dd2,\n  UNSIGNED_INT_SAMPLER_3D: 0x8dd3,\n  UNSIGNED_INT_SAMPLER_CUBE: 0x8dd4,\n  UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8dd7,\n  DEPTH_COMPONENT32F: 0x8cac,\n  DEPTH32F_STENCIL8: 0x8cad,\n  FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8dad,\n  FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210,\n  FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211,\n  FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212,\n  FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213,\n  FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214,\n  FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215,\n  FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216,\n  FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217,\n  FRAMEBUFFER_DEFAULT: 0x8218,\n  UNSIGNED_INT_24_8: 0x84fa,\n  DEPTH24_STENCIL8: 0x88f0,\n  UNSIGNED_NORMALIZED: 0x8c17,\n  DRAW_FRAMEBUFFER_BINDING: 0x8ca6, // Same as FRAMEBUFFER_BINDING\n  READ_FRAMEBUFFER: 0x8ca8,\n  DRAW_FRAMEBUFFER: 0x8ca9,\n  READ_FRAMEBUFFER_BINDING: 0x8caa,\n  RENDERBUFFER_SAMPLES: 0x8cab,\n  FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8cd4,\n  MAX_COLOR_ATTACHMENTS: 0x8cdf,\n  COLOR_ATTACHMENT1: 0x8ce1,\n  COLOR_ATTACHMENT2: 0x8ce2,\n  COLOR_ATTACHMENT3: 0x8ce3,\n  COLOR_ATTACHMENT4: 0x8ce4,\n  COLOR_ATTACHMENT5: 0x8ce5,\n  COLOR_ATTACHMENT6: 0x8ce6,\n  COLOR_ATTACHMENT7: 0x8ce7,\n  COLOR_ATTACHMENT8: 0x8ce8,\n  COLOR_ATTACHMENT9: 0x8ce9,\n  COLOR_ATTACHMENT10: 0x8cea,\n  COLOR_ATTACHMENT11: 0x8ceb,\n  COLOR_ATTACHMENT12: 0x8cec,\n  COLOR_ATTACHMENT13: 0x8ced,\n  COLOR_ATTACHMENT14: 0x8cee,\n  COLOR_ATTACHMENT15: 0x8cef,\n  FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8d56,\n  MAX_SAMPLES: 0x8d57,\n  HALF_FLOAT: 0x140b,\n  RG: 0x8227,\n  RG_INTEGER: 0x8228,\n  R8: 0x8229,\n  RG8: 0x822b,\n  R16F: 0x822d,\n  R32F: 0x822e,\n  RG16F: 0x822f,\n  RG32F: 0x8230,\n  R8I: 0x8231,\n  R8UI: 0x8232,\n  R16I: 0x8233,\n  R16UI: 0x8234,\n  R32I: 0x8235,\n  R32UI: 0x8236,\n  RG8I: 0x8237,\n  RG8UI: 0x8238,\n  RG16I: 0x8239,\n  RG16UI: 0x823a,\n  RG32I: 0x823b,\n  RG32UI: 0x823c,\n  VERTEX_ARRAY_BINDING: 0x85b5,\n  R8_SNORM: 0x8f94,\n  RG8_SNORM: 0x8f95,\n  RGB8_SNORM: 0x8f96,\n  RGBA8_SNORM: 0x8f97,\n  SIGNED_NORMALIZED: 0x8f9c,\n  COPY_READ_BUFFER: 0x8f36,\n  COPY_WRITE_BUFFER: 0x8f37,\n  COPY_READ_BUFFER_BINDING: 0x8f36, // Same as COPY_READ_BUFFER\n  COPY_WRITE_BUFFER_BINDING: 0x8f37, // Same as COPY_WRITE_BUFFER\n  UNIFORM_BUFFER: 0x8a11,\n  UNIFORM_BUFFER_BINDING: 0x8a28,\n  UNIFORM_BUFFER_START: 0x8a29,\n  UNIFORM_BUFFER_SIZE: 0x8a2a,\n  MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,\n  MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,\n  MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,\n  MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,\n  MAX_UNIFORM_BLOCK_SIZE: 0x8a30,\n  MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8a31,\n  MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8a33,\n  UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,\n  ACTIVE_UNIFORM_BLOCKS: 0x8a36,\n  UNIFORM_TYPE: 0x8a37,\n  UNIFORM_SIZE: 0x8a38,\n  UNIFORM_BLOCK_INDEX: 0x8a3a,\n  UNIFORM_OFFSET: 0x8a3b,\n  UNIFORM_ARRAY_STRIDE: 0x8a3c,\n  UNIFORM_MATRIX_STRIDE: 0x8a3d,\n  UNIFORM_IS_ROW_MAJOR: 0x8a3e,\n  UNIFORM_BLOCK_BINDING: 0x8a3f,\n  UNIFORM_BLOCK_DATA_SIZE: 0x8a40,\n  UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8a42,\n  UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8a43,\n  UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8a44,\n  UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8a46,\n  INVALID_INDEX: 0xffffffff,\n  MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122,\n  MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125,\n  MAX_SERVER_WAIT_TIMEOUT: 0x9111,\n  OBJECT_TYPE: 0x9112,\n  SYNC_CONDITION: 0x9113,\n  SYNC_STATUS: 0x9114,\n  SYNC_FLAGS: 0x9115,\n  SYNC_FENCE: 0x9116,\n  SYNC_GPU_COMMANDS_COMPLETE: 0x9117,\n  UNSIGNALED: 0x9118,\n  SIGNALED: 0x9119,\n  ALREADY_SIGNALED: 0x911a,\n  TIMEOUT_EXPIRED: 0x911b,\n  CONDITION_SATISFIED: 0x911c,\n  WAIT_FAILED: 0x911d,\n  SYNC_FLUSH_COMMANDS_BIT: 0x00000001,\n  VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,\n  ANY_SAMPLES_PASSED: 0x8c2f,\n  ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,\n  SAMPLER_BINDING: 0x8919,\n  RGB10_A2UI: 0x906f,\n  INT_2_10_10_10_REV: 0x8d9f,\n  TRANSFORM_FEEDBACK: 0x8e22,\n  TRANSFORM_FEEDBACK_PAUSED: 0x8e23,\n  TRANSFORM_FEEDBACK_ACTIVE: 0x8e24,\n  TRANSFORM_FEEDBACK_BINDING: 0x8e25,\n  COMPRESSED_R11_EAC: 0x9270,\n  COMPRESSED_SIGNED_R11_EAC: 0x9271,\n  COMPRESSED_RG11_EAC: 0x9272,\n  COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n  COMPRESSED_RGB8_ETC2: 0x9274,\n  COMPRESSED_SRGB8_ETC2: 0x9275,\n  COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9276,\n  COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9277,\n  COMPRESSED_RGBA8_ETC2_EAC: 0x9278,\n  COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9279,\n  TEXTURE_IMMUTABLE_FORMAT: 0x912f,\n  MAX_ELEMENT_INDEX: 0x8d6b,\n  TEXTURE_IMMUTABLE_LEVELS: 0x82df,\n\n  // Extensions\n  MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff,\n};\nexport default Object.freeze(WebGLConstants);\n","import Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * The map projection used by Google Maps, Bing Maps, and most of ArcGIS Online, EPSG:3857.  This\n * projection use longitude and latitude expressed with the WGS84 and transforms them to Mercator using\n * the spherical (rather than ellipsoidal) equations.\n *\n * @alias WebMercatorProjection\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n *\n * @see GeographicProjection\n */\nfunction WebMercatorProjection(ellipsoid) {\n  this._ellipsoid = ellipsoid ?? Ellipsoid.WGS84;\n  this._semimajorAxis = this._ellipsoid.maximumRadius;\n  this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis;\n}\n\nObject.defineProperties(WebMercatorProjection.prototype, {\n  /**\n   * Gets the {@link Ellipsoid}.\n   *\n   * @memberof WebMercatorProjection.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n});\n\n/**\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\n * in the range -PI/2 to PI/2.\n *\n * @param {number} mercatorAngle The angle to convert.\n * @returns {number} The geodetic latitude in radians.\n */\nWebMercatorProjection.mercatorAngleToGeodeticLatitude = function (\n  mercatorAngle,\n) {\n  return CesiumMath.PI_OVER_TWO - 2.0 * Math.atan(Math.exp(-mercatorAngle));\n};\n\n/**\n * Converts a geodetic latitude in radians, in the range -PI/2 to PI/2, to a Mercator\n * angle in the range -PI to PI.\n *\n * @param {number} latitude The geodetic latitude in radians.\n * @returns {number} The Mercator angle.\n */\nWebMercatorProjection.geodeticLatitudeToMercatorAngle = function (latitude) {\n  // Clamp the latitude coordinate to the valid Mercator bounds.\n  if (latitude > WebMercatorProjection.MaximumLatitude) {\n    latitude = WebMercatorProjection.MaximumLatitude;\n  } else if (latitude < -WebMercatorProjection.MaximumLatitude) {\n    latitude = -WebMercatorProjection.MaximumLatitude;\n  }\n  const sinLatitude = Math.sin(latitude);\n  return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\n};\n\n/**\n * The maximum latitude (both North and South) supported by a Web Mercator\n * (EPSG:3857) projection.  Technically, the Mercator projection is defined\n * for any latitude up to (but not including) 90 degrees, but it makes sense\n * to cut it off sooner because it grows exponentially with increasing latitude.\n * The logic behind this particular cutoff value, which is the one used by\n * Google Maps, Bing Maps, and Esri, is that it makes the projection\n * square.  That is, the rectangle is equal in the X and Y directions.\n *\n * The constant value is computed by calling:\n *    WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI)\n *\n * @type {number}\n */\nWebMercatorProjection.MaximumLatitude =\n  WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI);\n\n/**\n * Converts geodetic ellipsoid coordinates, in radians, to the equivalent Web Mercator\n * X, Y, Z coordinates expressed in meters and returned in a {@link Cartesian3}.  The height\n * is copied unmodified to the Z coordinate.\n *\n * @param {Cartographic} cartographic The cartographic coordinates in radians.\n * @param {Cartesian3} [result] The instance to which to copy the result, or undefined if a\n *        new instance should be created.\n * @returns {Cartesian3} The equivalent web mercator X, Y, Z coordinates, in meters.\n */\nWebMercatorProjection.prototype.project = function (cartographic, result) {\n  const semimajorAxis = this._semimajorAxis;\n  const x = cartographic.longitude * semimajorAxis;\n  const y =\n    WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n      cartographic.latitude,\n    ) * semimajorAxis;\n  const z = cartographic.height;\n\n  if (!defined(result)) {\n    return new Cartesian3(x, y, z);\n  }\n\n  result.x = x;\n  result.y = y;\n  result.z = z;\n  return result;\n};\n\n/**\n * Converts Web Mercator X, Y coordinates, expressed in meters, to a {@link Cartographic}\n * containing geodetic ellipsoid coordinates.  The Z coordinate is copied unmodified to the\n * height.\n *\n * @param {Cartesian3} cartesian The web mercator Cartesian position to unrproject with height (z) in meters.\n * @param {Cartographic} [result] The instance to which to copy the result, or undefined if a\n *        new instance should be created.\n * @returns {Cartographic} The equivalent cartographic coordinates.\n */\nWebMercatorProjection.prototype.unproject = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required\");\n  }\n  //>>includeEnd('debug');\n\n  const oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis;\n  const longitude = cartesian.x * oneOverEarthSemimajorAxis;\n  const latitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(\n    cartesian.y * oneOverEarthSemimajorAxis,\n  );\n  const height = cartesian.z;\n\n  if (!defined(result)) {\n    return new Cartographic(longitude, latitude, height);\n  }\n\n  result.longitude = longitude;\n  result.latitude = latitude;\n  result.height = height;\n  return result;\n};\nexport default WebMercatorProjection;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\nimport Rectangle from \"./Rectangle.js\";\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\n\n/**\n * A tiling scheme for geometry referenced to a {@link WebMercatorProjection}, EPSG:3857.  This is\n * the tiling scheme used by Google Maps, Microsoft Bing Maps, and most of ESRI ArcGIS Online.\n *\n * @alias WebMercatorTilingScheme\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid whose surface is being tiled. Defaults to\n * the default ellipsoid.\n * @param {number} [options.numberOfLevelZeroTilesX=1] The number of tiles in the X direction at level zero of\n *        the tile tree.\n * @param {number} [options.numberOfLevelZeroTilesY=1] The number of tiles in the Y direction at level zero of\n *        the tile tree.\n * @param {Cartesian2} [options.rectangleSouthwestInMeters] The southwest corner of the rectangle covered by the\n *        tiling scheme, in meters.  If this parameter or rectangleNortheastInMeters is not specified, the entire\n *        globe is covered in the longitude direction and an equal distance is covered in the latitude\n *        direction, resulting in a square projection.\n * @param {Cartesian2} [options.rectangleNortheastInMeters] The northeast corner of the rectangle covered by the\n *        tiling scheme, in meters.  If this parameter or rectangleSouthwestInMeters is not specified, the entire\n *        globe is covered in the longitude direction and an equal distance is covered in the latitude\n *        direction, resulting in a square projection.\n */\nfunction WebMercatorTilingScheme(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  this._numberOfLevelZeroTilesX = options.numberOfLevelZeroTilesX ?? 1;\n  this._numberOfLevelZeroTilesY = options.numberOfLevelZeroTilesY ?? 1;\n\n  this._projection = new WebMercatorProjection(this._ellipsoid);\n\n  if (\n    defined(options.rectangleSouthwestInMeters) &&\n    defined(options.rectangleNortheastInMeters)\n  ) {\n    this._rectangleSouthwestInMeters = options.rectangleSouthwestInMeters;\n    this._rectangleNortheastInMeters = options.rectangleNortheastInMeters;\n  } else {\n    const semimajorAxisTimesPi = this._ellipsoid.maximumRadius * Math.PI;\n    this._rectangleSouthwestInMeters = new Cartesian2(\n      -semimajorAxisTimesPi,\n      -semimajorAxisTimesPi,\n    );\n    this._rectangleNortheastInMeters = new Cartesian2(\n      semimajorAxisTimesPi,\n      semimajorAxisTimesPi,\n    );\n  }\n\n  const southwest = this._projection.unproject(\n    this._rectangleSouthwestInMeters,\n  );\n  const northeast = this._projection.unproject(\n    this._rectangleNortheastInMeters,\n  );\n  this._rectangle = new Rectangle(\n    southwest.longitude,\n    southwest.latitude,\n    northeast.longitude,\n    northeast.latitude,\n  );\n}\n\nObject.defineProperties(WebMercatorTilingScheme.prototype, {\n  /**\n   * Gets the ellipsoid that is tiled by this tiling scheme.\n   * @memberof WebMercatorTilingScheme.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, covered by this tiling scheme.\n   * @memberof WebMercatorTilingScheme.prototype\n   * @type {Rectangle}\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n\n  /**\n   * Gets the map projection used by this tiling scheme.\n   * @memberof WebMercatorTilingScheme.prototype\n   * @type {MapProjection}\n   */\n  projection: {\n    get: function () {\n      return this._projection;\n    },\n  },\n});\n\n/**\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\n *\n * @param {number} level The level-of-detail.\n * @returns {number} The number of tiles in the X direction at the given level.\n */\nWebMercatorTilingScheme.prototype.getNumberOfXTilesAtLevel = function (level) {\n  return this._numberOfLevelZeroTilesX << level;\n};\n\n/**\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\n *\n * @param {number} level The level-of-detail.\n * @returns {number} The number of tiles in the Y direction at the given level.\n */\nWebMercatorTilingScheme.prototype.getNumberOfYTilesAtLevel = function (level) {\n  return this._numberOfLevelZeroTilesY << level;\n};\n\n/**\n * Transforms a rectangle specified in geodetic radians to the native coordinate system\n * of this tiling scheme.\n *\n * @param {Rectangle} rectangle The rectangle to transform.\n * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result'\n *          is undefined.\n */\nWebMercatorTilingScheme.prototype.rectangleToNativeRectangle = function (\n  rectangle,\n  result,\n) {\n  const projection = this._projection;\n  const southwest = projection.project(Rectangle.southwest(rectangle));\n  const northeast = projection.project(Rectangle.northeast(rectangle));\n\n  if (!defined(result)) {\n    return new Rectangle(southwest.x, southwest.y, northeast.x, northeast.y);\n  }\n\n  result.west = southwest.x;\n  result.south = southwest.y;\n  result.east = northeast.x;\n  result.north = northeast.y;\n  return result;\n};\n\n/**\n * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates\n * of the tiling scheme.\n *\n * @param {number} x The integer x coordinate of the tile.\n * @param {number} y The integer y coordinate of the tile.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {object} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n *          if 'result' is undefined.\n */\nWebMercatorTilingScheme.prototype.tileXYToNativeRectangle = function (\n  x,\n  y,\n  level,\n  result,\n) {\n  const xTiles = this.getNumberOfXTilesAtLevel(level);\n  const yTiles = this.getNumberOfYTilesAtLevel(level);\n\n  const xTileWidth =\n    (this._rectangleNortheastInMeters.x - this._rectangleSouthwestInMeters.x) /\n    xTiles;\n  const west = this._rectangleSouthwestInMeters.x + x * xTileWidth;\n  const east = this._rectangleSouthwestInMeters.x + (x + 1) * xTileWidth;\n\n  const yTileHeight =\n    (this._rectangleNortheastInMeters.y - this._rectangleSouthwestInMeters.y) /\n    yTiles;\n  const north = this._rectangleNortheastInMeters.y - y * yTileHeight;\n  const south = this._rectangleNortheastInMeters.y - (y + 1) * yTileHeight;\n\n  if (!defined(result)) {\n    return new Rectangle(west, south, east, north);\n  }\n\n  result.west = west;\n  result.south = south;\n  result.east = east;\n  result.north = north;\n  return result;\n};\n\n/**\n * Converts tile x, y coordinates and level to a cartographic rectangle in radians.\n *\n * @param {number} x The integer x coordinate of the tile.\n * @param {number} y The integer y coordinate of the tile.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {object} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\n *          if 'result' is undefined.\n */\nWebMercatorTilingScheme.prototype.tileXYToRectangle = function (\n  x,\n  y,\n  level,\n  result,\n) {\n  const nativeRectangle = this.tileXYToNativeRectangle(x, y, level, result);\n\n  const projection = this._projection;\n  const southwest = projection.unproject(\n    new Cartesian2(nativeRectangle.west, nativeRectangle.south),\n  );\n  const northeast = projection.unproject(\n    new Cartesian2(nativeRectangle.east, nativeRectangle.north),\n  );\n\n  nativeRectangle.west = southwest.longitude;\n  nativeRectangle.south = southwest.latitude;\n  nativeRectangle.east = northeast.longitude;\n  nativeRectangle.north = northeast.latitude;\n  return nativeRectangle;\n};\n\n/**\n * Calculates the tile x, y coordinates of the tile containing\n * a given cartographic position.\n *\n * @param {Cartographic} position The position.\n * @param {number} level The tile level-of-detail.  Zero is the least detailed.\n * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance\n *        should be created.\n * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates\n *          if 'result' is undefined.\n */\nWebMercatorTilingScheme.prototype.positionToTileXY = function (\n  position,\n  level,\n  result,\n) {\n  const rectangle = this._rectangle;\n  if (!Rectangle.contains(rectangle, position)) {\n    // outside the bounds of the tiling scheme\n    return undefined;\n  }\n\n  const xTiles = this.getNumberOfXTilesAtLevel(level);\n  const yTiles = this.getNumberOfYTilesAtLevel(level);\n\n  const overallWidth =\n    this._rectangleNortheastInMeters.x - this._rectangleSouthwestInMeters.x;\n  const xTileWidth = overallWidth / xTiles;\n  const overallHeight =\n    this._rectangleNortheastInMeters.y - this._rectangleSouthwestInMeters.y;\n  const yTileHeight = overallHeight / yTiles;\n\n  const projection = this._projection;\n\n  const webMercatorPosition = projection.project(position);\n  const distanceFromWest =\n    webMercatorPosition.x - this._rectangleSouthwestInMeters.x;\n  const distanceFromNorth =\n    this._rectangleNortheastInMeters.y - webMercatorPosition.y;\n\n  let xTileCoordinate = (distanceFromWest / xTileWidth) | 0;\n  if (xTileCoordinate >= xTiles) {\n    xTileCoordinate = xTiles - 1;\n  }\n  let yTileCoordinate = (distanceFromNorth / yTileHeight) | 0;\n  if (yTileCoordinate >= yTiles) {\n    yTileCoordinate = yTiles - 1;\n  }\n\n  if (!defined(result)) {\n    return new Cartesian2(xTileCoordinate, yTileCoordinate);\n  }\n\n  result.x = xTileCoordinate;\n  result.y = yTileCoordinate;\n  return result;\n};\nexport default WebMercatorTilingScheme;\n","import WebGLConstants from \"./WebGLConstants.js\";\n\n/**\n * Winding order defines the order of vertices for a triangle to be considered front-facing.\n *\n * @enum {number}\n */\nconst WindingOrder = {\n  /**\n   * Vertices are in clockwise order.\n   *\n   * @type {number}\n   * @constant\n   */\n  CLOCKWISE: WebGLConstants.CW,\n\n  /**\n   * Vertices are in counter-clockwise order.\n   *\n   * @type {number}\n   * @constant\n   */\n  COUNTER_CLOCKWISE: WebGLConstants.CCW,\n};\n\n/**\n * @private\n */\nWindingOrder.validate = function (windingOrder) {\n  return (\n    windingOrder === WindingOrder.CLOCKWISE ||\n    windingOrder === WindingOrder.COUNTER_CLOCKWISE\n  );\n};\n\nexport default Object.freeze(WindingOrder);\n","import defined from \"./defined.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\n\n/**\n * Functions for generating indices for model wireframes. The indices are\n * outputted as typed arrays, which can then be put into buffers for rendering.\n *\n * @namespace WireframeIndexGenerator\n * @private\n */\nconst WireframeIndexGenerator = {};\n\nfunction createWireframeFromTriangles(vertexCount) {\n  const wireframeIndices = IndexDatatype.createTypedArray(\n    vertexCount,\n    vertexCount * 2,\n  );\n  const length = vertexCount;\n  let index = 0;\n  for (let i = 0; i < length; i += 3) {\n    wireframeIndices[index++] = i;\n    wireframeIndices[index++] = i + 1;\n    wireframeIndices[index++] = i + 1;\n    wireframeIndices[index++] = i + 2;\n    wireframeIndices[index++] = i + 2;\n    wireframeIndices[index++] = i;\n  }\n\n  return wireframeIndices;\n}\n\nfunction createWireframeFromTriangleIndices(vertexCount, originalIndices) {\n  const originalIndicesCount = originalIndices.length;\n  const wireframeIndices = IndexDatatype.createTypedArray(\n    vertexCount,\n    originalIndicesCount * 2,\n  );\n  let index = 0;\n  for (let i = 0; i < originalIndicesCount; i += 3) {\n    const point0 = originalIndices[i];\n    const point1 = originalIndices[i + 1];\n    const point2 = originalIndices[i + 2];\n\n    wireframeIndices[index++] = point0;\n    wireframeIndices[index++] = point1;\n    wireframeIndices[index++] = point1;\n    wireframeIndices[index++] = point2;\n    wireframeIndices[index++] = point2;\n    wireframeIndices[index++] = point0;\n  }\n\n  return wireframeIndices;\n}\n\nfunction createWireframeFromTriangleStrip(vertexCount) {\n  const numberOfTriangles = vertexCount - 2;\n  const wireframeIndicesCount = 2 + numberOfTriangles * 4;\n  const wireframeIndices = IndexDatatype.createTypedArray(\n    vertexCount,\n    wireframeIndicesCount,\n  );\n  let index = 0;\n\n  // Handle the first edge\n  wireframeIndices[index++] = 0;\n  wireframeIndices[index++] = 1;\n\n  // Add two edges for every triangle in the strip\n  for (let i = 0; i < numberOfTriangles; i++) {\n    wireframeIndices[index++] = i + 1;\n    wireframeIndices[index++] = i + 2;\n    wireframeIndices[index++] = i + 2;\n    wireframeIndices[index++] = i;\n  }\n\n  return wireframeIndices;\n}\n\nfunction createWireframeFromTriangleStripIndices(vertexCount, originalIndices) {\n  const originalIndicesCount = originalIndices.length;\n  const numberOfTriangles = originalIndicesCount - 2;\n  const wireframeIndicesCount = 2 + numberOfTriangles * 4;\n  const wireframeIndices = IndexDatatype.createTypedArray(\n    vertexCount,\n    wireframeIndicesCount,\n  );\n  let index = 0;\n\n  // Handle the first edge\n  wireframeIndices[index++] = originalIndices[0];\n  wireframeIndices[index++] = originalIndices[1];\n\n  // Add two edges for every triangle in the strip\n  for (let i = 0; i < numberOfTriangles; i++) {\n    const point0 = originalIndices[i];\n    const point1 = originalIndices[i + 1];\n    const point2 = originalIndices[i + 2];\n\n    wireframeIndices[index++] = point1;\n    wireframeIndices[index++] = point2;\n    wireframeIndices[index++] = point2;\n    wireframeIndices[index++] = point0;\n  }\n\n  return wireframeIndices;\n}\n\nfunction createWireframeFromTriangleFan(vertexCount) {\n  const numberOfTriangles = vertexCount - 2;\n  const wireframeIndicesCount = 2 + numberOfTriangles * 4;\n  const wireframeIndices = IndexDatatype.createTypedArray(\n    vertexCount,\n    wireframeIndicesCount,\n  );\n  let index = 0;\n\n  // Handle the first edge\n  wireframeIndices[index++] = 0;\n  wireframeIndices[index++] = 1;\n\n  // Add two edges for every triangle in the fan\n  for (let i = 0; i < numberOfTriangles; i++) {\n    wireframeIndices[index++] = i + 1;\n    wireframeIndices[index++] = i + 2;\n    wireframeIndices[index++] = i + 2;\n    wireframeIndices[index++] = 0;\n  }\n\n  return wireframeIndices;\n}\n\nfunction createWireframeFromTriangleFanIndices(vertexCount, originalIndices) {\n  const originalIndicesCount = originalIndices.length;\n  const numberOfTriangles = originalIndicesCount - 2;\n  const wireframeIndicesCount = 2 + numberOfTriangles * 4;\n  const wireframeIndices = IndexDatatype.createTypedArray(\n    vertexCount,\n    wireframeIndicesCount,\n  );\n  let index = 0;\n\n  // Handle the first edge\n  const firstPoint = originalIndices[0];\n  wireframeIndices[index++] = firstPoint;\n  wireframeIndices[index++] = originalIndices[1];\n\n  // Add two edges for every triangle in the fan\n  for (let i = 0; i < numberOfTriangles; i++) {\n    const point1 = originalIndices[i + 1];\n    const point2 = originalIndices[i + 2];\n\n    wireframeIndices[index++] = point1;\n    wireframeIndices[index++] = point2;\n    wireframeIndices[index++] = point2;\n    wireframeIndices[index++] = firstPoint;\n  }\n\n  return wireframeIndices;\n}\n\n/**\n * Generates a wireframe index buffer for a primitive, either by reindexing the existing indices\n * or creating them from scratch if the model had none.\n *\n * @param {PrimitiveType} primitiveType The primitive type.\n * @param {number} vertexCount The number of vertices in the primitive.\n * @param {Uint8Array|Uint16Array|Uint32Array} [originalIndices] A typed array containing the original indices of the primitive.\n *\n * @return {Uint16Array|Uint32Array} A typed array with the wireframe indices, or undefined if the primitive type does not use triangles.\n *\n * @private\n */\nWireframeIndexGenerator.createWireframeIndices = function (\n  primitiveType,\n  vertexCount,\n  originalIndices,\n) {\n  const hasOriginalIndices = defined(originalIndices);\n  if (primitiveType === PrimitiveType.TRIANGLES) {\n    return hasOriginalIndices\n      ? createWireframeFromTriangleIndices(vertexCount, originalIndices)\n      : createWireframeFromTriangles(vertexCount);\n  }\n\n  if (primitiveType === PrimitiveType.TRIANGLE_STRIP) {\n    return hasOriginalIndices\n      ? createWireframeFromTriangleStripIndices(vertexCount, originalIndices)\n      : createWireframeFromTriangleStrip(vertexCount);\n  }\n\n  if (primitiveType === PrimitiveType.TRIANGLE_FAN) {\n    return hasOriginalIndices\n      ? createWireframeFromTriangleFanIndices(vertexCount, originalIndices)\n      : createWireframeFromTriangleFan(vertexCount);\n  }\n\n  return undefined;\n};\n\n/**\n * Gets the number of indices in the wireframe index buffer of a primitive type.\n *\n * @param {PrimitiveType} primitiveType The primitive type.\n * @param {number} originalCount The original number of vertices or indices in the primitive.\n * @return {number} The number of indices in the primitive's wireframe.\n *\n * @private\n */\nWireframeIndexGenerator.getWireframeIndicesCount = function (\n  primitiveType,\n  originalCount,\n) {\n  // For TRIANGLES, the wireframe takes every triangle (i.e. three of the original\n  // indices) and turns it into lines. Each triangle has three lines, and each line\n  // requires two indices, so the final count is twice the original.\n  if (primitiveType === PrimitiveType.TRIANGLES) {\n    return originalCount * 2;\n  }\n\n  // For TRIANGLE_STRIP and TRIANGLE_FAN, the number of triangles in the primitive\n  // is equal to the total number of vertices minus two. This is because after the\n  // first edge is specified by the first two indices, every point afterwards\n  // contributes two more edges with two of the previous points, forming a new triangle.\n  // Each of these edges requires two indices, so each triangle in the primitive\n  // results in four indices in addition to the first two.\n  if (\n    primitiveType === PrimitiveType.TRIANGLE_STRIP ||\n    primitiveType === PrimitiveType.TRIANGLE_FAN\n  ) {\n    const numberOfTriangles = originalCount - 2;\n    return 2 + numberOfTriangles * 4;\n  }\n\n  return originalCount;\n};\n\nexport default WireframeIndexGenerator;\n","import defined from \"./defined.js\";\n\n/**\n * Adds all elements from the given source array to the given target array.\n *\n * If the <code>source</code> is <code>null</code>, <code>undefined</code>,\n * or empty, then nothing will be done. Otherwise, this has the same\n * semantics as<br>\n * <code>for (const s of source) target.push(s);</code><br>\n * but is usually more efficient than a <code>for</code>-loop, and does not\n * put the elements of the source on the stack, as it would be done with the\n * spread operator or when using <code>target.push.apply(source)</code>.\n *\n * @function\n * @private\n *\n * @param {Array} target The target array\n * @param {Array|undefined} source The source array\n *\n * @example\n * const target = [ 0, 1, 2 ];\n * const source = [ 3, 4, 5 ];\n * Cesium.addAllToArray(target, source);\n * // The target is now [ 0, 1, 2, 3, 4, 5 ]\n */\nfunction addAllToArray(target, source) {\n  if (!defined(source)) {\n    return;\n  }\n  const sourceLength = source.length;\n  if (sourceLength === 0) {\n    return;\n  }\n  const targetLength = target.length;\n  target.length += sourceLength;\n  for (let i = 0; i < sourceLength; i++) {\n    target[targetLength + i] = source[i];\n  }\n}\nexport default addAllToArray;\n","/**\n * @private\n */\nfunction appendForwardSlash(url) {\n  if (url.length === 0 || url[url.length - 1] !== \"/\") {\n    url = `${url}/`;\n  }\n  return url;\n}\nexport default appendForwardSlash;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\n\nconst removeDuplicatesEpsilon = CesiumMath.EPSILON10;\n\n/**\n * Removes adjacent duplicate values in an array of values.\n *\n * @param {any[]} [values] The array of values.\n * @param {Function} equalsEpsilon Function to compare values with an epsilon. Boolean equalsEpsilon(left, right, epsilon).\n * @param {boolean} [wrapAround=false] Compare the last value in the array against the first value. If they are equal, the last value is removed.\n * @param {number[]} [removedIndices=undefined] Store the indices that correspond to the duplicate items removed from the array, if there were any.\n * @returns {any[]|undefined} A new array of values with no adjacent duplicate values or the input array if no duplicates were found.\n *\n * @example\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0), (1.0, 1.0, 1.0)]\n * const values = [\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0),\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0),\n *     new Cesium.Cartesian3(2.0, 2.0, 2.0),\n *     new Cesium.Cartesian3(3.0, 3.0, 3.0),\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0)];\n * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon);\n *\n * @example\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0)]\n * const values = [\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0),\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0),\n *     new Cesium.Cartesian3(2.0, 2.0, 2.0),\n *     new Cesium.Cartesian3(3.0, 3.0, 3.0),\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0)];\n * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon, true);\n *\n * @example\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0)]\n * // removedIndices will be equal to [1, 3, 5]\n * const values = [\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0),\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0),\n *     new Cesium.Cartesian3(2.0, 2.0, 2.0),\n *     new Cesium.Cartesian3(2.0, 2.0, 2.0),\n *     new Cesium.Cartesian3(3.0, 3.0, 3.0),\n *     new Cesium.Cartesian3(1.0, 1.0, 1.0)];\n * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon, true);\n * @private\n */\nfunction arrayRemoveDuplicates(\n  values,\n  equalsEpsilon,\n  wrapAround,\n  removedIndices,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"equalsEpsilon\", equalsEpsilon);\n  //>>includeEnd('debug');\n\n  if (!defined(values)) {\n    return undefined;\n  }\n\n  wrapAround = wrapAround ?? false;\n  const storeRemovedIndices = defined(removedIndices);\n\n  const length = values.length;\n  if (length < 2) {\n    return values;\n  }\n\n  let i;\n  let v0 = values[0];\n  let v1;\n\n  // We only want to create a new array if there are duplicates in the array.\n  // As such, cleanedValues is undefined until it encounters the first duplicate, if it exists.\n  let cleanedValues;\n  let lastCleanIndex = 0;\n\n  // removedIndexLCI keeps track of where lastCleanIndex would be if it were sorted into the removedIndices array.\n  // In case of arrays such as [A, B, C, ..., A, A, A], removedIndices will not be sorted properly without this.\n  let removedIndexLCI = -1;\n\n  for (i = 1; i < length; ++i) {\n    v1 = values[i];\n    if (equalsEpsilon(v0, v1, removeDuplicatesEpsilon)) {\n      if (!defined(cleanedValues)) {\n        cleanedValues = values.slice(0, i);\n        lastCleanIndex = i - 1;\n        removedIndexLCI = 0;\n      }\n      if (storeRemovedIndices) {\n        removedIndices.push(i);\n      }\n    } else {\n      if (defined(cleanedValues)) {\n        cleanedValues.push(v1);\n        lastCleanIndex = i;\n        if (storeRemovedIndices) {\n          removedIndexLCI = removedIndices.length;\n        }\n      }\n      v0 = v1;\n    }\n  }\n\n  if (\n    wrapAround &&\n    equalsEpsilon(values[0], values[length - 1], removeDuplicatesEpsilon)\n  ) {\n    if (storeRemovedIndices) {\n      if (defined(cleanedValues)) {\n        removedIndices.splice(removedIndexLCI, 0, lastCleanIndex);\n      } else {\n        removedIndices.push(length - 1);\n      }\n    }\n\n    if (defined(cleanedValues)) {\n      cleanedValues.length -= 1;\n    } else {\n      cleanedValues = values.slice(0, -1);\n    }\n  }\n\n  return defined(cleanedValues) ? cleanedValues : values;\n}\n\nexport default arrayRemoveDuplicates;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\n\n/**\n * Computes the barycentric coordinates for a point with respect to a triangle.\n *\n * @function\n *\n * @param {Cartesian2|Cartesian3} point The point to test.\n * @param {Cartesian2|Cartesian3} p0 The first point of the triangle, corresponding to the barycentric x-axis.\n * @param {Cartesian2|Cartesian3} p1 The second point of the triangle, corresponding to the barycentric y-axis.\n * @param {Cartesian2|Cartesian3} p2 The third point of the triangle, corresponding to the barycentric z-axis.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3|undefined} The modified result parameter or a new Cartesian3 instance if one was not provided. If the triangle is degenerate the function will return undefined.\n *\n * @example\n * // Returns Cartesian3.UNIT_X\n * const p = new Cesium.Cartesian3(-1.0, 0.0, 0.0);\n * const b = Cesium.barycentricCoordinates(p,\n *   new Cesium.Cartesian3(-1.0, 0.0, 0.0),\n *   new Cesium.Cartesian3( 1.0, 0.0, 0.0),\n *   new Cesium.Cartesian3( 0.0, 1.0, 1.0));\n */\nfunction barycentricCoordinates(point, p0, p1, p2, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"point\", point);\n  Check.defined(\"p0\", p0);\n  Check.defined(\"p1\", p1);\n  Check.defined(\"p2\", p2);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  // Implementation based on http://www.blackpawn.com/texts/pointinpoly/default.html.\n  let v0;\n  let v1;\n  let v2;\n  let dot00;\n  let dot01;\n  let dot02;\n  let dot11;\n  let dot12;\n\n  if (!defined(p0.z)) {\n    if (Cartesian2.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\n      return Cartesian3.clone(Cartesian3.UNIT_X, result);\n    }\n    if (Cartesian2.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\n      return Cartesian3.clone(Cartesian3.UNIT_Y, result);\n    }\n    if (Cartesian2.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\n      return Cartesian3.clone(Cartesian3.UNIT_Z, result);\n    }\n\n    v0 = Cartesian2.subtract(p1, p0, scratchCartesian1);\n    v1 = Cartesian2.subtract(p2, p0, scratchCartesian2);\n    v2 = Cartesian2.subtract(point, p0, scratchCartesian3);\n\n    dot00 = Cartesian2.dot(v0, v0);\n    dot01 = Cartesian2.dot(v0, v1);\n    dot02 = Cartesian2.dot(v0, v2);\n    dot11 = Cartesian2.dot(v1, v1);\n    dot12 = Cartesian2.dot(v1, v2);\n  } else {\n    if (Cartesian3.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\n      return Cartesian3.clone(Cartesian3.UNIT_X, result);\n    }\n    if (Cartesian3.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\n      return Cartesian3.clone(Cartesian3.UNIT_Y, result);\n    }\n    if (Cartesian3.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\n      return Cartesian3.clone(Cartesian3.UNIT_Z, result);\n    }\n\n    v0 = Cartesian3.subtract(p1, p0, scratchCartesian1);\n    v1 = Cartesian3.subtract(p2, p0, scratchCartesian2);\n    v2 = Cartesian3.subtract(point, p0, scratchCartesian3);\n\n    dot00 = Cartesian3.dot(v0, v0);\n    dot01 = Cartesian3.dot(v0, v1);\n    dot02 = Cartesian3.dot(v0, v2);\n    dot11 = Cartesian3.dot(v1, v1);\n    dot12 = Cartesian3.dot(v1, v2);\n  }\n\n  result.y = dot11 * dot02 - dot01 * dot12;\n  result.z = dot00 * dot12 - dot01 * dot02;\n  const q = dot00 * dot11 - dot01 * dot01;\n\n  // Triangle is degenerate\n  if (q === 0) {\n    return undefined;\n  }\n\n  result.y /= q;\n  result.z /= q;\n  result.x = 1.0 - result.y - result.z;\n  return result;\n}\nexport default barycentricCoordinates;\n","import Check from \"./Check.js\";\n\n/**\n * Finds an item in a sorted array.\n *\n * @function\n * @param {Array|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} array The sorted array to search.\n * @param {*} itemToFind The item to find in the array.\n * @param {binarySearchComparator} comparator The function to use to compare the item to\n *        elements in the array.\n * @returns {number} The index of <code>itemToFind</code> in the array, if it exists.  If <code>itemToFind</code>\n *        does not exist, the return value is a negative number which is the bitwise complement (~)\n *        of the index before which the itemToFind should be inserted in order to maintain the\n *        sorted order of the array.\n *\n * @example\n * // Create a comparator function to search through an array of numbers.\n * function comparator(a, b) {\n *     return a - b;\n * };\n * const numbers = [0, 2, 4, 6, 8];\n * const index = Cesium.binarySearch(numbers, 6, comparator); // 3\n */\nfunction binarySearch(array, itemToFind, comparator) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"array\", array);\n  Check.defined(\"itemToFind\", itemToFind);\n  Check.defined(\"comparator\", comparator);\n  //>>includeEnd('debug');\n\n  let low = 0;\n  let high = array.length - 1;\n  let i;\n  let comparison;\n\n  while (low <= high) {\n    i = ~~((low + high) / 2);\n    comparison = comparator(array[i], itemToFind);\n    if (comparison < 0) {\n      low = i + 1;\n      continue;\n    }\n    if (comparison > 0) {\n      high = i - 1;\n      continue;\n    }\n    return i;\n  }\n  return ~(high + 1);\n}\n\n/**\n * A function used to compare two items while performing a binary search.\n * @callback binarySearchComparator\n *\n * @param {*} a An item in the array.\n * @param {*} b The item being searched for.\n * @returns {number} Returns a negative value if <code>a</code> is less than <code>b</code>,\n *          a positive value if <code>a</code> is greater than <code>b</code>, or\n *          0 if <code>a</code> is equal to <code>b</code>.\n *\n * @example\n * function compareNumbers(a, b) {\n *     return a - b;\n * }\n */\nexport default binarySearch;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport getAbsoluteUri from \"./getAbsoluteUri.js\";\nimport Resource from \"./Resource.js\";\n\n/*global CESIUM_BASE_URL,define,require*/\n\nconst cesiumScriptRegex = /((?:.*\\/)|^)Cesium\\.js(?:\\?|\\#|$)/;\nfunction getBaseUrlFromCesiumScript() {\n  const scripts = document.getElementsByTagName(\"script\");\n  for (let i = 0, len = scripts.length; i < len; ++i) {\n    const src = scripts[i].getAttribute(\"src\");\n    const result = cesiumScriptRegex.exec(src);\n    if (result !== null) {\n      return result[1];\n    }\n  }\n  return undefined;\n}\n\nlet a;\nfunction tryMakeAbsolute(url) {\n  if (typeof document === \"undefined\") {\n    // Node.js and Web Workers. In both cases, the URL will already be absolute.\n    return url;\n  }\n\n  if (!defined(a)) {\n    a = document.createElement(\"a\");\n  }\n  a.href = url;\n  return a.href;\n}\n\nlet baseResource;\nfunction getCesiumBaseUrl() {\n  if (defined(baseResource)) {\n    return baseResource;\n  }\n\n  let baseUrlString;\n  if (typeof CESIUM_BASE_URL !== \"undefined\") {\n    baseUrlString = CESIUM_BASE_URL;\n  } else if (defined(import.meta?.url)) {\n    // ESM\n    baseUrlString = getAbsoluteUri(\".\", import.meta.url);\n  } else if (\n    typeof define === \"object\" &&\n    defined(define.amd) &&\n    !define.amd.toUrlUndefined &&\n    defined(require.toUrl)\n  ) {\n    // RequireJS\n    baseUrlString = getAbsoluteUri(\n      \"..\",\n      buildModuleUrl(\"Core/buildModuleUrl.js\"),\n    );\n  } else {\n    // IIFE\n    baseUrlString = getBaseUrlFromCesiumScript();\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(baseUrlString)) {\n    throw new DeveloperError(\n      \"Unable to determine Cesium base URL automatically, try defining a global variable called CESIUM_BASE_URL.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  baseResource = new Resource({\n    url: tryMakeAbsolute(baseUrlString),\n  });\n  baseResource.appendForwardSlash();\n\n  return baseResource;\n}\n\nfunction buildModuleUrlFromRequireToUrl(moduleID) {\n  //moduleID will be non-relative, so require it relative to this module, in Core.\n  return tryMakeAbsolute(require.toUrl(`../${moduleID}`));\n}\n\nfunction buildModuleUrlFromBaseUrl(moduleID) {\n  const resource = getCesiumBaseUrl().getDerivedResource({\n    url: moduleID,\n  });\n  return resource.url;\n}\n\nlet implementation;\n\n/**\n * Given a relative URL under the Cesium base URL, returns an absolute URL.\n * @function\n *\n * @param {string} relativeUrl The relative path.\n * @returns {string} The absolutely URL representation of the provided path.\n *\n * @example\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   baseLayer: Cesium.ImageryLayer.fromProviderAsync(\n *     Cesium.TileMapServiceImageryProvider.fromUrl(\n *       Cesium.buildModuleUrl(\"Assets/Textures/NaturalEarthII\"),\n *     )),\n *   baseLayerPicker: false,\n * });\n */\nfunction buildModuleUrl(relativeUrl) {\n  if (!defined(implementation)) {\n    //select implementation\n    if (\n      typeof define === \"object\" &&\n      defined(define.amd) &&\n      !define.amd.toUrlUndefined &&\n      defined(require.toUrl)\n    ) {\n      implementation = buildModuleUrlFromRequireToUrl;\n    } else {\n      implementation = buildModuleUrlFromBaseUrl;\n    }\n  }\n\n  const url = implementation(relativeUrl);\n  return url;\n}\n\n// exposed for testing\nbuildModuleUrl._cesiumScriptRegex = cesiumScriptRegex;\nbuildModuleUrl._buildModuleUrlFromBaseUrl = buildModuleUrlFromBaseUrl;\nbuildModuleUrl._clearBaseResource = function () {\n  baseResource = undefined;\n};\n\n/**\n * Sets the base URL for resolving modules.\n * @param {string} value The new base URL.\n */\nbuildModuleUrl.setBaseUrl = function (value) {\n  baseResource = Resource.DEFAULT.getDerivedResource({\n    url: value,\n  });\n};\n\n/**\n * Gets the base URL for resolving modules.\n *\n * @function\n * @returns {string} The configured base URL\n */\nbuildModuleUrl.getCesiumBaseUrl = getCesiumBaseUrl;\n\nexport default buildModuleUrl;\n","/**\n * Clones an object, returning a new object containing the same properties.\n *\n * @function\n *\n * @param {object} object The object to clone.\n * @param {boolean} [deep=false] If true, all properties will be deep cloned recursively.\n * @returns {object} The cloned object.\n */\nfunction clone(object, deep) {\n  if (object === null || typeof object !== \"object\") {\n    return object;\n  }\n\n  deep = deep ?? false;\n\n  const result = new object.constructor();\n  for (const propertyName in object) {\n    if (object.hasOwnProperty(propertyName)) {\n      let value = object[propertyName];\n      if (deep) {\n        value = clone(value, deep);\n      }\n      result[propertyName] = value;\n    }\n  }\n\n  return result;\n}\nexport default clone;\n","import defined from \"./defined.js\";\n\n/**\n * Merges two objects, copying their properties onto a new combined object. When two objects have the same\n * property, the value of the property on the first object is used.  If either object is undefined,\n * it will be treated as an empty object.\n *\n * @example\n * const object1 = {\n *     propOne : 1,\n *     propTwo : {\n *         value1 : 10\n *     }\n * }\n * const object2 = {\n *     propTwo : 2\n * }\n * const final = Cesium.combine(object1, object2);\n *\n * // final === {\n * //     propOne : 1,\n * //     propTwo : {\n * //         value1 : 10\n * //     }\n * // }\n *\n * @param {object} [object1] The first object to merge.\n * @param {object} [object2] The second object to merge.\n * @param {boolean} [deep=false] Perform a recursive merge.\n * @returns {object} The combined object containing all properties from both objects.\n *\n * @function\n */\nfunction combine(object1, object2, deep) {\n  deep = deep ?? false;\n\n  const result = {};\n\n  const object1Defined = defined(object1);\n  const object2Defined = defined(object2);\n  let property;\n  let object1Value;\n  let object2Value;\n  if (object1Defined) {\n    for (property in object1) {\n      if (object1.hasOwnProperty(property)) {\n        object1Value = object1[property];\n        if (\n          object2Defined &&\n          deep &&\n          typeof object1Value === \"object\" &&\n          object2.hasOwnProperty(property)\n        ) {\n          object2Value = object2[property];\n          if (typeof object2Value === \"object\") {\n            result[property] = combine(object1Value, object2Value, deep);\n          } else {\n            result[property] = object1Value;\n          }\n        } else {\n          result[property] = object1Value;\n        }\n      }\n    }\n  }\n  if (object2Defined) {\n    for (property in object2) {\n      if (\n        object2.hasOwnProperty(property) &&\n        !result.hasOwnProperty(property)\n      ) {\n        object2Value = object2[property];\n        result[property] = object2Value;\n      }\n    }\n  }\n  return result;\n}\nexport default combine;\n","/**\n * Creates a Globally unique identifier (GUID) string.  A GUID is 128 bits long, and can guarantee uniqueness across space and time.\n *\n * @function\n *\n * @returns {string}\n *\n *\n * @example\n * this.guid = Cesium.createGuid();\n *\n * @see {@link http://www.ietf.org/rfc/rfc4122.txt|RFC 4122 A Universally Unique IDentifier (UUID) URN Namespace}\n */\nfunction createGuid() {\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\n  return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n    const r = (Math.random() * 16) | 0;\n    const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\nexport default createGuid;\n","import CesiumTerrainProvider from \"./CesiumTerrainProvider.js\";\nimport Frozen from \"./Frozen.js\";\n\n/**\n * Creates a {@link CesiumTerrainProvider} instance for the {@link https://cesium.com/content/#cesium-world-bathymetry|Cesium World Bathymetry}.\n *\n * @function\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server if available.\n * @returns {Promise<CesiumTerrainProvider>} A promise that resolves to the created CesiumTerrainProvider\n *\n * @see Ion\n *\n * @example\n * // Create Cesium World Bathymetry with default settings\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.createWorldBathymetryAsync();\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n * @example\n * // Create Cesium World Bathymetry with normals.\n * try {\n *   const viewer1 = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.createWorldBathymetryAsync({\n *       requestVertexNormals: true\n *     });\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n */\nfunction createWorldBathymetryAsync(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  return CesiumTerrainProvider.fromIonAssetId(2426648, {\n    requestVertexNormals: options.requestVertexNormals ?? false,\n  });\n}\nexport default createWorldBathymetryAsync;\n","import CesiumTerrainProvider from \"./CesiumTerrainProvider.js\";\nimport Frozen from \"./Frozen.js\";\nimport Ellipsoid from \"./Ellipsoid.js\";\n\n/**\n * Creates a {@link CesiumTerrainProvider} instance for the {@link https://cesium.com/content/#cesium-world-terrain|Cesium World Terrain}.\n *\n * @function\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server if available.\n * @param {boolean} [options.requestWaterMask=false] Flag that indicates if the client should request per tile water masks from the server if available.\n * @returns {Promise<CesiumTerrainProvider>} A promise that resolves to the created CesiumTerrainProvider\n *\n * @see Ion\n *\n * @example\n * // Create Cesium World Terrain with default settings\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.createWorldTerrainAsync();\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n * @example\n * // Create Cesium World Terrain with water and normals.\n * try {\n *   const viewer1 = new Cesium.Viewer(\"cesiumContainer\", {\n *     terrainProvider: await Cesium.createWorldTerrainAsync({\n *       requestWaterMask: true,\n *       requestVertexNormals: true\n *     });\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n */\nfunction createWorldTerrainAsync(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  return CesiumTerrainProvider.fromIonAssetId(1, {\n    requestVertexNormals: options.requestVertexNormals ?? false,\n    requestWaterMask: options.requestWaterMask ?? false,\n    ellipsoid: Ellipsoid.WGS84,\n  });\n}\nexport default createWorldTerrainAsync;\n","import Check from \"./Check.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\nconst compressedMagic = 0x7468dead;\nconst compressedMagicSwap = 0xadde6874;\n\n/**\n * Decodes data that is received from the Google Earth Enterprise server.\n *\n * @param {ArrayBuffer} key The key used during decoding.\n * @param {ArrayBuffer} data The data to be decoded.\n *\n * @private\n */\nfunction decodeGoogleEarthEnterpriseData(key, data) {\n  if (decodeGoogleEarthEnterpriseData.passThroughDataForTesting) {\n    return data;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"key\", key);\n  Check.typeOf.object(\"data\", data);\n  //>>includeEnd('debug');\n\n  const keyLength = key.byteLength;\n  if (keyLength === 0 || keyLength % 4 !== 0) {\n    throw new RuntimeError(\n      \"The length of key must be greater than 0 and a multiple of 4.\",\n    );\n  }\n\n  const dataView = new DataView(data);\n  const magic = dataView.getUint32(0, true);\n  if (magic === compressedMagic || magic === compressedMagicSwap) {\n    // Occasionally packets don't come back encoded, so just return\n    return data;\n  }\n\n  const keyView = new DataView(key);\n\n  let dp = 0;\n  const dpend = data.byteLength;\n  const dpend64 = dpend - (dpend % 8);\n  const kpend = keyLength;\n  let kp;\n  let off = 8;\n\n  // This algorithm is intentionally asymmetric to make it more difficult to\n  // guess. Security through obscurity. :-(\n\n  // while we have a full uint64 (8 bytes) left to do\n  // assumes buffer is 64bit aligned (or processor doesn't care)\n  while (dp < dpend64) {\n    // rotate the key each time through by using the offsets 16,0,8,16,0,8,...\n    off = (off + 8) % 24;\n    kp = off;\n\n    // run through one key length xor'ing one uint64 at a time\n    // then drop out to rotate the key for the next bit\n    while (dp < dpend64 && kp < kpend) {\n      dataView.setUint32(\n        dp,\n        dataView.getUint32(dp, true) ^ keyView.getUint32(kp, true),\n        true,\n      );\n      dataView.setUint32(\n        dp + 4,\n        dataView.getUint32(dp + 4, true) ^ keyView.getUint32(kp + 4, true),\n        true,\n      );\n      dp += 8;\n      kp += 24;\n    }\n  }\n\n  // now the remaining 1 to 7 bytes\n  if (dp < dpend) {\n    if (kp >= kpend) {\n      // rotate the key one last time (if necessary)\n      off = (off + 8) % 24;\n      kp = off;\n    }\n\n    while (dp < dpend) {\n      dataView.setUint8(dp, dataView.getUint8(dp) ^ keyView.getUint8(kp));\n      dp++;\n      kp++;\n    }\n  }\n}\n\ndecodeGoogleEarthEnterpriseData.passThroughDataForTesting = false;\nexport default decodeGoogleEarthEnterpriseData;\n","import AttributeCompression from \"./AttributeCompression.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport CesiumMath from \"./Math.js\";\n\nconst maxShort = 32767;\n\nconst scratchBVCartographic = new Cartographic();\nconst scratchEncodedPosition = new Cartesian3();\n\nfunction decodeVectorPolylinePositions(\n  positions,\n  rectangle,\n  minimumHeight,\n  maximumHeight,\n  ellipsoid,\n) {\n  const positionsLength = positions.length / 3;\n  const uBuffer = positions.subarray(0, positionsLength);\n  const vBuffer = positions.subarray(positionsLength, 2 * positionsLength);\n  const heightBuffer = positions.subarray(\n    2 * positionsLength,\n    3 * positionsLength,\n  );\n  AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\n\n  const decoded = new Float64Array(positions.length);\n  for (let i = 0; i < positionsLength; ++i) {\n    const u = uBuffer[i];\n    const v = vBuffer[i];\n    const h = heightBuffer[i];\n\n    const lon = CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort);\n    const lat = CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort);\n    const alt = CesiumMath.lerp(minimumHeight, maximumHeight, h / maxShort);\n\n    const cartographic = Cartographic.fromRadians(\n      lon,\n      lat,\n      alt,\n      scratchBVCartographic,\n    );\n    const decodedPosition = ellipsoid.cartographicToCartesian(\n      cartographic,\n      scratchEncodedPosition,\n    );\n    Cartesian3.pack(decodedPosition, decoded, i * 3);\n  }\n  return decoded;\n}\nexport default decodeVectorPolylinePositions;\n","/**\n * A function used to resolve a promise upon completion .\n * @callback defer.resolve\n *\n * @param {*} value The resulting value.\n */\n\n/**\n * A function used to reject a promise upon failure.\n * @callback defer.reject\n *\n * @param {*} error The error.\n */\n\n/**\n * An object which contains a promise object, and functions to resolve or reject the promise.\n *\n * @typedef {object} defer.deferred\n * @property {defer.resolve} resolve Resolves the promise when called.\n * @property {defer.reject} reject Rejects the promise when called.\n * @property {Promise} promise Promise object.\n */\n\n/**\n * Creates a deferred object, containing a promise object, and functions to resolve or reject the promise.\n * @returns {defer.deferred}\n * @private\n */\nfunction defer() {\n  let resolve;\n  let reject;\n  const promise = new Promise(function (res, rej) {\n    resolve = res;\n    reject = rej;\n  });\n\n  return {\n    resolve: resolve,\n    reject: reject,\n    promise: promise,\n  };\n}\n\nexport default defer;\n","/**\n * @function\n *\n * @param {*} value The object.\n * @returns {boolean} Returns true if the object is defined, returns false otherwise.\n *\n * @example\n * if (Cesium.defined(positions)) {\n *      doSomething();\n * } else {\n *      doSomethingElse();\n * }\n */\nfunction defined(value) {\n  return value !== undefined && value !== null;\n}\nexport default defined;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport oneTimeWarning from \"./oneTimeWarning.js\";\n\n/**\n * Logs a deprecation message to the console.  Use this function instead of\n * <code>console.log</code> directly since this does not log duplicate messages\n * unless it is called from multiple workers.\n *\n * @function deprecationWarning\n *\n * @param {string} identifier The unique identifier for this deprecated API.\n * @param {string} message The message to log to the console.\n *\n * @example\n * // Deprecated function or class\n * function Foo() {\n *    deprecationWarning('Foo', 'Foo was deprecated in Cesium 1.01.  It will be removed in 1.03.  Use newFoo instead.');\n *    // ...\n * }\n *\n * // Deprecated function\n * Bar.prototype.func = function() {\n *    deprecationWarning('Bar.func', 'Bar.func() was deprecated in Cesium 1.01.  It will be removed in 1.03.  Use Bar.newFunc() instead.');\n *    // ...\n * };\n *\n * // Deprecated property\n * Object.defineProperties(Bar.prototype, {\n *     prop : {\n *         get : function() {\n *             deprecationWarning('Bar.prop', 'Bar.prop was deprecated in Cesium 1.01.  It will be removed in 1.03.  Use Bar.newProp instead.');\n *             // ...\n *         },\n *         set : function(value) {\n *             deprecationWarning('Bar.prop', 'Bar.prop was deprecated in Cesium 1.01.  It will be removed in 1.03.  Use Bar.newProp instead.');\n *             // ...\n *         }\n *     }\n * });\n *\n * @private\n */\nfunction deprecationWarning(identifier, message) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(identifier) || !defined(message)) {\n    throw new DeveloperError(\"identifier and message are required.\");\n  }\n  //>>includeEnd('debug');\n\n  oneTimeWarning(identifier, message);\n}\nexport default deprecationWarning;\n","import DeveloperError from \"./DeveloperError.js\";\n\nfunction returnTrue() {\n  return true;\n}\n\n/**\n * Destroys an object.  Each of the object's functions, including functions in its prototype,\n * is replaced with a function that throws a {@link DeveloperError}, except for the object's\n * <code>isDestroyed</code> function, which is set to a function that returns <code>true</code>.\n * The object's properties are removed with <code>delete</code>.\n * <br /><br />\n * This function is used by objects that hold native resources, e.g., WebGL resources, which\n * need to be explicitly released.  Client code calls an object's <code>destroy</code> function,\n * which then releases the native resource and calls <code>destroyObject</code> to put itself\n * in a destroyed state.\n *\n * @function\n *\n * @param {object} object The object to destroy.\n * @param {string} [message] The message to include in the exception that is thrown if\n *                           a destroyed object's function is called.\n *\n *\n * @example\n * // How a texture would destroy itself.\n * this.destroy = function () {\n *     _gl.deleteTexture(_texture);\n *     return Cesium.destroyObject(this);\n * };\n *\n * @see DeveloperError\n */\nfunction destroyObject(object, message) {\n  message = message ?? \"This object was destroyed, i.e., destroy() was called.\";\n\n  function throwOnDestroyed() {\n    //>>includeStart('debug', pragmas.debug);\n    throw new DeveloperError(message);\n    //>>includeEnd('debug');\n  }\n\n  for (const key in object) {\n    if (typeof object[key] === \"function\") {\n      object[key] = throwOnDestroyed;\n    }\n  }\n\n  object.isDestroyed = returnTrue;\n\n  return undefined;\n}\nexport default destroyObject;\n","import defined from \"./defined.js\";\n\n/**\n * Formats an error object into a String.  If available, uses name, message, and stack\n * properties, otherwise, falls back on toString().\n *\n * @function\n *\n * @param {*} object The item to find in the array.\n * @returns {string} A string containing the formatted error.\n */\nfunction formatError(object) {\n  let result;\n\n  const name = object.name;\n  const message = object.message;\n  if (defined(name) && defined(message)) {\n    result = `${name}: ${message}`;\n  } else {\n    result = object.toString();\n  }\n\n  const stack = object.stack;\n  if (defined(stack)) {\n    result += `\\n${stack}`;\n  }\n\n  return result;\n}\nexport default formatError;\n","import Uri from \"urijs\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a relative Uri and a base Uri, returns the absolute Uri of the relative Uri.\n * @function\n *\n * @param {string} relative The relative Uri.\n * @param {string} [base] The base Uri.\n * @returns {string} The absolute Uri of the given relative Uri.\n *\n * @example\n * //absolute Uri will be \"https://test.com/awesome.png\";\n * const absoluteUri = Cesium.getAbsoluteUri('awesome.png', 'https://test.com');\n */\nfunction getAbsoluteUri(relative, base) {\n  let documentObject;\n  if (typeof document !== \"undefined\") {\n    documentObject = document;\n  }\n\n  return getAbsoluteUri._implementation(relative, base, documentObject);\n}\n\ngetAbsoluteUri._implementation = function (relative, base, documentObject) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(relative)) {\n    throw new DeveloperError(\"relative uri is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(base)) {\n    if (typeof documentObject === \"undefined\") {\n      return relative;\n    }\n    base = documentObject.baseURI ?? documentObject.location.href;\n  }\n\n  const relativeUri = new Uri(relative);\n  if (relativeUri.scheme() !== \"\") {\n    return relativeUri.toString();\n  }\n  return relativeUri.absoluteTo(base).toString();\n};\nexport default getAbsoluteUri;\n","import Uri from \"urijs\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a URI, returns the base path of the URI.\n * @function\n *\n * @param {string} uri The Uri.\n * @param {boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri\n * @returns {string} The base path of the Uri.\n *\n * @example\n * // basePath will be \"/Gallery/\";\n * const basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false');\n *\n * // basePath will be \"/Gallery/?value=true&example=false\";\n * const basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false', true);\n */\nfunction getBaseUri(uri, includeQuery) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(uri)) {\n    throw new DeveloperError(\"uri is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let basePath = \"\";\n  const i = uri.lastIndexOf(\"/\");\n  if (i !== -1) {\n    basePath = uri.substring(0, i + 1);\n  }\n\n  if (!includeQuery) {\n    return basePath;\n  }\n\n  uri = new Uri(uri);\n  if (uri.query().length !== 0) {\n    basePath += `?${uri.query()}`;\n  }\n  if (uri.fragment().length !== 0) {\n    basePath += `#${uri.fragment()}`;\n  }\n\n  return basePath;\n}\nexport default getBaseUri;\n","import Uri from \"urijs\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a URI, returns the extension of the URI.\n * @function getExtensionFromUri\n *\n * @param {string} uri The Uri.\n * @returns {string} The extension of the Uri.\n *\n * @example\n * //extension will be \"czml\";\n * const extension = Cesium.getExtensionFromUri('/Gallery/simple.czml?value=true&example=false');\n */\nfunction getExtensionFromUri(uri) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(uri)) {\n    throw new DeveloperError(\"uri is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const uriObject = new Uri(uri);\n  uriObject.normalize();\n  let path = uriObject.path();\n  let index = path.lastIndexOf(\"/\");\n  if (index !== -1) {\n    path = path.substr(index + 1);\n  }\n  index = path.lastIndexOf(\".\");\n  if (index === -1) {\n    path = \"\";\n  } else {\n    path = path.substr(index + 1);\n  }\n  return path;\n}\nexport default getExtensionFromUri;\n","import Uri from \"urijs\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Given a URI, returns the last segment of the URI, removing any path or query information.\n * @function getFilenameFromUri\n *\n * @param {string} uri The Uri.\n * @returns {string} The last segment of the Uri.\n *\n * @example\n * //fileName will be\"simple.czml\";\n * const fileName = Cesium.getFilenameFromUri('/Gallery/simple.czml?value=true&example=false');\n */\nfunction getFilenameFromUri(uri) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(uri)) {\n    throw new DeveloperError(\"uri is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const uriObject = new Uri(uri);\n  uriObject.normalize();\n  let path = uriObject.path();\n  const index = path.lastIndexOf(\"/\");\n  if (index !== -1) {\n    path = path.substr(index + 1);\n  }\n  return path;\n}\nexport default getFilenameFromUri;\n","/**\n * Constructs an image from a TypedArray of pixel values\n *\n * @param {Uint8Array} typedArray The array of pixel values\n * @param {number} width The width of the image to create\n * @param {number} height The height of the image to create\n * @returns {HTMLCanvasElement} A new canvas containing the constructed image\n *\n * @private\n */\nfunction getImageFromTypedArray(typedArray, width, height) {\n  // Input typedArray is Uint8Array, ImageData needs Uint8ClampedArray\n  // To avoid copying, make a new DataView of the same buffer\n  const dataArray = new Uint8ClampedArray(typedArray.buffer);\n  const imageData = new ImageData(dataArray, width, height);\n\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = width;\n  canvas.height = height;\n  canvas.getContext(\"2d\").putImageData(imageData, 0, 0);\n\n  return canvas;\n}\nexport default getImageFromTypedArray;\n","import defined from \"./defined.js\";\n\nconst context2DsByWidthAndHeight = {};\n\n/**\n * Extract a pixel array from a loaded image.  Draws the image\n * into a canvas so it can read the pixels back.\n *\n * @function getImagePixels\n *\n * @param {HTMLImageElement|ImageBitmap} image The image to extract pixels from.\n * @param {number} width The width of the image. If not defined, then image.width is assigned.\n * @param {number} height The height of the image. If not defined, then image.height is assigned.\n * @returns {ImageData} The pixels of the image.\n */\nfunction getImagePixels(image, width, height) {\n  if (!defined(width)) {\n    width = image.width;\n  }\n  if (!defined(height)) {\n    height = image.height;\n  }\n\n  let context2DsByHeight = context2DsByWidthAndHeight[width];\n  if (!defined(context2DsByHeight)) {\n    context2DsByHeight = {};\n    context2DsByWidthAndHeight[width] = context2DsByHeight;\n  }\n\n  let context2d = context2DsByHeight[height];\n  if (!defined(context2d)) {\n    const canvas = document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    // Since we re-use contexts, use the willReadFrequently option – See https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently\n    context2d = canvas.getContext(\"2d\", { willReadFrequently: true });\n    context2d.globalCompositeOperation = \"copy\";\n    context2DsByHeight[height] = context2d;\n  }\n\n  context2d.drawImage(image, 0, 0, width, height);\n  return context2d.getImageData(0, 0, width, height).data;\n}\nexport default getImagePixels;\n","import getStringFromTypedArray from \"./getStringFromTypedArray.js\";\n\n/**\n * Parses JSON from a Uint8Array.\n *\n * @function\n *\n * @param {Uint8Array} uint8Array The Uint8Array to read from.\n * @param {number} [byteOffset=0] The byte offset to start reading from.\n * @param {number} [byteLength] The byte length to read. If byteLength is omitted the remainder of the buffer is read.\n * @returns {object} An object containing the parsed JSON.\n *\n * @private\n */\nfunction getJsonFromTypedArray(uint8Array, byteOffset, byteLength) {\n  return JSON.parse(\n    getStringFromTypedArray(uint8Array, byteOffset, byteLength),\n  );\n}\n\nexport default getJsonFromTypedArray;\n","import getStringFromTypedArray from \"./getStringFromTypedArray.js\";\n\n/**\n * @private\n */\nfunction getMagic(uint8Array, byteOffset) {\n  byteOffset = byteOffset ?? 0;\n  return getStringFromTypedArray(\n    uint8Array,\n    byteOffset,\n    Math.min(4, uint8Array.length),\n  );\n}\nexport default getMagic;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport RuntimeError from \"./RuntimeError.js\";\n\n/**\n * Reads a string from a Uint8Array.\n *\n * @function\n *\n * @param {Uint8Array} uint8Array The Uint8Array to read from.\n * @param {number} [byteOffset=0] The byte offset to start reading from.\n * @param {number} [byteLength] The byte length to read. If byteLength is omitted the remainder of the buffer is read.\n * @returns {string} The string.\n *\n * @private\n */\nfunction getStringFromTypedArray(uint8Array, byteOffset, byteLength) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(uint8Array)) {\n    throw new DeveloperError(\"uint8Array is required.\");\n  }\n  if (byteOffset < 0) {\n    throw new DeveloperError(\"byteOffset cannot be negative.\");\n  }\n  if (byteLength < 0) {\n    throw new DeveloperError(\"byteLength cannot be negative.\");\n  }\n  if (byteOffset + byteLength > uint8Array.byteLength) {\n    throw new DeveloperError(\"sub-region exceeds array bounds.\");\n  }\n  //>>includeEnd('debug');\n\n  byteOffset = byteOffset ?? 0;\n  byteLength = byteLength ?? uint8Array.byteLength - byteOffset;\n\n  uint8Array = uint8Array.subarray(byteOffset, byteOffset + byteLength);\n\n  return getStringFromTypedArray.decode(uint8Array);\n}\n\n// Exposed functions for testing\ngetStringFromTypedArray.decodeWithTextDecoder = function (view) {\n  const decoder = new TextDecoder(\"utf-8\");\n  return decoder.decode(view);\n};\n\ngetStringFromTypedArray.decodeWithFromCharCode = function (view) {\n  let result = \"\";\n  const codePoints = utf8Handler(view);\n  const length = codePoints.length;\n  for (let i = 0; i < length; ++i) {\n    let cp = codePoints[i];\n    if (cp <= 0xffff) {\n      result += String.fromCharCode(cp);\n    } else {\n      cp -= 0x10000;\n      result += String.fromCharCode((cp >> 10) + 0xd800, (cp & 0x3ff) + 0xdc00);\n    }\n  }\n  return result;\n};\n\nfunction inRange(a, min, max) {\n  return min <= a && a <= max;\n}\n\n// This code is inspired by public domain code found here: https://github.com/inexorabletash/text-encoding\nfunction utf8Handler(utfBytes) {\n  let codePoint = 0;\n  let bytesSeen = 0;\n  let bytesNeeded = 0;\n  let lowerBoundary = 0x80;\n  let upperBoundary = 0xbf;\n\n  const codePoints = [];\n  const length = utfBytes.length;\n  for (let i = 0; i < length; ++i) {\n    const currentByte = utfBytes[i];\n\n    // If bytesNeeded = 0, then we are starting a new character\n    if (bytesNeeded === 0) {\n      // 1 Byte Ascii character\n      if (inRange(currentByte, 0x00, 0x7f)) {\n        // Return a code point whose value is byte.\n        codePoints.push(currentByte);\n        continue;\n      }\n\n      // 2 Byte character\n      if (inRange(currentByte, 0xc2, 0xdf)) {\n        bytesNeeded = 1;\n        codePoint = currentByte & 0x1f;\n        continue;\n      }\n\n      // 3 Byte character\n      if (inRange(currentByte, 0xe0, 0xef)) {\n        // If byte is 0xE0, set utf-8 lower boundary to 0xA0.\n        if (currentByte === 0xe0) {\n          lowerBoundary = 0xa0;\n        }\n        // If byte is 0xED, set utf-8 upper boundary to 0x9F.\n        if (currentByte === 0xed) {\n          upperBoundary = 0x9f;\n        }\n\n        bytesNeeded = 2;\n        codePoint = currentByte & 0xf;\n        continue;\n      }\n\n      // 4 Byte character\n      if (inRange(currentByte, 0xf0, 0xf4)) {\n        // If byte is 0xF0, set utf-8 lower boundary to 0x90.\n        if (currentByte === 0xf0) {\n          lowerBoundary = 0x90;\n        }\n        // If byte is 0xF4, set utf-8 upper boundary to 0x8F.\n        if (currentByte === 0xf4) {\n          upperBoundary = 0x8f;\n        }\n\n        bytesNeeded = 3;\n        codePoint = currentByte & 0x7;\n        continue;\n      }\n\n      throw new RuntimeError(\"String decoding failed.\");\n    }\n\n    // Out of range, so ignore the first part(s) of the character and continue with this byte on its own\n    if (!inRange(currentByte, lowerBoundary, upperBoundary)) {\n      codePoint = bytesNeeded = bytesSeen = 0;\n      lowerBoundary = 0x80;\n      upperBoundary = 0xbf;\n      --i;\n      continue;\n    }\n\n    // Set appropriate boundaries, since we've now checked byte 2 of a potential longer character\n    lowerBoundary = 0x80;\n    upperBoundary = 0xbf;\n\n    // Add byte to code point\n    codePoint = (codePoint << 6) | (currentByte & 0x3f);\n\n    // We have the correct number of bytes, so push and reset for next character\n    ++bytesSeen;\n    if (bytesSeen === bytesNeeded) {\n      codePoints.push(codePoint);\n      codePoint = bytesNeeded = bytesSeen = 0;\n    }\n  }\n\n  return codePoints;\n}\n\nif (typeof TextDecoder !== \"undefined\") {\n  getStringFromTypedArray.decode =\n    getStringFromTypedArray.decodeWithTextDecoder;\n} else {\n  getStringFromTypedArray.decode =\n    getStringFromTypedArray.decodeWithFromCharCode;\n}\nexport default getStringFromTypedArray;\n","/**\n * Gets a timestamp that can be used in measuring the time between events.  Timestamps\n * are expressed in milliseconds, but it is not specified what the milliseconds are\n * measured from.  This function uses performance.now() if it is available, or Date.now()\n * otherwise.\n *\n * @function getTimestamp\n *\n * @returns {number} The timestamp in milliseconds since some unspecified reference time.\n */\nlet getTimestamp;\n\nif (\n  typeof performance !== \"undefined\" &&\n  typeof performance.now === \"function\" &&\n  isFinite(performance.now())\n) {\n  getTimestamp = function () {\n    return performance.now();\n  };\n} else {\n  getTimestamp = function () {\n    return Date.now();\n  };\n}\nexport default getTimestamp;\n","/**\n * @private\n */\nfunction isBitSet(bits, mask) {\n  return (bits & mask) !== 0;\n}\nexport default isBitSet;\n","import Check from \"./Check.js\";\n\nconst blobUriRegex = /^blob:/i;\n\n/**\n * Determines if the specified uri is a blob uri.\n *\n * @function isBlobUri\n *\n * @param {string} uri The uri to test.\n * @returns {boolean} true when the uri is a blob uri; otherwise, false.\n *\n * @private\n */\nfunction isBlobUri(uri) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"uri\", uri);\n  //>>includeEnd('debug');\n\n  return blobUriRegex.test(uri);\n}\nexport default isBlobUri;\n","import defined from \"./defined.js\";\n\nlet a;\n\n/**\n * Given a URL, determine whether that URL is considered cross-origin to the current page.\n *\n * @private\n */\nfunction isCrossOriginUrl(url) {\n  if (!defined(a)) {\n    a = document.createElement(\"a\");\n  }\n\n  // copy window location into the anchor to get consistent results\n  // when the port is default for the protocol (e.g. 80 for HTTP)\n  a.href = window.location.href;\n\n  // host includes both hostname and port if the port is not standard\n  const host = a.host;\n  const protocol = a.protocol;\n\n  a.href = url;\n  // IE only absolutizes href on get, not set\n  // eslint-disable-next-line no-self-assign\n  a.href = a.href;\n\n  return protocol !== a.protocol || host !== a.host;\n}\nexport default isCrossOriginUrl;\n","import Check from \"./Check.js\";\n\nconst dataUriRegex = /^data:/i;\n\n/**\n * Determines if the specified uri is a data uri.\n *\n * @function isDataUri\n *\n * @param {string} uri The uri to test.\n * @returns {boolean} true when the uri is a data uri; otherwise, false.\n *\n * @private\n */\nfunction isDataUri(uri) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"uri\", uri);\n  //>>includeEnd('debug');\n\n  return dataUriRegex.test(uri);\n}\nexport default isDataUri;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Determines if a given date is a leap year.\n *\n * @function isLeapYear\n *\n * @param {number} year The year to be tested.\n * @returns {boolean} True if <code>year</code> is a leap year.\n *\n * @example\n * const leapYear = Cesium.isLeapYear(2000); // true\n */\nfunction isLeapYear(year) {\n  //>>includeStart('debug', pragmas.debug);\n  if (year === null || isNaN(year)) {\n    throw new DeveloperError(\"year is required and must be a number.\");\n  }\n  //>>includeEnd('debug');\n\n  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\nexport default isLeapYear;\n","/**\n * @private\n */\nfunction loadAndExecuteScript(url) {\n  const script = document.createElement(\"script\");\n  script.async = true;\n  script.src = url;\n\n  return new Promise((resolve, reject) => {\n    if (window.crossOriginIsolated) {\n      script.setAttribute(\"crossorigin\", \"anonymous\");\n    }\n\n    const head = document.getElementsByTagName(\"head\")[0];\n    script.onload = function () {\n      script.onload = undefined;\n      head.removeChild(script);\n      resolve();\n    };\n    script.onerror = function (e) {\n      reject(e);\n    };\n\n    head.appendChild(script);\n  });\n}\nexport default loadAndExecuteScript;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport Resource from \"./Resource.js\";\n\n/**\n * Loads an image from a typed array.\n * @param {Object} options An object containing the following properties:\n * @param {Uint8Array} options.uint8Array The typed array containing the image data.\n * @param {string} options.format The MIME format of the image (e.g., \"image/png\").\n * @param {Request} [options.request] The request object to use to fetch the image.\n * @param {boolean} [options.flipY=false] Whether to flip the image vertically.\n * @param {boolean} [options.skipColorSpaceConversion=false] Whether to skip color space conversion.\n * @returns {Promise<HTMLImageElement|HTMLCanvasElement|ImageBitmap>|undefined} A promise that resolves to the loaded image. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n * @private\n */\nfunction loadImageFromTypedArray(options) {\n  const { uint8Array, format, request } = options;\n  const flipY = options.flipY ?? false;\n  const skipColorSpaceConversion = options.skipColorSpaceConversion ?? false;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"uint8Array\", uint8Array);\n  Check.typeOf.string(\"format\", format);\n  //>>includeEnd('debug');\n\n  const blob = new Blob([uint8Array], {\n    type: format,\n  });\n\n  let blobUrl;\n  return Resource.supportsImageBitmapOptions()\n    .then(function (result) {\n      if (result) {\n        return Promise.resolve(\n          Resource.createImageBitmapFromBlob(blob, {\n            flipY: flipY,\n            premultiplyAlpha: false,\n            skipColorSpaceConversion: skipColorSpaceConversion,\n          }),\n        );\n      }\n\n      blobUrl = window.URL.createObjectURL(blob);\n      const resource = new Resource({\n        url: blobUrl,\n        request: request,\n      });\n\n      return resource.fetchImage({\n        flipY: flipY,\n        skipColorSpaceConversion: skipColorSpaceConversion,\n      });\n    })\n    .then(function (result) {\n      if (defined(blobUrl)) {\n        window.URL.revokeObjectURL(blobUrl);\n      }\n      return result;\n    })\n    .catch(function (error) {\n      if (defined(blobUrl)) {\n        window.URL.revokeObjectURL(blobUrl);\n      }\n      return Promise.reject(error);\n    });\n}\nexport default loadImageFromTypedArray;\n","import Check from \"./Check.js\";\nimport Resource from \"./Resource.js\";\nimport KTX2Transcoder from \"./KTX2Transcoder.js\";\n\n/**\n * Stores the supported formats that KTX2 can transcode to. Called during context creation.\n *\n * @param {boolean} s3tc Whether or not S3TC is supported\n * @param {boolean} pvrtc Whether or not PVRTC is supported\n * @param {boolean} astc Whether or not ASTC is supported\n * @param {boolean} etc Whether or not ETC is supported\n * @param {boolean} etc1 Whether or not ETC1 is supported\n * @param {boolean} bc7 Whether or not BC7 is supported\n * @private\n */\nlet supportedTranscoderFormats;\n\nloadKTX2.setKTX2SupportedFormats = function (\n  s3tc,\n  pvrtc,\n  astc,\n  etc,\n  etc1,\n  bc7,\n) {\n  supportedTranscoderFormats = {\n    s3tc: s3tc,\n    pvrtc: pvrtc,\n    astc: astc,\n    etc: etc,\n    etc1: etc1,\n    bc7: bc7,\n  };\n};\n\n/**\n * Asynchronously loads and parses the given URL to a KTX2 file or parses the raw binary data of a KTX2 file.\n * Returns a promise that will resolve to an object containing the image buffer, width, height, and format once loaded,\n * or reject if the URL failed to load or failed to parse the data. The data is loaded\n * using XMLHttpRequest, which means that in order to make requests to another origin,\n * the server must have Cross-Origin Resource sharing (CORS) headers enabled.\n * <p>\n * The following are part of the KTX2 format specification but are not supported:\n * <ul>\n *     <li>Metadata</li>\n *     <li>3D textures</li>\n *     <li>Texture Arrays</li>\n *     <li>Video</li>\n * </ul>\n * </p>\n *\n * @function loadKTX2\n *\n * @param {Resource|string|ArrayBuffer} resourceOrUrlOrBuffer The URL of the binary data or an ArrayBuffer.\n * @returns {Promise<CompressedTextureBuffer>|undefined} A promise that will resolve to the requested data when loaded. Returns undefined if <code>request.throttle</code> is true and the request does not have high enough priority.\n *\n * @exception {RuntimeError} Invalid KTX2 file.\n * @exception {RuntimeError} KTX2 texture arrays are not supported.\n * @exception {RuntimeError} KTX2 3D textures are unsupported.\n * @exception {RuntimeError} No transcoding format target available for ETC1S compressed ktx2s.\n * @exception {RuntimeError} No transcoding format target available for UASTC compressed ktx2s.\n * @exception {RuntimeError} startTranscoding() failed.\n * @exception {RuntimeError} transcodeImage() failed.\n *\n * @example\n * // load a single URL asynchronously\n * Cesium.loadKTX2('some/url').then(function (ktx2Data) {\n *     const width = ktx2Data.width;\n *     const height = ktx2Data.height;\n *     const format = ktx2Data.internalFormat;\n *     const arrayBufferView = ktx2Data.bufferView;\n *     // use the data to create a texture\n * }).catch(function (error) {\n *     // an error occurred.\n * });\n *\n * @see {@link https://github.com/KhronosGroup/KTX-Specification|KTX file format}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n * @private\n */\nfunction loadKTX2(resourceOrUrlOrBuffer) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"resourceOrUrlOrBuffer\", resourceOrUrlOrBuffer);\n  //>>includeEnd('debug');\n\n  let loadPromise;\n  if (\n    resourceOrUrlOrBuffer instanceof ArrayBuffer ||\n    ArrayBuffer.isView(resourceOrUrlOrBuffer)\n  ) {\n    loadPromise = Promise.resolve(resourceOrUrlOrBuffer);\n  } else {\n    const resource = Resource.createIfNeeded(resourceOrUrlOrBuffer);\n    loadPromise = resource.fetchArrayBuffer();\n  }\n\n  // load module then return\n  return loadPromise.then(function (data) {\n    return KTX2Transcoder.transcode(data, supportedTranscoderFormats);\n  });\n}\n\nexport default loadKTX2;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\nconst leftScratchArray = [];\nconst rightScratchArray = [];\n\nfunction merge(array, compare, userDefinedObject, start, middle, end) {\n  const leftLength = middle - start + 1;\n  const rightLength = end - middle;\n\n  const left = leftScratchArray;\n  const right = rightScratchArray;\n\n  let i;\n  let j;\n\n  for (i = 0; i < leftLength; ++i) {\n    left[i] = array[start + i];\n  }\n\n  for (j = 0; j < rightLength; ++j) {\n    right[j] = array[middle + j + 1];\n  }\n\n  i = 0;\n  j = 0;\n  for (let k = start; k <= end; ++k) {\n    const leftElement = left[i];\n    const rightElement = right[j];\n    if (\n      i < leftLength &&\n      (j >= rightLength ||\n        compare(leftElement, rightElement, userDefinedObject) <= 0)\n    ) {\n      array[k] = leftElement;\n      ++i;\n    } else if (j < rightLength) {\n      array[k] = rightElement;\n      ++j;\n    }\n  }\n}\n\nfunction sort(array, compare, userDefinedObject, start, end) {\n  if (start >= end) {\n    return;\n  }\n\n  const middle = Math.floor((start + end) * 0.5);\n  sort(array, compare, userDefinedObject, start, middle);\n  sort(array, compare, userDefinedObject, middle + 1, end);\n  merge(array, compare, userDefinedObject, start, middle, end);\n}\n\n/**\n * A stable merge sort.\n *\n * @function mergeSort\n * @param {Array|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} array The array to sort.\n * @param {mergeSortComparator} comparator The function to use to compare elements in the array.\n * @param {*} [userDefinedObject] Any item to pass as the third parameter to <code>comparator</code>.\n *\n * @example\n * // Assume array contains BoundingSpheres in world coordinates.\n * // Sort them in ascending order of distance from the camera.\n * const position = camera.positionWC;\n * Cesium.mergeSort(array, function(a, b, position) {\n *     return Cesium.BoundingSphere.distanceSquaredTo(b, position) - Cesium.BoundingSphere.distanceSquaredTo(a, position);\n * }, position);\n */\nfunction mergeSort(array, comparator, userDefinedObject) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required.\");\n  }\n  if (!defined(comparator)) {\n    throw new DeveloperError(\"comparator is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const length = array.length;\n  const scratchLength = Math.ceil(length * 0.5);\n\n  // preallocate space in scratch arrays\n  leftScratchArray.length = scratchLength;\n  rightScratchArray.length = scratchLength;\n\n  sort(array, comparator, userDefinedObject, 0, length - 1);\n\n  // trim scratch arrays\n  leftScratchArray.length = 0;\n  rightScratchArray.length = 0;\n}\n\n/**\n * A function used to compare two items while performing a merge sort.\n * @callback mergeSortComparator\n *\n * @param {*} a An item in the array.\n * @param {*} b An item in the array.\n * @param {*} [userDefinedObject] An object that was passed to {@link mergeSort}.\n * @returns {number} Returns a negative value if <code>a</code> is less than <code>b</code>,\n *          a positive value if <code>a</code> is greater than <code>b</code>, or\n *          0 if <code>a</code> is equal to <code>b</code>.\n *\n * @example\n * function compareNumbers(a, b, userDefinedObject) {\n *     return a - b;\n * }\n */\nexport default mergeSort;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Converts an object representing a set of name/value pairs into a query string,\n * with names and values encoded properly for use in a URL.  Values that are arrays\n * will produce multiple values with the same name.\n * @function objectToQuery\n *\n * @param {object} obj The object containing data to encode.\n * @returns {string} An encoded query string.\n *\n *\n * @example\n * const str = Cesium.objectToQuery({\n *     key1 : 'some value',\n *     key2 : 'a/b',\n *     key3 : ['x', 'y']\n * });\n *\n * @see queryToObject\n * // str will be:\n * // 'key1=some%20value&key2=a%2Fb&key3=x&key3=y'\n */\nfunction objectToQuery(obj) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(obj)) {\n    throw new DeveloperError(\"obj is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let result = \"\";\n  for (const propName in obj) {\n    if (obj.hasOwnProperty(propName)) {\n      const value = obj[propName];\n\n      const part = `${encodeURIComponent(propName)}=`;\n      if (Array.isArray(value)) {\n        for (let i = 0, len = value.length; i < len; ++i) {\n          result += `${part + encodeURIComponent(value[i])}&`;\n        }\n      } else {\n        result += `${part + encodeURIComponent(value)}&`;\n      }\n    }\n  }\n\n  // trim last &\n  result = result.slice(0, -1);\n\n  // This function used to replace %20 with + which is more compact and readable.\n  // However, some servers didn't properly handle + as a space.\n  // https://github.com/CesiumGS/cesium/issues/2192\n\n  return result;\n}\nexport default objectToQuery;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\nconst warnings = {};\n\n/**\n * Logs a one time message to the console.  Use this function instead of\n * <code>console.log</code> directly since this does not log duplicate messages\n * unless it is called from multiple workers.\n *\n * @function oneTimeWarning\n *\n * @param {string} identifier The unique identifier for this warning.\n * @param {string} [message=identifier] The message to log to the console.\n *\n * @example\n * for(let i=0;i<foo.length;++i) {\n *    if (!defined(foo[i].bar)) {\n *       // Something that can be recovered from but may happen a lot\n *       oneTimeWarning('foo.bar undefined', 'foo.bar is undefined. Setting to 0.');\n *       foo[i].bar = 0;\n *       // ...\n *    }\n * }\n *\n * @private\n */\nfunction oneTimeWarning(identifier, message) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(identifier)) {\n    throw new DeveloperError(\"identifier is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(warnings[identifier])) {\n    warnings[identifier] = true;\n    console.warn(message ?? identifier);\n  }\n}\n\noneTimeWarning.geometryOutlines =\n  \"Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.\";\n\noneTimeWarning.geometryZIndex =\n  \"Entity geometry with zIndex are unsupported when height or extrudedHeight are defined.  zIndex will be ignored\";\n\noneTimeWarning.geometryHeightReference =\n  \"Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height.  heightReference will be ignored\";\noneTimeWarning.geometryExtrudedHeightReference =\n  \"Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight.  extrudedHeightReference will be ignored\";\nexport default oneTimeWarning;\n","/**\n * Parses the result of XMLHttpRequest's getAllResponseHeaders() method into\n * a dictionary.\n *\n * @function parseResponseHeaders\n *\n * @param {string} headerString The header string returned by getAllResponseHeaders().  The format is\n *                 described here: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method\n * @returns {object} A dictionary of key/value pairs, where each key is the name of a header and the corresponding value\n *                   is that header's value.\n *\n * @private\n */\nfunction parseResponseHeaders(headerString) {\n  const headers = {};\n\n  if (!headerString) {\n    return headers;\n  }\n\n  const headerPairs = headerString.split(\"\\u000d\\u000a\");\n\n  for (let i = 0; i < headerPairs.length; ++i) {\n    const headerPair = headerPairs[i];\n    // Can't use split() here because it does the wrong thing\n    // if the header value has the string \": \" in it.\n    const index = headerPair.indexOf(\"\\u003a\\u0020\");\n    if (index > 0) {\n      const key = headerPair.substring(0, index);\n      const val = headerPair.substring(index + 2);\n      headers[key] = val;\n    }\n  }\n\n  return headers;\n}\nexport default parseResponseHeaders;\n","import barycentricCoordinates from \"./barycentricCoordinates.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\n\nconst scratchBarycentricCoords = new Cartesian3();\n\n/**\n * Determines if a point is inside a triangle.\n *\n * @function pointInsideTriangle\n *\n * @param {Cartesian2|Cartesian3} point The point to test.\n * @param {Cartesian2|Cartesian3} p0 The first point of the triangle.\n * @param {Cartesian2|Cartesian3} p1 The second point of the triangle.\n * @param {Cartesian2|Cartesian3} p2 The third point of the triangle.\n * @returns {boolean} <code>true</code> if the point is inside the triangle; otherwise, <code>false</code>.\n *\n * @example\n * // Returns true\n * const p = new Cesium.Cartesian2(0.25, 0.25);\n * const b = Cesium.pointInsideTriangle(p,\n *   new Cesium.Cartesian2(0.0, 0.0),\n *   new Cesium.Cartesian2(1.0, 0.0),\n *   new Cesium.Cartesian2(0.0, 1.0));\n */\nfunction pointInsideTriangle(point, p0, p1, p2) {\n  const coords = barycentricCoordinates(\n    point,\n    p0,\n    p1,\n    p2,\n    scratchBarycentricCoords,\n  );\n  if (!defined(coords)) {\n    return false;\n  }\n  return coords.x > 0.0 && coords.y > 0.0 && coords.z > 0;\n}\nexport default pointInsideTriangle;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Parses a query string into an object, where the keys and values of the object are the\n * name/value pairs from the query string, decoded. If a name appears multiple times,\n * the value in the object will be an array of values.\n * @function queryToObject\n *\n * @param {string} queryString The query string.\n * @returns {object} An object containing the parameters parsed from the query string.\n *\n *\n * @example\n * const obj = Cesium.queryToObject('key1=some%20value&key2=a%2Fb&key3=x&key3=y');\n * // obj will be:\n * // {\n * //   key1 : 'some value',\n * //   key2 : 'a/b',\n * //   key3 : ['x', 'y']\n * // }\n *\n * @see objectToQuery\n */\nfunction queryToObject(queryString) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(queryString)) {\n    throw new DeveloperError(\"queryString is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const result = {};\n  if (queryString === \"\") {\n    return result;\n  }\n  const parts = queryString.replace(/\\+/g, \"%20\").split(/[&;]/);\n  for (let i = 0, len = parts.length; i < len; ++i) {\n    const subparts = parts[i].split(\"=\");\n\n    const name = decodeURIComponent(subparts[0]);\n    let value = subparts[1];\n    if (defined(value)) {\n      value = decodeURIComponent(value);\n    } else {\n      value = \"\";\n    }\n\n    const resultValue = result[name];\n    if (typeof resultValue === \"string\") {\n      // expand the single value to an array\n      result[name] = [resultValue, value];\n    } else if (Array.isArray(resultValue)) {\n      resultValue.push(value);\n    } else {\n      result[name] = value;\n    }\n  }\n  return result;\n}\nexport default queryToObject;\n","import CesiumMath from \"./Math.js\";\n\n/**\n * Resizes an image to ensure both width and height are powers of 2.\n * NOTE: The input image is resampled larger, rather than padded.\n * The aspect ratio of the image may change.\n *\n * @param {HTMLImageElement|HTMLCanvasElement} image The image to be resized\n * @returns {HTMLCanvasElement} A new canvas with the resized image drawn to it\n *\n * @private\n */\nfunction resizeImageToNextPowerOfTwo(image) {\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = CesiumMath.nextPowerOfTwo(image.width);\n  canvas.height = CesiumMath.nextPowerOfTwo(image.height);\n  const canvasContext = canvas.getContext(\"2d\");\n  canvasContext.drawImage(\n    image,\n    0,\n    0,\n    image.width,\n    image.height,\n    0,\n    0,\n    canvas.width,\n    canvas.height,\n  );\n  return canvas;\n}\nexport default resizeImageToNextPowerOfTwo;\n","import Check from \"./Check.js\";\nimport defined from \"./defined.js\";\n\n/**\n * Initiates a terrain height query for an array of {@link Cartographic} positions by\n * requesting tiles from a terrain provider, sampling, and interpolating.  The interpolation\n * matches the triangles used to render the terrain at the specified level.  The query\n * happens asynchronously, so this function returns a promise that is resolved when\n * the query completes.  Each point height is modified in place.  If a height can not be\n * determined because no terrain data is available for the specified level at that location,\n * or another error occurs, the height is set to undefined.  As is typical of the\n * {@link Cartographic} type, the supplied height is a height above the reference ellipsoid\n * (such as {@link Ellipsoid.WGS84}) rather than an altitude above mean sea level.  In other\n * words, it will not necessarily be 0.0 if sampled in the ocean. This function needs the\n * terrain level of detail as input, if you need to get the altitude of the terrain as precisely\n * as possible (i.e. with maximum level of detail) use {@link sampleTerrainMostDetailed}.\n *\n * @function sampleTerrain\n *\n * @param {TerrainProvider} terrainProvider The terrain provider from which to query heights.\n * @param {number} level The terrain level-of-detail from which to query terrain heights.\n * @param {Cartographic[]} positions The positions to update with terrain heights.\n * @param {boolean} [rejectOnTileFail=false] If true, for any failed terrain tile requests, the promise will be rejected. If false, returned heights will be undefined.\n * @returns {Promise<Cartographic[]>} A promise that resolves to the provided list of positions when terrain the query has completed.\n *\n * @see sampleTerrainMostDetailed\n *\n * @example\n * // Query the terrain height of two Cartographic positions\n * const terrainProvider = await Cesium.createWorldTerrainAsync();\n * const positions = [\n *     Cesium.Cartographic.fromDegrees(86.925145, 27.988257),\n *     Cesium.Cartographic.fromDegrees(87.0, 28.0)\n * ];\n * const updatedPositions = await Cesium.sampleTerrain(terrainProvider, 11, positions);\n * // positions[0].height and positions[1].height have been updated.\n * // updatedPositions is just a reference to positions.\n *\n * // To handle tile errors, pass true for the rejectOnTileFail parameter.\n * try {\n *    const updatedPositions = await Cesium.sampleTerrain(terrainProvider, 11, positions, true);\n * } catch (error) {\n *   // A tile request error occurred.\n * }\n */\nasync function sampleTerrain(\n  terrainProvider,\n  level,\n  positions,\n  rejectOnTileFail,\n) {\n  if (!defined(rejectOnTileFail)) {\n    rejectOnTileFail = false;\n  }\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"terrainProvider\", terrainProvider);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.bool(\"rejectOnTileFail\", rejectOnTileFail);\n  Check.defined(\"positions\", positions);\n  //>>includeEnd('debug');\n\n  return doSampling(terrainProvider, level, positions, rejectOnTileFail);\n}\n\n/**\n * @param {object[]} tileRequests The mutated list of requests, the first one will be attempted\n * @param {Array<Promise<void>>} results The list to put the result promises into\n * @param {boolean} rejectOnTileFail If true, the promise will be rejected.  If false, returned heights will be undefined.\n * @returns {boolean} true if the request was made, and we are okay to attempt the next item immediately,\n *  or false if we were throttled and should wait awhile before retrying.\n *\n * @private\n */\nfunction attemptConsumeNextQueueItem(tileRequests, results, rejectOnTileFail) {\n  const tileRequest = tileRequests[0];\n  const requestPromise = tileRequest.terrainProvider.requestTileGeometry(\n    tileRequest.x,\n    tileRequest.y,\n    tileRequest.level,\n  );\n\n  if (!requestPromise) {\n    // getting back undefined instead of a promise indicates we should retry a bit later\n    return false;\n  }\n\n  let promise;\n\n  if (rejectOnTileFail) {\n    promise = requestPromise.then(createInterpolateFunction(tileRequest));\n  } else {\n    promise = requestPromise\n      .then(createInterpolateFunction(tileRequest))\n      .catch(createMarkFailedFunction(tileRequest));\n  }\n\n  // remove the request we've just done from the queue\n  //  and add its promise result to the result list\n  tileRequests.shift();\n  results.push(promise);\n\n  // indicate we should synchronously attempt the next request as well\n  return true;\n}\n\n/**\n * Wrap window.setTimeout in a Promise\n * @param {number} ms\n * @private\n */\nfunction delay(ms) {\n  return new Promise(function (res) {\n    setTimeout(res, ms);\n  });\n}\n\n/**\n * Recursively consumes all the tileRequests until the list has been emptied\n *  and a Promise of each result has been put into the results list\n * @param {object[]} tileRequests The list of requests desired to be made\n * @param {Array<Promise<void>>} results The list to put all the result promises into\n * @param {boolean} rejectOnTileFail If true, the promise will be rejected.  If false, returned heights will be undefined.\n * @returns {Promise<void>} A promise which resolves once all requests have been started\n *\n * @private\n */\nfunction drainTileRequestQueue(tileRequests, results, rejectOnTileFail) {\n  // nothing left to do\n  if (!tileRequests.length) {\n    return Promise.resolve();\n  }\n\n  // consume an item from the queue, which will\n  //  mutate the request and result lists, and return true if we should\n  //  immediately attempt to consume the next item as well\n  const success = attemptConsumeNextQueueItem(\n    tileRequests,\n    results,\n    rejectOnTileFail,\n  );\n  if (success) {\n    return drainTileRequestQueue(tileRequests, results, rejectOnTileFail);\n  }\n\n  // wait a small fixed amount of time first, before retrying the same request again\n  return delay(100).then(() => {\n    return drainTileRequestQueue(tileRequests, results, rejectOnTileFail);\n  });\n}\n\nfunction doSampling(terrainProvider, level, positions, rejectOnTileFail) {\n  const tilingScheme = terrainProvider.tilingScheme;\n\n  let i;\n\n  // Sort points into a set of tiles\n  const tileRequests = []; // Result will be an Array as it's easier to work with\n  const tileRequestSet = {}; // A unique set\n  for (i = 0; i < positions.length; ++i) {\n    const xy = tilingScheme.positionToTileXY(positions[i], level);\n    if (!defined(xy)) {\n      continue;\n    }\n\n    const key = xy.toString();\n\n    if (!tileRequestSet.hasOwnProperty(key)) {\n      // When tile is requested for the first time\n      const value = {\n        x: xy.x,\n        y: xy.y,\n        level: level,\n        tilingScheme: tilingScheme,\n        terrainProvider: terrainProvider,\n        positions: [],\n      };\n      tileRequestSet[key] = value;\n      tileRequests.push(value);\n    }\n\n    // Now append to array of points for the tile\n    tileRequestSet[key].positions.push(positions[i]);\n  }\n\n  // create our list of result promises to be filled\n  const tilePromises = [];\n  return drainTileRequestQueue(\n    tileRequests,\n    tilePromises,\n    rejectOnTileFail,\n  ).then(function () {\n    // now all the required requests have been started\n    //  we just wait for them all to finish\n    return Promise.all(tilePromises).then(function () {\n      return positions;\n    });\n  });\n}\n\n/**\n * Calls {@link TerrainData#interpolateHeight} on a given {@link TerrainData} for a given {@link Cartographic} and\n *  will assign the height property if the return value is not undefined.\n *\n * If the return value is false; it's suggesting that you should call {@link TerrainData#createMesh} first.\n * @param {Cartographic} position The position to interpolate for and assign the height value to\n * @param {TerrainData} terrainData\n * @param {Rectangle} rectangle\n * @returns {boolean} If the height was actually interpolated and assigned\n * @private\n */\nfunction interpolateAndAssignHeight(position, terrainData, rectangle) {\n  const height = terrainData.interpolateHeight(\n    rectangle,\n    position.longitude,\n    position.latitude,\n  );\n  if (height === undefined) {\n    // if height comes back as undefined, it may implicitly mean the terrain data\n    //  requires us to call TerrainData.createMesh() first (ArcGIS requires this in particular)\n    //  so we'll return false and do that next!\n    return false;\n  }\n  position.height = height;\n  return true;\n}\n\nfunction createInterpolateFunction(tileRequest) {\n  const tilePositions = tileRequest.positions;\n  const rectangle = tileRequest.tilingScheme.tileXYToRectangle(\n    tileRequest.x,\n    tileRequest.y,\n    tileRequest.level,\n  );\n  return function (terrainData) {\n    let isMeshRequired = false;\n    for (let i = 0; i < tilePositions.length; ++i) {\n      const position = tilePositions[i];\n      const isHeightAssigned = interpolateAndAssignHeight(\n        position,\n        terrainData,\n        rectangle,\n      );\n      // we've found a position which returned undefined - hinting to us\n      //  that we probably need to create a mesh for this terrain data.\n      // so break out of this loop and create the mesh - then we'll interpolate all the heights again\n      if (!isHeightAssigned) {\n        isMeshRequired = true;\n        break;\n      }\n    }\n\n    if (!isMeshRequired) {\n      // all position heights were interpolated - we don't need the mesh\n      return Promise.resolve();\n    }\n\n    // create the mesh - and interpolate all the positions again\n    // note: terrain exaggeration is not passed in - we are only interested in the raw data\n    return terrainData\n      .createMesh({\n        tilingScheme: tileRequest.tilingScheme,\n        x: tileRequest.x,\n        y: tileRequest.y,\n        level: tileRequest.level,\n        // don't throttle this mesh creation because we've asked to sample these points;\n        //  so sample them! We don't care how many tiles that is!\n        throttle: false,\n      })\n      .then(function () {\n        // mesh has been created - so go through every position (maybe again)\n        //  and re-interpolate the heights - presumably using the mesh this time\n        for (let i = 0; i < tilePositions.length; ++i) {\n          const position = tilePositions[i];\n          // if it doesn't work this time - that's fine, we tried.\n          interpolateAndAssignHeight(position, terrainData, rectangle);\n        }\n      });\n  };\n}\n\nfunction createMarkFailedFunction(tileRequest) {\n  const tilePositions = tileRequest.positions;\n  return function () {\n    for (let i = 0; i < tilePositions.length; ++i) {\n      const position = tilePositions[i];\n      position.height = undefined;\n    }\n  };\n}\n\nexport default sampleTerrain;\n","import Cartesian2 from \"./Cartesian2.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport sampleTerrain from \"./sampleTerrain.js\";\n\nconst scratchCartesian2 = new Cartesian2();\n\n/**\n * Initiates a sampleTerrain() request at the maximum available tile level for a terrain dataset.\n *\n * @function sampleTerrainMostDetailed\n *\n * @param {TerrainProvider} terrainProvider The terrain provider from which to query heights.\n * @param {Cartographic[]} positions The positions to update with terrain heights.\n * @param {boolean} [rejectOnTileFail=false] If true, for a failed terrain tile request the promise will be rejected. If false, returned heights will be undefined.\n * @returns {Promise<Cartographic[]>} A promise that resolves to the provided list of positions when terrain the query has completed.  This\n *                                     promise will reject if the terrain provider's `availability` property is undefined.\n *\n * @example\n * // Query the terrain height of two Cartographic positions\n * const terrainProvider = await Cesium.createWorldTerrainAsync();\n * const positions = [\n *     Cesium.Cartographic.fromDegrees(86.925145, 27.988257),\n *     Cesium.Cartographic.fromDegrees(87.0, 28.0)\n * ];\n * const updatedPositions = await Cesium.sampleTerrainMostDetailed(terrainProvider, positions);\n * // positions[0].height and positions[1].height have been updated.\n * // updatedPositions is just a reference to positions.\n *\n * // To handle tile errors, pass true for the rejectOnTileFail parameter.\n * try {\n *    const updatedPositions = await Cesium.sampleTerrainMostDetailed(terrainProvider, positions, true);\n * } catch (error) {\n *   // A tile request error occurred.\n * }\n */\nasync function sampleTerrainMostDetailed(\n  terrainProvider,\n  positions,\n  rejectOnTileFail,\n) {\n  if (!defined(rejectOnTileFail)) {\n    rejectOnTileFail = false;\n  }\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(terrainProvider)) {\n    throw new DeveloperError(\"terrainProvider is required.\");\n  }\n  if (!defined(positions)) {\n    throw new DeveloperError(\"positions is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const byLevel = [];\n  const maxLevels = [];\n\n  const availability = terrainProvider.availability;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(availability)) {\n    throw new DeveloperError(\n      \"sampleTerrainMostDetailed requires a terrain provider that has tile availability.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const promises = [];\n  for (let i = 0; i < positions.length; ++i) {\n    const position = positions[i];\n    const maxLevel = availability.computeMaximumLevelAtPosition(position);\n    maxLevels[i] = maxLevel;\n    if (maxLevel === 0) {\n      // This is a special case where we have a parent terrain and we are requesting\n      // heights from an area that isn't covered by the top level terrain at all.\n      // This will essentially trigger the loading of the parent terrains root tile\n      terrainProvider.tilingScheme.positionToTileXY(\n        position,\n        1,\n        scratchCartesian2,\n      );\n      const promise = terrainProvider.loadTileDataAvailability(\n        scratchCartesian2.x,\n        scratchCartesian2.y,\n        1,\n      );\n      if (defined(promise)) {\n        promises.push(promise);\n      }\n    }\n\n    let atLevel = byLevel[maxLevel];\n    if (!defined(atLevel)) {\n      byLevel[maxLevel] = atLevel = [];\n    }\n    atLevel.push(position);\n  }\n\n  await Promise.all(promises);\n  await Promise.all(\n    byLevel.map(function (positionsAtLevel, index) {\n      if (defined(positionsAtLevel)) {\n        return sampleTerrain(\n          terrainProvider,\n          index,\n          positionsAtLevel,\n          rejectOnTileFail,\n        );\n      }\n    }),\n  );\n  const changedPositions = [];\n  for (let i = 0; i < positions.length; ++i) {\n    const position = positions[i];\n    const maxLevel = availability.computeMaximumLevelAtPosition(position);\n\n    if (maxLevel !== maxLevels[i]) {\n      // Now that we loaded the max availability, a higher level has become available\n      changedPositions.push(position);\n    }\n  }\n\n  if (changedPositions.length > 0) {\n    await sampleTerrainMostDetailed(\n      terrainProvider,\n      changedPositions,\n      rejectOnTileFail,\n    );\n  }\n\n  return positions;\n}\nexport default sampleTerrainMostDetailed;\n","import Cartesian3 from \"./Cartesian3.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport CesiumMath from \"./Math.js\";\n\nconst scaleToGeodeticSurfaceIntersection = new Cartesian3();\nconst scaleToGeodeticSurfaceGradient = new Cartesian3();\n\n/**\n * Scales the provided Cartesian position along the geodetic surface normal\n * so that it is on the surface of this ellipsoid.  If the position is\n * at the center of the ellipsoid, this function returns undefined.\n *\n * @param {Cartesian3} cartesian The Cartesian position to scale.\n * @param {Cartesian3} oneOverRadii One over radii of the ellipsoid.\n * @param {Cartesian3} oneOverRadiiSquared One over radii squared of the ellipsoid.\n * @param {number} centerToleranceSquared Tolerance for closeness to the center.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\n *\n * @function scaleToGeodeticSurface\n *\n * @private\n */\nfunction scaleToGeodeticSurface(\n  cartesian,\n  oneOverRadii,\n  oneOverRadiiSquared,\n  centerToleranceSquared,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  if (!defined(oneOverRadii)) {\n    throw new DeveloperError(\"oneOverRadii is required.\");\n  }\n  if (!defined(oneOverRadiiSquared)) {\n    throw new DeveloperError(\"oneOverRadiiSquared is required.\");\n  }\n  if (!defined(centerToleranceSquared)) {\n    throw new DeveloperError(\"centerToleranceSquared is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const positionX = cartesian.x;\n  const positionY = cartesian.y;\n  const positionZ = cartesian.z;\n\n  const oneOverRadiiX = oneOverRadii.x;\n  const oneOverRadiiY = oneOverRadii.y;\n  const oneOverRadiiZ = oneOverRadii.z;\n\n  const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\n  const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\n  const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\n\n  // Compute the squared ellipsoid norm.\n  const squaredNorm = x2 + y2 + z2;\n  const ratio = Math.sqrt(1.0 / squaredNorm);\n\n  // As an initial approximation, assume that the radial intersection is the projection point.\n  const intersection = Cartesian3.multiplyByScalar(\n    cartesian,\n    ratio,\n    scaleToGeodeticSurfaceIntersection,\n  );\n\n  // If the position is near the center, the iteration will not converge.\n  if (squaredNorm < centerToleranceSquared) {\n    return !isFinite(ratio)\n      ? undefined\n      : Cartesian3.clone(intersection, result);\n  }\n\n  const oneOverRadiiSquaredX = oneOverRadiiSquared.x;\n  const oneOverRadiiSquaredY = oneOverRadiiSquared.y;\n  const oneOverRadiiSquaredZ = oneOverRadiiSquared.z;\n\n  // Use the gradient at the intersection point in place of the true unit normal.\n  // The difference in magnitude will be absorbed in the multiplier.\n  const gradient = scaleToGeodeticSurfaceGradient;\n  gradient.x = intersection.x * oneOverRadiiSquaredX * 2.0;\n  gradient.y = intersection.y * oneOverRadiiSquaredY * 2.0;\n  gradient.z = intersection.z * oneOverRadiiSquaredZ * 2.0;\n\n  // Compute the initial guess at the normal vector multiplier, lambda.\n  let lambda =\n    ((1.0 - ratio) * Cartesian3.magnitude(cartesian)) /\n    (0.5 * Cartesian3.magnitude(gradient));\n  let correction = 0.0;\n\n  let func;\n  let denominator;\n  let xMultiplier;\n  let yMultiplier;\n  let zMultiplier;\n  let xMultiplier2;\n  let yMultiplier2;\n  let zMultiplier2;\n  let xMultiplier3;\n  let yMultiplier3;\n  let zMultiplier3;\n\n  do {\n    lambda -= correction;\n\n    xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\n    yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\n    zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\n\n    xMultiplier2 = xMultiplier * xMultiplier;\n    yMultiplier2 = yMultiplier * yMultiplier;\n    zMultiplier2 = zMultiplier * zMultiplier;\n\n    xMultiplier3 = xMultiplier2 * xMultiplier;\n    yMultiplier3 = yMultiplier2 * yMultiplier;\n    zMultiplier3 = zMultiplier2 * zMultiplier;\n\n    func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\n\n    // \"denominator\" here refers to the use of this expression in the velocity and acceleration\n    // computations in the sections to follow.\n    denominator =\n      x2 * xMultiplier3 * oneOverRadiiSquaredX +\n      y2 * yMultiplier3 * oneOverRadiiSquaredY +\n      z2 * zMultiplier3 * oneOverRadiiSquaredZ;\n\n    const derivative = -2.0 * denominator;\n\n    correction = func / derivative;\n  } while (Math.abs(func) > CesiumMath.EPSILON12);\n\n  if (!defined(result)) {\n    return new Cartesian3(\n      positionX * xMultiplier,\n      positionY * yMultiplier,\n      positionZ * zMultiplier,\n    );\n  }\n  result.x = positionX * xMultiplier;\n  result.y = positionY * yMultiplier;\n  result.z = positionZ * zMultiplier;\n  return result;\n}\nexport default scaleToGeodeticSurface;\n","import Check from \"./Check.js\";\n\n/**\n * Converts the value from sRGB color space to linear color space.\n *\n * @function\n *\n * @param {number} value The color value in sRGB color space.\n * @returns {number} Returns the color value in linear color space.\n *\n * @example\n * const srgbColor = [0.5, 0.5, 0.5];\n * const linearColor = srgbColor.map(function (c) {\n *     return Cesium.srgbToLinear(c);\n * });\n */\nfunction srgbToLinear(value) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"value\", value);\n  //>>includeEnd('debug');\n\n  if (value <= 0.04045) {\n    // eslint-disable-next-line no-loss-of-precision\n    return value * 0.07739938080495356037151702786378;\n  }\n  return Math.pow(\n    // eslint-disable-next-line no-loss-of-precision\n    (value + 0.055) * 0.94786729857819905213270142180095,\n    2.4,\n  );\n}\nexport default srgbToLinear;\n","import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Subdivides an array into a number of smaller, equal sized arrays.\n *\n * @function subdivideArray\n *\n * @param {Array} array The array to divide.\n * @param {number} numberOfArrays The number of arrays to divide the provided array into.\n *\n * @exception {DeveloperError} numberOfArrays must be greater than 0.\n */\nfunction subdivideArray(array, numberOfArrays) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(array)) {\n    throw new DeveloperError(\"array is required.\");\n  }\n\n  if (!defined(numberOfArrays) || numberOfArrays < 1) {\n    throw new DeveloperError(\"numberOfArrays must be greater than 0.\");\n  }\n  //>>includeEnd('debug');\n\n  const result = [];\n  const len = array.length;\n  let i = 0;\n  while (i < len) {\n    const size = Math.ceil((len - i) / numberOfArrays--);\n    result.push(array.slice(i, i + size));\n    i += size;\n  }\n  return result;\n}\nexport default subdivideArray;\n","import WebGLConstants from \"./WebGLConstants.js\";\n\nfunction webGLConstantToGlslType(webGLValue) {\n  switch (webGLValue) {\n    case WebGLConstants.FLOAT:\n      return \"float\";\n    case WebGLConstants.FLOAT_VEC2:\n      return \"vec2\";\n    case WebGLConstants.FLOAT_VEC3:\n      return \"vec3\";\n    case WebGLConstants.FLOAT_VEC4:\n      return \"vec4\";\n    case WebGLConstants.FLOAT_MAT2:\n      return \"mat2\";\n    case WebGLConstants.FLOAT_MAT3:\n      return \"mat3\";\n    case WebGLConstants.FLOAT_MAT4:\n      return \"mat4\";\n    case WebGLConstants.SAMPLER_2D:\n      return \"sampler2D\";\n    case WebGLConstants.BOOL:\n      return \"bool\";\n  }\n}\nexport default webGLConstantToGlslType;\n","import DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Wraps a function on the provided objects with another function called in the\n * object's context so that the new function is always called immediately\n * before the old one.\n *\n * @private\n */\nfunction wrapFunction(obj, oldFunction, newFunction) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof oldFunction !== \"function\") {\n    throw new DeveloperError(\"oldFunction is required to be a function.\");\n  }\n\n  if (typeof newFunction !== \"function\") {\n    throw new DeveloperError(\"oldFunction is required to be a function.\");\n  }\n  //>>includeEnd('debug');\n\n  return function () {\n    newFunction.apply(obj, arguments);\n    oldFunction.apply(obj, arguments);\n  };\n}\nexport default wrapFunction;\n","import Color from \"./Color.js\";\nimport Frozen from \"./Frozen.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Computes dimensions for text, based on current canvas state.\n *\n * Rounds metrics, excluding width, to whole pixels. This is purely to minimize\n * rendering differences with migration to in-browser measureText(), and may be\n * revised in the future. See: github.com/CesiumGS/cesium/pull/13081\n */\nfunction measureText(context2D, textString) {\n  const metrics = context2D.measureText(textString);\n  const isSpace = !/\\S/.test(textString);\n\n  if (isSpace) {\n    return {\n      width: metrics.width,\n      height: 0,\n      ascent: 0,\n      descent: 0,\n      minx: 0,\n    };\n  }\n\n  // Baseline alignment requires `height = ascent + descent`. Rounding (if any)\n  // must be done before summing, or glyph pairs like \"ij\" may be misaligned.\n  const ascent = Math.round(metrics.actualBoundingBoxAscent);\n  const descent = Math.round(metrics.actualBoundingBoxDescent);\n\n  // Characters like \"_\" may have height <0.5 at some sizes, don't round to zero.\n  const height = Math.max(ascent + descent, 1);\n\n  return {\n    width: metrics.width,\n    height,\n    ascent,\n    descent,\n    minx: -Math.round(metrics.actualBoundingBoxLeft),\n  };\n}\n\nlet imageSmoothingEnabledName;\n\n/**\n * Writes the given text into a new canvas.  The canvas will be sized to fit the text.\n * If text is blank, returns undefined.\n *\n * @param {string} text The text to write.\n * @param {object} [options] Object with the following properties:\n * @param {string} [options.font='10px sans-serif'] The CSS font to use.\n * @param {boolean} [options.fill=true] Whether to fill the text.\n * @param {boolean} [options.stroke=false] Whether to stroke the text.\n * @param {Color} [options.fillColor=Color.WHITE] The fill color.\n * @param {Color} [options.strokeColor=Color.BLACK] The stroke color.\n * @param {number} [options.strokeWidth=1] The stroke width.\n * @param {Color} [options.backgroundColor=Color.TRANSPARENT] The background color of the canvas.\n * @param {number} [options.padding=0] The pixel size of the padding to add around the text.\n * @returns {HTMLCanvasElement|undefined} A new canvas with the given text drawn into it.  The dimensions object\n *                   from measureText will also be added to the returned canvas. If text is\n *                   blank, returns undefined.\n * @function writeTextToCanvas\n */\nfunction writeTextToCanvas(text, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(text)) {\n    throw new DeveloperError(\"text is required.\");\n  }\n  //>>includeEnd('debug');\n  if (text === \"\") {\n    return undefined;\n  }\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const font = options.font ?? \"10px sans-serif\";\n  const stroke = options.stroke ?? false;\n  const fill = options.fill ?? true;\n  const strokeWidth = options.strokeWidth ?? 1;\n  const backgroundColor = options.backgroundColor ?? Color.TRANSPARENT;\n  const padding = options.padding ?? 0;\n  const doublePadding = padding * 2.0;\n\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = 1;\n  canvas.height = 1;\n  canvas.style.font = font;\n  // Since multiple read-back operations are expected for labels, use the willReadFrequently option – See https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently\n  const context2D = canvas.getContext(\"2d\", { willReadFrequently: true });\n\n  if (!defined(imageSmoothingEnabledName)) {\n    if (defined(context2D.imageSmoothingEnabled)) {\n      imageSmoothingEnabledName = \"imageSmoothingEnabled\";\n    } else if (defined(context2D.mozImageSmoothingEnabled)) {\n      imageSmoothingEnabledName = \"mozImageSmoothingEnabled\";\n    } else if (defined(context2D.webkitImageSmoothingEnabled)) {\n      imageSmoothingEnabledName = \"webkitImageSmoothingEnabled\";\n    } else if (defined(context2D.msImageSmoothingEnabled)) {\n      imageSmoothingEnabledName = \"msImageSmoothingEnabled\";\n    }\n  }\n\n  context2D.font = font;\n  context2D.lineJoin = \"round\";\n  context2D.lineWidth = strokeWidth;\n  context2D[imageSmoothingEnabledName] = false;\n\n  // in order for measureText to calculate style, the canvas has to be\n  // (temporarily) added to the DOM.\n  canvas.style.visibility = \"hidden\";\n  document.body.appendChild(canvas);\n\n  const dimensions = measureText(context2D, text);\n\n  // Set canvas.dimensions to be accessed in LabelCollection. LabelCollection\n  // hard-codes strokeWidth=0, so dimensions should not include stroke padding.\n  canvas.dimensions = dimensions;\n\n  document.body.removeChild(canvas);\n  canvas.style.visibility = \"\";\n\n  // measureText does not account for stroke width, added here. LabelCollection\n  // calls writeTextToCanvas with hard-coded strokeWidth=0, so stroke padding\n  // matters only when calling `writeTextToCanvas` directly.\n  const isSpace = !/\\S/.test(text);\n  const strokePadding = stroke && !isSpace ? Math.ceil(strokeWidth / 2) : 0;\n  const doubleStrokePadding = strokePadding * 2;\n\n  // Some characters, such as the letter j, have a non-zero starting position.\n  // This value is used for kerning later, but we need to take it into account\n  // now in order to draw the text completely on the canvas\n  const x = -dimensions.minx + strokePadding;\n\n  // Expand the width to include the starting position.\n  const width = Math.ceil(dimensions.width) + x + doublePadding + strokePadding;\n\n  // While the height of the letter is correct, we need to adjust\n  // where we start drawing it so that letters like j and y properly dip\n  // below the line.\n\n  const height = dimensions.height + doublePadding + doubleStrokePadding;\n  const y = dimensions.ascent + padding + strokePadding;\n\n  canvas.width = width;\n  canvas.height = height;\n\n  // Properties must be explicitly set again after changing width and height\n  context2D.font = font;\n  context2D.lineJoin = \"round\";\n  context2D.lineWidth = strokeWidth;\n  context2D[imageSmoothingEnabledName] = false;\n\n  // Draw background\n  if (backgroundColor !== Color.TRANSPARENT) {\n    context2D.fillStyle = backgroundColor.toCssColorString();\n    context2D.fillRect(0, 0, canvas.width, canvas.height);\n  }\n\n  if (stroke) {\n    const strokeColor = options.strokeColor ?? Color.BLACK;\n    context2D.strokeStyle = strokeColor.toCssColorString();\n    context2D.strokeText(text, x + padding, y);\n  }\n\n  if (fill) {\n    const fillColor = options.fillColor ?? Color.WHITE;\n    context2D.fillStyle = fillColor.toCssColorString();\n    context2D.fillText(text, x + padding, y);\n  }\n\n  return canvas;\n}\nexport default writeTextToCanvas;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} BillboardGraphics.ConstructorOptions\n *\n * Initialization options for the BillboardGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the billboard.\n * @property {Property | string | HTMLImageElement | HTMLCanvasElement} [image] A Property specifying the Image, URI, or Canvas to use for the billboard.\n * @property {Property | number} [scale=1.0] A numeric Property specifying the scale to apply to the image size.\n * @property {Property | Cartesian2} [pixelOffset=Cartesian2.ZERO] A {@link Cartesian2} Property specifying the pixel offset.\n * @property {Property | Cartesian3} [eyeOffset=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the eye offset.\n * @property {Property | HorizontalOrigin} [horizontalOrigin=HorizontalOrigin.CENTER] A Property specifying the {@link HorizontalOrigin}.\n * @property {Property | VerticalOrigin} [verticalOrigin=VerticalOrigin.CENTER] A Property specifying the {@link VerticalOrigin}.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [color=Color.WHITE] A Property specifying the tint {@link Color} of the image.\n * @property {Property | number} [rotation=0] A numeric Property specifying the rotation about the alignedAxis.\n * @property {Property | Cartesian3} [alignedAxis=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the unit vector axis of rotation.\n * @property {Property | boolean} [sizeInMeters] A boolean Property specifying whether this billboard's size should be measured in meters.\n * @property {Property | number} [width] A numeric Property specifying the width of the billboard in pixels, overriding the native size.\n * @property {Property | number} [height] A numeric Property specifying the height of the billboard in pixels, overriding the native size.\n * @property {Property | NearFarScalar} [scaleByDistance] A {@link NearFarScalar} Property used to scale the point based on distance from the camera.\n * @property {Property | NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} Property used to set translucency based on distance from the camera.\n * @property {Property | NearFarScalar} [pixelOffsetScaleByDistance] A {@link NearFarScalar} Property used to set pixelOffset based on distance from the camera.\n * @property {Property | BoundingRectangle} [imageSubRegion] A Property specifying a {@link BoundingRectangle} that defines a sub-region of the image to use for the billboard, rather than the entire image, measured in pixels from the bottom-left.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this billboard will be displayed.\n * @property {Property | number} [disableDepthTestDistance] A Property specifying the distance from the camera at which to disable the depth test to.\n * @property {Property | SplitDirection} [splitDirection] A Property specifying the {@link SplitDirection} of the billboard.\n */\n\n/**\n * Describes a two dimensional icon located at the position of the containing {@link Entity}.\n * <p>\n * <div align='center'>\n * <img src='Images/Billboard.png' width='400' height='300' /><br />\n * Example billboards\n * </div>\n * </p>\n *\n * @alias BillboardGraphics\n * @constructor\n *\n * @param {BillboardGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=billboards|Cesium Sandcastle Billboard Demo}\n */\nfunction BillboardGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._image = undefined;\n  this._imageSubscription = undefined;\n  this._scale = undefined;\n  this._scaleSubscription = undefined;\n  this._pixelOffset = undefined;\n  this._pixelOffsetSubscription = undefined;\n  this._eyeOffset = undefined;\n  this._eyeOffsetSubscription = undefined;\n  this._horizontalOrigin = undefined;\n  this._horizontalOriginSubscription = undefined;\n  this._verticalOrigin = undefined;\n  this._verticalOriginSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._rotation = undefined;\n  this._rotationSubscription = undefined;\n  this._alignedAxis = undefined;\n  this._alignedAxisSubscription = undefined;\n  this._sizeInMeters = undefined;\n  this._sizeInMetersSubscription = undefined;\n  this._width = undefined;\n  this._widthSubscription = undefined;\n  this._height = undefined;\n  this._heightSubscription = undefined;\n  this._scaleByDistance = undefined;\n  this._scaleByDistanceSubscription = undefined;\n  this._translucencyByDistance = undefined;\n  this._translucencyByDistanceSubscription = undefined;\n  this._pixelOffsetScaleByDistance = undefined;\n  this._pixelOffsetScaleByDistanceSubscription = undefined;\n  this._imageSubRegion = undefined;\n  this._imageSubRegionSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._disableDepthTestDistance = undefined;\n  this._disableDepthTestDistanceSubscription = undefined;\n  this._splitDirection = undefined;\n  this._splitDirectionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(BillboardGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof BillboardGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the billboard.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the Property specifying the Image, URI, or Canvas to use for the billboard.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  image: createPropertyDescriptor(\"image\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the uniform scale to apply to the image.\n   * A scale greater than <code>1.0</code> enlarges the billboard while a scale less than <code>1.0</code> shrinks it.\n   * <p>\n   * <div align='center'>\n   * <img src='Images/Billboard.setScale.png' width='400' height='300' /><br/>\n   * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>, and <code>2.0</code>.\n   * </div>\n   * </p>\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  scale: createPropertyDescriptor(\"scale\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the billboard's pixel offset in screen space\n   * from the origin of this billboard.  This is commonly used to align multiple billboards and labels at\n   * the same position, e.g., an image and text.  The screen space origin is the top, left corner of the\n   * canvas; <code>x</code> increases from left to right, and <code>y</code> increases from top to bottom.\n   * <p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>default</code><br/><img src='Images/Billboard.setPixelOffset.default.png' width='250' height='188' /></td>\n   * <td align='center'><code>b.pixeloffset = new Cartesian2(50, 25);</code><br/><img src='Images/Billboard.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n   * </tr></table>\n   * The billboard's origin is indicated by the yellow point.\n   * </div>\n   * </p>\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default Cartesian2.ZERO\n   */\n  pixelOffset: createPropertyDescriptor(\"pixelOffset\"),\n\n  /**\n   * Gets or sets the {@link Cartesian3} Property specifying the billboard's offset in eye coordinates.\n   * Eye coordinates is a left-handed coordinate system, where <code>x</code> points towards the viewer's\n   * right, <code>y</code> points up, and <code>z</code> points into the screen.\n   * <p>\n   * An eye offset is commonly used to arrange multiple billboards or objects at the same position, e.g., to\n   * arrange a billboard above its corresponding 3D model.\n   * </p>\n   * Below, the billboard is positioned at the center of the Earth but an eye offset makes it always\n   * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n   * <p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n   * </tr></table>\n   * <code>b.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code>\n   * </div>\n   * </p>\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default Cartesian3.ZERO\n   */\n  eyeOffset: createPropertyDescriptor(\"eyeOffset\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HorizontalOrigin}.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default HorizontalOrigin.CENTER\n   */\n  horizontalOrigin: createPropertyDescriptor(\"horizontalOrigin\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link VerticalOrigin}.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default VerticalOrigin.CENTER\n   */\n  verticalOrigin: createPropertyDescriptor(\"verticalOrigin\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} that is multiplied with the <code>image</code>.\n   * This has two common use cases.  First, the same white texture may be used by many different billboards,\n   * each with a different color, to create colored billboards. Second, the color's alpha component can be\n   * used to make the billboard translucent as shown below. An alpha of <code>0.0</code> makes the billboard\n   * transparent, and <code>1.0</code> makes the billboard opaque.\n   * <p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>default</code><br/><img src='Images/Billboard.setColor.Alpha255.png' width='250' height='188' /></td>\n   * <td align='center'><code>alpha : 0.5</code><br/><img src='Images/Billboard.setColor.Alpha127.png' width='250' height='188' /></td>\n   * </tr></table>\n   * </div>\n   * </p>\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the rotation of the image\n   * counter clockwise from the <code>alignedAxis</code>.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0\n   */\n  rotation: createPropertyDescriptor(\"rotation\"),\n\n  /**\n   * Gets or sets the {@link Cartesian3} Property specifying the unit vector axis of rotation\n   * in the fixed frame. When set to Cartesian3.ZERO the rotation is from the top of the screen.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default Cartesian3.ZERO\n   */\n  alignedAxis: createPropertyDescriptor(\"alignedAxis\"),\n\n  /**\n   * Gets or sets the boolean Property specifying if this billboard's size will be measured in meters.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  sizeInMeters: createPropertyDescriptor(\"sizeInMeters\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the billboard in pixels.\n   * When undefined, the native width is used.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  width: createPropertyDescriptor(\"width\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the height of the billboard in pixels.\n   * When undefined, the native height is used.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  height: createPropertyDescriptor(\"height\"),\n\n  /**\n   * Gets or sets {@link NearFarScalar} Property specifying the scale of the billboard based on the distance from the camera.\n   * A billboard's scale will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the billboard's scale remains clamped to the nearest bound.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  scaleByDistance: createPropertyDescriptor(\"scaleByDistance\"),\n\n  /**\n   * Gets or sets {@link NearFarScalar} Property specifying the translucency of the billboard based on the distance from the camera.\n   * A billboard's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the billboard's translucency remains clamped to the nearest bound.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  translucencyByDistance: createPropertyDescriptor(\"translucencyByDistance\"),\n\n  /**\n   * Gets or sets {@link NearFarScalar} Property specifying the pixel offset of the billboard based on the distance from the camera.\n   * A billboard's pixel offset will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the billboard's pixel offset remains clamped to the nearest bound.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  pixelOffsetScaleByDistance: createPropertyDescriptor(\n    \"pixelOffsetScaleByDistance\",\n  ),\n\n  /**\n   * Gets or sets the Property specifying a {@link BoundingRectangle} that defines a\n   * sub-region of the <code>image</code> to use for the billboard, rather than the entire image,\n   * measured in pixels from the bottom-left.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  imageSubRegion: createPropertyDescriptor(\"imageSubRegion\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this billboard will be displayed.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n   * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   */\n  disableDepthTestDistance: createPropertyDescriptor(\n    \"disableDepthTestDistance\",\n  ),\n\n  /**\n   * Gets or sets the Property specifying the {@link SplitDirection} of this billboard.\n   * @memberof BillboardGraphics.prototype\n   * @type {Property|undefined}\n   * @default SplitDirection.NONE\n   */\n  splitDirection: createPropertyDescriptor(\"splitDirection\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {BillboardGraphics} [result] The object onto which to store the result.\n * @returns {BillboardGraphics} The modified result parameter or a new instance if one was not provided.\n */\nBillboardGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new BillboardGraphics(this);\n  }\n  result.show = this._show;\n  result.image = this._image;\n  result.scale = this._scale;\n  result.pixelOffset = this._pixelOffset;\n  result.eyeOffset = this._eyeOffset;\n  result.horizontalOrigin = this._horizontalOrigin;\n  result.verticalOrigin = this._verticalOrigin;\n  result.heightReference = this._heightReference;\n  result.color = this._color;\n  result.rotation = this._rotation;\n  result.alignedAxis = this._alignedAxis;\n  result.sizeInMeters = this._sizeInMeters;\n  result.width = this._width;\n  result.height = this._height;\n  result.scaleByDistance = this._scaleByDistance;\n  result.translucencyByDistance = this._translucencyByDistance;\n  result.pixelOffsetScaleByDistance = this._pixelOffsetScaleByDistance;\n  result.imageSubRegion = this._imageSubRegion;\n  result.distanceDisplayCondition = this._distanceDisplayCondition;\n  result.disableDepthTestDistance = this._disableDepthTestDistance;\n  result.splitDirection = this._splitDirection;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {BillboardGraphics} source The object to be merged into this object.\n */\nBillboardGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this._show ?? source.show;\n  this.image = this._image ?? source.image;\n  this.scale = this._scale ?? source.scale;\n  this.pixelOffset = this._pixelOffset ?? source.pixelOffset;\n  this.eyeOffset = this._eyeOffset ?? source.eyeOffset;\n  this.horizontalOrigin = this._horizontalOrigin ?? source.horizontalOrigin;\n  this.verticalOrigin = this._verticalOrigin ?? source.verticalOrigin;\n  this.heightReference = this._heightReference ?? source.heightReference;\n  this.color = this._color ?? source.color;\n  this.rotation = this._rotation ?? source.rotation;\n  this.alignedAxis = this._alignedAxis ?? source.alignedAxis;\n  this.sizeInMeters = this._sizeInMeters ?? source.sizeInMeters;\n  this.width = this._width ?? source.width;\n  this.height = this._height ?? source.height;\n  this.scaleByDistance = this._scaleByDistance ?? source.scaleByDistance;\n  this.translucencyByDistance =\n    this._translucencyByDistance ?? source.translucencyByDistance;\n  this.pixelOffsetScaleByDistance =\n    this._pixelOffsetScaleByDistance ?? source.pixelOffsetScaleByDistance;\n  this.imageSubRegion = this._imageSubRegion ?? source.imageSubRegion;\n  this.distanceDisplayCondition =\n    this._distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.disableDepthTestDistance =\n    this._disableDepthTestDistance ?? source.disableDepthTestDistance;\n  this.splitDirection = this.splitDirection ?? source.splitDirection;\n};\nexport default BillboardGraphics;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\nimport SplitDirection from \"../Scene/SplitDirection.js\";\n\nconst defaultColor = Color.WHITE;\nconst defaultEyeOffset = Cartesian3.ZERO;\nconst defaultHeightReference = HeightReference.NONE;\nconst defaultPixelOffset = Cartesian2.ZERO;\nconst defaultScale = 1.0;\nconst defaultRotation = 0.0;\nconst defaultAlignedAxis = Cartesian3.ZERO;\nconst defaultHorizontalOrigin = HorizontalOrigin.CENTER;\nconst defaultVerticalOrigin = VerticalOrigin.CENTER;\nconst defaultSizeInMeters = false;\nconst defaultSplitDirection = SplitDirection.NONE;\n\nconst positionScratch = new Cartesian3();\nconst colorScratch = new Color();\nconst eyeOffsetScratch = new Cartesian3();\nconst pixelOffsetScratch = new Cartesian2();\nconst scaleByDistanceScratch = new NearFarScalar();\nconst translucencyByDistanceScratch = new NearFarScalar();\nconst pixelOffsetScaleByDistanceScratch = new NearFarScalar();\nconst boundingRectangleScratch = new BoundingRectangle();\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\n\nfunction EntityData(entity) {\n  this.entity = entity;\n  this.billboard = undefined;\n  this.textureValue = undefined;\n}\n\n/**\n * A {@link Visualizer} which maps {@link Entity#billboard} to a {@link Billboard}.\n * @alias BillboardVisualizer\n * @constructor\n *\n * @param {EntityCluster} entityCluster The entity cluster to manage the collection of billboards and optionally cluster with other entities.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction BillboardVisualizer(entityCluster, entityCollection) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entityCluster)) {\n    throw new DeveloperError(\"entityCluster is required.\");\n  }\n  if (!defined(entityCollection)) {\n    throw new DeveloperError(\"entityCollection is required.\");\n  }\n  //>>includeEnd('debug');\n\n  entityCollection.collectionChanged.addEventListener(\n    BillboardVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n\n  this._cluster = entityCluster;\n  this._entityCollection = entityCollection;\n  this._items = new AssociativeArray();\n  this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} This function always returns true.\n */\nBillboardVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const items = this._items.values;\n  const cluster = this._cluster;\n\n  for (let i = 0, len = items.length; i < len; i++) {\n    const item = items[i];\n    const entity = item.entity;\n    const billboardGraphics = entity._billboard;\n    let textureValue;\n    let billboard = item.billboard;\n    let show =\n      entity.isShowing &&\n      entity.isAvailable(time) &&\n      Property.getValueOrDefault(billboardGraphics._show, time, true);\n    let position;\n    if (show) {\n      position = Property.getValueOrUndefined(\n        entity._position,\n        time,\n        positionScratch,\n      );\n      textureValue = Property.getValueOrUndefined(\n        billboardGraphics._image,\n        time,\n      );\n      show = defined(position) && defined(textureValue);\n    }\n\n    if (!show) {\n      //don't bother creating or updating anything else\n      returnPrimitive(item, entity, cluster);\n      continue;\n    }\n\n    if (!Property.isConstant(entity._position)) {\n      cluster._clusterDirty = true;\n    }\n\n    if (!defined(billboard)) {\n      billboard = cluster.getBillboard(entity);\n      billboard.id = entity;\n      item.billboard = billboard;\n      item.textureValue = undefined;\n    }\n\n    billboard.show = show;\n    billboard.position = position;\n    billboard.color = Property.getValueOrDefault(\n      billboardGraphics._color,\n      time,\n      defaultColor,\n      colorScratch,\n    );\n    billboard.eyeOffset = Property.getValueOrDefault(\n      billboardGraphics._eyeOffset,\n      time,\n      defaultEyeOffset,\n      eyeOffsetScratch,\n    );\n    billboard.heightReference = Property.getValueOrDefault(\n      billboardGraphics._heightReference,\n      time,\n      defaultHeightReference,\n    );\n    billboard.pixelOffset = Property.getValueOrDefault(\n      billboardGraphics._pixelOffset,\n      time,\n      defaultPixelOffset,\n      pixelOffsetScratch,\n    );\n    billboard.scale = Property.getValueOrDefault(\n      billboardGraphics._scale,\n      time,\n      defaultScale,\n    );\n    billboard.rotation = Property.getValueOrDefault(\n      billboardGraphics._rotation,\n      time,\n      defaultRotation,\n    );\n    billboard.alignedAxis = Property.getValueOrDefault(\n      billboardGraphics._alignedAxis,\n      time,\n      defaultAlignedAxis,\n    );\n    billboard.horizontalOrigin = Property.getValueOrDefault(\n      billboardGraphics._horizontalOrigin,\n      time,\n      defaultHorizontalOrigin,\n    );\n    billboard.verticalOrigin = Property.getValueOrDefault(\n      billboardGraphics._verticalOrigin,\n      time,\n      defaultVerticalOrigin,\n    );\n    billboard.width = Property.getValueOrUndefined(\n      billboardGraphics._width,\n      time,\n    );\n    billboard.height = Property.getValueOrUndefined(\n      billboardGraphics._height,\n      time,\n    );\n    billboard.scaleByDistance = Property.getValueOrUndefined(\n      billboardGraphics._scaleByDistance,\n      time,\n      scaleByDistanceScratch,\n    );\n    billboard.translucencyByDistance = Property.getValueOrUndefined(\n      billboardGraphics._translucencyByDistance,\n      time,\n      translucencyByDistanceScratch,\n    );\n    billboard.pixelOffsetScaleByDistance = Property.getValueOrUndefined(\n      billboardGraphics._pixelOffsetScaleByDistance,\n      time,\n      pixelOffsetScaleByDistanceScratch,\n    );\n    billboard.sizeInMeters = Property.getValueOrDefault(\n      billboardGraphics._sizeInMeters,\n      time,\n      defaultSizeInMeters,\n    );\n    billboard.distanceDisplayCondition = Property.getValueOrUndefined(\n      billboardGraphics._distanceDisplayCondition,\n      time,\n      distanceDisplayConditionScratch,\n    );\n    billboard.disableDepthTestDistance = Property.getValueOrUndefined(\n      billboardGraphics._disableDepthTestDistance,\n      time,\n    );\n    billboard.splitDirection = Property.getValueOrDefault(\n      billboardGraphics._splitDirection,\n      time,\n      defaultSplitDirection,\n    );\n\n    // Apply .image last, so any necessary property values are available\n    // in Billboard#_computeImageTextureSize before adding to the atlas.\n    if (item.textureValue !== textureValue) {\n      billboard.image = textureValue;\n      item.textureValue = textureValue;\n    }\n\n    const subRegion = Property.getValueOrUndefined(\n      billboardGraphics._imageSubRegion,\n      time,\n      boundingRectangleScratch,\n    );\n    if (defined(subRegion)) {\n      billboard.setImageSubRegion(billboard.image, subRegion);\n    }\n  }\n  return true;\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nBillboardVisualizer.prototype.getBoundingSphere = function (entity, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const item = this._items.get(entity.id);\n  if (!defined(item) || !defined(item.billboard)) {\n    return BoundingSphereState.FAILED;\n  }\n\n  const billboard = item.billboard;\n  if (billboard.heightReference === HeightReference.NONE) {\n    result.center = Cartesian3.clone(billboard.position, result.center);\n  } else {\n    if (!defined(billboard._clampedPosition)) {\n      return BoundingSphereState.PENDING;\n    }\n    result.center = Cartesian3.clone(billboard._clampedPosition, result.center);\n  }\n  result.radius = 0;\n  return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nBillboardVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nBillboardVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    BillboardVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  const entities = this._entityCollection.values;\n  for (let i = 0; i < entities.length; i++) {\n    this._cluster.removeBillboard(entities[i]);\n  }\n  return destroyObject(this);\n};\n\nBillboardVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n  changed,\n) {\n  let i;\n  let entity;\n  const items = this._items;\n  const cluster = this._cluster;\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    if (defined(entity._billboard) && defined(entity._position)) {\n      items.set(entity.id, new EntityData(entity));\n    }\n  }\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    if (defined(entity._billboard) && defined(entity._position)) {\n      if (!items.contains(entity.id)) {\n        items.set(entity.id, new EntityData(entity));\n      }\n    } else {\n      returnPrimitive(items.get(entity.id), entity, cluster);\n      items.remove(entity.id);\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    returnPrimitive(items.get(entity.id), entity, cluster);\n    items.remove(entity.id);\n  }\n};\n\nfunction returnPrimitive(item, entity, cluster) {\n  if (defined(item)) {\n    item.billboard = undefined;\n    cluster.removeBillboard(entity);\n  }\n}\nexport default BillboardVisualizer;\n","/**\n * The state of a BoundingSphere computation being performed by a {@link Visualizer}.\n * @enum {number}\n * @private\n */\nconst BoundingSphereState = Object.freeze({\n  /**\n   * The BoundingSphere has been computed.\n   * @type BoundingSphereState\n   * @constant\n   */\n  DONE: 0,\n  /**\n   * The BoundingSphere is still being computed.\n   * @type BoundingSphereState\n   * @constant\n   */\n  PENDING: 1,\n  /**\n   * The BoundingSphere does not exist.\n   * @type BoundingSphereState\n   * @constant\n   */\n  FAILED: 2,\n});\nexport default BoundingSphereState;\n","import BoxGeometry from \"../Core/BoxGeometry.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport heightReferenceOnEntityPropertyChanged from \"./heightReferenceOnEntityPropertyChanged.js\";\nimport Property from \"./Property.js\";\n\nconst defaultOffset = Cartesian3.ZERO;\n\nconst offsetScratch = new Cartesian3();\nconst positionScratch = new Cartesian3();\nconst scratchColor = new Color();\n\nfunction BoxGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.dimensions = undefined;\n  this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for boxes.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias BoxGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction BoxGeometryUpdater(entity, scene) {\n  GeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new BoxGeometryOptions(entity),\n    geometryPropertyName: \"box\",\n    observedPropertyNames: [\"availability\", \"position\", \"orientation\", \"box\"],\n  });\n\n  this._onEntityPropertyChanged(entity, \"box\", entity.box, undefined);\n}\n\nif (defined(Object.create)) {\n  BoxGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n  BoxGeometryUpdater.prototype.constructor = BoxGeometryUpdater;\n}\n\nObject.defineProperties(BoxGeometryUpdater.prototype, {\n  /**\n   * Gets the terrain offset property\n   * @type {TerrainOffsetProperty}\n   * @memberof BoxGeometryUpdater.prototype\n   * @readonly\n   * @private\n   */\n  terrainOffsetProperty: {\n    get: function () {\n      return this._terrainOffsetProperty;\n    },\n  },\n});\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nBoxGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  const show = new ShowGeometryInstanceAttribute(\n    isAvailable &&\n      entity.isShowing &&\n      this._showProperty.getValue(time) &&\n      this._fillProperty.getValue(time),\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n  const distanceDisplayConditionAttribute =\n    DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n      distanceDisplayCondition,\n    );\n\n  const attributes = {\n    show: show,\n    distanceDisplayCondition: distanceDisplayConditionAttribute,\n    color: undefined,\n    offset: undefined,\n  };\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: BoxGeometry.fromDimensions(this._options),\n    modelMatrix: entity.computeModelMatrixForHeightReference(\n      time,\n      entity.box.heightReference,\n      this._options.dimensions.z * 0.5,\n      this._scene.ellipsoid,\n    ),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nBoxGeometryUpdater.prototype.createOutlineGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._showOutlineProperty.getValue(time),\n    ),\n    color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        distanceDisplayCondition,\n      ),\n    offset: undefined,\n  };\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: BoxOutlineGeometry.fromDimensions(this._options),\n    modelMatrix: entity.computeModelMatrixForHeightReference(\n      time,\n      entity.box.heightReference,\n      this._options.dimensions.z * 0.5,\n      this._scene.ellipsoid,\n    ),\n    attributes: attributes,\n  });\n};\n\nBoxGeometryUpdater.prototype._computeCenter = function (time, result) {\n  return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nBoxGeometryUpdater.prototype._isHidden = function (entity, box) {\n  return (\n    !defined(box.dimensions) ||\n    !defined(entity.position) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, box)\n  );\n};\n\nBoxGeometryUpdater.prototype._isDynamic = function (entity, box) {\n  return (\n    !entity.position.isConstant ||\n    !Property.isConstant(entity.orientation) ||\n    !box.dimensions.isConstant ||\n    !Property.isConstant(box.outlineWidth)\n  );\n};\n\nBoxGeometryUpdater.prototype._setStaticOptions = function (entity, box) {\n  const heightReference = Property.getValueOrDefault(\n    box.heightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n\n  const options = this._options;\n  options.vertexFormat =\n    this._materialProperty instanceof ColorMaterialProperty\n      ? PerInstanceColorAppearance.VERTEX_FORMAT\n      : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.dimensions = box.dimensions.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.dimensions,\n  );\n  options.offsetAttribute =\n    heightReference !== HeightReference.NONE\n      ? GeometryOffsetAttribute.ALL\n      : undefined;\n};\n\nBoxGeometryUpdater.prototype._onEntityPropertyChanged =\n  heightReferenceOnEntityPropertyChanged;\n\nBoxGeometryUpdater.DynamicGeometryUpdater = DynamicBoxGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicBoxGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicBoxGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicBoxGeometryUpdater.prototype.constructor = DynamicBoxGeometryUpdater;\n}\n\nDynamicBoxGeometryUpdater.prototype._isHidden = function (entity, box, time) {\n  const position = Property.getValueOrUndefined(\n    entity.position,\n    time,\n    positionScratch,\n  );\n  const dimensions = this._options.dimensions;\n  return (\n    !defined(position) ||\n    !defined(dimensions) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(this, entity, box, time)\n  );\n};\n\nDynamicBoxGeometryUpdater.prototype._setOptions = function (entity, box, time) {\n  const heightReference = Property.getValueOrDefault(\n    box.heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  const options = this._options;\n  options.dimensions = Property.getValueOrUndefined(\n    box.dimensions,\n    time,\n    options.dimensions,\n  );\n  options.offsetAttribute =\n    heightReference !== HeightReference.NONE\n      ? GeometryOffsetAttribute.ALL\n      : undefined;\n};\nexport default BoxGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} BoxGraphics.ConstructorOptions\n *\n * Initialization options for the BoxGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the box.\n * @property {Property | Cartesian3} [dimensions] A {@link Cartesian3} Property specifying the length, width, and height of the box.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height from the entity position is relative to.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the box is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the box.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the box is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the box casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this box will be displayed.\n *\n */\n\n/**\n * Describes a box. The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias BoxGraphics\n * @constructor\n *\n * @param {BoxGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=box|Cesium Sandcastle Box Demo}\n */\nfunction BoxGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._dimensions = undefined;\n  this._dimensionsSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(BoxGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof BoxGraphics.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the box.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets {@link Cartesian3} Property property specifying the length, width, and height of the box.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   */\n  dimensions: createPropertyDescriptor(\"dimensions\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the box is filled with the provided material.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the material used to fill the box.\n   * @memberof BoxGraphics.prototype\n   * @type {MaterialProperty|undefined}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the box is outlined.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the box\n   * casts or receives shadows from light sources.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this box will be displayed.\n   * @memberof BoxGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {BoxGraphics} [result] The object onto which to store the result.\n * @returns {BoxGraphics} The modified result parameter or a new instance if one was not provided.\n */\nBoxGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new BoxGraphics(this);\n  }\n  result.show = this.show;\n  result.dimensions = this.dimensions;\n  result.heightReference = this.heightReference;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {BoxGraphics} source The object to be merged into this object.\n */\nBoxGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.dimensions = this.dimensions ?? source.dimensions;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n};\nexport default BoxGraphics;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport PositionProperty from \"./PositionProperty.js\";\n\n/**\n * A {@link PositionProperty} whose value is lazily evaluated by a callback function.\n *\n * @alias CallbackPositionProperty\n * @constructor\n *\n * @param {CallbackPositionProperty.Callback} callback The function to be called when the position property is evaluated.\n * @param {boolean} isConstant <code>true</code> when the callback function returns the same value every time, <code>false</code> if the value will change.\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=callback-position-property|Cesium Sandcastle Callback Position Property Demo}\n */\nfunction CallbackPositionProperty(callback, isConstant, referenceFrame) {\n  this._callback = undefined;\n  this._isConstant = undefined;\n  this._referenceFrame = referenceFrame ?? ReferenceFrame.FIXED;\n  this._definitionChanged = new Event();\n  this.setCallback(callback, isConstant);\n}\n\nObject.defineProperties(CallbackPositionProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.\n   * @memberof CallbackPositionProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._isConstant;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof CallbackPositionProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the reference frame in which the position is defined.\n   * @memberof CallbackPositionProperty.prototype\n   * @type {ReferenceFrame}\n   * @default ReferenceFrame.FIXED;\n   */\n  referenceFrame: {\n    get: function () {\n      return this._referenceFrame;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCallbackPositionProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Sets the callback to be used.\n *\n * @param {CallbackPositionProperty.Callback} callback The function to be called when the property is evaluated.\n * @param {boolean} isConstant <code>true</code> when the callback function returns the same value every time, <code>false</code> if the value will change.\n */\nCallbackPositionProperty.prototype.setCallback = function (\n  callback,\n  isConstant,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(callback)) {\n    throw new DeveloperError(\"callback is required.\");\n  }\n  if (!defined(isConstant)) {\n    throw new DeveloperError(\"isConstant is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const changed =\n    this._callback !== callback || this._isConstant !== isConstant;\n\n  this._callback = callback;\n  this._isConstant = isConstant;\n\n  if (changed) {\n    this._definitionChanged.raiseEvent(this);\n  }\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCallbackPositionProperty.prototype.getValueInReferenceFrame = function (\n  time,\n  referenceFrame,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  if (!defined(referenceFrame)) {\n    throw new DeveloperError(\"referenceFrame is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const value = this._callback(time, result);\n\n  return PositionProperty.convertToReferenceFrame(\n    time,\n    value,\n    this._referenceFrame,\n    referenceFrame,\n    result,\n  );\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCallbackPositionProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof CallbackPositionProperty &&\n      this._callback === other._callback &&\n      this._isConstant === other._isConstant &&\n      this._referenceFrame === other._referenceFrame)\n  );\n};\n\n/**\n * A function that returns the value of the position property.\n * @callback CallbackPositionProperty.Callback\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Cartesian3} [result] The object to store the value into. If omitted, the function must create and return a new instance.\n * @returns {Cartesian3 | undefined} The modified result parameter, or a new instance if the result parameter was not supplied or is unsupported.\n */\nexport default CallbackPositionProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\n\n/**\n * A {@link Property} whose value is lazily evaluated by a callback function.\n *\n * @alias CallbackProperty\n * @constructor\n *\n * @param {CallbackProperty.Callback} callback The function to be called when the property is evaluated.\n * @param {boolean} isConstant <code>true</code> when the callback function returns the same value every time, <code>false</code> if the value will change.\n */\nfunction CallbackProperty(callback, isConstant) {\n  this._callback = undefined;\n  this._isConstant = undefined;\n  this._definitionChanged = new Event();\n  this.setCallback(callback, isConstant);\n}\n\nObject.defineProperties(CallbackProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.\n   * @memberof CallbackProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._isConstant;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setCallback is called.\n   * @memberof CallbackProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied or is unsupported.\n */\nCallbackProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this._callback(time, result);\n};\n\n/**\n * Sets the callback to be used.\n *\n * @param {CallbackProperty.Callback} callback The function to be called when the property is evaluated.\n * @param {boolean} isConstant <code>true</code> when the callback function returns the same value every time, <code>false</code> if the value will change.\n */\nCallbackProperty.prototype.setCallback = function (callback, isConstant) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(callback)) {\n    throw new DeveloperError(\"callback is required.\");\n  }\n  if (!defined(isConstant)) {\n    throw new DeveloperError(\"isConstant is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const changed =\n    this._callback !== callback || this._isConstant !== isConstant;\n\n  this._callback = callback;\n  this._isConstant = isConstant;\n\n  if (changed) {\n    this._definitionChanged.raiseEvent(this);\n  }\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCallbackProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof CallbackProperty &&\n      this._callback === other._callback &&\n      this._isConstant === other._isConstant)\n  );\n};\n\n/**\n * A function that returns the value of the property.\n * @callback CallbackProperty.Callback\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into. If omitted, the function must create and return a new instance.\n * @returns {object} The modified result parameter, or a new instance if the result parameter was not supplied or is unsupported.\n */\nexport default CallbackProperty;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} Cesium3DTilesetGraphics.ConstructorOptions\n *\n * Initialization options for the Cesium3DTilesetGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the tileset.\n * @property {Property | string | Resource} [uri] A string or Resource Property specifying the URI of the tileset.\n * @property {Property | number} [maximumScreenSpaceError] A number or Property specifying the maximum screen space error used to drive level of detail refinement.\n */\n\n/**\n * A 3D Tiles tileset represented by an {@link Entity}.\n * The tileset modelMatrix is determined by the containing Entity position and orientation\n * or is left unset if position is undefined.\n *\n * @alias Cesium3DTilesetGraphics\n * @constructor\n *\n * @param {Cesium3DTilesetGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction Cesium3DTilesetGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._uri = undefined;\n  this._uriSubscription = undefined;\n  this._maximumScreenSpaceError = undefined;\n  this._maximumScreenSpaceErrorSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(Cesium3DTilesetGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof Cesium3DTilesetGraphics.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the model.\n   * @memberof Cesium3DTilesetGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the string Property specifying the URI of the glTF asset.\n   * @memberof Cesium3DTilesetGraphics.prototype\n   * @type {Property|undefined}\n   */\n  uri: createPropertyDescriptor(\"uri\"),\n\n  /**\n   * Gets or sets the maximum screen space error used to drive level of detail refinement.\n   * @memberof Cesium3DTilesetGraphics.prototype\n   * @type {Property|undefined}\n   */\n  maximumScreenSpaceError: createPropertyDescriptor(\"maximumScreenSpaceError\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {Cesium3DTilesetGraphics} [result] The object onto which to store the result.\n * @returns {Cesium3DTilesetGraphics} The modified result parameter or a new instance if one was not provided.\n */\nCesium3DTilesetGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new Cesium3DTilesetGraphics(this);\n  }\n  result.show = this.show;\n  result.uri = this.uri;\n  result.maximumScreenSpaceError = this.maximumScreenSpaceError;\n\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {Cesium3DTilesetGraphics} source The object to be merged into this object.\n */\nCesium3DTilesetGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.uri = this.uri ?? source.uri;\n  this.maximumScreenSpaceError =\n    this.maximumScreenSpaceError ?? source.maximumScreenSpaceError;\n};\n\nexport default Cesium3DTilesetGraphics;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport Cesium3DTileset from \"../Scene/Cesium3DTileset.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nconst modelMatrixScratch = new Matrix4();\n\n/**\n * A {@link Visualizer} which maps {@link Entity#tileset} to a {@link Cesium3DTileset}.\n * @alias Cesium3DTilesetVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction Cesium3DTilesetVisualizer(scene, entityCollection) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  if (!defined(entityCollection)) {\n    throw new DeveloperError(\"entityCollection is required.\");\n  }\n  //>>includeEnd('debug');\n\n  entityCollection.collectionChanged.addEventListener(\n    Cesium3DTilesetVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n\n  this._scene = scene;\n  this._primitives = scene.primitives;\n  this._entityCollection = entityCollection;\n  this._tilesetHash = {};\n  this._entitiesToVisualize = new AssociativeArray();\n  this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates models created this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} This function always returns true.\n */\nCesium3DTilesetVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const entities = this._entitiesToVisualize.values;\n  const tilesetHash = this._tilesetHash;\n  const primitives = this._primitives;\n\n  for (let i = 0, len = entities.length; i < len; i++) {\n    const entity = entities[i];\n    const tilesetGraphics = entity._tileset;\n\n    let resource;\n    const tilesetData = tilesetHash[entity.id];\n    const show =\n      entity.isShowing &&\n      entity.isAvailable(time) &&\n      Property.getValueOrDefault(tilesetGraphics._show, time, true);\n\n    let modelMatrix;\n    if (show) {\n      modelMatrix = entity.computeModelMatrix(time, modelMatrixScratch);\n      resource = Resource.createIfNeeded(\n        Property.getValueOrUndefined(tilesetGraphics._uri, time),\n      );\n    }\n\n    const tileset = defined(tilesetData)\n      ? tilesetData.tilesetPrimitive\n      : undefined;\n\n    if (!show) {\n      if (defined(tileset)) {\n        tileset.show = false;\n      }\n      continue;\n    }\n\n    if (!defined(tilesetData) || resource.url !== tilesetData.url) {\n      if (defined(tileset)) {\n        primitives.removeAndDestroy(tileset);\n      }\n\n      delete tilesetHash[entity.id];\n\n      createTileset(resource, tilesetHash, entity, primitives);\n    }\n\n    if (!defined(tileset)) {\n      continue;\n    }\n\n    tileset.show = true;\n    if (defined(modelMatrix)) {\n      tileset.modelMatrix = modelMatrix;\n    }\n    tileset.maximumScreenSpaceError = Property.getValueOrDefault(\n      tilesetGraphics.maximumScreenSpaceError,\n      time,\n      tileset.maximumScreenSpaceError,\n    );\n  }\n\n  return true;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nCesium3DTilesetVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nCesium3DTilesetVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    Cesium3DTilesetVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  const entities = this._entitiesToVisualize.values;\n  const tilesetHash = this._tilesetHash;\n  const primitives = this._primitives;\n  for (let i = entities.length - 1; i > -1; i--) {\n    removeTileset(this, entities[i], tilesetHash, primitives);\n  }\n  return destroyObject(this);\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nCesium3DTilesetVisualizer.prototype.getBoundingSphere = function (\n  entity,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const tilesetData = this._tilesetHash[entity.id];\n  if (!defined(tilesetData) || tilesetData.loadFail) {\n    return BoundingSphereState.FAILED;\n  }\n\n  const primitive = tilesetData.tilesetPrimitive;\n  if (!defined(primitive)) {\n    return BoundingSphereState.PENDING;\n  }\n\n  if (!primitive.show) {\n    return BoundingSphereState.FAILED;\n  }\n\n  BoundingSphere.clone(primitive.boundingSphere, result);\n\n  return BoundingSphereState.DONE;\n};\n\n/**\n * @private\n */\nCesium3DTilesetVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n  changed,\n) {\n  let i;\n  let entity;\n  const entities = this._entitiesToVisualize;\n  const tilesetHash = this._tilesetHash;\n  const primitives = this._primitives;\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    if (defined(entity._tileset)) {\n      entities.set(entity.id, entity);\n    }\n  }\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    if (defined(entity._tileset)) {\n      entities.set(entity.id, entity);\n    } else {\n      removeTileset(this, entity, tilesetHash, primitives);\n      entities.remove(entity.id);\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    removeTileset(this, entity, tilesetHash, primitives);\n    entities.remove(entity.id);\n  }\n};\n\nfunction removeTileset(visualizer, entity, tilesetHash, primitives) {\n  const tilesetData = tilesetHash[entity.id];\n  if (defined(tilesetData)) {\n    if (defined(tilesetData.tilesetPrimitive)) {\n      primitives.removeAndDestroy(tilesetData.tilesetPrimitive);\n    }\n    delete tilesetHash[entity.id];\n  }\n}\n\nasync function createTileset(resource, tilesetHash, entity, primitives) {\n  tilesetHash[entity.id] = {\n    url: resource.url,\n    loadFail: false,\n  };\n\n  try {\n    const tileset = await Cesium3DTileset.fromUrl(resource);\n    tileset.id = entity;\n    primitives.add(tileset);\n\n    if (!defined(tilesetHash[entity.id])) {\n      return;\n    }\n\n    tilesetHash[entity.id].tilesetPrimitive = tileset;\n  } catch (error) {\n    console.error(error);\n    tilesetHash[entity.id].loadFail = true;\n  }\n}\n\nexport default Cesium3DTilesetVisualizer;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nconst defaultEvenColor = Color.WHITE;\nconst defaultOddColor = Color.BLACK;\nconst defaultRepeat = new Cartesian2(2.0, 2.0);\n\n/**\n * A {@link MaterialProperty} that maps to checkerboard {@link Material} uniforms.\n * @alias CheckerboardMaterialProperty\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|Color} [options.evenColor=Color.WHITE] A Property specifying the first {@link Color}.\n * @param {Property|Color} [options.oddColor=Color.BLACK] A Property specifying the second {@link Color}.\n * @param {Property|Cartesian2} [options.repeat=new Cartesian2(2.0, 2.0)] A {@link Cartesian2} Property specifying how many times the tiles repeat in each direction.\n */\nfunction CheckerboardMaterialProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._evenColor = undefined;\n  this._evenColorSubscription = undefined;\n  this._oddColor = undefined;\n  this._oddColorSubscription = undefined;\n  this._repeat = undefined;\n  this._repeatSubscription = undefined;\n\n  this.evenColor = options.evenColor;\n  this.oddColor = options.oddColor;\n  this.repeat = options.repeat;\n}\n\nObject.defineProperties(CheckerboardMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof CheckerboardMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._evenColor) && //\n        Property.isConstant(this._oddColor) && //\n        Property.isConstant(this._repeat)\n      );\n    },\n  },\n\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof CheckerboardMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the Property specifying the first {@link Color}.\n   * @memberof CheckerboardMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  evenColor: createPropertyDescriptor(\"evenColor\"),\n\n  /**\n   * Gets or sets the Property specifying the second {@link Color}.\n   * @memberof CheckerboardMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  oddColor: createPropertyDescriptor(\"oddColor\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying how many times the tiles repeat in each direction.\n   * @memberof CheckerboardMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default new Cartesian2(2.0, 2.0)\n   */\n  repeat: createPropertyDescriptor(\"repeat\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nCheckerboardMaterialProperty.prototype.getType = function (time) {\n  return \"Checkerboard\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCheckerboardMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.lightColor = Property.getValueOrClonedDefault(\n    this._evenColor,\n    time,\n    defaultEvenColor,\n    result.lightColor,\n  );\n  result.darkColor = Property.getValueOrClonedDefault(\n    this._oddColor,\n    time,\n    defaultOddColor,\n    result.darkColor,\n  );\n  result.repeat = Property.getValueOrDefault(this._repeat, time, defaultRepeat);\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCheckerboardMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof CheckerboardMaterialProperty && //\n      Property.equals(this._evenColor, other._evenColor) && //\n      Property.equals(this._oddColor, other._oddColor) && //\n      Property.equals(this._repeat, other._repeat))\n  );\n};\nexport default CheckerboardMaterialProperty;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link MaterialProperty} that maps to solid color {@link Material} uniforms.\n *\n * @param {Property|Color} [color=Color.WHITE] The {@link Color} Property to be used.\n *\n * @alias ColorMaterialProperty\n * @constructor\n */\nfunction ColorMaterialProperty(color) {\n  this._definitionChanged = new Event();\n  this._color = undefined;\n  this._colorSubscription = undefined;\n\n  this.color = color;\n}\n\nObject.defineProperties(ColorMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof ColorMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return Property.isConstant(this._color);\n    },\n  },\n\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof ColorMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the {@link Color} {@link Property}.\n   * @memberof ColorMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  color: createPropertyDescriptor(\"color\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nColorMaterialProperty.prototype.getType = function (time) {\n  return \"Color\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nColorMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.color = Property.getValueOrClonedDefault(\n    this._color,\n    time,\n    Color.WHITE,\n    result.color,\n  );\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nColorMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof ColorMaterialProperty && //\n      Property.equals(this._color, other._color))\n  );\n};\nexport default ColorMaterialProperty;\n","import createGuid from \"../Core/createGuid.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Entity from \"./Entity.js\";\nimport EntityCollection from \"./EntityCollection.js\";\n\nconst entityOptionsScratch = {\n  id: undefined,\n};\nconst entityIdScratch = new Array(2);\n\nfunction clean(entity) {\n  const propertyNames = entity.propertyNames;\n  const propertyNamesLength = propertyNames.length;\n  for (let i = 0; i < propertyNamesLength; i++) {\n    entity[propertyNames[i]] = undefined;\n  }\n  entity._name = undefined;\n  entity._availability = undefined;\n}\n\nfunction subscribeToEntity(that, eventHash, collectionId, entity) {\n  entityIdScratch[0] = collectionId;\n  entityIdScratch[1] = entity.id;\n  eventHash[JSON.stringify(entityIdScratch)] =\n    entity.definitionChanged.addEventListener(\n      CompositeEntityCollection.prototype._onDefinitionChanged,\n      that,\n    );\n}\n\nfunction unsubscribeFromEntity(that, eventHash, collectionId, entity) {\n  entityIdScratch[0] = collectionId;\n  entityIdScratch[1] = entity.id;\n  const id = JSON.stringify(entityIdScratch);\n  eventHash[id]();\n  eventHash[id] = undefined;\n}\n\nfunction recomposite(that) {\n  that._shouldRecomposite = true;\n  if (that._suspendCount !== 0) {\n    return;\n  }\n\n  const collections = that._collections;\n  const collectionsLength = collections.length;\n\n  const collectionsCopy = that._collectionsCopy;\n  const collectionsCopyLength = collectionsCopy.length;\n\n  let i;\n  let entity;\n  let entities;\n  let iEntities;\n  let collection;\n  const composite = that._composite;\n  const newEntities = new EntityCollection(that);\n  const eventHash = that._eventHash;\n  let collectionId;\n\n  for (i = 0; i < collectionsCopyLength; i++) {\n    collection = collectionsCopy[i];\n    collection.collectionChanged.removeEventListener(\n      CompositeEntityCollection.prototype._onCollectionChanged,\n      that,\n    );\n    entities = collection.values;\n    collectionId = collection.id;\n    for (iEntities = entities.length - 1; iEntities > -1; iEntities--) {\n      entity = entities[iEntities];\n      unsubscribeFromEntity(that, eventHash, collectionId, entity);\n    }\n  }\n\n  for (i = collectionsLength - 1; i >= 0; i--) {\n    collection = collections[i];\n    collection.collectionChanged.addEventListener(\n      CompositeEntityCollection.prototype._onCollectionChanged,\n      that,\n    );\n\n    //Merge all of the existing entities.\n    entities = collection.values;\n    collectionId = collection.id;\n    for (iEntities = entities.length - 1; iEntities > -1; iEntities--) {\n      entity = entities[iEntities];\n      subscribeToEntity(that, eventHash, collectionId, entity);\n\n      let compositeEntity = newEntities.getById(entity.id);\n      if (!defined(compositeEntity)) {\n        compositeEntity = composite.getById(entity.id);\n        if (!defined(compositeEntity)) {\n          entityOptionsScratch.id = entity.id;\n          compositeEntity = new Entity(entityOptionsScratch);\n        } else {\n          clean(compositeEntity);\n        }\n        newEntities.add(compositeEntity);\n      }\n      compositeEntity.merge(entity);\n    }\n  }\n  that._collectionsCopy = collections.slice(0);\n\n  composite.suspendEvents();\n  composite.removeAll();\n  const newEntitiesArray = newEntities.values;\n  for (i = 0; i < newEntitiesArray.length; i++) {\n    composite.add(newEntitiesArray[i]);\n  }\n  composite.resumeEvents();\n}\n\n/**\n * Non-destructively composites multiple {@link EntityCollection} instances into a single collection.\n * If a Entity with the same ID exists in multiple collections, it is non-destructively\n * merged into a single new entity instance.  If an entity has the same property in multiple\n * collections, the property of the Entity in the last collection of the list it\n * belongs to is used.  CompositeEntityCollection can be used almost anywhere that a\n * EntityCollection is used.\n *\n * @alias CompositeEntityCollection\n * @constructor\n *\n * @param {EntityCollection[]} [collections] The initial list of EntityCollection instances to merge.\n * @param {DataSource|CompositeEntityCollection} [owner] The data source (or composite entity collection) which created this collection.\n */\nfunction CompositeEntityCollection(collections, owner) {\n  this._owner = owner;\n  this._composite = new EntityCollection(this);\n  this._suspendCount = 0;\n  this._collections = defined(collections) ? collections.slice() : [];\n  this._collectionsCopy = [];\n  this._id = createGuid();\n  this._eventHash = {};\n  recomposite(this);\n  this._shouldRecomposite = false;\n}\n\nObject.defineProperties(CompositeEntityCollection.prototype, {\n  /**\n   * Gets the event that is fired when entities are added or removed from the collection.\n   * The generated event is a {@link EntityCollection.collectionChangedEventCallback}.\n   * @memberof CompositeEntityCollection.prototype\n   * @readonly\n   * @type {Event}\n   */\n  collectionChanged: {\n    get: function () {\n      return this._composite._collectionChanged;\n    },\n  },\n  /**\n   * Gets a globally unique identifier for this collection.\n   * @memberof CompositeEntityCollection.prototype\n   * @readonly\n   * @type {string}\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * Gets the array of Entity instances in the collection.\n   * This array should not be modified directly.\n   * @memberof CompositeEntityCollection.prototype\n   * @readonly\n   * @type {Entity[]}\n   */\n  values: {\n    get: function () {\n      return this._composite.values;\n    },\n  },\n  /**\n   * Gets the owner of this composite entity collection, ie. the data source or composite entity collection which created it.\n   * @memberof CompositeEntityCollection.prototype\n   * @readonly\n   * @type {DataSource|CompositeEntityCollection}\n   */\n  owner: {\n    get: function () {\n      return this._owner;\n    },\n  },\n});\n\n/**\n * Adds a collection to the composite.\n *\n * @param {EntityCollection} collection the collection to add.\n * @param {number} [index] the index to add the collection at.  If omitted, the collection will\n *                         added on top of all existing collections.\n *\n * @exception {DeveloperError} index, if supplied, must be greater than or equal to zero and less than or equal to the number of collections.\n */\nCompositeEntityCollection.prototype.addCollection = function (\n  collection,\n  index,\n) {\n  const hasIndex = defined(index);\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(collection)) {\n    throw new DeveloperError(\"collection is required.\");\n  }\n  if (hasIndex) {\n    if (index < 0) {\n      throw new DeveloperError(\"index must be greater than or equal to zero.\");\n    } else if (index > this._collections.length) {\n      throw new DeveloperError(\n        \"index must be less than or equal to the number of collections.\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  if (!hasIndex) {\n    index = this._collections.length;\n    this._collections.push(collection);\n  } else {\n    this._collections.splice(index, 0, collection);\n  }\n\n  recomposite(this);\n};\n\n/**\n * Removes a collection from this composite, if present.\n *\n * @param {EntityCollection} collection The collection to remove.\n * @returns {boolean} true if the collection was in the composite and was removed,\n *                    false if the collection was not in the composite.\n */\nCompositeEntityCollection.prototype.removeCollection = function (collection) {\n  const index = this._collections.indexOf(collection);\n  if (index !== -1) {\n    this._collections.splice(index, 1);\n    recomposite(this);\n    return true;\n  }\n  return false;\n};\n\n/**\n * Removes all collections from this composite.\n */\nCompositeEntityCollection.prototype.removeAllCollections = function () {\n  this._collections.length = 0;\n  recomposite(this);\n};\n\n/**\n * Checks to see if the composite contains a given collection.\n *\n * @param {EntityCollection} collection the collection to check for.\n * @returns {boolean} true if the composite contains the collection, false otherwise.\n */\nCompositeEntityCollection.prototype.containsCollection = function (collection) {\n  return this._collections.indexOf(collection) !== -1;\n};\n\n/**\n * Returns true if the provided entity is in this collection, false otherwise.\n *\n * @param {Entity} entity The entity.\n * @returns {boolean} true if the provided entity is in this collection, false otherwise.\n */\nCompositeEntityCollection.prototype.contains = function (entity) {\n  return this._composite.contains(entity);\n};\n\n/**\n * Determines the index of a given collection in the composite.\n *\n * @param {EntityCollection} collection The collection to find the index of.\n * @returns {number} The index of the collection in the composite, or -1 if the collection does not exist in the composite.\n */\nCompositeEntityCollection.prototype.indexOfCollection = function (collection) {\n  return this._collections.indexOf(collection);\n};\n\n/**\n * Gets a collection by index from the composite.\n *\n * @param {number} index the index to retrieve.\n */\nCompositeEntityCollection.prototype.getCollection = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\", \"index\");\n  }\n  //>>includeEnd('debug');\n\n  return this._collections[index];\n};\n\n/**\n * Gets the number of collections in this composite.\n */\nCompositeEntityCollection.prototype.getCollectionsLength = function () {\n  return this._collections.length;\n};\n\nfunction getCollectionIndex(collections, collection) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(collection)) {\n    throw new DeveloperError(\"collection is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const index = collections.indexOf(collection);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (index === -1) {\n    throw new DeveloperError(\"collection is not in this composite.\");\n  }\n  //>>includeEnd('debug');\n\n  return index;\n}\n\nfunction swapCollections(composite, i, j) {\n  const arr = composite._collections;\n  i = CesiumMath.clamp(i, 0, arr.length - 1);\n  j = CesiumMath.clamp(j, 0, arr.length - 1);\n\n  if (i === j) {\n    return;\n  }\n\n  const temp = arr[i];\n  arr[i] = arr[j];\n  arr[j] = temp;\n\n  recomposite(composite);\n}\n\n/**\n * Raises a collection up one position in the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.raiseCollection = function (collection) {\n  const index = getCollectionIndex(this._collections, collection);\n  swapCollections(this, index, index + 1);\n};\n\n/**\n * Lowers a collection down one position in the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.lowerCollection = function (collection) {\n  const index = getCollectionIndex(this._collections, collection);\n  swapCollections(this, index, index - 1);\n};\n\n/**\n * Raises a collection to the top of the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.raiseCollectionToTop = function (\n  collection,\n) {\n  const index = getCollectionIndex(this._collections, collection);\n  if (index === this._collections.length - 1) {\n    return;\n  }\n  this._collections.splice(index, 1);\n  this._collections.push(collection);\n\n  recomposite(this);\n};\n\n/**\n * Lowers a collection to the bottom of the composite.\n *\n * @param {EntityCollection} collection the collection to move.\n *\n * @exception {DeveloperError} collection is not in this composite.\n */\nCompositeEntityCollection.prototype.lowerCollectionToBottom = function (\n  collection,\n) {\n  const index = getCollectionIndex(this._collections, collection);\n  if (index === 0) {\n    return;\n  }\n  this._collections.splice(index, 1);\n  this._collections.splice(0, 0, collection);\n\n  recomposite(this);\n};\n\n/**\n * Prevents {@link EntityCollection#collectionChanged} events from being raised\n * until a corresponding call is made to {@link EntityCollection#resumeEvents}, at which\n * point a single event will be raised that covers all suspended operations.\n * This allows for many items to be added and removed efficiently.\n * While events are suspended, recompositing of the collections will\n * also be suspended, as this can be a costly operation.\n * This function can be safely called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n */\nCompositeEntityCollection.prototype.suspendEvents = function () {\n  this._suspendCount++;\n  this._composite.suspendEvents();\n};\n\n/**\n * Resumes raising {@link EntityCollection#collectionChanged} events immediately\n * when an item is added or removed.  Any modifications made while while events were suspended\n * will be triggered as a single event when this function is called.  This function also ensures\n * the collection is recomposited if events are also resumed.\n * This function is reference counted and can safely be called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n *\n * @exception {DeveloperError} resumeEvents can not be called before suspendEvents.\n */\nCompositeEntityCollection.prototype.resumeEvents = function () {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._suspendCount === 0) {\n    throw new DeveloperError(\n      \"resumeEvents can not be called before suspendEvents.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._suspendCount--;\n  // recomposite before triggering events (but only if required for performance) that might depend on a composited collection\n  if (this._shouldRecomposite && this._suspendCount === 0) {\n    recomposite(this);\n    this._shouldRecomposite = false;\n  }\n\n  this._composite.resumeEvents();\n};\n\n/**\n * Computes the maximum availability of the entities in the collection.\n * If the collection contains a mix of infinitely available data and non-infinite data,\n * It will return the interval pertaining to the non-infinite data only.  If all\n * data is infinite, an infinite interval will be returned.\n *\n * @returns {TimeInterval} The availability of entities in the collection.\n */\nCompositeEntityCollection.prototype.computeAvailability = function () {\n  return this._composite.computeAvailability();\n};\n\n/**\n * Gets an entity with the specified id.\n *\n * @param {string} id The id of the entity to retrieve.\n * @returns {Entity|undefined} The entity with the provided id or undefined if the id did not exist in the collection.\n */\nCompositeEntityCollection.prototype.getById = function (id) {\n  return this._composite.getById(id);\n};\n\nCompositeEntityCollection.prototype._onCollectionChanged = function (\n  collection,\n  added,\n  removed,\n) {\n  const collections = this._collectionsCopy;\n  const collectionsLength = collections.length;\n  const composite = this._composite;\n  composite.suspendEvents();\n\n  let i;\n  let q;\n  let entity;\n  let compositeEntity;\n  const removedLength = removed.length;\n  const eventHash = this._eventHash;\n  const collectionId = collection.id;\n  for (i = 0; i < removedLength; i++) {\n    const removedEntity = removed[i];\n    unsubscribeFromEntity(this, eventHash, collectionId, removedEntity);\n\n    const removedId = removedEntity.id;\n    //Check if the removed entity exists in any of the remaining collections\n    //If so, we clean and remerge it.\n    for (q = collectionsLength - 1; q >= 0; q--) {\n      entity = collections[q].getById(removedId);\n      if (defined(entity)) {\n        if (!defined(compositeEntity)) {\n          compositeEntity = composite.getById(removedId);\n          clean(compositeEntity);\n        }\n        compositeEntity.merge(entity);\n      }\n    }\n    //We never retrieved the compositeEntity, which means it no longer\n    //exists in any of the collections, remove it from the composite.\n    if (!defined(compositeEntity)) {\n      composite.removeById(removedId);\n    }\n    compositeEntity = undefined;\n  }\n\n  const addedLength = added.length;\n  for (i = 0; i < addedLength; i++) {\n    const addedEntity = added[i];\n    subscribeToEntity(this, eventHash, collectionId, addedEntity);\n\n    const addedId = addedEntity.id;\n    //We know the added entity exists in at least one collection,\n    //but we need to check all collections and re-merge in order\n    //to maintain the priority of properties.\n    for (q = collectionsLength - 1; q >= 0; q--) {\n      entity = collections[q].getById(addedId);\n      if (defined(entity)) {\n        if (!defined(compositeEntity)) {\n          compositeEntity = composite.getById(addedId);\n          if (!defined(compositeEntity)) {\n            entityOptionsScratch.id = addedId;\n            compositeEntity = new Entity(entityOptionsScratch);\n            composite.add(compositeEntity);\n          } else {\n            clean(compositeEntity);\n          }\n        }\n        compositeEntity.merge(entity);\n      }\n    }\n    compositeEntity = undefined;\n  }\n\n  composite.resumeEvents();\n};\n\nCompositeEntityCollection.prototype._onDefinitionChanged = function (\n  entity,\n  propertyName,\n  newValue,\n  oldValue,\n) {\n  const collections = this._collections;\n  const composite = this._composite;\n\n  const collectionsLength = collections.length;\n  const id = entity.id;\n  const compositeEntity = composite.getById(id);\n  let compositeProperty = compositeEntity[propertyName];\n  const newProperty = !defined(compositeProperty);\n\n  let firstTime = true;\n  for (let q = collectionsLength - 1; q >= 0; q--) {\n    const innerEntity = collections[q].getById(entity.id);\n    if (defined(innerEntity)) {\n      const property = innerEntity[propertyName];\n      if (defined(property)) {\n        if (firstTime) {\n          firstTime = false;\n          //We only want to clone if the property is also mergeable.\n          //This ensures that leaf properties are referenced and not copied,\n          //which is the entire point of compositing.\n          if (defined(property.merge) && defined(property.clone)) {\n            compositeProperty = property.clone(compositeProperty);\n          } else {\n            compositeProperty = property;\n            break;\n          }\n        }\n        compositeProperty.merge(property);\n      }\n    }\n  }\n\n  if (\n    newProperty &&\n    compositeEntity.propertyNames.indexOf(propertyName) === -1\n  ) {\n    compositeEntity.addProperty(propertyName);\n  }\n\n  compositeEntity[propertyName] = compositeProperty;\n};\nexport default CompositeEntityCollection;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CompositeProperty from \"./CompositeProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link CompositeProperty} which is also a {@link MaterialProperty}.\n *\n * @alias CompositeMaterialProperty\n * @constructor\n */\nfunction CompositeMaterialProperty() {\n  this._definitionChanged = new Event();\n  this._composite = new CompositeProperty();\n  this._composite.definitionChanged.addEventListener(\n    CompositeMaterialProperty.prototype._raiseDefinitionChanged,\n    this,\n  );\n}\n\nObject.defineProperties(CompositeMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof CompositeMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._composite.isConstant;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setValue is called with data different\n   * than the current value.\n   * @memberof CompositeMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the interval collection.\n   * @memberof CompositeMaterialProperty.prototype\n   *\n   * @type {TimeIntervalCollection}\n   */\n  intervals: {\n    get: function () {\n      return this._composite._intervals;\n    },\n  },\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nCompositeMaterialProperty.prototype.getType = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required\");\n  }\n  //>>includeEnd('debug');\n\n  const innerProperty =\n    this._composite._intervals.findDataForIntervalContainingDate(time);\n  if (defined(innerProperty)) {\n    return innerProperty.getType(time);\n  }\n  return undefined;\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositeMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  const innerProperty =\n    this._composite._intervals.findDataForIntervalContainingDate(time);\n  if (defined(innerProperty)) {\n    return innerProperty.getValue(time, result);\n  }\n  return undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCompositeMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof CompositeMaterialProperty && //\n      this._composite.equals(other._composite, Property.equals))\n  );\n};\n\n/**\n * @private\n */\nCompositeMaterialProperty.prototype._raiseDefinitionChanged = function () {\n  this._definitionChanged.raiseEvent(this);\n};\nexport default CompositeMaterialProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport CompositeProperty from \"./CompositeProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link CompositeProperty} which is also a {@link PositionProperty}.\n *\n * @alias CompositePositionProperty\n * @constructor\n *\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction CompositePositionProperty(referenceFrame) {\n  this._referenceFrame = referenceFrame ?? ReferenceFrame.FIXED;\n  this._definitionChanged = new Event();\n  this._composite = new CompositeProperty();\n  this._composite.definitionChanged.addEventListener(\n    CompositePositionProperty.prototype._raiseDefinitionChanged,\n    this,\n  );\n}\n\nObject.defineProperties(CompositePositionProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof CompositePositionProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._composite.isConstant;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setValue is called with data different\n   * than the current value.\n   * @memberof CompositePositionProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the interval collection.\n   * @memberof CompositePositionProperty.prototype\n   *\n   * @type {TimeIntervalCollection}\n   */\n  intervals: {\n    get: function () {\n      return this._composite.intervals;\n    },\n  },\n  /**\n   * Gets or sets the reference frame which this position presents itself as.\n   * Each PositionProperty making up this object has it's own reference frame,\n   * so this property merely exposes a \"preferred\" reference frame for clients\n   * to use.\n   * @memberof CompositePositionProperty.prototype\n   *\n   * @type {ReferenceFrame}\n   */\n  referenceFrame: {\n    get: function () {\n      return this._referenceFrame;\n    },\n    set: function (value) {\n      this._referenceFrame = value;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositePositionProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositePositionProperty.prototype.getValueInReferenceFrame = function (\n  time,\n  referenceFrame,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  if (!defined(referenceFrame)) {\n    throw new DeveloperError(\"referenceFrame is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const innerProperty =\n    this._composite._intervals.findDataForIntervalContainingDate(time);\n  if (defined(innerProperty)) {\n    return innerProperty.getValueInReferenceFrame(time, referenceFrame, result);\n  }\n  return undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCompositePositionProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof CompositePositionProperty && //\n      this._referenceFrame === other._referenceFrame && //\n      this._composite.equals(other._composite, Property.equals))\n  );\n};\n\n/**\n * @private\n */\nCompositePositionProperty.prototype._raiseDefinitionChanged = function () {\n  this._definitionChanged.raiseEvent(this);\n};\nexport default CompositePositionProperty;\n","import defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport Property from \"./Property.js\";\n\nfunction subscribeAll(property, eventHelper, definitionChanged, intervals) {\n  function callback() {\n    definitionChanged.raiseEvent(property);\n  }\n  const items = [];\n  eventHelper.removeAll();\n  const length = intervals.length;\n  for (let i = 0; i < length; i++) {\n    const interval = intervals.get(i);\n    if (defined(interval.data) && items.indexOf(interval.data) === -1) {\n      eventHelper.add(interval.data.definitionChanged, callback);\n    }\n  }\n}\n\n/**\n * A {@link Property} which is defined by a {@link TimeIntervalCollection}, where the\n * data property of each {@link TimeInterval} is another Property instance which is\n * evaluated at the provided time.\n *\n * @alias CompositeProperty\n * @constructor\n *\n *\n * @example\n * const constantProperty = ...;\n * const sampledProperty = ...;\n *\n * //Create a composite property from two previously defined properties\n * //where the property is valid on August 1st, 2012 and uses a constant\n * //property for the first half of the day and a sampled property for the\n * //remaining half.\n * const composite = new Cesium.CompositeProperty();\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '2012-08-01T00:00:00.00Z/2012-08-01T12:00:00.00Z',\n *     data : constantProperty\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '2012-08-01T12:00:00.00Z/2012-08-02T00:00:00.00Z',\n *     isStartIncluded : false,\n *     isStopIncluded : false,\n *     data : sampledProperty\n * }));\n *\n * @see CompositeMaterialProperty\n * @see CompositePositionProperty\n */\nfunction CompositeProperty() {\n  this._eventHelper = new EventHelper();\n  this._definitionChanged = new Event();\n  this._intervals = new TimeIntervalCollection();\n  this._intervals.changedEvent.addEventListener(\n    CompositeProperty.prototype._intervalsChanged,\n    this,\n  );\n}\n\nObject.defineProperties(CompositeProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof CompositeProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._intervals.isEmpty;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setValue is called with data different\n   * than the current value.\n   * @memberof CompositeProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the interval collection.\n   * @memberof CompositeProperty.prototype\n   *\n   * @type {TimeIntervalCollection}\n   */\n  intervals: {\n    get: function () {\n      return this._intervals;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nCompositeProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  const innerProperty = this._intervals.findDataForIntervalContainingDate(time);\n  if (defined(innerProperty)) {\n    return innerProperty.getValue(time, result);\n  }\n  return undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nCompositeProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof CompositeProperty && //\n      this._intervals.equals(other._intervals, Property.equals))\n  );\n};\n\n/**\n * @private\n */\nCompositeProperty.prototype._intervalsChanged = function () {\n  subscribeAll(\n    this,\n    this._eventHelper,\n    this._definitionChanged,\n    this._intervals,\n  );\n  this._definitionChanged.raiseEvent(this);\n};\nexport default CompositeProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport PositionProperty from \"./PositionProperty.js\";\n\n/**\n * A {@link PositionProperty} whose value does not change in respect to the\n * {@link ReferenceFrame} in which is it defined.\n *\n * @alias ConstantPositionProperty\n * @constructor\n *\n * @param {Cartesian3} [value] The property value.\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction ConstantPositionProperty(value, referenceFrame) {\n  this._definitionChanged = new Event();\n  this._value = Cartesian3.clone(value);\n  this._referenceFrame = referenceFrame ?? ReferenceFrame.FIXED;\n}\n\nObject.defineProperties(ConstantPositionProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof ConstantPositionProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        !defined(this._value) || this._referenceFrame === ReferenceFrame.FIXED\n      );\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof ConstantPositionProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the reference frame in which the position is defined.\n   * @memberof ConstantPositionProperty.prototype\n   * @type {ReferenceFrame}\n   * @default ReferenceFrame.FIXED;\n   */\n  referenceFrame: {\n    get: function () {\n      return this._referenceFrame;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nConstantPositionProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {Cartesian3} value The property value.\n * @param {ReferenceFrame} [referenceFrame=this.referenceFrame] The reference frame in which the position is defined.\n */\nConstantPositionProperty.prototype.setValue = function (value, referenceFrame) {\n  let definitionChanged = false;\n  if (!Cartesian3.equals(this._value, value)) {\n    definitionChanged = true;\n    this._value = Cartesian3.clone(value);\n  }\n  if (defined(referenceFrame) && this._referenceFrame !== referenceFrame) {\n    definitionChanged = true;\n    this._referenceFrame = referenceFrame;\n  }\n  if (definitionChanged) {\n    this._definitionChanged.raiseEvent(this);\n  }\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nConstantPositionProperty.prototype.getValueInReferenceFrame = function (\n  time,\n  referenceFrame,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  if (!defined(referenceFrame)) {\n    throw new DeveloperError(\"referenceFrame is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return PositionProperty.convertToReferenceFrame(\n    time,\n    this._value,\n    this._referenceFrame,\n    referenceFrame,\n    result,\n  );\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nConstantPositionProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof ConstantPositionProperty &&\n      Cartesian3.equals(this._value, other._value) &&\n      this._referenceFrame === other._referenceFrame)\n  );\n};\nexport default ConstantPositionProperty;\n","import defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\n\n/**\n * A {@link Property} whose value does not change with respect to simulation time.\n *\n * @alias ConstantProperty\n * @constructor\n *\n * @param {*} [value] The property value.\n *\n * @see ConstantPositionProperty\n */\nfunction ConstantProperty(value) {\n  this._value = undefined;\n  this._hasClone = false;\n  this._hasEquals = false;\n  this._definitionChanged = new Event();\n  this.setValue(value);\n}\n\nObject.defineProperties(ConstantProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.\n   * This property always returns <code>true</code>.\n   * @memberof ConstantProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    value: true,\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setValue is called with data different\n   * than the current value.\n   * @memberof ConstantProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n});\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} [time] The time for which to retrieve the value.  This parameter is unused since the value does not change with respect to time.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nConstantProperty.prototype.getValue = function (time, result) {\n  return this._hasClone ? this._value.clone(result) : this._value;\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {*} value The property value.\n */\nConstantProperty.prototype.setValue = function (value) {\n  const oldValue = this._value;\n  if (oldValue !== value) {\n    const isDefined = defined(value);\n    const hasClone = isDefined && typeof value.clone === \"function\";\n    const hasEquals = isDefined && typeof value.equals === \"function\";\n\n    const changed = !hasEquals || !value.equals(oldValue);\n    if (changed) {\n      this._hasClone = hasClone;\n      this._hasEquals = hasEquals;\n      this._value = !hasClone ? value : value.clone(this._value);\n      this._definitionChanged.raiseEvent(this);\n    }\n  }\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nConstantProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof ConstantProperty && //\n      ((!this._hasEquals && this._value === other._value) || //\n        (this._hasEquals && this._value.equals(other._value))))\n  );\n};\n\n/**\n * Gets this property's value.\n *\n * @returns {*} This property's value.\n */\nConstantProperty.prototype.valueOf = function () {\n  return this._value;\n};\n\n/**\n * Creates a string representing this property's value.\n *\n * @returns {string} A string representing the property's value.\n */\nConstantProperty.prototype.toString = function () {\n  return String(this._value);\n};\nexport default ConstantProperty;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CorridorGeometry from \"../Core/CorridorGeometry.js\";\nimport CorridorOutlineGeometry from \"../Core/CorridorOutlineGeometry.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nconst scratchColor = new Color();\nconst defaultOffset = Cartesian3.ZERO;\nconst offsetScratch = new Cartesian3();\nconst scratchRectangle = new Rectangle();\n\nfunction CorridorGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.positions = undefined;\n  this.width = undefined;\n  this.cornerType = undefined;\n  this.height = undefined;\n  this.extrudedHeight = undefined;\n  this.granularity = undefined;\n  this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for corridors.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias CorridorGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction CorridorGeometryUpdater(entity, scene) {\n  GroundGeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new CorridorGeometryOptions(entity),\n    geometryPropertyName: \"corridor\",\n    observedPropertyNames: [\"availability\", \"corridor\"],\n  });\n\n  this._onEntityPropertyChanged(entity, \"corridor\", entity.corridor, undefined);\n}\n\nif (defined(Object.create)) {\n  CorridorGeometryUpdater.prototype = Object.create(\n    GroundGeometryUpdater.prototype,\n  );\n  CorridorGeometryUpdater.prototype.constructor = CorridorGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nCorridorGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._fillProperty.getValue(time),\n    ),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        this._distanceDisplayConditionProperty.getValue(time),\n      ),\n    offset: undefined,\n    color: undefined,\n  };\n\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new CorridorGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nCorridorGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._showOutlineProperty.getValue(time),\n    ),\n    color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        this._distanceDisplayConditionProperty.getValue(time),\n      ),\n    offset: undefined,\n  };\n\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new CorridorOutlineGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\nCorridorGeometryUpdater.prototype._computeCenter = function (time, result) {\n  const positions = Property.getValueOrUndefined(\n    this._entity.corridor.positions,\n    time,\n  );\n  if (!defined(positions) || positions.length === 0) {\n    return;\n  }\n  return Cartesian3.clone(\n    positions[Math.floor(positions.length / 2.0)],\n    result,\n  );\n};\n\nCorridorGeometryUpdater.prototype._isHidden = function (entity, corridor) {\n  return (\n    !defined(corridor.positions) ||\n    !defined(corridor.width) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, corridor)\n  );\n};\n\nCorridorGeometryUpdater.prototype._isDynamic = function (entity, corridor) {\n  return (\n    !corridor.positions.isConstant || //\n    !Property.isConstant(corridor.height) || //\n    !Property.isConstant(corridor.extrudedHeight) || //\n    !Property.isConstant(corridor.granularity) || //\n    !Property.isConstant(corridor.width) || //\n    !Property.isConstant(corridor.outlineWidth) || //\n    !Property.isConstant(corridor.cornerType) || //\n    !Property.isConstant(corridor.zIndex) || //\n    (this._onTerrain &&\n      !Property.isConstant(this._materialProperty) &&\n      !(this._materialProperty instanceof ColorMaterialProperty))\n  );\n};\n\nCorridorGeometryUpdater.prototype._setStaticOptions = function (\n  entity,\n  corridor,\n) {\n  let heightValue = Property.getValueOrUndefined(\n    corridor.height,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const heightReferenceValue = Property.getValueOrDefault(\n    corridor.heightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    corridor.extrudedHeight,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    corridor.extrudedHeightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  if (defined(extrudedHeightValue) && !defined(heightValue)) {\n    heightValue = 0;\n  }\n\n  const options = this._options;\n  options.vertexFormat =\n    this._materialProperty instanceof ColorMaterialProperty\n      ? PerInstanceColorAppearance.VERTEX_FORMAT\n      : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.positions = corridor.positions.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.positions,\n  );\n  options.width = corridor.width.getValue(Iso8601.MINIMUM_VALUE);\n  options.granularity = Property.getValueOrUndefined(\n    corridor.granularity,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.cornerType = Property.getValueOrUndefined(\n    corridor.cornerType,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.offsetAttribute =\n    GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  options.height = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    heightReferenceValue,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n      CorridorGeometry.computeRectangle(options, scratchRectangle),\n    ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\n\nCorridorGeometryUpdater.DynamicGeometryUpdater = DynamicCorridorGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicCorridorGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicCorridorGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicCorridorGeometryUpdater.prototype.constructor =\n    DynamicCorridorGeometryUpdater;\n}\n\nDynamicCorridorGeometryUpdater.prototype._isHidden = function (\n  entity,\n  corridor,\n  time,\n) {\n  const options = this._options;\n  return (\n    !defined(options.positions) ||\n    !defined(options.width) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(\n      this,\n      entity,\n      corridor,\n      time,\n    )\n  );\n};\n\nDynamicCorridorGeometryUpdater.prototype._setOptions = function (\n  entity,\n  corridor,\n  time,\n) {\n  const options = this._options;\n  let heightValue = Property.getValueOrUndefined(corridor.height, time);\n  const heightReferenceValue = Property.getValueOrDefault(\n    corridor.heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    corridor.extrudedHeight,\n    time,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    corridor.extrudedHeightReference,\n    time,\n    HeightReference.NONE,\n  );\n  if (defined(extrudedHeightValue) && !defined(heightValue)) {\n    heightValue = 0;\n  }\n\n  options.positions = Property.getValueOrUndefined(corridor.positions, time);\n  options.width = Property.getValueOrUndefined(corridor.width, time);\n  options.granularity = Property.getValueOrUndefined(\n    corridor.granularity,\n    time,\n  );\n  options.cornerType = Property.getValueOrUndefined(corridor.cornerType, time);\n  options.offsetAttribute =\n    GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  options.height = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    heightReferenceValue,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n      CorridorGeometry.computeRectangle(options, scratchRectangle),\n    ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\nexport default CorridorGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} CorridorGraphics.ConstructorOptions\n *\n * Initialization options for the CorridorGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the corridor.\n * @property {Property | Cartesian3[]} [positions] A Property specifying the array of {@link Cartesian3} positions that define the centerline of the corridor.\n * @property {Property | number} [width] A numeric Property specifying the distance between the edges of the corridor.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the corridor relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the corridor's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | CornerType} [cornerType=CornerType.ROUNDED] A {@link CornerType} Property specifying the style of the corners.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the distance between each latitude and longitude.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the corridor is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the corridor.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the corridor is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the corridor casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this corridor will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this corridor will classify terrain, 3D Tiles, or both when on the ground.\n * @property {ConstantProperty | number} [zIndex] A Property specifying the zIndex of the corridor, used for ordering.  Only has an effect if height and extrudedHeight are undefined, and if the corridor is static.\n */\n\n/**\n * Describes a corridor, which is a shape defined by a centerline and width that\n * conforms to the curvature of the globe. It can be placed on the surface or at altitude\n * and can optionally be extruded into a volume.\n *\n * @alias CorridorGraphics\n * @constructor\n *\n * @param {CorridorGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?id=corridor|Cesium Sandcastle Corridor Demo}\n */\nfunction CorridorGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._positions = undefined;\n  this._positionsSubscription = undefined;\n  this._width = undefined;\n  this._widthSubscription = undefined;\n  this._height = undefined;\n  this._heightSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._extrudedHeight = undefined;\n  this._extrudedHeightSubscription = undefined;\n  this._extrudedHeightReference = undefined;\n  this._extrudedHeightReferenceSubscription = undefined;\n  this._cornerType = undefined;\n  this._cornerTypeSubscription = undefined;\n  this._granularity = undefined;\n  this._granularitySubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._classificationType = undefined;\n  this._classificationTypeSubscription = undefined;\n  this._zIndex = undefined;\n  this._zIndexSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(CorridorGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof CorridorGraphics.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the corridor.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets a Property specifying the array of {@link Cartesian3} positions that define the centerline of the corridor.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   */\n  positions: createPropertyDescriptor(\"positions\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   */\n  width: createPropertyDescriptor(\"width\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the altitude of the corridor.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  height: createPropertyDescriptor(\"height\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the altitude of the corridor extrusion.\n   * Setting this property creates a corridor shaped volume starting at height and ending\n   * at this altitude.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   */\n  extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n  /**\n   * Gets or sets the Property specifying the extruded {@link HeightReference}.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n  /**\n   * Gets or sets the {@link CornerType} Property specifying how corners are styled.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default CornerType.ROUNDED\n   */\n  cornerType: createPropertyDescriptor(\"cornerType\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the sampling distance between each latitude and longitude point.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default {CesiumMath.RADIANS_PER_DEGREE}\n   */\n  granularity: createPropertyDescriptor(\"granularity\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the corridor is filled with the provided material.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the corridor.\n   * @memberof CorridorGraphics.prototype\n   * @type {MaterialProperty|undefined}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the corridor is outlined.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the corridor\n   * casts or receives shadows from light sources.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this corridor will be displayed.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the {@link ClassificationType} Property specifying whether this corridor will classify terrain, 3D Tiles, or both when on the ground.\n   * @memberof CorridorGraphics.prototype\n   * @type {Property|undefined}\n   * @default ClassificationType.BOTH\n   */\n  classificationType: createPropertyDescriptor(\"classificationType\"),\n\n  /**\n   * Gets or sets the zIndex Property specifying the ordering of the corridor.  Only has an effect if the coridor is static and neither height or exturdedHeight are specified.\n   * @memberof CorridorGraphics.prototype\n   * @type {ConstantProperty|undefined}\n   * @default 0\n   */\n  zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {CorridorGraphics} [result] The object onto which to store the result.\n * @returns {CorridorGraphics} The modified result parameter or a new instance if one was not provided.\n */\nCorridorGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new CorridorGraphics(this);\n  }\n  result.show = this.show;\n  result.positions = this.positions;\n  result.width = this.width;\n  result.height = this.height;\n  result.heightReference = this.heightReference;\n  result.extrudedHeight = this.extrudedHeight;\n  result.extrudedHeightReference = this.extrudedHeightReference;\n  result.cornerType = this.cornerType;\n  result.granularity = this.granularity;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.classificationType = this.classificationType;\n  result.zIndex = this.zIndex;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {CorridorGraphics} source The object to be merged into this object.\n */\nCorridorGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.positions = this.positions ?? source.positions;\n  this.width = this.width ?? source.width;\n  this.height = this.height ?? source.height;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.extrudedHeight = this.extrudedHeight ?? source.extrudedHeight;\n  this.extrudedHeightReference =\n    this.extrudedHeightReference ?? source.extrudedHeightReference;\n  this.cornerType = this.cornerType ?? source.cornerType;\n  this.granularity = this.granularity ?? source.granularity;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.classificationType =\n    this.classificationType ?? source.classificationType;\n  this.zIndex = this.zIndex ?? source.zIndex;\n};\nexport default CorridorGraphics;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport DataSource from \"./DataSource.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\n\n/**\n * A {@link DataSource} implementation which can be used to manually manage a group of entities.\n *\n * @alias CustomDataSource\n * @constructor\n *\n * @param {string} [name] A human-readable name for this instance.\n *\n * @example\n * const dataSource = new Cesium.CustomDataSource('myData');\n *\n * const entity = dataSource.entities.add({\n *    position : Cesium.Cartesian3.fromDegrees(1, 2, 0),\n *    billboard : {\n *        image : 'image.png'\n *    }\n * });\n *\n * viewer.dataSources.add(dataSource);\n */\nfunction CustomDataSource(name) {\n  this._name = name;\n  this._clock = undefined;\n  this._changed = new Event();\n  this._error = new Event();\n  this._isLoading = false;\n  this._loading = new Event();\n  this._entityCollection = new EntityCollection(this);\n  this._entityCluster = new EntityCluster();\n}\n\nObject.defineProperties(CustomDataSource.prototype, {\n  /**\n   * Gets or sets a human-readable name for this instance.\n   * @memberof CustomDataSource.prototype\n   * @type {string}\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n    set: function (value) {\n      if (this._name !== value) {\n        this._name = value;\n        this._changed.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * Gets or sets the clock for this instance.\n   * @memberof CustomDataSource.prototype\n   * @type {DataSourceClock}\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n    set: function (value) {\n      if (this._clock !== value) {\n        this._clock = value;\n        this._changed.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * Gets the collection of {@link Entity} instances.\n   * @memberof CustomDataSource.prototype\n   * @type {EntityCollection}\n   */\n  entities: {\n    get: function () {\n      return this._entityCollection;\n    },\n  },\n  /**\n   * Gets or sets whether the data source is currently loading data.\n   * @memberof CustomDataSource.prototype\n   * @type {boolean}\n   */\n  isLoading: {\n    get: function () {\n      return this._isLoading;\n    },\n    set: function (value) {\n      DataSource.setLoading(this, value);\n    },\n  },\n  /**\n   * Gets an event that will be raised when the underlying data changes.\n   * @memberof CustomDataSource.prototype\n   * @type {Event}\n   */\n  changedEvent: {\n    get: function () {\n      return this._changed;\n    },\n  },\n  /**\n   * Gets an event that will be raised if an error is encountered during processing.\n   * @memberof CustomDataSource.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: function () {\n      return this._error;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the data source either starts or stops loading.\n   * @memberof CustomDataSource.prototype\n   * @type {Event}\n   */\n  loadingEvent: {\n    get: function () {\n      return this._loading;\n    },\n  },\n  /**\n   * Gets whether or not this data source should be displayed.\n   * @memberof CustomDataSource.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._entityCollection.show;\n    },\n    set: function (value) {\n      this._entityCollection.show = value;\n    },\n  },\n\n  /**\n   * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n   *\n   * @memberof CustomDataSource.prototype\n   * @type {EntityCluster}\n   */\n  clustering: {\n    get: function () {\n      return this._entityCluster;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value must be defined.\");\n      }\n      //>>includeEnd('debug');\n      this._entityCluster = value;\n    },\n  },\n});\n\n/**\n * Updates the data source to the provided time.  This function is optional and\n * is not required to be implemented.  It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nCustomDataSource.prototype.update = function (time) {\n  return true;\n};\n\nexport default CustomDataSource;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CylinderGeometry from \"../Core/CylinderGeometry.js\";\nimport CylinderOutlineGeometry from \"../Core/CylinderOutlineGeometry.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport heightReferenceOnEntityPropertyChanged from \"./heightReferenceOnEntityPropertyChanged.js\";\nimport Property from \"./Property.js\";\n\nconst defaultOffset = Cartesian3.ZERO;\n\nconst offsetScratch = new Cartesian3();\nconst positionScratch = new Cartesian3();\nconst scratchColor = new Color();\n\nfunction CylinderGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.length = undefined;\n  this.topRadius = undefined;\n  this.bottomRadius = undefined;\n  this.slices = undefined;\n  this.numberOfVerticalLines = undefined;\n  this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for cylinders.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias CylinderGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction CylinderGeometryUpdater(entity, scene) {\n  GeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new CylinderGeometryOptions(entity),\n    geometryPropertyName: \"cylinder\",\n    observedPropertyNames: [\n      \"availability\",\n      \"position\",\n      \"orientation\",\n      \"cylinder\",\n    ],\n  });\n\n  this._onEntityPropertyChanged(entity, \"cylinder\", entity.cylinder, undefined);\n}\n\nif (defined(Object.create)) {\n  CylinderGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n  CylinderGeometryUpdater.prototype.constructor = CylinderGeometryUpdater;\n}\n\nObject.defineProperties(CylinderGeometryUpdater.prototype, {\n  /**\n   * Gets the terrain offset property\n   * @type {TerrainOffsetProperty}\n   * @memberof CylinderGeometryUpdater.prototype\n   * @readonly\n   * @private\n   */\n  terrainOffsetProperty: {\n    get: function () {\n      return this._terrainOffsetProperty;\n    },\n  },\n});\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nCylinderGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  const show = new ShowGeometryInstanceAttribute(\n    isAvailable &&\n      entity.isShowing &&\n      this._showProperty.getValue(time) &&\n      this._fillProperty.getValue(time),\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n  const distanceDisplayConditionAttribute =\n    DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n      distanceDisplayCondition,\n    );\n\n  const attributes = {\n    show: show,\n    distanceDisplayCondition: distanceDisplayConditionAttribute,\n    color: undefined,\n    offset: undefined,\n  };\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new CylinderGeometry(this._options),\n    modelMatrix: entity.computeModelMatrixForHeightReference(\n      time,\n      entity.cylinder.heightReference,\n      this._options.length * 0.5,\n      this._scene.ellipsoid,\n    ),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nCylinderGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._showOutlineProperty.getValue(time),\n    ),\n    color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        distanceDisplayCondition,\n      ),\n    offset: undefined,\n  };\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new CylinderOutlineGeometry(this._options),\n    modelMatrix: entity.computeModelMatrixForHeightReference(\n      time,\n      entity.cylinder.heightReference,\n      this._options.length * 0.5,\n      this._scene.ellipsoid,\n    ),\n    attributes: attributes,\n  });\n};\n\nCylinderGeometryUpdater.prototype._computeCenter = function (time, result) {\n  return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nCylinderGeometryUpdater.prototype._isHidden = function (entity, cylinder) {\n  return (\n    !defined(entity.position) ||\n    !defined(cylinder.length) ||\n    !defined(cylinder.topRadius) ||\n    !defined(cylinder.bottomRadius) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, cylinder)\n  );\n};\n\nCylinderGeometryUpdater.prototype._isDynamic = function (entity, cylinder) {\n  return (\n    !entity.position.isConstant || //\n    !Property.isConstant(entity.orientation) || //\n    !cylinder.length.isConstant || //\n    !cylinder.topRadius.isConstant || //\n    !cylinder.bottomRadius.isConstant || //\n    !Property.isConstant(cylinder.slices) || //\n    !Property.isConstant(cylinder.outlineWidth) || //\n    !Property.isConstant(cylinder.numberOfVerticalLines)\n  );\n};\n\nCylinderGeometryUpdater.prototype._setStaticOptions = function (\n  entity,\n  cylinder,\n) {\n  const heightReference = Property.getValueOrDefault(\n    cylinder.heightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  const options = this._options;\n  options.vertexFormat =\n    this._materialProperty instanceof ColorMaterialProperty\n      ? PerInstanceColorAppearance.VERTEX_FORMAT\n      : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.length = cylinder.length.getValue(Iso8601.MINIMUM_VALUE);\n  options.topRadius = cylinder.topRadius.getValue(Iso8601.MINIMUM_VALUE);\n  options.bottomRadius = cylinder.bottomRadius.getValue(Iso8601.MINIMUM_VALUE);\n  options.slices = Property.getValueOrUndefined(\n    cylinder.slices,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.numberOfVerticalLines = Property.getValueOrUndefined(\n    cylinder.numberOfVerticalLines,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.offsetAttribute =\n    heightReference !== HeightReference.NONE\n      ? GeometryOffsetAttribute.ALL\n      : undefined;\n};\n\nCylinderGeometryUpdater.prototype._onEntityPropertyChanged =\n  heightReferenceOnEntityPropertyChanged;\n\nCylinderGeometryUpdater.DynamicGeometryUpdater = DynamicCylinderGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicCylinderGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicCylinderGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicCylinderGeometryUpdater.prototype.constructor =\n    DynamicCylinderGeometryUpdater;\n}\n\nDynamicCylinderGeometryUpdater.prototype._isHidden = function (\n  entity,\n  cylinder,\n  time,\n) {\n  const options = this._options;\n  const position = Property.getValueOrUndefined(\n    entity.position,\n    time,\n    positionScratch,\n  );\n  return (\n    !defined(position) ||\n    !defined(options.length) ||\n    !defined(options.topRadius) || //\n    !defined(options.bottomRadius) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(\n      this,\n      entity,\n      cylinder,\n      time,\n    )\n  );\n};\n\nDynamicCylinderGeometryUpdater.prototype._setOptions = function (\n  entity,\n  cylinder,\n  time,\n) {\n  const heightReference = Property.getValueOrDefault(\n    cylinder.heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  const options = this._options;\n  options.length = Property.getValueOrUndefined(cylinder.length, time);\n  options.topRadius = Property.getValueOrUndefined(cylinder.topRadius, time);\n  options.bottomRadius = Property.getValueOrUndefined(\n    cylinder.bottomRadius,\n    time,\n  );\n  options.slices = Property.getValueOrUndefined(cylinder.slices, time);\n  options.numberOfVerticalLines = Property.getValueOrUndefined(\n    cylinder.numberOfVerticalLines,\n    time,\n  );\n  options.offsetAttribute =\n    heightReference !== HeightReference.NONE\n      ? GeometryOffsetAttribute.ALL\n      : undefined;\n};\nexport default CylinderGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} CylinderGraphics.ConstructorOptions\n *\n * Initialization options for the CylinderGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the cylinder.\n * @property {Property | number} [length] A numeric Property specifying the length of the cylinder.\n * @property {Property | number} [topRadius] A numeric Property specifying the radius of the top of the cylinder.\n * @property {Property | number} [bottomRadius] A numeric Property specifying the radius of the bottom of the cylinder.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height from the entity position is relative to.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the cylinder is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the cylinder.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the cylinder is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | number} [numberOfVerticalLines=16] A numeric Property specifying the number of vertical lines to draw along the perimeter for the outline.\n * @property {Property | number} [slices=128] The number of edges around the perimeter of the cylinder.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the cylinder casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this cylinder will be displayed.\n */\n\n/**\n * Describes a cylinder, truncated cone, or cone defined by a length, top radius, and bottom radius.\n * The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias CylinderGraphics\n * @constructor\n *\n * @param {CylinderGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction CylinderGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._length = undefined;\n  this._lengthSubscription = undefined;\n  this._topRadius = undefined;\n  this._topRadiusSubscription = undefined;\n  this._bottomRadius = undefined;\n  this._bottomRadiusSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._numberOfVerticalLines = undefined;\n  this._numberOfVerticalLinesSubscription = undefined;\n  this._slices = undefined;\n  this._slicesSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(CylinderGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof CylinderGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the cylinder.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the length of the cylinder.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   */\n  length: createPropertyDescriptor(\"length\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the radius of the top of the cylinder.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   */\n  topRadius: createPropertyDescriptor(\"topRadius\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the radius of the bottom of the cylinder.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   */\n  bottomRadius: createPropertyDescriptor(\"bottomRadius\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the cylinder is filled with the provided material.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the cylinder.\n   * @memberof CylinderGraphics.prototype\n   * @type {MaterialProperty|undefined}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the cylinder is outlined.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Gets or sets the Property specifying the number of vertical lines to draw along the perimeter for the outline.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default 16\n   */\n  numberOfVerticalLines: createPropertyDescriptor(\"numberOfVerticalLines\"),\n\n  /**\n   * Gets or sets the Property specifying the number of edges around the perimeter of the cylinder.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default 128\n   */\n  slices: createPropertyDescriptor(\"slices\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the cylinder\n   * casts or receives shadows from light sources.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this cylinder will be displayed.\n   * @memberof CylinderGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {CylinderGraphics} [result] The object onto which to store the result.\n * @returns {CylinderGraphics} The modified result parameter or a new instance if one was not provided.\n */\nCylinderGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new CylinderGraphics(this);\n  }\n  result.show = this.show;\n  result.length = this.length;\n  result.topRadius = this.topRadius;\n  result.bottomRadius = this.bottomRadius;\n  result.heightReference = this.heightReference;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.numberOfVerticalLines = this.numberOfVerticalLines;\n  result.slices = this.slices;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {CylinderGraphics} source The object to be merged into this object.\n */\nCylinderGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.length = this.length ?? source.length;\n  this.topRadius = this.topRadius ?? source.topRadius;\n  this.bottomRadius = this.bottomRadius ?? source.bottomRadius;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.numberOfVerticalLines =\n    this.numberOfVerticalLines ?? source.numberOfVerticalLines;\n  this.slices = this.slices ?? source.slices;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n};\nexport default CylinderGraphics;\n","import ArcType from \"../Core/ArcType.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport ClockRange from \"../Core/ClockRange.js\";\nimport ClockStep from \"../Core/ClockStep.js\";\nimport Color from \"../Core/Color.js\";\nimport CornerType from \"../Core/CornerType.js\";\nimport Credit from \"../Core/Credit.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport ExtrapolationType from \"../Core/ExtrapolationType.js\";\nimport getFilenameFromUri from \"../Core/getFilenameFromUri.js\";\nimport HermitePolynomialApproximation from \"../Core/HermitePolynomialApproximation.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport LagrangePolynomialApproximation from \"../Core/LagrangePolynomialApproximation.js\";\nimport LinearApproximation from \"../Core/LinearApproximation.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Spherical from \"../Core/Spherical.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport ColorBlendMode from \"../Scene/ColorBlendMode.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport LabelStyle from \"../Scene/LabelStyle.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport Uri from \"urijs\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport BoxGraphics from \"./BoxGraphics.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport CheckerboardMaterialProperty from \"./CheckerboardMaterialProperty.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport CompositeMaterialProperty from \"./CompositeMaterialProperty.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport CompositeProperty from \"./CompositeProperty.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport CorridorGraphics from \"./CorridorGraphics.js\";\nimport CylinderGraphics from \"./CylinderGraphics.js\";\nimport DataSource from \"./DataSource.js\";\nimport DataSourceClock from \"./DataSourceClock.js\";\nimport EllipseGraphics from \"./EllipseGraphics.js\";\nimport EllipsoidGraphics from \"./EllipsoidGraphics.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\nimport GridMaterialProperty from \"./GridMaterialProperty.js\";\nimport ImageMaterialProperty from \"./ImageMaterialProperty.js\";\nimport LabelGraphics from \"./LabelGraphics.js\";\nimport ModelGraphics from \"./ModelGraphics.js\";\nimport NodeTransformationProperty from \"./NodeTransformationProperty.js\";\nimport PathGraphics from \"./PathGraphics.js\";\nimport PointGraphics from \"./PointGraphics.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineArrowMaterialProperty from \"./PolylineArrowMaterialProperty.js\";\nimport PolylineDashMaterialProperty from \"./PolylineDashMaterialProperty.js\";\nimport PolylineGlowMaterialProperty from \"./PolylineGlowMaterialProperty.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\nimport PolylineOutlineMaterialProperty from \"./PolylineOutlineMaterialProperty.js\";\nimport PolylineVolumeGraphics from \"./PolylineVolumeGraphics.js\";\nimport PositionPropertyArray from \"./PositionPropertyArray.js\";\nimport Property from \"./Property.js\";\nimport PropertyArray from \"./PropertyArray.js\";\nimport PropertyBag from \"./PropertyBag.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport ReferenceProperty from \"./ReferenceProperty.js\";\nimport Rotation from \"./Rotation.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport SampledProperty from \"./SampledProperty.js\";\nimport StripeMaterialProperty from \"./StripeMaterialProperty.js\";\nimport StripeOrientation from \"./StripeOrientation.js\";\nimport TimeIntervalCollectionPositionProperty from \"./TimeIntervalCollectionPositionProperty.js\";\nimport TimeIntervalCollectionProperty from \"./TimeIntervalCollectionProperty.js\";\nimport VelocityOrientationProperty from \"./VelocityOrientationProperty.js\";\nimport VelocityVectorProperty from \"./VelocityVectorProperty.js\";\nimport WallGraphics from \"./WallGraphics.js\";\nimport Cesium3DTilesetGraphics from \"./Cesium3DTilesetGraphics.js\";\nimport SensorVolumePortionToDisplay from \"../Scene/SensorVolumePortionToDisplay.js\";\n\n// A marker type to distinguish CZML properties where we need to end up with a unit vector.\n// The data is still loaded into Cartesian3 objects but they are normalized.\nfunction UnitCartesian3() {}\nUnitCartesian3.packedLength = Cartesian3.packedLength;\nUnitCartesian3.unpack = Cartesian3.unpack;\nUnitCartesian3.pack = Cartesian3.pack;\n\n// As a side note, for the purposes of CZML, Quaternion always indicates a unit quaternion.\n\nlet currentId;\n\nfunction createReferenceProperty(entityCollection, referenceString) {\n  if (referenceString[0] === \"#\") {\n    referenceString = currentId + referenceString;\n  }\n  return ReferenceProperty.fromString(entityCollection, referenceString);\n}\n\nfunction createSpecializedProperty(type, entityCollection, packetData) {\n  if (defined(packetData.reference)) {\n    return createReferenceProperty(entityCollection, packetData.reference);\n  }\n\n  if (defined(packetData.velocityReference)) {\n    const referenceProperty = createReferenceProperty(\n      entityCollection,\n      packetData.velocityReference,\n    );\n    switch (type) {\n      case Cartesian3:\n      case UnitCartesian3:\n        return new VelocityVectorProperty(\n          referenceProperty,\n          type === UnitCartesian3,\n        );\n      case Quaternion:\n        return new VelocityOrientationProperty(referenceProperty);\n    }\n  }\n\n  throw new RuntimeError(`${JSON.stringify(packetData)} is not valid CZML.`);\n}\n\nfunction createAdapterProperty(property, adapterFunction) {\n  return new CallbackProperty(function (time, result) {\n    return adapterFunction(property.getValue(time, result));\n  }, property.isConstant);\n}\n\nconst scratchCartesian = new Cartesian3();\nconst scratchSpherical = new Spherical();\nconst scratchCartographic = new Cartographic();\nconst scratchTimeInterval = new TimeInterval();\nconst scratchQuaternion = new Quaternion();\n\nfunction unwrapColorInterval(czmlInterval) {\n  let rgbaf = czmlInterval.rgbaf;\n  if (defined(rgbaf)) {\n    return rgbaf;\n  }\n\n  const rgba = czmlInterval.rgba;\n  if (!defined(rgba)) {\n    return undefined;\n  }\n\n  const length = rgba.length;\n  if (length === Color.packedLength) {\n    return [\n      Color.byteToFloat(rgba[0]),\n      Color.byteToFloat(rgba[1]),\n      Color.byteToFloat(rgba[2]),\n      Color.byteToFloat(rgba[3]),\n    ];\n  }\n\n  rgbaf = new Array(length);\n  for (let i = 0; i < length; i += 5) {\n    rgbaf[i] = rgba[i];\n    rgbaf[i + 1] = Color.byteToFloat(rgba[i + 1]);\n    rgbaf[i + 2] = Color.byteToFloat(rgba[i + 2]);\n    rgbaf[i + 3] = Color.byteToFloat(rgba[i + 3]);\n    rgbaf[i + 4] = Color.byteToFloat(rgba[i + 4]);\n  }\n  return rgbaf;\n}\n\nfunction unwrapUriInterval(czmlInterval, sourceUri) {\n  const uri = czmlInterval.uri ?? czmlInterval;\n  if (defined(sourceUri)) {\n    return sourceUri.getDerivedResource({\n      url: uri,\n    });\n  }\n\n  return Resource.createIfNeeded(uri);\n}\n\nfunction unwrapRectangleInterval(czmlInterval) {\n  let wsen = czmlInterval.wsen;\n  if (defined(wsen)) {\n    return wsen;\n  }\n\n  const wsenDegrees = czmlInterval.wsenDegrees;\n  if (!defined(wsenDegrees)) {\n    return undefined;\n  }\n\n  const length = wsenDegrees.length;\n  if (length === Rectangle.packedLength) {\n    return [\n      CesiumMath.toRadians(wsenDegrees[0]),\n      CesiumMath.toRadians(wsenDegrees[1]),\n      CesiumMath.toRadians(wsenDegrees[2]),\n      CesiumMath.toRadians(wsenDegrees[3]),\n    ];\n  }\n\n  wsen = new Array(length);\n  for (let i = 0; i < length; i += 5) {\n    wsen[i] = wsenDegrees[i];\n    wsen[i + 1] = CesiumMath.toRadians(wsenDegrees[i + 1]);\n    wsen[i + 2] = CesiumMath.toRadians(wsenDegrees[i + 2]);\n    wsen[i + 3] = CesiumMath.toRadians(wsenDegrees[i + 3]);\n    wsen[i + 4] = CesiumMath.toRadians(wsenDegrees[i + 4]);\n  }\n  return wsen;\n}\n\nfunction convertUnitSphericalToCartesian(unitSpherical) {\n  const length = unitSpherical.length;\n  scratchSpherical.magnitude = 1.0;\n  if (length === 2) {\n    scratchSpherical.clock = unitSpherical[0];\n    scratchSpherical.cone = unitSpherical[1];\n    Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n    return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n  }\n\n  const result = new Array((length / 3) * 4);\n  for (let i = 0, j = 0; i < length; i += 3, j += 4) {\n    result[j] = unitSpherical[i];\n\n    scratchSpherical.clock = unitSpherical[i + 1];\n    scratchSpherical.cone = unitSpherical[i + 2];\n    Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n\n    result[j + 1] = scratchCartesian.x;\n    result[j + 2] = scratchCartesian.y;\n    result[j + 3] = scratchCartesian.z;\n  }\n  return result;\n}\n\nfunction convertSphericalToCartesian(spherical) {\n  const length = spherical.length;\n  if (length === 3) {\n    scratchSpherical.clock = spherical[0];\n    scratchSpherical.cone = spherical[1];\n    scratchSpherical.magnitude = spherical[2];\n    Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n    return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n  }\n\n  const result = new Array(length);\n  for (let i = 0; i < length; i += 4) {\n    result[i] = spherical[i];\n\n    scratchSpherical.clock = spherical[i + 1];\n    scratchSpherical.cone = spherical[i + 2];\n    scratchSpherical.magnitude = spherical[i + 3];\n    Cartesian3.fromSpherical(scratchSpherical, scratchCartesian);\n\n    result[i + 1] = scratchCartesian.x;\n    result[i + 2] = scratchCartesian.y;\n    result[i + 3] = scratchCartesian.z;\n  }\n  return result;\n}\n\nfunction convertCartographicRadiansToCartesian(cartographicRadians) {\n  const length = cartographicRadians.length;\n  if (length === 3) {\n    scratchCartographic.longitude = cartographicRadians[0];\n    scratchCartographic.latitude = cartographicRadians[1];\n    scratchCartographic.height = cartographicRadians[2];\n    Ellipsoid.default.cartographicToCartesian(\n      scratchCartographic,\n      scratchCartesian,\n    );\n    return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n  }\n\n  const result = new Array(length);\n  for (let i = 0; i < length; i += 4) {\n    result[i] = cartographicRadians[i];\n\n    scratchCartographic.longitude = cartographicRadians[i + 1];\n    scratchCartographic.latitude = cartographicRadians[i + 2];\n    scratchCartographic.height = cartographicRadians[i + 3];\n    Ellipsoid.default.cartographicToCartesian(\n      scratchCartographic,\n      scratchCartesian,\n    );\n\n    result[i + 1] = scratchCartesian.x;\n    result[i + 2] = scratchCartesian.y;\n    result[i + 3] = scratchCartesian.z;\n  }\n  return result;\n}\n\nfunction convertCartographicDegreesToCartesian(cartographicDegrees) {\n  const length = cartographicDegrees.length;\n  if (length === 3) {\n    scratchCartographic.longitude = CesiumMath.toRadians(\n      cartographicDegrees[0],\n    );\n    scratchCartographic.latitude = CesiumMath.toRadians(cartographicDegrees[1]);\n    scratchCartographic.height = cartographicDegrees[2];\n    Ellipsoid.default.cartographicToCartesian(\n      scratchCartographic,\n      scratchCartesian,\n    );\n    return [scratchCartesian.x, scratchCartesian.y, scratchCartesian.z];\n  }\n\n  const result = new Array(length);\n  for (let i = 0; i < length; i += 4) {\n    result[i] = cartographicDegrees[i];\n\n    scratchCartographic.longitude = CesiumMath.toRadians(\n      cartographicDegrees[i + 1],\n    );\n    scratchCartographic.latitude = CesiumMath.toRadians(\n      cartographicDegrees[i + 2],\n    );\n    scratchCartographic.height = cartographicDegrees[i + 3];\n    Ellipsoid.default.cartographicToCartesian(\n      scratchCartographic,\n      scratchCartesian,\n    );\n\n    result[i + 1] = scratchCartesian.x;\n    result[i + 2] = scratchCartesian.y;\n    result[i + 3] = scratchCartesian.z;\n  }\n  return result;\n}\n\nfunction unwrapCartesianInterval(czmlInterval) {\n  const cartesian = czmlInterval.cartesian;\n  if (defined(cartesian)) {\n    return cartesian;\n  }\n\n  const cartesianVelocity = czmlInterval.cartesianVelocity;\n  if (defined(cartesianVelocity)) {\n    return cartesianVelocity;\n  }\n\n  const unitCartesian = czmlInterval.unitCartesian;\n  if (defined(unitCartesian)) {\n    return unitCartesian;\n  }\n\n  const unitSpherical = czmlInterval.unitSpherical;\n  if (defined(unitSpherical)) {\n    return convertUnitSphericalToCartesian(unitSpherical);\n  }\n\n  const spherical = czmlInterval.spherical;\n  if (defined(spherical)) {\n    return convertSphericalToCartesian(spherical);\n  }\n\n  const cartographicRadians = czmlInterval.cartographicRadians;\n  if (defined(cartographicRadians)) {\n    return convertCartographicRadiansToCartesian(cartographicRadians);\n  }\n\n  const cartographicDegrees = czmlInterval.cartographicDegrees;\n  if (defined(cartographicDegrees)) {\n    return convertCartographicDegreesToCartesian(cartographicDegrees);\n  }\n\n  throw new RuntimeError(\n    `${JSON.stringify(czmlInterval)} is not a valid CZML interval.`,\n  );\n}\n\nfunction normalizePackedCartesianArray(array, startingIndex) {\n  Cartesian3.unpack(array, startingIndex, scratchCartesian);\n  Cartesian3.normalize(scratchCartesian, scratchCartesian);\n  Cartesian3.pack(scratchCartesian, array, startingIndex);\n}\n\nfunction unwrapUnitCartesianInterval(czmlInterval) {\n  const cartesian = unwrapCartesianInterval(czmlInterval);\n  if (cartesian.length === 3) {\n    normalizePackedCartesianArray(cartesian, 0);\n    return cartesian;\n  }\n\n  for (let i = 1; i < cartesian.length; i += 4) {\n    normalizePackedCartesianArray(cartesian, i);\n  }\n\n  return cartesian;\n}\n\nfunction normalizePackedQuaternionArray(array, startingIndex) {\n  Quaternion.unpack(array, startingIndex, scratchQuaternion);\n  Quaternion.normalize(scratchQuaternion, scratchQuaternion);\n  Quaternion.pack(scratchQuaternion, array, startingIndex);\n}\n\nfunction unwrapQuaternionInterval(czmlInterval) {\n  const unitQuaternion = czmlInterval.unitQuaternion;\n  if (defined(unitQuaternion)) {\n    if (unitQuaternion.length === 4) {\n      normalizePackedQuaternionArray(unitQuaternion, 0);\n      return unitQuaternion;\n    }\n\n    for (let i = 1; i < unitQuaternion.length; i += 5) {\n      normalizePackedQuaternionArray(unitQuaternion, i);\n    }\n  }\n  return unitQuaternion;\n}\n\nfunction getPropertyType(czmlInterval) {\n  // The associations in this function need to be kept in sync with the\n  // associations in unwrapInterval.\n\n  // Intentionally omitted due to conficts in CZML property names:\n  // * Image (conflicts with Uri)\n  // * Rotation (conflicts with Number)\n  //\n  // cartesianVelocity is also omitted due to incomplete support for\n  // derivative information in CZML properties.\n  // (Currently cartesianVelocity is hacked directly into the position processing code)\n  if (typeof czmlInterval === \"boolean\") {\n    return Boolean;\n  } else if (typeof czmlInterval === \"number\") {\n    return Number;\n  } else if (typeof czmlInterval === \"string\") {\n    return String;\n  } else if (czmlInterval.hasOwnProperty(\"array\")) {\n    return Array;\n  } else if (czmlInterval.hasOwnProperty(\"boolean\")) {\n    return Boolean;\n  } else if (czmlInterval.hasOwnProperty(\"boundingRectangle\")) {\n    return BoundingRectangle;\n  } else if (czmlInterval.hasOwnProperty(\"cartesian2\")) {\n    return Cartesian2;\n  } else if (\n    czmlInterval.hasOwnProperty(\"cartesian\") ||\n    czmlInterval.hasOwnProperty(\"spherical\") ||\n    czmlInterval.hasOwnProperty(\"cartographicRadians\") ||\n    czmlInterval.hasOwnProperty(\"cartographicDegrees\")\n  ) {\n    return Cartesian3;\n  } else if (\n    czmlInterval.hasOwnProperty(\"unitCartesian\") ||\n    czmlInterval.hasOwnProperty(\"unitSpherical\")\n  ) {\n    return UnitCartesian3;\n  } else if (\n    czmlInterval.hasOwnProperty(\"rgba\") ||\n    czmlInterval.hasOwnProperty(\"rgbaf\")\n  ) {\n    return Color;\n  } else if (czmlInterval.hasOwnProperty(\"arcType\")) {\n    return ArcType;\n  } else if (czmlInterval.hasOwnProperty(\"classificationType\")) {\n    return ClassificationType;\n  } else if (czmlInterval.hasOwnProperty(\"colorBlendMode\")) {\n    return ColorBlendMode;\n  } else if (czmlInterval.hasOwnProperty(\"cornerType\")) {\n    return CornerType;\n  } else if (czmlInterval.hasOwnProperty(\"heightReference\")) {\n    return HeightReference;\n  } else if (czmlInterval.hasOwnProperty(\"horizontalOrigin\")) {\n    return HorizontalOrigin;\n  } else if (czmlInterval.hasOwnProperty(\"date\")) {\n    return JulianDate;\n  } else if (czmlInterval.hasOwnProperty(\"labelStyle\")) {\n    return LabelStyle;\n  } else if (czmlInterval.hasOwnProperty(\"number\")) {\n    return Number;\n  } else if (czmlInterval.hasOwnProperty(\"nearFarScalar\")) {\n    return NearFarScalar;\n  } else if (czmlInterval.hasOwnProperty(\"distanceDisplayCondition\")) {\n    return DistanceDisplayCondition;\n  } else if (\n    czmlInterval.hasOwnProperty(\"object\") ||\n    czmlInterval.hasOwnProperty(\"value\")\n  ) {\n    return Object;\n  } else if (czmlInterval.hasOwnProperty(\"unitQuaternion\")) {\n    return Quaternion;\n  } else if (czmlInterval.hasOwnProperty(\"shadowMode\")) {\n    return ShadowMode;\n  } else if (czmlInterval.hasOwnProperty(\"string\")) {\n    return String;\n  } else if (czmlInterval.hasOwnProperty(\"stripeOrientation\")) {\n    return StripeOrientation;\n  } else if (\n    czmlInterval.hasOwnProperty(\"wsen\") ||\n    czmlInterval.hasOwnProperty(\"wsenDegrees\")\n  ) {\n    return Rectangle;\n  } else if (czmlInterval.hasOwnProperty(\"uri\")) {\n    return Uri;\n  } else if (czmlInterval.hasOwnProperty(\"verticalOrigin\")) {\n    return VerticalOrigin;\n  }\n  // fallback case\n  return Object;\n}\n\nfunction unwrapInterval(type, czmlInterval, sourceUri) {\n  // The associations in this function need to be kept in sync with the\n  // associations in getPropertyType\n  switch (type) {\n    case ArcType:\n      return ArcType[czmlInterval.arcType ?? czmlInterval];\n    case Array:\n      return czmlInterval.array;\n    case Boolean:\n      return czmlInterval[\"boolean\"] ?? czmlInterval;\n    case BoundingRectangle:\n      return czmlInterval.boundingRectangle;\n    case Cartesian2:\n      return czmlInterval.cartesian2;\n    case Cartesian3:\n      return unwrapCartesianInterval(czmlInterval);\n    case UnitCartesian3:\n      return unwrapUnitCartesianInterval(czmlInterval);\n    case Color:\n      return unwrapColorInterval(czmlInterval);\n    case ClassificationType:\n      return ClassificationType[\n        czmlInterval.classificationType ?? czmlInterval\n      ];\n    case ColorBlendMode:\n      return ColorBlendMode[czmlInterval.colorBlendMode ?? czmlInterval];\n    case CornerType:\n      return CornerType[czmlInterval.cornerType ?? czmlInterval];\n    case HeightReference:\n      return HeightReference[czmlInterval.heightReference ?? czmlInterval];\n    case HorizontalOrigin:\n      return HorizontalOrigin[czmlInterval.horizontalOrigin ?? czmlInterval];\n    case Image:\n      return unwrapUriInterval(czmlInterval, sourceUri);\n    case JulianDate:\n      return JulianDate.fromIso8601(czmlInterval.date ?? czmlInterval);\n    case LabelStyle:\n      return LabelStyle[czmlInterval.labelStyle ?? czmlInterval];\n    case Number:\n      return czmlInterval.number ?? czmlInterval;\n    case NearFarScalar:\n      return czmlInterval.nearFarScalar;\n    case DistanceDisplayCondition:\n      return czmlInterval.distanceDisplayCondition;\n    case Object:\n      return czmlInterval.object ?? czmlInterval.value ?? czmlInterval;\n    case Quaternion:\n      return unwrapQuaternionInterval(czmlInterval);\n    case Rotation:\n      return czmlInterval.number ?? czmlInterval;\n    case SensorVolumePortionToDisplay:\n      return SensorVolumePortionToDisplay[\n        czmlInterval.portionToDisplay ?? czmlInterval\n      ];\n    case ShadowMode:\n      return ShadowMode[\n        czmlInterval.shadowMode ?? czmlInterval.shadows ?? czmlInterval\n      ];\n    case String:\n      return czmlInterval.string ?? czmlInterval;\n    case StripeOrientation:\n      return StripeOrientation[czmlInterval.stripeOrientation ?? czmlInterval];\n    case Rectangle:\n      return unwrapRectangleInterval(czmlInterval);\n    case Uri:\n      return unwrapUriInterval(czmlInterval, sourceUri);\n    case VerticalOrigin:\n      return VerticalOrigin[czmlInterval.verticalOrigin ?? czmlInterval];\n    default:\n      throw new RuntimeError(`Unknown CzmlDataSource interval type: ${type}`);\n  }\n}\n\nconst interpolators = {\n  HERMITE: HermitePolynomialApproximation,\n  LAGRANGE: LagrangePolynomialApproximation,\n  LINEAR: LinearApproximation,\n};\n\nfunction updateInterpolationSettings(packetData, property) {\n  const interpolationAlgorithm = packetData.interpolationAlgorithm;\n  const interpolationDegree = packetData.interpolationDegree;\n  if (defined(interpolationAlgorithm) || defined(interpolationDegree)) {\n    property.setInterpolationOptions({\n      interpolationAlgorithm: interpolators[interpolationAlgorithm],\n      interpolationDegree: interpolationDegree,\n    });\n  }\n\n  const forwardExtrapolationType = packetData.forwardExtrapolationType;\n  if (defined(forwardExtrapolationType)) {\n    property.forwardExtrapolationType =\n      ExtrapolationType[forwardExtrapolationType];\n  }\n\n  const forwardExtrapolationDuration = packetData.forwardExtrapolationDuration;\n  if (defined(forwardExtrapolationDuration)) {\n    property.forwardExtrapolationDuration = forwardExtrapolationDuration;\n  }\n\n  const backwardExtrapolationType = packetData.backwardExtrapolationType;\n  if (defined(backwardExtrapolationType)) {\n    property.backwardExtrapolationType =\n      ExtrapolationType[backwardExtrapolationType];\n  }\n\n  const backwardExtrapolationDuration =\n    packetData.backwardExtrapolationDuration;\n  if (defined(backwardExtrapolationDuration)) {\n    property.backwardExtrapolationDuration = backwardExtrapolationDuration;\n  }\n}\n\nconst iso8601Scratch = {\n  iso8601: undefined,\n};\n\nfunction intervalFromString(intervalString) {\n  if (!defined(intervalString)) {\n    return undefined;\n  }\n  iso8601Scratch.iso8601 = intervalString;\n  return TimeInterval.fromIso8601(iso8601Scratch);\n}\n\nfunction wrapPropertyInInfiniteInterval(property) {\n  const interval = Iso8601.MAXIMUM_INTERVAL.clone();\n  interval.data = property;\n  return interval;\n}\n\nfunction convertPropertyToComposite(property) {\n  // Create the composite and add the old property, wrapped in an infinite interval.\n  const composite = new CompositeProperty();\n  composite.intervals.addInterval(wrapPropertyInInfiniteInterval(property));\n  return composite;\n}\n\nfunction convertPositionPropertyToComposite(property) {\n  // Create the composite and add the old property, wrapped in an infinite interval.\n  const composite = new CompositePositionProperty(property.referenceFrame);\n  composite.intervals.addInterval(wrapPropertyInInfiniteInterval(property));\n  return composite;\n}\n\nfunction processProperty(\n  type,\n  object,\n  propertyName,\n  packetData,\n  constrainedInterval,\n  sourceUri,\n  entityCollection,\n) {\n  let combinedInterval = intervalFromString(packetData.interval);\n  if (defined(constrainedInterval)) {\n    if (defined(combinedInterval)) {\n      combinedInterval = TimeInterval.intersect(\n        combinedInterval,\n        constrainedInterval,\n        scratchTimeInterval,\n      );\n    } else {\n      combinedInterval = constrainedInterval;\n    }\n  }\n\n  let packedLength;\n  let unwrappedInterval;\n  let unwrappedIntervalLength;\n\n  // CZML properties can be defined in many ways.  Most ways represent a structure for\n  // encoding a single value (number, string, cartesian, etc.)  Regardless of the value type,\n  // if it encodes a single value it will get loaded into a ConstantProperty eventually.\n  // Alternatively, there are ways of defining a property that require specialized\n  // client-side representation. Currently, these are ReferenceProperty,\n  // and client-side velocity computation properties such as VelocityVectorProperty.\n  const isValue =\n    !defined(packetData.reference) && !defined(packetData.velocityReference);\n  const hasInterval =\n    defined(combinedInterval) &&\n    !combinedInterval.equals(Iso8601.MAXIMUM_INTERVAL);\n\n  if (packetData.delete === true) {\n    // If deleting this property for all time, we can simply set to undefined and return.\n    if (!hasInterval) {\n      object[propertyName] = undefined;\n      return;\n    }\n\n    // Deleting depends on the type of property we have.\n    return removePropertyData(object[propertyName], combinedInterval);\n  }\n\n  let isSampled = false;\n\n  if (isValue) {\n    unwrappedInterval = unwrapInterval(type, packetData, sourceUri);\n    if (!defined(unwrappedInterval)) {\n      // not a known value type, bail\n      return;\n    }\n    packedLength = type.packedLength ?? 1;\n    unwrappedIntervalLength = unwrappedInterval.length ?? 1;\n    isSampled =\n      !defined(packetData.array) &&\n      typeof unwrappedInterval !== \"string\" &&\n      unwrappedIntervalLength > packedLength &&\n      type !== Object;\n  }\n\n  // Rotation is a special case because it represents a native type (Number)\n  // and therefore does not need to be unpacked when loaded as a constant value.\n  const needsUnpacking = typeof type.unpack === \"function\" && type !== Rotation;\n\n  // Any time a constant value is assigned, it completely blows away anything else.\n  if (!isSampled && !hasInterval) {\n    if (isValue) {\n      object[propertyName] = new ConstantProperty(\n        needsUnpacking ? type.unpack(unwrappedInterval, 0) : unwrappedInterval,\n      );\n    } else {\n      object[propertyName] = createSpecializedProperty(\n        type,\n        entityCollection,\n        packetData,\n      );\n    }\n    return;\n  }\n\n  let property = object[propertyName];\n\n  let epoch;\n  const packetEpoch = packetData.epoch;\n  if (defined(packetEpoch)) {\n    epoch = JulianDate.fromIso8601(packetEpoch);\n  }\n\n  // Without an interval, any sampled value is infinite, meaning it completely\n  // replaces any non-sampled property that may exist.\n  if (isSampled && !hasInterval) {\n    if (!(property instanceof SampledProperty)) {\n      object[propertyName] = property = new SampledProperty(type);\n    }\n    property.addSamplesPackedArray(unwrappedInterval, epoch);\n    updateInterpolationSettings(packetData, property);\n    return;\n  }\n\n  let interval;\n\n  // A constant value with an interval is normally part of a TimeIntervalCollection,\n  // However, if the current property is not a time-interval collection, we need\n  // to turn it into a Composite, preserving the old data with the new interval.\n  if (!isSampled && hasInterval) {\n    // Create a new interval for the constant value.\n    combinedInterval = combinedInterval.clone();\n    if (isValue) {\n      combinedInterval.data = needsUnpacking\n        ? type.unpack(unwrappedInterval, 0)\n        : unwrappedInterval;\n    } else {\n      combinedInterval.data = createSpecializedProperty(\n        type,\n        entityCollection,\n        packetData,\n      );\n    }\n\n    // If no property exists, simply use a new interval collection\n    if (!defined(property)) {\n      object[propertyName] = property = isValue\n        ? new TimeIntervalCollectionProperty()\n        : new CompositeProperty();\n    }\n\n    if (isValue && property instanceof TimeIntervalCollectionProperty) {\n      // If we created a collection, or it already was one, use it.\n      property.intervals.addInterval(combinedInterval);\n    } else if (property instanceof CompositeProperty) {\n      // If the collection was already a CompositeProperty, use it.\n      if (isValue) {\n        combinedInterval.data = new ConstantProperty(combinedInterval.data);\n      }\n      property.intervals.addInterval(combinedInterval);\n    } else {\n      // Otherwise, create a CompositeProperty but preserve the existing data.\n      object[propertyName] = property = convertPropertyToComposite(property);\n\n      // Change the new data to a ConstantProperty and add it.\n      if (isValue) {\n        combinedInterval.data = new ConstantProperty(combinedInterval.data);\n      }\n      property.intervals.addInterval(combinedInterval);\n    }\n\n    return;\n  }\n\n  // isSampled && hasInterval\n  if (!defined(property)) {\n    object[propertyName] = property = new CompositeProperty();\n  }\n\n  // Create a CompositeProperty but preserve the existing data.\n  if (!(property instanceof CompositeProperty)) {\n    object[propertyName] = property = convertPropertyToComposite(property);\n  }\n\n  // Check if the interval already exists in the composite.\n  const intervals = property.intervals;\n  interval = intervals.findInterval(combinedInterval);\n  if (!defined(interval) || !(interval.data instanceof SampledProperty)) {\n    // If not, create a SampledProperty for it.\n    interval = combinedInterval.clone();\n    interval.data = new SampledProperty(type);\n    intervals.addInterval(interval);\n  }\n  interval.data.addSamplesPackedArray(unwrappedInterval, epoch);\n  updateInterpolationSettings(packetData, interval.data);\n}\n\nfunction removePropertyData(property, interval) {\n  if (property instanceof SampledProperty) {\n    property.removeSamples(interval);\n    return;\n  } else if (property instanceof TimeIntervalCollectionProperty) {\n    property.intervals.removeInterval(interval);\n    return;\n  } else if (property instanceof CompositeProperty) {\n    const intervals = property.intervals;\n    for (let i = 0; i < intervals.length; ++i) {\n      const intersection = TimeInterval.intersect(\n        intervals.get(i),\n        interval,\n        scratchTimeInterval,\n      );\n      if (!intersection.isEmpty) {\n        // remove data from the contained properties\n        removePropertyData(intersection.data, interval);\n      }\n    }\n    // remove the intervals from the composite\n    intervals.removeInterval(interval);\n    return;\n  }\n}\n\nfunction processPacketData(\n  type,\n  object,\n  propertyName,\n  packetData,\n  interval,\n  sourceUri,\n  entityCollection,\n) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  if (Array.isArray(packetData)) {\n    for (let i = 0, len = packetData.length; i < len; ++i) {\n      processProperty(\n        type,\n        object,\n        propertyName,\n        packetData[i],\n        interval,\n        sourceUri,\n        entityCollection,\n      );\n    }\n  } else {\n    processProperty(\n      type,\n      object,\n      propertyName,\n      packetData,\n      interval,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processPositionProperty(\n  object,\n  propertyName,\n  packetData,\n  constrainedInterval,\n  sourceUri,\n  entityCollection,\n) {\n  let combinedInterval = intervalFromString(packetData.interval);\n  if (defined(constrainedInterval)) {\n    if (defined(combinedInterval)) {\n      combinedInterval = TimeInterval.intersect(\n        combinedInterval,\n        constrainedInterval,\n        scratchTimeInterval,\n      );\n    } else {\n      combinedInterval = constrainedInterval;\n    }\n  }\n\n  const numberOfDerivatives = defined(packetData.cartesianVelocity) ? 1 : 0;\n  const packedLength = Cartesian3.packedLength * (numberOfDerivatives + 1);\n  let unwrappedInterval;\n  let unwrappedIntervalLength;\n  const isValue = !defined(packetData.reference);\n  const hasInterval =\n    defined(combinedInterval) &&\n    !combinedInterval.equals(Iso8601.MAXIMUM_INTERVAL);\n\n  if (packetData.delete === true) {\n    // If deleting this property for all time, we can simply set to undefined and return.\n    if (!hasInterval) {\n      object[propertyName] = undefined;\n      return;\n    }\n\n    // Deleting depends on the type of property we have.\n    return removePositionPropertyData(object[propertyName], combinedInterval);\n  }\n\n  let referenceFrame;\n  let isSampled = false;\n\n  if (isValue) {\n    if (defined(packetData.referenceFrame)) {\n      referenceFrame = ReferenceFrame[packetData.referenceFrame];\n    }\n    referenceFrame = referenceFrame ?? ReferenceFrame.FIXED;\n    unwrappedInterval = unwrapCartesianInterval(packetData);\n    unwrappedIntervalLength = unwrappedInterval.length ?? 1;\n    isSampled = unwrappedIntervalLength > packedLength;\n  }\n\n  // Any time a constant value is assigned, it completely blows away anything else.\n  if (!isSampled && !hasInterval) {\n    if (isValue) {\n      object[propertyName] = new ConstantPositionProperty(\n        Cartesian3.unpack(unwrappedInterval),\n        referenceFrame,\n      );\n    } else {\n      object[propertyName] = createReferenceProperty(\n        entityCollection,\n        packetData.reference,\n      );\n    }\n    return;\n  }\n\n  let property = object[propertyName];\n\n  let epoch;\n  const packetEpoch = packetData.epoch;\n  if (defined(packetEpoch)) {\n    epoch = JulianDate.fromIso8601(packetEpoch);\n  }\n\n  // Without an interval, any sampled value is infinite, meaning it completely\n  // replaces any non-sampled property that may exist.\n  if (isSampled && !hasInterval) {\n    if (\n      !(property instanceof SampledPositionProperty) ||\n      (defined(referenceFrame) && property.referenceFrame !== referenceFrame)\n    ) {\n      object[propertyName] = property = new SampledPositionProperty(\n        referenceFrame,\n        numberOfDerivatives,\n      );\n    }\n    property.addSamplesPackedArray(unwrappedInterval, epoch);\n    updateInterpolationSettings(packetData, property);\n    return;\n  }\n\n  let interval;\n\n  // A constant value with an interval is normally part of a TimeIntervalCollection,\n  // However, if the current property is not a time-interval collection, we need\n  // to turn it into a Composite, preserving the old data with the new interval.\n  if (!isSampled && hasInterval) {\n    // Create a new interval for the constant value.\n    combinedInterval = combinedInterval.clone();\n    if (isValue) {\n      combinedInterval.data = Cartesian3.unpack(unwrappedInterval);\n    } else {\n      combinedInterval.data = createReferenceProperty(\n        entityCollection,\n        packetData.reference,\n      );\n    }\n\n    // If no property exists, simply use a new interval collection\n    if (!defined(property)) {\n      if (isValue) {\n        property = new TimeIntervalCollectionPositionProperty(referenceFrame);\n      } else {\n        property = new CompositePositionProperty(referenceFrame);\n      }\n      object[propertyName] = property;\n    }\n\n    if (\n      isValue &&\n      property instanceof TimeIntervalCollectionPositionProperty &&\n      defined(referenceFrame) &&\n      property.referenceFrame === referenceFrame\n    ) {\n      // If we create a collection, or it already existed, use it.\n      property.intervals.addInterval(combinedInterval);\n    } else if (property instanceof CompositePositionProperty) {\n      // If the collection was already a CompositePositionProperty, use it.\n      if (isValue) {\n        combinedInterval.data = new ConstantPositionProperty(\n          combinedInterval.data,\n          referenceFrame,\n        );\n      }\n      property.intervals.addInterval(combinedInterval);\n    } else {\n      // Otherwise, create a CompositePositionProperty but preserve the existing data.\n      object[propertyName] = property =\n        convertPositionPropertyToComposite(property);\n\n      // Change the new data to a ConstantPositionProperty and add it.\n      if (isValue) {\n        combinedInterval.data = new ConstantPositionProperty(\n          combinedInterval.data,\n          referenceFrame,\n        );\n      }\n      property.intervals.addInterval(combinedInterval);\n    }\n\n    return;\n  }\n\n  // isSampled && hasInterval\n  if (!defined(property)) {\n    object[propertyName] = property = new CompositePositionProperty(\n      referenceFrame,\n    );\n  } else if (!(property instanceof CompositePositionProperty)) {\n    // Create a CompositeProperty but preserve the existing data.\n    object[propertyName] = property =\n      convertPositionPropertyToComposite(property);\n  }\n\n  // Check if the interval already exists in the composite.\n  const intervals = property.intervals;\n  interval = intervals.findInterval(combinedInterval);\n  if (\n    !defined(interval) ||\n    !(interval.data instanceof SampledPositionProperty) ||\n    (defined(referenceFrame) && interval.data.referenceFrame !== referenceFrame)\n  ) {\n    // If not, create a SampledPositionProperty for it.\n    interval = combinedInterval.clone();\n    interval.data = new SampledPositionProperty(\n      referenceFrame,\n      numberOfDerivatives,\n    );\n    intervals.addInterval(interval);\n  }\n  interval.data.addSamplesPackedArray(unwrappedInterval, epoch);\n  updateInterpolationSettings(packetData, interval.data);\n}\n\nfunction removePositionPropertyData(property, interval) {\n  if (property instanceof SampledPositionProperty) {\n    property.removeSamples(interval);\n    return;\n  } else if (property instanceof TimeIntervalCollectionPositionProperty) {\n    property.intervals.removeInterval(interval);\n    return;\n  } else if (property instanceof CompositePositionProperty) {\n    const intervals = property.intervals;\n    for (let i = 0; i < intervals.length; ++i) {\n      const intersection = TimeInterval.intersect(\n        intervals.get(i),\n        interval,\n        scratchTimeInterval,\n      );\n      if (!intersection.isEmpty) {\n        // remove data from the contained properties\n        removePositionPropertyData(intersection.data, interval);\n      }\n    }\n    // remove the intervals from the composite\n    intervals.removeInterval(interval);\n    return;\n  }\n}\n\nfunction processPositionPacketData(\n  object,\n  propertyName,\n  packetData,\n  interval,\n  sourceUri,\n  entityCollection,\n) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  if (Array.isArray(packetData)) {\n    for (let i = 0, len = packetData.length; i < len; ++i) {\n      processPositionProperty(\n        object,\n        propertyName,\n        packetData[i],\n        interval,\n        sourceUri,\n        entityCollection,\n      );\n    }\n  } else {\n    processPositionProperty(\n      object,\n      propertyName,\n      packetData,\n      interval,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processShapePacketData(\n  object,\n  propertyName,\n  packetData,\n  entityCollection,\n) {\n  if (defined(packetData.references)) {\n    processReferencesArrayPacketData(\n      object,\n      propertyName,\n      packetData.references,\n      packetData.interval,\n      entityCollection,\n      PropertyArray,\n      CompositeProperty,\n    );\n  } else {\n    if (defined(packetData.cartesian2)) {\n      packetData.array = Cartesian2.unpackArray(packetData.cartesian2);\n    } else if (defined(packetData.cartesian)) {\n      // for backwards compatibility, also accept `cartesian`\n      packetData.array = Cartesian2.unpackArray(packetData.cartesian);\n    }\n\n    if (defined(packetData.array)) {\n      processPacketData(\n        Array,\n        object,\n        propertyName,\n        packetData,\n        undefined,\n        undefined,\n        entityCollection,\n      );\n    }\n  }\n}\n\nfunction processMaterialProperty(\n  object,\n  propertyName,\n  packetData,\n  constrainedInterval,\n  sourceUri,\n  entityCollection,\n) {\n  let combinedInterval = intervalFromString(packetData.interval);\n  if (defined(constrainedInterval)) {\n    if (defined(combinedInterval)) {\n      combinedInterval = TimeInterval.intersect(\n        combinedInterval,\n        constrainedInterval,\n        scratchTimeInterval,\n      );\n    } else {\n      combinedInterval = constrainedInterval;\n    }\n  }\n\n  let property = object[propertyName];\n  let existingMaterial;\n  let existingInterval;\n\n  if (defined(combinedInterval)) {\n    if (!(property instanceof CompositeMaterialProperty)) {\n      property = new CompositeMaterialProperty();\n      object[propertyName] = property;\n    }\n    //See if we already have data at that interval.\n    const thisIntervals = property.intervals;\n    existingInterval = thisIntervals.findInterval({\n      start: combinedInterval.start,\n      stop: combinedInterval.stop,\n    });\n    if (defined(existingInterval)) {\n      //We have an interval, but we need to make sure the\n      //new data is the same type of material as the old data.\n      existingMaterial = existingInterval.data;\n    } else {\n      //If not, create it.\n      existingInterval = combinedInterval.clone();\n      thisIntervals.addInterval(existingInterval);\n    }\n  } else {\n    existingMaterial = property;\n  }\n\n  let materialData;\n  if (defined(packetData.solidColor)) {\n    if (!(existingMaterial instanceof ColorMaterialProperty)) {\n      existingMaterial = new ColorMaterialProperty();\n    }\n    materialData = packetData.solidColor;\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"color\",\n      materialData.color,\n      undefined,\n      undefined,\n      entityCollection,\n    );\n  } else if (defined(packetData.grid)) {\n    if (!(existingMaterial instanceof GridMaterialProperty)) {\n      existingMaterial = new GridMaterialProperty();\n    }\n    materialData = packetData.grid;\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"color\",\n      materialData.color,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"cellAlpha\",\n      materialData.cellAlpha,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Cartesian2,\n      existingMaterial,\n      \"lineCount\",\n      materialData.lineCount,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Cartesian2,\n      existingMaterial,\n      \"lineThickness\",\n      materialData.lineThickness,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Cartesian2,\n      existingMaterial,\n      \"lineOffset\",\n      materialData.lineOffset,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  } else if (defined(packetData.image)) {\n    if (!(existingMaterial instanceof ImageMaterialProperty)) {\n      existingMaterial = new ImageMaterialProperty();\n    }\n    materialData = packetData.image;\n    processPacketData(\n      Image,\n      existingMaterial,\n      \"image\",\n      materialData.image,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Cartesian2,\n      existingMaterial,\n      \"repeat\",\n      materialData.repeat,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"color\",\n      materialData.color,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Boolean,\n      existingMaterial,\n      \"transparent\",\n      materialData.transparent,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  } else if (defined(packetData.stripe)) {\n    if (!(existingMaterial instanceof StripeMaterialProperty)) {\n      existingMaterial = new StripeMaterialProperty();\n    }\n    materialData = packetData.stripe;\n    processPacketData(\n      StripeOrientation,\n      existingMaterial,\n      \"orientation\",\n      materialData.orientation,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"evenColor\",\n      materialData.evenColor,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"oddColor\",\n      materialData.oddColor,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"offset\",\n      materialData.offset,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"repeat\",\n      materialData.repeat,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  } else if (defined(packetData.polylineOutline)) {\n    if (!(existingMaterial instanceof PolylineOutlineMaterialProperty)) {\n      existingMaterial = new PolylineOutlineMaterialProperty();\n    }\n    materialData = packetData.polylineOutline;\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"color\",\n      materialData.color,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"outlineColor\",\n      materialData.outlineColor,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"outlineWidth\",\n      materialData.outlineWidth,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  } else if (defined(packetData.polylineGlow)) {\n    if (!(existingMaterial instanceof PolylineGlowMaterialProperty)) {\n      existingMaterial = new PolylineGlowMaterialProperty();\n    }\n    materialData = packetData.polylineGlow;\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"color\",\n      materialData.color,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"glowPower\",\n      materialData.glowPower,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"taperPower\",\n      materialData.taperPower,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  } else if (defined(packetData.polylineArrow)) {\n    if (!(existingMaterial instanceof PolylineArrowMaterialProperty)) {\n      existingMaterial = new PolylineArrowMaterialProperty();\n    }\n    materialData = packetData.polylineArrow;\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"color\",\n      materialData.color,\n      undefined,\n      undefined,\n      entityCollection,\n    );\n  } else if (defined(packetData.polylineDash)) {\n    if (!(existingMaterial instanceof PolylineDashMaterialProperty)) {\n      existingMaterial = new PolylineDashMaterialProperty();\n    }\n    materialData = packetData.polylineDash;\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"color\",\n      materialData.color,\n      undefined,\n      undefined,\n      entityCollection,\n    );\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"gapColor\",\n      materialData.gapColor,\n      undefined,\n      undefined,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"dashLength\",\n      materialData.dashLength,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Number,\n      existingMaterial,\n      \"dashPattern\",\n      materialData.dashPattern,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  } else if (defined(packetData.checkerboard)) {\n    if (!(existingMaterial instanceof CheckerboardMaterialProperty)) {\n      existingMaterial = new CheckerboardMaterialProperty();\n    }\n    materialData = packetData.checkerboard;\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"evenColor\",\n      materialData.evenColor,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Color,\n      existingMaterial,\n      \"oddColor\",\n      materialData.oddColor,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Cartesian2,\n      existingMaterial,\n      \"repeat\",\n      materialData.repeat,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  }\n\n  if (defined(existingInterval)) {\n    existingInterval.data = existingMaterial;\n  } else {\n    object[propertyName] = existingMaterial;\n  }\n}\n\nfunction processMaterialPacketData(\n  object,\n  propertyName,\n  packetData,\n  interval,\n  sourceUri,\n  entityCollection,\n) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  if (Array.isArray(packetData)) {\n    for (let i = 0, len = packetData.length; i < len; ++i) {\n      processMaterialProperty(\n        object,\n        propertyName,\n        packetData[i],\n        interval,\n        sourceUri,\n        entityCollection,\n      );\n    }\n  } else {\n    processMaterialProperty(\n      object,\n      propertyName,\n      packetData,\n      interval,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processName(entity, packet, entityCollection, sourceUri) {\n  const nameData = packet.name;\n  if (defined(nameData)) {\n    entity.name = packet.name;\n  }\n}\n\nfunction processDescription(entity, packet, entityCollection, sourceUri) {\n  const descriptionData = packet.description;\n  if (defined(descriptionData)) {\n    processPacketData(\n      String,\n      entity,\n      \"description\",\n      descriptionData,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processPosition(entity, packet, entityCollection, sourceUri) {\n  const positionData = packet.position;\n  if (defined(positionData)) {\n    processPositionPacketData(\n      entity,\n      \"position\",\n      positionData,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processViewFrom(entity, packet, entityCollection, sourceUri) {\n  const viewFromData = packet.viewFrom;\n  if (defined(viewFromData)) {\n    processPacketData(\n      Cartesian3,\n      entity,\n      \"viewFrom\",\n      viewFromData,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processOrientation(entity, packet, entityCollection, sourceUri) {\n  const orientationData = packet.orientation;\n  if (defined(orientationData)) {\n    processPacketData(\n      Quaternion,\n      entity,\n      \"orientation\",\n      orientationData,\n      undefined,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processProperties(entity, packet, entityCollection, sourceUri) {\n  const propertiesData = packet.properties;\n  if (defined(propertiesData)) {\n    if (!defined(entity.properties)) {\n      entity.properties = new PropertyBag();\n    }\n\n    // We cannot simply call processPacketData(entity, 'properties', propertyData, undefined, sourceUri, entityCollection)\n    // because each property of \"properties\" may vary separately.\n    // The properties will be accessible as entity.properties.myprop.getValue(time).\n\n    for (const key in propertiesData) {\n      if (propertiesData.hasOwnProperty(key)) {\n        if (!entity.properties.hasProperty(key)) {\n          entity.properties.addProperty(key);\n        }\n\n        const propertyData = propertiesData[key];\n        if (Array.isArray(propertyData)) {\n          for (let i = 0, len = propertyData.length; i < len; ++i) {\n            processProperty(\n              getPropertyType(propertyData[i]),\n              entity.properties,\n              key,\n              propertyData[i],\n              undefined,\n              sourceUri,\n              entityCollection,\n            );\n          }\n        } else {\n          processProperty(\n            getPropertyType(propertyData),\n            entity.properties,\n            key,\n            propertyData,\n            undefined,\n            sourceUri,\n            entityCollection,\n          );\n        }\n      }\n    }\n  }\n}\n\nfunction processReferencesArrayPacketData(\n  object,\n  propertyName,\n  references,\n  interval,\n  entityCollection,\n  PropertyArrayType,\n  CompositePropertyArrayType,\n) {\n  const properties = references.map(function (reference) {\n    return createReferenceProperty(entityCollection, reference);\n  });\n\n  if (defined(interval)) {\n    interval = intervalFromString(interval);\n    let property = object[propertyName];\n    if (!(property instanceof CompositePropertyArrayType)) {\n      // If the property was not already a CompositeProperty,\n      // create a CompositeProperty but preserve the existing data.\n\n      // Create the composite and add the old property, wrapped in an infinite interval.\n      const composite = new CompositePropertyArrayType();\n      composite.intervals.addInterval(wrapPropertyInInfiniteInterval(property));\n\n      object[propertyName] = property = composite;\n    }\n\n    interval.data = new PropertyArrayType(properties);\n    property.intervals.addInterval(interval);\n  } else {\n    object[propertyName] = new PropertyArrayType(properties);\n  }\n}\n\nfunction processArrayPacketData(\n  object,\n  propertyName,\n  packetData,\n  entityCollection,\n) {\n  const references = packetData.references;\n  if (defined(references)) {\n    processReferencesArrayPacketData(\n      object,\n      propertyName,\n      references,\n      packetData.interval,\n      entityCollection,\n      PropertyArray,\n      CompositeProperty,\n    );\n  } else {\n    processPacketData(\n      Array,\n      object,\n      propertyName,\n      packetData,\n      undefined,\n      undefined,\n      entityCollection,\n    );\n  }\n}\n\nfunction processArray(object, propertyName, packetData, entityCollection) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  if (Array.isArray(packetData)) {\n    for (let i = 0, length = packetData.length; i < length; ++i) {\n      processArrayPacketData(\n        object,\n        propertyName,\n        packetData[i],\n        entityCollection,\n      );\n    }\n  } else {\n    processArrayPacketData(object, propertyName, packetData, entityCollection);\n  }\n}\n\nfunction processPositionArrayPacketData(\n  object,\n  propertyName,\n  packetData,\n  entityCollection,\n) {\n  const references = packetData.references;\n  if (defined(references)) {\n    processReferencesArrayPacketData(\n      object,\n      propertyName,\n      references,\n      packetData.interval,\n      entityCollection,\n      PositionPropertyArray,\n      CompositePositionProperty,\n    );\n  } else {\n    if (defined(packetData.cartesian)) {\n      packetData.array = Cartesian3.unpackArray(packetData.cartesian);\n    } else if (defined(packetData.cartographicRadians)) {\n      packetData.array = Cartesian3.fromRadiansArrayHeights(\n        packetData.cartographicRadians,\n        Ellipsoid.default,\n      );\n    } else if (defined(packetData.cartographicDegrees)) {\n      packetData.array = Cartesian3.fromDegreesArrayHeights(\n        packetData.cartographicDegrees,\n        Ellipsoid.default,\n      );\n    }\n\n    if (defined(packetData.array)) {\n      processPacketData(\n        Array,\n        object,\n        propertyName,\n        packetData,\n        undefined,\n        undefined,\n        entityCollection,\n      );\n    }\n  }\n}\n\nfunction processPositionArray(\n  object,\n  propertyName,\n  packetData,\n  entityCollection,\n) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  if (Array.isArray(packetData)) {\n    for (let i = 0, length = packetData.length; i < length; ++i) {\n      processPositionArrayPacketData(\n        object,\n        propertyName,\n        packetData[i],\n        entityCollection,\n      );\n    }\n  } else {\n    processPositionArrayPacketData(\n      object,\n      propertyName,\n      packetData,\n      entityCollection,\n    );\n  }\n}\n\nfunction unpackCartesianArray(array) {\n  return Cartesian3.unpackArray(array);\n}\n\nfunction unpackCartographicRadiansArray(array) {\n  return Cartesian3.fromRadiansArrayHeights(array, Ellipsoid.default);\n}\n\nfunction unpackCartographicDegreesArray(array) {\n  return Cartesian3.fromDegreesArrayHeights(array, Ellipsoid.default);\n}\n\nfunction processPositionArrayOfArraysPacketData(\n  object,\n  propertyName,\n  packetData,\n  entityCollection,\n) {\n  const references = packetData.references;\n  if (defined(references)) {\n    const properties = references.map(function (referenceArray) {\n      const tempObj = {};\n      processReferencesArrayPacketData(\n        tempObj,\n        \"positions\",\n        referenceArray,\n        packetData.interval,\n        entityCollection,\n        PositionPropertyArray,\n        CompositePositionProperty,\n      );\n      return tempObj.positions;\n    });\n    object[propertyName] = new PositionPropertyArray(properties);\n  } else {\n    if (defined(packetData.cartesian)) {\n      packetData.array = packetData.cartesian.map(unpackCartesianArray);\n    } else if (defined(packetData.cartographicRadians)) {\n      packetData.array = packetData.cartographicRadians.map(\n        unpackCartographicRadiansArray,\n      );\n    } else if (defined(packetData.cartographicDegrees)) {\n      packetData.array = packetData.cartographicDegrees.map(\n        unpackCartographicDegreesArray,\n      );\n    }\n\n    if (defined(packetData.array)) {\n      processPacketData(\n        Array,\n        object,\n        propertyName,\n        packetData,\n        undefined,\n        undefined,\n        entityCollection,\n      );\n    }\n  }\n}\n\nfunction processPositionArrayOfArrays(\n  object,\n  propertyName,\n  packetData,\n  entityCollection,\n) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  if (Array.isArray(packetData)) {\n    for (let i = 0, length = packetData.length; i < length; ++i) {\n      processPositionArrayOfArraysPacketData(\n        object,\n        propertyName,\n        packetData[i],\n        entityCollection,\n      );\n    }\n  } else {\n    processPositionArrayOfArraysPacketData(\n      object,\n      propertyName,\n      packetData,\n      entityCollection,\n    );\n  }\n}\n\nfunction processShape(object, propertyName, packetData, entityCollection) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  if (Array.isArray(packetData)) {\n    for (let i = 0, length = packetData.length; i < length; i++) {\n      processShapePacketData(\n        object,\n        propertyName,\n        packetData[i],\n        entityCollection,\n      );\n    }\n  } else {\n    processShapePacketData(object, propertyName, packetData, entityCollection);\n  }\n}\n\nfunction processAvailability(entity, packet, entityCollection, sourceUri) {\n  const packetData = packet.availability;\n  if (!defined(packetData)) {\n    return;\n  }\n\n  let intervals;\n  if (Array.isArray(packetData)) {\n    for (let i = 0, len = packetData.length; i < len; ++i) {\n      if (!defined(intervals)) {\n        intervals = new TimeIntervalCollection();\n      }\n      intervals.addInterval(intervalFromString(packetData[i]));\n    }\n  } else {\n    intervals = new TimeIntervalCollection();\n    intervals.addInterval(intervalFromString(packetData));\n  }\n  entity.availability = intervals;\n}\n\nfunction processAlignedAxis(\n  billboard,\n  packetData,\n  interval,\n  sourceUri,\n  entityCollection,\n) {\n  if (!defined(packetData)) {\n    return;\n  }\n\n  processPacketData(\n    UnitCartesian3,\n    billboard,\n    \"alignedAxis\",\n    packetData,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processBillboard(entity, packet, entityCollection, sourceUri) {\n  const billboardData = packet.billboard;\n  if (!defined(billboardData)) {\n    return;\n  }\n\n  const interval = intervalFromString(billboardData.interval);\n  let billboard = entity.billboard;\n  if (!defined(billboard)) {\n    entity.billboard = billboard = new BillboardGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    billboard,\n    \"show\",\n    billboardData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Image,\n    billboard,\n    \"image\",\n    billboardData.image,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    billboard,\n    \"scale\",\n    billboardData.scale,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian2,\n    billboard,\n    \"pixelOffset\",\n    billboardData.pixelOffset,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian3,\n    billboard,\n    \"eyeOffset\",\n    billboardData.eyeOffset,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HorizontalOrigin,\n    billboard,\n    \"horizontalOrigin\",\n    billboardData.horizontalOrigin,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    VerticalOrigin,\n    billboard,\n    \"verticalOrigin\",\n    billboardData.verticalOrigin,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    billboard,\n    \"heightReference\",\n    billboardData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    billboard,\n    \"color\",\n    billboardData.color,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Rotation,\n    billboard,\n    \"rotation\",\n    billboardData.rotation,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processAlignedAxis(\n    billboard,\n    billboardData.alignedAxis,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    billboard,\n    \"sizeInMeters\",\n    billboardData.sizeInMeters,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    billboard,\n    \"width\",\n    billboardData.width,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    billboard,\n    \"height\",\n    billboardData.height,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    billboard,\n    \"scaleByDistance\",\n    billboardData.scaleByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    billboard,\n    \"translucencyByDistance\",\n    billboardData.translucencyByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    billboard,\n    \"pixelOffsetScaleByDistance\",\n    billboardData.pixelOffsetScaleByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    BoundingRectangle,\n    billboard,\n    \"imageSubRegion\",\n    billboardData.imageSubRegion,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    billboard,\n    \"distanceDisplayCondition\",\n    billboardData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    billboard,\n    \"disableDepthTestDistance\",\n    billboardData.disableDepthTestDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processBox(entity, packet, entityCollection, sourceUri) {\n  const boxData = packet.box;\n  if (!defined(boxData)) {\n    return;\n  }\n\n  const interval = intervalFromString(boxData.interval);\n  let box = entity.box;\n  if (!defined(box)) {\n    entity.box = box = new BoxGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    box,\n    \"show\",\n    boxData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian3,\n    box,\n    \"dimensions\",\n    boxData.dimensions,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    box,\n    \"heightReference\",\n    boxData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    box,\n    \"fill\",\n    boxData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    box,\n    \"material\",\n    boxData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    box,\n    \"outline\",\n    boxData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    box,\n    \"outlineColor\",\n    boxData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    box,\n    \"outlineWidth\",\n    boxData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    box,\n    \"shadows\",\n    boxData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    box,\n    \"distanceDisplayCondition\",\n    boxData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processCorridor(entity, packet, entityCollection, sourceUri) {\n  const corridorData = packet.corridor;\n  if (!defined(corridorData)) {\n    return;\n  }\n\n  const interval = intervalFromString(corridorData.interval);\n  let corridor = entity.corridor;\n  if (!defined(corridor)) {\n    entity.corridor = corridor = new CorridorGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    corridor,\n    \"show\",\n    corridorData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPositionArray(\n    corridor,\n    \"positions\",\n    corridorData.positions,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    corridor,\n    \"width\",\n    corridorData.width,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    corridor,\n    \"height\",\n    corridorData.height,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    corridor,\n    \"heightReference\",\n    corridorData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    corridor,\n    \"extrudedHeight\",\n    corridorData.extrudedHeight,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    corridor,\n    \"extrudedHeightReference\",\n    corridorData.extrudedHeightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    CornerType,\n    corridor,\n    \"cornerType\",\n    corridorData.cornerType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    corridor,\n    \"granularity\",\n    corridorData.granularity,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    corridor,\n    \"fill\",\n    corridorData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    corridor,\n    \"material\",\n    corridorData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    corridor,\n    \"outline\",\n    corridorData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    corridor,\n    \"outlineColor\",\n    corridorData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    corridor,\n    \"outlineWidth\",\n    corridorData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    corridor,\n    \"shadows\",\n    corridorData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    corridor,\n    \"distanceDisplayCondition\",\n    corridorData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ClassificationType,\n    corridor,\n    \"classificationType\",\n    corridorData.classificationType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    corridor,\n    \"zIndex\",\n    corridorData.zIndex,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processCylinder(entity, packet, entityCollection, sourceUri) {\n  const cylinderData = packet.cylinder;\n  if (!defined(cylinderData)) {\n    return;\n  }\n\n  const interval = intervalFromString(cylinderData.interval);\n  let cylinder = entity.cylinder;\n  if (!defined(cylinder)) {\n    entity.cylinder = cylinder = new CylinderGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    cylinder,\n    \"show\",\n    cylinderData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    cylinder,\n    \"length\",\n    cylinderData.length,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    cylinder,\n    \"topRadius\",\n    cylinderData.topRadius,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    cylinder,\n    \"bottomRadius\",\n    cylinderData.bottomRadius,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    cylinder,\n    \"heightReference\",\n    cylinderData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    cylinder,\n    \"fill\",\n    cylinderData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    cylinder,\n    \"material\",\n    cylinderData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    cylinder,\n    \"outline\",\n    cylinderData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    cylinder,\n    \"outlineColor\",\n    cylinderData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    cylinder,\n    \"outlineWidth\",\n    cylinderData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    cylinder,\n    \"numberOfVerticalLines\",\n    cylinderData.numberOfVerticalLines,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    cylinder,\n    \"slices\",\n    cylinderData.slices,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    cylinder,\n    \"shadows\",\n    cylinderData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    cylinder,\n    \"distanceDisplayCondition\",\n    cylinderData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processDocument(packet, dataSource) {\n  const version = packet.version;\n  if (defined(version)) {\n    if (typeof version === \"string\") {\n      const tokens = version.split(\".\");\n      if (tokens.length === 2) {\n        if (tokens[0] !== \"1\") {\n          throw new RuntimeError(\"Cesium only supports CZML version 1.\");\n        }\n        dataSource._version = version;\n      }\n    }\n  }\n\n  if (!defined(dataSource._version)) {\n    throw new RuntimeError(\n      \"CZML version information invalid.  It is expected to be a property on the document object in the <Major>.<Minor> version format.\",\n    );\n  }\n\n  const documentPacket = dataSource._documentPacket;\n\n  if (defined(packet.name)) {\n    documentPacket.name = packet.name;\n  }\n\n  const clockPacket = packet.clock;\n  if (defined(clockPacket)) {\n    const clock = documentPacket.clock;\n    if (!defined(clock)) {\n      documentPacket.clock = {\n        interval: clockPacket.interval,\n        currentTime: clockPacket.currentTime,\n        range: clockPacket.range,\n        step: clockPacket.step,\n        multiplier: clockPacket.multiplier,\n      };\n    } else {\n      clock.interval = clockPacket.interval ?? clock.interval;\n      clock.currentTime = clockPacket.currentTime ?? clock.currentTime;\n      clock.range = clockPacket.range ?? clock.range;\n      clock.step = clockPacket.step ?? clock.step;\n      clock.multiplier = clockPacket.multiplier ?? clock.multiplier;\n    }\n  }\n}\n\nfunction processEllipse(entity, packet, entityCollection, sourceUri) {\n  const ellipseData = packet.ellipse;\n  if (!defined(ellipseData)) {\n    return;\n  }\n\n  const interval = intervalFromString(ellipseData.interval);\n  let ellipse = entity.ellipse;\n  if (!defined(ellipse)) {\n    entity.ellipse = ellipse = new EllipseGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    ellipse,\n    \"show\",\n    ellipseData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"semiMajorAxis\",\n    ellipseData.semiMajorAxis,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"semiMinorAxis\",\n    ellipseData.semiMinorAxis,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"height\",\n    ellipseData.height,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    ellipse,\n    \"heightReference\",\n    ellipseData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"extrudedHeight\",\n    ellipseData.extrudedHeight,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    ellipse,\n    \"extrudedHeightReference\",\n    ellipseData.extrudedHeightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Rotation,\n    ellipse,\n    \"rotation\",\n    ellipseData.rotation,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Rotation,\n    ellipse,\n    \"stRotation\",\n    ellipseData.stRotation,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"granularity\",\n    ellipseData.granularity,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    ellipse,\n    \"fill\",\n    ellipseData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    ellipse,\n    \"material\",\n    ellipseData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    ellipse,\n    \"outline\",\n    ellipseData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    ellipse,\n    \"outlineColor\",\n    ellipseData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"outlineWidth\",\n    ellipseData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"numberOfVerticalLines\",\n    ellipseData.numberOfVerticalLines,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    ellipse,\n    \"shadows\",\n    ellipseData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    ellipse,\n    \"distanceDisplayCondition\",\n    ellipseData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ClassificationType,\n    ellipse,\n    \"classificationType\",\n    ellipseData.classificationType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipse,\n    \"zIndex\",\n    ellipseData.zIndex,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processEllipsoid(entity, packet, entityCollection, sourceUri) {\n  const ellipsoidData = packet.ellipsoid;\n  if (!defined(ellipsoidData)) {\n    return;\n  }\n\n  const interval = intervalFromString(ellipsoidData.interval);\n  let ellipsoid = entity.ellipsoid;\n  if (!defined(ellipsoid)) {\n    entity.ellipsoid = ellipsoid = new EllipsoidGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    ellipsoid,\n    \"show\",\n    ellipsoidData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian3,\n    ellipsoid,\n    \"radii\",\n    ellipsoidData.radii,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian3,\n    ellipsoid,\n    \"innerRadii\",\n    ellipsoidData.innerRadii,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"minimumClock\",\n    ellipsoidData.minimumClock,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"maximumClock\",\n    ellipsoidData.maximumClock,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"minimumCone\",\n    ellipsoidData.minimumCone,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"maximumCone\",\n    ellipsoidData.maximumCone,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    ellipsoid,\n    \"heightReference\",\n    ellipsoidData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    ellipsoid,\n    \"fill\",\n    ellipsoidData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    ellipsoid,\n    \"material\",\n    ellipsoidData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    ellipsoid,\n    \"outline\",\n    ellipsoidData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    ellipsoid,\n    \"outlineColor\",\n    ellipsoidData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"outlineWidth\",\n    ellipsoidData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"stackPartitions\",\n    ellipsoidData.stackPartitions,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"slicePartitions\",\n    ellipsoidData.slicePartitions,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    ellipsoid,\n    \"subdivisions\",\n    ellipsoidData.subdivisions,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    ellipsoid,\n    \"shadows\",\n    ellipsoidData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    ellipsoid,\n    \"distanceDisplayCondition\",\n    ellipsoidData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processLabel(entity, packet, entityCollection, sourceUri) {\n  const labelData = packet.label;\n  if (!defined(labelData)) {\n    return;\n  }\n\n  const interval = intervalFromString(labelData.interval);\n  let label = entity.label;\n  if (!defined(label)) {\n    entity.label = label = new LabelGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    label,\n    \"show\",\n    labelData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    String,\n    label,\n    \"text\",\n    labelData.text,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    String,\n    label,\n    \"font\",\n    labelData.font,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    LabelStyle,\n    label,\n    \"style\",\n    labelData.style,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    label,\n    \"scale\",\n    labelData.scale,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    label,\n    \"showBackground\",\n    labelData.showBackground,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    label,\n    \"backgroundColor\",\n    labelData.backgroundColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian2,\n    label,\n    \"backgroundPadding\",\n    labelData.backgroundPadding,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian2,\n    label,\n    \"pixelOffset\",\n    labelData.pixelOffset,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Cartesian3,\n    label,\n    \"eyeOffset\",\n    labelData.eyeOffset,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HorizontalOrigin,\n    label,\n    \"horizontalOrigin\",\n    labelData.horizontalOrigin,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    VerticalOrigin,\n    label,\n    \"verticalOrigin\",\n    labelData.verticalOrigin,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    label,\n    \"heightReference\",\n    labelData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    label,\n    \"fillColor\",\n    labelData.fillColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    label,\n    \"outlineColor\",\n    labelData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    label,\n    \"outlineWidth\",\n    labelData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    label,\n    \"translucencyByDistance\",\n    labelData.translucencyByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    label,\n    \"pixelOffsetScaleByDistance\",\n    labelData.pixelOffsetScaleByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    label,\n    \"scaleByDistance\",\n    labelData.scaleByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    label,\n    \"distanceDisplayCondition\",\n    labelData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    label,\n    \"disableDepthTestDistance\",\n    labelData.disableDepthTestDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processModel(entity, packet, entityCollection, sourceUri) {\n  const modelData = packet.model;\n  if (!defined(modelData)) {\n    return;\n  }\n\n  const interval = intervalFromString(modelData.interval);\n  let model = entity.model;\n  if (!defined(model)) {\n    entity.model = model = new ModelGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    model,\n    \"show\",\n    modelData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Uri,\n    model,\n    \"uri\",\n    modelData.gltf,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    model,\n    \"scale\",\n    modelData.scale,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    model,\n    \"minimumPixelSize\",\n    modelData.minimumPixelSize,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    model,\n    \"maximumScale\",\n    modelData.maximumScale,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    model,\n    \"incrementallyLoadTextures\",\n    modelData.incrementallyLoadTextures,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    model,\n    \"runAnimations\",\n    modelData.runAnimations,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    model,\n    \"clampAnimations\",\n    modelData.clampAnimations,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    model,\n    \"shadows\",\n    modelData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    model,\n    \"heightReference\",\n    modelData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    model,\n    \"silhouetteColor\",\n    modelData.silhouetteColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    model,\n    \"silhouetteSize\",\n    modelData.silhouetteSize,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    model,\n    \"color\",\n    modelData.color,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ColorBlendMode,\n    model,\n    \"colorBlendMode\",\n    modelData.colorBlendMode,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    model,\n    \"colorBlendAmount\",\n    modelData.colorBlendAmount,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    model,\n    \"distanceDisplayCondition\",\n    modelData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n\n  let i, len;\n  const nodeTransformationsData = modelData.nodeTransformations;\n  if (defined(nodeTransformationsData)) {\n    if (Array.isArray(nodeTransformationsData)) {\n      for (i = 0, len = nodeTransformationsData.length; i < len; ++i) {\n        processNodeTransformations(\n          model,\n          nodeTransformationsData[i],\n          interval,\n          sourceUri,\n          entityCollection,\n        );\n      }\n    } else {\n      processNodeTransformations(\n        model,\n        nodeTransformationsData,\n        interval,\n        sourceUri,\n        entityCollection,\n      );\n    }\n  }\n\n  const articulationsData = modelData.articulations;\n  if (defined(articulationsData)) {\n    if (Array.isArray(articulationsData)) {\n      for (i = 0, len = articulationsData.length; i < len; ++i) {\n        processArticulations(\n          model,\n          articulationsData[i],\n          interval,\n          sourceUri,\n          entityCollection,\n        );\n      }\n    } else {\n      processArticulations(\n        model,\n        articulationsData,\n        interval,\n        sourceUri,\n        entityCollection,\n      );\n    }\n  }\n}\n\nfunction processNodeTransformations(\n  model,\n  nodeTransformationsData,\n  constrainedInterval,\n  sourceUri,\n  entityCollection,\n) {\n  let combinedInterval = intervalFromString(nodeTransformationsData.interval);\n  if (defined(constrainedInterval)) {\n    if (defined(combinedInterval)) {\n      combinedInterval = TimeInterval.intersect(\n        combinedInterval,\n        constrainedInterval,\n        scratchTimeInterval,\n      );\n    } else {\n      combinedInterval = constrainedInterval;\n    }\n  }\n\n  let nodeTransformations = model.nodeTransformations;\n  const nodeNames = Object.keys(nodeTransformationsData);\n  for (let i = 0, len = nodeNames.length; i < len; ++i) {\n    const nodeName = nodeNames[i];\n    if (nodeName === \"interval\") {\n      continue;\n    }\n\n    const nodeTransformationData = nodeTransformationsData[nodeName];\n    if (!defined(nodeTransformationData)) {\n      continue;\n    }\n\n    if (!defined(nodeTransformations)) {\n      model.nodeTransformations = nodeTransformations = new PropertyBag();\n    }\n\n    if (!nodeTransformations.hasProperty(nodeName)) {\n      nodeTransformations.addProperty(nodeName);\n    }\n\n    let nodeTransformation = nodeTransformations[nodeName];\n    if (!defined(nodeTransformation)) {\n      nodeTransformations[nodeName] = nodeTransformation =\n        new NodeTransformationProperty();\n    }\n\n    processPacketData(\n      Cartesian3,\n      nodeTransformation,\n      \"translation\",\n      nodeTransformationData.translation,\n      combinedInterval,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Quaternion,\n      nodeTransformation,\n      \"rotation\",\n      nodeTransformationData.rotation,\n      combinedInterval,\n      sourceUri,\n      entityCollection,\n    );\n    processPacketData(\n      Cartesian3,\n      nodeTransformation,\n      \"scale\",\n      nodeTransformationData.scale,\n      combinedInterval,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processArticulations(\n  model,\n  articulationsData,\n  constrainedInterval,\n  sourceUri,\n  entityCollection,\n) {\n  let combinedInterval = intervalFromString(articulationsData.interval);\n  if (defined(constrainedInterval)) {\n    if (defined(combinedInterval)) {\n      combinedInterval = TimeInterval.intersect(\n        combinedInterval,\n        constrainedInterval,\n        scratchTimeInterval,\n      );\n    } else {\n      combinedInterval = constrainedInterval;\n    }\n  }\n\n  let articulations = model.articulations;\n  const keys = Object.keys(articulationsData);\n  for (let i = 0, len = keys.length; i < len; ++i) {\n    const key = keys[i];\n    if (key === \"interval\") {\n      continue;\n    }\n\n    const articulationStageData = articulationsData[key];\n    if (!defined(articulationStageData)) {\n      continue;\n    }\n\n    if (!defined(articulations)) {\n      model.articulations = articulations = new PropertyBag();\n    }\n\n    if (!articulations.hasProperty(key)) {\n      articulations.addProperty(key);\n    }\n\n    processPacketData(\n      Number,\n      articulations,\n      key,\n      articulationStageData,\n      combinedInterval,\n      sourceUri,\n      entityCollection,\n    );\n  }\n}\n\nfunction processPath(entity, packet, entityCollection, sourceUri) {\n  const pathData = packet.path;\n  if (!defined(pathData)) {\n    return;\n  }\n\n  const interval = intervalFromString(pathData.interval);\n  let path = entity.path;\n  if (!defined(path)) {\n    entity.path = path = new PathGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    path,\n    \"show\",\n    pathData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    path,\n    \"leadTime\",\n    pathData.leadTime,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    path,\n    \"trailTime\",\n    pathData.trailTime,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    path,\n    \"width\",\n    pathData.width,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    path,\n    \"resolution\",\n    pathData.resolution,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    path,\n    \"material\",\n    pathData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    path,\n    \"distanceDisplayCondition\",\n    pathData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processPoint(entity, packet, entityCollection, sourceUri) {\n  const pointData = packet.point;\n  if (!defined(pointData)) {\n    return;\n  }\n\n  const interval = intervalFromString(pointData.interval);\n  let point = entity.point;\n  if (!defined(point)) {\n    entity.point = point = new PointGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    point,\n    \"show\",\n    pointData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    point,\n    \"pixelSize\",\n    pointData.pixelSize,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    point,\n    \"heightReference\",\n    pointData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    point,\n    \"color\",\n    pointData.color,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    point,\n    \"outlineColor\",\n    pointData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    point,\n    \"outlineWidth\",\n    pointData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    point,\n    \"scaleByDistance\",\n    pointData.scaleByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    NearFarScalar,\n    point,\n    \"translucencyByDistance\",\n    pointData.translucencyByDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    point,\n    \"distanceDisplayCondition\",\n    pointData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    point,\n    \"disableDepthTestDistance\",\n    pointData.disableDepthTestDistance,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction PolygonHierarchyProperty(polygon) {\n  this.polygon = polygon;\n  this._definitionChanged = new Event();\n}\n\nObject.defineProperties(PolygonHierarchyProperty.prototype, {\n  isConstant: {\n    get: function () {\n      const positions = this.polygon._positions;\n      const holes = this.polygon._holes;\n      return (\n        (!defined(positions) || positions.isConstant) &&\n        (!defined(holes) || holes.isConstant)\n      );\n    },\n  },\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n});\n\nPolygonHierarchyProperty.prototype.getValue = function (time, result) {\n  let positions;\n  if (defined(this.polygon._positions)) {\n    positions = this.polygon._positions.getValue(time);\n  }\n\n  let holes;\n  if (defined(this.polygon._holes)) {\n    holes = this.polygon._holes.getValue(time);\n    if (defined(holes)) {\n      holes = holes.map(function (holePositions) {\n        return new PolygonHierarchy(holePositions);\n      });\n    }\n  }\n\n  if (!defined(result)) {\n    return new PolygonHierarchy(positions, holes);\n  }\n\n  result.positions = positions;\n  result.holes = holes;\n  return result;\n};\n\nPolygonHierarchyProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof PolygonHierarchyProperty &&\n      Property.equals(this.polygon._positions, other.polygon._positions) &&\n      Property.equals(this.polygon._holes, other.polygon._holes))\n  );\n};\n\nfunction processPolygon(entity, packet, entityCollection, sourceUri) {\n  const polygonData = packet.polygon;\n  if (!defined(polygonData)) {\n    return;\n  }\n\n  const interval = intervalFromString(polygonData.interval);\n  let polygon = entity.polygon;\n  if (!defined(polygon)) {\n    entity.polygon = polygon = new PolygonGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    polygon,\n    \"show\",\n    polygonData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n\n  // adapt 'position' property producing Cartesian[]\n  // and 'holes' property producing Cartesian[][]\n  // to a single property producing PolygonHierarchy\n  processPositionArray(\n    polygon,\n    \"_positions\",\n    polygonData.positions,\n    entityCollection,\n  );\n  processPositionArrayOfArrays(\n    polygon,\n    \"_holes\",\n    polygonData.holes,\n    entityCollection,\n  );\n  if (defined(polygon._positions) || defined(polygon._holes)) {\n    polygon.hierarchy = new PolygonHierarchyProperty(polygon);\n  }\n\n  processPacketData(\n    Number,\n    polygon,\n    \"height\",\n    polygonData.height,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    polygon,\n    \"heightReference\",\n    polygonData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polygon,\n    \"extrudedHeight\",\n    polygonData.extrudedHeight,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    polygon,\n    \"extrudedHeightReference\",\n    polygonData.extrudedHeightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Rotation,\n    polygon,\n    \"stRotation\",\n    polygonData.stRotation,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polygon,\n    \"granularity\",\n    polygonData.granularity,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polygon,\n    \"fill\",\n    polygonData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    polygon,\n    \"material\",\n    polygonData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polygon,\n    \"outline\",\n    polygonData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    polygon,\n    \"outlineColor\",\n    polygonData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polygon,\n    \"outlineWidth\",\n    polygonData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polygon,\n    \"perPositionHeight\",\n    polygonData.perPositionHeight,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polygon,\n    \"closeTop\",\n    polygonData.closeTop,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polygon,\n    \"closeBottom\",\n    polygonData.closeBottom,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ArcType,\n    polygon,\n    \"arcType\",\n    polygonData.arcType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    polygon,\n    \"shadows\",\n    polygonData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    polygon,\n    \"distanceDisplayCondition\",\n    polygonData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ClassificationType,\n    polygon,\n    \"classificationType\",\n    polygonData.classificationType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polygon,\n    \"zIndex\",\n    polygonData.zIndex,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction adaptFollowSurfaceToArcType(followSurface) {\n  return followSurface ? ArcType.GEODESIC : ArcType.NONE;\n}\n\nfunction processPolyline(entity, packet, entityCollection, sourceUri) {\n  const polylineData = packet.polyline;\n  if (!defined(polylineData)) {\n    return;\n  }\n\n  const interval = intervalFromString(polylineData.interval);\n  let polyline = entity.polyline;\n  if (!defined(polyline)) {\n    entity.polyline = polyline = new PolylineGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    polyline,\n    \"show\",\n    polylineData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPositionArray(\n    polyline,\n    \"positions\",\n    polylineData.positions,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polyline,\n    \"width\",\n    polylineData.width,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polyline,\n    \"granularity\",\n    polylineData.granularity,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    polyline,\n    \"material\",\n    polylineData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    polyline,\n    \"depthFailMaterial\",\n    polylineData.depthFailMaterial,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ArcType,\n    polyline,\n    \"arcType\",\n    polylineData.arcType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polyline,\n    \"clampToGround\",\n    polylineData.clampToGround,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    polyline,\n    \"shadows\",\n    polylineData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    polyline,\n    \"distanceDisplayCondition\",\n    polylineData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ClassificationType,\n    polyline,\n    \"classificationType\",\n    polylineData.classificationType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polyline,\n    \"zIndex\",\n    polylineData.zIndex,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n\n  // for backwards compatibility, adapt CZML followSurface to arcType.\n  if (defined(polylineData.followSurface) && !defined(polylineData.arcType)) {\n    const tempObj = {};\n    processPacketData(\n      Boolean,\n      tempObj,\n      \"followSurface\",\n      polylineData.followSurface,\n      interval,\n      sourceUri,\n      entityCollection,\n    );\n    polyline.arcType = createAdapterProperty(\n      tempObj.followSurface,\n      adaptFollowSurfaceToArcType,\n    );\n  }\n}\n\nfunction processPolylineVolume(entity, packet, entityCollection, sourceUri) {\n  const polylineVolumeData = packet.polylineVolume;\n  if (!defined(polylineVolumeData)) {\n    return;\n  }\n\n  const interval = intervalFromString(polylineVolumeData.interval);\n  let polylineVolume = entity.polylineVolume;\n  if (!defined(polylineVolume)) {\n    entity.polylineVolume = polylineVolume = new PolylineVolumeGraphics();\n  }\n\n  processPositionArray(\n    polylineVolume,\n    \"positions\",\n    polylineVolumeData.positions,\n    entityCollection,\n  );\n  processShape(\n    polylineVolume,\n    \"shape\",\n    polylineVolumeData.shape,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polylineVolume,\n    \"show\",\n    polylineVolumeData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    CornerType,\n    polylineVolume,\n    \"cornerType\",\n    polylineVolumeData.cornerType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polylineVolume,\n    \"fill\",\n    polylineVolumeData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    polylineVolume,\n    \"material\",\n    polylineVolumeData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    polylineVolume,\n    \"outline\",\n    polylineVolumeData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    polylineVolume,\n    \"outlineColor\",\n    polylineVolumeData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polylineVolume,\n    \"outlineWidth\",\n    polylineVolumeData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    polylineVolume,\n    \"granularity\",\n    polylineVolumeData.granularity,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    polylineVolume,\n    \"shadows\",\n    polylineVolumeData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    polylineVolume,\n    \"distanceDisplayCondition\",\n    polylineVolumeData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processRectangle(entity, packet, entityCollection, sourceUri) {\n  const rectangleData = packet.rectangle;\n  if (!defined(rectangleData)) {\n    return;\n  }\n\n  const interval = intervalFromString(rectangleData.interval);\n  let rectangle = entity.rectangle;\n  if (!defined(rectangle)) {\n    entity.rectangle = rectangle = new RectangleGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    rectangle,\n    \"show\",\n    rectangleData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Rectangle,\n    rectangle,\n    \"coordinates\",\n    rectangleData.coordinates,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    rectangle,\n    \"height\",\n    rectangleData.height,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    rectangle,\n    \"heightReference\",\n    rectangleData.heightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    rectangle,\n    \"extrudedHeight\",\n    rectangleData.extrudedHeight,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    HeightReference,\n    rectangle,\n    \"extrudedHeightReference\",\n    rectangleData.extrudedHeightReference,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Rotation,\n    rectangle,\n    \"rotation\",\n    rectangleData.rotation,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Rotation,\n    rectangle,\n    \"stRotation\",\n    rectangleData.stRotation,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    rectangle,\n    \"granularity\",\n    rectangleData.granularity,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    rectangle,\n    \"fill\",\n    rectangleData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    rectangle,\n    \"material\",\n    rectangleData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    rectangle,\n    \"outline\",\n    rectangleData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    rectangle,\n    \"outlineColor\",\n    rectangleData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    rectangle,\n    \"outlineWidth\",\n    rectangleData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    rectangle,\n    \"shadows\",\n    rectangleData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    rectangle,\n    \"distanceDisplayCondition\",\n    rectangleData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ClassificationType,\n    rectangle,\n    \"classificationType\",\n    rectangleData.classificationType,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    rectangle,\n    \"zIndex\",\n    rectangleData.zIndex,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processTileset(entity, packet, entityCollection, sourceUri) {\n  const tilesetData = packet.tileset;\n  if (!defined(tilesetData)) {\n    return;\n  }\n\n  const interval = intervalFromString(tilesetData.interval);\n  let tileset = entity.tileset;\n  if (!defined(tileset)) {\n    entity.tileset = tileset = new Cesium3DTilesetGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    tileset,\n    \"show\",\n    tilesetData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Uri,\n    tileset,\n    \"uri\",\n    tilesetData.uri,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    tileset,\n    \"maximumScreenSpaceError\",\n    tilesetData.maximumScreenSpaceError,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processWall(entity, packet, entityCollection, sourceUri) {\n  const wallData = packet.wall;\n  if (!defined(wallData)) {\n    return;\n  }\n\n  const interval = intervalFromString(wallData.interval);\n  let wall = entity.wall;\n  if (!defined(wall)) {\n    entity.wall = wall = new WallGraphics();\n  }\n\n  processPacketData(\n    Boolean,\n    wall,\n    \"show\",\n    wallData.show,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPositionArray(wall, \"positions\", wallData.positions, entityCollection);\n  processArray(\n    wall,\n    \"minimumHeights\",\n    wallData.minimumHeights,\n    entityCollection,\n  );\n  processArray(\n    wall,\n    \"maximumHeights\",\n    wallData.maximumHeights,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    wall,\n    \"granularity\",\n    wallData.granularity,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    wall,\n    \"fill\",\n    wallData.fill,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processMaterialPacketData(\n    wall,\n    \"material\",\n    wallData.material,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Boolean,\n    wall,\n    \"outline\",\n    wallData.outline,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Color,\n    wall,\n    \"outlineColor\",\n    wallData.outlineColor,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    Number,\n    wall,\n    \"outlineWidth\",\n    wallData.outlineWidth,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    ShadowMode,\n    wall,\n    \"shadows\",\n    wallData.shadows,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n  processPacketData(\n    DistanceDisplayCondition,\n    wall,\n    \"distanceDisplayCondition\",\n    wallData.distanceDisplayCondition,\n    interval,\n    sourceUri,\n    entityCollection,\n  );\n}\n\nfunction processCzmlPacket(\n  packet,\n  entityCollection,\n  updaterFunctions,\n  sourceUri,\n  dataSource,\n) {\n  let objectId = packet.id;\n  if (!defined(objectId)) {\n    objectId = createGuid();\n  }\n\n  currentId = objectId;\n\n  if (!defined(dataSource._version) && objectId !== \"document\") {\n    throw new RuntimeError(\n      \"The first CZML packet is required to be the document object.\",\n    );\n  }\n\n  if (packet[\"delete\"] === true) {\n    entityCollection.removeById(objectId);\n  } else if (objectId === \"document\") {\n    processDocument(packet, dataSource);\n  } else {\n    const entity = entityCollection.getOrCreateEntity(objectId);\n\n    const parentId = packet.parent;\n    if (defined(parentId)) {\n      entity.parent = entityCollection.getOrCreateEntity(parentId);\n    }\n\n    for (let i = updaterFunctions.length - 1; i > -1; i--) {\n      updaterFunctions[i](entity, packet, entityCollection, sourceUri);\n    }\n  }\n\n  currentId = undefined;\n}\n\nfunction updateClock(dataSource) {\n  let clock;\n  const clockPacket = dataSource._documentPacket.clock;\n  if (!defined(clockPacket)) {\n    if (!defined(dataSource._clock)) {\n      const availability = dataSource._entityCollection.computeAvailability();\n      if (!availability.start.equals(Iso8601.MINIMUM_VALUE)) {\n        const startTime = availability.start;\n        const stopTime = availability.stop;\n        const totalSeconds = JulianDate.secondsDifference(stopTime, startTime);\n        const multiplier = Math.round(totalSeconds / 120.0);\n\n        clock = new DataSourceClock();\n        clock.startTime = JulianDate.clone(startTime);\n        clock.stopTime = JulianDate.clone(stopTime);\n        clock.clockRange = ClockRange.LOOP_STOP;\n        clock.multiplier = multiplier;\n        clock.currentTime = JulianDate.clone(startTime);\n        clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n        dataSource._clock = clock;\n        return true;\n      }\n    }\n    return false;\n  }\n\n  if (defined(dataSource._clock)) {\n    clock = dataSource._clock.clone();\n  } else {\n    clock = new DataSourceClock();\n    clock.startTime = Iso8601.MINIMUM_VALUE.clone();\n    clock.stopTime = Iso8601.MAXIMUM_VALUE.clone();\n    clock.currentTime = Iso8601.MINIMUM_VALUE.clone();\n    clock.clockRange = ClockRange.LOOP_STOP;\n    clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n    clock.multiplier = 1.0;\n  }\n\n  const interval = intervalFromString(clockPacket.interval);\n  if (defined(interval)) {\n    clock.startTime = interval.start;\n    clock.stopTime = interval.stop;\n  }\n\n  if (defined(clockPacket.currentTime)) {\n    clock.currentTime = JulianDate.fromIso8601(clockPacket.currentTime);\n  }\n  if (defined(clockPacket.range)) {\n    clock.clockRange = ClockRange[clockPacket.range] ?? ClockRange.LOOP_STOP;\n  }\n  if (defined(clockPacket.step)) {\n    clock.clockStep =\n      ClockStep[clockPacket.step] ?? ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n  }\n  if (defined(clockPacket.multiplier)) {\n    clock.multiplier = clockPacket.multiplier;\n  }\n\n  if (!clock.equals(dataSource._clock)) {\n    dataSource._clock = clock.clone(dataSource._clock);\n    return true;\n  }\n\n  return false;\n}\n\nfunction load(dataSource, czml, options, clear) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(czml)) {\n    throw new DeveloperError(\"czml is required.\");\n  }\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let promise = czml;\n  let sourceUri = options.sourceUri;\n\n  // User specified credit\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  dataSource._credit = credit;\n\n  // If the czml is a URL\n  if (typeof czml === \"string\" || czml instanceof Resource) {\n    czml = Resource.createIfNeeded(czml);\n    promise = czml.fetchJson();\n    sourceUri = sourceUri ?? czml.clone();\n\n    // Add resource credits to our list of credits to display\n    const resourceCredits = dataSource._resourceCredits;\n    const credits = czml.credits;\n    if (defined(credits)) {\n      const length = credits.length;\n      for (let i = 0; i < length; i++) {\n        resourceCredits.push(credits[i]);\n      }\n    }\n  }\n\n  sourceUri = Resource.createIfNeeded(sourceUri);\n\n  DataSource.setLoading(dataSource, true);\n\n  return Promise.resolve(promise)\n    .then(function (czml) {\n      return loadCzml(dataSource, czml, sourceUri, clear);\n    })\n    .catch(function (error) {\n      DataSource.setLoading(dataSource, false);\n      dataSource._error.raiseEvent(dataSource, error);\n      console.log(error);\n      return Promise.reject(error);\n    });\n}\n\nfunction loadCzml(dataSource, czml, sourceUri, clear) {\n  DataSource.setLoading(dataSource, true);\n  const entityCollection = dataSource._entityCollection;\n\n  if (clear) {\n    dataSource._version = undefined;\n    dataSource._documentPacket = new DocumentPacket();\n    entityCollection.removeAll();\n  }\n\n  CzmlDataSource._processCzml(\n    czml,\n    entityCollection,\n    sourceUri,\n    undefined,\n    dataSource,\n  );\n\n  let raiseChangedEvent = updateClock(dataSource);\n\n  const documentPacket = dataSource._documentPacket;\n  if (\n    defined(documentPacket.name) &&\n    dataSource._name !== documentPacket.name\n  ) {\n    dataSource._name = documentPacket.name;\n    raiseChangedEvent = true;\n  } else if (!defined(dataSource._name) && defined(sourceUri)) {\n    dataSource._name = getFilenameFromUri(sourceUri.getUrlComponent());\n    raiseChangedEvent = true;\n  }\n\n  DataSource.setLoading(dataSource, false);\n  if (raiseChangedEvent) {\n    dataSource._changed.raiseEvent(dataSource);\n  }\n\n  return dataSource;\n}\n\nfunction DocumentPacket() {\n  this.name = undefined;\n  this.clock = undefined;\n}\n\n/**\n * @typedef {object} CzmlDataSource.LoadOptions\n *\n * Initialization options for the <code>load</code> method.\n *\n * @property {Resource|string} [sourceUri] Overrides the url to use for resolving relative links.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * A {@link DataSource} which processes {@link https://github.com/AnalyticalGraphicsInc/czml-writer/wiki/CZML-Guide|CZML}.\n * @alias CzmlDataSource\n * @constructor\n *\n * @param {string} [name] An optional name for the data source.  This value will be overwritten if a loaded document contains a name.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=czml|Cesium Sandcastle CZML Demo}\n */\nfunction CzmlDataSource(name) {\n  this._name = name;\n  this._changed = new Event();\n  this._error = new Event();\n  this._isLoading = false;\n  this._loading = new Event();\n  this._clock = undefined;\n  this._documentPacket = new DocumentPacket();\n  this._version = undefined;\n  this._entityCollection = new EntityCollection(this);\n  this._entityCluster = new EntityCluster();\n  this._credit = undefined;\n  this._resourceCredits = [];\n}\n\n/**\n * Creates a Promise to a new instance loaded with the provided CZML data.\n *\n * @param {Resource|string|object} czml A url or CZML object to be processed.\n * @param {CzmlDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<CzmlDataSource>} A promise that resolves to the new instance once the data is processed.\n */\nCzmlDataSource.load = function (czml, options) {\n  return new CzmlDataSource().load(czml, options);\n};\n\nObject.defineProperties(CzmlDataSource.prototype, {\n  /**\n   * Gets a human-readable name for this instance.\n   * @memberof CzmlDataSource.prototype\n   * @type {string}\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n  /**\n   * Gets the clock settings defined by the loaded CZML.  If no clock is explicitly\n   * defined in the CZML, the combined availability of all objects is returned.  If\n   * only static data exists, this value is undefined.\n   * @memberof CzmlDataSource.prototype\n   * @type {DataSourceClock}\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n  },\n  /**\n   * Gets the collection of {@link Entity} instances.\n   * @memberof CzmlDataSource.prototype\n   * @type {EntityCollection}\n   */\n  entities: {\n    get: function () {\n      return this._entityCollection;\n    },\n  },\n  /**\n   * Gets a value indicating if the data source is currently loading data.\n   * @memberof CzmlDataSource.prototype\n   * @type {boolean}\n   */\n  isLoading: {\n    get: function () {\n      return this._isLoading;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the underlying data changes.\n   * @memberof CzmlDataSource.prototype\n   * @type {Event}\n   */\n  changedEvent: {\n    get: function () {\n      return this._changed;\n    },\n  },\n  /**\n   * Gets an event that will be raised if an error is encountered during processing.\n   * @memberof CzmlDataSource.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: function () {\n      return this._error;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the data source either starts or stops loading.\n   * @memberof CzmlDataSource.prototype\n   * @type {Event}\n   */\n  loadingEvent: {\n    get: function () {\n      return this._loading;\n    },\n  },\n  /**\n   * Gets whether or not this data source should be displayed.\n   * @memberof CzmlDataSource.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._entityCollection.show;\n    },\n    set: function (value) {\n      this._entityCollection.show = value;\n    },\n  },\n\n  /**\n   * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n   *\n   * @memberof CzmlDataSource.prototype\n   * @type {EntityCluster}\n   */\n  clustering: {\n    get: function () {\n      return this._entityCluster;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value must be defined.\");\n      }\n      //>>includeEnd('debug');\n      this._entityCluster = value;\n    },\n  },\n  /**\n   * Gets the credit that will be displayed for the data source\n   * @memberof CzmlDataSource.prototype\n   * @type {Credit}\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n});\n\n/**\n * @callback CzmlDataSource.UpdaterFunction\n *\n * A CZML processing function that adds or updates entities in the provided\n * collection based on the provided CZML packet.\n *\n * @param {Entity} entity\n * @param {object} packet\n * @param {EntityCollection} entityCollection\n * @param {string} sourceUri\n */\n\n/**\n * Gets the array of CZML processing functions.\n * @memberof CzmlDataSource\n * @type {CzmlDataSource.UpdaterFunction[]}\n */\nCzmlDataSource.updaters = [\n  processBillboard,\n  processBox,\n  processCorridor,\n  processCylinder,\n  processEllipse,\n  processEllipsoid,\n  processLabel,\n  processModel,\n  processName,\n  processDescription,\n  processPath,\n  processPoint,\n  processPolygon,\n  processPolyline,\n  processPolylineVolume,\n  processProperties,\n  processRectangle,\n  processPosition,\n  processTileset,\n  processViewFrom,\n  processWall,\n  processOrientation,\n  processAvailability,\n];\n\n/**\n * Add the provided updater to the list of updaters if not already included\n * @private\n * @param {CzmlDataSource.UpdaterFunction} updater\n */\nCzmlDataSource.registerUpdater = function (updater) {\n  if (!CzmlDataSource.updaters.includes(updater)) {\n    CzmlDataSource.updaters.push(updater);\n  }\n};\n\n/**\n * Remove the provided updater from the list of updaters if already included\n * @private\n * @param {CzmlDataSource.UpdaterFunction} updater\n */\nCzmlDataSource.unregisterUpdater = function (updater) {\n  if (CzmlDataSource.updaters.includes(updater)) {\n    const index = CzmlDataSource.updaters.indexOf(updater);\n    CzmlDataSource.updaters.splice(index, 1);\n  }\n};\n\n/**\n * Processes the provided url or CZML object without clearing any existing data.\n *\n * @param {Resource|string|object} czml A url or CZML object to be processed.\n * @param {CzmlDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<CzmlDataSource>} A promise that resolves to this instances once the data is processed.\n */\nCzmlDataSource.prototype.process = function (czml, options) {\n  return load(this, czml, options, false);\n};\n\n/**\n * Loads the provided url or CZML object, replacing any existing data.\n *\n * @param {Resource|string|object} czml A url or CZML object to be processed.\n * @param {CzmlDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<CzmlDataSource>} A promise that resolves to this instances once the data is processed.\n */\nCzmlDataSource.prototype.load = function (czml, options) {\n  return load(this, czml, options, true);\n};\n\n/**\n * Updates the data source to the provided time.  This function is optional and\n * is not required to be implemented.  It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nCzmlDataSource.prototype.update = function (time) {\n  return true;\n};\n\n/**\n * A helper function used by custom CZML updater functions\n * which creates or updates a {@link Property} from a CZML packet.\n * @function\n *\n * @param {Function} type The constructor function for the property being processed.\n * @param {object} object The object on which the property will be added or updated.\n * @param {string} propertyName The name of the property on the object.\n * @param {object} packetData The CZML packet being processed.\n * @param {TimeInterval} interval A constraining interval for which the data is valid.\n * @param {string} sourceUri The originating uri of the data being processed.\n * @param {EntityCollection} entityCollection The collection being processsed.\n */\nCzmlDataSource.processPacketData = processPacketData;\n\n/**\n * A helper function used by custom CZML updater functions\n * which creates or updates a {@link PositionProperty} from a CZML packet.\n * @function\n *\n * @param {object} object The object on which the property will be added or updated.\n * @param {string} propertyName The name of the property on the object.\n * @param {object} packetData The CZML packet being processed.\n * @param {TimeInterval} interval A constraining interval for which the data is valid.\n * @param {string} sourceUri The originating uri of the data being processed.\n * @param {EntityCollection} entityCollection The collection being processsed.\n */\nCzmlDataSource.processPositionPacketData = processPositionPacketData;\n\n/**\n * A helper function used by custom CZML updater functions\n * which creates or updates a {@link MaterialProperty} from a CZML packet.\n * @function\n *\n * @param {object} object The object on which the property will be added or updated.\n * @param {string} propertyName The name of the property on the object.\n * @param {object} packetData The CZML packet being processed.\n * @param {TimeInterval} interval A constraining interval for which the data is valid.\n * @param {string} sourceUri The originating uri of the data being processed.\n * @param {EntityCollection} entityCollection The collection being processsed.\n */\nCzmlDataSource.processMaterialPacketData = processMaterialPacketData;\n\nCzmlDataSource._processCzml = function (\n  czml,\n  entityCollection,\n  sourceUri,\n  updaterFunctions,\n  dataSource,\n) {\n  updaterFunctions = updaterFunctions ?? CzmlDataSource.updaters;\n\n  if (Array.isArray(czml)) {\n    for (let i = 0, len = czml.length; i < len; ++i) {\n      processCzmlPacket(\n        czml[i],\n        entityCollection,\n        updaterFunctions,\n        sourceUri,\n        dataSource,\n      );\n    }\n  } else {\n    processCzmlPacket(\n      czml,\n      entityCollection,\n      updaterFunctions,\n      sourceUri,\n      dataSource,\n    );\n  }\n};\nexport default CzmlDataSource;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Defines the interface for data sources, which turn arbitrary data into a\n * {@link EntityCollection} for generic consumption. This object is an interface\n * for documentation purposes and is not intended to be instantiated directly.\n * @alias DataSource\n * @constructor\n *\n * @see Entity\n * @see DataSourceDisplay\n */\nfunction DataSource() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(DataSource.prototype, {\n  /**\n   * Gets a human-readable name for this instance.\n   * @memberof DataSource.prototype\n   * @type {string}\n   */\n  name: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets the preferred clock settings for this data source.\n   * @memberof DataSource.prototype\n   * @type {DataSourceClock}\n   */\n  clock: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets the collection of {@link Entity} instances.\n   * @memberof DataSource.prototype\n   * @type {EntityCollection}\n   */\n  entities: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets a value indicating if the data source is currently loading data.\n   * @memberof DataSource.prototype\n   * @type {boolean}\n   */\n  isLoading: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets an event that will be raised when the underlying data changes.\n   * @memberof DataSource.prototype\n   * @type {Event}\n   */\n  changedEvent: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets an event that will be raised if an error is encountered during processing.\n   * @memberof DataSource.prototype\n   * @type {Event<function(this, RequestErrorEvent)>}\n   */\n  errorEvent: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets an event that will be raised when the value of isLoading changes.\n   * @memberof DataSource.prototype\n   * @type {Event<function(this, boolean)>}\n   */\n  loadingEvent: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets whether or not this data source should be displayed.\n   * @memberof DataSource.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n   *\n   * @memberof DataSource.prototype\n   * @type {EntityCluster}\n   */\n  clustering: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Updates the data source to the provided time.  This function is optional and\n * is not required to be implemented.  It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nDataSource.prototype.update = function (time) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * @private\n */\nDataSource.setLoading = function (dataSource, isLoading) {\n  if (dataSource._isLoading !== isLoading) {\n    if (isLoading) {\n      dataSource._entityCollection.suspendEvents();\n    } else {\n      dataSource._entityCollection.resumeEvents();\n    }\n    dataSource._isLoading = isLoading;\n    dataSource._loading.raiseEvent(dataSource, isLoading);\n  }\n};\nexport default DataSource;\n","import Clock from \"../Core/Clock.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createRawPropertyDescriptor from \"./createRawPropertyDescriptor.js\";\n\n/**\n * Represents desired clock settings for a particular {@link DataSource}.  These settings may be applied\n * to the {@link Clock} when the DataSource is loaded.\n *\n * @alias DataSourceClock\n * @constructor\n */\nfunction DataSourceClock() {\n  this._definitionChanged = new Event();\n  this._startTime = undefined;\n  this._stopTime = undefined;\n  this._currentTime = undefined;\n  this._clockRange = undefined;\n  this._clockStep = undefined;\n  this._multiplier = undefined;\n}\n\nObject.defineProperties(DataSourceClock.prototype, {\n  /**\n   * Gets the event that is raised whenever a new property is assigned.\n   * @memberof DataSourceClock.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the desired start time of the clock.\n   * See {@link Clock#startTime}.\n   * @memberof DataSourceClock.prototype\n   * @type {JulianDate}\n   */\n  startTime: createRawPropertyDescriptor(\"startTime\"),\n\n  /**\n   * Gets or sets the desired stop time of the clock.\n   * See {@link Clock#stopTime}.\n   * @memberof DataSourceClock.prototype\n   * @type {JulianDate}\n   */\n  stopTime: createRawPropertyDescriptor(\"stopTime\"),\n\n  /**\n   * Gets or sets the desired current time when this data source is loaded.\n   * See {@link Clock#currentTime}.\n   * @memberof DataSourceClock.prototype\n   * @type {JulianDate}\n   */\n  currentTime: createRawPropertyDescriptor(\"currentTime\"),\n\n  /**\n   * Gets or sets the desired clock range setting.\n   * See {@link Clock#clockRange}.\n   * @memberof DataSourceClock.prototype\n   * @type {ClockRange}\n   */\n  clockRange: createRawPropertyDescriptor(\"clockRange\"),\n\n  /**\n   * Gets or sets the desired clock step setting.\n   * See {@link Clock#clockStep}.\n   * @memberof DataSourceClock.prototype\n   * @type {ClockStep}\n   */\n  clockStep: createRawPropertyDescriptor(\"clockStep\"),\n\n  /**\n   * Gets or sets the desired clock multiplier.\n   * See {@link Clock#multiplier}.\n   * @memberof DataSourceClock.prototype\n   * @type {number}\n   */\n  multiplier: createRawPropertyDescriptor(\"multiplier\"),\n});\n\n/**\n * Duplicates a DataSourceClock instance.\n *\n * @param {DataSourceClock} [result] The object onto which to store the result.\n * @returns {DataSourceClock} The modified result parameter or a new instance if one was not provided.\n */\nDataSourceClock.prototype.clone = function (result) {\n  if (!defined(result)) {\n    result = new DataSourceClock();\n  }\n  result.startTime = this.startTime;\n  result.stopTime = this.stopTime;\n  result.currentTime = this.currentTime;\n  result.clockRange = this.clockRange;\n  result.clockStep = this.clockStep;\n  result.multiplier = this.multiplier;\n  return result;\n};\n\n/**\n * Returns true if this DataSourceClock is equivalent to the other\n *\n * @param {DataSourceClock} [other] The other DataSourceClock to compare to.\n * @returns {boolean} <code>true</code> if the DataSourceClocks are equal; otherwise, <code>false</code>.\n */\nDataSourceClock.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (defined(other) &&\n      JulianDate.equals(this.startTime, other.startTime) &&\n      JulianDate.equals(this.stopTime, other.stopTime) &&\n      JulianDate.equals(this.currentTime, other.currentTime) &&\n      this.clockRange === other.clockRange &&\n      this.clockStep === other.clockStep &&\n      this.multiplier === other.multiplier)\n  );\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {DataSourceClock} source The object to be merged into this object.\n */\nDataSourceClock.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.startTime = this.startTime ?? source.startTime;\n  this.stopTime = this.stopTime ?? source.stopTime;\n  this.currentTime = this.currentTime ?? source.currentTime;\n  this.clockRange = this.clockRange ?? source.clockRange;\n  this.clockStep = this.clockStep ?? source.clockStep;\n  this.multiplier = this.multiplier ?? source.multiplier;\n};\n\n/**\n * Gets the value of this clock instance as a {@link Clock} object.\n *\n * @returns {Clock} The modified result parameter or a new instance if one was not provided.\n */\nDataSourceClock.prototype.getValue = function (result) {\n  if (!defined(result)) {\n    result = new Clock();\n  }\n  result.startTime = this.startTime ?? result.startTime;\n  result.stopTime = this.stopTime ?? result.stopTime;\n  result.currentTime = this.currentTime ?? result.currentTime;\n  result.clockRange = this.clockRange ?? result.clockRange;\n  result.multiplier = this.multiplier ?? result.multiplier;\n  result.clockStep = this.clockStep ?? result.clockStep;\n  return result;\n};\nexport default DataSourceClock;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * A collection of {@link DataSource} instances.\n * @alias DataSourceCollection\n * @constructor\n */\nfunction DataSourceCollection() {\n  this._dataSources = [];\n  this._dataSourceAdded = new Event();\n  this._dataSourceRemoved = new Event();\n  this._dataSourceMoved = new Event();\n}\n\nObject.defineProperties(DataSourceCollection.prototype, {\n  /**\n   * Gets the number of data sources in this collection.\n   * @memberof DataSourceCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._dataSources.length;\n    },\n  },\n\n  /**\n   * An event that is raised when a data source is added to the collection.\n   * Event handlers are passed the data source that was added.\n   * @memberof DataSourceCollection.prototype\n   * @type {Event}\n   * @readonly\n   */\n  dataSourceAdded: {\n    get: function () {\n      return this._dataSourceAdded;\n    },\n  },\n\n  /**\n   * An event that is raised when a data source is removed from the collection.\n   * Event handlers are passed the data source that was removed.\n   * @memberof DataSourceCollection.prototype\n   * @type {Event}\n   * @readonly\n   */\n  dataSourceRemoved: {\n    get: function () {\n      return this._dataSourceRemoved;\n    },\n  },\n\n  /**\n   * An event that is raised when a data source changes position in the collection.  Event handlers are passed the data source\n   * that was moved, its new index after the move, and its old index prior to the move.\n   * @memberof DataSourceCollection.prototype\n   * @type {Event}\n   * @readonly\n   */\n  dataSourceMoved: {\n    get: function () {\n      return this._dataSourceMoved;\n    },\n  },\n});\n\n/**\n * Adds a data source to the collection.\n *\n * @param {DataSource|Promise<DataSource>} dataSource A data source or a promise to a data source to add to the collection.\n *                                        When passing a promise, the data source will not actually be added\n *                                        to the collection until the promise resolves successfully.\n * @returns {Promise<DataSource>} A Promise that resolves once the data source has been added to the collection.\n */\nDataSourceCollection.prototype.add = function (dataSource) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(dataSource)) {\n    throw new DeveloperError(\"dataSource is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const that = this;\n  const dataSources = this._dataSources;\n  return Promise.resolve(dataSource).then(function (value) {\n    //Only add the data source if removeAll has not been called\n    //Since it was added.\n    if (dataSources === that._dataSources) {\n      that._dataSources.push(value);\n      that._dataSourceAdded.raiseEvent(that, value);\n    }\n    return value;\n  });\n};\n\n/**\n * Removes a data source from this collection, if present.\n *\n * @param {DataSource} dataSource The data source to remove.\n * @param {boolean} [destroy=false] Whether to destroy the data source in addition to removing it.\n * @returns {boolean} true if the data source was in the collection and was removed,\n *                    false if the data source was not in the collection.\n */\nDataSourceCollection.prototype.remove = function (dataSource, destroy) {\n  destroy = destroy ?? false;\n\n  const index = this._dataSources.indexOf(dataSource);\n  if (index !== -1) {\n    this._dataSources.splice(index, 1);\n    this._dataSourceRemoved.raiseEvent(this, dataSource);\n\n    if (destroy && typeof dataSource.destroy === \"function\") {\n      dataSource.destroy();\n    }\n\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all data sources from this collection.\n *\n * @param {boolean} [destroy=false] whether to destroy the data sources in addition to removing them.\n */\nDataSourceCollection.prototype.removeAll = function (destroy) {\n  destroy = destroy ?? false;\n\n  const dataSources = this._dataSources;\n  for (let i = 0, len = dataSources.length; i < len; ++i) {\n    const dataSource = dataSources[i];\n    this._dataSourceRemoved.raiseEvent(this, dataSource);\n\n    if (destroy && typeof dataSource.destroy === \"function\") {\n      dataSource.destroy();\n    }\n  }\n  this._dataSources = [];\n};\n\n/**\n * Checks to see if the collection contains a given data source.\n *\n * @param {DataSource} dataSource The data source to check for.\n * @returns {boolean} true if the collection contains the data source, false otherwise.\n */\nDataSourceCollection.prototype.contains = function (dataSource) {\n  return this.indexOf(dataSource) !== -1;\n};\n\n/**\n * Determines the index of a given data source in the collection.\n *\n * @param {DataSource} dataSource The data source to find the index of.\n * @returns {number} The index of the data source in the collection, or -1 if the data source does not exist in the collection.\n */\nDataSourceCollection.prototype.indexOf = function (dataSource) {\n  return this._dataSources.indexOf(dataSource);\n};\n\n/**\n * Gets a data source by index from the collection.\n *\n * @param {number} index the index to retrieve.\n * @returns {DataSource} The data source at the specified index.\n */\nDataSourceCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._dataSources[index];\n};\n\n/**\n * Gets a data source by name from the collection.\n *\n * @param {string} name The name to retrieve.\n * @returns {DataSource[]} A list of all data sources matching the provided name.\n */\nDataSourceCollection.prototype.getByName = function (name) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(name)) {\n    throw new DeveloperError(\"name is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._dataSources.filter(function (dataSource) {\n    return dataSource.name === name;\n  });\n};\n\nfunction getIndex(dataSources, dataSource) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(dataSource)) {\n    throw new DeveloperError(\"dataSource is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const index = dataSources.indexOf(dataSource);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (index === -1) {\n    throw new DeveloperError(\"dataSource is not in this collection.\");\n  }\n  //>>includeEnd('debug');\n\n  return index;\n}\n\nfunction swapDataSources(collection, i, j) {\n  const arr = collection._dataSources;\n  const length = arr.length - 1;\n  i = CesiumMath.clamp(i, 0, length);\n  j = CesiumMath.clamp(j, 0, length);\n\n  if (i === j) {\n    return;\n  }\n\n  const temp = arr[i];\n  arr[i] = arr[j];\n  arr[j] = temp;\n\n  collection.dataSourceMoved.raiseEvent(temp, j, i);\n}\n\n/**\n * Raises a data source up one position in the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.raise = function (dataSource) {\n  const index = getIndex(this._dataSources, dataSource);\n  swapDataSources(this, index, index + 1);\n};\n\n/**\n * Lowers a data source down one position in the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.lower = function (dataSource) {\n  const index = getIndex(this._dataSources, dataSource);\n  swapDataSources(this, index, index - 1);\n};\n\n/**\n * Raises a data source to the top of the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.raiseToTop = function (dataSource) {\n  const index = getIndex(this._dataSources, dataSource);\n  if (index === this._dataSources.length - 1) {\n    return;\n  }\n  this._dataSources.splice(index, 1);\n  this._dataSources.push(dataSource);\n\n  this.dataSourceMoved.raiseEvent(\n    dataSource,\n    this._dataSources.length - 1,\n    index,\n  );\n};\n\n/**\n * Lowers a data source to the bottom of the collection.\n *\n * @param {DataSource} dataSource The data source to move.\n *\n * @exception {DeveloperError} dataSource is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDataSourceCollection.prototype.lowerToBottom = function (dataSource) {\n  const index = getIndex(this._dataSources, dataSource);\n  if (index === 0) {\n    return;\n  }\n  this._dataSources.splice(index, 1);\n  this._dataSources.splice(0, 0, dataSource);\n\n  this.dataSourceMoved.raiseEvent(dataSource, 0, index);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} true if this object was destroyed; otherwise, false.\n *\n * @see DataSourceCollection#destroy\n */\nDataSourceCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the resources held by all data sources in this collection.  Explicitly destroying this\n * object allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector. Once this object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * dataSourceCollection = dataSourceCollection && dataSourceCollection.destroy();\n *\n * @see DataSourceCollection#isDestroyed\n */\nDataSourceCollection.prototype.destroy = function () {\n  this.removeAll(true);\n  return destroyObject(this);\n};\nexport default DataSourceCollection;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport OrderedGroundPrimitiveCollection from \"../Scene/OrderedGroundPrimitiveCollection.js\";\nimport PrimitiveCollection from \"../Scene/PrimitiveCollection.js\";\nimport BillboardVisualizer from \"./BillboardVisualizer.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport CustomDataSource from \"./CustomDataSource.js\";\nimport GeometryVisualizer from \"./GeometryVisualizer.js\";\nimport LabelVisualizer from \"./LabelVisualizer.js\";\nimport ModelVisualizer from \"./ModelVisualizer.js\";\nimport Cesium3DTilesetVisualizer from \"./Cesium3DTilesetVisualizer.js\";\nimport PathVisualizer from \"./PathVisualizer.js\";\nimport PointVisualizer from \"./PointVisualizer.js\";\nimport PolylineVisualizer from \"./PolylineVisualizer.js\";\n\n/**\n * Visualizes a collection of {@link DataSource} instances.\n * @alias DataSourceDisplay\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Scene} options.scene The scene in which to display the data.\n * @param {DataSourceCollection} options.dataSourceCollection The data sources to display.\n * @param {DataSourceDisplay.VisualizersCallback} [options.visualizersCallback=DataSourceDisplay.defaultVisualizersCallback]\n *        A function which creates an array of visualizers used for visualization.\n *        If undefined, all standard visualizers are used.\n */\nfunction DataSourceDisplay(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.scene\", options.scene);\n  Check.typeOf.object(\n    \"options.dataSourceCollection\",\n    options.dataSourceCollection,\n  );\n  //>>includeEnd('debug');\n\n  GroundPrimitive.initializeTerrainHeights();\n  GroundPolylinePrimitive.initializeTerrainHeights();\n\n  const scene = options.scene;\n  const dataSourceCollection = options.dataSourceCollection;\n\n  this._eventHelper = new EventHelper();\n  this._eventHelper.add(\n    dataSourceCollection.dataSourceAdded,\n    this._onDataSourceAdded,\n    this,\n  );\n  this._eventHelper.add(\n    dataSourceCollection.dataSourceRemoved,\n    this._onDataSourceRemoved,\n    this,\n  );\n  this._eventHelper.add(\n    dataSourceCollection.dataSourceMoved,\n    this._onDataSourceMoved,\n    this,\n  );\n  this._eventHelper.add(scene.postRender, this._postRender, this);\n\n  this._dataSourceCollection = dataSourceCollection;\n  this._scene = scene;\n  this._visualizersCallback =\n    options.visualizersCallback ?? DataSourceDisplay.defaultVisualizersCallback;\n\n  let primitivesAdded = false;\n  const primitives = new PrimitiveCollection();\n  const groundPrimitives = new PrimitiveCollection();\n\n  if (dataSourceCollection.length > 0) {\n    scene.primitives.add(primitives);\n    scene.groundPrimitives.add(groundPrimitives);\n    primitivesAdded = true;\n  }\n\n  this._primitives = primitives;\n  this._groundPrimitives = groundPrimitives;\n\n  for (let i = 0, len = dataSourceCollection.length; i < len; i++) {\n    this._onDataSourceAdded(dataSourceCollection, dataSourceCollection.get(i));\n  }\n\n  const defaultDataSource = new CustomDataSource();\n  this._onDataSourceAdded(undefined, defaultDataSource);\n  this._defaultDataSource = defaultDataSource;\n\n  let removeDefaultDataSourceListener;\n  let removeDataSourceCollectionListener;\n  if (!primitivesAdded) {\n    const that = this;\n    const addPrimitives = function () {\n      scene.primitives.add(primitives);\n      scene.groundPrimitives.add(groundPrimitives);\n      removeDefaultDataSourceListener();\n      removeDataSourceCollectionListener();\n      that._removeDefaultDataSourceListener = undefined;\n      that._removeDataSourceCollectionListener = undefined;\n    };\n    removeDefaultDataSourceListener =\n      defaultDataSource.entities.collectionChanged.addEventListener(\n        addPrimitives,\n      );\n    removeDataSourceCollectionListener =\n      dataSourceCollection.dataSourceAdded.addEventListener(addPrimitives);\n  }\n\n  this._removeDefaultDataSourceListener = removeDefaultDataSourceListener;\n  this._removeDataSourceCollectionListener = removeDataSourceCollectionListener;\n\n  this._ready = false;\n}\n\nconst ExtraVisualizers = [];\n/**\n * Add the provided Visualizer to the default visualizers callback if not already included\n * @private\n * @param {Visualizer} visualizer Visualizer class to add\n */\nDataSourceDisplay.registerVisualizer = function (visualizer) {\n  if (!ExtraVisualizers.includes(visualizer)) {\n    ExtraVisualizers.push(visualizer);\n  }\n};\n\n/**\n * Remove the provided Visualizer from the default visualizers callback if it's already included\n * @private\n * @param {Visualizer} visualizer Visualizer class to remove\n */\nDataSourceDisplay.unregisterVisualizer = function (visualizer) {\n  if (ExtraVisualizers.includes(visualizer)) {\n    const index = ExtraVisualizers.indexOf(visualizer);\n    ExtraVisualizers.splice(index, 1);\n  }\n};\n\n/**\n * Gets or sets the default function which creates an array of visualizers used for visualization.\n * By default, this function uses all standard visualizers.\n *\n * @type {DataSourceDisplay.VisualizersCallback}\n */\nDataSourceDisplay.defaultVisualizersCallback = function (\n  scene,\n  entityCluster,\n  dataSource,\n) {\n  const entities = dataSource.entities;\n  return [\n    new BillboardVisualizer(entityCluster, entities),\n    new GeometryVisualizer(\n      scene,\n      entities,\n      dataSource._primitives,\n      dataSource._groundPrimitives,\n    ),\n    new LabelVisualizer(entityCluster, entities),\n    new ModelVisualizer(scene, entities),\n    new Cesium3DTilesetVisualizer(scene, entities),\n    new PointVisualizer(entityCluster, entities),\n    new PathVisualizer(scene, entities),\n    new PolylineVisualizer(\n      scene,\n      entities,\n      dataSource._primitives,\n      dataSource._groundPrimitives,\n    ),\n    ...ExtraVisualizers.map(\n      (VisualizerClass) => new VisualizerClass(scene, entities),\n    ),\n  ];\n};\n\nObject.defineProperties(DataSourceDisplay.prototype, {\n  /**\n   * Gets the scene associated with this display.\n   * @memberof DataSourceDisplay.prototype\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n  /**\n   * Gets the collection of data sources to display.\n   * @memberof DataSourceDisplay.prototype\n   * @type {DataSourceCollection}\n   */\n  dataSources: {\n    get: function () {\n      return this._dataSourceCollection;\n    },\n  },\n  /**\n   * Gets the default data source instance which can be used to\n   * manually create and visualize entities not tied to\n   * a specific data source. This instance is always available\n   * and does not appear in the list dataSources collection.\n   * @memberof DataSourceDisplay.prototype\n   * @type {CustomDataSource}\n   */\n  defaultDataSource: {\n    get: function () {\n      return this._defaultDataSource;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not all entities in the data source are ready\n   * @memberof DataSourceDisplay.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see DataSourceDisplay#destroy\n */\nDataSourceDisplay.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * dataSourceDisplay = dataSourceDisplay.destroy();\n *\n * @see DataSourceDisplay#isDestroyed\n */\nDataSourceDisplay.prototype.destroy = function () {\n  this._eventHelper.removeAll();\n\n  const dataSourceCollection = this._dataSourceCollection;\n  for (let i = 0, length = dataSourceCollection.length; i < length; ++i) {\n    this._onDataSourceRemoved(\n      this._dataSourceCollection,\n      dataSourceCollection.get(i),\n    );\n  }\n  this._onDataSourceRemoved(undefined, this._defaultDataSource);\n\n  if (defined(this._removeDefaultDataSourceListener)) {\n    this._removeDefaultDataSourceListener();\n    this._removeDataSourceCollectionListener();\n  } else {\n    this._scene.primitives.remove(this._primitives);\n    this._scene.groundPrimitives.remove(this._groundPrimitives);\n  }\n\n  return destroyObject(this);\n};\n\n/**\n * Updates the display to the provided time.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {boolean} True if all data sources are ready to be displayed, false otherwise.\n */\nDataSourceDisplay.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  if (!ApproximateTerrainHeights.initialized) {\n    this._ready = false;\n    return false;\n  }\n\n  let result = true;\n\n  let i;\n  let x;\n  let visualizers;\n  let vLength;\n  const dataSources = this._dataSourceCollection;\n  const length = dataSources.length;\n  for (i = 0; i < length; i++) {\n    const dataSource = dataSources.get(i);\n    if (defined(dataSource.update)) {\n      result = dataSource.update(time) && result;\n    }\n\n    visualizers = dataSource._visualizers;\n    vLength = visualizers.length;\n    for (x = 0; x < vLength; x++) {\n      result = visualizers[x].update(time) && result;\n    }\n  }\n\n  visualizers = this._defaultDataSource._visualizers;\n  vLength = visualizers.length;\n  for (x = 0; x < vLength; x++) {\n    result = visualizers[x].update(time) && result;\n  }\n\n  // Request a rendering of the scene when the data source\n  // becomes 'ready' for the first time\n  if (!this._ready && result) {\n    this._scene.requestRender();\n  }\n\n  // once the DataSourceDisplay is ready it should stay ready to prevent\n  // entities from breaking updates when they become \"un-ready\"\n  this._ready = this._ready || result;\n\n  return result;\n};\n\nDataSourceDisplay.prototype._postRender = function () {\n  // Adds credits for all datasources\n  const frameState = this._scene.frameState;\n  const dataSources = this._dataSourceCollection;\n  const length = dataSources.length;\n  for (let i = 0; i < length; i++) {\n    const dataSource = dataSources.get(i);\n\n    const credit = dataSource.credit;\n    if (defined(credit)) {\n      frameState.creditDisplay.addCreditToNextFrame(credit);\n    }\n\n    // Credits from the resource that the user can't remove\n    const credits = dataSource._resourceCredits;\n    if (defined(credits)) {\n      const creditCount = credits.length;\n      for (let c = 0; c < creditCount; c++) {\n        frameState.creditDisplay.addCreditToNextFrame(credits[c]);\n      }\n    }\n  }\n};\n\nconst getBoundingSphereArrayScratch = [];\nconst getBoundingSphereBoundingSphereScratch = new BoundingSphere();\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {boolean} allowPartial If true, pending bounding spheres are ignored and an answer will be returned from the currently available data.\n *                               If false, the the function will halt and return pending if any of the bounding spheres are pending.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nDataSourceDisplay.prototype.getBoundingSphere = function (\n  entity,\n  allowPartial,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"entity\", entity);\n  Check.typeOf.bool(\"allowPartial\", allowPartial);\n  Check.defined(\"result\", result);\n  //>>includeEnd('debug');\n\n  if (!this._ready) {\n    return BoundingSphereState.PENDING;\n  }\n\n  let i;\n  let length;\n  let dataSource = this._defaultDataSource;\n  if (!dataSource.entities.contains(entity)) {\n    dataSource = undefined;\n\n    const dataSources = this._dataSourceCollection;\n    length = dataSources.length;\n    for (i = 0; i < length; i++) {\n      const d = dataSources.get(i);\n      if (d.entities.contains(entity)) {\n        dataSource = d;\n        break;\n      }\n    }\n  }\n\n  if (!defined(dataSource)) {\n    return BoundingSphereState.FAILED;\n  }\n\n  const boundingSpheres = getBoundingSphereArrayScratch;\n  const tmp = getBoundingSphereBoundingSphereScratch;\n\n  let count = 0;\n  let state = BoundingSphereState.DONE;\n  const visualizers = dataSource._visualizers;\n  const visualizersLength = visualizers.length;\n\n  for (i = 0; i < visualizersLength; i++) {\n    const visualizer = visualizers[i];\n    if (defined(visualizer.getBoundingSphere)) {\n      state = visualizers[i].getBoundingSphere(entity, tmp);\n      if (!allowPartial && state === BoundingSphereState.PENDING) {\n        return BoundingSphereState.PENDING;\n      } else if (state === BoundingSphereState.DONE) {\n        boundingSpheres[count] = BoundingSphere.clone(\n          tmp,\n          boundingSpheres[count],\n        );\n        count++;\n      }\n    }\n  }\n\n  if (count === 0) {\n    return BoundingSphereState.FAILED;\n  }\n\n  boundingSpheres.length = count;\n  BoundingSphere.fromBoundingSpheres(boundingSpheres, result);\n  return BoundingSphereState.DONE;\n};\n\nDataSourceDisplay.prototype._onDataSourceAdded = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const scene = this._scene;\n\n  const displayPrimitives = this._primitives;\n  const displayGroundPrimitives = this._groundPrimitives;\n\n  const primitives = displayPrimitives.add(new PrimitiveCollection());\n  const groundPrimitives = displayGroundPrimitives.add(\n    new OrderedGroundPrimitiveCollection(),\n  );\n\n  dataSource._primitives = primitives;\n  dataSource._groundPrimitives = groundPrimitives;\n\n  const entityCluster = dataSource.clustering;\n  entityCluster._initialize(scene);\n\n  primitives.add(entityCluster);\n\n  dataSource._visualizers = this._visualizersCallback(\n    scene,\n    entityCluster,\n    dataSource,\n  );\n};\n\nDataSourceDisplay.prototype._onDataSourceRemoved = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const displayPrimitives = this._primitives;\n  const displayGroundPrimitives = this._groundPrimitives;\n\n  const primitives = dataSource._primitives;\n  const groundPrimitives = dataSource._groundPrimitives;\n\n  const entityCluster = dataSource.clustering;\n  primitives.remove(entityCluster);\n\n  const visualizers = dataSource._visualizers;\n  const length = visualizers.length;\n  for (let i = 0; i < length; i++) {\n    visualizers[i].destroy();\n  }\n\n  displayPrimitives.remove(primitives);\n  displayGroundPrimitives.remove(groundPrimitives);\n\n  dataSource._visualizers = undefined;\n};\n\nDataSourceDisplay.prototype._onDataSourceMoved = function (\n  dataSource,\n  newIndex,\n  oldIndex,\n) {\n  const displayPrimitives = this._primitives;\n  const displayGroundPrimitives = this._groundPrimitives;\n\n  const primitives = dataSource._primitives;\n  const groundPrimitives = dataSource._groundPrimitives;\n\n  if (newIndex === oldIndex + 1) {\n    displayPrimitives.raise(primitives);\n    displayGroundPrimitives.raise(groundPrimitives);\n  } else if (newIndex === oldIndex - 1) {\n    displayPrimitives.lower(primitives);\n    displayGroundPrimitives.lower(groundPrimitives);\n  } else if (newIndex === 0) {\n    displayPrimitives.lowerToBottom(primitives);\n    displayGroundPrimitives.lowerToBottom(groundPrimitives);\n    displayPrimitives.raise(primitives); // keep defaultDataSource primitives at index 0 since it's not in the collection\n    displayGroundPrimitives.raise(groundPrimitives);\n  } else {\n    displayPrimitives.raiseToTop(primitives);\n    displayGroundPrimitives.raiseToTop(groundPrimitives);\n  }\n};\n\n/**\n * A function which creates an array of visualizers used for visualization.\n * @callback DataSourceDisplay.VisualizersCallback\n *\n * @param {Scene} scene The scene to create visualizers for.\n * @param {EntityCluster} entityCluster The entity cluster to create visualizers for.\n * @param {DataSource} dataSource The data source to create visualizers for.\n * @returns {Visualizer[]} An array of visualizers used for visualization.\n *\n * @example\n * function createVisualizers(scene, entityCluster, dataSource) {\n *     return [new Cesium.BillboardVisualizer(entityCluster, dataSource.entities)];\n * }\n */\nexport default DataSourceDisplay;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport defined from \"../Core/defined.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\n\n/**\n * @private\n */\nfunction DynamicGeometryBatch(primitives, orderedGroundPrimitives) {\n  this._primitives = primitives;\n  this._orderedGroundPrimitives = orderedGroundPrimitives;\n  this._dynamicUpdaters = new AssociativeArray();\n}\n\nDynamicGeometryBatch.prototype.add = function (time, updater) {\n  this._dynamicUpdaters.set(\n    updater.id,\n    updater.createDynamicUpdater(\n      this._primitives,\n      this._orderedGroundPrimitives,\n    ),\n  );\n};\n\nDynamicGeometryBatch.prototype.remove = function (updater) {\n  const id = updater.id;\n  const dynamicUpdater = this._dynamicUpdaters.get(id);\n  if (defined(dynamicUpdater)) {\n    this._dynamicUpdaters.remove(id);\n    dynamicUpdater.destroy();\n  }\n};\n\nDynamicGeometryBatch.prototype.update = function (time) {\n  const geometries = this._dynamicUpdaters.values;\n  for (let i = 0, len = geometries.length; i < len; i++) {\n    geometries[i].update(time);\n  }\n  return true;\n};\n\nDynamicGeometryBatch.prototype.removeAllPrimitives = function () {\n  const geometries = this._dynamicUpdaters.values;\n  for (let i = 0, len = geometries.length; i < len; i++) {\n    geometries[i].destroy();\n  }\n  this._dynamicUpdaters.removeAll();\n};\n\nDynamicGeometryBatch.prototype.getBoundingSphere = function (updater, result) {\n  updater = this._dynamicUpdaters.get(updater.id);\n  if (defined(updater) && defined(updater.getBoundingSphere)) {\n    return updater.getBoundingSphere(result);\n  }\n  return BoundingSphereState.FAILED;\n};\nexport default DynamicGeometryBatch;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * Defines the interface for a dynamic geometry updater.  A DynamicGeometryUpdater\n * is responsible for handling visualization of a specific type of geometry\n * that needs to be recomputed based on simulation time.\n * This object is never used directly by client code, but is instead created by\n * {@link GeometryUpdater} implementations which contain dynamic geometry.\n *\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias DynamicGeometryUpdater\n * @constructor\n * @private\n * @abstract\n */\nfunction DynamicGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  orderedGroundPrimitives,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"geometryUpdater\", geometryUpdater);\n  Check.defined(\"primitives\", primitives);\n  Check.defined(\"orderedGroundPrimitives\", orderedGroundPrimitives);\n  //>>includeEnd('debug');\n\n  this._primitives = primitives;\n  this._orderedGroundPrimitives = orderedGroundPrimitives;\n  this._primitive = undefined;\n  this._outlinePrimitive = undefined;\n  this._geometryUpdater = geometryUpdater;\n  this._options = geometryUpdater._options;\n  this._entity = geometryUpdater._entity;\n  this._material = undefined;\n}\n\nDynamicGeometryUpdater.prototype._isHidden = function (entity, geometry, time) {\n  return (\n    !entity.isShowing ||\n    !entity.isAvailable(time) ||\n    !Property.getValueOrDefault(geometry.show, time, true)\n  );\n};\n\nDynamicGeometryUpdater.prototype._setOptions =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Updates the geometry to the specified time.\n * @memberof DynamicGeometryUpdater\n * @function\n *\n * @param {JulianDate} time The current time.\n */\nDynamicGeometryUpdater.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const geometryUpdater = this._geometryUpdater;\n  const onTerrain = geometryUpdater._onTerrain;\n\n  const primitives = this._primitives;\n  const orderedGroundPrimitives = this._orderedGroundPrimitives;\n  if (onTerrain) {\n    orderedGroundPrimitives.remove(this._primitive);\n  } else {\n    primitives.removeAndDestroy(this._primitive);\n    primitives.removeAndDestroy(this._outlinePrimitive);\n    this._outlinePrimitive = undefined;\n  }\n  this._primitive = undefined;\n\n  const entity = this._entity;\n  const geometry = entity[this._geometryUpdater._geometryPropertyName];\n  this._setOptions(entity, geometry, time);\n  if (this._isHidden(entity, geometry, time)) {\n    return;\n  }\n\n  const shadows = this._geometryUpdater.shadowsProperty.getValue(time);\n  const options = this._options;\n  if (!defined(geometry.fill) || geometry.fill.getValue(time)) {\n    const fillMaterialProperty = geometryUpdater.fillMaterialProperty;\n    const isColorAppearance =\n      fillMaterialProperty instanceof ColorMaterialProperty;\n    let appearance;\n    const closed = geometryUpdater._getIsClosed(options);\n    if (isColorAppearance) {\n      appearance = new PerInstanceColorAppearance({\n        closed: closed,\n        flat:\n          onTerrain && !geometryUpdater._supportsMaterialsforEntitiesOnTerrain,\n      });\n    } else {\n      const material = MaterialProperty.getValue(\n        time,\n        fillMaterialProperty,\n        this._material,\n      );\n      this._material = material;\n      appearance = new MaterialAppearance({\n        material: material,\n        translucent: material.isTranslucent(),\n        closed: closed,\n      });\n    }\n\n    if (onTerrain) {\n      options.vertexFormat = PerInstanceColorAppearance.VERTEX_FORMAT;\n      this._primitive = orderedGroundPrimitives.add(\n        new GroundPrimitive({\n          geometryInstances:\n            this._geometryUpdater.createFillGeometryInstance(time),\n          appearance: appearance,\n          asynchronous: false,\n          shadows: shadows,\n          classificationType:\n            this._geometryUpdater.classificationTypeProperty.getValue(time),\n        }),\n        Property.getValueOrUndefined(this._geometryUpdater.zIndex, time),\n      );\n    } else {\n      options.vertexFormat = appearance.vertexFormat;\n\n      const fillInstance =\n        this._geometryUpdater.createFillGeometryInstance(time);\n\n      if (isColorAppearance) {\n        appearance.translucent = fillInstance.attributes.color.value[3] !== 255;\n      }\n\n      this._primitive = primitives.add(\n        new Primitive({\n          geometryInstances: fillInstance,\n          appearance: appearance,\n          asynchronous: false,\n          shadows: shadows,\n        }),\n      );\n    }\n  }\n\n  if (\n    !onTerrain &&\n    defined(geometry.outline) &&\n    geometry.outline.getValue(time)\n  ) {\n    const outlineInstance =\n      this._geometryUpdater.createOutlineGeometryInstance(time);\n    const outlineWidth = Property.getValueOrDefault(\n      geometry.outlineWidth,\n      time,\n      1.0,\n    );\n\n    this._outlinePrimitive = primitives.add(\n      new Primitive({\n        geometryInstances: outlineInstance,\n        appearance: new PerInstanceColorAppearance({\n          flat: true,\n          translucent: outlineInstance.attributes.color.value[3] !== 255,\n          renderState: {\n            lineWidth: geometryUpdater._scene.clampLineWidth(outlineWidth),\n          },\n        }),\n        asynchronous: false,\n        shadows: shadows,\n      }),\n    );\n  }\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n * @function\n *\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nDynamicGeometryUpdater.prototype.getBoundingSphere = function (result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n  const entity = this._entity;\n  const primitive = this._primitive;\n  const outlinePrimitive = this._outlinePrimitive;\n\n  let attributes;\n\n  //Outline and Fill geometries have the same bounding sphere, so just use whichever one is defined and ready\n  if (defined(primitive) && primitive.show && primitive.ready) {\n    attributes = primitive.getGeometryInstanceAttributes(entity);\n    if (defined(attributes) && defined(attributes.boundingSphere)) {\n      BoundingSphere.clone(attributes.boundingSphere, result);\n      return BoundingSphereState.DONE;\n    }\n  }\n\n  if (\n    defined(outlinePrimitive) &&\n    outlinePrimitive.show &&\n    outlinePrimitive.ready\n  ) {\n    attributes = outlinePrimitive.getGeometryInstanceAttributes(entity);\n    if (defined(attributes) && defined(attributes.boundingSphere)) {\n      BoundingSphere.clone(attributes.boundingSphere, result);\n      return BoundingSphereState.DONE;\n    }\n  }\n\n  if (\n    (defined(primitive) && !primitive.ready) ||\n    (defined(outlinePrimitive) && !outlinePrimitive.ready)\n  ) {\n    return BoundingSphereState.PENDING;\n  }\n\n  return BoundingSphereState.FAILED;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * @memberof DynamicGeometryUpdater\n * @function\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nDynamicGeometryUpdater.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys and resources used by the object.  Once an object is destroyed, it should not be used.\n * @memberof DynamicGeometryUpdater\n * @function\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDynamicGeometryUpdater.prototype.destroy = function () {\n  const primitives = this._primitives;\n  const orderedGroundPrimitives = this._orderedGroundPrimitives;\n  if (this._geometryUpdater._onTerrain) {\n    orderedGroundPrimitives.remove(this._primitive);\n  } else {\n    primitives.removeAndDestroy(this._primitive);\n  }\n  primitives.removeAndDestroy(this._outlinePrimitive);\n  destroyObject(this);\n};\nexport default DynamicGeometryUpdater;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport EllipseGeometry from \"../Core/EllipseGeometry.js\";\nimport EllipseOutlineGeometry from \"../Core/EllipseOutlineGeometry.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nconst scratchColor = new Color();\nconst defaultOffset = Cartesian3.ZERO;\nconst offsetScratch = new Cartesian3();\nconst scratchRectangle = new Rectangle();\n\nfunction EllipseGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.center = undefined;\n  this.semiMajorAxis = undefined;\n  this.semiMinorAxis = undefined;\n  this.rotation = undefined;\n  this.height = undefined;\n  this.extrudedHeight = undefined;\n  this.granularity = undefined;\n  this.stRotation = undefined;\n  this.numberOfVerticalLines = undefined;\n  this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for ellipses.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias EllipseGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction EllipseGeometryUpdater(entity, scene) {\n  GroundGeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new EllipseGeometryOptions(entity),\n    geometryPropertyName: \"ellipse\",\n    observedPropertyNames: [\"availability\", \"position\", \"ellipse\"],\n  });\n\n  this._onEntityPropertyChanged(entity, \"ellipse\", entity.ellipse, undefined);\n}\n\nif (defined(Object.create)) {\n  EllipseGeometryUpdater.prototype = Object.create(\n    GroundGeometryUpdater.prototype,\n  );\n  EllipseGeometryUpdater.prototype.constructor = EllipseGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nEllipseGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._fillProperty.getValue(time),\n    ),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        this._distanceDisplayConditionProperty.getValue(time),\n      ),\n    offset: undefined,\n    color: undefined,\n  };\n\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new EllipseGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nEllipseGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._showOutlineProperty.getValue(time),\n    ),\n    color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        distanceDisplayCondition,\n      ),\n    offset: undefined,\n  };\n\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new EllipseOutlineGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\nEllipseGeometryUpdater.prototype._computeCenter = function (time, result) {\n  return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nEllipseGeometryUpdater.prototype._isHidden = function (entity, ellipse) {\n  const position = entity.position;\n\n  return (\n    !defined(position) ||\n    !defined(ellipse.semiMajorAxis) ||\n    !defined(ellipse.semiMinorAxis) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, ellipse)\n  );\n};\n\nEllipseGeometryUpdater.prototype._isDynamic = function (entity, ellipse) {\n  return (\n    !entity.position.isConstant || //\n    !ellipse.semiMajorAxis.isConstant || //\n    !ellipse.semiMinorAxis.isConstant || //\n    !Property.isConstant(ellipse.rotation) || //\n    !Property.isConstant(ellipse.height) || //\n    !Property.isConstant(ellipse.extrudedHeight) || //\n    !Property.isConstant(ellipse.granularity) || //\n    !Property.isConstant(ellipse.stRotation) || //\n    !Property.isConstant(ellipse.outlineWidth) || //\n    !Property.isConstant(ellipse.numberOfVerticalLines) || //\n    !Property.isConstant(ellipse.zIndex) || //\n    (this._onTerrain &&\n      !Property.isConstant(this._materialProperty) &&\n      !(this._materialProperty instanceof ColorMaterialProperty))\n  );\n};\n\nEllipseGeometryUpdater.prototype._setStaticOptions = function (\n  entity,\n  ellipse,\n) {\n  let heightValue = Property.getValueOrUndefined(\n    ellipse.height,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const heightReferenceValue = Property.getValueOrDefault(\n    ellipse.heightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    ellipse.extrudedHeight,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    ellipse.extrudedHeightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  if (defined(extrudedHeightValue) && !defined(heightValue)) {\n    heightValue = 0;\n  }\n\n  const options = this._options;\n  options.vertexFormat =\n    this._materialProperty instanceof ColorMaterialProperty\n      ? PerInstanceColorAppearance.VERTEX_FORMAT\n      : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.center = entity.position.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.center,\n  );\n  options.semiMajorAxis = ellipse.semiMajorAxis.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.semiMajorAxis,\n  );\n  options.semiMinorAxis = ellipse.semiMinorAxis.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.semiMinorAxis,\n  );\n  options.rotation = Property.getValueOrUndefined(\n    ellipse.rotation,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.granularity = Property.getValueOrUndefined(\n    ellipse.granularity,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.stRotation = Property.getValueOrUndefined(\n    ellipse.stRotation,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.numberOfVerticalLines = Property.getValueOrUndefined(\n    ellipse.numberOfVerticalLines,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.offsetAttribute =\n    GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  options.height = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    heightReferenceValue,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n      EllipseGeometry.computeRectangle(options, scratchRectangle),\n    ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\n\nEllipseGeometryUpdater.DynamicGeometryUpdater = DynamicEllipseGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicEllipseGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicEllipseGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicEllipseGeometryUpdater.prototype.constructor =\n    DynamicEllipseGeometryUpdater;\n}\n\nDynamicEllipseGeometryUpdater.prototype._isHidden = function (\n  entity,\n  ellipse,\n  time,\n) {\n  const options = this._options;\n  return (\n    !defined(options.center) ||\n    !defined(options.semiMajorAxis) ||\n    !defined(options.semiMinorAxis) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(this, entity, ellipse, time)\n  );\n};\n\nDynamicEllipseGeometryUpdater.prototype._setOptions = function (\n  entity,\n  ellipse,\n  time,\n) {\n  const options = this._options;\n  let heightValue = Property.getValueOrUndefined(ellipse.height, time);\n  const heightReferenceValue = Property.getValueOrDefault(\n    ellipse.heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    ellipse.extrudedHeight,\n    time,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    ellipse.extrudedHeightReference,\n    time,\n    HeightReference.NONE,\n  );\n  if (defined(extrudedHeightValue) && !defined(heightValue)) {\n    heightValue = 0;\n  }\n\n  options.center = Property.getValueOrUndefined(\n    entity.position,\n    time,\n    options.center,\n  );\n  options.semiMajorAxis = Property.getValueOrUndefined(\n    ellipse.semiMajorAxis,\n    time,\n  );\n  options.semiMinorAxis = Property.getValueOrUndefined(\n    ellipse.semiMinorAxis,\n    time,\n  );\n  options.rotation = Property.getValueOrUndefined(ellipse.rotation, time);\n  options.granularity = Property.getValueOrUndefined(ellipse.granularity, time);\n  options.stRotation = Property.getValueOrUndefined(ellipse.stRotation, time);\n  options.numberOfVerticalLines = Property.getValueOrUndefined(\n    ellipse.numberOfVerticalLines,\n    time,\n  );\n  options.offsetAttribute =\n    GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  options.height = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    heightReferenceValue,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n      EllipseGeometry.computeRectangle(options, scratchRectangle),\n    ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\nexport default EllipseGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} EllipseGraphics.ConstructorOptions\n *\n * Initialization options for the EllipseGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the ellipse.\n * @property {Property | number} [semiMajorAxis] The numeric Property specifying the semi-major axis.\n * @property {Property | number} [semiMinorAxis] The numeric Property specifying the semi-minor axis.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the ellipse relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the ellipse's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | number} [rotation=0.0] A numeric property specifying the rotation of the ellipse counter-clockwise from north.\n * @property {Property | number} [stRotation=0.0] A numeric property specifying the rotation of the ellipse texture counter-clockwise from north.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between points on the ellipse.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the ellipse is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the ellipse.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the ellipse is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | number} [numberOfVerticalLines=16] A numeric Property specifying the number of vertical lines to draw along the perimeter for the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the ellipse casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this ellipse will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this ellipse will classify terrain, 3D Tiles, or both when on the ground.\n * @property {ConstantProperty | number} [zIndex=0] A property specifying the zIndex of the Ellipse.  Used for ordering ground geometry.  Only has an effect if the ellipse is constant and neither height or exturdedHeight are specified.\n */\n\n/**\n * Describes an ellipse defined by a center point and semi-major and semi-minor axes.\n * The ellipse conforms to the curvature of the globe and can be placed on the surface or\n * at altitude and can optionally be extruded into a volume.\n * The center point is determined by the containing {@link Entity}.\n *\n * @alias EllipseGraphics\n * @constructor\n *\n * @param {EllipseGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=circles-and-ellipses|Cesium Sandcastle Circles and Ellipses Demo}\n */\nfunction EllipseGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._semiMajorAxis = undefined;\n  this._semiMajorAxisSubscription = undefined;\n  this._semiMinorAxis = undefined;\n  this._semiMinorAxisSubscription = undefined;\n  this._height = undefined;\n  this._heightSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._extrudedHeight = undefined;\n  this._extrudedHeightSubscription = undefined;\n  this._extrudedHeightReference = undefined;\n  this._extrudedHeightReferenceSubscription = undefined;\n  this._rotation = undefined;\n  this._rotationSubscription = undefined;\n  this._stRotation = undefined;\n  this._stRotationSubscription = undefined;\n  this._granularity = undefined;\n  this._granularitySubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._numberOfVerticalLines = undefined;\n  this._numberOfVerticalLinesSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._classificationType = undefined;\n  this._classificationTypeSubscription = undefined;\n  this._zIndex = undefined;\n  this._zIndexSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(EllipseGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof EllipseGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the ellipse.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the semi-major axis.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   */\n  semiMajorAxis: createPropertyDescriptor(\"semiMajorAxis\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the semi-minor axis.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   */\n  semiMinorAxis: createPropertyDescriptor(\"semiMinorAxis\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the altitude of the ellipse.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  height: createPropertyDescriptor(\"height\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the altitude of the ellipse extrusion.\n   * Setting this property creates volume starting at height and ending at this altitude.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   */\n  extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n  /**\n   * Gets or sets the Property specifying the extruded {@link HeightReference}.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n  /**\n   * Gets or sets the numeric property specifying the rotation of the ellipse counter-clockwise from north.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0\n   */\n  rotation: createPropertyDescriptor(\"rotation\"),\n\n  /**\n   * Gets or sets the numeric property specifying the rotation of the ellipse texture counter-clockwise from north.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0\n   */\n  stRotation: createPropertyDescriptor(\"stRotation\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the angular distance between points on the ellipse.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default {CesiumMath.RADIANS_PER_DEGREE}\n   */\n  granularity: createPropertyDescriptor(\"granularity\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the ellipse is filled with the provided material.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the ellipse.\n   * @memberof EllipseGraphics.prototype\n   * @type {MaterialProperty|undefined}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the ellipse is outlined.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the number of vertical lines to draw along the perimeter for the outline.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default 16\n   */\n  numberOfVerticalLines: createPropertyDescriptor(\"numberOfVerticalLines\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the ellipse\n   * casts or receives shadows from light sources.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this ellipse will be displayed.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the {@link ClassificationType} Property specifying whether this ellipse will classify terrain, 3D Tiles, or both when on the ground.\n   * @memberof EllipseGraphics.prototype\n   * @type {Property|undefined}\n   * @default ClassificationType.BOTH\n   */\n  classificationType: createPropertyDescriptor(\"classificationType\"),\n\n  /**\n   * Gets or sets the zIndex Property specifying the ellipse ordering.  Only has an effect if the ellipse is constant and neither height or extrudedHeight are specified\n   * @memberof EllipseGraphics.prototype\n   * @type {ConstantProperty|undefined}\n   * @default 0\n   */\n  zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {EllipseGraphics} [result] The object onto which to store the result.\n * @returns {EllipseGraphics} The modified result parameter or a new instance if one was not provided.\n */\nEllipseGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new EllipseGraphics(this);\n  }\n  result.show = this.show;\n  result.semiMajorAxis = this.semiMajorAxis;\n  result.semiMinorAxis = this.semiMinorAxis;\n  result.height = this.height;\n  result.heightReference = this.heightReference;\n  result.extrudedHeight = this.extrudedHeight;\n  result.extrudedHeightReference = this.extrudedHeightReference;\n  result.rotation = this.rotation;\n  result.stRotation = this.stRotation;\n  result.granularity = this.granularity;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.numberOfVerticalLines = this.numberOfVerticalLines;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.classificationType = this.classificationType;\n  result.zIndex = this.zIndex;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {EllipseGraphics} source The object to be merged into this object.\n */\nEllipseGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.semiMajorAxis = this.semiMajorAxis ?? source.semiMajorAxis;\n  this.semiMinorAxis = this.semiMinorAxis ?? source.semiMinorAxis;\n  this.height = this.height ?? source.height;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.extrudedHeight = this.extrudedHeight ?? source.extrudedHeight;\n  this.extrudedHeightReference =\n    this.extrudedHeightReference ?? source.extrudedHeightReference;\n  this.rotation = this.rotation ?? source.rotation;\n  this.stRotation = this.stRotation ?? source.stRotation;\n  this.granularity = this.granularity ?? source.granularity;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.numberOfVerticalLines =\n    this.numberOfVerticalLines ?? source.numberOfVerticalLines;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.classificationType =\n    this.classificationType ?? source.classificationType;\n  this.zIndex = this.zIndex ?? source.zIndex;\n};\nexport default EllipseGraphics;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\nimport EllipsoidOutlineGeometry from \"../Core/EllipsoidOutlineGeometry.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport heightReferenceOnEntityPropertyChanged from \"./heightReferenceOnEntityPropertyChanged.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nconst defaultMaterial = new ColorMaterialProperty(Color.WHITE);\nconst defaultOffset = Cartesian3.ZERO;\n\nconst offsetScratch = new Cartesian3();\nconst radiiScratch = new Cartesian3();\nconst innerRadiiScratch = new Cartesian3();\nconst scratchColor = new Color();\nconst unitSphere = new Cartesian3(1, 1, 1);\n\nfunction EllipsoidGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.radii = undefined;\n  this.innerRadii = undefined;\n  this.minimumClock = undefined;\n  this.maximumClock = undefined;\n  this.minimumCone = undefined;\n  this.maximumCone = undefined;\n  this.stackPartitions = undefined;\n  this.slicePartitions = undefined;\n  this.subdivisions = undefined;\n  this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for ellipsoids.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias EllipsoidGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction EllipsoidGeometryUpdater(entity, scene) {\n  GeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new EllipsoidGeometryOptions(entity),\n    geometryPropertyName: \"ellipsoid\",\n    observedPropertyNames: [\n      \"availability\",\n      \"position\",\n      \"orientation\",\n      \"ellipsoid\",\n    ],\n  });\n\n  this._onEntityPropertyChanged(\n    entity,\n    \"ellipsoid\",\n    entity.ellipsoid,\n    undefined,\n  );\n}\n\nif (defined(Object.create)) {\n  EllipsoidGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n  EllipsoidGeometryUpdater.prototype.constructor = EllipsoidGeometryUpdater;\n}\n\nObject.defineProperties(EllipsoidGeometryUpdater.prototype, {\n  /**\n   * Gets the terrain offset property\n   * @type {TerrainOffsetProperty}\n   * @memberof EllipsoidGeometryUpdater.prototype\n   * @readonly\n   * @private\n   */\n  terrainOffsetProperty: {\n    get: function () {\n      return this._terrainOffsetProperty;\n    },\n  },\n});\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @param {boolean} [skipModelMatrix=false] Whether to compute a model matrix for the geometry instance\n * @param {Matrix4} [modelMatrixResult] Used to store the result of the model matrix calculation\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nEllipsoidGeometryUpdater.prototype.createFillGeometryInstance = function (\n  time,\n  skipModelMatrix,\n  modelMatrixResult,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  let color;\n  const show = new ShowGeometryInstanceAttribute(\n    isAvailable &&\n      entity.isShowing &&\n      this._showProperty.getValue(time) &&\n      this._fillProperty.getValue(time),\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n  const distanceDisplayConditionAttribute =\n    DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n      distanceDisplayCondition,\n    );\n\n  const attributes = {\n    show: show,\n    distanceDisplayCondition: distanceDisplayConditionAttribute,\n    color: undefined,\n    offset: undefined,\n  };\n\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n    attributes.color = color;\n  }\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new EllipsoidGeometry(this._options),\n    modelMatrix: skipModelMatrix\n      ? undefined\n      : entity.computeModelMatrixForHeightReference(\n          time,\n          entity.ellipsoid.heightReference,\n          this._options.radii.z * 0.5,\n          this._scene.ellipsoid,\n          modelMatrixResult,\n        ),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @param {boolean} [skipModelMatrix=false] Whether to compute a model matrix for the geometry instance\n * @param {Matrix4} [modelMatrixResult] Used to store the result of the model matrix calculation\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nEllipsoidGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n  time,\n  skipModelMatrix,\n  modelMatrixResult,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._showOutlineProperty.getValue(time),\n    ),\n    color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        distanceDisplayCondition,\n      ),\n    offset: undefined,\n  };\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new EllipsoidOutlineGeometry(this._options),\n    modelMatrix: skipModelMatrix\n      ? undefined\n      : entity.computeModelMatrixForHeightReference(\n          time,\n          entity.ellipsoid.heightReference,\n          this._options.radii.z * 0.5,\n          this._scene.ellipsoid,\n          modelMatrixResult,\n        ),\n    attributes: attributes,\n  });\n};\n\nEllipsoidGeometryUpdater.prototype._computeCenter = function (time, result) {\n  return Property.getValueOrUndefined(this._entity.position, time, result);\n};\n\nEllipsoidGeometryUpdater.prototype._isHidden = function (entity, ellipsoid) {\n  return (\n    !defined(entity.position) ||\n    !defined(ellipsoid.radii) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, ellipsoid)\n  );\n};\n\nEllipsoidGeometryUpdater.prototype._isDynamic = function (entity, ellipsoid) {\n  return (\n    !entity.position.isConstant || //\n    !Property.isConstant(entity.orientation) || //\n    !ellipsoid.radii.isConstant || //\n    !Property.isConstant(ellipsoid.innerRadii) || //\n    !Property.isConstant(ellipsoid.stackPartitions) || //\n    !Property.isConstant(ellipsoid.slicePartitions) || //\n    !Property.isConstant(ellipsoid.outlineWidth) || //\n    !Property.isConstant(ellipsoid.minimumClock) || //\n    !Property.isConstant(ellipsoid.maximumClock) || //\n    !Property.isConstant(ellipsoid.minimumCone) || //\n    !Property.isConstant(ellipsoid.maximumCone) || //\n    !Property.isConstant(ellipsoid.subdivisions)\n  );\n};\n\nEllipsoidGeometryUpdater.prototype._setStaticOptions = function (\n  entity,\n  ellipsoid,\n) {\n  const heightReference = Property.getValueOrDefault(\n    ellipsoid.heightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  const options = this._options;\n  options.vertexFormat =\n    this._materialProperty instanceof ColorMaterialProperty\n      ? PerInstanceColorAppearance.VERTEX_FORMAT\n      : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.radii = ellipsoid.radii.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.radii,\n  );\n  options.innerRadii = Property.getValueOrUndefined(\n    ellipsoid.innerRadii,\n    options.radii,\n  );\n  options.minimumClock = Property.getValueOrUndefined(\n    ellipsoid.minimumClock,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.maximumClock = Property.getValueOrUndefined(\n    ellipsoid.maximumClock,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.minimumCone = Property.getValueOrUndefined(\n    ellipsoid.minimumCone,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.maximumCone = Property.getValueOrUndefined(\n    ellipsoid.maximumCone,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.stackPartitions = Property.getValueOrUndefined(\n    ellipsoid.stackPartitions,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.slicePartitions = Property.getValueOrUndefined(\n    ellipsoid.slicePartitions,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.subdivisions = Property.getValueOrUndefined(\n    ellipsoid.subdivisions,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.offsetAttribute =\n    heightReference !== HeightReference.NONE\n      ? GeometryOffsetAttribute.ALL\n      : undefined;\n};\n\nEllipsoidGeometryUpdater.prototype._onEntityPropertyChanged =\n  heightReferenceOnEntityPropertyChanged;\n\nEllipsoidGeometryUpdater.DynamicGeometryUpdater =\n  DynamicEllipsoidGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicEllipsoidGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n\n  this._scene = geometryUpdater._scene;\n  this._modelMatrix = new Matrix4();\n  this._attributes = undefined;\n  this._outlineAttributes = undefined;\n  this._lastSceneMode = undefined;\n  this._lastShow = undefined;\n  this._lastOutlineShow = undefined;\n  this._lastOutlineWidth = undefined;\n  this._lastOutlineColor = undefined;\n  this._lastOffset = new Cartesian3();\n  this._material = {};\n}\n\nif (defined(Object.create)) {\n  DynamicEllipsoidGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicEllipsoidGeometryUpdater.prototype.constructor =\n    DynamicEllipsoidGeometryUpdater;\n}\n\nDynamicEllipsoidGeometryUpdater.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const ellipsoid = entity.ellipsoid;\n  if (\n    !entity.isShowing ||\n    !entity.isAvailable(time) ||\n    !Property.getValueOrDefault(ellipsoid.show, time, true)\n  ) {\n    if (defined(this._primitive)) {\n      this._primitive.show = false;\n    }\n\n    if (defined(this._outlinePrimitive)) {\n      this._outlinePrimitive.show = false;\n    }\n    return;\n  }\n\n  const radii = Property.getValueOrUndefined(\n    ellipsoid.radii,\n    time,\n    radiiScratch,\n  );\n  let modelMatrix = defined(radii)\n    ? entity.computeModelMatrixForHeightReference(\n        time,\n        ellipsoid.heightReference,\n        radii.z * 0.5,\n        this._scene.ellipsoid,\n        this._modelMatrix,\n      )\n    : undefined;\n  if (!defined(modelMatrix) || !defined(radii)) {\n    if (defined(this._primitive)) {\n      this._primitive.show = false;\n    }\n\n    if (defined(this._outlinePrimitive)) {\n      this._outlinePrimitive.show = false;\n    }\n    return;\n  }\n\n  //Compute attributes and material.\n  const showFill = Property.getValueOrDefault(ellipsoid.fill, time, true);\n  const showOutline = Property.getValueOrDefault(\n    ellipsoid.outline,\n    time,\n    false,\n  );\n  const outlineColor = Property.getValueOrClonedDefault(\n    ellipsoid.outlineColor,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const material = MaterialProperty.getValue(\n    time,\n    ellipsoid.material ?? defaultMaterial,\n    this._material,\n  );\n\n  // Check properties that could trigger a primitive rebuild.\n  const innerRadii = Property.getValueOrUndefined(\n    ellipsoid.innerRadii,\n    time,\n    innerRadiiScratch,\n  );\n  const minimumClock = Property.getValueOrUndefined(\n    ellipsoid.minimumClock,\n    time,\n  );\n  const maximumClock = Property.getValueOrUndefined(\n    ellipsoid.maximumClock,\n    time,\n  );\n  const minimumCone = Property.getValueOrUndefined(ellipsoid.minimumCone, time);\n  const maximumCone = Property.getValueOrUndefined(ellipsoid.maximumCone, time);\n  const stackPartitions = Property.getValueOrUndefined(\n    ellipsoid.stackPartitions,\n    time,\n  );\n  const slicePartitions = Property.getValueOrUndefined(\n    ellipsoid.slicePartitions,\n    time,\n  );\n  const subdivisions = Property.getValueOrUndefined(\n    ellipsoid.subdivisions,\n    time,\n  );\n  const outlineWidth = Property.getValueOrDefault(\n    ellipsoid.outlineWidth,\n    time,\n    1.0,\n  );\n  const heightReference = Property.getValueOrDefault(\n    ellipsoid.heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  const offsetAttribute =\n    heightReference !== HeightReference.NONE\n      ? GeometryOffsetAttribute.ALL\n      : undefined;\n\n  //In 3D we use a fast path by modifying Primitive.modelMatrix instead of regenerating the primitive every frame.\n  //Also check for height reference because this method doesn't work when the height is relative to terrain.\n  const sceneMode = this._scene.mode;\n  const in3D =\n    sceneMode === SceneMode.SCENE3D && heightReference === HeightReference.NONE;\n\n  const options = this._options;\n\n  const shadows = this._geometryUpdater.shadowsProperty.getValue(time);\n\n  const distanceDisplayConditionProperty =\n    this._geometryUpdater.distanceDisplayConditionProperty;\n  const distanceDisplayCondition =\n    distanceDisplayConditionProperty.getValue(time);\n\n  const offset = Property.getValueOrDefault(\n    this._geometryUpdater.terrainOffsetProperty,\n    time,\n    defaultOffset,\n    offsetScratch,\n  );\n\n  //We only rebuild the primitive if something other than the radii has changed\n  //For the radii, we use unit sphere and then deform it with a scale matrix.\n  const rebuildPrimitives =\n    !in3D ||\n    this._lastSceneMode !== sceneMode ||\n    !defined(this._primitive) || //\n    options.stackPartitions !== stackPartitions ||\n    options.slicePartitions !== slicePartitions || //\n    (defined(innerRadii) &&\n      !Cartesian3.equals(options.innerRadii !== innerRadii)) ||\n    options.minimumClock !== minimumClock || //\n    options.maximumClock !== maximumClock ||\n    options.minimumCone !== minimumCone || //\n    options.maximumCone !== maximumCone ||\n    options.subdivisions !== subdivisions || //\n    this._lastOutlineWidth !== outlineWidth ||\n    options.offsetAttribute !== offsetAttribute;\n\n  if (rebuildPrimitives) {\n    const primitives = this._primitives;\n    primitives.removeAndDestroy(this._primitive);\n    primitives.removeAndDestroy(this._outlinePrimitive);\n    this._primitive = undefined;\n    this._outlinePrimitive = undefined;\n    this._lastSceneMode = sceneMode;\n    this._lastOutlineWidth = outlineWidth;\n\n    options.stackPartitions = stackPartitions;\n    options.slicePartitions = slicePartitions;\n    options.subdivisions = subdivisions;\n    options.offsetAttribute = offsetAttribute;\n    options.radii = Cartesian3.clone(in3D ? unitSphere : radii, options.radii);\n    if (defined(innerRadii)) {\n      if (in3D) {\n        options.innerRadii = Cartesian3.fromElements(\n          innerRadii.x / radii.x,\n          innerRadii.y / radii.y,\n          innerRadii.z / radii.z,\n          options.innerRadii,\n        );\n      } else {\n        options.innerRadii = Cartesian3.clone(innerRadii, options.innerRadii);\n      }\n    } else {\n      options.innerRadii = undefined;\n    }\n    options.minimumClock = minimumClock;\n    options.maximumClock = maximumClock;\n    options.minimumCone = minimumCone;\n    options.maximumCone = maximumCone;\n\n    const appearance = new MaterialAppearance({\n      material: material,\n      translucent: material.isTranslucent(),\n      closed: true,\n    });\n    options.vertexFormat = appearance.vertexFormat;\n\n    const fillInstance = this._geometryUpdater.createFillGeometryInstance(\n      time,\n      in3D,\n      this._modelMatrix,\n    );\n\n    this._primitive = primitives.add(\n      new Primitive({\n        geometryInstances: fillInstance,\n        appearance: appearance,\n        asynchronous: false,\n        shadows: shadows,\n      }),\n    );\n\n    const outlineInstance = this._geometryUpdater.createOutlineGeometryInstance(\n      time,\n      in3D,\n      this._modelMatrix,\n    );\n    this._outlinePrimitive = primitives.add(\n      new Primitive({\n        geometryInstances: outlineInstance,\n        appearance: new PerInstanceColorAppearance({\n          flat: true,\n          translucent: outlineInstance.attributes.color.value[3] !== 255,\n          renderState: {\n            lineWidth:\n              this._geometryUpdater._scene.clampLineWidth(outlineWidth),\n          },\n        }),\n        asynchronous: false,\n        shadows: shadows,\n      }),\n    );\n\n    this._lastShow = showFill;\n    this._lastOutlineShow = showOutline;\n    this._lastOutlineColor = Color.clone(outlineColor, this._lastOutlineColor);\n    this._lastDistanceDisplayCondition = distanceDisplayCondition;\n    this._lastOffset = Cartesian3.clone(offset, this._lastOffset);\n  } else if (this._primitive.ready) {\n    //Update attributes only.\n    const primitive = this._primitive;\n    const outlinePrimitive = this._outlinePrimitive;\n\n    primitive.show = true;\n    outlinePrimitive.show = true;\n    primitive.appearance.material = material;\n\n    let attributes = this._attributes;\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(entity);\n      this._attributes = attributes;\n    }\n    if (showFill !== this._lastShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(\n        showFill,\n        attributes.show,\n      );\n      this._lastShow = showFill;\n    }\n\n    let outlineAttributes = this._outlineAttributes;\n\n    if (!defined(outlineAttributes)) {\n      outlineAttributes =\n        outlinePrimitive.getGeometryInstanceAttributes(entity);\n      this._outlineAttributes = outlineAttributes;\n    }\n\n    if (showOutline !== this._lastOutlineShow) {\n      outlineAttributes.show = ShowGeometryInstanceAttribute.toValue(\n        showOutline,\n        outlineAttributes.show,\n      );\n      this._lastOutlineShow = showOutline;\n    }\n\n    if (!Color.equals(outlineColor, this._lastOutlineColor)) {\n      outlineAttributes.color = ColorGeometryInstanceAttribute.toValue(\n        outlineColor,\n        outlineAttributes.color,\n      );\n      Color.clone(outlineColor, this._lastOutlineColor);\n    }\n\n    if (\n      !DistanceDisplayCondition.equals(\n        distanceDisplayCondition,\n        this._lastDistanceDisplayCondition,\n      )\n    ) {\n      attributes.distanceDisplayCondition =\n        DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n          distanceDisplayCondition,\n          attributes.distanceDisplayCondition,\n        );\n      outlineAttributes.distanceDisplayCondition =\n        DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n          distanceDisplayCondition,\n          outlineAttributes.distanceDisplayCondition,\n        );\n      DistanceDisplayCondition.clone(\n        distanceDisplayCondition,\n        this._lastDistanceDisplayCondition,\n      );\n    }\n\n    if (!Cartesian3.equals(offset, this._lastOffset)) {\n      attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n        offset,\n        attributes.offset,\n      );\n      outlineAttributes.offset = OffsetGeometryInstanceAttribute.toValue(\n        offset,\n        attributes.offset,\n      );\n      Cartesian3.clone(offset, this._lastOffset);\n    }\n  }\n\n  if (in3D) {\n    //Since we are scaling a unit sphere, we can't let any of the values go to zero.\n    //Instead we clamp them to a small value.  To the naked eye, this produces the same results\n    //that you get passing EllipsoidGeometry a radii with a zero component.\n    radii.x = Math.max(radii.x, 0.001);\n    radii.y = Math.max(radii.y, 0.001);\n    radii.z = Math.max(radii.z, 0.001);\n\n    modelMatrix = Matrix4.multiplyByScale(modelMatrix, radii, modelMatrix);\n    this._primitive.modelMatrix = modelMatrix;\n    this._outlinePrimitive.modelMatrix = modelMatrix;\n  }\n};\nexport default EllipsoidGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} EllipsoidGraphics.ConstructorOptions\n *\n * Initialization options for the EllipsoidGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the ellipsoid.\n * @property {Property | Cartesian3} [radii] A {@link Cartesian3} Property specifying the radii of the ellipsoid.\n * @property {Property | Cartesian3} [innerRadii] A {@link Cartesian3} Property specifying the inner radii of the ellipsoid.\n * @property {Property | number} [minimumClock=0.0] A Property specifying the minimum clock angle of the ellipsoid.\n * @property {Property | number} [maximumClock=2*PI] A Property specifying the maximum clock angle of the ellipsoid.\n * @property {Property | number} [minimumCone=0.0] A Property specifying the minimum cone angle of the ellipsoid.\n * @property {Property | number} [maximumCone=PI] A Property specifying the maximum cone angle of the ellipsoid.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height from the entity position is relative to.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the ellipsoid is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the ellipsoid.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the ellipsoid is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | number} [stackPartitions=64] A Property specifying the number of stacks.\n * @property {Property | number} [slicePartitions=64] A Property specifying the number of radial slices.\n * @property {Property | number} [subdivisions=128] A Property specifying the number of samples per outline ring, determining the granularity of the curvature.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the ellipsoid casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this ellipsoid will be displayed.\n */\n\n/**\n * Describe an ellipsoid or sphere.  The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias EllipsoidGraphics\n * @constructor\n *\n * @param {EllipsoidGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=spheres-and-ellipsoids|Cesium Sandcastle Spheres and Ellipsoids Demo}\n */\nfunction EllipsoidGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._radii = undefined;\n  this._radiiSubscription = undefined;\n  this._innerRadii = undefined;\n  this._innerRadiiSubscription = undefined;\n  this._minimumClock = undefined;\n  this._minimumClockSubscription = undefined;\n  this._maximumClock = undefined;\n  this._maximumClockSubscription = undefined;\n  this._minimumCone = undefined;\n  this._minimumConeSubscription = undefined;\n  this._maximumCone = undefined;\n  this._maximumConeSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._stackPartitions = undefined;\n  this._stackPartitionsSubscription = undefined;\n  this._slicePartitions = undefined;\n  this._slicePartitionsSubscription = undefined;\n  this._subdivisions = undefined;\n  this._subdivisionsSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(EllipsoidGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof EllipsoidGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the {@link Cartesian3} {@link Property} specifying the radii of the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   */\n  radii: createPropertyDescriptor(\"radii\"),\n\n  /**\n   * Gets or sets the {@link Cartesian3} {@link Property} specifying the inner radii of the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default radii\n   */\n  innerRadii: createPropertyDescriptor(\"innerRadii\"),\n\n  /**\n   * Gets or sets the Property specifying the minimum clock angle of the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  minimumClock: createPropertyDescriptor(\"minimumClock\"),\n\n  /**\n   * Gets or sets the Property specifying the maximum clock angle of the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default 2*PI\n   */\n  maximumClock: createPropertyDescriptor(\"maximumClock\"),\n\n  /**\n   * Gets or sets the Property specifying the minimum cone angle of the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  minimumCone: createPropertyDescriptor(\"minimumCone\"),\n\n  /**\n   * Gets or sets the Property specifying the maximum cone angle of the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default PI\n   */\n  maximumCone: createPropertyDescriptor(\"maximumCone\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the ellipsoid is filled with the provided material.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the ellipsoid.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the ellipsoid is outlined.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Gets or sets the Property specifying the number of stacks.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default 64\n   */\n  stackPartitions: createPropertyDescriptor(\"stackPartitions\"),\n\n  /**\n   * Gets or sets the Property specifying the number of radial slices per 360 degrees.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default 64\n   */\n  slicePartitions: createPropertyDescriptor(\"slicePartitions\"),\n\n  /**\n   * Gets or sets the Property specifying the number of samples per outline ring, determining the granularity of the curvature.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default 128\n   */\n  subdivisions: createPropertyDescriptor(\"subdivisions\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the ellipsoid\n   * casts or receives shadows from light sources.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this ellipsoid will be displayed.\n   * @memberof EllipsoidGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {EllipsoidGraphics} [result] The object onto which to store the result.\n * @returns {EllipsoidGraphics} The modified result parameter or a new instance if one was not provided.\n */\nEllipsoidGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new EllipsoidGraphics(this);\n  }\n  result.show = this.show;\n  result.radii = this.radii;\n  result.innerRadii = this.innerRadii;\n  result.minimumClock = this.minimumClock;\n  result.maximumClock = this.maximumClock;\n  result.minimumCone = this.minimumCone;\n  result.maximumCone = this.maximumCone;\n  result.heightReference = this.heightReference;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.stackPartitions = this.stackPartitions;\n  result.slicePartitions = this.slicePartitions;\n  result.subdivisions = this.subdivisions;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {EllipsoidGraphics} source The object to be merged into this object.\n */\nEllipsoidGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.radii = this.radii ?? source.radii;\n  this.innerRadii = this.innerRadii ?? source.innerRadii;\n  this.minimumClock = this.minimumClock ?? source.minimumClock;\n  this.maximumClock = this.maximumClock ?? source.maximumClock;\n  this.minimumCone = this.minimumCone ?? source.minimumCone;\n  this.maximumCone = this.maximumCone ?? source.maximumCone;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.stackPartitions = this.stackPartitions ?? source.stackPartitions;\n  this.slicePartitions = this.slicePartitions ?? source.slicePartitions;\n  this.subdivisions = this.subdivisions ?? source.subdivisions;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n};\nexport default EllipsoidGraphics;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport TrackingReferenceFrame from \"../Core/TrackingReferenceFrame.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport HeightReference, {\n  isHeightReferenceClamp,\n} from \"../Scene/HeightReference.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport BoxGraphics from \"./BoxGraphics.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport CorridorGraphics from \"./CorridorGraphics.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport createRawPropertyDescriptor from \"./createRawPropertyDescriptor.js\";\nimport CylinderGraphics from \"./CylinderGraphics.js\";\nimport EllipseGraphics from \"./EllipseGraphics.js\";\nimport EllipsoidGraphics from \"./EllipsoidGraphics.js\";\nimport LabelGraphics from \"./LabelGraphics.js\";\nimport ModelGraphics from \"./ModelGraphics.js\";\nimport Cesium3DTilesetGraphics from \"./Cesium3DTilesetGraphics.js\";\nimport PathGraphics from \"./PathGraphics.js\";\nimport PlaneGraphics from \"./PlaneGraphics.js\";\nimport PointGraphics from \"./PointGraphics.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\nimport PolylineVolumeGraphics from \"./PolylineVolumeGraphics.js\";\nimport Property from \"./Property.js\";\nimport PropertyBag from \"./PropertyBag.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport WallGraphics from \"./WallGraphics.js\";\n\nconst cartoScratch = new Cartographic();\n\nconst ExtraPropertyNames = [];\n\nfunction createConstantPositionProperty(value) {\n  return new ConstantPositionProperty(value);\n}\n\nfunction createPositionPropertyDescriptor(name) {\n  return createPropertyDescriptor(\n    name,\n    undefined,\n    createConstantPositionProperty,\n  );\n}\n\nfunction createPropertyTypeDescriptor(name, Type) {\n  return createPropertyDescriptor(name, undefined, function (value) {\n    if (value instanceof Type) {\n      return value;\n    }\n    return new Type(value);\n  });\n}\n\n/**\n * @typedef {object} Entity.ConstructorOptions\n *\n * Initialization options for the Entity constructor\n *\n * @property {string} [id] A unique identifier for this object. If none is provided, a GUID is generated.\n * @property {string} [name] A human readable name to display to users. It does not have to be unique.\n * @property {TimeIntervalCollection} [availability] The availability, if any, associated with this object.\n * @property {boolean} [show] A boolean value indicating if the entity and its children are displayed.\n * @property {TrackingReferenceFrame} [trackingReferenceFrame=TrackingReferenceFrame.AUTODETECT] The reference frame used when this entity is being tracked. <br/> If <code>undefined</code>, reference frame is determined based on entity velocity: near-surface slow moving entities are tracked using the local east-north-up reference frame, whereas fast moving entities such as satellites are tracked using VVLH (Vehicle Velocity, Local Horizontal).\n * @property {Property | string} [description] A string Property specifying an HTML description for this entity.\n * @property {PositionProperty | Cartesian3 | CallbackPositionProperty} [position] A Property specifying the entity position.\n * @property {Property | Quaternion} [orientation=Transforms.eastNorthUpToFixedFrame(position)] A Property specifying the entity orientation in respect to Earth-fixed-Earth-centered (ECEF). If undefined, east-north-up at entity position is used.\n * @property {Property | Cartesian3} [viewFrom] A suggested initial offset for viewing this object.\n * @property {Entity} [parent] A parent entity to associate with this entity.\n * @property {BillboardGraphics | BillboardGraphics.ConstructorOptions} [billboard] A billboard to associate with this entity.\n * @property {BoxGraphics | BoxGraphics.ConstructorOptions} [box] A box to associate with this entity.\n * @property {CorridorGraphics | CorridorGraphics.ConstructorOptions} [corridor] A corridor to associate with this entity.\n * @property {CylinderGraphics | CylinderGraphics.ConstructorOptions} [cylinder] A cylinder to associate with this entity.\n * @property {EllipseGraphics | EllipseGraphics.ConstructorOptions} [ellipse] A ellipse to associate with this entity.\n * @property {EllipsoidGraphics | EllipsoidGraphics.ConstructorOptions} [ellipsoid] A ellipsoid to associate with this entity.\n * @property {LabelGraphics | LabelGraphics.ConstructorOptions} [label] A options.label to associate with this entity.\n * @property {ModelGraphics | ModelGraphics.ConstructorOptions} [model] A model to associate with this entity.\n * @property {Cesium3DTilesetGraphics | Cesium3DTilesetGraphics.ConstructorOptions} [tileset] A 3D Tiles tileset to associate with this entity.\n * @property {PathGraphics | PathGraphics.ConstructorOptions} [path] A path to associate with this entity.\n * @property {PlaneGraphics | PlaneGraphics.ConstructorOptions} [plane] A plane to associate with this entity.\n * @property {PointGraphics | PointGraphics.ConstructorOptions} [point] A point to associate with this entity.\n * @property {PolygonGraphics | PolygonGraphics.ConstructorOptions} [polygon] A polygon to associate with this entity.\n * @property {PolylineGraphics | PolylineGraphics.ConstructorOptions} [polyline] A polyline to associate with this entity.\n * @property {PropertyBag | Object<string,*>} [properties] Arbitrary properties to associate with this entity.\n * @property {PolylineVolumeGraphics | PolylineVolumeGraphics.ConstructorOptions} [polylineVolume] A polylineVolume to associate with this entity.\n * @property {RectangleGraphics | RectangleGraphics.ConstructorOptions} [rectangle] A rectangle to associate with this entity.\n * @property {WallGraphics | WallGraphics.ConstructorOptions} [wall] A wall to associate with this entity.\n */\n\n/**\n * Entity instances aggregate multiple forms of visualization into a single high-level object.\n * They can be created manually and added to {@link Viewer#entities} or be produced by\n * data sources, such as {@link CzmlDataSource} and {@link GeoJsonDataSource}.\n * @alias Entity\n * @constructor\n *\n * @param {Entity.ConstructorOptions} [options] Object describing initialization options\n *\n * @see {@link https://cesium.com/learn/cesiumjs-learn/cesiumjs-creating-entities/|Creating Entities}\n */\nfunction Entity(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let id = options.id;\n  if (!defined(id)) {\n    id = createGuid();\n  }\n\n  this._availability = undefined;\n  this._id = id;\n  this._definitionChanged = new Event();\n  this._name = options.name;\n  this._show = options.show ?? true;\n  this._trackingReferenceFrame =\n    options.trackingReferenceFrame ?? TrackingReferenceFrame.AUTODETECT;\n  this._parent = undefined;\n  this._propertyNames = [\n    \"billboard\",\n    \"box\",\n    \"corridor\",\n    \"cylinder\",\n    \"description\",\n    \"ellipse\",\n    \"ellipsoid\",\n    \"label\",\n    \"model\",\n    \"tileset\",\n    \"orientation\",\n    \"path\",\n    \"plane\",\n    \"point\",\n    \"polygon\",\n    \"polyline\",\n    \"polylineVolume\",\n    \"position\",\n    \"properties\",\n    \"rectangle\",\n    \"viewFrom\",\n    \"wall\",\n    ...ExtraPropertyNames,\n  ];\n\n  this._billboard = undefined;\n  this._billboardSubscription = undefined;\n  this._box = undefined;\n  this._boxSubscription = undefined;\n  this._corridor = undefined;\n  this._corridorSubscription = undefined;\n  this._cylinder = undefined;\n  this._cylinderSubscription = undefined;\n  this._description = undefined;\n  this._descriptionSubscription = undefined;\n  this._ellipse = undefined;\n  this._ellipseSubscription = undefined;\n  this._ellipsoid = undefined;\n  this._ellipsoidSubscription = undefined;\n  this._label = undefined;\n  this._labelSubscription = undefined;\n  this._model = undefined;\n  this._modelSubscription = undefined;\n  this._tileset = undefined;\n  this._tilesetSubscription = undefined;\n  this._orientation = undefined;\n  this._orientationSubscription = undefined;\n  this._path = undefined;\n  this._pathSubscription = undefined;\n  this._plane = undefined;\n  this._planeSubscription = undefined;\n  this._point = undefined;\n  this._pointSubscription = undefined;\n  this._polygon = undefined;\n  this._polygonSubscription = undefined;\n  this._polyline = undefined;\n  this._polylineSubscription = undefined;\n  this._polylineVolume = undefined;\n  this._polylineVolumeSubscription = undefined;\n  this._position = undefined;\n  this._positionSubscription = undefined;\n  this._properties = undefined;\n  this._propertiesSubscription = undefined;\n  this._rectangle = undefined;\n  this._rectangleSubscription = undefined;\n  this._viewFrom = undefined;\n  this._viewFromSubscription = undefined;\n  this._wall = undefined;\n  this._wallSubscription = undefined;\n  this._children = [];\n\n  /**\n   * Gets or sets the entity collection that this entity belongs to.\n   * @type {EntityCollection}\n   */\n  this.entityCollection = undefined;\n\n  this.parent = options.parent;\n  this.merge(options);\n}\n\nfunction updateShow(entity, children, isShowing) {\n  const length = children.length;\n  for (let i = 0; i < length; i++) {\n    const child = children[i];\n    const childShow = child._show;\n    const oldValue = !isShowing && childShow;\n    const newValue = isShowing && childShow;\n    if (oldValue !== newValue) {\n      updateShow(child, child._children, isShowing);\n    }\n  }\n  entity._definitionChanged.raiseEvent(\n    entity,\n    \"isShowing\",\n    isShowing,\n    !isShowing,\n  );\n}\n\nObject.defineProperties(Entity.prototype, {\n  /**\n   * The availability, if any, associated with this object.\n   * If availability is undefined, it is assumed that this object's\n   * other properties will return valid data for any provided time.\n   * If availability exists, the objects other properties will only\n   * provide valid data if queried within the given interval.\n   * @memberof Entity.prototype\n   * @type {TimeIntervalCollection|undefined}\n   */\n  availability: createRawPropertyDescriptor(\"availability\"),\n  /**\n   * Gets the unique ID associated with this object.\n   * @memberof Entity.prototype\n   * @type {string}\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof Entity.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets or sets the name of the object.  The name is intended for end-user\n   * consumption and does not need to be unique.\n   * @memberof Entity.prototype\n   * @type {string|undefined}\n   */\n  name: createRawPropertyDescriptor(\"name\"),\n  /**\n   * Gets or sets whether this entity should be displayed. When set to true,\n   * the entity is only displayed if the parent entity's show property is also true.\n   * @memberof Entity.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (value === this._show) {\n        return;\n      }\n\n      const wasShowing = this.isShowing;\n      this._show = value;\n      const isShowing = this.isShowing;\n\n      if (wasShowing !== isShowing) {\n        updateShow(this, this._children, isShowing);\n      }\n\n      this._definitionChanged.raiseEvent(this, \"show\", value, !value);\n    },\n  },\n  /**\n   * Gets or sets the entity's tracking reference frame.\n   * @demo {@link https://sandcastle.cesium.com/index.html?id=entity-tracking|Cesium Sandcastle Entity tracking Demo}\n   *\n   * @memberof Entity.prototype\n   * @type {TrackingReferenceFrame}\n   */\n  trackingReferenceFrame: createRawPropertyDescriptor(\"trackingReferenceFrame\"),\n  /**\n   * Gets whether this entity is being displayed, taking into account\n   * the visibility of any ancestor entities.\n   * @memberof Entity.prototype\n   * @type {boolean}\n   */\n  isShowing: {\n    get: function () {\n      return (\n        this._show &&\n        (!defined(this.entityCollection) || this.entityCollection.show) &&\n        (!defined(this._parent) || this._parent.isShowing)\n      );\n    },\n  },\n  /**\n   * Gets or sets the parent object.\n   * @memberof Entity.prototype\n   * @type {Entity|undefined}\n   */\n  parent: {\n    get: function () {\n      return this._parent;\n    },\n    set: function (value) {\n      const oldValue = this._parent;\n\n      if (oldValue === value) {\n        return;\n      }\n\n      const wasShowing = this.isShowing;\n      if (defined(oldValue)) {\n        const index = oldValue._children.indexOf(this);\n        oldValue._children.splice(index, 1);\n      }\n\n      this._parent = value;\n      if (defined(value)) {\n        value._children.push(this);\n      }\n\n      const isShowing = this.isShowing;\n\n      if (wasShowing !== isShowing) {\n        updateShow(this, this._children, isShowing);\n      }\n\n      this._definitionChanged.raiseEvent(this, \"parent\", value, oldValue);\n    },\n  },\n  /**\n   * Gets the names of all properties registered on this instance.\n   * @memberof Entity.prototype\n   * @type {string[]}\n   */\n  propertyNames: {\n    get: function () {\n      return this._propertyNames;\n    },\n  },\n  /**\n   * Gets or sets the billboard.\n   * @memberof Entity.prototype\n   * @type {BillboardGraphics|undefined}\n   */\n  billboard: createPropertyTypeDescriptor(\"billboard\", BillboardGraphics),\n  /**\n   * Gets or sets the box.\n   * @memberof Entity.prototype\n   * @type {BoxGraphics|undefined}\n   */\n  box: createPropertyTypeDescriptor(\"box\", BoxGraphics),\n  /**\n   * Gets or sets the corridor.\n   * @memberof Entity.prototype\n   * @type {CorridorGraphics|undefined}\n   */\n  corridor: createPropertyTypeDescriptor(\"corridor\", CorridorGraphics),\n  /**\n   * Gets or sets the cylinder.\n   * @memberof Entity.prototype\n   * @type {CylinderGraphics|undefined}\n   */\n  cylinder: createPropertyTypeDescriptor(\"cylinder\", CylinderGraphics),\n  /**\n   * Gets or sets the description.\n   * @memberof Entity.prototype\n   * @type {Property|undefined}\n   */\n  description: createPropertyDescriptor(\"description\"),\n  /**\n   * Gets or sets the ellipse.\n   * @memberof Entity.prototype\n   * @type {EllipseGraphics|undefined}\n   */\n  ellipse: createPropertyTypeDescriptor(\"ellipse\", EllipseGraphics),\n  /**\n   * Gets or sets the ellipsoid.\n   * @memberof Entity.prototype\n   * @type {EllipsoidGraphics|undefined}\n   */\n  ellipsoid: createPropertyTypeDescriptor(\"ellipsoid\", EllipsoidGraphics),\n  /**\n   * Gets or sets the label.\n   * @memberof Entity.prototype\n   * @type {LabelGraphics|undefined}\n   */\n  label: createPropertyTypeDescriptor(\"label\", LabelGraphics),\n  /**\n   * Gets or sets the model.\n   * @memberof Entity.prototype\n   * @type {ModelGraphics|undefined}\n   */\n  model: createPropertyTypeDescriptor(\"model\", ModelGraphics),\n  /**\n   * Gets or sets the tileset.\n   * @memberof Entity.prototype\n   * @type {Cesium3DTilesetGraphics|undefined}\n   */\n  tileset: createPropertyTypeDescriptor(\"tileset\", Cesium3DTilesetGraphics),\n  /**\n   * Gets or sets the orientation in respect to Earth-fixed-Earth-centered (ECEF).\n   * Defaults to east-north-up at entity position.\n   * @memberof Entity.prototype\n   * @type {Property|undefined}\n   */\n  orientation: createPropertyDescriptor(\"orientation\"),\n  /**\n   * Gets or sets the path.\n   * @memberof Entity.prototype\n   * @type {PathGraphics|undefined}\n   */\n  path: createPropertyTypeDescriptor(\"path\", PathGraphics),\n  /**\n   * Gets or sets the plane.\n   * @memberof Entity.prototype\n   * @type {PlaneGraphics|undefined}\n   */\n  plane: createPropertyTypeDescriptor(\"plane\", PlaneGraphics),\n  /**\n   * Gets or sets the point graphic.\n   * @memberof Entity.prototype\n   * @type {PointGraphics|undefined}\n   */\n  point: createPropertyTypeDescriptor(\"point\", PointGraphics),\n  /**\n   * Gets or sets the polygon.\n   * @memberof Entity.prototype\n   * @type {PolygonGraphics|undefined}\n   */\n  polygon: createPropertyTypeDescriptor(\"polygon\", PolygonGraphics),\n  /**\n   * Gets or sets the polyline.\n   * @memberof Entity.prototype\n   * @type {PolylineGraphics|undefined}\n   */\n  polyline: createPropertyTypeDescriptor(\"polyline\", PolylineGraphics),\n  /**\n   * Gets or sets the polyline volume.\n   * @memberof Entity.prototype\n   * @type {PolylineVolumeGraphics|undefined}\n   */\n  polylineVolume: createPropertyTypeDescriptor(\n    \"polylineVolume\",\n    PolylineVolumeGraphics,\n  ),\n  /**\n   * Gets or sets the bag of arbitrary properties associated with this entity.\n   * @memberof Entity.prototype\n   * @type {PropertyBag|undefined}\n   */\n  properties: createPropertyTypeDescriptor(\"properties\", PropertyBag),\n  /**\n   * Gets or sets the position.\n   * @memberof Entity.prototype\n   * @type {PositionProperty|undefined}\n   */\n  position: createPositionPropertyDescriptor(\"position\"),\n  /**\n   * Gets or sets the rectangle.\n   * @memberof Entity.prototype\n   * @type {RectangleGraphics|undefined}\n   */\n  rectangle: createPropertyTypeDescriptor(\"rectangle\", RectangleGraphics),\n  /**\n   * Gets or sets the suggested initial offset when tracking this object.\n   * The offset is typically defined in the east-north-up reference frame,\n   * but may be another frame depending on the object's velocity.\n   * @memberof Entity.prototype\n   * @type {Property|undefined}\n   */\n  viewFrom: createPropertyDescriptor(\"viewFrom\"),\n  /**\n   * Gets or sets the wall.\n   * @memberof Entity.prototype\n   * @type {WallGraphics|undefined}\n   */\n  wall: createPropertyTypeDescriptor(\"wall\", WallGraphics),\n});\n\n/**\n * Add the specified type and construct the properties for it in the Entity class\n * @private\n * @param {string} propertyName name of the property that controls/accesses this entity type\n * @param {{ constructor: function }} Type The Graphics class to associate with this entity type\n */\nEntity.registerEntityType = function (propertyName, Type) {\n  Object.defineProperties(Entity.prototype, {\n    [propertyName]: createPropertyTypeDescriptor(propertyName, Type),\n  });\n  if (!ExtraPropertyNames.includes(propertyName)) {\n    ExtraPropertyNames.push(propertyName);\n  }\n};\n\n/**\n * Given a time, returns true if this object should have data during that time.\n *\n * @param {JulianDate} time The time to check availability for.\n * @returns {boolean} true if the object should have data during the provided time, false otherwise.\n */\nEntity.prototype.isAvailable = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const availability = this._availability;\n  return !defined(availability) || availability.contains(time);\n};\n\n/**\n * Adds a property to this object.  Once a property is added, it can be\n * observed with {@link Entity#definitionChanged} and composited\n * with {@link CompositeEntityCollection}\n *\n * @param {string} propertyName The name of the property to add.\n *\n * @exception {DeveloperError} \"propertyName\" is a reserved property name.\n * @exception {DeveloperError} \"propertyName\" is already a registered property.\n */\nEntity.prototype.addProperty = function (propertyName) {\n  const propertyNames = this._propertyNames;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(propertyName)) {\n    throw new DeveloperError(\"propertyName is required.\");\n  }\n  if (propertyNames.indexOf(propertyName) !== -1) {\n    throw new DeveloperError(\n      `${propertyName} is already a registered property.`,\n    );\n  }\n  if (propertyName in this) {\n    throw new DeveloperError(`${propertyName} is a reserved property name.`);\n  }\n  //>>includeEnd('debug');\n\n  propertyNames.push(propertyName);\n  Object.defineProperty(\n    this,\n    propertyName,\n    createRawPropertyDescriptor(propertyName, true),\n  );\n};\n\n/**\n * Removed a property previously added with addProperty.\n *\n * @param {string} propertyName The name of the property to remove.\n *\n * @exception {DeveloperError} \"propertyName\" is a reserved property name.\n * @exception {DeveloperError} \"propertyName\" is not a registered property.\n */\nEntity.prototype.removeProperty = function (propertyName) {\n  const propertyNames = this._propertyNames;\n  const index = propertyNames.indexOf(propertyName);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(propertyName)) {\n    throw new DeveloperError(\"propertyName is required.\");\n  }\n  if (index === -1) {\n    throw new DeveloperError(`${propertyName} is not a registered property.`);\n  }\n  //>>includeEnd('debug');\n\n  this._propertyNames.splice(index, 1);\n  delete this[propertyName];\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {Entity} source The object to be merged into this object.\n */\nEntity.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  //Name, show, and availability are not Property objects and are currently handled differently.\n  //source.show is intentionally ignored because this.show always has a value.\n  this.name = this.name ?? source.name;\n  this.availability = this.availability ?? source.availability;\n\n  const propertyNames = this._propertyNames;\n  const sourcePropertyNames = defined(source._propertyNames)\n    ? source._propertyNames\n    : Object.keys(source);\n  const propertyNamesLength = sourcePropertyNames.length;\n  for (let i = 0; i < propertyNamesLength; i++) {\n    const name = sourcePropertyNames[i];\n\n    //While source is required by the API to be an Entity, we internally call this method from the\n    //constructor with an options object to configure initial custom properties.\n    //So we need to ignore reserved-non-property.\n    if (\n      name === \"parent\" ||\n      name === \"name\" ||\n      name === \"availability\" ||\n      name === \"children\"\n    ) {\n      continue;\n    }\n\n    const targetProperty = this[name];\n    const sourceProperty = source[name];\n\n    //Custom properties that are registered on the source entity must also\n    //get registered on this entity.\n    if (!defined(targetProperty) && propertyNames.indexOf(name) === -1) {\n      this.addProperty(name);\n    }\n\n    if (defined(sourceProperty)) {\n      if (defined(targetProperty)) {\n        if (defined(targetProperty.merge)) {\n          targetProperty.merge(sourceProperty);\n        }\n      } else if (\n        defined(sourceProperty.merge) &&\n        defined(sourceProperty.clone)\n      ) {\n        this[name] = sourceProperty.clone();\n      } else {\n        this[name] = sourceProperty;\n      }\n    }\n  }\n};\n\nconst matrix3Scratch = new Matrix3();\nconst positionScratch = new Cartesian3();\nconst orientationScratch = new Quaternion();\n\n/**\n * Computes the model matrix for the entity's transform at specified time. Returns undefined if position is undefined\n *\n * @param {JulianDate} time The time to retrieve model matrix for.\n * @param {Matrix4} [result] The object onto which to store the result.\n *\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. Result is undefined if position is undefined.\n */\nEntity.prototype.computeModelMatrix = function (time, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"time\", time);\n  //>>includeEnd('debug');\n  const position = Property.getValueOrUndefined(\n    this._position,\n    time,\n    positionScratch,\n  );\n  if (!defined(position)) {\n    return undefined;\n  }\n\n  const orientation = Property.getValueOrUndefined(\n    this._orientation,\n    time,\n    orientationScratch,\n  );\n  if (!defined(orientation)) {\n    result = Transforms.eastNorthUpToFixedFrame(position, undefined, result);\n  } else {\n    result = Matrix4.fromRotationTranslation(\n      Matrix3.fromQuaternion(orientation, matrix3Scratch),\n      position,\n      result,\n    );\n  }\n  return result;\n};\n\n/**\n * @private\n */\nEntity.prototype.computeModelMatrixForHeightReference = function (\n  time,\n  heightReferenceProperty,\n  heightOffset,\n  ellipsoid,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"time\", time);\n  //>>includeEnd('debug');\n  const heightReference = Property.getValueOrDefault(\n    heightReferenceProperty,\n    time,\n    HeightReference.NONE,\n  );\n  let position = Property.getValueOrUndefined(\n    this._position,\n    time,\n    positionScratch,\n  );\n  if (\n    heightReference === HeightReference.NONE ||\n    !defined(position) ||\n    Cartesian3.equalsEpsilon(position, Cartesian3.ZERO, CesiumMath.EPSILON8)\n  ) {\n    return this.computeModelMatrix(time, result);\n  }\n\n  const carto = ellipsoid.cartesianToCartographic(position, cartoScratch);\n  if (isHeightReferenceClamp(heightReference)) {\n    carto.height = heightOffset;\n  } else {\n    carto.height += heightOffset;\n  }\n  position = ellipsoid.cartographicToCartesian(carto, position);\n\n  const orientation = Property.getValueOrUndefined(\n    this._orientation,\n    time,\n    orientationScratch,\n  );\n  if (!defined(orientation)) {\n    result = Transforms.eastNorthUpToFixedFrame(position, undefined, result);\n  } else {\n    result = Matrix4.fromRotationTranslation(\n      Matrix3.fromQuaternion(orientation, matrix3Scratch),\n      position,\n      result,\n    );\n  }\n  return result;\n};\n\n/**\n * Checks if the given Scene supports materials besides Color on Entities draped on terrain or 3D Tiles.\n * If this feature is not supported, Entities with non-color materials but no `height` will\n * instead be rendered as if height is 0.\n *\n * @param {Scene} scene The current scene.\n * @returns {boolean} Whether or not the current scene supports materials for entities on terrain.\n */\nEntity.supportsMaterialsforEntitiesOnTerrain = function (scene) {\n  return GroundPrimitive.supportsMaterials(scene);\n};\n\n/**\n * Checks if the given Scene supports polylines clamped to terrain or 3D Tiles.\n * If this feature is not supported, Entities with PolylineGraphics will be rendered with vertices at\n * the provided heights and using the `arcType` parameter instead of clamped to the ground.\n *\n * @param {Scene} scene The current scene.\n * @returns {boolean} Whether or not the current scene supports polylines on terrain or 3D TIles.\n */\nEntity.supportsPolylinesOnTerrain = function (scene) {\n  return GroundPolylinePrimitive.isSupported(scene);\n};\nexport default Entity;\n","\nconst ARRAY_TYPES = [\n    Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n    Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nconst VERSION = 1; // serialized format version\nconst HEADER_SIZE = 8;\n\nexport default class KDBush {\n\n    /**\n     * Creates an index from raw `ArrayBuffer` data.\n     * @param {ArrayBuffer} data\n     */\n    static from(data) {\n        if (!(data instanceof ArrayBuffer)) {\n            throw new Error('Data must be an instance of ArrayBuffer.');\n        }\n        const [magic, versionAndType] = new Uint8Array(data, 0, 2);\n        if (magic !== 0xdb) {\n            throw new Error('Data does not appear to be in a KDBush format.');\n        }\n        const version = versionAndType >> 4;\n        if (version !== VERSION) {\n            throw new Error(`Got v${version} data when expected v${VERSION}.`);\n        }\n        const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n        if (!ArrayType) {\n            throw new Error('Unrecognized array type.');\n        }\n        const [nodeSize] = new Uint16Array(data, 2, 1);\n        const [numItems] = new Uint32Array(data, 4, 1);\n\n        return new KDBush(numItems, nodeSize, ArrayType, data);\n    }\n\n    /**\n     * Creates an index that will hold a given number of items.\n     * @param {number} numItems\n     * @param {number} [nodeSize=64] Size of the KD-tree node (64 by default).\n     * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n     * @param {ArrayBuffer} [data] (For internal use only)\n     */\n    constructor(numItems, nodeSize = 64, ArrayType = Float64Array, data) {\n        if (isNaN(numItems) || numItems < 0) throw new Error(`Unpexpected numItems value: ${numItems}.`);\n\n        this.numItems = +numItems;\n        this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n        this.ArrayType = ArrayType;\n        this.IndexArrayType = numItems < 65536 ? Uint16Array : Uint32Array;\n\n        const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n        const coordsByteSize = numItems * 2 * this.ArrayType.BYTES_PER_ELEMENT;\n        const idsByteSize = numItems * this.IndexArrayType.BYTES_PER_ELEMENT;\n        const padCoords = (8 - idsByteSize % 8) % 8;\n\n        if (arrayTypeIndex < 0) {\n            throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n        }\n\n        if (data && (data instanceof ArrayBuffer)) { // reconstruct an index from a buffer\n            this.data = data;\n            this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n            this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n            this._pos = numItems * 2;\n            this._finished = true;\n        } else { // initialize a new index\n            this.data = new ArrayBuffer(HEADER_SIZE + coordsByteSize + idsByteSize + padCoords);\n            this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n            this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n            this._pos = 0;\n            this._finished = false;\n\n            // set header\n            new Uint8Array(this.data, 0, 2).set([0xdb, (VERSION << 4) + arrayTypeIndex]);\n            new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n            new Uint32Array(this.data, 4, 1)[0] = numItems;\n        }\n    }\n\n    /**\n     * Add a point to the index.\n     * @param {number} x\n     * @param {number} y\n     * @returns {number} An incremental index associated with the added item (starting from `0`).\n     */\n    add(x, y) {\n        const index = this._pos >> 1;\n        this.ids[index] = index;\n        this.coords[this._pos++] = x;\n        this.coords[this._pos++] = y;\n        return index;\n    }\n\n    /**\n     * Perform indexing of the added points.\n     */\n    finish() {\n        const numAdded = this._pos >> 1;\n        if (numAdded !== this.numItems) {\n            throw new Error(`Added ${numAdded} items when expected ${this.numItems}.`);\n        }\n        // kd-sort both arrays for efficient search\n        sort(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0);\n\n        this._finished = true;\n        return this;\n    }\n\n    /**\n     * Search the index for items within a given bounding box.\n     * @param {number} minX\n     * @param {number} minY\n     * @param {number} maxX\n     * @param {number} maxY\n     * @returns {number[]} An array of indices correponding to the found items.\n     */\n    range(minX, minY, maxX, maxY) {\n        if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n        const {ids, coords, nodeSize} = this;\n        const stack = [0, ids.length - 1, 0];\n        const result = [];\n\n        // recursively search for items in range in the kd-sorted arrays\n        while (stack.length) {\n            const axis = stack.pop() || 0;\n            const right = stack.pop() || 0;\n            const left = stack.pop() || 0;\n\n            // if we reached \"tree node\", search linearly\n            if (right - left <= nodeSize) {\n                for (let i = left; i <= right; i++) {\n                    const x = coords[2 * i];\n                    const y = coords[2 * i + 1];\n                    if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n                }\n                continue;\n            }\n\n            // otherwise find the middle index\n            const m = (left + right) >> 1;\n\n            // include the middle item if it's in range\n            const x = coords[2 * m];\n            const y = coords[2 * m + 1];\n            if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n            // queue search in halves that intersect the query\n            if (axis === 0 ? minX <= x : minY <= y) {\n                stack.push(left);\n                stack.push(m - 1);\n                stack.push(1 - axis);\n            }\n            if (axis === 0 ? maxX >= x : maxY >= y) {\n                stack.push(m + 1);\n                stack.push(right);\n                stack.push(1 - axis);\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Search the index for items within a given radius.\n     * @param {number} qx\n     * @param {number} qy\n     * @param {number} r Query radius.\n     * @returns {number[]} An array of indices correponding to the found items.\n     */\n    within(qx, qy, r) {\n        if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n        const {ids, coords, nodeSize} = this;\n        const stack = [0, ids.length - 1, 0];\n        const result = [];\n        const r2 = r * r;\n\n        // recursively search for items within radius in the kd-sorted arrays\n        while (stack.length) {\n            const axis = stack.pop() || 0;\n            const right = stack.pop() || 0;\n            const left = stack.pop() || 0;\n\n            // if we reached \"tree node\", search linearly\n            if (right - left <= nodeSize) {\n                for (let i = left; i <= right; i++) {\n                    if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n                }\n                continue;\n            }\n\n            // otherwise find the middle index\n            const m = (left + right) >> 1;\n\n            // include the middle item if it's in range\n            const x = coords[2 * m];\n            const y = coords[2 * m + 1];\n            if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n            // queue search in halves that intersect the query\n            if (axis === 0 ? qx - r <= x : qy - r <= y) {\n                stack.push(left);\n                stack.push(m - 1);\n                stack.push(1 - axis);\n            }\n            if (axis === 0 ? qx + r >= x : qy + r >= y) {\n                stack.push(m + 1);\n                stack.push(right);\n                stack.push(1 - axis);\n            }\n        }\n\n        return result;\n    }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} nodeSize\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction sort(ids, coords, nodeSize, left, right, axis) {\n    if (right - left <= nodeSize) return;\n\n    const m = (left + right) >> 1; // middle index\n\n    // sort ids and coords around the middle index so that the halves lie\n    // either left/right or top/bottom correspondingly (taking turns)\n    select(ids, coords, m, left, right, axis);\n\n    // recursively kd-sort first half and second half on the opposite axis\n    sort(ids, coords, nodeSize, left, m - 1, 1 - axis);\n    sort(ids, coords, nodeSize, m + 1, right, 1 - axis);\n}\n\n/**\n * Custom Floyd-Rivest selection algorithm: sort ids and coords so that\n * [left..k-1] items are smaller than k-th item (on either x or y axis)\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} k\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction select(ids, coords, k, left, right, axis) {\n\n    while (right > left) {\n        if (right - left > 600) {\n            const n = right - left + 1;\n            const m = k - left + 1;\n            const z = Math.log(n);\n            const s = 0.5 * Math.exp(2 * z / 3);\n            const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n            const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            select(ids, coords, k, newLeft, newRight, axis);\n        }\n\n        const t = coords[2 * k + axis];\n        let i = left;\n        let j = right;\n\n        swapItem(ids, coords, left, k);\n        if (coords[2 * right + axis] > t) swapItem(ids, coords, left, right);\n\n        while (i < j) {\n            swapItem(ids, coords, i, j);\n            i++;\n            j--;\n            while (coords[2 * i + axis] < t) i++;\n            while (coords[2 * j + axis] > t) j--;\n        }\n\n        if (coords[2 * left + axis] === t) swapItem(ids, coords, left, j);\n        else {\n            j++;\n            swapItem(ids, coords, j, right);\n        }\n\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType<TypedArrayConstructor>} coords\n * @param {number} i\n * @param {number} j\n */\nfunction swapItem(ids, coords, i, j) {\n    swap(ids, i, j);\n    swap(coords, 2 * i, 2 * j);\n    swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\n/**\n * @param {InstanceType<TypedArrayConstructor>} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/**\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction sqDist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\nimport Event from \"../Core/Event.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Billboard from \"../Scene/Billboard.js\";\nimport BillboardCollection from \"../Scene/BillboardCollection.js\";\nimport Label from \"../Scene/Label.js\";\nimport LabelCollection from \"../Scene/LabelCollection.js\";\nimport PointPrimitive from \"../Scene/PointPrimitive.js\";\nimport PointPrimitiveCollection from \"../Scene/PointPrimitiveCollection.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport KDBush from \"kdbush\";\n\n/**\n * Defines how screen space objects (billboards, points, labels) are clustered.\n *\n * @param {object} [options] An object with the following properties:\n * @param {boolean} [options.enabled=false] Whether or not to enable clustering.\n * @param {number} [options.pixelRange=80] The pixel range to extend the screen space bounding box.\n * @param {number} [options.minimumClusterSize=2] The minimum number of screen space objects that can be clustered.\n * @param {boolean} [options.clusterBillboards=true] Whether or not to cluster the billboards of an entity.\n * @param {boolean} [options.clusterLabels=true] Whether or not to cluster the labels of an entity.\n * @param {boolean} [options.clusterPoints=true] Whether or not to cluster the points of an entity.\n * @param {boolean} [options.show=true] Determines if the entities in the cluster will be shown.\n *\n * @alias EntityCluster\n * @constructor\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=clustering|Cesium Sandcastle Clustering Demo}\n */\nfunction EntityCluster(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._enabled = options.enabled ?? false;\n  this._pixelRange = options.pixelRange ?? 80;\n  this._minimumClusterSize = options.minimumClusterSize ?? 2;\n  this._clusterBillboards = options.clusterBillboards ?? true;\n  this._clusterLabels = options.clusterLabels ?? true;\n  this._clusterPoints = options.clusterPoints ?? true;\n\n  this._labelCollection = undefined;\n  this._billboardCollection = undefined;\n  this._pointCollection = undefined;\n\n  this._clusterBillboardCollection = undefined;\n  this._clusterLabelCollection = undefined;\n  this._clusterPointCollection = undefined;\n\n  this._collectionIndicesByEntity = {};\n\n  this._unusedLabelIndices = [];\n  this._unusedBillboardIndices = [];\n  this._unusedPointIndices = [];\n\n  this._previousClusters = [];\n  this._previousHeight = undefined;\n\n  this._enabledDirty = false;\n  this._clusterDirty = false;\n\n  this._cluster = undefined;\n  this._removeEventListener = undefined;\n\n  this._clusterEvent = new Event();\n\n  /**\n   * Determines if entities in this collection will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n}\n\nfunction expandBoundingBox(bbox, pixelRange) {\n  bbox.x -= pixelRange;\n  bbox.y -= pixelRange;\n  bbox.width += pixelRange * 2.0;\n  bbox.height += pixelRange * 2.0;\n}\n\nconst labelBoundingBoxScratch = new BoundingRectangle();\n\nfunction getBoundingBox(item, coord, pixelRange, entityCluster, result) {\n  if (defined(item._labelCollection) && entityCluster._clusterLabels) {\n    result = Label.getScreenSpaceBoundingBox(item, coord, result);\n  } else if (\n    defined(item._billboardCollection) &&\n    entityCluster._clusterBillboards\n  ) {\n    result = Billboard.getScreenSpaceBoundingBox(item, coord, result);\n  } else if (\n    defined(item._pointPrimitiveCollection) &&\n    entityCluster._clusterPoints\n  ) {\n    result = PointPrimitive.getScreenSpaceBoundingBox(item, coord, result);\n  }\n\n  expandBoundingBox(result, pixelRange);\n\n  if (\n    entityCluster._clusterLabels &&\n    !defined(item._labelCollection) &&\n    defined(item.id) &&\n    hasLabelIndex(entityCluster, item.id.id) &&\n    defined(item.id._label)\n  ) {\n    const labelIndex =\n      entityCluster._collectionIndicesByEntity[item.id.id].labelIndex;\n    const label = entityCluster._labelCollection.get(labelIndex);\n    const labelBBox = Label.getScreenSpaceBoundingBox(\n      label,\n      coord,\n      labelBoundingBoxScratch,\n    );\n    expandBoundingBox(labelBBox, pixelRange);\n    result = BoundingRectangle.union(result, labelBBox, result);\n  }\n\n  return result;\n}\n\nfunction addNonClusteredItem(item, entityCluster) {\n  item.clusterShow = true;\n\n  if (\n    !defined(item._labelCollection) &&\n    defined(item.id) &&\n    hasLabelIndex(entityCluster, item.id.id) &&\n    defined(item.id._label)\n  ) {\n    const labelIndex =\n      entityCluster._collectionIndicesByEntity[item.id.id].labelIndex;\n    const label = entityCluster._labelCollection.get(labelIndex);\n    label.clusterShow = true;\n  }\n}\n\nfunction addCluster(position, numPoints, ids, entityCluster) {\n  const cluster = {\n    billboard: entityCluster._clusterBillboardCollection.add(),\n    label: entityCluster._clusterLabelCollection.add(),\n    point: entityCluster._clusterPointCollection.add(),\n  };\n\n  cluster.billboard.show = false;\n  cluster.point.show = false;\n  cluster.label.show = true;\n  cluster.label.text = numPoints.toLocaleString();\n  cluster.label.id = ids;\n  cluster.billboard.position =\n    cluster.label.position =\n    cluster.point.position =\n      position;\n\n  entityCluster._clusterEvent.raiseEvent(ids, cluster);\n}\n\nfunction hasLabelIndex(entityCluster, entityId) {\n  return (\n    defined(entityCluster) &&\n    defined(entityCluster._collectionIndicesByEntity[entityId]) &&\n    defined(entityCluster._collectionIndicesByEntity[entityId].labelIndex)\n  );\n}\n\nfunction getScreenSpacePositions(\n  collection,\n  points,\n  scene,\n  occluder,\n  entityCluster,\n) {\n  if (!defined(collection)) {\n    return;\n  }\n\n  const length = collection.length;\n  for (let i = 0; i < length; ++i) {\n    const item = collection.get(i);\n    item.clusterShow = false;\n\n    if (\n      !item.show ||\n      (entityCluster._scene.mode === SceneMode.SCENE3D &&\n        !occluder.isPointVisible(item.position))\n    ) {\n      continue;\n    }\n\n    const canClusterLabels =\n      entityCluster._clusterLabels && defined(item._labelCollection);\n    const canClusterBillboards =\n      entityCluster._clusterBillboards && defined(item.id._billboard);\n    const canClusterPoints =\n      entityCluster._clusterPoints && defined(item.id._point);\n    if (canClusterLabels && (canClusterPoints || canClusterBillboards)) {\n      continue;\n    }\n\n    const coord = item.computeScreenSpacePosition(scene);\n    if (!defined(coord)) {\n      continue;\n    }\n\n    points.push({\n      index: i,\n      collection: collection,\n      clustered: false,\n      coord: coord,\n    });\n  }\n}\n\nconst pointBoundinRectangleScratch = new BoundingRectangle();\nconst totalBoundingRectangleScratch = new BoundingRectangle();\nconst neighborBoundingRectangleScratch = new BoundingRectangle();\n\nfunction createDeclutterCallback(entityCluster) {\n  return function (amount) {\n    if ((defined(amount) && amount < 0.05) || !entityCluster.enabled) {\n      return;\n    }\n\n    const scene = entityCluster._scene;\n\n    const labelCollection = entityCluster._labelCollection;\n    const billboardCollection = entityCluster._billboardCollection;\n    const pointCollection = entityCluster._pointCollection;\n\n    if (\n      (!defined(labelCollection) &&\n        !defined(billboardCollection) &&\n        !defined(pointCollection)) ||\n      (!entityCluster._clusterBillboards &&\n        !entityCluster._clusterLabels &&\n        !entityCluster._clusterPoints)\n    ) {\n      return;\n    }\n\n    let clusteredLabelCollection = entityCluster._clusterLabelCollection;\n    let clusteredBillboardCollection =\n      entityCluster._clusterBillboardCollection;\n    let clusteredPointCollection = entityCluster._clusterPointCollection;\n\n    if (defined(clusteredLabelCollection)) {\n      clusteredLabelCollection.removeAll();\n    } else {\n      clusteredLabelCollection = entityCluster._clusterLabelCollection =\n        new LabelCollection({\n          scene: scene,\n        });\n    }\n\n    if (defined(clusteredBillboardCollection)) {\n      clusteredBillboardCollection.removeAll();\n    } else {\n      clusteredBillboardCollection = entityCluster._clusterBillboardCollection =\n        new BillboardCollection({\n          scene: scene,\n        });\n    }\n\n    if (defined(clusteredPointCollection)) {\n      clusteredPointCollection.removeAll();\n    } else {\n      clusteredPointCollection = entityCluster._clusterPointCollection =\n        new PointPrimitiveCollection();\n    }\n\n    const pixelRange = entityCluster._pixelRange;\n    const minimumClusterSize = entityCluster._minimumClusterSize;\n\n    const clusters = entityCluster._previousClusters;\n    const newClusters = [];\n\n    const previousHeight = entityCluster._previousHeight;\n    const currentHeight = scene.camera.positionCartographic.height;\n\n    const ellipsoid = scene.ellipsoid;\n    const cameraPosition = scene.camera.positionWC;\n    const occluder = new EllipsoidalOccluder(ellipsoid, cameraPosition);\n\n    const points = [];\n    if (entityCluster._clusterLabels) {\n      getScreenSpacePositions(\n        labelCollection,\n        points,\n        scene,\n        occluder,\n        entityCluster,\n      );\n    }\n    if (entityCluster._clusterBillboards) {\n      getScreenSpacePositions(\n        billboardCollection,\n        points,\n        scene,\n        occluder,\n        entityCluster,\n      );\n    }\n    if (entityCluster._clusterPoints) {\n      getScreenSpacePositions(\n        pointCollection,\n        points,\n        scene,\n        occluder,\n        entityCluster,\n      );\n    }\n\n    let i;\n    let j;\n    let length;\n    let bbox;\n    let neighbors;\n    let neighborLength;\n    let neighborIndex;\n    let neighborPoint;\n    let ids;\n    let numPoints;\n\n    let collection;\n    let collectionIndex;\n\n    if (points.length > 0) {\n      const index = new KDBush(points.length, 64, Float64Array);\n      for (let p = 0; p < points.length; ++p) {\n        index.add(points[p].coord.x, points[p].coord.y);\n      }\n      index.finish();\n\n      if (currentHeight < previousHeight) {\n        length = clusters.length;\n        for (i = 0; i < length; ++i) {\n          const cluster = clusters[i];\n\n          if (!occluder.isPointVisible(cluster.position)) {\n            continue;\n          }\n\n          const coord = Billboard._computeScreenSpacePosition(\n            Matrix4.IDENTITY,\n            cluster.position,\n            Cartesian3.ZERO,\n            Cartesian2.ZERO,\n            scene,\n          );\n          if (!defined(coord)) {\n            continue;\n          }\n\n          const factor = 1.0 - currentHeight / previousHeight;\n          let width = (cluster.width = cluster.width * factor);\n          let height = (cluster.height = cluster.height * factor);\n\n          width = Math.max(width, cluster.minimumWidth);\n          height = Math.max(height, cluster.minimumHeight);\n\n          const minX = coord.x - width * 0.5;\n          const minY = coord.y - height * 0.5;\n          const maxX = coord.x + width;\n          const maxY = coord.y + height;\n\n          neighbors = index.range(minX, minY, maxX, maxY);\n          neighborLength = neighbors.length;\n          numPoints = 0;\n          ids = [];\n\n          for (j = 0; j < neighborLength; ++j) {\n            neighborIndex = neighbors[j];\n            neighborPoint = points[neighborIndex];\n            if (!neighborPoint.clustered) {\n              ++numPoints;\n\n              collection = neighborPoint.collection;\n              collectionIndex = neighborPoint.index;\n              ids.push(collection.get(collectionIndex).id);\n            }\n          }\n\n          if (numPoints >= minimumClusterSize) {\n            addCluster(cluster.position, numPoints, ids, entityCluster);\n            newClusters.push(cluster);\n\n            for (j = 0; j < neighborLength; ++j) {\n              points[neighbors[j]].clustered = true;\n            }\n          }\n        }\n      }\n\n      length = points.length;\n      for (i = 0; i < length; ++i) {\n        const point = points[i];\n        if (point.clustered) {\n          continue;\n        }\n\n        point.clustered = true;\n\n        collection = point.collection;\n        collectionIndex = point.index;\n\n        const item = collection.get(collectionIndex);\n        bbox = getBoundingBox(\n          item,\n          point.coord,\n          pixelRange,\n          entityCluster,\n          pointBoundinRectangleScratch,\n        );\n        const totalBBox = BoundingRectangle.clone(\n          bbox,\n          totalBoundingRectangleScratch,\n        );\n\n        neighbors = index.range(\n          bbox.x,\n          bbox.y,\n          bbox.x + bbox.width,\n          bbox.y + bbox.height,\n        );\n        neighborLength = neighbors.length;\n\n        const clusterPosition = Cartesian3.clone(item.position);\n        numPoints = 1;\n        ids = [item.id];\n\n        for (j = 0; j < neighborLength; ++j) {\n          neighborIndex = neighbors[j];\n          neighborPoint = points[neighborIndex];\n          if (!neighborPoint.clustered) {\n            const neighborItem = neighborPoint.collection.get(\n              neighborPoint.index,\n            );\n            const neighborBBox = getBoundingBox(\n              neighborItem,\n              neighborPoint.coord,\n              pixelRange,\n              entityCluster,\n              neighborBoundingRectangleScratch,\n            );\n\n            Cartesian3.add(\n              neighborItem.position,\n              clusterPosition,\n              clusterPosition,\n            );\n\n            BoundingRectangle.union(totalBBox, neighborBBox, totalBBox);\n            ++numPoints;\n\n            ids.push(neighborItem.id);\n          }\n        }\n\n        if (numPoints >= minimumClusterSize) {\n          const position = Cartesian3.multiplyByScalar(\n            clusterPosition,\n            1.0 / numPoints,\n            clusterPosition,\n          );\n          addCluster(position, numPoints, ids, entityCluster);\n          newClusters.push({\n            position: position,\n            width: totalBBox.width,\n            height: totalBBox.height,\n            minimumWidth: bbox.width,\n            minimumHeight: bbox.height,\n          });\n\n          for (j = 0; j < neighborLength; ++j) {\n            points[neighbors[j]].clustered = true;\n          }\n        } else {\n          addNonClusteredItem(item, entityCluster);\n        }\n      }\n    }\n\n    if (clusteredLabelCollection.length === 0) {\n      clusteredLabelCollection.destroy();\n      entityCluster._clusterLabelCollection = undefined;\n    }\n\n    if (clusteredBillboardCollection.length === 0) {\n      clusteredBillboardCollection.destroy();\n      entityCluster._clusterBillboardCollection = undefined;\n    }\n\n    if (clusteredPointCollection.length === 0) {\n      clusteredPointCollection.destroy();\n      entityCluster._clusterPointCollection = undefined;\n    }\n\n    entityCluster._previousClusters = newClusters;\n    entityCluster._previousHeight = currentHeight;\n  };\n}\n\nEntityCluster.prototype._initialize = function (scene) {\n  this._scene = scene;\n\n  const cluster = createDeclutterCallback(this);\n  this._cluster = cluster;\n  this._removeEventListener = scene.camera.changed.addEventListener(cluster);\n};\n\nObject.defineProperties(EntityCluster.prototype, {\n  /**\n   * Gets or sets whether clustering is enabled.\n   * @memberof EntityCluster.prototype\n   * @type {boolean}\n   */\n  enabled: {\n    get: function () {\n      return this._enabled;\n    },\n    set: function (value) {\n      this._enabledDirty = value !== this._enabled;\n      this._enabled = value;\n    },\n  },\n  /**\n   * Gets or sets the pixel range to extend the screen space bounding box.\n   * @memberof EntityCluster.prototype\n   * @type {number}\n   */\n  pixelRange: {\n    get: function () {\n      return this._pixelRange;\n    },\n    set: function (value) {\n      this._clusterDirty = this._clusterDirty || value !== this._pixelRange;\n      this._pixelRange = value;\n    },\n  },\n  /**\n   * Gets or sets the minimum number of screen space objects that can be clustered.\n   * @memberof EntityCluster.prototype\n   * @type {number}\n   */\n  minimumClusterSize: {\n    get: function () {\n      return this._minimumClusterSize;\n    },\n    set: function (value) {\n      this._clusterDirty =\n        this._clusterDirty || value !== this._minimumClusterSize;\n      this._minimumClusterSize = value;\n    },\n  },\n  /**\n   * Gets the event that will be raised when a new cluster will be displayed. The signature of the event listener is {@link EntityCluster.newClusterCallback}.\n   * @memberof EntityCluster.prototype\n   * @type {Event<EntityCluster.newClusterCallback>}\n   */\n  clusterEvent: {\n    get: function () {\n      return this._clusterEvent;\n    },\n  },\n  /**\n   * Gets or sets whether clustering billboard entities is enabled.\n   * @memberof EntityCluster.prototype\n   * @type {boolean}\n   */\n  clusterBillboards: {\n    get: function () {\n      return this._clusterBillboards;\n    },\n    set: function (value) {\n      this._clusterDirty =\n        this._clusterDirty || value !== this._clusterBillboards;\n      this._clusterBillboards = value;\n    },\n  },\n  /**\n   * Gets or sets whether clustering labels entities is enabled.\n   * @memberof EntityCluster.prototype\n   * @type {boolean}\n   */\n  clusterLabels: {\n    get: function () {\n      return this._clusterLabels;\n    },\n    set: function (value) {\n      this._clusterDirty = this._clusterDirty || value !== this._clusterLabels;\n      this._clusterLabels = value;\n    },\n  },\n  /**\n   * Gets or sets whether clustering point entities is enabled.\n   * @memberof EntityCluster.prototype\n   * @type {boolean}\n   */\n  clusterPoints: {\n    get: function () {\n      return this._clusterPoints;\n    },\n    set: function (value) {\n      this._clusterDirty = this._clusterDirty || value !== this._clusterPoints;\n      this._clusterPoints = value;\n    },\n  },\n\n  /**\n   * Returns true when all clustered data has been rendered.\n   * @memberof EntityCluster.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return (\n        !this._enabledDirty &&\n        !this._clusterDirty &&\n        (!defined(this._billboardCollection) ||\n          this._billboardCollection.ready) &&\n        (!defined(this._labelCollection) || this._labelCollection.ready)\n      );\n    },\n  },\n});\n\nfunction createGetEntity(\n  collectionProperty,\n  CollectionConstructor,\n  unusedIndicesProperty,\n  entityIndexProperty,\n) {\n  return function (entity) {\n    let collection = this[collectionProperty];\n\n    if (!defined(this._collectionIndicesByEntity)) {\n      this._collectionIndicesByEntity = {};\n    }\n\n    let entityIndices = this._collectionIndicesByEntity[entity.id];\n\n    if (!defined(entityIndices)) {\n      entityIndices = this._collectionIndicesByEntity[entity.id] = {\n        billboardIndex: undefined,\n        labelIndex: undefined,\n        pointIndex: undefined,\n      };\n    }\n\n    if (defined(collection) && defined(entityIndices[entityIndexProperty])) {\n      return collection.get(entityIndices[entityIndexProperty]);\n    }\n\n    if (!defined(collection)) {\n      collection = this[collectionProperty] = new CollectionConstructor({\n        scene: this._scene,\n      });\n    }\n\n    let index;\n    let entityItem;\n\n    const unusedIndices = this[unusedIndicesProperty];\n    if (unusedIndices.length > 0) {\n      index = unusedIndices.shift();\n      entityItem = collection.get(index);\n    } else {\n      entityItem = collection.add();\n      index = collection.length - 1;\n    }\n\n    entityIndices[entityIndexProperty] = index;\n\n    const that = this;\n    Promise.resolve().then(function () {\n      that._clusterDirty = true;\n    });\n\n    return entityItem;\n  };\n}\n\nfunction removeEntityIndicesIfUnused(entityCluster, entityId) {\n  const indices = entityCluster._collectionIndicesByEntity[entityId];\n\n  if (\n    !defined(indices.billboardIndex) &&\n    !defined(indices.labelIndex) &&\n    !defined(indices.pointIndex)\n  ) {\n    delete entityCluster._collectionIndicesByEntity[entityId];\n  }\n}\n\n/**\n * Returns a new {@link Label}.\n * @param {Entity} entity The entity that will use the returned {@link Label} for visualization.\n * @returns {Label} The label that will be used to visualize an entity.\n *\n * @private\n */\nEntityCluster.prototype.getLabel = createGetEntity(\n  \"_labelCollection\",\n  LabelCollection,\n  \"_unusedLabelIndices\",\n  \"labelIndex\",\n);\n\n/**\n * Removes the {@link Label} associated with an entity so it can be reused by another entity.\n * @param {Entity} entity The entity that will uses the returned {@link Label} for visualization.\n *\n * @private\n */\nEntityCluster.prototype.removeLabel = function (entity) {\n  const entityIndices =\n    this._collectionIndicesByEntity &&\n    this._collectionIndicesByEntity[entity.id];\n  if (\n    !defined(this._labelCollection) ||\n    !defined(entityIndices) ||\n    !defined(entityIndices.labelIndex)\n  ) {\n    return;\n  }\n\n  const index = entityIndices.labelIndex;\n  entityIndices.labelIndex = undefined;\n  removeEntityIndicesIfUnused(this, entity.id);\n\n  const label = this._labelCollection.get(index);\n  label.show = false;\n  label.text = \"\";\n  label.id = undefined;\n\n  this._unusedLabelIndices.push(index);\n\n  this._clusterDirty = true;\n};\n\n/**\n * Returns a new {@link Billboard}.\n * @param {Entity} entity The entity that will use the returned {@link Billboard} for visualization.\n * @returns {Billboard} The label that will be used to visualize an entity.\n *\n * @private\n */\nEntityCluster.prototype.getBillboard = createGetEntity(\n  \"_billboardCollection\",\n  BillboardCollection,\n  \"_unusedBillboardIndices\",\n  \"billboardIndex\",\n);\n\n/**\n * Removes the {@link Billboard} associated with an entity so it can be reused by another entity.\n * @param {Entity} entity The entity that will uses the returned {@link Billboard} for visualization.\n *\n * @private\n */\nEntityCluster.prototype.removeBillboard = function (entity) {\n  const entityIndices =\n    this._collectionIndicesByEntity &&\n    this._collectionIndicesByEntity[entity.id];\n  if (\n    !defined(this._billboardCollection) ||\n    !defined(entityIndices) ||\n    !defined(entityIndices.billboardIndex)\n  ) {\n    return;\n  }\n\n  const index = entityIndices.billboardIndex;\n  entityIndices.billboardIndex = undefined;\n  removeEntityIndicesIfUnused(this, entity.id);\n\n  const billboard = this._billboardCollection.get(index);\n  billboard.id = undefined;\n  billboard.show = false;\n  billboard.image = undefined;\n\n  this._unusedBillboardIndices.push(index);\n\n  this._clusterDirty = true;\n};\n\n/**\n * Returns a new {@link Point}.\n * @param {Entity} entity The entity that will use the returned {@link Point} for visualization.\n * @returns {Point} The label that will be used to visualize an entity.\n *\n * @private\n */\nEntityCluster.prototype.getPoint = createGetEntity(\n  \"_pointCollection\",\n  PointPrimitiveCollection,\n  \"_unusedPointIndices\",\n  \"pointIndex\",\n);\n\n/**\n * Removes the {@link Point} associated with an entity so it can be reused by another entity.\n * @param {Entity} entity The entity that will uses the returned {@link Point} for visualization.\n *\n * @private\n */\nEntityCluster.prototype.removePoint = function (entity) {\n  const entityIndices =\n    this._collectionIndicesByEntity &&\n    this._collectionIndicesByEntity[entity.id];\n  if (\n    !defined(this._pointCollection) ||\n    !defined(entityIndices) ||\n    !defined(entityIndices.pointIndex)\n  ) {\n    return;\n  }\n\n  const index = entityIndices.pointIndex;\n  entityIndices.pointIndex = undefined;\n  removeEntityIndicesIfUnused(this, entity.id);\n\n  const point = this._pointCollection.get(index);\n  point.show = false;\n  point.id = undefined;\n\n  this._unusedPointIndices.push(index);\n\n  this._clusterDirty = true;\n};\n\nfunction disableCollectionClustering(collection) {\n  if (!defined(collection)) {\n    return;\n  }\n\n  const length = collection.length;\n  for (let i = 0; i < length; ++i) {\n    collection.get(i).clusterShow = true;\n  }\n}\n\nfunction updateEnable(entityCluster) {\n  if (entityCluster.enabled) {\n    return;\n  }\n\n  if (defined(entityCluster._clusterLabelCollection)) {\n    entityCluster._clusterLabelCollection.destroy();\n  }\n  if (defined(entityCluster._clusterBillboardCollection)) {\n    entityCluster._clusterBillboardCollection.destroy();\n  }\n  if (defined(entityCluster._clusterPointCollection)) {\n    entityCluster._clusterPointCollection.destroy();\n  }\n\n  entityCluster._clusterLabelCollection = undefined;\n  entityCluster._clusterBillboardCollection = undefined;\n  entityCluster._clusterPointCollection = undefined;\n\n  disableCollectionClustering(entityCluster._labelCollection);\n  disableCollectionClustering(entityCluster._billboardCollection);\n  disableCollectionClustering(entityCluster._pointCollection);\n}\n\n/**\n * Gets the draw commands for the clustered billboards/points/labels if enabled, otherwise,\n * queues the draw commands for billboards/points/labels created for entities.\n * @private\n */\nEntityCluster.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  // If clustering is enabled before the label collection is updated,\n  // the glyphs haven't been created so the screen space bounding boxes\n  // are incorrect.\n  let commandList;\n  const labelCollection = this._labelCollection;\n  if (\n    defined(labelCollection) &&\n    labelCollection.length > 0 &&\n    !labelCollection.ready\n  ) {\n    commandList = frameState.commandList;\n    frameState.commandList = [];\n    labelCollection.update(frameState);\n    frameState.commandList = commandList;\n  }\n\n  // If clustering is enabled before the billboard collections are updated,\n  // the images haven't been added to the image atlas so the screen space bounding boxes\n  // are incorrect.\n  const billboardCollection = this._billboardCollection;\n  if (\n    defined(billboardCollection) &&\n    billboardCollection.length > 0 &&\n    !billboardCollection.ready\n  ) {\n    commandList = frameState.commandList;\n    frameState.commandList = [];\n    billboardCollection.update(frameState);\n    frameState.commandList = commandList;\n  }\n\n  if (this._enabledDirty) {\n    this._enabledDirty = false;\n    updateEnable(this);\n    this._clusterDirty = true;\n  }\n\n  if (this._clusterDirty) {\n    this._cluster();\n\n    // Unless all existing billboards and labels were clustered, clustering will need to execute again next frame\n    this._clusterDirty =\n      (defined(labelCollection) && !labelCollection.ready) ||\n      (defined(billboardCollection) && !billboardCollection.ready);\n  }\n\n  if (defined(this._clusterLabelCollection)) {\n    this._clusterLabelCollection.update(frameState);\n  }\n  if (defined(this._clusterBillboardCollection)) {\n    this._clusterBillboardCollection.update(frameState);\n  }\n  if (defined(this._clusterPointCollection)) {\n    this._clusterPointCollection.update(frameState);\n  }\n\n  if (defined(labelCollection)) {\n    labelCollection.update(frameState);\n  }\n  if (defined(billboardCollection)) {\n    billboardCollection.update(frameState);\n  }\n  if (defined(this._pointCollection)) {\n    this._pointCollection.update(frameState);\n  }\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Unlike other objects that use WebGL resources, this object can be reused. For example, if a data source is removed\n * from a data source collection and added to another.\n * </p>\n */\nEntityCluster.prototype.destroy = function () {\n  if (defined(this._removeEventListener)) {\n    this._removeEventListener();\n    this._removeEventListener = undefined;\n  }\n\n  this._labelCollection =\n    this._labelCollection && this._labelCollection.destroy();\n  this._billboardCollection =\n    this._billboardCollection && this._billboardCollection.destroy();\n  this._pointCollection =\n    this._pointCollection && this._pointCollection.destroy();\n\n  this._clusterLabelCollection =\n    this._clusterLabelCollection && this._clusterLabelCollection.destroy();\n  this._clusterBillboardCollection =\n    this._clusterBillboardCollection &&\n    this._clusterBillboardCollection.destroy();\n  this._clusterPointCollection =\n    this._clusterPointCollection && this._clusterPointCollection.destroy();\n\n  this._labelCollection = undefined;\n  this._billboardCollection = undefined;\n  this._pointCollection = undefined;\n\n  this._clusterBillboardCollection = undefined;\n  this._clusterLabelCollection = undefined;\n  this._clusterPointCollection = undefined;\n\n  this._collectionIndicesByEntity = undefined;\n\n  this._unusedLabelIndices = [];\n  this._unusedBillboardIndices = [];\n  this._unusedPointIndices = [];\n\n  this._previousClusters = [];\n  this._previousHeight = undefined;\n\n  this._enabledDirty = false;\n  this._pixelRangeDirty = false;\n  this._minimumClusterSizeDirty = false;\n\n  return undefined;\n};\n\n/**\n * A event listener function used to style clusters.\n * @callback EntityCluster.newClusterCallback\n *\n * @param {Entity[]} clusteredEntities An array of the entities contained in the cluster.\n * @param {object} cluster An object containing the Billboard, Label, and Point\n * primitives that represent this cluster of entities.\n * @param {Billboard} cluster.billboard\n * @param {Label} cluster.label\n * @param {PointPrimitive} cluster.point\n *\n * @example\n * // The default cluster values.\n * dataSource.clustering.clusterEvent.addEventListener(function(entities, cluster) {\n *     cluster.label.show = true;\n *     cluster.label.text = entities.length.toLocaleString();\n * });\n */\nexport default EntityCluster;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport Entity from \"./Entity.js\";\n\nconst entityOptionsScratch = {\n  id: undefined,\n};\n\nfunction fireChangedEvent(collection) {\n  if (collection._firing) {\n    collection._refire = true;\n    return;\n  }\n\n  if (collection._suspendCount === 0) {\n    const added = collection._addedEntities;\n    const removed = collection._removedEntities;\n    const changed = collection._changedEntities;\n    if (changed.length !== 0 || added.length !== 0 || removed.length !== 0) {\n      collection._firing = true;\n      do {\n        collection._refire = false;\n        const addedArray = added.values.slice(0);\n        const removedArray = removed.values.slice(0);\n        const changedArray = changed.values.slice(0);\n\n        added.removeAll();\n        removed.removeAll();\n        changed.removeAll();\n        collection._collectionChanged.raiseEvent(\n          collection,\n          addedArray,\n          removedArray,\n          changedArray,\n        );\n      } while (collection._refire);\n      collection._firing = false;\n    }\n  }\n}\n\n/**\n * An observable collection of {@link Entity} instances where each entity has a unique id.\n * @alias EntityCollection\n * @constructor\n *\n * @param {DataSource|CompositeEntityCollection} [owner] The data source (or composite entity collection) which created this collection.\n */\nfunction EntityCollection(owner) {\n  this._owner = owner;\n  this._entities = new AssociativeArray();\n  this._addedEntities = new AssociativeArray();\n  this._removedEntities = new AssociativeArray();\n  this._changedEntities = new AssociativeArray();\n  this._suspendCount = 0;\n  this._collectionChanged = new Event();\n  this._id = createGuid();\n  this._show = true;\n  this._firing = false;\n  this._refire = false;\n}\n\n/**\n * Prevents {@link EntityCollection#collectionChanged} events from being raised\n * until a corresponding call is made to {@link EntityCollection#resumeEvents}, at which\n * point a single event will be raised that covers all suspended operations.\n * This allows for many items to be added and removed efficiently.\n * This function can be safely called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n */\nEntityCollection.prototype.suspendEvents = function () {\n  this._suspendCount++;\n};\n\n/**\n * Resumes raising {@link EntityCollection#collectionChanged} events immediately\n * when an item is added or removed.  Any modifications made while while events were suspended\n * will be triggered as a single event when this function is called.\n * This function is reference counted and can safely be called multiple times as long as there\n * are corresponding calls to {@link EntityCollection#resumeEvents}.\n *\n * @exception {DeveloperError} resumeEvents can not be called before suspendEvents.\n */\nEntityCollection.prototype.resumeEvents = function () {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._suspendCount === 0) {\n    throw new DeveloperError(\n      \"resumeEvents can not be called before suspendEvents.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._suspendCount--;\n  fireChangedEvent(this);\n};\n\n/**\n * The signature of the event generated by {@link EntityCollection#collectionChanged}.\n * @callback EntityCollection.CollectionChangedEventCallback\n *\n * @param {EntityCollection} collection The collection that triggered the event.\n * @param {Entity[]} added The array of {@link Entity} instances that have been added to the collection.\n * @param {Entity[]} removed The array of {@link Entity} instances that have been removed from the collection.\n * @param {Entity[]} changed The array of {@link Entity} instances that have been modified.\n */\n\nObject.defineProperties(EntityCollection.prototype, {\n  /**\n   * Gets the event that is fired when entities are added or removed from the collection.\n   * The generated event is a {@link EntityCollection.CollectionChangedEventCallback}.\n   * @memberof EntityCollection.prototype\n   * @readonly\n   * @type {Event<EntityCollection.CollectionChangedEventCallback>}\n   */\n  collectionChanged: {\n    get: function () {\n      return this._collectionChanged;\n    },\n  },\n  /**\n   * Gets a globally unique identifier for this collection.\n   * @memberof EntityCollection.prototype\n   * @readonly\n   * @type {string}\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * Gets the array of Entity instances in the collection.\n   * This array should not be modified directly.\n   * @memberof EntityCollection.prototype\n   * @readonly\n   * @type {Entity[]}\n   */\n  values: {\n    get: function () {\n      return this._entities.values;\n    },\n  },\n  /**\n   * Gets whether or not this entity collection should be\n   * displayed.  When true, each entity is only displayed if\n   * its own show property is also true.\n   * @memberof EntityCollection.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (value === this._show) {\n        return;\n      }\n\n      //Since entity.isShowing includes the EntityCollection.show state\n      //in its calculation, we need to loop over the entities array\n      //twice, once to get the old showing value and a second time\n      //to raise the changed event.\n      this.suspendEvents();\n\n      let i;\n      const oldShows = [];\n      const entities = this._entities.values;\n      const entitiesLength = entities.length;\n\n      for (i = 0; i < entitiesLength; i++) {\n        oldShows.push(entities[i].isShowing);\n      }\n\n      this._show = value;\n\n      for (i = 0; i < entitiesLength; i++) {\n        const oldShow = oldShows[i];\n        const entity = entities[i];\n        if (oldShow !== entity.isShowing) {\n          entity.definitionChanged.raiseEvent(\n            entity,\n            \"isShowing\",\n            entity.isShowing,\n            oldShow,\n          );\n        }\n      }\n\n      this.resumeEvents();\n    },\n  },\n  /**\n   * Gets the owner of this entity collection, ie. the data source or composite entity collection which created it.\n   * @memberof EntityCollection.prototype\n   * @readonly\n   * @type {DataSource|CompositeEntityCollection}\n   */\n  owner: {\n    get: function () {\n      return this._owner;\n    },\n  },\n});\n\n/**\n * Computes the maximum availability of the entities in the collection.\n * If the collection contains a mix of infinitely available data and non-infinite data,\n * it will return the interval pertaining to the non-infinite data only.  If all\n * data is infinite, an infinite interval will be returned.\n *\n * @returns {TimeInterval} The availability of entities in the collection.\n */\nEntityCollection.prototype.computeAvailability = function () {\n  let startTime = Iso8601.MAXIMUM_VALUE;\n  let stopTime = Iso8601.MINIMUM_VALUE;\n  const entities = this._entities.values;\n  for (let i = 0, len = entities.length; i < len; i++) {\n    const entity = entities[i];\n    const availability = entity.availability;\n    if (defined(availability)) {\n      const start = availability.start;\n      const stop = availability.stop;\n      if (\n        JulianDate.lessThan(start, startTime) &&\n        !start.equals(Iso8601.MINIMUM_VALUE)\n      ) {\n        startTime = start;\n      }\n      if (\n        JulianDate.greaterThan(stop, stopTime) &&\n        !stop.equals(Iso8601.MAXIMUM_VALUE)\n      ) {\n        stopTime = stop;\n      }\n    }\n  }\n\n  if (Iso8601.MAXIMUM_VALUE.equals(startTime)) {\n    startTime = Iso8601.MINIMUM_VALUE;\n  }\n  if (Iso8601.MINIMUM_VALUE.equals(stopTime)) {\n    stopTime = Iso8601.MAXIMUM_VALUE;\n  }\n  return new TimeInterval({\n    start: startTime,\n    stop: stopTime,\n  });\n};\n\n/**\n * Add an entity to the collection.\n *\n * @param {Entity | Entity.ConstructorOptions} entity The entity to be added.\n * @returns {Entity} The entity that was added.\n * @exception {DeveloperError} An entity with <entity.id> already exists in this collection.\n */\nEntityCollection.prototype.add = function (entity) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!(entity instanceof Entity)) {\n    entity = new Entity(entity);\n  }\n\n  const id = entity.id;\n  const entities = this._entities;\n  if (entities.contains(id)) {\n    throw new DeveloperError(\n      `An entity with id ${id} already exists in this collection.`,\n    );\n  }\n\n  entity.entityCollection = this;\n  entities.set(id, entity);\n\n  if (!this._removedEntities.remove(id)) {\n    this._addedEntities.set(id, entity);\n  }\n  entity.definitionChanged.addEventListener(\n    EntityCollection.prototype._onEntityDefinitionChanged,\n    this,\n  );\n\n  fireChangedEvent(this);\n  return entity;\n};\n\n/**\n * Removes an entity from the collection.\n *\n * @param {Entity} entity The entity to be removed.\n * @returns {boolean} true if the item was removed, false if it did not exist in the collection.\n */\nEntityCollection.prototype.remove = function (entity) {\n  if (!defined(entity)) {\n    return false;\n  }\n  return this.removeById(entity.id);\n};\n\n/**\n * Returns true if the provided entity is in this collection, false otherwise.\n *\n * @param {Entity} entity The entity.\n * @returns {boolean} true if the provided entity is in this collection, false otherwise.\n */\nEntityCollection.prototype.contains = function (entity) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required\");\n  }\n  //>>includeEnd('debug');\n  return this._entities.get(entity.id) === entity;\n};\n\n/**\n * Removes an entity with the provided id from the collection.\n *\n * @param {string} id The id of the entity to remove.\n * @returns {boolean} true if the item was removed, false if no item with the provided id existed in the collection.\n */\nEntityCollection.prototype.removeById = function (id) {\n  if (!defined(id)) {\n    return false;\n  }\n\n  const entities = this._entities;\n  const entity = entities.get(id);\n  if (!this._entities.remove(id)) {\n    return false;\n  }\n\n  if (!this._addedEntities.remove(id)) {\n    this._removedEntities.set(id, entity);\n    this._changedEntities.remove(id);\n  }\n  this._entities.remove(id);\n  entity.definitionChanged.removeEventListener(\n    EntityCollection.prototype._onEntityDefinitionChanged,\n    this,\n  );\n  fireChangedEvent(this);\n\n  return true;\n};\n\n/**\n * Removes all Entities from the collection.\n */\nEntityCollection.prototype.removeAll = function () {\n  //The event should only contain items added before events were suspended\n  //and the contents of the collection.\n  const entities = this._entities;\n  const entitiesLength = entities.length;\n  const array = entities.values;\n\n  const addedEntities = this._addedEntities;\n  const removed = this._removedEntities;\n\n  for (let i = 0; i < entitiesLength; i++) {\n    const existingItem = array[i];\n    const existingItemId = existingItem.id;\n    const addedItem = addedEntities.get(existingItemId);\n    if (!defined(addedItem)) {\n      existingItem.definitionChanged.removeEventListener(\n        EntityCollection.prototype._onEntityDefinitionChanged,\n        this,\n      );\n      removed.set(existingItemId, existingItem);\n    }\n  }\n\n  entities.removeAll();\n  addedEntities.removeAll();\n  this._changedEntities.removeAll();\n  fireChangedEvent(this);\n};\n\n/**\n * Gets an entity with the specified id.\n *\n * @param {string} id The id of the entity to retrieve.\n * @returns {Entity|undefined} The entity with the provided id or undefined if the id did not exist in the collection.\n */\nEntityCollection.prototype.getById = function (id) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(id)) {\n    throw new DeveloperError(\"id is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._entities.get(id);\n};\n\n/**\n * Gets an entity with the specified id or creates it and adds it to the collection if it does not exist.\n *\n * @param {string} id The id of the entity to retrieve or create.\n * @returns {Entity} The new or existing object.\n */\nEntityCollection.prototype.getOrCreateEntity = function (id) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(id)) {\n    throw new DeveloperError(\"id is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let entity = this._entities.get(id);\n  if (!defined(entity)) {\n    entityOptionsScratch.id = id;\n    entity = new Entity(entityOptionsScratch);\n    this.add(entity);\n  }\n  return entity;\n};\n\nEntityCollection.prototype._onEntityDefinitionChanged = function (entity) {\n  const id = entity.id;\n  if (!this._addedEntities.contains(id)) {\n    this._changedEntities.set(id, entity);\n  }\n  fireChangedEvent(this);\n};\nexport default EntityCollection;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport HeadingPitchRange from \"../Core/HeadingPitchRange.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport TrackingReferenceFrame from \"../Core/TrackingReferenceFrame.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport VelocityVectorProperty from \"./VelocityVectorProperty.js\";\n\nconst updateTransformMatrix3Scratch1 = new Matrix3();\nconst updateTransformMatrix3Scratch2 = new Matrix3();\nconst updateTransformMatrix3Scratch3 = new Matrix3();\nconst updateTransformMatrix4Scratch = new Matrix4();\nconst updateTransformCartesian3Scratch1 = new Cartesian3();\nconst updateTransformCartesian3Scratch2 = new Cartesian3();\nconst updateTransformCartesian3Scratch3 = new Cartesian3();\nconst updateTransformCartesian3Scratch4 = new Cartesian3();\nconst updateTransformCartesian3Scratch5 = new Cartesian3();\nconst updateTransformCartesian3Scratch6 = new Cartesian3();\nconst updateTransformOrientationScratch = new Quaternion();\nconst velocityScratch = new Cartesian3();\nconst rotationScratch = new Matrix3();\nconst deltaTime = new JulianDate();\nconst northUpAxisFactor = 1.25; // times ellipsoid's maximum radius\n\nfunction updateTransform(\n  that,\n  camera,\n  updateLookAt,\n  saveCamera,\n  positionProperty,\n  velocityProperty,\n  orientationProperty,\n  trackingReferenceFrame,\n  time,\n  ellipsoid,\n) {\n  const mode = that.scene.mode;\n  let cartesian = positionProperty.getValue(time, that._lastCartesian);\n  if (defined(cartesian)) {\n    let hasBasis = false;\n    let invertVelocity = false;\n    let xBasis;\n    let yBasis;\n    let zBasis;\n\n    if (mode === SceneMode.SCENE3D) {\n      // The time delta was determined based on how fast satellites move compared to vehicles near the surface.\n      // Slower moving vehicles will most likely default to east-north-up, while faster ones will be VVLH.\n      JulianDate.addSeconds(time, 0.001, deltaTime);\n      let deltaCartesian = positionProperty.getValue(\n        deltaTime,\n        updateTransformCartesian3Scratch1,\n      );\n\n      // If no valid position at (time + 0.001), sample at (time - 0.001) and invert the vector\n      if (!defined(deltaCartesian)) {\n        JulianDate.addSeconds(time, -0.001, deltaTime);\n        deltaCartesian = positionProperty.getValue(\n          deltaTime,\n          updateTransformCartesian3Scratch1,\n        );\n        invertVelocity = true;\n      }\n\n      if (defined(deltaCartesian)) {\n        let toInertial = Transforms.computeFixedToIcrfMatrix(\n          time,\n          updateTransformMatrix3Scratch1,\n        );\n        let toInertialDelta = Transforms.computeFixedToIcrfMatrix(\n          deltaTime,\n          updateTransformMatrix3Scratch2,\n        );\n        let toFixed;\n\n        if (!defined(toInertial) || !defined(toInertialDelta)) {\n          toFixed = Transforms.computeTemeToPseudoFixedMatrix(\n            time,\n            updateTransformMatrix3Scratch3,\n          );\n          toInertial = Matrix3.transpose(\n            toFixed,\n            updateTransformMatrix3Scratch1,\n          );\n          toInertialDelta = Transforms.computeTemeToPseudoFixedMatrix(\n            deltaTime,\n            updateTransformMatrix3Scratch2,\n          );\n          Matrix3.transpose(toInertialDelta, toInertialDelta);\n        } else {\n          toFixed = Matrix3.transpose(\n            toInertial,\n            updateTransformMatrix3Scratch3,\n          );\n        }\n\n        const inertialCartesian = Matrix3.multiplyByVector(\n          toInertial,\n          cartesian,\n          updateTransformCartesian3Scratch5,\n        );\n        const inertialDeltaCartesian = Matrix3.multiplyByVector(\n          toInertialDelta,\n          deltaCartesian,\n          updateTransformCartesian3Scratch6,\n        );\n\n        Cartesian3.subtract(\n          inertialCartesian,\n          inertialDeltaCartesian,\n          updateTransformCartesian3Scratch4,\n        );\n        const inertialVelocity =\n          Cartesian3.magnitude(updateTransformCartesian3Scratch4) * 1000.0; // meters/sec\n\n        const mu = CesiumMath.GRAVITATIONALPARAMETER; // m^3 / sec^2\n        const semiMajorAxis =\n          -mu /\n          (inertialVelocity * inertialVelocity -\n            (2 * mu) / Cartesian3.magnitude(inertialCartesian));\n\n        if (\n          semiMajorAxis < 0 ||\n          semiMajorAxis > northUpAxisFactor * ellipsoid.maximumRadius\n        ) {\n          // North-up viewing from deep space.\n\n          // X along the nadir\n          xBasis = updateTransformCartesian3Scratch2;\n          Cartesian3.normalize(cartesian, xBasis);\n          Cartesian3.negate(xBasis, xBasis);\n\n          // Z is North\n          zBasis = Cartesian3.clone(\n            Cartesian3.UNIT_Z,\n            updateTransformCartesian3Scratch3,\n          );\n\n          // Y is along the cross of z and x (right handed basis / in the direction of motion)\n          yBasis = Cartesian3.cross(\n            zBasis,\n            xBasis,\n            updateTransformCartesian3Scratch1,\n          );\n          if (Cartesian3.magnitude(yBasis) > CesiumMath.EPSILON7) {\n            Cartesian3.normalize(xBasis, xBasis);\n            Cartesian3.normalize(yBasis, yBasis);\n\n            zBasis = Cartesian3.cross(\n              xBasis,\n              yBasis,\n              updateTransformCartesian3Scratch3,\n            );\n            Cartesian3.normalize(zBasis, zBasis);\n\n            hasBasis = true;\n          }\n        } else if (\n          !Cartesian3.equalsEpsilon(\n            cartesian,\n            deltaCartesian,\n            CesiumMath.EPSILON7,\n          )\n        ) {\n          // Approximation of VVLH (Vehicle Velocity Local Horizontal) with the Z-axis flipped.\n\n          // Z along the position\n          zBasis = updateTransformCartesian3Scratch2;\n          Cartesian3.normalize(inertialCartesian, zBasis);\n          Cartesian3.normalize(inertialDeltaCartesian, inertialDeltaCartesian);\n\n          // Y is along the angular momentum vector (e.g. \"orbit normal\")\n          yBasis = Cartesian3.cross(\n            zBasis,\n            inertialDeltaCartesian,\n            updateTransformCartesian3Scratch3,\n          );\n\n          if (invertVelocity) {\n            yBasis = Cartesian3.multiplyByScalar(yBasis, -1, yBasis);\n          }\n\n          if (\n            !Cartesian3.equalsEpsilon(\n              yBasis,\n              Cartesian3.ZERO,\n              CesiumMath.EPSILON7,\n            )\n          ) {\n            // X is along the cross of y and z (right handed basis / in the direction of motion)\n            xBasis = Cartesian3.cross(\n              yBasis,\n              zBasis,\n              updateTransformCartesian3Scratch1,\n            );\n\n            Matrix3.multiplyByVector(toFixed, xBasis, xBasis);\n            Matrix3.multiplyByVector(toFixed, yBasis, yBasis);\n            Matrix3.multiplyByVector(toFixed, zBasis, zBasis);\n\n            Cartesian3.normalize(xBasis, xBasis);\n            Cartesian3.normalize(yBasis, yBasis);\n            Cartesian3.normalize(zBasis, zBasis);\n\n            hasBasis = true;\n          }\n        }\n      }\n    }\n\n    if (defined(that.boundingSphere)) {\n      cartesian = that.boundingSphere.center;\n    }\n\n    let position;\n    let direction;\n    let up;\n\n    if (saveCamera) {\n      position = Cartesian3.clone(\n        camera.position,\n        updateTransformCartesian3Scratch4,\n      );\n      direction = Cartesian3.clone(\n        camera.direction,\n        updateTransformCartesian3Scratch5,\n      );\n      up = Cartesian3.clone(camera.up, updateTransformCartesian3Scratch6);\n    }\n\n    const transform = updateTransformMatrix4Scratch;\n\n    let orientation;\n    if (defined(orientationProperty)) {\n      orientation = orientationProperty.getValue(\n        time,\n        updateTransformOrientationScratch,\n      );\n    }\n\n    const velocity = velocityProperty.getValue(time, velocityScratch);\n\n    if (\n      trackingReferenceFrame === TrackingReferenceFrame.INERTIAL &&\n      defined(orientation)\n    ) {\n      Matrix4.fromTranslationQuaternionRotationScale(\n        cartesian,\n        orientation,\n        Cartesian3.ONE,\n        transform,\n      );\n    } else if (\n      trackingReferenceFrame === TrackingReferenceFrame.VELOCITY &&\n      defined(velocity)\n    ) {\n      const rotation = Transforms.rotationMatrixFromPositionVelocity(\n        cartesian,\n        velocity,\n        ellipsoid,\n        rotationScratch,\n      );\n      Matrix4.fromRotationTranslation(rotation, cartesian, transform);\n    } else if (\n      trackingReferenceFrame === TrackingReferenceFrame.ENU ||\n      !hasBasis\n    ) {\n      Transforms.eastNorthUpToFixedFrame(cartesian, ellipsoid, transform);\n    } else {\n      transform[0] = xBasis.x;\n      transform[1] = xBasis.y;\n      transform[2] = xBasis.z;\n      transform[3] = 0.0;\n      transform[4] = yBasis.x;\n      transform[5] = yBasis.y;\n      transform[6] = yBasis.z;\n      transform[7] = 0.0;\n      transform[8] = zBasis.x;\n      transform[9] = zBasis.y;\n      transform[10] = zBasis.z;\n      transform[11] = 0.0;\n      transform[12] = cartesian.x;\n      transform[13] = cartesian.y;\n      transform[14] = cartesian.z;\n      transform[15] = 0.0;\n    }\n\n    camera._setTransform(transform);\n\n    if (saveCamera) {\n      Cartesian3.clone(position, camera.position);\n      Cartesian3.clone(direction, camera.direction);\n      Cartesian3.clone(up, camera.up);\n      Cartesian3.cross(direction, up, camera.right);\n    }\n  }\n\n  if (updateLookAt) {\n    const offset =\n      mode === SceneMode.SCENE2D ||\n      Cartesian3.equals(that._offset3D, Cartesian3.ZERO)\n        ? undefined\n        : that._offset3D;\n    camera.lookAtTransform(camera.transform, offset);\n  }\n}\n\n/**\n * A utility object for tracking an entity with the camera.\n * @alias EntityView\n * @constructor\n *\n * @param {Entity} entity The entity to track with the camera.\n * @param {Scene} scene The scene to use.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to use for orienting the camera.\n */\nfunction EntityView(entity, scene, ellipsoid) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"entity\", entity);\n  Check.defined(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  /**\n   * The entity to track with the camera.\n   * @type {Entity}\n   */\n  this.entity = entity;\n\n  /**\n   * The scene in which to track the object.\n   * @type {Scene}\n   */\n  this.scene = scene;\n\n  /**\n   * The ellipsoid to use for orienting the camera.\n   * @type {Ellipsoid}\n   */\n  this.ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  /**\n   * The bounding sphere of the object.\n   * @type {BoundingSphere}\n   */\n  this.boundingSphere = undefined;\n\n  // Shadow copies of the objects so we can detect changes.\n  this._lastEntity = undefined;\n  this._mode = undefined;\n\n  this._lastCartesian = new Cartesian3();\n  this._defaultOffset3D = undefined;\n\n  this._velocityProperty = new VelocityVectorProperty(entity.position, true);\n\n  this._offset3D = new Cartesian3();\n}\n\n// STATIC properties defined here, not per-instance.\nObject.defineProperties(EntityView, {\n  /**\n   * Gets or sets a camera offset that will be used to\n   * initialize subsequent EntityViews.\n   * @memberof EntityView\n   * @type {Cartesian3}\n   */\n  defaultOffset3D: {\n    get: function () {\n      return this._defaultOffset3D;\n    },\n    set: function (vector) {\n      this._defaultOffset3D = Cartesian3.clone(vector, new Cartesian3());\n    },\n  },\n});\n\n// Initialize the static property.\nEntityView.defaultOffset3D = new Cartesian3(-14000, 3500, 3500);\n\nconst scratchHeadingPitchRange = new HeadingPitchRange();\nconst scratchCartesian = new Cartesian3();\n\n/**\n * Should be called each animation frame to update the camera\n * to the latest settings.\n * @param {JulianDate} time The current animation time.\n * @param {BoundingSphere} [boundingSphere] bounding sphere of the object.\n */\nEntityView.prototype.update = function (time, boundingSphere) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const scene = this.scene;\n  const ellipsoid = this.ellipsoid;\n  const sceneMode = scene.mode;\n  if (sceneMode === SceneMode.MORPHING) {\n    return;\n  }\n\n  const entity = this.entity;\n  const trackingReferenceFrame = entity.trackingReferenceFrame;\n  const positionProperty = entity.position;\n  if (!defined(positionProperty)) {\n    return;\n  }\n  const velocityProperty = this._velocityProperty;\n  const orientationProperty = entity.orientation;\n  const objectChanged = entity !== this._lastEntity;\n  const sceneModeChanged = sceneMode !== this._mode;\n\n  const camera = scene.camera;\n\n  let updateLookAt = objectChanged || sceneModeChanged;\n  let saveCamera = true;\n\n  if (objectChanged) {\n    const viewFromProperty = entity.viewFrom;\n    const hasViewFrom = defined(viewFromProperty);\n\n    if (!hasViewFrom && defined(boundingSphere)) {\n      // The default HPR is not ideal for high altitude objects so\n      // we scale the pitch as we get further from the earth for a more\n      // downward view.\n      scratchHeadingPitchRange.pitch = -CesiumMath.PI_OVER_FOUR;\n      scratchHeadingPitchRange.range = 0;\n      const position = positionProperty.getValue(time, scratchCartesian);\n      if (defined(position)) {\n        const factor =\n          2 -\n          1 /\n            Math.max(\n              1,\n              Cartesian3.magnitude(position) / ellipsoid.maximumRadius,\n            );\n        scratchHeadingPitchRange.pitch *= factor;\n      }\n\n      camera.viewBoundingSphere(boundingSphere, scratchHeadingPitchRange);\n      this.boundingSphere = boundingSphere;\n      updateLookAt = false;\n      saveCamera = false;\n    } else if (\n      !hasViewFrom ||\n      !defined(viewFromProperty.getValue(time, this._offset3D))\n    ) {\n      Cartesian3.clone(EntityView._defaultOffset3D, this._offset3D);\n    }\n  } else if (!sceneModeChanged && this._mode !== SceneMode.SCENE2D) {\n    Cartesian3.clone(camera.position, this._offset3D);\n  }\n\n  this._lastEntity = entity;\n  this._mode = sceneMode;\n\n  updateTransform(\n    this,\n    camera,\n    updateLookAt,\n    saveCamera,\n    positionProperty,\n    velocityProperty,\n    orientationProperty,\n    trackingReferenceFrame,\n    time,\n    ellipsoid,\n  );\n};\nexport default EntityView;\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n  if (typeof o === \"string\") o = topology.objects[o];\n  return o.type === \"GeometryCollection\"\n      ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n      : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n  var id = o.id,\n      bbox = o.bbox,\n      properties = o.properties == null ? {} : o.properties,\n      geometry = object(topology, o);\n  return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n      : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n      : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n  var transformPoint = transform(topology.transform),\n      arcs = topology.arcs;\n\n  function arc(i, points) {\n    if (points.length) points.pop();\n    for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n      points.push(transformPoint(a[k], k));\n    }\n    if (i < 0) reverse(points, n);\n  }\n\n  function point(p) {\n    return transformPoint(p);\n  }\n\n  function line(arcs) {\n    var points = [];\n    for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n    if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n    return points;\n  }\n\n  function ring(arcs) {\n    var points = line(arcs);\n    while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n    return points;\n  }\n\n  function polygon(arcs) {\n    return arcs.map(ring);\n  }\n\n  function geometry(o) {\n    var type = o.type, coordinates;\n    switch (type) {\n      case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n      case \"Point\": coordinates = point(o.coordinates); break;\n      case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n      case \"LineString\": coordinates = line(o.arcs); break;\n      case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n      case \"Polygon\": coordinates = polygon(o.arcs); break;\n      case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n      default: return null;\n    }\n    return {type: type, coordinates: coordinates};\n  }\n\n  return geometry(o);\n}\n","import ArcType from \"../Core/ArcType.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport getFilenameFromUri from \"../Core/getFilenameFromUri.js\";\nimport PinBuilder from \"../Core/PinBuilder.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport * as topojson from \"topojson-client\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport DataSource from \"./DataSource.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\n\nfunction defaultCrsFunction(coordinates) {\n  return Cartesian3.fromDegrees(coordinates[0], coordinates[1], coordinates[2]);\n}\n\nconst crsNames = {\n  \"urn:ogc:def:crs:OGC:1.3:CRS84\": defaultCrsFunction,\n  \"EPSG:4326\": defaultCrsFunction,\n  \"urn:ogc:def:crs:EPSG::4326\": defaultCrsFunction,\n};\n\nconst crsLinkHrefs = {};\nconst crsLinkTypes = {};\nlet defaultMarkerSize = 48;\nlet defaultMarkerSymbol;\nlet defaultMarkerColor = Color.ROYALBLUE;\nlet defaultStroke = Color.YELLOW;\nlet defaultStrokeWidth = 2;\nlet defaultFill = Color.fromBytes(255, 255, 0, 100);\nlet defaultClampToGround = false;\n\nconst sizes = {\n  small: 24,\n  medium: 48,\n  large: 64,\n};\n\nconst simpleStyleIdentifiers = [\n  \"title\",\n  \"description\", //\n  \"marker-size\",\n  \"marker-symbol\",\n  \"marker-color\",\n  \"stroke\", //\n  \"stroke-opacity\",\n  \"stroke-width\",\n  \"fill\",\n  \"fill-opacity\",\n];\n\nfunction defaultDescribe(properties, nameProperty) {\n  let html = \"\";\n  for (const key in properties) {\n    if (properties.hasOwnProperty(key)) {\n      if (key === nameProperty || simpleStyleIdentifiers.indexOf(key) !== -1) {\n        continue;\n      }\n      const value = properties[key];\n      if (defined(value)) {\n        if (typeof value === \"object\") {\n          html += `<tr><th>${key}</th><td>${defaultDescribe(value)}</td></tr>`;\n        } else {\n          html += `<tr><th>${key}</th><td>${value}</td></tr>`;\n        }\n      }\n    }\n  }\n\n  if (html.length > 0) {\n    html = `<table class=\"cesium-infoBox-defaultTable\"><tbody>${html}</tbody></table>`;\n  }\n\n  return html;\n}\n\nfunction createDescriptionCallback(describe, properties, nameProperty) {\n  let description;\n  return function (time, result) {\n    if (!defined(description)) {\n      description = describe(properties, nameProperty);\n    }\n    return description;\n  };\n}\n\nfunction defaultDescribeProperty(properties, nameProperty) {\n  return new CallbackProperty(\n    createDescriptionCallback(defaultDescribe, properties, nameProperty),\n    true,\n  );\n}\n\n//GeoJSON specifies only the Feature object has a usable id property\n//But since \"multi\" geometries create multiple entity,\n//we can't use it for them either.\nfunction createObject(geoJson, entityCollection, describe) {\n  let id = geoJson.id;\n  if (!defined(id) || geoJson.type !== \"Feature\") {\n    id = createGuid();\n  } else {\n    let i = 2;\n    let finalId = id;\n    while (defined(entityCollection.getById(finalId))) {\n      finalId = `${id}_${i}`;\n      i++;\n    }\n    id = finalId;\n  }\n\n  const entity = entityCollection.getOrCreateEntity(id);\n  const properties = geoJson.properties;\n  if (defined(properties)) {\n    entity.properties = properties;\n\n    let nameProperty;\n\n    //Check for the simplestyle specified name first.\n    const name = properties.title;\n    if (defined(name)) {\n      entity.name = name;\n      nameProperty = \"title\";\n    } else {\n      //Else, find the name by selecting an appropriate property.\n      //The name will be obtained based on this order:\n      //1) The first case-insensitive property with the name 'title',\n      //2) The first case-insensitive property with the name 'name',\n      //3) The first property containing the word 'title'.\n      //4) The first property containing the word 'name',\n      let namePropertyPrecedence = Number.MAX_VALUE;\n      for (const key in properties) {\n        if (properties.hasOwnProperty(key) && properties[key]) {\n          const lowerKey = key.toLowerCase();\n\n          if (namePropertyPrecedence > 1 && lowerKey === \"title\") {\n            namePropertyPrecedence = 1;\n            nameProperty = key;\n            break;\n          } else if (namePropertyPrecedence > 2 && lowerKey === \"name\") {\n            namePropertyPrecedence = 2;\n            nameProperty = key;\n          } else if (namePropertyPrecedence > 3 && /title/i.test(key)) {\n            namePropertyPrecedence = 3;\n            nameProperty = key;\n          } else if (namePropertyPrecedence > 4 && /name/i.test(key)) {\n            namePropertyPrecedence = 4;\n            nameProperty = key;\n          }\n        }\n      }\n      if (defined(nameProperty)) {\n        entity.name = properties[nameProperty];\n      }\n    }\n\n    const description = properties.description;\n    if (description !== null) {\n      entity.description = !defined(description)\n        ? describe(properties, nameProperty)\n        : new ConstantProperty(description);\n    }\n  }\n  return entity;\n}\n\nfunction coordinatesArrayToCartesianArray(coordinates, crsFunction) {\n  const positions = new Array(coordinates.length);\n  for (let i = 0; i < coordinates.length; i++) {\n    positions[i] = crsFunction(coordinates[i]);\n  }\n  return positions;\n}\n\nconst geoJsonObjectTypes = {\n  Feature: processFeature,\n  FeatureCollection: processFeatureCollection,\n  GeometryCollection: processGeometryCollection,\n  LineString: processLineString,\n  MultiLineString: processMultiLineString,\n  MultiPoint: processMultiPoint,\n  MultiPolygon: processMultiPolygon,\n  Point: processPoint,\n  Polygon: processPolygon,\n  Topology: processTopology,\n};\n\nconst geometryTypes = {\n  GeometryCollection: processGeometryCollection,\n  LineString: processLineString,\n  MultiLineString: processMultiLineString,\n  MultiPoint: processMultiPoint,\n  MultiPolygon: processMultiPolygon,\n  Point: processPoint,\n  Polygon: processPolygon,\n  Topology: processTopology,\n};\n\n// GeoJSON processing functions\nfunction processFeature(dataSource, feature, notUsed, crsFunction, options) {\n  if (feature.geometry === null) {\n    //Null geometry is allowed, so just create an empty entity instance for it.\n    createObject(feature, dataSource._entityCollection, options.describe);\n    return;\n  }\n\n  if (!defined(feature.geometry)) {\n    throw new RuntimeError(\"feature.geometry is required.\");\n  }\n\n  const geometryType = feature.geometry.type;\n  const geometryHandler = geometryTypes[geometryType];\n  if (!defined(geometryHandler)) {\n    throw new RuntimeError(`Unknown geometry type: ${geometryType}`);\n  }\n  geometryHandler(dataSource, feature, feature.geometry, crsFunction, options);\n}\n\nfunction processFeatureCollection(\n  dataSource,\n  featureCollection,\n  notUsed,\n  crsFunction,\n  options,\n) {\n  const features = featureCollection.features;\n  for (let i = 0, len = features.length; i < len; i++) {\n    processFeature(dataSource, features[i], undefined, crsFunction, options);\n  }\n}\n\nfunction processGeometryCollection(\n  dataSource,\n  geoJson,\n  geometryCollection,\n  crsFunction,\n  options,\n) {\n  const geometries = geometryCollection.geometries;\n  for (let i = 0, len = geometries.length; i < len; i++) {\n    const geometry = geometries[i];\n    const geometryType = geometry.type;\n    const geometryHandler = geometryTypes[geometryType];\n    if (!defined(geometryHandler)) {\n      throw new RuntimeError(`Unknown geometry type: ${geometryType}`);\n    }\n    geometryHandler(dataSource, geoJson, geometry, crsFunction, options);\n  }\n}\n\nfunction createPoint(dataSource, geoJson, crsFunction, coordinates, options) {\n  let symbol = options.markerSymbol;\n  let color = options.markerColor;\n  let size = options.markerSize;\n\n  const properties = geoJson.properties;\n  if (defined(properties)) {\n    const cssColor = properties[\"marker-color\"];\n    if (defined(cssColor)) {\n      color = Color.fromCssColorString(cssColor);\n    }\n\n    size = sizes[properties[\"marker-size\"]] ?? size;\n    const markerSymbol = properties[\"marker-symbol\"];\n    if (defined(markerSymbol)) {\n      symbol = markerSymbol;\n    }\n  }\n\n  let canvasOrPromise;\n  if (defined(symbol)) {\n    if (symbol.length === 1) {\n      canvasOrPromise = dataSource._pinBuilder.fromText(\n        symbol.toUpperCase(),\n        color,\n        size,\n      );\n    } else {\n      canvasOrPromise = dataSource._pinBuilder.fromMakiIconId(\n        symbol,\n        color,\n        size,\n      );\n    }\n  } else {\n    canvasOrPromise = dataSource._pinBuilder.fromColor(color, size);\n  }\n\n  const billboard = new BillboardGraphics();\n  billboard.verticalOrigin = new ConstantProperty(VerticalOrigin.BOTTOM);\n\n  // Clamp to ground if there isn't a height specified\n  if (coordinates.length === 2 && options.clampToGround) {\n    billboard.heightReference = HeightReference.CLAMP_TO_GROUND;\n  }\n\n  const entity = createObject(\n    geoJson,\n    dataSource._entityCollection,\n    options.describe,\n  );\n  entity.billboard = billboard;\n  entity.position = new ConstantPositionProperty(crsFunction(coordinates));\n\n  const promise = Promise.resolve(canvasOrPromise)\n    .then(function (image) {\n      billboard.image = new ConstantProperty(image);\n    })\n    .catch(function () {\n      billboard.image = new ConstantProperty(\n        dataSource._pinBuilder.fromColor(color, size),\n      );\n    });\n\n  dataSource._promises.push(promise);\n}\n\nfunction processPoint(dataSource, geoJson, geometry, crsFunction, options) {\n  createPoint(dataSource, geoJson, crsFunction, geometry.coordinates, options);\n}\n\nfunction processMultiPoint(\n  dataSource,\n  geoJson,\n  geometry,\n  crsFunction,\n  options,\n) {\n  const coordinates = geometry.coordinates;\n  for (let i = 0; i < coordinates.length; i++) {\n    createPoint(dataSource, geoJson, crsFunction, coordinates[i], options);\n  }\n}\n\nfunction createLineString(\n  dataSource,\n  geoJson,\n  crsFunction,\n  coordinates,\n  options,\n) {\n  let material = options.strokeMaterialProperty;\n  let widthProperty = options.strokeWidthProperty;\n\n  const properties = geoJson.properties;\n  if (defined(properties)) {\n    const width = properties[\"stroke-width\"];\n    if (defined(width)) {\n      widthProperty = new ConstantProperty(width);\n    }\n\n    let color;\n    const stroke = properties.stroke;\n    if (defined(stroke)) {\n      color = Color.fromCssColorString(stroke);\n    }\n    const opacity = properties[\"stroke-opacity\"];\n    if (defined(opacity) && opacity !== 1.0) {\n      if (!defined(color)) {\n        color = material.color.getValue().clone();\n      }\n      color.alpha = opacity;\n    }\n    if (defined(color)) {\n      material = new ColorMaterialProperty(color);\n    }\n  }\n\n  const entity = createObject(\n    geoJson,\n    dataSource._entityCollection,\n    options.describe,\n  );\n  const polylineGraphics = new PolylineGraphics();\n  entity.polyline = polylineGraphics;\n\n  polylineGraphics.clampToGround = options.clampToGround;\n  polylineGraphics.material = material;\n  polylineGraphics.width = widthProperty;\n  polylineGraphics.positions = new ConstantProperty(\n    coordinatesArrayToCartesianArray(coordinates, crsFunction),\n  );\n  polylineGraphics.arcType = ArcType.RHUMB;\n}\n\nfunction processLineString(\n  dataSource,\n  geoJson,\n  geometry,\n  crsFunction,\n  options,\n) {\n  createLineString(\n    dataSource,\n    geoJson,\n    crsFunction,\n    geometry.coordinates,\n    options,\n  );\n}\n\nfunction processMultiLineString(\n  dataSource,\n  geoJson,\n  geometry,\n  crsFunction,\n  options,\n) {\n  const lineStrings = geometry.coordinates;\n  for (let i = 0; i < lineStrings.length; i++) {\n    createLineString(dataSource, geoJson, crsFunction, lineStrings[i], options);\n  }\n}\n\nfunction createPolygon(dataSource, geoJson, crsFunction, coordinates, options) {\n  if (coordinates.length === 0 || coordinates[0].length === 0) {\n    return;\n  }\n\n  let outlineColorProperty = options.strokeMaterialProperty.color;\n  let material = options.fillMaterialProperty;\n  let widthProperty = options.strokeWidthProperty;\n\n  const properties = geoJson.properties;\n  if (defined(properties)) {\n    const width = properties[\"stroke-width\"];\n    if (defined(width)) {\n      widthProperty = new ConstantProperty(width);\n    }\n\n    let color;\n    const stroke = properties.stroke;\n    if (defined(stroke)) {\n      color = Color.fromCssColorString(stroke);\n    }\n    let opacity = properties[\"stroke-opacity\"];\n    if (defined(opacity) && opacity !== 1.0) {\n      if (!defined(color)) {\n        color = outlineColorProperty.getValue().clone();\n      }\n      color.alpha = opacity;\n    }\n\n    if (defined(color)) {\n      outlineColorProperty = new ConstantProperty(color);\n    }\n\n    let fillColor;\n    const fill = properties.fill;\n    const materialColor = material.color.getValue();\n    if (defined(fill)) {\n      fillColor = Color.fromCssColorString(fill);\n      fillColor.alpha = materialColor.alpha;\n    }\n    opacity = properties[\"fill-opacity\"];\n    if (defined(opacity) && opacity !== materialColor.alpha) {\n      if (!defined(fillColor)) {\n        fillColor = materialColor.clone();\n      }\n      fillColor.alpha = opacity;\n    }\n    if (defined(fillColor)) {\n      material = new ColorMaterialProperty(fillColor);\n    }\n  }\n\n  const polygon = new PolygonGraphics();\n  polygon.outline = new ConstantProperty(true);\n  polygon.outlineColor = outlineColorProperty;\n  polygon.outlineWidth = widthProperty;\n  polygon.material = material;\n  polygon.arcType = ArcType.RHUMB;\n\n  const holes = [];\n  for (let i = 1, len = coordinates.length; i < len; i++) {\n    holes.push(\n      new PolygonHierarchy(\n        coordinatesArrayToCartesianArray(coordinates[i], crsFunction),\n      ),\n    );\n  }\n\n  const positions = coordinates[0];\n  polygon.hierarchy = new ConstantProperty(\n    new PolygonHierarchy(\n      coordinatesArrayToCartesianArray(positions, crsFunction),\n      holes,\n    ),\n  );\n  if (positions[0].length > 2) {\n    polygon.perPositionHeight = new ConstantProperty(true);\n  } else if (!options.clampToGround) {\n    polygon.height = 0;\n  }\n\n  const entity = createObject(\n    geoJson,\n    dataSource._entityCollection,\n    options.describe,\n  );\n  entity.polygon = polygon;\n}\n\nfunction processPolygon(dataSource, geoJson, geometry, crsFunction, options) {\n  createPolygon(\n    dataSource,\n    geoJson,\n    crsFunction,\n    geometry.coordinates,\n    options,\n  );\n}\n\nfunction processMultiPolygon(\n  dataSource,\n  geoJson,\n  geometry,\n  crsFunction,\n  options,\n) {\n  const polygons = geometry.coordinates;\n  for (let i = 0; i < polygons.length; i++) {\n    createPolygon(dataSource, geoJson, crsFunction, polygons[i], options);\n  }\n}\n\nfunction processTopology(dataSource, geoJson, geometry, crsFunction, options) {\n  for (const property in geometry.objects) {\n    if (geometry.objects.hasOwnProperty(property)) {\n      const feature = topojson.feature(geometry, geometry.objects[property]);\n      const typeHandler = geoJsonObjectTypes[feature.type];\n      typeHandler(dataSource, feature, feature, crsFunction, options);\n    }\n  }\n}\n\n/**\n * @typedef {object} GeoJsonDataSource.LoadOptions\n *\n * Initialization options for the <code>load</code> method.\n *\n * @property {string} [sourceUri] Overrides the url to use for resolving relative links.\n * @property {GeoJsonDataSource.describe} [describe=GeoJsonDataSource.defaultDescribeProperty] A function which returns a Property object (or just a string).\n * @property {number} [markerSize=GeoJsonDataSource.markerSize] The default size of the map pin created for each point, in pixels.\n * @property {string} [markerSymbol=GeoJsonDataSource.markerSymbol] The default symbol of the map pin created for each point.\n * @property {Color} [markerColor=GeoJsonDataSource.markerColor] The default color of the map pin created for each point.\n * @property {Color} [stroke=GeoJsonDataSource.stroke] The default color of polylines and polygon outlines.\n * @property {number} [strokeWidth=GeoJsonDataSource.strokeWidth] The default width of polylines and polygon outlines.\n * @property {Color} [fill=GeoJsonDataSource.fill] The default color for polygon interiors.\n * @property {boolean} [clampToGround=GeoJsonDataSource.clampToGround] true if we want the geometry features (polygons or linestrings) clamped to the ground.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * A {@link DataSource} which processes both\n * {@link http://www.geojson.org/|GeoJSON} and {@link https://github.com/mbostock/topojson|TopoJSON} data.\n * {@link https://github.com/mapbox/simplestyle-spec|simplestyle-spec} properties will also be used if they\n * are present.\n *\n * @alias GeoJsonDataSource\n * @constructor\n *\n * @param {string} [name] The name of this data source.  If undefined, a name will be taken from\n *                        the name of the GeoJSON file.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=geojson-and-topojson|Cesium Sandcastle GeoJSON and TopoJSON Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?id=geojson-simplestyle|Cesium Sandcastle GeoJSON simplestyle Demo}\n *\n * @example\n * const viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.dataSources.add(Cesium.GeoJsonDataSource.load('../../SampleData/ne_10m_us_states.topojson', {\n *   stroke: Cesium.Color.HOTPINK,\n *   fill: Cesium.Color.PINK,\n *   strokeWidth: 3,\n *   markerSymbol: '?'\n * }));\n */\nfunction GeoJsonDataSource(name) {\n  this._name = name;\n  this._changed = new Event();\n  this._error = new Event();\n  this._isLoading = false;\n  this._loading = new Event();\n  this._entityCollection = new EntityCollection(this);\n  this._promises = [];\n  this._pinBuilder = new PinBuilder();\n  this._entityCluster = new EntityCluster();\n  this._credit = undefined;\n  this._resourceCredits = [];\n}\n\n/**\n * Creates a Promise to a new instance loaded with the provided GeoJSON or TopoJSON data.\n *\n * @param {Resource|string|object} data A url, GeoJSON object, or TopoJSON object to be loaded.\n * @param {GeoJsonDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<GeoJsonDataSource>} A promise that will resolve when the data is loaded.\n */\nGeoJsonDataSource.load = function (data, options) {\n  return new GeoJsonDataSource().load(data, options);\n};\n\nObject.defineProperties(GeoJsonDataSource, {\n  /**\n   * Gets or sets the default size of the map pin created for each point, in pixels.\n   * @memberof GeoJsonDataSource\n   * @type {number}\n   * @default 48\n   */\n  markerSize: {\n    get: function () {\n      return defaultMarkerSize;\n    },\n    set: function (value) {\n      defaultMarkerSize = value;\n    },\n  },\n  /**\n   * Gets or sets the default symbol of the map pin created for each point.\n   * This can be any valid {@link http://mapbox.com/maki/|Maki} identifier, any single character,\n   * or blank if no symbol is to be used.\n   * @memberof GeoJsonDataSource\n   * @type {string}\n   */\n  markerSymbol: {\n    get: function () {\n      return defaultMarkerSymbol;\n    },\n    set: function (value) {\n      defaultMarkerSymbol = value;\n    },\n  },\n  /**\n   * Gets or sets the default color of the map pin created for each point.\n   * @memberof GeoJsonDataSource\n   * @type {Color}\n   * @default Color.ROYALBLUE\n   */\n  markerColor: {\n    get: function () {\n      return defaultMarkerColor;\n    },\n    set: function (value) {\n      defaultMarkerColor = value;\n    },\n  },\n  /**\n   * Gets or sets the default color of polylines and polygon outlines.\n   * @memberof GeoJsonDataSource\n   * @type {Color}\n   * @default Color.BLACK\n   */\n  stroke: {\n    get: function () {\n      return defaultStroke;\n    },\n    set: function (value) {\n      defaultStroke = value;\n    },\n  },\n  /**\n   * Gets or sets the default width of polylines and polygon outlines.\n   * @memberof GeoJsonDataSource\n   * @type {number}\n   * @default 2.0\n   */\n  strokeWidth: {\n    get: function () {\n      return defaultStrokeWidth;\n    },\n    set: function (value) {\n      defaultStrokeWidth = value;\n    },\n  },\n  /**\n   * Gets or sets default color for polygon interiors.\n   * @memberof GeoJsonDataSource\n   * @type {Color}\n   * @default Color.YELLOW\n   */\n  fill: {\n    get: function () {\n      return defaultFill;\n    },\n    set: function (value) {\n      defaultFill = value;\n    },\n  },\n  /**\n   * Gets or sets default of whether to clamp to the ground.\n   * @memberof GeoJsonDataSource\n   * @type {boolean}\n   * @default false\n   */\n  clampToGround: {\n    get: function () {\n      return defaultClampToGround;\n    },\n    set: function (value) {\n      defaultClampToGround = value;\n    },\n  },\n\n  /**\n   * Gets an object that maps the name of a crs to a callback function which takes a GeoJSON coordinate\n   * and transforms it into a WGS84 Earth-fixed Cartesian.  Older versions of GeoJSON which\n   * supported the EPSG type can be added to this list as well, by specifying the complete EPSG name,\n   * for example 'EPSG:4326'.\n   * @memberof GeoJsonDataSource\n   * @type {object}\n   */\n  crsNames: {\n    get: function () {\n      return crsNames;\n    },\n  },\n\n  /**\n   * Gets an object that maps the href property of a crs link to a callback function\n   * which takes the crs properties object and returns a Promise that resolves\n   * to a function that takes a GeoJSON coordinate and transforms it into a WGS84 Earth-fixed Cartesian.\n   * Items in this object take precedence over those defined in <code>crsLinkHrefs</code>, assuming\n   * the link has a type specified.\n   * @memberof GeoJsonDataSource\n   * @type {object}\n   */\n  crsLinkHrefs: {\n    get: function () {\n      return crsLinkHrefs;\n    },\n  },\n\n  /**\n   * Gets an object that maps the type property of a crs link to a callback function\n   * which takes the crs properties object and returns a Promise that resolves\n   * to a function that takes a GeoJSON coordinate and transforms it into a WGS84 Earth-fixed Cartesian.\n   * Items in <code>crsLinkHrefs</code> take precedence over this object.\n   * @memberof GeoJsonDataSource\n   * @type {object}\n   */\n  crsLinkTypes: {\n    get: function () {\n      return crsLinkTypes;\n    },\n  },\n});\n\nObject.defineProperties(GeoJsonDataSource.prototype, {\n  /**\n   * Gets or sets a human-readable name for this instance.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {string}\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n    set: function (value) {\n      if (this._name !== value) {\n        this._name = value;\n        this._changed.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * This DataSource only defines static data, therefore this property is always undefined.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {DataSourceClock}\n   */\n  clock: {\n    value: undefined,\n    writable: false,\n  },\n  /**\n   * Gets the collection of {@link Entity} instances.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {EntityCollection}\n   */\n  entities: {\n    get: function () {\n      return this._entityCollection;\n    },\n  },\n  /**\n   * Gets a value indicating if the data source is currently loading data.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {boolean}\n   */\n  isLoading: {\n    get: function () {\n      return this._isLoading;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the underlying data changes.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {Event}\n   */\n  changedEvent: {\n    get: function () {\n      return this._changed;\n    },\n  },\n  /**\n   * Gets an event that will be raised if an error is encountered during processing.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: function () {\n      return this._error;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the data source either starts or stops loading.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {Event}\n   */\n  loadingEvent: {\n    get: function () {\n      return this._loading;\n    },\n  },\n  /**\n   * Gets whether or not this data source should be displayed.\n   * @memberof GeoJsonDataSource.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._entityCollection.show;\n    },\n    set: function (value) {\n      this._entityCollection.show = value;\n    },\n  },\n\n  /**\n   * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n   *\n   * @memberof GeoJsonDataSource.prototype\n   * @type {EntityCluster}\n   */\n  clustering: {\n    get: function () {\n      return this._entityCluster;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value must be defined.\");\n      }\n      //>>includeEnd('debug');\n      this._entityCluster = value;\n    },\n  },\n  /**\n   * Gets the credit that will be displayed for the data source\n   * @memberof GeoJsonDataSource.prototype\n   * @type {Credit}\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n});\n\n/**\n * Asynchronously loads the provided GeoJSON or TopoJSON data, replacing any existing data.\n *\n * @param {Resource|string|object} data A url, GeoJSON object, or TopoJSON object to be loaded.\n * @param {GeoJsonDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<GeoJsonDataSource>} a promise that will resolve when the GeoJSON is loaded.\n */\nGeoJsonDataSource.prototype.load = function (data, options) {\n  return preload(this, data, options, true);\n};\n\n/**\n * Asynchronously loads the provided GeoJSON or TopoJSON data, without replacing any existing data.\n *\n * @param {Resource|string|object} data A url, GeoJSON object, or TopoJSON object to be loaded.\n * @param {GeoJsonDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<GeoJsonDataSource>} a promise that will resolve when the GeoJSON is loaded.\n */\nGeoJsonDataSource.prototype.process = function (data, options) {\n  return preload(this, data, options, false);\n};\n\nfunction preload(that, data, options, clear) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(data)) {\n    throw new DeveloperError(\"data is required.\");\n  }\n  //>>includeEnd('debug');\n\n  DataSource.setLoading(that, true);\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  // User specified credit\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  that._credit = credit;\n\n  let promise = data;\n  let sourceUri = options.sourceUri;\n  if (typeof data === \"string\" || data instanceof Resource) {\n    data = Resource.createIfNeeded(data);\n    promise = data.fetchJson();\n    sourceUri = sourceUri ?? data.getUrlComponent();\n\n    // Add resource credits to our list of credits to display\n    const resourceCredits = that._resourceCredits;\n    const credits = data.credits;\n    if (defined(credits)) {\n      const length = credits.length;\n      for (let i = 0; i < length; i++) {\n        resourceCredits.push(credits[i]);\n      }\n    }\n  }\n\n  options = {\n    describe: options.describe ?? defaultDescribeProperty,\n    markerSize: options.markerSize ?? defaultMarkerSize,\n    markerSymbol: options.markerSymbol ?? defaultMarkerSymbol,\n    markerColor: options.markerColor ?? defaultMarkerColor,\n    strokeWidthProperty: new ConstantProperty(\n      options.strokeWidth ?? defaultStrokeWidth,\n    ),\n    strokeMaterialProperty: new ColorMaterialProperty(\n      options.stroke ?? defaultStroke,\n    ),\n    fillMaterialProperty: new ColorMaterialProperty(\n      options.fill ?? defaultFill,\n    ),\n    clampToGround: options.clampToGround ?? defaultClampToGround,\n  };\n\n  return Promise.resolve(promise)\n    .then(function (geoJson) {\n      return load(that, geoJson, options, sourceUri, clear);\n    })\n    .catch(function (error) {\n      DataSource.setLoading(that, false);\n      that._error.raiseEvent(that, error);\n      throw error;\n    });\n}\n\n/**\n * Updates the data source to the provided time.  This function is optional and\n * is not required to be implemented.  It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nGeoJsonDataSource.prototype.update = function (time) {\n  return true;\n};\n\nfunction load(that, geoJson, options, sourceUri, clear) {\n  let name;\n  if (defined(sourceUri)) {\n    name = getFilenameFromUri(sourceUri);\n  }\n\n  if (defined(name) && that._name !== name) {\n    that._name = name;\n    that._changed.raiseEvent(that);\n  }\n\n  const typeHandler = geoJsonObjectTypes[geoJson.type];\n  if (!defined(typeHandler)) {\n    throw new RuntimeError(`Unsupported GeoJSON object type: ${geoJson.type}`);\n  }\n\n  //Check for a Coordinate Reference System.\n  const crs = geoJson.crs;\n  let crsFunction = crs !== null ? defaultCrsFunction : null;\n\n  if (defined(crs)) {\n    if (!defined(crs.properties)) {\n      throw new RuntimeError(\"crs.properties is undefined.\");\n    }\n\n    const properties = crs.properties;\n    if (crs.type === \"name\") {\n      crsFunction = crsNames[properties.name];\n      if (!defined(crsFunction)) {\n        throw new RuntimeError(`Unknown crs name: ${properties.name}`);\n      }\n    } else if (crs.type === \"link\") {\n      let handler = crsLinkHrefs[properties.href];\n      if (!defined(handler)) {\n        handler = crsLinkTypes[properties.type];\n      }\n\n      if (!defined(handler)) {\n        throw new RuntimeError(\n          `Unable to resolve crs link: ${JSON.stringify(properties)}`,\n        );\n      }\n\n      crsFunction = handler(properties);\n    } else if (crs.type === \"EPSG\") {\n      crsFunction = crsNames[`EPSG:${properties.code}`];\n      if (!defined(crsFunction)) {\n        throw new RuntimeError(`Unknown crs EPSG code: ${properties.code}`);\n      }\n    } else {\n      throw new RuntimeError(`Unknown crs type: ${crs.type}`);\n    }\n  }\n\n  return Promise.resolve(crsFunction).then(function (crsFunction) {\n    if (clear) {\n      that._entityCollection.removeAll();\n    }\n\n    // null is a valid value for the crs, but means the entire load process becomes a no-op\n    // because we can't assume anything about the coordinates.\n    if (crsFunction !== null) {\n      typeHandler(that, geoJson, geoJson, crsFunction, options);\n    }\n\n    return Promise.all(that._promises).then(function () {\n      that._promises.length = 0;\n      DataSource.setLoading(that, false);\n      return that;\n    });\n  });\n}\n\n/**\n * This callback is displayed as part of the GeoJsonDataSource class.\n * @callback GeoJsonDataSource.describe\n * @param {object} properties The properties of the feature.\n * @param {string} nameProperty The property key that Cesium estimates to have the name of the feature.\n */\nexport default GeoJsonDataSource;\n","import Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Event from \"../Core/Event.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport Entity from \"./Entity.js\";\nimport Property from \"./Property.js\";\n\nconst defaultMaterial = new ColorMaterialProperty(Color.WHITE);\nconst defaultShow = new ConstantProperty(true);\nconst defaultFill = new ConstantProperty(true);\nconst defaultOutline = new ConstantProperty(false);\nconst defaultOutlineColor = new ConstantProperty(Color.BLACK);\nconst defaultShadows = new ConstantProperty(ShadowMode.DISABLED);\nconst defaultDistanceDisplayCondition = new ConstantProperty(\n  new DistanceDisplayCondition(),\n);\nconst defaultClassificationType = new ConstantProperty(ClassificationType.BOTH);\n\n/**\n * An abstract class for updating geometry entities.\n * @alias GeometryUpdater\n * @constructor\n *\n * @param {object} options An object with the following properties:\n * @param {Entity} options.entity The entity containing the geometry to be visualized.\n * @param {Scene} options.scene The scene where visualization is taking place.\n * @param {object} options.geometryOptions Options for the geometry\n * @param {string} options.geometryPropertyName The geometry property name\n * @param {string[]} options.observedPropertyNames The entity properties this geometry cares about\n */\nfunction GeometryUpdater(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.entity\", options.entity);\n  Check.defined(\"options.scene\", options.scene);\n  Check.defined(\"options.geometryOptions\", options.geometryOptions);\n  Check.defined(\"options.geometryPropertyName\", options.geometryPropertyName);\n  Check.defined(\"options.observedPropertyNames\", options.observedPropertyNames);\n  //>>includeEnd('debug');\n\n  const entity = options.entity;\n  const geometryPropertyName = options.geometryPropertyName;\n\n  this._entity = entity;\n  this._scene = options.scene;\n  this._fillEnabled = false;\n  this._isClosed = false;\n  this._onTerrain = false;\n  this._dynamic = false;\n  this._outlineEnabled = false;\n  this._geometryChanged = new Event();\n  this._showProperty = undefined;\n  this._materialProperty = undefined;\n  this._showOutlineProperty = undefined;\n  this._outlineColorProperty = undefined;\n  this._outlineWidth = 1.0;\n  this._shadowsProperty = undefined;\n  this._distanceDisplayConditionProperty = undefined;\n  this._classificationTypeProperty = undefined;\n  this._options = options.geometryOptions;\n  this._geometryPropertyName = geometryPropertyName;\n  this._id = `${geometryPropertyName}-${entity.id}`;\n  this._observedPropertyNames = options.observedPropertyNames;\n  this._supportsMaterialsforEntitiesOnTerrain =\n    Entity.supportsMaterialsforEntitiesOnTerrain(options.scene);\n}\n\nObject.defineProperties(GeometryUpdater.prototype, {\n  /**\n   * Gets the unique ID associated with this updater\n   * @memberof GeometryUpdater.prototype\n   * @type {string}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * Gets the entity associated with this geometry.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {Entity}\n   * @readonly\n   */\n  entity: {\n    get: function () {\n      return this._entity;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry has a fill component.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  fillEnabled: {\n    get: function () {\n      return this._fillEnabled;\n    },\n  },\n  /**\n   * Gets a value indicating if fill visibility varies with simulation time.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  hasConstantFill: {\n    get: function () {\n      return (\n        !this._fillEnabled ||\n        (!defined(this._entity.availability) &&\n          Property.isConstant(this._showProperty) &&\n          Property.isConstant(this._fillProperty))\n      );\n    },\n  },\n  /**\n   * Gets the material property used to fill the geometry.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {MaterialProperty}\n   * @readonly\n   */\n  fillMaterialProperty: {\n    get: function () {\n      return this._materialProperty;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry has an outline component.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  outlineEnabled: {\n    get: function () {\n      return this._outlineEnabled;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry has an outline component.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  hasConstantOutline: {\n    get: function () {\n      return (\n        !this._outlineEnabled ||\n        (!defined(this._entity.availability) &&\n          Property.isConstant(this._showProperty) &&\n          Property.isConstant(this._showOutlineProperty))\n      );\n    },\n  },\n  /**\n   * Gets the {@link Color} property for the geometry outline.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  outlineColorProperty: {\n    get: function () {\n      return this._outlineColorProperty;\n    },\n  },\n  /**\n   * Gets the constant with of the geometry outline, in pixels.\n   * This value is only valid if isDynamic is false.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  outlineWidth: {\n    get: function () {\n      return this._outlineWidth;\n    },\n  },\n  /**\n   * Gets the property specifying whether the geometry\n   * casts or receives shadows from light sources.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  shadowsProperty: {\n    get: function () {\n      return this._shadowsProperty;\n    },\n  },\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this geometry will be displayed.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  distanceDisplayConditionProperty: {\n    get: function () {\n      return this._distanceDisplayConditionProperty;\n    },\n  },\n  /**\n   * Gets or sets the {@link ClassificationType} Property specifying if this geometry will classify terrain, 3D Tiles, or both when on the ground.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  classificationTypeProperty: {\n    get: function () {\n      return this._classificationTypeProperty;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry is time-varying.\n   *\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isDynamic: {\n    get: function () {\n      return this._dynamic;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry is closed.\n   * This property is only valid for static geometry.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isClosed: {\n    get: function () {\n      return this._isClosed;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry should be drawn on terrain.\n   * @memberof EllipseGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  onTerrain: {\n    get: function () {\n      return this._onTerrain;\n    },\n  },\n  /**\n   * Gets an event that is raised whenever the public properties\n   * of this updater change.\n   * @memberof GeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  geometryChanged: {\n    get: function () {\n      return this._geometryChanged;\n    },\n  },\n});\n\n/**\n * Checks if the geometry is outlined at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {boolean} true if geometry is outlined at the provided time, false otherwise.\n */\nGeometryUpdater.prototype.isOutlineVisible = function (time) {\n  const entity = this._entity;\n  const visible =\n    this._outlineEnabled &&\n    entity.isAvailable(time) &&\n    this._showProperty.getValue(time) &&\n    this._showOutlineProperty.getValue(time);\n  return visible ?? false;\n};\n\n/**\n * Checks if the geometry is filled at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {boolean} true if geometry is filled at the provided time, false otherwise.\n */\nGeometryUpdater.prototype.isFilled = function (time) {\n  const entity = this._entity;\n  const visible =\n    this._fillEnabled &&\n    entity.isAvailable(time) &&\n    this._showProperty.getValue(time) &&\n    this._fillProperty.getValue(time);\n  return visible ?? false;\n};\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @function\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nGeometryUpdater.prototype.createFillGeometryInstance =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @function\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nGeometryUpdater.prototype.createOutlineGeometryInstance =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nGeometryUpdater.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys and resources used by the object.  Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nGeometryUpdater.prototype.destroy = function () {\n  destroyObject(this);\n};\n/**\n * @param {Entity} entity\n * @param {object} geometry\n * @private\n */\nGeometryUpdater.prototype._isHidden = function (entity, geometry) {\n  const show = geometry.show;\n  return (\n    defined(show) && show.isConstant && !show.getValue(Iso8601.MINIMUM_VALUE)\n  );\n};\n\n/**\n * @param {Entity} entity\n * @param {object} geometry\n * @private\n */\nGeometryUpdater.prototype._isOnTerrain = function (entity, geometry) {\n  return false;\n};\n\n/**\n * @param {GeometryOptions} options\n * @private\n */\nGeometryUpdater.prototype._getIsClosed = function (options) {\n  return true;\n};\n\n/**\n * @param {Entity} entity\n * @param {object} geometry\n * @private\n */\nGeometryUpdater.prototype._isDynamic = DeveloperError.throwInstantiationError;\n\n/**\n * @param {Entity} entity\n * @param {object} geometry\n * @private\n */\nGeometryUpdater.prototype._setStaticOptions =\n  DeveloperError.throwInstantiationError;\n\n/**\n * @param {Entity} entity\n * @param {string} propertyName\n * @param {*} newValue\n * @param {*} oldValue\n * @private\n */\nGeometryUpdater.prototype._onEntityPropertyChanged = function (\n  entity,\n  propertyName,\n  newValue,\n  oldValue,\n) {\n  if (this._observedPropertyNames.indexOf(propertyName) === -1) {\n    return;\n  }\n\n  const geometry = this._entity[this._geometryPropertyName];\n\n  if (!defined(geometry)) {\n    if (this._fillEnabled || this._outlineEnabled) {\n      this._fillEnabled = false;\n      this._outlineEnabled = false;\n      this._geometryChanged.raiseEvent(this);\n    }\n    return;\n  }\n\n  const fillProperty = geometry.fill;\n  const fillEnabled =\n    defined(fillProperty) && fillProperty.isConstant\n      ? fillProperty.getValue(Iso8601.MINIMUM_VALUE)\n      : true;\n\n  const outlineProperty = geometry.outline;\n  let outlineEnabled = defined(outlineProperty);\n  if (outlineEnabled && outlineProperty.isConstant) {\n    outlineEnabled = outlineProperty.getValue(Iso8601.MINIMUM_VALUE);\n  }\n\n  if (!fillEnabled && !outlineEnabled) {\n    if (this._fillEnabled || this._outlineEnabled) {\n      this._fillEnabled = false;\n      this._outlineEnabled = false;\n      this._geometryChanged.raiseEvent(this);\n    }\n    return;\n  }\n\n  const show = geometry.show;\n  if (this._isHidden(entity, geometry)) {\n    if (this._fillEnabled || this._outlineEnabled) {\n      this._fillEnabled = false;\n      this._outlineEnabled = false;\n      this._geometryChanged.raiseEvent(this);\n    }\n    return;\n  }\n\n  this._materialProperty = geometry.material ?? defaultMaterial;\n  this._fillProperty = fillProperty ?? defaultFill;\n  this._showProperty = show ?? defaultShow;\n  this._showOutlineProperty = geometry.outline ?? defaultOutline;\n  this._outlineColorProperty = outlineEnabled\n    ? (geometry.outlineColor ?? defaultOutlineColor)\n    : undefined;\n  this._shadowsProperty = geometry.shadows ?? defaultShadows;\n  this._distanceDisplayConditionProperty =\n    geometry.distanceDisplayCondition ?? defaultDistanceDisplayCondition;\n  this._classificationTypeProperty =\n    geometry.classificationType ?? defaultClassificationType;\n\n  this._fillEnabled = fillEnabled;\n\n  const onTerrain =\n    this._isOnTerrain(entity, geometry) &&\n    (this._supportsMaterialsforEntitiesOnTerrain ||\n      this._materialProperty instanceof ColorMaterialProperty);\n\n  if (outlineEnabled && onTerrain) {\n    oneTimeWarning(oneTimeWarning.geometryOutlines);\n    outlineEnabled = false;\n  }\n\n  this._onTerrain = onTerrain;\n  this._outlineEnabled = outlineEnabled;\n\n  if (this._isDynamic(entity, geometry)) {\n    if (!this._dynamic) {\n      this._dynamic = true;\n      this._geometryChanged.raiseEvent(this);\n    }\n  } else {\n    this._setStaticOptions(entity, geometry);\n    this._isClosed = this._getIsClosed(this._options);\n    const outlineWidth = geometry.outlineWidth;\n    this._outlineWidth = defined(outlineWidth)\n      ? outlineWidth.getValue(Iso8601.MINIMUM_VALUE)\n      : 1.0;\n    this._dynamic = false;\n    this._geometryChanged.raiseEvent(this);\n  }\n};\n\n/**\n * Creates the dynamic updater to be used when GeometryUpdater#isDynamic is true.\n *\n * @param {PrimitiveCollection} primitives The primitive collection to use.\n * @param {PrimitiveCollection} [groundPrimitives] The primitive collection to use for ground primitives.\n *\n * @returns {DynamicGeometryUpdater} The dynamic updater used to update the geometry each frame.\n *\n * @exception {DeveloperError} This instance does not represent dynamic geometry.\n * @private\n */\nGeometryUpdater.prototype.createDynamicUpdater = function (\n  primitives,\n  groundPrimitives,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"primitives\", primitives);\n  Check.defined(\"groundPrimitives\", groundPrimitives);\n\n  if (!this._dynamic) {\n    throw new DeveloperError(\n      \"This instance does not represent dynamic geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return new this.constructor.DynamicGeometryUpdater(\n    this,\n    primitives,\n    groundPrimitives,\n  );\n};\nexport default GeometryUpdater;\n","import destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport BoxGeometryUpdater from \"./BoxGeometryUpdater.js\";\nimport CorridorGeometryUpdater from \"./CorridorGeometryUpdater.js\";\nimport CylinderGeometryUpdater from \"./CylinderGeometryUpdater.js\";\nimport EllipseGeometryUpdater from \"./EllipseGeometryUpdater.js\";\nimport EllipsoidGeometryUpdater from \"./EllipsoidGeometryUpdater.js\";\nimport PlaneGeometryUpdater from \"./PlaneGeometryUpdater.js\";\nimport PolygonGeometryUpdater from \"./PolygonGeometryUpdater.js\";\nimport PolylineVolumeGeometryUpdater from \"./PolylineVolumeGeometryUpdater.js\";\nimport RectangleGeometryUpdater from \"./RectangleGeometryUpdater.js\";\nimport WallGeometryUpdater from \"./WallGeometryUpdater.js\";\n\n/** @type {GeometryUpdater[]} */\nconst geometryUpdaters = [\n  BoxGeometryUpdater,\n  CylinderGeometryUpdater,\n  CorridorGeometryUpdater,\n  EllipseGeometryUpdater,\n  EllipsoidGeometryUpdater,\n  PlaneGeometryUpdater,\n  PolygonGeometryUpdater,\n  PolylineVolumeGeometryUpdater,\n  RectangleGeometryUpdater,\n  WallGeometryUpdater,\n];\n\n/**\n * Manages a set of \"updater\" classes for the {@link GeometryVisualizer} for each entity\n *\n * @private\n * @param {Entity} entity\n * @param {Scene} scene\n */\nfunction GeometryUpdaterSet(entity, scene) {\n  this.entity = entity;\n  this.scene = scene;\n  const updaters = new Array(geometryUpdaters.length);\n  const geometryChanged = new Event();\n  const eventHelper = new EventHelper();\n  for (let i = 0; i < updaters.length; i++) {\n    const updater = new geometryUpdaters[i](entity, scene);\n    eventHelper.add(updater.geometryChanged, (geometry) => {\n      geometryChanged.raiseEvent(geometry);\n    });\n    updaters[i] = updater;\n  }\n  this.updaters = updaters;\n  this.geometryChanged = geometryChanged;\n  this.eventHelper = eventHelper;\n\n  this._removeEntitySubscription = entity.definitionChanged.addEventListener(\n    GeometryUpdaterSet.prototype._onEntityPropertyChanged,\n    this,\n  );\n}\n\nGeometryUpdaterSet.prototype._onEntityPropertyChanged = function (\n  entity,\n  propertyName,\n  newValue,\n  oldValue,\n) {\n  const updaters = this.updaters;\n  for (let i = 0; i < updaters.length; i++) {\n    updaters[i]._onEntityPropertyChanged(\n      entity,\n      propertyName,\n      newValue,\n      oldValue,\n    );\n  }\n};\n\nGeometryUpdaterSet.prototype.forEach = function (callback) {\n  const updaters = this.updaters;\n  for (let i = 0; i < updaters.length; i++) {\n    callback(updaters[i]);\n  }\n};\n\nGeometryUpdaterSet.prototype.destroy = function () {\n  this.eventHelper.removeAll();\n  const updaters = this.updaters;\n  for (let i = 0; i < updaters.length; i++) {\n    updaters[i].destroy();\n  }\n  this._removeEntitySubscription();\n  destroyObject(this);\n};\n\n/**\n * Add the provided updater to the default list of updaters if not already included\n * @param {GeometryUpdater} updater\n */\nGeometryUpdaterSet.registerUpdater = function (updater) {\n  if (!geometryUpdaters.includes(updater)) {\n    geometryUpdaters.push(updater);\n  }\n};\n\n/**\n * Remove the provided updater from the default list of updaters if included\n * @param {GeometryUpdater} updater\n */\nGeometryUpdaterSet.unregisterUpdater = function (updater) {\n  if (geometryUpdaters.includes(updater)) {\n    const index = geometryUpdaters.indexOf(updater);\n    geometryUpdaters.splice(index, 1);\n  }\n};\n\nexport default GeometryUpdaterSet;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryBatch from \"./DynamicGeometryBatch.js\";\nimport Entity from \"./Entity.js\";\nimport GeometryUpdaterSet from \"./GeometryUpdaterSet.js\";\nimport StaticGeometryColorBatch from \"./StaticGeometryColorBatch.js\";\nimport StaticGeometryPerMaterialBatch from \"./StaticGeometryPerMaterialBatch.js\";\nimport StaticGroundGeometryColorBatch from \"./StaticGroundGeometryColorBatch.js\";\nimport StaticGroundGeometryPerMaterialBatch from \"./StaticGroundGeometryPerMaterialBatch.js\";\nimport StaticOutlineGeometryBatch from \"./StaticOutlineGeometryBatch.js\";\n\nconst emptyArray = [];\n\n/**\n * A general purpose visualizer for geometry represented by {@link Primitive} instances.\n * @alias GeometryVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n * @param {PrimitiveCollection} [primitives=scene.primitives] A collection to add primitives related to the entities\n * @param {PrimitiveCollection} [groundPrimitives=scene.groundPrimitives] A collection to add ground primitives related to the entities\n */\nfunction GeometryVisualizer(\n  scene,\n  entityCollection,\n  primitives,\n  groundPrimitives,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"scene\", scene);\n  Check.defined(\"entityCollection\", entityCollection);\n  //>>includeEnd('debug');\n\n  primitives = primitives ?? scene.primitives;\n  groundPrimitives = groundPrimitives ?? scene.groundPrimitives;\n\n  this._scene = scene;\n  this._primitives = primitives;\n  this._groundPrimitives = groundPrimitives;\n  this._entityCollection = undefined;\n  this._addedObjects = new AssociativeArray();\n  this._removedObjects = new AssociativeArray();\n  this._changedObjects = new AssociativeArray();\n\n  const numberOfShadowModes = ShadowMode.NUMBER_OF_SHADOW_MODES;\n  this._outlineBatches = new Array(numberOfShadowModes * 2);\n  this._closedColorBatches = new Array(numberOfShadowModes * 2);\n  this._closedMaterialBatches = new Array(numberOfShadowModes * 2);\n  this._openColorBatches = new Array(numberOfShadowModes * 2);\n  this._openMaterialBatches = new Array(numberOfShadowModes * 2);\n\n  const supportsMaterialsforEntitiesOnTerrain =\n    Entity.supportsMaterialsforEntitiesOnTerrain(scene);\n  this._supportsMaterialsforEntitiesOnTerrain =\n    supportsMaterialsforEntitiesOnTerrain;\n\n  let i;\n  for (i = 0; i < numberOfShadowModes; ++i) {\n    this._outlineBatches[i] = new StaticOutlineGeometryBatch(\n      primitives,\n      scene,\n      i,\n      false,\n    );\n    this._outlineBatches[numberOfShadowModes + i] =\n      new StaticOutlineGeometryBatch(primitives, scene, i, true);\n\n    this._closedColorBatches[i] = new StaticGeometryColorBatch(\n      primitives,\n      PerInstanceColorAppearance,\n      undefined,\n      true,\n      i,\n      true,\n    );\n    this._closedColorBatches[numberOfShadowModes + i] =\n      new StaticGeometryColorBatch(\n        primitives,\n        PerInstanceColorAppearance,\n        undefined,\n        true,\n        i,\n        false,\n      );\n\n    this._closedMaterialBatches[i] = new StaticGeometryPerMaterialBatch(\n      primitives,\n      MaterialAppearance,\n      undefined,\n      true,\n      i,\n      true,\n    );\n    this._closedMaterialBatches[numberOfShadowModes + i] =\n      new StaticGeometryPerMaterialBatch(\n        primitives,\n        MaterialAppearance,\n        undefined,\n        true,\n        i,\n        false,\n      );\n\n    this._openColorBatches[i] = new StaticGeometryColorBatch(\n      primitives,\n      PerInstanceColorAppearance,\n      undefined,\n      false,\n      i,\n      true,\n    );\n    this._openColorBatches[numberOfShadowModes + i] =\n      new StaticGeometryColorBatch(\n        primitives,\n        PerInstanceColorAppearance,\n        undefined,\n        false,\n        i,\n        false,\n      );\n\n    this._openMaterialBatches[i] = new StaticGeometryPerMaterialBatch(\n      primitives,\n      MaterialAppearance,\n      undefined,\n      false,\n      i,\n      true,\n    );\n    this._openMaterialBatches[numberOfShadowModes + i] =\n      new StaticGeometryPerMaterialBatch(\n        primitives,\n        MaterialAppearance,\n        undefined,\n        false,\n        i,\n        false,\n      );\n  }\n\n  const numberOfClassificationTypes =\n    ClassificationType.NUMBER_OF_CLASSIFICATION_TYPES;\n  const groundColorBatches = new Array(numberOfClassificationTypes);\n  const groundMaterialBatches = [];\n  if (supportsMaterialsforEntitiesOnTerrain) {\n    for (i = 0; i < numberOfClassificationTypes; ++i) {\n      groundMaterialBatches.push(\n        new StaticGroundGeometryPerMaterialBatch(\n          groundPrimitives,\n          i,\n          MaterialAppearance,\n        ),\n      );\n      groundColorBatches[i] = new StaticGroundGeometryColorBatch(\n        groundPrimitives,\n        i,\n      );\n    }\n  } else {\n    for (i = 0; i < numberOfClassificationTypes; ++i) {\n      groundColorBatches[i] = new StaticGroundGeometryColorBatch(\n        groundPrimitives,\n        i,\n      );\n    }\n  }\n\n  this._groundColorBatches = groundColorBatches;\n  this._groundMaterialBatches = groundMaterialBatches;\n\n  this._dynamicBatch = new DynamicGeometryBatch(primitives, groundPrimitives);\n\n  this._batches = this._outlineBatches.concat(\n    this._closedColorBatches,\n    this._closedMaterialBatches,\n    this._openColorBatches,\n    this._openMaterialBatches,\n    this._groundColorBatches,\n    this._groundMaterialBatches,\n    this._dynamicBatch,\n  );\n\n  this._subscriptions = new AssociativeArray();\n  this._updaterSets = new AssociativeArray();\n\n  this._entityCollection = entityCollection;\n  entityCollection.collectionChanged.addEventListener(\n    GeometryVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  this._onCollectionChanged(\n    entityCollection,\n    entityCollection.values,\n    emptyArray,\n  );\n}\n\n/**\n * Add the provided updater to the default list of updaters if not already included\n * @private\n * @param {GeometryUpdater} updater\n */\nGeometryVisualizer.registerUpdater = function (updater) {\n  GeometryUpdaterSet.registerUpdater(updater);\n};\n\n/**\n * Remove the provided updater from the default list of updaters if included\n * @private\n * @param {GeometryUpdater} updater\n */\nGeometryVisualizer.unregisterUpdater = function (updater) {\n  GeometryUpdaterSet.unregisterUpdater(updater);\n};\n\n/**\n * Updates all of the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} True if the visualizer successfully updated to the provided time,\n * false if the visualizer is waiting for asynchronous primitives to be created.\n */\nGeometryVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const addedObjects = this._addedObjects;\n  const added = addedObjects.values;\n  const removedObjects = this._removedObjects;\n  const removed = removedObjects.values;\n  const changedObjects = this._changedObjects;\n  const changed = changedObjects.values;\n\n  let i;\n  let entity;\n  let id;\n  let updaterSet;\n  const that = this;\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    id = entity.id;\n    updaterSet = this._updaterSets.get(id);\n\n    //If in a single update, an entity gets removed and a new instance\n    //re-added with the same id, the updater no longer tracks the\n    //correct entity, we need to both remove the old one and\n    //add the new one, which is done by pushing the entity\n    //onto the removed/added lists.\n    if (updaterSet.entity === entity) {\n      updaterSet.forEach(function (updater) {\n        that._removeUpdater(updater);\n        that._insertUpdaterIntoBatch(time, updater);\n      });\n    } else {\n      removed.push(entity);\n      added.push(entity);\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    id = entity.id;\n    updaterSet = this._updaterSets.get(id);\n    updaterSet.forEach(this._removeUpdater.bind(this));\n    updaterSet.destroy();\n    this._updaterSets.remove(id);\n    this._subscriptions.get(id)();\n    this._subscriptions.remove(id);\n  }\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    id = entity.id;\n    updaterSet = new GeometryUpdaterSet(entity, this._scene);\n    this._updaterSets.set(id, updaterSet);\n    updaterSet.forEach(function (updater) {\n      that._insertUpdaterIntoBatch(time, updater);\n    });\n    this._subscriptions.set(\n      id,\n      updaterSet.geometryChanged.addEventListener(\n        GeometryVisualizer._onGeometryChanged,\n        this,\n      ),\n    );\n  }\n\n  addedObjects.removeAll();\n  removedObjects.removeAll();\n  changedObjects.removeAll();\n\n  let isUpdated = true;\n  const batches = this._batches;\n  const length = batches.length;\n  for (i = 0; i < length; i++) {\n    isUpdated = batches[i].update(time) && isUpdated;\n  }\n\n  return isUpdated;\n};\n\nconst getBoundingSphereArrayScratch = [];\nconst getBoundingSphereBoundingSphereScratch = new BoundingSphere();\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nGeometryVisualizer.prototype.getBoundingSphere = function (entity, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"entity\", entity);\n  Check.defined(\"result\", result);\n  //>>includeEnd('debug');\n\n  const boundingSpheres = getBoundingSphereArrayScratch;\n  const tmp = getBoundingSphereBoundingSphereScratch;\n\n  let count = 0;\n  let state = BoundingSphereState.DONE;\n  const batches = this._batches;\n  const batchesLength = batches.length;\n\n  const id = entity.id;\n  const updaters = this._updaterSets.get(id).updaters;\n\n  for (let j = 0; j < updaters.length; j++) {\n    const updater = updaters[j];\n    for (let i = 0; i < batchesLength; i++) {\n      state = batches[i].getBoundingSphere(updater, tmp);\n      if (state === BoundingSphereState.PENDING) {\n        return BoundingSphereState.PENDING;\n      } else if (state === BoundingSphereState.DONE) {\n        boundingSpheres[count] = BoundingSphere.clone(\n          tmp,\n          boundingSpheres[count],\n        );\n        count++;\n      }\n    }\n  }\n\n  if (count === 0) {\n    return BoundingSphereState.FAILED;\n  }\n\n  boundingSpheres.length = count;\n  BoundingSphere.fromBoundingSpheres(boundingSpheres, result);\n  return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nGeometryVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nGeometryVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    GeometryVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  this._addedObjects.removeAll();\n  this._removedObjects.removeAll();\n\n  let i;\n  const batches = this._batches;\n  let length = batches.length;\n  for (i = 0; i < length; i++) {\n    batches[i].removeAllPrimitives();\n  }\n\n  const subscriptions = this._subscriptions.values;\n  length = subscriptions.length;\n  for (i = 0; i < length; i++) {\n    subscriptions[i]();\n  }\n  this._subscriptions.removeAll();\n\n  const updaterSets = this._updaterSets.values;\n  length = updaterSets.length;\n  for (i = 0; i < length; i++) {\n    updaterSets[i].destroy();\n  }\n  this._updaterSets.removeAll();\n  return destroyObject(this);\n};\n\n/**\n * @private\n */\nGeometryVisualizer.prototype._removeUpdater = function (updater) {\n  //We don't keep track of which batch an updater is in, so just remove it from all of them.\n  const batches = this._batches;\n  const length = batches.length;\n  for (let i = 0; i < length; i++) {\n    batches[i].remove(updater);\n  }\n};\n\n/**\n * @private\n */\nGeometryVisualizer.prototype._insertUpdaterIntoBatch = function (\n  time,\n  updater,\n) {\n  if (updater.isDynamic) {\n    this._dynamicBatch.add(time, updater);\n    return;\n  }\n\n  let shadows;\n  if (updater.outlineEnabled || updater.fillEnabled) {\n    shadows = updater.shadowsProperty.getValue(time);\n  }\n\n  const numberOfShadowModes = ShadowMode.NUMBER_OF_SHADOW_MODES;\n  if (updater.outlineEnabled) {\n    if (defined(updater.terrainOffsetProperty)) {\n      this._outlineBatches[numberOfShadowModes + shadows].add(time, updater);\n    } else {\n      this._outlineBatches[shadows].add(time, updater);\n    }\n  }\n\n  if (updater.fillEnabled) {\n    if (updater.onTerrain) {\n      const classificationType =\n        updater.classificationTypeProperty.getValue(time);\n      if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n        this._groundColorBatches[classificationType].add(time, updater);\n      } else {\n        // If unsupported, updater will not be on terrain.\n        this._groundMaterialBatches[classificationType].add(time, updater);\n      }\n    } else if (updater.isClosed) {\n      if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n        if (defined(updater.terrainOffsetProperty)) {\n          this._closedColorBatches[numberOfShadowModes + shadows].add(\n            time,\n            updater,\n          );\n        } else {\n          this._closedColorBatches[shadows].add(time, updater);\n        }\n      } else if (defined(updater.terrainOffsetProperty)) {\n        this._closedMaterialBatches[numberOfShadowModes + shadows].add(\n          time,\n          updater,\n        );\n      } else {\n        this._closedMaterialBatches[shadows].add(time, updater);\n      }\n    } else if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n      if (defined(updater.terrainOffsetProperty)) {\n        this._openColorBatches[numberOfShadowModes + shadows].add(\n          time,\n          updater,\n        );\n      } else {\n        this._openColorBatches[shadows].add(time, updater);\n      }\n    } else if (defined(updater.terrainOffsetProperty)) {\n      this._openMaterialBatches[numberOfShadowModes + shadows].add(\n        time,\n        updater,\n      );\n    } else {\n      this._openMaterialBatches[shadows].add(time, updater);\n    }\n  }\n};\n\n/**\n * @private\n */\nGeometryVisualizer._onGeometryChanged = function (updater) {\n  const removedObjects = this._removedObjects;\n  const changedObjects = this._changedObjects;\n\n  const entity = updater.entity;\n  const id = entity.id;\n\n  if (!defined(removedObjects.get(id)) && !defined(changedObjects.get(id))) {\n    changedObjects.set(id, entity);\n  }\n};\n\n/**\n * @private\n */\nGeometryVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n) {\n  const addedObjects = this._addedObjects;\n  const removedObjects = this._removedObjects;\n  const changedObjects = this._changedObjects;\n\n  let i;\n  let id;\n  let entity;\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    id = entity.id;\n    if (!addedObjects.remove(id)) {\n      removedObjects.set(id, entity);\n      changedObjects.remove(id);\n    }\n  }\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    id = entity.id;\n    if (removedObjects.remove(id)) {\n      changedObjects.set(id, entity);\n    } else {\n      addedObjects.set(id, entity);\n    }\n  }\n};\nexport default GeometryVisualizer;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport ClockRange from \"../Core/ClockRange.js\";\nimport ClockStep from \"../Core/ClockStep.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport PinBuilder from \"../Core/PinBuilder.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport LabelStyle from \"../Scene/LabelStyle.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport Autolinker from \"autolinker\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport DataSource from \"./DataSource.js\";\nimport DataSourceClock from \"./DataSourceClock.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\nimport LabelGraphics from \"./LabelGraphics.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\nimport PolylineOutlineMaterialProperty from \"./PolylineOutlineMaterialProperty.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\n\nlet parser;\nif (typeof DOMParser !== \"undefined\") {\n  parser = new DOMParser();\n}\n\nconst autolinker = new Autolinker({\n  stripPrefix: false,\n  email: false,\n  replaceFn: function (linker, match) {\n    //Prevent matching of non-explicit urls.\n    //i.e. foo.id won't match but http://foo.id will\n    return match.urlMatchType === \"scheme\" || match.urlMatchType === \"www\";\n  },\n});\n\nconst BILLBOARD_SIZE = 32;\nconst BILLBOARD_NEAR_DISTANCE = 2414016;\nconst BILLBOARD_NEAR_RATIO = 1.0;\nconst BILLBOARD_FAR_DISTANCE = 1.6093e7;\nconst BILLBOARD_FAR_RATIO = 0.1;\n\nconst gpxNamespaces = [null, undefined, \"http://www.topografix.com/GPX/1/1\"];\nconst namespaces = {\n  gpx: gpxNamespaces,\n};\n\nfunction readBlobAsText(blob) {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.addEventListener(\"load\", function () {\n      resolve(reader.result);\n    });\n    reader.addEventListener(\"error\", function () {\n      reject(reader.error);\n    });\n    reader.readAsText(blob);\n  });\n}\n\nfunction getOrCreateEntity(node, entityCollection) {\n  let id = queryStringAttribute(node, \"id\");\n  id = defined(id) ? id : createGuid();\n  const entity = entityCollection.getOrCreateEntity(id);\n  return entity;\n}\n\nfunction readCoordinateFromNode(node) {\n  const longitude = queryNumericAttribute(node, \"lon\");\n  const latitude = queryNumericAttribute(node, \"lat\");\n  const elevation = queryNumericValue(node, \"ele\", namespaces.gpx);\n  return Cartesian3.fromDegrees(longitude, latitude, elevation);\n}\n\nfunction queryNumericAttribute(node, attributeName) {\n  if (!defined(node)) {\n    return undefined;\n  }\n\n  const value = node.getAttribute(attributeName);\n  if (value !== null) {\n    const result = parseFloat(value);\n    return !isNaN(result) ? result : undefined;\n  }\n  return undefined;\n}\n\nfunction queryStringAttribute(node, attributeName) {\n  if (!defined(node)) {\n    return undefined;\n  }\n  const value = node.getAttribute(attributeName);\n  return value !== null ? value : undefined;\n}\n\nfunction queryFirstNode(node, tagName, namespace) {\n  if (!defined(node)) {\n    return undefined;\n  }\n  const childNodes = node.childNodes;\n  const length = childNodes.length;\n  for (let q = 0; q < length; q++) {\n    const child = childNodes[q];\n    if (\n      child.localName === tagName &&\n      namespace.indexOf(child.namespaceURI) !== -1\n    ) {\n      return child;\n    }\n  }\n  return undefined;\n}\n\nfunction queryNodes(node, tagName, namespace) {\n  if (!defined(node)) {\n    return undefined;\n  }\n  const result = [];\n  const childNodes = node.getElementsByTagName(tagName);\n  const length = childNodes.length;\n  for (let q = 0; q < length; q++) {\n    const child = childNodes[q];\n    if (\n      child.localName === tagName &&\n      namespace.indexOf(child.namespaceURI) !== -1\n    ) {\n      result.push(child);\n    }\n  }\n  return result;\n}\n\nfunction queryNumericValue(node, tagName, namespace) {\n  const resultNode = queryFirstNode(node, tagName, namespace);\n  if (defined(resultNode)) {\n    const result = parseFloat(resultNode.textContent);\n    return !isNaN(result) ? result : undefined;\n  }\n  return undefined;\n}\n\nfunction queryStringValue(node, tagName, namespace) {\n  const result = queryFirstNode(node, tagName, namespace);\n  if (defined(result)) {\n    return result.textContent.trim();\n  }\n  return undefined;\n}\n\nfunction createDefaultBillboard(image) {\n  const billboard = new BillboardGraphics();\n  billboard.width = BILLBOARD_SIZE;\n  billboard.height = BILLBOARD_SIZE;\n  billboard.scaleByDistance = new NearFarScalar(\n    BILLBOARD_NEAR_DISTANCE,\n    BILLBOARD_NEAR_RATIO,\n    BILLBOARD_FAR_DISTANCE,\n    BILLBOARD_FAR_RATIO,\n  );\n  billboard.pixelOffsetScaleByDistance = new NearFarScalar(\n    BILLBOARD_NEAR_DISTANCE,\n    BILLBOARD_NEAR_RATIO,\n    BILLBOARD_FAR_DISTANCE,\n    BILLBOARD_FAR_RATIO,\n  );\n  billboard.verticalOrigin = new ConstantProperty(VerticalOrigin.BOTTOM);\n  billboard.image = image;\n  return billboard;\n}\n\nfunction createDefaultLabel() {\n  const label = new LabelGraphics();\n  label.translucencyByDistance = new NearFarScalar(3000000, 1.0, 5000000, 0.0);\n  label.pixelOffset = new Cartesian2(17, 0);\n  label.horizontalOrigin = HorizontalOrigin.LEFT;\n  label.font = \"16px sans-serif\";\n  label.style = LabelStyle.FILL_AND_OUTLINE;\n  return label;\n}\n\nfunction createDefaultPolyline(color) {\n  const polyline = new PolylineGraphics();\n  polyline.width = 4;\n  polyline.material = new PolylineOutlineMaterialProperty();\n  polyline.material.color = defined(color) ? color : Color.RED;\n  polyline.material.outlineWidth = 2;\n  polyline.material.outlineColor = Color.BLACK;\n  return polyline;\n}\n\n// This is a list of the Optional Description Information:\n//  <cmt> GPS comment of the waypoint\n//  <desc> Descriptive description of the waypoint\n//  <src> Source of the waypoint data\n//  <type> Type (category) of waypoint\nconst descriptiveInfoTypes = {\n  time: {\n    text: \"Time\",\n    tag: \"time\",\n  },\n  comment: {\n    text: \"Comment\",\n    tag: \"cmt\",\n  },\n  description: {\n    text: \"Description\",\n    tag: \"desc\",\n  },\n  source: {\n    text: \"Source\",\n    tag: \"src\",\n  },\n  number: {\n    text: \"GPS track/route number\",\n    tag: \"number\",\n  },\n  type: {\n    text: \"Type\",\n    tag: \"type\",\n  },\n};\n\nlet scratchDiv;\nif (typeof document !== \"undefined\") {\n  scratchDiv = document.createElement(\"div\");\n}\nfunction processDescription(node, entity) {\n  let i;\n\n  let text = \"\";\n  const infoTypeNames = Object.keys(descriptiveInfoTypes);\n  const length = infoTypeNames.length;\n  for (i = 0; i < length; i++) {\n    const infoTypeName = infoTypeNames[i];\n    const infoType = descriptiveInfoTypes[infoTypeName];\n    infoType.value = queryStringValue(node, infoType.tag, namespaces.gpx) ?? \"\";\n    if (defined(infoType.value) && infoType.value !== \"\") {\n      text = `${text}<p>${infoType.text}: ${infoType.value}</p>`;\n    }\n  }\n\n  if (!defined(text) || text === \"\") {\n    // No description\n    return;\n  }\n\n  // Turns non-explicit links into clickable links.\n  text = autolinker.link(text);\n\n  // Use a temporary div to manipulate the links\n  // so that they open in a new window.\n  scratchDiv.innerHTML = text;\n  const links = scratchDiv.querySelectorAll(\"a\");\n\n  for (i = 0; i < links.length; i++) {\n    links[i].setAttribute(\"target\", \"_blank\");\n  }\n\n  const background = Color.WHITE;\n  const foreground = Color.BLACK;\n  let tmp = '<div class=\"cesium-infoBox-description-lighter\" style=\"';\n  tmp += \"overflow:auto;\";\n  tmp += \"word-wrap:break-word;\";\n  tmp += `background-color:${background.toCssColorString()};`;\n  tmp += `color:${foreground.toCssColorString()};`;\n  tmp += '\">';\n  tmp += `${scratchDiv.innerHTML}</div>`;\n  scratchDiv.innerHTML = \"\";\n\n  // return the final HTML as the description.\n  return tmp;\n}\n\nfunction processWpt(dataSource, geometryNode, entityCollection, options) {\n  const position = readCoordinateFromNode(geometryNode);\n\n  const entity = getOrCreateEntity(geometryNode, entityCollection);\n  entity.position = position;\n\n  // Get billboard image\n  const image = defined(options.waypointImage)\n    ? options.waypointImage\n    : dataSource._pinBuilder.fromMakiIconId(\n        \"marker\",\n        Color.RED,\n        BILLBOARD_SIZE,\n      );\n  entity.billboard = createDefaultBillboard(image);\n\n  const name = queryStringValue(geometryNode, \"name\", namespaces.gpx);\n  entity.name = name;\n  entity.label = createDefaultLabel();\n  entity.label.text = name;\n  entity.description = processDescription(geometryNode, entity);\n\n  if (options.clampToGround) {\n    entity.billboard.heightReference = HeightReference.CLAMP_TO_GROUND;\n    entity.label.heightReference = HeightReference.CLAMP_TO_GROUND;\n  }\n}\n\n// rte represents route - an ordered list of waypoints representing a series of turn points leading to a destination\nfunction processRte(dataSource, geometryNode, entityCollection, options) {\n  const entity = getOrCreateEntity(geometryNode, entityCollection);\n  entity.description = processDescription(geometryNode, entity);\n\n  // a list of waypoint\n  const routePoints = queryNodes(geometryNode, \"rtept\", namespaces.gpx);\n  const coordinateTuples = new Array(routePoints.length);\n  for (let i = 0; i < routePoints.length; i++) {\n    processWpt(dataSource, routePoints[i], entityCollection, options);\n    coordinateTuples[i] = readCoordinateFromNode(routePoints[i]);\n  }\n  entity.polyline = createDefaultPolyline(options.routeColor);\n  if (options.clampToGround) {\n    entity.polyline.clampToGround = true;\n  }\n  entity.polyline.positions = coordinateTuples;\n}\n\n// trk represents a track - an ordered list of points describing a path.\nfunction processTrk(dataSource, geometryNode, entityCollection, options) {\n  const entity = getOrCreateEntity(geometryNode, entityCollection);\n  entity.description = processDescription(geometryNode, entity);\n\n  const trackSegs = queryNodes(geometryNode, \"trkseg\", namespaces.gpx);\n  let positions = [];\n  let times = [];\n  let trackSegInfo;\n  let isTimeDynamic = true;\n  const property = new SampledPositionProperty();\n  for (let i = 0; i < trackSegs.length; i++) {\n    trackSegInfo = processTrkSeg(trackSegs[i]);\n    positions = positions.concat(trackSegInfo.positions);\n    if (trackSegInfo.times.length > 0) {\n      times = times.concat(trackSegInfo.times);\n      property.addSamples(times, positions);\n      // if one track segment is non dynamic the whole track must also be\n      isTimeDynamic = isTimeDynamic && true;\n    } else {\n      isTimeDynamic = false;\n    }\n  }\n  if (isTimeDynamic) {\n    // Assign billboard image\n    const image = defined(options.waypointImage)\n      ? options.waypointImage\n      : dataSource._pinBuilder.fromMakiIconId(\n          \"marker\",\n          Color.RED,\n          BILLBOARD_SIZE,\n        );\n    entity.billboard = createDefaultBillboard(image);\n    entity.position = property;\n    if (options.clampToGround) {\n      entity.billboard.heightReference = HeightReference.CLAMP_TO_GROUND;\n    }\n    entity.availability = new TimeIntervalCollection();\n    entity.availability.addInterval(\n      new TimeInterval({\n        start: times[0],\n        stop: times[times.length - 1],\n      }),\n    );\n  }\n  entity.polyline = createDefaultPolyline(options.trackColor);\n  entity.polyline.positions = positions;\n  if (options.clampToGround) {\n    entity.polyline.clampToGround = true;\n  }\n}\n\nfunction processTrkSeg(node) {\n  const result = {\n    positions: [],\n    times: [],\n  };\n  const trackPoints = queryNodes(node, \"trkpt\", namespaces.gpx);\n  let time;\n  for (let i = 0; i < trackPoints.length; i++) {\n    const position = readCoordinateFromNode(trackPoints[i]);\n    result.positions.push(position);\n\n    time = queryStringValue(trackPoints[i], \"time\", namespaces.gpx);\n    if (defined(time)) {\n      result.times.push(JulianDate.fromIso8601(time));\n    }\n  }\n  return result;\n}\n\n// Processes a metadataType node and returns a metadata object\n// {@link http://www.topografix.com/gpx/1/1/#type_metadataType|GPX Schema}\nfunction processMetadata(node) {\n  const metadataNode = queryFirstNode(node, \"metadata\", namespaces.gpx);\n  if (defined(metadataNode)) {\n    const metadata = {\n      name: queryStringValue(metadataNode, \"name\", namespaces.gpx),\n      desc: queryStringValue(metadataNode, \"desc\", namespaces.gpx),\n      author: getPerson(metadataNode),\n      copyright: getCopyright(metadataNode),\n      link: getLink(metadataNode),\n      time: queryStringValue(metadataNode, \"time\", namespaces.gpx),\n      keywords: queryStringValue(metadataNode, \"keywords\", namespaces.gpx),\n      bounds: getBounds(metadataNode),\n    };\n    if (\n      defined(metadata.name) ||\n      defined(metadata.desc) ||\n      defined(metadata.author) ||\n      defined(metadata.copyright) ||\n      defined(metadata.link) ||\n      defined(metadata.time) ||\n      defined(metadata.keywords) ||\n      defined(metadata.bounds)\n    ) {\n      return metadata;\n    }\n  }\n  return undefined;\n}\n\n// Receives a XML node and returns a personType object, refer to\n// {@link http://www.topografix.com/gpx/1/1/#type_personType|GPX Schema}\nfunction getPerson(node) {\n  const personNode = queryFirstNode(node, \"author\", namespaces.gpx);\n  if (defined(personNode)) {\n    const person = {\n      name: queryStringValue(personNode, \"name\", namespaces.gpx),\n      email: getEmail(personNode),\n      link: getLink(personNode),\n    };\n    if (defined(person.name) || defined(person.email) || defined(person.link)) {\n      return person;\n    }\n  }\n  return undefined;\n}\n\n// Receives a XML node and returns an email address (from emailType), refer to\n// {@link http://www.topografix.com/gpx/1/1/#type_emailType|GPX Schema}\nfunction getEmail(node) {\n  const emailNode = queryFirstNode(node, \"email\", namespaces.gpx);\n  if (defined(emailNode)) {\n    const id = queryStringValue(emailNode, \"id\", namespaces.gpx);\n    const domain = queryStringValue(emailNode, \"domain\", namespaces.gpx);\n    return `${id}@${domain}`;\n  }\n  return undefined;\n}\n\n// Receives a XML node and returns a linkType object, refer to\n// {@link http://www.topografix.com/gpx/1/1/#type_linkType|GPX Schema}\nfunction getLink(node) {\n  const linkNode = queryFirstNode(node, \"link\", namespaces.gpx);\n  if (defined(linkNode)) {\n    const link = {\n      href: queryStringAttribute(linkNode, \"href\"),\n      text: queryStringValue(linkNode, \"text\", namespaces.gpx),\n      mimeType: queryStringValue(linkNode, \"type\", namespaces.gpx),\n    };\n    if (defined(link.href) || defined(link.text) || defined(link.mimeType)) {\n      return link;\n    }\n  }\n  return undefined;\n}\n\n// Receives a XML node and returns a copyrightType object, refer to\n// {@link http://www.topografix.com/gpx/1/1/#type_copyrightType|GPX Schema}\nfunction getCopyright(node) {\n  const copyrightNode = queryFirstNode(node, \"copyright\", namespaces.gpx);\n  if (defined(copyrightNode)) {\n    const copyright = {\n      author: queryStringAttribute(copyrightNode, \"author\"),\n      year: queryStringValue(copyrightNode, \"year\", namespaces.gpx),\n      license: queryStringValue(copyrightNode, \"license\", namespaces.gpx),\n    };\n    if (\n      defined(copyright.author) ||\n      defined(copyright.year) ||\n      defined(copyright.license)\n    ) {\n      return copyright;\n    }\n  }\n  return undefined;\n}\n\n// Receives a XML node and returns a boundsType object, refer to\n// {@link http://www.topografix.com/gpx/1/1/#type_boundsType|GPX Schema}\nfunction getBounds(node) {\n  const boundsNode = queryFirstNode(node, \"bounds\", namespaces.gpx);\n  if (defined(boundsNode)) {\n    const bounds = {\n      minLat: queryNumericValue(boundsNode, \"minlat\", namespaces.gpx),\n      maxLat: queryNumericValue(boundsNode, \"maxlat\", namespaces.gpx),\n      minLon: queryNumericValue(boundsNode, \"minlon\", namespaces.gpx),\n      maxLon: queryNumericValue(boundsNode, \"maxlon\", namespaces.gpx),\n    };\n    if (\n      defined(bounds.minLat) ||\n      defined(bounds.maxLat) ||\n      defined(bounds.minLon) ||\n      defined(bounds.maxLon)\n    ) {\n      return bounds;\n    }\n  }\n  return undefined;\n}\n\nconst complexTypes = {\n  wpt: processWpt,\n  rte: processRte,\n  trk: processTrk,\n};\n\nfunction processGpx(dataSource, node, entityCollection, options) {\n  const complexTypeNames = Object.keys(complexTypes);\n  const complexTypeNamesLength = complexTypeNames.length;\n\n  for (let i = 0; i < complexTypeNamesLength; i++) {\n    const typeName = complexTypeNames[i];\n    const processComplexTypeNode = complexTypes[typeName];\n\n    const childNodes = node.childNodes;\n    const length = childNodes.length;\n    for (let q = 0; q < length; q++) {\n      const child = childNodes[q];\n      if (\n        child.localName === typeName &&\n        namespaces.gpx.indexOf(child.namespaceURI) !== -1\n      ) {\n        processComplexTypeNode(dataSource, child, entityCollection, options);\n      }\n    }\n  }\n}\n\nfunction loadGpx(dataSource, gpx, options) {\n  const entityCollection = dataSource._entityCollection;\n\n  entityCollection.removeAll();\n\n  const element = gpx.documentElement;\n  const version = queryStringAttribute(element, \"version\");\n  const creator = queryStringAttribute(element, \"creator\");\n\n  let name;\n  const metadata = processMetadata(element);\n  if (defined(metadata)) {\n    name = metadata.name;\n  }\n\n  if (element.localName === \"gpx\") {\n    processGpx(dataSource, element, entityCollection, options);\n  } else {\n    console.log(`GPX - Unsupported node: ${element.localName}`);\n  }\n\n  let clock;\n  const availability = entityCollection.computeAvailability();\n\n  let start = availability.start;\n  let stop = availability.stop;\n  const isMinStart = JulianDate.equals(start, Iso8601.MINIMUM_VALUE);\n  const isMaxStop = JulianDate.equals(stop, Iso8601.MAXIMUM_VALUE);\n  if (!isMinStart || !isMaxStop) {\n    let date;\n\n    // If start is min time just start at midnight this morning, local time\n    if (isMinStart) {\n      date = new Date();\n      date.setHours(0, 0, 0, 0);\n      start = JulianDate.fromDate(date);\n    }\n\n    // If stop is max value just stop at midnight tonight, local time\n    if (isMaxStop) {\n      date = new Date();\n      date.setHours(24, 0, 0, 0);\n      stop = JulianDate.fromDate(date);\n    }\n\n    clock = new DataSourceClock();\n    clock.startTime = start;\n    clock.stopTime = stop;\n    clock.currentTime = JulianDate.clone(start);\n    clock.clockRange = ClockRange.LOOP_STOP;\n    clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n    clock.multiplier = Math.round(\n      Math.min(\n        Math.max(JulianDate.secondsDifference(stop, start) / 60, 1),\n        3.15569e7,\n      ),\n    );\n  }\n  let changed = false;\n  if (dataSource._name !== name) {\n    dataSource._name = name;\n    changed = true;\n  }\n\n  if (dataSource._creator !== creator) {\n    dataSource._creator = creator;\n    changed = true;\n  }\n\n  if (metadataChanged(dataSource._metadata, metadata)) {\n    dataSource._metadata = metadata;\n    changed = true;\n  }\n\n  if (dataSource._version !== version) {\n    dataSource._version = version;\n    changed = true;\n  }\n\n  if (clock !== dataSource._clock) {\n    changed = true;\n    dataSource._clock = clock;\n  }\n\n  if (changed) {\n    dataSource._changed.raiseEvent(dataSource);\n  }\n\n  DataSource.setLoading(dataSource, false);\n  return dataSource;\n}\n\nfunction metadataChanged(old, current) {\n  if (!defined(old) && !defined(current)) {\n    return false;\n  } else if (defined(old) && defined(current)) {\n    if (\n      old.name !== current.name ||\n      old.dec !== current.desc ||\n      old.src !== current.src ||\n      old.author !== current.author ||\n      old.copyright !== current.copyright ||\n      old.link !== current.link ||\n      old.time !== current.time ||\n      old.bounds !== current.bounds\n    ) {\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\n\nfunction load(dataSource, entityCollection, data, options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  let promise = data;\n  if (typeof data === \"string\" || data instanceof Resource) {\n    data = Resource.createIfNeeded(data);\n    promise = data.fetchBlob();\n\n    // Add resource credits to our list of credits to display\n    const resourceCredits = dataSource._resourceCredits;\n    const credits = data.credits;\n    if (defined(credits)) {\n      const length = credits.length;\n      for (let i = 0; i < length; i++) {\n        resourceCredits.push(credits[i]);\n      }\n    }\n  }\n\n  return Promise.resolve(promise)\n    .then(function (dataToLoad) {\n      if (dataToLoad instanceof Blob) {\n        return readBlobAsText(dataToLoad).then(function (text) {\n          // There's no official way to validate if a parse was successful.\n          // The following check detects the error on various browsers.\n          // IE raises an exception\n          let gpx;\n          let error;\n          try {\n            gpx = parser.parseFromString(text, \"application/xml\");\n          } catch (e) {\n            error = e.toString();\n          }\n\n          // The parse succeeds on Chrome and Firefox, but the error\n          // handling is different in each.\n          if (\n            defined(error) ||\n            gpx.body ||\n            gpx.documentElement.tagName === \"parsererror\"\n          ) {\n            // Firefox has error information as the firstChild nodeValue.\n            let msg = defined(error)\n              ? error\n              : gpx.documentElement.firstChild.nodeValue;\n\n            // Chrome has it in the body text.\n            if (!msg) {\n              msg = gpx.body.innerText;\n            }\n\n            // Return the error\n            throw new RuntimeError(msg);\n          }\n          return loadGpx(dataSource, gpx, options);\n        });\n      }\n      return loadGpx(dataSource, dataToLoad, options);\n    })\n    .catch(function (error) {\n      dataSource._error.raiseEvent(dataSource, error);\n      console.log(error);\n      return Promise.reject(error);\n    });\n}\n\n/**\n * A {@link DataSource} which processes the GPS Exchange Format (GPX).\n *\n * @alias GpxDataSource\n * @constructor\n *\n * @see {@link http://www.topografix.com/gpx.asp|Topografix GPX Standard}\n * @see {@link http://www.topografix.com/gpx/1/1/|Topografix GPX Documentation}\n *\n * @demo {@link http://sandcastle.cesium.com/index.html?id=gpx}\n *\n * @example\n * const viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.dataSources.add(Cesium.GpxDataSource.load('../../SampleData/track.gpx'));\n */\nfunction GpxDataSource() {\n  this._changed = new Event();\n  this._error = new Event();\n  this._loading = new Event();\n  this._clock = undefined;\n  this._entityCollection = new EntityCollection(this);\n  this._entityCluster = new EntityCluster();\n  this._name = undefined;\n  this._version = undefined;\n  this._creator = undefined;\n  this._metadata = undefined;\n  this._isLoading = false;\n  this._pinBuilder = new PinBuilder();\n}\n\n/**\n * Creates a Promise to a new instance loaded with the provided GPX data.\n *\n * @param {string|Document|Blob} data A url, parsed GPX document, or Blob containing binary GPX data.\n * @param {object} [options] An object with the following properties:\n * @param {boolean} [options.clampToGround] True if the symbols should be rendered at the same height as the terrain\n * @param {string} [options.waypointImage] Image to use for waypoint billboards.\n * @param {string} [options.trackImage] Image to use for track billboards.\n * @param {string} [options.trackColor] Color to use for track lines.\n * @param {string} [options.routeColor] Color to use for route lines.\n * @returns {Promise<GpxDataSource>} A promise that will resolve to a new GpxDataSource instance once the gpx is loaded.\n */\nGpxDataSource.load = function (data, options) {\n  return new GpxDataSource().load(data, options);\n};\n\nObject.defineProperties(GpxDataSource.prototype, {\n  /**\n   * Gets a human-readable name for this instance.\n   * This will be automatically be set to the GPX document name on load.\n   * @memberof GpxDataSource.prototype\n   * @type {string}\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n  /**\n   * Gets the version of the GPX Schema in use.\n   * @memberof GpxDataSource.prototype\n   * @type {string}\n   */\n  version: {\n    get: function () {\n      return this._version;\n    },\n  },\n  /**\n   * Gets the creator of the GPX document.\n   * @memberof GpxDataSource.prototype\n   * @type {string}\n   */\n  creator: {\n    get: function () {\n      return this._creator;\n    },\n  },\n  /**\n   * Gets an object containing metadata about the GPX file.\n   * @memberof GpxDataSource.prototype\n   * @type {object}\n   */\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n  },\n  /**\n   * Gets the clock settings defined by the loaded GPX. This represents the total\n   * availability interval for all time-dynamic data. If the GPX does not contain\n   * time-dynamic data, this value is undefined.\n   * @memberof GpxDataSource.prototype\n   * @type {DataSourceClock}\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n  },\n  /**\n   * Gets the collection of {@link Entity} instances.\n   * @memberof GpxDataSource.prototype\n   * @type {EntityCollection}\n   */\n  entities: {\n    get: function () {\n      return this._entityCollection;\n    },\n  },\n  /**\n   * Gets a value indicating if the data source is currently loading data.\n   * @memberof GpxDataSource.prototype\n   * @type {boolean}\n   */\n  isLoading: {\n    get: function () {\n      return this._isLoading;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the underlying data changes.\n   * @memberof GpxDataSource.prototype\n   * @type {Event}\n   */\n  changedEvent: {\n    get: function () {\n      return this._changed;\n    },\n  },\n  /**\n   * Gets an event that will be raised if an error is encountered during processing.\n   * @memberof GpxDataSource.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: function () {\n      return this._error;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the data source either starts or stops loading.\n   * @memberof GpxDataSource.prototype\n   * @type {Event}\n   */\n  loadingEvent: {\n    get: function () {\n      return this._loading;\n    },\n  },\n  /**\n   * Gets whether or not this data source should be displayed.\n   * @memberof GpxDataSource.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._entityCollection.show;\n    },\n    set: function (value) {\n      this._entityCollection.show = value;\n    },\n  },\n\n  /**\n   * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n   *\n   * @memberof GpxDataSource.prototype\n   * @type {EntityCluster}\n   */\n  clustering: {\n    get: function () {\n      return this._entityCluster;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value must be defined.\");\n      }\n      //>>includeEnd('debug');\n      this._entityCluster = value;\n    },\n  },\n});\n\n/**\n * Updates the data source to the provided time.  This function is optional and\n * is not required to be implemented.  It is provided for data sources which\n * retrieve data based on the current animation time or scene state.\n * If implemented, update will be called by {@link DataSourceDisplay} once a frame.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nGpxDataSource.prototype.update = function (time) {\n  return true;\n};\n\n/**\n * Asynchronously loads the provided GPX data, replacing any existing data.\n *\n * @param {string|Document|Blob} data A url, parsed GPX document, or Blob containing binary GPX data or a parsed GPX document.\n * @param {object} [options] An object with the following properties:\n * @param {boolean} [options.clampToGround] True if the symbols should be rendered at the same height as the terrain\n * @param {string} [options.waypointImage] Image to use for waypoint billboards.\n * @param {string} [options.trackImage] Image to use for track billboards.\n * @param {string} [options.trackColor] Color to use for track lines.\n * @param {string} [options.routeColor] Color to use for route lines.\n * @returns {Promise<GpxDataSource>} A promise that will resolve to this instances once the GPX is loaded.\n */\nGpxDataSource.prototype.load = function (data, options) {\n  if (!defined(data)) {\n    throw new DeveloperError(\"data is required.\");\n  }\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  DataSource.setLoading(this, true);\n  const oldName = this._name;\n  const that = this;\n  return load(this, this._entityCollection, data, options)\n    .then(function () {\n      let clock;\n\n      const availability = that._entityCollection.computeAvailability();\n\n      let start = availability.start;\n      let stop = availability.stop;\n      const isMinStart = JulianDate.equals(start, Iso8601.MINIMUM_VALUE);\n      const isMaxStop = JulianDate.equals(stop, Iso8601.MAXIMUM_VALUE);\n      if (!isMinStart || !isMaxStop) {\n        let date;\n\n        // If start is min time just start at midnight this morning, local time\n        if (isMinStart) {\n          date = new Date();\n          date.setHours(0, 0, 0, 0);\n          start = JulianDate.fromDate(date);\n        }\n\n        // If stop is max value just stop at midnight tonight, local time\n        if (isMaxStop) {\n          date = new Date();\n          date.setHours(24, 0, 0, 0);\n          stop = JulianDate.fromDate(date);\n        }\n\n        clock = new DataSourceClock();\n        clock.startTime = start;\n        clock.stopTime = stop;\n        clock.currentTime = JulianDate.clone(start);\n        clock.clockRange = ClockRange.LOOP_STOP;\n        clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n        clock.multiplier = Math.round(\n          Math.min(\n            Math.max(JulianDate.secondsDifference(stop, start) / 60, 1),\n            3.15569e7,\n          ),\n        );\n      }\n\n      let changed = false;\n      if (clock !== that._clock) {\n        that._clock = clock;\n        changed = true;\n      }\n\n      if (oldName !== that._name) {\n        changed = true;\n      }\n\n      if (changed) {\n        that._changed.raiseEvent(that);\n      }\n\n      DataSource.setLoading(that, false);\n\n      return that;\n    })\n    .catch(function (error) {\n      DataSource.setLoading(that, false);\n      that._error.raiseEvent(that, error);\n      console.log(error);\n      return Promise.reject(error);\n    });\n};\n\nexport default GpxDataSource;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nconst defaultColor = Color.WHITE;\nconst defaultCellAlpha = 0.1;\nconst defaultLineCount = new Cartesian2(8, 8);\nconst defaultLineOffset = new Cartesian2(0, 0);\nconst defaultLineThickness = new Cartesian2(1, 1);\n\n/**\n * A {@link MaterialProperty} that maps to grid {@link Material} uniforms.\n * @alias GridMaterialProperty\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the grid {@link Color}.\n * @param {Property|number} [options.cellAlpha=0.1] A numeric Property specifying cell alpha values.\n * @param {Property|Cartesian2} [options.lineCount=new Cartesian2(8, 8)] A {@link Cartesian2} Property specifying the number of grid lines along each axis.\n * @param {Property|Cartesian2} [options.lineThickness=new Cartesian2(1.0, 1.0)] A {@link Cartesian2} Property specifying the thickness of grid lines along each axis.\n * @param {Property|Cartesian2} [options.lineOffset=new Cartesian2(0.0, 0.0)] A {@link Cartesian2} Property specifying starting offset of grid lines along each axis.\n *\n * @constructor\n */\nfunction GridMaterialProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._cellAlpha = undefined;\n  this._cellAlphaSubscription = undefined;\n  this._lineCount = undefined;\n  this._lineCountSubscription = undefined;\n  this._lineThickness = undefined;\n  this._lineThicknessSubscription = undefined;\n  this._lineOffset = undefined;\n  this._lineOffsetSubscription = undefined;\n\n  this.color = options.color;\n  this.cellAlpha = options.cellAlpha;\n  this.lineCount = options.lineCount;\n  this.lineThickness = options.lineThickness;\n  this.lineOffset = options.lineOffset;\n}\n\nObject.defineProperties(GridMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof GridMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._color) &&\n        Property.isConstant(this._cellAlpha) &&\n        Property.isConstant(this._lineCount) &&\n        Property.isConstant(this._lineThickness) &&\n        Property.isConstant(this._lineOffset)\n      );\n    },\n  },\n\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof GridMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the Property specifying the grid {@link Color}.\n   * @memberof GridMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the numeric Property specifying cell alpha values.\n   * @memberof GridMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default 0.1\n   */\n  cellAlpha: createPropertyDescriptor(\"cellAlpha\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the number of grid lines along each axis.\n   * @memberof GridMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default new Cartesian2(8.0, 8.0)\n   */\n  lineCount: createPropertyDescriptor(\"lineCount\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the thickness of grid lines along each axis.\n   * @memberof GridMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default new Cartesian2(1.0, 1.0)\n   */\n  lineThickness: createPropertyDescriptor(\"lineThickness\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the starting offset of grid lines along each axis.\n   * @memberof GridMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default new Cartesian2(0.0, 0.0)\n   */\n  lineOffset: createPropertyDescriptor(\"lineOffset\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nGridMaterialProperty.prototype.getType = function (time) {\n  return \"Grid\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nGridMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.color = Property.getValueOrClonedDefault(\n    this._color,\n    time,\n    defaultColor,\n    result.color,\n  );\n  result.cellAlpha = Property.getValueOrDefault(\n    this._cellAlpha,\n    time,\n    defaultCellAlpha,\n  );\n  result.lineCount = Property.getValueOrClonedDefault(\n    this._lineCount,\n    time,\n    defaultLineCount,\n    result.lineCount,\n  );\n  result.lineThickness = Property.getValueOrClonedDefault(\n    this._lineThickness,\n    time,\n    defaultLineThickness,\n    result.lineThickness,\n  );\n  result.lineOffset = Property.getValueOrClonedDefault(\n    this._lineOffset,\n    time,\n    defaultLineOffset,\n    result.lineOffset,\n  );\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nGridMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof GridMaterialProperty && //\n      Property.equals(this._color, other._color) && //\n      Property.equals(this._cellAlpha, other._cellAlpha) && //\n      Property.equals(this._lineCount, other._lineCount) && //\n      Property.equals(this._lineThickness, other._lineThickness) && //\n      Property.equals(this._lineOffset, other._lineOffset))\n  );\n};\nexport default GridMaterialProperty;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport HeightReference, {\n  isHeightReferenceClamp,\n} from \"../Scene/HeightReference.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport TerrainOffsetProperty from \"./TerrainOffsetProperty.js\";\n\nconst defaultZIndex = new ConstantProperty(0);\n\n/**\n * An abstract class for updating ground geometry entities.\n * @constructor\n * @alias GroundGeometryUpdater\n * @param {object} options An object with the following properties:\n * @param {Entity} options.entity The entity containing the geometry to be visualized.\n * @param {Scene} options.scene The scene where visualization is taking place.\n * @param {object} options.geometryOptions Options for the geometry\n * @param {string} options.geometryPropertyName The geometry property name\n * @param {string[]} options.observedPropertyNames The entity properties this geometry cares about\n */\nfunction GroundGeometryUpdater(options) {\n  GeometryUpdater.call(this, options);\n\n  this._zIndex = 0;\n  this._terrainOffsetProperty = undefined;\n}\n\nif (defined(Object.create)) {\n  GroundGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n  GroundGeometryUpdater.prototype.constructor = GroundGeometryUpdater;\n}\n\nObject.defineProperties(GroundGeometryUpdater.prototype, {\n  /**\n   * Gets the zindex\n   * @type {number}\n   * @memberof GroundGeometryUpdater.prototype\n   * @readonly\n   */\n  zIndex: {\n    get: function () {\n      return this._zIndex;\n    },\n  },\n\n  /**\n   * Gets the terrain offset property\n   * @type {TerrainOffsetProperty}\n   * @memberof GroundGeometryUpdater.prototype\n   * @readonly\n   * @private\n   */\n  terrainOffsetProperty: {\n    get: function () {\n      return this._terrainOffsetProperty;\n    },\n  },\n});\n\nGroundGeometryUpdater.prototype._isOnTerrain = function (entity, geometry) {\n  return (\n    this._fillEnabled &&\n    !defined(geometry.height) &&\n    !defined(geometry.extrudedHeight) &&\n    GroundPrimitive.isSupported(this._scene)\n  );\n};\n\nGroundGeometryUpdater.prototype._getIsClosed = function (options) {\n  const height = options.height;\n  const extrudedHeight = options.extrudedHeight;\n  return height === 0 || (defined(extrudedHeight) && extrudedHeight !== height);\n};\n\nGroundGeometryUpdater.prototype._computeCenter =\n  DeveloperError.throwInstantiationError;\n\nGroundGeometryUpdater.prototype._onEntityPropertyChanged = function (\n  entity,\n  propertyName,\n  newValue,\n  oldValue,\n) {\n  GeometryUpdater.prototype._onEntityPropertyChanged.call(\n    this,\n    entity,\n    propertyName,\n    newValue,\n    oldValue,\n  );\n  if (this._observedPropertyNames.indexOf(propertyName) === -1) {\n    return;\n  }\n\n  const geometry = this._entity[this._geometryPropertyName];\n  if (!defined(geometry)) {\n    return;\n  }\n  if (\n    defined(geometry.zIndex) &&\n    (defined(geometry.height) || defined(geometry.extrudedHeight))\n  ) {\n    oneTimeWarning(oneTimeWarning.geometryZIndex);\n  }\n\n  this._zIndex = geometry.zIndex ?? defaultZIndex;\n\n  if (defined(this._terrainOffsetProperty)) {\n    this._terrainOffsetProperty.destroy();\n    this._terrainOffsetProperty = undefined;\n  }\n\n  const heightReferenceProperty = geometry.heightReference;\n  const extrudedHeightReferenceProperty = geometry.extrudedHeightReference;\n\n  if (\n    defined(heightReferenceProperty) ||\n    defined(extrudedHeightReferenceProperty)\n  ) {\n    const centerPosition = new CallbackProperty(\n      this._computeCenter.bind(this),\n      !this._dynamic,\n    );\n    this._terrainOffsetProperty = new TerrainOffsetProperty(\n      this._scene,\n      centerPosition,\n      heightReferenceProperty,\n      extrudedHeightReferenceProperty,\n    );\n  }\n};\n\n/**\n * Destroys and resources used by the object.  Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nGroundGeometryUpdater.prototype.destroy = function () {\n  if (defined(this._terrainOffsetProperty)) {\n    this._terrainOffsetProperty.destroy();\n    this._terrainOffsetProperty = undefined;\n  }\n\n  GeometryUpdater.prototype.destroy.call(this);\n};\n\n/**\n * @private\n */\nGroundGeometryUpdater.getGeometryHeight = function (height, heightReference) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"heightReference\", heightReference);\n  //>>includeEnd('debug');\n  if (!defined(height)) {\n    if (heightReference !== HeightReference.NONE) {\n      oneTimeWarning(oneTimeWarning.geometryHeightReference);\n    }\n    return;\n  }\n\n  if (!isHeightReferenceClamp(heightReference)) {\n    return height;\n  }\n\n  return 0.0;\n};\n\n/**\n * @private\n */\nGroundGeometryUpdater.getGeometryExtrudedHeight = function (\n  extrudedHeight,\n  extrudedHeightReference,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"extrudedHeightReference\", extrudedHeightReference);\n  //>>includeEnd('debug');\n  if (!defined(extrudedHeight)) {\n    if (extrudedHeightReference !== HeightReference.NONE) {\n      oneTimeWarning(oneTimeWarning.geometryExtrudedHeightReference);\n    }\n    return;\n  }\n  if (!isHeightReferenceClamp(extrudedHeightReference)) {\n    return extrudedHeight;\n  }\n\n  return GroundGeometryUpdater.CLAMP_TO_GROUND;\n};\n\n/**\n * @private\n */\nGroundGeometryUpdater.CLAMP_TO_GROUND = \"clamp\";\n\n/**\n * @private\n */\nGroundGeometryUpdater.computeGeometryOffsetAttribute = function (\n  height,\n  heightReference,\n  extrudedHeight,\n  extrudedHeightReference,\n) {\n  if (!defined(height) || !defined(heightReference)) {\n    heightReference = HeightReference.NONE;\n  }\n  if (!defined(extrudedHeight) || !defined(extrudedHeightReference)) {\n    extrudedHeightReference = HeightReference.NONE;\n  }\n  let n = 0;\n  if (heightReference !== HeightReference.NONE) {\n    n++;\n  }\n  if (extrudedHeightReference === HeightReference.RELATIVE_TO_GROUND) {\n    n++;\n  }\n  if (n === 2) {\n    return GeometryOffsetAttribute.ALL;\n  }\n  if (n === 1) {\n    return GeometryOffsetAttribute.TOP;\n  }\n\n  return undefined;\n};\nexport default GroundGeometryUpdater;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nconst defaultRepeat = new Cartesian2(1, 1);\nconst defaultTransparent = false;\nconst defaultColor = Color.WHITE;\n\n/**\n * A {@link MaterialProperty} that maps to image {@link Material} uniforms.\n * @alias ImageMaterialProperty\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|string|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} [options.image] A Property specifying the Image, URL, Canvas, or Video.\n * @param {Property|Cartesian2} [options.repeat=new Cartesian2(1.0, 1.0)] A {@link Cartesian2} Property specifying the number of times the image repeats in each direction.\n * @param {Property|Color} [options.color=Color.WHITE] The color applied to the image\n * @param {Property|boolean} [options.transparent=false] Set to true when the image has transparency (for example, when a png has transparent sections)\n */\nfunction ImageMaterialProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._image = undefined;\n  this._imageSubscription = undefined;\n  this._repeat = undefined;\n  this._repeatSubscription = undefined;\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._transparent = undefined;\n  this._transparentSubscription = undefined;\n\n  this.image = options.image;\n  this.repeat = options.repeat;\n  this.color = options.color;\n  this.transparent = options.transparent;\n}\n\nObject.defineProperties(ImageMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof ImageMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._image) && Property.isConstant(this._repeat)\n      );\n    },\n  },\n\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof ImageMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the Property specifying Image, URL, Canvas, or Video to use.\n   * @memberof ImageMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  image: createPropertyDescriptor(\"image\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the number of times the image repeats in each direction.\n   * @memberof ImageMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default new Cartesian2(1, 1)\n   */\n  repeat: createPropertyDescriptor(\"repeat\"),\n\n  /**\n   * Gets or sets the Color Property specifying the desired color applied to the image.\n   * @memberof ImageMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the Boolean Property specifying whether the image has transparency\n   * @memberof ImageMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  transparent: createPropertyDescriptor(\"transparent\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nImageMaterialProperty.prototype.getType = function (time) {\n  return \"Image\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nImageMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  if (!defined(result)) {\n    result = {};\n  }\n\n  result.image = Property.getValueOrUndefined(this._image, time);\n  result.repeat = Property.getValueOrClonedDefault(\n    this._repeat,\n    time,\n    defaultRepeat,\n    result.repeat,\n  );\n  result.color = Property.getValueOrClonedDefault(\n    this._color,\n    time,\n    defaultColor,\n    result.color,\n  );\n  if (Property.getValueOrDefault(this._transparent, time, defaultTransparent)) {\n    result.color.alpha = Math.min(0.99, result.color.alpha);\n  }\n\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nImageMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof ImageMaterialProperty &&\n      Property.equals(this._image, other._image) &&\n      Property.equals(this._repeat, other._repeat) &&\n      Property.equals(this._color, other._color) &&\n      Property.equals(this._transparent, other._transparent))\n  );\n};\nexport default ImageMaterialProperty;\n","/**\n * Representation of <Camera> from KML\n * @alias KmlCamera\n * @constructor\n *\n * @param {Cartesian3} position camera position\n * @param {HeadingPitchRoll} headingPitchRoll camera orientation\n */\nfunction KmlCamera(position, headingPitchRoll) {\n  this.position = position;\n  this.headingPitchRoll = headingPitchRoll;\n}\nexport default KmlCamera;\n","import ArcType from \"../Core/ArcType.js\";\nimport AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport ClockRange from \"../Core/ClockRange.js\";\nimport ClockStep from \"../Core/ClockStep.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defer from \"../Core/defer.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport getExtensionFromUri from \"../Core/getExtensionFromUri.js\";\nimport getFilenameFromUri from \"../Core/getFilenameFromUri.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport HeadingPitchRange from \"../Core/HeadingPitchRange.js\";\nimport HeadingPitchRoll from \"../Core/HeadingPitchRoll.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport objectToQuery from \"../Core/objectToQuery.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PinBuilder from \"../Core/PinBuilder.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport queryToObject from \"../Core/queryToObject.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport LabelStyle from \"../Scene/LabelStyle.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport Autolinker from \"autolinker\";\nimport Uri from \"urijs\";\nimport {\n  configure,\n  BlobReader,\n  Data64URIWriter,\n  TextWriter,\n  ZipReader,\n} from \"@zip.js/zip.js/lib/zip-core.js\";\nimport getElement from \"./getElement.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport DataSource from \"./DataSource.js\";\nimport DataSourceClock from \"./DataSourceClock.js\";\nimport Entity from \"./Entity.js\";\nimport EntityCluster from \"./EntityCluster.js\";\nimport EntityCollection from \"./EntityCollection.js\";\nimport KmlCamera from \"./KmlCamera.js\";\nimport KmlLookAt from \"./KmlLookAt.js\";\nimport KmlTour from \"./KmlTour.js\";\nimport KmlTourFlyTo from \"./KmlTourFlyTo.js\";\nimport KmlTourWait from \"./KmlTourWait.js\";\nimport LabelGraphics from \"./LabelGraphics.js\";\nimport PathGraphics from \"./PathGraphics.js\";\nimport PolygonGraphics from \"./PolygonGraphics.js\";\nimport PolylineGraphics from \"./PolylineGraphics.js\";\nimport PositionPropertyArray from \"./PositionPropertyArray.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport ReferenceProperty from \"./ReferenceProperty.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport ScaledPositionProperty from \"./ScaledPositionProperty.js\";\nimport TimeIntervalCollectionProperty from \"./TimeIntervalCollectionProperty.js\";\nimport WallGraphics from \"./WallGraphics.js\";\n\n//This is by no means an exhaustive list of MIME types.\n//The purpose of this list is to be able to accurately identify content embedded\n//in KMZ files. Eventually, we can make this configurable by the end user so they can add\n//there own content types if they have KMZ files that require it.\nconst MimeTypes = {\n  avi: \"video/x-msvideo\",\n  bmp: \"image/bmp\",\n  bz2: \"application/x-bzip2\",\n  chm: \"application/vnd.ms-htmlhelp\",\n  css: \"text/css\",\n  csv: \"text/csv\",\n  doc: \"application/msword\",\n  dvi: \"application/x-dvi\",\n  eps: \"application/postscript\",\n  flv: \"video/x-flv\",\n  gif: \"image/gif\",\n  gz: \"application/x-gzip\",\n  htm: \"text/html\",\n  html: \"text/html\",\n  ico: \"image/vnd.microsoft.icon\",\n  jnlp: \"application/x-java-jnlp-file\",\n  jpeg: \"image/jpeg\",\n  jpg: \"image/jpeg\",\n  m3u: \"audio/x-mpegurl\",\n  m4v: \"video/mp4\",\n  mathml: \"application/mathml+xml\",\n  mid: \"audio/midi\",\n  midi: \"audio/midi\",\n  mov: \"video/quicktime\",\n  mp3: \"audio/mpeg\",\n  mp4: \"video/mp4\",\n  mp4v: \"video/mp4\",\n  mpeg: \"video/mpeg\",\n  mpg: \"video/mpeg\",\n  odp: \"application/vnd.oasis.opendocument.presentation\",\n  ods: \"application/vnd.oasis.opendocument.spreadsheet\",\n  odt: \"application/vnd.oasis.opendocument.text\",\n  ogg: \"application/ogg\",\n  pdf: \"application/pdf\",\n  png: \"image/png\",\n  pps: \"application/vnd.ms-powerpoint\",\n  ppt: \"application/vnd.ms-powerpoint\",\n  ps: \"application/postscript\",\n  qt: \"video/quicktime\",\n  rdf: \"application/rdf+xml\",\n  rss: \"application/rss+xml\",\n  rtf: \"application/rtf\",\n  svg: \"image/svg+xml\",\n  swf: \"application/x-shockwave-flash\",\n  text: \"text/plain\",\n  tif: \"image/tiff\",\n  tiff: \"image/tiff\",\n  txt: \"text/plain\",\n  wav: \"audio/x-wav\",\n  wma: \"audio/x-ms-wma\",\n  wmv: \"video/x-ms-wmv\",\n  xml: \"application/xml\",\n  zip: \"application/zip\",\n\n  detectFromFilename: function (filename) {\n    let ext = filename.toLowerCase();\n    ext = getExtensionFromUri(ext);\n    return MimeTypes[ext];\n  },\n};\n\nlet parser;\nif (typeof DOMParser !== \"undefined\") {\n  parser = new DOMParser();\n}\n\nconst autolinker = new Autolinker({\n  stripPrefix: false,\n  email: false,\n  replaceFn: function (match) {\n    //Prevent matching of non-explicit urls.\n    //i.e. foo.id won't match but http://foo.id will\n    return match.urlMatchType === \"scheme\" || match.urlMatchType === \"www\";\n  },\n});\n\nconst BILLBOARD_SIZE = 32;\n\nconst BILLBOARD_NEAR_DISTANCE = 2414016;\nconst BILLBOARD_NEAR_RATIO = 1.0;\nconst BILLBOARD_FAR_DISTANCE = 1.6093e7;\nconst BILLBOARD_FAR_RATIO = 0.1;\n\nconst kmlNamespaces = [\n  null,\n  undefined,\n  \"http://www.opengis.net/kml/2.2\",\n  \"http://earth.google.com/kml/2.2\",\n  \"http://earth.google.com/kml/2.1\",\n  \"http://earth.google.com/kml/2.0\",\n];\nconst gxNamespaces = [\"http://www.google.com/kml/ext/2.2\"];\nconst atomNamespaces = [\"http://www.w3.org/2005/Atom\"];\nconst namespaces = {\n  kml: kmlNamespaces,\n  gx: gxNamespaces,\n  atom: atomNamespaces,\n  kmlgx: kmlNamespaces.concat(gxNamespaces),\n};\n\n// Ensure Specs/Data/KML/unsupported.kml is kept up to date with these supported types\nconst featureTypes = {\n  Document: processDocument,\n  Folder: processFolder,\n  Placemark: processPlacemark,\n  NetworkLink: processNetworkLink,\n  GroundOverlay: processGroundOverlay,\n  PhotoOverlay: processUnsupportedFeature,\n  ScreenOverlay: processScreenOverlay,\n  Tour: processTour,\n};\n\nfunction DeferredLoading(dataSource) {\n  this._dataSource = dataSource;\n  this._deferred = defer();\n  this._stack = [];\n  this._promises = [];\n  this._timeoutSet = false;\n  this._used = false;\n\n  this._started = 0;\n  this._timeThreshold = 1000; // Initial load is 1 second\n}\n\nObject.defineProperties(DeferredLoading.prototype, {\n  dataSource: {\n    get: function () {\n      return this._dataSource;\n    },\n  },\n});\n\nDeferredLoading.prototype.addNodes = function (nodes, processingData) {\n  this._stack.push({\n    nodes: nodes,\n    index: 0,\n    processingData: processingData,\n  });\n  this._used = true;\n};\n\nDeferredLoading.prototype.addPromise = function (promise) {\n  this._promises.push(promise);\n};\n\nDeferredLoading.prototype.wait = function () {\n  // Case where we had a non-document/folder as the root\n  const deferred = this._deferred;\n  if (!this._used) {\n    deferred.resolve();\n  }\n\n  return Promise.all([deferred.promise, Promise.all(this._promises)]);\n};\n\nDeferredLoading.prototype.process = function () {\n  const isFirstCall = this._stack.length === 1;\n  if (isFirstCall) {\n    this._started = KmlDataSource._getTimestamp();\n  }\n\n  return this._process(isFirstCall);\n};\n\nDeferredLoading.prototype._giveUpTime = function () {\n  if (this._timeoutSet) {\n    // Timeout was already set so just return\n    return;\n  }\n\n  this._timeoutSet = true;\n  this._timeThreshold = 50; // After the first load lower threshold to 0.5 seconds\n  const that = this;\n  setTimeout(function () {\n    that._timeoutSet = false;\n    that._started = KmlDataSource._getTimestamp();\n    that._process(true);\n  }, 0);\n};\n\nDeferredLoading.prototype._nextNode = function () {\n  const stack = this._stack;\n  const top = stack[stack.length - 1];\n  const index = top.index;\n  const nodes = top.nodes;\n  if (index === nodes.length) {\n    return;\n  }\n  ++top.index;\n\n  return nodes[index];\n};\n\nDeferredLoading.prototype._pop = function () {\n  const stack = this._stack;\n  stack.pop();\n\n  // Return false if we are done\n  if (stack.length === 0) {\n    this._deferred.resolve();\n    return false;\n  }\n\n  return true;\n};\n\nDeferredLoading.prototype._process = function (isFirstCall) {\n  const dataSource = this.dataSource;\n  const processingData = this._stack[this._stack.length - 1].processingData;\n\n  let child = this._nextNode();\n  while (defined(child)) {\n    const featureProcessor = featureTypes[child.localName];\n    if (\n      defined(featureProcessor) &&\n      (namespaces.kml.indexOf(child.namespaceURI) !== -1 ||\n        namespaces.gx.indexOf(child.namespaceURI) !== -1)\n    ) {\n      featureProcessor(dataSource, child, processingData, this);\n\n      // Give up time and continue loading later\n      if (\n        this._timeoutSet ||\n        KmlDataSource._getTimestamp() > this._started + this._timeThreshold\n      ) {\n        this._giveUpTime();\n        return;\n      }\n    }\n\n    child = this._nextNode();\n  }\n\n  // If we are a recursive call from a subfolder, just return so the parent folder can continue processing\n  // If we aren't then make another call to processNodes because there is stuff still left in the queue\n  if (this._pop() && isFirstCall) {\n    this._process(true);\n  }\n};\n\nfunction isZipFile(blob) {\n  const magicBlob = blob.slice(0, Math.min(4, blob.size));\n  const deferred = defer();\n  const reader = new FileReader();\n  reader.addEventListener(\"load\", function () {\n    deferred.resolve(\n      new DataView(reader.result).getUint32(0, false) === 0x504b0304,\n    );\n  });\n  reader.addEventListener(\"error\", function () {\n    deferred.reject(reader.error);\n  });\n  reader.readAsArrayBuffer(magicBlob);\n  return deferred.promise;\n}\n\nfunction readBlobAsText(blob) {\n  const deferred = defer();\n  const reader = new FileReader();\n  reader.addEventListener(\"load\", function () {\n    deferred.resolve(reader.result);\n  });\n  reader.addEventListener(\"error\", function () {\n    deferred.reject(reader.error);\n  });\n  reader.readAsText(blob);\n  return deferred.promise;\n}\n\nfunction insertNamespaces(text) {\n  const namespaceMap = {\n    xsi: \"http://www.w3.org/2001/XMLSchema-instance\",\n  };\n  let firstPart, lastPart, reg, declaration;\n\n  for (const key in namespaceMap) {\n    if (namespaceMap.hasOwnProperty(key)) {\n      reg = RegExp(`[< ]${key}:`);\n      declaration = `xmlns:${key}=`;\n      if (reg.test(text) && text.indexOf(declaration) === -1) {\n        if (!defined(firstPart)) {\n          firstPart = text.substr(0, text.indexOf(\"<kml\") + 4);\n          lastPart = text.substr(firstPart.length);\n        }\n        firstPart += ` ${declaration}\"${namespaceMap[key]}\"`;\n      }\n    }\n  }\n\n  if (defined(firstPart)) {\n    text = firstPart + lastPart;\n  }\n\n  return text;\n}\n\nfunction removeDuplicateNamespaces(text) {\n  let index = text.indexOf(\"xmlns:\");\n  const endDeclaration = text.indexOf(\">\", index);\n  let namespace, startIndex, endIndex;\n\n  while (index !== -1 && index < endDeclaration) {\n    namespace = text.slice(index, text.indexOf('\"', index));\n    startIndex = index;\n    index = text.indexOf(namespace, index + 1);\n    if (index !== -1) {\n      endIndex = text.indexOf('\"', text.indexOf('\"', index) + 1);\n      text = text.slice(0, index - 1) + text.slice(endIndex + 1, text.length);\n      index = text.indexOf(\"xmlns:\", startIndex - 1);\n    } else {\n      index = text.indexOf(\"xmlns:\", startIndex + 1);\n    }\n  }\n\n  return text;\n}\n\nasync function loadXmlFromZip(entry, uriResolver) {\n  let text = await entry.getData(new TextWriter());\n  text = insertNamespaces(text);\n  text = removeDuplicateNamespaces(text);\n  uriResolver.kml = parser.parseFromString(text, \"application/xml\");\n}\n\nasync function loadDataUriFromZip(entry, uriResolver) {\n  const mimeType =\n    MimeTypes.detectFromFilename(entry.filename) ?? \"application/octet-stream\";\n  const dataUri = await entry.getData(new Data64URIWriter(mimeType));\n  uriResolver[entry.filename] = dataUri;\n}\n\nfunction embedDataUris(div, elementType, attributeName, uriResolver) {\n  const keys = uriResolver.keys;\n  const baseUri = new Uri(\".\");\n  const elements = div.querySelectorAll(elementType);\n  for (let i = 0; i < elements.length; i++) {\n    const element = elements[i];\n    const value = element.getAttribute(attributeName);\n    if (defined(value)) {\n      const relativeUri = new Uri(value);\n      const uri = relativeUri.absoluteTo(baseUri).toString();\n      const index = keys.indexOf(uri);\n      if (index !== -1) {\n        const key = keys[index];\n        element.setAttribute(attributeName, uriResolver[key]);\n        if (elementType === \"a\" && element.getAttribute(\"download\") === null) {\n          element.setAttribute(\"download\", key);\n        }\n      }\n    }\n  }\n}\n\nfunction applyBasePath(div, elementType, attributeName, sourceResource) {\n  const elements = div.querySelectorAll(elementType);\n  for (let i = 0; i < elements.length; i++) {\n    const element = elements[i];\n    const value = element.getAttribute(attributeName);\n    const resource = resolveHref(value, sourceResource);\n    if (defined(resource)) {\n      element.setAttribute(attributeName, resource.url);\n    }\n  }\n}\n\n// an optional context is passed to allow for some malformed kmls (those with multiple geometries with same ids) to still parse\n// correctly, as they do in Google Earth.\nfunction createEntity(node, entityCollection, context) {\n  let id = queryStringAttribute(node, \"id\");\n  id = defined(id) && id.length !== 0 ? id : createGuid();\n  if (defined(context)) {\n    id = context + id;\n  }\n\n  // If we have a duplicate ID just generate one.\n  // This isn't valid KML but Google Earth handles this case.\n  let entity = entityCollection.getById(id);\n  if (defined(entity)) {\n    id = createGuid();\n    if (defined(context)) {\n      id = context + id;\n    }\n  }\n\n  entity = entityCollection.add(new Entity({ id: id }));\n  if (!defined(entity.kml)) {\n    entity.addProperty(\"kml\");\n    entity.kml = new KmlFeatureData();\n  }\n  return entity;\n}\n\nfunction isExtrudable(altitudeMode, gxAltitudeMode) {\n  return (\n    altitudeMode === \"absolute\" ||\n    altitudeMode === \"relativeToGround\" ||\n    gxAltitudeMode === \"relativeToSeaFloor\"\n  );\n}\n\nfunction readCoordinate(value, ellipsoid) {\n  //Google Earth treats empty or missing coordinates as 0.\n  if (!defined(value)) {\n    return Cartesian3.fromDegrees(0, 0, 0, ellipsoid);\n  }\n\n  const digits = value.match(/[^\\s,\\n]+/g);\n  if (!defined(digits)) {\n    return Cartesian3.fromDegrees(0, 0, 0, ellipsoid);\n  }\n\n  let longitude = parseFloat(digits[0]);\n  let latitude = parseFloat(digits[1]);\n  let height = parseFloat(digits[2]);\n\n  longitude = isNaN(longitude) ? 0.0 : longitude;\n  latitude = isNaN(latitude) ? 0.0 : latitude;\n  height = isNaN(height) ? 0.0 : height;\n\n  return Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid);\n}\n\nfunction readCoordinates(element, ellipsoid) {\n  if (!defined(element)) {\n    return undefined;\n  }\n\n  const tuples = element.textContent.match(/[^\\s\\n]+/g);\n  if (!defined(tuples)) {\n    return undefined;\n  }\n\n  const length = tuples.length;\n  const result = new Array(length);\n  let resultIndex = 0;\n  for (let i = 0; i < length; i++) {\n    result[resultIndex++] = readCoordinate(tuples[i], ellipsoid);\n  }\n  return result;\n}\n\nfunction queryNumericAttribute(node, attributeName) {\n  if (!defined(node)) {\n    return undefined;\n  }\n\n  const value = node.getAttribute(attributeName);\n  if (value !== null) {\n    const result = parseFloat(value);\n    return !isNaN(result) ? result : undefined;\n  }\n  return undefined;\n}\n\nfunction queryStringAttribute(node, attributeName) {\n  if (!defined(node)) {\n    return undefined;\n  }\n  const value = node.getAttribute(attributeName);\n  return value !== null ? value : undefined;\n}\n\nfunction queryFirstNode(node, tagName, namespace) {\n  if (!defined(node)) {\n    return undefined;\n  }\n  const childNodes = node.childNodes;\n  const length = childNodes.length;\n  for (let q = 0; q < length; q++) {\n    const child = childNodes[q];\n    if (\n      child.localName === tagName &&\n      namespace.indexOf(child.namespaceURI) !== -1\n    ) {\n      return child;\n    }\n  }\n  return undefined;\n}\n\nfunction queryNodes(node, tagName, namespace) {\n  if (!defined(node)) {\n    return undefined;\n  }\n  const result = [];\n  const childNodes = node.getElementsByTagNameNS(\"*\", tagName);\n  const length = childNodes.length;\n  for (let q = 0; q < length; q++) {\n    const child = childNodes[q];\n    if (\n      child.localName === tagName &&\n      namespace.indexOf(child.namespaceURI) !== -1\n    ) {\n      result.push(child);\n    }\n  }\n  return result;\n}\n\nfunction queryChildNodes(node, tagName, namespace) {\n  if (!defined(node)) {\n    return [];\n  }\n  const result = [];\n  const childNodes = node.childNodes;\n  const length = childNodes.length;\n  for (let q = 0; q < length; q++) {\n    const child = childNodes[q];\n    if (\n      child.localName === tagName &&\n      namespace.indexOf(child.namespaceURI) !== -1\n    ) {\n      result.push(child);\n    }\n  }\n  return result;\n}\n\nfunction queryNumericValue(node, tagName, namespace) {\n  const resultNode = queryFirstNode(node, tagName, namespace);\n  if (defined(resultNode)) {\n    const result = parseFloat(resultNode.textContent);\n    return !isNaN(result) ? result : undefined;\n  }\n  return undefined;\n}\n\nfunction queryStringValue(node, tagName, namespace) {\n  const result = queryFirstNode(node, tagName, namespace);\n  if (defined(result)) {\n    return result.textContent.trim();\n  }\n  return undefined;\n}\n\nfunction queryBooleanValue(node, tagName, namespace) {\n  const result = queryFirstNode(node, tagName, namespace);\n  if (defined(result)) {\n    const value = result.textContent.trim();\n    return value === \"1\" || /^true$/i.test(value);\n  }\n  return undefined;\n}\n\nfunction resolveHref(href, sourceResource, uriResolver) {\n  if (!defined(href)) {\n    return undefined;\n  }\n\n  let resource;\n  if (defined(uriResolver)) {\n    // To resolve issues with KML sources defined in Windows style paths.\n    href = href.replace(/\\\\/g, \"/\");\n    let blob = uriResolver[href];\n    if (defined(blob)) {\n      resource = new Resource({\n        url: blob,\n      });\n    } else {\n      // Needed for multiple levels of KML files in a KMZ\n      const baseUri = new Uri(sourceResource.getUrlComponent());\n      const uri = new Uri(href);\n      blob = uriResolver[uri.absoluteTo(baseUri)];\n      if (defined(blob)) {\n        resource = new Resource({\n          url: blob,\n        });\n      }\n    }\n  }\n\n  if (!defined(resource)) {\n    resource = sourceResource.getDerivedResource({\n      url: href,\n    });\n  }\n\n  return resource;\n}\n\nconst colorOptions = {\n  maximumRed: undefined,\n  red: undefined,\n  maximumGreen: undefined,\n  green: undefined,\n  maximumBlue: undefined,\n  blue: undefined,\n};\n\nfunction parseColorString(value, isRandom) {\n  if (!defined(value) || /^\\s*$/gm.test(value)) {\n    return undefined;\n  }\n\n  if (value[0] === \"#\") {\n    value = value.substring(1);\n  }\n\n  const alpha = parseInt(value.substring(0, 2), 16) / 255.0;\n  const blue = parseInt(value.substring(2, 4), 16) / 255.0;\n  const green = parseInt(value.substring(4, 6), 16) / 255.0;\n  const red = parseInt(value.substring(6, 8), 16) / 255.0;\n\n  if (!isRandom) {\n    return new Color(red, green, blue, alpha);\n  }\n\n  if (red > 0) {\n    colorOptions.maximumRed = red;\n    colorOptions.red = undefined;\n  } else {\n    colorOptions.maximumRed = undefined;\n    colorOptions.red = 0;\n  }\n  if (green > 0) {\n    colorOptions.maximumGreen = green;\n    colorOptions.green = undefined;\n  } else {\n    colorOptions.maximumGreen = undefined;\n    colorOptions.green = 0;\n  }\n  if (blue > 0) {\n    colorOptions.maximumBlue = blue;\n    colorOptions.blue = undefined;\n  } else {\n    colorOptions.maximumBlue = undefined;\n    colorOptions.blue = 0;\n  }\n  colorOptions.alpha = alpha;\n  return Color.fromRandom(colorOptions);\n}\n\nfunction queryColorValue(node, tagName, namespace) {\n  const value = queryStringValue(node, tagName, namespace);\n  if (!defined(value)) {\n    return undefined;\n  }\n  return parseColorString(\n    value,\n    queryStringValue(node, \"colorMode\", namespace) === \"random\",\n  );\n}\n\nfunction processTimeStamp(featureNode) {\n  const node = queryFirstNode(featureNode, \"TimeStamp\", namespaces.kmlgx);\n  const whenString = queryStringValue(node, \"when\", namespaces.kmlgx);\n\n  if (!defined(node) || !defined(whenString) || whenString.length === 0) {\n    return undefined;\n  }\n\n  //According to the KML spec, a TimeStamp represents a \"single moment in time\"\n  //However, since Cesium animates much differently than Google Earth, that doesn't\n  //Make much sense here.  Instead, we use the TimeStamp as the moment the feature\n  //comes into existence.  This works much better and gives a similar feel to\n  //GE's experience.\n  const when = JulianDate.fromIso8601(whenString);\n  const result = new TimeIntervalCollection();\n  result.addInterval(\n    new TimeInterval({\n      start: when,\n      stop: Iso8601.MAXIMUM_VALUE,\n    }),\n  );\n  return result;\n}\n\nfunction processTimeSpan(featureNode) {\n  const node = queryFirstNode(featureNode, \"TimeSpan\", namespaces.kmlgx);\n  if (!defined(node)) {\n    return undefined;\n  }\n  let result;\n\n  const beginNode = queryFirstNode(node, \"begin\", namespaces.kmlgx);\n  let beginDate = defined(beginNode)\n    ? JulianDate.fromIso8601(beginNode.textContent)\n    : undefined;\n\n  const endNode = queryFirstNode(node, \"end\", namespaces.kmlgx);\n  let endDate = defined(endNode)\n    ? JulianDate.fromIso8601(endNode.textContent)\n    : undefined;\n\n  if (defined(beginDate) && defined(endDate)) {\n    if (JulianDate.lessThan(endDate, beginDate)) {\n      const tmp = beginDate;\n      beginDate = endDate;\n      endDate = tmp;\n    }\n    result = new TimeIntervalCollection();\n    result.addInterval(\n      new TimeInterval({\n        start: beginDate,\n        stop: endDate,\n      }),\n    );\n  } else if (defined(beginDate)) {\n    result = new TimeIntervalCollection();\n    result.addInterval(\n      new TimeInterval({\n        start: beginDate,\n        stop: Iso8601.MAXIMUM_VALUE,\n      }),\n    );\n  } else if (defined(endDate)) {\n    result = new TimeIntervalCollection();\n    result.addInterval(\n      new TimeInterval({\n        start: Iso8601.MINIMUM_VALUE,\n        stop: endDate,\n      }),\n    );\n  }\n\n  return result;\n}\n\nfunction createDefaultBillboard() {\n  const billboard = new BillboardGraphics();\n  billboard.width = BILLBOARD_SIZE;\n  billboard.height = BILLBOARD_SIZE;\n  billboard.scaleByDistance = new NearFarScalar(\n    BILLBOARD_NEAR_DISTANCE,\n    BILLBOARD_NEAR_RATIO,\n    BILLBOARD_FAR_DISTANCE,\n    BILLBOARD_FAR_RATIO,\n  );\n  billboard.pixelOffsetScaleByDistance = new NearFarScalar(\n    BILLBOARD_NEAR_DISTANCE,\n    BILLBOARD_NEAR_RATIO,\n    BILLBOARD_FAR_DISTANCE,\n    BILLBOARD_FAR_RATIO,\n  );\n  return billboard;\n}\n\nfunction createDefaultPolygon() {\n  const polygon = new PolygonGraphics();\n  polygon.outline = true;\n  polygon.outlineColor = Color.WHITE;\n  return polygon;\n}\n\nfunction createDefaultLabel() {\n  const label = new LabelGraphics();\n  label.translucencyByDistance = new NearFarScalar(3000000, 1.0, 5000000, 0.0);\n  label.pixelOffset = new Cartesian2(17, 0);\n  label.horizontalOrigin = HorizontalOrigin.LEFT;\n  label.font = \"16px sans-serif\";\n  label.style = LabelStyle.FILL_AND_OUTLINE;\n  return label;\n}\n\nfunction getIconHref(\n  iconNode,\n  dataSource,\n  sourceResource,\n  uriResolver,\n  canRefresh,\n) {\n  let href = queryStringValue(iconNode, \"href\", namespaces.kml);\n  if (!defined(href) || href.length === 0) {\n    return undefined;\n  }\n\n  if (href.indexOf(\"root://icons/palette-\") === 0) {\n    const palette = href.charAt(21);\n\n    // Get the icon number\n    let x = queryNumericValue(iconNode, \"x\", namespaces.gx) ?? 0;\n    let y = queryNumericValue(iconNode, \"y\", namespaces.gx) ?? 0;\n    x = Math.min(x / 32, 7);\n    y = 7 - Math.min(y / 32, 7);\n    const iconNum = 8 * y + x;\n\n    href = `https://maps.google.com/mapfiles/kml/pal${palette}/icon${iconNum}.png`;\n  }\n\n  const hrefResource = resolveHref(href, sourceResource, uriResolver);\n\n  if (canRefresh) {\n    const refreshMode = queryStringValue(\n      iconNode,\n      \"refreshMode\",\n      namespaces.kml,\n    );\n    const viewRefreshMode = queryStringValue(\n      iconNode,\n      \"viewRefreshMode\",\n      namespaces.kml,\n    );\n    if (refreshMode === \"onInterval\" || refreshMode === \"onExpire\") {\n      oneTimeWarning(\n        `kml-refreshMode-${refreshMode}`,\n        `KML - Unsupported Icon refreshMode: ${refreshMode}`,\n      );\n    } else if (viewRefreshMode === \"onStop\" || viewRefreshMode === \"onRegion\") {\n      oneTimeWarning(\n        `kml-refreshMode-${viewRefreshMode}`,\n        `KML - Unsupported Icon viewRefreshMode: ${viewRefreshMode}`,\n      );\n    }\n\n    const viewBoundScale =\n      queryStringValue(iconNode, \"viewBoundScale\", namespaces.kml) ?? 1.0;\n    const defaultViewFormat =\n      viewRefreshMode === \"onStop\"\n        ? \"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]\"\n        : \"\";\n    const viewFormat =\n      queryStringValue(iconNode, \"viewFormat\", namespaces.kml) ??\n      defaultViewFormat;\n    const httpQuery = queryStringValue(iconNode, \"httpQuery\", namespaces.kml);\n    if (defined(viewFormat)) {\n      hrefResource.setQueryParameters(queryToObject(cleanupString(viewFormat)));\n    }\n    if (defined(httpQuery)) {\n      hrefResource.setQueryParameters(queryToObject(cleanupString(httpQuery)));\n    }\n\n    const ellipsoid = dataSource._ellipsoid;\n    processNetworkLinkQueryString(\n      hrefResource,\n      dataSource.camera,\n      dataSource.canvas,\n      viewBoundScale,\n      dataSource._lastCameraView.bbox,\n      ellipsoid,\n    );\n\n    return hrefResource;\n  }\n\n  return hrefResource;\n}\n\nfunction processBillboardIcon(\n  dataSource,\n  node,\n  targetEntity,\n  sourceResource,\n  uriResolver,\n) {\n  let scale = queryNumericValue(node, \"scale\", namespaces.kml);\n  const heading = queryNumericValue(node, \"heading\", namespaces.kml);\n  const color = queryColorValue(node, \"color\", namespaces.kml);\n\n  const iconNode = queryFirstNode(node, \"Icon\", namespaces.kml);\n  let icon = getIconHref(\n    iconNode,\n    dataSource,\n    sourceResource,\n    uriResolver,\n    false,\n  );\n\n  // If icon tags are present but blank, we do not want to show an icon\n  if (defined(iconNode) && !defined(icon)) {\n    icon = false;\n  }\n\n  const x = queryNumericValue(iconNode, \"x\", namespaces.gx);\n  const y = queryNumericValue(iconNode, \"y\", namespaces.gx);\n  const w = queryNumericValue(iconNode, \"w\", namespaces.gx);\n  const h = queryNumericValue(iconNode, \"h\", namespaces.gx);\n\n  const hotSpotNode = queryFirstNode(node, \"hotSpot\", namespaces.kml);\n  const hotSpotX = queryNumericAttribute(hotSpotNode, \"x\");\n  const hotSpotY = queryNumericAttribute(hotSpotNode, \"y\");\n  const hotSpotXUnit = queryStringAttribute(hotSpotNode, \"xunits\");\n  const hotSpotYUnit = queryStringAttribute(hotSpotNode, \"yunits\");\n\n  let billboard = targetEntity.billboard;\n  if (!defined(billboard)) {\n    billboard = createDefaultBillboard();\n    targetEntity.billboard = billboard;\n  }\n\n  billboard.image = icon;\n  billboard.scale = scale;\n  billboard.color = color;\n\n  if (defined(x) || defined(y) || defined(w) || defined(h)) {\n    billboard.imageSubRegion = new BoundingRectangle(x, y, w, h);\n  }\n\n  //GE treats a heading of zero as no heading\n  //You can still point north using a 360 degree angle (or any multiple of 360)\n  if (defined(heading) && heading !== 0) {\n    billboard.rotation = CesiumMath.toRadians(-heading);\n    billboard.alignedAxis = Cartesian3.UNIT_Z;\n  }\n\n  //Hotpot is the KML equivalent of pixel offset\n  //The hotspot origin is the lower left, but we leave\n  //our billboard origin at the center and simply\n  //modify the pixel offset to take this into account\n  scale = scale ?? 1.0;\n\n  let xOffset;\n  let yOffset;\n  if (defined(hotSpotX)) {\n    if (hotSpotXUnit === \"pixels\") {\n      xOffset = -hotSpotX * scale;\n    } else if (hotSpotXUnit === \"insetPixels\") {\n      xOffset = (hotSpotX - BILLBOARD_SIZE) * scale;\n    } else if (hotSpotXUnit === \"fraction\") {\n      xOffset = -hotSpotX * BILLBOARD_SIZE * scale;\n    }\n    xOffset += BILLBOARD_SIZE * 0.5 * scale;\n  }\n\n  if (defined(hotSpotY)) {\n    if (hotSpotYUnit === \"pixels\") {\n      yOffset = hotSpotY * scale;\n    } else if (hotSpotYUnit === \"insetPixels\") {\n      yOffset = (-hotSpotY + BILLBOARD_SIZE) * scale;\n    } else if (hotSpotYUnit === \"fraction\") {\n      yOffset = hotSpotY * BILLBOARD_SIZE * scale;\n    }\n\n    yOffset -= BILLBOARD_SIZE * 0.5 * scale;\n  }\n\n  if (defined(xOffset) || defined(yOffset)) {\n    billboard.pixelOffset = new Cartesian2(xOffset, yOffset);\n  }\n}\n\nfunction applyStyle(\n  dataSource,\n  styleNode,\n  targetEntity,\n  sourceResource,\n  uriResolver,\n) {\n  for (let i = 0, len = styleNode.childNodes.length; i < len; i++) {\n    const node = styleNode.childNodes.item(i);\n    if (node.localName === \"IconStyle\") {\n      processBillboardIcon(\n        dataSource,\n        node,\n        targetEntity,\n        sourceResource,\n        uriResolver,\n      );\n    } else if (node.localName === \"LabelStyle\") {\n      let label = targetEntity.label;\n      if (!defined(label)) {\n        label = createDefaultLabel();\n        targetEntity.label = label;\n      }\n      label.scale =\n        queryNumericValue(node, \"scale\", namespaces.kml) ?? label.scale;\n      label.fillColor =\n        queryColorValue(node, \"color\", namespaces.kml) ?? label.fillColor;\n      label.text = targetEntity.name;\n    } else if (node.localName === \"LineStyle\") {\n      let polyline = targetEntity.polyline;\n      if (!defined(polyline)) {\n        polyline = new PolylineGraphics();\n        targetEntity.polyline = polyline;\n      }\n      polyline.width = queryNumericValue(node, \"width\", namespaces.kml);\n      polyline.material = queryColorValue(node, \"color\", namespaces.kml);\n      if (defined(queryColorValue(node, \"outerColor\", namespaces.gx))) {\n        oneTimeWarning(\n          \"kml-gx:outerColor\",\n          \"KML - gx:outerColor is not supported in a LineStyle\",\n        );\n      }\n      if (defined(queryNumericValue(node, \"outerWidth\", namespaces.gx))) {\n        oneTimeWarning(\n          \"kml-gx:outerWidth\",\n          \"KML - gx:outerWidth is not supported in a LineStyle\",\n        );\n      }\n      if (defined(queryNumericValue(node, \"physicalWidth\", namespaces.gx))) {\n        oneTimeWarning(\n          \"kml-gx:physicalWidth\",\n          \"KML - gx:physicalWidth is not supported in a LineStyle\",\n        );\n      }\n      if (defined(queryBooleanValue(node, \"labelVisibility\", namespaces.gx))) {\n        oneTimeWarning(\n          \"kml-gx:labelVisibility\",\n          \"KML - gx:labelVisibility is not supported in a LineStyle\",\n        );\n      }\n    } else if (node.localName === \"PolyStyle\") {\n      let polygon = targetEntity.polygon;\n      if (!defined(polygon)) {\n        polygon = createDefaultPolygon();\n        targetEntity.polygon = polygon;\n      }\n      polygon.material =\n        queryColorValue(node, \"color\", namespaces.kml) ?? polygon.material;\n      polygon.fill =\n        queryBooleanValue(node, \"fill\", namespaces.kml) ?? polygon.fill;\n      polygon.outline =\n        queryBooleanValue(node, \"outline\", namespaces.kml) ?? polygon.outline;\n    } else if (node.localName === \"BalloonStyle\") {\n      const bgColor =\n        parseColorString(queryStringValue(node, \"bgColor\", namespaces.kml)) ??\n        Color.WHITE;\n      const textColor =\n        parseColorString(queryStringValue(node, \"textColor\", namespaces.kml)) ??\n        Color.BLACK;\n      const text = queryStringValue(node, \"text\", namespaces.kml);\n\n      //This is purely an internal property used in style processing,\n      //it never ends up on the final entity.\n      targetEntity.addProperty(\"balloonStyle\");\n      targetEntity.balloonStyle = {\n        bgColor: bgColor,\n        textColor: textColor,\n        text: text,\n      };\n    } else if (node.localName === \"ListStyle\") {\n      const listItemType = queryStringValue(\n        node,\n        \"listItemType\",\n        namespaces.kml,\n      );\n      if (listItemType === \"radioFolder\" || listItemType === \"checkOffOnly\") {\n        oneTimeWarning(\n          `kml-listStyle-${listItemType}`,\n          `KML - Unsupported ListStyle with listItemType: ${listItemType}`,\n        );\n      }\n    }\n  }\n}\n\n//Processes and merges any inline styles for the provided node into the provided entity.\nfunction computeFinalStyle(\n  dataSource,\n  placeMark,\n  styleCollection,\n  sourceResource,\n  uriResolver,\n) {\n  const result = new Entity();\n  let styleEntity;\n\n  //Google earth seems to always use the last inline Style/StyleMap only\n  let styleIndex = -1;\n  const childNodes = placeMark.childNodes;\n  const length = childNodes.length;\n  for (let q = 0; q < length; q++) {\n    const child = childNodes[q];\n    if (child.localName === \"Style\" || child.localName === \"StyleMap\") {\n      styleIndex = q;\n    }\n  }\n\n  if (styleIndex !== -1) {\n    const inlineStyleNode = childNodes[styleIndex];\n    if (inlineStyleNode.localName === \"Style\") {\n      applyStyle(\n        dataSource,\n        inlineStyleNode,\n        result,\n        sourceResource,\n        uriResolver,\n      );\n    } else {\n      // StyleMap\n      const pairs = queryChildNodes(inlineStyleNode, \"Pair\", namespaces.kml);\n      for (let p = 0; p < pairs.length; p++) {\n        const pair = pairs[p];\n        const key = queryStringValue(pair, \"key\", namespaces.kml);\n        if (key === \"normal\") {\n          const styleUrl = queryStringValue(pair, \"styleUrl\", namespaces.kml);\n          if (defined(styleUrl)) {\n            styleEntity = styleCollection.getById(styleUrl);\n            if (!defined(styleEntity)) {\n              styleEntity = styleCollection.getById(`#${styleUrl}`);\n            }\n            if (defined(styleEntity)) {\n              result.merge(styleEntity);\n            }\n          } else {\n            const node = queryFirstNode(pair, \"Style\", namespaces.kml);\n            applyStyle(dataSource, node, result, sourceResource, uriResolver);\n          }\n        } else {\n          oneTimeWarning(\n            `kml-styleMap-${key}`,\n            `KML - Unsupported StyleMap key: ${key}`,\n          );\n        }\n      }\n    }\n  }\n\n  //Google earth seems to always use the first external style only.\n  const externalStyle = queryStringValue(placeMark, \"styleUrl\", namespaces.kml);\n  if (defined(externalStyle)) {\n    let id = externalStyle;\n    if (externalStyle[0] !== \"#\" && externalStyle.indexOf(\"#\") !== -1) {\n      const tokens = externalStyle.split(\"#\");\n      const uri = tokens[0];\n      const resource = sourceResource.getDerivedResource({\n        url: uri,\n      });\n\n      id = `${resource.getUrlComponent()}#${tokens[1]}`;\n    }\n\n    styleEntity = styleCollection.getById(id);\n    if (!defined(styleEntity)) {\n      styleEntity = styleCollection.getById(`#${id}`);\n    }\n    if (defined(styleEntity)) {\n      result.merge(styleEntity);\n    }\n  }\n\n  return result;\n}\n\n//Asynchronously processes an external style file.\nfunction processExternalStyles(dataSource, resource, styleCollection) {\n  return resource.fetchXML().then(function (styleKml) {\n    return processStyles(dataSource, styleKml, styleCollection, resource, true);\n  });\n}\n\n//Processes all shared and external styles and stores\n//their id into the provided styleCollection.\n//Returns an array of promises that will resolve when\n//each style is loaded.\nfunction processStyles(\n  dataSource,\n  kml,\n  styleCollection,\n  sourceResource,\n  isExternal,\n  uriResolver,\n) {\n  let i;\n  let id;\n  let styleEntity;\n\n  let node;\n  const styleNodes = queryNodes(kml, \"Style\", namespaces.kml);\n  if (defined(styleNodes)) {\n    const styleNodesLength = styleNodes.length;\n    for (i = 0; i < styleNodesLength; i++) {\n      node = styleNodes[i];\n      id = queryStringAttribute(node, \"id\");\n      if (defined(id)) {\n        id = `#${id}`;\n        if (isExternal && defined(sourceResource)) {\n          id = sourceResource.getUrlComponent() + id;\n        }\n        if (!defined(styleCollection.getById(id))) {\n          styleEntity = new Entity({\n            id: id,\n          });\n          styleCollection.add(styleEntity);\n          applyStyle(\n            dataSource,\n            node,\n            styleEntity,\n            sourceResource,\n            uriResolver,\n          );\n        }\n      }\n    }\n  }\n\n  const styleMaps = queryNodes(kml, \"StyleMap\", namespaces.kml);\n  if (defined(styleMaps)) {\n    const styleMapsLength = styleMaps.length;\n    for (i = 0; i < styleMapsLength; i++) {\n      const styleMap = styleMaps[i];\n      id = queryStringAttribute(styleMap, \"id\");\n      if (defined(id)) {\n        const pairs = queryChildNodes(styleMap, \"Pair\", namespaces.kml);\n        for (let p = 0; p < pairs.length; p++) {\n          const pair = pairs[p];\n          const key = queryStringValue(pair, \"key\", namespaces.kml);\n          if (key === \"normal\") {\n            id = `#${id}`;\n            if (isExternal && defined(sourceResource)) {\n              id = sourceResource.getUrlComponent() + id;\n            }\n            if (!defined(styleCollection.getById(id))) {\n              styleEntity = styleCollection.getOrCreateEntity(id);\n\n              let styleUrl = queryStringValue(pair, \"styleUrl\", namespaces.kml);\n              if (defined(styleUrl)) {\n                if (styleUrl[0] !== \"#\") {\n                  styleUrl = `#${styleUrl}`;\n                }\n\n                if (isExternal && defined(sourceResource)) {\n                  styleUrl = sourceResource.getUrlComponent() + styleUrl;\n                }\n                const base = styleCollection.getById(styleUrl);\n\n                if (defined(base)) {\n                  styleEntity.merge(base);\n                }\n              } else {\n                node = queryFirstNode(pair, \"Style\", namespaces.kml);\n                applyStyle(\n                  dataSource,\n                  node,\n                  styleEntity,\n                  sourceResource,\n                  uriResolver,\n                );\n              }\n            }\n          } else {\n            oneTimeWarning(\n              `kml-styleMap-${key}`,\n              `KML - Unsupported StyleMap key: ${key}`,\n            );\n          }\n        }\n      }\n    }\n  }\n\n  const promises = [];\n  const styleUrlNodes = kml.getElementsByTagName(\"styleUrl\");\n  const styleUrlNodesLength = styleUrlNodes.length;\n  for (i = 0; i < styleUrlNodesLength; i++) {\n    const styleReference = styleUrlNodes[i].textContent;\n    if (styleReference[0] !== \"#\") {\n      //According to the spec, all local styles should start with a #\n      //and everything else is an external style that has a # seperating\n      //the URL of the document and the style.  However, Google Earth\n      //also accepts styleUrls without a # as meaning a local style.\n      const tokens = styleReference.split(\"#\");\n      if (tokens.length === 2) {\n        const uri = tokens[0];\n        const resource = sourceResource.getDerivedResource({\n          url: uri,\n        });\n\n        promises.push(\n          processExternalStyles(dataSource, resource, styleCollection),\n        );\n      }\n    }\n  }\n\n  return promises;\n}\n\nfunction createDropLine(entityCollection, entity, styleEntity) {\n  const entityPosition = new ReferenceProperty(entityCollection, entity.id, [\n    \"position\",\n  ]);\n  const surfacePosition = new ScaledPositionProperty(entity.position);\n  entity.polyline = defined(styleEntity.polyline)\n    ? styleEntity.polyline.clone()\n    : new PolylineGraphics();\n  entity.polyline.positions = new PositionPropertyArray([\n    entityPosition,\n    surfacePosition,\n  ]);\n}\n\nfunction heightReferenceFromAltitudeMode(altitudeMode, gxAltitudeMode) {\n  if (\n    (!defined(altitudeMode) && !defined(gxAltitudeMode)) ||\n    altitudeMode === \"clampToGround\"\n  ) {\n    return HeightReference.CLAMP_TO_GROUND;\n  }\n\n  if (altitudeMode === \"relativeToGround\") {\n    return HeightReference.RELATIVE_TO_GROUND;\n  }\n\n  if (altitudeMode === \"absolute\") {\n    return HeightReference.NONE;\n  }\n\n  if (gxAltitudeMode === \"clampToSeaFloor\") {\n    oneTimeWarning(\n      \"kml-gx:altitudeMode-clampToSeaFloor\",\n      \"KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround.\",\n    );\n    return HeightReference.CLAMP_TO_GROUND;\n  }\n\n  if (gxAltitudeMode === \"relativeToSeaFloor\") {\n    oneTimeWarning(\n      \"kml-gx:altitudeMode-relativeToSeaFloor\",\n      \"KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround.\",\n    );\n    return HeightReference.RELATIVE_TO_GROUND;\n  }\n\n  if (defined(altitudeMode)) {\n    oneTimeWarning(\n      \"kml-altitudeMode-unknown\",\n      `KML - Unknown <kml:altitudeMode>:${altitudeMode}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`,\n    );\n  } else {\n    oneTimeWarning(\n      \"kml-gx:altitudeMode-unknown\",\n      `KML - Unknown <gx:altitudeMode>:${gxAltitudeMode}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`,\n    );\n  }\n\n  // Clamp to ground is the default\n  return HeightReference.CLAMP_TO_GROUND;\n}\n\nfunction createPositionPropertyFromAltitudeMode(\n  property,\n  altitudeMode,\n  gxAltitudeMode,\n) {\n  if (\n    gxAltitudeMode === \"relativeToSeaFloor\" ||\n    altitudeMode === \"absolute\" ||\n    altitudeMode === \"relativeToGround\"\n  ) {\n    //Just return the ellipsoid referenced property until we support MSL\n    return property;\n  }\n\n  if (\n    (defined(altitudeMode) && altitudeMode !== \"clampToGround\") || //\n    (defined(gxAltitudeMode) && gxAltitudeMode !== \"clampToSeaFloor\")\n  ) {\n    oneTimeWarning(\n      \"kml-altitudeMode-unknown\",\n      `KML - Unknown altitudeMode: ${altitudeMode ?? gxAltitudeMode}`,\n    );\n  }\n\n  // Clamp to ground is the default\n  return new ScaledPositionProperty(property);\n}\n\nfunction createPositionPropertyArrayFromAltitudeMode(\n  properties,\n  altitudeMode,\n  gxAltitudeMode,\n  ellipsoid,\n) {\n  if (!defined(properties)) {\n    return undefined;\n  }\n\n  if (\n    gxAltitudeMode === \"relativeToSeaFloor\" ||\n    altitudeMode === \"absolute\" ||\n    altitudeMode === \"relativeToGround\"\n  ) {\n    //Just return the ellipsoid referenced property until we support MSL\n    return properties;\n  }\n\n  if (\n    (defined(altitudeMode) && altitudeMode !== \"clampToGround\") || //\n    (defined(gxAltitudeMode) && gxAltitudeMode !== \"clampToSeaFloor\")\n  ) {\n    oneTimeWarning(\n      \"kml-altitudeMode-unknown\",\n      `KML - Unknown altitudeMode: ${altitudeMode ?? gxAltitudeMode}`,\n    );\n  }\n\n  // Clamp to ground is the default\n  const propertiesLength = properties.length;\n  for (let i = 0; i < propertiesLength; i++) {\n    const property = properties[i];\n    ellipsoid.scaleToGeodeticSurface(property, property);\n  }\n  return properties;\n}\n\nfunction processPositionGraphics(\n  dataSource,\n  entity,\n  styleEntity,\n  heightReference,\n) {\n  let label = entity.label;\n  if (!defined(label)) {\n    label = defined(styleEntity.label)\n      ? styleEntity.label.clone()\n      : createDefaultLabel();\n    entity.label = label;\n  }\n  label.text = entity.name;\n\n  let billboard = entity.billboard;\n  if (!defined(billboard)) {\n    billboard = defined(styleEntity.billboard)\n      ? styleEntity.billboard.clone()\n      : createDefaultBillboard();\n    entity.billboard = billboard;\n  }\n\n  if (!defined(billboard.image)) {\n    billboard.image = dataSource._pinBuilder.fromColor(Color.YELLOW, 64);\n\n    // If there were empty <Icon> tags in the KML, then billboard.image was set to false above\n    // However, in this case, the false value would have been converted to a property afterwards\n    // Thus, we check if billboard.image is defined with value of false\n  } else if (!billboard.image.getValue()) {\n    billboard.image = undefined;\n  }\n\n  let scale = 1.0;\n  if (defined(billboard.scale)) {\n    scale = billboard.scale.getValue();\n    if (scale !== 0) {\n      label.pixelOffset = new Cartesian2(scale * 16 + 1, 0);\n    } else {\n      //Minor tweaks to better match Google Earth.\n      label.pixelOffset = undefined;\n      label.horizontalOrigin = undefined;\n    }\n  }\n\n  if (defined(heightReference) && dataSource._clampToGround) {\n    billboard.heightReference = heightReference;\n    label.heightReference = heightReference;\n  }\n}\n\nfunction processPathGraphics(entity, styleEntity) {\n  let path = entity.path;\n  if (!defined(path)) {\n    path = new PathGraphics();\n    path.leadTime = 0;\n    entity.path = path;\n  }\n\n  const polyline = styleEntity.polyline;\n  if (defined(polyline)) {\n    path.material = polyline.material;\n    path.width = polyline.width;\n  }\n}\n\nfunction processPoint(\n  dataSource,\n  entityCollection,\n  geometryNode,\n  entity,\n  styleEntity,\n) {\n  const coordinatesString = queryStringValue(\n    geometryNode,\n    \"coordinates\",\n    namespaces.kml,\n  );\n  const altitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.kml,\n  );\n  const gxAltitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.gx,\n  );\n  const extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n  const ellipsoid = dataSource._ellipsoid;\n  const position = readCoordinate(coordinatesString, ellipsoid);\n\n  entity.position = position;\n  processPositionGraphics(\n    dataSource,\n    entity,\n    styleEntity,\n    heightReferenceFromAltitudeMode(altitudeMode, gxAltitudeMode),\n  );\n\n  if (extrude && isExtrudable(altitudeMode, gxAltitudeMode)) {\n    createDropLine(entityCollection, entity, styleEntity);\n  }\n\n  return true;\n}\n\nfunction processLineStringOrLinearRing(\n  dataSource,\n  entityCollection,\n  geometryNode,\n  entity,\n  styleEntity,\n) {\n  const coordinatesNode = queryFirstNode(\n    geometryNode,\n    \"coordinates\",\n    namespaces.kml,\n  );\n  const altitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.kml,\n  );\n  const gxAltitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.gx,\n  );\n  const extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n  const tessellate = queryBooleanValue(\n    geometryNode,\n    \"tessellate\",\n    namespaces.kml,\n  );\n  const canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n  const zIndex = queryNumericValue(geometryNode, \"drawOrder\", namespaces.gx);\n\n  const ellipsoid = dataSource._ellipsoid;\n  const coordinates = readCoordinates(coordinatesNode, ellipsoid);\n  let polyline = styleEntity.polyline;\n  if (canExtrude && extrude) {\n    const wall = new WallGraphics();\n    entity.wall = wall;\n    wall.positions = coordinates;\n    const polygon = styleEntity.polygon;\n\n    if (defined(polygon)) {\n      wall.fill = polygon.fill;\n      wall.material = polygon.material;\n    }\n\n    //Always outline walls so they show up in 2D.\n    wall.outline = true;\n    if (defined(polyline)) {\n      wall.outlineColor = defined(polyline.material)\n        ? polyline.material.color\n        : Color.WHITE;\n      wall.outlineWidth = polyline.width;\n    } else if (defined(polygon)) {\n      wall.outlineColor = defined(polygon.material)\n        ? polygon.material.color\n        : Color.WHITE;\n    }\n  } else if (dataSource._clampToGround && !canExtrude && tessellate) {\n    const polylineGraphics = new PolylineGraphics();\n    polylineGraphics.clampToGround = true;\n    entity.polyline = polylineGraphics;\n    polylineGraphics.positions = coordinates;\n    if (defined(polyline)) {\n      polylineGraphics.material = defined(polyline.material)\n        ? polyline.material.color.getValue(Iso8601.MINIMUM_VALUE)\n        : Color.WHITE;\n      polylineGraphics.width = polyline.width ?? 1.0;\n    } else {\n      polylineGraphics.material = Color.WHITE;\n      polylineGraphics.width = 1.0;\n    }\n    polylineGraphics.zIndex = zIndex;\n  } else {\n    if (defined(zIndex)) {\n      oneTimeWarning(\n        \"kml-gx:drawOrder\",\n        \"KML - gx:drawOrder is not supported in LineStrings when clampToGround is false\",\n      );\n    }\n    if (dataSource._clampToGround && !tessellate) {\n      oneTimeWarning(\n        \"kml-line-tesselate\",\n        \"Ignoring clampToGround for KML lines without the tessellate flag.\",\n      );\n    }\n\n    polyline = defined(polyline) ? polyline.clone() : new PolylineGraphics();\n    entity.polyline = polyline;\n    polyline.positions = createPositionPropertyArrayFromAltitudeMode(\n      coordinates,\n      altitudeMode,\n      gxAltitudeMode,\n      ellipsoid,\n    );\n    if (!tessellate || canExtrude) {\n      polyline.arcType = ArcType.NONE;\n    }\n  }\n\n  return true;\n}\n\nfunction processPolygon(\n  dataSource,\n  entityCollection,\n  geometryNode,\n  entity,\n  styleEntity,\n) {\n  const outerBoundaryIsNode = queryFirstNode(\n    geometryNode,\n    \"outerBoundaryIs\",\n    namespaces.kml,\n  );\n  let linearRingNode = queryFirstNode(\n    outerBoundaryIsNode,\n    \"LinearRing\",\n    namespaces.kml,\n  );\n  let coordinatesNode = queryFirstNode(\n    linearRingNode,\n    \"coordinates\",\n    namespaces.kml,\n  );\n  const ellipsoid = dataSource._ellipsoid;\n  let coordinates = readCoordinates(coordinatesNode, ellipsoid);\n  const extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n  const altitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.kml,\n  );\n  const gxAltitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.gx,\n  );\n  const canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n\n  const polygon = defined(styleEntity.polygon)\n    ? styleEntity.polygon.clone()\n    : createDefaultPolygon();\n\n  const polyline = styleEntity.polyline;\n  if (defined(polyline)) {\n    polygon.outlineColor = defined(polyline.material)\n      ? polyline.material.color\n      : Color.WHITE;\n    polygon.outlineWidth = polyline.width;\n  }\n  entity.polygon = polygon;\n\n  if (canExtrude) {\n    polygon.perPositionHeight = true;\n    polygon.extrudedHeight = extrude ? 0 : undefined;\n  } else if (!dataSource._clampToGround) {\n    polygon.height = 0;\n  }\n\n  if (defined(coordinates)) {\n    const hierarchy = new PolygonHierarchy(coordinates);\n    const innerBoundaryIsNodes = queryChildNodes(\n      geometryNode,\n      \"innerBoundaryIs\",\n      namespaces.kml,\n    );\n    for (let j = 0; j < innerBoundaryIsNodes.length; j++) {\n      linearRingNode = queryChildNodes(\n        innerBoundaryIsNodes[j],\n        \"LinearRing\",\n        namespaces.kml,\n      );\n      for (let k = 0; k < linearRingNode.length; k++) {\n        coordinatesNode = queryFirstNode(\n          linearRingNode[k],\n          \"coordinates\",\n          namespaces.kml,\n        );\n        coordinates = readCoordinates(coordinatesNode, ellipsoid);\n        if (defined(coordinates)) {\n          hierarchy.holes.push(new PolygonHierarchy(coordinates));\n        }\n      }\n    }\n    polygon.hierarchy = hierarchy;\n  }\n\n  return true;\n}\n\nfunction processTrack(\n  dataSource,\n  entityCollection,\n  geometryNode,\n  entity,\n  styleEntity,\n) {\n  const altitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.kml,\n  );\n  const gxAltitudeMode = queryStringValue(\n    geometryNode,\n    \"altitudeMode\",\n    namespaces.gx,\n  );\n  const coordNodes = queryChildNodes(geometryNode, \"coord\", namespaces.gx);\n  const angleNodes = queryChildNodes(geometryNode, \"angles\", namespaces.gx);\n  const timeNodes = queryChildNodes(geometryNode, \"when\", namespaces.kml);\n  const extrude = queryBooleanValue(geometryNode, \"extrude\", namespaces.kml);\n  const canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n  const ellipsoid = dataSource._ellipsoid;\n\n  if (angleNodes.length > 0) {\n    oneTimeWarning(\n      \"kml-gx:angles\",\n      \"KML - gx:angles are not supported in gx:Tracks\",\n    );\n  }\n\n  const length = Math.min(coordNodes.length, timeNodes.length);\n  const coordinates = [];\n  const times = [];\n  for (let i = 0; i < length; i++) {\n    const position = readCoordinate(coordNodes[i].textContent, ellipsoid);\n    coordinates.push(position);\n    times.push(JulianDate.fromIso8601(timeNodes[i].textContent));\n  }\n  const property = new SampledPositionProperty();\n  property.addSamples(times, coordinates);\n  entity.position = property;\n  processPositionGraphics(\n    dataSource,\n    entity,\n    styleEntity,\n    heightReferenceFromAltitudeMode(altitudeMode, gxAltitudeMode),\n  );\n  processPathGraphics(entity, styleEntity);\n\n  entity.availability = new TimeIntervalCollection();\n\n  if (timeNodes.length > 0) {\n    entity.availability.addInterval(\n      new TimeInterval({\n        start: times[0],\n        stop: times[times.length - 1],\n      }),\n    );\n  }\n\n  if (canExtrude && extrude) {\n    createDropLine(entityCollection, entity, styleEntity);\n  }\n\n  return true;\n}\n\nfunction addToMultiTrack(\n  times,\n  positions,\n  composite,\n  availability,\n  dropShowProperty,\n  extrude,\n  altitudeMode,\n  gxAltitudeMode,\n  includeEndPoints,\n) {\n  const start = times[0];\n  const stop = times[times.length - 1];\n\n  const data = new SampledPositionProperty();\n  data.addSamples(times, positions);\n\n  composite.intervals.addInterval(\n    new TimeInterval({\n      start: start,\n      stop: stop,\n      isStartIncluded: includeEndPoints,\n      isStopIncluded: includeEndPoints,\n      data: createPositionPropertyFromAltitudeMode(\n        data,\n        altitudeMode,\n        gxAltitudeMode,\n      ),\n    }),\n  );\n  availability.addInterval(\n    new TimeInterval({\n      start: start,\n      stop: stop,\n      isStartIncluded: includeEndPoints,\n      isStopIncluded: includeEndPoints,\n    }),\n  );\n  dropShowProperty.intervals.addInterval(\n    new TimeInterval({\n      start: start,\n      stop: stop,\n      isStartIncluded: includeEndPoints,\n      isStopIncluded: includeEndPoints,\n      data: extrude,\n    }),\n  );\n}\n\nfunction processMultiTrack(\n  dataSource,\n  entityCollection,\n  geometryNode,\n  entity,\n  styleEntity,\n) {\n  // Multitrack options do not work in GE as detailed in the spec,\n  // rather than altitudeMode being at the MultiTrack level,\n  // GE just defers all settings to the underlying track.\n\n  const interpolate = queryBooleanValue(\n    geometryNode,\n    \"interpolate\",\n    namespaces.gx,\n  );\n  const trackNodes = queryChildNodes(geometryNode, \"Track\", namespaces.gx);\n\n  let times;\n  let lastStop;\n  let lastStopPosition;\n  let needDropLine = false;\n  const dropShowProperty = new TimeIntervalCollectionProperty();\n  const availability = new TimeIntervalCollection();\n  const composite = new CompositePositionProperty();\n  const ellipsoid = dataSource._ellipsoid;\n  for (let i = 0, len = trackNodes.length; i < len; i++) {\n    const trackNode = trackNodes[i];\n    const timeNodes = queryChildNodes(trackNode, \"when\", namespaces.kml);\n    const coordNodes = queryChildNodes(trackNode, \"coord\", namespaces.gx);\n    const altitudeMode = queryStringValue(\n      trackNode,\n      \"altitudeMode\",\n      namespaces.kml,\n    );\n    const gxAltitudeMode = queryStringValue(\n      trackNode,\n      \"altitudeMode\",\n      namespaces.gx,\n    );\n    const canExtrude = isExtrudable(altitudeMode, gxAltitudeMode);\n    const extrude = queryBooleanValue(trackNode, \"extrude\", namespaces.kml);\n\n    const length = Math.min(coordNodes.length, timeNodes.length);\n\n    const positions = [];\n    times = [];\n    for (let x = 0; x < length; x++) {\n      const position = readCoordinate(coordNodes[x].textContent, ellipsoid);\n      positions.push(position);\n      times.push(JulianDate.fromIso8601(timeNodes[x].textContent));\n    }\n\n    if (interpolate) {\n      //If we are interpolating, then we need to fill in the end of\n      //the last track and the beginning of this one with a sampled\n      //property.  From testing in Google Earth, this property\n      //is never extruded and always absolute.\n      if (defined(lastStop)) {\n        addToMultiTrack(\n          [lastStop, times[0]],\n          [lastStopPosition, positions[0]],\n          composite,\n          availability,\n          dropShowProperty,\n          false,\n          \"absolute\",\n          undefined,\n          false,\n        );\n      }\n      lastStop = times[length - 1];\n      lastStopPosition = positions[positions.length - 1];\n    }\n\n    addToMultiTrack(\n      times,\n      positions,\n      composite,\n      availability,\n      dropShowProperty,\n      canExtrude && extrude,\n      altitudeMode,\n      gxAltitudeMode,\n      true,\n    );\n    needDropLine = needDropLine || (canExtrude && extrude);\n  }\n\n  entity.availability = availability;\n  entity.position = composite;\n  processPositionGraphics(dataSource, entity, styleEntity);\n  processPathGraphics(entity, styleEntity);\n  if (needDropLine) {\n    createDropLine(entityCollection, entity, styleEntity);\n    entity.polyline.show = dropShowProperty;\n  }\n\n  return true;\n}\n\nconst geometryTypes = {\n  Point: processPoint,\n  LineString: processLineStringOrLinearRing,\n  LinearRing: processLineStringOrLinearRing,\n  Polygon: processPolygon,\n  Track: processTrack,\n  MultiTrack: processMultiTrack,\n  MultiGeometry: processMultiGeometry,\n  Model: processUnsupportedGeometry,\n};\n\nfunction processMultiGeometry(\n  dataSource,\n  entityCollection,\n  geometryNode,\n  entity,\n  styleEntity,\n  context,\n) {\n  const childNodes = geometryNode.childNodes;\n  let hasGeometry = false;\n  for (let i = 0, len = childNodes.length; i < len; i++) {\n    const childNode = childNodes.item(i);\n    const geometryProcessor = geometryTypes[childNode.localName];\n    if (defined(geometryProcessor)) {\n      const childEntity = createEntity(childNode, entityCollection, context);\n      childEntity.parent = entity;\n      childEntity.name = entity.name;\n      childEntity.availability = entity.availability;\n      childEntity.description = entity.description;\n      childEntity.kml = entity.kml;\n      if (\n        geometryProcessor(\n          dataSource,\n          entityCollection,\n          childNode,\n          childEntity,\n          styleEntity,\n        )\n      ) {\n        hasGeometry = true;\n      }\n    }\n  }\n\n  return hasGeometry;\n}\n\nfunction processUnsupportedGeometry(\n  dataSource,\n  entityCollection,\n  geometryNode,\n  entity,\n  styleEntity,\n) {\n  oneTimeWarning(\n    \"kml-unsupportedGeometry\",\n    `KML - Unsupported geometry: ${geometryNode.localName}`,\n  );\n  return false;\n}\n\nfunction processExtendedData(node, entity) {\n  const extendedDataNode = queryFirstNode(node, \"ExtendedData\", namespaces.kml);\n\n  if (!defined(extendedDataNode)) {\n    return undefined;\n  }\n\n  if (defined(queryFirstNode(extendedDataNode, \"SchemaData\", namespaces.kml))) {\n    oneTimeWarning(\"kml-schemaData\", \"KML - SchemaData is unsupported\");\n  }\n  if (defined(queryStringAttribute(extendedDataNode, \"xmlns:prefix\"))) {\n    oneTimeWarning(\n      \"kml-extendedData\",\n      \"KML - ExtendedData with xmlns:prefix is unsupported\",\n    );\n  }\n\n  const result = {};\n  const dataNodes = queryChildNodes(extendedDataNode, \"Data\", namespaces.kml);\n  if (defined(dataNodes)) {\n    const length = dataNodes.length;\n    for (let i = 0; i < length; i++) {\n      const dataNode = dataNodes[i];\n      const name = queryStringAttribute(dataNode, \"name\");\n      if (defined(name)) {\n        result[name] = {\n          displayName: queryStringValue(\n            dataNode,\n            \"displayName\",\n            namespaces.kml,\n          ),\n          value: queryStringValue(dataNode, \"value\", namespaces.kml),\n        };\n      }\n    }\n  }\n  entity.kml.extendedData = result;\n}\n\nlet scratchDiv;\nif (typeof document !== \"undefined\") {\n  scratchDiv = document.createElement(\"div\");\n}\n\nfunction processDescription(\n  node,\n  entity,\n  styleEntity,\n  uriResolver,\n  sourceResource,\n) {\n  let i;\n  let key;\n  let keys;\n\n  const kmlData = entity.kml;\n  const extendedData = kmlData.extendedData;\n  const description = queryStringValue(node, \"description\", namespaces.kml);\n\n  const balloonStyle = entity.balloonStyle ?? styleEntity.balloonStyle;\n\n  let background = Color.WHITE;\n  let foreground = Color.BLACK;\n  let text = description;\n\n  if (defined(balloonStyle)) {\n    background = balloonStyle.bgColor ?? Color.WHITE;\n    foreground = balloonStyle.textColor ?? Color.BLACK;\n    text = balloonStyle.text ?? description;\n  }\n\n  let value;\n  if (defined(text)) {\n    text = text.replace(\"$[name]\", entity.name ?? \"\");\n    text = text.replace(\"$[description]\", description ?? \"\");\n    text = text.replace(\"$[address]\", kmlData.address ?? \"\");\n    text = text.replace(\"$[Snippet]\", kmlData.snippet ?? \"\");\n    text = text.replace(\"$[id]\", entity.id);\n\n    //While not explicitly defined by the OGC spec, in Google Earth\n    //The appearance of geDirections adds the directions to/from links\n    //We simply replace this string with nothing.\n    text = text.replace(\"$[geDirections]\", \"\");\n\n    if (defined(extendedData)) {\n      const matches = text.match(/\\$\\[.+?\\]/g);\n      if (matches !== null) {\n        for (i = 0; i < matches.length; i++) {\n          const token = matches[i];\n          let propertyName = token.substr(2, token.length - 3);\n          const isDisplayName = /\\/displayName$/.test(propertyName);\n          propertyName = propertyName.replace(/\\/displayName$/, \"\");\n\n          value = extendedData[propertyName];\n          if (defined(value)) {\n            value = isDisplayName ? value.displayName : value.value;\n          }\n          if (defined(value)) {\n            text = text.replace(token, value ?? \"\");\n          }\n        }\n      }\n    }\n  } else if (defined(extendedData)) {\n    //If no description exists, build a table out of the extended data\n    keys = Object.keys(extendedData);\n    if (keys.length > 0) {\n      text =\n        '<table class=\"cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter\"><tbody>';\n      for (i = 0; i < keys.length; i++) {\n        key = keys[i];\n        value = extendedData[key];\n        text += `<tr><th>${value.displayName ?? key}</th><td>${value.value ?? \"\"}</td></tr>`;\n      }\n      text += \"</tbody></table>\";\n    }\n  }\n\n  if (!defined(text)) {\n    //No description\n    return;\n  }\n\n  //Turns non-explicit links into clickable links.\n  text = autolinker.link(text);\n\n  //Use a temporary div to manipulate the links\n  //so that they open in a new window.\n  scratchDiv.innerHTML = text;\n  const links = scratchDiv.querySelectorAll(\"a\");\n  for (i = 0; i < links.length; i++) {\n    links[i].setAttribute(\"target\", \"_blank\");\n  }\n\n  //Rewrite any KMZ embedded urls\n  if (defined(uriResolver) && uriResolver.keys.length > 1) {\n    embedDataUris(scratchDiv, \"a\", \"href\", uriResolver);\n    embedDataUris(scratchDiv, \"link\", \"href\", uriResolver);\n    embedDataUris(scratchDiv, \"area\", \"href\", uriResolver);\n    embedDataUris(scratchDiv, \"img\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"iframe\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"video\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"audio\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"source\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"track\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"input\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"embed\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"script\", \"src\", uriResolver);\n    embedDataUris(scratchDiv, \"video\", \"poster\", uriResolver);\n  }\n\n  //Make relative urls absolute using the sourceResource\n  applyBasePath(scratchDiv, \"a\", \"href\", sourceResource);\n  applyBasePath(scratchDiv, \"link\", \"href\", sourceResource);\n  applyBasePath(scratchDiv, \"area\", \"href\", sourceResource);\n  applyBasePath(scratchDiv, \"img\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"iframe\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"video\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"audio\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"source\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"track\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"input\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"embed\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"script\", \"src\", sourceResource);\n  applyBasePath(scratchDiv, \"video\", \"poster\", sourceResource);\n\n  let tmp = '<div class=\"cesium-infoBox-description-lighter\" style=\"';\n  tmp += \"overflow:auto;\";\n  tmp += \"word-wrap:break-word;\";\n  tmp += `background-color:${background.toCssColorString()};`;\n  tmp += `color:${foreground.toCssColorString()};`;\n  tmp += '\">';\n  tmp += `${scratchDiv.innerHTML}</div>`;\n  scratchDiv.innerHTML = \"\";\n\n  //Set the final HTML as the description.\n  entity.description = tmp;\n}\n\nfunction processFeature(dataSource, featureNode, processingData) {\n  const entityCollection = processingData.entityCollection;\n  const parent = processingData.parentEntity;\n  const sourceResource = processingData.sourceResource;\n  const uriResolver = processingData.uriResolver;\n\n  const entity = createEntity(\n    featureNode,\n    entityCollection,\n    processingData.context,\n  );\n  const kmlData = entity.kml;\n  const styleEntity = computeFinalStyle(\n    dataSource,\n    featureNode,\n    processingData.styleCollection,\n    sourceResource,\n    uriResolver,\n  );\n\n  const name = queryStringValue(featureNode, \"name\", namespaces.kml);\n  entity.name = name;\n  entity.parent = parent;\n\n  let availability = processTimeSpan(featureNode);\n  if (!defined(availability)) {\n    availability = processTimeStamp(featureNode);\n  }\n  entity.availability = availability;\n\n  mergeAvailabilityWithParent(entity);\n\n  // Per KML spec \"A Feature is visible only if it and all its ancestors are visible.\"\n  function ancestryIsVisible(parentEntity) {\n    if (!parentEntity) {\n      return true;\n    }\n    return parentEntity.show && ancestryIsVisible(parentEntity.parent);\n  }\n\n  const visibility = queryBooleanValue(\n    featureNode,\n    \"visibility\",\n    namespaces.kml,\n  );\n  entity.show = ancestryIsVisible(parent) && (visibility ?? true);\n  //const open = queryBooleanValue(featureNode, 'open', namespaces.kml);\n\n  const authorNode = queryFirstNode(featureNode, \"author\", namespaces.atom);\n  const author = kmlData.author;\n  author.name = queryStringValue(authorNode, \"name\", namespaces.atom);\n  author.uri = queryStringValue(authorNode, \"uri\", namespaces.atom);\n  author.email = queryStringValue(authorNode, \"email\", namespaces.atom);\n\n  const linkNode = queryFirstNode(featureNode, \"link\", namespaces.atom);\n  const link = kmlData.link;\n  link.href = queryStringAttribute(linkNode, \"href\");\n  link.hreflang = queryStringAttribute(linkNode, \"hreflang\");\n  link.rel = queryStringAttribute(linkNode, \"rel\");\n  link.type = queryStringAttribute(linkNode, \"type\");\n  link.title = queryStringAttribute(linkNode, \"title\");\n  link.length = queryStringAttribute(linkNode, \"length\");\n\n  kmlData.address = queryStringValue(featureNode, \"address\", namespaces.kml);\n  kmlData.phoneNumber = queryStringValue(\n    featureNode,\n    \"phoneNumber\",\n    namespaces.kml,\n  );\n  kmlData.snippet = queryStringValue(featureNode, \"Snippet\", namespaces.kml);\n\n  processExtendedData(featureNode, entity);\n  processDescription(\n    featureNode,\n    entity,\n    styleEntity,\n    uriResolver,\n    sourceResource,\n  );\n\n  const ellipsoid = dataSource._ellipsoid;\n  processLookAt(featureNode, entity, ellipsoid);\n  processCamera(featureNode, entity, ellipsoid);\n\n  if (defined(queryFirstNode(featureNode, \"Region\", namespaces.kml))) {\n    oneTimeWarning(\"kml-region\", \"KML - Placemark Regions are unsupported\");\n  }\n\n  return {\n    entity: entity,\n    styleEntity: styleEntity,\n  };\n}\n\nfunction processDocument(dataSource, node, processingData, deferredLoading) {\n  deferredLoading.addNodes(node.childNodes, processingData);\n  deferredLoading.process();\n}\n\nfunction processFolder(dataSource, node, processingData, deferredLoading) {\n  const r = processFeature(dataSource, node, processingData);\n  const newProcessingData = clone(processingData);\n  newProcessingData.parentEntity = r.entity;\n  processDocument(dataSource, node, newProcessingData, deferredLoading);\n}\n\nfunction processPlacemark(\n  dataSource,\n  placemark,\n  processingData,\n  deferredLoading,\n) {\n  const r = processFeature(dataSource, placemark, processingData);\n  const entity = r.entity;\n  const styleEntity = r.styleEntity;\n\n  let hasGeometry = false;\n  const childNodes = placemark.childNodes;\n  for (let i = 0, len = childNodes.length; i < len && !hasGeometry; i++) {\n    const childNode = childNodes.item(i);\n    const geometryProcessor = geometryTypes[childNode.localName];\n    if (defined(geometryProcessor)) {\n      // pass the placemark entity id as a context for case of defining multiple child entities together to handle case\n      // where some malformed kmls reuse the same id across placemarks, which works in GE, but is not technically to spec.\n      geometryProcessor(\n        dataSource,\n        processingData.entityCollection,\n        childNode,\n        entity,\n        styleEntity,\n        entity.id,\n      );\n      hasGeometry = true;\n    }\n  }\n\n  if (!hasGeometry) {\n    entity.merge(styleEntity);\n    processPositionGraphics(dataSource, entity, styleEntity);\n  }\n}\n\nconst playlistNodeProcessors = {\n  FlyTo: processTourFlyTo,\n  Wait: processTourWait,\n  SoundCue: processTourUnsupportedNode,\n  AnimatedUpdate: processTourUnsupportedNode,\n  TourControl: processTourUnsupportedNode,\n};\n\nfunction processTour(dataSource, node, processingData, deferredLoading) {\n  const name = queryStringValue(node, \"name\", namespaces.kml);\n  const id = queryStringAttribute(node, \"id\");\n  const tour = new KmlTour(name, id);\n\n  const playlistNode = queryFirstNode(node, \"Playlist\", namespaces.gx);\n  if (playlistNode) {\n    const ellipsoid = dataSource._ellipsoid;\n    const childNodes = playlistNode.childNodes;\n    for (let i = 0; i < childNodes.length; i++) {\n      const entryNode = childNodes[i];\n      if (entryNode.localName) {\n        const playlistNodeProcessor =\n          playlistNodeProcessors[entryNode.localName];\n        if (playlistNodeProcessor) {\n          playlistNodeProcessor(tour, entryNode, ellipsoid);\n        } else {\n          console.log(\n            `Unknown KML Tour playlist entry type ${entryNode.localName}`,\n          );\n        }\n      }\n    }\n  }\n\n  dataSource._kmlTours.push(tour);\n}\n\nfunction processTourUnsupportedNode(tour, entryNode) {\n  oneTimeWarning(`KML Tour unsupported node ${entryNode.localName}`);\n}\n\nfunction processTourWait(tour, entryNode) {\n  const duration = queryNumericValue(entryNode, \"duration\", namespaces.gx);\n  tour.addPlaylistEntry(new KmlTourWait(duration));\n}\n\nfunction processTourFlyTo(tour, entryNode, ellipsoid) {\n  const duration = queryNumericValue(entryNode, \"duration\", namespaces.gx);\n  const flyToMode = queryStringValue(entryNode, \"flyToMode\", namespaces.gx);\n\n  const t = { kml: {} };\n\n  processLookAt(entryNode, t, ellipsoid);\n  processCamera(entryNode, t, ellipsoid);\n\n  const view = t.kml.lookAt || t.kml.camera;\n\n  const flyto = new KmlTourFlyTo(duration, flyToMode, view);\n  tour.addPlaylistEntry(flyto);\n}\n\nfunction processCamera(featureNode, entity, ellipsoid) {\n  const camera = queryFirstNode(featureNode, \"Camera\", namespaces.kml);\n  if (defined(camera)) {\n    const lon = queryNumericValue(camera, \"longitude\", namespaces.kml) ?? 0.0;\n    const lat = queryNumericValue(camera, \"latitude\", namespaces.kml) ?? 0.0;\n    const altitude =\n      queryNumericValue(camera, \"altitude\", namespaces.kml) ?? 0.0;\n\n    const heading = queryNumericValue(camera, \"heading\", namespaces.kml) ?? 0.0;\n    const tilt = queryNumericValue(camera, \"tilt\", namespaces.kml) ?? 0.0;\n    const roll = queryNumericValue(camera, \"roll\", namespaces.kml) ?? 0.0;\n\n    const position = Cartesian3.fromDegrees(lon, lat, altitude, ellipsoid);\n    const hpr = HeadingPitchRoll.fromDegrees(heading, tilt - 90.0, roll);\n\n    entity.kml.camera = new KmlCamera(position, hpr);\n  }\n}\n\nfunction processLookAt(featureNode, entity, ellipsoid) {\n  const lookAt = queryFirstNode(featureNode, \"LookAt\", namespaces.kml);\n  if (defined(lookAt)) {\n    const lon = queryNumericValue(lookAt, \"longitude\", namespaces.kml) ?? 0.0;\n    const lat = queryNumericValue(lookAt, \"latitude\", namespaces.kml) ?? 0.0;\n    const altitude =\n      queryNumericValue(lookAt, \"altitude\", namespaces.kml) ?? 0.0;\n    let heading = queryNumericValue(lookAt, \"heading\", namespaces.kml);\n    let tilt = queryNumericValue(lookAt, \"tilt\", namespaces.kml);\n    const range = queryNumericValue(lookAt, \"range\", namespaces.kml) ?? 0.0;\n\n    tilt = CesiumMath.toRadians(tilt ?? 0.0);\n    heading = CesiumMath.toRadians(heading ?? 0.0);\n\n    const hpr = new HeadingPitchRange(\n      heading,\n      tilt - CesiumMath.PI_OVER_TWO,\n      range,\n    );\n    const viewPoint = Cartesian3.fromDegrees(lon, lat, altitude, ellipsoid);\n\n    entity.kml.lookAt = new KmlLookAt(viewPoint, hpr);\n  }\n}\n\nfunction processScreenOverlay(\n  dataSource,\n  screenOverlayNode,\n  processingData,\n  deferredLoading,\n) {\n  const screenOverlay = processingData.screenOverlayContainer;\n  if (!defined(screenOverlay)) {\n    return undefined;\n  }\n\n  const sourceResource = processingData.sourceResource;\n  const uriResolver = processingData.uriResolver;\n\n  const iconNode = queryFirstNode(screenOverlayNode, \"Icon\", namespaces.kml);\n  const icon = getIconHref(\n    iconNode,\n    dataSource,\n    sourceResource,\n    uriResolver,\n    false,\n  );\n\n  if (!defined(icon)) {\n    return undefined;\n  }\n\n  const img = document.createElement(\"img\");\n  dataSource._screenOverlays.push(img);\n\n  img.src = icon.url;\n  img.onload = function () {\n    const styles = [\"position: absolute\"];\n\n    const screenXY = queryFirstNode(\n      screenOverlayNode,\n      \"screenXY\",\n      namespaces.kml,\n    );\n    const overlayXY = queryFirstNode(\n      screenOverlayNode,\n      \"overlayXY\",\n      namespaces.kml,\n    );\n    const size = queryFirstNode(screenOverlayNode, \"size\", namespaces.kml);\n\n    let x, y;\n    let xUnit, yUnit;\n    let xStyle, yStyle;\n\n    if (defined(size)) {\n      x = queryNumericAttribute(size, \"x\");\n      y = queryNumericAttribute(size, \"y\");\n      xUnit = queryStringAttribute(size, \"xunits\");\n      yUnit = queryStringAttribute(size, \"yunits\");\n\n      if (defined(x) && x !== -1 && x !== 0) {\n        if (xUnit === \"fraction\") {\n          xStyle = `width: ${Math.floor(x * 100)}%`;\n        } else if (xUnit === \"pixels\") {\n          xStyle = `width: ${x}px`;\n        }\n\n        styles.push(xStyle);\n      }\n\n      if (defined(y) && y !== -1 && y !== 0) {\n        if (yUnit === \"fraction\") {\n          yStyle = `height: ${Math.floor(y * 100)}%`;\n        } else if (yUnit === \"pixels\") {\n          yStyle = `height: ${y}px`;\n        }\n\n        styles.push(yStyle);\n      }\n    }\n\n    // set the interim style so the width/height properties get calculated\n    img.style = styles.join(\";\");\n\n    let xOrigin = 0;\n    let yOrigin = img.height;\n\n    if (defined(overlayXY)) {\n      x = queryNumericAttribute(overlayXY, \"x\");\n      y = queryNumericAttribute(overlayXY, \"y\");\n      xUnit = queryStringAttribute(overlayXY, \"xunits\");\n      yUnit = queryStringAttribute(overlayXY, \"yunits\");\n\n      if (defined(x)) {\n        if (xUnit === \"fraction\") {\n          xOrigin = x * img.width;\n        } else if (xUnit === \"pixels\") {\n          xOrigin = x;\n        } else if (xUnit === \"insetPixels\") {\n          xOrigin = x;\n        }\n      }\n\n      if (defined(y)) {\n        if (yUnit === \"fraction\") {\n          yOrigin = y * img.height;\n        } else if (yUnit === \"pixels\") {\n          yOrigin = y;\n        } else if (yUnit === \"insetPixels\") {\n          yOrigin = y;\n        }\n      }\n    }\n\n    if (defined(screenXY)) {\n      x = queryNumericAttribute(screenXY, \"x\");\n      y = queryNumericAttribute(screenXY, \"y\");\n      xUnit = queryStringAttribute(screenXY, \"xunits\");\n      yUnit = queryStringAttribute(screenXY, \"yunits\");\n\n      if (defined(x)) {\n        if (xUnit === \"fraction\") {\n          xStyle = `${\"left: \" + \"calc(\"}${Math.floor(\n            x * 100,\n          )}% - ${xOrigin}px)`;\n        } else if (xUnit === \"pixels\") {\n          xStyle = `left: ${x - xOrigin}px`;\n        } else if (xUnit === \"insetPixels\") {\n          xStyle = `right: ${x - xOrigin}px`;\n        }\n\n        styles.push(xStyle);\n      }\n\n      if (defined(y)) {\n        if (yUnit === \"fraction\") {\n          yStyle = `${\"bottom: \" + \"calc(\"}${Math.floor(\n            y * 100,\n          )}% - ${yOrigin}px)`;\n        } else if (yUnit === \"pixels\") {\n          yStyle = `bottom: ${y - yOrigin}px`;\n        } else if (yUnit === \"insetPixels\") {\n          yStyle = `top: ${y - yOrigin}px`;\n        }\n\n        styles.push(yStyle);\n      }\n    }\n\n    img.style = styles.join(\";\");\n  };\n\n  screenOverlay.appendChild(img);\n}\n\nfunction processGroundOverlay(\n  dataSource,\n  groundOverlay,\n  processingData,\n  deferredLoading,\n) {\n  const r = processFeature(dataSource, groundOverlay, processingData);\n  const entity = r.entity;\n\n  let geometry;\n  let isLatLonQuad = false;\n\n  const ellipsoid = dataSource._ellipsoid;\n  const positions = readCoordinates(\n    queryFirstNode(groundOverlay, \"LatLonQuad\", namespaces.gx),\n    ellipsoid,\n  );\n  const zIndex = queryNumericValue(groundOverlay, \"drawOrder\", namespaces.kml);\n  if (defined(positions)) {\n    geometry = createDefaultPolygon();\n    geometry.hierarchy = new PolygonHierarchy(positions);\n    geometry.zIndex = zIndex;\n    entity.polygon = geometry;\n    isLatLonQuad = true;\n  } else {\n    geometry = new RectangleGraphics();\n    geometry.zIndex = zIndex;\n    entity.rectangle = geometry;\n\n    const latLonBox = queryFirstNode(\n      groundOverlay,\n      \"LatLonBox\",\n      namespaces.kml,\n    );\n    if (defined(latLonBox)) {\n      let west = queryNumericValue(latLonBox, \"west\", namespaces.kml);\n      let south = queryNumericValue(latLonBox, \"south\", namespaces.kml);\n      let east = queryNumericValue(latLonBox, \"east\", namespaces.kml);\n      let north = queryNumericValue(latLonBox, \"north\", namespaces.kml);\n\n      if (defined(west)) {\n        west = CesiumMath.negativePiToPi(CesiumMath.toRadians(west));\n      }\n      if (defined(south)) {\n        south = CesiumMath.clampToLatitudeRange(CesiumMath.toRadians(south));\n      }\n      if (defined(east)) {\n        east = CesiumMath.negativePiToPi(CesiumMath.toRadians(east));\n      }\n      if (defined(north)) {\n        north = CesiumMath.clampToLatitudeRange(CesiumMath.toRadians(north));\n      }\n      geometry.coordinates = new Rectangle(west, south, east, north);\n\n      const rotation = queryNumericValue(latLonBox, \"rotation\", namespaces.kml);\n      if (defined(rotation)) {\n        const rotationRadians = CesiumMath.toRadians(rotation);\n        geometry.rotation = rotationRadians;\n        geometry.stRotation = rotationRadians;\n      }\n    }\n  }\n\n  const iconNode = queryFirstNode(groundOverlay, \"Icon\", namespaces.kml);\n  const href = getIconHref(\n    iconNode,\n    dataSource,\n    processingData.sourceResource,\n    processingData.uriResolver,\n    true,\n  );\n  if (defined(href)) {\n    if (isLatLonQuad) {\n      oneTimeWarning(\n        \"kml-gx:LatLonQuad\",\n        \"KML - gx:LatLonQuad Icon does not support texture projection.\",\n      );\n    }\n    const x = queryNumericValue(iconNode, \"x\", namespaces.gx);\n    const y = queryNumericValue(iconNode, \"y\", namespaces.gx);\n    const w = queryNumericValue(iconNode, \"w\", namespaces.gx);\n    const h = queryNumericValue(iconNode, \"h\", namespaces.gx);\n\n    if (defined(x) || defined(y) || defined(w) || defined(h)) {\n      oneTimeWarning(\n        \"kml-groundOverlay-xywh\",\n        \"KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays\",\n      );\n    }\n\n    geometry.material = href;\n    geometry.material.color = queryColorValue(\n      groundOverlay,\n      \"color\",\n      namespaces.kml,\n    );\n    geometry.material.transparent = true;\n  } else {\n    geometry.material = queryColorValue(groundOverlay, \"color\", namespaces.kml);\n  }\n\n  let altitudeMode = queryStringValue(\n    groundOverlay,\n    \"altitudeMode\",\n    namespaces.kml,\n  );\n\n  if (defined(altitudeMode)) {\n    if (altitudeMode === \"absolute\") {\n      //Use height above ellipsoid until we support MSL.\n      geometry.height = queryNumericValue(\n        groundOverlay,\n        \"altitude\",\n        namespaces.kml,\n      );\n      geometry.zIndex = undefined;\n    } else if (altitudeMode !== \"clampToGround\") {\n      oneTimeWarning(\n        \"kml-altitudeMode-unknown\",\n        `KML - Unknown altitudeMode: ${altitudeMode}`,\n      );\n    }\n    // else just use the default of 0 until we support 'clampToGround'\n  } else {\n    altitudeMode = queryStringValue(\n      groundOverlay,\n      \"altitudeMode\",\n      namespaces.gx,\n    );\n    if (altitudeMode === \"relativeToSeaFloor\") {\n      oneTimeWarning(\n        \"kml-altitudeMode-relativeToSeaFloor\",\n        \"KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute.\",\n      );\n      geometry.height = queryNumericValue(\n        groundOverlay,\n        \"altitude\",\n        namespaces.kml,\n      );\n      geometry.zIndex = undefined;\n    } else if (altitudeMode === \"clampToSeaFloor\") {\n      oneTimeWarning(\n        \"kml-altitudeMode-clampToSeaFloor\",\n        \"KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround.\",\n      );\n    } else if (defined(altitudeMode)) {\n      oneTimeWarning(\n        \"kml-altitudeMode-unknown\",\n        `KML - Unknown altitudeMode: ${altitudeMode}`,\n      );\n    }\n  }\n}\n\nfunction processUnsupportedFeature(\n  dataSource,\n  node,\n  processingData,\n  deferredLoading,\n) {\n  dataSource._unsupportedNode.raiseEvent(\n    dataSource,\n    processingData.parentEntity,\n    node,\n    processingData.entityCollection,\n    processingData.styleCollection,\n    processingData.sourceResource,\n    processingData.uriResolver,\n  );\n  oneTimeWarning(\n    `kml-unsupportedFeature-${node.nodeName}`,\n    `KML - Unsupported feature: ${node.nodeName}`,\n  );\n}\n\nconst RefreshMode = {\n  INTERVAL: 0,\n  EXPIRE: 1,\n  STOP: 2,\n};\n\nfunction cleanupString(s) {\n  if (!defined(s) || s.length === 0) {\n    return \"\";\n  }\n\n  const sFirst = s[0];\n  if (sFirst === \"&\" || sFirst === \"?\") {\n    s = s.substring(1);\n  }\n\n  return s;\n}\n\nconst zeroRectangle = new Rectangle();\nconst scratchCartographic = new Cartographic();\nconst scratchCartesian2 = new Cartesian2();\nconst scratchCartesian3 = new Cartesian3();\n\nfunction processNetworkLinkQueryString(\n  resource,\n  camera,\n  canvas,\n  viewBoundScale,\n  bbox,\n  ellipsoid,\n) {\n  function fixLatitude(value) {\n    if (value < -CesiumMath.PI_OVER_TWO) {\n      return -CesiumMath.PI_OVER_TWO;\n    } else if (value > CesiumMath.PI_OVER_TWO) {\n      return CesiumMath.PI_OVER_TWO;\n    }\n    return value;\n  }\n\n  function fixLongitude(value) {\n    if (value > CesiumMath.PI) {\n      return value - CesiumMath.TWO_PI;\n    } else if (value < -CesiumMath.PI) {\n      return value + CesiumMath.TWO_PI;\n    }\n\n    return value;\n  }\n\n  let queryString = objectToQuery(resource.queryParameters);\n\n  // objectToQuery escapes [ and ], so fix that\n  queryString = queryString.replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n\n  if (defined(camera) && camera._mode !== SceneMode.MORPHING) {\n    let centerCartesian;\n    let centerCartographic;\n\n    bbox = bbox ?? zeroRectangle;\n    if (defined(canvas)) {\n      scratchCartesian2.x = canvas.clientWidth * 0.5;\n      scratchCartesian2.y = canvas.clientHeight * 0.5;\n      centerCartesian = camera.pickEllipsoid(\n        scratchCartesian2,\n        ellipsoid,\n        scratchCartesian3,\n      );\n    }\n\n    if (defined(centerCartesian)) {\n      centerCartographic = ellipsoid.cartesianToCartographic(\n        centerCartesian,\n        scratchCartographic,\n      );\n    } else {\n      centerCartographic = Rectangle.center(bbox, scratchCartographic);\n      centerCartesian = ellipsoid.cartographicToCartesian(centerCartographic);\n    }\n\n    if (\n      defined(viewBoundScale) &&\n      !CesiumMath.equalsEpsilon(viewBoundScale, 1.0, CesiumMath.EPSILON9)\n    ) {\n      const newHalfWidth = bbox.width * viewBoundScale * 0.5;\n      const newHalfHeight = bbox.height * viewBoundScale * 0.5;\n      bbox = new Rectangle(\n        fixLongitude(centerCartographic.longitude - newHalfWidth),\n        fixLatitude(centerCartographic.latitude - newHalfHeight),\n        fixLongitude(centerCartographic.longitude + newHalfWidth),\n        fixLatitude(centerCartographic.latitude + newHalfHeight),\n      );\n    }\n\n    queryString = queryString.replace(\n      \"[bboxWest]\",\n      CesiumMath.toDegrees(bbox.west).toString(),\n    );\n    queryString = queryString.replace(\n      \"[bboxSouth]\",\n      CesiumMath.toDegrees(bbox.south).toString(),\n    );\n    queryString = queryString.replace(\n      \"[bboxEast]\",\n      CesiumMath.toDegrees(bbox.east).toString(),\n    );\n    queryString = queryString.replace(\n      \"[bboxNorth]\",\n      CesiumMath.toDegrees(bbox.north).toString(),\n    );\n\n    const lon = CesiumMath.toDegrees(centerCartographic.longitude).toString();\n    const lat = CesiumMath.toDegrees(centerCartographic.latitude).toString();\n    queryString = queryString.replace(\"[lookatLon]\", lon);\n    queryString = queryString.replace(\"[lookatLat]\", lat);\n    queryString = queryString.replace(\n      \"[lookatTilt]\",\n      CesiumMath.toDegrees(camera.pitch).toString(),\n    );\n    queryString = queryString.replace(\n      \"[lookatHeading]\",\n      CesiumMath.toDegrees(camera.heading).toString(),\n    );\n    queryString = queryString.replace(\n      \"[lookatRange]\",\n      Cartesian3.distance(camera.positionWC, centerCartesian),\n    );\n    queryString = queryString.replace(\"[lookatTerrainLon]\", lon);\n    queryString = queryString.replace(\"[lookatTerrainLat]\", lat);\n    queryString = queryString.replace(\n      \"[lookatTerrainAlt]\",\n      centerCartographic.height.toString(),\n    );\n\n    ellipsoid.cartesianToCartographic(camera.positionWC, scratchCartographic);\n    queryString = queryString.replace(\n      \"[cameraLon]\",\n      CesiumMath.toDegrees(scratchCartographic.longitude).toString(),\n    );\n    queryString = queryString.replace(\n      \"[cameraLat]\",\n      CesiumMath.toDegrees(scratchCartographic.latitude).toString(),\n    );\n    queryString = queryString.replace(\n      \"[cameraAlt]\",\n      CesiumMath.toDegrees(scratchCartographic.height).toString(),\n    );\n\n    const frustum = camera.frustum;\n    const aspectRatio = frustum.aspectRatio;\n    let horizFov = \"\";\n    let vertFov = \"\";\n    if (defined(aspectRatio)) {\n      const fov = CesiumMath.toDegrees(frustum.fov);\n      if (aspectRatio > 1.0) {\n        horizFov = fov;\n        vertFov = fov / aspectRatio;\n      } else {\n        vertFov = fov;\n        horizFov = fov * aspectRatio;\n      }\n    }\n    queryString = queryString.replace(\"[horizFov]\", horizFov.toString());\n    queryString = queryString.replace(\"[vertFov]\", vertFov.toString());\n  } else {\n    queryString = queryString.replace(\"[bboxWest]\", \"-180\");\n    queryString = queryString.replace(\"[bboxSouth]\", \"-90\");\n    queryString = queryString.replace(\"[bboxEast]\", \"180\");\n    queryString = queryString.replace(\"[bboxNorth]\", \"90\");\n\n    queryString = queryString.replace(\"[lookatLon]\", \"\");\n    queryString = queryString.replace(\"[lookatLat]\", \"\");\n    queryString = queryString.replace(\"[lookatRange]\", \"\");\n    queryString = queryString.replace(\"[lookatTilt]\", \"\");\n    queryString = queryString.replace(\"[lookatHeading]\", \"\");\n    queryString = queryString.replace(\"[lookatTerrainLon]\", \"\");\n    queryString = queryString.replace(\"[lookatTerrainLat]\", \"\");\n    queryString = queryString.replace(\"[lookatTerrainAlt]\", \"\");\n\n    queryString = queryString.replace(\"[cameraLon]\", \"\");\n    queryString = queryString.replace(\"[cameraLat]\", \"\");\n    queryString = queryString.replace(\"[cameraAlt]\", \"\");\n    queryString = queryString.replace(\"[horizFov]\", \"\");\n    queryString = queryString.replace(\"[vertFov]\", \"\");\n  }\n\n  if (defined(canvas)) {\n    queryString = queryString.replace(\"[horizPixels]\", canvas.clientWidth);\n    queryString = queryString.replace(\"[vertPixels]\", canvas.clientHeight);\n  } else {\n    queryString = queryString.replace(\"[horizPixels]\", \"\");\n    queryString = queryString.replace(\"[vertPixels]\", \"\");\n  }\n\n  queryString = queryString.replace(\"[terrainEnabled]\", \"1\");\n  queryString = queryString.replace(\"[clientVersion]\", \"1\");\n  queryString = queryString.replace(\"[kmlVersion]\", \"2.2\");\n  queryString = queryString.replace(\"[clientName]\", \"Cesium\");\n  queryString = queryString.replace(\"[language]\", \"English\");\n\n  resource.setQueryParameters(queryToObject(queryString));\n}\n\nfunction processNetworkLink(dataSource, node, processingData, deferredLoading) {\n  const r = processFeature(dataSource, node, processingData);\n  const networkEntity = r.entity;\n\n  const sourceResource = processingData.sourceResource;\n  const uriResolver = processingData.uriResolver;\n\n  let link = queryFirstNode(node, \"Link\", namespaces.kml);\n\n  if (!defined(link)) {\n    link = queryFirstNode(node, \"Url\", namespaces.kml);\n  }\n  if (defined(link)) {\n    let href = queryStringValue(link, \"href\", namespaces.kml);\n    let viewRefreshMode;\n    let viewBoundScale;\n    if (defined(href)) {\n      let newSourceUri = href;\n      href = resolveHref(href, sourceResource, processingData.uriResolver);\n\n      // We need to pass in the original path if resolveHref returns a data uri because the network link\n      //  references a document in a KMZ archive\n      if (/^data:/.test(href.getUrlComponent())) {\n        // So if sourceUri isn't the kmz file, then its another kml in the archive, so resolve it\n        if (!/\\.kmz/i.test(sourceResource.getUrlComponent())) {\n          newSourceUri = sourceResource.getDerivedResource({\n            url: newSourceUri,\n          });\n        }\n      } else {\n        newSourceUri = href.clone(); // Not a data uri so use the fully qualified uri\n        viewRefreshMode = queryStringValue(\n          link,\n          \"viewRefreshMode\",\n          namespaces.kml,\n        );\n        if (viewRefreshMode === \"onRegion\") {\n          oneTimeWarning(\n            \"kml-refrehMode-onRegion\",\n            \"KML - Unsupported viewRefreshMode: onRegion\",\n          );\n          return;\n        }\n        viewBoundScale =\n          queryStringValue(link, \"viewBoundScale\", namespaces.kml) ?? 1.0;\n        const defaultViewFormat =\n          viewRefreshMode === \"onStop\"\n            ? \"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]\"\n            : \"\";\n        const viewFormat =\n          queryStringValue(link, \"viewFormat\", namespaces.kml) ??\n          defaultViewFormat;\n        const httpQuery = queryStringValue(link, \"httpQuery\", namespaces.kml);\n        if (defined(viewFormat)) {\n          href.setQueryParameters(queryToObject(cleanupString(viewFormat)));\n        }\n        if (defined(httpQuery)) {\n          href.setQueryParameters(queryToObject(cleanupString(httpQuery)));\n        }\n\n        const ellipsoid = dataSource._ellipsoid;\n        processNetworkLinkQueryString(\n          href,\n          dataSource.camera,\n          dataSource.canvas,\n          viewBoundScale,\n          dataSource._lastCameraView.bbox,\n          ellipsoid,\n        );\n      }\n\n      const options = {\n        sourceUri: newSourceUri,\n        uriResolver: uriResolver,\n        context: networkEntity.id,\n        screenOverlayContainer: processingData.screenOverlayContainer,\n      };\n      const networkLinkCollection = new EntityCollection();\n      const promise = load(dataSource, networkLinkCollection, href, options)\n        .then(function (rootElement) {\n          const entities = dataSource._entityCollection;\n          const newEntities = networkLinkCollection.values;\n          entities.suspendEvents();\n          for (let i = 0; i < newEntities.length; i++) {\n            const newEntity = newEntities[i];\n            if (!defined(newEntity.parent)) {\n              newEntity.parent = networkEntity;\n              mergeAvailabilityWithParent(newEntity);\n            }\n\n            entities.add(newEntity);\n          }\n          entities.resumeEvents();\n\n          // Add network links to a list if we need they will need to be updated\n          const refreshMode = queryStringValue(\n            link,\n            \"refreshMode\",\n            namespaces.kml,\n          );\n          let refreshInterval =\n            queryNumericValue(link, \"refreshInterval\", namespaces.kml) ?? 0;\n          if (\n            (refreshMode === \"onInterval\" && refreshInterval > 0) ||\n            refreshMode === \"onExpire\" ||\n            viewRefreshMode === \"onStop\"\n          ) {\n            const networkLinkControl = queryFirstNode(\n              rootElement,\n              \"NetworkLinkControl\",\n              namespaces.kml,\n            );\n            const hasNetworkLinkControl = defined(networkLinkControl);\n\n            const now = JulianDate.now();\n            const networkLinkInfo = {\n              id: createGuid(),\n              href: href,\n              cookie: {},\n              lastUpdated: now,\n              updating: false,\n              entity: networkEntity,\n              viewBoundScale: viewBoundScale,\n              needsUpdate: false,\n              cameraUpdateTime: now,\n            };\n\n            let minRefreshPeriod = 0;\n            if (hasNetworkLinkControl) {\n              networkLinkInfo.cookie = queryToObject(\n                queryStringValue(\n                  networkLinkControl,\n                  \"cookie\",\n                  namespaces.kml,\n                ) ?? \"\",\n              );\n              minRefreshPeriod =\n                queryNumericValue(\n                  networkLinkControl,\n                  \"minRefreshPeriod\",\n                  namespaces.kml,\n                ) ?? 0;\n            }\n\n            if (refreshMode === \"onInterval\") {\n              if (hasNetworkLinkControl) {\n                refreshInterval = Math.max(minRefreshPeriod, refreshInterval);\n              }\n              networkLinkInfo.refreshMode = RefreshMode.INTERVAL;\n              networkLinkInfo.time = refreshInterval;\n            } else if (refreshMode === \"onExpire\") {\n              let expires;\n              if (hasNetworkLinkControl) {\n                expires = queryStringValue(\n                  networkLinkControl,\n                  \"expires\",\n                  namespaces.kml,\n                );\n              }\n              if (defined(expires)) {\n                try {\n                  const date = JulianDate.fromIso8601(expires);\n                  const diff = JulianDate.secondsDifference(date, now);\n                  if (diff > 0 && diff < minRefreshPeriod) {\n                    JulianDate.addSeconds(now, minRefreshPeriod, date);\n                  }\n                  networkLinkInfo.refreshMode = RefreshMode.EXPIRE;\n                  networkLinkInfo.time = date;\n                } catch (e) {\n                  oneTimeWarning(\n                    \"kml-refreshMode-onInterval-onExpire\",\n                    \"KML - NetworkLinkControl expires is not a valid date\",\n                  );\n                }\n              } else {\n                oneTimeWarning(\n                  \"kml-refreshMode-onExpire\",\n                  \"KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element\",\n                );\n              }\n            } else if (defined(dataSource.camera)) {\n              // Only allow onStop refreshes if we have a camera\n              networkLinkInfo.refreshMode = RefreshMode.STOP;\n              networkLinkInfo.time =\n                queryNumericValue(link, \"viewRefreshTime\", namespaces.kml) ?? 0;\n            } else {\n              oneTimeWarning(\n                \"kml-refrehMode-onStop-noCamera\",\n                \"A NetworkLink with viewRefreshMode=onStop requires the `camera` property to be defined.\",\n              );\n            }\n\n            if (defined(networkLinkInfo.refreshMode)) {\n              dataSource._networkLinks.set(networkLinkInfo.id, networkLinkInfo);\n            }\n          }\n        })\n        .catch(function (error) {\n          oneTimeWarning(`An error occured during loading ${href.url}`);\n          dataSource._error.raiseEvent(dataSource, error);\n        });\n\n      deferredLoading.addPromise(promise);\n    }\n  }\n}\n\nfunction processFeatureNode(dataSource, node, processingData, deferredLoading) {\n  const featureProcessor = featureTypes[node.localName];\n  if (defined(featureProcessor)) {\n    return featureProcessor(dataSource, node, processingData, deferredLoading);\n  }\n\n  return processUnsupportedFeature(\n    dataSource,\n    node,\n    processingData,\n    deferredLoading,\n  );\n}\n\nfunction loadKml(\n  dataSource,\n  entityCollection,\n  kml,\n  sourceResource,\n  uriResolver,\n  screenOverlayContainer,\n  context,\n) {\n  entityCollection.removeAll();\n\n  const documentElement = kml.documentElement;\n  const document =\n    documentElement.localName === \"Document\"\n      ? documentElement\n      : queryFirstNode(documentElement, \"Document\", namespaces.kml);\n  let name = queryStringValue(document, \"name\", namespaces.kml);\n  if (!defined(name)) {\n    name = getFilenameFromUri(sourceResource.getUrlComponent());\n  }\n\n  // Only set the name from the root document\n  if (!defined(dataSource._name)) {\n    dataSource._name = name;\n  }\n\n  const deferredLoading = new KmlDataSource._DeferredLoading(dataSource);\n  const styleCollection = new EntityCollection(dataSource);\n  return Promise.all(\n    processStyles(\n      dataSource,\n      kml,\n      styleCollection,\n      sourceResource,\n      false,\n      uriResolver,\n    ),\n  ).then(function () {\n    let element = kml.documentElement;\n    if (element.localName === \"kml\") {\n      const childNodes = element.childNodes;\n      for (let i = 0; i < childNodes.length; i++) {\n        const tmp = childNodes[i];\n        if (defined(featureTypes[tmp.localName])) {\n          element = tmp;\n          break;\n        }\n      }\n    }\n\n    const processingData = {\n      parentEntity: undefined,\n      entityCollection: entityCollection,\n      styleCollection: styleCollection,\n      sourceResource: sourceResource,\n      uriResolver: uriResolver,\n      context: context,\n      screenOverlayContainer: screenOverlayContainer,\n    };\n\n    entityCollection.suspendEvents();\n    processFeatureNode(dataSource, element, processingData, deferredLoading);\n    entityCollection.resumeEvents();\n\n    return deferredLoading.wait().then(function () {\n      return kml.documentElement;\n    });\n  });\n}\n\nasync function loadKmz(\n  dataSource,\n  entityCollection,\n  blob,\n  sourceResource,\n  screenOverlayContainer,\n) {\n  const zWorkerUri = buildModuleUrl(\"ThirdParty/Workers/zip-web-worker.js\");\n  const zWasmUri = buildModuleUrl(\"ThirdParty/zip-module.wasm\");\n  configure({\n    workerURI: zWorkerUri,\n    wasmURI: zWasmUri,\n  });\n\n  const reader = new ZipReader(new BlobReader(blob));\n  const entries = await reader.getEntries();\n\n  const promises = [];\n  const uriResolver = {};\n  let docEntry;\n  for (let i = 0; i < entries.length; i++) {\n    const entry = entries[i];\n    if (!entry.directory) {\n      if (/\\.kml$/i.test(entry.filename)) {\n        // We use the first KML document we come across\n        //  https://developers.google.com/kml/documentation/kmzarchives\n        // Unless we come across a .kml file at the root of the archive because GE does this\n        if (!defined(docEntry) || !/\\//i.test(entry.filename)) {\n          if (defined(docEntry)) {\n            // We found one at the root so load the initial kml as a data uri\n            promises.push(loadDataUriFromZip(docEntry, uriResolver));\n          }\n          docEntry = entry;\n        } else {\n          // Wasn't the first kml and wasn't at the root\n          promises.push(loadDataUriFromZip(entry, uriResolver));\n        }\n      } else {\n        promises.push(loadDataUriFromZip(entry, uriResolver));\n      }\n    }\n  }\n\n  // Now load the root KML document\n  if (defined(docEntry)) {\n    promises.push(loadXmlFromZip(docEntry, uriResolver));\n  }\n  await Promise.all(promises);\n  reader.close();\n  if (!defined(uriResolver.kml)) {\n    throw new RuntimeError(\"KMZ file does not contain a KML document.\");\n  }\n  uriResolver.keys = Object.keys(uriResolver);\n\n  return loadKml(\n    dataSource,\n    entityCollection,\n    uriResolver.kml,\n    sourceResource,\n    uriResolver,\n    screenOverlayContainer,\n  );\n}\n\nfunction load(dataSource, entityCollection, data, options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  let sourceUri = options.sourceUri;\n  const uriResolver = options.uriResolver;\n  const context = options.context;\n  let screenOverlayContainer = options.screenOverlayContainer;\n\n  let promise = data;\n  if (typeof data === \"string\" || data instanceof Resource) {\n    data = Resource.createIfNeeded(data);\n    promise = data.fetchBlob();\n    sourceUri = sourceUri ?? data.clone();\n\n    // Add resource credits to our list of credits to display\n    const resourceCredits = dataSource._resourceCredits;\n    const credits = data.credits;\n    if (defined(credits)) {\n      const length = credits.length;\n      for (let i = 0; i < length; i++) {\n        resourceCredits.push(credits[i]);\n      }\n    }\n  } else {\n    sourceUri = sourceUri ?? Resource.DEFAULT.clone();\n  }\n\n  sourceUri = Resource.createIfNeeded(sourceUri);\n\n  if (defined(screenOverlayContainer)) {\n    screenOverlayContainer = getElement(screenOverlayContainer);\n  }\n\n  return Promise.resolve(promise)\n    .then(function (dataToLoad) {\n      if (dataToLoad instanceof Blob) {\n        return isZipFile(dataToLoad).then(function (isZip) {\n          if (isZip) {\n            return loadKmz(\n              dataSource,\n              entityCollection,\n              dataToLoad,\n              sourceUri,\n              screenOverlayContainer,\n            );\n          }\n          return readBlobAsText(dataToLoad).then(function (text) {\n            //There's no official way to validate if a parse was successful.\n            //The following check detects the error on various browsers.\n\n            //Insert missing namespaces\n            text = insertNamespaces(text);\n\n            //Remove Duplicate Namespaces\n            text = removeDuplicateNamespaces(text);\n\n            //IE raises an exception\n            let kml;\n            let error;\n            try {\n              kml = parser.parseFromString(text, \"application/xml\");\n            } catch (e) {\n              error = e.toString();\n            }\n\n            //The parse succeeds on Chrome and Firefox, but the error\n            //handling is different in each.\n            if (\n              defined(error) ||\n              kml.body ||\n              kml.documentElement.tagName === \"parsererror\"\n            ) {\n              //Firefox has error information as the firstChild nodeValue.\n              let msg = defined(error)\n                ? error\n                : kml.documentElement.firstChild.nodeValue;\n\n              //Chrome has it in the body text.\n              if (!msg) {\n                msg = kml.body.innerText;\n              }\n\n              //Return the error\n              throw new RuntimeError(msg);\n            }\n            return loadKml(\n              dataSource,\n              entityCollection,\n              kml,\n              sourceUri,\n              uriResolver,\n              screenOverlayContainer,\n              context,\n            );\n          });\n        });\n      }\n      return loadKml(\n        dataSource,\n        entityCollection,\n        dataToLoad,\n        sourceUri,\n        uriResolver,\n        screenOverlayContainer,\n        context,\n      );\n    })\n    .catch(function (error) {\n      dataSource._error.raiseEvent(dataSource, error);\n      console.log(error);\n      return Promise.reject(error);\n    });\n}\n\n// NOTE: LoadOptions properties are repeated in ConstructorOptions because some\n// tooling does not support \"base types\" for @typedef.  Remove if/when\n// https://github.com/microsoft/TypeScript/issues/20077 and/or\n// https://github.com/jsdoc/jsdoc/issues/1199 actually get resolved\n/**\n * @typedef {object} KmlDataSource.LoadOptions\n *\n * Initialization options for the `load` method.\n *\n * @property {string} [sourceUri] Overrides the url to use for resolving relative links and other KML network features.\n * @property {boolean} [clampToGround=false] true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The global ellipsoid used for geographical calculations.\n * @property {Element|string} [screenOverlayContainer] A container for ScreenOverlay images.\n */\n\n/**\n * @typedef {object} KmlDataSource.ConstructorOptions\n *\n * Options for constructing a new KmlDataSource, or calling the static `load` method.\n *\n * @property {Camera} [camera] The camera that is used for viewRefreshModes and sending camera properties to network links.\n * @property {HTMLCanvasElement} [canvas] The canvas that is used for sending viewer properties to network links.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n *\n * @property {string} [sourceUri] Overrides the url to use for resolving relative links and other KML network features.\n * @property {boolean} [clampToGround=false] true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The global ellipsoid used for geographical calculations.\n * @property {Element|string} [screenOverlayContainer] A container for ScreenOverlay images.\n\n*/\n\n/**\n * A {@link DataSource} which processes Keyhole Markup Language 2.2 (KML).\n * <p>\n * KML support in Cesium is incomplete, but a large amount of the standard,\n * as well as Google's <code>gx</code> extension namespace, is supported. See Github issue\n * {@link https://github.com/CesiumGS/cesium/issues/873|#873} for a\n * detailed list of what is and isn't supported. Cesium will also write information to the\n * console when it encounters most unsupported features.\n * </p>\n * <p>\n * Non visual feature data, such as <code>atom:author</code> and <code>ExtendedData</code>\n * is exposed via an instance of {@link KmlFeatureData}, which is added to each {@link Entity}\n * under the <code>kml</code> property.\n * </p>\n *\n * @alias KmlDataSource\n * @constructor\n *\n * @param {KmlDataSource.ConstructorOptions} [options] Object describing initialization options\n *\n * @see {@link http://www.opengeospatial.org/standards/kml/|Open Geospatial Consortium KML Standard}\n * @see {@link https://developers.google.com/kml/|Google KML Documentation}\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=kml|Cesium Sandcastle KML Demo}\n *\n * @example\n * const viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.dataSources.add(Cesium.KmlDataSource.load('../../SampleData/facilities.kmz',\n *      {\n *           camera: viewer.scene.camera,\n *           canvas: viewer.scene.canvas\n *      })\n * );\n */\nfunction KmlDataSource(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const camera = options.camera;\n  const canvas = options.canvas;\n\n  this._changed = new Event();\n  this._error = new Event();\n  this._loading = new Event();\n  this._refresh = new Event();\n  this._unsupportedNode = new Event();\n\n  this._clock = undefined;\n  this._entityCollection = new EntityCollection(this);\n  this._name = undefined;\n  this._isLoading = false;\n  this._pinBuilder = new PinBuilder();\n  this._networkLinks = new AssociativeArray();\n  this._entityCluster = new EntityCluster();\n\n  /**\n   * The current size of this Canvas will be used to populate the Link parameters\n   * for client height and width.\n   *\n   * @type {HTMLCanvasElement | undefined}\n   */\n  this.canvas = canvas;\n\n  /**\n   * The position and orientation of this {@link Camera} will be used to\n   * populate various camera parameters when making network requests.\n   * Camera movement will determine when to trigger NetworkLink refresh if\n   * <code>viewRefreshMode</code> is <code>onStop</code>.\n   *\n   * @type {Camera | undefined}\n   */\n  this.camera = camera;\n\n  this._lastCameraView = {\n    position: defined(camera) ? Cartesian3.clone(camera.positionWC) : undefined,\n    direction: defined(camera)\n      ? Cartesian3.clone(camera.directionWC)\n      : undefined,\n    up: defined(camera) ? Cartesian3.clone(camera.upWC) : undefined,\n    bbox: defined(camera)\n      ? camera.computeViewRectangle()\n      : Rectangle.clone(Rectangle.MAX_VALUE),\n  };\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n\n  // User specified credit\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n\n  // Create a list of Credit's from the resource that the user can't remove\n  this._resourceCredits = [];\n\n  this._kmlTours = [];\n\n  this._screenOverlays = [];\n}\n\n/**\n * Creates a Promise to a new instance loaded with the provided KML data.\n *\n * @param {Resource|string|Document|Blob} data A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document.\n * @param {KmlDataSource.ConstructorOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<KmlDataSource>} A promise that will resolve to a new KmlDataSource instance once the KML is loaded.\n */\nKmlDataSource.load = function (data, options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const dataSource = new KmlDataSource(options);\n  return dataSource.load(data, options);\n};\n\nObject.defineProperties(KmlDataSource.prototype, {\n  /**\n   * Gets or sets a human-readable name for this instance.\n   * This will be automatically be set to the KML document name on load.\n   * @memberof KmlDataSource.prototype\n   * @type {string}\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n    set: function (value) {\n      if (this._name !== value) {\n        this._name = value;\n        this._changed.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * Gets the clock settings defined by the loaded KML. This represents the total\n   * availability interval for all time-dynamic data. If the KML does not contain\n   * time-dynamic data, this value is undefined.\n   * @memberof KmlDataSource.prototype\n   * @type {DataSourceClock}\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n  },\n  /**\n   * Gets the collection of {@link Entity} instances.\n   * @memberof KmlDataSource.prototype\n   * @type {EntityCollection}\n   */\n  entities: {\n    get: function () {\n      return this._entityCollection;\n    },\n  },\n  /**\n   * Gets a value indicating if the data source is currently loading data.\n   * @memberof KmlDataSource.prototype\n   * @type {boolean}\n   */\n  isLoading: {\n    get: function () {\n      return this._isLoading;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the underlying data changes.\n   * @memberof KmlDataSource.prototype\n   * @type {Event}\n   */\n  changedEvent: {\n    get: function () {\n      return this._changed;\n    },\n  },\n  /**\n   * Gets an event that will be raised if an error is encountered during processing.\n   * @memberof KmlDataSource.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: function () {\n      return this._error;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the data source either starts or stops loading.\n   * @memberof KmlDataSource.prototype\n   * @type {Event}\n   */\n  loadingEvent: {\n    get: function () {\n      return this._loading;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the data source refreshes a network link.\n   * @memberof KmlDataSource.prototype\n   * @type {Event}\n   */\n  refreshEvent: {\n    get: function () {\n      return this._refresh;\n    },\n  },\n  /**\n   * Gets an event that will be raised when the data source finds an unsupported node type.\n   * @memberof KmlDataSource.prototype\n   * @type {Event}\n   */\n  unsupportedNodeEvent: {\n    get: function () {\n      return this._unsupportedNode;\n    },\n  },\n  /**\n   * Gets whether or not this data source should be displayed.\n   * @memberof KmlDataSource.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._entityCollection.show;\n    },\n    set: function (value) {\n      this._entityCollection.show = value;\n    },\n  },\n\n  /**\n   * Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.\n   *\n   * @memberof KmlDataSource.prototype\n   * @type {EntityCluster}\n   */\n  clustering: {\n    get: function () {\n      return this._entityCluster;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value must be defined.\");\n      }\n      //>>includeEnd('debug');\n      this._entityCluster = value;\n    },\n  },\n  /**\n   * Gets the credit that will be displayed for the data source\n   * @memberof KmlDataSource.prototype\n   * @type {Credit}\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n  /**\n   * Gets the KML Tours that are used to guide the camera to specified destinations on given time intervals.\n   * @memberof KmlDataSource.prototype\n   * @type {KmlTour[]}\n   */\n  kmlTours: {\n    get: function () {\n      return this._kmlTours;\n    },\n  },\n});\n\n/**\n * Asynchronously loads the provided KML data, replacing any existing data.\n *\n * @param {Resource|string|Document|Blob} data A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document.\n * @param {KmlDataSource.LoadOptions} [options] An object specifying configuration options\n *\n * @returns {Promise<KmlDataSource>} A promise that will resolve to this instances once the KML is loaded.\n */\nKmlDataSource.prototype.load = function (data, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(data)) {\n    throw new DeveloperError(\"data is required.\");\n  }\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  DataSource.setLoading(this, true);\n\n  const oldName = this._name;\n  this._name = undefined;\n  this._clampToGround = options.clampToGround ?? false;\n\n  const that = this;\n  return load(this, this._entityCollection, data, options)\n    .then(function () {\n      let clock;\n\n      const availability = that._entityCollection.computeAvailability();\n\n      let start = availability.start;\n      let stop = availability.stop;\n      const isMinStart = JulianDate.equals(start, Iso8601.MINIMUM_VALUE);\n      const isMaxStop = JulianDate.equals(stop, Iso8601.MAXIMUM_VALUE);\n      if (!isMinStart || !isMaxStop) {\n        let date;\n\n        //If start is min time just start at midnight this morning, local time\n        if (isMinStart) {\n          date = new Date();\n          date.setHours(0, 0, 0, 0);\n          start = JulianDate.fromDate(date);\n        }\n\n        //If stop is max value just stop at midnight tonight, local time\n        if (isMaxStop) {\n          date = new Date();\n          date.setHours(24, 0, 0, 0);\n          stop = JulianDate.fromDate(date);\n        }\n\n        clock = new DataSourceClock();\n        clock.startTime = start;\n        clock.stopTime = stop;\n        clock.currentTime = JulianDate.clone(start);\n        clock.clockRange = ClockRange.LOOP_STOP;\n        clock.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n        clock.multiplier = Math.round(\n          Math.min(\n            Math.max(JulianDate.secondsDifference(stop, start) / 60, 1),\n            3.15569e7,\n          ),\n        );\n      }\n\n      let changed = false;\n      if (clock !== that._clock) {\n        that._clock = clock;\n        changed = true;\n      }\n\n      if (oldName !== that._name) {\n        changed = true;\n      }\n\n      if (changed) {\n        that._changed.raiseEvent(that);\n      }\n\n      DataSource.setLoading(that, false);\n\n      return that;\n    })\n    .catch(function (error) {\n      DataSource.setLoading(that, false);\n      that._error.raiseEvent(that, error);\n      console.log(error);\n      return Promise.reject(error);\n    });\n};\n\n/**\n * Cleans up any non-entity elements created by the data source. Currently this only affects ScreenOverlay elements.\n */\nKmlDataSource.prototype.destroy = function () {\n  while (this._screenOverlays.length > 0) {\n    const elem = this._screenOverlays.pop();\n    elem.remove();\n  }\n};\n\nfunction mergeAvailabilityWithParent(child) {\n  const parent = child.parent;\n  if (defined(parent)) {\n    const parentAvailability = parent.availability;\n    if (defined(parentAvailability)) {\n      const childAvailability = child.availability;\n      if (defined(childAvailability)) {\n        childAvailability.intersect(parentAvailability);\n      } else {\n        child.availability = parentAvailability;\n      }\n    }\n  }\n}\n\nfunction getNetworkLinkUpdateCallback(\n  dataSource,\n  networkLink,\n  newEntityCollection,\n  networkLinks,\n  processedHref,\n) {\n  return function (rootElement) {\n    if (!networkLinks.contains(networkLink.id)) {\n      // Got into the odd case where a parent network link was updated while a child\n      //  network link update was in flight, so just throw it away.\n      return;\n    }\n    let remove = false;\n    const networkLinkControl = queryFirstNode(\n      rootElement,\n      \"NetworkLinkControl\",\n      namespaces.kml,\n    );\n    const hasNetworkLinkControl = defined(networkLinkControl);\n\n    let minRefreshPeriod = 0;\n    if (hasNetworkLinkControl) {\n      if (\n        defined(queryFirstNode(networkLinkControl, \"Update\", namespaces.kml))\n      ) {\n        oneTimeWarning(\n          \"kml-networkLinkControl-update\",\n          \"KML - NetworkLinkControl updates aren't supported.\",\n        );\n        networkLink.updating = false;\n        networkLinks.remove(networkLink.id);\n        return;\n      }\n      networkLink.cookie = queryToObject(\n        queryStringValue(networkLinkControl, \"cookie\", namespaces.kml) ?? \"\",\n      );\n      minRefreshPeriod =\n        queryNumericValue(\n          networkLinkControl,\n          \"minRefreshPeriod\",\n          namespaces.kml,\n        ) ?? 0;\n    }\n\n    const now = JulianDate.now();\n    const refreshMode = networkLink.refreshMode;\n    if (refreshMode === RefreshMode.INTERVAL) {\n      if (defined(networkLinkControl)) {\n        networkLink.time = Math.max(minRefreshPeriod, networkLink.time);\n      }\n    } else if (refreshMode === RefreshMode.EXPIRE) {\n      let expires;\n      if (defined(networkLinkControl)) {\n        expires = queryStringValue(\n          networkLinkControl,\n          \"expires\",\n          namespaces.kml,\n        );\n      }\n      if (defined(expires)) {\n        try {\n          const date = JulianDate.fromIso8601(expires);\n          const diff = JulianDate.secondsDifference(date, now);\n          if (diff > 0 && diff < minRefreshPeriod) {\n            JulianDate.addSeconds(now, minRefreshPeriod, date);\n          }\n          networkLink.time = date;\n        } catch (e) {\n          oneTimeWarning(\n            \"kml-networkLinkControl-expires\",\n            \"KML - NetworkLinkControl expires is not a valid date\",\n          );\n          remove = true;\n        }\n      } else {\n        oneTimeWarning(\n          \"kml-refreshMode-onExpire\",\n          \"KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element\",\n        );\n        remove = true;\n      }\n    }\n\n    const networkLinkEntity = networkLink.entity;\n    const entityCollection = dataSource._entityCollection;\n    const newEntities = newEntityCollection.values;\n\n    function removeChildren(entity) {\n      entityCollection.remove(entity);\n      const children = entity._children;\n      const count = children.length;\n      for (let i = 0; i < count; ++i) {\n        removeChildren(children[i]);\n      }\n    }\n\n    // Remove old entities\n    entityCollection.suspendEvents();\n    const entitiesCopy = entityCollection.values.slice();\n    let i;\n    for (i = 0; i < entitiesCopy.length; ++i) {\n      const entityToRemove = entitiesCopy[i];\n      if (entityToRemove.parent === networkLinkEntity) {\n        entityToRemove.parent = undefined;\n        removeChildren(entityToRemove);\n      }\n    }\n    entityCollection.resumeEvents();\n\n    // Add new entities\n    entityCollection.suspendEvents();\n    for (i = 0; i < newEntities.length; i++) {\n      const newEntity = newEntities[i];\n      if (!defined(newEntity.parent)) {\n        newEntity.parent = networkLinkEntity;\n        mergeAvailabilityWithParent(newEntity);\n      }\n      entityCollection.add(newEntity);\n    }\n    entityCollection.resumeEvents();\n\n    // No refresh information remove it, otherwise update lastUpdate time\n    if (remove) {\n      networkLinks.remove(networkLink.id);\n    } else {\n      networkLink.lastUpdated = now;\n    }\n\n    const availability = entityCollection.computeAvailability();\n\n    const start = availability.start;\n    const stop = availability.stop;\n    const isMinStart = JulianDate.equals(start, Iso8601.MINIMUM_VALUE);\n    const isMaxStop = JulianDate.equals(stop, Iso8601.MAXIMUM_VALUE);\n    if (!isMinStart || !isMaxStop) {\n      const clock = dataSource._clock;\n\n      if (clock.startTime !== start || clock.stopTime !== stop) {\n        clock.startTime = start;\n        clock.stopTime = stop;\n        dataSource._changed.raiseEvent(dataSource);\n      }\n    }\n\n    networkLink.updating = false;\n    networkLink.needsUpdate = false;\n    dataSource._refresh.raiseEvent(\n      dataSource,\n      processedHref.getUrlComponent(true),\n    );\n  };\n}\n\nconst entitiesToIgnore = new AssociativeArray();\n\n/**\n * Updates any NetworkLink that require updating.\n *\n * @param {JulianDate} time The simulation time.\n * @returns {boolean} True if this data source is ready to be displayed at the provided time, false otherwise.\n */\nKmlDataSource.prototype.update = function (time) {\n  const networkLinks = this._networkLinks;\n  if (networkLinks.length === 0) {\n    return true;\n  }\n\n  const now = JulianDate.now();\n  const that = this;\n\n  entitiesToIgnore.removeAll();\n\n  function recurseIgnoreEntities(entity) {\n    const children = entity._children;\n    const count = children.length;\n    for (let i = 0; i < count; ++i) {\n      const child = children[i];\n      entitiesToIgnore.set(child.id, child);\n      recurseIgnoreEntities(child);\n    }\n  }\n\n  let cameraViewUpdate = false;\n  const lastCameraView = this._lastCameraView;\n  const camera = this.camera;\n  if (\n    defined(camera) &&\n    !(\n      camera.positionWC.equalsEpsilon(\n        lastCameraView.position,\n        CesiumMath.EPSILON7,\n      ) &&\n      camera.directionWC.equalsEpsilon(\n        lastCameraView.direction,\n        CesiumMath.EPSILON7,\n      ) &&\n      camera.upWC.equalsEpsilon(lastCameraView.up, CesiumMath.EPSILON7)\n    )\n  ) {\n    // Camera has changed so update the last view\n    lastCameraView.position = Cartesian3.clone(camera.positionWC);\n    lastCameraView.direction = Cartesian3.clone(camera.directionWC);\n    lastCameraView.up = Cartesian3.clone(camera.upWC);\n    lastCameraView.bbox = camera.computeViewRectangle();\n    cameraViewUpdate = true;\n  }\n\n  const newNetworkLinks = new AssociativeArray();\n  let changed = false;\n  networkLinks.values.forEach(function (networkLink) {\n    const entity = networkLink.entity;\n    if (entitiesToIgnore.contains(entity.id)) {\n      return;\n    }\n\n    if (!networkLink.updating) {\n      let doUpdate = false;\n      if (networkLink.refreshMode === RefreshMode.INTERVAL) {\n        if (\n          JulianDate.secondsDifference(now, networkLink.lastUpdated) >\n          networkLink.time\n        ) {\n          doUpdate = true;\n        }\n      } else if (networkLink.refreshMode === RefreshMode.EXPIRE) {\n        if (JulianDate.greaterThan(now, networkLink.time)) {\n          doUpdate = true;\n        }\n      } else if (networkLink.refreshMode === RefreshMode.STOP) {\n        if (cameraViewUpdate) {\n          networkLink.needsUpdate = true;\n          networkLink.cameraUpdateTime = now;\n        }\n\n        if (\n          networkLink.needsUpdate &&\n          JulianDate.secondsDifference(now, networkLink.cameraUpdateTime) >=\n            networkLink.time\n        ) {\n          doUpdate = true;\n        }\n      }\n\n      if (doUpdate) {\n        recurseIgnoreEntities(entity);\n        networkLink.updating = true;\n        const newEntityCollection = new EntityCollection();\n        const href = networkLink.href.clone();\n\n        href.setQueryParameters(networkLink.cookie);\n        const ellipsoid = that._ellipsoid ?? Ellipsoid.default;\n        processNetworkLinkQueryString(\n          href,\n          that.camera,\n          that.canvas,\n          networkLink.viewBoundScale,\n          lastCameraView.bbox,\n          ellipsoid,\n        );\n\n        load(that, newEntityCollection, href, {\n          context: entity.id,\n        })\n          .then(\n            getNetworkLinkUpdateCallback(\n              that,\n              networkLink,\n              newEntityCollection,\n              newNetworkLinks,\n              href,\n            ),\n          )\n          .catch(function (error) {\n            const msg = `NetworkLink ${networkLink.href} refresh failed: ${error}`;\n            console.log(msg);\n            that._error.raiseEvent(that, msg);\n          });\n        changed = true;\n      }\n    }\n    newNetworkLinks.set(networkLink.id, networkLink);\n  });\n\n  if (changed) {\n    this._networkLinks = newNetworkLinks;\n    this._changed.raiseEvent(this);\n  }\n\n  return true;\n};\n\n/**\n * Contains KML Feature data loaded into the <code>Entity.kml</code> property by {@link KmlDataSource}.\n * @alias KmlFeatureData\n * @constructor\n */\nfunction KmlFeatureData() {\n  /**\n   * @typedef KmlFeatureData.Author\n   * @type {object}\n   * @property {string} name Gets the name.\n   * @property {string} uri Gets the URI.\n   * @property {number} age Gets the email.\n   */\n\n  /**\n   * Gets the atom syndication format author field.\n   * @type {KmlFeatureData.Author}\n   */\n  this.author = {\n    name: undefined,\n    uri: undefined,\n    email: undefined,\n  };\n\n  /**\n   * @typedef KmlFeatureData.Link\n   * @type {object}\n   * @property {string} href Gets the href.\n   * @property {string} hreflang Gets the language of the linked resource.\n   * @property {string} rel Gets the link relation.\n   * @property {string} type Gets the link type.\n   * @property {string} title Gets the link title.\n   * @property {string} length Gets the link length.\n   */\n\n  /**\n   * Gets the link.\n   * @type {KmlFeatureData.Link}\n   */\n  this.link = {\n    href: undefined,\n    hreflang: undefined,\n    rel: undefined,\n    type: undefined,\n    title: undefined,\n    length: undefined,\n  };\n\n  /**\n   * Gets the unstructured address field.\n   * @type {string}\n   */\n  this.address = undefined;\n  /**\n   * Gets the phone number.\n   * @type {string}\n   */\n  this.phoneNumber = undefined;\n  /**\n   * Gets the snippet.\n   * @type {string}\n   */\n  this.snippet = undefined;\n  /**\n   * Gets the extended data, parsed into a JSON object.\n   * Currently only the <code>Data</code> property is supported.\n   * <code>SchemaData</code> and custom data are ignored.\n   * @type {string}\n   */\n  this.extendedData = undefined;\n}\n\n// For testing\nKmlDataSource._DeferredLoading = DeferredLoading;\nKmlDataSource._getTimestamp = getTimestamp;\n\nexport default KmlDataSource;\n","/**\n * @alias KmlLookAt\n * @constructor\n *\n * @param {Cartesian3} position camera position\n * @param {HeadingPitchRange} headingPitchRange camera orientation\n */\nfunction KmlLookAt(position, headingPitchRange) {\n  this.position = position;\n  this.headingPitchRange = headingPitchRange;\n}\nexport default KmlLookAt;\n","import defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\n/**\n * Describes a KmlTour, which uses KmlTourFlyTo, and KmlTourWait to\n * guide the camera to a specified destinations on given time intervals.\n *\n * @alias KmlTour\n * @constructor\n *\n * @param {string} name name parsed from KML\n * @param {string} id id parsed from KML\n * @param {Array} playlist array with KmlTourFlyTos and KmlTourWaits\n *\n * @see KmlTourFlyTo\n * @see KmlTourWait\n *\n * @demo {@link https://sandcastle.cesium.com/?id=kml-tours|KML Tours}\n */\nfunction KmlTour(name, id) {\n  /**\n   * Id of kml gx:Tour entry\n   * @type {string}\n   */\n  this.id = id;\n  /**\n   * Tour name\n   * @type {string}\n   */\n  this.name = name;\n  /**\n   * Index of current entry from playlist\n   * @type {number}\n   */\n  this.playlistIndex = 0;\n  /**\n   * Array of playlist entries\n   * @type {Array}\n   */\n  this.playlist = [];\n  /**\n   * Event will be called when tour starts to play,\n   * before any playlist entry starts to play.\n   * @type Event\n   */\n  this.tourStart = new Event();\n  /**\n   * Event will be called when all playlist entries are\n   * played, or tour playback being canceled.\n   *\n   * If tour playback was terminated, event callback will\n   * be called with terminated=true parameter.\n   * @type Event\n   */\n  this.tourEnd = new Event();\n  /**\n   * Event will be called when entry from playlist starts to play.\n   *\n   * Event callback will be called with curent entry as first parameter.\n   * @type Event\n   */\n  this.entryStart = new Event();\n  /**\n   * Event will be called when entry from playlist ends to play.\n   *\n   * Event callback will be called with following parameters:\n   * 1. entry - entry\n   * 2. terminated - true if playback was terminated by calling {@link KmlTour#stop}\n   * @type Event\n   */\n  this.entryEnd = new Event();\n\n  this._activeEntries = [];\n}\n\n/**\n * Add entry to this tour playlist.\n *\n * @param {KmlTourFlyTo|KmlTourWait} entry an entry to add to the playlist.\n */\nKmlTour.prototype.addPlaylistEntry = function (entry) {\n  this.playlist.push(entry);\n};\n\n/**\n * Play this tour.\n *\n * @param {CesiumWidget} widget The widget.\n * @param {object} [cameraOptions] these options will be merged with {@link Camera#flyTo}\n * options for FlyTo playlist entries.\n */\nKmlTour.prototype.play = function (widget, cameraOptions) {\n  this.tourStart.raiseEvent();\n\n  const tour = this;\n  playEntry.call(this, widget, cameraOptions, function (terminated) {\n    tour.playlistIndex = 0;\n    // Stop nonblocking entries\n    if (!terminated) {\n      cancelAllEntries(tour._activeEntries);\n    }\n    tour.tourEnd.raiseEvent(terminated);\n  });\n};\n\n/**\n * Stop curently playing tour.\n */\nKmlTour.prototype.stop = function () {\n  cancelAllEntries(this._activeEntries);\n};\n\n// Stop all activeEntries.\nfunction cancelAllEntries(activeEntries) {\n  for (\n    let entry = activeEntries.pop();\n    entry !== undefined;\n    entry = activeEntries.pop()\n  ) {\n    entry.stop();\n  }\n}\n\n// Play playlist entry.\n// This function is called recursevly with playNext and iterates over all entries from playlist.\nfunction playEntry(widget, cameraOptions, allDone) {\n  const entry = this.playlist[this.playlistIndex];\n  if (entry) {\n    const _playNext = playNext.bind(this, widget, cameraOptions, allDone);\n    this._activeEntries.push(entry);\n    this.entryStart.raiseEvent(entry);\n    if (entry.blocking) {\n      entry.play(_playNext, widget.scene.camera, cameraOptions);\n    } else {\n      const tour = this;\n      entry.play(function () {\n        tour.entryEnd.raiseEvent(entry);\n        const indx = tour._activeEntries.indexOf(entry);\n        if (indx >= 0) {\n          tour._activeEntries.splice(indx, 1);\n        }\n      });\n      _playNext(widget, cameraOptions, allDone);\n    }\n  } else if (defined(allDone)) {\n    allDone(false);\n  }\n}\n\n// Increment playlistIndex and call playEntry if terminated isn't true.\nfunction playNext(widget, cameraOptions, allDone, terminated) {\n  const entry = this.playlist[this.playlistIndex];\n  this.entryEnd.raiseEvent(entry, terminated);\n\n  if (terminated) {\n    allDone(terminated);\n  } else {\n    const indx = this._activeEntries.indexOf(entry);\n    if (indx >= 0) {\n      this._activeEntries.splice(indx, 1);\n    }\n    this.playlistIndex++;\n    playEntry.call(this, widget, cameraOptions, allDone);\n  }\n}\nexport default KmlTour;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport combine from \"../Core/combine.js\";\nimport defined from \"../Core/defined.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\n/**\n * Transitions the KmlTour to the next destination. This transition is facilitated\n * using a specified flyToMode over a given number of seconds.\n *\n * @alias KmlTourFlyTo\n * @constructor\n *\n * @param {number} duration entry duration\n * @param {string} flyToMode KML fly to mode: bounce, smooth, etc\n * @param {KmlCamera|KmlLookAt} view KmlCamera or KmlLookAt\n *\n * @see KmlTour\n * @see KmlTourWait\n */\nfunction KmlTourFlyTo(duration, flyToMode, view) {\n  this.type = \"KmlTourFlyTo\";\n  this.blocking = true;\n  this.activeCamera = null;\n  this.activeCallback = null;\n\n  this.duration = duration;\n  this.view = view;\n  this.flyToMode = flyToMode;\n}\n\n/**\n * Play this playlist entry\n *\n * @param {KmlTourFlyTo.DoneCallback} done function which will be called when playback ends\n * @param {Camera} camera Cesium camera\n * @param {object} [cameraOptions] which will be merged with camera flyTo options. See {@link Camera#flyTo}\n */\nKmlTourFlyTo.prototype.play = function (done, camera, cameraOptions) {\n  this.activeCamera = camera;\n  if (defined(done) && done !== null) {\n    const self = this;\n    this.activeCallback = function (terminated) {\n      delete self.activeCallback;\n      delete self.activeCamera;\n      done(defined(terminated) ? false : terminated);\n    };\n  }\n\n  const options = this.getCameraOptions(cameraOptions);\n  if (this.view.headingPitchRoll) {\n    camera.flyTo(options);\n  } else if (this.view.headingPitchRange) {\n    const target = new BoundingSphere(this.view.position);\n    camera.flyToBoundingSphere(target, options);\n  }\n};\n\n/**\n * Stop execution of curent entry. Cancel camera flyTo\n */\nKmlTourFlyTo.prototype.stop = function () {\n  if (defined(this.activeCamera)) {\n    this.activeCamera.cancelFlight();\n  }\n  if (defined(this.activeCallback)) {\n    this.activeCallback(true);\n  }\n};\n\n/**\n * Returns options for {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere}\n * depends on this.view type.\n *\n * @param {object} cameraOptions options to merge with generated. See {@link Camera#flyTo}\n * @returns {object} {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere} options\n */\nKmlTourFlyTo.prototype.getCameraOptions = function (cameraOptions) {\n  let options = {\n    duration: this.duration,\n  };\n\n  if (defined(this.activeCallback)) {\n    options.complete = this.activeCallback;\n  }\n\n  if (this.flyToMode === \"smooth\") {\n    options.easingFunction = EasingFunction.LINEAR_NONE;\n  }\n\n  if (this.view.headingPitchRoll) {\n    options.destination = this.view.position;\n    options.orientation = this.view.headingPitchRoll;\n  } else if (this.view.headingPitchRange) {\n    options.offset = this.view.headingPitchRange;\n  }\n\n  if (defined(cameraOptions)) {\n    options = combine(options, cameraOptions);\n  }\n  return options;\n};\n\n/**\n * A function that will be executed when the flight completes.\n * @callback KmlTourFlyTo.DoneCallback\n *\n * @param {boolean} terminated true if {@link KmlTourFlyTo#stop} was\n * called before entry done playback.\n */\nexport default KmlTourFlyTo;\n","import defined from \"../Core/defined.js\";\n/**\n * Pauses the KmlTour for a given number of seconds.\n *\n * @alias KmlTourWait\n * @constructor\n *\n * @param {number} duration entry duration\n *\n * @see KmlTour\n * @see KmlTourFlyTo\n */\nfunction KmlTourWait(duration) {\n  this.type = \"KmlTourWait\";\n  this.blocking = true;\n  this.duration = duration;\n\n  this.timeout = null;\n}\n\n/**\n * Play this playlist entry\n *\n * @param {KmlTourWait.DoneCallback} done function which will be called when playback ends\n */\nKmlTourWait.prototype.play = function (done) {\n  const self = this;\n  this.activeCallback = done;\n  this.timeout = setTimeout(function () {\n    delete self.activeCallback;\n    done(false);\n  }, this.duration * 1000);\n};\n\n/**\n * Stop execution of curent entry, cancel curent timeout\n */\nKmlTourWait.prototype.stop = function () {\n  clearTimeout(this.timeout);\n  if (defined(this.activeCallback)) {\n    this.activeCallback(true);\n  }\n};\n\n/**\n * A function which will be called when playback ends.\n *\n * @callback KmlTourWait.DoneCallback\n * @param {boolean} terminated true if {@link KmlTourWait#stop} was\n * called before entry done playback.\n */\nexport default KmlTourWait;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} LabelGraphics.ConstructorOptions\n *\n * Initialization options for the LabelGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the label.\n * @property {Property | string} [text] A Property specifying the text. Explicit newlines '\\n' are supported.\n * @property {Property | string} [font='30px sans-serif'] A Property specifying the CSS font.\n * @property {Property | LabelStyle} [style=LabelStyle.FILL] A Property specifying the {@link LabelStyle}.\n * @property {Property | number} [scale=1.0] A numeric Property specifying the scale to apply to the text.\n * @property {Property | boolean} [showBackground=false] A boolean Property specifying the visibility of the background behind the label.\n * @property {Property | Color} [backgroundColor=new Color(0.165, 0.165, 0.165, 0.8)] A Property specifying the background {@link Color}.\n * @property {Property | Cartesian2} [backgroundPadding=new Cartesian2(7, 5)] A {@link Cartesian2} Property specifying the horizontal and vertical background padding in pixels.\n * @property {Property | Cartesian2} [pixelOffset=Cartesian2.ZERO] A {@link Cartesian2} Property specifying the pixel offset.\n * @property {Property | Cartesian3} [eyeOffset=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the eye offset.\n * @property {Property | HorizontalOrigin} [horizontalOrigin=HorizontalOrigin.CENTER] A Property specifying the {@link HorizontalOrigin}.\n * @property {Property | VerticalOrigin} [verticalOrigin=VerticalOrigin.CENTER] A Property specifying the {@link VerticalOrigin}.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [fillColor=Color.WHITE] A Property specifying the fill {@link Color}.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the outline {@link Color}.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the outline width.\n * @property {Property | NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} Property used to set translucency based on distance from the camera.\n * @property {Property | NearFarScalar} [pixelOffsetScaleByDistance] A {@link NearFarScalar} Property used to set pixelOffset based on distance from the camera.\n * @property {Property | NearFarScalar} [scaleByDistance] A {@link NearFarScalar} Property used to set scale based on distance from the camera.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this label will be displayed.\n * @property {Property | number} [disableDepthTestDistance] A Property specifying the distance from the camera at which to disable the depth test to.\n */\n\n/**\n * Describes a two dimensional label located at the position of the containing {@link Entity}.\n * <p>\n * <div align='center'>\n * <img src='Images/Label.png' width='400' height='300' /><br />\n * Example labels\n * </div>\n * </p>\n *\n * @alias LabelGraphics\n * @constructor\n *\n * @param {LabelGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=labels|Cesium Sandcastle Labels Demo}\n */\nfunction LabelGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._text = undefined;\n  this._textSubscription = undefined;\n  this._font = undefined;\n  this._fontSubscription = undefined;\n  this._style = undefined;\n  this._styleSubscription = undefined;\n  this._scale = undefined;\n  this._scaleSubscription = undefined;\n  this._showBackground = undefined;\n  this._showBackgroundSubscription = undefined;\n  this._backgroundColor = undefined;\n  this._backgroundColorSubscription = undefined;\n  this._backgroundPadding = undefined;\n  this._backgroundPaddingSubscription = undefined;\n  this._pixelOffset = undefined;\n  this._pixelOffsetSubscription = undefined;\n  this._eyeOffset = undefined;\n  this._eyeOffsetSubscription = undefined;\n  this._horizontalOrigin = undefined;\n  this._horizontalOriginSubscription = undefined;\n  this._verticalOrigin = undefined;\n  this._verticalOriginSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._fillColor = undefined;\n  this._fillColorSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._translucencyByDistance = undefined;\n  this._translucencyByDistanceSubscription = undefined;\n  this._pixelOffsetScaleByDistance = undefined;\n  this._pixelOffsetScaleByDistanceSubscription = undefined;\n  this._scaleByDistance = undefined;\n  this._scaleByDistanceSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._disableDepthTestDistance = undefined;\n  this._disableDepthTestDistanceSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(LabelGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof LabelGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the label.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the string Property specifying the text of the label.\n   * Explicit newlines '\\n' are supported.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  text: createPropertyDescriptor(\"text\"),\n\n  /**\n   * Gets or sets the string Property specifying the font in CSS syntax.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font|CSS font on MDN}\n   */\n  font: createPropertyDescriptor(\"font\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link LabelStyle}.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  style: createPropertyDescriptor(\"style\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the uniform scale to apply to the image.\n   * A scale greater than <code>1.0</code> enlarges the label while a scale less than <code>1.0</code> shrinks it.\n   * <p>\n   * <div align='center'>\n   * <img src='Images/Label.setScale.png' width='400' height='300' /><br/>\n   * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>,\n   * and <code>2.0</code>.\n   * </div>\n   * </p>\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  scale: createPropertyDescriptor(\"scale\"),\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the background behind the label.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  showBackground: createPropertyDescriptor(\"showBackground\"),\n\n  /**\n   * Gets or sets the Property specifying the background {@link Color}.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @default new Color(0.165, 0.165, 0.165, 0.8)\n   */\n  backgroundColor: createPropertyDescriptor(\"backgroundColor\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the label's horizontal and vertical\n   * background padding in pixels.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @default new Cartesian2(7, 5)\n   */\n  backgroundPadding: createPropertyDescriptor(\"backgroundPadding\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the label's pixel offset in screen space\n   * from the origin of this label.  This is commonly used to align multiple labels and labels at\n   * the same position, e.g., an image and text.  The screen space origin is the top, left corner of the\n   * canvas; <code>x</code> increases from left to right, and <code>y</code> increases from top to bottom.\n   * <p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>default</code><br/><img src='Images/Label.setPixelOffset.default.png' width='250' height='188' /></td>\n   * <td align='center'><code>l.pixeloffset = new Cartesian2(25, 75);</code><br/><img src='Images/Label.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n   * </tr></table>\n   * The label's origin is indicated by the yellow point.\n   * </div>\n   * </p>\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @default Cartesian2.ZERO\n   */\n  pixelOffset: createPropertyDescriptor(\"pixelOffset\"),\n\n  /**\n   * Gets or sets the {@link Cartesian3} Property specifying the label's offset in eye coordinates.\n   * Eye coordinates is a left-handed coordinate system, where <code>x</code> points towards the viewer's\n   * right, <code>y</code> points up, and <code>z</code> points into the screen.\n   * <p>\n   * An eye offset is commonly used to arrange multiple labels or objects at the same position, e.g., to\n   * arrange a label above its corresponding 3D model.\n   * </p>\n   * Below, the label is positioned at the center of the Earth but an eye offset makes it always\n   * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n   * <p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n   * </tr></table>\n   * <code>l.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code><br /><br />\n   * </div>\n   * </p>\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @default Cartesian3.ZERO\n   */\n  eyeOffset: createPropertyDescriptor(\"eyeOffset\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HorizontalOrigin}.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  horizontalOrigin: createPropertyDescriptor(\"horizontalOrigin\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link VerticalOrigin}.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  verticalOrigin: createPropertyDescriptor(\"verticalOrigin\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the Property specifying the fill {@link Color}.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  fillColor: createPropertyDescriptor(\"fillColor\"),\n\n  /**\n   * Gets or sets the Property specifying the outline {@link Color}.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the outline width.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Gets or sets {@link NearFarScalar} Property specifying the translucency of the label based on the distance from the camera.\n   * A label's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the label's translucency remains clamped to the nearest bound.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  translucencyByDistance: createPropertyDescriptor(\"translucencyByDistance\"),\n\n  /**\n   * Gets or sets {@link NearFarScalar} Property specifying the pixel offset of the label based on the distance from the camera.\n   * A label's pixel offset will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the label's pixel offset remains clamped to the nearest bound.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  pixelOffsetScaleByDistance: createPropertyDescriptor(\n    \"pixelOffsetScaleByDistance\",\n  ),\n\n  /**\n   * Gets or sets near and far scaling properties of a Label based on the label's distance from the camera.\n   * A label's scale will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the label's scale remains clamped to the nearest bound.  If undefined,\n   * scaleByDistance will be disabled.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  scaleByDistance: createPropertyDescriptor(\"scaleByDistance\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this label will be displayed.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n   * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n   * @memberof LabelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  disableDepthTestDistance: createPropertyDescriptor(\n    \"disableDepthTestDistance\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {LabelGraphics} [result] The object onto which to store the result.\n * @returns {LabelGraphics} The modified result parameter or a new instance if one was not provided.\n */\nLabelGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new LabelGraphics(this);\n  }\n  result.show = this.show;\n  result.text = this.text;\n  result.font = this.font;\n  result.style = this.style;\n  result.scale = this.scale;\n  result.showBackground = this.showBackground;\n  result.backgroundColor = this.backgroundColor;\n  result.backgroundPadding = this.backgroundPadding;\n  result.pixelOffset = this.pixelOffset;\n  result.eyeOffset = this.eyeOffset;\n  result.horizontalOrigin = this.horizontalOrigin;\n  result.verticalOrigin = this.verticalOrigin;\n  result.heightReference = this.heightReference;\n  result.fillColor = this.fillColor;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.translucencyByDistance = this.translucencyByDistance;\n  result.pixelOffsetScaleByDistance = this.pixelOffsetScaleByDistance;\n  result.scaleByDistance = this.scaleByDistance;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.disableDepthTestDistance = this.disableDepthTestDistance;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {LabelGraphics} source The object to be merged into this object.\n */\nLabelGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.text = this.text ?? source.text;\n  this.font = this.font ?? source.font;\n  this.style = this.style ?? source.style;\n  this.scale = this.scale ?? source.scale;\n  this.showBackground = this.showBackground ?? source.showBackground;\n  this.backgroundColor = this.backgroundColor ?? source.backgroundColor;\n  this.backgroundPadding = this.backgroundPadding ?? source.backgroundPadding;\n  this.pixelOffset = this.pixelOffset ?? source.pixelOffset;\n  this.eyeOffset = this.eyeOffset ?? source.eyeOffset;\n  this.horizontalOrigin = this.horizontalOrigin ?? source.horizontalOrigin;\n  this.verticalOrigin = this.verticalOrigin ?? source.verticalOrigin;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.fillColor = this.fillColor ?? source.fillColor;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.translucencyByDistance =\n    this.translucencyByDistance ?? source.translucencyByDistance;\n  this.pixelOffsetScaleByDistance =\n    this.pixelOffsetScaleByDistance ?? source.pixelOffsetScaleByDistance;\n  this.scaleByDistance = this.scaleByDistance ?? source.scaleByDistance;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.disableDepthTestDistance =\n    this.disableDepthTestDistance ?? source.disableDepthTestDistance;\n};\nexport default LabelGraphics;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport LabelStyle from \"../Scene/LabelStyle.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nconst defaultScale = 1.0;\nconst defaultFont = \"30px sans-serif\";\nconst defaultStyle = LabelStyle.FILL;\nconst defaultFillColor = Color.WHITE;\nconst defaultOutlineColor = Color.BLACK;\nconst defaultOutlineWidth = 1.0;\nconst defaultShowBackground = false;\nconst defaultBackgroundColor = new Color(0.165, 0.165, 0.165, 0.8);\nconst defaultBackgroundPadding = new Cartesian2(7, 5);\nconst defaultPixelOffset = Cartesian2.ZERO;\nconst defaultEyeOffset = Cartesian3.ZERO;\nconst defaultHeightReference = HeightReference.NONE;\nconst defaultHorizontalOrigin = HorizontalOrigin.CENTER;\nconst defaultVerticalOrigin = VerticalOrigin.CENTER;\n\nconst positionScratch = new Cartesian3();\nconst fillColorScratch = new Color();\nconst outlineColorScratch = new Color();\nconst backgroundColorScratch = new Color();\nconst backgroundPaddingScratch = new Cartesian2();\nconst eyeOffsetScratch = new Cartesian3();\nconst pixelOffsetScratch = new Cartesian2();\nconst translucencyByDistanceScratch = new NearFarScalar();\nconst pixelOffsetScaleByDistanceScratch = new NearFarScalar();\nconst scaleByDistanceScratch = new NearFarScalar();\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\n\nfunction EntityData(entity) {\n  this.entity = entity;\n  this.label = undefined;\n  this.index = undefined;\n}\n\n/**\n * A {@link Visualizer} which maps the {@link LabelGraphics} instance\n * in {@link Entity#label} to a {@link Label}.\n * @alias LabelVisualizer\n * @constructor\n *\n * @param {EntityCluster} entityCluster The entity cluster to manage the collection of billboards and optionally cluster with other entities.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction LabelVisualizer(entityCluster, entityCollection) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entityCluster)) {\n    throw new DeveloperError(\"entityCluster is required.\");\n  }\n  if (!defined(entityCollection)) {\n    throw new DeveloperError(\"entityCollection is required.\");\n  }\n  //>>includeEnd('debug');\n\n  entityCollection.collectionChanged.addEventListener(\n    LabelVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n\n  this._cluster = entityCluster;\n  this._entityCollection = entityCollection;\n  this._items = new AssociativeArray();\n\n  this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} This function always returns true.\n */\nLabelVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const items = this._items.values;\n  const cluster = this._cluster;\n\n  for (let i = 0, len = items.length; i < len; i++) {\n    const item = items[i];\n    const entity = item.entity;\n    const labelGraphics = entity._label;\n    let text;\n    let label = item.label;\n    let show =\n      entity.isShowing &&\n      entity.isAvailable(time) &&\n      Property.getValueOrDefault(labelGraphics._show, time, true);\n    let position;\n    if (show) {\n      position = Property.getValueOrUndefined(\n        entity._position,\n        time,\n        positionScratch,\n      );\n      text = Property.getValueOrUndefined(labelGraphics._text, time);\n      show = defined(position) && defined(text);\n    }\n\n    if (!show) {\n      //don't bother creating or updating anything else\n      returnPrimitive(item, entity, cluster);\n      continue;\n    }\n\n    if (!Property.isConstant(entity._position)) {\n      cluster._clusterDirty = true;\n    }\n\n    let updateClamping = false;\n    const heightReference = Property.getValueOrDefault(\n      labelGraphics._heightReference,\n      time,\n      defaultHeightReference,\n    );\n\n    if (!defined(label)) {\n      label = cluster.getLabel(entity);\n      label.id = entity;\n      item.label = label;\n\n      // If this new label happens to have a position and height reference that match our new values,\n      // label._updateClamping will not be called automatically. That's a problem because the clamped\n      // height may be based on different terrain than is now loaded. So we'll manually call\n      // _updateClamping below.\n      updateClamping =\n        Cartesian3.equals(label.position, position) &&\n        label.heightReference === heightReference;\n    }\n\n    label.show = true;\n    label.position = position;\n    label.text = text;\n    label.scale = Property.getValueOrDefault(\n      labelGraphics._scale,\n      time,\n      defaultScale,\n    );\n    label.font = Property.getValueOrDefault(\n      labelGraphics._font,\n      time,\n      defaultFont,\n    );\n    label.style = Property.getValueOrDefault(\n      labelGraphics._style,\n      time,\n      defaultStyle,\n    );\n    label.fillColor = Property.getValueOrDefault(\n      labelGraphics._fillColor,\n      time,\n      defaultFillColor,\n      fillColorScratch,\n    );\n    label.outlineColor = Property.getValueOrDefault(\n      labelGraphics._outlineColor,\n      time,\n      defaultOutlineColor,\n      outlineColorScratch,\n    );\n    label.outlineWidth = Property.getValueOrDefault(\n      labelGraphics._outlineWidth,\n      time,\n      defaultOutlineWidth,\n    );\n    label.showBackground = Property.getValueOrDefault(\n      labelGraphics._showBackground,\n      time,\n      defaultShowBackground,\n    );\n    label.backgroundColor = Property.getValueOrDefault(\n      labelGraphics._backgroundColor,\n      time,\n      defaultBackgroundColor,\n      backgroundColorScratch,\n    );\n    label.backgroundPadding = Property.getValueOrDefault(\n      labelGraphics._backgroundPadding,\n      time,\n      defaultBackgroundPadding,\n      backgroundPaddingScratch,\n    );\n    label.pixelOffset = Property.getValueOrDefault(\n      labelGraphics._pixelOffset,\n      time,\n      defaultPixelOffset,\n      pixelOffsetScratch,\n    );\n    label.eyeOffset = Property.getValueOrDefault(\n      labelGraphics._eyeOffset,\n      time,\n      defaultEyeOffset,\n      eyeOffsetScratch,\n    );\n    label.heightReference = heightReference;\n    label.horizontalOrigin = Property.getValueOrDefault(\n      labelGraphics._horizontalOrigin,\n      time,\n      defaultHorizontalOrigin,\n    );\n    label.verticalOrigin = Property.getValueOrDefault(\n      labelGraphics._verticalOrigin,\n      time,\n      defaultVerticalOrigin,\n    );\n    label.translucencyByDistance = Property.getValueOrUndefined(\n      labelGraphics._translucencyByDistance,\n      time,\n      translucencyByDistanceScratch,\n    );\n    label.pixelOffsetScaleByDistance = Property.getValueOrUndefined(\n      labelGraphics._pixelOffsetScaleByDistance,\n      time,\n      pixelOffsetScaleByDistanceScratch,\n    );\n    label.scaleByDistance = Property.getValueOrUndefined(\n      labelGraphics._scaleByDistance,\n      time,\n      scaleByDistanceScratch,\n    );\n    label.distanceDisplayCondition = Property.getValueOrUndefined(\n      labelGraphics._distanceDisplayCondition,\n      time,\n      distanceDisplayConditionScratch,\n    );\n    label.disableDepthTestDistance = Property.getValueOrUndefined(\n      labelGraphics._disableDepthTestDistance,\n      time,\n    );\n\n    if (updateClamping) {\n      label._updateClamping();\n    }\n  }\n  return true;\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nLabelVisualizer.prototype.getBoundingSphere = function (entity, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const item = this._items.get(entity.id);\n  if (!defined(item) || !defined(item.label)) {\n    return BoundingSphereState.FAILED;\n  }\n\n  const label = item.label;\n  result.center = Cartesian3.clone(\n    label._clampedPosition ?? label.position,\n    result.center,\n  );\n  result.radius = 0;\n  return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nLabelVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nLabelVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    LabelVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  const entities = this._entityCollection.values;\n  for (let i = 0; i < entities.length; i++) {\n    this._cluster.removeLabel(entities[i]);\n  }\n  return destroyObject(this);\n};\n\nLabelVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n  changed,\n) {\n  let i;\n  let entity;\n  const items = this._items;\n  const cluster = this._cluster;\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    if (defined(entity._label) && defined(entity._position)) {\n      items.set(entity.id, new EntityData(entity));\n    }\n  }\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    if (defined(entity._label) && defined(entity._position)) {\n      if (!items.contains(entity.id)) {\n        items.set(entity.id, new EntityData(entity));\n      }\n    } else {\n      returnPrimitive(items.get(entity.id), entity, cluster);\n      items.remove(entity.id);\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    returnPrimitive(items.get(entity.id), entity, cluster);\n    items.remove(entity.id);\n  }\n};\n\nfunction returnPrimitive(item, entity, cluster) {\n  if (defined(item)) {\n    item.label = undefined;\n    cluster.removeLabel(entity);\n  }\n}\nexport default LabelVisualizer;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Material from \"../Scene/Material.js\";\n\n/**\n * The interface for all {@link Property} objects that represent {@link Material} uniforms.\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias MaterialProperty\n * @constructor\n * @abstract\n *\n * @see ColorMaterialProperty\n * @see CompositeMaterialProperty\n * @see GridMaterialProperty\n * @see ImageMaterialProperty\n * @see PolylineGlowMaterialProperty\n * @see PolylineOutlineMaterialProperty\n * @see StripeMaterialProperty\n */\nfunction MaterialProperty() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(MaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof MaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof MaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n * @function\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nMaterialProperty.prototype.getType = DeveloperError.throwInstantiationError;\n\n/**\n * Gets the value of the property at the provided time.\n * @function\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nMaterialProperty.prototype.getValue = DeveloperError.throwInstantiationError;\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n * @function\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nMaterialProperty.prototype.equals = DeveloperError.throwInstantiationError;\n\nconst timeScratch = new JulianDate();\n\n/**\n * @private\n */\nMaterialProperty.getValue = function (time, materialProperty, material) {\n  let type;\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  if (defined(materialProperty)) {\n    type = materialProperty.getType(time);\n    if (defined(type)) {\n      if (!defined(material) || material.type !== type) {\n        material = Material.fromType(type);\n      }\n      materialProperty.getValue(time, material.uniforms);\n      return material;\n    }\n  }\n\n  if (!defined(material) || material.type !== Material.ColorType) {\n    material = Material.fromType(Material.ColorType);\n  }\n  Color.clone(Color.WHITE, material.uniforms.color);\n\n  return material;\n};\nexport default MaterialProperty;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport NodeTransformationProperty from \"./NodeTransformationProperty.js\";\nimport PropertyBag from \"./PropertyBag.js\";\n\nfunction createNodeTransformationProperty(value) {\n  return new NodeTransformationProperty(value);\n}\n\nfunction createNodeTransformationPropertyBag(value) {\n  return new PropertyBag(value, createNodeTransformationProperty);\n}\n\nfunction createArticulationStagePropertyBag(value) {\n  return new PropertyBag(value);\n}\n\nfunction createEnvironmentMapPropertyBag(value) {\n  return new PropertyBag(value);\n}\n\n/**\n * @typedef {object} ModelGraphics.ConstructorOptions\n *\n * Initialization options for the ModelGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the model.\n * @property {Property | string | Resource} [uri] A string or Resource Property specifying the URI of the glTF asset.\n * @property {Property | number} [scale=1.0] A numeric Property specifying a uniform linear scale.\n * @property {Property | boolean} [enableVerticalExaggeration=true] A boolean Property specifying if the model is exaggerated along the ellipsoid normal when {@link Scene.verticalExaggeration} is set to a value other than <code>1.0</code>.\n * @property {Property | number} [minimumPixelSize=0.0] A numeric Property specifying the approximate minimum pixel size of the model regardless of zoom.\n * @property {Property | number} [maximumScale] The maximum scale size of a model. An upper limit for minimumPixelSize.\n * @property {Property | boolean} [incrementallyLoadTextures=true] Determine if textures may continue to stream in after the model is loaded.\n * @property {Property | boolean} [runAnimations=true] A boolean Property specifying if glTF animations specified in the model should be started.\n * @property {Property | boolean} [clampAnimations=true] A boolean Property specifying if glTF animations should hold the last pose for time durations with no keyframes.\n * @property {Property | ShadowMode} [shadows=ShadowMode.ENABLED] An enum Property specifying whether the model casts or receives shadows from light sources.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [silhouetteColor=Color.RED] A Property specifying the {@link Color} of the silhouette.\n * @property {Property | number} [silhouetteSize=0.0] A numeric Property specifying the size of the silhouette in pixels.\n * @property {Property | Color} [color=Color.WHITE] A Property specifying the {@link Color} that blends with the model's rendered color.\n * @property {Property | ColorBlendMode} [colorBlendMode=ColorBlendMode.HIGHLIGHT] An enum Property specifying how the color blends with the model.\n * @property {Property | number} [colorBlendAmount=0.5] A numeric Property specifying the color strength when the <code>colorBlendMode</code> is <code>MIX</code>. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two.\n * @property {Property | Cartesian2} [imageBasedLightingFactor=new Cartesian2(1.0, 1.0)] A property specifying the contribution from diffuse and specular image-based lighting.\n * @property {PropertyBag | Object<string, *>} [environmentMapOptions] The properties for managing dynamic environment maps on this entity.\n * @property {Property | Color} [lightColor] A property specifying the light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this model will be displayed.\n * @property {PropertyBag | Object<string, TranslationRotationScale>} [nodeTransformations] An object, where keys are names of nodes, and values are {@link TranslationRotationScale} Properties describing the transformation to apply to that node. The transformation is applied after the node's existing transformation as specified in the glTF, and does not replace the node's existing transformation.\n * @property {PropertyBag | Object<string, number>} [articulations] An object, where keys are composed of an articulation name, a single space, and a stage name, and the values are numeric properties.\n * @property {Property | ClippingPlaneCollection} [clippingPlanes] A property specifying the {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n * @property {Property | CustomShader} [customShader] A property specifying the {@link CustomShader} to apply to this model.\n */\n\n/**\n * A 3D model based on {@link https://github.com/KhronosGroup/glTF|glTF}, the runtime asset format for WebGL, OpenGL ES, and OpenGL.\n * The position and orientation of the model is determined by the containing {@link Entity}.\n * <p>\n * Cesium includes support for glTF geometry, materials, animations, and skinning.\n * Cameras and lights are not currently supported.\n * </p>\n *\n * @alias ModelGraphics\n * @constructor\n *\n * @param {ModelGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=3d-models|Cesium Sandcastle 3D Models Demo}\n */\nfunction ModelGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._uri = undefined;\n  this._uriSubscription = undefined;\n  this._scale = undefined;\n  this._scaleSubscription = undefined;\n  this._hasVerticalExaggeration = undefined;\n  this._hasVerticalExaggerationSubscription = undefined;\n  this._enableVerticalExaggeration = undefined;\n  this._enableVerticalExaggerationSubscription = undefined;\n  this._minimumPixelSize = undefined;\n  this._minimumPixelSizeSubscription = undefined;\n  this._maximumScale = undefined;\n  this._maximumScaleSubscription = undefined;\n  this._incrementallyLoadTextures = undefined;\n  this._incrementallyLoadTexturesSubscription = undefined;\n  this._runAnimations = undefined;\n  this._runAnimationsSubscription = undefined;\n  this._clampAnimations = undefined;\n  this._clampAnimationsSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._silhouetteColor = undefined;\n  this._silhouetteColorSubscription = undefined;\n  this._silhouetteSize = undefined;\n  this._silhouetteSizeSubscription = undefined;\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._colorBlendMode = undefined;\n  this._colorBlendModeSubscription = undefined;\n  this._colorBlendAmount = undefined;\n  this._colorBlendAmountSubscription = undefined;\n  this._imageBasedLightingFactor = undefined;\n  this._imageBasedLightingFactorSubscription = undefined;\n  this._environmentMapOptions = undefined;\n  this._environmentMapOptionsSubscription = undefined;\n  this._lightColor = undefined;\n  this._lightColorSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._nodeTransformations = undefined;\n  this._nodeTransformationsSubscription = undefined;\n  this._articulations = undefined;\n  this._articulationsSubscription = undefined;\n  this._clippingPlanes = undefined;\n  this._clippingPlanesSubscription = undefined;\n  this._customShader = undefined;\n  this._customShaderSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(ModelGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof ModelGraphics.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the model.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the string Property specifying the URI of the glTF asset.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  uri: createPropertyDescriptor(\"uri\"),\n\n  /**\n   * Gets or sets the numeric Property specifying a uniform linear scale\n   * for this model. Values greater than 1.0 increase the size of the model while\n   * values less than 1.0 decrease it.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  scale: createPropertyDescriptor(\"scale\"),\n\n  /**\n   * Gets or sets the boolean Property specifying if the model is exaggerated along the ellipsoid normal when {@link Scene.verticalExaggeration} is set to a value other than <code>1.0</code>.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  enableVerticalExaggeration: createPropertyDescriptor(\n    \"enableVerticalExaggeration\",\n  ),\n\n  /**\n   * Gets or sets the numeric Property specifying the approximate minimum\n   * pixel size of the model regardless of zoom. This can be used to ensure that\n   * a model is visible even when the viewer zooms out.  When <code>0.0</code>,\n   * no minimum size is enforced.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  minimumPixelSize: createPropertyDescriptor(\"minimumPixelSize\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the maximum scale\n   * size of a model. This property is used as an upper limit for\n   * {@link ModelGraphics#minimumPixelSize}.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  maximumScale: createPropertyDescriptor(\"maximumScale\"),\n\n  /**\n   * Get or sets the boolean Property specifying whether textures\n   * may continue to stream in after the model is loaded.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  incrementallyLoadTextures: createPropertyDescriptor(\n    \"incrementallyLoadTextures\",\n  ),\n\n  /**\n   * Gets or sets the boolean Property specifying if glTF animations should be run.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  runAnimations: createPropertyDescriptor(\"runAnimations\"),\n\n  /**\n   * Gets or sets the boolean Property specifying if glTF animations should hold the last pose for time durations with no keyframes.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  clampAnimations: createPropertyDescriptor(\"clampAnimations\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the model\n   * casts or receives shadows from light sources.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.ENABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the silhouette.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.RED\n   */\n  silhouetteColor: createPropertyDescriptor(\"silhouetteColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the size of the silhouette in pixels.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  silhouetteSize: createPropertyDescriptor(\"silhouetteSize\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} that blends with the model's rendered color.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the enum Property specifying how the color blends with the model.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default ColorBlendMode.HIGHLIGHT\n   */\n  colorBlendMode: createPropertyDescriptor(\"colorBlendMode\"),\n\n  /**\n   * A numeric Property specifying the color strength when the <code>colorBlendMode</code> is MIX.\n   * A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with\n   * any value in-between resulting in a mix of the two.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.5\n   */\n  colorBlendAmount: createPropertyDescriptor(\"colorBlendAmount\"),\n\n  /**\n   * A property specifying the {@link Cartesian2} used to scale the diffuse and specular image-based lighting contribution to the final color.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  imageBasedLightingFactor: createPropertyDescriptor(\n    \"imageBasedLightingFactor\",\n  ),\n\n  /**\n   * Gets or sets the {@link DynamicEnvironmentMapManager.ConstructorOptions} to apply to this model. This is represented as an {@link PropertyBag}.\n   * @memberof ModelGraphics.prototype\n   * @type {PropertyBag}\n   */\n  environmentMapOptions: createPropertyDescriptor(\n    \"environmentMapOptions\",\n    undefined,\n    createEnvironmentMapPropertyBag,\n  ),\n\n  /**\n   * A property specifying the {@link Cartesian3} light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n   * @memberOf ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  lightColor: createPropertyDescriptor(\"lightColor\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this model will be displayed.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the set of node transformations to apply to this model.  This is represented as an {@link PropertyBag}, where keys are\n   * names of nodes, and values are {@link TranslationRotationScale} Properties describing the transformation to apply to that node.\n   * The transformation is applied after the node's existing transformation as specified in the glTF, and does not replace the node's existing transformation.\n   * @memberof ModelGraphics.prototype\n   * @type {PropertyBag}\n   */\n  nodeTransformations: createPropertyDescriptor(\n    \"nodeTransformations\",\n    undefined,\n    createNodeTransformationPropertyBag,\n  ),\n\n  /**\n   * Gets or sets the set of articulation values to apply to this model.  This is represented as an {@link PropertyBag}, where keys are\n   * composed as the name of the articulation, a single space, and the name of the stage.\n   * @memberof ModelGraphics.prototype\n   * @type {PropertyBag}\n   */\n  articulations: createPropertyDescriptor(\n    \"articulations\",\n    undefined,\n    createArticulationStagePropertyBag,\n  ),\n\n  /**\n   * A property specifying the {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  clippingPlanes: createPropertyDescriptor(\"clippingPlanes\"),\n\n  /**\n   * Gets or sets the {@link CustomShader} to apply to this model. When <code>undefined</code>, no custom shader code is used.\n   * @memberof ModelGraphics.prototype\n   * @type {Property|undefined}\n   */\n  customShader: createPropertyDescriptor(\"customShader\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {ModelGraphics} [result] The object onto which to store the result.\n * @returns {ModelGraphics} The modified result parameter or a new instance if one was not provided.\n */\nModelGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new ModelGraphics(this);\n  }\n  result.show = this.show;\n  result.uri = this.uri;\n  result.scale = this.scale;\n  result.enableVerticalExaggeration = this.enableVerticalExaggeration;\n  result.minimumPixelSize = this.minimumPixelSize;\n  result.maximumScale = this.maximumScale;\n  result.incrementallyLoadTextures = this.incrementallyLoadTextures;\n  result.runAnimations = this.runAnimations;\n  result.clampAnimations = this.clampAnimations;\n  result.heightReference = this._heightReference;\n  result.silhouetteColor = this.silhouetteColor;\n  result.silhouetteSize = this.silhouetteSize;\n  result.color = this.color;\n  result.colorBlendMode = this.colorBlendMode;\n  result.colorBlendAmount = this.colorBlendAmount;\n  result.imageBasedLightingFactor = this.imageBasedLightingFactor;\n  result.environmentMapOptions = this.environmentMapOptions;\n  result.lightColor = this.lightColor;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.nodeTransformations = this.nodeTransformations;\n  result.articulations = this.articulations;\n  result.clippingPlanes = this.clippingPlanes;\n  result.customShader = this.customShader;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {ModelGraphics} source The object to be merged into this object.\n */\nModelGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.uri = this.uri ?? source.uri;\n  this.scale = this.scale ?? source.scale;\n  this.enableVerticalExaggeration =\n    this.enableVerticalExaggeration ?? source.enableVerticalExaggeration;\n  this.minimumPixelSize = this.minimumPixelSize ?? source.minimumPixelSize;\n  this.maximumScale = this.maximumScale ?? source.maximumScale;\n  this.incrementallyLoadTextures =\n    this.incrementallyLoadTextures ?? source.incrementallyLoadTextures;\n  this.runAnimations = this.runAnimations ?? source.runAnimations;\n  this.clampAnimations = this.clampAnimations ?? source.clampAnimations;\n  this.shadows = this.shadows ?? source.shadows;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.silhouetteColor = this.silhouetteColor ?? source.silhouetteColor;\n  this.silhouetteSize = this.silhouetteSize ?? source.silhouetteSize;\n  this.color = this.color ?? source.color;\n  this.colorBlendMode = this.colorBlendMode ?? source.colorBlendMode;\n  this.colorBlendAmount = this.colorBlendAmount ?? source.colorBlendAmount;\n  this.imageBasedLightingFactor =\n    this.imageBasedLightingFactor ?? source.imageBasedLightingFactor;\n  this.environmentMapOptions =\n    this.environmentMapOptions ?? source.environmentMapOptions;\n  this.lightColor = this.lightColor ?? source.lightColor;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.clippingPlanes = this.clippingPlanes ?? source.clippingPlanes;\n  this.customShader = this.customShader ?? source.customShader;\n\n  const sourceNodeTransformations = source.nodeTransformations;\n  if (defined(sourceNodeTransformations)) {\n    const targetNodeTransformations = this.nodeTransformations;\n    if (defined(targetNodeTransformations)) {\n      targetNodeTransformations.merge(sourceNodeTransformations);\n    } else {\n      this.nodeTransformations = new PropertyBag(\n        sourceNodeTransformations,\n        createNodeTransformationProperty,\n      );\n    }\n  }\n\n  const sourceArticulations = source.articulations;\n  if (defined(sourceArticulations)) {\n    const targetArticulations = this.articulations;\n    if (defined(targetArticulations)) {\n      targetArticulations.merge(sourceArticulations);\n    } else {\n      this.articulations = new PropertyBag(sourceArticulations);\n    }\n  }\n};\nexport default ModelGraphics;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ColorBlendMode from \"../Scene/ColorBlendMode.js\";\nimport HeightReference, {\n  isHeightReferenceClamp,\n} from \"../Scene/HeightReference.js\";\nimport Model from \"../Scene/Model/Model.js\";\nimport ModelAnimationLoop from \"../Scene/ModelAnimationLoop.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\n\nconst defaultScale = 1.0;\nconst defaultEnableVerticalExaggeration = true;\nconst defaultMinimumPixelSize = 0.0;\nconst defaultIncrementallyLoadTextures = true;\nconst defaultClampAnimations = true;\nconst defaultShadows = ShadowMode.ENABLED;\nconst defaultHeightReference = HeightReference.NONE;\nconst defaultSilhouetteColor = Color.RED;\nconst defaultSilhouetteSize = 0.0;\nconst defaultColor = Color.WHITE;\nconst defaultColorBlendMode = ColorBlendMode.HIGHLIGHT;\nconst defaultColorBlendAmount = 0.5;\nconst defaultImageBasedLightingFactor = new Cartesian2(1.0, 1.0);\nconst defaultEnvironmentMapOptions = {\n  maximumPositionEpsilon: Number.POSITIVE_INFINITY,\n};\n\nconst modelMatrixScratch = new Matrix4();\nconst nodeMatrixScratch = new Matrix4();\n\nconst scratchColor = new Color();\nconst scratchArray = new Array(4);\nconst scratchCartesian = new Cartesian3();\n\n/**\n * A {@link Visualizer} which maps {@link Entity#model} to a {@link Model}.\n * @alias ModelVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction ModelVisualizer(scene, entityCollection) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scene\", scene);\n  Check.typeOf.object(\"entityCollection\", entityCollection);\n  //>>includeEnd('debug');\n\n  entityCollection.collectionChanged.addEventListener(\n    ModelVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n\n  this._scene = scene;\n  this._primitives = scene.primitives;\n  this._entityCollection = entityCollection;\n  this._modelHash = {};\n  this._entitiesToVisualize = new AssociativeArray();\n\n  this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\nasync function createModelPrimitive(\n  visualizer,\n  entity,\n  resource,\n  incrementallyLoadTextures,\n  environmentMapOptions,\n) {\n  const primitives = visualizer._primitives;\n  const modelHash = visualizer._modelHash;\n\n  try {\n    const model = await Model.fromGltfAsync({\n      url: resource,\n      incrementallyLoadTextures: incrementallyLoadTextures,\n      scene: visualizer._scene,\n      environmentMapOptions: environmentMapOptions,\n    });\n\n    if (visualizer.isDestroyed() || !defined(modelHash[entity.id])) {\n      return;\n    }\n\n    model.id = entity;\n    primitives.add(model);\n    modelHash[entity.id].modelPrimitive = model;\n    model.errorEvent.addEventListener((error) => {\n      if (!defined(modelHash[entity.id])) {\n        return;\n      }\n\n      console.log(error);\n\n      // Texture failures when incrementallyLoadTextures\n      // will not affect the ability to compute the bounding sphere\n      if (error.name !== \"TextureError\" && model.incrementallyLoadTextures) {\n        modelHash[entity.id].loadFailed = true;\n      }\n    });\n  } catch (error) {\n    if (visualizer.isDestroyed() || !defined(modelHash[entity.id])) {\n      return;\n    }\n\n    console.log(error);\n    modelHash[entity.id].loadFailed = true;\n  }\n}\n\n/**\n * Updates models created this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} This function always returns true.\n */\nModelVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const entities = this._entitiesToVisualize.values;\n  const modelHash = this._modelHash;\n  const primitives = this._primitives;\n\n  for (let i = 0, len = entities.length; i < len; i++) {\n    const entity = entities[i];\n    const modelGraphics = entity._model;\n\n    let resource;\n    let modelData = modelHash[entity.id];\n    let show =\n      entity.isShowing &&\n      entity.isAvailable(time) &&\n      Property.getValueOrDefault(modelGraphics._show, time, true);\n\n    let modelMatrix;\n    if (show) {\n      modelMatrix = entity.computeModelMatrix(time, modelMatrixScratch);\n      resource = Resource.createIfNeeded(\n        Property.getValueOrUndefined(modelGraphics._uri, time),\n      );\n      show = defined(modelMatrix) && defined(resource);\n    }\n\n    if (!show) {\n      if (defined(modelData) && modelData.modelPrimitive) {\n        modelData.modelPrimitive.show = false;\n      }\n      continue;\n    }\n\n    if (!defined(modelData) || resource.url !== modelData.url) {\n      if (defined(modelData?.modelPrimitive)) {\n        primitives.removeAndDestroy(modelData.modelPrimitive);\n        delete modelHash[entity.id];\n      }\n\n      modelData = {\n        modelPrimitive: undefined,\n        url: resource.url,\n        animationsRunning: false,\n        nodeTransformationsScratch: {},\n        articulationsScratch: {},\n        loadFailed: false,\n        modelUpdated: false,\n        environmentMapOptionsScratch: {\n          ...defaultEnvironmentMapOptions,\n        },\n      };\n      modelHash[entity.id] = modelData;\n\n      const incrementallyLoadTextures = Property.getValueOrDefault(\n        modelGraphics._incrementallyLoadTextures,\n        time,\n        defaultIncrementallyLoadTextures,\n      );\n\n      const environmentMapOptions = Property.getValueOrDefault(\n        modelGraphics._environmentMapOptions,\n        time,\n        defaultEnvironmentMapOptions,\n        modelData.environmentMapOptionsScratch,\n      );\n\n      createModelPrimitive(\n        this,\n        entity,\n        resource,\n        incrementallyLoadTextures,\n        environmentMapOptions,\n      );\n    }\n\n    const model = modelData.modelPrimitive;\n    if (!defined(model)) {\n      continue;\n    }\n\n    model.show = true;\n    model.scale = Property.getValueOrDefault(\n      modelGraphics._scale,\n      time,\n      defaultScale,\n    );\n\n    model.enableVerticalExaggeration = Property.getValueOrDefault(\n      modelGraphics._enableVerticalExaggeration,\n      time,\n      defaultEnableVerticalExaggeration,\n    );\n\n    model.minimumPixelSize = Property.getValueOrDefault(\n      modelGraphics._minimumPixelSize,\n      time,\n      defaultMinimumPixelSize,\n    );\n    model.maximumScale = Property.getValueOrUndefined(\n      modelGraphics._maximumScale,\n      time,\n    );\n    model.modelMatrix = Matrix4.clone(modelMatrix, model.modelMatrix);\n    model.shadows = Property.getValueOrDefault(\n      modelGraphics._shadows,\n      time,\n      defaultShadows,\n    );\n    model.heightReference = Property.getValueOrDefault(\n      modelGraphics._heightReference,\n      time,\n      defaultHeightReference,\n    );\n    model.distanceDisplayCondition = Property.getValueOrUndefined(\n      modelGraphics._distanceDisplayCondition,\n      time,\n    );\n    model.silhouetteColor = Property.getValueOrDefault(\n      modelGraphics._silhouetteColor,\n      time,\n      defaultSilhouetteColor,\n      scratchColor,\n    );\n    model.silhouetteSize = Property.getValueOrDefault(\n      modelGraphics._silhouetteSize,\n      time,\n      defaultSilhouetteSize,\n    );\n    model.color = Property.getValueOrDefault(\n      modelGraphics._color,\n      time,\n      defaultColor,\n      scratchColor,\n    );\n    model.colorBlendMode = Property.getValueOrDefault(\n      modelGraphics._colorBlendMode,\n      time,\n      defaultColorBlendMode,\n    );\n    model.colorBlendAmount = Property.getValueOrDefault(\n      modelGraphics._colorBlendAmount,\n      time,\n      defaultColorBlendAmount,\n    );\n    model.clippingPlanes = Property.getValueOrUndefined(\n      modelGraphics._clippingPlanes,\n      time,\n    );\n    model.clampAnimations = Property.getValueOrDefault(\n      modelGraphics._clampAnimations,\n      time,\n      defaultClampAnimations,\n    );\n    model.imageBasedLighting.imageBasedLightingFactor =\n      Property.getValueOrDefault(\n        modelGraphics._imageBasedLightingFactor,\n        time,\n        defaultImageBasedLightingFactor,\n      );\n    let lightColor = Property.getValueOrUndefined(\n      modelGraphics._lightColor,\n      time,\n    );\n\n    // Convert from Color to Cartesian3\n    if (defined(lightColor)) {\n      Color.pack(lightColor, scratchArray, 0);\n      lightColor = Cartesian3.unpack(scratchArray, 0, scratchCartesian);\n    }\n\n    model.lightColor = lightColor;\n    model.customShader = Property.getValueOrUndefined(\n      modelGraphics._customShader,\n      time,\n    );\n\n    // It's possible for getBoundingSphere to run before\n    // model becomes ready and these properties are updated\n    modelHash[entity.id].modelUpdated = true;\n\n    if (model.ready) {\n      const runAnimations = Property.getValueOrDefault(\n        modelGraphics._runAnimations,\n        time,\n        true,\n      );\n      if (modelData.animationsRunning !== runAnimations) {\n        if (runAnimations) {\n          model.activeAnimations.addAll({\n            loop: ModelAnimationLoop.REPEAT,\n          });\n        } else {\n          model.activeAnimations.removeAll();\n        }\n        modelData.animationsRunning = runAnimations;\n      }\n\n      // Apply node transformations\n      const nodeTransformations = Property.getValueOrUndefined(\n        modelGraphics._nodeTransformations,\n        time,\n        modelData.nodeTransformationsScratch,\n      );\n      if (defined(nodeTransformations)) {\n        const nodeNames = Object.keys(nodeTransformations);\n        for (\n          let nodeIndex = 0, nodeLength = nodeNames.length;\n          nodeIndex < nodeLength;\n          ++nodeIndex\n        ) {\n          const nodeName = nodeNames[nodeIndex];\n\n          const nodeTransformation = nodeTransformations[nodeName];\n          if (!defined(nodeTransformation)) {\n            continue;\n          }\n\n          const modelNode = model.getNode(nodeName);\n          if (!defined(modelNode)) {\n            continue;\n          }\n\n          const transformationMatrix = Matrix4.fromTranslationRotationScale(\n            nodeTransformation,\n            nodeMatrixScratch,\n          );\n          modelNode.matrix = Matrix4.multiply(\n            modelNode.originalMatrix,\n            transformationMatrix,\n            transformationMatrix,\n          );\n        }\n      }\n\n      // Apply articulations\n      let anyArticulationUpdated = false;\n      const articulations = Property.getValueOrUndefined(\n        modelGraphics._articulations,\n        time,\n        modelData.articulationsScratch,\n      );\n      if (defined(articulations)) {\n        const articulationStageKeys = Object.keys(articulations);\n        for (\n          let s = 0, numKeys = articulationStageKeys.length;\n          s < numKeys;\n          ++s\n        ) {\n          const key = articulationStageKeys[s];\n\n          const articulationStageValue = articulations[key];\n          if (!defined(articulationStageValue)) {\n            continue;\n          }\n\n          anyArticulationUpdated = true;\n          model.setArticulationStage(key, articulationStageValue);\n        }\n      }\n\n      if (anyArticulationUpdated) {\n        model.applyArticulations();\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nModelVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nModelVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    ModelVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  const entities = this._entitiesToVisualize.values;\n  const modelHash = this._modelHash;\n  const primitives = this._primitives;\n  for (let i = entities.length - 1; i > -1; i--) {\n    removeModel(this, entities[i], modelHash, primitives);\n  }\n  return destroyObject(this);\n};\n\nconst scratchPosition = new Cartesian3();\nconst scratchCartographic = new Cartographic();\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nModelVisualizer.prototype.getBoundingSphere = function (entity, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const modelData = this._modelHash[entity.id];\n  if (!defined(modelData)) {\n    return BoundingSphereState.FAILED;\n  }\n\n  if (modelData.loadFailed) {\n    return BoundingSphereState.FAILED;\n  }\n\n  const model = modelData.modelPrimitive;\n  if (!defined(model) || !model.show) {\n    return BoundingSphereState.PENDING;\n  }\n\n  if (!model.ready || !modelData.modelUpdated) {\n    return BoundingSphereState.PENDING;\n  }\n\n  const scene = this._scene;\n  const ellipsoid = scene.ellipsoid ?? Ellipsoid.default;\n\n  const hasHeightReference = model.heightReference !== HeightReference.NONE;\n  if (hasHeightReference) {\n    const modelMatrix = model.modelMatrix;\n    scratchPosition.x = modelMatrix[12];\n    scratchPosition.y = modelMatrix[13];\n    scratchPosition.z = modelMatrix[14];\n    const cartoPosition = ellipsoid.cartesianToCartographic(\n      scratchPosition,\n      scratchCartographic,\n    );\n\n    const height = scene.getHeight(cartoPosition, model.heightReference);\n    if (defined(height)) {\n      if (isHeightReferenceClamp(model.heightReference)) {\n        cartoPosition.height = height;\n      } else {\n        cartoPosition.height += height;\n      }\n    }\n\n    BoundingSphere.clone(model.boundingSphere, result);\n    result.center = ellipsoid.cartographicToCartesian(cartoPosition);\n    return BoundingSphereState.DONE;\n  }\n\n  BoundingSphere.clone(model.boundingSphere, result);\n  return BoundingSphereState.DONE;\n};\n\n/**\n * @private\n */\nModelVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n  changed,\n) {\n  let i;\n  let entity;\n  const entities = this._entitiesToVisualize;\n  const modelHash = this._modelHash;\n  const primitives = this._primitives;\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    if (defined(entity._model) && defined(entity._position)) {\n      entities.set(entity.id, entity);\n    }\n  }\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    if (defined(entity._model) && defined(entity._position)) {\n      clearNodeTransformationsArticulationsScratch(entity, modelHash);\n      entities.set(entity.id, entity);\n    } else {\n      removeModel(this, entity, modelHash, primitives);\n      entities.remove(entity.id);\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    removeModel(this, entity, modelHash, primitives);\n    entities.remove(entity.id);\n  }\n};\n\nfunction removeModel(visualizer, entity, modelHash, primitives) {\n  const modelData = modelHash[entity.id];\n  if (defined(modelData)) {\n    primitives.removeAndDestroy(modelData.modelPrimitive);\n    delete modelHash[entity.id];\n  }\n}\n\nfunction clearNodeTransformationsArticulationsScratch(entity, modelHash) {\n  const modelData = modelHash[entity.id];\n  if (defined(modelData)) {\n    modelData.nodeTransformationsScratch = {};\n    modelData.articulationsScratch = {};\n  }\n}\n\nexport default ModelVisualizer;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport TranslationRotationScale from \"../Core/TranslationRotationScale.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nconst defaultNodeTransformation = new TranslationRotationScale();\n\n/**\n * A {@link Property} that produces {@link TranslationRotationScale} data.\n * @alias NodeTransformationProperty\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|Cartesian3} [options.translation=Cartesian3.ZERO] A {@link Cartesian3} Property specifying the (x, y, z) translation to apply to the node.\n * @param {Property|Quaternion} [options.rotation=Quaternion.IDENTITY] A {@link Quaternion} Property specifying the (x, y, z, w) rotation to apply to the node.\n * @param {Property|Cartesian3} [options.scale=new Cartesian3(1.0, 1.0, 1.0)] A {@link Cartesian3} Property specifying the (x, y, z) scaling to apply to the node.\n */\nfunction NodeTransformationProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._translation = undefined;\n  this._translationSubscription = undefined;\n  this._rotation = undefined;\n  this._rotationSubscription = undefined;\n  this._scale = undefined;\n  this._scaleSubscription = undefined;\n\n  this.translation = options.translation;\n  this.rotation = options.rotation;\n  this.scale = options.scale;\n}\n\nObject.defineProperties(NodeTransformationProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof NodeTransformationProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._translation) &&\n        Property.isConstant(this._rotation) &&\n        Property.isConstant(this._scale)\n      );\n    },\n  },\n\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof NodeTransformationProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the {@link Cartesian3} Property specifying the (x, y, z) translation to apply to the node.\n   * @memberof NodeTransformationProperty.prototype\n   * @type {Property|undefined}\n   * @default Cartesian3.ZERO\n   */\n  translation: createPropertyDescriptor(\"translation\"),\n\n  /**\n   * Gets or sets the {@link Quaternion} Property specifying the (x, y, z, w) rotation to apply to the node.\n   * @memberof NodeTransformationProperty.prototype\n   * @type {Property|undefined}\n   * @default Quaternion.IDENTITY\n   */\n  rotation: createPropertyDescriptor(\"rotation\"),\n\n  /**\n   * Gets or sets the {@link Cartesian3} Property specifying the (x, y, z) scaling to apply to the node.\n   * @memberof NodeTransformationProperty.prototype\n   * @type {Property|undefined}\n   * @default new Cartesian3(1.0, 1.0, 1.0)\n   */\n  scale: createPropertyDescriptor(\"scale\"),\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {TranslationRotationScale} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {TranslationRotationScale} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nNodeTransformationProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = new TranslationRotationScale();\n  }\n\n  result.translation = Property.getValueOrClonedDefault(\n    this._translation,\n    time,\n    defaultNodeTransformation.translation,\n    result.translation,\n  );\n  result.rotation = Property.getValueOrClonedDefault(\n    this._rotation,\n    time,\n    defaultNodeTransformation.rotation,\n    result.rotation,\n  );\n  result.scale = Property.getValueOrClonedDefault(\n    this._scale,\n    time,\n    defaultNodeTransformation.scale,\n    result.scale,\n  );\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nNodeTransformationProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof NodeTransformationProperty &&\n      Property.equals(this._translation, other._translation) &&\n      Property.equals(this._rotation, other._rotation) &&\n      Property.equals(this._scale, other._scale))\n  );\n};\nexport default NodeTransformationProperty;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} PathGraphics.ConstructorOptions\n *\n * Initialization options for the PathGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the path.\n * @property {Property | number} [leadTime] A Property specifying the number of seconds in front the object to show.\n * @property {Property | number} [trailTime] A Property specifying the number of seconds behind of the object to show.\n * @property {Property | number} [width=1.0] A numeric Property specifying the width in pixels.\n * @property {Property | number} [resolution=60] A numeric Property specifying the maximum number of seconds to step when sampling the position.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to draw the path.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this path will be displayed.\n */\n\n/**\n * Describes a polyline defined as the path made by an {@link Entity} as it moves over time.\n *\n * @alias PathGraphics\n * @constructor\n *\n * @param {PathGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction PathGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._leadTime = undefined;\n  this._leadTimeSubscription = undefined;\n  this._trailTime = undefined;\n  this._trailTimeSubscription = undefined;\n  this._width = undefined;\n  this._widthSubscription = undefined;\n  this._resolution = undefined;\n  this._resolutionSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(PathGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof PathGraphics.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the path.\n   * @memberof PathGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the Property specifying the number of seconds in front of the object to show.\n   * @memberof PathGraphics.prototype\n   * @type {Property|undefined}\n   */\n  leadTime: createPropertyDescriptor(\"leadTime\"),\n\n  /**\n   * Gets or sets the Property specifying the number of seconds behind the object to show.\n   * @memberof PathGraphics.prototype\n   * @type {Property|undefined}\n   */\n  trailTime: createPropertyDescriptor(\"trailTime\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width in pixels.\n   * @memberof PathGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  width: createPropertyDescriptor(\"width\"),\n\n  /**\n   * Gets or sets the Property specifying the maximum number of seconds to step when sampling the position.\n   * @memberof PathGraphics.prototype\n   * @type {Property|undefined}\n   * @default 60\n   */\n  resolution: createPropertyDescriptor(\"resolution\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to draw the path.\n   * @memberof PathGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this path will be displayed.\n   * @memberof PathGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PathGraphics} [result] The object onto which to store the result.\n * @returns {PathGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPathGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new PathGraphics(this);\n  }\n  result.show = this.show;\n  result.leadTime = this.leadTime;\n  result.trailTime = this.trailTime;\n  result.width = this.width;\n  result.resolution = this.resolution;\n  result.material = this.material;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PathGraphics} source The object to be merged into this object.\n */\nPathGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.leadTime = this.leadTime ?? source.leadTime;\n  this.trailTime = this.trailTime ?? source.trailTime;\n  this.width = this.width ?? source.width;\n  this.resolution = this.resolution ?? source.resolution;\n  this.material = this.material ?? source.material;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n};\nexport default PathGraphics;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport PolylineCollection from \"../Scene/PolylineCollection.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport CallbackPositionProperty from \"./CallbackPositionProperty.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport ConstantPositionProperty from \"./ConstantPositionProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\nimport ReferenceProperty from \"./ReferenceProperty.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport ScaledPositionProperty from \"./ScaledPositionProperty.js\";\nimport TimeIntervalCollectionPositionProperty from \"./TimeIntervalCollectionPositionProperty.js\";\n\nconst defaultResolution = 60.0;\nconst defaultWidth = 1.0;\n\nconst scratchTimeInterval = new TimeInterval();\nconst subSampleCompositePropertyScratch = new TimeInterval();\nconst subSampleIntervalPropertyScratch = new TimeInterval();\n\nfunction EntityData(entity) {\n  this.entity = entity;\n  this.polyline = undefined;\n  this.index = undefined;\n  this.updater = undefined;\n}\n\nfunction subSampleSampledProperty(\n  property,\n  start,\n  stop,\n  times,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  startingIndex,\n  result,\n) {\n  let r = startingIndex;\n  //Always step exactly on start (but only use it if it exists.)\n  let tmp;\n  tmp = property.getValueInReferenceFrame(start, referenceFrame, result[r]);\n  if (defined(tmp)) {\n    result[r++] = tmp;\n  }\n\n  let steppedOnNow =\n    !defined(updateTime) ||\n    JulianDate.lessThanOrEquals(updateTime, start) ||\n    JulianDate.greaterThanOrEquals(updateTime, stop);\n\n  //Iterate over all interval times and add the ones that fall in our\n  //time range.  Note that times can contain data outside of\n  //the intervals range.  This is by design for use with interpolation.\n  let t = 0;\n  const len = times.length;\n  let current = times[t];\n  const loopStop = stop;\n  let sampling = false;\n  let sampleStepsToTake;\n  let sampleStepsTaken;\n  let sampleStepSize;\n\n  while (t < len) {\n    if (!steppedOnNow && JulianDate.greaterThanOrEquals(current, updateTime)) {\n      tmp = property.getValueInReferenceFrame(\n        updateTime,\n        referenceFrame,\n        result[r],\n      );\n      if (defined(tmp)) {\n        result[r++] = tmp;\n      }\n      steppedOnNow = true;\n    }\n    if (\n      JulianDate.greaterThan(current, start) &&\n      JulianDate.lessThan(current, loopStop) &&\n      !current.equals(updateTime)\n    ) {\n      tmp = property.getValueInReferenceFrame(\n        current,\n        referenceFrame,\n        result[r],\n      );\n      if (defined(tmp)) {\n        result[r++] = tmp;\n      }\n    }\n\n    if (t < len - 1) {\n      if (maximumStep > 0 && !sampling) {\n        const next = times[t + 1];\n        const secondsUntilNext = JulianDate.secondsDifference(next, current);\n        sampling = secondsUntilNext > maximumStep;\n\n        if (sampling) {\n          sampleStepsToTake = Math.ceil(secondsUntilNext / maximumStep);\n          sampleStepsTaken = 0;\n          sampleStepSize = secondsUntilNext / Math.max(sampleStepsToTake, 2);\n          sampleStepsToTake = Math.max(sampleStepsToTake - 1, 1);\n        }\n      }\n\n      if (sampling && sampleStepsTaken < sampleStepsToTake) {\n        current = JulianDate.addSeconds(\n          current,\n          sampleStepSize,\n          new JulianDate(),\n        );\n        sampleStepsTaken++;\n        continue;\n      }\n    }\n    sampling = false;\n    t++;\n    current = times[t];\n  }\n\n  //Always step exactly on stop (but only use it if it exists.)\n  tmp = property.getValueInReferenceFrame(stop, referenceFrame, result[r]);\n  if (defined(tmp)) {\n    result[r++] = tmp;\n  }\n\n  return r;\n}\n\nfunction subSampleCallbackPositionProperty(\n  property,\n  start,\n  stop,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  startingIndex,\n  result,\n) {\n  let tmp;\n  let i = 0;\n  let index = startingIndex;\n  let time = start;\n  let steppedOnNow =\n    !defined(updateTime) ||\n    JulianDate.lessThanOrEquals(updateTime, start) ||\n    JulianDate.greaterThanOrEquals(updateTime, stop);\n  while (JulianDate.lessThan(time, stop)) {\n    if (!steppedOnNow && JulianDate.greaterThanOrEquals(time, updateTime)) {\n      steppedOnNow = true;\n      tmp = property.getValueInReferenceFrame(\n        updateTime,\n        referenceFrame,\n        result[index],\n      );\n      if (defined(tmp)) {\n        result[index] = tmp;\n        index++;\n      }\n    }\n    tmp = property.getValueInReferenceFrame(\n      time,\n      referenceFrame,\n      result[index],\n    );\n    if (defined(tmp)) {\n      result[index] = tmp;\n      index++;\n    }\n    i++;\n    time = JulianDate.addSeconds(start, maximumStep * i, new JulianDate());\n  }\n  //Always sample stop.\n  tmp = property.getValueInReferenceFrame(stop, referenceFrame, result[index]);\n  if (defined(tmp)) {\n    result[index] = tmp;\n    index++;\n  }\n  return index;\n}\n\nfunction subSampleGenericProperty(\n  property,\n  start,\n  stop,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  startingIndex,\n  result,\n) {\n  let tmp;\n  let i = 0;\n  let index = startingIndex;\n  let time = start;\n  const stepSize = Math.max(maximumStep, 60);\n  let steppedOnNow =\n    !defined(updateTime) ||\n    JulianDate.lessThanOrEquals(updateTime, start) ||\n    JulianDate.greaterThanOrEquals(updateTime, stop);\n  while (JulianDate.lessThan(time, stop)) {\n    if (!steppedOnNow && JulianDate.greaterThanOrEquals(time, updateTime)) {\n      steppedOnNow = true;\n      tmp = property.getValueInReferenceFrame(\n        updateTime,\n        referenceFrame,\n        result[index],\n      );\n      if (defined(tmp)) {\n        result[index] = tmp;\n        index++;\n      }\n    }\n    tmp = property.getValueInReferenceFrame(\n      time,\n      referenceFrame,\n      result[index],\n    );\n    if (defined(tmp)) {\n      result[index] = tmp;\n      index++;\n    }\n    i++;\n    time = JulianDate.addSeconds(start, stepSize * i, new JulianDate());\n  }\n  //Always sample stop.\n  tmp = property.getValueInReferenceFrame(stop, referenceFrame, result[index]);\n  if (defined(tmp)) {\n    result[index] = tmp;\n    index++;\n  }\n  return index;\n}\n\nfunction subSampleIntervalProperty(\n  property,\n  start,\n  stop,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  startingIndex,\n  result,\n) {\n  subSampleIntervalPropertyScratch.start = start;\n  subSampleIntervalPropertyScratch.stop = stop;\n\n  let index = startingIndex;\n  const intervals = property.intervals;\n  for (let i = 0; i < intervals.length; i++) {\n    const interval = intervals.get(i);\n    if (\n      !TimeInterval.intersect(\n        interval,\n        subSampleIntervalPropertyScratch,\n        scratchTimeInterval,\n      ).isEmpty\n    ) {\n      let time = interval.start;\n      if (!interval.isStartIncluded) {\n        if (interval.isStopIncluded) {\n          time = interval.stop;\n        } else {\n          time = JulianDate.addSeconds(\n            interval.start,\n            JulianDate.secondsDifference(interval.stop, interval.start) / 2,\n            new JulianDate(),\n          );\n        }\n      }\n      const tmp = property.getValueInReferenceFrame(\n        time,\n        referenceFrame,\n        result[index],\n      );\n      if (defined(tmp)) {\n        result[index] = tmp;\n        index++;\n      }\n    }\n  }\n  return index;\n}\n\nfunction subSampleConstantProperty(\n  property,\n  start,\n  stop,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  startingIndex,\n  result,\n) {\n  const tmp = property.getValueInReferenceFrame(\n    start,\n    referenceFrame,\n    result[startingIndex],\n  );\n  if (defined(tmp)) {\n    result[startingIndex++] = tmp;\n  }\n  return startingIndex;\n}\n\nfunction subSampleCompositeProperty(\n  property,\n  start,\n  stop,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  startingIndex,\n  result,\n) {\n  subSampleCompositePropertyScratch.start = start;\n  subSampleCompositePropertyScratch.stop = stop;\n\n  let index = startingIndex;\n  const intervals = property.intervals;\n  for (let i = 0; i < intervals.length; i++) {\n    const interval = intervals.get(i);\n    if (\n      !TimeInterval.intersect(\n        interval,\n        subSampleCompositePropertyScratch,\n        scratchTimeInterval,\n      ).isEmpty\n    ) {\n      const intervalStart = interval.start;\n      const intervalStop = interval.stop;\n\n      let sampleStart = start;\n      if (JulianDate.greaterThan(intervalStart, sampleStart)) {\n        sampleStart = intervalStart;\n      }\n\n      let sampleStop = stop;\n      if (JulianDate.lessThan(intervalStop, sampleStop)) {\n        sampleStop = intervalStop;\n      }\n\n      index = reallySubSample(\n        interval.data,\n        sampleStart,\n        sampleStop,\n        updateTime,\n        referenceFrame,\n        maximumStep,\n        index,\n        result,\n      );\n    }\n  }\n  return index;\n}\n\nfunction reallySubSample(\n  property,\n  start,\n  stop,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  index,\n  result,\n) {\n  //Unwrap any references until we have the actual property.\n  while (property instanceof ReferenceProperty) {\n    property = property.resolvedProperty;\n  }\n\n  if (property instanceof SampledPositionProperty) {\n    const times = property._property._times;\n    index = subSampleSampledProperty(\n      property,\n      start,\n      stop,\n      times,\n      updateTime,\n      referenceFrame,\n      maximumStep,\n      index,\n      result,\n    );\n  } else if (property instanceof CallbackPositionProperty) {\n    index = subSampleCallbackPositionProperty(\n      property,\n      start,\n      stop,\n      updateTime,\n      referenceFrame,\n      maximumStep,\n      index,\n      result,\n    );\n  } else if (property instanceof CompositePositionProperty) {\n    index = subSampleCompositeProperty(\n      property,\n      start,\n      stop,\n      updateTime,\n      referenceFrame,\n      maximumStep,\n      index,\n      result,\n    );\n  } else if (property instanceof TimeIntervalCollectionPositionProperty) {\n    index = subSampleIntervalProperty(\n      property,\n      start,\n      stop,\n      updateTime,\n      referenceFrame,\n      maximumStep,\n      index,\n      result,\n    );\n  } else if (\n    property instanceof ConstantPositionProperty ||\n    (property instanceof ScaledPositionProperty &&\n      Property.isConstant(property))\n  ) {\n    index = subSampleConstantProperty(\n      property,\n      start,\n      stop,\n      updateTime,\n      referenceFrame,\n      maximumStep,\n      index,\n      result,\n    );\n  } else {\n    //Fallback to generic sampling.\n    index = subSampleGenericProperty(\n      property,\n      start,\n      stop,\n      updateTime,\n      referenceFrame,\n      maximumStep,\n      index,\n      result,\n    );\n  }\n  return index;\n}\n\nfunction subSample(\n  property,\n  start,\n  stop,\n  updateTime,\n  referenceFrame,\n  maximumStep,\n  result,\n) {\n  if (!defined(result)) {\n    result = [];\n  }\n\n  const length = reallySubSample(\n    property,\n    start,\n    stop,\n    updateTime,\n    referenceFrame,\n    maximumStep,\n    0,\n    result,\n  );\n  result.length = length;\n  return result;\n}\n\nconst toFixedScratch = new Matrix3();\nfunction PolylineUpdater(scene, referenceFrame) {\n  this._unusedIndexes = [];\n  this._polylineCollection = new PolylineCollection();\n  this._scene = scene;\n  this._referenceFrame = referenceFrame;\n  scene.primitives.add(this._polylineCollection);\n}\n\nPolylineUpdater.prototype.update = function (time) {\n  if (this._referenceFrame === ReferenceFrame.INERTIAL) {\n    const toFixed = Transforms.computeIcrfToCentralBodyFixedMatrix(\n      time,\n      toFixedScratch,\n    );\n    Matrix4.fromRotationTranslation(\n      toFixed,\n      Cartesian3.ZERO,\n      this._polylineCollection.modelMatrix,\n    );\n  }\n};\n\nPolylineUpdater.prototype.updateObject = function (time, item) {\n  const entity = item.entity;\n  const pathGraphics = entity._path;\n  const positionProperty = entity._position;\n\n  let sampleStart;\n  let sampleStop;\n  const showProperty = pathGraphics._show;\n  let polyline = item.polyline;\n  let show =\n    entity.isShowing &&\n    entity.isAvailable(time) &&\n    (!defined(showProperty) || showProperty.getValue(time));\n\n  //While we want to show the path, there may not actually be anything to show\n  //depending on lead/trail settings.  Compute the interval of the path to\n  //show and check against actual availability.\n  if (show) {\n    const leadTime = Property.getValueOrUndefined(pathGraphics._leadTime, time);\n    const trailTime = Property.getValueOrUndefined(\n      pathGraphics._trailTime,\n      time,\n    );\n    const availability = entity._availability;\n    const hasAvailability = defined(availability);\n    const hasLeadTime = defined(leadTime);\n    const hasTrailTime = defined(trailTime);\n\n    //Objects need to have either defined availability or both a lead and trail time in order to\n    //draw a path (since we can't draw \"infinite\" paths.\n    show = hasAvailability || (hasLeadTime && hasTrailTime);\n\n    //The final step is to compute the actual start/stop times of the path to show.\n    //If current time is outside of the availability interval, there's a chance that\n    //we won't have to draw anything anyway.\n    if (show) {\n      if (hasTrailTime) {\n        sampleStart = JulianDate.addSeconds(time, -trailTime, new JulianDate());\n      }\n      if (hasLeadTime) {\n        sampleStop = JulianDate.addSeconds(time, leadTime, new JulianDate());\n      }\n\n      if (hasAvailability) {\n        const start = availability.start;\n        const stop = availability.stop;\n\n        if (!hasTrailTime || JulianDate.greaterThan(start, sampleStart)) {\n          sampleStart = start;\n        }\n\n        if (!hasLeadTime || JulianDate.lessThan(stop, sampleStop)) {\n          sampleStop = stop;\n        }\n      }\n      show = JulianDate.lessThan(sampleStart, sampleStop);\n    }\n  }\n\n  if (!show) {\n    //don't bother creating or updating anything else\n    if (defined(polyline)) {\n      this._unusedIndexes.push(item.index);\n      item.polyline = undefined;\n      polyline.show = false;\n      item.index = undefined;\n    }\n    return;\n  }\n\n  if (!defined(polyline)) {\n    const unusedIndexes = this._unusedIndexes;\n    const length = unusedIndexes.length;\n    if (length > 0) {\n      const index = unusedIndexes.pop();\n      polyline = this._polylineCollection.get(index);\n      item.index = index;\n    } else {\n      item.index = this._polylineCollection.length;\n      polyline = this._polylineCollection.add();\n    }\n    polyline.id = entity;\n    item.polyline = polyline;\n  }\n\n  const resolution = Property.getValueOrDefault(\n    pathGraphics._resolution,\n    time,\n    defaultResolution,\n  );\n\n  polyline.show = true;\n  polyline.positions = subSample(\n    positionProperty,\n    sampleStart,\n    sampleStop,\n    time,\n    this._referenceFrame,\n    resolution,\n    polyline.positions.slice(),\n  );\n  polyline.material = MaterialProperty.getValue(\n    time,\n    pathGraphics._material,\n    polyline.material,\n  );\n  polyline.width = Property.getValueOrDefault(\n    pathGraphics._width,\n    time,\n    defaultWidth,\n  );\n  polyline.distanceDisplayCondition = Property.getValueOrUndefined(\n    pathGraphics._distanceDisplayCondition,\n    time,\n    polyline.distanceDisplayCondition,\n  );\n};\n\nPolylineUpdater.prototype.removeObject = function (item) {\n  const polyline = item.polyline;\n  if (defined(polyline)) {\n    this._unusedIndexes.push(item.index);\n    item.polyline = undefined;\n    polyline.show = false;\n    polyline.id = undefined;\n    item.index = undefined;\n  }\n};\n\nPolylineUpdater.prototype.destroy = function () {\n  this._scene.primitives.remove(this._polylineCollection);\n  return destroyObject(this);\n};\n\n/**\n * A {@link Visualizer} which maps {@link Entity#path} to a {@link Polyline}.\n * @alias PathVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction PathVisualizer(scene, entityCollection) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  if (!defined(entityCollection)) {\n    throw new DeveloperError(\"entityCollection is required.\");\n  }\n  //>>includeEnd('debug');\n\n  entityCollection.collectionChanged.addEventListener(\n    PathVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n\n  this._scene = scene;\n  this._updaters = {};\n  this._entityCollection = entityCollection;\n  this._items = new AssociativeArray();\n\n  this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates all of the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} This function always returns true.\n */\nPathVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const updaters = this._updaters;\n  for (const key in updaters) {\n    if (updaters.hasOwnProperty(key)) {\n      updaters[key].update(time);\n    }\n  }\n\n  const items = this._items.values;\n  if (\n    items.length === 0 &&\n    defined(this._updaters) &&\n    Object.keys(this._updaters).length > 0\n  ) {\n    for (const u in updaters) {\n      if (updaters.hasOwnProperty(u)) {\n        updaters[u].destroy();\n      }\n    }\n    this._updaters = {};\n  }\n\n  for (let i = 0, len = items.length; i < len; i++) {\n    const item = items[i];\n    const entity = item.entity;\n    const positionProperty = entity._position;\n\n    const lastUpdater = item.updater;\n\n    let frameToVisualize = ReferenceFrame.FIXED;\n    if (this._scene.mode === SceneMode.SCENE3D) {\n      frameToVisualize = positionProperty.referenceFrame;\n    }\n\n    let currentUpdater = this._updaters[frameToVisualize];\n\n    if (lastUpdater === currentUpdater && defined(currentUpdater)) {\n      currentUpdater.updateObject(time, item);\n      continue;\n    }\n\n    if (defined(lastUpdater)) {\n      lastUpdater.removeObject(item);\n    }\n\n    if (!defined(currentUpdater)) {\n      currentUpdater = new PolylineUpdater(this._scene, frameToVisualize);\n      currentUpdater.update(time);\n      this._updaters[frameToVisualize] = currentUpdater;\n    }\n\n    item.updater = currentUpdater;\n    if (defined(currentUpdater)) {\n      currentUpdater.updateObject(time, item);\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nPathVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nPathVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    PathVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n\n  const updaters = this._updaters;\n  for (const key in updaters) {\n    if (updaters.hasOwnProperty(key)) {\n      updaters[key].destroy();\n    }\n  }\n\n  return destroyObject(this);\n};\n\nPathVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n  changed,\n) {\n  let i;\n  let entity;\n  let item;\n  const items = this._items;\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    if (defined(entity._path) && defined(entity._position)) {\n      items.set(entity.id, new EntityData(entity));\n    }\n  }\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    if (defined(entity._path) && defined(entity._position)) {\n      if (!items.contains(entity.id)) {\n        items.set(entity.id, new EntityData(entity));\n      }\n    } else {\n      item = items.get(entity.id);\n      if (defined(item)) {\n        if (defined(item.updater)) {\n          item.updater.removeObject(item);\n        }\n        items.remove(entity.id);\n      }\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    item = items.get(entity.id);\n    if (defined(item)) {\n      if (defined(item.updater)) {\n        item.updater.removeObject(item);\n      }\n      items.remove(entity.id);\n    }\n  }\n};\n\n//for testing\nPathVisualizer._subSample = subSample;\nexport default PathVisualizer;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PlaneGeometry from \"../Core/PlaneGeometry.js\";\nimport PlaneOutlineGeometry from \"../Core/PlaneOutlineGeometry.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nconst positionScratch = new Cartesian3();\nconst scratchColor = new Color();\n\nfunction PlaneGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.plane = undefined;\n  this.dimensions = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for planes.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PlaneGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PlaneGeometryUpdater(entity, scene) {\n  GeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new PlaneGeometryOptions(entity),\n    geometryPropertyName: \"plane\",\n    observedPropertyNames: [\"availability\", \"position\", \"orientation\", \"plane\"],\n  });\n\n  this._onEntityPropertyChanged(entity, \"plane\", entity.plane, undefined);\n}\n\nif (defined(Object.create)) {\n  PlaneGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n  PlaneGeometryUpdater.prototype.constructor = PlaneGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPlaneGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  let attributes;\n\n  let color;\n  const show = new ShowGeometryInstanceAttribute(\n    isAvailable &&\n      entity.isShowing &&\n      this._showProperty.getValue(time) &&\n      this._fillProperty.getValue(time),\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n  const distanceDisplayConditionAttribute =\n    DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n      distanceDisplayCondition,\n    );\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n    attributes = {\n      show: show,\n      distanceDisplayCondition: distanceDisplayConditionAttribute,\n      color: color,\n    };\n  } else {\n    attributes = {\n      show: show,\n      distanceDisplayCondition: distanceDisplayConditionAttribute,\n    };\n  }\n\n  const planeGraphics = entity.plane;\n  const options = this._options;\n  let modelMatrix = entity.computeModelMatrix(time);\n  const plane = Property.getValueOrDefault(\n    planeGraphics.plane,\n    time,\n    options.plane,\n  );\n  const dimensions = Property.getValueOrUndefined(\n    planeGraphics.dimensions,\n    time,\n    options.dimensions,\n  );\n\n  options.plane = plane;\n  options.dimensions = dimensions;\n\n  modelMatrix = createPrimitiveMatrix(\n    plane,\n    dimensions,\n    modelMatrix,\n    modelMatrix,\n  );\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new PlaneGeometry(this._options),\n    modelMatrix: modelMatrix,\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPlaneGeometryUpdater.prototype.createOutlineGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  const planeGraphics = entity.plane;\n  const options = this._options;\n  let modelMatrix = entity.computeModelMatrix(time);\n  const plane = Property.getValueOrDefault(\n    planeGraphics.plane,\n    time,\n    options.plane,\n  );\n  const dimensions = Property.getValueOrUndefined(\n    planeGraphics.dimensions,\n    time,\n    options.dimensions,\n  );\n\n  options.plane = plane;\n  options.dimensions = dimensions;\n\n  modelMatrix = createPrimitiveMatrix(\n    plane,\n    dimensions,\n    modelMatrix,\n    modelMatrix,\n  );\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new PlaneOutlineGeometry(),\n    modelMatrix: modelMatrix,\n    attributes: {\n      show: new ShowGeometryInstanceAttribute(\n        isAvailable &&\n          entity.isShowing &&\n          this._showProperty.getValue(time) &&\n          this._showOutlineProperty.getValue(time),\n      ),\n      color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n      distanceDisplayCondition:\n        DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n          distanceDisplayCondition,\n        ),\n    },\n  });\n};\n\nPlaneGeometryUpdater.prototype._isHidden = function (entity, plane) {\n  return (\n    !defined(plane.plane) ||\n    !defined(plane.dimensions) ||\n    !defined(entity.position) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, plane)\n  );\n};\n\nPlaneGeometryUpdater.prototype._getIsClosed = function (options) {\n  return false;\n};\n\nPlaneGeometryUpdater.prototype._isDynamic = function (entity, plane) {\n  return (\n    !entity.position.isConstant || //\n    !Property.isConstant(entity.orientation) || //\n    !plane.plane.isConstant || //\n    !plane.dimensions.isConstant || //\n    !Property.isConstant(plane.outlineWidth)\n  );\n};\n\nPlaneGeometryUpdater.prototype._setStaticOptions = function (entity, plane) {\n  const isColorMaterial =\n    this._materialProperty instanceof ColorMaterialProperty;\n\n  const options = this._options;\n  options.vertexFormat = isColorMaterial\n    ? PerInstanceColorAppearance.VERTEX_FORMAT\n    : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.plane = plane.plane.getValue(Iso8601.MINIMUM_VALUE, options.plane);\n  options.dimensions = plane.dimensions.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.dimensions,\n  );\n};\n\nPlaneGeometryUpdater.DynamicGeometryUpdater = DynamicPlaneGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicPlaneGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicPlaneGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicPlaneGeometryUpdater.prototype.constructor =\n    DynamicPlaneGeometryUpdater;\n}\n\nDynamicPlaneGeometryUpdater.prototype._isHidden = function (\n  entity,\n  plane,\n  time,\n) {\n  const options = this._options;\n  const position = Property.getValueOrUndefined(\n    entity.position,\n    time,\n    positionScratch,\n  );\n  return (\n    !defined(position) ||\n    !defined(options.plane) ||\n    !defined(options.dimensions) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(this, entity, plane, time)\n  );\n};\n\nDynamicPlaneGeometryUpdater.prototype._setOptions = function (\n  entity,\n  plane,\n  time,\n) {\n  const options = this._options;\n  options.plane = Property.getValueOrDefault(plane.plane, time, options.plane);\n  options.dimensions = Property.getValueOrUndefined(\n    plane.dimensions,\n    time,\n    options.dimensions,\n  );\n};\n\nconst scratchAxis = new Cartesian3();\nconst scratchUp = new Cartesian3();\nconst scratchTranslation = new Cartesian3();\nconst scratchScale = new Cartesian3();\nconst scratchRotation = new Matrix3();\nconst scratchRotationScale = new Matrix3();\nconst scratchLocalTransform = new Matrix4();\nfunction createPrimitiveMatrix(plane, dimensions, transform, result) {\n  const normal = plane.normal;\n  const distance = plane.distance;\n\n  const translation = Cartesian3.multiplyByScalar(\n    normal,\n    -distance,\n    scratchTranslation,\n  );\n\n  let up = Cartesian3.clone(Cartesian3.UNIT_Z, scratchUp);\n  if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(Cartesian3.dot(up, normal)),\n      1.0,\n      CesiumMath.EPSILON8,\n    )\n  ) {\n    up = Cartesian3.clone(Cartesian3.UNIT_Y, up);\n  }\n\n  const left = Cartesian3.cross(up, normal, scratchAxis);\n  up = Cartesian3.cross(normal, left, up);\n  Cartesian3.normalize(left, left);\n  Cartesian3.normalize(up, up);\n\n  const rotationMatrix = scratchRotation;\n  Matrix3.setColumn(rotationMatrix, 0, left, rotationMatrix);\n  Matrix3.setColumn(rotationMatrix, 1, up, rotationMatrix);\n  Matrix3.setColumn(rotationMatrix, 2, normal, rotationMatrix);\n\n  const scale = Cartesian3.fromElements(\n    dimensions.x,\n    dimensions.y,\n    1.0,\n    scratchScale,\n  );\n  const rotationScaleMatrix = Matrix3.multiplyByScale(\n    rotationMatrix,\n    scale,\n    scratchRotationScale,\n  );\n\n  const localTransform = Matrix4.fromRotationTranslation(\n    rotationScaleMatrix,\n    translation,\n    scratchLocalTransform,\n  );\n  return Matrix4.multiplyTransformation(transform, localTransform, result);\n}\n\n/**\n * @private\n */\nPlaneGeometryUpdater.createPrimitiveMatrix = createPrimitiveMatrix;\nexport default PlaneGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} PlaneGraphics.ConstructorOptions\n *\n * Initialization options for the PlaneGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the plane.\n * @property {Property | Plane} [plane] A {@link Plane} Property specifying the normal and distance for the plane.\n * @property {Property | Cartesian2} [dimensions] A {@link Cartesian2} Property specifying the width and height of the plane.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the plane is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the plane.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the plane is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the plane casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this plane will be displayed.\n */\n\n/**\n * Describes a plane. The center position and orientation are determined by the containing {@link Entity}.\n *\n * @alias PlaneGraphics\n * @constructor\n *\n * @param {PlaneGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=plane|Cesium Sandcastle Plane Demo}\n */\nfunction PlaneGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._plane = undefined;\n  this._planeSubscription = undefined;\n  this._dimensions = undefined;\n  this._dimensionsSubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(PlaneGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof PlaneGraphics.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the plane.\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the {@link Plane} Property specifying the normal and distance of the plane.\n   *\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   */\n  plane: createPropertyDescriptor(\"plane\"),\n\n  /**\n   * Gets or sets the {@link Cartesian2} Property specifying the width and height of the plane.\n   *\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   */\n  dimensions: createPropertyDescriptor(\"dimensions\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the plane is filled with the provided material.\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the material used to fill the plane.\n   * @memberof PlaneGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the plane is outlined.\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the plane\n   * casts or receives shadows from light sources.\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this plane will be displayed.\n   * @memberof PlaneGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PlaneGraphics} [result] The object onto which to store the result.\n * @returns {PlaneGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPlaneGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new PlaneGraphics(this);\n  }\n  result.show = this.show;\n  result.plane = this.plane;\n  result.dimensions = this.dimensions;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PlaneGraphics} source The object to be merged into this object.\n */\nPlaneGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.plane = this.plane ?? source.plane;\n  this.dimensions = this.dimensions ?? source.dimensions;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n};\nexport default PlaneGraphics;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} PointGraphics.ConstructorOptions\n *\n * Initialization options for the PointGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the point.\n * @property {Property | number} [pixelSize=1] A numeric Property specifying the size in pixels.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | Color} [color=Color.WHITE] A Property specifying the {@link Color} of the point.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=0] A numeric Property specifying the the outline width in pixels.\n * @property {Property | NearFarScalar} [scaleByDistance] A {@link NearFarScalar} Property used to scale the point based on distance.\n * @property {Property | NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} Property used to set translucency based on distance from the camera.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this point will be displayed.\n * @property {Property | number} [disableDepthTestDistance] A Property specifying the distance from the camera at which to disable the depth test to.\n * @property {Property | SplitDirection} [splitDirection] A Property specifying the {@link SplitDirection} split to apply to this point.\n */\n\n/**\n * Describes a graphical point located at the position of the containing {@link Entity}.\n *\n * @alias PointGraphics\n * @constructor\n *\n * @param {PointGraphics.ConstructorOptions} [options] Object describing initialization options\n */\nfunction PointGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._pixelSize = undefined;\n  this._pixelSizeSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._scaleByDistance = undefined;\n  this._scaleByDistanceSubscription = undefined;\n  this._translucencyByDistance = undefined;\n  this._translucencyByDistanceSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._disableDepthTestDistance = undefined;\n  this._disableDepthTestDistanceSubscription = undefined;\n  this._splitDirection = undefined;\n  this._splitDirectionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(PointGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof PointGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the point.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the size in pixels.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1\n   */\n  pixelSize: createPropertyDescriptor(\"pixelSize\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the point.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the the outline width in pixels.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Gets or sets the {@link NearFarScalar} Property used to scale the point based on distance.\n   * If undefined, a constant size is used.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   */\n  scaleByDistance: createPropertyDescriptor(\"scaleByDistance\"),\n\n  /**\n   * Gets or sets {@link NearFarScalar} Property specifying the translucency of the point based on the distance from the camera.\n   * A point's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the points's translucency remains clamped to the nearest bound.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   */\n  translucencyByDistance: createPropertyDescriptor(\"translucencyByDistance\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this point will be displayed.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n   * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   */\n  disableDepthTestDistance: createPropertyDescriptor(\n    \"disableDepthTestDistance\",\n  ),\n\n  /**\n   * Gets or sets the Property specifying the {@link SplitDirection} of this point.\n   * @memberof PointGraphics.prototype\n   * @type {Property|undefined}\n   * @default SplitDirection.NONE\n   */\n  splitDirection: createPropertyDescriptor(\"splitDirection\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PointGraphics} [result] The object onto which to store the result.\n * @returns {PointGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPointGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new PointGraphics(this);\n  }\n  result.show = this.show;\n  result.pixelSize = this.pixelSize;\n  result.heightReference = this.heightReference;\n  result.color = this.color;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.scaleByDistance = this.scaleByDistance;\n  result.translucencyByDistance = this._translucencyByDistance;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.disableDepthTestDistance = this.disableDepthTestDistance;\n  result.splitDirection = this.splitDirection;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PointGraphics} source The object to be merged into this object.\n */\nPointGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.pixelSize = this.pixelSize ?? source.pixelSize;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.color = this.color ?? source.color;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.scaleByDistance = this.scaleByDistance ?? source.scaleByDistance;\n  this.translucencyByDistance =\n    this._translucencyByDistance ?? source.translucencyByDistance;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.disableDepthTestDistance =\n    this.disableDepthTestDistance ?? source.disableDepthTestDistance;\n\n  this.splitDirection = this.splitDirection ?? source.splitDirection;\n};\nexport default PointGraphics;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport createBillboardPointCallback from \"../Scene/createBillboardPointCallback.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\nimport SplitDirection from \"../Scene/SplitDirection.js\";\n\nconst defaultColor = Color.WHITE;\nconst defaultOutlineColor = Color.BLACK;\nconst defaultOutlineWidth = 0.0;\nconst defaultPixelSize = 1.0;\nconst defaultDisableDepthTestDistance = 0.0;\nconst defaultSplitDirection = SplitDirection.NONE;\n\nconst colorScratch = new Color();\nconst positionScratch = new Cartesian3();\nconst outlineColorScratch = new Color();\nconst scaleByDistanceScratch = new NearFarScalar();\nconst translucencyByDistanceScratch = new NearFarScalar();\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\n\nfunction EntityData(entity) {\n  this.entity = entity;\n  this.pointPrimitive = undefined;\n  this.billboard = undefined;\n  this.color = undefined;\n  this.outlineColor = undefined;\n  this.pixelSize = undefined;\n  this.outlineWidth = undefined;\n}\n\n/**\n * A {@link Visualizer} which maps {@link Entity#point} to a {@link PointPrimitive}.\n * @alias PointVisualizer\n * @constructor\n *\n * @param {EntityCluster} entityCluster The entity cluster to manage the collection of billboards and optionally cluster with other entities.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n */\nfunction PointVisualizer(entityCluster, entityCollection) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entityCluster)) {\n    throw new DeveloperError(\"entityCluster is required.\");\n  }\n  if (!defined(entityCollection)) {\n    throw new DeveloperError(\"entityCollection is required.\");\n  }\n  //>>includeEnd('debug');\n\n  entityCollection.collectionChanged.addEventListener(\n    PointVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n\n  this._cluster = entityCluster;\n  this._entityCollection = entityCollection;\n  this._items = new AssociativeArray();\n  this._onCollectionChanged(entityCollection, entityCollection.values, [], []);\n}\n\n/**\n * Updates the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} This function always returns true.\n */\nPointVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const items = this._items.values;\n  const cluster = this._cluster;\n  for (let i = 0, len = items.length; i < len; i++) {\n    const item = items[i];\n    const entity = item.entity;\n    const pointGraphics = entity._point;\n    let pointPrimitive = item.pointPrimitive;\n    let billboard = item.billboard;\n    const heightReference = Property.getValueOrDefault(\n      pointGraphics._heightReference,\n      time,\n      HeightReference.NONE,\n    );\n    let show =\n      entity.isShowing &&\n      entity.isAvailable(time) &&\n      Property.getValueOrDefault(pointGraphics._show, time, true);\n    let position;\n    if (show) {\n      position = Property.getValueOrUndefined(\n        entity._position,\n        time,\n        positionScratch,\n      );\n      show = defined(position);\n    }\n    if (!show) {\n      returnPrimitive(item, entity, cluster);\n      continue;\n    }\n\n    if (!Property.isConstant(entity._position)) {\n      cluster._clusterDirty = true;\n    }\n\n    let needsRedraw = false;\n    let updateClamping = false;\n    if (heightReference !== HeightReference.NONE && !defined(billboard)) {\n      if (defined(pointPrimitive)) {\n        returnPrimitive(item, entity, cluster);\n        pointPrimitive = undefined;\n      }\n\n      billboard = cluster.getBillboard(entity);\n      billboard.id = entity;\n      billboard.image = undefined;\n      item.billboard = billboard;\n      needsRedraw = true;\n\n      // If this new billboard happens to have a position and height reference that match our new values,\n      // billboard._updateClamping will not be called automatically. That's a problem because the clamped\n      // height may be based on different terrain than is now loaded. So we'll manually call\n      // _updateClamping below.\n      updateClamping =\n        Cartesian3.equals(billboard.position, position) &&\n        billboard.heightReference === heightReference;\n    } else if (\n      heightReference === HeightReference.NONE &&\n      !defined(pointPrimitive)\n    ) {\n      if (defined(billboard)) {\n        returnPrimitive(item, entity, cluster);\n        billboard = undefined;\n      }\n\n      pointPrimitive = cluster.getPoint(entity);\n      pointPrimitive.id = entity;\n      item.pointPrimitive = pointPrimitive;\n    }\n\n    if (defined(pointPrimitive)) {\n      pointPrimitive.show = true;\n      pointPrimitive.position = position;\n      pointPrimitive.scaleByDistance = Property.getValueOrUndefined(\n        pointGraphics._scaleByDistance,\n        time,\n        scaleByDistanceScratch,\n      );\n      pointPrimitive.translucencyByDistance = Property.getValueOrUndefined(\n        pointGraphics._translucencyByDistance,\n        time,\n        translucencyByDistanceScratch,\n      );\n      pointPrimitive.color = Property.getValueOrDefault(\n        pointGraphics._color,\n        time,\n        defaultColor,\n        colorScratch,\n      );\n      pointPrimitive.outlineColor = Property.getValueOrDefault(\n        pointGraphics._outlineColor,\n        time,\n        defaultOutlineColor,\n        outlineColorScratch,\n      );\n      pointPrimitive.outlineWidth = Property.getValueOrDefault(\n        pointGraphics._outlineWidth,\n        time,\n        defaultOutlineWidth,\n      );\n      pointPrimitive.pixelSize = Property.getValueOrDefault(\n        pointGraphics._pixelSize,\n        time,\n        defaultPixelSize,\n      );\n      pointPrimitive.distanceDisplayCondition = Property.getValueOrUndefined(\n        pointGraphics._distanceDisplayCondition,\n        time,\n        distanceDisplayConditionScratch,\n      );\n      pointPrimitive.disableDepthTestDistance = Property.getValueOrDefault(\n        pointGraphics._disableDepthTestDistance,\n        time,\n        defaultDisableDepthTestDistance,\n      );\n      pointPrimitive.splitDirection = Property.getValueOrDefault(\n        pointGraphics._splitDirection,\n        time,\n        defaultSplitDirection,\n      );\n    } else if (defined(billboard)) {\n      billboard.show = true;\n      billboard.position = position;\n      billboard.scaleByDistance = Property.getValueOrUndefined(\n        pointGraphics._scaleByDistance,\n        time,\n        scaleByDistanceScratch,\n      );\n      billboard.translucencyByDistance = Property.getValueOrUndefined(\n        pointGraphics._translucencyByDistance,\n        time,\n        translucencyByDistanceScratch,\n      );\n      billboard.distanceDisplayCondition = Property.getValueOrUndefined(\n        pointGraphics._distanceDisplayCondition,\n        time,\n        distanceDisplayConditionScratch,\n      );\n      billboard.disableDepthTestDistance = Property.getValueOrDefault(\n        pointGraphics._disableDepthTestDistance,\n        time,\n        defaultDisableDepthTestDistance,\n      );\n      billboard.splitDirection = Property.getValueOrDefault(\n        pointGraphics._splitDirection,\n        time,\n        defaultSplitDirection,\n      );\n      billboard.heightReference = heightReference;\n\n      const newColor = Property.getValueOrDefault(\n        pointGraphics._color,\n        time,\n        defaultColor,\n        colorScratch,\n      );\n      const newOutlineColor = Property.getValueOrDefault(\n        pointGraphics._outlineColor,\n        time,\n        defaultOutlineColor,\n        outlineColorScratch,\n      );\n      const newOutlineWidth = Math.round(\n        Property.getValueOrDefault(\n          pointGraphics._outlineWidth,\n          time,\n          defaultOutlineWidth,\n        ),\n      );\n      let newPixelSize = Math.max(\n        1,\n        Math.round(\n          Property.getValueOrDefault(\n            pointGraphics._pixelSize,\n            time,\n            defaultPixelSize,\n          ),\n        ),\n      );\n\n      if (newOutlineWidth > 0) {\n        billboard.scale = 1.0;\n        needsRedraw =\n          needsRedraw || //\n          newOutlineWidth !== item.outlineWidth || //\n          newPixelSize !== item.pixelSize || //\n          !Color.equals(newColor, item.color) || //\n          !Color.equals(newOutlineColor, item.outlineColor);\n      } else {\n        billboard.scale = newPixelSize / 50.0;\n        newPixelSize = 50.0;\n        needsRedraw =\n          needsRedraw || //\n          newOutlineWidth !== item.outlineWidth || //\n          !Color.equals(newColor, item.color) || //\n          !Color.equals(newOutlineColor, item.outlineColor);\n      }\n\n      if (needsRedraw) {\n        item.color = Color.clone(newColor, item.color);\n        item.outlineColor = Color.clone(newOutlineColor, item.outlineColor);\n        item.pixelSize = newPixelSize;\n        item.outlineWidth = newOutlineWidth;\n\n        const centerAlpha = newColor.alpha;\n        const cssColor = newColor.toCssColorString();\n        const cssOutlineColor = newOutlineColor.toCssColorString();\n        const textureId = JSON.stringify([\n          cssColor,\n          newPixelSize,\n          cssOutlineColor,\n          newOutlineWidth,\n        ]);\n\n        billboard.setImage(\n          textureId,\n          createBillboardPointCallback(\n            centerAlpha,\n            cssColor,\n            cssOutlineColor,\n            newOutlineWidth,\n            newPixelSize,\n          ),\n        );\n      }\n\n      if (updateClamping) {\n        billboard._updateClamping();\n      }\n    }\n  }\n  return true;\n};\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nPointVisualizer.prototype.getBoundingSphere = function (entity, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required.\");\n  }\n  if (!defined(result)) {\n    throw new DeveloperError(\"result is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const item = this._items.get(entity.id);\n  if (\n    !defined(item) ||\n    !(defined(item.pointPrimitive) || defined(item.billboard))\n  ) {\n    return BoundingSphereState.FAILED;\n  }\n\n  if (defined(item.pointPrimitive)) {\n    result.center = Cartesian3.clone(\n      item.pointPrimitive.position,\n      result.center,\n    );\n  } else {\n    const billboard = item.billboard;\n    if (!defined(billboard._clampedPosition)) {\n      return BoundingSphereState.PENDING;\n    }\n    result.center = Cartesian3.clone(billboard._clampedPosition, result.center);\n  }\n\n  result.radius = 0;\n  return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nPointVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nPointVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    PointVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  const entities = this._entityCollection.values;\n  for (let i = 0; i < entities.length; i++) {\n    this._cluster.removePoint(entities[i]);\n  }\n  return destroyObject(this);\n};\n\nPointVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n  changed,\n) {\n  let i;\n  let entity;\n  const items = this._items;\n  const cluster = this._cluster;\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    if (defined(entity._point) && defined(entity._position)) {\n      items.set(entity.id, new EntityData(entity));\n    }\n  }\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    if (defined(entity._point) && defined(entity._position)) {\n      if (!items.contains(entity.id)) {\n        items.set(entity.id, new EntityData(entity));\n      }\n    } else {\n      returnPrimitive(items.get(entity.id), entity, cluster);\n      items.remove(entity.id);\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    returnPrimitive(items.get(entity.id), entity, cluster);\n    items.remove(entity.id);\n  }\n};\n\nfunction returnPrimitive(item, entity, cluster) {\n  if (defined(item)) {\n    const pointPrimitive = item.pointPrimitive;\n    if (defined(pointPrimitive)) {\n      item.pointPrimitive = undefined;\n      cluster.removePoint(entity);\n      return;\n    }\n    const billboard = item.billboard;\n    if (defined(billboard)) {\n      item.billboard = undefined;\n      cluster.removeBillboard(entity);\n    }\n  }\n}\nexport default PointVisualizer;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport ArcType from \"../Core/ArcType.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CoplanarPolygonGeometry from \"../Core/CoplanarPolygonGeometry.js\";\nimport CoplanarPolygonOutlineGeometry from \"../Core/CoplanarPolygonOutlineGeometry.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport EllipsoidTangentPlane from \"../Core/EllipsoidTangentPlane.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PolygonGeometry from \"../Core/PolygonGeometry.js\";\nimport PolygonOutlineGeometry from \"../Core/PolygonOutlineGeometry.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nconst heightAndPerPositionHeightWarning =\n  \"Entity polygons cannot have both height and perPositionHeight.  height will be ignored\";\nconst heightReferenceAndPerPositionHeightWarning =\n  \"heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored\";\n\nconst scratchColor = new Color();\nconst defaultOffset = Cartesian3.ZERO;\nconst offsetScratch = new Cartesian3();\nconst scratchRectangle = new Rectangle();\nconst scratch2DPositions = [];\nconst cart2Scratch = new Cartesian2();\n\nfunction PolygonGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.polygonHierarchy = undefined;\n  this.perPositionHeight = undefined;\n  this.closeTop = undefined;\n  this.closeBottom = undefined;\n  this.height = undefined;\n  this.extrudedHeight = undefined;\n  this.granularity = undefined;\n  this.stRotation = undefined;\n  this.offsetAttribute = undefined;\n  this.arcType = undefined;\n  this.textureCoordinates = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for polygons.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PolygonGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PolygonGeometryUpdater(entity, scene) {\n  GroundGeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new PolygonGeometryOptions(entity),\n    geometryPropertyName: \"polygon\",\n    observedPropertyNames: [\"availability\", \"polygon\"],\n  });\n\n  this._onEntityPropertyChanged(entity, \"polygon\", entity.polygon, undefined);\n}\n\nif (defined(Object.create)) {\n  PolygonGeometryUpdater.prototype = Object.create(\n    GroundGeometryUpdater.prototype,\n  );\n  PolygonGeometryUpdater.prototype.constructor = PolygonGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPolygonGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const options = this._options;\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._fillProperty.getValue(time),\n    ),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        this._distanceDisplayConditionProperty.getValue(time),\n      ),\n    offset: undefined,\n    color: undefined,\n  };\n\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n  if (defined(options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  let geometry;\n  if (options.perPositionHeight && !defined(options.extrudedHeight)) {\n    geometry = new CoplanarPolygonGeometry(options);\n  } else {\n    geometry = new PolygonGeometry(options);\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: geometry,\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPolygonGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const options = this._options;\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._showOutlineProperty.getValue(time),\n    ),\n    color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        distanceDisplayCondition,\n      ),\n    offset: undefined,\n  };\n\n  if (defined(options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  let geometry;\n  if (options.perPositionHeight && !defined(options.extrudedHeight)) {\n    geometry = new CoplanarPolygonOutlineGeometry(options);\n  } else {\n    geometry = new PolygonOutlineGeometry(options);\n  }\n  return new GeometryInstance({\n    id: entity,\n    geometry: geometry,\n    attributes: attributes,\n  });\n};\n\nPolygonGeometryUpdater.prototype._computeCenter = function (time, result) {\n  const hierarchy = Property.getValueOrUndefined(\n    this._entity.polygon.hierarchy,\n    time,\n  );\n  if (!defined(hierarchy)) {\n    return;\n  }\n  const positions = hierarchy.positions;\n  if (positions.length === 0) {\n    return;\n  }\n  const ellipsoid = this._scene.ellipsoid;\n\n  const tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\n  const positions2D = tangentPlane.projectPointsOntoPlane(\n    positions,\n    scratch2DPositions,\n  );\n\n  const length = positions2D.length;\n  let area = 0;\n  let j = length - 1;\n  let centroid2D = new Cartesian2();\n  for (let i = 0; i < length; j = i++) {\n    const p1 = positions2D[i];\n    const p2 = positions2D[j];\n    const f = p1.x * p2.y - p2.x * p1.y;\n\n    let sum = Cartesian2.add(p1, p2, cart2Scratch);\n    sum = Cartesian2.multiplyByScalar(sum, f, sum);\n    centroid2D = Cartesian2.add(centroid2D, sum, centroid2D);\n\n    area += f;\n  }\n\n  const a = 1.0 / (area * 3.0);\n  centroid2D = Cartesian2.multiplyByScalar(centroid2D, a, centroid2D);\n  return tangentPlane.projectPointOntoEllipsoid(centroid2D, result);\n};\n\nPolygonGeometryUpdater.prototype._isHidden = function (entity, polygon) {\n  return (\n    !defined(polygon.hierarchy) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, polygon)\n  );\n};\n\nPolygonGeometryUpdater.prototype._isOnTerrain = function (entity, polygon) {\n  const onTerrain = GroundGeometryUpdater.prototype._isOnTerrain.call(\n    this,\n    entity,\n    polygon,\n  );\n  const perPositionHeightProperty = polygon.perPositionHeight;\n  const perPositionHeightEnabled =\n    defined(perPositionHeightProperty) &&\n    (perPositionHeightProperty.isConstant\n      ? perPositionHeightProperty.getValue(Iso8601.MINIMUM_VALUE)\n      : true);\n  return onTerrain && !perPositionHeightEnabled;\n};\n\nPolygonGeometryUpdater.prototype._isDynamic = function (entity, polygon) {\n  return (\n    !polygon.hierarchy.isConstant || //\n    !Property.isConstant(polygon.height) || //\n    !Property.isConstant(polygon.extrudedHeight) || //\n    !Property.isConstant(polygon.granularity) || //\n    !Property.isConstant(polygon.stRotation) || //\n    !Property.isConstant(polygon.textureCoordinates) || //\n    !Property.isConstant(polygon.outlineWidth) || //\n    !Property.isConstant(polygon.perPositionHeight) || //\n    !Property.isConstant(polygon.closeTop) || //\n    !Property.isConstant(polygon.closeBottom) || //\n    !Property.isConstant(polygon.zIndex) || //\n    !Property.isConstant(polygon.arcType) || //\n    (this._onTerrain &&\n      !Property.isConstant(this._materialProperty) &&\n      !(this._materialProperty instanceof ColorMaterialProperty))\n  );\n};\n\nPolygonGeometryUpdater.prototype._setStaticOptions = function (\n  entity,\n  polygon,\n) {\n  const isColorMaterial =\n    this._materialProperty instanceof ColorMaterialProperty;\n\n  const options = this._options;\n  options.vertexFormat = isColorMaterial\n    ? PerInstanceColorAppearance.VERTEX_FORMAT\n    : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n\n  const hierarchyValue = polygon.hierarchy.getValue(Iso8601.MINIMUM_VALUE);\n  let heightValue = Property.getValueOrUndefined(\n    polygon.height,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const heightReferenceValue = Property.getValueOrDefault(\n    polygon.heightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    polygon.extrudedHeight,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    polygon.extrudedHeightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  const perPositionHeightValue = Property.getValueOrDefault(\n    polygon.perPositionHeight,\n    Iso8601.MINIMUM_VALUE,\n    false,\n  );\n\n  heightValue = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    heightReferenceValue,\n  );\n\n  let offsetAttribute;\n  if (perPositionHeightValue) {\n    if (defined(heightValue)) {\n      heightValue = undefined;\n      oneTimeWarning(heightAndPerPositionHeightWarning);\n    }\n    if (\n      heightReferenceValue !== HeightReference.NONE &&\n      perPositionHeightValue\n    ) {\n      heightValue = undefined;\n      oneTimeWarning(heightReferenceAndPerPositionHeightWarning);\n    }\n  } else {\n    if (defined(extrudedHeightValue) && !defined(heightValue)) {\n      heightValue = 0;\n    }\n    offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  }\n\n  options.polygonHierarchy = hierarchyValue;\n  options.granularity = Property.getValueOrUndefined(\n    polygon.granularity,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.stRotation = Property.getValueOrUndefined(\n    polygon.stRotation,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.perPositionHeight = perPositionHeightValue;\n  options.closeTop = Property.getValueOrDefault(\n    polygon.closeTop,\n    Iso8601.MINIMUM_VALUE,\n    true,\n  );\n  options.closeBottom = Property.getValueOrDefault(\n    polygon.closeBottom,\n    Iso8601.MINIMUM_VALUE,\n    true,\n  );\n  options.offsetAttribute = offsetAttribute;\n  options.height = heightValue;\n  options.arcType = Property.getValueOrDefault(\n    polygon.arcType,\n    Iso8601.MINIMUM_VALUE,\n    ArcType.GEODESIC,\n  );\n  options.textureCoordinates = Property.getValueOrUndefined(\n    polygon.textureCoordinates,\n    Iso8601.MINIMUM_VALUE,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    const rectangle = PolygonGeometry.computeRectangleFromPositions(\n      options.polygonHierarchy.positions,\n      options.ellipsoid,\n      options.arcType,\n      scratchRectangle,\n    );\n    extrudedHeightValue =\n      ApproximateTerrainHeights.getMinimumMaximumHeights(\n        rectangle,\n      ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\n\nPolygonGeometryUpdater.prototype._getIsClosed = function (options) {\n  const height = options.height;\n  const extrudedHeight = options.extrudedHeight;\n  const isExtruded = defined(extrudedHeight) && extrudedHeight !== height;\n  return (\n    !options.perPositionHeight &&\n    ((!isExtruded && height === 0) ||\n      (isExtruded && options.closeTop && options.closeBottom))\n  );\n};\n\nPolygonGeometryUpdater.DynamicGeometryUpdater = DyanmicPolygonGeometryUpdater;\n\n/**\n * @private\n */\nfunction DyanmicPolygonGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DyanmicPolygonGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DyanmicPolygonGeometryUpdater.prototype.constructor =\n    DyanmicPolygonGeometryUpdater;\n}\n\nDyanmicPolygonGeometryUpdater.prototype._isHidden = function (\n  entity,\n  polygon,\n  time,\n) {\n  return (\n    !defined(this._options.polygonHierarchy) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(this, entity, polygon, time)\n  );\n};\n\nDyanmicPolygonGeometryUpdater.prototype._setOptions = function (\n  entity,\n  polygon,\n  time,\n) {\n  const options = this._options;\n\n  options.polygonHierarchy = Property.getValueOrUndefined(\n    polygon.hierarchy,\n    time,\n  );\n\n  let heightValue = Property.getValueOrUndefined(polygon.height, time);\n  const heightReferenceValue = Property.getValueOrDefault(\n    polygon.heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    polygon.extrudedHeightReference,\n    time,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    polygon.extrudedHeight,\n    time,\n  );\n  const perPositionHeightValue = Property.getValueOrUndefined(\n    polygon.perPositionHeight,\n    time,\n  );\n\n  heightValue = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    extrudedHeightReferenceValue,\n  );\n\n  let offsetAttribute;\n  if (perPositionHeightValue) {\n    if (defined(heightValue)) {\n      heightValue = undefined;\n      oneTimeWarning(heightAndPerPositionHeightWarning);\n    }\n    if (\n      heightReferenceValue !== HeightReference.NONE &&\n      perPositionHeightValue\n    ) {\n      heightValue = undefined;\n      oneTimeWarning(heightReferenceAndPerPositionHeightWarning);\n    }\n  } else {\n    if (defined(extrudedHeightValue) && !defined(heightValue)) {\n      heightValue = 0;\n    }\n\n    offsetAttribute = GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  }\n\n  options.granularity = Property.getValueOrUndefined(polygon.granularity, time);\n  options.stRotation = Property.getValueOrUndefined(polygon.stRotation, time);\n  options.textureCoordinates = Property.getValueOrUndefined(\n    polygon.textureCoordinates,\n    time,\n  );\n  options.perPositionHeight = Property.getValueOrUndefined(\n    polygon.perPositionHeight,\n    time,\n  );\n  options.closeTop = Property.getValueOrDefault(polygon.closeTop, time, true);\n  options.closeBottom = Property.getValueOrDefault(\n    polygon.closeBottom,\n    time,\n    true,\n  );\n  options.offsetAttribute = offsetAttribute;\n  options.height = heightValue;\n  options.arcType = Property.getValueOrDefault(\n    polygon.arcType,\n    time,\n    ArcType.GEODESIC,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    const rectangle = PolygonGeometry.computeRectangleFromPositions(\n      options.polygonHierarchy.positions,\n      options.ellipsoid,\n      options.arcType,\n      scratchRectangle,\n    );\n    extrudedHeightValue =\n      ApproximateTerrainHeights.getMinimumMaximumHeights(\n        rectangle,\n      ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\nexport default PolygonGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport PolygonHierarchy from \"../Core/PolygonHierarchy.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\nfunction createPolygonHierarchyProperty(value) {\n  if (Array.isArray(value)) {\n    // convert array of positions to PolygonHierarchy object\n    value = new PolygonHierarchy(value);\n  }\n  return new ConstantProperty(value);\n}\n\n/**\n * @typedef {object} PolygonGraphics.ConstructorOptions\n *\n * Initialization options for the PolygonGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the polygon.\n * @property {Property | PolygonHierarchy | Cartesian3[]} [hierarchy] A Property specifying the {@link PolygonHierarchy}.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the polygon relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the polygon's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | number} [stRotation=0.0] A numeric property specifying the rotation of the polygon texture counter-clockwise from north. Only has an effect if textureCoordinates is not defined.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude point.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the polygon is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the polygon.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the polygon is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | boolean} [perPositionHeight=false] A boolean specifying whether or not the height of each position is used.\n * @property {boolean | boolean} [closeTop=true] When false, leaves off the top of an extruded polygon open.\n * @property {boolean | boolean} [closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\n * @property {Property | ArcType} [arcType=ArcType.GEODESIC] The type of line the polygon edges must follow.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the polygon casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this polygon will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this polygon will classify terrain, 3D Tiles, or both when on the ground.\n * @property {ConstantProperty | number} [zIndex=0] A property specifying the zIndex used for ordering ground geometry.  Only has an effect if the polygon is constant and neither height or extrudedHeight are specified.\n * @property {Property | PolygonHierarchy} [textureCoordinates] A Property specifying texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives.\n */\n\n/**\n * Describes a polygon defined by an hierarchy of linear rings which make up the outer shape and any nested holes.\n * The polygon conforms to the curvature of the globe and can be placed on the surface or\n * at altitude and can optionally be extruded into a volume.\n *\n * @alias PolygonGraphics\n * @constructor\n *\n * @param {PolygonGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?id=polygon|Cesium Sandcastle Polygon Demo}\n */\nfunction PolygonGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._hierarchy = undefined;\n  this._hierarchySubscription = undefined;\n  this._height = undefined;\n  this._heightSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._extrudedHeight = undefined;\n  this._extrudedHeightSubscription = undefined;\n  this._extrudedHeightReference = undefined;\n  this._extrudedHeightReferenceSubscription = undefined;\n  this._stRotation = undefined;\n  this._stRotationSubscription = undefined;\n  this._granularity = undefined;\n  this._granularitySubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._perPositionHeight = undefined;\n  this._perPositionHeightSubscription = undefined;\n  this._closeTop = undefined;\n  this._closeTopSubscription = undefined;\n  this._closeBottom = undefined;\n  this._closeBottomSubscription = undefined;\n  this._arcType = undefined;\n  this._arcTypeSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._classificationType = undefined;\n  this._classificationTypeSubscription = undefined;\n  this._zIndex = undefined;\n  this._zIndexSubscription = undefined;\n  this._textureCoordinates = undefined;\n  this._textureCoordinatesSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(PolygonGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof PolygonGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the polygon.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link PolygonHierarchy}.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   */\n  hierarchy: createPropertyDescriptor(\n    \"hierarchy\",\n    undefined,\n    createPolygonHierarchyProperty,\n  ),\n\n  /**\n   * Gets or sets the numeric Property specifying the constant altitude of the polygon.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  height: createPropertyDescriptor(\"height\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the altitude of the polygon extrusion.\n   * If {@link PolygonGraphics#perPositionHeight} is false, the volume starts at {@link PolygonGraphics#height} and ends at this altitude.\n   * If {@link PolygonGraphics#perPositionHeight} is true, the volume starts at the height of each {@link PolygonGraphics#hierarchy} position and ends at this altitude.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   */\n  extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n  /**\n   * Gets or sets the Property specifying the extruded {@link HeightReference}.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n  /**\n   * Gets or sets the numeric property specifying the rotation of the polygon texture counter-clockwise from north. Only has an effect if textureCoordinates is not defined.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0\n   */\n  stRotation: createPropertyDescriptor(\"stRotation\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the angular distance between points on the polygon.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default {CesiumMath.RADIANS_PER_DEGREE}\n   */\n  granularity: createPropertyDescriptor(\"granularity\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the polygon is filled with the provided material.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the polygon.\n   * @memberof PolygonGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the polygon is outlined.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Gets or sets the boolean specifying whether or not the the height of each position is used.\n   * If true, the shape will have non-uniform altitude defined by the height of each {@link PolygonGraphics#hierarchy} position.\n   * If false, the shape will have a constant altitude as specified by {@link PolygonGraphics#height}.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   */\n  perPositionHeight: createPropertyDescriptor(\"perPositionHeight\"),\n\n  /**\n   * Gets or sets a boolean specifying whether or not the top of an extruded polygon is included.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   */\n  closeTop: createPropertyDescriptor(\"closeTop\"),\n\n  /**\n   * Gets or sets a boolean specifying whether or not the bottom of an extruded polygon is included.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   */\n  closeBottom: createPropertyDescriptor(\"closeBottom\"),\n\n  /**\n   * Gets or sets the {@link ArcType} Property specifying the type of lines the polygon edges use.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default ArcType.GEODESIC\n   */\n  arcType: createPropertyDescriptor(\"arcType\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the polygon\n   * casts or receives shadows from light sources.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this polygon will be displayed.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the {@link ClassificationType} Property specifying whether this polygon will classify terrain, 3D Tiles, or both when on the ground.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   * @default ClassificationType.BOTH\n   */\n  classificationType: createPropertyDescriptor(\"classificationType\"),\n\n  /**\n   * Gets or sets the zIndex Prperty specifying the ordering of ground geometry.  Only has an effect if the polygon is constant and neither height or extrudedHeight are specified.\n   * @memberof PolygonGraphics.prototype\n   * @type {ConstantProperty|undefined}\n   * @default 0\n   */\n  zIndex: createPropertyDescriptor(\"zIndex\"),\n\n  /**\n   *  A Property specifying texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives.\n   * @memberof PolygonGraphics.prototype\n   * @type {Property|undefined}\n   */\n  textureCoordinates: createPropertyDescriptor(\"textureCoordinates\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PolygonGraphics} [result] The object onto which to store the result.\n * @returns {PolygonGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPolygonGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new PolygonGraphics(this);\n  }\n  result.show = this.show;\n  result.hierarchy = this.hierarchy;\n  result.height = this.height;\n  result.heightReference = this.heightReference;\n  result.extrudedHeight = this.extrudedHeight;\n  result.extrudedHeightReference = this.extrudedHeightReference;\n  result.stRotation = this.stRotation;\n  result.granularity = this.granularity;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.perPositionHeight = this.perPositionHeight;\n  result.closeTop = this.closeTop;\n  result.closeBottom = this.closeBottom;\n  result.arcType = this.arcType;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.classificationType = this.classificationType;\n  result.zIndex = this.zIndex;\n  result.textureCoordinates = this.textureCoordinates;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PolygonGraphics} source The object to be merged into this object.\n */\nPolygonGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.hierarchy = this.hierarchy ?? source.hierarchy;\n  this.height = this.height ?? source.height;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.extrudedHeight = this.extrudedHeight ?? source.extrudedHeight;\n  this.extrudedHeightReference =\n    this.extrudedHeightReference ?? source.extrudedHeightReference;\n  this.stRotation = this.stRotation ?? source.stRotation;\n  this.granularity = this.granularity ?? source.granularity;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.perPositionHeight = this.perPositionHeight ?? source.perPositionHeight;\n  this.closeTop = this.closeTop ?? source.closeTop;\n  this.closeBottom = this.closeBottom ?? source.closeBottom;\n  this.arcType = this.arcType ?? source.arcType;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.classificationType =\n    this.classificationType ?? source.classificationType;\n  this.zIndex = this.zIndex ?? source.zIndex;\n  this.textureCoordinates =\n    this.textureCoordinates ?? source.textureCoordinates;\n};\nexport default PolygonGraphics;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link MaterialProperty} that maps to PolylineArrow {@link Material} uniforms.\n *\n * @param {Property|Color} [color=Color.WHITE] The {@link Color} Property to be used.\n *\n * @alias PolylineArrowMaterialProperty\n * @constructor\n */\nfunction PolylineArrowMaterialProperty(color) {\n  this._definitionChanged = new Event();\n  this._color = undefined;\n  this._colorSubscription = undefined;\n\n  this.color = color;\n}\n\nObject.defineProperties(PolylineArrowMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof PolylineArrowMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return Property.isConstant(this._color);\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof PolylineArrowMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets or sets the {@link Color} {@link Property}.\n   * @memberof PolylineArrowMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  color: createPropertyDescriptor(\"color\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nPolylineArrowMaterialProperty.prototype.getType = function (time) {\n  return \"PolylineArrow\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineArrowMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.color = Property.getValueOrClonedDefault(\n    this._color,\n    time,\n    Color.WHITE,\n    result.color,\n  );\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineArrowMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof PolylineArrowMaterialProperty && //\n      Property.equals(this._color, other._color))\n  );\n};\nexport default PolylineArrowMaterialProperty;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nconst defaultColor = Color.WHITE;\nconst defaultGapColor = Color.TRANSPARENT;\nconst defaultDashLength = 16.0;\nconst defaultDashPattern = 255.0;\n\n/**\n * A {@link MaterialProperty} that maps to polyline dash {@link Material} uniforms.\n * @alias PolylineDashMaterialProperty\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the {@link Color} of the line.\n * @param {Property|Color} [options.gapColor=Color.TRANSPARENT] A Property specifying the {@link Color} of the gaps in the line.\n * @param {Property|number} [options.dashLength=16.0] A numeric Property specifying the length of the dash pattern in pixels.\n * @param {Property|number} [options.dashPattern=255.0] A numeric Property specifying a 16 bit pattern for the dash\n */\nfunction PolylineDashMaterialProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._gapColor = undefined;\n  this._gapColorSubscription = undefined;\n  this._dashLength = undefined;\n  this._dashLengthSubscription = undefined;\n  this._dashPattern = undefined;\n  this._dashPatternSubscription = undefined;\n\n  this.color = options.color;\n  this.gapColor = options.gapColor;\n  this.dashLength = options.dashLength;\n  this.dashPattern = options.dashPattern;\n}\n\nObject.defineProperties(PolylineDashMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof PolylineDashMaterialProperty.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._color) &&\n        Property.isConstant(this._gapColor) &&\n        Property.isConstant(this._dashLength) &&\n        Property.isConstant(this._dashPattern)\n      );\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof PolylineDashMaterialProperty.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the line.\n   * @memberof PolylineDashMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the gaps in the line.\n   * @memberof PolylineDashMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  gapColor: createPropertyDescriptor(\"gapColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the length of a dash cycle\n   * @memberof PolylineDashMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  dashLength: createPropertyDescriptor(\"dashLength\"),\n\n  /**\n   * Gets or sets the numeric Property specifying a dash pattern\n   * @memberof PolylineDashMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  dashPattern: createPropertyDescriptor(\"dashPattern\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nPolylineDashMaterialProperty.prototype.getType = function (time) {\n  return \"PolylineDash\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineDashMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.color = Property.getValueOrClonedDefault(\n    this._color,\n    time,\n    defaultColor,\n    result.color,\n  );\n  result.gapColor = Property.getValueOrClonedDefault(\n    this._gapColor,\n    time,\n    defaultGapColor,\n    result.gapColor,\n  );\n  result.dashLength = Property.getValueOrDefault(\n    this._dashLength,\n    time,\n    defaultDashLength,\n    result.dashLength,\n  );\n  result.dashPattern = Property.getValueOrDefault(\n    this._dashPattern,\n    time,\n    defaultDashPattern,\n    result.dashPattern,\n  );\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineDashMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof PolylineDashMaterialProperty &&\n      Property.equals(this._color, other._color) &&\n      Property.equals(this._gapColor, other._gapColor) &&\n      Property.equals(this._dashLength, other._dashLength) &&\n      Property.equals(this._dashPattern, other._dashPattern))\n  );\n};\nexport default PolylineDashMaterialProperty;\n","import ArcType from \"../Core/ArcType.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport Event from \"../Core/Event.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GroundPolylineGeometry from \"../Core/GroundPolylineGeometry.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PolylineGeometry from \"../Core/PolylineGeometry.js\";\nimport PolylinePipeline from \"../Core/PolylinePipeline.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport Entity from \"../DataSources/Entity.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport PolylineCollection from \"../Scene/PolylineCollection.js\";\nimport PolylineColorAppearance from \"../Scene/PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"../Scene/PolylineMaterialAppearance.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nconst defaultZIndex = new ConstantProperty(0);\n\n//We use this object to create one polyline collection per-scene.\nconst polylineCollections = {};\n\nconst scratchColor = new Color();\nconst defaultMaterial = new ColorMaterialProperty(Color.WHITE);\nconst defaultShow = new ConstantProperty(true);\nconst defaultShadows = new ConstantProperty(ShadowMode.DISABLED);\nconst defaultDistanceDisplayCondition = new ConstantProperty(\n  new DistanceDisplayCondition(),\n);\nconst defaultClassificationType = new ConstantProperty(ClassificationType.BOTH);\n\nfunction GeometryOptions() {\n  this.vertexFormat = undefined;\n  this.positions = undefined;\n  this.width = undefined;\n  this.arcType = undefined;\n  this.granularity = undefined;\n}\n\nfunction GroundGeometryOptions() {\n  this.positions = undefined;\n  this.width = undefined;\n  this.arcType = undefined;\n  this.granularity = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for polylines.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PolylineGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PolylineGeometryUpdater(entity, scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entity)) {\n    throw new DeveloperError(\"entity is required\");\n  }\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required\");\n  }\n  //>>includeEnd('debug');\n\n  this._entity = entity;\n  this._scene = scene;\n  this._entitySubscription = entity.definitionChanged.addEventListener(\n    PolylineGeometryUpdater.prototype._onEntityPropertyChanged,\n    this,\n  );\n  this._fillEnabled = false;\n  this._dynamic = false;\n  this._geometryChanged = new Event();\n  this._showProperty = undefined;\n  this._materialProperty = undefined;\n  this._shadowsProperty = undefined;\n  this._distanceDisplayConditionProperty = undefined;\n  this._classificationTypeProperty = undefined;\n  this._depthFailMaterialProperty = undefined;\n  this._geometryOptions = new GeometryOptions();\n  this._groundGeometryOptions = new GroundGeometryOptions();\n  this._id = `polyline-${entity.id}`;\n  this._clampToGround = false;\n  this._supportsPolylinesOnTerrain = Entity.supportsPolylinesOnTerrain(scene);\n\n  this._zIndex = 0;\n\n  this._onEntityPropertyChanged(entity, \"polyline\", entity.polyline, undefined);\n}\n\nObject.defineProperties(PolylineGeometryUpdater.prototype, {\n  /**\n   * Gets the unique ID associated with this updater\n   * @memberof PolylineGeometryUpdater.prototype\n   * @type {string}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * Gets the entity associated with this geometry.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {Entity}\n   * @readonly\n   */\n  entity: {\n    get: function () {\n      return this._entity;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry has a fill component.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  fillEnabled: {\n    get: function () {\n      return this._fillEnabled;\n    },\n  },\n  /**\n   * Gets a value indicating if fill visibility varies with simulation time.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  hasConstantFill: {\n    get: function () {\n      return (\n        !this._fillEnabled ||\n        (!defined(this._entity.availability) &&\n          Property.isConstant(this._showProperty))\n      );\n    },\n  },\n  /**\n   * Gets the material property used to fill the geometry.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {MaterialProperty}\n   * @readonly\n   */\n  fillMaterialProperty: {\n    get: function () {\n      return this._materialProperty;\n    },\n  },\n  /**\n   * Gets the material property used to fill the geometry when it fails the depth test.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {MaterialProperty}\n   * @readonly\n   */\n  depthFailMaterialProperty: {\n    get: function () {\n      return this._depthFailMaterialProperty;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry has an outline component.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  outlineEnabled: {\n    value: false,\n  },\n  /**\n   * Gets a value indicating if outline visibility varies with simulation time.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  hasConstantOutline: {\n    value: true,\n  },\n  /**\n   * Gets the {@link Color} property for the geometry outline.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  outlineColorProperty: {\n    value: undefined,\n  },\n  /**\n   * Gets the property specifying whether the geometry\n   * casts or receives shadows from light sources.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  shadowsProperty: {\n    get: function () {\n      return this._shadowsProperty;\n    },\n  },\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this geometry will be displayed.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  distanceDisplayConditionProperty: {\n    get: function () {\n      return this._distanceDisplayConditionProperty;\n    },\n  },\n  /**\n   * Gets or sets the {@link ClassificationType} Property specifying if this geometry will classify terrain, 3D Tiles, or both when on the ground.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {Property}\n   * @readonly\n   */\n  classificationTypeProperty: {\n    get: function () {\n      return this._classificationTypeProperty;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry is time-varying.\n   *\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isDynamic: {\n    get: function () {\n      return this._dynamic;\n    },\n  },\n  /**\n   * Gets a value indicating if the geometry is closed.\n   * This property is only valid for static geometry.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isClosed: {\n    value: false,\n  },\n  /**\n   * Gets an event that is raised whenever the public properties\n   * of this updater change.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  geometryChanged: {\n    get: function () {\n      return this._geometryChanged;\n    },\n  },\n\n  /**\n   * Gets a value indicating if the path of the line.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {ArcType}\n   * @readonly\n   */\n  arcType: {\n    get: function () {\n      return this._arcType;\n    },\n  },\n\n  /**\n   * Gets a value indicating if the geometry is clamped to the ground.\n   * Returns false if polylines on terrain is not supported.\n   * @memberof PolylineGeometryUpdater.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  clampToGround: {\n    get: function () {\n      return this._clampToGround && this._supportsPolylinesOnTerrain;\n    },\n  },\n\n  /**\n   * Gets the zindex\n   * @type {number}\n   * @memberof PolylineGeometryUpdater.prototype\n   * @readonly\n   */\n  zIndex: {\n    get: function () {\n      return this._zIndex;\n    },\n  },\n});\n\n/**\n * Checks if the geometry is outlined at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {boolean} true if geometry is outlined at the provided time, false otherwise.\n */\nPolylineGeometryUpdater.prototype.isOutlineVisible = function (time) {\n  return false;\n};\n\n/**\n * Checks if the geometry is filled at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve visibility.\n * @returns {boolean} true if geometry is filled at the provided time, false otherwise.\n */\nPolylineGeometryUpdater.prototype.isFilled = function (time) {\n  const entity = this._entity;\n  const visible =\n    this._fillEnabled &&\n    entity.isAvailable(time) &&\n    this._showProperty.getValue(time);\n  return visible ?? false;\n};\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPolylineGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const show = new ShowGeometryInstanceAttribute(\n    isAvailable && entity.isShowing && this._showProperty.getValue(time),\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n  const distanceDisplayConditionAttribute =\n    DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n      distanceDisplayCondition,\n    );\n\n  const attributes = {\n    show: show,\n    distanceDisplayCondition: distanceDisplayConditionAttribute,\n  };\n\n  let currentColor;\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n\n  if (this.clampToGround) {\n    return new GeometryInstance({\n      id: entity,\n      geometry: new GroundPolylineGeometry(this._groundGeometryOptions),\n      attributes: attributes,\n    });\n  }\n\n  if (\n    defined(this._depthFailMaterialProperty) &&\n    this._depthFailMaterialProperty instanceof ColorMaterialProperty\n  ) {\n    if (\n      defined(this._depthFailMaterialProperty.color) &&\n      (this._depthFailMaterialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._depthFailMaterialProperty.color.getValue(\n        time,\n        scratchColor,\n      );\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.depthFailColor =\n      ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new PolylineGeometry(this._geometryOptions),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPolylineGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"This instance does not represent an outlined geometry.\",\n  );\n  //>>includeEnd('debug');\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nPolylineGeometryUpdater.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys and resources used by the object.  Once an object is destroyed, it should not be used.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nPolylineGeometryUpdater.prototype.destroy = function () {\n  this._entitySubscription();\n  destroyObject(this);\n};\n\nPolylineGeometryUpdater.prototype._onEntityPropertyChanged = function (\n  entity,\n  propertyName,\n  newValue,\n  oldValue,\n) {\n  if (!(propertyName === \"availability\" || propertyName === \"polyline\")) {\n    return;\n  }\n\n  const polyline = this._entity.polyline;\n\n  if (!defined(polyline)) {\n    if (this._fillEnabled) {\n      this._fillEnabled = false;\n      this._geometryChanged.raiseEvent(this);\n    }\n    return;\n  }\n\n  const positionsProperty = polyline.positions;\n\n  const show = polyline.show;\n  if (\n    (defined(show) &&\n      show.isConstant &&\n      !show.getValue(Iso8601.MINIMUM_VALUE)) || //\n    !defined(positionsProperty)\n  ) {\n    if (this._fillEnabled) {\n      this._fillEnabled = false;\n      this._geometryChanged.raiseEvent(this);\n    }\n    return;\n  }\n\n  const zIndex = polyline.zIndex;\n  const material = polyline.material ?? defaultMaterial;\n  const isColorMaterial = material instanceof ColorMaterialProperty;\n  this._materialProperty = material;\n  this._depthFailMaterialProperty = polyline.depthFailMaterial;\n  this._showProperty = show ?? defaultShow;\n  this._shadowsProperty = polyline.shadows ?? defaultShadows;\n  this._distanceDisplayConditionProperty =\n    polyline.distanceDisplayCondition ?? defaultDistanceDisplayCondition;\n  this._classificationTypeProperty =\n    polyline.classificationType ?? defaultClassificationType;\n  this._fillEnabled = true;\n  this._zIndex = zIndex ?? defaultZIndex;\n\n  const width = polyline.width;\n  const arcType = polyline.arcType;\n  const clampToGround = polyline.clampToGround;\n  const granularity = polyline.granularity;\n\n  if (\n    !positionsProperty.isConstant ||\n    !Property.isConstant(width) ||\n    !Property.isConstant(arcType) ||\n    !Property.isConstant(granularity) ||\n    !Property.isConstant(clampToGround) ||\n    !Property.isConstant(zIndex)\n  ) {\n    if (!this._dynamic) {\n      this._dynamic = true;\n      this._geometryChanged.raiseEvent(this);\n    }\n  } else {\n    const geometryOptions = this._geometryOptions;\n    const positions = positionsProperty.getValue(\n      Iso8601.MINIMUM_VALUE,\n      geometryOptions.positions,\n    );\n\n    //Because of the way we currently handle reference properties,\n    //we can't automatically assume the positions are always valid.\n    if (!defined(positions) || positions.length < 2) {\n      if (this._fillEnabled) {\n        this._fillEnabled = false;\n        this._geometryChanged.raiseEvent(this);\n      }\n      return;\n    }\n\n    let vertexFormat;\n    if (\n      isColorMaterial &&\n      (!defined(this._depthFailMaterialProperty) ||\n        this._depthFailMaterialProperty instanceof ColorMaterialProperty)\n    ) {\n      vertexFormat = PolylineColorAppearance.VERTEX_FORMAT;\n    } else {\n      vertexFormat = PolylineMaterialAppearance.VERTEX_FORMAT;\n    }\n\n    geometryOptions.vertexFormat = vertexFormat;\n    geometryOptions.positions = positions;\n    geometryOptions.width = defined(width)\n      ? width.getValue(Iso8601.MINIMUM_VALUE)\n      : undefined;\n    geometryOptions.arcType = defined(arcType)\n      ? arcType.getValue(Iso8601.MINIMUM_VALUE)\n      : undefined;\n    geometryOptions.granularity = defined(granularity)\n      ? granularity.getValue(Iso8601.MINIMUM_VALUE)\n      : undefined;\n\n    const groundGeometryOptions = this._groundGeometryOptions;\n    groundGeometryOptions.positions = positions;\n    groundGeometryOptions.width = geometryOptions.width;\n    groundGeometryOptions.arcType = geometryOptions.arcType;\n    groundGeometryOptions.granularity = geometryOptions.granularity;\n\n    this._clampToGround = defined(clampToGround)\n      ? clampToGround.getValue(Iso8601.MINIMUM_VALUE)\n      : false;\n\n    if (!this._clampToGround && defined(zIndex)) {\n      oneTimeWarning(\n        \"Entity polylines must have clampToGround: true when using zIndex.  zIndex will be ignored.\",\n      );\n    }\n\n    this._dynamic = false;\n    this._geometryChanged.raiseEvent(this);\n  }\n};\n\n/**\n * Creates the dynamic updater to be used when GeometryUpdater#isDynamic is true.\n *\n * @param {PrimitiveCollection} primitives The primitive collection to use.\n * @param {PrimitiveCollection|OrderedGroundPrimitiveCollection} groundPrimitives The primitive collection to use for ordered ground primitives.\n * @returns {DynamicGeometryUpdater} The dynamic updater used to update the geometry each frame.\n *\n * @exception {DeveloperError} This instance does not represent dynamic geometry.\n * @private\n */\nPolylineGeometryUpdater.prototype.createDynamicUpdater = function (\n  primitives,\n  groundPrimitives,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"primitives\", primitives);\n  Check.defined(\"groundPrimitives\", groundPrimitives);\n\n  if (!this._dynamic) {\n    throw new DeveloperError(\n      \"This instance does not represent dynamic geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return new DynamicGeometryUpdater(primitives, groundPrimitives, this);\n};\n\n/**\n * @private\n */\nconst generateCartesianArcOptions = {\n  positions: undefined,\n  granularity: undefined,\n  height: undefined,\n  ellipsoid: undefined,\n};\n\nfunction DynamicGeometryUpdater(primitives, groundPrimitives, geometryUpdater) {\n  this._line = undefined;\n  this._primitives = primitives;\n  this._groundPrimitives = groundPrimitives;\n  this._groundPolylinePrimitive = undefined;\n  this._material = undefined;\n  this._geometryUpdater = geometryUpdater;\n  this._positions = [];\n}\n\nfunction getLine(dynamicGeometryUpdater) {\n  if (defined(dynamicGeometryUpdater._line)) {\n    return dynamicGeometryUpdater._line;\n  }\n\n  const primitives = dynamicGeometryUpdater._primitives;\n  const polylineCollectionId =\n    dynamicGeometryUpdater._geometryUpdater._scene.id + primitives._guid;\n  let polylineCollection = polylineCollections[polylineCollectionId];\n  if (!defined(polylineCollection) || polylineCollection.isDestroyed()) {\n    polylineCollection = new PolylineCollection();\n    polylineCollections[polylineCollectionId] = polylineCollection;\n    primitives.add(polylineCollection);\n  } else if (!primitives.contains(polylineCollection)) {\n    primitives.add(polylineCollection);\n  }\n\n  const line = polylineCollection.add();\n  line.id = dynamicGeometryUpdater._geometryUpdater._entity;\n  dynamicGeometryUpdater._line = line;\n  return line;\n}\n\nDynamicGeometryUpdater.prototype.update = function (time) {\n  const geometryUpdater = this._geometryUpdater;\n  const entity = geometryUpdater._entity;\n  const polyline = entity.polyline;\n\n  const positionsProperty = polyline.positions;\n  let positions = Property.getValueOrUndefined(\n    positionsProperty,\n    time,\n    this._positions,\n  );\n\n  // Synchronize with geometryUpdater for GroundPolylinePrimitive\n  geometryUpdater._clampToGround = Property.getValueOrDefault(\n    polyline._clampToGround,\n    time,\n    false,\n  );\n  geometryUpdater._groundGeometryOptions.positions = positions;\n  geometryUpdater._groundGeometryOptions.width = Property.getValueOrDefault(\n    polyline._width,\n    time,\n    1,\n  );\n  geometryUpdater._groundGeometryOptions.arcType = Property.getValueOrDefault(\n    polyline._arcType,\n    time,\n    ArcType.GEODESIC,\n  );\n  geometryUpdater._groundGeometryOptions.granularity =\n    Property.getValueOrDefault(polyline._granularity, time, 9999);\n\n  const groundPrimitives = this._groundPrimitives;\n\n  if (defined(this._groundPolylinePrimitive)) {\n    groundPrimitives.remove(this._groundPolylinePrimitive); // destroys by default\n    this._groundPolylinePrimitive = undefined;\n  }\n\n  if (geometryUpdater.clampToGround) {\n    if (\n      !entity.isShowing ||\n      !entity.isAvailable(time) ||\n      !Property.getValueOrDefault(polyline._show, time, true)\n    ) {\n      return;\n    }\n\n    if (!defined(positions) || positions.length < 2) {\n      return;\n    }\n\n    const fillMaterialProperty = geometryUpdater.fillMaterialProperty;\n    let appearance;\n    if (fillMaterialProperty instanceof ColorMaterialProperty) {\n      appearance = new PolylineColorAppearance();\n    } else {\n      const material = MaterialProperty.getValue(\n        time,\n        fillMaterialProperty,\n        this._material,\n      );\n      appearance = new PolylineMaterialAppearance({\n        material: material,\n        translucent: material.isTranslucent(),\n      });\n      this._material = material;\n    }\n\n    this._groundPolylinePrimitive = groundPrimitives.add(\n      new GroundPolylinePrimitive({\n        geometryInstances: geometryUpdater.createFillGeometryInstance(time),\n        appearance: appearance,\n        classificationType:\n          geometryUpdater.classificationTypeProperty.getValue(time),\n        asynchronous: false,\n      }),\n      Property.getValueOrUndefined(geometryUpdater.zIndex, time),\n    );\n\n    // Hide the polyline in the collection, if any\n    if (defined(this._line)) {\n      this._line.show = false;\n    }\n    return;\n  }\n\n  const line = getLine(this);\n\n  if (\n    !entity.isShowing ||\n    !entity.isAvailable(time) ||\n    !Property.getValueOrDefault(polyline._show, time, true)\n  ) {\n    line.show = false;\n    return;\n  }\n\n  if (!defined(positions) || positions.length < 2) {\n    line.show = false;\n    return;\n  }\n\n  let arcType = ArcType.GEODESIC;\n  arcType = Property.getValueOrDefault(polyline._arcType, time, arcType);\n\n  const globe = geometryUpdater._scene.globe;\n  const ellipsoid = geometryUpdater._scene.ellipsoid;\n  if (arcType !== ArcType.NONE && defined(globe)) {\n    generateCartesianArcOptions.ellipsoid = ellipsoid;\n    generateCartesianArcOptions.positions = positions;\n    generateCartesianArcOptions.granularity = Property.getValueOrUndefined(\n      polyline._granularity,\n      time,\n    );\n    generateCartesianArcOptions.height = PolylinePipeline.extractHeights(\n      positions,\n      ellipsoid,\n    );\n    if (arcType === ArcType.GEODESIC) {\n      positions = PolylinePipeline.generateCartesianArc(\n        generateCartesianArcOptions,\n      );\n    } else {\n      positions = PolylinePipeline.generateCartesianRhumbArc(\n        generateCartesianArcOptions,\n      );\n    }\n  }\n\n  line.show = true;\n  line.positions = positions.slice();\n  line.material = MaterialProperty.getValue(\n    time,\n    geometryUpdater.fillMaterialProperty,\n    line.material,\n  );\n  line.width = Property.getValueOrDefault(polyline._width, time, 1);\n  line.distanceDisplayCondition = Property.getValueOrUndefined(\n    polyline._distanceDisplayCondition,\n    time,\n    line.distanceDisplayCondition,\n  );\n};\n\nDynamicGeometryUpdater.prototype.getBoundingSphere = function (result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"result\", result);\n  //>>includeEnd('debug');\n\n  if (!this._geometryUpdater.clampToGround) {\n    const line = getLine(this);\n    if (line.show && line.positions.length > 0) {\n      BoundingSphere.fromPoints(line.positions, result);\n      return BoundingSphereState.DONE;\n    }\n  } else {\n    const groundPolylinePrimitive = this._groundPolylinePrimitive;\n    if (\n      defined(groundPolylinePrimitive) &&\n      groundPolylinePrimitive.show &&\n      groundPolylinePrimitive.ready\n    ) {\n      const attributes = groundPolylinePrimitive.getGeometryInstanceAttributes(\n        this._geometryUpdater._entity,\n      );\n      if (defined(attributes) && defined(attributes.boundingSphere)) {\n        BoundingSphere.clone(attributes.boundingSphere, result);\n        return BoundingSphereState.DONE;\n      }\n    }\n\n    if (defined(groundPolylinePrimitive) && !groundPolylinePrimitive.ready) {\n      return BoundingSphereState.PENDING;\n    }\n\n    return BoundingSphereState.DONE;\n  }\n\n  return BoundingSphereState.FAILED;\n};\n\nDynamicGeometryUpdater.prototype.isDestroyed = function () {\n  return false;\n};\n\nDynamicGeometryUpdater.prototype.destroy = function () {\n  const geometryUpdater = this._geometryUpdater;\n  const polylineCollectionId =\n    geometryUpdater._scene.id + this._primitives._guid;\n  const polylineCollection = polylineCollections[polylineCollectionId];\n  if (defined(polylineCollection)) {\n    polylineCollection.remove(this._line);\n    if (polylineCollection.length === 0) {\n      this._primitives.removeAndDestroy(polylineCollection);\n      delete polylineCollections[polylineCollectionId];\n    }\n  }\n  if (defined(this._groundPolylinePrimitive)) {\n    this._groundPrimitives.remove(this._groundPolylinePrimitive);\n  }\n  destroyObject(this);\n};\nexport default PolylineGeometryUpdater;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nconst defaultColor = Color.WHITE;\nconst defaultGlowPower = 0.25;\nconst defaultTaperPower = 1.0;\n\n/**\n * A {@link MaterialProperty} that maps to polyline glow {@link Material} uniforms.\n * @alias PolylineGlowMaterialProperty\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the {@link Color} of the line.\n * @param {Property|number} [options.glowPower=0.25] A numeric Property specifying the strength of the glow, as a percentage of the total line width.\n * @param {Property|number} [options.taperPower=1.0] A numeric Property specifying the strength of the tapering effect, as a percentage of the total line length.  If 1.0 or higher, no taper effect is used.\n */\nfunction PolylineGlowMaterialProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._glowPower = undefined;\n  this._glowPowerSubscription = undefined;\n  this._taperPower = undefined;\n  this._taperPowerSubscription = undefined;\n\n  this.color = options.color;\n  this.glowPower = options.glowPower;\n  this.taperPower = options.taperPower;\n}\n\nObject.defineProperties(PolylineGlowMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof PolylineGlowMaterialProperty.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._color) && Property.isConstant(this._glow)\n      );\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof PolylineGlowMaterialProperty.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the line.\n   * @memberof PolylineGlowMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the strength of the glow, as a percentage of the total line width (less than 1.0).\n   * @memberof PolylineGlowMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  glowPower: createPropertyDescriptor(\"glowPower\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the strength of the tapering effect, as a percentage of the total line length.  If 1.0 or higher, no taper effect is used.\n   * @memberof PolylineGlowMaterialProperty.prototype\n   * @type {Property|undefined}\n   */\n  taperPower: createPropertyDescriptor(\"taperPower\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nPolylineGlowMaterialProperty.prototype.getType = function (time) {\n  return \"PolylineGlow\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineGlowMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.color = Property.getValueOrClonedDefault(\n    this._color,\n    time,\n    defaultColor,\n    result.color,\n  );\n  result.glowPower = Property.getValueOrDefault(\n    this._glowPower,\n    time,\n    defaultGlowPower,\n    result.glowPower,\n  );\n  result.taperPower = Property.getValueOrDefault(\n    this._taperPower,\n    time,\n    defaultTaperPower,\n    result.taperPower,\n  );\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineGlowMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof PolylineGlowMaterialProperty &&\n      Property.equals(this._color, other._color) &&\n      Property.equals(this._glowPower, other._glowPower) &&\n      Property.equals(this._taperPower, other._taperPower))\n  );\n};\nexport default PolylineGlowMaterialProperty;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} PolylineGraphics.ConstructorOptions\n *\n * Initialization options for the PolylineGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the polyline.\n * @property {Property | Cartesian3[]} [positions] A Property specifying the array of {@link Cartesian3} positions that define the line strip.\n * @property {Property | number} [width=1.0] A numeric Property specifying the width in pixels.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude if arcType is not ArcType.NONE.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to draw the polyline.\n * @property {MaterialProperty | Color} [depthFailMaterial] A property specifying the material used to draw the polyline when it is below the terrain.\n * @property {Property | ArcType} [arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\n * @property {Property | boolean} [clampToGround=false] A boolean Property specifying whether the Polyline should be clamped to the ground.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the polyline casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this polyline will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this polyline will classify terrain, 3D Tiles, or both when on the ground.\n * @property {Property | number} [zIndex=0] A Property specifying the zIndex used for ordering ground geometry. Only has an effect if `clampToGround` is true and polylines on terrain is supported.\n */\n\n/**\n * Describes a polyline. The first two positions define a line segment,\n * and each additional position defines a line segment from the previous position. The segments\n * can be linear connected points, great arcs, or clamped to terrain.\n *\n * @alias PolylineGraphics\n * @constructor\n *\n * @param {PolylineGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?id=polyline|Cesium Sandcastle Polyline Demo}\n */\nfunction PolylineGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._positions = undefined;\n  this._positionsSubscription = undefined;\n  this._width = undefined;\n  this._widthSubscription = undefined;\n  this._granularity = undefined;\n  this._granularitySubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._depthFailMaterial = undefined;\n  this._depthFailMaterialSubscription = undefined;\n  this._arcType = undefined;\n  this._arcTypeSubscription = undefined;\n  this._clampToGround = undefined;\n  this._clampToGroundSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n  this._classificationType = undefined;\n  this._classificationTypeSubscription = undefined;\n  this._zIndex = undefined;\n  this._zIndexSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(PolylineGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof PolylineGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the polyline.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the Property specifying the array of {@link Cartesian3}\n   * positions that define the line strip.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   */\n  positions: createPropertyDescriptor(\"positions\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width in pixels.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  width: createPropertyDescriptor(\"width\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the angular distance between each latitude and longitude if arcType is not ArcType.NONE and clampToGround is false.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   * @default Cesium.Math.RADIANS_PER_DEGREE\n   */\n  granularity: createPropertyDescriptor(\"granularity\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to draw the polyline.\n   * @memberof PolylineGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to draw the polyline when it fails the depth test.\n   * <p>\n   * Requires the EXT_frag_depth WebGL extension to render properly. If the extension is not supported,\n   * there may be artifacts.\n   * </p>\n   * @memberof PolylineGraphics.prototype\n   * @type {MaterialProperty}\n   * @default undefined\n   */\n  depthFailMaterial: createMaterialPropertyDescriptor(\"depthFailMaterial\"),\n\n  /**\n   * Gets or sets the {@link ArcType} Property specifying whether the line segments should be great arcs, rhumb lines or linearly connected.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   * @default ArcType.GEODESIC\n   */\n  arcType: createPropertyDescriptor(\"arcType\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the polyline\n   * should be clamped to the ground.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  clampToGround: createPropertyDescriptor(\"clampToGround\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the polyline\n   * casts or receives shadows from light sources.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this polyline will be displayed.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the {@link ClassificationType} Property specifying whether this polyline will classify terrain, 3D Tiles, or both when on the ground.\n   * @memberof PolylineGraphics.prototype\n   * @type {Property|undefined}\n   * @default ClassificationType.BOTH\n   */\n  classificationType: createPropertyDescriptor(\"classificationType\"),\n\n  /**\n   * Gets or sets the zIndex Property specifying the ordering of the polyline. Only has an effect if `clampToGround` is true and polylines on terrain is supported.\n   * @memberof PolylineGraphics.prototype\n   * @type {ConstantProperty|undefined}\n   * @default 0\n   */\n  zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PolylineGraphics} [result] The object onto which to store the result.\n * @returns {PolylineGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPolylineGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new PolylineGraphics(this);\n  }\n  result.show = this.show;\n  result.positions = this.positions;\n  result.width = this.width;\n  result.granularity = this.granularity;\n  result.material = this.material;\n  result.depthFailMaterial = this.depthFailMaterial;\n  result.arcType = this.arcType;\n  result.clampToGround = this.clampToGround;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.classificationType = this.classificationType;\n  result.zIndex = this.zIndex;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PolylineGraphics} source The object to be merged into this object.\n */\nPolylineGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.positions = this.positions ?? source.positions;\n  this.width = this.width ?? source.width;\n  this.granularity = this.granularity ?? source.granularity;\n  this.material = this.material ?? source.material;\n  this.depthFailMaterial = this.depthFailMaterial ?? source.depthFailMaterial;\n  this.arcType = this.arcType ?? source.arcType;\n  this.clampToGround = this.clampToGround ?? source.clampToGround;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.classificationType =\n    this.classificationType ?? source.classificationType;\n  this.zIndex = this.zIndex ?? source.zIndex;\n};\nexport default PolylineGraphics;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\nconst defaultColor = Color.WHITE;\nconst defaultOutlineColor = Color.BLACK;\nconst defaultOutlineWidth = 1.0;\n\n/**\n * A {@link MaterialProperty} that maps to polyline outline {@link Material} uniforms.\n * @alias PolylineOutlineMaterialProperty\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|Color} [options.color=Color.WHITE] A Property specifying the {@link Color} of the line.\n * @param {Property|Color} [options.outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @param {Property|number} [options.outlineWidth=1.0] A numeric Property specifying the width of the outline, in pixels.\n */\nfunction PolylineOutlineMaterialProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._color = undefined;\n  this._colorSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n\n  this.color = options.color;\n  this.outlineColor = options.outlineColor;\n  this.outlineWidth = options.outlineWidth;\n}\n\nObject.defineProperties(PolylineOutlineMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof PolylineOutlineMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._color) &&\n        Property.isConstant(this._outlineColor) &&\n        Property.isConstant(this._outlineWidth)\n      );\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof PolylineOutlineMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the line.\n   * @memberof PolylineOutlineMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  color: createPropertyDescriptor(\"color\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof PolylineOutlineMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * @memberof PolylineOutlineMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nPolylineOutlineMaterialProperty.prototype.getType = function (time) {\n  return \"PolylineOutline\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPolylineOutlineMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.color = Property.getValueOrClonedDefault(\n    this._color,\n    time,\n    defaultColor,\n    result.color,\n  );\n  result.outlineColor = Property.getValueOrClonedDefault(\n    this._outlineColor,\n    time,\n    defaultOutlineColor,\n    result.outlineColor,\n  );\n  result.outlineWidth = Property.getValueOrDefault(\n    this._outlineWidth,\n    time,\n    defaultOutlineWidth,\n  );\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPolylineOutlineMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof PolylineOutlineMaterialProperty && //\n      Property.equals(this._color, other._color) && //\n      Property.equals(this._outlineColor, other._outlineColor) && //\n      Property.equals(this._outlineWidth, other._outlineWidth))\n  );\n};\nexport default PolylineOutlineMaterialProperty;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ClassificationType from \"../Scene/ClassificationType.js\";\nimport PolylineColorAppearance from \"../Scene/PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"../Scene/PolylineMaterialAppearance.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryBatch from \"./DynamicGeometryBatch.js\";\nimport PolylineGeometryUpdater from \"./PolylineGeometryUpdater.js\";\nimport StaticGeometryColorBatch from \"./StaticGeometryColorBatch.js\";\nimport StaticGeometryPerMaterialBatch from \"./StaticGeometryPerMaterialBatch.js\";\nimport StaticGroundPolylinePerMaterialBatch from \"./StaticGroundPolylinePerMaterialBatch.js\";\n\nconst emptyArray = [];\n\nfunction removeUpdater(that, updater) {\n  //We don't keep track of which batch an updater is in, so just remove it from all of them.\n  const batches = that._batches;\n  const length = batches.length;\n  for (let i = 0; i < length; i++) {\n    batches[i].remove(updater);\n  }\n}\n\nfunction insertUpdaterIntoBatch(that, time, updater) {\n  if (updater.isDynamic) {\n    that._dynamicBatch.add(time, updater);\n    return;\n  }\n\n  if (updater.clampToGround && updater.fillEnabled) {\n    // Also checks for support\n    const classificationType =\n      updater.classificationTypeProperty.getValue(time);\n    that._groundBatches[classificationType].add(time, updater);\n    return;\n  }\n\n  let shadows;\n  if (updater.fillEnabled) {\n    shadows = updater.shadowsProperty.getValue(time);\n  }\n\n  let multiplier = 0;\n  if (defined(updater.depthFailMaterialProperty)) {\n    multiplier =\n      updater.depthFailMaterialProperty instanceof ColorMaterialProperty\n        ? 1\n        : 2;\n  }\n\n  let index;\n  if (defined(shadows)) {\n    index = shadows + multiplier * ShadowMode.NUMBER_OF_SHADOW_MODES;\n  }\n\n  if (updater.fillEnabled) {\n    if (updater.fillMaterialProperty instanceof ColorMaterialProperty) {\n      that._colorBatches[index].add(time, updater);\n    } else {\n      that._materialBatches[index].add(time, updater);\n    }\n  }\n}\n\n/**\n * A visualizer for polylines represented by {@link Primitive} instances.\n * @alias PolylineVisualizer\n * @constructor\n *\n * @param {Scene} scene The scene the primitives will be rendered in.\n * @param {EntityCollection} entityCollection The entityCollection to visualize.\n * @param {PrimitiveCollection} [primitives=scene.primitives] A collection to add primitives related to the entities\n * @param {PrimitiveCollection} [groundPrimitives=scene.groundPrimitives] A collection to add ground primitives related to the entities\n */\nfunction PolylineVisualizer(\n  scene,\n  entityCollection,\n  primitives,\n  groundPrimitives,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"scene\", scene);\n  Check.defined(\"entityCollection\", entityCollection);\n  //>>includeEnd('debug');\n\n  groundPrimitives = groundPrimitives ?? scene.groundPrimitives;\n  primitives = primitives ?? scene.primitives;\n\n  this._scene = scene;\n  this._primitives = primitives;\n  this._entityCollection = undefined;\n  this._addedObjects = new AssociativeArray();\n  this._removedObjects = new AssociativeArray();\n  this._changedObjects = new AssociativeArray();\n\n  let i;\n  const numberOfShadowModes = ShadowMode.NUMBER_OF_SHADOW_MODES;\n  this._colorBatches = new Array(numberOfShadowModes * 3);\n  this._materialBatches = new Array(numberOfShadowModes * 3);\n\n  for (i = 0; i < numberOfShadowModes; ++i) {\n    this._colorBatches[i] = new StaticGeometryColorBatch(\n      primitives,\n      PolylineColorAppearance,\n      undefined,\n      false,\n      i,\n    ); // no depth fail appearance\n    this._materialBatches[i] = new StaticGeometryPerMaterialBatch(\n      primitives,\n      PolylineMaterialAppearance,\n      undefined,\n      false,\n      i,\n    );\n\n    this._colorBatches[i + numberOfShadowModes] = new StaticGeometryColorBatch(\n      primitives,\n      PolylineColorAppearance,\n      PolylineColorAppearance,\n      false,\n      i,\n    ); //depth fail appearance variations\n    this._materialBatches[i + numberOfShadowModes] =\n      new StaticGeometryPerMaterialBatch(\n        primitives,\n        PolylineMaterialAppearance,\n        PolylineColorAppearance,\n        false,\n        i,\n      );\n\n    this._colorBatches[i + numberOfShadowModes * 2] =\n      new StaticGeometryColorBatch(\n        primitives,\n        PolylineColorAppearance,\n        PolylineMaterialAppearance,\n        false,\n        i,\n      );\n    this._materialBatches[i + numberOfShadowModes * 2] =\n      new StaticGeometryPerMaterialBatch(\n        primitives,\n        PolylineMaterialAppearance,\n        PolylineMaterialAppearance,\n        false,\n        i,\n      );\n  }\n\n  this._dynamicBatch = new DynamicGeometryBatch(primitives, groundPrimitives);\n\n  const numberOfClassificationTypes =\n    ClassificationType.NUMBER_OF_CLASSIFICATION_TYPES;\n  this._groundBatches = new Array(numberOfClassificationTypes);\n\n  for (i = 0; i < numberOfClassificationTypes; ++i) {\n    this._groundBatches[i] = new StaticGroundPolylinePerMaterialBatch(\n      groundPrimitives,\n      i,\n    );\n  }\n\n  this._batches = this._colorBatches.concat(\n    this._materialBatches,\n    this._dynamicBatch,\n    this._groundBatches,\n  );\n\n  this._subscriptions = new AssociativeArray();\n  this._updaters = new AssociativeArray();\n\n  this._entityCollection = entityCollection;\n  entityCollection.collectionChanged.addEventListener(\n    PolylineVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  this._onCollectionChanged(\n    entityCollection,\n    entityCollection.values,\n    emptyArray,\n  );\n}\n\n/**\n * Updates all of the primitives created by this visualizer to match their\n * Entity counterpart at the given time.\n *\n * @param {JulianDate} time The time to update to.\n * @returns {boolean} True if the visualizer successfully updated to the provided time,\n * false if the visualizer is waiting for asynchronous primitives to be created.\n */\nPolylineVisualizer.prototype.update = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const addedObjects = this._addedObjects;\n  const added = addedObjects.values;\n  const removedObjects = this._removedObjects;\n  const removed = removedObjects.values;\n  const changedObjects = this._changedObjects;\n  const changed = changedObjects.values;\n\n  let i;\n  let entity;\n  let id;\n  let updater;\n\n  for (i = changed.length - 1; i > -1; i--) {\n    entity = changed[i];\n    id = entity.id;\n    updater = this._updaters.get(id);\n\n    //If in a single update, an entity gets removed and a new instance\n    //re-added with the same id, the updater no longer tracks the\n    //correct entity, we need to both remove the old one and\n    //add the new one, which is done by pushing the entity\n    //onto the removed/added lists.\n    if (updater.entity === entity) {\n      removeUpdater(this, updater);\n      insertUpdaterIntoBatch(this, time, updater);\n    } else {\n      removed.push(entity);\n      added.push(entity);\n    }\n  }\n\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    id = entity.id;\n    updater = this._updaters.get(id);\n    removeUpdater(this, updater);\n    updater.destroy();\n    this._updaters.remove(id);\n    this._subscriptions.get(id)();\n    this._subscriptions.remove(id);\n  }\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    id = entity.id;\n    updater = new PolylineGeometryUpdater(entity, this._scene);\n    this._updaters.set(id, updater);\n    insertUpdaterIntoBatch(this, time, updater);\n    this._subscriptions.set(\n      id,\n      updater.geometryChanged.addEventListener(\n        PolylineVisualizer._onGeometryChanged,\n        this,\n      ),\n    );\n  }\n\n  addedObjects.removeAll();\n  removedObjects.removeAll();\n  changedObjects.removeAll();\n\n  let isUpdated = true;\n  const batches = this._batches;\n  const length = batches.length;\n  for (i = 0; i < length; i++) {\n    isUpdated = batches[i].update(time) && isUpdated;\n  }\n\n  return isUpdated;\n};\n\nconst getBoundingSphereArrayScratch = [];\nconst getBoundingSphereBoundingSphereScratch = new BoundingSphere();\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nPolylineVisualizer.prototype.getBoundingSphere = function (entity, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"entity\", entity);\n  Check.defined(\"result\", result);\n  //>>includeEnd('debug');\n\n  const boundingSpheres = getBoundingSphereArrayScratch;\n  const tmp = getBoundingSphereBoundingSphereScratch;\n\n  let count = 0;\n  let state = BoundingSphereState.DONE;\n  const batches = this._batches;\n  const batchesLength = batches.length;\n  const updater = this._updaters.get(entity.id);\n  for (let i = 0; i < batchesLength; i++) {\n    state = batches[i].getBoundingSphere(updater, tmp);\n    if (state === BoundingSphereState.PENDING) {\n      return BoundingSphereState.PENDING;\n    } else if (state === BoundingSphereState.DONE) {\n      boundingSpheres[count] = BoundingSphere.clone(\n        tmp,\n        boundingSpheres[count],\n      );\n      count++;\n    }\n  }\n\n  if (count === 0) {\n    return BoundingSphereState.FAILED;\n  }\n\n  boundingSpheres.length = count;\n  BoundingSphere.fromBoundingSpheres(boundingSpheres, result);\n  return BoundingSphereState.DONE;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nPolylineVisualizer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes and destroys all primitives created by this instance.\n */\nPolylineVisualizer.prototype.destroy = function () {\n  this._entityCollection.collectionChanged.removeEventListener(\n    PolylineVisualizer.prototype._onCollectionChanged,\n    this,\n  );\n  this._addedObjects.removeAll();\n  this._removedObjects.removeAll();\n\n  let i;\n  const batches = this._batches;\n  let length = batches.length;\n  for (i = 0; i < length; i++) {\n    batches[i].removeAllPrimitives();\n  }\n\n  const subscriptions = this._subscriptions.values;\n  length = subscriptions.length;\n  for (i = 0; i < length; i++) {\n    subscriptions[i]();\n  }\n  this._subscriptions.removeAll();\n  return destroyObject(this);\n};\n\n/**\n * @private\n */\nPolylineVisualizer._onGeometryChanged = function (updater) {\n  const removedObjects = this._removedObjects;\n  const changedObjects = this._changedObjects;\n\n  const entity = updater.entity;\n  const id = entity.id;\n\n  if (!defined(removedObjects.get(id)) && !defined(changedObjects.get(id))) {\n    changedObjects.set(id, entity);\n  }\n};\n\n/**\n * @private\n */\nPolylineVisualizer.prototype._onCollectionChanged = function (\n  entityCollection,\n  added,\n  removed,\n) {\n  const addedObjects = this._addedObjects;\n  const removedObjects = this._removedObjects;\n  const changedObjects = this._changedObjects;\n\n  let i;\n  let id;\n  let entity;\n  for (i = removed.length - 1; i > -1; i--) {\n    entity = removed[i];\n    id = entity.id;\n    if (!addedObjects.remove(id)) {\n      removedObjects.set(id, entity);\n      changedObjects.remove(id);\n    }\n  }\n\n  for (i = added.length - 1; i > -1; i--) {\n    entity = added[i];\n    id = entity.id;\n    if (removedObjects.remove(id)) {\n      changedObjects.set(id, entity);\n    } else {\n      addedObjects.set(id, entity);\n    }\n  }\n};\nexport default PolylineVisualizer;\n","import Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport PolylineVolumeGeometry from \"../Core/PolylineVolumeGeometry.js\";\nimport PolylineVolumeOutlineGeometry from \"../Core/PolylineVolumeOutlineGeometry.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nconst scratchColor = new Color();\n\nfunction PolylineVolumeGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.polylinePositions = undefined;\n  this.shapePositions = undefined;\n  this.cornerType = undefined;\n  this.granularity = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for polyline volumes.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias PolylineVolumeGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction PolylineVolumeGeometryUpdater(entity, scene) {\n  GeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new PolylineVolumeGeometryOptions(entity),\n    geometryPropertyName: \"polylineVolume\",\n    observedPropertyNames: [\"availability\", \"polylineVolume\"],\n  });\n\n  this._onEntityPropertyChanged(\n    entity,\n    \"polylineVolume\",\n    entity.polylineVolume,\n    undefined,\n  );\n}\n\nif (defined(Object.create)) {\n  PolylineVolumeGeometryUpdater.prototype = Object.create(\n    GeometryUpdater.prototype,\n  );\n  PolylineVolumeGeometryUpdater.prototype.constructor =\n    PolylineVolumeGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nPolylineVolumeGeometryUpdater.prototype.createFillGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  let attributes;\n\n  let color;\n  const show = new ShowGeometryInstanceAttribute(\n    isAvailable &&\n      entity.isShowing &&\n      this._showProperty.getValue(time) &&\n      this._fillProperty.getValue(time),\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n  const distanceDisplayConditionAttribute =\n    DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n      distanceDisplayCondition,\n    );\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n    attributes = {\n      show: show,\n      distanceDisplayCondition: distanceDisplayConditionAttribute,\n      color: color,\n    };\n  } else {\n    attributes = {\n      show: show,\n      distanceDisplayCondition: distanceDisplayConditionAttribute,\n    };\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new PolylineVolumeGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nPolylineVolumeGeometryUpdater.prototype.createOutlineGeometryInstance =\n  function (time) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"time\", time);\n\n    if (!this._outlineEnabled) {\n      throw new DeveloperError(\n        \"This instance does not represent an outlined geometry.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const entity = this._entity;\n    const isAvailable = entity.isAvailable(time);\n    const outlineColor = Property.getValueOrDefault(\n      this._outlineColorProperty,\n      time,\n      Color.BLACK,\n      scratchColor,\n    );\n    const distanceDisplayCondition =\n      this._distanceDisplayConditionProperty.getValue(time);\n\n    return new GeometryInstance({\n      id: entity,\n      geometry: new PolylineVolumeOutlineGeometry(this._options),\n      attributes: {\n        show: new ShowGeometryInstanceAttribute(\n          isAvailable &&\n            entity.isShowing &&\n            this._showProperty.getValue(time) &&\n            this._showOutlineProperty.getValue(time),\n        ),\n        color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n        distanceDisplayCondition:\n          DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n            distanceDisplayCondition,\n          ),\n      },\n    });\n  };\n\nPolylineVolumeGeometryUpdater.prototype._isHidden = function (\n  entity,\n  polylineVolume,\n) {\n  return (\n    !defined(polylineVolume.positions) ||\n    !defined(polylineVolume.shape) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, polylineVolume)\n  );\n};\n\nPolylineVolumeGeometryUpdater.prototype._isDynamic = function (\n  entity,\n  polylineVolume,\n) {\n  return (\n    !polylineVolume.positions.isConstant || //\n    !polylineVolume.shape.isConstant || //\n    !Property.isConstant(polylineVolume.granularity) || //\n    !Property.isConstant(polylineVolume.outlineWidth) || //\n    !Property.isConstant(polylineVolume.cornerType)\n  );\n};\n\nPolylineVolumeGeometryUpdater.prototype._setStaticOptions = function (\n  entity,\n  polylineVolume,\n) {\n  const granularity = polylineVolume.granularity;\n  const cornerType = polylineVolume.cornerType;\n\n  const options = this._options;\n  const isColorMaterial =\n    this._materialProperty instanceof ColorMaterialProperty;\n  options.vertexFormat = isColorMaterial\n    ? PerInstanceColorAppearance.VERTEX_FORMAT\n    : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.polylinePositions = polylineVolume.positions.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.polylinePositions,\n  );\n  options.shapePositions = polylineVolume.shape.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.shape,\n  );\n  options.granularity = defined(granularity)\n    ? granularity.getValue(Iso8601.MINIMUM_VALUE)\n    : undefined;\n  options.cornerType = defined(cornerType)\n    ? cornerType.getValue(Iso8601.MINIMUM_VALUE)\n    : undefined;\n};\n\nPolylineVolumeGeometryUpdater.DynamicGeometryUpdater =\n  DynamicPolylineVolumeGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicPolylineVolumeGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicPolylineVolumeGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicPolylineVolumeGeometryUpdater.prototype.constructor =\n    DynamicPolylineVolumeGeometryUpdater;\n}\n\nDynamicPolylineVolumeGeometryUpdater.prototype._isHidden = function (\n  entity,\n  polylineVolume,\n  time,\n) {\n  const options = this._options;\n  return (\n    !defined(options.polylinePositions) ||\n    !defined(options.shapePositions) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(\n      this,\n      entity,\n      polylineVolume,\n      time,\n    )\n  );\n};\n\nDynamicPolylineVolumeGeometryUpdater.prototype._setOptions = function (\n  entity,\n  polylineVolume,\n  time,\n) {\n  const options = this._options;\n  options.polylinePositions = Property.getValueOrUndefined(\n    polylineVolume.positions,\n    time,\n    options.polylinePositions,\n  );\n  options.shapePositions = Property.getValueOrUndefined(\n    polylineVolume.shape,\n    time,\n  );\n  options.granularity = Property.getValueOrUndefined(\n    polylineVolume.granularity,\n    time,\n  );\n  options.cornerType = Property.getValueOrUndefined(\n    polylineVolume.cornerType,\n    time,\n  );\n};\nexport default PolylineVolumeGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} PolylineVolumeGraphics.ConstructorOptions\n *\n * Initialization options for the PolylineVolumeGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the volume.\n * @property {Property | Cartesian3[]} [positions] A Property specifying the array of {@link Cartesian3} positions which define the line strip.\n * @property {Property | Cartesian2[]} [shape] A Property specifying the array of {@link Cartesian2} positions which define the shape to be extruded.\n * @property {Property | CornerType} [cornerType=CornerType.ROUNDED] A {@link CornerType} Property specifying the style of the corners.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude point.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the volume is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the volume.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the volume is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the volume casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this volume will be displayed.\n */\n\n/**\n * Describes a polyline volume defined as a line strip and corresponding two dimensional shape which is extruded along it.\n * The resulting volume conforms to the curvature of the globe.\n *\n * @alias PolylineVolumeGraphics\n * @constructor\n *\n * @param {PolylineVolumeGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?id=polyline-volume|Cesium Sandcastle Polyline Volume Demo}\n */\nfunction PolylineVolumeGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._positions = undefined;\n  this._positionsSubscription = undefined;\n  this._shape = undefined;\n  this._shapeSubscription = undefined;\n  this._cornerType = undefined;\n  this._cornerTypeSubscription = undefined;\n  this._granularity = undefined;\n  this._granularitySubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubsription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(PolylineVolumeGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof PolylineVolumeGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the volume.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the Property specifying the array of {@link Cartesian3} positions which define the line strip.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   */\n  positions: createPropertyDescriptor(\"positions\"),\n\n  /**\n   * Gets or sets the Property specifying the array of {@link Cartesian2} positions which define the shape to be extruded.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   */\n  shape: createPropertyDescriptor(\"shape\"),\n\n  /**\n   * Gets or sets the {@link CornerType} Property specifying the style of the corners.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default CornerType.ROUNDED\n   */\n  cornerType: createPropertyDescriptor(\"cornerType\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the angular distance between points on the volume.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default {CesiumMath.RADIANS_PER_DEGREE}\n   */\n  granularity: createPropertyDescriptor(\"granularity\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the volume is filled with the provided material.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the volume.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the volume is outlined.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the volume\n   * casts or receives shadows from light sources.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this volume will be displayed.\n   * @memberof PolylineVolumeGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {PolylineVolumeGraphics} [result] The object onto which to store the result.\n * @returns {PolylineVolumeGraphics} The modified result parameter or a new instance if one was not provided.\n */\nPolylineVolumeGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new PolylineVolumeGraphics(this);\n  }\n  result.show = this.show;\n  result.positions = this.positions;\n  result.shape = this.shape;\n  result.cornerType = this.cornerType;\n  result.granularity = this.granularity;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {PolylineVolumeGraphics} source The object to be merged into this object.\n */\nPolylineVolumeGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.positions = this.positions ?? source.positions;\n  this.shape = this.shape ?? source.shape;\n  this.cornerType = this.cornerType ?? source.cornerType;\n  this.granularity = this.granularity ?? source.granularity;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n};\nexport default PolylineVolumeGraphics;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Transforms from \"../Core/Transforms.js\";\n\n/**\n * The interface for all {@link Property} objects that define a world\n * location as a {@link Cartesian3} with an associated {@link ReferenceFrame}.\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias PositionProperty\n * @constructor\n * @abstract\n *\n * @see CallbackPositionProperty\n * @see CompositePositionProperty\n * @see ConstantPositionProperty\n * @see SampledPositionProperty\n * @see TimeIntervalCollectionPositionProperty\n */\nfunction PositionProperty() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(PositionProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof PositionProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof PositionProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets the reference frame that the position is defined in.\n   * @memberof PositionProperty.prototype\n   * @type {ReferenceFrame}\n   */\n  referenceFrame: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n * @function\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionProperty.prototype.getValue = DeveloperError.throwInstantiationError;\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n * @function\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionProperty.prototype.getValueInReferenceFrame =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n * @function\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPositionProperty.prototype.equals = DeveloperError.throwInstantiationError;\n\nconst scratchMatrix3 = new Matrix3();\n\n/**\n * @private\n */\nPositionProperty.convertToReferenceFrame = function (\n  time,\n  value,\n  inputFrame,\n  outputFrame,\n  result,\n) {\n  if (!defined(value)) {\n    return value;\n  }\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  if (inputFrame === outputFrame) {\n    return Cartesian3.clone(value, result);\n  }\n\n  const icrfToFixed = Transforms.computeIcrfToCentralBodyFixedMatrix(\n    time,\n    scratchMatrix3,\n  );\n  if (inputFrame === ReferenceFrame.INERTIAL) {\n    return Matrix3.multiplyByVector(icrfToFixed, value, result);\n  }\n  if (inputFrame === ReferenceFrame.FIXED) {\n    return Matrix3.multiplyByVector(\n      Matrix3.transpose(icrfToFixed, scratchMatrix3),\n      value,\n      result,\n    );\n  }\n};\nexport default PositionProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} whose value is an array whose items are the computed value\n * of other PositionProperty instances.\n *\n * @alias PositionPropertyArray\n * @constructor\n *\n * @param {Property[]} [value] An array of Property instances.\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction PositionPropertyArray(value, referenceFrame) {\n  this._value = undefined;\n  this._definitionChanged = new Event();\n  this._eventHelper = new EventHelper();\n  this._referenceFrame = referenceFrame ?? ReferenceFrame.FIXED;\n  this.setValue(value);\n}\n\nObject.defineProperties(PositionPropertyArray.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  This property\n   * is considered constant if all property items in the array are constant.\n   * @memberof PositionPropertyArray.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      const value = this._value;\n      if (!defined(value)) {\n        return true;\n      }\n\n      const length = value.length;\n      for (let i = 0; i < length; i++) {\n        if (!Property.isConstant(value[i])) {\n          return false;\n        }\n      }\n      return true;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setValue is called with data different\n   * than the current value or one of the properties in the array also changes.\n   * @memberof PositionPropertyArray.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the reference frame in which the position is defined.\n   * @memberof PositionPropertyArray.prototype\n   * @type {ReferenceFrame}\n   * @default ReferenceFrame.FIXED;\n   */\n  referenceFrame: {\n    get: function () {\n      return this._referenceFrame;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Cartesian3[]} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3[]} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionPropertyArray.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3[]} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3[]} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPositionPropertyArray.prototype.getValueInReferenceFrame = function (\n  time,\n  referenceFrame,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  if (!defined(referenceFrame)) {\n    throw new DeveloperError(\"referenceFrame is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const value = this._value;\n  if (!defined(value)) {\n    return undefined;\n  }\n\n  const length = value.length;\n  if (!defined(result)) {\n    result = new Array(length);\n  }\n  let i = 0;\n  let x = 0;\n  while (i < length) {\n    const property = value[i];\n    const itemValue = property.getValueInReferenceFrame(\n      time,\n      referenceFrame,\n      result[i],\n    );\n    if (defined(itemValue)) {\n      result[x] = itemValue;\n      x++;\n    }\n    i++;\n  }\n  result.length = x;\n  return result;\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {Property[]} value An array of Property instances.\n */\nPositionPropertyArray.prototype.setValue = function (value) {\n  const eventHelper = this._eventHelper;\n  eventHelper.removeAll();\n\n  if (defined(value)) {\n    this._value = value.slice();\n    const length = value.length;\n    for (let i = 0; i < length; i++) {\n      const property = value[i];\n      if (defined(property)) {\n        eventHelper.add(\n          property.definitionChanged,\n          PositionPropertyArray.prototype._raiseDefinitionChanged,\n          this,\n        );\n      }\n    }\n  } else {\n    this._value = undefined;\n  }\n  this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPositionPropertyArray.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof PositionPropertyArray && //\n      this._referenceFrame === other._referenceFrame && //\n      Property.arrayEquals(this._value, other._value))\n  );\n};\n\nPositionPropertyArray.prototype._raiseDefinitionChanged = function () {\n  this._definitionChanged.raiseEvent(this);\n};\nexport default PositionPropertyArray;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * The interface for all properties, which represent a value that can optionally vary over time.\n * This type defines an interface and cannot be instantiated directly.\n *\n * @alias Property\n * @constructor\n * @abstract\n *\n * @see CompositeProperty\n * @see ConstantProperty\n * @see SampledProperty\n * @see TimeIntervalCollectionProperty\n * @see MaterialProperty\n * @see PositionProperty\n * @see ReferenceProperty\n */\nfunction Property() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(Property.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof Property.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: DeveloperError.throwInstantiationError,\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof Property.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Gets the value of the property at the provided time.\n * @function\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nProperty.prototype.getValue = DeveloperError.throwInstantiationError;\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n * @function\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nProperty.prototype.equals = DeveloperError.throwInstantiationError;\n\n/**\n * @private\n */\nProperty.equals = function (left, right) {\n  return left === right || (defined(left) && left.equals(right));\n};\n\n/**\n * @private\n */\nProperty.arrayEquals = function (left, right) {\n  if (left === right) {\n    return true;\n  }\n  if (!defined(left) || !defined(right) || left.length !== right.length) {\n    return false;\n  }\n  const length = left.length;\n  for (let i = 0; i < length; i++) {\n    if (!Property.equals(left[i], right[i])) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * @private\n */\nProperty.isConstant = function (property) {\n  return !defined(property) || property.isConstant;\n};\n\n/**\n * @private\n */\nProperty.getValueOrUndefined = function (property, time, result) {\n  return defined(property) ? property.getValue(time, result) : undefined;\n};\n\n/**\n * @private\n */\nProperty.getValueOrDefault = function (property, time, valueDefault, result) {\n  return defined(property)\n    ? (property.getValue(time, result) ?? valueDefault)\n    : valueDefault;\n};\n\n/**\n * @private\n */\nProperty.getValueOrClonedDefault = function (\n  property,\n  time,\n  valueDefault,\n  result,\n) {\n  let value;\n  if (defined(property)) {\n    value = property.getValue(time, result);\n  }\n  if (!defined(value)) {\n    value = valueDefault.clone(value);\n  }\n  return value;\n};\nexport default Property;\n","import defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} whose value is an array whose items are the computed value\n * of other property instances.\n *\n * @alias PropertyArray\n * @constructor\n *\n * @param {Property[]} [value] An array of Property instances.\n */\nfunction PropertyArray(value) {\n  this._value = undefined;\n  this._definitionChanged = new Event();\n  this._eventHelper = new EventHelper();\n  this.setValue(value);\n}\n\nObject.defineProperties(PropertyArray.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  This property\n   * is considered constant if all property items in the array are constant.\n   * @memberof PropertyArray.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      const value = this._value;\n      if (!defined(value)) {\n        return true;\n      }\n      const length = value.length;\n      for (let i = 0; i < length; i++) {\n        if (!Property.isConstant(value[i])) {\n          return false;\n        }\n      }\n      return true;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setValue is called with data different\n   * than the current value or one of the properties in the array also changes.\n   * @memberof PropertyArray.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object[]} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object[]} The modified result parameter, which is an array of values produced by evaluating each of the contained properties at the given time or a new instance if the result parameter was not supplied.\n */\nPropertyArray.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  const value = this._value;\n  if (!defined(value)) {\n    return undefined;\n  }\n\n  const length = value.length;\n  if (!defined(result)) {\n    result = new Array(length);\n  }\n  let i = 0;\n  let x = 0;\n  while (i < length) {\n    const property = this._value[i];\n    const itemValue = property.getValue(time, result[i]);\n    if (defined(itemValue)) {\n      result[x] = itemValue;\n      x++;\n    }\n    i++;\n  }\n  result.length = x;\n  return result;\n};\n\n/**\n * Sets the value of the property.\n *\n * @param {Property[]} value An array of Property instances.\n */\nPropertyArray.prototype.setValue = function (value) {\n  const eventHelper = this._eventHelper;\n  eventHelper.removeAll();\n\n  if (defined(value)) {\n    this._value = value.slice();\n    const length = value.length;\n    for (let i = 0; i < length; i++) {\n      const property = value[i];\n      if (defined(property)) {\n        eventHelper.add(\n          property.definitionChanged,\n          PropertyArray.prototype._raiseDefinitionChanged,\n          this,\n        );\n      }\n    }\n  } else {\n    this._value = undefined;\n  }\n  this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPropertyArray.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof PropertyArray && //\n      Property.arrayEquals(this._value, other._value))\n  );\n};\n\nPropertyArray.prototype._raiseDefinitionChanged = function () {\n  this._definitionChanged.raiseEvent(this);\n};\nexport default PropertyArray;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} whose value is a key-value mapping of property names to the computed value of other properties.\n *\n * @alias PropertyBag\n * @implements Record<string, any>\n * @constructor\n *\n * @param {object} [value] An object, containing key-value mapping of property names to properties.\n * @param {Function} [createPropertyCallback] A function that will be called when the value of any of the properties in value are not a Property.\n */\nfunction PropertyBag(value, createPropertyCallback) {\n  this._propertyNames = [];\n  this._definitionChanged = new Event();\n\n  if (defined(value)) {\n    this.merge(value, createPropertyCallback);\n  }\n}\n\nObject.defineProperties(PropertyBag.prototype, {\n  /**\n   * Gets the names of all properties registered on this instance.\n   * @memberof PropertyBag.prototype\n   * @type {Array}\n   */\n  propertyNames: {\n    get: function () {\n      return this._propertyNames;\n    },\n  },\n  /**\n   * Gets a value indicating if this property is constant.  This property\n   * is considered constant if all property items in this object are constant.\n   * @memberof PropertyBag.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      const propertyNames = this._propertyNames;\n      for (let i = 0, len = propertyNames.length; i < len; i++) {\n        if (!Property.isConstant(this[propertyNames[i]])) {\n          return false;\n        }\n      }\n      return true;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the set of properties contained in this\n   * object changes, or one of the properties itself changes.\n   *\n   * @memberof PropertyBag.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n});\n\n/**\n * Determines if this object has defined a property with the given name.\n *\n * @param {string} propertyName The name of the property to check for.\n *\n * @returns {boolean} True if this object has defined a property with the given name, false otherwise.\n */\nPropertyBag.prototype.hasProperty = function (propertyName) {\n  return this._propertyNames.indexOf(propertyName) !== -1;\n};\n\nfunction createConstantProperty(value) {\n  return new ConstantProperty(value);\n}\n\n/**\n * Adds a property to this object.\n *\n * @param {string} propertyName The name of the property to add.\n * @param {*} [value] The value of the new property, if provided.\n * @param {Function} [createPropertyCallback] A function that will be called when the value of this new property is set to a value that is not a Property.\n *\n * @exception {DeveloperError} \"propertyName\" is already a registered property.\n */\nPropertyBag.prototype.addProperty = function (\n  propertyName,\n  value,\n  createPropertyCallback,\n) {\n  const propertyNames = this._propertyNames;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(propertyName)) {\n    throw new DeveloperError(\"propertyName is required.\");\n  }\n  if (propertyNames.indexOf(propertyName) !== -1) {\n    throw new DeveloperError(\n      `${propertyName} is already a registered property.`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  propertyNames.push(propertyName);\n  Object.defineProperty(\n    this,\n    propertyName,\n    createPropertyDescriptor(\n      propertyName,\n      true,\n      createPropertyCallback ?? createConstantProperty,\n    ),\n  );\n\n  if (defined(value)) {\n    this[propertyName] = value;\n  }\n\n  this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Removed a property previously added with addProperty.\n *\n * @param {string} propertyName The name of the property to remove.\n *\n * @exception {DeveloperError} \"propertyName\" is not a registered property.\n */\nPropertyBag.prototype.removeProperty = function (propertyName) {\n  const propertyNames = this._propertyNames;\n  const index = propertyNames.indexOf(propertyName);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(propertyName)) {\n    throw new DeveloperError(\"propertyName is required.\");\n  }\n  if (index === -1) {\n    throw new DeveloperError(`${propertyName} is not a registered property.`);\n  }\n  //>>includeEnd('debug');\n\n  this._propertyNames.splice(index, 1);\n  delete this[propertyName];\n\n  this._definitionChanged.raiseEvent(this);\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of this property.  Each contained property will be evaluated at the given time, and the overall\n * result will be an object, mapping property names to those values.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * Note that any properties in result which are not part of this PropertyBag will be left as-is.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nPropertyBag.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  if (!defined(result)) {\n    result = {};\n  }\n\n  const propertyNames = this._propertyNames;\n  for (let i = 0, len = propertyNames.length; i < len; i++) {\n    const propertyName = propertyNames[i];\n    result[propertyName] = Property.getValueOrUndefined(\n      this[propertyName],\n      time,\n      result[propertyName],\n    );\n  }\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {object} source The object to be merged into this object.\n * @param {Function} [createPropertyCallback] A function that will be called when the value of any of the properties in value are not a Property.\n */\nPropertyBag.prototype.merge = function (source, createPropertyCallback) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const propertyNames = this._propertyNames;\n  const sourcePropertyNames = defined(source._propertyNames)\n    ? source._propertyNames\n    : Object.keys(source);\n  for (let i = 0, len = sourcePropertyNames.length; i < len; i++) {\n    const name = sourcePropertyNames[i];\n\n    const targetProperty = this[name];\n    const sourceProperty = source[name];\n\n    //Custom properties that are registered on the source must also be added to this.\n    if (targetProperty === undefined && propertyNames.indexOf(name) === -1) {\n      this.addProperty(name, undefined, createPropertyCallback);\n    }\n\n    if (sourceProperty !== undefined) {\n      if (targetProperty !== undefined) {\n        if (defined(targetProperty) && defined(targetProperty.merge)) {\n          targetProperty.merge(sourceProperty);\n        }\n      } else if (\n        defined(sourceProperty) &&\n        defined(sourceProperty.merge) &&\n        defined(sourceProperty.clone)\n      ) {\n        this[name] = sourceProperty.clone();\n      } else {\n        this[name] = sourceProperty;\n      }\n    }\n  }\n};\n\nfunction propertiesEqual(a, b) {\n  const aPropertyNames = a._propertyNames;\n  const bPropertyNames = b._propertyNames;\n\n  const len = aPropertyNames.length;\n  if (len !== bPropertyNames.length) {\n    return false;\n  }\n\n  for (let aIndex = 0; aIndex < len; ++aIndex) {\n    const name = aPropertyNames[aIndex];\n    const bIndex = bPropertyNames.indexOf(name);\n    if (bIndex === -1) {\n      return false;\n    }\n    if (!Property.equals(a[name], b[name])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nPropertyBag.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof PropertyBag && //\n      propertiesEqual(this, other))\n  );\n};\nexport default PropertyBag;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RectangleGeometry from \"../Core/RectangleGeometry.js\";\nimport RectangleOutlineGeometry from \"../Core/RectangleOutlineGeometry.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport GroundGeometryUpdater from \"./GroundGeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nconst scratchColor = new Color();\nconst defaultOffset = Cartesian3.ZERO;\nconst offsetScratch = new Cartesian3();\nconst scratchRectangle = new Rectangle();\nconst scratchCenterRect = new Rectangle();\nconst scratchCarto = new Cartographic();\n\nfunction RectangleGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.rectangle = undefined;\n  this.height = undefined;\n  this.extrudedHeight = undefined;\n  this.granularity = undefined;\n  this.stRotation = undefined;\n  this.rotation = undefined;\n  this.offsetAttribute = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for rectangles.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias RectangleGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction RectangleGeometryUpdater(entity, scene) {\n  GroundGeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new RectangleGeometryOptions(entity),\n    geometryPropertyName: \"rectangle\",\n    observedPropertyNames: [\"availability\", \"rectangle\"],\n  });\n\n  this._onEntityPropertyChanged(\n    entity,\n    \"rectangle\",\n    entity.rectangle,\n    undefined,\n  );\n}\n\nif (defined(Object.create)) {\n  RectangleGeometryUpdater.prototype = Object.create(\n    GroundGeometryUpdater.prototype,\n  );\n  RectangleGeometryUpdater.prototype.constructor = RectangleGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nRectangleGeometryUpdater.prototype.createFillGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._fillProperty.getValue(time),\n    ),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        this._distanceDisplayConditionProperty.getValue(time),\n      ),\n    offset: undefined,\n    color: undefined,\n  };\n\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    attributes.color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n  }\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new RectangleGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nRectangleGeometryUpdater.prototype.createOutlineGeometryInstance = function (\n  time,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  const attributes = {\n    show: new ShowGeometryInstanceAttribute(\n      isAvailable &&\n        entity.isShowing &&\n        this._showProperty.getValue(time) &&\n        this._showOutlineProperty.getValue(time),\n    ),\n    color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n    distanceDisplayCondition:\n      DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n        distanceDisplayCondition,\n      ),\n    offset: undefined,\n  };\n\n  if (defined(this._options.offsetAttribute)) {\n    attributes.offset = OffsetGeometryInstanceAttribute.fromCartesian3(\n      Property.getValueOrDefault(\n        this._terrainOffsetProperty,\n        time,\n        defaultOffset,\n        offsetScratch,\n      ),\n    );\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new RectangleOutlineGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\nRectangleGeometryUpdater.prototype._computeCenter = function (time, result) {\n  const rect = Property.getValueOrUndefined(\n    this._entity.rectangle.coordinates,\n    time,\n    scratchCenterRect,\n  );\n  if (!defined(rect)) {\n    return;\n  }\n  const center = Rectangle.center(rect, scratchCarto);\n  return Cartographic.toCartesian(center, Ellipsoid.default, result);\n};\n\nRectangleGeometryUpdater.prototype._isHidden = function (entity, rectangle) {\n  return (\n    !defined(rectangle.coordinates) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, rectangle)\n  );\n};\n\nRectangleGeometryUpdater.prototype._isDynamic = function (entity, rectangle) {\n  return (\n    !rectangle.coordinates.isConstant || //\n    !Property.isConstant(rectangle.height) || //\n    !Property.isConstant(rectangle.extrudedHeight) || //\n    !Property.isConstant(rectangle.granularity) || //\n    !Property.isConstant(rectangle.stRotation) || //\n    !Property.isConstant(rectangle.rotation) || //\n    !Property.isConstant(rectangle.outlineWidth) || //\n    !Property.isConstant(rectangle.zIndex) || //\n    (this._onTerrain &&\n      !Property.isConstant(this._materialProperty) &&\n      !(this._materialProperty instanceof ColorMaterialProperty))\n  );\n};\n\nRectangleGeometryUpdater.prototype._setStaticOptions = function (\n  entity,\n  rectangle,\n) {\n  const isColorMaterial =\n    this._materialProperty instanceof ColorMaterialProperty;\n\n  let heightValue = Property.getValueOrUndefined(\n    rectangle.height,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const heightReferenceValue = Property.getValueOrDefault(\n    rectangle.heightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    rectangle.extrudedHeight,\n    Iso8601.MINIMUM_VALUE,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    rectangle.extrudedHeightReference,\n    Iso8601.MINIMUM_VALUE,\n    HeightReference.NONE,\n  );\n  if (defined(extrudedHeightValue) && !defined(heightValue)) {\n    heightValue = 0;\n  }\n\n  const options = this._options;\n  options.vertexFormat = isColorMaterial\n    ? PerInstanceColorAppearance.VERTEX_FORMAT\n    : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.rectangle = rectangle.coordinates.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.rectangle,\n  );\n  options.granularity = Property.getValueOrUndefined(\n    rectangle.granularity,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.stRotation = Property.getValueOrUndefined(\n    rectangle.stRotation,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.rotation = Property.getValueOrUndefined(\n    rectangle.rotation,\n    Iso8601.MINIMUM_VALUE,\n  );\n  options.offsetAttribute =\n    GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  options.height = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    heightReferenceValue,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n      RectangleGeometry.computeRectangle(options, scratchRectangle),\n    ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\n\nRectangleGeometryUpdater.DynamicGeometryUpdater =\n  DynamicRectangleGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicRectangleGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicRectangleGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicRectangleGeometryUpdater.prototype.constructor =\n    DynamicRectangleGeometryUpdater;\n}\n\nDynamicRectangleGeometryUpdater.prototype._isHidden = function (\n  entity,\n  rectangle,\n  time,\n) {\n  return (\n    !defined(this._options.rectangle) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(\n      this,\n      entity,\n      rectangle,\n      time,\n    )\n  );\n};\n\nDynamicRectangleGeometryUpdater.prototype._setOptions = function (\n  entity,\n  rectangle,\n  time,\n) {\n  const options = this._options;\n  let heightValue = Property.getValueOrUndefined(rectangle.height, time);\n  const heightReferenceValue = Property.getValueOrDefault(\n    rectangle.heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  let extrudedHeightValue = Property.getValueOrUndefined(\n    rectangle.extrudedHeight,\n    time,\n  );\n  const extrudedHeightReferenceValue = Property.getValueOrDefault(\n    rectangle.extrudedHeightReference,\n    time,\n    HeightReference.NONE,\n  );\n  if (defined(extrudedHeightValue) && !defined(heightValue)) {\n    heightValue = 0;\n  }\n\n  options.rectangle = Property.getValueOrUndefined(\n    rectangle.coordinates,\n    time,\n    options.rectangle,\n  );\n  options.granularity = Property.getValueOrUndefined(\n    rectangle.granularity,\n    time,\n  );\n  options.stRotation = Property.getValueOrUndefined(rectangle.stRotation, time);\n  options.rotation = Property.getValueOrUndefined(rectangle.rotation, time);\n  options.offsetAttribute =\n    GroundGeometryUpdater.computeGeometryOffsetAttribute(\n      heightValue,\n      heightReferenceValue,\n      extrudedHeightValue,\n      extrudedHeightReferenceValue,\n    );\n  options.height = GroundGeometryUpdater.getGeometryHeight(\n    heightValue,\n    heightReferenceValue,\n  );\n\n  extrudedHeightValue = GroundGeometryUpdater.getGeometryExtrudedHeight(\n    extrudedHeightValue,\n    extrudedHeightReferenceValue,\n  );\n  if (extrudedHeightValue === GroundGeometryUpdater.CLAMP_TO_GROUND) {\n    extrudedHeightValue = ApproximateTerrainHeights.getMinimumMaximumHeights(\n      RectangleGeometry.computeRectangle(options, scratchRectangle),\n    ).minimumTerrainHeight;\n  }\n\n  options.extrudedHeight = extrudedHeightValue;\n};\nexport default RectangleGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} RectangleGraphics.ConstructorOptions\n *\n * Initialization options for the RectangleGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the rectangle.\n * @property {Property | Rectangle} [coordinates] The Property specifying the {@link Rectangle}.\n * @property {Property | number} [height=0] A numeric Property specifying the altitude of the rectangle relative to the ellipsoid surface.\n * @property {Property | HeightReference} [heightReference=HeightReference.NONE] A Property specifying what the height is relative to.\n * @property {Property | number} [extrudedHeight] A numeric Property specifying the altitude of the rectangle's extruded face relative to the ellipsoid surface.\n * @property {Property | HeightReference} [extrudedHeightReference=HeightReference.NONE] A Property specifying what the extrudedHeight is relative to.\n * @property {Property | number} [rotation=0.0] A numeric property specifying the rotation of the rectangle clockwise from north.\n * @property {Property | number} [stRotation=0.0] A numeric property specifying the rotation of the rectangle texture counter-clockwise from north.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between points on the rectangle.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the rectangle is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the rectangle.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the rectangle is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the rectangle casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this rectangle will be displayed.\n * @property {Property | ClassificationType} [classificationType=ClassificationType.BOTH] An enum Property specifying whether this rectangle will classify terrain, 3D Tiles, or both when on the ground.\n * @property {Property | number} [zIndex=0] A Property specifying the zIndex used for ordering ground geometry.  Only has an effect if the rectangle is constant and neither height or extrudedHeight are specified.\n */\n\n/**\n * Describes graphics for a {@link Rectangle}.\n * The rectangle conforms to the curvature of the globe and can be placed on the surface or\n * at altitude and can optionally be extruded into a volume.\n *\n * @alias RectangleGraphics\n * @constructor\n *\n * @param {RectangleGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?id=rectangle|Cesium Sandcastle Rectangle Demo}\n */\nfunction RectangleGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._coordinates = undefined;\n  this._coordinatesSubscription = undefined;\n  this._height = undefined;\n  this._heightSubscription = undefined;\n  this._heightReference = undefined;\n  this._heightReferenceSubscription = undefined;\n  this._extrudedHeight = undefined;\n  this._extrudedHeightSubscription = undefined;\n  this._extrudedHeightReference = undefined;\n  this._extrudedHeightReferenceSubscription = undefined;\n  this._rotation = undefined;\n  this._rotationSubscription = undefined;\n  this._stRotation = undefined;\n  this._stRotationSubscription = undefined;\n  this._granularity = undefined;\n  this._granularitySubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distancedisplayConditionSubscription = undefined;\n  this._classificationType = undefined;\n  this._classificationTypeSubscription = undefined;\n  this._zIndex = undefined;\n  this._zIndexSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(RectangleGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof RectangleGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the rectangle.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Rectangle}.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   */\n  coordinates: createPropertyDescriptor(\"coordinates\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the altitude of the rectangle.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  height: createPropertyDescriptor(\"height\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link HeightReference}.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  heightReference: createPropertyDescriptor(\"heightReference\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the altitude of the rectangle extrusion.\n   * Setting this property creates volume starting at height and ending at this altitude.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   */\n  extrudedHeight: createPropertyDescriptor(\"extrudedHeight\"),\n\n  /**\n   * Gets or sets the Property specifying the extruded {@link HeightReference}.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default HeightReference.NONE\n   */\n  extrudedHeightReference: createPropertyDescriptor(\"extrudedHeightReference\"),\n\n  /**\n   * Gets or sets the numeric property specifying the rotation of the rectangle clockwise from north.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0\n   */\n  rotation: createPropertyDescriptor(\"rotation\"),\n\n  /**\n   * Gets or sets the numeric property specifying the rotation of the rectangle texture counter-clockwise from north.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default 0\n   */\n  stRotation: createPropertyDescriptor(\"stRotation\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the angular distance between points on the rectangle.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default {CesiumMath.RADIANS_PER_DEGREE}\n   */\n  granularity: createPropertyDescriptor(\"granularity\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the rectangle is filled with the provided material.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the rectangle.\n   * @memberof RectangleGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the rectangle is outlined.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the rectangle\n   * casts or receives shadows from light sources.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this rectangle will be displayed.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n\n  /**\n   * Gets or sets the {@link ClassificationType} Property specifying whether this rectangle will classify terrain, 3D Tiles, or both when on the ground.\n   * @memberof RectangleGraphics.prototype\n   * @type {Property|undefined}\n   * @default ClassificationType.BOTH\n   */\n  classificationType: createPropertyDescriptor(\"classificationType\"),\n\n  /**\n   * Gets or sets the zIndex Property specifying the ordering of the rectangle.  Only has an effect if the rectangle is constant and neither height or extrudedHeight are specified.\n   * @memberof RectangleGraphics.prototype\n   * @type {ConstantProperty|undefined}\n   * @default 0\n   */\n  zIndex: createPropertyDescriptor(\"zIndex\"),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {RectangleGraphics} [result] The object onto which to store the result.\n * @returns {RectangleGraphics} The modified result parameter or a new instance if one was not provided.\n */\nRectangleGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new RectangleGraphics(this);\n  }\n  result.show = this.show;\n  result.coordinates = this.coordinates;\n  result.height = this.height;\n  result.heightReference = this.heightReference;\n  result.extrudedHeight = this.extrudedHeight;\n  result.extrudedHeightReference = this.extrudedHeightReference;\n  result.rotation = this.rotation;\n  result.stRotation = this.stRotation;\n  result.granularity = this.granularity;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  result.classificationType = this.classificationType;\n  result.zIndex = this.zIndex;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {RectangleGraphics} source The object to be merged into this object.\n */\nRectangleGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.coordinates = this.coordinates ?? source.coordinates;\n  this.height = this.height ?? source.height;\n  this.heightReference = this.heightReference ?? source.heightReference;\n  this.extrudedHeight = this.extrudedHeight ?? source.extrudedHeight;\n  this.extrudedHeightReference =\n    this.extrudedHeightReference ?? source.extrudedHeightReference;\n  this.rotation = this.rotation ?? source.rotation;\n  this.stRotation = this.stRotation ?? source.stRotation;\n  this.granularity = this.granularity ?? source.granularity;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n  this.classificationType =\n    this.classificationType ?? source.classificationType;\n  this.zIndex = this.zIndex ?? source.zIndex;\n};\nexport default RectangleGraphics;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Property from \"./Property.js\";\n\nfunction resolve(that) {\n  let targetProperty = that._targetProperty;\n\n  if (!defined(targetProperty)) {\n    let targetEntity = that._targetEntity;\n\n    if (!defined(targetEntity)) {\n      targetEntity = that._targetCollection.getById(that._targetId);\n\n      if (!defined(targetEntity)) {\n        // target entity not found\n        that._targetEntity = that._targetProperty = undefined;\n        return;\n      }\n\n      // target entity was found. listen for changes to entity definition\n      targetEntity.definitionChanged.addEventListener(\n        ReferenceProperty.prototype._onTargetEntityDefinitionChanged,\n        that,\n      );\n      that._targetEntity = targetEntity;\n    }\n\n    // walk the list of property names and resolve properties\n    const targetPropertyNames = that._targetPropertyNames;\n    targetProperty = that._targetEntity;\n    for (\n      let i = 0, len = targetPropertyNames.length;\n      i < len && defined(targetProperty);\n      ++i\n    ) {\n      targetProperty = targetProperty[targetPropertyNames[i]];\n    }\n\n    // target property may or may not be defined, depending on if it was found\n    that._targetProperty = targetProperty;\n  }\n\n  return targetProperty;\n}\n\n/**\n * A {@link Property} which transparently links to another property on a provided object.\n *\n * @alias ReferenceProperty\n * @constructor\n *\n * @param {EntityCollection} targetCollection The entity collection which will be used to resolve the reference.\n * @param {string} targetId The id of the entity which is being referenced.\n * @param {string[]} targetPropertyNames The names of the property on the target entity which we will use.\n *\n * @example\n * const collection = new Cesium.EntityCollection();\n *\n * //Create a new entity and assign a billboard scale.\n * const object1 = new Cesium.Entity({id:'object1'});\n * object1.billboard = new Cesium.BillboardGraphics();\n * object1.billboard.scale = new Cesium.ConstantProperty(2.0);\n * collection.add(object1);\n *\n * //Create a second entity and reference the scale from the first one.\n * const object2 = new Cesium.Entity({id:'object2'});\n * object2.model = new Cesium.ModelGraphics();\n * object2.model.scale = new Cesium.ReferenceProperty(collection, 'object1', ['billboard', 'scale']);\n * collection.add(object2);\n *\n * //Create a third object, but use the fromString helper function.\n * const object3 = new Cesium.Entity({id:'object3'});\n * object3.billboard = new Cesium.BillboardGraphics();\n * object3.billboard.scale = Cesium.ReferenceProperty.fromString(collection, 'object1#billboard.scale');\n * collection.add(object3);\n *\n * //You can refer to an entity with a # or . in id and property names by escaping them.\n * const object4 = new Cesium.Entity({id:'#object.4'});\n * object4.billboard = new Cesium.BillboardGraphics();\n * object4.billboard.scale = new Cesium.ConstantProperty(2.0);\n * collection.add(object4);\n *\n * const object5 = new Cesium.Entity({id:'object5'});\n * object5.billboard = new Cesium.BillboardGraphics();\n * object5.billboard.scale = Cesium.ReferenceProperty.fromString(collection, '\\\\#object\\\\.4#billboard.scale');\n * collection.add(object5);\n */\nfunction ReferenceProperty(targetCollection, targetId, targetPropertyNames) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(targetCollection)) {\n    throw new DeveloperError(\"targetCollection is required.\");\n  }\n  if (!defined(targetId) || targetId === \"\") {\n    throw new DeveloperError(\"targetId is required.\");\n  }\n  if (!defined(targetPropertyNames) || targetPropertyNames.length === 0) {\n    throw new DeveloperError(\"targetPropertyNames is required.\");\n  }\n  for (let i = 0; i < targetPropertyNames.length; i++) {\n    const item = targetPropertyNames[i];\n    if (!defined(item) || item === \"\") {\n      throw new DeveloperError(\"reference contains invalid properties.\");\n    }\n  }\n  //>>includeEnd('debug');\n\n  this._targetCollection = targetCollection;\n  this._targetId = targetId;\n  this._targetPropertyNames = targetPropertyNames;\n  this._targetProperty = undefined;\n  this._targetEntity = undefined;\n  this._definitionChanged = new Event();\n\n  targetCollection.collectionChanged.addEventListener(\n    ReferenceProperty.prototype._onCollectionChanged,\n    this,\n  );\n}\n\nObject.defineProperties(ReferenceProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.\n   * @memberof ReferenceProperty.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return Property.isConstant(resolve(this));\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever the referenced property's definition is changed.\n   * @memberof ReferenceProperty.prototype\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the reference frame that the position is defined in.\n   * This property is only valid if the referenced property is a {@link PositionProperty}.\n   * @memberof ReferenceProperty.prototype\n   * @type {ReferenceFrame}\n   * @readonly\n   */\n  referenceFrame: {\n    get: function () {\n      const target = resolve(this);\n      return defined(target) ? target.referenceFrame : undefined;\n    },\n  },\n  /**\n   * Gets the id of the entity being referenced.\n   * @memberof ReferenceProperty.prototype\n   * @type {string}\n   * @readonly\n   */\n  targetId: {\n    get: function () {\n      return this._targetId;\n    },\n  },\n  /**\n   * Gets the collection containing the entity being referenced.\n   * @memberof ReferenceProperty.prototype\n   * @type {EntityCollection}\n   * @readonly\n   */\n  targetCollection: {\n    get: function () {\n      return this._targetCollection;\n    },\n  },\n  /**\n   * Gets the array of property names used to retrieve the referenced property.\n   * @memberof ReferenceProperty.prototype\n   * @type {}\n   * @readonly\n   */\n  targetPropertyNames: {\n    get: function () {\n      return this._targetPropertyNames;\n    },\n  },\n  /**\n   * Gets the resolved instance of the underlying referenced property.\n   * @memberof ReferenceProperty.prototype\n   * @type {Property|undefined}\n   * @readonly\n   */\n  resolvedProperty: {\n    get: function () {\n      return resolve(this);\n    },\n  },\n});\n\n/**\n * Creates a new instance given the entity collection that will\n * be used to resolve it and a string indicating the target entity id and property.\n * The format of the string is \"objectId#foo.bar\", where # separates the id from\n * property path and . separates sub-properties.  If the reference identifier or\n * or any sub-properties contains a # . or \\ they must be escaped.\n *\n * @param {EntityCollection} targetCollection\n * @param {string} referenceString\n * @returns {ReferenceProperty} A new instance of ReferenceProperty.\n *\n * @exception {DeveloperError} invalid referenceString.\n */\nReferenceProperty.fromString = function (targetCollection, referenceString) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(targetCollection)) {\n    throw new DeveloperError(\"targetCollection is required.\");\n  }\n  if (!defined(referenceString)) {\n    throw new DeveloperError(\"referenceString is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let identifier;\n  const values = [];\n\n  let inIdentifier = true;\n  let isEscaped = false;\n  let token = \"\";\n  for (let i = 0; i < referenceString.length; ++i) {\n    const c = referenceString.charAt(i);\n\n    if (isEscaped) {\n      token += c;\n      isEscaped = false;\n    } else if (c === \"\\\\\") {\n      isEscaped = true;\n    } else if (inIdentifier && c === \"#\") {\n      identifier = token;\n      inIdentifier = false;\n      token = \"\";\n    } else if (!inIdentifier && c === \".\") {\n      values.push(token);\n      token = \"\";\n    } else {\n      token += c;\n    }\n  }\n  values.push(token);\n\n  return new ReferenceProperty(targetCollection, identifier, values);\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nReferenceProperty.prototype.getValue = function (time, result) {\n  const target = resolve(this);\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return defined(target) ? target.getValue(time, result) : undefined;\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n * This method is only valid if the property being referenced is a {@link PositionProperty}.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nReferenceProperty.prototype.getValueInReferenceFrame = function (\n  time,\n  referenceFrame,\n  result,\n) {\n  const target = resolve(this);\n  return defined(target)\n    ? target.getValueInReferenceFrame(time, referenceFrame, result)\n    : undefined;\n};\n\n/**\n * Gets the {@link Material} type at the provided time.\n * This method is only valid if the property being referenced is a {@link MaterialProperty}.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nReferenceProperty.prototype.getType = function (time) {\n  const target = resolve(this);\n  return defined(target) ? target.getType(time) : undefined;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nReferenceProperty.prototype.equals = function (other) {\n  if (this === other) {\n    return true;\n  }\n\n  const names = this._targetPropertyNames;\n  const otherNames = other._targetPropertyNames;\n\n  if (\n    this._targetCollection !== other._targetCollection || //\n    this._targetId !== other._targetId || //\n    names.length !== otherNames.length\n  ) {\n    return false;\n  }\n\n  const length = this._targetPropertyNames.length;\n  for (let i = 0; i < length; i++) {\n    if (names[i] !== otherNames[i]) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nReferenceProperty.prototype._onTargetEntityDefinitionChanged = function (\n  targetEntity,\n  name,\n  value,\n  oldValue,\n) {\n  if (defined(this._targetProperty) && this._targetPropertyNames[0] === name) {\n    this._targetProperty = undefined;\n    this._definitionChanged.raiseEvent(this);\n  }\n};\n\nReferenceProperty.prototype._onCollectionChanged = function (\n  collection,\n  added,\n  removed,\n) {\n  let targetEntity = this._targetEntity;\n  if (defined(targetEntity) && removed.indexOf(targetEntity) !== -1) {\n    targetEntity.definitionChanged.removeEventListener(\n      ReferenceProperty.prototype._onTargetEntityDefinitionChanged,\n      this,\n    );\n    this._targetEntity = this._targetProperty = undefined;\n  } else if (!defined(targetEntity)) {\n    targetEntity = resolve(this);\n    if (defined(targetEntity)) {\n      this._definitionChanged.raiseEvent(this);\n    }\n  }\n};\nexport default ReferenceProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * Represents a {@link Packable} number that always interpolates values\n * towards the shortest angle of rotation. This object is never used directly\n * but is instead passed to the constructor of {@link SampledProperty}\n * in order to represent a two-dimensional angle of rotation.\n *\n * @interface Rotation\n *\n *\n * @example\n * const time1 = Cesium.JulianDate.fromIso8601('2010-05-07T00:00:00');\n * const time2 = Cesium.JulianDate.fromIso8601('2010-05-07T00:01:00');\n * const time3 = Cesium.JulianDate.fromIso8601('2010-05-07T00:02:00');\n *\n * const property = new Cesium.SampledProperty(Cesium.Rotation);\n * property.addSample(time1, 0);\n * property.addSample(time3, Cesium.Math.toRadians(350));\n *\n * //Getting the value at time2 will equal 355 degrees instead\n * //of 175 degrees (which is what you get if you construct\n * //a SampledProperty(Number) instead.  Note, the actual\n * //return value is in radians, not degrees.\n * property.getValue(time2);\n *\n * @see PackableForInterpolation\n */\nconst Rotation = {\n  /**\n   * The number of elements used to pack the object into an array.\n   * @type {number}\n   */\n  packedLength: 1,\n\n  /**\n   * Stores the provided instance into the provided array.\n   *\n   * @param {Rotation} value The value to pack.\n   * @param {number[]} array The array to pack into.\n   * @param {number} [startingIndex=0] The index into the array at which to start packing the elements.\n   *\n   * @returns {number[]} The array that was packed into\n   */\n  pack: function (value, array, startingIndex) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(value)) {\n      throw new DeveloperError(\"value is required\");\n    }\n\n    if (!defined(array)) {\n      throw new DeveloperError(\"array is required\");\n    }\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n    array[startingIndex] = value;\n\n    return array;\n  },\n\n  /**\n   * Retrieves an instance from a packed array.\n   *\n   * @param {number[]} array The packed array.\n   * @param {number} [startingIndex=0] The starting index of the element to be unpacked.\n   * @param {Rotation} [result] The object into which to store the result.\n   * @returns {Rotation} The modified result parameter or a new Rotation instance if one was not provided.\n   */\n  unpack: function (array, startingIndex, result) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(array)) {\n      throw new DeveloperError(\"array is required\");\n    }\n    //>>includeEnd('debug');\n\n    startingIndex = startingIndex ?? 0;\n    return array[startingIndex];\n  },\n\n  /**\n   * Converts a packed array into a form suitable for interpolation.\n   *\n   * @param {number[]} packedArray The packed array.\n   * @param {number} [startingIndex=0] The index of the first element to be converted.\n   * @param {number} [lastIndex=packedArray.length] The index of the last element to be converted.\n   * @param {number[]} [result] The object into which to store the result.\n   */\n  convertPackedArrayForInterpolation: function (\n    packedArray,\n    startingIndex,\n    lastIndex,\n    result,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(packedArray)) {\n      throw new DeveloperError(\"packedArray is required\");\n    }\n    //>>includeEnd('debug');\n\n    if (!defined(result)) {\n      result = [];\n    }\n\n    startingIndex = startingIndex ?? 0;\n    lastIndex = lastIndex ?? packedArray.length;\n\n    let previousValue;\n    for (let i = 0, len = lastIndex - startingIndex + 1; i < len; i++) {\n      const value = packedArray[startingIndex + i];\n      if (i === 0 || Math.abs(previousValue - value) < Math.PI) {\n        result[i] = value;\n      } else {\n        result[i] = value - CesiumMath.TWO_PI;\n      }\n      previousValue = value;\n    }\n  },\n\n  /**\n   * Retrieves an instance from a packed array converted with {@link Rotation.convertPackedArrayForInterpolation}.\n   *\n   * @param {number[]} array The array previously packed for interpolation.\n   * @param {number[]} sourceArray The original packed array.\n   * @param {number} [firstIndex=0] The firstIndex used to convert the array.\n   * @param {number} [lastIndex=packedArray.length] The lastIndex used to convert the array.\n   * @param {Rotation} [result] The object into which to store the result.\n   * @returns {Rotation} The modified result parameter or a new Rotation instance if one was not provided.\n   */\n  unpackInterpolationResult: function (\n    array,\n    sourceArray,\n    firstIndex,\n    lastIndex,\n    result,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(array)) {\n      throw new DeveloperError(\"array is required\");\n    }\n    if (!defined(sourceArray)) {\n      throw new DeveloperError(\"sourceArray is required\");\n    }\n    //>>includeEnd('debug');\n\n    result = array[0];\n    if (result < 0) {\n      return result + CesiumMath.TWO_PI;\n    }\n    return result;\n  },\n};\nexport default Rotation;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport PositionProperty from \"./PositionProperty.js\";\nimport Property from \"./Property.js\";\nimport SampledProperty from \"./SampledProperty.js\";\n\n/**\n * A {@link SampledProperty} which is also a {@link PositionProperty}.\n *\n * @alias SampledPositionProperty\n * @constructor\n *\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n * @param {number} [numberOfDerivatives=0] The number of derivatives that accompany each position; i.e. velocity, acceleration, etc...\n */\nfunction SampledPositionProperty(referenceFrame, numberOfDerivatives) {\n  numberOfDerivatives = numberOfDerivatives ?? 0;\n\n  let derivativeTypes;\n  if (numberOfDerivatives > 0) {\n    derivativeTypes = new Array(numberOfDerivatives);\n    for (let i = 0; i < numberOfDerivatives; i++) {\n      derivativeTypes[i] = Cartesian3;\n    }\n  }\n\n  this._numberOfDerivatives = numberOfDerivatives;\n  this._property = new SampledProperty(Cartesian3, derivativeTypes);\n  this._definitionChanged = new Event();\n  this._referenceFrame = referenceFrame ?? ReferenceFrame.FIXED;\n\n  this._property._definitionChanged.addEventListener(function () {\n    this._definitionChanged.raiseEvent(this);\n  }, this);\n}\n\nObject.defineProperties(SampledPositionProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof SampledPositionProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._property.isConstant;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof SampledPositionProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the reference frame in which the position is defined.\n   * @memberof SampledPositionProperty.prototype\n   * @type {ReferenceFrame}\n   * @default ReferenceFrame.FIXED;\n   */\n  referenceFrame: {\n    get: function () {\n      return this._referenceFrame;\n    },\n  },\n  /**\n   * Gets the degree of interpolation to perform when retrieving a value. Call <code>setInterpolationOptions</code> to set this.\n   * @memberof SampledPositionProperty.prototype\n   *\n   * @type {number}\n   * @default 1\n   * @readonly\n   */\n  interpolationDegree: {\n    get: function () {\n      return this._property.interpolationDegree;\n    },\n  },\n  /**\n   * Gets the interpolation algorithm to use when retrieving a value. Call <code>setInterpolationOptions</code> to set this.\n   * @memberof SampledPositionProperty.prototype\n   *\n   * @type {InterpolationAlgorithm}\n   * @default LinearApproximation\n   * @readonly\n   */\n  interpolationAlgorithm: {\n    get: function () {\n      return this._property.interpolationAlgorithm;\n    },\n  },\n  /**\n   * The number of derivatives contained by this property; i.e. 0 for just position, 1 for velocity, etc.\n   * @memberof SampledPositionProperty.prototype\n   *\n   * @type {number}\n   * @default 0\n   */\n  numberOfDerivatives: {\n    get: function () {\n      return this._numberOfDerivatives;\n    },\n  },\n  /**\n   * Gets or sets the type of extrapolation to perform when a value\n   * is requested at a time after any available samples.\n   * @memberof SampledPositionProperty.prototype\n   * @type {ExtrapolationType}\n   * @default ExtrapolationType.NONE\n   */\n  forwardExtrapolationType: {\n    get: function () {\n      return this._property.forwardExtrapolationType;\n    },\n    set: function (value) {\n      this._property.forwardExtrapolationType = value;\n    },\n  },\n  /**\n   * Gets or sets the amount of time to extrapolate forward before\n   * the property becomes undefined.  A value of 0 will extrapolate forever.\n   * @memberof SampledPositionProperty.prototype\n   * @type {number}\n   * @default 0\n   */\n  forwardExtrapolationDuration: {\n    get: function () {\n      return this._property.forwardExtrapolationDuration;\n    },\n    set: function (value) {\n      this._property.forwardExtrapolationDuration = value;\n    },\n  },\n  /**\n   * Gets or sets the type of extrapolation to perform when a value\n   * is requested at a time before any available samples.\n   * @memberof SampledPositionProperty.prototype\n   * @type {ExtrapolationType}\n   * @default ExtrapolationType.NONE\n   */\n  backwardExtrapolationType: {\n    get: function () {\n      return this._property.backwardExtrapolationType;\n    },\n    set: function (value) {\n      this._property.backwardExtrapolationType = value;\n    },\n  },\n  /**\n   * Gets or sets the amount of time to extrapolate backward\n   * before the property becomes undefined.  A value of 0 will extrapolate forever.\n   * @memberof SampledPositionProperty.prototype\n   * @type {number}\n   * @default 0\n   */\n  backwardExtrapolationDuration: {\n    get: function () {\n      return this._property.backwardExtrapolationDuration;\n    },\n    set: function (value) {\n      this._property.backwardExtrapolationDuration = value;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the position at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nSampledPositionProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the position at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nSampledPositionProperty.prototype.getValueInReferenceFrame = function (\n  time,\n  referenceFrame,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  Check.defined(\"referenceFrame\", referenceFrame);\n  //>>includeEnd('debug');\n\n  result = this._property.getValue(time, result);\n  if (defined(result)) {\n    return PositionProperty.convertToReferenceFrame(\n      time,\n      result,\n      this._referenceFrame,\n      referenceFrame,\n      result,\n    );\n  }\n  return undefined;\n};\n\n/**\n * Sets the algorithm and degree to use when interpolating a position.\n *\n * @param {object} [options] Object with the following properties:\n * @param {InterpolationAlgorithm} [options.interpolationAlgorithm] The new interpolation algorithm.  If undefined, the existing property will be unchanged.\n * @param {number} [options.interpolationDegree] The new interpolation degree.  If undefined, the existing property will be unchanged.\n */\nSampledPositionProperty.prototype.setInterpolationOptions = function (options) {\n  this._property.setInterpolationOptions(options);\n};\n\n/**\n * Adds a new sample.\n *\n * @param {JulianDate} time The sample time.\n * @param {Cartesian3} position The position at the provided time.\n * @param {Cartesian3[]} [derivatives] The array of derivative values at the provided time.\n */\nSampledPositionProperty.prototype.addSample = function (\n  time,\n  position,\n  derivatives,\n) {\n  const numberOfDerivatives = this._numberOfDerivatives;\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    numberOfDerivatives > 0 &&\n    (!defined(derivatives) || derivatives.length !== numberOfDerivatives)\n  ) {\n    throw new DeveloperError(\n      \"derivatives length must be equal to the number of derivatives.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._property.addSample(time, position, derivatives);\n};\n\n/**\n * Adds multiple samples via parallel arrays.\n *\n * @param {JulianDate[]} times An array of JulianDate instances where each index is a sample time.\n * @param {Cartesian3[]} positions An array of Cartesian3 position instances, where each value corresponds to the provided time index.\n * @param {Array[]} [derivatives] An array where each value is another array containing derivatives for the corresponding time index.\n *\n * @exception {DeveloperError} All arrays must be the same length.\n */\nSampledPositionProperty.prototype.addSamples = function (\n  times,\n  positions,\n  derivatives,\n) {\n  this._property.addSamples(times, positions, derivatives);\n};\n\n/**\n * Adds samples as a single packed array where each new sample is represented as a date,\n * followed by the packed representation of the corresponding value and derivatives.\n *\n * @param {number[]} packedSamples The array of packed samples.\n * @param {JulianDate} [epoch] If any of the dates in packedSamples are numbers, they are considered an offset from this epoch, in seconds.\n */\nSampledPositionProperty.prototype.addSamplesPackedArray = function (\n  packedSamples,\n  epoch,\n) {\n  this._property.addSamplesPackedArray(packedSamples, epoch);\n};\n\n/**\n * Removes a sample at the given time, if present.\n *\n * @param {JulianDate} time The sample time.\n * @returns {boolean} <code>true</code> if a sample at time was removed, <code>false</code> otherwise.\n */\nSampledPositionProperty.prototype.removeSample = function (time) {\n  return this._property.removeSample(time);\n};\n\n/**\n * Removes all samples for the given time interval.\n *\n * @param {TimeInterval} time The time interval for which to remove all samples.\n */\nSampledPositionProperty.prototype.removeSamples = function (timeInterval) {\n  this._property.removeSamples(timeInterval);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nSampledPositionProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof SampledPositionProperty &&\n      Property.equals(this._property, other._property) && //\n      this._referenceFrame === other._referenceFrame)\n  );\n};\nexport default SampledPositionProperty;\n","import binarySearch from \"../Core/binarySearch.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport ExtrapolationType from \"../Core/ExtrapolationType.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport LinearApproximation from \"../Core/LinearApproximation.js\";\n\nconst PackableNumber = {\n  packedLength: 1,\n  pack: function (value, array, startingIndex) {\n    startingIndex = startingIndex ?? 0;\n    array[startingIndex] = value;\n  },\n  unpack: function (array, startingIndex, result) {\n    startingIndex = startingIndex ?? 0;\n    return array[startingIndex];\n  },\n};\n\n//We can't use splice for inserting new elements because function apply can't handle\n//a huge number of arguments.  See https://code.google.com/p/chromium/issues/detail?id=56588\nfunction arrayInsert(array, startIndex, items) {\n  let i;\n  const arrayLength = array.length;\n  const itemsLength = items.length;\n  const newLength = arrayLength + itemsLength;\n\n  array.length = newLength;\n  if (arrayLength !== startIndex) {\n    let q = arrayLength - 1;\n    for (i = newLength - 1; i >= startIndex; i--) {\n      array[i] = array[q--];\n    }\n  }\n\n  for (i = 0; i < itemsLength; i++) {\n    array[startIndex++] = items[i];\n  }\n}\n\nfunction convertDate(date, epoch) {\n  if (date instanceof JulianDate) {\n    return date;\n  }\n  if (typeof date === \"string\") {\n    return JulianDate.fromIso8601(date);\n  }\n  return JulianDate.addSeconds(epoch, date, new JulianDate());\n}\n\nconst timesSpliceArgs = [];\nconst valuesSpliceArgs = [];\n\nfunction mergeNewSamples(epoch, times, values, newData, packedLength) {\n  let newDataIndex = 0;\n  let i;\n  let prevItem;\n  let timesInsertionPoint;\n  let valuesInsertionPoint;\n  let currentTime;\n  let nextTime;\n\n  while (newDataIndex < newData.length) {\n    currentTime = convertDate(newData[newDataIndex], epoch);\n    timesInsertionPoint = binarySearch(times, currentTime, JulianDate.compare);\n    let timesSpliceArgsCount = 0;\n    let valuesSpliceArgsCount = 0;\n\n    if (timesInsertionPoint < 0) {\n      //Doesn't exist, insert as many additional values as we can.\n      timesInsertionPoint = ~timesInsertionPoint;\n\n      valuesInsertionPoint = timesInsertionPoint * packedLength;\n      prevItem = undefined;\n      nextTime = times[timesInsertionPoint];\n      while (newDataIndex < newData.length) {\n        currentTime = convertDate(newData[newDataIndex], epoch);\n        if (\n          (defined(prevItem) &&\n            JulianDate.compare(prevItem, currentTime) >= 0) ||\n          (defined(nextTime) && JulianDate.compare(currentTime, nextTime) >= 0)\n        ) {\n          break;\n        }\n        timesSpliceArgs[timesSpliceArgsCount++] = currentTime;\n        newDataIndex = newDataIndex + 1;\n        for (i = 0; i < packedLength; i++) {\n          valuesSpliceArgs[valuesSpliceArgsCount++] = newData[newDataIndex];\n          newDataIndex = newDataIndex + 1;\n        }\n        prevItem = currentTime;\n      }\n\n      if (timesSpliceArgsCount > 0) {\n        valuesSpliceArgs.length = valuesSpliceArgsCount;\n        arrayInsert(values, valuesInsertionPoint, valuesSpliceArgs);\n\n        timesSpliceArgs.length = timesSpliceArgsCount;\n        arrayInsert(times, timesInsertionPoint, timesSpliceArgs);\n      }\n    } else {\n      //Found an exact match\n      for (i = 0; i < packedLength; i++) {\n        newDataIndex++;\n        values[timesInsertionPoint * packedLength + i] = newData[newDataIndex];\n      }\n      newDataIndex++;\n    }\n  }\n}\n\n/**\n * A {@link Property} whose value is interpolated for a given time from the\n * provided set of samples and specified interpolation algorithm and degree.\n * @alias SampledProperty\n * @constructor\n *\n * @param {number|Packable} type The type of property.\n * @param {Packable[]} [derivativeTypes] When supplied, indicates that samples will contain derivative information of the specified types.\n *\n *\n * @example\n * //Create a linearly interpolated Cartesian2\n * const property = new Cesium.SampledProperty(Cesium.Cartesian2);\n *\n * //Populate it with data\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:00.00Z'), new Cesium.Cartesian2(0, 0));\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-02T00:00:00.00Z'), new Cesium.Cartesian2(4, 7));\n *\n * //Retrieve an interpolated value\n * const result = property.getValue(Cesium.JulianDate.fromIso8601('2012-08-01T12:00:00.00Z'));\n *\n * @example\n * //Create a simple numeric SampledProperty that uses third degree Hermite Polynomial Approximation\n * const property = new Cesium.SampledProperty(Number);\n * property.setInterpolationOptions({\n *     interpolationDegree : 3,\n *     interpolationAlgorithm : Cesium.HermitePolynomialApproximation\n * });\n *\n * //Populate it with data\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:00.00Z'), 1.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:01:00.00Z'), 6.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:02:00.00Z'), 12.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:03:30.00Z'), 5.0);\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:06:30.00Z'), 2.0);\n *\n * //Samples can be added in any order.\n * property.addSample(Cesium.JulianDate.fromIso8601('2012-08-01T00:00:30.00Z'), 6.2);\n *\n * //Retrieve an interpolated value\n * const result = property.getValue(Cesium.JulianDate.fromIso8601('2012-08-01T00:02:34.00Z'));\n *\n * @see SampledPositionProperty\n */\nfunction SampledProperty(type, derivativeTypes) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"type\", type);\n  //>>includeEnd('debug');\n\n  let innerType = type;\n  if (innerType === Number) {\n    innerType = PackableNumber;\n  }\n  let packedLength = innerType.packedLength;\n  let packedInterpolationLength =\n    innerType.packedInterpolationLength ?? packedLength;\n\n  let inputOrder = 0;\n  let innerDerivativeTypes;\n  if (defined(derivativeTypes)) {\n    const length = derivativeTypes.length;\n    innerDerivativeTypes = new Array(length);\n    for (let i = 0; i < length; i++) {\n      let derivativeType = derivativeTypes[i];\n      if (derivativeType === Number) {\n        derivativeType = PackableNumber;\n      }\n      const derivativePackedLength = derivativeType.packedLength;\n      packedLength += derivativePackedLength;\n      packedInterpolationLength +=\n        derivativeType.packedInterpolationLength ?? derivativePackedLength;\n      innerDerivativeTypes[i] = derivativeType;\n    }\n    inputOrder = length;\n  }\n\n  this._type = type;\n  this._innerType = innerType;\n  this._interpolationDegree = 1;\n  this._interpolationAlgorithm = LinearApproximation;\n  this._numberOfPoints = 0;\n  this._times = [];\n  this._values = [];\n  this._xTable = [];\n  this._yTable = [];\n  this._packedLength = packedLength;\n  this._packedInterpolationLength = packedInterpolationLength;\n  this._updateTableLength = true;\n  this._interpolationResult = new Array(packedInterpolationLength);\n  this._definitionChanged = new Event();\n  this._derivativeTypes = derivativeTypes;\n  this._innerDerivativeTypes = innerDerivativeTypes;\n  this._inputOrder = inputOrder;\n  this._forwardExtrapolationType = ExtrapolationType.NONE;\n  this._forwardExtrapolationDuration = 0;\n  this._backwardExtrapolationType = ExtrapolationType.NONE;\n  this._backwardExtrapolationDuration = 0;\n}\n\nObject.defineProperties(SampledProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof SampledProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._values.length === 0;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof SampledProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the type of property.\n   * @memberof SampledProperty.prototype\n   * @type {*}\n   */\n  type: {\n    get: function () {\n      return this._type;\n    },\n  },\n  /**\n   * Gets the derivative types used by this property.\n   * @memberof SampledProperty.prototype\n   * @type {Packable[]}\n   */\n  derivativeTypes: {\n    get: function () {\n      return this._derivativeTypes;\n    },\n  },\n  /**\n   * Gets the degree of interpolation to perform when retrieving a value.\n   * @memberof SampledProperty.prototype\n   * @type {number}\n   * @default 1\n   */\n  interpolationDegree: {\n    get: function () {\n      return this._interpolationDegree;\n    },\n  },\n  /**\n   * Gets the interpolation algorithm to use when retrieving a value.\n   * @memberof SampledProperty.prototype\n   * @type {InterpolationAlgorithm}\n   * @default LinearApproximation\n   */\n  interpolationAlgorithm: {\n    get: function () {\n      return this._interpolationAlgorithm;\n    },\n  },\n  /**\n   * Gets or sets the type of extrapolation to perform when a value\n   * is requested at a time after any available samples.\n   * @memberof SampledProperty.prototype\n   * @type {ExtrapolationType}\n   * @default ExtrapolationType.NONE\n   */\n  forwardExtrapolationType: {\n    get: function () {\n      return this._forwardExtrapolationType;\n    },\n    set: function (value) {\n      if (this._forwardExtrapolationType !== value) {\n        this._forwardExtrapolationType = value;\n        this._definitionChanged.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * Gets or sets the amount of time to extrapolate forward before\n   * the property becomes undefined.  A value of 0 will extrapolate forever.\n   * @memberof SampledProperty.prototype\n   * @type {number}\n   * @default 0\n   */\n  forwardExtrapolationDuration: {\n    get: function () {\n      return this._forwardExtrapolationDuration;\n    },\n    set: function (value) {\n      if (this._forwardExtrapolationDuration !== value) {\n        this._forwardExtrapolationDuration = value;\n        this._definitionChanged.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * Gets or sets the type of extrapolation to perform when a value\n   * is requested at a time before any available samples.\n   * @memberof SampledProperty.prototype\n   * @type {ExtrapolationType}\n   * @default ExtrapolationType.NONE\n   */\n  backwardExtrapolationType: {\n    get: function () {\n      return this._backwardExtrapolationType;\n    },\n    set: function (value) {\n      if (this._backwardExtrapolationType !== value) {\n        this._backwardExtrapolationType = value;\n        this._definitionChanged.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * Gets or sets the amount of time to extrapolate backward\n   * before the property becomes undefined.  A value of 0 will extrapolate forever.\n   * @memberof SampledProperty.prototype\n   * @type {number}\n   * @default 0\n   */\n  backwardExtrapolationDuration: {\n    get: function () {\n      return this._backwardExtrapolationDuration;\n    },\n    set: function (value) {\n      if (this._backwardExtrapolationDuration !== value) {\n        this._backwardExtrapolationDuration = value;\n        this._definitionChanged.raiseEvent(this);\n      }\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nSampledProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  const times = this._times;\n  const timesLength = times.length;\n  if (timesLength === 0) {\n    return undefined;\n  }\n\n  let timeout;\n  const innerType = this._innerType;\n  const values = this._values;\n  let index = binarySearch(times, time, JulianDate.compare);\n\n  if (index < 0) {\n    index = ~index;\n\n    if (index === 0) {\n      const startTime = times[index];\n      timeout = this._backwardExtrapolationDuration;\n      if (\n        this._backwardExtrapolationType === ExtrapolationType.NONE ||\n        (timeout !== 0 &&\n          JulianDate.secondsDifference(startTime, time) > timeout)\n      ) {\n        return undefined;\n      }\n      if (this._backwardExtrapolationType === ExtrapolationType.HOLD) {\n        return innerType.unpack(values, 0, result);\n      }\n    }\n\n    if (index >= timesLength) {\n      index = timesLength - 1;\n      const endTime = times[index];\n      timeout = this._forwardExtrapolationDuration;\n      if (\n        this._forwardExtrapolationType === ExtrapolationType.NONE ||\n        (timeout !== 0 && JulianDate.secondsDifference(time, endTime) > timeout)\n      ) {\n        return undefined;\n      }\n      if (this._forwardExtrapolationType === ExtrapolationType.HOLD) {\n        index = timesLength - 1;\n        return innerType.unpack(values, index * innerType.packedLength, result);\n      }\n    }\n\n    const xTable = this._xTable;\n    const yTable = this._yTable;\n    const interpolationAlgorithm = this._interpolationAlgorithm;\n    const packedInterpolationLength = this._packedInterpolationLength;\n    const inputOrder = this._inputOrder;\n\n    if (this._updateTableLength) {\n      this._updateTableLength = false;\n      const numberOfPoints = Math.min(\n        interpolationAlgorithm.getRequiredDataPoints(\n          this._interpolationDegree,\n          inputOrder,\n        ),\n        timesLength,\n      );\n      if (numberOfPoints !== this._numberOfPoints) {\n        this._numberOfPoints = numberOfPoints;\n        xTable.length = numberOfPoints;\n        yTable.length = numberOfPoints * packedInterpolationLength;\n      }\n    }\n\n    const degree = this._numberOfPoints - 1;\n    if (degree < 1) {\n      return undefined;\n    }\n\n    let firstIndex = 0;\n    let lastIndex = timesLength - 1;\n    const pointsInCollection = lastIndex - firstIndex + 1;\n\n    if (pointsInCollection >= degree + 1) {\n      let computedFirstIndex = index - ((degree / 2) | 0) - 1;\n      if (computedFirstIndex < firstIndex) {\n        computedFirstIndex = firstIndex;\n      }\n      let computedLastIndex = computedFirstIndex + degree;\n      if (computedLastIndex > lastIndex) {\n        computedLastIndex = lastIndex;\n        computedFirstIndex = computedLastIndex - degree;\n        if (computedFirstIndex < firstIndex) {\n          computedFirstIndex = firstIndex;\n        }\n      }\n\n      firstIndex = computedFirstIndex;\n      lastIndex = computedLastIndex;\n    }\n    const length = lastIndex - firstIndex + 1;\n\n    // Build the tables\n    for (let i = 0; i < length; ++i) {\n      xTable[i] = JulianDate.secondsDifference(\n        times[firstIndex + i],\n        times[lastIndex],\n      );\n    }\n\n    if (!defined(innerType.convertPackedArrayForInterpolation)) {\n      let destinationIndex = 0;\n      const packedLength = this._packedLength;\n      let sourceIndex = firstIndex * packedLength;\n      const stop = (lastIndex + 1) * packedLength;\n\n      while (sourceIndex < stop) {\n        yTable[destinationIndex] = values[sourceIndex];\n        sourceIndex++;\n        destinationIndex++;\n      }\n    } else {\n      innerType.convertPackedArrayForInterpolation(\n        values,\n        firstIndex,\n        lastIndex,\n        yTable,\n      );\n    }\n\n    // Interpolate!\n    const x = JulianDate.secondsDifference(time, times[lastIndex]);\n    let interpolationResult;\n    if (inputOrder === 0 || !defined(interpolationAlgorithm.interpolate)) {\n      interpolationResult = interpolationAlgorithm.interpolateOrderZero(\n        x,\n        xTable,\n        yTable,\n        packedInterpolationLength,\n        this._interpolationResult,\n      );\n    } else {\n      const yStride = Math.floor(packedInterpolationLength / (inputOrder + 1));\n      interpolationResult = interpolationAlgorithm.interpolate(\n        x,\n        xTable,\n        yTable,\n        yStride,\n        inputOrder,\n        inputOrder,\n        this._interpolationResult,\n      );\n    }\n\n    if (!defined(innerType.unpackInterpolationResult)) {\n      return innerType.unpack(interpolationResult, 0, result);\n    }\n    return innerType.unpackInterpolationResult(\n      interpolationResult,\n      values,\n      firstIndex,\n      lastIndex,\n      result,\n    );\n  }\n  return innerType.unpack(values, index * this._packedLength, result);\n};\n\n/**\n * Sets the algorithm and degree to use when interpolating a value.\n *\n * @param {object} [options] Object with the following properties:\n * @param {InterpolationAlgorithm} [options.interpolationAlgorithm] The new interpolation algorithm.  If undefined, the existing property will be unchanged.\n * @param {number} [options.interpolationDegree] The new interpolation degree.  If undefined, the existing property will be unchanged.\n */\nSampledProperty.prototype.setInterpolationOptions = function (options) {\n  if (!defined(options)) {\n    return;\n  }\n\n  let valuesChanged = false;\n\n  const interpolationAlgorithm = options.interpolationAlgorithm;\n  const interpolationDegree = options.interpolationDegree;\n\n  if (\n    defined(interpolationAlgorithm) &&\n    this._interpolationAlgorithm !== interpolationAlgorithm\n  ) {\n    this._interpolationAlgorithm = interpolationAlgorithm;\n    valuesChanged = true;\n  }\n\n  if (\n    defined(interpolationDegree) &&\n    this._interpolationDegree !== interpolationDegree\n  ) {\n    this._interpolationDegree = interpolationDegree;\n    valuesChanged = true;\n  }\n\n  if (valuesChanged) {\n    this._updateTableLength = true;\n    this._definitionChanged.raiseEvent(this);\n  }\n};\n\n/**\n * Adds a new sample.\n *\n * @param {JulianDate} time The sample time.\n * @param {Packable} value The value at the provided time.\n * @param {Packable[]} [derivatives] The array of derivatives at the provided time.\n */\nSampledProperty.prototype.addSample = function (time, value, derivatives) {\n  const innerDerivativeTypes = this._innerDerivativeTypes;\n  const hasDerivatives = defined(innerDerivativeTypes);\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  Check.defined(\"value\", value);\n  if (hasDerivatives) {\n    Check.defined(\"derivatives\", derivatives);\n  }\n  //>>includeEnd('debug');\n\n  const innerType = this._innerType;\n  const data = [];\n  data.push(time);\n  innerType.pack(value, data, data.length);\n\n  if (hasDerivatives) {\n    const derivativesLength = innerDerivativeTypes.length;\n    for (let x = 0; x < derivativesLength; x++) {\n      innerDerivativeTypes[x].pack(derivatives[x], data, data.length);\n    }\n  }\n  mergeNewSamples(\n    undefined,\n    this._times,\n    this._values,\n    data,\n    this._packedLength,\n  );\n  this._updateTableLength = true;\n  this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Adds an array of samples.\n *\n * @param {JulianDate[]} times An array of JulianDate instances where each index is a sample time.\n * @param {Packable[]} values The array of values, where each value corresponds to the provided times index.\n * @param {Array[]} [derivativeValues] An array where each item is the array of derivatives at the equivalent time index.\n *\n * @exception {DeveloperError} times and values must be the same length.\n * @exception {DeveloperError} times and derivativeValues must be the same length.\n */\nSampledProperty.prototype.addSamples = function (\n  times,\n  values,\n  derivativeValues,\n) {\n  const innerDerivativeTypes = this._innerDerivativeTypes;\n  const hasDerivatives = defined(innerDerivativeTypes);\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"times\", times);\n  Check.defined(\"values\", values);\n  if (times.length !== values.length) {\n    throw new DeveloperError(\"times and values must be the same length.\");\n  }\n  if (\n    hasDerivatives &&\n    (!defined(derivativeValues) || derivativeValues.length !== times.length)\n  ) {\n    throw new DeveloperError(\n      \"times and derivativeValues must be the same length.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const innerType = this._innerType;\n  const length = times.length;\n  const data = [];\n  for (let i = 0; i < length; i++) {\n    data.push(times[i]);\n    innerType.pack(values[i], data, data.length);\n\n    if (hasDerivatives) {\n      const derivatives = derivativeValues[i];\n      const derivativesLength = innerDerivativeTypes.length;\n      for (let x = 0; x < derivativesLength; x++) {\n        innerDerivativeTypes[x].pack(derivatives[x], data, data.length);\n      }\n    }\n  }\n  mergeNewSamples(\n    undefined,\n    this._times,\n    this._values,\n    data,\n    this._packedLength,\n  );\n  this._updateTableLength = true;\n  this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Retrieves the time of the provided sample associated with the index. A negative index accesses the list of samples in reverse order.\n *\n * @param {number} index The index of samples list.\n * @returns {JulianDate | undefined} The JulianDate time of the sample, or undefined if failed.\n */\nSampledProperty.prototype.getSample = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  const times = this._times;\n  const len = times.length;\n  if (!defined(len)) {\n    return undefined;\n  }\n\n  if (index < 0) {\n    index += len;\n  }\n\n  return times[index];\n};\n\n/**\n * Adds samples as a single packed array where each new sample is represented as a date,\n * followed by the packed representation of the corresponding value and derivatives.\n *\n * @param {number[]} packedSamples The array of packed samples.\n * @param {JulianDate} [epoch] If any of the dates in packedSamples are numbers, they are considered an offset from this epoch, in seconds.\n */\nSampledProperty.prototype.addSamplesPackedArray = function (\n  packedSamples,\n  epoch,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"packedSamples\", packedSamples);\n  //>>includeEnd('debug');\n\n  mergeNewSamples(\n    epoch,\n    this._times,\n    this._values,\n    packedSamples,\n    this._packedLength,\n  );\n  this._updateTableLength = true;\n  this._definitionChanged.raiseEvent(this);\n};\n\n/**\n * Removes a sample at the given time, if present.\n *\n * @param {JulianDate} time The sample time.\n * @returns {boolean} <code>true</code> if a sample at time was removed, <code>false</code> otherwise.\n */\nSampledProperty.prototype.removeSample = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n  //>>includeEnd('debug');\n\n  const index = binarySearch(this._times, time, JulianDate.compare);\n  if (index < 0) {\n    return false;\n  }\n  removeSamples(this, index, 1);\n  return true;\n};\n\nfunction removeSamples(property, startIndex, numberToRemove) {\n  const packedLength = property._packedLength;\n  property._times.splice(startIndex, numberToRemove);\n  property._values.splice(\n    startIndex * packedLength,\n    numberToRemove * packedLength,\n  );\n  property._updateTableLength = true;\n  property._definitionChanged.raiseEvent(property);\n}\n\n/**\n * Removes all samples for the given time interval.\n *\n * @param {TimeInterval} time The time interval for which to remove all samples.\n */\nSampledProperty.prototype.removeSamples = function (timeInterval) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"timeInterval\", timeInterval);\n  //>>includeEnd('debug');\n\n  const times = this._times;\n  let startIndex = binarySearch(times, timeInterval.start, JulianDate.compare);\n  if (startIndex < 0) {\n    startIndex = ~startIndex;\n  } else if (!timeInterval.isStartIncluded) {\n    ++startIndex;\n  }\n  let stopIndex = binarySearch(times, timeInterval.stop, JulianDate.compare);\n  if (stopIndex < 0) {\n    stopIndex = ~stopIndex;\n  } else if (timeInterval.isStopIncluded) {\n    ++stopIndex;\n  }\n\n  removeSamples(this, startIndex, stopIndex - startIndex);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nSampledProperty.prototype.equals = function (other) {\n  if (this === other) {\n    return true;\n  }\n  if (!defined(other)) {\n    return false;\n  }\n\n  if (\n    this._type !== other._type || //\n    this._interpolationDegree !== other._interpolationDegree || //\n    this._interpolationAlgorithm !== other._interpolationAlgorithm\n  ) {\n    return false;\n  }\n\n  const derivativeTypes = this._derivativeTypes;\n  const hasDerivatives = defined(derivativeTypes);\n  const otherDerivativeTypes = other._derivativeTypes;\n  const otherHasDerivatives = defined(otherDerivativeTypes);\n  if (hasDerivatives !== otherHasDerivatives) {\n    return false;\n  }\n\n  let i;\n  let length;\n  if (hasDerivatives) {\n    length = derivativeTypes.length;\n    if (length !== otherDerivativeTypes.length) {\n      return false;\n    }\n\n    for (i = 0; i < length; i++) {\n      if (derivativeTypes[i] !== otherDerivativeTypes[i]) {\n        return false;\n      }\n    }\n  }\n\n  const times = this._times;\n  const otherTimes = other._times;\n  length = times.length;\n\n  if (length !== otherTimes.length) {\n    return false;\n  }\n\n  for (i = 0; i < length; i++) {\n    if (!JulianDate.equals(times[i], otherTimes[i])) {\n      return false;\n    }\n  }\n\n  const values = this._values;\n  const otherValues = other._values;\n  length = values.length;\n\n  //Since time lengths are equal, values length and other length are guaranteed to be equal.\n  for (i = 0; i < length; i++) {\n    if (values[i] !== otherValues[i]) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n//Exposed for testing.\nSampledProperty._mergeNewSamples = mergeNewSamples;\nexport default SampledProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Property from \"./Property.js\";\n\n/**\n * This is a temporary class for scaling position properties to the ellipsoid surface.\n * It will go away or be refactored to support data with arbitrary height references.\n * @private\n */\nfunction ScaledPositionProperty(value) {\n  this._definitionChanged = new Event();\n  this._value = undefined;\n  this._removeSubscription = undefined;\n  this.setValue(value);\n}\n\nObject.defineProperties(ScaledPositionProperty.prototype, {\n  isConstant: {\n    get: function () {\n      return Property.isConstant(this._value);\n    },\n  },\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  referenceFrame: {\n    get: function () {\n      return defined(this._value)\n        ? this._value.referenceFrame\n        : ReferenceFrame.FIXED;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\nScaledPositionProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\nScaledPositionProperty.prototype.setValue = function (value) {\n  if (this._value !== value) {\n    this._value = value;\n\n    if (defined(this._removeSubscription)) {\n      this._removeSubscription();\n      this._removeSubscription = undefined;\n    }\n\n    if (defined(value)) {\n      this._removeSubscription = value.definitionChanged.addEventListener(\n        this._raiseDefinitionChanged,\n        this,\n      );\n    }\n    this._definitionChanged.raiseEvent(this);\n  }\n};\n\nScaledPositionProperty.prototype.getValueInReferenceFrame = function (\n  time,\n  referenceFrame,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(time)) {\n    throw new DeveloperError(\"time is required.\");\n  }\n  if (!defined(referenceFrame)) {\n    throw new DeveloperError(\"referenceFrame is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(this._value)) {\n    return undefined;\n  }\n\n  result = this._value.getValueInReferenceFrame(time, referenceFrame, result);\n  return defined(result)\n    ? Ellipsoid.default.scaleToGeodeticSurface(result, result)\n    : undefined;\n};\n\nScaledPositionProperty.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (other instanceof ScaledPositionProperty && this._value === other._value)\n  );\n};\n\nScaledPositionProperty.prototype._raiseDefinitionChanged = function () {\n  this._definitionChanged.raiseEvent(this);\n};\nexport default ScaledPositionProperty;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nconst colorScratch = new Color();\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\nconst defaultDistanceDisplayCondition = new DistanceDisplayCondition();\nconst defaultOffset = Cartesian3.ZERO;\nconst offsetScratch = new Cartesian3();\n\nfunction Batch(\n  primitives,\n  translucent,\n  appearanceType,\n  depthFailAppearanceType,\n  depthFailMaterialProperty,\n  closed,\n  shadows,\n) {\n  this.translucent = translucent;\n  this.appearanceType = appearanceType;\n  this.depthFailAppearanceType = depthFailAppearanceType;\n  this.depthFailMaterialProperty = depthFailMaterialProperty;\n  this.depthFailMaterial = undefined;\n  this.closed = closed;\n  this.shadows = shadows;\n  this.primitives = primitives;\n  this.createPrimitive = false;\n  this.waitingOnCreate = false;\n  this.primitive = undefined;\n  this.oldPrimitive = undefined;\n  this.geometry = new AssociativeArray();\n  this.updaters = new AssociativeArray();\n  this.updatersWithAttributes = new AssociativeArray();\n  this.attributes = new AssociativeArray();\n  this.subscriptions = new AssociativeArray();\n  this.showsUpdated = new AssociativeArray();\n  this.itemsToRemove = [];\n  this.invalidated = false;\n\n  let removeMaterialSubscription;\n  if (defined(depthFailMaterialProperty)) {\n    removeMaterialSubscription =\n      depthFailMaterialProperty.definitionChanged.addEventListener(\n        Batch.prototype.onMaterialChanged,\n        this,\n      );\n  }\n  this.removeMaterialSubscription = removeMaterialSubscription;\n}\n\nBatch.prototype.onMaterialChanged = function () {\n  this.invalidated = true;\n};\n\nBatch.prototype.isMaterial = function (updater) {\n  const material = this.depthFailMaterialProperty;\n  const updaterMaterial = updater.depthFailMaterialProperty;\n  if (updaterMaterial === material) {\n    return true;\n  }\n  if (defined(material)) {\n    return material.equals(updaterMaterial);\n  }\n  return false;\n};\n\nBatch.prototype.add = function (updater, instance) {\n  const id = updater.id;\n  this.createPrimitive = true;\n  this.geometry.set(id, instance);\n  this.updaters.set(id, updater);\n  if (\n    !updater.hasConstantFill ||\n    !updater.fillMaterialProperty.isConstant ||\n    !Property.isConstant(updater.distanceDisplayConditionProperty) ||\n    !Property.isConstant(updater.terrainOffsetProperty)\n  ) {\n    this.updatersWithAttributes.set(id, updater);\n  } else {\n    const that = this;\n    this.subscriptions.set(\n      id,\n      updater.entity.definitionChanged.addEventListener(\n        function (entity, propertyName, newValue, oldValue) {\n          if (propertyName === \"isShowing\") {\n            that.showsUpdated.set(updater.id, updater);\n          }\n        },\n      ),\n    );\n  }\n};\n\nBatch.prototype.remove = function (updater) {\n  const id = updater.id;\n  this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n  if (this.updaters.remove(id)) {\n    this.updatersWithAttributes.remove(id);\n    const unsubscribe = this.subscriptions.get(id);\n    if (defined(unsubscribe)) {\n      unsubscribe();\n      this.subscriptions.remove(id);\n      this.showsUpdated.remove(id);\n    }\n    return true;\n  }\n  return false;\n};\n\nBatch.prototype.update = function (time) {\n  let isUpdated = true;\n  let removedCount = 0;\n  let primitive = this.primitive;\n  const primitives = this.primitives;\n  let i;\n\n  if (this.createPrimitive) {\n    const geometries = this.geometry.values;\n    const geometriesLength = geometries.length;\n    if (geometriesLength > 0) {\n      if (defined(primitive)) {\n        if (!defined(this.oldPrimitive)) {\n          this.oldPrimitive = primitive;\n        } else {\n          primitives.remove(primitive);\n        }\n      }\n\n      let depthFailAppearance;\n      if (defined(this.depthFailAppearanceType)) {\n        if (defined(this.depthFailMaterialProperty)) {\n          this.depthFailMaterial = MaterialProperty.getValue(\n            time,\n            this.depthFailMaterialProperty,\n            this.depthFailMaterial,\n          );\n        }\n        depthFailAppearance = new this.depthFailAppearanceType({\n          material: this.depthFailMaterial,\n          translucent: this.translucent,\n          closed: this.closed,\n        });\n      }\n\n      primitive = new Primitive({\n        show: false,\n        asynchronous: true,\n        geometryInstances: geometries.slice(),\n        appearance: new this.appearanceType({\n          translucent: this.translucent,\n          closed: this.closed,\n        }),\n        depthFailAppearance: depthFailAppearance,\n        shadows: this.shadows,\n      });\n      primitives.add(primitive);\n      isUpdated = false;\n    } else {\n      if (defined(primitive)) {\n        primitives.remove(primitive);\n        primitive = undefined;\n      }\n      const oldPrimitive = this.oldPrimitive;\n      if (defined(oldPrimitive)) {\n        primitives.remove(oldPrimitive);\n        this.oldPrimitive = undefined;\n      }\n    }\n\n    this.attributes.removeAll();\n    this.primitive = primitive;\n    this.createPrimitive = false;\n    this.waitingOnCreate = true;\n  } else if (defined(primitive) && primitive.ready) {\n    primitive.show = true;\n    if (defined(this.oldPrimitive)) {\n      primitives.remove(this.oldPrimitive);\n      this.oldPrimitive = undefined;\n    }\n\n    if (\n      defined(this.depthFailAppearanceType) &&\n      !(this.depthFailMaterialProperty instanceof ColorMaterialProperty)\n    ) {\n      this.depthFailMaterial = MaterialProperty.getValue(\n        time,\n        this.depthFailMaterialProperty,\n        this.depthFailMaterial,\n      );\n      this.primitive.depthFailAppearance.material = this.depthFailMaterial;\n    }\n\n    const updatersWithAttributes = this.updatersWithAttributes.values;\n    const length = updatersWithAttributes.length;\n    const waitingOnCreate = this.waitingOnCreate;\n    for (i = 0; i < length; i++) {\n      const updater = updatersWithAttributes[i];\n      const instance = this.geometry.get(updater.id);\n\n      let attributes = this.attributes.get(instance.id.id);\n      if (!defined(attributes)) {\n        attributes = primitive.getGeometryInstanceAttributes(instance.id);\n        this.attributes.set(instance.id.id, attributes);\n      }\n\n      if (!updater.fillMaterialProperty.isConstant || waitingOnCreate) {\n        const colorProperty = updater.fillMaterialProperty.color;\n        const resultColor = Property.getValueOrDefault(\n          colorProperty,\n          time,\n          Color.WHITE,\n          colorScratch,\n        );\n        if (!Color.equals(attributes._lastColor, resultColor)) {\n          attributes._lastColor = Color.clone(\n            resultColor,\n            attributes._lastColor,\n          );\n          attributes.color = ColorGeometryInstanceAttribute.toValue(\n            resultColor,\n            attributes.color,\n          );\n          if (\n            (this.translucent && attributes.color[3] === 255) ||\n            (!this.translucent && attributes.color[3] !== 255)\n          ) {\n            this.itemsToRemove[removedCount++] = updater;\n          }\n        }\n      }\n\n      if (\n        defined(this.depthFailAppearanceType) &&\n        updater.depthFailMaterialProperty instanceof ColorMaterialProperty &&\n        (!updater.depthFailMaterialProperty.isConstant || waitingOnCreate)\n      ) {\n        const depthFailColorProperty = updater.depthFailMaterialProperty.color;\n        const depthColor = Property.getValueOrDefault(\n          depthFailColorProperty,\n          time,\n          Color.WHITE,\n          colorScratch,\n        );\n        if (!Color.equals(attributes._lastDepthFailColor, depthColor)) {\n          attributes._lastDepthFailColor = Color.clone(\n            depthColor,\n            attributes._lastDepthFailColor,\n          );\n          attributes.depthFailColor = ColorGeometryInstanceAttribute.toValue(\n            depthColor,\n            attributes.depthFailColor,\n          );\n        }\n      }\n\n      const show =\n        updater.entity.isShowing &&\n        (updater.hasConstantFill || updater.isFilled(time));\n      const currentShow = attributes.show[0] === 1;\n      if (show !== currentShow) {\n        attributes.show = ShowGeometryInstanceAttribute.toValue(\n          show,\n          attributes.show,\n        );\n      }\n\n      const distanceDisplayConditionProperty =\n        updater.distanceDisplayConditionProperty;\n      if (!Property.isConstant(distanceDisplayConditionProperty)) {\n        const distanceDisplayCondition = Property.getValueOrDefault(\n          distanceDisplayConditionProperty,\n          time,\n          defaultDistanceDisplayCondition,\n          distanceDisplayConditionScratch,\n        );\n        if (\n          !DistanceDisplayCondition.equals(\n            distanceDisplayCondition,\n            attributes._lastDistanceDisplayCondition,\n          )\n        ) {\n          attributes._lastDistanceDisplayCondition =\n            DistanceDisplayCondition.clone(\n              distanceDisplayCondition,\n              attributes._lastDistanceDisplayCondition,\n            );\n          attributes.distanceDisplayCondition =\n            DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n              distanceDisplayCondition,\n              attributes.distanceDisplayCondition,\n            );\n        }\n      }\n\n      const offsetProperty = updater.terrainOffsetProperty;\n      if (!Property.isConstant(offsetProperty)) {\n        const offset = Property.getValueOrDefault(\n          offsetProperty,\n          time,\n          defaultOffset,\n          offsetScratch,\n        );\n        if (!Cartesian3.equals(offset, attributes._lastOffset)) {\n          attributes._lastOffset = Cartesian3.clone(\n            offset,\n            attributes._lastOffset,\n          );\n          attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n            offset,\n            attributes.offset,\n          );\n        }\n      }\n    }\n\n    this.updateShows(primitive);\n    this.waitingOnCreate = false;\n  } else if (defined(primitive) && !primitive.ready) {\n    isUpdated = false;\n  }\n  this.itemsToRemove.length = removedCount;\n  return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n  const showsUpdated = this.showsUpdated.values;\n  const length = showsUpdated.length;\n  for (let i = 0; i < length; i++) {\n    const updater = showsUpdated[i];\n    const instance = this.geometry.get(updater.id);\n\n    let attributes = this.attributes.get(instance.id.id);\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(instance.id);\n      this.attributes.set(instance.id.id, attributes);\n    }\n\n    const show = updater.entity.isShowing;\n    const currentShow = attributes.show[0] === 1;\n    if (show !== currentShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(\n        show,\n        attributes.show,\n      );\n      instance.attributes.show.value[0] = attributes.show[0];\n    }\n  }\n  this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n  return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n  const primitive = this.primitive;\n  if (!primitive.ready) {\n    return BoundingSphereState.PENDING;\n  }\n  const attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n  if (\n    !defined(attributes) ||\n    !defined(attributes.boundingSphere) || //\n    (defined(attributes.show) && attributes.show[0] === 0)\n  ) {\n    return BoundingSphereState.FAILED;\n  }\n  attributes.boundingSphere.clone(result);\n  return BoundingSphereState.DONE;\n};\n\nBatch.prototype.destroy = function () {\n  const primitive = this.primitive;\n  const primitives = this.primitives;\n  if (defined(primitive)) {\n    primitives.remove(primitive);\n  }\n  const oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    primitives.remove(oldPrimitive);\n  }\n  if (defined(this.removeMaterialSubscription)) {\n    this.removeMaterialSubscription();\n  }\n};\n\n/**\n * @private\n */\nfunction StaticGeometryColorBatch(\n  primitives,\n  appearanceType,\n  depthFailAppearanceType,\n  closed,\n  shadows,\n) {\n  this._solidItems = [];\n  this._translucentItems = [];\n  this._primitives = primitives;\n  this._appearanceType = appearanceType;\n  this._depthFailAppearanceType = depthFailAppearanceType;\n  this._closed = closed;\n  this._shadows = shadows;\n}\n\nStaticGeometryColorBatch.prototype.add = function (time, updater) {\n  let items;\n  let translucent;\n  const instance = updater.createFillGeometryInstance(time);\n  if (instance.attributes.color.value[3] === 255) {\n    items = this._solidItems;\n    translucent = false;\n  } else {\n    items = this._translucentItems;\n    translucent = true;\n  }\n\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    const item = items[i];\n    if (item.isMaterial(updater)) {\n      item.add(updater, instance);\n      return;\n    }\n  }\n  const batch = new Batch(\n    this._primitives,\n    translucent,\n    this._appearanceType,\n    this._depthFailAppearanceType,\n    updater.depthFailMaterialProperty,\n    this._closed,\n    this._shadows,\n  );\n  batch.add(updater, instance);\n  items.push(batch);\n};\n\nfunction removeItem(items, updater) {\n  const length = items.length;\n  for (let i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.remove(updater)) {\n      if (item.updaters.length === 0) {\n        items.splice(i, 1);\n        item.destroy();\n      }\n      return true;\n    }\n  }\n  return false;\n}\n\nStaticGeometryColorBatch.prototype.remove = function (updater) {\n  if (!removeItem(this._solidItems, updater)) {\n    removeItem(this._translucentItems, updater);\n  }\n};\n\nfunction moveItems(batch, items, time) {\n  let itemsMoved = false;\n  const length = items.length;\n  for (let i = 0; i < length; ++i) {\n    const item = items[i];\n    const itemsToRemove = item.itemsToRemove;\n    const itemsToMoveLength = itemsToRemove.length;\n    if (itemsToMoveLength > 0) {\n      for (i = 0; i < itemsToMoveLength; i++) {\n        const updater = itemsToRemove[i];\n        item.remove(updater);\n        batch.add(time, updater);\n        itemsMoved = true;\n      }\n    }\n  }\n  return itemsMoved;\n}\n\nfunction updateItems(batch, items, time, isUpdated) {\n  let length = items.length;\n  let i;\n  for (i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.invalidated) {\n      items.splice(i, 1);\n      const updaters = item.updaters.values;\n      const updatersLength = updaters.length;\n      for (let h = 0; h < updatersLength; h++) {\n        batch.add(time, updaters[h]);\n      }\n      item.destroy();\n    }\n  }\n\n  length = items.length;\n  for (i = 0; i < length; ++i) {\n    isUpdated = items[i].update(time) && isUpdated;\n  }\n  return isUpdated;\n}\n\nStaticGeometryColorBatch.prototype.update = function (time) {\n  //Perform initial update\n  let isUpdated = updateItems(this, this._solidItems, time, true);\n  isUpdated =\n    updateItems(this, this._translucentItems, time, isUpdated) && isUpdated;\n\n  //If any items swapped between solid/translucent, we need to\n  //move them between batches\n  const solidsMoved = moveItems(this, this._solidItems, time);\n  const translucentsMoved = moveItems(this, this._translucentItems, time);\n\n  //If we moved anything around, we need to re-build the primitive\n  if (solidsMoved || translucentsMoved) {\n    isUpdated =\n      updateItems(this, this._solidItems, time, isUpdated) && isUpdated;\n    isUpdated =\n      updateItems(this, this._translucentItems, time, isUpdated) && isUpdated;\n  }\n\n  return isUpdated;\n};\n\nfunction getBoundingSphere(items, updater, result) {\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    const item = items[i];\n    if (item.contains(updater)) {\n      return item.getBoundingSphere(updater, result);\n    }\n  }\n  return BoundingSphereState.FAILED;\n}\n\nStaticGeometryColorBatch.prototype.getBoundingSphere = function (\n  updater,\n  result,\n) {\n  const boundingSphere = getBoundingSphere(this._solidItems, updater, result);\n  if (boundingSphere === BoundingSphereState.FAILED) {\n    return getBoundingSphere(this._translucentItems, updater, result);\n  }\n  return boundingSphere;\n};\n\nfunction removeAllPrimitives(items) {\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    items[i].destroy();\n  }\n  items.length = 0;\n}\n\nStaticGeometryColorBatch.prototype.removeAllPrimitives = function () {\n  removeAllPrimitives(this._solidItems);\n  removeAllPrimitives(this._translucentItems);\n};\nexport default StaticGeometryColorBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\nconst defaultDistanceDisplayCondition = new DistanceDisplayCondition();\nconst defaultOffset = Cartesian3.ZERO;\nconst offsetScratch = new Cartesian3();\n\nfunction Batch(\n  primitives,\n  appearanceType,\n  materialProperty,\n  depthFailAppearanceType,\n  depthFailMaterialProperty,\n  closed,\n  shadows,\n) {\n  this.primitives = primitives;\n  this.appearanceType = appearanceType;\n  this.materialProperty = materialProperty;\n  this.depthFailAppearanceType = depthFailAppearanceType;\n  this.depthFailMaterialProperty = depthFailMaterialProperty;\n  this.closed = closed;\n  this.shadows = shadows;\n  this.updaters = new AssociativeArray();\n  this.createPrimitive = true;\n  this.primitive = undefined;\n  this.oldPrimitive = undefined;\n  this.geometry = new AssociativeArray();\n  this.material = undefined;\n  this.depthFailMaterial = undefined;\n  this.updatersWithAttributes = new AssociativeArray();\n  this.attributes = new AssociativeArray();\n  this.invalidated = false;\n  this.removeMaterialSubscription =\n    materialProperty.definitionChanged.addEventListener(\n      Batch.prototype.onMaterialChanged,\n      this,\n    );\n  this.subscriptions = new AssociativeArray();\n  this.showsUpdated = new AssociativeArray();\n}\n\nBatch.prototype.onMaterialChanged = function () {\n  this.invalidated = true;\n};\n\nBatch.prototype.isMaterial = function (updater) {\n  const material = this.materialProperty;\n  const updaterMaterial = updater.fillMaterialProperty;\n  const depthFailMaterial = this.depthFailMaterialProperty;\n  const updaterDepthFailMaterial = updater.depthFailMaterialProperty;\n\n  if (\n    updaterMaterial === material &&\n    updaterDepthFailMaterial === depthFailMaterial\n  ) {\n    return true;\n  }\n  let equals = defined(material) && material.equals(updaterMaterial);\n  equals =\n    ((!defined(depthFailMaterial) && !defined(updaterDepthFailMaterial)) ||\n      (defined(depthFailMaterial) &&\n        depthFailMaterial.equals(updaterDepthFailMaterial))) &&\n    equals;\n  return equals;\n};\n\nBatch.prototype.add = function (time, updater) {\n  const id = updater.id;\n  this.updaters.set(id, updater);\n  this.geometry.set(id, updater.createFillGeometryInstance(time));\n  if (\n    !updater.hasConstantFill ||\n    !updater.fillMaterialProperty.isConstant ||\n    !Property.isConstant(updater.distanceDisplayConditionProperty) ||\n    !Property.isConstant(updater.terrainOffsetProperty)\n  ) {\n    this.updatersWithAttributes.set(id, updater);\n  } else {\n    const that = this;\n    this.subscriptions.set(\n      id,\n      updater.entity.definitionChanged.addEventListener(\n        function (entity, propertyName, newValue, oldValue) {\n          if (propertyName === \"isShowing\") {\n            that.showsUpdated.set(updater.id, updater);\n          }\n        },\n      ),\n    );\n  }\n  this.createPrimitive = true;\n};\n\nBatch.prototype.remove = function (updater) {\n  const id = updater.id;\n  this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n  if (this.updaters.remove(id)) {\n    this.updatersWithAttributes.remove(id);\n    const unsubscribe = this.subscriptions.get(id);\n    if (defined(unsubscribe)) {\n      unsubscribe();\n      this.subscriptions.remove(id);\n      this.showsUpdated.remove(id);\n    }\n    return true;\n  }\n  return false;\n};\n\nconst colorScratch = new Color();\n\nBatch.prototype.update = function (time) {\n  let isUpdated = true;\n  let primitive = this.primitive;\n  const primitives = this.primitives;\n  const geometries = this.geometry.values;\n  let i;\n\n  if (this.createPrimitive) {\n    const geometriesLength = geometries.length;\n    if (geometriesLength > 0) {\n      if (defined(primitive)) {\n        if (!defined(this.oldPrimitive)) {\n          this.oldPrimitive = primitive;\n        } else {\n          primitives.remove(primitive);\n        }\n      }\n\n      this.material = MaterialProperty.getValue(\n        time,\n        this.materialProperty,\n        this.material,\n      );\n\n      let depthFailAppearance;\n      if (defined(this.depthFailMaterialProperty)) {\n        this.depthFailMaterial = MaterialProperty.getValue(\n          time,\n          this.depthFailMaterialProperty,\n          this.depthFailMaterial,\n        );\n        depthFailAppearance = new this.depthFailAppearanceType({\n          material: this.depthFailMaterial,\n          translucent: this.depthFailMaterial.isTranslucent(),\n          closed: this.closed,\n        });\n      }\n\n      primitive = new Primitive({\n        show: false,\n        asynchronous: true,\n        geometryInstances: geometries.slice(),\n        appearance: new this.appearanceType({\n          material: this.material,\n          translucent: this.material.isTranslucent(),\n          closed: this.closed,\n        }),\n        depthFailAppearance: depthFailAppearance,\n        shadows: this.shadows,\n      });\n\n      primitives.add(primitive);\n      isUpdated = false;\n    } else {\n      if (defined(primitive)) {\n        primitives.remove(primitive);\n        primitive = undefined;\n      }\n      const oldPrimitive = this.oldPrimitive;\n      if (defined(oldPrimitive)) {\n        primitives.remove(oldPrimitive);\n        this.oldPrimitive = undefined;\n      }\n    }\n\n    this.attributes.removeAll();\n    this.primitive = primitive;\n    this.createPrimitive = false;\n  } else if (defined(primitive) && primitive.ready) {\n    primitive.show = true;\n    if (defined(this.oldPrimitive)) {\n      primitives.remove(this.oldPrimitive);\n      this.oldPrimitive = undefined;\n    }\n\n    this.material = MaterialProperty.getValue(\n      time,\n      this.materialProperty,\n      this.material,\n    );\n    this.primitive.appearance.material = this.material;\n\n    if (\n      defined(this.depthFailAppearanceType) &&\n      !(this.depthFailMaterialProperty instanceof ColorMaterialProperty)\n    ) {\n      this.depthFailMaterial = MaterialProperty.getValue(\n        time,\n        this.depthFailMaterialProperty,\n        this.depthFailMaterial,\n      );\n      this.primitive.depthFailAppearance.material = this.depthFailMaterial;\n    }\n\n    const updatersWithAttributes = this.updatersWithAttributes.values;\n    const length = updatersWithAttributes.length;\n    for (i = 0; i < length; i++) {\n      const updater = updatersWithAttributes[i];\n      const entity = updater.entity;\n      const instance = this.geometry.get(updater.id);\n\n      let attributes = this.attributes.get(instance.id.id);\n      if (!defined(attributes)) {\n        attributes = primitive.getGeometryInstanceAttributes(instance.id);\n        this.attributes.set(instance.id.id, attributes);\n      }\n\n      if (\n        defined(this.depthFailAppearanceType) &&\n        this.depthFailMaterialProperty instanceof ColorMaterialProperty &&\n        !updater.depthFailMaterialProperty.isConstant\n      ) {\n        const depthFailColorProperty = updater.depthFailMaterialProperty.color;\n        const depthFailColor = Property.getValueOrDefault(\n          depthFailColorProperty,\n          time,\n          Color.WHITE,\n          colorScratch,\n        );\n        if (!Color.equals(attributes._lastDepthFailColor, depthFailColor)) {\n          attributes._lastDepthFailColor = Color.clone(\n            depthFailColor,\n            attributes._lastDepthFailColor,\n          );\n          attributes.depthFailColor = ColorGeometryInstanceAttribute.toValue(\n            depthFailColor,\n            attributes.depthFailColor,\n          );\n        }\n      }\n\n      const show =\n        entity.isShowing && (updater.hasConstantFill || updater.isFilled(time));\n      const currentShow = attributes.show[0] === 1;\n      if (show !== currentShow) {\n        attributes.show = ShowGeometryInstanceAttribute.toValue(\n          show,\n          attributes.show,\n        );\n      }\n\n      const distanceDisplayConditionProperty =\n        updater.distanceDisplayConditionProperty;\n      if (!Property.isConstant(distanceDisplayConditionProperty)) {\n        const distanceDisplayCondition = Property.getValueOrDefault(\n          distanceDisplayConditionProperty,\n          time,\n          defaultDistanceDisplayCondition,\n          distanceDisplayConditionScratch,\n        );\n        if (\n          !DistanceDisplayCondition.equals(\n            distanceDisplayCondition,\n            attributes._lastDistanceDisplayCondition,\n          )\n        ) {\n          attributes._lastDistanceDisplayCondition =\n            DistanceDisplayCondition.clone(\n              distanceDisplayCondition,\n              attributes._lastDistanceDisplayCondition,\n            );\n          attributes.distanceDisplayCondition =\n            DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n              distanceDisplayCondition,\n              attributes.distanceDisplayCondition,\n            );\n        }\n      }\n\n      const offsetProperty = updater.terrainOffsetProperty;\n      if (!Property.isConstant(offsetProperty)) {\n        const offset = Property.getValueOrDefault(\n          offsetProperty,\n          time,\n          defaultOffset,\n          offsetScratch,\n        );\n        if (!Cartesian3.equals(offset, attributes._lastOffset)) {\n          attributes._lastOffset = Cartesian3.clone(\n            offset,\n            attributes._lastOffset,\n          );\n          attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n            offset,\n            attributes.offset,\n          );\n        }\n      }\n    }\n\n    this.updateShows(primitive);\n  } else if (defined(primitive) && !primitive.ready) {\n    isUpdated = false;\n  }\n  return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n  const showsUpdated = this.showsUpdated.values;\n  const length = showsUpdated.length;\n  for (let i = 0; i < length; i++) {\n    const updater = showsUpdated[i];\n    const entity = updater.entity;\n    const instance = this.geometry.get(updater.id);\n\n    let attributes = this.attributes.get(instance.id.id);\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(instance.id);\n      this.attributes.set(instance.id.id, attributes);\n    }\n\n    const show = entity.isShowing;\n    const currentShow = attributes.show[0] === 1;\n    if (show !== currentShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(\n        show,\n        attributes.show,\n      );\n      instance.attributes.show.value[0] = attributes.show[0];\n    }\n  }\n  this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n  return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n  const primitive = this.primitive;\n  if (!primitive.ready) {\n    return BoundingSphereState.PENDING;\n  }\n  const attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n  if (\n    !defined(attributes) ||\n    !defined(attributes.boundingSphere) ||\n    (defined(attributes.show) && attributes.show[0] === 0)\n  ) {\n    return BoundingSphereState.FAILED;\n  }\n  attributes.boundingSphere.clone(result);\n  return BoundingSphereState.DONE;\n};\n\nBatch.prototype.destroy = function () {\n  const primitive = this.primitive;\n  const primitives = this.primitives;\n  if (defined(primitive)) {\n    primitives.remove(primitive);\n  }\n  const oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    primitives.remove(oldPrimitive);\n  }\n  this.removeMaterialSubscription();\n};\n\n/**\n * @private\n */\nfunction StaticGeometryPerMaterialBatch(\n  primitives,\n  appearanceType,\n  depthFailAppearanceType,\n  closed,\n  shadows,\n) {\n  this._items = [];\n  this._primitives = primitives;\n  this._appearanceType = appearanceType;\n  this._depthFailAppearanceType = depthFailAppearanceType;\n  this._closed = closed;\n  this._shadows = shadows;\n}\n\nStaticGeometryPerMaterialBatch.prototype.add = function (time, updater) {\n  const items = this._items;\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    const item = items[i];\n    if (item.isMaterial(updater)) {\n      item.add(time, updater);\n      return;\n    }\n  }\n  const batch = new Batch(\n    this._primitives,\n    this._appearanceType,\n    updater.fillMaterialProperty,\n    this._depthFailAppearanceType,\n    updater.depthFailMaterialProperty,\n    this._closed,\n    this._shadows,\n  );\n  batch.add(time, updater);\n  items.push(batch);\n};\n\nStaticGeometryPerMaterialBatch.prototype.remove = function (updater) {\n  const items = this._items;\n  const length = items.length;\n  for (let i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.remove(updater)) {\n      if (item.updaters.length === 0) {\n        items.splice(i, 1);\n        item.destroy();\n      }\n      break;\n    }\n  }\n};\n\nStaticGeometryPerMaterialBatch.prototype.update = function (time) {\n  let i;\n  const items = this._items;\n  const length = items.length;\n\n  for (i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.invalidated) {\n      items.splice(i, 1);\n      const updaters = item.updaters.values;\n      const updatersLength = updaters.length;\n      for (let h = 0; h < updatersLength; h++) {\n        this.add(time, updaters[h]);\n      }\n      item.destroy();\n    }\n  }\n\n  let isUpdated = true;\n  for (i = 0; i < items.length; i++) {\n    isUpdated = items[i].update(time) && isUpdated;\n  }\n  return isUpdated;\n};\n\nStaticGeometryPerMaterialBatch.prototype.getBoundingSphere = function (\n  updater,\n  result,\n) {\n  const items = this._items;\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    const item = items[i];\n    if (item.contains(updater)) {\n      return item.getBoundingSphere(updater, result);\n    }\n  }\n  return BoundingSphereState.FAILED;\n};\n\nStaticGeometryPerMaterialBatch.prototype.removeAllPrimitives = function () {\n  const items = this._items;\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    items[i].destroy();\n  }\n  this._items.length = 0;\n};\nexport default StaticGeometryPerMaterialBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\nimport RectangleCollisionChecker from \"../Core/RectangleCollisionChecker.js\";\n\nconst colorScratch = new Color();\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\nconst defaultDistanceDisplayCondition = new DistanceDisplayCondition();\n\nfunction Batch(primitives, classificationType, color, zIndex) {\n  this.primitives = primitives;\n  this.zIndex = zIndex;\n  this.classificationType = classificationType;\n  this.color = color;\n  this.createPrimitive = false;\n  this.waitingOnCreate = false;\n  this.primitive = undefined;\n  this.oldPrimitive = undefined;\n  this.geometry = new AssociativeArray();\n  this.updaters = new AssociativeArray();\n  this.updatersWithAttributes = new AssociativeArray();\n  this.attributes = new AssociativeArray();\n  this.subscriptions = new AssociativeArray();\n  this.showsUpdated = new AssociativeArray();\n  this.itemsToRemove = [];\n  this.isDirty = false;\n  this.rectangleCollisionCheck = new RectangleCollisionChecker();\n}\n\nBatch.prototype.overlapping = function (rectangle) {\n  return this.rectangleCollisionCheck.collides(rectangle);\n};\n\nBatch.prototype.add = function (updater, instance) {\n  const id = updater.id;\n  this.createPrimitive = true;\n  this.geometry.set(id, instance);\n  this.updaters.set(id, updater);\n  this.rectangleCollisionCheck.insert(id, instance.geometry.rectangle);\n  if (\n    !updater.hasConstantFill ||\n    !updater.fillMaterialProperty.isConstant ||\n    !Property.isConstant(updater.distanceDisplayConditionProperty)\n  ) {\n    this.updatersWithAttributes.set(id, updater);\n  } else {\n    const that = this;\n    this.subscriptions.set(\n      id,\n      updater.entity.definitionChanged.addEventListener(\n        function (entity, propertyName, newValue, oldValue) {\n          if (propertyName === \"isShowing\") {\n            that.showsUpdated.set(updater.id, updater);\n          }\n        },\n      ),\n    );\n  }\n};\n\nBatch.prototype.remove = function (updater) {\n  const id = updater.id;\n  const geometryInstance = this.geometry.get(id);\n  this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n  if (this.updaters.remove(id)) {\n    this.rectangleCollisionCheck.remove(\n      id,\n      geometryInstance.geometry.rectangle,\n    );\n    this.updatersWithAttributes.remove(id);\n    const unsubscribe = this.subscriptions.get(id);\n    if (defined(unsubscribe)) {\n      unsubscribe();\n      this.subscriptions.remove(id);\n      this.showsUpdated.remove(id);\n    }\n    return true;\n  }\n  return false;\n};\n\nBatch.prototype.update = function (time) {\n  let isUpdated = true;\n  const removedCount = 0;\n  let primitive = this.primitive;\n  const primitives = this.primitives;\n  let i;\n\n  if (this.createPrimitive) {\n    const geometries = this.geometry.values;\n    const geometriesLength = geometries.length;\n    if (geometriesLength > 0) {\n      if (defined(primitive)) {\n        if (!defined(this.oldPrimitive)) {\n          this.oldPrimitive = primitive;\n        } else {\n          primitives.remove(primitive);\n        }\n      }\n\n      primitive = new GroundPrimitive({\n        show: false,\n        asynchronous: true,\n        geometryInstances: geometries.slice(),\n        classificationType: this.classificationType,\n      });\n      primitives.add(primitive, this.zIndex);\n      isUpdated = false;\n    } else {\n      if (defined(primitive)) {\n        primitives.remove(primitive);\n        primitive = undefined;\n      }\n      const oldPrimitive = this.oldPrimitive;\n      if (defined(oldPrimitive)) {\n        primitives.remove(oldPrimitive);\n        this.oldPrimitive = undefined;\n      }\n    }\n\n    this.attributes.removeAll();\n    this.primitive = primitive;\n    this.createPrimitive = false;\n    this.waitingOnCreate = true;\n  } else if (defined(primitive) && primitive.ready) {\n    primitive.show = true;\n    if (defined(this.oldPrimitive)) {\n      primitives.remove(this.oldPrimitive);\n      this.oldPrimitive = undefined;\n    }\n    const updatersWithAttributes = this.updatersWithAttributes.values;\n    const length = updatersWithAttributes.length;\n    const waitingOnCreate = this.waitingOnCreate;\n    for (i = 0; i < length; i++) {\n      const updater = updatersWithAttributes[i];\n      const instance = this.geometry.get(updater.id);\n\n      let attributes = this.attributes.get(instance.id.id);\n      if (!defined(attributes)) {\n        attributes = primitive.getGeometryInstanceAttributes(instance.id);\n        this.attributes.set(instance.id.id, attributes);\n      }\n\n      if (!updater.fillMaterialProperty.isConstant || waitingOnCreate) {\n        const colorProperty = updater.fillMaterialProperty.color;\n        const fillColor = Property.getValueOrDefault(\n          colorProperty,\n          time,\n          Color.WHITE,\n          colorScratch,\n        );\n\n        if (!Color.equals(attributes._lastColor, fillColor)) {\n          attributes._lastColor = Color.clone(fillColor, attributes._lastColor);\n          attributes.color = ColorGeometryInstanceAttribute.toValue(\n            fillColor,\n            attributes.color,\n          );\n        }\n      }\n\n      const show =\n        updater.entity.isShowing &&\n        (updater.hasConstantFill || updater.isFilled(time));\n      const currentShow = attributes.show[0] === 1;\n      if (show !== currentShow) {\n        attributes.show = ShowGeometryInstanceAttribute.toValue(\n          show,\n          attributes.show,\n        );\n      }\n\n      const distanceDisplayConditionProperty =\n        updater.distanceDisplayConditionProperty;\n      if (!Property.isConstant(distanceDisplayConditionProperty)) {\n        const distanceDisplayCondition = Property.getValueOrDefault(\n          distanceDisplayConditionProperty,\n          time,\n          defaultDistanceDisplayCondition,\n          distanceDisplayConditionScratch,\n        );\n        if (\n          !DistanceDisplayCondition.equals(\n            distanceDisplayCondition,\n            attributes._lastDistanceDisplayCondition,\n          )\n        ) {\n          attributes._lastDistanceDisplayCondition =\n            DistanceDisplayCondition.clone(\n              distanceDisplayCondition,\n              attributes._lastDistanceDisplayCondition,\n            );\n          attributes.distanceDisplayCondition =\n            DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n              distanceDisplayCondition,\n              attributes.distanceDisplayCondition,\n            );\n        }\n      }\n    }\n\n    this.updateShows(primitive);\n    this.waitingOnCreate = false;\n  } else if (defined(primitive) && !primitive.ready) {\n    isUpdated = false;\n  }\n  this.itemsToRemove.length = removedCount;\n  return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n  const showsUpdated = this.showsUpdated.values;\n  const length = showsUpdated.length;\n  for (let i = 0; i < length; i++) {\n    const updater = showsUpdated[i];\n    const instance = this.geometry.get(updater.id);\n\n    let attributes = this.attributes.get(instance.id.id);\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(instance.id);\n      this.attributes.set(instance.id.id, attributes);\n    }\n\n    const show = updater.entity.isShowing;\n    const currentShow = attributes.show[0] === 1;\n    if (show !== currentShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(\n        show,\n        attributes.show,\n      );\n      instance.attributes.show.value[0] = attributes.show[0];\n    }\n  }\n  this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n  return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n  const primitive = this.primitive;\n  if (!primitive.ready) {\n    return BoundingSphereState.PENDING;\n  }\n\n  const bs = primitive.getBoundingSphere(updater.entity);\n  if (!defined(bs)) {\n    return BoundingSphereState.FAILED;\n  }\n\n  bs.clone(result);\n  return BoundingSphereState.DONE;\n};\n\nBatch.prototype.removeAllPrimitives = function () {\n  const primitives = this.primitives;\n\n  const primitive = this.primitive;\n  if (defined(primitive)) {\n    primitives.remove(primitive);\n    this.primitive = undefined;\n    this.geometry.removeAll();\n    this.updaters.removeAll();\n  }\n\n  const oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    primitives.remove(oldPrimitive);\n    this.oldPrimitive = undefined;\n  }\n};\n\n/**\n * @private\n */\nfunction StaticGroundGeometryColorBatch(primitives, classificationType) {\n  this._batches = [];\n  this._primitives = primitives;\n  this._classificationType = classificationType;\n}\n\nStaticGroundGeometryColorBatch.prototype.add = function (time, updater) {\n  const instance = updater.createFillGeometryInstance(time);\n  const batches = this._batches;\n  const zIndex = Property.getValueOrDefault(updater.zIndex, 0);\n  let batch;\n  const length = batches.length;\n  for (let i = 0; i < length; ++i) {\n    const item = batches[i];\n    if (\n      item.zIndex === zIndex &&\n      !item.overlapping(instance.geometry.rectangle)\n    ) {\n      batch = item;\n      break;\n    }\n  }\n\n  if (!defined(batch)) {\n    batch = new Batch(\n      this._primitives,\n      this._classificationType,\n      instance.attributes.color.value,\n      zIndex,\n    );\n    batches.push(batch);\n  }\n  batch.add(updater, instance);\n  return batch;\n};\n\nStaticGroundGeometryColorBatch.prototype.remove = function (updater) {\n  const batches = this._batches;\n  const count = batches.length;\n  for (let i = 0; i < count; ++i) {\n    if (batches[i].remove(updater)) {\n      return;\n    }\n  }\n};\n\nStaticGroundGeometryColorBatch.prototype.update = function (time) {\n  let i;\n  let updater;\n\n  //Perform initial update\n  let isUpdated = true;\n  const batches = this._batches;\n  const batchCount = batches.length;\n  for (i = 0; i < batchCount; ++i) {\n    isUpdated = batches[i].update(time) && isUpdated;\n  }\n\n  //If any items swapped between batches we need to move them\n  for (i = 0; i < batchCount; ++i) {\n    const oldBatch = batches[i];\n    const itemsToRemove = oldBatch.itemsToRemove;\n    const itemsToMoveLength = itemsToRemove.length;\n    for (let j = 0; j < itemsToMoveLength; j++) {\n      updater = itemsToRemove[j];\n      oldBatch.remove(updater);\n      const newBatch = this.add(time, updater);\n      oldBatch.isDirty = true;\n      newBatch.isDirty = true;\n    }\n  }\n\n  //If we moved anything around, we need to re-build the primitive and remove empty batches\n  for (i = batchCount - 1; i >= 0; --i) {\n    const batch = batches[i];\n    if (batch.isDirty) {\n      isUpdated = batches[i].update(time) && isUpdated;\n      batch.isDirty = false;\n    }\n    if (batch.geometry.length === 0) {\n      batches.splice(i, 1);\n    }\n  }\n\n  return isUpdated;\n};\n\nStaticGroundGeometryColorBatch.prototype.getBoundingSphere = function (\n  updater,\n  result,\n) {\n  const batches = this._batches;\n  const batchCount = batches.length;\n  for (let i = 0; i < batchCount; ++i) {\n    const batch = batches[i];\n    if (batch.contains(updater)) {\n      return batch.getBoundingSphere(updater, result);\n    }\n  }\n\n  return BoundingSphereState.FAILED;\n};\n\nStaticGroundGeometryColorBatch.prototype.removeAllPrimitives = function () {\n  const batches = this._batches;\n  const batchCount = batches.length;\n  for (let i = 0; i < batchCount; ++i) {\n    batches[i].removeAllPrimitives();\n  }\n};\nexport default StaticGroundGeometryColorBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport RectangleCollisionChecker from \"../Core/RectangleCollisionChecker.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport GroundPrimitive from \"../Scene/GroundPrimitive.js\";\nimport ShadowVolumeAppearance from \"../Scene/ShadowVolumeAppearance.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\nconst defaultDistanceDisplayCondition = new DistanceDisplayCondition();\n\n// Encapsulates a Primitive and all the entities that it represents.\nfunction Batch(\n  primitives,\n  classificationType,\n  appearanceType,\n  materialProperty,\n  usingSphericalTextureCoordinates,\n  zIndex,\n) {\n  this.primitives = primitives; // scene level primitive collection (each Batch manages its own Primitive from this collection)\n  this.classificationType = classificationType;\n  this.appearanceType = appearanceType;\n  this.materialProperty = materialProperty;\n  this.updaters = new AssociativeArray(); // GeometryUpdaters that manage the visual representation of the primitive.\n  this.createPrimitive = true;\n  this.primitive = undefined; // a GroundPrimitive encapsulating all the entities\n  this.oldPrimitive = undefined; // a GroundPrimitive that is being replaced by the current primitive, but will still be shown until the current primitive is ready.\n  this.geometry = new AssociativeArray();\n  this.material = undefined;\n  this.updatersWithAttributes = new AssociativeArray();\n  this.attributes = new AssociativeArray();\n  this.subscriptions = new AssociativeArray();\n  this.showsUpdated = new AssociativeArray();\n  this.usingSphericalTextureCoordinates = usingSphericalTextureCoordinates;\n  this.zIndex = zIndex;\n  this.rectangleCollisionCheck = new RectangleCollisionChecker();\n}\n\nBatch.prototype.overlapping = function (rectangle) {\n  return this.rectangleCollisionCheck.collides(rectangle);\n};\n\n// Check if the given updater's material is compatible with this batch\nBatch.prototype.isMaterial = function (updater) {\n  const material = this.materialProperty;\n  const updaterMaterial = updater.fillMaterialProperty;\n\n  if (\n    updaterMaterial === material ||\n    (updaterMaterial instanceof ColorMaterialProperty &&\n      material instanceof ColorMaterialProperty)\n  ) {\n    return true;\n  }\n  return defined(material) && material.equals(updaterMaterial);\n};\n\n/**\n * Adds an updater to the Batch, and signals for a new Primitive to be created on the next update.\n * @param {JulianDate} time\n * @param {GeometryUpdater} updater\n * @param {GeometryInstance} geometryInstance\n * @private\n */\nBatch.prototype.add = function (time, updater, geometryInstance) {\n  const id = updater.id;\n  this.updaters.set(id, updater);\n  this.geometry.set(id, geometryInstance);\n  this.rectangleCollisionCheck.insert(id, geometryInstance.geometry.rectangle);\n  // Updaters with dynamic attributes must be tracked separately, may exit the batch\n  if (\n    !updater.hasConstantFill ||\n    !updater.fillMaterialProperty.isConstant ||\n    !Property.isConstant(updater.distanceDisplayConditionProperty)\n  ) {\n    this.updatersWithAttributes.set(id, updater);\n  } else {\n    const that = this;\n    // Listen for show changes. These will be synchronized in updateShows.\n    this.subscriptions.set(\n      id,\n      updater.entity.definitionChanged.addEventListener(\n        function (entity, propertyName, newValue, oldValue) {\n          if (propertyName === \"isShowing\") {\n            that.showsUpdated.set(updater.id, updater);\n          }\n        },\n      ),\n    );\n  }\n  this.createPrimitive = true;\n};\n\n/**\n * Remove an updater from the Batch, and potentially signals for a new Primitive to be created\n * on the next update.\n * @param {GeometryUpdater} updater\n * @returns true if the updater was removed, false if it was not found.\n * @private\n */\nBatch.prototype.remove = function (updater) {\n  const id = updater.id;\n  const geometryInstance = this.geometry.get(id);\n  this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n  if (this.updaters.remove(id)) {\n    this.rectangleCollisionCheck.remove(\n      id,\n      geometryInstance.geometry.rectangle,\n    );\n    this.updatersWithAttributes.remove(id);\n    const unsubscribe = this.subscriptions.get(id);\n    if (defined(unsubscribe)) {\n      unsubscribe();\n      this.subscriptions.remove(id);\n    }\n    return true;\n  }\n  return false;\n};\n\n/**\n * Update a Batch, creating a new primitive, if necessary, or swapping out an old primitive for a new one that's ready.\n * A new primitive is created whenever an updater is added to or removed from a Batch.\n * @param {JulianDate} time\n * @returns a boolean indicating whether the Batch was updated.\n * @private\n */\nBatch.prototype.update = function (time) {\n  let isUpdated = true;\n  let primitive = this.primitive;\n  const primitives = this.primitives;\n  const geometries = this.geometry.values;\n  let i;\n\n  if (this.createPrimitive) {\n    const geometriesLength = geometries.length;\n    if (geometriesLength > 0) {\n      if (defined(primitive)) {\n        // Keep a handle to the old primitive so it can be removed when the updated version is ready.\n        if (!defined(this.oldPrimitive)) {\n          this.oldPrimitive = primitive;\n        } else {\n          // For if the new primitive changes again before it is ready.\n          primitives.remove(primitive);\n        }\n      }\n\n      this.material = MaterialProperty.getValue(\n        time,\n        this.materialProperty,\n        this.material,\n      );\n\n      primitive = new GroundPrimitive({\n        show: false,\n        asynchronous: true,\n        geometryInstances: geometries.slice(),\n        appearance: new this.appearanceType({\n          material: this.material,\n          // translucent and closed properties overridden\n        }),\n        classificationType: this.classificationType,\n      });\n\n      primitives.add(primitive, this.zIndex);\n      isUpdated = false;\n    } else {\n      if (defined(primitive)) {\n        primitives.remove(primitive);\n        primitive = undefined;\n      }\n      const oldPrimitive = this.oldPrimitive;\n      if (defined(oldPrimitive)) {\n        primitives.remove(oldPrimitive);\n        this.oldPrimitive = undefined;\n      }\n    }\n\n    this.attributes.removeAll();\n    this.primitive = primitive;\n    this.createPrimitive = false;\n  } else if (defined(primitive) && primitive.ready) {\n    primitive.show = true;\n    if (defined(this.oldPrimitive)) {\n      primitives.remove(this.oldPrimitive);\n      this.oldPrimitive = undefined;\n    }\n\n    this.material = MaterialProperty.getValue(\n      time,\n      this.materialProperty,\n      this.material,\n    );\n    this.primitive.appearance.material = this.material;\n\n    const updatersWithAttributes = this.updatersWithAttributes.values;\n    const length = updatersWithAttributes.length;\n    for (i = 0; i < length; i++) {\n      const updater = updatersWithAttributes[i];\n      const entity = updater.entity;\n      const instance = this.geometry.get(updater.id);\n\n      let attributes = this.attributes.get(instance.id.id);\n      if (!defined(attributes)) {\n        attributes = primitive.getGeometryInstanceAttributes(instance.id);\n        this.attributes.set(instance.id.id, attributes);\n      }\n\n      const show =\n        entity.isShowing && (updater.hasConstantFill || updater.isFilled(time));\n      const currentShow = attributes.show[0] === 1;\n      if (show !== currentShow) {\n        attributes.show = ShowGeometryInstanceAttribute.toValue(\n          show,\n          attributes.show,\n        );\n      }\n\n      const distanceDisplayConditionProperty =\n        updater.distanceDisplayConditionProperty;\n      if (!Property.isConstant(distanceDisplayConditionProperty)) {\n        const distanceDisplayCondition = Property.getValueOrDefault(\n          distanceDisplayConditionProperty,\n          time,\n          defaultDistanceDisplayCondition,\n          distanceDisplayConditionScratch,\n        );\n        if (\n          !DistanceDisplayCondition.equals(\n            distanceDisplayCondition,\n            attributes._lastDistanceDisplayCondition,\n          )\n        ) {\n          attributes._lastDistanceDisplayCondition =\n            DistanceDisplayCondition.clone(\n              distanceDisplayCondition,\n              attributes._lastDistanceDisplayCondition,\n            );\n          attributes.distanceDisplayCondition =\n            DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n              distanceDisplayCondition,\n              attributes.distanceDisplayCondition,\n            );\n        }\n      }\n    }\n\n    this.updateShows(primitive);\n  } else if (defined(primitive) && !primitive.ready) {\n    isUpdated = false;\n  }\n  return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n  const showsUpdated = this.showsUpdated.values;\n  const length = showsUpdated.length;\n  for (let i = 0; i < length; i++) {\n    const updater = showsUpdated[i];\n    const entity = updater.entity;\n    const instance = this.geometry.get(updater.id);\n\n    let attributes = this.attributes.get(instance.id.id);\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(instance.id);\n      this.attributes.set(instance.id.id, attributes);\n    }\n\n    const show = entity.isShowing;\n    const currentShow = attributes.show[0] === 1;\n    if (show !== currentShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(\n        show,\n        attributes.show,\n      );\n      instance.attributes.show.value[0] = attributes.show[0];\n    }\n  }\n  this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n  return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n  const primitive = this.primitive;\n  if (!primitive.ready) {\n    return BoundingSphereState.PENDING;\n  }\n  const attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n  if (\n    !defined(attributes) ||\n    !defined(attributes.boundingSphere) ||\n    (defined(attributes.show) && attributes.show[0] === 0)\n  ) {\n    return BoundingSphereState.FAILED;\n  }\n  attributes.boundingSphere.clone(result);\n  return BoundingSphereState.DONE;\n};\n\n/**\n * Removes a Batch's primitive (and oldPrimitive, if it exists).\n * @private\n */\nBatch.prototype.destroy = function () {\n  const primitive = this.primitive;\n  const primitives = this.primitives;\n  if (defined(primitive)) {\n    primitives.remove(primitive);\n  }\n  const oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    primitives.remove(oldPrimitive);\n  }\n};\n\n/**\n * A container of Batch objects of ground geometry primitives, where a Batch is grouped by material,\n * texture coordinate type, and spatial overlap.\n * @private\n */\nfunction StaticGroundGeometryPerMaterialBatch(\n  primitives,\n  classificationType,\n  appearanceType,\n) {\n  this._items = []; // array of Batch objects, each containing representing a primitive and a set of updaters that manage the visual representation of the primitive.\n  this._primitives = primitives; // scene level primitive collection\n  this._classificationType = classificationType;\n  this._appearanceType = appearanceType;\n}\n\n/**\n * Adds an geometry updater to a Batch. Tries to find a preexisting compatible Batch, or else creates a new Batch.\n * Used by Visualizer classes to add and update (remove->add) a primitive's Updater set.\n *\n * @param {JulianDate} time\n * @param {GeometryUpdater} updater A GeometryUpdater that manages the visual representation of a primitive.\n * @private\n */\nStaticGroundGeometryPerMaterialBatch.prototype.add = function (time, updater) {\n  const items = this._items;\n  const length = items.length;\n  const geometryInstance = updater.createFillGeometryInstance(time);\n  const usingSphericalTextureCoordinates =\n    ShadowVolumeAppearance.shouldUseSphericalCoordinates(\n      geometryInstance.geometry.rectangle,\n    );\n  const zIndex = Property.getValueOrDefault(updater.zIndex, 0);\n  // Check if the Entity represented by the updater can be placed in an existing batch. Requirements:\n  // * compatible material (same material or same color)\n  // * same type of texture coordinates (spherical vs. planar)\n  // * conservatively non-overlapping with any entities in the existing batch\n  for (let i = 0; i < length; ++i) {\n    const item = items[i];\n    if (\n      item.isMaterial(updater) &&\n      item.usingSphericalTextureCoordinates ===\n        usingSphericalTextureCoordinates &&\n      item.zIndex === zIndex &&\n      !item.overlapping(geometryInstance.geometry.rectangle)\n    ) {\n      item.add(time, updater, geometryInstance);\n      return;\n    }\n  }\n  // If a compatible batch wasn't found, create a new batch.\n  const batch = new Batch(\n    this._primitives,\n    this._classificationType,\n    this._appearanceType,\n    updater.fillMaterialProperty,\n    usingSphericalTextureCoordinates,\n    zIndex,\n  );\n  batch.add(time, updater, geometryInstance);\n  items.push(batch);\n};\n\n/**\n * Removes an updater from a Batch. Defers potential deletion until the next update.\n * @param {GeometryUpdater} updater A GeometryUpdater that manages the visual representation of a primitive.\n * @private\n */\nStaticGroundGeometryPerMaterialBatch.prototype.remove = function (updater) {\n  const items = this._items;\n  const length = items.length;\n  for (let i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.remove(updater)) {\n      // If the item is now empty, delete it (deferred until the next update,\n      // in case a new updater is added to the same item first).\n      break;\n    }\n  }\n};\n\n/**\n * Updates all the items (Batches) in the collection, and deletes any that are empty.\n * @param {JulianDate} time\n * @returns a boolean indicating whether any of the items (Batches) were updated.\n * @private\n */\nStaticGroundGeometryPerMaterialBatch.prototype.update = function (time) {\n  let i;\n  const items = this._items;\n  const length = items.length;\n\n  for (i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.updaters.length === 0) {\n      items.splice(i, 1);\n      item.destroy();\n    }\n  }\n\n  let isUpdated = true;\n  for (i = 0; i < items.length; i++) {\n    isUpdated = items[i].update(time) && isUpdated;\n  }\n  return isUpdated;\n};\n\nStaticGroundGeometryPerMaterialBatch.prototype.getBoundingSphere = function (\n  updater,\n  result,\n) {\n  const items = this._items;\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    const item = items[i];\n    if (item.contains(updater)) {\n      return item.getBoundingSphere(updater, result);\n    }\n  }\n  return BoundingSphereState.FAILED;\n};\n\nStaticGroundGeometryPerMaterialBatch.prototype.removeAllPrimitives =\n  function () {\n    const items = this._items;\n    const length = items.length;\n    for (let i = 0; i < length; i++) {\n      items[i].destroy();\n    }\n    this._items.length = 0;\n  };\nexport default StaticGroundGeometryPerMaterialBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport GroundPolylinePrimitive from \"../Scene/GroundPolylinePrimitive.js\";\nimport PolylineColorAppearance from \"../Scene/PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"../Scene/PolylineMaterialAppearance.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport MaterialProperty from \"./MaterialProperty.js\";\nimport Property from \"./Property.js\";\n\nconst scratchColor = new Color();\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\nconst defaultDistanceDisplayCondition = new DistanceDisplayCondition();\n\n// Encapsulates a Primitive and all the entities that it represents.\nfunction Batch(\n  orderedGroundPrimitives,\n  classificationType,\n  materialProperty,\n  zIndex,\n  asynchronous,\n) {\n  let appearanceType;\n  if (materialProperty instanceof ColorMaterialProperty) {\n    appearanceType = PolylineColorAppearance;\n  } else {\n    appearanceType = PolylineMaterialAppearance;\n  }\n\n  this.orderedGroundPrimitives = orderedGroundPrimitives; // scene level primitive collection\n  this.classificationType = classificationType;\n  this.appearanceType = appearanceType;\n  this.materialProperty = materialProperty;\n  this.updaters = new AssociativeArray();\n  this.createPrimitive = true;\n  this.primitive = undefined; // a GroundPolylinePrimitive encapsulating all the entities\n  this.oldPrimitive = undefined;\n  this.geometry = new AssociativeArray();\n  this.material = undefined;\n  this.updatersWithAttributes = new AssociativeArray();\n  this.attributes = new AssociativeArray();\n  this.invalidated = false;\n  this.removeMaterialSubscription =\n    materialProperty.definitionChanged.addEventListener(\n      Batch.prototype.onMaterialChanged,\n      this,\n    );\n  this.subscriptions = new AssociativeArray();\n  this.showsUpdated = new AssociativeArray();\n  this.zIndex = zIndex;\n\n  this._asynchronous = asynchronous;\n}\n\nBatch.prototype.onMaterialChanged = function () {\n  this.invalidated = true;\n};\n\n// Check if the given updater's material is compatible with this batch\nBatch.prototype.isMaterial = function (updater) {\n  const material = this.materialProperty;\n  const updaterMaterial = updater.fillMaterialProperty;\n\n  if (\n    updaterMaterial === material ||\n    (updaterMaterial instanceof ColorMaterialProperty &&\n      material instanceof ColorMaterialProperty)\n  ) {\n    return true;\n  }\n  return defined(material) && material.equals(updaterMaterial);\n};\n\nBatch.prototype.add = function (time, updater, geometryInstance) {\n  const id = updater.id;\n  this.updaters.set(id, updater);\n  this.geometry.set(id, geometryInstance);\n  // Updaters with dynamic attributes must be tracked separately, may exit the batch\n  if (\n    !updater.hasConstantFill ||\n    !updater.fillMaterialProperty.isConstant ||\n    !Property.isConstant(updater.distanceDisplayConditionProperty)\n  ) {\n    this.updatersWithAttributes.set(id, updater);\n  } else {\n    const that = this;\n    // Listen for show changes. These will be synchronized in updateShows.\n    this.subscriptions.set(\n      id,\n      updater.entity.definitionChanged.addEventListener(\n        function (entity, propertyName, newValue, oldValue) {\n          if (propertyName === \"isShowing\") {\n            that.showsUpdated.set(updater.id, updater);\n          }\n        },\n      ),\n    );\n  }\n  this.createPrimitive = true;\n};\n\nBatch.prototype.remove = function (updater) {\n  const id = updater.id;\n  this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n  if (this.updaters.remove(id)) {\n    this.updatersWithAttributes.remove(id);\n    const unsubscribe = this.subscriptions.get(id);\n    if (defined(unsubscribe)) {\n      unsubscribe();\n      this.subscriptions.remove(id);\n    }\n    return true;\n  }\n  return false;\n};\n\nBatch.prototype.update = function (time) {\n  let isUpdated = true;\n  let primitive = this.primitive;\n  const orderedGroundPrimitives = this.orderedGroundPrimitives;\n  const geometries = this.geometry.values;\n  let i;\n\n  if (this.createPrimitive) {\n    const geometriesLength = geometries.length;\n    if (geometriesLength > 0) {\n      if (defined(primitive)) {\n        // Keep a handle to the old primitive so it can be removed when the updated version is ready.\n        if (!defined(this.oldPrimitive)) {\n          this.oldPrimitive = primitive;\n        } else {\n          // For if the new primitive changes again before it is ready.\n          orderedGroundPrimitives.remove(primitive);\n        }\n      }\n\n      primitive = new GroundPolylinePrimitive({\n        show: false,\n        asynchronous: this._asynchronous,\n        geometryInstances: geometries.slice(),\n        appearance: new this.appearanceType(),\n        classificationType: this.classificationType,\n      });\n\n      if (this.appearanceType === PolylineMaterialAppearance) {\n        this.material = MaterialProperty.getValue(\n          time,\n          this.materialProperty,\n          this.material,\n        );\n        primitive.appearance.material = this.material;\n      }\n\n      orderedGroundPrimitives.add(primitive, this.zIndex);\n      isUpdated = false;\n    } else {\n      if (defined(primitive)) {\n        orderedGroundPrimitives.remove(primitive);\n        primitive = undefined;\n      }\n      const oldPrimitive = this.oldPrimitive;\n      if (defined(oldPrimitive)) {\n        orderedGroundPrimitives.remove(oldPrimitive);\n        this.oldPrimitive = undefined;\n      }\n    }\n\n    this.attributes.removeAll();\n    this.primitive = primitive;\n    this.createPrimitive = false;\n  } else if (defined(primitive) && primitive.ready) {\n    primitive.show = true;\n    if (defined(this.oldPrimitive)) {\n      orderedGroundPrimitives.remove(this.oldPrimitive);\n      this.oldPrimitive = undefined;\n    }\n\n    if (this.appearanceType === PolylineMaterialAppearance) {\n      this.material = MaterialProperty.getValue(\n        time,\n        this.materialProperty,\n        this.material,\n      );\n      this.primitive.appearance.material = this.material;\n    }\n    const updatersWithAttributes = this.updatersWithAttributes.values;\n    const length = updatersWithAttributes.length;\n    for (i = 0; i < length; i++) {\n      const updater = updatersWithAttributes[i];\n      const entity = updater.entity;\n      const instance = this.geometry.get(updater.id);\n\n      let attributes = this.attributes.get(instance.id.id);\n      if (!defined(attributes)) {\n        attributes = primitive.getGeometryInstanceAttributes(instance.id);\n        this.attributes.set(instance.id.id, attributes);\n      }\n\n      if (!updater.fillMaterialProperty.isConstant) {\n        const colorProperty = updater.fillMaterialProperty.color;\n        const resultColor = Property.getValueOrDefault(\n          colorProperty,\n          time,\n          Color.WHITE,\n          scratchColor,\n        );\n        if (!Color.equals(attributes._lastColor, resultColor)) {\n          attributes._lastColor = Color.clone(\n            resultColor,\n            attributes._lastColor,\n          );\n          attributes.color = ColorGeometryInstanceAttribute.toValue(\n            resultColor,\n            attributes.color,\n          );\n        }\n      }\n\n      const show =\n        entity.isShowing && (updater.hasConstantFill || updater.isFilled(time));\n      const currentShow = attributes.show[0] === 1;\n      if (show !== currentShow) {\n        attributes.show = ShowGeometryInstanceAttribute.toValue(\n          show,\n          attributes.show,\n        );\n      }\n\n      const distanceDisplayConditionProperty =\n        updater.distanceDisplayConditionProperty;\n      if (!Property.isConstant(distanceDisplayConditionProperty)) {\n        const distanceDisplayCondition = Property.getValueOrDefault(\n          distanceDisplayConditionProperty,\n          time,\n          defaultDistanceDisplayCondition,\n          distanceDisplayConditionScratch,\n        );\n        if (\n          !DistanceDisplayCondition.equals(\n            distanceDisplayCondition,\n            attributes._lastDistanceDisplayCondition,\n          )\n        ) {\n          attributes._lastDistanceDisplayCondition =\n            DistanceDisplayCondition.clone(\n              distanceDisplayCondition,\n              attributes._lastDistanceDisplayCondition,\n            );\n          attributes.distanceDisplayCondition =\n            DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n              distanceDisplayCondition,\n              attributes.distanceDisplayCondition,\n            );\n        }\n      }\n    }\n\n    this.updateShows(primitive);\n  } else if (defined(primitive) && !primitive.ready) {\n    isUpdated = false;\n  }\n  return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n  const showsUpdated = this.showsUpdated.values;\n  const length = showsUpdated.length;\n  for (let i = 0; i < length; i++) {\n    const updater = showsUpdated[i];\n    const entity = updater.entity;\n    const instance = this.geometry.get(updater.id);\n\n    let attributes = this.attributes.get(instance.id.id);\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(instance.id);\n      this.attributes.set(instance.id.id, attributes);\n    }\n\n    const show = entity.isShowing;\n    const currentShow = attributes.show[0] === 1;\n    if (show !== currentShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(\n        show,\n        attributes.show,\n      );\n      instance.attributes.show.value[0] = attributes.show[0];\n    }\n  }\n  this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n  return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n  const primitive = this.primitive;\n  if (!primitive.ready) {\n    return BoundingSphereState.PENDING;\n  }\n  const attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n  if (\n    !defined(attributes) ||\n    !defined(attributes.boundingSphere) ||\n    (defined(attributes.show) && attributes.show[0] === 0)\n  ) {\n    return BoundingSphereState.FAILED;\n  }\n  attributes.boundingSphere.clone(result);\n  return BoundingSphereState.DONE;\n};\n\nBatch.prototype.destroy = function () {\n  const primitive = this.primitive;\n  const orderedGroundPrimitives = this.orderedGroundPrimitives;\n  if (defined(primitive)) {\n    orderedGroundPrimitives.remove(primitive);\n  }\n  const oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    orderedGroundPrimitives.remove(oldPrimitive);\n  }\n  this.removeMaterialSubscription();\n};\n\n/**\n * @private\n */\nfunction StaticGroundPolylinePerMaterialBatch(\n  orderedGroundPrimitives,\n  classificationType,\n  asynchronous,\n) {\n  this._items = [];\n  this._orderedGroundPrimitives = orderedGroundPrimitives;\n  this._classificationType = classificationType;\n  this._asynchronous = asynchronous ?? true;\n}\n\nStaticGroundPolylinePerMaterialBatch.prototype.add = function (time, updater) {\n  const items = this._items;\n  const length = items.length;\n  const geometryInstance = updater.createFillGeometryInstance(time);\n  const zIndex = Property.getValueOrDefault(updater.zIndex, 0);\n  // Check if the Entity represented by the updater has the same material or a material representable with per-instance color.\n  for (let i = 0; i < length; ++i) {\n    const item = items[i];\n    if (item.isMaterial(updater) && item.zIndex === zIndex) {\n      item.add(time, updater, geometryInstance);\n      return;\n    }\n  }\n  // If a compatible batch wasn't found, create a new batch.\n  const batch = new Batch(\n    this._orderedGroundPrimitives,\n    this._classificationType,\n    updater.fillMaterialProperty,\n    zIndex,\n    this._asynchronous,\n  );\n  batch.add(time, updater, geometryInstance);\n  items.push(batch);\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.remove = function (updater) {\n  const items = this._items;\n  const length = items.length;\n  for (let i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.remove(updater)) {\n      if (item.updaters.length === 0) {\n        items.splice(i, 1);\n        item.destroy();\n      }\n      break;\n    }\n  }\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.update = function (time) {\n  let i;\n  const items = this._items;\n  const length = items.length;\n\n  for (i = length - 1; i >= 0; i--) {\n    const item = items[i];\n    if (item.invalidated) {\n      items.splice(i, 1);\n      const updaters = item.updaters.values;\n      const updatersLength = updaters.length;\n      for (let h = 0; h < updatersLength; h++) {\n        this.add(time, updaters[h]);\n      }\n      item.destroy();\n    }\n  }\n\n  let isUpdated = true;\n  for (i = 0; i < items.length; i++) {\n    isUpdated = items[i].update(time) && isUpdated;\n  }\n  return isUpdated;\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.getBoundingSphere = function (\n  updater,\n  result,\n) {\n  const items = this._items;\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    const item = items[i];\n    if (item.contains(updater)) {\n      return item.getBoundingSphere(updater, result);\n    }\n  }\n  return BoundingSphereState.FAILED;\n};\n\nStaticGroundPolylinePerMaterialBatch.prototype.removeAllPrimitives =\n  function () {\n    const items = this._items;\n    const length = items.length;\n    for (let i = 0; i < length; i++) {\n      items[i].destroy();\n    }\n    this._items.length = 0;\n  };\nexport default StaticGroundPolylinePerMaterialBatch;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport Primitive from \"../Scene/Primitive.js\";\nimport BoundingSphereState from \"./BoundingSphereState.js\";\nimport Property from \"./Property.js\";\n\nconst colorScratch = new Color();\nconst distanceDisplayConditionScratch = new DistanceDisplayCondition();\nconst defaultDistanceDisplayCondition = new DistanceDisplayCondition();\nconst defaultOffset = Cartesian3.ZERO;\nconst offsetScratch = new Cartesian3();\n\nfunction Batch(primitives, translucent, width, shadows) {\n  this.translucent = translucent;\n  this.width = width;\n  this.shadows = shadows;\n  this.primitives = primitives;\n  this.createPrimitive = false;\n  this.waitingOnCreate = false;\n  this.primitive = undefined;\n  this.oldPrimitive = undefined;\n  this.geometry = new AssociativeArray();\n  this.updaters = new AssociativeArray();\n  this.updatersWithAttributes = new AssociativeArray();\n  this.attributes = new AssociativeArray();\n  this.itemsToRemove = [];\n  this.subscriptions = new AssociativeArray();\n  this.showsUpdated = new AssociativeArray();\n}\nBatch.prototype.add = function (updater, instance) {\n  const id = updater.id;\n  this.createPrimitive = true;\n  this.geometry.set(id, instance);\n  this.updaters.set(id, updater);\n  if (\n    !updater.hasConstantOutline ||\n    !updater.outlineColorProperty.isConstant ||\n    !Property.isConstant(updater.distanceDisplayConditionProperty) ||\n    !Property.isConstant(updater.terrainOffsetProperty)\n  ) {\n    this.updatersWithAttributes.set(id, updater);\n  } else {\n    const that = this;\n    this.subscriptions.set(\n      id,\n      updater.entity.definitionChanged.addEventListener(\n        function (entity, propertyName, newValue, oldValue) {\n          if (propertyName === \"isShowing\") {\n            that.showsUpdated.set(updater.id, updater);\n          }\n        },\n      ),\n    );\n  }\n};\n\nBatch.prototype.remove = function (updater) {\n  const id = updater.id;\n  this.createPrimitive = this.geometry.remove(id) || this.createPrimitive;\n  if (this.updaters.remove(id)) {\n    this.updatersWithAttributes.remove(id);\n    const unsubscribe = this.subscriptions.get(id);\n    if (defined(unsubscribe)) {\n      unsubscribe();\n      this.subscriptions.remove(id);\n      this.showsUpdated.remove(id);\n    }\n    return true;\n  }\n  return false;\n};\n\nBatch.prototype.update = function (time) {\n  let isUpdated = true;\n  let removedCount = 0;\n  let primitive = this.primitive;\n  const primitives = this.primitives;\n  let i;\n\n  if (this.createPrimitive) {\n    const geometries = this.geometry.values;\n    const geometriesLength = geometries.length;\n    if (geometriesLength > 0) {\n      if (defined(primitive)) {\n        if (!defined(this.oldPrimitive)) {\n          this.oldPrimitive = primitive;\n        } else {\n          primitives.remove(primitive);\n        }\n      }\n\n      primitive = new Primitive({\n        show: false,\n        asynchronous: true,\n        geometryInstances: geometries.slice(),\n        appearance: new PerInstanceColorAppearance({\n          flat: true,\n          translucent: this.translucent,\n          renderState: {\n            lineWidth: this.width,\n          },\n        }),\n        shadows: this.shadows,\n      });\n\n      primitives.add(primitive);\n      isUpdated = false;\n    } else {\n      if (defined(primitive)) {\n        primitives.remove(primitive);\n        primitive = undefined;\n      }\n      const oldPrimitive = this.oldPrimitive;\n      if (defined(oldPrimitive)) {\n        primitives.remove(oldPrimitive);\n        this.oldPrimitive = undefined;\n      }\n    }\n\n    this.attributes.removeAll();\n    this.primitive = primitive;\n    this.createPrimitive = false;\n    this.waitingOnCreate = true;\n  } else if (defined(primitive) && primitive.ready) {\n    primitive.show = true;\n    if (defined(this.oldPrimitive)) {\n      primitives.remove(this.oldPrimitive);\n      this.oldPrimitive = undefined;\n    }\n\n    const updatersWithAttributes = this.updatersWithAttributes.values;\n    const length = updatersWithAttributes.length;\n    const waitingOnCreate = this.waitingOnCreate;\n    for (i = 0; i < length; i++) {\n      const updater = updatersWithAttributes[i];\n      const instance = this.geometry.get(updater.id);\n\n      let attributes = this.attributes.get(instance.id.id);\n      if (!defined(attributes)) {\n        attributes = primitive.getGeometryInstanceAttributes(instance.id);\n        this.attributes.set(instance.id.id, attributes);\n      }\n\n      if (!updater.outlineColorProperty.isConstant || waitingOnCreate) {\n        const outlineColorProperty = updater.outlineColorProperty;\n        const outlineColor = Property.getValueOrDefault(\n          outlineColorProperty,\n          time,\n          Color.WHITE,\n          colorScratch,\n        );\n        if (!Color.equals(attributes._lastColor, outlineColor)) {\n          attributes._lastColor = Color.clone(\n            outlineColor,\n            attributes._lastColor,\n          );\n          attributes.color = ColorGeometryInstanceAttribute.toValue(\n            outlineColor,\n            attributes.color,\n          );\n          if (\n            (this.translucent && attributes.color[3] === 255) ||\n            (!this.translucent && attributes.color[3] !== 255)\n          ) {\n            this.itemsToRemove[removedCount++] = updater;\n          }\n        }\n      }\n\n      const show =\n        updater.entity.isShowing &&\n        (updater.hasConstantOutline || updater.isOutlineVisible(time));\n      const currentShow = attributes.show[0] === 1;\n      if (show !== currentShow) {\n        attributes.show = ShowGeometryInstanceAttribute.toValue(\n          show,\n          attributes.show,\n        );\n      }\n\n      const distanceDisplayConditionProperty =\n        updater.distanceDisplayConditionProperty;\n      if (!Property.isConstant(distanceDisplayConditionProperty)) {\n        const distanceDisplayCondition = Property.getValueOrDefault(\n          distanceDisplayConditionProperty,\n          time,\n          defaultDistanceDisplayCondition,\n          distanceDisplayConditionScratch,\n        );\n        if (\n          !DistanceDisplayCondition.equals(\n            distanceDisplayCondition,\n            attributes._lastDistanceDisplayCondition,\n          )\n        ) {\n          attributes._lastDistanceDisplayCondition =\n            DistanceDisplayCondition.clone(\n              distanceDisplayCondition,\n              attributes._lastDistanceDisplayCondition,\n            );\n          attributes.distanceDisplayCondition =\n            DistanceDisplayConditionGeometryInstanceAttribute.toValue(\n              distanceDisplayCondition,\n              attributes.distanceDisplayCondition,\n            );\n        }\n      }\n\n      const offsetProperty = updater.terrainOffsetProperty;\n      if (!Property.isConstant(offsetProperty)) {\n        const offset = Property.getValueOrDefault(\n          offsetProperty,\n          time,\n          defaultOffset,\n          offsetScratch,\n        );\n        if (!Cartesian3.equals(offset, attributes._lastOffset)) {\n          attributes._lastOffset = Cartesian3.clone(\n            offset,\n            attributes._lastOffset,\n          );\n          attributes.offset = OffsetGeometryInstanceAttribute.toValue(\n            offset,\n            attributes.offset,\n          );\n        }\n      }\n    }\n\n    this.updateShows(primitive);\n    this.waitingOnCreate = false;\n  } else if (defined(primitive) && !primitive.ready) {\n    isUpdated = false;\n  }\n\n  this.itemsToRemove.length = removedCount;\n  return isUpdated;\n};\n\nBatch.prototype.updateShows = function (primitive) {\n  const showsUpdated = this.showsUpdated.values;\n  const length = showsUpdated.length;\n  for (let i = 0; i < length; i++) {\n    const updater = showsUpdated[i];\n    const instance = this.geometry.get(updater.id);\n\n    let attributes = this.attributes.get(instance.id.id);\n    if (!defined(attributes)) {\n      attributes = primitive.getGeometryInstanceAttributes(instance.id);\n      this.attributes.set(instance.id.id, attributes);\n    }\n\n    const show = updater.entity.isShowing;\n    const currentShow = attributes.show[0] === 1;\n    if (show !== currentShow) {\n      attributes.show = ShowGeometryInstanceAttribute.toValue(\n        show,\n        attributes.show,\n      );\n      instance.attributes.show.value[0] = attributes.show[0];\n    }\n  }\n  this.showsUpdated.removeAll();\n};\n\nBatch.prototype.contains = function (updater) {\n  return this.updaters.contains(updater.id);\n};\n\nBatch.prototype.getBoundingSphere = function (updater, result) {\n  const primitive = this.primitive;\n  if (!primitive.ready) {\n    return BoundingSphereState.PENDING;\n  }\n  const attributes = primitive.getGeometryInstanceAttributes(updater.entity);\n  if (\n    !defined(attributes) ||\n    !defined(attributes.boundingSphere) || //\n    (defined(attributes.show) && attributes.show[0] === 0)\n  ) {\n    return BoundingSphereState.FAILED;\n  }\n  attributes.boundingSphere.clone(result);\n  return BoundingSphereState.DONE;\n};\n\nBatch.prototype.removeAllPrimitives = function () {\n  const primitives = this.primitives;\n\n  const primitive = this.primitive;\n  if (defined(primitive)) {\n    primitives.remove(primitive);\n    this.primitive = undefined;\n    this.geometry.removeAll();\n    this.updaters.removeAll();\n  }\n\n  const oldPrimitive = this.oldPrimitive;\n  if (defined(oldPrimitive)) {\n    primitives.remove(oldPrimitive);\n    this.oldPrimitive = undefined;\n  }\n};\n\n/**\n * @private\n */\nfunction StaticOutlineGeometryBatch(primitives, scene, shadows) {\n  this._primitives = primitives;\n  this._scene = scene;\n  this._shadows = shadows;\n  this._solidBatches = new AssociativeArray();\n  this._translucentBatches = new AssociativeArray();\n}\nStaticOutlineGeometryBatch.prototype.add = function (time, updater) {\n  const instance = updater.createOutlineGeometryInstance(time);\n  const width = this._scene.clampLineWidth(updater.outlineWidth);\n  let batches;\n  let batch;\n  if (instance.attributes.color.value[3] === 255) {\n    batches = this._solidBatches;\n    batch = batches.get(width);\n    if (!defined(batch)) {\n      batch = new Batch(this._primitives, false, width, this._shadows);\n      batches.set(width, batch);\n    }\n    batch.add(updater, instance);\n  } else {\n    batches = this._translucentBatches;\n    batch = batches.get(width);\n    if (!defined(batch)) {\n      batch = new Batch(this._primitives, true, width, this._shadows);\n      batches.set(width, batch);\n    }\n    batch.add(updater, instance);\n  }\n};\n\nStaticOutlineGeometryBatch.prototype.remove = function (updater) {\n  let i;\n\n  const solidBatches = this._solidBatches.values;\n  const solidBatchesLength = solidBatches.length;\n  for (i = 0; i < solidBatchesLength; i++) {\n    if (solidBatches[i].remove(updater)) {\n      return;\n    }\n  }\n\n  const translucentBatches = this._translucentBatches.values;\n  const translucentBatchesLength = translucentBatches.length;\n  for (i = 0; i < translucentBatchesLength; i++) {\n    if (translucentBatches[i].remove(updater)) {\n      return;\n    }\n  }\n};\n\nStaticOutlineGeometryBatch.prototype.update = function (time) {\n  let i;\n  let x;\n  let updater;\n  let batch;\n  const solidBatches = this._solidBatches.values;\n  const solidBatchesLength = solidBatches.length;\n  const translucentBatches = this._translucentBatches.values;\n  const translucentBatchesLength = translucentBatches.length;\n  let itemsToRemove;\n  let isUpdated = true;\n  let needUpdate = false;\n\n  do {\n    needUpdate = false;\n    for (x = 0; x < solidBatchesLength; x++) {\n      batch = solidBatches[x];\n      //Perform initial update\n      isUpdated = batch.update(time);\n\n      //If any items swapped between solid/translucent, we need to\n      //move them between batches\n      itemsToRemove = batch.itemsToRemove;\n      const solidsToMoveLength = itemsToRemove.length;\n      if (solidsToMoveLength > 0) {\n        needUpdate = true;\n        for (i = 0; i < solidsToMoveLength; i++) {\n          updater = itemsToRemove[i];\n          batch.remove(updater);\n          this.add(time, updater);\n        }\n      }\n    }\n    for (x = 0; x < translucentBatchesLength; x++) {\n      batch = translucentBatches[x];\n      //Perform initial update\n      isUpdated = batch.update(time);\n\n      //If any items swapped between solid/translucent, we need to\n      //move them between batches\n      itemsToRemove = batch.itemsToRemove;\n      const translucentToMoveLength = itemsToRemove.length;\n      if (translucentToMoveLength > 0) {\n        needUpdate = true;\n        for (i = 0; i < translucentToMoveLength; i++) {\n          updater = itemsToRemove[i];\n          batch.remove(updater);\n          this.add(time, updater);\n        }\n      }\n    }\n  } while (needUpdate);\n\n  return isUpdated;\n};\n\nStaticOutlineGeometryBatch.prototype.getBoundingSphere = function (\n  updater,\n  result,\n) {\n  let i;\n\n  const solidBatches = this._solidBatches.values;\n  const solidBatchesLength = solidBatches.length;\n  for (i = 0; i < solidBatchesLength; i++) {\n    const solidBatch = solidBatches[i];\n    if (solidBatch.contains(updater)) {\n      return solidBatch.getBoundingSphere(updater, result);\n    }\n  }\n\n  const translucentBatches = this._translucentBatches.values;\n  const translucentBatchesLength = translucentBatches.length;\n  for (i = 0; i < translucentBatchesLength; i++) {\n    const translucentBatch = translucentBatches[i];\n    if (translucentBatch.contains(updater)) {\n      return translucentBatch.getBoundingSphere(updater, result);\n    }\n  }\n\n  return BoundingSphereState.FAILED;\n};\n\nStaticOutlineGeometryBatch.prototype.removeAllPrimitives = function () {\n  let i;\n\n  const solidBatches = this._solidBatches.values;\n  const solidBatchesLength = solidBatches.length;\n  for (i = 0; i < solidBatchesLength; i++) {\n    solidBatches[i].removeAllPrimitives();\n  }\n\n  const translucentBatches = this._translucentBatches.values;\n  const translucentBatchesLength = translucentBatches.length;\n  for (i = 0; i < translucentBatchesLength; i++) {\n    translucentBatches[i].removeAllPrimitives();\n  }\n};\nexport default StaticOutlineGeometryBatch;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport Property from \"./Property.js\";\nimport StripeOrientation from \"./StripeOrientation.js\";\n\nconst defaultOrientation = StripeOrientation.HORIZONTAL;\nconst defaultEvenColor = Color.WHITE;\nconst defaultOddColor = Color.BLACK;\nconst defaultOffset = 0;\nconst defaultRepeat = 1;\n\n/**\n * A {@link MaterialProperty} that maps to stripe {@link Material} uniforms.\n * @alias StripeMaterialProperty\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Property|StripeOrientation} [options.orientation=StripeOrientation.HORIZONTAL] A Property specifying the {@link StripeOrientation}.\n * @param {Property|Color} [options.evenColor=Color.WHITE] A Property specifying the first {@link Color}.\n * @param {Property|Color} [options.oddColor=Color.BLACK] A Property specifying the second {@link Color}.\n * @param {Property|number} [options.offset=0] A numeric Property specifying how far into the pattern to start the material.\n * @param {Property|number} [options.repeat=1] A numeric Property specifying how many times the stripes repeat.\n */\nfunction StripeMaterialProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._definitionChanged = new Event();\n  this._orientation = undefined;\n  this._orientationSubscription = undefined;\n  this._evenColor = undefined;\n  this._evenColorSubscription = undefined;\n  this._oddColor = undefined;\n  this._oddColorSubscription = undefined;\n  this._offset = undefined;\n  this._offsetSubscription = undefined;\n  this._repeat = undefined;\n  this._repeatSubscription = undefined;\n\n  this.orientation = options.orientation;\n  this.evenColor = options.evenColor;\n  this.oddColor = options.oddColor;\n  this.offset = options.offset;\n  this.repeat = options.repeat;\n}\n\nObject.defineProperties(StripeMaterialProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof StripeMaterialProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return (\n        Property.isConstant(this._orientation) && //\n        Property.isConstant(this._evenColor) && //\n        Property.isConstant(this._oddColor) && //\n        Property.isConstant(this._offset) && //\n        Property.isConstant(this._repeat)\n      );\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof StripeMaterialProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the Property specifying the {@link StripeOrientation}/\n   * @memberof StripeMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default StripeOrientation.HORIZONTAL\n   */\n  orientation: createPropertyDescriptor(\"orientation\"),\n\n  /**\n   * Gets or sets the Property specifying the first {@link Color}.\n   * @memberof StripeMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.WHITE\n   */\n  evenColor: createPropertyDescriptor(\"evenColor\"),\n\n  /**\n   * Gets or sets the Property specifying the second {@link Color}.\n   * @memberof StripeMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  oddColor: createPropertyDescriptor(\"oddColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the point into the pattern\n   * to begin drawing; with 0.0 being the beginning of the even color, 1.0 the beginning\n   * of the odd color, 2.0 being the even color again, and any multiple or fractional values\n   * being in between.\n   * @memberof StripeMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default 0.0\n   */\n  offset: createPropertyDescriptor(\"offset\"),\n\n  /**\n   * Gets or sets the numeric Property specifying how many times the stripes repeat.\n   * @memberof StripeMaterialProperty.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  repeat: createPropertyDescriptor(\"repeat\"),\n});\n\n/**\n * Gets the {@link Material} type at the provided time.\n *\n * @param {JulianDate} time The time for which to retrieve the type.\n * @returns {string} The type of material.\n */\nStripeMaterialProperty.prototype.getType = function (time) {\n  return \"Stripe\";\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nStripeMaterialProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  if (!defined(result)) {\n    result = {};\n  }\n  result.horizontal =\n    Property.getValueOrDefault(this._orientation, time, defaultOrientation) ===\n    StripeOrientation.HORIZONTAL;\n  result.evenColor = Property.getValueOrClonedDefault(\n    this._evenColor,\n    time,\n    defaultEvenColor,\n    result.evenColor,\n  );\n  result.oddColor = Property.getValueOrClonedDefault(\n    this._oddColor,\n    time,\n    defaultOddColor,\n    result.oddColor,\n  );\n  result.offset = Property.getValueOrDefault(this._offset, time, defaultOffset);\n  result.repeat = Property.getValueOrDefault(this._repeat, time, defaultRepeat);\n  return result;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nStripeMaterialProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof StripeMaterialProperty && //\n      Property.equals(this._orientation, other._orientation) && //\n      Property.equals(this._evenColor, other._evenColor) && //\n      Property.equals(this._oddColor, other._oddColor) && //\n      Property.equals(this._offset, other._offset) && //\n      Property.equals(this._repeat, other._repeat))\n  );\n};\nexport default StripeMaterialProperty;\n","/**\n * Defined the orientation of stripes in {@link StripeMaterialProperty}.\n *\n * @enum {number}\n */\nconst StripeOrientation = {\n  /**\n   * Horizontal orientation.\n   * @type {number}\n   */\n  HORIZONTAL: 0,\n\n  /**\n   * Vertical orientation.\n   * @type {number}\n   */\n  VERTICAL: 1,\n};\nexport default Object.freeze(StripeOrientation);\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport HeightReference, {\n  isHeightReferenceRelative,\n} from \"../Scene/HeightReference.js\";\nimport Property from \"./Property.js\";\n\nconst scratchPosition = new Cartesian3();\n\n/**\n * @private\n */\nfunction TerrainOffsetProperty(\n  scene,\n  positionProperty,\n  heightReferenceProperty,\n  extrudedHeightReferenceProperty,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"scene\", scene);\n  Check.defined(\"positionProperty\", positionProperty);\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n  this._heightReference = heightReferenceProperty;\n  this._extrudedHeightReference = extrudedHeightReferenceProperty;\n  this._positionProperty = positionProperty;\n\n  this._position = new Cartesian3();\n  this._cartographicPosition = new Cartographic();\n  this._normal = new Cartesian3();\n\n  this._definitionChanged = new Event();\n  this._terrainHeight = 0;\n  this._removeCallbackFunc = undefined;\n  this._removeEventListener = undefined;\n  this._removeModeListener = undefined;\n\n  const that = this;\n  if (defined(scene.globe)) {\n    this._removeEventListener = scene.terrainProviderChanged.addEventListener(\n      function () {\n        that._updateClamping();\n      },\n    );\n    this._removeModeListener = scene.morphComplete.addEventListener(\n      function () {\n        that._updateClamping();\n      },\n    );\n  }\n\n  if (positionProperty.isConstant) {\n    const position = positionProperty.getValue(\n      Iso8601.MINIMUM_VALUE,\n      scratchPosition,\n    );\n    if (\n      !defined(position) ||\n      Cartesian3.equals(position, Cartesian3.ZERO) ||\n      !defined(scene.globe)\n    ) {\n      return;\n    }\n    this._position = Cartesian3.clone(position, this._position);\n\n    this._updateClamping();\n\n    this._normal = scene.ellipsoid.geodeticSurfaceNormal(\n      position,\n      this._normal,\n    );\n  }\n}\n\nObject.defineProperties(TerrainOffsetProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.\n   * @memberof TerrainOffsetProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return false;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * @memberof TerrainOffsetProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n});\n\n/**\n * @private\n */\nTerrainOffsetProperty.prototype._updateClamping = function () {\n  if (defined(this._removeCallbackFunc)) {\n    this._removeCallbackFunc();\n  }\n\n  const scene = this._scene;\n  const position = this._position;\n\n  if (Cartesian3.equals(position, Cartesian3.ZERO)) {\n    this._terrainHeight = 0;\n    return;\n  }\n  const ellipsoid = scene.ellipsoid;\n  const cartographicPosition = ellipsoid.cartesianToCartographic(\n    position,\n    this._cartographicPosition,\n  );\n\n  const height = scene.getHeight(cartographicPosition, this._heightReference);\n  if (defined(height)) {\n    this._terrainHeight = height;\n  } else {\n    this._terrainHeight = 0;\n  }\n\n  const updateFunction = (clampedPosition) => {\n    this._terrainHeight = clampedPosition.height;\n    this.definitionChanged.raiseEvent();\n  };\n\n  this._removeCallbackFunc = scene.updateHeight(\n    cartographicPosition,\n    updateFunction,\n    this._heightReference,\n  );\n};\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the height relative to the terrain based on the positions.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The offset\n */\nTerrainOffsetProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  const heightReference = Property.getValueOrDefault(\n    this._heightReference,\n    time,\n    HeightReference.NONE,\n  );\n  const extrudedHeightReference = Property.getValueOrDefault(\n    this._extrudedHeightReference,\n    time,\n    HeightReference.NONE,\n  );\n\n  if (\n    heightReference === HeightReference.NONE &&\n    !isHeightReferenceRelative(extrudedHeightReference)\n  ) {\n    this._position = Cartesian3.clone(Cartesian3.ZERO, this._position);\n    return Cartesian3.clone(Cartesian3.ZERO, result);\n  }\n\n  if (this._positionProperty.isConstant) {\n    return Cartesian3.multiplyByScalar(\n      this._normal,\n      this._terrainHeight,\n      result,\n    );\n  }\n\n  const scene = this._scene;\n  const position = this._positionProperty.getValue(time, scratchPosition);\n  if (\n    !defined(position) ||\n    Cartesian3.equals(position, Cartesian3.ZERO) ||\n    !defined(scene.globe)\n  ) {\n    return Cartesian3.clone(Cartesian3.ZERO, result);\n  }\n\n  if (\n    Cartesian3.equalsEpsilon(this._position, position, CesiumMath.EPSILON10)\n  ) {\n    return Cartesian3.multiplyByScalar(\n      this._normal,\n      this._terrainHeight,\n      result,\n    );\n  }\n\n  this._position = Cartesian3.clone(position, this._position);\n\n  this._updateClamping();\n\n  const normal = scene.ellipsoid.geodeticSurfaceNormal(position, this._normal);\n  return Cartesian3.multiplyByScalar(normal, this._terrainHeight, result);\n};\n\nTerrainOffsetProperty.prototype.isDestroyed = function () {\n  return false;\n};\n\nTerrainOffsetProperty.prototype.destroy = function () {\n  if (defined(this._removeEventListener)) {\n    this._removeEventListener();\n  }\n  if (defined(this._removeModeListener)) {\n    this._removeModeListener();\n  }\n  if (defined(this._removeCallbackFunc)) {\n    this._removeCallbackFunc();\n  }\n  return destroyObject(this);\n};\n\n/**\n * A function which creates one or more providers.\n * @callback TerrainOffsetProperty.PositionFunction\n * @param {JulianDate} time The clock time at which to retrieve the position\n * @param {Cartesian3} result The result position\n * @returns {Cartesian3} The position at which to do the terrain height check\n */\nexport default TerrainOffsetProperty;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport PositionProperty from \"./PositionProperty.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link TimeIntervalCollectionProperty} which is also a {@link PositionProperty}.\n *\n * @alias TimeIntervalCollectionPositionProperty\n * @constructor\n *\n * @param {ReferenceFrame} [referenceFrame=ReferenceFrame.FIXED] The reference frame in which the position is defined.\n */\nfunction TimeIntervalCollectionPositionProperty(referenceFrame) {\n  this._definitionChanged = new Event();\n  this._intervals = new TimeIntervalCollection();\n  this._intervals.changedEvent.addEventListener(\n    TimeIntervalCollectionPositionProperty.prototype._intervalsChanged,\n    this,\n  );\n  this._referenceFrame = referenceFrame ?? ReferenceFrame.FIXED;\n}\n\nObject.defineProperties(TimeIntervalCollectionPositionProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof TimeIntervalCollectionPositionProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._intervals.isEmpty;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is considered to have changed if a call to getValue would return\n   * a different result for the same time.\n   * @memberof TimeIntervalCollectionPositionProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the interval collection.\n   * @memberof TimeIntervalCollectionPositionProperty.prototype\n   * @type {TimeIntervalCollection}\n   * @readonly\n   */\n  intervals: {\n    get: function () {\n      return this._intervals;\n    },\n  },\n  /**\n   * Gets the reference frame in which the position is defined.\n   * @memberof TimeIntervalCollectionPositionProperty.prototype\n   * @type {ReferenceFrame}\n   * @readonly\n   * @default ReferenceFrame.FIXED;\n   */\n  referenceFrame: {\n    get: function () {\n      return this._referenceFrame;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time in the fixed frame.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nTimeIntervalCollectionPositionProperty.prototype.getValue = function (\n  time,\n  result,\n) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  return this.getValueInReferenceFrame(time, ReferenceFrame.FIXED, result);\n};\n\n/**\n * Gets the value of the property at the provided time and in the provided reference frame.\n *\n * @param {JulianDate} time The time for which to retrieve the value.\n * @param {ReferenceFrame} referenceFrame The desired referenceFrame of the result.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nTimeIntervalCollectionPositionProperty.prototype.getValueInReferenceFrame =\n  function (time, referenceFrame, result) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(time)) {\n      throw new DeveloperError(\"time is required.\");\n    }\n    if (!defined(referenceFrame)) {\n      throw new DeveloperError(\"referenceFrame is required.\");\n    }\n    //>>includeEnd('debug');\n\n    const position = this._intervals.findDataForIntervalContainingDate(time);\n    if (defined(position)) {\n      return PositionProperty.convertToReferenceFrame(\n        time,\n        position,\n        this._referenceFrame,\n        referenceFrame,\n        result,\n      );\n    }\n    return undefined;\n  };\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nTimeIntervalCollectionPositionProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof TimeIntervalCollectionPositionProperty && //\n      this._intervals.equals(other._intervals, Property.equals) && //\n      this._referenceFrame === other._referenceFrame)\n  );\n};\n\n/**\n * @private\n */\nTimeIntervalCollectionPositionProperty.prototype._intervalsChanged =\n  function () {\n    this._definitionChanged.raiseEvent(this);\n  };\nexport default TimeIntervalCollectionPositionProperty;\n","import defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} which is defined by a {@link TimeIntervalCollection}, where the\n * data property of each {@link TimeInterval} represents the value at time.\n *\n * @alias TimeIntervalCollectionProperty\n * @constructor\n *\n * @example\n * //Create a Cartesian2 interval property which contains data on August 1st, 2012\n * //and uses a different value every 6 hours.\n * const composite = new Cesium.TimeIntervalCollectionProperty();\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '2012-08-01T00:00:00.00Z/2012-08-01T06:00:00.00Z',\n *     isStartIncluded : true,\n *     isStopIncluded : false,\n *     data : new Cesium.Cartesian2(2.0, 3.4)\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '2012-08-01T06:00:00.00Z/2012-08-01T12:00:00.00Z',\n *     isStartIncluded : true,\n *     isStopIncluded : false,\n *     data : new Cesium.Cartesian2(12.0, 2.7)\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '2012-08-01T12:00:00.00Z/2012-08-01T18:00:00.00Z',\n *     isStartIncluded : true,\n *     isStopIncluded : false,\n *     data : new Cesium.Cartesian2(5.0, 12.4)\n * }));\n * composite.intervals.addInterval(Cesium.TimeInterval.fromIso8601({\n *     iso8601 : '2012-08-01T18:00:00.00Z/2012-08-02T00:00:00.00Z',\n *     isStartIncluded : true,\n *     isStopIncluded : true,\n *     data : new Cesium.Cartesian2(85.0, 4.1)\n * }));\n */\nfunction TimeIntervalCollectionProperty() {\n  this._definitionChanged = new Event();\n  this._intervals = new TimeIntervalCollection();\n  this._intervals.changedEvent.addEventListener(\n    TimeIntervalCollectionProperty.prototype._intervalsChanged,\n    this,\n  );\n}\n\nObject.defineProperties(TimeIntervalCollectionProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.  A property is considered\n   * constant if getValue always returns the same result for the current definition.\n   * @memberof TimeIntervalCollectionProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return this._intervals.isEmpty;\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * The definition is changed whenever setValue is called with data different\n   * than the current value.\n   * @memberof TimeIntervalCollectionProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets the interval collection.\n   * @memberof TimeIntervalCollectionProperty.prototype\n   *\n   * @type {TimeIntervalCollection}\n   * @readonly\n   */\n  intervals: {\n    get: function () {\n      return this._intervals;\n    },\n  },\n});\n\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {object} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {object} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nTimeIntervalCollectionProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n\n  const value = this._intervals.findDataForIntervalContainingDate(time);\n  if (defined(value) && typeof value.clone === \"function\") {\n    return value.clone(result);\n  }\n  return value;\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nTimeIntervalCollectionProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof TimeIntervalCollectionProperty && //\n      this._intervals.equals(other._intervals, Property.equals))\n  );\n};\n\n/**\n * @private\n */\nTimeIntervalCollectionProperty.prototype._intervalsChanged = function () {\n  this._definitionChanged.raiseEvent(this);\n};\nexport default TimeIntervalCollectionProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Property from \"./Property.js\";\nimport VelocityVectorProperty from \"./VelocityVectorProperty.js\";\n\n/**\n * A {@link Property} which evaluates to a {@link Quaternion} rotation\n * based on the velocity of the provided {@link PositionProperty}.\n *\n * @alias VelocityOrientationProperty\n * @constructor\n *\n * @param {PositionProperty} [position] The position property used to compute the orientation.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid used to determine which way is up.\n *\n * @example\n * //Create an entity with position and orientation.\n * const position = new Cesium.SampledProperty();\n * position.addSamples(...);\n * const entity = viewer.entities.add({\n *   position : position,\n *   orientation : new Cesium.VelocityOrientationProperty(position)\n * }));\n */\nfunction VelocityOrientationProperty(position, ellipsoid) {\n  this._velocityVectorProperty = new VelocityVectorProperty(position, true);\n  this._subscription = undefined;\n  this._ellipsoid = undefined;\n  this._definitionChanged = new Event();\n\n  this.ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  const that = this;\n  this._velocityVectorProperty.definitionChanged.addEventListener(function () {\n    that._definitionChanged.raiseEvent(that);\n  });\n}\n\nObject.defineProperties(VelocityOrientationProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.\n   * @memberof VelocityOrientationProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return Property.isConstant(this._velocityVectorProperty);\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * @memberof VelocityOrientationProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets or sets the position property used to compute orientation.\n   * @memberof VelocityOrientationProperty.prototype\n   *\n   * @type {Property|undefined}\n   */\n  position: {\n    get: function () {\n      return this._velocityVectorProperty.position;\n    },\n    set: function (value) {\n      this._velocityVectorProperty.position = value;\n    },\n  },\n  /**\n   * Gets or sets the ellipsoid used to determine which way is up.\n   * @memberof VelocityOrientationProperty.prototype\n   *\n   * @type {Property|undefined}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n    set: function (value) {\n      const oldValue = this._ellipsoid;\n      if (oldValue !== value) {\n        this._ellipsoid = value;\n        this._definitionChanged.raiseEvent(this);\n      }\n    },\n  },\n});\n\nconst positionScratch = new Cartesian3();\nconst velocityScratch = new Cartesian3();\nconst rotationScratch = new Matrix3();\nconst timeScratch = new JulianDate();\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Quaternion} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Quaternion} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nVelocityOrientationProperty.prototype.getValue = function (time, result) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeScratch);\n  }\n  const velocity = this._velocityVectorProperty._getValue(\n    time,\n    velocityScratch,\n    positionScratch,\n  );\n\n  if (!defined(velocity)) {\n    return undefined;\n  }\n\n  Transforms.rotationMatrixFromPositionVelocity(\n    positionScratch,\n    velocity,\n    this._ellipsoid,\n    rotationScratch,\n  );\n  return Quaternion.fromRotationMatrix(rotationScratch, result);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nVelocityOrientationProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof VelocityOrientationProperty &&\n      Property.equals(\n        this._velocityVectorProperty,\n        other._velocityVectorProperty,\n      ) &&\n      (this._ellipsoid === other._ellipsoid ||\n        this._ellipsoid.equals(other._ellipsoid)))\n  );\n};\nexport default VelocityOrientationProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Property from \"./Property.js\";\n\n/**\n * A {@link Property} which evaluates to a {@link Cartesian3} vector\n * based on the velocity of the provided {@link PositionProperty}.\n *\n * @alias VelocityVectorProperty\n * @constructor\n *\n * @param {PositionProperty} [position] The position property used to compute the velocity.\n * @param {boolean} [normalize=true] Whether to normalize the computed velocity vector.\n *\n * @example\n * //Create an entity with a billboard rotated to match its velocity.\n * const position = new Cesium.SampledProperty();\n * position.addSamples(...);\n * const entity = viewer.entities.add({\n *   position : position,\n *   billboard : {\n *     image : 'image.png',\n *     alignedAxis : new Cesium.VelocityVectorProperty(position, true) // alignedAxis must be a unit vector\n *   }\n * }));\n */\nfunction VelocityVectorProperty(position, normalize) {\n  this._position = undefined;\n  this._subscription = undefined;\n  this._definitionChanged = new Event();\n  this._normalize = normalize ?? true;\n\n  this.position = position;\n}\n\nObject.defineProperties(VelocityVectorProperty.prototype, {\n  /**\n   * Gets a value indicating if this property is constant.\n   * @memberof VelocityVectorProperty.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  isConstant: {\n    get: function () {\n      return Property.isConstant(this._position);\n    },\n  },\n  /**\n   * Gets the event that is raised whenever the definition of this property changes.\n   * @memberof VelocityVectorProperty.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n  /**\n   * Gets or sets the position property used to compute the velocity vector.\n   * @memberof VelocityVectorProperty.prototype\n   *\n   * @type {Property|undefined}\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n    set: function (value) {\n      const oldValue = this._position;\n      if (oldValue !== value) {\n        if (defined(oldValue)) {\n          this._subscription();\n        }\n\n        this._position = value;\n\n        if (defined(value)) {\n          this._subscription = value._definitionChanged.addEventListener(\n            function () {\n              this._definitionChanged.raiseEvent(this);\n            },\n            this,\n          );\n        }\n\n        this._definitionChanged.raiseEvent(this);\n      }\n    },\n  },\n  /**\n   * Gets or sets whether the vector produced by this property\n   * will be normalized or not.\n   * @memberof VelocityVectorProperty.prototype\n   *\n   * @type {boolean}\n   */\n  normalize: {\n    get: function () {\n      return this._normalize;\n    },\n    set: function (value) {\n      if (this._normalize === value) {\n        return;\n      }\n\n      this._normalize = value;\n      this._definitionChanged.raiseEvent(this);\n    },\n  },\n});\n\nconst position1Scratch = new Cartesian3();\nconst position2Scratch = new Cartesian3();\nconst timeScratch = new JulianDate();\nconst timeNowScratch = new JulianDate();\nconst step = 1.0 / 60.0;\n\n/**\n * Gets the value of the property at the provided time.\n *\n * @param {JulianDate} [time=JulianDate.now()] The time for which to retrieve the value. If omitted, the current system time is used.\n * @param {Cartesian3} [result] The object to store the value into, if omitted, a new instance is created and returned.\n * @returns {Cartesian3} The modified result parameter or a new instance if the result parameter was not supplied.\n */\nVelocityVectorProperty.prototype.getValue = function (time, result) {\n  return this._getValue(time, result);\n};\n\n/**\n * @private\n */\nVelocityVectorProperty.prototype._getValue = function (\n  time,\n  velocityResult,\n  positionResult,\n) {\n  if (!defined(time)) {\n    time = JulianDate.now(timeNowScratch);\n  }\n\n  if (!defined(velocityResult)) {\n    velocityResult = new Cartesian3();\n  }\n\n  const property = this._position;\n  if (Property.isConstant(property)) {\n    return this._normalize\n      ? undefined\n      : Cartesian3.clone(Cartesian3.ZERO, velocityResult);\n  }\n\n  let position1 = property.getValue(time, position1Scratch);\n  let position2 = property.getValue(\n    JulianDate.addSeconds(time, step, timeScratch),\n    position2Scratch,\n  );\n\n  //If we don't have a position for now, return undefined.\n  if (!defined(position1)) {\n    return undefined;\n  }\n\n  //If we don't have a position for now + step, see if we have a position for now - step.\n  if (!defined(position2)) {\n    position2 = position1;\n    position1 = property.getValue(\n      JulianDate.addSeconds(time, -step, timeScratch),\n      position2Scratch,\n    );\n\n    if (!defined(position1)) {\n      return undefined;\n    }\n  }\n\n  if (Cartesian3.equals(position1, position2)) {\n    return this._normalize\n      ? undefined\n      : Cartesian3.clone(Cartesian3.ZERO, velocityResult);\n  }\n\n  if (defined(positionResult)) {\n    position1.clone(positionResult);\n  }\n\n  const velocity = Cartesian3.subtract(position2, position1, velocityResult);\n  if (this._normalize) {\n    return Cartesian3.normalize(velocity, velocityResult);\n  }\n\n  return Cartesian3.divideByScalar(velocity, step, velocityResult);\n};\n\n/**\n * Compares this property to the provided property and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {Property} [other] The other property.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nVelocityVectorProperty.prototype.equals = function (other) {\n  return (\n    this === other || //\n    (other instanceof VelocityVectorProperty &&\n      Property.equals(this._position, other._position))\n  );\n};\nexport default VelocityVectorProperty;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Defines the interface for visualizers. Visualizers are plug-ins to\n * {@link DataSourceDisplay} that render data associated with\n * {@link DataSource} instances.\n * This object is an interface for documentation purposes and is not intended\n * to be instantiated directly.\n * @alias Visualizer\n * @constructor\n *\n * @see BillboardVisualizer\n * @see LabelVisualizer\n * @see ModelVisualizer\n * @see PathVisualizer\n * @see PointVisualizer\n * @see GeometryVisualizer\n */\nfunction Visualizer() {\n  DeveloperError.throwInstantiationError();\n}\n\n/**\n * Updates the visualization to the provided time.\n * @function\n *\n * @param {JulianDate} time The time.\n *\n * @returns {boolean} True if the display was updated to the provided time,\n * false if the visualizer is waiting for an asynchronous operation to\n * complete before data can be updated.\n */\nVisualizer.prototype.update = DeveloperError.throwInstantiationError;\n\n/**\n * Computes a bounding sphere which encloses the visualization produced for the specified entity.\n * The bounding sphere is in the fixed frame of the scene's globe.\n *\n * @param {Entity} entity The entity whose bounding sphere to compute.\n * @param {BoundingSphere} result The bounding sphere onto which to store the result.\n * @returns {BoundingSphereState} BoundingSphereState.DONE if the result contains the bounding sphere,\n *                       BoundingSphereState.PENDING if the result is still being computed, or\n *                       BoundingSphereState.FAILED if the entity has no visualization in the current scene.\n * @private\n */\nVisualizer.prototype.getBoundingSphere = DeveloperError.throwInstantiationError;\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * @function\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nVisualizer.prototype.isDestroyed = DeveloperError.throwInstantiationError;\n\n/**\n * Removes all visualization and cleans up any resources associated with this instance.\n * @function\n */\nVisualizer.prototype.destroy = DeveloperError.throwInstantiationError;\nexport default Visualizer;\n","import Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayConditionGeometryInstanceAttribute from \"../Core/DistanceDisplayConditionGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport WallGeometry from \"../Core/WallGeometry.js\";\nimport WallOutlineGeometry from \"../Core/WallOutlineGeometry.js\";\nimport MaterialAppearance from \"../Scene/MaterialAppearance.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport DynamicGeometryUpdater from \"./DynamicGeometryUpdater.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport Property from \"./Property.js\";\n\nconst scratchColor = new Color();\n\nfunction WallGeometryOptions(entity) {\n  this.id = entity;\n  this.vertexFormat = undefined;\n  this.positions = undefined;\n  this.minimumHeights = undefined;\n  this.maximumHeights = undefined;\n  this.granularity = undefined;\n}\n\n/**\n * A {@link GeometryUpdater} for walls.\n * Clients do not normally create this class directly, but instead rely on {@link DataSourceDisplay}.\n * @alias WallGeometryUpdater\n * @constructor\n *\n * @param {Entity} entity The entity containing the geometry to be visualized.\n * @param {Scene} scene The scene where visualization is taking place.\n */\nfunction WallGeometryUpdater(entity, scene) {\n  GeometryUpdater.call(this, {\n    entity: entity,\n    scene: scene,\n    geometryOptions: new WallGeometryOptions(entity),\n    geometryPropertyName: \"wall\",\n    observedPropertyNames: [\"availability\", \"wall\"],\n  });\n\n  this._onEntityPropertyChanged(entity, \"wall\", entity.wall, undefined);\n}\n\nif (defined(Object.create)) {\n  WallGeometryUpdater.prototype = Object.create(GeometryUpdater.prototype);\n  WallGeometryUpdater.prototype.constructor = WallGeometryUpdater;\n}\n\n/**\n * Creates the geometry instance which represents the fill of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the filled portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent a filled geometry.\n */\nWallGeometryUpdater.prototype.createFillGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._fillEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent a filled geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n\n  let attributes;\n\n  let color;\n  const show = new ShowGeometryInstanceAttribute(\n    isAvailable &&\n      entity.isShowing &&\n      this._showProperty.getValue(time) &&\n      this._fillProperty.getValue(time),\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n  const distanceDisplayConditionAttribute =\n    DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n      distanceDisplayCondition,\n    );\n  if (this._materialProperty instanceof ColorMaterialProperty) {\n    let currentColor;\n    if (\n      defined(this._materialProperty.color) &&\n      (this._materialProperty.color.isConstant || isAvailable)\n    ) {\n      currentColor = this._materialProperty.color.getValue(time, scratchColor);\n    }\n    if (!defined(currentColor)) {\n      currentColor = Color.WHITE;\n    }\n    color = ColorGeometryInstanceAttribute.fromColor(currentColor);\n    attributes = {\n      show: show,\n      distanceDisplayCondition: distanceDisplayConditionAttribute,\n      color: color,\n    };\n  } else {\n    attributes = {\n      show: show,\n      distanceDisplayCondition: distanceDisplayConditionAttribute,\n    };\n  }\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new WallGeometry(this._options),\n    attributes: attributes,\n  });\n};\n\n/**\n * Creates the geometry instance which represents the outline of the geometry.\n *\n * @param {JulianDate} time The time to use when retrieving initial attribute values.\n * @returns {GeometryInstance} The geometry instance representing the outline portion of the geometry.\n *\n * @exception {DeveloperError} This instance does not represent an outlined geometry.\n */\nWallGeometryUpdater.prototype.createOutlineGeometryInstance = function (time) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"time\", time);\n\n  if (!this._outlineEnabled) {\n    throw new DeveloperError(\n      \"This instance does not represent an outlined geometry.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const entity = this._entity;\n  const isAvailable = entity.isAvailable(time);\n  const outlineColor = Property.getValueOrDefault(\n    this._outlineColorProperty,\n    time,\n    Color.BLACK,\n    scratchColor,\n  );\n  const distanceDisplayCondition =\n    this._distanceDisplayConditionProperty.getValue(time);\n\n  return new GeometryInstance({\n    id: entity,\n    geometry: new WallOutlineGeometry(this._options),\n    attributes: {\n      show: new ShowGeometryInstanceAttribute(\n        isAvailable &&\n          entity.isShowing &&\n          this._showProperty.getValue(time) &&\n          this._showOutlineProperty.getValue(time),\n      ),\n      color: ColorGeometryInstanceAttribute.fromColor(outlineColor),\n      distanceDisplayCondition:\n        DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(\n          distanceDisplayCondition,\n        ),\n    },\n  });\n};\n\nWallGeometryUpdater.prototype._isHidden = function (entity, wall) {\n  return (\n    !defined(wall.positions) ||\n    GeometryUpdater.prototype._isHidden.call(this, entity, wall)\n  );\n};\n\nWallGeometryUpdater.prototype._getIsClosed = function (options) {\n  return false;\n};\n\nWallGeometryUpdater.prototype._isDynamic = function (entity, wall) {\n  return (\n    !wall.positions.isConstant || //\n    !Property.isConstant(wall.minimumHeights) || //\n    !Property.isConstant(wall.maximumHeights) || //\n    !Property.isConstant(wall.outlineWidth) || //\n    !Property.isConstant(wall.granularity)\n  );\n};\n\nWallGeometryUpdater.prototype._setStaticOptions = function (entity, wall) {\n  const minimumHeights = wall.minimumHeights;\n  const maximumHeights = wall.maximumHeights;\n  const granularity = wall.granularity;\n  const isColorMaterial =\n    this._materialProperty instanceof ColorMaterialProperty;\n\n  const options = this._options;\n  options.vertexFormat = isColorMaterial\n    ? PerInstanceColorAppearance.VERTEX_FORMAT\n    : MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat;\n  options.positions = wall.positions.getValue(\n    Iso8601.MINIMUM_VALUE,\n    options.positions,\n  );\n  options.minimumHeights = defined(minimumHeights)\n    ? minimumHeights.getValue(Iso8601.MINIMUM_VALUE, options.minimumHeights)\n    : undefined;\n  options.maximumHeights = defined(maximumHeights)\n    ? maximumHeights.getValue(Iso8601.MINIMUM_VALUE, options.maximumHeights)\n    : undefined;\n  options.granularity = defined(granularity)\n    ? granularity.getValue(Iso8601.MINIMUM_VALUE)\n    : undefined;\n};\n\nWallGeometryUpdater.DynamicGeometryUpdater = DynamicWallGeometryUpdater;\n\n/**\n * @private\n */\nfunction DynamicWallGeometryUpdater(\n  geometryUpdater,\n  primitives,\n  groundPrimitives,\n) {\n  DynamicGeometryUpdater.call(\n    this,\n    geometryUpdater,\n    primitives,\n    groundPrimitives,\n  );\n}\n\nif (defined(Object.create)) {\n  DynamicWallGeometryUpdater.prototype = Object.create(\n    DynamicGeometryUpdater.prototype,\n  );\n  DynamicWallGeometryUpdater.prototype.constructor = DynamicWallGeometryUpdater;\n}\n\nDynamicWallGeometryUpdater.prototype._isHidden = function (entity, wall, time) {\n  return (\n    !defined(this._options.positions) ||\n    DynamicGeometryUpdater.prototype._isHidden.call(this, entity, wall, time)\n  );\n};\n\nDynamicWallGeometryUpdater.prototype._setOptions = function (\n  entity,\n  wall,\n  time,\n) {\n  const options = this._options;\n  options.positions = Property.getValueOrUndefined(\n    wall.positions,\n    time,\n    options.positions,\n  );\n  options.minimumHeights = Property.getValueOrUndefined(\n    wall.minimumHeights,\n    time,\n    options.minimumHeights,\n  );\n  options.maximumHeights = Property.getValueOrUndefined(\n    wall.maximumHeights,\n    time,\n    options.maximumHeights,\n  );\n  options.granularity = Property.getValueOrUndefined(wall.granularity, time);\n};\nexport default WallGeometryUpdater;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport createMaterialPropertyDescriptor from \"./createMaterialPropertyDescriptor.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\n/**\n * @typedef {object} WallGraphics.ConstructorOptions\n *\n * Initialization options for the WallGraphics constructor\n *\n * @property {Property | boolean} [show=true] A boolean Property specifying the visibility of the wall.\n * @property {Property | Cartesian3[]} [positions] A Property specifying the array of {@link Cartesian3} positions which define the top of the wall.\n * @property {Property | number[]} [minimumHeights] A Property specifying an array of heights to be used for the bottom of the wall instead of the globe surface.\n * @property {Property | number[]} [maximumHeights] A Property specifying an array of heights to be used for the top of the wall instead of the height of each position.\n * @property {Property | number} [granularity=Cesium.Math.RADIANS_PER_DEGREE] A numeric Property specifying the angular distance between each latitude and longitude point.\n * @property {Property | boolean} [fill=true] A boolean Property specifying whether the wall is filled with the provided material.\n * @property {MaterialProperty | Color} [material=Color.WHITE] A Property specifying the material used to fill the wall.\n * @property {Property | boolean} [outline=false] A boolean Property specifying whether the wall is outlined.\n * @property {Property | Color} [outlineColor=Color.BLACK] A Property specifying the {@link Color} of the outline.\n * @property {Property | number} [outlineWidth=1.0] A numeric Property specifying the width of the outline.\n * @property {Property | ShadowMode} [shadows=ShadowMode.DISABLED] An enum Property specifying whether the wall casts or receives shadows from light sources.\n * @property {Property | DistanceDisplayCondition} [distanceDisplayCondition] A Property specifying at what distance from the camera that this wall will be displayed.\n */\n\n/**\n * Describes a two dimensional wall defined as a line strip and optional maximum and minimum heights.\n * The wall conforms to the curvature of the globe and can be placed along the surface or at altitude.\n *\n * @alias WallGraphics\n * @constructor\n *\n * @param {WallGraphics.ConstructorOptions} [options] Object describing initialization options\n *\n * @see Entity\n * @demo {@link https://sandcastle.cesium.com/index.html?id=wall|Cesium Sandcastle Wall Demo}\n */\nfunction WallGraphics(options) {\n  this._definitionChanged = new Event();\n  this._show = undefined;\n  this._showSubscription = undefined;\n  this._positions = undefined;\n  this._positionsSubscription = undefined;\n  this._minimumHeights = undefined;\n  this._minimumHeightsSubscription = undefined;\n  this._maximumHeights = undefined;\n  this._maximumHeightsSubscription = undefined;\n  this._granularity = undefined;\n  this._granularitySubscription = undefined;\n  this._fill = undefined;\n  this._fillSubscription = undefined;\n  this._material = undefined;\n  this._materialSubscription = undefined;\n  this._outline = undefined;\n  this._outlineSubscription = undefined;\n  this._outlineColor = undefined;\n  this._outlineColorSubscription = undefined;\n  this._outlineWidth = undefined;\n  this._outlineWidthSubscription = undefined;\n  this._shadows = undefined;\n  this._shadowsSubscription = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._distanceDisplayConditionSubscription = undefined;\n\n  this.merge(options ?? Frozen.EMPTY_OBJECT);\n}\n\nObject.defineProperties(WallGraphics.prototype, {\n  /**\n   * Gets the event that is raised whenever a property or sub-property is changed or modified.\n   * @memberof WallGraphics.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  definitionChanged: {\n    get: function () {\n      return this._definitionChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the boolean Property specifying the visibility of the wall.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  show: createPropertyDescriptor(\"show\"),\n\n  /**\n   * Gets or sets the Property specifying the array of {@link Cartesian3} positions which define the top of the wall.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   */\n  positions: createPropertyDescriptor(\"positions\"),\n\n  /**\n   * Gets or sets the Property specifying an array of heights to be used for the bottom of the wall instead of the surface of the globe.\n   * If defined, the array must be the same length as {@link Wall#positions}.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   */\n  minimumHeights: createPropertyDescriptor(\"minimumHeights\"),\n\n  /**\n   * Gets or sets the Property specifying an array of heights to be used for the top of the wall instead of the height of each position.\n   * If defined, the array must be the same length as {@link Wall#positions}.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   */\n  maximumHeights: createPropertyDescriptor(\"maximumHeights\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the angular distance between points on the wall.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   * @default {CesiumMath.RADIANS_PER_DEGREE}\n   */\n  granularity: createPropertyDescriptor(\"granularity\"),\n\n  /**\n   * Gets or sets the boolean Property specifying whether the wall is filled with the provided material.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   * @default true\n   */\n  fill: createPropertyDescriptor(\"fill\"),\n\n  /**\n   * Gets or sets the Property specifying the material used to fill the wall.\n   * @memberof WallGraphics.prototype\n   * @type {MaterialProperty}\n   * @default Color.WHITE\n   */\n  material: createMaterialPropertyDescriptor(\"material\"),\n\n  /**\n   * Gets or sets the Property specifying whether the wall is outlined.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   * @default false\n   */\n  outline: createPropertyDescriptor(\"outline\"),\n\n  /**\n   * Gets or sets the Property specifying the {@link Color} of the outline.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   * @default Color.BLACK\n   */\n  outlineColor: createPropertyDescriptor(\"outlineColor\"),\n\n  /**\n   * Gets or sets the numeric Property specifying the width of the outline.\n   * <p>\n   * Note: This property will be ignored on all major browsers on Windows platforms. For details, see (@link https://github.com/CesiumGS/cesium/issues/40}.\n   * </p>\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   * @default 1.0\n   */\n  outlineWidth: createPropertyDescriptor(\"outlineWidth\"),\n\n  /**\n   * Get or sets the enum Property specifying whether the wall\n   * casts or receives shadows from light sources.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   * @default ShadowMode.DISABLED\n   */\n  shadows: createPropertyDescriptor(\"shadows\"),\n\n  /**\n   * Gets or sets the {@link DistanceDisplayCondition} Property specifying at what distance from the camera that this wall will be displayed.\n   * @memberof WallGraphics.prototype\n   * @type {Property|undefined}\n   */\n  distanceDisplayCondition: createPropertyDescriptor(\n    \"distanceDisplayCondition\",\n  ),\n});\n\n/**\n * Duplicates this instance.\n *\n * @param {WallGraphics} [result] The object onto which to store the result.\n * @returns {WallGraphics} The modified result parameter or a new instance if one was not provided.\n */\nWallGraphics.prototype.clone = function (result) {\n  if (!defined(result)) {\n    return new WallGraphics(this);\n  }\n  result.show = this.show;\n  result.positions = this.positions;\n  result.minimumHeights = this.minimumHeights;\n  result.maximumHeights = this.maximumHeights;\n  result.granularity = this.granularity;\n  result.fill = this.fill;\n  result.material = this.material;\n  result.outline = this.outline;\n  result.outlineColor = this.outlineColor;\n  result.outlineWidth = this.outlineWidth;\n  result.shadows = this.shadows;\n  result.distanceDisplayCondition = this.distanceDisplayCondition;\n  return result;\n};\n\n/**\n * Assigns each unassigned property on this object to the value\n * of the same property on the provided source object.\n *\n * @param {WallGraphics} source The object to be merged into this object.\n */\nWallGraphics.prototype.merge = function (source) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(source)) {\n    throw new DeveloperError(\"source is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.show = this.show ?? source.show;\n  this.positions = this.positions ?? source.positions;\n  this.minimumHeights = this.minimumHeights ?? source.minimumHeights;\n  this.maximumHeights = this.maximumHeights ?? source.maximumHeights;\n  this.granularity = this.granularity ?? source.granularity;\n  this.fill = this.fill ?? source.fill;\n  this.material = this.material ?? source.material;\n  this.outline = this.outline ?? source.outline;\n  this.outlineColor = this.outlineColor ?? source.outlineColor;\n  this.outlineWidth = this.outlineWidth ?? source.outlineWidth;\n  this.shadows = this.shadows ?? source.shadows;\n  this.distanceDisplayCondition =\n    this.distanceDisplayCondition ?? source.distanceDisplayCondition;\n};\nexport default WallGraphics;\n","import Color from \"../Core/Color.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ColorMaterialProperty from \"./ColorMaterialProperty.js\";\nimport createPropertyDescriptor from \"./createPropertyDescriptor.js\";\nimport ImageMaterialProperty from \"./ImageMaterialProperty.js\";\n\nfunction createMaterialProperty(value) {\n  if (value instanceof Color) {\n    return new ColorMaterialProperty(value);\n  }\n\n  if (\n    typeof value === \"string\" ||\n    value instanceof Resource ||\n    value instanceof HTMLCanvasElement ||\n    value instanceof HTMLVideoElement\n  ) {\n    const result = new ImageMaterialProperty();\n    result.image = value;\n    return result;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(`Unable to infer material type: ${value}`);\n  //>>includeEnd('debug');\n}\n\n/**\n * @private\n */\nfunction createMaterialPropertyDescriptor(name, configurable) {\n  return createPropertyDescriptor(name, configurable, createMaterialProperty);\n}\nexport default createMaterialPropertyDescriptor;\n","import defined from \"../Core/defined.js\";\nimport ConstantProperty from \"./ConstantProperty.js\";\n\nfunction createProperty(\n  name,\n  privateName,\n  subscriptionName,\n  configurable,\n  createPropertyCallback,\n) {\n  return {\n    configurable: configurable,\n    get: function () {\n      return this[privateName];\n    },\n    set: function (value) {\n      const oldValue = this[privateName];\n      const subscription = this[subscriptionName];\n      if (defined(subscription)) {\n        subscription();\n        this[subscriptionName] = undefined;\n      }\n\n      const hasValue = value !== undefined;\n      if (\n        hasValue &&\n        (!defined(value) || !defined(value.getValue)) &&\n        defined(createPropertyCallback)\n      ) {\n        value = createPropertyCallback(value);\n      }\n\n      if (oldValue !== value) {\n        this[privateName] = value;\n        this._definitionChanged.raiseEvent(this, name, value, oldValue);\n      }\n\n      if (defined(value) && defined(value.definitionChanged)) {\n        this[subscriptionName] = value.definitionChanged.addEventListener(\n          function () {\n            this._definitionChanged.raiseEvent(this, name, value, value);\n          },\n          this,\n        );\n      }\n    },\n  };\n}\n\nfunction createConstantProperty(value) {\n  return new ConstantProperty(value);\n}\n\n/**\n * Used to consistently define all DataSources graphics objects.\n * This is broken into two functions because the Chrome profiler does a better\n * job of optimizing lookups if it notices that the string is constant throughout the function.\n * @private\n */\nfunction createPropertyDescriptor(name, configurable, createPropertyCallback) {\n  //Safari 8.0.3 has a JavaScript bug that causes it to confuse two variables and treat them as the same.\n  //The two extra toString calls work around the issue.\n  return createProperty(\n    name,\n    `_${name.toString()}`,\n    `_${name.toString()}Subscription`,\n    configurable ?? false,\n    createPropertyCallback ?? createConstantProperty,\n  );\n}\nexport default createPropertyDescriptor;\n","import createPropertyDescriptor from \"./createPropertyDescriptor.js\";\n\nfunction createRawProperty(value) {\n  return value;\n}\n\n/**\n * @private\n */\nfunction createRawPropertyDescriptor(name, configurable) {\n  return createPropertyDescriptor(name, configurable, createRawProperty);\n}\nexport default createRawPropertyDescriptor;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Iso8601 from \"../Core/Iso8601.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ReferenceFrame from \"../Core/ReferenceFrame.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TimeInterval from \"../Core/TimeInterval.js\";\nimport TimeIntervalCollection from \"../Core/TimeIntervalCollection.js\";\nimport HeightReference from \"../Scene/HeightReference.js\";\nimport HorizontalOrigin from \"../Scene/HorizontalOrigin.js\";\nimport VerticalOrigin from \"../Scene/VerticalOrigin.js\";\nimport {\n  configure,\n  BlobReader,\n  BlobWriter,\n  TextReader,\n  ZipWriter,\n} from \"@zip.js/zip.js/lib/zip-core.js\";\nimport BillboardGraphics from \"./BillboardGraphics.js\";\nimport CompositePositionProperty from \"./CompositePositionProperty.js\";\nimport ModelGraphics from \"./ModelGraphics.js\";\nimport RectangleGraphics from \"./RectangleGraphics.js\";\nimport SampledPositionProperty from \"./SampledPositionProperty.js\";\nimport SampledProperty from \"./SampledProperty.js\";\nimport ScaledPositionProperty from \"./ScaledPositionProperty.js\";\n\nconst BILLBOARD_SIZE = 32;\nconst kmlNamespace = \"http://www.opengis.net/kml/2.2\";\nconst gxNamespace = \"http://www.google.com/kml/ext/2.2\";\nconst xmlnsNamespace = \"http://www.w3.org/2000/xmlns/\";\n\n//\n// Handles files external to the KML (eg. textures and models)\n//\nfunction ExternalFileHandler(modelCallback) {\n  this._files = {};\n  this._promises = [];\n  this._count = 0;\n  this._modelCallback = modelCallback;\n}\n\nconst imageTypeRegex = /^data:image\\/([^,;]+)/;\nExternalFileHandler.prototype.texture = function (texture) {\n  const that = this;\n  let filename;\n\n  if (typeof texture === \"string\" || texture instanceof Resource) {\n    texture = Resource.createIfNeeded(texture);\n    if (!texture.isDataUri) {\n      return texture.url;\n    }\n\n    // If its a data URI try and get the correct extension and then fetch the blob\n    const regexResult = texture.url.match(imageTypeRegex);\n    filename = `texture_${++this._count}`;\n    if (defined(regexResult)) {\n      filename += `.${regexResult[1]}`;\n    }\n\n    const promise = texture.fetchBlob().then(function (blob) {\n      that._files[filename] = blob;\n    });\n\n    this._promises.push(promise);\n\n    return filename;\n  }\n\n  if (texture instanceof HTMLCanvasElement) {\n    filename = `texture_${++this._count}.png`;\n    const promise = new Promise((resolve) => {\n      texture.toBlob(function (blob) {\n        that._files[filename] = blob;\n        resolve();\n      });\n    });\n    this._promises.push(promise);\n\n    return filename;\n  }\n\n  return \"\";\n};\n\nfunction getModelBlobHander(that, filename) {\n  return function (blob) {\n    that._files[filename] = blob;\n  };\n}\n\nExternalFileHandler.prototype.model = function (model, time) {\n  const modelCallback = this._modelCallback;\n  if (!defined(modelCallback)) {\n    throw new RuntimeError(\n      \"Encountered a model entity while exporting to KML, but no model callback was supplied.\",\n    );\n  }\n\n  const externalFiles = {};\n  const url = modelCallback(model, time, externalFiles);\n\n  // Iterate through external files and add them to our list once the promise resolves\n  for (const filename in externalFiles) {\n    if (externalFiles.hasOwnProperty(filename)) {\n      const promise = Promise.resolve(externalFiles[filename]);\n      this._promises.push(promise);\n\n      promise.then(getModelBlobHander(this, filename));\n    }\n  }\n\n  return url;\n};\n\nObject.defineProperties(ExternalFileHandler.prototype, {\n  promise: {\n    get: function () {\n      return Promise.all(this._promises);\n    },\n  },\n  files: {\n    get: function () {\n      return this._files;\n    },\n  },\n});\n\n//\n// Handles getting values from properties taking the desired time and default values into account\n//\nfunction ValueGetter(time) {\n  this._time = time;\n}\n\nValueGetter.prototype.get = function (property, defaultVal, result) {\n  let value;\n  if (defined(property)) {\n    value = defined(property.getValue)\n      ? property.getValue(this._time, result)\n      : property;\n  }\n\n  return value ?? defaultVal;\n};\n\nValueGetter.prototype.getColor = function (property, defaultVal) {\n  const result = this.get(property, defaultVal);\n  if (defined(result)) {\n    return colorToString(result);\n  }\n};\n\nValueGetter.prototype.getMaterialType = function (property) {\n  if (!defined(property)) {\n    return;\n  }\n\n  return property.getType(this._time);\n};\n\n//\n// Caches styles so we don't generate a ton of duplicate styles\n//\nfunction StyleCache() {\n  this._ids = {};\n  this._styles = {};\n  this._count = 0;\n}\n\nStyleCache.prototype.get = function (element) {\n  const ids = this._ids;\n  const key = element.innerHTML;\n  if (defined(ids[key])) {\n    return ids[key];\n  }\n\n  let styleId = `style-${++this._count}`;\n  element.setAttribute(\"id\", styleId);\n\n  // Store with #\n  styleId = `#${styleId}`;\n  ids[key] = styleId;\n  this._styles[key] = element;\n\n  return styleId;\n};\n\nStyleCache.prototype.save = function (parentElement) {\n  const styles = this._styles;\n\n  const firstElement = parentElement.childNodes[0];\n  for (const key in styles) {\n    if (styles.hasOwnProperty(key)) {\n      parentElement.insertBefore(styles[key], firstElement);\n    }\n  }\n};\n\n//\n// Manages the generation of IDs because an entity may have geometry and a Folder for children\n//\nfunction IdManager() {\n  this._ids = {};\n}\n\nIdManager.prototype.get = function (id) {\n  if (!defined(id)) {\n    return this.get(createGuid());\n  }\n\n  const ids = this._ids;\n  if (!defined(ids[id])) {\n    ids[id] = 0;\n    return id;\n  }\n\n  return `${id.toString()}-${++ids[id]}`;\n};\n\n/**\n * @typedef exportKmlResultKml\n * @type {object}\n * @property {string} kml The generated KML.\n * @property {Object<string, Blob>} externalFiles An object dictionary of external files\n */\n\n/**\n * @typedef exportKmlResultKmz\n * @type {object}\n * @property {Blob} kmz The generated kmz file.\n */\n\n/**\n * Exports an EntityCollection as a KML document. Only Point, Billboard, Model, Path, Polygon, Polyline geometries\n * will be exported. Note that there is not a 1 to 1 mapping of Entity properties to KML Feature properties. For\n * example, entity properties that are time dynamic but cannot be dynamic in KML are exported with their values at\n * options.time or the beginning of the EntityCollection's time interval if not specified. For time-dynamic properties\n * that are supported in KML, we use the samples if it is a {@link SampledProperty} otherwise we sample the value using\n * the options.sampleDuration. Point, Billboard, Model and Path geometries with time-dynamic positions will be exported\n * as gx:Track Features. Not all Materials are representable in KML, so for more advanced Materials just the primary\n * color is used. Canvas objects are exported as PNG images.\n *\n * @function exportKml\n *\n * @param {object} options An object with the following properties:\n * @param {EntityCollection} options.entities The EntityCollection to export as KML.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid for the output file.\n * @param {exportKmlModelCallback} [options.modelCallback] A callback that will be called with a {@link ModelGraphics} instance and should return the URI to use in the KML. Required if a model exists in the entity collection.\n * @param {JulianDate} [options.time=entities.computeAvailability().start] The time value to use to get properties that are not time varying in KML.\n * @param {TimeInterval} [options.defaultAvailability=entities.computeAvailability()] The interval that will be sampled if an entity doesn't have an availability.\n * @param {number} [options.sampleDuration=60] The number of seconds to sample properties that are varying in KML.\n * @param {boolean} [options.kmz=false] If true KML and external files will be compressed into a kmz file.\n *\n * @returns {Promise<exportKmlResultKml|exportKmlResultKmz>} A promise that resolved to an object containing the KML string and a dictionary of external file blobs, or a kmz file as a blob if options.kmz is true.\n * @demo {@link https://sandcastle.cesium.com/index.html?id=export-kml|Cesium Sandcastle KML Export Demo}\n * @example\n * Cesium.exportKml({\n *      entities: entityCollection\n *  })\n *   .then(function(result) {\n *     // The XML string is in result.kml\n *\n *     const externalFiles = result.externalFiles\n *     for(const file in externalFiles) {\n *       // file is the name of the file used in the KML document as the href\n *       // externalFiles[file] is a blob with the contents of the file\n *     }\n *   });\n *\n */\nfunction exportKml(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const entities = options.entities;\n  const kmz = options.kmz ?? false;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(entities)) {\n    throw new DeveloperError(\"entities is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // Get the state that is passed around during the recursion\n  // This is separated out for testing.\n  const state = exportKml._createState(options);\n\n  // Filter EntityCollection so we only have top level entities\n  const rootEntities = entities.values.filter(function (entity) {\n    return !defined(entity.parent);\n  });\n\n  // Add the <Document>\n  const kmlDoc = state.kmlDoc;\n  const kmlElement = kmlDoc.documentElement;\n  kmlElement.setAttributeNS(xmlnsNamespace, \"xmlns:gx\", gxNamespace);\n  const kmlDocumentElement = kmlDoc.createElement(\"Document\");\n  kmlElement.appendChild(kmlDocumentElement);\n\n  // Create the KML Hierarchy\n  recurseEntities(state, kmlDocumentElement, rootEntities);\n\n  // Write out the <Style> elements\n  state.styleCache.save(kmlDocumentElement);\n\n  // Once all the blobs have resolved return the KML string along with the blob collection\n  const externalFileHandler = state.externalFileHandler;\n  return externalFileHandler.promise.then(function () {\n    const serializer = new XMLSerializer();\n    const kmlString = serializer.serializeToString(state.kmlDoc);\n    if (kmz) {\n      return createKmz(kmlString, externalFileHandler.files);\n    }\n\n    return {\n      kml: kmlString,\n      externalFiles: externalFileHandler.files,\n    };\n  });\n}\n\nasync function createKmz(kmlString, externalFiles) {\n  const zWorkerUri = buildModuleUrl(\"ThirdParty/Workers/zip-web-worker.js\");\n  const zWasmUri = buildModuleUrl(\"ThirdParty/zip-module.wasm\");\n  configure({\n    workerURI: zWorkerUri,\n    wasmURI: zWasmUri,\n  });\n  const blobWriter = new BlobWriter(\"application/vnd.google-earth.kmz\");\n  const writer = new ZipWriter(blobWriter);\n\n  // We need to only write one file at a time so the zip doesn't get corrupted\n  await writer.add(\"doc.kml\", new TextReader(kmlString));\n  const keys = Object.keys(externalFiles);\n  await addExternalFilesToZip(writer, keys, externalFiles, 0);\n  await writer.close();\n  const blob = await blobWriter.getData();\n  return {\n    kmz: blob,\n  };\n}\n\nasync function addExternalFilesToZip(writer, keys, externalFiles, index) {\n  if (keys.length === index) {\n    return;\n  }\n  const filename = keys[index];\n  await writer.add(filename, new BlobReader(externalFiles[filename]));\n  return addExternalFilesToZip(writer, keys, externalFiles, index + 1);\n}\n\nexportKml._createState = function (options) {\n  const entities = options.entities;\n\n  const styleCache = new StyleCache();\n\n  // Use the start time as the default because just in case they define\n  //  properties with an interval even if they don't change.\n  const entityAvailability = entities.computeAvailability();\n  const time = defined(options.time) ? options.time : entityAvailability.start;\n\n  // Figure out how we will sample dynamic position properties\n  let defaultAvailability = options.defaultAvailability ?? entityAvailability;\n  const sampleDuration = options.sampleDuration ?? 60;\n\n  // Make sure we don't have infinite availability if we need to sample\n  if (defaultAvailability.start === Iso8601.MINIMUM_VALUE) {\n    if (defaultAvailability.stop === Iso8601.MAXIMUM_VALUE) {\n      // Infinite, so just use the default\n      defaultAvailability = new TimeInterval();\n    } else {\n      // No start time, so just sample 10 times before the stop\n      JulianDate.addSeconds(\n        defaultAvailability.stop,\n        -10 * sampleDuration,\n        defaultAvailability.start,\n      );\n    }\n  } else if (defaultAvailability.stop === Iso8601.MAXIMUM_VALUE) {\n    // No stop time, so just sample 10 times after the start\n    JulianDate.addSeconds(\n      defaultAvailability.start,\n      10 * sampleDuration,\n      defaultAvailability.stop,\n    );\n  }\n\n  const externalFileHandler = new ExternalFileHandler(options.modelCallback);\n\n  const kmlDoc = document.implementation.createDocument(kmlNamespace, \"kml\");\n  return {\n    kmlDoc: kmlDoc,\n    ellipsoid: options.ellipsoid ?? Ellipsoid.default,\n    idManager: new IdManager(),\n    styleCache: styleCache,\n    externalFileHandler: externalFileHandler,\n    time: time,\n    valueGetter: new ValueGetter(time),\n    sampleDuration: sampleDuration,\n    // Wrap it in a TimeIntervalCollection because that is what entity.availability is\n    defaultAvailability: new TimeIntervalCollection([defaultAvailability]),\n  };\n};\n\nfunction recurseEntities(state, parentNode, entities) {\n  const kmlDoc = state.kmlDoc;\n  const styleCache = state.styleCache;\n  const valueGetter = state.valueGetter;\n  const idManager = state.idManager;\n\n  const count = entities.length;\n  let overlays;\n  let geometries;\n  let styles;\n  for (let i = 0; i < count; ++i) {\n    const entity = entities[i];\n    overlays = [];\n    geometries = [];\n    styles = [];\n\n    createPoint(state, entity, geometries, styles);\n    createLineString(state, entity.polyline, geometries, styles);\n    createPolygon(state, entity.rectangle, geometries, styles, overlays);\n    createPolygon(state, entity.polygon, geometries, styles, overlays);\n    createModel(state, entity, entity.model, geometries, styles);\n\n    let timeSpan;\n    const availability = entity.availability;\n    if (defined(availability)) {\n      timeSpan = kmlDoc.createElement(\"TimeSpan\");\n\n      if (!JulianDate.equals(availability.start, Iso8601.MINIMUM_VALUE)) {\n        timeSpan.appendChild(\n          createBasicElementWithText(\n            kmlDoc,\n            \"begin\",\n            JulianDate.toIso8601(availability.start),\n          ),\n        );\n      }\n\n      if (!JulianDate.equals(availability.stop, Iso8601.MAXIMUM_VALUE)) {\n        timeSpan.appendChild(\n          createBasicElementWithText(\n            kmlDoc,\n            \"end\",\n            JulianDate.toIso8601(availability.stop),\n          ),\n        );\n      }\n    }\n\n    for (let overlayIndex = 0; overlayIndex < overlays.length; ++overlayIndex) {\n      const overlay = overlays[overlayIndex];\n\n      overlay.setAttribute(\"id\", idManager.get(entity.id));\n      overlay.appendChild(\n        createBasicElementWithText(kmlDoc, \"name\", entity.name),\n      );\n      overlay.appendChild(\n        createBasicElementWithText(kmlDoc, \"visibility\", entity.show),\n      );\n      overlay.appendChild(\n        createBasicElementWithText(kmlDoc, \"description\", entity.description),\n      );\n\n      if (defined(timeSpan)) {\n        overlay.appendChild(timeSpan);\n      }\n\n      parentNode.appendChild(overlay);\n    }\n\n    const geometryCount = geometries.length;\n    if (geometryCount > 0) {\n      const placemark = kmlDoc.createElement(\"Placemark\");\n      placemark.setAttribute(\"id\", idManager.get(entity.id));\n\n      let name = entity.name;\n      const labelGraphics = entity.label;\n      if (defined(labelGraphics)) {\n        const labelStyle = kmlDoc.createElement(\"LabelStyle\");\n\n        // KML only shows the name as a label, so just change the name if we need to show a label\n        const text = valueGetter.get(labelGraphics.text);\n        name = defined(text) && text.length > 0 ? text : name;\n\n        const color = valueGetter.getColor(labelGraphics.fillColor);\n        if (defined(color)) {\n          labelStyle.appendChild(\n            createBasicElementWithText(kmlDoc, \"color\", color),\n          );\n          labelStyle.appendChild(\n            createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\"),\n          );\n        }\n\n        const scale = valueGetter.get(labelGraphics.scale);\n        if (defined(scale)) {\n          labelStyle.appendChild(\n            createBasicElementWithText(kmlDoc, \"scale\", scale),\n          );\n        }\n\n        styles.push(labelStyle);\n      }\n\n      placemark.appendChild(createBasicElementWithText(kmlDoc, \"name\", name));\n      placemark.appendChild(\n        createBasicElementWithText(kmlDoc, \"visibility\", entity.show),\n      );\n      placemark.appendChild(\n        createBasicElementWithText(kmlDoc, \"description\", entity.description),\n      );\n\n      if (defined(timeSpan)) {\n        placemark.appendChild(timeSpan);\n      }\n\n      parentNode.appendChild(placemark);\n\n      const styleCount = styles.length;\n      if (styleCount > 0) {\n        const style = kmlDoc.createElement(\"Style\");\n        for (let styleIndex = 0; styleIndex < styleCount; ++styleIndex) {\n          style.appendChild(styles[styleIndex]);\n        }\n\n        placemark.appendChild(\n          createBasicElementWithText(kmlDoc, \"styleUrl\", styleCache.get(style)),\n        );\n      }\n\n      if (geometries.length === 1) {\n        placemark.appendChild(geometries[0]);\n      } else if (geometries.length > 1) {\n        const multigeometry = kmlDoc.createElement(\"MultiGeometry\");\n        for (\n          let geometryIndex = 0;\n          geometryIndex < geometryCount;\n          ++geometryIndex\n        ) {\n          multigeometry.appendChild(geometries[geometryIndex]);\n        }\n        placemark.appendChild(multigeometry);\n      }\n    }\n\n    const children = entity._children;\n    if (children.length > 0) {\n      const folderNode = kmlDoc.createElement(\"Folder\");\n      folderNode.setAttribute(\"id\", idManager.get(entity.id));\n      folderNode.appendChild(\n        createBasicElementWithText(kmlDoc, \"name\", entity.name),\n      );\n      folderNode.appendChild(\n        createBasicElementWithText(kmlDoc, \"visibility\", entity.show),\n      );\n      folderNode.appendChild(\n        createBasicElementWithText(kmlDoc, \"description\", entity.description),\n      );\n\n      parentNode.appendChild(folderNode);\n\n      recurseEntities(state, folderNode, children);\n    }\n  }\n}\n\nconst scratchCartesian3 = new Cartesian3();\nconst scratchCartographic = new Cartographic();\nconst scratchJulianDate = new JulianDate();\n\nfunction createPoint(state, entity, geometries, styles) {\n  const kmlDoc = state.kmlDoc;\n  const ellipsoid = state.ellipsoid;\n  const valueGetter = state.valueGetter;\n\n  const pointGraphics = entity.billboard ?? entity.point;\n  if (!defined(pointGraphics) && !defined(entity.path)) {\n    return;\n  }\n\n  // If the point isn't constant then create gx:Track or gx:MultiTrack\n  const entityPositionProperty = entity.position;\n  if (!entityPositionProperty.isConstant) {\n    createTracks(state, entity, pointGraphics, geometries, styles);\n    return;\n  }\n\n  valueGetter.get(entityPositionProperty, undefined, scratchCartesian3);\n  const coordinates = createBasicElementWithText(\n    kmlDoc,\n    \"coordinates\",\n    getCoordinates(scratchCartesian3, ellipsoid),\n  );\n\n  const pointGeometry = kmlDoc.createElement(\"Point\");\n\n  // Set altitude mode\n  const altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n  altitudeMode.appendChild(\n    getAltitudeMode(state, pointGraphics.heightReference),\n  );\n  pointGeometry.appendChild(altitudeMode);\n\n  pointGeometry.appendChild(coordinates);\n  geometries.push(pointGeometry);\n\n  // Create style\n  const iconStyle =\n    pointGraphics instanceof BillboardGraphics\n      ? createIconStyleFromBillboard(state, pointGraphics)\n      : createIconStyleFromPoint(state, pointGraphics);\n  styles.push(iconStyle);\n}\n\nfunction createTracks(state, entity, pointGraphics, geometries, styles) {\n  const kmlDoc = state.kmlDoc;\n  const ellipsoid = state.ellipsoid;\n  const valueGetter = state.valueGetter;\n\n  let intervals;\n  const entityPositionProperty = entity.position;\n  let useEntityPositionProperty = true;\n  if (entityPositionProperty instanceof CompositePositionProperty) {\n    intervals = entityPositionProperty.intervals;\n    useEntityPositionProperty = false;\n  } else {\n    intervals = entity.availability ?? state.defaultAvailability;\n  }\n\n  const isModel = pointGraphics instanceof ModelGraphics;\n\n  let i, j, times;\n  const tracks = [];\n  for (i = 0; i < intervals.length; ++i) {\n    const interval = intervals.get(i);\n    let positionProperty = useEntityPositionProperty\n      ? entityPositionProperty\n      : interval.data;\n\n    const trackAltitudeMode = kmlDoc.createElement(\"altitudeMode\");\n    // This is something that KML importing uses to handle clampToGround,\n    //  so just extract the internal property and set the altitudeMode.\n    if (positionProperty instanceof ScaledPositionProperty) {\n      positionProperty = positionProperty._value;\n      trackAltitudeMode.appendChild(\n        getAltitudeMode(state, HeightReference.CLAMP_TO_GROUND),\n      );\n    } else if (defined(pointGraphics)) {\n      trackAltitudeMode.appendChild(\n        getAltitudeMode(state, pointGraphics.heightReference),\n      );\n    } else {\n      // Path graphics only, which has no height reference\n      trackAltitudeMode.appendChild(\n        getAltitudeMode(state, HeightReference.NONE),\n      );\n    }\n\n    const positionTimes = [];\n    const positionValues = [];\n\n    if (positionProperty.isConstant) {\n      valueGetter.get(positionProperty, undefined, scratchCartesian3);\n      const constCoordinates = createBasicElementWithText(\n        kmlDoc,\n        \"coordinates\",\n        getCoordinates(scratchCartesian3, ellipsoid),\n      );\n\n      // This interval is constant so add a track with the same position\n      positionTimes.push(JulianDate.toIso8601(interval.start));\n      positionValues.push(constCoordinates);\n      positionTimes.push(JulianDate.toIso8601(interval.stop));\n      positionValues.push(constCoordinates);\n    } else if (positionProperty instanceof SampledPositionProperty) {\n      times = positionProperty._property._times;\n\n      for (j = 0; j < times.length; ++j) {\n        positionTimes.push(JulianDate.toIso8601(times[j]));\n        positionProperty.getValueInReferenceFrame(\n          times[j],\n          ReferenceFrame.FIXED,\n          scratchCartesian3,\n        );\n        positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n      }\n    } else if (positionProperty instanceof SampledProperty) {\n      times = positionProperty._times;\n      const values = positionProperty._values;\n\n      for (j = 0; j < times.length; ++j) {\n        positionTimes.push(JulianDate.toIso8601(times[j]));\n        Cartesian3.fromArray(values, j * 3, scratchCartesian3);\n        positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n      }\n    } else {\n      const duration = state.sampleDuration;\n      interval.start.clone(scratchJulianDate);\n      if (!interval.isStartIncluded) {\n        JulianDate.addSeconds(scratchJulianDate, duration, scratchJulianDate);\n      }\n\n      const stopDate = interval.stop;\n      while (JulianDate.lessThan(scratchJulianDate, stopDate)) {\n        positionProperty.getValue(scratchJulianDate, scratchCartesian3);\n\n        positionTimes.push(JulianDate.toIso8601(scratchJulianDate));\n        positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n\n        JulianDate.addSeconds(scratchJulianDate, duration, scratchJulianDate);\n      }\n\n      if (\n        interval.isStopIncluded &&\n        JulianDate.equals(scratchJulianDate, stopDate)\n      ) {\n        positionProperty.getValue(scratchJulianDate, scratchCartesian3);\n\n        positionTimes.push(JulianDate.toIso8601(scratchJulianDate));\n        positionValues.push(getCoordinates(scratchCartesian3, ellipsoid));\n      }\n    }\n\n    const trackGeometry = kmlDoc.createElementNS(gxNamespace, \"Track\");\n    trackGeometry.appendChild(trackAltitudeMode);\n\n    for (let k = 0; k < positionTimes.length; ++k) {\n      const when = createBasicElementWithText(kmlDoc, \"when\", positionTimes[k]);\n      const coord = createBasicElementWithText(\n        kmlDoc,\n        \"coord\",\n        positionValues[k],\n        gxNamespace,\n      );\n\n      trackGeometry.appendChild(when);\n      trackGeometry.appendChild(coord);\n    }\n\n    if (isModel) {\n      trackGeometry.appendChild(createModelGeometry(state, pointGraphics));\n    }\n\n    tracks.push(trackGeometry);\n  }\n\n  // If one track, then use it otherwise combine into a multitrack\n  if (tracks.length === 1) {\n    geometries.push(tracks[0]);\n  } else if (tracks.length > 1) {\n    const multiTrackGeometry = kmlDoc.createElementNS(\n      gxNamespace,\n      \"MultiTrack\",\n    );\n\n    for (i = 0; i < tracks.length; ++i) {\n      multiTrackGeometry.appendChild(tracks[i]);\n    }\n\n    geometries.push(multiTrackGeometry);\n  }\n\n  // Create style\n  if (defined(pointGraphics) && !isModel) {\n    const iconStyle =\n      pointGraphics instanceof BillboardGraphics\n        ? createIconStyleFromBillboard(state, pointGraphics)\n        : createIconStyleFromPoint(state, pointGraphics);\n    styles.push(iconStyle);\n  }\n\n  // See if we have a line that needs to be drawn\n  const path = entity.path;\n  if (defined(path)) {\n    const width = valueGetter.get(path.width);\n    const material = path.material;\n    if (defined(material) || defined(width)) {\n      const lineStyle = kmlDoc.createElement(\"LineStyle\");\n      if (defined(width)) {\n        lineStyle.appendChild(\n          createBasicElementWithText(kmlDoc, \"width\", width),\n        );\n      }\n\n      processMaterial(state, material, lineStyle);\n      styles.push(lineStyle);\n    }\n  }\n}\n\nfunction createIconStyleFromPoint(state, pointGraphics) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n\n  const iconStyle = kmlDoc.createElement(\"IconStyle\");\n\n  const color = valueGetter.getColor(pointGraphics.color);\n  if (defined(color)) {\n    iconStyle.appendChild(createBasicElementWithText(kmlDoc, \"color\", color));\n    iconStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\"),\n    );\n  }\n\n  const pixelSize = valueGetter.get(pointGraphics.pixelSize);\n  if (defined(pixelSize)) {\n    iconStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"scale\", pixelSize / BILLBOARD_SIZE),\n    );\n  }\n\n  return iconStyle;\n}\n\nfunction createIconStyleFromBillboard(state, billboardGraphics) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n  const externalFileHandler = state.externalFileHandler;\n\n  const iconStyle = kmlDoc.createElement(\"IconStyle\");\n\n  let image = valueGetter.get(billboardGraphics.image);\n  if (defined(image)) {\n    image = externalFileHandler.texture(image);\n\n    const icon = kmlDoc.createElement(\"Icon\");\n    icon.appendChild(createBasicElementWithText(kmlDoc, \"href\", image));\n\n    const imageSubRegion = valueGetter.get(billboardGraphics.imageSubRegion);\n    if (defined(imageSubRegion)) {\n      icon.appendChild(\n        createBasicElementWithText(kmlDoc, \"x\", imageSubRegion.x, gxNamespace),\n      );\n      icon.appendChild(\n        createBasicElementWithText(kmlDoc, \"y\", imageSubRegion.y, gxNamespace),\n      );\n      icon.appendChild(\n        createBasicElementWithText(\n          kmlDoc,\n          \"w\",\n          imageSubRegion.width,\n          gxNamespace,\n        ),\n      );\n      icon.appendChild(\n        createBasicElementWithText(\n          kmlDoc,\n          \"h\",\n          imageSubRegion.height,\n          gxNamespace,\n        ),\n      );\n    }\n\n    iconStyle.appendChild(icon);\n  }\n\n  const color = valueGetter.getColor(billboardGraphics.color);\n  if (defined(color)) {\n    iconStyle.appendChild(createBasicElementWithText(kmlDoc, \"color\", color));\n    iconStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\"),\n    );\n  }\n\n  let scale = valueGetter.get(billboardGraphics.scale);\n  if (defined(scale)) {\n    iconStyle.appendChild(createBasicElementWithText(kmlDoc, \"scale\", scale));\n  }\n\n  const pixelOffset = valueGetter.get(billboardGraphics.pixelOffset);\n  if (defined(pixelOffset)) {\n    scale = scale ?? 1.0;\n\n    Cartesian2.divideByScalar(pixelOffset, scale, pixelOffset);\n\n    const width = valueGetter.get(billboardGraphics.width, BILLBOARD_SIZE);\n    const height = valueGetter.get(billboardGraphics.height, BILLBOARD_SIZE);\n\n    // KML Hotspots are from the bottom left, but we work from the top left\n\n    // Move to left\n    const horizontalOrigin = valueGetter.get(\n      billboardGraphics.horizontalOrigin,\n      HorizontalOrigin.CENTER,\n    );\n    if (horizontalOrigin === HorizontalOrigin.CENTER) {\n      pixelOffset.x -= width * 0.5;\n    } else if (horizontalOrigin === HorizontalOrigin.RIGHT) {\n      pixelOffset.x -= width;\n    }\n\n    // Move to bottom\n    const verticalOrigin = valueGetter.get(\n      billboardGraphics.verticalOrigin,\n      VerticalOrigin.CENTER,\n    );\n    if (verticalOrigin === VerticalOrigin.TOP) {\n      pixelOffset.y += height;\n    } else if (verticalOrigin === VerticalOrigin.CENTER) {\n      pixelOffset.y += height * 0.5;\n    }\n\n    const hotSpot = kmlDoc.createElement(\"hotSpot\");\n    hotSpot.setAttribute(\"x\", -pixelOffset.x);\n    hotSpot.setAttribute(\"y\", pixelOffset.y);\n    hotSpot.setAttribute(\"xunits\", \"pixels\");\n    hotSpot.setAttribute(\"yunits\", \"pixels\");\n\n    iconStyle.appendChild(hotSpot);\n  }\n\n  // We can only specify heading so if axis isn't Z, then we skip the rotation\n  // GE treats a heading of zero as no heading but can still point north using a 360 degree angle\n  let rotation = valueGetter.get(billboardGraphics.rotation);\n  const alignedAxis = valueGetter.get(billboardGraphics.alignedAxis);\n  if (defined(rotation) && Cartesian3.equals(Cartesian3.UNIT_Z, alignedAxis)) {\n    rotation = CesiumMath.toDegrees(-rotation);\n    if (rotation === 0) {\n      rotation = 360;\n    }\n\n    iconStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"heading\", rotation),\n    );\n  }\n\n  return iconStyle;\n}\n\nfunction createLineString(state, polylineGraphics, geometries, styles) {\n  const kmlDoc = state.kmlDoc;\n  const ellipsoid = state.ellipsoid;\n  const valueGetter = state.valueGetter;\n\n  if (!defined(polylineGraphics)) {\n    return;\n  }\n\n  const lineStringGeometry = kmlDoc.createElement(\"LineString\");\n\n  // Set altitude mode\n  const altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n  const clampToGround = valueGetter.get(polylineGraphics.clampToGround, false);\n  let altitudeModeText;\n  if (clampToGround) {\n    lineStringGeometry.appendChild(\n      createBasicElementWithText(kmlDoc, \"tessellate\", true),\n    );\n    altitudeModeText = kmlDoc.createTextNode(\"clampToGround\");\n  } else {\n    altitudeModeText = kmlDoc.createTextNode(\"absolute\");\n  }\n  altitudeMode.appendChild(altitudeModeText);\n  lineStringGeometry.appendChild(altitudeMode);\n\n  // Set coordinates\n  const positionsProperty = polylineGraphics.positions;\n  const cartesians = valueGetter.get(positionsProperty);\n  const coordinates = createBasicElementWithText(\n    kmlDoc,\n    \"coordinates\",\n    getCoordinates(cartesians, ellipsoid),\n  );\n  lineStringGeometry.appendChild(coordinates);\n\n  // Set draw order\n  const zIndex = valueGetter.get(polylineGraphics.zIndex);\n  if (clampToGround && defined(zIndex)) {\n    lineStringGeometry.appendChild(\n      createBasicElementWithText(kmlDoc, \"drawOrder\", zIndex, gxNamespace),\n    );\n  }\n\n  geometries.push(lineStringGeometry);\n\n  // Create style\n  const lineStyle = kmlDoc.createElement(\"LineStyle\");\n\n  const width = valueGetter.get(polylineGraphics.width);\n  if (defined(width)) {\n    lineStyle.appendChild(createBasicElementWithText(kmlDoc, \"width\", width));\n  }\n\n  processMaterial(state, polylineGraphics.material, lineStyle);\n\n  styles.push(lineStyle);\n}\n\nfunction getRectangleBoundaries(state, rectangleGraphics, extrudedHeight) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n\n  let height = valueGetter.get(rectangleGraphics.height, 0.0);\n\n  if (extrudedHeight > 0) {\n    // We extrude up and KML extrudes down, so if we extrude, set the polygon height to\n    // the extruded height so KML will look similar to Cesium\n    height = extrudedHeight;\n  }\n\n  const coordinatesProperty = rectangleGraphics.coordinates;\n  const rectangle = valueGetter.get(coordinatesProperty);\n\n  const coordinateStrings = [];\n  const cornerFunction = [\n    Rectangle.northeast,\n    Rectangle.southeast,\n    Rectangle.southwest,\n    Rectangle.northwest,\n  ];\n\n  for (let i = 0; i < 4; ++i) {\n    cornerFunction[i](rectangle, scratchCartographic);\n    coordinateStrings.push(\n      `${CesiumMath.toDegrees(\n        scratchCartographic.longitude,\n      )},${CesiumMath.toDegrees(scratchCartographic.latitude)},${height}`,\n    );\n  }\n\n  const coordinates = createBasicElementWithText(\n    kmlDoc,\n    \"coordinates\",\n    coordinateStrings.join(\" \"),\n  );\n\n  const outerBoundaryIs = kmlDoc.createElement(\"outerBoundaryIs\");\n  const linearRing = kmlDoc.createElement(\"LinearRing\");\n  linearRing.appendChild(coordinates);\n  outerBoundaryIs.appendChild(linearRing);\n\n  return [outerBoundaryIs];\n}\n\nfunction getLinearRing(state, positions, height, perPositionHeight) {\n  const kmlDoc = state.kmlDoc;\n  const ellipsoid = state.ellipsoid;\n\n  const coordinateStrings = [];\n  const positionCount = positions.length;\n  for (let i = 0; i < positionCount; ++i) {\n    Cartographic.fromCartesian(positions[i], ellipsoid, scratchCartographic);\n    coordinateStrings.push(\n      `${CesiumMath.toDegrees(\n        scratchCartographic.longitude,\n      )},${CesiumMath.toDegrees(scratchCartographic.latitude)},${\n        perPositionHeight ? scratchCartographic.height : height\n      }`,\n    );\n  }\n\n  const coordinates = createBasicElementWithText(\n    kmlDoc,\n    \"coordinates\",\n    coordinateStrings.join(\" \"),\n  );\n  const linearRing = kmlDoc.createElement(\"LinearRing\");\n  linearRing.appendChild(coordinates);\n\n  return linearRing;\n}\n\nfunction getPolygonBoundaries(state, polygonGraphics, extrudedHeight) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n\n  let height = valueGetter.get(polygonGraphics.height, 0.0);\n  const perPositionHeight = valueGetter.get(\n    polygonGraphics.perPositionHeight,\n    false,\n  );\n\n  if (!perPositionHeight && extrudedHeight > 0) {\n    // We extrude up and KML extrudes down, so if we extrude, set the polygon height to\n    // the extruded height so KML will look similar to Cesium\n    height = extrudedHeight;\n  }\n\n  const boundaries = [];\n  const hierarchyProperty = polygonGraphics.hierarchy;\n  const hierarchy = valueGetter.get(hierarchyProperty);\n\n  // Polygon hierarchy can sometimes just be an array of positions\n  const positions = Array.isArray(hierarchy) ? hierarchy : hierarchy.positions;\n\n  // Polygon boundaries\n  const outerBoundaryIs = kmlDoc.createElement(\"outerBoundaryIs\");\n  outerBoundaryIs.appendChild(\n    getLinearRing(state, positions, height, perPositionHeight),\n  );\n  boundaries.push(outerBoundaryIs);\n\n  // Hole boundaries\n  const holes = hierarchy.holes;\n  if (defined(holes)) {\n    const holeCount = holes.length;\n    for (let i = 0; i < holeCount; ++i) {\n      const innerBoundaryIs = kmlDoc.createElement(\"innerBoundaryIs\");\n      innerBoundaryIs.appendChild(\n        getLinearRing(state, holes[i].positions, height, perPositionHeight),\n      );\n      boundaries.push(innerBoundaryIs);\n    }\n  }\n\n  return boundaries;\n}\n\nfunction createPolygon(state, geometry, geometries, styles, overlays) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n\n  if (!defined(geometry)) {\n    return;\n  }\n\n  // Detect textured quads and use ground overlays instead\n  const isRectangle = geometry instanceof RectangleGraphics;\n  if (\n    isRectangle &&\n    valueGetter.getMaterialType(geometry.material) === \"Image\"\n  ) {\n    createGroundOverlay(state, geometry, overlays);\n    return;\n  }\n\n  const polygonGeometry = kmlDoc.createElement(\"Polygon\");\n\n  const extrudedHeight = valueGetter.get(geometry.extrudedHeight, 0.0);\n  if (extrudedHeight > 0) {\n    polygonGeometry.appendChild(\n      createBasicElementWithText(kmlDoc, \"extrude\", true),\n    );\n  }\n\n  // Set boundaries\n  const boundaries = isRectangle\n    ? getRectangleBoundaries(state, geometry, extrudedHeight)\n    : getPolygonBoundaries(state, geometry, extrudedHeight);\n\n  const boundaryCount = boundaries.length;\n  for (let i = 0; i < boundaryCount; ++i) {\n    polygonGeometry.appendChild(boundaries[i]);\n  }\n\n  // Set altitude mode\n  const altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n  altitudeMode.appendChild(getAltitudeMode(state, geometry.heightReference));\n  polygonGeometry.appendChild(altitudeMode);\n\n  geometries.push(polygonGeometry);\n\n  // Create style\n  const polyStyle = kmlDoc.createElement(\"PolyStyle\");\n\n  const fill = valueGetter.get(geometry.fill, false);\n  if (fill) {\n    polyStyle.appendChild(createBasicElementWithText(kmlDoc, \"fill\", fill));\n  }\n\n  processMaterial(state, geometry.material, polyStyle);\n\n  const outline = valueGetter.get(geometry.outline, false);\n  if (outline) {\n    polyStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"outline\", outline),\n    );\n\n    // Outline uses LineStyle\n    const lineStyle = kmlDoc.createElement(\"LineStyle\");\n\n    const outlineWidth = valueGetter.get(geometry.outlineWidth, 1.0);\n    lineStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"width\", outlineWidth),\n    );\n\n    const outlineColor = valueGetter.getColor(\n      geometry.outlineColor,\n      Color.BLACK,\n    );\n    lineStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"color\", outlineColor),\n    );\n    lineStyle.appendChild(\n      createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\"),\n    );\n\n    styles.push(lineStyle);\n  }\n\n  styles.push(polyStyle);\n}\n\nfunction createGroundOverlay(state, rectangleGraphics, overlays) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n  const externalFileHandler = state.externalFileHandler;\n\n  const groundOverlay = kmlDoc.createElement(\"GroundOverlay\");\n\n  // Set altitude mode\n  const altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n  altitudeMode.appendChild(\n    getAltitudeMode(state, rectangleGraphics.heightReference),\n  );\n  groundOverlay.appendChild(altitudeMode);\n\n  const height = valueGetter.get(rectangleGraphics.height);\n  if (defined(height)) {\n    groundOverlay.appendChild(\n      createBasicElementWithText(kmlDoc, \"altitude\", height),\n    );\n  }\n\n  const rectangle = valueGetter.get(rectangleGraphics.coordinates);\n  const latLonBox = kmlDoc.createElement(\"LatLonBox\");\n  latLonBox.appendChild(\n    createBasicElementWithText(\n      kmlDoc,\n      \"north\",\n      CesiumMath.toDegrees(rectangle.north),\n    ),\n  );\n  latLonBox.appendChild(\n    createBasicElementWithText(\n      kmlDoc,\n      \"south\",\n      CesiumMath.toDegrees(rectangle.south),\n    ),\n  );\n  latLonBox.appendChild(\n    createBasicElementWithText(\n      kmlDoc,\n      \"east\",\n      CesiumMath.toDegrees(rectangle.east),\n    ),\n  );\n  latLonBox.appendChild(\n    createBasicElementWithText(\n      kmlDoc,\n      \"west\",\n      CesiumMath.toDegrees(rectangle.west),\n    ),\n  );\n  groundOverlay.appendChild(latLonBox);\n\n  // We should only end up here if we have an ImageMaterialProperty\n  const material = valueGetter.get(rectangleGraphics.material);\n  const href = externalFileHandler.texture(material.image);\n  const icon = kmlDoc.createElement(\"Icon\");\n  icon.appendChild(createBasicElementWithText(kmlDoc, \"href\", href));\n  groundOverlay.appendChild(icon);\n\n  const color = material.color;\n  if (defined(color)) {\n    groundOverlay.appendChild(\n      createBasicElementWithText(\n        kmlDoc,\n        \"color\",\n        colorToString(material.color),\n      ),\n    );\n  }\n\n  overlays.push(groundOverlay);\n}\n\nfunction createModelGeometry(state, modelGraphics) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n  const externalFileHandler = state.externalFileHandler;\n\n  const modelGeometry = kmlDoc.createElement(\"Model\");\n\n  const scale = valueGetter.get(modelGraphics.scale);\n  if (defined(scale)) {\n    const scaleElement = kmlDoc.createElement(\"scale\");\n    scaleElement.appendChild(createBasicElementWithText(kmlDoc, \"x\", scale));\n    scaleElement.appendChild(createBasicElementWithText(kmlDoc, \"y\", scale));\n    scaleElement.appendChild(createBasicElementWithText(kmlDoc, \"z\", scale));\n    modelGeometry.appendChild(scaleElement);\n  }\n\n  const link = kmlDoc.createElement(\"Link\");\n  const uri = externalFileHandler.model(modelGraphics, state.time);\n\n  link.appendChild(createBasicElementWithText(kmlDoc, \"href\", uri));\n  modelGeometry.appendChild(link);\n\n  return modelGeometry;\n}\n\nfunction createModel(state, entity, modelGraphics, geometries, styles) {\n  const kmlDoc = state.kmlDoc;\n  const ellipsoid = state.ellipsoid;\n  const valueGetter = state.valueGetter;\n\n  if (!defined(modelGraphics)) {\n    return;\n  }\n\n  // If the point isn't constant then create gx:Track or gx:MultiTrack\n  const entityPositionProperty = entity.position;\n  if (!entityPositionProperty.isConstant) {\n    createTracks(state, entity, modelGraphics, geometries, styles);\n    return;\n  }\n\n  const modelGeometry = createModelGeometry(state, modelGraphics);\n\n  // Set altitude mode\n  const altitudeMode = kmlDoc.createElement(\"altitudeMode\");\n  altitudeMode.appendChild(\n    getAltitudeMode(state, modelGraphics.heightReference),\n  );\n  modelGeometry.appendChild(altitudeMode);\n\n  valueGetter.get(entityPositionProperty, undefined, scratchCartesian3);\n  Cartographic.fromCartesian(scratchCartesian3, ellipsoid, scratchCartographic);\n  const location = kmlDoc.createElement(\"Location\");\n  location.appendChild(\n    createBasicElementWithText(\n      kmlDoc,\n      \"longitude\",\n      CesiumMath.toDegrees(scratchCartographic.longitude),\n    ),\n  );\n  location.appendChild(\n    createBasicElementWithText(\n      kmlDoc,\n      \"latitude\",\n      CesiumMath.toDegrees(scratchCartographic.latitude),\n    ),\n  );\n  location.appendChild(\n    createBasicElementWithText(kmlDoc, \"altitude\", scratchCartographic.height),\n  );\n  modelGeometry.appendChild(location);\n\n  geometries.push(modelGeometry);\n}\n\nfunction processMaterial(state, materialProperty, style) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n\n  if (!defined(materialProperty)) {\n    return;\n  }\n\n  const material = valueGetter.get(materialProperty);\n  if (!defined(material)) {\n    return;\n  }\n\n  let color;\n  const type = valueGetter.getMaterialType(materialProperty);\n  let outlineColor;\n  let outlineWidth;\n  switch (type) {\n    case \"Image\":\n      // Image materials are only able to be represented on rectangles, so if we make it\n      //  here we can't texture a generic polygon or polyline in KML, so just use white.\n      color = colorToString(Color.WHITE);\n      break;\n    case \"Color\":\n    case \"Grid\":\n    case \"PolylineGlow\":\n    case \"PolylineArrow\":\n    case \"PolylineDash\":\n      color = colorToString(material.color);\n      break;\n    case \"PolylineOutline\":\n      color = colorToString(material.color);\n\n      outlineColor = colorToString(material.outlineColor);\n      outlineWidth = material.outlineWidth;\n      style.appendChild(\n        createBasicElementWithText(\n          kmlDoc,\n          \"outerColor\",\n          outlineColor,\n          gxNamespace,\n        ),\n      );\n      style.appendChild(\n        createBasicElementWithText(\n          kmlDoc,\n          \"outerWidth\",\n          outlineWidth,\n          gxNamespace,\n        ),\n      );\n      break;\n    case \"Stripe\":\n      color = colorToString(material.oddColor);\n      break;\n  }\n\n  if (defined(color)) {\n    style.appendChild(createBasicElementWithText(kmlDoc, \"color\", color));\n    style.appendChild(\n      createBasicElementWithText(kmlDoc, \"colorMode\", \"normal\"),\n    );\n  }\n}\n\nfunction getAltitudeMode(state, heightReferenceProperty) {\n  const kmlDoc = state.kmlDoc;\n  const valueGetter = state.valueGetter;\n\n  const heightReference = valueGetter.get(\n    heightReferenceProperty,\n    HeightReference.NONE,\n  );\n  let altitudeModeText;\n  switch (heightReference) {\n    case HeightReference.NONE:\n      altitudeModeText = kmlDoc.createTextNode(\"absolute\");\n      break;\n    case HeightReference.CLAMP_TO_GROUND:\n      altitudeModeText = kmlDoc.createTextNode(\"clampToGround\");\n      break;\n    case HeightReference.RELATIVE_TO_GROUND:\n      altitudeModeText = kmlDoc.createTextNode(\"relativeToGround\");\n      break;\n  }\n\n  return altitudeModeText;\n}\n\nfunction getCoordinates(coordinates, ellipsoid) {\n  if (!Array.isArray(coordinates)) {\n    coordinates = [coordinates];\n  }\n\n  const count = coordinates.length;\n  const coordinateStrings = [];\n  for (let i = 0; i < count; ++i) {\n    Cartographic.fromCartesian(coordinates[i], ellipsoid, scratchCartographic);\n    coordinateStrings.push(\n      `${CesiumMath.toDegrees(\n        scratchCartographic.longitude,\n      )},${CesiumMath.toDegrees(scratchCartographic.latitude)},${\n        scratchCartographic.height\n      }`,\n    );\n  }\n\n  return coordinateStrings.join(\" \");\n}\n\nfunction createBasicElementWithText(\n  kmlDoc,\n  elementName,\n  elementValue,\n  namespace,\n) {\n  elementValue = elementValue ?? \"\";\n\n  if (typeof elementValue === \"boolean\") {\n    elementValue = elementValue ? \"1\" : \"0\";\n  }\n\n  // Create element with optional namespace\n  const element = defined(namespace)\n    ? kmlDoc.createElementNS(namespace, elementName)\n    : kmlDoc.createElement(elementName);\n\n  // Wrap value in CDATA section if it contains HTML\n  const text =\n    elementValue === \"string\" && elementValue.indexOf(\"<\") !== -1\n      ? kmlDoc.createCDATASection(elementValue)\n      : kmlDoc.createTextNode(elementValue);\n\n  element.appendChild(text);\n\n  return element;\n}\n\nfunction colorToString(color) {\n  let result = \"\";\n  const bytes = color.toBytes();\n  for (let i = 3; i >= 0; --i) {\n    result +=\n      bytes[i] < 16 ? `0${bytes[i].toString(16)}` : bytes[i].toString(16);\n  }\n\n  return result;\n}\n\n/**\n * Since KML does not support glTF models, this callback is required to specify what URL to use for the model in the KML document.\n * It can also be used to add additional files to the <code>externalFiles</code> object, which is the list of files embedded in the exported KMZ,\n * or otherwise returned with the KML string when exporting.\n *\n * @callback exportKmlModelCallback\n *\n * @param {ModelGraphics} model The ModelGraphics instance for an Entity.\n * @param {JulianDate} time The time that any properties should use to get the value.\n * @param {object} externalFiles An object that maps a filename to a Blob or a Promise that resolves to a Blob.\n * @returns {string} The URL to use for the href in the KML document.\n */\nexport default exportKml;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * If element is a string, look up the element in the DOM by ID.  Otherwise return element.\n *\n * @private\n *\n * @exception {DeveloperError} Element with id \"id\" does not exist in the document.\n */\nfunction getElement(element) {\n  if (typeof element === \"string\") {\n    const foundElement = document.getElementById(element);\n\n    //>>includeStart('debug', pragmas.debug);\n    if (foundElement === null) {\n      throw new DeveloperError(\n        `Element with id \"${element}\" does not exist in the document.`,\n      );\n    }\n    //>>includeEnd('debug');\n\n    element = foundElement;\n  }\n  return element;\n}\nexport default getElement;\n","import defined from \"../Core/defined.js\";\nimport CallbackProperty from \"./CallbackProperty.js\";\nimport GeometryUpdater from \"./GeometryUpdater.js\";\nimport TerrainOffsetProperty from \"./TerrainOffsetProperty.js\";\n\nfunction heightReferenceOnEntityPropertyChanged(\n  entity,\n  propertyName,\n  newValue,\n  oldValue,\n) {\n  GeometryUpdater.prototype._onEntityPropertyChanged.call(\n    this,\n    entity,\n    propertyName,\n    newValue,\n    oldValue,\n  );\n  if (this._observedPropertyNames.indexOf(propertyName) === -1) {\n    return;\n  }\n\n  const geometry = this._entity[this._geometryPropertyName];\n  if (!defined(geometry)) {\n    return;\n  }\n\n  if (defined(this._terrainOffsetProperty)) {\n    this._terrainOffsetProperty.destroy();\n    this._terrainOffsetProperty = undefined;\n  }\n\n  const heightReferenceProperty = geometry.heightReference;\n\n  if (defined(heightReferenceProperty)) {\n    const centerPosition = new CallbackProperty(\n      this._computeCenter.bind(this),\n      !this._dynamic,\n    );\n    this._terrainOffsetProperty = new TerrainOffsetProperty(\n      this._scene,\n      centerPosition,\n      heightReferenceProperty,\n    );\n  }\n}\nexport default heightReferenceOnEntityPropertyChanged;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\n\nconst viewerPositionWCScratch = new Cartesian3();\n\nfunction AutomaticUniform(options) {\n  this._size = options.size;\n  this._datatype = options.datatype;\n  this.getValue = options.getValue;\n}\n\nconst datatypeToGlsl = {};\ndatatypeToGlsl[WebGLConstants.FLOAT] = \"float\";\ndatatypeToGlsl[WebGLConstants.FLOAT_VEC2] = \"vec2\";\ndatatypeToGlsl[WebGLConstants.FLOAT_VEC3] = \"vec3\";\ndatatypeToGlsl[WebGLConstants.FLOAT_VEC4] = \"vec4\";\ndatatypeToGlsl[WebGLConstants.INT] = \"int\";\ndatatypeToGlsl[WebGLConstants.INT_VEC2] = \"ivec2\";\ndatatypeToGlsl[WebGLConstants.INT_VEC3] = \"ivec3\";\ndatatypeToGlsl[WebGLConstants.INT_VEC4] = \"ivec4\";\ndatatypeToGlsl[WebGLConstants.BOOL] = \"bool\";\ndatatypeToGlsl[WebGLConstants.BOOL_VEC2] = \"bvec2\";\ndatatypeToGlsl[WebGLConstants.BOOL_VEC3] = \"bvec3\";\ndatatypeToGlsl[WebGLConstants.BOOL_VEC4] = \"bvec4\";\ndatatypeToGlsl[WebGLConstants.FLOAT_MAT2] = \"mat2\";\ndatatypeToGlsl[WebGLConstants.FLOAT_MAT3] = \"mat3\";\ndatatypeToGlsl[WebGLConstants.FLOAT_MAT4] = \"mat4\";\ndatatypeToGlsl[WebGLConstants.SAMPLER_2D] = \"sampler2D\";\ndatatypeToGlsl[WebGLConstants.SAMPLER_CUBE] = \"samplerCube\";\n\nAutomaticUniform.prototype.getDeclaration = function (name) {\n  let declaration = `uniform ${datatypeToGlsl[this._datatype]} ${name}`;\n\n  const size = this._size;\n  if (size === 1) {\n    declaration += \";\";\n  } else {\n    declaration += `[${size.toString()}];`;\n  }\n\n  return declaration;\n};\n\n/**\n * @private\n */\nconst AutomaticUniforms = {\n  /**\n   * An automatic GLSL uniform containing the viewport's <code>x</code>, <code>y</code>, <code>width</code>,\n   * and <code>height</code> properties in an <code>vec4</code>'s <code>x</code>, <code>y</code>, <code>z</code>,\n   * and <code>w</code> components, respectively.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec4 czm_viewport;\n   *\n   * // Scale the window coordinate components to [0, 1] by dividing\n   * // by the viewport's width and height.\n   * vec2 v = gl_FragCoord.xy / czm_viewport.zw;\n   *\n   * @see Context#getViewport\n   */\n  czm_viewport: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC4,\n    getValue: function (uniformState) {\n      return uniformState.viewportCartesian4;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 orthographic projection matrix that\n   * transforms window coordinates to clip coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.\n   * <br /><br />\n   * This transform is useful when a vertex shader inputs or manipulates window coordinates\n   * as done by {@link BillboardCollection}.\n   * <br /><br />\n   * Do not confuse {@link czm_viewportTransformation} with <code>czm_viewportOrthographic</code>.\n   * The former transforms from normalized device coordinates to window coordinates; the later transforms\n   * from window coordinates to clip coordinates, and is often used to assign to <code>gl_Position</code>.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_viewportOrthographic;\n   *\n   * // Example\n   * gl_Position = czm_viewportOrthographic * vec4(windowPosition, 0.0, 1.0);\n   *\n   * @see UniformState#viewportOrthographic\n   * @see czm_viewport\n   * @see czm_viewportTransformation\n   * @see BillboardCollection\n   */\n  czm_viewportOrthographic: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.viewportOrthographic;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 transformation matrix that\n   * transforms normalized device coordinates to window coordinates.  The context's\n   * full viewport is used, and the depth range is assumed to be <code>near = 0</code>\n   * and <code>far = 1</code>.\n   * <br /><br />\n   * This transform is useful when there is a need to manipulate window coordinates\n   * in a vertex shader as done by {@link BillboardCollection}.  In many cases,\n   * this matrix will not be used directly; instead, {@link czm_modelToWindowCoordinates}\n   * will be used to transform directly from model to window coordinates.\n   * <br /><br />\n   * Do not confuse <code>czm_viewportTransformation</code> with {@link czm_viewportOrthographic}.\n   * The former transforms from normalized device coordinates to window coordinates; the later transforms\n   * from window coordinates to clip coordinates, and is often used to assign to <code>gl_Position</code>.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_viewportTransformation;\n   *\n   * // Use czm_viewportTransformation as part of the\n   * // transform from model to window coordinates.\n   * vec4 q = czm_modelViewProjection * positionMC;               // model to clip coordinates\n   * q.xyz /= q.w;                                                // clip to normalized device coordinates (ndc)\n   * q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // ndc to window coordinates\n   *\n   * @see UniformState#viewportTransformation\n   * @see czm_viewport\n   * @see czm_viewportOrthographic\n   * @see czm_modelToWindowCoordinates\n   * @see BillboardCollection\n   */\n  czm_viewportTransformation: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.viewportTransformation;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the depth of the scene\n   * after the globe pass and then updated after the 3D Tiles pass.\n   * The depth is packed into an RGBA texture.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform sampler2D czm_globeDepthTexture;\n   *\n   * // Get the depth at the current fragment\n   * vec2 coords = gl_FragCoord.xy / czm_viewport.zw;\n   * float depth = czm_unpackDepth(texture(czm_globeDepthTexture, coords));\n   */\n  czm_globeDepthTexture: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.SAMPLER_2D,\n    getValue: function (uniformState) {\n      return uniformState.globeDepthTexture;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a texture containing edge IDs\n   * from the 3D Tiles edge rendering pass. Used for edge detection and\n   * avoiding z-fighting between edges and surfaces.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform sampler2D czm_edgeIdTexture;\n   *\n   * // Get the edge ID at the current fragment\n   * vec2 coords = gl_FragCoord.xy / czm_viewport.zw;\n   * vec4 edgeId = texture(czm_edgeIdTexture, coords);\n   */\n  czm_edgeIdTexture: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.SAMPLER_2D,\n    getValue: function (uniformState) {\n      return uniformState.edgeIdTexture;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the edge color texture.\n   * This texture contains the edge content rendered during the CESIUM_3D_TILE_EDGES pass.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform sampler2D czm_edgeColorTexture;\n   *\n   * // Sample the edge color at the current fragment\n   * vec2 coords = gl_FragCoord.xy / czm_viewport.zw;\n   * vec4 edgeColor = texture(czm_edgeColorTexture, coords);\n   */\n  czm_edgeColorTexture: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.SAMPLER_2D,\n    getValue: function (uniformState) {\n      return uniformState.edgeColorTexture;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the packed depth texture produced by the\n   * edge visibility pass. The depth is packed via czm_packDepth and should be\n   * unpacked with czm_unpackDepth.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform sampler2D czm_edgeDepthTexture;\n   *\n   * vec2 coords = gl_FragCoord.xy / czm_viewport.zw;\n   * float d = czm_unpackDepth(texture(czm_edgeDepthTexture, coords));\n   */\n  czm_edgeDepthTexture: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.SAMPLER_2D,\n    getValue: function (uniformState) {\n      return uniformState.edgeDepthTexture;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model transformation matrix that\n   * transforms model coordinates to world coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_model;\n   *\n   * // Example\n   * vec4 worldPosition = czm_model * modelPosition;\n   *\n   * @see UniformState#model\n   * @see czm_inverseModel\n   * @see czm_modelView\n   * @see czm_modelViewProjection\n   */\n  czm_model: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.model;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model transformation matrix that\n   * transforms world coordinates to model coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseModel;\n   *\n   * // Example\n   * vec4 modelPosition = czm_inverseModel * worldPosition;\n   *\n   * @see UniformState#inverseModel\n   * @see czm_model\n   * @see czm_inverseModelView\n   */\n  czm_inverseModel: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseModel;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 view transformation matrix that\n   * transforms world coordinates to eye coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_view;\n   *\n   * // Example\n   * vec4 eyePosition = czm_view * worldPosition;\n   *\n   * @see UniformState#view\n   * @see czm_viewRotation\n   * @see czm_modelView\n   * @see czm_viewProjection\n   * @see czm_modelViewProjection\n   * @see czm_inverseView\n   */\n  czm_view: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.view;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 view transformation matrix that\n   * transforms 3D world coordinates to eye coordinates.  In 3D mode, this is identical to\n   * {@link czm_view}, but in 2D and Columbus View it represents the view matrix\n   * as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_view3D;\n   *\n   * // Example\n   * vec4 eyePosition3D = czm_view3D * worldPosition3D;\n   *\n   * @see UniformState#view3D\n   * @see czm_view\n   */\n  czm_view3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.view3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 view rotation matrix that\n   * transforms vectors in world coordinates to eye coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_viewRotation;\n   *\n   * // Example\n   * vec3 eyeVector = czm_viewRotation * worldVector;\n   *\n   * @see UniformState#viewRotation\n   * @see czm_view\n   * @see czm_inverseView\n   * @see czm_inverseViewRotation\n   */\n  czm_viewRotation: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.viewRotation;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 view rotation matrix that\n   * transforms vectors in 3D world coordinates to eye coordinates.  In 3D mode, this is identical to\n   * {@link czm_viewRotation}, but in 2D and Columbus View it represents the view matrix\n   * as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_viewRotation3D;\n   *\n   * // Example\n   * vec3 eyeVector = czm_viewRotation3D * worldVector;\n   *\n   * @see UniformState#viewRotation3D\n   * @see czm_viewRotation\n   */\n  czm_viewRotation3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.viewRotation3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 transformation matrix that\n   * transforms from eye coordinates to world coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseView;\n   *\n   * // Example\n   * vec4 worldPosition = czm_inverseView * eyePosition;\n   *\n   * @see UniformState#inverseView\n   * @see czm_view\n   * @see czm_inverseNormal\n   */\n  czm_inverseView: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseView;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 transformation matrix that\n   * transforms from 3D eye coordinates to world coordinates.  In 3D mode, this is identical to\n   * {@link czm_inverseView}, but in 2D and Columbus View it represents the inverse view matrix\n   * as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseView3D;\n   *\n   * // Example\n   * vec4 worldPosition = czm_inverseView3D * eyePosition;\n   *\n   * @see UniformState#inverseView3D\n   * @see czm_inverseView\n   */\n  czm_inverseView3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseView3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 rotation matrix that\n   * transforms vectors from eye coordinates to world coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_inverseViewRotation;\n   *\n   * // Example\n   * vec4 worldVector = czm_inverseViewRotation * eyeVector;\n   *\n   * @see UniformState#inverseView\n   * @see czm_view\n   * @see czm_viewRotation\n   * @see czm_inverseViewRotation\n   */\n  czm_inverseViewRotation: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.inverseViewRotation;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 rotation matrix that\n   * transforms vectors from 3D eye coordinates to world coordinates.  In 3D mode, this is identical to\n   * {@link czm_inverseViewRotation}, but in 2D and Columbus View it represents the inverse view matrix\n   * as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_inverseViewRotation3D;\n   *\n   * // Example\n   * vec4 worldVector = czm_inverseViewRotation3D * eyeVector;\n   *\n   * @see UniformState#inverseView3D\n   * @see czm_inverseViewRotation\n   */\n  czm_inverseViewRotation3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.inverseViewRotation3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 projection transformation matrix that\n   * transforms eye coordinates to clip coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_projection;\n   *\n   * // Example\n   * gl_Position = czm_projection * eyePosition;\n   *\n   * @see UniformState#projection\n   * @see czm_viewProjection\n   * @see czm_modelViewProjection\n   * @see czm_infiniteProjection\n   */\n  czm_projection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.projection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 inverse projection transformation matrix that\n   * transforms from clip coordinates to eye coordinates. Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseProjection;\n   *\n   * // Example\n   * vec4 eyePosition = czm_inverseProjection * clipPosition;\n   *\n   * @see UniformState#inverseProjection\n   * @see czm_projection\n   */\n  czm_inverseProjection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseProjection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 projection transformation matrix with the far plane at infinity,\n   * that transforms eye coordinates to clip coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.  An infinite far plane is used\n   * in algorithms like shadow volumes and GPU ray casting with proxy geometry to ensure that triangles\n   * are not clipped by the far plane.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_infiniteProjection;\n   *\n   * // Example\n   * gl_Position = czm_infiniteProjection * eyePosition;\n   *\n   * @see UniformState#infiniteProjection\n   * @see czm_projection\n   * @see czm_modelViewInfiniteProjection\n   */\n  czm_infiniteProjection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.infiniteProjection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model-view transformation matrix that\n   * transforms model coordinates to eye coordinates.\n   * <br /><br />\n   * Positions should be transformed to eye coordinates using <code>czm_modelView</code> and\n   * normals should be transformed using {@link czm_normal}.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_modelView;\n   *\n   * // Example\n   * vec4 eyePosition = czm_modelView * modelPosition;\n   *\n   * // The above is equivalent to, but more efficient than:\n   * vec4 eyePosition = czm_view * czm_model * modelPosition;\n   *\n   * @see UniformState#modelView\n   * @see czm_model\n   * @see czm_view\n   * @see czm_modelViewProjection\n   * @see czm_normal\n   */\n  czm_modelView: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.modelView;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model-view transformation matrix that\n   * transforms 3D model coordinates to eye coordinates.  In 3D mode, this is identical to\n   * {@link czm_modelView}, but in 2D and Columbus View it represents the model-view matrix\n   * as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   * <br /><br />\n   * Positions should be transformed to eye coordinates using <code>czm_modelView3D</code> and\n   * normals should be transformed using {@link czm_normal3D}.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_modelView3D;\n   *\n   * // Example\n   * vec4 eyePosition = czm_modelView3D * modelPosition;\n   *\n   * // The above is equivalent to, but more efficient than:\n   * vec4 eyePosition = czm_view3D * czm_model * modelPosition;\n   *\n   * @see UniformState#modelView3D\n   * @see czm_modelView\n   */\n  czm_modelView3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.modelView3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model-view transformation matrix that\n   * transforms model coordinates, relative to the eye, to eye coordinates.  This is used\n   * in conjunction with {@link czm_translateRelativeToEye}.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_modelViewRelativeToEye;\n   *\n   * // Example\n   * attribute vec3 positionHigh;\n   * attribute vec3 positionLow;\n   *\n   * void main()\n   * {\n   *   vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n   *   gl_Position = czm_projection * (czm_modelViewRelativeToEye * p);\n   * }\n   *\n   * @see czm_modelViewProjectionRelativeToEye\n   * @see czm_translateRelativeToEye\n   * @see EncodedCartesian3\n   */\n  czm_modelViewRelativeToEye: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.modelViewRelativeToEye;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 transformation matrix that\n   * transforms from eye coordinates to model coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseModelView;\n   *\n   * // Example\n   * vec4 modelPosition = czm_inverseModelView * eyePosition;\n   *\n   * @see UniformState#inverseModelView\n   * @see czm_modelView\n   */\n  czm_inverseModelView: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseModelView;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 transformation matrix that\n   * transforms from eye coordinates to 3D model coordinates.  In 3D mode, this is identical to\n   * {@link czm_inverseModelView}, but in 2D and Columbus View it represents the inverse model-view matrix\n   * as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseModelView3D;\n   *\n   * // Example\n   * vec4 modelPosition = czm_inverseModelView3D * eyePosition;\n   *\n   * @see UniformState#inverseModelView\n   * @see czm_inverseModelView\n   * @see czm_modelView3D\n   */\n  czm_inverseModelView3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseModelView3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 view-projection transformation matrix that\n   * transforms world coordinates to clip coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_viewProjection;\n   *\n   * // Example\n   * vec4 gl_Position = czm_viewProjection * czm_model * modelPosition;\n   *\n   * // The above is equivalent to, but more efficient than:\n   * gl_Position = czm_projection * czm_view * czm_model * modelPosition;\n   *\n   * @see UniformState#viewProjection\n   * @see czm_view\n   * @see czm_projection\n   * @see czm_modelViewProjection\n   * @see czm_inverseViewProjection\n   */\n  czm_viewProjection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.viewProjection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 view-projection transformation matrix that\n   * transforms clip coordinates to world coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseViewProjection;\n   *\n   * // Example\n   * vec4 worldPosition = czm_inverseViewProjection * clipPosition;\n   *\n   * @see UniformState#inverseViewProjection\n   * @see czm_viewProjection\n   */\n  czm_inverseViewProjection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseViewProjection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model-view-projection transformation matrix that\n   * transforms model coordinates to clip coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_modelViewProjection;\n   *\n   * // Example\n   * vec4 gl_Position = czm_modelViewProjection * modelPosition;\n   *\n   * // The above is equivalent to, but more efficient than:\n   * gl_Position = czm_projection * czm_view * czm_model * modelPosition;\n   *\n   * @see UniformState#modelViewProjection\n   * @see czm_model\n   * @see czm_view\n   * @see czm_projection\n   * @see czm_modelView\n   * @see czm_viewProjection\n   * @see czm_modelViewInfiniteProjection\n   * @see czm_inverseModelViewProjection\n   */\n  czm_modelViewProjection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.modelViewProjection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 inverse model-view-projection transformation matrix that\n   * transforms clip coordinates to model coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_inverseModelViewProjection;\n   *\n   * // Example\n   * vec4 modelPosition = czm_inverseModelViewProjection * clipPosition;\n   *\n   * @see UniformState#modelViewProjection\n   * @see czm_modelViewProjection\n   */\n  czm_inverseModelViewProjection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.inverseModelViewProjection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model-view-projection transformation matrix that\n   * transforms model coordinates, relative to the eye, to clip coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.  This is used in\n   * conjunction with {@link czm_translateRelativeToEye}.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_modelViewProjectionRelativeToEye;\n   *\n   * // Example\n   * attribute vec3 positionHigh;\n   * attribute vec3 positionLow;\n   *\n   * void main()\n   * {\n   *   vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n   *   gl_Position = czm_modelViewProjectionRelativeToEye * p;\n   * }\n   *\n   * @see czm_modelViewRelativeToEye\n   * @see czm_translateRelativeToEye\n   * @see EncodedCartesian3\n   */\n  czm_modelViewProjectionRelativeToEye: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.modelViewProjectionRelativeToEye;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 4x4 model-view-projection transformation matrix that\n   * transforms model coordinates to clip coordinates.  Clip coordinates is the\n   * coordinate system for a vertex shader's <code>gl_Position</code> output.  The projection matrix places\n   * the far plane at infinity.  This is useful in algorithms like shadow volumes and GPU ray casting with\n   * proxy geometry to ensure that triangles are not clipped by the far plane.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat4 czm_modelViewInfiniteProjection;\n   *\n   * // Example\n   * vec4 gl_Position = czm_modelViewInfiniteProjection * modelPosition;\n   *\n   * // The above is equivalent to, but more efficient than:\n   * gl_Position = czm_infiniteProjection * czm_view * czm_model * modelPosition;\n   *\n   * @see UniformState#modelViewInfiniteProjection\n   * @see czm_model\n   * @see czm_view\n   * @see czm_infiniteProjection\n   * @see czm_modelViewProjection\n   */\n  czm_modelViewInfiniteProjection: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.modelViewInfiniteProjection;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform that indicates if the current camera is orthographic in 3D.\n   *\n   * @see UniformState#orthographicIn3D\n   */\n  czm_orthographicIn3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.orthographicIn3D ? 1 : 0;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n   * transforms normal vectors in model coordinates to eye coordinates.\n   * <br /><br />\n   * Positions should be transformed to eye coordinates using {@link czm_modelView} and\n   * normals should be transformed using <code>czm_normal</code>.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_normal;\n   *\n   * // Example\n   * vec3 eyeNormal = czm_normal * normal;\n   *\n   * @see UniformState#normal\n   * @see czm_inverseNormal\n   * @see czm_modelView\n   */\n  czm_normal: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.normal;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n   * transforms normal vectors in 3D model coordinates to eye coordinates.\n   * In 3D mode, this is identical to\n   * {@link czm_normal}, but in 2D and Columbus View it represents the normal transformation\n   * matrix as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   * <br /><br />\n   * Positions should be transformed to eye coordinates using {@link czm_modelView3D} and\n   * normals should be transformed using <code>czm_normal3D</code>.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_normal3D;\n   *\n   * // Example\n   * vec3 eyeNormal = czm_normal3D * normal;\n   *\n   * @see UniformState#normal3D\n   * @see czm_normal\n   */\n  czm_normal3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.normal3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n   * transforms normal vectors in eye coordinates to model coordinates.  This is\n   * the opposite of the transform provided by {@link czm_normal}.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_inverseNormal;\n   *\n   * // Example\n   * vec3 normalMC = czm_inverseNormal * normalEC;\n   *\n   * @see UniformState#inverseNormal\n   * @see czm_normal\n   * @see czm_modelView\n   * @see czm_inverseView\n   */\n  czm_inverseNormal: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.inverseNormal;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 normal transformation matrix that\n   * transforms normal vectors in eye coordinates to 3D model coordinates.  This is\n   * the opposite of the transform provided by {@link czm_normal}.\n   * In 3D mode, this is identical to\n   * {@link czm_inverseNormal}, but in 2D and Columbus View it represents the inverse normal transformation\n   * matrix as if the camera were at an equivalent location in 3D mode.  This is useful for lighting\n   * 2D and Columbus View in the same way that 3D is lit.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_inverseNormal3D;\n   *\n   * // Example\n   * vec3 normalMC = czm_inverseNormal3D * normalEC;\n   *\n   * @see UniformState#inverseNormal3D\n   * @see czm_inverseNormal\n   */\n  czm_inverseNormal3D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.inverseNormal3D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the height in meters of the\n   * eye (camera) above or below the ellipsoid.\n   *\n   * @see UniformState#eyeHeight\n   */\n  czm_eyeHeight: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.eyeHeight;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing height (<code>x</code>) and height squared (<code>y</code>)\n   * in meters of the eye (camera) above the 2D world plane. This uniform is only valid\n   * when the {@link SceneMode} is <code>SCENE2D</code>.\n   *\n   * @see UniformState#eyeHeight2D\n   */\n  czm_eyeHeight2D: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC2,\n    getValue: function (uniformState) {\n      return uniformState.eyeHeight2D;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the ellipsoid surface normal\n   * at the position below the eye (camera), in eye coordinates.\n   * This uniform is only valid when the {@link SceneMode} is <code>SCENE3D</code>.\n   */\n  czm_eyeEllipsoidNormalEC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.eyeEllipsoidNormalEC;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the ellipsoid radii of curvature at the camera position.\n   * The .x component is the prime vertical radius of curvature (east-west direction)\n   * .y is the meridional radius of curvature (north-south direction)\n   * This uniform is only valid when the {@link SceneMode} is <code>SCENE3D</code>.\n   */\n  czm_eyeEllipsoidCurvature: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC2,\n    getValue: function (uniformState) {\n      return uniformState.eyeEllipsoidCurvature;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the transform from model coordinates\n   * to an east-north-up coordinate system centered at the position on the\n   * ellipsoid below the camera.\n   * This uniform is only valid when the {@link SceneMode} is <code>SCENE3D</code>.\n   */\n  czm_modelToEnu: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.modelToEnu;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the the inverse of\n   * {@link AutomaticUniforms.czm_modelToEnu}.\n   * This uniform is only valid when the {@link SceneMode} is <code>SCENE3D</code>.\n   */\n  czm_enuToModel: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT4,\n    getValue: function (uniformState) {\n      return uniformState.enuToModel;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the near distance (<code>x</code>) and the far distance (<code>y</code>)\n   * of the frustum defined by the camera.  This is the largest possible frustum, not an individual\n   * frustum used for multi-frustum rendering.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec2 czm_entireFrustum;\n   *\n   * // Example\n   * float frustumLength = czm_entireFrustum.y - czm_entireFrustum.x;\n   *\n   * @see UniformState#entireFrustum\n   * @see czm_currentFrustum\n   */\n  czm_entireFrustum: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC2,\n    getValue: function (uniformState) {\n      return uniformState.entireFrustum;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the near distance (<code>x</code>) and the far distance (<code>y</code>)\n   * of the frustum defined by the camera.  This is the individual\n   * frustum used for multi-frustum rendering.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec2 czm_currentFrustum;\n   *\n   * // Example\n   * float frustumLength = czm_currentFrustum.y - czm_currentFrustum.x;\n   *\n   * @see UniformState#currentFrustum\n   * @see czm_entireFrustum\n   */\n  czm_currentFrustum: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC2,\n    getValue: function (uniformState) {\n      return uniformState.currentFrustum;\n    },\n  }),\n\n  /**\n   * The distances to the frustum planes. The top, bottom, left and right distances are\n   * the x, y, z, and w components, respectively.\n   */\n  czm_frustumPlanes: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC4,\n    getValue: function (uniformState) {\n      return uniformState.frustumPlanes;\n    },\n  }),\n\n  /**\n   * Gets the far plane's distance from the near plane, plus 1.0.\n   */\n  czm_farDepthFromNearPlusOne: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.farDepthFromNearPlusOne;\n    },\n  }),\n\n  /**\n   * Gets the log2 of {@link AutomaticUniforms#czm_farDepthFromNearPlusOne}.\n   */\n  czm_log2FarDepthFromNearPlusOne: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.log2FarDepthFromNearPlusOne;\n    },\n  }),\n\n  /**\n   * Gets 1.0 divided by {@link AutomaticUniforms#czm_log2FarDepthFromNearPlusOne}.\n   */\n  czm_oneOverLog2FarDepthFromNearPlusOne: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.oneOverLog2FarDepthFromNearPlusOne;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the sun position in world coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_sunPositionWC;\n   *\n   * @see UniformState#sunPositionWC\n   * @see czm_sunPositionColumbusView\n   * @see czm_sunDirectionWC\n   */\n  czm_sunPositionWC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.sunPositionWC;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the sun position in Columbus view world coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_sunPositionColumbusView;\n   *\n   * @see UniformState#sunPositionColumbusView\n   * @see czm_sunPositionWC\n   */\n  czm_sunPositionColumbusView: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.sunPositionColumbusView;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the normalized direction to the sun in eye coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_sunDirectionEC;\n   *\n   * // Example\n   * float diffuse = max(dot(czm_sunDirectionEC, normalEC), 0.0);\n   *\n   * @see UniformState#sunDirectionEC\n   * @see czm_moonDirectionEC\n   * @see czm_sunDirectionWC\n   */\n  czm_sunDirectionEC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.sunDirectionEC;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the normalized direction to the sun in world coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_sunDirectionWC;\n   *\n   * // Example\n   * float diffuse = max(dot(czm_sunDirectionWC, normalWC), 0.0);\n   *\n   * @see UniformState#sunDirectionWC\n   * @see czm_sunPositionWC\n   * @see czm_sunDirectionEC\n   */\n  czm_sunDirectionWC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.sunDirectionWC;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the normalized direction to the moon in eye coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_moonDirectionEC;\n   *\n   * // Example\n   * float diffuse = max(dot(czm_moonDirectionEC, normalEC), 0.0);\n   *\n   * @see UniformState#moonDirectionEC\n   * @see czm_sunDirectionEC\n   */\n  czm_moonDirectionEC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.moonDirectionEC;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the normalized direction to the scene's light source in eye coordinates.\n   * This is commonly used for directional lighting computations.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_lightDirectionEC;\n   *\n   * // Example\n   * float diffuse = max(dot(czm_lightDirectionEC, normalEC), 0.0);\n   *\n   * @see UniformState#lightDirectionEC\n   * @see czm_lightDirectionWC\n   */\n  czm_lightDirectionEC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.lightDirectionEC;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the normalized direction to the scene's light source in world coordinates.\n   * This is commonly used for directional lighting computations.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_lightDirectionWC;\n   *\n   * // Example\n   * float diffuse = max(dot(czm_lightDirectionWC, normalWC), 0.0);\n   *\n   * @see UniformState#lightDirectionWC\n   * @see czm_lightDirectionEC\n   */\n  czm_lightDirectionWC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.lightDirectionWC;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform that represents the color of light emitted by the scene's light source. This\n   * is equivalent to the light color multiplied by the light intensity limited to a maximum luminance of 1.0\n   * suitable for non-HDR lighting.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_lightColor;\n   *\n   * // Example\n   * vec3 diffuseColor = czm_lightColor * max(dot(czm_lightDirectionWC, normalWC), 0.0);\n   *\n   * @see UniformState#lightColor\n   * @see czm_lightColorHdr\n   */\n  czm_lightColor: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.lightColor;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform that represents the high dynamic range color of light emitted by the scene's light\n   * source. This is equivalent to the light color multiplied by the light intensity suitable for HDR lighting.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_lightColorHdr;\n   *\n   * // Example\n   * vec3 diffuseColor = czm_lightColorHdr * max(dot(czm_lightDirectionWC, normalWC), 0.0);\n   *\n   * @see UniformState#lightColorHdr\n   * @see czm_lightColor\n   */\n  czm_lightColorHdr: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.lightColorHdr;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the high bits of the camera position in model\n   * coordinates.  This is used for GPU RTE to eliminate jittering artifacts when rendering\n   * as described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_encodedCameraPositionMCHigh;\n   *\n   * @see czm_encodedCameraPositionMCLow\n   * @see czm_modelViewRelativeToEye\n   * @see czm_modelViewProjectionRelativeToEye\n   */\n  czm_encodedCameraPositionMCHigh: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.encodedCameraPositionMCHigh;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the low bits of the camera position in model\n   * coordinates.  This is used for GPU RTE to eliminate jittering artifacts when rendering\n   * as described in {@linkhttp://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_encodedCameraPositionMCLow;\n   *\n   * @see czm_encodedCameraPositionMCHigh\n   * @see czm_modelViewRelativeToEye\n   * @see czm_modelViewProjectionRelativeToEye\n   */\n  czm_encodedCameraPositionMCLow: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.encodedCameraPositionMCLow;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the position of the viewer (camera) in world coordinates.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3 czm_viewerPositionWC;\n   */\n  czm_viewerPositionWC: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return Matrix4.getTranslation(\n        uniformState.inverseView,\n        viewerPositionWCScratch,\n      );\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the frame number. This uniform is automatically incremented\n   * every frame.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform float czm_frameNumber;\n   */\n  czm_frameNumber: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.frameState.frameNumber;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the current morph transition time between\n   * 2D/Columbus View and 3D, with 0.0 being 2D or Columbus View and 1.0 being 3D.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform float czm_morphTime;\n   *\n   * // Example\n   * vec4 p = czm_columbusViewMorph(position2D, position3D, czm_morphTime);\n   */\n  czm_morphTime: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.frameState.morphTime;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the current {@link SceneMode}, expressed\n   * as a float.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform float czm_sceneMode;\n   *\n   * // Example\n   * if (czm_sceneMode == czm_sceneMode2D)\n   * {\n   *     eyeHeightSq = czm_eyeHeight2D.y;\n   * }\n   *\n   * @see czm_sceneMode2D\n   * @see czm_sceneModeColumbusView\n   * @see czm_sceneMode3D\n   * @see czm_sceneModeMorphing\n   */\n  czm_sceneMode: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.frameState.mode;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the current rendering pass.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform float czm_pass;\n   *\n   * // Example\n   * if ((czm_pass == czm_passTranslucent) && isOpaque())\n   * {\n   *     gl_Position *= 0.0; // Cull opaque geometry in the translucent pass\n   * }\n   */\n  czm_pass: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.pass;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the current scene background color.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec4 czm_backgroundColor;\n   *\n   * // Example: If the given color's RGB matches the background color, invert it.\n   * vec4 adjustColorForContrast(vec4 color)\n   * {\n   *     if (czm_backgroundColor.rgb == color.rgb)\n   *     {\n   *         color.rgb = vec3(1.0) - color.rgb;\n   *     }\n   *\n   *     return color;\n   * }\n   */\n  czm_backgroundColor: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC4,\n    getValue: function (uniformState) {\n      return uniformState.backgroundColor;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the BRDF look up texture used for image-based lighting computations.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform sampler2D czm_brdfLut;\n   *\n   * // Example: For a given roughness and NdotV value, find the material's BRDF information in the red and green channels\n   * float roughness = 0.5;\n   * float NdotV = dot(normal, view);\n   * vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg;\n   */\n  czm_brdfLut: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.SAMPLER_2D,\n    getValue: function (uniformState) {\n      return uniformState.brdfLut;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the environment map used within the scene.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform samplerCube czm_environmentMap;\n   *\n   * // Example: Create a perfect reflection of the environment map on a  model\n   * float reflected = reflect(view, normal);\n   * vec4 reflectedColor = texture(czm_environmentMap, reflected);\n   */\n  czm_environmentMap: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.SAMPLER_CUBE,\n    getValue: function (uniformState) {\n      return uniformState.environmentMap;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the specular environment cube map used within the scene.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform samplerCube czm_specularEnvironmentMaps;\n   */\n  czm_specularEnvironmentMaps: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.SAMPLER_CUBE,\n    getValue: function (uniformState) {\n      return uniformState.specularEnvironmentMaps;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the maximum valid level-of-detail of the specular environment cube map used within the scene.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform float czm_specularEnvironmentMapsMaximumLOD;\n   */\n  czm_specularEnvironmentMapsMaximumLOD: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.specularEnvironmentMapsMaximumLOD;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform containing the spherical harmonic coefficients used within the scene.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform vec3[9] czm_sphericalHarmonicCoefficients;\n   */\n  czm_sphericalHarmonicCoefficients: new AutomaticUniform({\n    size: 9,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.sphericalHarmonicCoefficients;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing a 3x3 rotation matrix that transforms\n   * from True Equator Mean Equinox (TEME) axes to the pseudo-fixed axes at the current scene time.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform mat3 czm_temeToPseudoFixed;\n   *\n   * // Example\n   * vec3 pseudoFixed = czm_temeToPseudoFixed * teme;\n   *\n   * @see UniformState#temeToPseudoFixedMatrix\n   * @see Transforms.computeTemeToPseudoFixedMatrix\n   */\n  czm_temeToPseudoFixed: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_MAT3,\n    getValue: function (uniformState) {\n      return uniformState.temeToPseudoFixedMatrix;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the ratio of canvas coordinate space to canvas pixel space.\n   *\n   * @example\n   * uniform float czm_pixelRatio;\n   */\n  czm_pixelRatio: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.pixelRatio;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform scalar used to mix a color with the fog color based on the distance to the camera.\n   *\n   * @see czm_fog\n   */\n  czm_fogDensity: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.fogDensity;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform scalar used to mix a color with the fog color based on the distance to the camera.\n   *\n   * @see czm_fog\n   */\n  czm_fogVisualDensityScalar: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.fogVisualDensityScalar;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform scalar used to set a minimum brightness when dynamic lighting is applied to fog.\n   *\n   * @see czm_fog\n   */\n  czm_fogMinimumBrightness: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.fogMinimumBrightness;\n    },\n  }),\n\n  /**\n   * An automatic uniform representing the color shift for the atmosphere in HSB color space\n   *\n   * @example\n   * uniform vec3 czm_atmosphereHsbShift;\n   */\n  czm_atmosphereHsbShift: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereHsbShift;\n    },\n  }),\n  /**\n   * An automatic uniform representing the intensity of the light that is used for computing the atmosphere color\n   *\n   * @example\n   * uniform float czm_atmosphereLightIntensity;\n   */\n  czm_atmosphereLightIntensity: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereLightIntensity;\n    },\n  }),\n  /**\n   * An automatic uniform representing the Rayleigh scattering coefficient used when computing the atmosphere scattering\n   *\n   * @example\n   * uniform vec3 czm_atmosphereRayleighCoefficient;\n   */\n  czm_atmosphereRayleighCoefficient: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereRayleighCoefficient;\n    },\n  }),\n  /**\n   * An automatic uniform representing the Rayleigh scale height in meters used for computing atmosphere scattering.\n   *\n   * @example\n   * uniform vec3 czm_atmosphereRayleighScaleHeight;\n   */\n  czm_atmosphereRayleighScaleHeight: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereRayleighScaleHeight;\n    },\n  }),\n  /**\n   * An automatic uniform representing the Mie scattering coefficient used when computing atmosphere scattering.\n   *\n   * @example\n   * uniform vec3 czm_atmosphereMieCoefficient;\n   */\n  czm_atmosphereMieCoefficient: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereMieCoefficient;\n    },\n  }),\n  /**\n   * An automatic uniform storign the Mie scale height used when computing atmosphere scattering.\n   *\n   * @example\n   * uniform float czm_atmosphereMieScaleHeight;\n   */\n  czm_atmosphereMieScaleHeight: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereMieScaleHeight;\n    },\n  }),\n  /**\n   * An automatic uniform representing the anisotropy of the medium to consider for Mie scattering.\n   *\n   * @example\n   * uniform float czm_atmosphereAnisotropy;\n   */\n  czm_atmosphereMieAnisotropy: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereMieAnisotropy;\n    },\n  }),\n\n  /**\n   * An automatic uniform representing which light source to use for dynamic lighting\n   *\n   * @example\n   * uniform float czm_atmosphereDynamicLighting\n   */\n  czm_atmosphereDynamicLighting: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.atmosphereDynamicLighting;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the splitter position to use when rendering with a splitter.\n   * This will be in pixel coordinates relative to the canvas.\n   *\n   * @example\n   * // GLSL declaration\n   * uniform float czm_splitPosition;\n   */\n  czm_splitPosition: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.splitPosition;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform scalar representing the geometric tolerance per meter\n   */\n  czm_geometricToleranceOverMeter: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.geometricToleranceOverMeter;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform representing the distance from the camera at which to disable the depth test of billboards, labels and points\n   * to, for example, prevent clipping against terrain. When set to zero, the depth test should always be applied. When less than zero,\n   * the depth test should never be applied.\n   */\n  czm_minimumDisableDepthTestDistance: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.minimumDisableDepthTestDistance;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform that will be the highlight color of unclassified 3D Tiles.\n   */\n  czm_invertClassificationColor: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC4,\n    getValue: function (uniformState) {\n      return uniformState.invertClassificationColor;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform that is used for gamma correction.\n   */\n  czm_gamma: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT,\n    getValue: function (uniformState) {\n      return uniformState.gamma;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform that stores the ellipsoid radii.\n   */\n  czm_ellipsoidRadii: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.ellipsoid.radii;\n    },\n  }),\n\n  /**\n   * An automatic GLSL uniform that stores the ellipsoid inverse radii.\n   */\n  czm_ellipsoidInverseRadii: new AutomaticUniform({\n    size: 1,\n    datatype: WebGLConstants.FLOAT_VEC3,\n    getValue: function (uniformState) {\n      return uniformState.ellipsoid.oneOverRadii;\n    },\n  }),\n};\nexport default AutomaticUniforms;\n","import Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport BufferUsage from \"./BufferUsage.js\";\n\n/**\n * @private\n */\nfunction Buffer(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n\n  if (!defined(options.typedArray) && !defined(options.sizeInBytes)) {\n    throw new DeveloperError(\n      \"Either options.sizeInBytes or options.typedArray is required.\",\n    );\n  }\n\n  if (defined(options.typedArray) && defined(options.sizeInBytes)) {\n    throw new DeveloperError(\n      \"Cannot pass in both options.sizeInBytes and options.typedArray.\",\n    );\n  }\n\n  if (defined(options.typedArray)) {\n    Check.typeOf.object(\"options.typedArray\", options.typedArray);\n    Check.typeOf.number(\n      \"options.typedArray.byteLength\",\n      options.typedArray.byteLength,\n    );\n  }\n\n  if (!BufferUsage.validate(options.usage)) {\n    throw new DeveloperError(\"usage is invalid.\");\n  }\n  //>>includeEnd('debug');\n\n  const gl = options.context._gl;\n  const bufferTarget = options.bufferTarget;\n  const typedArray = options.typedArray;\n  let sizeInBytes = options.sizeInBytes;\n  const usage = options.usage;\n  const hasArray = defined(typedArray);\n\n  if (hasArray) {\n    sizeInBytes = typedArray.byteLength;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"sizeInBytes\", sizeInBytes, 0);\n  //>>includeEnd('debug');\n\n  const buffer = gl.createBuffer();\n  gl.bindBuffer(bufferTarget, buffer);\n  gl.bufferData(bufferTarget, hasArray ? typedArray : sizeInBytes, usage);\n  gl.bindBuffer(bufferTarget, null);\n\n  this._id = createGuid();\n  this._gl = gl;\n  this._webgl2 = options.context._webgl2;\n  this._bufferTarget = bufferTarget;\n  this._sizeInBytes = sizeInBytes;\n  this._usage = usage;\n  this._buffer = buffer;\n  this.vertexArrayDestroyable = true;\n}\n\nBuffer.createPixelBuffer = function (options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  if (!options.context._webgl2) {\n    throw new DeveloperError(\n      \"A WebGL 2 context is required to create PixelBuffers.\",\n    );\n  }\n\n  return new Buffer({\n    context: options.context,\n    bufferTarget: WebGLConstants.PIXEL_PACK_BUFFER,\n    typedArray: options.typedArray,\n    sizeInBytes: options.sizeInBytes,\n    usage: options.usage,\n  });\n};\n\n/**\n * Creates a vertex buffer, which contains untyped vertex data in GPU-controlled memory.\n * <br /><br />\n * A vertex array defines the actual makeup of a vertex, e.g., positions, normals, texture coordinates,\n * etc., by interpreting the raw data in one or more vertex buffers.\n *\n * @param {object} options An object containing the following properties:\n * @param {Context} options.context The context in which to create the buffer\n * @param {ArrayBufferView} [options.typedArray] A typed array containing the data to copy to the buffer.\n * @param {number} [options.sizeInBytes] A <code>Number</code> defining the size of the buffer in bytes. Required if options.typedArray is not given.\n * @param {BufferUsage} options.usage Specifies the expected usage pattern of the buffer. On some GL implementations, this can significantly affect performance. See {@link BufferUsage}.\n * @returns {VertexBuffer} The vertex buffer, ready to be attached to a vertex array.\n *\n * @exception {DeveloperError} Must specify either <options.typedArray> or <options.sizeInBytes>, but not both.\n * @exception {DeveloperError} The buffer size must be greater than zero.\n * @exception {DeveloperError} Invalid <code>usage</code>.\n *\n *\n * @example\n * // Example 1. Create a dynamic vertex buffer 16 bytes in size.\n * const buffer = Buffer.createVertexBuffer({\n *     context : context,\n *     sizeInBytes : 16,\n *     usage : BufferUsage.DYNAMIC_DRAW\n * });\n *\n * @example\n * // Example 2. Create a dynamic vertex buffer from three floating-point values.\n * // The data copied to the vertex buffer is considered raw bytes until it is\n * // interpreted as vertices using a vertex array.\n * const positionBuffer = buffer.createVertexBuffer({\n *     context : context,\n *     typedArray : new Float32Array([0, 0, 0]),\n *     usage : BufferUsage.STATIC_DRAW\n * });\n *\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenBuffer.xml|glGenBuffer}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindBuffer.xml|glBindBuffer} with <code>ARRAY_BUFFER</code>\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferData.xml|glBufferData} with <code>ARRAY_BUFFER</code>\n */\nBuffer.createVertexBuffer = function (options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  return new Buffer({\n    context: options.context,\n    bufferTarget: WebGLConstants.ARRAY_BUFFER,\n    typedArray: options.typedArray,\n    sizeInBytes: options.sizeInBytes,\n    usage: options.usage,\n  });\n};\n\n/**\n * Creates an index buffer, which contains typed indices in GPU-controlled memory.\n * <br /><br />\n * An index buffer can be attached to a vertex array to select vertices for rendering.\n * <code>Context.draw</code> can render using the entire index buffer or a subset\n * of the index buffer defined by an offset and count.\n *\n * @param {object} options An object containing the following properties:\n * @param {Context} options.context The context in which to create the buffer\n * @param {ArrayBufferView} [options.typedArray] A typed array containing the data to copy to the buffer.\n * @param {number} [options.sizeInBytes] A <code>Number</code> defining the size of the buffer in bytes. Required if options.typedArray is not given.\n * @param {BufferUsage} options.usage Specifies the expected usage pattern of the buffer. On some GL implementations, this can significantly affect performance. See {@link BufferUsage}.\n * @param {IndexDatatype} options.indexDatatype The datatype of indices in the buffer.\n * @returns {IndexBuffer} The index buffer, ready to be attached to a vertex array.\n *\n * @exception {DeveloperError} Must specify either <options.typedArray> or <options.sizeInBytes>, but not both.\n * @exception {DeveloperError} IndexDatatype.UNSIGNED_INT requires OES_element_index_uint, which is not supported on this system. Check context.elementIndexUint.\n * @exception {DeveloperError} The size in bytes must be greater than zero.\n * @exception {DeveloperError} Invalid <code>usage</code>.\n * @exception {DeveloperError} Invalid <code>indexDatatype</code>.\n *\n *\n * @example\n * // Example 1. Create a stream index buffer of unsigned shorts that is\n * // 16 bytes in size.\n * const buffer = Buffer.createIndexBuffer({\n *     context : context,\n *     sizeInBytes : 16,\n *     usage : BufferUsage.STREAM_DRAW,\n *     indexDatatype : IndexDatatype.UNSIGNED_SHORT\n * });\n *\n * @example\n * // Example 2. Create a static index buffer containing three unsigned shorts.\n * const buffer = Buffer.createIndexBuffer({\n *     context : context,\n *     typedArray : new Uint16Array([0, 1, 2]),\n *     usage : BufferUsage.STATIC_DRAW,\n *     indexDatatype : IndexDatatype.UNSIGNED_SHORT\n * });\n *\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenBuffer.xml|glGenBuffer}\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindBuffer.xml|glBindBuffer} with <code>ELEMENT_ARRAY_BUFFER</code>\n * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferData.xml|glBufferData} with <code>ELEMENT_ARRAY_BUFFER</code>\n */\nBuffer.createIndexBuffer = function (options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n\n  if (!IndexDatatype.validate(options.indexDatatype)) {\n    throw new DeveloperError(\"Invalid indexDatatype.\");\n  }\n\n  if (\n    options.indexDatatype === IndexDatatype.UNSIGNED_INT &&\n    !options.context.elementIndexUint\n  ) {\n    throw new DeveloperError(\n      \"IndexDatatype.UNSIGNED_INT requires OES_element_index_uint, which is not supported on this system.  Check context.elementIndexUint.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const context = options.context;\n  const indexDatatype = options.indexDatatype;\n\n  const bytesPerIndex = IndexDatatype.getSizeInBytes(indexDatatype);\n  const buffer = new Buffer({\n    context: context,\n    bufferTarget: WebGLConstants.ELEMENT_ARRAY_BUFFER,\n    typedArray: options.typedArray,\n    sizeInBytes: options.sizeInBytes,\n    usage: options.usage,\n  });\n\n  const numberOfIndices = buffer.sizeInBytes / bytesPerIndex;\n\n  Object.defineProperties(buffer, {\n    indexDatatype: {\n      get: function () {\n        return indexDatatype;\n      },\n    },\n    bytesPerIndex: {\n      get: function () {\n        return bytesPerIndex;\n      },\n    },\n    numberOfIndices: {\n      get: function () {\n        return numberOfIndices;\n      },\n    },\n  });\n\n  return buffer;\n};\n\nObject.defineProperties(Buffer.prototype, {\n  sizeInBytes: {\n    get: function () {\n      return this._sizeInBytes;\n    },\n  },\n\n  usage: {\n    get: function () {\n      return this._usage;\n    },\n  },\n});\n\nBuffer.prototype._getBuffer = function () {\n  return this._buffer;\n};\n\nBuffer.prototype._bind = function () {\n  const gl = this._gl;\n  const target = this._bufferTarget;\n  gl.bindBuffer(target, this._buffer);\n};\n\nBuffer.prototype._unBind = function () {\n  const gl = this._gl;\n  const target = this._bufferTarget;\n  gl.bindBuffer(target, null);\n};\n\nBuffer.prototype.copyFromArrayView = function (arrayView, offsetInBytes) {\n  offsetInBytes = offsetInBytes ?? 0;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"arrayView\", arrayView);\n  Check.typeOf.number.lessThanOrEquals(\n    \"offsetInBytes + arrayView.byteLength\",\n    offsetInBytes + arrayView.byteLength,\n    this._sizeInBytes,\n  );\n  //>>includeEnd('debug');\n\n  const gl = this._gl;\n  const target = this._bufferTarget;\n  gl.bindBuffer(target, this._buffer);\n  gl.bufferSubData(target, offsetInBytes, arrayView);\n  gl.bindBuffer(target, null);\n};\n\nBuffer.prototype.copyFromBuffer = function (\n  readBuffer,\n  readOffset,\n  writeOffset,\n  sizeInBytes,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!this._webgl2) {\n    throw new DeveloperError(\"A WebGL 2 context is required.\");\n  }\n  if (!defined(readBuffer)) {\n    throw new DeveloperError(\"readBuffer must be defined.\");\n  }\n  if (!defined(sizeInBytes) || sizeInBytes <= 0) {\n    throw new DeveloperError(\n      \"sizeInBytes must be defined and be greater than zero.\",\n    );\n  }\n  if (\n    !defined(readOffset) ||\n    readOffset < 0 ||\n    readOffset + sizeInBytes > readBuffer._sizeInBytes\n  ) {\n    throw new DeveloperError(\n      \"readOffset must be greater than or equal to zero and readOffset + sizeInBytes must be less than of equal to readBuffer.sizeInBytes.\",\n    );\n  }\n  if (\n    !defined(writeOffset) ||\n    writeOffset < 0 ||\n    writeOffset + sizeInBytes > this._sizeInBytes\n  ) {\n    throw new DeveloperError(\n      \"writeOffset must be greater than or equal to zero and writeOffset + sizeInBytes must be less than of equal to this.sizeInBytes.\",\n    );\n  }\n  if (\n    this._buffer === readBuffer._buffer &&\n    ((writeOffset >= readOffset && writeOffset < readOffset + sizeInBytes) ||\n      (readOffset > writeOffset && readOffset < writeOffset + sizeInBytes))\n  ) {\n    throw new DeveloperError(\n      \"When readBuffer is equal to this, the ranges [readOffset + sizeInBytes) and [writeOffset, writeOffset + sizeInBytes) must not overlap.\",\n    );\n  }\n  if (\n    (this._bufferTarget === WebGLConstants.ELEMENT_ARRAY_BUFFER &&\n      readBuffer._bufferTarget !== WebGLConstants.ELEMENT_ARRAY_BUFFER) ||\n    (this._bufferTarget !== WebGLConstants.ELEMENT_ARRAY_BUFFER &&\n      readBuffer._bufferTarget === WebGLConstants.ELEMENT_ARRAY_BUFFER)\n  ) {\n    throw new DeveloperError(\n      \"Can not copy an index buffer into another buffer type.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const readTarget = WebGLConstants.COPY_READ_BUFFER;\n  const writeTarget = WebGLConstants.COPY_WRITE_BUFFER;\n\n  const gl = this._gl;\n  gl.bindBuffer(writeTarget, this._buffer);\n  gl.bindBuffer(readTarget, readBuffer._buffer);\n  gl.copyBufferSubData(\n    readTarget,\n    writeTarget,\n    readOffset,\n    writeOffset,\n    sizeInBytes,\n  );\n  gl.bindBuffer(writeTarget, null);\n  gl.bindBuffer(readTarget, null);\n};\n\nBuffer.prototype.getBufferData = function (\n  arrayView,\n  sourceOffset,\n  destinationOffset,\n  length,\n) {\n  sourceOffset = sourceOffset ?? 0;\n  destinationOffset = destinationOffset ?? 0;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!this._webgl2) {\n    throw new DeveloperError(\"A WebGL 2 context is required.\");\n  }\n  if (!defined(arrayView)) {\n    throw new DeveloperError(\"arrayView is required.\");\n  }\n\n  let copyLength;\n  let elementSize;\n  let arrayLength = arrayView.byteLength;\n  if (!defined(length)) {\n    if (defined(arrayLength)) {\n      copyLength = arrayLength - destinationOffset;\n      elementSize = 1;\n    } else {\n      arrayLength = arrayView.length;\n      copyLength = arrayLength - destinationOffset;\n      elementSize = arrayView.BYTES_PER_ELEMENT;\n    }\n  } else {\n    copyLength = length;\n    if (defined(arrayLength)) {\n      elementSize = 1;\n    } else {\n      arrayLength = arrayView.length;\n      elementSize = arrayView.BYTES_PER_ELEMENT;\n    }\n  }\n\n  if (destinationOffset < 0 || destinationOffset > arrayLength) {\n    throw new DeveloperError(\n      \"destinationOffset must be greater than zero and less than the arrayView length.\",\n    );\n  }\n  if (destinationOffset + copyLength > arrayLength) {\n    throw new DeveloperError(\n      \"destinationOffset + length must be less than or equal to the arrayViewLength.\",\n    );\n  }\n  if (sourceOffset < 0 || sourceOffset > this._sizeInBytes) {\n    throw new DeveloperError(\n      \"sourceOffset must be greater than zero and less than the buffers size.\",\n    );\n  }\n  if (sourceOffset + copyLength * elementSize > this._sizeInBytes) {\n    throw new DeveloperError(\n      \"sourceOffset + length must be less than the buffers size.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const gl = this._gl;\n  const target = WebGLConstants.COPY_READ_BUFFER;\n  gl.bindBuffer(target, this._buffer);\n  gl.getBufferSubData(\n    target,\n    sourceOffset,\n    arrayView,\n    destinationOffset,\n    length,\n  );\n  gl.bindBuffer(target, null);\n};\n\nBuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nBuffer.prototype.destroy = function () {\n  this._gl.deleteBuffer(this._buffer);\n  return destroyObject(this);\n};\nexport default Buffer;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nconst BufferUsage = {\n  STREAM_DRAW: WebGLConstants.STREAM_DRAW,\n  STATIC_DRAW: WebGLConstants.STATIC_DRAW,\n  DYNAMIC_DRAW: WebGLConstants.DYNAMIC_DRAW,\n  DYNAMIC_READ: WebGLConstants.DYNAMIC_READ,\n\n  validate: function (bufferUsage) {\n    return (\n      bufferUsage === BufferUsage.STREAM_DRAW ||\n      bufferUsage === BufferUsage.STATIC_DRAW ||\n      bufferUsage === BufferUsage.DYNAMIC_DRAW ||\n      bufferUsage === BufferUsage.DYNAMIC_READ\n    );\n  },\n};\nexport default Object.freeze(BufferUsage);\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\n\n/**\n * Represents a command to the renderer for clearing a framebuffer.\n *\n * @private\n * @constructor\n */\nfunction ClearCommand(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The value to clear the color buffer to.  When <code>undefined</code>, the color buffer is not cleared.\n   *\n   * @type {Color}\n   *\n   * @default undefined\n   */\n  this.color = options.color;\n\n  /**\n   * The value to clear the depth buffer to.  When <code>undefined</code>, the depth buffer is not cleared.\n   *\n   * @type {number}\n   *\n   * @default undefined\n   */\n  this.depth = options.depth;\n\n  /**\n   * The value to clear the stencil buffer to.  When <code>undefined</code>, the stencil buffer is not cleared.\n   *\n   * @type {number}\n   *\n   * @default undefined\n   */\n  this.stencil = options.stencil;\n\n  /**\n   * The render state to apply when executing the clear command.  The following states affect clearing:\n   * scissor test, color mask, depth mask, and stencil mask.  When the render state is\n   * <code>undefined</code>, the default render state is used.\n   *\n   * @type {RenderState}\n   *\n   * @default undefined\n   */\n  this.renderState = options.renderState;\n\n  /**\n   * The framebuffer to clear.\n   *\n   * @type {Framebuffer}\n   *\n   * @default undefined\n   */\n  this.framebuffer = options.framebuffer;\n\n  /**\n   * The object who created this command.  This is useful for debugging command\n   * execution; it allows you to see who created a command when you only have a\n   * reference to the command, and can be used to selectively execute commands\n   * with {@link Scene#debugCommandFilter}.\n   *\n   * @type {object}\n   *\n   * @default undefined\n   *\n   * @see Scene#debugCommandFilter\n   */\n  this.owner = options.owner;\n\n  /**\n   * The pass in which to run this command.\n   *\n   * @type {Pass}\n   *\n   * @default undefined\n   */\n  this.pass = options.pass;\n}\n\n/**\n * Clears color to (0.0, 0.0, 0.0, 0.0); depth to 1.0; and stencil to 0.\n *\n * @type {ClearCommand}\n *\n * @constant\n */\nClearCommand.ALL = Object.freeze(\n  new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    depth: 1.0,\n    stencil: 0.0,\n  }),\n);\n\nClearCommand.prototype.execute = function (context, passState) {\n  context.clear(this, passState);\n};\nexport default ClearCommand;\n","import Frozen from \"../Core/Frozen.js\";\nimport Pass from \"./Pass.js\";\n\n/**\n * Represents a command to the renderer for GPU Compute (using old-school GPGPU).\n *\n * @private\n * @constructor\n */\nfunction ComputeCommand(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The vertex array. If none is provided, a viewport quad will be used.\n   *\n   * @type {VertexArray}\n   * @default undefined\n   */\n  this.vertexArray = options.vertexArray;\n\n  /**\n   * The fragment shader source. The default vertex shader is ViewportQuadVS.\n   *\n   * @type {ShaderSource}\n   * @default undefined\n   */\n  this.fragmentShaderSource = options.fragmentShaderSource;\n\n  /**\n   * The shader program to apply.\n   *\n   * @type {ShaderProgram}\n   * @default undefined\n   */\n  this.shaderProgram = options.shaderProgram;\n\n  /**\n   * An object with functions whose names match the uniforms in the shader program\n   * and return values to set those uniforms.\n   *\n   * @type {object}\n   * @default undefined\n   */\n  this.uniformMap = options.uniformMap;\n\n  /**\n   * Texture to use for offscreen rendering.\n   *\n   * @type {Texture}\n   * @default undefined\n   */\n  this.outputTexture = options.outputTexture;\n\n  /**\n   * Function that is called immediately before the ComputeCommand is executed. Used to\n   * update any renderer resources. Takes the ComputeCommand as its single argument.\n   *\n   * @type {Function}\n   * @default undefined\n   */\n  this.preExecute = options.preExecute;\n\n  /**\n   * Function that is called after the ComputeCommand is executed. Takes the output\n   * texture as its single argument.\n   *\n   * @type {Function}\n   * @default undefined\n   */\n  this.postExecute = options.postExecute;\n\n  /**\n   * Function that is called when the command is canceled\n   *\n   * @type {Function}\n   * @default undefined\n   */\n  this.canceled = options.canceled;\n\n  /**\n   * Whether the renderer resources will persist beyond this call. If not, they\n   * will be destroyed after completion.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.persists = options.persists ?? false;\n\n  /**\n   * The pass when to render. Always compute pass.\n   *\n   * @type {Pass}\n   * @default Pass.COMPUTE;\n   */\n  this.pass = Pass.COMPUTE;\n\n  /**\n   * The object who created this command.  This is useful for debugging command\n   * execution; it allows us to see who created a command when we only have a\n   * reference to the command, and can be used to selectively execute commands\n   * with {@link Scene#debugCommandFilter}.\n   *\n   * @type {object}\n   * @default undefined\n   *\n   * @see Scene#debugCommandFilter\n   */\n  this.owner = options.owner;\n}\n\n/**\n * Executes the compute command.\n *\n * @param {ComputeEngine} computeEngine The context that processes the compute command.\n */\nComputeCommand.prototype.execute = function (computeEngine) {\n  computeEngine.execute(this);\n};\nexport default ComputeCommand;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport ViewportQuadVS from \"../Shaders/ViewportQuadVS.js\";\nimport ClearCommand from \"./ClearCommand.js\";\nimport DrawCommand from \"./DrawCommand.js\";\nimport Framebuffer from \"./Framebuffer.js\";\nimport RenderState from \"./RenderState.js\";\nimport ShaderProgram from \"./ShaderProgram.js\";\n\n/**\n * @private\n */\nfunction ComputeEngine(context) {\n  this._context = context;\n}\n\nlet renderStateScratch;\nconst drawCommandScratch = new DrawCommand({\n  primitiveType: PrimitiveType.TRIANGLES,\n});\nconst clearCommandScratch = new ClearCommand({\n  color: new Color(0.0, 0.0, 0.0, 0.0),\n});\n\nfunction createFramebuffer(context, outputTexture) {\n  return new Framebuffer({\n    context: context,\n    colorTextures: [outputTexture],\n    destroyAttachments: false,\n  });\n}\n\nfunction createViewportQuadShader(context, fragmentShaderSource) {\n  return ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: ViewportQuadVS,\n    fragmentShaderSource: fragmentShaderSource,\n    attributeLocations: {\n      position: 0,\n      textureCoordinates: 1,\n    },\n  });\n}\n\nfunction createRenderState(width, height) {\n  if (\n    !defined(renderStateScratch) ||\n    renderStateScratch.viewport.width !== width ||\n    renderStateScratch.viewport.height !== height\n  ) {\n    renderStateScratch = RenderState.fromCache({\n      viewport: new BoundingRectangle(0, 0, width, height),\n    });\n  }\n  return renderStateScratch;\n}\n\nComputeEngine.prototype.execute = function (computeCommand) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"computeCommand\", computeCommand);\n  //>>includeEnd('debug');\n\n  // This may modify the command's resources, so do error checking afterwards\n  if (defined(computeCommand.preExecute)) {\n    computeCommand.preExecute(computeCommand);\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(computeCommand.fragmentShaderSource) &&\n    !defined(computeCommand.shaderProgram)\n  ) {\n    throw new DeveloperError(\n      \"computeCommand.fragmentShaderSource or computeCommand.shaderProgram is required.\",\n    );\n  }\n\n  Check.defined(\"computeCommand.outputTexture\", computeCommand.outputTexture);\n  //>>includeEnd('debug');\n\n  const outputTexture = computeCommand.outputTexture;\n  const width = outputTexture.width;\n  const height = outputTexture.height;\n\n  const context = this._context;\n  const vertexArray = defined(computeCommand.vertexArray)\n    ? computeCommand.vertexArray\n    : context.getViewportQuadVertexArray();\n  const shaderProgram = defined(computeCommand.shaderProgram)\n    ? computeCommand.shaderProgram\n    : createViewportQuadShader(context, computeCommand.fragmentShaderSource);\n  const framebuffer = createFramebuffer(context, outputTexture);\n  const renderState = createRenderState(width, height);\n  const uniformMap = computeCommand.uniformMap;\n\n  const clearCommand = clearCommandScratch;\n  clearCommand.framebuffer = framebuffer;\n  clearCommand.renderState = renderState;\n  clearCommand.execute(context);\n\n  const drawCommand = drawCommandScratch;\n  drawCommand.vertexArray = vertexArray;\n  drawCommand.renderState = renderState;\n  drawCommand.shaderProgram = shaderProgram;\n  drawCommand.uniformMap = uniformMap;\n  drawCommand.framebuffer = framebuffer;\n  drawCommand.execute(context);\n\n  framebuffer.destroy();\n\n  if (!computeCommand.persists) {\n    shaderProgram.destroy();\n    if (defined(computeCommand.vertexArray)) {\n      vertexArray.destroy();\n    }\n  }\n\n  if (defined(computeCommand.postExecute)) {\n    computeCommand.postExecute(outputTexture);\n  }\n};\n\nComputeEngine.prototype.isDestroyed = function () {\n  return false;\n};\n\nComputeEngine.prototype.destroy = function () {\n  return destroyObject(this);\n};\nexport default ComputeEngine;\n","import Buffer from \"./Buffer.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport loadKTX2 from \"../Core/loadKTX2.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport ViewportQuadVS from \"../Shaders/ViewportQuadVS.js\";\nimport BufferUsage from \"./BufferUsage.js\";\nimport ClearCommand from \"./ClearCommand.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport CubeMap from \"./CubeMap.js\";\nimport DrawCommand from \"./DrawCommand.js\";\nimport PassState from \"./PassState.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport RenderState from \"./RenderState.js\";\nimport ShaderCache from \"./ShaderCache.js\";\nimport ShaderProgram from \"./ShaderProgram.js\";\nimport Texture from \"./Texture.js\";\nimport TextureCache from \"./TextureCache.js\";\nimport UniformState from \"./UniformState.js\";\nimport VertexArray from \"./VertexArray.js\";\n\n/**\n * @private\n * @constructor\n *\n * @param {HTMLCanvasElement} canvas The canvas element to which the context will be associated\n * @param {ContextOptions} [options] Options to control WebGL settings for the context\n */\nfunction Context(canvas, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"canvas\", canvas);\n  //>>includeEnd('debug');\n\n  const {\n    getWebGLStub,\n    requestWebgl1,\n    webgl: webglOptions = {},\n    allowTextureFilterAnisotropic = true,\n  } = options ?? {};\n\n  // Override select WebGL defaults\n  webglOptions.alpha = webglOptions.alpha ?? false; // WebGL default is true\n  webglOptions.stencil = webglOptions.stencil ?? true; // WebGL default is false\n  webglOptions.powerPreference =\n    webglOptions.powerPreference ?? \"high-performance\"; // WebGL default is \"default\"\n\n  const glContext = defined(getWebGLStub)\n    ? getWebGLStub(canvas, webglOptions)\n    : getWebGLContext(canvas, webglOptions, requestWebgl1);\n\n  // Get context type. instanceof will throw if WebGL2 is not supported\n  const webgl2Supported = typeof WebGL2RenderingContext !== \"undefined\";\n  const webgl2 = webgl2Supported && glContext instanceof WebGL2RenderingContext;\n\n  this._canvas = canvas;\n  this._originalGLContext = glContext;\n  this._gl = glContext;\n  this._webgl2 = webgl2;\n  this._id = createGuid();\n\n  // Validation and logging disabled by default for speed.\n  this.validateFramebuffer = false;\n  this.validateShaderProgram = false;\n  this.logShaderCompilation = false;\n\n  this._throwOnWebGLError = false;\n\n  this._shaderCache = new ShaderCache(this);\n  this._textureCache = new TextureCache();\n\n  const gl = glContext;\n\n  this._stencilBits = gl.getParameter(gl.STENCIL_BITS);\n\n  ContextLimits._maximumCombinedTextureImageUnits = gl.getParameter(\n    gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS,\n  );\n  ContextLimits._maximumCubeMapSize = gl.getParameter(\n    gl.MAX_CUBE_MAP_TEXTURE_SIZE,\n  );\n  ContextLimits._maximumFragmentUniformVectors = gl.getParameter(\n    gl.MAX_FRAGMENT_UNIFORM_VECTORS,\n  );\n  ContextLimits._maximumTextureImageUnits = gl.getParameter(\n    gl.MAX_TEXTURE_IMAGE_UNITS,\n  );\n  ContextLimits._maximumRenderbufferSize = gl.getParameter(\n    gl.MAX_RENDERBUFFER_SIZE,\n  );\n  ContextLimits._maximumTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n  ContextLimits._maximum3DTextureSize = gl.getParameter(gl.MAX_3D_TEXTURE_SIZE);\n  ContextLimits._maximumVaryingVectors = gl.getParameter(\n    gl.MAX_VARYING_VECTORS,\n  );\n  ContextLimits._maximumVertexAttributes = gl.getParameter(\n    gl.MAX_VERTEX_ATTRIBS,\n  );\n  ContextLimits._maximumVertexTextureImageUnits = gl.getParameter(\n    gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS,\n  );\n  ContextLimits._maximumVertexUniformVectors = gl.getParameter(\n    gl.MAX_VERTEX_UNIFORM_VECTORS,\n  );\n\n  ContextLimits._maximumSamples = this._webgl2\n    ? gl.getParameter(gl.MAX_SAMPLES)\n    : 0;\n\n  const aliasedLineWidthRange = gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE); // must include 1\n  ContextLimits._minimumAliasedLineWidth = aliasedLineWidthRange[0];\n  ContextLimits._maximumAliasedLineWidth = aliasedLineWidthRange[1];\n\n  const aliasedPointSizeRange = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE); // must include 1\n  ContextLimits._minimumAliasedPointSize = aliasedPointSizeRange[0];\n  ContextLimits._maximumAliasedPointSize = aliasedPointSizeRange[1];\n\n  const maximumViewportDimensions = gl.getParameter(gl.MAX_VIEWPORT_DIMS);\n  ContextLimits._maximumViewportWidth = maximumViewportDimensions[0];\n  ContextLimits._maximumViewportHeight = maximumViewportDimensions[1];\n\n  const highpFloat = gl.getShaderPrecisionFormat(\n    gl.FRAGMENT_SHADER,\n    gl.HIGH_FLOAT,\n  );\n  ContextLimits._highpFloatSupported = highpFloat.precision !== 0;\n  const highpInt = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_INT);\n  ContextLimits._highpIntSupported = highpInt.rangeMax !== 0;\n\n  this._antialias = gl.getContextAttributes().antialias;\n\n  // Query and initialize extensions\n  this._standardDerivatives = !!getExtension(gl, [\"OES_standard_derivatives\"]);\n  this._blendMinmax = !!getExtension(gl, [\"EXT_blend_minmax\"]);\n  this._elementIndexUint = !!getExtension(gl, [\"OES_element_index_uint\"]);\n  this._depthTexture = !!getExtension(gl, [\n    \"WEBGL_depth_texture\",\n    \"WEBKIT_WEBGL_depth_texture\",\n  ]);\n  this._fragDepth = !!getExtension(gl, [\"EXT_frag_depth\"]);\n  this._debugShaders = getExtension(gl, [\"WEBGL_debug_shaders\"]);\n\n  this._textureFloat = !!getExtension(gl, [\"OES_texture_float\"]);\n  this._textureHalfFloat = !!getExtension(gl, [\"OES_texture_half_float\"]);\n\n  this._textureFloatLinear = !!getExtension(gl, [\"OES_texture_float_linear\"]);\n  this._textureHalfFloatLinear = !!getExtension(gl, [\n    \"OES_texture_half_float_linear\",\n  ]);\n\n  this._supportsTextureLod = !!getExtension(gl, [\"EXT_shader_texture_lod\"]);\n\n  this._colorBufferFloat = !!getExtension(gl, [\n    \"EXT_color_buffer_float\",\n    \"WEBGL_color_buffer_float\",\n  ]);\n  this._floatBlend = !!getExtension(gl, [\"EXT_float_blend\"]);\n  this._colorBufferHalfFloat = !!getExtension(gl, [\n    \"EXT_color_buffer_half_float\",\n  ]);\n\n  this._s3tc = !!getExtension(gl, [\n    \"WEBGL_compressed_texture_s3tc\",\n    \"MOZ_WEBGL_compressed_texture_s3tc\",\n    \"WEBKIT_WEBGL_compressed_texture_s3tc\",\n  ]);\n  this._pvrtc = !!getExtension(gl, [\n    \"WEBGL_compressed_texture_pvrtc\",\n    \"WEBKIT_WEBGL_compressed_texture_pvrtc\",\n  ]);\n  this._astc = !!getExtension(gl, [\"WEBGL_compressed_texture_astc\"]);\n  this._etc = !!getExtension(gl, [\"WEBG_compressed_texture_etc\"]);\n  this._etc1 = !!getExtension(gl, [\"WEBGL_compressed_texture_etc1\"]);\n  this._bc7 = !!getExtension(gl, [\"EXT_texture_compression_bptc\"]);\n\n  // It is necessary to pass supported formats to loadKTX2\n  // because imagery layers don't have access to the context.\n  loadKTX2.setKTX2SupportedFormats(\n    this._s3tc,\n    this._pvrtc,\n    this._astc,\n    this._etc,\n    this._etc1,\n    this._bc7,\n  );\n\n  const textureFilterAnisotropic = allowTextureFilterAnisotropic\n    ? getExtension(gl, [\n        \"EXT_texture_filter_anisotropic\",\n        \"WEBKIT_EXT_texture_filter_anisotropic\",\n      ])\n    : undefined;\n  this._textureFilterAnisotropic = textureFilterAnisotropic;\n  ContextLimits._maximumTextureFilterAnisotropy = defined(\n    textureFilterAnisotropic,\n  )\n    ? gl.getParameter(textureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)\n    : 1.0;\n\n  let glCreateVertexArray;\n  let glBindVertexArray;\n  let glDeleteVertexArray;\n\n  let glDrawElementsInstanced;\n  let glDrawArraysInstanced;\n  let glVertexAttribDivisor;\n\n  let glDrawBuffers;\n\n  let vertexArrayObject;\n  let instancedArrays;\n  let drawBuffers;\n\n  if (webgl2) {\n    const that = this;\n\n    glCreateVertexArray = function () {\n      return that._gl.createVertexArray();\n    };\n    glBindVertexArray = function (vao) {\n      that._gl.bindVertexArray(vao);\n    };\n    glDeleteVertexArray = function (vao) {\n      that._gl.deleteVertexArray(vao);\n    };\n\n    glDrawElementsInstanced = function (\n      mode,\n      count,\n      type,\n      offset,\n      instanceCount,\n    ) {\n      gl.drawElementsInstanced(mode, count, type, offset, instanceCount);\n    };\n    glDrawArraysInstanced = function (mode, first, count, instanceCount) {\n      gl.drawArraysInstanced(mode, first, count, instanceCount);\n    };\n    glVertexAttribDivisor = function (index, divisor) {\n      gl.vertexAttribDivisor(index, divisor);\n    };\n\n    glDrawBuffers = function (buffers) {\n      gl.drawBuffers(buffers);\n    };\n  } else {\n    vertexArrayObject = getExtension(gl, [\"OES_vertex_array_object\"]);\n    if (defined(vertexArrayObject)) {\n      glCreateVertexArray = function () {\n        return vertexArrayObject.createVertexArrayOES();\n      };\n      glBindVertexArray = function (vertexArray) {\n        vertexArrayObject.bindVertexArrayOES(vertexArray);\n      };\n      glDeleteVertexArray = function (vertexArray) {\n        vertexArrayObject.deleteVertexArrayOES(vertexArray);\n      };\n    }\n\n    instancedArrays = getExtension(gl, [\"ANGLE_instanced_arrays\"]);\n    if (defined(instancedArrays)) {\n      glDrawElementsInstanced = function (\n        mode,\n        count,\n        type,\n        offset,\n        instanceCount,\n      ) {\n        instancedArrays.drawElementsInstancedANGLE(\n          mode,\n          count,\n          type,\n          offset,\n          instanceCount,\n        );\n      };\n      glDrawArraysInstanced = function (mode, first, count, instanceCount) {\n        instancedArrays.drawArraysInstancedANGLE(\n          mode,\n          first,\n          count,\n          instanceCount,\n        );\n      };\n      glVertexAttribDivisor = function (index, divisor) {\n        instancedArrays.vertexAttribDivisorANGLE(index, divisor);\n      };\n    }\n\n    drawBuffers = getExtension(gl, [\"WEBGL_draw_buffers\"]);\n    if (defined(drawBuffers)) {\n      glDrawBuffers = function (buffers) {\n        drawBuffers.drawBuffersWEBGL(buffers);\n      };\n    }\n  }\n\n  this.glCreateVertexArray = glCreateVertexArray;\n  this.glBindVertexArray = glBindVertexArray;\n  this.glDeleteVertexArray = glDeleteVertexArray;\n\n  this.glDrawElementsInstanced = glDrawElementsInstanced;\n  this.glDrawArraysInstanced = glDrawArraysInstanced;\n  this.glVertexAttribDivisor = glVertexAttribDivisor;\n\n  this.glDrawBuffers = glDrawBuffers;\n\n  this._vertexArrayObject = !!vertexArrayObject;\n  this._instancedArrays = !!instancedArrays;\n  this._drawBuffers = !!drawBuffers;\n\n  ContextLimits._maximumDrawBuffers = this.drawBuffers\n    ? gl.getParameter(WebGLConstants.MAX_DRAW_BUFFERS)\n    : 1;\n  ContextLimits._maximumColorAttachments = this.drawBuffers\n    ? gl.getParameter(WebGLConstants.MAX_COLOR_ATTACHMENTS)\n    : 1;\n\n  this._clearColor = new Color(0.0, 0.0, 0.0, 0.0);\n  this._clearDepth = 1.0;\n  this._clearStencil = 0;\n\n  const us = new UniformState();\n  const ps = new PassState(this);\n  const rs = RenderState.fromCache();\n\n  this._defaultPassState = ps;\n  this._defaultRenderState = rs;\n  // default texture has a value of (1, 1, 1)\n  // default emissive texture has a value of (0, 0, 0)\n  // default normal texture is +z which is encoded as (0.5, 0.5, 1)\n  this._defaultTexture = undefined;\n  this._defaultEmissiveTexture = undefined;\n  this._defaultNormalTexture = undefined;\n  this._defaultCubeMap = undefined;\n\n  this._us = us;\n  this._currentRenderState = rs;\n  this._currentPassState = ps;\n  this._currentFramebuffer = undefined;\n  this._maxFrameTextureUnitIndex = 0;\n\n  // Vertex attribute divisor state cache. Workaround for ANGLE (also look at VertexArray.setVertexAttribDivisor)\n  this._vertexAttribDivisors = [];\n  this._previousDrawInstanced = false;\n  for (let i = 0; i < ContextLimits._maximumVertexAttributes; i++) {\n    this._vertexAttribDivisors.push(0);\n  }\n\n  this._pickObjects = new Map();\n  this._nextPickColor = new Uint32Array(1);\n\n  /**\n   * The options used to construct this context\n   *\n   * @type {ContextOptions}\n   */\n  this.options = {\n    getWebGLStub: getWebGLStub,\n    requestWebgl1: requestWebgl1,\n    webgl: webglOptions,\n    allowTextureFilterAnisotropic: allowTextureFilterAnisotropic,\n  };\n\n  /**\n   * A cache of objects tied to this context.  Just before the Context is destroyed,\n   * <code>destroy</code> will be invoked on each object in this object literal that has\n   * such a method.  This is useful for caching any objects that might otherwise\n   * be stored globally, except they're tied to a particular context, and to manage\n   * their lifetime.\n   *\n   * @type {object}\n   */\n  this.cache = {};\n\n  RenderState.apply(gl, rs, ps);\n}\n\n/**\n * @typedef {object} ContextOptions\n *\n * Options to control the setting up of a WebGL Context.\n * <p>\n * <code>allowTextureFilterAnisotropic</code> defaults to true, which enables\n * anisotropic texture filtering when the WebGL extension is supported.\n * Setting this to false will improve performance, but hurt visual quality,\n * especially for horizon views.\n * </p>\n *\n * @property {boolean} [requestWebgl1=false] If true and the browser supports it, use a WebGL 1 rendering context\n * @property {boolean} [allowTextureFilterAnisotropic=true] If true, use anisotropic filtering during texture sampling\n * @property {WebGLOptions} [webgl] WebGL options to be passed on to canvas.getContext\n * @property {Function} [getWebGLStub] A function to create a WebGL stub for testing\n */\n\n/**\n * @private\n * @param {HTMLCanvasElement} canvas The canvas element to which the context will be associated\n * @param {WebGLOptions} webglOptions WebGL options to be passed on to HTMLCanvasElement.getContext()\n * @param {boolean} requestWebgl1 Whether to request a WebGLRenderingContext or a WebGL2RenderingContext.\n * @returns {WebGLRenderingContext|WebGL2RenderingContext}\n */\nfunction getWebGLContext(canvas, webglOptions, requestWebgl1) {\n  if (typeof WebGLRenderingContext === \"undefined\") {\n    throw new RuntimeError(\n      \"The browser does not support WebGL.  Visit http://get.webgl.org.\",\n    );\n  }\n\n  // Ensure that WebGL 2 is supported when it is requested. Otherwise, fall back to WebGL 1.\n  const webgl2Supported = typeof WebGL2RenderingContext !== \"undefined\";\n  if (!requestWebgl1 && !webgl2Supported) {\n    requestWebgl1 = true;\n  }\n\n  const contextType = requestWebgl1 ? \"webgl\" : \"webgl2\";\n  const glContext = canvas.getContext(contextType, webglOptions);\n\n  if (!defined(glContext)) {\n    throw new RuntimeError(\n      \"The browser supports WebGL, but initialization failed.\",\n    );\n  }\n\n  return glContext;\n}\n\n/**\n * @typedef {object} WebGLOptions\n *\n * WebGL options to be passed on to HTMLCanvasElement.getContext().\n * See {@link https://registry.khronos.org/webgl/specs/latest/1.0/#5.2|WebGLContextAttributes}\n * but note the modified defaults for 'alpha', 'stencil', and 'powerPreference'\n *\n * <p>\n * <code>alpha</code> defaults to false, which can improve performance\n * compared to the standard WebGL default of true.  If an application needs\n * to composite Cesium above other HTML elements using alpha-blending, set\n * <code>alpha</code> to true.\n * </p>\n *\n * @property {boolean} [alpha=false]\n * @property {boolean} [depth=true]\n * @property {boolean} [stencil=false]\n * @property {boolean} [antialias=true]\n * @property {boolean} [premultipliedAlpha=true]\n * @property {boolean} [preserveDrawingBuffer=false]\n * @property {(\"default\"|\"low-power\"|\"high-performance\")} [powerPreference=\"high-performance\"]\n * @property {boolean} [failIfMajorPerformanceCaveat=false]\n */\n\nfunction errorToString(gl, error) {\n  let message = \"WebGL Error:  \";\n  switch (error) {\n    case gl.INVALID_ENUM:\n      message += \"INVALID_ENUM\";\n      break;\n    case gl.INVALID_VALUE:\n      message += \"INVALID_VALUE\";\n      break;\n    case gl.INVALID_OPERATION:\n      message += \"INVALID_OPERATION\";\n      break;\n    case gl.OUT_OF_MEMORY:\n      message += \"OUT_OF_MEMORY\";\n      break;\n    case gl.CONTEXT_LOST_WEBGL:\n      message += \"CONTEXT_LOST_WEBGL lost\";\n      break;\n    default:\n      message += `Unknown (${error})`;\n  }\n\n  return message;\n}\n\nfunction createErrorMessage(gl, glFunc, glFuncArguments, error) {\n  let message = `${errorToString(gl, error)}: ${glFunc.name}(`;\n\n  for (let i = 0; i < glFuncArguments.length; ++i) {\n    if (i !== 0) {\n      message += \", \";\n    }\n    message += glFuncArguments[i];\n  }\n  message += \");\";\n\n  return message;\n}\n\nfunction throwOnError(gl, glFunc, glFuncArguments) {\n  const error = gl.getError();\n  if (error !== gl.NO_ERROR) {\n    throw new RuntimeError(\n      createErrorMessage(gl, glFunc, glFuncArguments, error),\n    );\n  }\n}\n\nfunction makeGetterSetter(gl, propertyName, logFunction) {\n  return {\n    get: function () {\n      const value = gl[propertyName];\n      logFunction(gl, `get: ${propertyName}`, value);\n      return gl[propertyName];\n    },\n    set: function (value) {\n      gl[propertyName] = value;\n      logFunction(gl, `set: ${propertyName}`, value);\n    },\n  };\n}\n\nfunction wrapGL(gl, logFunction) {\n  if (!defined(logFunction)) {\n    return gl;\n  }\n\n  function wrapFunction(property) {\n    return function () {\n      const result = property.apply(gl, arguments);\n      logFunction(gl, property, arguments);\n      return result;\n    };\n  }\n\n  const glWrapper = {};\n\n  // JavaScript linters normally demand that a for..in loop must directly contain an if,\n  // but in our loop below, we actually intend to iterate all properties, including\n  // those in the prototype.\n  /*eslint-disable guard-for-in*/\n  for (const propertyName in gl) {\n    const property = gl[propertyName];\n\n    // wrap any functions we encounter, otherwise just copy the property to the wrapper.\n    if (property instanceof Function) {\n      glWrapper[propertyName] = wrapFunction(property);\n    } else {\n      Object.defineProperty(\n        glWrapper,\n        propertyName,\n        makeGetterSetter(gl, propertyName, logFunction),\n      );\n    }\n  }\n  /*eslint-enable guard-for-in*/\n\n  return glWrapper;\n}\n\nfunction getExtension(gl, names) {\n  const length = names.length;\n  for (let i = 0; i < length; ++i) {\n    const extension = gl.getExtension(names[i]);\n    if (extension) {\n      return extension;\n    }\n  }\n\n  return undefined;\n}\n\nconst defaultFramebufferMarker = {};\n\nObject.defineProperties(Context.prototype, {\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  webgl2: {\n    get: function () {\n      return this._webgl2;\n    },\n  },\n  canvas: {\n    get: function () {\n      return this._canvas;\n    },\n  },\n  shaderCache: {\n    get: function () {\n      return this._shaderCache;\n    },\n  },\n  textureCache: {\n    get: function () {\n      return this._textureCache;\n    },\n  },\n  uniformState: {\n    get: function () {\n      return this._us;\n    },\n  },\n\n  /**\n   * The number of stencil bits per pixel in the default bound framebuffer.  The minimum is eight bits.\n   * @memberof Context.prototype\n   * @type {number}\n   * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>STENCIL_BITS</code>.\n   */\n  stencilBits: {\n    get: function () {\n      return this._stencilBits;\n    },\n  },\n\n  /**\n   * <code>true</code> if the WebGL context supports stencil buffers.\n   * Stencil buffers are not supported by all systems.\n   * @memberof Context.prototype\n   * @type {boolean}\n   */\n  stencilBuffer: {\n    get: function () {\n      return this._stencilBits >= 8;\n    },\n  },\n\n  /**\n   * <code>true</code> if the WebGL context supports antialiasing.  By default\n   * antialiasing is requested, but it is not supported by all systems.\n   * @memberof Context.prototype\n   * @type {boolean}\n   */\n  antialias: {\n    get: function () {\n      return this._antialias;\n    },\n  },\n\n  /**\n   * <code>true</code> if the WebGL context supports multisample antialiasing. Requires\n   * WebGL2.\n   * @memberof Context.prototype\n   * @type {boolean}\n   */\n  msaa: {\n    get: function () {\n      return this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if the OES_standard_derivatives extension is supported.  This\n   * extension provides access to <code>dFdx</code>, <code>dFdy</code>, and <code>fwidth</code>\n   * functions from GLSL.  A shader using these functions still needs to explicitly enable the\n   * extension with <code>#extension GL_OES_standard_derivatives : enable</code>.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link http://www.khronos.org/registry/gles/extensions/OES/OES_standard_derivatives.txt|OES_standard_derivatives}\n   */\n  standardDerivatives: {\n    get: function () {\n      return this._standardDerivatives || this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if the EXT_float_blend extension is supported. This\n   * extension enables blending with 32-bit float values.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_float_blend/}\n   */\n  floatBlend: {\n    get: function () {\n      return this._floatBlend;\n    },\n  },\n\n  /**\n   * <code>true</code> if the EXT_blend_minmax extension is supported.  This\n   * extension extends blending capabilities by adding two new blend equations:\n   * the minimum or maximum color components of the source and destination colors.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/}\n   */\n  blendMinmax: {\n    get: function () {\n      return this._blendMinmax || this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if the OES_element_index_uint extension is supported.  This\n   * extension allows the use of unsigned int indices, which can improve performance by\n   * eliminating batch breaking caused by unsigned short indices.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/|OES_element_index_uint}\n   */\n  elementIndexUint: {\n    get: function () {\n      return this._elementIndexUint || this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if WEBGL_depth_texture is supported.  This extension provides\n   * access to depth textures that, for example, can be attached to framebuffers for shadow mapping.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n   */\n  depthTexture: {\n    get: function () {\n      return this._depthTexture || this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if OES_texture_float is supported. This extension provides\n   * access to floating point textures that, for example, can be attached to framebuffers for high dynamic range.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_float/}\n   */\n  floatingPointTexture: {\n    get: function () {\n      return this._webgl2 || this._textureFloat;\n    },\n  },\n\n  /**\n   * <code>true</code> if OES_texture_half_float is supported. This extension provides\n   * access to floating point textures that, for example, can be attached to framebuffers for high dynamic range.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/}\n   */\n  halfFloatingPointTexture: {\n    get: function () {\n      return this._webgl2 || this._textureHalfFloat;\n    },\n  },\n\n  /**\n   * <code>true</code> if OES_texture_float_linear is supported. This extension provides\n   * access to linear sampling methods for minification and magnification filters of floating-point textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_float_linear/}\n   */\n  textureFloatLinear: {\n    get: function () {\n      return this._textureFloatLinear;\n    },\n  },\n\n  /**\n   * <code>true</code> if OES_texture_half_float_linear is supported. This extension provides\n   * access to linear sampling methods for minification and magnification filters of half floating-point textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/OES_texture_half_float_linear/}\n   */\n  textureHalfFloatLinear: {\n    get: function () {\n      return (\n        (this._webgl2 && this._textureFloatLinear) ||\n        (!this._webgl2 && this._textureHalfFloatLinear)\n      );\n    },\n  },\n\n  /**\n   * <code>true</code> if EXT_shader_texture_lod is supported. This extension provides\n   * access to explicit LOD selection in texture sampling functions.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://registry.khronos.org/webgl/extensions/EXT_shader_texture_lod/}\n   */\n  supportsTextureLod: {\n    get: function () {\n      return this._webgl2 || this._supportsTextureLod;\n    },\n  },\n\n  /**\n   * <code>true</code> if EXT_texture_filter_anisotropic is supported. This extension provides\n   * access to anisotropic filtering for textured surfaces at an oblique angle from the viewer.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/}\n   */\n  textureFilterAnisotropic: {\n    get: function () {\n      return !!this._textureFilterAnisotropic;\n    },\n  },\n\n  /**\n   * <code>true</code> if WEBGL_compressed_texture_s3tc is supported.  This extension provides\n   * access to DXT compressed textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/}\n   */\n  s3tc: {\n    get: function () {\n      return this._s3tc;\n    },\n  },\n\n  /**\n   * <code>true</code> if WEBGL_compressed_texture_pvrtc is supported.  This extension provides\n   * access to PVR compressed textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/}\n   */\n  pvrtc: {\n    get: function () {\n      return this._pvrtc;\n    },\n  },\n\n  /**\n   * <code>true</code> if WEBGL_compressed_texture_astc is supported.  This extension provides\n   * access to ASTC compressed textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/}\n   */\n  astc: {\n    get: function () {\n      return this._astc;\n    },\n  },\n\n  /**\n   * <code>true</code> if WEBGL_compressed_texture_etc is supported.  This extension provides\n   * access to ETC compressed textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/}\n   */\n  etc: {\n    get: function () {\n      return this._etc;\n    },\n  },\n\n  /**\n   * <code>true</code> if WEBGL_compressed_texture_etc1 is supported.  This extension provides\n   * access to ETC1 compressed textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc1/}\n   */\n  etc1: {\n    get: function () {\n      return this._etc1;\n    },\n  },\n\n  /**\n   * <code>true</code> if EXT_texture_compression_bptc is supported.  This extension provides\n   * access to BC7 compressed textures.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_texture_compression_bptc/}\n   */\n  bc7: {\n    get: function () {\n      return this._bc7;\n    },\n  },\n\n  /**\n   * <code>true</code> if S3TC, PVRTC, ASTC, ETC, ETC1, or BC7 compression is supported.\n   * @memberof Context.prototype\n   * @type {boolean}\n   */\n  supportsBasis: {\n    get: function () {\n      return (\n        this._s3tc ||\n        this._pvrtc ||\n        this._astc ||\n        this._etc ||\n        this._etc1 ||\n        this._bc7\n      );\n    },\n  },\n\n  /**\n   * <code>true</code> if the OES_vertex_array_object extension is supported.  This\n   * extension can improve performance by reducing the overhead of switching vertex arrays.\n   * When enabled, this extension is automatically used by {@link VertexArray}.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/|OES_vertex_array_object}\n   */\n  vertexArrayObject: {\n    get: function () {\n      return this._vertexArrayObject || this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if the EXT_frag_depth extension is supported.  This\n   * extension provides access to the <code>gl_FragDepthEXT</code> built-in output variable\n   * from GLSL fragment shaders.  A shader using these functions still needs to explicitly enable the\n   * extension with <code>#extension GL_EXT_frag_depth : enable</code>.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/|EXT_frag_depth}\n   */\n  fragmentDepth: {\n    get: function () {\n      return this._fragDepth || this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if the ANGLE_instanced_arrays extension is supported.  This\n   * extension provides access to instanced rendering.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays}\n   */\n  instancedArrays: {\n    get: function () {\n      return this._instancedArrays || this._webgl2;\n    },\n  },\n\n  /**\n   * <code>true</code> if the EXT_color_buffer_float extension is supported.  This\n   * extension makes the gl.RGBA32F format color renderable.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/WEBGL_color_buffer_float/}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/}\n   */\n  colorBufferFloat: {\n    get: function () {\n      return this._colorBufferFloat;\n    },\n  },\n\n  /**\n   * <code>true</code> if the EXT_color_buffer_half_float extension is supported.  This\n   * extension makes the format gl.RGBA16F format color renderable.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_half_float/}\n   * @see {@link https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/}\n   */\n  colorBufferHalfFloat: {\n    get: function () {\n      return (\n        (this._webgl2 && this._colorBufferFloat) ||\n        (!this._webgl2 && this._colorBufferHalfFloat)\n      );\n    },\n  },\n\n  /**\n   * <code>true</code> if the WEBGL_draw_buffers extension is supported. This\n   * extensions provides support for multiple render targets. The framebuffer object can have mutiple\n   * color attachments and the GLSL fragment shader can write to the built-in output array <code>gl_FragData</code>.\n   * A shader using this feature needs to explicitly enable the extension with\n   * <code>#extension GL_EXT_draw_buffers : enable</code>.\n   * @memberof Context.prototype\n   * @type {boolean}\n   * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/|WEBGL_draw_buffers}\n   */\n  drawBuffers: {\n    get: function () {\n      return this._drawBuffers || this._webgl2;\n    },\n  },\n\n  debugShaders: {\n    get: function () {\n      return this._debugShaders;\n    },\n  },\n\n  throwOnWebGLError: {\n    get: function () {\n      return this._throwOnWebGLError;\n    },\n    set: function (value) {\n      this._throwOnWebGLError = value;\n      this._gl = wrapGL(\n        this._originalGLContext,\n        value ? throwOnError : undefined,\n      );\n    },\n  },\n\n  /**\n   * A 1x1 RGBA texture initialized to [255, 255, 255, 255].  This can\n   * be used as a placeholder texture while other textures are downloaded.\n   * @memberof Context.prototype\n   * @type {Texture}\n   */\n  defaultTexture: {\n    get: function () {\n      if (this._defaultTexture === undefined) {\n        this._defaultTexture = new Texture({\n          context: this,\n          source: {\n            width: 1,\n            height: 1,\n            arrayBufferView: new Uint8Array([255, 255, 255, 255]),\n          },\n          flipY: false,\n        });\n      }\n\n      return this._defaultTexture;\n    },\n  },\n  /**\n   * A 1x1 RGB texture initialized to [0, 0, 0] representing a material that is\n   * not emissive. This can be used as a placeholder texture for emissive\n   * textures while other textures are downloaded.\n   * @memberof Context.prototype\n   * @type {Texture}\n   */\n  defaultEmissiveTexture: {\n    get: function () {\n      if (this._defaultEmissiveTexture === undefined) {\n        this._defaultEmissiveTexture = new Texture({\n          context: this,\n          pixelFormat: PixelFormat.RGB,\n          source: {\n            width: 1,\n            height: 1,\n            arrayBufferView: new Uint8Array([0, 0, 0]),\n          },\n          flipY: false,\n        });\n      }\n\n      return this._defaultEmissiveTexture;\n    },\n  },\n  /**\n   * A 1x1 RGBA texture initialized to [128, 128, 255] to encode a tangent\n   * space normal pointing in the +z direction, i.e. (0, 0, 1). This can\n   * be used as a placeholder normal texture while other textures are\n   * downloaded.\n   * @memberof Context.prototype\n   * @type {Texture}\n   */\n  defaultNormalTexture: {\n    get: function () {\n      if (this._defaultNormalTexture === undefined) {\n        this._defaultNormalTexture = new Texture({\n          context: this,\n          pixelFormat: PixelFormat.RGB,\n          source: {\n            width: 1,\n            height: 1,\n            arrayBufferView: new Uint8Array([128, 128, 255]),\n          },\n          flipY: false,\n        });\n      }\n\n      return this._defaultNormalTexture;\n    },\n  },\n\n  /**\n   * A cube map, where each face is a 1x1 RGBA texture initialized to\n   * [255, 255, 255, 255].  This can be used as a placeholder cube map while\n   * other cube maps are downloaded.\n   * @memberof Context.prototype\n   * @type {CubeMap}\n   */\n  defaultCubeMap: {\n    get: function () {\n      if (this._defaultCubeMap === undefined) {\n        const face = {\n          width: 1,\n          height: 1,\n          arrayBufferView: new Uint8Array([255, 255, 255, 255]),\n        };\n\n        this._defaultCubeMap = new CubeMap({\n          context: this,\n          source: {\n            positiveX: face,\n            negativeX: face,\n            positiveY: face,\n            negativeY: face,\n            positiveZ: face,\n            negativeZ: face,\n          },\n          flipY: false,\n        });\n      }\n\n      return this._defaultCubeMap;\n    },\n  },\n\n  /**\n   * The drawingBufferHeight of the underlying GL context.\n   * @memberof Context.prototype\n   * @type {number}\n   * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferHeight|drawingBufferHeight}\n   */\n  drawingBufferHeight: {\n    get: function () {\n      return this._gl.drawingBufferHeight;\n    },\n  },\n\n  /**\n   * The drawingBufferWidth of the underlying GL context.\n   * @memberof Context.prototype\n   * @type {number}\n   * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferWidth|drawingBufferWidth}\n   */\n  drawingBufferWidth: {\n    get: function () {\n      return this._gl.drawingBufferWidth;\n    },\n  },\n\n  /**\n   * Gets an object representing the currently bound framebuffer.  While this instance is not an actual\n   * {@link Framebuffer}, it is used to represent the default framebuffer in calls to\n   * {@link Texture.fromFramebuffer}.\n   * @memberof Context.prototype\n   * @type {object}\n   */\n  defaultFramebuffer: {\n    get: function () {\n      return defaultFramebufferMarker;\n    },\n  },\n});\n\n/**\n * Validates a framebuffer.\n * Available in debug builds only.\n * @private\n */\nfunction validateFramebuffer(context) {\n  //>>includeStart('debug', pragmas.debug);\n  if (context.validateFramebuffer) {\n    const gl = context._gl;\n    const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);\n\n    if (status !== gl.FRAMEBUFFER_COMPLETE) {\n      let message;\n\n      switch (status) {\n        case gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n          message =\n            \"Framebuffer is not complete.  Incomplete attachment: at least one attachment point with a renderbuffer or texture attached has its attached object no longer in existence or has an attached image with a width or height of zero, or the color attachment point has a non-color-renderable image attached, or the depth attachment point has a non-depth-renderable image attached, or the stencil attachment point has a non-stencil-renderable image attached.  Color-renderable formats include GL_RGBA4, GL_RGB5_A1, and GL_RGB565. GL_DEPTH_COMPONENT16 is the only depth-renderable format. GL_STENCIL_INDEX8 is the only stencil-renderable format.\";\n          break;\n        case gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n          message =\n            \"Framebuffer is not complete.  Incomplete dimensions: not all attached images have the same width and height.\";\n          break;\n        case gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n          message =\n            \"Framebuffer is not complete.  Missing attachment: no images are attached to the framebuffer.\";\n          break;\n        case gl.FRAMEBUFFER_UNSUPPORTED:\n          message =\n            \"Framebuffer is not complete.  Unsupported: the combination of internal formats of the attached images violates an implementation-dependent set of restrictions.\";\n          break;\n      }\n\n      throw new DeveloperError(message);\n    }\n  }\n  //>>includeEnd('debug');\n}\n\nfunction applyRenderState(context, renderState, passState, clear) {\n  const previousRenderState = context._currentRenderState;\n  const previousPassState = context._currentPassState;\n  context._currentRenderState = renderState;\n  context._currentPassState = passState;\n  RenderState.partialApply(\n    context._gl,\n    previousRenderState,\n    renderState,\n    previousPassState,\n    passState,\n    clear,\n  );\n}\n\nlet scratchBackBufferArray;\n// this check must use typeof, not defined, because defined doesn't work with undeclared variables.\nif (typeof WebGLRenderingContext !== \"undefined\") {\n  scratchBackBufferArray = [WebGLConstants.BACK];\n}\n\nfunction bindFramebuffer(context, framebuffer) {\n  if (framebuffer !== context._currentFramebuffer) {\n    context._currentFramebuffer = framebuffer;\n    let buffers = scratchBackBufferArray;\n\n    if (defined(framebuffer)) {\n      framebuffer._bind();\n      validateFramebuffer(context);\n\n      // TODO: Need a way for a command to give what draw buffers are active.\n      buffers = framebuffer._getActiveColorAttachments();\n    } else {\n      const gl = context._gl;\n      gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n    }\n\n    if (context.drawBuffers) {\n      context.glDrawBuffers(buffers);\n    }\n  }\n}\n\nconst defaultClearCommand = new ClearCommand();\n\nContext.prototype.clear = function (clearCommand, passState) {\n  clearCommand = clearCommand ?? defaultClearCommand;\n  passState = passState ?? this._defaultPassState;\n\n  const gl = this._gl;\n  let bitmask = 0;\n\n  const c = clearCommand.color;\n  const d = clearCommand.depth;\n  const s = clearCommand.stencil;\n\n  if (defined(c)) {\n    if (!Color.equals(this._clearColor, c)) {\n      Color.clone(c, this._clearColor);\n      gl.clearColor(c.red, c.green, c.blue, c.alpha);\n    }\n    bitmask |= gl.COLOR_BUFFER_BIT;\n  }\n\n  if (defined(d)) {\n    if (d !== this._clearDepth) {\n      this._clearDepth = d;\n      gl.clearDepth(d);\n    }\n    bitmask |= gl.DEPTH_BUFFER_BIT;\n  }\n\n  if (defined(s)) {\n    if (s !== this._clearStencil) {\n      this._clearStencil = s;\n      gl.clearStencil(s);\n    }\n    bitmask |= gl.STENCIL_BUFFER_BIT;\n  }\n\n  const rs = clearCommand.renderState ?? this._defaultRenderState;\n  applyRenderState(this, rs, passState, true);\n\n  // The command's framebuffer takes presidence over the pass' framebuffer, e.g., for off-screen rendering.\n  const framebuffer = clearCommand.framebuffer ?? passState.framebuffer;\n  bindFramebuffer(this, framebuffer);\n\n  gl.clear(bitmask);\n};\n\nfunction beginDraw(\n  context,\n  framebuffer,\n  passState,\n  shaderProgram,\n  renderState,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(framebuffer) && renderState.depthTest) {\n    if (renderState.depthTest.enabled && !framebuffer.hasDepthAttachment) {\n      throw new DeveloperError(\n        \"The depth test can not be enabled (drawCommand.renderState.depthTest.enabled) because the framebuffer (drawCommand.framebuffer) does not have a depth or depth-stencil renderbuffer.\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  bindFramebuffer(context, framebuffer);\n  applyRenderState(context, renderState, passState, false);\n  shaderProgram._bind();\n\n  context._maxFrameTextureUnitIndex = Math.max(\n    context._maxFrameTextureUnitIndex,\n    shaderProgram.maximumTextureUnitIndex,\n  );\n}\n\nfunction continueDraw(context, drawCommand, shaderProgram, uniformMap) {\n  const primitiveType = drawCommand._primitiveType;\n  const va = drawCommand._vertexArray;\n  let offset = drawCommand._offset;\n  let count = drawCommand._count;\n  const instanceCount = drawCommand.instanceCount;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!PrimitiveType.validate(primitiveType)) {\n    throw new DeveloperError(\n      \"drawCommand.primitiveType is required and must be valid.\",\n    );\n  }\n\n  Check.defined(\"drawCommand.vertexArray\", va);\n  Check.typeOf.number.greaterThanOrEquals(\"drawCommand.offset\", offset, 0);\n  if (defined(count)) {\n    Check.typeOf.number.greaterThanOrEquals(\"drawCommand.count\", count, 0);\n  }\n  Check.typeOf.number.greaterThanOrEquals(\n    \"drawCommand.instanceCount\",\n    instanceCount,\n    0,\n  );\n  if (instanceCount > 0 && !context.instancedArrays) {\n    throw new DeveloperError(\"Instanced arrays extension is not supported\");\n  }\n  //>>includeEnd('debug');\n\n  context._us.model = drawCommand._modelMatrix ?? Matrix4.IDENTITY;\n  shaderProgram._setUniforms(\n    uniformMap,\n    context._us,\n    context.validateShaderProgram,\n  );\n\n  va._bind();\n  const indexBuffer = va.indexBuffer;\n\n  if (defined(indexBuffer)) {\n    offset = offset * indexBuffer.bytesPerIndex; // offset in vertices to offset in bytes\n    if (defined(count)) {\n      count = Math.min(count, indexBuffer.numberOfIndices);\n    } else {\n      count = indexBuffer.numberOfIndices;\n    }\n    if (instanceCount === 0) {\n      context._gl.drawElements(\n        primitiveType,\n        count,\n        indexBuffer.indexDatatype,\n        offset,\n      );\n    } else {\n      context.glDrawElementsInstanced(\n        primitiveType,\n        count,\n        indexBuffer.indexDatatype,\n        offset,\n        instanceCount,\n      );\n    }\n  } else {\n    if (defined(count)) {\n      count = Math.min(count, va.numberOfVertices);\n    } else {\n      count = va.numberOfVertices;\n    }\n\n    if (instanceCount === 0) {\n      context._gl.drawArrays(primitiveType, offset, count);\n    } else {\n      context.glDrawArraysInstanced(\n        primitiveType,\n        offset,\n        count,\n        instanceCount,\n      );\n    }\n  }\n\n  va._unBind();\n}\n\nContext.prototype.draw = function (\n  drawCommand,\n  passState,\n  shaderProgram,\n  uniformMap,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"drawCommand\", drawCommand);\n  Check.defined(\"drawCommand.shaderProgram\", drawCommand._shaderProgram);\n  //>>includeEnd('debug');\n\n  passState = passState ?? this._defaultPassState;\n  // The command's framebuffer takes precedence over the pass' framebuffer, e.g., for off-screen rendering.\n  const framebuffer = drawCommand._framebuffer ?? passState.framebuffer;\n  const renderState = drawCommand._renderState ?? this._defaultRenderState;\n  shaderProgram = shaderProgram ?? drawCommand._shaderProgram;\n  uniformMap = uniformMap ?? drawCommand._uniformMap;\n\n  beginDraw(this, framebuffer, passState, shaderProgram, renderState);\n  continueDraw(this, drawCommand, shaderProgram, uniformMap);\n};\n\nContext.prototype.beginFrame = function () {\n  // A no-op. Overridden when drawing to a SharedContext.\n};\n\nContext.prototype.endFrame = function () {\n  const gl = this._gl;\n  gl.useProgram(null);\n\n  this._currentFramebuffer = undefined;\n  gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n  const buffers = scratchBackBufferArray;\n  if (this.drawBuffers) {\n    this.glDrawBuffers(buffers);\n  }\n\n  const length = this._maxFrameTextureUnitIndex;\n  this._maxFrameTextureUnitIndex = 0;\n\n  for (let i = 0; i < length; ++i) {\n    gl.activeTexture(gl.TEXTURE0 + i);\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);\n  }\n};\n\n/**\n * @typedef {object} ReadState\n *\n * Options defining a rectangle to read pixels from.\n *\n * @private\n * @property {number} [x=0] The x offset of the rectangle to read from.\n * @property {number} [y=0] The y offset of the rectangle to read from.\n * @property {number} [width=this.drawingBufferWidth] The width of the rectangle to read from.\n * @property {number} [height=this.drawingBufferHeight] The height of the rectangle to read from.\n * @property {FrameBuffer|undefined} [framebuffer] The framebuffer to read from. If undefined, the read will be from the default framebuffer.\n */\n\n/**\n * Read pixels from a framebuffer into a Pixel Buffer Object (PBO).\n *\n * @private\n * @param {ReadState} readState Options defining a rectangle to read pixels from.\n * @returns {Buffer} A PixelBuffer containing the pixels read from the specified rectangle.\n *\n * @exception {DeveloperError} A WebGL 2 context is required to read pixels using a PBO.\n */\nContext.prototype.readPixelsToPBO = function (readState) {\n  const gl = this._gl;\n\n  readState = readState ?? Frozen.EMPTY_OBJECT;\n  const x = Math.max(readState.x ?? 0, 0);\n  const y = Math.max(readState.y ?? 0, 0);\n  const width = readState.width ?? this.drawingBufferWidth;\n  const height = readState.height ?? this.drawingBufferHeight;\n  const framebuffer = readState.framebuffer;\n\n  if (!this._webgl2) {\n    throw new DeveloperError(\n      \"A WebGL 2 context is required to read pixels using a PBO.\",\n    );\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"readState.width\", width, 0);\n  Check.typeOf.number.greaterThan(\"readState.height\", height, 0);\n  //>>includeEnd('debug');\n\n  let pixelDatatype = PixelDatatype.UNSIGNED_BYTE;\n  let pixelFormat = PixelFormat.RGBA;\n  if (defined(framebuffer) && framebuffer.numberOfColorAttachments > 0) {\n    pixelDatatype = framebuffer.getColorTexture(0).pixelDatatype;\n    pixelFormat = framebuffer.getColorTexture(0).pixelFormat;\n  }\n\n  const pixels = Buffer.createPixelBuffer({\n    context: this,\n    sizeInBytes: PixelFormat.textureSizeInBytes(\n      pixelFormat,\n      pixelDatatype,\n      width,\n      height,\n    ),\n    usage: BufferUsage.DYNAMIC_READ,\n  });\n\n  bindFramebuffer(this, framebuffer);\n\n  pixels._bind();\n  gl.readPixels(\n    x,\n    y,\n    width,\n    height,\n    pixelFormat,\n    PixelDatatype.toWebGLConstant(pixelDatatype, this),\n    0,\n  );\n  pixels._unBind();\n\n  return pixels;\n};\n\n/**\n * Read pixels from a framebuffer into a typed array.\n *\n * @private\n * @param {ReadState} readState Options defining a rectangle to read pixels from.\n * @returns {Uint8Array|Uint16Array|Float32Array|Uint32Array} The pixels in the specified rectangle.\n */\nContext.prototype.readPixels = function (readState) {\n  const gl = this._gl;\n\n  readState = readState ?? Frozen.EMPTY_OBJECT;\n  const x = Math.max(readState.x ?? 0, 0);\n  const y = Math.max(readState.y ?? 0, 0);\n  const width = readState.width ?? this.drawingBufferWidth;\n  const height = readState.height ?? this.drawingBufferHeight;\n  const framebuffer = readState.framebuffer;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"readState.width\", width, 0);\n  Check.typeOf.number.greaterThan(\"readState.height\", height, 0);\n  //>>includeEnd('debug');\n\n  let pixelDatatype = PixelDatatype.UNSIGNED_BYTE;\n  let pixelFormat = PixelFormat.RGBA;\n  if (defined(framebuffer) && framebuffer.numberOfColorAttachments > 0) {\n    pixelDatatype = framebuffer.getColorTexture(0).pixelDatatype;\n    pixelFormat = framebuffer.getColorTexture(0).pixelFormat;\n  }\n\n  const pixels = PixelFormat.createTypedArray(\n    pixelFormat,\n    pixelDatatype,\n    width,\n    height,\n  );\n\n  bindFramebuffer(this, framebuffer);\n\n  gl.readPixels(\n    x,\n    y,\n    width,\n    height,\n    PixelFormat.RGBA,\n    PixelDatatype.toWebGLConstant(pixelDatatype, this),\n    pixels,\n  );\n\n  return pixels;\n};\n\nconst viewportQuadAttributeLocations = {\n  position: 0,\n  textureCoordinates: 1,\n};\n\nContext.prototype.getViewportQuadVertexArray = function () {\n  // Per-context cache for viewport quads\n  let vertexArray = this.cache.viewportQuad_vertexArray;\n\n  if (!defined(vertexArray)) {\n    const geometry = new Geometry({\n      attributes: {\n        position: new GeometryAttribute({\n          componentDatatype: ComponentDatatype.FLOAT,\n          componentsPerAttribute: 2,\n          values: [-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0],\n        }),\n\n        textureCoordinates: new GeometryAttribute({\n          componentDatatype: ComponentDatatype.FLOAT,\n          componentsPerAttribute: 2,\n          values: [0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0],\n        }),\n      },\n      // Workaround Internet Explorer 11.0.8 lack of TRIANGLE_FAN\n      indices: new Uint16Array([0, 1, 2, 0, 2, 3]),\n      primitiveType: PrimitiveType.TRIANGLES,\n    });\n\n    vertexArray = VertexArray.fromGeometry({\n      context: this,\n      geometry: geometry,\n      attributeLocations: viewportQuadAttributeLocations,\n      bufferUsage: BufferUsage.STATIC_DRAW,\n      interleave: true,\n    });\n\n    this.cache.viewportQuad_vertexArray = vertexArray;\n  }\n\n  return vertexArray;\n};\n\nContext.prototype.createViewportQuadCommand = function (\n  fragmentShaderSource,\n  overrides,\n) {\n  overrides = overrides ?? Frozen.EMPTY_OBJECT;\n\n  return new DrawCommand({\n    vertexArray: this.getViewportQuadVertexArray(),\n    primitiveType: PrimitiveType.TRIANGLES,\n    renderState: overrides.renderState,\n    shaderProgram: ShaderProgram.fromCache({\n      context: this,\n      vertexShaderSource: ViewportQuadVS,\n      fragmentShaderSource: fragmentShaderSource,\n      attributeLocations: viewportQuadAttributeLocations,\n    }),\n    uniformMap: overrides.uniformMap,\n    owner: overrides.owner,\n    framebuffer: overrides.framebuffer,\n    pass: overrides.pass,\n  });\n};\n\n/**\n * Gets the object associated with a pick color.\n *\n * @param {number} pickColor The unsigned 32-bit RGBA pick color\n * @returns {object} The object associated with the pick color, or undefined if no object is associated with that color.\n *\n * @example\n * const object = context.getObjectByPickColor(pickColor);\n *\n * @see Context#createPickId\n */\nContext.prototype.getObjectByPickColor = function (pickColor) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"pickColor\", pickColor);\n  //>>includeEnd('debug');\n\n  return this._pickObjects.get(pickColor);\n};\n\n/**\n *\n * @param {Map<number, object>} pickObjects\n * @param {number} key\n * @param {Color} color\n */\nfunction PickId(pickObjects, key, color) {\n  this._pickObjects = pickObjects;\n  this.key = key;\n  this.color = color;\n}\n\nObject.defineProperties(PickId.prototype, {\n  object: {\n    get: function () {\n      return this._pickObjects.get(this.key);\n    },\n    set: function (value) {\n      this._pickObjects.set(this.key, value);\n    },\n  },\n});\n\nPickId.prototype.destroy = function () {\n  this._pickObjects.delete(this.key);\n  return undefined;\n};\n\n/**\n * Creates a unique ID associated with the input object for use with color-buffer picking.\n * The ID has an RGBA color value unique to this context.  You must call destroy()\n * on the pick ID when destroying the input object.\n *\n * @param {object} object The object to associate with the pick ID.\n * @returns {object} A PickId object with a <code>color</code> property.\n *\n * @exception {RuntimeError} Out of unique Pick IDs.\n *\n *\n * @example\n * this._pickId = context.createPickId({\n *   primitive : this,\n *   id : this.id\n * });\n *\n * @see Context#getObjectByPickColor\n */\nContext.prototype.createPickId = function (object) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"object\", object);\n  //>>includeEnd('debug');\n\n  // the increment and assignment have to be separate statements to\n  // actually detect overflow in the Uint32 value\n  ++this._nextPickColor[0];\n  const key = this._nextPickColor[0];\n  if (key === 0) {\n    // In case of overflow\n    throw new RuntimeError(\"Out of unique Pick IDs.\");\n  }\n\n  this._pickObjects.set(key, object);\n  return new PickId(this._pickObjects, key, Color.fromRgba(key));\n};\n\nContext.prototype.isDestroyed = function () {\n  return false;\n};\n\nContext.prototype.destroy = function () {\n  // Destroy all objects in the cache that have a destroy method.\n  const cache = this.cache;\n  for (const property in cache) {\n    if (cache.hasOwnProperty(property)) {\n      const propertyValue = cache[property];\n      if (defined(propertyValue.destroy)) {\n        propertyValue.destroy();\n      }\n    }\n  }\n\n  this._shaderCache = this._shaderCache.destroy();\n  this._textureCache = this._textureCache.destroy();\n  this._defaultTexture = this._defaultTexture && this._defaultTexture.destroy();\n  this._defaultEmissiveTexture =\n    this._defaultEmissiveTexture && this._defaultEmissiveTexture.destroy();\n  this._defaultNormalTexture =\n    this._defaultNormalTexture && this._defaultNormalTexture.destroy();\n  this._defaultCubeMap = this._defaultCubeMap && this._defaultCubeMap.destroy();\n\n  return destroyObject(this);\n};\n\nexport default Context;\n","/**\n * These are set in the constructor for {@link Context}\n *\n * @private\n */\nconst ContextLimits = {\n  _maximumCombinedTextureImageUnits: 0,\n  _maximumCubeMapSize: 0,\n  _maximumFragmentUniformVectors: 0,\n  _maximumTextureImageUnits: 0,\n  _maximumRenderbufferSize: 0,\n  _maximumTextureSize: 0,\n  _maximum3DTextureSize: 0,\n  _maximumVaryingVectors: 0,\n  _maximumVertexAttributes: 0,\n  _maximumVertexTextureImageUnits: 0,\n  _maximumVertexUniformVectors: 0,\n  _minimumAliasedLineWidth: 0,\n  _maximumAliasedLineWidth: 0,\n  _minimumAliasedPointSize: 0,\n  _maximumAliasedPointSize: 0,\n  _maximumViewportWidth: 0,\n  _maximumViewportHeight: 0,\n  _maximumTextureFilterAnisotropy: 0,\n  _maximumDrawBuffers: 0,\n  _maximumColorAttachments: 0,\n  _maximumSamples: 0,\n  _highpFloatSupported: false,\n  _highpIntSupported: false,\n};\n\nObject.defineProperties(ContextLimits, {\n  /**\n   * The maximum number of texture units that can be used from the vertex and fragment\n   * shader with this WebGL implementation.\n   * If both shaders access the same texture unit, this counts as two texture units.\n   * The minimum in WebGL2 contexts is 32, or 8 in WebGL1 contexts.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_COMBINED_TEXTURE_IMAGE_UNITS</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumCombinedTextureImageUnits: {\n    get: function () {\n      return ContextLimits._maximumCombinedTextureImageUnits;\n    },\n  },\n\n  /**\n   * The approximate maximum cube map width and height supported by this WebGL implementation.\n   * The minimum in WebGL2 contexts is 2048, but most desktop and laptop implementations will support much larger sizes like 8192.\n   * The minimum in WebGL1 contexts is 16.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_CUBE_MAP_TEXTURE_SIZE</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumCubeMapSize: {\n    get: function () {\n      return ContextLimits._maximumCubeMapSize;\n    },\n  },\n\n  /**\n   * The maximum number of <code>vec4</code>, <code>ivec4</code>, and <code>bvec4</code>\n   * uniforms that can be used by a fragment shader with this WebGL implementation.\n   * The minimum in WebGL2 contexts is 224, or 16 in WebGL1 contexts.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_FRAGMENT_UNIFORM_VECTORS</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumFragmentUniformVectors: {\n    get: function () {\n      return ContextLimits._maximumFragmentUniformVectors;\n    },\n  },\n\n  /**\n   * The maximum number of texture units that can be used from the fragment shader with this WebGL implementation.\n   * The minimum in WebGL2 contexts is 16, or 8 in WebGL1 contexts.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_TEXTURE_IMAGE_UNITS</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumTextureImageUnits: {\n    get: function () {\n      return ContextLimits._maximumTextureImageUnits;\n    },\n  },\n\n  /**\n   * The maximum renderbuffer width and height supported by this WebGL implementation.\n   * The minimum in WebGL2 contexts is 2048, but most desktop and laptop implementations will support much larger sizes like 8192.\n   * The minimum in WebGL1 contexts is 1.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_RENDERBUFFER_SIZE</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumRenderbufferSize: {\n    get: function () {\n      return ContextLimits._maximumRenderbufferSize;\n    },\n  },\n\n  /**\n   * The approximate maximum texture width and height supported by this WebGL implementation.\n   * The minimum in WebGL2 contexts is 2048, but most desktop and laptop implementations will support much larger sizes like 8192.\n   * The minimum in WebGL1 contexts is 64.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_TEXTURE_SIZE</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumTextureSize: {\n    get: function () {\n      return ContextLimits._maximumTextureSize;\n    },\n  },\n\n  /**\n   * The approximate maximum texture width, height, and depth supported by this WebGL2 implementation.\n   * The minimum is 256, but most desktop and laptop implementations will support much larger sizes like 2048.\n   * 3D textures are not supported in WebGL1 contexts.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_3D_TEXTURE_SIZE</code>.\n   */\n  maximum3DTextureSize: {\n    get: function () {\n      return ContextLimits._maximum3DTextureSize;\n    },\n  },\n\n  /**\n   * The maximum number of <code>vec4</code> varying variables supported by this WebGL implementation.\n   * The minimum is 15 in WebGL2 contexts, or 8 in WebGL1 contexts. Matrices and arrays count as multiple <code>vec4</code>s.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_VARYING_VECTORS</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumVaryingVectors: {\n    get: function () {\n      return ContextLimits._maximumVaryingVectors;\n    },\n  },\n\n  /**\n   * The maximum number of <code>vec4</code> vertex attributes supported by this WebGL implementation.\n   * The minimum is 16 in WebGL2 contexts, or 8 in WebGL1 contexts.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_VERTEX_ATTRIBS</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumVertexAttributes: {\n    get: function () {\n      return ContextLimits._maximumVertexAttributes;\n    },\n  },\n\n  /**\n   * The maximum number of texture units that can be used from the vertex shader with this WebGL implementation.\n   * The minimum is 16 in WebGL2 contexts, or 0 in WebGL1 contexts.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_VERTEX_TEXTURE_IMAGE_UNITS</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumVertexTextureImageUnits: {\n    get: function () {\n      return ContextLimits._maximumVertexTextureImageUnits;\n    },\n  },\n\n  /**\n   * The maximum number of <code>vec4</code>, <code>ivec4</code>, and <code>bvec4</code>\n   * uniforms that can be used by a vertex shader with this WebGL implementation.\n   * The minimum is 256 in WebGL2 contexts, or 128 in WebGL1 contexts.\n   * @memberof ContextLimits\n   * @type {number}\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_VERTEX_UNIFORM_VECTORS</code>.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glGet.xml|glGet in OpenGL ES 2.0} for WebGL1 contexts.\n   */\n  maximumVertexUniformVectors: {\n    get: function () {\n      return ContextLimits._maximumVertexUniformVectors;\n    },\n  },\n\n  /**\n   * The minimum aliased line width, in pixels, supported by this WebGL implementation. It will be at most one.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>ALIASED_LINE_WIDTH_RANGE</code>.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  minimumAliasedLineWidth: {\n    get: function () {\n      return ContextLimits._minimumAliasedLineWidth;\n    },\n  },\n\n  /**\n   * The maximum aliased line width, in pixels, supported by this WebGL implementation. It will be at least one.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>ALIASED_LINE_WIDTH_RANGE</code>.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumAliasedLineWidth: {\n    get: function () {\n      return ContextLimits._maximumAliasedLineWidth;\n    },\n  },\n\n  /**\n   * The minimum aliased point size, in pixels, supported by this WebGL implementation. It will be at most one.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>ALIASED_POINT_SIZE_RANGE</code>.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  minimumAliasedPointSize: {\n    get: function () {\n      return ContextLimits._minimumAliasedPointSize;\n    },\n  },\n\n  /**\n   * The maximum aliased point size, in pixels, supported by this WebGL implementation. It will be at least one.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>ALIASED_POINT_SIZE_RANGE</code>.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumAliasedPointSize: {\n    get: function () {\n      return ContextLimits._maximumAliasedPointSize;\n    },\n  },\n\n  /**\n   * The maximum supported width of the viewport. It will be at least as large as the visible width of the associated canvas.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_VIEWPORT_DIMS</code>.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumViewportWidth: {\n    get: function () {\n      return ContextLimits._maximumViewportWidth;\n    },\n  },\n\n  /**\n   * The maximum supported height of the viewport. It will be at least as large as the visible height of the associated canvas.\n   * @see {@link https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glGet.xhtml|glGet in OpenGL ES 3.0} with <code>MAX_VIEWPORT_DIMS</code>.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumViewportHeight: {\n    get: function () {\n      return ContextLimits._maximumViewportHeight;\n    },\n  },\n\n  /**\n   * The maximum degree of anisotropy for texture filtering\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumTextureFilterAnisotropy: {\n    get: function () {\n      return ContextLimits._maximumTextureFilterAnisotropy;\n    },\n  },\n\n  /**\n   * The maximum number of simultaneous outputs that may be written in a fragment shader.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumDrawBuffers: {\n    get: function () {\n      return ContextLimits._maximumDrawBuffers;\n    },\n  },\n\n  /**\n   * The maximum number of color attachments supported.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumColorAttachments: {\n    get: function () {\n      return ContextLimits._maximumColorAttachments;\n    },\n  },\n\n  /**\n   * The maximum number of samples supported for multisampling.\n   * @memberof ContextLimits\n   * @type {number}\n   */\n  maximumSamples: {\n    get: function () {\n      return ContextLimits._maximumSamples;\n    },\n  },\n\n  /**\n   * High precision float supported (<code>highp</code>) in fragment shaders.\n   * @memberof ContextLimits\n   * @type {boolean}\n   */\n  highpFloatSupported: {\n    get: function () {\n      return ContextLimits._highpFloatSupported;\n    },\n  },\n\n  /**\n   * High precision int supported (<code>highp</code>) in fragment shaders.\n   * @memberof ContextLimits\n   * @type {boolean}\n   */\n  highpIntSupported: {\n    get: function () {\n      return ContextLimits._highpIntSupported;\n    },\n  },\n});\nexport default ContextLimits;\n","import BoxGeometry from \"../Core/BoxGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport BufferUsage from \"./BufferUsage.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport CubeMapFace from \"./CubeMapFace.js\";\nimport Framebuffer from \"./Framebuffer.js\";\nimport MipmapHint from \"./MipmapHint.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport Sampler from \"./Sampler.js\";\nimport TextureMagnificationFilter from \"./TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"./TextureMinificationFilter.js\";\nimport VertexArray from \"./VertexArray.js\";\n\n/**\n * @typedef CubeMap.BufferSource\n *\n * @property {TypedArray} arrayBufferView A view of a binary data buffer containing pixel values.\n * @property {number} width The width of one face of the cube map, in pixels. Must be equal to height.\n * @property {number} height The height of one face of the cube map, in pixels. Must be equal to width.\n *\n * @private\n */\n\n/**\n * @typedef CubeMap.Source\n *\n * @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} positiveX\n * @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} negativeX\n * @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} positiveY\n * @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} negativeY\n * @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} positiveZ\n * @property {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} negativeZ\n */\n\n/**\n * @typedef CubeMap.ConstructorOptions\n *\n * @property {Context} context\n * @property {CubeMap.Source} [source] The source for texel values to be loaded into the texture.\n * @property {PixelFormat} [pixelFormat=PixelFormat.RGBA] The format of each pixel, i.e., the number of components it has and what they represent.\n * @property {PixelDatatype} [pixelDatatype=PixelDatatype.UNSIGNED_BYTE] The data type of each pixel.\n * @property {boolean} [flipY=true] If true, the source values will be read as if the y-axis is inverted (y=0 at the top).\n * @property {boolean} [skipColorSpaceConversion=false] If true, color space conversions will be skipped when reading the texel values.\n * @property {Sampler} [sampler] Information about how to sample the cubemap texture.\n * @property {number} [width] The pixel width of the texture. If not supplied, must be available from the source. Must be equal to height.\n * @property {number} [height] The pixel height of the texture. If not supplied, must be available from the source. Must be equal to width.\n * @property {boolean} [preMultiplyAlpha] If true, the alpha channel will be multiplied into the other channels.\n *\n * @private\n */\n\n/**\n * A wrapper for a {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLTexture|WebGLTexture}\n * used as a cube map, to abstract away the verbose GL calls associated with setting up a texture.\n *\n * @alias CubeMap\n * @constructor\n *\n * @param {CubeMap.ConstructorOptions} options An object describing initialization options.\n * @private\n */\nfunction CubeMap(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  const {\n    context,\n    source,\n    pixelFormat = PixelFormat.RGBA,\n    pixelDatatype = PixelDatatype.UNSIGNED_BYTE,\n    flipY = true,\n    skipColorSpaceConversion = false,\n    sampler = new Sampler(),\n  } = options;\n\n  // Use premultiplied alpha for opaque textures should perform better on Chrome:\n  // http://media.tojicode.com/webglCamp4/#20\n  const preMultiplyAlpha =\n    options.preMultiplyAlpha ||\n    pixelFormat === PixelFormat.RGB ||\n    pixelFormat === PixelFormat.LUMINANCE;\n\n  let { width, height } = options;\n\n  if (defined(source)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (\n      !Object.values(CubeMap.FaceName).every((faceName) =>\n        defined(source[faceName]),\n      )\n    ) {\n      throw new DeveloperError(\n        `options.source requires faces ${Object.values(CubeMap.FaceName).join(\n          \", \",\n        )}.`,\n      );\n    }\n    //>>includeEnd('debug');\n\n    ({ width, height } = source.positiveX);\n\n    //>>includeStart('debug', pragmas.debug);\n    for (const faceName of CubeMap.faceNames()) {\n      const face = source[faceName];\n      if (Number(face.width) !== width || Number(face.height) !== height) {\n        throw new DeveloperError(\n          \"Each face in options.source must have the same width and height.\",\n        );\n      }\n    }\n    //>>includeEnd('debug');\n  }\n\n  const size = width;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(width) || !defined(height)) {\n    throw new DeveloperError(\n      \"options requires a source field to create an initialized cube map or width and height fields to create a blank cube map.\",\n    );\n  }\n\n  if (width !== height) {\n    throw new DeveloperError(\"Width must equal height.\");\n  }\n\n  if (size <= 0) {\n    throw new DeveloperError(\"Width and height must be greater than zero.\");\n  }\n\n  if (size > ContextLimits.maximumCubeMapSize) {\n    throw new DeveloperError(\n      `Width and height must be less than or equal to the maximum cube map size (${ContextLimits.maximumCubeMapSize}). Check maximumCubeMapSize.`,\n    );\n  }\n\n  if (!PixelFormat.validate(pixelFormat)) {\n    throw new DeveloperError(\"Invalid options.pixelFormat.\");\n  }\n\n  if (PixelFormat.isDepthFormat(pixelFormat)) {\n    throw new DeveloperError(\n      \"options.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.\",\n    );\n  }\n\n  if (!PixelDatatype.validate(pixelDatatype)) {\n    throw new DeveloperError(\"Invalid options.pixelDatatype.\");\n  }\n\n  if (pixelDatatype === PixelDatatype.FLOAT && !context.floatingPointTexture) {\n    throw new DeveloperError(\n      \"When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.\",\n    );\n  }\n\n  if (\n    pixelDatatype === PixelDatatype.HALF_FLOAT &&\n    !context.halfFloatingPointTexture\n  ) {\n    throw new DeveloperError(\n      \"When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const sizeInBytes =\n    PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, size, size) * 6;\n  const internalFormat = PixelFormat.toInternalFormat(\n    pixelFormat,\n    pixelDatatype,\n    context,\n  );\n\n  const gl = context._gl;\n  const textureTarget = gl.TEXTURE_CUBE_MAP;\n  const texture = gl.createTexture();\n\n  this._context = context;\n  this._textureFilterAnisotropic = context._textureFilterAnisotropic;\n  this._textureTarget = textureTarget;\n  this._texture = texture;\n  this._pixelFormat = pixelFormat;\n  this._pixelDatatype = pixelDatatype;\n  this._size = size;\n  this._hasMipmap = false;\n  this._sizeInBytes = sizeInBytes;\n  this._preMultiplyAlpha = preMultiplyAlpha;\n  this._flipY = flipY;\n\n  const initialized = defined(source);\n  function constructFace(targetFace) {\n    return new CubeMapFace(\n      context,\n      texture,\n      textureTarget,\n      targetFace,\n      internalFormat,\n      pixelFormat,\n      pixelDatatype,\n      size,\n      preMultiplyAlpha,\n      flipY,\n      initialized,\n    );\n  }\n  this._positiveX = constructFace(gl.TEXTURE_CUBE_MAP_POSITIVE_X);\n  this._negativeX = constructFace(gl.TEXTURE_CUBE_MAP_NEGATIVE_X);\n  this._positiveY = constructFace(gl.TEXTURE_CUBE_MAP_POSITIVE_Y);\n  this._negativeY = constructFace(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y);\n  this._positiveZ = constructFace(gl.TEXTURE_CUBE_MAP_POSITIVE_Z);\n  this._negativeZ = constructFace(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z);\n\n  this._sampler = sampler;\n  setupSampler(this, sampler);\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(textureTarget, texture);\n\n  if (skipColorSpaceConversion) {\n    gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n  } else {\n    gl.pixelStorei(\n      gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n      gl.BROWSER_DEFAULT_WEBGL,\n    );\n  }\n\n  for (const faceName of CubeMap.faceNames()) {\n    loadFace(this[faceName], source?.[faceName], 0);\n  }\n\n  gl.bindTexture(textureTarget, null);\n}\n\n/**\n * Copy an existing texture to a cubemap face.\n * @param {FrameState} frameState The current rendering frameState\n * @param {Texture} texture Texture being copied\n * @param {CubeMap.FaceName} face The face to which to copy\n * @param {number} [mipLevel=0] The mip level at which to copy\n */\nCubeMap.prototype.copyFace = function (frameState, texture, face, mipLevel) {\n  const context = frameState.context;\n  const framebuffer = new Framebuffer({\n    context: context,\n    colorTextures: [texture],\n    destroyAttachments: false,\n  });\n\n  framebuffer._bind();\n\n  this[face].copyMipmapFromFramebuffer(\n    0,\n    0,\n    texture.width,\n    texture.height,\n    mipLevel ?? 0,\n  );\n  framebuffer._unBind();\n  framebuffer.destroy();\n};\n\n/**\n * An enum defining the names of the faces of a cube map.\n * @alias {CubeMap.FaceName}\n * @enum {string}\n * @private\n */\nCubeMap.FaceName = Object.freeze({\n  POSITIVEX: \"positiveX\",\n  NEGATIVEX: \"negativeX\",\n  POSITIVEY: \"positiveY\",\n  NEGATIVEY: \"negativeY\",\n  POSITIVEZ: \"positiveZ\",\n  NEGATIVEZ: \"negativeZ\",\n});\n\nfunction* makeFaceNamesIterator() {\n  yield CubeMap.FaceName.POSITIVEX;\n  yield CubeMap.FaceName.NEGATIVEX;\n  yield CubeMap.FaceName.POSITIVEY;\n  yield CubeMap.FaceName.NEGATIVEY;\n  yield CubeMap.FaceName.POSITIVEZ;\n  yield CubeMap.FaceName.NEGATIVEZ;\n}\n\n/**\n * Creates an iterator for looping over the cubemap faces.\n * @type {Iterable<CubeMap.FaceName>}\n * @private\n */\nCubeMap.faceNames = function () {\n  return makeFaceNamesIterator();\n};\n\n/**\n * Load texel data into one face of a cube map.\n * @param {CubeMapFace} cubeMapFace The face to which texel values will be loaded.\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|CubeMap.BufferSource} [source] The source for texel values to be loaded into the texture.\n * @param {number} [mipLevel=0] The mip level to which the texel values will be loaded.\n * @private\n */\nfunction loadFace(cubeMapFace, source, mipLevel) {\n  mipLevel = mipLevel ?? 0;\n  const targetFace = cubeMapFace._targetFace;\n  const size = Math.max(Math.floor(cubeMapFace._size / 2 ** mipLevel), 1);\n  const pixelFormat = cubeMapFace._pixelFormat;\n  const pixelDatatype = cubeMapFace._pixelDatatype;\n  const internalFormat = cubeMapFace._internalFormat;\n  const flipY = cubeMapFace._flipY;\n  const preMultiplyAlpha = cubeMapFace._preMultiplyAlpha;\n  const context = cubeMapFace._context;\n  const gl = context._gl;\n\n  if (!defined(source)) {\n    gl.texImage2D(\n      targetFace,\n      mipLevel,\n      internalFormat,\n      size,\n      size,\n      0,\n      pixelFormat,\n      PixelDatatype.toWebGLConstant(pixelDatatype, context),\n      null,\n    );\n    return;\n  }\n\n  let { arrayBufferView } = source;\n\n  let unpackAlignment = 4;\n  if (defined(arrayBufferView)) {\n    unpackAlignment = PixelFormat.alignmentInBytes(\n      pixelFormat,\n      pixelDatatype,\n      size,\n    );\n  }\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n\n  if (defined(arrayBufferView)) {\n    gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n    if (flipY) {\n      arrayBufferView = PixelFormat.flipY(\n        arrayBufferView,\n        pixelFormat,\n        pixelDatatype,\n        size,\n        size,\n      );\n    }\n    gl.texImage2D(\n      targetFace,\n      mipLevel,\n      internalFormat,\n      size,\n      size,\n      0,\n      pixelFormat,\n      PixelDatatype.toWebGLConstant(pixelDatatype, context),\n      arrayBufferView,\n    );\n  } else {\n    // Only valid for DOM-Element uploads\n    gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n    gl.texImage2D(\n      targetFace,\n      mipLevel,\n      internalFormat,\n      pixelFormat,\n      PixelDatatype.toWebGLConstant(pixelDatatype, context),\n      source,\n    );\n  }\n}\n\nCubeMap.loadFace = loadFace;\n\nObject.defineProperties(CubeMap.prototype, {\n  positiveX: {\n    get: function () {\n      return this._positiveX;\n    },\n  },\n  negativeX: {\n    get: function () {\n      return this._negativeX;\n    },\n  },\n  positiveY: {\n    get: function () {\n      return this._positiveY;\n    },\n  },\n  negativeY: {\n    get: function () {\n      return this._negativeY;\n    },\n  },\n  positiveZ: {\n    get: function () {\n      return this._positiveZ;\n    },\n  },\n  negativeZ: {\n    get: function () {\n      return this._negativeZ;\n    },\n  },\n  sampler: {\n    get: function () {\n      return this._sampler;\n    },\n    set: function (sampler) {\n      setupSampler(this, sampler);\n      this._sampler = sampler;\n    },\n  },\n  pixelFormat: {\n    get: function () {\n      return this._pixelFormat;\n    },\n  },\n  pixelDatatype: {\n    get: function () {\n      return this._pixelDatatype;\n    },\n  },\n  width: {\n    get: function () {\n      return this._size;\n    },\n  },\n  height: {\n    get: function () {\n      return this._size;\n    },\n  },\n  sizeInBytes: {\n    get: function () {\n      if (this._hasMipmap) {\n        return Math.floor((this._sizeInBytes * 4) / 3);\n      }\n      return this._sizeInBytes;\n    },\n  },\n  preMultiplyAlpha: {\n    get: function () {\n      return this._preMultiplyAlpha;\n    },\n  },\n  flipY: {\n    get: function () {\n      return this._flipY;\n    },\n  },\n\n  _target: {\n    get: function () {\n      return this._textureTarget;\n    },\n  },\n});\n\n/**\n * Get a vector representing the cubemap face direction\n * @param {CubeMap.FaceName} face The relevant face\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The vector representing the cubemap face direction\n */\nCubeMap.getDirection = function (face, result) {\n  switch (face) {\n    case CubeMap.FaceName.POSITIVEX:\n      return Cartesian3.clone(Cartesian3.UNIT_X, result);\n    case CubeMap.FaceName.NEGATIVEX:\n      return Cartesian3.negate(Cartesian3.UNIT_X, result);\n    case CubeMap.FaceName.POSITIVEY:\n      return Cartesian3.clone(Cartesian3.UNIT_Y, result);\n    case CubeMap.FaceName.NEGATIVEY:\n      return Cartesian3.negate(Cartesian3.UNIT_Y, result);\n    case CubeMap.FaceName.POSITIVEZ:\n      return Cartesian3.clone(Cartesian3.UNIT_Z, result);\n    case CubeMap.FaceName.NEGATIVEZ:\n      return Cartesian3.negate(Cartesian3.UNIT_Z, result);\n  }\n};\n\n/**\n * Set up a sampler for use with a cube map.\n * @param {CubeMap} cubeMap The cube map containing the texture to be sampled by this sampler.\n * @param {Sampler} sampler Information about how to sample the cubemap texture.\n * @private\n */\nfunction setupSampler(cubeMap, sampler) {\n  let { minificationFilter, magnificationFilter } = sampler;\n\n  const mipmap = [\n    TextureMinificationFilter.NEAREST_MIPMAP_NEAREST,\n    TextureMinificationFilter.NEAREST_MIPMAP_LINEAR,\n    TextureMinificationFilter.LINEAR_MIPMAP_NEAREST,\n    TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n  ].includes(minificationFilter);\n\n  const context = cubeMap._context;\n  const pixelDatatype = cubeMap._pixelDatatype;\n\n  // float textures only support nearest filtering unless the linear extensions are supported\n  if (\n    (pixelDatatype === PixelDatatype.FLOAT && !context.textureFloatLinear) ||\n    (pixelDatatype === PixelDatatype.HALF_FLOAT &&\n      !context.textureHalfFloatLinear)\n  ) {\n    // override the sampler's settings\n    minificationFilter = mipmap\n      ? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST\n      : TextureMinificationFilter.NEAREST;\n    magnificationFilter = TextureMagnificationFilter.NEAREST;\n  }\n\n  const gl = context._gl;\n  const target = cubeMap._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, cubeMap._texture);\n  gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);\n  gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);\n  gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);\n  gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);\n  if (defined(cubeMap._textureFilterAnisotropic)) {\n    gl.texParameteri(\n      target,\n      cubeMap._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,\n      sampler.maximumAnisotropy,\n    );\n  }\n  gl.bindTexture(target, null);\n}\n\n/**\n * Load a complete mipmap chain for each cubemap face.\n *\n * @param {CubeMap.Source[]} source The source data for each mip level, beginning at level 1.\n * @param {boolean} [skipColorSpaceConversion=false] If true, color space conversions will be skipped when reading the texel values.\n *\n * @private\n */\nCubeMap.prototype.loadMipmaps = function (source, skipColorSpaceConversion) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"source\", source);\n  if (!Array.isArray(source)) {\n    throw new DeveloperError(`source must be an array`);\n  }\n  const mipCount = Math.log2(this._size);\n  if (source.length !== mipCount) {\n    throw new DeveloperError(`all mip levels must be defined`);\n  }\n  //>>includeEnd('debug');\n\n  skipColorSpaceConversion = skipColorSpaceConversion ?? false;\n  const gl = this._context._gl;\n  const texture = this._texture;\n  const textureTarget = this._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(textureTarget, texture);\n\n  if (skipColorSpaceConversion) {\n    gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n  } else {\n    gl.pixelStorei(\n      gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n      gl.BROWSER_DEFAULT_WEBGL,\n    );\n  }\n\n  for (let i = 0; i < source.length; i++) {\n    const mipSource = source[i];\n    // mipLevel 0 was the base layer, already loaded when the CubeMap was constructed.\n    const mipLevel = i + 1;\n    for (const faceName of CubeMap.faceNames()) {\n      loadFace(this[faceName], mipSource[faceName], mipLevel);\n    }\n  }\n\n  gl.bindTexture(textureTarget, null);\n\n  this._hasMipmap = true;\n};\n\n/**\n * Generates a complete mipmap chain for each cubemap face.\n *\n * @param {MipmapHint} [hint=MipmapHint.DONT_CARE] A performance vs. quality hint.\n *\n * @exception {DeveloperError} hint is invalid.\n * @exception {DeveloperError} This CubeMap's width must be a power of two to call generateMipmap().\n * @exception {DeveloperError} This CubeMap's height must be a power of two to call generateMipmap().\n * @exception {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Generate mipmaps, and then set the sampler so mipmaps are used for\n * // minification when the cube map is sampled.\n * cubeMap.generateMipmap();\n * cubeMap.sampler = new Sampler({\n *   minificationFilter : Cesium.TextureMinificationFilter.NEAREST_MIPMAP_LINEAR\n * });\n */\nCubeMap.prototype.generateMipmap = function (hint) {\n  hint = hint ?? MipmapHint.DONT_CARE;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (this._size > 1 && !CesiumMath.isPowerOfTwo(this._size)) {\n    throw new DeveloperError(\n      \"width and height must be a power of two to call generateMipmap().\",\n    );\n  }\n  if (!MipmapHint.validate(hint)) {\n    throw new DeveloperError(\"hint is invalid.\");\n  }\n  //>>includeEnd('debug');\n\n  this._hasMipmap = true;\n\n  const gl = this._context._gl;\n  const target = this._textureTarget;\n  gl.hint(gl.GENERATE_MIPMAP_HINT, hint);\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n  gl.generateMipmap(target);\n  gl.bindTexture(target, null);\n};\n\n/**\n * Create a vertex array that can be used for cubemap shaders.\n * @param {Context} context The rendering context\n * @returns {VertexArray} The created vertex array\n */\nCubeMap.createVertexArray = function (context) {\n  const geometry = BoxGeometry.createGeometry(\n    BoxGeometry.fromDimensions({\n      dimensions: new Cartesian3(2.0, 2.0, 2.0),\n      vertexFormat: VertexFormat.POSITION_ONLY,\n    }),\n  );\n  const attributeLocations = (this._attributeLocations =\n    GeometryPipeline.createAttributeLocations(geometry));\n\n  return VertexArray.fromGeometry({\n    context: context,\n    geometry: geometry,\n    attributeLocations: attributeLocations,\n    bufferUsage: BufferUsage.STATIC_DRAW,\n  });\n};\n\nCubeMap.prototype.isDestroyed = function () {\n  return false;\n};\n\nCubeMap.prototype.destroy = function () {\n  this._context._gl.deleteTexture(this._texture);\n  this._positiveX = destroyObject(this._positiveX);\n  this._negativeX = destroyObject(this._negativeX);\n  this._positiveY = destroyObject(this._positiveY);\n  this._negativeY = destroyObject(this._negativeY);\n  this._positiveZ = destroyObject(this._positiveZ);\n  this._negativeZ = destroyObject(this._negativeZ);\n  return destroyObject(this);\n};\nexport default CubeMap;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\n\n/**\n * @private\n */\nfunction CubeMapFace(\n  context,\n  texture,\n  textureTarget,\n  targetFace,\n  internalFormat,\n  pixelFormat,\n  pixelDatatype,\n  size,\n  preMultiplyAlpha,\n  flipY,\n  initialized,\n) {\n  this._context = context;\n  this._texture = texture;\n  this._textureTarget = textureTarget;\n  this._targetFace = targetFace;\n  this._pixelDatatype = pixelDatatype;\n  this._internalFormat = internalFormat;\n  this._pixelFormat = pixelFormat;\n  this._size = size;\n  this._preMultiplyAlpha = preMultiplyAlpha;\n  this._flipY = flipY;\n  this._initialized = initialized;\n}\n\nObject.defineProperties(CubeMapFace.prototype, {\n  pixelFormat: {\n    get: function () {\n      return this._pixelFormat;\n    },\n  },\n  pixelDatatype: {\n    get: function () {\n      return this._pixelDatatype;\n    },\n  },\n  _target: {\n    get: function () {\n      return this._targetFace;\n    },\n  },\n});\n\n/**\n * Copies texels from the source to the cubemap's face.\n * @param {object} options Object with the following properties:\n * @param {object} options.source The source {@link ImageData}, {@link HTMLImageElement}, {@link HTMLCanvasElement}, {@link HTMLVideoElement},\n *                              or an object with a width, height, and arrayBufferView properties.\n * @param {number} [options.xOffset=0] An offset in the x direction in the cubemap where copying begins.\n * @param {number} [options.yOffset=0] An offset in the y direction in the cubemap where copying begins.\n * @param {boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the texture will be ignored.\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @exception {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Create a cubemap with 1x1 faces, and make the +x face red.\n * const cubeMap = new CubeMap({\n *   context : context\n *   width : 1,\n *   height : 1\n * });\n * cubeMap.positiveX.copyFrom({\n *   source: {\n *     width : 1,\n *     height : 1,\n *     arrayBufferView : new Uint8Array([255, 0, 0, 255])\n *   }\n * });\n */\nCubeMapFace.prototype.copyFrom = function (options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options\", options);\n  //>>includeEnd('debug');\n\n  const {\n    xOffset = 0,\n    yOffset = 0,\n    source,\n    skipColorSpaceConversion = false,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.source\", source);\n  Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n  if (xOffset + source.width > this._size) {\n    throw new DeveloperError(\n      \"xOffset + options.source.width must be less than or equal to width.\",\n    );\n  }\n  if (yOffset + source.height > this._size) {\n    throw new DeveloperError(\n      \"yOffset + options.source.height must be less than or equal to height.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const { width, height } = source;\n\n  const gl = this._context._gl;\n  const target = this._textureTarget;\n  const targetFace = this._targetFace;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n\n  let arrayBufferView = source.arrayBufferView;\n\n  const size = this._size;\n  const pixelFormat = this._pixelFormat;\n  const internalFormat = this._internalFormat;\n  const pixelDatatype = this._pixelDatatype;\n\n  const preMultiplyAlpha = this._preMultiplyAlpha;\n  const flipY = this._flipY;\n\n  let unpackAlignment = 4;\n  if (defined(arrayBufferView)) {\n    unpackAlignment = PixelFormat.alignmentInBytes(\n      pixelFormat,\n      pixelDatatype,\n      width,\n    );\n  }\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n\n  if (skipColorSpaceConversion) {\n    gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n  } else {\n    gl.pixelStorei(\n      gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n      gl.BROWSER_DEFAULT_WEBGL,\n    );\n  }\n\n  let uploaded = false;\n  if (!this._initialized) {\n    let pixels;\n    if (xOffset === 0 && yOffset === 0 && width === size && height === size) {\n      // initialize the entire texture\n      if (defined(arrayBufferView)) {\n        gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n        gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n        if (flipY) {\n          arrayBufferView = PixelFormat.flipY(\n            arrayBufferView,\n            pixelFormat,\n            pixelDatatype,\n            size,\n            size,\n          );\n        }\n        pixels = arrayBufferView;\n      } else {\n        // Only valid for DOM-Element uploads\n        gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n        gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n        pixels = source;\n      }\n      uploaded = true;\n    } else {\n      // initialize the entire texture to zero\n      gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n      pixels = PixelFormat.createTypedArray(\n        pixelFormat,\n        pixelDatatype,\n        size,\n        size,\n      );\n    }\n    gl.texImage2D(\n      targetFace,\n      0,\n      internalFormat,\n      size,\n      size,\n      0,\n      pixelFormat,\n      PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n      pixels,\n    );\n    this._initialized = true;\n  }\n\n  if (!uploaded) {\n    if (defined(arrayBufferView)) {\n      gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n      if (flipY) {\n        arrayBufferView = PixelFormat.flipY(\n          arrayBufferView,\n          pixelFormat,\n          pixelDatatype,\n          width,\n          height,\n        );\n      }\n      gl.texSubImage2D(\n        targetFace,\n        0,\n        xOffset,\n        yOffset,\n        width,\n        height,\n        pixelFormat,\n        PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n        arrayBufferView,\n      );\n    } else {\n      // Only valid for DOM-Element uploads\n      gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);\n      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);\n\n      // Source: ImageData, HTMLImageElement, HTMLCanvasElement, or HTMLVideoElement\n      gl.texSubImage2D(\n        targetFace,\n        0,\n        xOffset,\n        yOffset,\n        pixelFormat,\n        PixelDatatype.toWebGLConstant(pixelDatatype, this._context),\n        source,\n      );\n    }\n  }\n\n  gl.bindTexture(target, null);\n};\n\n/**\n * Copies texels from the framebuffer to the cubemap's face.\n * @param {number} [xOffset=0] An offset in the x direction in the cubemap where copying begins.\n * @param {number} [yOffset=0] An offset in the y direction in the cubemap where copying begins.\n * @param {number} [framebufferXOffset=0] An offset in the x direction in the framebuffer where copying begins from.\n * @param {number} [framebufferYOffset=0] An offset in the y direction in the framebuffer where copying begins from.\n * @param {number} [width=CubeMap's width] The width of the subimage to copy.\n * @param {number} [height=CubeMap's height] The height of the subimage to copy.\n * @throws {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\n * @throws {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\n * @throws {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n * @throws {DeveloperError} xOffset must be greater than or equal to zero.\n * @throws {DeveloperError} yOffset must be greater than or equal to zero.\n * @throws {DeveloperError} framebufferXOffset must be greater than or equal to zero.\n * @throws {DeveloperError} framebufferYOffset must be greater than or equal to zero.\n * @throws {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @throws {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @throws {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n * @example\n * // Copy the framebuffer contents to the +x cube map face.\n * cubeMap.positiveX.copyFromFramebuffer();\n */\nCubeMapFace.prototype.copyFromFramebuffer = function (\n  xOffset,\n  yOffset,\n  framebufferXOffset,\n  framebufferYOffset,\n  width,\n  height,\n) {\n  xOffset = xOffset ?? 0;\n  yOffset = yOffset ?? 0;\n  framebufferXOffset = framebufferXOffset ?? 0;\n  framebufferYOffset = framebufferYOffset ?? 0;\n  width = width ?? this._size;\n  height = height ?? this._size;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"framebufferXOffset\",\n    framebufferXOffset,\n    0,\n  );\n  Check.typeOf.number.greaterThanOrEquals(\n    \"framebufferYOffset\",\n    framebufferYOffset,\n    0,\n  );\n  if (xOffset + width > this._size) {\n    throw new DeveloperError(\n      \"xOffset + source.width must be less than or equal to width.\",\n    );\n  }\n  if (yOffset + height > this._size) {\n    throw new DeveloperError(\n      \"yOffset + source.height must be less than or equal to height.\",\n    );\n  }\n  if (this._pixelDatatype === PixelDatatype.FLOAT) {\n    throw new DeveloperError(\n      \"Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\",\n    );\n  }\n  if (this._pixelDatatype === PixelDatatype.HALF_FLOAT) {\n    throw new DeveloperError(\n      \"Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const gl = this._context._gl;\n  const target = this._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n  gl.copyTexSubImage2D(\n    this._targetFace,\n    0,\n    xOffset,\n    yOffset,\n    framebufferXOffset,\n    framebufferYOffset,\n    width,\n    height,\n  );\n  gl.bindTexture(target, null);\n  this._initialized = true;\n};\n\n/**\n * Copies texels from the framebuffer to the cubemap's face mipmap.\n * @param {number} [xOffset=0] An offset in the x direction in the framebuffer where copying begins from.\n * @param {number} [yOffset=0] An offset in the y direction in the framebuffer where copying begins from.\n * @param {number} [width=CubeMap's width] The width of the subimage to copy.\n * @param {number} [height=CubeMap's height] The height of the subimage to copy.\n * @param {number} [level=0] The level of detail. Level 0 is the base image level and level n is the n-th mipmap reduction level.\n * @throws {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\n * @throws {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\n * @throws {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n * @throws {DeveloperError} xOffset must be greater than or equal to zero.\n * @throws {DeveloperError} yOffset must be greater than or equal to zero.\n * @throws {DeveloperError} framebufferXOffset must be greater than or equal to zero.\n * @throws {DeveloperError} framebufferYOffset must be greater than or equal to zero.\n * @throws {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @throws {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @throws {DeveloperError} This CubeMap was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Copy the framebuffer contents to the +x cube map face.\n * cubeMap.positiveX.copyFromFramebuffer();\n */\nCubeMapFace.prototype.copyMipmapFromFramebuffer = function (\n  xOffset,\n  yOffset,\n  width,\n  height,\n  level,\n) {\n  xOffset = xOffset ?? 0;\n  yOffset = yOffset ?? 0;\n  width = width ?? this._size;\n  height = height ?? this._size;\n  level = level ?? 0;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n\n  if (xOffset + width > this._size) {\n    throw new DeveloperError(\n      \"xOffset + source.width must be less than or equal to width.\",\n    );\n  }\n  if (yOffset + height > this._size) {\n    throw new DeveloperError(\n      \"yOffset + source.height must be less than or equal to height.\",\n    );\n  }\n  if (this._pixelDatatype === PixelDatatype.FLOAT) {\n    throw new DeveloperError(\n      \"Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\",\n    );\n  }\n  if (this._pixelDatatype === PixelDatatype.HALF_FLOAT) {\n    throw new DeveloperError(\n      \"Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const gl = this._context._gl;\n  const target = this._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n  gl.copyTexImage2D(\n    this._targetFace,\n    level,\n    this._internalFormat,\n    xOffset,\n    yOffset,\n    width,\n    height,\n    0,\n  );\n  gl.bindTexture(target, null);\n  this._initialized = true;\n};\nexport default CubeMapFace;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\n\nconst Flags = {\n  CULL: 1,\n  OCCLUDE: 2,\n  EXECUTE_IN_CLOSEST_FRUSTUM: 4,\n  DEBUG_SHOW_BOUNDING_VOLUME: 8,\n  CAST_SHADOWS: 16,\n  RECEIVE_SHADOWS: 32,\n  PICK_ONLY: 64,\n  DEPTH_FOR_TRANSLUCENT_CLASSIFICATION: 128,\n};\n\n/**\n * Represents a command to the renderer for drawing.\n *\n * @alias DrawCommand\n * @constructor\n *\n * @private\n */\nfunction DrawCommand(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._boundingVolume = options.boundingVolume;\n  this._orientedBoundingBox = options.orientedBoundingBox;\n  this._modelMatrix = options.modelMatrix;\n  this._primitiveType = options.primitiveType ?? PrimitiveType.TRIANGLES;\n  this._vertexArray = options.vertexArray;\n  this._count = options.count;\n  this._offset = options.offset ?? 0;\n  this._instanceCount = options.instanceCount ?? 0;\n  this._shaderProgram = options.shaderProgram;\n  this._uniformMap = options.uniformMap;\n  this._renderState = options.renderState;\n  this._framebuffer = options.framebuffer;\n  this._pass = options.pass;\n  this._owner = options.owner;\n  this._debugOverlappingFrustums = 0;\n  this._pickId = options.pickId;\n  this._pickMetadataAllowed = options.pickMetadataAllowed === true;\n  this._pickedMetadataInfo = undefined;\n\n  // Set initial flags.\n  this._flags = 0;\n  this.cull = options.cull ?? true;\n  this.occlude = options.occlude ?? true;\n  this.executeInClosestFrustum = options.executeInClosestFrustum ?? false;\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n  this.castShadows = options.castShadows ?? false;\n  this.receiveShadows = options.receiveShadows ?? false;\n  this.pickOnly = options.pickOnly ?? false;\n  this.depthForTranslucentClassification =\n    options.depthForTranslucentClassification ?? false;\n\n  this.dirty = true;\n  this.lastDirtyTime = 0;\n\n  /**\n   * @private\n   */\n  this.derivedCommands = {};\n}\n\nfunction hasFlag(command, flag) {\n  return (command._flags & flag) === flag;\n}\n\nfunction setFlag(command, flag, value) {\n  if (value) {\n    command._flags |= flag;\n  } else {\n    command._flags &= ~flag;\n  }\n}\n\nObject.defineProperties(DrawCommand.prototype, {\n  /**\n   * The bounding volume of the geometry in world space.  This is used for culling and frustum selection.\n   * <p>\n   * For best rendering performance, use the tightest possible bounding volume.  Although\n   * <code>undefined</code> is allowed, always try to provide a bounding volume to\n   * allow the tightest possible near and far planes to be computed for the scene, and\n   * minimize the number of frustums needed.\n   * </p>\n   *\n   * @memberof DrawCommand.prototype\n   * @type {object}\n   * @default undefined\n   *\n   * @see DrawCommand#debugShowBoundingVolume\n   */\n  boundingVolume: {\n    get: function () {\n      return this._boundingVolume;\n    },\n    set: function (value) {\n      if (this._boundingVolume !== value) {\n        this._boundingVolume = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The oriented bounding box of the geometry in world space. If this is defined, it is used instead of\n   * {@link DrawCommand#boundingVolume} for plane intersection testing.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {OrientedBoundingBox}\n   * @default undefined\n   *\n   * @see DrawCommand#debugShowBoundingVolume\n   */\n  orientedBoundingBox: {\n    get: function () {\n      return this._orientedBoundingBox;\n    },\n    set: function (value) {\n      if (this._orientedBoundingBox !== value) {\n        this._orientedBoundingBox = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * When <code>true</code>, the renderer frustum and horizon culls the command based on its {@link DrawCommand#boundingVolume}.\n   * If the command was already culled, set this to <code>false</code> for a performance improvement.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default true\n   */\n  cull: {\n    get: function () {\n      return hasFlag(this, Flags.CULL);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.CULL) !== value) {\n        setFlag(this, Flags.CULL, value);\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * When <code>true</code>, the horizon culls the command based on its {@link DrawCommand#boundingVolume}.\n   * {@link DrawCommand#cull} must also be <code>true</code> in order for the command to be culled.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default true\n   */\n  occlude: {\n    get: function () {\n      return hasFlag(this, Flags.OCCLUDE);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.OCCLUDE) !== value) {\n        setFlag(this, Flags.OCCLUDE, value);\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The transformation from the geometry in model space to world space.\n   * <p>\n   * When <code>undefined</code>, the geometry is assumed to be defined in world space.\n   * </p>\n   *\n   * @memberof DrawCommand.prototype\n   * @type {Matrix4}\n   * @default undefined\n   */\n  modelMatrix: {\n    get: function () {\n      return this._modelMatrix;\n    },\n    set: function (value) {\n      if (this._modelMatrix !== value) {\n        this._modelMatrix = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The type of geometry in the vertex array.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {PrimitiveType}\n   * @default PrimitiveType.TRIANGLES\n   */\n  primitiveType: {\n    get: function () {\n      return this._primitiveType;\n    },\n    set: function (value) {\n      if (this._primitiveType !== value) {\n        this._primitiveType = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The vertex array.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {VertexArray}\n   * @default undefined\n   */\n  vertexArray: {\n    get: function () {\n      return this._vertexArray;\n    },\n    set: function (value) {\n      if (this._vertexArray !== value) {\n        this._vertexArray = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The number of vertices to draw in the vertex array.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {number}\n   * @default undefined\n   */\n  count: {\n    get: function () {\n      return this._count;\n    },\n    set: function (value) {\n      if (this._count !== value) {\n        this._count = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The offset to start drawing in the vertex array.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {number}\n   * @default 0\n   */\n  offset: {\n    get: function () {\n      return this._offset;\n    },\n    set: function (value) {\n      if (this._offset !== value) {\n        this._offset = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The number of instances to draw.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {number}\n   * @default 0\n   */\n  instanceCount: {\n    get: function () {\n      return this._instanceCount;\n    },\n    set: function (value) {\n      if (this._instanceCount !== value) {\n        this._instanceCount = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The shader program to apply.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {ShaderProgram}\n   * @default undefined\n   */\n  shaderProgram: {\n    get: function () {\n      return this._shaderProgram;\n    },\n    set: function (value) {\n      if (this._shaderProgram !== value) {\n        this._shaderProgram = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * Whether this command should cast shadows when shadowing is enabled.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default false\n   */\n  castShadows: {\n    get: function () {\n      return hasFlag(this, Flags.CAST_SHADOWS);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.CAST_SHADOWS) !== value) {\n        setFlag(this, Flags.CAST_SHADOWS, value);\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * Whether this command should receive shadows when shadowing is enabled.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default false\n   */\n  receiveShadows: {\n    get: function () {\n      return hasFlag(this, Flags.RECEIVE_SHADOWS);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.RECEIVE_SHADOWS) !== value) {\n        setFlag(this, Flags.RECEIVE_SHADOWS, value);\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * An object with functions whose names match the uniforms in the shader program\n   * and return values to set those uniforms.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {object}\n   * @default undefined\n   */\n  uniformMap: {\n    get: function () {\n      return this._uniformMap;\n    },\n    set: function (value) {\n      if (this._uniformMap !== value) {\n        this._uniformMap = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The render state.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {RenderState}\n   * @default undefined\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n    set: function (value) {\n      if (this._renderState !== value) {\n        this._renderState = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The framebuffer to draw to.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {Framebuffer}\n   * @default undefined\n   */\n  framebuffer: {\n    get: function () {\n      return this._framebuffer;\n    },\n    set: function (value) {\n      if (this._framebuffer !== value) {\n        this._framebuffer = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The pass when to render.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {Pass}\n   * @default undefined\n   */\n  pass: {\n    get: function () {\n      return this._pass;\n    },\n    set: function (value) {\n      if (this._pass !== value) {\n        this._pass = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * Specifies if this command is only to be executed in the frustum closest\n   * to the eye containing the bounding volume. Defaults to <code>false</code>.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default false\n   */\n  executeInClosestFrustum: {\n    get: function () {\n      return hasFlag(this, Flags.EXECUTE_IN_CLOSEST_FRUSTUM);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.EXECUTE_IN_CLOSEST_FRUSTUM) !== value) {\n        setFlag(this, Flags.EXECUTE_IN_CLOSEST_FRUSTUM, value);\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * The object who created this command.  This is useful for debugging command\n   * execution; it allows us to see who created a command when we only have a\n   * reference to the command, and can be used to selectively execute commands\n   * with {@link Scene#debugCommandFilter}.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {object}\n   * @default undefined\n   *\n   * @see Scene#debugCommandFilter\n   */\n  owner: {\n    get: function () {\n      return this._owner;\n    },\n    set: function (value) {\n      if (this._owner !== value) {\n        this._owner = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the {@link DrawCommand#boundingVolume} for this command, assuming it is a sphere, when the command executes.\n   * </p>\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default false\n   *\n   * @see DrawCommand#boundingVolume\n   */\n  debugShowBoundingVolume: {\n    get: function () {\n      return hasFlag(this, Flags.DEBUG_SHOW_BOUNDING_VOLUME);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.DEBUG_SHOW_BOUNDING_VOLUME) !== value) {\n        setFlag(this, Flags.DEBUG_SHOW_BOUNDING_VOLUME, value);\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * Used to implement Scene.debugShowFrustums.\n   * @private\n   */\n  debugOverlappingFrustums: {\n    get: function () {\n      return this._debugOverlappingFrustums;\n    },\n    set: function (value) {\n      if (this._debugOverlappingFrustums !== value) {\n        this._debugOverlappingFrustums = value;\n        this.dirty = true;\n      }\n    },\n  },\n  /**\n   * A GLSL string that will evaluate to a pick id. When <code>undefined</code>, the command will only draw depth\n   * during the pick pass.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {string|undefined}\n   * @default undefined\n   */\n  pickId: {\n    get: function () {\n      return this._pickId;\n    },\n    set: function (value) {\n      if (this._pickId !== value) {\n        this._pickId = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * Whether metadata picking is allowed.\n   *\n   * This is essentially only set to `true` for draw commands that are\n   * part of a `ModelDrawCommand`, to check whether a derived command\n   * for metadata picking has to be created.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default undefined\n   * @private\n   */\n  pickMetadataAllowed: {\n    get: function () {\n      return this._pickMetadataAllowed;\n    },\n  },\n\n  /**\n   * Information about picked metadata.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {PickedMetadataInfo|undefined}\n   * @default undefined\n   */\n  pickedMetadataInfo: {\n    get: function () {\n      return this._pickedMetadataInfo;\n    },\n    set: function (value) {\n      if (this._pickedMetadataInfo !== value) {\n        this._pickedMetadataInfo = value;\n        this.dirty = true;\n      }\n    },\n  },\n\n  /**\n   * Whether this command should be executed in the pick pass only.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default false\n   */\n  pickOnly: {\n    get: function () {\n      return hasFlag(this, Flags.PICK_ONLY);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.PICK_ONLY) !== value) {\n        setFlag(this, Flags.PICK_ONLY, value);\n        this.dirty = true;\n      }\n    },\n  },\n  /**\n   * Whether this command should be derived to draw depth for classification of translucent primitives.\n   *\n   * @memberof DrawCommand.prototype\n   * @type {boolean}\n   * @default false\n   */\n  depthForTranslucentClassification: {\n    get: function () {\n      return hasFlag(this, Flags.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION);\n    },\n    set: function (value) {\n      if (hasFlag(this, Flags.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION) !== value) {\n        setFlag(this, Flags.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION, value);\n        this.dirty = true;\n      }\n    },\n  },\n});\n\n/**\n * @private\n */\nDrawCommand.shallowClone = function (command, result) {\n  if (!defined(command)) {\n    return undefined;\n  }\n  if (!defined(result)) {\n    result = new DrawCommand();\n  }\n\n  result._boundingVolume = command._boundingVolume;\n  result._orientedBoundingBox = command._orientedBoundingBox;\n  result._modelMatrix = command._modelMatrix;\n  result._primitiveType = command._primitiveType;\n  result._vertexArray = command._vertexArray;\n  result._count = command._count;\n  result._offset = command._offset;\n  result._instanceCount = command._instanceCount;\n  result._shaderProgram = command._shaderProgram;\n  result._uniformMap = command._uniformMap;\n  result._renderState = command._renderState;\n  result._framebuffer = command._framebuffer;\n  result._pass = command._pass;\n  result._owner = command._owner;\n  result._debugOverlappingFrustums = command._debugOverlappingFrustums;\n  result._pickId = command._pickId;\n  result._pickMetadataAllowed = command._pickMetadataAllowed;\n  result._pickedMetadataInfo = command._pickedMetadataInfo;\n  result._flags = command._flags;\n\n  result.dirty = true;\n  result.lastDirtyTime = 0;\n\n  return result;\n};\n\n/**\n * Executes the draw command.\n *\n * @param {Context} context The renderer context in which to draw.\n * @param {PassState} [passState] The state for the current render pass.\n */\nDrawCommand.prototype.execute = function (context, passState) {\n  context.draw(this, passState);\n};\nexport default DrawCommand;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\n\nfunction attachTexture(framebuffer, attachment, texture) {\n  const gl = framebuffer._gl;\n  gl.framebufferTexture2D(\n    gl.FRAMEBUFFER,\n    attachment,\n    texture._target,\n    texture._texture,\n    0,\n  );\n}\n\nfunction attachRenderbuffer(framebuffer, attachment, renderbuffer) {\n  const gl = framebuffer._gl;\n  gl.framebufferRenderbuffer(\n    gl.FRAMEBUFFER,\n    attachment,\n    gl.RENDERBUFFER,\n    renderbuffer._getRenderbuffer(),\n  );\n}\n\n/**\n * Creates a framebuffer with optional initial color, depth, and stencil attachments.\n * Framebuffers are used for render-to-texture effects; they allow us to render to\n * textures in one pass, and read from it in a later pass.\n *\n * @param {object} options Object with the following properties:\n * @param {Context} options.context\n * @param {Texture[]} [options.colorTextures]\n * @param {Renderbuffer[]} [options.colorRenderbuffers]\n * @param {Texture} [options.depthTexture]\n * @param {Renderbuffer} [options.depthRenderbuffer]\n * @param {Renderbuffer} [options.stencilRenderbuffer]\n * @param {Texture} [options.depthStencilTexture]\n * @param {Renderbuffer} [options.depthStencilRenderbuffer]\n * @param {boolean} [options.destroyAttachments=true] When true, the framebuffer owns its attachments so they will be destroyed when {@link Framebuffer#destroy} is called or when a new attachment is assigned to an attachment point.\n *\n * @exception {DeveloperError} Cannot have both color texture and color renderbuffer attachments.\n * @exception {DeveloperError} Cannot have both a depth texture and depth renderbuffer attachment.\n * @exception {DeveloperError} Cannot have both a depth-stencil texture and depth-stencil renderbuffer attachment.\n * @exception {DeveloperError} Cannot have both a depth and depth-stencil renderbuffer.\n * @exception {DeveloperError} Cannot have both a stencil and depth-stencil renderbuffer.\n * @exception {DeveloperError} Cannot have both a depth and stencil renderbuffer.\n * @exception {DeveloperError} The color-texture pixel-format must be a color format.\n * @exception {DeveloperError} The depth-texture pixel-format must be DEPTH_COMPONENT.\n * @exception {DeveloperError} The depth-stencil-texture pixel-format must be DEPTH_STENCIL.\n * @exception {DeveloperError} The number of color attachments exceeds the number supported.\n * @exception {DeveloperError} The color-texture pixel datatype is HALF_FLOAT and the WebGL implementation does not support the EXT_color_buffer_half_float extension.\n * @exception {DeveloperError} The color-texture pixel datatype is FLOAT and the WebGL implementation does not support the EXT_color_buffer_float or WEBGL_color_buffer_float extensions.\n *\n * @example\n * // Create a framebuffer with color and depth texture attachments.\n * const width = context.canvas.clientWidth;\n * const height = context.canvas.clientHeight;\n * const framebuffer = new Framebuffer({\n *   context : context,\n *   colorTextures : [new Texture({\n *     context : context,\n *     width : width,\n *     height : height,\n *     pixelFormat : PixelFormat.RGBA\n *   })],\n *   depthTexture : new Texture({\n *     context : context,\n *     width : width,\n *     height : height,\n *     pixelFormat : PixelFormat.DEPTH_COMPONENT,\n *     pixelDatatype : PixelDatatype.UNSIGNED_SHORT\n *   })\n * });\n *\n * @private\n * @constructor\n */\nfunction Framebuffer(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const context = options.context;\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", context);\n  //>>includeEnd('debug');\n\n  const gl = context._gl;\n  const maximumColorAttachments = ContextLimits.maximumColorAttachments;\n\n  this._gl = gl;\n  this._framebuffer = gl.createFramebuffer();\n\n  this._colorTextures = [];\n  this._colorRenderbuffers = [];\n  this._activeColorAttachments = [];\n\n  this._depthTexture = undefined;\n  this._depthRenderbuffer = undefined;\n  this._stencilRenderbuffer = undefined;\n  this._depthStencilTexture = undefined;\n  this._depthStencilRenderbuffer = undefined;\n\n  /**\n   * When true, the framebuffer owns its attachments so they will be destroyed when\n   * {@link Framebuffer#destroy} is called or when a new attachment is assigned\n   * to an attachment point.\n   *\n   * @type {boolean}\n   * @default true\n   *\n   * @see Framebuffer#destroy\n   */\n  this.destroyAttachments = options.destroyAttachments ?? true;\n\n  // Throw if a texture and renderbuffer are attached to the same point.  This won't\n  // cause a WebGL error (because only one will be attached), but is likely a developer error.\n\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(options.colorTextures) && defined(options.colorRenderbuffers)) {\n    throw new DeveloperError(\n      \"Cannot have both color texture and color renderbuffer attachments.\",\n    );\n  }\n  if (defined(options.depthTexture) && defined(options.depthRenderbuffer)) {\n    throw new DeveloperError(\n      \"Cannot have both a depth texture and depth renderbuffer attachment.\",\n    );\n  }\n  if (\n    defined(options.depthStencilTexture) &&\n    defined(options.depthStencilRenderbuffer)\n  ) {\n    throw new DeveloperError(\n      \"Cannot have both a depth-stencil texture and depth-stencil renderbuffer attachment.\",\n    );\n  }\n\n  // Avoid errors defined in Section 6.5 of the WebGL spec\n  const depthAttachment =\n    defined(options.depthTexture) || defined(options.depthRenderbuffer);\n  const depthStencilAttachment =\n    defined(options.depthStencilTexture) ||\n    defined(options.depthStencilRenderbuffer);\n  if (depthAttachment && depthStencilAttachment) {\n    throw new DeveloperError(\n      \"Cannot have both a depth and depth-stencil attachment.\",\n    );\n  }\n  if (defined(options.stencilRenderbuffer) && depthStencilAttachment) {\n    throw new DeveloperError(\n      \"Cannot have both a stencil and depth-stencil attachment.\",\n    );\n  }\n  if (depthAttachment && defined(options.stencilRenderbuffer)) {\n    throw new DeveloperError(\n      \"Cannot have both a depth and stencil attachment.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._bind();\n\n  if (defined(options.colorTextures)) {\n    const textures = options.colorTextures;\n    const length =\n      (this._colorTextures.length =\n      this._activeColorAttachments.length =\n        textures.length);\n\n    //>>includeStart('debug', pragmas.debug);\n    if (length > maximumColorAttachments) {\n      throw new DeveloperError(\n        \"The number of color attachments exceeds the number supported.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    for (let i = 0; i < length; ++i) {\n      const texture = textures[i];\n\n      //>>includeStart('debug', pragmas.debug);\n      if (!PixelFormat.isColorFormat(texture.pixelFormat)) {\n        throw new DeveloperError(\n          \"The color-texture pixel-format must be a color format.\",\n        );\n      }\n      if (\n        texture.pixelDatatype === PixelDatatype.FLOAT &&\n        !context.colorBufferFloat\n      ) {\n        throw new DeveloperError(\n          \"The color texture pixel datatype is FLOAT and the WebGL implementation does not support the EXT_color_buffer_float or WEBGL_color_buffer_float extensions. See Context.colorBufferFloat.\",\n        );\n      }\n      if (\n        texture.pixelDatatype === PixelDatatype.HALF_FLOAT &&\n        !context.colorBufferHalfFloat\n      ) {\n        throw new DeveloperError(\n          \"The color texture pixel datatype is HALF_FLOAT and the WebGL implementation does not support the EXT_color_buffer_half_float extension. See Context.colorBufferHalfFloat.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const attachmentEnum = this._gl.COLOR_ATTACHMENT0 + i;\n      attachTexture(this, attachmentEnum, texture);\n      this._activeColorAttachments[i] = attachmentEnum;\n      this._colorTextures[i] = texture;\n    }\n  }\n\n  if (defined(options.colorRenderbuffers)) {\n    const renderbuffers = options.colorRenderbuffers;\n    const length =\n      (this._colorRenderbuffers.length =\n      this._activeColorAttachments.length =\n        renderbuffers.length);\n\n    //>>includeStart('debug', pragmas.debug);\n    if (length > maximumColorAttachments) {\n      throw new DeveloperError(\n        \"The number of color attachments exceeds the number supported.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    for (let i = 0; i < length; ++i) {\n      const renderbuffer = renderbuffers[i];\n      const attachmentEnum = this._gl.COLOR_ATTACHMENT0 + i;\n      attachRenderbuffer(this, attachmentEnum, renderbuffer);\n      this._activeColorAttachments[i] = attachmentEnum;\n      this._colorRenderbuffers[i] = renderbuffer;\n    }\n  }\n\n  if (defined(options.depthTexture)) {\n    const texture = options.depthTexture;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (texture.pixelFormat !== PixelFormat.DEPTH_COMPONENT) {\n      throw new DeveloperError(\n        \"The depth-texture pixel-format must be DEPTH_COMPONENT.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    attachTexture(this, this._gl.DEPTH_ATTACHMENT, texture);\n    this._depthTexture = texture;\n  }\n\n  if (defined(options.depthRenderbuffer)) {\n    const renderbuffer = options.depthRenderbuffer;\n    attachRenderbuffer(this, this._gl.DEPTH_ATTACHMENT, renderbuffer);\n    this._depthRenderbuffer = renderbuffer;\n  }\n\n  if (defined(options.stencilRenderbuffer)) {\n    const renderbuffer = options.stencilRenderbuffer;\n    attachRenderbuffer(this, this._gl.STENCIL_ATTACHMENT, renderbuffer);\n    this._stencilRenderbuffer = renderbuffer;\n  }\n\n  if (defined(options.depthStencilTexture)) {\n    const texture = options.depthStencilTexture;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (texture.pixelFormat !== PixelFormat.DEPTH_STENCIL) {\n      throw new DeveloperError(\n        \"The depth-stencil pixel-format must be DEPTH_STENCIL.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    attachTexture(this, this._gl.DEPTH_STENCIL_ATTACHMENT, texture);\n    this._depthStencilTexture = texture;\n  }\n\n  if (defined(options.depthStencilRenderbuffer)) {\n    const renderbuffer = options.depthStencilRenderbuffer;\n    attachRenderbuffer(this, this._gl.DEPTH_STENCIL_ATTACHMENT, renderbuffer);\n    this._depthStencilRenderbuffer = renderbuffer;\n  }\n\n  this._unBind();\n}\n\nObject.defineProperties(Framebuffer.prototype, {\n  /**\n   * The status of the framebuffer. If the status is not WebGLConstants.FRAMEBUFFER_COMPLETE,\n   * a {@link DeveloperError} will be thrown when attempting to render to the framebuffer.\n   * @memberof Framebuffer.prototype\n   * @type {number}\n   */\n  status: {\n    get: function () {\n      this._bind();\n      const status = this._gl.checkFramebufferStatus(this._gl.FRAMEBUFFER);\n      this._unBind();\n      return status;\n    },\n  },\n  numberOfColorAttachments: {\n    get: function () {\n      return this._activeColorAttachments.length;\n    },\n  },\n  depthTexture: {\n    get: function () {\n      return this._depthTexture;\n    },\n  },\n  depthRenderbuffer: {\n    get: function () {\n      return this._depthRenderbuffer;\n    },\n  },\n  stencilRenderbuffer: {\n    get: function () {\n      return this._stencilRenderbuffer;\n    },\n  },\n  depthStencilTexture: {\n    get: function () {\n      return this._depthStencilTexture;\n    },\n  },\n  depthStencilRenderbuffer: {\n    get: function () {\n      return this._depthStencilRenderbuffer;\n    },\n  },\n\n  /**\n   * True if the framebuffer has a depth attachment.  Depth attachments include\n   * depth and depth-stencil textures, and depth and depth-stencil renderbuffers.  When\n   * rendering to a framebuffer, a depth attachment is required for the depth test to have effect.\n   * @memberof Framebuffer.prototype\n   * @type {boolean}\n   */\n  hasDepthAttachment: {\n    get: function () {\n      return !!(\n        this.depthTexture ||\n        this.depthRenderbuffer ||\n        this.depthStencilTexture ||\n        this.depthStencilRenderbuffer\n      );\n    },\n  },\n});\n\nFramebuffer.prototype._bind = function () {\n  const gl = this._gl;\n  gl.bindFramebuffer(gl.FRAMEBUFFER, this._framebuffer);\n};\n\nFramebuffer.prototype._unBind = function () {\n  const gl = this._gl;\n  gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n};\n\nFramebuffer.prototype.bindDraw = function () {\n  const gl = this._gl;\n  gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, this._framebuffer);\n};\n\nFramebuffer.prototype.bindRead = function () {\n  const gl = this._gl;\n  gl.bindFramebuffer(gl.READ_FRAMEBUFFER, this._framebuffer);\n};\n\nFramebuffer.prototype._getActiveColorAttachments = function () {\n  return this._activeColorAttachments;\n};\n\nFramebuffer.prototype.getColorTexture = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index) || index < 0 || index >= this._colorTextures.length) {\n    throw new DeveloperError(\n      \"index is required, must be greater than or equal to zero and must be less than the number of color attachments.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return this._colorTextures[index];\n};\n\nFramebuffer.prototype.getColorRenderbuffer = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !defined(index) ||\n    index < 0 ||\n    index >= this._colorRenderbuffers.length\n  ) {\n    throw new DeveloperError(\n      \"index is required, must be greater than or equal to zero and must be less than the number of color attachments.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return this._colorRenderbuffers[index];\n};\n\nFramebuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nFramebuffer.prototype.destroy = function () {\n  if (this.destroyAttachments) {\n    // If the color texture is a cube map face, it is owned by the cube map, and will not be destroyed.\n    const textures = this._colorTextures;\n    for (let i = 0; i < textures.length; ++i) {\n      const texture = textures[i];\n      if (defined(texture)) {\n        texture.destroy();\n      }\n    }\n\n    const renderbuffers = this._colorRenderbuffers;\n    for (let i = 0; i < renderbuffers.length; ++i) {\n      const renderbuffer = renderbuffers[i];\n      if (defined(renderbuffer)) {\n        renderbuffer.destroy();\n      }\n    }\n\n    this._depthTexture = this._depthTexture && this._depthTexture.destroy();\n    this._depthRenderbuffer =\n      this._depthRenderbuffer && this._depthRenderbuffer.destroy();\n    this._stencilRenderbuffer =\n      this._stencilRenderbuffer && this._stencilRenderbuffer.destroy();\n    this._depthStencilTexture =\n      this._depthStencilTexture && this._depthStencilTexture.destroy();\n    this._depthStencilRenderbuffer =\n      this._depthStencilRenderbuffer &&\n      this._depthStencilRenderbuffer.destroy();\n  }\n\n  this._gl.deleteFramebuffer(this._framebuffer);\n  return destroyObject(this);\n};\nexport default Framebuffer;\n","import Framebuffer from \"./Framebuffer.js\";\nimport MultisampleFramebuffer from \"./MultisampleFramebuffer.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport Renderbuffer from \"./Renderbuffer.js\";\nimport RenderbufferFormat from \"./RenderbufferFormat.js\";\nimport Sampler from \"./Sampler.js\";\nimport Texture from \"./Texture.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\n\n/**\n * Creates a wrapper object around a framebuffer and its resources.\n *\n * @param {object} options Object with the following properties:\n * @param {number} [options.numSamples=1] The multisampling rate of the render targets. Requires a WebGL2 context.\n * @param {number} [options.colorAttachmentsLength=1] The number of color attachments this FramebufferManager will create.\n * @param {boolean} [options.color=true] Whether the FramebufferManager will use color attachments.\n * @param {boolean} [options.depth=false] Whether the FramebufferManager will use depth attachments.\n * @param {boolean} [options.depthStencil=false] Whether the FramebufferManager will use depth-stencil attachments.\n * @param {boolean} [options.supportsDepthTexture=false] Whether the FramebufferManager will create a depth texture when the extension is supported.\n * @param {boolean} [options.createColorAttachments=true] Whether the FramebufferManager will construct its own color attachments.\n * @param {boolean} [options.createDepthAttachments=true] Whether the FramebufferManager will construct its own depth attachments.\n * @param {PixelDatatype} [options.pixelDatatype=undefined] The default pixel datatype to use when creating color attachments.\n * @param {PixelFormat} [options.pixelFormat=undefined] The default pixel format to use when creating color attachments.\n *\n * @exception {DeveloperError} Must enable at least one type of framebuffer attachment.\n * @exception {DeveloperError} Cannot have both a depth and depth-stencil attachment.\n *\n * @private\n * @constructor\n */\nfunction FramebufferManager(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  this._numSamples = options.numSamples ?? 1;\n  this._colorAttachmentsLength = options.colorAttachmentsLength ?? 1;\n\n  this._color = options.color ?? true;\n  this._depth = options.depth ?? false;\n  this._depthStencil = options.depthStencil ?? false;\n  this._supportsDepthTexture = options.supportsDepthTexture ?? false;\n  //>>includeStart('debug', pragmas.debug);\n  if (!this._color && !this._depth && !this._depthStencil) {\n    throw new DeveloperError(\n      \"Must enable at least one type of framebuffer attachment.\",\n    );\n  }\n  if (this._depth && this._depthStencil) {\n    throw new DeveloperError(\n      \"Cannot have both a depth and depth-stencil attachment.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._createColorAttachments = options.createColorAttachments ?? true;\n  this._createDepthAttachments = options.createDepthAttachments ?? true;\n\n  this._pixelDatatype = options.pixelDatatype;\n  this._pixelFormat = options.pixelFormat;\n\n  this._width = undefined;\n  this._height = undefined;\n\n  this._framebuffer = undefined;\n  this._multisampleFramebuffer = undefined;\n  this._colorTextures = undefined;\n  if (this._color) {\n    this._colorTextures = new Array(this._colorAttachmentsLength);\n    this._colorRenderbuffers = new Array(this._colorAttachmentsLength);\n  }\n  this._colorRenderbuffer = undefined;\n  this._depthStencilRenderbuffer = undefined;\n  this._depthStencilTexture = undefined;\n  this._depthRenderbuffer = undefined;\n  this._depthTexture = undefined;\n\n  this._attachmentsDirty = false;\n}\n\nObject.defineProperties(FramebufferManager.prototype, {\n  framebuffer: {\n    get: function () {\n      if (this._numSamples > 1) {\n        return this._multisampleFramebuffer.getRenderFramebuffer();\n      }\n      return this._framebuffer;\n    },\n  },\n  numSamples: {\n    get: function () {\n      return this._numSamples;\n    },\n  },\n  status: {\n    get: function () {\n      return this.framebuffer.status;\n    },\n  },\n});\n\nFramebufferManager.prototype.isDirty = function (\n  width,\n  height,\n  numSamples,\n  pixelDatatype,\n  pixelFormat,\n) {\n  numSamples = numSamples ?? 1;\n  const dimensionChanged = this._width !== width || this._height !== height;\n  const samplesChanged = this._numSamples !== numSamples;\n  const pixelChanged =\n    (defined(pixelDatatype) && this._pixelDatatype !== pixelDatatype) ||\n    (defined(pixelFormat) && this._pixelFormat !== pixelFormat);\n  const framebufferDefined =\n    numSamples === 1\n      ? defined(this._framebuffer)\n      : defined(this._multisampleFramebuffer);\n\n  return (\n    this._attachmentsDirty ||\n    dimensionChanged ||\n    samplesChanged ||\n    pixelChanged ||\n    !framebufferDefined ||\n    (this._color && !defined(this._colorTextures[0]))\n  );\n};\n\nFramebufferManager.prototype.update = function (\n  context,\n  width,\n  height,\n  numSamples,\n  pixelDatatype,\n  pixelFormat,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(width) || !defined(height)) {\n    throw new DeveloperError(\"width and height must be defined.\");\n  }\n  //>>includeEnd('debug');\n  numSamples = context.msaa ? (numSamples ?? 1) : 1;\n  pixelDatatype =\n    pixelDatatype ??\n    (this._color\n      ? (this._pixelDatatype ?? PixelDatatype.UNSIGNED_BYTE)\n      : undefined);\n  pixelFormat =\n    pixelFormat ??\n    (this._color ? (this._pixelFormat ?? PixelFormat.RGBA) : undefined);\n\n  if (this.isDirty(width, height, numSamples, pixelDatatype, pixelFormat)) {\n    this.destroy();\n    this._width = width;\n    this._height = height;\n    this._numSamples = numSamples;\n    this._pixelDatatype = pixelDatatype;\n    this._pixelFormat = pixelFormat;\n    this._attachmentsDirty = false;\n\n    // Create color texture\n    if (this._color && this._createColorAttachments) {\n      for (let i = 0; i < this._colorAttachmentsLength; ++i) {\n        this._colorTextures[i] = new Texture({\n          context: context,\n          width: width,\n          height: height,\n          pixelFormat: pixelFormat,\n          pixelDatatype: pixelDatatype,\n          sampler: Sampler.NEAREST,\n        });\n        if (this._numSamples > 1) {\n          const format = RenderbufferFormat.getColorFormat(pixelDatatype);\n          this._colorRenderbuffers[i] = new Renderbuffer({\n            context: context,\n            width: width,\n            height: height,\n            format: format,\n            numSamples: this._numSamples,\n          });\n        }\n      }\n    }\n\n    // Create depth stencil texture or renderbuffer\n    if (this._depthStencil && this._createDepthAttachments) {\n      if (this._supportsDepthTexture && context.depthTexture) {\n        this._depthStencilTexture = new Texture({\n          context: context,\n          width: width,\n          height: height,\n          pixelFormat: PixelFormat.DEPTH_STENCIL,\n          pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n          sampler: Sampler.NEAREST,\n        });\n        if (this._numSamples > 1) {\n          this._depthStencilRenderbuffer = new Renderbuffer({\n            context: context,\n            width: width,\n            height: height,\n            format: RenderbufferFormat.DEPTH24_STENCIL8,\n            numSamples: this._numSamples,\n          });\n        }\n      } else {\n        this._depthStencilRenderbuffer = new Renderbuffer({\n          context: context,\n          width: width,\n          height: height,\n          format: RenderbufferFormat.DEPTH_STENCIL,\n        });\n      }\n    }\n\n    // Create depth texture\n    if (this._depth && this._createDepthAttachments) {\n      if (this._supportsDepthTexture && context.depthTexture) {\n        this._depthTexture = new Texture({\n          context: context,\n          width: width,\n          height: height,\n          pixelFormat: PixelFormat.DEPTH_COMPONENT,\n          pixelDatatype: PixelDatatype.UNSIGNED_INT,\n          sampler: Sampler.NEAREST,\n        });\n      } else {\n        this._depthRenderbuffer = new Renderbuffer({\n          context: context,\n          width: width,\n          height: height,\n          format: RenderbufferFormat.DEPTH_COMPONENT16,\n        });\n      }\n    }\n\n    if (this._numSamples > 1) {\n      this._multisampleFramebuffer = new MultisampleFramebuffer({\n        context: context,\n        width: this._width,\n        height: this._height,\n        colorTextures: this._colorTextures,\n        colorRenderbuffers: this._colorRenderbuffers,\n        depthStencilTexture: this._depthStencilTexture,\n        depthStencilRenderbuffer: this._depthStencilRenderbuffer,\n        destroyAttachments: false,\n      });\n    } else {\n      this._framebuffer = new Framebuffer({\n        context: context,\n        colorTextures: this._colorTextures,\n        depthTexture: this._depthTexture,\n        depthRenderbuffer: this._depthRenderbuffer,\n        depthStencilTexture: this._depthStencilTexture,\n        depthStencilRenderbuffer: this._depthStencilRenderbuffer,\n        destroyAttachments: false,\n      });\n    }\n  }\n};\n\nFramebufferManager.prototype.getColorTexture = function (index) {\n  index = index ?? 0;\n  //>>includeStart('debug', pragmas.debug);\n  if (index >= this._colorAttachmentsLength) {\n    throw new DeveloperError(\n      \"index must be smaller than total number of color attachments.\",\n    );\n  }\n  //>>includeEnd('debug');\n  return this._colorTextures[index];\n};\n\nFramebufferManager.prototype.setColorTexture = function (texture, index) {\n  index = index ?? 0;\n  //>>includeStart('debug', pragmas.debug);\n  if (this._createColorAttachments) {\n    throw new DeveloperError(\n      \"createColorAttachments must be false if setColorTexture is called.\",\n    );\n  }\n  if (index >= this._colorAttachmentsLength) {\n    throw new DeveloperError(\n      \"index must be smaller than total number of color attachments.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._attachmentsDirty = texture !== this._colorTextures[index];\n  this._colorTextures[index] = texture;\n};\n\nFramebufferManager.prototype.getColorRenderbuffer = function (index) {\n  index = index ?? 0;\n  //>>includeStart('debug', pragmas.debug);\n  if (index >= this._colorAttachmentsLength) {\n    throw new DeveloperError(\n      \"index must be smaller than total number of color attachments.\",\n    );\n  }\n  //>>includeEnd('debug');\n  return this._colorRenderbuffers[index];\n};\n\nFramebufferManager.prototype.setColorRenderbuffer = function (\n  renderbuffer,\n  index,\n) {\n  index = index ?? 0;\n  //>>includeStart('debug', pragmas.debug);\n  if (this._createColorAttachments) {\n    throw new DeveloperError(\n      \"createColorAttachments must be false if setColorRenderbuffer is called.\",\n    );\n  }\n  if (index >= this._colorAttachmentsLength) {\n    throw new DeveloperError(\n      \"index must be smaller than total number of color attachments.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._attachmentsDirty = renderbuffer !== this._colorRenderbuffers[index];\n  this._colorRenderbuffers[index] = renderbuffer;\n};\n\nFramebufferManager.prototype.getDepthRenderbuffer = function () {\n  return this._depthRenderbuffer;\n};\n\nFramebufferManager.prototype.setDepthRenderbuffer = function (renderbuffer) {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._createDepthAttachments) {\n    throw new DeveloperError(\n      \"createDepthAttachments must be false if setDepthRenderbuffer is called.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._attachmentsDirty = renderbuffer !== this._depthRenderbuffer;\n  this._depthRenderbuffer = renderbuffer;\n};\n\nFramebufferManager.prototype.getDepthTexture = function () {\n  return this._depthTexture;\n};\n\nFramebufferManager.prototype.setDepthTexture = function (texture) {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._createDepthAttachments) {\n    throw new DeveloperError(\n      \"createDepthAttachments must be false if setDepthTexture is called.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._attachmentsDirty = texture !== this._depthTexture;\n  this._depthTexture = texture;\n};\n\nFramebufferManager.prototype.getDepthStencilRenderbuffer = function () {\n  return this._depthStencilRenderbuffer;\n};\n\nFramebufferManager.prototype.setDepthStencilRenderbuffer = function (\n  renderbuffer,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._createDepthAttachments) {\n    throw new DeveloperError(\n      \"createDepthAttachments must be false if setDepthStencilRenderbuffer is called.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._attachmentsDirty = renderbuffer !== this._depthStencilRenderbuffer;\n  this._depthStencilRenderbuffer = renderbuffer;\n};\n\nFramebufferManager.prototype.getDepthStencilTexture = function () {\n  return this._depthStencilTexture;\n};\n\nFramebufferManager.prototype.setDepthStencilTexture = function (texture) {\n  //>>includeStart('debug', pragmas.debug);\n  if (this._createDepthAttachments) {\n    throw new DeveloperError(\n      \"createDepthAttachments must be false if setDepthStencilTexture is called.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._attachmentsDirty = texture !== this._depthStencilTexture;\n  this._depthStencilTexture = texture;\n};\n\n/**\n * If using MSAA, resolve the stencil.\n *\n * @param {Context} context\n * @param {boolean} blitStencil\n *\n * @private\n */\nFramebufferManager.prototype.prepareTextures = function (context, blitStencil) {\n  if (this._numSamples > 1) {\n    this._multisampleFramebuffer.blitFramebuffers(context, blitStencil);\n  }\n};\n\nFramebufferManager.prototype.clear = function (\n  context,\n  clearCommand,\n  passState,\n) {\n  const framebuffer = clearCommand.framebuffer;\n  clearCommand.framebuffer = this.framebuffer;\n  clearCommand.execute(context, passState);\n  clearCommand.framebuffer = framebuffer;\n};\n\nFramebufferManager.prototype.destroyFramebuffer = function () {\n  this._framebuffer = this._framebuffer && this._framebuffer.destroy();\n  this._multisampleFramebuffer =\n    this._multisampleFramebuffer && this._multisampleFramebuffer.destroy();\n};\n\nFramebufferManager.prototype.destroy = function () {\n  if (this._color) {\n    const colorTextures = this._colorTextures;\n    const colorRenderbuffers = this._colorRenderbuffers;\n    for (let i = 0; i < colorTextures.length; ++i) {\n      const texture = colorTextures[i];\n      if (this._createColorAttachments) {\n        if (defined(texture) && !texture.isDestroyed()) {\n          texture.destroy();\n        }\n      }\n      if (defined(texture) && texture.isDestroyed()) {\n        colorTextures[i] = undefined;\n      }\n      const renderbuffer = colorRenderbuffers[i];\n      if (this._createColorAttachments) {\n        if (defined(renderbuffer) && !renderbuffer.isDestroyed()) {\n          renderbuffer.destroy();\n        }\n      }\n      if (defined(renderbuffer) && renderbuffer.isDestroyed()) {\n        colorRenderbuffers[i] = undefined;\n      }\n    }\n  }\n\n  if (this._depthStencil) {\n    if (this._createDepthAttachments) {\n      this._depthStencilTexture =\n        this._depthStencilTexture && this._depthStencilTexture.destroy();\n      this._depthStencilRenderbuffer =\n        this._depthStencilRenderbuffer &&\n        this._depthStencilRenderbuffer.destroy();\n    }\n    if (\n      defined(this._depthStencilTexture) &&\n      this._depthStencilTexture.isDestroyed()\n    ) {\n      this._depthStencilTexture = undefined;\n    }\n    if (\n      defined(this._depthStencilRenderbuffer) &&\n      this._depthStencilRenderbuffer.isDestroyed()\n    ) {\n      this._depthStencilRenderbuffer = undefined;\n    }\n  }\n\n  if (this._depth) {\n    if (this._createDepthAttachments) {\n      this._depthTexture = this._depthTexture && this._depthTexture.destroy();\n      this._depthRenderbuffer =\n        this._depthRenderbuffer && this._depthRenderbuffer.destroy();\n    }\n    if (defined(this._depthTexture) && this._depthTexture.isDestroyed()) {\n      this._depthTexture = undefined;\n    }\n    if (\n      defined(this._depthRenderbuffer) &&\n      this._depthRenderbuffer.isDestroyed()\n    ) {\n      this._depthRenderbuffer = undefined;\n    }\n  }\n\n  this.destroyFramebuffer();\n};\nexport default FramebufferManager;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nconst MipmapHint = {\n  DONT_CARE: WebGLConstants.DONT_CARE,\n  FASTEST: WebGLConstants.FASTEST,\n  NICEST: WebGLConstants.NICEST,\n\n  validate: function (mipmapHint) {\n    return (\n      mipmapHint === MipmapHint.DONT_CARE ||\n      mipmapHint === MipmapHint.FASTEST ||\n      mipmapHint === MipmapHint.NICEST\n    );\n  },\n};\nexport default Object.freeze(MipmapHint);\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Framebuffer from \"./Framebuffer.js\";\n\n/**\n * Creates a multisampling wrapper around two framebuffers with optional initial\n * color and depth-stencil attachments. The first framebuffer has multisampled\n * renderbuffer attachments and is bound to READ_FRAMEBUFFER during the blit. The\n * second is bound to DRAW_FRAMEBUFFER during the blit, and has texture attachments\n * to store the copied pixels.\n *\n * @param {object} options Object with the following properties:\n * @param {Context} options.context\n * @param {number} options.width\n * @param {number} options.height\n * @param {Texture[]} [options.colorTextures]\n * @param {Renderbuffer[]} [options.colorRenderbuffers]\n * @param {Texture} [options.depthStencilTexture]\n * @param {Renderbuffer} [options.depthStencilRenderbuffer]\n * @param {boolean} [options.destroyAttachments]\n *\n * @exception {DeveloperError} Both color renderbuffer and texture attachments must be provided.\n * @exception {DeveloperError} Both depth-stencil renderbuffer and texture attachments must be provided.\n *\n * @private\n * @constructor\n */\nfunction MultisampleFramebuffer(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const {\n    context,\n    width,\n    height,\n    colorRenderbuffers,\n    colorTextures,\n    depthStencilRenderbuffer,\n    depthStencilTexture,\n    destroyAttachments,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", context);\n  Check.defined(\"options.width\", width);\n  Check.defined(\"options.height\", height);\n  //>>includeEnd('debug');\n\n  this._width = width;\n  this._height = height;\n\n  if (defined(colorRenderbuffers) !== defined(colorTextures)) {\n    throw new DeveloperError(\n      \"Both color renderbuffer and texture attachments must be provided.\",\n    );\n  }\n\n  if (defined(depthStencilRenderbuffer) !== defined(depthStencilTexture)) {\n    throw new DeveloperError(\n      \"Both depth-stencil renderbuffer and texture attachments must be provided.\",\n    );\n  }\n\n  this._renderFramebuffer = new Framebuffer({\n    context: context,\n    colorRenderbuffers: colorRenderbuffers,\n    depthStencilRenderbuffer: depthStencilRenderbuffer,\n    destroyAttachments: destroyAttachments,\n  });\n  this._colorFramebuffer = new Framebuffer({\n    context: context,\n    colorTextures: colorTextures,\n    depthStencilTexture: depthStencilTexture,\n    destroyAttachments: destroyAttachments,\n  });\n}\n\nMultisampleFramebuffer.prototype.getRenderFramebuffer = function () {\n  return this._renderFramebuffer;\n};\n\nMultisampleFramebuffer.prototype.getColorFramebuffer = function () {\n  return this._colorFramebuffer;\n};\n\n/**\n * Copy from the render framebuffer to the color framebuffer, resolving the stencil.\n *\n * @param {Context} context\n * @param {boolean} blitStencil <code>true</code> if the stencil mask should be applied.\n *\n * @private\n */\nMultisampleFramebuffer.prototype.blitFramebuffers = function (\n  context,\n  blitStencil,\n) {\n  this._renderFramebuffer.bindRead();\n  this._colorFramebuffer.bindDraw();\n  const gl = context._gl;\n  let mask = 0;\n  if (this._colorFramebuffer._colorTextures.length > 0) {\n    mask |= gl.COLOR_BUFFER_BIT;\n  }\n  if (defined(this._colorFramebuffer.depthStencilTexture)) {\n    mask |= gl.DEPTH_BUFFER_BIT | (blitStencil ? gl.STENCIL_BUFFER_BIT : 0);\n  }\n  gl.blitFramebuffer(\n    0,\n    0,\n    this._width,\n    this._height,\n    0,\n    0,\n    this._width,\n    this._height,\n    mask,\n    gl.NEAREST,\n  );\n  gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\n  gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\n};\n\nMultisampleFramebuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nMultisampleFramebuffer.prototype.destroy = function () {\n  this._renderFramebuffer.destroy();\n  this._colorFramebuffer.destroy();\n  return destroyObject(this);\n};\n\nexport default MultisampleFramebuffer;\n","/**\n * The render pass for a command.\n *\n * @private\n */\nconst Pass = {\n  // If you add/modify/remove Pass constants, also change the automatic GLSL constants\n  // that start with 'czm_pass'\n  //\n  // Commands are executed in order by pass up to the translucent pass.\n  // Translucent geometry needs special handling (sorting/OIT). The compute pass\n  // is executed first and the overlay pass is executed last. Both are not sorted\n  // by frustum.\n  ENVIRONMENT: 0,\n  COMPUTE: 1,\n  GLOBE: 2,\n  TERRAIN_CLASSIFICATION: 3,\n  CESIUM_3D_TILE_EDGES: 4,\n  CESIUM_3D_TILE: 5,\n  CESIUM_3D_TILE_CLASSIFICATION: 6,\n  CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW: 7,\n  OPAQUE: 8,\n  TRANSLUCENT: 9,\n  VOXELS: 10,\n  GAUSSIAN_SPLATS: 11,\n  OVERLAY: 12,\n  NUMBER_OF_PASSES: 13,\n};\nexport default Object.freeze(Pass);\n","/**\n * The state for a particular rendering pass.  This is used to supplement the state\n * in a command being executed.\n *\n * @private\n * @constructor\n */\nfunction PassState(context) {\n  /**\n   * The context used to execute commands for this pass.\n   *\n   * @type {Context}\n   */\n  this.context = context;\n\n  /**\n   * The framebuffer to render to.  This framebuffer is used unless a {@link DrawCommand}\n   * or {@link ClearCommand} explicitly define a framebuffer, which is used for off-screen\n   * rendering.\n   *\n   * @type {Framebuffer}\n   * @default undefined\n   */\n  this.framebuffer = undefined;\n\n  /**\n   * When defined, this overrides the blending property of a {@link DrawCommand}'s render state.\n   * This is used to, for example, to allow the renderer to turn off blending during the picking pass.\n   * <p>\n   * When this is <code>undefined</code>, the {@link DrawCommand}'s property is used.\n   * </p>\n   *\n   * @type {boolean}\n   * @default undefined\n   */\n  this.blendingEnabled = undefined;\n\n  /**\n   * When defined, this overrides the scissor test property of a {@link DrawCommand}'s render state.\n   * This is used to, for example, to allow the renderer to scissor out the pick region during the picking pass.\n   * <p>\n   * When this is <code>undefined</code>, the {@link DrawCommand}'s property is used.\n   * </p>\n   *\n   * @type {object}\n   * @default undefined\n   */\n  this.scissorTest = undefined;\n\n  /**\n   * The viewport used when one is not defined by a {@link DrawCommand}'s render state.\n   * @type {BoundingRectangle}\n   * @default undefined\n   */\n  this.viewport = undefined;\n}\nexport default PassState;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * The data type of a pixel.\n *\n * @enum {number}\n * @see PostProcessStage\n */\nconst PixelDatatype = {\n  UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\n  UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\n  UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\n  FLOAT: WebGLConstants.FLOAT,\n  HALF_FLOAT: WebGLConstants.HALF_FLOAT_OES,\n  UNSIGNED_INT_24_8: WebGLConstants.UNSIGNED_INT_24_8,\n  UNSIGNED_SHORT_4_4_4_4: WebGLConstants.UNSIGNED_SHORT_4_4_4_4,\n  UNSIGNED_SHORT_5_5_5_1: WebGLConstants.UNSIGNED_SHORT_5_5_5_1,\n  UNSIGNED_SHORT_5_6_5: WebGLConstants.UNSIGNED_SHORT_5_6_5,\n};\n\n/**\n  @private\n*/\nPixelDatatype.toWebGLConstant = function (pixelDatatype, context) {\n  switch (pixelDatatype) {\n    case PixelDatatype.UNSIGNED_BYTE:\n      return WebGLConstants.UNSIGNED_BYTE;\n    case PixelDatatype.UNSIGNED_SHORT:\n      return WebGLConstants.UNSIGNED_SHORT;\n    case PixelDatatype.UNSIGNED_INT:\n      return WebGLConstants.UNSIGNED_INT;\n    case PixelDatatype.FLOAT:\n      return WebGLConstants.FLOAT;\n    case PixelDatatype.HALF_FLOAT:\n      return context.webgl2\n        ? WebGLConstants.HALF_FLOAT\n        : WebGLConstants.HALF_FLOAT_OES;\n    case PixelDatatype.UNSIGNED_INT_24_8:\n      return WebGLConstants.UNSIGNED_INT_24_8;\n    case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:\n      return WebGLConstants.UNSIGNED_SHORT_4_4_4_4;\n    case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:\n      return WebGLConstants.UNSIGNED_SHORT_5_5_5_1;\n    case PixelDatatype.UNSIGNED_SHORT_5_6_5:\n      return PixelDatatype.UNSIGNED_SHORT_5_6_5;\n  }\n};\n\n/**\n  @private\n*/\nPixelDatatype.isPacked = function (pixelDatatype) {\n  return (\n    pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 ||\n    pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 ||\n    pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 ||\n    pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5\n  );\n};\n\n/**\n  @private\n*/\nPixelDatatype.sizeInBytes = function (pixelDatatype) {\n  switch (pixelDatatype) {\n    case PixelDatatype.UNSIGNED_BYTE:\n      return 1;\n    case PixelDatatype.UNSIGNED_SHORT:\n    case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:\n    case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:\n    case PixelDatatype.UNSIGNED_SHORT_5_6_5:\n    case PixelDatatype.HALF_FLOAT:\n      return 2;\n    case PixelDatatype.UNSIGNED_INT:\n    case PixelDatatype.FLOAT:\n    case PixelDatatype.UNSIGNED_INT_24_8:\n      return 4;\n  }\n};\n\n/**\n  @private\n*/\nPixelDatatype.validate = function (pixelDatatype) {\n  return (\n    pixelDatatype === PixelDatatype.UNSIGNED_BYTE ||\n    pixelDatatype === PixelDatatype.UNSIGNED_SHORT ||\n    pixelDatatype === PixelDatatype.UNSIGNED_INT ||\n    pixelDatatype === PixelDatatype.FLOAT ||\n    pixelDatatype === PixelDatatype.HALF_FLOAT ||\n    pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 ||\n    pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 ||\n    pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 ||\n    pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5\n  );\n};\n\n/**\n * Determine which TypedArray class should be used for a given PixelDatatype.\n *\n * @param {PixelDatatype} pixelDatatype The pixel datatype.\n * @returns {function} The constructor for the appropriate TypedArray class.\n *\n * @private\n */\nPixelDatatype.getTypedArrayConstructor = function (pixelDatatype) {\n  const sizeInBytes = PixelDatatype.sizeInBytes(pixelDatatype);\n  if (sizeInBytes === Uint8Array.BYTES_PER_ELEMENT) {\n    return Uint8Array;\n  } else if (sizeInBytes === Uint16Array.BYTES_PER_ELEMENT) {\n    return Uint16Array;\n  } else if (\n    sizeInBytes === Float32Array.BYTES_PER_ELEMENT &&\n    pixelDatatype === PixelDatatype.FLOAT\n  ) {\n    return Float32Array;\n  }\n  return Uint32Array;\n};\n\nexport default Object.freeze(PixelDatatype);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport WindingOrder from \"../Core/WindingOrder.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport freezeRenderState from \"./freezeRenderState.js\";\n\nfunction validateBlendEquation(blendEquation) {\n  return (\n    blendEquation === WebGLConstants.FUNC_ADD ||\n    blendEquation === WebGLConstants.FUNC_SUBTRACT ||\n    blendEquation === WebGLConstants.FUNC_REVERSE_SUBTRACT ||\n    blendEquation === WebGLConstants.MIN ||\n    blendEquation === WebGLConstants.MAX\n  );\n}\n\nfunction validateBlendFunction(blendFunction) {\n  return (\n    blendFunction === WebGLConstants.ZERO ||\n    blendFunction === WebGLConstants.ONE ||\n    blendFunction === WebGLConstants.SRC_COLOR ||\n    blendFunction === WebGLConstants.ONE_MINUS_SRC_COLOR ||\n    blendFunction === WebGLConstants.DST_COLOR ||\n    blendFunction === WebGLConstants.ONE_MINUS_DST_COLOR ||\n    blendFunction === WebGLConstants.SRC_ALPHA ||\n    blendFunction === WebGLConstants.ONE_MINUS_SRC_ALPHA ||\n    blendFunction === WebGLConstants.DST_ALPHA ||\n    blendFunction === WebGLConstants.ONE_MINUS_DST_ALPHA ||\n    blendFunction === WebGLConstants.CONSTANT_COLOR ||\n    blendFunction === WebGLConstants.ONE_MINUS_CONSTANT_COLOR ||\n    blendFunction === WebGLConstants.CONSTANT_ALPHA ||\n    blendFunction === WebGLConstants.ONE_MINUS_CONSTANT_ALPHA ||\n    blendFunction === WebGLConstants.SRC_ALPHA_SATURATE\n  );\n}\n\nfunction validateCullFace(cullFace) {\n  return (\n    cullFace === WebGLConstants.FRONT ||\n    cullFace === WebGLConstants.BACK ||\n    cullFace === WebGLConstants.FRONT_AND_BACK\n  );\n}\n\nfunction validateDepthFunction(depthFunction) {\n  return (\n    depthFunction === WebGLConstants.NEVER ||\n    depthFunction === WebGLConstants.LESS ||\n    depthFunction === WebGLConstants.EQUAL ||\n    depthFunction === WebGLConstants.LEQUAL ||\n    depthFunction === WebGLConstants.GREATER ||\n    depthFunction === WebGLConstants.NOTEQUAL ||\n    depthFunction === WebGLConstants.GEQUAL ||\n    depthFunction === WebGLConstants.ALWAYS\n  );\n}\n\nfunction validateStencilFunction(stencilFunction) {\n  return (\n    stencilFunction === WebGLConstants.NEVER ||\n    stencilFunction === WebGLConstants.LESS ||\n    stencilFunction === WebGLConstants.EQUAL ||\n    stencilFunction === WebGLConstants.LEQUAL ||\n    stencilFunction === WebGLConstants.GREATER ||\n    stencilFunction === WebGLConstants.NOTEQUAL ||\n    stencilFunction === WebGLConstants.GEQUAL ||\n    stencilFunction === WebGLConstants.ALWAYS\n  );\n}\n\nfunction validateStencilOperation(stencilOperation) {\n  return (\n    stencilOperation === WebGLConstants.ZERO ||\n    stencilOperation === WebGLConstants.KEEP ||\n    stencilOperation === WebGLConstants.REPLACE ||\n    stencilOperation === WebGLConstants.INCR ||\n    stencilOperation === WebGLConstants.DECR ||\n    stencilOperation === WebGLConstants.INVERT ||\n    stencilOperation === WebGLConstants.INCR_WRAP ||\n    stencilOperation === WebGLConstants.DECR_WRAP\n  );\n}\n\n/**\n * @private\n */\nfunction RenderState(renderState) {\n  const rs = renderState ?? Frozen.EMPTY_OBJECT;\n  const cull = rs.cull ?? Frozen.EMPTY_OBJECT;\n  const polygonOffset = rs.polygonOffset ?? Frozen.EMPTY_OBJECT;\n  const scissorTest = rs.scissorTest ?? Frozen.EMPTY_OBJECT;\n  const scissorTestRectangle = scissorTest.rectangle ?? Frozen.EMPTY_OBJECT;\n  const depthRange = rs.depthRange ?? Frozen.EMPTY_OBJECT;\n  const depthTest = rs.depthTest ?? Frozen.EMPTY_OBJECT;\n  const colorMask = rs.colorMask ?? Frozen.EMPTY_OBJECT;\n  const blending = rs.blending ?? Frozen.EMPTY_OBJECT;\n  const blendingColor = blending.color ?? Frozen.EMPTY_OBJECT;\n  const stencilTest = rs.stencilTest ?? Frozen.EMPTY_OBJECT;\n  const stencilTestFrontOperation =\n    stencilTest.frontOperation ?? Frozen.EMPTY_OBJECT;\n  const stencilTestBackOperation =\n    stencilTest.backOperation ?? Frozen.EMPTY_OBJECT;\n  const sampleCoverage = rs.sampleCoverage ?? Frozen.EMPTY_OBJECT;\n  const viewport = rs.viewport;\n\n  this.frontFace = rs.frontFace ?? WindingOrder.COUNTER_CLOCKWISE;\n  this.cull = {\n    enabled: cull.enabled ?? false,\n    face: cull.face ?? WebGLConstants.BACK,\n  };\n  this.lineWidth = rs.lineWidth ?? 1.0;\n  this.polygonOffset = {\n    enabled: polygonOffset.enabled ?? false,\n    factor: polygonOffset.factor ?? 0,\n    units: polygonOffset.units ?? 0,\n  };\n  this.scissorTest = {\n    enabled: scissorTest.enabled ?? false,\n    rectangle: BoundingRectangle.clone(scissorTestRectangle),\n  };\n  this.depthRange = {\n    near: depthRange.near ?? 0,\n    far: depthRange.far ?? 1,\n  };\n  this.depthTest = {\n    enabled: depthTest.enabled ?? false,\n    func: depthTest.func ?? WebGLConstants.LESS, // func, because function is a JavaScript keyword\n  };\n  this.colorMask = {\n    red: colorMask.red ?? true,\n    green: colorMask.green ?? true,\n    blue: colorMask.blue ?? true,\n    alpha: colorMask.alpha ?? true,\n  };\n  this.depthMask = rs.depthMask ?? true;\n  this.stencilMask = rs.stencilMask ?? ~0;\n  this.blending = {\n    enabled: blending.enabled ?? false,\n    color: new Color(\n      blendingColor.red ?? 0.0,\n      blendingColor.green ?? 0.0,\n      blendingColor.blue ?? 0.0,\n      blendingColor.alpha ?? 0.0,\n    ),\n    equationRgb: blending.equationRgb ?? WebGLConstants.FUNC_ADD,\n    equationAlpha: blending.equationAlpha ?? WebGLConstants.FUNC_ADD,\n    functionSourceRgb: blending.functionSourceRgb ?? WebGLConstants.ONE,\n    functionSourceAlpha: blending.functionSourceAlpha ?? WebGLConstants.ONE,\n    functionDestinationRgb:\n      blending.functionDestinationRgb ?? WebGLConstants.ZERO,\n    functionDestinationAlpha:\n      blending.functionDestinationAlpha ?? WebGLConstants.ZERO,\n  };\n  this.stencilTest = {\n    enabled: stencilTest.enabled ?? false,\n    frontFunction: stencilTest.frontFunction ?? WebGLConstants.ALWAYS,\n    backFunction: stencilTest.backFunction ?? WebGLConstants.ALWAYS,\n    reference: stencilTest.reference ?? 0,\n    mask: stencilTest.mask ?? ~0,\n    frontOperation: {\n      fail: stencilTestFrontOperation.fail ?? WebGLConstants.KEEP,\n      zFail: stencilTestFrontOperation.zFail ?? WebGLConstants.KEEP,\n      zPass: stencilTestFrontOperation.zPass ?? WebGLConstants.KEEP,\n    },\n    backOperation: {\n      fail: stencilTestBackOperation.fail ?? WebGLConstants.KEEP,\n      zFail: stencilTestBackOperation.zFail ?? WebGLConstants.KEEP,\n      zPass: stencilTestBackOperation.zPass ?? WebGLConstants.KEEP,\n    },\n  };\n  this.sampleCoverage = {\n    enabled: sampleCoverage.enabled ?? false,\n    value: sampleCoverage.value ?? 1.0,\n    invert: sampleCoverage.invert ?? false,\n  };\n  this.viewport = defined(viewport)\n    ? new BoundingRectangle(\n        viewport.x,\n        viewport.y,\n        viewport.width,\n        viewport.height,\n      )\n    : undefined;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    this.lineWidth < ContextLimits.minimumAliasedLineWidth ||\n    this.lineWidth > ContextLimits.maximumAliasedLineWidth\n  ) {\n    throw new DeveloperError(\n      \"renderState.lineWidth is out of range.  Check minimumAliasedLineWidth and maximumAliasedLineWidth.\",\n    );\n  }\n  if (!WindingOrder.validate(this.frontFace)) {\n    throw new DeveloperError(\"Invalid renderState.frontFace.\");\n  }\n  if (!validateCullFace(this.cull.face)) {\n    throw new DeveloperError(\"Invalid renderState.cull.face.\");\n  }\n  if (\n    this.scissorTest.rectangle.width < 0 ||\n    this.scissorTest.rectangle.height < 0\n  ) {\n    throw new DeveloperError(\n      \"renderState.scissorTest.rectangle.width and renderState.scissorTest.rectangle.height must be greater than or equal to zero.\",\n    );\n  }\n  if (this.depthRange.near > this.depthRange.far) {\n    // WebGL specific - not an error in GL ES\n    throw new DeveloperError(\n      \"renderState.depthRange.near can not be greater than renderState.depthRange.far.\",\n    );\n  }\n  if (this.depthRange.near < 0) {\n    // Would be clamped by GL\n    throw new DeveloperError(\n      \"renderState.depthRange.near must be greater than or equal to zero.\",\n    );\n  }\n  if (this.depthRange.far > 1) {\n    // Would be clamped by GL\n    throw new DeveloperError(\n      \"renderState.depthRange.far must be less than or equal to one.\",\n    );\n  }\n  if (!validateDepthFunction(this.depthTest.func)) {\n    throw new DeveloperError(\"Invalid renderState.depthTest.func.\");\n  }\n  if (\n    this.blending.color.red < 0.0 ||\n    this.blending.color.red > 1.0 ||\n    this.blending.color.green < 0.0 ||\n    this.blending.color.green > 1.0 ||\n    this.blending.color.blue < 0.0 ||\n    this.blending.color.blue > 1.0 ||\n    this.blending.color.alpha < 0.0 ||\n    this.blending.color.alpha > 1.0\n  ) {\n    // Would be clamped by GL\n    throw new DeveloperError(\n      \"renderState.blending.color components must be greater than or equal to zero and less than or equal to one.\",\n    );\n  }\n  if (!validateBlendEquation(this.blending.equationRgb)) {\n    throw new DeveloperError(\"Invalid renderState.blending.equationRgb.\");\n  }\n  if (!validateBlendEquation(this.blending.equationAlpha)) {\n    throw new DeveloperError(\"Invalid renderState.blending.equationAlpha.\");\n  }\n  if (!validateBlendFunction(this.blending.functionSourceRgb)) {\n    throw new DeveloperError(\"Invalid renderState.blending.functionSourceRgb.\");\n  }\n  if (!validateBlendFunction(this.blending.functionSourceAlpha)) {\n    throw new DeveloperError(\n      \"Invalid renderState.blending.functionSourceAlpha.\",\n    );\n  }\n  if (!validateBlendFunction(this.blending.functionDestinationRgb)) {\n    throw new DeveloperError(\n      \"Invalid renderState.blending.functionDestinationRgb.\",\n    );\n  }\n  if (!validateBlendFunction(this.blending.functionDestinationAlpha)) {\n    throw new DeveloperError(\n      \"Invalid renderState.blending.functionDestinationAlpha.\",\n    );\n  }\n  if (!validateStencilFunction(this.stencilTest.frontFunction)) {\n    throw new DeveloperError(\"Invalid renderState.stencilTest.frontFunction.\");\n  }\n  if (!validateStencilFunction(this.stencilTest.backFunction)) {\n    throw new DeveloperError(\"Invalid renderState.stencilTest.backFunction.\");\n  }\n  if (!validateStencilOperation(this.stencilTest.frontOperation.fail)) {\n    throw new DeveloperError(\n      \"Invalid renderState.stencilTest.frontOperation.fail.\",\n    );\n  }\n  if (!validateStencilOperation(this.stencilTest.frontOperation.zFail)) {\n    throw new DeveloperError(\n      \"Invalid renderState.stencilTest.frontOperation.zFail.\",\n    );\n  }\n  if (!validateStencilOperation(this.stencilTest.frontOperation.zPass)) {\n    throw new DeveloperError(\n      \"Invalid renderState.stencilTest.frontOperation.zPass.\",\n    );\n  }\n  if (!validateStencilOperation(this.stencilTest.backOperation.fail)) {\n    throw new DeveloperError(\n      \"Invalid renderState.stencilTest.backOperation.fail.\",\n    );\n  }\n  if (!validateStencilOperation(this.stencilTest.backOperation.zFail)) {\n    throw new DeveloperError(\n      \"Invalid renderState.stencilTest.backOperation.zFail.\",\n    );\n  }\n  if (!validateStencilOperation(this.stencilTest.backOperation.zPass)) {\n    throw new DeveloperError(\n      \"Invalid renderState.stencilTest.backOperation.zPass.\",\n    );\n  }\n\n  if (defined(this.viewport)) {\n    if (this.viewport.width < 0) {\n      throw new DeveloperError(\n        \"renderState.viewport.width must be greater than or equal to zero.\",\n      );\n    }\n    if (this.viewport.height < 0) {\n      throw new DeveloperError(\n        \"renderState.viewport.height must be greater than or equal to zero.\",\n      );\n    }\n\n    if (this.viewport.width > ContextLimits.maximumViewportWidth) {\n      throw new DeveloperError(\n        `renderState.viewport.width must be less than or equal to the maximum viewport width (${ContextLimits.maximumViewportWidth.toString()}).  Check maximumViewportWidth.`,\n      );\n    }\n    if (this.viewport.height > ContextLimits.maximumViewportHeight) {\n      throw new DeveloperError(\n        `renderState.viewport.height must be less than or equal to the maximum viewport height (${ContextLimits.maximumViewportHeight.toString()}).  Check maximumViewportHeight.`,\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  this.id = 0;\n  this._applyFunctions = [];\n}\n\nlet nextRenderStateId = 0;\nlet renderStateCache = {};\n\n/**\n * Validates and then finds or creates an immutable render state, which defines the pipeline\n * state for a {@link DrawCommand} or {@link ClearCommand}.  All inputs states are optional.  Omitted states\n * use the defaults shown in the example below.\n *\n * @param {object} [renderState] The states defining the render state as shown in the example below.\n *\n * @exception {RuntimeError} renderState.lineWidth is out of range.\n * @exception {DeveloperError} Invalid renderState.frontFace.\n * @exception {DeveloperError} Invalid renderState.cull.face.\n * @exception {DeveloperError} scissorTest.rectangle.width and scissorTest.rectangle.height must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.depthRange.near can't be greater than renderState.depthRange.far.\n * @exception {DeveloperError} renderState.depthRange.near must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.depthRange.far must be less than or equal to zero.\n * @exception {DeveloperError} Invalid renderState.depthTest.func.\n * @exception {DeveloperError} renderState.blending.color components must be greater than or equal to zero and less than or equal to one\n * @exception {DeveloperError} Invalid renderState.blending.equationRgb.\n * @exception {DeveloperError} Invalid renderState.blending.equationAlpha.\n * @exception {DeveloperError} Invalid renderState.blending.functionSourceRgb.\n * @exception {DeveloperError} Invalid renderState.blending.functionSourceAlpha.\n * @exception {DeveloperError} Invalid renderState.blending.functionDestinationRgb.\n * @exception {DeveloperError} Invalid renderState.blending.functionDestinationAlpha.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontFunction.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backFunction.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontOperation.fail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontOperation.zFail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.frontOperation.zPass.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backOperation.fail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backOperation.zFail.\n * @exception {DeveloperError} Invalid renderState.stencilTest.backOperation.zPass.\n * @exception {DeveloperError} renderState.viewport.width must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.viewport.width must be less than or equal to the maximum viewport width.\n * @exception {DeveloperError} renderState.viewport.height must be greater than or equal to zero.\n * @exception {DeveloperError} renderState.viewport.height must be less than or equal to the maximum viewport height.\n *\n *\n * @example\n * const defaults = {\n *     frontFace : WindingOrder.COUNTER_CLOCKWISE,\n *     cull : {\n *         enabled : false,\n *         face : CullFace.BACK\n *     },\n *     lineWidth : 1,\n *     polygonOffset : {\n *         enabled : false,\n *         factor : 0,\n *         units : 0\n *     },\n *     scissorTest : {\n *         enabled : false,\n *         rectangle : {\n *             x : 0,\n *             y : 0,\n *             width : 0,\n *             height : 0\n *         }\n *     },\n *     depthRange : {\n *         near : 0,\n *         far : 1\n *     },\n *     depthTest : {\n *         enabled : false,\n *         func : DepthFunction.LESS\n *      },\n *     colorMask : {\n *         red : true,\n *         green : true,\n *         blue : true,\n *         alpha : true\n *     },\n *     depthMask : true,\n *     stencilMask : ~0,\n *     blending : {\n *         enabled : false,\n *         color : {\n *             red : 0.0,\n *             green : 0.0,\n *             blue : 0.0,\n *             alpha : 0.0\n *         },\n *         equationRgb : BlendEquation.ADD,\n *         equationAlpha : BlendEquation.ADD,\n *         functionSourceRgb : BlendFunction.ONE,\n *         functionSourceAlpha : BlendFunction.ONE,\n *         functionDestinationRgb : BlendFunction.ZERO,\n *         functionDestinationAlpha : BlendFunction.ZERO\n *     },\n *     stencilTest : {\n *         enabled : false,\n *         frontFunction : StencilFunction.ALWAYS,\n *         backFunction : StencilFunction.ALWAYS,\n *         reference : 0,\n *         mask : ~0,\n *         frontOperation : {\n *             fail : StencilOperation.KEEP,\n *             zFail : StencilOperation.KEEP,\n *             zPass : StencilOperation.KEEP\n *         },\n *         backOperation : {\n *             fail : StencilOperation.KEEP,\n *             zFail : StencilOperation.KEEP,\n *             zPass : StencilOperation.KEEP\n *         }\n *     },\n *     sampleCoverage : {\n *         enabled : false,\n *         value : 1.0,\n *         invert : false\n *      }\n * };\n *\n * const rs = RenderState.fromCache(defaults);\n *\n * @see DrawCommand\n * @see ClearCommand\n *\n * @private\n */\nRenderState.fromCache = function (renderState) {\n  const partialKey = JSON.stringify(renderState);\n  let cachedState = renderStateCache[partialKey];\n  if (defined(cachedState)) {\n    ++cachedState.referenceCount;\n    return cachedState.state;\n  }\n\n  // Cache miss.  Fully define render state and try again.\n  let states = new RenderState(renderState);\n  const fullKey = JSON.stringify(states);\n  cachedState = renderStateCache[fullKey];\n  if (!defined(cachedState)) {\n    states.id = nextRenderStateId++;\n    //>>includeStart('debug', pragmas.debug);\n    states = freezeRenderState(states);\n    //>>includeEnd('debug');\n    cachedState = {\n      referenceCount: 0,\n      state: states,\n    };\n\n    // Cache full render state.  Multiple partially defined render states may map to this.\n    renderStateCache[fullKey] = cachedState;\n  }\n\n  ++cachedState.referenceCount;\n\n  // Cache partial render state so we can skip validation on a cache hit for a partially defined render state\n  renderStateCache[partialKey] = {\n    referenceCount: 1,\n    state: cachedState.state,\n  };\n\n  return cachedState.state;\n};\n\n/**\n * @private\n */\nRenderState.removeFromCache = function (renderState) {\n  const states = new RenderState(renderState);\n  const fullKey = JSON.stringify(states);\n  const fullCachedState = renderStateCache[fullKey];\n\n  // decrement partial key reference count\n  const partialKey = JSON.stringify(renderState);\n  const cachedState = renderStateCache[partialKey];\n  if (defined(cachedState)) {\n    --cachedState.referenceCount;\n\n    if (cachedState.referenceCount === 0) {\n      // remove partial key\n      delete renderStateCache[partialKey];\n\n      // decrement full key reference count\n      if (defined(fullCachedState)) {\n        --fullCachedState.referenceCount;\n      }\n    }\n  }\n\n  // remove full key if reference count is zero\n  if (defined(fullCachedState) && fullCachedState.referenceCount === 0) {\n    delete renderStateCache[fullKey];\n  }\n};\n\n/**\n * This function is for testing purposes only.\n * @private\n */\nRenderState.getCache = function () {\n  return renderStateCache;\n};\n\n/**\n * This function is for testing purposes only.\n * @private\n */\nRenderState.clearCache = function () {\n  renderStateCache = {};\n};\n\nfunction enableOrDisable(gl, glEnum, enable) {\n  if (enable) {\n    gl.enable(glEnum);\n  } else {\n    gl.disable(glEnum);\n  }\n}\n\nfunction applyFrontFace(gl, renderState) {\n  gl.frontFace(renderState.frontFace);\n}\n\nfunction applyCull(gl, renderState) {\n  const cull = renderState.cull;\n  const enabled = cull.enabled;\n\n  enableOrDisable(gl, gl.CULL_FACE, enabled);\n\n  if (enabled) {\n    gl.cullFace(cull.face);\n  }\n}\n\nfunction applyLineWidth(gl, renderState) {\n  gl.lineWidth(renderState.lineWidth);\n}\n\nfunction applyPolygonOffset(gl, renderState) {\n  const polygonOffset = renderState.polygonOffset;\n  const enabled = polygonOffset.enabled;\n\n  enableOrDisable(gl, gl.POLYGON_OFFSET_FILL, enabled);\n\n  if (enabled) {\n    gl.polygonOffset(polygonOffset.factor, polygonOffset.units);\n  }\n}\n\nfunction applyScissorTest(gl, renderState, passState) {\n  const scissorTest = renderState.scissorTest;\n  const enabled = defined(passState.scissorTest)\n    ? passState.scissorTest.enabled\n    : scissorTest.enabled;\n\n  enableOrDisable(gl, gl.SCISSOR_TEST, enabled);\n\n  if (enabled) {\n    const rectangle = defined(passState.scissorTest)\n      ? passState.scissorTest.rectangle\n      : scissorTest.rectangle;\n    gl.scissor(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n  }\n}\n\nfunction applyDepthRange(gl, renderState) {\n  const depthRange = renderState.depthRange;\n  gl.depthRange(depthRange.near, depthRange.far);\n}\n\nfunction applyDepthTest(gl, renderState) {\n  const depthTest = renderState.depthTest;\n  const enabled = depthTest.enabled;\n\n  enableOrDisable(gl, gl.DEPTH_TEST, enabled);\n\n  if (enabled) {\n    gl.depthFunc(depthTest.func);\n  }\n}\n\nfunction applyColorMask(gl, renderState) {\n  const colorMask = renderState.colorMask;\n  gl.colorMask(colorMask.red, colorMask.green, colorMask.blue, colorMask.alpha);\n}\n\nfunction applyDepthMask(gl, renderState) {\n  gl.depthMask(renderState.depthMask);\n}\n\nfunction applyStencilMask(gl, renderState) {\n  gl.stencilMask(renderState.stencilMask);\n}\n\nfunction applyBlendingColor(gl, color) {\n  gl.blendColor(color.red, color.green, color.blue, color.alpha);\n}\n\nfunction applyBlending(gl, renderState, passState) {\n  const blending = renderState.blending;\n  const enabled = defined(passState.blendingEnabled)\n    ? passState.blendingEnabled\n    : blending.enabled;\n\n  enableOrDisable(gl, gl.BLEND, enabled);\n\n  if (enabled) {\n    applyBlendingColor(gl, blending.color);\n    gl.blendEquationSeparate(blending.equationRgb, blending.equationAlpha);\n    gl.blendFuncSeparate(\n      blending.functionSourceRgb,\n      blending.functionDestinationRgb,\n      blending.functionSourceAlpha,\n      blending.functionDestinationAlpha,\n    );\n  }\n}\n\nfunction applyStencilTest(gl, renderState) {\n  const stencilTest = renderState.stencilTest;\n  const enabled = stencilTest.enabled;\n\n  enableOrDisable(gl, gl.STENCIL_TEST, enabled);\n\n  if (enabled) {\n    const frontFunction = stencilTest.frontFunction;\n    const backFunction = stencilTest.backFunction;\n    const reference = stencilTest.reference;\n    const mask = stencilTest.mask;\n\n    // Section 6.8 of the WebGL spec requires the reference and masks to be the same for\n    // front- and back-face tests.  This call prevents invalid operation errors when calling\n    // stencilFuncSeparate on Firefox.  Perhaps they should delay validation to avoid requiring this.\n    gl.stencilFunc(frontFunction, reference, mask);\n    gl.stencilFuncSeparate(gl.BACK, backFunction, reference, mask);\n    gl.stencilFuncSeparate(gl.FRONT, frontFunction, reference, mask);\n\n    const frontOperation = stencilTest.frontOperation;\n    const frontOperationFail = frontOperation.fail;\n    const frontOperationZFail = frontOperation.zFail;\n    const frontOperationZPass = frontOperation.zPass;\n\n    gl.stencilOpSeparate(\n      gl.FRONT,\n      frontOperationFail,\n      frontOperationZFail,\n      frontOperationZPass,\n    );\n\n    const backOperation = stencilTest.backOperation;\n    const backOperationFail = backOperation.fail;\n    const backOperationZFail = backOperation.zFail;\n    const backOperationZPass = backOperation.zPass;\n\n    gl.stencilOpSeparate(\n      gl.BACK,\n      backOperationFail,\n      backOperationZFail,\n      backOperationZPass,\n    );\n  }\n}\n\nfunction applySampleCoverage(gl, renderState) {\n  const sampleCoverage = renderState.sampleCoverage;\n  const enabled = sampleCoverage.enabled;\n\n  enableOrDisable(gl, gl.SAMPLE_COVERAGE, enabled);\n\n  if (enabled) {\n    gl.sampleCoverage(sampleCoverage.value, sampleCoverage.invert);\n  }\n}\n\nconst scratchViewport = new BoundingRectangle();\n\nfunction applyViewport(gl, renderState, passState) {\n  let viewport = renderState.viewport ?? passState.viewport;\n  if (!defined(viewport)) {\n    viewport = scratchViewport;\n    viewport.width = passState.context.drawingBufferWidth;\n    viewport.height = passState.context.drawingBufferHeight;\n  }\n\n  passState.context.uniformState.viewport = viewport;\n  gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);\n}\n\nRenderState.apply = function (gl, renderState, passState) {\n  applyFrontFace(gl, renderState);\n  applyCull(gl, renderState);\n  applyLineWidth(gl, renderState);\n  applyPolygonOffset(gl, renderState);\n  applyDepthRange(gl, renderState);\n  applyDepthTest(gl, renderState);\n  applyColorMask(gl, renderState);\n  applyDepthMask(gl, renderState);\n  applyStencilMask(gl, renderState);\n  applyStencilTest(gl, renderState);\n  applySampleCoverage(gl, renderState);\n  applyScissorTest(gl, renderState, passState);\n  applyBlending(gl, renderState, passState);\n  applyViewport(gl, renderState, passState);\n};\n\nfunction createFuncs(previousState, nextState) {\n  const funcs = [];\n\n  if (previousState.frontFace !== nextState.frontFace) {\n    funcs.push(applyFrontFace);\n  }\n\n  if (\n    previousState.cull.enabled !== nextState.cull.enabled ||\n    previousState.cull.face !== nextState.cull.face\n  ) {\n    funcs.push(applyCull);\n  }\n\n  if (previousState.lineWidth !== nextState.lineWidth) {\n    funcs.push(applyLineWidth);\n  }\n\n  if (\n    previousState.polygonOffset.enabled !== nextState.polygonOffset.enabled ||\n    previousState.polygonOffset.factor !== nextState.polygonOffset.factor ||\n    previousState.polygonOffset.units !== nextState.polygonOffset.units\n  ) {\n    funcs.push(applyPolygonOffset);\n  }\n\n  if (\n    previousState.depthRange.near !== nextState.depthRange.near ||\n    previousState.depthRange.far !== nextState.depthRange.far\n  ) {\n    funcs.push(applyDepthRange);\n  }\n\n  if (\n    previousState.depthTest.enabled !== nextState.depthTest.enabled ||\n    previousState.depthTest.func !== nextState.depthTest.func\n  ) {\n    funcs.push(applyDepthTest);\n  }\n\n  if (\n    previousState.colorMask.red !== nextState.colorMask.red ||\n    previousState.colorMask.green !== nextState.colorMask.green ||\n    previousState.colorMask.blue !== nextState.colorMask.blue ||\n    previousState.colorMask.alpha !== nextState.colorMask.alpha\n  ) {\n    funcs.push(applyColorMask);\n  }\n\n  if (previousState.depthMask !== nextState.depthMask) {\n    funcs.push(applyDepthMask);\n  }\n\n  if (previousState.stencilMask !== nextState.stencilMask) {\n    funcs.push(applyStencilMask);\n  }\n\n  if (\n    previousState.stencilTest.enabled !== nextState.stencilTest.enabled ||\n    previousState.stencilTest.frontFunction !==\n      nextState.stencilTest.frontFunction ||\n    previousState.stencilTest.backFunction !==\n      nextState.stencilTest.backFunction ||\n    previousState.stencilTest.reference !== nextState.stencilTest.reference ||\n    previousState.stencilTest.mask !== nextState.stencilTest.mask ||\n    previousState.stencilTest.frontOperation.fail !==\n      nextState.stencilTest.frontOperation.fail ||\n    previousState.stencilTest.frontOperation.zFail !==\n      nextState.stencilTest.frontOperation.zFail ||\n    previousState.stencilTest.backOperation.fail !==\n      nextState.stencilTest.backOperation.fail ||\n    previousState.stencilTest.backOperation.zFail !==\n      nextState.stencilTest.backOperation.zFail ||\n    previousState.stencilTest.backOperation.zPass !==\n      nextState.stencilTest.backOperation.zPass\n  ) {\n    funcs.push(applyStencilTest);\n  }\n\n  if (\n    previousState.sampleCoverage.enabled !== nextState.sampleCoverage.enabled ||\n    previousState.sampleCoverage.value !== nextState.sampleCoverage.value ||\n    previousState.sampleCoverage.invert !== nextState.sampleCoverage.invert\n  ) {\n    funcs.push(applySampleCoverage);\n  }\n\n  return funcs;\n}\n\nRenderState.partialApply = function (\n  gl,\n  previousRenderState,\n  renderState,\n  previousPassState,\n  passState,\n  clear,\n) {\n  if (previousRenderState !== renderState) {\n    // When a new render state is applied, instead of making WebGL calls for all the states or first\n    // comparing the states one-by-one with the previous state (basically a linear search), we take\n    // advantage of RenderState's immutability, and store a dynamically populated sparse data structure\n    // containing functions that make the minimum number of WebGL calls when transitioning from one state\n    // to the other.  In practice, this works well since state-to-state transitions generally only require a\n    // few WebGL calls, especially if commands are stored by state.\n    let funcs = renderState._applyFunctions[previousRenderState.id];\n    if (!defined(funcs)) {\n      funcs = createFuncs(previousRenderState, renderState);\n      renderState._applyFunctions[previousRenderState.id] = funcs;\n    }\n\n    const len = funcs.length;\n    for (let i = 0; i < len; ++i) {\n      funcs[i](gl, renderState);\n    }\n  }\n\n  const previousScissorTest = defined(previousPassState.scissorTest)\n    ? previousPassState.scissorTest\n    : previousRenderState.scissorTest;\n  const scissorTest = defined(passState.scissorTest)\n    ? passState.scissorTest\n    : renderState.scissorTest;\n\n  // Our scissor rectangle can get out of sync with the GL scissor rectangle on clears.\n  // Seems to be a problem only on ANGLE. See https://github.com/CesiumGS/cesium/issues/2994\n  if (previousScissorTest !== scissorTest || clear) {\n    applyScissorTest(gl, renderState, passState);\n  }\n\n  const previousBlendingEnabled = defined(previousPassState.blendingEnabled)\n    ? previousPassState.blendingEnabled\n    : previousRenderState.blending.enabled;\n  const blendingEnabled = defined(passState.blendingEnabled)\n    ? passState.blendingEnabled\n    : renderState.blending.enabled;\n  if (\n    previousBlendingEnabled !== blendingEnabled ||\n    (blendingEnabled && previousRenderState.blending !== renderState.blending)\n  ) {\n    applyBlending(gl, renderState, passState);\n  }\n\n  if (\n    previousRenderState !== renderState ||\n    previousPassState !== passState ||\n    previousPassState.context !== passState.context\n  ) {\n    applyViewport(gl, renderState, passState);\n  }\n};\n\nRenderState.getState = function (renderState) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(renderState)) {\n    throw new DeveloperError(\"renderState is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return {\n    frontFace: renderState.frontFace,\n    cull: {\n      enabled: renderState.cull.enabled,\n      face: renderState.cull.face,\n    },\n    lineWidth: renderState.lineWidth,\n    polygonOffset: {\n      enabled: renderState.polygonOffset.enabled,\n      factor: renderState.polygonOffset.factor,\n      units: renderState.polygonOffset.units,\n    },\n    scissorTest: {\n      enabled: renderState.scissorTest.enabled,\n      rectangle: BoundingRectangle.clone(renderState.scissorTest.rectangle),\n    },\n    depthRange: {\n      near: renderState.depthRange.near,\n      far: renderState.depthRange.far,\n    },\n    depthTest: {\n      enabled: renderState.depthTest.enabled,\n      func: renderState.depthTest.func,\n    },\n    colorMask: {\n      red: renderState.colorMask.red,\n      green: renderState.colorMask.green,\n      blue: renderState.colorMask.blue,\n      alpha: renderState.colorMask.alpha,\n    },\n    depthMask: renderState.depthMask,\n    stencilMask: renderState.stencilMask,\n    blending: {\n      enabled: renderState.blending.enabled,\n      color: Color.clone(renderState.blending.color),\n      equationRgb: renderState.blending.equationRgb,\n      equationAlpha: renderState.blending.equationAlpha,\n      functionSourceRgb: renderState.blending.functionSourceRgb,\n      functionSourceAlpha: renderState.blending.functionSourceAlpha,\n      functionDestinationRgb: renderState.blending.functionDestinationRgb,\n      functionDestinationAlpha: renderState.blending.functionDestinationAlpha,\n    },\n    stencilTest: {\n      enabled: renderState.stencilTest.enabled,\n      frontFunction: renderState.stencilTest.frontFunction,\n      backFunction: renderState.stencilTest.backFunction,\n      reference: renderState.stencilTest.reference,\n      mask: renderState.stencilTest.mask,\n      frontOperation: {\n        fail: renderState.stencilTest.frontOperation.fail,\n        zFail: renderState.stencilTest.frontOperation.zFail,\n        zPass: renderState.stencilTest.frontOperation.zPass,\n      },\n      backOperation: {\n        fail: renderState.stencilTest.backOperation.fail,\n        zFail: renderState.stencilTest.backOperation.zFail,\n        zPass: renderState.stencilTest.backOperation.zPass,\n      },\n    },\n    sampleCoverage: {\n      enabled: renderState.sampleCoverage.enabled,\n      value: renderState.sampleCoverage.value,\n      invert: renderState.sampleCoverage.invert,\n    },\n    viewport: defined(renderState.viewport)\n      ? BoundingRectangle.clone(renderState.viewport)\n      : undefined,\n  };\n};\nexport default RenderState;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport RenderbufferFormat from \"./RenderbufferFormat.js\";\n\n/**\n * @private\n */\nfunction Renderbuffer(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  const context = options.context;\n  const gl = context._gl;\n  const maximumRenderbufferSize = ContextLimits.maximumRenderbufferSize;\n\n  const format = options.format ?? RenderbufferFormat.RGBA4;\n  const width = defined(options.width)\n    ? options.width\n    : context.drawingBufferWidth;\n  const height = defined(options.height)\n    ? options.height\n    : context.drawingBufferHeight;\n  const numSamples = options.numSamples ?? 1;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!RenderbufferFormat.validate(format)) {\n    throw new DeveloperError(\"Invalid format.\");\n  }\n\n  Check.typeOf.number.greaterThan(\"width\", width, 0);\n\n  if (width > maximumRenderbufferSize) {\n    throw new DeveloperError(\n      `Width must be less than or equal to the maximum renderbuffer size (${maximumRenderbufferSize}).  Check maximumRenderbufferSize.`,\n    );\n  }\n\n  Check.typeOf.number.greaterThan(\"height\", height, 0);\n\n  if (height > maximumRenderbufferSize) {\n    throw new DeveloperError(\n      `Height must be less than or equal to the maximum renderbuffer size (${maximumRenderbufferSize}).  Check maximumRenderbufferSize.`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._gl = gl;\n  this._format = format;\n  this._width = width;\n  this._height = height;\n  this._renderbuffer = this._gl.createRenderbuffer();\n\n  gl.bindRenderbuffer(gl.RENDERBUFFER, this._renderbuffer);\n  if (numSamples > 1) {\n    gl.renderbufferStorageMultisample(\n      gl.RENDERBUFFER,\n      numSamples,\n      format,\n      width,\n      height,\n    );\n  } else {\n    gl.renderbufferStorage(gl.RENDERBUFFER, format, width, height);\n  }\n  gl.bindRenderbuffer(gl.RENDERBUFFER, null);\n}\n\nObject.defineProperties(Renderbuffer.prototype, {\n  format: {\n    get: function () {\n      return this._format;\n    },\n  },\n  width: {\n    get: function () {\n      return this._width;\n    },\n  },\n  height: {\n    get: function () {\n      return this._height;\n    },\n  },\n});\n\nRenderbuffer.prototype._getRenderbuffer = function () {\n  return this._renderbuffer;\n};\n\nRenderbuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nRenderbuffer.prototype.destroy = function () {\n  this._gl.deleteRenderbuffer(this._renderbuffer);\n  return destroyObject(this);\n};\nexport default Renderbuffer;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nconst RenderbufferFormat = {\n  RGBA4: WebGLConstants.RGBA4,\n  RGBA8: WebGLConstants.RGBA8,\n  RGBA16F: WebGLConstants.RGBA16F,\n  RGBA32F: WebGLConstants.RGBA32F,\n  RGB5_A1: WebGLConstants.RGB5_A1,\n  RGB565: WebGLConstants.RGB565,\n  DEPTH_COMPONENT16: WebGLConstants.DEPTH_COMPONENT16,\n  STENCIL_INDEX8: WebGLConstants.STENCIL_INDEX8,\n  DEPTH_STENCIL: WebGLConstants.DEPTH_STENCIL,\n  DEPTH24_STENCIL8: WebGLConstants.DEPTH24_STENCIL8,\n\n  validate: function (renderbufferFormat) {\n    return (\n      renderbufferFormat === RenderbufferFormat.RGBA4 ||\n      renderbufferFormat === RenderbufferFormat.RGBA8 ||\n      renderbufferFormat === RenderbufferFormat.RGBA16F ||\n      renderbufferFormat === RenderbufferFormat.RGBA32F ||\n      renderbufferFormat === RenderbufferFormat.RGB5_A1 ||\n      renderbufferFormat === RenderbufferFormat.RGB565 ||\n      renderbufferFormat === RenderbufferFormat.DEPTH_COMPONENT16 ||\n      renderbufferFormat === RenderbufferFormat.STENCIL_INDEX8 ||\n      renderbufferFormat === RenderbufferFormat.DEPTH_STENCIL ||\n      renderbufferFormat === RenderbufferFormat.DEPTH24_STENCIL8\n    );\n  },\n\n  getColorFormat: function (datatype) {\n    if (datatype === WebGLConstants.FLOAT) {\n      return RenderbufferFormat.RGBA32F;\n    } else if (datatype === WebGLConstants.HALF_FLOAT_OES) {\n      return RenderbufferFormat.RGBA16F;\n    }\n    return RenderbufferFormat.RGBA8;\n  },\n};\nexport default Object.freeze(RenderbufferFormat);\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport TextureMagnificationFilter from \"./TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"./TextureMinificationFilter.js\";\nimport TextureWrap from \"./TextureWrap.js\";\n\n/**\n * @private\n */\nfunction Sampler(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const {\n    wrapR = TextureWrap.CLAMP_TO_EDGE,\n    wrapS = TextureWrap.CLAMP_TO_EDGE,\n    wrapT = TextureWrap.CLAMP_TO_EDGE,\n    minificationFilter = TextureMinificationFilter.LINEAR,\n    magnificationFilter = TextureMagnificationFilter.LINEAR,\n    maximumAnisotropy = 1.0,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!TextureWrap.validate(wrapR)) {\n    throw new DeveloperError(\"Invalid sampler.wrapR.\");\n  }\n\n  if (!TextureWrap.validate(wrapS)) {\n    throw new DeveloperError(\"Invalid sampler.wrapS.\");\n  }\n\n  if (!TextureWrap.validate(wrapT)) {\n    throw new DeveloperError(\"Invalid sampler.wrapT.\");\n  }\n\n  if (!TextureMinificationFilter.validate(minificationFilter)) {\n    throw new DeveloperError(\"Invalid sampler.minificationFilter.\");\n  }\n\n  if (!TextureMagnificationFilter.validate(magnificationFilter)) {\n    throw new DeveloperError(\"Invalid sampler.magnificationFilter.\");\n  }\n\n  Check.typeOf.number.greaterThanOrEquals(\n    \"maximumAnisotropy\",\n    maximumAnisotropy,\n    1.0,\n  );\n  //>>includeEnd('debug');\n\n  this._wrapR = wrapR;\n  this._wrapS = wrapS;\n  this._wrapT = wrapT;\n  this._minificationFilter = minificationFilter;\n  this._magnificationFilter = magnificationFilter;\n  this._maximumAnisotropy = maximumAnisotropy;\n}\n\nObject.defineProperties(Sampler.prototype, {\n  wrapR: {\n    get: function () {\n      return this._wrapR;\n    },\n  },\n  wrapS: {\n    get: function () {\n      return this._wrapS;\n    },\n  },\n  wrapT: {\n    get: function () {\n      return this._wrapT;\n    },\n  },\n  minificationFilter: {\n    get: function () {\n      return this._minificationFilter;\n    },\n  },\n  magnificationFilter: {\n    get: function () {\n      return this._magnificationFilter;\n    },\n  },\n  maximumAnisotropy: {\n    get: function () {\n      return this._maximumAnisotropy;\n    },\n  },\n});\n\nSampler.equals = function (left, right) {\n  return (\n    left === right ||\n    (defined(left) &&\n      defined(right) &&\n      left._wrapR === right._wrapR &&\n      left._wrapS === right._wrapS &&\n      left._wrapT === right._wrapT &&\n      left._minificationFilter === right._minificationFilter &&\n      left._magnificationFilter === right._magnificationFilter &&\n      left._maximumAnisotropy === right._maximumAnisotropy)\n  );\n};\n\nSampler.NEAREST = Object.freeze(\n  new Sampler({\n    wrapR: TextureWrap.CLAMP_TO_EDGE,\n    wrapS: TextureWrap.CLAMP_TO_EDGE,\n    wrapT: TextureWrap.CLAMP_TO_EDGE,\n    minificationFilter: TextureMinificationFilter.NEAREST,\n    magnificationFilter: TextureMagnificationFilter.NEAREST,\n  }),\n);\nexport default Sampler;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport ShaderDestination from \"./ShaderDestination.js\";\nimport ShaderProgram from \"./ShaderProgram.js\";\nimport ShaderSource from \"./ShaderSource.js\";\nimport ShaderStruct from \"./ShaderStruct.js\";\nimport ShaderFunction from \"./ShaderFunction.js\";\nimport addAllToArray from \"../Core/addAllToArray.js\";\n\n/**\n * An object that makes it easier to build the text of a {@link ShaderProgram}. This tracks GLSL code for both the vertex shader and the fragment shader.\n * <p>\n * For vertex shaders, the shader builder tracks a list of <code>#defines</code>,\n * a list of attributes, a list of uniforms, and a list of shader lines. It also\n * tracks the location of each attribute so the caller can easily build the {@link VertexArray}\n * </p>\n * <p>\n * For fragment shaders, the shader builder tracks a list of <code>#defines</code>,\n * a list of attributes, a list of uniforms, and a list of shader lines.\n * </p>\n *\n * @alias ShaderBuilder\n * @constructor\n *\n * @example\n * const shaderBuilder = new ShaderBuilder();\n * shaderBuilder.addDefine(\"SOLID_COLOR\", undefined, ShaderDestination.FRAGMENT);\n * shaderBuilder.addUniform(\"vec3\", \"u_color\", ShaderDestination.FRAGMENT);\n * shaderBuilder.addVarying(\"vec3\", v_color\");\n * // These locations can be used when creating the VertexArray\n * const positionLocation = shaderBuilder.addPositionAttribute(\"vec3\", \"a_position\");\n * const colorLocation = shaderBuilder.addAttribute(\"vec3\", \"a_color\");\n * shaderBuilder.addVertexLines([\n *  \"void main()\",\n *  \"{\",\n *  \"    v_color = a_color;\",\n *  \"    gl_Position = vec4(a_position, 1.0);\",\n *  \"}\"\n * ]);\n * shaderBuilder.addFragmentLines([\n *  \"void main()\",\n *  \"{\",\n *  \"    #ifdef SOLID_COLOR\",\n *  \"    out_FragColor = vec4(u_color, 1.0);\",\n *  \"    #else\",\n *  \"    out_FragColor = vec4(v_color, 1.0);\",\n *  \"    #endif\",\n *  \"}\"\n * ]);\n * const shaderProgram = shaderBuilder.build(context);\n *\n * @private\n */\nfunction ShaderBuilder() {\n  // Some WebGL implementations require attribute 0 to always\n  // be active, so the position attribute is tracked separately\n  this._positionAttributeLine = undefined;\n  this._nextAttributeLocation = 1;\n  this._attributeLocations = {};\n  this._attributeLines = [];\n\n  // Dynamically-generated structs and functions\n  // these are dictionaries of id -> ShaderStruct or ShaderFunction respectively\n  this._structs = {};\n  this._functions = {};\n\n  this._vertexShaderParts = {\n    defineLines: [],\n    uniformLines: [],\n    shaderLines: [],\n    varyingLines: [],\n    // identifiers of structs/functions to include, listed in insertion order\n    structIds: [],\n    functionIds: [],\n  };\n  this._fragmentShaderParts = {\n    defineLines: [],\n    uniformLines: [],\n    shaderLines: [],\n    varyingLines: [],\n    // identifiers of structs/functions to include, listed in insertion order\n    structIds: [],\n    functionIds: [],\n  };\n}\n\nObject.defineProperties(ShaderBuilder.prototype, {\n  /**\n   * Get a dictionary of attribute names to the integer location in\n   * the vertex shader.\n   *\n   * @memberof ShaderBuilder.prototype\n   * @type {Object<string, number>}\n   * @readonly\n   * @private\n   */\n  attributeLocations: {\n    get: function () {\n      return this._attributeLocations;\n    },\n  },\n});\n\n/**\n * Add a <code>#define</code> macro to one or both of the shaders. These lines\n * will appear at the top of the final shader source.\n *\n * @param {string} identifier An identifier for the macro. Identifiers must use uppercase letters with underscores to be consistent with Cesium's style guide.\n * @param {string} [value] The value of the macro. If undefined, the define will not include a value. The value will be converted to GLSL code via <code>toString()</code>\n * @param {ShaderDestination} [destination=ShaderDestination.BOTH] Whether the define appears in the vertex shader, the fragment shader, or both.\n *\n * @example\n * // creates the line \"#define ENABLE_LIGHTING\" in both shaders\n * shaderBuilder.addDefine(\"ENABLE_LIGHTING\");\n * // creates the line \"#define PI 3.141592\" in the fragment shader\n * shaderBuilder.addDefine(\"PI\", 3.141593, ShaderDestination.FRAGMENT);\n */\nShaderBuilder.prototype.addDefine = function (identifier, value, destination) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"identifier\", identifier);\n  //>>includeEnd('debug');\n\n  destination = destination ?? ShaderDestination.BOTH;\n\n  // The ShaderSource created in build() will add the #define part\n  let line = identifier;\n  if (defined(value)) {\n    line += ` ${value.toString()}`;\n  }\n\n  if (ShaderDestination.includesVertexShader(destination)) {\n    this._vertexShaderParts.defineLines.push(line);\n  }\n\n  if (ShaderDestination.includesFragmentShader(destination)) {\n    this._fragmentShaderParts.defineLines.push(line);\n  }\n};\n\n/**\n * Add a new dynamically-generated struct to the shader\n * @param {string} structId A unique ID to identify this struct in {@link ShaderBuilder#addStructField}\n * @param {string} structName The name of the struct as it will appear in the shader.\n * @param {ShaderDestination} destination Whether the struct will appear in the vertex shader, the fragment shader, or both.\n *\n * @example\n * // generates the following struct in the fragment shader\n * // struct TestStruct\n * // {\n * // };\n * shaderBuilder.addStruct(\"testStructId\", \"TestStruct\", ShaderDestination.FRAGMENT);\n */\nShaderBuilder.prototype.addStruct = function (\n  structId,\n  structName,\n  destination,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"structId\", structId);\n  Check.typeOf.string(\"structName\", structName);\n  Check.typeOf.number(\"destination\", destination);\n  //>>includeEnd('debug');\n  this._structs[structId] = new ShaderStruct(structName);\n  if (ShaderDestination.includesVertexShader(destination)) {\n    this._vertexShaderParts.structIds.push(structId);\n  }\n\n  if (ShaderDestination.includesFragmentShader(destination)) {\n    this._fragmentShaderParts.structIds.push(structId);\n  }\n};\n\n/**\n * Add a field to a dynamically-generated struct.\n * @param {string} structId The ID of the struct. This must be created first with {@link ShaderBuilder#addStruct}\n * @param {string} type The GLSL type of the field\n * @param {string} identifier The identifier of the field.\n *\n * @example\n * // generates the following struct in the fragment shader\n * // struct TestStruct\n * // {\n * //    float minimum;\n * //    float maximum;\n * // };\n * shaderBuilder.addStruct(\"testStructId\", \"TestStruct\", ShaderDestination.FRAGMENT);\n * shaderBuilder.addStructField(\"testStructId\", \"float\", \"maximum\");\n * shaderBuilder.addStructField(\"testStructId\", \"float\", \"minimum\");\n */\nShaderBuilder.prototype.addStructField = function (structId, type, identifier) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"structId\", structId);\n  Check.typeOf.string(\"type\", type);\n  Check.typeOf.string(\"identifier\", identifier);\n  //>>includeEnd('debug');\n  this._structs[structId].addField(type, identifier);\n};\n\n/**\n * Add a new dynamically-generated function to the shader.\n * @param {string} functionName The name of the function. This will be used to identify the function in {@link ShaderBuilder#addFunctionLines}.\n * @param {string} signature The full signature of the function as it will appear in the shader. Do not include the curly braces.\n * @param {ShaderDestination} destination Whether the struct will appear in the vertex shader, the fragment shader, or both.\n * @example\n * // generates the following function in the vertex shader\n * // vec3 testFunction(float parameter)\n * // {\n * // }\n * shaderBuilder.addStruct(\"testFunction\", \"vec3 testFunction(float parameter)\", ShaderDestination.VERTEX);\n */\nShaderBuilder.prototype.addFunction = function (\n  functionName,\n  signature,\n  destination,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"functionName\", functionName);\n  Check.typeOf.string(\"signature\", signature);\n  Check.typeOf.number(\"destination\", destination);\n  //>>includeEnd('debug');\n  this._functions[functionName] = new ShaderFunction(signature);\n\n  if (ShaderDestination.includesVertexShader(destination)) {\n    this._vertexShaderParts.functionIds.push(functionName);\n  }\n\n  if (ShaderDestination.includesFragmentShader(destination)) {\n    this._fragmentShaderParts.functionIds.push(functionName);\n  }\n};\n\n/**\n * Add lines to a dynamically-generated function\n * @param {string} functionName The name of the function. This must be created beforehand using {@link ShaderBuilder#addFunction}\n * @param {string|string[]} lines One or more lines of GLSL code to add to the function body. Do not include any preceding or ending whitespace, but do include the semicolon for each line.\n *\n * @example\n * // generates the following function in the vertex shader\n * // vec3 testFunction(float parameter)\n * // {\n * //   float signed = 2.0 * parameter - 1.0;\n * //   return vec3(signed, 0.0, 0.0);\n * // }\n * shaderBuilder.addStruct(\"testFunction\", \"vec3 testFunction(float parameter)\", ShaderDestination.VERTEX);\n * shaderBuilder.addFunctionLines(\"testFunction\", [\n *   \"float signed = 2.0 * parameter - 1.0;\",\n *   \"return vec3(parameter);\"\n * ]);\n */\nShaderBuilder.prototype.addFunctionLines = function (functionName, lines) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"functionName\", functionName);\n  if (typeof lines !== \"string\" && !Array.isArray(lines)) {\n    throw new DeveloperError(\n      `Expected lines to be a string or an array of strings, actual value was ${lines}`,\n    );\n  }\n  //>>includeEnd('debug');\n  this._functions[functionName].addLines(lines);\n};\n\n/**\n * Add a uniform declaration to one or both of the shaders. These lines\n * will appear grouped near the top of the final shader source.\n *\n * @param {string} type The GLSL type of the uniform.\n * @param {string} identifier An identifier for the uniform. Identifiers must begin with <code>u_</code> to be consistent with Cesium's style guide.\n * @param {ShaderDestination} [destination=ShaderDestination.BOTH] Whether the uniform appears in the vertex shader, the fragment shader, or both.\n *\n * @example\n * // creates the line \"uniform vec3 u_resolution;\"\n * shaderBuilder.addUniform(\"vec3\", \"u_resolution\", ShaderDestination.FRAGMENT);\n * // creates the line \"uniform float u_time;\" in both shaders\n * shaderBuilder.addUniform(\"float\", \"u_time\", ShaderDestination.BOTH);\n */\nShaderBuilder.prototype.addUniform = function (type, identifier, destination) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  Check.typeOf.string(\"identifier\", identifier);\n  //>>includeEnd('debug');\n\n  destination = destination ?? ShaderDestination.BOTH;\n  const line = `uniform ${type} ${identifier};`;\n\n  if (ShaderDestination.includesVertexShader(destination)) {\n    this._vertexShaderParts.uniformLines.push(line);\n  }\n\n  if (ShaderDestination.includesFragmentShader(destination)) {\n    this._fragmentShaderParts.uniformLines.push(line);\n  }\n};\n\n/**\n * Add a position attribute declaration to the vertex shader. These lines\n * will appear grouped near the top of the final shader source.\n * <p>\n * Some WebGL implementations require attribute 0 to be enabled, so this is\n * reserved for the position attribute. For all other attributes, see\n * {@link ShaderBuilder#addAttribute}\n * </p>\n *\n * @param {string} type The GLSL type of the attribute\n * @param {string} identifier An identifier for the attribute. Identifiers must begin with <code>a_</code> to be consistent with Cesium's style guide.\n * @return {number} The integer location of the attribute. This location can be used when creating attributes for a {@link VertexArray}. This will always be 0.\n *\n * @example\n * // creates the line \"in vec3 a_position;\"\n * shaderBuilder.setPositionAttribute(\"vec3\", \"a_position\");\n */\nShaderBuilder.prototype.setPositionAttribute = function (type, identifier) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  Check.typeOf.string(\"identifier\", identifier);\n\n  if (defined(this._positionAttributeLine)) {\n    throw new DeveloperError(\n      \"setPositionAttribute() must be called exactly once for the attribute used for gl_Position. For other attributes, use addAttribute()\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._positionAttributeLine = `in ${type} ${identifier};`;\n\n  // Some WebGL implementations require attribute 0 to always be active, so\n  // this builder assumes the position will always go in location 0\n  this._attributeLocations[identifier] = 0;\n  return 0;\n};\n\n/**\n * Add an attribute declaration to the vertex shader. These lines\n * will appear grouped near the top of the final shader source.\n * <p>\n * Some WebGL implementations require attribute 0 to be enabled, so this is\n * reserved for the position attribute. See {@link ShaderBuilder#setPositionAttribute}\n * </p>\n *\n * @param {string} type The GLSL type of the attribute\n * @param {string} identifier An identifier for the attribute. Identifiers must begin with <code>a_</code> to be consistent with Cesium's style guide.\n * @return {number} The integer location of the attribute. This location can be used when creating attributes for a {@link VertexArray}\n *\n * @example\n * // creates the line \"in vec2 a_texCoord0;\" in the vertex shader\n * shaderBuilder.addAttribute(\"vec2\", \"a_texCoord0\");\n */\nShaderBuilder.prototype.addAttribute = function (type, identifier) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  Check.typeOf.string(\"identifier\", identifier);\n  //>>includeEnd('debug');\n\n  const line = `in ${type} ${identifier};`;\n  this._attributeLines.push(line);\n\n  const location = this._nextAttributeLocation;\n  this._attributeLocations[identifier] = location;\n\n  // Most attributes only require a single attribute location, but matrices\n  // require more.\n  this._nextAttributeLocation += getAttributeLocationCount(type);\n  return location;\n};\n\n/**\n * Add a varying declaration to both the vertex and fragment shaders.\n *\n * @param {string} type The GLSL type of the varying\n * @param {string} identifier An identifier for the varying. Identifiers must begin with <code>v_</code> to be consistent with Cesium's style guide.\n * @param {string} [qualifier] A qualifier for the varying, such as <code>flat</code>.\n *\n * @example\n * // creates the line \"in vec3 v_color;\" in the vertex shader\n * // creates the line \"out vec3 v_color;\" in the fragment shader\n * shaderBuilder.addVarying(\"vec3\", \"v_color\");\n */\nShaderBuilder.prototype.addVarying = function (type, identifier, qualifier) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  Check.typeOf.string(\"identifier\", identifier);\n  //>>includeEnd('debug');\n\n  qualifier = defined(qualifier) ? `${qualifier} ` : \"\";\n\n  const line = `${type} ${identifier};`;\n  this._vertexShaderParts.varyingLines.push(`${qualifier}out ${line}`);\n  this._fragmentShaderParts.varyingLines.push(`${qualifier}in ${line}`);\n};\n\n/**\n * Appends lines of GLSL code to the vertex shader\n *\n * @param {string|string[]} lines One or more lines to add to the end of the vertex shader source\n *\n * @example\n * shaderBuilder.addVertexLines([\n *  \"void main()\",\n *  \"{\",\n *  \"    v_color = a_color;\",\n *  \"    gl_Position = vec4(a_position, 1.0);\",\n *  \"}\"\n * ]);\n */\nShaderBuilder.prototype.addVertexLines = function (lines) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof lines !== \"string\" && !Array.isArray(lines)) {\n    throw new DeveloperError(\n      `Expected lines to be a string or an array of strings, actual value was ${lines}`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  const vertexLines = this._vertexShaderParts.shaderLines;\n  if (Array.isArray(lines)) {\n    addAllToArray(vertexLines, lines);\n  } else {\n    // Single string case\n    vertexLines.push(lines);\n  }\n};\n\n/**\n * Appends lines of GLSL code to the fragment shader\n *\n * @param {string[]} lines The lines to add to the end of the fragment shader source\n *\n * @example\n * shaderBuilder.addFragmentLines([\n *  \"void main()\",\n *  \"{\",\n *  \"    #ifdef SOLID_COLOR\",\n *  \"    out_FragColor = vec4(u_color, 1.0);\",\n *  \"    #else\",\n *  \"    out_FragColor = vec4(v_color, 1.0);\",\n *  \"    #endif\",\n *  \"}\"\n * ]);\n */\nShaderBuilder.prototype.addFragmentLines = function (lines) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof lines !== \"string\" && !Array.isArray(lines)) {\n    throw new DeveloperError(\n      `Expected lines to be a string or an array of strings, actual value was ${lines}`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  const fragmentLines = this._fragmentShaderParts.shaderLines;\n  if (Array.isArray(lines)) {\n    addAllToArray(fragmentLines, lines);\n  } else {\n    // Single string case\n    fragmentLines.push(lines);\n  }\n};\n\n/**\n * Builds the {@link ShaderProgram} from the pieces added by the other methods.\n * Call this one time at the end of modifying the shader through the other\n * methods in this class.\n *\n * @param {Context} context The context to use for creating the shader.\n * @return {ShaderProgram} A shader program to use for rendering.\n *\n * @example\n * const shaderProgram = shaderBuilder.buildShaderProgram(context);\n */\nShaderBuilder.prototype.buildShaderProgram = function (context) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"context\", context);\n  //>>includeEnd('debug');\n\n  const positionAttribute = defined(this._positionAttributeLine)\n    ? [this._positionAttributeLine]\n    : [];\n\n  const structLines = generateStructLines(this);\n  const functionLines = generateFunctionLines(this);\n\n  // Lines are joined here so the ShaderSource\n  // generates a single #line 0 directive\n  const vertexLines = positionAttribute\n    .concat(\n      this._attributeLines,\n      this._vertexShaderParts.uniformLines,\n      this._vertexShaderParts.varyingLines,\n      structLines.vertexLines,\n      functionLines.vertexLines,\n      this._vertexShaderParts.shaderLines,\n    )\n    .join(\"\\n\");\n  const vertexShaderSource = new ShaderSource({\n    defines: this._vertexShaderParts.defineLines,\n    sources: [vertexLines],\n  });\n\n  const fragmentLines = this._fragmentShaderParts.uniformLines\n    .concat(\n      this._fragmentShaderParts.varyingLines,\n      structLines.fragmentLines,\n      functionLines.fragmentLines,\n      this._fragmentShaderParts.shaderLines,\n    )\n    .join(\"\\n\");\n  const fragmentShaderSource = new ShaderSource({\n    defines: this._fragmentShaderParts.defineLines,\n    sources: [fragmentLines],\n  });\n\n  return ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vertexShaderSource,\n    fragmentShaderSource: fragmentShaderSource,\n    attributeLocations: this._attributeLocations,\n  });\n};\n\nShaderBuilder.prototype.clone = function () {\n  return clone(this, true);\n};\n\nfunction generateStructLines(shaderBuilder) {\n  const vertexLines = [];\n  const fragmentLines = [];\n\n  let i;\n  let structIds = shaderBuilder._vertexShaderParts.structIds;\n  let structId;\n  let struct;\n  let structLines;\n  for (i = 0; i < structIds.length; i++) {\n    structId = structIds[i];\n    struct = shaderBuilder._structs[structId];\n    structLines = struct.generateGlslLines();\n    addAllToArray(vertexLines, structLines);\n  }\n\n  structIds = shaderBuilder._fragmentShaderParts.structIds;\n  for (i = 0; i < structIds.length; i++) {\n    structId = structIds[i];\n    struct = shaderBuilder._structs[structId];\n    structLines = struct.generateGlslLines();\n    addAllToArray(fragmentLines, structLines);\n  }\n\n  return {\n    vertexLines: vertexLines,\n    fragmentLines: fragmentLines,\n  };\n}\n\nfunction getAttributeLocationCount(glslType) {\n  switch (glslType) {\n    case \"mat2\":\n      return 2;\n    case \"mat3\":\n      return 3;\n    case \"mat4\":\n      return 4;\n    default:\n      return 1;\n  }\n}\n\nfunction generateFunctionLines(shaderBuilder) {\n  const vertexLines = [];\n  const fragmentLines = [];\n\n  let i;\n  let functionIds = shaderBuilder._vertexShaderParts.functionIds;\n  let functionId;\n  let func;\n  let functionLines;\n  for (i = 0; i < functionIds.length; i++) {\n    functionId = functionIds[i];\n    func = shaderBuilder._functions[functionId];\n    functionLines = func.generateGlslLines();\n    addAllToArray(vertexLines, functionLines);\n  }\n\n  functionIds = shaderBuilder._fragmentShaderParts.functionIds;\n  for (i = 0; i < functionIds.length; i++) {\n    functionId = functionIds[i];\n    func = shaderBuilder._functions[functionId];\n    functionLines = func.generateGlslLines();\n    addAllToArray(fragmentLines, functionLines);\n  }\n\n  return {\n    vertexLines: vertexLines,\n    fragmentLines: fragmentLines,\n  };\n}\n\nexport default ShaderBuilder;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ShaderProgram from \"./ShaderProgram.js\";\nimport ShaderSource from \"./ShaderSource.js\";\n\n/**\n * @private\n */\nfunction ShaderCache(context) {\n  this._context = context;\n  this._shaders = {};\n  this._numberOfShaders = 0;\n  this._shadersToRelease = {};\n}\n\nObject.defineProperties(ShaderCache.prototype, {\n  numberOfShaders: {\n    get: function () {\n      return this._numberOfShaders;\n    },\n  },\n});\n\n/**\n     * Returns a shader program from the cache, or creates and caches a new shader program,\n     * given the GLSL vertex and fragment shader source and attribute locations.\n     * <p>\n     * The difference between this and {@link ShaderCache#getShaderProgram}, is this is used to\n     * replace an existing reference to a shader program, which is passed as the first argument.\n     * </p>\n     *\n     * @param {object} options Object with the following properties:\n     * @param {ShaderProgram} [options.shaderProgram] The shader program that is being reassigned.\n     * @param {string|ShaderSource} options.vertexShaderSource The GLSL source for the vertex shader.\n     * @param {string|ShaderSource} options.fragmentShaderSource The GLSL source for the fragment shader.\n     * @param {object} options.attributeLocations Indices for the attribute inputs to the vertex shader.\n\n     * @returns {ShaderProgram} The cached or newly created shader program.\n     *\n     *\n     * @example\n     * this._shaderProgram = context.shaderCache.replaceShaderProgram({\n     *     shaderProgram : this._shaderProgram,\n     *     vertexShaderSource : vs,\n     *     fragmentShaderSource : fs,\n     *     attributeLocations : attributeLocations\n     * });\n     *\n     * @see ShaderCache#getShaderProgram\n     */\nShaderCache.prototype.replaceShaderProgram = function (options) {\n  if (defined(options.shaderProgram)) {\n    options.shaderProgram.destroy();\n  }\n\n  return this.getShaderProgram(options);\n};\n\nfunction toSortedJson(dictionary) {\n  const sortedKeys = Object.keys(dictionary).sort();\n  return JSON.stringify(dictionary, sortedKeys);\n}\n\n/**\n * Returns a shader program from the cache, or creates and caches a new shader program,\n * given the GLSL vertex and fragment shader source and attribute locations.\n *\n * @param {object} options Object with the following properties:\n * @param {string|ShaderSource} options.vertexShaderSource The GLSL source for the vertex shader.\n * @param {string|ShaderSource} options.fragmentShaderSource The GLSL source for the fragment shader.\n * @param {object} options.attributeLocations Indices for the attribute inputs to the vertex shader.\n *\n * @returns {ShaderProgram} The cached or newly created shader program.\n */\nShaderCache.prototype.getShaderProgram = function (options) {\n  // convert shaders which are provided as strings into ShaderSource objects\n  // because ShaderSource handles all the automatic including of built-in functions, etc.\n\n  let vertexShaderSource = options.vertexShaderSource;\n  let fragmentShaderSource = options.fragmentShaderSource;\n  const attributeLocations = options.attributeLocations;\n\n  if (typeof vertexShaderSource === \"string\") {\n    vertexShaderSource = new ShaderSource({\n      sources: [vertexShaderSource],\n    });\n  }\n\n  if (typeof fragmentShaderSource === \"string\") {\n    fragmentShaderSource = new ShaderSource({\n      sources: [fragmentShaderSource],\n    });\n  }\n\n  // Since ShaderSource.createCombinedXxxShader() can be expensive, use a\n  // simpler key for caching. This way, the function does not have to be called\n  // for each cache lookup.\n  const vertexShaderKey = vertexShaderSource.getCacheKey();\n  const fragmentShaderKey = fragmentShaderSource.getCacheKey();\n  // Sort the keys in the JSON to ensure a consistent order\n  const attributeLocationKey = defined(attributeLocations)\n    ? toSortedJson(attributeLocations)\n    : \"\";\n  const keyword = `${vertexShaderKey}:${fragmentShaderKey}:${attributeLocationKey}`;\n\n  let cachedShader;\n  if (defined(this._shaders[keyword])) {\n    cachedShader = this._shaders[keyword];\n\n    // No longer want to release this if it was previously released.\n    delete this._shadersToRelease[keyword];\n  } else {\n    const context = this._context;\n\n    const vertexShaderText =\n      vertexShaderSource.createCombinedVertexShader(context);\n    const fragmentShaderText =\n      fragmentShaderSource.createCombinedFragmentShader(context);\n\n    const shaderProgram = new ShaderProgram({\n      gl: context._gl,\n      logShaderCompilation: context.logShaderCompilation,\n      debugShaders: context.debugShaders,\n      vertexShaderSource: vertexShaderSource,\n      vertexShaderText: vertexShaderText,\n      fragmentShaderSource: fragmentShaderSource,\n      fragmentShaderText: fragmentShaderText,\n      attributeLocations: attributeLocations,\n    });\n\n    cachedShader = {\n      cache: this,\n      shaderProgram: shaderProgram,\n      keyword: keyword,\n      derivedKeywords: [],\n      count: 0,\n    };\n\n    // A shader can't be in more than one cache.\n    shaderProgram._cachedShader = cachedShader;\n    this._shaders[keyword] = cachedShader;\n    ++this._numberOfShaders;\n  }\n\n  ++cachedShader.count;\n  return cachedShader.shaderProgram;\n};\n\nShaderCache.prototype.replaceDerivedShaderProgram = function (\n  shaderProgram,\n  keyword,\n  options,\n) {\n  const cachedShader = shaderProgram._cachedShader;\n  const derivedKeyword = keyword + cachedShader.keyword;\n  const cachedDerivedShader = this._shaders[derivedKeyword];\n  if (defined(cachedDerivedShader)) {\n    destroyShader(this, cachedDerivedShader);\n    const index = cachedShader.derivedKeywords.indexOf(keyword);\n    if (index > -1) {\n      cachedShader.derivedKeywords.splice(index, 1);\n    }\n  }\n\n  return this.createDerivedShaderProgram(shaderProgram, keyword, options);\n};\n\nShaderCache.prototype.getDerivedShaderProgram = function (\n  shaderProgram,\n  keyword,\n) {\n  const cachedShader = shaderProgram._cachedShader;\n  const derivedKeyword = keyword + cachedShader.keyword;\n  const cachedDerivedShader = this._shaders[derivedKeyword];\n  if (!defined(cachedDerivedShader)) {\n    return undefined;\n  }\n\n  return cachedDerivedShader.shaderProgram;\n};\n\nShaderCache.prototype.createDerivedShaderProgram = function (\n  shaderProgram,\n  keyword,\n  options,\n) {\n  const cachedShader = shaderProgram._cachedShader;\n  const derivedKeyword = keyword + cachedShader.keyword;\n\n  let vertexShaderSource = options.vertexShaderSource;\n  let fragmentShaderSource = options.fragmentShaderSource;\n  const attributeLocations = options.attributeLocations;\n\n  if (typeof vertexShaderSource === \"string\") {\n    vertexShaderSource = new ShaderSource({\n      sources: [vertexShaderSource],\n    });\n  }\n\n  if (typeof fragmentShaderSource === \"string\") {\n    fragmentShaderSource = new ShaderSource({\n      sources: [fragmentShaderSource],\n    });\n  }\n\n  const context = this._context;\n\n  const vertexShaderText =\n    vertexShaderSource.createCombinedVertexShader(context);\n  const fragmentShaderText =\n    fragmentShaderSource.createCombinedFragmentShader(context);\n\n  const derivedShaderProgram = new ShaderProgram({\n    gl: context._gl,\n    logShaderCompilation: context.logShaderCompilation,\n    debugShaders: context.debugShaders,\n    vertexShaderSource: vertexShaderSource,\n    vertexShaderText: vertexShaderText,\n    fragmentShaderSource: fragmentShaderSource,\n    fragmentShaderText: fragmentShaderText,\n    attributeLocations: attributeLocations,\n  });\n\n  const derivedCachedShader = {\n    cache: this,\n    shaderProgram: derivedShaderProgram,\n    keyword: derivedKeyword,\n    derivedKeywords: [],\n    count: 0,\n  };\n\n  cachedShader.derivedKeywords.push(keyword);\n  derivedShaderProgram._cachedShader = derivedCachedShader;\n  this._shaders[derivedKeyword] = derivedCachedShader;\n  return derivedShaderProgram;\n};\n\nfunction destroyShader(cache, cachedShader) {\n  const derivedKeywords = cachedShader.derivedKeywords;\n  const length = derivedKeywords.length;\n  for (let i = 0; i < length; ++i) {\n    const keyword = derivedKeywords[i] + cachedShader.keyword;\n    const derivedCachedShader = cache._shaders[keyword];\n    destroyShader(cache, derivedCachedShader);\n  }\n\n  delete cache._shaders[cachedShader.keyword];\n  cachedShader.shaderProgram.finalDestroy();\n}\n\nShaderCache.prototype.destroyReleasedShaderPrograms = function () {\n  const shadersToRelease = this._shadersToRelease;\n\n  for (const keyword in shadersToRelease) {\n    if (shadersToRelease.hasOwnProperty(keyword)) {\n      const cachedShader = shadersToRelease[keyword];\n      destroyShader(this, cachedShader);\n      --this._numberOfShaders;\n    }\n  }\n\n  this._shadersToRelease = {};\n};\n\nShaderCache.prototype.releaseShaderProgram = function (shaderProgram) {\n  if (defined(shaderProgram)) {\n    const cachedShader = shaderProgram._cachedShader;\n    if (cachedShader && --cachedShader.count === 0) {\n      this._shadersToRelease[cachedShader.keyword] = cachedShader;\n    }\n  }\n};\n\nShaderCache.prototype.isDestroyed = function () {\n  return false;\n};\n\nShaderCache.prototype.destroy = function () {\n  const shaders = this._shaders;\n  for (const keyword in shaders) {\n    if (shaders.hasOwnProperty(keyword)) {\n      shaders[keyword].shaderProgram.finalDestroy();\n    }\n  }\n  return destroyObject(this);\n};\nexport default ShaderCache;\n","import Check from \"../Core/Check.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A bit flag describing whether a variable should be added to the\n * vertex shader, the fragment shader, or both (or none).\n *\n * @private\n */\nconst ShaderDestination = {\n  NONE: 0,\n  VERTEX: 1,\n  FRAGMENT: 2,\n  BOTH: 3,\n};\n\n/**\n * Check if a variable should be included in the vertex shader.\n *\n * @param {ShaderDestination} destination The ShaderDestination to check\n * @return {boolean} <code>true</code> if the variable appears in the vertex shader, or <code>false</code> otherwise\n * @private\n */\nShaderDestination.includesVertexShader = function (destination) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"destination\", destination);\n  //>>includeEnd('debug');\n\n  return (destination & ShaderDestination.VERTEX) !== 0;\n};\n\n/**\n * Check if a variable should be included in the vertex shader.\n *\n * @param {ShaderDestination} destination The ShaderDestination to check\n * @return {boolean} <code>true</code> if the variable appears in the vertex shader, or <code>false</code> otherwise\n * @private\n */\nShaderDestination.includesFragmentShader = function (destination) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"destination\", destination);\n  //>>includeEnd('debug');\n  //\n\n  return (destination & ShaderDestination.FRAGMENT) !== 0;\n};\n\n/**\n * Compute the union of multiple ShaderDestinations (e.g., VERTEX | FRAGMENT yields BOTH)\n * @param  {...ShaderDestination} destinations\n * @returns {ShaderDestination} The union of the provided destinations\n * @private\n */\nShaderDestination.union = function (...destinations) {\n  //>>includeStart('debug', pragmas.debug);\n  if (destinations.length === 0) {\n    throw new DeveloperError(\n      \"ShaderDestination.union requires at least one destination.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let result = 0;\n  for (let i = 0; i < destinations.length; i++) {\n    result |= destinations[i];\n  }\n  return result;\n};\n\n/**\n * Compute the intersection of multiple ShaderDestinations (e.g., VERTEX & FRAGMENT yields NONE)\n * @param  {...ShaderDestination} destinations\n * @returns {ShaderDestination} The intersection of the provided destinations\n * @private\n */\nShaderDestination.intersection = function (...destinations) {\n  //>>includeStart('debug', pragmas.debug);\n  if (destinations.length === 0) {\n    throw new DeveloperError(\n      \"ShaderDestination.intersection requires at least one destination.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let result = destinations[0];\n  for (let i = 1; i < destinations.length; i++) {\n    result &= destinations[i];\n  }\n  return result;\n};\n\nexport default Object.freeze(ShaderDestination);\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A utility for dynamically-generating a GLSL function\n *\n * @alias ShaderFunction\n * @constructor\n *\n * @see {@link ShaderBuilder}\n * @param {string} signature The full signature of the function as it will appear in the shader. Do not include the curly braces.\n * @example\n * // generate the following function\n * //\n * // void assignVaryings(vec3 position)\n * // {\n * //    v_positionEC = (czm_modelView * vec4(a_position, 1.0)).xyz;\n * //    v_texCoord = a_texCoord;\n * // }\n * const signature = \"void assignVaryings(vec3 position)\";\n * const func = new ShaderFunction(signature);\n * func.addLine(\"v_positionEC = (czm_modelView * vec4(a_position, 1.0)).xyz;\");\n * func.addLine(\"v_texCoord = a_texCoord;\");\n * const generatedLines = func.generateGlslLines();\n *\n * @private\n */\nfunction ShaderFunction(signature) {\n  this.signature = signature;\n  this.body = [];\n}\n\n/**\n * Adds one or more lines to the body of the function\n * @param {string|string[]} lines One or more lines of GLSL code to add to the function body. Do not include any preceding or ending whitespace, but do include the semicolon for each line.\n */\nShaderFunction.prototype.addLines = function (lines) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof lines !== \"string\" && !Array.isArray(lines)) {\n    throw new DeveloperError(\n      `Expected lines to be a string or an array of strings, actual value was ${lines}`,\n    );\n  }\n  //>>includeEnd('debug');\n  const body = this.body;\n\n  // Indent the body of the function by 4 spaces\n  if (Array.isArray(lines)) {\n    const length = lines.length;\n    for (let i = 0; i < length; i++) {\n      body.push(`    ${lines[i]}`);\n    }\n  } else {\n    // Single string case\n    body.push(`    ${lines}`);\n  }\n};\n\n/**\n * Generate lines of GLSL code for use with {@link ShaderBuilder}\n * @return {string[]}\n */\nShaderFunction.prototype.generateGlslLines = function () {\n  return [].concat(this.signature, \"{\", this.body, \"}\");\n};\n\nexport default ShaderFunction;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport AutomaticUniforms from \"./AutomaticUniforms.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport createUniform from \"./createUniform.js\";\nimport createUniformArray from \"./createUniformArray.js\";\n\nlet nextShaderProgramId = 0;\n\n/**\n * @private\n */\nfunction ShaderProgram(options) {\n  let vertexShaderText = options.vertexShaderText;\n  let fragmentShaderText = options.fragmentShaderText;\n\n  if (typeof spector !== \"undefined\") {\n    // The #line statements common in Cesium shaders interfere with the ability of the\n    // SpectorJS to show errors on the correct line. So remove them when SpectorJS\n    // is active.\n    vertexShaderText = vertexShaderText.replace(/^#line/gm, \"//#line\");\n    fragmentShaderText = fragmentShaderText.replace(/^#line/gm, \"//#line\");\n  }\n\n  const modifiedFS = handleUniformPrecisionMismatches(\n    vertexShaderText,\n    fragmentShaderText,\n  );\n\n  this._gl = options.gl;\n  this._logShaderCompilation = options.logShaderCompilation;\n  this._debugShaders = options.debugShaders;\n  this._attributeLocations = options.attributeLocations;\n\n  this._program = undefined;\n  this._numberOfVertexAttributes = undefined;\n  this._vertexAttributes = undefined;\n  this._uniformsByName = undefined;\n  this._uniforms = undefined;\n  this._automaticUniforms = undefined;\n  this._manualUniforms = undefined;\n  this._duplicateUniformNames = modifiedFS.duplicateUniformNames;\n  this._cachedShader = undefined; // Used by ShaderCache\n\n  /**\n   * @private\n   */\n  this.maximumTextureUnitIndex = undefined;\n\n  this._vertexShaderSource = options.vertexShaderSource;\n  this._vertexShaderText = options.vertexShaderText;\n  this._fragmentShaderSource = options.fragmentShaderSource;\n  this._fragmentShaderText = modifiedFS.fragmentShaderText;\n\n  /**\n   * @private\n   */\n  this.id = nextShaderProgramId++;\n}\n\nShaderProgram.fromCache = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  return options.context.shaderCache.getShaderProgram(options);\n};\n\nShaderProgram.replaceCache = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  return options.context.shaderCache.replaceShaderProgram(options);\n};\n\nObject.defineProperties(ShaderProgram.prototype, {\n  /**\n   * GLSL source for the shader program's vertex shader.\n   * @memberof ShaderProgram.prototype\n   *\n   * @type {ShaderSource}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      return this._vertexShaderSource;\n    },\n  },\n  /**\n   * GLSL source for the shader program's fragment shader.\n   * @memberof ShaderProgram.prototype\n   *\n   * @type {ShaderSource}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n  vertexAttributes: {\n    get: function () {\n      initialize(this);\n      return this._vertexAttributes;\n    },\n  },\n  numberOfVertexAttributes: {\n    get: function () {\n      initialize(this);\n      return this._numberOfVertexAttributes;\n    },\n  },\n  allUniforms: {\n    get: function () {\n      initialize(this);\n      return this._uniformsByName;\n    },\n  },\n});\n\nfunction extractUniforms(shaderText) {\n  const uniformNames = [];\n  const uniformLines = shaderText.match(/uniform.*?(?![^{]*})(?=[=\\[;])/g);\n  if (defined(uniformLines)) {\n    const len = uniformLines.length;\n    for (let i = 0; i < len; i++) {\n      const line = uniformLines[i].trim();\n      const name = line.slice(line.lastIndexOf(\" \") + 1);\n      uniformNames.push(name);\n    }\n  }\n  return uniformNames;\n}\n\nfunction handleUniformPrecisionMismatches(\n  vertexShaderText,\n  fragmentShaderText,\n) {\n  // If a uniform exists in both the vertex and fragment shader but with different precision qualifiers,\n  // give the fragment shader uniform a different name. This fixes shader compilation errors on devices\n  // that only support mediump in the fragment shader.\n  const duplicateUniformNames = {};\n\n  if (!ContextLimits.highpFloatSupported || !ContextLimits.highpIntSupported) {\n    let i, j;\n    let uniformName;\n    let duplicateName;\n    const vertexShaderUniforms = extractUniforms(vertexShaderText);\n    const fragmentShaderUniforms = extractUniforms(fragmentShaderText);\n    const vertexUniformsCount = vertexShaderUniforms.length;\n    const fragmentUniformsCount = fragmentShaderUniforms.length;\n\n    for (i = 0; i < vertexUniformsCount; i++) {\n      for (j = 0; j < fragmentUniformsCount; j++) {\n        if (vertexShaderUniforms[i] === fragmentShaderUniforms[j]) {\n          uniformName = vertexShaderUniforms[i];\n          duplicateName = `czm_mediump_${uniformName}`;\n          // Update fragmentShaderText with renamed uniforms\n          const re = new RegExp(`${uniformName}\\\\b`, \"g\");\n          fragmentShaderText = fragmentShaderText.replace(re, duplicateName);\n          duplicateUniformNames[duplicateName] = uniformName;\n        }\n      }\n    }\n  }\n\n  return {\n    fragmentShaderText: fragmentShaderText,\n    duplicateUniformNames: duplicateUniformNames,\n  };\n}\n\nconst consolePrefix = \"[Cesium WebGL] \";\n\nfunction createAndLinkProgram(gl, shader) {\n  const vsSource = shader._vertexShaderText;\n  const fsSource = shader._fragmentShaderText;\n\n  const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n  gl.shaderSource(vertexShader, vsSource);\n  gl.compileShader(vertexShader);\n\n  const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n  gl.shaderSource(fragmentShader, fsSource);\n  gl.compileShader(fragmentShader);\n\n  const program = gl.createProgram();\n  gl.attachShader(program, vertexShader);\n  gl.attachShader(program, fragmentShader);\n\n  const attributeLocations = shader._attributeLocations;\n  if (defined(attributeLocations)) {\n    for (const attribute in attributeLocations) {\n      if (attributeLocations.hasOwnProperty(attribute)) {\n        gl.bindAttribLocation(\n          program,\n          attributeLocations[attribute],\n          attribute,\n        );\n      }\n    }\n  }\n\n  gl.linkProgram(program);\n  let log;\n\n  // For performance: if linker succeeds, return without checking compile status\n  if (gl.getProgramParameter(program, gl.LINK_STATUS)) {\n    if (shader._logShaderCompilation) {\n      log = gl.getShaderInfoLog(vertexShader);\n      if (defined(log) && log.length > 0) {\n        console.log(`${consolePrefix}Vertex shader compile log: ${log}`);\n      }\n\n      log = gl.getShaderInfoLog(fragmentShader);\n      if (defined(log) && log.length > 0) {\n        console.log(`${consolePrefix}Fragment shader compile log: ${log}`);\n      }\n\n      log = gl.getProgramInfoLog(program);\n      if (defined(log) && log.length > 0) {\n        console.log(`${consolePrefix}Shader program link log: ${log}`);\n      }\n    }\n\n    gl.deleteShader(vertexShader);\n    gl.deleteShader(fragmentShader);\n\n    return program;\n  }\n\n  // Program failed to link. Try to find and report the reason\n  let errorMessage;\n  const debugShaders = shader._debugShaders;\n\n  if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n    log = gl.getShaderInfoLog(fragmentShader);\n    console.error(`${consolePrefix}Fragment shader compile log: ${log}`);\n    console.error(`${consolePrefix} Fragment shader source:\\n${fsSource}`);\n    errorMessage = `Fragment shader failed to compile.  Compile log: ${log}`;\n  } else if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n    log = gl.getShaderInfoLog(vertexShader);\n    console.error(`${consolePrefix}Vertex shader compile log: ${log}`);\n    console.error(`${consolePrefix} Vertex shader source:\\n${vsSource}`);\n    errorMessage = `Vertex shader failed to compile.  Compile log: ${log}`;\n  } else {\n    log = gl.getProgramInfoLog(program);\n    console.error(`${consolePrefix}Shader program link log: ${log}`);\n    logTranslatedSource(vertexShader, \"vertex\");\n    logTranslatedSource(fragmentShader, \"fragment\");\n    errorMessage = `Program failed to link.  Link log: ${log}`;\n  }\n\n  gl.deleteShader(vertexShader);\n  gl.deleteShader(fragmentShader);\n  gl.deleteProgram(program);\n  throw new RuntimeError(errorMessage);\n\n  function logTranslatedSource(compiledShader, name) {\n    if (!defined(debugShaders)) {\n      return;\n    }\n    const translation = debugShaders.getTranslatedShaderSource(compiledShader);\n    if (translation === \"\") {\n      console.error(`${consolePrefix}${name} shader translation failed.`);\n      return;\n    }\n    console.error(\n      `${consolePrefix}Translated ${name} shaderSource:\\n${translation}`,\n    );\n  }\n}\n\nfunction findVertexAttributes(gl, program, numberOfAttributes) {\n  const attributes = {};\n  for (let i = 0; i < numberOfAttributes; ++i) {\n    const attr = gl.getActiveAttrib(program, i);\n    const location = gl.getAttribLocation(program, attr.name);\n\n    attributes[attr.name] = {\n      name: attr.name,\n      type: attr.type,\n      index: location,\n    };\n  }\n\n  return attributes;\n}\n\nfunction findUniforms(gl, program) {\n  const uniformsByName = {};\n  const uniforms = [];\n  const samplerUniforms = [];\n\n  const numberOfUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n\n  for (let i = 0; i < numberOfUniforms; ++i) {\n    const activeUniform = gl.getActiveUniform(program, i);\n    const suffix = \"[0]\";\n    const uniformName =\n      activeUniform.name.indexOf(\n        suffix,\n        activeUniform.name.length - suffix.length,\n      ) !== -1\n        ? activeUniform.name.slice(0, activeUniform.name.length - 3)\n        : activeUniform.name;\n\n    // Ignore GLSL built-in uniforms returned in Firefox.\n    if (uniformName.indexOf(\"gl_\") !== 0) {\n      if (activeUniform.name.indexOf(\"[\") < 0) {\n        // Single uniform\n        const location = gl.getUniformLocation(program, uniformName);\n\n        // IE 11.0.9 needs this check since getUniformLocation can return null\n        // if the uniform is not active (e.g., it is optimized out).  Looks like\n        // getActiveUniform() above returns uniforms that are not actually active.\n        if (location !== null) {\n          const uniform = createUniform(\n            gl,\n            activeUniform,\n            uniformName,\n            location,\n          );\n\n          uniformsByName[uniformName] = uniform;\n          uniforms.push(uniform);\n\n          if (uniform._setSampler) {\n            samplerUniforms.push(uniform);\n          }\n        }\n      } else {\n        // Uniform array\n\n        let uniformArray;\n        let locations;\n        let value;\n        let loc;\n\n        // On some platforms - Nexus 4 in Firefox for one - an array of sampler2D ends up being represented\n        // as separate uniforms, one for each array element.  Check for and handle that case.\n        const indexOfBracket = uniformName.indexOf(\"[\");\n        if (indexOfBracket >= 0) {\n          // We're assuming the array elements show up in numerical order - it seems to be true.\n          uniformArray = uniformsByName[uniformName.slice(0, indexOfBracket)];\n\n          // Nexus 4 with Android 4.3 needs this check, because it reports a uniform\n          // with the strange name webgl_3467e0265d05c3c1[1] in our globe surface shader.\n          if (!defined(uniformArray)) {\n            continue;\n          }\n\n          locations = uniformArray._locations;\n\n          // On the Nexus 4 in Chrome, we get one uniform per sampler, just like in Firefox,\n          // but the size is not 1 like it is in Firefox.  So if we push locations here,\n          // we'll end up adding too many locations.\n          if (locations.length <= 1) {\n            value = uniformArray.value;\n            loc = gl.getUniformLocation(program, uniformName);\n\n            // Workaround for IE 11.0.9.  See above.\n            if (loc !== null) {\n              locations.push(loc);\n              value.push(gl.getUniform(program, loc));\n            }\n          }\n        } else {\n          locations = [];\n          for (let j = 0; j < activeUniform.size; ++j) {\n            loc = gl.getUniformLocation(program, `${uniformName}[${j}]`);\n\n            // Workaround for IE 11.0.9.  See above.\n            if (loc !== null) {\n              locations.push(loc);\n            }\n          }\n          uniformArray = createUniformArray(\n            gl,\n            activeUniform,\n            uniformName,\n            locations,\n          );\n\n          uniformsByName[uniformName] = uniformArray;\n          uniforms.push(uniformArray);\n\n          if (uniformArray._setSampler) {\n            samplerUniforms.push(uniformArray);\n          }\n        }\n      }\n    }\n  }\n\n  return {\n    uniformsByName: uniformsByName,\n    uniforms: uniforms,\n    samplerUniforms: samplerUniforms,\n  };\n}\n\nfunction partitionUniforms(shader, uniforms) {\n  const automaticUniforms = [];\n  const manualUniforms = [];\n\n  for (const uniform in uniforms) {\n    if (uniforms.hasOwnProperty(uniform)) {\n      const uniformObject = uniforms[uniform];\n      let uniformName = uniform;\n      // if it's a duplicate uniform, use its original name so it is updated correctly\n      const duplicateUniform = shader._duplicateUniformNames[uniformName];\n      if (defined(duplicateUniform)) {\n        uniformObject.name = duplicateUniform;\n        uniformName = duplicateUniform;\n      }\n      const automaticUniform = AutomaticUniforms[uniformName];\n      if (defined(automaticUniform)) {\n        automaticUniforms.push({\n          uniform: uniformObject,\n          automaticUniform: automaticUniform,\n        });\n      } else {\n        manualUniforms.push(uniformObject);\n      }\n    }\n  }\n\n  return {\n    automaticUniforms: automaticUniforms,\n    manualUniforms: manualUniforms,\n  };\n}\n\nfunction setSamplerUniforms(gl, program, samplerUniforms) {\n  gl.useProgram(program);\n\n  let textureUnitIndex = 0;\n  const length = samplerUniforms.length;\n  for (let i = 0; i < length; ++i) {\n    textureUnitIndex = samplerUniforms[i]._setSampler(textureUnitIndex);\n  }\n\n  gl.useProgram(null);\n\n  return textureUnitIndex;\n}\n\nfunction initialize(shader) {\n  if (defined(shader._program)) {\n    return;\n  }\n\n  reinitialize(shader);\n}\n\nfunction reinitialize(shader) {\n  const oldProgram = shader._program;\n\n  const gl = shader._gl;\n  const program = createAndLinkProgram(gl, shader, shader._debugShaders);\n  const numberOfVertexAttributes = gl.getProgramParameter(\n    program,\n    gl.ACTIVE_ATTRIBUTES,\n  );\n  const uniforms = findUniforms(gl, program);\n  const partitionedUniforms = partitionUniforms(\n    shader,\n    uniforms.uniformsByName,\n  );\n\n  shader._program = program;\n  shader._numberOfVertexAttributes = numberOfVertexAttributes;\n  shader._vertexAttributes = findVertexAttributes(\n    gl,\n    program,\n    numberOfVertexAttributes,\n  );\n  shader._uniformsByName = uniforms.uniformsByName;\n  shader._uniforms = uniforms.uniforms;\n  shader._automaticUniforms = partitionedUniforms.automaticUniforms;\n  shader._manualUniforms = partitionedUniforms.manualUniforms;\n\n  shader.maximumTextureUnitIndex = setSamplerUniforms(\n    gl,\n    program,\n    uniforms.samplerUniforms,\n  );\n\n  if (oldProgram) {\n    shader._gl.deleteProgram(oldProgram);\n  }\n\n  // If SpectorJS is active, add the hook to make the shader editor work.\n  // https://github.com/BabylonJS/Spector.js/blob/master/documentation/extension.md#shader-editor\n  if (typeof spector !== \"undefined\") {\n    shader._program.__SPECTOR_rebuildProgram = function (\n      vertexSourceCode, // The new vertex shader source\n      fragmentSourceCode, // The new fragment shader source\n      onCompiled, // Callback triggered by your engine when the compilation is successful. It needs to send back the new linked program.\n      onError, // Callback triggered by your engine in case of error. It needs to send the WebGL error to allow the editor to display the error in the gutter.\n    ) {\n      const originalVS = shader._vertexShaderText;\n      const originalFS = shader._fragmentShaderText;\n\n      // SpectorJS likes to replace `!=` with `! =` for unknown reasons,\n      // and that causes glsl compile failures. So fix that up.\n      const regex = / ! = /g;\n      shader._vertexShaderText = vertexSourceCode.replace(regex, \" != \");\n      shader._fragmentShaderText = fragmentSourceCode.replace(regex, \" != \");\n\n      try {\n        reinitialize(shader);\n        onCompiled(shader._program);\n      } catch (e) {\n        shader._vertexShaderText = originalVS;\n        shader._fragmentShaderText = originalFS;\n\n        // Only pass on the WebGL error:\n        const errorMatcher = /(?:Compile|Link) error: ([^]*)/;\n        const match = errorMatcher.exec(e.message);\n        if (match) {\n          onError(match[1]);\n        } else {\n          onError(e.message);\n        }\n      }\n    };\n  }\n}\n\nShaderProgram.prototype._bind = function () {\n  initialize(this);\n  this._gl.useProgram(this._program);\n};\n\nShaderProgram.prototype._setUniforms = function (\n  uniformMap,\n  uniformState,\n  validate,\n) {\n  let len;\n  let i;\n\n  if (defined(uniformMap)) {\n    const manualUniforms = this._manualUniforms;\n    len = manualUniforms.length;\n    for (i = 0; i < len; ++i) {\n      const mu = manualUniforms[i];\n\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(uniformMap[mu.name])) {\n        throw new DeveloperError(`Unknown uniform: ${mu.name}`);\n      }\n      //>>includeEnd('debug');\n\n      mu.value = uniformMap[mu.name]();\n    }\n  }\n\n  const automaticUniforms = this._automaticUniforms;\n  len = automaticUniforms.length;\n  for (i = 0; i < len; ++i) {\n    const au = automaticUniforms[i];\n    au.uniform.value = au.automaticUniform.getValue(uniformState);\n  }\n\n  ///////////////////////////////////////////////////////////////////\n\n  // It appears that assigning the uniform values above and then setting them here\n  // (which makes the GL calls) is faster than removing this loop and making\n  // the GL calls above.  I suspect this is because each GL call pollutes the\n  // L2 cache making our JavaScript and the browser/driver ping-pong cache lines.\n  const uniforms = this._uniforms;\n  len = uniforms.length;\n  for (i = 0; i < len; ++i) {\n    uniforms[i].set();\n  }\n\n  if (validate) {\n    const gl = this._gl;\n    const program = this._program;\n\n    gl.validateProgram(program);\n    //>>includeStart('debug', pragmas.debug);\n    if (!gl.getProgramParameter(program, gl.VALIDATE_STATUS)) {\n      throw new DeveloperError(\n        `Program validation failed.  Program info log: ${gl.getProgramInfoLog(\n          program,\n        )}`,\n      );\n    }\n    //>>includeEnd('debug');\n  }\n};\n\nShaderProgram.prototype.isDestroyed = function () {\n  return false;\n};\n\nShaderProgram.prototype.destroy = function () {\n  this._cachedShader.cache.releaseShaderProgram(this);\n  return undefined;\n};\n\nShaderProgram.prototype.finalDestroy = function () {\n  this._gl.deleteProgram(this._program);\n  return destroyObject(this);\n};\nexport default ShaderProgram;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CzmBuiltins from \"../Shaders/Builtin/CzmBuiltins.js\";\nimport AutomaticUniforms from \"./AutomaticUniforms.js\";\nimport demodernizeShader from \"./demodernizeShader.js\";\n\nfunction removeComments(source) {\n  // remove inline comments\n  source = source.replace(/\\/\\/.*/g, \"\");\n  // remove multiline comment block\n  return source.replace(/\\/\\*\\*[\\s\\S]*?\\*\\//gm, function (match) {\n    // preserve the number of lines in the comment block so the line numbers will be correct when debugging shaders\n    const numberOfLines = match.match(/\\n/gm).length;\n    let replacement = \"\";\n    for (let lineNumber = 0; lineNumber < numberOfLines; ++lineNumber) {\n      replacement += \"\\n\";\n    }\n    return replacement;\n  });\n}\n\nfunction getDependencyNode(name, glslSource, nodes) {\n  let dependencyNode;\n\n  // check if already loaded\n  for (let i = 0; i < nodes.length; ++i) {\n    if (nodes[i].name === name) {\n      dependencyNode = nodes[i];\n    }\n  }\n\n  if (!defined(dependencyNode)) {\n    // strip doc comments so we don't accidentally try to determine a dependency for something found\n    // in a comment\n    glslSource = removeComments(glslSource);\n\n    // create new node\n    dependencyNode = {\n      name: name,\n      glslSource: glslSource,\n      dependsOn: [],\n      requiredBy: [],\n      evaluated: false,\n    };\n    nodes.push(dependencyNode);\n  }\n\n  return dependencyNode;\n}\n\nfunction generateDependencies(currentNode, dependencyNodes) {\n  if (currentNode.evaluated) {\n    return;\n  }\n\n  currentNode.evaluated = true;\n\n  // identify all dependencies that are referenced from this glsl source code\n  let czmMatches = currentNode.glslSource.match(/\\bczm_[a-zA-Z0-9_]*/g);\n  if (defined(czmMatches) && czmMatches !== null) {\n    // remove duplicates\n    czmMatches = czmMatches.filter(function (elem, pos) {\n      return czmMatches.indexOf(elem) === pos;\n    });\n\n    czmMatches.forEach(function (element) {\n      if (\n        element !== currentNode.name &&\n        ShaderSource._czmBuiltinsAndUniforms.hasOwnProperty(element)\n      ) {\n        const referencedNode = getDependencyNode(\n          element,\n          ShaderSource._czmBuiltinsAndUniforms[element],\n          dependencyNodes,\n        );\n        currentNode.dependsOn.push(referencedNode);\n        referencedNode.requiredBy.push(currentNode);\n\n        // recursive call to find any dependencies of the new node\n        generateDependencies(referencedNode, dependencyNodes);\n      }\n    });\n  }\n}\n\nfunction sortDependencies(dependencyNodes) {\n  const nodesWithoutIncomingEdges = [];\n  const allNodes = [];\n\n  while (dependencyNodes.length > 0) {\n    const node = dependencyNodes.pop();\n    allNodes.push(node);\n\n    if (node.requiredBy.length === 0) {\n      nodesWithoutIncomingEdges.push(node);\n    }\n  }\n\n  while (nodesWithoutIncomingEdges.length > 0) {\n    const currentNode = nodesWithoutIncomingEdges.shift();\n\n    dependencyNodes.push(currentNode);\n\n    for (let i = 0; i < currentNode.dependsOn.length; ++i) {\n      // remove the edge from the graph\n      const referencedNode = currentNode.dependsOn[i];\n      const index = referencedNode.requiredBy.indexOf(currentNode);\n      referencedNode.requiredBy.splice(index, 1);\n\n      // if referenced node has no more incoming edges, add to list\n      if (referencedNode.requiredBy.length === 0) {\n        nodesWithoutIncomingEdges.push(referencedNode);\n      }\n    }\n  }\n\n  // if there are any nodes left with incoming edges, then there was a circular dependency somewhere in the graph\n  const badNodes = [];\n  for (let j = 0; j < allNodes.length; ++j) {\n    if (allNodes[j].requiredBy.length !== 0) {\n      badNodes.push(allNodes[j]);\n    }\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (badNodes.length !== 0) {\n    let message =\n      \"A circular dependency was found in the following built-in functions/structs/constants: \\n\";\n    for (let k = 0; k < badNodes.length; ++k) {\n      message = `${message + badNodes[k].name}\\n`;\n    }\n    throw new DeveloperError(message);\n  }\n  //>>includeEnd('debug');\n}\n\nfunction getBuiltinsAndAutomaticUniforms(shaderSource) {\n  // generate a dependency graph for builtin functions\n  const dependencyNodes = [];\n  const root = getDependencyNode(\"main\", shaderSource, dependencyNodes);\n  generateDependencies(root, dependencyNodes);\n  sortDependencies(dependencyNodes);\n\n  // Concatenate the source code for the function dependencies.\n  // Iterate in reverse so that dependent items are declared before they are used.\n  let builtinsSource = \"\";\n  for (let i = dependencyNodes.length - 1; i >= 0; --i) {\n    builtinsSource = `${builtinsSource + dependencyNodes[i].glslSource}\\n`;\n  }\n\n  return builtinsSource.replace(root.glslSource, \"\");\n}\n\nfunction combineShader(shaderSource, isFragmentShader, context) {\n  // Combine shader sources, generally for pseudo-polymorphism, e.g., czm_getMaterial.\n  let combinedSources = \"\";\n  const sources = shaderSource.sources;\n  if (defined(sources)) {\n    for (let i = 0; i < sources.length; ++i) {\n      // #line needs to be on its own line.\n      combinedSources += `\\n#line 0\\n${sources[i]}`;\n    }\n  }\n\n  combinedSources = removeComments(combinedSources);\n\n  // Extract existing shader version from sources\n  let version;\n  combinedSources = combinedSources.replace(\n    /#version\\s+(.*?)\\n/gm,\n    function (match, group1) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(version) && version !== group1) {\n        throw new DeveloperError(\n          `inconsistent versions found: ${version} and ${group1}`,\n        );\n      }\n      //>>includeEnd('debug');\n\n      // Extract #version to put at the top\n      version = group1;\n\n      // Replace original #version directive with a new line so the line numbers\n      // are not off by one.  There can be only one #version directive\n      // and it must appear at the top of the source, only preceded by\n      // whitespace and comments.\n      return \"\\n\";\n    },\n  );\n\n  // Extract shader extensions from sources\n  const extensions = [];\n  combinedSources = combinedSources.replace(\n    /#extension.*\\n/gm,\n    function (match) {\n      // Extract extension to put at the top\n      extensions.push(match);\n\n      // Replace original #extension directive with a new line so the line numbers\n      // are not off by one.\n      return \"\\n\";\n    },\n  );\n\n  // Remove precision qualifier\n  combinedSources = combinedSources.replace(\n    /precision\\s(lowp|mediump|highp)\\s(float|int);/,\n    \"\",\n  );\n\n  // Replace main() for picked if desired.\n  const pickColorQualifier = shaderSource.pickColorQualifier;\n  if (defined(pickColorQualifier)) {\n    combinedSources = ShaderSource.createPickFragmentShaderSource(\n      combinedSources,\n      pickColorQualifier,\n    );\n  }\n\n  // combine into single string\n  let result = \"\";\n\n  const extensionsLength = extensions.length;\n  for (let i = 0; i < extensionsLength; i++) {\n    result += extensions[i];\n  }\n\n  if (isFragmentShader) {\n    // If high precision isn't supported, replace occurrences of highp with mediump.\n    // The highp keyword is not always available on older mobile devices.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#In_WebGL_1_highp_float_support_is_optional_in_fragment_shaders\n    result += `\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n    precision highp float;\n    precision highp int;\n#else\n    precision mediump float;\n    precision mediump int;\n    #define highp mediump\n#endif\n`;\n  }\n\n  if (context.webgl2) {\n    result += `precision highp sampler3D;\\n\\n`;\n  }\n\n  // Prepend #defines for uber-shaders\n  const defines = shaderSource.defines;\n  if (defined(defines)) {\n    for (let i = 0, length = defines.length; i < length; ++i) {\n      const define = defines[i];\n      if (define.length !== 0) {\n        result += `#define ${define}\\n`;\n      }\n    }\n  }\n\n  // Define a constant for the OES_texture_float_linear extension since WebGL does not.\n  if (context.textureFloatLinear) {\n    result += \"#define OES_texture_float_linear\\n\\n\";\n  }\n\n  // Define a constant for the OES_texture_float extension since WebGL does not.\n  if (context.floatingPointTexture) {\n    result += \"#define OES_texture_float\\n\\n\";\n  }\n\n  // append built-ins\n  let builtinSources = \"\";\n  if (shaderSource.includeBuiltIns) {\n    builtinSources = getBuiltinsAndAutomaticUniforms(combinedSources);\n  }\n\n  // reset line number\n  result += \"\\n#line 0\\n\";\n\n  // append actual source\n  const combinedShader = builtinSources + combinedSources;\n  if (\n    context.webgl2 &&\n    isFragmentShader &&\n    !/layout\\s*\\(location\\s*=\\s*0\\)\\s*out\\s+vec4\\s+out_FragColor;/g.test(\n      combinedShader,\n    ) &&\n    !/czm_out_FragColor/g.test(combinedShader) &&\n    /out_FragColor/g.test(combinedShader)\n  ) {\n    result += \"layout(location = 0) out vec4 out_FragColor;\\n\\n\";\n  }\n\n  result += builtinSources;\n  result += combinedSources;\n\n  // modernize the source\n  if (!context.webgl2) {\n    result = demodernizeShader(result, isFragmentShader);\n  } else {\n    result = `#version 300 es\\n${result}`;\n  }\n\n  return result;\n}\n\n/**\n * An object containing various inputs that will be combined to form a final GLSL shader string.\n *\n * @param {object} [options] Object with the following properties:\n * @param {string[]} [options.sources] An array of strings to combine containing GLSL code for the shader.\n * @param {string[]} [options.defines] An array of strings containing GLSL identifiers to <code>#define</code>.\n * @param {string} [options.pickColorQualifier] The GLSL qualifier, <code>uniform</code> or <code>in</code>, for the input <code>czm_pickColor</code>.  When defined, a pick fragment shader is generated.\n * @param {boolean} [options.includeBuiltIns=true] If true, referenced built-in functions will be included with the combined shader.  Set to false if this shader will become a source in another shader, to avoid duplicating functions.\n *\n * @exception {DeveloperError} options.pickColorQualifier must be 'uniform' or 'in'.\n *\n * @example\n * // 1. Prepend #defines to a shader\n * const source = new Cesium.ShaderSource({\n *   defines : ['WHITE'],\n *   sources : ['void main() { \\n#ifdef WHITE\\n out_FragColor = vec4(1.0); \\n#else\\n out_FragColor = vec4(0.0); \\n#endif\\n }']\n * });\n *\n * // 2. Modify a fragment shader for picking\n * const source2 = new Cesium.ShaderSource({\n *   sources : ['void main() { out_FragColor = vec4(1.0); }'],\n *   pickColorQualifier : 'uniform'\n * });\n *\n * @private\n */\nfunction ShaderSource(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const pickColorQualifier = options.pickColorQualifier;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    defined(pickColorQualifier) &&\n    pickColorQualifier !== \"uniform\" &&\n    pickColorQualifier !== \"in\"\n  ) {\n    throw new DeveloperError(\n      \"options.pickColorQualifier must be 'uniform' or 'in'.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this.defines = defined(options.defines) ? options.defines.slice(0) : [];\n  this.sources = defined(options.sources) ? options.sources.slice(0) : [];\n  this.pickColorQualifier = pickColorQualifier;\n  this.includeBuiltIns = options.includeBuiltIns ?? true;\n}\n\nShaderSource.prototype.clone = function () {\n  return new ShaderSource({\n    sources: this.sources,\n    defines: this.defines,\n    pickColorQualifier: this.pickColorQualifier,\n    includeBuiltIns: this.includeBuiltIns,\n  });\n};\n\nShaderSource.replaceMain = function (source, renamedMain) {\n  renamedMain = `void ${renamedMain}()`;\n  return source.replace(/void\\s+main\\s*\\(\\s*(?:void)?\\s*\\)/g, renamedMain);\n};\n\n/**\n * Since {@link ShaderSource#createCombinedVertexShader} and\n * {@link ShaderSource#createCombinedFragmentShader} are both expensive to\n * compute, create a simpler string key for lookups in the {@link ShaderCache}.\n *\n * @returns {string} A key for identifying this shader\n *\n * @private\n */\nShaderSource.prototype.getCacheKey = function () {\n  // Sort defines to make the key comparison deterministic\n  const sortedDefines = this.defines.slice().sort();\n  const definesKey = sortedDefines.join(\",\");\n  const pickKey = this.pickColorQualifier;\n  const builtinsKey = this.includeBuiltIns;\n  const sourcesKey = this.sources.join(\"\\n\");\n\n  return `${definesKey}:${pickKey}:${builtinsKey}:${sourcesKey}`;\n};\n\n/**\n * Create a single string containing the full, combined vertex shader with all dependencies and defines.\n *\n * @param {Context} context The current rendering context\n *\n * @returns {string} The combined shader string.\n */\nShaderSource.prototype.createCombinedVertexShader = function (context) {\n  return combineShader(this, false, context);\n};\n\n/**\n * Create a single string containing the full, combined fragment shader with all dependencies and defines.\n *\n * @param {Context} context The current rendering context\n *\n * @returns {string} The combined shader string.\n */\nShaderSource.prototype.createCombinedFragmentShader = function (context) {\n  return combineShader(this, true, context);\n};\n\n/**\n * For ShaderProgram testing\n * @private\n */\nShaderSource._czmBuiltinsAndUniforms = {};\n\n// combine automatic uniforms and Cesium built-ins\nfor (const builtinName in CzmBuiltins) {\n  if (CzmBuiltins.hasOwnProperty(builtinName)) {\n    ShaderSource._czmBuiltinsAndUniforms[builtinName] =\n      CzmBuiltins[builtinName];\n  }\n}\nfor (const uniformName in AutomaticUniforms) {\n  if (AutomaticUniforms.hasOwnProperty(uniformName)) {\n    const uniform = AutomaticUniforms[uniformName];\n    if (typeof uniform.getDeclaration === \"function\") {\n      ShaderSource._czmBuiltinsAndUniforms[uniformName] =\n        uniform.getDeclaration(uniformName);\n    }\n  }\n}\n\nShaderSource.createPickVertexShaderSource = function (vertexShaderSource) {\n  const renamedVS = ShaderSource.replaceMain(\n    vertexShaderSource,\n    \"czm_old_main\",\n  );\n  const pickMain =\n    \"in vec4 pickColor; \\n\" +\n    \"out vec4 czm_pickColor; \\n\" +\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    czm_old_main(); \\n\" +\n    \"    czm_pickColor = pickColor; \\n\" +\n    \"}\";\n\n  return `${renamedVS}\\n${pickMain}`;\n};\n\nShaderSource.createPickFragmentShaderSource = function (\n  fragmentShaderSource,\n  pickColorQualifier,\n) {\n  const renamedFS = ShaderSource.replaceMain(\n    fragmentShaderSource,\n    \"czm_old_main\",\n  );\n  const pickMain =\n    `${pickColorQualifier} vec4 czm_pickColor; \\n` +\n    `void main() \\n` +\n    `{ \\n` +\n    `    czm_old_main(); \\n` +\n    `    if (out_FragColor.a == 0.0) { \\n` +\n    `       discard; \\n` +\n    `    } \\n` +\n    `    out_FragColor = czm_pickColor; \\n` +\n    `}`;\n\n  return `${renamedFS}\\n${pickMain}`;\n};\n\nfunction containsDefine(shaderSource, define) {\n  const defines = shaderSource.defines;\n  const definesLength = defines.length;\n  for (let i = 0; i < definesLength; ++i) {\n    if (defines[i] === define) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction containsString(shaderSource, string) {\n  const sources = shaderSource.sources;\n  const sourcesLength = sources.length;\n  for (let i = 0; i < sourcesLength; ++i) {\n    if (sources[i].indexOf(string) !== -1) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction findFirstString(shaderSource, strings) {\n  const stringsLength = strings.length;\n  for (let i = 0; i < stringsLength; ++i) {\n    const string = strings[i];\n    if (containsString(shaderSource, string)) {\n      return string;\n    }\n  }\n  return undefined;\n}\n\nconst normalVaryingNames = [\"v_normalEC\", \"v_normal\"];\n\nShaderSource.findNormalVarying = function (shaderSource) {\n  // Fix for Model: the shader text always has the word v_normalEC\n  // wrapped in an #ifdef so instead of looking for v_normalEC look for the define\n  if (containsString(shaderSource, \"#ifdef HAS_NORMALS\")) {\n    if (containsDefine(shaderSource, \"HAS_NORMALS\")) {\n      return \"v_normalEC\";\n    }\n    return undefined;\n  }\n\n  return findFirstString(shaderSource, normalVaryingNames);\n};\n\nconst positionVaryingNames = [\"v_positionEC\"];\n\nShaderSource.findPositionVarying = function (shaderSource) {\n  return findFirstString(shaderSource, positionVaryingNames);\n};\nexport default ShaderSource;\n","/**\n * A utility for dynamically-generating a GLSL struct.\n *\n * @alias ShaderStruct\n * @constructor\n *\n * @see {@link ShaderBuilder}\n * @param {string} name The name of the struct as it will appear in the shader.\n * @example\n * // Generate the struct:\n * //\n * // struct Attributes\n * // {\n * //     vec3 position;\n * //     vec3 normal;\n * //     vec2 texCoord;\n * // };\n * const struct = new ShaderStruct(\"Attributes\");\n * struct.addField(\"vec3\", \"position\");\n * struct.addField(\"vec3\", \"normal\");\n * struct.addField(\"vec2\", \"texCoord\");\n * const generatedLines = struct.generateGlslLines();\n *\n * @private\n */\nfunction ShaderStruct(name) {\n  this.name = name;\n  this.fields = [];\n}\n\n/**\n * Add a field to the struct\n * @param {string} type The type of the struct field\n * @param {string} identifier The identifier of the struct field\n */\nShaderStruct.prototype.addField = function (type, identifier) {\n  const field = `    ${type} ${identifier};`;\n  this.fields.push(field);\n};\n\n/**\n * Generate a list of lines of GLSL code for use with {@link ShaderBuilder}\n * @return {string[]} The generated GLSL code.\n */\nShaderStruct.prototype.generateGlslLines = function () {\n  let fields = this.fields;\n  if (fields.length === 0) {\n    // GLSL requires structs to have at least one field\n    fields = [\"    float _empty;\"];\n  }\n\n  return [].concat(`struct ${this.name}`, \"{\", fields, \"};\");\n};\n\nexport default ShaderStruct;\n","import clone from \"../Core/clone.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Context from \"./Context.js\";\n\n/**\n * Enables a single WebGL context to be used by any number of {@link Scene}s.\n * You can pass a SharedContext in place of a {@link ContextOptions} to the constructors of {@link Scene}, {@link CesiumWidget}, and {@link Viewer}.\n * {@link Primitive}s associated with the shared WebGL context can be displayed in any Scene that uses the same context.\n * The context renders each Scene to an off-screen canvas, then blits the result to that Scene's on-screen canvas.\n *\n * @private\n * @alias SharedContext\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {ContextOptions} [options.contextOptions] Context and WebGL creation properties.\n * @param {boolean} [options.autoDestroy=true] Destroys this context and all of its WebGL resources after all Scenes using the context are destroyed.\n\n * @see {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}\n *\n * @example\n * // Create two Scenes sharing a single WebGL context\n * const context = new Cesium.SharedContext();\n * const scene1 = new Cesium.Scene({\n *   canvas: canvas1,\n *   contextOptions: context,\n * });\n * const scene2 = new Cesium.Scene({\n *   canvas: canvas2,\n *   contextOptions: context,\n * });\n */\nfunction SharedContext(options) {\n  this._autoDestroy = options?.autoDestroy ?? true;\n  this._canvas = document.createElement(\"canvas\");\n  this._context = new Context(this._canvas, clone(options?.contextOptions));\n  this._canvases = [];\n}\n\n/**\n * Creates an instance of {@link Context} that manages the shared WebGL context for a specific canvas.\n * @param {HTMLCanvasElement} canvas The canvas element to which the context will be associated\n * @returns {Context} The created context instance\n * @private\n */\nSharedContext.prototype.createSceneContext = function (canvas) {\n  const context2d = canvas.getContext(\"2d\", { alpha: true });\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!context2d) {\n    throw new DeveloperError(\n      \"canvas used with SharedContext must provide a 2d context\",\n    );\n  }\n\n  if (this._canvases.includes(canvas)) {\n    throw new DeveloperError(\"canvas is already associated with a scene\");\n  }\n  //>>includeEnd('debug');\n\n  const sharedContext = this;\n  sharedContext._canvases.push(canvas);\n\n  let isDestroyed = false;\n  const destroy = function () {\n    isDestroyed = true;\n    const index = sharedContext._canvases.indexOf(canvas);\n    if (-1 !== index) {\n      sharedContext._canvases.splice(index, 1);\n      if (sharedContext._autoDestroy && sharedContext._canvases.length === 0) {\n        sharedContext.destroy();\n      }\n    }\n  };\n\n  const beginFrame = function () {\n    // Ensure the off-screen canvas is at least as large as the on-screen canvas.\n    const sharedCanvas = sharedContext._context.canvas;\n\n    const width = this.drawingBufferWidth;\n    if (sharedCanvas.width < width) {\n      sharedCanvas.width = width;\n    }\n\n    const height = this.drawingBufferHeight;\n    if (sharedCanvas.height < height) {\n      sharedCanvas.height = height;\n    }\n  };\n\n  const endFrame = function () {\n    // Blit the image from the off-screen canvas to the on-screen canvas.\n    const w = this.drawingBufferWidth;\n    const h = this.drawingBufferHeight;\n    const yOffset = sharedContext._context.canvas.height - h; // drawImage has top as Y=0, GL has bottom as Y=0\n    context2d.drawImage(\n      sharedContext._context.canvas,\n      0,\n      yOffset,\n      w,\n      h,\n      0,\n      0,\n      w,\n      h,\n    );\n\n    // Do normal post-frame cleanup.\n    sharedContext._context.endFrame();\n  };\n\n  const proxy = new Proxy(this._context, {\n    get(target, prop, receiver) {\n      if (prop === \"isDestroyed\") {\n        return function () {\n          return isDestroyed;\n        };\n      } else if (isDestroyed) {\n        //>>includeStart('debug', pragmas.debug);\n        throw new DeveloperError(\n          \"This object was destroyed, i.e., destroy() was called.\",\n        );\n        //>>includeEnd('debug');\n      }\n\n      switch (prop) {\n        case \"_canvas\":\n          return canvas;\n        case \"destroy\":\n          return destroy;\n        case \"drawingBufferWidth\":\n          return canvas.width;\n        case \"drawingBufferHeight\":\n          return canvas.height;\n        case \"beginFrame\":\n          return beginFrame;\n        case \"endFrame\":\n          return endFrame;\n        default:\n          return Reflect.get(target, prop, receiver);\n      }\n    },\n  });\n\n  return proxy;\n};\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * <br /><br />\n * By default, a SharedContext is destroyed automatically once the last Scene using it is destroyed, in which case it\n * is not necessary to call this method directly.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * context = context && context.destroy();\n *\n * @see SharedContext#isDestroyed\n */\nSharedContext.prototype.destroy = function () {\n  this._context.destroy();\n  destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see SharedContext#destroy\n */\nSharedContext.prototype.isDestroyed = function () {\n  return false;\n};\n\nexport default SharedContext;\n","import Check from \"../Core/Check.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * The WebGLSync interface is part of the WebGL 2 API and is used to synchronize activities between the GPU and the application.\n *\n * @param {object} options Object with the following properties:\n * @param {Context} context\n *\n * @exception {DeveloperError} A WebGL 2 context is required to use Sync operations.\n *\n * @private\n * @constructor\n */\nfunction Sync(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const context = options.context;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", context);\n  //>>includeEnd('debug');\n\n  if (!context._webgl2) {\n    throw new DeveloperError(\n      \"A WebGL 2 context is required to use Sync operations.\",\n    );\n  }\n\n  const gl = context._gl;\n  const sync = gl.fenceSync(WebGLConstants.SYNC_GPU_COMMANDS_COMPLETE, 0);\n\n  this._gl = gl;\n  this._sync = sync;\n}\nSync.create = function (options) {\n  return new Sync(options);\n};\n/**\n * Query the sync status of this Sync object.\n *\n * @returns {number} Returns a WebGLConstants indicating the status of the sync object (WebGLConstants.SIGNALED or WebGLConstants.UNSIGNALED).\n *\n * @private\n */\nSync.prototype.getStatus = function () {\n  const status = this._gl.getSyncParameter(\n    this._sync,\n    WebGLConstants.SYNC_STATUS,\n  );\n  return status;\n};\nSync.prototype.isDestroyed = function () {\n  return false;\n};\nSync.prototype.destroy = function () {\n  this._gl.deleteSync(this._sync);\n  return destroyObject(this);\n};\n\n/**\n * Incremantally polls the status of the Sync object until signaled then resolves.\n * Usually polling should be done once per frame.\n *\n * @example\n * try {\n *  await sync.waitForSignal(function (next) {\n *    setTimeout(next, 100);\n *  });\n *} catch (e) {\n *  throw \"Signal timeout\";\n *} finally {\n *  sync.destroy();\n *}\n *\n * @param {function} scheduleFunction Function for scheduling the next poll. Receives a callback as its only parameter.\n * @param {number} [ttl=10] Max number of iterations to poll until timeout.\n *\n * @exception {RuntimeError} Wait for signal timeout.\n */\nSync.prototype.waitForSignal = async function (scheduleFunction, ttl) {\n  const self = this;\n  ttl = ttl ?? 10;\n  function waitForSignal0(resolve, reject, ttl) {\n    return () => {\n      const syncStatus = self.getStatus();\n      const signaled = syncStatus === WebGLConstants.SIGNALED;\n      if (signaled) {\n        resolve();\n      } else if (ttl <= 0) {\n        reject(new RuntimeError(\"Wait for signal timeout\"));\n      } else {\n        scheduleFunction(waitForSignal0(resolve, reject, ttl - 1));\n      }\n    };\n  }\n  return new Promise((resolve, reject) => {\n    scheduleFunction(waitForSignal0(resolve, reject, ttl));\n  });\n};\nexport default Sync;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport MipmapHint from \"./MipmapHint.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport Sampler from \"./Sampler.js\";\nimport TextureMagnificationFilter from \"./TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"./TextureMinificationFilter.js\";\n\n/**\n * @typedef {object} Texture.ConstructorOptions\n *\n * @property {Context} context\n * @property {object} [source] The source for texel values to be loaded into the texture. A {@link ImageData}, {@link HTMLImageElement}, {@link HTMLCanvasElement},\n *                        {@link HTMLVideoElement}, {@link OffscreenCanvas}, or {@link ImageBitmap},\n *                        or an object with width, height, and arrayBufferView properties.\n * @property {PixelFormat} [pixelFormat=PixelFormat.RGBA] The format of each pixel, i.e., the number of components it has and what they represent.\n * @property {PixelDatatype} [pixelDatatype=PixelDatatype.UNSIGNED_BYTE] The data type of each pixel.\n * @property {boolean} [flipY=true] If true, the source values will be read as if the y-axis is inverted (y=0 at the top).\n * @property {boolean} [skipColorSpaceConversion=false] If true, color space conversions will be skipped when reading the texel values.\n * @property {Sampler} [sampler] Information about how to sample the texture.\n * @property {number} [width] The pixel width of the texture. If not supplied, must be available from the source.\n * @property {number} [height] The pixel height of the texture. If not supplied, must be available from the source.\n * @property {boolean} [preMultiplyAlpha] If true, the alpha channel will be multiplied into the other channels.\n * @property {string} [id] A unique identifier for the texture. If this is not given, then a GUID will be created.\n *\n * @private\n */\n\n/**\n * A wrapper for a {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLTexture|WebGLTexture}\n * to abstract away the verbose GL calls associated with setting up a texture.\n *\n * @alias Texture\n * @constructor\n *\n * @param {Texture.ConstructorOptions} options\n * @private\n */\nfunction Texture(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  const {\n    context,\n    source,\n    pixelFormat = PixelFormat.RGBA,\n    pixelDatatype = PixelDatatype.UNSIGNED_BYTE,\n    flipY = true,\n    skipColorSpaceConversion = false,\n    sampler = new Sampler(),\n  } = options;\n\n  let { width, height } = options;\n  if (defined(source)) {\n    // Make sure we are using the element's intrinsic width and height where available\n    if (!defined(width)) {\n      width = source.videoWidth ?? source.naturalWidth ?? source.width;\n    }\n    if (!defined(height)) {\n      height = source.videoHeight ?? source.naturalHeight ?? source.height;\n    }\n  }\n\n  // Use premultiplied alpha for opaque textures should perform better on Chrome:\n  // http://media.tojicode.com/webglCamp4/#20\n  const preMultiplyAlpha =\n    options.preMultiplyAlpha ||\n    pixelFormat === PixelFormat.RGB ||\n    pixelFormat === PixelFormat.LUMINANCE;\n\n  const internalFormat = PixelFormat.toInternalFormat(\n    pixelFormat,\n    pixelDatatype,\n    context,\n  );\n\n  const isCompressed = PixelFormat.isCompressedFormat(internalFormat);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(width) || !defined(height)) {\n    throw new DeveloperError(\n      \"options requires a source field to create an initialized texture or width and height fields to create a blank texture.\",\n    );\n  }\n\n  Check.typeOf.number.greaterThan(\"width\", width, 0);\n\n  if (width > ContextLimits.maximumTextureSize) {\n    throw new DeveloperError(\n      `Width must be less than or equal to the maximum texture size (${ContextLimits.maximumTextureSize}).  Check maximumTextureSize.`,\n    );\n  }\n\n  Check.typeOf.number.greaterThan(\"height\", height, 0);\n\n  if (height > ContextLimits.maximumTextureSize) {\n    throw new DeveloperError(\n      `Height must be less than or equal to the maximum texture size (${ContextLimits.maximumTextureSize}).  Check maximumTextureSize.`,\n    );\n  }\n\n  if (!PixelFormat.validate(pixelFormat)) {\n    throw new DeveloperError(\"Invalid options.pixelFormat.\");\n  }\n\n  if (!isCompressed && !PixelDatatype.validate(pixelDatatype)) {\n    throw new DeveloperError(\"Invalid options.pixelDatatype.\");\n  }\n\n  if (\n    pixelFormat === PixelFormat.DEPTH_COMPONENT &&\n    pixelDatatype !== PixelDatatype.UNSIGNED_SHORT &&\n    pixelDatatype !== PixelDatatype.UNSIGNED_INT\n  ) {\n    throw new DeveloperError(\n      \"When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.\",\n    );\n  }\n\n  if (\n    pixelFormat === PixelFormat.DEPTH_STENCIL &&\n    pixelDatatype !== PixelDatatype.UNSIGNED_INT_24_8\n  ) {\n    throw new DeveloperError(\n      \"When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8.\",\n    );\n  }\n\n  if (pixelDatatype === PixelDatatype.FLOAT && !context.floatingPointTexture) {\n    throw new DeveloperError(\n      \"When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.  Check context.floatingPointTexture.\",\n    );\n  }\n\n  if (\n    pixelDatatype === PixelDatatype.HALF_FLOAT &&\n    !context.halfFloatingPointTexture\n  ) {\n    throw new DeveloperError(\n      \"When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension. Check context.halfFloatingPointTexture.\",\n    );\n  }\n\n  if (PixelFormat.isDepthFormat(pixelFormat)) {\n    if (defined(source)) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.\",\n      );\n    }\n\n    if (!context.depthTexture) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture.  Check context.depthTexture.\",\n      );\n    }\n  }\n\n  if (isCompressed) {\n    if (!defined(source) || !defined(source.arrayBufferView)) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is compressed, options.source.arrayBufferView must be defined.\",\n      );\n    }\n\n    if (PixelFormat.isDXTFormat(internalFormat) && !context.s3tc) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is S3TC compressed, this WebGL implementation must support the WEBGL_compressed_texture_s3tc extension. Check context.s3tc.\",\n      );\n    } else if (PixelFormat.isPVRTCFormat(internalFormat) && !context.pvrtc) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is PVRTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_pvrtc extension. Check context.pvrtc.\",\n      );\n    } else if (PixelFormat.isASTCFormat(internalFormat) && !context.astc) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is ASTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_astc extension. Check context.astc.\",\n      );\n    } else if (PixelFormat.isETC2Format(internalFormat) && !context.etc) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is ETC2 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc extension. Check context.etc.\",\n      );\n    } else if (PixelFormat.isETC1Format(internalFormat) && !context.etc1) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is ETC1 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc1 extension. Check context.etc1.\",\n      );\n    } else if (PixelFormat.isBC7Format(internalFormat) && !context.bc7) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is BC7 compressed, this WebGL implementation must support the EXT_texture_compression_bptc extension. Check context.bc7.\",\n      );\n    }\n\n    if (\n      PixelFormat.compressedTextureSizeInBytes(\n        internalFormat,\n        width,\n        height,\n      ) !== source.arrayBufferView.byteLength\n    ) {\n      throw new DeveloperError(\n        \"The byte length of the array buffer is invalid for the compressed texture with the given width and height.\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  const gl = context._gl;\n\n  const sizeInBytes = isCompressed\n    ? PixelFormat.compressedTextureSizeInBytes(pixelFormat, width, height)\n    : PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, width, height);\n\n  this._id = options.id ?? createGuid();\n  this._context = context;\n  this._textureFilterAnisotropic = context._textureFilterAnisotropic;\n  this._textureTarget = gl.TEXTURE_2D;\n  this._texture = gl.createTexture();\n  this._internalFormat = internalFormat;\n  this._pixelFormat = pixelFormat;\n  this._pixelDatatype = pixelDatatype;\n  this._width = width;\n  this._height = height;\n  this._dimensions = new Cartesian2(width, height);\n  this._hasMipmap = false;\n  this._sizeInBytes = sizeInBytes;\n  this._preMultiplyAlpha = preMultiplyAlpha;\n  this._flipY = flipY;\n  this._initialized = false;\n  this._sampler = undefined;\n\n  this._sampler = sampler;\n  setupSampler(this, sampler);\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(this._textureTarget, this._texture);\n\n  if (defined(source)) {\n    if (skipColorSpaceConversion) {\n      gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n    } else {\n      gl.pixelStorei(\n        gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n        gl.BROWSER_DEFAULT_WEBGL,\n      );\n    }\n    if (defined(source.arrayBufferView)) {\n      const isCompressed = PixelFormat.isCompressedFormat(internalFormat);\n      if (isCompressed) {\n        loadCompressedBufferSource(this, source);\n      } else {\n        loadBufferSource(this, source);\n      }\n    } else if (defined(source.framebuffer)) {\n      loadFramebufferSource(this, source);\n    } else {\n      loadImageSource(this, source);\n    }\n    this._initialized = true;\n  } else {\n    loadNull(this);\n  }\n\n  gl.bindTexture(this._textureTarget, null);\n}\n\n/**\n * Load compressed texel data from a buffer into a texture.\n *\n * @param {Texture} texture The texture to which texel values will be loaded.\n * @param {object} source The source for texel values to be loaded into the texture.\n *\n * @private\n */\nfunction loadCompressedBufferSource(texture, source) {\n  const context = texture._context;\n  const gl = context._gl;\n  const textureTarget = texture._textureTarget;\n  const internalFormat = texture._internalFormat;\n\n  const { width, height } = texture;\n\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n  gl.compressedTexImage2D(\n    textureTarget,\n    0,\n    internalFormat,\n    width,\n    height,\n    0,\n    source.arrayBufferView,\n  );\n\n  if (defined(source.mipLevels)) {\n    let mipWidth = width;\n    let mipHeight = height;\n    for (let i = 0; i < source.mipLevels.length; ++i) {\n      mipWidth = nextMipSize(mipWidth);\n      mipHeight = nextMipSize(mipHeight);\n      gl.compressedTexImage2D(\n        textureTarget,\n        i + 1,\n        internalFormat,\n        mipWidth,\n        mipHeight,\n        0,\n        source.mipLevels[i],\n      );\n    }\n  }\n}\n\n/**\n * Load texel data from a buffer into a texture.\n *\n * @param {Texture} texture The texture to which texel values will be loaded.\n * @param {object} source The source for texel values to be loaded into the texture.\n *\n * @private\n */\nfunction loadBufferSource(texture, source) {\n  const context = texture._context;\n  const gl = context._gl;\n  const textureTarget = texture._textureTarget;\n  const internalFormat = texture._internalFormat;\n\n  const { width, height, pixelFormat, pixelDatatype, flipY } = texture;\n\n  const unpackAlignment = PixelFormat.alignmentInBytes(\n    pixelFormat,\n    pixelDatatype,\n    width,\n  );\n\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n  let { arrayBufferView } = source;\n  if (flipY) {\n    arrayBufferView = PixelFormat.flipY(\n      arrayBufferView,\n      pixelFormat,\n      pixelDatatype,\n      width,\n      height,\n    );\n  }\n  gl.texImage2D(\n    textureTarget,\n    0,\n    internalFormat,\n    width,\n    height,\n    0,\n    pixelFormat,\n    PixelDatatype.toWebGLConstant(pixelDatatype, context),\n    arrayBufferView,\n  );\n\n  if (defined(source.mipLevels)) {\n    let mipWidth = width;\n    let mipHeight = height;\n    for (let i = 0; i < source.mipLevels.length; ++i) {\n      mipWidth = nextMipSize(mipWidth);\n      mipHeight = nextMipSize(mipHeight);\n      gl.texImage2D(\n        textureTarget,\n        i + 1,\n        internalFormat,\n        mipWidth,\n        mipHeight,\n        0,\n        pixelFormat,\n        PixelDatatype.toWebGLConstant(pixelDatatype, context),\n        source.mipLevels[i],\n      );\n    }\n  }\n}\n\n/**\n * Load texel data from a buffer into part of a texture\n *\n * @param {Texture} texture The texture to which texel values will be loaded.\n * @param {TypedArray} arrayBufferView The texel values to be loaded into the texture.\n * @param {number} xOffset The texel x coordinate of the lower left corner of the subregion of the texture to be updated.\n * @param {number} yOffset The texel y coordinate of the lower left corner of the subregion of the texture to be updated.\n * @param {number} width The width of the source data, in pixels.\n * @param {number} height The height of the source data, in pixels.\n *\n * @private\n */\nfunction loadPartialBufferSource(\n  texture,\n  arrayBufferView,\n  xOffset,\n  yOffset,\n  width,\n  height,\n) {\n  const context = texture._context;\n  const gl = context._gl;\n\n  const { pixelFormat, pixelDatatype } = texture;\n\n  const unpackAlignment = PixelFormat.alignmentInBytes(\n    pixelFormat,\n    pixelDatatype,\n    width,\n  );\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n  if (texture.flipY) {\n    arrayBufferView = PixelFormat.flipY(\n      arrayBufferView,\n      pixelFormat,\n      pixelDatatype,\n      width,\n      height,\n    );\n  }\n  gl.texSubImage2D(\n    texture._textureTarget,\n    0,\n    xOffset,\n    yOffset,\n    width,\n    height,\n    pixelFormat,\n    PixelDatatype.toWebGLConstant(pixelDatatype, context),\n    arrayBufferView,\n  );\n}\n\n/**\n * Load texel data from a framebuffer into a texture.\n *\n * @param {Texture} texture The texture to which texel values will be loaded.\n * @param {object} source The source for texel values to be loaded into the texture.\n *\n * @private\n */\nfunction loadFramebufferSource(texture, source) {\n  const context = texture._context;\n  const gl = context._gl;\n\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n  if (source.framebuffer !== context.defaultFramebuffer) {\n    source.framebuffer._bind();\n  }\n\n  gl.copyTexImage2D(\n    texture._textureTarget,\n    0,\n    texture._internalFormat,\n    source.xOffset,\n    source.yOffset,\n    texture.width,\n    texture.height,\n    0,\n  );\n\n  if (source.framebuffer !== context.defaultFramebuffer) {\n    source.framebuffer._unBind();\n  }\n}\n\n/**\n * Load texel data from an Image into a texture.\n *\n * @param {Texture} texture The texture to which texel values will be loaded.\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|OffscreenCanvas|ImageBitmap} source The source for texel values to be loaded into the texture.\n *\n * @private\n */\nfunction loadImageSource(texture, source) {\n  const context = texture._context;\n  const gl = context._gl;\n\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.preMultiplyAlpha);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY);\n\n  gl.texImage2D(\n    texture._textureTarget,\n    0,\n    texture._internalFormat,\n    texture.pixelFormat,\n    PixelDatatype.toWebGLConstant(texture.pixelDatatype, context),\n    source,\n  );\n}\n\n/**\n * Load texel data from an Image into part of a texture\n *\n * @param {Texture} texture The texture to which texel values will be loaded.\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} source The source for texel values to be loaded into the texture.\n * @param {number} xOffset The texel x coordinate of the lower left corner of the subregion of the texture to be updated.\n * @param {number} yOffset The texel y coordinate of the lower left corner of the subregion of the texture to be updated.\n *\n * @private\n */\nfunction loadPartialImageSource(texture, source, xOffset, yOffset) {\n  const context = texture._context;\n  const gl = context._gl;\n\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.preMultiplyAlpha);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY);\n\n  gl.texSubImage2D(\n    texture._textureTarget,\n    0,\n    xOffset,\n    yOffset,\n    texture.pixelFormat,\n    PixelDatatype.toWebGLConstant(texture.pixelDatatype, context),\n    source,\n  );\n}\n\n/**\n * Compute a dimension of the image for the next mip level.\n *\n * @param {number} currentSize The size of the current mip level.\n * @returns {number} The size of the next mip level.\n *\n * @private\n */\nfunction nextMipSize(currentSize) {\n  const nextSize = Math.floor(currentSize / 2) | 0;\n  return Math.max(nextSize, 1);\n}\n\n/**\n * Allocate a texture in GPU memory, without providing any image data.\n *\n * @param {Texture} texture The texture to be initialized with null values.\n *\n * @private\n */\nfunction loadNull(texture) {\n  const context = texture._context;\n\n  context._gl.texImage2D(\n    texture._textureTarget,\n    0,\n    texture._internalFormat,\n    texture._width,\n    texture._height,\n    0,\n    texture._pixelFormat,\n    PixelDatatype.toWebGLConstant(texture._pixelDatatype, context),\n    null,\n  );\n}\n\n/**\n * This function is identical to using the Texture constructor except that it can be\n * replaced with a mock/spy in tests.\n * @private\n */\nTexture.create = function (options) {\n  return new Texture(options);\n};\n\n/**\n * Creates a texture, and copies a subimage of the framebuffer to it.  When called without arguments,\n * the texture is the same width and height as the framebuffer and contains its contents.\n *\n * @param {object} options Object with the following properties:\n * @param {Context} options.context The context in which the Texture gets created.\n * @param {PixelFormat} [options.pixelFormat=PixelFormat.RGB] The texture's internal pixel format.\n * @param {number} [options.framebufferXOffset=0] An offset in the x direction in the framebuffer where copying begins from.\n * @param {number} [options.framebufferYOffset=0] An offset in the y direction in the framebuffer where copying begins from.\n * @param {number} [options.width=canvas.clientWidth] The width of the texture in texels.\n * @param {number} [options.height=canvas.clientHeight] The height of the texture in texels.\n * @param {Framebuffer} [options.framebuffer=defaultFramebuffer] The framebuffer from which to create the texture.  If this\n *        parameter is not specified, the default framebuffer is used.\n * @returns {Texture} A texture with contents from the framebuffer.\n *\n * @exception {DeveloperError} Invalid pixelFormat.\n * @exception {DeveloperError} pixelFormat cannot be DEPTH_COMPONENT, DEPTH_STENCIL or a compressed format.\n * @exception {DeveloperError} framebufferXOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferYOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferXOffset + width must be less than or equal to canvas.clientWidth.\n * @exception {DeveloperError} framebufferYOffset + height must be less than or equal to canvas.clientHeight.\n *\n *\n * @example\n * // Create a texture with the contents of the framebuffer.\n * const t = Texture.fromFramebuffer({\n *     context : context\n * });\n *\n * @see Sampler\n *\n * @private\n */\nTexture.fromFramebuffer = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  const context = options.context;\n  const {\n    pixelFormat = PixelFormat.RGB,\n    framebufferXOffset = 0,\n    framebufferYOffset = 0,\n    width = context.drawingBufferWidth,\n    height = context.drawingBufferHeight,\n    framebuffer,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!PixelFormat.validate(pixelFormat)) {\n    throw new DeveloperError(\"Invalid pixelFormat.\");\n  }\n  if (\n    PixelFormat.isDepthFormat(pixelFormat) ||\n    PixelFormat.isCompressedFormat(pixelFormat)\n  ) {\n    throw new DeveloperError(\n      \"pixelFormat cannot be DEPTH_COMPONENT, DEPTH_STENCIL or a compressed format.\",\n    );\n  }\n  Check.defined(\"options.context\", context);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"framebufferXOffset\",\n    framebufferXOffset,\n    0,\n  );\n  Check.typeOf.number.greaterThanOrEquals(\n    \"framebufferYOffset\",\n    framebufferYOffset,\n    0,\n  );\n  if (framebufferXOffset + width > context.drawingBufferWidth) {\n    throw new DeveloperError(\n      \"framebufferXOffset + width must be less than or equal to drawingBufferWidth\",\n    );\n  }\n  if (framebufferYOffset + height > context.drawingBufferHeight) {\n    throw new DeveloperError(\n      \"framebufferYOffset + height must be less than or equal to drawingBufferHeight.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const texture = new Texture({\n    context: context,\n    width: width,\n    height: height,\n    pixelFormat: pixelFormat,\n    source: {\n      framebuffer: defined(framebuffer)\n        ? framebuffer\n        : context.defaultFramebuffer,\n      xOffset: framebufferXOffset,\n      yOffset: framebufferYOffset,\n      width: width,\n      height: height,\n    },\n  });\n\n  return texture;\n};\n\nObject.defineProperties(Texture.prototype, {\n  /**\n   * A unique id for the texture\n   * @memberof Texture.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * The sampler to use when sampling this texture.\n   * Create a sampler by calling {@link Sampler}.  If this\n   * parameter is not specified, a default sampler is used.  The default sampler clamps texture\n   * coordinates in both directions, uses linear filtering for both magnification and minification,\n   * and uses a maximum anisotropy of 1.0.\n   * @memberof Texture.prototype\n   * @type {Sampler}\n   * @private\n   */\n  sampler: {\n    get: function () {\n      return this._sampler;\n    },\n    set: function (sampler) {\n      setupSampler(this, sampler);\n      this._sampler = sampler;\n    },\n  },\n  pixelFormat: {\n    get: function () {\n      return this._pixelFormat;\n    },\n  },\n  pixelDatatype: {\n    get: function () {\n      return this._pixelDatatype;\n    },\n  },\n  dimensions: {\n    get: function () {\n      return this._dimensions;\n    },\n  },\n  preMultiplyAlpha: {\n    get: function () {\n      return this._preMultiplyAlpha;\n    },\n  },\n  flipY: {\n    get: function () {\n      return this._flipY;\n    },\n  },\n  width: {\n    get: function () {\n      return this._width;\n    },\n  },\n  height: {\n    get: function () {\n      return this._height;\n    },\n  },\n  sizeInBytes: {\n    get: function () {\n      if (this._hasMipmap) {\n        return Math.floor((this._sizeInBytes * 4) / 3);\n      }\n      return this._sizeInBytes;\n    },\n  },\n  _target: {\n    get: function () {\n      return this._textureTarget;\n    },\n  },\n});\n\n/**\n * Set up a sampler for use with a texture\n * @param {Texture} texture The texture to be sampled by this sampler\n * @param {Sampler} sampler Information about how to sample the texture\n * @private\n */\nfunction setupSampler(texture, sampler) {\n  let { minificationFilter, magnificationFilter } = sampler;\n\n  const mipmap = [\n    TextureMinificationFilter.NEAREST_MIPMAP_NEAREST,\n    TextureMinificationFilter.NEAREST_MIPMAP_LINEAR,\n    TextureMinificationFilter.LINEAR_MIPMAP_NEAREST,\n    TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n  ].includes(minificationFilter);\n\n  const context = texture._context;\n  const pixelFormat = texture._pixelFormat;\n  const pixelDatatype = texture._pixelDatatype;\n\n  // float textures only support nearest filtering unless the linear extensions are supported\n  if (\n    (pixelDatatype === PixelDatatype.FLOAT && !context.textureFloatLinear) ||\n    (pixelDatatype === PixelDatatype.HALF_FLOAT &&\n      !context.textureHalfFloatLinear)\n  ) {\n    // override the sampler's settings\n    minificationFilter = mipmap\n      ? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST\n      : TextureMinificationFilter.NEAREST;\n    magnificationFilter = TextureMagnificationFilter.NEAREST;\n  }\n\n  // WebGL 2 depth texture only support nearest filtering. See section 3.8.13 OpenGL ES 3 spec\n  if (context.webgl2) {\n    if (PixelFormat.isDepthFormat(pixelFormat)) {\n      minificationFilter = TextureMinificationFilter.NEAREST;\n      magnificationFilter = TextureMagnificationFilter.NEAREST;\n    }\n  }\n\n  const gl = context._gl;\n  const target = texture._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, texture._texture);\n  gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);\n  gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);\n  gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);\n  gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);\n  if (defined(texture._textureFilterAnisotropic)) {\n    gl.texParameteri(\n      target,\n      texture._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,\n      sampler.maximumAnisotropy,\n    );\n  }\n  gl.bindTexture(target, null);\n}\n\n/**\n * Copy new image data into this texture, from a source {@link ImageData}, {@link HTMLImageElement}, {@link HTMLCanvasElement}, or {@link HTMLVideoElement}.\n * or an object with width, height, and arrayBufferView properties.\n * @param {object} options Object with the following properties:\n * @param {object} options.source The source {@link ImageData}, {@link HTMLImageElement}, {@link HTMLCanvasElement}, {@link HTMLVideoElement},\n *                        {@link OffscreenCanvas}, or {@link ImageBitmap},\n *                        or an object with width, height, and arrayBufferView properties.\n * @param {number} [options.xOffset=0] The offset in the x direction within the texture to copy into.\n * @param {number} [options.yOffset=0] The offset in the y direction within the texture to copy into.\n * @param {boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the texture will be ignored.\n *\n * @exception {DeveloperError} Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\n * @exception {DeveloperError} Cannot call copyFrom with a compressed texture pixel format.\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @exception {DeveloperError} This texture was destroyed, i.e., destroy() was called.\n * @private\n * @example\n * texture.copyFrom({\n *  source: {\n *   width : 1,\n *   height : 1,\n *   arrayBufferView : new Uint8Array([255, 0, 0, 255])\n *  }\n * });\n */\nTexture.prototype.copyFrom = function (options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options\", options);\n  //>>includeEnd('debug');\n\n  const {\n    xOffset = 0,\n    yOffset = 0,\n    source,\n    skipColorSpaceConversion = false,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.source\", source);\n  if (PixelFormat.isDepthFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\",\n    );\n  }\n  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call copyFrom with a compressed texture pixel format.\",\n    );\n  }\n  Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n  Check.typeOf.number.lessThanOrEquals(\n    \"xOffset + options.source.width\",\n    xOffset + source.width,\n    this._width,\n  );\n  Check.typeOf.number.lessThanOrEquals(\n    \"yOffset + options.source.height\",\n    yOffset + source.height,\n    this._height,\n  );\n  //>>includeEnd('debug');\n\n  const context = this._context;\n  const gl = context._gl;\n  const target = this._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n\n  let { width, height } = source;\n\n  // Make sure we are using the element's intrinsic width and height where available\n  if (defined(source.videoWidth) && defined(source.videoHeight)) {\n    width = source.videoWidth;\n    height = source.videoHeight;\n  } else if (defined(source.naturalWidth) && defined(source.naturalHeight)) {\n    width = source.naturalWidth;\n    height = source.naturalHeight;\n  }\n\n  if (skipColorSpaceConversion) {\n    gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n  } else {\n    gl.pixelStorei(\n      gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n      gl.BROWSER_DEFAULT_WEBGL,\n    );\n  }\n\n  let uploaded = false;\n  if (!this._initialized) {\n    if (\n      xOffset === 0 &&\n      yOffset === 0 &&\n      width === this._width &&\n      height === this._height\n    ) {\n      // initialize the entire texture\n      if (defined(source.arrayBufferView)) {\n        loadBufferSource(this, source);\n      } else {\n        loadImageSource(this, source);\n      }\n      uploaded = true;\n    } else {\n      gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n      loadNull(this);\n    }\n    this._initialized = true;\n  }\n\n  if (!uploaded) {\n    if (defined(source.arrayBufferView)) {\n      loadPartialBufferSource(\n        this,\n        source.arrayBufferView,\n        xOffset,\n        yOffset,\n        width,\n        height,\n      );\n    } else {\n      loadPartialImageSource(this, source, xOffset, yOffset);\n    }\n  }\n\n  gl.bindTexture(target, null);\n};\n\n/**\n * @param {number} [xOffset=0] The offset in the x direction within the texture to copy into.\n * @param {number} [yOffset=0] The offset in the y direction within the texture to copy into.\n * @param {number} [framebufferXOffset=0] optional\n * @param {number} [framebufferYOffset=0] optional\n * @param {number} [width=width] optional\n * @param {number} [height=height] optional\n * @private\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\n * @exception {DeveloperError} Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\n * @exception {DeveloperError} Cannot call copyFrom with a compressed texture pixel format.\n * @exception {DeveloperError} This texture was destroyed, i.e., destroy() was called.\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferXOffset must be greater than or equal to zero.\n * @exception {DeveloperError} framebufferYOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + height must be less than or equal to height.\n */\nTexture.prototype.copyFromFramebuffer = function (\n  xOffset,\n  yOffset,\n  framebufferXOffset,\n  framebufferYOffset,\n  width,\n  height,\n) {\n  xOffset = xOffset ?? 0;\n  yOffset = yOffset ?? 0;\n  framebufferXOffset = framebufferXOffset ?? 0;\n  framebufferYOffset = framebufferYOffset ?? 0;\n  width = width ?? this._width;\n  height = height ?? this._height;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (PixelFormat.isDepthFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\",\n    );\n  }\n  if (this._pixelDatatype === PixelDatatype.FLOAT) {\n    throw new DeveloperError(\n      \"Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.\",\n    );\n  }\n  if (this._pixelDatatype === PixelDatatype.HALF_FLOAT) {\n    throw new DeveloperError(\n      \"Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.\",\n    );\n  }\n  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call copyFrom with a compressed texture pixel format.\",\n    );\n  }\n\n  Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"framebufferXOffset\",\n    framebufferXOffset,\n    0,\n  );\n  Check.typeOf.number.greaterThanOrEquals(\n    \"framebufferYOffset\",\n    framebufferYOffset,\n    0,\n  );\n  Check.typeOf.number.lessThanOrEquals(\n    \"xOffset + width\",\n    xOffset + width,\n    this._width,\n  );\n  Check.typeOf.number.lessThanOrEquals(\n    \"yOffset + height\",\n    yOffset + height,\n    this._height,\n  );\n  //>>includeEnd('debug');\n\n  const gl = this._context._gl;\n  const target = this._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n  gl.copyTexSubImage2D(\n    target,\n    0,\n    xOffset,\n    yOffset,\n    framebufferXOffset,\n    framebufferYOffset,\n    width,\n    height,\n  );\n  gl.bindTexture(target, null);\n  this._initialized = true;\n};\n\n/**\n * @param {MipmapHint} [hint=MipmapHint.DONT_CARE] optional.\n * @private\n * @exception {DeveloperError} Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\n * @exception {DeveloperError} Cannot call generateMipmap when the texture pixel format is a compressed format.\n * @exception {DeveloperError} hint is invalid.\n * @exception {DeveloperError} This texture's width must be a power of two to call generateMipmap() in a WebGL1 context.\n * @exception {DeveloperError} This texture's height must be a power of two to call generateMipmap() in a WebGL1 context.\n * @exception {DeveloperError} This texture was destroyed, i.e., destroy() was called.\n */\nTexture.prototype.generateMipmap = function (hint) {\n  hint = hint ?? MipmapHint.DONT_CARE;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (PixelFormat.isDepthFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\",\n    );\n  }\n  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call generateMipmap with a compressed pixel format.\",\n    );\n  }\n  if (!this._context.webgl2) {\n    if (this._width > 1 && !CesiumMath.isPowerOfTwo(this._width)) {\n      throw new DeveloperError(\n        \"width must be a power of two to call generateMipmap() in a WebGL1 context.\",\n      );\n    }\n    if (this._height > 1 && !CesiumMath.isPowerOfTwo(this._height)) {\n      throw new DeveloperError(\n        \"height must be a power of two to call generateMipmap() in a WebGL1 context.\",\n      );\n    }\n  }\n  if (!MipmapHint.validate(hint)) {\n    throw new DeveloperError(\"hint is invalid.\");\n  }\n  //>>includeEnd('debug');\n\n  this._hasMipmap = true;\n\n  const gl = this._context._gl;\n  const target = this._textureTarget;\n\n  gl.hint(gl.GENERATE_MIPMAP_HINT, hint);\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n  gl.generateMipmap(target);\n  gl.bindTexture(target, null);\n};\n\nTexture.prototype.isDestroyed = function () {\n  return false;\n};\n\nTexture.prototype.destroy = function () {\n  this._context._gl.deleteTexture(this._texture);\n  return destroyObject(this);\n};\nexport default Texture;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport MipmapHint from \"./MipmapHint.js\";\nimport PixelDatatype from \"./PixelDatatype.js\";\nimport Sampler from \"./Sampler.js\";\nimport TextureMagnificationFilter from \"./TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"./TextureMinificationFilter.js\";\n\n/**\n * @typedef {object} Texture3D.Source\n * @property {number} width The width (in pixels) of the 3D texture source data.\n * @property {number} height The height (in pixels) of the 3D texture source data.\n * @property {number} depth The depth (in pixels) of the 3D texture source data.\n * @property {TypedArray|DataView} arrayBufferView The source data for a 3D texture. The type of each element needs to match the pixelDatatype.\n * @property {TypedArray|DataView} [mipLevels] An array of mip level data. Each element in the array should be a TypedArray or DataView that matches the pixelDatatype.\n */\n\n/**\n * @typedef {object} Texture3D.ConstructorOptions\n *\n * @property {Context} context\n * @property {Texture3D.Source} [source] The source for texel values to be loaded into the 3D texture.\n * @property {PixelFormat} [pixelFormat=PixelFormat.RGBA] The format of each pixel, i.e., the number of components it has and what they represent.\n * @property {PixelDatatype} [pixelDatatype=PixelDatatype.UNSIGNED_BYTE] The data type of each pixel.\n * @property {boolean} [flipY=true] If true, the source values will be read as if the y-axis is inverted (y=0 at the top).\n * @property {boolean} [skipColorSpaceConversion=false] If true, color space conversions will be skipped when reading the texel values.\n * @property {Sampler} [sampler] Information about how to sample the 3D texture.\n * @property {number} [width] The width (in pixels) of the 3D texture. If not supplied, must be available from the source.\n * @property {number} [height] The height (in pixels) of the 3D texture. If not supplied, must be available from the source.\n * @property {number} [depth] The depth (in pixels) of the 3D texture. If not supplied, must be available from the source.\n * @property {boolean} [preMultiplyAlpha] If true, the alpha channel will be multiplied into the other channels.\n * @property {string} [id] A unique identifier for the 3D texture. If this is not given, then a GUID will be created.\n *\n * @private\n */\n\n/**\n * A wrapper for a {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLTexture|WebGLTexture}\n * to abstract away the verbose GL calls associated with setting up a texture3D.\n *\n * @alias Texture3D\n * @constructor\n *\n * @param {Texture3D.ConstructorOptions} options\n * @private\n */\nfunction Texture3D(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  const {\n    context,\n    source,\n    pixelFormat = PixelFormat.RGBA,\n    pixelDatatype = PixelDatatype.UNSIGNED_BYTE,\n    flipY = true,\n    skipColorSpaceConversion = false,\n    sampler = new Sampler(),\n  } = options;\n\n  // 3D textures are not supported in a WebGL1 context. But we allow a stub context for testing.\n  if (!context.webgl2 && !defined(context.options.getWebGLStub)) {\n    throw new DeveloperError(\n      \"WebGL1 does not support texture3D. Please use a WebGL2 context.\",\n    );\n  }\n\n  let { width, height, depth } = options;\n  if (defined(source)) {\n    // Make sure we are using the element's intrinsic width and height where available\n    if (!defined(width)) {\n      width = source.width;\n    }\n    if (!defined(height)) {\n      height = source.height;\n    }\n    // depth is not used for 2D textures, but is required for 3D textures\n    if (!defined(depth)) {\n      depth = source.depth;\n    }\n  }\n\n  // Use premultiplied alpha for opaque textures should perform better on Chrome:\n  // http://media.tojicode.com/webglCamp4/#20\n  const preMultiplyAlpha =\n    options.preMultiplyAlpha ||\n    pixelFormat === PixelFormat.RGB ||\n    pixelFormat === PixelFormat.LUMINANCE;\n\n  const internalFormat = PixelFormat.toInternalFormat(\n    pixelFormat,\n    pixelDatatype,\n    context,\n  );\n\n  const isCompressed = PixelFormat.isCompressedFormat(internalFormat);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(width) || !defined(height) || !defined(depth)) {\n    throw new DeveloperError(\n      \"options requires a source field to create an initialized texture3D or width, height and depth fields to create a blank texture3D.\",\n    );\n  }\n\n  Check.typeOf.number.greaterThan(\"width\", width, 0);\n\n  if (width > ContextLimits.maximum3DTextureSize) {\n    throw new DeveloperError(\n      `Width must be less than or equal to the maximum texture3D size (${ContextLimits.maximum3DTextureSize}).  Check maximum3DTextureSize.`,\n    );\n  }\n\n  Check.typeOf.number.greaterThan(\"height\", height, 0);\n\n  if (height > ContextLimits.maximum3DTextureSize) {\n    throw new DeveloperError(\n      `Height must be less than or equal to the maximum texture3D size (${ContextLimits.maximum3DTextureSize}).  Check maximum3DTextureSize.`,\n    );\n  }\n\n  Check.typeOf.number.greaterThan(\"depth\", depth, 0);\n\n  if (depth > ContextLimits.maximum3DTextureSize) {\n    throw new DeveloperError(\n      `Depth must be less than or equal to the maximum texture3D size (${ContextLimits.maximum3DTextureSize}).  Check maximum3DTextureSize.`,\n    );\n  }\n\n  if (!PixelFormat.validate(pixelFormat)) {\n    throw new DeveloperError(\"Invalid options.pixelFormat.\");\n  }\n\n  if (!isCompressed && !PixelDatatype.validate(pixelDatatype)) {\n    throw new DeveloperError(\"Invalid options.pixelDatatype.\");\n  }\n\n  if (\n    pixelFormat === PixelFormat.DEPTH_COMPONENT &&\n    pixelDatatype !== PixelDatatype.UNSIGNED_SHORT &&\n    pixelDatatype !== PixelDatatype.UNSIGNED_INT\n  ) {\n    throw new DeveloperError(\n      \"When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.\",\n    );\n  }\n\n  if (\n    pixelFormat === PixelFormat.DEPTH_STENCIL &&\n    pixelDatatype !== PixelDatatype.UNSIGNED_INT_24_8\n  ) {\n    throw new DeveloperError(\n      \"When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8.\",\n    );\n  }\n\n  if (pixelDatatype === PixelDatatype.FLOAT && !context.floatingPointTexture) {\n    throw new DeveloperError(\n      \"When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.  Check context.floatingPointTexture.\",\n    );\n  }\n\n  if (\n    pixelDatatype === PixelDatatype.HALF_FLOAT &&\n    !context.halfFloatingPointTexture\n  ) {\n    throw new DeveloperError(\n      \"When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension. Check context.halfFloatingPointTexture.\",\n    );\n  }\n\n  if (PixelFormat.isDepthFormat(pixelFormat)) {\n    if (defined(source)) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.\",\n      );\n    }\n\n    if (!context.depthTexture) {\n      throw new DeveloperError(\n        \"When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture.  Check context.depthTexture.\",\n      );\n    }\n  }\n\n  if (isCompressed) {\n    throw new DeveloperError(\n      \"Texture3D does not currently support compressed formats.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const gl = context._gl;\n\n  const sizeInBytes = PixelFormat.texture3DSizeInBytes(\n    pixelFormat,\n    pixelDatatype,\n    width,\n    height,\n    depth,\n  );\n\n  this._id = options.id ?? createGuid();\n  this._context = context;\n  this._textureFilterAnisotropic = context._textureFilterAnisotropic;\n  this._textureTarget = gl.TEXTURE_3D;\n  this._texture = gl.createTexture();\n  this._internalFormat = internalFormat;\n  this._pixelFormat = pixelFormat;\n  this._pixelDatatype = pixelDatatype;\n  this._width = width;\n  this._height = height;\n  this._depth = depth;\n  this._dimensions = new Cartesian3(width, height, depth);\n  this._hasMipmap = false;\n  this._sizeInBytes = sizeInBytes;\n  this._preMultiplyAlpha = preMultiplyAlpha;\n  this._flipY = flipY;\n  this._initialized = false;\n  this._sampler = undefined;\n\n  this._sampler = sampler;\n  setupSampler(this, sampler);\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(this._textureTarget, this._texture);\n\n  if (defined(source)) {\n    if (skipColorSpaceConversion) {\n      gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n    } else {\n      gl.pixelStorei(\n        gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n        gl.BROWSER_DEFAULT_WEBGL,\n      );\n    }\n    if (!defined(source.arrayBufferView)) {\n      throw new DeveloperError(\n        \"For Texture3D, options.source.arrayBufferView must be defined\",\n      );\n    }\n\n    loadBufferSource(this, source);\n\n    this._initialized = true;\n  } else {\n    loadNull(this);\n  }\n\n  gl.bindTexture(this._textureTarget, null);\n}\n\n/**\n * Load texel data from a buffer into a texture3D.\n *\n * @param {Texture3D} texture3D The texture3D to which texel values will be loaded.\n * @param {Texture3D.Source} source The source for texel values to be loaded into the texture3D.\n *\n * @private\n */\nfunction loadBufferSource(texture3D, source) {\n  const context = texture3D._context;\n  const gl = context._gl;\n  const textureTarget = texture3D._textureTarget;\n  const internalFormat = texture3D._internalFormat;\n\n  const { width, height, depth, pixelFormat, pixelDatatype, flipY } = texture3D;\n\n  const unpackAlignment = PixelFormat.alignmentInBytes(\n    pixelFormat,\n    pixelDatatype,\n    width,\n  );\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n  const { arrayBufferView } = source;\n  if (flipY) {\n    console.warn(\"texture3D.flipY is not supported.\");\n  }\n\n  let levels = 1;\n  if (source.mipLevels && source.mipLevels.length) {\n    levels = source.mipLevels.length + 1;\n  }\n  gl.texStorage3D(textureTarget, levels, internalFormat, width, height, depth);\n\n  gl.texSubImage3D(\n    textureTarget,\n    0,\n    0,\n    0,\n    0,\n    width,\n    height,\n    depth,\n    pixelFormat,\n    PixelDatatype.toWebGLConstant(pixelDatatype, context),\n    arrayBufferView,\n  );\n\n  if (levels > 1) {\n    let mipWidth = width;\n    let mipHeight = height;\n    let mipDepth = depth;\n    for (let i = 0; i < source.mipLevels.length; ++i) {\n      mipWidth = nextMipSize(mipWidth);\n      mipHeight = nextMipSize(mipHeight);\n      mipDepth = nextMipSize(mipDepth);\n      gl.texSubImage3D(\n        textureTarget,\n        i + 1,\n        0,\n        0,\n        0,\n        mipWidth,\n        mipHeight,\n        mipDepth,\n        pixelFormat,\n        PixelDatatype.toWebGLConstant(pixelDatatype, context),\n        source.mipLevels[i],\n      );\n    }\n  }\n}\n\n/**\n * Copy new image data into this texture, from a source object with width, height, depth, and arrayBufferView properties.\n * @param {object} options Object with the following properties:\n * @param {object} options.source The source object with width, height, depth, and arrayBufferView properties.\n * @param {number} [options.xOffset=0] The offset in the x direction within the texture to copy into.\n * @param {number} [options.yOffset=0] The offset in the y direction within the texture to copy into.\n * @param {number} [options.zOffset=0] The offset in the z direction within the texture to copy into.\n * @param {boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the texture will be ignored.\n *\n * @exception {DeveloperError} Unsupported copyFrom with a compressed texture pixel format.\n * @exception {DeveloperError} xOffset must be greater than or equal to zero.\n * @exception {DeveloperError} yOffset must be greater than or equal to zero.\n * @exception {DeveloperError} zOffset must be greater than or equal to zero.\n * @exception {DeveloperError} xOffset + source.width must be less than or equal to width.\n * @exception {DeveloperError} yOffset + source.height must be less than or equal to height.\n * @exception {DeveloperError} zOffset + source.depth must be less than or equal to depth.\n * @exception {DeveloperError} This texture was destroyed, i.e., destroy() was called.\n * @private\n * @example\n * texture.copyFrom({\n *  source: {\n *   width : 1,\n *   height : 1,\n *   depth : 1,\n *   arrayBufferView : new Uint8Array([255, 0, 0, 255])\n *  }\n * });\n */\nTexture3D.prototype.copyFrom = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const { source, xOffset = 0, yOffset = 0, zOffset = 0 } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.source\", source);\n  Check.defined(\"options.source.arrayBufferView\", source.arrayBufferView);\n  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Unsupported copyFrom with a compressed texture pixel format.\",\n    );\n  }\n  Check.typeOf.number.greaterThanOrEquals(\"xOffset\", xOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"yOffset\", yOffset, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"zOffset\", zOffset, 0);\n  Check.typeOf.number.lessThanOrEquals(\n    \"xOffset + options.source.width\",\n    xOffset + source.width,\n    this._width,\n  );\n  Check.typeOf.number.lessThanOrEquals(\n    \"yOffset + options.source.height\",\n    yOffset + source.height,\n    this._height,\n  );\n  Check.typeOf.number.lessThanOrEquals(\n    \"zOffset + options.source.depth\",\n    zOffset + source.depth,\n    this._depth,\n  );\n  //>>includeEnd('debug');\n\n  const context = this._context;\n  const gl = context._gl;\n  const target = this._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n\n  const { width, height, depth } = source;\n  let uploaded = false;\n  if (!this._initialized) {\n    if (\n      xOffset === 0 &&\n      yOffset === 0 &&\n      zOffset === 0 &&\n      width === this._width &&\n      height === this._height &&\n      depth === this._depth\n    ) {\n      loadBufferSource(this, source);\n      uploaded = true;\n    } else {\n      gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n      gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n      loadNull(this);\n    }\n    this._initialized = true;\n  }\n\n  if (!uploaded) {\n    loadPartialBufferSource(\n      this,\n      source.arrayBufferView,\n      xOffset,\n      yOffset,\n      zOffset,\n      width,\n      height,\n      depth,\n    );\n  }\n\n  gl.bindTexture(target, null);\n};\n\n/**\n * Load texel data from a buffer into part of a 3D texture\n *\n * @param {Texture3D} texture3D The texture3D to which texel values will be loaded.\n * @param {TypedArray} arrayBufferView The texel values to be loaded into the texture3D.\n * @param {number} xOffset The texel x coordinate of the lower left corner of the subregion of the texture to be updated.\n * @param {number} yOffset The texel y coordinate of the lower left corner of the subregion of the texture to be updated.\n * @param {number} zOffset The texel z coordinate of the lower left corner of the subregion of the texture to be updated.\n * @param {number} width The width of the source data, in pixels.\n * @param {number} height The height of the source data, in pixels.\n * @param {number} depth The depth of the source data, in pixels.\n *\n * @private\n */\nfunction loadPartialBufferSource(\n  texture3D,\n  arrayBufferView,\n  xOffset,\n  yOffset,\n  zOffset,\n  width,\n  height,\n  depth,\n) {\n  const context = texture3D._context;\n  const gl = context._gl;\n\n  const { pixelFormat, pixelDatatype } = texture3D;\n\n  const unpackAlignment = PixelFormat.alignmentInBytes(\n    pixelFormat,\n    pixelDatatype,\n    width,\n  );\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n\n  gl.texSubImage3D(\n    texture3D._textureTarget,\n    0,\n    xOffset,\n    yOffset,\n    zOffset,\n    width,\n    height,\n    depth,\n    pixelFormat,\n    PixelDatatype.toWebGLConstant(pixelDatatype, context),\n    arrayBufferView,\n  );\n}\n\n/**\n * Compute a dimension of the image for the next mip level.\n *\n * @param {number} currentSize The size of the current mip level.\n * @returns {number} The size of the next mip level.\n *\n * @private\n */\nfunction nextMipSize(currentSize) {\n  const nextSize = Math.floor(currentSize / 2) | 0;\n  return Math.max(nextSize, 1);\n}\n\n/**\n * Allocate a texture3D in GPU memory, without providing any image data.\n *\n * @param {Texture3D} texture3D The texture3D to be initialized with null values.\n *\n * @private\n */\nfunction loadNull(texture3D) {\n  const context = texture3D._context;\n\n  context._gl.texImage3D(\n    texture3D._textureTarget,\n    0,\n    texture3D._internalFormat,\n    texture3D._width,\n    texture3D._height,\n    texture3D._depth,\n    0,\n    texture3D._pixelFormat,\n    PixelDatatype.toWebGLConstant(texture3D._pixelDatatype, context),\n    null,\n  );\n}\n\n/**\n * This function is identical to using the Texture3D constructor except that it can be\n * replaced with a mock/spy in tests.\n * @private\n */\nTexture3D.create = function (options) {\n  return new Texture3D(options);\n};\n\nObject.defineProperties(Texture3D.prototype, {\n  /**\n   * A unique id for the texture3D\n   * @memberof Texture3D.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * The sampler to use when sampling this texture3D.\n   * Create a sampler by calling {@link Sampler}.  If this\n   * parameter is not specified, a default sampler is used.  The default sampler clamps texture3D\n   * coordinates in both directions, uses linear filtering for both magnification and minification,\n   * and uses a maximum anisotropy of 1.0.\n   * @memberof Texture3D.prototype\n   * @type {Sampler}\n   * @private\n   */\n  sampler: {\n    get: function () {\n      return this._sampler;\n    },\n    set: function (sampler) {\n      setupSampler(this, sampler);\n      this._sampler = sampler;\n    },\n  },\n  pixelFormat: {\n    get: function () {\n      return this._pixelFormat;\n    },\n  },\n  pixelDatatype: {\n    get: function () {\n      return this._pixelDatatype;\n    },\n  },\n  dimensions: {\n    get: function () {\n      return this._dimensions;\n    },\n  },\n  preMultiplyAlpha: {\n    get: function () {\n      return this._preMultiplyAlpha;\n    },\n  },\n  flipY: {\n    get: function () {\n      return this._flipY;\n    },\n  },\n  width: {\n    get: function () {\n      return this._width;\n    },\n  },\n  height: {\n    get: function () {\n      return this._height;\n    },\n  },\n  depth: {\n    get: function () {\n      return this._depth;\n    },\n  },\n  sizeInBytes: {\n    get: function () {\n      if (this._hasMipmap) {\n        return Math.floor((this._sizeInBytes * 8) / 7);\n      }\n      return this._sizeInBytes;\n    },\n  },\n  _target: {\n    get: function () {\n      return this._textureTarget;\n    },\n  },\n});\n\n/**\n * Set up a sampler for use with a texture3D\n * @param {Texture3D} texture3D The texture3D to be sampled by this sampler\n * @param {Sampler} sampler Information about how to sample the texture3D\n * @private\n */\nfunction setupSampler(texture3D, sampler) {\n  let { minificationFilter, magnificationFilter } = sampler;\n\n  const mipmap = [\n    TextureMinificationFilter.NEAREST_MIPMAP_NEAREST,\n    TextureMinificationFilter.NEAREST_MIPMAP_LINEAR,\n    TextureMinificationFilter.LINEAR_MIPMAP_NEAREST,\n    TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n  ].includes(minificationFilter);\n\n  const context = texture3D._context;\n  const pixelFormat = texture3D._pixelFormat;\n  const pixelDatatype = texture3D._pixelDatatype;\n\n  // float textures only support nearest filtering unless the linear extensions are supported\n  if (\n    (pixelDatatype === PixelDatatype.FLOAT && !context.textureFloatLinear) ||\n    (pixelDatatype === PixelDatatype.HALF_FLOAT &&\n      !context.textureHalfFloatLinear)\n  ) {\n    // override the sampler's settings\n    minificationFilter = mipmap\n      ? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST\n      : TextureMinificationFilter.NEAREST;\n    magnificationFilter = TextureMagnificationFilter.NEAREST;\n  }\n\n  // WebGL 2 depth texture3D only support nearest filtering. See section 3.8.13 OpenGL ES 3 spec\n  if (PixelFormat.isDepthFormat(pixelFormat)) {\n    minificationFilter = TextureMinificationFilter.NEAREST;\n    magnificationFilter = TextureMagnificationFilter.NEAREST;\n  }\n\n  const gl = context._gl;\n  const target = texture3D._textureTarget;\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, texture3D._texture);\n  gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);\n  gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);\n  gl.texParameteri(target, gl.TEXTURE_WRAP_R, sampler.wrapR);\n  gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);\n  gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);\n  if (defined(texture3D._textureFilterAnisotropic)) {\n    gl.texParameteri(\n      target,\n      texture3D._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,\n      sampler.maximumAnisotropy,\n    );\n  }\n  gl.bindTexture(target, null);\n}\n\n/**\n * @param {MipmapHint} [hint=MipmapHint.DONT_CARE] optional.\n * @private\n * @exception {DeveloperError} Cannot call generateMipmap when the texture3D pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\n * @exception {DeveloperError} Cannot call generateMipmap when the texture3D pixel format is a compressed format.\n * @exception {DeveloperError} hint is invalid.\n * @exception {DeveloperError} This texture3D's width must be a power of two to call generateMipmap() in a WebGL1 context.\n * @exception {DeveloperError} This texture3D's height must be a power of two to call generateMipmap() in a WebGL1 context.\n * @exception {DeveloperError} This texture3D was destroyed, i.e., destroy() was called.\n */\nTexture3D.prototype.generateMipmap = function (hint) {\n  hint = hint ?? MipmapHint.DONT_CARE;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (PixelFormat.isDepthFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call generateMipmap when the texture3D pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.\",\n    );\n  }\n  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {\n    throw new DeveloperError(\n      \"Cannot call generateMipmap with a compressed pixel format.\",\n    );\n  }\n\n  if (!MipmapHint.validate(hint)) {\n    throw new DeveloperError(\"hint is invalid.\");\n  }\n  //>>includeEnd('debug');\n\n  this._hasMipmap = true;\n\n  const gl = this._context._gl;\n  const target = this._textureTarget;\n\n  gl.hint(gl.GENERATE_MIPMAP_HINT, hint);\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, this._texture);\n  gl.generateMipmap(target);\n  gl.bindTexture(target, null);\n};\n\nTexture3D.prototype.isDestroyed = function () {\n  return false;\n};\n\nTexture3D.prototype.destroy = function () {\n  this._context._gl.deleteTexture(this._texture);\n  return destroyObject(this);\n};\nexport default Texture3D;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TexturePacker from \"../Core/TexturePacker.js\";\nimport Framebuffer from \"./Framebuffer.js\";\nimport Texture from \"./Texture.js\";\n\nconst defaultInitialDimensions = 16;\n\n/**\n * A TextureAtlas stores multiple images in one∂ texture and keeps\n * track of the texture coordinates for each image. A TextureAtlas is dynamic,\n * meaning new images can be added at any point in time.\n * Texture coordinates are subject to change if the texture atlas resizes, so it's\n * important to check {@link TextureAtlas#guid} before using old values.\n *\n * @alias TextureAtlas\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {PixelFormat} [options.pixelFormat=PixelFormat.RGBA] The pixel format of the texture.\n * @param {Sampler} [options.sampler=new Sampler()] Information about how to sample the texture.\n * @param {number} [options.borderWidthInPixels=1] The amount of spacing between adjacent images in pixels.\n * @param {Cartesian2} [options.initialSize=new Cartesian2(16.0, 16.0)] The initial side lengths of the texture.\n *\n * @exception {DeveloperError} borderWidthInPixels must be greater than or equal to zero.\n * @exception {DeveloperError} initialSize must be greater than zero.\n *\n * @private\n */\nfunction TextureAtlas(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const borderWidthInPixels = options.borderWidthInPixels ?? 1.0;\n  const initialSize =\n    options.initialSize ??\n    new Cartesian2(defaultInitialDimensions, defaultInitialDimensions);\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"options.borderWidthInPixels\",\n    borderWidthInPixels,\n    0,\n  );\n  Check.typeOf.number.greaterThan(\"options.initialSize.x\", initialSize.x, 0);\n  Check.typeOf.number.greaterThan(\"options.initialSize.y\", initialSize.y, 0);\n  //>>includeEnd('debug');\n\n  this._pixelFormat = options.pixelFormat ?? PixelFormat.RGBA;\n  this._sampler = options.sampler;\n  this._borderWidthInPixels = borderWidthInPixels;\n  this._initialSize = initialSize;\n\n  this._texturePacker = undefined;\n  /** @type {BoundingRectangle[]} */\n  this._rectangles = [];\n  /** @type {Map<number, number>} */\n  this._subRegions = new Map();\n  this._guid = createGuid();\n\n  this._imagesToAddQueue = [];\n  /** @type {Map<string, number>} */\n  this._indexById = new Map();\n  /** @type {Map<string, Promise<number>>} */\n  this._indexPromiseById = new Map();\n  this._nextIndex = 0;\n}\n\nObject.defineProperties(TextureAtlas.prototype, {\n  /**\n   * The amount of spacing between adjacent images in pixels.\n   * @memberof TextureAtlas.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  borderWidthInPixels: {\n    get: function () {\n      return this._borderWidthInPixels;\n    },\n  },\n\n  /**\n   * An array of {@link BoundingRectangle} pixel offset and dimensions for all the images in the texture atlas.\n   * The x and y values of the rectangle correspond to the bottom-left corner of the texture coordinate.\n   * If the index is a subregion of an existing image, thea and y values are specified as offsets relative to the parent.\n   * The coordinates are in the order that the corresponding images were added to the atlas.\n   * @memberof TextureAtlas.prototype\n   * @type {BoundingRectangle[]}\n   * @readonly\n   * @private\n   */\n  rectangles: {\n    get: function () {\n      return this._rectangles;\n    },\n  },\n\n  /**\n   * The texture that all of the images are being written to. The value will be <code>undefined</code> until the first update.\n   * @memberof TextureAtlas.prototype\n   * @type {Texture|undefined}\n   * @readonly\n   * @private\n   */\n  texture: {\n    get: function () {\n      return this._texture;\n    },\n  },\n\n  /**\n   * The pixel format of the texture.\n   * @memberof TextureAtlas.prototype\n   * @type {PixelFormat}\n   * @readonly\n   * @private\n   */\n  pixelFormat: {\n    get: function () {\n      return this._pixelFormat;\n    },\n  },\n\n  /**\n   * The sampler to use when sampling this texture. If <code>undefined</code>, the default sampler is used.\n   * @memberof TextureAtlas.prototype\n   * @type {Sampler|undefined}\n   * @readonly\n   * @private\n   */\n  sampler: {\n    get: function () {\n      return this._sampler;\n    },\n  },\n\n  /**\n   * The number of images in the texture atlas. This value increases\n   * every time addImage or addImageSubRegion is called.\n   * Texture coordinates are subject to change if the texture atlas resizes, so it is\n   * important to check {@link TextureAtlas#guid} before using old values.\n   * @memberof TextureAtlas.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  numberOfImages: {\n    get: function () {\n      return this._nextIndex;\n    },\n  },\n\n  /**\n   * The atlas' globally unique identifier (GUID).\n   * The GUID changes whenever the texture atlas is modified.\n   * Classes that use a texture atlas should check if the GUID\n   * has changed before processing the atlas data.\n   * @memberof TextureAtlas.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  guid: {\n    get: function () {\n      return this._guid;\n    },\n  },\n\n  /**\n   * Returns the size in bytes of the texture.\n   * @memberof TextureAtlas.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  sizeInBytes: {\n    get: function () {\n      if (!defined(this._texture)) {\n        return 0;\n      }\n\n      return this._texture.sizeInBytes;\n    },\n  },\n});\n\n/**\n * Get the texture coordinates for reading the associated image in shaders.\n * @param {number} index The index of the image region.\n * @param {BoundingRectangle} [result] The object into which to store the result.\n * @return {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n * @private\n * @example\n * const index = await atlas.addImage(\"myImage\", image);\n * const rectangle = atlas.computeTextureCoordinates(index);\n * BoundingRectangle.pack(rectangle, bufferView);\n */\nTextureAtlas.prototype.computeTextureCoordinates = function (index, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  //>>includeEnd('debug');\n\n  const texture = this._texture;\n  const rectangle = this._rectangles[index];\n\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n\n  if (!defined(rectangle)) {\n    result.x = 0;\n    result.y = 0;\n    result.width = 0;\n    result.height = 0;\n\n    return result;\n  }\n\n  const atlasWidth = texture.width;\n  const atlasHeight = texture.height;\n\n  const width = rectangle.width;\n  const height = rectangle.height;\n  let x = rectangle.x;\n  let y = rectangle.y;\n\n  const parentIndex = this._subRegions.get(index);\n  if (defined(parentIndex)) {\n    const parentRectangle = this._rectangles[parentIndex];\n\n    x += parentRectangle.x;\n    y += parentRectangle.y;\n  }\n\n  result.x = x / atlasWidth;\n  result.y = y / atlasHeight;\n  result.width = width / atlasWidth;\n  result.height = height / atlasHeight;\n\n  return result;\n};\n\n/**\n * Perform a WebGL texture copy for each existing image from its previous packed position to its new packed position in the new texture.\n * @param {Context} context The rendering context\n * @param {number} width The pixel width of the texture\n * @param {number} height The pixel height of the texture\n * @param {BoundingRectangle[]} rectangles The packed bounding rectangles for the reszied texture\n * @param {number} queueOffset Index of the last queued item that was successfully packed\n * @private\n */\nTextureAtlas.prototype._copyFromTexture = function (\n  context,\n  width,\n  height,\n  rectangles,\n) {\n  const pixelFormat = this._pixelFormat;\n  const sampler = this._sampler;\n  const newTexture = new Texture({\n    context,\n    height,\n    width,\n    pixelFormat,\n    sampler,\n  });\n\n  const gl = context._gl;\n  const target = newTexture._textureTarget;\n\n  const oldTexture = this._texture;\n  const framebuffer = new Framebuffer({\n    context,\n    colorTextures: [oldTexture],\n    destroyAttachments: false,\n  });\n\n  gl.activeTexture(gl.TEXTURE0);\n  gl.bindTexture(target, newTexture._texture);\n\n  framebuffer._bind();\n\n  // Copy any textures from the old atlas to its new position in the new atlas\n  const oldRectangles = this.rectangles;\n  const subRegions = this._subRegions;\n  for (let index = 0; index < oldRectangles.length; ++index) {\n    const rectangle = rectangles[index];\n    const frameBufferOffset = oldRectangles[index];\n\n    if (\n      !defined(rectangle) ||\n      !defined(frameBufferOffset) ||\n      defined(subRegions.get(index)) // The rectangle corresponds to a subregion of a parent image\n    ) {\n      continue;\n    }\n\n    const { x, y, width, height } = rectangle;\n    gl.copyTexSubImage2D(\n      target,\n      0,\n      x,\n      y,\n      frameBufferOffset.x,\n      frameBufferOffset.y,\n      width,\n      height,\n    );\n  }\n\n  gl.bindTexture(target, null);\n  newTexture._initialized = true;\n\n  framebuffer._unBind();\n  framebuffer.destroy();\n\n  return newTexture;\n};\n\n/**\n * Recreates the texture atlas texture with new dimensions and repacks images as needed.\n * @param {Context} context The rendering context\n * @param {number} [queueOffset = 0] Index of the last queued item that was successfully packed\n * @private\n */\nTextureAtlas.prototype._resize = function (context, queueOffset = 0) {\n  const borderPadding = this._borderWidthInPixels;\n  const oldRectangles = this._rectangles;\n  const queue = this._imagesToAddQueue;\n\n  const oldTexture = this._texture;\n  let width = oldTexture.width;\n  let height = oldTexture.height;\n\n  // Get the rectangles (width and height) of the current set of images,\n  // ignoring the subregions, which don't get packed\n  const subRegions = this._subRegions;\n  const toPack = oldRectangles\n    .map((image, index) => {\n      return new AddImageRequest({ index, image });\n    })\n    .filter(\n      (request, index) =>\n        defined(request.image) && !defined(subRegions.get(index)),\n    );\n\n  // Add the new set of images\n  let maxWidth = 0;\n  let maxHeight = 0;\n  let areaQueued = 0;\n  for (let i = queueOffset; i < queue.length; ++i) {\n    const { width, height } = queue[i].image;\n    maxWidth = Math.max(maxWidth, width);\n    maxHeight = Math.max(maxHeight, height);\n    areaQueued += width * height;\n    toPack.push(queue[i]);\n  }\n\n  // At minimum, atlas must fit its largest input images. Texture coordinates are\n  // compressed to 0–1 with 12-bit precision, so use power-of-two size to align pixels.\n  width = CesiumMath.nextPowerOfTwo(Math.max(maxWidth, width));\n  height = CesiumMath.nextPowerOfTwo(Math.max(maxHeight, height));\n\n  // Iteratively double the smallest dimension until atlas area is (approximately) sufficient.\n  while (areaQueued >= width * height) {\n    if (width > height) {\n      height *= 2;\n    } else {\n      width *= 2;\n    }\n  }\n\n  toPack.sort(\n    ({ image: imageA }, { image: imageB }) =>\n      imageB.height * imageB.width - imageA.height * imageA.width,\n  );\n\n  const newRectangles = new Array(this._nextIndex);\n  for (const index of this._subRegions.keys()) {\n    // Subregions are specified relative to their parents,\n    // so we can copy them directly\n    if (defined(subRegions.get(index))) {\n      newRectangles[index] = oldRectangles[index];\n    }\n  }\n\n  let texturePacker,\n    packed = false;\n  while (!packed) {\n    texturePacker = new TexturePacker({ height, width, borderPadding });\n\n    let i;\n    for (i = 0; i < toPack.length; ++i) {\n      const { index, image } = toPack[i];\n      if (!defined(image)) {\n        continue;\n      }\n\n      const repackedNode = texturePacker.pack(index, image);\n      if (!defined(repackedNode)) {\n        // Could not fit everything into the new texture.\n        // Scale texture size and try again\n        if (width > height) {\n          // Resize height\n          height *= 2.0;\n        } else {\n          // Resize width\n          width *= 2.0;\n        }\n\n        break;\n      }\n\n      newRectangles[index] = repackedNode.rectangle;\n    }\n\n    packed = i === toPack.length;\n  }\n\n  this._texturePacker = texturePacker;\n  this._texture = this._copyFromTexture(context, width, height, newRectangles);\n\n  oldTexture.destroy();\n\n  this._rectangles = newRectangles;\n  this._guid = createGuid();\n};\n\n/**\n * Return the index of the image region for the specified ID. If the image is already in the atlas, the existing index is returned. Otherwise, the result is undefined.\n * @param {string} id An identifier to detect whether the image already exists in the atlas.\n * @returns {number|undefined} The image index, or undefined if the image does not exist in the atlas.\n * @private\n */\nTextureAtlas.prototype.getImageIndex = function (id) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"id\", id);\n  //>>includeEnd('debug');\n\n  return this._indexById.get(id);\n};\n\n/**\n * Copy image data into the underlying texture atlas.\n * @param {AddImageRequest} imageRequest The data needed to resolve the call to addImage in the queue\n * @private\n */\nTextureAtlas.prototype._copyImageToTexture = function ({\n  index,\n  image,\n  resolve,\n  reject,\n}) {\n  const texture = this._texture;\n  const rectangle = this._rectangles[index];\n\n  try {\n    texture.copyFrom({\n      source: image,\n      xOffset: rectangle.x,\n      yOffset: rectangle.y,\n    });\n\n    if (defined(resolve)) {\n      resolve(index);\n    }\n  } catch (e) {\n    if (defined(reject)) {\n      reject(e);\n      return;\n    }\n  }\n};\n\n/**\n * Info needed to add a queued image to the texture atlas when update operatons are executed, typically at the end of a frame.\n * @constructor\n * @private\n * @param {object} options Object with the following properties:\n * @param {number} options.index An identifier\n * @param {TexturePacker.PackableObject} options.image An object, such as an <code>Image</code> with <code>width</code> and <code>height</code> properties in pixels\n * @param {function} [options.resolve] The promise resolver\n * @param {function} [options.reject] The promise rejecter\n */\nfunction AddImageRequest({ index, image, resolve, reject }) {\n  this.index = index;\n  this.image = image;\n  this.resolve = resolve;\n  this.reject = reject;\n  this.rectangle = undefined;\n}\n\n/**\n * Adds an image to the queue for this frame.\n * The image will be copied to the texture at the end of the frame, resizing the texture if needed.\n *\n * @private\n * @param {number} index An identifier\n * @param {TexturePacker.PackableObject} image An object, such as an <code>Image</code> with <code>width</code> and <code>height</code> properties in pixels\n * @returns {Promise<number>} Promise which resolves to the image index once the image has been added, or rejects if there was an error. The promise resolves to <code>-1</code> if the texture atlas is destoyed in the interim.\n */\nTextureAtlas.prototype._addImage = function (index, image) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.defined(\"image\", image);\n  //>>includeEnd('debug');\n\n  return new Promise((resolve, reject) => {\n    this._imagesToAddQueue.push(\n      new AddImageRequest({\n        index,\n        image,\n        resolve,\n        reject,\n      }),\n    );\n\n    this._imagesToAddQueue.sort(\n      ({ image: imageA }, { image: imageB }) =>\n        imageB.height * imageB.width - imageA.height * imageA.width,\n    );\n  });\n};\n\n/**\n * Process the image queue for this frame, copying to the texture atlas and resizing the texture as needed.\n * @private\n * @param {Context} context The rendering context\n * @return {boolean} true if the texture was updated this frame\n */\nTextureAtlas.prototype._processImageQueue = function (context) {\n  const queue = this._imagesToAddQueue;\n  if (queue.length === 0) {\n    return false;\n  }\n\n  this._rectangles.length = this._nextIndex;\n\n  let i, error;\n  for (i = 0; i < queue.length; ++i) {\n    const imageRequest = queue[i];\n    const { image, index } = imageRequest;\n    const node = this._texturePacker.pack(index, image);\n    if (!defined(node)) {\n      // Atlas cannot fit all images in the queue\n      // Bail early and resize\n      try {\n        this._resize(context, i);\n      } catch (e) {\n        error = e;\n\n        if (defined(imageRequest.reject)) {\n          imageRequest.reject(error);\n        }\n      }\n      break;\n    }\n    this._rectangles[index] = node.rectangle;\n  }\n\n  if (defined(error)) {\n    for (i = i + 1; i < queue.length; ++i) {\n      const { resolve } = queue[i];\n      if (defined(resolve)) {\n        resolve(-1);\n      }\n    }\n\n    queue.length = 0;\n    return false;\n  }\n\n  for (let i = 0; i < queue.length; ++i) {\n    this._copyImageToTexture(queue[i]);\n  }\n\n  queue.length = 0;\n  return true;\n};\n\n/**\n * Processes any updates queued this frame, and updates rendering resources accordingly. Call before or after a frame has been rendered to avoid any race conditions for any dependant render commands.\n * @private\n * @param {Context} context The rendering context\n * @return {boolean} true if rendering resources were updated.\n */\nTextureAtlas.prototype.update = function (context) {\n  if (!defined(this._texture)) {\n    const width = this._initialSize.x;\n    const height = this._initialSize.y;\n    const pixelFormat = this._pixelFormat;\n    const sampler = this._sampler;\n    const borderPadding = this._borderWidthInPixels;\n\n    this._texture = new Texture({\n      context,\n      width,\n      height,\n      pixelFormat,\n      sampler,\n    });\n\n    this._texturePacker = new TexturePacker({\n      height,\n      width,\n      borderPadding,\n    });\n  }\n\n  return this._processImageQueue(context);\n};\n\nasync function resolveImage(image, id) {\n  if (typeof image === \"function\") {\n    image = image(id);\n  }\n\n  if (typeof image === \"string\" || image instanceof Resource) {\n    // Fetch the resource\n    const resource = Resource.createIfNeeded(image);\n    image = resource.fetchImage();\n  }\n\n  return image;\n}\n\n/**\n * Adds an image to the atlas.  If the image is already in the atlas, the atlas is unchanged and\n * the existing index is used.\n * @private\n * @param {string} id An identifier to detect whether the image already exists in the atlas.\n * @param {HTMLImageElement|HTMLCanvasElement|string|Resource|Promise|TextureAtlas.CreateImageCallback} image An image or canvas to add to the texture atlas,\n *        or a URL to an Image, or a Promise for an image, or a function that creates an image.\n * @param {number} width A number specifying the width of the texture. If undefined, the image width will be used.\n * @param {number} height A number specifying the height of the texture. If undefined, the image height will be used.\n * @returns {Promise<number> | number} The image region index or a promise that resolves to it. -1 is returned if resources are in the process of being destroyed.\n */\nTextureAtlas.prototype.addImage = function (id, image, width, height) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"id\", id);\n  Check.defined(\"image\", image);\n  //>>includeEnd('debug');\n\n  let promise = this._indexPromiseById.get(id);\n  let index = this._indexById.get(id);\n  if (defined(promise)) {\n    // This image is already being added\n    return promise;\n  }\n  if (defined(index)) {\n    // This image has already been added and resolved\n    return index;\n  }\n\n  index = this._nextIndex++;\n  this._indexById.set(id, index);\n\n  const resolveAndAddImage = async () => {\n    const resolvedImage = await resolveImage(image, id);\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"image\", resolvedImage);\n    //>>includeEnd('debug');\n\n    if (this.isDestroyed() || !defined(resolvedImage)) {\n      this._indexPromiseById.delete(id);\n      return -1;\n    }\n\n    if (defined(width)) {\n      resolvedImage.width = width;\n    }\n    if (defined(height)) {\n      resolvedImage.height = height;\n    }\n\n    const imageIndex = await this._addImage(index, resolvedImage);\n    this._indexPromiseById.delete(id);\n    return imageIndex;\n  };\n\n  promise = resolveAndAddImage();\n  this._indexPromiseById.set(id, promise);\n  return promise;\n};\n\n/**\n * Get an existing sub-region of an existing atlas image as additional image indices.\n * @private\n * @param {string} id The identifier of the existing image.\n * @param {BoundingRectangle} subRegion An {@link BoundingRectangle} defining a region of an existing image, measured in pixels from the bottom-left of the image.\n * @param {number} imageIndex The index of the image.\n * @returns {Promise<number> | number | undefined} The existing subRegion index, or undefined if not yet added.\n */\nTextureAtlas.prototype.getCachedImageSubRegion = function (\n  id,\n  subRegion,\n  imageIndex,\n) {\n  const imagePromise = this._indexPromiseById.get(id);\n  for (const [index, parentIndex] of this._subRegions.entries()) {\n    if (imageIndex === parentIndex) {\n      const boundingRegion = this._rectangles[index];\n      if (boundingRegion.equals(subRegion)) {\n        // The subregion is already being tracked\n        if (imagePromise) {\n          return imagePromise.then((resolvedImageIndex) =>\n            resolvedImageIndex === -1 ? -1 : index,\n          );\n        }\n        return index;\n      }\n    }\n  }\n};\n\n/**\n * Add a sub-region of an existing atlas image as additional image indices.\n * @private\n * @param {string} id The identifier of the existing image.\n * @param {BoundingRectangle} subRegion An {@link BoundingRectangle} defining a region of an existing image, measured in pixels from the bottom-left of the image.\n * @returns {number | Promise<number>} The resolved image region index, or a Promise that resolves to it. -1 is returned if resources are in the process of being destroyed.\n */\nTextureAtlas.prototype.addImageSubRegion = function (id, subRegion) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"id\", id);\n  Check.defined(\"subRegion\", subRegion);\n  //>>includeEnd('debug');\n  const imageIndex = this._indexById.get(id);\n  if (!defined(imageIndex)) {\n    throw new RuntimeError(`image with id \"${id}\" not found in the atlas.`);\n  }\n\n  let index = this.getCachedImageSubRegion(id, subRegion, imageIndex);\n  if (defined(index)) {\n    return index;\n  }\n\n  index = this._nextIndex++;\n  this._subRegions.set(index, imageIndex);\n  this._rectangles[index] = subRegion.clone();\n\n  const indexPromise =\n    this._indexPromiseById.get(id) ?? Promise.resolve(imageIndex);\n\n  return indexPromise.then((imageIndex) => {\n    if (imageIndex === -1) {\n      // The atlas has been destroyed\n      return -1;\n    }\n\n    const rectangle = this._rectangles[imageIndex];\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number.lessThanOrEquals(\n      \"subRegion.x\",\n      subRegion.x,\n      rectangle.width,\n    );\n    Check.typeOf.number.lessThanOrEquals(\n      \"subRegion.x + subRegion.width\",\n      subRegion.x + subRegion.width,\n      rectangle.width,\n    );\n    Check.typeOf.number.lessThanOrEquals(\n      \"subRegion.y\",\n      subRegion.y,\n      rectangle.height,\n    );\n    Check.typeOf.number.lessThanOrEquals(\n      \"subRegion.y + subRegion.height\",\n      subRegion.y + subRegion.height,\n      rectangle.height,\n    );\n    //>>includeEnd('debug');\n\n    return index;\n  });\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * @private\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n * @see TextureAtlas#destroy\n */\nTextureAtlas.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * @private\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n * @example\n * atlas = atlas && atlas.destroy();\n * @see TextureAtlas#isDestroyed\n */\nTextureAtlas.prototype.destroy = function () {\n  this._texture = this._texture && this._texture.destroy();\n  this._imagesToAddQueue.forEach(({ resolve }) => {\n    if (defined(resolve)) {\n      resolve(-1);\n    }\n  });\n\n  return destroyObject(this);\n};\n\n/**\n * A function that creates an image.\n * @private\n * @callback TextureAtlas.CreateImageCallback\n * @param {string} id The identifier of the image to load.\n * @returns {HTMLImageElement|Promise<HTMLImageElement>} The image, or a promise that will resolve to an image.\n */\n\nexport default TextureAtlas;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\n\n/**\n * @private\n */\nfunction TextureCache() {\n  this._textures = {};\n  this._numberOfTextures = 0;\n  this._texturesToRelease = {};\n}\n\nObject.defineProperties(TextureCache.prototype, {\n  numberOfTextures: {\n    get: function () {\n      return this._numberOfTextures;\n    },\n  },\n});\n\nTextureCache.prototype.getTexture = function (keyword) {\n  const cachedTexture = this._textures[keyword];\n  if (!defined(cachedTexture)) {\n    return undefined;\n  }\n\n  // No longer want to release this if it was previously released.\n  delete this._texturesToRelease[keyword];\n\n  ++cachedTexture.count;\n  return cachedTexture.texture;\n};\n\nTextureCache.prototype.addTexture = function (keyword, texture) {\n  const cachedTexture = {\n    texture: texture,\n    count: 1,\n  };\n\n  texture.finalDestroy = texture.destroy;\n\n  const that = this;\n  texture.destroy = function () {\n    if (--cachedTexture.count === 0) {\n      that._texturesToRelease[keyword] = cachedTexture;\n    }\n  };\n\n  this._textures[keyword] = cachedTexture;\n  ++this._numberOfTextures;\n};\n\nTextureCache.prototype.destroyReleasedTextures = function () {\n  const texturesToRelease = this._texturesToRelease;\n\n  for (const keyword in texturesToRelease) {\n    if (texturesToRelease.hasOwnProperty(keyword)) {\n      const cachedTexture = texturesToRelease[keyword];\n      delete this._textures[keyword];\n      cachedTexture.texture.finalDestroy();\n      --this._numberOfTextures;\n    }\n  }\n\n  this._texturesToRelease = {};\n};\n\nTextureCache.prototype.isDestroyed = function () {\n  return false;\n};\n\nTextureCache.prototype.destroy = function () {\n  const textures = this._textures;\n  for (const keyword in textures) {\n    if (textures.hasOwnProperty(keyword)) {\n      textures[keyword].texture.finalDestroy();\n    }\n  }\n  return destroyObject(this);\n};\nexport default TextureCache;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Enumerates all possible filters used when magnifying WebGL textures.\n *\n * @enum {number}\n *\n * @see TextureMinificationFilter\n */\nconst TextureMagnificationFilter = {\n  /**\n   * Samples the texture by returning the closest pixel.\n   *\n   * @type {number}\n   * @constant\n   */\n  NEAREST: WebGLConstants.NEAREST,\n  /**\n   * Samples the texture through bi-linear interpolation of the four nearest pixels. This produces smoother results than <code>NEAREST</code> filtering.\n   *\n   * @type {number}\n   * @constant\n   */\n  LINEAR: WebGLConstants.LINEAR,\n};\n\n/**\n * Validates the given <code>textureMinificationFilter</code> with respect to the possible enum values.\n * @param textureMagnificationFilter\n * @returns {boolean} <code>true</code> if <code>textureMagnificationFilter</code> is valid.\n *\n * @private\n */\nTextureMagnificationFilter.validate = function (textureMagnificationFilter) {\n  return (\n    textureMagnificationFilter === TextureMagnificationFilter.NEAREST ||\n    textureMagnificationFilter === TextureMagnificationFilter.LINEAR\n  );\n};\n\nexport default Object.freeze(TextureMagnificationFilter);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Enumerates all possible filters used when minifying WebGL textures.\n *\n * @enum {number}\n *\n * @see TextureMagnificationFilter\n */\nconst TextureMinificationFilter = {\n  /**\n   * Samples the texture by returning the closest pixel.\n   *\n   * @type {number}\n   * @constant\n   */\n  NEAREST: WebGLConstants.NEAREST,\n  /**\n   * Samples the texture through bi-linear interpolation of the four nearest pixels. This produces smoother results than <code>NEAREST</code> filtering.\n   *\n   * @type {number}\n   * @constant\n   */\n  LINEAR: WebGLConstants.LINEAR,\n  /**\n   * Selects the nearest mip level and applies nearest sampling within that level.\n   * <p>\n   * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n   * </p>\n   *\n   * @type {number}\n   * @constant\n   */\n  NEAREST_MIPMAP_NEAREST: WebGLConstants.NEAREST_MIPMAP_NEAREST,\n  /**\n   * Selects the nearest mip level and applies linear sampling within that level.\n   * <p>\n   * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n   * </p>\n   *\n   * @type {number}\n   * @constant\n   */\n  LINEAR_MIPMAP_NEAREST: WebGLConstants.LINEAR_MIPMAP_NEAREST,\n  /**\n   * Read texture values with nearest sampling from two adjacent mip levels and linearly interpolate the results.\n   * <p>\n   * This option provides a good balance of visual quality and speed when sampling from a mipmapped texture.\n   * </p>\n   * <p>\n   * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n   * </p>\n   *\n   * @type {number}\n   * @constant\n   */\n  NEAREST_MIPMAP_LINEAR: WebGLConstants.NEAREST_MIPMAP_LINEAR,\n  /**\n   * Read texture values with linear sampling from two adjacent mip levels and linearly interpolate the results.\n   * <p>\n   * This option provides a good balance of visual quality and speed when sampling from a mipmapped texture.\n   * </p>\n   * <p>\n   * Requires that the texture has a mipmap. The mip level is chosen by the view angle and screen-space size of the texture.\n   * </p>\n   * @type {number}\n   * @constant\n   */\n  LINEAR_MIPMAP_LINEAR: WebGLConstants.LINEAR_MIPMAP_LINEAR,\n};\n\n/**\n * Validates the given <code>textureMinificationFilter</code> with respect to the possible enum values.\n *\n * @private\n *\n * @param textureMinificationFilter\n * @returns {boolean} <code>true</code> if <code>textureMinificationFilter</code> is valid.\n */\nTextureMinificationFilter.validate = function (textureMinificationFilter) {\n  return (\n    textureMinificationFilter === TextureMinificationFilter.NEAREST ||\n    textureMinificationFilter === TextureMinificationFilter.LINEAR ||\n    textureMinificationFilter ===\n      TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n    textureMinificationFilter ===\n      TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||\n    textureMinificationFilter ===\n      TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||\n    textureMinificationFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR\n  );\n};\n\nexport default Object.freeze(TextureMinificationFilter);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * @private\n */\nconst TextureWrap = {\n  CLAMP_TO_EDGE: WebGLConstants.CLAMP_TO_EDGE,\n  REPEAT: WebGLConstants.REPEAT,\n  MIRRORED_REPEAT: WebGLConstants.MIRRORED_REPEAT,\n\n  validate: function (textureWrap) {\n    return (\n      textureWrap === TextureWrap.CLAMP_TO_EDGE ||\n      textureWrap === TextureWrap.REPEAT ||\n      textureWrap === TextureWrap.MIRRORED_REPEAT\n    );\n  },\n};\nexport default Object.freeze(TextureWrap);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport Simon1994PlanetaryPositions from \"../Core/Simon1994PlanetaryPositions.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport SunLight from \"../Scene/SunLight.js\";\n\n/**\n * @private\n * @constructor\n */\nfunction UniformState() {\n  /**\n   * @type {Texture}\n   */\n  this.globeDepthTexture = undefined;\n  /**\n   * @type {Texture}\n   */\n  this.edgeIdTexture = undefined;\n  /**\n   * @type {Texture}\n   */\n  this.edgeColorTexture = undefined;\n  /**\n   * @type {Texture}\n   */\n  this.edgeDepthTexture = undefined; // packed depth color attachment from edge pass\n  /**\n   * @type {number}\n   */\n  this.gamma = undefined;\n\n  this._viewport = new BoundingRectangle();\n  this._viewportCartesian4 = new Cartesian4();\n  this._viewportDirty = false;\n  this._viewportOrthographicMatrix = Matrix4.clone(Matrix4.IDENTITY);\n  this._viewportTransformation = Matrix4.clone(Matrix4.IDENTITY);\n\n  this._model = Matrix4.clone(Matrix4.IDENTITY);\n  this._view = Matrix4.clone(Matrix4.IDENTITY);\n  this._inverseView = Matrix4.clone(Matrix4.IDENTITY);\n  this._projection = Matrix4.clone(Matrix4.IDENTITY);\n  this._infiniteProjection = Matrix4.clone(Matrix4.IDENTITY);\n  this._entireFrustum = new Cartesian2();\n  this._currentFrustum = new Cartesian2();\n  this._frustumPlanes = new Cartesian4();\n  this._farDepthFromNearPlusOne = undefined;\n  this._log2FarDepthFromNearPlusOne = undefined;\n  this._oneOverLog2FarDepthFromNearPlusOne = undefined;\n\n  this._frameState = undefined;\n  this._temeToPseudoFixed = Matrix3.clone(Matrix4.IDENTITY);\n\n  // Derived members\n  this._view3DDirty = true;\n  this._view3D = new Matrix4();\n\n  this._inverseView3DDirty = true;\n  this._inverseView3D = new Matrix4();\n\n  this._inverseModelDirty = true;\n  this._inverseModel = new Matrix4();\n\n  this._inverseTransposeModelDirty = true;\n  this._inverseTransposeModel = new Matrix3();\n\n  this._viewRotation = new Matrix3();\n  this._inverseViewRotation = new Matrix3();\n\n  this._viewRotation3D = new Matrix3();\n  this._inverseViewRotation3D = new Matrix3();\n\n  this._inverseProjectionDirty = true;\n  this._inverseProjection = new Matrix4();\n\n  this._modelViewDirty = true;\n  this._modelView = new Matrix4();\n\n  this._modelView3DDirty = true;\n  this._modelView3D = new Matrix4();\n\n  this._modelViewRelativeToEyeDirty = true;\n  this._modelViewRelativeToEye = new Matrix4();\n\n  this._inverseModelViewDirty = true;\n  this._inverseModelView = new Matrix4();\n\n  this._inverseModelView3DDirty = true;\n  this._inverseModelView3D = new Matrix4();\n\n  this._viewProjectionDirty = true;\n  this._viewProjection = new Matrix4();\n\n  this._inverseViewProjectionDirty = true;\n  this._inverseViewProjection = new Matrix4();\n\n  this._modelViewProjectionDirty = true;\n  this._modelViewProjection = new Matrix4();\n\n  this._inverseModelViewProjectionDirty = true;\n  this._inverseModelViewProjection = new Matrix4();\n\n  this._modelViewProjectionRelativeToEyeDirty = true;\n  this._modelViewProjectionRelativeToEye = new Matrix4();\n\n  this._modelViewInfiniteProjectionDirty = true;\n  this._modelViewInfiniteProjection = new Matrix4();\n\n  this._normalDirty = true;\n  this._normal = new Matrix3();\n\n  this._normal3DDirty = true;\n  this._normal3D = new Matrix3();\n\n  this._inverseNormalDirty = true;\n  this._inverseNormal = new Matrix3();\n\n  this._inverseNormal3DDirty = true;\n  this._inverseNormal3D = new Matrix3();\n\n  this._encodedCameraPositionMCDirty = true;\n  this._encodedCameraPositionMC = new EncodedCartesian3();\n  this._cameraPosition = new Cartesian3();\n\n  this._sunPositionWC = new Cartesian3();\n  this._sunPositionColumbusView = new Cartesian3();\n  this._sunDirectionWC = new Cartesian3();\n  this._sunDirectionEC = new Cartesian3();\n  this._moonDirectionEC = new Cartesian3();\n\n  this._lightDirectionWC = new Cartesian3();\n  this._lightDirectionEC = new Cartesian3();\n  this._lightColor = new Cartesian3();\n  this._lightColorHdr = new Cartesian3();\n\n  this._pass = undefined;\n  this._mode = undefined;\n  this._mapProjection = undefined;\n  this._ellipsoid = undefined;\n  this._cameraDirection = new Cartesian3();\n  this._cameraRight = new Cartesian3();\n  this._cameraUp = new Cartesian3();\n  this._frustum2DWidth = 0.0;\n  this._eyeHeight = 0.0;\n  this._eyeHeight2D = new Cartesian2();\n  this._eyeEllipsoidNormalEC = new Cartesian3();\n  this._eyeEllipsoidCurvature = new Cartesian2();\n  this._modelToEnu = new Matrix4();\n  this._enuToModel = new Matrix4();\n  this._pixelRatio = 1.0;\n  this._orthographicIn3D = false;\n  this._backgroundColor = new Color();\n\n  this._brdfLut = undefined;\n  this._environmentMap = undefined;\n\n  this._sphericalHarmonicCoefficients = undefined;\n  this._specularEnvironmentMaps = undefined;\n  this._specularEnvironmentMapsMaximumLOD = undefined;\n\n  this._fogDensity = undefined;\n  this._fogVisualDensityScalar = undefined;\n  this._fogMinimumBrightness = undefined;\n\n  this._atmosphereHsbShift = undefined;\n  this._atmosphereLightIntensity = undefined;\n  this._atmosphereRayleighCoefficient = new Cartesian3();\n  this._atmosphereRayleighScaleHeight = new Cartesian3();\n  this._atmosphereMieCoefficient = new Cartesian3();\n  this._atmosphereMieScaleHeight = undefined;\n  this._atmosphereMieAnisotropy = undefined;\n  this._atmosphereDynamicLighting = undefined;\n\n  this._invertClassificationColor = undefined;\n\n  this._splitPosition = 0.0;\n  this._pixelSizePerMeter = undefined;\n  this._geometricToleranceOverMeter = undefined;\n\n  this._minimumDisableDepthTestDistance = undefined;\n}\n\nObject.defineProperties(UniformState.prototype, {\n  /**\n   * @memberof UniformState.prototype\n   * @type {FrameState}\n   * @readonly\n   */\n  frameState: {\n    get: function () {\n      return this._frameState;\n    },\n  },\n  /**\n   * @memberof UniformState.prototype\n   * @type {BoundingRectangle}\n   */\n  viewport: {\n    get: function () {\n      return this._viewport;\n    },\n    set: function (viewport) {\n      if (!BoundingRectangle.equals(viewport, this._viewport)) {\n        BoundingRectangle.clone(viewport, this._viewport);\n\n        const v = this._viewport;\n        const vc = this._viewportCartesian4;\n        vc.x = v.x;\n        vc.y = v.y;\n        vc.z = v.width;\n        vc.w = v.height;\n\n        this._viewportDirty = true;\n      }\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @private\n   */\n  viewportCartesian4: {\n    get: function () {\n      return this._viewportCartesian4;\n    },\n  },\n\n  viewportOrthographic: {\n    get: function () {\n      cleanViewport(this);\n      return this._viewportOrthographicMatrix;\n    },\n  },\n\n  viewportTransformation: {\n    get: function () {\n      cleanViewport(this);\n      return this._viewportTransformation;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  model: {\n    get: function () {\n      return this._model;\n    },\n    set: function (matrix) {\n      Matrix4.clone(matrix, this._model);\n\n      this._modelView3DDirty = true;\n      this._inverseModelView3DDirty = true;\n      this._inverseModelDirty = true;\n      this._inverseTransposeModelDirty = true;\n      this._modelViewDirty = true;\n      this._inverseModelViewDirty = true;\n      this._modelViewRelativeToEyeDirty = true;\n      this._inverseModelViewDirty = true;\n      this._modelViewProjectionDirty = true;\n      this._inverseModelViewProjectionDirty = true;\n      this._modelViewProjectionRelativeToEyeDirty = true;\n      this._modelViewInfiniteProjectionDirty = true;\n      this._normalDirty = true;\n      this._inverseNormalDirty = true;\n      this._normal3DDirty = true;\n      this._inverseNormal3DDirty = true;\n      this._encodedCameraPositionMCDirty = true;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseModel: {\n    get: function () {\n      if (this._inverseModelDirty) {\n        this._inverseModelDirty = false;\n\n        Matrix4.inverse(this._model, this._inverseModel);\n      }\n\n      return this._inverseModel;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @private\n   */\n  inverseTransposeModel: {\n    get: function () {\n      const m = this._inverseTransposeModel;\n      if (this._inverseTransposeModelDirty) {\n        this._inverseTransposeModelDirty = false;\n\n        Matrix4.getMatrix3(this.inverseModel, m);\n        Matrix3.transpose(m, m);\n      }\n\n      return m;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  view: {\n    get: function () {\n      return this._view;\n    },\n  },\n\n  /**\n   * The 3D view matrix.  In 3D mode, this is identical to {@link UniformState#view},\n   * but in 2D and Columbus View it is a synthetic matrix based on the equivalent position\n   * of the camera in the 3D world.\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  view3D: {\n    get: function () {\n      updateView3D(this);\n      return this._view3D;\n    },\n  },\n\n  /**\n   * The 3x3 rotation matrix of the current view matrix ({@link UniformState#view}).\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  viewRotation: {\n    get: function () {\n      updateView3D(this);\n      return this._viewRotation;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  viewRotation3D: {\n    get: function () {\n      updateView3D(this);\n      return this._viewRotation3D;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseView: {\n    get: function () {\n      return this._inverseView;\n    },\n  },\n\n  /**\n   * the 4x4 inverse-view matrix that transforms from eye to 3D world coordinates.  In 3D mode, this is\n   * identical to {@link UniformState#inverseView}, but in 2D and Columbus View it is a synthetic matrix\n   * based on the equivalent position of the camera in the 3D world.\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseView3D: {\n    get: function () {\n      updateInverseView3D(this);\n      return this._inverseView3D;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  inverseViewRotation: {\n    get: function () {\n      return this._inverseViewRotation;\n    },\n  },\n\n  /**\n   * The 3x3 rotation matrix of the current 3D inverse-view matrix ({@link UniformState#inverseView3D}).\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  inverseViewRotation3D: {\n    get: function () {\n      updateInverseView3D(this);\n      return this._inverseViewRotation3D;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  projection: {\n    get: function () {\n      return this._projection;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseProjection: {\n    get: function () {\n      cleanInverseProjection(this);\n      return this._inverseProjection;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  infiniteProjection: {\n    get: function () {\n      return this._infiniteProjection;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  modelView: {\n    get: function () {\n      cleanModelView(this);\n      return this._modelView;\n    },\n  },\n\n  /**\n   * The 3D model-view matrix.  In 3D mode, this is equivalent to {@link UniformState#modelView}.  In 2D and\n   * Columbus View, however, it is a synthetic matrix based on the equivalent position of the camera in the 3D world.\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  modelView3D: {\n    get: function () {\n      cleanModelView3D(this);\n      return this._modelView3D;\n    },\n  },\n\n  /**\n   * Model-view relative to eye matrix.\n   *\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  modelViewRelativeToEye: {\n    get: function () {\n      cleanModelViewRelativeToEye(this);\n      return this._modelViewRelativeToEye;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseModelView: {\n    get: function () {\n      cleanInverseModelView(this);\n      return this._inverseModelView;\n    },\n  },\n\n  /**\n   * The inverse of the 3D model-view matrix.  In 3D mode, this is equivalent to {@link UniformState#inverseModelView}.\n   * In 2D and Columbus View, however, it is a synthetic matrix based on the equivalent position of the camera in the 3D world.\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseModelView3D: {\n    get: function () {\n      cleanInverseModelView3D(this);\n      return this._inverseModelView3D;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  viewProjection: {\n    get: function () {\n      cleanViewProjection(this);\n      return this._viewProjection;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseViewProjection: {\n    get: function () {\n      cleanInverseViewProjection(this);\n      return this._inverseViewProjection;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  modelViewProjection: {\n    get: function () {\n      cleanModelViewProjection(this);\n      return this._modelViewProjection;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  inverseModelViewProjection: {\n    get: function () {\n      cleanInverseModelViewProjection(this);\n      return this._inverseModelViewProjection;\n    },\n  },\n\n  /**\n   * Model-view-projection relative to eye matrix.\n   *\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  modelViewProjectionRelativeToEye: {\n    get: function () {\n      cleanModelViewProjectionRelativeToEye(this);\n      return this._modelViewProjectionRelativeToEye;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  modelViewInfiniteProjection: {\n    get: function () {\n      cleanModelViewInfiniteProjection(this);\n      return this._modelViewInfiniteProjection;\n    },\n  },\n\n  /**\n   * A 3x3 normal transformation matrix that transforms normal vectors in model coordinates to\n   * eye coordinates.\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  normal: {\n    get: function () {\n      cleanNormal(this);\n      return this._normal;\n    },\n  },\n\n  /**\n   * A 3x3 normal transformation matrix that transforms normal vectors in 3D model\n   * coordinates to eye coordinates.  In 3D mode, this is identical to\n   * {@link UniformState#normal}, but in 2D and Columbus View it represents the normal transformation\n   * matrix as if the camera were at an equivalent location in 3D mode.\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  normal3D: {\n    get: function () {\n      cleanNormal3D(this);\n      return this._normal3D;\n    },\n  },\n\n  /**\n   * An inverse 3x3 normal transformation matrix that transforms normal vectors in model coordinates\n   * to eye coordinates.\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  inverseNormal: {\n    get: function () {\n      cleanInverseNormal(this);\n      return this._inverseNormal;\n    },\n  },\n\n  /**\n   * An inverse 3x3 normal transformation matrix that transforms normal vectors in eye coordinates\n   * to 3D model coordinates.  In 3D mode, this is identical to\n   * {@link UniformState#inverseNormal}, but in 2D and Columbus View it represents the normal transformation\n   * matrix as if the camera were at an equivalent location in 3D mode.\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  inverseNormal3D: {\n    get: function () {\n      cleanInverseNormal3D(this);\n      return this._inverseNormal3D;\n    },\n  },\n\n  /**\n   * The near distance (<code>x</code>) and the far distance (<code>y</code>) of the frustum defined by the camera.\n   * This is the largest possible frustum, not an individual frustum used for multi-frustum rendering.\n   * @memberof UniformState.prototype\n   * @type {Cartesian2}\n   */\n  entireFrustum: {\n    get: function () {\n      return this._entireFrustum;\n    },\n  },\n\n  /**\n   * The near distance (<code>x</code>) and the far distance (<code>y</code>) of the frustum defined by the camera.\n   * This is the individual frustum used for multi-frustum rendering.\n   * @memberof UniformState.prototype\n   * @type {Cartesian2}\n   */\n  currentFrustum: {\n    get: function () {\n      return this._currentFrustum;\n    },\n  },\n\n  /**\n   * The distances to the frustum planes. The top, bottom, left and right distances are\n   * the x, y, z, and w components, respectively.\n   * @memberof UniformState.prototype\n   * @type {Cartesian4}\n   */\n  frustumPlanes: {\n    get: function () {\n      return this._frustumPlanes;\n    },\n  },\n\n  /**\n   * The far plane's distance from the near plane, plus 1.0.\n   *\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  farDepthFromNearPlusOne: {\n    get: function () {\n      return this._farDepthFromNearPlusOne;\n    },\n  },\n\n  /**\n   * The log2 of {@link UniformState#farDepthFromNearPlusOne}.\n   *\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  log2FarDepthFromNearPlusOne: {\n    get: function () {\n      return this._log2FarDepthFromNearPlusOne;\n    },\n  },\n\n  /**\n   * 1.0 divided by {@link UniformState#log2FarDepthFromNearPlusOne}.\n   *\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  oneOverLog2FarDepthFromNearPlusOne: {\n    get: function () {\n      return this._oneOverLog2FarDepthFromNearPlusOne;\n    },\n  },\n\n  /**\n   * The height in meters of the eye (camera) above or below the ellipsoid.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  eyeHeight: {\n    get: function () {\n      return this._eyeHeight;\n    },\n  },\n\n  /**\n   * The height (<code>x</code>) and the height squared (<code>y</code>)\n   * in meters of the eye (camera) above the 2D world plane. This uniform is only valid\n   * when the {@link SceneMode} is <code>SCENE2D</code>.\n   * @memberof UniformState.prototype\n   * @type {Cartesian2}\n   */\n  eyeHeight2D: {\n    get: function () {\n      return this._eyeHeight2D;\n    },\n  },\n\n  /**\n   * The ellipsoid surface normal at the camera position, in model coordinates.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  eyeEllipsoidNormalEC: {\n    get: function () {\n      return this._eyeEllipsoidNormalEC;\n    },\n  },\n\n  /**\n   * The ellipsoid radii of curvature at the camera position.\n   * The .x component is the prime vertical radius, .y is the meridional.\n   * @memberof UniformState.prototype\n   * @type {Cartesian2}\n   */\n  eyeEllipsoidCurvature: {\n    get: function () {\n      return this._eyeEllipsoidCurvature;\n    },\n  },\n\n  /**\n   * A transform from model coordinates to an east-north-up coordinate system\n   * centered at the position on the ellipsoid below the camera\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  modelToEnu: {\n    get: function () {\n      return this._modelToEnu;\n    },\n  },\n\n  /**\n   * The inverse of {@link UniformState.prototype.modelToEnu}\n   * @memberof UniformState.prototype\n   * @type {Matrix4}\n   */\n  enuToModel: {\n    get: function () {\n      return this._enuToModel;\n    },\n  },\n\n  /**\n   * The sun position in 3D world coordinates at the current scene time.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  sunPositionWC: {\n    get: function () {\n      return this._sunPositionWC;\n    },\n  },\n\n  /**\n   * The sun position in 2D world coordinates at the current scene time.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  sunPositionColumbusView: {\n    get: function () {\n      return this._sunPositionColumbusView;\n    },\n  },\n\n  /**\n   * A normalized vector to the sun in 3D world coordinates at the current scene time.  Even in 2D or\n   * Columbus View mode, this returns the direction to the sun in the 3D scene.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  sunDirectionWC: {\n    get: function () {\n      return this._sunDirectionWC;\n    },\n  },\n\n  /**\n   * A normalized vector to the sun in eye coordinates at the current scene time.  In 3D mode, this\n   * returns the actual vector from the camera position to the sun position.  In 2D and Columbus View, it returns\n   * the vector from the equivalent 3D camera position to the position of the sun in the 3D scene.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  sunDirectionEC: {\n    get: function () {\n      return this._sunDirectionEC;\n    },\n  },\n\n  /**\n   * A normalized vector to the moon in eye coordinates at the current scene time.  In 3D mode, this\n   * returns the actual vector from the camera position to the moon position.  In 2D and Columbus View, it returns\n   * the vector from the equivalent 3D camera position to the position of the moon in the 3D scene.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  moonDirectionEC: {\n    get: function () {\n      return this._moonDirectionEC;\n    },\n  },\n\n  /**\n   * A normalized vector to the scene's light source in 3D world coordinates.  Even in 2D or\n   * Columbus View mode, this returns the direction to the light in the 3D scene.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  lightDirectionWC: {\n    get: function () {\n      return this._lightDirectionWC;\n    },\n  },\n\n  /**\n   * A normalized vector to the scene's light source in eye coordinates.  In 3D mode, this\n   * returns the actual vector from the camera position to the light.  In 2D and Columbus View, it returns\n   * the vector from the equivalent 3D camera position in the 3D scene.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  lightDirectionEC: {\n    get: function () {\n      return this._lightDirectionEC;\n    },\n  },\n\n  /**\n   * The color of light emitted by the scene's light source. This is equivalent to the light\n   * color multiplied by the light intensity limited to a maximum luminance of 1.0 suitable\n   * for non-HDR lighting.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  lightColor: {\n    get: function () {\n      return this._lightColor;\n    },\n  },\n\n  /**\n   * The high dynamic range color of light emitted by the scene's light source. This is equivalent to\n   * the light color multiplied by the light intensity suitable for HDR lighting.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  lightColorHdr: {\n    get: function () {\n      return this._lightColorHdr;\n    },\n  },\n\n  /**\n   * The high bits of the camera position.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  encodedCameraPositionMCHigh: {\n    get: function () {\n      cleanEncodedCameraPositionMC(this);\n      return this._encodedCameraPositionMC.high;\n    },\n  },\n\n  /**\n   * The low bits of the camera position.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  encodedCameraPositionMCLow: {\n    get: function () {\n      cleanEncodedCameraPositionMC(this);\n      return this._encodedCameraPositionMC.low;\n    },\n  },\n\n  /**\n   * A 3x3 matrix that transforms from True Equator Mean Equinox (TEME) axes to the\n   * pseudo-fixed axes at the Scene's current time.\n   * @memberof UniformState.prototype\n   * @type {Matrix3}\n   */\n  temeToPseudoFixedMatrix: {\n    get: function () {\n      return this._temeToPseudoFixed;\n    },\n  },\n\n  /**\n   * Gets the scaling factor for transforming from the canvas\n   * pixel space to canvas coordinate space.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  pixelRatio: {\n    get: function () {\n      return this._pixelRatio;\n    },\n  },\n\n  /**\n   * A scalar used to mix a color with the fog color based on the distance to the camera.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  fogDensity: {\n    get: function () {\n      return this._fogDensity;\n    },\n  },\n\n  /**\n   * A scalar used to mix a color with the fog color based on the distance to the camera.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  fogVisualDensityScalar: {\n    get: function () {\n      return this._fogVisualDensityScalar;\n    },\n  },\n\n  /**\n   * A scalar used as a minimum value when brightening fog\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  fogMinimumBrightness: {\n    get: function () {\n      return this._fogMinimumBrightness;\n    },\n  },\n\n  /**\n   * A color shift to apply to the atmosphere color in HSB.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  atmosphereHsbShift: {\n    get: function () {\n      return this._atmosphereHsbShift;\n    },\n  },\n  /**\n   * The intensity of the light that is used for computing the atmosphere color\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  atmosphereLightIntensity: {\n    get: function () {\n      return this._atmosphereLightIntensity;\n    },\n  },\n  /**\n   * The Rayleigh scattering coefficient used in the atmospheric scattering equations for the sky atmosphere.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  atmosphereRayleighCoefficient: {\n    get: function () {\n      return this._atmosphereRayleighCoefficient;\n    },\n  },\n  /**\n   * The Rayleigh scale height used in the atmospheric scattering equations for the sky atmosphere, in meters.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  atmosphereRayleighScaleHeight: {\n    get: function () {\n      return this._atmosphereRayleighScaleHeight;\n    },\n  },\n  /**\n   * The Mie scattering coefficient used in the atmospheric scattering equations for the sky atmosphere.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3}\n   */\n  atmosphereMieCoefficient: {\n    get: function () {\n      return this._atmosphereMieCoefficient;\n    },\n  },\n  /**\n   * The Mie scale height used in the atmospheric scattering equations for the sky atmosphere, in meters.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  atmosphereMieScaleHeight: {\n    get: function () {\n      return this._atmosphereMieScaleHeight;\n    },\n  },\n  /**\n   * The anisotropy of the medium to consider for Mie scattering.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  atmosphereMieAnisotropy: {\n    get: function () {\n      return this._atmosphereMieAnisotropy;\n    },\n  },\n  /**\n   * Which light source to use for dynamically lighting the atmosphere\n   *\n   * @memberof UniformState.prototype\n   * @type {DynamicAtmosphereLightingType}\n   */\n  atmosphereDynamicLighting: {\n    get: function () {\n      return this._atmosphereDynamicLighting;\n    },\n  },\n\n  /**\n   * A scalar that represents the geometric tolerance per meter\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  geometricToleranceOverMeter: {\n    get: function () {\n      return this._geometricToleranceOverMeter;\n    },\n  },\n\n  /**\n   * @memberof UniformState.prototype\n   * @type {Pass}\n   */\n  pass: {\n    get: function () {\n      return this._pass;\n    },\n  },\n\n  /**\n   * The current background color\n   * @memberof UniformState.prototype\n   * @type {Color}\n   */\n  backgroundColor: {\n    get: function () {\n      return this._backgroundColor;\n    },\n  },\n\n  /**\n   * The look up texture used to find the BRDF for a material\n   * @memberof UniformState.prototype\n   * @type {Texture}\n   */\n  brdfLut: {\n    get: function () {\n      return this._brdfLut;\n    },\n  },\n\n  /**\n   * The environment map of the scene\n   * @memberof UniformState.prototype\n   * @type {CubeMap}\n   */\n  environmentMap: {\n    get: function () {\n      return this._environmentMap;\n    },\n  },\n\n  /**\n   * The spherical harmonic coefficients of the scene.\n   * @memberof UniformState.prototype\n   * @type {Cartesian3[]}\n   */\n  sphericalHarmonicCoefficients: {\n    get: function () {\n      return this._sphericalHarmonicCoefficients;\n    },\n  },\n\n  /**\n   * The specular environment cube map of the scene.\n   * @memberof UniformState.prototype\n   * @type {Texture}\n   */\n  specularEnvironmentMaps: {\n    get: function () {\n      return this._specularEnvironmentMaps;\n    },\n  },\n\n  /**\n   * The maximum level-of-detail of the specular environment cube map of the scene.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  specularEnvironmentMapsMaximumLOD: {\n    get: function () {\n      return this._specularEnvironmentMapsMaximumLOD;\n    },\n  },\n\n  /**\n   * The splitter position to use when rendering with a splitter. This will be in pixel coordinates relative to the canvas.\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  splitPosition: {\n    get: function () {\n      return this._splitPosition;\n    },\n  },\n\n  /**\n   * The distance from the camera at which to disable the depth test of billboards, labels and points\n   * to, for example, prevent clipping against terrain. When set to zero, the depth test should always\n   * be applied. When less than zero, the depth test should never be applied.\n   *\n   * @memberof UniformState.prototype\n   * @type {number}\n   */\n  minimumDisableDepthTestDistance: {\n    get: function () {\n      return this._minimumDisableDepthTestDistance;\n    },\n  },\n\n  /**\n   * The highlight color of unclassified 3D Tiles.\n   *\n   * @memberof UniformState.prototype\n   * @type {Color}\n   */\n  invertClassificationColor: {\n    get: function () {\n      return this._invertClassificationColor;\n    },\n  },\n\n  /**\n   * Whether or not the current projection is orthographic in 3D.\n   *\n   * @memberOf UniformState.prototype\n   * @type {boolean}\n   */\n  orthographicIn3D: {\n    get: function () {\n      return this._orthographicIn3D;\n    },\n  },\n\n  /**\n   * The current ellipsoid.\n   *\n   * @memberOf UniformState.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid ?? Ellipsoid.default;\n    },\n  },\n});\n\nfunction setView(uniformState, matrix) {\n  Matrix4.clone(matrix, uniformState._view);\n  Matrix4.getMatrix3(matrix, uniformState._viewRotation);\n\n  uniformState._view3DDirty = true;\n  uniformState._inverseView3DDirty = true;\n  uniformState._modelViewDirty = true;\n  uniformState._modelView3DDirty = true;\n  uniformState._modelViewRelativeToEyeDirty = true;\n  uniformState._inverseModelViewDirty = true;\n  uniformState._inverseModelView3DDirty = true;\n  uniformState._viewProjectionDirty = true;\n  uniformState._inverseViewProjectionDirty = true;\n  uniformState._modelViewProjectionDirty = true;\n  uniformState._modelViewProjectionRelativeToEyeDirty = true;\n  uniformState._modelViewInfiniteProjectionDirty = true;\n  uniformState._normalDirty = true;\n  uniformState._inverseNormalDirty = true;\n  uniformState._normal3DDirty = true;\n  uniformState._inverseNormal3DDirty = true;\n}\n\nfunction setInverseView(uniformState, matrix) {\n  Matrix4.clone(matrix, uniformState._inverseView);\n  Matrix4.getMatrix3(matrix, uniformState._inverseViewRotation);\n}\n\nfunction setProjection(uniformState, matrix) {\n  Matrix4.clone(matrix, uniformState._projection);\n\n  uniformState._inverseProjectionDirty = true;\n  uniformState._viewProjectionDirty = true;\n  uniformState._inverseViewProjectionDirty = true;\n  uniformState._modelViewProjectionDirty = true;\n  uniformState._modelViewProjectionRelativeToEyeDirty = true;\n}\n\nfunction setInfiniteProjection(uniformState, matrix) {\n  Matrix4.clone(matrix, uniformState._infiniteProjection);\n\n  uniformState._modelViewInfiniteProjectionDirty = true;\n}\n\nconst surfacePositionScratch = new Cartesian3();\nconst enuTransformScratch = new Matrix4();\n\nfunction setCamera(uniformState, camera) {\n  Cartesian3.clone(camera.positionWC, uniformState._cameraPosition);\n  Cartesian3.clone(camera.directionWC, uniformState._cameraDirection);\n  Cartesian3.clone(camera.rightWC, uniformState._cameraRight);\n  Cartesian3.clone(camera.upWC, uniformState._cameraUp);\n\n  const ellipsoid = uniformState._ellipsoid;\n  let surfacePosition;\n\n  const positionCartographic = camera.positionCartographic;\n  if (!defined(positionCartographic)) {\n    uniformState._eyeHeight = -ellipsoid.maximumRadius;\n    if (Cartesian3.magnitude(camera.positionWC) > 0.0) {\n      uniformState._eyeEllipsoidNormalEC = Cartesian3.normalize(\n        camera.positionWC,\n        uniformState._eyeEllipsoidNormalEC,\n      );\n    }\n    surfacePosition = ellipsoid.scaleToGeodeticSurface(\n      camera.positionWC,\n      surfacePositionScratch,\n    );\n  } else {\n    uniformState._eyeHeight = positionCartographic.height;\n    uniformState._eyeEllipsoidNormalEC =\n      ellipsoid.geodeticSurfaceNormalCartographic(\n        positionCartographic,\n        uniformState._eyeEllipsoidNormalEC,\n      );\n    surfacePosition = Cartesian3.fromRadians(\n      positionCartographic.longitude,\n      positionCartographic.latitude,\n      0.0,\n      ellipsoid,\n      surfacePositionScratch,\n    );\n  }\n\n  uniformState._encodedCameraPositionMCDirty = true;\n\n  if (!defined(surfacePosition)) {\n    return;\n  }\n\n  uniformState._eyeEllipsoidNormalEC = Matrix3.multiplyByVector(\n    uniformState._viewRotation,\n    uniformState._eyeEllipsoidNormalEC,\n    uniformState._eyeEllipsoidNormalEC,\n  );\n\n  const enuToWorld = Transforms.eastNorthUpToFixedFrame(\n    surfacePosition,\n    ellipsoid,\n    enuTransformScratch,\n  );\n  uniformState._enuToModel = Matrix4.multiplyTransformation(\n    uniformState.inverseModel,\n    enuToWorld,\n    uniformState._enuToModel,\n  );\n  uniformState._modelToEnu = Matrix4.inverseTransformation(\n    uniformState._enuToModel,\n    uniformState._modelToEnu,\n  );\n\n  if (\n    !CesiumMath.equalsEpsilon(\n      ellipsoid._radii.x,\n      ellipsoid._radii.y,\n      CesiumMath.EPSILON15,\n    )\n  ) {\n    // Ellipsoid curvature calculations assume radii.x === radii.y as is true for WGS84\n    return;\n  }\n\n  uniformState._eyeEllipsoidCurvature = ellipsoid.getLocalCurvature(\n    surfacePosition,\n    uniformState._eyeEllipsoidCurvature,\n  );\n}\n\nconst transformMatrix = new Matrix3();\nconst sunCartographicScratch = new Cartographic();\nfunction setSunAndMoonDirections(uniformState, frameState) {\n  Transforms.computeIcrfToCentralBodyFixedMatrix(\n    frameState.time,\n    transformMatrix,\n  );\n\n  let position =\n    Simon1994PlanetaryPositions.computeSunPositionInEarthInertialFrame(\n      frameState.time,\n      uniformState._sunPositionWC,\n    );\n  Matrix3.multiplyByVector(transformMatrix, position, position);\n\n  Cartesian3.normalize(position, uniformState._sunDirectionWC);\n\n  position = Matrix3.multiplyByVector(\n    uniformState.viewRotation3D,\n    position,\n    uniformState._sunDirectionEC,\n  );\n  Cartesian3.normalize(position, position);\n\n  position =\n    Simon1994PlanetaryPositions.computeMoonPositionInEarthInertialFrame(\n      frameState.time,\n      uniformState._moonDirectionEC,\n    );\n  Matrix3.multiplyByVector(transformMatrix, position, position);\n  Matrix3.multiplyByVector(uniformState.viewRotation3D, position, position);\n  Cartesian3.normalize(position, position);\n\n  const projection = frameState.mapProjection;\n  const ellipsoid = projection.ellipsoid;\n  const sunCartographic = ellipsoid.cartesianToCartographic(\n    uniformState._sunPositionWC,\n    sunCartographicScratch,\n  );\n  projection.project(sunCartographic, uniformState._sunPositionColumbusView);\n}\n\n/**\n * Synchronizes the frustum's state with the camera state.  This is called\n * by the {@link Scene} when rendering to ensure that automatic GLSL uniforms\n * are set to the right value.\n *\n * @param {object} camera The camera to synchronize with.\n */\nUniformState.prototype.updateCamera = function (camera) {\n  setView(this, camera.viewMatrix);\n  setInverseView(this, camera.inverseViewMatrix);\n  setCamera(this, camera);\n\n  this._entireFrustum.x = camera.frustum.near;\n  this._entireFrustum.y = camera.frustum.far;\n  this.updateFrustum(camera.frustum);\n\n  this._orthographicIn3D =\n    this._mode !== SceneMode.SCENE2D &&\n    camera.frustum instanceof OrthographicFrustum;\n};\n\n/**\n * Synchronizes the frustum's state with the uniform state.  This is called\n * by the {@link Scene} when rendering to ensure that automatic GLSL uniforms\n * are set to the right value.\n *\n * @param {object} frustum The frustum to synchronize with.\n */\nUniformState.prototype.updateFrustum = function (frustum) {\n  // If any frustum parameters have changed, calling the frustum.projectionMatrix\n  // getter will recompute the projection before it is copied.\n  setProjection(this, frustum.projectionMatrix);\n\n  if (defined(frustum.infiniteProjectionMatrix)) {\n    setInfiniteProjection(this, frustum.infiniteProjectionMatrix);\n  }\n  this._currentFrustum.x = frustum.near;\n  this._currentFrustum.y = frustum.far;\n\n  this._farDepthFromNearPlusOne = frustum.far - frustum.near + 1.0;\n  this._log2FarDepthFromNearPlusOne = CesiumMath.log2(\n    this._farDepthFromNearPlusOne,\n  );\n  this._oneOverLog2FarDepthFromNearPlusOne =\n    1.0 / this._log2FarDepthFromNearPlusOne;\n\n  const offCenterFrustum = frustum.offCenterFrustum;\n  if (defined(offCenterFrustum)) {\n    frustum = offCenterFrustum;\n  }\n\n  this._frustumPlanes.x = frustum.top;\n  this._frustumPlanes.y = frustum.bottom;\n  this._frustumPlanes.z = frustum.left;\n  this._frustumPlanes.w = frustum.right;\n};\n\nUniformState.prototype.updatePass = function (pass) {\n  this._pass = pass;\n};\n\nconst EMPTY_ARRAY = [];\nconst defaultLight = new SunLight();\n\n/**\n * Synchronizes frame state with the uniform state.  This is called\n * by the {@link Scene} when rendering to ensure that automatic GLSL uniforms\n * are set to the right value.\n *\n * @param {FrameState} frameState The frameState to synchronize with.\n */\nUniformState.prototype.update = function (frameState) {\n  this._mode = frameState.mode;\n  this._mapProjection = frameState.mapProjection;\n  this._ellipsoid = frameState.mapProjection.ellipsoid;\n  this._pixelRatio = frameState.pixelRatio;\n\n  const camera = frameState.camera;\n  this.updateCamera(camera);\n\n  if (frameState.mode === SceneMode.SCENE2D) {\n    this._frustum2DWidth = camera.frustum.right - camera.frustum.left;\n    this._eyeHeight2D.x = this._frustum2DWidth * 0.5;\n    this._eyeHeight2D.y = this._eyeHeight2D.x * this._eyeHeight2D.x;\n  } else {\n    this._frustum2DWidth = 0.0;\n    this._eyeHeight2D.x = 0.0;\n    this._eyeHeight2D.y = 0.0;\n  }\n\n  setSunAndMoonDirections(this, frameState);\n\n  const light = frameState.light ?? defaultLight;\n  if (light instanceof SunLight) {\n    this._lightDirectionWC = Cartesian3.clone(\n      this._sunDirectionWC,\n      this._lightDirectionWC,\n    );\n    this._lightDirectionEC = Cartesian3.clone(\n      this._sunDirectionEC,\n      this._lightDirectionEC,\n    );\n  } else {\n    this._lightDirectionWC = Cartesian3.normalize(\n      Cartesian3.negate(light.direction, this._lightDirectionWC),\n      this._lightDirectionWC,\n    );\n    this._lightDirectionEC = Matrix3.multiplyByVector(\n      this.viewRotation3D,\n      this._lightDirectionWC,\n      this._lightDirectionEC,\n    );\n  }\n\n  const lightColor = light.color;\n  let lightColorHdr = Cartesian3.fromElements(\n    lightColor.red,\n    lightColor.green,\n    lightColor.blue,\n    this._lightColorHdr,\n  );\n  lightColorHdr = Cartesian3.multiplyByScalar(\n    lightColorHdr,\n    light.intensity,\n    lightColorHdr,\n  );\n  const maximumComponent = Cartesian3.maximumComponent(lightColorHdr);\n  if (maximumComponent > 1.0) {\n    Cartesian3.divideByScalar(\n      lightColorHdr,\n      maximumComponent,\n      this._lightColor,\n    );\n  } else {\n    Cartesian3.clone(lightColorHdr, this._lightColor);\n  }\n\n  const brdfLutGenerator = frameState.brdfLutGenerator;\n  const brdfLut = defined(brdfLutGenerator)\n    ? brdfLutGenerator.colorTexture\n    : undefined;\n  this._brdfLut = brdfLut;\n\n  this._environmentMap =\n    frameState.environmentMap ?? frameState.context.defaultCubeMap;\n\n  // IE 11 doesn't optimize out uniforms that are #ifdef'd out. So undefined values for the spherical harmonic\n  // coefficients cause a crash.\n  this._sphericalHarmonicCoefficients =\n    frameState.sphericalHarmonicCoefficients ?? EMPTY_ARRAY;\n  this._specularEnvironmentMaps = frameState.specularEnvironmentMaps;\n  this._specularEnvironmentMapsMaximumLOD =\n    frameState.specularEnvironmentMapsMaximumLOD;\n\n  this._fogDensity = frameState.fog.density;\n  this._fogVisualDensityScalar = frameState.fog.visualDensityScalar;\n  this._fogMinimumBrightness = frameState.fog.minimumBrightness;\n\n  const atmosphere = frameState.atmosphere;\n  if (defined(atmosphere)) {\n    this._atmosphereHsbShift = Cartesian3.fromElements(\n      atmosphere.hueShift,\n      atmosphere.saturationShift,\n      atmosphere.brightnessShift,\n      this._atmosphereHsbShift,\n    );\n    this._atmosphereLightIntensity = atmosphere.lightIntensity;\n    this._atmosphereRayleighCoefficient = Cartesian3.clone(\n      atmosphere.rayleighCoefficient,\n      this._atmosphereRayleighCoefficient,\n    );\n    this._atmosphereRayleighScaleHeight = atmosphere.rayleighScaleHeight;\n    this._atmosphereMieCoefficient = Cartesian3.clone(\n      atmosphere.mieCoefficient,\n      this._atmosphereMieCoefficient,\n    );\n    this._atmosphereMieScaleHeight = atmosphere.mieScaleHeight;\n    this._atmosphereMieAnisotropy = atmosphere.mieAnisotropy;\n    this._atmosphereDynamicLighting = atmosphere.dynamicLighting;\n  }\n\n  this._invertClassificationColor = frameState.invertClassificationColor;\n\n  this._frameState = frameState;\n  this._temeToPseudoFixed = Transforms.computeTemeToPseudoFixedMatrix(\n    frameState.time,\n    this._temeToPseudoFixed,\n  );\n\n  // Convert the relative splitPosition to absolute pixel coordinates\n  this._splitPosition =\n    frameState.splitPosition * frameState.context.drawingBufferWidth;\n  const fov = camera.frustum.fov;\n  const viewport = this._viewport;\n  let pixelSizePerMeter;\n  if (defined(fov)) {\n    if (viewport.height > viewport.width) {\n      pixelSizePerMeter = (Math.tan(0.5 * fov) * 2.0) / viewport.height;\n    } else {\n      pixelSizePerMeter = (Math.tan(0.5 * fov) * 2.0) / viewport.width;\n    }\n  } else {\n    pixelSizePerMeter = 1.0 / Math.max(viewport.width, viewport.height);\n  }\n\n  this._geometricToleranceOverMeter =\n    pixelSizePerMeter * frameState.maximumScreenSpaceError;\n  Color.clone(frameState.backgroundColor, this._backgroundColor);\n\n  this._minimumDisableDepthTestDistance =\n    frameState.minimumDisableDepthTestDistance;\n  this._minimumDisableDepthTestDistance *=\n    this._minimumDisableDepthTestDistance;\n  if (this._minimumDisableDepthTestDistance === Number.POSITIVE_INFINITY) {\n    this._minimumDisableDepthTestDistance = -1.0;\n  }\n};\n\nfunction cleanViewport(uniformState) {\n  if (uniformState._viewportDirty) {\n    const v = uniformState._viewport;\n    Matrix4.computeOrthographicOffCenter(\n      v.x,\n      v.x + v.width,\n      v.y,\n      v.y + v.height,\n      0.0,\n      1.0,\n      uniformState._viewportOrthographicMatrix,\n    );\n    Matrix4.computeViewportTransformation(\n      v,\n      0.0,\n      1.0,\n      uniformState._viewportTransformation,\n    );\n    uniformState._viewportDirty = false;\n  }\n}\n\nfunction cleanInverseProjection(uniformState) {\n  if (uniformState._inverseProjectionDirty) {\n    uniformState._inverseProjectionDirty = false;\n\n    if (\n      uniformState._mode !== SceneMode.SCENE2D &&\n      uniformState._mode !== SceneMode.MORPHING &&\n      !uniformState._orthographicIn3D\n    ) {\n      Matrix4.inverse(\n        uniformState._projection,\n        uniformState._inverseProjection,\n      );\n    } else {\n      Matrix4.clone(Matrix4.ZERO, uniformState._inverseProjection);\n    }\n  }\n}\n\n// Derived\nfunction cleanModelView(uniformState) {\n  if (uniformState._modelViewDirty) {\n    uniformState._modelViewDirty = false;\n\n    Matrix4.multiplyTransformation(\n      uniformState._view,\n      uniformState._model,\n      uniformState._modelView,\n    );\n  }\n}\n\nfunction cleanModelView3D(uniformState) {\n  if (uniformState._modelView3DDirty) {\n    uniformState._modelView3DDirty = false;\n\n    Matrix4.multiplyTransformation(\n      uniformState.view3D,\n      uniformState._model,\n      uniformState._modelView3D,\n    );\n  }\n}\n\nfunction cleanInverseModelView(uniformState) {\n  if (uniformState._inverseModelViewDirty) {\n    uniformState._inverseModelViewDirty = false;\n\n    Matrix4.inverse(uniformState.modelView, uniformState._inverseModelView);\n  }\n}\n\nfunction cleanInverseModelView3D(uniformState) {\n  if (uniformState._inverseModelView3DDirty) {\n    uniformState._inverseModelView3DDirty = false;\n\n    Matrix4.inverse(uniformState.modelView3D, uniformState._inverseModelView3D);\n  }\n}\n\nfunction cleanViewProjection(uniformState) {\n  if (uniformState._viewProjectionDirty) {\n    uniformState._viewProjectionDirty = false;\n\n    Matrix4.multiply(\n      uniformState._projection,\n      uniformState._view,\n      uniformState._viewProjection,\n    );\n  }\n}\n\nfunction cleanInverseViewProjection(uniformState) {\n  if (uniformState._inverseViewProjectionDirty) {\n    uniformState._inverseViewProjectionDirty = false;\n\n    Matrix4.inverse(\n      uniformState.viewProjection,\n      uniformState._inverseViewProjection,\n    );\n  }\n}\n\nfunction cleanModelViewProjection(uniformState) {\n  if (uniformState._modelViewProjectionDirty) {\n    uniformState._modelViewProjectionDirty = false;\n\n    Matrix4.multiply(\n      uniformState._projection,\n      uniformState.modelView,\n      uniformState._modelViewProjection,\n    );\n  }\n}\n\nfunction cleanModelViewRelativeToEye(uniformState) {\n  if (uniformState._modelViewRelativeToEyeDirty) {\n    uniformState._modelViewRelativeToEyeDirty = false;\n\n    const mv = uniformState.modelView;\n    const mvRte = uniformState._modelViewRelativeToEye;\n    mvRte[0] = mv[0];\n    mvRte[1] = mv[1];\n    mvRte[2] = mv[2];\n    mvRte[3] = mv[3];\n    mvRte[4] = mv[4];\n    mvRte[5] = mv[5];\n    mvRte[6] = mv[6];\n    mvRte[7] = mv[7];\n    mvRte[8] = mv[8];\n    mvRte[9] = mv[9];\n    mvRte[10] = mv[10];\n    mvRte[11] = mv[11];\n    mvRte[12] = 0.0;\n    mvRte[13] = 0.0;\n    mvRte[14] = 0.0;\n    mvRte[15] = mv[15];\n  }\n}\n\nfunction cleanInverseModelViewProjection(uniformState) {\n  if (uniformState._inverseModelViewProjectionDirty) {\n    uniformState._inverseModelViewProjectionDirty = false;\n\n    Matrix4.inverse(\n      uniformState.modelViewProjection,\n      uniformState._inverseModelViewProjection,\n    );\n  }\n}\n\nfunction cleanModelViewProjectionRelativeToEye(uniformState) {\n  if (uniformState._modelViewProjectionRelativeToEyeDirty) {\n    uniformState._modelViewProjectionRelativeToEyeDirty = false;\n\n    Matrix4.multiply(\n      uniformState._projection,\n      uniformState.modelViewRelativeToEye,\n      uniformState._modelViewProjectionRelativeToEye,\n    );\n  }\n}\n\nfunction cleanModelViewInfiniteProjection(uniformState) {\n  if (uniformState._modelViewInfiniteProjectionDirty) {\n    uniformState._modelViewInfiniteProjectionDirty = false;\n\n    Matrix4.multiply(\n      uniformState._infiniteProjection,\n      uniformState.modelView,\n      uniformState._modelViewInfiniteProjection,\n    );\n  }\n}\n\nfunction cleanNormal(uniformState) {\n  if (uniformState._normalDirty) {\n    uniformState._normalDirty = false;\n\n    const m = uniformState._normal;\n    Matrix4.getMatrix3(uniformState.inverseModelView, m);\n    Matrix3.transpose(m, m);\n  }\n}\n\nfunction cleanNormal3D(uniformState) {\n  if (uniformState._normal3DDirty) {\n    uniformState._normal3DDirty = false;\n\n    const m = uniformState._normal3D;\n    Matrix4.getMatrix3(uniformState.inverseModelView3D, m);\n    Matrix3.transpose(m, m);\n  }\n}\n\nfunction cleanInverseNormal(uniformState) {\n  if (uniformState._inverseNormalDirty) {\n    uniformState._inverseNormalDirty = false;\n\n    const m = uniformState._inverseNormal;\n    Matrix4.getMatrix3(uniformState.modelView, m);\n    Matrix3.transpose(m, m);\n  }\n}\n\nfunction cleanInverseNormal3D(uniformState) {\n  if (uniformState._inverseNormal3DDirty) {\n    uniformState._inverseNormal3DDirty = false;\n\n    const m = uniformState._inverseNormal3D;\n    Matrix4.getMatrix3(uniformState.modelView3D, m);\n    Matrix3.transpose(m, m);\n  }\n}\n\nconst cameraPositionMC = new Cartesian3();\n\nfunction cleanEncodedCameraPositionMC(uniformState) {\n  if (uniformState._encodedCameraPositionMCDirty) {\n    uniformState._encodedCameraPositionMCDirty = false;\n\n    Matrix4.multiplyByPoint(\n      uniformState.inverseModel,\n      uniformState._cameraPosition,\n      cameraPositionMC,\n    );\n    EncodedCartesian3.fromCartesian(\n      cameraPositionMC,\n      uniformState._encodedCameraPositionMC,\n    );\n  }\n}\n\nconst view2Dto3DPScratch = new Cartesian3();\nconst view2Dto3DRScratch = new Cartesian3();\nconst view2Dto3DUScratch = new Cartesian3();\nconst view2Dto3DDScratch = new Cartesian3();\nconst view2Dto3DCartographicScratch = new Cartographic();\nconst view2Dto3DCartesian3Scratch = new Cartesian3();\nconst view2Dto3DMatrix4Scratch = new Matrix4();\n\nfunction view2Dto3D(\n  position2D,\n  direction2D,\n  right2D,\n  up2D,\n  frustum2DWidth,\n  mode,\n  projection,\n  result,\n) {\n  // The camera position and directions are expressed in the 2D coordinate system where the Y axis is to the East,\n  // the Z axis is to the North, and the X axis is out of the map.  Express them instead in the ENU axes where\n  // X is to the East, Y is to the North, and Z is out of the local horizontal plane.\n  const p = view2Dto3DPScratch;\n  p.x = position2D.y;\n  p.y = position2D.z;\n  p.z = position2D.x;\n\n  const r = view2Dto3DRScratch;\n  r.x = right2D.y;\n  r.y = right2D.z;\n  r.z = right2D.x;\n\n  const u = view2Dto3DUScratch;\n  u.x = up2D.y;\n  u.y = up2D.z;\n  u.z = up2D.x;\n\n  const d = view2Dto3DDScratch;\n  d.x = direction2D.y;\n  d.y = direction2D.z;\n  d.z = direction2D.x;\n\n  // In 2D, the camera height is always 12.7 million meters.\n  // The apparent height is equal to half the frustum width.\n  if (mode === SceneMode.SCENE2D) {\n    p.z = frustum2DWidth * 0.5;\n  }\n\n  // Compute the equivalent camera position in the real (3D) world.\n  // In 2D and Columbus View, the camera can travel outside the projection, and when it does so\n  // there's not really any corresponding location in the real world.  So clamp the unprojected\n  // longitude and latitude to their valid ranges.\n  const cartographic = projection.unproject(p, view2Dto3DCartographicScratch);\n  cartographic.longitude = CesiumMath.clamp(\n    cartographic.longitude,\n    -Math.PI,\n    Math.PI,\n  );\n  cartographic.latitude = CesiumMath.clamp(\n    cartographic.latitude,\n    -CesiumMath.PI_OVER_TWO,\n    CesiumMath.PI_OVER_TWO,\n  );\n  const ellipsoid = projection.ellipsoid;\n  const position3D = ellipsoid.cartographicToCartesian(\n    cartographic,\n    view2Dto3DCartesian3Scratch,\n  );\n\n  // Compute the rotation from the local ENU at the real world camera position to the fixed axes.\n  const enuToFixed = Transforms.eastNorthUpToFixedFrame(\n    position3D,\n    ellipsoid,\n    view2Dto3DMatrix4Scratch,\n  );\n\n  // Transform each camera direction to the fixed axes.\n  Matrix4.multiplyByPointAsVector(enuToFixed, r, r);\n  Matrix4.multiplyByPointAsVector(enuToFixed, u, u);\n  Matrix4.multiplyByPointAsVector(enuToFixed, d, d);\n\n  // Compute the view matrix based on the new fixed-frame camera position and directions.\n  if (!defined(result)) {\n    result = new Matrix4();\n  }\n\n  result[0] = r.x;\n  result[1] = u.x;\n  result[2] = -d.x;\n  result[3] = 0.0;\n  result[4] = r.y;\n  result[5] = u.y;\n  result[6] = -d.y;\n  result[7] = 0.0;\n  result[8] = r.z;\n  result[9] = u.z;\n  result[10] = -d.z;\n  result[11] = 0.0;\n  result[12] = -Cartesian3.dot(r, position3D);\n  result[13] = -Cartesian3.dot(u, position3D);\n  result[14] = Cartesian3.dot(d, position3D);\n  result[15] = 1.0;\n\n  return result;\n}\n\nfunction updateView3D(that) {\n  if (that._view3DDirty) {\n    if (that._mode === SceneMode.SCENE3D) {\n      Matrix4.clone(that._view, that._view3D);\n    } else {\n      view2Dto3D(\n        that._cameraPosition,\n        that._cameraDirection,\n        that._cameraRight,\n        that._cameraUp,\n        that._frustum2DWidth,\n        that._mode,\n        that._mapProjection,\n        that._view3D,\n      );\n    }\n    Matrix4.getMatrix3(that._view3D, that._viewRotation3D);\n    that._view3DDirty = false;\n  }\n}\n\nfunction updateInverseView3D(that) {\n  if (that._inverseView3DDirty) {\n    Matrix4.inverseTransformation(that.view3D, that._inverseView3D);\n    Matrix4.getMatrix3(that._inverseView3D, that._inverseViewRotation3D);\n    that._inverseView3DDirty = false;\n  }\n}\nexport default UniformState;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Buffer from \"./Buffer.js\";\nimport BufferUsage from \"./BufferUsage.js\";\nimport ContextLimits from \"./ContextLimits.js\";\nimport AttributeType from \"../Scene/AttributeType.js\";\n\nfunction addAttribute(attributes, attribute, index, context) {\n  const hasVertexBuffer = defined(attribute.vertexBuffer);\n  const hasValue = defined(attribute.value);\n  const componentsPerAttribute = attribute.value\n    ? attribute.value.length\n    : attribute.componentsPerAttribute;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!hasVertexBuffer && !hasValue) {\n    throw new DeveloperError(\"attribute must have a vertexBuffer or a value.\");\n  }\n  if (hasVertexBuffer && hasValue) {\n    throw new DeveloperError(\n      \"attribute cannot have both a vertexBuffer and a value.  It must have either a vertexBuffer property defining per-vertex data or a value property defining data for all vertices.\",\n    );\n  }\n  if (\n    componentsPerAttribute !== 1 &&\n    componentsPerAttribute !== 2 &&\n    componentsPerAttribute !== 3 &&\n    componentsPerAttribute !== 4\n  ) {\n    if (hasValue) {\n      throw new DeveloperError(\n        \"attribute.value.length must be in the range [1, 4].\",\n      );\n    }\n\n    throw new DeveloperError(\n      \"attribute.componentsPerAttribute must be in the range [1, 4].\",\n    );\n  }\n  if (\n    defined(attribute.componentDatatype) &&\n    !ComponentDatatype.validate(attribute.componentDatatype)\n  ) {\n    throw new DeveloperError(\n      \"attribute must have a valid componentDatatype or not specify it.\",\n    );\n  }\n  if (defined(attribute.strideInBytes) && attribute.strideInBytes > 255) {\n    // WebGL limit.  Not in GL ES.\n    throw new DeveloperError(\n      \"attribute must have a strideInBytes less than or equal to 255 or not specify it.\",\n    );\n  }\n  if (\n    defined(attribute.instanceDivisor) &&\n    attribute.instanceDivisor > 0 &&\n    !context.instancedArrays\n  ) {\n    throw new DeveloperError(\"instanced arrays is not supported\");\n  }\n  if (defined(attribute.instanceDivisor) && attribute.instanceDivisor < 0) {\n    throw new DeveloperError(\n      \"attribute must have an instanceDivisor greater than or equal to zero\",\n    );\n  }\n  if (defined(attribute.instanceDivisor) && hasValue) {\n    throw new DeveloperError(\n      \"attribute cannot have have an instanceDivisor if it is not backed by a buffer\",\n    );\n  }\n  if (\n    defined(attribute.instanceDivisor) &&\n    attribute.instanceDivisor > 0 &&\n    attribute.index === 0\n  ) {\n    throw new DeveloperError(\n      \"attribute zero cannot have an instanceDivisor greater than 0\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  // Shallow copy the attribute; we do not want to copy the vertex buffer.\n  const attr = {\n    index: attribute.index ?? index,\n    enabled: attribute.enabled ?? true,\n    vertexBuffer: attribute.vertexBuffer,\n    value: hasValue ? attribute.value.slice(0) : undefined,\n    componentsPerAttribute: componentsPerAttribute,\n    componentDatatype: attribute.componentDatatype ?? ComponentDatatype.FLOAT,\n    normalize: attribute.normalize ?? false,\n    offsetInBytes: attribute.offsetInBytes ?? 0,\n    strideInBytes: attribute.strideInBytes ?? 0,\n    instanceDivisor: attribute.instanceDivisor ?? 0,\n  };\n\n  if (hasVertexBuffer) {\n    // Common case: vertex buffer for per-vertex data\n    attr.vertexAttrib = function (gl) {\n      const index = this.index;\n      gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer._getBuffer());\n      gl.vertexAttribPointer(\n        index,\n        this.componentsPerAttribute,\n        this.componentDatatype,\n        this.normalize,\n        this.strideInBytes,\n        this.offsetInBytes,\n      );\n      gl.enableVertexAttribArray(index);\n      if (this.instanceDivisor > 0) {\n        context.glVertexAttribDivisor(index, this.instanceDivisor);\n        context._vertexAttribDivisors[index] = this.instanceDivisor;\n        context._previousDrawInstanced = true;\n      }\n    };\n\n    attr.disableVertexAttribArray = function (gl) {\n      gl.disableVertexAttribArray(this.index);\n      if (this.instanceDivisor > 0) {\n        context.glVertexAttribDivisor(index, 0);\n      }\n    };\n  } else {\n    // Less common case: value array for the same data for each vertex\n    switch (attr.componentsPerAttribute) {\n      case 1:\n        attr.vertexAttrib = function (gl) {\n          gl.vertexAttrib1fv(this.index, this.value);\n        };\n        break;\n      case 2:\n        attr.vertexAttrib = function (gl) {\n          gl.vertexAttrib2fv(this.index, this.value);\n        };\n        break;\n      case 3:\n        attr.vertexAttrib = function (gl) {\n          gl.vertexAttrib3fv(this.index, this.value);\n        };\n        break;\n      case 4:\n        attr.vertexAttrib = function (gl) {\n          gl.vertexAttrib4fv(this.index, this.value);\n        };\n        break;\n    }\n\n    attr.disableVertexAttribArray = function (gl) {};\n  }\n\n  attributes.push(attr);\n}\n\nfunction bind(gl, attributes, indexBuffer) {\n  for (let i = 0; i < attributes.length; ++i) {\n    const attribute = attributes[i];\n    if (attribute.enabled) {\n      attribute.vertexAttrib(gl);\n    }\n  }\n\n  if (defined(indexBuffer)) {\n    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer._getBuffer());\n  }\n}\n\n/**\n * Creates a vertex array, which defines the attributes making up a vertex, and contains an optional index buffer\n * to select vertices for rendering.  Attributes are defined using object literals as shown in Example 1 below.\n *\n * @param {object} options Object with the following properties:\n * @param {Context} options.context The context in which the VertexArray gets created.\n * @param {object[]} options.attributes An array of attributes.\n * @param {IndexBuffer} [options.indexBuffer] An optional index buffer.\n *\n * @returns {VertexArray} The vertex array, ready for use with drawing.\n *\n * @exception {DeveloperError} Attribute must have a <code>vertexBuffer</code>.\n * @exception {DeveloperError} Attribute must have a <code>componentsPerAttribute</code>.\n * @exception {DeveloperError} Attribute must have a valid <code>componentDatatype</code> or not specify it.\n * @exception {DeveloperError} Attribute must have a <code>strideInBytes</code> less than or equal to 255 or not specify it.\n * @exception {DeveloperError} Index n is used by more than one attribute.\n *\n *\n * @example\n * // Example 1. Create a vertex array with vertices made up of three floating point\n * // values, e.g., a position, from a single vertex buffer.  No index buffer is used.\n * const positionBuffer = Buffer.createVertexBuffer({\n *     context : context,\n *     sizeInBytes : 12,\n *     usage : BufferUsage.STATIC_DRAW\n * });\n * const attributes = [\n *     {\n *         index                  : 0,\n *         enabled                : true,\n *         vertexBuffer           : positionBuffer,\n *         componentsPerAttribute : 3,\n *         componentDatatype      : ComponentDatatype.FLOAT,\n *         normalize              : false,\n *         offsetInBytes          : 0,\n *         strideInBytes          : 0 // tightly packed\n *         instanceDivisor        : 0 // not instanced\n *     }\n * ];\n * const va = new VertexArray({\n *     context : context,\n *     attributes : attributes\n * });\n *\n * @example\n * // Example 2. Create a vertex array with vertices from two different vertex buffers.\n * // Each vertex has a three-component position and three-component normal.\n * const positionBuffer = Buffer.createVertexBuffer({\n *     context : context,\n *     sizeInBytes : 12,\n *     usage : BufferUsage.STATIC_DRAW\n * });\n * const normalBuffer = Buffer.createVertexBuffer({\n *     context : context,\n *     sizeInBytes : 12,\n *     usage : BufferUsage.STATIC_DRAW\n * });\n * const attributes = [\n *     {\n *         index                  : 0,\n *         vertexBuffer           : positionBuffer,\n *         componentsPerAttribute : 3,\n *         componentDatatype      : ComponentDatatype.FLOAT\n *     },\n *     {\n *         index                  : 1,\n *         vertexBuffer           : normalBuffer,\n *         componentsPerAttribute : 3,\n *         componentDatatype      : ComponentDatatype.FLOAT\n *     }\n * ];\n * const va = new VertexArray({\n *     context : context,\n *     attributes : attributes\n * });\n *\n * @example\n * // Example 3. Creates the same vertex layout as Example 2 using a single\n * // vertex buffer, instead of two.\n * const buffer = Buffer.createVertexBuffer({\n *     context : context,\n *     sizeInBytes : 24,\n *     usage : BufferUsage.STATIC_DRAW\n * });\n * const attributes = [\n *     {\n *         vertexBuffer           : buffer,\n *         componentsPerAttribute : 3,\n *         componentDatatype      : ComponentDatatype.FLOAT,\n *         offsetInBytes          : 0,\n *         strideInBytes          : 24\n *     },\n *     {\n *         vertexBuffer           : buffer,\n *         componentsPerAttribute : 3,\n *         componentDatatype      : ComponentDatatype.FLOAT,\n *         normalize              : true,\n *         offsetInBytes          : 12,\n *         strideInBytes          : 24\n *     }\n * ];\n * const va = new VertexArray({\n *     context : context,\n *     attributes : attributes\n * });\n *\n * @see Buffer#createVertexBuffer\n * @see Buffer#createIndexBuffer\n * @see Context#draw\n *\n * @private\n */\nfunction VertexArray(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  Check.defined(\"options.attributes\", options.attributes);\n  //>>includeEnd('debug');\n\n  const context = options.context;\n  const gl = context._gl;\n  const attributes = options.attributes;\n  const indexBuffer = options.indexBuffer;\n\n  let i;\n  const vaAttributes = [];\n  let numberOfVertices = 1; // if every attribute is backed by a single value\n  let hasInstancedAttributes = false;\n  let hasConstantAttributes = false;\n\n  let length = attributes.length;\n  for (i = 0; i < length; ++i) {\n    addAttribute(vaAttributes, attributes[i], i, context);\n  }\n\n  length = vaAttributes.length;\n  for (i = 0; i < length; ++i) {\n    const attribute = vaAttributes[i];\n\n    if (defined(attribute.vertexBuffer) && attribute.instanceDivisor === 0) {\n      // This assumes that each vertex buffer in the vertex array has the same number of vertices.\n      const bytes =\n        attribute.strideInBytes ||\n        attribute.componentsPerAttribute *\n          ComponentDatatype.getSizeInBytes(attribute.componentDatatype);\n      numberOfVertices = attribute.vertexBuffer.sizeInBytes / bytes;\n      break;\n    }\n  }\n\n  for (i = 0; i < length; ++i) {\n    if (vaAttributes[i].instanceDivisor > 0) {\n      hasInstancedAttributes = true;\n    }\n    if (defined(vaAttributes[i].value)) {\n      hasConstantAttributes = true;\n    }\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  // Verify all attribute names are unique\n  const uniqueIndices = {};\n  for (i = 0; i < length; ++i) {\n    const index = vaAttributes[i].index;\n    if (uniqueIndices[index]) {\n      throw new DeveloperError(\n        `Index ${index} is used by more than one attribute.`,\n      );\n    }\n    uniqueIndices[index] = true;\n  }\n  //>>includeEnd('debug');\n\n  let vao;\n\n  // Setup VAO if supported\n  if (context.vertexArrayObject) {\n    vao = context.glCreateVertexArray();\n    context.glBindVertexArray(vao);\n    bind(gl, vaAttributes, indexBuffer);\n    context.glBindVertexArray(null);\n  }\n\n  this._numberOfVertices = numberOfVertices;\n  this._hasInstancedAttributes = hasInstancedAttributes;\n  this._hasConstantAttributes = hasConstantAttributes;\n  this._context = context;\n  this._gl = gl;\n  this._vao = vao;\n  this._attributes = vaAttributes;\n  this._indexBuffer = indexBuffer;\n}\n\nfunction computeNumberOfVertices(attribute) {\n  return attribute.values.length / attribute.componentsPerAttribute;\n}\n\nfunction computeAttributeSizeInBytes(attribute) {\n  return (\n    ComponentDatatype.getSizeInBytes(attribute.componentDatatype) *\n    attribute.componentsPerAttribute\n  );\n}\n\nfunction interleaveAttributes(attributes) {\n  let j;\n  let name;\n  let attribute;\n\n  // Extract attribute names.\n  const names = [];\n  for (name in attributes) {\n    // Attribute needs to have per-vertex values; not a constant value for all vertices.\n    if (\n      attributes.hasOwnProperty(name) &&\n      defined(attributes[name]) &&\n      defined(attributes[name].values)\n    ) {\n      names.push(name);\n\n      if (attributes[name].componentDatatype === ComponentDatatype.DOUBLE) {\n        attributes[name].componentDatatype = ComponentDatatype.FLOAT;\n        attributes[name].values = ComponentDatatype.createTypedArray(\n          ComponentDatatype.FLOAT,\n          attributes[name].values,\n        );\n      }\n    }\n  }\n\n  // Validation.  Compute number of vertices.\n  let numberOfVertices;\n  const namesLength = names.length;\n\n  if (namesLength > 0) {\n    numberOfVertices = computeNumberOfVertices(attributes[names[0]]);\n\n    for (j = 1; j < namesLength; ++j) {\n      const currentNumberOfVertices = computeNumberOfVertices(\n        attributes[names[j]],\n      );\n\n      if (currentNumberOfVertices !== numberOfVertices) {\n        throw new RuntimeError(\n          `${\n            \"Each attribute list must have the same number of vertices.  \" +\n            \"Attribute \"\n          }${names[j]} has a different number of vertices ` +\n            `(${currentNumberOfVertices.toString()})` +\n            ` than attribute ${names[0]} (${numberOfVertices.toString()}).`,\n        );\n      }\n    }\n  }\n\n  // Sort attributes by the size of their components.  From left to right, a vertex stores floats, shorts, and then bytes.\n  names.sort(function (left, right) {\n    return (\n      ComponentDatatype.getSizeInBytes(attributes[right].componentDatatype) -\n      ComponentDatatype.getSizeInBytes(attributes[left].componentDatatype)\n    );\n  });\n\n  // Compute sizes and strides.\n  let vertexSizeInBytes = 0;\n  const offsetsInBytes = {};\n\n  for (j = 0; j < namesLength; ++j) {\n    name = names[j];\n    attribute = attributes[name];\n\n    offsetsInBytes[name] = vertexSizeInBytes;\n    vertexSizeInBytes += computeAttributeSizeInBytes(attribute);\n  }\n\n  if (vertexSizeInBytes > 0) {\n    // Pad each vertex to be a multiple of the largest component datatype so each\n    // attribute can be addressed using typed arrays.\n    const maxComponentSizeInBytes = ComponentDatatype.getSizeInBytes(\n      attributes[names[0]].componentDatatype,\n    ); // Sorted large to small\n    const remainder = vertexSizeInBytes % maxComponentSizeInBytes;\n    if (remainder !== 0) {\n      vertexSizeInBytes += maxComponentSizeInBytes - remainder;\n    }\n\n    // Total vertex buffer size in bytes, including per-vertex padding.\n    const vertexBufferSizeInBytes = numberOfVertices * vertexSizeInBytes;\n\n    // Create array for interleaved vertices.  Each attribute has a different view (pointer) into the array.\n    const buffer = new ArrayBuffer(vertexBufferSizeInBytes);\n    const views = {};\n\n    for (j = 0; j < namesLength; ++j) {\n      name = names[j];\n      const sizeInBytes = ComponentDatatype.getSizeInBytes(\n        attributes[name].componentDatatype,\n      );\n\n      views[name] = {\n        pointer: ComponentDatatype.createTypedArray(\n          attributes[name].componentDatatype,\n          buffer,\n        ),\n        index: offsetsInBytes[name] / sizeInBytes, // Offset in ComponentType\n        strideInComponentType: vertexSizeInBytes / sizeInBytes,\n      };\n    }\n\n    // Copy attributes into one interleaved array.\n    // PERFORMANCE_IDEA:  Can we optimize these loops?\n    for (j = 0; j < numberOfVertices; ++j) {\n      for (let n = 0; n < namesLength; ++n) {\n        name = names[n];\n        attribute = attributes[name];\n        const values = attribute.values;\n        const view = views[name];\n        const pointer = view.pointer;\n\n        const numberOfComponents = attribute.componentsPerAttribute;\n        for (let k = 0; k < numberOfComponents; ++k) {\n          pointer[view.index + k] = values[j * numberOfComponents + k];\n        }\n\n        view.index += view.strideInComponentType;\n      }\n    }\n\n    return {\n      buffer: buffer,\n      offsetsInBytes: offsetsInBytes,\n      vertexSizeInBytes: vertexSizeInBytes,\n    };\n  }\n\n  // No attributes to interleave.\n  return undefined;\n}\n\n/**\n * Creates a vertex array from a geometry.  A geometry contains vertex attributes and optional index data\n * in system memory, whereas a vertex array contains vertex buffers and an optional index buffer in WebGL\n * memory for use with rendering.\n * <br /><br />\n * The <code>geometry</code> argument should use the standard layout like the geometry returned by {@link BoxGeometry}.\n * <br /><br />\n * <code>options</code> can have four properties:\n * <ul>\n *   <li><code>geometry</code>:  The source geometry containing data used to create the vertex array.</li>\n *   <li><code>attributeLocations</code>:  An object that maps geometry attribute names to vertex shader attribute locations.</li>\n *   <li><code>bufferUsage</code>:  The expected usage pattern of the vertex array's buffers.  On some WebGL implementations, this can significantly affect performance.  See {@link BufferUsage}.  Default: <code>BufferUsage.DYNAMIC_DRAW</code>.</li>\n *   <li><code>interleave</code>:  Determines if all attributes are interleaved in a single vertex buffer or if each attribute is stored in a separate vertex buffer.  Default: <code>false</code>.</li>\n * </ul>\n * <br />\n * If <code>options</code> is not specified or the <code>geometry</code> contains no data, the returned vertex array is empty.\n *\n * @param {object} options An object defining the geometry, attribute indices, buffer usage, and vertex layout used to create the vertex array.\n *\n * @exception {RuntimeError} Each attribute list must have the same number of vertices.\n * @exception {DeveloperError} The geometry must have zero or one index lists.\n * @exception {DeveloperError} Index n is used by more than one attribute.\n *\n *\n * @example\n * // Example 1. Creates a vertex array for rendering a box.  The default dynamic draw\n * // usage is used for the created vertex and index buffer.  The attributes are not\n * // interleaved by default.\n * const geometry = new BoxGeometry();\n * const va = VertexArray.fromGeometry({\n *     context            : context,\n *     geometry           : geometry,\n *     attributeLocations : GeometryPipeline.createAttributeLocations(geometry),\n * });\n *\n * @example\n * // Example 2. Creates a vertex array with interleaved attributes in a\n * // single vertex buffer.  The vertex and index buffer have static draw usage.\n * const va = VertexArray.fromGeometry({\n *     context            : context,\n *     geometry           : geometry,\n *     attributeLocations : GeometryPipeline.createAttributeLocations(geometry),\n *     bufferUsage        : BufferUsage.STATIC_DRAW,\n *     interleave         : true\n * });\n *\n * @example\n * // Example 3.  When the caller destroys the vertex array, it also destroys the\n * // attached vertex buffer(s) and index buffer.\n * va = va.destroy();\n *\n * @see Buffer#createVertexBuffer\n * @see Buffer#createIndexBuffer\n * @see GeometryPipeline.createAttributeLocations\n * @see ShaderProgram\n */\nVertexArray.fromGeometry = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.context\", options.context);\n  //>>includeEnd('debug');\n\n  const context = options.context;\n  const geometry = options.geometry ?? Frozen.EMPTY_OBJECT;\n\n  const bufferUsage = options.bufferUsage ?? BufferUsage.DYNAMIC_DRAW;\n\n  const attributeLocations = options.attributeLocations ?? Frozen.EMPTY_OBJECT;\n  const interleave = options.interleave ?? false;\n  const createdVAAttributes = options.vertexArrayAttributes;\n\n  let name;\n  let attribute;\n  let vertexBuffer;\n  const vaAttributes = defined(createdVAAttributes) ? createdVAAttributes : [];\n  const attributes = geometry.attributes;\n\n  if (interleave) {\n    // Use a single vertex buffer with interleaved vertices.\n    const interleavedAttributes = interleaveAttributes(attributes);\n    if (defined(interleavedAttributes)) {\n      vertexBuffer = Buffer.createVertexBuffer({\n        context: context,\n        typedArray: interleavedAttributes.buffer,\n        usage: bufferUsage,\n      });\n      const offsetsInBytes = interleavedAttributes.offsetsInBytes;\n      const strideInBytes = interleavedAttributes.vertexSizeInBytes;\n\n      for (name in attributes) {\n        if (attributes.hasOwnProperty(name) && defined(attributes[name])) {\n          attribute = attributes[name];\n\n          if (defined(attribute.values)) {\n            // Common case: per-vertex attributes\n            vaAttributes.push({\n              index: attributeLocations[name],\n              vertexBuffer: vertexBuffer,\n              componentDatatype: attribute.componentDatatype,\n              componentsPerAttribute: attribute.componentsPerAttribute,\n              normalize: attribute.normalize,\n              offsetInBytes: offsetsInBytes[name],\n              strideInBytes: strideInBytes,\n            });\n          } else {\n            // Constant attribute for all vertices\n            vaAttributes.push({\n              index: attributeLocations[name],\n              value: attribute.value,\n              componentDatatype: attribute.componentDatatype,\n              normalize: attribute.normalize,\n            });\n          }\n        }\n      }\n    }\n  } else {\n    // One vertex buffer per attribute.\n    for (name in attributes) {\n      if (attributes.hasOwnProperty(name) && defined(attributes[name])) {\n        attribute = attributes[name];\n\n        let componentDatatype = attribute.componentDatatype;\n        if (componentDatatype === ComponentDatatype.DOUBLE) {\n          componentDatatype = ComponentDatatype.FLOAT;\n        }\n\n        let attrProps = {};\n        vertexBuffer = undefined;\n        if (defined(attribute.values)) {\n          vertexBuffer = Buffer.createVertexBuffer({\n            context: context,\n            typedArray: ComponentDatatype.createTypedArray(\n              componentDatatype,\n              attribute.values,\n            ),\n            usage: bufferUsage,\n          });\n\n          attrProps = {\n            index: attributeLocations[name],\n            vertexBuffer: vertexBuffer,\n            value: attribute.value,\n            componentDatatype: componentDatatype,\n            componentsPerAttribute: attribute.componentsPerAttribute,\n            normalize: attribute.normalize,\n          };\n        }\n\n        //if we already have a typedArray lets use it\n        if (defined(attribute.typedArray)) {\n          vertexBuffer = Buffer.createVertexBuffer({\n            context: context,\n            typedArray: attribute.typedArray,\n            usage: bufferUsage,\n          });\n\n          attrProps = {\n            index: attributeLocations[name],\n            vertexBuffer: vertexBuffer,\n            value: undefined,\n            componentDatatype: componentDatatype,\n            componentsPerAttribute: AttributeType.getNumberOfComponents(\n              attribute.type,\n            ),\n            normalize: attribute.normalized,\n            instanceDivisor: attribute.instanceDivisor,\n          };\n        }\n\n        vaAttributes.push(attrProps);\n      }\n    }\n  }\n\n  let indexBuffer;\n  const indices = geometry.indices;\n  if (defined(indices)) {\n    if (\n      Geometry.computeNumberOfVertices(geometry) >=\n        CesiumMath.SIXTY_FOUR_KILOBYTES &&\n      context.elementIndexUint\n    ) {\n      indexBuffer = Buffer.createIndexBuffer({\n        context: context,\n        typedArray: new Uint32Array(indices),\n        usage: bufferUsage,\n        indexDatatype: IndexDatatype.UNSIGNED_INT,\n      });\n    } else {\n      indexBuffer = Buffer.createIndexBuffer({\n        context: context,\n        typedArray: new Uint16Array(indices),\n        usage: bufferUsage,\n        indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n      });\n    }\n  }\n\n  return new VertexArray({\n    context: context,\n    attributes: vaAttributes,\n    indexBuffer: indexBuffer,\n  });\n};\n\nObject.defineProperties(VertexArray.prototype, {\n  numberOfAttributes: {\n    get: function () {\n      return this._attributes.length;\n    },\n  },\n  numberOfVertices: {\n    get: function () {\n      return this._numberOfVertices;\n    },\n  },\n  indexBuffer: {\n    get: function () {\n      return this._indexBuffer;\n    },\n  },\n});\n\n/**\n * index is the location in the array of attributes, not the index property of an attribute.\n */\nVertexArray.prototype.getAttribute = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"index\", index);\n  //>>includeEnd('debug');\n\n  return this._attributes[index];\n};\n\n// Workaround for ANGLE, where the attribute divisor seems to be part of the global state instead\n// of the VAO state. This function is called when the vao is bound, and should be removed\n// once the ANGLE issue is resolved. Setting the divisor should normally happen in vertexAttrib and\n// disableVertexAttribArray.\nfunction setVertexAttribDivisor(vertexArray) {\n  const context = vertexArray._context;\n  const hasInstancedAttributes = vertexArray._hasInstancedAttributes;\n  if (!hasInstancedAttributes && !context._previousDrawInstanced) {\n    return;\n  }\n  context._previousDrawInstanced = hasInstancedAttributes;\n\n  const divisors = context._vertexAttribDivisors;\n  const attributes = vertexArray._attributes;\n  const maxAttributes = ContextLimits.maximumVertexAttributes;\n  let i;\n\n  if (hasInstancedAttributes) {\n    const length = attributes.length;\n    for (i = 0; i < length; ++i) {\n      const attribute = attributes[i];\n      if (attribute.enabled) {\n        const divisor = attribute.instanceDivisor;\n        const index = attribute.index;\n        if (divisor !== divisors[index]) {\n          context.glVertexAttribDivisor(index, divisor);\n          divisors[index] = divisor;\n        }\n      }\n    }\n  } else {\n    for (i = 0; i < maxAttributes; ++i) {\n      if (divisors[i] > 0) {\n        context.glVertexAttribDivisor(i, 0);\n        divisors[i] = 0;\n      }\n    }\n  }\n}\n\n// Vertex attributes backed by a constant value go through vertexAttrib[1234]f[v]\n// which is part of context state rather than VAO state.\nfunction setConstantAttributes(vertexArray, gl) {\n  const attributes = vertexArray._attributes;\n  const length = attributes.length;\n  for (let i = 0; i < length; ++i) {\n    const attribute = attributes[i];\n    if (attribute.enabled && defined(attribute.value)) {\n      attribute.vertexAttrib(gl);\n    }\n  }\n}\n\nVertexArray.prototype._bind = function () {\n  if (defined(this._vao)) {\n    this._context.glBindVertexArray(this._vao);\n    if (this._context.instancedArrays) {\n      setVertexAttribDivisor(this);\n    }\n    if (this._hasConstantAttributes) {\n      setConstantAttributes(this, this._gl);\n    }\n  } else {\n    bind(this._gl, this._attributes, this._indexBuffer);\n  }\n};\n\nVertexArray.prototype._unBind = function () {\n  if (defined(this._vao)) {\n    this._context.glBindVertexArray(null);\n  } else {\n    const attributes = this._attributes;\n    const gl = this._gl;\n\n    for (let i = 0; i < attributes.length; ++i) {\n      const attribute = attributes[i];\n      if (attribute.enabled) {\n        attribute.disableVertexAttribArray(gl);\n      }\n    }\n    if (this._indexBuffer) {\n      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n    }\n  }\n};\n\nVertexArray.prototype.isDestroyed = function () {\n  return false;\n};\n\nVertexArray.prototype.destroy = function () {\n  const attributes = this._attributes;\n  for (let i = 0; i < attributes.length; ++i) {\n    const vertexBuffer = attributes[i].vertexBuffer;\n    if (\n      defined(vertexBuffer) &&\n      !vertexBuffer.isDestroyed() &&\n      vertexBuffer.vertexArrayDestroyable\n    ) {\n      vertexBuffer.destroy();\n    }\n  }\n\n  const indexBuffer = this._indexBuffer;\n  if (\n    defined(indexBuffer) &&\n    !indexBuffer.isDestroyed() &&\n    indexBuffer.vertexArrayDestroyable\n  ) {\n    indexBuffer.destroy();\n  }\n\n  if (defined(this._vao)) {\n    this._context.glDeleteVertexArray(this._vao);\n  }\n\n  return destroyObject(this);\n};\nexport default VertexArray;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Buffer from \"./Buffer.js\";\nimport BufferUsage from \"./BufferUsage.js\";\nimport VertexArray from \"./VertexArray.js\";\n\n/**\n * @private\n */\nfunction VertexArrayFacade(context, attributes, sizeInVertices, instanced) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"context\", context);\n  if (!attributes || attributes.length === 0) {\n    throw new DeveloperError(\"At least one attribute is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const attrs = VertexArrayFacade._verifyAttributes(attributes);\n  sizeInVertices = sizeInVertices ?? 0;\n  const precreatedAttributes = [];\n  const attributesByUsage = {};\n  let attributesForUsage;\n  let usage;\n\n  // Bucket the attributes by usage.\n  const length = attrs.length;\n  for (let i = 0; i < length; ++i) {\n    const attribute = attrs[i];\n\n    // If the attribute already has a vertex buffer, we do not need\n    // to manage a vertex buffer or typed array for it.\n    if (attribute.vertexBuffer) {\n      precreatedAttributes.push(attribute);\n      continue;\n    }\n\n    usage = attribute.usage;\n    attributesForUsage = attributesByUsage[usage];\n    if (!defined(attributesForUsage)) {\n      attributesForUsage = attributesByUsage[usage] = [];\n    }\n\n    attributesForUsage.push(attribute);\n  }\n\n  // A function to sort attributes by the size of their components.  From left to right, a vertex\n  // stores floats, shorts, and then bytes.\n  function compare(left, right) {\n    return (\n      ComponentDatatype.getSizeInBytes(right.componentDatatype) -\n      ComponentDatatype.getSizeInBytes(left.componentDatatype)\n    );\n  }\n\n  this._allBuffers = [];\n\n  for (usage in attributesByUsage) {\n    if (attributesByUsage.hasOwnProperty(usage)) {\n      attributesForUsage = attributesByUsage[usage];\n\n      attributesForUsage.sort(compare);\n      const vertexSizeInBytes =\n        VertexArrayFacade._vertexSizeInBytes(attributesForUsage);\n\n      const bufferUsage = attributesForUsage[0].usage;\n\n      const buffer = {\n        vertexSizeInBytes: vertexSizeInBytes,\n        vertexBuffer: undefined,\n        usage: bufferUsage,\n        needsCommit: false,\n        arrayBuffer: undefined,\n        arrayViews: VertexArrayFacade._createArrayViews(\n          attributesForUsage,\n          vertexSizeInBytes,\n        ),\n      };\n\n      this._allBuffers.push(buffer);\n    }\n  }\n\n  this._size = 0;\n  this._instanced = instanced ?? false;\n\n  this._precreated = precreatedAttributes;\n  this._context = context;\n\n  this.writers = undefined;\n  this.va = undefined;\n\n  this.resize(sizeInVertices);\n}\nVertexArrayFacade._verifyAttributes = function (attributes) {\n  const attrs = [];\n\n  for (let i = 0; i < attributes.length; ++i) {\n    const attribute = attributes[i];\n\n    const attr = {\n      index: attribute.index ?? i,\n      enabled: attribute.enabled ?? true,\n      componentsPerAttribute: attribute.componentsPerAttribute,\n      componentDatatype: attribute.componentDatatype ?? ComponentDatatype.FLOAT,\n      normalize: attribute.normalize ?? false,\n\n      // There will be either a vertexBuffer or an [optional] usage.\n      vertexBuffer: attribute.vertexBuffer,\n      usage: attribute.usage ?? BufferUsage.STATIC_DRAW,\n    };\n    attrs.push(attr);\n\n    //>>includeStart('debug', pragmas.debug);\n    if (\n      attr.componentsPerAttribute !== 1 &&\n      attr.componentsPerAttribute !== 2 &&\n      attr.componentsPerAttribute !== 3 &&\n      attr.componentsPerAttribute !== 4\n    ) {\n      throw new DeveloperError(\n        \"attribute.componentsPerAttribute must be in the range [1, 4].\",\n      );\n    }\n\n    const datatype = attr.componentDatatype;\n    if (!ComponentDatatype.validate(datatype)) {\n      throw new DeveloperError(\n        \"Attribute must have a valid componentDatatype or not specify it.\",\n      );\n    }\n\n    if (!BufferUsage.validate(attr.usage)) {\n      throw new DeveloperError(\n        \"Attribute must have a valid usage or not specify it.\",\n      );\n    }\n    //>>includeEnd('debug');\n  }\n\n  // Verify all attribute names are unique.\n  const uniqueIndices = new Array(attrs.length);\n  for (let j = 0; j < attrs.length; ++j) {\n    const currentAttr = attrs[j];\n    const index = currentAttr.index;\n    //>>includeStart('debug', pragmas.debug);\n    if (uniqueIndices[index]) {\n      throw new DeveloperError(\n        `Index ${index} is used by more than one attribute.`,\n      );\n    }\n    //>>includeEnd('debug');\n    uniqueIndices[index] = true;\n  }\n\n  return attrs;\n};\n\nVertexArrayFacade._vertexSizeInBytes = function (attributes) {\n  let sizeInBytes = 0;\n\n  const length = attributes.length;\n  for (let i = 0; i < length; ++i) {\n    const attribute = attributes[i];\n    sizeInBytes +=\n      attribute.componentsPerAttribute *\n      ComponentDatatype.getSizeInBytes(attribute.componentDatatype);\n  }\n\n  const maxComponentSizeInBytes =\n    length > 0\n      ? ComponentDatatype.getSizeInBytes(attributes[0].componentDatatype)\n      : 0; // Sorted by size\n  const remainder =\n    maxComponentSizeInBytes > 0 ? sizeInBytes % maxComponentSizeInBytes : 0;\n  const padding = remainder === 0 ? 0 : maxComponentSizeInBytes - remainder;\n  sizeInBytes += padding;\n\n  return sizeInBytes;\n};\n\nVertexArrayFacade._createArrayViews = function (attributes, vertexSizeInBytes) {\n  const views = [];\n  let offsetInBytes = 0;\n\n  const length = attributes.length;\n  for (let i = 0; i < length; ++i) {\n    const attribute = attributes[i];\n    const componentDatatype = attribute.componentDatatype;\n\n    views.push({\n      index: attribute.index,\n      enabled: attribute.enabled,\n      componentsPerAttribute: attribute.componentsPerAttribute,\n      componentDatatype: componentDatatype,\n      normalize: attribute.normalize,\n\n      offsetInBytes: offsetInBytes,\n      vertexSizeInComponentType:\n        vertexSizeInBytes / ComponentDatatype.getSizeInBytes(componentDatatype),\n\n      view: undefined,\n    });\n\n    offsetInBytes +=\n      attribute.componentsPerAttribute *\n      ComponentDatatype.getSizeInBytes(componentDatatype);\n  }\n\n  return views;\n};\n\n/**\n * Invalidates writers.  Can't render again until commit is called.\n */\nVertexArrayFacade.prototype.resize = function (sizeInVertices) {\n  this._size = sizeInVertices;\n\n  const allBuffers = this._allBuffers;\n  this.writers = [];\n\n  for (let i = 0, len = allBuffers.length; i < len; ++i) {\n    const buffer = allBuffers[i];\n\n    VertexArrayFacade._resize(buffer, this._size);\n\n    // Reserving invalidates the writers, so if client's cache them, they need to invalidate their cache.\n    VertexArrayFacade._appendWriters(this.writers, buffer);\n  }\n\n  // VAs are recreated next time commit is called.\n  destroyVA(this);\n};\n\nVertexArrayFacade._resize = function (buffer, size) {\n  if (buffer.vertexSizeInBytes > 0) {\n    // Create larger array buffer\n    const arrayBuffer = new ArrayBuffer(size * buffer.vertexSizeInBytes);\n\n    // Copy contents from previous array buffer\n    if (defined(buffer.arrayBuffer)) {\n      const destView = new Uint8Array(arrayBuffer);\n      const sourceView = new Uint8Array(buffer.arrayBuffer);\n      const sourceLength = sourceView.length;\n      for (let j = 0; j < sourceLength; ++j) {\n        destView[j] = sourceView[j];\n      }\n    }\n\n    // Create typed views into the new array buffer\n    const views = buffer.arrayViews;\n    const length = views.length;\n    for (let i = 0; i < length; ++i) {\n      const view = views[i];\n      view.view = ComponentDatatype.createArrayBufferView(\n        view.componentDatatype,\n        arrayBuffer,\n        view.offsetInBytes,\n      );\n    }\n\n    buffer.arrayBuffer = arrayBuffer;\n  }\n};\n\nconst createWriters = [\n  // 1 component per attribute\n  function (buffer, view, vertexSizeInComponentType) {\n    return function (index, attribute) {\n      view[index * vertexSizeInComponentType] = attribute;\n      buffer.needsCommit = true;\n    };\n  },\n\n  // 2 component per attribute\n  function (buffer, view, vertexSizeInComponentType) {\n    return function (index, component0, component1) {\n      const i = index * vertexSizeInComponentType;\n      view[i] = component0;\n      view[i + 1] = component1;\n      buffer.needsCommit = true;\n    };\n  },\n\n  // 3 component per attribute\n  function (buffer, view, vertexSizeInComponentType) {\n    return function (index, component0, component1, component2) {\n      const i = index * vertexSizeInComponentType;\n      view[i] = component0;\n      view[i + 1] = component1;\n      view[i + 2] = component2;\n      buffer.needsCommit = true;\n    };\n  },\n\n  // 4 component per attribute\n  function (buffer, view, vertexSizeInComponentType) {\n    return function (index, component0, component1, component2, component3) {\n      const i = index * vertexSizeInComponentType;\n      view[i] = component0;\n      view[i + 1] = component1;\n      view[i + 2] = component2;\n      view[i + 3] = component3;\n      buffer.needsCommit = true;\n    };\n  },\n];\n\nVertexArrayFacade._appendWriters = function (writers, buffer) {\n  const arrayViews = buffer.arrayViews;\n  const length = arrayViews.length;\n  for (let i = 0; i < length; ++i) {\n    const arrayView = arrayViews[i];\n    writers[arrayView.index] = createWriters[\n      arrayView.componentsPerAttribute - 1\n    ](buffer, arrayView.view, arrayView.vertexSizeInComponentType);\n  }\n};\n\nVertexArrayFacade.prototype.commit = function (indexBuffer) {\n  let recreateVA = false;\n\n  const allBuffers = this._allBuffers;\n  let buffer;\n  let i;\n  let length;\n\n  for (i = 0, length = allBuffers.length; i < length; ++i) {\n    buffer = allBuffers[i];\n    recreateVA = commit(this, buffer) || recreateVA;\n  }\n\n  ///////////////////////////////////////////////////////////////////////\n\n  if (recreateVA || !defined(this.va)) {\n    destroyVA(this);\n    const va = (this.va = []);\n\n    const chunkSize = CesiumMath.SIXTY_FOUR_KILOBYTES - 4; // The 65535 index is reserved for primitive restart. Reserve the last 4 indices so that billboard quads are not broken up.\n    const numberOfVertexArrays =\n      defined(indexBuffer) && !this._instanced\n        ? Math.ceil(this._size / chunkSize)\n        : 1;\n    for (let k = 0; k < numberOfVertexArrays; ++k) {\n      let attributes = [];\n      for (i = 0, length = allBuffers.length; i < length; ++i) {\n        buffer = allBuffers[i];\n        const offset = k * (buffer.vertexSizeInBytes * chunkSize);\n        VertexArrayFacade._appendAttributes(\n          attributes,\n          buffer,\n          offset,\n          this._instanced,\n        );\n      }\n\n      attributes = attributes.concat(this._precreated);\n\n      va.push({\n        va: new VertexArray({\n          context: this._context,\n          attributes: attributes,\n          indexBuffer: indexBuffer,\n        }),\n        indicesCount:\n          1.5 *\n          (k !== numberOfVertexArrays - 1 ? chunkSize : this._size % chunkSize),\n        // TODO: not hardcode 1.5, this assumes 6 indices per 4 vertices (as for Billboard quads).\n      });\n    }\n  }\n};\n\nfunction commit(vertexArrayFacade, buffer) {\n  if (buffer.needsCommit && buffer.vertexSizeInBytes > 0) {\n    buffer.needsCommit = false;\n\n    const vertexBuffer = buffer.vertexBuffer;\n    const vertexBufferSizeInBytes =\n      vertexArrayFacade._size * buffer.vertexSizeInBytes;\n    const vertexBufferDefined = defined(vertexBuffer);\n    if (\n      !vertexBufferDefined ||\n      vertexBuffer.sizeInBytes < vertexBufferSizeInBytes\n    ) {\n      if (vertexBufferDefined) {\n        vertexBuffer.destroy();\n      }\n      buffer.vertexBuffer = Buffer.createVertexBuffer({\n        context: vertexArrayFacade._context,\n        typedArray: buffer.arrayBuffer,\n        usage: buffer.usage,\n      });\n      buffer.vertexBuffer.vertexArrayDestroyable = false;\n\n      return true; // Created new vertex buffer\n    }\n\n    buffer.vertexBuffer.copyFromArrayView(buffer.arrayBuffer);\n  }\n\n  return false; // Did not create new vertex buffer\n}\n\nVertexArrayFacade._appendAttributes = function (\n  attributes,\n  buffer,\n  vertexBufferOffset,\n  instanced,\n) {\n  const arrayViews = buffer.arrayViews;\n  const length = arrayViews.length;\n  for (let i = 0; i < length; ++i) {\n    const view = arrayViews[i];\n\n    attributes.push({\n      index: view.index,\n      enabled: view.enabled,\n      componentsPerAttribute: view.componentsPerAttribute,\n      componentDatatype: view.componentDatatype,\n      normalize: view.normalize,\n      vertexBuffer: buffer.vertexBuffer,\n      offsetInBytes: vertexBufferOffset + view.offsetInBytes,\n      strideInBytes: buffer.vertexSizeInBytes,\n      instanceDivisor: instanced ? 1 : 0,\n    });\n  }\n};\n\nVertexArrayFacade.prototype.subCommit = function (\n  offsetInVertices,\n  lengthInVertices,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (offsetInVertices < 0 || offsetInVertices >= this._size) {\n    throw new DeveloperError(\n      \"offsetInVertices must be greater than or equal to zero and less than the vertex array size.\",\n    );\n  }\n  if (offsetInVertices + lengthInVertices > this._size) {\n    throw new DeveloperError(\n      \"offsetInVertices + lengthInVertices cannot exceed the vertex array size.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const allBuffers = this._allBuffers;\n  for (let i = 0, len = allBuffers.length; i < len; ++i) {\n    subCommit(allBuffers[i], offsetInVertices, lengthInVertices);\n  }\n};\n\nfunction subCommit(buffer, offsetInVertices, lengthInVertices) {\n  if (buffer.needsCommit && buffer.vertexSizeInBytes > 0) {\n    const byteOffset = buffer.vertexSizeInBytes * offsetInVertices;\n    const byteLength = buffer.vertexSizeInBytes * lengthInVertices;\n\n    // PERFORMANCE_IDEA: If we want to get really crazy, we could consider updating\n    // individual attributes instead of the entire (sub-)vertex.\n    //\n    // PERFORMANCE_IDEA: Does creating the typed view add too much GC overhead?\n    buffer.vertexBuffer.copyFromArrayView(\n      new Uint8Array(buffer.arrayBuffer, byteOffset, byteLength),\n      byteOffset,\n    );\n  }\n}\n\nVertexArrayFacade.prototype.endSubCommits = function () {\n  const allBuffers = this._allBuffers;\n\n  for (let i = 0, len = allBuffers.length; i < len; ++i) {\n    allBuffers[i].needsCommit = false;\n  }\n};\n\nfunction destroyVA(vertexArrayFacade) {\n  const va = vertexArrayFacade.va;\n  if (!defined(va)) {\n    return;\n  }\n\n  const length = va.length;\n  for (let i = 0; i < length; ++i) {\n    va[i].va.destroy();\n  }\n\n  vertexArrayFacade.va = undefined;\n}\n\nVertexArrayFacade.prototype.isDestroyed = function () {\n  return false;\n};\n\nVertexArrayFacade.prototype.destroy = function () {\n  const allBuffers = this._allBuffers;\n  for (let i = 0, len = allBuffers.length; i < len; ++i) {\n    const buffer = allBuffers[i];\n    buffer.vertexBuffer = buffer.vertexBuffer && buffer.vertexBuffer.destroy();\n  }\n\n  destroyVA(this);\n\n  return destroyObject(this);\n};\nexport default VertexArrayFacade;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * @private\n * @constructor\n */\nfunction createUniform(gl, activeUniform, uniformName, location) {\n  switch (activeUniform.type) {\n    case gl.FLOAT:\n      return new UniformFloat(gl, activeUniform, uniformName, location);\n    case gl.FLOAT_VEC2:\n      return new UniformFloatVec2(gl, activeUniform, uniformName, location);\n    case gl.FLOAT_VEC3:\n      return new UniformFloatVec3(gl, activeUniform, uniformName, location);\n    case gl.FLOAT_VEC4:\n      return new UniformFloatVec4(gl, activeUniform, uniformName, location);\n    case gl.SAMPLER_2D:\n    case gl.SAMPLER_3D:\n    case gl.SAMPLER_CUBE:\n      return new UniformSampler(gl, activeUniform, uniformName, location);\n    case gl.UNSIGNED_INT_SAMPLER_2D:\n      return new UniformSampler(gl, activeUniform, uniformName, location);\n    case gl.INT:\n    case gl.BOOL:\n      return new UniformInt(gl, activeUniform, uniformName, location);\n    case gl.INT_VEC2:\n    case gl.BOOL_VEC2:\n      return new UniformIntVec2(gl, activeUniform, uniformName, location);\n    case gl.INT_VEC3:\n    case gl.BOOL_VEC3:\n      return new UniformIntVec3(gl, activeUniform, uniformName, location);\n    case gl.INT_VEC4:\n    case gl.BOOL_VEC4:\n      return new UniformIntVec4(gl, activeUniform, uniformName, location);\n    case gl.FLOAT_MAT2:\n      return new UniformMat2(gl, activeUniform, uniformName, location);\n    case gl.FLOAT_MAT3:\n      return new UniformMat3(gl, activeUniform, uniformName, location);\n    case gl.FLOAT_MAT4:\n      return new UniformMat4(gl, activeUniform, uniformName, location);\n    default:\n      throw new RuntimeError(\n        `Unrecognized uniform type: ${activeUniform.type} for uniform \"${uniformName}\".`,\n      );\n  }\n}\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloat(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = 0.0;\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformFloat.prototype.set = function () {\n  if (this.value !== this._value) {\n    this._value = this.value;\n    this._gl.uniform1f(this._location, this.value);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloatVec2(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = new Cartesian2();\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformFloatVec2.prototype.set = function () {\n  const v = this.value;\n  if (!Cartesian2.equals(v, this._value)) {\n    Cartesian2.clone(v, this._value);\n    this._gl.uniform2f(this._location, v.x, v.y);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloatVec3(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = undefined;\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformFloatVec3.prototype.set = function () {\n  const v = this.value;\n\n  if (defined(v.red)) {\n    if (!Color.equals(v, this._value)) {\n      this._value = Color.clone(v, this._value);\n      this._gl.uniform3f(this._location, v.red, v.green, v.blue);\n    }\n  } else if (defined(v.x)) {\n    if (!Cartesian3.equals(v, this._value)) {\n      this._value = Cartesian3.clone(v, this._value);\n      this._gl.uniform3f(this._location, v.x, v.y, v.z);\n    }\n  } else {\n    //>>includeStart('debug', pragmas.debug);\n    throw new DeveloperError(`Invalid vec3 value for uniform \"${this.name}\".`);\n    //>>includeEnd('debug');\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformFloatVec4(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = undefined;\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformFloatVec4.prototype.set = function () {\n  const v = this.value;\n\n  if (defined(v.red)) {\n    if (!Color.equals(v, this._value)) {\n      this._value = Color.clone(v, this._value);\n      this._gl.uniform4f(this._location, v.red, v.green, v.blue, v.alpha);\n    }\n  } else if (defined(v.x)) {\n    if (!Cartesian4.equals(v, this._value)) {\n      this._value = Cartesian4.clone(v, this._value);\n      this._gl.uniform4f(this._location, v.x, v.y, v.z, v.w);\n    }\n  } else {\n    //>>includeStart('debug', pragmas.debug);\n    throw new DeveloperError(`Invalid vec4 value for uniform \"${this.name}\".`);\n    //>>includeEnd('debug');\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformSampler(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n\n  this._gl = gl;\n  this._location = location;\n\n  this.textureUnitIndex = undefined;\n}\n\nUniformSampler.prototype.set = function () {\n  const gl = this._gl;\n  gl.activeTexture(gl.TEXTURE0 + this.textureUnitIndex);\n\n  const v = this.value;\n  gl.bindTexture(v._target, v._texture);\n};\n\nUniformSampler.prototype._setSampler = function (textureUnitIndex) {\n  this.textureUnitIndex = textureUnitIndex;\n  this._gl.uniform1i(this._location, textureUnitIndex);\n  return textureUnitIndex + 1;\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformInt(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = 0.0;\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformInt.prototype.set = function () {\n  if (this.value !== this._value) {\n    this._value = this.value;\n    this._gl.uniform1i(this._location, this.value);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n/**\n * @private\n * @constructor\n */\nfunction UniformIntVec2(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = new Cartesian2();\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformIntVec2.prototype.set = function () {\n  const v = this.value;\n  if (!Cartesian2.equals(v, this._value)) {\n    Cartesian2.clone(v, this._value);\n    this._gl.uniform2i(this._location, v.x, v.y);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n/**\n * @private\n * @constructor\n */\nfunction UniformIntVec3(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = new Cartesian3();\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformIntVec3.prototype.set = function () {\n  const v = this.value;\n  if (!Cartesian3.equals(v, this._value)) {\n    Cartesian3.clone(v, this._value);\n    this._gl.uniform3i(this._location, v.x, v.y, v.z);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n/**\n * @private\n * @constructor\n */\nfunction UniformIntVec4(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = new Cartesian4();\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformIntVec4.prototype.set = function () {\n  const v = this.value;\n  if (!Cartesian4.equals(v, this._value)) {\n    Cartesian4.clone(v, this._value);\n    this._gl.uniform4i(this._location, v.x, v.y, v.z, v.w);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nconst scratchUniformArray = new Float32Array(4);\n/**\n * @private\n * @constructor\n */\nfunction UniformMat2(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = new Matrix2();\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformMat2.prototype.set = function () {\n  if (!Matrix2.equalsArray(this.value, this._value, 0)) {\n    Matrix2.clone(this.value, this._value);\n\n    const array = Matrix2.toArray(this.value, scratchUniformArray);\n    this._gl.uniformMatrix2fv(this._location, false, array);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nconst scratchMat3Array = new Float32Array(9);\n/**\n * @private\n * @constructor\n */\nfunction UniformMat3(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = new Matrix3();\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformMat3.prototype.set = function () {\n  if (!Matrix3.equalsArray(this.value, this._value, 0)) {\n    Matrix3.clone(this.value, this._value);\n\n    const array = Matrix3.toArray(this.value, scratchMat3Array);\n    this._gl.uniformMatrix3fv(this._location, false, array);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nconst scratchMat4Array = new Float32Array(16);\n/**\n * @private\n * @constructor\n */\nfunction UniformMat4(gl, activeUniform, uniformName, location) {\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = undefined;\n  this._value = new Matrix4();\n\n  this._gl = gl;\n  this._location = location;\n}\n\nUniformMat4.prototype.set = function () {\n  if (!Matrix4.equalsArray(this.value, this._value, 0)) {\n    Matrix4.clone(this.value, this._value);\n\n    const array = Matrix4.toArray(this.value, scratchMat4Array);\n    this._gl.uniformMatrix4fv(this._location, false, array);\n  }\n};\nexport default createUniform;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * @private\n * @constructor\n */\nfunction createUniformArray(gl, activeUniform, uniformName, locations) {\n  switch (activeUniform.type) {\n    case gl.FLOAT:\n      return new UniformArrayFloat(gl, activeUniform, uniformName, locations);\n    case gl.FLOAT_VEC2:\n      return new UniformArrayFloatVec2(\n        gl,\n        activeUniform,\n        uniformName,\n        locations,\n      );\n    case gl.FLOAT_VEC3:\n      return new UniformArrayFloatVec3(\n        gl,\n        activeUniform,\n        uniformName,\n        locations,\n      );\n    case gl.FLOAT_VEC4:\n      return new UniformArrayFloatVec4(\n        gl,\n        activeUniform,\n        uniformName,\n        locations,\n      );\n    case gl.SAMPLER_2D:\n    case gl.SAMPLER_3D:\n    case gl.SAMPLER_CUBE:\n      return new UniformArraySampler(gl, activeUniform, uniformName, locations);\n    case gl.INT:\n    case gl.BOOL:\n      return new UniformArrayInt(gl, activeUniform, uniformName, locations);\n    case gl.INT_VEC2:\n    case gl.BOOL_VEC2:\n      return new UniformArrayIntVec2(gl, activeUniform, uniformName, locations);\n    case gl.INT_VEC3:\n    case gl.BOOL_VEC3:\n      return new UniformArrayIntVec3(gl, activeUniform, uniformName, locations);\n    case gl.INT_VEC4:\n    case gl.BOOL_VEC4:\n      return new UniformArrayIntVec4(gl, activeUniform, uniformName, locations);\n    case gl.FLOAT_MAT2:\n      return new UniformArrayMat2(gl, activeUniform, uniformName, locations);\n    case gl.FLOAT_MAT3:\n      return new UniformArrayMat3(gl, activeUniform, uniformName, locations);\n    case gl.FLOAT_MAT4:\n      return new UniformArrayMat4(gl, activeUniform, uniformName, locations);\n    default:\n      throw new RuntimeError(\n        `Unrecognized uniform type: ${activeUniform.type} for uniform \"${uniformName}\".`,\n      );\n  }\n}\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloat(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayFloat.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (v !== arraybuffer[i]) {\n      arraybuffer[i] = v;\n      changed = true;\n    }\n  }\n\n  if (changed) {\n    this._gl.uniform1fv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloatVec2(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length * 2);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayFloatVec2.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (!Cartesian2.equalsArray(v, arraybuffer, j)) {\n      Cartesian2.pack(v, arraybuffer, j);\n      changed = true;\n    }\n    j += 2;\n  }\n\n  if (changed) {\n    this._gl.uniform2fv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloatVec3(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length * 3);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayFloatVec3.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (defined(v.red)) {\n      if (\n        v.red !== arraybuffer[j] ||\n        v.green !== arraybuffer[j + 1] ||\n        v.blue !== arraybuffer[j + 2]\n      ) {\n        arraybuffer[j] = v.red;\n        arraybuffer[j + 1] = v.green;\n        arraybuffer[j + 2] = v.blue;\n        changed = true;\n      }\n    } else if (defined(v.x)) {\n      if (!Cartesian3.equalsArray(v, arraybuffer, j)) {\n        Cartesian3.pack(v, arraybuffer, j);\n        changed = true;\n      }\n    } else {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\"Invalid vec3 value.\");\n      //>>includeEnd('debug');\n    }\n\n    j += 3;\n  }\n\n  if (changed) {\n    this._gl.uniform3fv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayFloatVec4(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length * 4);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayFloatVec4.prototype.set = function () {\n  // PERFORMANCE_IDEA: if it is a common case that only a few elements\n  // in a uniform array change, we could use heuristics to determine\n  // when it is better to call uniform4f for each element that changed\n  // vs. call uniform4fv once to set the entire array.  This applies\n  // to all uniform array types, not just vec4.  We might not care\n  // once we have uniform buffers since that will be the fast path.\n\n  // PERFORMANCE_IDEA: Micro-optimization (I bet it works though):\n  // As soon as changed is true, break into a separate loop that\n  // does the copy without the equals check.\n\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (defined(v.red)) {\n      if (!Color.equalsArray(v, arraybuffer, j)) {\n        Color.pack(v, arraybuffer, j);\n        changed = true;\n      }\n    } else if (defined(v.x)) {\n      if (!Cartesian4.equalsArray(v, arraybuffer, j)) {\n        Cartesian4.pack(v, arraybuffer, j);\n        changed = true;\n      }\n    } else {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\"Invalid vec4 value.\");\n      //>>includeEnd('debug');\n    }\n\n    j += 4;\n  }\n\n  if (changed) {\n    this._gl.uniform4fv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArraySampler(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length);\n\n  this._gl = gl;\n  this._locations = locations;\n\n  this.textureUnitIndex = undefined;\n}\n\nUniformArraySampler.prototype.set = function () {\n  const gl = this._gl;\n  const textureUnitIndex = gl.TEXTURE0 + this.textureUnitIndex;\n\n  const value = this.value;\n  const length = value.length;\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n    gl.activeTexture(textureUnitIndex + i);\n    gl.bindTexture(v._target, v._texture);\n  }\n};\n\nUniformArraySampler.prototype._setSampler = function (textureUnitIndex) {\n  this.textureUnitIndex = textureUnitIndex;\n\n  const locations = this._locations;\n  const length = locations.length;\n  for (let i = 0; i < length; ++i) {\n    const index = textureUnitIndex + i;\n    this._gl.uniform1i(locations[i], index);\n  }\n\n  return textureUnitIndex + length;\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayInt(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Int32Array(length);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayInt.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (v !== arraybuffer[i]) {\n      arraybuffer[i] = v;\n      changed = true;\n    }\n  }\n\n  if (changed) {\n    this._gl.uniform1iv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayIntVec2(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Int32Array(length * 2);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayIntVec2.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (!Cartesian2.equalsArray(v, arraybuffer, j)) {\n      Cartesian2.pack(v, arraybuffer, j);\n      changed = true;\n    }\n    j += 2;\n  }\n\n  if (changed) {\n    this._gl.uniform2iv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayIntVec3(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Int32Array(length * 3);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayIntVec3.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (!Cartesian3.equalsArray(v, arraybuffer, j)) {\n      Cartesian3.pack(v, arraybuffer, j);\n      changed = true;\n    }\n    j += 3;\n  }\n\n  if (changed) {\n    this._gl.uniform3iv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayIntVec4(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Int32Array(length * 4);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayIntVec4.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (!Cartesian4.equalsArray(v, arraybuffer, j)) {\n      Cartesian4.pack(v, arraybuffer, j);\n      changed = true;\n    }\n    j += 4;\n  }\n\n  if (changed) {\n    this._gl.uniform4iv(this._location, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayMat2(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length * 4);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayMat2.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (!Matrix2.equalsArray(v, arraybuffer, j)) {\n      Matrix2.pack(v, arraybuffer, j);\n      changed = true;\n    }\n    j += 4;\n  }\n\n  if (changed) {\n    this._gl.uniformMatrix2fv(this._location, false, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayMat3(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length * 9);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayMat3.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (!Matrix3.equalsArray(v, arraybuffer, j)) {\n      Matrix3.pack(v, arraybuffer, j);\n      changed = true;\n    }\n    j += 9;\n  }\n\n  if (changed) {\n    this._gl.uniformMatrix3fv(this._location, false, arraybuffer);\n  }\n};\n\n///////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n * @constructor\n */\nfunction UniformArrayMat4(gl, activeUniform, uniformName, locations) {\n  const length = locations.length;\n\n  /**\n   * @type {string}\n   * @readonly\n   */\n  this.name = uniformName;\n\n  this.value = new Array(length);\n  this._value = new Float32Array(length * 16);\n\n  this._gl = gl;\n  this._location = locations[0];\n}\n\nUniformArrayMat4.prototype.set = function () {\n  const value = this.value;\n  const length = value.length;\n  const arraybuffer = this._value;\n  let changed = false;\n  let j = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const v = value[i];\n\n    if (!Matrix4.equalsArray(v, arraybuffer, j)) {\n      Matrix4.pack(v, arraybuffer, j);\n      changed = true;\n    }\n    j += 16;\n  }\n\n  if (changed) {\n    this._gl.uniformMatrix4fv(this._location, false, arraybuffer);\n  }\n};\nexport default createUniformArray;\n","/**\n * Transpiles a [GLSL 3.00]{@link https://registry.khronos.org/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf}\n * shader to a [GLSL 1.00]{@link https://registry.khronos.org/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf} shader.\n *\n * This function does not aim to provide a comprehensive transpilation from GLSL 3.00 to GLSL 1.00; only the functionality\n * used within the CesiumJS shaders is supported.\n *\n * @private\n *\n * @param {string} input The GLSL 3.00 shader.\n * @param {boolean} isFragmentShader True if the shader is a fragment shader.\n *\n * @return {string}\n */\nfunction demodernizeShader(input, isFragmentShader) {\n  let output = input;\n\n  // Remove version string got GLSL 3.00.\n  output = output.replaceAll(`version 300 es`, ``);\n\n  // Replace all texture calls with texture2D\n  output = output.replaceAll(\n    /(texture\\()/g,\n    `texture2D(`, // Trailing ')' is included in the match group.\n  );\n\n  if (isFragmentShader) {\n    // Replace the in with varying.\n    output = output.replaceAll(\n      /\\n\\s*(in)\\s+(vec\\d|mat\\d|float)/g,\n      `\\nvarying $2`,\n    );\n\n    if (/out_FragData_(\\d+)/.test(output)) {\n      output = `#extension GL_EXT_draw_buffers : enable\\n${output}`;\n\n      // Remove all layout declarations for out_FragData.\n      output = output.replaceAll(\n        /layout\\s+\\(location\\s*=\\s*\\d+\\)\\s*out\\s+vec4\\s+out_FragData_\\d+;/g,\n        ``,\n      );\n\n      // Replace out_FragData with gl_FragData.\n      output = output.replaceAll(/out_FragData_(\\d+)/g, `gl_FragData[$1]`);\n    }\n\n    // Remove all layout declarations for out_FragColor.\n    output = output.replaceAll(\n      /layout\\s+\\(location\\s*=\\s*0\\)\\s*out\\s+vec4\\s+out_FragColor;/g,\n      ``,\n    );\n\n    // Replace out_FragColor with gl_FragColor.\n    output = output.replaceAll(/out_FragColor/g, `gl_FragColor`);\n    output = output.replaceAll(/out_FragColor\\[(\\d+)\\]/g, `gl_FragColor[$1]`);\n\n    if (/gl_FragDepth/.test(output)) {\n      output = `#extension GL_EXT_frag_depth : enable\\n${output}`;\n      // Replace gl_FragDepth with gl_FragDepthEXT.\n      output = output.replaceAll(/gl_FragDepth/g, `gl_FragDepthEXT`);\n    }\n\n    // Enable the EXT_shader_texture_lod extension\n    output = `#ifdef GL_EXT_shader_texture_lod\\n#extension GL_EXT_shader_texture_lod : enable\\n#endif\\n${output}`;\n    // Enable the OES_standard_derivatives extension\n    output = `#ifdef GL_OES_standard_derivatives\\n#extension GL_OES_standard_derivatives : enable\\n#endif\\n${output}`;\n  } else {\n    // Replace the in with attribute.\n    output = output.replaceAll(/(in)\\s+(vec\\d|mat\\d|float)/g, `attribute $2`);\n\n    // Replace the out with varying.\n    output = output.replaceAll(\n      /(out)\\s+(vec\\d|mat\\d|float)\\s+([\\w]+);/g,\n      `varying $2 $3;`,\n    );\n  }\n\n  // Add version string for GLSL 1.00.\n  output = `#version 100\\n${output}`;\n\n  return output;\n}\n\nexport default demodernizeShader;\n","/**\n * Returns frozen renderState as well as all of the object literal properties. This function is deep object freeze\n * function ignoring properties named \"_applyFunctions\".\n *\n * @private\n *\n * @param {object} renderState\n * @returns {object} Returns frozen renderState.\n *\n */\nfunction freezeRenderState(renderState) {\n  if (typeof renderState !== \"object\" || renderState === null) {\n    return renderState;\n  }\n\n  let propName;\n  const propNames = Object.keys(renderState);\n\n  for (let i = 0; i < propNames.length; i++) {\n    propName = propNames[i];\n    if (\n      renderState.hasOwnProperty(propName) &&\n      propName !== \"_applyFunctions\"\n    ) {\n      renderState[propName] = freezeRenderState(renderState[propName]);\n    }\n  }\n  return Object.freeze(renderState);\n}\nexport default freezeRenderState;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport CubeMap from \"./CubeMap.js\";\n\n/**\n * Asynchronously loads six images and creates a cube map.  Returns a promise that\n * will resolve to a {@link CubeMap} once loaded, or reject if any image fails to load.\n *\n * @function loadCubeMap\n *\n * @param {Context} context The context to use to create the cube map.\n * @param {object} urls The source URL of each image.  See the example below.\n * @param {boolean} [skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the images will be ignored.\n * @returns {Promise<CubeMap>} a promise that will resolve to the requested {@link CubeMap} when loaded.\n *\n * @exception {DeveloperError} context is required.\n * @exception {DeveloperError} urls is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\n *\n *\n * @example\n * Cesium.loadCubeMap(context, {\n *     positiveX : 'skybox_px.png',\n *     negativeX : 'skybox_nx.png',\n *     positiveY : 'skybox_py.png',\n *     negativeY : 'skybox_ny.png',\n *     positiveZ : 'skybox_pz.png',\n *     negativeZ : 'skybox_nz.png'\n * }).then(function(cubeMap) {\n *     // use the cubemap\n * }).catch(function(error) {\n *     // an error occurred\n * });\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\n *\n * @private\n */\nfunction loadCubeMap(context, urls, skipColorSpaceConversion) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"context\", context);\n  Check.defined(\"urls\", urls);\n  if (\n    Object.values(CubeMap.FaceName).some((faceName) => !defined(urls[faceName]))\n  ) {\n    throw new DeveloperError(\n      \"urls must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  // PERFORMANCE_IDEA: Given the size of some cube maps, we should consider tiling them, which\n  // would prevent hiccups when uploading, for example, six 4096x4096 textures to the GPU.\n  //\n  // Also, it is perhaps acceptable to use the context here in the callbacks, but\n  // ideally, we would do it in the primitive's update function.\n  const flipOptions = {\n    flipY: true,\n    skipColorSpaceConversion: skipColorSpaceConversion,\n    preferImageBitmap: true,\n  };\n\n  const facePromises = [\n    Resource.createIfNeeded(urls.positiveX).fetchImage(flipOptions),\n    Resource.createIfNeeded(urls.negativeX).fetchImage(flipOptions),\n    Resource.createIfNeeded(urls.positiveY).fetchImage(flipOptions),\n    Resource.createIfNeeded(urls.negativeY).fetchImage(flipOptions),\n    Resource.createIfNeeded(urls.positiveZ).fetchImage(flipOptions),\n    Resource.createIfNeeded(urls.negativeZ).fetchImage(flipOptions),\n  ];\n\n  return Promise.all(facePromises).then(function (images) {\n    return new CubeMap({\n      context: context,\n      source: {\n        positiveX: images[0],\n        negativeX: images[1],\n        positiveY: images[2],\n        negativeY: images[3],\n        positiveZ: images[4],\n        negativeZ: images[5],\n      },\n    });\n  });\n}\nexport default loadCubeMap;\n","/**\n * The alpha rendering mode of the material.\n *\n * @enum {string}\n * @private\n */\nconst AlphaMode = {\n  /**\n   * The alpha value is ignored and the rendered output is fully opaque.\n   *\n   * @type {string}\n   * @constant\n   */\n  OPAQUE: \"OPAQUE\",\n\n  /**\n   * The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value.\n   *\n   * @type {string}\n   * @constant\n   */\n  MASK: \"MASK\",\n\n  /**\n   * The rendered output is composited onto the destination with alpha blending.\n   *\n   * @type {string}\n   * @constant\n   */\n  BLEND: \"BLEND\",\n};\n\nexport default Object.freeze(AlphaMode);\n","import clone from \"../Core/clone.js\";\nimport combine from \"../Core/combine.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\n\n/**\n * An appearance defines the full GLSL vertex and fragment shaders and the\n * render state used to draw a {@link Primitive}.  All appearances implement\n * this base <code>Appearance</code> interface.\n *\n * @alias Appearance\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link Appearance#renderState} has alpha blending enabled.\n * @param {boolean} [options.closed=false] When <code>true</code>, the geometry is expected to be closed so {@link Appearance#renderState} has backface culling enabled.\n * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n * @param {string} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {string} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {object} [options.renderState] Optional render state to override the default render state.\n *\n * @see MaterialAppearance\n * @see EllipsoidSurfaceAppearance\n * @see PerInstanceColorAppearance\n * @see DebugAppearance\n * @see PolylineColorAppearance\n * @see PolylineMaterialAppearance\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=geometry-and-appearances|Geometry and Appearances Demo}\n */\nfunction Appearance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The material used to determine the fragment color.  Unlike other {@link Appearance}\n   * properties, this is not read-only, so an appearance's material can change on the fly.\n   *\n   * @type Material\n   *\n   * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n   */\n  this.material = options.material;\n\n  /**\n   * When <code>true</code>, the geometry is expected to appear translucent.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.translucent = options.translucent ?? true;\n\n  this._vertexShaderSource = options.vertexShaderSource;\n  this._fragmentShaderSource = options.fragmentShaderSource;\n  this._renderState = options.renderState;\n  this._closed = options.closed ?? false;\n}\n\nObject.defineProperties(Appearance.prototype, {\n  /**\n   * The GLSL source code for the vertex shader.\n   *\n   * @memberof Appearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      return this._vertexShaderSource;\n    },\n  },\n\n  /**\n   * The GLSL source code for the fragment shader.  The full fragment shader\n   * source is built procedurally taking into account the {@link Appearance#material}.\n   * Use {@link Appearance#getFragmentShaderSource} to get the full source.\n   *\n   * @memberof Appearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n\n  /**\n   * The WebGL fixed-function state to use when rendering the geometry.\n   *\n   * @memberof Appearance.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be closed.\n   *\n   * @memberof Appearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  closed: {\n    get: function () {\n      return this._closed;\n    },\n  },\n});\n\n/**\n * Procedurally creates the full GLSL fragment shader source for this appearance\n * taking into account {@link Appearance#fragmentShaderSource} and {@link Appearance#material}.\n *\n * @returns {string} The full GLSL fragment shader source.\n */\nAppearance.prototype.getFragmentShaderSource = function () {\n  const parts = [];\n  if (this.flat) {\n    parts.push(\"#define FLAT\");\n  }\n  if (this.faceForward) {\n    parts.push(\"#define FACE_FORWARD\");\n  }\n  if (defined(this.material)) {\n    parts.push(this.material.shaderSource);\n  }\n  parts.push(this.fragmentShaderSource);\n\n  return parts.join(\"\\n\");\n};\n\n/**\n * Determines if the geometry is translucent based on {@link Appearance#translucent} and {@link Material#isTranslucent}.\n *\n * @returns {boolean} <code>true</code> if the appearance is translucent.\n */\nAppearance.prototype.isTranslucent = function () {\n  return (\n    (defined(this.material) && this.material.isTranslucent()) ||\n    (!defined(this.material) && this.translucent)\n  );\n};\n\n/**\n * Creates a render state.  This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @returns {object} The render state.\n */\nAppearance.prototype.getRenderState = function () {\n  const translucent = this.isTranslucent();\n  const rs = clone(this.renderState, false);\n  if (translucent) {\n    rs.depthMask = false;\n    rs.blending = BlendingState.ALPHA_BLEND;\n  } else {\n    rs.depthMask = true;\n  }\n  return rs;\n};\n\n/**\n * @private\n */\nAppearance.getDefaultRenderState = function (translucent, closed, existing) {\n  let rs = {\n    depthTest: {\n      enabled: true,\n    },\n  };\n\n  if (translucent) {\n    rs.depthMask = false;\n    rs.blending = BlendingState.ALPHA_BLEND;\n  }\n\n  if (closed) {\n    rs.cull = {\n      enabled: true,\n      face: CullFace.BACK,\n    };\n  }\n\n  if (defined(existing)) {\n    rs = combine(existing, rs, true);\n  }\n\n  return rs;\n};\nexport default Appearance;\n","/**\n * ArcGisBaseMapType enumerates the ArcGIS image tile layers that are supported by default.\n *\n * @enum {number}\n * @see ArcGisMapServerImageryProvider\n */\nconst ArcGisBaseMapType = {\n  SATELLITE: 1,\n  OCEANS: 2,\n  HILLSHADE: 3,\n};\nexport default Object.freeze(ArcGisBaseMapType);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport ArcGisMapService from \"./ArcGisMapService.js\";\nimport DiscardMissingTileImagePolicy from \"./DiscardMissingTileImagePolicy.js\";\nimport ImageryLayerFeatureInfo from \"./ImageryLayerFeatureInfo.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\nimport ArcGisBaseMapType from \"./ArcGisBaseMapType.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * @typedef {object} ArcGisMapServerImageryProvider.ConstructorOptions\n *\n * Initialization options for the ArcGisMapServerImageryProvider constructor\n *\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n *        is invalid and should be discarded.  If this value is not specified, a default\n *        {@link DiscardMissingTileImagePolicy} is used for tiled map servers, and a\n *        {@link NeverTileDiscardPolicy} is used for non-tiled map servers.  In the former case,\n *        we request tile 0,0 at the maximum tile level and check pixels (0,0), (200,20), (20,200),\n *        (80,110), and (160, 130).  If all of these pixels are transparent, the discard check is\n *        disabled and no tiles are discarded.  If any of them have a non-transparent color, any\n *        tile that has the same values in these pixel locations is discarded.  The end result of\n *        these defaults should be correct tile discarding for a standard ArcGIS Server.  To ensure\n *        that no tiles are discarded, construct and pass a {@link NeverTileDiscardPolicy} for this\n *        parameter.\n * @property {boolean} [usePreCachedTilesIfAvailable=true] If true, the server's pre-cached\n *        tiles are used if they are available. Exporting Tiles is only supported with deprecated APIs.\n * @property {string} [layers] A comma-separated list of the layers to show, or undefined if all layers should be shown.\n * @property {boolean} [enablePickFeatures=true] If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will invoke\n *        the Identify service on the MapServer and return the features included in the response.  If false,\n *        {@link ArcGisMapServerImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features)\n *        without communicating with the server.  Set this property to false if you don't want this provider's features to\n *        be pickable. Can be overridden by setting the {@link ArcGisMapServerImageryProvider#enablePickFeatures} property on the object.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer.  This parameter is ignored when accessing\n *                    a tiled layer.\n * @property {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme to use to divide the world into tiles.\n *                       This parameter is ignored when accessing a tiled server.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If the tilingScheme is specified and used,\n *                    this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n *                    parameter is specified, the default ellipsoid is used.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.  This parameter is ignored when accessing a tiled server.\n * @property {number} [tileWidth=256] The width of each tile in pixels.  This parameter is ignored when accessing a tiled server.\n * @property {number} [tileHeight=256] The height of each tile in pixels.  This parameter is ignored when accessing a tiled server.\n * @property {number} [maximumLevel] The maximum tile level to request, or undefined if there is no maximum.  This parameter is ignored when accessing\n *                                        a tiled server.\n *\n *\n */\n\n/**\n * Used to track creation details while fetching initial metadata\n *\n * @constructor\n * @private\n *\n * @param {ArcGisMapServerImageryProvider.ConstructorOptions} options An object describing initialization options\n */\nfunction ImageryProviderBuilder(options) {\n  this.useTiles = options.usePreCachedTilesIfAvailable ?? true;\n\n  const ellipsoid = options.ellipsoid;\n  this.tilingScheme =\n    options.tilingScheme ??\n    new GeographicTilingScheme({ ellipsoid: ellipsoid });\n  this.rectangle = options.rectangle ?? this.tilingScheme.rectangle;\n  this.ellipsoid = ellipsoid;\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this.credit = credit;\n  this.tileCredits = undefined;\n  this.tileDiscardPolicy = options.tileDiscardPolicy;\n\n  this.tileWidth = options.tileWidth ?? 256;\n  this.tileHeight = options.tileHeight ?? 256;\n  this.maximumLevel = options.maximumLevel;\n}\n\n/**\n * Complete ArcGisMapServerImageryProvider creation based on builder values.\n *\n * @private\n *\n * @param {ArcGisMapServerImageryProvider} provider\n */\nImageryProviderBuilder.prototype.build = function (provider) {\n  provider._useTiles = this.useTiles;\n  provider._tilingScheme = this.tilingScheme;\n  provider._rectangle = this.rectangle;\n  provider._credit = this.credit;\n  provider._tileCredits = this.tileCredits;\n  provider._tileDiscardPolicy = this.tileDiscardPolicy;\n  provider._tileWidth = this.tileWidth;\n  provider._tileHeight = this.tileHeight;\n  provider._maximumLevel = this.maximumLevel;\n\n  // Install the default tile discard policy if none has been supplied.\n  if (this.useTiles && !defined(this.tileDiscardPolicy)) {\n    provider._tileDiscardPolicy = new DiscardMissingTileImagePolicy({\n      missingImageUrl: buildImageResource(provider, 0, 0, this.maximumLevel)\n        .url,\n      pixelsToCheck: [\n        new Cartesian2(0, 0),\n        new Cartesian2(200, 20),\n        new Cartesian2(20, 200),\n        new Cartesian2(80, 110),\n        new Cartesian2(160, 130),\n      ],\n      disableCheckIfAllPixelsAreTransparent: true,\n    });\n  }\n};\n\nfunction metadataSuccess(data, imageryProviderBuilder) {\n  const tileInfo = data.tileInfo;\n  if (!defined(tileInfo)) {\n    imageryProviderBuilder.useTiles = false;\n  } else {\n    imageryProviderBuilder.tileWidth = tileInfo.rows;\n    imageryProviderBuilder.tileHeight = tileInfo.cols;\n\n    if (\n      tileInfo.spatialReference.wkid === 102100 ||\n      tileInfo.spatialReference.wkid === 102113\n    ) {\n      imageryProviderBuilder.tilingScheme = new WebMercatorTilingScheme({\n        ellipsoid: imageryProviderBuilder.ellipsoid,\n      });\n    } else if (data.tileInfo.spatialReference.wkid === 4326) {\n      imageryProviderBuilder.tilingScheme = new GeographicTilingScheme({\n        ellipsoid: imageryProviderBuilder.ellipsoid,\n      });\n    } else {\n      const message = `Tile spatial reference WKID ${data.tileInfo.spatialReference.wkid} is not supported.`;\n      throw new RuntimeError(message);\n    }\n    imageryProviderBuilder.maximumLevel = data.tileInfo.lods.length - 1;\n\n    if (defined(data.fullExtent)) {\n      if (\n        defined(data.fullExtent.spatialReference) &&\n        defined(data.fullExtent.spatialReference.wkid)\n      ) {\n        if (\n          data.fullExtent.spatialReference.wkid === 102100 ||\n          data.fullExtent.spatialReference.wkid === 102113\n        ) {\n          const projection = new WebMercatorProjection();\n          const extent = data.fullExtent;\n          const sw = projection.unproject(\n            new Cartesian3(\n              Math.max(\n                extent.xmin,\n                -imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *\n                  Math.PI,\n              ),\n              Math.max(\n                extent.ymin,\n                -imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *\n                  Math.PI,\n              ),\n              0.0,\n            ),\n          );\n          const ne = projection.unproject(\n            new Cartesian3(\n              Math.min(\n                extent.xmax,\n                imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *\n                  Math.PI,\n              ),\n              Math.min(\n                extent.ymax,\n                imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *\n                  Math.PI,\n              ),\n              0.0,\n            ),\n          );\n          imageryProviderBuilder.rectangle = new Rectangle(\n            sw.longitude,\n            sw.latitude,\n            ne.longitude,\n            ne.latitude,\n          );\n        } else if (data.fullExtent.spatialReference.wkid === 4326) {\n          imageryProviderBuilder.rectangle = Rectangle.fromDegrees(\n            data.fullExtent.xmin,\n            data.fullExtent.ymin,\n            data.fullExtent.xmax,\n            data.fullExtent.ymax,\n          );\n        } else {\n          const extentMessage = `fullExtent.spatialReference WKID ${data.fullExtent.spatialReference.wkid} is not supported.`;\n          throw new RuntimeError(extentMessage);\n        }\n      }\n    } else {\n      imageryProviderBuilder.rectangle =\n        imageryProviderBuilder.tilingScheme.rectangle;\n    }\n\n    imageryProviderBuilder.useTiles = true;\n  }\n\n  if (defined(data.copyrightText) && data.copyrightText.length > 0) {\n    if (defined(imageryProviderBuilder.credit)) {\n      imageryProviderBuilder.tileCredits = [new Credit(data.copyrightText)];\n    } else {\n      imageryProviderBuilder.credit = new Credit(data.copyrightText);\n    }\n  }\n}\n\nfunction metadataFailure(resource, error) {\n  let message = `An error occurred while accessing ${resource.url}`;\n  if (defined(error) && defined(error.message)) {\n    message += `: ${error.message}`;\n  }\n\n  throw new RuntimeError(message);\n}\n\nasync function requestMetadata(resource, imageryProviderBuilder) {\n  const jsonResource = resource.getDerivedResource({\n    queryParameters: {\n      f: \"json\",\n    },\n  });\n\n  try {\n    const data = await jsonResource.fetchJson();\n    metadataSuccess(data, imageryProviderBuilder);\n  } catch (error) {\n    metadataFailure(resource, error);\n  }\n}\n\n/**\n * <div class=\"notice\">\n * This object is normally not instantiated directly, use {@link ArcGisMapServerImageryProvider.fromBasemapType} or {@link ArcGisMapServerImageryProvider.fromUrl}.\n * </div>\n *\n * Provides tiled imagery hosted by an ArcGIS MapServer.  By default, the server's pre-cached tiles are\n * used, if available.\n *\n * <br/>\n *\n * An {@link https://developers.arcgis.com/documentation/mapping-apis-and-services/security| ArcGIS Access Token } is required to authenticate requests to an ArcGIS Image Tile service.\n * To access secure ArcGIS resources, it's required to create an ArcGIS developer\n * account or an ArcGIS online account, then implement an authentication method to obtain an access token.\n *\n * @alias ArcGisMapServerImageryProvider\n * @constructor\n *\n * @param {ArcGisMapServerImageryProvider.ConstructorOptions} [options] Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider.fromBasemapType\n * @see ArcGisMapServerImageryProvider.fromUrl\n *\n * @example\n * // Set the default access token for accessing ArcGIS Image Tile service\n * Cesium.ArcGisMapService.defaultAccessToken = \"<ArcGIS Access Token>\";\n *\n * // Add a base layer from a default ArcGIS basemap\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   baseLayer: Cesium.ImageryLayer.fromProviderAsync(\n *     Cesium.ArcGisMapServerImageryProvider.fromBasemapType(\n *       Cesium.ArcGisBaseMapType.SATELLITE\n *     )\n *   ),\n * });\n *\n * @example\n * // Create an imagery provider from the url directly\n * const esri = await Cesium.ArcGisMapServerImageryProvider.fromUrl(\n *   \"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer\", {\n *     token: \"<ArcGIS Access Token>\"\n * });\n *\n * @see {@link https://developers.arcgis.com/rest/|ArcGIS Server REST API}\n * @see {@link https://developers.arcgis.com/documentation/mapping-apis-and-services/security| ArcGIS Access Token }\n\n */\nfunction ArcGisMapServerImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  this._tileDiscardPolicy = options.tileDiscardPolicy;\n  this._tileWidth = options.tileWidth ?? 256;\n  this._tileHeight = options.tileHeight ?? 256;\n  this._maximumLevel = options.maximumLevel;\n  this._tilingScheme =\n    options.tilingScheme ??\n    new GeographicTilingScheme({ ellipsoid: options.ellipsoid });\n  this._useTiles = options.usePreCachedTilesIfAvailable ?? true;\n  this._rectangle = options.rectangle ?? this._tilingScheme.rectangle;\n  this._layers = options.layers;\n  this._credit = options.credit;\n  this._tileCredits = undefined;\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n\n  /**\n   * Gets or sets a value indicating whether feature picking is enabled.  If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will\n   * invoke the \"identify\" operation on the ArcGIS server and return the features included in the response.  If false,\n   * {@link ArcGisMapServerImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features)\n   * without communicating with the server.\n   * @type {boolean}\n   * @default true\n   */\n  this.enablePickFeatures = options.enablePickFeatures ?? true;\n\n  this._errorEvent = new Event();\n}\n\n/**\n * Creates an {@link ImageryProvider} which provides tiled imagery from an ArcGIS base map.\n * @param {ArcGisBaseMapType} style The style of the ArcGIS base map imagery. Valid options are {@link ArcGisBaseMapType.SATELLITE}, {@link ArcGisBaseMapType.OCEANS}, and {@link ArcGisBaseMapType.HILLSHADE}.\n * @param {ArcGisMapServerImageryProvider.ConstructorOptions} [options] Object describing initialization options.\n * @returns {Promise<ArcGisMapServerImageryProvider>} A promise that resolves to the created ArcGisMapServerImageryProvider.\n *\n * @example\n * // Set the default access token for accessing ArcGIS Image Tile service\n * Cesium.ArcGisMapService.defaultAccessToken = \"<ArcGIS Access Token>\";\n *\n * // Add a base layer from a default ArcGIS basemap\n * const provider = await Cesium.ArcGisMapServerImageryProvider.fromBasemapType(\n *   Cesium.ArcGisBaseMapType.SATELLITE);\n *\n * @example\n * // Add a base layer from a default ArcGIS Basemap\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   baseLayer: Cesium.ImageryLayer.fromProviderAsync(\n *     Cesium.ArcGisMapServerImageryProvider.fromBasemapType(\n *       Cesium.ArcGisBaseMapType.HILLSHADE, {\n *         token: \"<ArcGIS Access Token>\"\n *       }\n *     )\n *   ),\n * });\n */\n\nArcGisMapServerImageryProvider.fromBasemapType = async function (\n  style,\n  options,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"style\", style);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  let accessToken;\n  let server;\n  let warningCredit;\n  switch (style) {\n    case ArcGisBaseMapType.SATELLITE:\n      {\n        accessToken = options.token ?? ArcGisMapService.defaultAccessToken;\n        server = Resource.createIfNeeded(\n          ArcGisMapService.defaultWorldImageryServer,\n        );\n        server.appendForwardSlash();\n        const defaultTokenCredit =\n          ArcGisMapService.getDefaultTokenCredit(accessToken);\n        if (defined(defaultTokenCredit)) {\n          warningCredit = Credit.clone(defaultTokenCredit);\n        }\n      }\n      break;\n    case ArcGisBaseMapType.OCEANS:\n      {\n        accessToken = options.token ?? ArcGisMapService.defaultAccessToken;\n        server = Resource.createIfNeeded(\n          ArcGisMapService.defaultWorldOceanServer,\n        );\n        server.appendForwardSlash();\n        const defaultTokenCredit =\n          ArcGisMapService.getDefaultTokenCredit(accessToken);\n        if (defined(defaultTokenCredit)) {\n          warningCredit = Credit.clone(defaultTokenCredit);\n        }\n      }\n      break;\n    case ArcGisBaseMapType.HILLSHADE:\n      {\n        accessToken = options.token ?? ArcGisMapService.defaultAccessToken;\n        server = Resource.createIfNeeded(\n          ArcGisMapService.defaultWorldHillshadeServer,\n        );\n        server.appendForwardSlash();\n        const defaultTokenCredit =\n          ArcGisMapService.getDefaultTokenCredit(accessToken);\n        if (defined(defaultTokenCredit)) {\n          warningCredit = Credit.clone(defaultTokenCredit);\n        }\n      }\n      break;\n    default:\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(`Unsupported basemap type: ${style}`);\n    //>>includeEnd('debug');\n  }\n\n  return ArcGisMapServerImageryProvider.fromUrl(server, {\n    ...options,\n    token: accessToken,\n    credit: warningCredit,\n    usePreCachedTilesIfAvailable: true, // ArcGIS Base Map Service Layers only support Tiled views\n  });\n};\n\nfunction buildImageResource(imageryProvider, x, y, level, request) {\n  let resource;\n  if (imageryProvider._useTiles) {\n    resource = imageryProvider._resource.getDerivedResource({\n      url: `tile/${level}/${y}/${x}`,\n      request: request,\n    });\n  } else {\n    const nativeRectangle =\n      imageryProvider._tilingScheme.tileXYToNativeRectangle(x, y, level);\n    const bbox = `${nativeRectangle.west},${nativeRectangle.south},${nativeRectangle.east},${nativeRectangle.north}`;\n\n    const query = {\n      bbox: bbox,\n      size: `${imageryProvider._tileWidth},${imageryProvider._tileHeight}`,\n      format: \"png32\",\n      transparent: true,\n      f: \"image\",\n    };\n\n    if (\n      imageryProvider._tilingScheme.projection instanceof GeographicProjection\n    ) {\n      query.bboxSR = 4326;\n      query.imageSR = 4326;\n    } else {\n      query.bboxSR = 3857;\n      query.imageSR = 3857;\n    }\n    if (imageryProvider.layers) {\n      query.layers = `show:${imageryProvider.layers}`;\n    }\n\n    resource = imageryProvider._resource.getDerivedResource({\n      url: \"export\",\n      request: request,\n      queryParameters: query,\n    });\n  }\n  return resource;\n}\n\nObject.defineProperties(ArcGisMapServerImageryProvider.prototype, {\n  /**\n   * Gets the URL of the ArcGIS MapServer.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource._url;\n    },\n  },\n\n  /**\n   * Gets the ArcGIS token used to authenticate with the ArcGis MapServer service.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  token: {\n    get: function () {\n      return this._resource.queryParameters.token;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether this imagery provider is using pre-cached tiles from the\n   * ArcGIS MapServer.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @default true\n   */\n  usingPrecachedTiles: {\n    get: function () {\n      return this._useTiles;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @default true\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return true;\n    },\n  },\n\n  /**\n   * Gets the comma-separated list of layer IDs to show.\n   * @memberof ArcGisMapServerImageryProvider.prototype\n   *\n   * @type {string}\n   */\n  layers: {\n    get: function () {\n      return this._layers;\n    },\n  },\n});\n\n/**\n * Creates an {@link ImageryProvider} which provides tiled imagery hosted by an ArcGIS MapServer.  By default, the server's pre-cached tiles are\n * used, if available.\n *\n * @param {Resource|string} url The URL of the ArcGIS MapServer service.\n * @param {ArcGisMapServerImageryProvider.ConstructorOptions} [options] Object describing initialization options.\n * @returns {Promise<ArcGisMapServerImageryProvider>} A promise that resolves to the created ArcGisMapServerImageryProvider.\n *\n * @example\n * const esri = await Cesium.ArcGisMapServerImageryProvider.fromUrl(\n *     \"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer\"\n * );\n *\n * @exception {RuntimeError} metadata spatial reference specifies an unknown WKID\n * @exception {RuntimeError} metadata fullExtent.spatialReference specifies an unknown WKID\n */\nArcGisMapServerImageryProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const resource = Resource.createIfNeeded(url);\n  resource.appendForwardSlash();\n\n  if (defined(options.token)) {\n    resource.setQueryParameters({\n      token: options.token,\n    });\n  }\n\n  const provider = new ArcGisMapServerImageryProvider(options);\n  provider._resource = resource;\n  const imageryProviderBuilder = new ImageryProviderBuilder(options);\n  const useTiles = options.usePreCachedTilesIfAvailable ?? true;\n  if (useTiles) {\n    await requestMetadata(resource, imageryProviderBuilder);\n  }\n\n  imageryProviderBuilder.build(provider);\n  return provider;\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nArcGisMapServerImageryProvider.prototype.getTileCredits = function (\n  x,\n  y,\n  level,\n) {\n  return this._tileCredits;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nArcGisMapServerImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  return ImageryProvider.loadImage(\n    this,\n    buildImageResource(this, x, y, level, request),\n  );\n};\n\n/**\n    /**\n     * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n     * a tile.\n     *\n     * @param {number} x The tile X coordinate.\n     * @param {number} y The tile Y coordinate.\n     * @param {number} level The tile level.\n     * @param {number} longitude The longitude at which to pick features.\n     * @param {number} latitude  The latitude at which to pick features.\n     * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n     *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n     *                   instances.  The array may be empty if no features are found at the given location.\n     */\nArcGisMapServerImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  if (!this.enablePickFeatures) {\n    return undefined;\n  }\n\n  const rectangle = this._tilingScheme.tileXYToNativeRectangle(x, y, level);\n\n  let horizontal;\n  let vertical;\n  let sr;\n  if (this._tilingScheme.projection instanceof GeographicProjection) {\n    horizontal = CesiumMath.toDegrees(longitude);\n    vertical = CesiumMath.toDegrees(latitude);\n    sr = \"4326\";\n  } else {\n    const projected = this._tilingScheme.projection.project(\n      new Cartographic(longitude, latitude, 0.0),\n    );\n    horizontal = projected.x;\n    vertical = projected.y;\n    sr = \"3857\";\n  }\n\n  let layers = \"visible\";\n  if (defined(this._layers)) {\n    layers += `:${this._layers}`;\n  }\n\n  const query = {\n    f: \"json\",\n    tolerance: 2,\n    geometryType: \"esriGeometryPoint\",\n    geometry: `${horizontal},${vertical}`,\n    mapExtent: `${rectangle.west},${rectangle.south},${rectangle.east},${rectangle.north}`,\n    imageDisplay: `${this._tileWidth},${this._tileHeight},96`,\n    sr: sr,\n    layers: layers,\n  };\n\n  const resource = this._resource.getDerivedResource({\n    url: \"identify\",\n    queryParameters: query,\n  });\n\n  return resource.fetchJson().then(function (json) {\n    const result = [];\n\n    const features = json.results;\n    if (!defined(features)) {\n      return result;\n    }\n\n    for (let i = 0; i < features.length; ++i) {\n      const feature = features[i];\n\n      const featureInfo = new ImageryLayerFeatureInfo();\n      featureInfo.data = feature;\n      featureInfo.name = feature.value;\n      featureInfo.properties = feature.attributes;\n      featureInfo.configureDescriptionFromProperties(feature.attributes);\n\n      // If this is a point feature, use the coordinates of the point.\n      if (feature.geometryType === \"esriGeometryPoint\" && feature.geometry) {\n        const wkid =\n          feature.geometry.spatialReference &&\n          feature.geometry.spatialReference.wkid\n            ? feature.geometry.spatialReference.wkid\n            : 4326;\n        if (wkid === 4326 || wkid === 4283) {\n          featureInfo.position = Cartographic.fromDegrees(\n            feature.geometry.x,\n            feature.geometry.y,\n            feature.geometry.z,\n          );\n        } else if (wkid === 102100 || wkid === 900913 || wkid === 3857) {\n          const projection = new WebMercatorProjection();\n          featureInfo.position = projection.unproject(\n            new Cartesian3(\n              feature.geometry.x,\n              feature.geometry.y,\n              feature.geometry.z,\n            ),\n          );\n        }\n      }\n\n      result.push(featureInfo);\n    }\n\n    return result;\n  });\n};\nArcGisMapServerImageryProvider._metadataCache = {};\nexport default ArcGisMapServerImageryProvider;\n","import Credit from \"../Core/Credit.js\";\nimport defined from \"../Core/defined.js\";\nimport Resource from \"../Core/Resource.js\";\n\nlet defaultTokenCredit;\nconst defaultAccessToken =\n  \"AAPTahokHpH_PEeQIduLwb1A8ZA..rA8bGH-48FscqzwJpCALUEqt2P_mHiflgl0WkBvCxPJzsFMRqAukz-mcG8oZ3eKnfk4MHGvCFMNsNrxXb2fGxfKH-3TQxCZVkCycztIPWRM5OIQ7pzTZIBOO9D7N8VXXpyPtp2bSsxWp5dUpv8qsgrfMHU4IXWGiiKWELBnANXn1QgzyLKngOHAgYWUq2OQ2XuULOpwJwOEWpyX5KvoLavJP0LFJdjB08Mmz-wCvnFqwr8CZjFpKaVSbAT1_aZs2dlMP\";\n/**\n * Default options for accessing the ArcGIS image tile service.\n *\n * An ArcGIS access token is required to access ArcGIS image tile layers.\n * A default token is provided for evaluation purposes only.\n * To obtain an access token, go to {@link https://developers.arcgis.com} and create a free account.\n * More info can be found in the {@link https://developers.arcgis.com/documentation/mapping-apis-and-services/security/ | ArcGIS developer guide}.\n *\n * @see ArcGisMapServerImageryProvider\n * @namespace ArcGisMapService\n */\n\nconst ArcGisMapService = {};\n/**\n * Gets or sets the default ArcGIS access token.\n *\n * @type {string}\n */\nArcGisMapService.defaultAccessToken = defaultAccessToken;\n\n/**\n * Gets or sets the URL of the ArcGIS World Imagery tile service.\n *\n * @type {string|Resource}\n * @default https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer\n */\nArcGisMapService.defaultWorldImageryServer = new Resource({\n  url: \"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer\",\n});\n\n/**\n * Gets or sets the URL of the ArcGIS World Hillshade tile service.\n *\n * @type {string|Resource}\n * @default https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer\n */\nArcGisMapService.defaultWorldHillshadeServer = new Resource({\n  url: \"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer\",\n});\n\n/**\n * Gets or sets the URL of the ArcGIS World Oceans tile service.\n *\n * @type {string|Resource}\n * @default https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer\n */\nArcGisMapService.defaultWorldOceanServer = new Resource({\n  url: \"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer\",\n});\n\n/**\n *\n * @param {string} providedKey\n * @return {string|undefined}\n */\nArcGisMapService.getDefaultTokenCredit = function (providedKey) {\n  if (providedKey !== defaultAccessToken) {\n    return undefined;\n  }\n\n  if (!defined(defaultTokenCredit)) {\n    const defaultTokenMessage =\n      '<b> \\\n            This application is using a default ArcGIS access token. Please assign <i>Cesium.ArcGisMapService.defaultAccessToken</i> \\\n            with an API key from your ArcGIS Developer account before using the ArcGIS tile services. \\\n            You can sign up for a free ArcGIS Developer account at <a href=\"https://developers.arcgis.com/\">https://developers.arcgis.com/</a>.</b>';\n\n    defaultTokenCredit = new Credit(defaultTokenMessage, true);\n  }\n\n  return defaultTokenCredit;\n};\nexport default ArcGisMapService;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport DynamicAtmosphereLightingType from \"./DynamicAtmosphereLightingType.js\";\n\n/**\n * Common atmosphere settings used by 3D Tiles and models for rendering sky atmosphere, ground atmosphere, and fog.\n *\n * <p>\n * This class is not to be confused with {@link SkyAtmosphere}, which is responsible for rendering the sky.\n * </p>\n * <p>\n * While the atmosphere settings affect the color of fog, see {@link Fog} to control how fog is rendered.\n * </p>\n *\n * @alias Atmosphere\n * @constructor\n *\n * @example\n * // Turn on dynamic atmosphere lighting using the sun direction\n * scene.atmosphere.dynamicLighting = Cesium.DynamicAtmosphereLightingType.SUNLIGHT;\n *\n * @example\n * // Turn on dynamic lighting using whatever light source is in the scene\n * scene.light = new Cesium.DirectionalLight({\n *   direction: new Cesium.Cartesian3(1, 0, 0)\n * });\n * scene.atmosphere.dynamicLighting = Cesium.DynamicAtmosphereLightingType.SCENE_LIGHT;\n *\n * @example\n * // Adjust the color of the atmosphere effects.\n * scene.atmosphere.hueShift = 0.4; // Cycle 40% around the color wheel\n * scene.atmosphere.brightnessShift = 0.25; // Increase the brightness\n * scene.atmosphere.saturationShift = -0.1; // Desaturate the colors\n *\n * @see SkyAtmosphere\n * @see Globe\n * @see Fog\n */\nfunction Atmosphere() {\n  /**\n   * The intensity of the light that is used for computing the ground atmosphere color.\n   *\n   * @type {number}\n   * @default 10.0\n   */\n  this.lightIntensity = 10.0;\n\n  /**\n   * The Rayleigh scattering coefficient used in the atmospheric scattering equations for the ground atmosphere.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3(5.5e-6, 13.0e-6, 28.4e-6)\n   */\n  this.rayleighCoefficient = new Cartesian3(5.5e-6, 13.0e-6, 28.4e-6);\n\n  /**\n   * The Mie scattering coefficient used in the atmospheric scattering equations for the ground atmosphere.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3(21e-6, 21e-6, 21e-6)\n   */\n  this.mieCoefficient = new Cartesian3(21e-6, 21e-6, 21e-6);\n\n  /**\n   * The Rayleigh scale height used in the atmospheric scattering equations for the ground atmosphere, in meters.\n   *\n   * @type {number}\n   * @default 10000.0\n   */\n  this.rayleighScaleHeight = 10000.0;\n\n  /**\n   * The Mie scale height used in the atmospheric scattering equations for the ground atmosphere, in meters.\n   *\n   * @type {number}\n   * @default 3200.0\n   */\n  this.mieScaleHeight = 3200.0;\n\n  /**\n   * The anisotropy of the medium to consider for Mie scattering.\n   * <p>\n   * Valid values are between -1.0 and 1.0.\n   * </p>\n   *\n   * @type {number}\n   * @default 0.9\n   */\n  this.mieAnisotropy = 0.9;\n\n  /**\n   * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A hue shift of 1.0 indicates a complete rotation of the hues available.\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.hueShift = 0.0;\n\n  /**\n   * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A saturation shift of -1.0 is monochrome.\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.saturationShift = 0.0;\n\n  /**\n   * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A brightness shift of -1.0 is complete darkness, which will let space show through.\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.brightnessShift = 0.0;\n\n  /**\n   * When not DynamicAtmosphereLightingType.NONE, the selected light source will\n   * be used for dynamically lighting all atmosphere-related rendering effects.\n   *\n   * @type {DynamicAtmosphereLightingType}\n   * @default DynamicAtmosphereLightingType.NONE\n   */\n  this.dynamicLighting = DynamicAtmosphereLightingType.NONE;\n}\n\n/**\n * Returns <code>true</code> if the atmosphere shader requires a color correct step.\n * @param {Atmosphere} atmosphere The atmosphere instance to check\n * @returns {boolean} true if the atmosphere shader requires a color correct step\n */\nAtmosphere.requiresColorCorrect = function (atmosphere) {\n  return !(\n    CesiumMath.equalsEpsilon(atmosphere.hueShift, 0.0, CesiumMath.EPSILON7) &&\n    CesiumMath.equalsEpsilon(\n      atmosphere.saturationShift,\n      0.0,\n      CesiumMath.EPSILON7,\n    ) &&\n    CesiumMath.equalsEpsilon(\n      atmosphere.brightnessShift,\n      0.0,\n      CesiumMath.EPSILON7,\n    )\n  );\n};\n\nexport default Atmosphere;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\n\n/**\n * An enum describing the attribute type for glTF and 3D Tiles.\n *\n * @enum {string}\n *\n * @private\n */\nconst AttributeType = {\n  /**\n   * The attribute is a single component.\n   *\n   * @type {string}\n   * @constant\n   */\n  SCALAR: \"SCALAR\",\n\n  /**\n   * The attribute is a two-component vector.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC2: \"VEC2\",\n\n  /**\n   * The attribute is a three-component vector.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC3: \"VEC3\",\n\n  /**\n   * The attribute is a four-component vector.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC4: \"VEC4\",\n\n  /**\n   * The attribute is a 2x2 matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT2: \"MAT2\",\n\n  /**\n   * The attribute is a 3x3 matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT3: \"MAT3\",\n\n  /**\n   * The attribute is a 4x4 matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT4: \"MAT4\",\n};\n\n/**\n * Gets the scalar, vector, or matrix type for the attribute type.\n *\n * @param {AttributeType} attributeType The attribute type.\n * @returns {*} The math type.\n *\n * @private\n */\nAttributeType.getMathType = function (attributeType) {\n  switch (attributeType) {\n    case AttributeType.SCALAR:\n      return Number;\n    case AttributeType.VEC2:\n      return Cartesian2;\n    case AttributeType.VEC3:\n      return Cartesian3;\n    case AttributeType.VEC4:\n      return Cartesian4;\n    case AttributeType.MAT2:\n      return Matrix2;\n    case AttributeType.MAT3:\n      return Matrix3;\n    case AttributeType.MAT4:\n      return Matrix4;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"attributeType is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Gets the number of components per attribute.\n *\n * @param {AttributeType} attributeType The attribute type.\n * @returns {number} The number of components.\n *\n * @private\n */\nAttributeType.getNumberOfComponents = function (attributeType) {\n  switch (attributeType) {\n    case AttributeType.SCALAR:\n      return 1;\n    case AttributeType.VEC2:\n      return 2;\n    case AttributeType.VEC3:\n      return 3;\n    case AttributeType.VEC4:\n    case AttributeType.MAT2:\n      return 4;\n    case AttributeType.MAT3:\n      return 9;\n    case AttributeType.MAT4:\n      return 16;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"attributeType is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Get the number of attribute locations needed to fit this attribute. Most\n * types require one, but matrices require multiple attribute locations.\n *\n * @param {AttributeType} attributeType The attribute type.\n * @returns {number} The number of attribute locations needed in the shader\n *\n * @private\n */\nAttributeType.getAttributeLocationCount = function (attributeType) {\n  switch (attributeType) {\n    case AttributeType.SCALAR:\n    case AttributeType.VEC2:\n    case AttributeType.VEC3:\n    case AttributeType.VEC4:\n      return 1;\n    case AttributeType.MAT2:\n      return 2;\n    case AttributeType.MAT3:\n      return 3;\n    case AttributeType.MAT4:\n      return 4;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"attributeType is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Gets the GLSL type for the attribute type.\n *\n * @param {AttributeType} attributeType The attribute type.\n * @returns {string} The GLSL type for the attribute type.\n *\n * @private\n */\nAttributeType.getGlslType = function (attributeType) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"attributeType\", attributeType);\n  //>>includeEnd('debug');\n\n  switch (attributeType) {\n    case AttributeType.SCALAR:\n      return \"float\";\n    case AttributeType.VEC2:\n      return \"vec2\";\n    case AttributeType.VEC3:\n      return \"vec3\";\n    case AttributeType.VEC4:\n      return \"vec4\";\n    case AttributeType.MAT2:\n      return \"mat2\";\n    case AttributeType.MAT3:\n      return \"mat3\";\n    case AttributeType.MAT4:\n      return \"mat4\";\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"attributeType is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\nexport default Object.freeze(AttributeType);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\n\n/**\n * A post process stage that will get the luminance value at each pixel and\n * uses parallel reduction to compute the average luminance in a 1x1 texture.\n * This texture can be used as input for tone mapping.\n *\n * @constructor\n * @private\n */\nfunction AutoExposure() {\n  this._uniformMap = undefined;\n  this._command = undefined;\n\n  this._colorTexture = undefined;\n  this._depthTexture = undefined;\n\n  this._ready = false;\n\n  this._name = \"czm_autoexposure\";\n\n  this._logDepthChanged = undefined;\n  this._useLogDepth = undefined;\n\n  this._framebuffers = undefined;\n  this._previousLuminance = new FramebufferManager();\n\n  this._commands = undefined;\n  this._clearCommand = undefined;\n\n  this._minMaxLuminance = new Cartesian2();\n\n  /**\n   * Whether or not to execute this post-process stage when ready.\n   *\n   * @type {boolean}\n   */\n  this.enabled = true;\n  this._enabled = true;\n\n  /**\n   * The minimum value used to clamp the luminance.\n   *\n   * @type {number}\n   * @default 0.1\n   */\n  this.minimumLuminance = 0.1;\n\n  /**\n   * The maximum value used to clamp the luminance.\n   *\n   * @type {number}\n   * @default 10.0\n   */\n  this.maximumLuminance = 10.0;\n}\n\nObject.defineProperties(AutoExposure.prototype, {\n  /**\n   * Determines if this post-process stage is ready to be executed. A stage is only executed when both <code>ready</code>\n   * and {@link AutoExposure#enabled} are <code>true</code>. A stage will not be ready while it is waiting on textures\n   * to load.\n   *\n   * @memberof AutoExposure.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n  /**\n   * The unique name of this post-process stage for reference by other stages.\n   *\n   * @memberof AutoExposure.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * A reference to the texture written to when executing this post process stage.\n   *\n   * @memberof AutoExposure.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  outputTexture: {\n    get: function () {\n      const framebuffers = this._framebuffers;\n      if (!defined(framebuffers)) {\n        return undefined;\n      }\n      return framebuffers[framebuffers.length - 1].getColorTexture(0);\n    },\n  },\n});\n\nfunction destroyFramebuffers(autoexposure) {\n  const framebuffers = autoexposure._framebuffers;\n  if (!defined(framebuffers)) {\n    return;\n  }\n\n  const length = framebuffers.length;\n  for (let i = 0; i < length; ++i) {\n    framebuffers[i].destroy();\n  }\n  autoexposure._framebuffers = undefined;\n\n  autoexposure._previousLuminance.destroy();\n  autoexposure._previousLuminance = undefined;\n}\n\nfunction createFramebuffers(autoexposure, context) {\n  destroyFramebuffers(autoexposure);\n\n  let width = autoexposure._width;\n  let height = autoexposure._height;\n\n  const pixelDatatype = context.halfFloatingPointTexture\n    ? PixelDatatype.HALF_FLOAT\n    : PixelDatatype.FLOAT;\n\n  const length = Math.ceil(Math.log(Math.max(width, height)) / Math.log(3.0));\n  const framebuffers = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    width = Math.max(Math.ceil(width / 3.0), 1.0);\n    height = Math.max(Math.ceil(height / 3.0), 1.0);\n    framebuffers[i] = new FramebufferManager();\n    framebuffers[i].update(context, width, height, 1, pixelDatatype);\n  }\n\n  const lastTexture = framebuffers[length - 1].getColorTexture(0);\n  autoexposure._previousLuminance.update(\n    context,\n    lastTexture.width,\n    lastTexture.height,\n    1,\n    pixelDatatype,\n  );\n  autoexposure._framebuffers = framebuffers;\n}\n\nfunction destroyCommands(autoexposure) {\n  const commands = autoexposure._commands;\n  if (!defined(commands)) {\n    return;\n  }\n\n  const length = commands.length;\n  for (let i = 0; i < length; ++i) {\n    commands[i].shaderProgram.destroy();\n  }\n  autoexposure._commands = undefined;\n}\n\nfunction createUniformMap(autoexposure, index) {\n  let uniforms;\n  if (index === 0) {\n    uniforms = {\n      colorTexture: function () {\n        return autoexposure._colorTexture;\n      },\n      colorTextureDimensions: function () {\n        return autoexposure._colorTexture.dimensions;\n      },\n    };\n  } else {\n    const texture = autoexposure._framebuffers[index - 1].getColorTexture(0);\n    uniforms = {\n      colorTexture: function () {\n        return texture;\n      },\n      colorTextureDimensions: function () {\n        return texture.dimensions;\n      },\n    };\n  }\n\n  uniforms.minMaxLuminance = function () {\n    return autoexposure._minMaxLuminance;\n  };\n  uniforms.previousLuminance = function () {\n    return autoexposure._previousLuminance.getColorTexture(0);\n  };\n\n  return uniforms;\n}\n\nfunction getShaderSource(index, length) {\n  let source =\n    \"uniform sampler2D colorTexture; \\n\" +\n    \"in vec2 v_textureCoordinates; \\n\" +\n    \"float sampleTexture(vec2 offset) { \\n\";\n\n  if (index === 0) {\n    source +=\n      \"    vec4 color = texture(colorTexture, v_textureCoordinates + offset); \\n\" +\n      \"    return czm_luminance(color.rgb); \\n\";\n  } else {\n    source +=\n      \"    return texture(colorTexture, v_textureCoordinates + offset).r; \\n\";\n  }\n\n  source += \"}\\n\\n\";\n\n  source +=\n    \"uniform vec2 colorTextureDimensions; \\n\" +\n    \"uniform vec2 minMaxLuminance; \\n\" +\n    \"uniform sampler2D previousLuminance; \\n\" +\n    \"void main() { \\n\" +\n    \"    float color = 0.0; \\n\" +\n    \"    float xStep = 1.0 / colorTextureDimensions.x; \\n\" +\n    \"    float yStep = 1.0 / colorTextureDimensions.y; \\n\" +\n    \"    int count = 0; \\n\" +\n    \"    for (int i = 0; i < 3; ++i) { \\n\" +\n    \"        for (int j = 0; j < 3; ++j) { \\n\" +\n    \"            vec2 offset; \\n\" +\n    \"            offset.x = -xStep + float(i) * xStep; \\n\" +\n    \"            offset.y = -yStep + float(j) * yStep; \\n\" +\n    \"            if (offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0) { \\n\" +\n    \"                continue; \\n\" +\n    \"            } \\n\" +\n    \"            color += sampleTexture(offset); \\n\" +\n    \"            ++count; \\n\" +\n    \"        } \\n\" +\n    \"    } \\n\" +\n    \"    if (count > 0) { \\n\" +\n    \"        color /= float(count); \\n\" +\n    \"    } \\n\";\n\n  if (index === length - 1) {\n    source +=\n      \"    float previous = texture(previousLuminance, vec2(0.5)).r; \\n\" +\n      \"    color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); \\n\" +\n      \"    color = previous + (color - previous) / (60.0 * 1.5); \\n\" +\n      \"    color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); \\n\";\n  }\n\n  source += \"    out_FragColor = vec4(color); \\n\" + \"} \\n\";\n  return source;\n}\n\nfunction createCommands(autoexposure, context) {\n  destroyCommands(autoexposure);\n  const framebuffers = autoexposure._framebuffers;\n  const length = framebuffers.length;\n\n  const commands = new Array(length);\n\n  for (let i = 0; i < length; ++i) {\n    commands[i] = context.createViewportQuadCommand(\n      getShaderSource(i, length),\n      {\n        framebuffer: framebuffers[i].framebuffer,\n        uniformMap: createUniformMap(autoexposure, i),\n      },\n    );\n  }\n  autoexposure._commands = commands;\n}\n\n/**\n * A function that will be called before execute. Used to clear any textures attached to framebuffers.\n * @param {Context} context The context.\n * @private\n */\nAutoExposure.prototype.clear = function (context) {\n  const framebuffers = this._framebuffers;\n  if (!defined(framebuffers)) {\n    return;\n  }\n\n  let clearCommand = this._clearCommand;\n  if (!defined(clearCommand)) {\n    clearCommand = this._clearCommand = new ClearCommand({\n      color: new Color(0.0, 0.0, 0.0, 0.0),\n      framebuffer: undefined,\n    });\n  }\n\n  const length = framebuffers.length;\n  for (let i = 0; i < length; ++i) {\n    framebuffers[i].clear(context, clearCommand);\n  }\n};\n\n/**\n * A function that will be called before execute. Used to create WebGL resources and load any textures.\n * @param {Context} context The context.\n * @private\n */\nAutoExposure.prototype.update = function (context) {\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight;\n\n  if (width !== this._width || height !== this._height) {\n    this._width = width;\n    this._height = height;\n\n    createFramebuffers(this, context);\n    createCommands(this, context);\n\n    if (!this._ready) {\n      this._ready = true;\n    }\n  }\n\n  this._minMaxLuminance.x = this.minimumLuminance;\n  this._minMaxLuminance.y = this.maximumLuminance;\n\n  const framebuffers = this._framebuffers;\n  const temp = framebuffers[framebuffers.length - 1];\n  framebuffers[framebuffers.length - 1] = this._previousLuminance;\n  this._commands[this._commands.length - 1].framebuffer =\n    this._previousLuminance.framebuffer;\n  this._previousLuminance = temp;\n};\n\n/**\n * Executes the post-process stage. The color texture is the texture rendered to by the scene or from the previous stage.\n * @param {Context} context The context.\n * @param {Texture} colorTexture The input color texture.\n * @private\n */\nAutoExposure.prototype.execute = function (context, colorTexture) {\n  this._colorTexture = colorTexture;\n\n  const commands = this._commands;\n  if (!defined(commands)) {\n    return;\n  }\n\n  const length = commands.length;\n  for (let i = 0; i < length; ++i) {\n    commands[i].execute(context);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see AutoExposure#destroy\n */\nAutoExposure.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see AutoExposure#isDestroyed\n */\nAutoExposure.prototype.destroy = function () {\n  destroyFramebuffers(this);\n  destroyCommands(this);\n  return destroyObject(this);\n};\nexport default AutoExposure;\n","import Check from \"../Core/Check.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\n\n/**\n * An enum describing the x, y, and z axes and helper conversion functions.\n *\n * @enum {number}\n */\nconst Axis = {\n  /**\n   * Denotes the x-axis.\n   *\n   * @type {number}\n   * @constant\n   */\n  X: 0,\n\n  /**\n   * Denotes the y-axis.\n   *\n   * @type {number}\n   * @constant\n   */\n  Y: 1,\n\n  /**\n   * Denotes the z-axis.\n   *\n   * @type {number}\n   * @constant\n   */\n  Z: 2,\n};\n\n/**\n * Matrix used to convert from y-up to z-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Y_UP_TO_Z_UP = Matrix4.fromRotationTranslation(\n  // Rotation about PI/2 around the X-axis\n  Matrix3.fromArray([1, 0, 0, 0, 0, 1, 0, -1, 0]),\n);\n\n/**\n * Matrix used to convert from z-up to y-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Z_UP_TO_Y_UP = Matrix4.fromRotationTranslation(\n  // Rotation about -PI/2 around the X-axis\n  Matrix3.fromArray([1, 0, 0, 0, 0, -1, 0, 1, 0]),\n);\n\n/**\n * Matrix used to convert from x-up to z-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.X_UP_TO_Z_UP = Matrix4.fromRotationTranslation(\n  // Rotation about -PI/2 around the Y-axis\n  Matrix3.fromArray([0, 0, 1, 0, 1, 0, -1, 0, 0]),\n);\n\n/**\n * Matrix used to convert from z-up to x-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Z_UP_TO_X_UP = Matrix4.fromRotationTranslation(\n  // Rotation about PI/2 around the Y-axis\n  Matrix3.fromArray([0, 0, -1, 0, 1, 0, 1, 0, 0]),\n);\n\n/**\n * Matrix used to convert from x-up to y-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.X_UP_TO_Y_UP = Matrix4.fromRotationTranslation(\n  // Rotation about PI/2 around the Z-axis\n  Matrix3.fromArray([0, 1, 0, -1, 0, 0, 0, 0, 1]),\n);\n\n/**\n * Matrix used to convert from y-up to x-up\n *\n * @type {Matrix4}\n * @constant\n */\nAxis.Y_UP_TO_X_UP = Matrix4.fromRotationTranslation(\n  // Rotation about -PI/2 around the Z-axis\n  Matrix3.fromArray([0, -1, 0, 1, 0, 0, 0, 0, 1]),\n);\n\n/**\n * Gets the axis by name\n *\n * @param {string} name The name of the axis.\n * @returns {number} The axis enum.\n */\nAxis.fromName = function (name) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"name\", name);\n  //>>includeEnd('debug');\n\n  return Axis[name];\n};\n\nexport default Object.freeze(Axis);\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defined from \"../Core/defined.js\";\nimport Resource from \"../Core/Resource.js\";\nimport IonResource from \"../Core/IonResource.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nconst trailingSlashRegex = /\\/$/;\n\n/**\n * @typedef {object} Azure2DImageryProvider.ConstructorOptions\n *\n * Initialization options for the Azure2DImageryProvider constructor\n *\n * @property {string} subscriptionKey The public subscription key for the imagery.\n * @property {string} [url=\"https://atlas.microsoft.com/\"] The Azure server url.\n * @property {string} [tilesetId=\"microsoft.imagery\"] The Azure tileset ID. Valid options are {@link microsoft.imagery}, {@link microsoft.base.road}, and {@link microsoft.base.labels.road}\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @property {number} [maximumLevel=22] The maximum level-of-detail supported by the imagery provider.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n */\n\n/**\n * Provides 2D image tiles from Azure.\n *\n * @alias Azure2DImageryProvider\n * @constructor\n * @param {Azure2DImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Azure 2D imagery provider\n * const azureImageryProvider = new Cesium.Azure2DImageryProvider({\n *     subscriptionKey: \"subscription-key\",\n *     tilesetId: \"microsoft.base.road\"\n * });\n */\nfunction Azure2DImageryProvider(options) {\n  options = options ?? {};\n  const tilesetId = options.tilesetId ?? \"microsoft.imagery\";\n  this._maximumLevel = options.maximumLevel ?? 22;\n  this._minimumLevel = options.minimumLevel ?? 0;\n\n  this._subscriptionKey =\n    options.subscriptionKey ?? options[\"subscription-key\"];\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.subscriptionKey\", this._subscriptionKey);\n  //>>includeEnd('debug');\n\n  this._tilesetId = options.tilesetId;\n\n  const resource =\n    options.url instanceof IonResource\n      ? options.url\n      : Resource.createIfNeeded(options.url ?? \"https://atlas.microsoft.com/\");\n\n  let templateUrl = resource.getUrlComponent();\n  if (!trailingSlashRegex.test(templateUrl)) {\n    templateUrl += \"/\";\n  }\n\n  const tilesUrl = `${templateUrl}map/tile`;\n  this._viewportUrl = `${templateUrl}map/attribution`;\n\n  resource.url = tilesUrl;\n\n  resource.setQueryParameters({\n    \"api-version\": \"2024-04-01\",\n    tilesetId: tilesetId,\n    \"subscription-key\": this._subscriptionKey,\n    zoom: `{z}`,\n    x: `{x}`,\n    y: `{y}`,\n  });\n\n  this._resource = resource;\n\n  let credit;\n  if (defined(options.credit)) {\n    credit = options.credit;\n    if (typeof credit === \"string\") {\n      credit = new Credit(credit);\n    }\n  }\n\n  const provider = new UrlTemplateImageryProvider({\n    ...options,\n    maximumLevel: this._maximumLevel,\n    minimumLevel: this._minimumLevel,\n    url: resource,\n    credit: credit,\n  });\n  provider._resource = resource;\n  this._imageryProvider = provider;\n\n  // This will be defined for ion resources\n  this._tileCredits = resource.credits;\n  this._attributionsByLevel = undefined;\n}\n\nObject.defineProperties(Azure2DImageryProvider.prototype, {\n  /**\n   * Gets the URL of the Azure 2D Imagery server.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._imageryProvider.url;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._imageryProvider.rectangle;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._imageryProvider.tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._imageryProvider.tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._imageryProvider.maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested. Generally,\n   * a minimum level should only be used when the rectangle of the imagery is small\n   * enough that the number of tiles at the minimum level is small.  An imagery\n   * provider with more than a few tiles at the minimum level will lead to\n   * rendering problems.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return this._imageryProvider.minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._imageryProvider.tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._imageryProvider.tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error..  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._imageryProvider.errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._imageryProvider.credit;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._imageryProvider.proxy;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof Azure2DImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return this._imageryProvider.hasAlphaChannel;\n    },\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]|undefined} The credits to be displayed when the tile is displayed.\n */\nAzure2DImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  const hasAttributions = defined(this._attributionsByLevel);\n\n  if (!hasAttributions || !defined(this._tileCredits)) {\n    return undefined;\n  }\n\n  const innerCredits = this._attributionsByLevel.get(level);\n  if (!defined(this._tileCredits)) {\n    return innerCredits;\n  }\n\n  return this._tileCredits.concat(innerCredits);\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nAzure2DImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const promise = this._imageryProvider.requestImage(x, y, level, request);\n\n  // If the requestImage call returns undefined, it couldn't be scheduled this frame. Make sure to return undefined so this can be handled upstream.\n  if (!defined(promise)) {\n    return undefined;\n  }\n\n  // Asynchronously request and populate _attributionsByLevel if it hasn't been already. We do this here so that the promise can be properly awaited.\n  if (!defined(this._attributionsByLevel)) {\n    return Promise.all([promise, this.getViewportCredits()]).then(\n      (results) => results[0],\n    );\n  }\n\n  return promise;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nAzure2DImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\n\n/**\n * Get attribution for imagery from Azure Maps to display in the credits\n * @private\n * @return {Promise<Map<Credit[]>>} The list of attribution sources to display in the credits.\n */\nAzure2DImageryProvider.prototype.getViewportCredits = async function () {\n  const maximumLevel = this._maximumLevel;\n\n  const promises = [];\n  for (let level = 0; level < maximumLevel + 1; level++) {\n    promises.push(\n      fetchViewportAttribution(\n        this._resource,\n        this._viewportUrl,\n        this._subscriptionKey,\n        this._tilesetId,\n        level,\n      ),\n    );\n  }\n  const results = await Promise.all(promises);\n\n  const attributionsByLevel = new Map();\n  for (let level = 0; level < maximumLevel + 1; level++) {\n    const credits = [];\n    const attributions = results[level].join(\",\");\n    if (attributions) {\n      const levelCredits = new Credit(attributions);\n      credits.push(levelCredits);\n    }\n    attributionsByLevel.set(level, credits);\n  }\n\n  this._attributionsByLevel = attributionsByLevel;\n\n  return attributionsByLevel;\n};\n\nasync function fetchViewportAttribution(resource, url, key, tilesetId, level) {\n  const viewportResource = resource.getDerivedResource({\n    url,\n    queryParameters: {\n      zoom: level,\n      bounds: \"-180,-90,180,90\",\n    },\n    data: JSON.stringify(Frozen.EMPTY_OBJECT),\n  });\n\n  const viewportJson = await viewportResource.fetchJson();\n  return viewportJson.copyrights;\n}\n\n// Exposed for tests\nexport default Azure2DImageryProvider;\n","import Check from \"../Core/Check.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * Handles parsing of a Batched 3D Model.\n *\n * @namespace B3dmParser\n * @private\n */\nconst B3dmParser = {};\nB3dmParser._deprecationWarning = deprecationWarning;\n\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\n/**\n * Parses the contents of a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel|Batched 3D Model}.\n *\n * @private\n *\n * @param {ArrayBuffer} arrayBuffer The array buffer containing the b3dm.\n * @param {number} [byteOffset=0] The byte offset of the beginning of the b3dm in the array buffer.\n * @returns {object} Returns an object with the batch length, feature table (binary and json), batch table (binary and json) and glTF parts of the b3dm.\n */\nB3dmParser.parse = function (arrayBuffer, byteOffset) {\n  const byteStart = byteOffset ?? 0;\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"arrayBuffer\", arrayBuffer);\n  //>>includeEnd('debug');\n\n  byteOffset = byteStart;\n\n  const uint8Array = new Uint8Array(arrayBuffer);\n  const view = new DataView(arrayBuffer);\n  byteOffset += sizeOfUint32; // Skip magic\n\n  const version = view.getUint32(byteOffset, true);\n  if (version !== 1) {\n    throw new RuntimeError(\n      `Only Batched 3D Model version 1 is supported.  Version ${version} is not.`,\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  const byteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  let featureTableJsonByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  let featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  let batchTableJsonByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  let batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  let batchLength;\n\n  // Legacy header #1: [batchLength] [batchTableByteLength]\n  // Legacy header #2: [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]\n  // Current header: [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength]\n  // If the header is in the first legacy format 'batchTableJsonByteLength' will be the start of the JSON string (a quotation mark) or the glTF magic.\n  // Accordingly its first byte will be either 0x22 or 0x67, and so the minimum uint32 expected is 0x22000000 = 570425344 = 570MB. It is unlikely that the feature table JSON will exceed this length.\n  // The check for the second legacy format is similar, except it checks 'batchTableBinaryByteLength' instead\n  if (batchTableJsonByteLength >= 570425344) {\n    // First legacy check\n    byteOffset -= sizeOfUint32 * 2;\n    batchLength = featureTableJsonByteLength;\n    batchTableJsonByteLength = featureTableBinaryByteLength;\n    batchTableBinaryByteLength = 0;\n    featureTableJsonByteLength = 0;\n    featureTableBinaryByteLength = 0;\n    B3dmParser._deprecationWarning(\n      \"b3dm-legacy-header\",\n      \"This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel.\",\n    );\n  } else if (batchTableBinaryByteLength >= 570425344) {\n    // Second legacy check\n    byteOffset -= sizeOfUint32;\n    batchLength = batchTableJsonByteLength;\n    batchTableJsonByteLength = featureTableJsonByteLength;\n    batchTableBinaryByteLength = featureTableBinaryByteLength;\n    featureTableJsonByteLength = 0;\n    featureTableBinaryByteLength = 0;\n    B3dmParser._deprecationWarning(\n      \"b3dm-legacy-header\",\n      \"This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel.\",\n    );\n  }\n\n  let featureTableJson;\n  if (featureTableJsonByteLength === 0) {\n    featureTableJson = {\n      BATCH_LENGTH: batchLength ?? 0,\n    };\n  } else {\n    featureTableJson = getJsonFromTypedArray(\n      uint8Array,\n      byteOffset,\n      featureTableJsonByteLength,\n    );\n    byteOffset += featureTableJsonByteLength;\n  }\n\n  const featureTableBinary = new Uint8Array(\n    arrayBuffer,\n    byteOffset,\n    featureTableBinaryByteLength,\n  );\n  byteOffset += featureTableBinaryByteLength;\n\n  let batchTableJson;\n  let batchTableBinary;\n  if (batchTableJsonByteLength > 0) {\n    // PERFORMANCE_IDEA: is it possible to allocate this on-demand?  Perhaps keep the\n    // arraybuffer/string compressed in memory and then decompress it when it is first accessed.\n    //\n    // We could also make another request for it, but that would make the property set/get\n    // API async, and would double the number of numbers in some cases.\n    batchTableJson = getJsonFromTypedArray(\n      uint8Array,\n      byteOffset,\n      batchTableJsonByteLength,\n    );\n    byteOffset += batchTableJsonByteLength;\n\n    if (batchTableBinaryByteLength > 0) {\n      // Has a batch table binary\n      batchTableBinary = new Uint8Array(\n        arrayBuffer,\n        byteOffset,\n        batchTableBinaryByteLength,\n      );\n      // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n      batchTableBinary = new Uint8Array(batchTableBinary);\n      byteOffset += batchTableBinaryByteLength;\n    }\n  }\n\n  const gltfByteLength = byteStart + byteLength - byteOffset;\n  if (gltfByteLength === 0) {\n    throw new RuntimeError(\"glTF byte length must be greater than 0.\");\n  }\n\n  let gltfView;\n  if (byteOffset % 4 === 0) {\n    gltfView = new Uint8Array(arrayBuffer, byteOffset, gltfByteLength);\n  } else {\n    // Create a copy of the glb so that it is 4-byte aligned\n    B3dmParser._deprecationWarning(\n      \"b3dm-glb-unaligned\",\n      \"The embedded glb is not aligned to a 4-byte boundary.\",\n    );\n    gltfView = new Uint8Array(\n      uint8Array.subarray(byteOffset, byteOffset + gltfByteLength),\n    );\n  }\n\n  return {\n    batchLength: batchLength,\n    featureTableJson: featureTableJson,\n    featureTableBinary: featureTableBinary,\n    batchTableJson: batchTableJson,\n    batchTableBinary: batchTableBinary,\n    gltf: gltfView,\n  };\n};\n\nexport default B3dmParser;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * Creates a texture to look up per instance attributes for batched primitives. For example, store each primitive's pick color in the texture.\n *\n * @alias BatchTable\n * @constructor\n * @private\n *\n * @param {Context} context The context in which the batch table is created.\n * @param {object[]} attributes An array of objects describing a per instance attribute. Each object contains a datatype, components per attributes, whether it is normalized and a function name\n *     to retrieve the value in the vertex shader.\n * @param {number} numberOfInstances The number of instances in a batch table.\n *\n * @example\n * // create the batch table\n * const attributes = [{\n *     functionName : 'getShow',\n *     componentDatatype : ComponentDatatype.UNSIGNED_BYTE,\n *     componentsPerAttribute : 1\n * }, {\n *     functionName : 'getPickColor',\n *     componentDatatype : ComponentDatatype.UNSIGNED_BYTE,\n *     componentsPerAttribute : 4,\n *     normalize : true\n * }];\n * const batchTable = new BatchTable(context, attributes, 5);\n *\n * // when creating the draw commands, update the uniform map and the vertex shader\n * vertexShaderSource = batchTable.getVertexShaderCallback()(vertexShaderSource);\n * const shaderProgram = ShaderProgram.fromCache({\n *    // ...\n *    vertexShaderSource : vertexShaderSource,\n * });\n *\n * drawCommand.shaderProgram = shaderProgram;\n * drawCommand.uniformMap = batchTable.getUniformMapCallback()(uniformMap);\n *\n * // use the attribute function names in the shader to retrieve the instance values\n * // ...\n * attribute float batchId;\n *\n * void main() {\n *     // ...\n *     float show = getShow(batchId);\n *     vec3 pickColor = getPickColor(batchId);\n *     // ...\n * }\n */\nfunction BatchTable(context, attributes, numberOfInstances) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(context)) {\n    throw new DeveloperError(\"context is required\");\n  }\n  if (!defined(attributes)) {\n    throw new DeveloperError(\"attributes is required\");\n  }\n  if (!defined(numberOfInstances)) {\n    throw new DeveloperError(\"numberOfInstances is required\");\n  }\n  //>>includeEnd('debug');\n\n  this._attributes = attributes;\n  this._numberOfInstances = numberOfInstances;\n\n  if (attributes.length === 0) {\n    return;\n  }\n\n  // PERFORMANCE_IDEA: We may be able to arrange the attributes so they can be packing into fewer texels.\n  // Right now, an attribute with one component uses an entire texel when 4 single component attributes can\n  // be packed into a texel.\n  //\n  // Packing floats into unsigned byte textures makes the problem worse. A single component float attribute\n  // will be packed into a single texel leaving 3 texels unused. 4 texels are reserved for each float attribute\n  // regardless of how many components it has.\n  const pixelDatatype = getDatatype(attributes);\n  const textureFloatSupported = context.floatingPointTexture;\n  const packFloats =\n    pixelDatatype === PixelDatatype.FLOAT && !textureFloatSupported;\n  const offsets = createOffsets(attributes, packFloats);\n\n  const stride = getStride(offsets, attributes, packFloats);\n  const maxNumberOfInstancesPerRow = Math.floor(\n    ContextLimits.maximumTextureSize / stride,\n  );\n\n  const instancesPerWidth = Math.min(\n    numberOfInstances,\n    maxNumberOfInstancesPerRow,\n  );\n  const width = stride * instancesPerWidth;\n  const height = Math.ceil(numberOfInstances / instancesPerWidth);\n\n  const stepX = 1.0 / width;\n  const centerX = stepX * 0.5;\n  const stepY = 1.0 / height;\n  const centerY = stepY * 0.5;\n\n  this._textureDimensions = new Cartesian2(width, height);\n  this._textureStep = new Cartesian4(stepX, centerX, stepY, centerY);\n  this._pixelDatatype = !packFloats\n    ? pixelDatatype\n    : PixelDatatype.UNSIGNED_BYTE;\n  this._packFloats = packFloats;\n  this._offsets = offsets;\n  this._stride = stride;\n  this._texture = undefined;\n\n  const batchLength = 4 * width * height;\n  this._batchValues =\n    pixelDatatype === PixelDatatype.FLOAT && !packFloats\n      ? new Float32Array(batchLength)\n      : new Uint8Array(batchLength);\n  this._batchValuesDirty = false;\n}\n\nObject.defineProperties(BatchTable.prototype, {\n  /**\n   * The attribute descriptions.\n   * @memberOf BatchTable.prototype\n   * @type {object[]}\n   * @readonly\n   */\n  attributes: {\n    get: function () {\n      return this._attributes;\n    },\n  },\n  /**\n   * The number of instances.\n   * @memberOf BatchTable.prototype\n   * @type {number}\n   * @readonly\n   */\n  numberOfInstances: {\n    get: function () {\n      return this._numberOfInstances;\n    },\n  },\n});\n\nfunction getDatatype(attributes) {\n  let foundFloatDatatype = false;\n  const length = attributes.length;\n  for (let i = 0; i < length; ++i) {\n    if (attributes[i].componentDatatype !== ComponentDatatype.UNSIGNED_BYTE) {\n      foundFloatDatatype = true;\n      break;\n    }\n  }\n  return foundFloatDatatype ? PixelDatatype.FLOAT : PixelDatatype.UNSIGNED_BYTE;\n}\n\nfunction getAttributeType(attributes, attributeIndex) {\n  const componentsPerAttribute =\n    attributes[attributeIndex].componentsPerAttribute;\n  if (componentsPerAttribute === 2) {\n    return Cartesian2;\n  } else if (componentsPerAttribute === 3) {\n    return Cartesian3;\n  } else if (componentsPerAttribute === 4) {\n    return Cartesian4;\n  }\n  return Number;\n}\n\nfunction createOffsets(attributes, packFloats) {\n  const offsets = new Array(attributes.length);\n\n  let currentOffset = 0;\n  const attributesLength = attributes.length;\n  for (let i = 0; i < attributesLength; ++i) {\n    const attribute = attributes[i];\n    const componentDatatype = attribute.componentDatatype;\n\n    offsets[i] = currentOffset;\n\n    if (componentDatatype !== ComponentDatatype.UNSIGNED_BYTE && packFloats) {\n      currentOffset += 4;\n    } else {\n      ++currentOffset;\n    }\n  }\n\n  return offsets;\n}\n\nfunction getStride(offsets, attributes, packFloats) {\n  const length = offsets.length;\n  const lastOffset = offsets[length - 1];\n  const lastAttribute = attributes[length - 1];\n  const componentDatatype = lastAttribute.componentDatatype;\n\n  if (componentDatatype !== ComponentDatatype.UNSIGNED_BYTE && packFloats) {\n    return lastOffset + 4;\n  }\n  return lastOffset + 1;\n}\n\nconst scratchPackedFloatCartesian4 = new Cartesian4();\n\nfunction getPackedFloat(array, index, result) {\n  let packed = Cartesian4.unpack(array, index, scratchPackedFloatCartesian4);\n  const x = Cartesian4.unpackFloat(packed);\n\n  packed = Cartesian4.unpack(array, index + 4, scratchPackedFloatCartesian4);\n  const y = Cartesian4.unpackFloat(packed);\n\n  packed = Cartesian4.unpack(array, index + 8, scratchPackedFloatCartesian4);\n  const z = Cartesian4.unpackFloat(packed);\n\n  packed = Cartesian4.unpack(array, index + 12, scratchPackedFloatCartesian4);\n  const w = Cartesian4.unpackFloat(packed);\n\n  return Cartesian4.fromElements(x, y, z, w, result);\n}\n\nfunction setPackedAttribute(value, array, index) {\n  let packed = Cartesian4.packFloat(value.x, scratchPackedFloatCartesian4);\n  Cartesian4.pack(packed, array, index);\n\n  packed = Cartesian4.packFloat(value.y, packed);\n  Cartesian4.pack(packed, array, index + 4);\n\n  packed = Cartesian4.packFloat(value.z, packed);\n  Cartesian4.pack(packed, array, index + 8);\n\n  packed = Cartesian4.packFloat(value.w, packed);\n  Cartesian4.pack(packed, array, index + 12);\n}\n\nconst scratchGetAttributeCartesian4 = new Cartesian4();\n\n/**\n * Gets the value of an attribute in the table.\n *\n * @param {number} instanceIndex The index of the instance.\n * @param {number} attributeIndex The index of the attribute.\n * @param {undefined|Cartesian2|Cartesian3|Cartesian4} [result] The object onto which to store the result. The type is dependent on the attribute's number of components.\n * @returns {number|Cartesian2|Cartesian3|Cartesian4} The attribute value stored for the instance.\n *\n * @exception {DeveloperError} instanceIndex is out of range.\n * @exception {DeveloperError} attributeIndex is out of range.\n */\nBatchTable.prototype.getBatchedAttribute = function (\n  instanceIndex,\n  attributeIndex,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (instanceIndex < 0 || instanceIndex >= this._numberOfInstances) {\n    throw new DeveloperError(\"instanceIndex is out of range.\");\n  }\n  if (attributeIndex < 0 || attributeIndex >= this._attributes.length) {\n    throw new DeveloperError(\"attributeIndex is out of range\");\n  }\n  //>>includeEnd('debug');\n\n  const attributes = this._attributes;\n  const offset = this._offsets[attributeIndex];\n  const stride = this._stride;\n\n  const index = 4 * stride * instanceIndex + 4 * offset;\n  let value;\n\n  if (\n    this._packFloats &&\n    attributes[attributeIndex].componentDatatype !== PixelDatatype.UNSIGNED_BYTE\n  ) {\n    value = getPackedFloat(\n      this._batchValues,\n      index,\n      scratchGetAttributeCartesian4,\n    );\n  } else {\n    value = Cartesian4.unpack(\n      this._batchValues,\n      index,\n      scratchGetAttributeCartesian4,\n    );\n  }\n\n  const attributeType = getAttributeType(attributes, attributeIndex);\n  if (defined(attributeType.fromCartesian4)) {\n    return attributeType.fromCartesian4(value, result);\n  } else if (defined(attributeType.clone)) {\n    return attributeType.clone(value, result);\n  }\n\n  return value.x;\n};\n\nconst setAttributeScratchValues = [\n  undefined,\n  undefined,\n  new Cartesian2(),\n  new Cartesian3(),\n  new Cartesian4(),\n];\nconst setAttributeScratchCartesian4 = new Cartesian4();\n\n/**\n * Sets the value of an attribute in the table.\n *\n * @param {number} instanceIndex The index of the instance.\n * @param {number} attributeIndex The index of the attribute.\n * @param {number|Cartesian2|Cartesian3|Cartesian4} value The value to be stored in the table. The type of value will depend on the number of components of the attribute.\n *\n * @exception {DeveloperError} instanceIndex is out of range.\n * @exception {DeveloperError} attributeIndex is out of range.\n */\nBatchTable.prototype.setBatchedAttribute = function (\n  instanceIndex,\n  attributeIndex,\n  value,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (instanceIndex < 0 || instanceIndex >= this._numberOfInstances) {\n    throw new DeveloperError(\"instanceIndex is out of range.\");\n  }\n  if (attributeIndex < 0 || attributeIndex >= this._attributes.length) {\n    throw new DeveloperError(\"attributeIndex is out of range\");\n  }\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const attributes = this._attributes;\n  const result =\n    setAttributeScratchValues[\n      attributes[attributeIndex].componentsPerAttribute\n    ];\n  const currentAttribute = this.getBatchedAttribute(\n    instanceIndex,\n    attributeIndex,\n    result,\n  );\n  const attributeType = getAttributeType(this._attributes, attributeIndex);\n  const entriesEqual = defined(attributeType.equals)\n    ? attributeType.equals(currentAttribute, value)\n    : currentAttribute === value;\n  if (entriesEqual) {\n    return;\n  }\n\n  const attributeValue = setAttributeScratchCartesian4;\n  attributeValue.x = defined(value.x) ? value.x : value;\n  attributeValue.y = defined(value.y) ? value.y : 0.0;\n  attributeValue.z = defined(value.z) ? value.z : 0.0;\n  attributeValue.w = defined(value.w) ? value.w : 0.0;\n\n  const offset = this._offsets[attributeIndex];\n  const stride = this._stride;\n  const index = 4 * stride * instanceIndex + 4 * offset;\n\n  if (\n    this._packFloats &&\n    attributes[attributeIndex].componentDatatype !== PixelDatatype.UNSIGNED_BYTE\n  ) {\n    setPackedAttribute(attributeValue, this._batchValues, index);\n  } else {\n    Cartesian4.pack(attributeValue, this._batchValues, index);\n  }\n\n  this._batchValuesDirty = true;\n};\n\nfunction createTexture(batchTable, context) {\n  const dimensions = batchTable._textureDimensions;\n  batchTable._texture = new Texture({\n    context: context,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: batchTable._pixelDatatype,\n    width: dimensions.x,\n    height: dimensions.y,\n    sampler: Sampler.NEAREST,\n    flipY: false,\n  });\n}\n\nfunction updateTexture(batchTable) {\n  const dimensions = batchTable._textureDimensions;\n  batchTable._texture.copyFrom({\n    source: {\n      width: dimensions.x,\n      height: dimensions.y,\n      arrayBufferView: batchTable._batchValues,\n    },\n  });\n}\n\n/**\n * Creates/updates the batch table texture.\n * @param {FrameState} frameState The frame state.\n *\n * @exception {RuntimeError} The floating point texture extension is required but not supported.\n */\nBatchTable.prototype.update = function (frameState) {\n  if (\n    (defined(this._texture) && !this._batchValuesDirty) ||\n    this._attributes.length === 0\n  ) {\n    return;\n  }\n\n  this._batchValuesDirty = false;\n\n  if (!defined(this._texture)) {\n    createTexture(this, frameState.context);\n  }\n  updateTexture(this);\n};\n\n/**\n * Gets a function that will update a uniform map to contain values for looking up values in the batch table.\n *\n * @returns {BatchTable.updateUniformMapCallback} A callback for updating uniform maps.\n */\nBatchTable.prototype.getUniformMapCallback = function () {\n  const that = this;\n  return function (uniformMap) {\n    if (that._attributes.length === 0) {\n      return uniformMap;\n    }\n\n    const batchUniformMap = {\n      batchTexture: function () {\n        return that._texture;\n      },\n      batchTextureDimensions: function () {\n        return that._textureDimensions;\n      },\n      batchTextureStep: function () {\n        return that._textureStep;\n      },\n    };\n    return combine(uniformMap, batchUniformMap);\n  };\n};\n\nfunction getGlslComputeSt(batchTable) {\n  const stride = batchTable._stride;\n\n  // GLSL batchId is zero-based: [0, numberOfInstances - 1]\n  if (batchTable._textureDimensions.y === 1) {\n    return (\n      `${\n        \"uniform vec4 batchTextureStep; \\n\" +\n        \"vec2 computeSt(float batchId) \\n\" +\n        \"{ \\n\" +\n        \"    float stepX = batchTextureStep.x; \\n\" +\n        \"    float centerX = batchTextureStep.y; \\n\" +\n        \"    float numberOfAttributes = float(\"\n      }${stride}); \\n` +\n      `    return vec2(centerX + (batchId * numberOfAttributes * stepX), 0.5); \\n` +\n      `} \\n`\n    );\n  }\n\n  return (\n    `${\n      \"uniform vec4 batchTextureStep; \\n\" +\n      \"uniform vec2 batchTextureDimensions; \\n\" +\n      \"vec2 computeSt(float batchId) \\n\" +\n      \"{ \\n\" +\n      \"    float stepX = batchTextureStep.x; \\n\" +\n      \"    float centerX = batchTextureStep.y; \\n\" +\n      \"    float stepY = batchTextureStep.z; \\n\" +\n      \"    float centerY = batchTextureStep.w; \\n\" +\n      \"    float numberOfAttributes = float(\"\n    }${stride}); \\n` +\n    `    float xId = mod(batchId * numberOfAttributes, batchTextureDimensions.x); \\n` +\n    `    float yId = floor(batchId * numberOfAttributes / batchTextureDimensions.x); \\n` +\n    `    return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); \\n` +\n    `} \\n`\n  );\n}\n\nfunction getComponentType(componentsPerAttribute) {\n  if (componentsPerAttribute === 1) {\n    return \"float\";\n  }\n  return `vec${componentsPerAttribute}`;\n}\n\nfunction getComponentSwizzle(componentsPerAttribute) {\n  if (componentsPerAttribute === 1) {\n    return \".x\";\n  } else if (componentsPerAttribute === 2) {\n    return \".xy\";\n  } else if (componentsPerAttribute === 3) {\n    return \".xyz\";\n  }\n  return \"\";\n}\n\nfunction getGlslAttributeFunction(batchTable, attributeIndex) {\n  const attributes = batchTable._attributes;\n  const attribute = attributes[attributeIndex];\n  const componentsPerAttribute = attribute.componentsPerAttribute;\n  const functionName = attribute.functionName;\n  const functionReturnType = getComponentType(componentsPerAttribute);\n  const functionReturnValue = getComponentSwizzle(componentsPerAttribute);\n\n  const offset = batchTable._offsets[attributeIndex];\n\n  let glslFunction =\n    `${functionReturnType} ${functionName}(float batchId) \\n` +\n    `{ \\n` +\n    `    vec2 st = computeSt(batchId); \\n` +\n    `    st.x += batchTextureStep.x * float(${offset}); \\n`;\n\n  if (\n    batchTable._packFloats &&\n    attribute.componentDatatype !== PixelDatatype.UNSIGNED_BYTE\n  ) {\n    glslFunction +=\n      \"vec4 textureValue; \\n\" +\n      \"textureValue.x = czm_unpackFloat(texture(batchTexture, st)); \\n\" +\n      \"textureValue.y = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x, 0.0))); \\n\" +\n      \"textureValue.z = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 2.0, 0.0))); \\n\" +\n      \"textureValue.w = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 3.0, 0.0))); \\n\";\n  } else {\n    glslFunction += \"    vec4 textureValue = texture(batchTexture, st); \\n\";\n  }\n\n  glslFunction += `    ${functionReturnType} value = textureValue${functionReturnValue}; \\n`;\n\n  if (\n    batchTable._pixelDatatype === PixelDatatype.UNSIGNED_BYTE &&\n    attribute.componentDatatype === ComponentDatatype.UNSIGNED_BYTE &&\n    !attribute.normalize\n  ) {\n    glslFunction += \"value *= 255.0; \\n\";\n  } else if (\n    batchTable._pixelDatatype === PixelDatatype.FLOAT &&\n    attribute.componentDatatype === ComponentDatatype.UNSIGNED_BYTE &&\n    attribute.normalize\n  ) {\n    glslFunction += \"value /= 255.0; \\n\";\n  }\n\n  glslFunction += \"    return value; \\n\" + \"} \\n\";\n  return glslFunction;\n}\n\n/**\n * Gets a function that will update a vertex shader to contain functions for looking up values in the batch table.\n *\n * @returns {BatchTable.updateVertexShaderSourceCallback} A callback for updating a vertex shader source.\n */\nBatchTable.prototype.getVertexShaderCallback = function () {\n  const attributes = this._attributes;\n  if (attributes.length === 0) {\n    return function (source) {\n      return source;\n    };\n  }\n\n  let batchTableShader = \"uniform highp sampler2D batchTexture; \\n\";\n  batchTableShader += `${getGlslComputeSt(this)}\\n`;\n\n  const length = attributes.length;\n  for (let i = 0; i < length; ++i) {\n    batchTableShader += getGlslAttributeFunction(this, i);\n  }\n\n  return function (source) {\n    const mainIndex = source.indexOf(\"void main\");\n    const beforeMain = source.substring(0, mainIndex);\n    const afterMain = source.substring(mainIndex);\n    return `${beforeMain}\\n${batchTableShader}\\n${afterMain}`;\n  };\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see BatchTable#destroy\n */\nBatchTable.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see BatchTable#isDestroyed\n */\nBatchTable.prototype.destroy = function () {\n  this._texture = this._texture && this._texture.destroy();\n  return destroyObject(this);\n};\n\n/**\n * A callback for updating uniform maps.\n * @callback BatchTable.updateUniformMapCallback\n *\n * @param {object} uniformMap The uniform map.\n * @returns {object} The new uniform map with properties for retrieving values from the batch table.\n */\n\n/**\n * A callback for updating a vertex shader source.\n * @callback BatchTable.updateVertexShaderSourceCallback\n *\n * @param {string} vertexShaderSource The vertex shader source.\n * @returns {string} The new vertex shader source with the functions for retrieving batch table values injected.\n */\nexport default BatchTable;\n","import AttributeType from \"./AttributeType.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getBinaryAccessor from \"./getBinaryAccessor.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\n\n/**\n * Object for handling the <code>3DTILES_batch_table_hierarchy</code> extension\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.extension The <code>3DTILES_batch_table_hierarchy</code> extension object.\n * @param {Uint8Array} [options.binaryBody] The binary body of the batch table\n *\n * @alias BatchTableHierarchy\n * @constructor\n *\n * @private\n */\nfunction BatchTableHierarchy(options) {\n  this._classes = undefined;\n  this._classIds = undefined;\n  this._classIndexes = undefined;\n  this._parentCounts = undefined;\n  this._parentIndexes = undefined;\n  this._parentIds = undefined;\n\n  // Total memory used by the typed arrays\n  this._byteLength = 0;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.extension\", options.extension);\n  //>>includeEnd('debug');\n\n  initialize(this, options.extension, options.binaryBody);\n\n  //>>includeStart('debug', pragmas.debug);\n  validateHierarchy(this);\n  //>>includeEnd('debug');\n}\n\nObject.defineProperties(BatchTableHierarchy.prototype, {\n  byteLength: {\n    get: function () {\n      return this._byteLength;\n    },\n  },\n});\n\n/**\n * Parse the batch table hierarchy from the\n * <code>3DTILES_batch_table_hierarchy</code> extension.\n *\n * @param {BatchTableHierarchy} hierarchy The hierarchy instance\n * @param {object} hierarchyJson The JSON of the extension\n * @param {Uint8Array} [binaryBody] The binary body of the batch table for accessing binary properties\n * @private\n */\nfunction initialize(hierarchy, hierarchyJson, binaryBody) {\n  let i;\n  let classId;\n  let binaryAccessor;\n\n  const instancesLength = hierarchyJson.instancesLength;\n  const classes = hierarchyJson.classes;\n  let classIds = hierarchyJson.classIds;\n  let parentCounts = hierarchyJson.parentCounts;\n  let parentIds = hierarchyJson.parentIds;\n  let parentIdsLength = instancesLength;\n  let byteLength = 0;\n\n  if (defined(classIds.byteOffset)) {\n    classIds.componentType =\n      classIds.componentType ?? ComponentDatatype.UNSIGNED_SHORT;\n    classIds.type = AttributeType.SCALAR;\n    binaryAccessor = getBinaryAccessor(classIds);\n    classIds = binaryAccessor.createArrayBufferView(\n      binaryBody.buffer,\n      binaryBody.byteOffset + classIds.byteOffset,\n      instancesLength,\n    );\n    byteLength += classIds.byteLength;\n  }\n\n  let parentIndexes;\n  if (defined(parentCounts)) {\n    if (defined(parentCounts.byteOffset)) {\n      parentCounts.componentType =\n        parentCounts.componentType ?? ComponentDatatype.UNSIGNED_SHORT;\n      parentCounts.type = AttributeType.SCALAR;\n      binaryAccessor = getBinaryAccessor(parentCounts);\n      parentCounts = binaryAccessor.createArrayBufferView(\n        binaryBody.buffer,\n        binaryBody.byteOffset + parentCounts.byteOffset,\n        instancesLength,\n      );\n      byteLength += parentCounts.byteLength;\n    }\n    parentIndexes = new Uint16Array(instancesLength);\n    parentIdsLength = 0;\n    for (i = 0; i < instancesLength; ++i) {\n      parentIndexes[i] = parentIdsLength;\n      parentIdsLength += parentCounts[i];\n    }\n\n    byteLength += parentIndexes.byteLength;\n  }\n\n  if (defined(parentIds) && defined(parentIds.byteOffset)) {\n    parentIds.componentType =\n      parentIds.componentType ?? ComponentDatatype.UNSIGNED_SHORT;\n    parentIds.type = AttributeType.SCALAR;\n    binaryAccessor = getBinaryAccessor(parentIds);\n    parentIds = binaryAccessor.createArrayBufferView(\n      binaryBody.buffer,\n      binaryBody.byteOffset + parentIds.byteOffset,\n      parentIdsLength,\n    );\n\n    byteLength += parentIds.byteLength;\n  }\n\n  const classesLength = classes.length;\n  for (i = 0; i < classesLength; ++i) {\n    const classInstancesLength = classes[i].length;\n    const properties = classes[i].instances;\n    const binaryProperties = Cesium3DTileBatchTable.getBinaryProperties(\n      classInstancesLength,\n      properties,\n      binaryBody,\n    );\n    byteLength += countBinaryPropertyMemory(binaryProperties);\n    classes[i].instances = combine(binaryProperties, properties);\n  }\n\n  const classCounts = new Array(classesLength).fill(0);\n  const classIndexes = new Uint16Array(instancesLength);\n  for (i = 0; i < instancesLength; ++i) {\n    classId = classIds[i];\n    classIndexes[i] = classCounts[classId];\n    ++classCounts[classId];\n  }\n  byteLength += classIndexes.byteLength;\n\n  hierarchy._classes = classes;\n  hierarchy._classIds = classIds;\n  hierarchy._classIndexes = classIndexes;\n  hierarchy._parentCounts = parentCounts;\n  hierarchy._parentIndexes = parentIndexes;\n  hierarchy._parentIds = parentIds;\n  hierarchy._byteLength = byteLength;\n}\n\nfunction countBinaryPropertyMemory(binaryProperties) {\n  let byteLength = 0;\n  for (const name in binaryProperties) {\n    if (binaryProperties.hasOwnProperty(name)) {\n      byteLength += binaryProperties[name].typedArray.byteLength;\n    }\n  }\n  return byteLength;\n}\n\n//>>includeStart('debug', pragmas.debug);\nconst scratchValidateStack = [];\nfunction validateHierarchy(hierarchy) {\n  const stack = scratchValidateStack;\n  stack.length = 0;\n\n  const classIds = hierarchy._classIds;\n  const instancesLength = classIds.length;\n\n  for (let i = 0; i < instancesLength; ++i) {\n    validateInstance(hierarchy, i, stack);\n  }\n}\n\nfunction validateInstance(hierarchy, instanceIndex, stack) {\n  const parentCounts = hierarchy._parentCounts;\n  const parentIds = hierarchy._parentIds;\n  const parentIndexes = hierarchy._parentIndexes;\n  const classIds = hierarchy._classIds;\n  const instancesLength = classIds.length;\n\n  if (!defined(parentIds)) {\n    // No need to validate if there are no parents\n    return;\n  }\n\n  if (instanceIndex >= instancesLength) {\n    throw new DeveloperError(\n      `Parent index ${instanceIndex} exceeds the total number of instances: ${instancesLength}`,\n    );\n  }\n  if (stack.indexOf(instanceIndex) > -1) {\n    throw new DeveloperError(\n      \"Circular dependency detected in the batch table hierarchy.\",\n    );\n  }\n\n  stack.push(instanceIndex);\n  const parentCount = defined(parentCounts) ? parentCounts[instanceIndex] : 1;\n  const parentIndex = defined(parentCounts)\n    ? parentIndexes[instanceIndex]\n    : instanceIndex;\n  for (let i = 0; i < parentCount; ++i) {\n    const parentId = parentIds[parentIndex + i];\n    // Stop the traversal when the instance has no parent (its parentId equals itself), else continue the traversal.\n    if (parentId !== instanceIndex) {\n      validateInstance(hierarchy, parentId, stack);\n    }\n  }\n  stack.pop(instanceIndex);\n}\n//>>includeEnd('debug');\n\n// The size of this array equals the maximum instance count among all loaded tiles, which has the potential to be large.\nconst scratchVisited = [];\nconst scratchStack = [];\nlet marker = 0;\nfunction traverseHierarchyMultipleParents(\n  hierarchy,\n  instanceIndex,\n  endConditionCallback,\n) {\n  const classIds = hierarchy._classIds;\n  const parentCounts = hierarchy._parentCounts;\n  const parentIds = hierarchy._parentIds;\n  const parentIndexes = hierarchy._parentIndexes;\n  const instancesLength = classIds.length;\n\n  // Ignore instances that have already been visited. This occurs in diamond inheritance situations.\n  // Use a marker value to indicate that an instance has been visited, which increments with each run.\n  // This is more efficient than clearing the visited array every time.\n  const visited = scratchVisited;\n  visited.length = Math.max(visited.length, instancesLength);\n  const visitedMarker = ++marker;\n\n  const stack = scratchStack;\n  stack.length = 0;\n  stack.push(instanceIndex);\n\n  while (stack.length > 0) {\n    instanceIndex = stack.pop();\n    if (visited[instanceIndex] === visitedMarker) {\n      // This instance has already been visited, stop traversal\n      continue;\n    }\n    visited[instanceIndex] = visitedMarker;\n    const result = endConditionCallback(hierarchy, instanceIndex);\n    if (defined(result)) {\n      // The end condition was met, stop the traversal and return the result\n      return result;\n    }\n    const parentCount = parentCounts[instanceIndex];\n    const parentIndex = parentIndexes[instanceIndex];\n    for (let i = 0; i < parentCount; ++i) {\n      const parentId = parentIds[parentIndex + i];\n      // Stop the traversal when the instance has no parent (its parentId equals itself)\n      // else add the parent to the stack to continue the traversal.\n      if (parentId !== instanceIndex) {\n        stack.push(parentId);\n      }\n    }\n  }\n}\n\nfunction traverseHierarchySingleParent(\n  hierarchy,\n  instanceIndex,\n  endConditionCallback,\n) {\n  let hasParent = true;\n  while (hasParent) {\n    const result = endConditionCallback(hierarchy, instanceIndex);\n    if (defined(result)) {\n      // The end condition was met, stop the traversal and return the result\n      return result;\n    }\n    const parentId = hierarchy._parentIds[instanceIndex];\n    hasParent = parentId !== instanceIndex;\n    instanceIndex = parentId;\n  }\n}\n\nfunction traverseHierarchy(hierarchy, instanceIndex, endConditionCallback) {\n  // Traverse over the hierarchy and process each instance with the endConditionCallback.\n  // When the endConditionCallback returns a value, the traversal stops and that value is returned.\n  const parentCounts = hierarchy._parentCounts;\n  const parentIds = hierarchy._parentIds;\n  if (!defined(parentIds)) {\n    return endConditionCallback(hierarchy, instanceIndex);\n  } else if (defined(parentCounts)) {\n    return traverseHierarchyMultipleParents(\n      hierarchy,\n      instanceIndex,\n      endConditionCallback,\n    );\n  }\n  return traverseHierarchySingleParent(\n    hierarchy,\n    instanceIndex,\n    endConditionCallback,\n  );\n}\n\n/**\n * Returns whether the feature has this property.\n *\n * @param {number} batchId the batch ID of the feature\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the feature has this property.\n * @private\n */\nBatchTableHierarchy.prototype.hasProperty = function (batchId, propertyId) {\n  const result = traverseHierarchy(\n    this,\n    batchId,\n    function (hierarchy, instanceIndex) {\n      const classId = hierarchy._classIds[instanceIndex];\n      const instances = hierarchy._classes[classId].instances;\n      if (defined(instances[propertyId])) {\n        return true;\n      }\n    },\n  );\n  return defined(result);\n};\n\n/**\n * Returns whether any feature has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether any feature has this property.\n * @private\n */\nBatchTableHierarchy.prototype.propertyExists = function (propertyId) {\n  const classes = this._classes;\n  const classesLength = classes.length;\n  for (let i = 0; i < classesLength; ++i) {\n    const instances = classes[i].instances;\n    if (defined(instances[propertyId])) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {number} batchId the batch ID of the feature\n * @param {number} index The index of the entity.\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nBatchTableHierarchy.prototype.getPropertyIds = function (batchId, results) {\n  results = defined(results) ? results : [];\n  results.length = 0;\n\n  traverseHierarchy(this, batchId, function (hierarchy, instanceIndex) {\n    const classId = hierarchy._classIds[instanceIndex];\n    const instances = hierarchy._classes[classId].instances;\n    for (const name in instances) {\n      if (instances.hasOwnProperty(name)) {\n        if (results.indexOf(name) === -1) {\n          results.push(name);\n        }\n      }\n    }\n  });\n\n  return results;\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n *\n * @param {number} batchId the batch ID of the feature\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n * @private\n */\nBatchTableHierarchy.prototype.getProperty = function (batchId, propertyId) {\n  return traverseHierarchy(this, batchId, function (hierarchy, instanceIndex) {\n    const classId = hierarchy._classIds[instanceIndex];\n    const instanceClass = hierarchy._classes[classId];\n    const indexInClass = hierarchy._classIndexes[instanceIndex];\n    const propertyValues = instanceClass.instances[propertyId];\n    if (defined(propertyValues)) {\n      if (defined(propertyValues.typedArray)) {\n        return getBinaryProperty(propertyValues, indexInClass);\n      }\n      return clone(propertyValues[indexInClass], true);\n    }\n  });\n};\n\nfunction getBinaryProperty(binaryProperty, index) {\n  const typedArray = binaryProperty.typedArray;\n  const componentCount = binaryProperty.componentCount;\n  if (componentCount === 1) {\n    return typedArray[index];\n  }\n  return binaryProperty.type.unpack(typedArray, index * componentCount);\n}\n\n/**\n * Sets the value of the property with the given ID. Only properties of the\n * instance may be set; parent properties may not be set.\n *\n * @param {number} batchId The batchId of the feature\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n *\n * @exception {DeveloperError} when setting an inherited property\n * @private\n */\nBatchTableHierarchy.prototype.setProperty = function (\n  batchId,\n  propertyId,\n  value,\n) {\n  const result = traverseHierarchy(\n    this,\n    batchId,\n    function (hierarchy, instanceIndex) {\n      const classId = hierarchy._classIds[instanceIndex];\n      const instanceClass = hierarchy._classes[classId];\n      const indexInClass = hierarchy._classIndexes[instanceIndex];\n      const propertyValues = instanceClass.instances[propertyId];\n      if (defined(propertyValues)) {\n        //>>includeStart('debug', pragmas.debug);\n        if (instanceIndex !== batchId) {\n          throw new DeveloperError(\n            `Inherited property \"${propertyId}\" is read-only.`,\n          );\n        }\n        //>>includeEnd('debug');\n        if (defined(propertyValues.typedArray)) {\n          setBinaryProperty(propertyValues, indexInClass, value);\n        } else {\n          propertyValues[indexInClass] = clone(value, true);\n        }\n        return true;\n      }\n    },\n  );\n  return defined(result);\n};\n\nfunction setBinaryProperty(binaryProperty, index, value) {\n  const typedArray = binaryProperty.typedArray;\n  const componentCount = binaryProperty.componentCount;\n  if (componentCount === 1) {\n    typedArray[index] = value;\n  } else {\n    binaryProperty.type.pack(value, typedArray, index * componentCount);\n  }\n}\n\n/**\n * Check if a feature belongs to a class with the given name\n *\n * @param {number} batchId The batch ID of the feature\n * @param {string} className The name of the class\n * @return {boolean} <code>true</code> if the feature belongs to the class given by className, or <code>false</code> otherwise\n * @private\n */\nBatchTableHierarchy.prototype.isClass = function (batchId, className) {\n  // PERFORMANCE_IDEA : cache results in the ancestor classes to speed up this check if this area becomes a hotspot\n  // PERFORMANCE_IDEA : treat class names as integers for faster comparisons\n  const result = traverseHierarchy(\n    this,\n    batchId,\n    function (hierarchy, instanceIndex) {\n      const classId = hierarchy._classIds[instanceIndex];\n      const instanceClass = hierarchy._classes[classId];\n      if (instanceClass.name === className) {\n        return true;\n      }\n    },\n  );\n  return defined(result);\n};\n\n/**\n * Get the name of the class a given feature belongs to\n *\n * @param {number} batchId The batch ID of the feature\n * @return {string} The name of the class this feature belongs to\n */\nBatchTableHierarchy.prototype.getClassName = function (batchId) {\n  const classId = this._classIds[batchId];\n  const instanceClass = this._classes[classId];\n  return instanceClass.name;\n};\n\nexport default BatchTableHierarchy;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * An object that manages color, show/hide and picking textures for a batch\n * table or feature table.\n *\n * @param {object} options Object with the following properties:\n * @param {number} featuresLength The number of features in the batch table or feature table\n * @param {Cesium3DTileContent|ModelFeatureTable} owner The owner of this batch texture. For 3D Tiles, this will be a {@link Cesium3DTileContent}. For glTF models, this will be a {@link ModelFeatureTable}.\n * @param {object} [statistics] The statistics object to update with information about the batch texture.\n * @param {Function} [colorChangedCallback] A callback function that is called whenever the color of a feature changes.\n *\n * @alias BatchTexture\n * @constructor\n *\n * @private\n */\nfunction BatchTexture(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"options.featuresLength\", options.featuresLength);\n  Check.typeOf.object(\"options.owner\", options.owner);\n  //>>includeEnd('debug');\n\n  this._id = createGuid();\n\n  const featuresLength = options.featuresLength;\n\n  // PERFORMANCE_IDEA: These parallel arrays probably generate cache misses in get/set color/show\n  // and use A LOT of memory.  How can we use less memory?\n  this._showAlphaProperties = undefined; // [Show (0 or 255), Alpha (0 to 255)] property for each feature\n  this._batchValues = undefined; // Per-feature RGBA (A is based on the color's alpha and feature's show property)\n\n  this._batchValuesDirty = false;\n  this._batchTexture = undefined;\n  this._defaultTexture = undefined;\n\n  this._pickTexture = undefined;\n  this._pickIds = [];\n\n  // Dimensions for batch and pick textures\n  let textureDimensions;\n  let textureStep;\n\n  if (featuresLength > 0) {\n    // PERFORMANCE_IDEA: this can waste memory in the last row in the uncommon case\n    // when more than one row is needed (e.g., > 16K features in one tile)\n    const width = Math.min(featuresLength, ContextLimits.maximumTextureSize);\n    const height = Math.ceil(featuresLength / ContextLimits.maximumTextureSize);\n    const stepX = 1.0 / width;\n    const centerX = stepX * 0.5;\n    const stepY = 1.0 / height;\n    const centerY = stepY * 0.5;\n\n    textureDimensions = new Cartesian2(width, height);\n    textureStep = new Cartesian4(stepX, centerX, stepY, centerY);\n  }\n\n  this._translucentFeaturesLength = 0;\n  this._featuresLength = featuresLength;\n  this._textureDimensions = textureDimensions;\n  this._textureStep = textureStep;\n  this._owner = options.owner;\n  this._statistics = options.statistics;\n  this._colorChangedCallback = options.colorChangedCallback;\n}\n\nObject.defineProperties(BatchTexture.prototype, {\n  /**\n   * Number of features that are translucent\n   *\n   * @memberof BatchTexture.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  translucentFeaturesLength: {\n    get: function () {\n      return this._translucentFeaturesLength;\n    },\n  },\n\n  /**\n   * Total size of all GPU resources used by this batch texture.\n   *\n   * @memberof BatchTexture.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  byteLength: {\n    get: function () {\n      let memory = 0;\n      if (defined(this._pickTexture)) {\n        memory += this._pickTexture.sizeInBytes;\n      }\n      if (defined(this._batchTexture)) {\n        memory += this._batchTexture.sizeInBytes;\n      }\n      return memory;\n    },\n  },\n\n  /**\n   * Dimensions of the underlying batch texture.\n   *\n   * @memberof BatchTexture.prototype\n   * @type {Cartesian2}\n   * @readonly\n   * @private\n   */\n  textureDimensions: {\n    get: function () {\n      return this._textureDimensions;\n    },\n  },\n\n  /**\n   * Size of each texture and distance from side to center of a texel in\n   * each direction. Stored as (stepX, centerX, stepY, centerY)\n   *\n   * @memberof BatchTexture.prototype\n   * @type {Cartesian4}\n   * @readonly\n   * @private\n   */\n  textureStep: {\n    get: function () {\n      return this._textureStep;\n    },\n  },\n\n  /**\n   * The underlying texture used for styling. The texels are accessed\n   * by batch ID, and the value is the color of this feature after accounting\n   * for show/hide settings.\n   *\n   * @memberof BatchTexture.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  batchTexture: {\n    get: function () {\n      return this._batchTexture;\n    },\n  },\n\n  /**\n   * The default texture to use when there are no batch values\n   *\n   * @memberof BatchTexture.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  defaultTexture: {\n    get: function () {\n      return this._defaultTexture;\n    },\n  },\n\n  /**\n   * The underlying texture used for picking. The texels are accessed by\n   * batch ID, and the value is the pick color.\n   *\n   * @memberof BatchTexture.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  pickTexture: {\n    get: function () {\n      return this._pickTexture;\n    },\n  },\n});\n\nBatchTexture.DEFAULT_COLOR_VALUE = Color.WHITE;\nBatchTexture.DEFAULT_SHOW_VALUE = true;\n\nfunction getByteLength(batchTexture) {\n  const dimensions = batchTexture._textureDimensions;\n  return dimensions.x * dimensions.y * 4;\n}\n\nfunction getBatchValues(batchTexture) {\n  if (!defined(batchTexture._batchValues)) {\n    // Default batch texture to RGBA = 255: white highlight (RGB) and show/alpha = true/255 (A).\n    const byteLength = getByteLength(batchTexture);\n    const bytes = new Uint8Array(byteLength).fill(255);\n    batchTexture._batchValues = bytes;\n  }\n\n  return batchTexture._batchValues;\n}\n\nfunction getShowAlphaProperties(batchTexture) {\n  if (!defined(batchTexture._showAlphaProperties)) {\n    const byteLength = 2 * batchTexture._featuresLength;\n    const bytes = new Uint8Array(byteLength).fill(255);\n    // [Show = true, Alpha = 255]\n    batchTexture._showAlphaProperties = bytes;\n  }\n  return batchTexture._showAlphaProperties;\n}\n\nfunction checkBatchId(batchId, featuresLength) {\n  if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n    throw new DeveloperError(\n      `batchId is required and between zero and featuresLength - 1 (${featuresLength}` -\n        +\").\",\n    );\n  }\n}\n\n/**\n * Set whether a feature is visible.\n *\n * @param {number} batchId the ID of the feature\n * @param {boolean} show <code>true</code> if the feature should be shown, <code>false</code> otherwise\n * @private\n */\nBatchTexture.prototype.setShow = function (batchId, show) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this._featuresLength);\n  Check.typeOf.bool(\"show\", show);\n  //>>includeEnd('debug');\n\n  if (show && !defined(this._showAlphaProperties)) {\n    // Avoid allocating since the default is show = true\n    return;\n  }\n\n  const showAlphaProperties = getShowAlphaProperties(this);\n  const propertyOffset = batchId * 2;\n\n  const newShow = show ? 255 : 0;\n  if (showAlphaProperties[propertyOffset] !== newShow) {\n    showAlphaProperties[propertyOffset] = newShow;\n\n    const batchValues = getBatchValues(this);\n\n    // Compute alpha used in the shader based on show and color.alpha properties\n    const offset = batchId * 4 + 3;\n    batchValues[offset] = show ? showAlphaProperties[propertyOffset + 1] : 0;\n\n    this._batchValuesDirty = true;\n  }\n};\n\n/**\n * Set the show for all features at once.\n *\n * @param {boolean} show <code>true</code> if the feature should be shown, <code>false</code> otherwise\n * @private\n */\nBatchTexture.prototype.setAllShow = function (show) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bool(\"show\", show);\n  //>>includeEnd('debug');\n\n  const featuresLength = this._featuresLength;\n  for (let i = 0; i < featuresLength; ++i) {\n    this.setShow(i, show);\n  }\n};\n\n/**\n * Check the current show value for a feature\n *\n * @param {number} batchId the ID of the feature\n * @return {boolean} <code>true</code> if the feature is shown, or <code>false</code> otherwise\n * @private\n */\nBatchTexture.prototype.getShow = function (batchId) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this._featuresLength);\n  //>>includeEnd('debug');\n\n  if (!defined(this._showAlphaProperties)) {\n    // Avoid allocating since the default is show = true\n    return true;\n  }\n\n  const offset = batchId * 2;\n  return this._showAlphaProperties[offset] === 255;\n};\n\nconst scratchColorBytes = new Array(4);\n\n/**\n * Set the styling color of a feature\n *\n * @param {number} batchId the ID of the feature\n * @param {Color} color the color to assign to this feature.\n *\n * @private\n */\nBatchTexture.prototype.setColor = function (batchId, color) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this._featuresLength);\n  Check.typeOf.object(\"color\", color);\n  //>>includeEnd('debug');\n\n  if (\n    Color.equals(color, BatchTexture.DEFAULT_COLOR_VALUE) &&\n    !defined(this._batchValues)\n  ) {\n    // Avoid allocating since the default is white\n    return;\n  }\n\n  const newColor = color.toBytes(scratchColorBytes);\n  const newAlpha = newColor[3];\n\n  const batchValues = getBatchValues(this);\n  const offset = batchId * 4;\n\n  const showAlphaProperties = getShowAlphaProperties(this);\n  const propertyOffset = batchId * 2;\n\n  if (\n    batchValues[offset] !== newColor[0] ||\n    batchValues[offset + 1] !== newColor[1] ||\n    batchValues[offset + 2] !== newColor[2] ||\n    showAlphaProperties[propertyOffset + 1] !== newAlpha\n  ) {\n    batchValues[offset] = newColor[0];\n    batchValues[offset + 1] = newColor[1];\n    batchValues[offset + 2] = newColor[2];\n\n    const wasTranslucent = showAlphaProperties[propertyOffset + 1] !== 255;\n\n    // Compute alpha used in the shader based on show and color.alpha properties\n    const show = showAlphaProperties[propertyOffset] !== 0;\n    batchValues[offset + 3] = show ? newAlpha : 0;\n    showAlphaProperties[propertyOffset + 1] = newAlpha;\n\n    // Track number of translucent features so we know if this tile needs\n    // opaque commands, translucent commands, or both for rendering.\n    const isTranslucent = newAlpha !== 255;\n    if (isTranslucent && !wasTranslucent) {\n      ++this._translucentFeaturesLength;\n    } else if (!isTranslucent && wasTranslucent) {\n      --this._translucentFeaturesLength;\n    }\n\n    this._batchValuesDirty = true;\n\n    if (defined(this._colorChangedCallback)) {\n      this._colorChangedCallback(batchId, color);\n    }\n  }\n};\n\n/**\n * Set the styling color for all features at once\n *\n * @param {Color} color the color to assign to all features.\n *\n * @private\n */\nBatchTexture.prototype.setAllColor = function (color) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"color\", color);\n  //>>includeEnd('debug');\n\n  const featuresLength = this._featuresLength;\n  for (let i = 0; i < featuresLength; ++i) {\n    this.setColor(i, color);\n  }\n};\n\n/**\n * Get the current color of a feature\n *\n * @param {number} batchId The ID of the feature\n * @param {Color} result A color object where the result will be stored.\n * @return {Color} The color assigned to the selected feature\n *\n * @private\n */\nBatchTexture.prototype.getColor = function (batchId, result) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this._featuresLength);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  if (!defined(this._batchValues)) {\n    return Color.clone(BatchTexture.DEFAULT_COLOR_VALUE, result);\n  }\n\n  const batchValues = this._batchValues;\n  const offset = batchId * 4;\n\n  const showAlphaProperties = this._showAlphaProperties;\n  const propertyOffset = batchId * 2;\n\n  return Color.fromBytes(\n    batchValues[offset],\n    batchValues[offset + 1],\n    batchValues[offset + 2],\n    showAlphaProperties[propertyOffset + 1],\n    result,\n  );\n};\n\n/**\n * Get the pick color of a feature. This feature is an RGBA encoding of the\n * pick ID.\n *\n * @param {number} batchId The ID of the feature\n * @return {PickId} The picking color assigned to this feature\n *\n * @private\n */\nBatchTexture.prototype.getPickColor = function (batchId) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this._featuresLength);\n  //>>includeEnd('debug');\n  return this._pickIds[batchId];\n};\n\nfunction createTexture(batchTexture, context, bytes) {\n  const dimensions = batchTexture._textureDimensions;\n  return new Texture({\n    context: context,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    source: {\n      width: dimensions.x,\n      height: dimensions.y,\n      arrayBufferView: bytes,\n    },\n    flipY: false,\n    sampler: Sampler.NEAREST,\n  });\n}\n\nfunction createPickTexture(batchTexture, context) {\n  const featuresLength = batchTexture._featuresLength;\n  if (!defined(batchTexture._pickTexture) && featuresLength > 0) {\n    const pickIds = batchTexture._pickIds;\n    const byteLength = getByteLength(batchTexture);\n    const bytes = new Uint8Array(byteLength);\n    const owner = batchTexture._owner;\n    const statistics = batchTexture._statistics;\n\n    // PERFORMANCE_IDEA: we could skip the pick texture completely by allocating\n    // a continuous range of pickIds and then converting the base pickId + batchId\n    // to RGBA in the shader.  The only consider is precision issues, which might\n    // not be an issue in WebGL 2.\n    for (let i = 0; i < featuresLength; ++i) {\n      const pickId = context.createPickId(owner.getFeature(i));\n      pickIds.push(pickId);\n\n      const pickColor = pickId.color;\n      const offset = i * 4;\n      bytes[offset] = Color.floatToByte(pickColor.red);\n      bytes[offset + 1] = Color.floatToByte(pickColor.green);\n      bytes[offset + 2] = Color.floatToByte(pickColor.blue);\n      bytes[offset + 3] = Color.floatToByte(pickColor.alpha);\n    }\n\n    batchTexture._pickTexture = createTexture(batchTexture, context, bytes);\n\n    // Make sure the tileset statistics are updated the frame when the pick\n    // texture is created.\n    if (defined(statistics)) {\n      statistics.batchTableByteLength += batchTexture._pickTexture.sizeInBytes;\n    }\n  }\n}\n\nfunction updateBatchTexture(batchTexture) {\n  const dimensions = batchTexture._textureDimensions;\n  // PERFORMANCE_IDEA: Instead of rewriting the entire texture, use fine-grained\n  // texture updates when less than, for example, 10%, of the values changed.  Or\n  // even just optimize the common case when one feature show/color changed.\n  batchTexture._batchTexture.copyFrom({\n    source: {\n      width: dimensions.x,\n      height: dimensions.y,\n      arrayBufferView: batchTexture._batchValues,\n    },\n  });\n}\n\nBatchTexture.prototype.update = function (tileset, frameState) {\n  const context = frameState.context;\n  this._defaultTexture = context.defaultTexture;\n\n  const passes = frameState.passes;\n  if (passes.pick || passes.postProcess) {\n    createPickTexture(this, context);\n  }\n\n  if (this._batchValuesDirty) {\n    this._batchValuesDirty = false;\n\n    // Create batch texture on-demand\n    if (!defined(this._batchTexture)) {\n      this._batchTexture = createTexture(this, context, this._batchValues);\n\n      // Make sure the tileset statistics are updated the frame when the\n      // batch texture is created.\n      if (defined(this._statistics)) {\n        this._statistics.batchTableByteLength += this._batchTexture.sizeInBytes;\n      }\n    }\n\n    updateBatchTexture(this); // Apply per-feature show/color updates\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see BatchTexture#destroy\n * @private\n */\nBatchTexture.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see BatchTexture#isDestroyed\n * @private\n */\nBatchTexture.prototype.destroy = function () {\n  this._batchTexture = this._batchTexture && this._batchTexture.destroy();\n  this._pickTexture = this._pickTexture && this._pickTexture.destroy();\n\n  const pickIds = this._pickIds;\n  const length = pickIds.length;\n  for (let i = 0; i < length; ++i) {\n    pickIds[i].destroy();\n  }\n\n  return destroyObject(this);\n};\n\nexport default BatchTexture;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Resource from \"../Core/Resource.js\";\nimport BillboardTexture from \"./BillboardTexture.js\";\nimport HeightReference, {\n  isHeightReferenceRelative,\n} from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\nimport SplitDirection from \"./SplitDirection.js\";\nimport getExtensionFromUri from \"../Core/getExtensionFromUri.js\";\nimport isDataUri from \"../Core/isDataUri.js\";\n\n/**\n * @typedef {object} Billboard.ConstructorOptions\n *\n * Initialization options for the first param of Billboard constructor\n *\n * @property {Cartesian3} position The cartesian position of the billboard.\n * @property {*} [id] A user-defined object to return when the billboard is picked with {@link Scene#pick}.\n * @property {boolean} [show=true] Determines if this billboard will be shown.\n * @property {string | HTMLImageElement | HTMLCanvasElement} [image] A loaded HTMLImageElement, ImageData, or a url to an image to use for the billboard.\n * @property {number} [scale=1.0] A number specifying the uniform scale that is multiplied with the billboard's image size in pixels.\n * @property {Cartesian2} [pixelOffset=Cartesian2.ZERO] A {@link Cartesian2} Specifying the pixel offset in screen space from the origin of this billboard.\n * @property {Cartesian3} [eyeOffset=Cartesian3.ZERO] A {@link Cartesian3} Specifying the 3D Cartesian offset applied to this billboard in eye coordinates.\n * @property {HorizontalOrigin} [horizontalOrigin=HorizontalOrigin.CENTER] A {@link HorizontalOrigin} Specifying the horizontal origin of this billboard.\n * @property {VerticalOrigin} [verticalOrigin=VerticalOrigin.CENTER] A {@link VerticalOrigin} Specifying the vertical origin of this billboard.\n * @property {HeightReference} [heightReference=HeightReference.NONE] A {@link HeightReference} Specifying the height reference of this billboard.\n * @property {Color} [color=Color.WHITE] A {@link Color} Specifying the color that is multiplied with the billboard's texture.\n * @property {number} [rotation=0] A number specifying the rotation angle in radians.\n * @property {Cartesian3} [alignedAxis=Cartesian3.ZERO] A {@link Cartesian3} Specifying the aligned axis in world space.\n * @property {boolean} [sizeInMeters] A boolean specifying if the billboard size is in meters or pixels.\n * @property {number} [width] A number specifying the width of the billboard. If undefined, the image width will be used.\n * @property {number} [height] A number specifying the height of the billboard. If undefined, the image height will be used.\n * @property {NearFarScalar} [scaleByDistance] A {@link NearFarScalar} Specifying near and far scaling properties of a Billboard based on the billboard's distance from the camera.\n * @property {NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} Specifying near and far translucency properties of a Billboard based on the billboard's distance from the camera.\n * @property {NearFarScalar} [pixelOffsetScaleByDistance] A {@link NearFarScalar} Specifying near and far pixel offset scaling properties of a Billboard based on the billboard's distance from the camera.\n * @property {BoundingRectangle} [imageSubRegion] A {@link BoundingRectangle} Specifying the sub-region of the image to use for the billboard, rather than the entire image.\n * @property {DistanceDisplayCondition} [distanceDisplayCondition] A {@link DistanceDisplayCondition} Specifying the distance from the camera at which this billboard will be displayed.\n * @property {number} [disableDepthTestDistance] The distance from the camera, beyond which, depth testing is disabled—to, for example, prevent clipping against terrain.\n * @property {SplitDirection} [splitDirection] A {@link SplitDirection} Specifying the split property of the billboard.\n */\n\n/**\n * <div class=\"notice\">\n * A billboard is created and its initial\n * properties are set by calling {@link BillboardCollection#add}. Do not call the constructor directly.\n * </div>\n * A viewport-aligned image positioned in the 3D scene, that is created\n * and rendered using a {@link BillboardCollection}.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.png' width='400' height='300' /><br />\n * Example billboards\n * </div>\n *\n * @alias Billboard\n *\n * @performance Reading a property, e.g., {@link Billboard#show}, is constant time.\n * Assigning to a property is constant time but results in\n * CPU to GPU traffic when {@link BillboardCollection#update} is called.  The per-billboard traffic is\n * the same regardless of how many properties were updated.  If most billboards in a collection need to be\n * updated, it may be more efficient to clear the collection with {@link BillboardCollection#removeAll}\n * and add new billboards instead of modifying each one.\n *\n * @exception {DeveloperError} scaleByDistance.far must be greater than scaleByDistance.near\n * @exception {DeveloperError} translucencyByDistance.far must be greater than translucencyByDistance.near\n * @exception {DeveloperError} pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @see BillboardCollection\n * @see BillboardCollection#add\n * @see Label\n *\n * @internalConstructor\n * @class\n *\n * @param {Billboard.ConstructorOptions} options Object describing initialization options\n * @param {BillboardCollection} billboardCollection Instance of BillboardCollection\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=billboards|Cesium Sandcastle Billboard Demo}\n */\nfunction Billboard(options, billboardCollection) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    defined(options.disableDepthTestDistance) &&\n    options.disableDepthTestDistance < 0.0\n  ) {\n    throw new DeveloperError(\n      \"disableDepthTestDistance must be greater than or equal to 0.0.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let translucencyByDistance = options.translucencyByDistance;\n  let pixelOffsetScaleByDistance = options.pixelOffsetScaleByDistance;\n  let scaleByDistance = options.scaleByDistance;\n  let distanceDisplayCondition = options.distanceDisplayCondition;\n  if (defined(translucencyByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (translucencyByDistance.far <= translucencyByDistance.near) {\n      throw new DeveloperError(\n        \"translucencyByDistance.far must be greater than translucencyByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    translucencyByDistance = NearFarScalar.clone(translucencyByDistance);\n  }\n  if (defined(pixelOffsetScaleByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (pixelOffsetScaleByDistance.far <= pixelOffsetScaleByDistance.near) {\n      throw new DeveloperError(\n        \"pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    pixelOffsetScaleByDistance = NearFarScalar.clone(\n      pixelOffsetScaleByDistance,\n    );\n  }\n  if (defined(scaleByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (scaleByDistance.far <= scaleByDistance.near) {\n      throw new DeveloperError(\n        \"scaleByDistance.far must be greater than scaleByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    scaleByDistance = NearFarScalar.clone(scaleByDistance);\n  }\n  if (defined(distanceDisplayCondition)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n      throw new DeveloperError(\n        \"distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    distanceDisplayCondition = DistanceDisplayCondition.clone(\n      distanceDisplayCondition,\n    );\n  }\n\n  this._show = options.show ?? true;\n  this._position = Cartesian3.clone(options.position ?? Cartesian3.ZERO);\n  this._actualPosition = Cartesian3.clone(this._position); // For columbus view and 2D\n  this._pixelOffset = Cartesian2.clone(options.pixelOffset ?? Cartesian2.ZERO);\n  this._translate = new Cartesian2(0.0, 0.0); // used by labels for glyph vertex translation\n  this._eyeOffset = Cartesian3.clone(options.eyeOffset ?? Cartesian3.ZERO);\n  this._heightReference = options.heightReference ?? HeightReference.NONE;\n  this._verticalOrigin = options.verticalOrigin ?? VerticalOrigin.CENTER;\n  this._horizontalOrigin = options.horizontalOrigin ?? HorizontalOrigin.CENTER;\n  this._scale = options.scale ?? 1.0;\n  this._color = Color.clone(options.color ?? Color.WHITE);\n  this._rotation = options.rotation ?? 0.0;\n  this._alignedAxis = Cartesian3.clone(options.alignedAxis ?? Cartesian3.ZERO);\n  this._width = options.width;\n  this._height = options.height;\n  this._scaleByDistance = scaleByDistance;\n  this._translucencyByDistance = translucencyByDistance;\n  this._pixelOffsetScaleByDistance = pixelOffsetScaleByDistance;\n  this._sizeInMeters = options.sizeInMeters ?? false;\n  this._distanceDisplayCondition = distanceDisplayCondition;\n  this._disableDepthTestDistance = options.disableDepthTestDistance;\n  this._id = options.id;\n  this._collection = options.collection ?? billboardCollection; // Used only for pick ids\n\n  this._pickId = undefined;\n  this._pickPrimitive = options._pickPrimitive ?? this;\n\n  this._billboardCollection = billboardCollection;\n  this._dirty = false;\n  this._index = -1; // Used only by BillboardCollection\n  this._batchIndex = undefined; // Used only by Vector3DTilePoints and BillboardCollection\n\n  this._imageTexture = new BillboardTexture(billboardCollection);\n\n  this._imageId = options.imageId;\n  this._imageWidth = undefined;\n  this._imageHeight = undefined;\n  this._labelDimensions = undefined;\n  this._labelHorizontalOrigin = undefined;\n  this._labelTranslate = undefined;\n\n  const image = options.image;\n  if (defined(image)) {\n    this._computeImageTextureProperties(options.imageId, image);\n    this._imageTexture.loadImage(\n      this._imageId,\n      image,\n      this._imageWidth,\n      this._imageHeight,\n    );\n  }\n\n  if (defined(options.imageSubRegion)) {\n    this._imageTexture.addImageSubRegion(this._imageId, options.imageSubRegion);\n  }\n\n  this._actualClampedPosition = undefined;\n  this._removeCallbackFunc = undefined;\n  this._mode = SceneMode.SCENE3D;\n\n  this._clusterShow = true;\n  this._outlineColor = Color.clone(options.outlineColor ?? Color.BLACK);\n  this._outlineWidth = options.outlineWidth ?? 0.0;\n\n  this._updateClamping();\n\n  this._splitDirection = options.splitDirection ?? SplitDirection.NONE;\n  // Primarily used by labels to indicate that the position is derived from the parent.\n  // and expensive operations like clamping can be skipped.\n  this._positionFromParent = false;\n}\n\nconst SHOW_INDEX = (Billboard.SHOW_INDEX = 0);\nconst POSITION_INDEX = (Billboard.POSITION_INDEX = 1);\nconst PIXEL_OFFSET_INDEX = (Billboard.PIXEL_OFFSET_INDEX = 2);\nconst EYE_OFFSET_INDEX = (Billboard.EYE_OFFSET_INDEX = 3);\nconst HORIZONTAL_ORIGIN_INDEX = (Billboard.HORIZONTAL_ORIGIN_INDEX = 4);\nconst VERTICAL_ORIGIN_INDEX = (Billboard.VERTICAL_ORIGIN_INDEX = 5);\nconst SCALE_INDEX = (Billboard.SCALE_INDEX = 6);\nconst IMAGE_INDEX_INDEX = (Billboard.IMAGE_INDEX_INDEX = 7);\nconst COLOR_INDEX = (Billboard.COLOR_INDEX = 8);\nconst ROTATION_INDEX = (Billboard.ROTATION_INDEX = 9);\nconst ALIGNED_AXIS_INDEX = (Billboard.ALIGNED_AXIS_INDEX = 10);\nconst SCALE_BY_DISTANCE_INDEX = (Billboard.SCALE_BY_DISTANCE_INDEX = 11);\nconst TRANSLUCENCY_BY_DISTANCE_INDEX =\n  (Billboard.TRANSLUCENCY_BY_DISTANCE_INDEX = 12);\nconst PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX =\n  (Billboard.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX = 13);\nconst DISTANCE_DISPLAY_CONDITION = (Billboard.DISTANCE_DISPLAY_CONDITION = 14);\nconst DISABLE_DEPTH_DISTANCE = (Billboard.DISABLE_DEPTH_DISTANCE = 15);\nBillboard.TEXTURE_COORDINATE_BOUNDS = 16;\nconst SDF_INDEX = (Billboard.SDF_INDEX = 17);\nconst SPLIT_DIRECTION_INDEX = (Billboard.SPLIT_DIRECTION_INDEX = 18);\nBillboard.NUMBER_OF_PROPERTIES = 19;\n\nfunction makeDirty(billboard, propertyChanged) {\n  const billboardCollection = billboard._billboardCollection;\n  if (defined(billboardCollection)) {\n    billboardCollection._updateBillboard(billboard, propertyChanged);\n    billboard._dirty = true;\n  }\n}\n\nObject.defineProperties(Billboard.prototype, {\n  /**\n   * Determines if this billboard will be shown.  Use this to hide or show a billboard, instead\n   * of removing it and re-adding it to the collection.\n   * @memberof Billboard.prototype\n   * @type {boolean}\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._show !== value) {\n        this._show = value;\n        makeDirty(this, SHOW_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the Cartesian position of this billboard.\n   * @memberof Billboard.prototype\n   * @type {Cartesian3}\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const position = this._position;\n      if (!Cartesian3.equals(position, value)) {\n        Cartesian3.clone(value, position);\n        Cartesian3.clone(value, this._actualPosition);\n        this._updateClamping();\n        makeDirty(this, POSITION_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the height reference of this billboard.\n   * @memberof Billboard.prototype\n   * @type {HeightReference}\n   * @default HeightReference.NONE\n   */\n  heightReference: {\n    get: function () {\n      return this._heightReference;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      const heightReference = this._heightReference;\n      if (value !== heightReference) {\n        this._heightReference = value;\n        this._updateClamping();\n        makeDirty(this, POSITION_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the pixel offset in screen space from the origin of this billboard.  This is commonly used\n   * to align multiple billboards and labels at the same position, e.g., an image and text.  The\n   * screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n   * left to right, and <code>y</code> increases from top to bottom.\n   * <br /><br />\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>default</code><br/><img src='Images/Billboard.setPixelOffset.default.png' width='250' height='188' /></td>\n   * <td align='center'><code>b.pixeloffset = new Cartesian2(50, 25);</code><br/><img src='Images/Billboard.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n   * </tr></table>\n   * The billboard's origin is indicated by the yellow point.\n   * </div>\n   * @memberof Billboard.prototype\n   * @type {Cartesian2}\n   */\n  pixelOffset: {\n    get: function () {\n      return this._pixelOffset;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const pixelOffset = this._pixelOffset;\n      if (!Cartesian2.equals(pixelOffset, value)) {\n        Cartesian2.clone(value, pixelOffset);\n        makeDirty(this, PIXEL_OFFSET_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far scaling properties of a Billboard based on the billboard's distance from the camera.\n   * A billboard's scale will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the billboard's scale remains clamped to the nearest bound.  If undefined,\n   * scaleByDistance will be disabled.\n   * @memberof Billboard.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a billboard's scaleByDistance to scale by 1.5 when the\n   * // camera is 1500 meters from the billboard and disappear as\n   * // the camera distance approaches 8.0e6 meters.\n   * b.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable scaling by distance\n   * b.scaleByDistance = undefined;\n   */\n  scaleByDistance: {\n    get: function () {\n      return this._scaleByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value)) {\n        Check.typeOf.object(\"value\", value);\n        if (value.far <= value.near) {\n          throw new DeveloperError(\n            \"far distance must be greater than near distance.\",\n          );\n        }\n      }\n      //>>includeEnd('debug');\n\n      const scaleByDistance = this._scaleByDistance;\n      if (!NearFarScalar.equals(scaleByDistance, value)) {\n        this._scaleByDistance = NearFarScalar.clone(value, scaleByDistance);\n        makeDirty(this, SCALE_BY_DISTANCE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far translucency properties of a Billboard based on the billboard's distance from the camera.\n   * A billboard's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the billboard's translucency remains clamped to the nearest bound.  If undefined,\n   * translucencyByDistance will be disabled.\n   * @memberof Billboard.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a billboard's translucency to 1.0 when the\n   * // camera is 1500 meters from the billboard and disappear as\n   * // the camera distance approaches 8.0e6 meters.\n   * b.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable translucency by distance\n   * b.translucencyByDistance = undefined;\n   */\n  translucencyByDistance: {\n    get: function () {\n      return this._translucencyByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value)) {\n        Check.typeOf.object(\"value\", value);\n        if (value.far <= value.near) {\n          throw new DeveloperError(\n            \"far distance must be greater than near distance.\",\n          );\n        }\n      }\n      //>>includeEnd('debug');\n\n      const translucencyByDistance = this._translucencyByDistance;\n      if (!NearFarScalar.equals(translucencyByDistance, value)) {\n        this._translucencyByDistance = NearFarScalar.clone(\n          value,\n          translucencyByDistance,\n        );\n        makeDirty(this, TRANSLUCENCY_BY_DISTANCE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far pixel offset scaling properties of a Billboard based on the billboard's distance from the camera.\n   * A billboard's pixel offset will be scaled between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the billboard's pixel offset scale remains clamped to the nearest bound.  If undefined,\n   * pixelOffsetScaleByDistance will be disabled.\n   * @memberof Billboard.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a billboard's pixel offset scale to 0.0 when the\n   * // camera is 1500 meters from the billboard and scale pixel offset to 10.0 pixels\n   * // in the y direction the camera distance approaches 8.0e6 meters.\n   * b.pixelOffset = new Cesium.Cartesian2(0.0, 1.0);\n   * b.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1.5e2, 0.0, 8.0e6, 10.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable pixel offset by distance\n   * b.pixelOffsetScaleByDistance = undefined;\n   */\n  pixelOffsetScaleByDistance: {\n    get: function () {\n      return this._pixelOffsetScaleByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value)) {\n        Check.typeOf.object(\"value\", value);\n        if (value.far <= value.near) {\n          throw new DeveloperError(\n            \"far distance must be greater than near distance.\",\n          );\n        }\n      }\n      //>>includeEnd('debug');\n\n      const pixelOffsetScaleByDistance = this._pixelOffsetScaleByDistance;\n      if (!NearFarScalar.equals(pixelOffsetScaleByDistance, value)) {\n        this._pixelOffsetScaleByDistance = NearFarScalar.clone(\n          value,\n          pixelOffsetScaleByDistance,\n        );\n        makeDirty(this, PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the 3D Cartesian offset applied to this billboard in eye coordinates.  Eye coordinates is a left-handed\n   * coordinate system, where <code>x</code> points towards the viewer's right, <code>y</code> points up, and\n   * <code>z</code> points into the screen.  Eye coordinates use the same scale as world and model coordinates,\n   * which is typically meters.\n   * <br /><br />\n   * An eye offset is commonly used to arrange multiple billboards or objects at the same position, e.g., to\n   * arrange a billboard above its corresponding 3D model.\n   * <br /><br />\n   * Below, the billboard is positioned at the center of the Earth but an eye offset makes it always\n   * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n   * <br /><br />\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n   * </tr></table>\n   * <code>b.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code><br /><br />\n   * </div>\n   * @memberof Billboard.prototype\n   * @type {Cartesian3}\n   */\n  eyeOffset: {\n    get: function () {\n      return this._eyeOffset;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const eyeOffset = this._eyeOffset;\n      if (!Cartesian3.equals(eyeOffset, value)) {\n        Cartesian3.clone(value, eyeOffset);\n        makeDirty(this, EYE_OFFSET_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the horizontal origin of this billboard, which determines if the billboard is\n   * to the left, center, or right of its anchor position.\n   * <br /><br />\n   * <div align='center'>\n   * <img src='Images/Billboard.setHorizontalOrigin.png' width='648' height='196' /><br />\n   * </div>\n   * @memberof Billboard.prototype\n   * @type {HorizontalOrigin}\n   * @example\n   * // Use a bottom, left origin\n   * b.horizontalOrigin = Cesium.HorizontalOrigin.LEFT;\n   * b.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\n   */\n  horizontalOrigin: {\n    get: function () {\n      return this._horizontalOrigin;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._horizontalOrigin !== value) {\n        this._horizontalOrigin = value;\n        makeDirty(this, HORIZONTAL_ORIGIN_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the vertical origin of this billboard, which determines if the billboard is\n   * to the above, below, or at the center of its anchor position.\n   * <br /><br />\n   * <div align='center'>\n   * <img src='Images/Billboard.setVerticalOrigin.png' width='695' height='175' /><br />\n   * </div>\n   * @memberof Billboard.prototype\n   * @type {VerticalOrigin}\n   * @example\n   * // Use a bottom, left origin\n   * b.horizontalOrigin = Cesium.HorizontalOrigin.LEFT;\n   * b.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\n   */\n  verticalOrigin: {\n    get: function () {\n      return this._verticalOrigin;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._verticalOrigin !== value) {\n        this._verticalOrigin = value;\n        makeDirty(this, VERTICAL_ORIGIN_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the uniform scale that is multiplied with the billboard's image size in pixels.\n   * A scale of <code>1.0</code> does not change the size of the billboard; a scale greater than\n   * <code>1.0</code> enlarges the billboard; a positive scale less than <code>1.0</code> shrinks\n   * the billboard.\n   * <br /><br />\n   * <div align='center'>\n   * <img src='Images/Billboard.setScale.png' width='400' height='300' /><br/>\n   * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>,\n   * and <code>2.0</code>.\n   * </div>\n   * @memberof Billboard.prototype\n   * @type {number}\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._scale !== value) {\n        this._scale = value;\n        makeDirty(this, SCALE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the color that is multiplied with the billboard's texture.  This has two common use cases.  First,\n   * the same white texture may be used by many different billboards, each with a different color, to create\n   * colored billboards.  Second, the color's alpha component can be used to make the billboard translucent as shown below.\n   * An alpha of <code>0.0</code> makes the billboard transparent, and <code>1.0</code> makes the billboard opaque.\n   * <br /><br />\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>default</code><br/><img src='Images/Billboard.setColor.Alpha255.png' width='250' height='188' /></td>\n   * <td align='center'><code>alpha : 0.5</code><br/><img src='Images/Billboard.setColor.Alpha127.png' width='250' height='188' /></td>\n   * </tr></table>\n   * </div>\n   * <br />\n   * The red, green, blue, and alpha values are indicated by <code>value</code>'s <code>red</code>, <code>green</code>,\n   * <code>blue</code>, and <code>alpha</code> properties as shown in Example 1.  These components range from <code>0.0</code>\n   * (no intensity) to <code>1.0</code> (full intensity).\n   * @memberof Billboard.prototype\n   * @type {Color}\n   *\n   * @example\n   * // Example 1. Assign yellow.\n   * b.color = Cesium.Color.YELLOW;\n   *\n   * @example\n   * // Example 2. Make a billboard 50% translucent.\n   * b.color = new Cesium.Color(1.0, 1.0, 1.0, 0.5);\n   */\n  color: {\n    get: function () {\n      return this._color;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const color = this._color;\n      if (!Color.equals(color, value)) {\n        Color.clone(value, color);\n        makeDirty(this, COLOR_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the rotation angle in radians.\n   * @memberof Billboard.prototype\n   * @type {number}\n   */\n  rotation: {\n    get: function () {\n      return this._rotation;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._rotation !== value) {\n        this._rotation = value;\n        makeDirty(this, ROTATION_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the aligned axis in world space. The aligned axis is the unit vector that the billboard up vector points towards.\n   * The default is the zero vector, which means the billboard is aligned to the screen up vector.\n   * @memberof Billboard.prototype\n   * @type {Cartesian3}\n   * @example\n   * // Example 1.\n   * // Have the billboard up vector point north\n   * billboard.alignedAxis = Cesium.Cartesian3.UNIT_Z;\n   *\n   * @example\n   * // Example 2.\n   * // Have the billboard point east.\n   * billboard.alignedAxis = Cesium.Cartesian3.UNIT_Z;\n   * billboard.rotation = -Cesium.Math.PI_OVER_TWO;\n   *\n   * @example\n   * // Example 3.\n   * // Reset the aligned axis\n   * billboard.alignedAxis = Cesium.Cartesian3.ZERO;\n   */\n  alignedAxis: {\n    get: function () {\n      return this._alignedAxis;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const alignedAxis = this._alignedAxis;\n      if (!Cartesian3.equals(alignedAxis, value)) {\n        Cartesian3.clone(value, alignedAxis);\n        makeDirty(this, ALIGNED_AXIS_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets a width for the billboard. If undefined, the image width will be used.\n   * @memberof Billboard.prototype\n   * @type {number|undefined}\n   */\n  width: {\n    get: function () {\n      return this._width ?? this._imageTexture.width;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value)) {\n        Check.typeOf.number(\"width\", value);\n      }\n      //>>includeEnd('debug');\n\n      if (this._width !== value) {\n        this._width = value;\n        makeDirty(this, IMAGE_INDEX_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets a height for the billboard. If undefined, the image height will be used.\n   * @memberof Billboard.prototype\n   * @type {number|undefined}\n   */\n  height: {\n    get: function () {\n      return this._height ?? this._imageTexture.height;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value)) {\n        Check.typeOf.number(\"height\", value);\n      }\n      //>>includeEnd('debug');\n\n      if (this._height !== value) {\n        this._height = value;\n        makeDirty(this, IMAGE_INDEX_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets if the billboard size is in meters or pixels. <code>true</code> to size the billboard in meters;\n   * otherwise, the size is in pixels.\n   * @memberof Billboard.prototype\n   * @type {boolean}\n   * @default false\n   */\n  sizeInMeters: {\n    get: function () {\n      return this._sizeInMeters;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"value\", value);\n      //>>includeEnd('debug');\n      if (this._sizeInMeters !== value) {\n        this._sizeInMeters = value;\n        makeDirty(this, COLOR_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the condition specifying at what distance from the camera that this billboard will be displayed.\n   * @memberof Billboard.prototype\n   * @type {DistanceDisplayCondition}\n   * @default undefined\n   */\n  distanceDisplayCondition: {\n    get: function () {\n      return this._distanceDisplayCondition;\n    },\n    set: function (value) {\n      if (\n        !DistanceDisplayCondition.equals(value, this._distanceDisplayCondition)\n      ) {\n        //>>includeStart('debug', pragmas.debug);\n        if (defined(value)) {\n          Check.typeOf.object(\"value\", value);\n          if (value.far <= value.near) {\n            throw new DeveloperError(\n              \"far distance must be greater than near distance.\",\n            );\n          }\n        }\n        //>>includeEnd('debug');\n        this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n          value,\n          this._distanceDisplayCondition,\n        );\n        makeDirty(this, DISTANCE_DISPLAY_CONDITION);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the distance from the camera, beyond which, depth testing is disbaled—to,\n   * for example, prevent clipping against terrain. When set to <code>undefined</code> or\n   * <code>0</code>, the depth test is always applied. When set to\n   * <code>Number.POSITIVE_INFINITY</code>, the depth test is never applied.\n   * @memberof Billboard.prototype\n   * @type {number|undefined}\n   * @default undefined\n   */\n  disableDepthTestDistance: {\n    get: function () {\n      return this._disableDepthTestDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value)) {\n        Check.typeOf.number(\"value\", value);\n        if (value < 0.0) {\n          throw new DeveloperError(\n            \"disableDepthTestDistance must be greater than or equal to 0.0.\",\n          );\n        }\n      }\n      //>>includeEnd('debug');\n      if (this._disableDepthTestDistance !== value) {\n        this._disableDepthTestDistance = value;\n        makeDirty(this, DISABLE_DEPTH_DISTANCE);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the user-defined object returned when the billboard is picked.\n   * @memberof Billboard.prototype\n   * @type {*}\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n    set: function (value) {\n      this._id = value;\n      if (defined(this._pickId)) {\n        this._pickId.object.id = value;\n      }\n    },\n  },\n\n  /**\n   * The primitive to return when picking this billboard.\n   * @memberof Billboard.prototype\n   * @private\n   */\n  pickPrimitive: {\n    get: function () {\n      return this._pickPrimitive;\n    },\n    set: function (value) {\n      this._pickPrimitive = value;\n      if (defined(this._pickId)) {\n        this._pickId.object.primitive = value;\n      }\n    },\n  },\n\n  /**\n   * @private\n   */\n  pickId: {\n    get: function () {\n      return this._pickId;\n    },\n  },\n\n  /**\n   * <p>\n   * Gets or sets the image to be used for this billboard.  If a texture has already been created for the\n   * given image, the existing texture is used.\n   * </p>\n   * <p>\n   * This property can be set to a loaded Image, a URL which will be loaded as an Image automatically,\n   * a canvas, or another billboard's image property (from the same billboard collection).\n   * </p>\n   *\n   * @memberof Billboard.prototype\n   * @type {string}\n   * @example\n   * // load an image from a URL\n   * b.image = 'some/image/url.png';\n   *\n   * // assuming b1 and b2 are billboards in the same billboard collection,\n   * // use the same image for both billboards.\n   * b2.image = b1.image;\n   */\n  image: {\n    get: function () {\n      return this._imageTexture.id;\n    },\n    set: function (value) {\n      if (!defined(value)) {\n        this._imageTexture.unload();\n        return;\n      }\n\n      this._computeImageTextureProperties(undefined, value);\n      this._imageTexture.loadImage(\n        this._imageId,\n        value,\n        this._imageWidth,\n        this._imageHeight,\n      );\n    },\n  },\n\n  /**\n   * When <code>true</code>, this billboard is ready to render, i.e., the image\n   * has been downloaded and the WebGL resources are created.\n   * @memberof Billboard.prototype\n   * @type {boolean}\n   * @readonly\n   * @default false\n   */\n  ready: {\n    get: function () {\n      return this._imageTexture.ready;\n    },\n  },\n\n  /**\n   * If defined, this error was encountered during the loading process.\n   * @memberof Billboard.prototype\n   * @type {Error|undefined}\n   * @readonly\n   * @private\n   */\n  loadError: {\n    get: function () {\n      return this._imageTexture.loadError;\n    },\n  },\n\n  /**\n   * Used by <code>billboardCollection</code> to track which billboards to update based on image load status.\n   * @memberof Billboard.prototype\n   * @type {boolean}\n   * @private\n   * @default false\n   */\n  textureDirty: {\n    get: function () {\n      return this._imageTexture.dirty;\n    },\n    set: function (value) {\n      this._imageTexture.dirty = value;\n    },\n  },\n\n  /**\n   * Keeps track of the position of the billboard based on the height reference.\n   * @memberof Billboard.prototype\n   * @type {Cartesian3}\n   * @private\n   */\n  _clampedPosition: {\n    get: function () {\n      return this._actualClampedPosition;\n    },\n    set: function (value) {\n      this._actualClampedPosition = Cartesian3.clone(\n        value,\n        this._actualClampedPosition,\n      );\n      makeDirty(this, POSITION_INDEX);\n    },\n  },\n\n  /**\n   * Determines whether or not this billboard will be shown or hidden because it was clustered.\n   * @memberof Billboard.prototype\n   * @type {boolean}\n   * @private\n   */\n  clusterShow: {\n    get: function () {\n      return this._clusterShow;\n    },\n    set: function (value) {\n      if (this._clusterShow !== value) {\n        this._clusterShow = value;\n        makeDirty(this, SHOW_INDEX);\n      }\n    },\n  },\n\n  /**\n   * The outline color of this Billboard.  Effective only for SDF billboards like Label glyphs.\n   * @memberof Billboard.prototype\n   * @type {Color}\n   * @private\n   */\n  outlineColor: {\n    get: function () {\n      return this._outlineColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const outlineColor = this._outlineColor;\n      if (!Color.equals(outlineColor, value)) {\n        Color.clone(value, outlineColor);\n        makeDirty(this, SDF_INDEX);\n      }\n    },\n  },\n\n  /**\n   * The outline width of this Billboard in pixels.  Effective only for SDF billboards like Label glyphs.\n   * @memberof Billboard.prototype\n   * @type {number}\n   * @private\n   */\n  outlineWidth: {\n    get: function () {\n      return this._outlineWidth;\n    },\n    set: function (value) {\n      if (this._outlineWidth !== value) {\n        this._outlineWidth = value;\n        makeDirty(this, SDF_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the {@link SplitDirection} of this billboard.\n   * @memberof Billboard.prototype\n   * @type {SplitDirection}\n   * @default {@link SplitDirection.NONE}\n   */\n  splitDirection: {\n    get: function () {\n      return this._splitDirection;\n    },\n    set: function (value) {\n      if (this._splitDirection !== value) {\n        this._splitDirection = value;\n        makeDirty(this, SPLIT_DIRECTION_INDEX);\n      }\n    },\n  },\n});\n\nBillboard.prototype.getPickId = function (context) {\n  if (!defined(this._pickId)) {\n    this._pickId = context.createPickId({\n      primitive: this._pickPrimitive,\n      collection: this._collection,\n      id: this._id,\n    });\n  }\n\n  return this._pickId;\n};\n\nBillboard.prototype._updateClamping = function () {\n  Billboard._updateClamping(this._billboardCollection, this);\n};\n\nconst scratchCartographic = new Cartographic();\nBillboard._updateClamping = function (collection, owner) {\n  if (!defined(collection) || !defined(collection._scene)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (owner._heightReference !== HeightReference.NONE) {\n      throw new DeveloperError(\n        \"Height reference is not supported without a scene.\",\n      );\n    }\n    //>>includeEnd('debug');\n    return;\n  }\n  const scene = collection._scene;\n  const ellipsoid = scene.ellipsoid ?? Ellipsoid.default;\n\n  const mode = scene.frameState.mode;\n  const modeChanged = mode !== owner._mode;\n  owner._mode = mode;\n\n  if (\n    (owner._heightReference === HeightReference.NONE || modeChanged) &&\n    defined(owner._removeCallbackFunc)\n  ) {\n    owner._removeCallbackFunc();\n    owner._removeCallbackFunc = undefined;\n    owner._clampedPosition = undefined;\n  }\n\n  if (\n    owner._heightReference === HeightReference.NONE ||\n    owner._positionFromParent ||\n    !defined(owner._position)\n  ) {\n    return;\n  }\n\n  if (defined(owner._removeCallbackFunc)) {\n    owner._removeCallbackFunc();\n  }\n\n  const position = ellipsoid.cartesianToCartographic(owner._position);\n  if (!defined(position)) {\n    owner._actualClampedPosition = undefined;\n    return;\n  }\n\n  function updateFunction(clampedPosition) {\n    const updatedClampedPosition = ellipsoid.cartographicToCartesian(\n      clampedPosition,\n      owner._clampedPosition,\n    );\n\n    if (isHeightReferenceRelative(owner._heightReference)) {\n      if (owner._mode === SceneMode.SCENE3D) {\n        clampedPosition.height += position.height;\n        ellipsoid.cartographicToCartesian(\n          clampedPosition,\n          updatedClampedPosition,\n        );\n      } else {\n        updatedClampedPosition.x += position.height;\n      }\n    }\n\n    owner._clampedPosition = updatedClampedPosition;\n  }\n\n  owner._removeCallbackFunc = scene.updateHeight(\n    position,\n    updateFunction,\n    owner._heightReference,\n  );\n\n  Cartographic.clone(position, scratchCartographic);\n  const height = scene.getHeight(position, owner._heightReference);\n  if (defined(height)) {\n    scratchCartographic.height = height;\n  }\n\n  updateFunction(scratchCartographic);\n};\n\n/**\n * Get the texture coordinates for reading the loaded texture in shaders.\n * @param {BoundingRectangle} [result] The modified result parameter or a new BoundingRectangle instance if one was not provided.\n * @return {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n * @private\n */\nBillboard.prototype.computeTextureCoordinates = function (result) {\n  return this._imageTexture.computeTextureCoordinates(result);\n};\n\n/**\n * <p>\n * Sets the image to be used for this billboard.  If a texture has already been created for the\n * given id, the existing texture is used.\n * </p>\n * <p>\n * This function is useful for dynamically creating textures that are shared across many billboards.\n * Only the first billboard will actually call the function and create the texture, while subsequent\n * billboards created with the same id will simply re-use the existing texture.\n * </p>\n * <p>\n * To load an image from a URL, setting the {@link Billboard#image} property is more convenient.\n * </p>\n *\n * @param {string} id The id of the image.  This can be any string that uniquely identifies the image.\n * @param {HTMLImageElement|HTMLCanvasElement|string|Resource|Billboard.CreateImageCallback} image The image to load.  This parameter\n *        can either be a loaded Image or Canvas, a URL which will be loaded as an Image automatically,\n *        or a function which will be called to create the image if it hasn't been loaded already.\n * @example\n * // create a billboard image dynamically\n * function drawImage(id) {\n *   // create and draw an image using a canvas\n *   const canvas = document.createElement('canvas');\n *   const context2D = canvas.getContext('2d');\n *   // ... draw image\n *   return canvas;\n * }\n * // drawImage will be called to create the texture\n * b.setImage('myImage', drawImage);\n *\n * // subsequent billboards created in the same collection using the same id will use the existing\n * // texture, without the need to create the canvas or draw the image\n * b2.setImage('myImage', drawImage);\n */\nBillboard.prototype.setImage = function (id, image) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"id\", id);\n  Check.defined(\"image\", image);\n  //>>includeEnd('debug');\n\n  this._computeImageTextureProperties(id, image);\n  this._imageTexture.loadImage(\n    this._imageId,\n    image,\n    this._imageWidth,\n    this._imageHeight,\n  );\n};\n\n/**\n * Copy the values of an existing billboard texture into this one. Useful for prevent downtime for images that have already been loaded.\n * @private\n * @param {BillboardTexture} billboardTexture\n */\nBillboard.prototype.setImageTexture = function (billboardTexture) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"billboardTexture\", billboardTexture);\n  //>>includeEnd('debug');\n\n  BillboardTexture.clone(billboardTexture, this._imageTexture);\n};\n\n/** Arbitrary limit on allocated SVG size, in pixels. Raster images use image resolution. */\nconst SVG_MAX_SIZE_PX = 512;\n\n/**\n * Computes billboard texture ID, width, and height. For raster images, width and height are left\n * undefined, defaulting to image resolution. For SVG, use billboard pixel width and height.\n * @param {string | undefined} id The id of the image.\n * @param {string | HTMLImageElement | HTMLCanvasElement | undefined} image A loaded HTMLImageElement, ImageData, or a url to an image to use for the billboard.\n * @private\n */\nBillboard.prototype._computeImageTextureProperties = function (id, image) {\n  this._imageWidth = undefined;\n  this._imageHeight = undefined;\n\n  if (!defined(image)) {\n    this._imageId = createGuid();\n    return;\n  }\n\n  let imageUri;\n  if (typeof image === \"string\") {\n    imageUri = image;\n  } else if (image instanceof Resource) {\n    imageUri = image._url;\n  } else if (defined(image.src)) {\n    imageUri = image.src;\n  }\n\n  this._imageId = id ?? imageUri ?? createGuid();\n\n  const hasSizeInPixels =\n    defined(this._width) && defined(this._height) && !this._sizeInMeters;\n\n  if (hasSizeInPixels && isSvgUri(imageUri)) {\n    this._imageWidth = Math.min(this._width, SVG_MAX_SIZE_PX);\n    this._imageHeight = Math.min(this._height, SVG_MAX_SIZE_PX);\n  }\n};\n\nfunction isSvgUri(uri) {\n  if (!defined(uri)) {\n    return false;\n  }\n  return isDataUri(uri)\n    ? uri.startsWith(\"data:image/svg+xml\")\n    : getExtensionFromUri(uri) === \"svg\";\n}\n\n/**\n * Uses a sub-region of the image with the given id as the image for this billboard,\n * measured in pixels from the bottom-left.\n *\n * @param {string} id The id of the image to use.\n * @param {BoundingRectangle} subRegion The sub-region of the image.\n *\n * @exception {RuntimeError} image with id must be in the atlas\n */\nBillboard.prototype.setImageSubRegion = function (id, subRegion) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"id\", id);\n  Check.defined(\"subRegion\", subRegion);\n  //>>includeEnd('debug');\n\n  this._imageTexture.addImageSubRegion(id, subRegion);\n};\n\nBillboard.prototype._setTranslate = function (value) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(value)) {\n    throw new DeveloperError(\"value is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const translate = this._translate;\n  if (!Cartesian2.equals(translate, value)) {\n    Cartesian2.clone(value, translate);\n    makeDirty(this, PIXEL_OFFSET_INDEX);\n  }\n};\n\nBillboard.prototype._getActualPosition = function () {\n  return defined(this._clampedPosition)\n    ? this._clampedPosition\n    : this._actualPosition;\n};\n\nBillboard.prototype._setActualPosition = function (value) {\n  if (!defined(this._clampedPosition)) {\n    Cartesian3.clone(value, this._actualPosition);\n  }\n  makeDirty(this, POSITION_INDEX);\n};\n\nconst tempCartesian3 = new Cartesian4();\nBillboard._computeActualPosition = function (\n  billboard,\n  position,\n  frameState,\n  modelMatrix,\n) {\n  if (defined(billboard._clampedPosition)) {\n    if (frameState.mode !== billboard._mode) {\n      billboard._updateClamping();\n    }\n    return billboard._clampedPosition;\n  } else if (frameState.mode === SceneMode.SCENE3D) {\n    return position;\n  }\n\n  Matrix4.multiplyByPoint(modelMatrix, position, tempCartesian3);\n  return SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    tempCartesian3,\n  );\n};\n\nconst scratchCartesian3 = new Cartesian3();\n\n// This function is basically a stripped-down JavaScript version of BillboardCollectionVS.glsl\nBillboard._computeScreenSpacePosition = function (\n  modelMatrix,\n  position,\n  eyeOffset,\n  pixelOffset,\n  scene,\n  result,\n) {\n  // Model to world coordinates\n  const positionWorld = Matrix4.multiplyByPoint(\n    modelMatrix,\n    position,\n    scratchCartesian3,\n  );\n\n  // World to window coordinates\n  const positionWC = SceneTransforms.worldWithEyeOffsetToWindowCoordinates(\n    scene,\n    positionWorld,\n    eyeOffset,\n    result,\n  );\n  if (!defined(positionWC)) {\n    return undefined;\n  }\n\n  // Apply pixel offset\n  Cartesian2.add(positionWC, pixelOffset, positionWC);\n\n  return positionWC;\n};\n\nconst scratchPixelOffset = new Cartesian2(0.0, 0.0);\n\n/**\n * Computes the screen-space position of the billboard's origin, taking into account eye and pixel offsets.\n * The screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The screen-space position of the billboard.\n *\n * @exception {DeveloperError} Billboard must be in a collection.\n *\n * @example\n * console.log(b.computeScreenSpacePosition(scene).toString());\n *\n * @see Billboard#eyeOffset\n * @see Billboard#pixelOffset\n */\nBillboard.prototype.computeScreenSpacePosition = function (scene, result) {\n  const billboardCollection = this._billboardCollection;\n  if (!defined(result)) {\n    result = new Cartesian2();\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(billboardCollection)) {\n    throw new DeveloperError(\n      \"Billboard must be in a collection.  Was it removed?\",\n    );\n  }\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // pixel offset for screen space computation is the pixelOffset + screen space translate\n  Cartesian2.clone(this._pixelOffset, scratchPixelOffset);\n  Cartesian2.add(scratchPixelOffset, this._translate, scratchPixelOffset);\n\n  let modelMatrix = billboardCollection.modelMatrix;\n  let position = this._position;\n  if (defined(this._clampedPosition)) {\n    position = this._clampedPosition;\n    if (scene.mode !== SceneMode.SCENE3D) {\n      // position needs to be in world coordinates\n      const projection = scene.mapProjection;\n      const ellipsoid = projection.ellipsoid;\n      const cart = projection.unproject(position, scratchCartographic);\n      position = ellipsoid.cartographicToCartesian(cart, scratchCartesian3);\n      modelMatrix = Matrix4.IDENTITY;\n    }\n  }\n\n  const windowCoordinates = Billboard._computeScreenSpacePosition(\n    modelMatrix,\n    position,\n    this._eyeOffset,\n    scratchPixelOffset,\n    scene,\n    result,\n  );\n  return windowCoordinates;\n};\n\n/**\n * Gets a billboard's screen space bounding box centered around screenSpacePosition.\n * @param {Billboard} billboard The billboard to get the screen space bounding box for.\n * @param {Cartesian2} screenSpacePosition The screen space center of the label.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The screen space bounding box.\n *\n * @private\n */\nBillboard.getScreenSpaceBoundingBox = function (\n  billboard,\n  screenSpacePosition,\n  result,\n) {\n  let width = billboard.width;\n  let height = billboard.height;\n\n  const scale = billboard.scale;\n  width *= scale;\n  height *= scale;\n\n  let x = screenSpacePosition.x;\n  if (billboard.horizontalOrigin === HorizontalOrigin.RIGHT) {\n    x -= width;\n  } else if (billboard.horizontalOrigin === HorizontalOrigin.CENTER) {\n    x -= width * 0.5;\n  }\n\n  let y = screenSpacePosition.y;\n  if (\n    billboard.verticalOrigin === VerticalOrigin.BOTTOM ||\n    billboard.verticalOrigin === VerticalOrigin.BASELINE\n  ) {\n    y -= height;\n  } else if (billboard.verticalOrigin === VerticalOrigin.CENTER) {\n    y -= height * 0.5;\n  }\n\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n\n  result.x = x;\n  result.y = y;\n  result.width = width;\n  result.height = height;\n\n  return result;\n};\n\n/**\n * Determines if this billboard equals another billboard.  Billboards are equal if all their properties\n * are equal.  Billboards in different collections can be equal.\n *\n * @param {Billboard} [other] The billboard to compare for equality.\n * @returns {boolean} <code>true</code> if the billboards are equal; otherwise, <code>false</code>.\n */\nBillboard.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (defined(other) &&\n      this._id === other._id &&\n      Cartesian3.equals(this._position, other._position) &&\n      this.image === other.image &&\n      this._show === other._show &&\n      this._scale === other._scale &&\n      this._verticalOrigin === other._verticalOrigin &&\n      this._horizontalOrigin === other._horizontalOrigin &&\n      this._heightReference === other._heightReference &&\n      Color.equals(this._color, other._color) &&\n      Cartesian2.equals(this._pixelOffset, other._pixelOffset) &&\n      Cartesian2.equals(this._translate, other._translate) &&\n      Cartesian3.equals(this._eyeOffset, other._eyeOffset) &&\n      NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance) &&\n      NearFarScalar.equals(\n        this._translucencyByDistance,\n        other._translucencyByDistance,\n      ) &&\n      NearFarScalar.equals(\n        this._pixelOffsetScaleByDistance,\n        other._pixelOffsetScaleByDistance,\n      ) &&\n      DistanceDisplayCondition.equals(\n        this._distanceDisplayCondition,\n        other._distanceDisplayCondition,\n      ) &&\n      this._disableDepthTestDistance === other._disableDepthTestDistance &&\n      this._splitDirection === other._splitDirection)\n  );\n};\n\nBillboard.prototype._destroy = function () {\n  if (defined(this._customData)) {\n    this._billboardCollection._scene.globe._surface.removeTileCustomData(\n      this._customData,\n    );\n    this._customData = undefined;\n  }\n\n  if (defined(this._removeCallbackFunc)) {\n    this._removeCallbackFunc();\n    this._removeCallbackFunc = undefined;\n  }\n\n  this.image = undefined;\n  this._pickId = this._pickId && this._pickId.destroy();\n  this._billboardCollection = undefined;\n};\n\n/**\n * A function that creates an image.\n * @callback Billboard.CreateImageCallback\n * @param {string} id The identifier of the image to load.\n * @returns {HTMLImageElement|HTMLCanvasElement|Promise<HTMLImageElement|HTMLCanvasElement>} The image, or a promise that will resolve to an image.\n */\nexport default Billboard;\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArrayFacade from \"../Renderer/VertexArrayFacade.js\";\nimport BillboardCollectionFS from \"../Shaders/BillboardCollectionFS.js\";\nimport BillboardCollectionVS from \"../Shaders/BillboardCollectionVS.js\";\nimport Billboard from \"./Billboard.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport BlendOption from \"./BlendOption.js\";\nimport HeightReference, { isHeightReferenceClamp } from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SDFSettings from \"./SDFSettings.js\";\nimport TextureAtlas from \"../Renderer/TextureAtlas.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\n\nconst SHOW_INDEX = Billboard.SHOW_INDEX;\nconst POSITION_INDEX = Billboard.POSITION_INDEX;\nconst PIXEL_OFFSET_INDEX = Billboard.PIXEL_OFFSET_INDEX;\nconst EYE_OFFSET_INDEX = Billboard.EYE_OFFSET_INDEX;\nconst HORIZONTAL_ORIGIN_INDEX = Billboard.HORIZONTAL_ORIGIN_INDEX;\nconst VERTICAL_ORIGIN_INDEX = Billboard.VERTICAL_ORIGIN_INDEX;\nconst SCALE_INDEX = Billboard.SCALE_INDEX;\nconst IMAGE_INDEX_INDEX = Billboard.IMAGE_INDEX_INDEX;\nconst COLOR_INDEX = Billboard.COLOR_INDEX;\nconst ROTATION_INDEX = Billboard.ROTATION_INDEX;\nconst ALIGNED_AXIS_INDEX = Billboard.ALIGNED_AXIS_INDEX;\nconst SCALE_BY_DISTANCE_INDEX = Billboard.SCALE_BY_DISTANCE_INDEX;\nconst TRANSLUCENCY_BY_DISTANCE_INDEX = Billboard.TRANSLUCENCY_BY_DISTANCE_INDEX;\nconst PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX =\n  Billboard.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX;\nconst DISTANCE_DISPLAY_CONDITION_INDEX = Billboard.DISTANCE_DISPLAY_CONDITION;\nconst DISABLE_DEPTH_DISTANCE = Billboard.DISABLE_DEPTH_DISTANCE;\nconst TEXTURE_COORDINATE_BOUNDS = Billboard.TEXTURE_COORDINATE_BOUNDS;\nconst SDF_INDEX = Billboard.SDF_INDEX;\nconst SPLIT_DIRECTION_INDEX = Billboard.SPLIT_DIRECTION_INDEX;\nconst NUMBER_OF_PROPERTIES = Billboard.NUMBER_OF_PROPERTIES;\n\nlet attributeLocations;\n\nconst attributeLocationsBatched = {\n  positionHighAndScale: 0,\n  positionLowAndRotation: 1,\n  compressedAttribute0: 2, // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates\n  compressedAttribute1: 3, // aligned axis, translucency by distance, image width\n  compressedAttribute2: 4, // image height, color, pick color, size in meters, valid aligned axis, 13 bits free\n  eyeOffset: 5, // 4 bytes free\n  scaleByDistance: 6,\n  pixelOffsetScaleByDistance: 7,\n  compressedAttribute3: 8,\n  textureCoordinateBoundsOrLabelTranslate: 9,\n  a_batchId: 10,\n  sdf: 11,\n  splitDirection: 12,\n};\n\nconst attributeLocationsInstanced = {\n  direction: 0,\n  positionHighAndScale: 1,\n  positionLowAndRotation: 2, // texture offset in w\n  compressedAttribute0: 3,\n  compressedAttribute1: 4,\n  compressedAttribute2: 5,\n  eyeOffset: 6, // texture range in w\n  scaleByDistance: 7,\n  pixelOffsetScaleByDistance: 8,\n  compressedAttribute3: 9,\n  textureCoordinateBoundsOrLabelTranslate: 10,\n  a_batchId: 11,\n  sdf: 12,\n  splitDirection: 13,\n};\n\n/**\n * A renderable collection of billboards.  Billboards are viewport-aligned\n * images positioned in the 3D scene.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.png' width='400' height='300' /><br />\n * Example billboards\n * </div>\n * <br /><br />\n * Billboards are added and removed from the collection using {@link BillboardCollection#add}\n * and {@link BillboardCollection#remove}.  Billboards in a collection automatically share textures\n * for images with the same identifier.\n *\n * @alias BillboardCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each billboard from model to world coordinates.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {Scene} [options.scene] Must be passed in for billboards that use the height reference property or will be depth tested against the globe.\n * @param {BlendOption} [options.blendOption=BlendOption.OPAQUE_AND_TRANSLUCENT] The billboard blending option. The default\n * is used for rendering both opaque and translucent billboards. However, if either all of the billboards are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x.\n * @param {boolean} [options.show=true] Determines if the billboards in the collection will be shown.\n * @param {number} [options.coarseDepthTestDistance] The distance from the camera, beyond which, billboards are depth-tested against an approximation of the globe ellipsoid rather than against the full globe depth buffer. If unspecified, the default value is determined relative to the value of {@link Ellipsoid.default}.\n * @param {number} [options.threePointDepthTestDistance] The distance from the camera, within which, billboards with a {@link Billboard#heightReference} value of {@link HeightReference.CLAMP_TO_GROUND} or {@link HeightReference.CLAMP_TO_TERRAIN} are depth tested against three key points. This ensures that if any key point of the billboard is visible, the whole billboard will be visible. If unspecified, the default value is determined relative to the value of {@link Ellipsoid.default}.\n * @performance For best performance, prefer a few collections, each with many billboards, to\n * many collections with only a few billboards each.  Organize collections so that billboards\n * with the same update frequency are in the same collection, i.e., billboards that do not\n * change should be in one collection; billboards that change every frame should be in another\n * collection; and so on.\n *\n * @see BillboardCollection#add\n * @see BillboardCollection#remove\n * @see Billboard\n * @see LabelCollection\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=billboards|Cesium Sandcastle Billboard Demo}\n *\n * @example\n * // Create a billboard collection with two billboards\n * const billboards = scene.primitives.add(new Cesium.BillboardCollection());\n * billboards.add({\n *   position : new Cesium.Cartesian3(1.0, 2.0, 3.0),\n *   image : 'url/to/image'\n * });\n * billboards.add({\n *   position : new Cesium.Cartesian3(4.0, 5.0, 6.0),\n *   image : 'url/to/another/image'\n * });\n */\nfunction BillboardCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._scene = options.scene;\n  this._batchTable = options.batchTable;\n\n  let textureAtlas = options.textureAtlas; // Hidden option for internal use\n  if (!defined(textureAtlas)) {\n    textureAtlas = new TextureAtlas();\n  }\n  this._textureAtlas = textureAtlas;\n  this._textureAtlasGUID = textureAtlas.guid;\n  this._destroyTextureAtlas = true;\n  this._billboardTextureCache = new Map();\n\n  this._sp = undefined;\n  this._spTranslucent = undefined;\n  this._rsOpaque = undefined;\n  this._rsTranslucent = undefined;\n  this._vaf = undefined;\n\n  this._billboards = [];\n  this._billboardsToUpdate = [];\n  this._billboardsToUpdateIndex = 0;\n  this._billboardsRemoved = false;\n  this._createVertexArray = false;\n\n  this._shaderRotation = false;\n  this._compiledShaderRotation = false;\n\n  this._shaderAlignedAxis = false;\n  this._compiledShaderAlignedAxis = false;\n\n  this._shaderScaleByDistance = false;\n  this._compiledShaderScaleByDistance = false;\n\n  this._shaderTranslucencyByDistance = false;\n  this._compiledShaderTranslucencyByDistance = false;\n\n  this._shaderPixelOffsetScaleByDistance = false;\n  this._compiledShaderPixelOffsetScaleByDistance = false;\n\n  this._shaderDistanceDisplayCondition = false;\n  this._compiledShaderDistanceDisplayCondition = false;\n\n  this._shaderDisableDepthDistance = false;\n  this._compiledShaderDisableDepthDistance = false;\n\n  this._shaderClampToGround = false;\n  this._compiledShaderClampToGround = false;\n\n  this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n\n  this._maxSize = 0.0;\n  this._maxEyeOffset = 0.0;\n  this._maxScale = 1.0;\n  this._maxPixelOffset = 0.0;\n  this._allHorizontalCenter = true;\n  this._allVerticalCenter = true;\n  this._allSizedInMeters = true;\n\n  this._baseVolume = new BoundingSphere();\n  this._baseVolumeWC = new BoundingSphere();\n  this._baseVolume2D = new BoundingSphere();\n  this._boundingVolume = new BoundingSphere();\n  this._boundingVolumeDirty = false;\n\n  this._colorCommands = [];\n\n  this._allBillboardsReady = false;\n\n  /**\n   * Determines if billboards in this collection will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * The 4x4 transformation matrix that transforms each billboard in this collection from model to world coordinates.\n   * When this is the identity matrix, the billboards are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * @type {Matrix4}\n   * @default {@link Matrix4.IDENTITY}\n   *\n   *\n   * @example\n   * const center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n   * billboards.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n   * billboards.add({\n   *   image : 'url/to/image',\n   *   position : new Cesium.Cartesian3(0.0, 0.0, 0.0) // center\n   * });\n   * billboards.add({\n   *   image : 'url/to/image',\n   *   position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0) // east\n   * });\n   * billboards.add({\n   *   image : 'url/to/image',\n   *   position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0) // north\n   * });\n   * billboards.add({\n   *   image : 'url/to/image',\n   *   position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0) // up\n   * });\n   *\n   * @see Transforms.eastNorthUpToFixedFrame\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the texture atlas for this BillboardCollection as a fullscreen quad.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowTextureAtlas = options.debugShowTextureAtlas ?? false;\n\n  /**\n   * The billboard blending option. The default is used for rendering both opaque and translucent billboards.\n   * However, if either all of the billboards are completely opaque or all are completely translucent,\n   * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve\n   * performance by up to 2x.\n   * @type {BlendOption}\n   * @default BlendOption.OPAQUE_AND_TRANSLUCENT\n   */\n  this.blendOption = options.blendOption ?? BlendOption.OPAQUE_AND_TRANSLUCENT;\n  this._blendOption = undefined;\n\n  this._mode = SceneMode.SCENE3D;\n\n  // The buffer usage for each attribute is determined based on the usage of the attribute over time.\n  this._buffersUsage = [\n    BufferUsage.STATIC_DRAW, // SHOW_INDEX\n    BufferUsage.STATIC_DRAW, // POSITION_INDEX\n    BufferUsage.STATIC_DRAW, // PIXEL_OFFSET_INDEX\n    BufferUsage.STATIC_DRAW, // EYE_OFFSET_INDEX\n    BufferUsage.STATIC_DRAW, // HORIZONTAL_ORIGIN_INDEX\n    BufferUsage.STATIC_DRAW, // VERTICAL_ORIGIN_INDEX\n    BufferUsage.STATIC_DRAW, // SCALE_INDEX\n    BufferUsage.STATIC_DRAW, // IMAGE_INDEX_INDEX\n    BufferUsage.STATIC_DRAW, // COLOR_INDEX\n    BufferUsage.STATIC_DRAW, // ROTATION_INDEX\n    BufferUsage.STATIC_DRAW, // ALIGNED_AXIS_INDEX\n    BufferUsage.STATIC_DRAW, // SCALE_BY_DISTANCE_INDEX\n    BufferUsage.STATIC_DRAW, // TRANSLUCENCY_BY_DISTANCE_INDEX\n    BufferUsage.STATIC_DRAW, // PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX\n    BufferUsage.STATIC_DRAW, // DISTANCE_DISPLAY_CONDITION_INDEX\n    BufferUsage.STATIC_DRAW, // TEXTURE_COORDINATE_BOUNDS\n    BufferUsage.STATIC_DRAW, // SPLIT_DIRECTION_INDEX\n  ];\n\n  this._highlightColor = Color.clone(Color.WHITE); // Only used by Vector3DTilePoints\n  this._coarseDepthTestDistance =\n    options.coarseDepthTestDistance ?? Ellipsoid.default.minimumRadius / 10.0;\n  this._threePointDepthTestDistance =\n    options.threePointDepthTestDistance ??\n    Ellipsoid.default.minimumRadius / 1000.0;\n\n  this._uniforms = {\n    u_atlas: () => {\n      return this.textureAtlas.texture;\n    },\n    u_highlightColor: () => {\n      return this._highlightColor;\n    },\n    u_coarseDepthTestDistance: () => {\n      return this._coarseDepthTestDistance;\n    },\n    u_threePointDepthTestDistance: () => {\n      return this._threePointDepthTestDistance;\n    },\n  };\n\n  const scene = this._scene;\n  if (defined(scene) && defined(scene.terrainProviderChanged)) {\n    this._removeCallbackFunc = scene.terrainProviderChanged.addEventListener(\n      function () {\n        const billboards = this._billboards;\n        const length = billboards.length;\n        for (let i = 0; i < length; ++i) {\n          if (defined(billboards[i])) {\n            billboards[i]._updateClamping();\n          }\n        }\n      },\n      this,\n    );\n  }\n}\n\nObject.defineProperties(BillboardCollection.prototype, {\n  /**\n   * Returns the number of billboards in this collection.  This is commonly used with\n   * {@link BillboardCollection#get} to iterate over all the billboards\n   * in the collection.\n   * @memberof BillboardCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      removeBillboards(this);\n      return this._billboards.length;\n    },\n  },\n\n  /**\n   * Gets or sets the textureAtlas.\n   * @memberof BillboardCollection.prototype\n   * @type {TextureAtlas}\n   * @private\n   */\n  textureAtlas: {\n    get: function () {\n      return this._textureAtlas;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"textureAtlas\", value);\n      //>>includeEnd('debug');\n\n      if (this._textureAtlas !== value) {\n        this._textureAtlas =\n          this._destroyTextureAtlas &&\n          this._textureAtlas &&\n          this._textureAtlas.destroy();\n        this._textureAtlas = value;\n      }\n    },\n  },\n\n  /**\n   * Gets or sets a value which determines if the texture atlas is\n   * destroyed when the collection is destroyed.\n   *\n   * If the texture atlas is used by more than one collection, set this to <code>false</code>,\n   * and explicitly destroy the atlas to avoid attempting to destroy it multiple times.\n   *\n   * @memberof BillboardCollection.prototype\n   * @type {boolean}\n   * @private\n   *\n   * @example\n   * // Set destroyTextureAtlas\n   * // Destroy a billboard collection but not its texture atlas.\n   *\n   * const atlas = new TextureAtlas();\n   * billboards.textureAtlas = atlas;\n   * billboards.destroyTextureAtlas = false;\n   *\n   * billboards = billboards.destroy();\n   * console.log(atlas.isDestroyed()); // False\n   */\n  destroyTextureAtlas: {\n    get: function () {\n      return this._destroyTextureAtlas;\n    },\n    set: function (value) {\n      this._destroyTextureAtlas = value;\n    },\n  },\n\n  /**\n   * Returns the size in bytes of the WebGL texture resources.\n   * @private\n   * @memberof BillboardCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  sizeInBytes: {\n    get: function () {\n      return this._textureAtlas.sizeInBytes;\n    },\n  },\n\n  /**\n   * True when all billboards currently in the collection are ready for rendering.\n   * @private\n   * @memberof BillboardCollection.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._allBillboardsReady;\n    },\n  },\n\n  /**\n   * Cache of loaded billboard images.\n   * @private\n   * @memberof BillboardCollection.prototype\n   * @type {Map<string, BillboardTexture>}\n   * @readonly\n   */\n  billboardTextureCache: {\n    get: function () {\n      return this._billboardTextureCache;\n    },\n  },\n\n  /**\n   * The distance from the camera, beyond which, billboards are depth-tested against an approximation of\n   * the globe ellipsoid rather than against the full globe depth buffer. When set to <code>0</code>, the\n   * approximate depth test is always applied. When set to <code>Number.POSITIVE_INFINITY</code>, the\n   * approximate depth test is never applied.\n   * <br/><br/>\n   * This setting only applies when a billboard's {@link Billboard#disableDepthTestDistance} value would\n   * otherwise allow depth testing—i.e., distance from the camera to the billboard is less than a\n   * billboard's {@link Billboard#disableDepthTestDistance} value.\n   * @memberof BillboardCollection.prototype\n   * @type {number}\n   */\n  coarseDepthTestDistance: {\n    get: function () {\n      return this._coarseDepthTestDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"coarseDepthTestDistance\", value);\n      //>>includeEnd('debug');\n      this._coarseDepthTestDistance = value;\n    },\n  },\n\n  /**\n   * The distance from the camera, within which, billboards with a {@link Billboard#heightReference} value\n   * of {@link HeightReference.CLAMP_TO_GROUND} or {@link HeightReference.CLAMP_TO_TERRAIN} are depth tested\n   * against three key points. This ensures that if any key point of the billboard is visible, the whole\n   * billboard will be visible. When set to <code>0</code>, this feature is disabled and portions of a\n   * billboards behind terrain be clipped.\n   * <br/><br/>\n   * This setting only applies when a billboard's {@link Billboard#disableDepthTestDistance} value would\n   * otherwise allow depth testing—i.e., distance from the camera to the billboard is less than a\n   * billboard's {@link Billboard#disableDepthTestDistance} value.\n   * @see {@link https://cesium.com/blog/2018/07/30/billboards-on-terrain-improvements/|Billboards and Labels on Terrain Improvements}\n   * @memberof BillboardCollection.prototype\n   * @type {number}\n   */\n  threePointDepthTestDistance: {\n    get: function () {\n      return this._threePointDepthTestDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"threePointDepthTestDistance\", value);\n      //>>includeEnd('debug');\n      this._threePointDepthTestDistance = value;\n    },\n  },\n});\n\nfunction destroyBillboards(billboards) {\n  const length = billboards.length;\n  for (let i = 0; i < length; ++i) {\n    if (billboards[i]) {\n      billboards[i]._destroy();\n    }\n  }\n}\n\n/**\n * Creates and adds a billboard with the specified initial properties to the collection.\n * The added billboard is returned so it can be modified or removed from the collection later.\n *\n * @param {Billboard.ConstructorOptions}[options] A template describing the billboard's properties as shown in Example 1.\n * @returns {Billboard} The billboard that was added to the collection.\n *\n * @performance Calling <code>add</code> is expected constant time.  However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.  For\n * best performance, add as many billboards as possible before calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Example 1:  Add a billboard, specifying all the default values.\n * const b = billboards.add({\n *   show : true,\n *   position : Cesium.Cartesian3.ZERO,\n *   pixelOffset : Cesium.Cartesian2.ZERO,\n *   eyeOffset : Cesium.Cartesian3.ZERO,\n *   heightReference : Cesium.HeightReference.NONE,\n *   horizontalOrigin : Cesium.HorizontalOrigin.CENTER,\n *   verticalOrigin : Cesium.VerticalOrigin.CENTER,\n *   scale : 1.0,\n *   image : 'url/to/image',\n *   imageSubRegion : undefined,\n *   color : Cesium.Color.WHITE,\n *   id : undefined,\n *   rotation : 0.0,\n *   alignedAxis : Cesium.Cartesian3.ZERO,\n *   width : undefined,\n *   height : undefined,\n *   scaleByDistance : undefined,\n *   translucencyByDistance : undefined,\n *   pixelOffsetScaleByDistance : undefined,\n *   sizeInMeters : false,\n *   distanceDisplayCondition : undefined\n * });\n *\n * @example\n * // Example 2:  Specify only the billboard's cartographic position.\n * const b = billboards.add({\n *   position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height)\n * });\n *\n * @see BillboardCollection#remove\n * @see BillboardCollection#removeAll\n */\nBillboardCollection.prototype.add = function (options) {\n  const billboard = new Billboard(options, this);\n  billboard._index = this._billboards.length;\n\n  this._billboards.push(billboard);\n  this._createVertexArray = true;\n\n  return billboard;\n};\n\n/**\n * Removes a billboard from the collection.\n *\n * @param {Billboard} billboard The billboard to remove.\n * @returns {boolean} <code>true</code> if the billboard was removed; <code>false</code> if the billboard was not found in the collection.\n *\n * @performance Calling <code>remove</code> is expected constant time.  However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.  For\n * best performance, remove as many billboards as possible before calling <code>update</code>.\n * If you intend to temporarily hide a billboard, it is usually more efficient to call\n * {@link Billboard#show} instead of removing and re-adding the billboard.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * const b = billboards.add(...);\n * billboards.remove(b);  // Returns true\n *\n * @see BillboardCollection#add\n * @see BillboardCollection#removeAll\n * @see Billboard#show\n */\nBillboardCollection.prototype.remove = function (billboard) {\n  if (this.contains(billboard)) {\n    this._billboards[billboard._index] = undefined; // Removed later\n    this._billboardsRemoved = true;\n    this._createVertexArray = true;\n    billboard._destroy();\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all billboards from the collection.\n *\n * @performance <code>O(n)</code>.  It is more efficient to remove all the billboards\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * billboards.add(...);\n * billboards.add(...);\n * billboards.removeAll();\n *\n * @see BillboardCollection#add\n * @see BillboardCollection#remove\n */\nBillboardCollection.prototype.removeAll = function () {\n  destroyBillboards(this._billboards);\n  this._billboards = [];\n  this._billboardsToUpdate = [];\n  this._billboardsToUpdateIndex = 0;\n  this._billboardsRemoved = false;\n\n  this._createVertexArray = true;\n};\n\nfunction removeBillboards(billboardCollection) {\n  if (billboardCollection._billboardsRemoved) {\n    billboardCollection._billboardsRemoved = false;\n\n    const newBillboards = [];\n    const billboards = billboardCollection._billboards;\n    const length = billboards.length;\n    for (let i = 0, j = 0; i < length; ++i) {\n      const billboard = billboards[i];\n      if (defined(billboard)) {\n        billboard._index = j++;\n        newBillboards.push(billboard);\n      }\n    }\n\n    billboardCollection._billboards = newBillboards;\n  }\n}\n\nBillboardCollection.prototype._updateBillboard = function (\n  billboard,\n  propertyChanged,\n) {\n  if (!billboard._dirty) {\n    this._billboardsToUpdate[this._billboardsToUpdateIndex++] = billboard;\n  }\n\n  ++this._propertiesChanged[propertyChanged];\n};\n\n/**\n * Check whether this collection contains a given billboard.\n *\n * @param {Billboard} [billboard] The billboard to check for.\n * @returns {boolean} true if this collection contains the billboard, false otherwise.\n *\n * @see BillboardCollection#get\n */\nBillboardCollection.prototype.contains = function (billboard) {\n  return defined(billboard) && billboard._billboardCollection === this;\n};\n\n/**\n * Returns the billboard in the collection at the specified index.  Indices are zero-based\n * and increase as billboards are added.  Removing a billboard shifts all billboards after\n * it to the left, changing their indices.  This function is commonly used with\n * {@link BillboardCollection#length} to iterate over all the billboards\n * in the collection.\n *\n * @param {number} index The zero-based index of the billboard.\n * @returns {Billboard} The billboard at the specified index.\n *\n * @performance Expected constant time.  If billboards were removed from the collection and\n * {@link BillboardCollection#update} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every billboard in the collection\n * const len = billboards.length;\n * for (let i = 0; i < len; ++i) {\n *   const b = billboards.get(i);\n *   b.show = !b.show;\n * }\n *\n * @see BillboardCollection#length\n */\nBillboardCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  removeBillboards(this);\n  return this._billboards[index];\n};\n\nlet getIndexBuffer;\n\nfunction getIndexBufferBatched(context) {\n  const sixteenK = 16 * 1024;\n\n  let indexBuffer = context.cache.billboardCollection_indexBufferBatched;\n  if (defined(indexBuffer)) {\n    return indexBuffer;\n  }\n\n  // Subtract 6 because the last index is reserverd for primitive restart.\n  // https://www.khronos.org/registry/webgl/specs/latest/2.0/#5.18\n  const length = sixteenK * 6 - 6;\n  const indices = new Uint16Array(length);\n  for (let i = 0, j = 0; i < length; i += 6, j += 4) {\n    indices[i] = j;\n    indices[i + 1] = j + 1;\n    indices[i + 2] = j + 2;\n\n    indices[i + 3] = j + 0;\n    indices[i + 4] = j + 2;\n    indices[i + 5] = j + 3;\n  }\n\n  // PERFORMANCE_IDEA:  Should we reference count billboard collections, and eventually delete this?\n  // Is this too much memory to allocate up front?  Should we dynamically grow it?\n  indexBuffer = Buffer.createIndexBuffer({\n    context: context,\n    typedArray: indices,\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n  });\n  indexBuffer.vertexArrayDestroyable = false;\n  context.cache.billboardCollection_indexBufferBatched = indexBuffer;\n  return indexBuffer;\n}\n\nfunction getIndexBufferInstanced(context) {\n  let indexBuffer = context.cache.billboardCollection_indexBufferInstanced;\n  if (defined(indexBuffer)) {\n    return indexBuffer;\n  }\n\n  indexBuffer = Buffer.createIndexBuffer({\n    context: context,\n    typedArray: new Uint16Array([0, 1, 2, 0, 2, 3]),\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n  });\n\n  indexBuffer.vertexArrayDestroyable = false;\n  context.cache.billboardCollection_indexBufferInstanced = indexBuffer;\n  return indexBuffer;\n}\n\nfunction getVertexBufferInstanced(context) {\n  let vertexBuffer = context.cache.billboardCollection_vertexBufferInstanced;\n  if (defined(vertexBuffer)) {\n    return vertexBuffer;\n  }\n\n  vertexBuffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: new Float32Array([0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0]),\n    usage: BufferUsage.STATIC_DRAW,\n  });\n\n  vertexBuffer.vertexArrayDestroyable = false;\n  context.cache.billboardCollection_vertexBufferInstanced = vertexBuffer;\n  return vertexBuffer;\n}\n\nBillboardCollection.prototype.computeNewBuffersUsage = function () {\n  const buffersUsage = this._buffersUsage;\n  let usageChanged = false;\n\n  const properties = this._propertiesChanged;\n  for (let k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n    const newUsage =\n      properties[k] === 0 ? BufferUsage.STATIC_DRAW : BufferUsage.STREAM_DRAW;\n    usageChanged = usageChanged || buffersUsage[k] !== newUsage;\n    buffersUsage[k] = newUsage;\n  }\n\n  return usageChanged;\n};\n\nfunction createVAF(\n  context,\n  numberOfBillboards,\n  buffersUsage,\n  instanced,\n  batchTable,\n  sdf,\n) {\n  const attributes = [\n    {\n      index: attributeLocations.positionHighAndScale,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[POSITION_INDEX],\n    },\n    {\n      index: attributeLocations.positionLowAndRotation,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[POSITION_INDEX],\n    },\n    {\n      index: attributeLocations.compressedAttribute0,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[PIXEL_OFFSET_INDEX],\n    },\n    {\n      index: attributeLocations.compressedAttribute1,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[TRANSLUCENCY_BY_DISTANCE_INDEX],\n    },\n    {\n      index: attributeLocations.compressedAttribute2,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[COLOR_INDEX],\n    },\n    {\n      index: attributeLocations.eyeOffset,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[EYE_OFFSET_INDEX],\n    },\n    {\n      index: attributeLocations.scaleByDistance,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[SCALE_BY_DISTANCE_INDEX],\n    },\n    {\n      index: attributeLocations.pixelOffsetScaleByDistance,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX],\n    },\n    {\n      index: attributeLocations.compressedAttribute3,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[DISTANCE_DISPLAY_CONDITION_INDEX],\n    },\n    {\n      index: attributeLocations.textureCoordinateBoundsOrLabelTranslate,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[TEXTURE_COORDINATE_BOUNDS],\n    },\n    {\n      index: attributeLocations.splitDirection,\n      componentsPerAttribute: 1,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[SPLIT_DIRECTION_INDEX],\n    },\n  ];\n\n  // Instancing requires one non-instanced attribute.\n  if (instanced) {\n    attributes.push({\n      index: attributeLocations.direction,\n      componentsPerAttribute: 2,\n      componentDatatype: ComponentDatatype.FLOAT,\n      vertexBuffer: getVertexBufferInstanced(context),\n    });\n  }\n\n  if (defined(batchTable)) {\n    attributes.push({\n      index: attributeLocations.a_batchId,\n      componentsPerAttribute: 1,\n      componentDatatype: ComponentDatatype.FLOAT,\n      bufferUsage: BufferUsage.STATIC_DRAW,\n    });\n  }\n\n  if (sdf) {\n    attributes.push({\n      index: attributeLocations.sdf,\n      componentsPerAttribute: 2,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: buffersUsage[SDF_INDEX],\n    });\n  }\n\n  // When instancing is enabled, only one vertex is needed for each billboard.\n  const sizeInVertices = instanced\n    ? numberOfBillboards\n    : 4 * numberOfBillboards;\n  return new VertexArrayFacade(context, attributes, sizeInVertices, instanced);\n}\n\n///////////////////////////////////////////////////////////////////////////\n\n// Four vertices per billboard.  Each has the same position, etc., but a different screen-space direction vector.\n\n// PERFORMANCE_IDEA:  Save memory if a property is the same for all billboards, use a latched attribute state,\n// instead of storing it in a vertex buffer.\n\nconst writePositionScratch = new EncodedCartesian3();\n\nfunction writePositionScaleAndRotation(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const positionHighWriter =\n    vafWriters[attributeLocations.positionHighAndScale];\n  const positionLowWriter =\n    vafWriters[attributeLocations.positionLowAndRotation];\n  const position = billboard._getActualPosition();\n\n  if (billboardCollection._mode === SceneMode.SCENE3D) {\n    BoundingSphere.expand(\n      billboardCollection._baseVolume,\n      position,\n      billboardCollection._baseVolume,\n    );\n    billboardCollection._boundingVolumeDirty = true;\n  }\n\n  EncodedCartesian3.fromCartesian(position, writePositionScratch);\n  const scale = billboard.scale;\n  const rotation = billboard.rotation;\n\n  if (rotation !== 0.0) {\n    billboardCollection._shaderRotation = true;\n  }\n\n  billboardCollection._maxScale = Math.max(\n    billboardCollection._maxScale,\n    scale,\n  );\n\n  const high = writePositionScratch.high;\n  const low = writePositionScratch.low;\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    positionHighWriter(i, high.x, high.y, high.z, scale);\n    positionLowWriter(i, low.x, low.y, low.z, rotation);\n  } else {\n    i = billboard._index * 4;\n    positionHighWriter(i + 0, high.x, high.y, high.z, scale);\n    positionHighWriter(i + 1, high.x, high.y, high.z, scale);\n    positionHighWriter(i + 2, high.x, high.y, high.z, scale);\n    positionHighWriter(i + 3, high.x, high.y, high.z, scale);\n\n    positionLowWriter(i + 0, low.x, low.y, low.z, rotation);\n    positionLowWriter(i + 1, low.x, low.y, low.z, rotation);\n    positionLowWriter(i + 2, low.x, low.y, low.z, rotation);\n    positionLowWriter(i + 3, low.x, low.y, low.z, rotation);\n  }\n}\n\nconst scratchCartesian2 = new Cartesian2();\n\nconst UPPER_BOUND = 32768.0; // 2^15\n\nconst LEFT_SHIFT16 = 65536.0; // 2^16\nconst LEFT_SHIFT12 = 4096.0; // 2^12\nconst LEFT_SHIFT8 = 256.0; // 2^8\nconst LEFT_SHIFT7 = 128.0;\nconst LEFT_SHIFT5 = 32.0;\nconst LEFT_SHIFT3 = 8.0;\nconst LEFT_SHIFT2 = 4.0;\n\nconst RIGHT_SHIFT8 = 1.0 / 256.0;\n\nconst LOWER_LEFT = 0.0;\nconst LOWER_RIGHT = 2.0;\nconst UPPER_RIGHT = 3.0;\nconst UPPER_LEFT = 1.0;\n\nconst scratchBoundingRectangle = new BoundingRectangle();\n\nfunction writeCompressedAttrib0(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const writer = vafWriters[attributeLocations.compressedAttribute0];\n  const pixelOffset = billboard.pixelOffset;\n  const pixelOffsetX = pixelOffset.x;\n  const pixelOffsetY = pixelOffset.y;\n\n  const translate = billboard._translate;\n  const translateX = translate.x;\n  const translateY = translate.y;\n\n  billboardCollection._maxPixelOffset = Math.max(\n    billboardCollection._maxPixelOffset,\n    Math.abs(pixelOffsetX + translateX),\n    Math.abs(-pixelOffsetY + translateY),\n  );\n\n  const horizontalOrigin = billboard.horizontalOrigin;\n  let verticalOrigin = billboard._verticalOrigin;\n  let show = billboard.show && billboard.clusterShow;\n\n  // If the color alpha is zero, do not show this billboard.  This lets us avoid providing\n  // color during the pick pass and also eliminates a discard in the fragment shader.\n  if (billboard.color.alpha === 0.0) {\n    show = false;\n  }\n\n  // Raw billboards don't distinguish between BASELINE and BOTTOM, only LabelCollection does that.\n  if (verticalOrigin === VerticalOrigin.BASELINE) {\n    verticalOrigin = VerticalOrigin.BOTTOM;\n  }\n\n  billboardCollection._allHorizontalCenter =\n    billboardCollection._allHorizontalCenter &&\n    horizontalOrigin === HorizontalOrigin.CENTER;\n  billboardCollection._allVerticalCenter =\n    billboardCollection._allVerticalCenter &&\n    verticalOrigin === VerticalOrigin.CENTER;\n\n  let bottomLeftX = 0;\n  let bottomLeftY = 0;\n  let width = 0;\n  let height = 0;\n  if (billboard.ready) {\n    const imageRectangle = billboard.computeTextureCoordinates(\n      scratchBoundingRectangle,\n    );\n\n    bottomLeftX = imageRectangle.x;\n    bottomLeftY = imageRectangle.y;\n    width = imageRectangle.width;\n    height = imageRectangle.height;\n  }\n  const topRightX = bottomLeftX + width;\n  const topRightY = bottomLeftY + height;\n\n  let compressed0 =\n    Math.floor(\n      CesiumMath.clamp(pixelOffsetX, -UPPER_BOUND, UPPER_BOUND) + UPPER_BOUND,\n    ) * LEFT_SHIFT7;\n  compressed0 += (horizontalOrigin + 1.0) * LEFT_SHIFT5;\n  compressed0 += (verticalOrigin + 1.0) * LEFT_SHIFT3;\n  compressed0 += (show ? 1.0 : 0.0) * LEFT_SHIFT2;\n\n  let compressed1 =\n    Math.floor(\n      CesiumMath.clamp(pixelOffsetY, -UPPER_BOUND, UPPER_BOUND) + UPPER_BOUND,\n    ) * LEFT_SHIFT8;\n\n  // We scale `translate` by LEFT_SHIFT2 before encoding it (and unscale after decoding in the shader)\n  // to preserve some subpixel precision (1 / 4 = 0.25 pixels). This mitigates rounding errors in aligning glyphs.\n  // The cost of increasing this scaling factor is that it decreases the range of representable `translate` values\n  // by the same scaling factor. Value must be kept in sync with the shader.\n  let compressed2 =\n    Math.floor(\n      CesiumMath.clamp(translateX * LEFT_SHIFT2, -UPPER_BOUND, UPPER_BOUND) +\n        UPPER_BOUND,\n    ) * LEFT_SHIFT8;\n\n  const tempTanslateY =\n    (CesiumMath.clamp(translateY * LEFT_SHIFT2, -UPPER_BOUND, UPPER_BOUND) +\n      UPPER_BOUND) *\n    RIGHT_SHIFT8;\n  const upperTranslateY = Math.floor(tempTanslateY);\n  const lowerTranslateY = Math.floor(\n    (tempTanslateY - upperTranslateY) * LEFT_SHIFT8,\n  );\n\n  compressed1 += upperTranslateY;\n  compressed2 += lowerTranslateY;\n\n  scratchCartesian2.x = bottomLeftX;\n  scratchCartesian2.y = bottomLeftY;\n  const compressedTexCoordsLL =\n    AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n  scratchCartesian2.x = topRightX;\n  const compressedTexCoordsLR =\n    AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n  scratchCartesian2.y = topRightY;\n  const compressedTexCoordsUR =\n    AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n  scratchCartesian2.x = bottomLeftX;\n  const compressedTexCoordsUL =\n    AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, compressed0, compressed1, compressed2, compressedTexCoordsLL);\n  } else {\n    i = billboard._index * 4;\n    writer(\n      i + 0,\n      compressed0 + LOWER_LEFT,\n      compressed1,\n      compressed2,\n      compressedTexCoordsLL,\n    );\n    writer(\n      i + 1,\n      compressed0 + LOWER_RIGHT,\n      compressed1,\n      compressed2,\n      compressedTexCoordsLR,\n    );\n    writer(\n      i + 2,\n      compressed0 + UPPER_RIGHT,\n      compressed1,\n      compressed2,\n      compressedTexCoordsUR,\n    );\n    writer(\n      i + 3,\n      compressed0 + UPPER_LEFT,\n      compressed1,\n      compressed2,\n      compressedTexCoordsUL,\n    );\n  }\n}\n\nfunction writeCompressedAttrib1(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const writer = vafWriters[attributeLocations.compressedAttribute1];\n  const alignedAxis = billboard.alignedAxis;\n  if (!Cartesian3.equals(alignedAxis, Cartesian3.ZERO)) {\n    billboardCollection._shaderAlignedAxis = true;\n  }\n\n  let near = 0.0;\n  let nearValue = 1.0;\n  let far = 1.0;\n  let farValue = 1.0;\n\n  const translucency = billboard.translucencyByDistance;\n  if (defined(translucency)) {\n    near = translucency.near;\n    nearValue = translucency.nearValue;\n    far = translucency.far;\n    farValue = translucency.farValue;\n\n    if (nearValue !== 1.0 || farValue !== 1.0) {\n      // translucency by distance calculation in shader need not be enabled\n      // until a billboard with near and far !== 1.0 is found\n      billboardCollection._shaderTranslucencyByDistance = true;\n    }\n  }\n\n  const imageWidth = Math.round(billboard.width ?? 0);\n  billboardCollection._maxSize = Math.max(\n    billboardCollection._maxSize,\n    imageWidth,\n  );\n\n  let compressed0 = CesiumMath.clamp(imageWidth, 0.0, LEFT_SHIFT16);\n  let compressed1 = 0.0;\n\n  if (\n    Math.abs(Cartesian3.magnitudeSquared(alignedAxis) - 1.0) <\n    CesiumMath.EPSILON6\n  ) {\n    compressed1 = AttributeCompression.octEncodeFloat(alignedAxis);\n  }\n\n  nearValue = CesiumMath.clamp(nearValue, 0.0, 1.0);\n  nearValue = nearValue === 1.0 ? 255.0 : (nearValue * 255.0) | 0;\n  compressed0 = compressed0 * LEFT_SHIFT8 + nearValue;\n\n  farValue = CesiumMath.clamp(farValue, 0.0, 1.0);\n  farValue = farValue === 1.0 ? 255.0 : (farValue * 255.0) | 0;\n  compressed1 = compressed1 * LEFT_SHIFT8 + farValue;\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, compressed0, compressed1, near, far);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, compressed0, compressed1, near, far);\n    writer(i + 1, compressed0, compressed1, near, far);\n    writer(i + 2, compressed0, compressed1, near, far);\n    writer(i + 3, compressed0, compressed1, near, far);\n  }\n}\n\nfunction writeCompressedAttrib2(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const writer = vafWriters[attributeLocations.compressedAttribute2];\n  const color = billboard.color;\n  const pickColor = !defined(billboardCollection._batchTable)\n    ? billboard.getPickId(frameState.context).color\n    : Color.WHITE;\n  const sizeInMeters = billboard.sizeInMeters ? 1.0 : 0.0;\n  const validAlignedAxis =\n    Math.abs(Cartesian3.magnitudeSquared(billboard.alignedAxis) - 1.0) <\n    CesiumMath.EPSILON6\n      ? 1.0\n      : 0.0;\n\n  billboardCollection._allSizedInMeters =\n    billboardCollection._allSizedInMeters && sizeInMeters === 1.0;\n\n  const imageHeight = billboard.height ?? 0;\n  billboardCollection._maxSize = Math.max(\n    billboardCollection._maxSize,\n    imageHeight,\n  );\n  let labelHorizontalOrigin = billboard._labelHorizontalOrigin ?? -2;\n  labelHorizontalOrigin += 2;\n\n  const compressed0 = AttributeCompression.encodeRGB8(color);\n  const compressed1 = AttributeCompression.encodeRGB8(pickColor);\n  const compressed2 =\n    Color.floatToByte(color.alpha) * LEFT_SHIFT16 +\n    Color.floatToByte(pickColor.alpha) * LEFT_SHIFT8 +\n    (sizeInMeters * 2.0 + validAlignedAxis);\n  const compressed3 = imageHeight * LEFT_SHIFT2 + labelHorizontalOrigin;\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, compressed0, compressed1, compressed2, compressed3);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, compressed0, compressed1, compressed2, compressed3);\n    writer(i + 1, compressed0, compressed1, compressed2, compressed3);\n    writer(i + 2, compressed0, compressed1, compressed2, compressed3);\n    writer(i + 3, compressed0, compressed1, compressed2, compressed3);\n  }\n}\n\nfunction writeEyeOffset(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const writer = vafWriters[attributeLocations.eyeOffset];\n  const eyeOffset = billboard.eyeOffset;\n\n  // For billboards that are clamped to ground, move it slightly closer to the camera\n  let eyeOffsetZ = eyeOffset.z;\n  if (billboard._heightReference !== HeightReference.NONE) {\n    eyeOffsetZ *= 1.005;\n  }\n  billboardCollection._maxEyeOffset = Math.max(\n    billboardCollection._maxEyeOffset,\n    Math.abs(eyeOffset.x),\n    Math.abs(eyeOffset.y),\n    Math.abs(eyeOffsetZ),\n  );\n\n  if (billboardCollection._instanced) {\n    scratchCartesian2.x = 0;\n    scratchCartesian2.y = 0;\n\n    if (billboard.ready) {\n      const imageRectangle = billboard.computeTextureCoordinates(\n        scratchBoundingRectangle,\n      );\n\n      scratchCartesian2.x = imageRectangle.width;\n      scratchCartesian2.y = imageRectangle.height;\n    }\n\n    const compressedTexCoordsRange =\n      AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n\n    i = billboard._index;\n    writer(i, eyeOffset.x, eyeOffset.y, eyeOffsetZ, compressedTexCoordsRange);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n    writer(i + 1, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n    writer(i + 2, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n    writer(i + 3, eyeOffset.x, eyeOffset.y, eyeOffsetZ, 0.0);\n  }\n}\n\nfunction writeScaleByDistance(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const writer = vafWriters[attributeLocations.scaleByDistance];\n  let near = 0.0;\n  let nearValue = 1.0;\n  let far = 1.0;\n  let farValue = 1.0;\n\n  const scale = billboard.scaleByDistance;\n  if (defined(scale)) {\n    near = scale.near;\n    nearValue = scale.nearValue;\n    far = scale.far;\n    farValue = scale.farValue;\n\n    if (nearValue !== 1.0 || farValue !== 1.0) {\n      // scale by distance calculation in shader need not be enabled\n      // until a billboard with near and far !== 1.0 is found\n      billboardCollection._shaderScaleByDistance = true;\n    }\n  }\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, near, nearValue, far, farValue);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, near, nearValue, far, farValue);\n    writer(i + 1, near, nearValue, far, farValue);\n    writer(i + 2, near, nearValue, far, farValue);\n    writer(i + 3, near, nearValue, far, farValue);\n  }\n}\n\nfunction writePixelOffsetScaleByDistance(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const writer = vafWriters[attributeLocations.pixelOffsetScaleByDistance];\n  let near = 0.0;\n  let nearValue = 1.0;\n  let far = 1.0;\n  let farValue = 1.0;\n\n  const pixelOffsetScale = billboard.pixelOffsetScaleByDistance;\n  if (defined(pixelOffsetScale)) {\n    near = pixelOffsetScale.near;\n    nearValue = pixelOffsetScale.nearValue;\n    far = pixelOffsetScale.far;\n    farValue = pixelOffsetScale.farValue;\n\n    if (nearValue !== 1.0 || farValue !== 1.0) {\n      // pixelOffsetScale by distance calculation in shader need not be enabled\n      // until a billboard with near and far !== 1.0 is found\n      billboardCollection._shaderPixelOffsetScaleByDistance = true;\n    }\n  }\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, near, nearValue, far, farValue);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, near, nearValue, far, farValue);\n    writer(i + 1, near, nearValue, far, farValue);\n    writer(i + 2, near, nearValue, far, farValue);\n    writer(i + 3, near, nearValue, far, farValue);\n  }\n}\n\nfunction writeCompressedAttribute3(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  let i;\n  const writer = vafWriters[attributeLocations.compressedAttribute3];\n  let near = 0.0;\n  let far = Number.MAX_VALUE;\n\n  const distanceDisplayCondition = billboard.distanceDisplayCondition;\n  if (defined(distanceDisplayCondition)) {\n    near = distanceDisplayCondition.near;\n    far = distanceDisplayCondition.far;\n\n    near *= near;\n    far *= far;\n\n    billboardCollection._shaderDistanceDisplayCondition = true;\n  }\n\n  let disableDepthTestDistance = billboard.disableDepthTestDistance;\n  const clampToGround =\n    isHeightReferenceClamp(billboard.heightReference) &&\n    frameState.context.depthTexture;\n\n  disableDepthTestDistance *= disableDepthTestDistance;\n  if (clampToGround || disableDepthTestDistance > 0.0) {\n    billboardCollection._shaderDisableDepthDistance = true;\n    if (disableDepthTestDistance === Number.POSITIVE_INFINITY) {\n      disableDepthTestDistance = -1.0;\n    }\n  }\n\n  let imageHeight;\n  let imageWidth;\n\n  if (!defined(billboard._labelDimensions)) {\n    imageWidth = billboard.width ?? 0;\n    imageHeight = billboard.height ?? 0;\n  } else {\n    imageWidth = billboard._labelDimensions.x;\n    imageHeight = billboard._labelDimensions.y;\n  }\n\n  const w = Math.floor(CesiumMath.clamp(imageWidth, 0.0, LEFT_SHIFT12));\n  const h = Math.floor(CesiumMath.clamp(imageHeight, 0.0, LEFT_SHIFT12));\n  const dimensions = w * LEFT_SHIFT12 + h;\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, near, far, disableDepthTestDistance, dimensions);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, near, far, disableDepthTestDistance, dimensions);\n    writer(i + 1, near, far, disableDepthTestDistance, dimensions);\n    writer(i + 2, near, far, disableDepthTestDistance, dimensions);\n    writer(i + 3, near, far, disableDepthTestDistance, dimensions);\n  }\n}\n\nfunction writeTextureCoordinateBoundsOrLabelTranslate(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  if (isHeightReferenceClamp(billboard.heightReference)) {\n    const scene = billboardCollection._scene;\n    const context = frameState.context;\n    const globeTranslucent = frameState.globeTranslucencyState.translucent;\n    const depthTestAgainstTerrain =\n      defined(scene.globe) && scene.globe.depthTestAgainstTerrain;\n\n    // Only do manual depth test if the globe is opaque and writes depth\n    billboardCollection._shaderClampToGround =\n      context.depthTexture && !globeTranslucent && depthTestAgainstTerrain;\n  }\n  let i;\n  const writer =\n    vafWriters[attributeLocations.textureCoordinateBoundsOrLabelTranslate];\n\n  if (ContextLimits.maximumVertexTextureImageUnits > 0) {\n    //write _labelTranslate, used by depth testing in the vertex shader\n    let translateX = 0;\n    let translateY = 0;\n    if (defined(billboard._labelTranslate)) {\n      translateX = billboard._labelTranslate.x;\n      translateY = billboard._labelTranslate.y;\n    }\n    if (billboardCollection._instanced) {\n      i = billboard._index;\n      writer(i, translateX, translateY, 0.0, 0.0);\n    } else {\n      i = billboard._index * 4;\n      writer(i + 0, translateX, translateY, 0.0, 0.0);\n      writer(i + 1, translateX, translateY, 0.0, 0.0);\n      writer(i + 2, translateX, translateY, 0.0, 0.0);\n      writer(i + 3, translateX, translateY, 0.0, 0.0);\n    }\n    return;\n  }\n\n  // Write texture coordinate bounds, used by depth testing in fragment shader\n  let minX = 0;\n  let minY = 0;\n  let width = 0;\n  let height = 0;\n  if (billboard.ready) {\n    const imageRectangle = billboard.computeTextureCoordinates(\n      scratchBoundingRectangle,\n    );\n\n    minX = imageRectangle.x;\n    minY = imageRectangle.y;\n    width = imageRectangle.width;\n    height = imageRectangle.height;\n  }\n  const maxX = minX + width;\n  const maxY = minY + height;\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, minX, minY, maxX, maxY);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, minX, minY, maxX, maxY);\n    writer(i + 1, minX, minY, maxX, maxY);\n    writer(i + 2, minX, minY, maxX, maxY);\n    writer(i + 3, minX, minY, maxX, maxY);\n  }\n}\n\nfunction writeBatchId(billboardCollection, frameState, vafWriters, billboard) {\n  if (!defined(billboardCollection._batchTable)) {\n    return;\n  }\n\n  const writer = vafWriters[attributeLocations.a_batchId];\n  const id = billboard._batchIndex;\n\n  let i;\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, id);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, id);\n    writer(i + 1, id);\n    writer(i + 2, id);\n    writer(i + 3, id);\n  }\n}\n\nfunction writeSDF(billboardCollection, frameState, vafWriters, billboard) {\n  if (!billboardCollection._sdf) {\n    return;\n  }\n\n  let i;\n  const writer = vafWriters[attributeLocations.sdf];\n\n  const outlineColor = billboard.outlineColor;\n  const outlineWidth = billboard.outlineWidth;\n\n  const compressed0 = AttributeCompression.encodeRGB8(outlineColor);\n\n  // Compute the relative outline distance\n  const outlineDistance = outlineWidth / SDFSettings.RADIUS;\n  const compressed1 =\n    Color.floatToByte(outlineColor.alpha) * LEFT_SHIFT16 +\n    Color.floatToByte(outlineDistance) * LEFT_SHIFT8;\n\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, compressed0, compressed1);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, compressed0 + LOWER_LEFT, compressed1);\n    writer(i + 1, compressed0 + LOWER_RIGHT, compressed1);\n    writer(i + 2, compressed0 + UPPER_RIGHT, compressed1);\n    writer(i + 3, compressed0 + UPPER_LEFT, compressed1);\n  }\n}\n\nfunction writeSplitDirection(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  const writer = vafWriters[attributeLocations.splitDirection];\n  let direction = 0.0;\n\n  const split = billboard.splitDirection;\n  if (defined(split)) {\n    direction = split;\n  }\n\n  let i;\n  if (billboardCollection._instanced) {\n    i = billboard._index;\n    writer(i, direction);\n  } else {\n    i = billboard._index * 4;\n    writer(i + 0, direction);\n    writer(i + 1, direction);\n    writer(i + 2, direction);\n    writer(i + 3, direction);\n  }\n}\n\nfunction writeBillboard(\n  billboardCollection,\n  frameState,\n  vafWriters,\n  billboard,\n) {\n  writePositionScaleAndRotation(\n    billboardCollection,\n    frameState,\n    vafWriters,\n    billboard,\n  );\n  writeCompressedAttrib0(\n    billboardCollection,\n    frameState,\n    vafWriters,\n    billboard,\n  );\n  writeCompressedAttrib1(\n    billboardCollection,\n    frameState,\n    vafWriters,\n    billboard,\n  );\n  writeCompressedAttrib2(\n    billboardCollection,\n    frameState,\n    vafWriters,\n    billboard,\n  );\n  writeEyeOffset(billboardCollection, frameState, vafWriters, billboard);\n  writeScaleByDistance(billboardCollection, frameState, vafWriters, billboard);\n  writePixelOffsetScaleByDistance(\n    billboardCollection,\n    frameState,\n    vafWriters,\n    billboard,\n  );\n  writeCompressedAttribute3(\n    billboardCollection,\n    frameState,\n    vafWriters,\n    billboard,\n  );\n  writeTextureCoordinateBoundsOrLabelTranslate(\n    billboardCollection,\n    frameState,\n    vafWriters,\n    billboard,\n  );\n  writeBatchId(billboardCollection, frameState, vafWriters, billboard);\n  writeSDF(billboardCollection, frameState, vafWriters, billboard);\n  writeSplitDirection(billboardCollection, frameState, vafWriters, billboard);\n}\n\nfunction recomputeActualPositions(\n  billboardCollection,\n  billboards,\n  length,\n  frameState,\n  modelMatrix,\n  recomputeBoundingVolume,\n) {\n  let boundingVolume;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    boundingVolume = billboardCollection._baseVolume;\n    billboardCollection._boundingVolumeDirty = true;\n  } else {\n    boundingVolume = billboardCollection._baseVolume2D;\n  }\n\n  const positions = [];\n  for (let i = 0; i < length; ++i) {\n    const billboard = billboards[i];\n    const position = billboard.position;\n    const actualPosition = Billboard._computeActualPosition(\n      billboard,\n      position,\n      frameState,\n      modelMatrix,\n    );\n    if (defined(actualPosition)) {\n      billboard._setActualPosition(actualPosition);\n\n      if (recomputeBoundingVolume) {\n        positions.push(actualPosition);\n      } else {\n        BoundingSphere.expand(boundingVolume, actualPosition, boundingVolume);\n      }\n    }\n  }\n\n  if (recomputeBoundingVolume) {\n    BoundingSphere.fromPoints(positions, boundingVolume);\n  }\n}\n\nfunction updateMode(billboardCollection, frameState) {\n  const mode = frameState.mode;\n\n  const billboards = billboardCollection._billboards;\n  const billboardsToUpdate = billboardCollection._billboardsToUpdate;\n  const modelMatrix = billboardCollection._modelMatrix;\n\n  if (\n    billboardCollection._createVertexArray ||\n    billboardCollection._mode !== mode ||\n    (mode !== SceneMode.SCENE3D &&\n      !Matrix4.equals(modelMatrix, billboardCollection.modelMatrix))\n  ) {\n    billboardCollection._mode = mode;\n    Matrix4.clone(billboardCollection.modelMatrix, modelMatrix);\n    billboardCollection._createVertexArray = true;\n\n    if (\n      mode === SceneMode.SCENE3D ||\n      mode === SceneMode.SCENE2D ||\n      mode === SceneMode.COLUMBUS_VIEW\n    ) {\n      recomputeActualPositions(\n        billboardCollection,\n        billboards,\n        billboards.length,\n        frameState,\n        modelMatrix,\n        true,\n      );\n    }\n  } else if (mode === SceneMode.MORPHING) {\n    recomputeActualPositions(\n      billboardCollection,\n      billboards,\n      billboards.length,\n      frameState,\n      modelMatrix,\n      true,\n    );\n  } else if (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) {\n    recomputeActualPositions(\n      billboardCollection,\n      billboardsToUpdate,\n      billboardCollection._billboardsToUpdateIndex,\n      frameState,\n      modelMatrix,\n      false,\n    );\n  }\n}\n\nfunction updateBoundingVolume(collection, frameState, boundingVolume) {\n  let pixelScale = 1.0;\n  if (!collection._allSizedInMeters || collection._maxPixelOffset !== 0.0) {\n    pixelScale = frameState.camera.getPixelSize(\n      boundingVolume,\n      frameState.context.drawingBufferWidth,\n      frameState.context.drawingBufferHeight,\n    );\n  }\n\n  let size = pixelScale * collection._maxScale * collection._maxSize * 2.0;\n  if (collection._allHorizontalCenter && collection._allVerticalCenter) {\n    size *= 0.5;\n  }\n\n  const offset =\n    pixelScale * collection._maxPixelOffset + collection._maxEyeOffset;\n  boundingVolume.radius += size + offset;\n}\n\nfunction createDebugCommand(billboardCollection, context) {\n  const fs =\n    \"uniform sampler2D billboard_texture; \\n\" +\n    \"in vec2 v_textureCoordinates; \\n\" +\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    out_FragColor = texture(billboard_texture, v_textureCoordinates); \\n\" +\n    \"} \\n\";\n\n  const drawCommand = context.createViewportQuadCommand(fs, {\n    uniformMap: {\n      billboard_texture: function () {\n        return billboardCollection.textureAtlas.texture;\n      },\n    },\n  });\n  drawCommand.pass = Pass.OVERLAY;\n  return drawCommand;\n}\n\nconst scratchWriterArray = [];\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {RuntimeError} image with id must be in the atlas.\n */\nBillboardCollection.prototype.update = function (frameState) {\n  removeBillboards(this);\n\n  if (!this.show) {\n    return;\n  }\n\n  const context = frameState.context;\n\n  if (\n    !context.instancedArrays ||\n    !(ContextLimits.maximumVertexTextureImageUnits > 0)\n  ) {\n    deprecationWarning(\n      \"Billboard-unsupported-ANGLE_instanced_arrays\",\n      \"Beginning in CesiumJS 1.140, billboards and labels will require device support for WebGL 2, \" +\n        \"or WebGL 1 with ANGLE_instanced_arrays and MAX_VERTEX_TEXTURE_IMAGE_UNITS > 0. For more \" +\n        \"information or to share feedback, see: https://github.com/CesiumGS/cesium/issues/13053\",\n    );\n  }\n\n  this._instanced = context.instancedArrays;\n  attributeLocations = this._instanced\n    ? attributeLocationsInstanced\n    : attributeLocationsBatched;\n  getIndexBuffer = this._instanced\n    ? getIndexBufferInstanced\n    : getIndexBufferBatched;\n\n  let billboards = this._billboards;\n  let billboardsLength = billboards.length;\n  let allBillboardsReady = true;\n  for (let i = 0; i < billboardsLength; ++i) {\n    const billboard = billboards[i];\n    if (defined(billboard.loadError)) {\n      console.error(\n        `Error loading image for billboard: ${billboard.loadError}`,\n      );\n      billboard.image = undefined;\n    }\n\n    if (billboard.textureDirty) {\n      this._updateBillboard(billboard, IMAGE_INDEX_INDEX);\n    }\n\n    if (billboard.show) {\n      allBillboardsReady = allBillboardsReady && billboard.ready;\n    }\n  }\n\n  // Queue any texture resource updates for after the frame is rendered\n  const textureAtlas = this._textureAtlas;\n  frameState.afterRender.push(() => {\n    if (this.isDestroyed()) {\n      return;\n    }\n\n    return textureAtlas.update(frameState.context);\n  });\n\n  if (!defined(textureAtlas.texture)) {\n    // Can't write billboard vertices until the texture atlas\n    // has been updated once\n    return;\n  }\n\n  updateMode(this, frameState);\n\n  billboards = this._billboards;\n  billboardsLength = billboards.length;\n  const billboardsToUpdate = this._billboardsToUpdate;\n  const billboardsToUpdateLength = this._billboardsToUpdateIndex;\n\n  const properties = this._propertiesChanged;\n\n  const textureAtlasGUID = textureAtlas.guid;\n  const createVertexArray =\n    this._createVertexArray || this._textureAtlasGUID !== textureAtlasGUID;\n  this._textureAtlasGUID = textureAtlasGUID;\n\n  let vafWriters;\n  const pass = frameState.passes;\n  const picking = pass.pick;\n\n  // PERFORMANCE_IDEA: Round robin multiple buffers.\n  if (createVertexArray || (!picking && this.computeNewBuffersUsage())) {\n    this._createVertexArray = false;\n\n    for (let k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n      properties[k] = 0;\n    }\n\n    this._vaf = this._vaf && this._vaf.destroy();\n\n    if (billboardsLength > 0) {\n      // PERFORMANCE_IDEA:  Instead of creating a new one, resize like std::vector.\n      this._vaf = createVAF(\n        context,\n        billboardsLength,\n        this._buffersUsage,\n        this._instanced,\n        this._batchTable,\n        this._sdf,\n      );\n      vafWriters = this._vaf.writers;\n\n      // Rewrite entire buffer if billboards were added or removed.\n      for (let i = 0; i < billboardsLength; ++i) {\n        const billboard = this._billboards[i];\n        billboard._dirty = false; // In case it needed an update.\n        billboard.textureDirty = false;\n        writeBillboard(this, frameState, vafWriters, billboard);\n      }\n\n      // Different billboard collections share the same index buffer.\n      this._vaf.commit(getIndexBuffer(context));\n    }\n\n    this._billboardsToUpdateIndex = 0;\n  } else if (billboardsToUpdateLength > 0) {\n    // Billboards were modified, but none were added or removed.\n    const writers = scratchWriterArray;\n    writers.length = 0;\n\n    if (\n      properties[POSITION_INDEX] ||\n      properties[ROTATION_INDEX] ||\n      properties[SCALE_INDEX]\n    ) {\n      writers.push(writePositionScaleAndRotation);\n    }\n\n    if (\n      properties[IMAGE_INDEX_INDEX] ||\n      properties[PIXEL_OFFSET_INDEX] ||\n      properties[HORIZONTAL_ORIGIN_INDEX] ||\n      properties[VERTICAL_ORIGIN_INDEX] ||\n      properties[SHOW_INDEX]\n    ) {\n      writers.push(writeCompressedAttrib0);\n      if (this._instanced) {\n        writers.push(writeEyeOffset);\n      }\n    }\n\n    if (\n      properties[IMAGE_INDEX_INDEX] ||\n      properties[ALIGNED_AXIS_INDEX] ||\n      properties[TRANSLUCENCY_BY_DISTANCE_INDEX]\n    ) {\n      writers.push(writeCompressedAttrib1);\n      writers.push(writeCompressedAttrib2);\n    }\n\n    if (properties[IMAGE_INDEX_INDEX] || properties[COLOR_INDEX]) {\n      writers.push(writeCompressedAttrib2);\n    }\n\n    if (properties[IMAGE_INDEX_INDEX] || properties[EYE_OFFSET_INDEX]) {\n      writers.push(writeEyeOffset);\n    }\n\n    if (properties[SCALE_BY_DISTANCE_INDEX]) {\n      writers.push(writeScaleByDistance);\n    }\n\n    if (properties[PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX]) {\n      writers.push(writePixelOffsetScaleByDistance);\n    }\n\n    if (\n      properties[DISTANCE_DISPLAY_CONDITION_INDEX] ||\n      properties[DISABLE_DEPTH_DISTANCE] ||\n      properties[IMAGE_INDEX_INDEX] ||\n      properties[POSITION_INDEX]\n    ) {\n      writers.push(writeCompressedAttribute3);\n    }\n\n    if (properties[IMAGE_INDEX_INDEX] || properties[POSITION_INDEX]) {\n      writers.push(writeTextureCoordinateBoundsOrLabelTranslate);\n    }\n\n    if (properties[SDF_INDEX]) {\n      writers.push(writeSDF);\n    }\n\n    if (properties[SPLIT_DIRECTION_INDEX]) {\n      writers.push(writeSplitDirection);\n    }\n\n    const numWriters = writers.length;\n    vafWriters = this._vaf.writers;\n\n    if (billboardsToUpdateLength / billboardsLength > 0.1) {\n      // If more than 10% of billboard change, rewrite the entire buffer.\n\n      // PERFORMANCE_IDEA:  I totally made up 10% :).\n\n      for (let m = 0; m < billboardsToUpdateLength; ++m) {\n        const b = billboardsToUpdate[m];\n        b._dirty = false;\n        b.textureDirty = false;\n\n        for (let n = 0; n < numWriters; ++n) {\n          writers[n](this, frameState, vafWriters, b);\n        }\n      }\n      this._vaf.commit(getIndexBuffer(context));\n    } else {\n      for (let h = 0; h < billboardsToUpdateLength; ++h) {\n        const bb = billboardsToUpdate[h];\n        bb._dirty = false;\n        bb.textureDirty = false;\n\n        for (let o = 0; o < numWriters; ++o) {\n          writers[o](this, frameState, vafWriters, bb);\n        }\n\n        if (this._instanced) {\n          this._vaf.subCommit(bb._index, 1);\n        } else {\n          this._vaf.subCommit(bb._index * 4, 4);\n        }\n      }\n      this._vaf.endSubCommits();\n    }\n\n    this._billboardsToUpdateIndex = 0;\n  }\n\n  // If the number of total billboards ever shrinks considerably\n  // Truncate billboardsToUpdate so that we free memory that we're\n  // not going to be using.\n  if (billboardsToUpdateLength > billboardsLength * 1.5) {\n    billboardsToUpdate.length = billboardsLength;\n  }\n\n  if (!defined(this._vaf) || !defined(this._vaf.va)) {\n    return;\n  }\n\n  if (this._boundingVolumeDirty) {\n    this._boundingVolumeDirty = false;\n    BoundingSphere.transform(\n      this._baseVolume,\n      this.modelMatrix,\n      this._baseVolumeWC,\n    );\n  }\n\n  let boundingVolume;\n  let modelMatrix = Matrix4.IDENTITY;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    modelMatrix = this.modelMatrix;\n    boundingVolume = BoundingSphere.clone(\n      this._baseVolumeWC,\n      this._boundingVolume,\n    );\n  } else {\n    boundingVolume = BoundingSphere.clone(\n      this._baseVolume2D,\n      this._boundingVolume,\n    );\n  }\n  updateBoundingVolume(this, frameState, boundingVolume);\n\n  const blendOptionChanged = this._blendOption !== this.blendOption;\n  this._blendOption = this.blendOption;\n\n  if (blendOptionChanged) {\n    if (\n      this._blendOption === BlendOption.OPAQUE ||\n      this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n    ) {\n      this._rsOpaque = RenderState.fromCache({\n        depthTest: {\n          enabled: true,\n          func: WebGLConstants.LESS,\n        },\n        depthMask: true,\n      });\n    } else {\n      this._rsOpaque = undefined;\n    }\n\n    // If OPAQUE_AND_TRANSLUCENT is in use, only the opaque pass gets the benefit of the depth buffer,\n    // not the translucent pass.  Otherwise, if the TRANSLUCENT pass is on its own, it turns on\n    // a depthMask in lieu of full depth sorting (because it has opaque-ish fragments that look bad in OIT).\n    const useTranslucentDepthMask =\n      this._blendOption === BlendOption.TRANSLUCENT;\n\n    if (\n      this._blendOption === BlendOption.TRANSLUCENT ||\n      this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n    ) {\n      this._rsTranslucent = RenderState.fromCache({\n        depthTest: {\n          enabled: true,\n          func: useTranslucentDepthMask\n            ? WebGLConstants.LEQUAL\n            : WebGLConstants.LESS,\n        },\n        depthMask: useTranslucentDepthMask,\n        blending: BlendingState.ALPHA_BLEND,\n      });\n    } else {\n      this._rsTranslucent = undefined;\n    }\n  }\n\n  this._shaderDisableDepthDistance =\n    this._shaderDisableDepthDistance ||\n    frameState.minimumDisableDepthTestDistance !== 0.0;\n\n  let vsSource;\n  let fsSource;\n  let vs;\n  let fs;\n  let vertDefines;\n\n  const supportVSTextureReads =\n    ContextLimits.maximumVertexTextureImageUnits > 0;\n\n  if (\n    blendOptionChanged ||\n    this._shaderRotation !== this._compiledShaderRotation ||\n    this._shaderAlignedAxis !== this._compiledShaderAlignedAxis ||\n    this._shaderScaleByDistance !== this._compiledShaderScaleByDistance ||\n    this._shaderTranslucencyByDistance !==\n      this._compiledShaderTranslucencyByDistance ||\n    this._shaderPixelOffsetScaleByDistance !==\n      this._compiledShaderPixelOffsetScaleByDistance ||\n    this._shaderDistanceDisplayCondition !==\n      this._compiledShaderDistanceDisplayCondition ||\n    this._shaderDisableDepthDistance !==\n      this._compiledShaderDisableDepthDistance ||\n    this._shaderClampToGround !== this._compiledShaderClampToGround ||\n    this._sdf !== this._compiledSDF\n  ) {\n    vsSource = BillboardCollectionVS;\n    fsSource = BillboardCollectionFS;\n\n    vertDefines = [];\n    if (defined(this._batchTable)) {\n      vertDefines.push(\"VECTOR_TILE\");\n      vsSource = this._batchTable.getVertexShaderCallback(\n        false,\n        \"a_batchId\",\n        undefined,\n      )(vsSource);\n      fsSource = this._batchTable.getFragmentShaderCallback(\n        false,\n        undefined,\n      )(fsSource);\n    }\n\n    vs = new ShaderSource({\n      defines: vertDefines,\n      sources: [vsSource],\n    });\n    if (this._instanced) {\n      vs.defines.push(\"INSTANCED\");\n    }\n    if (this._shaderRotation) {\n      vs.defines.push(\"ROTATION\");\n    }\n    if (this._shaderAlignedAxis) {\n      vs.defines.push(\"ALIGNED_AXIS\");\n    }\n    if (this._shaderScaleByDistance) {\n      vs.defines.push(\"EYE_DISTANCE_SCALING\");\n    }\n    if (this._shaderTranslucencyByDistance) {\n      vs.defines.push(\"EYE_DISTANCE_TRANSLUCENCY\");\n    }\n    if (this._shaderPixelOffsetScaleByDistance) {\n      vs.defines.push(\"EYE_DISTANCE_PIXEL_OFFSET\");\n    }\n    if (this._shaderDistanceDisplayCondition) {\n      vs.defines.push(\"DISTANCE_DISPLAY_CONDITION\");\n    }\n    if (this._shaderDisableDepthDistance) {\n      vs.defines.push(\"DISABLE_DEPTH_DISTANCE\");\n    }\n    if (this._shaderClampToGround) {\n      if (supportVSTextureReads) {\n        vs.defines.push(\"VS_THREE_POINT_DEPTH_CHECK\");\n      } else {\n        vs.defines.push(\"FS_THREE_POINT_DEPTH_CHECK\");\n      }\n    }\n\n    const sdfEdge = 1.0 - SDFSettings.CUTOFF;\n\n    if (this._sdf) {\n      vs.defines.push(\"SDF\");\n    }\n\n    const vectorFragDefine = defined(this._batchTable) ? \"VECTOR_TILE\" : \"\";\n\n    if (this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT) {\n      fs = new ShaderSource({\n        defines: [\"OPAQUE\", vectorFragDefine],\n        sources: [fsSource],\n      });\n      if (this._shaderClampToGround) {\n        if (supportVSTextureReads) {\n          fs.defines.push(\"VS_THREE_POINT_DEPTH_CHECK\");\n        } else {\n          fs.defines.push(\"FS_THREE_POINT_DEPTH_CHECK\");\n        }\n      }\n\n      if (this._sdf) {\n        fs.defines.push(\"SDF\");\n        fs.defines.push(`SDF_EDGE ${sdfEdge}`);\n      }\n\n      this._sp = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._sp,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n\n      fs = new ShaderSource({\n        defines: [\"TRANSLUCENT\", vectorFragDefine],\n        sources: [fsSource],\n      });\n      if (this._shaderClampToGround) {\n        if (supportVSTextureReads) {\n          fs.defines.push(\"VS_THREE_POINT_DEPTH_CHECK\");\n        } else {\n          fs.defines.push(\"FS_THREE_POINT_DEPTH_CHECK\");\n        }\n      }\n      if (this._sdf) {\n        fs.defines.push(\"SDF\");\n        fs.defines.push(`SDF_EDGE ${sdfEdge}`);\n      }\n      this._spTranslucent = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._spTranslucent,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n    }\n\n    if (this._blendOption === BlendOption.OPAQUE) {\n      fs = new ShaderSource({\n        defines: [vectorFragDefine],\n        sources: [fsSource],\n      });\n      if (this._shaderClampToGround) {\n        if (supportVSTextureReads) {\n          fs.defines.push(\"VS_THREE_POINT_DEPTH_CHECK\");\n        } else {\n          fs.defines.push(\"FS_THREE_POINT_DEPTH_CHECK\");\n        }\n      }\n      if (this._sdf) {\n        fs.defines.push(\"SDF\");\n        fs.defines.push(`SDF_EDGE ${sdfEdge}`);\n      }\n      this._sp = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._sp,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n    }\n\n    if (this._blendOption === BlendOption.TRANSLUCENT) {\n      fs = new ShaderSource({\n        defines: [vectorFragDefine],\n        sources: [fsSource],\n      });\n      if (this._shaderClampToGround) {\n        if (supportVSTextureReads) {\n          fs.defines.push(\"VS_THREE_POINT_DEPTH_CHECK\");\n        } else {\n          fs.defines.push(\"FS_THREE_POINT_DEPTH_CHECK\");\n        }\n      }\n      if (this._sdf) {\n        fs.defines.push(\"SDF\");\n        fs.defines.push(`SDF_EDGE ${sdfEdge}`);\n      }\n      this._spTranslucent = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._spTranslucent,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n    }\n\n    this._compiledShaderRotation = this._shaderRotation;\n    this._compiledShaderAlignedAxis = this._shaderAlignedAxis;\n    this._compiledShaderScaleByDistance = this._shaderScaleByDistance;\n    this._compiledShaderTranslucencyByDistance =\n      this._shaderTranslucencyByDistance;\n    this._compiledShaderPixelOffsetScaleByDistance =\n      this._shaderPixelOffsetScaleByDistance;\n    this._compiledShaderDistanceDisplayCondition =\n      this._shaderDistanceDisplayCondition;\n    this._compiledShaderDisableDepthDistance = this._shaderDisableDepthDistance;\n    this._compiledShaderClampToGround = this._shaderClampToGround;\n    this._compiledSDF = this._sdf;\n  }\n\n  const commandList = frameState.commandList;\n\n  if (pass.render || pass.pick) {\n    const colorList = this._colorCommands;\n\n    const opaque = this._blendOption === BlendOption.OPAQUE;\n    const opaqueAndTranslucent =\n      this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT;\n\n    const va = this._vaf.va;\n    const vaLength = va.length;\n\n    let uniforms = this._uniforms;\n    let pickId;\n    if (defined(this._batchTable)) {\n      uniforms = this._batchTable.getUniformMapCallback()(uniforms);\n      pickId = this._batchTable.getPickId();\n    } else {\n      pickId = \"v_pickColor\";\n    }\n\n    colorList.length = vaLength;\n    const totalLength = opaqueAndTranslucent ? vaLength * 2 : vaLength;\n    for (let j = 0; j < totalLength; ++j) {\n      let command = colorList[j];\n      if (!defined(command)) {\n        command = colorList[j] = new DrawCommand();\n      }\n\n      const opaqueCommand = opaque || (opaqueAndTranslucent && j % 2 === 0);\n\n      command.pass =\n        opaqueCommand || !opaqueAndTranslucent ? Pass.OPAQUE : Pass.TRANSLUCENT;\n      command.owner = this;\n\n      const index = opaqueAndTranslucent ? Math.floor(j / 2.0) : j;\n      command.boundingVolume = boundingVolume;\n      command.modelMatrix = modelMatrix;\n      command.count = va[index].indicesCount;\n      command.shaderProgram = opaqueCommand ? this._sp : this._spTranslucent;\n      command.uniformMap = uniforms;\n      command.vertexArray = va[index].va;\n      command.renderState = opaqueCommand\n        ? this._rsOpaque\n        : this._rsTranslucent;\n      command.debugShowBoundingVolume = this.debugShowBoundingVolume;\n      command.pickId = pickId;\n\n      if (this._instanced) {\n        command.count = 6;\n        command.instanceCount = billboardsLength;\n      }\n\n      commandList.push(command);\n    }\n\n    if (this.debugShowTextureAtlas) {\n      if (!defined(this.debugCommand)) {\n        this.debugCommand = createDebugCommand(this, frameState.context);\n      }\n\n      commandList.push(this.debugCommand);\n    }\n  }\n\n  this._allBillboardsReady = allBillboardsReady;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see BillboardCollection#destroy\n */\nBillboardCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * billboards = billboards && billboards.destroy();\n *\n * @see BillboardCollection#isDestroyed\n */\nBillboardCollection.prototype.destroy = function () {\n  if (defined(this._removeCallbackFunc)) {\n    this._removeCallbackFunc();\n    this._removeCallbackFunc = undefined;\n  }\n\n  this._textureAtlas =\n    this._destroyTextureAtlas &&\n    this._textureAtlas &&\n    this._textureAtlas.destroy();\n  this._sp = this._sp && this._sp.destroy();\n  this._spTranslucent = this._spTranslucent && this._spTranslucent.destroy();\n  this._vaf = this._vaf && this._vaf.destroy();\n  destroyBillboards(this._billboards);\n\n  return destroyObject(this);\n};\nexport default BillboardCollection;\n","/**\n * Defines loading state of a image as any request is resolved and the WebGL resources are updated.\n * @private\n * @enum {number}\n */\nconst BillboardLoadState = Object.freeze({\n  /**\n   * There is no image data to load.\n   * @private\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n  /**\n   * Image data is in the process of downloading, or WebGL resources are being updated.\n   * @private\n   * @type {number}\n   * @constant\n   */\n  LOADING: 2,\n  /**\n   * The image data has been downloaded and the WebGL resources have been created. It is ready for rendering.\n   * @private\n   * @type {number}\n   * @constant\n   */\n  LOADED: 3,\n  /**\n   * There was an error while downloading an image or updating the WebGL resources.\n   * @private\n   * @type {number}\n   * @constant\n   */\n  ERROR: 4,\n  /**\n   * Updating the WebGL resources failed, due to the resource being destroyed or another error.\n   * @private\n   * @type {number}\n   * @constant\n   */\n  FAILED: 5,\n});\n\nexport default BillboardLoadState;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport BillboardLoadState from \"./BillboardLoadState.js\";\n\n/**\n * Tracks a reference to an image and it's loading state, as used in a BillboardCollection and stored in a texture atlas.\n * @constructor\n * @private\n * @see BillboardCollection\n * @see Billboard#image\n * @alias BillboardTexture\n * @param {BillboardCollection} billboardCollection The associated billboard collecion.\n */\nfunction BillboardTexture(billboardCollection) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"billboardCollection\", billboardCollection);\n  //>>includeEnd('debug');\n\n  this._billboardCollection = billboardCollection;\n\n  this._id = undefined;\n  this._loadState = BillboardLoadState.NONE;\n  this._loadError = undefined;\n\n  this._index = -1;\n  this._width = undefined;\n  this._height = undefined;\n\n  this._hasSubregion = false;\n\n  /**\n   * Used by billboardCollection to track whcih billboards to update.\n   * @type {boolean}\n   * @private\n   */\n  this.dirty = false;\n}\n\nObject.defineProperties(BillboardTexture.prototype, {\n  /**\n   * If defined, this error was encountered during the loading process.\n   * @memberof BillboardTexture.prototype\n   * @type {Error|undefined}\n   * @readonly\n   * @private\n   */\n  loadError: {\n    get: function () {\n      return this._loadError;\n    },\n  },\n\n  /**\n   * The current status of the image load. When <code>BillboardLoadState.LOADED</code>, this billboard is ready to render, i.e., the image\n   * has been downloaded and the WebGL resources are created.\n   * @memberof BillboardTexture.prototype\n   * @type {BillboardLoadState}\n   * @readonly\n   * @default BillboardLoadState.NONE\n   * @private\n   */\n  loadState: {\n    get: function () {\n      return this._loadState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, this texture is ready to render, i.e., the image\n   * has been downloaded and the WebGL resources are created.\n   * @memberof BillboardTexture.prototype\n   * @type {boolean}\n   * @readonly\n   * @default false\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._loadState === BillboardLoadState.LOADED;\n    },\n  },\n\n  /**\n   * Returns <code>true</code> if there is image data associated with this instance.\n   * @memberof BillboardTexture.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  hasImage: {\n    get: function () {\n      return this._loadState !== BillboardLoadState.NONE;\n    },\n  },\n\n  /**\n   * A unique identifier for the image, or undefined if no image data has been associated with this instance.\n   * @memberof BillboardTexture.prototype\n   * @type {string|undefined}\n   * @readonly\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * The width of the associated image. Before the instance is <code>ready</code>, this will be <code>undefined</code>.\n   * @memberof BillboardTexture.prototype\n   * @type {number|undefined}\n   * @readonly\n   * @private\n   */\n  width: {\n    get: function () {\n      return this._width;\n    },\n  },\n\n  /**\n   * The height of the associated image. Before the instance is <code>ready</code>, this will be <code>undefined</code>.\n   * @memberof BillboardTexture.prototype\n   * @type {number|undefined}\n   * @readonly\n   * @private\n   */\n  height: {\n    get: function () {\n      return this._height;\n    },\n  },\n});\n\n/**\n * Releases reference to any associated image data.\n * @private\n */\nBillboardTexture.prototype.unload = async function () {\n  if (this._loadState === BillboardLoadState.NONE) {\n    return;\n  }\n\n  this._id = undefined;\n  this._loadError = undefined;\n  this._loadState = BillboardLoadState.NONE;\n\n  this._index = -1;\n  this._width = undefined;\n  this._height = undefined;\n\n  this.dirty = true;\n};\n\n/**\n * Starts loading an image into the texture atlas.\n * @see {TextureAtlas#addImage}\n * @private\n * @param {string} id An identifier to detect whether the image already exists in the atlas.\n * @param {HTMLImageElement|HTMLCanvasElement|string|Resource|Promise|TextureAtlas.CreateImageCallback} image An image or canvas to add to the texture atlas,\n *        or a URL to an Image, or a Promise for an image, or a function that creates an image.\n * @param {number} width A number specifying the width of the texture. If undefined, the image width will be used.\n * @param {number} height A number specifying the height of the texture. If undefined, the image height will be used.\n */\nBillboardTexture.prototype.loadImage = async function (\n  id,\n  image,\n  width,\n  height,\n) {\n  if (this._id === id) {\n    // This image has already been loaded\n    return;\n  }\n\n  const collection = this._billboardCollection;\n  const cache = collection.billboardTextureCache;\n  let billboardTexture = cache.get(id);\n  if (\n    (defined(billboardTexture) &&\n      image.loadState === BillboardLoadState.LOADING) ||\n    image.loadState === BillboardLoadState.LOADED\n  ) {\n    // Use the cached texture if it is in progress or successful.\n    BillboardTexture.clone(billboardTexture, this);\n    return;\n  }\n  // Otherwise, load if not yet assigned an image, and try the load again if anything failed during the last billboard creation\n  if (!defined(billboardTexture)) {\n    billboardTexture = new BillboardTexture(collection);\n    cache.set(id, billboardTexture);\n  }\n\n  billboardTexture._id = this._id = id;\n  billboardTexture._loadState = this._loadState = BillboardLoadState.LOADING;\n  billboardTexture._loadError = this._loadError = undefined;\n\n  let index;\n  const atlas = this._billboardCollection.textureAtlas;\n  try {\n    index = atlas.addImage(id, image, width, height);\n    if (index instanceof Promise) {\n      index = await index;\n    }\n  } catch (error) {\n    // There was an error loading the image\n    billboardTexture._loadState = BillboardLoadState.ERROR;\n    billboardTexture._loadError = error;\n\n    if (this._id !== id) {\n      // Another load was initiated and resolved resolved before this one. This operation is cancelled.\n      return;\n    }\n\n    this._loadState = BillboardLoadState.ERROR;\n    this._loadError = error;\n    return;\n  }\n\n  if (!defined(index) || index === -1) {\n    // Resources destroyed or otherwise\n    billboardTexture._loadState = BillboardLoadState.FAILED;\n    billboardTexture._index = -1;\n\n    if (this._id !== id) {\n      // Another load was initiated and resolved resolved before this one. This operation is cancelled.\n      return;\n    }\n\n    this._loadState = BillboardLoadState.FAILED;\n    this._index = -1;\n\n    return;\n  }\n\n  billboardTexture._index = index;\n  billboardTexture._loadState = BillboardLoadState.LOADED;\n\n  const rectangle = atlas.rectangles[index];\n  billboardTexture._width = rectangle.width;\n  billboardTexture._height = rectangle.height;\n\n  if (this._id !== id) {\n    // Another load was initiated and resolved resolved before this one. This operation is cancelled.\n    return;\n  }\n\n  this._index = index;\n  this._loadState = BillboardLoadState.LOADED;\n  this._width = rectangle.width;\n  this._height = rectangle.height;\n\n  this.dirty = true;\n};\n\n/**\n * Track a reference to a sub-region of an existing image.\n * @see {TextureAtlas#addImageSubRegion}\n * @private\n * @param {string} id An identifier to detect whether the image already exists in the atlas.\n * @param {BoundingRectangle} subRegion An {@link BoundingRectangle} defining a region of an existing image, measured in pixels from the bottom-left of the image.\n */\nBillboardTexture.prototype.addImageSubRegion = function (id, subRegion) {\n  this._id = id;\n  this._loadError = undefined;\n  this._hasSubregion = true;\n\n  const atlas = this._billboardCollection.textureAtlas;\n  const indexOrPromise = atlas.addImageSubRegion(id, subRegion);\n\n  if (typeof indexOrPromise === \"number\") {\n    this.setImageSubRegion(indexOrPromise, subRegion);\n    return;\n  }\n\n  this.loadImageSubRegion(id, subRegion, indexOrPromise);\n};\n\n/**\n * @see {TextureAtlas#addImageSubRegion}\n * @private\n * @param {string} id An identifier to detect whether the image already exists in the atlas.\n * @param {BoundingRectangle} subRegion An {@link BoundingRectangle} defining a region of an existing image, measured in pixels from the bottom-left of the image.\n * @param {Promise<number>} indexPromise A promise that resolves to the image region index.\n */\nBillboardTexture.prototype.loadImageSubRegion = async function (\n  id,\n  subRegion,\n  indexPromise,\n) {\n  let index;\n  try {\n    this._loadState = BillboardLoadState.LOADING;\n    index = await indexPromise;\n  } catch (error) {\n    // There was an error loading the referenced image\n    this._loadState = BillboardLoadState.ERROR;\n    this._loadError = error;\n    return;\n  }\n\n  if (this._id !== id) {\n    // Another load was initiated and resolved resolved before this one. This operation is cancelled.\n    return;\n  }\n\n  this._loadState = BillboardLoadState.LOADED;\n\n  this.setImageSubRegion(index, subRegion);\n};\n\n/**\n * @see {TextureAtlas#addImageSubRegion}\n * @private\n * @param {number} index The resolved index in the {@link TextureAtlas}\n * @param {BoundingRectangle} subRegion An {@link BoundingRectangle} defining a region of an existing image, measured in pixels from the bottom-left of the image.\n */\nBillboardTexture.prototype.setImageSubRegion = function (index, subRegion) {\n  if (this._index === index) {\n    return;\n  }\n\n  if (!defined(index) || index === -1) {\n    this._loadState = BillboardLoadState.FAILED;\n    this._index = -1;\n    this._width = undefined;\n    this._height = undefined;\n    return;\n  }\n\n  this._width = subRegion.width;\n  this._height = subRegion.height;\n\n  this._index = index;\n\n  this.dirty = true;\n};\n\n/**\n * Get the texture coordinates for reading the loaded texture in shaders.\n * @private\n * @param {BoundingRectangle} [result] The modified result parameter or a new BoundingRectangle instance if one was not provided.\n * @return {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\n */\nBillboardTexture.prototype.computeTextureCoordinates = function (result) {\n  const atlas = this._billboardCollection.textureAtlas;\n  return atlas.computeTextureCoordinates(this._index, result);\n};\n\n/**\n * Clones an existing billboard texture, inlcuding any in-flight tracking, into the target billboard texture.\n * @param {BillboardTexture} billboardTexture\n * @param {BillboardTexture} target\n * @returns {BillboardTexture} target\n */\nBillboardTexture.clone = function (billboardTexture, target) {\n  target._id = billboardTexture._id;\n  target._loadState = billboardTexture._loadState;\n  target._loadError = undefined;\n  target._index = billboardTexture._index;\n  target._width = billboardTexture._width;\n  target._height = billboardTexture._height;\n  target._hasSubregion = billboardTexture._hasSubregion;\n\n  if (billboardTexture.ready) {\n    target.dirty = true;\n    return;\n  }\n\n  const completeLoad = async () => {\n    const id = billboardTexture._id;\n    const atlas = billboardTexture._billboardCollection.textureAtlas;\n    await atlas._indexPromiseById.get(id);\n\n    // Any errors should have already been handled\n    if (target._id !== id) {\n      // Another load was initiated and resolved resolved before this one. This operation is cancelled.\n      return;\n    }\n\n    if (billboardTexture._hasSubregion) {\n      // Subregions must wait an additional frame to be ready\n      await Promise.resolve();\n    }\n\n    target._id = id;\n    target._loadState = billboardTexture._loadState;\n    target._loadError = billboardTexture._loadError;\n    target._index = billboardTexture._index;\n    target._width = billboardTexture._width;\n    target._height = billboardTexture._height;\n    target.dirty = true;\n  };\n\n  completeLoad();\n  return target;\n};\n\nexport default BillboardTexture;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport BingMapsStyle from \"./BingMapsStyle.js\";\nimport DiscardEmptyTilePolicy from \"./DiscardEmptyTileImagePolicy.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\n/**\n * @typedef {object} BingMapsImageryProvider.ConstructorOptions\n *\n * Initialization options for the BingMapsImageryProvider constructor\n *\n * @property {string} [key] The Bing Maps key for your application, which can be\n *        created at {@link https://www.bingmapsportal.com/}.\n * @property {string} [tileProtocol] The protocol to use when loading tiles, e.g. 'http' or 'https'.\n *        By default, tiles are loaded using the same protocol as the page.\n * @property {BingMapsStyle} [mapStyle=BingMapsStyle.AERIAL] The type of Bing Maps imagery to load.\n * @property {string} [mapLayer] Additional display layer options as defined on {@link https://learn.microsoft.com/en-us/bingmaps/rest-services/imagery/get-imagery-metadata#template-parameters}\n * @property {string} [culture=''] The culture to use when requesting Bing Maps imagery. Not\n *        all cultures are supported. See {@link http://msdn.microsoft.com/en-us/library/hh441729.aspx}\n *        for information on the supported cultures.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n *        is invalid and should be discarded.  By default, a {@link DiscardEmptyTileImagePolicy}\n *        will be used, with the expectation that the Bing Maps server will send a zero-length response for missing tiles.\n *        To ensure that no tiles are discarded, construct and pass a {@link NeverTileDiscardPolicy} for this parameter.\n */\n\n/**\n * Used to track creation details while fetching initial metadata\n *\n * @constructor\n * @private\n *\n * @param {BingMapsImageryProvider.ConstructorOptions} options An object describing initialization options\n */\nfunction ImageryProviderBuilder(options) {\n  this.tileWidth = undefined;\n  this.tileHeight = undefined;\n  this.maximumLevel = undefined;\n  this.imageUrlSubdomains = undefined;\n  this.imageUrlTemplate = undefined;\n\n  this.attributionList = undefined;\n}\n\n/**\n * Complete BingMapsImageryProvider creation based on builder values.\n *\n * @private\n *\n * @param {BingMapsImageryProvider} provider\n */\nImageryProviderBuilder.prototype.build = function (provider) {\n  provider._tileWidth = this.tileWidth;\n  provider._tileHeight = this.tileHeight;\n  provider._maximumLevel = this.maximumLevel;\n  provider._imageUrlSubdomains = this.imageUrlSubdomains;\n  provider._imageUrlTemplate = this.imageUrlTemplate;\n\n  let attributionList = (provider._attributionList = this.attributionList);\n  if (!attributionList) {\n    attributionList = [];\n  }\n  provider._attributionList = attributionList;\n\n  for (\n    let attributionIndex = 0, attributionLength = attributionList.length;\n    attributionIndex < attributionLength;\n    ++attributionIndex\n  ) {\n    const attribution = attributionList[attributionIndex];\n\n    if (attribution.credit instanceof Credit) {\n      // If attribution.credit has already been created\n      // then we are using a cached value, which means\n      // none of the remaining processing needs to be done.\n      break;\n    }\n\n    attribution.credit = new Credit(attribution.attribution);\n    const coverageAreas = attribution.coverageAreas;\n\n    for (\n      let areaIndex = 0, areaLength = attribution.coverageAreas.length;\n      areaIndex < areaLength;\n      ++areaIndex\n    ) {\n      const area = coverageAreas[areaIndex];\n      const bbox = area.bbox;\n      area.bbox = new Rectangle(\n        CesiumMath.toRadians(bbox[1]),\n        CesiumMath.toRadians(bbox[0]),\n        CesiumMath.toRadians(bbox[3]),\n        CesiumMath.toRadians(bbox[2]),\n      );\n    }\n  }\n};\n\nfunction metadataSuccess(data, imageryProviderBuilder) {\n  if (data.resourceSets.length !== 1) {\n    throw new RuntimeError(\n      \"metadata does not specify one resource in resourceSets\",\n    );\n  }\n\n  const resource = data.resourceSets[0].resources[0];\n  imageryProviderBuilder.tileWidth = resource.imageWidth;\n  imageryProviderBuilder.tileHeight = resource.imageHeight;\n  imageryProviderBuilder.maximumLevel = resource.zoomMax - 1;\n  imageryProviderBuilder.imageUrlSubdomains = resource.imageUrlSubdomains;\n  imageryProviderBuilder.imageUrlTemplate = resource.imageUrl;\n\n  let validProviders = resource.imageryProviders;\n  if (defined(resource.imageryProviders)) {\n    // prevent issues with the imagery API from crashing the viewer when the expected properties are not there\n    // See https://github.com/CesiumGS/cesium/issues/12088\n    validProviders = resource.imageryProviders.filter((provider) =>\n      provider.coverageAreas?.some((area) => defined(area.bbox)),\n    );\n  }\n  imageryProviderBuilder.attributionList = validProviders;\n}\n\nfunction metadataFailure(metadataResource, error, provider) {\n  let message = `An error occurred while accessing ${metadataResource.url}`;\n  if (defined(error) && defined(error.message)) {\n    message += `: ${error.message}`;\n  }\n\n  TileProviderError.reportError(\n    undefined,\n    provider,\n    defined(provider) ? provider._errorEvent : undefined,\n    message,\n    undefined,\n    undefined,\n    undefined,\n    error,\n  );\n\n  throw new RuntimeError(message);\n}\n\nasync function requestMetadata(\n  metadataResource,\n  imageryProviderBuilder,\n  provider,\n) {\n  const cacheKey = metadataResource.url;\n  let promise = BingMapsImageryProvider._metadataCache[cacheKey];\n  if (!defined(promise)) {\n    promise = metadataResource.fetchJson();\n    BingMapsImageryProvider._metadataCache[cacheKey] = promise;\n  }\n\n  try {\n    const data = await promise;\n    return metadataSuccess(data, imageryProviderBuilder);\n  } catch (e) {\n    metadataFailure(metadataResource, e, provider);\n  }\n}\n\n/**\n * <div class=\"notice\">\n * To construct a BingMapsImageryProvider, call {@link BingMapsImageryProvider.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * Provides tiled imagery using the Bing Maps Imagery REST API.\n *\n * @alias BingMapsImageryProvider\n * @constructor\n *\n * @param {BingMapsImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see BingMapsImageryProvider.fromUrl\n * @see ArcGisMapServerImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n * @example\n * const bing = await Cesium.BingMapsImageryProvider.fromUrl(\n *   \"https://dev.virtualearth.net\", {\n *     key: \"get-yours-at-https://www.bingmapsportal.com/\",\n *     mapStyle: Cesium.BingMapsStyle.AERIAL\n * });\n *\n * @see {@link http://msdn.microsoft.com/en-us/library/ff701713.aspx|Bing Maps REST Services}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction BingMapsImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = 1.0;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  this._mapStyle = options.mapStyle ?? BingMapsStyle.AERIAL;\n  this._mapLayer = options.mapLayer;\n  this._culture = options.culture ?? \"\";\n  this._key = options.key;\n\n  this._tileDiscardPolicy = options.tileDiscardPolicy;\n  if (!defined(this._tileDiscardPolicy)) {\n    this._tileDiscardPolicy = new DiscardEmptyTilePolicy();\n  }\n\n  this._proxy = options.proxy;\n  this._credit = new Credit(\n    `<a href=\"https://www.microsoft.com/en-us/maps/bing-maps/product\"><img src=\"${BingMapsImageryProvider.logoUrl}\" title=\"Bing Imagery\"/></a>`,\n  );\n\n  this._tilingScheme = new WebMercatorTilingScheme({\n    numberOfLevelZeroTilesX: 2,\n    numberOfLevelZeroTilesY: 2,\n    ellipsoid: options.ellipsoid,\n  });\n\n  this._tileWidth = undefined;\n  this._tileHeight = undefined;\n  this._maximumLevel = undefined;\n  this._imageUrlTemplate = undefined;\n  this._imageUrlSubdomains = undefined;\n  this._attributionList = undefined;\n\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(BingMapsImageryProvider.prototype, {\n  /**\n   * Gets the name of the BingMaps server url hosting the imagery.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource.url;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the Bing Maps key.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  key: {\n    get: function () {\n      return this._key;\n    },\n  },\n\n  /**\n   * Gets the type of Bing Maps imagery to load.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {BingMapsStyle}\n   * @readonly\n   */\n  mapStyle: {\n    get: function () {\n      return this._mapStyle;\n    },\n  },\n\n  /**\n   * Gets the additional map layer options as defined in {@link https://learn.microsoft.com/en-us/bingmaps/rest-services/imagery/get-imagery-metadata#template-parameters}/\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  mapLayer: {\n    get: function () {\n      return this._mapLayer;\n    },\n  },\n\n  /**\n   * The culture to use when requesting Bing Maps imagery. Not\n   * all cultures are supported. See {@link http://msdn.microsoft.com/en-us/library/hh441729.aspx}\n   * for information on the supported cultures.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  culture: {\n    get: function () {\n      return this._culture;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._tilingScheme.rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  Setting this property to false reduces memory usage\n   * and texture upload time.\n   * @memberof BingMapsImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return defined(this.mapLayer);\n    },\n  },\n});\n\n/**\n * Creates an {@link ImageryProvider} which provides tiled imagery using the Bing Maps Imagery REST API.\n *\n * @param {Resource|string} url The url of the Bing Maps server hosting the imagery.\n * @param {BingMapsImageryProvider.ConstructorOptions} options Object describing initialization options\n * @returns {Promise<BingMapsImageryProvider>} A promise that resolves to the created BingMapsImageryProvider\n *\n * @example\n * const bing = await Cesium.BingMapsImageryProvider.fromUrl(\n *   \"https://dev.virtualearth.net\", {\n *     key: \"get-yours-at-https://www.bingmapsportal.com/\",\n *     mapStyle: Cesium.BingMapsStyle.AERIAL\n * });\n *\n * @exception {RuntimeError} metadata does not specify one resource in resourceSets\n */\nBingMapsImageryProvider.fromUrl = async function (url, options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  Check.defined(\"options.key\", options.key);\n  //>>includeEnd('debug');\n\n  let tileProtocol = options.tileProtocol;\n\n  // For backward compatibility reasons, the tileProtocol may end with\n  // a `:`. Remove it.\n  if (defined(tileProtocol)) {\n    if (\n      tileProtocol.length > 0 &&\n      tileProtocol[tileProtocol.length - 1] === \":\"\n    ) {\n      tileProtocol = tileProtocol.substr(0, tileProtocol.length - 1);\n    }\n  } else {\n    // use http if the document's protocol is http, otherwise use https\n    const documentProtocol = document.location.protocol;\n    tileProtocol = documentProtocol === \"http:\" ? \"http\" : \"https\";\n  }\n\n  const mapStyle = options.mapStyle ?? BingMapsStyle.AERIAL;\n  const resource = Resource.createIfNeeded(url);\n  resource.appendForwardSlash();\n\n  const queryParameters = {\n    incl: \"ImageryProviders\",\n    key: options.key,\n    uriScheme: tileProtocol,\n  };\n\n  if (defined(options.mapLayer)) {\n    queryParameters.mapLayer = options.mapLayer;\n  }\n\n  if (defined(options.culture)) {\n    queryParameters.culture = options.culture;\n  }\n\n  const metadataResource = resource.getDerivedResource({\n    url: `REST/v1/Imagery/Metadata/${mapStyle}`,\n    queryParameters: queryParameters,\n  });\n\n  const provider = new BingMapsImageryProvider(options);\n  provider._resource = resource;\n  const imageryProviderBuilder = new ImageryProviderBuilder(options);\n  await requestMetadata(metadataResource, imageryProviderBuilder);\n  imageryProviderBuilder.build(provider);\n  return provider;\n};\n\nconst rectangleScratch = new Rectangle();\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nBingMapsImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  const rectangle = this._tilingScheme.tileXYToRectangle(\n    x,\n    y,\n    level,\n    rectangleScratch,\n  );\n  const result = getRectangleAttribution(\n    this._attributionList,\n    level,\n    rectangle,\n  );\n\n  return result;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nBingMapsImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const promise = ImageryProvider.loadImage(\n    this,\n    buildImageResource(this, x, y, level, request),\n  );\n\n  if (defined(promise)) {\n    return promise.catch(function (error) {\n      // One cause of an error here is that the image we tried to load was zero-length.\n      // This isn't actually a problem, since it indicates that there is no tile.\n      // So, in that case we return the EMPTY_IMAGE sentinel value for later discarding.\n      if (defined(error.blob) && error.blob.size === 0) {\n        return DiscardEmptyTilePolicy.EMPTY_IMAGE;\n      }\n      return Promise.reject(error);\n    });\n  }\n\n  return undefined;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nBingMapsImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\n\n/**\n * Converts a tiles (x, y, level) position into a quadkey used to request an image\n * from a Bing Maps server.\n *\n * @param {number} x The tile's x coordinate.\n * @param {number} y The tile's y coordinate.\n * @param {number} level The tile's zoom level.\n *\n * @see {@link http://msdn.microsoft.com/en-us/library/bb259689.aspx|Bing Maps Tile System}\n * @see BingMapsImageryProvider#quadKeyToTileXY\n */\nBingMapsImageryProvider.tileXYToQuadKey = function (x, y, level) {\n  let quadkey = \"\";\n  for (let i = level; i >= 0; --i) {\n    const bitmask = 1 << i;\n    let digit = 0;\n\n    if ((x & bitmask) !== 0) {\n      digit |= 1;\n    }\n\n    if ((y & bitmask) !== 0) {\n      digit |= 2;\n    }\n\n    quadkey += digit;\n  }\n  return quadkey;\n};\n\n/**\n * Converts a tile's quadkey used to request an image from a Bing Maps server into the\n * (x, y, level) position.\n *\n * @param {string} quadkey The tile's quad key\n *\n * @see {@link http://msdn.microsoft.com/en-us/library/bb259689.aspx|Bing Maps Tile System}\n * @see BingMapsImageryProvider#tileXYToQuadKey\n */\nBingMapsImageryProvider.quadKeyToTileXY = function (quadkey) {\n  let x = 0;\n  let y = 0;\n  const level = quadkey.length - 1;\n  for (let i = level; i >= 0; --i) {\n    const bitmask = 1 << i;\n    const digit = +quadkey[level - i];\n\n    if ((digit & 1) !== 0) {\n      x |= bitmask;\n    }\n\n    if ((digit & 2) !== 0) {\n      y |= bitmask;\n    }\n  }\n  return {\n    x: x,\n    y: y,\n    level: level,\n  };\n};\n\nBingMapsImageryProvider._logoUrl = undefined;\n\nObject.defineProperties(BingMapsImageryProvider, {\n  /**\n   * Gets or sets the URL to the Bing logo for display in the credit.\n   * @memberof BingMapsImageryProvider\n   * @type {string}\n   */\n  logoUrl: {\n    get: function () {\n      if (!defined(BingMapsImageryProvider._logoUrl)) {\n        BingMapsImageryProvider._logoUrl = buildModuleUrl(\n          \"Assets/Images/bing_maps_credit.png\",\n        );\n      }\n      return BingMapsImageryProvider._logoUrl;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n\n      BingMapsImageryProvider._logoUrl = value;\n    },\n  },\n});\n\nfunction buildImageResource(imageryProvider, x, y, level, request) {\n  const imageUrl = imageryProvider._imageUrlTemplate;\n\n  const subdomains = imageryProvider._imageUrlSubdomains;\n  const subdomainIndex = (x + y + level) % subdomains.length;\n\n  return imageryProvider._resource.getDerivedResource({\n    url: imageUrl,\n    request: request,\n    templateValues: {\n      quadkey: BingMapsImageryProvider.tileXYToQuadKey(x, y, level),\n      subdomain: subdomains[subdomainIndex],\n      culture: imageryProvider._culture,\n    },\n    queryParameters: {\n      // this parameter tells the Bing servers to send a zero-length response\n      // instead of a placeholder image for missing tiles.\n      n: \"z\",\n    },\n  });\n}\n\nconst intersectionScratch = new Rectangle();\n\nfunction getRectangleAttribution(attributionList, level, rectangle) {\n  // Bing levels start at 1, while ours start at 0.\n  ++level;\n\n  const result = [];\n\n  for (\n    let attributionIndex = 0, attributionLength = attributionList.length;\n    attributionIndex < attributionLength;\n    ++attributionIndex\n  ) {\n    const attribution = attributionList[attributionIndex];\n    const coverageAreas = attribution.coverageAreas;\n\n    let included = false;\n\n    for (\n      let areaIndex = 0, areaLength = attribution.coverageAreas.length;\n      !included && areaIndex < areaLength;\n      ++areaIndex\n    ) {\n      const area = coverageAreas[areaIndex];\n      if (level >= area.zoomMin && level <= area.zoomMax) {\n        const intersection = Rectangle.intersection(\n          rectangle,\n          area.bbox,\n          intersectionScratch,\n        );\n        if (defined(intersection)) {\n          included = true;\n        }\n      }\n    }\n\n    if (included) {\n      result.push(attribution.credit);\n    }\n  }\n\n  return result;\n}\n\n// Exposed for testing\nBingMapsImageryProvider._metadataCache = {};\nexport default BingMapsImageryProvider;\n","/**\n * The types of imagery provided by Bing Maps.\n *\n * @enum {number}\n *\n * @see BingMapsImageryProvider\n */\nconst BingMapsStyle = {\n  /**\n   * Aerial imagery.\n   *\n   * @type {string}\n   * @constant\n   */\n  AERIAL: \"Aerial\",\n\n  /**\n   * Aerial imagery with a road overlay.\n   *\n   * @type {string}\n   * @constant\n   * @deprecated See https://github.com/CesiumGS/cesium/issues/7128.\n   * Use `BingMapsStyle.AERIAL_WITH_LABELS_ON_DEMAND` instead\n   */\n  AERIAL_WITH_LABELS: \"AerialWithLabels\",\n\n  /**\n   * Aerial imagery with a road overlay.\n   *\n   * @type {string}\n   * @constant\n   */\n  AERIAL_WITH_LABELS_ON_DEMAND: \"AerialWithLabelsOnDemand\",\n\n  /**\n   * Roads without additional imagery.\n   *\n   * @type {string}\n   * @constant\n   * @deprecated See https://github.com/CesiumGS/cesium/issues/7128.\n   * Use `BingMapsStyle.ROAD_ON_DEMAND` instead\n   */\n  ROAD: \"Road\",\n\n  /**\n   * Roads without additional imagery.\n   *\n   * @type {string}\n   * @constant\n   */\n  ROAD_ON_DEMAND: \"RoadOnDemand\",\n\n  /**\n   * A dark version of the road maps.\n   *\n   * @type {string}\n   * @constant\n   */\n  CANVAS_DARK: \"CanvasDark\",\n\n  /**\n   * A lighter version of the road maps.\n   *\n   * @type {string}\n   * @constant\n   */\n  CANVAS_LIGHT: \"CanvasLight\",\n\n  /**\n   * A grayscale version of the road maps.\n   *\n   * @type {string}\n   * @constant\n   */\n  CANVAS_GRAY: \"CanvasGray\",\n\n  /**\n   * Ordnance Survey imagery. This imagery is visible only for the London, UK area.\n   *\n   * @type {string}\n   * @constant\n   */\n  ORDNANCE_SURVEY: \"OrdnanceSurvey\",\n\n  /**\n   * Collins Bart imagery.\n   *\n   * @type {string}\n   * @constant\n   */\n  COLLINS_BART: \"CollinsBart\",\n};\nexport default Object.freeze(BingMapsStyle);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines how two pixels' values are combined.\n *\n * @enum {number}\n */\nconst BlendEquation = {\n  /**\n   * Pixel values are added componentwise.  This is used in additive blending for translucency.\n   *\n   * @type {number}\n   * @constant\n   */\n  ADD: WebGLConstants.FUNC_ADD,\n\n  /**\n   * Pixel values are subtracted componentwise (source - destination).  This is used in alpha blending for translucency.\n   *\n   * @type {number}\n   * @constant\n   */\n  SUBTRACT: WebGLConstants.FUNC_SUBTRACT,\n\n  /**\n   * Pixel values are subtracted componentwise (destination - source).\n   *\n   * @type {number}\n   * @constant\n   */\n  REVERSE_SUBTRACT: WebGLConstants.FUNC_REVERSE_SUBTRACT,\n\n  /**\n   * Pixel values are given to the minimum function (min(source, destination)).\n   *\n   * This equation operates on each pixel color component.\n   *\n   * @type {number}\n   * @constant\n   */\n  MIN: WebGLConstants.MIN,\n\n  /**\n   * Pixel values are given to the maximum function (max(source, destination)).\n   *\n   * This equation operates on each pixel color component.\n   *\n   * @type {number}\n   * @constant\n   */\n  MAX: WebGLConstants.MAX,\n};\nexport default Object.freeze(BlendEquation);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines how blending factors are computed.\n *\n * @enum {number}\n */\nconst BlendFunction = {\n  /**\n   * The blend factor is zero.\n   *\n   * @type {number}\n   * @constant\n   */\n  ZERO: WebGLConstants.ZERO,\n\n  /**\n   * The blend factor is one.\n   *\n   * @type {number}\n   * @constant\n   */\n  ONE: WebGLConstants.ONE,\n\n  /**\n   * The blend factor is the source color.\n   *\n   * @type {number}\n   * @constant\n   */\n  SOURCE_COLOR: WebGLConstants.SRC_COLOR,\n\n  /**\n   * The blend factor is one minus the source color.\n   *\n   * @type {number}\n   * @constant\n   */\n  ONE_MINUS_SOURCE_COLOR: WebGLConstants.ONE_MINUS_SRC_COLOR,\n\n  /**\n   * The blend factor is the destination color.\n   *\n   * @type {number}\n   * @constant\n   */\n  DESTINATION_COLOR: WebGLConstants.DST_COLOR,\n\n  /**\n   * The blend factor is one minus the destination color.\n   *\n   * @type {number}\n   * @constant\n   */\n  ONE_MINUS_DESTINATION_COLOR: WebGLConstants.ONE_MINUS_DST_COLOR,\n\n  /**\n   * The blend factor is the source alpha.\n   *\n   * @type {number}\n   * @constant\n   */\n  SOURCE_ALPHA: WebGLConstants.SRC_ALPHA,\n\n  /**\n   * The blend factor is one minus the source alpha.\n   *\n   * @type {number}\n   * @constant\n   */\n  ONE_MINUS_SOURCE_ALPHA: WebGLConstants.ONE_MINUS_SRC_ALPHA,\n\n  /**\n   * The blend factor is the destination alpha.\n   *\n   * @type {number}\n   * @constant\n   */\n  DESTINATION_ALPHA: WebGLConstants.DST_ALPHA,\n\n  /**\n   * The blend factor is one minus the destination alpha.\n   *\n   * @type {number}\n   * @constant\n   */\n  ONE_MINUS_DESTINATION_ALPHA: WebGLConstants.ONE_MINUS_DST_ALPHA,\n\n  /**\n   * The blend factor is the constant color.\n   *\n   * @type {number}\n   * @constant\n   */\n  CONSTANT_COLOR: WebGLConstants.CONSTANT_COLOR,\n\n  /**\n   * The blend factor is one minus the constant color.\n   *\n   * @type {number}\n   * @constant\n   */\n  ONE_MINUS_CONSTANT_COLOR: WebGLConstants.ONE_MINUS_CONSTANT_COLOR,\n\n  /**\n   * The blend factor is the constant alpha.\n   *\n   * @type {number}\n   * @constant\n   */\n  CONSTANT_ALPHA: WebGLConstants.CONSTANT_ALPHA,\n\n  /**\n   * The blend factor is one minus the constant alpha.\n   *\n   * @type {number}\n   * @constant\n   */\n  ONE_MINUS_CONSTANT_ALPHA: WebGLConstants.ONE_MINUS_CONSTANT_ALPHA,\n\n  /**\n   * The blend factor is the saturated source alpha.\n   *\n   * @type {number}\n   * @constant\n   */\n  SOURCE_ALPHA_SATURATE: WebGLConstants.SRC_ALPHA_SATURATE,\n};\nexport default Object.freeze(BlendFunction);\n","/**\n * Determines how opaque and translucent parts of billboards, points, and labels are blended with the scene.\n *\n * @enum {number}\n */\nconst BlendOption = {\n  /**\n   * The billboards, points, or labels in the collection are completely opaque.\n   * @type {number}\n   * @constant\n   */\n  OPAQUE: 0,\n\n  /**\n   * The billboards, points, or labels in the collection are completely translucent.\n   * @type {number}\n   * @constant\n   */\n  TRANSLUCENT: 1,\n\n  /**\n   * The billboards, points, or labels in the collection are both opaque and translucent.\n   * @type {number}\n   * @constant\n   */\n  OPAQUE_AND_TRANSLUCENT: 2,\n};\nexport default Object.freeze(BlendOption);\n","import BlendEquation from \"./BlendEquation.js\";\nimport BlendFunction from \"./BlendFunction.js\";\n\n/**\n * The blending state combines {@link BlendEquation} and {@link BlendFunction} and the\n * <code>enabled</code> flag to define the full blending state for combining source and\n * destination fragments when rendering.\n * <p>\n * This is a helper when using custom render states with {@link Appearance#renderState}.\n * </p>\n *\n * @namespace\n */\nconst BlendingState = {\n  /**\n   * Blending is disabled.\n   *\n   * @type {object}\n   * @constant\n   */\n  DISABLED: Object.freeze({\n    enabled: false,\n  }),\n\n  /**\n   * Blending is enabled using alpha blending, <code>source(source.alpha) + destination(1 - source.alpha)</code>.\n   *\n   * @type {object}\n   * @constant\n   */\n  ALPHA_BLEND: Object.freeze({\n    enabled: true,\n    equationRgb: BlendEquation.ADD,\n    equationAlpha: BlendEquation.ADD,\n    functionSourceRgb: BlendFunction.SOURCE_ALPHA,\n    functionSourceAlpha: BlendFunction.ONE,\n    functionDestinationRgb: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n    functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n  }),\n\n  /**\n   * Blending is enabled using alpha blending with premultiplied alpha, <code>source + destination(1 - source.alpha)</code>.\n   *\n   * @type {object}\n   * @constant\n   */\n  PRE_MULTIPLIED_ALPHA_BLEND: Object.freeze({\n    enabled: true,\n    equationRgb: BlendEquation.ADD,\n    equationAlpha: BlendEquation.ADD,\n    functionSourceRgb: BlendFunction.ONE,\n    functionSourceAlpha: BlendFunction.ONE,\n    functionDestinationRgb: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n    functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n  }),\n\n  /**\n   * Blending is enabled using additive blending, <code>source(source.alpha) + destination</code>.\n   *\n   * @type {object}\n   * @constant\n   */\n  ADDITIVE_BLEND: Object.freeze({\n    enabled: true,\n    equationRgb: BlendEquation.ADD,\n    equationAlpha: BlendEquation.ADD,\n    functionSourceRgb: BlendFunction.SOURCE_ALPHA,\n    functionSourceAlpha: BlendFunction.ONE,\n    functionDestinationRgb: BlendFunction.ONE,\n    functionDestinationAlpha: BlendFunction.ONE,\n  }),\n};\nexport default Object.freeze(BlendingState);\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Utilities for parsing bounding volume semantics from 3D Tiles 1.1 metadata.\n *\n * @namespace BoundingVolumeSemantics\n * @private\n */\nconst BoundingVolumeSemantics = {};\n\n/**\n * Parse the bounding volume-related semantics such as\n * <code>TILE_BOUNDING_BOX</code> and <code>CONTENT_BOUNDING_BOX</code> from\n * implicit tile or content metadata. Results are returned as a JSON object for\n * use when transcoding tiles (see {@link Implicit3DTileContent}).\n * <p>\n * Bounding volumes are checked in the order box, region, then sphere. Only\n * the first valid bounding volume is returned.\n * </p>\n * <p>\n * This handles both tile and content bounding volumes, as the only difference\n * is the prefix. e.g. <code>TILE_BOUNDING_BOX</code> and\n * <code>CONTENT_BOUNDING_BOX</code> have the same memory layout.\n * </p>\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata/Semantics|3D Metadata Semantic Reference} for the various bounding volumes and minimum/maximum heights.\n *\n * @param {string} prefix Either \"TILE\" or \"CONTENT\"\n * @param {TileMetadata|ContentMetadata} metadata The metadata object for looking up values by semantic. In practice, this will typically be a {@link ImplicitMetadataView}\n * @return {object} An object containing the bounding volume, and any minimum or maximum height.\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nBoundingVolumeSemantics.parseAllBoundingVolumeSemantics = function (\n  prefix,\n  metadata,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"prefix\", prefix);\n  if (prefix !== \"TILE\" && prefix !== \"CONTENT\") {\n    throw new DeveloperError(\"prefix must be either 'TILE' or 'CONTENT'\");\n  }\n  Check.typeOf.object(\"metadata\", metadata);\n  //>>includeEnd('debug');\n\n  return {\n    boundingVolume: BoundingVolumeSemantics.parseBoundingVolumeSemantic(\n      prefix,\n      metadata,\n    ),\n    minimumHeight: BoundingVolumeSemantics._parseMinimumHeight(\n      prefix,\n      metadata,\n    ),\n    maximumHeight: BoundingVolumeSemantics._parseMaximumHeight(\n      prefix,\n      metadata,\n    ),\n  };\n};\n\n/**\n * Parse the bounding volume from tile or content metadata. If the metadata\n * specify multiple bounding volumes, only the first one is returned. Bounding\n * volumes are checked in the order box, region, then sphere.\n * <p>\n * This handles both tile and content bounding volumes, as the only difference\n * is the prefix. e.g. <code>TILE_BOUNDING_BOX</code> and\n * <code>CONTENT_BOUNDING_BOX</code> have the same memory layout.\n * </p>\n *\n * @param {string} prefix Either \"TILE\" or \"CONTENT\"\n * @param {TileMetadata|ContentMetadata} metadata The metadata for looking up values\n * @return {object} An object representing the JSON description of the tile or content bounding volume\n * @private\n */\nBoundingVolumeSemantics.parseBoundingVolumeSemantic = function (\n  prefix,\n  metadata,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"prefix\", prefix);\n  if (prefix !== \"TILE\" && prefix !== \"CONTENT\") {\n    throw new DeveloperError(\"prefix must be either 'TILE' or 'CONTENT'\");\n  }\n  Check.typeOf.object(\"metadata\", metadata);\n  //>>includeEnd('debug');\n\n  const boundingBoxSemantic = `${prefix}_BOUNDING_BOX`;\n  const boundingBox = metadata.getPropertyBySemantic(boundingBoxSemantic);\n\n  if (defined(boundingBox)) {\n    return {\n      box: boundingBox,\n    };\n  }\n\n  const boundingRegionSemantic = `${prefix}_BOUNDING_REGION`;\n  const boundingRegion = metadata.getPropertyBySemantic(boundingRegionSemantic);\n\n  if (defined(boundingRegion)) {\n    return {\n      region: boundingRegion,\n    };\n  }\n\n  const boundingSphereSemantic = `${prefix}_BOUNDING_SPHERE`;\n  const boundingSphere = metadata.getPropertyBySemantic(boundingSphereSemantic);\n\n  if (defined(boundingSphere)) {\n    // ARRAY with 4 elements is automatically converted to a Cartesian4\n    return {\n      sphere: boundingSphere,\n    };\n  }\n\n  return undefined;\n};\n\n/**\n * Parse the minimum height from tile or content metadata. This is used for making\n * tighter quadtree bounds for implicit tiling. This works for both\n * <code>TILE_MINIMUM_HEIGHT</code> and <code>CONTENT_MINIMUM_HEIGHT</code>\n *\n * @param {string} prefix Either \"TILE\" or \"CONTENT\"\n * @param {TileMetadata|ContentMetadata} metadata The metadata for looking up values\n * @return {number} The minimum height\n * @private\n */\nBoundingVolumeSemantics._parseMinimumHeight = function (prefix, metadata) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"prefix\", prefix);\n  if (prefix !== \"TILE\" && prefix !== \"CONTENT\") {\n    throw new DeveloperError(\"prefix must be either 'TILE' or 'CONTENT'\");\n  }\n  Check.typeOf.object(\"metadata\", metadata);\n  //>>includeEnd('debug');\n\n  const minimumHeightSemantic = `${prefix}_MINIMUM_HEIGHT`;\n  return metadata.getPropertyBySemantic(minimumHeightSemantic);\n};\n\n/**\n * Parse the maximum height from tile or content metadata. This is used for\n * making tighter quadtree bounds for implicit tiling. This works for both\n * <code>TILE_MAXIMUM_HEIGHT</code> and <code>CONTENT_MAXIMUM_HEIGHT</code>\n *\n * @param {string} prefix Either \"TILE\" or \"CONTENT\"\n * @param {TileMetadata|ContentMetadata} metadata The metadata for looking up values\n * @return {number} The maximum height\n * @private\n */\nBoundingVolumeSemantics._parseMaximumHeight = function (prefix, metadata) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"prefix\", prefix);\n  if (prefix !== \"TILE\" && prefix !== \"CONTENT\") {\n    throw new DeveloperError(\"prefix must be either 'TILE' or 'CONTENT'\");\n  }\n  Check.typeOf.object(\"metadata\", metadata);\n  //>>includeEnd('debug');\n\n  const maximumHeightSemantic = `${prefix}_MAXIMUM_HEIGHT`;\n  return metadata.getPropertyBySemantic(maximumHeightSemantic);\n};\n\nexport default BoundingVolumeSemantics;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\nconst defaultDimensions = new Cartesian3(1.0, 1.0, 1.0);\n\n/**\n * A ParticleEmitter that emits particles within a box.\n * Particles will be positioned randomly within the box and have initial velocities emanating from the center of the box.\n *\n * @alias BoxEmitter\n * @constructor\n *\n * @param {Cartesian3} dimensions The width, height and depth dimensions of the box.\n */\nfunction BoxEmitter(dimensions) {\n  dimensions = dimensions ?? defaultDimensions;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"dimensions\", dimensions);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0.0);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0.0);\n  Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0.0);\n  //>>includeEnd('debug');\n\n  this._dimensions = Cartesian3.clone(dimensions);\n}\n\nObject.defineProperties(BoxEmitter.prototype, {\n  /**\n   * The width, height and depth dimensions of the box in meters.\n   * @memberof BoxEmitter.prototype\n   * @type {Cartesian3}\n   * @default new Cartesian3(1.0, 1.0, 1.0)\n   */\n  dimensions: {\n    get: function () {\n      return this._dimensions;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      Check.typeOf.number.greaterThanOrEquals(\"value.x\", value.x, 0.0);\n      Check.typeOf.number.greaterThanOrEquals(\"value.y\", value.y, 0.0);\n      Check.typeOf.number.greaterThanOrEquals(\"value.z\", value.z, 0.0);\n      //>>includeEnd('debug');\n      Cartesian3.clone(value, this._dimensions);\n    },\n  },\n});\n\nconst scratchHalfDim = new Cartesian3();\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize.\n */\nBoxEmitter.prototype.emit = function (particle) {\n  const dim = this._dimensions;\n  const halfDim = Cartesian3.multiplyByScalar(dim, 0.5, scratchHalfDim);\n\n  const x = CesiumMath.randomBetween(-halfDim.x, halfDim.x);\n  const y = CesiumMath.randomBetween(-halfDim.y, halfDim.y);\n  const z = CesiumMath.randomBetween(-halfDim.z, halfDim.z);\n\n  particle.position = Cartesian3.fromElements(x, y, z, particle.position);\n  particle.velocity = Cartesian3.normalize(\n    particle.position,\n    particle.velocity,\n  );\n};\nexport default BoxEmitter;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport BrdfLutGeneratorFS from \"../Shaders/BrdfLutGeneratorFS.js\";\n\n/**\n * @private\n */\nfunction BrdfLutGenerator() {\n  this._colorTexture = undefined;\n  this._drawCommand = undefined;\n}\n\nObject.defineProperties(BrdfLutGenerator.prototype, {\n  colorTexture: {\n    get: function () {\n      return this._colorTexture;\n    },\n  },\n});\n\nfunction createCommand(generator, context, framebuffer) {\n  const drawCommand = context.createViewportQuadCommand(BrdfLutGeneratorFS, {\n    framebuffer: framebuffer,\n    renderState: RenderState.fromCache({\n      viewport: new BoundingRectangle(0.0, 0.0, 256.0, 256.0),\n    }),\n  });\n\n  generator._drawCommand = drawCommand;\n}\n\nBrdfLutGenerator.prototype.update = function (frameState) {\n  if (!defined(this._colorTexture)) {\n    const context = frameState.context;\n    const colorTexture = new Texture({\n      context: context,\n      width: 256,\n      height: 256,\n      pixelFormat: PixelFormat.RGBA,\n      pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n      sampler: Sampler.NEAREST,\n    });\n\n    this._colorTexture = colorTexture;\n    const framebuffer = new Framebuffer({\n      context: context,\n      colorTextures: [colorTexture],\n      destroyAttachments: false,\n    });\n\n    createCommand(this, context, framebuffer);\n    this._drawCommand.execute(context);\n    framebuffer.destroy();\n    this._drawCommand.shaderProgram =\n      this._drawCommand.shaderProgram &&\n      this._drawCommand.shaderProgram.destroy();\n  }\n};\n\nBrdfLutGenerator.prototype.isDestroyed = function () {\n  return false;\n};\n\nBrdfLutGenerator.prototype.destroy = function () {\n  this._colorTexture = this._colorTexture && this._colorTexture.destroy();\n  return destroyObject(this);\n};\nexport default BrdfLutGenerator;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\n\n/**\n * Loads an embedded or external buffer.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass BufferLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {Uint8Array} [options.typedArray] The typed array containing the embedded buffer contents. Mutually exclusive with options.resource.\n   * @param {Resource} [options.resource] The {@link Resource} pointing to the external buffer. Mutually exclusive with options.typedArray.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   *\n   * @exception {DeveloperError} One of options.typedArray and options.resource must be defined.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const typedArray = options.typedArray;\n    const resource = options.resource;\n    const cacheKey = options.cacheKey;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (defined(typedArray) === defined(resource)) {\n      throw new DeveloperError(\n        \"One of options.typedArray and options.resource must be defined.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    this._typedArray = typedArray;\n    this._resource = resource;\n    this._cacheKey = cacheKey;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof BufferLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The typed array containing the embedded buffer contents.\n   *\n   * @memberof BufferLoader.prototype\n   *\n   * @type {Uint8Array}\n   * @readonly\n   * @private\n   */\n  get typedArray() {\n    return this._typedArray;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<BufferLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    if (defined(this._typedArray)) {\n      this._promise = Promise.resolve(this);\n      return this._promise;\n    }\n\n    this._promise = loadExternalBuffer(this);\n    return this._promise;\n  }\n\n  /**\n   * Exposed for testing\n   * @private\n   */\n  static _fetchArrayBuffer(resource) {\n    return resource.fetchArrayBuffer();\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    this._typedArray = undefined;\n  }\n}\n\nasync function loadExternalBuffer(bufferLoader) {\n  const resource = bufferLoader._resource;\n  bufferLoader._state = ResourceLoaderState.LOADING;\n  try {\n    const arrayBuffer = await BufferLoader._fetchArrayBuffer(resource);\n    if (bufferLoader.isDestroyed()) {\n      return;\n    }\n\n    bufferLoader._typedArray = new Uint8Array(arrayBuffer);\n    bufferLoader._state = ResourceLoaderState.READY;\n    return bufferLoader;\n  } catch (error) {\n    if (bufferLoader.isDestroyed()) {\n      return;\n    }\n\n    bufferLoader._state = ResourceLoaderState.FAILED;\n    const errorMessage = `Failed to load external buffer: ${resource.url}`;\n    throw bufferLoader.getError(errorMessage, error);\n  }\n}\n\nexport default BufferLoader;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidGeodesic from \"../Core/EllipsoidGeodesic.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport HeadingPitchRange from \"../Core/HeadingPitchRange.js\";\nimport HeadingPitchRoll from \"../Core/HeadingPitchRoll.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport CameraFlightPath from \"./CameraFlightPath.js\";\nimport MapMode2D from \"./MapMode2D.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * @typedef {object} DirectionUp\n *\n * An orientation given by a pair of unit vectors\n *\n * @property {Cartesian3} direction The unit \"direction\" vector\n * @property {Cartesian3} up The unit \"up\" vector\n **/\n/**\n * @typedef {object} HeadingPitchRollValues\n *\n * An orientation given by numeric heading, pitch, and roll\n *\n * @property {number} [heading=0.0] The heading in radians\n * @property {number} [pitch=-CesiumMath.PI_OVER_TWO] The pitch in radians\n * @property {number} [roll=0.0] The roll in radians\n **/\n\n/**\n * The camera is defined by a position, orientation, and view frustum.\n * <br /><br />\n * The orientation forms an orthonormal basis with a view, up and right = view x up unit vectors.\n * <br /><br />\n * The viewing frustum is defined by 6 planes.\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\n * define the unit vector normal to the plane, and the w component is the distance of the\n * plane from the origin/camera position.\n *\n * @alias Camera\n *\n * @constructor\n *\n * @param {Scene} scene The scene.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=camera|Cesium Sandcastle Camera Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?id=camera-tutorial|Cesium Sandcastle Camera Tutorial Example}\n * @demo {@link https://cesium.com/learn/cesiumjs-learn/cesiumjs-camera|Camera Tutorial}\n *\n * @example\n * // Create a camera looking down the negative z-axis, positioned at the origin,\n * // with a field of view of 60 degrees, and 1:1 aspect ratio.\n * const camera = new Cesium.Camera(scene);\n * camera.position = new Cesium.Cartesian3();\n * camera.direction = Cesium.Cartesian3.negate(Cesium.Cartesian3.UNIT_Z, new Cesium.Cartesian3());\n * camera.up = Cesium.Cartesian3.clone(Cesium.Cartesian3.UNIT_Y);\n * camera.frustum.fov = Cesium.Math.PI_OVER_THREE;\n * camera.frustum.near = 1.0;\n * camera.frustum.far = 2.0;\n */\nfunction Camera(scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n  this._scene = scene;\n\n  this._transform = Matrix4.clone(Matrix4.IDENTITY);\n  this._invTransform = Matrix4.clone(Matrix4.IDENTITY);\n  this._actualTransform = Matrix4.clone(Matrix4.IDENTITY);\n  this._actualInvTransform = Matrix4.clone(Matrix4.IDENTITY);\n  this._transformChanged = false;\n\n  /**\n   * The position of the camera.\n   *\n   * @type {Cartesian3}\n   */\n  this.position = new Cartesian3();\n  this._position = new Cartesian3();\n  this._positionWC = new Cartesian3();\n  this._positionCartographic = new Cartographic();\n  this._oldPositionWC = undefined;\n\n  /**\n   * The position delta magnitude.\n   *\n   * @private\n   */\n  this.positionWCDeltaMagnitude = 0.0;\n\n  /**\n   * The position delta magnitude last frame.\n   *\n   * @private\n   */\n  this.positionWCDeltaMagnitudeLastFrame = 0.0;\n\n  /**\n   * How long in seconds since the camera has stopped moving\n   *\n   * @private\n   */\n  this.timeSinceMoved = 0.0;\n  this._lastMovedTimestamp = 0.0;\n\n  /**\n   * The view direction of the camera.\n   *\n   * @type {Cartesian3}\n   */\n  this.direction = new Cartesian3();\n  this._direction = new Cartesian3();\n  this._directionWC = new Cartesian3();\n\n  /**\n   * The up direction of the camera.\n   *\n   * @type {Cartesian3}\n   */\n  this.up = new Cartesian3();\n  this._up = new Cartesian3();\n  this._upWC = new Cartesian3();\n\n  /**\n   * The right direction of the camera.\n   *\n   * @type {Cartesian3}\n   */\n  this.right = new Cartesian3();\n  this._right = new Cartesian3();\n  this._rightWC = new Cartesian3();\n\n  /**\n   * The region of space in view.\n   *\n   * @type {PerspectiveFrustum|PerspectiveOffCenterFrustum|OrthographicFrustum}\n   * @default PerspectiveFrustum()\n   *\n   * @see PerspectiveFrustum\n   * @see PerspectiveOffCenterFrustum\n   * @see OrthographicFrustum\n   */\n  this.frustum = new PerspectiveFrustum();\n  this.frustum.aspectRatio =\n    scene.drawingBufferWidth / scene.drawingBufferHeight;\n  this.frustum.fov = CesiumMath.toRadians(60.0);\n\n  /**\n   * The default amount to move the camera when an argument is not\n   * provided to the move methods.\n   * @type {number}\n   * @default 100000.0;\n   */\n  this.defaultMoveAmount = 100000.0;\n  /**\n   * The default amount to rotate the camera when an argument is not\n   * provided to the look methods.\n   * @type {number}\n   * @default Math.PI / 60.0\n   */\n  this.defaultLookAmount = Math.PI / 60.0;\n  /**\n   * The default amount to rotate the camera when an argument is not\n   * provided to the rotate methods.\n   * @type {number}\n   * @default Math.PI / 3600.0\n   */\n  this.defaultRotateAmount = Math.PI / 3600.0;\n  /**\n   * The default amount to move the camera when an argument is not\n   * provided to the zoom methods.\n   * @type {number}\n   * @default 100000.0;\n   */\n  this.defaultZoomAmount = 100000.0;\n  /**\n   * If set, the camera will not be able to rotate past this axis in either direction.\n   * @type {Cartesian3 | undefined}\n   * @default undefined\n   */\n  this.constrainedAxis = undefined;\n  /**\n   * The factor multiplied by the the map size used to determine where to clamp the camera position\n   * when zooming out from the surface. The default is 1.5. Only valid for 2D and the map is rotatable.\n   * @type {number}\n   * @default 1.5\n   */\n  this.maximumZoomFactor = 1.5;\n\n  this._moveStart = new Event();\n  this._moveEnd = new Event();\n\n  this._changed = new Event();\n  this._changedPosition = undefined;\n  this._changedDirection = undefined;\n  this._changedFrustum = undefined;\n  this._changedHeading = undefined;\n  this._changedRoll = undefined;\n\n  /**\n   * The amount the camera has to change before the <code>changed</code> event is raised. The value is a percentage in the [0, 1] range.\n   * @type {number}\n   * @default 0.5\n   */\n  this.percentageChanged = 0.5;\n\n  this._viewMatrix = new Matrix4();\n  this._invViewMatrix = new Matrix4();\n  updateViewMatrix(this);\n\n  this._mode = SceneMode.SCENE3D;\n  this._modeChanged = true;\n  const projection = scene.mapProjection;\n  this._projection = projection;\n  this._maxCoord = projection.project(\n    new Cartographic(Math.PI, CesiumMath.PI_OVER_TWO),\n  );\n  this._max2Dfrustum = undefined;\n\n  // set default view\n  rectangleCameraPosition3D(\n    this,\n    Camera.DEFAULT_VIEW_RECTANGLE,\n    this.position,\n    true,\n  );\n\n  let mag = Cartesian3.magnitude(this.position);\n  mag += mag * Camera.DEFAULT_VIEW_FACTOR;\n  Cartesian3.normalize(this.position, this.position);\n  Cartesian3.multiplyByScalar(this.position, mag, this.position);\n}\n\n/**\n * @private\n */\nCamera.TRANSFORM_2D = new Matrix4(\n  0.0,\n  0.0,\n  1.0,\n  0.0,\n  1.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  1.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  1.0,\n);\n\n/**\n * @private\n */\nCamera.TRANSFORM_2D_INVERSE = Matrix4.inverseTransformation(\n  Camera.TRANSFORM_2D,\n  new Matrix4(),\n);\n\n/**\n * The default rectangle the camera will view on creation.\n * @type Rectangle\n */\nCamera.DEFAULT_VIEW_RECTANGLE = Rectangle.fromDegrees(\n  -95.0,\n  -20.0,\n  -70.0,\n  90.0,\n);\n\n/**\n * A scalar to multiply to the camera position and add it back after setting the camera to view the rectangle.\n * A value of zero means the camera will view the entire {@link Camera#DEFAULT_VIEW_RECTANGLE}, a value greater than zero\n * will move it further away from the extent, and a value less than zero will move it close to the extent.\n * @type {number}\n */\nCamera.DEFAULT_VIEW_FACTOR = 0.5;\n\n/**\n * The default heading/pitch/range that is used when the camera flies to a location that contains a bounding sphere.\n * @type HeadingPitchRange\n */\nCamera.DEFAULT_OFFSET = new HeadingPitchRange(\n  0.0,\n  -CesiumMath.PI_OVER_FOUR,\n  0.0,\n);\n\nfunction updateViewMatrix(camera) {\n  Matrix4.computeView(\n    camera._position,\n    camera._direction,\n    camera._up,\n    camera._right,\n    camera._viewMatrix,\n  );\n  Matrix4.multiply(\n    camera._viewMatrix,\n    camera._actualInvTransform,\n    camera._viewMatrix,\n  );\n  Matrix4.inverseTransformation(camera._viewMatrix, camera._invViewMatrix);\n}\n\nfunction updateCameraDeltas(camera) {\n  if (!defined(camera._oldPositionWC)) {\n    camera._oldPositionWC = Cartesian3.clone(\n      camera.positionWC,\n      camera._oldPositionWC,\n    );\n  } else {\n    camera.positionWCDeltaMagnitudeLastFrame = camera.positionWCDeltaMagnitude;\n    const delta = Cartesian3.subtract(\n      camera.positionWC,\n      camera._oldPositionWC,\n      camera._oldPositionWC,\n    );\n    camera.positionWCDeltaMagnitude = Cartesian3.magnitude(delta);\n    camera._oldPositionWC = Cartesian3.clone(\n      camera.positionWC,\n      camera._oldPositionWC,\n    );\n\n    // Update move timers\n    if (camera.positionWCDeltaMagnitude > 0.0) {\n      camera.timeSinceMoved = 0.0;\n      camera._lastMovedTimestamp = getTimestamp();\n    } else {\n      camera.timeSinceMoved =\n        Math.max(getTimestamp() - camera._lastMovedTimestamp, 0.0) / 1000.0;\n    }\n  }\n}\n\n/**\n * Checks if there's a camera flight with preload for this camera.\n *\n * @returns {boolean} Whether or not this camera has a current flight with a valid preloadFlightCamera in scene.\n *\n * @private\n *\n */\nCamera.prototype.canPreloadFlight = function () {\n  return defined(this._currentFlight) && this._mode !== SceneMode.SCENE2D;\n};\n\nCamera.prototype._updateCameraChanged = function () {\n  const camera = this;\n\n  updateCameraDeltas(camera);\n\n  if (camera._changed.numberOfListeners === 0) {\n    return;\n  }\n\n  const percentageChanged = camera.percentageChanged;\n\n  // check heading\n  const currentHeading = camera.heading;\n\n  if (!defined(camera._changedHeading)) {\n    camera._changedHeading = currentHeading;\n  }\n\n  let headingDelta =\n    Math.abs(camera._changedHeading - currentHeading) % CesiumMath.TWO_PI;\n  headingDelta =\n    headingDelta > CesiumMath.PI\n      ? CesiumMath.TWO_PI - headingDelta\n      : headingDelta;\n\n  // Since delta is computed as the shortest distance between two angles\n  // the percentage is relative to the half circle.\n  const headingChangedPercentage = headingDelta / Math.PI;\n\n  if (headingChangedPercentage > percentageChanged) {\n    camera._changedHeading = currentHeading;\n  }\n\n  // check roll\n  const currentRoll = camera.roll;\n\n  if (!defined(camera._changedRoll)) {\n    camera._changedRoll = currentRoll;\n  }\n\n  let rollDelta =\n    Math.abs(camera._changedRoll - currentRoll) % CesiumMath.TWO_PI;\n  rollDelta =\n    rollDelta > CesiumMath.PI ? CesiumMath.TWO_PI - rollDelta : rollDelta;\n\n  // Since delta is computed as the shortest distance between two angles\n  // the percentage is relative to the half circle.\n  const rollChangedPercentage = rollDelta / Math.PI;\n\n  if (rollChangedPercentage > percentageChanged) {\n    camera._changedRoll = currentRoll;\n  }\n  if (\n    rollChangedPercentage > percentageChanged ||\n    headingChangedPercentage > percentageChanged\n  ) {\n    camera._changed.raiseEvent(\n      Math.max(rollChangedPercentage, headingChangedPercentage),\n    );\n  }\n  if (camera._mode === SceneMode.SCENE2D) {\n    if (!defined(camera._changedFrustum)) {\n      camera._changedPosition = Cartesian3.clone(\n        camera.position,\n        camera._changedPosition,\n      );\n      camera._changedFrustum = camera.frustum.clone();\n      return;\n    }\n\n    const position = camera.position;\n    const lastPosition = camera._changedPosition;\n\n    const frustum = camera.frustum;\n    const lastFrustum = camera._changedFrustum;\n\n    const x0 = position.x + frustum.left;\n    const x1 = position.x + frustum.right;\n    const x2 = lastPosition.x + lastFrustum.left;\n    const x3 = lastPosition.x + lastFrustum.right;\n\n    const y0 = position.y + frustum.bottom;\n    const y1 = position.y + frustum.top;\n    const y2 = lastPosition.y + lastFrustum.bottom;\n    const y3 = lastPosition.y + lastFrustum.top;\n\n    const leftX = Math.max(x0, x2);\n    const rightX = Math.min(x1, x3);\n    const bottomY = Math.max(y0, y2);\n    const topY = Math.min(y1, y3);\n\n    let areaPercentage;\n    if (leftX >= rightX || bottomY >= y1) {\n      areaPercentage = 1.0;\n    } else {\n      let areaRef = lastFrustum;\n      if (x0 < x2 && x1 > x3 && y0 < y2 && y1 > y3) {\n        areaRef = frustum;\n      }\n      areaPercentage =\n        1.0 -\n        ((rightX - leftX) * (topY - bottomY)) /\n          ((areaRef.right - areaRef.left) * (areaRef.top - areaRef.bottom));\n    }\n\n    if (areaPercentage > percentageChanged) {\n      camera._changed.raiseEvent(areaPercentage);\n      camera._changedPosition = Cartesian3.clone(\n        camera.position,\n        camera._changedPosition,\n      );\n      camera._changedFrustum = camera.frustum.clone(camera._changedFrustum);\n    }\n    return;\n  }\n\n  if (!defined(camera._changedDirection)) {\n    camera._changedPosition = Cartesian3.clone(\n      camera.positionWC,\n      camera._changedPosition,\n    );\n    camera._changedDirection = Cartesian3.clone(\n      camera.directionWC,\n      camera._changedDirection,\n    );\n    return;\n  }\n\n  const dirAngle = CesiumMath.acosClamped(\n    Cartesian3.dot(camera.directionWC, camera._changedDirection),\n  );\n\n  let dirPercentage;\n  if (defined(camera.frustum.fovy)) {\n    dirPercentage = dirAngle / (camera.frustum.fovy * 0.5);\n  } else {\n    dirPercentage = dirAngle;\n  }\n\n  const distance = Cartesian3.distance(\n    camera.positionWC,\n    camera._changedPosition,\n  );\n  const heightPercentage = distance / camera.positionCartographic.height;\n\n  if (\n    dirPercentage > percentageChanged ||\n    heightPercentage > percentageChanged\n  ) {\n    camera._changed.raiseEvent(Math.max(dirPercentage, heightPercentage));\n    camera._changedPosition = Cartesian3.clone(\n      camera.positionWC,\n      camera._changedPosition,\n    );\n    camera._changedDirection = Cartesian3.clone(\n      camera.directionWC,\n      camera._changedDirection,\n    );\n  }\n};\n\nfunction convertTransformForColumbusView(camera) {\n  Transforms.basisTo2D(\n    camera._projection,\n    camera._transform,\n    camera._actualTransform,\n  );\n}\n\nconst scratchCartographic = new Cartographic();\nconst scratchCartesian3Projection = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\nconst scratchCartesian4Origin = new Cartesian4();\nconst scratchCartesian4NewOrigin = new Cartesian4();\nconst scratchCartesian4NewXAxis = new Cartesian4();\nconst scratchCartesian4NewYAxis = new Cartesian4();\nconst scratchCartesian4NewZAxis = new Cartesian4();\n\nfunction convertTransformFor2D(camera) {\n  const projection = camera._projection;\n  const ellipsoid = projection.ellipsoid;\n\n  const origin = Matrix4.getColumn(\n    camera._transform,\n    3,\n    scratchCartesian4Origin,\n  );\n  const cartographic = ellipsoid.cartesianToCartographic(\n    origin,\n    scratchCartographic,\n  );\n\n  const projectedPosition = projection.project(\n    cartographic,\n    scratchCartesian3Projection,\n  );\n  const newOrigin = scratchCartesian4NewOrigin;\n  newOrigin.x = projectedPosition.z;\n  newOrigin.y = projectedPosition.x;\n  newOrigin.z = projectedPosition.y;\n  newOrigin.w = 1.0;\n\n  const newZAxis = Cartesian4.clone(\n    Cartesian4.UNIT_X,\n    scratchCartesian4NewZAxis,\n  );\n\n  const xAxis = Cartesian4.add(\n    Matrix4.getColumn(camera._transform, 0, scratchCartesian3),\n    origin,\n    scratchCartesian3,\n  );\n  ellipsoid.cartesianToCartographic(xAxis, cartographic);\n\n  projection.project(cartographic, projectedPosition);\n  const newXAxis = scratchCartesian4NewXAxis;\n  newXAxis.x = projectedPosition.z;\n  newXAxis.y = projectedPosition.x;\n  newXAxis.z = projectedPosition.y;\n  newXAxis.w = 0.0;\n\n  Cartesian3.subtract(newXAxis, newOrigin, newXAxis);\n  newXAxis.x = 0.0;\n\n  const newYAxis = scratchCartesian4NewYAxis;\n  if (Cartesian3.magnitudeSquared(newXAxis) > CesiumMath.EPSILON10) {\n    Cartesian3.cross(newZAxis, newXAxis, newYAxis);\n  } else {\n    const yAxis = Cartesian4.add(\n      Matrix4.getColumn(camera._transform, 1, scratchCartesian3),\n      origin,\n      scratchCartesian3,\n    );\n    ellipsoid.cartesianToCartographic(yAxis, cartographic);\n\n    projection.project(cartographic, projectedPosition);\n    newYAxis.x = projectedPosition.z;\n    newYAxis.y = projectedPosition.x;\n    newYAxis.z = projectedPosition.y;\n    newYAxis.w = 0.0;\n\n    Cartesian3.subtract(newYAxis, newOrigin, newYAxis);\n    newYAxis.x = 0.0;\n\n    if (Cartesian3.magnitudeSquared(newYAxis) < CesiumMath.EPSILON10) {\n      Cartesian4.clone(Cartesian4.UNIT_Y, newXAxis);\n      Cartesian4.clone(Cartesian4.UNIT_Z, newYAxis);\n    }\n  }\n\n  Cartesian3.cross(newYAxis, newZAxis, newXAxis);\n  Cartesian3.normalize(newXAxis, newXAxis);\n  Cartesian3.cross(newZAxis, newXAxis, newYAxis);\n  Cartesian3.normalize(newYAxis, newYAxis);\n\n  Matrix4.setColumn(\n    camera._actualTransform,\n    0,\n    newXAxis,\n    camera._actualTransform,\n  );\n  Matrix4.setColumn(\n    camera._actualTransform,\n    1,\n    newYAxis,\n    camera._actualTransform,\n  );\n  Matrix4.setColumn(\n    camera._actualTransform,\n    2,\n    newZAxis,\n    camera._actualTransform,\n  );\n  Matrix4.setColumn(\n    camera._actualTransform,\n    3,\n    newOrigin,\n    camera._actualTransform,\n  );\n}\n\nconst scratchCartesian = new Cartesian3();\n\nfunction updateMembers(camera) {\n  const mode = camera._mode;\n\n  let heightChanged = false;\n  let height = 0.0;\n  if (mode === SceneMode.SCENE2D) {\n    height = camera.frustum.right - camera.frustum.left;\n    heightChanged = height !== camera._positionCartographic.height;\n  }\n\n  let position = camera._position;\n  const positionChanged =\n    !Cartesian3.equals(position, camera.position) || heightChanged;\n  if (positionChanged) {\n    position = Cartesian3.clone(camera.position, camera._position);\n  }\n\n  let direction = camera._direction;\n  const directionChanged = !Cartesian3.equals(direction, camera.direction);\n  if (directionChanged) {\n    Cartesian3.normalize(camera.direction, camera.direction);\n    direction = Cartesian3.clone(camera.direction, camera._direction);\n  }\n\n  let up = camera._up;\n  const upChanged = !Cartesian3.equals(up, camera.up);\n  if (upChanged) {\n    Cartesian3.normalize(camera.up, camera.up);\n    up = Cartesian3.clone(camera.up, camera._up);\n  }\n\n  let right = camera._right;\n  const rightChanged = !Cartesian3.equals(right, camera.right);\n  if (rightChanged) {\n    Cartesian3.normalize(camera.right, camera.right);\n    right = Cartesian3.clone(camera.right, camera._right);\n  }\n\n  const transformChanged = camera._transformChanged || camera._modeChanged;\n  camera._transformChanged = false;\n\n  if (transformChanged) {\n    Matrix4.inverseTransformation(camera._transform, camera._invTransform);\n\n    if (\n      camera._mode === SceneMode.COLUMBUS_VIEW ||\n      camera._mode === SceneMode.SCENE2D\n    ) {\n      if (Matrix4.equals(Matrix4.IDENTITY, camera._transform)) {\n        Matrix4.clone(Camera.TRANSFORM_2D, camera._actualTransform);\n      } else if (camera._mode === SceneMode.COLUMBUS_VIEW) {\n        convertTransformForColumbusView(camera);\n      } else {\n        convertTransformFor2D(camera);\n      }\n    } else {\n      Matrix4.clone(camera._transform, camera._actualTransform);\n    }\n\n    Matrix4.inverseTransformation(\n      camera._actualTransform,\n      camera._actualInvTransform,\n    );\n\n    camera._modeChanged = false;\n  }\n\n  const transform = camera._actualTransform;\n\n  if (positionChanged || transformChanged) {\n    camera._positionWC = Matrix4.multiplyByPoint(\n      transform,\n      position,\n      camera._positionWC,\n    );\n\n    // Compute the Cartographic position of the camera.\n    if (mode === SceneMode.SCENE3D || mode === SceneMode.MORPHING) {\n      camera._positionCartographic =\n        camera._projection.ellipsoid.cartesianToCartographic(\n          camera._positionWC,\n          camera._positionCartographic,\n        );\n    } else {\n      // The camera position is expressed in the 2D coordinate system where the Y axis is to the East,\n      // the Z axis is to the North, and the X axis is out of the map.  Express them instead in the ENU axes where\n      // X is to the East, Y is to the North, and Z is out of the local horizontal plane.\n      const positionENU = scratchCartesian;\n      positionENU.x = camera._positionWC.y;\n      positionENU.y = camera._positionWC.z;\n      positionENU.z = camera._positionWC.x;\n\n      // In 2D, the camera height is always 12.7 million meters.\n      // The apparent height is equal to half the frustum width.\n      if (mode === SceneMode.SCENE2D) {\n        positionENU.z = height;\n      }\n\n      camera._projection.unproject(positionENU, camera._positionCartographic);\n    }\n  }\n\n  if (directionChanged || upChanged || rightChanged) {\n    const det = Cartesian3.dot(\n      direction,\n      Cartesian3.cross(up, right, scratchCartesian),\n    );\n    if (Math.abs(1.0 - det) > CesiumMath.EPSILON2) {\n      //orthonormalize axes\n      const invUpMag = 1.0 / Cartesian3.magnitudeSquared(up);\n      const scalar = Cartesian3.dot(up, direction) * invUpMag;\n      const w0 = Cartesian3.multiplyByScalar(\n        direction,\n        scalar,\n        scratchCartesian,\n      );\n      up = Cartesian3.normalize(\n        Cartesian3.subtract(up, w0, camera._up),\n        camera._up,\n      );\n      Cartesian3.clone(up, camera.up);\n\n      right = Cartesian3.cross(direction, up, camera._right);\n      Cartesian3.clone(right, camera.right);\n    }\n  }\n\n  if (directionChanged || transformChanged) {\n    camera._directionWC = Matrix4.multiplyByPointAsVector(\n      transform,\n      direction,\n      camera._directionWC,\n    );\n    Cartesian3.normalize(camera._directionWC, camera._directionWC);\n  }\n\n  if (upChanged || transformChanged) {\n    camera._upWC = Matrix4.multiplyByPointAsVector(transform, up, camera._upWC);\n    Cartesian3.normalize(camera._upWC, camera._upWC);\n  }\n\n  if (rightChanged || transformChanged) {\n    camera._rightWC = Matrix4.multiplyByPointAsVector(\n      transform,\n      right,\n      camera._rightWC,\n    );\n    Cartesian3.normalize(camera._rightWC, camera._rightWC);\n  }\n\n  if (\n    positionChanged ||\n    directionChanged ||\n    upChanged ||\n    rightChanged ||\n    transformChanged\n  ) {\n    updateViewMatrix(camera);\n  }\n}\n\nfunction getHeading(direction, up) {\n  let heading;\n  if (\n    !CesiumMath.equalsEpsilon(Math.abs(direction.z), 1.0, CesiumMath.EPSILON3)\n  ) {\n    heading = Math.atan2(direction.y, direction.x) - CesiumMath.PI_OVER_TWO;\n  } else {\n    heading = Math.atan2(up.y, up.x) - CesiumMath.PI_OVER_TWO;\n  }\n\n  return CesiumMath.TWO_PI - CesiumMath.zeroToTwoPi(heading);\n}\n\nfunction getPitch(direction) {\n  return CesiumMath.PI_OVER_TWO - CesiumMath.acosClamped(direction.z);\n}\n\nfunction getRoll(direction, up, right) {\n  let roll = 0.0;\n  if (\n    !CesiumMath.equalsEpsilon(Math.abs(direction.z), 1.0, CesiumMath.EPSILON3)\n  ) {\n    roll = Math.atan2(-right.z, up.z);\n    roll = CesiumMath.zeroToTwoPi(roll + CesiumMath.TWO_PI);\n  }\n\n  return roll;\n}\n\nconst scratchHPRMatrix1 = new Matrix4();\nconst scratchHPRMatrix2 = new Matrix4();\n\nObject.defineProperties(Camera.prototype, {\n  /**\n   * Gets the camera's reference frame. The inverse of this transformation is appended to the view matrix.\n   * @memberof Camera.prototype\n   *\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @default {@link Matrix4.IDENTITY}\n   */\n  transform: {\n    get: function () {\n      return this._transform;\n    },\n  },\n\n  /**\n   * Gets the inverse camera transform.\n   * @memberof Camera.prototype\n   *\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @default {@link Matrix4.IDENTITY}\n   */\n  inverseTransform: {\n    get: function () {\n      updateMembers(this);\n      return this._invTransform;\n    },\n  },\n\n  /**\n   * Gets the view matrix.\n   * @memberof Camera.prototype\n   *\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @see Camera#inverseViewMatrix\n   */\n  viewMatrix: {\n    get: function () {\n      updateMembers(this);\n      return this._viewMatrix;\n    },\n  },\n\n  /**\n   * Gets the inverse view matrix.\n   * @memberof Camera.prototype\n   *\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @see Camera#viewMatrix\n   */\n  inverseViewMatrix: {\n    get: function () {\n      updateMembers(this);\n      return this._invViewMatrix;\n    },\n  },\n\n  /**\n   * Gets the {@link Cartographic} position of the camera, with longitude and latitude\n   * expressed in radians and height in meters.  In 2D and Columbus View, it is possible\n   * for the returned longitude and latitude to be outside the range of valid longitudes\n   * and latitudes when the camera is outside the map.\n   * @memberof Camera.prototype\n   *\n   * @type {Cartographic}\n   * @readonly\n   */\n  positionCartographic: {\n    get: function () {\n      updateMembers(this);\n      return this._positionCartographic;\n    },\n  },\n\n  /**\n   * Gets the position of the camera in world coordinates.\n   * @memberof Camera.prototype\n   *\n   * @type {Cartesian3}\n   * @readonly\n   */\n  positionWC: {\n    get: function () {\n      updateMembers(this);\n      return this._positionWC;\n    },\n  },\n\n  /**\n   * Gets the view direction of the camera in world coordinates.\n   * @memberof Camera.prototype\n   *\n   * @type {Cartesian3}\n   * @readonly\n   */\n  directionWC: {\n    get: function () {\n      updateMembers(this);\n      return this._directionWC;\n    },\n  },\n\n  /**\n   * Gets the up direction of the camera in world coordinates.\n   * @memberof Camera.prototype\n   *\n   * @type {Cartesian3}\n   * @readonly\n   */\n  upWC: {\n    get: function () {\n      updateMembers(this);\n      return this._upWC;\n    },\n  },\n\n  /**\n   * Gets the right direction of the camera in world coordinates.\n   * @memberof Camera.prototype\n   *\n   * @type {Cartesian3}\n   * @readonly\n   */\n  rightWC: {\n    get: function () {\n      updateMembers(this);\n      return this._rightWC;\n    },\n  },\n\n  /**\n   * Gets the camera heading in radians.\n   * @memberof Camera.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  heading: {\n    get: function () {\n      if (this._mode !== SceneMode.MORPHING) {\n        const ellipsoid = this._projection.ellipsoid;\n\n        const oldTransform = Matrix4.clone(this._transform, scratchHPRMatrix1);\n        const transform = Transforms.eastNorthUpToFixedFrame(\n          this.positionWC,\n          ellipsoid,\n          scratchHPRMatrix2,\n        );\n        this._setTransform(transform);\n\n        const heading = getHeading(this.direction, this.up);\n\n        this._setTransform(oldTransform);\n\n        return heading;\n      }\n\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the camera pitch in radians.\n   * @memberof Camera.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  pitch: {\n    get: function () {\n      if (this._mode !== SceneMode.MORPHING) {\n        const ellipsoid = this._projection.ellipsoid;\n\n        const oldTransform = Matrix4.clone(this._transform, scratchHPRMatrix1);\n        const transform = Transforms.eastNorthUpToFixedFrame(\n          this.positionWC,\n          ellipsoid,\n          scratchHPRMatrix2,\n        );\n        this._setTransform(transform);\n\n        const pitch = getPitch(this.direction);\n\n        this._setTransform(oldTransform);\n\n        return pitch;\n      }\n\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the camera roll in radians.\n   * @memberof Camera.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  roll: {\n    get: function () {\n      if (this._mode !== SceneMode.MORPHING) {\n        const ellipsoid = this._projection.ellipsoid;\n\n        const oldTransform = Matrix4.clone(this._transform, scratchHPRMatrix1);\n        const transform = Transforms.eastNorthUpToFixedFrame(\n          this.positionWC,\n          ellipsoid,\n          scratchHPRMatrix2,\n        );\n        this._setTransform(transform);\n\n        const roll = getRoll(this.direction, this.up, this.right);\n\n        this._setTransform(oldTransform);\n\n        return roll;\n      }\n\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised at when the camera starts to move.\n   * @memberof Camera.prototype\n   * @type {Event}\n   * @readonly\n   */\n  moveStart: {\n    get: function () {\n      return this._moveStart;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised when the camera has stopped moving.\n   * @memberof Camera.prototype\n   * @type {Event}\n   * @readonly\n   */\n  moveEnd: {\n    get: function () {\n      return this._moveEnd;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised when the camera has changed by <code>percentageChanged</code>.\n   * @memberof Camera.prototype\n   * @type {Event}\n   * @readonly\n   */\n  changed: {\n    get: function () {\n      return this._changed;\n    },\n  },\n});\n\n/**\n * @private\n */\nCamera.prototype.update = function (mode) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(mode)) {\n    throw new DeveloperError(\"mode is required.\");\n  }\n  if (\n    mode === SceneMode.SCENE2D &&\n    !(this.frustum instanceof OrthographicOffCenterFrustum)\n  ) {\n    throw new DeveloperError(\n      \"An OrthographicOffCenterFrustum is required in 2D.\",\n    );\n  }\n  if (\n    (mode === SceneMode.SCENE3D || mode === SceneMode.COLUMBUS_VIEW) &&\n    !(this.frustum instanceof PerspectiveFrustum) &&\n    !(this.frustum instanceof OrthographicFrustum)\n  ) {\n    throw new DeveloperError(\n      \"A PerspectiveFrustum or OrthographicFrustum is required in 3D and Columbus view\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let updateFrustum = false;\n  if (mode !== this._mode) {\n    this._mode = mode;\n    this._modeChanged = mode !== SceneMode.MORPHING;\n    updateFrustum = this._mode === SceneMode.SCENE2D;\n  }\n\n  if (updateFrustum) {\n    const frustum = (this._max2Dfrustum = this.frustum.clone());\n\n    //>>includeStart('debug', pragmas.debug);\n    if (!(frustum instanceof OrthographicOffCenterFrustum)) {\n      throw new DeveloperError(\n        \"The camera frustum is expected to be orthographic for 2D camera control.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const maxZoomOut = 2.0;\n    const ratio = frustum.top / frustum.right;\n    frustum.right = this._maxCoord.x * maxZoomOut;\n    frustum.left = -frustum.right;\n    frustum.top = ratio * frustum.right;\n    frustum.bottom = -frustum.top;\n  }\n\n  if (this._mode === SceneMode.SCENE2D) {\n    clampMove2D(this, this.position);\n  }\n};\n\nconst setTransformPosition = new Cartesian3();\nconst setTransformUp = new Cartesian3();\nconst setTransformDirection = new Cartesian3();\n\nCamera.prototype._setTransform = function (transform) {\n  const position = Cartesian3.clone(this.positionWC, setTransformPosition);\n  const up = Cartesian3.clone(this.upWC, setTransformUp);\n  const direction = Cartesian3.clone(this.directionWC, setTransformDirection);\n\n  Matrix4.clone(transform, this._transform);\n  this._transformChanged = true;\n  updateMembers(this);\n  const inverse = this._actualInvTransform;\n\n  Matrix4.multiplyByPoint(inverse, position, this.position);\n  Matrix4.multiplyByPointAsVector(inverse, direction, this.direction);\n  Matrix4.multiplyByPointAsVector(inverse, up, this.up);\n  Cartesian3.cross(this.direction, this.up, this.right);\n\n  updateMembers(this);\n};\n\nconst scratchAdjustOrthographicFrustumMousePosition = new Cartesian2();\nconst scratchPickRay = new Ray();\nconst scratchRayIntersection = new Cartesian3();\nconst scratchDepthIntersection = new Cartesian3();\n\nfunction calculateOrthographicFrustumWidth(camera) {\n  // Camera is fixed to an object, so keep frustum width constant.\n  if (!Matrix4.equals(Matrix4.IDENTITY, camera.transform)) {\n    return Cartesian3.magnitude(camera.position);\n  }\n\n  const scene = camera._scene;\n  const globe = scene.globe;\n\n  const mousePosition = scratchAdjustOrthographicFrustumMousePosition;\n  mousePosition.x = scene.drawingBufferWidth / scene.pixelRatio / 2.0;\n  mousePosition.y = scene.drawingBufferHeight / scene.pixelRatio / 2.0;\n\n  let rayIntersection;\n  if (defined(globe)) {\n    const ray = camera.getPickRay(mousePosition, scratchPickRay);\n    rayIntersection = globe.pickWorldCoordinates(\n      ray,\n      scene,\n      true,\n      scratchRayIntersection,\n    );\n  }\n\n  let depthIntersection;\n  if (scene.pickPositionSupported) {\n    depthIntersection = scene.pickPositionWorldCoordinates(\n      mousePosition,\n      scratchDepthIntersection,\n    );\n  }\n\n  let distance;\n  if (defined(rayIntersection) || defined(depthIntersection)) {\n    const depthDistance = defined(depthIntersection)\n      ? Cartesian3.distance(depthIntersection, camera.positionWC)\n      : Number.POSITIVE_INFINITY;\n    const rayDistance = defined(rayIntersection)\n      ? Cartesian3.distance(rayIntersection, camera.positionWC)\n      : Number.POSITIVE_INFINITY;\n    distance = Math.min(depthDistance, rayDistance);\n  } else {\n    distance = Math.max(camera.positionCartographic.height, 0.0);\n  }\n  return distance;\n}\n\nCamera.prototype._adjustOrthographicFrustum = function (zooming) {\n  if (!(this.frustum instanceof OrthographicFrustum)) {\n    return;\n  }\n\n  if (!zooming && this._positionCartographic.height < 150000.0) {\n    return;\n  }\n\n  this.frustum.width = calculateOrthographicFrustumWidth(this);\n};\n\nconst scratchSetViewCartesian = new Cartesian3();\nconst scratchSetViewTransform1 = new Matrix4();\nconst scratchSetViewTransform2 = new Matrix4();\nconst scratchSetViewQuaternion = new Quaternion();\nconst scratchSetViewMatrix3 = new Matrix3();\nconst scratchSetViewCartographic = new Cartographic();\n\nfunction setView3D(camera, position, hpr) {\n  //>>includeStart('debug', pragmas.debug);\n  if (isNaN(position.x) || isNaN(position.y) || isNaN(position.z)) {\n    throw new DeveloperError(\"position has a NaN component\");\n  }\n  //>>includeEnd('debug');\n  const currentTransform = Matrix4.clone(\n    camera.transform,\n    scratchSetViewTransform1,\n  );\n  const localTransform = Transforms.eastNorthUpToFixedFrame(\n    position,\n    camera._projection.ellipsoid,\n    scratchSetViewTransform2,\n  );\n  camera._setTransform(localTransform);\n\n  Cartesian3.clone(Cartesian3.ZERO, camera.position);\n  hpr.heading = hpr.heading - CesiumMath.PI_OVER_TWO;\n\n  const rotQuat = Quaternion.fromHeadingPitchRoll(\n    hpr,\n    scratchSetViewQuaternion,\n  );\n  const rotMat = Matrix3.fromQuaternion(rotQuat, scratchSetViewMatrix3);\n\n  Matrix3.getColumn(rotMat, 0, camera.direction);\n  Matrix3.getColumn(rotMat, 2, camera.up);\n  Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n  camera._setTransform(currentTransform);\n\n  camera._adjustOrthographicFrustum(true);\n}\n\nfunction setViewCV(camera, position, hpr, convert) {\n  const currentTransform = Matrix4.clone(\n    camera.transform,\n    scratchSetViewTransform1,\n  );\n  camera._setTransform(Matrix4.IDENTITY);\n\n  if (!Cartesian3.equals(position, camera.positionWC)) {\n    if (convert) {\n      const projection = camera._projection;\n      const cartographic = projection.ellipsoid.cartesianToCartographic(\n        position,\n        scratchSetViewCartographic,\n      );\n      position = projection.project(cartographic, scratchSetViewCartesian);\n    }\n    Cartesian3.clone(position, camera.position);\n  }\n  hpr.heading = hpr.heading - CesiumMath.PI_OVER_TWO;\n\n  const rotQuat = Quaternion.fromHeadingPitchRoll(\n    hpr,\n    scratchSetViewQuaternion,\n  );\n  const rotMat = Matrix3.fromQuaternion(rotQuat, scratchSetViewMatrix3);\n\n  Matrix3.getColumn(rotMat, 0, camera.direction);\n  Matrix3.getColumn(rotMat, 2, camera.up);\n  Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n  camera._setTransform(currentTransform);\n\n  camera._adjustOrthographicFrustum(true);\n}\n\nfunction setView2D(camera, position, hpr, convert) {\n  const currentTransform = Matrix4.clone(\n    camera.transform,\n    scratchSetViewTransform1,\n  );\n  camera._setTransform(Matrix4.IDENTITY);\n\n  if (!Cartesian3.equals(position, camera.positionWC)) {\n    if (convert) {\n      const projection = camera._projection;\n      const cartographic = projection.ellipsoid.cartesianToCartographic(\n        position,\n        scratchSetViewCartographic,\n      );\n      position = projection.project(cartographic, scratchSetViewCartesian);\n    }\n\n    Cartesian2.clone(position, camera.position);\n\n    const newLeft = -position.z * 0.5;\n    const newRight = -newLeft;\n\n    const frustum = camera.frustum;\n    if (newRight > newLeft) {\n      const ratio = frustum.top / frustum.right;\n      frustum.right = newRight;\n      frustum.left = newLeft;\n      frustum.top = frustum.right * ratio;\n      frustum.bottom = -frustum.top;\n    }\n  }\n\n  if (camera._scene.mapMode2D === MapMode2D.ROTATE) {\n    hpr.heading = hpr.heading - CesiumMath.PI_OVER_TWO;\n    hpr.pitch = -CesiumMath.PI_OVER_TWO;\n    hpr.roll = 0.0;\n    const rotQuat = Quaternion.fromHeadingPitchRoll(\n      hpr,\n      scratchSetViewQuaternion,\n    );\n    const rotMat = Matrix3.fromQuaternion(rotQuat, scratchSetViewMatrix3);\n\n    Matrix3.getColumn(rotMat, 2, camera.up);\n    Cartesian3.cross(camera.direction, camera.up, camera.right);\n  }\n\n  camera._setTransform(currentTransform);\n}\n\nconst scratchToHPRDirection = new Cartesian3();\nconst scratchToHPRUp = new Cartesian3();\nconst scratchToHPRRight = new Cartesian3();\n\nfunction directionUpToHeadingPitchRoll(camera, position, orientation, result) {\n  const direction = Cartesian3.clone(\n    orientation.direction,\n    scratchToHPRDirection,\n  );\n  const up = Cartesian3.clone(orientation.up, scratchToHPRUp);\n\n  if (camera._scene.mode === SceneMode.SCENE3D) {\n    const ellipsoid = camera._projection.ellipsoid;\n    const transform = Transforms.eastNorthUpToFixedFrame(\n      position,\n      ellipsoid,\n      scratchHPRMatrix1,\n    );\n    const invTransform = Matrix4.inverseTransformation(\n      transform,\n      scratchHPRMatrix2,\n    );\n\n    Matrix4.multiplyByPointAsVector(invTransform, direction, direction);\n    Matrix4.multiplyByPointAsVector(invTransform, up, up);\n  }\n\n  const right = Cartesian3.cross(direction, up, scratchToHPRRight);\n\n  result.heading = getHeading(direction, up);\n  result.pitch = getPitch(direction);\n  result.roll = getRoll(direction, up, right);\n\n  return result;\n}\n\nconst scratchSetViewOptions = {\n  destination: undefined,\n  orientation: {\n    direction: undefined,\n    up: undefined,\n    heading: undefined,\n    pitch: undefined,\n    roll: undefined,\n  },\n  convert: undefined,\n  endTransform: undefined,\n};\n\nconst scratchHpr = new HeadingPitchRoll();\n/**\n * Sets the camera position, orientation and transform.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3|Rectangle} [options.destination] The final position of the camera in world coordinates or a rectangle that would be visible from a top-down view.\n * @param {HeadingPitchRollValues|DirectionUp} [options.orientation] An object that contains either direction and up properties or heading, pitch and roll properties. By default, the direction will point\n * towards the center of the frame in 3D and in the negative z direction in Columbus view. The up direction will point towards local north in 3D and in the positive\n * y direction in Columbus view. Orientation is not used in 2D when in infinite scrolling mode.\n * @param {Matrix4} [options.endTransform] Transform matrix representing the reference frame of the camera.\n * @param {boolean} [options.convert] Whether to convert the destination from world coordinates to scene coordinates (only relevant when not using 3D). Defaults to <code>true</code>.\n *\n * @example\n * // 1. Set position with a top-down view\n * viewer.camera.setView({\n *     destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)\n * });\n *\n * // 2 Set view with heading, pitch and roll\n * viewer.camera.setView({\n *     destination : cartesianPosition,\n *     orientation: {\n *         heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)\n *         pitch : Cesium.Math.toRadians(-90),    // default value (looking down)\n *         roll : 0.0                             // default value\n *     }\n * });\n *\n * // 3. Change heading, pitch and roll with the camera position remaining the same.\n * viewer.camera.setView({\n *     orientation: {\n *         heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)\n *         pitch : Cesium.Math.toRadians(-90),    // default value (looking down)\n *         roll : 0.0                             // default value\n *     }\n * });\n *\n *\n * // 4. View rectangle with a top-down view\n * viewer.camera.setView({\n *     destination : Cesium.Rectangle.fromDegrees(west, south, east, north)\n * });\n *\n * // 5. Set position with an orientation using unit vectors.\n * viewer.camera.setView({\n *     destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),\n *     orientation : {\n *         direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734),\n *         up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339)\n *     }\n * });\n */\nCamera.prototype.setView = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  let orientation = options.orientation ?? Frozen.EMPTY_OBJECT;\n\n  const mode = this._mode;\n  if (mode === SceneMode.MORPHING) {\n    return;\n  }\n\n  if (defined(options.endTransform)) {\n    this._setTransform(options.endTransform);\n  }\n\n  let convert = options.convert ?? true;\n  let destination =\n    options.destination ??\n    Cartesian3.clone(this.positionWC, scratchSetViewCartesian);\n  if (defined(destination) && defined(destination.west)) {\n    destination = this.getRectangleCameraCoordinates(\n      destination,\n      scratchSetViewCartesian,\n    );\n    //>>includeStart('debug', pragmas.debug);\n    // destination.z may be null in 2D, but .x and .y should be numeric\n    if (isNaN(destination.x) || isNaN(destination.y)) {\n      throw new DeveloperError(`destination has a NaN component`);\n    }\n    //>>includeEnd('debug');\n    convert = false;\n  }\n\n  if (defined(orientation.direction)) {\n    orientation = directionUpToHeadingPitchRoll(\n      this,\n      destination,\n      orientation,\n      scratchSetViewOptions.orientation,\n    );\n  }\n\n  scratchHpr.heading = orientation.heading ?? 0.0;\n  scratchHpr.pitch = orientation.pitch ?? -CesiumMath.PI_OVER_TWO;\n  scratchHpr.roll = orientation.roll ?? 0.0;\n\n  if (mode === SceneMode.SCENE3D) {\n    setView3D(this, destination, scratchHpr);\n  } else if (mode === SceneMode.SCENE2D) {\n    setView2D(this, destination, scratchHpr, convert);\n  } else {\n    setViewCV(this, destination, scratchHpr, convert);\n  }\n};\n\nconst pitchScratch = new Cartesian3();\n/**\n * Fly the camera to the home view.  Use {@link Camera#.DEFAULT_VIEW_RECTANGLE} to set\n * the default view for the 3D scene.  The home view for 2D and columbus view shows the\n * entire map.\n *\n * @param {number} [duration] The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight. See {@link Camera#flyTo}\n */\nCamera.prototype.flyHome = function (duration) {\n  const mode = this._mode;\n\n  if (mode === SceneMode.MORPHING) {\n    this._scene.completeMorph();\n  }\n\n  if (mode === SceneMode.SCENE2D) {\n    this.flyTo({\n      destination: Camera.DEFAULT_VIEW_RECTANGLE,\n      duration: duration,\n      endTransform: Matrix4.IDENTITY,\n    });\n  } else if (mode === SceneMode.SCENE3D) {\n    const destination = this.getRectangleCameraCoordinates(\n      Camera.DEFAULT_VIEW_RECTANGLE,\n    );\n\n    let mag = Cartesian3.magnitude(destination);\n    mag += mag * Camera.DEFAULT_VIEW_FACTOR;\n    Cartesian3.normalize(destination, destination);\n    Cartesian3.multiplyByScalar(destination, mag, destination);\n\n    this.flyTo({\n      destination: destination,\n      duration: duration,\n      endTransform: Matrix4.IDENTITY,\n    });\n  } else if (mode === SceneMode.COLUMBUS_VIEW) {\n    const maxRadii = this._projection.ellipsoid.maximumRadius;\n    let position = new Cartesian3(0.0, -1.0, 1.0);\n    position = Cartesian3.multiplyByScalar(\n      Cartesian3.normalize(position, position),\n      5.0 * maxRadii,\n      position,\n    );\n    this.flyTo({\n      destination: position,\n      duration: duration,\n      orientation: {\n        heading: 0.0,\n        pitch: -Math.acos(Cartesian3.normalize(position, pitchScratch).z),\n        roll: 0.0,\n      },\n      endTransform: Matrix4.IDENTITY,\n      convert: false,\n    });\n  }\n};\n\n/**\n * Transform a vector or point from world coordinates to the camera's reference frame.\n *\n * @param {Cartesian4} cartesian The vector or point to transform.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The transformed vector or point.\n */\nCamera.prototype.worldToCameraCoordinates = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian4();\n  }\n  updateMembers(this);\n  return Matrix4.multiplyByVector(this._actualInvTransform, cartesian, result);\n};\n\n/**\n * Transform a point from world coordinates to the camera's reference frame.\n *\n * @param {Cartesian3} cartesian The point to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed point.\n */\nCamera.prototype.worldToCameraCoordinatesPoint = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n  updateMembers(this);\n  return Matrix4.multiplyByPoint(this._actualInvTransform, cartesian, result);\n};\n\n/**\n * Transform a vector from world coordinates to the camera's reference frame.\n *\n * @param {Cartesian3} cartesian The vector to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed vector.\n */\nCamera.prototype.worldToCameraCoordinatesVector = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n  updateMembers(this);\n  return Matrix4.multiplyByPointAsVector(\n    this._actualInvTransform,\n    cartesian,\n    result,\n  );\n};\n\n/**\n * Transform a vector or point from the camera's reference frame to world coordinates.\n *\n * @param {Cartesian4} cartesian The vector or point to transform.\n * @param {Cartesian4} [result] The object onto which to store the result.\n * @returns {Cartesian4} The transformed vector or point.\n */\nCamera.prototype.cameraToWorldCoordinates = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian4();\n  }\n  updateMembers(this);\n  return Matrix4.multiplyByVector(this._actualTransform, cartesian, result);\n};\n\n/**\n * Transform a point from the camera's reference frame to world coordinates.\n *\n * @param {Cartesian3} cartesian The point to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed point.\n */\nCamera.prototype.cameraToWorldCoordinatesPoint = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n  updateMembers(this);\n  return Matrix4.multiplyByPoint(this._actualTransform, cartesian, result);\n};\n\n/**\n * Transform a vector from the camera's reference frame to world coordinates.\n *\n * @param {Cartesian3} cartesian The vector to transform.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3} The transformed vector.\n */\nCamera.prototype.cameraToWorldCoordinatesVector = function (cartesian, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartesian)) {\n    throw new DeveloperError(\"cartesian is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n  updateMembers(this);\n  return Matrix4.multiplyByPointAsVector(\n    this._actualTransform,\n    cartesian,\n    result,\n  );\n};\n\nfunction clampMove2D(camera, position) {\n  const rotatable2D = camera._scene.mapMode2D === MapMode2D.ROTATE;\n  const maxProjectedX = camera._maxCoord.x;\n  const maxProjectedY = camera._maxCoord.y;\n\n  let minX;\n  let maxX;\n  if (rotatable2D) {\n    maxX = maxProjectedX;\n    minX = -maxX;\n  } else {\n    maxX = position.x - maxProjectedX * 2.0;\n    minX = position.x + maxProjectedX * 2.0;\n  }\n\n  if (position.x > maxProjectedX) {\n    position.x = maxX;\n  }\n  if (position.x < -maxProjectedX) {\n    position.x = minX;\n  }\n\n  if (position.y > maxProjectedY) {\n    position.y = maxProjectedY;\n  }\n  if (position.y < -maxProjectedY) {\n    position.y = -maxProjectedY;\n  }\n}\n\nconst moveScratch = new Cartesian3();\n/**\n * Translates the camera's position by <code>amount</code> along <code>direction</code>.\n *\n * @param {Cartesian3} direction The direction to move.\n * @param {number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveBackward\n * @see Camera#moveForward\n * @see Camera#moveLeft\n * @see Camera#moveRight\n * @see Camera#moveUp\n * @see Camera#moveDown\n */\nCamera.prototype.move = function (direction, amount) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(direction)) {\n    throw new DeveloperError(\"direction is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const cameraPosition = this.position;\n  Cartesian3.multiplyByScalar(direction, amount, moveScratch);\n  Cartesian3.add(cameraPosition, moveScratch, cameraPosition);\n\n  if (this._mode === SceneMode.SCENE2D) {\n    clampMove2D(this, cameraPosition);\n  }\n  this._adjustOrthographicFrustum(true);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the camera's view vector.\n * When in 2D mode, this will zoom in the camera instead of translating the camera's position.\n *\n * @param {number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveBackward\n */\nCamera.prototype.moveForward = function (amount) {\n  amount = amount ?? this.defaultMoveAmount;\n\n  if (this._mode === SceneMode.SCENE2D) {\n    // 2D mode\n    zoom2D(this, amount);\n  } else {\n    // 3D or Columbus view mode\n    this.move(this.direction, amount);\n  }\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the opposite direction\n * of the camera's view vector.\n * When in 2D mode, this will zoom out the camera instead of translating the camera's position.\n *\n * @param {number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveForward\n */\nCamera.prototype.moveBackward = function (amount) {\n  amount = amount ?? this.defaultMoveAmount;\n\n  if (this._mode === SceneMode.SCENE2D) {\n    // 2D mode\n    zoom2D(this, -amount);\n  } else {\n    // 3D or Columbus view mode\n    this.move(this.direction, -amount);\n  }\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the camera's up vector.\n *\n * @param {number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveDown\n */\nCamera.prototype.moveUp = function (amount) {\n  amount = amount ?? this.defaultMoveAmount;\n  this.move(this.up, amount);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the opposite direction\n * of the camera's up vector.\n *\n * @param {number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveUp\n */\nCamera.prototype.moveDown = function (amount) {\n  amount = amount ?? this.defaultMoveAmount;\n  this.move(this.up, -amount);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the camera's right vector.\n *\n * @param {number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveLeft\n */\nCamera.prototype.moveRight = function (amount) {\n  amount = amount ?? this.defaultMoveAmount;\n  this.move(this.right, amount);\n};\n\n/**\n * Translates the camera's position by <code>amount</code> along the opposite direction\n * of the camera's right vector.\n *\n * @param {number} [amount] The amount, in meters, to move. Defaults to <code>defaultMoveAmount</code>.\n *\n * @see Camera#moveRight\n */\nCamera.prototype.moveLeft = function (amount) {\n  amount = amount ?? this.defaultMoveAmount;\n  this.move(this.right, -amount);\n};\n\n/**\n * Rotates the camera around its up vector by amount, in radians, in the opposite direction\n * of its right vector if not in 2D mode.\n *\n * @param {number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookRight\n */\nCamera.prototype.lookLeft = function (amount) {\n  amount = amount ?? this.defaultLookAmount;\n\n  // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n  if (this._mode !== SceneMode.SCENE2D) {\n    this.look(this.up, -amount);\n  }\n};\n\n/**\n * Rotates the camera around its up vector by amount, in radians, in the direction\n * of its right vector if not in 2D mode.\n *\n * @param {number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookLeft\n */\nCamera.prototype.lookRight = function (amount) {\n  amount = amount ?? this.defaultLookAmount;\n\n  // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n  if (this._mode !== SceneMode.SCENE2D) {\n    this.look(this.up, amount);\n  }\n};\n\n/**\n * Rotates the camera around its right vector by amount, in radians, in the direction\n * of its up vector if not in 2D mode.\n *\n * @param {number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookDown\n */\nCamera.prototype.lookUp = function (amount) {\n  amount = amount ?? this.defaultLookAmount;\n\n  // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n  if (this._mode !== SceneMode.SCENE2D) {\n    this.look(this.right, -amount);\n  }\n};\n\n/**\n * Rotates the camera around its right vector by amount, in radians, in the opposite direction\n * of its up vector if not in 2D mode.\n *\n * @param {number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookUp\n */\nCamera.prototype.lookDown = function (amount) {\n  amount = amount ?? this.defaultLookAmount;\n\n  // only want view of map to change in 3D mode, 2D visual is incorrect when look changes\n  if (this._mode !== SceneMode.SCENE2D) {\n    this.look(this.right, amount);\n  }\n};\n\nconst lookScratchQuaternion = new Quaternion();\nconst lookScratchMatrix = new Matrix3();\n/**\n * Rotate each of the camera's orientation vectors around <code>axis</code> by <code>angle</code>\n *\n * @param {Cartesian3} axis The axis to rotate around.\n * @param {number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#lookUp\n * @see Camera#lookDown\n * @see Camera#lookLeft\n * @see Camera#lookRight\n */\nCamera.prototype.look = function (axis, angle) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(axis)) {\n    throw new DeveloperError(\"axis is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const turnAngle = angle ?? this.defaultLookAmount;\n  const quaternion = Quaternion.fromAxisAngle(\n    axis,\n    -turnAngle,\n    lookScratchQuaternion,\n  );\n  const rotation = Matrix3.fromQuaternion(quaternion, lookScratchMatrix);\n\n  const direction = this.direction;\n  const up = this.up;\n  const right = this.right;\n\n  Matrix3.multiplyByVector(rotation, direction, direction);\n  Matrix3.multiplyByVector(rotation, up, up);\n  Matrix3.multiplyByVector(rotation, right, right);\n};\n\n/**\n * Rotate the camera counter-clockwise around its direction vector by amount, in radians.\n *\n * @param {number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#twistRight\n */\nCamera.prototype.twistLeft = function (amount) {\n  amount = amount ?? this.defaultLookAmount;\n  this.look(this.direction, amount);\n};\n\n/**\n * Rotate the camera clockwise around its direction vector by amount, in radians.\n *\n * @param {number} [amount] The amount, in radians, to rotate by. Defaults to <code>defaultLookAmount</code>.\n *\n * @see Camera#twistLeft\n */\nCamera.prototype.twistRight = function (amount) {\n  amount = amount ?? this.defaultLookAmount;\n  this.look(this.direction, -amount);\n};\n\nconst rotateScratchQuaternion = new Quaternion();\nconst rotateScratchMatrix = new Matrix3();\n/**\n * Rotates the camera around <code>axis</code> by <code>angle</code>. The distance\n * of the camera's position to the center of the camera's reference frame remains the same.\n *\n * @param {Cartesian3} axis The axis to rotate around given in world coordinates.\n * @param {number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateUp\n * @see Camera#rotateDown\n * @see Camera#rotateLeft\n * @see Camera#rotateRight\n */\nCamera.prototype.rotate = function (axis, angle) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(axis)) {\n    throw new DeveloperError(\"axis is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const turnAngle = angle ?? this.defaultRotateAmount;\n  const quaternion = Quaternion.fromAxisAngle(\n    axis,\n    -turnAngle,\n    rotateScratchQuaternion,\n  );\n  const rotation = Matrix3.fromQuaternion(quaternion, rotateScratchMatrix);\n  Matrix3.multiplyByVector(rotation, this.position, this.position);\n  Matrix3.multiplyByVector(rotation, this.direction, this.direction);\n  Matrix3.multiplyByVector(rotation, this.up, this.up);\n  Cartesian3.cross(this.direction, this.up, this.right);\n  Cartesian3.cross(this.right, this.direction, this.up);\n\n  this._adjustOrthographicFrustum(false);\n};\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle downwards.\n *\n * @param {number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateUp\n * @see Camera#rotate\n */\nCamera.prototype.rotateDown = function (angle) {\n  angle = angle ?? this.defaultRotateAmount;\n  rotateVertical(this, angle);\n};\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle upwards.\n *\n * @param {number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateDown\n * @see Camera#rotate\n */\nCamera.prototype.rotateUp = function (angle) {\n  angle = angle ?? this.defaultRotateAmount;\n  rotateVertical(this, -angle);\n};\n\nconst rotateVertScratchP = new Cartesian3();\nconst rotateVertScratchA = new Cartesian3();\nconst rotateVertScratchTan = new Cartesian3();\nconst rotateVertScratchNegate = new Cartesian3();\nfunction rotateVertical(camera, angle) {\n  const position = camera.position;\n  if (\n    defined(camera.constrainedAxis) &&\n    !Cartesian3.equalsEpsilon(\n      camera.position,\n      Cartesian3.ZERO,\n      CesiumMath.EPSILON2,\n    )\n  ) {\n    const p = Cartesian3.normalize(position, rotateVertScratchP);\n    const northParallel = Cartesian3.equalsEpsilon(\n      p,\n      camera.constrainedAxis,\n      CesiumMath.EPSILON2,\n    );\n    const southParallel = Cartesian3.equalsEpsilon(\n      p,\n      Cartesian3.negate(camera.constrainedAxis, rotateVertScratchNegate),\n      CesiumMath.EPSILON2,\n    );\n    if (!northParallel && !southParallel) {\n      const constrainedAxis = Cartesian3.normalize(\n        camera.constrainedAxis,\n        rotateVertScratchA,\n      );\n\n      let dot = Cartesian3.dot(p, constrainedAxis);\n      let angleToAxis = CesiumMath.acosClamped(dot);\n      if (angle > 0 && angle > angleToAxis) {\n        angle = angleToAxis - CesiumMath.EPSILON4;\n      }\n\n      dot = Cartesian3.dot(\n        p,\n        Cartesian3.negate(constrainedAxis, rotateVertScratchNegate),\n      );\n      angleToAxis = CesiumMath.acosClamped(dot);\n      if (angle < 0 && -angle > angleToAxis) {\n        angle = -angleToAxis + CesiumMath.EPSILON4;\n      }\n\n      const tangent = Cartesian3.cross(\n        constrainedAxis,\n        p,\n        rotateVertScratchTan,\n      );\n      camera.rotate(tangent, angle);\n    } else if ((northParallel && angle < 0) || (southParallel && angle > 0)) {\n      camera.rotate(camera.right, angle);\n    }\n  } else {\n    camera.rotate(camera.right, angle);\n  }\n}\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle to the right.\n *\n * @param {number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateLeft\n * @see Camera#rotate\n */\nCamera.prototype.rotateRight = function (angle) {\n  angle = angle ?? this.defaultRotateAmount;\n  rotateHorizontal(this, -angle);\n};\n\n/**\n * Rotates the camera around the center of the camera's reference frame by angle to the left.\n *\n * @param {number} [angle] The angle, in radians, to rotate by. Defaults to <code>defaultRotateAmount</code>.\n *\n * @see Camera#rotateRight\n * @see Camera#rotate\n */\nCamera.prototype.rotateLeft = function (angle) {\n  angle = angle ?? this.defaultRotateAmount;\n  rotateHorizontal(this, angle);\n};\n\nfunction rotateHorizontal(camera, angle) {\n  if (defined(camera.constrainedAxis)) {\n    camera.rotate(camera.constrainedAxis, angle);\n  } else {\n    camera.rotate(camera.up, angle);\n  }\n}\n\nfunction zoom2D(camera, amount) {\n  const frustum = camera.frustum;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    !(frustum instanceof OrthographicOffCenterFrustum) ||\n    !defined(frustum.left) ||\n    !defined(frustum.right) ||\n    !defined(frustum.bottom) ||\n    !defined(frustum.top)\n  ) {\n    throw new DeveloperError(\n      \"The camera frustum is expected to be orthographic for 2D camera control.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let ratio;\n  amount = amount * 0.5;\n\n  if (\n    Math.abs(frustum.top) + Math.abs(frustum.bottom) >\n    Math.abs(frustum.left) + Math.abs(frustum.right)\n  ) {\n    let newTop = frustum.top - amount;\n    let newBottom = frustum.bottom + amount;\n\n    let maxBottom = camera._maxCoord.y;\n    if (camera._scene.mapMode2D === MapMode2D.ROTATE) {\n      maxBottom *= camera.maximumZoomFactor;\n    }\n\n    if (newBottom > maxBottom) {\n      newBottom = maxBottom;\n      newTop = -maxBottom;\n    }\n\n    if (newTop <= newBottom) {\n      newTop = 1.0;\n      newBottom = -1.0;\n    }\n\n    ratio = frustum.right / frustum.top;\n    frustum.top = newTop;\n    frustum.bottom = newBottom;\n    frustum.right = frustum.top * ratio;\n    frustum.left = -frustum.right;\n  } else {\n    let newRight = frustum.right - amount;\n    let newLeft = frustum.left + amount;\n\n    let maxRight = camera._maxCoord.x;\n    if (camera._scene.mapMode2D === MapMode2D.ROTATE) {\n      maxRight *= camera.maximumZoomFactor;\n    }\n\n    if (newRight > maxRight) {\n      newRight = maxRight;\n      newLeft = -maxRight;\n    }\n\n    if (newRight <= newLeft) {\n      newRight = 1.0;\n      newLeft = -1.0;\n    }\n    ratio = frustum.top / frustum.right;\n    frustum.right = newRight;\n    frustum.left = newLeft;\n    frustum.top = frustum.right * ratio;\n    frustum.bottom = -frustum.top;\n  }\n}\n\nfunction zoom3D(camera, amount) {\n  camera.move(camera.direction, amount);\n}\n\n/**\n * Zooms <code>amount</code> along the camera's view vector.\n *\n * @param {number} [amount] The amount to move. Defaults to <code>defaultZoomAmount</code>.\n *\n * @see Camera#zoomOut\n */\nCamera.prototype.zoomIn = function (amount) {\n  amount = amount ?? this.defaultZoomAmount;\n  if (this._mode === SceneMode.SCENE2D) {\n    zoom2D(this, amount);\n  } else {\n    zoom3D(this, amount);\n  }\n};\n\n/**\n * Zooms <code>amount</code> along the opposite direction of\n * the camera's view vector.\n *\n * @param {number} [amount] The amount to move. Defaults to <code>defaultZoomAmount</code>.\n *\n * @see Camera#zoomIn\n */\nCamera.prototype.zoomOut = function (amount) {\n  amount = amount ?? this.defaultZoomAmount;\n  if (this._mode === SceneMode.SCENE2D) {\n    zoom2D(this, -amount);\n  } else {\n    zoom3D(this, -amount);\n  }\n};\n\n/**\n * Gets the magnitude of the camera position. In 3D, this is the vector magnitude. In 2D and\n * Columbus view, this is the distance to the map.\n *\n * @returns {number} The magnitude of the position.\n */\nCamera.prototype.getMagnitude = function () {\n  if (this._mode === SceneMode.SCENE3D) {\n    return Cartesian3.magnitude(this.position);\n  } else if (this._mode === SceneMode.COLUMBUS_VIEW) {\n    return Math.abs(this.position.z);\n  } else if (this._mode === SceneMode.SCENE2D) {\n    return Math.max(\n      this.frustum.right - this.frustum.left,\n      this.frustum.top - this.frustum.bottom,\n    );\n  }\n};\n\nconst scratchLookAtMatrix4 = new Matrix4();\n\n/**\n * Sets the camera position and orientation using a target and offset. The target must be given in\n * world coordinates. The offset can be either a cartesian or heading/pitch/range in the local east-north-up reference frame centered at the target.\n * If the offset is a cartesian, then it is an offset from the center of the reference frame defined by the transformation matrix. If the offset\n * is heading/pitch/range, then the heading and the pitch angles are defined in the reference frame defined by the transformation matrix.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center.\n *\n * In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the magnitude of the offset. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.\n *\n * @param {Cartesian3} target The target position in world coordinates.\n * @param {Cartesian3|HeadingPitchRange} offset The offset from the target in the local east-north-up reference frame centered at the target.\n *\n * @exception {DeveloperError} lookAt is not supported while morphing.\n *\n * @example\n * // 1. Using a cartesian offset\n * const center = Cesium.Cartesian3.fromDegrees(-98.0, 40.0);\n * viewer.camera.lookAt(center, new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0));\n *\n * // 2. Using a HeadingPitchRange offset\n * const center = Cesium.Cartesian3.fromDegrees(-72.0, 40.0);\n * const heading = Cesium.Math.toRadians(50.0);\n * const pitch = Cesium.Math.toRadians(-20.0);\n * const range = 5000.0;\n * viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, range));\n */\nCamera.prototype.lookAt = function (target, offset) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(target)) {\n    throw new DeveloperError(\"target is required\");\n  }\n  if (!defined(offset)) {\n    throw new DeveloperError(\"offset is required\");\n  }\n  if (this._mode === SceneMode.MORPHING) {\n    throw new DeveloperError(\"lookAt is not supported while morphing.\");\n  }\n  //>>includeEnd('debug');\n\n  const scene = this._scene;\n  const ellipsoid = scene.ellipsoid ?? Ellipsoid.default;\n\n  const transform = Transforms.eastNorthUpToFixedFrame(\n    target,\n    ellipsoid,\n    scratchLookAtMatrix4,\n  );\n  this.lookAtTransform(transform, offset);\n};\n\nconst scratchLookAtHeadingPitchRangeOffset = new Cartesian3();\nconst scratchLookAtHeadingPitchRangeQuaternion1 = new Quaternion();\nconst scratchLookAtHeadingPitchRangeQuaternion2 = new Quaternion();\nconst scratchHeadingPitchRangeMatrix3 = new Matrix3();\n\nfunction offsetFromHeadingPitchRange(heading, pitch, range) {\n  pitch = CesiumMath.clamp(\n    pitch,\n    -CesiumMath.PI_OVER_TWO,\n    CesiumMath.PI_OVER_TWO,\n  );\n  heading = CesiumMath.zeroToTwoPi(heading) - CesiumMath.PI_OVER_TWO;\n\n  const pitchQuat = Quaternion.fromAxisAngle(\n    Cartesian3.UNIT_Y,\n    -pitch,\n    scratchLookAtHeadingPitchRangeQuaternion1,\n  );\n  const headingQuat = Quaternion.fromAxisAngle(\n    Cartesian3.UNIT_Z,\n    -heading,\n    scratchLookAtHeadingPitchRangeQuaternion2,\n  );\n  const rotQuat = Quaternion.multiply(headingQuat, pitchQuat, headingQuat);\n  const rotMatrix = Matrix3.fromQuaternion(\n    rotQuat,\n    scratchHeadingPitchRangeMatrix3,\n  );\n\n  const offset = Cartesian3.clone(\n    Cartesian3.UNIT_X,\n    scratchLookAtHeadingPitchRangeOffset,\n  );\n  Matrix3.multiplyByVector(rotMatrix, offset, offset);\n  Cartesian3.negate(offset, offset);\n  Cartesian3.multiplyByScalar(offset, range, offset);\n  return offset;\n}\n\n/**\n * Sets the camera position and orientation using a target and transformation matrix. The offset can be either a cartesian or heading/pitch/range.\n * If the offset is a cartesian, then it is an offset from the center of the reference frame defined by the transformation matrix. If the offset\n * is heading/pitch/range, then the heading and the pitch angles are defined in the reference frame defined by the transformation matrix.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center.\n *\n * In 2D, there must be a top down view. The camera will be placed above the center of the reference frame. The height above the\n * target will be the magnitude of the offset. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.\n *\n * @param {Matrix4} transform The transformation matrix defining the reference frame.\n * @param {Cartesian3|HeadingPitchRange} [offset] The offset from the target in a reference frame centered at the target.\n *\n * @exception {DeveloperError} lookAtTransform is not supported while morphing.\n *\n * @example\n * // 1. Using a cartesian offset\n * const transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-98.0, 40.0));\n * viewer.camera.lookAtTransform(transform, new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0));\n *\n * // 2. Using a HeadingPitchRange offset\n * const transform = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(-72.0, 40.0));\n * const heading = Cesium.Math.toRadians(50.0);\n * const pitch = Cesium.Math.toRadians(-20.0);\n * const range = 5000.0;\n * viewer.camera.lookAtTransform(transform, new Cesium.HeadingPitchRange(heading, pitch, range));\n */\nCamera.prototype.lookAtTransform = function (transform, offset) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(transform)) {\n    throw new DeveloperError(\"transform is required\");\n  }\n  if (this._mode === SceneMode.MORPHING) {\n    throw new DeveloperError(\n      \"lookAtTransform is not supported while morphing.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._setTransform(transform);\n  if (!defined(offset)) {\n    return;\n  }\n\n  let cartesianOffset;\n  if (defined(offset.heading)) {\n    cartesianOffset = offsetFromHeadingPitchRange(\n      offset.heading,\n      offset.pitch,\n      offset.range,\n    );\n  } else {\n    cartesianOffset = offset;\n  }\n\n  if (this._mode === SceneMode.SCENE2D) {\n    Cartesian2.clone(Cartesian2.ZERO, this.position);\n\n    Cartesian3.negate(cartesianOffset, this.up);\n    this.up.z = 0.0;\n\n    if (Cartesian3.magnitudeSquared(this.up) < CesiumMath.EPSILON10) {\n      Cartesian3.clone(Cartesian3.UNIT_Y, this.up);\n    }\n\n    Cartesian3.normalize(this.up, this.up);\n\n    this._setTransform(Matrix4.IDENTITY);\n\n    Cartesian3.negate(Cartesian3.UNIT_Z, this.direction);\n    Cartesian3.cross(this.direction, this.up, this.right);\n    Cartesian3.normalize(this.right, this.right);\n\n    const frustum = this.frustum;\n    const ratio = frustum.top / frustum.right;\n    frustum.right = Cartesian3.magnitude(cartesianOffset) * 0.5;\n    frustum.left = -frustum.right;\n    frustum.top = ratio * frustum.right;\n    frustum.bottom = -frustum.top;\n\n    this._setTransform(transform);\n\n    return;\n  }\n\n  Cartesian3.clone(cartesianOffset, this.position);\n  Cartesian3.negate(this.position, this.direction);\n  Cartesian3.normalize(this.direction, this.direction);\n  Cartesian3.cross(this.direction, Cartesian3.UNIT_Z, this.right);\n\n  if (Cartesian3.magnitudeSquared(this.right) < CesiumMath.EPSILON10) {\n    Cartesian3.clone(Cartesian3.UNIT_X, this.right);\n  }\n\n  Cartesian3.normalize(this.right, this.right);\n  Cartesian3.cross(this.right, this.direction, this.up);\n  Cartesian3.normalize(this.up, this.up);\n\n  this._adjustOrthographicFrustum(true);\n};\n\nconst viewRectangle3DCartographic1 = new Cartographic();\nconst viewRectangle3DCartographic2 = new Cartographic();\nconst viewRectangle3DNorthEast = new Cartesian3();\nconst viewRectangle3DSouthWest = new Cartesian3();\nconst viewRectangle3DNorthWest = new Cartesian3();\nconst viewRectangle3DSouthEast = new Cartesian3();\nconst viewRectangle3DNorthCenter = new Cartesian3();\nconst viewRectangle3DSouthCenter = new Cartesian3();\nconst viewRectangle3DCenter = new Cartesian3();\nconst viewRectangle3DEquator = new Cartesian3();\nconst defaultRF = {\n  direction: new Cartesian3(),\n  right: new Cartesian3(),\n  up: new Cartesian3(),\n};\nlet viewRectangle3DEllipsoidGeodesic;\n\nfunction computeD(direction, upOrRight, corner, tanThetaOrPhi) {\n  const opposite = Math.abs(Cartesian3.dot(upOrRight, corner));\n  return opposite / tanThetaOrPhi - Cartesian3.dot(direction, corner);\n}\n\nfunction rectangleCameraPosition3D(camera, rectangle, result, updateCamera) {\n  const ellipsoid = camera._projection.ellipsoid;\n  const cameraRF = updateCamera ? camera : defaultRF;\n\n  const { north, south, west } = rectangle;\n  let { east } = rectangle;\n\n  // If we go across the International Date Line\n  if (west > east) {\n    east += CesiumMath.TWO_PI;\n  }\n\n  // Find the midpoint latitude.\n  //\n  // EllipsoidGeodesic will fail if the north and south edges are very close to being on opposite sides of the ellipsoid.\n  // Ideally we'd just call EllipsoidGeodesic.setEndPoints and let it throw when it detects this case, but sadly it doesn't\n  // even look for this case in optimized builds, so we have to test for it here instead.\n  //\n  // Fortunately, this case can only happen (here) when north is very close to the north pole and south is very close to the south pole,\n  // so handle it just by using 0 latitude as the center.  It's certainliy possible to use a smaller tolerance\n  // than one degree here, but one degree is safe and putting the center at 0 latitude should be good enough for any\n  // rectangle that spans 178+ of the 180 degrees of latitude.\n  const longitude = (west + east) * 0.5;\n  let latitude;\n  if (\n    south < -CesiumMath.PI_OVER_TWO + CesiumMath.RADIANS_PER_DEGREE &&\n    north > CesiumMath.PI_OVER_TWO - CesiumMath.RADIANS_PER_DEGREE\n  ) {\n    latitude = 0.0;\n  } else {\n    const northCartographic = viewRectangle3DCartographic1;\n    northCartographic.longitude = longitude;\n    northCartographic.latitude = north;\n    northCartographic.height = 0.0;\n\n    const southCartographic = viewRectangle3DCartographic2;\n    southCartographic.longitude = longitude;\n    southCartographic.latitude = south;\n    southCartographic.height = 0.0;\n\n    let ellipsoidGeodesic = viewRectangle3DEllipsoidGeodesic;\n    if (\n      !defined(ellipsoidGeodesic) ||\n      ellipsoidGeodesic.ellipsoid !== ellipsoid\n    ) {\n      viewRectangle3DEllipsoidGeodesic = ellipsoidGeodesic =\n        new EllipsoidGeodesic(undefined, undefined, ellipsoid);\n    }\n\n    ellipsoidGeodesic.setEndPoints(northCartographic, southCartographic);\n    latitude = ellipsoidGeodesic.interpolateUsingFraction(\n      0.5,\n      viewRectangle3DCartographic1,\n    ).latitude;\n  }\n\n  const centerCartographic = viewRectangle3DCartographic1;\n  centerCartographic.longitude = longitude;\n  centerCartographic.latitude = latitude;\n  centerCartographic.height = 0.0;\n\n  const center = ellipsoid.cartographicToCartesian(\n    centerCartographic,\n    viewRectangle3DCenter,\n  );\n\n  const cart = viewRectangle3DCartographic1;\n  cart.longitude = east;\n  cart.latitude = north;\n  const northEast = ellipsoid.cartographicToCartesian(\n    cart,\n    viewRectangle3DNorthEast,\n  );\n  cart.longitude = west;\n  const northWest = ellipsoid.cartographicToCartesian(\n    cart,\n    viewRectangle3DNorthWest,\n  );\n  cart.longitude = longitude;\n  const northCenter = ellipsoid.cartographicToCartesian(\n    cart,\n    viewRectangle3DNorthCenter,\n  );\n  cart.latitude = south;\n  const southCenter = ellipsoid.cartographicToCartesian(\n    cart,\n    viewRectangle3DSouthCenter,\n  );\n  cart.longitude = east;\n  const southEast = ellipsoid.cartographicToCartesian(\n    cart,\n    viewRectangle3DSouthEast,\n  );\n  cart.longitude = west;\n  const southWest = ellipsoid.cartographicToCartesian(\n    cart,\n    viewRectangle3DSouthWest,\n  );\n\n  Cartesian3.subtract(northWest, center, northWest);\n  Cartesian3.subtract(southEast, center, southEast);\n  Cartesian3.subtract(northEast, center, northEast);\n  Cartesian3.subtract(southWest, center, southWest);\n  Cartesian3.subtract(northCenter, center, northCenter);\n  Cartesian3.subtract(southCenter, center, southCenter);\n\n  const direction = ellipsoid.geodeticSurfaceNormal(center, cameraRF.direction);\n  Cartesian3.negate(direction, direction);\n  const right = Cartesian3.cross(direction, Cartesian3.UNIT_Z, cameraRF.right);\n  Cartesian3.normalize(right, right);\n  const up = Cartesian3.cross(right, direction, cameraRF.up);\n\n  let d;\n  if (camera.frustum instanceof OrthographicFrustum) {\n    const width = Math.max(\n      Cartesian3.distance(northEast, northWest),\n      Cartesian3.distance(southEast, southWest),\n    );\n    const height = Math.max(\n      Cartesian3.distance(northEast, southEast),\n      Cartesian3.distance(northWest, southWest),\n    );\n\n    let rightScalar;\n    let topScalar;\n    const offCenterFrustum = camera.frustum._offCenterFrustum;\n    const ratio = offCenterFrustum.right / offCenterFrustum.top;\n    const heightRatio = height * ratio;\n    if (width > heightRatio) {\n      rightScalar = width;\n      topScalar = rightScalar / ratio;\n    } else {\n      topScalar = height;\n      rightScalar = heightRatio;\n    }\n\n    d = Math.max(rightScalar, topScalar);\n  } else {\n    const tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n    const tanTheta = camera.frustum.aspectRatio * tanPhi;\n\n    d = Math.max(\n      computeD(direction, up, northWest, tanPhi),\n      computeD(direction, up, southEast, tanPhi),\n      computeD(direction, up, northEast, tanPhi),\n      computeD(direction, up, southWest, tanPhi),\n      computeD(direction, up, northCenter, tanPhi),\n      computeD(direction, up, southCenter, tanPhi),\n      computeD(direction, right, northWest, tanTheta),\n      computeD(direction, right, southEast, tanTheta),\n      computeD(direction, right, northEast, tanTheta),\n      computeD(direction, right, southWest, tanTheta),\n      computeD(direction, right, northCenter, tanTheta),\n      computeD(direction, right, southCenter, tanTheta),\n    );\n\n    // If the rectangle crosses the equator, compute D at the equator, too, because that's the\n    // widest part of the rectangle when projected onto the globe.\n    if (south < 0 && north > 0) {\n      const equatorCartographic = viewRectangle3DCartographic1;\n      equatorCartographic.longitude = west;\n      equatorCartographic.latitude = 0.0;\n      equatorCartographic.height = 0.0;\n      let equatorPosition = ellipsoid.cartographicToCartesian(\n        equatorCartographic,\n        viewRectangle3DEquator,\n      );\n      Cartesian3.subtract(equatorPosition, center, equatorPosition);\n      d = Math.max(\n        d,\n        computeD(direction, up, equatorPosition, tanPhi),\n        computeD(direction, right, equatorPosition, tanTheta),\n      );\n\n      equatorCartographic.longitude = east;\n      equatorPosition = ellipsoid.cartographicToCartesian(\n        equatorCartographic,\n        viewRectangle3DEquator,\n      );\n      Cartesian3.subtract(equatorPosition, center, equatorPosition);\n      d = Math.max(\n        d,\n        computeD(direction, up, equatorPosition, tanPhi),\n        computeD(direction, right, equatorPosition, tanTheta),\n      );\n    }\n  }\n\n  return Cartesian3.add(\n    center,\n    Cartesian3.multiplyByScalar(direction, -d, viewRectangle3DEquator),\n    result,\n  );\n}\n\nconst viewRectangleCVCartographic = new Cartographic();\nconst viewRectangleCVNorthEast = new Cartesian3();\nconst viewRectangleCVSouthWest = new Cartesian3();\nfunction rectangleCameraPositionColumbusView(camera, rectangle, result) {\n  const projection = camera._projection;\n  if (rectangle.west > rectangle.east) {\n    rectangle = Rectangle.MAX_VALUE;\n  }\n  const transform = camera._actualTransform;\n  const invTransform = camera._actualInvTransform;\n\n  const cart = viewRectangleCVCartographic;\n  cart.longitude = rectangle.east;\n  cart.latitude = rectangle.north;\n  const northEast = projection.project(cart, viewRectangleCVNorthEast);\n  Matrix4.multiplyByPoint(transform, northEast, northEast);\n  Matrix4.multiplyByPoint(invTransform, northEast, northEast);\n\n  cart.longitude = rectangle.west;\n  cart.latitude = rectangle.south;\n  const southWest = projection.project(cart, viewRectangleCVSouthWest);\n  Matrix4.multiplyByPoint(transform, southWest, southWest);\n  Matrix4.multiplyByPoint(invTransform, southWest, southWest);\n\n  result.x = (northEast.x - southWest.x) * 0.5 + southWest.x;\n  result.y = (northEast.y - southWest.y) * 0.5 + southWest.y;\n\n  if (defined(camera.frustum.fovy)) {\n    const tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n    const tanTheta = camera.frustum.aspectRatio * tanPhi;\n    result.z =\n      Math.max(\n        (northEast.x - southWest.x) / tanTheta,\n        (northEast.y - southWest.y) / tanPhi,\n      ) * 0.5;\n  } else {\n    const width = northEast.x - southWest.x;\n    const height = northEast.y - southWest.y;\n    result.z = Math.max(width, height);\n  }\n\n  return result;\n}\n\nconst viewRectangle2DCartographic = new Cartographic();\nconst viewRectangle2DNorthEast = new Cartesian3();\nconst viewRectangle2DSouthWest = new Cartesian3();\nfunction rectangleCameraPosition2D(camera, rectangle, result) {\n  const projection = camera._projection;\n\n  // Account for the rectangle crossing the International Date Line in 2D mode\n  let east = rectangle.east;\n  if (rectangle.west > rectangle.east) {\n    if (camera._scene.mapMode2D === MapMode2D.INFINITE_SCROLL) {\n      east += CesiumMath.TWO_PI;\n    } else {\n      rectangle = Rectangle.MAX_VALUE;\n      east = rectangle.east;\n    }\n  }\n\n  let cart = viewRectangle2DCartographic;\n  cart.longitude = east;\n  cart.latitude = rectangle.north;\n  const northEast = projection.project(cart, viewRectangle2DNorthEast);\n  cart.longitude = rectangle.west;\n  cart.latitude = rectangle.south;\n  const southWest = projection.project(cart, viewRectangle2DSouthWest);\n\n  const width = Math.abs(northEast.x - southWest.x) * 0.5;\n  let height = Math.abs(northEast.y - southWest.y) * 0.5;\n\n  let right, top;\n  const ratio = camera.frustum.right / camera.frustum.top;\n  const heightRatio = height * ratio;\n  if (width > heightRatio) {\n    right = width;\n    top = right / ratio;\n  } else {\n    top = height;\n    right = heightRatio;\n  }\n\n  height = Math.max(2.0 * right, 2.0 * top);\n\n  result.x = (northEast.x - southWest.x) * 0.5 + southWest.x;\n  result.y = (northEast.y - southWest.y) * 0.5 + southWest.y;\n\n  cart = projection.unproject(result, cart);\n  cart.height = height;\n  result = projection.project(cart, result);\n\n  return result;\n}\n\n/**\n * Get the camera position needed to view a rectangle on an ellipsoid or map\n *\n * @param {Rectangle} rectangle The rectangle to view.\n * @param {Cartesian3} [result] The camera position needed to view the rectangle\n * @returns {Cartesian3} The camera position needed to view the rectangle\n */\nCamera.prototype.getRectangleCameraCoordinates = function (rectangle, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(rectangle)) {\n    throw new DeveloperError(\"rectangle is required\");\n  }\n  //>>includeEnd('debug');\n  const mode = this._mode;\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  if (mode === SceneMode.SCENE3D) {\n    return rectangleCameraPosition3D(this, rectangle, result);\n  } else if (mode === SceneMode.COLUMBUS_VIEW) {\n    return rectangleCameraPositionColumbusView(this, rectangle, result);\n  } else if (mode === SceneMode.SCENE2D) {\n    return rectangleCameraPosition2D(this, rectangle, result);\n  }\n\n  return undefined;\n};\n\nconst pickEllipsoid3DRay = new Ray();\nfunction pickEllipsoid3D(camera, windowPosition, ellipsoid, result) {\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  const ray = camera.getPickRay(windowPosition, pickEllipsoid3DRay);\n  const intersection = IntersectionTests.rayEllipsoid(ray, ellipsoid);\n  if (!intersection) {\n    return undefined;\n  }\n\n  const t = intersection.start > 0.0 ? intersection.start : intersection.stop;\n  return Ray.getPoint(ray, t, result);\n}\n\nconst pickEllipsoid2DRay = new Ray();\nfunction pickMap2D(camera, windowPosition, projection, result) {\n  const ray = camera.getPickRay(windowPosition, pickEllipsoid2DRay);\n  let position = ray.origin;\n  position = Cartesian3.fromElements(position.y, position.z, 0.0, position);\n  const cart = projection.unproject(position);\n\n  if (\n    cart.latitude < -CesiumMath.PI_OVER_TWO ||\n    cart.latitude > CesiumMath.PI_OVER_TWO\n  ) {\n    return undefined;\n  }\n\n  return projection.ellipsoid.cartographicToCartesian(cart, result);\n}\n\nconst pickEllipsoidCVRay = new Ray();\nfunction pickMapColumbusView(camera, windowPosition, projection, result) {\n  const ray = camera.getPickRay(windowPosition, pickEllipsoidCVRay);\n  const scalar = -ray.origin.x / ray.direction.x;\n  Ray.getPoint(ray, scalar, result);\n\n  const cart = projection.unproject(new Cartesian3(result.y, result.z, 0.0));\n\n  if (\n    cart.latitude < -CesiumMath.PI_OVER_TWO ||\n    cart.latitude > CesiumMath.PI_OVER_TWO ||\n    cart.longitude < -Math.PI ||\n    cart.longitude > Math.PI\n  ) {\n    return undefined;\n  }\n\n  return projection.ellipsoid.cartographicToCartesian(cart, result);\n}\n\n/**\n * Pick an ellipsoid or map.\n *\n * @param {Cartesian2} windowPosition The x and y coordinates of a pixel.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to pick.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3 | undefined} If the ellipsoid or map was picked,\n * returns the point on the surface of the ellipsoid or map in world\n * coordinates. If the ellipsoid or map was not picked, returns undefined.\n *\n * @example\n * const canvas = viewer.scene.canvas;\n * const center = new Cesium.Cartesian2(canvas.clientWidth / 2.0, canvas.clientHeight / 2.0);\n * const ellipsoid = viewer.scene.ellipsoid;\n * const result = viewer.camera.pickEllipsoid(center, ellipsoid);\n */\nCamera.prototype.pickEllipsoid = function (windowPosition, ellipsoid, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(windowPosition)) {\n    throw new DeveloperError(\"windowPosition is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const canvas = this._scene.canvas;\n  if (canvas.clientWidth === 0 || canvas.clientHeight === 0) {\n    return undefined;\n  }\n\n  if (!defined(result)) {\n    result = new Cartesian3();\n  }\n\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n\n  if (this._mode === SceneMode.SCENE3D) {\n    result = pickEllipsoid3D(this, windowPosition, ellipsoid, result);\n  } else if (this._mode === SceneMode.SCENE2D) {\n    result = pickMap2D(this, windowPosition, this._projection, result);\n  } else if (this._mode === SceneMode.COLUMBUS_VIEW) {\n    result = pickMapColumbusView(\n      this,\n      windowPosition,\n      this._projection,\n      result,\n    );\n  } else {\n    return undefined;\n  }\n\n  return result;\n};\n\nconst pickPerspCenter = new Cartesian3();\nconst pickPerspXDir = new Cartesian3();\nconst pickPerspYDir = new Cartesian3();\nfunction getPickRayPerspective(camera, windowPosition, result) {\n  const canvas = camera._scene.canvas;\n  const width = canvas.clientWidth;\n  const height = canvas.clientHeight;\n\n  const tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n  const tanTheta = camera.frustum.aspectRatio * tanPhi;\n  const near = camera.frustum.near;\n\n  const x = (2.0 / width) * windowPosition.x - 1.0;\n  const y = (2.0 / height) * (height - windowPosition.y) - 1.0;\n\n  const position = camera.positionWC;\n  Cartesian3.clone(position, result.origin);\n\n  const nearCenter = Cartesian3.multiplyByScalar(\n    camera.directionWC,\n    near,\n    pickPerspCenter,\n  );\n  Cartesian3.add(position, nearCenter, nearCenter);\n  const xDir = Cartesian3.multiplyByScalar(\n    camera.rightWC,\n    x * near * tanTheta,\n    pickPerspXDir,\n  );\n  const yDir = Cartesian3.multiplyByScalar(\n    camera.upWC,\n    y * near * tanPhi,\n    pickPerspYDir,\n  );\n  const direction = Cartesian3.add(nearCenter, xDir, result.direction);\n  Cartesian3.add(direction, yDir, direction);\n  Cartesian3.subtract(direction, position, direction);\n  Cartesian3.normalize(direction, direction);\n\n  return result;\n}\n\nconst scratchDirection = new Cartesian3();\n\nfunction getPickRayOrthographic(camera, windowPosition, result) {\n  const canvas = camera._scene.canvas;\n  const width = canvas.clientWidth;\n  const height = canvas.clientHeight;\n\n  let frustum = camera.frustum;\n  const offCenterFrustum = frustum.offCenterFrustum;\n  if (defined(offCenterFrustum)) {\n    frustum = offCenterFrustum;\n  }\n  let x = (2.0 / width) * windowPosition.x - 1.0;\n  x *= (frustum.right - frustum.left) * 0.5;\n  let y = (2.0 / height) * (height - windowPosition.y) - 1.0;\n  y *= (frustum.top - frustum.bottom) * 0.5;\n\n  const origin = result.origin;\n  Cartesian3.clone(camera.positionWC, origin);\n\n  Cartesian3.multiplyByScalar(camera.rightWC, x, scratchDirection);\n  Cartesian3.add(scratchDirection, origin, origin);\n  Cartesian3.multiplyByScalar(camera.upWC, y, scratchDirection);\n  Cartesian3.add(scratchDirection, origin, origin);\n\n  Cartesian3.clone(camera.directionWC, result.direction);\n\n  // Account for wrap-around in 2D infinite scroll mode\n  if (\n    camera._mode === SceneMode.SCENE2D &&\n    camera._scene.mapMode2D === MapMode2D.INFINITE_SCROLL\n  ) {\n    const maxHorizontal = camera._maxCoord.x;\n    origin.y =\n      CesiumMath.mod(origin.y + maxHorizontal, 2.0 * maxHorizontal) -\n      maxHorizontal;\n  }\n\n  return result;\n}\n\n/**\n * Create a ray from the camera position through the pixel at <code>windowPosition</code>\n * in world coordinates.\n *\n * @param {Cartesian2} windowPosition The x and y coordinates of a pixel.\n * @param {Ray} [result] The object onto which to store the result.\n * @returns {Ray|undefined} Returns the {@link Cartesian3} position and direction of the ray, or undefined if the pick ray cannot be determined.\n */\nCamera.prototype.getPickRay = function (windowPosition, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(windowPosition)) {\n    throw new DeveloperError(\"windowPosition is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Ray();\n  }\n\n  const canvas = this._scene.canvas;\n  if (canvas.clientWidth <= 0 || canvas.clientHeight <= 0) {\n    return undefined;\n  }\n\n  const frustum = this.frustum;\n  if (\n    defined(frustum.aspectRatio) &&\n    defined(frustum.fov) &&\n    defined(frustum.near)\n  ) {\n    return getPickRayPerspective(this, windowPosition, result);\n  }\n\n  return getPickRayOrthographic(this, windowPosition, result);\n};\n\nconst scratchToCenter = new Cartesian3();\nconst scratchProj = new Cartesian3();\n\n/**\n * Return the distance from the camera to the front of the bounding sphere.\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere in world coordinates.\n * @returns {number} The distance to the bounding sphere.\n */\nCamera.prototype.distanceToBoundingSphere = function (boundingSphere) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(boundingSphere)) {\n    throw new DeveloperError(\"boundingSphere is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const toCenter = Cartesian3.subtract(\n    this.positionWC,\n    boundingSphere.center,\n    scratchToCenter,\n  );\n  const proj = Cartesian3.multiplyByScalar(\n    this.directionWC,\n    Cartesian3.dot(toCenter, this.directionWC),\n    scratchProj,\n  );\n  return Math.max(0.0, Cartesian3.magnitude(proj) - boundingSphere.radius);\n};\n\nconst scratchPixelSize = new Cartesian2();\n\n/**\n * Return the pixel size in meters.\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere in world coordinates.\n * @param {number} drawingBufferWidth The drawing buffer width.\n * @param {number} drawingBufferHeight The drawing buffer height.\n * @returns {number} The pixel size in meters.\n */\nCamera.prototype.getPixelSize = function (\n  boundingSphere,\n  drawingBufferWidth,\n  drawingBufferHeight,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(boundingSphere)) {\n    throw new DeveloperError(\"boundingSphere is required.\");\n  }\n  if (!defined(drawingBufferWidth)) {\n    throw new DeveloperError(\"drawingBufferWidth is required.\");\n  }\n  if (!defined(drawingBufferHeight)) {\n    throw new DeveloperError(\"drawingBufferHeight is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const distance = this.distanceToBoundingSphere(boundingSphere);\n  const pixelSize = this.frustum.getPixelDimensions(\n    drawingBufferWidth,\n    drawingBufferHeight,\n    distance,\n    this._scene.pixelRatio,\n    scratchPixelSize,\n  );\n  return Math.max(pixelSize.x, pixelSize.y);\n};\n\nfunction createAnimationTemplateCV(\n  camera,\n  position,\n  center,\n  maxX,\n  maxY,\n  duration,\n) {\n  const newPosition = Cartesian3.clone(position);\n\n  if (center.y > maxX) {\n    newPosition.y -= center.y - maxX;\n  } else if (center.y < -maxX) {\n    newPosition.y += -maxX - center.y;\n  }\n\n  if (center.z > maxY) {\n    newPosition.z -= center.z - maxY;\n  } else if (center.z < -maxY) {\n    newPosition.z += -maxY - center.z;\n  }\n\n  function updateCV(value) {\n    const interp = Cartesian3.lerp(\n      position,\n      newPosition,\n      value.time,\n      new Cartesian3(),\n    );\n    camera.worldToCameraCoordinatesPoint(interp, camera.position);\n  }\n  return {\n    easingFunction: EasingFunction.EXPONENTIAL_OUT,\n    startObject: {\n      time: 0.0,\n    },\n    stopObject: {\n      time: 1.0,\n    },\n    duration: duration,\n    update: updateCV,\n  };\n}\n\nconst normalScratch = new Cartesian3();\nconst centerScratch = new Cartesian3();\nconst posScratch = new Cartesian3();\nconst scratchCartesian3Subtract = new Cartesian3();\n\nfunction createAnimationCV(camera, duration) {\n  let position = camera.position;\n  const direction = camera.direction;\n\n  const normal = camera.worldToCameraCoordinatesVector(\n    Cartesian3.UNIT_X,\n    normalScratch,\n  );\n  const scalar =\n    -Cartesian3.dot(normal, position) / Cartesian3.dot(normal, direction);\n  const center = Cartesian3.add(\n    position,\n    Cartesian3.multiplyByScalar(direction, scalar, centerScratch),\n    centerScratch,\n  );\n  camera.cameraToWorldCoordinatesPoint(center, center);\n\n  position = camera.cameraToWorldCoordinatesPoint(camera.position, posScratch);\n\n  const tanPhi = Math.tan(camera.frustum.fovy * 0.5);\n  const tanTheta = camera.frustum.aspectRatio * tanPhi;\n  const distToC = Cartesian3.magnitude(\n    Cartesian3.subtract(position, center, scratchCartesian3Subtract),\n  );\n  const dWidth = tanTheta * distToC;\n  const dHeight = tanPhi * distToC;\n\n  const mapWidth = camera._maxCoord.x;\n  const mapHeight = camera._maxCoord.y;\n\n  const maxX = Math.max(dWidth - mapWidth, mapWidth);\n  const maxY = Math.max(dHeight - mapHeight, mapHeight);\n\n  if (\n    position.z < -maxX ||\n    position.z > maxX ||\n    position.y < -maxY ||\n    position.y > maxY\n  ) {\n    const translateX = center.y < -maxX || center.y > maxX;\n    const translateY = center.z < -maxY || center.z > maxY;\n    if (translateX || translateY) {\n      return createAnimationTemplateCV(\n        camera,\n        position,\n        center,\n        maxX,\n        maxY,\n        duration,\n      );\n    }\n  }\n\n  return undefined;\n}\n\n/**\n * Create an animation to move the map into view. This method is only valid for 2D and Columbus modes.\n *\n * @param {number} duration The duration, in seconds, of the animation.\n * @returns {object} The animation or undefined if the scene mode is 3D or the map is already ion view.\n *\n * @private\n */\nCamera.prototype.createCorrectPositionTween = function (duration) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(duration)) {\n    throw new DeveloperError(\"duration is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (this._mode === SceneMode.COLUMBUS_VIEW) {\n    return createAnimationCV(this, duration);\n  }\n\n  return undefined;\n};\n\nconst scratchFlyToDestination = new Cartesian3();\nconst newOptions = {\n  destination: undefined,\n  heading: undefined,\n  pitch: undefined,\n  roll: undefined,\n  duration: undefined,\n  complete: undefined,\n  cancel: undefined,\n  endTransform: undefined,\n  maximumHeight: undefined,\n  easingFunction: undefined,\n};\n\n/**\n * Cancels the current camera flight and leaves the camera at its current location.\n * If no flight is in progress, this function does nothing.\n */\nCamera.prototype.cancelFlight = function () {\n  if (defined(this._currentFlight)) {\n    this._currentFlight.cancelTween();\n    this._currentFlight = undefined;\n  }\n};\n\n/**\n * Completes the current camera flight and moves the camera immediately to its final destination.\n * If no flight is in progress, this function does nothing.\n */\nCamera.prototype.completeFlight = function () {\n  if (defined(this._currentFlight)) {\n    this._currentFlight.cancelTween();\n\n    const options = {\n      destination: undefined,\n      orientation: {\n        heading: undefined,\n        pitch: undefined,\n        roll: undefined,\n      },\n    };\n\n    options.destination = newOptions.destination;\n    options.orientation.heading = newOptions.heading;\n    options.orientation.pitch = newOptions.pitch;\n    options.orientation.roll = newOptions.roll;\n\n    this.setView(options);\n\n    if (defined(this._currentFlight.complete)) {\n      this._currentFlight.complete();\n    }\n\n    this._currentFlight = undefined;\n  }\n};\n\n/**\n * Flies the camera from its current position to a new position.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3|Rectangle} options.destination The final position of the camera in world coordinates or a rectangle that would be visible from a top-down view.\n * @param {object} [options.orientation] An object that contains either direction and up properties or heading, pitch and roll properties. By default, the direction will point\n * towards the center of the frame in 3D and in the negative z direction in Columbus view. The up direction will point towards local north in 3D and in the positive\n * y direction in Columbus view.  Orientation is not used in 2D when in infinite scrolling mode.\n * @param {number} [options.duration] The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight.\n * @param {Camera.FlightCompleteCallback} [options.complete] The function to execute when the flight is complete.\n * @param {Camera.FlightCancelledCallback} [options.cancel] The function to execute if the flight is cancelled.\n * @param {Matrix4} [options.endTransform] Transform matrix representing the reference frame the camera will be in when the flight is completed.\n * @param {number} [options.maximumHeight] The maximum height at the peak of the flight.\n * @param {number} [options.pitchAdjustHeight] If camera flyes higher than that value, adjust pitch duiring the flight to look down, and keep Earth in viewport.\n * @param {number} [options.flyOverLongitude] There are always two ways between 2 points on globe. This option force camera to choose fight direction to fly over that longitude.\n * @param {number} [options.flyOverLongitudeWeight] Fly over the lon specifyed via flyOverLongitude only if that way is not longer than short way times flyOverLongitudeWeight.\n * @param {boolean} [options.convert] Whether to convert the destination from world coordinates to scene coordinates (only relevant when not using 3D). Defaults to <code>true</code>.\n * @param {EasingFunction.Callback} [options.easingFunction] Controls how the time is interpolated over the duration of the flight.\n *\n * @exception {DeveloperError} If either direction or up is given, then both are required.\n *\n * @example\n * // 1. Fly to a position with a top-down view\n * viewer.camera.flyTo({\n *     destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)\n * });\n *\n * // 2. Fly to a Rectangle with a top-down view\n * viewer.camera.flyTo({\n *     destination : Cesium.Rectangle.fromDegrees(west, south, east, north)\n * });\n *\n * // 3. Fly to a position with an orientation using unit vectors.\n * viewer.camera.flyTo({\n *     destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),\n *     orientation : {\n *         direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734),\n *         up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339)\n *     }\n * });\n *\n * // 4. Fly to a position with an orientation using heading, pitch and roll.\n * viewer.camera.flyTo({\n *     destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),\n *     orientation : {\n *         heading : Cesium.Math.toRadians(175.0),\n *         pitch : Cesium.Math.toRadians(-35.0),\n *         roll : 0.0\n *     }\n * });\n */\nCamera.prototype.flyTo = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  let destination = options.destination;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(destination)) {\n    throw new DeveloperError(\"destination is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const mode = this._mode;\n  if (mode === SceneMode.MORPHING) {\n    return;\n  }\n\n  this.cancelFlight();\n\n  const isRectangle = destination instanceof Rectangle;\n  if (isRectangle) {\n    destination = this.getRectangleCameraCoordinates(\n      destination,\n      scratchFlyToDestination,\n    );\n  }\n\n  let orientation = options.orientation ?? Frozen.EMPTY_OBJECT;\n  if (defined(orientation.direction)) {\n    orientation = directionUpToHeadingPitchRoll(\n      this,\n      destination,\n      orientation,\n      scratchSetViewOptions.orientation,\n    );\n  }\n\n  if (defined(options.duration) && options.duration <= 0.0) {\n    const setViewOptions = scratchSetViewOptions;\n    setViewOptions.destination = options.destination;\n    setViewOptions.orientation.heading = orientation.heading;\n    setViewOptions.orientation.pitch = orientation.pitch;\n    setViewOptions.orientation.roll = orientation.roll;\n    setViewOptions.convert = options.convert;\n    setViewOptions.endTransform = options.endTransform;\n    this.setView(setViewOptions);\n    if (typeof options.complete === \"function\") {\n      options.complete();\n    }\n    return;\n  }\n\n  const that = this;\n  /* eslint-disable-next-line prefer-const */\n  let flightTween;\n\n  newOptions.destination = destination;\n  newOptions.heading = orientation.heading;\n  newOptions.pitch = orientation.pitch;\n  newOptions.roll = orientation.roll;\n  newOptions.duration = options.duration;\n  newOptions.complete = function () {\n    if (flightTween === that._currentFlight) {\n      that._currentFlight = undefined;\n    }\n    if (defined(options.complete)) {\n      options.complete();\n    }\n  };\n  newOptions.cancel = options.cancel;\n  newOptions.endTransform = options.endTransform;\n  newOptions.convert = isRectangle ? false : options.convert;\n  newOptions.maximumHeight = options.maximumHeight;\n  newOptions.pitchAdjustHeight = options.pitchAdjustHeight;\n  newOptions.flyOverLongitude = options.flyOverLongitude;\n  newOptions.flyOverLongitudeWeight = options.flyOverLongitudeWeight;\n  newOptions.easingFunction = options.easingFunction;\n\n  const scene = this._scene;\n  const tweenOptions = CameraFlightPath.createTween(scene, newOptions);\n  // If the camera doesn't actually need to go anywhere, duration\n  // will be 0 and we can just complete the current flight.\n  if (tweenOptions.duration === 0) {\n    if (typeof tweenOptions.complete === \"function\") {\n      tweenOptions.complete();\n    }\n    return;\n  }\n  flightTween = scene.tweens.add(tweenOptions);\n  this._currentFlight = flightTween;\n\n  // Save the final destination view information for the PRELOAD_FLIGHT pass.\n  let preloadFlightCamera = this._scene.preloadFlightCamera;\n  if (this._mode !== SceneMode.SCENE2D) {\n    if (!defined(preloadFlightCamera)) {\n      preloadFlightCamera = Camera.clone(this);\n    }\n    preloadFlightCamera.setView({\n      destination: destination,\n      orientation: orientation,\n    });\n\n    this._scene.preloadFlightCullingVolume =\n      preloadFlightCamera.frustum.computeCullingVolume(\n        preloadFlightCamera.positionWC,\n        preloadFlightCamera.directionWC,\n        preloadFlightCamera.upWC,\n      );\n  }\n};\n\nfunction distanceToBoundingSphere3D(camera, radius) {\n  const frustum = camera.frustum;\n  const tanPhi = Math.tan(frustum.fovy * 0.5);\n  const tanTheta = frustum.aspectRatio * tanPhi;\n  return Math.max(radius / tanTheta, radius / tanPhi);\n}\n\nfunction distanceToBoundingSphere2D(camera, radius) {\n  let frustum = camera.frustum;\n  const offCenterFrustum = frustum.offCenterFrustum;\n  if (defined(offCenterFrustum)) {\n    frustum = offCenterFrustum;\n  }\n\n  let right, top;\n  const ratio = frustum.right / frustum.top;\n  const heightRatio = radius * ratio;\n  if (radius > heightRatio) {\n    right = radius;\n    top = right / ratio;\n  } else {\n    top = radius;\n    right = heightRatio;\n  }\n\n  return Math.max(right, top) * 1.5;\n}\n\nconst MINIMUM_ZOOM = 100.0;\n\nfunction adjustBoundingSphereOffset(camera, boundingSphere, offset) {\n  offset = HeadingPitchRange.clone(\n    defined(offset) ? offset : Camera.DEFAULT_OFFSET,\n  );\n\n  const minimumZoom =\n    camera._scene.screenSpaceCameraController.minimumZoomDistance;\n  const maximumZoom =\n    camera._scene.screenSpaceCameraController.maximumZoomDistance;\n  const range = offset.range;\n  if (!defined(range) || range === 0.0) {\n    const radius = boundingSphere.radius;\n    if (radius === 0.0) {\n      offset.range = MINIMUM_ZOOM;\n    } else if (\n      camera.frustum instanceof OrthographicFrustum ||\n      camera._mode === SceneMode.SCENE2D\n    ) {\n      offset.range = distanceToBoundingSphere2D(camera, radius);\n    } else {\n      offset.range = distanceToBoundingSphere3D(camera, radius);\n    }\n    offset.range = CesiumMath.clamp(offset.range, minimumZoom, maximumZoom);\n  }\n\n  return offset;\n}\n\n/**\n * Sets the camera so that the current view contains the provided bounding sphere.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere to view, in world coordinates.\n * @param {HeadingPitchRange} [offset] The offset from the target in the local east-north-up reference frame centered at the target.\n *\n * @exception {DeveloperError} viewBoundingSphere is not supported while morphing.\n */\nCamera.prototype.viewBoundingSphere = function (boundingSphere, offset) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(boundingSphere)) {\n    throw new DeveloperError(\"boundingSphere is required.\");\n  }\n\n  if (this._mode === SceneMode.MORPHING) {\n    throw new DeveloperError(\n      \"viewBoundingSphere is not supported while morphing.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  offset = adjustBoundingSphereOffset(this, boundingSphere, offset);\n  this.lookAt(boundingSphere.center, offset);\n};\n\nconst scratchflyToBoundingSphereTransform = new Matrix4();\nconst scratchflyToBoundingSphereDestination = new Cartesian3();\nconst scratchflyToBoundingSphereDirection = new Cartesian3();\nconst scratchflyToBoundingSphereUp = new Cartesian3();\nconst scratchflyToBoundingSphereRight = new Cartesian3();\nconst scratchFlyToBoundingSphereCart4 = new Cartesian4();\nconst scratchFlyToBoundingSphereQuaternion = new Quaternion();\nconst scratchFlyToBoundingSphereMatrix3 = new Matrix3();\n\n/**\n * Flies the camera to a location where the current view contains the provided bounding sphere.\n *\n * <p> The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are below the plane. Negative pitch angles are above the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D and Columbus View, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be aligned to local north.</p>\n *\n * @param {BoundingSphere} boundingSphere The bounding sphere to view, in world coordinates.\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.duration] The duration of the flight in seconds. If omitted, Cesium attempts to calculate an ideal duration based on the distance to be traveled by the flight.\n * @param {HeadingPitchRange} [options.offset] The offset from the target in the local east-north-up reference frame centered at the target.\n * @param {Camera.FlightCompleteCallback} [options.complete] The function to execute when the flight is complete.\n * @param {Camera.FlightCancelledCallback} [options.cancel] The function to execute if the flight is cancelled.\n * @param {Matrix4} [options.endTransform] Transform matrix representing the reference frame the camera will be in when the flight is completed.\n * @param {number} [options.maximumHeight] The maximum height at the peak of the flight.\n * @param {number} [options.pitchAdjustHeight] If camera flyes higher than that value, adjust pitch duiring the flight to look down, and keep Earth in viewport.\n * @param {number} [options.flyOverLongitude] There are always two ways between 2 points on globe. This option force camera to choose fight direction to fly over that longitude.\n * @param {number} [options.flyOverLongitudeWeight] Fly over the lon specifyed via flyOverLongitude only if that way is not longer than short way times flyOverLongitudeWeight.\n * @param {EasingFunction.Callback} [options.easingFunction] Controls how the time is interpolated over the duration of the flight.\n */\nCamera.prototype.flyToBoundingSphere = function (boundingSphere, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(boundingSphere)) {\n    throw new DeveloperError(\"boundingSphere is required.\");\n  }\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const scene2D =\n    this._mode === SceneMode.SCENE2D || this._mode === SceneMode.COLUMBUS_VIEW;\n  this._setTransform(Matrix4.IDENTITY);\n  const offset = adjustBoundingSphereOffset(\n    this,\n    boundingSphere,\n    options.offset,\n  );\n\n  let position;\n  if (scene2D) {\n    position = Cartesian3.multiplyByScalar(\n      Cartesian3.UNIT_Z,\n      offset.range,\n      scratchflyToBoundingSphereDestination,\n    );\n  } else {\n    position = offsetFromHeadingPitchRange(\n      offset.heading,\n      offset.pitch,\n      offset.range,\n    );\n  }\n\n  const scene = this._scene;\n  const ellipsoid = scene.ellipsoid ?? Ellipsoid.default;\n\n  const transform = Transforms.eastNorthUpToFixedFrame(\n    boundingSphere.center,\n    ellipsoid,\n    scratchflyToBoundingSphereTransform,\n  );\n  Matrix4.multiplyByPoint(transform, position, position);\n\n  let direction;\n  let up;\n\n  if (!scene2D) {\n    direction = Cartesian3.subtract(\n      boundingSphere.center,\n      position,\n      scratchflyToBoundingSphereDirection,\n    );\n    Cartesian3.normalize(direction, direction);\n\n    up = Matrix4.multiplyByPointAsVector(\n      transform,\n      Cartesian3.UNIT_Z,\n      scratchflyToBoundingSphereUp,\n    );\n    if (1.0 - Math.abs(Cartesian3.dot(direction, up)) < CesiumMath.EPSILON6) {\n      const rotateQuat = Quaternion.fromAxisAngle(\n        direction,\n        offset.heading,\n        scratchFlyToBoundingSphereQuaternion,\n      );\n      const rotation = Matrix3.fromQuaternion(\n        rotateQuat,\n        scratchFlyToBoundingSphereMatrix3,\n      );\n\n      Cartesian3.fromCartesian4(\n        Matrix4.getColumn(transform, 1, scratchFlyToBoundingSphereCart4),\n        up,\n      );\n      Matrix3.multiplyByVector(rotation, up, up);\n    }\n\n    const right = Cartesian3.cross(\n      direction,\n      up,\n      scratchflyToBoundingSphereRight,\n    );\n    Cartesian3.cross(right, direction, up);\n    Cartesian3.normalize(up, up);\n  }\n\n  this.flyTo({\n    destination: position,\n    orientation: {\n      direction: direction,\n      up: up,\n    },\n    duration: options.duration,\n    complete: options.complete,\n    cancel: options.cancel,\n    endTransform: options.endTransform,\n    maximumHeight: options.maximumHeight,\n    easingFunction: options.easingFunction,\n    flyOverLongitude: options.flyOverLongitude,\n    flyOverLongitudeWeight: options.flyOverLongitudeWeight,\n    pitchAdjustHeight: options.pitchAdjustHeight,\n  });\n};\n\nconst scratchCartesian3_1 = new Cartesian3();\nconst scratchCartesian3_2 = new Cartesian3();\nconst scratchCartesian3_3 = new Cartesian3();\nconst scratchCartesian3_4 = new Cartesian3();\nconst horizonPoints = [\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n];\n\nfunction computeHorizonQuad(camera, ellipsoid) {\n  const radii = ellipsoid.radii;\n  const p = camera.positionWC;\n\n  // Find the corresponding position in the scaled space of the ellipsoid.\n  const q = Cartesian3.multiplyComponents(\n    ellipsoid.oneOverRadii,\n    p,\n    scratchCartesian3_1,\n  );\n\n  const qMagnitude = Cartesian3.magnitude(q);\n  const qUnit = Cartesian3.normalize(q, scratchCartesian3_2);\n\n  // Determine the east and north directions at q.\n  let eUnit;\n  let nUnit;\n  if (\n    Cartesian3.equalsEpsilon(qUnit, Cartesian3.UNIT_Z, CesiumMath.EPSILON10)\n  ) {\n    eUnit = new Cartesian3(0, 1, 0);\n    nUnit = new Cartesian3(0, 0, 1);\n  } else {\n    eUnit = Cartesian3.normalize(\n      Cartesian3.cross(Cartesian3.UNIT_Z, qUnit, scratchCartesian3_3),\n      scratchCartesian3_3,\n    );\n    nUnit = Cartesian3.normalize(\n      Cartesian3.cross(qUnit, eUnit, scratchCartesian3_4),\n      scratchCartesian3_4,\n    );\n  }\n\n  // Determine the radius of the 'limb' of the ellipsoid.\n  const wMagnitude = Math.sqrt(Cartesian3.magnitudeSquared(q) - 1.0);\n\n  // Compute the center and offsets.\n  const center = Cartesian3.multiplyByScalar(\n    qUnit,\n    1.0 / qMagnitude,\n    scratchCartesian3_1,\n  );\n  const scalar = wMagnitude / qMagnitude;\n  const eastOffset = Cartesian3.multiplyByScalar(\n    eUnit,\n    scalar,\n    scratchCartesian3_2,\n  );\n  const northOffset = Cartesian3.multiplyByScalar(\n    nUnit,\n    scalar,\n    scratchCartesian3_3,\n  );\n\n  // A conservative measure for the longitudes would be to use the min/max longitudes of the bounding frustum.\n  const upperLeft = Cartesian3.add(center, northOffset, horizonPoints[0]);\n  Cartesian3.subtract(upperLeft, eastOffset, upperLeft);\n  Cartesian3.multiplyComponents(radii, upperLeft, upperLeft);\n\n  const lowerLeft = Cartesian3.subtract(center, northOffset, horizonPoints[1]);\n  Cartesian3.subtract(lowerLeft, eastOffset, lowerLeft);\n  Cartesian3.multiplyComponents(radii, lowerLeft, lowerLeft);\n\n  const lowerRight = Cartesian3.subtract(center, northOffset, horizonPoints[2]);\n  Cartesian3.add(lowerRight, eastOffset, lowerRight);\n  Cartesian3.multiplyComponents(radii, lowerRight, lowerRight);\n\n  const upperRight = Cartesian3.add(center, northOffset, horizonPoints[3]);\n  Cartesian3.add(upperRight, eastOffset, upperRight);\n  Cartesian3.multiplyComponents(radii, upperRight, upperRight);\n\n  return horizonPoints;\n}\n\nconst scratchPickCartesian2 = new Cartesian2();\nconst scratchRectCartesian = new Cartesian3();\nconst cartoArray = [\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n];\nfunction addToResult(x, y, index, camera, ellipsoid, computedHorizonQuad) {\n  scratchPickCartesian2.x = x;\n  scratchPickCartesian2.y = y;\n  const r = camera.pickEllipsoid(\n    scratchPickCartesian2,\n    ellipsoid,\n    scratchRectCartesian,\n  );\n  if (defined(r)) {\n    cartoArray[index] = ellipsoid.cartesianToCartographic(r, cartoArray[index]);\n    return 1;\n  }\n  cartoArray[index] = ellipsoid.cartesianToCartographic(\n    computedHorizonQuad[index],\n    cartoArray[index],\n  );\n  return 0;\n}\n/**\n * Computes the approximate visible rectangle on the ellipsoid.\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid that you want to know the visible region.\n * @param {Rectangle} [result] The rectangle in which to store the result\n *\n * @returns {Rectangle|undefined} The visible rectangle or undefined if the ellipsoid isn't visible at all.\n */\nCamera.prototype.computeViewRectangle = function (ellipsoid, result) {\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  const cullingVolume = this.frustum.computeCullingVolume(\n    this.positionWC,\n    this.directionWC,\n    this.upWC,\n  );\n  const boundingSphere = new BoundingSphere(\n    Cartesian3.ZERO,\n    ellipsoid.maximumRadius,\n  );\n  const visibility = cullingVolume.computeVisibility(boundingSphere);\n  if (visibility === Intersect.OUTSIDE) {\n    return undefined;\n  }\n\n  const canvas = this._scene.canvas;\n  const width = canvas.clientWidth;\n  const height = canvas.clientHeight;\n\n  let successfulPickCount = 0;\n\n  const computedHorizonQuad = computeHorizonQuad(this, ellipsoid);\n\n  successfulPickCount += addToResult(\n    0,\n    0,\n    0,\n    this,\n    ellipsoid,\n    computedHorizonQuad,\n  );\n  successfulPickCount += addToResult(\n    0,\n    height,\n    1,\n    this,\n    ellipsoid,\n    computedHorizonQuad,\n  );\n  successfulPickCount += addToResult(\n    width,\n    height,\n    2,\n    this,\n    ellipsoid,\n    computedHorizonQuad,\n  );\n  successfulPickCount += addToResult(\n    width,\n    0,\n    3,\n    this,\n    ellipsoid,\n    computedHorizonQuad,\n  );\n\n  if (successfulPickCount < 2) {\n    // If we have space non-globe in 3 or 4 corners then return the whole globe\n    return Rectangle.MAX_VALUE;\n  }\n\n  result = Rectangle.fromCartographicArray(cartoArray, result);\n\n  // Detect if we go over the poles\n  let distance = 0;\n  let lastLon = cartoArray[3].longitude;\n  for (let i = 0; i < 4; ++i) {\n    const lon = cartoArray[i].longitude;\n    const diff = Math.abs(lon - lastLon);\n    if (diff > CesiumMath.PI) {\n      // Crossed the dateline\n      distance += CesiumMath.TWO_PI - diff;\n    } else {\n      distance += diff;\n    }\n\n    lastLon = lon;\n  }\n\n  // We are over one of the poles so adjust the rectangle accordingly\n  if (\n    CesiumMath.equalsEpsilon(\n      Math.abs(distance),\n      CesiumMath.TWO_PI,\n      CesiumMath.EPSILON9,\n    )\n  ) {\n    result.west = -CesiumMath.PI;\n    result.east = CesiumMath.PI;\n    if (cartoArray[0].latitude >= 0.0) {\n      result.north = CesiumMath.PI_OVER_TWO;\n    } else {\n      result.south = -CesiumMath.PI_OVER_TWO;\n    }\n  }\n\n  return result;\n};\n\n/**\n * Switches the frustum/projection to perspective.\n *\n * This function is a no-op in 2D which must always be orthographic.\n */\nCamera.prototype.switchToPerspectiveFrustum = function () {\n  if (\n    this._mode === SceneMode.SCENE2D ||\n    this.frustum instanceof PerspectiveFrustum\n  ) {\n    return;\n  }\n\n  const scene = this._scene;\n  this.frustum = new PerspectiveFrustum();\n  this.frustum.aspectRatio =\n    scene.drawingBufferWidth / scene.drawingBufferHeight;\n  this.frustum.fov = CesiumMath.toRadians(60.0);\n};\n\n/**\n * Switches the frustum/projection to orthographic.\n *\n * This function is a no-op in 2D which will always be orthographic.\n */\nCamera.prototype.switchToOrthographicFrustum = function () {\n  if (\n    this._mode === SceneMode.SCENE2D ||\n    this.frustum instanceof OrthographicFrustum\n  ) {\n    return;\n  }\n\n  // This must be called before changing the frustum because it uses the previous\n  // frustum to reconstruct the world space position from the depth buffer.\n  const frustumWidth = calculateOrthographicFrustumWidth(this);\n\n  const scene = this._scene;\n  this.frustum = new OrthographicFrustum();\n  this.frustum.aspectRatio =\n    scene.drawingBufferWidth / scene.drawingBufferHeight;\n  this.frustum.width = frustumWidth;\n};\n\n/**\n * @private\n */\nCamera.clone = function (camera, result) {\n  if (!defined(result)) {\n    result = new Camera(camera._scene);\n  }\n\n  Cartesian3.clone(camera.position, result.position);\n  Cartesian3.clone(camera.direction, result.direction);\n  Cartesian3.clone(camera.up, result.up);\n  Cartesian3.clone(camera.right, result.right);\n  Matrix4.clone(camera._transform, result.transform);\n  result._transformChanged = true;\n  result.frustum = camera.frustum.clone();\n\n  return result;\n};\n\n/**\n * A function that will execute when a flight completes.\n * @callback Camera.FlightCompleteCallback\n */\n\n/**\n * A function that will execute when a flight is cancelled.\n * @callback Camera.FlightCancelledCallback\n */\nexport default Camera;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport KeyboardEventModifier from \"../Core/KeyboardEventModifier.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport ScreenSpaceEventHandler from \"../Core/ScreenSpaceEventHandler.js\";\nimport ScreenSpaceEventType from \"../Core/ScreenSpaceEventType.js\";\nimport CameraEventType from \"./CameraEventType.js\";\n\nfunction getKey(type, modifier) {\n  let key = `${type}`;\n  if (defined(modifier)) {\n    key += `+${modifier}`;\n  }\n  return key;\n}\n\nfunction clonePinchMovement(pinchMovement, result) {\n  Cartesian2.clone(\n    pinchMovement.distance.startPosition,\n    result.distance.startPosition,\n  );\n  Cartesian2.clone(\n    pinchMovement.distance.endPosition,\n    result.distance.endPosition,\n  );\n\n  Cartesian2.clone(\n    pinchMovement.angleAndHeight.startPosition,\n    result.angleAndHeight.startPosition,\n  );\n  Cartesian2.clone(\n    pinchMovement.angleAndHeight.endPosition,\n    result.angleAndHeight.endPosition,\n  );\n}\n\nfunction listenToPinch(aggregator, modifier, canvas) {\n  const key = getKey(CameraEventType.PINCH, modifier);\n\n  const update = aggregator._update;\n  const isDown = aggregator._isDown;\n  const eventStartPosition = aggregator._eventStartPosition;\n  const pressTime = aggregator._pressTime;\n  const releaseTime = aggregator._releaseTime;\n\n  update[key] = true;\n  isDown[key] = false;\n  eventStartPosition[key] = new Cartesian2();\n\n  let movement = aggregator._movement[key];\n  if (!defined(movement)) {\n    movement = aggregator._movement[key] = {};\n  }\n\n  movement.distance = {\n    startPosition: new Cartesian2(),\n    endPosition: new Cartesian2(),\n  };\n  movement.angleAndHeight = {\n    startPosition: new Cartesian2(),\n    endPosition: new Cartesian2(),\n  };\n  movement.prevAngle = 0.0;\n\n  aggregator._eventHandler.setInputAction(\n    function (event) {\n      aggregator._buttonsDown++;\n      isDown[key] = true;\n      pressTime[key] = new Date();\n      // Compute center position and store as start point.\n      Cartesian2.lerp(\n        event.position1,\n        event.position2,\n        0.5,\n        eventStartPosition[key],\n      );\n    },\n    ScreenSpaceEventType.PINCH_START,\n    modifier,\n  );\n\n  aggregator._eventHandler.setInputAction(\n    function () {\n      aggregator._buttonsDown = Math.max(aggregator._buttonsDown - 1, 0);\n      isDown[key] = false;\n      releaseTime[key] = new Date();\n    },\n    ScreenSpaceEventType.PINCH_END,\n    modifier,\n  );\n\n  aggregator._eventHandler.setInputAction(\n    function (mouseMovement) {\n      if (isDown[key]) {\n        // Aggregate several input events into a single animation frame.\n        if (!update[key]) {\n          Cartesian2.clone(\n            mouseMovement.distance.endPosition,\n            movement.distance.endPosition,\n          );\n          Cartesian2.clone(\n            mouseMovement.angleAndHeight.endPosition,\n            movement.angleAndHeight.endPosition,\n          );\n        } else {\n          clonePinchMovement(mouseMovement, movement);\n          update[key] = false;\n          movement.prevAngle = movement.angleAndHeight.startPosition.x;\n        }\n        // Make sure our aggregation of angles does not \"flip\" over 360 degrees.\n        let angle = movement.angleAndHeight.endPosition.x;\n        const prevAngle = movement.prevAngle;\n        const TwoPI = Math.PI * 2;\n        while (angle >= prevAngle + Math.PI) {\n          angle -= TwoPI;\n        }\n        while (angle < prevAngle - Math.PI) {\n          angle += TwoPI;\n        }\n        movement.angleAndHeight.endPosition.x =\n          (-angle * canvas.clientWidth) / 12;\n        movement.angleAndHeight.startPosition.x =\n          (-prevAngle * canvas.clientWidth) / 12;\n      }\n    },\n    ScreenSpaceEventType.PINCH_MOVE,\n    modifier,\n  );\n}\n\nfunction listenToWheel(aggregator, modifier) {\n  const key = getKey(CameraEventType.WHEEL, modifier);\n\n  const pressTime = aggregator._pressTime;\n  const releaseTime = aggregator._releaseTime;\n\n  const update = aggregator._update;\n  update[key] = true;\n\n  let movement = aggregator._movement[key];\n  if (!defined(movement)) {\n    movement = aggregator._movement[key] = {};\n  }\n\n  let lastMovement = aggregator._lastMovement[key];\n  if (!defined(lastMovement)) {\n    lastMovement = aggregator._lastMovement[key] = {\n      startPosition: new Cartesian2(),\n      endPosition: new Cartesian2(),\n      valid: false,\n    };\n  }\n\n  movement.startPosition = new Cartesian2();\n  Cartesian2.clone(Cartesian2.ZERO, movement.startPosition);\n  movement.endPosition = new Cartesian2();\n\n  aggregator._eventHandler.setInputAction(\n    function (delta) {\n      const arcLength = 7.5 * CesiumMath.toRadians(delta);\n      pressTime[key] = releaseTime[key] = new Date();\n      movement.endPosition.x = 0.0;\n      movement.endPosition.y = arcLength;\n      Cartesian2.clone(movement.endPosition, lastMovement.endPosition);\n      lastMovement.valid = true;\n      update[key] = false;\n    },\n    ScreenSpaceEventType.WHEEL,\n    modifier,\n  );\n}\n\nfunction listenMouseButtonDownUp(aggregator, modifier, type) {\n  const key = getKey(type, modifier);\n\n  const isDown = aggregator._isDown;\n  const eventStartPosition = aggregator._eventStartPosition;\n  const pressTime = aggregator._pressTime;\n\n  isDown[key] = false;\n  eventStartPosition[key] = new Cartesian2();\n\n  let lastMovement = aggregator._lastMovement[key];\n  if (!defined(lastMovement)) {\n    lastMovement = aggregator._lastMovement[key] = {\n      startPosition: new Cartesian2(),\n      endPosition: new Cartesian2(),\n      valid: false,\n    };\n  }\n\n  let down;\n  let up;\n  if (type === CameraEventType.LEFT_DRAG) {\n    down = ScreenSpaceEventType.LEFT_DOWN;\n    up = ScreenSpaceEventType.LEFT_UP;\n  } else if (type === CameraEventType.RIGHT_DRAG) {\n    down = ScreenSpaceEventType.RIGHT_DOWN;\n    up = ScreenSpaceEventType.RIGHT_UP;\n  } else if (type === CameraEventType.MIDDLE_DRAG) {\n    down = ScreenSpaceEventType.MIDDLE_DOWN;\n    up = ScreenSpaceEventType.MIDDLE_UP;\n  }\n\n  aggregator._eventHandler.setInputAction(\n    function (event) {\n      aggregator._buttonsDown++;\n      lastMovement.valid = false;\n      isDown[key] = true;\n      pressTime[key] = new Date();\n      Cartesian2.clone(event.position, eventStartPosition[key]);\n    },\n    down,\n    modifier,\n  );\n\n  aggregator._eventHandler.setInputAction(\n    function () {\n      cancelMouseDownAction(getKey(type, undefined), aggregator);\n      for (const modifier of Object.values(KeyboardEventModifier)) {\n        const cancelKey = getKey(type, modifier);\n        cancelMouseDownAction(cancelKey, aggregator);\n      }\n    },\n    up,\n    modifier,\n  );\n}\n\nfunction cancelMouseDownAction(cancelKey, aggregator) {\n  const releaseTime = aggregator._releaseTime;\n  const isDown = aggregator._isDown;\n  if (isDown[cancelKey]) {\n    aggregator._buttonsDown = Math.max(aggregator._buttonsDown - 1, 0);\n  }\n  isDown[cancelKey] = false;\n  releaseTime[cancelKey] = new Date();\n}\n\nfunction cloneMouseMovement(mouseMovement, result) {\n  Cartesian2.clone(mouseMovement.startPosition, result.startPosition);\n  Cartesian2.clone(mouseMovement.endPosition, result.endPosition);\n}\n\nfunction refreshMouseDownStatus(type, modifier, aggregator) {\n  // first: Judge if the mouse is pressed\n  const isDown = aggregator._isDown;\n  let anyButtonIsDown = false;\n  const currentKey = getKey(type, modifier);\n  for (const [downKey, downValue] of Object.entries(isDown)) {\n    if (downKey.startsWith(type) && downValue && downKey !== currentKey) {\n      anyButtonIsDown = true;\n      cancelMouseDownAction(downKey, aggregator);\n    }\n  }\n\n  if (!anyButtonIsDown) {\n    return;\n  }\n\n  // second: If it is pressed, it will be transferred to the current modifier.\n  const pressTime = aggregator._pressTime;\n  let lastMovement = aggregator._lastMovement[currentKey];\n  if (!defined(lastMovement)) {\n    lastMovement = aggregator._lastMovement[currentKey] = {\n      startPosition: new Cartesian2(),\n      endPosition: new Cartesian2(),\n      valid: false,\n    };\n  }\n  aggregator._buttonsDown++;\n  lastMovement.valid = false;\n  isDown[currentKey] = true;\n  pressTime[currentKey] = new Date();\n}\n\nfunction listenMouseMove(aggregator, modifier) {\n  const update = aggregator._update;\n  const movement = aggregator._movement;\n  const lastMovement = aggregator._lastMovement;\n  const isDown = aggregator._isDown;\n\n  for (const typeName in CameraEventType) {\n    if (CameraEventType.hasOwnProperty(typeName)) {\n      const type = CameraEventType[typeName];\n      if (defined(type)) {\n        const key = getKey(type, modifier);\n        update[key] = true;\n\n        if (!defined(aggregator._lastMovement[key])) {\n          aggregator._lastMovement[key] = {\n            startPosition: new Cartesian2(),\n            endPosition: new Cartesian2(),\n            valid: false,\n          };\n        }\n\n        if (!defined(aggregator._movement[key])) {\n          aggregator._movement[key] = {\n            startPosition: new Cartesian2(),\n            endPosition: new Cartesian2(),\n          };\n        }\n      }\n    }\n  }\n\n  aggregator._eventHandler.setInputAction(\n    function (mouseMovement) {\n      for (const typeName in CameraEventType) {\n        if (CameraEventType.hasOwnProperty(typeName)) {\n          const type = CameraEventType[typeName];\n          if (defined(type)) {\n            const key = getKey(type, modifier);\n            refreshMouseDownStatus(type, modifier, aggregator);\n            if (isDown[key]) {\n              if (!update[key]) {\n                Cartesian2.clone(\n                  mouseMovement.endPosition,\n                  movement[key].endPosition,\n                );\n              } else {\n                cloneMouseMovement(movement[key], lastMovement[key]);\n                lastMovement[key].valid = true;\n                cloneMouseMovement(mouseMovement, movement[key]);\n                update[key] = false;\n              }\n            }\n          }\n        }\n      }\n\n      Cartesian2.clone(\n        mouseMovement.endPosition,\n        aggregator._currentMousePosition,\n      );\n    },\n    ScreenSpaceEventType.MOUSE_MOVE,\n    modifier,\n  );\n}\n\n/**\n * Aggregates input events. For example, suppose the following inputs are received between frames:\n * left mouse button down, mouse move, mouse move, left mouse button up. These events will be aggregated into\n * one event with a start and end position of the mouse.\n *\n * @alias CameraEventAggregator\n * @constructor\n *\n * @param {HTMLCanvasElement} [canvas=document] The element to handle events for.\n *\n * @see ScreenSpaceEventHandler\n */\nfunction CameraEventAggregator(canvas) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(canvas)) {\n    throw new DeveloperError(\"canvas is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._eventHandler = new ScreenSpaceEventHandler(canvas);\n\n  this._update = {};\n  this._movement = {};\n  this._lastMovement = {};\n  this._isDown = {};\n  this._eventStartPosition = {};\n  this._pressTime = {};\n  this._releaseTime = {};\n\n  this._buttonsDown = 0;\n\n  this._currentMousePosition = new Cartesian2();\n\n  listenToWheel(this, undefined);\n  listenToPinch(this, undefined, canvas);\n  listenMouseButtonDownUp(this, undefined, CameraEventType.LEFT_DRAG);\n  listenMouseButtonDownUp(this, undefined, CameraEventType.RIGHT_DRAG);\n  listenMouseButtonDownUp(this, undefined, CameraEventType.MIDDLE_DRAG);\n  listenMouseMove(this, undefined);\n\n  for (const modifierName in KeyboardEventModifier) {\n    if (KeyboardEventModifier.hasOwnProperty(modifierName)) {\n      const modifier = KeyboardEventModifier[modifierName];\n      if (defined(modifier)) {\n        listenToWheel(this, modifier);\n        listenToPinch(this, modifier, canvas);\n        listenMouseButtonDownUp(this, modifier, CameraEventType.LEFT_DRAG);\n        listenMouseButtonDownUp(this, modifier, CameraEventType.RIGHT_DRAG);\n        listenMouseButtonDownUp(this, modifier, CameraEventType.MIDDLE_DRAG);\n        listenMouseMove(this, modifier);\n      }\n    }\n  }\n}\n\nObject.defineProperties(CameraEventAggregator.prototype, {\n  /**\n   * Gets the current mouse position.\n   * @memberof CameraEventAggregator.prototype\n   * @type {Cartesian2}\n   */\n  currentMousePosition: {\n    get: function () {\n      return this._currentMousePosition;\n    },\n  },\n\n  /**\n   * Gets whether any mouse button is down, a touch has started, or the wheel has been moved.\n   * @memberof CameraEventAggregator.prototype\n   * @type {boolean}\n   */\n  anyButtonDown: {\n    get: function () {\n      const wheelMoved =\n        !this._update[getKey(CameraEventType.WHEEL)] ||\n        !this._update[\n          getKey(CameraEventType.WHEEL, KeyboardEventModifier.SHIFT)\n        ] ||\n        !this._update[\n          getKey(CameraEventType.WHEEL, KeyboardEventModifier.CTRL)\n        ] ||\n        !this._update[getKey(CameraEventType.WHEEL, KeyboardEventModifier.ALT)];\n      return this._buttonsDown > 0 || wheelMoved;\n    },\n  },\n});\n\n/**\n * Gets if a mouse button down or touch has started and has been moved.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {boolean} Returns <code>true</code> if a mouse button down or touch has started and has been moved; otherwise, <code>false</code>\n */\nCameraEventAggregator.prototype.isMoving = function (type, modifier) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getKey(type, modifier);\n  return !this._update[key];\n};\n\n/**\n * Gets the aggregated start and end position of the current event.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {object} An object with two {@link Cartesian2} properties: <code>startPosition</code> and <code>endPosition</code>.\n */\nCameraEventAggregator.prototype.getMovement = function (type, modifier) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getKey(type, modifier);\n  const movement = this._movement[key];\n  return movement;\n};\n\n/**\n * Gets the start and end position of the last move event (not the aggregated event).\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {object|undefined} An object with two {@link Cartesian2} properties: <code>startPosition</code> and <code>endPosition</code> or <code>undefined</code>.\n */\nCameraEventAggregator.prototype.getLastMovement = function (type, modifier) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getKey(type, modifier);\n  const lastMovement = this._lastMovement[key];\n  if (lastMovement.valid) {\n    return lastMovement;\n  }\n\n  return undefined;\n};\n\n/**\n * Gets whether the mouse button is down or a touch has started.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {boolean} Whether the mouse button is down or a touch has started.\n */\nCameraEventAggregator.prototype.isButtonDown = function (type, modifier) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getKey(type, modifier);\n  return this._isDown[key];\n};\n\n/**\n * Gets the mouse position that started the aggregation.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Cartesian2} The mouse position.\n */\nCameraEventAggregator.prototype.getStartMousePosition = function (\n  type,\n  modifier,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (type === CameraEventType.WHEEL) {\n    return this._currentMousePosition;\n  }\n\n  const key = getKey(type, modifier);\n  return this._eventStartPosition[key];\n};\n\n/**\n * Gets the time the button was pressed or the touch was started.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Date} The time the button was pressed or the touch was started.\n */\nCameraEventAggregator.prototype.getButtonPressTime = function (type, modifier) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getKey(type, modifier);\n  return this._pressTime[key];\n};\n\n/**\n * Gets the time the button was released or the touch was ended.\n *\n * @param {CameraEventType} type The camera event type.\n * @param {KeyboardEventModifier} [modifier] The keyboard modifier.\n * @returns {Date} The time the button was released or the touch was ended.\n */\nCameraEventAggregator.prototype.getButtonReleaseTime = function (\n  type,\n  modifier,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const key = getKey(type, modifier);\n  return this._releaseTime[key];\n};\n\n/**\n * Signals that all of the events have been handled and the aggregator should be reset to handle new events.\n */\nCameraEventAggregator.prototype.reset = function () {\n  for (const name in this._update) {\n    if (this._update.hasOwnProperty(name)) {\n      this._update[name] = true;\n    }\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see CameraEventAggregator#destroy\n */\nCameraEventAggregator.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes mouse listeners held by this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * handler = handler && handler.destroy();\n *\n * @see CameraEventAggregator#isDestroyed\n */\nCameraEventAggregator.prototype.destroy = function () {\n  this._eventHandler = this._eventHandler && this._eventHandler.destroy();\n  return destroyObject(this);\n};\nexport default CameraEventAggregator;\n","/**\n * Enumerates the available input for interacting with the camera.\n *\n * @enum {number}\n */\nconst CameraEventType = {\n  /**\n   * A left mouse button press followed by moving the mouse and releasing the button.\n   *\n   * @type {number}\n   * @constant\n   */\n  LEFT_DRAG: 0,\n\n  /**\n   *  A right mouse button press followed by moving the mouse and releasing the button.\n   *\n   * @type {number}\n   * @constant\n   */\n  RIGHT_DRAG: 1,\n\n  /**\n   *  A middle mouse button press followed by moving the mouse and releasing the button.\n   *\n   * @type {number}\n   * @constant\n   */\n  MIDDLE_DRAG: 2,\n\n  /**\n   * Scrolling the middle mouse button.\n   *\n   * @type {number}\n   * @constant\n   */\n  WHEEL: 3,\n\n  /**\n   * A two-finger touch on a touch surface.\n   *\n   * @type {number}\n   * @constant\n   */\n  PINCH: 4,\n};\nexport default Object.freeze(CameraEventType);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Creates tweens for camera flights.\n * <br /><br />\n * Mouse interaction is disabled during flights.\n *\n * @private\n */\nconst CameraFlightPath = {};\n\nfunction getAltitude(frustum, dx, dy) {\n  let near;\n  let top;\n  let right;\n  if (frustum instanceof PerspectiveFrustum) {\n    const tanTheta = Math.tan(0.5 * frustum.fovy);\n    near = frustum.near;\n    top = frustum.near * tanTheta;\n    right = frustum.aspectRatio * top;\n    return Math.max((dx * near) / right, (dy * near) / top);\n  } else if (frustum instanceof PerspectiveOffCenterFrustum) {\n    near = frustum.near;\n    top = frustum.top;\n    right = frustum.right;\n    return Math.max((dx * near) / right, (dy * near) / top);\n  }\n\n  return Math.max(dx, dy);\n}\n\nconst scratchCart = new Cartesian3();\nconst scratchCart2 = new Cartesian3();\n\nfunction createPitchFunction(\n  startPitch,\n  endPitch,\n  heightFunction,\n  pitchAdjustHeight,\n) {\n  if (defined(pitchAdjustHeight) && heightFunction(0.5) > pitchAdjustHeight) {\n    const startHeight = heightFunction(0.0);\n    const endHeight = heightFunction(1.0);\n    const middleHeight = heightFunction(0.5);\n\n    const d1 = middleHeight - startHeight;\n    const d2 = middleHeight - endHeight;\n\n    return function (time) {\n      const altitude = heightFunction(time);\n      if (time <= 0.5) {\n        const t1 = (altitude - startHeight) / d1;\n        return CesiumMath.lerp(startPitch, -CesiumMath.PI_OVER_TWO, t1);\n      }\n\n      const t2 = (altitude - endHeight) / d2;\n      return CesiumMath.lerp(-CesiumMath.PI_OVER_TWO, endPitch, 1 - t2);\n    };\n  }\n  return function (time) {\n    return CesiumMath.lerp(startPitch, endPitch, time);\n  };\n}\n\nfunction createHeightFunction(\n  camera,\n  destination,\n  startHeight,\n  endHeight,\n  optionAltitude,\n) {\n  let altitude = optionAltitude;\n  const maxHeight = Math.max(startHeight, endHeight);\n\n  if (!defined(altitude)) {\n    const start = camera.position;\n    const end = destination;\n    const up = camera.up;\n    const right = camera.right;\n    const frustum = camera.frustum;\n\n    const diff = Cartesian3.subtract(start, end, scratchCart);\n    const verticalDistance = Cartesian3.magnitude(\n      Cartesian3.multiplyByScalar(up, Cartesian3.dot(diff, up), scratchCart2),\n    );\n    const horizontalDistance = Cartesian3.magnitude(\n      Cartesian3.multiplyByScalar(\n        right,\n        Cartesian3.dot(diff, right),\n        scratchCart2,\n      ),\n    );\n\n    altitude = Math.min(\n      getAltitude(frustum, verticalDistance, horizontalDistance) * 0.2,\n      1000000000.0,\n    );\n  }\n\n  if (maxHeight < altitude) {\n    const power = 8.0;\n    const factor = 1000000.0;\n\n    const s = -Math.pow((altitude - startHeight) * factor, 1.0 / power);\n    const e = Math.pow((altitude - endHeight) * factor, 1.0 / power);\n\n    return function (t) {\n      const x = t * (e - s) + s;\n      return -Math.pow(x, power) / factor + altitude;\n    };\n  }\n\n  return function (t) {\n    return CesiumMath.lerp(startHeight, endHeight, t);\n  };\n}\n\nfunction adjustAngleForLERP(startAngle, endAngle) {\n  if (\n    CesiumMath.equalsEpsilon(\n      startAngle,\n      CesiumMath.TWO_PI,\n      CesiumMath.EPSILON11,\n    )\n  ) {\n    startAngle = 0.0;\n  }\n\n  if (endAngle > startAngle + Math.PI) {\n    startAngle += CesiumMath.TWO_PI;\n  } else if (endAngle < startAngle - Math.PI) {\n    startAngle -= CesiumMath.TWO_PI;\n  }\n\n  return startAngle;\n}\n\nconst scratchStart = new Cartesian3();\n\nfunction createUpdateCV(\n  scene,\n  duration,\n  destination,\n  heading,\n  pitch,\n  roll,\n  optionAltitude,\n  optionPitchAdjustHeight,\n) {\n  const camera = scene.camera;\n\n  const start = Cartesian3.clone(camera.position, scratchStart);\n  const startPitch = camera.pitch;\n  const startHeading = adjustAngleForLERP(camera.heading, heading);\n  const startRoll = adjustAngleForLERP(camera.roll, roll);\n\n  const heightFunction = createHeightFunction(\n    camera,\n    destination,\n    start.z,\n    destination.z,\n    optionAltitude,\n  );\n\n  const pitchFunction = createPitchFunction(\n    startPitch,\n    pitch,\n    heightFunction,\n    optionPitchAdjustHeight,\n  );\n\n  function update(value) {\n    const time = value.time / duration;\n\n    camera.setView({\n      orientation: {\n        heading: CesiumMath.lerp(startHeading, heading, time),\n        pitch: pitchFunction(time),\n        roll: CesiumMath.lerp(startRoll, roll, time),\n      },\n    });\n\n    Cartesian2.lerp(start, destination, time, camera.position);\n    camera.position.z = heightFunction(time);\n  }\n  return update;\n}\n\nfunction useLongestFlight(startCart, destCart) {\n  if (startCart.longitude < destCart.longitude) {\n    startCart.longitude += CesiumMath.TWO_PI;\n  } else {\n    destCart.longitude += CesiumMath.TWO_PI;\n  }\n}\n\nfunction useShortestFlight(startCart, destCart) {\n  const diff = startCart.longitude - destCart.longitude;\n  if (diff < -CesiumMath.PI) {\n    startCart.longitude += CesiumMath.TWO_PI;\n  } else if (diff > CesiumMath.PI) {\n    destCart.longitude += CesiumMath.TWO_PI;\n  }\n}\n\nconst scratchStartCart = new Cartographic();\nconst scratchEndCart = new Cartographic();\n\nfunction createUpdate3D(\n  scene,\n  duration,\n  destination,\n  heading,\n  pitch,\n  roll,\n  optionAltitude,\n  optionFlyOverLongitude,\n  optionFlyOverLongitudeWeight,\n  optionPitchAdjustHeight,\n) {\n  const camera = scene.camera;\n  const projection = scene.mapProjection;\n  const ellipsoid = projection.ellipsoid;\n\n  const startCart = Cartographic.clone(\n    camera.positionCartographic,\n    scratchStartCart,\n  );\n  const startPitch = camera.pitch;\n  const startHeading = adjustAngleForLERP(camera.heading, heading);\n  const startRoll = adjustAngleForLERP(camera.roll, roll);\n\n  const destCart = ellipsoid.cartesianToCartographic(\n    destination,\n    scratchEndCart,\n  );\n  startCart.longitude = CesiumMath.zeroToTwoPi(startCart.longitude);\n  destCart.longitude = CesiumMath.zeroToTwoPi(destCart.longitude);\n\n  let useLongFlight = false;\n\n  if (defined(optionFlyOverLongitude)) {\n    const hitLon = CesiumMath.zeroToTwoPi(optionFlyOverLongitude);\n\n    const lonMin = Math.min(startCart.longitude, destCart.longitude);\n    const lonMax = Math.max(startCart.longitude, destCart.longitude);\n\n    const hitInside = hitLon >= lonMin && hitLon <= lonMax;\n\n    if (defined(optionFlyOverLongitudeWeight)) {\n      // Distance inside  (0...2Pi)\n      const din = Math.abs(startCart.longitude - destCart.longitude);\n      // Distance outside (0...2Pi)\n      const dot = CesiumMath.TWO_PI - din;\n\n      const hitDistance = hitInside ? din : dot;\n      const offDistance = hitInside ? dot : din;\n\n      if (\n        hitDistance < offDistance * optionFlyOverLongitudeWeight &&\n        !hitInside\n      ) {\n        useLongFlight = true;\n      }\n    } else if (!hitInside) {\n      useLongFlight = true;\n    }\n  }\n\n  if (useLongFlight) {\n    useLongestFlight(startCart, destCart);\n  } else {\n    useShortestFlight(startCart, destCart);\n  }\n\n  const heightFunction = createHeightFunction(\n    camera,\n    destination,\n    startCart.height,\n    destCart.height,\n    optionAltitude,\n  );\n  const pitchFunction = createPitchFunction(\n    startPitch,\n    pitch,\n    heightFunction,\n    optionPitchAdjustHeight,\n  );\n\n  // Isolate scope for update function.\n  // to have local copies of vars used in lerp\n  // Othervise, if you call nex\n  // createUpdate3D (createAnimationTween)\n  // before you played animation, variables will be overwriten.\n  function isolateUpdateFunction() {\n    const startLongitude = startCart.longitude;\n    const destLongitude = destCart.longitude;\n    const startLatitude = startCart.latitude;\n    const destLatitude = destCart.latitude;\n\n    return function update(value) {\n      const time = value.time / duration;\n\n      const position = Cartesian3.fromRadians(\n        CesiumMath.lerp(startLongitude, destLongitude, time),\n        CesiumMath.lerp(startLatitude, destLatitude, time),\n        heightFunction(time),\n        ellipsoid,\n      );\n\n      camera.setView({\n        destination: position,\n        orientation: {\n          heading: CesiumMath.lerp(startHeading, heading, time),\n          pitch: pitchFunction(time),\n          roll: CesiumMath.lerp(startRoll, roll, time),\n        },\n      });\n    };\n  }\n  return isolateUpdateFunction();\n}\n\nfunction createUpdate2D(\n  scene,\n  duration,\n  destination,\n  heading,\n  pitch,\n  roll,\n  optionAltitude,\n) {\n  const camera = scene.camera;\n\n  const start = Cartesian3.clone(camera.position, scratchStart);\n  const startHeading = adjustAngleForLERP(camera.heading, heading);\n\n  const startHeight = camera.frustum.right - camera.frustum.left;\n  const heightFunction = createHeightFunction(\n    camera,\n    destination,\n    startHeight,\n    destination.z,\n    optionAltitude,\n  );\n\n  function update(value) {\n    const time = value.time / duration;\n\n    camera.setView({\n      orientation: {\n        heading: CesiumMath.lerp(startHeading, heading, time),\n      },\n    });\n\n    Cartesian2.lerp(start, destination, time, camera.position);\n\n    const zoom = heightFunction(time);\n\n    const frustum = camera.frustum;\n    const ratio = frustum.top / frustum.right;\n\n    const incrementAmount = (zoom - (frustum.right - frustum.left)) * 0.5;\n    frustum.right += incrementAmount;\n    frustum.left -= incrementAmount;\n    frustum.top = ratio * frustum.right;\n    frustum.bottom = -frustum.top;\n  }\n  return update;\n}\n\nconst scratchCartographic = new Cartographic();\nconst scratchDestination = new Cartesian3();\n\nfunction emptyFlight(complete, cancel) {\n  return {\n    startObject: {},\n    stopObject: {},\n    duration: 0.0,\n    complete: complete,\n    cancel: cancel,\n  };\n}\n\nfunction wrapCallback(controller, cb) {\n  function wrapped() {\n    if (typeof cb === \"function\") {\n      cb();\n    }\n\n    controller.enableInputs = true;\n  }\n  return wrapped;\n}\n\nCameraFlightPath.createTween = function (scene, options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  let destination = options.destination;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  if (!defined(destination)) {\n    throw new DeveloperError(\"destination is required.\");\n  }\n  //>>includeEnd('debug');\n  const mode = scene.mode;\n\n  if (mode === SceneMode.MORPHING) {\n    return emptyFlight();\n  }\n\n  const convert = options.convert ?? true;\n  const projection = scene.mapProjection;\n  const ellipsoid = projection.ellipsoid;\n  const maximumHeight = options.maximumHeight;\n  const flyOverLongitude = options.flyOverLongitude;\n  const flyOverLongitudeWeight = options.flyOverLongitudeWeight;\n  const pitchAdjustHeight = options.pitchAdjustHeight;\n  let easingFunction = options.easingFunction;\n\n  if (convert && mode !== SceneMode.SCENE3D) {\n    ellipsoid.cartesianToCartographic(destination, scratchCartographic);\n    destination = projection.project(scratchCartographic, scratchDestination);\n  }\n\n  const camera = scene.camera;\n  const transform = options.endTransform;\n  if (defined(transform)) {\n    camera._setTransform(transform);\n  }\n\n  let duration = options.duration;\n  if (!defined(duration)) {\n    duration =\n      Math.ceil(Cartesian3.distance(camera.position, destination) / 1000000.0) +\n      2.0;\n    duration = Math.min(duration, 3.0);\n  }\n\n  const heading = options.heading ?? 0.0;\n  const pitch = options.pitch ?? -CesiumMath.PI_OVER_TWO;\n  const roll = options.roll ?? 0.0;\n\n  const controller = scene.screenSpaceCameraController;\n  controller.enableInputs = false;\n\n  const complete = wrapCallback(controller, options.complete);\n  const cancel = wrapCallback(controller, options.cancel);\n\n  const frustum = camera.frustum;\n\n  let empty = scene.mode === SceneMode.SCENE2D;\n  empty =\n    empty &&\n    Cartesian2.equalsEpsilon(camera.position, destination, CesiumMath.EPSILON6);\n  empty =\n    empty &&\n    CesiumMath.equalsEpsilon(\n      Math.max(frustum.right - frustum.left, frustum.top - frustum.bottom),\n      destination.z,\n      CesiumMath.EPSILON6,\n    );\n\n  empty =\n    empty ||\n    (scene.mode !== SceneMode.SCENE2D &&\n      Cartesian3.equalsEpsilon(\n        destination,\n        camera.position,\n        CesiumMath.EPSILON10,\n      ));\n\n  empty =\n    empty &&\n    CesiumMath.equalsEpsilon(\n      CesiumMath.negativePiToPi(heading),\n      CesiumMath.negativePiToPi(camera.heading),\n      CesiumMath.EPSILON10,\n    ) &&\n    CesiumMath.equalsEpsilon(\n      CesiumMath.negativePiToPi(pitch),\n      CesiumMath.negativePiToPi(camera.pitch),\n      CesiumMath.EPSILON10,\n    ) &&\n    CesiumMath.equalsEpsilon(\n      CesiumMath.negativePiToPi(roll),\n      CesiumMath.negativePiToPi(camera.roll),\n      CesiumMath.EPSILON10,\n    );\n\n  if (empty) {\n    return emptyFlight(complete, cancel);\n  }\n\n  const updateFunctions = new Array(4);\n  updateFunctions[SceneMode.SCENE2D] = createUpdate2D;\n  updateFunctions[SceneMode.SCENE3D] = createUpdate3D;\n  updateFunctions[SceneMode.COLUMBUS_VIEW] = createUpdateCV;\n\n  if (duration <= 0.0) {\n    const newOnComplete = function () {\n      const update = updateFunctions[mode](\n        scene,\n        1.0,\n        destination,\n        heading,\n        pitch,\n        roll,\n        maximumHeight,\n        flyOverLongitude,\n        flyOverLongitudeWeight,\n        pitchAdjustHeight,\n      );\n      update({ time: 1.0 });\n\n      if (typeof complete === \"function\") {\n        complete();\n      }\n    };\n    return emptyFlight(newOnComplete, cancel);\n  }\n\n  const update = updateFunctions[mode](\n    scene,\n    duration,\n    destination,\n    heading,\n    pitch,\n    roll,\n    maximumHeight,\n    flyOverLongitude,\n    flyOverLongitudeWeight,\n    pitchAdjustHeight,\n  );\n\n  if (!defined(easingFunction)) {\n    const startHeight = camera.positionCartographic.height;\n    const endHeight =\n      mode === SceneMode.SCENE3D\n        ? ellipsoid.cartesianToCartographic(destination).height\n        : destination.z;\n\n    if (startHeight > endHeight && startHeight > 11500.0) {\n      easingFunction = EasingFunction.CUBIC_OUT;\n    } else {\n      easingFunction = EasingFunction.QUINTIC_IN_OUT;\n    }\n  }\n\n  return {\n    duration: duration,\n    easingFunction: easingFunction,\n    startObject: {\n      time: 0.0,\n    },\n    stopObject: {\n      time: duration,\n    },\n    update: update,\n    complete: complete,\n    cancel: cancel,\n  };\n};\nexport default CameraFlightPath;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\n\n/**\n * Simple abstraction for a group. This class exists to make the metadata API\n * more consistent, i.e. metadata can be accessed via\n * <code>content.group.metadata</code> much like tile metadata is accessed as\n * <code>tile.metadata</code>.\n *\n * @param {object} options Object with the following properties:\n * @param {GroupMetadata} options.metadata The metadata associated with this group.\n *\n * @alias Cesium3DContentGroup\n * @constructor\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction Cesium3DContentGroup(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.metadata\", options.metadata);\n  //>>includeEnd('debug');\n\n  this._metadata = options.metadata;\n}\n\nObject.defineProperties(Cesium3DContentGroup.prototype, {\n  /**\n   * Get the metadata for this group\n   *\n   * @memberof Cesium3DContentGroup.prototype\n   *\n   * @type {GroupMetadata}\n   *\n   * @readonly\n   */\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n  },\n});\n\nexport default Cesium3DContentGroup;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestScheduler from \"../Core/RequestScheduler.js\";\nimport RequestState from \"../Core/RequestState.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Cesium3DContentGroup from \"./Cesium3DContentGroup.js\";\nimport Cesium3DTileContentFactory from \"./Cesium3DTileContentFactory.js\";\nimport Cesium3DTileContentState from \"./Cesium3DTileContentState.js\";\nimport Cesium3DTileContentType from \"./Cesium3DTileContentType.js\";\nimport Cesium3DTileOptimizationHint from \"./Cesium3DTileOptimizationHint.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport Empty3DTileContent from \"./Empty3DTileContent.js\";\nimport findContentMetadata from \"./findContentMetadata.js\";\nimport findGroupMetadata from \"./findGroupMetadata.js\";\nimport findTileMetadata from \"./findTileMetadata.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport Multiple3DTileContent from \"./Multiple3DTileContent.js\";\nimport BoundingVolumeSemantics from \"./BoundingVolumeSemantics.js\";\nimport preprocess3DTileContent from \"./preprocess3DTileContent.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileBoundingS2Cell from \"./TileBoundingS2Cell.js\";\nimport TileBoundingSphere from \"./TileBoundingSphere.js\";\nimport TileOrientedBoundingBox from \"./TileOrientedBoundingBox.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport VerticalExaggeration from \"../Core/VerticalExaggeration.js\";\n\n/**\n * A tile in a {@link Cesium3DTileset}.  When a tile is first created, its content is not loaded;\n * the content is loaded on-demand when needed based on the view.\n * <p>\n * Do not construct this directly, instead access tiles through {@link Cesium3DTileset#tileVisible}.\n * </p>\n *\n * @alias Cesium3DTile\n * @constructor\n * @param {Cesium3DTileset} tileset The tileset\n * @param {Resource} baseResource The base resource for the tileset\n * @param {object} header The JSON header for the tile\n * @param {Cesium3DTile} parent The parent tile of the new tile\n */\nfunction Cesium3DTile(tileset, baseResource, header, parent) {\n  this._tileset = tileset;\n  this._header = header;\n\n  const hasContentsArray = defined(header.contents);\n  const hasMultipleContents =\n    (hasContentsArray && header.contents.length > 1) ||\n    hasExtension(header, \"3DTILES_multiple_contents\");\n\n  // In the 1.0 schema, content is stored in tile.content instead of tile.contents\n  const contentHeader =\n    hasContentsArray && !hasMultipleContents\n      ? header.contents[0]\n      : header.content;\n\n  this._contentHeader = contentHeader;\n\n  /**\n   * The local transform of this tile.\n   * @type {Matrix4}\n   */\n  this.transform = defined(header.transform)\n    ? Matrix4.unpack(header.transform)\n    : Matrix4.clone(Matrix4.IDENTITY);\n\n  const parentTransform = defined(parent)\n    ? parent.computedTransform\n    : tileset.modelMatrix;\n  const computedTransform = Matrix4.multiply(\n    parentTransform,\n    this.transform,\n    new Matrix4(),\n  );\n\n  const parentInitialTransform = defined(parent)\n    ? parent._initialTransform\n    : Matrix4.IDENTITY;\n  this._initialTransform = Matrix4.multiply(\n    parentInitialTransform,\n    this.transform,\n    new Matrix4(),\n  );\n\n  /**\n   * The final computed transform of this tile.\n   * @type {Matrix4}\n   * @readonly\n   */\n  this.computedTransform = computedTransform;\n\n  /**\n   * When tile metadata is present (3D Tiles 1.1) or the <code>3DTILES_metadata</code> extension is used,\n   * this stores a {@link TileMetadata} object for accessing tile metadata.\n   *\n   * @type {TileMetadata}\n   * @readonly\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  this.metadata = findTileMetadata(tileset, header);\n\n  this._verticalExaggeration = 1.0;\n  this._verticalExaggerationRelativeHeight = 0.0;\n\n  // Important: tile metadata must be parsed before this line so that the\n  // metadata semantics TILE_BOUNDING_BOX, TILE_BOUNDING_REGION, or TILE_BOUNDING_SPHERE\n  // can override header.boundingVolume (if necessary)\n  this._boundingVolume = this.createBoundingVolume(\n    header.boundingVolume,\n    computedTransform,\n  );\n  this._boundingVolume2D = undefined;\n\n  let contentBoundingVolume;\n\n  if (defined(contentHeader) && defined(contentHeader.boundingVolume)) {\n    // Non-leaf tiles may have a content bounding-volume, which is a tight-fit bounding volume\n    // around only the features in the tile.  This box is useful for culling for rendering,\n    // but not for culling for traversing the tree since it does not guarantee spatial coherence, i.e.,\n    // since it only bounds features in the tile, not the entire tile, children may be\n    // outside of this box.\n    contentBoundingVolume = this.createBoundingVolume(\n      contentHeader.boundingVolume,\n      computedTransform,\n    );\n  }\n  this._contentBoundingVolume = contentBoundingVolume;\n  this._contentBoundingVolume2D = undefined;\n\n  let viewerRequestVolume;\n  if (defined(header.viewerRequestVolume)) {\n    viewerRequestVolume = this.createBoundingVolume(\n      header.viewerRequestVolume,\n      computedTransform,\n    );\n  }\n  this._viewerRequestVolume = viewerRequestVolume;\n\n  /**\n   * The error, in meters, introduced if this tile is rendered and its children are not.\n   * This is used to compute screen space error, i.e., the error measured in pixels.\n   *\n   * @type {number}\n   * @readonly\n   */\n  this.geometricError = header.geometricError;\n  this._geometricError = header.geometricError;\n\n  if (!defined(this._geometricError)) {\n    this._geometricError = defined(parent)\n      ? parent._geometricError\n      : tileset._geometricError;\n    Cesium3DTile._deprecationWarning(\n      \"geometricErrorUndefined\",\n      \"Required property geometricError is undefined for this tile. Using parent's geometric error instead.\",\n    );\n  }\n\n  this.updateGeometricErrorScale();\n\n  let refine;\n  if (defined(header.refine)) {\n    if (header.refine === \"replace\" || header.refine === \"add\") {\n      Cesium3DTile._deprecationWarning(\n        \"lowercase-refine\",\n        `This tile uses a lowercase refine \"${\n          header.refine\n        }\". Instead use \"${header.refine.toUpperCase()}\".`,\n      );\n    }\n    refine =\n      header.refine.toUpperCase() === \"REPLACE\"\n        ? Cesium3DTileRefine.REPLACE\n        : Cesium3DTileRefine.ADD;\n  } else if (defined(parent)) {\n    // Inherit from parent tile if omitted.\n    refine = parent.refine;\n  } else {\n    refine = Cesium3DTileRefine.REPLACE;\n  }\n\n  /**\n   * Specifies the type of refinement that is used when traversing this tile for rendering.\n   *\n   * @type {Cesium3DTileRefine}\n   * @readonly\n   * @private\n   */\n  this.refine = refine;\n\n  /**\n   * Gets the tile's children.\n   *\n   * @type {Cesium3DTile[]}\n   * @readonly\n   */\n  this.children = [];\n\n  /**\n   * This tile's parent or <code>undefined</code> if this tile is the root.\n   * <p>\n   * When a tile's content points to an external tileset JSON file, the external tileset's\n   * root tile's parent is not <code>undefined</code>; instead, the parent references\n   * the tile (with its content pointing to an external tileset JSON file) as if the two tilesets were merged.\n   * </p>\n   *\n   * @type {Cesium3DTile}\n   * @readonly\n   */\n  this.parent = parent;\n\n  let content;\n  let hasEmptyContent = false;\n  let contentState;\n  let contentResource;\n  let serverKey;\n\n  baseResource = Resource.createIfNeeded(baseResource);\n\n  if (hasMultipleContents) {\n    contentState = Cesium3DTileContentState.UNLOADED;\n    // Each content may have its own URI, but they all need to be resolved\n    // relative to the tileset, so the base resource is used.\n    contentResource = baseResource.clone();\n  } else if (defined(contentHeader)) {\n    let contentHeaderUri = contentHeader.uri;\n    if (defined(contentHeader.url)) {\n      Cesium3DTile._deprecationWarning(\n        \"contentUrl\",\n        'This tileset JSON uses the \"content.url\" property which has been deprecated. Use \"content.uri\" instead.',\n      );\n      contentHeaderUri = contentHeader.url;\n    }\n    if (contentHeaderUri === \"\") {\n      Cesium3DTile._deprecationWarning(\n        \"contentUriEmpty\",\n        \"content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead\",\n      );\n      content = new Empty3DTileContent(tileset, this);\n      hasEmptyContent = true;\n      contentState = Cesium3DTileContentState.READY;\n    } else {\n      contentState = Cesium3DTileContentState.UNLOADED;\n      contentResource = baseResource.getDerivedResource({\n        url: contentHeaderUri,\n      });\n      serverKey = RequestScheduler.getServerKey(\n        contentResource.getUrlComponent(),\n      );\n    }\n  } else {\n    content = new Empty3DTileContent(tileset, this);\n    hasEmptyContent = true;\n    contentState = Cesium3DTileContentState.READY;\n  }\n\n  this._content = content;\n  this._contentResource = contentResource;\n  this._contentState = contentState;\n  this._expiredContent = undefined;\n\n  this._serverKey = serverKey;\n\n  /**\n   * When <code>true</code>, the tile has no content.\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasEmptyContent = hasEmptyContent;\n\n  /**\n   * When <code>true</code>, the tile's content points to an external tileset.\n   * <p>\n   * This is <code>false</code> until the tile's content is loaded.\n   * </p>\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasTilesetContent = false;\n\n  /**\n   * When <code>true</code>, the tile's content is an implicit tileset.\n   * <p>\n   * This is <code>false</code> until the tile's implicit content is loaded.\n   * </p>\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  this.hasImplicitContent = false;\n\n  /**\n   * Determines whether the tile has renderable content.\n   *\n   * The loading starts with the assumption that the tile does have\n   * renderable content, if the content is not empty.<br>\n   * <br>\n   * This turns <code>false</code> only when the tile content is loaded\n   * and turns out to be a single content that points to an external\n   * tileset or implicit content\n   * </p>\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasRenderableContent = !hasEmptyContent;\n\n  /**\n   * When <code>true</code>, the tile contains content metadata from implicit tiling. This flag is set\n   * for tiles transcoded by <code>Implicit3DTileContent</code>.\n   * <p>\n   * This is <code>false</code> until the tile's content is loaded.\n   * </p>\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  this.hasImplicitContentMetadata = false;\n\n  /**\n   * When <code>true</code>, the tile has multiple contents, either in the tile JSON (3D Tiles 1.1)\n   * or via the <code>3DTILES_multiple_contents</code> extension.\n   *\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_multiple_contents|3DTILES_multiple_contents extension}\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasMultipleContents = hasMultipleContents;\n\n  /**\n   * The node in the tileset's LRU cache, used to determine when to unload a tile's content.\n   *\n   * See {@link Cesium3DTilesetCache}\n   *\n   * @type {DoublyLinkedListNode}\n   * @readonly\n   *\n   * @private\n   */\n  this.cacheNode = undefined;\n\n  const expire = header.expire;\n  let expireDuration;\n  let expireDate;\n  if (defined(expire)) {\n    expireDuration = expire.duration;\n    if (defined(expire.date)) {\n      expireDate = JulianDate.fromIso8601(expire.date);\n    }\n  }\n\n  /**\n   * The time in seconds after the tile's content is ready when the content expires and new content is requested.\n   *\n   * @type {number}\n   */\n  this.expireDuration = expireDuration;\n\n  /**\n   * The date when the content expires and new content is requested.\n   *\n   * @type {JulianDate}\n   */\n  this.expireDate = expireDate;\n\n  /**\n   * The time when a style was last applied to this tile.\n   *\n   * @type {number}\n   *\n   * @private\n   */\n  this.lastStyleTime = 0.0;\n\n  /**\n   * Marks whether the tile's children bounds are fully contained within the tile's bounds\n   *\n   * @type {Cesium3DTileOptimizationHint}\n   *\n   * @private\n   */\n  this._optimChildrenWithinParent = Cesium3DTileOptimizationHint.NOT_COMPUTED;\n\n  /**\n   * Tracks if the tile's relationship with a ClippingPlaneCollection has changed with regards\n   * to the ClippingPlaneCollection's state.\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  this.clippingPlanesDirty = false;\n\n  /**\n   * Tracks if the tile's relationship with a ClippingPolygonCollection has changed with regards\n   * to the ClippingPolygonCollection's state.\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  this.clippingPolygonsDirty = false;\n\n  /**\n   * Tracks if the tile's request should be deferred until all non-deferred\n   * tiles load.\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  this.priorityDeferred = false;\n\n  /**\n   * For implicit tiling, an ImplicitTileset object will be attached to a\n   * placeholder tile with either implicit tiling in the JSON (3D Tiles 1.1)\n   * or the <code>3DTILES_implicit_tiling</code> extension.\n   * This way the {@link Implicit3DTileContent} can access the tile later once the content is fetched.\n   *\n   * @type {ImplicitTileset|undefined}\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  this.implicitTileset = undefined;\n\n  /**\n   * For implicit tiling, the (level, x, y, [z]) coordinates within the\n   * implicit tileset are stored in the tile.\n   *\n   * @type {ImplicitTileCoordinates|undefined}\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  this.implicitCoordinates = undefined;\n\n  /**\n   * For implicit tiling, each transcoded tile will hold a weak reference to\n   * the {@link ImplicitSubtree}.\n   *\n   * @type {ImplicitSubtree|undefined}\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  this.implicitSubtree = undefined;\n\n  // Members that are updated every frame for tree traversal and rendering optimizations:\n  this._distanceToCamera = 0.0;\n  this._centerZDepth = 0.0;\n  this._screenSpaceError = 0.0;\n  this._screenSpaceErrorProgressiveResolution = 0.0; // The screen space error at a given screen height of tileset.progressiveResolutionHeightFraction * screenHeight\n  this._visibilityPlaneMask = 0;\n  this._visible = false;\n  this._inRequestVolume = false;\n\n  this._finalResolution = true;\n  this._depth = 0;\n  this._stackLength = 0;\n  this._selectionDepth = 0;\n\n  this._updatedVisibilityFrame = 0;\n  this._touchedFrame = 0;\n  this._visitedFrame = 0;\n  this._selectedFrame = 0;\n  this._wasSelectedLastFrame = false;\n  this._requestedFrame = 0;\n  this._ancestorWithContent = undefined;\n  this._ancestorWithContentAvailable = undefined;\n  this._refines = false;\n  this._shouldSelect = false;\n  this._isClipped = true;\n  this._isClippedByPolygon = false;\n  this._clippingPlanesState = 0; // encapsulates (_isClipped, clippingPlanes.enabled) and number/function\n  this._clippingPolygonsState = 0; // encapsulates (_isClipped, clippingPolygons.enabled) and number/function\n  this._debugBoundingVolume = undefined;\n  this._debugContentBoundingVolume = undefined;\n  this._debugViewerRequestVolume = undefined;\n  this._debugColor = Color.fromRandom({ alpha: 1.0 });\n  this._debugColorizeTiles = false;\n\n  this._priority = 0.0; // The priority used for request sorting\n  this._priorityHolder = this; // Reference to the ancestor up the tree that holds the _foveatedFactor and _distanceToCamera for all tiles in the refinement chain.\n  this._priorityProgressiveResolution = false;\n  this._priorityProgressiveResolutionScreenSpaceErrorLeaf = false;\n  this._priorityReverseScreenSpaceError = 0.0;\n  this._foveatedFactor = 0.0;\n  this._wasMinPriorityChild = false; // Needed for knowing when to continue a refinement chain. Gets reset in updateTile in traversal and gets set in updateAndPushChildren in traversal.\n\n  this._loadTimestamp = new JulianDate();\n\n  this._commandsLength = 0;\n\n  this._color = undefined;\n  this._colorDirty = false;\n\n  this._request = undefined;\n}\n\n// This can be overridden for testing purposes\nCesium3DTile._deprecationWarning = deprecationWarning;\n\nObject.defineProperties(Cesium3DTile.prototype, {\n  /**\n   * The tileset containing this tile.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {Cesium3DTileset}\n   * @readonly\n   */\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  /**\n   * The tile's content.  This represents the actual tile's payload,\n   * not the content's metadata in the tileset JSON file.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {Cesium3DTileContent}\n   * @readonly\n   */\n  content: {\n    get: function () {\n      return this._content;\n    },\n  },\n\n  /**\n   * Get the tile's bounding volume.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {TileBoundingVolume}\n   * @readonly\n   * @private\n   */\n  boundingVolume: {\n    get: function () {\n      return this._boundingVolume;\n    },\n  },\n\n  /**\n   * Get the bounding volume of the tile's contents.  This defaults to the\n   * tile's bounding volume when the content's bounding volume is\n   * <code>undefined</code>.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {TileBoundingVolume}\n   * @readonly\n   * @private\n   */\n  contentBoundingVolume: {\n    get: function () {\n      return this._contentBoundingVolume ?? this._boundingVolume;\n    },\n  },\n\n  /**\n   * Get the bounding sphere derived from the tile's bounding volume.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingVolume.boundingSphere;\n    },\n  },\n\n  /**\n   * Determines if the tile is visible within the current field of view\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  isVisible: {\n    get: function () {\n      return this._visible && this._inRequestVolume;\n    },\n  },\n\n  /**\n   * Returns the <code>extras</code> property in the tileset JSON for this tile, which contains application specific metadata.\n   * Returns <code>undefined</code> if <code>extras</code> does not exist.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {object}\n   * @readonly\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification#specifying-extensions-and-application-specific-extras|Extras in the 3D Tiles specification.}\n   */\n  extras: {\n    get: function () {\n      return this._header.extras;\n    },\n  },\n\n  /**\n   * Gets or sets the tile's highlight color.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {Color}\n   *\n   * @default {@link Color.WHITE}\n   *\n   * @private\n   */\n  color: {\n    get: function () {\n      if (!defined(this._color)) {\n        this._color = new Color();\n      }\n      return Color.clone(this._color);\n    },\n    set: function (value) {\n      this._color = Color.clone(value, this._color);\n      this._colorDirty = true;\n    },\n  },\n\n  /**\n   * Determines if the tile has available content to render.  <code>true</code> if the tile's\n   * content is ready or if it has expired content that renders while new content loads; otherwise,\n   * <code>false</code>.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  contentAvailable: {\n    get: function () {\n      return (\n        (this.contentReady && this.hasRenderableContent) ||\n        (defined(this._expiredContent) && !this.contentFailed)\n      );\n    },\n  },\n\n  /**\n   * Determines if the tile's content is ready. This is automatically <code>true</code> for\n   * tile's with empty content.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  contentReady: {\n    get: function () {\n      return this._contentState === Cesium3DTileContentState.READY;\n    },\n  },\n\n  /**\n   * Determines if the tile's content has not be requested. <code>true</code> if tile's\n   * content has not be requested; otherwise, <code>false</code>.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  contentUnloaded: {\n    get: function () {\n      return this._contentState === Cesium3DTileContentState.UNLOADED;\n    },\n  },\n\n  /**\n   * Determines if the tile has renderable content which is unloaded\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  hasUnloadedRenderableContent: {\n    get: function () {\n      return this.hasRenderableContent && this.contentUnloaded;\n    },\n  },\n\n  /**\n   * Determines if the tile's content is expired. <code>true</code> if tile's\n   * content is expired; otherwise, <code>false</code>.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  contentExpired: {\n    get: function () {\n      return this._contentState === Cesium3DTileContentState.EXPIRED;\n    },\n  },\n\n  /**\n   * Determines if the tile's content failed to load.  <code>true</code> if the tile's\n   * content failed to load; otherwise, <code>false</code>.\n   *\n   * @memberof Cesium3DTile.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  contentFailed: {\n    get: function () {\n      return this._contentState === Cesium3DTileContentState.FAILED;\n    },\n  },\n\n  /**\n   * Returns the number of draw commands used by this tile.\n   *\n   * @readonly\n   *\n   * @private\n   */\n  commandsLength: {\n    get: function () {\n      return this._commandsLength;\n    },\n  },\n});\n\nconst scratchCartesian = new Cartesian3();\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n * @returns {boolean}\n */\nfunction isPriorityDeferred(tile, frameState) {\n  const { tileset, boundingSphere } = tile;\n  const { radius, center } = boundingSphere;\n  const { camera } = frameState;\n\n  // If closest point on line is inside the sphere then set foveatedFactor to 0.\n  // Otherwise, the dot product is with the line from camera to the point on the sphere that is closest to the line.\n  const scaledCameraDirection = Cartesian3.multiplyByScalar(\n    camera.directionWC,\n    tile._centerZDepth,\n    scratchCartesian,\n  );\n  const closestPointOnLine = Cartesian3.add(\n    camera.positionWC,\n    scaledCameraDirection,\n    scratchCartesian,\n  );\n  // The distance from the camera's view direction to the tile.\n  const toLine = Cartesian3.subtract(\n    closestPointOnLine,\n    center,\n    scratchCartesian,\n  );\n  const distanceToCenterLine = Cartesian3.magnitude(toLine);\n  const notTouchingSphere = distanceToCenterLine > radius;\n\n  // If camera's direction vector is inside the bounding sphere then consider\n  // this tile right along the line of sight and set _foveatedFactor to 0.\n  // Otherwise,_foveatedFactor is one minus the dot product of the camera's direction\n  // and the vector between the camera and the point on the bounding sphere closest to the view line.\n  if (notTouchingSphere) {\n    const toLineNormalized = Cartesian3.normalize(toLine, scratchCartesian);\n    const scaledToLine = Cartesian3.multiplyByScalar(\n      toLineNormalized,\n      radius,\n      scratchCartesian,\n    );\n    const closestOnSphere = Cartesian3.add(\n      center,\n      scaledToLine,\n      scratchCartesian,\n    );\n    const toClosestOnSphere = Cartesian3.subtract(\n      closestOnSphere,\n      camera.positionWC,\n      scratchCartesian,\n    );\n    const toClosestOnSphereNormalize = Cartesian3.normalize(\n      toClosestOnSphere,\n      scratchCartesian,\n    );\n    tile._foveatedFactor =\n      1.0 -\n      Math.abs(Cartesian3.dot(camera.directionWC, toClosestOnSphereNormalize));\n  } else {\n    tile._foveatedFactor = 0.0;\n  }\n\n  // Skip this feature if: non-skipLevelOfDetail and replace refine, if the foveated settings are turned off, if tile is progressive resolution and replace refine and skipLevelOfDetail (will help get rid of ancestor artifacts faster)\n  // Or if the tile is a preload of any kind\n  const replace = tile.refine === Cesium3DTileRefine.REPLACE;\n  const skipLevelOfDetail = tileset.isSkippingLevelOfDetail;\n  if (\n    (replace && !skipLevelOfDetail) ||\n    !tileset.foveatedScreenSpaceError ||\n    tileset.foveatedConeSize === 1.0 ||\n    (tile._priorityProgressiveResolution && replace && skipLevelOfDetail) ||\n    tileset._pass === Cesium3DTilePass.PRELOAD_FLIGHT ||\n    tileset._pass === Cesium3DTilePass.PRELOAD\n  ) {\n    return false;\n  }\n\n  const maximumFovatedFactor = 1.0 - Math.cos(camera.frustum.fov * 0.5); // 0.14 for fov = 60. NOTE very hard to defer vertically foveated tiles since max is based on fovy (which is fov). Lowering the 0.5 to a smaller fraction of the screen height will start to defer vertically foveated tiles.\n  const foveatedConeFactor = tileset.foveatedConeSize * maximumFovatedFactor;\n\n  // If it's inside the user-defined view cone, then it should not be deferred.\n  if (tile._foveatedFactor <= foveatedConeFactor) {\n    return false;\n  }\n\n  // Relax SSE based on how big the angle is between the tile and the edge of the foveated cone.\n  const range = maximumFovatedFactor - foveatedConeFactor;\n  const normalizedFoveatedFactor = CesiumMath.clamp(\n    (tile._foveatedFactor - foveatedConeFactor) / range,\n    0.0,\n    1.0,\n  );\n  const sseRelaxation = tileset.foveatedInterpolationCallback(\n    tileset.foveatedMinimumScreenSpaceErrorRelaxation,\n    tileset.memoryAdjustedScreenSpaceError,\n    normalizedFoveatedFactor,\n  );\n  const sse =\n    tile._screenSpaceError === 0.0 && defined(tile.parent)\n      ? tile.parent._screenSpaceError * 0.5\n      : tile._screenSpaceError;\n\n  return tileset.memoryAdjustedScreenSpaceError - sseRelaxation <= sse;\n}\n\nconst scratchJulianDate = new JulianDate();\n\n/**\n * Get the tile's screen space error.\n *\n * @private\n * @param {FrameState} frameState\n * @param {boolean} useParentGeometricError\n * @param {number} progressiveResolutionHeightFraction\n */\nCesium3DTile.prototype.getScreenSpaceError = function (\n  frameState,\n  useParentGeometricError,\n  progressiveResolutionHeightFraction,\n) {\n  const tileset = this._tileset;\n  const heightFraction = progressiveResolutionHeightFraction ?? 1.0;\n  const parentGeometricError = defined(this.parent)\n    ? this.parent.geometricError\n    : tileset._scaledGeometricError;\n  const geometricError = useParentGeometricError\n    ? parentGeometricError\n    : this.geometricError;\n  if (geometricError === 0.0) {\n    // Leaf tiles do not have any error so save the computation\n    return 0.0;\n  }\n  const { camera, context } = frameState;\n  let frustum = camera.frustum;\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight * heightFraction;\n  let error;\n  if (\n    frameState.mode === SceneMode.SCENE2D ||\n    frustum instanceof OrthographicFrustum\n  ) {\n    const offCenterFrustum = frustum.offCenterFrustum;\n    if (defined(offCenterFrustum)) {\n      frustum = offCenterFrustum;\n    }\n    const pixelSize =\n      Math.max(frustum.top - frustum.bottom, frustum.right - frustum.left) /\n      Math.max(width, height);\n    error = geometricError / pixelSize;\n  } else {\n    // Avoid divide by zero when viewer is inside the tile\n    const distance = Math.max(this._distanceToCamera, CesiumMath.EPSILON7);\n    const sseDenominator = frustum.sseDenominator;\n    error = (geometricError * height) / (distance * sseDenominator);\n    if (tileset.dynamicScreenSpaceError) {\n      const density = tileset._dynamicScreenSpaceErrorComputedDensity;\n      const factor = tileset.dynamicScreenSpaceErrorFactor;\n      const dynamicError = CesiumMath.fog(distance, density) * factor;\n      error -= dynamicError;\n    }\n  }\n\n  error /= frameState.pixelRatio;\n\n  return error;\n};\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n * @returns {boolean}\n */\nfunction isPriorityProgressiveResolution(tileset, tile) {\n  if (\n    tileset.progressiveResolutionHeightFraction <= 0.0 ||\n    tileset.progressiveResolutionHeightFraction > 0.5\n  ) {\n    return false;\n  }\n\n  const maximumScreenSpaceError = tileset.memoryAdjustedScreenSpaceError;\n  let isProgressiveResolutionTile =\n    tile._screenSpaceErrorProgressiveResolution > maximumScreenSpaceError; // Mark non-SSE leaves\n  tile._priorityProgressiveResolutionScreenSpaceErrorLeaf = false; // Needed for skipLOD\n  const parent = tile.parent;\n  const tilePasses =\n    tile._screenSpaceErrorProgressiveResolution <= maximumScreenSpaceError;\n  const parentFails =\n    defined(parent) &&\n    parent._screenSpaceErrorProgressiveResolution > maximumScreenSpaceError;\n  if (tilePasses && parentFails) {\n    // A progressive resolution SSE leaf, promote its priority as well\n    tile._priorityProgressiveResolutionScreenSpaceErrorLeaf = true;\n    isProgressiveResolutionTile = true;\n  }\n  return isProgressiveResolutionTile;\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n * @returns {number}\n */\nfunction getPriorityReverseScreenSpaceError(tileset, tile) {\n  const parent = tile.parent;\n  const useParentScreenSpaceError =\n    defined(parent) &&\n    (!tileset.isSkippingLevelOfDetail ||\n      tile._screenSpaceError === 0.0 ||\n      parent.hasTilesetContent ||\n      parent.hasImplicitContent);\n  const screenSpaceError = useParentScreenSpaceError\n    ? parent._screenSpaceError\n    : tile._screenSpaceError;\n  return tileset.root._screenSpaceError - screenSpaceError;\n}\n\n/**\n * Update the tile's visibility.\n *\n * @private\n * @param {FrameState} frameState\n */\nCesium3DTile.prototype.updateVisibility = function (frameState) {\n  const { parent, tileset } = this;\n  if (this._updatedVisibilityFrame === tileset._updatedVisibilityFrame) {\n    // The tile has already been updated for this frame\n    return;\n  }\n\n  const parentTransform = defined(parent)\n    ? parent.computedTransform\n    : tileset.modelMatrix;\n  const parentVisibilityPlaneMask = defined(parent)\n    ? parent._visibilityPlaneMask\n    : CullingVolume.MASK_INDETERMINATE;\n  this.updateTransform(parentTransform, frameState);\n  this._distanceToCamera = this.distanceToTile(frameState);\n  this._centerZDepth = this.distanceToTileCenter(frameState);\n  this._screenSpaceError = this.getScreenSpaceError(frameState, false);\n  this._screenSpaceErrorProgressiveResolution = this.getScreenSpaceError(\n    frameState,\n    false,\n    tileset.progressiveResolutionHeightFraction,\n  );\n  this._visibilityPlaneMask = this.visibility(\n    frameState,\n    parentVisibilityPlaneMask,\n  ); // Use parent's plane mask to speed up visibility test\n  this._visible = this._visibilityPlaneMask !== CullingVolume.MASK_OUTSIDE;\n  this._inRequestVolume = this.insideViewerRequestVolume(frameState);\n  this._priorityReverseScreenSpaceError = getPriorityReverseScreenSpaceError(\n    tileset,\n    this,\n  );\n  this._priorityProgressiveResolution = isPriorityProgressiveResolution(\n    tileset,\n    this,\n  );\n  this.priorityDeferred = isPriorityDeferred(this, frameState);\n\n  this._updatedVisibilityFrame = tileset._updatedVisibilityFrame;\n};\n\n/**\n * Update whether the tile has expired.\n *\n * @private\n */\nCesium3DTile.prototype.updateExpiration = function () {\n  if (\n    defined(this.expireDate) &&\n    this.contentReady &&\n    !this.hasEmptyContent &&\n    !this.hasMultipleContents\n  ) {\n    const now = JulianDate.now(scratchJulianDate);\n    if (JulianDate.lessThan(this.expireDate, now)) {\n      this._contentState = Cesium3DTileContentState.EXPIRED;\n      this._expiredContent = this._content;\n    }\n  }\n};\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n */\nfunction updateExpireDate(tile) {\n  if (!defined(tile.expireDuration)) {\n    return;\n  }\n  const expireDurationDate = JulianDate.now(scratchJulianDate);\n  JulianDate.addSeconds(\n    expireDurationDate,\n    tile.expireDuration,\n    expireDurationDate,\n  );\n\n  if (defined(tile.expireDate)) {\n    if (JulianDate.lessThan(tile.expireDate, expireDurationDate)) {\n      JulianDate.clone(expireDurationDate, tile.expireDate);\n    }\n  } else {\n    tile.expireDate = JulianDate.clone(expireDurationDate);\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @returns {Function}\n */\nfunction createPriorityFunction(tile) {\n  return function () {\n    return tile._priority;\n  };\n}\n\n/**\n * Requests the tile's content.\n * <p>\n * The request may not be made if the Cesium Request Scheduler can't prioritize it.\n * </p>\n *\n * @return {Promise<Cesium3DTileContent>|undefined} A promise that resolves when the request completes, or undefined if there is no request needed, or the request cannot be scheduled.\n * @private\n */\nCesium3DTile.prototype.requestContent = function () {\n  // empty contents don't require any HTTP requests\n  if (this.hasEmptyContent) {\n    return;\n  }\n\n  if (this.hasMultipleContents) {\n    return requestMultipleContents(this);\n  }\n\n  return requestSingleContent(this);\n};\n\n/**\n * Multiple {@link Cesium3DTileContent}s are allowed within a single tile either through\n * the tile JSON (3D Tiles 1.1) or the <code>3DTILES_multiple_contents</code> extension.\n * Due to differences in request scheduling, this is handled separately.\n * <p>\n * This implementation of multiple contents does not\n * support tile expiry like requestSingleContent does. If this changes,\n * note that the resource.setQueryParameters() details must go inside {@link Multiple3DTileContent} since that is per-request.\n * </p>\n *\n * @private\n * @param {Cesium3DTile} tile\n * @returns {Promise<Cesium3DTileContent>|Promise<undefined>|undefined} A promise that resolves to the tile content once loaded, or a promise that resolves to undefined if the request was cancelled mid-flight, or undefined if the request cannot be scheduled this frame\n */\nfunction requestMultipleContents(tile) {\n  let multipleContents = tile._content;\n  const tileset = tile._tileset;\n\n  if (!defined(multipleContents)) {\n    // Create the content object immediately, it will handle scheduling\n    // requests for inner contents.\n    const contentsJson = hasExtension(tile._header, \"3DTILES_multiple_contents\")\n      ? tile._header.extensions[\"3DTILES_multiple_contents\"]\n      : tile._header;\n\n    multipleContents = new Multiple3DTileContent(\n      tileset,\n      tile,\n      tile._contentResource.clone(),\n      contentsJson,\n    );\n    tile._content = multipleContents;\n  }\n\n  const promise = multipleContents.requestInnerContents();\n\n  if (!defined(promise)) {\n    // Request could not all be scheduled this frame\n    return;\n  }\n\n  tile._contentState = Cesium3DTileContentState.LOADING;\n  return promise\n    .then((content) => {\n      if (tile.isDestroyed()) {\n        // Tile is unloaded before the content can process\n        return;\n      }\n\n      // Tile was canceled, try again later\n      if (!defined(content)) {\n        return;\n      }\n\n      tile._contentState = Cesium3DTileContentState.PROCESSING;\n      return multipleContents;\n    })\n    .catch((error) => {\n      if (tile.isDestroyed()) {\n        // Tile is unloaded before the content can process\n        return;\n      }\n\n      tile._contentState = Cesium3DTileContentState.FAILED;\n      throw error;\n    });\n}\n\nasync function processArrayBuffer(\n  tile,\n  tileset,\n  request,\n  expired,\n  requestPromise,\n) {\n  const previousState = tile._contentState;\n  tile._contentState = Cesium3DTileContentState.LOADING;\n  ++tileset.statistics.numberOfPendingRequests;\n\n  let arrayBuffer;\n  try {\n    arrayBuffer = await requestPromise;\n  } catch (error) {\n    --tileset.statistics.numberOfPendingRequests;\n    if (tile.isDestroyed()) {\n      // Tile is unloaded before the content can process\n      return;\n    }\n\n    if (request.cancelled || request.state === RequestState.CANCELLED) {\n      // Cancelled due to low priority - try again later.\n      tile._contentState = previousState;\n      ++tileset.statistics.numberOfAttemptedRequests;\n      return;\n    }\n\n    tile._contentState = Cesium3DTileContentState.FAILED;\n    throw error;\n  }\n\n  if (tile.isDestroyed()) {\n    --tileset.statistics.numberOfPendingRequests;\n    // Tile is unloaded before the content can process\n    return;\n  }\n\n  if (request.cancelled || request.state === RequestState.CANCELLED) {\n    // Cancelled due to low priority - try again later.\n    tile._contentState = previousState;\n    --tileset.statistics.numberOfPendingRequests;\n    ++tileset.statistics.numberOfAttemptedRequests;\n    return;\n  }\n\n  try {\n    const content = await makeContent(tile, arrayBuffer);\n    --tileset.statistics.numberOfPendingRequests;\n\n    if (tile.isDestroyed()) {\n      // Tile is unloaded before the content can process\n      return;\n    }\n\n    if (expired) {\n      tile.expireDate = undefined;\n    }\n\n    tile._content = content;\n    tile._contentState = Cesium3DTileContentState.PROCESSING;\n\n    return content;\n  } catch (error) {\n    --tileset.statistics.numberOfPendingRequests;\n    if (tile.isDestroyed()) {\n      // Tile is unloaded before the content can process\n      return;\n    }\n\n    tile._contentState = Cesium3DTileContentState.FAILED;\n    throw error;\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @returns {Promise<Cesium3DTileContent>|Promise<undefined>|undefined} A promise that resolves to the tile content once loaded; a promise that resolves to undefined if the tile was destroyed before processing can happen or the request was cancelled mid-flight; or undefined if the request cannot be scheduled this frame.\n */\nfunction requestSingleContent(tile) {\n  // it is important to clone here. The fetchArrayBuffer() below uses\n  // throttling, but other uses of the resources do not.\n  const resource = tile._contentResource.clone();\n  const expired = tile.contentExpired;\n  if (expired) {\n    // Append a query parameter of the tile expiration date to prevent caching\n    resource.setQueryParameters({\n      expired: tile.expireDate.toString(),\n    });\n  }\n\n  const request = new Request({\n    throttle: true,\n    throttleByServer: true,\n    type: RequestType.TILES3D,\n    priorityFunction: createPriorityFunction(tile),\n    serverKey: tile._serverKey,\n  });\n\n  tile._request = request;\n  resource.request = request;\n  const tileset = tile._tileset;\n  const promise = resource.fetchArrayBuffer();\n  if (!defined(promise)) {\n    ++tileset.statistics.numberOfAttemptedRequests;\n    return;\n  }\n\n  return processArrayBuffer(tile, tileset, request, expired, promise);\n}\n\n/**\n * Given a downloaded content payload, construct a {@link Cesium3DTileContent}.\n * <p>\n * This is only used for single contents.\n * </p>\n *\n * @param {Cesium3DTile} tile The tile\n * @param {ArrayBuffer} arrayBuffer The downloaded payload containing data for the content\n * @return {Promise<Cesium3DTileContent>} A content object\n * @private\n */\nasync function makeContent(tile, arrayBuffer) {\n  const preprocessed = preprocess3DTileContent(arrayBuffer);\n\n  // Vector and Geometry tile rendering do not support the skip LOD optimization.\n  const tileset = tile._tileset;\n  tileset._disableSkipLevelOfDetail =\n    tileset._disableSkipLevelOfDetail ||\n    preprocessed.contentType === Cesium3DTileContentType.GEOMETRY ||\n    preprocessed.contentType === Cesium3DTileContentType.VECTOR;\n\n  if (\n    preprocessed.contentType === Cesium3DTileContentType.IMPLICIT_SUBTREE ||\n    preprocessed.contentType === Cesium3DTileContentType.IMPLICIT_SUBTREE_JSON\n  ) {\n    tile.hasImplicitContent = true;\n    tile.hasRenderableContent = false;\n  }\n\n  if (preprocessed.contentType === Cesium3DTileContentType.EXTERNAL_TILESET) {\n    tile.hasTilesetContent = true;\n    tile.hasRenderableContent = false;\n  }\n\n  let content;\n  const contentFactory = Cesium3DTileContentFactory[preprocessed.contentType];\n  if (tile.isDestroyed()) {\n    return;\n  }\n\n  if (defined(preprocessed.binaryPayload)) {\n    content = await Promise.resolve(\n      contentFactory(\n        tileset,\n        tile,\n        tile._contentResource,\n        preprocessed.binaryPayload.buffer,\n        0,\n      ),\n    );\n  } else {\n    // JSON formats\n    content = await Promise.resolve(\n      contentFactory(\n        tileset,\n        tile,\n        tile._contentResource,\n        preprocessed.jsonPayload,\n      ),\n    );\n  }\n\n  const contentHeader = tile._contentHeader;\n\n  if (tile.hasImplicitContentMetadata) {\n    const subtree = tile.implicitSubtree;\n    const coordinates = tile.implicitCoordinates;\n    content.metadata = subtree.getContentMetadataView(coordinates, 0);\n  } else if (!tile.hasImplicitContent) {\n    content.metadata = findContentMetadata(tileset, contentHeader);\n  }\n\n  const groupMetadata = findGroupMetadata(tileset, contentHeader);\n  if (defined(groupMetadata)) {\n    content.group = new Cesium3DContentGroup({\n      metadata: groupMetadata,\n    });\n  }\n\n  return content;\n}\n\n/**\n * Cancel requests for the tile's contents. This is called when the tile\n * goes out of view.\n *\n * @private\n */\nCesium3DTile.prototype.cancelRequests = function () {\n  if (this.hasMultipleContents) {\n    this._content.cancelRequests();\n  } else {\n    this._request.cancel();\n  }\n};\n\n/**\n * Unloads the tile's content.\n *\n * @private\n */\nCesium3DTile.prototype.unloadContent = function () {\n  if (!this.hasRenderableContent) {\n    return;\n  }\n\n  this._content = this._content && this._content.destroy();\n  this._contentState = Cesium3DTileContentState.UNLOADED;\n\n  this.lastStyleTime = 0.0;\n  this.clippingPlanesDirty = this._clippingPlanesState === 0;\n  this._clippingPlanesState = 0;\n  this.clippingPolygonsDirty = this._clippingPolygonsState === 0;\n  this._clippingPolygonsState = 0;\n\n  this._debugColorizeTiles = false;\n\n  this._debugBoundingVolume =\n    this._debugBoundingVolume && this._debugBoundingVolume.destroy();\n  this._debugContentBoundingVolume =\n    this._debugContentBoundingVolume &&\n    this._debugContentBoundingVolume.destroy();\n  this._debugViewerRequestVolume =\n    this._debugViewerRequestVolume && this._debugViewerRequestVolume.destroy();\n};\n\nconst scratchProjectedBoundingSphere = new BoundingSphere();\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n * @returns {TileBoundingVolume}\n */\nfunction getBoundingVolume(tile, frameState) {\n  if (\n    frameState.mode !== SceneMode.SCENE3D &&\n    !defined(tile._boundingVolume2D)\n  ) {\n    const boundingSphere = tile._boundingVolume.boundingSphere;\n    const sphere = BoundingSphere.projectTo2D(\n      boundingSphere,\n      frameState.mapProjection,\n      scratchProjectedBoundingSphere,\n    );\n    tile._boundingVolume2D = new TileBoundingSphere(\n      sphere.center,\n      sphere.radius,\n    );\n  }\n\n  return frameState.mode !== SceneMode.SCENE3D\n    ? tile._boundingVolume2D\n    : tile._boundingVolume;\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n * @returns {TileBoundingVolume}\n */\nfunction getContentBoundingVolume(tile, frameState) {\n  if (\n    frameState.mode !== SceneMode.SCENE3D &&\n    !defined(tile._contentBoundingVolume2D)\n  ) {\n    const boundingSphere = tile._contentBoundingVolume.boundingSphere;\n    const sphere = BoundingSphere.projectTo2D(\n      boundingSphere,\n      frameState.mapProjection,\n      scratchProjectedBoundingSphere,\n    );\n    tile._contentBoundingVolume2D = new TileBoundingSphere(\n      sphere.center,\n      sphere.radius,\n    );\n  }\n  return frameState.mode !== SceneMode.SCENE3D\n    ? tile._contentBoundingVolume2D\n    : tile._contentBoundingVolume;\n}\n\n/**\n * Determines whether the tile's bounding volume intersects the culling volume.\n *\n * @param {FrameState} frameState The frame state.\n * @param {number} parentVisibilityPlaneMask The parent's plane mask to speed up the visibility check.\n * @returns {number} A plane mask as described above in {@link CullingVolume#computeVisibilityWithPlaneMask}.\n *\n * @private\n */\nCesium3DTile.prototype.visibility = function (\n  frameState,\n  parentVisibilityPlaneMask,\n) {\n  const cullingVolume = frameState.cullingVolume;\n  const boundingVolume = getBoundingVolume(this, frameState);\n\n  const tileset = this._tileset;\n  const clippingPlanes = tileset.clippingPlanes;\n  if (defined(clippingPlanes) && clippingPlanes.enabled) {\n    const intersection = clippingPlanes.computeIntersectionWithBoundingVolume(\n      boundingVolume,\n      tileset.clippingPlanesOriginMatrix,\n    );\n    this._isClipped = intersection !== Intersect.INSIDE;\n    if (intersection === Intersect.OUTSIDE) {\n      return CullingVolume.MASK_OUTSIDE;\n    }\n  }\n\n  const clippingPolygons = tileset.clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.enabled) {\n    const intersection =\n      clippingPolygons.computeIntersectionWithBoundingVolume(boundingVolume);\n\n    this._isClippedByPolygon = intersection !== Intersect.OUTSIDE;\n    // Polygon clipping intersections are determined by outer rectangles, therefore we cannot\n    // preemptively determine if a tile is completely clipped or not here.\n  }\n\n  return cullingVolume.computeVisibilityWithPlaneMask(\n    boundingVolume,\n    parentVisibilityPlaneMask,\n  );\n};\n\n/**\n * Assuming the tile's bounding volume intersects the culling volume, determines\n * whether the tile's content's bounding volume intersects the culling volume.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {Intersect} The result of the intersection: the tile's content is completely outside, completely inside, or intersecting the culling volume.\n *\n * @private\n */\nCesium3DTile.prototype.contentVisibility = function (frameState) {\n  // Assumes the tile's bounding volume intersects the culling volume already, so\n  // just return Intersect.INSIDE if there is no content bounding volume.\n  if (!defined(this._contentBoundingVolume)) {\n    return Intersect.INSIDE;\n  }\n\n  if (this._visibilityPlaneMask === CullingVolume.MASK_INSIDE) {\n    // The tile's bounding volume is completely inside the culling volume so\n    // the content bounding volume must also be inside.\n    return Intersect.INSIDE;\n  }\n\n  // PERFORMANCE_IDEA: is it possible to burn less CPU on this test since we know the\n  // tile's (not the content's) bounding volume intersects the culling volume?\n  const cullingVolume = frameState.cullingVolume;\n  const boundingVolume = getContentBoundingVolume(this, frameState);\n\n  const tileset = this._tileset;\n  const clippingPlanes = tileset.clippingPlanes;\n  if (defined(clippingPlanes) && clippingPlanes.enabled) {\n    const intersection = clippingPlanes.computeIntersectionWithBoundingVolume(\n      boundingVolume,\n      tileset.clippingPlanesOriginMatrix,\n    );\n    this._isClipped = intersection !== Intersect.INSIDE;\n    if (intersection === Intersect.OUTSIDE) {\n      return Intersect.OUTSIDE;\n    }\n  }\n\n  const clippingPolygons = tileset.clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.enabled) {\n    const intersection =\n      clippingPolygons.computeIntersectionWithBoundingVolume(boundingVolume);\n    this._isClippedByPolygon = intersection !== Intersect.OUTSIDE;\n    if (intersection === Intersect.INSIDE) {\n      return Intersect.OUTSIDE;\n    }\n  }\n\n  return cullingVolume.computeVisibility(boundingVolume);\n};\n\n/**\n * Computes the (potentially approximate) distance from the closest point of the tile's bounding volume to the camera.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {number} The distance, in meters, or zero if the camera is inside the bounding volume.\n *\n * @private\n */\nCesium3DTile.prototype.distanceToTile = function (frameState) {\n  const boundingVolume = getBoundingVolume(this, frameState);\n  return boundingVolume.distanceToCamera(frameState);\n};\n\nconst scratchToTileCenter = new Cartesian3();\n\n/**\n * Computes the distance from the center of the tile's bounding volume to the camera's plane defined by its position and view direction.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {number} The distance, in meters.\n *\n * @private\n */\nCesium3DTile.prototype.distanceToTileCenter = function (frameState) {\n  const tileBoundingVolume = getBoundingVolume(this, frameState);\n  const boundingVolume = tileBoundingVolume.boundingVolume; // Gets the underlying OrientedBoundingBox or BoundingSphere\n  const toCenter = Cartesian3.subtract(\n    boundingVolume.center,\n    frameState.camera.positionWC,\n    scratchToTileCenter,\n  );\n  return Cartesian3.dot(frameState.camera.directionWC, toCenter);\n};\n\n/**\n * Checks if the camera is inside the viewer request volume.\n *\n * @param {FrameState} frameState The frame state.\n * @returns {boolean} Whether the camera is inside the volume.\n *\n * @private\n */\nCesium3DTile.prototype.insideViewerRequestVolume = function (frameState) {\n  const viewerRequestVolume = this._viewerRequestVolume;\n  return (\n    !defined(viewerRequestVolume) ||\n    viewerRequestVolume.distanceToCamera(frameState) === 0.0\n  );\n};\n\nconst scratchMatrix = new Matrix3();\nconst scratchScale = new Cartesian3();\nconst scratchHalfAxes = new Matrix3();\nconst scratchCenter = new Cartesian3();\nconst scratchRectangle = new Rectangle();\nconst scratchOrientedBoundingBox = new OrientedBoundingBox();\nconst scratchTransform = new Matrix4();\n\n/**\n * @private\n * @param {Array} box An array of 12 numbers that define an oriented bounding box\n * @param {Matrix4} transform\n * @param {TileBoundingVolume} [result]\n * @returns {TileOrientedBoundingBox}\n */\nfunction createBox(box, transform, result) {\n  let center = Cartesian3.fromElements(box[0], box[1], box[2], scratchCenter);\n  let halfAxes = Matrix3.fromArray(box, 3, scratchHalfAxes);\n\n  // Find the transformed center and halfAxes\n  center = Matrix4.multiplyByPoint(transform, center, center);\n  const rotationScale = Matrix4.getMatrix3(transform, scratchMatrix);\n  halfAxes = Matrix3.multiply(rotationScale, halfAxes, halfAxes);\n\n  if (defined(result)) {\n    result.update(center, halfAxes);\n    return result;\n  }\n  return new TileOrientedBoundingBox(center, halfAxes);\n}\n\n/**\n * @private\n * @param {Array} region An array of six numbers that define a bounding geographic region in EPSG:4979 coordinates with the order [west, south, east, north, minimum height, maximum height]\n * @param {Matrix4} transform\n * @param {Matrix4} initialTransform\n * @param {TileOrientedBoundingBox} [result]\n * @returns {TileOrientedBoundingBox}\n */\nfunction createBoxFromTransformedRegion(\n  region,\n  transform,\n  initialTransform,\n  result,\n) {\n  const rectangle = Rectangle.unpack(region, 0, scratchRectangle);\n  const minimumHeight = region[4];\n  const maximumHeight = region[5];\n\n  const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n    rectangle,\n    minimumHeight,\n    maximumHeight,\n    Ellipsoid.WGS84,\n    scratchOrientedBoundingBox,\n  );\n  let center = orientedBoundingBox.center;\n  let halfAxes = orientedBoundingBox.halfAxes;\n\n  // A region bounding volume is not transformed by the transform in the tileset JSON,\n  // but may be transformed by additional transforms applied in Cesium.\n  // This is why the transform is calculated as the difference between the initial transform and the current transform.\n  transform = Matrix4.multiplyTransformation(\n    transform,\n    Matrix4.inverseTransformation(initialTransform, scratchTransform),\n    scratchTransform,\n  );\n  center = Matrix4.multiplyByPoint(transform, center, center);\n  const rotationScale = Matrix4.getMatrix3(transform, scratchMatrix);\n  halfAxes = Matrix3.multiply(rotationScale, halfAxes, halfAxes);\n\n  if (defined(result) && result instanceof TileOrientedBoundingBox) {\n    result.update(center, halfAxes);\n    return result;\n  }\n\n  return new TileOrientedBoundingBox(center, halfAxes);\n}\n\n/**\n * Creates a TileBoundingVolume from the given region and transform\n * information.\n *\n * This may either be a TileBoundingRegion or a TileOrientedBoundingBox.\n *\n * If the given transform is the initial transform, then this will return\n * a TileBoundingRegion. This will either be the given result parameter,\n * or a new TileBoundingRegion, if the given result parameter was not\n * a TileBoundingRegion.\n *\n * If the given transform deviates from the initial transform, then this\n * will return a TileOrientedBoundingBox that was computed by applying\n * the given transform to the given region. This will either be the\n * given result parameter, or a new TileOrientedBoundingBox, if the given\n * result parameter was not a TileOrientedBoundingBox\n *\n * @private\n * @param {Array} region An array of six numbers that define a bounding\n * geographic region in EPSG:4979 coordinates with the order\n * [west, south, east, north, minimum height, maximum height]\n * @param {Matrix4} transform The current computedTransform of the tile,\n * which includes the parent transform (which, in turn, includes the\n * modelMatrix of the containing tileset)\n * @param {Matrix4} initialTransform The initial transform of the tile,\n * before any changes to the modelMatrix of the containing tileset\n * @param {TileBoundingVolume} [result] An optional result.\n * @returns {TileBoundingVolume} The resulting bounding volume\n */\nfunction createRegion(region, transform, initialTransform, result) {\n  if (\n    !Matrix4.equalsEpsilon(transform, initialTransform, CesiumMath.EPSILON8)\n  ) {\n    if (result instanceof TileOrientedBoundingBox) {\n      return createBoxFromTransformedRegion(\n        region,\n        transform,\n        initialTransform,\n        result,\n      );\n    }\n    return createBoxFromTransformedRegion(\n      region,\n      transform,\n      initialTransform,\n      undefined,\n    );\n  }\n\n  const rectangleRegion = Rectangle.unpack(region, 0, scratchRectangle);\n\n  if (result instanceof TileBoundingRegion) {\n    result.rectangle = Rectangle.clone(rectangleRegion, result.rectangle);\n    result.minimumHeight = region[4];\n    result.maximumHeight = region[5];\n    // The TileBoundingRegion was already constructed with the default\n    // WGS84 ellipsoid, so keep it consistent when updating.\n    result.computeBoundingVolumes(Ellipsoid.WGS84);\n    return result;\n  }\n\n  return new TileBoundingRegion({\n    rectangle: rectangleRegion,\n    minimumHeight: region[4],\n    maximumHeight: region[5],\n  });\n}\n\n/**\n * @private\n * @param {Array} sphere An array of four numbers that define a bounding sphere\n * @param {Matrix4} transform\n * @param {TileBoundingVolume} [result]\n * @returns {TileBoundingSphere}\n */\nfunction createSphere(sphere, transform, result) {\n  let center = Cartesian3.fromElements(\n    sphere[0],\n    sphere[1],\n    sphere[2],\n    scratchCenter,\n  );\n  let radius = sphere[3];\n\n  // Find the transformed center and radius\n  center = Matrix4.multiplyByPoint(transform, center, center);\n  const scale = Matrix4.getScale(transform, scratchScale);\n  const uniformScale = Cartesian3.maximumComponent(scale);\n  radius *= uniformScale;\n\n  if (defined(result)) {\n    result.update(center, radius);\n    return result;\n  }\n  return new TileBoundingSphere(center, radius);\n}\n\n/**\n * Create a bounding volume from the tile's bounding volume header.\n *\n * @param {object} boundingVolumeHeader The tile's bounding volume header.\n * @param {Matrix4} transform The transform to apply to the bounding volume.\n * @param {TileBoundingVolume} [result] The object onto which to store the result.\n *\n * @returns {TileBoundingVolume} The modified result parameter or a new TileBoundingVolume instance if none was provided.\n *\n * @private\n */\nCesium3DTile.prototype.createBoundingVolume = function (\n  boundingVolumeHeader,\n  transform,\n  result,\n) {\n  // if explicit tile metadata includes TILE_BOUNDING_BOX, TILE_BOUNDING_REGION,\n  // or TILE_BOUNDING_SPHERE, override tile.boundingVolume.\n  const tileMetadata = this.metadata;\n  let metadataBoundingVolumeHeader;\n  if (defined(tileMetadata)) {\n    metadataBoundingVolumeHeader =\n      BoundingVolumeSemantics.parseBoundingVolumeSemantic(\"TILE\", tileMetadata);\n  }\n  if (defined(metadataBoundingVolumeHeader)) {\n    boundingVolumeHeader = metadataBoundingVolumeHeader;\n  }\n\n  if (!defined(boundingVolumeHeader)) {\n    throw new RuntimeError(\"boundingVolume must be defined\");\n  }\n\n  if (hasExtension(boundingVolumeHeader, \"3DTILES_bounding_volume_S2\")) {\n    return new TileBoundingS2Cell(\n      boundingVolumeHeader.extensions[\"3DTILES_bounding_volume_S2\"],\n    );\n  }\n\n  const { box, region, sphere } = boundingVolumeHeader;\n  if (defined(box)) {\n    const tileOrientedBoundingBox = createBox(box, transform, result);\n    if (this._verticalExaggeration !== 1.0) {\n      exaggerateBoundingBox(\n        tileOrientedBoundingBox,\n        this._verticalExaggeration,\n        this._verticalExaggerationRelativeHeight,\n      );\n    }\n    return tileOrientedBoundingBox;\n  }\n  if (defined(region)) {\n    const tileBoundingVolume = createRegion(\n      region,\n      transform,\n      this._initialTransform,\n      result,\n    );\n    if (this._verticalExaggeration === 1.0) {\n      return tileBoundingVolume;\n    }\n    if (tileBoundingVolume instanceof TileOrientedBoundingBox) {\n      exaggerateBoundingBox(\n        tileBoundingVolume,\n        this._verticalExaggeration,\n        this._verticalExaggerationRelativeHeight,\n      );\n    } else {\n      tileBoundingVolume.minimumHeight = VerticalExaggeration.getHeight(\n        tileBoundingVolume.minimumHeight,\n        this._verticalExaggeration,\n        this._verticalExaggerationRelativeHeight,\n      );\n      tileBoundingVolume.maximumHeight = VerticalExaggeration.getHeight(\n        tileBoundingVolume.maximumHeight,\n        this._verticalExaggeration,\n        this._verticalExaggerationRelativeHeight,\n      );\n      tileBoundingVolume.computeBoundingVolumes(Ellipsoid.WGS84);\n    }\n    return tileBoundingVolume;\n  }\n  if (defined(sphere)) {\n    const tileBoundingSphere = createSphere(sphere, transform, result);\n    if (this._verticalExaggeration !== 1.0) {\n      const exaggeratedCenter = VerticalExaggeration.getPosition(\n        tileBoundingSphere.center,\n        Ellipsoid.WGS84,\n        this._verticalExaggeration,\n        this._verticalExaggerationRelativeHeight,\n        scratchCenter,\n      );\n      const exaggeratedRadius =\n        tileBoundingSphere.radius * this._verticalExaggeration;\n      tileBoundingSphere.update(exaggeratedCenter, exaggeratedRadius);\n    }\n    return tileBoundingSphere;\n  }\n  throw new RuntimeError(\n    \"boundingVolume must contain a sphere, region, or box\",\n  );\n};\n\nconst scratchExaggeratedCorners = Cartesian3.unpackArray(\n  new Array(8 * 3).fill(0),\n);\n\n/**\n * Exaggerates the bounding box of a tile based on the provided exaggeration factors.\n *\n * @private\n * @param {TileOrientedBoundingBox} tileOrientedBoundingBox - The oriented bounding box of the tile.\n * @param {number} exaggeration - The exaggeration factor to apply to the tile's bounding box.\n * @param {number} exaggerationRelativeHeight - The height relative to which exaggeration will be applied.\n */\nfunction exaggerateBoundingBox(\n  tileOrientedBoundingBox,\n  exaggeration,\n  exaggerationRelativeHeight,\n) {\n  const exaggeratedCorners = tileOrientedBoundingBox.boundingVolume\n    .computeCorners(scratchExaggeratedCorners)\n    .map((corner) =>\n      VerticalExaggeration.getPosition(\n        corner,\n        Ellipsoid.WGS84,\n        exaggeration,\n        exaggerationRelativeHeight,\n        corner,\n      ),\n    );\n  const exaggeratedBox = OrientedBoundingBox.fromPoints(\n    exaggeratedCorners,\n    scratchOrientedBoundingBox,\n  );\n  tileOrientedBoundingBox.update(\n    exaggeratedBox.center,\n    exaggeratedBox.halfAxes,\n  );\n}\n\n/**\n * Update the tile's transform. The transform is applied to the tile's bounding volumes.\n *\n * @private\n * @param {Matrix4} parentTransform\n * @param {FrameState} [frameState]\n */\nCesium3DTile.prototype.updateTransform = function (\n  parentTransform,\n  frameState,\n) {\n  parentTransform = parentTransform ?? Matrix4.IDENTITY;\n  const computedTransform = Matrix4.multiplyTransformation(\n    parentTransform,\n    this.transform,\n    scratchTransform,\n  );\n  const transformChanged = !Matrix4.equals(\n    computedTransform,\n    this.computedTransform,\n  );\n  const exaggerationChanged =\n    defined(frameState) &&\n    (this._verticalExaggeration !== frameState.verticalExaggeration ||\n      this._verticalExaggerationRelativeHeight !==\n        frameState.verticalExaggerationRelativeHeight);\n\n  if (!transformChanged && !exaggerationChanged) {\n    return;\n  }\n  if (transformChanged) {\n    Matrix4.clone(computedTransform, this.computedTransform);\n  }\n  if (exaggerationChanged) {\n    this._verticalExaggeration = frameState.verticalExaggeration;\n    this._verticalExaggerationRelativeHeight =\n      frameState.verticalExaggerationRelativeHeight;\n  }\n\n  // Update the bounding volumes\n  const header = this._header;\n  const contentHeader = this._contentHeader;\n  this._boundingVolume = this.createBoundingVolume(\n    header.boundingVolume,\n    this.computedTransform,\n    this._boundingVolume,\n  );\n  if (defined(this._contentBoundingVolume)) {\n    this._contentBoundingVolume = this.createBoundingVolume(\n      contentHeader.boundingVolume,\n      this.computedTransform,\n      this._contentBoundingVolume,\n    );\n  }\n  if (defined(this._viewerRequestVolume)) {\n    this._viewerRequestVolume = this.createBoundingVolume(\n      header.viewerRequestVolume,\n      this.computedTransform,\n      this._viewerRequestVolume,\n    );\n  }\n\n  this.updateGeometricErrorScale();\n\n  // Destroy the debug bounding volumes. They will be generated fresh.\n  this._debugBoundingVolume =\n    this._debugBoundingVolume && this._debugBoundingVolume.destroy();\n  this._debugContentBoundingVolume =\n    this._debugContentBoundingVolume &&\n    this._debugContentBoundingVolume.destroy();\n  this._debugViewerRequestVolume =\n    this._debugViewerRequestVolume && this._debugViewerRequestVolume.destroy();\n};\n\nCesium3DTile.prototype.updateGeometricErrorScale = function () {\n  const scale = Matrix4.getScale(this.computedTransform, scratchScale);\n  const uniformScale = Cartesian3.maximumComponent(scale);\n  this.geometricError = this._geometricError * uniformScale;\n\n  if (!defined(this.parent)) {\n    // Update the tileset's geometric error\n    const tileset = this._tileset;\n    tileset._scaledGeometricError = tileset._geometricError * uniformScale;\n  }\n};\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n * @param {object} passOptions\n */\nfunction applyDebugSettings(tile, tileset, frameState, passOptions) {\n  if (!passOptions.isRender) {\n    return;\n  }\n\n  const hasContentBoundingVolume =\n    defined(tile._contentHeader) && defined(tile._contentHeader.boundingVolume);\n\n  const showVolume =\n    tileset.debugShowBoundingVolume ||\n    (tileset.debugShowContentBoundingVolume && !hasContentBoundingVolume);\n  if (showVolume) {\n    let color;\n    if (!tile._finalResolution) {\n      color = Color.YELLOW;\n    } else if (!tile.hasRenderableContent) {\n      color = Color.DARKGRAY;\n    } else {\n      color = Color.WHITE;\n    }\n    if (!defined(tile._debugBoundingVolume)) {\n      tile._debugBoundingVolume = tile._boundingVolume.createDebugVolume(color);\n    }\n    tile._debugBoundingVolume.update(frameState);\n    const attributes =\n      tile._debugBoundingVolume.getGeometryInstanceAttributes(\"outline\");\n    attributes.color = ColorGeometryInstanceAttribute.toValue(\n      color,\n      attributes.color,\n    );\n  } else if (!showVolume && defined(tile._debugBoundingVolume)) {\n    tile._debugBoundingVolume = tile._debugBoundingVolume.destroy();\n  }\n\n  if (tileset.debugShowContentBoundingVolume && hasContentBoundingVolume) {\n    if (!defined(tile._debugContentBoundingVolume)) {\n      tile._debugContentBoundingVolume =\n        tile._contentBoundingVolume.createDebugVolume(Color.BLUE);\n    }\n    tile._debugContentBoundingVolume.update(frameState);\n  } else if (\n    !tileset.debugShowContentBoundingVolume &&\n    defined(tile._debugContentBoundingVolume)\n  ) {\n    tile._debugContentBoundingVolume =\n      tile._debugContentBoundingVolume.destroy();\n  }\n\n  if (\n    tileset.debugShowViewerRequestVolume &&\n    defined(tile._viewerRequestVolume)\n  ) {\n    if (!defined(tile._debugViewerRequestVolume)) {\n      tile._debugViewerRequestVolume =\n        tile._viewerRequestVolume.createDebugVolume(Color.YELLOW);\n    }\n    tile._debugViewerRequestVolume.update(frameState);\n  } else if (\n    !tileset.debugShowViewerRequestVolume &&\n    defined(tile._debugViewerRequestVolume)\n  ) {\n    tile._debugViewerRequestVolume = tile._debugViewerRequestVolume.destroy();\n  }\n\n  const debugColorizeTilesOn =\n    (tileset.debugColorizeTiles && !tile._debugColorizeTiles) ||\n    defined(tileset._heatmap.tilePropertyName);\n  const debugColorizeTilesOff =\n    !tileset.debugColorizeTiles && tile._debugColorizeTiles;\n\n  if (debugColorizeTilesOn) {\n    tileset._heatmap.colorize(tile, frameState); // Skipped if tileset._heatmap.tilePropertyName is undefined\n    tile._debugColorizeTiles = true;\n    tile.color = tile._debugColor;\n  } else if (debugColorizeTilesOff) {\n    tile._debugColorizeTiles = false;\n    tile.color = Color.WHITE;\n  }\n\n  if (tile._colorDirty) {\n    tile._colorDirty = false;\n    tile._content.applyDebugSettings(true, tile._color);\n  }\n\n  if (debugColorizeTilesOff) {\n    tileset.makeStyleDirty(); // Re-apply style now that colorize is switched off\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nfunction updateContent(tile, tileset, frameState) {\n  const expiredContent = tile._expiredContent;\n\n  // expired content is not supported for multiple contents\n  if (!tile.hasMultipleContents && defined(expiredContent)) {\n    if (!tile.contentReady) {\n      // Render the expired content while the content loads\n      try {\n        expiredContent.update(tileset, frameState);\n      } catch (error) {\n        // Eat error for expired content\n      }\n      return;\n    }\n\n    // New content is ready, destroy expired content\n    tile._expiredContent.destroy();\n    tile._expiredContent = undefined;\n  }\n\n  if (!defined(tile.content)) {\n    // Implicit placeholder tile\n    return;\n  }\n\n  try {\n    tile.content.update(tileset, frameState);\n  } catch (error) {\n    tile._contentState = Cesium3DTileContentState.FAILED;\n    throw error;\n  }\n}\n\n/**\n * Compute and compare ClippingPlanes state:\n *  - enabled-ness - are clipping planes enabled? is this tile clipped?\n *  - clipping plane count\n *  - clipping function (union v. intersection)\n\n * @private\n * @param {Cesium3DTile} tile\n * @param {Cesium3DTileset} tileset\n */\nfunction updateClippingPlanes(tile, tileset) {\n  const clippingPlanes = tileset.clippingPlanes;\n  let currentClippingPlanesState = 0;\n  if (defined(clippingPlanes) && tile._isClipped && clippingPlanes.enabled) {\n    currentClippingPlanesState = clippingPlanes.clippingPlanesState;\n  }\n  // If clippingPlaneState for tile changed, mark clippingPlanesDirty so content can update\n  if (currentClippingPlanesState !== tile._clippingPlanesState) {\n    tile._clippingPlanesState = currentClippingPlanesState;\n    tile.clippingPlanesDirty = true;\n  }\n}\n\n/**\n * Compute and compare ClippingPolygons state:\n *  - enabled-ness - are clipping polygons enabled? is this tile clipped?\n *  - clipping polygon count & position count\n *  - clipping function (inverse)\n\n * @private\n * @param {Cesium3DTile} tile\n * @param {Cesium3DTileset} tileset\n */\nfunction updateClippingPolygons(tile, tileset) {\n  const clippingPolygons = tileset.clippingPolygons;\n  let currentClippingPolygonsState = 0;\n  if (\n    defined(clippingPolygons) &&\n    tile._isClippedByPolygon &&\n    clippingPolygons.enabled\n  ) {\n    currentClippingPolygonsState = clippingPolygons.clippingPolygonsState;\n  }\n  // If clippingPolygonState for tile changed, mark clippingPolygonsDirty so content can update\n  if (currentClippingPolygonsState !== tile._clippingPolygonsState) {\n    tile._clippingPolygonsState = currentClippingPolygonsState;\n    tile.clippingPolygonsDirty = true;\n  }\n}\n\n/**\n * Get the draw commands needed to render this tile.\n *\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n * @param {object} passOptions\n */\nCesium3DTile.prototype.update = function (tileset, frameState, passOptions) {\n  const { commandList } = frameState;\n  const commandStart = commandList.length;\n\n  updateClippingPlanes(this, tileset);\n  updateClippingPolygons(this, tileset);\n  applyDebugSettings(this, tileset, frameState, passOptions);\n  updateContent(this, tileset, frameState);\n\n  const commandEnd = commandList.length;\n  this._commandsLength = commandEnd - commandStart;\n\n  for (let i = commandStart; i < commandEnd; ++i) {\n    const command = commandList[i];\n    const translucent = command.pass === Pass.TRANSLUCENT;\n    command.depthForTranslucentClassification = translucent;\n  }\n\n  this.clippingPlanesDirty = false; // reset after content update\n  this.clippingPolygonsDirty = false;\n};\n\nconst scratchCommandList = [];\n\n/**\n * Processes the tile's content, e.g., create WebGL resources, to move from the PROCESSING to READY state.\n *\n * @param {Cesium3DTileset} tileset The tileset containing this tile.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nCesium3DTile.prototype.process = function (tileset, frameState) {\n  if (!this.contentExpired && !this.contentReady && this._content.ready) {\n    updateExpireDate(this);\n\n    // Refresh style for expired content\n    this._selectedFrame = 0;\n    this.lastStyleTime = 0.0;\n\n    JulianDate.now(this._loadTimestamp);\n    this._contentState = Cesium3DTileContentState.READY;\n\n    if (!this.hasTilesetContent && !this.hasImplicitContent) {\n      // RESEARCH_IDEA: ability to unload tiles (without content) for an\n      // external tileset when all the tiles are unloaded.\n      tileset._statistics.incrementLoadCounts(this.content);\n      ++tileset._statistics.numberOfTilesWithContentReady;\n      ++tileset._statistics.numberOfLoadedTilesTotal;\n\n      // Add to the tile cache. Previously expired tiles are already in the cache and won't get re-added.\n      tileset._cache.add(this);\n    }\n  }\n\n  const savedCommandList = frameState.commandList;\n  frameState.commandList = scratchCommandList;\n\n  try {\n    this._content.update(tileset, frameState);\n  } catch (error) {\n    this._contentState = Cesium3DTileContentState.FAILED;\n    throw error;\n  }\n\n  scratchCommandList.length = 0;\n  frameState.commandList = savedCommandList;\n};\n\n/**\n * @private\n * @param {number} normalizedValue\n * @param {number} numberOfDigits\n * @param {number} leftShift\n * @returns {number}\n */\nfunction isolateDigits(normalizedValue, numberOfDigits, leftShift) {\n  const scaled = normalizedValue * Math.pow(10, numberOfDigits);\n  const integer = parseInt(scaled);\n  return integer * Math.pow(10, leftShift);\n}\n\n/**\n * @private\n * @param {number} value\n * @param {number} minimum\n * @param {number} maximum\n * @returns {number}\n */\nfunction priorityNormalizeAndClamp(value, minimum, maximum) {\n  // Subtract epsilon since we only want decimal digits present in the output.\n  return Math.max(\n    CesiumMath.normalize(value, minimum, maximum) - CesiumMath.EPSILON7,\n    0.0,\n  );\n}\n\n/**\n * Sets the priority of the tile based on distance and depth\n * @private\n */\nCesium3DTile.prototype.updatePriority = function () {\n  const tileset = this.tileset;\n  const preferLeaves = tileset.preferLeaves;\n  const minimumPriority = tileset._minimumPriority;\n  const maximumPriority = tileset._maximumPriority;\n\n  // Combine priority systems together by mapping them into a base 10 number where each priority controls a specific set of digits in the number.\n  // For number priorities, map them to a 0.xxxxx number then left shift it up into a set number of digits before the decimal point. Chop of the fractional part then left shift again into the position it needs to go.\n  // For blending number priorities, normalize them to 0-1 and interpolate to get a combined 0-1 number, then proceed as normal.\n  // Booleans can just be 0 or 10^leftshift.\n  // Think of digits as penalties since smaller numbers are higher priority. If a tile has some large quantity or has a flag raised it's (usually) penalized for it, expressed as a higher number for the digit.\n  // Priority number format: preloadFlightDigits(1) | foveatedDeferDigits(1) | foveatedDigits(4) | preloadProgressiveResolutionDigits(1) | preferredSortingDigits(4) . depthDigits(the decimal digits)\n  // Certain flags like preferLeaves will flip / turn off certain digits to get desired load order.\n\n  // Setup leftShifts, digit counts, and scales (for booleans)\n  const digitsForANumber = 4;\n  const digitsForABoolean = 1;\n\n  const preferredSortingLeftShift = 0;\n  const preferredSortingDigitsCount = digitsForANumber;\n\n  const foveatedLeftShift =\n    preferredSortingLeftShift + preferredSortingDigitsCount;\n  const foveatedDigitsCount = digitsForANumber;\n\n  const preloadProgressiveResolutionLeftShift =\n    foveatedLeftShift + foveatedDigitsCount;\n  const preloadProgressiveResolutionDigitsCount = digitsForABoolean;\n  const preloadProgressiveResolutionScale = Math.pow(\n    10,\n    preloadProgressiveResolutionLeftShift,\n  );\n\n  const foveatedDeferLeftShift =\n    preloadProgressiveResolutionLeftShift +\n    preloadProgressiveResolutionDigitsCount;\n  const foveatedDeferDigitsCount = digitsForABoolean;\n  const foveatedDeferScale = Math.pow(10, foveatedDeferLeftShift);\n\n  const preloadFlightLeftShift =\n    foveatedDeferLeftShift + foveatedDeferDigitsCount;\n  const preloadFlightScale = Math.pow(10, preloadFlightLeftShift);\n\n  // Compute the digits for each priority\n  let depthDigits = priorityNormalizeAndClamp(\n    this._depth,\n    minimumPriority.depth,\n    maximumPriority.depth,\n  );\n  depthDigits = preferLeaves ? 1.0 - depthDigits : depthDigits;\n\n  // Map 0-1 then convert to digit. Include a distance sort when doing non-skipLOD and replacement refinement, helps things like non-skipLOD photogrammetry\n  const useDistance =\n    !tileset.isSkippingLevelOfDetail &&\n    this.refine === Cesium3DTileRefine.REPLACE;\n  const normalizedPreferredSorting = useDistance\n    ? priorityNormalizeAndClamp(\n        this._priorityHolder._distanceToCamera,\n        minimumPriority.distance,\n        maximumPriority.distance,\n      )\n    : priorityNormalizeAndClamp(\n        this._priorityReverseScreenSpaceError,\n        minimumPriority.reverseScreenSpaceError,\n        maximumPriority.reverseScreenSpaceError,\n      );\n  const preferredSortingDigits = isolateDigits(\n    normalizedPreferredSorting,\n    preferredSortingDigitsCount,\n    preferredSortingLeftShift,\n  );\n\n  const preloadProgressiveResolutionDigits = this._priorityProgressiveResolution\n    ? 0\n    : preloadProgressiveResolutionScale;\n\n  const normalizedFoveatedFactor = priorityNormalizeAndClamp(\n    this._priorityHolder._foveatedFactor,\n    minimumPriority.foveatedFactor,\n    maximumPriority.foveatedFactor,\n  );\n  const foveatedDigits = isolateDigits(\n    normalizedFoveatedFactor,\n    foveatedDigitsCount,\n    foveatedLeftShift,\n  );\n\n  const foveatedDeferDigits = this.priorityDeferred ? foveatedDeferScale : 0;\n\n  const preloadFlightDigits =\n    tileset._pass === Cesium3DTilePass.PRELOAD_FLIGHT ? 0 : preloadFlightScale;\n\n  // Get the final base 10 number\n  this._priority =\n    depthDigits +\n    preferredSortingDigits +\n    preloadProgressiveResolutionDigits +\n    foveatedDigits +\n    foveatedDeferDigits +\n    preloadFlightDigits;\n};\n\n/**\n * @private\n */\nCesium3DTile.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * @private\n */\nCesium3DTile.prototype.destroy = function () {\n  // For the interval between new content being requested and downloaded, expiredContent === content, so don't destroy twice\n  this._content = this._content && this._content.destroy();\n  this._expiredContent =\n    this._expiredContent &&\n    !this._expiredContent.isDestroyed() &&\n    this._expiredContent.destroy();\n  this._debugBoundingVolume =\n    this._debugBoundingVolume && this._debugBoundingVolume.destroy();\n  this._debugContentBoundingVolume =\n    this._debugContentBoundingVolume &&\n    this._debugContentBoundingVolume.destroy();\n  this._debugViewerRequestVolume =\n    this._debugViewerRequestVolume && this._debugViewerRequestVolume.destroy();\n  return destroyObject(this);\n};\n\nexport default Cesium3DTile;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport BatchTexture from \"./BatchTexture.js\";\nimport BatchTableHierarchy from \"./BatchTableHierarchy.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileColorBlendMode from \"./Cesium3DTileColorBlendMode.js\";\nimport CullFace from \"./CullFace.js\";\nimport getBinaryAccessor from \"./getBinaryAccessor.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\nimport addAllToArray from \"../Core/addAllToArray.js\";\n\nconst DEFAULT_COLOR_VALUE = BatchTexture.DEFAULT_COLOR_VALUE;\nconst DEFAULT_SHOW_VALUE = BatchTexture.DEFAULT_SHOW_VALUE;\n\n/**\n * @private\n * @constructor\n */\nfunction Cesium3DTileBatchTable(\n  content,\n  featuresLength,\n  batchTableJson,\n  batchTableBinary,\n  colorChangedCallback,\n) {\n  /**\n   * @readonly\n   */\n  this.featuresLength = featuresLength;\n\n  let extensions;\n  if (defined(batchTableJson)) {\n    extensions = batchTableJson.extensions;\n  }\n  this._extensions = extensions ?? {};\n\n  const properties = initializeProperties(batchTableJson);\n  this._properties = properties;\n\n  this._batchTableHierarchy = initializeHierarchy(\n    this,\n    batchTableJson,\n    batchTableBinary,\n  );\n\n  const binaryProperties = getBinaryProperties(\n    featuresLength,\n    properties,\n    batchTableBinary,\n  );\n  this._binaryPropertiesByteLength =\n    countBinaryPropertyMemory(binaryProperties);\n  this._batchTableBinaryProperties = binaryProperties;\n\n  this._content = content;\n\n  this._batchTexture = new BatchTexture({\n    featuresLength: featuresLength,\n    colorChangedCallback: colorChangedCallback,\n    owner: content,\n    statistics: content.tileset.statistics,\n  });\n}\n\n// This can be overridden for testing purposes\nCesium3DTileBatchTable._deprecationWarning = deprecationWarning;\n\nObject.defineProperties(Cesium3DTileBatchTable.prototype, {\n  /**\n   * Size of the batch table, including the batch table hierarchy's binary\n   * buffers and any binary properties. JSON data is not counted.\n   *\n   * @memberof Cesium3DTileBatchTable.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  batchTableByteLength: {\n    get: function () {\n      let totalByteLength = this._binaryPropertiesByteLength;\n\n      if (defined(this._batchTableHierarchy)) {\n        totalByteLength += this._batchTableHierarchy.byteLength;\n      }\n\n      totalByteLength += this._batchTexture.byteLength;\n\n      return totalByteLength;\n    },\n  },\n});\n\nfunction initializeProperties(jsonHeader) {\n  const properties = {};\n\n  if (!defined(jsonHeader)) {\n    return properties;\n  }\n\n  for (const propertyName in jsonHeader) {\n    if (\n      jsonHeader.hasOwnProperty(propertyName) &&\n      propertyName !== \"HIERARCHY\" && // Deprecated HIERARCHY property\n      propertyName !== \"extensions\" &&\n      propertyName !== \"extras\"\n    ) {\n      properties[propertyName] = clone(jsonHeader[propertyName], true);\n    }\n  }\n\n  return properties;\n}\n\nfunction initializeHierarchy(batchTable, jsonHeader, binaryBody) {\n  if (!defined(jsonHeader)) {\n    return;\n  }\n\n  let hierarchy = batchTable._extensions[\"3DTILES_batch_table_hierarchy\"];\n\n  const legacyHierarchy = jsonHeader.HIERARCHY;\n  if (defined(legacyHierarchy)) {\n    Cesium3DTileBatchTable._deprecationWarning(\n      \"batchTableHierarchyExtension\",\n      \"The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead.\",\n    );\n    batchTable._extensions[\"3DTILES_batch_table_hierarchy\"] = legacyHierarchy;\n    hierarchy = legacyHierarchy;\n  }\n\n  if (!defined(hierarchy)) {\n    return;\n  }\n\n  return new BatchTableHierarchy({\n    extension: hierarchy,\n    binaryBody: binaryBody,\n  });\n}\n\nfunction getBinaryProperties(featuresLength, properties, binaryBody) {\n  let binaryProperties;\n  for (const name in properties) {\n    if (properties.hasOwnProperty(name)) {\n      const property = properties[name];\n      const byteOffset = property.byteOffset;\n      if (defined(byteOffset)) {\n        // This is a binary property\n        const componentType = property.componentType;\n        const type = property.type;\n        if (!defined(componentType)) {\n          throw new RuntimeError(\"componentType is required.\");\n        }\n        if (!defined(type)) {\n          throw new RuntimeError(\"type is required.\");\n        }\n        if (!defined(binaryBody)) {\n          throw new RuntimeError(\n            `Property ${name} requires a batch table binary.`,\n          );\n        }\n\n        const binaryAccessor = getBinaryAccessor(property);\n        const componentCount = binaryAccessor.componentsPerAttribute;\n        const classType = binaryAccessor.classType;\n        const typedArray = binaryAccessor.createArrayBufferView(\n          binaryBody.buffer,\n          binaryBody.byteOffset + byteOffset,\n          featuresLength,\n        );\n\n        if (!defined(binaryProperties)) {\n          binaryProperties = {};\n        }\n\n        // Store any information needed to access the binary data, including the typed array,\n        // componentCount (e.g. a VEC4 would be 4), and the type used to pack and unpack (e.g. Cartesian4).\n        binaryProperties[name] = {\n          typedArray: typedArray,\n          componentCount: componentCount,\n          type: classType,\n        };\n      }\n    }\n  }\n  return binaryProperties;\n}\n\nfunction countBinaryPropertyMemory(binaryProperties) {\n  if (!defined(binaryProperties)) {\n    return 0;\n  }\n\n  let byteLength = 0;\n  for (const name in binaryProperties) {\n    if (binaryProperties.hasOwnProperty(name)) {\n      byteLength += binaryProperties[name].typedArray.byteLength;\n    }\n  }\n  return byteLength;\n}\n\nCesium3DTileBatchTable.getBinaryProperties = function (\n  featuresLength,\n  batchTableJson,\n  batchTableBinary,\n) {\n  return getBinaryProperties(featuresLength, batchTableJson, batchTableBinary);\n};\n\nCesium3DTileBatchTable.prototype.setShow = function (batchId, show) {\n  this._batchTexture.setShow(batchId, show);\n};\n\nCesium3DTileBatchTable.prototype.setAllShow = function (show) {\n  this._batchTexture.setAllShow(show);\n};\n\nCesium3DTileBatchTable.prototype.getShow = function (batchId) {\n  return this._batchTexture.getShow(batchId);\n};\n\nCesium3DTileBatchTable.prototype.setColor = function (batchId, color) {\n  this._batchTexture.setColor(batchId, color);\n};\n\nCesium3DTileBatchTable.prototype.setAllColor = function (color) {\n  this._batchTexture.setAllColor(color);\n};\n\nCesium3DTileBatchTable.prototype.getColor = function (batchId, result) {\n  return this._batchTexture.getColor(batchId, result);\n};\n\nCesium3DTileBatchTable.prototype.getPickColor = function (batchId) {\n  return this._batchTexture.getPickColor(batchId);\n};\n\nconst scratchColor = new Color();\n\nCesium3DTileBatchTable.prototype.applyStyle = function (style) {\n  if (!defined(style)) {\n    this.setAllColor(DEFAULT_COLOR_VALUE);\n    this.setAllShow(DEFAULT_SHOW_VALUE);\n    return;\n  }\n\n  const content = this._content;\n  const length = this.featuresLength;\n  for (let i = 0; i < length; ++i) {\n    const feature = content.getFeature(i);\n    const color = defined(style.color)\n      ? (style.color.evaluateColor(feature, scratchColor) ??\n        DEFAULT_COLOR_VALUE)\n      : DEFAULT_COLOR_VALUE;\n    const show = defined(style.show)\n      ? (style.show.evaluate(feature) ?? DEFAULT_SHOW_VALUE)\n      : DEFAULT_SHOW_VALUE;\n    this.setColor(i, color);\n    this.setShow(i, show);\n  }\n};\n\nfunction getBinaryProperty(binaryProperty, index) {\n  const typedArray = binaryProperty.typedArray;\n  const componentCount = binaryProperty.componentCount;\n  if (componentCount === 1) {\n    return typedArray[index];\n  }\n  return binaryProperty.type.unpack(typedArray, index * componentCount);\n}\n\nfunction setBinaryProperty(binaryProperty, index, value) {\n  const typedArray = binaryProperty.typedArray;\n  const componentCount = binaryProperty.componentCount;\n  if (componentCount === 1) {\n    typedArray[index] = value;\n  } else {\n    binaryProperty.type.pack(value, typedArray, index * componentCount);\n  }\n}\n\nfunction checkBatchId(batchId, featuresLength) {\n  if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n    throw new DeveloperError(\n      `batchId is required and must be between zero and featuresLength - 1 (${featuresLength}` -\n        +\").\",\n    );\n  }\n}\n\nCesium3DTileBatchTable.prototype.isClass = function (batchId, className) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this.featuresLength);\n  Check.typeOf.string(\"className\", className);\n  //>>includeEnd('debug');\n\n  const hierarchy = this._batchTableHierarchy;\n  if (!defined(hierarchy)) {\n    return false;\n  }\n\n  return hierarchy.isClass(batchId, className);\n};\n\nCesium3DTileBatchTable.prototype.isExactClass = function (batchId, className) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"className\", className);\n  //>>includeEnd('debug');\n\n  return this.getExactClassName(batchId) === className;\n};\n\nCesium3DTileBatchTable.prototype.getExactClassName = function (batchId) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this.featuresLength);\n  //>>includeEnd('debug');\n\n  const hierarchy = this._batchTableHierarchy;\n  if (!defined(hierarchy)) {\n    return undefined;\n  }\n\n  return hierarchy.getClassName(batchId);\n};\n\nCesium3DTileBatchTable.prototype.hasProperty = function (batchId, name) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this.featuresLength);\n  Check.typeOf.string(\"name\", name);\n  //>>includeEnd('debug');\n\n  return (\n    defined(this._properties[name]) ||\n    (defined(this._batchTableHierarchy) &&\n      this._batchTableHierarchy.hasProperty(batchId, name))\n  );\n};\n\n/**\n * @private\n */\nCesium3DTileBatchTable.prototype.hasPropertyBySemantic = function () {\n  // Cesium 3D Tiles 1.0 formats do not have semantics\n  return false;\n};\n\nCesium3DTileBatchTable.prototype.getPropertyIds = function (batchId, results) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this.featuresLength);\n  //>>includeEnd('debug');\n\n  results = defined(results) ? results : [];\n  results.length = 0;\n\n  const scratchPropertyIds = Object.keys(this._properties);\n  addAllToArray(results, scratchPropertyIds);\n\n  if (defined(this._batchTableHierarchy)) {\n    const propertyIds = this._batchTableHierarchy.getPropertyIds(\n      batchId,\n      scratchPropertyIds,\n    );\n    addAllToArray(results, propertyIds);\n  }\n\n  return results;\n};\n\n/**\n * @private\n */\nCesium3DTileBatchTable.prototype.getPropertyBySemantic = function (\n  batchId,\n  name,\n) {\n  // Cesium 3D Tiles 1.0 formats do not have semantics\n  return undefined;\n};\n\nCesium3DTileBatchTable.prototype.getProperty = function (batchId, name) {\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, this.featuresLength);\n  Check.typeOf.string(\"name\", name);\n  //>>includeEnd('debug');\n\n  if (defined(this._batchTableBinaryProperties)) {\n    const binaryProperty = this._batchTableBinaryProperties[name];\n    if (defined(binaryProperty)) {\n      return getBinaryProperty(binaryProperty, batchId);\n    }\n  }\n\n  const propertyValues = this._properties[name];\n  if (defined(propertyValues)) {\n    return clone(propertyValues[batchId], true);\n  }\n\n  if (defined(this._batchTableHierarchy)) {\n    const hierarchyProperty = this._batchTableHierarchy.getProperty(\n      batchId,\n      name,\n    );\n    if (defined(hierarchyProperty)) {\n      return hierarchyProperty;\n    }\n  }\n\n  return undefined;\n};\n\nCesium3DTileBatchTable.prototype.setProperty = function (batchId, name, value) {\n  const featuresLength = this.featuresLength;\n  //>>includeStart('debug', pragmas.debug);\n  checkBatchId(batchId, featuresLength);\n  Check.typeOf.string(\"name\", name);\n  //>>includeEnd('debug');\n\n  if (defined(this._batchTableBinaryProperties)) {\n    const binaryProperty = this._batchTableBinaryProperties[name];\n    if (defined(binaryProperty)) {\n      setBinaryProperty(binaryProperty, batchId, value);\n      return;\n    }\n  }\n\n  if (defined(this._batchTableHierarchy)) {\n    if (this._batchTableHierarchy.setProperty(batchId, name, value)) {\n      return;\n    }\n  }\n\n  let propertyValues = this._properties[name];\n  if (!defined(propertyValues)) {\n    // Property does not exist. Create it.\n    this._properties[name] = new Array(featuresLength);\n    propertyValues = this._properties[name];\n  }\n\n  propertyValues[batchId] = clone(value, true);\n};\n\nfunction getGlslComputeSt(batchTable) {\n  // GLSL batchId is zero-based: [0, featuresLength - 1]\n  if (batchTable._batchTexture.textureDimensions.y === 1) {\n    return (\n      \"uniform vec4 tile_textureStep; \\n\" +\n      \"vec2 computeSt(float batchId) \\n\" +\n      \"{ \\n\" +\n      \"    float stepX = tile_textureStep.x; \\n\" +\n      \"    float centerX = tile_textureStep.y; \\n\" +\n      \"    return vec2(centerX + (batchId * stepX), 0.5); \\n\" +\n      \"} \\n\"\n    );\n  }\n\n  return (\n    \"uniform vec4 tile_textureStep; \\n\" +\n    \"uniform vec2 tile_textureDimensions; \\n\" +\n    \"vec2 computeSt(float batchId) \\n\" +\n    \"{ \\n\" +\n    \"    float stepX = tile_textureStep.x; \\n\" +\n    \"    float centerX = tile_textureStep.y; \\n\" +\n    \"    float stepY = tile_textureStep.z; \\n\" +\n    \"    float centerY = tile_textureStep.w; \\n\" +\n    \"    float xId = mod(batchId, tile_textureDimensions.x); \\n\" +\n    \"    float yId = floor(batchId / tile_textureDimensions.x); \\n\" +\n    \"    return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); \\n\" +\n    \"} \\n\"\n  );\n}\n\nCesium3DTileBatchTable.prototype.getVertexShaderCallback = function (\n  handleTranslucent,\n  batchIdAttributeName,\n  diffuseAttributeOrUniformName,\n) {\n  if (this.featuresLength === 0) {\n    return;\n  }\n\n  const that = this;\n  return function (source) {\n    // If the color blend mode is HIGHLIGHT, the highlight color will always be applied in the fragment shader.\n    // No need to apply the highlight color in the vertex shader as well.\n    const renamedSource = modifyDiffuse(\n      source,\n      diffuseAttributeOrUniformName,\n      false,\n    );\n    let newMain;\n\n    if (ContextLimits.maximumVertexTextureImageUnits > 0) {\n      // When VTF is supported, perform per-feature show/hide in the vertex shader\n      newMain = \"\";\n      if (handleTranslucent) {\n        newMain += \"uniform bool tile_translucentCommand; \\n\";\n      }\n      newMain +=\n        `${\n          \"uniform sampler2D tile_batchTexture; \\n\" +\n          \"out vec4 tile_featureColor; \\n\" +\n          \"out vec2 tile_featureSt; \\n\" +\n          \"void main() \\n\" +\n          \"{ \\n\" +\n          \"    vec2 st = computeSt(\"\n        }${batchIdAttributeName}); \\n` +\n        `    vec4 featureProperties = texture(tile_batchTexture, st); \\n` +\n        `    tile_color(featureProperties); \\n` +\n        `    float show = ceil(featureProperties.a); \\n` + // 0 - false, non-zero - true\n        `    gl_Position *= show; \\n`; // Per-feature show/hide\n      if (handleTranslucent) {\n        newMain +=\n          \"    bool isStyleTranslucent = (featureProperties.a != 1.0); \\n\" +\n          \"    if (czm_pass == czm_passTranslucent) \\n\" +\n          \"    { \\n\" +\n          \"        if (!isStyleTranslucent && !tile_translucentCommand) \\n\" + // Do not render opaque features in the translucent pass\n          \"        { \\n\" +\n          \"            gl_Position *= 0.0; \\n\" +\n          \"        } \\n\" +\n          \"    } \\n\" +\n          \"    else \\n\" +\n          \"    { \\n\" +\n          \"        if (isStyleTranslucent) \\n\" + // Do not render translucent features in the opaque pass\n          \"        { \\n\" +\n          \"            gl_Position *= 0.0; \\n\" +\n          \"        } \\n\" +\n          \"    } \\n\";\n      }\n      newMain +=\n        \"    tile_featureColor = featureProperties; \\n\" +\n        \"    tile_featureSt = st; \\n\" +\n        \"}\";\n    } else {\n      // When VTF is not supported, color blend mode MIX will look incorrect due to the feature's color not being available in the vertex shader\n      newMain =\n        `${\n          \"out vec2 tile_featureSt; \\n\" +\n          \"void main() \\n\" +\n          \"{ \\n\" +\n          \"    tile_color(vec4(1.0)); \\n\" +\n          \"    tile_featureSt = computeSt(\"\n        }${batchIdAttributeName}); \\n` + `}`;\n    }\n\n    return `${renamedSource}\\n${getGlslComputeSt(that)}${newMain}`;\n  };\n};\n\nfunction getDefaultShader(source, applyHighlight) {\n  source = ShaderSource.replaceMain(source, \"tile_main\");\n\n  if (!applyHighlight) {\n    return (\n      `${source}void tile_color(vec4 tile_featureColor) \\n` +\n      `{ \\n` +\n      `    tile_main(); \\n` +\n      `} \\n`\n    );\n  }\n\n  // The color blend mode is intended for the RGB channels so alpha is always just multiplied.\n  // out_FragColor is multiplied by the tile color only when tile_colorBlend is 0.0 (highlight)\n  return (\n    `${source}uniform float tile_colorBlend; \\n` +\n    `void tile_color(vec4 tile_featureColor) \\n` +\n    `{ \\n` +\n    `    tile_main(); \\n` +\n    `    tile_featureColor = czm_gammaCorrect(tile_featureColor); \\n` +\n    `    out_FragColor.a *= tile_featureColor.a; \\n` +\n    `    float highlight = ceil(tile_colorBlend); \\n` +\n    `    out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); \\n` +\n    `} \\n`\n  );\n}\n\nfunction replaceDiffuseTextureCalls(source, diffuseAttributeOrUniformName) {\n  const functionCall = `texture(${diffuseAttributeOrUniformName}`;\n\n  let fromIndex = 0;\n  let startIndex = source.indexOf(functionCall, fromIndex);\n  let endIndex;\n\n  while (startIndex > -1) {\n    let nestedLevel = 0;\n    for (let i = startIndex; i < source.length; ++i) {\n      const character = source.charAt(i);\n      if (character === \"(\") {\n        ++nestedLevel;\n      } else if (character === \")\") {\n        --nestedLevel;\n        if (nestedLevel === 0) {\n          endIndex = i + 1;\n          break;\n        }\n      }\n    }\n    const extractedFunction = source.slice(startIndex, endIndex);\n    const replacedFunction = `tile_diffuse_final(${extractedFunction}, tile_diffuse)`;\n\n    source =\n      source.slice(0, startIndex) + replacedFunction + source.slice(endIndex);\n    fromIndex = startIndex + replacedFunction.length;\n    startIndex = source.indexOf(functionCall, fromIndex);\n  }\n\n  return source;\n}\n\nfunction modifyDiffuse(source, diffuseAttributeOrUniformName, applyHighlight) {\n  // If the glTF does not specify the _3DTILESDIFFUSE semantic, return the default shader.\n  // Otherwise if _3DTILESDIFFUSE is defined prefer the shader below that can switch the color mode at runtime.\n  if (!defined(diffuseAttributeOrUniformName)) {\n    return getDefaultShader(source, applyHighlight);\n  }\n\n  // Find the diffuse uniform. Examples matches:\n  //   uniform vec3 u_diffuseColor;\n  //   uniform sampler2D diffuseTexture;\n  let regex = new RegExp(\n    `(uniform|attribute|in)\\\\s+(vec[34]|sampler2D)\\\\s+${diffuseAttributeOrUniformName};`,\n  );\n  const uniformMatch = source.match(regex);\n\n  if (!defined(uniformMatch)) {\n    // Could not find uniform declaration of type vec3, vec4, or sampler2D\n    return getDefaultShader(source, applyHighlight);\n  }\n\n  const declaration = uniformMatch[0];\n  const type = uniformMatch[2];\n\n  source = ShaderSource.replaceMain(source, \"tile_main\");\n  source = source.replace(declaration, \"\"); // Remove uniform declaration for now so the replace below doesn't affect it\n\n  // If the tile color is white, use the source color. This implies the feature has not been styled.\n  // Highlight: tile_colorBlend is 0.0 and the source color is used\n  // Replace: tile_colorBlend is 1.0 and the tile color is used\n  // Mix: tile_colorBlend is between 0.0 and 1.0, causing the source color and tile color to mix\n  const finalDiffuseFunction =\n    \"bool isWhite(vec3 color) \\n\" +\n    \"{ \\n\" +\n    \"    return all(greaterThan(color, vec3(1.0 - czm_epsilon3))); \\n\" +\n    \"} \\n\" +\n    \"vec4 tile_diffuse_final(vec4 sourceDiffuse, vec4 tileDiffuse) \\n\" +\n    \"{ \\n\" +\n    \"    vec4 blendDiffuse = mix(sourceDiffuse, tileDiffuse, tile_colorBlend); \\n\" +\n    \"    vec4 diffuse = isWhite(tileDiffuse.rgb) ? sourceDiffuse : blendDiffuse; \\n\" +\n    \"    return vec4(diffuse.rgb, sourceDiffuse.a); \\n\" +\n    \"} \\n\";\n\n  // The color blend mode is intended for the RGB channels so alpha is always just multiplied.\n  // out_FragColor is multiplied by the tile color only when tile_colorBlend is 0.0 (highlight)\n  const highlight =\n    \"    tile_featureColor = czm_gammaCorrect(tile_featureColor); \\n\" +\n    \"    out_FragColor.a *= tile_featureColor.a; \\n\" +\n    \"    float highlight = ceil(tile_colorBlend); \\n\" +\n    \"    out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); \\n\";\n\n  let setColor;\n  if (type === \"vec3\" || type === \"vec4\") {\n    const sourceDiffuse =\n      type === \"vec3\"\n        ? `vec4(${diffuseAttributeOrUniformName}, 1.0)`\n        : diffuseAttributeOrUniformName;\n    const replaceDiffuse =\n      type === \"vec3\" ? \"tile_diffuse.xyz\" : \"tile_diffuse\";\n    regex = new RegExp(diffuseAttributeOrUniformName, \"g\");\n    source = source.replace(regex, replaceDiffuse);\n    setColor =\n      `    vec4 source = ${sourceDiffuse}; \\n` +\n      `    tile_diffuse = tile_diffuse_final(source, tile_featureColor); \\n` +\n      `    tile_main(); \\n`;\n  } else if (type === \"sampler2D\") {\n    // Handles any number of nested parentheses\n    // E.g. texture(u_diffuse, uv)\n    // E.g. texture(u_diffuse, computeUV(index))\n    source = replaceDiffuseTextureCalls(source, diffuseAttributeOrUniformName);\n    setColor =\n      \"    tile_diffuse = tile_featureColor; \\n\" + \"    tile_main(); \\n\";\n  }\n\n  source =\n    `${\n      \"uniform float tile_colorBlend; \\n\" + \"vec4 tile_diffuse = vec4(1.0); \\n\"\n    }${finalDiffuseFunction}${declaration}\\n${source}\\n` +\n    `void tile_color(vec4 tile_featureColor) \\n` +\n    `{ \\n${setColor}`;\n\n  if (applyHighlight) {\n    source += highlight;\n  }\n\n  source += \"} \\n\";\n  return source;\n}\n\nCesium3DTileBatchTable.prototype.getFragmentShaderCallback = function (\n  handleTranslucent,\n  diffuseAttributeOrUniformName,\n  hasPremultipliedAlpha,\n) {\n  if (this.featuresLength === 0) {\n    return;\n  }\n  return function (source) {\n    source = modifyDiffuse(source, diffuseAttributeOrUniformName, true);\n    if (ContextLimits.maximumVertexTextureImageUnits > 0) {\n      // When VTF is supported, per-feature show/hide already happened in the fragment shader\n      source +=\n        \"uniform sampler2D tile_pickTexture; \\n\" +\n        \"in vec2 tile_featureSt; \\n\" +\n        \"in vec4 tile_featureColor; \\n\" +\n        \"void main() \\n\" +\n        \"{ \\n\" +\n        \"    tile_color(tile_featureColor); \\n\";\n\n      if (hasPremultipliedAlpha) {\n        source += \"    out_FragColor.rgb *= out_FragColor.a; \\n\";\n      }\n\n      source += \"}\";\n    } else {\n      if (handleTranslucent) {\n        source += \"uniform bool tile_translucentCommand; \\n\";\n      }\n      source +=\n        \"uniform sampler2D tile_pickTexture; \\n\" +\n        \"uniform sampler2D tile_batchTexture; \\n\" +\n        \"in vec2 tile_featureSt; \\n\" +\n        \"void main() \\n\" +\n        \"{ \\n\" +\n        \"    vec4 featureProperties = texture(tile_batchTexture, tile_featureSt); \\n\" +\n        \"    if (featureProperties.a == 0.0) { \\n\" + // show: alpha == 0 - false, non-zeo - true\n        \"        discard; \\n\" +\n        \"    } \\n\";\n\n      if (handleTranslucent) {\n        source +=\n          \"    bool isStyleTranslucent = (featureProperties.a != 1.0); \\n\" +\n          \"    if (czm_pass == czm_passTranslucent) \\n\" +\n          \"    { \\n\" +\n          \"        if (!isStyleTranslucent && !tile_translucentCommand) \\n\" + // Do not render opaque features in the translucent pass\n          \"        { \\n\" +\n          \"            discard; \\n\" +\n          \"        } \\n\" +\n          \"    } \\n\" +\n          \"    else \\n\" +\n          \"    { \\n\" +\n          \"        if (isStyleTranslucent) \\n\" + // Do not render translucent features in the opaque pass\n          \"        { \\n\" +\n          \"            discard; \\n\" +\n          \"        } \\n\" +\n          \"    } \\n\";\n      }\n\n      source += \"    tile_color(featureProperties); \\n\";\n\n      if (hasPremultipliedAlpha) {\n        source += \"    out_FragColor.rgb *= out_FragColor.a; \\n\";\n      }\n\n      source += \"} \\n\";\n    }\n    return source;\n  };\n};\n\nfunction getColorBlend(batchTable) {\n  const tileset = batchTable._content.tileset;\n  const colorBlendMode = tileset.colorBlendMode;\n  const colorBlendAmount = tileset.colorBlendAmount;\n  if (colorBlendMode === Cesium3DTileColorBlendMode.HIGHLIGHT) {\n    return 0.0;\n  }\n  if (colorBlendMode === Cesium3DTileColorBlendMode.REPLACE) {\n    return 1.0;\n  }\n  if (colorBlendMode === Cesium3DTileColorBlendMode.MIX) {\n    // The value 0.0 is reserved for highlight, so clamp to just above 0.0.\n    return CesiumMath.clamp(colorBlendAmount, CesiumMath.EPSILON4, 1.0);\n  }\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(`Invalid color blend mode \"${colorBlendMode}\".`);\n  //>>includeEnd('debug');\n}\n\nCesium3DTileBatchTable.prototype.getUniformMapCallback = function () {\n  if (this.featuresLength === 0) {\n    return;\n  }\n\n  const that = this;\n  return function (uniformMap) {\n    const batchUniformMap = {\n      tile_batchTexture: function () {\n        // PERFORMANCE_IDEA: we could also use a custom shader that avoids the texture read.\n        return (\n          that._batchTexture.batchTexture ?? that._batchTexture.defaultTexture\n        );\n      },\n      tile_textureDimensions: function () {\n        return that._batchTexture.textureDimensions;\n      },\n      tile_textureStep: function () {\n        return that._batchTexture.textureStep;\n      },\n      tile_colorBlend: function () {\n        return getColorBlend(that);\n      },\n      tile_pickTexture: function () {\n        return that._batchTexture.pickTexture;\n      },\n    };\n\n    return combine(uniformMap, batchUniformMap);\n  };\n};\n\nCesium3DTileBatchTable.prototype.getPickId = function () {\n  return \"texture(tile_pickTexture, tile_featureSt)\";\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nconst StyleCommandsNeeded = {\n  ALL_OPAQUE: 0,\n  ALL_TRANSLUCENT: 1,\n  OPAQUE_AND_TRANSLUCENT: 2,\n};\n\nCesium3DTileBatchTable.prototype.addDerivedCommands = function (\n  frameState,\n  commandStart,\n) {\n  const commandList = frameState.commandList;\n  const commandEnd = commandList.length;\n  const tile = this._content._tile;\n  const finalResolution = tile._finalResolution;\n  const tileset = tile.tileset;\n  const bivariateVisibilityTest =\n    tileset.isSkippingLevelOfDetail &&\n    tileset.hasMixedContent &&\n    frameState.context.stencilBuffer;\n  const styleCommandsNeeded = getStyleCommandsNeeded(this);\n\n  for (let i = commandStart; i < commandEnd; ++i) {\n    const command = commandList[i];\n    if (command.pass === Pass.COMPUTE) {\n      continue;\n    }\n\n    let derivedCommands = command.derivedCommands.tileset;\n    if (!defined(derivedCommands) || command.dirty) {\n      derivedCommands = {};\n      command.derivedCommands.tileset = derivedCommands;\n      derivedCommands.originalCommand = deriveCommand(command);\n      command.dirty = false;\n    }\n    const originalCommand = derivedCommands.originalCommand;\n\n    if (\n      styleCommandsNeeded !== StyleCommandsNeeded.ALL_OPAQUE &&\n      command.pass !== Pass.TRANSLUCENT\n    ) {\n      if (!defined(derivedCommands.translucent)) {\n        derivedCommands.translucent = deriveTranslucentCommand(originalCommand);\n      }\n    }\n\n    if (\n      styleCommandsNeeded !== StyleCommandsNeeded.ALL_TRANSLUCENT &&\n      command.pass !== Pass.TRANSLUCENT\n    ) {\n      if (!defined(derivedCommands.opaque)) {\n        derivedCommands.opaque = deriveOpaqueCommand(originalCommand);\n      }\n\n      if (bivariateVisibilityTest) {\n        if (!finalResolution) {\n          if (!defined(derivedCommands.zback)) {\n            derivedCommands.zback = deriveZBackfaceCommand(\n              frameState.context,\n              originalCommand,\n            );\n          }\n          tileset._backfaceCommands.push(derivedCommands.zback);\n        }\n        if (\n          !defined(derivedCommands.stencil) ||\n          tile._selectionDepth !==\n            getLastSelectionDepth(derivedCommands.stencil)\n        ) {\n          if (command.renderState.depthMask) {\n            derivedCommands.stencil = deriveStencilCommand(\n              originalCommand,\n              tile._selectionDepth,\n            );\n          } else {\n            // Ignore if tile does not write depth\n            derivedCommands.stencil = derivedCommands.opaque;\n          }\n        }\n      }\n    }\n\n    const opaqueCommand = bivariateVisibilityTest\n      ? derivedCommands.stencil\n      : derivedCommands.opaque;\n    const translucentCommand = derivedCommands.translucent;\n\n    // If the command was originally opaque:\n    //    * If the styling applied to the tile is all opaque, use the opaque command\n    //      (with one additional uniform needed for the shader).\n    //    * If the styling is all translucent, use new (cached) derived commands (front\n    //      and back faces) with a translucent render state.\n    //    * If the styling causes both opaque and translucent features in this tile,\n    //      then use both sets of commands.\n    if (command.pass !== Pass.TRANSLUCENT) {\n      if (styleCommandsNeeded === StyleCommandsNeeded.ALL_OPAQUE) {\n        commandList[i] = opaqueCommand;\n      }\n      if (styleCommandsNeeded === StyleCommandsNeeded.ALL_TRANSLUCENT) {\n        commandList[i] = translucentCommand;\n      }\n      if (styleCommandsNeeded === StyleCommandsNeeded.OPAQUE_AND_TRANSLUCENT) {\n        // PERFORMANCE_IDEA: if the tile has multiple commands, we do not know what features are in what\n        // commands so this case may be overkill.\n        commandList[i] = opaqueCommand;\n        commandList.push(translucentCommand);\n      }\n    } else {\n      // Command was originally translucent so no need to derive new commands;\n      // as of now, a style can't change an originally translucent feature to\n      // opaque since the style's alpha is modulated, not a replacement.  When\n      // this changes, we need to derive new opaque commands here.\n      commandList[i] = originalCommand;\n    }\n  }\n};\n\nfunction getStyleCommandsNeeded(batchTable) {\n  const translucentFeaturesLength =\n    batchTable._batchTexture.translucentFeaturesLength;\n\n  if (translucentFeaturesLength === 0) {\n    return StyleCommandsNeeded.ALL_OPAQUE;\n  } else if (translucentFeaturesLength === batchTable.featuresLength) {\n    return StyleCommandsNeeded.ALL_TRANSLUCENT;\n  }\n\n  return StyleCommandsNeeded.OPAQUE_AND_TRANSLUCENT;\n}\n\nfunction deriveCommand(command) {\n  const derivedCommand = DrawCommand.shallowClone(command);\n\n  // Add a uniform to indicate if the original command was translucent so\n  // the shader knows not to cull vertices that were originally transparent\n  // even though their style is opaque.\n  const translucentCommand = derivedCommand.pass === Pass.TRANSLUCENT;\n\n  derivedCommand.uniformMap = defined(derivedCommand.uniformMap)\n    ? derivedCommand.uniformMap\n    : {};\n  derivedCommand.uniformMap.tile_translucentCommand = function () {\n    return translucentCommand;\n  };\n\n  return derivedCommand;\n}\n\nfunction deriveTranslucentCommand(command) {\n  const derivedCommand = DrawCommand.shallowClone(command);\n  derivedCommand.pass = Pass.TRANSLUCENT;\n  derivedCommand.renderState = getTranslucentRenderState(command.renderState);\n  return derivedCommand;\n}\n\nfunction deriveOpaqueCommand(command) {\n  const derivedCommand = DrawCommand.shallowClone(command);\n  derivedCommand.renderState = getOpaqueRenderState(command.renderState);\n  return derivedCommand;\n}\n\nfunction getLogDepthPolygonOffsetFragmentShaderProgram(context, shaderProgram) {\n  let shader = context.shaderCache.getDerivedShaderProgram(\n    shaderProgram,\n    \"zBackfaceLogDepth\",\n  );\n  if (!defined(shader)) {\n    const fs = shaderProgram.fragmentShaderSource.clone();\n    fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n    fs.defines.push(\"POLYGON_OFFSET\");\n\n    shader = context.shaderCache.createDerivedShaderProgram(\n      shaderProgram,\n      \"zBackfaceLogDepth\",\n      {\n        vertexShaderSource: shaderProgram.vertexShaderSource,\n        fragmentShaderSource: fs,\n        attributeLocations: shaderProgram._attributeLocations,\n      },\n    );\n  }\n\n  return shader;\n}\n\nfunction deriveZBackfaceCommand(context, command) {\n  // Write just backface depth of unresolved tiles so resolved stenciled tiles do not appear in front\n  const derivedCommand = DrawCommand.shallowClone(command);\n  const rs = clone(derivedCommand.renderState, true);\n  rs.cull.enabled = true;\n  rs.cull.face = CullFace.FRONT;\n  // Back faces do not need to write color.\n  rs.colorMask = {\n    red: false,\n    green: false,\n    blue: false,\n    alpha: false,\n  };\n  // Push back face depth away from the camera so it is less likely that back faces and front faces of the same tile\n  // intersect and overlap. This helps avoid flickering for very thin double-sided walls.\n  rs.polygonOffset = {\n    enabled: true,\n    factor: 5.0,\n    units: 5.0,\n  };\n  // Set the 3D Tiles bit\n  rs.stencilTest = StencilConstants.setCesium3DTileBit();\n  rs.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n\n  derivedCommand.renderState = RenderState.fromCache(rs);\n  derivedCommand.castShadows = false;\n  derivedCommand.receiveShadows = false;\n  derivedCommand.uniformMap = clone(command.uniformMap);\n\n  const polygonOffset = new Cartesian2(5.0, 5.0);\n  derivedCommand.uniformMap.u_polygonOffset = function () {\n    return polygonOffset;\n  };\n\n  // Make the log depth depth fragment write account for the polygon offset, too.\n  // Otherwise, the back face commands will cause the higher resolution\n  // tiles to disappear.\n  derivedCommand.shaderProgram = getLogDepthPolygonOffsetFragmentShaderProgram(\n    context,\n    command.shaderProgram,\n  );\n  return derivedCommand;\n}\n\nfunction deriveStencilCommand(command, reference) {\n  // Tiles only draw if their selection depth is >= the tile drawn already. They write their\n  // selection depth to the stencil buffer to prevent ancestor tiles from drawing on top\n  const derivedCommand = DrawCommand.shallowClone(command);\n  const rs = clone(derivedCommand.renderState, true);\n  // Stencil test is masked to the most significant 3 bits so the reference is shifted. Writes 0 for the terrain bit\n  rs.stencilTest.enabled = true;\n  rs.stencilTest.mask = StencilConstants.SKIP_LOD_MASK;\n  rs.stencilTest.reference =\n    StencilConstants.CESIUM_3D_TILE_MASK |\n    (reference << StencilConstants.SKIP_LOD_BIT_SHIFT);\n  rs.stencilTest.frontFunction = StencilFunction.GREATER_OR_EQUAL;\n  rs.stencilTest.frontOperation.zPass = StencilOperation.REPLACE;\n  rs.stencilTest.backFunction = StencilFunction.GREATER_OR_EQUAL;\n  rs.stencilTest.backOperation.zPass = StencilOperation.REPLACE;\n  rs.stencilMask =\n    StencilConstants.CESIUM_3D_TILE_MASK | StencilConstants.SKIP_LOD_MASK;\n  derivedCommand.renderState = RenderState.fromCache(rs);\n  return derivedCommand;\n}\n\nfunction getLastSelectionDepth(stencilCommand) {\n  // Isolate the selection depth from the stencil reference.\n  const reference = stencilCommand.renderState.stencilTest.reference;\n  return (\n    (reference & StencilConstants.SKIP_LOD_MASK) >>>\n    StencilConstants.SKIP_LOD_BIT_SHIFT\n  );\n}\n\nfunction getTranslucentRenderState(renderState) {\n  const rs = clone(renderState, true);\n  rs.cull.enabled = false;\n  rs.depthTest.enabled = true;\n  rs.depthMask = false;\n  rs.blending = BlendingState.ALPHA_BLEND;\n  rs.stencilTest = StencilConstants.setCesium3DTileBit();\n  rs.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n\n  return RenderState.fromCache(rs);\n}\n\nfunction getOpaqueRenderState(renderState) {\n  const rs = clone(renderState, true);\n  rs.stencilTest = StencilConstants.setCesium3DTileBit();\n  rs.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n\n  return RenderState.fromCache(rs);\n}\n\nCesium3DTileBatchTable.prototype.update = function (tileset, frameState) {\n  this._batchTexture.update(tileset, frameState);\n};\n\nCesium3DTileBatchTable.prototype.isDestroyed = function () {\n  return false;\n};\n\nCesium3DTileBatchTable.prototype.destroy = function () {\n  this._batchTexture = this._batchTexture && this._batchTexture.destroy();\n  return destroyObject(this);\n};\nexport default Cesium3DTileBatchTable;\n","/**\n * Defines how per-feature colors set from the Cesium API or declarative styling blend with the source colors from\n * the original feature, e.g. glTF material or per-point color in the tile.\n * <p>\n * When <code>REPLACE</code> or <code>MIX</code> are used and the source color is a glTF material, the technique must assign the\n * <code>_3DTILESDIFFUSE</code> semantic to the diffuse color parameter. Otherwise only <code>HIGHLIGHT</code> is supported.\n * </p>\n * <p>\n * A feature whose color evaluates to white (1.0, 1.0, 1.0) is always rendered without color blending, regardless of the\n * tileset's color blend mode.\n * </p>\n * <pre><code>\n * \"techniques\": {\n *   \"technique0\": {\n *     \"parameters\": {\n *       \"diffuse\": {\n *         \"semantic\": \"_3DTILESDIFFUSE\",\n *         \"type\": 35666\n *       }\n *     }\n *   }\n * }\n * </code></pre>\n *\n * @enum {number}\n */\nconst Cesium3DTileColorBlendMode = {\n  /**\n   * Multiplies the source color by the feature color.\n   *\n   * @type {number}\n   * @constant\n   */\n  HIGHLIGHT: 0,\n\n  /**\n   * Replaces the source color with the feature color.\n   *\n   * @type {number}\n   * @constant\n   */\n  REPLACE: 1,\n\n  /**\n   * Blends the source color and feature color together.\n   *\n   * @type {number}\n   * @constant\n   */\n  MIX: 2,\n};\nexport default Object.freeze(Cesium3DTileColorBlendMode);\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * The content of a tile in a {@link Cesium3DTileset}.\n * <p>\n * Derived classes of this interface provide access to individual features in the tile.\n * Access derived objects through {@link Cesium3DTile#content}.\n * </p>\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n *\n * @alias Cesium3DTileContent\n * @constructor\n */\nfunction Cesium3DTileContent() {\n  /**\n   * Gets or sets if any feature's property changed.  Used to\n   * optimized applying a style when a feature's property changed.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  this.featurePropertiesDirty = false;\n}\n\nObject.defineProperties(Cesium3DTileContent.prototype, {\n  /**\n   * Gets the number of features in the tile.\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  featuresLength: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the number of points in the tile.\n   * <p>\n   * Only applicable for tiles with Point Cloud content. This is different than {@link Cesium3DTileContent#featuresLength} which\n   * equals the number of groups of points as distinguished by the <code>BATCH_ID</code> feature table semantic.\n   * </p>\n   *\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/PointCloud#batched-points}\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  pointsLength: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the number of triangles in the tile.\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  trianglesLength: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the tile's geometry memory in bytes.\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  geometryByteLength: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the tile's texture memory in bytes.\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  texturesByteLength: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the amount of memory used by the batch table textures and any binary\n   * metadata properties not accounted for in geometryByteLength or\n   * texturesByteLength\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  batchTableByteLength: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the array of {@link Cesium3DTileContent} objects for contents that contain other contents, such as composite tiles. The inner contents may in turn have inner contents, such as a composite tile that contains a composite tile.\n   *\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Composite|Composite specification}\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {Array}\n   * @readonly\n   */\n  innerContents: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the tileset for this tile.\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {Cesium3DTileset}\n   * @readonly\n   */\n  tileset: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the tile containing this content.\n   *\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {Cesium3DTile}\n   * @readonly\n   */\n  tile: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the url of the tile's content.\n   * @memberof Cesium3DTileContent.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the batch table for this content.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {Cesium3DTileBatchTable}\n   * @readonly\n   *\n   * @private\n   */\n  batchTable: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the metadata for this content, whether it is available explicitly or via\n   * implicit tiling. If there is no metadata, this property should be undefined.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {ImplicitMetadataView|undefined}\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  metadata: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n    set: function (value) {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n\n  /**\n   * Gets the group for this content if the content has metadata (3D Tiles 1.1) or\n   * if it uses the <code>3DTILES_metadata</code> extension. If neither are present,\n   * this property should be undefined.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {Cesium3DTileContentGroup|undefined}\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  group: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n    set: function (value) {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n});\n\n/**\n * Returns whether the feature has this property.\n *\n * @param {number} batchId The batchId for the feature.\n * @param {string} name The case-sensitive name of the property.\n * @returns {boolean} <code>true</code> if the feature has this property; otherwise, <code>false</code>.\n */\nCesium3DTileContent.prototype.hasProperty = function (batchId, name) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns the {@link Cesium3DTileFeature} object for the feature with the\n * given <code>batchId</code>.  This object is used to get and modify the\n * feature's properties.\n * <p>\n * Features in a tile are ordered by <code>batchId</code>, an index used to retrieve their metadata from the batch table.\n * </p>\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/BatchTable}.\n *\n * @param {number} batchId The batchId for the feature.\n * @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.\n *\n * @exception {DeveloperError} batchId must be between zero and {@link Cesium3DTileContent#featuresLength} - 1.\n */\nCesium3DTileContent.prototype.getFeature = function (batchId) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n     * Called when {@link Cesium3DTileset#debugColorizeTiles} changes.\n     * <p>\n     * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n     * not part of the public Cesium API.\n     * </p>\n     *\n     * @param {boolean} enabled Whether to enable or disable debug settings.\n     * @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.\n\n     * @private\n     */\nCesium3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Apply a style to the content\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @param {Cesium3DTileStyle} style The style.\n *\n * @private\n */\nCesium3DTileContent.prototype.applyStyle = function (style) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Called by the tile during tileset traversal to get the draw commands needed to render this content.\n * When the tile's content is in the PROCESSING state, this creates WebGL resources to ultimately\n * move to the READY state.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @param {Cesium3DTileset} tileset The tileset containing this tile.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nCesium3DTileContent.prototype.update = function (tileset, frameState) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Find an intersection between a ray and the tile content surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nCesium3DTileContent.prototype.pick = function (ray, frameState, result) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Cesium3DTileContent#destroy\n *\n * @private\n */\nCesium3DTileContent.prototype.isDestroyed = function () {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * content = content && content.destroy();\n *\n * @see Cesium3DTileContent#isDestroyed\n *\n * @private\n */\nCesium3DTileContent.prototype.destroy = function () {\n  DeveloperError.throwInstantiationError();\n};\nexport default Cesium3DTileContent;\n","import Composite3DTileContent from \"./Composite3DTileContent.js\";\nimport Geometry3DTileContent from \"./Geometry3DTileContent.js\";\nimport Implicit3DTileContent from \"./Implicit3DTileContent.js\";\nimport Model3DTileContent from \"./Model/Model3DTileContent.js\";\nimport Tileset3DTileContent from \"./Tileset3DTileContent.js\";\nimport Vector3DTileContent from \"./Vector3DTileContent.js\";\nimport GaussianSplat3DTileContent from \"./GaussianSplat3DTileContent.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * Maps a tile's magic field in its header to a new content object for the tile's payload.\n *\n * @private\n */\nconst Cesium3DTileContentFactory = {\n  b3dm: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    return Model3DTileContent.fromB3dm(\n      tileset,\n      tile,\n      resource,\n      arrayBuffer,\n      byteOffset,\n    );\n  },\n  pnts: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    return Model3DTileContent.fromPnts(\n      tileset,\n      tile,\n      resource,\n      arrayBuffer,\n      byteOffset,\n    );\n  },\n  i3dm: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    return Model3DTileContent.fromI3dm(\n      tileset,\n      tile,\n      resource,\n      arrayBuffer,\n      byteOffset,\n    );\n  },\n  cmpt: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    // Send in the factory in order to avoid a cyclical dependency\n    return Composite3DTileContent.fromTileType(\n      tileset,\n      tile,\n      resource,\n      arrayBuffer,\n      byteOffset,\n      Cesium3DTileContentFactory,\n    );\n  },\n  externalTileset: function (tileset, tile, resource, json) {\n    return Tileset3DTileContent.fromJson(tileset, tile, resource, json);\n  },\n  geom: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    return new Geometry3DTileContent(\n      tileset,\n      tile,\n      resource,\n      arrayBuffer,\n      byteOffset,\n    );\n  },\n  vctr: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    return new Vector3DTileContent(\n      tileset,\n      tile,\n      resource,\n      arrayBuffer,\n      byteOffset,\n    );\n  },\n  subt: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    return Implicit3DTileContent.fromSubtreeJson(\n      tileset,\n      tile,\n      resource,\n      undefined,\n      arrayBuffer,\n      byteOffset,\n    );\n  },\n  subtreeJson: function (tileset, tile, resource, json) {\n    return Implicit3DTileContent.fromSubtreeJson(tileset, tile, resource, json);\n  },\n  glb: function (tileset, tile, resource, arrayBuffer, byteOffset) {\n    const arrayBufferByteLength = arrayBuffer.byteLength;\n    if (arrayBufferByteLength < 12) {\n      throw new RuntimeError(\"Invalid glb content\");\n    }\n    const dataView = new DataView(arrayBuffer, byteOffset);\n    const byteLength = dataView.getUint32(8, true);\n    const glb = new Uint8Array(arrayBuffer, byteOffset, byteLength);\n\n    if (\n      GaussianSplat3DTileContent.tilesetRequiresGaussianSplattingExt(tileset)\n    ) {\n      return GaussianSplat3DTileContent.fromGltf(tileset, tile, resource, glb);\n    }\n\n    return Model3DTileContent.fromGltf(tileset, tile, resource, glb);\n  },\n  gltf: function (tileset, tile, resource, json) {\n    if (\n      GaussianSplat3DTileContent.tilesetRequiresGaussianSplattingExt(tileset)\n    ) {\n      return GaussianSplat3DTileContent.fromGltf(tileset, tile, resource, json);\n    }\n\n    return Model3DTileContent.fromGltf(tileset, tile, resource, json);\n  },\n  geoJson: function (tileset, tile, resource, json) {\n    return Model3DTileContent.fromGeoJson(tileset, tile, resource, json);\n  },\n};\nexport default Cesium3DTileContentFactory;\n","/**\n * @private\n */\nconst Cesium3DTileContentState = {\n  UNLOADED: 0, // Has never been requested\n  LOADING: 1, // Is waiting on a pending request\n  PROCESSING: 2, // Request received.  Contents are being processed for rendering.  Depending on the content, it might make its own requests for external data.\n  READY: 3, // Ready to render.\n  EXPIRED: 4, // Is expired and will be unloaded once new content is loaded.\n  FAILED: 5, // Request failed.\n};\nexport default Object.freeze(Cesium3DTileContentState);\n","/**\n * An enum to indicate the different types of {@link Cesium3DTileContent}.\n * For binary files, the enum value is the magic number of the binary file\n * unless otherwise noted. For JSON files, the enum value is a unique name\n * for internal use.\n *\n * @enum {string}\n * @see Cesium3DTileContent\n *\n * @private\n */\nconst Cesium3DTileContentType = {\n  /**\n   * A Batched 3D Model. This is a binary format with\n   * magic number <code>b3dm</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  BATCHED_3D_MODEL: \"b3dm\",\n  /**\n   * An Instanced 3D Model. This is a binary format with magic number\n   * <code>i3dm</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  INSTANCED_3D_MODEL: \"i3dm\",\n  /**\n   * A Composite model. This is a binary format with magic number\n   * <code>cmpt</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  COMPOSITE: \"cmpt\",\n  /**\n   * A Point Cloud model. This is a binary format with magic number\n   * <code>pnts</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  POINT_CLOUD: \"pnts\",\n  /**\n   * Vector tiles. This is a binary format with magic number\n   * <code>vctr</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  VECTOR: \"vctr\",\n  /**\n   * Geometry tiles. This is a binary format with magic number\n   * <code>geom</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  GEOMETRY: \"geom\",\n  /**\n   * A glTF model in JSON + external BIN form. This is treated\n   * as a JSON format.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  GLTF: \"gltf\",\n  /**\n   * The binary form of a glTF file. Internally, the magic number is\n   * changed from <code>glTF</code> to <code>glb</code> to distinguish it from\n   * the JSON glTF format.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  GLTF_BINARY: \"glb\",\n  /**\n   * For implicit tiling, availability bitstreams are stored in binary subtree files.\n   * The magic number is <code>subt</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  IMPLICIT_SUBTREE: \"subt\",\n  /**\n   * For implicit tiling. Subtrees can also be represented as JSON files.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  IMPLICIT_SUBTREE_JSON: \"subtreeJson\",\n  /**\n   * Contents can reference another tileset.json to use\n   * as an external tileset. This is a JSON-based format.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  EXTERNAL_TILESET: \"externalTileset\",\n  /**\n   * Multiple contents are handled separately from the other content types\n   * due to differences in request scheduling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  MULTIPLE_CONTENT: \"multipleContent\",\n  /**\n   * GeoJSON content for <code>MAXAR_content_geojson</code> extension.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  GEOJSON: \"geoJson\",\n  /**\n   * Binary voxel content for <code>3DTILES_content_voxels</code> extension.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  VOXEL_BINARY: \"voxl\",\n  /**\n   * Binary voxel content for <code>3DTILES_content_voxels</code> extension.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  VOXEL_JSON: \"voxelJson\",\n};\n\n/**\n * Check if a content is one of the supported binary formats. Otherwise,\n * the caller can assume a JSON format.\n * @param {Cesium3DTileContentType} contentType The content type of the content payload.\n * @return {boolean} <code>true</code> if the content type is a binary format, or <code>false</code> if the content type is a JSON format.\n * @private\n */\nCesium3DTileContentType.isBinaryFormat = function (contentType) {\n  switch (contentType) {\n    case Cesium3DTileContentType.BATCHED_3D_MODEL:\n    case Cesium3DTileContentType.INSTANCED_3D_MODEL:\n    case Cesium3DTileContentType.COMPOSITE:\n    case Cesium3DTileContentType.POINT_CLOUD:\n    case Cesium3DTileContentType.VECTOR:\n    case Cesium3DTileContentType.GEOMETRY:\n    case Cesium3DTileContentType.IMPLICIT_SUBTREE:\n    case Cesium3DTileContentType.VOXEL_BINARY:\n    case Cesium3DTileContentType.GLTF_BINARY:\n      return true;\n    default:\n      return false;\n  }\n};\n\nexport default Object.freeze(Cesium3DTileContentType);\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * A feature of a {@link Cesium3DTileset}.\n * <p>\n * Provides access to a feature's properties stored in the tile's batch table, as well\n * as the ability to show/hide a feature and change its highlight color via\n * {@link Cesium3DTileFeature#show} and {@link Cesium3DTileFeature#color}, respectively.\n * </p>\n * <p>\n * Modifications to a <code>Cesium3DTileFeature</code> object have the lifetime of the tile's\n * content.  If the tile's content is unloaded, e.g., due to it going out of view and needing\n * to free space in the cache for visible tiles, listen to the {@link Cesium3DTileset#tileUnload} event to save any\n * modifications. Also listen to the {@link Cesium3DTileset#tileVisible} event to reapply any modifications.\n * </p>\n * <p>\n * Do not construct this directly.  Access it through {@link Cesium3DTileContent#getFeature}\n * or picking using {@link Scene#pick}.\n * </p>\n *\n * @alias Cesium3DTileFeature\n * @constructor\n *\n * @example\n * // On mouse over, display all the properties for a feature in the console log.\n * handler.setInputAction(function(movement) {\n *     const feature = scene.pick(movement.endPosition);\n *     if (feature instanceof Cesium.Cesium3DTileFeature) {\n *         const propertyIds = feature.getPropertyIds();\n *         const length = propertyIds.length;\n *         for (let i = 0; i < length; ++i) {\n *             const propertyId = propertyIds[i];\n *             console.log(`{propertyId}: ${feature.getProperty(propertyId)}`);\n *         }\n *     }\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nfunction Cesium3DTileFeature(content, batchId) {\n  this._content = content;\n  this._batchId = batchId;\n  this._color = undefined; // for calling getColor\n}\n\nObject.defineProperties(Cesium3DTileFeature.prototype, {\n  /**\n   * Gets or sets if the feature will be shown. This is set for all features\n   * when a style's show is evaluated.\n   *\n   * @memberof Cesium3DTileFeature.prototype\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._content.batchTable.getShow(this._batchId);\n    },\n    set: function (value) {\n      this._content.batchTable.setShow(this._batchId, value);\n    },\n  },\n\n  /**\n   * Gets or sets the highlight color multiplied with the feature's color.  When\n   * this is white, the feature's color is not changed. This is set for all features\n   * when a style's color is evaluated.\n   *\n   * @memberof Cesium3DTileFeature.prototype\n   *\n   * @type {Color}\n   *\n   * @default {@link Color.WHITE}\n   */\n  color: {\n    get: function () {\n      if (!defined(this._color)) {\n        this._color = new Color();\n      }\n      return this._content.batchTable.getColor(this._batchId, this._color);\n    },\n    set: function (value) {\n      this._content.batchTable.setColor(this._batchId, value);\n    },\n  },\n\n  /**\n   * Gets a typed array containing the ECEF positions of the polyline.\n   * Returns undefined if {@link Cesium3DTileset#vectorKeepDecodedPositions} is false\n   * or the feature is not a polyline in a vector tile.\n   *\n   * @memberof Cesium3DTileFeature.prototype\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @type {Float64Array}\n   */\n  polylinePositions: {\n    get: function () {\n      if (!defined(this._content.getPolylinePositions)) {\n        return undefined;\n      }\n\n      return this._content.getPolylinePositions(this._batchId);\n    },\n  },\n\n  /**\n   * Gets the content of the tile containing the feature.\n   *\n   * @memberof Cesium3DTileFeature.prototype\n   *\n   * @type {Cesium3DTileContent}\n   *\n   * @readonly\n   * @private\n   */\n  content: {\n    get: function () {\n      return this._content;\n    },\n  },\n\n  /**\n   * Gets the tileset containing the feature.\n   *\n   * @memberof Cesium3DTileFeature.prototype\n   *\n   * @type {Cesium3DTileset}\n   *\n   * @readonly\n   */\n  tileset: {\n    get: function () {\n      return this._content.tileset;\n    },\n  },\n\n  /**\n   * All objects returned by {@link Scene#pick} have a <code>primitive</code> property. This returns\n   * the tileset containing the feature.\n   *\n   * @memberof Cesium3DTileFeature.prototype\n   *\n   * @type {Cesium3DTileset}\n   *\n   * @readonly\n   */\n  primitive: {\n    get: function () {\n      return this._content.tileset;\n    },\n  },\n\n  /**\n   * Get the feature ID associated with this feature. For 3D Tiles 1.0, the\n   * batch ID is returned. For EXT_mesh_features, this is the feature ID from\n   * the selected feature ID set.\n   *\n   * @memberof Cesium3DTileFeature.prototype\n   *\n   * @type {number}\n   *\n   * @readonly\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  featureId: {\n    get: function () {\n      return this._batchId;\n    },\n  },\n\n  /**\n   * @private\n   */\n  pickId: {\n    get: function () {\n      return this._content.batchTable.getPickColor(this._batchId);\n    },\n  },\n});\n\n/**\n * Returns whether the feature contains this property. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {boolean} Whether the feature contains this property.\n */\nCesium3DTileFeature.prototype.hasProperty = function (name) {\n  return this._content.batchTable.hasProperty(this._batchId, name);\n};\n\n/**\n * Returns an array of property IDs for the feature. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The IDs of the feature's properties.\n */\nCesium3DTileFeature.prototype.getPropertyIds = function (results) {\n  return this._content.batchTable.getPropertyIds(this._batchId, results);\n};\n\n/**\n * Returns a copy of the value of the feature's property with the given name. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n *\n * @example\n * // Display all the properties for a feature in the console log.\n * const propertyIds = feature.getPropertyIds();\n * const length = propertyIds.length;\n * for (let i = 0; i < length; ++i) {\n *     const propertyId = propertyIds[i];\n *     console.log(`{propertyId}: ${feature.getProperty(propertyId)}`);\n * }\n */\nCesium3DTileFeature.prototype.getProperty = function (name) {\n  return this._content.batchTable.getProperty(this._batchId, name);\n};\n\n/**\n * Returns a copy of the feature's property with the given name, examining all\n * the metadata from 3D Tiles 1.0 formats, the EXT_structural_metadata and legacy\n * EXT_feature_metadata glTF extensions, and the metadata present either in the\n * tileset JSON (3D Tiles 1.1) or in the 3DTILES_metadata 3D Tiles extension.\n * Metadata is checked against name from most specific to most general and the\n * first match is returned. Metadata is checked in this order:\n *\n * <ol>\n *   <li>Batch table (structural metadata) property by semantic</li>\n *   <li>Batch table (structural metadata) property by property ID</li>\n *   <li>Content metadata property by semantic</li>\n *   <li>Content metadata property by property</li>\n *   <li>Tile metadata property by semantic</li>\n *   <li>Tile metadata property by property ID</li>\n *   <li>Subtree metadata property by semantic</li>\n *   <li>Subtree metadata property by property ID</li>\n *   <li>Group metadata property by semantic</li>\n *   <li>Group metadata property by property ID</li>\n *   <li>Tileset metadata property by semantic</li>\n *   <li>Tileset metadata property by property ID</li>\n *   <li>Otherwise, return undefined</li>\n * </ol>\n * <p>\n * For 3D Tiles Next details, see the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension}\n * for 3D Tiles, as well as the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension}\n * for glTF. For the legacy glTF extension, see {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension}\n * </p>\n *\n * @param {Cesium3DTileContent} content The content for accessing the metadata\n * @param {number} batchId The batch ID (or feature ID) of the feature to get a property for\n * @param {string} name The semantic or property ID of the feature. Semantics are checked before property IDs in each granularity of metadata.\n * @return {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nCesium3DTileFeature.getPropertyInherited = function (content, batchId, name) {\n  const batchTable = content.batchTable;\n  if (defined(batchTable)) {\n    if (batchTable.hasPropertyBySemantic(batchId, name)) {\n      return batchTable.getPropertyBySemantic(batchId, name);\n    }\n\n    if (batchTable.hasProperty(batchId, name)) {\n      return batchTable.getProperty(batchId, name);\n    }\n  }\n\n  const contentMetadata = content.metadata;\n  if (defined(contentMetadata)) {\n    if (contentMetadata.hasPropertyBySemantic(name)) {\n      return contentMetadata.getPropertyBySemantic(name);\n    }\n\n    if (contentMetadata.hasProperty(name)) {\n      return contentMetadata.getProperty(name);\n    }\n  }\n\n  const tile = content.tile;\n  const tileMetadata = tile.metadata;\n  if (defined(tileMetadata)) {\n    if (tileMetadata.hasPropertyBySemantic(name)) {\n      return tileMetadata.getPropertyBySemantic(name);\n    }\n\n    if (tileMetadata.hasProperty(name)) {\n      return tileMetadata.getProperty(name);\n    }\n  }\n\n  let subtreeMetadata;\n  if (defined(tile.implicitSubtree)) {\n    subtreeMetadata = tile.implicitSubtree.metadata;\n  }\n\n  if (defined(subtreeMetadata)) {\n    if (subtreeMetadata.hasPropertyBySemantic(name)) {\n      return subtreeMetadata.getPropertyBySemantic(name);\n    }\n\n    if (subtreeMetadata.hasProperty(name)) {\n      return subtreeMetadata.getProperty(name);\n    }\n  }\n\n  const groupMetadata = defined(content.group)\n    ? content.group.metadata\n    : undefined;\n  if (defined(groupMetadata)) {\n    if (groupMetadata.hasPropertyBySemantic(name)) {\n      return groupMetadata.getPropertyBySemantic(name);\n    }\n\n    if (groupMetadata.hasProperty(name)) {\n      return groupMetadata.getProperty(name);\n    }\n  }\n\n  const tilesetMetadata = content.tileset.metadata;\n  if (defined(tilesetMetadata)) {\n    if (tilesetMetadata.hasPropertyBySemantic(name)) {\n      return tilesetMetadata.getPropertyBySemantic(name);\n    }\n\n    if (tilesetMetadata.hasProperty(name)) {\n      return tilesetMetadata.getProperty(name);\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Returns a copy of the value of the feature's property with the given name.\n * If the feature is contained within a tileset that has metadata (3D Tiles 1.1)\n * or uses the <code>3DTILES_metadata</code> extension, tileset, group and tile\n * metadata is inherited.\n * <p>\n * To resolve name conflicts, this method resolves names from most specific to\n * least specific by metadata granularity in the order: feature, tile, group,\n * tileset. Within each granularity, semantics are resolved first, then other\n * properties.\n * </p>\n * @param {string} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n * @private\n */\nCesium3DTileFeature.prototype.getPropertyInherited = function (name) {\n  return Cesium3DTileFeature.getPropertyInherited(\n    this._content,\n    this._batchId,\n    name,\n  );\n};\n\n/**\n * Sets the value of the feature's property with the given name.\n * <p>\n * If a property with the given name doesn't exist, it is created.\n * </p>\n *\n * @param {string} name The case-sensitive name of the property.\n * @param {*} value The value of the property that will be copied.\n *\n * @exception {DeveloperError} Inherited batch table hierarchy property is read only.\n *\n * @example\n * const height = feature.getProperty('Height'); // e.g., the height of a building\n *\n * @example\n * const name = 'clicked';\n * if (feature.getProperty(name)) {\n *     console.log('already clicked');\n * } else {\n *     feature.setProperty(name, true);\n *     console.log('first click');\n * }\n */\nCesium3DTileFeature.prototype.setProperty = function (name, value) {\n  this._content.batchTable.setProperty(this._batchId, name, value);\n\n  // PERFORMANCE_IDEA: Probably overkill, but maybe only mark the tile dirty if the\n  // property is in one of the style's expressions or - if it can be done quickly -\n  // if the new property value changed the result of an expression.\n  this._content.featurePropertiesDirty = true;\n};\n\n/**\n * Returns whether the feature's class name equals <code>className</code>. Unlike {@link Cesium3DTileFeature#isClass}\n * this function only checks the feature's exact class and not inherited classes.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {string} className The name to check against.\n * @returns {boolean} Whether the feature's class name equals <code>className</code>\n *\n * @private\n */\nCesium3DTileFeature.prototype.isExactClass = function (className) {\n  return this._content.batchTable.isExactClass(this._batchId, className);\n};\n\n/**\n * Returns whether the feature's class or any inherited classes are named <code>className</code>.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {string} className The name to check against.\n * @returns {boolean} Whether the feature's class or inherited classes are named <code>className</code>\n *\n * @private\n */\nCesium3DTileFeature.prototype.isClass = function (className) {\n  return this._content.batchTable.isClass(this._batchId, className);\n};\n\n/**\n * Returns the feature's class name.\n * <p>\n * This function returns <code>undefined</code> if no batch table hierarchy is present.\n * </p>\n *\n * @returns {string} The feature's class name.\n *\n * @private\n */\nCesium3DTileFeature.prototype.getExactClassName = function () {\n  return this._content.batchTable.getExactClassName(this._batchId);\n};\nexport default Cesium3DTileFeature;\n","import ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * @private\n */\nfunction Cesium3DTileFeatureTable(featureTableJson, featureTableBinary) {\n  this.json = featureTableJson;\n  this.buffer = featureTableBinary;\n  this._cachedTypedArrays = {};\n  this.featuresLength = 0;\n}\n\nfunction getTypedArrayFromBinary(\n  featureTable,\n  semantic,\n  componentType,\n  componentLength,\n  count,\n  byteOffset,\n) {\n  const cachedTypedArrays = featureTable._cachedTypedArrays;\n  let typedArray = cachedTypedArrays[semantic];\n  if (!defined(typedArray)) {\n    typedArray = ComponentDatatype.createArrayBufferView(\n      componentType,\n      featureTable.buffer.buffer,\n      featureTable.buffer.byteOffset + byteOffset,\n      count * componentLength,\n    );\n    cachedTypedArrays[semantic] = typedArray;\n  }\n  return typedArray;\n}\n\nfunction getTypedArrayFromArray(featureTable, semantic, componentType, array) {\n  const cachedTypedArrays = featureTable._cachedTypedArrays;\n  let typedArray = cachedTypedArrays[semantic];\n  if (!defined(typedArray)) {\n    typedArray = ComponentDatatype.createTypedArray(componentType, array);\n    cachedTypedArrays[semantic] = typedArray;\n  }\n  return typedArray;\n}\n\nCesium3DTileFeatureTable.prototype.getGlobalProperty = function (\n  semantic,\n  componentType,\n  componentLength,\n) {\n  const jsonValue = this.json[semantic];\n  if (!defined(jsonValue)) {\n    return undefined;\n  }\n\n  if (defined(jsonValue.byteOffset)) {\n    componentType = componentType ?? ComponentDatatype.UNSIGNED_INT;\n    componentLength = componentLength ?? 1;\n    return getTypedArrayFromBinary(\n      this,\n      semantic,\n      componentType,\n      componentLength,\n      1,\n      jsonValue.byteOffset,\n    );\n  }\n\n  return jsonValue;\n};\n\nCesium3DTileFeatureTable.prototype.hasProperty = function (semantic) {\n  return defined(this.json[semantic]);\n};\n\nCesium3DTileFeatureTable.prototype.getPropertyArray = function (\n  semantic,\n  componentType,\n  componentLength,\n) {\n  const jsonValue = this.json[semantic];\n  if (!defined(jsonValue)) {\n    return undefined;\n  }\n\n  if (defined(jsonValue.byteOffset)) {\n    if (defined(jsonValue.componentType)) {\n      componentType = ComponentDatatype.fromName(jsonValue.componentType);\n    }\n    return getTypedArrayFromBinary(\n      this,\n      semantic,\n      componentType,\n      componentLength,\n      this.featuresLength,\n      jsonValue.byteOffset,\n    );\n  }\n\n  return getTypedArrayFromArray(this, semantic, componentType, jsonValue);\n};\n\nCesium3DTileFeatureTable.prototype.getProperty = function (\n  semantic,\n  componentType,\n  componentLength,\n  featureId,\n  result,\n) {\n  const jsonValue = this.json[semantic];\n  if (!defined(jsonValue)) {\n    return undefined;\n  }\n\n  const typedArray = this.getPropertyArray(\n    semantic,\n    componentType,\n    componentLength,\n  );\n\n  if (componentLength === 1) {\n    return typedArray[featureId];\n  }\n\n  for (let i = 0; i < componentLength; ++i) {\n    result[i] = typedArray[componentLength * featureId + i];\n  }\n\n  return result;\n};\nexport default Cesium3DTileFeatureTable;\n","/**\n * Hint defining optimization support for a 3D tile\n *\n * @enum {number}\n *\n * @private\n */\nconst Cesium3DTileOptimizationHint = {\n  NOT_COMPUTED: -1,\n  USE_OPTIMIZATION: 1,\n  SKIP_OPTIMIZATION: 0,\n};\nexport default Object.freeze(Cesium3DTileOptimizationHint);\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Cesium3DTileOptimizationHint from \"./Cesium3DTileOptimizationHint.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileOrientedBoundingBox from \"./TileOrientedBoundingBox.js\";\n\n/**\n * Utility functions for computing optimization hints for a {@link Cesium3DTileset}.\n *\n * @namespace Cesium3DTileOptimizations\n *\n * @private\n */\nconst Cesium3DTileOptimizations = {};\n\nconst scratchAxis = new Cartesian3();\n\n/**\n * Evaluates support for the childrenWithinParent optimization. This is used to more tightly cull tilesets if\n * children bounds are fully contained within the parent. Currently, support for the optimization only works for\n * oriented bounding boxes, so both the child and parent tile must be either a {@link TileOrientedBoundingBox} or\n * {@link TileBoundingRegion}. The purpose of this check is to prevent use of a culling optimization when the child\n * bounds exceed those of the parent. If the child bounds are greater, it is more likely that the optimization will\n * waste CPU cycles. Bounding spheres are not supported for the reason that the child bounds can very often be\n * partially outside of the parent bounds.\n *\n * @param {Cesium3DTile} tile The tile to check.\n * @returns {boolean} Whether the childrenWithinParent optimization is supported.\n */\nCesium3DTileOptimizations.checkChildrenWithinParent = function (tile) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"tile\", tile);\n  //>>includeEnd('debug');\n\n  const children = tile.children;\n  const length = children.length;\n\n  // Check if the parent has an oriented bounding box.\n  const boundingVolume = tile.boundingVolume;\n  if (\n    boundingVolume instanceof TileOrientedBoundingBox ||\n    boundingVolume instanceof TileBoundingRegion\n  ) {\n    const orientedBoundingBox = boundingVolume._orientedBoundingBox;\n    tile._optimChildrenWithinParent =\n      Cesium3DTileOptimizationHint.USE_OPTIMIZATION;\n    for (let i = 0; i < length; ++i) {\n      const child = children[i];\n\n      // Check if the child has an oriented bounding box.\n      const childBoundingVolume = child.boundingVolume;\n      if (\n        !(\n          childBoundingVolume instanceof TileOrientedBoundingBox ||\n          childBoundingVolume instanceof TileBoundingRegion\n        )\n      ) {\n        // Do not support if the parent and child both do not have oriented bounding boxes.\n        tile._optimChildrenWithinParent =\n          Cesium3DTileOptimizationHint.SKIP_OPTIMIZATION;\n        break;\n      }\n\n      const childOrientedBoundingBox = childBoundingVolume._orientedBoundingBox;\n\n      // Compute the axis from the parent to the child.\n      const axis = Cartesian3.subtract(\n        childOrientedBoundingBox.center,\n        orientedBoundingBox.center,\n        scratchAxis,\n      );\n      const axisLength = Cartesian3.magnitude(axis);\n      Cartesian3.divideByScalar(axis, axisLength, axis);\n\n      // Project the bounding box of the parent onto the axis. Because the axis is a ray from the parent\n      // to the child, the projection parameterized along the ray will be (+/- proj1).\n      const proj1 =\n        Math.abs(orientedBoundingBox.halfAxes[0] * axis.x) +\n        Math.abs(orientedBoundingBox.halfAxes[1] * axis.y) +\n        Math.abs(orientedBoundingBox.halfAxes[2] * axis.z) +\n        Math.abs(orientedBoundingBox.halfAxes[3] * axis.x) +\n        Math.abs(orientedBoundingBox.halfAxes[4] * axis.y) +\n        Math.abs(orientedBoundingBox.halfAxes[5] * axis.z) +\n        Math.abs(orientedBoundingBox.halfAxes[6] * axis.x) +\n        Math.abs(orientedBoundingBox.halfAxes[7] * axis.y) +\n        Math.abs(orientedBoundingBox.halfAxes[8] * axis.z);\n\n      // Project the bounding box of the child onto the axis. Because the axis is a ray from the parent\n      // to the child, the projection parameterized along the ray will be (+/- proj2) + axis.length.\n      const proj2 =\n        Math.abs(childOrientedBoundingBox.halfAxes[0] * axis.x) +\n        Math.abs(childOrientedBoundingBox.halfAxes[1] * axis.y) +\n        Math.abs(childOrientedBoundingBox.halfAxes[2] * axis.z) +\n        Math.abs(childOrientedBoundingBox.halfAxes[3] * axis.x) +\n        Math.abs(childOrientedBoundingBox.halfAxes[4] * axis.y) +\n        Math.abs(childOrientedBoundingBox.halfAxes[5] * axis.z) +\n        Math.abs(childOrientedBoundingBox.halfAxes[6] * axis.x) +\n        Math.abs(childOrientedBoundingBox.halfAxes[7] * axis.y) +\n        Math.abs(childOrientedBoundingBox.halfAxes[8] * axis.z);\n\n      // If the child extends the parent's bounds, the optimization is not valid and we skip it.\n      if (proj1 <= proj2 + axisLength) {\n        tile._optimChildrenWithinParent =\n          Cesium3DTileOptimizationHint.SKIP_OPTIMIZATION;\n        break;\n      }\n    }\n  }\n\n  return (\n    tile._optimChildrenWithinParent ===\n    Cesium3DTileOptimizationHint.USE_OPTIMIZATION\n  );\n};\nexport default Cesium3DTileOptimizations;\n","/**\n * The pass in which a 3D Tileset is updated.\n *\n * @private\n */\nconst Cesium3DTilePass = {\n  RENDER: 0,\n  PICK: 1,\n  SHADOW: 2,\n  PRELOAD: 3,\n  PRELOAD_FLIGHT: 4,\n  REQUEST_RENDER_MODE_DEFER_CHECK: 5,\n  MOST_DETAILED_PRELOAD: 6,\n  MOST_DETAILED_PICK: 7,\n  NUMBER_OF_PASSES: 8,\n};\n\nconst passOptions = new Array(Cesium3DTilePass.NUMBER_OF_PASSES);\n\npassOptions[Cesium3DTilePass.RENDER] = Object.freeze({\n  pass: Cesium3DTilePass.RENDER,\n  isRender: true,\n  requestTiles: true,\n  ignoreCommands: false,\n});\n\npassOptions[Cesium3DTilePass.PICK] = Object.freeze({\n  pass: Cesium3DTilePass.PICK,\n  isRender: false,\n  requestTiles: false,\n  ignoreCommands: false,\n});\n\npassOptions[Cesium3DTilePass.SHADOW] = Object.freeze({\n  pass: Cesium3DTilePass.SHADOW,\n  isRender: false,\n  requestTiles: true,\n  ignoreCommands: false,\n});\n\npassOptions[Cesium3DTilePass.PRELOAD] = Object.freeze({\n  pass: Cesium3DTilePass.PRELOAD,\n  isRender: false,\n  requestTiles: true,\n  ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.PRELOAD_FLIGHT] = Object.freeze({\n  pass: Cesium3DTilePass.PRELOAD_FLIGHT,\n  isRender: false,\n  requestTiles: true,\n  ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.REQUEST_RENDER_MODE_DEFER_CHECK] = Object.freeze({\n  pass: Cesium3DTilePass.REQUEST_RENDER_MODE_DEFER_CHECK,\n  isRender: false,\n  requestTiles: true,\n  ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.MOST_DETAILED_PRELOAD] = Object.freeze({\n  pass: Cesium3DTilePass.MOST_DETAILED_PRELOAD,\n  isRender: false,\n  requestTiles: true,\n  ignoreCommands: true,\n});\n\npassOptions[Cesium3DTilePass.MOST_DETAILED_PICK] = Object.freeze({\n  pass: Cesium3DTilePass.MOST_DETAILED_PICK,\n  isRender: false,\n  requestTiles: false,\n  ignoreCommands: false,\n});\n\nCesium3DTilePass.getPassOptions = function (pass) {\n  return passOptions[pass];\n};\nexport default Object.freeze(Cesium3DTilePass);\n","import Check from \"../Core/Check.js\";\n\n/**\n * The state for a 3D Tiles update pass.\n *\n * @private\n * @constructor\n */\nfunction Cesium3DTilePassState(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.number(\"options.pass\", options.pass);\n  //>>includeEnd('debug');\n\n  /**\n   * The pass.\n   *\n   * @type {Cesium3DTilePass}\n   */\n  this.pass = options.pass;\n\n  /**\n   * An array of rendering commands to use instead of {@link FrameState.commandList} for the current pass.\n   *\n   * @type {DrawCommand[]}\n   */\n  this.commandList = options.commandList;\n\n  /**\n   * A camera to use instead of {@link FrameState.camera} for the current pass.\n   *\n   * @type {Camera}\n   */\n  this.camera = options.camera;\n\n  /**\n   * A culling volume to use instead of {@link FrameState.cullingVolume} for the current pass.\n   *\n   * @type {CullingVolume}\n   */\n  this.cullingVolume = options.cullingVolume;\n\n  /**\n   * A read-only property that indicates whether the pass is ready, i.e. all tiles needed by the pass are loaded.\n   *\n   * @type {boolean}\n   * @readonly\n   * @default false\n   */\n  this.ready = false;\n}\nexport default Cesium3DTilePassState;\n","import Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport createBillboardPointCallback from \"./createBillboardPointCallback.js\";\n\n/**\n * A point feature of a {@link Cesium3DTileset}.\n * <p>\n * Provides access to a feature's properties stored in the tile's batch table, as well\n * as the ability to show/hide a feature and change its point properties\n * </p>\n * <p>\n * Modifications to a <code>Cesium3DTilePointFeature</code> object have the lifetime of the tile's\n * content.  If the tile's content is unloaded, e.g., due to it going out of view and needing\n * to free space in the cache for visible tiles, listen to the {@link Cesium3DTileset#tileUnload} event to save any\n * modifications. Also listen to the {@link Cesium3DTileset#tileVisible} event to reapply any modifications.\n * </p>\n * <p>\n * Do not construct this directly.  Access it through {@link Cesium3DTileContent#getFeature}\n * or picking using {@link Scene#pick} and {@link Scene#pickPosition}.\n * </p>\n *\n * @alias Cesium3DTilePointFeature\n * @constructor\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * // On mouse over, display all the properties for a feature in the console log.\n * handler.setInputAction(function(movement) {\n *     const feature = scene.pick(movement.endPosition);\n *     if (feature instanceof Cesium.Cesium3DTilePointFeature) {\n *         const propertyIds = feature.getPropertyIds();\n *         const length = propertyIds.length;\n *         for (let i = 0; i < length; ++i) {\n *             const propertyId = propertyIds[i];\n *             console.log(`{propertyId}: ${feature.getProperty(propertyId)}`);\n *         }\n *     }\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nfunction Cesium3DTilePointFeature(\n  content,\n  batchId,\n  billboard,\n  label,\n  polyline,\n) {\n  this._content = content;\n  this._billboard = billboard;\n  this._label = label;\n  this._polyline = polyline;\n\n  this._batchId = batchId;\n  this._billboardImage = undefined;\n  this._billboardColor = undefined;\n  this._billboardOutlineColor = undefined;\n  this._billboardOutlineWidth = undefined;\n  this._billboardSize = undefined;\n  this._pointSize = undefined;\n  this._color = undefined;\n  this._pointSize = undefined;\n  this._pointOutlineColor = undefined;\n  this._pointOutlineWidth = undefined;\n  this._heightOffset = undefined;\n\n  this._pickIds = new Array(3);\n\n  setBillboardImage(this);\n}\n\nconst scratchCartographic = new Cartographic();\n\nObject.defineProperties(Cesium3DTilePointFeature.prototype, {\n  /**\n   * Gets or sets if the feature will be shown. This is set for all features\n   * when a style's show is evaluated.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._label.show;\n    },\n    set: function (value) {\n      this._label.show = value;\n      this._billboard.show = value;\n      this._polyline.show = value;\n    },\n  },\n\n  /**\n   * Gets or sets the color of the point of this feature.\n   * <p>\n   * Only applied when <code>image</code> is <code>undefined</code>.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Color}\n   */\n  color: {\n    get: function () {\n      return this._color;\n    },\n    set: function (value) {\n      this._color = Color.clone(value, this._color);\n      setBillboardImage(this);\n    },\n  },\n\n  /**\n   * Gets or sets the point size of this feature.\n   * <p>\n   * Only applied when <code>image</code> is <code>undefined</code>.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {number}\n   */\n  pointSize: {\n    get: function () {\n      return this._pointSize;\n    },\n    set: function (value) {\n      this._pointSize = value;\n      setBillboardImage(this);\n    },\n  },\n\n  /**\n   * Gets or sets the point outline color of this feature.\n   * <p>\n   * Only applied when <code>image</code> is <code>undefined</code>.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Color}\n   */\n  pointOutlineColor: {\n    get: function () {\n      return this._pointOutlineColor;\n    },\n    set: function (value) {\n      this._pointOutlineColor = Color.clone(value, this._pointOutlineColor);\n      setBillboardImage(this);\n    },\n  },\n\n  /**\n   * Gets or sets the point outline width in pixels of this feature.\n   * <p>\n   * Only applied when <code>image</code> is <code>undefined</code>.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {number}\n   */\n  pointOutlineWidth: {\n    get: function () {\n      return this._pointOutlineWidth;\n    },\n    set: function (value) {\n      this._pointOutlineWidth = value;\n      setBillboardImage(this);\n    },\n  },\n\n  /**\n   * Gets or sets the label color of this feature.\n   * <p>\n   * The color will be applied to the label if <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Color}\n   */\n  labelColor: {\n    get: function () {\n      return this._label.fillColor;\n    },\n    set: function (value) {\n      this._label.fillColor = value;\n      this._polyline.show = this._label.show && value.alpha > 0.0;\n    },\n  },\n\n  /**\n   * Gets or sets the label outline color of this feature.\n   * <p>\n   * The outline color will be applied to the label if <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Color}\n   */\n  labelOutlineColor: {\n    get: function () {\n      return this._label.outlineColor;\n    },\n    set: function (value) {\n      this._label.outlineColor = value;\n    },\n  },\n\n  /**\n   * Gets or sets the outline width in pixels of this feature.\n   * <p>\n   * The outline width will be applied to the point if <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {number}\n   */\n  labelOutlineWidth: {\n    get: function () {\n      return this._label.outlineWidth;\n    },\n    set: function (value) {\n      this._label.outlineWidth = value;\n    },\n  },\n\n  /**\n   * Gets or sets the font of this feature.\n   * <p>\n   * Only applied when the <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {string}\n   */\n  font: {\n    get: function () {\n      return this._label.font;\n    },\n    set: function (value) {\n      this._label.font = value;\n    },\n  },\n\n  /**\n   * Gets or sets the fill and outline style of this feature.\n   * <p>\n   * Only applied when <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {LabelStyle}\n   */\n  labelStyle: {\n    get: function () {\n      return this._label.style;\n    },\n    set: function (value) {\n      this._label.style = value;\n    },\n  },\n\n  /**\n   * Gets or sets the text for this feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {string}\n   */\n  labelText: {\n    get: function () {\n      return this._label.text;\n    },\n    set: function (value) {\n      if (!defined(value)) {\n        value = \"\";\n      }\n      this._label.text = value;\n    },\n  },\n\n  /**\n   * Gets or sets the background color of the text for this feature.\n   * <p>\n   * Only applied when <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Color}\n   */\n  backgroundColor: {\n    get: function () {\n      return this._label.backgroundColor;\n    },\n    set: function (value) {\n      this._label.backgroundColor = value;\n    },\n  },\n\n  /**\n   * Gets or sets the background padding of the text for this feature.\n   * <p>\n   * Only applied when <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Cartesian2}\n   */\n  backgroundPadding: {\n    get: function () {\n      return this._label.backgroundPadding;\n    },\n    set: function (value) {\n      this._label.backgroundPadding = value;\n    },\n  },\n\n  /**\n   * Gets or sets whether to display the background of the text for this feature.\n   * <p>\n   * Only applied when <code>labelText</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {boolean}\n   */\n  backgroundEnabled: {\n    get: function () {\n      return this._label.showBackground;\n    },\n    set: function (value) {\n      this._label.showBackground = value;\n    },\n  },\n\n  /**\n   * Gets or sets the near and far scaling properties for this feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {NearFarScalar}\n   */\n  scaleByDistance: {\n    get: function () {\n      return this._label.scaleByDistance;\n    },\n    set: function (value) {\n      this._label.scaleByDistance = value;\n      this._billboard.scaleByDistance = value;\n    },\n  },\n\n  /**\n   * Gets or sets the near and far translucency properties for this feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {NearFarScalar}\n   */\n  translucencyByDistance: {\n    get: function () {\n      return this._label.translucencyByDistance;\n    },\n    set: function (value) {\n      this._label.translucencyByDistance = value;\n      this._billboard.translucencyByDistance = value;\n    },\n  },\n\n  /**\n   * Gets or sets the condition specifying at what distance from the camera that this feature will be displayed.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {DistanceDisplayCondition}\n   */\n  distanceDisplayCondition: {\n    get: function () {\n      return this._label.distanceDisplayCondition;\n    },\n    set: function (value) {\n      this._label.distanceDisplayCondition = value;\n      this._polyline.distanceDisplayCondition = value;\n      this._billboard.distanceDisplayCondition = value;\n    },\n  },\n\n  /**\n   * Gets or sets the height offset in meters of this feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {number}\n   */\n  heightOffset: {\n    get: function () {\n      return this._heightOffset;\n    },\n    set: function (value) {\n      const offset = this._heightOffset ?? 0.0;\n\n      const ellipsoid = this._content.tileset.ellipsoid;\n      const cart = ellipsoid.cartesianToCartographic(\n        this._billboard.position,\n        scratchCartographic,\n      );\n      cart.height = cart.height - offset + value;\n      const newPosition = ellipsoid.cartographicToCartesian(cart);\n\n      this._billboard.position = newPosition;\n      this._label.position = this._billboard.position;\n      this._polyline.positions = [this._polyline.positions[0], newPosition];\n\n      this._heightOffset = value;\n    },\n  },\n\n  /**\n   * Gets or sets whether the anchor line is displayed.\n   * <p>\n   * Only applied when <code>heightOffset</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {boolean}\n   */\n  anchorLineEnabled: {\n    get: function () {\n      return this._polyline.show;\n    },\n    set: function (value) {\n      this._polyline.show = value;\n    },\n  },\n\n  /**\n   * Gets or sets the color for the anchor line.\n   * <p>\n   * Only applied when <code>heightOffset</code> is defined.\n   * </p>\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Color}\n   */\n  anchorLineColor: {\n    get: function () {\n      return this._polyline.material.uniforms.color;\n    },\n    set: function (value) {\n      this._polyline.material.uniforms.color = Color.clone(\n        value,\n        this._polyline.material.uniforms.color,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the image of this feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {string}\n   */\n  image: {\n    get: function () {\n      return this._billboardImage;\n    },\n    set: function (value) {\n      const imageChanged = this._billboardImage !== value;\n      this._billboardImage = value;\n      if (imageChanged) {\n        setBillboardImage(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the distance where depth testing will be disabled.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {number}\n   */\n  disableDepthTestDistance: {\n    get: function () {\n      return this._label.disableDepthTestDistance;\n    },\n    set: function (value) {\n      this._label.disableDepthTestDistance = value;\n      this._billboard.disableDepthTestDistance = value;\n    },\n  },\n\n  /**\n   * Gets or sets the horizontal origin of this point, which determines if the point is\n   * to the left, center, or right of its anchor position.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {HorizontalOrigin}\n   */\n  horizontalOrigin: {\n    get: function () {\n      return this._billboard.horizontalOrigin;\n    },\n    set: function (value) {\n      this._billboard.horizontalOrigin = value;\n    },\n  },\n\n  /**\n   * Gets or sets the vertical origin of this point, which determines if the point is\n   * to the bottom, center, or top of its anchor position.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {VerticalOrigin}\n   */\n  verticalOrigin: {\n    get: function () {\n      return this._billboard.verticalOrigin;\n    },\n    set: function (value) {\n      this._billboard.verticalOrigin = value;\n    },\n  },\n\n  /**\n   * Gets or sets the horizontal origin of this point's text, which determines if the point's text is\n   * to the left, center, or right of its anchor position.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {HorizontalOrigin}\n   */\n  labelHorizontalOrigin: {\n    get: function () {\n      return this._label.horizontalOrigin;\n    },\n    set: function (value) {\n      this._label.horizontalOrigin = value;\n    },\n  },\n\n  /**\n   * Get or sets the vertical origin of this point's text, which determines if the point's text is\n   * to the bottom, center, top, or baseline of it's anchor point.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {VerticalOrigin}\n   */\n  labelVerticalOrigin: {\n    get: function () {\n      return this._label.verticalOrigin;\n    },\n    set: function (value) {\n      this._label.verticalOrigin = value;\n    },\n  },\n\n  /**\n   * Gets the content of the tile containing the feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Cesium3DTileContent}\n   *\n   * @readonly\n   * @private\n   */\n  content: {\n    get: function () {\n      return this._content;\n    },\n  },\n\n  /**\n   * Gets the tileset containing the feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Cesium3DTileset}\n   *\n   * @readonly\n   */\n  tileset: {\n    get: function () {\n      return this._content.tileset;\n    },\n  },\n\n  /**\n   * All objects returned by {@link Scene#pick} have a <code>primitive</code> property. This returns\n   * the tileset containing the feature.\n   *\n   * @memberof Cesium3DTilePointFeature.prototype\n   *\n   * @type {Cesium3DTileset}\n   *\n   * @readonly\n   */\n  primitive: {\n    get: function () {\n      return this._content.tileset;\n    },\n  },\n\n  /**\n   * @private\n   */\n  pickIds: {\n    get: function () {\n      const ids = this._pickIds;\n      ids[0] = this._billboard.pickId;\n      ids[1] = this._label.pickId;\n      ids[2] = this._polyline.pickId;\n      return ids;\n    },\n  },\n});\n\nCesium3DTilePointFeature.defaultColor = Color.WHITE;\nCesium3DTilePointFeature.defaultPointOutlineColor = Color.BLACK;\nCesium3DTilePointFeature.defaultPointOutlineWidth = 0.0;\nCesium3DTilePointFeature.defaultPointSize = 8.0;\n\nfunction setBillboardImage(feature) {\n  const b = feature._billboard;\n  if (defined(feature._billboardImage) && feature._billboardImage !== b.image) {\n    b.image = feature._billboardImage;\n    return;\n  }\n\n  if (defined(feature._billboardImage)) {\n    return;\n  }\n\n  const newColor = feature._color ?? Cesium3DTilePointFeature.defaultColor;\n  const newOutlineColor =\n    feature._pointOutlineColor ??\n    Cesium3DTilePointFeature.defaultPointOutlineColor;\n  const newOutlineWidth =\n    feature._pointOutlineWidth ??\n    Cesium3DTilePointFeature.defaultPointOutlineWidth;\n  const newPointSize =\n    feature._pointSize ?? Cesium3DTilePointFeature.defaultPointSize;\n\n  const currentColor = feature._billboardColor;\n  const currentOutlineColor = feature._billboardOutlineColor;\n  const currentOutlineWidth = feature._billboardOutlineWidth;\n  const currentPointSize = feature._billboardSize;\n\n  if (\n    Color.equals(newColor, currentColor) &&\n    Color.equals(newOutlineColor, currentOutlineColor) &&\n    newOutlineWidth === currentOutlineWidth &&\n    newPointSize === currentPointSize\n  ) {\n    return;\n  }\n\n  feature._billboardColor = Color.clone(newColor, feature._billboardColor);\n  feature._billboardOutlineColor = Color.clone(\n    newOutlineColor,\n    feature._billboardOutlineColor,\n  );\n  feature._billboardOutlineWidth = newOutlineWidth;\n  feature._billboardSize = newPointSize;\n\n  const centerAlpha = newColor.alpha;\n  const cssColor = newColor.toCssColorString();\n  const cssOutlineColor = newOutlineColor.toCssColorString();\n  const textureId = JSON.stringify([\n    cssColor,\n    newPointSize,\n    cssOutlineColor,\n    newOutlineWidth,\n  ]);\n\n  b.setImage(\n    textureId,\n    createBillboardPointCallback(\n      centerAlpha,\n      cssColor,\n      cssOutlineColor,\n      newOutlineWidth,\n      newPointSize,\n    ),\n  );\n}\n\n/**\n * Returns whether the feature contains this property. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {boolean} Whether the feature contains this property.\n */\nCesium3DTilePointFeature.prototype.hasProperty = function (name) {\n  return this._content.batchTable.hasProperty(this._batchId, name);\n};\n\n/**\n * Returns an array of property IDs for the feature. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The IDs of the feature's properties.\n */\nCesium3DTilePointFeature.prototype.getPropertyIds = function (results) {\n  return this._content.batchTable.getPropertyIds(this._batchId, results);\n};\n\n/**\n * Returns a copy of the value of the feature's property with the given name. This includes properties from this feature's\n * class and inherited classes when using a batch table hierarchy.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_batch_table_hierarchy}\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n *\n * @example\n * // Display all the properties for a feature in the console log.\n * const propertyIds = feature.getPropertyIds();\n * const length = propertyIds.length;\n * for (let i = 0; i < length; ++i) {\n *     const propertyId = propertyIds[i];\n *     console.log(`{propertyId} : ${feature.getProperty(propertyId)}`);\n * }\n */\nCesium3DTilePointFeature.prototype.getProperty = function (name) {\n  return this._content.batchTable.getProperty(this._batchId, name);\n};\n\n/**\n * Returns a copy of the value of the feature's property with the given name.\n * If the feature is contained within a tileset that has metadata (3D Tiles 1.1)\n * or uses the <code>3DTILES_metadata</code> extension, tileset, group and tile metadata is\n * inherited.\n * <p>\n * To resolve name conflicts, this method resolves names from most specific to\n * least specific by metadata granularity in the order: feature, tile, group,\n * tileset. Within each granularity, semantics are resolved first, then other\n * properties.\n * </p>\n * @param {string} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nCesium3DTilePointFeature.prototype.getPropertyInherited = function (name) {\n  return Cesium3DTileFeature.getPropertyInherited(\n    this._content,\n    this._batchId,\n    name,\n  );\n};\n\n/**\n * Sets the value of the feature's property with the given name.\n * <p>\n * If a property with the given name doesn't exist, it is created.\n * </p>\n *\n * @param {string} name The case-sensitive name of the property.\n * @param {*} value The value of the property that will be copied.\n *\n * @exception {DeveloperError} Inherited batch table hierarchy property is read only.\n *\n * @example\n * const height = feature.getProperty('Height'); // e.g., the height of a building\n *\n * @example\n * const name = 'clicked';\n * if (feature.getProperty(name)) {\n *     console.log('already clicked');\n * } else {\n *     feature.setProperty(name, true);\n *     console.log('first click');\n * }\n */\nCesium3DTilePointFeature.prototype.setProperty = function (name, value) {\n  this._content.batchTable.setProperty(this._batchId, name, value);\n\n  // PERFORMANCE_IDEA: Probably overkill, but maybe only mark the tile dirty if the\n  // property is in one of the style's expressions or - if it can be done quickly -\n  // if the new property value changed the result of an expression.\n  this._content.featurePropertiesDirty = true;\n};\n\n/**\n * Returns whether the feature's class name equals <code>className</code>. Unlike {@link Cesium3DTilePointFeature#isClass}\n * this function only checks the feature's exact class and not inherited classes.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {string} className The name to check against.\n * @returns {boolean} Whether the feature's class name equals <code>className</code>\n *\n * @private\n */\nCesium3DTilePointFeature.prototype.isExactClass = function (className) {\n  return this._content.batchTable.isExactClass(this._batchId, className);\n};\n\n/**\n * Returns whether the feature's class or any inherited classes are named <code>className</code>.\n * <p>\n * This function returns <code>false</code> if no batch table hierarchy is present.\n * </p>\n *\n * @param {string} className The name to check against.\n * @returns {boolean} Whether the feature's class or inherited classes are named <code>className</code>\n *\n * @private\n */\nCesium3DTilePointFeature.prototype.isClass = function (className) {\n  return this._content.batchTable.isClass(this._batchId, className);\n};\n\n/**\n * Returns the feature's class name.\n * <p>\n * This function returns <code>undefined</code> if no batch table hierarchy is present.\n * </p>\n *\n * @returns {string} The feature's class name.\n *\n * @private\n */\nCesium3DTilePointFeature.prototype.getExactClassName = function () {\n  return this._content.batchTable.getExactClassName(this._batchId);\n};\nexport default Cesium3DTilePointFeature;\n","/**\n * The refinement approach for a tile.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification#refinement|Refinement}\n * in the 3D Tiles spec.\n * </p>\n *\n * @enum {number}\n *\n * @private\n */\nconst Cesium3DTileRefine = {\n  /**\n   * Render this tile and, if it doesn't meet the screen space error, also refine to its children.\n   *\n   * @type {number}\n   * @constant\n   */\n  ADD: 0,\n\n  /**\n   * Render this tile or, if it doesn't meet the screen space error, refine to its descendants instead.\n   *\n   * @type {number}\n   * @constant\n   */\n  REPLACE: 1,\n};\nexport default Object.freeze(Cesium3DTileRefine);\n","import addAllToArray from \"../Core/addAllToArray.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ConditionsExpression from \"./ConditionsExpression.js\";\nimport Expression from \"./Expression.js\";\n\n/**\n * A style that is applied to a {@link Cesium3DTileset}.\n * <p>\n * Evaluates an expression defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}.\n * </p>\n *\n * @alias Cesium3DTileStyle\n * @constructor\n *\n * @param {object} [style] An object defining a style.\n *\n * @example\n * tileset.style = new Cesium.Cesium3DTileStyle({\n *     color : {\n *         conditions : [\n *             ['${Height} >= 100', 'color(\"purple\", 0.5)'],\n *             ['${Height} >= 50', 'color(\"red\")'],\n *             ['true', 'color(\"blue\")']\n *         ]\n *     },\n *     show : '${Height} > 0',\n *     meta : {\n *         description : '\"Building id ${id} has height ${Height}.\"'\n *     }\n * });\n *\n * @example\n * tileset.style = new Cesium.Cesium3DTileStyle({\n *     color : 'vec4(${Temperature})',\n *     pointSize : '${Temperature} * 2.0'\n * });\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}\n */\nfunction Cesium3DTileStyle(style) {\n  this._style = {};\n  this._ready = false;\n\n  this._show = undefined;\n  this._color = undefined;\n  this._pointSize = undefined;\n  this._pointOutlineColor = undefined;\n  this._pointOutlineWidth = undefined;\n  this._labelColor = undefined;\n  this._labelOutlineColor = undefined;\n  this._labelOutlineWidth = undefined;\n  this._font = undefined;\n  this._labelStyle = undefined;\n  this._labelText = undefined;\n  this._backgroundColor = undefined;\n  this._backgroundPadding = undefined;\n  this._backgroundEnabled = undefined;\n  this._scaleByDistance = undefined;\n  this._translucencyByDistance = undefined;\n  this._distanceDisplayCondition = undefined;\n  this._heightOffset = undefined;\n  this._anchorLineEnabled = undefined;\n  this._anchorLineColor = undefined;\n  this._image = undefined;\n  this._disableDepthTestDistance = undefined;\n  this._horizontalOrigin = undefined;\n  this._verticalOrigin = undefined;\n  this._labelHorizontalOrigin = undefined;\n  this._labelVerticalOrigin = undefined;\n  this._meta = undefined;\n\n  this._colorShaderFunction = undefined;\n  this._showShaderFunction = undefined;\n  this._pointSizeShaderFunction = undefined;\n  this._colorShaderFunctionReady = false;\n  this._showShaderFunctionReady = false;\n  this._pointSizeShaderFunctionReady = false;\n\n  this._colorShaderTranslucent = false;\n\n  setup(this, style);\n}\n\nfunction setup(that, styleJson) {\n  styleJson = clone(styleJson, true) ?? that._style;\n  that._style = styleJson;\n\n  that.show = styleJson.show;\n  that.color = styleJson.color;\n  that.pointSize = styleJson.pointSize;\n  that.pointOutlineColor = styleJson.pointOutlineColor;\n  that.pointOutlineWidth = styleJson.pointOutlineWidth;\n  that.labelColor = styleJson.labelColor;\n  that.labelOutlineColor = styleJson.labelOutlineColor;\n  that.labelOutlineWidth = styleJson.labelOutlineWidth;\n  that.labelStyle = styleJson.labelStyle;\n  that.font = styleJson.font;\n  that.labelText = styleJson.labelText;\n  that.backgroundColor = styleJson.backgroundColor;\n  that.backgroundPadding = styleJson.backgroundPadding;\n  that.backgroundEnabled = styleJson.backgroundEnabled;\n  that.scaleByDistance = styleJson.scaleByDistance;\n  that.translucencyByDistance = styleJson.translucencyByDistance;\n  that.distanceDisplayCondition = styleJson.distanceDisplayCondition;\n  that.heightOffset = styleJson.heightOffset;\n  that.anchorLineEnabled = styleJson.anchorLineEnabled;\n  that.anchorLineColor = styleJson.anchorLineColor;\n  that.image = styleJson.image;\n  that.disableDepthTestDistance = styleJson.disableDepthTestDistance;\n  that.horizontalOrigin = styleJson.horizontalOrigin;\n  that.verticalOrigin = styleJson.verticalOrigin;\n  that.labelHorizontalOrigin = styleJson.labelHorizontalOrigin;\n  that.labelVerticalOrigin = styleJson.labelVerticalOrigin;\n\n  const meta = {};\n  if (defined(styleJson.meta)) {\n    const defines = styleJson.defines;\n    const metaJson = styleJson.meta ?? Frozen.EMPTY_OBJECT;\n    for (const property in metaJson) {\n      if (metaJson.hasOwnProperty(property)) {\n        meta[property] = new Expression(metaJson[property], defines);\n      }\n    }\n  }\n\n  that._meta = meta;\n\n  that._ready = true;\n}\n\nfunction getExpression(tileStyle, value) {\n  const defines = (tileStyle._style ?? Frozen.EMPTY_OBJECT).defines;\n\n  if (!defined(value)) {\n    return undefined;\n  } else if (typeof value === \"boolean\" || typeof value === \"number\") {\n    return new Expression(String(value));\n  } else if (typeof value === \"string\") {\n    return new Expression(value, defines);\n  } else if (defined(value.conditions)) {\n    return new ConditionsExpression(value, defines);\n  }\n  return value;\n}\n\nfunction getJsonFromExpression(expression) {\n  if (!defined(expression)) {\n    return undefined;\n  } else if (defined(expression.expression)) {\n    return expression.expression;\n  } else if (defined(expression.conditionsExpression)) {\n    return clone(expression.conditionsExpression, true);\n  }\n  return expression;\n}\n\nObject.defineProperties(Cesium3DTileStyle.prototype, {\n  /**\n   * Gets the object defining the style using the\n   * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}.\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {object}\n   * @readonly\n   *\n   * @default {}\n   */\n  style: {\n    get: function () {\n      return this._style;\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>show</code> property. Alternatively a boolean, string, or object defining a show style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return or convert to a <code>Boolean</code>.\n   * </p>\n   * <p>\n   * This expression is applicable to all tile formats.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     show : '(regExp(\"^Chest\").test(${County})) && (${YearBuilt} >= 1970)'\n   * });\n   * style.show.evaluate(feature); // returns true or false depending on the feature's properties\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override show expression with a custom function\n   * style.show = {\n   *     evaluate : function(feature) {\n   *         return true;\n   *     }\n   * };\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override show expression with a boolean\n   * style.show = true;\n   * };\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override show expression with a string\n   * style.show = '${Height} > 0';\n   * };\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override show expression with a condition\n   * style.show = {\n   *     conditions: [\n   *         ['${height} > 2', 'false'],\n   *         ['true', 'true']\n   *     ];\n   * };\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      this._show = getExpression(this, value);\n      this._style.show = getJsonFromExpression(this._show);\n      this._showShaderFunctionReady = false;\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>color</code> property. Alternatively a string or object defining a color style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Color</code>.\n   * </p>\n   * <p>\n   * This expression is applicable to all tile formats.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     color : '(${Temperature} > 90) ? color(\"red\") : color(\"white\")'\n   * });\n   * style.color.evaluateColor(feature, result); // returns a Cesium.Color object\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override color expression with a custom function\n   * style.color = {\n   *     evaluateColor : function(feature, result) {\n   *         return Cesium.Color.clone(Cesium.Color.WHITE, result);\n   *     }\n   * };\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override color expression with a string\n   * style.color = 'color(\"blue\")';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override color expression with a condition\n   * style.color = {\n   *     conditions : [\n   *         ['${height} > 2', 'color(\"cyan\")'],\n   *         ['true', 'color(\"blue\")']\n   *     ]\n   * };\n   */\n  color: {\n    get: function () {\n      return this._color;\n    },\n    set: function (value) {\n      this._color = getExpression(this, value);\n      this._style.color = getJsonFromExpression(this._color);\n      this._colorShaderFunctionReady = false;\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>pointSize</code> property. Alternatively a string or object defining a point size style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Number</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile or a Point Cloud tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     pointSize : '(${Temperature} > 90) ? 2.0 : 1.0'\n   * });\n   * style.pointSize.evaluate(feature); // returns a Number\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointSize expression with a custom function\n   * style.pointSize = {\n   *     evaluate : function(feature) {\n   *         return 1.0;\n   *     }\n   * };\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointSize expression with a number\n   * style.pointSize = 1.0;\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointSize expression with a string\n   * style.pointSize = '${height} / 10';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointSize expression with a condition\n   * style.pointSize =  {\n   *     conditions : [\n   *         ['${height} > 2', '1.0'],\n   *         ['true', '2.0']\n   *     ]\n   * };\n   */\n  pointSize: {\n    get: function () {\n      return this._pointSize;\n    },\n    set: function (value) {\n      this._pointSize = getExpression(this, value);\n      this._style.pointSize = getJsonFromExpression(this._pointSize);\n      this._pointSizeShaderFunctionReady = false;\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>pointOutlineColor</code> property. Alternatively a string or object defining a color style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Color</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointOutlineColor expression with a string\n   * style.pointOutlineColor = 'color(\"blue\")';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointOutlineColor expression with a condition\n   * style.pointOutlineColor = {\n   *     conditions : [\n   *         ['${height} > 2', 'color(\"cyan\")'],\n   *         ['true', 'color(\"blue\")']\n   *     ]\n   * };\n   */\n  pointOutlineColor: {\n    get: function () {\n      return this._pointOutlineColor;\n    },\n    set: function (value) {\n      this._pointOutlineColor = getExpression(this, value);\n      this._style.pointOutlineColor = getJsonFromExpression(\n        this._pointOutlineColor,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>pointOutlineWidth</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Number</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointOutlineWidth expression with a string\n   * style.pointOutlineWidth = '5';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override pointOutlineWidth expression with a condition\n   * style.pointOutlineWidth = {\n   *     conditions : [\n   *         ['${height} > 2', '5'],\n   *         ['true', '0']\n   *     ]\n   * };\n   */\n  pointOutlineWidth: {\n    get: function () {\n      return this._pointOutlineWidth;\n    },\n    set: function (value) {\n      this._pointOutlineWidth = getExpression(this, value);\n      this._style.pointOutlineWidth = getJsonFromExpression(\n        this._pointOutlineWidth,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelColor</code> property. Alternatively a string or object defining a color style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Color</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelColor expression with a string\n   * style.labelColor = 'color(\"blue\")';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelColor expression with a condition\n   * style.labelColor = {\n   *     conditions : [\n   *         ['${height} > 2', 'color(\"cyan\")'],\n   *         ['true', 'color(\"blue\")']\n   *     ]\n   * };\n   */\n  labelColor: {\n    get: function () {\n      return this._labelColor;\n    },\n    set: function (value) {\n      this._labelColor = getExpression(this, value);\n      this._style.labelColor = getJsonFromExpression(this._labelColor);\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelOutlineColor</code> property. Alternatively a string or object defining a color style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Color</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelOutlineColor expression with a string\n   * style.labelOutlineColor = 'color(\"blue\")';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelOutlineColor expression with a condition\n   * style.labelOutlineColor = {\n   *     conditions : [\n   *         ['${height} > 2', 'color(\"cyan\")'],\n   *         ['true', 'color(\"blue\")']\n   *     ]\n   * };\n   */\n  labelOutlineColor: {\n    get: function () {\n      return this._labelOutlineColor;\n    },\n    set: function (value) {\n      this._labelOutlineColor = getExpression(this, value);\n      this._style.labelOutlineColor = getJsonFromExpression(\n        this._labelOutlineColor,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelOutlineWidth</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Number</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelOutlineWidth expression with a string\n   * style.labelOutlineWidth = '5';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelOutlineWidth expression with a condition\n   * style.labelOutlineWidth = {\n   *     conditions : [\n   *         ['${height} > 2', '5'],\n   *         ['true', '0']\n   *     ]\n   * };\n   */\n  labelOutlineWidth: {\n    get: function () {\n      return this._labelOutlineWidth;\n    },\n    set: function (value) {\n      this._labelOutlineWidth = getExpression(this, value);\n      this._style.labelOutlineWidth = getJsonFromExpression(\n        this._labelOutlineWidth,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>font</code> property. Alternatively a string or object defining a string style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>String</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     font : '(${Temperature} > 90) ? \"30px Helvetica\" : \"24px Helvetica\"'\n   * });\n   * style.font.evaluate(feature); // returns a String\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override font expression with a custom function\n   * style.font = {\n   *     evaluate : function(feature) {\n   *         return '24px Helvetica';\n   *     }\n   * };\n   */\n  font: {\n    get: function () {\n      return this._font;\n    },\n    set: function (value) {\n      this._font = getExpression(this, value);\n      this._style.font = getJsonFromExpression(this._font);\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>label style</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>LabelStyle</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     labelStyle : `(\\${Temperature} > 90) ? ${LabelStyle.FILL_AND_OUTLINE} : ${LabelStyle.FILL}`\n   * });\n   * style.labelStyle.evaluate(feature); // returns a LabelStyle\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelStyle expression with a custom function\n   * style.labelStyle = {\n   *     evaluate : function(feature) {\n   *         return LabelStyle.FILL;\n   *     }\n   * };\n   */\n  labelStyle: {\n    get: function () {\n      return this._labelStyle;\n    },\n    set: function (value) {\n      this._labelStyle = getExpression(this, value);\n      this._style.labelStyle = getJsonFromExpression(this._labelStyle);\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelText</code> property. Alternatively a string or object defining a string style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>String</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     labelText : '(${Temperature} > 90) ? \">90\" : \"<=90\"'\n   * });\n   * style.labelText.evaluate(feature); // returns a String\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelText expression with a custom function\n   * style.labelText = {\n   *     evaluate : function(feature) {\n   *         return 'Example label text';\n   *     }\n   * };\n   */\n  labelText: {\n    get: function () {\n      return this._labelText;\n    },\n    set: function (value) {\n      this._labelText = getExpression(this, value);\n      this._style.labelText = getJsonFromExpression(this._labelText);\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>backgroundColor</code> property. Alternatively a string or object defining a color style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Color</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override backgroundColor expression with a string\n   * style.backgroundColor = 'color(\"blue\")';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override backgroundColor expression with a condition\n   * style.backgroundColor = {\n   *     conditions : [\n   *         ['${height} > 2', 'color(\"cyan\")'],\n   *         ['true', 'color(\"blue\")']\n   *     ]\n   * };\n   */\n  backgroundColor: {\n    get: function () {\n      return this._backgroundColor;\n    },\n    set: function (value) {\n      this._backgroundColor = getExpression(this, value);\n      this._style.backgroundColor = getJsonFromExpression(\n        this._backgroundColor,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>backgroundPadding</code> property. Alternatively a string or object defining a vec2 style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Cartesian2</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override backgroundPadding expression with a string\n   * style.backgroundPadding = 'vec2(5.0, 7.0)';\n   * style.backgroundPadding.evaluate(feature); // returns a Cartesian2\n   */\n  backgroundPadding: {\n    get: function () {\n      return this._backgroundPadding;\n    },\n    set: function (value) {\n      this._backgroundPadding = getExpression(this, value);\n      this._style.backgroundPadding = getJsonFromExpression(\n        this._backgroundPadding,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>backgroundEnabled</code> property. Alternatively a string or object defining a boolean style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Boolean</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override backgroundEnabled expression with a string\n   * style.backgroundEnabled = 'true';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override backgroundEnabled expression with a condition\n   * style.backgroundEnabled = {\n   *     conditions : [\n   *         ['${height} > 2', 'true'],\n   *         ['true', 'false']\n   *     ]\n   * };\n   */\n  backgroundEnabled: {\n    get: function () {\n      return this._backgroundEnabled;\n    },\n    set: function (value) {\n      this._backgroundEnabled = getExpression(this, value);\n      this._style.backgroundEnabled = getJsonFromExpression(\n        this._backgroundEnabled,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>scaleByDistance</code> property. Alternatively a string or object defining a vec4 style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Cartesian4</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override scaleByDistance expression with a string\n   * style.scaleByDistance = 'vec4(1.5e2, 2.0, 1.5e7, 0.5)';\n   * style.scaleByDistance.evaluate(feature); // returns a Cartesian4\n   */\n  scaleByDistance: {\n    get: function () {\n      return this._scaleByDistance;\n    },\n    set: function (value) {\n      this._scaleByDistance = getExpression(this, value);\n      this._style.scaleByDistance = getJsonFromExpression(\n        this._scaleByDistance,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>translucencyByDistance</code> property. Alternatively a string or object defining a vec4 style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Cartesian4</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override translucencyByDistance expression with a string\n   * style.translucencyByDistance = 'vec4(1.5e2, 1.0, 1.5e7, 0.2)';\n   * style.translucencyByDistance.evaluate(feature); // returns a Cartesian4\n   */\n  translucencyByDistance: {\n    get: function () {\n      return this._translucencyByDistance;\n    },\n    set: function (value) {\n      this._translucencyByDistance = getExpression(this, value);\n      this._style.translucencyByDistance = getJsonFromExpression(\n        this._translucencyByDistance,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>distanceDisplayCondition</code> property. Alternatively a string or object defining a vec2 style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Cartesian2</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override distanceDisplayCondition expression with a string\n   * style.distanceDisplayCondition = 'vec2(0.0, 5.5e6)';\n   * style.distanceDisplayCondition.evaluate(feature); // returns a Cartesian2\n   */\n  distanceDisplayCondition: {\n    get: function () {\n      return this._distanceDisplayCondition;\n    },\n    set: function (value) {\n      this._distanceDisplayCondition = getExpression(this, value);\n      this._style.distanceDisplayCondition = getJsonFromExpression(\n        this._distanceDisplayCondition,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>heightOffset</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Number</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override heightOffset expression with a string\n   * style.heightOffset = '2.0';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override heightOffset expression with a condition\n   * style.heightOffset = {\n   *     conditions : [\n   *         ['${height} > 2', '4.0'],\n   *         ['true', '2.0']\n   *     ]\n   * };\n   */\n  heightOffset: {\n    get: function () {\n      return this._heightOffset;\n    },\n    set: function (value) {\n      this._heightOffset = getExpression(this, value);\n      this._style.heightOffset = getJsonFromExpression(this._heightOffset);\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>anchorLineEnabled</code> property. Alternatively a string or object defining a boolean style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Boolean</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override anchorLineEnabled expression with a string\n   * style.anchorLineEnabled = 'true';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override anchorLineEnabled expression with a condition\n   * style.anchorLineEnabled = {\n   *     conditions : [\n   *         ['${height} > 2', 'true'],\n   *         ['true', 'false']\n   *     ]\n   * };\n   */\n  anchorLineEnabled: {\n    get: function () {\n      return this._anchorLineEnabled;\n    },\n    set: function (value) {\n      this._anchorLineEnabled = getExpression(this, value);\n      this._style.anchorLineEnabled = getJsonFromExpression(\n        this._anchorLineEnabled,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>anchorLineColor</code> property. Alternatively a string or object defining a color style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Color</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override anchorLineColor expression with a string\n   * style.anchorLineColor = 'color(\"blue\")';\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override anchorLineColor expression with a condition\n   * style.anchorLineColor = {\n   *     conditions : [\n   *         ['${height} > 2', 'color(\"cyan\")'],\n   *         ['true', 'color(\"blue\")']\n   *     ]\n   * };\n   */\n  anchorLineColor: {\n    get: function () {\n      return this._anchorLineColor;\n    },\n    set: function (value) {\n      this._anchorLineColor = getExpression(this, value);\n      this._style.anchorLineColor = getJsonFromExpression(\n        this._anchorLineColor,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>image</code> property. Alternatively a string or object defining a string style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>String</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     image : '(${Temperature} > 90) ? \"/url/to/image1\" : \"/url/to/image2\"'\n   * });\n   * style.image.evaluate(feature); // returns a String\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override image expression with a custom function\n   * style.image = {\n   *     evaluate : function(feature) {\n   *         return '/url/to/image';\n   *     }\n   * };\n   */\n  image: {\n    get: function () {\n      return this._image;\n    },\n    set: function (value) {\n      this._image = getExpression(this, value);\n      this._style.image = getJsonFromExpression(this._image);\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>disableDepthTestDistance</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>Number</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override disableDepthTestDistance expression with a string\n   * style.disableDepthTestDistance = '1000.0';\n   * style.disableDepthTestDistance.evaluate(feature); // returns a Number\n   */\n  disableDepthTestDistance: {\n    get: function () {\n      return this._disableDepthTestDistance;\n    },\n    set: function (value) {\n      this._disableDepthTestDistance = getExpression(this, value);\n      this._style.disableDepthTestDistance = getJsonFromExpression(\n        this._disableDepthTestDistance,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>horizontalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>HorizontalOrigin</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     horizontalOrigin : HorizontalOrigin.LEFT\n   * });\n   * style.horizontalOrigin.evaluate(feature); // returns a HorizontalOrigin\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override horizontalOrigin expression with a custom function\n   * style.horizontalOrigin = {\n   *     evaluate : function(feature) {\n   *         return HorizontalOrigin.CENTER;\n   *     }\n   * };\n   */\n  horizontalOrigin: {\n    get: function () {\n      return this._horizontalOrigin;\n    },\n    set: function (value) {\n      this._horizontalOrigin = getExpression(this, value);\n      this._style.horizontalOrigin = getJsonFromExpression(\n        this._horizontalOrigin,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>verticalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>VerticalOrigin</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     verticalOrigin : VerticalOrigin.TOP\n   * });\n   * style.verticalOrigin.evaluate(feature); // returns a VerticalOrigin\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override verticalOrigin expression with a custom function\n   * style.verticalOrigin = {\n   *     evaluate : function(feature) {\n   *         return VerticalOrigin.CENTER;\n   *     }\n   * };\n   */\n  verticalOrigin: {\n    get: function () {\n      return this._verticalOrigin;\n    },\n    set: function (value) {\n      this._verticalOrigin = getExpression(this, value);\n      this._style.verticalOrigin = getJsonFromExpression(this._verticalOrigin);\n    },\n  },\n\n  /**\n   Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelHorizontalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n    * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n    * <p>\n    * The expression must return a <code>HorizontalOrigin</code>.\n    * </p>\n    * <p>\n    * This expression is only applicable to point features in a Vector tile.\n    * </p>\n    *\n    * @memberof Cesium3DTileStyle.prototype\n    *\n    * @type {StyleExpression}\n    *\n    * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n    *\n    * @example\n    * const style = new Cesium3DTileStyle({\n    *     labelHorizontalOrigin : HorizontalOrigin.LEFT\n    * });\n    * style.labelHorizontalOrigin.evaluate(feature); // returns a HorizontalOrigin\n    *\n    * @example\n    * const style = new Cesium.Cesium3DTileStyle();\n    * // Override labelHorizontalOrigin expression with a custom function\n    * style.labelHorizontalOrigin = {\n    *     evaluate : function(feature) {\n    *         return HorizontalOrigin.CENTER;\n    *     }\n    * };\n    */\n  labelHorizontalOrigin: {\n    get: function () {\n      return this._labelHorizontalOrigin;\n    },\n    set: function (value) {\n      this._labelHorizontalOrigin = getExpression(this, value);\n      this._style.labelHorizontalOrigin = getJsonFromExpression(\n        this._labelHorizontalOrigin,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the {@link StyleExpression} object used to evaluate the style's <code>labelVerticalOrigin</code> property. Alternatively a string or object defining a number style can be used.\n   * The getter will return the internal {@link Expression} or {@link ConditionsExpression}, which may differ from the value provided to the setter.\n   * <p>\n   * The expression must return a <code>VerticalOrigin</code>.\n   * </p>\n   * <p>\n   * This expression is only applicable to point features in a Vector tile.\n   * </p>\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     labelVerticalOrigin : VerticalOrigin.TOP\n   * });\n   * style.labelVerticalOrigin.evaluate(feature); // returns a VerticalOrigin\n   *\n   * @example\n   * const style = new Cesium.Cesium3DTileStyle();\n   * // Override labelVerticalOrigin expression with a custom function\n   * style.labelVerticalOrigin = {\n   *     evaluate : function(feature) {\n   *         return VerticalOrigin.CENTER;\n   *     }\n   * };\n   */\n  labelVerticalOrigin: {\n    get: function () {\n      return this._labelVerticalOrigin;\n    },\n    set: function (value) {\n      this._labelVerticalOrigin = getExpression(this, value);\n      this._style.labelVerticalOrigin = getJsonFromExpression(\n        this._labelVerticalOrigin,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the object containing application-specific expression that can be explicitly\n   * evaluated, e.g., for display in a UI.\n   *\n   * @memberof Cesium3DTileStyle.prototype\n   *\n   * @type {StyleExpression}\n   *\n   * @example\n   * const style = new Cesium3DTileStyle({\n   *     meta : {\n   *         description : '\"Building id ${id} has height ${Height}.\"'\n   *     }\n   * });\n   * style.meta.description.evaluate(feature); // returns a String with the substituted variables\n   */\n  meta: {\n    get: function () {\n      return this._meta;\n    },\n    set: function (value) {\n      this._meta = value;\n    },\n  },\n});\n\n/**\n * Asynchronously creates a Cesium3DTileStyle from a url.\n *\n * @param {Resource|string} url The url of the style to be loaded.\n *\n * @returns {Promise<Cesium3DTileStyle>} A promise which resolves to the created style\n *\n * @private\n */\nCesium3DTileStyle.fromUrl = function (url) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(url)) {\n    throw new DeveloperError(\"url is required\");\n  }\n  //>>includeEnd('debug');\n\n  const resource = Resource.createIfNeeded(url);\n  return resource.fetchJson(url).then(function (styleJson) {\n    return new Cesium3DTileStyle(styleJson);\n  });\n};\n\n/**\n * Gets the color shader function for this style.\n *\n * @param {string} functionSignature Signature of the generated function.\n * @param {object} variableSubstitutionMap Maps variable names to shader variable names.\n * @param {object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {string} The shader function.\n *\n * @private\n */\nCesium3DTileStyle.prototype.getColorShaderFunction = function (\n  functionSignature,\n  variableSubstitutionMap,\n  shaderState,\n) {\n  if (this._colorShaderFunctionReady) {\n    shaderState.translucent = this._colorShaderTranslucent;\n    // Return the cached result, may be undefined\n    return this._colorShaderFunction;\n  }\n\n  this._colorShaderFunctionReady = true;\n  if (defined(this.color) && defined(this.color.getShaderFunction)) {\n    this._colorShaderFunction = this.color.getShaderFunction(\n      functionSignature,\n      variableSubstitutionMap,\n      shaderState,\n      \"vec4\",\n    );\n  } else {\n    this._colorShaderFunction = undefined;\n  }\n\n  this._colorShaderTranslucent = shaderState.translucent;\n  return this._colorShaderFunction;\n};\n\n/**\n * Gets the show shader function for this style.\n *\n * @param {string} functionSignature Signature of the generated function.\n * @param {object} variableSubstitutionMap Maps variable names to shader variable names.\n * @param {object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {string} The shader function.\n *\n * @private\n */\nCesium3DTileStyle.prototype.getShowShaderFunction = function (\n  functionSignature,\n  variableSubstitutionMap,\n  shaderState,\n) {\n  if (this._showShaderFunctionReady) {\n    // Return the cached result, may be undefined\n    return this._showShaderFunction;\n  }\n\n  this._showShaderFunctionReady = true;\n\n  if (defined(this.show) && defined(this.show.getShaderFunction)) {\n    this._showShaderFunction = this.show.getShaderFunction(\n      functionSignature,\n      variableSubstitutionMap,\n      shaderState,\n      \"bool\",\n    );\n  } else {\n    this._showShaderFunction = undefined;\n  }\n  return this._showShaderFunction;\n};\n\n/**\n * Gets the pointSize shader function for this style.\n *\n * @param {string} functionSignature Signature of the generated function.\n * @param {object} variableSubstitutionMap Maps variable names to shader variable names.\n * @param {object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {string} The shader function.\n *\n * @private\n */\nCesium3DTileStyle.prototype.getPointSizeShaderFunction = function (\n  functionSignature,\n  variableSubstitutionMap,\n  shaderState,\n) {\n  if (this._pointSizeShaderFunctionReady) {\n    // Return the cached result, may be undefined\n    return this._pointSizeShaderFunction;\n  }\n\n  this._pointSizeShaderFunctionReady = true;\n  if (defined(this.pointSize) && defined(this.pointSize.getShaderFunction)) {\n    this._pointSizeShaderFunction = this.pointSize.getShaderFunction(\n      functionSignature,\n      variableSubstitutionMap,\n      shaderState,\n      \"float\",\n    );\n  } else {\n    this._pointSizeShaderFunction = undefined;\n  }\n\n  return this._pointSizeShaderFunction;\n};\n\n/**\n * Gets the variables used by the style.\n *\n * @returns {string[]} The variables used by the style.\n *\n * @private\n */\nCesium3DTileStyle.prototype.getVariables = function () {\n  let variables = [];\n\n  if (defined(this.color) && defined(this.color.getVariables)) {\n    addAllToArray(variables, this.color.getVariables());\n  }\n\n  if (defined(this.show) && defined(this.show.getVariables)) {\n    addAllToArray(variables, this.show.getVariables());\n  }\n\n  if (defined(this.pointSize) && defined(this.pointSize.getVariables)) {\n    addAllToArray(variables, this.pointSize.getVariables());\n  }\n\n  // Remove duplicates\n  variables = variables.filter(function (variable, index, variables) {\n    return variables.indexOf(variable) === index;\n  });\n\n  return variables;\n};\n\nexport default Cesium3DTileStyle;\n","import defined from \"../Core/defined.js\";\n\n/**\n * @private\n */\nfunction Cesium3DTileStyleEngine() {\n  this._style = undefined; // The style provided by the user\n  this._styleDirty = false; // true when the style is reassigned\n  this._lastStyleTime = 0; // The \"time\" when the last style was assigned\n}\n\nObject.defineProperties(Cesium3DTileStyleEngine.prototype, {\n  style: {\n    get: function () {\n      return this._style;\n    },\n    set: function (value) {\n      if (value === this._style) {\n        return;\n      }\n      this._style = value;\n      this._styleDirty = true;\n    },\n  },\n});\n\nCesium3DTileStyleEngine.prototype.makeDirty = function () {\n  this._styleDirty = true;\n};\n\nCesium3DTileStyleEngine.prototype.resetDirty = function () {\n  this._styleDirty = false;\n};\n\nCesium3DTileStyleEngine.prototype.applyStyle = function (tileset) {\n  if (!defined(tileset.root)) {\n    return;\n  }\n\n  if (defined(this._style) && !this._style._ready) {\n    return;\n  }\n\n  const styleDirty = this._styleDirty;\n\n  if (styleDirty) {\n    // Increase \"time\", so the style is applied to all visible tiles\n    ++this._lastStyleTime;\n  }\n\n  const lastStyleTime = this._lastStyleTime;\n  const statistics = tileset._statistics;\n\n  // If a new style was assigned, loop through all the visible tiles; otherwise, loop through\n  // only the tiles that are newly visible, i.e., they are visible this frame, but were not\n  // visible last frame.  In many cases, the newly selected tiles list will be short or empty.\n  const tiles = styleDirty\n    ? tileset._selectedTiles\n    : tileset._selectedTilesToStyle;\n  // PERFORMANCE_IDEA: does mouse-over picking basically trash this?  We need to style on\n  // pick, for example, because a feature's show may be false.\n\n  const length = tiles.length;\n  for (let i = 0; i < length; ++i) {\n    const tile = tiles[i];\n    if (tile.lastStyleTime !== lastStyleTime) {\n      // Apply the style to this tile if it wasn't already applied because:\n      //   1) the user assigned a new style to the tileset\n      //   2) this tile is now visible, but it wasn't visible when the style was first assigned\n      const content = tile.content;\n      tile.lastStyleTime = lastStyleTime;\n      content.applyStyle(this._style);\n      statistics.numberOfFeaturesStyled += content.featuresLength;\n      ++statistics.numberOfTilesStyled;\n    }\n  }\n};\nexport default Cesium3DTileStyleEngine;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cesium3DTilesetMetadata from \"./Cesium3DTilesetMetadata.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport ImplicitSubtree from \"./ImplicitSubtree.js\";\nimport ImplicitSubtreeCache from \"./ImplicitSubtreeCache.js\";\nimport ImplicitTileCoordinates from \"./ImplicitTileCoordinates.js\";\nimport ImplicitTileset from \"./ImplicitTileset.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport MetadataSemantic from \"./MetadataSemantic.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport preprocess3DTileContent from \"./preprocess3DTileContent.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ResourceCache from \"./ResourceCache.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport VoxelContent from \"./VoxelContent.js\";\nimport VoxelMetadataOrder from \"./VoxelMetadataOrder.js\";\nimport VoxelShapeType from \"./VoxelShapeType.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\n\n/**\n * @typedef {object} Cesium3DTilesVoxelProvider.ConstructorOptions\n *\n * Initialization options for the Cesium3DTilesVoxelProvider constructor\n *\n * @property {string} className The class in the tileset schema describing voxel metadata.\n * @property {string[]} names The metadata names.\n * @property {MetadataType[]} types The metadata types.\n * @property {MetadataComponentType[]} componentTypes The metadata component types.\n * @property {VoxelShapeType} shape The {@link VoxelShapeType}.\n * @property {Cartesian3} dimensions The number of voxels per dimension of a tile. This is the same for all tiles in the dataset.\n * @property {Cartesian3} [paddingBefore=Cartesian3.ZERO] The number of padding voxels before the tile. This improves rendering quality when sampling the edge of a tile, but it increases memory usage.\n * @property {Cartesian3} [paddingAfter=Cartesian3.ZERO] The number of padding voxels after the tile. This improves rendering quality when sampling the edge of a tile, but it increases memory usage.\n * @property {Matrix4} [globalTransform=Matrix4.IDENTITY] A transform from local space to global space.\n * @property {Matrix4} [shapeTransform=Matrix4.IDENTITY] A transform from shape space to local space.\n * @property {Cartesian3} [minBounds] The minimum bounds.\n * @property {Cartesian3} [maxBounds] The maximum bounds.\n * @property {number[][]} [minimumValues] The metadata minimum values.\n * @property {number[][]} [maximumValues] The metadata maximum values.\n * @property {number} [maximumTileCount] The maximum number of tiles that exist for this provider. This value is used as a hint to the voxel renderer to allocate an appropriate amount of GPU memory. If this value is not known it can be undefined.\n */\n\n/**\n * A {@link VoxelProvider} that fetches voxel data from a 3D Tiles tileset.\n * <p>\n * Implements the {@link VoxelProvider} interface.\n * </p>\n * <div class=\"notice\">\n * This object is normally not instantiated directly, use {@link Cesium3DTilesVoxelProvider.fromUrl}.\n * </div>\n *\n * @alias Cesium3DTilesVoxelProvider\n * @constructor\n * @augments VoxelProvider\n *\n * @param {Cesium3DTilesVoxelProvider.ConstructorOptions} options An object describing initialization options\n *\n * @see Cesium3DTilesVoxelProvider.fromUrl\n * @see VoxelProvider\n * @see VoxelPrimitive\n * @see VoxelShapeType\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction Cesium3DTilesVoxelProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const {\n    className,\n    names,\n    types,\n    componentTypes,\n    shape,\n    dimensions,\n    paddingBefore = Cartesian3.ZERO.clone(),\n    paddingAfter = Cartesian3.ZERO.clone(),\n    globalTransform = Matrix4.IDENTITY.clone(),\n    shapeTransform = Matrix4.IDENTITY.clone(),\n    minBounds,\n    maxBounds,\n    minimumValues,\n    maximumValues,\n    maximumTileCount,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"className\", className);\n  Check.typeOf.object(\"names\", names);\n  Check.typeOf.object(\"types\", types);\n  Check.typeOf.object(\"componentTypes\", componentTypes);\n  Check.typeOf.string(\"shape\", shape);\n  Check.typeOf.object(\"dimensions\", dimensions);\n  //>>includeEnd('debug');\n\n  this._shapeTransform = shapeTransform;\n  this._globalTransform = globalTransform;\n  this._shape = shape;\n  this._minBounds = minBounds;\n  this._maxBounds = maxBounds;\n  this._dimensions = dimensions;\n  this._paddingBefore = paddingBefore;\n  this._paddingAfter = paddingAfter;\n  this._className = className;\n  this._names = names;\n  this._types = types;\n  this._componentTypes = componentTypes;\n  this._metadataOrder =\n    shape === VoxelShapeType.ELLIPSOID\n      ? VoxelMetadataOrder.Z_UP\n      : VoxelMetadataOrder.Y_UP;\n  this._minimumValues = minimumValues;\n  this._maximumValues = maximumValues;\n  this._maximumTileCount = maximumTileCount;\n  this._availableLevels = undefined;\n  this._implicitTileset = undefined;\n  this._subtreeCache = new ImplicitSubtreeCache();\n}\n\nObject.defineProperties(Cesium3DTilesVoxelProvider.prototype, {\n  /**\n   * A transform from local space to global space.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   * @readonly\n   */\n  globalTransform: {\n    get: function () {\n      return this._globalTransform;\n    },\n  },\n\n  /**\n   * A transform from shape space to local space.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   * @readonly\n   */\n  shapeTransform: {\n    get: function () {\n      return this._shapeTransform;\n    },\n  },\n\n  /**\n   * Gets the {@link VoxelShapeType}\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {VoxelShapeType}\n   * @readonly\n   */\n  shape: {\n    get: function () {\n      return this._shape;\n    },\n  },\n\n  /**\n   * Gets the minimum bounds.\n   * If undefined, the shape's default minimum bounds will be used instead.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {Cartesian3|undefined}\n   * @readonly\n   */\n  minBounds: {\n    get: function () {\n      return this._minBounds;\n    },\n  },\n\n  /**\n   * Gets the maximum bounds.\n   * If undefined, the shape's default maximum bounds will be used instead.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {Cartesian3|undefined}\n   * @readonly\n   */\n  maxBounds: {\n    get: function () {\n      return this._maxBounds;\n    },\n  },\n\n  /**\n   * Gets the number of voxels per dimension of a tile. This is the same for all tiles in the dataset.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  dimensions: {\n    get: function () {\n      return this._dimensions;\n    },\n  },\n\n  /**\n   * Gets the number of padding voxels before the tile. This improves rendering quality when sampling the edge of a tile, but it increases memory usage.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   * @readonly\n   */\n  paddingBefore: {\n    get: function () {\n      return this._paddingBefore;\n    },\n  },\n\n  /**\n   * Gets the number of padding voxels after the tile. This improves rendering quality when sampling the edge of a tile, but it increases memory usage.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   * @readonly\n   */\n  paddingAfter: {\n    get: function () {\n      return this._paddingAfter;\n    },\n  },\n\n  /**\n   * The metadata class for this tileset.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  className: {\n    get: function () {\n      return this._className;\n    },\n  },\n\n  /**\n   * Gets the metadata names.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {string[]}\n   * @readonly\n   */\n  names: {\n    get: function () {\n      return this._names;\n    },\n  },\n\n  /**\n   * Gets the metadata types.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {MetadataType[]}\n   * @readonly\n   */\n  types: {\n    get: function () {\n      return this._types;\n    },\n  },\n\n  /**\n   * Gets the metadata component types.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {MetadataComponentType[]}\n   * @readonly\n   */\n  componentTypes: {\n    get: function () {\n      return this._componentTypes;\n    },\n  },\n\n  /**\n   * Gets the ordering of the metadata in the buffers.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {VoxelMetadataOrder}\n   * @readonly\n   * @private\n   */\n  metadataOrder: {\n    get: function () {\n      return this._metadataOrder;\n    },\n  },\n\n  /**\n   * Gets the metadata minimum values.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {number[][]|undefined}\n   * @readonly\n   */\n  minimumValues: {\n    get: function () {\n      return this._minimumValues;\n    },\n  },\n\n  /**\n   * Gets the metadata maximum values.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {number[][]|undefined}\n   * @readonly\n   */\n  maximumValues: {\n    get: function () {\n      return this._maximumValues;\n    },\n  },\n\n  /**\n   * The maximum number of tiles that exist for this provider.\n   * This value is used as a hint to the voxel renderer to allocate an appropriate amount of GPU memory.\n   * If this value is not known it can be undefined.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumTileCount: {\n    get: function () {\n      return this._maximumTileCount;\n    },\n  },\n\n  /**\n   * The number of levels of detail containing available tiles in the tileset.\n   *\n   * @memberof Cesium3DTilesVoxelProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  availableLevels: {\n    get: function () {\n      return this._availableLevels;\n    },\n  },\n});\n\n/**\n * Creates a {@link Cesium3DTilesVoxelProvider} that fetches voxel data from a 3D Tiles tileset.\n *\n * @param {Resource|string} url The URL to a tileset JSON file\n * @returns {Promise<Cesium3DTilesVoxelProvider>} The created provider\n *\n * @exception {RuntimeException} Root must have content\n * @exception {RuntimeException} Root tile content must have 3DTILES_content_voxels extension\n * @exception {RuntimeException} Root tile must have implicit tiling\n * @exception {RuntimeException} Tileset must have a metadata schema\n * @exception {RuntimeException} Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider\n *\n * @example\n * try {\n *   const voxelProvider = await Cesium3DTilesVoxelProvider.fromUrl(\n *     \"http://localhost:8002/tilesets/voxel/tileset.json\"\n *   );\n *   const voxelPrimitive = new VoxelPrimitive({\n *     provider: voxelProvider,\n *     customShader: customShader,\n *   });\n *   scene.primitives.add(voxelPrimitive);\n * } catch (error) {\n *   console.error(`Error creating voxel primitive: ${error}`);\n * }\n *\n * @see {@link VoxelPrimitive}\n */\nCesium3DTilesVoxelProvider.fromUrl = async function (url) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  const resource = Resource.createIfNeeded(url);\n  const tilesetJson = await resource.fetchJson();\n\n  validate(tilesetJson);\n\n  const schemaLoader = getMetadataSchemaLoader(tilesetJson, resource);\n  await schemaLoader.load();\n\n  const { root } = tilesetJson;\n\n  const metadataJson = hasExtension(tilesetJson, \"3DTILES_metadata\")\n    ? tilesetJson.extensions[\"3DTILES_metadata\"]\n    : tilesetJson;\n\n  const tilesetMetadata = new Cesium3DTilesetMetadata({\n    metadataJson: metadataJson,\n    schema: schemaLoader.schema,\n  });\n\n  const voxel = root.content.extensions[\"3DTILES_content_voxels\"];\n  const className = voxel.class;\n\n  const providerOptions = getAttributeInfo(tilesetMetadata, className);\n  Object.assign(providerOptions, getShape(root));\n  if (defined(root.transform)) {\n    providerOptions.globalTransform = Matrix4.unpack(root.transform);\n  } else {\n    providerOptions.globalTransform = Matrix4.clone(Matrix4.IDENTITY);\n  }\n\n  providerOptions.dimensions = Cartesian3.unpack(voxel.dimensions);\n  providerOptions.maximumTileCount = getTileCount(tilesetMetadata);\n\n  if (defined(voxel.padding)) {\n    providerOptions.paddingBefore = Cartesian3.unpack(voxel.padding.before);\n    providerOptions.paddingAfter = Cartesian3.unpack(voxel.padding.after);\n  }\n\n  const provider = new Cesium3DTilesVoxelProvider(providerOptions);\n\n  const implicitTileset = new ImplicitTileset(\n    resource,\n    root,\n    schemaLoader.schema,\n  );\n  provider._implicitTileset = implicitTileset;\n  provider._availableLevels = implicitTileset.availableLevels;\n\n  ResourceCache.unload(schemaLoader);\n\n  return provider;\n};\n\nfunction getTileCount(metadata) {\n  if (!defined(metadata.tileset)) {\n    return undefined;\n  }\n\n  return metadata.tileset.getPropertyBySemantic(\n    MetadataSemantic.TILESET_TILE_COUNT,\n  );\n}\n\nfunction validate(tileset) {\n  const root = tileset.root;\n\n  if (!defined(root.content)) {\n    throw new RuntimeError(\"Root must have content\");\n  }\n\n  if (!hasExtension(root.content, \"3DTILES_content_voxels\")) {\n    throw new RuntimeError(\n      \"Root tile content must have 3DTILES_content_voxels extension\",\n    );\n  }\n\n  if (\n    !hasExtension(root, \"3DTILES_implicit_tiling\") &&\n    !defined(root.implicitTiling)\n  ) {\n    throw new RuntimeError(\"Root tile must have implicit tiling\");\n  }\n\n  if (\n    !defined(tileset.schema) &&\n    !defined(tileset.schemaUri) &&\n    !hasExtension(tileset, \"3DTILES_metadata\")\n  ) {\n    throw new RuntimeError(\"Tileset must have a metadata schema\");\n  }\n}\n\nfunction getShape(tile) {\n  const boundingVolume = tile.boundingVolume;\n\n  if (defined(boundingVolume.box)) {\n    return getBoxShape(boundingVolume.box);\n  } else if (defined(boundingVolume.region)) {\n    return getEllipsoidShape(boundingVolume.region);\n  } else if (hasExtension(boundingVolume, \"3DTILES_bounding_volume_cylinder\")) {\n    return getCylinderShape(\n      boundingVolume.extensions[\"3DTILES_bounding_volume_cylinder\"],\n    );\n  }\n\n  throw new RuntimeError(\n    \"Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider\",\n  );\n}\n\nfunction getEllipsoidShape(region) {\n  const west = region[0];\n  const south = region[1];\n  const east = region[2];\n  const north = region[3];\n  const minHeight = region[4];\n  const maxHeight = region[5];\n\n  const shapeTransform = Matrix4.fromScale(Ellipsoid.WGS84.radii);\n\n  const minBounds = new Cartesian3(west, south, minHeight);\n  const maxBounds = new Cartesian3(east, north, maxHeight);\n\n  return {\n    shape: VoxelShapeType.ELLIPSOID,\n    minBounds: minBounds,\n    maxBounds: maxBounds,\n    shapeTransform: shapeTransform,\n  };\n}\n\nconst scratchScale = new Cartesian3();\nconst scratchRotation = new Matrix3();\n\nfunction getBoxShape(box) {\n  const obb = OrientedBoundingBox.unpack(box);\n  const scale = Matrix3.getScale(obb.halfAxes, scratchScale);\n  const rotation = Matrix3.getRotation(obb.halfAxes, scratchRotation);\n\n  return {\n    shape: VoxelShapeType.BOX,\n    minBounds: Cartesian3.negate(scale, new Cartesian3()),\n    maxBounds: Cartesian3.clone(scale),\n    shapeTransform: Matrix4.fromRotationTranslation(rotation, obb.center),\n  };\n}\n\nfunction getCylinderShape(cylinder) {\n  const {\n    minRadius,\n    maxRadius,\n    height,\n    minAngle = -CesiumMath.PI,\n    maxAngle = CesiumMath.PI,\n    translation = [0, 0, 0],\n    rotation = [0, 0, 0, 1],\n  } = cylinder;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"minRadius\", minRadius);\n  Check.typeOf.number(\"maxRadius\", maxRadius);\n  Check.typeOf.number(\"height\", height);\n  Check.typeOf.number(\"minAngle\", minAngle);\n  Check.typeOf.number(\"maxAngle\", maxAngle);\n  Check.typeOf.object(\"translation\", translation);\n  Check.typeOf.object(\"rotation\", rotation);\n  //>>includeEnd('debug');\n\n  const minHeight = -0.5 * height + translation[2];\n  const maxHeight = 0.5 * height + translation[2];\n\n  const shapeTransform = Matrix4.fromTranslationQuaternionRotationScale(\n    Cartesian3.unpack(translation),\n    Quaternion.unpack(rotation),\n    Cartesian3.ONE,\n  );\n\n  return {\n    shape: VoxelShapeType.CYLINDER,\n    minBounds: Cartesian3.fromElements(minRadius, minAngle, minHeight),\n    maxBounds: Cartesian3.fromElements(maxRadius, maxAngle, maxHeight),\n    shapeTransform: shapeTransform,\n  };\n}\n\nfunction getMetadataSchemaLoader(tilesetJson, resource) {\n  const { schemaUri, schema } = tilesetJson;\n  if (!defined(schemaUri)) {\n    return ResourceCache.getSchemaLoader({ schema });\n  }\n  return ResourceCache.getSchemaLoader({\n    resource: resource.getDerivedResource({\n      url: schemaUri,\n    }),\n  });\n}\n\nfunction getAttributeInfo(metadata, className) {\n  const { schema, statistics } = metadata;\n  const classStatistics = statistics?.classes[className];\n  const properties = schema.classes[className].properties;\n\n  const propertyInfo = Object.entries(properties).map(([id, property]) => {\n    const { type, componentType } = property;\n    const min = classStatistics?.properties[id].min;\n    const max = classStatistics?.properties[id].max;\n    const componentCount = MetadataType.getComponentCount(type);\n    const minValue = copyArray(min, componentCount);\n    const maxValue = copyArray(max, componentCount);\n\n    return { id, type, componentType, minValue, maxValue };\n  });\n\n  const names = propertyInfo.map((info) => info.id);\n  const types = propertyInfo.map((info) => info.type);\n  const componentTypes = propertyInfo.map((info) => info.componentType);\n\n  const minimumValues = propertyInfo.map((info) => info.minValue);\n  const maximumValues = propertyInfo.map((info) => info.maxValue);\n  const hasMinimumValues = minimumValues.some(defined);\n\n  return {\n    className,\n    names,\n    types,\n    componentTypes,\n    minimumValues: hasMinimumValues ? minimumValues : undefined,\n    maximumValues: hasMinimumValues ? maximumValues : undefined,\n  };\n}\n\nfunction copyArray(values, length) {\n  // Copy input values into a new array of a specified length.\n  // If the input is not an array, its value will be copied into the first element\n  // of the returned array. If the input is an array shorter than the returned\n  // array, the extra elements in the returned array will be undefined. If the\n  // input is undefined, the return will be undefined.\n  if (!defined(values)) {\n    return;\n  }\n  const valuesArray = Array.isArray(values) ? values : [values];\n  return Array.from({ length }, (v, i) => valuesArray[i]);\n}\n\n/**\n * Get the subtree at a given subtree coordinate\n * @param {VoxelProvider} provider The voxel provider\n * @param {ImplicitTileCoordinates} subtreeCoord The coordinate at which to retrieve the subtree\n * @returns {Promise<ImplicitSubtree>} The subtree at the given coordinate\n * @private\n */\nasync function getSubtree(provider, subtreeCoord) {\n  const implicitTileset = provider._implicitTileset;\n  const subtreeCache = provider._subtreeCache;\n\n  // First load the subtree to check if the tile is available.\n  // If the subtree has been requested previously it might still be in the cache\n  let subtree = subtreeCache.find(subtreeCoord);\n  if (defined(subtree)) {\n    return subtree;\n  }\n\n  const subtreeRelative = implicitTileset.subtreeUriTemplate.getDerivedResource(\n    {\n      templateValues: subtreeCoord.getTemplateValues(),\n    },\n  );\n  const subtreeResource = implicitTileset.baseResource.getDerivedResource({\n    url: subtreeRelative.url,\n  });\n\n  const arrayBuffer = await subtreeResource.fetchArrayBuffer();\n  // Check one more time if the subtree is in the cache.\n  // This could happen if there are two in-flight tile requests from the same\n  // subtree and one finishes before the other.\n  subtree = subtreeCache.find(subtreeCoord);\n  if (defined(subtree)) {\n    return subtree;\n  }\n\n  const preprocessed = preprocess3DTileContent(arrayBuffer);\n  subtree = await ImplicitSubtree.fromSubtreeJson(\n    subtreeResource,\n    preprocessed.jsonPayload,\n    preprocessed.binaryPayload,\n    implicitTileset,\n    subtreeCoord,\n  );\n  subtreeCache.addSubtree(subtree);\n  return subtree;\n}\n\n/**\n * Requests the data for a given tile.\n *\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.tileLevel=0] The tile's level.\n * @param {number} [options.tileX=0] The tile's X coordinate.\n * @param {number} [options.tileY=0] The tile's Y coordinate.\n * @param {number} [options.tileZ=0] The tile's Z coordinate.\n * @privateparam {number} [options.keyframe=0] The requested keyframe.\n * @returns {Promise<VoxelContent>|undefined} A promise resolving to a VoxelContent containing the data for the tile, or undefined if the request could not be scheduled this frame.\n */\nCesium3DTilesVoxelProvider.prototype.requestData = async function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    tileLevel = 0,\n    tileX = 0,\n    tileY = 0,\n    tileZ = 0,\n    keyframe = 0,\n  } = options;\n\n  if (keyframe !== 0) {\n    return Promise.reject(\n      `3D Tiles currently doesn't support time-dynamic data.`,\n    );\n  }\n\n  // 1. Load the subtree that the tile belongs to (possibly from the subtree cache)\n  // 2. Load the voxel content if available\n\n  // Can't use a scratch variable here because the object is used inside the promise chain.\n  const implicitTileset = this._implicitTileset;\n  const tileCoordinates = new ImplicitTileCoordinates({\n    subdivisionScheme: implicitTileset.subdivisionScheme,\n    subtreeLevels: implicitTileset.subtreeLevels,\n    level: tileLevel,\n    x: tileX,\n    y: tileY,\n    z: tileZ,\n  });\n\n  // Find the coordinates of the parent subtree containing tileCoordinates\n  // If tileCoordinates is a subtree child, use that subtree\n  // If tileCoordinates is a subtree root, use its parent subtree\n  const isSubtreeRoot =\n    tileCoordinates.isSubtreeRoot() && tileCoordinates.level > 0;\n\n  const subtreeCoord = isSubtreeRoot\n    ? tileCoordinates.getParentSubtreeCoordinates()\n    : tileCoordinates.getSubtreeCoordinates();\n\n  const that = this;\n\n  const subtree = await getSubtree(that, subtreeCoord);\n  // NOTE: these two subtree methods are ONLY used by voxels!\n  const isAvailable = isSubtreeRoot\n    ? subtree.childSubtreeIsAvailableAtCoordinates\n    : subtree.tileIsAvailableAtCoordinates;\n\n  const available = isAvailable.call(subtree, tileCoordinates);\n\n  if (!available) {\n    return Promise.reject(\n      `Tile is not available at level ${tileLevel}, x ${tileX}, y ${tileY}, z ${tileZ}.`,\n    );\n  }\n\n  const { contentUriTemplates, baseResource } = implicitTileset;\n  const gltfRelative = contentUriTemplates[0].getDerivedResource({\n    templateValues: tileCoordinates.getTemplateValues(),\n  });\n  const gltfResource = baseResource.getDerivedResource({\n    url: gltfRelative.url,\n  });\n\n  return VoxelContent.fromGltf(gltfResource);\n};\n\nexport default Cesium3DTilesVoxelProvider;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport ImageBasedLighting from \"./ImageBasedLighting.js\";\nimport Interval from \"../Core/Interval.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport IonResource from \"../Core/IonResource.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport ManagedArray from \"../Core/ManagedArray.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Axis from \"./Axis.js\";\nimport Cesium3DTile from \"./Cesium3DTile.js\";\nimport Cesium3DTileColorBlendMode from \"./Cesium3DTileColorBlendMode.js\";\nimport Cesium3DTileContentState from \"./Cesium3DTileContentState.js\";\nimport Cesium3DTilesetMetadata from \"./Cesium3DTilesetMetadata.js\";\nimport Cesium3DTileOptimizations from \"./Cesium3DTileOptimizations.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport Cesium3DTilesetCache from \"./Cesium3DTilesetCache.js\";\nimport Cesium3DTilesetHeatmap from \"./Cesium3DTilesetHeatmap.js\";\nimport Cesium3DTilesetStatistics from \"./Cesium3DTilesetStatistics.js\";\nimport Cesium3DTileStyleEngine from \"./Cesium3DTileStyleEngine.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport ClippingPolygonCollection from \"./ClippingPolygonCollection.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport ImplicitTileset from \"./ImplicitTileset.js\";\nimport ImplicitTileCoordinates from \"./ImplicitTileCoordinates.js\";\nimport LabelCollection from \"./LabelCollection.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PointCloudEyeDomeLighting from \"./PointCloudEyeDomeLighting.js\";\nimport PointCloudShading from \"./PointCloudShading.js\";\nimport ResourceCache from \"./ResourceCache.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\nimport SplitDirection from \"./SplitDirection.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileBoundingSphere from \"./TileBoundingSphere.js\";\nimport TileOrientedBoundingBox from \"./TileOrientedBoundingBox.js\";\nimport Cesium3DTilesetMostDetailedTraversal from \"./Cesium3DTilesetMostDetailedTraversal.js\";\nimport Cesium3DTilesetBaseTraversal from \"./Cesium3DTilesetBaseTraversal.js\";\nimport Cesium3DTilesetSkipTraversal from \"./Cesium3DTilesetSkipTraversal.js\";\nimport Ray from \"../Core/Ray.js\";\nimport DynamicEnvironmentMapManager from \"./DynamicEnvironmentMapManager.js\";\nimport ImageryLayerCollection from \"./ImageryLayerCollection.js\";\n\n/**\n * @typedef {object} Cesium3DTileset.ConstructorOptions\n *\n * Initialization options for the Cesium3DTileset constructor\n *\n * @property {boolean} [show=true] Determines if the tileset will be shown.\n * @property {Matrix4} [modelMatrix=Matrix4.IDENTITY] A 4x4 transformation matrix that transforms the tileset's root tile.\n * @property {Axis} [modelUpAxis=Axis.Y] Which axis is considered up when loading models for tile contents.\n * @property {Axis} [modelForwardAxis=Axis.X] Which axis is considered forward when loading models for tile contents.\n * @property {ShadowMode} [shadows=ShadowMode.ENABLED] Determines whether the tileset casts or receives shadows from light sources.\n * @property {number} [maximumScreenSpaceError=16] The maximum screen space error used to drive level of detail refinement.\n * @property {number} [cacheBytes=536870912] The size (in bytes) to which the tile cache will be trimmed, if the cache contains tiles not needed for the current view.\n * @property {number} [maximumCacheOverflowBytes=536870912] The maximum additional memory (in bytes) to allow for cache headroom, if more than {@link Cesium3DTileset#cacheBytes} are needed for the current view.\n * @property {boolean} [cullWithChildrenBounds=true] Optimization option. Whether to cull tiles using the union of their children bounding volumes.\n * @property {boolean} [cullRequestsWhileMoving=true] Optimization option. Don't request tiles that will likely be unused when they come back because of the camera's movement. This optimization only applies to stationary tilesets.\n * @property {number} [cullRequestsWhileMovingMultiplier=60.0] Optimization option. Multiplier used in culling requests while moving. Larger is more aggressive culling, smaller less aggressive culling.\n * @property {boolean} [preloadWhenHidden=false] Preload tiles when <code>tileset.show</code> is <code>false</code>. Loads tiles as if the tileset is visible but does not render them.\n * @property {boolean} [preloadFlightDestinations=true] Optimization option. Preload tiles at the camera's flight destination while the camera is in flight.\n * @property {boolean} [preferLeaves=false] Optimization option. Prefer loading of leaves first.\n * @property {boolean} [dynamicScreenSpaceError=true] Optimization option. For street-level horizon views, use lower resolution tiles far from the camera. This reduces the amount of data loaded and improves tileset loading time with a slight drop in visual quality in the distance.\n * @property {number} [dynamicScreenSpaceErrorDensity=2.0e-4] Similar to {@link Fog#density}, this option controls the camera distance at which the {@link Cesium3DTileset#dynamicScreenSpaceError} optimization applies. Larger values will cause tiles closer to the camera to be affected.\n * @property {number} [dynamicScreenSpaceErrorFactor=24.0] A parameter that controls the intensity of the {@link Cesium3DTileset#dynamicScreenSpaceError} optimization for tiles on the horizon. Larger values cause lower resolution tiles to load, improving runtime performance at a slight reduction of visual quality.\n * @property {number} [dynamicScreenSpaceErrorHeightFalloff=0.25] A ratio of the tileset's height that determines where \"street level\" camera views occur. When the camera is below this height, the {@link Cesium3DTileset#dynamicScreenSpaceError} optimization will have the maximum effect, and it will roll off above this value.\n * @property {number} [progressiveResolutionHeightFraction=0.3] Optimization option. If between (0.0, 0.5], tiles at or above the screen space error for the reduced screen resolution of <code>progressiveResolutionHeightFraction*screenHeight</code> will be prioritized first. This can help get a quick layer of tiles down while full resolution tiles continue to load.\n * @property {boolean} [foveatedScreenSpaceError=true] Optimization option. Prioritize loading tiles in the center of the screen by temporarily raising the screen space error for tiles around the edge of the screen. Screen space error returns to normal once all the tiles in the center of the screen as determined by the {@link Cesium3DTileset#foveatedConeSize} are loaded.\n * @property {number} [foveatedConeSize=0.1] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the cone size that determines which tiles are deferred. Tiles that are inside this cone are loaded immediately. Tiles outside the cone are potentially deferred based on how far outside the cone they are and their screen space error. This is controlled by {@link Cesium3DTileset#foveatedInterpolationCallback} and {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation}. Setting this to 0.0 means the cone will be the line formed by the camera position and its view direction. Setting this to 1.0 means the cone encompasses the entire field of view of the camera, disabling the effect.\n * @property {number} [foveatedMinimumScreenSpaceErrorRelaxation=0.0] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the starting screen space error relaxation for tiles outside the foveated cone. The screen space error will be raised starting with tileset value up to {@link Cesium3DTileset#maximumScreenSpaceError} based on the provided {@link Cesium3DTileset#foveatedInterpolationCallback}.\n * @property {Cesium3DTileset.foveatedInterpolationCallback} [foveatedInterpolationCallback=Math.lerp] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how much to raise the screen space error for tiles outside the foveated cone, interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}\n * @property {number} [foveatedTimeDelay=0.2] Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how long in seconds to wait after the camera stops moving before deferred tiles start loading in. This time delay prevents requesting tiles around the edges of the screen when the camera is moving. Setting this to 0.0 will immediately request all tiles in any given view.\n * @property {boolean} [skipLevelOfDetail=false] Optimization option. Determines if level of detail skipping should be applied during the traversal.\n * @property {number} [baseScreenSpaceError=1024] When <code>skipLevelOfDetail</code> is <code>true</code>, the screen space error that must be reached before skipping levels of detail.\n * @property {number} [skipScreenSpaceErrorFactor=16] When <code>skipLevelOfDetail</code> is <code>true</code>, a multiplier defining the minimum screen space error to skip. Used in conjunction with <code>skipLevels</code> to determine which tiles to load.\n * @property {number} [skipLevels=1] When <code>skipLevelOfDetail</code> is <code>true</code>, a constant defining the minimum number of levels to skip when loading tiles. When it is 0, no levels are skipped. Used in conjunction with <code>skipScreenSpaceErrorFactor</code> to determine which tiles to load.\n * @property {boolean} [immediatelyLoadDesiredLevelOfDetail=false] When <code>skipLevelOfDetail</code> is <code>true</code>, only tiles that meet the maximum screen space error will ever be downloaded. Skipping factors are ignored and just the desired tiles are loaded.\n * @property {boolean} [loadSiblings=false] When <code>skipLevelOfDetail</code> is <code>true</code>, determines whether siblings of visible tiles are always downloaded during traversal.\n * @property {ClippingPlaneCollection} [clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the tileset.\n * @property {ClippingPolygonCollection} [clippingPolygons] The {@link ClippingPolygonCollection} used to selectively disable rendering the tileset.\n * @property {ClassificationType} [classificationType] Determines whether terrain, 3D Tiles or both will be classified by this tileset. See {@link Cesium3DTileset#classificationType} for details about restrictions and limitations.\n * @property {HeightReference} [heightReference] Sets the {@link HeightReference} for point features in vector tilesets.\n * @property {Scene} [scene] The {@link CesiumWidget#scene} that the tileset will be rendered in, required for tilesets that specify a {@link heightReference} value for clamping 3D Tiles vector data content- like points, lines, and labels- to terrain or 3D tiles.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid determining the size and shape of the globe.\n * @property {object} [pointCloudShading] Options for constructing a {@link PointCloudShading} object to control point attenuation based on geometric error and lighting.\n * @property {Cartesian3} [lightColor] The light color when shading models. When <code>undefined</code> the scene's light color is used instead.\n * @property {ImageBasedLighting} [imageBasedLighting] The properties for managing image-based lighting for this tileset.\n * @property {DynamicEnvironmentMapManager.ConstructorOptions} [environmentMapOptions] The properties for managing dynamic environment maps on this tileset.\n * @property {boolean} [backFaceCulling=true] Whether to cull back-facing geometry. When true, back face culling is determined by the glTF material's doubleSided property; when false, back face culling is disabled.\n * @property {boolean} [enableShowOutline=true] Whether to enable outlines for models using the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. This can be set to false to avoid the additional processing of geometry at load time. When false, the showOutlines and outlineColor options are ignored.\n * @property {boolean} [showOutline=true] Whether to display the outline for models using the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. When true, outlines are displayed. When false, outlines are not displayed.\n * @property {Color} [outlineColor=Color.BLACK] The color to use when rendering outlines.\n * @property {boolean} [vectorClassificationOnly=false] Indicates that only the tileset's vector tiles should be used for classification.\n * @property {boolean} [vectorKeepDecodedPositions=false] Whether vector tiles should keep decoded positions in memory. This is used with {@link Cesium3DTileFeature.getPolylinePositions}.\n * @property {string|number} [featureIdLabel=\"featureId_0\"] Label of the feature ID set to use for picking and styling. For EXT_mesh_features, this is the feature ID's label property, or \"featureId_N\" (where N is the index in the featureIds array) when not specified. EXT_feature_metadata did not have a label field, so such feature ID sets are always labeled \"featureId_N\" where N is the index in the list of all feature Ids, where feature ID attributes are listed before feature ID textures. If featureIdLabel is an integer N, it is converted to the string \"featureId_N\" automatically. If both per-primitive and per-instance feature IDs are present, the instance feature IDs take priority.\n * @property {string|number} [instanceFeatureIdLabel=\"instanceFeatureId_0\"] Label of the instance feature ID set used for picking and styling. If instanceFeatureIdLabel is set to an integer N, it is converted to the string \"instanceFeatureId_N\" automatically. If both per-primitive and per-instance feature IDs are present, the instance feature IDs take priority.\n * @property {boolean} [showCreditsOnScreen=false] Whether to display the credits of this tileset on screen.\n * @property {SplitDirection} [splitDirection=SplitDirection.NONE] The {@link SplitDirection} split to apply to this tileset.\n * @property {boolean} [enableCollision=false] When <code>true</code>, enables collisions for camera or CPU picking. While this is <code>true</code> the camera will be prevented from going below the tileset surface if {@link ScreenSpaceCameraController#enableCollisionDetection} is true. This also affects the behavior of {@link HeightReference.CLAMP_TO_GROUND} when clamping to 3D Tiles surfaces. If <code>enableCollision</code> is <code>false</code>, entities may not be correctly clamped to the tileset geometry.\n * @property {boolean} [projectTo2D=false] Whether to accurately project the tileset to 2D. If this is true, the tileset will be projected accurately to 2D, but it will use more memory to do so. If this is false, the tileset will use less memory and will still render in 2D / CV mode, but its projected positions may be inaccurate. This cannot be set after the tileset has been created.\n * @property {boolean} [enablePick=false] Whether to allow collision and CPU picking with <code>pick</code> when using WebGL 1. If using WebGL 2 or above, this option will be ignored. If using WebGL 1 and this is true, the <code>pick</code> operation will work correctly, but it will use more memory to do so. If running with WebGL 1 and this is false, the model will use less memory, but <code>pick</code> will always return <code>undefined</code>. This cannot be set after the tileset has loaded.\n * @property {boolean} [asynchronouslyLoadImagery=false] Whether loading imagery that is draped over the tileset should be done asynchronously. If this is <code>true</code>, then tile content will be displayed with its original texture until the imagery texture is loaded. If this is <code>false</code>, then the tile content will not be displayed until the imagery is ready.\n * @property {string} [debugHeatmapTilePropertyName] The tile variable to colorize as a heatmap. All rendered tiles will be colorized relative to each other's specified variable value.\n * @property {boolean} [debugFreezeFrame=false] For debugging only. Determines if only the tiles from last frame should be used for rendering.\n * @property {boolean} [debugColorizeTiles=false] For debugging only. When true, assigns a random color to each tile.\n * @property {boolean} [enableDebugWireframe=false] For debugging only. This must be true for debugWireframe to work in WebGL1. This cannot be set after the tileset has been created.\n * @property {boolean} [debugWireframe=false] For debugging only. When true, render's each tile's content as a wireframe.\n * @property {boolean} [debugShowBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile.\n * @property {boolean} [debugShowContentBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile's content.\n * @property {boolean} [debugShowViewerRequestVolume=false] For debugging only. When true, renders the viewer request volume for each tile.\n * @property {boolean} [debugShowGeometricError=false] For debugging only. When true, draws labels to indicate the geometric error of each tile.\n * @property {boolean} [debugShowRenderingStatistics=false] For debugging only. When true, draws labels to indicate the number of commands, points, triangles and features for each tile.\n * @property {boolean} [debugShowMemoryUsage=false] For debugging only. When true, draws labels to indicate the texture and geometry memory in megabytes used by each tile.\n * @property {boolean} [debugShowUrl=false] For debugging only. When true, draws labels to indicate the url of each tile.\n */\n\n/**\n * A {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles tileset},\n * used for streaming massive heterogeneous 3D geospatial datasets.\n *\n * <div class=\"notice\">\n * This object is normally not instantiated directly, use {@link Cesium3DTileset.fromUrl}.\n * </div>\n *\n * @alias Cesium3DTileset\n * @constructor\n * @experimental Support for loading Gaussian splats content encoded with SPZ compression using the draft glTF extensions {@link https://github.com/CesiumGS/glTF/tree/draft-splat-spz/extensions/2.0/Khronos/KHR_gaussian_splatting | KHR_gaussian_splatting} and {@link https://github.com/CesiumGS/glTF/tree/draft-splat-spz/extensions/2.0/Khronos/KHR_gaussian_splatting_compression_spz_2 | KHR_gaussian_splatting_compression_spz_2} is experimental and is subject change without Cesium's standard deprecation policy.\n * @param {Cesium3DTileset.ConstructorOptions} options An object describing initialization options\n *\n * @exception {DeveloperError} The tileset must be 3D Tiles version 0.0 or 1.0.\n *\n * @example\n * try {\n *   const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *      \"http://localhost:8002/tilesets/Seattle/tileset.json\"\n *   );\n *   scene.primitives.add(tileset);\n * } catch (error) {\n *   console.error(`Error creating tileset: ${error}`);\n * }\n *\n * @example\n * // Turn on camera collisions with the tileset.\n * try {\n *   const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *      \"http://localhost:8002/tilesets/Seattle/tileset.json\",\n *      { enableCollision: true }\n *   );\n *   scene.primitives.add(tileset);\n * } catch (error) {\n *   console.error(`Error creating tileset: ${error}`);\n * }\n *\n * @example\n * // Common setting for the skipLevelOfDetail optimization\n * const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *   \"http://localhost:8002/tilesets/Seattle/tileset.json\", {\n *      skipLevelOfDetail: true,\n *      baseScreenSpaceError: 1024,\n *      skipScreenSpaceErrorFactor: 16,\n *      skipLevels: 1,\n *      immediatelyLoadDesiredLevelOfDetail: false,\n *      loadSiblings: false,\n *      cullWithChildrenBounds: true\n * });\n * scene.primitives.add(tileset);\n *\n * @example\n * // Common settings for the dynamicScreenSpaceError optimization\n * const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *   \"http://localhost:8002/tilesets/Seattle/tileset.json\", {\n *      dynamicScreenSpaceError: true,\n *      dynamicScreenSpaceErrorDensity: 2.0e-4,\n *      dynamicScreenSpaceErrorFactor: 24.0,\n *      dynamicScreenSpaceErrorHeightFalloff: 0.25\n * });\n * scene.primitives.add(tileset);\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles specification}\n */\nfunction Cesium3DTileset(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._url = undefined;\n  this._basePath = undefined;\n  this._root = undefined;\n  this._resource = undefined;\n  this._asset = undefined; // Metadata for the entire tileset\n  this._properties = undefined; // Metadata for per-model/point/etc properties\n  this._geometricError = undefined; // Geometric error when the tree is not rendered at all\n  this._scaledGeometricError = undefined; // Geometric error scaled by root tile scale\n  this._extensionsUsed = undefined;\n  this._extensions = undefined;\n  this._modelUpAxis = undefined;\n  this._modelForwardAxis = undefined;\n  this._cache = new Cesium3DTilesetCache();\n  this._processingQueue = [];\n  this._selectedTiles = [];\n  this._emptyTiles = [];\n  this._requestedTiles = [];\n  this._selectedTilesToStyle = [];\n  this._loadTimestamp = undefined;\n  this._timeSinceLoad = 0.0;\n  this._updatedVisibilityFrame = 0;\n  this._updatedModelMatrixFrame = 0;\n  this._modelMatrixChanged = false;\n  this._previousModelMatrix = undefined;\n  this._extras = undefined;\n  this._credits = undefined;\n\n  this._showCreditsOnScreen = options.showCreditsOnScreen ?? false;\n\n  this._cullWithChildrenBounds = options.cullWithChildrenBounds ?? true;\n  this._allTilesAdditive = true;\n\n  this._hasMixedContent = false;\n\n  this._stencilClearCommand = undefined;\n  this._backfaceCommands = new ManagedArray();\n\n  this._maximumScreenSpaceError = options.maximumScreenSpaceError ?? 16;\n  this._memoryAdjustedScreenSpaceError = this._maximumScreenSpaceError;\n\n  this._cacheBytes = options.cacheBytes ?? 512 * 1024 * 1024;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"cacheBytes\", this._cacheBytes, 0);\n  //>>includeEnd('debug');\n\n  const maximumCacheOverflowBytes =\n    options.maximumCacheOverflowBytes ?? 512 * 1024 * 1024;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"maximumCacheOverflowBytes\",\n    maximumCacheOverflowBytes,\n    0,\n  );\n  //>>includeEnd('debug');\n  this._maximumCacheOverflowBytes = maximumCacheOverflowBytes;\n\n  this._styleEngine = new Cesium3DTileStyleEngine();\n  this._styleApplied = false;\n\n  this._modelMatrix = defined(options.modelMatrix)\n    ? Matrix4.clone(options.modelMatrix)\n    : Matrix4.clone(Matrix4.IDENTITY);\n\n  this._addHeightCallbacks = [];\n\n  this._statistics = new Cesium3DTilesetStatistics();\n  this._statisticsLast = new Cesium3DTilesetStatistics();\n  this._statisticsPerPass = new Array(Cesium3DTilePass.NUMBER_OF_PASSES);\n\n  for (let i = 0; i < Cesium3DTilePass.NUMBER_OF_PASSES; ++i) {\n    this._statisticsPerPass[i] = new Cesium3DTilesetStatistics();\n  }\n\n  this._requestedTilesInFlight = [];\n\n  this._maximumPriority = {\n    foveatedFactor: -Number.MAX_VALUE,\n    depth: -Number.MAX_VALUE,\n    distance: -Number.MAX_VALUE,\n    reverseScreenSpaceError: -Number.MAX_VALUE,\n  };\n  this._minimumPriority = {\n    foveatedFactor: Number.MAX_VALUE,\n    depth: Number.MAX_VALUE,\n    distance: Number.MAX_VALUE,\n    reverseScreenSpaceError: Number.MAX_VALUE,\n  };\n  this._heatmap = new Cesium3DTilesetHeatmap(\n    options.debugHeatmapTilePropertyName,\n  );\n\n  /**\n   * Optimization option. Don't request tiles that will likely be unused when they come back because of the camera's movement. This optimization only applies to stationary tilesets.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.cullRequestsWhileMoving = options.cullRequestsWhileMoving ?? true;\n  this._cullRequestsWhileMoving = false;\n\n  /**\n   * Optimization option. Multiplier used in culling requests while moving. Larger is more aggressive culling, smaller less aggressive culling.\n   *\n   * @type {number}\n   * @default 60.0\n   */\n  this.cullRequestsWhileMovingMultiplier =\n    options.cullRequestsWhileMovingMultiplier ?? 60.0;\n\n  /**\n   * Optimization option. If between (0.0, 0.5], tiles at or above the screen space error for the reduced screen resolution of <code>progressiveResolutionHeightFraction*screenHeight</code> will be prioritized first. This can help get a quick layer of tiles down while full resolution tiles continue to load.\n   *\n   * @type {number}\n   * @default 0.3\n   */\n  this.progressiveResolutionHeightFraction = CesiumMath.clamp(\n    options.progressiveResolutionHeightFraction ?? 0.3,\n    0.0,\n    0.5,\n  );\n\n  /**\n   * Optimization option. Prefer loading of leaves first.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.preferLeaves = options.preferLeaves ?? false;\n\n  this._tilesLoaded = false;\n  this._initialTilesLoaded = false;\n\n  this._tileDebugLabels = undefined;\n\n  this._classificationType = options.classificationType;\n  this._heightReference = options.heightReference;\n  this._scene = options.scene;\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.WGS84;\n\n  this._initialClippingPlanesOriginMatrix = Matrix4.IDENTITY; // Computed from the tileset JSON.\n  this._clippingPlanesOriginMatrix = undefined; // Combines the above with any run-time transforms.\n  this._clippingPlanesOriginMatrixDirty = true;\n\n  this._vectorClassificationOnly = options.vectorClassificationOnly ?? false;\n\n  this._vectorKeepDecodedPositions =\n    options.vectorKeepDecodedPositions ?? false;\n\n  /**\n   * The collection of <code>ImageryLayer</code> objects providing 2D georeferenced\n   * image data that will be rendered over the tileset.\n   *\n   * @private\n   * @type {ImageryLayerCollection}\n   * @readonly\n   */\n  this._imageryLayers = new ImageryLayerCollection(this);\n\n  /**\n   * A counter that will be increased for each modification of the\n   * imagery layers (i.e. for each layerAdded, layerRemoved,\n   * layerMoved, or layerShownOrHidden event). This can be used\n   * by the <code>ModelImagery</code> class to detect changes in\n   * the imagery, and trigger the appropriate updates.\n   *\n   * @private\n   */\n  this._imageryLayersModificationCounter = 0;\n\n  /**\n   * A listener that will be attached to the layerAdded, layerRemoved,\n   * layerMoved, and layerShownOrHidden events of the imagery layers,\n   * and increment the imagery layers modification counter for each\n   * event.\n   *\n   * @private\n   * @readonly\n   */\n  this._imageryLayersListener = () => {\n    this._imageryLayersModificationCounter++;\n  };\n\n  // Attach the imagery layers listener to all events of\n  // the imagery layers collection\n  this.imageryLayers.layerAdded.addEventListener(this._imageryLayersListener);\n  this.imageryLayers.layerRemoved.addEventListener(this._imageryLayersListener);\n  this.imageryLayers.layerMoved.addEventListener(this._imageryLayersListener);\n  this.imageryLayers.layerShownOrHidden.addEventListener(\n    this._imageryLayersListener,\n  );\n\n  /**\n   * Whether loading imagery that is draped over the tileset should be\n   * done asynchronously. If this is <code>true</code>, then tile content\n   * will be displayed with its original texture until the imagery texture\n   * is loaded. If this is <code>false</code>, then the tile content will\n   * not be displayed until the imagery is ready.\n   *\n   * @private\n   */\n  this._asynchronouslyLoadImagery = options.asynchronouslyLoadImagery ?? false;\n\n  /**\n   * Preload tiles when <code>tileset.show</code> is <code>false</code>. Loads tiles as if the tileset is visible but does not render them.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.preloadWhenHidden = options.preloadWhenHidden ?? false;\n\n  /**\n   * Optimization option. Fetch tiles at the camera's flight destination while the camera is in flight.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.preloadFlightDestinations = options.preloadFlightDestinations ?? true;\n  this._pass = undefined; // Cesium3DTilePass\n\n  /**\n   * Optimization option. For street-level horizon views, use lower resolution tiles far from the camera. This reduces\n   * the amount of data loaded and improves tileset loading time with a slight drop in visual quality in the distance.\n   * <p>\n   * This optimization is strongest when the camera is close to the ground plane of the tileset and looking at the\n   * horizon. Furthermore, the results are more accurate for tightly fitting bounding volumes like box and region.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.dynamicScreenSpaceError = options.dynamicScreenSpaceError ?? true;\n\n  /**\n   * Optimization option. Prioritize loading tiles in the center of the screen by temporarily raising the\n   * screen space error for tiles around the edge of the screen. Screen space error returns to normal once all\n   * the tiles in the center of the screen as determined by the {@link Cesium3DTileset#foveatedConeSize} are loaded.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.foveatedScreenSpaceError = options.foveatedScreenSpaceError ?? true;\n  this._foveatedConeSize = options.foveatedConeSize ?? 0.1;\n  this._foveatedMinimumScreenSpaceErrorRelaxation =\n    options.foveatedMinimumScreenSpaceErrorRelaxation ?? 0.0;\n\n  /**\n   * Gets or sets a callback to control how much to raise the screen space error for tiles outside the foveated cone,\n   * interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}.\n   *\n   * @type {Cesium3DTileset.foveatedInterpolationCallback}\n   */\n  this.foveatedInterpolationCallback =\n    options.foveatedInterpolationCallback ?? CesiumMath.lerp;\n\n  /**\n   * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control\n   * how long in seconds to wait after the camera stops moving before deferred tiles start loading in.\n   * This time delay prevents requesting tiles around the edges of the screen when the camera is moving.\n   * Setting this to 0.0 will immediately request all tiles in any given view.\n   *\n   * @type {number}\n   * @default 0.2\n   */\n  this.foveatedTimeDelay = options.foveatedTimeDelay ?? 0.2;\n\n  /**\n   * Similar to {@link Fog#density}, this option controls the camera distance at which the {@link Cesium3DTileset#dynamicScreenSpaceError}\n   * optimization applies. Larger values will cause tiles closer to the camera to be affected. This value must be\n   * non-negative.\n   * <p>\n   * This optimization works by rolling off the tile screen space error (SSE) with camera distance like a bell curve.\n   * This has the effect of selecting lower resolution tiles far from the camera. Near the camera, no adjustment is\n   * made. For tiles further away, the SSE is reduced by up to {@link Cesium3DTileset#dynamicScreenSpaceErrorFactor}\n   * (measured in pixels of error).\n   * </p>\n   * <p>\n   * Increasing the density makes the bell curve narrower so tiles closer to the camera are affected. This is analagous\n   * to moving fog closer to the camera.\n   * </p>\n   * <p>\n   * When the density is 0, the optimization will have no effect on the tileset.\n   * </p>\n   *\n   * @type {number}\n   * @default 2.0e-4\n   */\n  this.dynamicScreenSpaceErrorDensity =\n    options.dynamicScreenSpaceErrorDensity ?? 2.0e-4;\n\n  /**\n   * A parameter that controls the intensity of the {@link Cesium3DTileset#dynamicScreenSpaceError} optimization for\n   * tiles on the horizon. Larger values cause lower resolution tiles to load, improving runtime performance at a slight\n   * reduction of visual quality. The value must be non-negative.\n   * <p>\n   * More specifically, this parameter represents the maximum adjustment to screen space error (SSE) in pixels for tiles\n   * far away from the camera. See {@link Cesium3DTileset#dynamicScreenSpaceErrorDensity} for more details about how\n   * this optimization works.\n   * </p>\n   * <p>\n   * When the SSE factor is set to 0, the optimization will have no effect on the tileset.\n   * </p>\n   *\n   * @type {number}\n   * @default 24.0\n   */\n  this.dynamicScreenSpaceErrorFactor =\n    options.dynamicScreenSpaceErrorFactor ?? 24.0;\n\n  /**\n   * A ratio of the tileset's height that determines \"street level\" for the {@link Cesium3DTileset#dynamicScreenSpaceError}\n   * optimization. When the camera is below this height, the dynamic screen space error optimization will have the maximum\n   * effect, and it will roll off above this value. Valid values are between 0.0 and 1.0.\n   * <p>\n   *\n   * @type {number}\n   * @default 0.25\n   */\n  this.dynamicScreenSpaceErrorHeightFalloff =\n    options.dynamicScreenSpaceErrorHeightFalloff ?? 0.25;\n\n  // Updated based on the camera position and direction\n  this._dynamicScreenSpaceErrorComputedDensity = 0.0;\n\n  /**\n   * Determines whether the tileset casts or receives shadows from light sources.\n   * <p>\n   * Enabling shadows has a performance impact. A tileset that casts shadows must be rendered twice, once from the camera and again from the light's point of view.\n   * </p>\n   * <p>\n   * Shadows are rendered only when {@link Viewer#shadows} is <code>true</code>.\n   * </p>\n   *\n   * @type {ShadowMode}\n   * @default ShadowMode.ENABLED\n   */\n  this.shadows = options.shadows ?? ShadowMode.ENABLED;\n\n  /**\n   * Determines if the tileset will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * Defines how per-feature colors set from the Cesium API or declarative styling blend with the source colors from\n   * the original feature, e.g. glTF material or per-point color in the tile.\n   *\n   * @type {Cesium3DTileColorBlendMode}\n   * @default Cesium3DTileColorBlendMode.HIGHLIGHT\n   */\n  this.colorBlendMode = Cesium3DTileColorBlendMode.HIGHLIGHT;\n\n  /**\n   * Defines the value used to linearly interpolate between the source color and feature color when the {@link Cesium3DTileset#colorBlendMode} is <code>MIX</code>.\n   * A value of 0.0 results in the source color while a value of 1.0 results in the feature color, with any value in-between\n   * resulting in a mix of the source color and feature color.\n   *\n   * @type {number}\n   * @default 0.5\n   */\n  this.colorBlendAmount = 0.5;\n\n  this._pointCloudShading = new PointCloudShading(options.pointCloudShading);\n  this._pointCloudEyeDomeLighting = new PointCloudEyeDomeLighting();\n\n  /**\n   * The event fired to indicate progress of loading new tiles.  This event is fired when a new tile\n   * is requested, when a requested tile is finished downloading, and when a downloaded tile has been\n   * processed and is ready to render.\n   * <p>\n   * The number of pending tile requests, <code>numberOfPendingRequests</code>, and number of tiles\n   * processing, <code>numberOfTilesProcessing</code> are passed to the event listener.\n   * </p>\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * tileset.loadProgress.addEventListener(function(numberOfPendingRequests, numberOfTilesProcessing) {\n   *     if ((numberOfPendingRequests === 0) && (numberOfTilesProcessing === 0)) {\n   *         console.log('Stopped loading');\n   *         return;\n   *     }\n   *\n   *     console.log(`Loading: requests: ${numberOfPendingRequests}, processing: ${numberOfTilesProcessing}`);\n   * });\n   */\n  this.loadProgress = new Event();\n\n  /**\n   * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. The tileset\n   * is completely loaded for this view.\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * tileset.allTilesLoaded.addEventListener(function() {\n   *     console.log('All tiles are loaded');\n   * });\n   *\n   * @see Cesium3DTileset#tilesLoaded\n   */\n  this.allTilesLoaded = new Event();\n\n  /**\n   * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. This event\n   * is fired once when all tiles in the initial view are loaded.\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * tileset.initialTilesLoaded.addEventListener(function() {\n   *     console.log('Initial tiles are loaded');\n   * });\n   *\n   * @see Cesium3DTileset#allTilesLoaded\n   */\n  this.initialTilesLoaded = new Event();\n\n  /**\n   * The event fired to indicate that a tile's content was loaded.\n   * <p>\n   * The loaded {@link Cesium3DTile} is passed to the event listener.\n   * </p>\n   * <p>\n   * This event is fired during the tileset traversal while the frame is being rendered\n   * so that updates to the tile take effect in the same frame.  Do not create or modify\n   * Cesium entities or primitives during the event listener.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * tileset.tileLoad.addEventListener(function(tile) {\n   *     console.log('A tile was loaded.');\n   * });\n   */\n  this.tileLoad = new Event();\n\n  /**\n   * The event fired to indicate that a tile's content was unloaded.\n   * <p>\n   * The unloaded {@link Cesium3DTile} is passed to the event listener.\n   * </p>\n   * <p>\n   * This event is fired immediately before the tile's content is unloaded while the frame is being\n   * rendered so that the event listener has access to the tile's content.  Do not create\n   * or modify Cesium entities or primitives during the event listener.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * tileset.tileUnload.addEventListener(function(tile) {\n   *     console.log('A tile was unloaded from the cache.');\n   * });\n   *\n   * @see Cesium3DTileset#cacheBytes\n   * @see Cesium3DTileset#trimLoadedTiles\n   */\n  this.tileUnload = new Event();\n\n  /**\n   * The event fired to indicate that a tile's content failed to load.\n   * <p>\n   * If there are no event listeners, error messages will be logged to the console.\n   * </p>\n   * <p>\n   * The error object passed to the listener contains two properties:\n   * <ul>\n   * <li><code>url</code>: the url of the failed tile.</li>\n   * <li><code>message</code>: the error message.</li>\n   * </ul>\n   * <p>\n   * If multiple contents are present, this event is raised once per inner content with errors.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * tileset.tileFailed.addEventListener(function(error) {\n   *     console.log(`An error occurred loading tile: ${error.url}`);\n   *     console.log(`Error: ${error.message}`);\n   * });\n   */\n  this.tileFailed = new Event();\n\n  /**\n   * This event fires once for each visible tile in a frame.  This can be used to manually\n   * style a tileset.\n   * <p>\n   * The visible {@link Cesium3DTile} is passed to the event listener.\n   * </p>\n   * <p>\n   * This event is fired during the tileset traversal while the frame is being rendered\n   * so that updates to the tile take effect in the same frame.  Do not create or modify\n   * Cesium entities or primitives during the event listener.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * tileset.tileVisible.addEventListener(function(tile) {\n   *     if (tile.content instanceof Cesium.Model3DTileContent) {\n   *         console.log('A 3D model tile is visible.');\n   *     }\n   * });\n   *\n   * @example\n   * // Apply a red style and then manually set random colors for every other feature when the tile becomes visible.\n   * tileset.style = new Cesium.Cesium3DTileStyle({\n   *     color : 'color(\"red\")'\n   * });\n   * tileset.tileVisible.addEventListener(function(tile) {\n   *     const content = tile.content;\n   *     const featuresLength = content.featuresLength;\n   *     for (let i = 0; i < featuresLength; i+=2) {\n   *         content.getFeature(i).color = Cesium.Color.fromRandom();\n   *     }\n   * });\n   */\n  this.tileVisible = new Event();\n\n  /**\n   * Optimization option. Determines if level of detail skipping should be applied during the traversal.\n   * <p>\n   * The common strategy for replacement-refinement traversal is to store all levels of the tree in memory and require\n   * all children to be loaded before the parent can refine. With this optimization levels of the tree can be skipped\n   * entirely and children can be rendered alongside their parents. The tileset requires significantly less memory when\n   * using this optimization.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.skipLevelOfDetail = options.skipLevelOfDetail ?? false;\n\n  this._disableSkipLevelOfDetail = false;\n\n  /**\n   * The screen space error that must be reached before skipping levels of detail.\n   * <p>\n   * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n   * </p>\n   *\n   * @type {number}\n   * @default 1024\n   */\n  this.baseScreenSpaceError = options.baseScreenSpaceError ?? 1024;\n\n  /**\n   * Multiplier defining the minimum screen space error to skip.\n   * For example, if a tile has screen space error of 100, no tiles will be loaded unless they\n   * are leaves or have a screen space error <code><= 100 / skipScreenSpaceErrorFactor</code>.\n   * <p>\n   * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n   * </p>\n   *\n   * @type {number}\n   * @default 16\n   */\n  this.skipScreenSpaceErrorFactor = options.skipScreenSpaceErrorFactor ?? 16;\n\n  /**\n   * Constant defining the minimum number of levels to skip when loading tiles. When it is 0, no levels are skipped.\n   * For example, if a tile is level 1, no tiles will be loaded unless they are at level greater than 2.\n   * <p>\n   * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n   * </p>\n   *\n   * @type {number}\n   * @default 1\n   */\n  this.skipLevels = options.skipLevels ?? 1;\n\n  /**\n   * When true, only tiles that meet the maximum screen space error will ever be downloaded.\n   * Skipping factors are ignored and just the desired tiles are loaded.\n   * <p>\n   * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.immediatelyLoadDesiredLevelOfDetail =\n    options.immediatelyLoadDesiredLevelOfDetail ?? false;\n\n  /**\n   * Determines whether siblings of visible tiles are always downloaded during traversal.\n   * This may be useful for ensuring that tiles are already available when the viewer turns left/right.\n   * <p>\n   * Only used when {@link Cesium3DTileset#skipLevelOfDetail} is <code>true</code>.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.loadSiblings = options.loadSiblings ?? false;\n\n  this._clippingPlanes = undefined;\n  if (defined(options.clippingPlanes)) {\n    ClippingPlaneCollection.setOwner(\n      options.clippingPlanes,\n      this,\n      \"_clippingPlanes\",\n    );\n  }\n\n  this._clippingPolygons = undefined;\n  if (defined(options.clippingPolygons)) {\n    ClippingPolygonCollection.setOwner(\n      options.clippingPolygons,\n      this,\n      \"_clippingPolygons\",\n    );\n  }\n\n  if (defined(options.imageBasedLighting)) {\n    this._imageBasedLighting = options.imageBasedLighting;\n    this._shouldDestroyImageBasedLighting = false;\n  } else {\n    this._imageBasedLighting = new ImageBasedLighting();\n    this._shouldDestroyImageBasedLighting = true;\n  }\n\n  this._environmentMapManager = new DynamicEnvironmentMapManager(\n    options.environmentMapOptions,\n  );\n\n  /**\n   * The light color when shading models. When <code>undefined</code> the scene's light color is used instead.\n   * <p>\n   * For example, disabling additional light sources by setting\n   * <code>tileset.imageBasedLighting.imageBasedLightingFactor = new Cartesian2(0.0, 0.0)</code>\n   * will make the tileset much darker. Here, increasing the intensity of the light source will make the tileset brighter.\n   * </p>\n   *\n   * @type {Cartesian3}\n   * @default undefined\n   */\n  this.lightColor = options.lightColor;\n\n  /**\n   * Whether to cull back-facing geometry. When true, back face culling is determined\n   * by the glTF material's doubleSided property; when false, back face culling is disabled.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.backFaceCulling = options.backFaceCulling ?? true;\n\n  this._enableShowOutline = options.enableShowOutline ?? true;\n\n  /**\n   * Whether to display the outline for models using the\n   * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension.\n   * When true, outlines are displayed. When false, outlines are not displayed.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.showOutline = options.showOutline ?? true;\n\n  /**\n   * The color to use when rendering outlines.\n   *\n   * @type {Color}\n   * @default Color.BLACK\n   */\n  this.outlineColor = options.outlineColor ?? Color.BLACK;\n\n  /**\n   * The {@link SplitDirection} to apply to this tileset.\n   *\n   * @type {SplitDirection}\n   * @default {@link SplitDirection.NONE}\n   */\n  this.splitDirection = options.splitDirection ?? SplitDirection.NONE;\n\n  /**\n   * If <code>true</code>, allows collisions for camera collisions or picking. While this is  <code>true</code> the camera will be prevented from going in or below the tileset surface if {@link ScreenSpaceCameraController#enableCollisionDetection} is true. This can have performance implecations if the tileset contains tile with a larger number of vertices.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.enableCollision = options.enableCollision ?? false;\n  this._projectTo2D = options.projectTo2D ?? false;\n  this._enablePick = options.enablePick ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * Determines if only the tiles from last frame should be used for rendering.  This\n   * effectively \"freezes\" the tileset to the previous frame so it is possible to zoom\n   * out and see what was rendered.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugFreezeFrame = options.debugFreezeFrame ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, assigns a random color to each tile.  This is useful for visualizing\n   * what features belong to what tiles, especially with additive refinement where features\n   * from parent tiles may be interleaved with features from child tiles.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugColorizeTiles = options.debugColorizeTiles ?? false;\n\n  this._enableDebugWireframe = options.enableDebugWireframe ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, renders each tile's content as a wireframe.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugWireframe = options.debugWireframe ?? false;\n\n  // Warning for improper setup of debug wireframe\n  if (this.debugWireframe === true && this._enableDebugWireframe === false) {\n    oneTimeWarning(\n      \"tileset-debug-wireframe-ignored\",\n      \"enableDebugWireframe must be set to true in the Cesium3DTileset constructor, otherwise debugWireframe will be ignored.\",\n    );\n  }\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, renders the bounding volume for each visible tile.  The bounding volume is\n   * white if the tile has a content bounding volume or is empty; otherwise, it is red.  Tiles that don't meet the\n   * screen space error and are still refining to their descendants are yellow.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, renders the bounding volume for each visible tile's content. The bounding volume is\n   * blue if the tile has a content bounding volume; otherwise it is red.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugShowContentBoundingVolume =\n    options.debugShowContentBoundingVolume ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, renders the viewer request volume for each tile.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugShowViewerRequestVolume =\n    options.debugShowViewerRequestVolume ?? false;\n\n  /**\n   * @private\n   * @type {LabelCollection|undefined}\n   */\n  this._tileDebugLabels = undefined;\n  this.debugPickedTileLabelOnly = false;\n  this.debugPickedTile = undefined;\n  this.debugPickPosition = undefined;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, draws labels to indicate the geometric error of each tile.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugShowGeometricError = options.debugShowGeometricError ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, draws labels to indicate the number of commands, points, triangles and features of each tile.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugShowRenderingStatistics =\n    options.debugShowRenderingStatistics ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, draws labels to indicate the geometry and texture memory usage of each tile.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugShowMemoryUsage = options.debugShowMemoryUsage ?? false;\n\n  /**\n   * This property is for debugging only; it is not optimized for production use.\n   * <p>\n   * When true, draws labels to indicate the url of each tile.\n   * </p>\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.debugShowUrl = options.debugShowUrl ?? false;\n\n  /**\n   * Function for examining vector lines as they are being streamed.\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @type {Function}\n   */\n  this.examineVectorLinesFunction = undefined;\n\n  // this is the underlying Cesium3DTileMetadata object, whether it came from\n  // the 3DTILES_metadata extension or a 3D Tiles 1.1 tileset JSON. Getters\n  // like tileset.metadata and tileset.schema will delegate to this object.\n  this._metadataExtension = undefined;\n\n  this._customShader = options.customShader;\n\n  let featureIdLabel = options.featureIdLabel ?? \"featureId_0\";\n  if (typeof featureIdLabel === \"number\") {\n    featureIdLabel = `featureId_${featureIdLabel}`;\n  }\n  this._featureIdLabel = featureIdLabel;\n\n  let instanceFeatureIdLabel =\n    options.instanceFeatureIdLabel ?? \"instanceFeatureId_0\";\n  if (typeof instanceFeatureIdLabel === \"number\") {\n    instanceFeatureIdLabel = `instanceFeatureId_${instanceFeatureIdLabel}`;\n  }\n  this._instanceFeatureIdLabel = instanceFeatureIdLabel;\n}\n\nObject.defineProperties(Cesium3DTileset.prototype, {\n  /**\n   * NOTE: This getter exists so that `Picking.js` can differentiate between\n   *       PrimitiveCollection and Cesium3DTileset objects without inflating\n   *       the size of the module via `instanceof Cesium3DTileset`\n   * @private\n   */\n  isCesium3DTileset: {\n    get: function () {\n      return true;\n    },\n  },\n\n  /**\n   * Gets the tileset's asset object property, which contains metadata about the tileset.\n   * <p>\n   * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification#reference-asset|asset schema reference}\n   * in the 3D Tiles spec for the full set of properties.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  asset: {\n    get: function () {\n      return this._asset;\n    },\n  },\n\n  /**\n   * Gets the tileset's extensions object property.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n\n  /**\n   * The {@link ClippingPlaneCollection} used to selectively disable rendering the tileset.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {ClippingPlaneCollection}\n   */\n  clippingPlanes: {\n    get: function () {\n      return this._clippingPlanes;\n    },\n    set: function (value) {\n      ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n    },\n  },\n\n  /**\n   * The {@link ClippingPolygonCollection} used to selectively disable rendering the tileset.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {ClippingPolygonCollection}\n   */\n  clippingPolygons: {\n    get: function () {\n      return this._clippingPolygons;\n    },\n    set: function (value) {\n      ClippingPolygonCollection.setOwner(value, this, \"_clippingPolygons\");\n    },\n  },\n\n  /**\n   * The collection of <code>ImageryLayer</code> objects providing 2D georeferenced\n   * image data that will be rendered over the tileset.\n   *\n   * The imagery will be draped over glTF, B3DM, PNTS, or GeoJSON tile content.\n   *\n   * @see ImageryLayer\n   *\n   * @memberof Cesium3DTileset.prototype\n   * @readonly\n   * @type {ImageryLayerCollection}\n   *\n   * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @example\n   * // Drape Bing Maps Aerial imagery over the tileset\n   * const imageryProvider = await Cesium.createWorldImageryAsync({\n   *   style: Cesium.IonWorldImageryStyle.AERIAL,\n   * });\n   * const imageryLayer = new ImageryLayer(imageryProvider);\n   * tileset.imageryLayers.add(imageryLayer);\n   */\n  imageryLayers: {\n    get: function () {\n      return this._imageryLayers;\n    },\n  },\n\n  /**\n   * The modification counter of the imagery layers.\n   *\n   * This is incremented for each modification (layerAdded, layerMoved,\n   * layerRemoved, layerShownOrHidden) of the imagery layers, and can\n   * be used <b>internally</b> (by <code>ModelPrimitiveImagery</code>)\n   * to trigger updates whenever the collection of imagery layers\n   * changes.\n   *\n   * @memberof Cesium3DTileset.prototype\n   * @readonly\n   * @type {number}\n   * @private\n   */\n  imageryLayersModificationCounter: {\n    get: function () {\n      return this._imageryLayersModificationCounter;\n    },\n  },\n\n  /**\n   * Whether loading imagery that is draped over the tileset should be\n   * done asynchronously.\n   *\n   * @memberof Cesium3DTileset.prototype\n   * @readonly\n   * @type {boolean}\n   * @private\n   */\n  asynchronouslyLoadImagery: {\n    get: function () {\n      return this._asynchronouslyLoadImagery;\n    },\n  },\n\n  /**\n   * Gets the tileset's properties dictionary object, which contains metadata about per-feature properties.\n   * <p>\n   * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification#reference-properties|properties schema reference}\n   * in the 3D Tiles spec for the full set of properties.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {object}\n   * @readonly\n   *\n   * @example\n   * console.log(`Maximum building height: ${tileset.properties.height.maximum}`);\n   * console.log(`Minimum building height: ${tileset.properties.height.minimum}`);\n   *\n   * @see Cesium3DTileFeature#getProperty\n   * @see Cesium3DTileFeature#setProperty\n   */\n  properties: {\n    get: function () {\n      return this._properties;\n    },\n  },\n\n  /**\n   * When <code>true</code>, all tiles that meet the screen space error this frame are loaded. The tileset is\n   * completely loaded for this view.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   *\n   * @see Cesium3DTileset#allTilesLoaded\n   */\n  tilesLoaded: {\n    get: function () {\n      return this._tilesLoaded;\n    },\n  },\n\n  /**\n   * The resource used to fetch the tileset JSON file\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n\n  /**\n   * The base path that non-absolute paths in tileset JSON file are relative to.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @deprecated\n   */\n  basePath: {\n    get: function () {\n      deprecationWarning(\n        \"Cesium3DTileset.basePath\",\n        \"Cesium3DTileset.basePath has been deprecated. All tiles are relative to the url of the tileset JSON file that contains them. Use the url property instead.\",\n      );\n      return this._basePath;\n    },\n  },\n\n  /**\n   * The style, defined using the\n   * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language},\n   * applied to each feature in the tileset.\n   * <p>\n   * Assign <code>undefined</code> to remove the style, which will restore the visual\n   * appearance of the tileset to its default when no style was applied.\n   * </p>\n   * <p>\n   * The style is applied to a tile before the {@link Cesium3DTileset#tileVisible}\n   * event is raised, so code in <code>tileVisible</code> can manually set a feature's\n   * properties (e.g. color and show) after the style is applied. When\n   * a new style is assigned any manually set properties are overwritten.\n   * </p>\n   * <p>\n   * Use an always \"true\" condition to specify the Color for all objects that are not\n   * overridden by pre-existing conditions. Otherwise, the default color Cesium.Color.White\n   * will be used. Similarly, use an always \"true\" condition to specify the show property\n   * for all objects that are not overridden by pre-existing conditions. Otherwise, the\n   * default show value true will be used.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {Cesium3DTileStyle|undefined}\n   *\n   * @default undefined\n   *\n   * @example\n   * tileset.style = new Cesium.Cesium3DTileStyle({\n   *    color : {\n   *        conditions : [\n   *            ['${Height} >= 100', 'color(\"purple\", 0.5)'],\n   *            ['${Height} >= 50', 'color(\"red\")'],\n   *            ['true', 'color(\"blue\")']\n   *        ]\n   *    },\n   *    show : '${Height} > 0',\n   *    meta : {\n   *        description : '\"Building id ${id} has height ${Height}.\"'\n   *    }\n   * });\n   *\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}\n   */\n  style: {\n    get: function () {\n      return this._styleEngine.style;\n    },\n    set: function (value) {\n      this._styleEngine.style = value;\n    },\n  },\n\n  /**\n   * A custom shader to apply to all tiles in the tileset. Only used for\n   * contents that use {@link Model}. Using custom shaders with a\n   * {@link Cesium3DTileStyle} may lead to undefined behavior.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {CustomShader|undefined}\n   *\n   * @default undefined\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  customShader: {\n    get: function () {\n      return this._customShader;\n    },\n    set: function (value) {\n      this._customShader = value;\n    },\n  },\n\n  /**\n   * Whether the tileset is rendering different levels of detail in the same view.\n   * Only relevant if {@link Cesium3DTileset.isSkippingLevelOfDetail} is true.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {boolean}\n   * @private\n   */\n  hasMixedContent: {\n    get: function () {\n      return this._hasMixedContent;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"value\", value);\n      //>>includeEnd('debug');\n\n      this._hasMixedContent = value;\n    },\n  },\n\n  /**\n   * Whether this tileset is actually skipping levels of detail.\n   * The user option may have been disabled if all tiles are using additive refinement,\n   * or if some tiles have a content type for which rendering does not support skipping\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {boolean}\n   * @private\n   * @readonly\n   */\n  isSkippingLevelOfDetail: {\n    get: function () {\n      return (\n        this.skipLevelOfDetail &&\n        !defined(this._classificationType) &&\n        !this._disableSkipLevelOfDetail &&\n        !this._allTilesAdditive\n      );\n    },\n  },\n\n  /**\n   * The tileset's schema, groups, tileset metadata and other details from the\n   * 3DTILES_metadata extension or a 3D Tiles 1.1 tileset JSON. This getter is\n   * for internal use by other classes.\n   *\n   * @memberof Cesium3DTileset.prototype\n   * @type {Cesium3DTilesetMetadata}\n   * @private\n   * @readonly\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  metadataExtension: {\n    get: function () {\n      return this._metadataExtension;\n    },\n  },\n\n  /**\n   * The metadata properties attached to the tileset as a whole.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {TilesetMetadata}\n   * @private\n   * @readonly\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  metadata: {\n    get: function () {\n      if (defined(this._metadataExtension)) {\n        return this._metadataExtension.tileset;\n      }\n\n      return undefined;\n    },\n  },\n\n  /**\n   * The metadata schema used in this tileset. Shorthand for\n   * <code>tileset.metadataExtension.schema</code>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {MetadataSchema}\n   * @private\n   * @readonly\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  schema: {\n    get: function () {\n      if (defined(this._metadataExtension)) {\n        return this._metadataExtension.schema;\n      }\n\n      return undefined;\n    },\n  },\n\n  /**\n   * The maximum screen space error used to drive level of detail refinement.  This value helps determine when a tile\n   * refines to its descendants, and therefore plays a major role in balancing performance with visual quality.\n   * <p>\n   * A tile's screen space error is roughly equivalent to the number of pixels wide that would be drawn if a sphere with a\n   * radius equal to the tile's <b>geometric error</b> were rendered at the tile's position. If this value exceeds\n   * <code>maximumScreenSpaceError</code> the tile refines to its descendants.\n   * </p>\n   * <p>\n   * Depending on the tileset, <code>maximumScreenSpaceError</code> may need to be tweaked to achieve the right balance.\n   * Higher values provide better performance but lower visual quality.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @default 16\n   *\n   * @exception {DeveloperError} <code>maximumScreenSpaceError</code> must be greater than or equal to zero.\n   */\n  maximumScreenSpaceError: {\n    get: function () {\n      return this._maximumScreenSpaceError;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\n        \"maximumScreenSpaceError\",\n        value,\n        0,\n      );\n      //>>includeEnd('debug');\n\n      this._maximumScreenSpaceError = value;\n      this._memoryAdjustedScreenSpaceError = value;\n    },\n  },\n\n  /**\n   * The amount of GPU memory (in bytes) used to cache tiles. This memory usage is estimated from\n   * geometry, textures, and batch table textures of loaded tiles. For point clouds, this value also\n   * includes per-point metadata.\n   * <p>\n   * Tiles not in view are unloaded to enforce this.\n   * </p>\n   * <p>\n   * If decreasing this value results in unloading tiles, the tiles are unloaded the next frame.\n   * </p>\n   * <p>\n   * If tiles sized more than <code>cacheBytes</code> are needed to meet the\n   * desired screen space error, determined by {@link Cesium3DTileset#maximumScreenSpaceError},\n   * for the current view, then the memory usage of the tiles loaded will exceed\n   * <code>cacheBytes</code> by up to <code>maximumCacheOverflowBytes</code>.\n   * For example, if <code>cacheBytes</code> is 500000, but 600000 bytes\n   * of tiles are needed to meet the screen space error, then 600000 bytes of tiles\n   * may be loaded (if <code>maximumCacheOverflowBytes</code> is at least 100000).\n   * When these tiles go out of view, they will be unloaded.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @default 536870912\n   *\n   * @exception {DeveloperError} <code>cacheBytes</code> must be typeof 'number' and greater than or equal to 0\n   * @see Cesium3DTileset#totalMemoryUsageInBytes\n   */\n  cacheBytes: {\n    get: function () {\n      return this._cacheBytes;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0);\n      //>>includeEnd('debug');\n\n      this._cacheBytes = value;\n    },\n  },\n\n  /**\n   * The maximum additional amount of GPU memory (in bytes) that will be used to cache tiles.\n   * <p>\n   * If tiles sized more than <code>cacheBytes</code> plus <code>maximumCacheOverflowBytes</code>\n   * are needed to meet the desired screen space error, determined by\n   * {@link Cesium3DTileset#maximumScreenSpaceError} for the current view, then\n   * {@link Cesium3DTileset#memoryAdjustedScreenSpaceError} will be adjusted\n   * until the tiles required to meet the adjusted screen space error use less\n   * than <code>cacheBytes</code> plus <code>maximumCacheOverflowBytes</code>.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @default 536870912\n   *\n   * @exception {DeveloperError} <code>maximumCacheOverflowBytes</code> must be typeof 'number' and greater than or equal to 0\n   * @see Cesium3DTileset#totalMemoryUsageInBytes\n   */\n  maximumCacheOverflowBytes: {\n    get: function () {\n      return this._maximumCacheOverflowBytes;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0);\n      //>>includeEnd('debug');\n\n      this._maximumCacheOverflowBytes = value;\n    },\n  },\n\n  /**\n   * If loading the level of detail required by @{link Cesium3DTileset#maximumScreenSpaceError}\n   * results in the memory usage exceeding @{link Cesium3DTileset#cacheBytes}\n   * plus @{link Cesium3DTileset#maximumCacheOverflowBytes}, level of detail refinement\n   * will instead use this (larger) adjusted screen space error to achieve the\n   * best possible visual quality within the available memory\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  memoryAdjustedScreenSpaceError: {\n    get: function () {\n      return this._memoryAdjustedScreenSpaceError;\n    },\n  },\n\n  /**\n   * Options for controlling point size based on geometric error and eye dome lighting.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {PointCloudShading}\n   */\n  pointCloudShading: {\n    get: function () {\n      return this._pointCloudShading;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"pointCloudShading\", value);\n      //>>includeEnd('debug');\n      this._pointCloudShading = value;\n    },\n  },\n\n  /**\n   * The root tile.\n   *\n   * @memberOf Cesium3DTileset.prototype\n   *\n   * @type {Cesium3DTile}\n   * @readonly\n   */\n  root: {\n    get: function () {\n      return this._root;\n    },\n  },\n\n  /**\n   * The tileset's bounding sphere.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   *\n   * @example\n   * const tileset = await Cesium.Cesium3DTileset.fromUrl(\"http://localhost:8002/tilesets/Seattle/tileset.json\");\n   *\n   * viewer.scene.primitives.add(tileset);\n   *\n   * // Set the camera to view the newly added tileset\n   * viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0));\n   */\n  boundingSphere: {\n    get: function () {\n      this._root.updateTransform(this._modelMatrix);\n      return this._root.boundingSphere;\n    },\n  },\n\n  /**\n   * A 4x4 transformation matrix that transforms the entire tileset.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   *\n   * @example\n   * // Adjust a tileset's height from the globe's surface.\n   * const heightOffset = 20.0;\n   * const boundingSphere = tileset.boundingSphere;\n   * const cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);\n   * const surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);\n   * const offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset);\n   * const translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());\n   * tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);\n   */\n  modelMatrix: {\n    get: function () {\n      return this._modelMatrix;\n    },\n    set: function (value) {\n      this._modelMatrix = Matrix4.clone(value, this._modelMatrix);\n    },\n  },\n\n  /**\n   * Returns the time, in milliseconds, since the tileset was loaded and first updated.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  timeSinceLoad: {\n    get: function () {\n      return this._timeSinceLoad;\n    },\n  },\n\n  /**\n   * The total amount of GPU memory in bytes used by the tileset. This value is estimated from\n   * geometry, texture, batch table textures, and binary metadata of loaded tiles.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @see Cesium3DTileset#cacheBytes\n   */\n  totalMemoryUsageInBytes: {\n    get: function () {\n      const statistics = this._statistics;\n      return (\n        statistics.texturesByteLength +\n        statistics.geometryByteLength +\n        statistics.batchTableByteLength\n      );\n    },\n  },\n\n  /**\n   * @private\n   */\n  clippingPlanesOriginMatrix: {\n    get: function () {\n      if (!defined(this._clippingPlanesOriginMatrix)) {\n        return Matrix4.IDENTITY;\n      }\n\n      if (this._clippingPlanesOriginMatrixDirty) {\n        Matrix4.multiply(\n          this.root.computedTransform,\n          this._initialClippingPlanesOriginMatrix,\n          this._clippingPlanesOriginMatrix,\n        );\n        this._clippingPlanesOriginMatrixDirty = false;\n      }\n\n      return this._clippingPlanesOriginMatrix;\n    },\n  },\n\n  /**\n   * @private\n   */\n  styleEngine: {\n    get: function () {\n      return this._styleEngine;\n    },\n  },\n\n  /**\n   * @private\n   */\n  statistics: {\n    get: function () {\n      return this._statistics;\n    },\n  },\n\n  /**\n   * Determines whether terrain, 3D Tiles, or both will be classified by this tileset.\n   * <p>\n   * This option is only applied to tilesets containing batched 3D models,\n   * glTF content, geometry data, or vector data. Even when undefined, vector\n   * and geometry data must render as classifications and will default to\n   * rendering on both terrain and other 3D Tiles tilesets.\n   * </p>\n   * <p>\n   * When enabled for batched 3D model and glTF tilesets, there are a few\n   * requirements/limitations on the glTF:\n   * <ul>\n   *     <li>The glTF cannot contain morph targets, skins, or animations.</li>\n   *     <li>The glTF cannot contain the <code>EXT_mesh_gpu_instancing</code> extension.</li>\n   *     <li>Only meshes with TRIANGLES can be used to classify other assets.</li>\n   *     <li>The meshes must be watertight.</li>\n   *     <li>The <code>POSITION</code> semantic is required.</li>\n   *     <li>If <code>_BATCHID</code>s and an index buffer are both present, all indices with the same batch id must occupy contiguous sections of the index buffer.</li>\n   *     <li>If <code>_BATCHID</code>s are present with no index buffer, all positions with the same batch id must occupy contiguous sections of the position buffer.</li>\n   * </ul>\n   * </p>\n   * <p>\n   * Additionally, classification is not supported for points or instanced 3D\n   * models.\n   * </p>\n   * <p>\n   * The 3D Tiles or terrain receiving the classification must be opaque.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {ClassificationType}\n   * @default undefined\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   * @readonly\n   */\n  classificationType: {\n    get: function () {\n      return this._classificationType;\n    },\n  },\n\n  /**\n   * Specifies if the height is relative to terrain, 3D Tiles, or both.\n   * <p>\n   * This option is only applied to point features in tilesets containing vector data.\n   * This option requires the Viewer's scene to be passed in through options.scene.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {HeightReference | undefined}\n   * @default undefined\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   * @readonly\n   */\n  heightReference: {\n    get: function () {\n      return this._heightReference;\n    },\n  },\n\n  /**\n   * The {@link CesiumWidget#scene} that the tileset will be rendered in, required for tilesets that specify a {@link heightReference} value for clamping 3D Tiles vector data content- like points, lines, and labels- to terrain or 3D tiles.\n   *\n   * @member of Cesium3DTileset.prototype\n   *\n   * @type {Scene | undefined}\n   * @default undefined\n   * @readonly\n   *\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets an ellipsoid describing the shape of the globe.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n\n  /**\n   * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the cone size that determines which tiles are deferred.\n   * Tiles that are inside this cone are loaded immediately. Tiles outside the cone are potentially deferred based on how far outside the cone they are and {@link Cesium3DTileset#foveatedInterpolationCallback} and {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation}.\n   * Setting this to 0.0 means the cone will be the line formed by the camera position and its view direction. Setting this to 1.0 means the cone encompasses the entire field of view of the camera, essentially disabling the effect.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @default 0.3\n   */\n  foveatedConeSize: {\n    get: function () {\n      return this._foveatedConeSize;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"foveatedConeSize\", value, 0.0);\n      Check.typeOf.number.lessThanOrEquals(\"foveatedConeSize\", value, 1.0);\n      //>>includeEnd('debug');\n\n      this._foveatedConeSize = value;\n    },\n  },\n\n  /**\n   * Optimization option. Used when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control the starting screen space error relaxation for tiles outside the foveated cone.\n   * The screen space error will be raised starting with this value up to {@link Cesium3DTileset#maximumScreenSpaceError} based on the provided {@link Cesium3DTileset#foveatedInterpolationCallback}.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  foveatedMinimumScreenSpaceErrorRelaxation: {\n    get: function () {\n      return this._foveatedMinimumScreenSpaceErrorRelaxation;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\n        \"foveatedMinimumScreenSpaceErrorRelaxation\",\n        value,\n        0.0,\n      );\n      Check.typeOf.number.lessThanOrEquals(\n        \"foveatedMinimumScreenSpaceErrorRelaxation\",\n        value,\n        this.maximumScreenSpaceError,\n      );\n      //>>includeEnd('debug');\n\n      this._foveatedMinimumScreenSpaceErrorRelaxation = value;\n    },\n  },\n\n  /**\n   * Returns the <code>extras</code> property at the top-level of the tileset JSON, which contains application specific metadata.\n   * Returns <code>undefined</code> if <code>extras</code> does not exist.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {*}\n   * @readonly\n   *\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification#specifying-extensions-and-application-specific-extras|Extras in the 3D Tiles specification.}\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * The properties for managing image-based lighting on this tileset.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {ImageBasedLighting}\n   */\n  imageBasedLighting: {\n    get: function () {\n      return this._imageBasedLighting;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"imageBasedLighting\", this._imageBasedLighting);\n      //>>includeEnd('debug');\n      if (value !== this._imageBasedLighting) {\n        if (\n          this._shouldDestroyImageBasedLighting &&\n          !this._imageBasedLighting.isDestroyed()\n        ) {\n          this._imageBasedLighting.destroy();\n        }\n        this._imageBasedLighting = value;\n        this._shouldDestroyImageBasedLighting = false;\n      }\n    },\n  },\n\n  /**\n   * The properties for managing dynamic environment maps on this model. Affects lighting.\n   *\n   * @memberof Cesium3DTileset.prototype\n   * @readonly\n   *\n   * @example\n   * // Change the ground color used for a tileset's environment map to a forest green\n   * const environmentMapManager = tileset.environmentMapManager;\n   * environmentMapManager.groundColor = Cesium.Color.fromCssColorString(\"#203b34\");\n   *\n   * @type {DynamicEnvironmentMapManager}\n   */\n  environmentMapManager: {\n    get: function () {\n      return this._environmentMapManager;\n    },\n  },\n\n  /**\n   * Indicates that only the tileset's vector tiles should be used for classification.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  vectorClassificationOnly: {\n    get: function () {\n      return this._vectorClassificationOnly;\n    },\n  },\n\n  /**\n   * Whether vector tiles should keep decoded positions in memory.\n   * This is used with {@link Cesium3DTileFeature.getPolylinePositions}.\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  vectorKeepDecodedPositions: {\n    get: function () {\n      return this._vectorKeepDecodedPositions;\n    },\n  },\n\n  /**\n   * Determines whether the credits of the tileset will be displayed on the screen\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {boolean}\n   * @default false\n   */\n  showCreditsOnScreen: {\n    get: function () {\n      return this._showCreditsOnScreen;\n    },\n    set: function (value) {\n      this._showCreditsOnScreen = value;\n      createCredits(this);\n    },\n  },\n\n  /**\n   * Label of the feature ID set to use for picking and styling.\n   * <p>\n   * For EXT_mesh_features, this is the feature ID's label property, or\n   * \"featureId_N\" (where N is the index in the featureIds array) when not\n   * specified. EXT_feature_metadata did not have a label field, so such\n   * feature ID sets are always labeled \"featureId_N\" where N is the index in\n   * the list of all feature Ids, where feature ID attributes are listed before\n   * feature ID textures.\n   * </p>\n   * <p>\n   * If featureIdLabel is set to an integer N, it is converted to\n   * the string \"featureId_N\" automatically. If both per-primitive and\n   * per-instance feature IDs are present, the instance feature IDs take\n   * priority.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {string}\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  featureIdLabel: {\n    get: function () {\n      return this._featureIdLabel;\n    },\n    set: function (value) {\n      // indices get converted into featureId_N\n      if (typeof value === \"number\") {\n        value = `featureId_${value}`;\n      }\n\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.string(\"value\", value);\n      //>>includeEnd('debug');\n\n      this._featureIdLabel = value;\n    },\n  },\n\n  /**\n   * Label of the instance feature ID set used for picking and styling.\n   * <p>\n   * If instanceFeatureIdLabel is set to an integer N, it is converted to\n   * the string \"instanceFeatureId_N\" automatically.\n   * If both per-primitive and per-instance feature IDs are present, the\n   * instance feature IDs take priority.\n   * </p>\n   *\n   * @memberof Cesium3DTileset.prototype\n   *\n   * @type {string}\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  instanceFeatureIdLabel: {\n    get: function () {\n      return this._instanceFeatureIdLabel;\n    },\n    set: function (value) {\n      // indices get converted into instanceFeatureId_N\n      if (typeof value === \"number\") {\n        value = `instanceFeatureId_${value}`;\n      }\n\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.string(\"value\", value);\n      //>>includeEnd('debug');\n\n      this._instanceFeatureIdLabel = value;\n    },\n  },\n});\n\n/**\n * Creates a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles tileset},\n * used for streaming massive heterogeneous 3D geospatial datasets, from a Cesium ion asset ID.\n *\n * @param {number} assetId The Cesium ion asset id.\n * @param {Cesium3DTileset.ConstructorOptions} [options] An object describing initialization options\n * @returns {Promise<Cesium3DTileset>}\n *\n * @exception {RuntimeError} When the tileset asset version is not 0.0, 1.0, or 1.1,\n * or when the tileset contains a required extension that is not supported.\n *\n * @see Cesium3DTileset#fromUrl\n *\n * @example\n * // Load a Cesium3DTileset with a Cesium ion asset ID of 124624234\n * try {\n *   const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(124624234);\n *   scene.primitives.add(tileset);\n * } catch (error) {\n *   console.error(`Error creating tileset: ${error}`);\n * }\n */\nCesium3DTileset.fromIonAssetId = async function (assetId, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"assetId\", assetId);\n  //>>includeEnd('debug');\n\n  const resource = await IonResource.fromAssetId(assetId);\n  return Cesium3DTileset.fromUrl(resource, options);\n};\n\n/**\n * Creates a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles tileset},\n * used for streaming massive heterogeneous 3D geospatial datasets.\n *\n * @param {Resource|string} url The url to a tileset JSON file.\n * @param {Cesium3DTileset.ConstructorOptions} [options] An object describing initialization options\n * @returns {Promise<Cesium3DTileset>}\n *\n * @exception {RuntimeError} When the tileset asset version is not 0.0, 1.0, or 1.1,\n * or when the tileset contains a required extension that is not supported.\n *\n * @see Cesium3DTileset#fromIonAssetId\n *\n * @example\n * try {\n *   const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *      \"http://localhost:8002/tilesets/Seattle/tileset.json\"\n *   );\n *   scene.primitives.add(tileset);\n * } catch (error) {\n *   console.error(`Error creating tileset: ${error}`);\n * }\n *\n * @example\n * // Common setting for the skipLevelOfDetail optimization\n * const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *   \"http://localhost:8002/tilesets/Seattle/tileset.json\", {\n *      skipLevelOfDetail: true,\n *      baseScreenSpaceError: 1024,\n *      skipScreenSpaceErrorFactor: 16,\n *      skipLevels: 1,\n *      immediatelyLoadDesiredLevelOfDetail: false,\n *      loadSiblings: false,\n *      cullWithChildrenBounds: true\n * });\n * scene.primitives.add(tileset);\n *\n * @example\n * // Common settings for the dynamicScreenSpaceError optimization\n * const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *   \"http://localhost:8002/tilesets/Seattle/tileset.json\", {\n *      dynamicScreenSpaceError: true,\n *      dynamicScreenSpaceErrorDensity: 2.0e-4,\n *      dynamicScreenSpaceErrorFactor: 24.0,\n *      dynamicScreenSpaceErrorHeightFalloff: 0.25\n * });\n * scene.primitives.add(tileset);\n */\nCesium3DTileset.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const resource = Resource.createIfNeeded(url);\n  let basePath;\n  if (resource.extension === \"json\") {\n    basePath = resource.getBaseUri(true);\n  } else if (resource.isDataUri) {\n    basePath = \"\";\n  }\n\n  const tilesetJson = await Cesium3DTileset.loadJson(resource);\n  const metadataExtension = await processMetadataExtension(\n    resource,\n    tilesetJson,\n  );\n\n  const tileset = new Cesium3DTileset(options);\n  tileset._resource = resource;\n  tileset._url = resource.url;\n  tileset._basePath = basePath;\n  tileset._metadataExtension = metadataExtension;\n  // Set these before loading the tileset since _geometricError\n  // and _scaledGeometricError get accessed during tile creation\n  tileset._geometricError = tilesetJson.geometricError;\n  tileset._scaledGeometricError = tilesetJson.geometricError;\n\n  const asset = tilesetJson.asset;\n  tileset._asset = asset;\n  tileset._extras = tilesetJson.extras;\n\n  createCredits(tileset);\n\n  // Handle legacy gltfUpAxis option\n  const gltfUpAxis = defined(tilesetJson.asset.gltfUpAxis)\n    ? Axis.fromName(tilesetJson.asset.gltfUpAxis)\n    : Axis.Y;\n  const modelUpAxis = options.modelUpAxis ?? gltfUpAxis;\n  const modelForwardAxis = options.modelForwardAxis ?? Axis.X;\n\n  tileset._properties = tilesetJson.properties;\n  tileset._extensionsUsed = tilesetJson.extensionsUsed;\n  tileset._extensions = tilesetJson.extensions;\n  tileset._modelUpAxis = modelUpAxis;\n  tileset._modelForwardAxis = modelForwardAxis;\n\n  tileset._root = tileset.loadTileset(resource, tilesetJson);\n\n  // Save the original, untransformed bounding volume position so we can apply\n  // the tile transform and model matrix at run time\n  const boundingVolume = tileset._root.createBoundingVolume(\n    tilesetJson.root.boundingVolume,\n    Matrix4.IDENTITY,\n  );\n  const clippingPlanesOrigin = boundingVolume.boundingSphere.center;\n  // If this origin is above the surface of the earth\n  // we want to apply an ENU orientation as our best guess of orientation.\n  // Otherwise, we assume it gets its position/orientation completely from the\n  // root tile transform and the tileset's model matrix\n  const originCartographic =\n    tileset._ellipsoid.cartesianToCartographic(clippingPlanesOrigin);\n  if (\n    defined(originCartographic) &&\n    originCartographic.height >\n      ApproximateTerrainHeights._defaultMinTerrainHeight\n  ) {\n    tileset._initialClippingPlanesOriginMatrix =\n      Transforms.eastNorthUpToFixedFrame(clippingPlanesOrigin);\n  }\n  tileset._clippingPlanesOriginMatrix = Matrix4.clone(\n    tileset._initialClippingPlanesOriginMatrix,\n  );\n\n  return tileset;\n};\n\n/**\n * Provides a hook to override the method used to request the tileset json\n * useful when fetching tilesets from remote servers\n * @param {Resource|string} tilesetUrl The url of the json file to be fetched\n * @returns {Promise<object>} A promise that resolves with the fetched json data\n */\nCesium3DTileset.loadJson = function (tilesetUrl) {\n  const resource = Resource.createIfNeeded(tilesetUrl);\n  return resource.fetchJson();\n};\n\n/**\n * Marks the tileset's {@link Cesium3DTileset#style} as dirty, which forces all\n * features to re-evaluate the style in the next frame each is visible.\n */\nCesium3DTileset.prototype.makeStyleDirty = function () {\n  this._styleEngine.makeDirty();\n};\n\n/**\n * Loads the main tileset JSON file or a tileset JSON file referenced from a tile.\n *\n * @exception {RuntimeError} When the tileset asset version is not 0.0, 1.0, or 1.1,\n * or when the tileset contains a required extension that is not supported.\n *\n * @private\n */\nCesium3DTileset.prototype.loadTileset = function (\n  resource,\n  tilesetJson,\n  parentTile,\n) {\n  const asset = tilesetJson.asset;\n  if (!defined(asset)) {\n    throw new RuntimeError(\"Tileset must have an asset property.\");\n  }\n  if (\n    asset.version !== \"0.0\" &&\n    asset.version !== \"1.0\" &&\n    asset.version !== \"1.1\"\n  ) {\n    throw new RuntimeError(\n      \"The tileset must be 3D Tiles version 0.0, 1.0, or 1.1\",\n    );\n  }\n\n  if (defined(tilesetJson.extensionsRequired)) {\n    Cesium3DTileset.checkSupportedExtensions(tilesetJson.extensionsRequired);\n  }\n\n  const statistics = this._statistics;\n\n  const tilesetVersion = asset.tilesetVersion;\n  if (defined(tilesetVersion)) {\n    // Append the tileset version to the resource\n    this._basePath += `?v=${tilesetVersion}`;\n    resource = resource.clone();\n    resource.setQueryParameters({ v: tilesetVersion });\n  }\n\n  // A tileset JSON file referenced from a tile may exist in a different directory than the root tileset.\n  // Get the basePath relative to the external tileset.\n  const rootTile = makeTile(this, resource, tilesetJson.root, parentTile);\n\n  // If there is a parentTile, add the root of the currently loading tileset\n  // to parentTile's children, and update its _depth.\n  if (defined(parentTile)) {\n    parentTile.children.push(rootTile);\n    rootTile._depth = parentTile._depth + 1;\n  }\n\n  const stack = [];\n  stack.push(rootTile);\n\n  while (stack.length > 0) {\n    const tile = stack.pop();\n    ++statistics.numberOfTilesTotal;\n    this._allTilesAdditive =\n      this._allTilesAdditive && tile.refine === Cesium3DTileRefine.ADD;\n    const children = tile._header.children;\n    if (defined(children)) {\n      for (let i = 0; i < children.length; ++i) {\n        const childHeader = children[i];\n        const childTile = makeTile(this, resource, childHeader, tile);\n        tile.children.push(childTile);\n        childTile._depth = tile._depth + 1;\n        stack.push(childTile);\n      }\n    }\n\n    if (this._cullWithChildrenBounds) {\n      Cesium3DTileOptimizations.checkChildrenWithinParent(tile);\n    }\n  }\n\n  return rootTile;\n};\n\n/**\n * Make a {@link Cesium3DTile} for a specific tile. If the tile's header has implicit\n * tiling (3D Tiles 1.1) or uses the <code>3DTILES_implicit_tiling</code> extension,\n * it creates a placeholder tile instead for lazy evaluation of the implicit tileset.\n *\n * @param {Cesium3DTileset} tileset The tileset\n * @param {Resource} baseResource The base resource for the tileset\n * @param {object} tileHeader The JSON header for the tile\n * @param {Cesium3DTile} [parentTile] The parent tile of the new tile\n * @returns {Cesium3DTile} The newly created tile\n *\n * @private\n */\nfunction makeTile(tileset, baseResource, tileHeader, parentTile) {\n  const hasImplicitTiling =\n    defined(tileHeader.implicitTiling) ||\n    hasExtension(tileHeader, \"3DTILES_implicit_tiling\");\n\n  if (!hasImplicitTiling) {\n    return new Cesium3DTile(tileset, baseResource, tileHeader, parentTile);\n  }\n\n  const metadataSchema = tileset.schema;\n\n  const implicitTileset = new ImplicitTileset(\n    baseResource,\n    tileHeader,\n    metadataSchema,\n  );\n  const rootCoordinates = new ImplicitTileCoordinates({\n    subdivisionScheme: implicitTileset.subdivisionScheme,\n    subtreeLevels: implicitTileset.subtreeLevels,\n    level: 0,\n    x: 0,\n    y: 0,\n    // The constructor will only use this for octrees.\n    z: 0,\n  });\n\n  // Create a placeholder Cesium3DTile that has an ImplicitTileset\n  // object and whose content will resolve to an Implicit3DTileContent\n  const contentUri = implicitTileset.subtreeUriTemplate.getDerivedResource({\n    templateValues: rootCoordinates.getTemplateValues(),\n  }).url;\n\n  const deepCopy = true;\n  const tileJson = clone(tileHeader, deepCopy);\n  // Replace contents with the subtree\n  tileJson.contents = [\n    {\n      uri: contentUri,\n    },\n  ];\n\n  delete tileJson.content;\n\n  // The placeholder tile does not have any extensions. If there are any\n  // extensions beyond 3DTILES_implicit_tiling, Implicit3DTileContent will\n  // copy them to the transcoded tiles.\n  delete tileJson.extensions;\n\n  const tile = new Cesium3DTile(tileset, baseResource, tileJson, parentTile);\n  tile.implicitTileset = implicitTileset;\n  tile.implicitCoordinates = rootCoordinates;\n  return tile;\n}\n\n/**\n * If tileset metadata is present, initialize the {@link Cesium3DTilesetMetadata}\n * instance. This is asynchronous since metadata schemas may be external.\n *\n * @param {Cesium3DTileset} tileset The tileset\n * @param {object} tilesetJson The tileset JSON\n * @return {Promise<Cesium3DTilesetMetadata>} The loaded Cesium3DTilesetMetadata\n * @private\n */\nasync function processMetadataExtension(resource, tilesetJson) {\n  const metadataJson = hasExtension(tilesetJson, \"3DTILES_metadata\")\n    ? tilesetJson.extensions[\"3DTILES_metadata\"]\n    : tilesetJson;\n\n  let schemaLoader;\n  if (defined(metadataJson.schemaUri)) {\n    resource = resource.getDerivedResource({\n      url: metadataJson.schemaUri,\n    });\n    schemaLoader = ResourceCache.getSchemaLoader({\n      resource: resource,\n    });\n  } else if (defined(metadataJson.schema)) {\n    schemaLoader = ResourceCache.getSchemaLoader({\n      schema: metadataJson.schema,\n    });\n  } else {\n    return;\n  }\n\n  await schemaLoader.load();\n\n  const metadataExtension = new Cesium3DTilesetMetadata({\n    schema: schemaLoader.schema,\n    metadataJson: metadataJson,\n  });\n\n  ResourceCache.unload(schemaLoader);\n\n  return metadataExtension;\n}\n\nconst scratchPositionNormal = new Cartesian3();\nconst scratchCartographic = new Cartographic();\nconst scratchMatrix = new Matrix4();\nconst scratchCenter = new Cartesian3();\nconst scratchPosition = new Cartesian3();\nconst scratchDirection = new Cartesian3();\nconst scratchHalfHeight = new Cartesian3();\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nfunction updateDynamicScreenSpaceError(tileset, frameState) {\n  let up;\n  let direction;\n  let height;\n  let minimumHeight;\n  let maximumHeight;\n\n  const camera = frameState.camera;\n  const root = tileset._root;\n  const tileBoundingVolume = root.contentBoundingVolume;\n\n  if (tileBoundingVolume instanceof TileBoundingRegion) {\n    up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n    direction = camera.directionWC;\n    height = camera.positionCartographic.height;\n    minimumHeight = tileBoundingVolume.minimumHeight;\n    maximumHeight = tileBoundingVolume.maximumHeight;\n  } else {\n    // Transform camera position and direction into the local coordinate system of the tileset\n    const transformLocal = Matrix4.inverseTransformation(\n      root.computedTransform,\n      scratchMatrix,\n    );\n    const ellipsoid = frameState.mapProjection.ellipsoid;\n    const boundingVolume = tileBoundingVolume.boundingVolume;\n    const centerLocal = Matrix4.multiplyByPoint(\n      transformLocal,\n      boundingVolume.center,\n      scratchCenter,\n    );\n    if (Cartesian3.magnitude(centerLocal) > ellipsoid.minimumRadius) {\n      // The tileset is defined in WGS84. Approximate the minimum and maximum height.\n      const centerCartographic = Cartographic.fromCartesian(\n        centerLocal,\n        ellipsoid,\n        scratchCartographic,\n      );\n      up = Cartesian3.normalize(camera.positionWC, scratchPositionNormal);\n      direction = camera.directionWC;\n      height = camera.positionCartographic.height;\n      minimumHeight = 0.0;\n      maximumHeight = centerCartographic.height * 2.0;\n    } else {\n      // The tileset is defined in local coordinates (z-up)\n      const positionLocal = Matrix4.multiplyByPoint(\n        transformLocal,\n        camera.positionWC,\n        scratchPosition,\n      );\n      up = Cartesian3.UNIT_Z;\n      direction = Matrix4.multiplyByPointAsVector(\n        transformLocal,\n        camera.directionWC,\n        scratchDirection,\n      );\n      direction = Cartesian3.normalize(direction, direction);\n      height = positionLocal.z;\n      if (tileBoundingVolume instanceof TileOrientedBoundingBox) {\n        // Assuming z-up, the last column is the local z direction and\n        // represents the height of the bounding box.\n        const halfHeightVector = Matrix3.getColumn(\n          boundingVolume.halfAxes,\n          2,\n          scratchHalfHeight,\n        );\n        const halfHeight = Cartesian3.magnitude(halfHeightVector);\n        minimumHeight = centerLocal.z - halfHeight;\n        maximumHeight = centerLocal.z + halfHeight;\n      } else if (tileBoundingVolume instanceof TileBoundingSphere) {\n        const radius = boundingVolume.radius;\n        minimumHeight = centerLocal.z - radius;\n        maximumHeight = centerLocal.z + radius;\n      }\n    }\n  }\n\n  // The range where the density starts to lessen. Start at the quarter height of the tileset.\n  const heightFalloff = tileset.dynamicScreenSpaceErrorHeightFalloff;\n  const heightClose =\n    minimumHeight + (maximumHeight - minimumHeight) * heightFalloff;\n  const heightFar = maximumHeight;\n\n  const t = CesiumMath.clamp(\n    (height - heightClose) / (heightFar - heightClose),\n    0.0,\n    1.0,\n  );\n\n  // Increase density as the camera tilts towards the horizon\n  let horizonFactor = 1.0 - Math.abs(Cartesian3.dot(direction, up));\n\n  // Weaken the horizon factor as the camera height increases, implying the camera is further away from the tileset.\n  // The goal is to increase density for the \"street view\", not when viewing the tileset from a distance.\n  horizonFactor = horizonFactor * (1.0 - t);\n\n  tileset._dynamicScreenSpaceErrorComputedDensity =\n    tileset.dynamicScreenSpaceErrorDensity * horizonFactor;\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n */\nfunction requestContent(tileset, tile) {\n  if (tile.hasEmptyContent) {\n    return;\n  }\n\n  const { statistics } = tileset;\n  const contentExpired = tile.contentExpired;\n\n  const promise = tile.requestContent();\n  if (!defined(promise)) {\n    return;\n  }\n\n  promise\n    .then((content) => {\n      if (!defined(content) || tile.isDestroyed() || tileset.isDestroyed()) {\n        return;\n      }\n\n      tileset._processingQueue.push(tile);\n      ++statistics.numberOfTilesProcessing;\n    })\n    .catch((error) => {\n      handleTileFailure(error, tileset, tile);\n    });\n\n  if (contentExpired) {\n    if (tile.hasTilesetContent || tile.hasImplicitContent) {\n      destroySubtree(tileset, tile);\n    } else {\n      statistics.decrementLoadCounts(tile.content);\n      --statistics.numberOfTilesWithContentReady;\n    }\n  }\n\n  tileset._requestedTilesInFlight.push(tile);\n}\n\nfunction sortTilesByPriority(a, b) {\n  return a._priority - b._priority;\n}\n\n/**\n * Perform any pass invariant tasks here. Called after the render pass.\n * @private\n * @param {FrameState} frameState\n */\nCesium3DTileset.prototype.postPassesUpdate = function (frameState) {\n  if (!defined(this._root)) {\n    return;\n  }\n\n  cancelOutOfViewRequests(this, frameState);\n  raiseLoadProgressEvent(this, frameState);\n  this._cache.unloadTiles(this, unloadTile);\n\n  // If the style wasn't able to be applied this frame (for example,\n  // the tileset was hidden), keep it dirty so the engine can try\n  // to apply the style next frame.\n  if (this._styleApplied) {\n    this._styleEngine.resetDirty();\n  }\n  this._styleApplied = false;\n};\n\n/**\n * Perform any pass invariant tasks here. Called before any passes are executed.\n * @private\n * @param {FrameState} frameState\n */\nCesium3DTileset.prototype.prePassesUpdate = function (frameState) {\n  if (!defined(this._root)) {\n    return;\n  }\n\n  processTiles(this, frameState);\n\n  // Update clipping planes\n  const clippingPlanes = this._clippingPlanes;\n  this._clippingPlanesOriginMatrixDirty = true;\n  if (defined(clippingPlanes) && clippingPlanes.enabled) {\n    clippingPlanes.update(frameState);\n  }\n\n  // Update clipping polygons\n  const clippingPolygons = this._clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.enabled) {\n    clippingPolygons.update(frameState);\n  }\n\n  if (!defined(this._loadTimestamp)) {\n    this._loadTimestamp = JulianDate.clone(frameState.time);\n  }\n  this._timeSinceLoad = Math.max(\n    JulianDate.secondsDifference(frameState.time, this._loadTimestamp) * 1000,\n    0.0,\n  );\n\n  if (this.dynamicScreenSpaceError) {\n    updateDynamicScreenSpaceError(this, frameState);\n  }\n\n  if (frameState.newFrame) {\n    this._cache.reset();\n  }\n};\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nfunction cancelOutOfViewRequests(tileset, frameState) {\n  const requestedTilesInFlight = tileset._requestedTilesInFlight;\n  let removeCount = 0;\n  for (let i = 0; i < requestedTilesInFlight.length; ++i) {\n    const tile = requestedTilesInFlight[i];\n\n    // NOTE: This is framerate dependant so make sure the threshold check is small\n    const outOfView = frameState.frameNumber - tile._touchedFrame >= 1;\n    if (tile._contentState !== Cesium3DTileContentState.LOADING) {\n      // No longer fetching from host, don't need to track it anymore. Gets marked as LOADING in Cesium3DTile::requestContent().\n      ++removeCount;\n      continue;\n    } else if (outOfView) {\n      // RequestScheduler will take care of cancelling it\n      tile.cancelRequests();\n      ++removeCount;\n      continue;\n    }\n\n    if (removeCount > 0) {\n      requestedTilesInFlight[i - removeCount] = tile;\n    }\n  }\n\n  requestedTilesInFlight.length -= removeCount;\n}\n\n/**\n * Sort requests by priority before making any requests.\n * This makes it less likely that requests will be cancelled after being issued.\n * @private\n * @param {Cesium3DTileset} tileset\n */\nfunction requestTiles(tileset) {\n  const requestedTiles = tileset._requestedTiles;\n  requestedTiles.sort(sortTilesByPriority);\n  for (let i = 0; i < requestedTiles.length; ++i) {\n    requestContent(tileset, requestedTiles[i]);\n  }\n}\n\n/**\n * @private\n * @param {Error} error\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n */\nfunction handleTileFailure(error, tileset, tile) {\n  if (tileset.isDestroyed()) {\n    return;\n  }\n\n  let url;\n  if (!tile.isDestroyed()) {\n    url = tile._contentResource.url;\n  }\n\n  const message = defined(error.message) ? error.message : error.toString();\n  if (tileset.tileFailed.numberOfListeners > 0) {\n    tileset.tileFailed.raiseEvent({\n      url: url,\n      message: message,\n    });\n  } else {\n    console.log(`A 3D tile failed to load: ${url}`);\n    console.log(`Error: ${message}`);\n    console.log(error.stack);\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n */\nfunction filterProcessingQueue(tileset) {\n  const tiles = tileset._processingQueue;\n\n  let removeCount = 0;\n  for (let i = 0; i < tiles.length; ++i) {\n    const tile = tiles[i];\n    if (\n      tile.isDestroyed() ||\n      tile._contentState !== Cesium3DTileContentState.PROCESSING\n    ) {\n      ++removeCount;\n      continue;\n    }\n    if (removeCount > 0) {\n      tiles[i - removeCount] = tile;\n    }\n  }\n  tiles.length -= removeCount;\n}\n\nconst scratchUpdateHeightCartographic = new Cartographic();\nconst scratchUpdateHeightCartographic2 = new Cartographic();\nconst scratchUpdateHeightCartesian = new Cartesian3();\n\nfunction processUpdateHeight(tileset, tile, frameState) {\n  if (!tileset.enableCollision || !tileset.show) {\n    return;\n  }\n\n  const heightCallbackData = tileset._addHeightCallbacks;\n  const boundingSphere = tile.boundingSphere;\n\n  for (const callbackData of heightCallbackData) {\n    // No need to update if the tile was already visible last frame\n    if (callbackData.invoked || tile._wasSelectedLastFrame) {\n      continue;\n    }\n\n    const ellipsoid = callbackData.ellipsoid;\n    const positionCartographic = Cartographic.clone(\n      callbackData.positionCartographic,\n      scratchUpdateHeightCartographic,\n    );\n    const centerCartographic = Cartographic.fromCartesian(\n      boundingSphere.center,\n      ellipsoid,\n      scratchUpdateHeightCartographic2,\n    );\n\n    // This can be undefined when the bounding sphere is at the origin\n    if (defined(centerCartographic)) {\n      positionCartographic.height = centerCartographic.height;\n    }\n\n    const position = Cartographic.toCartesian(\n      positionCartographic,\n      ellipsoid,\n      scratchUpdateHeightCartesian,\n    );\n    if (\n      Cartesian3.distance(position, boundingSphere.center) <=\n      boundingSphere.radius\n    ) {\n      callbackData.invoked = true;\n      frameState.afterRender.push(() => {\n        // Callback can be removed before it actually invoked at the end of the frame\n        if (defined(callbackData.callback)) {\n          callbackData.callback();\n        }\n        callbackData.invoked = false;\n      });\n    }\n  }\n}\n\n/**\n * Process tiles in the PROCESSING state so they will eventually move to the READY state.\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n */\nfunction processTiles(tileset, frameState) {\n  filterProcessingQueue(tileset);\n  const tiles = tileset._processingQueue;\n\n  const { cacheBytes, maximumCacheOverflowBytes, statistics } = tileset;\n  const cacheByteLimit = cacheBytes + maximumCacheOverflowBytes;\n\n  let memoryExceeded = false;\n  for (let i = 0; i < tiles.length; ++i) {\n    if (tileset.totalMemoryUsageInBytes > cacheByteLimit) {\n      memoryExceeded = true;\n      break;\n    }\n\n    const tile = tiles[i];\n    try {\n      tile.process(tileset, frameState);\n\n      if (tile.contentReady) {\n        --statistics.numberOfTilesProcessing;\n        tileset.tileLoad.raiseEvent(tile);\n      }\n    } catch (error) {\n      --statistics.numberOfTilesProcessing;\n      handleTileFailure(error, tileset, tile);\n    }\n  }\n\n  if (tileset.totalMemoryUsageInBytes < cacheBytes) {\n    decreaseScreenSpaceError(tileset);\n  } else if (memoryExceeded && tiles.length > 0) {\n    increaseScreenSpaceError(tileset);\n  }\n}\n\nfunction increaseScreenSpaceError(tileset) {\n  //>>includeStart('debug', pragmas.debug);\n  oneTimeWarning(\n    \"increase-screenSpaceError\",\n    `The tiles needed to meet maximumScreenSpaceError would use more memory than allocated for this tileset.\n    The tileset will be rendered with a larger screen space error (see memoryAdjustedScreenSpaceError).\n    Consider using larger values for cacheBytes and maximumCacheOverflowBytes.`,\n  );\n  //>>includeEnd('debug');\n\n  tileset._memoryAdjustedScreenSpaceError *= 1.02;\n  const tiles = tileset._processingQueue;\n  for (let i = 0; i < tiles.length; ++i) {\n    tiles[i].updatePriority();\n  }\n  tiles.sort(sortTilesByPriority);\n}\n\nfunction decreaseScreenSpaceError(tileset) {\n  tileset._memoryAdjustedScreenSpaceError = Math.max(\n    tileset.memoryAdjustedScreenSpaceError / 1.02,\n    tileset.maximumScreenSpaceError,\n  );\n}\n\nconst scratchCartesian = new Cartesian3();\n\nconst stringOptions = {\n  maximumFractionDigits: 3,\n};\n\n/**\n * @private\n * @param {number} memorySizeInBytes\n * @returns {string}\n */\nfunction formatMemoryString(memorySizeInBytes) {\n  const memoryInMegabytes = memorySizeInBytes / 1048576;\n  if (memoryInMegabytes < 1.0) {\n    return memoryInMegabytes.toLocaleString(undefined, stringOptions);\n  }\n  return Math.round(memoryInMegabytes).toLocaleString();\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @returns {Cartesian3}\n */\nfunction computeTileLabelPosition(tile) {\n  const { halfAxes, radius, center } = tile.boundingVolume.boundingVolume;\n\n  let position = Cartesian3.clone(center, scratchCartesian);\n  if (defined(halfAxes)) {\n    position.x += 0.75 * (halfAxes[0] + halfAxes[3] + halfAxes[6]);\n    position.y += 0.75 * (halfAxes[1] + halfAxes[4] + halfAxes[7]);\n    position.z += 0.75 * (halfAxes[2] + halfAxes[5] + halfAxes[8]);\n  } else if (defined(radius)) {\n    let normal = Cartesian3.normalize(center, scratchCartesian);\n    normal = Cartesian3.multiplyByScalar(\n      normal,\n      0.75 * radius,\n      scratchCartesian,\n    );\n    position = Cartesian3.add(normal, center, scratchCartesian);\n  }\n  return position;\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {Cesium3DTileset} tileset\n * @param {Cartesian3} position\n * @returns {Label}\n */\nfunction addTileDebugLabel(tile, tileset, position) {\n  let labelString = \"\";\n  let attributes = 0;\n\n  if (tileset.debugShowGeometricError) {\n    labelString += `\\nGeometric error: ${tile.geometricError}`;\n    attributes++;\n  }\n\n  if (tileset.debugShowRenderingStatistics) {\n    labelString += `\\nCommands: ${tile.commandsLength}`;\n    attributes++;\n\n    // Don't display number of points or triangles if 0.\n    const numberOfPoints = tile.content.pointsLength;\n    if (numberOfPoints > 0) {\n      labelString += `\\nPoints: ${tile.content.pointsLength}`;\n      attributes++;\n    }\n\n    const numberOfTriangles = tile.content.trianglesLength;\n    if (numberOfTriangles > 0) {\n      labelString += `\\nTriangles: ${tile.content.trianglesLength}`;\n      attributes++;\n    }\n\n    labelString += `\\nFeatures: ${tile.content.featuresLength}`;\n    attributes++;\n  }\n\n  if (tileset.debugShowMemoryUsage) {\n    labelString += `\\nTexture Memory: ${formatMemoryString(\n      tile.content.texturesByteLength,\n    )}`;\n    labelString += `\\nGeometry Memory: ${formatMemoryString(\n      tile.content.geometryByteLength,\n    )}`;\n    attributes += 2;\n  }\n\n  if (tileset.debugShowUrl) {\n    if (tile.hasMultipleContents) {\n      labelString += \"\\nUrls:\";\n      const urls = tile.content.innerContentUrls;\n      for (let i = 0; i < urls.length; i++) {\n        labelString += `\\n- ${urls[i]}`;\n      }\n      attributes += urls.length;\n    } else {\n      labelString += `\\nUrl: ${tile._contentHeader.uri}`;\n      attributes++;\n    }\n  }\n\n  const newLabel = {\n    text: labelString.substring(1),\n    position: position,\n    font: `${19 - attributes}px sans-serif`,\n    showBackground: true,\n    disableDepthTestDistance: Number.POSITIVE_INFINITY,\n  };\n\n  return tileset._tileDebugLabels.add(newLabel);\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nfunction updateTileDebugLabels(tileset, frameState) {\n  const selectedTiles = tileset._selectedTiles;\n  const selectedLength = selectedTiles.length;\n  const emptyTiles = tileset._emptyTiles;\n  const emptyLength = emptyTiles.length;\n  tileset._tileDebugLabels.removeAll();\n\n  if (tileset.debugPickedTileLabelOnly) {\n    if (defined(tileset.debugPickedTile)) {\n      const position = defined(tileset.debugPickPosition)\n        ? tileset.debugPickPosition\n        : computeTileLabelPosition(tileset.debugPickedTile);\n      const label = addTileDebugLabel(\n        tileset.debugPickedTile,\n        tileset,\n        position,\n      );\n      label.pixelOffset = new Cartesian2(15, -15); // Offset to avoid picking the label.\n    }\n  } else {\n    for (let i = 0; i < selectedLength; ++i) {\n      const tile = selectedTiles[i];\n      addTileDebugLabel(tile, tileset, computeTileLabelPosition(tile));\n    }\n    for (let i = 0; i < emptyLength; ++i) {\n      const tile = emptyTiles[i];\n      if (tile.hasTilesetContent || tile.hasImplicitContent) {\n        addTileDebugLabel(tile, tileset, computeTileLabelPosition(tile));\n      }\n    }\n  }\n  tileset._tileDebugLabels.update(frameState);\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n * @param {object} passOptions\n */\nfunction updateTiles(tileset, frameState, passOptions) {\n  tileset._styleEngine.applyStyle(tileset);\n  tileset._styleApplied = true;\n\n  const { commandList, context } = frameState;\n  const numberOfInitialCommands = commandList.length;\n  const selectedTiles = tileset._selectedTiles;\n\n  const bivariateVisibilityTest =\n    tileset.isSkippingLevelOfDetail &&\n    tileset._hasMixedContent &&\n    context.stencilBuffer &&\n    selectedTiles.length > 0;\n\n  tileset._backfaceCommands.length = 0;\n\n  if (bivariateVisibilityTest) {\n    if (!defined(tileset._stencilClearCommand)) {\n      tileset._stencilClearCommand = new ClearCommand({\n        stencil: 0,\n        pass: Pass.CESIUM_3D_TILE,\n        renderState: RenderState.fromCache({\n          stencilMask: StencilConstants.SKIP_LOD_MASK,\n        }),\n      });\n    }\n    commandList.push(tileset._stencilClearCommand);\n  }\n\n  const { statistics, tileVisible } = tileset;\n  const isRender = passOptions.isRender;\n  const lengthBeforeUpdate = commandList.length;\n\n  for (let i = 0; i < selectedTiles.length; ++i) {\n    const tile = selectedTiles[i];\n    // Raise the tileVisible event before update in case the tileVisible event\n    // handler makes changes that update needs to apply to WebGL resources\n    if (isRender) {\n      tileVisible.raiseEvent(tile);\n    }\n    processUpdateHeight(tileset, tile, frameState);\n    tile.update(tileset, frameState, passOptions);\n    statistics.incrementSelectionCounts(tile.content);\n    ++statistics.selected;\n  }\n  const emptyTiles = tileset._emptyTiles;\n  for (let i = 0; i < emptyTiles.length; ++i) {\n    const tile = emptyTiles[i];\n    tile.update(tileset, frameState, passOptions);\n  }\n\n  let addedCommandsLength = commandList.length - lengthBeforeUpdate;\n\n  tileset._backfaceCommands.trim();\n\n  if (bivariateVisibilityTest) {\n    /*\n     * Consider 'effective leaf' tiles as selected tiles that have no selected descendants. They may have children,\n     * but they are currently our effective leaves because they do not have selected descendants. These tiles\n     * are those where with tile._finalResolution === true.\n     * Let 'unresolved' tiles be those with tile._finalResolution === false.\n     *\n     * 1. Render just the backfaces of unresolved tiles in order to lay down z\n     * 2. Render all frontfaces wherever tile._selectionDepth > stencilBuffer.\n     *    Replace stencilBuffer with tile._selectionDepth, when passing the z test.\n     *    Because children are always drawn before ancestors {@link Cesium3DTilesetTraversal#traverseAndSelect},\n     *    this effectively draws children first and does not draw ancestors if a descendant has already\n     *    been drawn at that pixel.\n     *    Step 1 prevents child tiles from appearing on top when they are truly behind ancestor content.\n     *    If they are behind the backfaces of the ancestor, then they will not be drawn.\n     *\n     * NOTE: Step 2 sometimes causes visual artifacts when backfacing child content has some faces that\n     * partially face the camera and are inside of the ancestor content. Because they are inside, they will\n     * not be culled by the depth writes in Step 1, and because they partially face the camera, the stencil tests\n     * will draw them on top of the ancestor content.\n     *\n     * NOTE: Because we always render backfaces of unresolved tiles, if the camera is looking at the backfaces\n     * of an object, they will always be drawn while loading, even if backface culling is enabled.\n     */\n\n    const backfaceCommands = tileset._backfaceCommands.values;\n    const backfaceCommandsLength = backfaceCommands.length;\n\n    commandList.length += backfaceCommandsLength;\n\n    // copy commands to the back of the commandList\n    for (let i = addedCommandsLength - 1; i >= 0; --i) {\n      commandList[lengthBeforeUpdate + backfaceCommandsLength + i] =\n        commandList[lengthBeforeUpdate + i];\n    }\n\n    // move backface commands to the front of the commandList\n    for (let i = 0; i < backfaceCommandsLength; ++i) {\n      commandList[lengthBeforeUpdate + i] = backfaceCommands[i];\n    }\n  }\n\n  // Number of commands added by each update above\n  addedCommandsLength = commandList.length - numberOfInitialCommands;\n  statistics.numberOfCommands = addedCommandsLength;\n\n  if (!isRender) {\n    return;\n  }\n\n  // Only run EDL if simple attenuation is on\n  if (\n    tileset.pointCloudShading.attenuation &&\n    tileset.pointCloudShading.eyeDomeLighting &&\n    addedCommandsLength > 0\n  ) {\n    tileset._pointCloudEyeDomeLighting.update(\n      frameState,\n      numberOfInitialCommands,\n      tileset.pointCloudShading,\n      tileset.boundingSphere,\n    );\n  }\n\n  if (\n    tileset.debugShowGeometricError ||\n    tileset.debugShowRenderingStatistics ||\n    tileset.debugShowMemoryUsage ||\n    tileset.debugShowUrl\n  ) {\n    if (!defined(tileset._tileDebugLabels)) {\n      tileset._tileDebugLabels = new LabelCollection();\n    }\n    updateTileDebugLabels(tileset, frameState);\n  } else {\n    tileset._tileDebugLabels =\n      tileset._tileDebugLabels && tileset._tileDebugLabels.destroy();\n  }\n}\n\nconst scratchStack = [];\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n */\nfunction destroySubtree(tileset, tile) {\n  const root = tile;\n  const stack = scratchStack;\n  stack.push(tile);\n  while (stack.length > 0) {\n    tile = stack.pop();\n    const children = tile.children;\n    for (let i = 0; i < children.length; ++i) {\n      stack.push(children[i]);\n    }\n    if (tile !== root) {\n      destroyTile(tileset, tile);\n      --tileset._statistics.numberOfTilesTotal;\n    }\n  }\n  root.children = [];\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n */\nfunction unloadTile(tileset, tile) {\n  tileset.tileUnload.raiseEvent(tile);\n  tileset._statistics.decrementLoadCounts(tile.content);\n  --tileset._statistics.numberOfTilesWithContentReady;\n  tile.unloadContent();\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n */\nfunction destroyTile(tileset, tile) {\n  tileset._cache.unloadTile(tileset, tile, unloadTile);\n  tile.destroy();\n}\n\n/**\n * Unloads all tiles that weren't selected the previous frame.  This can be used to\n * explicitly manage the tile cache and reduce the total number of tiles loaded below\n * {@link Cesium3DTileset#cacheBytes}.\n * <p>\n * Tile unloads occur at the next frame to keep all the WebGL delete calls\n * within the render loop.\n * </p>\n */\nCesium3DTileset.prototype.trimLoadedTiles = function () {\n  this._cache.trim();\n};\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nfunction raiseLoadProgressEvent(tileset, frameState) {\n  const statistics = tileset._statistics;\n  const statisticsLast = tileset._statisticsLast;\n\n  const numberOfPendingRequests = statistics.numberOfPendingRequests;\n  const numberOfTilesProcessing = statistics.numberOfTilesProcessing;\n  const lastNumberOfPendingRequest = statisticsLast.numberOfPendingRequests;\n  const lastNumberOfTilesProcessing = statisticsLast.numberOfTilesProcessing;\n\n  Cesium3DTilesetStatistics.clone(statistics, statisticsLast);\n\n  const progressChanged =\n    numberOfPendingRequests !== lastNumberOfPendingRequest ||\n    numberOfTilesProcessing !== lastNumberOfTilesProcessing;\n\n  if (progressChanged) {\n    frameState.afterRender.push(function () {\n      tileset.loadProgress.raiseEvent(\n        numberOfPendingRequests,\n        numberOfTilesProcessing,\n      );\n\n      return true;\n    });\n  }\n\n  tileset._tilesLoaded =\n    statistics.numberOfPendingRequests === 0 &&\n    statistics.numberOfTilesProcessing === 0 &&\n    statistics.numberOfAttemptedRequests === 0;\n\n  // Events are raised (added to the afterRender queue) here since promises\n  // may resolve outside of the update loop that then raise events, e.g.,\n  // model's readyEvent\n  if (progressChanged && tileset._tilesLoaded) {\n    frameState.afterRender.push(function () {\n      tileset.allTilesLoaded.raiseEvent();\n      return true;\n    });\n    if (!tileset._initialTilesLoaded) {\n      tileset._initialTilesLoaded = true;\n      frameState.afterRender.push(function () {\n        tileset.initialTilesLoaded.raiseEvent();\n        return true;\n      });\n    }\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n */\nfunction resetMinimumMaximum(tileset) {\n  tileset._heatmap.resetMinimumMaximum();\n  tileset._minimumPriority.depth = Number.MAX_VALUE;\n  tileset._maximumPriority.depth = -Number.MAX_VALUE;\n  tileset._minimumPriority.foveatedFactor = Number.MAX_VALUE;\n  tileset._maximumPriority.foveatedFactor = -Number.MAX_VALUE;\n  tileset._minimumPriority.distance = Number.MAX_VALUE;\n  tileset._maximumPriority.distance = -Number.MAX_VALUE;\n  tileset._minimumPriority.reverseScreenSpaceError = Number.MAX_VALUE;\n  tileset._maximumPriority.reverseScreenSpaceError = -Number.MAX_VALUE;\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nfunction detectModelMatrixChanged(tileset, frameState) {\n  if (\n    frameState.frameNumber === tileset._updatedModelMatrixFrame &&\n    defined(tileset._previousModelMatrix)\n  ) {\n    return;\n  }\n\n  tileset._updatedModelMatrixFrame = frameState.frameNumber;\n  tileset._modelMatrixChanged = !Matrix4.equals(\n    tileset.modelMatrix,\n    tileset._previousModelMatrix,\n  );\n  if (tileset._modelMatrixChanged) {\n    tileset._previousModelMatrix = Matrix4.clone(\n      tileset.modelMatrix,\n      tileset._previousModelMatrix,\n    );\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n * @param {Cesium3DTilesetStatistics} passStatistics\n * @param {object} passOptions\n * @returns {boolean}\n */\nfunction update(tileset, frameState, passStatistics, passOptions) {\n  if (frameState.mode === SceneMode.MORPHING) {\n    return false;\n  }\n\n  if (!defined(tileset._root)) {\n    return false;\n  }\n\n  const statistics = tileset._statistics;\n  statistics.clear();\n\n  // Resets the visibility check for each pass\n  ++tileset._updatedVisibilityFrame;\n\n  // Update any tracked min max values\n  resetMinimumMaximum(tileset);\n\n  detectModelMatrixChanged(tileset, frameState);\n  tileset._cullRequestsWhileMoving =\n    tileset.cullRequestsWhileMoving && !tileset._modelMatrixChanged;\n\n  const ready = tileset\n    .getTraversal(passOptions)\n    .selectTiles(tileset, frameState);\n\n  if (passOptions.requestTiles) {\n    requestTiles(tileset);\n  }\n\n  updateTiles(tileset, frameState, passOptions);\n\n  // Update pass statistics\n  Cesium3DTilesetStatistics.clone(statistics, passStatistics);\n\n  if (passOptions.isRender) {\n    const credits = tileset._credits;\n    if (defined(credits) && statistics.selected !== 0) {\n      for (let i = 0; i < credits.length; ++i) {\n        const credit = credits[i];\n        frameState.creditDisplay.addCreditToNextFrame(credit);\n      }\n    }\n  }\n\n  return ready;\n}\n\nfunction createCredits(tileset) {\n  let credits = tileset._credits;\n  if (!defined(credits)) {\n    credits = [];\n  }\n  credits.length = 0;\n\n  if (defined(tileset.resource.credits)) {\n    tileset.resource.credits.forEach((credit) => {\n      credits.push(Credit.clone(credit));\n    });\n  }\n\n  const assetExtras = tileset.asset.extras;\n  if (\n    defined(assetExtras) &&\n    defined(assetExtras.cesium) &&\n    defined(assetExtras.cesium.credits)\n  ) {\n    const extraCredits = assetExtras.cesium.credits;\n    for (let i = 0; i < extraCredits.length; ++i) {\n      const credit = extraCredits[i];\n      credits.push(new Credit(credit.html));\n    }\n  }\n\n  credits.forEach(\n    (credit) =>\n      (credit.showOnScreen =\n        credit.showOnScreen || tileset._showCreditsOnScreen),\n  );\n\n  tileset._credits = credits;\n}\n\n/**\n * @private\n * @param {object} passOptions\n * @returns {Cesium3DTilesetTraversal}\n */\nCesium3DTileset.prototype.getTraversal = function (passOptions) {\n  const { pass } = passOptions;\n  if (\n    pass === Cesium3DTilePass.MOST_DETAILED_PRELOAD ||\n    pass === Cesium3DTilePass.MOST_DETAILED_PICK\n  ) {\n    return Cesium3DTilesetMostDetailedTraversal;\n  }\n  return this.isSkippingLevelOfDetail\n    ? Cesium3DTilesetSkipTraversal\n    : Cesium3DTilesetBaseTraversal;\n};\n\n/**\n * @private\n * @param {FrameState} frameState\n */\nCesium3DTileset.prototype.update = function (frameState) {\n  this.updateForPass(frameState, frameState.tilesetPassState);\n};\n\n/**\n * @private\n * @param {FrameState} frameState\n * @param {object} tilesetPassState\n */\nCesium3DTileset.prototype.updateForPass = function (\n  frameState,\n  tilesetPassState,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"frameState\", frameState);\n  Check.typeOf.object(\"tilesetPassState\", tilesetPassState);\n  //>>includeEnd('debug');\n\n  this.imageryLayers._update();\n\n  const pass = tilesetPassState.pass;\n  if (\n    (pass === Cesium3DTilePass.PRELOAD &&\n      (!this.preloadWhenHidden || this.show)) ||\n    (pass === Cesium3DTilePass.PRELOAD_FLIGHT &&\n      (!this.preloadFlightDestinations ||\n        (!this.show && !this.preloadWhenHidden))) ||\n    (pass === Cesium3DTilePass.REQUEST_RENDER_MODE_DEFER_CHECK &&\n      ((!this._cullRequestsWhileMoving && this.foveatedTimeDelay <= 0) ||\n        !this.show))\n  ) {\n    return;\n  }\n\n  const originalCommandList = frameState.commandList;\n  const originalCamera = frameState.camera;\n  const originalCullingVolume = frameState.cullingVolume;\n\n  tilesetPassState.ready = false;\n\n  const passOptions = Cesium3DTilePass.getPassOptions(pass);\n  const ignoreCommands = passOptions.ignoreCommands;\n\n  const commandList = tilesetPassState.commandList ?? originalCommandList;\n  const commandStart = commandList.length;\n\n  frameState.commandList = commandList;\n  frameState.camera = tilesetPassState.camera ?? originalCamera;\n  frameState.cullingVolume =\n    tilesetPassState.cullingVolume ?? originalCullingVolume;\n\n  if (passOptions.isRender) {\n    const environmentMapManager = this._environmentMapManager;\n    if (defined(this._root)) {\n      environmentMapManager.position = this.boundingSphere.center;\n    }\n    environmentMapManager.update(frameState);\n  }\n\n  // Update clipping polygons\n  const clippingPolygons = this._clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.enabled) {\n    clippingPolygons.queueCommands(frameState);\n  }\n\n  const passStatistics = this._statisticsPerPass[pass];\n\n  if (this.show || ignoreCommands) {\n    this._pass = pass;\n    tilesetPassState.ready = update(\n      this,\n      frameState,\n      passStatistics,\n      passOptions,\n    );\n  }\n\n  if (ignoreCommands) {\n    commandList.length = commandStart;\n  }\n\n  frameState.commandList = originalCommandList;\n  frameState.camera = originalCamera;\n  frameState.cullingVolume = originalCullingVolume;\n};\n\n/**\n * <code>true</code> if the tileset JSON file lists the extension in extensionsUsed; otherwise, <code>false</code>.\n * @param {string} extensionName The name of the extension to check.\n *\n * @returns {boolean} <code>true</code> if the tileset JSON file lists the extension in extensionsUsed; otherwise, <code>false</code>.\n */\nCesium3DTileset.prototype.hasExtension = function (extensionName) {\n  if (!defined(this._extensionsUsed)) {\n    return false;\n  }\n\n  return this._extensionsUsed.indexOf(extensionName) > -1;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Cesium3DTileset#destroy\n */\nCesium3DTileset.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * tileset = tileset && tileset.destroy();\n *\n * @see Cesium3DTileset#isDestroyed\n */\nCesium3DTileset.prototype.destroy = function () {\n  this._tileDebugLabels =\n    this._tileDebugLabels && this._tileDebugLabels.destroy();\n  this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();\n  this._clippingPolygons =\n    this._clippingPolygons && this._clippingPolygons.destroy();\n\n  // Traverse the tree and destroy all tiles\n  if (defined(this._root)) {\n    const stack = scratchStack;\n    stack.push(this._root);\n\n    while (stack.length > 0) {\n      const tile = stack.pop();\n      tile.destroy();\n\n      const children = tile.children;\n      for (let i = 0; i < children.length; ++i) {\n        stack.push(children[i]);\n      }\n    }\n  }\n  this._root = undefined;\n\n  if (\n    this._shouldDestroyImageBasedLighting &&\n    !this._imageBasedLighting.isDestroyed()\n  ) {\n    this._imageBasedLighting.destroy();\n  }\n  this._imageBasedLighting = undefined;\n\n  if (!this._environmentMapManager.isDestroyed()) {\n    this._environmentMapManager.destroy();\n  }\n  this._environmentMapManager = undefined;\n\n  if (!this._imageryLayers.isDestroyed()) {\n    this.imageryLayers.layerAdded.removeEventListener(\n      this._imageryLayersListener,\n    );\n    this.imageryLayers.layerRemoved.removeEventListener(\n      this._imageryLayersListener,\n    );\n    this.imageryLayers.layerMoved.removeEventListener(\n      this._imageryLayersListener,\n    );\n    this.imageryLayers.layerShownOrHidden.removeEventListener(\n      this._imageryLayersListener,\n    );\n    this._imageryLayers.destroy();\n  }\n  this._imageryLayers = undefined;\n\n  return destroyObject(this);\n};\n\nCesium3DTileset.supportedExtensions = {\n  \"3DTILES_metadata\": true,\n  \"3DTILES_implicit_tiling\": true,\n  \"3DTILES_content_gltf\": true,\n  \"3DTILES_multiple_contents\": true,\n  \"3DTILES_bounding_volume_S2\": true,\n  \"3DTILES_batch_table_hierarchy\": true,\n  \"3DTILES_draco_point_compression\": true,\n  MAXAR_content_geojson: true,\n};\n\n/**\n * Checks to see if a given extension is supported by Cesium3DTileset. If\n * the extension is not supported by Cesium3DTileset, it throws a RuntimeError.\n *\n * @param {object} extensionsRequired The extensions we wish to check\n *\n * @private\n */\nCesium3DTileset.checkSupportedExtensions = function (extensionsRequired) {\n  for (let i = 0; i < extensionsRequired.length; i++) {\n    if (!Cesium3DTileset.supportedExtensions[extensionsRequired[i]]) {\n      throw new RuntimeError(\n        `Unsupported 3D Tiles Extension: ${extensionsRequired[i]}`,\n      );\n    }\n  }\n};\n\nconst scratchGetHeightRay = new Ray();\nconst scratchIntersection = new Cartesian3();\nconst scratchGetHeightCartographic = new Cartographic();\n\n/**\n * Get the height of the loaded surface at a given cartographic. This function will only take into account meshes for loaded tiles, not neccisarily the most detailed tiles available for a tileset. This function will always return undefined when sampling a point cloud.\n *\n * @param {Cartographic} cartographic The cartographic for which to find the height.\n * @param {Scene} scene The scene where visualization is taking place.\n * @returns {number|undefined} The height of the cartographic or undefined if it could not be found.\n *\n * @example\n * const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(124624234);\n * scene.primitives.add(tileset);\n *\n * const height = tileset.getHeight(scene.camera.positionCartographic, scene);\n */\nCesium3DTileset.prototype.getHeight = function (cartographic, scene) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"cartographic\", cartographic);\n  Check.typeOf.object(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  let ellipsoid = scene.ellipsoid;\n  if (!defined(ellipsoid)) {\n    ellipsoid = Ellipsoid.WGS84;\n  }\n\n  const ray = scratchGetHeightRay;\n  const position = ellipsoid.cartographicToCartesian(\n    cartographic,\n    ray.direction,\n  );\n  Cartesian3.normalize(ray.direction, ray.direction);\n\n  ray.direction = Cartesian3.normalize(position, ray.direction);\n  ray.direction = Cartesian3.negate(position, ray.direction);\n  ray.origin = Cartesian3.multiplyByScalar(\n    ray.direction,\n    -2 * ellipsoid.maximumRadius,\n    ray.origin,\n  );\n\n  const intersection = this.pick(ray, scene.frameState, scratchIntersection);\n  if (!defined(intersection)) {\n    return;\n  }\n\n  return ellipsoid.cartesianToCartographic(\n    intersection,\n    scratchGetHeightCartographic,\n  )?.height;\n};\n\n/**\n * Calls the callback when a new tile is rendered that contains the given cartographic. The only parameter\n * is the cartographic position on the tile.\n *\n * @private\n *\n * @param {Scene} scene The scene where visualization is taking place.\n * @param {Cartographic} cartographic The cartographic position.\n * @param {Function} callback The function to be called when a new tile is loaded.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use.\n * @returns {Function} The function to remove this callback from the quadtree.\n */\nCesium3DTileset.prototype.updateHeight = function (\n  cartographic,\n  callback,\n  ellipsoid,\n) {\n  ellipsoid = ellipsoid ?? Ellipsoid.WGS84;\n\n  const object = {\n    positionCartographic: cartographic,\n    ellipsoid: ellipsoid,\n    callback: callback,\n    invoked: false,\n  };\n\n  const removeCallback = () => {\n    const addedCallbacks = this._addHeightCallbacks;\n    const length = addedCallbacks.length;\n    for (let i = 0; i < length; ++i) {\n      if (addedCallbacks[i] === object) {\n        addedCallbacks.splice(i, 1);\n        break;\n      }\n    }\n\n    if (object.callback) {\n      object.callback = undefined;\n    }\n  };\n\n  this._addHeightCallbacks.push(object);\n  return removeCallback;\n};\n\nconst scratchSphereIntersection = new Interval();\nconst scratchPickIntersection = new Cartesian3();\n\n/**\n * Find an intersection between a ray and the tileset surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nCesium3DTileset.prototype.pick = function (ray, frameState, result) {\n  if (!frameState.context.webgl2 && !this._enablePick) {\n    return;\n  }\n\n  const selectedTiles = this._selectedTiles;\n  const selectedLength = selectedTiles.length;\n  const candidates = [];\n\n  for (let i = 0; i < selectedLength; ++i) {\n    const tile = selectedTiles[i];\n    const boundsIntersection = IntersectionTests.raySphere(\n      ray,\n      tile.contentBoundingVolume.boundingSphere,\n      scratchSphereIntersection,\n    );\n    if (!defined(boundsIntersection) || !defined(tile.content)) {\n      continue;\n    }\n\n    candidates.push(tile);\n  }\n\n  const length = candidates.length;\n  candidates.sort((a, b) => {\n    const aDist = BoundingSphere.distanceSquaredTo(\n      a.contentBoundingVolume.boundingSphere,\n      ray.origin,\n    );\n    const bDist = BoundingSphere.distanceSquaredTo(\n      b.contentBoundingVolume.boundingSphere,\n      ray.origin,\n    );\n\n    return aDist - bDist;\n  });\n\n  let intersection;\n  for (let i = 0; i < length; ++i) {\n    const tile = candidates[i];\n    const candidate = tile.content.pick(\n      ray,\n      frameState,\n      scratchPickIntersection,\n    );\n\n    if (defined(candidate)) {\n      intersection = Cartesian3.clone(candidate, result);\n      return intersection;\n    }\n  }\n};\n\n/**\n * Returns true if the given glTF extension is used by this tileset.\n * <br/><br/>\n * Relies on the <code>3DTILES_content_gltf</code> extension and will return\n * false if that extension is not used.\n *\n * @param {string} gltfExtensionName The name of the glTF extension to check.\n * @returns {boolean} <code>true</code> if the glTF extension is used by this tileset; otherwise, <code>false</code>.\n *\n * @private\n */\nCesium3DTileset.prototype.isGltfExtensionUsed = function (gltfExtensionName) {\n  if (this.hasExtension(\"3DTILES_content_gltf\")) {\n    if (!defined(this.extensions)) {\n      return false;\n    }\n    const extensionsUsed =\n      this.extensions[\"3DTILES_content_gltf\"]?.extensionsUsed;\n\n    if (!defined(extensionsUsed)) {\n      return false;\n    }\n\n    return extensionsUsed.indexOf(gltfExtensionName) > -1;\n  }\n\n  return false;\n};\n\n/**\n * Returns true if the given glTF extension is used and required by this tileset.\n * <br/><br/>\n * Relies on the <code>3DTILES_content_gltf</code> extension and will return\n * <code>false</code> if that extension is not used.\n *\n * @param {string} gltfExtensionName The name of the glTF extension to check.\n * @returns {boolean} <code>true</code> if the glTF extension is required by this tileset; otherwise, <code>false</code>.\n *\n * @private\n */\nCesium3DTileset.prototype.isGltfExtensionRequired = function (\n  gltfExtensionName,\n) {\n  if (this.isGltfExtensionUsed(gltfExtensionName)) {\n    const extensionsRequired =\n      this.extensions[\"3DTILES_content_gltf\"].extensionsRequired;\n\n    if (!defined(extensionsRequired)) {\n      return false;\n    }\n\n    return extensionsRequired.indexOf(gltfExtensionName) > -1;\n  }\n\n  return false;\n};\n\n/**\n * Optimization option. Used as a callback when {@link Cesium3DTileset#foveatedScreenSpaceError} is true to control how much to raise the screen space error for tiles outside the foveated cone,\n * interpolating between {@link Cesium3DTileset#foveatedMinimumScreenSpaceErrorRelaxation} and {@link Cesium3DTileset#maximumScreenSpaceError}.\n *\n * @callback Cesium3DTileset.foveatedInterpolationCallback\n * @default Math.lerp\n *\n * @param {number} p The start value to interpolate.\n * @param {number} q The end value to interpolate.\n * @param {number} time The time of interpolation generally in the range <code>[0.0, 1.0]</code>.\n * @returns {number} The interpolated value.\n */\nexport default Cesium3DTileset;\n","import defined from \"../Core/defined.js\";\nimport ManagedArray from \"../Core/ManagedArray.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport Cesium3DTilesetTraversal from \"./Cesium3DTilesetTraversal.js\";\n\n/**\n * Depth-first traversal that traverses all visible tiles and marks tiles for selection.\n * A tile does not refine until all children are loaded.\n * This is the traditional replacement refinement approach and is called the base traversal.\n *\n * @alias Cesium3DTilesetBaseTraversal\n * @constructor\n *\n * @private\n */\nfunction Cesium3DTilesetBaseTraversal() {}\n\nconst traversal = {\n  stack: new ManagedArray(),\n  stackMaximumLength: 0,\n};\n\nconst emptyTraversal = {\n  stack: new ManagedArray(),\n  stackMaximumLength: 0,\n};\n\n/**\n * Traverses a {@link Cesium3DTileset} to determine which tiles to load and render.\n *\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nCesium3DTilesetBaseTraversal.selectTiles = function (tileset, frameState) {\n  tileset._requestedTiles.length = 0;\n\n  if (tileset.debugFreezeFrame) {\n    return;\n  }\n\n  tileset._selectedTiles.length = 0;\n  tileset._selectedTilesToStyle.length = 0;\n  tileset._emptyTiles.length = 0;\n  tileset.hasMixedContent = false;\n\n  const root = tileset.root;\n  Cesium3DTilesetTraversal.updateTile(root, frameState);\n\n  if (!root.isVisible) {\n    return;\n  }\n\n  if (\n    root.getScreenSpaceError(frameState, true) <=\n    tileset.memoryAdjustedScreenSpaceError\n  ) {\n    return;\n  }\n\n  executeTraversal(root, frameState);\n\n  traversal.stack.trim(traversal.stackMaximumLength);\n  emptyTraversal.stack.trim(emptyTraversal.stackMaximumLength);\n\n  // Update the priority for any requests found during traversal\n  // Update after traversal so that min and max values can be used to normalize priority values\n  const requestedTiles = tileset._requestedTiles;\n  for (let i = 0; i < requestedTiles.length; ++i) {\n    requestedTiles[i].updatePriority();\n  }\n};\n\n/**\n * Mark a tile as selected if it has content available.\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nfunction selectDesiredTile(tile, frameState) {\n  if (tile.contentAvailable) {\n    Cesium3DTilesetTraversal.selectTile(tile, frameState);\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {ManagedArray} stack\n * @param {FrameState} frameState\n * @returns {boolean}\n */\nfunction updateAndPushChildren(tile, stack, frameState) {\n  const replace = tile.refine === Cesium3DTileRefine.REPLACE;\n  const { tileset, children } = tile;\n  const { updateTile, loadTile, touchTile } = Cesium3DTilesetTraversal;\n\n  for (let i = 0; i < children.length; ++i) {\n    updateTile(children[i], frameState);\n  }\n\n  // Sort by distance to take advantage of early Z and reduce artifacts for skipLevelOfDetail\n  children.sort(Cesium3DTilesetTraversal.sortChildrenByDistanceToCamera);\n\n  // For traditional replacement refinement only refine if all children are loaded.\n  // Empty tiles are exempt since it looks better if children stream in as they are loaded to fill the empty space.\n  const checkRefines = replace && tile.hasRenderableContent;\n  let refines = true;\n\n  let anyChildrenVisible = false;\n\n  // Determining min child\n  let minIndex = -1;\n  let minimumPriority = Number.MAX_VALUE;\n\n  for (let i = 0; i < children.length; ++i) {\n    const child = children[i];\n    if (child.isVisible) {\n      stack.push(child);\n      if (child._foveatedFactor < minimumPriority) {\n        minIndex = i;\n        minimumPriority = child._foveatedFactor;\n      }\n      anyChildrenVisible = true;\n    } else if (checkRefines || tileset.loadSiblings) {\n      // Keep non-visible children loaded since they are still needed before the parent can refine.\n      // Or loadSiblings is true so always load tiles regardless of visibility.\n      if (child._foveatedFactor < minimumPriority) {\n        minIndex = i;\n        minimumPriority = child._foveatedFactor;\n      }\n      loadTile(child, frameState);\n      touchTile(child, frameState);\n    }\n    if (checkRefines) {\n      let childRefines;\n      if (!child._inRequestVolume) {\n        childRefines = false;\n      } else if (!child.hasRenderableContent) {\n        childRefines = executeEmptyTraversal(child, frameState);\n      } else {\n        childRefines = child.contentAvailable;\n      }\n      refines = refines && childRefines;\n    }\n  }\n\n  if (!anyChildrenVisible) {\n    refines = false;\n  }\n\n  if (minIndex !== -1 && replace) {\n    // An ancestor will hold the _foveatedFactor and _distanceToCamera for descendants between itself and its highest priority descendant. Siblings of a min children along the way use this ancestor as their priority holder as well.\n    // Priority of all tiles that refer to the _foveatedFactor and _distanceToCamera stored in the common ancestor will be differentiated based on their _depth.\n    const minPriorityChild = children[minIndex];\n    minPriorityChild._wasMinPriorityChild = true;\n    const priorityHolder =\n      (tile._wasMinPriorityChild || tile === tileset.root) &&\n      minimumPriority <= tile._priorityHolder._foveatedFactor\n        ? tile._priorityHolder\n        : tile; // This is where priority dependency chains are wired up or started anew.\n    priorityHolder._foveatedFactor = Math.min(\n      minPriorityChild._foveatedFactor,\n      priorityHolder._foveatedFactor,\n    );\n    priorityHolder._distanceToCamera = Math.min(\n      minPriorityChild._distanceToCamera,\n      priorityHolder._distanceToCamera,\n    );\n\n    for (let i = 0; i < children.length; ++i) {\n      children[i]._priorityHolder = priorityHolder;\n    }\n  }\n\n  return refines;\n}\n\n/**\n * Depth-first traversal that traverses all visible tiles and marks tiles for selection.\n * A tile does not refine until all children are loaded.\n * This is the traditional replacement refinement approach and is called the base traversal.\n *\n * @private\n * @param {Cesium3DTile} root\n * @param {FrameState} frameState\n */\nfunction executeTraversal(root, frameState) {\n  const { tileset } = root;\n\n  const { canTraverse, loadTile, visitTile, touchTile } =\n    Cesium3DTilesetTraversal;\n  const stack = traversal.stack;\n  stack.push(root);\n\n  while (stack.length > 0) {\n    traversal.stackMaximumLength = Math.max(\n      traversal.stackMaximumLength,\n      stack.length,\n    );\n\n    const tile = stack.pop();\n\n    const parent = tile.parent;\n    const parentRefines = !defined(parent) || parent._refines;\n\n    tile._refines = canTraverse(tile)\n      ? updateAndPushChildren(tile, stack, frameState) && parentRefines\n      : false;\n\n    const stoppedRefining = !tile._refines && parentRefines;\n\n    if (!tile.hasRenderableContent) {\n      // Add empty tile just to show its debug bounding volume\n      // If the tile has tileset content load the external tileset\n      tileset._emptyTiles.push(tile);\n      loadTile(tile, frameState);\n      if (stoppedRefining) {\n        selectDesiredTile(tile, frameState);\n      }\n    } else if (tile.refine === Cesium3DTileRefine.ADD) {\n      // Additive tiles are always loaded and selected\n      selectDesiredTile(tile, frameState);\n      loadTile(tile, frameState);\n    } else if (tile.refine === Cesium3DTileRefine.REPLACE) {\n      loadTile(tile, frameState);\n      if (stoppedRefining) {\n        selectDesiredTile(tile, frameState);\n      }\n    }\n\n    visitTile(tile, frameState);\n    touchTile(tile, frameState);\n  }\n}\n\n/**\n * Depth-first traversal that checks if all nearest descendants with content are loaded.\n * Ignores visibility.\n *\n * @private\n * @param {Cesium3DTile} root\n * @param {FrameState} frameState\n * @returns {boolean}\n */\nfunction executeEmptyTraversal(root, frameState) {\n  const { canTraverse, updateTile, loadTile, touchTile } =\n    Cesium3DTilesetTraversal;\n  let allDescendantsLoaded = true;\n  const stack = emptyTraversal.stack;\n  stack.push(root);\n\n  while (stack.length > 0) {\n    emptyTraversal.stackMaximumLength = Math.max(\n      emptyTraversal.stackMaximumLength,\n      stack.length,\n    );\n\n    const tile = stack.pop();\n    const children = tile.children;\n    const childrenLength = children.length;\n\n    // Only traverse if the tile is empty - traversal stops at descendants with content\n    const traverse = !tile.hasRenderableContent && canTraverse(tile);\n\n    // Traversal stops but the tile does not have content yet\n    // There will be holes if the parent tries to refine to its children, so don't refine\n    if (!traverse && !tile.contentAvailable) {\n      allDescendantsLoaded = false;\n    }\n\n    updateTile(tile, frameState);\n    if (!tile.isVisible) {\n      // Load tiles that aren't visible since they are still needed for the parent to refine\n      loadTile(tile, frameState);\n      touchTile(tile, frameState);\n    }\n\n    if (traverse) {\n      for (let i = 0; i < childrenLength; ++i) {\n        const child = children[i];\n        stack.push(child);\n      }\n    }\n  }\n\n  return root.hasEmptyContent || allDescendantsLoaded;\n}\n\nexport default Cesium3DTilesetBaseTraversal;\n","import defined from \"../Core/defined.js\";\nimport DoublyLinkedList from \"../Core/DoublyLinkedList.js\";\n\n/**\n * Stores tiles with content loaded.\n *\n * @private\n */\nfunction Cesium3DTilesetCache() {\n  // [head, sentinel) -> tiles that weren't selected this frame and may be removed from the cache\n  // (sentinel, tail] -> tiles that were selected this frame\n  this._list = new DoublyLinkedList();\n  this._sentinel = this._list.add();\n  this._trimTiles = false;\n}\n\nCesium3DTilesetCache.prototype.reset = function () {\n  // Move sentinel node to the tail so, at the start of the frame, all tiles\n  // may be potentially replaced.  Tiles are moved to the right of the sentinel\n  // when they are selected so they will not be replaced.\n  this._list.splice(this._list.tail, this._sentinel);\n};\n\nCesium3DTilesetCache.prototype.touch = function (tile) {\n  const node = tile.cacheNode;\n  if (defined(node)) {\n    this._list.splice(this._sentinel, node);\n  }\n};\n\nCesium3DTilesetCache.prototype.add = function (tile) {\n  if (!defined(tile.cacheNode)) {\n    tile.cacheNode = this._list.add(tile);\n  }\n};\n\nCesium3DTilesetCache.prototype.unloadTile = function (\n  tileset,\n  tile,\n  unloadCallback,\n) {\n  const node = tile.cacheNode;\n  if (!defined(node)) {\n    return;\n  }\n\n  this._list.remove(node);\n  tile.cacheNode = undefined;\n  unloadCallback(tileset, tile);\n};\n\nCesium3DTilesetCache.prototype.unloadTiles = function (\n  tileset,\n  unloadCallback,\n) {\n  const trimTiles = this._trimTiles;\n  this._trimTiles = false;\n\n  const list = this._list;\n\n  // Traverse the list only to the sentinel since tiles/nodes to the\n  // right of the sentinel were used this frame.\n  //\n  // The sub-list to the left of the sentinel is ordered from LRU to MRU.\n  const sentinel = this._sentinel;\n  let node = list.head;\n  while (\n    node !== sentinel &&\n    (tileset.totalMemoryUsageInBytes > tileset.cacheBytes || trimTiles)\n  ) {\n    const tile = node.item;\n    node = node.next;\n    this.unloadTile(tileset, tile, unloadCallback);\n  }\n};\n\nCesium3DTilesetCache.prototype.trim = function () {\n  this._trimTiles = true;\n};\nexport default Cesium3DTilesetCache;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * A heatmap colorizer in a {@link Cesium3DTileset}. A tileset can colorize its visible tiles in a heatmap style.\n *\n * @alias Cesium3DTilesetHeatmap\n * @constructor\n * @private\n */\nfunction Cesium3DTilesetHeatmap(tilePropertyName) {\n  /**\n   * The tile variable to track for heatmap colorization.\n   * Tile's will be colorized relative to the other visible tile's values for this variable.\n   *\n   * @type {string}\n   */\n  this.tilePropertyName = tilePropertyName;\n\n  // Members that are updated every time a tile is colorized\n  this._minimum = Number.MAX_VALUE;\n  this._maximum = -Number.MAX_VALUE;\n\n  // Members that are updated once every frame\n  this._previousMinimum = Number.MAX_VALUE;\n  this._previousMaximum = -Number.MAX_VALUE;\n\n  // If defined uses a reference minimum maximum to colorize by instead of using last frames minimum maximum of rendered tiles.\n  // For example, the _loadTimestamp can get a better colorization using setReferenceMinimumMaximum in order to take accurate colored timing diffs of various scenes.\n  this._referenceMinimum = {};\n  this._referenceMaximum = {};\n}\n\n/**\n * Convert to a usable heatmap value (i.e. a number). Ensures that tile values that aren't stored as numbers can be used for colorization.\n * @private\n */\nfunction getHeatmapValue(tileValue, tilePropertyName) {\n  let value;\n  if (tilePropertyName === \"_loadTimestamp\") {\n    value = JulianDate.toDate(tileValue).getTime();\n  } else {\n    value = tileValue;\n  }\n  return value;\n}\n\n/**\n * Sets the reference minimum and maximum for the variable name. Converted to numbers before they are stored.\n *\n * @param {object} minimum The minimum reference value.\n * @param {object} maximum The maximum reference value.\n * @param {string} tilePropertyName The tile variable that will use these reference values when it is colorized.\n */\nCesium3DTilesetHeatmap.prototype.setReferenceMinimumMaximum = function (\n  minimum,\n  maximum,\n  tilePropertyName,\n) {\n  this._referenceMinimum[tilePropertyName] = getHeatmapValue(\n    minimum,\n    tilePropertyName,\n  );\n  this._referenceMaximum[tilePropertyName] = getHeatmapValue(\n    maximum,\n    tilePropertyName,\n  );\n};\n\nfunction getHeatmapValueAndUpdateMinimumMaximum(heatmap, tile) {\n  const tilePropertyName = heatmap.tilePropertyName;\n  if (defined(tilePropertyName)) {\n    const heatmapValue = getHeatmapValue(\n      tile[tilePropertyName],\n      tilePropertyName,\n    );\n    if (!defined(heatmapValue)) {\n      heatmap.tilePropertyName = undefined;\n      return heatmapValue;\n    }\n    heatmap._maximum = Math.max(heatmapValue, heatmap._maximum);\n    heatmap._minimum = Math.min(heatmapValue, heatmap._minimum);\n    return heatmapValue;\n  }\n}\n\nconst heatmapColors = [\n  new Color(0.1, 0.1, 0.1, 1), // Dark Gray\n  new Color(0.153, 0.278, 0.878, 1), // Blue\n  new Color(0.827, 0.231, 0.49, 1), // Pink\n  new Color(0.827, 0.188, 0.22, 1), // Red\n  new Color(1.0, 0.592, 0.259, 1), // Orange\n  new Color(1.0, 0.843, 0.0, 1),\n]; // Yellow\n/**\n * Colorize the tile in heat map style based on where it lies within the minimum maximum window.\n * Heatmap colors are black, blue, pink, red, orange, yellow. 'Cold' or low numbers will be black and blue, 'Hot' or high numbers will be orange and yellow,\n * @param {Cesium3DTile} tile The tile to colorize relative to last frame's minimum and maximum values of all visible tiles.\n * @param {FrameState} frameState The frame state.\n */\nCesium3DTilesetHeatmap.prototype.colorize = function (tile, frameState) {\n  const tilePropertyName = this.tilePropertyName;\n  if (\n    !defined(tilePropertyName) ||\n    !tile.contentAvailable ||\n    tile._selectedFrame !== frameState.frameNumber\n  ) {\n    return;\n  }\n\n  const heatmapValue = getHeatmapValueAndUpdateMinimumMaximum(this, tile);\n  const minimum = this._previousMinimum;\n  const maximum = this._previousMaximum;\n\n  if (minimum === Number.MAX_VALUE || maximum === -Number.MAX_VALUE) {\n    return;\n  }\n\n  // Shift the minimum maximum window down to 0\n  const shiftedMax = maximum - minimum + CesiumMath.EPSILON7; // Prevent divide by 0\n  const shiftedValue = CesiumMath.clamp(\n    heatmapValue - minimum,\n    0.0,\n    shiftedMax,\n  );\n\n  // Get position between minimum and maximum and convert that to a position in the color array\n  const zeroToOne = shiftedValue / shiftedMax;\n  const lastIndex = heatmapColors.length - 1.0;\n  const colorPosition = zeroToOne * lastIndex;\n\n  // Take floor and ceil of the value to get the two colors to lerp between, lerp using the fractional portion\n  const colorPositionFloor = Math.floor(colorPosition);\n  const colorPositionCeil = Math.ceil(colorPosition);\n  const t = colorPosition - colorPositionFloor;\n  const colorZero = heatmapColors[colorPositionFloor];\n  const colorOne = heatmapColors[colorPositionCeil];\n\n  // Perform the lerp\n  const finalColor = Color.clone(Color.WHITE);\n  finalColor.red = CesiumMath.lerp(colorZero.red, colorOne.red, t);\n  finalColor.green = CesiumMath.lerp(colorZero.green, colorOne.green, t);\n  finalColor.blue = CesiumMath.lerp(colorZero.blue, colorOne.blue, t);\n  tile._debugColor = finalColor;\n};\n\n/**\n * Resets the tracked minimum maximum values for heatmap colorization. Happens right before tileset traversal.\n */\nCesium3DTilesetHeatmap.prototype.resetMinimumMaximum = function () {\n  // For heat map colorization\n  const tilePropertyName = this.tilePropertyName;\n  if (defined(tilePropertyName)) {\n    const referenceMinimum = this._referenceMinimum[tilePropertyName];\n    const referenceMaximum = this._referenceMaximum[tilePropertyName];\n    const useReference = defined(referenceMinimum) && defined(referenceMaximum);\n    this._previousMinimum = useReference ? referenceMinimum : this._minimum;\n    this._previousMaximum = useReference ? referenceMaximum : this._maximum;\n    this._minimum = Number.MAX_VALUE;\n    this._maximum = -Number.MAX_VALUE;\n  }\n};\nexport default Cesium3DTilesetHeatmap;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport GroupMetadata from \"./GroupMetadata.js\";\nimport TilesetMetadata from \"./TilesetMetadata.js\";\n\n/**\n * An object containing metadata about a 3D Tileset.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles.\n * </p>\n * <p>\n * This object represents the tileset JSON (3D Tiles 1.1) or the <code>3DTILES_metadata</code> object that contains\n * the schema ({@link MetadataSchema}), tileset metadata ({@link TilesetMetadata}), group metadata (dictionary of {@link GroupMetadata}), and metadata statistics (dictionary)\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.metadataJson Either the tileset JSON (3D Tiles 1.1) or the <code>3DTILES_metadata</code> extension object that contains the tileset metadata.\n * @param {MetadataSchema} options.schema The parsed schema.\n *\n * @alias Cesium3DTilesetMetadata\n * @constructor\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction Cesium3DTilesetMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const metadataJson = options.metadataJson;\n\n  // The calling code is responsible for loading the schema.\n  // This keeps metadata parsing synchronous.\n  const schema = options.schema;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.metadataJson\", metadataJson);\n  Check.typeOf.object(\"options.schema\", schema);\n  //>>includeEnd('debug');\n\n  // An older schema stored the tileset metadata in the \"tileset\" property.\n  const metadata = metadataJson.metadata ?? metadataJson.tileset;\n\n  let tileset;\n  if (defined(metadata)) {\n    tileset = new TilesetMetadata({\n      tileset: metadata,\n      class: schema.classes[metadata.class],\n    });\n  }\n\n  let groupIds = [];\n  const groups = [];\n  const groupsJson = metadataJson.groups;\n  if (Array.isArray(groupsJson)) {\n    const length = groupsJson.length;\n    for (let i = 0; i < length; i++) {\n      const group = groupsJson[i];\n      groups.push(\n        new GroupMetadata({\n          group: group,\n          class: schema.classes[group.class],\n        }),\n      );\n    }\n  } else if (defined(groupsJson)) {\n    // An older version of group metadata stored groups in a dictionary\n    // instead of an array.\n    groupIds = Object.keys(groupsJson).sort();\n    const length = groupIds.length;\n    for (let i = 0; i < length; i++) {\n      const groupId = groupIds[i];\n      if (groupsJson.hasOwnProperty(groupId)) {\n        const group = groupsJson[groupId];\n        groups.push(\n          new GroupMetadata({\n            id: groupId,\n            group: groupsJson[groupId],\n            class: schema.classes[group.class],\n          }),\n        );\n      }\n    }\n  }\n\n  this._schema = schema;\n  this._groups = groups;\n  this._groupIds = groupIds;\n  this._tileset = tileset;\n\n  this._statistics = metadataJson.statistics;\n  this._extras = metadataJson.extras;\n  this._extensions = metadataJson.extensions;\n}\n\nObject.defineProperties(Cesium3DTilesetMetadata.prototype, {\n  /**\n   * Schema containing classes and enums.\n   *\n   * @memberof Cesium3DTilesetMetadata.prototype\n   * @type {MetadataSchema}\n   * @readonly\n   * @private\n   */\n  schema: {\n    get: function () {\n      return this._schema;\n    },\n  },\n\n  /**\n   * Metadata about groups of content.\n   *\n   * @memberof Cesium3DTilesetMetadata.prototype\n   * @type {GroupMetadata[]}\n   * @readonly\n   * @private\n   */\n  groups: {\n    get: function () {\n      return this._groups;\n    },\n  },\n\n  /**\n   * The IDs of the group metadata in the corresponding groups dictionary.\n   * Only populated if using the legacy schema.\n   *\n   * @memberof Cesium3DTilesetMetadata.prototype\n   * @type {}\n   * @readonly\n   * @private\n   */\n  groupIds: {\n    get: function () {\n      return this._groupIds;\n    },\n  },\n\n  /**\n   * Metadata about the tileset as a whole.\n   *\n   * @memberof Cesium3DTilesetMetadata.prototype\n   * @type {TilesetMetadata}\n   * @readonly\n   * @private\n   */\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  /**\n   * Statistics about the metadata.\n   * <p>\n   * See the {@link https://github.com/CesiumGS/3d-tiles/blob/main/extensions/3DTILES_metadata/schema/statistics.schema.json|statistics schema reference}\n   * in the 3D Tiles spec for the full set of properties.\n   * </p>\n   *\n   * @memberof Cesium3DTilesetMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  statistics: {\n    get: function () {\n      return this._statistics;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof Cesium3DTilesetMetadata.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof Cesium3DTilesetMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\nexport default Cesium3DTilesetMetadata;\n","import Intersect from \"../Core/Intersect.js\";\nimport ManagedArray from \"../Core/ManagedArray.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport Cesium3DTilesetTraversal from \"./Cesium3DTilesetTraversal.js\";\n\n/**\n * Traversal that loads all leaves that intersect the camera frustum.\n * Used to determine ray-tileset intersections during a pickFromRayMostDetailed call.\n *\n * @alias Cesium3DTilesetMostDetailedTraversal\n * @constructor\n *\n * @private\n */\nfunction Cesium3DTilesetMostDetailedTraversal() {}\n\nconst traversal = {\n  stack: new ManagedArray(),\n  stackMaximumLength: 0,\n};\n\n/**\n * Traverses a {@link Cesium3DTileset} to determine which tiles to load and render.\n *\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n * @returns {boolean} Whether the appropriate tile is ready for picking\n */\nCesium3DTilesetMostDetailedTraversal.selectTiles = function (\n  tileset,\n  frameState,\n) {\n  tileset._selectedTiles.length = 0;\n  tileset._requestedTiles.length = 0;\n  tileset.hasMixedContent = false;\n\n  let ready = true;\n\n  const root = tileset.root;\n  root.updateVisibility(frameState);\n\n  if (!root.isVisible) {\n    return ready;\n  }\n\n  const { touchTile, visitTile } = Cesium3DTilesetTraversal;\n\n  const stack = traversal.stack;\n  stack.push(root);\n\n  while (stack.length > 0) {\n    traversal.stackMaximumLength = Math.max(\n      traversal.stackMaximumLength,\n      stack.length,\n    );\n\n    const tile = stack.pop();\n    const add = tile.refine === Cesium3DTileRefine.ADD;\n    const replace = tile.refine === Cesium3DTileRefine.REPLACE;\n    const traverse = canTraverse(tile);\n\n    if (traverse) {\n      updateAndPushChildren(tile, stack, frameState);\n    }\n\n    if (add || (replace && !traverse)) {\n      loadTile(tileset, tile);\n      touchTile(tile, frameState);\n      selectDesiredTile(tile, frameState);\n\n      if (tile.hasRenderableContent && !tile.contentAvailable) {\n        ready = false;\n      }\n    }\n\n    visitTile(tile, frameState);\n  }\n\n  traversal.stack.trim(traversal.stackMaximumLength);\n\n  return ready;\n};\n\nfunction canTraverse(tile) {\n  if (tile.children.length === 0) {\n    return false;\n  }\n\n  if (tile.hasTilesetContent || tile.hasImplicitContent) {\n    // Traverse external tileset to visit its root tile\n    // Don't traverse if the subtree is expired because it will be destroyed\n    return !tile.contentExpired;\n  }\n\n  if (tile.hasEmptyContent) {\n    return true;\n  }\n\n  return true; // Keep traversing until a leaf is hit\n}\n\nfunction updateAndPushChildren(tile, stack, frameState) {\n  const { children } = tile;\n\n  for (let i = 0; i < children.length; ++i) {\n    const child = children[i];\n    child.updateVisibility(frameState);\n    if (child.isVisible) {\n      stack.push(child);\n    }\n  }\n}\n\nfunction loadTile(tileset, tile) {\n  if (tile.hasUnloadedRenderableContent || tile.contentExpired) {\n    tile._priority = 0.0; // Highest priority\n    tileset._requestedTiles.push(tile);\n  }\n}\n\nfunction selectDesiredTile(tile, frameState) {\n  if (\n    tile.contentAvailable &&\n    tile.contentVisibility(frameState) !== Intersect.OUTSIDE\n  ) {\n    tile.tileset._selectedTiles.push(tile);\n  }\n}\n\nexport default Cesium3DTilesetMostDetailedTraversal;\n","import defined from \"../Core/defined.js\";\nimport ManagedArray from \"../Core/ManagedArray.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\nimport Cesium3DTilesetTraversal from \"./Cesium3DTilesetTraversal.js\";\n\n/**\n * Depth-first traversal that traverses all visible tiles and marks tiles for selection.\n * Allows for skipping levels of the tree and rendering children and parent tiles simultaneously.\n *\n * @alias Cesium3DTilesetSkipTraversal\n * @constructor\n *\n * @private\n */\nfunction Cesium3DTilesetSkipTraversal() {}\n\nconst traversal = {\n  stack: new ManagedArray(),\n  stackMaximumLength: 0,\n};\n\nconst descendantTraversal = {\n  stack: new ManagedArray(),\n  stackMaximumLength: 0,\n};\n\nconst selectionTraversal = {\n  stack: new ManagedArray(),\n  stackMaximumLength: 0,\n  ancestorStack: new ManagedArray(),\n  ancestorStackMaximumLength: 0,\n};\n\nconst descendantSelectionDepth = 2;\n\n/**\n * Traverses a {@link Cesium3DTileset} to determine which tiles to load and render.\n *\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nCesium3DTilesetSkipTraversal.selectTiles = function (tileset, frameState) {\n  tileset._requestedTiles.length = 0;\n\n  if (tileset.debugFreezeFrame) {\n    return;\n  }\n\n  tileset._selectedTiles.length = 0;\n  tileset._selectedTilesToStyle.length = 0;\n  tileset._emptyTiles.length = 0;\n  tileset.hasMixedContent = false;\n\n  const root = tileset.root;\n  Cesium3DTilesetTraversal.updateTile(root, frameState);\n\n  if (!root.isVisible) {\n    return;\n  }\n\n  if (\n    root.getScreenSpaceError(frameState, true) <=\n    tileset.memoryAdjustedScreenSpaceError\n  ) {\n    return;\n  }\n\n  executeTraversal(root, frameState);\n  traverseAndSelect(root, frameState);\n\n  traversal.stack.trim(traversal.stackMaximumLength);\n  descendantTraversal.stack.trim(descendantTraversal.stackMaximumLength);\n  selectionTraversal.stack.trim(selectionTraversal.stackMaximumLength);\n  selectionTraversal.ancestorStack.trim(\n    selectionTraversal.ancestorStackMaximumLength,\n  );\n\n  // Update the priority for any requests found during traversal\n  // Update after traversal so that min and max values can be used to normalize priority values\n  const requestedTiles = tileset._requestedTiles;\n  for (let i = 0; i < requestedTiles.length; ++i) {\n    requestedTiles[i].updatePriority();\n  }\n};\n\n/**\n * Mark descendant tiles for rendering, and update as needed\n *\n * @private\n * @param {Cesium3DTile} root\n * @param {FrameState} frameState\n */\nfunction selectDescendants(root, frameState) {\n  const { updateTile, touchTile, selectTile } = Cesium3DTilesetTraversal;\n  const stack = descendantTraversal.stack;\n  stack.push(root);\n  while (stack.length > 0) {\n    descendantTraversal.stackMaximumLength = Math.max(\n      descendantTraversal.stackMaximumLength,\n      stack.length,\n    );\n    const tile = stack.pop();\n    const children = tile.children;\n    for (let i = 0; i < children.length; ++i) {\n      const child = children[i];\n      if (child.isVisible) {\n        if (child.contentAvailable) {\n          updateTile(child, frameState);\n          touchTile(child, frameState);\n          selectTile(child, frameState);\n        } else if (child._depth - root._depth < descendantSelectionDepth) {\n          // Continue traversing, but not too far\n          stack.push(child);\n        }\n      }\n    }\n  }\n}\n\n/**\n * Mark a tile as selected if it has content available.\n * If its content is not available, and we are skipping levels of detail,\n * select an ancestor or descendant tile instead\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nfunction selectDesiredTile(tile, frameState) {\n  // If this tile is not loaded attempt to select its ancestor instead\n  const loadedTile = tile.contentAvailable\n    ? tile\n    : tile._ancestorWithContentAvailable;\n  if (defined(loadedTile)) {\n    // Tiles will actually be selected in traverseAndSelect\n    loadedTile._shouldSelect = true;\n  } else {\n    // If no ancestors are ready traverse down and select tiles to minimize empty regions.\n    // This happens often for immediatelyLoadDesiredLevelOfDetail where parent tiles are not necessarily loaded before zooming out.\n    selectDescendants(tile, frameState);\n  }\n}\n\n/**\n * Update links to the ancestor tiles that have content\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nfunction updateTileAncestorContentLinks(tile, frameState) {\n  tile._ancestorWithContent = undefined;\n  tile._ancestorWithContentAvailable = undefined;\n\n  const { parent } = tile;\n  if (!defined(parent)) {\n    return;\n  }\n  const parentHasContent =\n    !parent.hasUnloadedRenderableContent ||\n    parent._requestedFrame === frameState.frameNumber;\n\n  // ancestorWithContent is an ancestor that has content or has the potential to have\n  // content. Used in conjunction with tileset.skipLevels to know when to skip a tile.\n  tile._ancestorWithContent = parentHasContent\n    ? parent\n    : parent._ancestorWithContent;\n\n  // ancestorWithContentAvailable is an ancestor that is rendered if a desired tile is not loaded\n  tile._ancestorWithContentAvailable = parent.contentAvailable\n    ? parent\n    : parent._ancestorWithContentAvailable;\n}\n\n/**\n * Determine if a tile has reached the limit of level of detail skipping.\n * If so, it should _not_ be skipped: it should be loaded and rendered\n *\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n * @returns {boolean} true if this tile should not be skipped\n */\nfunction reachedSkippingThreshold(tileset, tile) {\n  const ancestor = tile._ancestorWithContent;\n  return (\n    !tileset.immediatelyLoadDesiredLevelOfDetail &&\n    (tile._priorityProgressiveResolutionScreenSpaceErrorLeaf ||\n      (defined(ancestor) &&\n        tile._screenSpaceError <\n          ancestor._screenSpaceError / tileset.skipScreenSpaceErrorFactor &&\n        tile._depth > ancestor._depth + tileset.skipLevels))\n  );\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {ManagedArray} stack\n * @param {FrameState} frameState\n * @returns {boolean}\n */\nfunction updateAndPushChildren(tile, stack, frameState) {\n  const { tileset, children } = tile;\n  const { updateTile, loadTile, touchTile } = Cesium3DTilesetTraversal;\n\n  for (let i = 0; i < children.length; ++i) {\n    updateTile(children[i], frameState);\n  }\n\n  // Sort by distance to take advantage of early Z and reduce artifacts\n  children.sort(Cesium3DTilesetTraversal.sortChildrenByDistanceToCamera);\n\n  let anyChildrenVisible = false;\n\n  for (let i = 0; i < children.length; ++i) {\n    const child = children[i];\n    if (child.isVisible) {\n      stack.push(child);\n      anyChildrenVisible = true;\n    } else if (tileset.loadSiblings) {\n      loadTile(child, frameState);\n      touchTile(child, frameState);\n    }\n  }\n\n  return anyChildrenVisible;\n}\n\n/**\n * Determine if a tile is part of the base traversal.\n * If not, this tile could be considered for level of detail skipping\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {number} baseScreenSpaceError\n * @returns {boolean}\n */\nfunction inBaseTraversal(tile, baseScreenSpaceError) {\n  const { tileset } = tile;\n  if (tileset.immediatelyLoadDesiredLevelOfDetail) {\n    return false;\n  }\n  if (!defined(tile._ancestorWithContent)) {\n    // Include root or near-root tiles in the base traversal so there is something to select up to\n    return true;\n  }\n  if (tile._screenSpaceError === 0.0) {\n    // If a leaf, use parent's SSE\n    return tile.parent._screenSpaceError > baseScreenSpaceError;\n  }\n  return tile._screenSpaceError > baseScreenSpaceError;\n}\n\n/**\n * Depth-first traversal that traverses all visible tiles and marks tiles for selection.\n * Tiles that have a greater screen space error than the base screen space error are part of the base traversal,\n * all other tiles are part of the skip traversal. The skip traversal allows for skipping levels of the tree\n * and rendering children and parent tiles simultaneously.\n *\n * @private\n * @param {Cesium3DTile} root\n * @param {FrameState} frameState\n */\nfunction executeTraversal(root, frameState) {\n  const { tileset } = root;\n  const baseScreenSpaceError = tileset.immediatelyLoadDesiredLevelOfDetail\n    ? Number.MAX_VALUE\n    : Math.max(\n        tileset.baseScreenSpaceError,\n        tileset.memoryAdjustedScreenSpaceError,\n      );\n  const { canTraverse, loadTile, visitTile, touchTile } =\n    Cesium3DTilesetTraversal;\n  const stack = traversal.stack;\n  stack.push(root);\n\n  while (stack.length > 0) {\n    traversal.stackMaximumLength = Math.max(\n      traversal.stackMaximumLength,\n      stack.length,\n    );\n\n    const tile = stack.pop();\n\n    updateTileAncestorContentLinks(tile, frameState);\n    const parent = tile.parent;\n    const parentRefines = !defined(parent) || parent._refines;\n\n    tile._refines = canTraverse(tile)\n      ? updateAndPushChildren(tile, stack, frameState) && parentRefines\n      : false;\n\n    const stoppedRefining = !tile._refines && parentRefines;\n\n    if (!tile.hasRenderableContent) {\n      // Add empty tile just to show its debug bounding volume\n      // If the tile has tileset content load the external tileset\n      // If the tile cannot refine further select its nearest loaded ancestor\n      tileset._emptyTiles.push(tile);\n      loadTile(tile, frameState);\n      if (stoppedRefining) {\n        selectDesiredTile(tile, frameState);\n      }\n    } else if (tile.refine === Cesium3DTileRefine.ADD) {\n      // Additive tiles are always loaded and selected\n      selectDesiredTile(tile, frameState);\n      loadTile(tile, frameState);\n    } else if (tile.refine === Cesium3DTileRefine.REPLACE) {\n      if (inBaseTraversal(tile, baseScreenSpaceError)) {\n        // Always load tiles in the base traversal\n        // Select tiles that can't refine further\n        loadTile(tile, frameState);\n        if (stoppedRefining) {\n          selectDesiredTile(tile, frameState);\n        }\n      } else if (stoppedRefining) {\n        // In skip traversal, load and select tiles that can't refine further\n        selectDesiredTile(tile, frameState);\n        loadTile(tile, frameState);\n      } else if (reachedSkippingThreshold(tileset, tile)) {\n        // In skip traversal, load tiles that aren't skipped\n        loadTile(tile, frameState);\n      }\n    }\n\n    visitTile(tile, frameState);\n    touchTile(tile, frameState);\n  }\n}\n\n/**\n * Traverse the tree and check if their selected frame is the current frame. If so, add it to a selection queue.\n * This is a preorder traversal so children tiles are selected before ancestor tiles.\n *\n * The reason for the preorder traversal is so that tiles can easily be marked with their\n * selection depth. A tile's _selectionDepth is its depth in the tree where all non-selected tiles are removed.\n * This property is important for use in the stencil test because we want to render deeper tiles on top of their\n * ancestors. If a tileset is very deep, the depth is unlikely to fit into the stencil buffer.\n *\n * We want to select children before their ancestors because there is no guarantee on the relationship between\n * the children's z-depth and the ancestor's z-depth. We cannot rely on Z because we want the child to appear on top\n * of ancestor regardless of true depth. The stencil tests used require children to be drawn first.\n *\n * NOTE: 3D Tiles uses 3 bits from the stencil buffer meaning this will not work when there is a chain of\n * selected tiles that is deeper than 7. This is not very likely.\n *\n * @private\n * @param {Cesium3DTile} root\n * @param {FrameState} frameState\n */\nfunction traverseAndSelect(root, frameState) {\n  const { selectTile, canTraverse } = Cesium3DTilesetTraversal;\n  const { stack, ancestorStack } = selectionTraversal;\n  let lastAncestor;\n\n  stack.push(root);\n\n  while (stack.length > 0 || ancestorStack.length > 0) {\n    selectionTraversal.stackMaximumLength = Math.max(\n      selectionTraversal.stackMaximumLength,\n      stack.length,\n    );\n    selectionTraversal.ancestorStackMaximumLength = Math.max(\n      selectionTraversal.ancestorStackMaximumLength,\n      ancestorStack.length,\n    );\n\n    if (ancestorStack.length > 0) {\n      const waitingTile = ancestorStack.peek();\n      if (waitingTile._stackLength === stack.length) {\n        ancestorStack.pop();\n        if (waitingTile !== lastAncestor) {\n          waitingTile._finalResolution = false;\n        }\n        selectTile(waitingTile, frameState);\n        continue;\n      }\n    }\n\n    const tile = stack.pop();\n    if (!defined(tile)) {\n      // stack is empty but ancestorStack isn't\n      continue;\n    }\n\n    const traverse = canTraverse(tile);\n\n    if (tile._shouldSelect) {\n      if (tile.refine === Cesium3DTileRefine.ADD) {\n        selectTile(tile, frameState);\n      } else {\n        tile._selectionDepth = ancestorStack.length;\n        if (tile._selectionDepth > 0) {\n          tile.tileset.hasMixedContent = true;\n        }\n        lastAncestor = tile;\n        if (!traverse) {\n          selectTile(tile, frameState);\n          continue;\n        }\n        ancestorStack.push(tile);\n        tile._stackLength = stack.length;\n      }\n    }\n\n    if (traverse) {\n      const children = tile.children;\n      for (let i = 0; i < children.length; ++i) {\n        const child = children[i];\n        if (child.isVisible) {\n          stack.push(child);\n        }\n      }\n    }\n  }\n}\n\nexport default Cesium3DTilesetSkipTraversal;\n","import defined from \"../Core/defined.js\";\nimport Model3DTileContent from \"./Model/Model3DTileContent.js\";\n\n/**\n * @private\n */\nfunction Cesium3DTilesetStatistics() {\n  // Rendering statistics\n  this.selected = 0;\n  this.visited = 0;\n  // Loading statistics\n  this.numberOfCommands = 0;\n  this.numberOfAttemptedRequests = 0;\n  this.numberOfPendingRequests = 0;\n  this.numberOfTilesProcessing = 0;\n  this.numberOfTilesWithContentReady = 0; // Number of tiles with content loaded, does not include empty tiles\n  this.numberOfTilesTotal = 0; // Number of tiles in tileset JSON (and other tileset JSON files as they are loaded)\n  this.numberOfLoadedTilesTotal = 0; // Running total of loaded tiles for the lifetime of the session\n  // Features statistics\n  this.numberOfFeaturesSelected = 0; // Number of features rendered\n  this.numberOfFeaturesLoaded = 0; // Number of features in memory\n  this.numberOfPointsSelected = 0;\n  this.numberOfPointsLoaded = 0;\n  this.numberOfTrianglesSelected = 0;\n  // Styling statistics\n  this.numberOfTilesStyled = 0;\n  this.numberOfFeaturesStyled = 0;\n  // Optimization statistics\n  this.numberOfTilesCulledWithChildrenUnion = 0;\n  // Memory statistics\n  this.geometryByteLength = 0;\n  this.texturesByteLength = 0;\n  this.texturesReferenceCounterById = {};\n  this.batchTableByteLength = 0; // batch textures and any binary metadata properties not otherwise accounted for\n}\n\nCesium3DTilesetStatistics.prototype.clear = function () {\n  this.selected = 0;\n  this.visited = 0;\n  this.numberOfCommands = 0;\n  this.numberOfAttemptedRequests = 0;\n  this.numberOfFeaturesSelected = 0;\n  this.numberOfPointsSelected = 0;\n  this.numberOfTrianglesSelected = 0;\n  this.numberOfTilesStyled = 0;\n  this.numberOfFeaturesStyled = 0;\n  this.numberOfTilesCulledWithChildrenUnion = 0;\n};\n\n/**\n * Increment the counters for the points, triangles, and features\n * that are currently selected for rendering.\n *\n * This will be called recursively for the given content and\n * all its inner contents\n *\n * @param {Cesium3DTileContent} content\n */\nCesium3DTilesetStatistics.prototype.incrementSelectionCounts = function (\n  content,\n) {\n  this.numberOfFeaturesSelected += content.featuresLength;\n  this.numberOfPointsSelected += content.pointsLength;\n  this.numberOfTrianglesSelected += content.trianglesLength;\n\n  // Recursive calls on all inner contents\n  const contents = content.innerContents;\n  if (defined(contents)) {\n    const length = contents.length;\n    for (let i = 0; i < length; ++i) {\n      this.incrementSelectionCounts(contents[i]);\n    }\n  }\n};\n\n/**\n * Increment the counters for the number of features and points that\n * are currently loaded, and the lengths (size in bytes) of the\n * occupied memory.\n *\n * This will be called recursively for the given content and\n * all its inner contents\n *\n * @param {Cesium3DTileContent} content\n */\nCesium3DTilesetStatistics.prototype.incrementLoadCounts = function (content) {\n  this.numberOfFeaturesLoaded += content.featuresLength;\n  this.numberOfPointsLoaded += content.pointsLength;\n  this.geometryByteLength += content.geometryByteLength;\n  this.batchTableByteLength += content.batchTableByteLength;\n\n  // When the content is not a `Model3DTileContent`, then its\n  // textures byte length is added directly\n  if (!(content instanceof Model3DTileContent)) {\n    this.texturesByteLength += content.texturesByteLength;\n  } else {\n    // When the content is a `Model3DTileContent`, then increment the\n    // reference counter for all its textures. The byte length of any\n    // newly tracked texture to the total textures byte length\n    const textureIds = content.getTextureIds();\n    for (const textureId of textureIds) {\n      const referenceCounter =\n        this.texturesReferenceCounterById[textureId] ?? 0;\n      if (referenceCounter === 0) {\n        const textureByteLength = content.getTextureByteLengthById(textureId);\n        this.texturesByteLength += textureByteLength;\n      }\n      this.texturesReferenceCounterById[textureId] = referenceCounter + 1;\n    }\n  }\n\n  // Recursive calls on all inner contents\n  const contents = content.innerContents;\n  if (defined(contents)) {\n    const length = contents.length;\n    for (let i = 0; i < length; ++i) {\n      this.incrementLoadCounts(contents[i]);\n    }\n  }\n};\n\n/**\n * Decrement the counters for the number of features and points that\n * are currently loaded, and the lengths (size in bytes) of the\n * occupied memory.\n *\n * This will be called recursively for the given content and\n * all its inner contents\n *\n * @param {Cesium3DTileContent} content\n */\nCesium3DTilesetStatistics.prototype.decrementLoadCounts = function (content) {\n  this.numberOfFeaturesLoaded -= content.featuresLength;\n  this.numberOfPointsLoaded -= content.pointsLength;\n  this.geometryByteLength -= content.geometryByteLength;\n  this.batchTableByteLength -= content.batchTableByteLength;\n\n  // When the content is not a `Model3DTileContent`, then its\n  // textures byte length is subtracted directly\n  if (!(content instanceof Model3DTileContent)) {\n    this.texturesByteLength -= content.texturesByteLength;\n  } else {\n    // When the content is a `Model3DTileContent`, then decrement the\n    // reference counter for all its textures. The byte length of any\n    // texture that is no longer references is subtracted from the\n    // total textures byte length\n    const textureIds = content.getTextureIds();\n    for (const textureId of textureIds) {\n      const referenceCounter = this.texturesReferenceCounterById[textureId];\n      if (referenceCounter === 1) {\n        delete this.texturesReferenceCounterById[textureId];\n        const textureByteLength = content.getTextureByteLengthById(textureId);\n        this.texturesByteLength -= textureByteLength;\n      } else {\n        this.texturesReferenceCounterById[textureId] = referenceCounter - 1;\n      }\n    }\n  }\n  // Recursive calls on all inner contents\n  const contents = content.innerContents;\n  if (defined(contents)) {\n    const length = contents.length;\n    for (let i = 0; i < length; ++i) {\n      this.decrementLoadCounts(contents[i]);\n    }\n  }\n};\n\nCesium3DTilesetStatistics.clone = function (statistics, result) {\n  result.selected = statistics.selected;\n  result.visited = statistics.visited;\n  result.numberOfCommands = statistics.numberOfCommands;\n  result.numberOfAttemptedRequests = statistics.numberOfAttemptedRequests;\n  result.numberOfPendingRequests = statistics.numberOfPendingRequests;\n  result.numberOfTilesProcessing = statistics.numberOfTilesProcessing;\n  result.numberOfTilesWithContentReady =\n    statistics.numberOfTilesWithContentReady;\n  result.numberOfTilesTotal = statistics.numberOfTilesTotal;\n  result.numberOfFeaturesSelected = statistics.numberOfFeaturesSelected;\n  result.numberOfFeaturesLoaded = statistics.numberOfFeaturesLoaded;\n  result.numberOfPointsSelected = statistics.numberOfPointsSelected;\n  result.numberOfPointsLoaded = statistics.numberOfPointsLoaded;\n  result.numberOfTrianglesSelected = statistics.numberOfTrianglesSelected;\n  result.numberOfTilesStyled = statistics.numberOfTilesStyled;\n  result.numberOfFeaturesStyled = statistics.numberOfFeaturesStyled;\n  result.numberOfTilesCulledWithChildrenUnion =\n    statistics.numberOfTilesCulledWithChildrenUnion;\n  result.geometryByteLength = statistics.geometryByteLength;\n  result.texturesByteLength = statistics.texturesByteLength;\n  result.texturesReferenceCounterById = {\n    ...statistics.texturesReferenceCounterById,\n  };\n  result.batchTableByteLength = statistics.batchTableByteLength;\n};\nexport default Cesium3DTilesetStatistics;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport Cesium3DTileOptimizationHint from \"./Cesium3DTileOptimizationHint.js\";\nimport Cesium3DTileRefine from \"./Cesium3DTileRefine.js\";\n\n/**\n * Traverses a {@link Cesium3DTileset} to determine which tiles to load and render.\n * This type describes an interface and is not intended to be instantiated directly.\n *\n * @alias Cesium3DTilesetTraversal\n * @constructor\n * @abstract\n *\n * @see Cesium3DTilesetBaseTraversal\n * @see Cesium3DTilesetSkipTraversal\n * @see Cesium3DTilesetMostDetailedTraversal\n *\n * @private\n */\nfunction Cesium3DTilesetTraversal() {}\n\n/**\n * Traverses a {@link Cesium3DTileset} to determine which tiles to load and render.\n *\n * @private\n * @param {Cesium3DTileset} tileset\n * @param {FrameState} frameState\n */\nCesium3DTilesetTraversal.selectTiles = function (tileset, frameState) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Sort by farthest child first since this is going on a stack\n *\n * @private\n * @param {Cesium3DTile} a\n * @param {Cesium3DTile} b\n * @returns {number}\n */\nCesium3DTilesetTraversal.sortChildrenByDistanceToCamera = function (a, b) {\n  if (b._distanceToCamera === 0 && a._distanceToCamera === 0) {\n    return b._centerZDepth - a._centerZDepth;\n  }\n\n  return b._distanceToCamera - a._distanceToCamera;\n};\n\n/**\n * Determine if a tile can and should be traversed for children tiles that\n * would contribute to rendering the current view\n *\n * @private\n * @param {Cesium3DTile} tile\n * @returns {boolean}\n */\nCesium3DTilesetTraversal.canTraverse = function (tile) {\n  if (tile.children.length === 0) {\n    return false;\n  }\n  if (tile.hasTilesetContent || tile.hasImplicitContent) {\n    // Traverse external tileset to visit its root tile\n    // Don't traverse if the subtree is expired because it will be destroyed\n    return !tile.contentExpired;\n  }\n  return tile._screenSpaceError > tile.tileset.memoryAdjustedScreenSpaceError;\n};\n\n/**\n * Mark a tile as selected, and add it to the tileset's list of selected tiles\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nCesium3DTilesetTraversal.selectTile = function (tile, frameState) {\n  if (tile.contentVisibility(frameState) === Intersect.OUTSIDE) {\n    return;\n  }\n\n  tile._wasSelectedLastFrame = true;\n\n  const { content, tileset } = tile;\n  if (content.featurePropertiesDirty) {\n    // A feature's property in this tile changed, the tile needs to be re-styled.\n    content.featurePropertiesDirty = false;\n    tile.lastStyleTime = 0; // Force applying the style to this tile\n    tileset._selectedTilesToStyle.push(tile);\n  } else if (tile._selectedFrame < frameState.frameNumber - 1) {\n    // Tile is newly selected; it is selected this frame, but was not selected last frame.\n    tileset._selectedTilesToStyle.push(tile);\n    tile._wasSelectedLastFrame = false;\n  }\n\n  tile._selectedFrame = frameState.frameNumber;\n  tileset._selectedTiles.push(tile);\n};\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nCesium3DTilesetTraversal.visitTile = function (tile, frameState) {\n  ++tile.tileset._statistics.visited;\n  tile._visitedFrame = frameState.frameNumber;\n};\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nCesium3DTilesetTraversal.touchTile = function (tile, frameState) {\n  if (tile._touchedFrame === frameState.frameNumber) {\n    // Prevents another pass from touching the frame again\n    return;\n  }\n  tile.tileset._cache.touch(tile);\n  tile._touchedFrame = frameState.frameNumber;\n};\n\n/**\n * Add a tile to the list of requested tiles, if appropriate\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nCesium3DTilesetTraversal.loadTile = function (tile, frameState) {\n  const { tileset } = tile;\n  if (\n    tile._requestedFrame === frameState.frameNumber ||\n    (!tile.hasUnloadedRenderableContent && !tile.contentExpired)\n  ) {\n    return;\n  }\n\n  if (!isOnScreenLongEnough(tile, frameState)) {\n    return;\n  }\n\n  const cameraHasNotStoppedMovingLongEnough =\n    frameState.camera.timeSinceMoved < tileset.foveatedTimeDelay;\n  if (tile.priorityDeferred && cameraHasNotStoppedMovingLongEnough) {\n    return;\n  }\n\n  tile._requestedFrame = frameState.frameNumber;\n  tileset._requestedTiles.push(tile);\n};\n\n/**\n * Prevent unnecessary loads while camera is moving by getting the ratio of travel distance to tile size.\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n * @returns {boolean}\n */\nfunction isOnScreenLongEnough(tile, frameState) {\n  const { tileset } = tile;\n  if (!tileset._cullRequestsWhileMoving) {\n    return true;\n  }\n\n  const { positionWCDeltaMagnitude, positionWCDeltaMagnitudeLastFrame } =\n    frameState.camera;\n  const deltaMagnitude =\n    positionWCDeltaMagnitude !== 0.0\n      ? positionWCDeltaMagnitude\n      : positionWCDeltaMagnitudeLastFrame;\n\n  // How do n frames of this movement compare to the tile's physical size.\n  const diameter = Math.max(tile.boundingSphere.radius * 2.0, 1.0);\n  const movementRatio =\n    (tileset.cullRequestsWhileMovingMultiplier * deltaMagnitude) / diameter;\n\n  return movementRatio < 1.0;\n}\n\n/**\n * Reset some of the tile's flags and re-evaluate visibility and priority\n *\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nCesium3DTilesetTraversal.updateTile = function (tile, frameState) {\n  updateTileVisibility(tile, frameState);\n  tile.updateExpiration();\n\n  tile._wasMinPriorityChild = false;\n  tile._priorityHolder = tile;\n  updateMinimumMaximumPriority(tile);\n\n  // SkipLOD\n  tile._shouldSelect = false;\n  tile._finalResolution = true;\n};\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n */\nfunction updateTileVisibility(tile, frameState) {\n  tile.updateVisibility(frameState);\n\n  if (!tile.isVisible) {\n    return;\n  }\n\n  const hasChildren = tile.children.length > 0;\n  if ((tile.hasTilesetContent || tile.hasImplicitContent) && hasChildren) {\n    // Use the root tile's visibility instead of this tile's visibility.\n    // The root tile may be culled by the children bounds optimization in which\n    // case this tile should also be culled.\n    const child = tile.children[0];\n    updateTileVisibility(child, frameState);\n    tile._visible = child._visible;\n    return;\n  }\n\n  if (meetsScreenSpaceErrorEarly(tile, frameState)) {\n    tile._visible = false;\n    return;\n  }\n\n  // Optimization - if none of the tile's children are visible then this tile isn't visible\n  const replace = tile.refine === Cesium3DTileRefine.REPLACE;\n  const useOptimization =\n    tile._optimChildrenWithinParent ===\n    Cesium3DTileOptimizationHint.USE_OPTIMIZATION;\n  if (replace && useOptimization && hasChildren) {\n    if (!anyChildrenVisible(tile, frameState)) {\n      ++tile.tileset._statistics.numberOfTilesCulledWithChildrenUnion;\n      tile._visible = false;\n      return;\n    }\n  }\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n * @returns {boolean}\n */\nfunction meetsScreenSpaceErrorEarly(tile, frameState) {\n  const { parent, tileset } = tile;\n  if (\n    !defined(parent) ||\n    parent.hasTilesetContent ||\n    parent.hasImplicitContent ||\n    parent.refine !== Cesium3DTileRefine.ADD\n  ) {\n    return false;\n  }\n\n  // Use parent's geometric error with child's box to see if the tile already meet the SSE\n  return (\n    tile.getScreenSpaceError(frameState, true) <=\n    tileset.memoryAdjustedScreenSpaceError\n  );\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n * @param {FrameState} frameState\n * @returns {boolean}\n */\nfunction anyChildrenVisible(tile, frameState) {\n  let anyVisible = false;\n  const children = tile.children;\n  for (let i = 0; i < children.length; ++i) {\n    const child = children[i];\n    child.updateVisibility(frameState);\n    anyVisible = anyVisible || child.isVisible;\n  }\n  return anyVisible;\n}\n\n/**\n * @private\n * @param {Cesium3DTile} tile\n */\nfunction updateMinimumMaximumPriority(tile) {\n  const minimumPriority = tile.tileset._minimumPriority;\n  const maximumPriority = tile.tileset._maximumPriority;\n  const priorityHolder = tile._priorityHolder;\n\n  maximumPriority.distance = Math.max(\n    priorityHolder._distanceToCamera,\n    maximumPriority.distance,\n  );\n  minimumPriority.distance = Math.min(\n    priorityHolder._distanceToCamera,\n    minimumPriority.distance,\n  );\n  maximumPriority.depth = Math.max(tile._depth, maximumPriority.depth);\n  minimumPriority.depth = Math.min(tile._depth, minimumPriority.depth);\n  maximumPriority.foveatedFactor = Math.max(\n    priorityHolder._foveatedFactor,\n    maximumPriority.foveatedFactor,\n  );\n  minimumPriority.foveatedFactor = Math.min(\n    priorityHolder._foveatedFactor,\n    minimumPriority.foveatedFactor,\n  );\n  maximumPriority.reverseScreenSpaceError = Math.max(\n    tile._priorityReverseScreenSpaceError,\n    maximumPriority.reverseScreenSpaceError,\n  );\n  minimumPriority.reverseScreenSpaceError = Math.min(\n    tile._priorityReverseScreenSpaceError,\n    minimumPriority.reverseScreenSpaceError,\n  );\n}\n\nexport default Cesium3DTilesetTraversal;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * A ParticleEmitter that emits particles from a circle.\n * Particles will be positioned within a circle and have initial velocities going along the z vector.\n *\n * @alias CircleEmitter\n * @constructor\n *\n * @param {number} [radius=1.0] The radius of the circle in meters.\n */\nfunction CircleEmitter(radius) {\n  radius = radius ?? 1.0;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"radius\", radius, 0.0);\n  //>>includeEnd('debug');\n\n  this._radius = radius ?? 1.0;\n}\n\nObject.defineProperties(CircleEmitter.prototype, {\n  /**\n   * The radius of the circle in meters.\n   * @memberof CircleEmitter.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  radius: {\n    get: function () {\n      return this._radius;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThan(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._radius = value;\n    },\n  },\n});\n\n/**\n * Initializes the given {@link Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize.\n */\nCircleEmitter.prototype.emit = function (particle) {\n  const theta = CesiumMath.randomBetween(0.0, CesiumMath.TWO_PI);\n  const rad = CesiumMath.randomBetween(0.0, this._radius);\n\n  const x = rad * Math.cos(theta);\n  const y = rad * Math.sin(theta);\n  const z = 0.0;\n\n  particle.position = Cartesian3.fromElements(x, y, z, particle.position);\n  particle.velocity = Cartesian3.clone(Cartesian3.UNIT_Z, particle.velocity);\n};\nexport default CircleEmitter;\n","import ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport combine from \"../Core/combine.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport ShadowVolumeAppearanceVS from \"../Shaders/ShadowVolumeAppearanceVS.js\";\nimport ShadowVolumeFS from \"../Shaders/ShadowVolumeFS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowVolumeAppearance from \"./ShadowVolumeAppearance.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * A classification primitive represents a volume enclosing geometry in the {@link Scene} to be highlighted.\n * <p>\n * A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including\n * {@link Material} and {@link RenderState}.  Roughly, the geometry instance defines the structure and placement,\n * and the appearance defines the visual characteristics.  Decoupling geometry and appearance allows us to mix\n * and match most of them and add a new geometry or appearance independently of each other.\n * Only {@link PerInstanceColorAppearance} with the same color across all instances is supported at this time when using\n * ClassificationPrimitive directly.\n * For full {@link Appearance} support when classifying terrain or 3D Tiles use {@link GroundPrimitive} instead.\n * </p>\n * <p>\n * For correct rendering, this feature requires the EXT_frag_depth WebGL extension. For hardware that do not support this extension, there\n * will be rendering artifacts for some viewing angles.\n * </p>\n * <p>\n * Valid geometries are {@link BoxGeometry}, {@link CylinderGeometry}, {@link EllipsoidGeometry}, {@link PolylineVolumeGeometry}, and {@link SphereGeometry}.\n * </p>\n * <p>\n * Geometries that follow the surface of the ellipsoid, such as {@link CircleGeometry}, {@link CorridorGeometry}, {@link EllipseGeometry}, {@link PolygonGeometry}, and {@link RectangleGeometry},\n * are also valid if they are extruded volumes; otherwise, they will not be rendered.\n * </p>\n *\n * @alias ClassificationPrimitive\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Array|GeometryInstance} [options.geometryInstances] The geometry instances to render. This can either be a single instance or an array of length one.\n * @param {Appearance} [options.appearance] The appearance used to render the primitive. Defaults to PerInstanceColorAppearance when GeometryInstances have a color attribute.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {boolean} [options.vertexCacheOptimize=false] When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n * @param {boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {boolean} [options.compressVertices=true] When <code>true</code>, the geometry vertices are compressed, which will save memory.\n * @param {boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n * @param {boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first.\n * @param {ClassificationType} [options.classificationType=ClassificationType.BOTH] Determines whether terrain, 3D Tiles or both will be classified.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {boolean} [options.debugShowShadowVolume=false] For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be <code>true</code> on\n *                  creation for the volumes to be created before the geometry is released or options.releaseGeometryInstance must be <code>false</code>.\n *\n * @see Primitive\n * @see GroundPrimitive\n * @see GeometryInstance\n * @see Appearance\n */\nfunction ClassificationPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const geometryInstances = options.geometryInstances;\n\n  /**\n   * The geometry instance rendered with this primitive.  This may\n   * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n   * is <code>true</code> when the primitive is constructed.\n   * <p>\n   * Changing this property after the primitive is rendered has no effect.\n   * </p>\n   * <p>\n   * Because of the rendering technique used, all geometry instances must be the same color.\n   * If there is an instance with a differing color, a <code>DeveloperError</code> will be thrown\n   * on the first attempt to render.\n   * </p>\n   *\n   * @readonly\n   * @type {Array|GeometryInstance}\n   *\n   * @default undefined\n   */\n  this.geometryInstances = geometryInstances;\n  /**\n   * Determines if the primitive will be shown.  This affects all geometry\n   * instances in the primitive.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.show = options.show ?? true;\n  /**\n   * Determines whether terrain, 3D Tiles or both will be classified.\n   *\n   * @type {ClassificationType}\n   *\n   * @default ClassificationType.BOTH\n   */\n  this.classificationType =\n    options.classificationType ?? ClassificationType.BOTH;\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the shadow volume for each geometry in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowShadowVolume = options.debugShowShadowVolume ?? false;\n  this._debugShowShadowVolume = false;\n\n  // These are used by GroundPrimitive to augment the shader and uniform map.\n  this._extruded = options._extruded ?? false;\n  this._uniformMap = options._uniformMap;\n\n  this._sp = undefined;\n  this._spStencil = undefined;\n  this._spPick = undefined;\n  this._spColor = undefined;\n\n  this._spPick2D = undefined; // only derived if necessary\n  this._spColor2D = undefined; // only derived if necessary\n\n  this._rsStencilDepthPass = undefined;\n  this._rsStencilDepthPass3DTiles = undefined;\n  this._rsColorPass = undefined;\n  this._rsPickPass = undefined;\n\n  this._commandsIgnoreShow = [];\n\n  this._ready = false;\n  this._primitive = undefined;\n  this._pickPrimitive = options._pickPrimitive;\n\n  // Set in update\n  this._hasSphericalExtentsAttribute = false;\n  this._hasPlanarExtentsAttributes = false;\n  this._hasPerColorAttribute = false;\n\n  this.appearance = options.appearance;\n\n  this._createBoundingVolumeFunction = options._createBoundingVolumeFunction;\n  this._updateAndQueueCommandsFunction =\n    options._updateAndQueueCommandsFunction;\n\n  this._usePickOffsets = false;\n\n  this._primitiveOptions = {\n    geometryInstances: undefined,\n    appearance: undefined,\n    vertexCacheOptimize: options.vertexCacheOptimize ?? false,\n    interleave: options.interleave ?? false,\n    releaseGeometryInstances: options.releaseGeometryInstances ?? true,\n    allowPicking: options.allowPicking ?? true,\n    asynchronous: options.asynchronous ?? true,\n    compressVertices: options.compressVertices ?? true,\n    _createBoundingVolumeFunction: undefined,\n    _createRenderStatesFunction: undefined,\n    _createShaderProgramFunction: undefined,\n    _createCommandsFunction: undefined,\n    _updateAndQueueCommandsFunction: undefined,\n    _createPickOffsets: true,\n  };\n}\n\nObject.defineProperties(ClassificationPrimitive.prototype, {\n  /**\n   * When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n   *\n   * @memberof ClassificationPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  vertexCacheOptimize: {\n    get: function () {\n      return this._primitiveOptions.vertexCacheOptimize;\n    },\n  },\n\n  /**\n   * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n   *\n   * @memberof ClassificationPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  interleave: {\n    get: function () {\n      return this._primitiveOptions.interleave;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n   *\n   * @memberof ClassificationPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  releaseGeometryInstances: {\n    get: function () {\n      return this._primitiveOptions.releaseGeometryInstances;\n    },\n  },\n\n  /**\n   * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n   *\n   * @memberof ClassificationPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  allowPicking: {\n    get: function () {\n      return this._primitiveOptions.allowPicking;\n    },\n  },\n\n  /**\n   * Determines if the geometry instances will be created and batched on a web worker.\n   *\n   * @memberof ClassificationPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  asynchronous: {\n    get: function () {\n      return this._primitiveOptions.asynchronous;\n    },\n  },\n\n  /**\n   * When <code>true</code>, geometry vertices are compressed, which will save memory.\n   *\n   * @memberof ClassificationPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  compressVertices: {\n    get: function () {\n      return this._primitiveOptions.compressVertices;\n    },\n  },\n\n  /**\n   * Determines if the primitive is complete and ready to render.  If this property is\n   * true, the primitive will be rendered the next time that {@link ClassificationPrimitive#update}\n   * is called.\n   *\n   * @memberof ClassificationPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * Returns true if the ClassificationPrimitive needs a separate shader and commands for 2D.\n   * This is because texture coordinates on ClassificationPrimitives are computed differently,\n   * and are used for culling when multiple GeometryInstances are batched in one ClassificationPrimitive.\n   * @memberof ClassificationPrimitive.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  _needs2DShader: {\n    get: function () {\n      return (\n        this._hasPlanarExtentsAttributes || this._hasSphericalExtentsAttribute\n      );\n    },\n  },\n});\n\n/**\n * Determines if ClassificationPrimitive rendering is supported.\n *\n * @param {Scene} scene The scene.\n * @returns {boolean} <code>true</code> if ClassificationPrimitives are supported; otherwise, returns <code>false</code>\n */\nClassificationPrimitive.isSupported = function (scene) {\n  return scene.context.stencilBuffer;\n};\n\nfunction getStencilDepthRenderState(enableStencil, mask3DTiles) {\n  const stencilFunction = mask3DTiles\n    ? StencilFunction.EQUAL\n    : StencilFunction.ALWAYS;\n  return {\n    colorMask: {\n      red: false,\n      green: false,\n      blue: false,\n      alpha: false,\n    },\n    stencilTest: {\n      enabled: enableStencil,\n      frontFunction: stencilFunction,\n      frontOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.DECREMENT_WRAP,\n        zPass: StencilOperation.KEEP,\n      },\n      backFunction: stencilFunction,\n      backOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.INCREMENT_WRAP,\n        zPass: StencilOperation.KEEP,\n      },\n      reference: StencilConstants.CESIUM_3D_TILE_MASK,\n      mask: StencilConstants.CESIUM_3D_TILE_MASK,\n    },\n    stencilMask: StencilConstants.CLASSIFICATION_MASK,\n    depthTest: {\n      enabled: true,\n      func: DepthFunction.LESS_OR_EQUAL,\n    },\n    depthMask: false,\n  };\n}\n\nfunction getColorRenderState(enableStencil) {\n  return {\n    stencilTest: {\n      enabled: enableStencil,\n      frontFunction: StencilFunction.NOT_EQUAL,\n      frontOperation: {\n        fail: StencilOperation.ZERO,\n        zFail: StencilOperation.ZERO,\n        zPass: StencilOperation.ZERO,\n      },\n      backFunction: StencilFunction.NOT_EQUAL,\n      backOperation: {\n        fail: StencilOperation.ZERO,\n        zFail: StencilOperation.ZERO,\n        zPass: StencilOperation.ZERO,\n      },\n      reference: 0,\n      mask: StencilConstants.CLASSIFICATION_MASK,\n    },\n    stencilMask: StencilConstants.CLASSIFICATION_MASK,\n    depthTest: {\n      enabled: false,\n    },\n    depthMask: false,\n    blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n  };\n}\n\nconst pickRenderState = {\n  stencilTest: {\n    enabled: true,\n    frontFunction: StencilFunction.NOT_EQUAL,\n    frontOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    backFunction: StencilFunction.NOT_EQUAL,\n    backOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    reference: 0,\n    mask: StencilConstants.CLASSIFICATION_MASK,\n  },\n  stencilMask: StencilConstants.CLASSIFICATION_MASK,\n  depthTest: {\n    enabled: false,\n  },\n  depthMask: false,\n};\n\nfunction createRenderStates(\n  classificationPrimitive,\n  context,\n  appearance,\n  twoPasses,\n) {\n  if (defined(classificationPrimitive._rsStencilDepthPass)) {\n    return;\n  }\n  const stencilEnabled = !classificationPrimitive.debugShowShadowVolume;\n\n  classificationPrimitive._rsStencilDepthPass = RenderState.fromCache(\n    getStencilDepthRenderState(stencilEnabled, false),\n  );\n  classificationPrimitive._rsStencilDepthPass3DTiles = RenderState.fromCache(\n    getStencilDepthRenderState(stencilEnabled, true),\n  );\n  classificationPrimitive._rsColorPass = RenderState.fromCache(\n    getColorRenderState(stencilEnabled, false),\n  );\n  classificationPrimitive._rsPickPass = RenderState.fromCache(pickRenderState);\n}\n\nfunction modifyForEncodedNormals(primitive, vertexShaderSource) {\n  if (!primitive.compressVertices) {\n    return vertexShaderSource;\n  }\n\n  if (vertexShaderSource.search(/in\\s+vec3\\s+extrudeDirection;/g) !== -1) {\n    const attributeName = \"compressedAttributes\";\n\n    //only shadow volumes use extrudeDirection, and shadow volumes use vertexFormat: POSITION_ONLY so we don't need to check other attributes\n    const attributeDecl = `in vec2 ${attributeName};`;\n\n    const globalDecl = \"vec3 extrudeDirection;\\n\";\n    const decode = `    extrudeDirection = czm_octDecode(${attributeName}, 65535.0);\\n`;\n\n    let modifiedVS = vertexShaderSource;\n    modifiedVS = modifiedVS.replace(/in\\s+vec3\\s+extrudeDirection;/g, \"\");\n    modifiedVS = ShaderSource.replaceMain(\n      modifiedVS,\n      \"czm_non_compressed_main\",\n    );\n    const compressedMain =\n      `${\"void main() \\n\" + \"{ \\n\"}${decode}    czm_non_compressed_main(); \\n` +\n      `}`;\n\n    return [attributeDecl, globalDecl, modifiedVS, compressedMain].join(\"\\n\");\n  }\n}\n\nfunction createShaderProgram(classificationPrimitive, frameState) {\n  const context = frameState.context;\n  const primitive = classificationPrimitive._primitive;\n  let vs = ShadowVolumeAppearanceVS;\n  vs =\n    classificationPrimitive._primitive._batchTable.getVertexShaderCallback()(\n      vs,\n    );\n  vs = Primitive._appendDistanceDisplayConditionToShader(primitive, vs);\n  vs = Primitive._modifyShaderPosition(\n    classificationPrimitive,\n    vs,\n    frameState.scene3DOnly,\n  );\n  vs = Primitive._updateColorAttribute(primitive, vs);\n\n  const planarExtents = classificationPrimitive._hasPlanarExtentsAttributes;\n  const cullFragmentsUsingExtents =\n    planarExtents || classificationPrimitive._hasSphericalExtentsAttribute;\n\n  if (classificationPrimitive._extruded) {\n    vs = modifyForEncodedNormals(primitive, vs);\n  }\n\n  const extrudedDefine = classificationPrimitive._extruded\n    ? \"EXTRUDED_GEOMETRY\"\n    : \"\";\n\n  let vsSource = new ShaderSource({\n    defines: [extrudedDefine],\n    sources: [vs],\n  });\n  const fsSource = new ShaderSource({\n    sources: [ShadowVolumeFS],\n  });\n  const attributeLocations =\n    classificationPrimitive._primitive._attributeLocations;\n\n  const shadowVolumeAppearance = new ShadowVolumeAppearance(\n    cullFragmentsUsingExtents,\n    planarExtents,\n    classificationPrimitive.appearance,\n  );\n\n  classificationPrimitive._spStencil = ShaderProgram.replaceCache({\n    context: context,\n    shaderProgram: classificationPrimitive._spStencil,\n    vertexShaderSource: vsSource,\n    fragmentShaderSource: fsSource,\n    attributeLocations: attributeLocations,\n  });\n\n  if (classificationPrimitive._primitive.allowPicking) {\n    let vsPick = ShaderSource.createPickVertexShaderSource(vs);\n    vsPick = Primitive._appendShowToShader(primitive, vsPick);\n    vsPick = Primitive._updatePickColorAttribute(vsPick);\n\n    const pickFS3D = shadowVolumeAppearance.createPickFragmentShader(false);\n    const pickVS3D = shadowVolumeAppearance.createPickVertexShader(\n      [extrudedDefine],\n      vsPick,\n      false,\n      frameState.mapProjection,\n    );\n\n    classificationPrimitive._spPick = ShaderProgram.replaceCache({\n      context: context,\n      shaderProgram: classificationPrimitive._spPick,\n      vertexShaderSource: pickVS3D,\n      fragmentShaderSource: pickFS3D,\n      attributeLocations: attributeLocations,\n    });\n\n    // Derive a 2D pick shader if the primitive uses texture coordinate-based fragment culling,\n    // since texture coordinates are computed differently in 2D.\n    if (cullFragmentsUsingExtents) {\n      let pickProgram2D = context.shaderCache.getDerivedShaderProgram(\n        classificationPrimitive._spPick,\n        \"2dPick\",\n      );\n      if (!defined(pickProgram2D)) {\n        const pickFS2D = shadowVolumeAppearance.createPickFragmentShader(true);\n        const pickVS2D = shadowVolumeAppearance.createPickVertexShader(\n          [extrudedDefine],\n          vsPick,\n          true,\n          frameState.mapProjection,\n        );\n\n        pickProgram2D = context.shaderCache.createDerivedShaderProgram(\n          classificationPrimitive._spPick,\n          \"2dPick\",\n          {\n            vertexShaderSource: pickVS2D,\n            fragmentShaderSource: pickFS2D,\n            attributeLocations: attributeLocations,\n          },\n        );\n      }\n      classificationPrimitive._spPick2D = pickProgram2D;\n    }\n  } else {\n    classificationPrimitive._spPick = ShaderProgram.fromCache({\n      context: context,\n      vertexShaderSource: vsSource,\n      fragmentShaderSource: fsSource,\n      attributeLocations: attributeLocations,\n    });\n  }\n\n  vs = Primitive._appendShowToShader(primitive, vs);\n  vsSource = new ShaderSource({\n    defines: [extrudedDefine],\n    sources: [vs],\n  });\n\n  classificationPrimitive._sp = ShaderProgram.replaceCache({\n    context: context,\n    shaderProgram: classificationPrimitive._sp,\n    vertexShaderSource: vsSource,\n    fragmentShaderSource: fsSource,\n    attributeLocations: attributeLocations,\n  });\n\n  // Create a fragment shader that computes only required material hookups using screen space techniques\n  const fsColorSource = shadowVolumeAppearance.createFragmentShader(false);\n  const vsColorSource = shadowVolumeAppearance.createVertexShader(\n    [extrudedDefine],\n    vs,\n    false,\n    frameState.mapProjection,\n  );\n\n  classificationPrimitive._spColor = ShaderProgram.replaceCache({\n    context: context,\n    shaderProgram: classificationPrimitive._spColor,\n    vertexShaderSource: vsColorSource,\n    fragmentShaderSource: fsColorSource,\n    attributeLocations: attributeLocations,\n  });\n\n  // Derive a 2D shader if the primitive uses texture coordinate-based fragment culling,\n  // since texture coordinates are computed differently in 2D.\n  // Any material that uses texture coordinates will also equip texture coordinate-based fragment culling.\n  if (cullFragmentsUsingExtents) {\n    let colorProgram2D = context.shaderCache.getDerivedShaderProgram(\n      classificationPrimitive._spColor,\n      \"2dColor\",\n    );\n    if (!defined(colorProgram2D)) {\n      const fsColorSource2D = shadowVolumeAppearance.createFragmentShader(true);\n      const vsColorSource2D = shadowVolumeAppearance.createVertexShader(\n        [extrudedDefine],\n        vs,\n        true,\n        frameState.mapProjection,\n      );\n\n      colorProgram2D = context.shaderCache.createDerivedShaderProgram(\n        classificationPrimitive._spColor,\n        \"2dColor\",\n        {\n          vertexShaderSource: vsColorSource2D,\n          fragmentShaderSource: fsColorSource2D,\n          attributeLocations: attributeLocations,\n        },\n      );\n    }\n    classificationPrimitive._spColor2D = colorProgram2D;\n  }\n}\n\nfunction createColorCommands(classificationPrimitive, colorCommands) {\n  const primitive = classificationPrimitive._primitive;\n  let length = primitive._va.length * 2; // each geometry (pack of vertex attributes) needs 2 commands: front/back stencils and fill\n  colorCommands.length = length;\n\n  let i;\n  let command;\n  let derivedCommand;\n  let vaIndex = 0;\n  let uniformMap = primitive._batchTable.getUniformMapCallback()(\n    classificationPrimitive._uniformMap,\n  );\n\n  const needs2DShader = classificationPrimitive._needs2DShader;\n\n  for (i = 0; i < length; i += 2) {\n    const vertexArray = primitive._va[vaIndex++];\n\n    // Stencil depth command\n    command = colorCommands[i];\n    if (!defined(command)) {\n      command = colorCommands[i] = new DrawCommand({\n        owner: classificationPrimitive,\n        primitiveType: primitive._primitiveType,\n      });\n    }\n\n    command.vertexArray = vertexArray;\n    command.renderState = classificationPrimitive._rsStencilDepthPass;\n    command.shaderProgram = classificationPrimitive._sp;\n    command.uniformMap = uniformMap;\n    command.pass = Pass.TERRAIN_CLASSIFICATION;\n\n    derivedCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.tileset,\n    );\n    derivedCommand.renderState =\n      classificationPrimitive._rsStencilDepthPass3DTiles;\n    derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    command.derivedCommands.tileset = derivedCommand;\n\n    // Color command\n    command = colorCommands[i + 1];\n    if (!defined(command)) {\n      command = colorCommands[i + 1] = new DrawCommand({\n        owner: classificationPrimitive,\n        primitiveType: primitive._primitiveType,\n      });\n    }\n\n    command.vertexArray = vertexArray;\n    command.renderState = classificationPrimitive._rsColorPass;\n    command.shaderProgram = classificationPrimitive._spColor;\n    command.pass = Pass.TERRAIN_CLASSIFICATION;\n\n    const appearance = classificationPrimitive.appearance;\n    const material = appearance.material;\n    if (defined(material)) {\n      uniformMap = combine(uniformMap, material._uniforms);\n    }\n\n    command.uniformMap = uniformMap;\n\n    derivedCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.tileset,\n    );\n    derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    command.derivedCommands.tileset = derivedCommand;\n\n    // Derive for 2D if texture coordinates are ever computed\n    if (needs2DShader) {\n      // First derive from the terrain command\n      let derived2DCommand = DrawCommand.shallowClone(\n        command,\n        command.derivedCommands.appearance2D,\n      );\n      derived2DCommand.shaderProgram = classificationPrimitive._spColor2D;\n      command.derivedCommands.appearance2D = derived2DCommand;\n\n      // Then derive from the 3D Tiles command\n      derived2DCommand = DrawCommand.shallowClone(\n        derivedCommand,\n        derivedCommand.derivedCommands.appearance2D,\n      );\n      derived2DCommand.shaderProgram = classificationPrimitive._spColor2D;\n      derivedCommand.derivedCommands.appearance2D = derived2DCommand;\n    }\n  }\n\n  const commandsIgnoreShow = classificationPrimitive._commandsIgnoreShow;\n  const spStencil = classificationPrimitive._spStencil;\n\n  let commandIndex = 0;\n  length = commandsIgnoreShow.length = length / 2;\n\n  for (let j = 0; j < length; ++j) {\n    const commandIgnoreShow = (commandsIgnoreShow[j] = DrawCommand.shallowClone(\n      colorCommands[commandIndex],\n      commandsIgnoreShow[j],\n    ));\n    commandIgnoreShow.shaderProgram = spStencil;\n    commandIgnoreShow.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW;\n\n    commandIndex += 2;\n  }\n}\n\nfunction createPickCommands(classificationPrimitive, pickCommands) {\n  const usePickOffsets = classificationPrimitive._usePickOffsets;\n\n  const primitive = classificationPrimitive._primitive;\n  let length = primitive._va.length * 2; // each geometry (pack of vertex attributes) needs 2 commands: front/back stencils and fill\n\n  // Fallback for batching same-color geometry instances\n  let pickOffsets;\n  let pickIndex = 0;\n  let pickOffset;\n  if (usePickOffsets) {\n    pickOffsets = primitive._pickOffsets;\n    length = pickOffsets.length * 2;\n  }\n\n  pickCommands.length = length;\n\n  let j;\n  let command;\n  let derivedCommand;\n  let vaIndex = 0;\n  const uniformMap = primitive._batchTable.getUniformMapCallback()(\n    classificationPrimitive._uniformMap,\n  );\n\n  const needs2DShader = classificationPrimitive._needs2DShader;\n\n  for (j = 0; j < length; j += 2) {\n    let vertexArray = primitive._va[vaIndex++];\n    if (usePickOffsets) {\n      pickOffset = pickOffsets[pickIndex++];\n      vertexArray = primitive._va[pickOffset.index];\n    }\n\n    // Stencil depth command\n    command = pickCommands[j];\n    if (!defined(command)) {\n      command = pickCommands[j] = new DrawCommand({\n        owner: classificationPrimitive,\n        primitiveType: primitive._primitiveType,\n        pickOnly: true,\n      });\n    }\n\n    command.vertexArray = vertexArray;\n    command.renderState = classificationPrimitive._rsStencilDepthPass;\n    command.shaderProgram = classificationPrimitive._sp;\n    command.uniformMap = uniformMap;\n    command.pass = Pass.TERRAIN_CLASSIFICATION;\n    if (usePickOffsets) {\n      command.offset = pickOffset.offset;\n      command.count = pickOffset.count;\n    }\n\n    // Derive for 3D Tiles classification\n    derivedCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.tileset,\n    );\n    derivedCommand.renderState =\n      classificationPrimitive._rsStencilDepthPass3DTiles;\n    derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    command.derivedCommands.tileset = derivedCommand;\n\n    // Pick color command\n    command = pickCommands[j + 1];\n    if (!defined(command)) {\n      command = pickCommands[j + 1] = new DrawCommand({\n        owner: classificationPrimitive,\n        primitiveType: primitive._primitiveType,\n        pickOnly: true,\n      });\n    }\n\n    command.vertexArray = vertexArray;\n    command.renderState = classificationPrimitive._rsPickPass;\n    command.shaderProgram = classificationPrimitive._spPick;\n    command.uniformMap = uniformMap;\n    command.pass = Pass.TERRAIN_CLASSIFICATION;\n    if (usePickOffsets) {\n      command.offset = pickOffset.offset;\n      command.count = pickOffset.count;\n    }\n\n    derivedCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.tileset,\n    );\n    derivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    command.derivedCommands.tileset = derivedCommand;\n\n    // Derive for 2D if texture coordinates are ever computed\n    if (needs2DShader) {\n      // First derive from the terrain command\n      let derived2DCommand = DrawCommand.shallowClone(\n        command,\n        command.derivedCommands.pick2D,\n      );\n      derived2DCommand.shaderProgram = classificationPrimitive._spPick2D;\n      command.derivedCommands.pick2D = derived2DCommand;\n\n      // Then derive from the 3D Tiles command\n      derived2DCommand = DrawCommand.shallowClone(\n        derivedCommand,\n        derivedCommand.derivedCommands.pick2D,\n      );\n      derived2DCommand.shaderProgram = classificationPrimitive._spPick2D;\n      derivedCommand.derivedCommands.pick2D = derived2DCommand;\n    }\n  }\n}\n\nfunction createCommands(\n  classificationPrimitive,\n  appearance,\n  material,\n  translucent,\n  twoPasses,\n  colorCommands,\n  pickCommands,\n) {\n  createColorCommands(classificationPrimitive, colorCommands);\n  createPickCommands(classificationPrimitive, pickCommands);\n}\n\nfunction boundingVolumeIndex(commandIndex, length) {\n  return Math.floor((commandIndex % length) / 2);\n}\n\nfunction updateAndQueueRenderCommand(\n  command,\n  frameState,\n  modelMatrix,\n  cull,\n  boundingVolume,\n  debugShowBoundingVolume,\n) {\n  command.modelMatrix = modelMatrix;\n  command.boundingVolume = boundingVolume;\n  command.cull = cull;\n  command.debugShowBoundingVolume = debugShowBoundingVolume;\n\n  frameState.commandList.push(command);\n}\n\nfunction updateAndQueuePickCommand(\n  command,\n  frameState,\n  modelMatrix,\n  cull,\n  boundingVolume,\n) {\n  command.modelMatrix = modelMatrix;\n  command.boundingVolume = boundingVolume;\n  command.cull = cull;\n\n  frameState.commandList.push(command);\n}\n\nfunction updateAndQueueCommands(\n  classificationPrimitive,\n  frameState,\n  colorCommands,\n  pickCommands,\n  modelMatrix,\n  cull,\n  debugShowBoundingVolume,\n  twoPasses,\n) {\n  const primitive = classificationPrimitive._primitive;\n  Primitive._updateBoundingVolumes(primitive, frameState, modelMatrix);\n\n  let boundingVolumes;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    boundingVolumes = primitive._boundingSphereWC;\n  } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n    boundingVolumes = primitive._boundingSphereCV;\n  } else if (\n    frameState.mode === SceneMode.SCENE2D &&\n    defined(primitive._boundingSphere2D)\n  ) {\n    boundingVolumes = primitive._boundingSphere2D;\n  } else if (defined(primitive._boundingSphereMorph)) {\n    boundingVolumes = primitive._boundingSphereMorph;\n  }\n\n  const classificationType = classificationPrimitive.classificationType;\n  const queueTerrainCommands =\n    classificationType !== ClassificationType.CESIUM_3D_TILE;\n  const queue3DTilesCommands =\n    classificationType !== ClassificationType.TERRAIN;\n\n  const passes = frameState.passes;\n\n  let i;\n  let boundingVolume;\n  let command;\n\n  if (passes.render) {\n    const colorLength = colorCommands.length;\n    for (i = 0; i < colorLength; ++i) {\n      boundingVolume = boundingVolumes[boundingVolumeIndex(i, colorLength)];\n      if (queueTerrainCommands) {\n        command = colorCommands[i];\n        updateAndQueueRenderCommand(\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n      if (queue3DTilesCommands) {\n        command = colorCommands[i].derivedCommands.tileset;\n        updateAndQueueRenderCommand(\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n    }\n\n    if (frameState.invertClassification) {\n      const ignoreShowCommands = classificationPrimitive._commandsIgnoreShow;\n      const ignoreShowCommandsLength = ignoreShowCommands.length;\n      for (i = 0; i < ignoreShowCommandsLength; ++i) {\n        boundingVolume = boundingVolumes[i];\n        command = ignoreShowCommands[i];\n        updateAndQueueRenderCommand(\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n    }\n  }\n\n  if (passes.pick) {\n    const pickLength = pickCommands.length;\n    const pickOffsets = primitive._pickOffsets;\n    for (i = 0; i < pickLength; ++i) {\n      const pickOffset = pickOffsets[boundingVolumeIndex(i, pickLength)];\n      boundingVolume = boundingVolumes[pickOffset.index];\n      if (queueTerrainCommands) {\n        command = pickCommands[i];\n        updateAndQueuePickCommand(\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n        );\n      }\n      if (queue3DTilesCommands) {\n        command = pickCommands[i].derivedCommands.tileset;\n        updateAndQueuePickCommand(\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n        );\n      }\n    }\n  }\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n * @exception {DeveloperError} Appearance and material have a uniform with the same name.\n * @exception {DeveloperError} Not all of the geometry instances have the same color attribute.\n */\nClassificationPrimitive.prototype.update = function (frameState) {\n  if (!defined(this._primitive) && !defined(this.geometryInstances)) {\n    return;\n  }\n\n  let appearance = this.appearance;\n  if (defined(appearance) && defined(appearance.material)) {\n    appearance.material.update(frameState.context);\n  }\n\n  const that = this;\n  const primitiveOptions = this._primitiveOptions;\n\n  if (!defined(this._primitive)) {\n    const instances = Array.isArray(this.geometryInstances)\n      ? this.geometryInstances\n      : [this.geometryInstances];\n    const length = instances.length;\n\n    let i;\n    let instance;\n    let attributes;\n\n    let hasPerColorAttribute = false;\n    let allColorsSame = true;\n    let firstColor;\n    let hasSphericalExtentsAttribute = false;\n    let hasPlanarExtentsAttributes = false;\n\n    if (length > 0) {\n      attributes = instances[0].attributes;\n      // Not expecting these to be set by users, should only be set via GroundPrimitive.\n      // So don't check for mismatch.\n      hasSphericalExtentsAttribute =\n        ShadowVolumeAppearance.hasAttributesForSphericalExtents(attributes);\n      hasPlanarExtentsAttributes =\n        ShadowVolumeAppearance.hasAttributesForTextureCoordinatePlanes(\n          attributes,\n        );\n      firstColor = attributes.color;\n    }\n\n    for (i = 0; i < length; i++) {\n      instance = instances[i];\n      const color = instance.attributes.color;\n      if (defined(color)) {\n        hasPerColorAttribute = true;\n      }\n      //>>includeStart('debug', pragmas.debug);\n      else if (hasPerColorAttribute) {\n        throw new DeveloperError(\n          \"All GeometryInstances must have color attributes to use per-instance color.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      allColorsSame =\n        allColorsSame &&\n        defined(color) &&\n        ColorGeometryInstanceAttribute.equals(firstColor, color);\n    }\n\n    // If no attributes exist for computing spherical extents or fragment culling,\n    // throw if the colors aren't all the same.\n    if (\n      !allColorsSame &&\n      !hasSphericalExtentsAttribute &&\n      !hasPlanarExtentsAttributes\n    ) {\n      throw new DeveloperError(\n        \"All GeometryInstances must have the same color attribute except via GroundPrimitives\",\n      );\n    }\n\n    // default to a color appearance\n    if (hasPerColorAttribute && !defined(appearance)) {\n      appearance = new PerInstanceColorAppearance({\n        flat: true,\n      });\n      this.appearance = appearance;\n    }\n\n    //>>includeStart('debug', pragmas.debug);\n    if (\n      !hasPerColorAttribute &&\n      appearance instanceof PerInstanceColorAppearance\n    ) {\n      throw new DeveloperError(\n        \"PerInstanceColorAppearance requires color GeometryInstanceAttributes on all GeometryInstances\",\n      );\n    }\n    if (\n      defined(appearance.material) &&\n      !hasSphericalExtentsAttribute &&\n      !hasPlanarExtentsAttributes\n    ) {\n      throw new DeveloperError(\n        \"Materials on ClassificationPrimitives are not supported except via GroundPrimitives\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    this._usePickOffsets =\n      !hasSphericalExtentsAttribute && !hasPlanarExtentsAttributes;\n    this._hasSphericalExtentsAttribute = hasSphericalExtentsAttribute;\n    this._hasPlanarExtentsAttributes = hasPlanarExtentsAttributes;\n    this._hasPerColorAttribute = hasPerColorAttribute;\n\n    const geometryInstances = new Array(length);\n    for (i = 0; i < length; ++i) {\n      instance = instances[i];\n      geometryInstances[i] = new GeometryInstance({\n        geometry: instance.geometry,\n        attributes: instance.attributes,\n        modelMatrix: instance.modelMatrix,\n        id: instance.id,\n        pickPrimitive: this._pickPrimitive ?? that,\n      });\n    }\n\n    primitiveOptions.appearance = appearance;\n    primitiveOptions.geometryInstances = geometryInstances;\n\n    if (defined(this._createBoundingVolumeFunction)) {\n      primitiveOptions._createBoundingVolumeFunction = function (\n        frameState,\n        geometry,\n      ) {\n        that._createBoundingVolumeFunction(frameState, geometry);\n      };\n    }\n\n    primitiveOptions._createRenderStatesFunction = function (\n      primitive,\n      context,\n      appearance,\n      twoPasses,\n    ) {\n      createRenderStates(that, context);\n    };\n    primitiveOptions._createShaderProgramFunction = function (\n      primitive,\n      frameState,\n      appearance,\n    ) {\n      createShaderProgram(that, frameState);\n    };\n    primitiveOptions._createCommandsFunction = function (\n      primitive,\n      appearance,\n      material,\n      translucent,\n      twoPasses,\n      colorCommands,\n      pickCommands,\n    ) {\n      createCommands(\n        that,\n        undefined,\n        undefined,\n        true,\n        false,\n        colorCommands,\n        pickCommands,\n      );\n    };\n\n    if (defined(this._updateAndQueueCommandsFunction)) {\n      primitiveOptions._updateAndQueueCommandsFunction = function (\n        primitive,\n        frameState,\n        colorCommands,\n        pickCommands,\n        modelMatrix,\n        cull,\n        debugShowBoundingVolume,\n        twoPasses,\n      ) {\n        that._updateAndQueueCommandsFunction(\n          primitive,\n          frameState,\n          colorCommands,\n          pickCommands,\n          modelMatrix,\n          cull,\n          debugShowBoundingVolume,\n          twoPasses,\n        );\n      };\n    } else {\n      primitiveOptions._updateAndQueueCommandsFunction = function (\n        primitive,\n        frameState,\n        colorCommands,\n        pickCommands,\n        modelMatrix,\n        cull,\n        debugShowBoundingVolume,\n        twoPasses,\n      ) {\n        updateAndQueueCommands(\n          that,\n          frameState,\n          colorCommands,\n          pickCommands,\n          modelMatrix,\n          cull,\n          debugShowBoundingVolume,\n          twoPasses,\n        );\n      };\n    }\n\n    this._primitive = new Primitive(primitiveOptions);\n  }\n\n  if (\n    this.debugShowShadowVolume &&\n    !this._debugShowShadowVolume &&\n    this._ready\n  ) {\n    this._debugShowShadowVolume = true;\n    this._rsStencilDepthPass = RenderState.fromCache(\n      getStencilDepthRenderState(false, false),\n    );\n    this._rsStencilDepthPass3DTiles = RenderState.fromCache(\n      getStencilDepthRenderState(false, true),\n    );\n    this._rsColorPass = RenderState.fromCache(getColorRenderState(false));\n  } else if (!this.debugShowShadowVolume && this._debugShowShadowVolume) {\n    this._debugShowShadowVolume = false;\n    this._rsStencilDepthPass = RenderState.fromCache(\n      getStencilDepthRenderState(true, false),\n    );\n    this._rsStencilDepthPass3DTiles = RenderState.fromCache(\n      getStencilDepthRenderState(true, true),\n    );\n    this._rsColorPass = RenderState.fromCache(getColorRenderState(true));\n  }\n  // Update primitive appearance\n  if (this._primitive.appearance !== appearance) {\n    //>>includeStart('debug', pragmas.debug);\n    // Check if the appearance is supported by the geometry attributes\n    if (\n      !this._hasSphericalExtentsAttribute &&\n      !this._hasPlanarExtentsAttributes &&\n      defined(appearance.material)\n    ) {\n      throw new DeveloperError(\n        \"Materials on ClassificationPrimitives are not supported except via GroundPrimitive\",\n      );\n    }\n    if (\n      !this._hasPerColorAttribute &&\n      appearance instanceof PerInstanceColorAppearance\n    ) {\n      throw new DeveloperError(\n        \"PerInstanceColorAppearance requires color GeometryInstanceAttribute\",\n      );\n    }\n    //>>includeEnd('debug');\n    this._primitive.appearance = appearance;\n  }\n\n  this._primitive.show = this.show;\n  this._primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;\n  this._primitive.update(frameState);\n\n  frameState.afterRender.push(() => {\n    if (defined(this._primitive) && this._primitive.ready) {\n      this._ready = true;\n\n      if (this.releaseGeometryInstances) {\n        this.geometryInstances = undefined;\n      }\n    }\n  });\n};\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n */\nClassificationPrimitive.prototype.getGeometryInstanceAttributes = function (\n  id,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(this._primitive)) {\n    throw new DeveloperError(\n      \"must call update before calling getGeometryInstanceAttributes\",\n    );\n  }\n  //>>includeEnd('debug');\n  return this._primitive.getGeometryInstanceAttributes(id);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ClassificationPrimitive#destroy\n */\nClassificationPrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see ClassificationPrimitive#isDestroyed\n */\nClassificationPrimitive.prototype.destroy = function () {\n  this._primitive = this._primitive && this._primitive.destroy();\n  this._sp = this._sp && this._sp.destroy();\n  this._spPick = this._spPick && this._spPick.destroy();\n  this._spColor = this._spColor && this._spColor.destroy();\n\n  // Derived programs, destroyed above if they existed.\n  this._spPick2D = undefined;\n  this._spColor2D = undefined;\n  return destroyObject(this);\n};\nexport default ClassificationPrimitive;\n","/**\n * Whether a classification affects terrain, 3D Tiles or both.\n *\n * @enum {number}\n */\nconst ClassificationType = {\n  /**\n   * Only terrain will be classified.\n   *\n   * @type {number}\n   * @constant\n   */\n  TERRAIN: 0,\n  /**\n   * Only 3D Tiles will be classified.\n   *\n   * @type {number}\n   * @constant\n   */\n  CESIUM_3D_TILE: 1,\n  /**\n   * Both terrain and 3D Tiles will be classified.\n   *\n   * @type {number}\n   * @constant\n   */\n  BOTH: 2,\n};\n\n/**\n * @private\n */\nClassificationType.NUMBER_OF_CLASSIFICATION_TYPES = 3;\n\nexport default Object.freeze(ClassificationType);\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * A Plane in Hessian Normal form to be used with {@link ClippingPlaneCollection}.\n * Compatible with mathematics functions in {@link Plane}\n *\n * @alias ClippingPlane\n * @constructor\n *\n * @param {Cartesian3} normal The plane's normal (normalized).\n * @param {number} distance The shortest distance from the origin to the plane.  The sign of\n * <code>distance</code> determines which side of the plane the origin\n * is on.  If <code>distance</code> is positive, the origin is in the half-space\n * in the direction of the normal; if negative, the origin is in the half-space\n * opposite to the normal; if zero, the plane passes through the origin.\n */\nfunction ClippingPlane(normal, distance) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"normal\", normal);\n  Check.typeOf.number(\"distance\", distance);\n  //>>includeEnd('debug');\n\n  this._distance = distance;\n  this._normal = new UpdateChangedCartesian3(normal, this);\n  this.onChangeCallback = undefined;\n  this.index = -1; // to be set by ClippingPlaneCollection\n}\n\nObject.defineProperties(ClippingPlane.prototype, {\n  /**\n   * The shortest distance from the origin to the plane.  The sign of\n   * <code>distance</code> determines which side of the plane the origin\n   * is on.  If <code>distance</code> is positive, the origin is in the half-space\n   * in the direction of the normal; if negative, the origin is in the half-space\n   * opposite to the normal; if zero, the plane passes through the origin.\n   *\n   * @type {number}\n   * @memberof ClippingPlane.prototype\n   */\n  distance: {\n    get: function () {\n      return this._distance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n      if (defined(this.onChangeCallback) && value !== this._distance) {\n        this.onChangeCallback(this.index);\n      }\n      this._distance = value;\n    },\n  },\n  /**\n   * The plane's normal.\n   *\n   * @type {Cartesian3}\n   * @memberof ClippingPlane.prototype\n   */\n  normal: {\n    get: function () {\n      return this._normal;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n      if (\n        defined(this.onChangeCallback) &&\n        !Cartesian3.equals(this._normal._cartesian3, value)\n      ) {\n        this.onChangeCallback(this.index);\n      }\n      // Set without firing callback again\n      Cartesian3.clone(value, this._normal._cartesian3);\n    },\n  },\n});\n\n/**\n * Create a ClippingPlane from a Plane object.\n *\n * @param {Plane} plane The plane containing parameters to copy\n * @param {ClippingPlane} [result] The object on which to store the result\n * @returns {ClippingPlane} The ClippingPlane generated from the plane's parameters.\n */\nClippingPlane.fromPlane = function (plane, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"plane\", plane);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new ClippingPlane(plane.normal, plane.distance);\n  } else {\n    result.normal = plane.normal;\n    result.distance = plane.distance;\n  }\n  return result;\n};\n\n/**\n * Clones the ClippingPlane without setting its ownership.\n * @param {ClippingPlane} clippingPlane The ClippingPlane to be cloned\n * @param {ClippingPlane} [result] The object on which to store the cloned parameters.\n * @returns {ClippingPlane} a clone of the input ClippingPlane\n */\nClippingPlane.clone = function (clippingPlane, result) {\n  if (!defined(result)) {\n    return new ClippingPlane(clippingPlane.normal, clippingPlane.distance);\n  }\n  result.normal = clippingPlane.normal;\n  result.distance = clippingPlane.distance;\n  return result;\n};\n\n/**\n * Wrapper on Cartesian3 that allows detection of Plane changes from \"members of members,\" for example:\n *\n * const clippingPlane = new ClippingPlane(...);\n * clippingPlane.normal.z = -1.0;\n *\n * @private\n */\nfunction UpdateChangedCartesian3(normal, clippingPlane) {\n  this._clippingPlane = clippingPlane;\n  this._cartesian3 = Cartesian3.clone(normal);\n}\n\nObject.defineProperties(UpdateChangedCartesian3.prototype, {\n  x: {\n    get: function () {\n      return this._cartesian3.x;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n      if (\n        defined(this._clippingPlane.onChangeCallback) &&\n        value !== this._cartesian3.x\n      ) {\n        this._clippingPlane.onChangeCallback(this._clippingPlane.index);\n      }\n      this._cartesian3.x = value;\n    },\n  },\n  y: {\n    get: function () {\n      return this._cartesian3.y;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n      if (\n        defined(this._clippingPlane.onChangeCallback) &&\n        value !== this._cartesian3.y\n      ) {\n        this._clippingPlane.onChangeCallback(this._clippingPlane.index);\n      }\n      this._cartesian3.y = value;\n    },\n  },\n  z: {\n    get: function () {\n      return this._cartesian3.z;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n      if (\n        defined(this._clippingPlane.onChangeCallback) &&\n        value !== this._cartesian3.z\n      ) {\n        this._clippingPlane.onChangeCallback(this._clippingPlane.index);\n      }\n      this._cartesian3.z = value;\n    },\n  },\n});\nexport default ClippingPlane;\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Plane from \"../Core/Plane.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport ClippingPlane from \"./ClippingPlane.js\";\n\n/**\n * Specifies a set of clipping planes. Clipping planes selectively disable rendering in a region on the\n * outside of the specified list of {@link ClippingPlane} objects for a single gltf model, 3D Tileset, or the globe.\n * <p>\n * In general the clipping planes' coordinates are relative to the object they're attached to, so a plane with distance set to 0 will clip\n * through the center of the object.\n * </p>\n * <p>\n * For 3D Tiles, the root tile's transform is used to position the clipping planes. If a transform is not defined, the root tile's {@link Cesium3DTile#boundingSphere} is used instead.\n * </p>\n *\n * @alias ClippingPlaneCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {ClippingPlane[]} [options.planes=[]] An array of {@link ClippingPlane} objects used to selectively disable rendering on the outside of each plane.\n * @param {boolean} [options.enabled=true] Determines whether the clipping planes are active.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix specifying an additional transform relative to the clipping planes original coordinate system.\n * @param {boolean} [options.unionClippingRegions=false] If true, a region will be clipped if it is on the outside of any plane in the collection. Otherwise, a region will only be clipped if it is on the outside of every plane.\n * @param {Color} [options.edgeColor=Color.WHITE] The color applied to highlight the edge along which an object is clipped.\n * @param {number} [options.edgeWidth=0.0] The width, in pixels, of the highlight applied to the edge along which an object is clipped.\n *\n * @demo {@link https://sandcastle.cesium.com/?id=3d-tiles-clipping-planes|Clipping 3D Tiles and glTF models.}\n * @demo {@link https://sandcastle.cesium.com/?id=terrain-clipping-planes|Clipping the Globe.}\n *\n * @example\n * // This clipping plane's distance is positive, which means its normal\n * // is facing the origin. This will clip everything that is behind\n * // the plane, which is anything with y coordinate < -5.\n * const clippingPlanes = new Cesium.ClippingPlaneCollection({\n *     planes : [\n *         new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), 5.0)\n *     ],\n * });\n * // Create an entity and attach the ClippingPlaneCollection to the model.\n * const entity = viewer.entities.add({\n *     position : Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, 10000),\n *     model : {\n *         uri : 'model.gltf',\n *         minimumPixelSize : 128,\n *         maximumScale : 20000,\n *         clippingPlanes : clippingPlanes\n *     }\n * });\n * viewer.zoomTo(entity);\n */\nfunction ClippingPlaneCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._planes = [];\n\n  // Do partial texture updates if just one plane is dirty.\n  // If many planes are dirty, refresh the entire texture.\n  this._dirtyIndex = -1;\n  this._multipleDirtyPlanes = false;\n\n  this._enabled = options.enabled ?? true;\n\n  /**\n   * The 4x4 transformation matrix specifying an additional transform relative to the clipping planes\n   * original coordinate system.\n   *\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n\n  /**\n   * The color applied to highlight the edge along which an object is clipped.\n   *\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  this.edgeColor = Color.clone(options.edgeColor ?? Color.WHITE);\n\n  /**\n   * The width, in pixels, of the highlight applied to the edge along which an object is clipped.\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.edgeWidth = options.edgeWidth ?? 0.0;\n\n  /**\n   * An event triggered when a new clipping plane is added to the collection.  Event handlers\n   * are passed the new plane and the index at which it was added.\n   * @type {Event}\n   * @readonly\n   */\n  this.planeAdded = new Event();\n\n  /**\n   * An event triggered when a new clipping plane is removed from the collection.  Event handlers\n   * are passed the new plane and the index from which it was removed.\n   * @type {Event}\n   * @readonly\n   */\n  this.planeRemoved = new Event();\n\n  // If this ClippingPlaneCollection has an owner, only its owner should update or destroy it.\n  // This is because in a Cesium3DTileset multiple models may reference the tileset's ClippingPlaneCollection.\n  this._owner = undefined;\n\n  const unionClippingRegions = options.unionClippingRegions ?? false;\n  this._unionClippingRegions = unionClippingRegions;\n  this._testIntersection = unionClippingRegions\n    ? unionIntersectFunction\n    : defaultIntersectFunction;\n\n  this._uint8View = undefined;\n  this._float32View = undefined;\n\n  this._clippingPlanesTexture = undefined;\n\n  // Add each ClippingPlane object.\n  const planes = options.planes;\n  if (defined(planes)) {\n    const planesLength = planes.length;\n    for (let i = 0; i < planesLength; ++i) {\n      this.add(planes[i]);\n    }\n  }\n}\n\nfunction unionIntersectFunction(value) {\n  return value === Intersect.OUTSIDE;\n}\n\nfunction defaultIntersectFunction(value) {\n  return value === Intersect.INSIDE;\n}\n\nObject.defineProperties(ClippingPlaneCollection.prototype, {\n  /**\n   * Returns the number of planes in this collection.  This is commonly used with\n   * {@link ClippingPlaneCollection#get} to iterate over all the planes\n   * in the collection.\n   *\n   * @memberof ClippingPlaneCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._planes.length;\n    },\n  },\n\n  /**\n   * If true, a region will be clipped if it is on the outside of any plane in the\n   * collection. Otherwise, a region will only be clipped if it is on the\n   * outside of every plane.\n   *\n   * @memberof ClippingPlaneCollection.prototype\n   * @type {boolean}\n   * @default false\n   */\n  unionClippingRegions: {\n    get: function () {\n      return this._unionClippingRegions;\n    },\n    set: function (value) {\n      if (this._unionClippingRegions === value) {\n        return;\n      }\n      this._unionClippingRegions = value;\n      this._testIntersection = value\n        ? unionIntersectFunction\n        : defaultIntersectFunction;\n    },\n  },\n\n  /**\n   * If true, clipping will be enabled.\n   *\n   * @memberof ClippingPlaneCollection.prototype\n   * @type {boolean}\n   * @default true\n   */\n  enabled: {\n    get: function () {\n      return this._enabled;\n    },\n    set: function (value) {\n      if (this._enabled === value) {\n        return;\n      }\n      this._enabled = value;\n    },\n  },\n\n  /**\n   * Returns a texture containing packed, untransformed clipping planes.\n   *\n   * @memberof ClippingPlaneCollection.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  texture: {\n    get: function () {\n      return this._clippingPlanesTexture;\n    },\n  },\n\n  /**\n   * A reference to the ClippingPlaneCollection's owner, if any.\n   *\n   * @memberof ClippingPlaneCollection.prototype\n   * @readonly\n   * @private\n   */\n  owner: {\n    get: function () {\n      return this._owner;\n    },\n  },\n\n  /**\n   * Returns a Number encapsulating the state for this ClippingPlaneCollection.\n   *\n   * Clipping mode is encoded in the sign of the number, which is just the plane count.\n   * If this value changes, then shader regeneration is necessary.\n   *\n   * @memberof ClippingPlaneCollection.prototype\n   * @returns {number} A Number that describes the ClippingPlaneCollection's state.\n   * @readonly\n   * @private\n   */\n  clippingPlanesState: {\n    get: function () {\n      return this._unionClippingRegions\n        ? this._planes.length\n        : -this._planes.length;\n    },\n  },\n});\n\nfunction setIndexDirty(collection, index) {\n  // If there's already a different _dirtyIndex set, more than one plane has changed since update.\n  // Entire texture must be reloaded\n  collection._multipleDirtyPlanes =\n    collection._multipleDirtyPlanes ||\n    (collection._dirtyIndex !== -1 && collection._dirtyIndex !== index);\n  collection._dirtyIndex = index;\n}\n\n/**\n * Adds the specified {@link ClippingPlane} to the collection to be used to selectively disable rendering\n * on the outside of each plane. Use {@link ClippingPlaneCollection#unionClippingRegions} to modify\n * how modify the clipping behavior of multiple planes.\n *\n * @param {ClippingPlane} plane The ClippingPlane to add to the collection.\n *\n * @see ClippingPlaneCollection#unionClippingRegions\n * @see ClippingPlaneCollection#remove\n * @see ClippingPlaneCollection#removeAll\n */\nClippingPlaneCollection.prototype.add = function (plane) {\n  const newPlaneIndex = this._planes.length;\n\n  const that = this;\n  plane.onChangeCallback = function (index) {\n    setIndexDirty(that, index);\n  };\n  plane.index = newPlaneIndex;\n\n  setIndexDirty(this, newPlaneIndex);\n  this._planes.push(plane);\n  this.planeAdded.raiseEvent(plane, newPlaneIndex);\n};\n\n/**\n * Returns the plane in the collection at the specified index.  Indices are zero-based\n * and increase as planes are added.  Removing a plane shifts all planes after\n * it to the left, changing their indices.  This function is commonly used with\n * {@link ClippingPlaneCollection#length} to iterate over all the planes\n * in the collection.\n *\n * @param {number} index The zero-based index of the plane.\n * @returns {ClippingPlane} The ClippingPlane at the specified index.\n *\n * @see ClippingPlaneCollection#length\n */\nClippingPlaneCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  return this._planes[index];\n};\n\nfunction indexOf(planes, plane) {\n  const length = planes.length;\n  for (let i = 0; i < length; ++i) {\n    if (Plane.equals(planes[i], plane)) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n/**\n * Checks whether this collection contains a ClippingPlane equal to the given ClippingPlane.\n *\n * @param {ClippingPlane} [clippingPlane] The ClippingPlane to check for.\n * @returns {boolean} true if this collection contains the ClippingPlane, false otherwise.\n *\n * @see ClippingPlaneCollection#get\n */\nClippingPlaneCollection.prototype.contains = function (clippingPlane) {\n  return indexOf(this._planes, clippingPlane) !== -1;\n};\n\n/**\n * Removes the first occurrence of the given ClippingPlane from the collection.\n *\n * @param {ClippingPlane} clippingPlane\n * @returns {boolean} <code>true</code> if the plane was removed; <code>false</code> if the plane was not found in the collection.\n *\n * @see ClippingPlaneCollection#add\n * @see ClippingPlaneCollection#contains\n * @see ClippingPlaneCollection#removeAll\n */\nClippingPlaneCollection.prototype.remove = function (clippingPlane) {\n  const planes = this._planes;\n  const index = indexOf(planes, clippingPlane);\n\n  if (index === -1) {\n    return false;\n  }\n\n  // Unlink this ClippingPlaneCollection from the ClippingPlane\n  if (clippingPlane instanceof ClippingPlane) {\n    clippingPlane.onChangeCallback = undefined;\n    clippingPlane.index = -1;\n  }\n\n  // Shift and update indices\n  const length = planes.length - 1;\n  for (let i = index; i < length; ++i) {\n    const planeToKeep = planes[i + 1];\n    planes[i] = planeToKeep;\n    if (planeToKeep instanceof ClippingPlane) {\n      planeToKeep.index = i;\n    }\n  }\n\n  // Indicate planes texture is dirty\n  this._multipleDirtyPlanes = true;\n  planes.length = length;\n\n  this.planeRemoved.raiseEvent(clippingPlane, index);\n\n  return true;\n};\n\n/**\n * Removes all planes from the collection.\n *\n * @see ClippingPlaneCollection#add\n * @see ClippingPlaneCollection#remove\n */\nClippingPlaneCollection.prototype.removeAll = function () {\n  // Dereference this ClippingPlaneCollection from all ClippingPlanes\n  const planes = this._planes;\n  const planesCount = planes.length;\n  for (let i = 0; i < planesCount; ++i) {\n    const plane = planes[i];\n    if (plane instanceof ClippingPlane) {\n      plane.onChangeCallback = undefined;\n      plane.index = -1;\n    }\n    this.planeRemoved.raiseEvent(plane, i);\n  }\n  this._multipleDirtyPlanes = true;\n  this._planes = [];\n};\n\nconst distanceEncodeScratch = new Cartesian4();\nconst oct32EncodeScratch = new Cartesian4();\nfunction packPlanesAsUint8(clippingPlaneCollection, startIndex, endIndex) {\n  const uint8View = clippingPlaneCollection._uint8View;\n  const planes = clippingPlaneCollection._planes;\n  let byteIndex = 0;\n  for (let i = startIndex; i < endIndex; ++i) {\n    const plane = planes[i];\n\n    const oct32Normal = AttributeCompression.octEncodeToCartesian4(\n      plane.normal,\n      oct32EncodeScratch,\n    );\n    uint8View[byteIndex] = oct32Normal.x;\n    uint8View[byteIndex + 1] = oct32Normal.y;\n    uint8View[byteIndex + 2] = oct32Normal.z;\n    uint8View[byteIndex + 3] = oct32Normal.w;\n\n    const encodedDistance = Cartesian4.packFloat(\n      plane.distance,\n      distanceEncodeScratch,\n    );\n    uint8View[byteIndex + 4] = encodedDistance.x;\n    uint8View[byteIndex + 5] = encodedDistance.y;\n    uint8View[byteIndex + 6] = encodedDistance.z;\n    uint8View[byteIndex + 7] = encodedDistance.w;\n\n    byteIndex += 8;\n  }\n}\n\n// Pack starting at the beginning of the buffer to allow partial update\nfunction packPlanesAsFloats(clippingPlaneCollection, startIndex, endIndex) {\n  const float32View = clippingPlaneCollection._float32View;\n  const planes = clippingPlaneCollection._planes;\n\n  let floatIndex = 0;\n  for (let i = startIndex; i < endIndex; ++i) {\n    const plane = planes[i];\n    const normal = plane.normal;\n\n    float32View[floatIndex] = normal.x;\n    float32View[floatIndex + 1] = normal.y;\n    float32View[floatIndex + 2] = normal.z;\n    float32View[floatIndex + 3] = plane.distance;\n\n    floatIndex += 4; // each plane is 4 floats\n  }\n}\n\nfunction computeTextureResolution(pixelsNeeded, result) {\n  const maxSize = ContextLimits.maximumTextureSize;\n  result.x = Math.min(pixelsNeeded, maxSize);\n  result.y = Math.ceil(pixelsNeeded / result.x);\n  return result;\n}\n\nconst textureResolutionScratch = new Cartesian2();\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * build the resources for clipping planes.\n * <p>\n * Do not call this function directly.\n * </p>\n */\nClippingPlaneCollection.prototype.update = function (frameState) {\n  let clippingPlanesTexture = this._clippingPlanesTexture;\n  const context = frameState.context;\n  const useFloatTexture = ClippingPlaneCollection.useFloatTexture(context);\n\n  // Compute texture requirements for current planes\n  // In RGBA FLOAT, A plane is 4 floats packed to a RGBA.\n  // In RGBA UNSIGNED_BYTE, A plane is a float in [0, 1) packed to RGBA and an Oct32 quantized normal,\n  // so 8 bytes or 2 pixels in RGBA.\n  const pixelsNeeded = useFloatTexture ? this.length : this.length * 2;\n\n  if (defined(clippingPlanesTexture)) {\n    const currentPixelCount =\n      clippingPlanesTexture.width * clippingPlanesTexture.height;\n    // Recreate the texture to double current requirement if it isn't big enough or is 4 times larger than it needs to be.\n    // Optimization note: this isn't exactly the classic resizeable array algorithm\n    // * not necessarily checking for resize after each add/remove operation\n    // * random-access deletes instead of just pops\n    // * alloc ops likely more expensive than demonstrable via big-O analysis\n    if (\n      currentPixelCount < pixelsNeeded ||\n      pixelsNeeded < 0.25 * currentPixelCount\n    ) {\n      clippingPlanesTexture.destroy();\n      clippingPlanesTexture = undefined;\n      this._clippingPlanesTexture = undefined;\n    }\n  }\n\n  // If there are no clipping planes, there's nothing to update.\n  if (this.length === 0) {\n    return;\n  }\n\n  if (!defined(clippingPlanesTexture)) {\n    const requiredResolution = computeTextureResolution(\n      pixelsNeeded,\n      textureResolutionScratch,\n    );\n    // Allocate twice as much space as needed to avoid frequent texture reallocation.\n    // Allocate in the Y direction, since texture may be as wide as context texture support.\n    requiredResolution.y *= 2;\n\n    if (useFloatTexture) {\n      clippingPlanesTexture = new Texture({\n        context: context,\n        width: requiredResolution.x,\n        height: requiredResolution.y,\n        pixelFormat: PixelFormat.RGBA,\n        pixelDatatype: PixelDatatype.FLOAT,\n        sampler: Sampler.NEAREST,\n        flipY: false,\n      });\n      this._float32View = new Float32Array(\n        requiredResolution.x * requiredResolution.y * 4,\n      );\n    } else {\n      clippingPlanesTexture = new Texture({\n        context: context,\n        width: requiredResolution.x,\n        height: requiredResolution.y,\n        pixelFormat: PixelFormat.RGBA,\n        pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n        sampler: Sampler.NEAREST,\n        flipY: false,\n      });\n      this._uint8View = new Uint8Array(\n        requiredResolution.x * requiredResolution.y * 4,\n      );\n    }\n\n    this._clippingPlanesTexture = clippingPlanesTexture;\n    this._multipleDirtyPlanes = true;\n  }\n\n  const dirtyIndex = this._dirtyIndex;\n  if (!this._multipleDirtyPlanes && dirtyIndex === -1) {\n    return;\n  }\n  if (!this._multipleDirtyPlanes) {\n    // partial updates possible\n    let offsetX = 0;\n    let offsetY = 0;\n    if (useFloatTexture) {\n      offsetY = Math.floor(dirtyIndex / clippingPlanesTexture.width);\n      offsetX = Math.floor(dirtyIndex - offsetY * clippingPlanesTexture.width);\n\n      packPlanesAsFloats(this, dirtyIndex, dirtyIndex + 1);\n      clippingPlanesTexture.copyFrom({\n        source: {\n          width: 1,\n          height: 1,\n          arrayBufferView: this._float32View,\n        },\n        xOffset: offsetX,\n        yOffset: offsetY,\n      });\n    } else {\n      offsetY = Math.floor((dirtyIndex * 2) / clippingPlanesTexture.width);\n      offsetX = Math.floor(\n        dirtyIndex * 2 - offsetY * clippingPlanesTexture.width,\n      );\n      packPlanesAsUint8(this, dirtyIndex, dirtyIndex + 1);\n      clippingPlanesTexture.copyFrom({\n        source: {\n          width: 2,\n          height: 1,\n          arrayBufferView: this._uint8View,\n        },\n        xOffset: offsetX,\n        yOffset: offsetY,\n      });\n    }\n  } else if (useFloatTexture) {\n    packPlanesAsFloats(this, 0, this._planes.length);\n    clippingPlanesTexture.copyFrom({\n      source: {\n        width: clippingPlanesTexture.width,\n        height: clippingPlanesTexture.height,\n        arrayBufferView: this._float32View,\n      },\n    });\n  } else {\n    packPlanesAsUint8(this, 0, this._planes.length);\n    clippingPlanesTexture.copyFrom({\n      source: {\n        width: clippingPlanesTexture.width,\n        height: clippingPlanesTexture.height,\n        arrayBufferView: this._uint8View,\n      },\n    });\n  }\n\n  this._multipleDirtyPlanes = false;\n  this._dirtyIndex = -1;\n};\n\nconst scratchMatrix = new Matrix4();\nconst scratchPlane = new Plane(Cartesian3.UNIT_X, 0.0);\n/**\n * Determines the type intersection with the planes of this ClippingPlaneCollection instance and the specified {@link TileBoundingVolume}.\n * @private\n *\n * @param {object} tileBoundingVolume The volume to determine the intersection with the planes.\n * @param {Matrix4} [transform] An optional, additional matrix to transform the plane to world coordinates.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire volume is on the side of the planes\n *                      the normal is pointing and should be entirely rendered, {@link Intersect.OUTSIDE}\n *                      if the entire volume is on the opposite side and should be clipped, and\n *                      {@link Intersect.INTERSECTING} if the volume intersects the planes.\n */\nClippingPlaneCollection.prototype.computeIntersectionWithBoundingVolume =\n  function (tileBoundingVolume, transform) {\n    const planes = this._planes;\n    const length = planes.length;\n\n    let modelMatrix = this.modelMatrix;\n    if (defined(transform)) {\n      modelMatrix = Matrix4.multiply(transform, modelMatrix, scratchMatrix);\n    }\n\n    // If the collection is not set to union the clipping regions, the volume must be outside of all planes to be\n    // considered completely clipped. If the collection is set to union the clipping regions, if the volume can be\n    // outside any the planes, it is considered completely clipped.\n    // Lastly, if not completely clipped, if any plane is intersecting, more calculations must be performed.\n    let intersection = Intersect.INSIDE;\n    if (!this.unionClippingRegions && length > 0) {\n      intersection = Intersect.OUTSIDE;\n    }\n\n    for (let i = 0; i < length; ++i) {\n      const plane = planes[i];\n\n      Plane.transform(plane, modelMatrix, scratchPlane); // ClippingPlane can be used for Plane math\n\n      const value = tileBoundingVolume.intersectPlane(scratchPlane);\n      if (value === Intersect.INTERSECTING) {\n        intersection = value;\n      } else if (this._testIntersection(value)) {\n        return value;\n      }\n    }\n\n    return intersection;\n  };\n\n/**\n * Sets the owner for the input ClippingPlaneCollection if there wasn't another owner.\n * Destroys the owner's previous ClippingPlaneCollection if setting is successful.\n *\n * @param {ClippingPlaneCollection} [clippingPlaneCollection] A ClippingPlaneCollection (or undefined) being attached to an object\n * @param {object} owner An Object that should receive the new ClippingPlaneCollection\n * @param {string} key The Key for the Object to reference the ClippingPlaneCollection\n * @private\n */\nClippingPlaneCollection.setOwner = function (\n  clippingPlaneCollection,\n  owner,\n  key,\n) {\n  // Don't destroy the ClippingPlaneCollection if it is already owned by newOwner\n  if (clippingPlaneCollection === owner[key]) {\n    return;\n  }\n  // Destroy the existing ClippingPlaneCollection, if any\n  owner[key] = owner[key] && owner[key].destroy();\n  if (defined(clippingPlaneCollection)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (defined(clippingPlaneCollection._owner)) {\n      throw new DeveloperError(\n        \"ClippingPlaneCollection should only be assigned to one object\",\n      );\n    }\n    //>>includeEnd('debug');\n    clippingPlaneCollection._owner = owner;\n    owner[key] = clippingPlaneCollection;\n  }\n};\n\n/**\n * Function for checking if the context will allow clipping planes with floating point textures.\n *\n * @param {Context} context The Context that will contain clipped objects and clipping textures.\n * @returns {boolean} <code>true</code> if floating point textures can be used for clipping planes.\n * @private\n */\nClippingPlaneCollection.useFloatTexture = function (context) {\n  return context.floatingPointTexture;\n};\n\n/**\n * Function for getting the clipping plane collection's texture resolution.\n * If the ClippingPlaneCollection hasn't been updated, returns the resolution that will be\n * allocated based on the current plane count.\n *\n * @param {ClippingPlaneCollection} clippingPlaneCollection The clipping plane collection\n * @param {Context} context The rendering context\n * @param {Cartesian2} result A Cartesian2 for the result.\n * @returns {Cartesian2} The required resolution.\n * @private\n */\nClippingPlaneCollection.getTextureResolution = function (\n  clippingPlaneCollection,\n  context,\n  result,\n) {\n  const texture = clippingPlaneCollection.texture;\n  if (defined(texture)) {\n    result.x = texture.width;\n    result.y = texture.height;\n    return result;\n  }\n\n  const pixelsNeeded = ClippingPlaneCollection.useFloatTexture(context)\n    ? clippingPlaneCollection.length\n    : clippingPlaneCollection.length * 2;\n  const requiredResolution = computeTextureResolution(pixelsNeeded, result);\n\n  // Allocate twice as much space as needed to avoid frequent texture reallocation.\n  requiredResolution.y *= 2;\n  return requiredResolution;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ClippingPlaneCollection#destroy\n */\nClippingPlaneCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * clippingPlanes = clippingPlanes && clippingPlanes.destroy();\n *\n * @see ClippingPlaneCollection#isDestroyed\n */\nClippingPlaneCollection.prototype.destroy = function () {\n  this._clippingPlanesTexture =\n    this._clippingPlanesTexture && this._clippingPlanesTexture.destroy();\n  return destroyObject(this);\n};\nexport default ClippingPlaneCollection;\n","import Check from \"../Core/Check.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PolygonGeometry from \"../Core/PolygonGeometry.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\n\n/**\n * A geodesic polygon to be used with {@link ClippingPlaneCollection} for selectively hiding regions in a model, a 3D tileset, or the globe.\n * @alias ClippingPolygon\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3[]} options.positions A list of three or more Cartesian coordinates defining the outer ring of the clipping polygon.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default]\n *\n * @example\n * const positions = Cesium.Cartesian3.fromRadiansArray([\n *     -1.3194369277314022,\n *     0.6988062530900625,\n *     -1.31941,\n *     0.69879,\n *     -1.3193955980204217,\n *     0.6988091578771254,\n *     -1.3193931220959367,\n *     0.698743632490865,\n *     -1.3194358224045408,\n *     0.6987471965556998,\n * ]);\n *\n * const polygon = new Cesium.ClippingPolygon({\n *     positions: positions\n * });\n */\nfunction ClippingPolygon(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.positions\", options.positions);\n  Check.typeOf.number.greaterThanOrEquals(\n    \"options.positions.length\",\n    options.positions.length,\n    3,\n  );\n  //>>includeEnd('debug');\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  this._positions = copyArrayCartesian3(options.positions);\n\n  /**\n   * A copy of the input positions.\n   *\n   * This is used to detect modifications of the positions in\n   * <code>coputeRectangle</code>: The rectangle only has\n   * to be re-computed when these positions have changed.\n   *\n   * @type {Cartesian3[]|undefined}\n   * @private\n   */\n  this._cachedPositions = undefined;\n\n  /**\n   * A cached version of the rectangle that is computed in\n   * <code>computeRectangle</code>.\n   *\n   * This is only re-computed when the positions have changed, as\n   * determined  by comparing the <code>_positions</code> to the\n   * <code>_cachedPositions</code>\n   *\n   * @type {Rectangle|undefined}\n   * @private\n   */\n  this._cachedRectangle = undefined;\n}\n\n/**\n * Returns a deep copy of the given array.\n *\n * If the input is undefined, then <code>undefined</code> is returned.\n *\n * Otherwise, the result will be a copy of the given array, where\n * each element is copied with <code>Cartesian3.clone</code>.\n *\n * @param {Cartesian3[]|undefined} input The input array\n * @returns {Cartesian3[]|undefined} The copy\n */\nfunction copyArrayCartesian3(input) {\n  if (!defined(input)) {\n    return undefined;\n  }\n  const n = input.length;\n  const output = Array(n);\n  for (let i = 0; i < n; i++) {\n    output[i] = Cartesian3.clone(input[i]);\n  }\n  return output;\n}\n\n/**\n * Returns whether the given arrays are component-wise equal.\n *\n * When both arrays are undefined, then <code>true</code> is returned.\n * When only one array is defined, or they are both defined but have\n * different lengths, then <code>false</code> is returned.\n *\n * Otherwise, returns whether the corresponding elements of the arrays\n * are equal, as of <code>Cartesian3.equals</code>.\n *\n * @param {Cartesian3[]|undefined} a The first array\n * @param {Cartesian3[]|undefined} b The second array\n * @returns {boolean} Whether the arrays are equal\n */\nfunction equalsArrayCartesian3(a, b) {\n  if (!defined(a) && !defined(b)) {\n    return true;\n  }\n  if (defined(a) !== defined(b)) {\n    return false;\n  }\n  if (a.length !== b.length) {\n    return false;\n  }\n  const n = a.length;\n  for (let i = 0; i < n; i++) {\n    const ca = a[i];\n    const cb = b[i];\n    if (!Cartesian3.equals(ca, cb)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nObject.defineProperties(ClippingPolygon.prototype, {\n  /**\n   * Returns the total number of positions in the polygon, include any holes.\n   *\n   * @memberof ClippingPolygon.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._positions.length;\n    },\n  },\n  /**\n   * Returns the outer ring of positions.\n   *\n   * @memberof ClippingPolygon.prototype\n   * @type {Cartesian3[]}\n   * @readonly\n   */\n  positions: {\n    get: function () {\n      return this._positions;\n    },\n  },\n  /**\n   * Returns the ellipsoid used to project the polygon onto surfaces when clipping.\n   *\n   * @memberof ClippingPolygon.prototype\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n});\n\n/**\n * Clones the ClippingPolygon without setting its ownership.\n * @param {ClippingPolygon} polygon The ClippingPolygon to be cloned\n * @param {ClippingPolygon} [result] The object on which to store the cloned parameters.\n * @returns {ClippingPolygon} a clone of the input ClippingPolygon\n */\nClippingPolygon.clone = function (polygon, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"polygon\", polygon);\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    return new ClippingPolygon({\n      positions: polygon.positions,\n      ellipsoid: polygon.ellipsoid,\n    });\n  }\n\n  result._ellipsoid = polygon.ellipsoid;\n  result._positions.length = 0;\n  result._positions.push(...polygon.positions);\n  return result;\n};\n\n/**\n * Compares the provided ClippingPolygons and returns\n * <code>true</code> if they are equal, <code>false</code> otherwise.\n *\n * @param {ClippingPolygon} left The first polygon.\n * @param {ClippingPolygon} right The second polygon.\n * @returns {boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.\n */\nClippingPolygon.equals = function (left, right) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"left\", left);\n  Check.typeOf.object(\"right\", right);\n  //>>includeEnd('debug');\n\n  return (\n    left.ellipsoid.equals(right.ellipsoid) && left.positions === right.positions\n  );\n};\n\n/**\n * Computes a cartographic rectangle which encloses the polygon defined by the list of positions, including cases over the international date line and the poles.\n *\n * @param {Rectangle} [result] An object in which to store the result.\n * @returns {Rectangle} The result rectangle\n */\nClippingPolygon.prototype.computeRectangle = function (result) {\n  if (equalsArrayCartesian3(this._positions, this._cachedPositions)) {\n    return Rectangle.clone(this._cachedRectangle, result);\n  }\n  const rectangle = PolygonGeometry.computeRectangleFromPositions(\n    this.positions,\n    this.ellipsoid,\n    undefined,\n    result,\n  );\n  this._cachedPositions = copyArrayCartesian3(this._positions);\n  this._cachedRectangle = Rectangle.clone(rectangle);\n  return rectangle;\n};\n\nconst scratchRectangle = new Rectangle();\nconst spherePointScratch = new Cartesian3();\n/**\n * Computes a rectangle with the spherical extents that encloses the polygon defined by the list of positions, including cases over the international date line and the poles.\n *\n * @private\n *\n * @param {Rectangle} [result] An object in which to store the result.\n * @returns {Rectangle} The result rectangle with spherical extents.\n */\nClippingPolygon.prototype.computeSphericalExtents = function (result) {\n  if (!defined(result)) {\n    result = new Rectangle();\n  }\n\n  const rectangle = this.computeRectangle(scratchRectangle);\n\n  let spherePoint = Cartographic.toCartesian(\n    Rectangle.southwest(rectangle),\n    this.ellipsoid,\n    spherePointScratch,\n  );\n\n  // Project into plane with vertical for latitude\n  let magXY = Math.sqrt(\n    spherePoint.x * spherePoint.x + spherePoint.y * spherePoint.y,\n  );\n\n  // Use fastApproximateAtan2 for alignment with shader\n  let sphereLatitude = CesiumMath.fastApproximateAtan2(magXY, spherePoint.z);\n  let sphereLongitude = CesiumMath.fastApproximateAtan2(\n    spherePoint.x,\n    spherePoint.y,\n  );\n\n  result.south = sphereLatitude;\n  result.west = sphereLongitude;\n\n  spherePoint = Cartographic.toCartesian(\n    Rectangle.northeast(rectangle),\n    this.ellipsoid,\n    spherePointScratch,\n  );\n\n  // Project into plane with vertical for latitude\n  magXY = Math.sqrt(\n    spherePoint.x * spherePoint.x + spherePoint.y * spherePoint.y,\n  );\n\n  // Use fastApproximateAtan2 for alignment with shader\n  sphereLatitude = CesiumMath.fastApproximateAtan2(magXY, spherePoint.z);\n  sphereLongitude = CesiumMath.fastApproximateAtan2(\n    spherePoint.x,\n    spherePoint.y,\n  );\n\n  result.north = sphereLatitude;\n  result.east = sphereLongitude;\n\n  return result;\n};\n\nexport default ClippingPolygon;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport ClippingPolygon from \"./ClippingPolygon.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport PolygonSignedDistanceFS from \"../Shaders/PolygonSignedDistanceFS.js\";\n\n/**\n * Specifies a set of clipping polygons. Clipping polygons selectively disable rendering in a region\n * inside or outside the specified list of {@link ClippingPolygon} objects for a single glTF model, 3D Tileset, or the globe.\n *\n * Clipping Polygons are only supported in WebGL 2 contexts.\n *\n * @alias ClippingPolygonCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {ClippingPolygon[]} [options.polygons=[]] An array of {@link ClippingPolygon} objects used to selectively disable rendering on the inside of each polygon.\n * @param {boolean} [options.enabled=true] Determines whether the clipping polygons are active.\n * @param {boolean} [options.inverse=false] If true, a region will be clipped if it is outside of every polygon in the collection. Otherwise, a region will only be clipped if it is on the inside of any polygon.\n *\n * @example\n * const positions = Cesium.Cartesian3.fromRadiansArray([\n *     -1.3194369277314022,\n *     0.6988062530900625,\n *     -1.31941,\n *     0.69879,\n *     -1.3193955980204217,\n *     0.6988091578771254,\n *     -1.3193931220959367,\n *     0.698743632490865,\n *     -1.3194358224045408,\n *     0.6987471965556998,\n * ]);\n *\n * const polygon = new Cesium.ClippingPolygon({\n *     positions: positions\n * });\n *\n * const polygons = new Cesium.ClippingPolygonCollection({\n *    polygons: [ polygon ]\n * });\n */\nfunction ClippingPolygonCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._polygons = [];\n  this._totalPositions = 0;\n\n  /**\n   * If true, clipping will be enabled.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.enabled = options.enabled ?? true;\n\n  /**\n   * If true, a region will be clipped if it is outside of every polygon in the\n   * collection. Otherwise, a region will only be clipped if it is\n   * inside of any polygon.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.inverse = options.inverse ?? false;\n\n  /**\n   * An event triggered when a new clipping polygon is added to the collection.  Event handlers\n   * are passed the new polygon and the index at which it was added.\n   * @type {Event}\n   * @default Event()\n   */\n  this.polygonAdded = new Event();\n\n  /**\n   * An event triggered when a new clipping polygon is removed from the collection.  Event handlers\n   * are passed the new polygon and the index from which it was removed.\n   * @type {Event}\n   * @default Event()\n   */\n  this.polygonRemoved = new Event();\n\n  // If this ClippingPolygonCollection has an owner, only its owner should update or destroy it.\n  // This is because in a Cesium3DTileset multiple models may reference the tileset's ClippingPolygonCollection.\n  this._owner = undefined;\n\n  this._float32View = undefined;\n  this._extentsFloat32View = undefined;\n  this._extentsCount = 0;\n\n  this._polygonsTexture = undefined;\n  this._extentsTexture = undefined;\n  this._signedDistanceTexture = undefined;\n\n  this._signedDistanceComputeCommand = undefined;\n\n  // Add each ClippingPolygon object.\n  const polygons = options.polygons;\n  if (defined(polygons)) {\n    const polygonsLength = polygons.length;\n    for (let i = 0; i < polygonsLength; ++i) {\n      this._polygons.push(polygons[i]);\n    }\n  }\n}\n\nObject.defineProperties(ClippingPolygonCollection.prototype, {\n  /**\n   * Returns the number of polygons in this collection.  This is commonly used with\n   * {@link ClippingPolygonCollection#get} to iterate over all the polygons\n   * in the collection.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._polygons.length;\n    },\n  },\n\n  /**\n   * Returns the total number of positions in all polygons in the collection.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  totalPositions: {\n    get: function () {\n      return this._totalPositions;\n    },\n  },\n\n  /**\n   * Returns a texture containing the packed computed spherical extents for each polygon\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  extentsTexture: {\n    get: function () {\n      return this._extentsTexture;\n    },\n  },\n\n  /**\n   * Returns the number of packed extents, which can be fewer than the number of polygons.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  extentsCount: {\n    get: function () {\n      return this._extentsCount;\n    },\n  },\n\n  /**\n   * Returns the number of pixels needed in the texture containing the packed computed spherical extents for each polygon.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  pixelsNeededForExtents: {\n    get: function () {\n      return this.length; // With an RGBA texture, each pixel contains min/max latitude and longitude.\n    },\n  },\n\n  /**\n   * Returns the number of pixels needed in the texture containing the packed polygon positions.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  pixelsNeededForPolygonPositions: {\n    get: function () {\n      // In an RG FLOAT texture, each polygon position is 2 floats packed to a RG.\n      // Each polygon is the number of positions of that polygon, followed by the list of positions\n      return this.totalPositions + this.length;\n    },\n  },\n\n  /**\n   * Returns a texture containing the computed signed distance of each polygon.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  clippingTexture: {\n    get: function () {\n      return this._signedDistanceTexture;\n    },\n  },\n\n  /**\n   * A reference to the ClippingPolygonCollection's owner, if any.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @readonly\n   * @private\n   */\n  owner: {\n    get: function () {\n      return this._owner;\n    },\n  },\n\n  /**\n   * Returns a number encapsulating the state for this ClippingPolygonCollection.\n   *\n   * Clipping mode is encoded in the sign of the number, which is just the total position count.\n   * If this value changes, then shader regeneration is necessary.\n   *\n   * @memberof ClippingPolygonCollection.prototype\n   * @returns {number} A Number that describes the ClippingPolygonCollection's state.\n   * @readonly\n   * @private\n   */\n  clippingPolygonsState: {\n    get: function () {\n      return this.inverse ? -this.extentsCount : this.extentsCount;\n    },\n  },\n});\n\n/**\n * Adds the specified {@link ClippingPolygon} to the collection to be used to selectively disable rendering\n * on the inside of each polygon. Use {@link ClippingPolygonCollection#unionClippingRegions} to modify\n * how modify the clipping behavior of multiple polygons.\n *\n * @param {ClippingPolygon} polygon The ClippingPolygon to add to the collection.\n * @returns {ClippingPolygon} The added ClippingPolygon.\n *\n * @example\n * const polygons = new Cesium.ClippingPolygonCollection();\n *\n * const positions = Cesium.Cartesian3.fromRadiansArray([\n *     -1.3194369277314022,\n *     0.6988062530900625,\n *     -1.31941,\n *     0.69879,\n *     -1.3193955980204217,\n *     0.6988091578771254,\n *     -1.3193931220959367,\n *     0.698743632490865,\n *     -1.3194358224045408,\n *     0.6987471965556998,\n * ]);\n *\n * polygons.add(new Cesium.ClippingPolygon({\n *     positions: positions\n * }));\n *\n *\n *\n * @see ClippingPolygonCollection#remove\n * @see ClippingPolygonCollection#removeAll\n */\nClippingPolygonCollection.prototype.add = function (polygon) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"polygon\", polygon);\n  //>>includeEnd('debug');\n\n  const newPlaneIndex = this._polygons.length;\n  this._polygons.push(polygon);\n  this.polygonAdded.raiseEvent(polygon, newPlaneIndex);\n  return polygon;\n};\n\n/**\n * Returns the clipping polygon in the collection at the specified index.  Indices are zero-based\n * and increase as polygons are added.  Removing a polygon polygon all polygons after\n * it to the left, changing their indices.  This function is commonly used with\n * {@link ClippingPolygonCollection#length} to iterate over all the polygons\n * in the collection.\n *\n * @param {number} index The zero-based index of the polygon.\n * @returns {ClippingPolygon} The ClippingPolygon at the specified index.\n *\n * @see ClippingPolygonCollection#length\n */\nClippingPolygonCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  return this._polygons[index];\n};\n\n/**\n * Checks whether this collection contains a ClippingPolygon equal to the given ClippingPolygon.\n *\n * @param {ClippingPolygon} polygon The ClippingPolygon to check for.\n * @returns {boolean} true if this collection contains the ClippingPolygon, false otherwise.\n *\n * @see ClippingPolygonCollection#get\n */\nClippingPolygonCollection.prototype.contains = function (polygon) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"polygon\", polygon);\n  //>>includeEnd('debug');\n\n  return this._polygons.some((p) => ClippingPolygon.equals(p, polygon));\n};\n\n/**\n * Removes the first occurrence of the given ClippingPolygon from the collection.\n *\n * @param {ClippingPolygon} polygon\n * @returns {boolean} <code>true</code> if the polygon was removed; <code>false</code> if the polygon was not found in the collection.\n *\n * @see ClippingPolygonCollection#add\n * @see ClippingPolygonCollection#contains\n * @see ClippingPolygonCollection#removeAll\n */\nClippingPolygonCollection.prototype.remove = function (polygon) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"polygon\", polygon);\n  //>>includeEnd('debug');\n\n  const polygons = this._polygons;\n  const index = polygons.findIndex((p) => ClippingPolygon.equals(p, polygon));\n\n  if (index === -1) {\n    return false;\n  }\n\n  polygons.splice(index, 1);\n\n  this.polygonRemoved.raiseEvent(polygon, index);\n  return true;\n};\n\nconst scratchRectangle = new Rectangle();\n\n// Map the polygons to a list of extents-- Overlapping extents will be merged\n// into a single encompassing extent\nfunction getExtents(polygons) {\n  const extentsList = [];\n  const polygonIndicesList = [];\n\n  const length = polygons.length;\n  for (let polygonIndex = 0; polygonIndex < length; ++polygonIndex) {\n    const polygon = polygons[polygonIndex];\n    const extents = polygon.computeSphericalExtents();\n\n    let height = Math.max(extents.height * 2.5, 0.001);\n    let width = Math.max(extents.width * 2.5, 0.001);\n\n    // Pad extents to avoid floating point error when fragment culling at edges.\n    let paddedExtents = Rectangle.clone(extents);\n    paddedExtents.south -= height;\n    paddedExtents.west -= width;\n    paddedExtents.north += height;\n    paddedExtents.east += width;\n\n    paddedExtents.south = Math.max(paddedExtents.south, -Math.PI);\n    paddedExtents.west = Math.max(paddedExtents.west, -Math.PI);\n    paddedExtents.north = Math.min(paddedExtents.north, Math.PI);\n    paddedExtents.east = Math.min(paddedExtents.east, Math.PI);\n\n    const polygonIndices = [polygonIndex];\n    for (let i = 0; i < extentsList.length; ++i) {\n      const e = extentsList[i];\n      if (\n        defined(e) &&\n        defined(Rectangle.simpleIntersection(e, paddedExtents)) &&\n        !Rectangle.equals(e, paddedExtents)\n      ) {\n        const intersectingPolygons = polygonIndicesList[i];\n        polygonIndices.push(...intersectingPolygons);\n        intersectingPolygons.reduce(\n          (extents, p) =>\n            Rectangle.union(\n              polygons[p].computeSphericalExtents(scratchRectangle),\n              extents,\n              extents,\n            ),\n          extents,\n        );\n\n        extentsList[i] = undefined;\n        polygonIndicesList[i] = undefined;\n\n        height = Math.max(extents.height * 2.5, 0.001);\n        width = Math.max(extents.width * 2.5, 0.001);\n\n        paddedExtents = Rectangle.clone(extents, paddedExtents);\n        paddedExtents.south -= height;\n        paddedExtents.west -= width;\n        paddedExtents.north += height;\n        paddedExtents.east += width;\n\n        paddedExtents.south = Math.max(paddedExtents.south, -Math.PI);\n        paddedExtents.west = Math.max(paddedExtents.west, -Math.PI);\n        paddedExtents.north = Math.min(paddedExtents.north, Math.PI);\n        paddedExtents.east = Math.min(paddedExtents.east, Math.PI);\n\n        // Reiterate through the extents list until there are no more intersections\n        i = -1;\n      }\n    }\n\n    extentsList.push(paddedExtents);\n    polygonIndicesList.push(polygonIndices);\n  }\n\n  const extentsIndexByPolygon = new Map();\n  polygonIndicesList\n    .filter(defined)\n    .forEach((polygonIndices, e) =>\n      polygonIndices.forEach((p) => extentsIndexByPolygon.set(p, e)),\n    );\n\n  return {\n    extentsList: extentsList.filter(defined),\n    extentsIndexByPolygon: extentsIndexByPolygon,\n  };\n}\n\n/**\n * Removes all polygons from the collection.\n *\n * @see ClippingPolygonCollection#add\n * @see ClippingPolygonCollection#remove\n */\nClippingPolygonCollection.prototype.removeAll = function () {\n  // Dereference this ClippingPolygonCollection from all ClippingPolygons\n  const polygons = this._polygons;\n  const polygonsCount = polygons.length;\n  for (let i = 0; i < polygonsCount; ++i) {\n    const polygon = polygons[i];\n    this.polygonRemoved.raiseEvent(polygon, i);\n  }\n  this._polygons = [];\n};\n\nfunction packPolygonsAsFloats(clippingPolygonCollection) {\n  const polygonsFloat32View = clippingPolygonCollection._float32View;\n  const extentsFloat32View = clippingPolygonCollection._extentsFloat32View;\n  const polygons = clippingPolygonCollection._polygons;\n\n  const { extentsList, extentsIndexByPolygon } = getExtents(polygons);\n\n  let floatIndex = 0;\n  for (const [polygonIndex, polygon] of polygons.entries()) {\n    // Pack the length of the polygon into the polygon texture array buffer\n    const length = polygon.length;\n    polygonsFloat32View[floatIndex++] = length;\n    polygonsFloat32View[floatIndex++] = extentsIndexByPolygon.get(polygonIndex);\n\n    // Pack the polygon positions into the polygon texture array buffer\n    for (let i = 0; i < length; ++i) {\n      const spherePoint = polygon.positions[i];\n\n      // Project into plane with vertical for latitude\n      const magXY = Math.hypot(spherePoint.x, spherePoint.y);\n\n      // Use fastApproximateAtan2 for alignment with shader\n      const latitudeApproximation = CesiumMath.fastApproximateAtan2(\n        magXY,\n        spherePoint.z,\n      );\n      const longitudeApproximation = CesiumMath.fastApproximateAtan2(\n        spherePoint.x,\n        spherePoint.y,\n      );\n\n      polygonsFloat32View[floatIndex++] = latitudeApproximation;\n      polygonsFloat32View[floatIndex++] = longitudeApproximation;\n    }\n  }\n\n  // Pack extents\n  let extentsFloatIndex = 0;\n  for (const extents of extentsList) {\n    const longitudeRangeInverse = 1.0 / (extents.east - extents.west);\n    const latitudeRangeInverse = 1.0 / (extents.north - extents.south);\n\n    extentsFloat32View[extentsFloatIndex++] = extents.south;\n    extentsFloat32View[extentsFloatIndex++] = extents.west;\n    extentsFloat32View[extentsFloatIndex++] = latitudeRangeInverse;\n    extentsFloat32View[extentsFloatIndex++] = longitudeRangeInverse;\n  }\n\n  clippingPolygonCollection._extentsCount = extentsList.length;\n}\n\nconst textureResolutionScratch = new Cartesian2();\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * build the resources for clipping polygons.\n * <p>\n * Do not call this function directly.\n * </p>\n * @private\n * @throws {RuntimeError} ClippingPolygonCollections are only supported for WebGL 2\n */\nClippingPolygonCollection.prototype.update = function (frameState) {\n  const context = frameState.context;\n\n  if (!ClippingPolygonCollection.isSupported(frameState)) {\n    throw new RuntimeError(\n      \"ClippingPolygonCollections are only supported for WebGL 2.\",\n    );\n  }\n\n  // It'd be expensive to validate any individual position has changed. Instead verify if the list of polygon positions has had elements added or removed, which should be good enough for most cases.\n  const totalPositions = this._polygons.reduce(\n    (totalPositions, polygon) => totalPositions + polygon.length,\n    0,\n  );\n\n  if (totalPositions === this.totalPositions) {\n    return;\n  }\n\n  this._totalPositions = totalPositions;\n\n  // If there are no clipping polygons, there's nothing to update.\n  if (this.length === 0) {\n    return;\n  }\n\n  if (defined(this._signedDistanceComputeCommand)) {\n    this._signedDistanceComputeCommand.canceled = true;\n    this._signedDistanceComputeCommand = undefined;\n  }\n\n  let polygonsTexture = this._polygonsTexture;\n  let extentsTexture = this._extentsTexture;\n  let signedDistanceTexture = this._signedDistanceTexture;\n  if (defined(polygonsTexture)) {\n    const currentPixelCount = polygonsTexture.width * polygonsTexture.height;\n    // Recreate the texture to double current requirement if it isn't big enough or is 4 times larger than it needs to be.\n    // Optimization note: this isn't exactly the classic resizeable array algorithm\n    // * not necessarily checking for resize after each add/remove operation\n    // * random-access deletes instead of just pops\n    // * alloc ops likely more expensive than demonstrable via big-O analysis\n    if (\n      currentPixelCount < this.pixelsNeededForPolygonPositions ||\n      this.pixelsNeededForPolygonPositions < 0.25 * currentPixelCount\n    ) {\n      polygonsTexture.destroy();\n      polygonsTexture = undefined;\n      this._polygonsTexture = undefined;\n    }\n  }\n\n  if (!defined(polygonsTexture)) {\n    const requiredResolution = ClippingPolygonCollection.getTextureResolution(\n      polygonsTexture,\n      this.pixelsNeededForPolygonPositions,\n      textureResolutionScratch,\n    );\n\n    polygonsTexture = new Texture({\n      context: context,\n      width: requiredResolution.x,\n      height: requiredResolution.y,\n      pixelFormat: PixelFormat.RG,\n      pixelDatatype: PixelDatatype.FLOAT,\n      sampler: Sampler.NEAREST,\n      flipY: false,\n    });\n    this._float32View = new Float32Array(\n      requiredResolution.x * requiredResolution.y * 2,\n    );\n    this._polygonsTexture = polygonsTexture;\n  }\n\n  if (defined(extentsTexture)) {\n    const currentPixelCount = extentsTexture.width * extentsTexture.height;\n    // Recreate the texture to double current requirement if it isn't big enough or is 4 times larger than it needs to be.\n    // Optimization note: this isn't exactly the classic resizeable array algorithm\n    // * not necessarily checking for resize after each add/remove operation\n    // * random-access deletes instead of just pops\n    // * alloc ops likely more expensive than demonstrable via big-O analysis\n    if (\n      currentPixelCount < this.pixelsNeededForExtents ||\n      this.pixelsNeededForExtents < 0.25 * currentPixelCount\n    ) {\n      extentsTexture.destroy();\n      extentsTexture = undefined;\n      this._extentsTexture = undefined;\n    }\n  }\n\n  if (!defined(extentsTexture)) {\n    const requiredResolution = ClippingPolygonCollection.getTextureResolution(\n      extentsTexture,\n      this.pixelsNeededForExtents,\n      textureResolutionScratch,\n    );\n\n    extentsTexture = new Texture({\n      context: context,\n      width: requiredResolution.x,\n      height: requiredResolution.y,\n      pixelFormat: PixelFormat.RGBA,\n      pixelDatatype: PixelDatatype.FLOAT,\n      sampler: Sampler.NEAREST,\n      flipY: false,\n    });\n    this._extentsFloat32View = new Float32Array(\n      requiredResolution.x * requiredResolution.y * 4,\n    );\n\n    this._extentsTexture = extentsTexture;\n  }\n\n  packPolygonsAsFloats(this);\n\n  extentsTexture.copyFrom({\n    source: {\n      width: extentsTexture.width,\n      height: extentsTexture.height,\n      arrayBufferView: this._extentsFloat32View,\n    },\n  });\n\n  polygonsTexture.copyFrom({\n    source: {\n      width: polygonsTexture.width,\n      height: polygonsTexture.height,\n      arrayBufferView: this._float32View,\n    },\n  });\n\n  if (!defined(signedDistanceTexture)) {\n    const textureDimensions =\n      ClippingPolygonCollection.getClippingDistanceTextureResolution(\n        this,\n        textureResolutionScratch,\n      );\n    signedDistanceTexture = new Texture({\n      context: context,\n      width: textureDimensions.x,\n      height: textureDimensions.y,\n      pixelFormat: context.webgl2 ? PixelFormat.RED : PixelFormat.LUMINANCE,\n      pixelDatatype: PixelDatatype.FLOAT,\n      sampler: new Sampler({\n        wrapS: TextureWrap.CLAMP_TO_EDGE,\n        wrapT: TextureWrap.CLAMP_TO_EDGE,\n        minificationFilter: TextureMinificationFilter.LINEAR,\n        magnificationFilter: TextureMagnificationFilter.LINEAR,\n      }),\n      flipY: false,\n    });\n\n    this._signedDistanceTexture = signedDistanceTexture;\n  }\n\n  this._signedDistanceComputeCommand = createSignedDistanceTextureCommand(this);\n};\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * build the resources for clipping polygons.\n * <p>\n * Do not call this function directly.\n * </p>\n * @private\n * @param {FrameState} frameState\n */\nClippingPolygonCollection.prototype.queueCommands = function (frameState) {\n  if (defined(this._signedDistanceComputeCommand)) {\n    frameState.commandList.push(this._signedDistanceComputeCommand);\n  }\n};\n\nfunction createSignedDistanceTextureCommand(collection) {\n  const polygonTexture = collection._polygonsTexture;\n  const extentsTexture = collection._extentsTexture;\n\n  return new ComputeCommand({\n    fragmentShaderSource: PolygonSignedDistanceFS,\n    outputTexture: collection._signedDistanceTexture,\n    uniformMap: {\n      u_polygonsLength: function () {\n        return collection.length;\n      },\n      u_extentsLength: function () {\n        return collection.extentsCount;\n      },\n      u_extentsTexture: function () {\n        return extentsTexture;\n      },\n      u_polygonTexture: function () {\n        return polygonTexture;\n      },\n    },\n    persists: false,\n    owner: collection,\n    postExecute: () => {\n      collection._signedDistanceComputeCommand = undefined;\n    },\n  });\n}\n\nconst scratchRectangleTile = new Rectangle();\nconst scratchRectangleIntersection = new Rectangle();\n/**\n * Determines the type intersection with the polygons of this ClippingPolygonCollection instance and the specified {@link TileBoundingVolume}.\n * @private\n *\n * @param {object} tileBoundingVolume The volume to determine the intersection with the polygons.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid on which the bounding volumes are defined.\n * @returns {Intersect} The intersection type: {@link Intersect.OUTSIDE} if the entire volume is not clipped, {@link Intersect.INSIDE}\n *                      if the entire volume should be clipped, and {@link Intersect.INTERSECTING} if the volume intersects the polygons and will partially clipped.\n */\nClippingPolygonCollection.prototype.computeIntersectionWithBoundingVolume =\n  function (tileBoundingVolume, ellipsoid) {\n    const polygons = this._polygons;\n    const length = polygons.length;\n\n    let intersection = Intersect.OUTSIDE;\n    if (this.inverse) {\n      intersection = Intersect.INSIDE;\n    }\n\n    for (let i = 0; i < length; ++i) {\n      const polygon = polygons[i];\n\n      const polygonBoundingRectangle = polygon.computeRectangle();\n      let tileBoundingRectangle = tileBoundingVolume.rectangle;\n      if (\n        !defined(tileBoundingRectangle) &&\n        defined(tileBoundingVolume.boundingVolume?.computeCorners)\n      ) {\n        const points = tileBoundingVolume.boundingVolume.computeCorners();\n        tileBoundingRectangle = Rectangle.fromCartesianArray(\n          points,\n          ellipsoid,\n          scratchRectangleTile,\n        );\n      }\n\n      if (!defined(tileBoundingRectangle)) {\n        tileBoundingRectangle = Rectangle.fromBoundingSphere(\n          tileBoundingVolume.boundingSphere,\n          ellipsoid,\n          scratchRectangleTile,\n        );\n      }\n\n      const result = Rectangle.simpleIntersection(\n        tileBoundingRectangle,\n        polygonBoundingRectangle,\n        scratchRectangleIntersection,\n      );\n\n      if (defined(result)) {\n        intersection = Intersect.INTERSECTING;\n      }\n    }\n\n    return intersection;\n  };\n\n/**\n * Sets the owner for the input ClippingPolygonCollection if there wasn't another owner.\n * Destroys the owner's previous ClippingPolygonCollection if setting is successful.\n *\n * @param {ClippingPolygonCollection} [clippingPolygonsCollection] A ClippingPolygonCollection (or undefined) being attached to an object\n * @param {object} owner An Object that should receive the new ClippingPolygonCollection\n * @param {string} key The Key for the Object to reference the ClippingPolygonCollection\n * @private\n */\nClippingPolygonCollection.setOwner = function (\n  clippingPolygonsCollection,\n  owner,\n  key,\n) {\n  // Don't destroy the ClippingPolygonCollection if it is already owned by newOwner\n  if (clippingPolygonsCollection === owner[key]) {\n    return;\n  }\n  // Destroy the existing ClippingPolygonCollection, if any\n  owner[key] = owner[key] && owner[key].destroy();\n  if (defined(clippingPolygonsCollection)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (defined(clippingPolygonsCollection._owner)) {\n      throw new DeveloperError(\n        \"ClippingPolygonCollection should only be assigned to one object\",\n      );\n    }\n    //>>includeEnd('debug');\n    clippingPolygonsCollection._owner = owner;\n    owner[key] = clippingPolygonsCollection;\n  }\n};\n\n/**\n * Function for checking if the context will allow clipping polygons, which require floating point textures.\n *\n * @param {Scene|object} scene The scene that will contain clipped objects and clipping textures.\n * @returns {boolean} <code>true</code> if the context supports clipping polygons.\n */\nClippingPolygonCollection.isSupported = function (scene) {\n  return scene?.context.webgl2;\n};\n\n/**\n * Function for getting packed texture resolution.\n * If the ClippingPolygonCollection hasn't been updated, returns the resolution that will be\n * allocated based on the provided needed pixels.\n *\n * @param {Texture} texture The texture to be packed.\n * @param {number} pixelsNeeded The number of pixels needed based on the current polygon count.\n * @param {Cartesian2} result A Cartesian2 for the result.\n * @returns {Cartesian2} The required resolution.\n * @private\n */\nClippingPolygonCollection.getTextureResolution = function (\n  texture,\n  pixelsNeeded,\n  result,\n) {\n  if (defined(texture)) {\n    result.x = texture.width;\n    result.y = texture.height;\n    return result;\n  }\n\n  const maxSize = ContextLimits.maximumTextureSize;\n  result.x = Math.min(pixelsNeeded, maxSize);\n  result.y = Math.ceil(pixelsNeeded / result.x);\n\n  // Allocate twice as much space as needed to avoid frequent texture reallocation.\n  result.y *= 2;\n\n  return result;\n};\n\n/**\n * Function for getting the clipping collection's signed distance texture resolution.\n * If the ClippingPolygonCollection hasn't been updated, returns the resolution that will be\n * allocated based on the current settings\n *\n * @param {ClippingPolygonCollection} clippingPolygonCollection The clipping polygon collection\n * @param {Cartesian2} result A Cartesian2 for the result.\n * @returns {Cartesian2} The required resolution.\n * @private\n */\nClippingPolygonCollection.getClippingDistanceTextureResolution = function (\n  clippingPolygonCollection,\n  result,\n) {\n  const texture = clippingPolygonCollection.signedDistanceTexture;\n  if (defined(texture)) {\n    result.x = texture.width;\n    result.y = texture.height;\n    return result;\n  }\n\n  result.x = Math.min(ContextLimits.maximumTextureSize, 4096);\n  result.y = Math.min(ContextLimits.maximumTextureSize, 4096);\n\n  return result;\n};\n\n/**\n * Function for getting the clipping collection's extents texture resolution.\n * If the ClippingPolygonCollection hasn't been updated, returns the resolution that will be\n * allocated based on the current polygon count.\n *\n * @param {ClippingPolygonCollection} clippingPolygonCollection The clipping polygon collection\n * @param {Cartesian2} result A Cartesian2 for the result.\n * @returns {Cartesian2} The required resolution.\n * @private\n */\nClippingPolygonCollection.getClippingExtentsTextureResolution = function (\n  clippingPolygonCollection,\n  result,\n) {\n  const texture = clippingPolygonCollection.extentsTexture;\n  if (defined(texture)) {\n    result.x = texture.width;\n    result.y = texture.height;\n    return result;\n  }\n\n  return ClippingPolygonCollection.getTextureResolution(\n    texture,\n    clippingPolygonCollection.pixelsNeededForExtents,\n    result,\n  );\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ClippingPolygonCollection#destroy\n */\nClippingPolygonCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * clippingPolygons = clippingPolygons && clippingPolygons.destroy();\n *\n * @see ClippingPolygonCollection#isDestroyed\n */\nClippingPolygonCollection.prototype.destroy = function () {\n  if (defined(this._signedDistanceComputeCommand)) {\n    this._signedDistanceComputeCommand.canceled = true;\n  }\n\n  this._polygonsTexture =\n    this._polygonsTexture && this._polygonsTexture.destroy();\n  this._extentsTexture = this._extentsTexture && this._extentsTexture.destroy();\n  this._signedDistanceTexture =\n    this._signedDistanceTexture && this._signedDistanceTexture.destroy();\n  return destroyObject(this);\n};\n\nexport default ClippingPolygonCollection;\n","import BlendingState from \"./BlendingState.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport CloudType from \"./CloudType.js\";\nimport CloudCollectionFS from \"../Shaders/CloudCollectionFS.js\";\nimport CloudCollectionVS from \"../Shaders/CloudCollectionVS.js\";\nimport CloudNoiseFS from \"../Shaders/CloudNoiseFS.js\";\nimport CloudNoiseVS from \"../Shaders/CloudNoiseVS.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport CumulusCloud from \"./CumulusCloud.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport VertexArrayFacade from \"../Renderer/VertexArrayFacade.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\n\nlet attributeLocations;\nconst scratchTextureDimensions = new Cartesian3();\n\nconst attributeLocationsBatched = {\n  positionHighAndScaleX: 0,\n  positionLowAndScaleY: 1,\n  packedAttribute0: 2, // show, brightness, direction\n  packedAttribute1: 3, // cloudSize, slice\n  color: 4,\n};\n\nconst attributeLocationsInstanced = {\n  direction: 0,\n  positionHighAndScaleX: 1,\n  positionLowAndScaleY: 2,\n  packedAttribute0: 3, // show, brightness\n  packedAttribute1: 4, // cloudSize, slice\n  color: 5,\n};\n\nconst SHOW_INDEX = CumulusCloud.SHOW_INDEX;\nconst POSITION_INDEX = CumulusCloud.POSITION_INDEX;\nconst SCALE_INDEX = CumulusCloud.SCALE_INDEX;\nconst MAXIMUM_SIZE_INDEX = CumulusCloud.MAXIMUM_SIZE_INDEX;\nconst SLICE_INDEX = CumulusCloud.SLICE_INDEX;\nconst BRIGHTNESS_INDEX = CumulusCloud.BRIGHTNESS_INDEX;\nconst NUMBER_OF_PROPERTIES = CumulusCloud.NUMBER_OF_PROPERTIES;\nconst COLOR_INDEX = CumulusCloud.COLOR_INDEX;\n\n/**\n * A renderable collection of clouds in the 3D scene.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/CumulusCloud.png' width='400' height='300' /><br />\n * Example cumulus clouds\n * </div>\n * <br /><br />\n * Clouds are added and removed from the collection using {@link CloudCollection#add}\n * and {@link CloudCollection#remove}.\n * @alias CloudCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.show=true] Whether to display the clouds.\n * @param {number} [options.noiseDetail=16.0] Desired amount of detail in the noise texture.\n * @param {number} [options.noiseOffset=Cartesian3.ZERO] Desired translation of data in noise texture.\n * @param {boolean} [options.debugBillboards=false] For debugging only. Determines if the billboards are rendered with an opaque color.\n * @param {boolean} [options.debugEllipsoids=false] For debugging only. Determines if the clouds will be rendered as opaque ellipsoids.\n * @see CloudCollection#add\n * @see CloudCollection#remove\n * @see CumulusCloud\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=clouds|Cesium Sandcastle Clouds Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?id=cloud-parameters|Cesium Sandcastle Cloud Parameters Demo}\n *\n * @example\n * // Create a cloud collection with two cumulus clouds\n * const clouds = scene.primitives.add(new Cesium.CloudCollection());\n * clouds.add({\n *   position : new Cesium.Cartesian3(1.0, 2.0, 3.0),\n *   maximumSize: new Cesium.Cartesian3(20.0, 12.0, 8.0)\n * });\n * clouds.add({\n *   position : new Cesium.Cartesian3(4.0, 5.0, 6.0),\n *   maximumSize: new Cesium.Cartesian3(15.0, 9.0, 9.0),\n *   slice: 0.5\n * });\n *\n */\nfunction CloudCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._clouds = [];\n  this._cloudsToUpdate = [];\n  this._cloudsToUpdateIndex = 0;\n  this._cloudsRemoved = false;\n  this._createVertexArray = false;\n\n  this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n\n  this._noiseTexture = undefined;\n  this._textureSliceWidth = 128;\n  this._noiseTextureRows = 4;\n\n  /**\n   * <p>\n   * Controls the amount of detail captured in the precomputed noise texture\n   * used to render the cumulus clouds. In order for the texture to be tileable,\n   * this must be a power of two. For best results, set this to be a power of two\n   * between <code>8.0</code> and <code>32.0</code> (inclusive).\n   * </p>\n   *\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'>\n   *   <code>clouds.noiseDetail = 8.0;</code><br/>\n   *   <img src='Images/CloudCollection.noiseDetail8.png' width='250' height='158' />\n   * </td>\n   * <td align='center'>\n   *   <code>clouds.noiseDetail = 32.0;</code><br/>\n   *   <img src='Images/CloudCollection.noiseDetail32.png' width='250' height='158' />\n   * </td>\n   * </tr></table>\n   * </div>\n   *\n   * @type {number}\n   *\n   * @default 16.0\n   */\n  this.noiseDetail = options.noiseDetail ?? 16.0;\n\n  /**\n   * <p>\n   * Applies a translation to noise texture coordinates to generate different data.\n   * This can be modified if the default noise does not generate good-looking clouds.\n   * </p>\n   *\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'>\n   *   <code>default</code><br/>\n   *   <img src='Images/CloudCollection.noiseOffsetdefault.png' width='250' height='158' />\n   * </td>\n   * <td align='center'>\n   *   <code>clouds.noiseOffset = new Cesium.Cartesian3(10, 20, 10);</code><br/>\n   *   <img src='Images/CloudCollection.noiseOffsetx10y20z10.png' width='250' height='158' />\n   * </td>\n   * </tr></table>\n   * </div>\n   * @type {Cartesian3}\n   *\n   * @default Cartesian3.ZERO\n   */\n  this.noiseOffset = Cartesian3.clone(options.noiseOffset ?? Cartesian3.ZERO);\n\n  this._loading = false;\n  this._ready = false;\n\n  const that = this;\n  this._uniforms = {\n    u_noiseTexture: function () {\n      return that._noiseTexture;\n    },\n    u_noiseTextureDimensions: getNoiseTextureDimensions(that),\n    u_noiseDetail: function () {\n      return that.noiseDetail;\n    },\n  };\n\n  this._vaNoise = undefined;\n  this._spNoise = undefined;\n\n  this._spCreated = false;\n  this._sp = undefined;\n  this._rs = undefined;\n\n  /**\n   * Determines if billboards in this collection will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  this._colorCommands = [];\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Renders the billboards with one opaque color for the sake of debugging.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugBillboards = options.debugBillboards ?? false;\n  this._compiledDebugBillboards = false;\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the clouds as opaque, monochrome ellipsoids for the sake of debugging.\n   * If <code>debugBillboards</code> is also true, then the ellipsoids will draw on top of the billboards.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugEllipsoids = options.debugEllipsoids ?? false;\n  this._compiledDebugEllipsoids = false;\n}\n\n// Wraps useful texture metrics into a single vec3 for less overhead.\nfunction getNoiseTextureDimensions(collection) {\n  return function () {\n    scratchTextureDimensions.x = collection._textureSliceWidth;\n    scratchTextureDimensions.y = collection._noiseTextureRows;\n    scratchTextureDimensions.z = 1.0 / collection._noiseTextureRows;\n    return scratchTextureDimensions;\n  };\n}\n\nObject.defineProperties(CloudCollection.prototype, {\n  /**\n   * Returns the number of clouds in this collection.\n   * @memberof CloudCollection.prototype\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      removeClouds(this);\n      return this._clouds.length;\n    },\n  },\n});\n\nfunction destroyClouds(clouds) {\n  const length = clouds.length;\n  for (let i = 0; i < length; ++i) {\n    if (clouds[i]) {\n      clouds[i]._destroy();\n    }\n  }\n}\n\n/**\n * Creates and adds a cloud with the specified initial properties to the collection.\n * The added cloud is returned so it can be modified or removed from the collection later.\n *\n * @param {object}[options] A template describing the cloud's properties as shown in Example 1.\n * @returns {CumulusCloud} The cloud that was added to the collection.\n *\n * @performance Calling <code>add</code> is expected constant time.  However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.  For\n * best performance, add as many clouds as possible before calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Example 1:  Add a cumulus cloud, specifying all the default values.\n * const c = clouds.add({\n *   show : true,\n *   position : Cesium.Cartesian3.ZERO,\n *   scale : new Cesium.Cartesian2(20.0, 12.0),\n *   maximumSize: new Cesium.Cartesian3(20.0, 12.0, 12.0),\n *   slice: -1.0,\n *   cloudType : CloudType.CUMULUS\n * });\n *\n * @example\n * // Example 2:  Specify only the cloud's cartographic position.\n * const c = clouds.add({\n *   position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height)\n * });\n *\n * @see CloudCollection#remove\n * @see CloudCollection#removeAll\n */\nCloudCollection.prototype.add = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const cloudType = options.cloudType ?? CloudType.CUMULUS;\n  //>>includeStart('debug', pragmas.debug);\n  if (!CloudType.validate(cloudType)) {\n    throw new DeveloperError(\"invalid cloud type\");\n  }\n  //>>includeEnd('debug');\n\n  let cloud;\n  if (cloudType === CloudType.CUMULUS) {\n    cloud = new CumulusCloud(options, this);\n    cloud._index = this._clouds.length;\n    this._clouds.push(cloud);\n    this._createVertexArray = true;\n  }\n\n  return cloud;\n};\n\n/**\n * Removes a cloud from the collection.\n *\n * @param {CumulusCloud} cloud The cloud to remove.\n * @returns {boolean} <code>true</code> if the cloud was removed; <code>false</code> if the cloud was not found in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * const c = clouds.add(...);\n * clouds.remove(c);  // Returns true\n *\n * @see CloudCollection#add\n * @see CloudCollection#removeAll\n * @see CumulusCloud#show\n */\nCloudCollection.prototype.remove = function (cloud) {\n  if (this.contains(cloud)) {\n    this._clouds[cloud._index] = undefined; // Removed later in removeClouds()\n    this._cloudsRemoved = true;\n    this._createVertexArray = true;\n    cloud._destroy();\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all clouds from the collection.\n *\n * @performance <code>O(n)</code>.  It is more efficient to remove all the clouds\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * clouds.add(...);\n * clouds.add(...);\n * clouds.removeAll();\n *\n * @see CloudCollection#add\n * @see CloudCollection#remove\n */\nCloudCollection.prototype.removeAll = function () {\n  destroyClouds(this._clouds);\n  this._clouds = [];\n  this._cloudsToUpdate = [];\n  this._cloudsToUpdateIndex = 0;\n  this._cloudsRemoved = false;\n\n  this._createVertexArray = true;\n};\n\nfunction removeClouds(cloudCollection) {\n  if (cloudCollection._cloudsRemoved) {\n    cloudCollection._cloudsRemoved = false;\n\n    const newClouds = [];\n    const clouds = cloudCollection._clouds;\n    const length = clouds.length;\n    for (let i = 0, j = 0; i < length; ++i) {\n      const cloud = clouds[i];\n      if (defined(cloud)) {\n        clouds._index = j++;\n        newClouds.push(cloud);\n      }\n    }\n\n    cloudCollection._clouds = newClouds;\n  }\n}\n\nCloudCollection.prototype._updateCloud = function (cloud, propertyChanged) {\n  if (!cloud._dirty) {\n    this._cloudsToUpdate[this._cloudsToUpdateIndex++] = cloud;\n  }\n\n  ++this._propertiesChanged[propertyChanged];\n};\n\n/**\n * Check whether this collection contains a given cloud.\n *\n * @param {CumulusCloud} [cloud] The cloud to check for.\n * @returns {boolean} true if this collection contains the cloud, false otherwise.\n *\n * @see CloudCollection#get\n */\nCloudCollection.prototype.contains = function (cloud) {\n  return defined(cloud) && cloud._cloudCollection === this;\n};\n\n/**\n * Returns the cloud in the collection at the specified index. Indices are zero-based\n * and increase as clouds are added. Removing a cloud shifts all clouds after\n * it to the left, changing their indices. This function is commonly used with\n * {@link CloudCollection#length} to iterate over all the clouds in the collection.\n *\n * @param {number} index The zero-based index of the cloud.\n * @returns {CumulusCloud} The cloud at the specified index.\n *\n * @performance Expected constant time. If clouds were removed from the collection and\n * {@link CloudCollection#update} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every cloud in the collection\n * const len = clouds.length;\n * for (let i = 0; i < len; ++i) {\n *   const c = clouds.get(i);\n *   c.show = !c.show;\n * }\n *\n * @see CloudCollection#length\n */\nCloudCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  removeClouds(this);\n  return this._clouds[index];\n};\n\nconst texturePositions = new Float32Array([\n  -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0,\n]);\n\nconst textureIndices = new Uint16Array([0, 1, 2, 0, 2, 3]);\n\nfunction createTextureVA(context) {\n  const positionBuffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: texturePositions,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const indexBuffer = Buffer.createIndexBuffer({\n    context: context,\n    typedArray: textureIndices,\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n  });\n\n  const attributes = [\n    {\n      index: 0,\n      vertexBuffer: positionBuffer,\n      componentsPerAttribute: 2,\n      componentDatatype: ComponentDatatype.FLOAT,\n    },\n  ];\n\n  return new VertexArray({\n    context: context,\n    attributes: attributes,\n    indexBuffer: indexBuffer,\n  });\n}\n\nlet getIndexBuffer;\n\nfunction getIndexBufferBatched(context) {\n  const sixteenK = 16 * 1024;\n\n  let indexBuffer = context.cache.cloudCollection_indexBufferBatched;\n  if (defined(indexBuffer)) {\n    return indexBuffer;\n  }\n\n  // Subtract 6 because the last index is reserved for primitive restart.\n  // https://www.khronos.org/registry/webgl/specs/latest/2.0/#5.18\n  const length = sixteenK * 6 - 6;\n  const indices = new Uint16Array(length);\n  for (let i = 0, j = 0; i < length; i += 6, j += 4) {\n    indices[i] = j;\n    indices[i + 1] = j + 1;\n    indices[i + 2] = j + 2;\n\n    indices[i + 3] = j;\n    indices[i + 4] = j + 2;\n    indices[i + 5] = j + 3;\n  }\n\n  indexBuffer = Buffer.createIndexBuffer({\n    context: context,\n    typedArray: indices,\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n  });\n  indexBuffer.vertexArrayDestroyable = false;\n  context.cache.cloudCollection_indexBufferBatched = indexBuffer;\n  return indexBuffer;\n}\n\nfunction getIndexBufferInstanced(context) {\n  let indexBuffer = context.cache.cloudCollection_indexBufferInstanced;\n  if (defined(indexBuffer)) {\n    return indexBuffer;\n  }\n\n  indexBuffer = Buffer.createIndexBuffer({\n    context: context,\n    typedArray: new Uint16Array([0, 1, 2, 0, 2, 3]),\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n  });\n\n  indexBuffer.vertexArrayDestroyable = false;\n  context.cache.cloudCollection_indexBufferInstanced = indexBuffer;\n  return indexBuffer;\n}\n\nfunction getVertexBufferInstanced(context) {\n  let vertexBuffer = context.cache.cloudCollection_vertexBufferInstanced;\n  if (defined(vertexBuffer)) {\n    return vertexBuffer;\n  }\n\n  vertexBuffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: new Float32Array([0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0]),\n    usage: BufferUsage.STATIC_DRAW,\n  });\n\n  vertexBuffer.vertexArrayDestroyable = false;\n  context.cache.cloudCollection_vertexBufferInstanced = vertexBuffer;\n  return vertexBuffer;\n}\n\nfunction createVAF(context, numberOfClouds, instanced) {\n  const attributes = [\n    {\n      index: attributeLocations.positionHighAndScaleX,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: BufferUsage.STATIC_DRAW,\n    },\n    {\n      index: attributeLocations.positionLowAndScaleY,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: BufferUsage.STATIC_DRAW,\n    },\n    {\n      index: attributeLocations.packedAttribute0,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: BufferUsage.STATIC_DRAW,\n    },\n    {\n      index: attributeLocations.packedAttribute1,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      usage: BufferUsage.STATIC_DRAW,\n    },\n    {\n      index: attributeLocations.color,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      normalize: true,\n      usage: BufferUsage.STATIC_DRAW,\n    },\n  ];\n\n  if (instanced) {\n    attributes.push({\n      index: attributeLocations.direction,\n      componentsPerAttribute: 2,\n      componentDatatype: ComponentDatatype.FLOAT,\n      vertexBuffer: getVertexBufferInstanced(context),\n    });\n  }\n\n  const sizeInVertices = instanced ? numberOfClouds : 4 * numberOfClouds;\n  return new VertexArrayFacade(context, attributes, sizeInVertices, instanced);\n}\n\nconst writePositionScratch = new EncodedCartesian3();\n\nfunction writePositionAndScale(cloudCollection, frameState, vafWriters, cloud) {\n  let i;\n  const positionHighWriter =\n    vafWriters[attributeLocations.positionHighAndScaleX];\n  const positionLowWriter = vafWriters[attributeLocations.positionLowAndScaleY];\n  const position = cloud.position;\n\n  EncodedCartesian3.fromCartesian(position, writePositionScratch);\n  const scale = cloud.scale;\n\n  const high = writePositionScratch.high;\n  const low = writePositionScratch.low;\n\n  if (cloudCollection._instanced) {\n    i = cloud._index;\n    positionHighWriter(i, high.x, high.y, high.z, scale.x);\n    positionLowWriter(i, low.x, low.y, low.z, scale.y);\n  } else {\n    i = cloud._index * 4;\n    positionHighWriter(i + 0, high.x, high.y, high.z, scale.x);\n    positionHighWriter(i + 1, high.x, high.y, high.z, scale.x);\n    positionHighWriter(i + 2, high.x, high.y, high.z, scale.x);\n    positionHighWriter(i + 3, high.x, high.y, high.z, scale.x);\n\n    positionLowWriter(i + 0, low.x, low.y, low.z, scale.y);\n    positionLowWriter(i + 1, low.x, low.y, low.z, scale.y);\n    positionLowWriter(i + 2, low.x, low.y, low.z, scale.y);\n    positionLowWriter(i + 3, low.x, low.y, low.z, scale.y);\n  }\n}\n\nfunction writePackedAttribute0(cloudCollection, frameState, vafWriters, cloud) {\n  let i;\n  const writer = vafWriters[attributeLocations.packedAttribute0];\n  const show = cloud.show;\n  const brightness = cloud.brightness;\n\n  if (cloudCollection._instanced) {\n    i = cloud._index;\n    writer(i, show, brightness, 0.0, 0.0);\n  } else {\n    i = cloud._index * 4;\n    writer(i + 0, show, brightness, 0.0, 0.0);\n    writer(i + 1, show, brightness, 1.0, 0.0);\n    writer(i + 2, show, brightness, 1.0, 1.0);\n    writer(i + 3, show, brightness, 0.0, 1.0);\n  }\n}\n\nfunction writePackedAttribute1(cloudCollection, frameState, vafWriters, cloud) {\n  let i;\n  const writer = vafWriters[attributeLocations.packedAttribute1];\n  const maximumSize = cloud.maximumSize;\n  const slice = cloud.slice;\n\n  if (cloudCollection._instanced) {\n    i = cloud._index;\n    writer(i, maximumSize.x, maximumSize.y, maximumSize.z, slice);\n  } else {\n    i = cloud._index * 4;\n    writer(i + 0, maximumSize.x, maximumSize.y, maximumSize.z, slice);\n    writer(i + 1, maximumSize.x, maximumSize.y, maximumSize.z, slice);\n    writer(i + 2, maximumSize.x, maximumSize.y, maximumSize.z, slice);\n    writer(i + 3, maximumSize.x, maximumSize.y, maximumSize.z, slice);\n  }\n}\n\nfunction writeColor(cloudCollection, frameState, vafWriters, cloud) {\n  let i;\n  const writer = vafWriters[attributeLocations.color];\n  const color = cloud.color;\n  const red = Color.floatToByte(color.red);\n  const green = Color.floatToByte(color.green);\n  const blue = Color.floatToByte(color.blue);\n  const alpha = Color.floatToByte(color.alpha);\n\n  if (cloudCollection._instanced) {\n    i = cloud._index;\n    writer(i, red, green, blue, alpha);\n  } else {\n    i = cloud._index * 4;\n    writer(i + 0, red, green, blue, alpha);\n    writer(i + 1, red, green, blue, alpha);\n    writer(i + 2, red, green, blue, alpha);\n    writer(i + 3, red, green, blue, alpha);\n  }\n}\nfunction writeCloud(cloudCollection, frameState, vafWriters, cloud) {\n  writePositionAndScale(cloudCollection, frameState, vafWriters, cloud);\n  writePackedAttribute0(cloudCollection, frameState, vafWriters, cloud);\n  writePackedAttribute1(cloudCollection, frameState, vafWriters, cloud);\n  writeColor(cloudCollection, frameState, vafWriters, cloud);\n}\n\nfunction createNoiseTexture(cloudCollection, frameState, vsSource, fsSource) {\n  const that = cloudCollection;\n\n  const textureSliceWidth = that._textureSliceWidth;\n  const noiseTextureRows = that._noiseTextureRows;\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    textureSliceWidth / noiseTextureRows < 1 ||\n    textureSliceWidth % noiseTextureRows !== 0\n  ) {\n    throw new DeveloperError(\n      \"noiseTextureRows must evenly divide textureSliceWidth\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const context = frameState.context;\n  that._vaNoise = createTextureVA(context);\n  that._spNoise = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vsSource,\n    fragmentShaderSource: fsSource,\n    attributeLocations: {\n      position: 0,\n    },\n  });\n\n  const noiseDetail = that.noiseDetail;\n  const noiseOffset = that.noiseOffset;\n\n  that._noiseTexture = new Texture({\n    context: context,\n    width: (textureSliceWidth * textureSliceWidth) / noiseTextureRows,\n    height: textureSliceWidth * noiseTextureRows,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    pixelFormat: PixelFormat.RGBA,\n    sampler: new Sampler({\n      wrapS: TextureWrap.REPEAT,\n      wrapT: TextureWrap.REPEAT,\n      minificationFilter: TextureMinificationFilter.NEAREST,\n      magnificationFilter: TextureMagnificationFilter.NEAREST,\n    }),\n  });\n\n  const textureCommand = new ComputeCommand({\n    vertexArray: that._vaNoise,\n    shaderProgram: that._spNoise,\n    outputTexture: that._noiseTexture,\n    uniformMap: {\n      u_noiseTextureDimensions: getNoiseTextureDimensions(that),\n      u_noiseDetail: function () {\n        return noiseDetail;\n      },\n      u_noiseOffset: function () {\n        return noiseOffset;\n      },\n    },\n    persists: false,\n    owner: cloudCollection,\n    postExecute: function (texture) {\n      that._ready = true;\n      that._loading = false;\n    },\n  });\n\n  frameState.commandList.push(textureCommand);\n  that._loading = true;\n}\n\nfunction createVertexArray(cloudCollection, frameState) {\n  const that = cloudCollection;\n  const context = frameState.context;\n  that._createVertexArray = false;\n  that._vaf = that._vaf && that._vaf.destroy();\n\n  const clouds = cloudCollection._clouds;\n  const cloudsLength = clouds.length;\n  if (cloudsLength > 0) {\n    that._vaf = createVAF(context, cloudsLength, that._instanced);\n    const vafWriters = that._vaf.writers;\n\n    let i;\n    // Rewrite entire buffer if clouds were added or removed.\n    for (i = 0; i < cloudsLength; ++i) {\n      const cloud = clouds[i];\n      writeCloud(cloudCollection, frameState, vafWriters, cloud);\n    }\n\n    // Different cloud collections share the same index buffer.\n    that._vaf.commit(getIndexBuffer(context));\n  }\n}\n\nconst scratchWriterArray = [];\n\nfunction updateClouds(cloudCollection, frameState) {\n  const context = frameState.context;\n  const that = cloudCollection;\n  const clouds = that._clouds;\n  const cloudsLength = clouds.length;\n  const cloudsToUpdate = that._cloudsToUpdate;\n  const cloudsToUpdateLength = that._cloudsToUpdateIndex;\n\n  const properties = that._propertiesChanged;\n\n  const writers = scratchWriterArray;\n  writers.length = 0;\n\n  if (properties[POSITION_INDEX] || properties[SCALE_INDEX]) {\n    writers.push(writePositionAndScale);\n  }\n\n  if (properties[SHOW_INDEX] || properties[BRIGHTNESS_INDEX]) {\n    writers.push(writePackedAttribute0);\n  }\n\n  if (properties[MAXIMUM_SIZE_INDEX] || properties[SLICE_INDEX]) {\n    writers.push(writePackedAttribute1);\n  }\n\n  if (properties[COLOR_INDEX]) {\n    writers.push(writeColor);\n  }\n\n  const numWriters = writers.length;\n  const vafWriters = that._vaf.writers;\n\n  let i, c, w;\n  if (cloudsToUpdateLength / cloudsLength > 0.1) {\n    // Like BillboardCollection, if more than 10% of clouds change,\n    // rewrite the entire buffer.\n\n    for (i = 0; i < cloudsToUpdateLength; ++i) {\n      c = cloudsToUpdate[i];\n      c._dirty = false;\n\n      for (w = 0; w < numWriters; ++w) {\n        writers[w](cloudCollection, frameState, vafWriters, c);\n      }\n    }\n\n    that._vaf.commit(getIndexBuffer(context));\n  } else {\n    for (i = 0; i < cloudsToUpdateLength; ++i) {\n      c = cloudsToUpdate[i];\n      c._dirty = false;\n\n      for (w = 0; w < numWriters; ++w) {\n        writers[w](cloudCollection, frameState, vafWriters, c);\n      }\n\n      if (that._instanced) {\n        that._vaf.subCommit(c._index, 1);\n      } else {\n        that._vaf.subCommit(c._index * 4, 4);\n      }\n    }\n    that._vaf.endSubCommits();\n  }\n\n  that._cloudsToUpdateIndex = 0;\n}\n\nfunction createShaderProgram(cloudCollection, frameState, vsSource, fsSource) {\n  const context = frameState.context;\n  const that = cloudCollection;\n  const vs = new ShaderSource({\n    defines: [],\n    sources: [vsSource],\n  });\n\n  if (that._instanced) {\n    vs.defines.push(\"INSTANCED\");\n  }\n\n  const fs = new ShaderSource({\n    defines: [],\n    sources: [fsSource],\n  });\n\n  if (that.debugBillboards) {\n    fs.defines.push(\"DEBUG_BILLBOARDS\");\n  }\n\n  if (that.debugEllipsoids) {\n    fs.defines.push(\"DEBUG_ELLIPSOIDS\");\n  }\n\n  that._sp = ShaderProgram.replaceCache({\n    context: context,\n    shaderProgram: that._sp,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n\n  that._rs = RenderState.fromCache({\n    depthTest: {\n      enabled: true,\n      func: WebGLConstants.LESS,\n    },\n    depthMask: false,\n    blending: BlendingState.ALPHA_BLEND,\n  });\n\n  that._spCreated = true;\n  that._compiledDebugBillboards = that.debugBillboards;\n  that._compiledDebugEllipsoids = that.debugEllipsoids;\n}\n\nfunction createDrawCommands(cloudCollection, frameState) {\n  const that = cloudCollection;\n  const pass = frameState.passes;\n  const uniforms = that._uniforms;\n  const commandList = frameState.commandList;\n  if (pass.render) {\n    const colorList = that._colorCommands;\n\n    const va = that._vaf.va;\n    const vaLength = va.length;\n    colorList.length = vaLength;\n    for (let i = 0; i < vaLength; i++) {\n      let command = colorList[i];\n      if (!defined(command)) {\n        command = colorList[i] = new DrawCommand();\n      }\n      command.pass = Pass.TRANSLUCENT;\n      command.owner = cloudCollection;\n      command.uniformMap = uniforms;\n      command.count = va[i].indicesCount;\n      command.vertexArray = va[i].va;\n      command.shaderProgram = that._sp;\n      command.renderState = that._rs;\n      if (that._instanced) {\n        command.count = 6;\n        command.instanceCount = that._clouds.length;\n      }\n\n      commandList.push(command);\n    }\n  }\n}\n\n/**\n * @private\n */\nCloudCollection.prototype.update = function (frameState) {\n  removeClouds(this);\n  if (!this.show) {\n    return;\n  }\n\n  const debugging = this.debugBillboards || this.debugEllipsoids;\n  this._ready = debugging ? true : defined(this._noiseTexture);\n\n  if (!this._ready && !this._loading && !debugging) {\n    createNoiseTexture(this, frameState, CloudNoiseVS, CloudNoiseFS);\n  }\n\n  this._instanced = frameState.context.instancedArrays;\n  attributeLocations = this._instanced\n    ? attributeLocationsInstanced\n    : attributeLocationsBatched;\n  getIndexBuffer = this._instanced\n    ? getIndexBufferInstanced\n    : getIndexBufferBatched;\n\n  const clouds = this._clouds;\n  const cloudsLength = clouds.length;\n  const cloudsToUpdate = this._cloudsToUpdate;\n  const cloudsToUpdateLength = this._cloudsToUpdateIndex;\n\n  if (this._createVertexArray) {\n    createVertexArray(this, frameState);\n  } else if (cloudsToUpdateLength > 0) {\n    // Clouds were modified, but none were added or removed.\n    updateClouds(this, frameState);\n  }\n\n  // If the number of total clouds ever shrinks considerably,\n  // truncate cloudsToUpdate so that we free memory that\n  // we are no longer using.\n  if (cloudsToUpdateLength > cloudsLength * 1.5) {\n    cloudsToUpdate.length = cloudsLength;\n  }\n\n  if (\n    !defined(this._vaf) ||\n    !defined(this._vaf.va) ||\n    !this._ready & !debugging\n  ) {\n    return;\n  }\n\n  if (\n    !this._spCreated ||\n    this.debugBillboards !== this._compiledDebugBillboards ||\n    this.debugEllipsoids !== this._compiledDebugEllipsoids\n  ) {\n    createShaderProgram(this, frameState, CloudCollectionVS, CloudCollectionFS);\n  }\n\n  createDrawCommands(this, frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see CloudCollection#destroy\n */\nCloudCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * clouds = clouds && clouds.destroy();\n *\n * @see CloudCollection#isDestroyed\n */\nCloudCollection.prototype.destroy = function () {\n  this._noiseTexture = this._noiseTexture && this._noiseTexture.destroy();\n  this._sp = this._sp && this._sp.destroy();\n  this._vaf = this._vaf && this._vaf.destroy();\n\n  destroyClouds(this._clouds);\n\n  return destroyObject(this);\n};\n\nexport default CloudCollection;\n","/**\n * Specifies the type of the cloud that is added to a {@link CloudCollection} in {@link CloudCollection#add}.\n *\n * @enum {number}\n */\n\nconst CloudType = {\n  /**\n   * Cumulus cloud.\n   *\n   * @type {number}\n   * @constant\n   */\n  CUMULUS: 0,\n};\n\n/**\n * Validates that the provided cloud type is a valid {@link CloudType}\n *\n * @param {CloudType} cloudType The cloud type to validate.\n * @returns {boolean} <code>true</code> if the provided cloud type is a valid value; otherwise, <code>false</code>.\n *\n * @example\n * if (!Cesium.CloudType.validate(cloudType)) {\n *   throw new Cesium.DeveloperError('cloudType must be a valid value.');\n * }\n */\n\nCloudType.validate = function (cloudType) {\n  return cloudType === CloudType.CUMULUS;\n};\n\nexport default Object.freeze(CloudType);\n","import CesiumMath from \"../Core/Math.js\";\n\n/**\n * Defines different modes for blending between a target color and a primitive's source color.\n *\n * HIGHLIGHT multiplies the source color by the target color\n * REPLACE replaces the source color with the target color\n * MIX blends the source color and target color together\n *\n * @enum {number}\n *\n * @see Model.colorBlendMode\n */\nconst ColorBlendMode = {\n  HIGHLIGHT: 0,\n  REPLACE: 1,\n  MIX: 2,\n};\n\n/**\n * @private\n */\nColorBlendMode.getColorBlend = function (colorBlendMode, colorBlendAmount) {\n  if (colorBlendMode === ColorBlendMode.HIGHLIGHT) {\n    return 0.0;\n  } else if (colorBlendMode === ColorBlendMode.REPLACE) {\n    return 1.0;\n  } else if (colorBlendMode === ColorBlendMode.MIX) {\n    // The value 0.0 is reserved for highlight, so clamp to just above 0.0.\n    return CesiumMath.clamp(colorBlendAmount, CesiumMath.EPSILON4, 1.0);\n  }\n};\nexport default Object.freeze(ColorBlendMode);\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport getMagic from \"../Core/getMagic.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Composite|Composite}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Composite3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Composite3DTileContent(tileset, tile, resource, contents) {\n  this._tileset = tileset;\n  this._tile = tile;\n  this._resource = resource;\n\n  if (!defined(contents)) {\n    contents = [];\n  }\n  this._contents = contents;\n\n  this._metadata = undefined;\n  this._group = undefined;\n  this._ready = false;\n}\n\nObject.defineProperties(Composite3DTileContent.prototype, {\n  featurePropertiesDirty: {\n    get: function () {\n      const contents = this._contents;\n      const length = contents.length;\n      for (let i = 0; i < length; ++i) {\n        if (contents[i].featurePropertiesDirty) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    set: function (value) {\n      const contents = this._contents;\n      const length = contents.length;\n      for (let i = 0; i < length; ++i) {\n        contents[i].featurePropertiesDirty = value;\n      }\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Composite3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>featuresLength</code> for a tile in the composite.\n   * @memberof Composite3DTileContent.prototype\n   */\n  featuresLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Composite3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>pointsLength</code> for a tile in the composite.\n   * @memberof Composite3DTileContent.prototype\n   */\n  pointsLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Composite3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>trianglesLength</code> for a tile in the composite.\n   * @memberof Composite3DTileContent.prototype\n   */\n  trianglesLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Composite3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>geometryByteLength</code> for a tile in the composite.\n   * @memberof Composite3DTileContent.prototype\n   */\n  geometryByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.   <code>Composite3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>texturesByteLength</code> for a tile in the composite.\n   * @memberof Composite3DTileContent.prototype\n   */\n  texturesByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Composite3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>batchTableByteLength</code> for a tile in the composite.\n   * @memberof Composite3DTileContent.prototype\n   */\n  batchTableByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return this._contents;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Composite3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  url: {\n    get: function () {\n      return this._resource.getUrlComponent(true);\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n   * both stores the content metadata and propagates the content metadata to all of its children.\n   * @memberof Composite3DTileContent.prototype\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n    set: function (value) {\n      this._metadata = value;\n      const contents = this._contents;\n      const length = contents.length;\n      for (let i = 0; i < length; ++i) {\n        contents[i].metadata = value;\n      }\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n   * always returns <code>undefined</code>.  Instead call <code>batchTable</code> for a tile in the composite.\n   * @memberof Composite3DTileContent.prototype\n   */\n  batchTable: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Composite3DTileContent</code>\n   * both stores the group metadata and propagates the group metadata to all of its children.\n   * @memberof Composite3DTileContent.prototype\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  group: {\n    get: function () {\n      return this._group;\n    },\n    set: function (value) {\n      this._group = value;\n      const contents = this._contents;\n      const length = contents.length;\n      for (let i = 0; i < length; ++i) {\n        contents[i].group = value;\n      }\n    },\n  },\n});\n\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nComposite3DTileContent.fromTileType = async function (\n  tileset,\n  tile,\n  resource,\n  arrayBuffer,\n  byteOffset,\n  factory,\n) {\n  byteOffset = byteOffset ?? 0;\n\n  const uint8Array = new Uint8Array(arrayBuffer);\n  const view = new DataView(arrayBuffer);\n  byteOffset += sizeOfUint32; // Skip magic\n\n  const version = view.getUint32(byteOffset, true);\n  if (version !== 1) {\n    throw new RuntimeError(\n      `Only Composite Tile version 1 is supported. Version ${version} is not.`,\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  // Skip byteLength\n  byteOffset += sizeOfUint32;\n\n  const tilesLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  // For caching purposes, models within the composite tile must be\n  // distinguished. To do this, add a query parameter ?compositeIndex=i.\n  // Since composite tiles may contain other composite tiles, check for an\n  // existing prefix and separate them with underscores. e.g.\n  // ?compositeIndex=0_1_1\n  let prefix = resource.queryParameters.compositeIndex;\n  if (defined(prefix)) {\n    // We'll be adding another value at the end, so add an underscore.\n    prefix = `${prefix}_`;\n  } else {\n    // no prefix\n    prefix = \"\";\n  }\n\n  const promises = [];\n  promises.length = tilesLength;\n  for (let i = 0; i < tilesLength; ++i) {\n    const tileType = getMagic(uint8Array, byteOffset);\n\n    // Tile byte length is stored after magic and version\n    const tileByteLength = view.getUint32(byteOffset + sizeOfUint32 * 2, true);\n\n    const contentFactory = factory[tileType];\n\n    // Label which content within the composite this is\n    const compositeIndex = `${prefix}${i}`;\n    const childResource = resource.getDerivedResource({\n      queryParameters: {\n        compositeIndex: compositeIndex,\n      },\n    });\n\n    if (defined(contentFactory)) {\n      promises[i] = Promise.resolve(\n        contentFactory(tileset, tile, childResource, arrayBuffer, byteOffset),\n      );\n    } else {\n      throw new RuntimeError(\n        `Unknown tile content type, ${tileType}, inside Composite tile`,\n      );\n    }\n\n    byteOffset += tileByteLength;\n  }\n\n  const innerContents = await Promise.all(promises);\n  const content = new Composite3DTileContent(\n    tileset,\n    tile,\n    resource,\n    innerContents,\n  );\n  return content;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Composite3DTileContent</code>\n * always returns <code>false</code>.  Instead call <code>hasProperty</code> for a tile in the composite.\n */\nComposite3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Composite3DTileContent</code>\n * always returns <code>undefined</code>.  Instead call <code>getFeature</code> for a tile in the composite.\n */\nComposite3DTileContent.prototype.getFeature = function (batchId) {\n  return undefined;\n};\n\nComposite3DTileContent.prototype.applyDebugSettings = function (\n  enabled,\n  color,\n) {\n  const contents = this._contents;\n  const length = contents.length;\n  for (let i = 0; i < length; ++i) {\n    contents[i].applyDebugSettings(enabled, color);\n  }\n};\n\nComposite3DTileContent.prototype.applyStyle = function (style) {\n  const contents = this._contents;\n  const length = contents.length;\n  for (let i = 0; i < length; ++i) {\n    contents[i].applyStyle(style);\n  }\n};\n\nComposite3DTileContent.prototype.update = function (tileset, frameState) {\n  const contents = this._contents;\n  const length = contents.length;\n  let ready = true;\n  for (let i = 0; i < length; ++i) {\n    contents[i].update(tileset, frameState);\n    ready = ready && contents[i].ready;\n  }\n\n  if (!this._ready && ready) {\n    this._ready = true;\n  }\n};\n\n/**\n * Find an intersection between a ray and the tile content surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nComposite3DTileContent.prototype.pick = function (ray, frameState, result) {\n  if (!this._ready) {\n    return undefined;\n  }\n\n  let intersection;\n  let minDistance = Number.POSITIVE_INFINITY;\n  const contents = this._contents;\n  const length = contents.length;\n\n  for (let i = 0; i < length; ++i) {\n    const candidate = contents[i].pick(ray, frameState, result);\n\n    if (!defined(candidate)) {\n      continue;\n    }\n\n    const distance = Cartesian3.distance(ray.origin, candidate);\n    if (distance < minDistance) {\n      intersection = candidate;\n      minDistance = distance;\n    }\n  }\n\n  if (!defined(intersection)) {\n    return undefined;\n  }\n\n  return result;\n};\n\nComposite3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nComposite3DTileContent.prototype.destroy = function () {\n  const contents = this._contents;\n  const length = contents.length;\n  for (let i = 0; i < length; ++i) {\n    contents[i].destroy();\n  }\n  return destroyObject(this);\n};\nexport default Composite3DTileContent;\n","import addAllToArray from \"../Core/addAllToArray.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport Expression from \"./Expression.js\";\n\n/**\n * An expression for a style applied to a {@link Cesium3DTileset}.\n * <p>\n * Evaluates a conditions expression defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}.\n * </p>\n * <p>\n * Implements the {@link StyleExpression} interface.\n * </p>\n *\n * @alias ConditionsExpression\n * @constructor\n *\n * @param {object} [conditionsExpression] The conditions expression defined using the 3D Tiles Styling language.\n * @param {object} [defines] Defines in the style.\n *\n * @example\n * const expression = new Cesium.ConditionsExpression({\n *     conditions : [\n *         ['${Area} > 10, 'color(\"#FF0000\")'],\n *         ['${id} !== \"1\"', 'color(\"#00FF00\")'],\n *         ['true', 'color(\"#FFFFFF\")']\n *     ]\n * });\n * expression.evaluateColor(feature, result); // returns a Cesium.Color object\n */\nfunction ConditionsExpression(conditionsExpression, defines) {\n  this._conditionsExpression = clone(conditionsExpression, true);\n  this._conditions = conditionsExpression.conditions;\n  this._runtimeConditions = undefined;\n\n  setRuntime(this, defines);\n}\n\nObject.defineProperties(ConditionsExpression.prototype, {\n  /**\n   * Gets the conditions expression defined in the 3D Tiles Styling language.\n   *\n   * @memberof ConditionsExpression.prototype\n   *\n   * @type {object}\n   * @readonly\n   *\n   * @default undefined\n   */\n  conditionsExpression: {\n    get: function () {\n      return this._conditionsExpression;\n    },\n  },\n});\n\nfunction Statement(condition, expression) {\n  this.condition = condition;\n  this.expression = expression;\n}\n\nfunction setRuntime(expression, defines) {\n  const runtimeConditions = [];\n  const conditions = expression._conditions;\n  if (!defined(conditions)) {\n    return;\n  }\n  const length = conditions.length;\n  for (let i = 0; i < length; ++i) {\n    const statement = conditions[i];\n    const cond = String(statement[0]);\n    const condExpression = String(statement[1]);\n    runtimeConditions.push(\n      new Statement(\n        new Expression(cond, defines),\n        new Expression(condExpression, defines),\n      ),\n    );\n  }\n  expression._runtimeConditions = runtimeConditions;\n}\n\n/**\n * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of\n * the expression in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}\n * is of type <code>Boolean</code>, <code>Number</code>, or <code>String</code>, the corresponding JavaScript\n * primitive type will be returned. If the result is a <code>RegExp</code>, a Javascript <code>RegExp</code>\n * object will be returned. If the result is a <code>Cartesian2</code>, <code>Cartesian3</code>, or <code>Cartesian4</code>,\n * a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the <code>result</code> argument is\n * a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned.\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {object} [result] The object onto which to store the result.\n * @returns {boolean|number|string|RegExp|Cartesian2|Cartesian3|Cartesian4|Color} The result of evaluating the expression.\n */\nConditionsExpression.prototype.evaluate = function (feature, result) {\n  const conditions = this._runtimeConditions;\n  if (!defined(conditions)) {\n    return undefined;\n  }\n  const length = conditions.length;\n  for (let i = 0; i < length; ++i) {\n    const statement = conditions[i];\n    if (statement.condition.evaluate(feature)) {\n      return statement.expression.evaluate(feature, result);\n    }\n  }\n};\n\n/**\n * Evaluates the result of a Color expression, using the values defined by a feature.\n * <p>\n * This is equivalent to {@link ConditionsExpression#evaluate} but always returns a {@link Color} object.\n * </p>\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Color} [result] The object in which to store the result\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nConditionsExpression.prototype.evaluateColor = function (feature, result) {\n  const conditions = this._runtimeConditions;\n  if (!defined(conditions)) {\n    return undefined;\n  }\n  const length = conditions.length;\n  for (let i = 0; i < length; ++i) {\n    const statement = conditions[i];\n    if (statement.condition.evaluate(feature)) {\n      return statement.expression.evaluateColor(feature, result);\n    }\n  }\n};\n\n/**\n * Gets the shader function for this expression.\n * Returns undefined if the shader function can't be generated from this expression.\n *\n * @param {string} functionSignature Signature of the generated function.\n * @param {object} variableSubstitutionMap Maps variable names to shader variable names.\n * @param {object} shaderState Stores information about the generated shader function, including whether it is translucent.\n * @param {string} returnType The return type of the generated function.\n *\n * @returns {string} The shader function.\n *\n * @private\n */\nConditionsExpression.prototype.getShaderFunction = function (\n  functionSignature,\n  variableSubstitutionMap,\n  shaderState,\n  returnType,\n) {\n  const conditions = this._runtimeConditions;\n  if (!defined(conditions) || conditions.length === 0) {\n    return undefined;\n  }\n\n  let shaderFunction = \"\";\n  const length = conditions.length;\n  for (let i = 0; i < length; ++i) {\n    const statement = conditions[i];\n\n    const condition = statement.condition.getShaderExpression(\n      variableSubstitutionMap,\n      shaderState,\n    );\n    const expression = statement.expression.getShaderExpression(\n      variableSubstitutionMap,\n      shaderState,\n    );\n\n    // Build the if/else chain from the list of conditions\n    shaderFunction +=\n      `    ${i === 0 ? \"if\" : \"else if\"} (${condition})\\n` +\n      `    {\\n` +\n      `        return ${expression};\\n` +\n      `    }\\n`;\n  }\n\n  shaderFunction =\n    `${returnType} ${functionSignature}\\n` +\n    `{\\n${shaderFunction}    return ${returnType}(1.0);\\n` + // Return a default value if no conditions are met\n    `}\\n`;\n\n  return shaderFunction;\n};\n\n/**\n * Gets the variables used by the expression.\n *\n * @returns {string[]} The variables used by the expression.\n *\n * @private\n */\nConditionsExpression.prototype.getVariables = function () {\n  let variables = [];\n\n  const conditions = this._runtimeConditions;\n  if (!defined(conditions) || conditions.length === 0) {\n    return variables;\n  }\n\n  const length = conditions.length;\n  for (let i = 0; i < length; ++i) {\n    const statement = conditions[i];\n    addAllToArray(variables, statement.condition.getVariables());\n    addAllToArray(variables, statement.expression.getVariables());\n  }\n\n  // Remove duplicates\n  variables = variables.filter(function (variable, index, variables) {\n    return variables.indexOf(variable) === index;\n  });\n\n  return variables;\n};\n\nexport default ConditionsExpression;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\nconst defaultAngle = CesiumMath.toRadians(30.0);\n\n/**\n * A ParticleEmitter that emits particles within a cone.\n * Particles will be positioned at the tip of the cone and have initial velocities going towards the base.\n *\n * @alias ConeEmitter\n * @constructor\n *\n * @param {number} [angle=Cesium.Math.toRadians(30.0)] The angle of the cone in radians.\n */\nfunction ConeEmitter(angle) {\n  this._angle = angle ?? defaultAngle;\n}\n\nObject.defineProperties(ConeEmitter.prototype, {\n  /**\n   * The angle of the cone in radians.\n   * @memberof CircleEmitter.prototype\n   * @type {number}\n   * @default Cesium.Math.toRadians(30.0)\n   */\n  angle: {\n    get: function () {\n      return this._angle;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n      this._angle = value;\n    },\n  },\n});\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize\n */\nConeEmitter.prototype.emit = function (particle) {\n  const radius = Math.tan(this._angle);\n\n  // Compute a random point on the cone's base\n  const theta = CesiumMath.randomBetween(0.0, CesiumMath.TWO_PI);\n  const rad = CesiumMath.randomBetween(0.0, radius);\n\n  const x = rad * Math.cos(theta);\n  const y = rad * Math.sin(theta);\n  const z = 1.0;\n\n  particle.velocity = Cartesian3.fromElements(x, y, z, particle.velocity);\n  Cartesian3.normalize(particle.velocity, particle.velocity);\n  particle.position = Cartesian3.clone(Cartesian3.ZERO, particle.position);\n};\nexport default ConeEmitter;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport MetadataEntity from \"./MetadataEntity.js\";\n\n/**\n * Metadata about the content of a 3D Tile. This represents the content metadata JSON (3D Tiles 1.1)\n * or the <code>3DTILES_metadata</code> extension on a single {@link Cesium3DTileContent}\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.content Either the content metadata JSON (3D Tiles 1.1) or the extension JSON attached to the content.\n * @param {MetadataClass} options.class The class that the content metadata conforms to.\n *\n * @alias ContentMetadata\n * @constructor\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ContentMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const content = options.content;\n  const metadataClass = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.content\", content);\n  Check.typeOf.object(\"options.class\", metadataClass);\n  //>>includeEnd('debug');\n\n  this._class = metadataClass;\n  this._properties = content.properties;\n  this._extensions = content.extensions;\n  this._extras = content.extras;\n}\n\nObject.defineProperties(ContentMetadata.prototype, {\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof ContentMetadata.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof ContentMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof ContentMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Returns whether the content has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the content has this property.\n * @private\n */\nContentMetadata.prototype.hasProperty = function (propertyId) {\n  return MetadataEntity.hasProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Returns whether the content has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the content has a property with the given semantic.\n * @private\n */\nContentMetadata.prototype.hasPropertyBySemantic = function (semantic) {\n  return MetadataEntity.hasPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nContentMetadata.prototype.getPropertyIds = function (results) {\n  return MetadataEntity.getPropertyIds(this._properties, this._class, results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the content does not have this property.\n * @private\n */\nContentMetadata.prototype.getProperty = function (propertyId) {\n  return MetadataEntity.getProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nContentMetadata.prototype.setProperty = function (propertyId, value) {\n  return MetadataEntity.setProperty(\n    propertyId,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the content does not have this semantic.\n * @private\n */\nContentMetadata.prototype.getPropertyBySemantic = function (semantic) {\n  return MetadataEntity.getPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nContentMetadata.prototype.setPropertyBySemantic = function (semantic, value) {\n  return MetadataEntity.setPropertyBySemantic(\n    semantic,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\nexport default ContentMetadata;\n","import AssociativeArray from \"../Core/AssociativeArray.js\";\nimport buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Uri from \"urijs\";\n\nconst mobileWidth = 576;\nconst lightboxHeight = 100;\nconst textColor = \"#ffffff\";\nconst highlightColor = \"#48b\";\n\n/**\n * Used to sort the credits by frequency of appearance\n * when they are later displayed.\n *\n * @alias CreditDisplay.CreditDisplayElement\n * @constructor\n *\n * @private\n */\nfunction CreditDisplayElement(credit, count) {\n  this.credit = credit;\n  this.count = count ?? 1;\n}\n\nfunction contains(credits, credit) {\n  const len = credits.length;\n  for (let i = 0; i < len; i++) {\n    const existingCredit = credits[i];\n    if (Credit.equals(existingCredit, credit)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction swapCesiumCredit(creditDisplay) {\n  // We don't want to clutter the screen with the Cesium logo and the Cesium ion\n  // logo at the same time. Since the ion logo is required, we just replace the\n  // Cesium logo or add the logo if the Cesium one was removed.\n  const previousCredit = creditDisplay._previousCesiumCredit;\n  const currentCredit = creditDisplay._currentCesiumCredit;\n  if (Credit.equals(currentCredit, previousCredit)) {\n    return;\n  }\n\n  if (defined(previousCredit)) {\n    creditDisplay._cesiumCreditContainer.removeChild(previousCredit.element);\n  }\n  if (defined(currentCredit)) {\n    creditDisplay._cesiumCreditContainer.appendChild(currentCredit.element);\n  }\n\n  creditDisplay._previousCesiumCredit = currentCredit;\n}\n\nconst delimiterClassName = \"cesium-credit-delimiter\";\n\nfunction createDelimiterElement(delimiter) {\n  const delimiterElement = document.createElement(\"span\");\n  delimiterElement.textContent = delimiter;\n  delimiterElement.className = delimiterClassName;\n  return delimiterElement;\n}\n\nfunction createCreditElement(element, elementWrapperTagName) {\n  // may need to wrap the credit in another element\n  if (defined(elementWrapperTagName)) {\n    const wrapper = document.createElement(elementWrapperTagName);\n    wrapper._creditId = element._creditId;\n    wrapper.appendChild(element);\n    element = wrapper;\n  }\n  return element;\n}\n\nfunction displayCredits(container, credits, delimiter, elementWrapperTagName) {\n  const childNodes = container.childNodes;\n  let domIndex = -1;\n\n  // Sort the credits such that more frequent credits appear first\n  credits.sort(function (credit1, credit2) {\n    return credit2.count - credit1.count;\n  });\n\n  for (let creditIndex = 0; creditIndex < credits.length; ++creditIndex) {\n    const credit = credits[creditIndex].credit;\n    if (defined(credit)) {\n      domIndex = creditIndex;\n      if (defined(delimiter)) {\n        // credits may be separated by delimiters\n        domIndex *= 2;\n        if (creditIndex > 0) {\n          const delimiterDomIndex = domIndex - 1;\n          if (childNodes.length <= delimiterDomIndex) {\n            container.appendChild(createDelimiterElement(delimiter));\n          } else {\n            const existingDelimiter = childNodes[delimiterDomIndex];\n            if (existingDelimiter.className !== delimiterClassName) {\n              container.replaceChild(\n                createDelimiterElement(delimiter),\n                existingDelimiter,\n              );\n            }\n          }\n        }\n      }\n\n      const element = credit.element;\n\n      // check to see if the correct credit is in the right place\n      if (childNodes.length <= domIndex) {\n        container.appendChild(\n          createCreditElement(element, elementWrapperTagName),\n        );\n      } else {\n        const existingElement = childNodes[domIndex];\n        if (existingElement._creditId !== credit._id) {\n          // not the right credit, swap it in\n          container.replaceChild(\n            createCreditElement(element, elementWrapperTagName),\n            existingElement,\n          );\n        }\n      }\n    }\n  }\n\n  // any remaining nodes in the container are unnecessary\n  ++domIndex;\n  while (domIndex < childNodes.length) {\n    container.removeChild(childNodes[domIndex]);\n  }\n}\n\nfunction styleLightboxContainer(that) {\n  const lightboxCredits = that._lightboxCredits;\n  const width = that.viewport.clientWidth;\n  const height = that.viewport.clientHeight;\n  if (width !== that._lastViewportWidth) {\n    if (width < mobileWidth) {\n      lightboxCredits.className =\n        \"cesium-credit-lightbox cesium-credit-lightbox-mobile\";\n      lightboxCredits.style.marginTop = \"0\";\n    } else {\n      lightboxCredits.className =\n        \"cesium-credit-lightbox cesium-credit-lightbox-expanded\";\n      lightboxCredits.style.marginTop = `${Math.floor(\n        (height - lightboxCredits.clientHeight) * 0.5,\n      )}px`;\n    }\n    that._lastViewportWidth = width;\n  }\n\n  if (width >= mobileWidth && height !== that._lastViewportHeight) {\n    lightboxCredits.style.marginTop = `${Math.floor(\n      (height - lightboxCredits.clientHeight) * 0.5,\n    )}px`;\n    that._lastViewportHeight = height;\n  }\n}\n\nfunction appendCss(container) {\n  const style = /*css*/ `\n.cesium-credit-lightbox-overlay {\n  display: none;\n  z-index: 1;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(80, 80, 80, 0.8);\n}\n\n.cesium-credit-lightbox {\n  background-color: #303336;\n  color: ${textColor};\n  position: relative;\n  min-height: ${lightboxHeight}px;\n  margin: auto;\n}\n.cesium-credit-lightbox > ul > li a,\n.cesium-credit-lightbox > ul > li a:visited,\n.cesium-credit-wrapper a,\n.cesium-credit-wrapper a:visited {\n  color: ${textColor};\n}\n.cesium-credit-lightbox > ul > li a:hover {\n  color: ${highlightColor};\n}\n.cesium-credit-lightbox.cesium-credit-lightbox-expanded {\n  border: 1px solid #444;\n  border-radius: 5px;\n  max-width: 470px;\n}\n.cesium-credit-lightbox.cesium-credit-lightbox-mobile {\n  height: 100%;\n  width: 100%;\n}\n.cesium-credit-lightbox-title {\n  padding: 20px 20px 0 20px;\n}\n.cesium-credit-lightbox-close {\n  font-size: 18pt;\n  cursor: pointer;\n  position: absolute;\n  top: 0;\n  right: 6px;\n  color: ${textColor};\n}\n.cesium-credit-lightbox-close:hover {\n  color: ${highlightColor};\n}\n.cesium-credit-lightbox > ul {\n  margin: 0;\n  padding: 12px 20px 12px 40px;\n  font-size: 13px;\n}\n.cesium-credit-lightbox > ul > li {\n  padding-bottom: 6px;\n}\n.cesium-credit-lightbox > ul > li * {\n  padding: 0;\n  margin: 0;\n}\n\n.cesium-credit-expand-link {\n  padding-left: 5px;\n  cursor: pointer;\n  text-decoration: underline;\n  color: ${textColor};\n}\n.cesium-credit-expand-link:hover {\n  color: ${highlightColor};\n}\n\n.cesium-credit-text {\n  color: ${textColor};\n}\n\n.cesium-credit-delimiter {\n  padding: 0 5px;\n}\n\n.cesium-credit-textContainer *,\n.cesium-credit-logoContainer * {\n  display: inline;\n}\n\n.cesium-credit-textContainer a:hover {\n  color: ${highlightColor}\n}\n\n.cesium-credit-textContainer .cesium-credit-wrapper:first-of-type {\n  padding-left: 5px;\n}\n`;\n\n  function getShadowRoot(container) {\n    if (container.shadowRoot) {\n      return container.shadowRoot;\n    }\n    if (container.getRootNode) {\n      const root = container.getRootNode();\n      if (root instanceof ShadowRoot) {\n        return root;\n      }\n    }\n    return undefined;\n  }\n\n  const shadowRootOrDocumentHead = getShadowRoot(container) ?? document.head;\n  const styleElem = document.createElement(\"style\");\n  styleElem.innerHTML = style;\n  shadowRootOrDocumentHead.appendChild(styleElem);\n}\n\n/**\n * The credit display is responsible for displaying credits on screen.\n *\n * @param {HTMLElement} container The HTML element where credits will be displayed\n * @param {string} [delimiter= '•'] The string to separate text credits\n * @param {HTMLElement} [viewport=document.body] The HTML element that will contain the credits popup\n *\n * @alias CreditDisplay\n * @constructor\n *\n * @example\n * // Add a credit with a tooltip, image and link to display onscreen\n * const credit = new Cesium.Credit(`<a href=\"https://cesium.com/\" target=\"_blank\"><img src=\"/images/cesium_logo.png\" title=\"Cesium\"/></a>`, true);\n * viewer.creditDisplay.addStaticCredit(credit);\n *\n * @example\n * // Add a credit with a plaintext link to display in the lightbox\n * const credit = new Cesium.Credit('<a href=\"https://cesium.com/\" target=\"_blank\">Cesium</a>');\n * viewer.creditDisplay.addStaticCredit(credit);\n */\nfunction CreditDisplay(container, delimiter, viewport) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"container\", container);\n  //>>includeEnd('debug');\n  const that = this;\n\n  viewport = viewport ?? document.body;\n\n  const lightbox = document.createElement(\"div\");\n  lightbox.className = \"cesium-credit-lightbox-overlay\";\n  viewport.appendChild(lightbox);\n\n  const lightboxCredits = document.createElement(\"div\");\n  lightboxCredits.className = \"cesium-credit-lightbox\";\n  lightbox.appendChild(lightboxCredits);\n\n  function hideLightbox(event) {\n    if (lightboxCredits.contains(event.target)) {\n      return;\n    }\n    that.hideLightbox();\n  }\n  lightbox.addEventListener(\"click\", hideLightbox, false);\n\n  const title = document.createElement(\"div\");\n  title.className = \"cesium-credit-lightbox-title\";\n  title.textContent = \"Data provided by:\";\n  lightboxCredits.appendChild(title);\n\n  const closeButton = document.createElement(\"a\");\n  closeButton.onclick = this.hideLightbox.bind(this);\n  closeButton.innerHTML = \"&times;\";\n  closeButton.className = \"cesium-credit-lightbox-close\";\n  lightboxCredits.appendChild(closeButton);\n\n  const creditList = document.createElement(\"ul\");\n  lightboxCredits.appendChild(creditList);\n\n  const cesiumCreditContainer = document.createElement(\"div\");\n  cesiumCreditContainer.className = \"cesium-credit-logoContainer\";\n  cesiumCreditContainer.style.display = \"inline\";\n  container.appendChild(cesiumCreditContainer);\n\n  const screenContainer = document.createElement(\"div\");\n  screenContainer.className = \"cesium-credit-textContainer\";\n  screenContainer.style.display = \"inline\";\n  container.appendChild(screenContainer);\n\n  const expandLink = document.createElement(\"a\");\n  expandLink.className = \"cesium-credit-expand-link\";\n  expandLink.onclick = this.showLightbox.bind(this);\n  expandLink.textContent = \"Data attribution\";\n  container.appendChild(expandLink);\n\n  appendCss(container);\n  const cesiumCredit = Credit.clone(CreditDisplay.cesiumCredit);\n\n  this._delimiter = delimiter ?? \"•\";\n  this._screenContainer = screenContainer;\n  this._cesiumCreditContainer = cesiumCreditContainer;\n  this._lastViewportHeight = undefined;\n  this._lastViewportWidth = undefined;\n  this._lightboxCredits = lightboxCredits;\n  this._creditList = creditList;\n  this._lightbox = lightbox;\n  this._hideLightbox = hideLightbox;\n  this._expandLink = expandLink;\n  this._expanded = false;\n  this._staticCredits = [];\n  this._cesiumCredit = cesiumCredit;\n  this._previousCesiumCredit = undefined;\n  this._currentCesiumCredit = cesiumCredit;\n  this._creditDisplayElementPool = [];\n  this._creditDisplayElementIndex = 0;\n\n  this._currentFrameCredits = {\n    screenCredits: new AssociativeArray(),\n    lightboxCredits: new AssociativeArray(),\n  };\n\n  this._defaultCredit = undefined;\n\n  this.viewport = viewport;\n\n  /**\n   * The HTML element where credits will be displayed.\n   * @type {HTMLElement}\n   */\n  this.container = container;\n}\n\nfunction setCredit(creditDisplay, credits, credit, count) {\n  count = count ?? 1;\n  let creditDisplayElement = credits.get(credit.id);\n  if (!defined(creditDisplayElement)) {\n    const pool = creditDisplay._creditDisplayElementPool;\n    const poolIndex = creditDisplay._creditDisplayElementPoolIndex;\n    if (poolIndex < pool.length) {\n      creditDisplayElement = pool[poolIndex];\n      creditDisplayElement.credit = credit;\n      creditDisplayElement.count = count;\n    } else {\n      creditDisplayElement = new CreditDisplayElement(credit, count);\n      pool.push(creditDisplayElement);\n    }\n    ++creditDisplay._creditDisplayElementPoolIndex;\n    credits.set(credit.id, creditDisplayElement);\n  } else if (creditDisplayElement.count < Number.MAX_VALUE) {\n    creditDisplayElement.count += count;\n  }\n}\n\n/**\n * Adds a {@link Credit} that will show on screen or in the lightbox until\n * the next frame. This is mostly for internal use. Use {@link CreditDisplay.addStaticCredit} to add a persistent credit to the screen.\n *\n * @see CreditDisplay.addStaticCredit\n *\n * @param {Credit} credit The credit to display in the next frame.\n */\nCreditDisplay.prototype.addCreditToNextFrame = function (credit) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"credit\", credit);\n  //>>includeEnd('debug');\n\n  if (credit.isIon()) {\n    // If this is the an ion logo credit from the ion server\n    // Just use the default credit (which is identical) to avoid blinking\n    if (!defined(this._defaultCredit)) {\n      this._defaultCredit = Credit.clone(getDefaultCredit());\n    }\n    this._currentCesiumCredit = this._defaultCredit;\n    return;\n  }\n\n  let credits;\n  if (!credit.showOnScreen) {\n    credits = this._currentFrameCredits.lightboxCredits;\n  } else {\n    credits = this._currentFrameCredits.screenCredits;\n  }\n\n  setCredit(this, credits, credit);\n};\n\n/**\n * Adds a {@link Credit} that will show on screen or in the lightbox until removed with {@link CreditDisplay.removeStaticCredit}.\n *\n * @param {Credit} credit The credit to added\n *\n * @example\n * // Add a credit with a tooltip, image and link to display onscreen\n * const credit = new Cesium.Credit(`<a href=\"https://cesium.com/\" target=\"_blank\"><img src=\"/images/cesium_logo.png\" title=\"Cesium\"/></a>`, true);\n * viewer.creditDisplay.addStaticCredit(credit);\n *\n * @example\n * // Add a credit with a plaintext link to display in the lightbox\n * const credit = new Cesium.Credit('<a href=\"https://cesium.com/\" target=\"_blank\">Cesium</a>');\n * viewer.creditDisplay.addStaticCredit(credit);\n */\nCreditDisplay.prototype.addStaticCredit = function (credit) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"credit\", credit);\n  //>>includeEnd('debug');\n\n  const staticCredits = this._staticCredits;\n  if (!contains(staticCredits, credit)) {\n    staticCredits.push(credit);\n  }\n};\n\n/**\n * Removes a static credit shown on screen or in the lightbox.\n *\n * @param {Credit} credit The credit to be removed.\n */\nCreditDisplay.prototype.removeStaticCredit = function (credit) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"credit\", credit);\n  //>>includeEnd('debug');\n\n  const staticCredits = this._staticCredits;\n  const index = staticCredits.indexOf(credit);\n  if (index !== -1) {\n    staticCredits.splice(index, 1);\n  }\n};\n\n/**\n * @private\n */\nCreditDisplay.prototype.showLightbox = function () {\n  this._lightbox.style.display = \"block\";\n  this._expanded = true;\n};\n\n/**\n * @private\n */\nCreditDisplay.prototype.hideLightbox = function () {\n  this._lightbox.style.display = \"none\";\n  this._expanded = false;\n};\n\n/**\n * Updates the credit display before a new frame is rendered.\n */\nCreditDisplay.prototype.update = function () {\n  if (this._expanded) {\n    styleLightboxContainer(this);\n  }\n};\n\n/**\n * Resets the credit display to a beginning of frame state, clearing out current credits.\n */\nCreditDisplay.prototype.beginFrame = function () {\n  const currentFrameCredits = this._currentFrameCredits;\n  this._creditDisplayElementPoolIndex = 0;\n\n  const screenCredits = currentFrameCredits.screenCredits;\n  const lightboxCredits = currentFrameCredits.lightboxCredits;\n\n  screenCredits.removeAll();\n  lightboxCredits.removeAll();\n\n  const staticCredits = this._staticCredits;\n  for (let i = 0; i < staticCredits.length; ++i) {\n    const staticCredit = staticCredits[i];\n    const creditCollection = staticCredit.showOnScreen\n      ? screenCredits\n      : lightboxCredits;\n\n    if (\n      staticCredit.isIon() &&\n      Credit.equals(CreditDisplay.cesiumCredit, this._cesiumCredit)\n    ) {\n      // If this is an ion logo credit from the ion server,\n      // make sure to de-duplicate with the default ion credit\n      continue;\n    }\n\n    setCredit(this, creditCollection, staticCredit, Number.MAX_VALUE);\n  }\n\n  if (!Credit.equals(CreditDisplay.cesiumCredit, this._cesiumCredit)) {\n    this._cesiumCredit = Credit.clone(CreditDisplay.cesiumCredit);\n  }\n  this._currentCesiumCredit = this._cesiumCredit;\n};\n\n/**\n * Sets the credit display to the end of frame state, displaying credits from the last frame in the credit container.\n */\nCreditDisplay.prototype.endFrame = function () {\n  const screenCredits = this._currentFrameCredits.screenCredits.values;\n  displayCredits(\n    this._screenContainer,\n    screenCredits,\n    this._delimiter,\n    undefined,\n  );\n\n  const lightboxCredits = this._currentFrameCredits.lightboxCredits.values;\n  this._expandLink.style.display =\n    lightboxCredits.length > 0 ? \"inline\" : \"none\";\n  displayCredits(this._creditList, lightboxCredits, undefined, \"li\");\n\n  swapCesiumCredit(this);\n};\n\n/**\n * Destroys the resources held by this object.  Destroying an object allows for deterministic\n * release of resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nCreditDisplay.prototype.destroy = function () {\n  this._lightbox.removeEventListener(\"click\", this._hideLightbox, false);\n\n  this.container.removeChild(this._cesiumCreditContainer);\n  this.container.removeChild(this._screenContainer);\n  this.container.removeChild(this._expandLink);\n  this.viewport.removeChild(this._lightbox);\n\n  return destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nCreditDisplay.prototype.isDestroyed = function () {\n  return false;\n};\n\nCreditDisplay._cesiumCredit = undefined;\nCreditDisplay._cesiumCreditInitialized = false;\n\nlet defaultCredit;\nfunction getDefaultCredit() {\n  if (!defined(defaultCredit)) {\n    let logo = buildModuleUrl(\"Assets/Images/ion-credit.png\");\n\n    // When hosting in a WebView, the base URL scheme is file:// or ms-appx-web://\n    // which is stripped out from the Credit's <img> tag; use the full path instead\n    if (\n      logo.indexOf(\"http://\") !== 0 &&\n      logo.indexOf(\"https://\") !== 0 &&\n      logo.indexOf(\"data:\") !== 0\n    ) {\n      const logoUrl = new Uri(logo);\n      logo = logoUrl.path();\n    }\n\n    defaultCredit = new Credit(\n      `<a href=\"https://cesium.com/\" target=\"_blank\"><img src=\"${logo}\" style=\"vertical-align: -7px\" title=\"Cesium ion\"/></a>`,\n      true,\n    );\n  }\n\n  if (!CreditDisplay._cesiumCreditInitialized) {\n    CreditDisplay._cesiumCredit = defaultCredit;\n    CreditDisplay._cesiumCreditInitialized = true;\n  }\n  return defaultCredit;\n}\n\nObject.defineProperties(CreditDisplay, {\n  /**\n   * Gets or sets the Cesium logo credit.\n   * @memberof CreditDisplay\n   * @type {Credit}\n   */\n  cesiumCredit: {\n    get: function () {\n      getDefaultCredit();\n      return CreditDisplay._cesiumCredit;\n    },\n    set: function (value) {\n      CreditDisplay._cesiumCredit = value;\n      CreditDisplay._cesiumCreditInitialized = true;\n    },\n  },\n});\n\nCreditDisplay.CreditDisplayElement = CreditDisplayElement;\nexport default CreditDisplay;\n","import BoxGeometry from \"../Core/BoxGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport loadCubeMap from \"../Renderer/loadCubeMap.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport SkyBoxFS from \"../Shaders/SkyBoxFS.js\";\nimport SkyBoxVS from \"../Shaders/SkyBoxVS.js\";\nimport CubeMapPanoramaVS from \"../Shaders/CubeMapPanoramaVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport Credit from \"../Core/Credit.js\";\n\n/**\n * @typedef {object} CubeMapPanorama.ConstructorOptions\n *\n * Initialization options for the CubeMapPanorama constructor\n *\n * @property {object} [options.sources] The source URL or <code>Image</code> object for each of the six cube map faces.  See the example below.\n * @property {Matrix4} [options.transform] A 4x4 transformation matrix that defines the panorama’s position and orientation\n * @property {boolean} [options.show=true] Determines if this primitive will be shown.\n * @property {Credit|string} [options.credit] A credit for the panorama, which is displayed on the canvas.\n *\n */\n\n/**\n * A {@link Panorama} that displays imagery in cube map format in a scene.\n * <p>\n * This is only supported in 3D.  The cube map panorama is faded out when morphing to 2D or Columbus view.  The size of\n * the cube map panorama must not exceed {@link Scene#maximumSkyBoxSize}.\n * </p>\n *\n * @alias CubeMapPanorama\n * @constructor\n *\n * @param {CubeMapPanorama.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * const modelMatrix = Cesium.Matrix4.getMatrix3(\n *   Cesium.Transforms.localFrameToFixedFrameGenerator(\"north\", \"down\")(\n *     Cesium.Cartesian3.fromDegrees(longitude, latitude, height),\n *     Cesium.Ellipsoid.default\n *   ),\n *   new Cesium.Matrix3()\n * );\n *\n *\n * scene.primitives.add(new Cesium.CubeMapPanorama({\n *   sources : {\n *     positiveX : 'cubemap_px.png',\n *     negativeX : 'cubemap_nx.png',\n *     positiveY : 'cubemap_py.png',\n *     negativeY : 'cubemap_ny.png',\n *     positiveZ : 'cubemap_pz.png',\n *     negativeZ : 'cubemap_nz.png'\n *   }\n *   transform: modelMatrix,\n * }));\n *\n * @see SkyBox\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=panorama|Cesium Sandcastle Panorama}\n */\nfunction CubeMapPanorama(options) {\n  /**\n   * The sources used to create the cube map faces: an object\n   * with <code>positiveX</code>, <code>negativeX</code>, <code>positiveY</code>,\n   * <code>negativeY</code>, <code>positiveZ</code>, and <code>negativeZ</code> properties.\n   * These can be either URLs or <code>Image</code> objects.\n   *\n   * @type {object}\n   * @default undefined\n   */\n  this.sources = options.sources;\n  this._sources = undefined;\n\n  this._transform = options.transform ?? undefined;\n\n  /**\n   * Determines if the cube map panorama will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  this._returnCommand = options.returnCommand ?? false;\n  this._addToPanoramaCommandList = !this._returnCommand;\n\n  this._command = new DrawCommand({\n    modelMatrix: Matrix4.clone(Matrix4.IDENTITY),\n    owner: this,\n    // render before everything else\n    pass: Pass.ENVIRONMENT,\n  });\n  this._cubeMap = undefined;\n\n  this._attributeLocations = undefined;\n  this._useHdr = undefined;\n  this._hasError = false;\n  this._error = undefined;\n\n  // Credit specified by the user.\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n}\n\nObject.defineProperties(CubeMapPanorama.prototype, {\n  /**\n   * Gets the transform of the panorama.\n   * @memberof CubeMapPanorama.prototype\n   * @type {Matrix4}\n   * @readonly\n   */\n  transform: {\n    get: function () {\n      return this._transform;\n    },\n  },\n\n  /**\n   * Gets the credits of the panorama.\n   * @memberof CubeMapPanorama.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return defined(this._credit) ? this._credit : undefined;\n    },\n  },\n});\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\n * @exception {DeveloperError} this.sources properties must all be the same type.\n */\nCubeMapPanorama.prototype.update = function (frameState, useHdr) {\n  const that = this;\n  const { mode, passes, context, panoramaCommandList } = frameState;\n\n  if (!this.show) {\n    return undefined;\n  }\n\n  if (mode !== SceneMode.SCENE3D && mode !== SceneMode.MORPHING) {\n    return undefined;\n  }\n\n  // The cube map panorama is only rendered during the render pass; it is not pickable, it doesn't cast shadows, etc.\n  if (!passes.render) {\n    return undefined;\n  }\n\n  // Throw any errors that had previously occurred asynchronously so they aren't\n  // ignored when running.  See https://github.com/CesiumGS/cesium/pull/12307\n  if (this._hasError) {\n    const error = this._error;\n    this._hasError = false;\n    this._error = undefined;\n    throw error;\n  }\n\n  if (this._sources !== this.sources) {\n    this._sources = this.sources;\n    const sources = this.sources;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"this.sources\", sources);\n    if (\n      Object.values(CubeMap.FaceName).some(\n        (faceName) => !defined(sources[faceName]),\n      )\n    ) {\n      throw new DeveloperError(\n        \"this.sources must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\",\n      );\n    }\n\n    const sourceType = typeof sources.positiveX;\n    if (\n      Object.values(CubeMap.FaceName).some(\n        (faceName) => typeof sources[faceName] !== sourceType,\n      )\n    ) {\n      throw new DeveloperError(\n        \"this.sources properties must all be the same type.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    if (typeof sources.positiveX === \"string\") {\n      // Given urls for cube-map images.  Load them.\n      loadCubeMap(context, this._sources)\n        .then(function (cubeMap) {\n          that._cubeMap = that._cubeMap && that._cubeMap.destroy();\n          that._cubeMap = cubeMap;\n        })\n        .catch((error) => {\n          // Defer throwing the error until the next call to update to prevent\n          // test from failing in `afterAll` if this is rejected after the test\n          // using the Skybox ends.  See https://github.com/CesiumGS/cesium/pull/12307\n          this._hasError = true;\n          this._error = error;\n        });\n    } else {\n      this._cubeMap = this._cubeMap && this._cubeMap.destroy();\n      this._cubeMap = new CubeMap({\n        context: context,\n        source: sources,\n      });\n    }\n    this._addToPanoramaCommandList = true;\n  }\n\n  const command = this._command;\n\n  if (!defined(command.vertexArray)) {\n    command.uniformMap = {\n      u_cubeMap: function () {\n        return that._cubeMap;\n      },\n      u_cubeMapPanoramaTransform: function () {\n        return that._transform;\n      },\n    };\n\n    const geometry = BoxGeometry.createGeometry(\n      BoxGeometry.fromDimensions({\n        dimensions: new Cartesian3(2.0, 2.0, 2.0),\n        vertexFormat: VertexFormat.POSITION_ONLY,\n      }),\n    );\n    const attributeLocations = (this._attributeLocations =\n      GeometryPipeline.createAttributeLocations(geometry));\n\n    command.vertexArray = VertexArray.fromGeometry({\n      context: context,\n      geometry: geometry,\n      attributeLocations: attributeLocations,\n      bufferUsage: BufferUsage.STATIC_DRAW,\n    });\n\n    // no depth test/write\n    command.renderState = RenderState.fromCache({\n      depthTest: { enabled: false },\n      depthMask: false,\n      blending: BlendingState.ALPHA_BLEND,\n    });\n    this._addToPanoramaCommandList = true;\n  }\n\n  if (!defined(command.shaderProgram) || this._useHdr !== useHdr) {\n    const fs = new ShaderSource({\n      defines: [useHdr ? \"HDR\" : \"\"],\n      sources: [SkyBoxFS],\n    });\n    command.shaderProgram = ShaderProgram.fromCache({\n      context: context,\n      //vertexShaderSource: SkyBoxVS,\n      vertexShaderSource: defined(this._transform)\n        ? CubeMapPanoramaVS\n        : SkyBoxVS,\n      fragmentShaderSource: fs,\n      attributeLocations: this._attributeLocations,\n    });\n    this._useHdr = useHdr;\n    this._addToPanoramaCommandList = true;\n  }\n\n  if (!defined(this._cubeMap)) {\n    return undefined;\n  }\n\n  if (this.show && defined(this._credit) && !this._returnCommand) {\n    const creditDisplay = frameState.creditDisplay;\n    creditDisplay.addCreditToNextFrame(this._credit);\n  }\n\n  if (this._returnCommand) {\n    return command;\n  }\n\n  if (this._addToPanoramaCommandList) {\n    panoramaCommandList.push(command);\n    this._addToPanoramaCommandList = false;\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see CubeMapPanorama#destroy\n */\nCubeMapPanorama.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * cubeMapPanorama = cubeMapPanorama && cubeMapPanorama.destroy();\n *\n * @see CubeMapPanorama#isDestroyed\n */\nCubeMapPanorama.prototype.destroy = function () {\n  const command = this._command;\n  command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n  command.shaderProgram =\n    command.shaderProgram && command.shaderProgram.destroy();\n  this._cubeMap = this._cubeMap && this._cubeMap.destroy();\n  return destroyObject(this);\n};\n\nexport default CubeMapPanorama;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines which triangles, if any, are culled.\n *\n * @enum {number}\n */\nconst CullFace = {\n  /**\n   * Front-facing triangles are culled.\n   *\n   * @type {number}\n   * @constant\n   */\n  FRONT: WebGLConstants.FRONT,\n\n  /**\n   * Back-facing triangles are culled.\n   *\n   * @type {number}\n   * @constant\n   */\n  BACK: WebGLConstants.BACK,\n\n  /**\n   * Both front-facing and back-facing triangles are culled.\n   *\n   * @type {number}\n   * @constant\n   */\n  FRONT_AND_BACK: WebGLConstants.FRONT_AND_BACK,\n};\nexport default Object.freeze(CullFace);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * <div class=\"notice\">\n * A cloud is created and its initial properties are set by calling {@link CloudCollection#add}.\n * and {@link CloudCollection#remove}. Do not call the constructor directly.\n * </div>\n * A cumulus cloud billboard positioned in the 3D scene, that is created and rendered using a {@link CloudCollection}.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/CumulusCloud.png' width='400' height='300' /><br />\n * Example cumulus clouds\n * </div>\n * @alias CumulusCloud\n *\n * @performance Similar to {@link Billboard}, reading a property, e.g., {@link CumulusCloud#show},\n * takes constant time. Assigning to a property is constant time but results in\n * CPU to GPU traffic when {@link CloudCollection#update} is called.  The per-cloud traffic is\n * the same regardless of how many properties were updated.  If most clouds in a collection need to be\n * updated, it may be more efficient to clear the collection with {@link CloudCollection#removeAll}\n * and add new clouds instead of modifying each one.\n *\n * @see CloudCollection\n * @see CloudCollection#add\n *\n * @internalConstructor\n * @class\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=cloud-parameters|Cesium Sandcastle Cloud Parameters Demo}\n */\nfunction CumulusCloud(options, cloudCollection) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  this._show = options.show ?? true;\n\n  this._position = Cartesian3.clone(options.position ?? Cartesian3.ZERO);\n\n  if (!defined(options.scale) && defined(options.maximumSize)) {\n    this._maximumSize = Cartesian3.clone(options.maximumSize);\n    this._scale = new Cartesian2(this._maximumSize.x, this._maximumSize.y);\n  } else {\n    this._scale = Cartesian2.clone(options.scale ?? new Cartesian2(20.0, 12.0));\n\n    const defaultMaxSize = new Cartesian3(\n      this._scale.x,\n      this._scale.y,\n      Math.min(this._scale.x, this._scale.y) / 1.5,\n    );\n    this._maximumSize = Cartesian3.clone(options.maximumSize ?? defaultMaxSize);\n  }\n\n  this._slice = options.slice ?? -1.0;\n  this._color = Color.clone(options.color ?? Color.WHITE);\n  this._brightness = options.brightness ?? 1.0;\n  this._cloudCollection = cloudCollection;\n  this._index = -1; // Used by CloudCollection\n}\n\nconst SHOW_INDEX = (CumulusCloud.SHOW_INDEX = 0);\nconst POSITION_INDEX = (CumulusCloud.POSITION_INDEX = 1);\nconst SCALE_INDEX = (CumulusCloud.SCALE_INDEX = 2);\nconst MAXIMUM_SIZE_INDEX = (CumulusCloud.MAXIMUM_SIZE_INDEX = 3);\nconst SLICE_INDEX = (CumulusCloud.SLICE_INDEX = 4);\nconst BRIGHTNESS_INDEX = (CumulusCloud.BRIGHTNESS_INDEX = 5);\nconst COLOR_INDEX = (CumulusCloud.COLOR_INDEX = 6);\nCumulusCloud.NUMBER_OF_PROPERTIES = 7;\n\nfunction makeDirty(cloud, propertyChanged) {\n  const cloudCollection = cloud._cloudCollection;\n  if (defined(cloudCollection)) {\n    cloudCollection._updateCloud(cloud, propertyChanged);\n    cloud._dirty = true;\n  }\n}\n\nObject.defineProperties(CumulusCloud.prototype, {\n  /**\n   * Determines if this cumulus cloud will be shown.  Use this to hide or show a cloud, instead\n   * of removing it and re-adding it to the collection.\n   * @memberof CumulusCloud.prototype\n   * @type {boolean}\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._show !== value) {\n        this._show = value;\n        makeDirty(this, SHOW_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the Cartesian position of this cumulus cloud.\n   * @memberof CumulusCloud.prototype\n   * @type {Cartesian3}\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const position = this._position;\n      if (!Cartesian3.equals(position, value)) {\n        Cartesian3.clone(value, position);\n        makeDirty(this, POSITION_INDEX);\n      }\n    },\n  },\n\n  /**\n   * <p>Gets or sets the scale of the cumulus cloud billboard in meters.\n   * The <code>scale</code> property will affect the size of the billboard,\n   * but not the cloud's actual appearance.</p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'>\n   *   <code>cloud.scale = new Cesium.Cartesian2(12, 8);</code><br/>\n   *   <img src='Images/CumulusCloud.scalex12y8.png' width='250' height='158' />\n   * </td>\n   * <td align='center'>\n   *   <code>cloud.scale = new Cesium.Cartesian2(24, 10);</code><br/>\n   *   <img src='Images/CumulusCloud.scalex24y10.png' width='250' height='158' />\n   * </td>\n   * </tr></table>\n   * </div>\n   *\n   * <p>To modify the cloud's appearance, modify its <code>maximumSize</code>\n   * and <code>slice</code> properties.</p>\n   * @memberof CumulusCloud.prototype\n   * @type {Cartesian2}\n   *\n   * @see CumulusCloud#maximumSize\n   * @see CumulusCloud#slice\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const scale = this._scale;\n      if (!Cartesian2.equals(scale, value)) {\n        Cartesian2.clone(value, scale);\n        makeDirty(this, SCALE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * <p>Gets or sets the maximum size of the cumulus cloud rendered on the billboard.\n   * This defines a maximum ellipsoid volume that the cloud can appear in.\n   * Rather than guaranteeing a specific size, this specifies a boundary for the\n   * cloud to appear in, and changing it can affect the shape of the cloud.</p>\n   * <p>Changing the z-value of <code>maximumSize</code> has the most dramatic effect\n   * on the cloud's appearance because it changes the depth of the cloud, and thus the\n   * positions at which the cloud-shaping texture is sampled.</p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'>\n   * <tr>\n   *   <td align='center'>\n   *     <code>cloud.maximumSize = new Cesium.Cartesian3(14, 9, 10);</code><br/>\n   *     <img src='Images/CumulusCloud.maximumSizex14y9z10.png' width='250' height='158' />\n   *   </td>\n   *   <td align='center'>\n   *     <code>cloud.maximumSize.x = 25;</code><br/>\n   *     <img src='Images/CumulusCloud.maximumSizex25.png' width='250' height='158' />\n   *   </td>\n   * </tr>\n   * <tr>\n   *   <td align='center'>\n   *     <code>cloud.maximumSize.y = 5;</code><br/>\n   *     <img src='Images/CumulusCloud.maximumSizey5.png' width='250' height='158' />\n   *   </td>\n   *   <td align='center'>\n   *     <code>cloud.maximumSize.z = 17;</code><br/>\n   *     <img src='Images/CumulusCloud.maximumSizez17.png' width='250' height='158' />\n   *   </td>\n   * </tr>\n   * </table>\n   * </div>\n   *\n   * <p>To modify the billboard's actual size, modify the cloud's <code>scale</code> property.</p>\n   * @memberof CumulusCloud.prototype\n   * @type {Cartesian3}\n   *\n   * @see CumulusCloud#scale\n   */\n  maximumSize: {\n    get: function () {\n      return this._maximumSize;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const maximumSize = this._maximumSize;\n      if (!Cartesian3.equals(maximumSize, value)) {\n        Cartesian3.clone(value, maximumSize);\n        makeDirty(this, MAXIMUM_SIZE_INDEX);\n      }\n    },\n  },\n  /**\n   * Sets the color of the cloud\n   * @memberof CumulusCloud.prototype\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  color: {\n    get: function () {\n      return this._color;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.object(\"value\", value);\n      //>>includeEnd('debug');\n\n      const color = this._color;\n      if (!Color.equals(color, value)) {\n        Color.clone(value, color);\n        makeDirty(this, COLOR_INDEX);\n      }\n    },\n  },\n  /**\n   * <p>Gets or sets the \"slice\" of the cloud that is rendered on the billboard, i.e.\n   * the specific cross-section of the cloud chosen for the billboard's appearance.\n   * Given a value between 0 and 1, the slice specifies how deeply into the cloud\n   * to intersect based on its maximum size in the z-direction.</p>\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>cloud.slice = 0.32;</code><br/><img src='Images/CumulusCloud.slice0.32.png' width='250' height='158' /></td>\n   * <td align='center'><code>cloud.slice = 0.5;</code><br/><img src='Images/CumulusCloud.slice0.5.png' width='250' height='158' /></td>\n   * <td align='center'><code>cloud.slice = 0.6;</code><br/><img src='Images/CumulusCloud.slice0.6.png' width='250' height='158' /></td>\n   * </tr></table>\n   * </div>\n   *\n   * <br />\n   * <p>Due to the nature in which this slice is calculated,\n   * values below <code>0.2</code> may result in cross-sections that are too small,\n   * and the edge of the ellipsoid will be visible. Similarly, values above <code>0.7</code>\n   * will cause the cloud to appear smaller. Values outside the range <code>[0.1, 0.9]</code>\n   * should be avoided entirely because they do not produce desirable results.</p>\n   *\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>cloud.slice = 0.08;</code><br/><img src='Images/CumulusCloud.slice0.08.png' width='250' height='158' /></td>\n   * <td align='center'><code>cloud.slice = 0.8;</code><br/><img src='Images/CumulusCloud.slice0.8.png' width='250' height='158' /></td>\n   * </tr></table>\n   * </div>\n   *\n   * <p>If <code>slice</code> is set to a negative number, the cloud will not render a cross-section.\n   * Instead, it will render the outside of the ellipsoid that is visible. For clouds with\n   * small values of `maximumSize.z`, this can produce good-looking results, but for larger\n   * clouds, this can result in a cloud that is undesirably warped to the ellipsoid volume.</p>\n   *\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'>\n   *  <code>cloud.slice = -1.0;<br/>cloud.maximumSize.z = 18;</code><br/>\n   *  <img src='Images/CumulusCloud.slice-1z18.png' width='250' height='158' />\n   * </td>\n   * <td align='center'>\n   *   <code>cloud.slice = -1.0;<br/>cloud.maximumSize.z = 30;</code><br/>\n   *   <img src='Images/CumulusCloud.slice-1z30.png' width='250' height='158' /></td>\n   * </tr></table>\n   * </div>\n   *\n   * @memberof CumulusCloud.prototype\n   * @type {number}\n   * @default -1.0\n   */\n  slice: {\n    get: function () {\n      return this._slice;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      const slice = this._slice;\n      if (slice !== value) {\n        this._slice = value;\n        makeDirty(this, SLICE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the brightness of the cloud. This can be used to give clouds\n   * a darker, grayer appearance.\n   * <br /><br />\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>cloud.brightness = 1.0;</code><br/><img src='Images/CumulusCloud.brightness1.png' width='250' height='158' /></td>\n   * <td align='center'><code>cloud.brightness = 0.6;</code><br/><img src='Images/CumulusCloud.brightness0.6.png' width='250' height='158' /></td>\n   * <td align='center'><code>cloud.brightness = 0.0;</code><br/><img src='Images/CumulusCloud.brightness0.png' width='250' height='158' /></td>\n   * </tr></table>\n   * </div>\n   * @memberof CumulusCloud.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  brightness: {\n    get: function () {\n      return this._brightness;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      const brightness = this._brightness;\n      if (brightness !== value) {\n        this._brightness = value;\n        makeDirty(this, BRIGHTNESS_INDEX);\n      }\n    },\n  },\n});\n\nCumulusCloud.prototype._destroy = function () {\n  this._cloudCollection = undefined;\n};\n\nexport default CumulusCloud;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Appearance from \"./Appearance.js\";\n\n/**\n * Visualizes a vertex attribute by displaying it as a color for debugging.\n * <p>\n * Components for well-known unit-length vectors, i.e., <code>normal</code>,\n * <code>tangent</code>, and <code>bitangent</code>, are scaled and biased\n * from [-1.0, 1.0] to (-1.0, 1.0).\n * </p>\n *\n * @alias DebugAppearance\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.attributeName The name of the attribute to visualize.\n * @param {boolean} [options.perInstanceAttribute=false] Boolean that determines whether this attribute is a per-instance geometry attribute.\n * @param {string} [options.glslDatatype='vec3'] The GLSL datatype of the attribute.  Supported datatypes are <code>float</code>, <code>vec2</code>, <code>vec3</code>, and <code>vec4</code>.\n * @param {string} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {string} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {object} [options.renderState] Optional render state to override the default render state.\n *\n * @exception {DeveloperError} options.glslDatatype must be float, vec2, vec3, or vec4.\n *\n * @example\n * const primitive = new Cesium.Primitive({\n *   geometryInstances : // ...\n *   appearance : new Cesium.DebugAppearance({\n *     attributeName : 'normal'\n *   })\n * });\n */\nfunction DebugAppearance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const attributeName = options.attributeName;\n  let perInstanceAttribute = options.perInstanceAttribute;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(attributeName)) {\n    throw new DeveloperError(\"options.attributeName is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(perInstanceAttribute)) {\n    perInstanceAttribute = false;\n  }\n\n  let glslDatatype = options.glslDatatype ?? \"vec3\";\n  const varyingName = `v_${attributeName}`;\n  let getColor;\n\n  // Well-known normalized vector attributes in VertexFormat\n  if (\n    attributeName === \"normal\" ||\n    attributeName === \"tangent\" ||\n    attributeName === \"bitangent\"\n  ) {\n    getColor = `vec4 getColor() { return vec4((${varyingName} + vec3(1.0)) * 0.5, 1.0); }\\n`;\n  } else {\n    // All other attributes, both well-known and custom\n    if (attributeName === \"st\") {\n      glslDatatype = \"vec2\";\n    }\n\n    switch (glslDatatype) {\n      case \"float\":\n        getColor = `vec4 getColor() { return vec4(vec3(${varyingName}), 1.0); }\\n`;\n        break;\n      case \"vec2\":\n        getColor = `vec4 getColor() { return vec4(${varyingName}, 0.0, 1.0); }\\n`;\n        break;\n      case \"vec3\":\n        getColor = `vec4 getColor() { return vec4(${varyingName}, 1.0); }\\n`;\n        break;\n      case \"vec4\":\n        getColor = `vec4 getColor() { return ${varyingName}; }\\n`;\n        break;\n      //>>includeStart('debug', pragmas.debug);\n      default:\n        throw new DeveloperError(\n          \"options.glslDatatype must be float, vec2, vec3, or vec4.\",\n        );\n      //>>includeEnd('debug');\n    }\n  }\n\n  const vs =\n    `${\n      \"in vec3 position3DHigh;\\n\" +\n      \"in vec3 position3DLow;\\n\" +\n      \"in float batchId;\\n\"\n    }${\n      perInstanceAttribute ? \"\" : `in ${glslDatatype} ${attributeName};\\n`\n    }out ${glslDatatype} ${varyingName};\\n` +\n    `void main()\\n` +\n    `{\\n` +\n    `vec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow);\\n${\n      perInstanceAttribute\n        ? `${varyingName} = czm_batchTable_${attributeName}(batchId);\\n`\n        : `${varyingName} = ${attributeName};\\n`\n    }gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n` +\n    `}`;\n  const fs =\n    `in ${glslDatatype} ${varyingName};\\n${getColor}\\n` +\n    `void main()\\n` +\n    `{\\n` +\n    `out_FragColor = getColor();\\n` +\n    `}`;\n\n  /**\n   * This property is part of the {@link Appearance} interface, but is not\n   * used by {@link DebugAppearance} since a fully custom fragment shader is used.\n   *\n   * @type Material\n   *\n   * @default undefined\n   */\n  this.material = undefined;\n\n  /**\n   * When <code>true</code>, the geometry is expected to appear translucent.\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.translucent = options.translucent ?? false;\n\n  this._vertexShaderSource = options.vertexShaderSource ?? vs;\n  this._fragmentShaderSource = options.fragmentShaderSource ?? fs;\n  this._renderState = Appearance.getDefaultRenderState(\n    false,\n    false,\n    options.renderState,\n  );\n  this._closed = options.closed ?? false;\n\n  // Non-derived members\n\n  this._attributeName = attributeName;\n  this._glslDatatype = glslDatatype;\n}\n\nObject.defineProperties(DebugAppearance.prototype, {\n  /**\n   * The GLSL source code for the vertex shader.\n   *\n   * @memberof DebugAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      return this._vertexShaderSource;\n    },\n  },\n\n  /**\n   * The GLSL source code for the fragment shader.  The full fragment shader\n   * source is built procedurally taking into account the {@link DebugAppearance#material}.\n   * Use {@link DebugAppearance#getFragmentShaderSource} to get the full source.\n   *\n   * @memberof DebugAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n\n  /**\n   * The WebGL fixed-function state to use when rendering the geometry.\n   *\n   * @memberof DebugAppearance.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be closed.\n   *\n   * @memberof DebugAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  closed: {\n    get: function () {\n      return this._closed;\n    },\n  },\n\n  /**\n   * The name of the attribute being visualized.\n   *\n   * @memberof DebugAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  attributeName: {\n    get: function () {\n      return this._attributeName;\n    },\n  },\n\n  /**\n   * The GLSL datatype of the attribute being visualized.\n   *\n   * @memberof DebugAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  glslDatatype: {\n    get: function () {\n      return this._glslDatatype;\n    },\n  },\n});\n\n/**\n * Returns the full GLSL fragment shader source, which for {@link DebugAppearance} is just\n * {@link DebugAppearance#fragmentShaderSource}.\n *\n * @function\n *\n * @returns {string} The full GLSL fragment shader source.\n */\nDebugAppearance.prototype.getFragmentShaderSource =\n  Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link DebugAppearance#translucent}.\n *\n * @function\n *\n * @returns {boolean} <code>true</code> if the appearance is translucent.\n */\nDebugAppearance.prototype.isTranslucent = Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state.  This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {object} The render state.\n */\nDebugAppearance.prototype.getRenderState = Appearance.prototype.getRenderState;\nexport default DebugAppearance;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FrustumGeometry from \"../Core/FrustumGeometry.js\";\nimport FrustumOutlineGeometry from \"../Core/FrustumOutlineGeometry.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * Draws the outline of the camera's view frustum.\n *\n * @alias DebugCameraPrimitive\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Camera} options.camera The camera.\n * @param {number[]} [options.frustumSplits] Distances to the near and far planes of the camera frustums. This overrides the camera's frustum near and far values.\n * @param {Color} [options.color=Color.CYAN] The color of the debug outline.\n * @param {boolean} [options.updateOnChange=true] Whether the primitive updates when the underlying camera changes.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick}.\n *\n * @example\n * primitives.add(new Cesium.DebugCameraPrimitive({\n *   camera : camera,\n *   color : Cesium.Color.YELLOW\n * }));\n */\nfunction DebugCameraPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.camera)) {\n    throw new DeveloperError(\"options.camera is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._camera = options.camera;\n  this._frustumSplits = options.frustumSplits;\n  this._color = options.color ?? Color.CYAN;\n  this._updateOnChange = options.updateOnChange ?? true;\n\n  /**\n   * Determines if this primitive will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * User-defined value returned when the primitive is picked.\n   *\n   * @type {*}\n   * @default undefined\n   *\n   * @see Scene#pick\n   */\n  this.id = options.id;\n  this._id = undefined;\n\n  this._outlinePrimitives = [];\n  this._planesPrimitives = [];\n}\n\nconst scratchRight = new Cartesian3();\nconst scratchRotation = new Matrix3();\nconst scratchOrientation = new Quaternion();\nconst scratchPerspective = new PerspectiveFrustum();\nconst scratchPerspectiveOffCenter = new PerspectiveOffCenterFrustum();\nconst scratchOrthographic = new OrthographicFrustum();\nconst scratchOrthographicOffCenter = new OrthographicOffCenterFrustum();\n\nconst scratchColor = new Color();\nconst scratchSplits = [1.0, 100000.0];\n\n/**\n * @private\n */\nDebugCameraPrimitive.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  const planesPrimitives = this._planesPrimitives;\n  const outlinePrimitives = this._outlinePrimitives;\n  let i;\n  let length;\n\n  if (this._updateOnChange) {\n    // Recreate the primitive every frame\n    length = planesPrimitives.length;\n    for (i = 0; i < length; ++i) {\n      outlinePrimitives[i] =\n        outlinePrimitives[i] && outlinePrimitives[i].destroy();\n      planesPrimitives[i] =\n        planesPrimitives[i] && planesPrimitives[i].destroy();\n    }\n    planesPrimitives.length = 0;\n    outlinePrimitives.length = 0;\n  }\n\n  if (planesPrimitives.length === 0) {\n    const camera = this._camera;\n    const cameraFrustum = camera.frustum;\n    let frustum;\n    if (cameraFrustum instanceof PerspectiveFrustum) {\n      frustum = scratchPerspective;\n    } else if (cameraFrustum instanceof PerspectiveOffCenterFrustum) {\n      frustum = scratchPerspectiveOffCenter;\n    } else if (cameraFrustum instanceof OrthographicFrustum) {\n      frustum = scratchOrthographic;\n    } else {\n      frustum = scratchOrthographicOffCenter;\n    }\n    frustum = cameraFrustum.clone(frustum);\n\n    let numFrustums;\n    let frustumSplits = this._frustumSplits;\n    if (!defined(frustumSplits) || frustumSplits.length <= 1) {\n      // Use near and far planes if no splits created\n      frustumSplits = scratchSplits;\n      frustumSplits[0] = this._camera.frustum.near;\n      frustumSplits[1] = this._camera.frustum.far;\n      numFrustums = 1;\n    } else {\n      numFrustums = frustumSplits.length - 1;\n    }\n\n    const position = camera.positionWC;\n    const direction = camera.directionWC;\n    const up = camera.upWC;\n    let right = camera.rightWC;\n    right = Cartesian3.negate(right, scratchRight);\n\n    const rotation = scratchRotation;\n    Matrix3.setColumn(rotation, 0, right, rotation);\n    Matrix3.setColumn(rotation, 1, up, rotation);\n    Matrix3.setColumn(rotation, 2, direction, rotation);\n\n    const orientation = Quaternion.fromRotationMatrix(\n      rotation,\n      scratchOrientation,\n    );\n\n    planesPrimitives.length = outlinePrimitives.length = numFrustums;\n\n    for (i = 0; i < numFrustums; ++i) {\n      frustum.near = frustumSplits[i];\n      frustum.far = frustumSplits[i + 1];\n\n      planesPrimitives[i] = new Primitive({\n        geometryInstances: new GeometryInstance({\n          geometry: new FrustumGeometry({\n            origin: position,\n            orientation: orientation,\n            frustum: frustum,\n            _drawNearPlane: i === 0,\n          }),\n          attributes: {\n            color: ColorGeometryInstanceAttribute.fromColor(\n              Color.fromAlpha(this._color, 0.1, scratchColor),\n            ),\n          },\n          id: this.id,\n          pickPrimitive: this,\n        }),\n        appearance: new PerInstanceColorAppearance({\n          translucent: true,\n          flat: true,\n        }),\n        asynchronous: false,\n      });\n\n      outlinePrimitives[i] = new Primitive({\n        geometryInstances: new GeometryInstance({\n          geometry: new FrustumOutlineGeometry({\n            origin: position,\n            orientation: orientation,\n            frustum: frustum,\n            _drawNearPlane: i === 0,\n          }),\n          attributes: {\n            color: ColorGeometryInstanceAttribute.fromColor(this._color),\n          },\n          id: this.id,\n          pickPrimitive: this,\n        }),\n        appearance: new PerInstanceColorAppearance({\n          translucent: false,\n          flat: true,\n        }),\n        asynchronous: false,\n      });\n    }\n  }\n\n  length = planesPrimitives.length;\n  for (i = 0; i < length; ++i) {\n    outlinePrimitives[i].update(frameState);\n    planesPrimitives[i].update(frameState);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see DebugCameraPrimitive#destroy\n */\nDebugCameraPrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * p = p && p.destroy();\n *\n * @see DebugCameraPrimitive#isDestroyed\n */\nDebugCameraPrimitive.prototype.destroy = function () {\n  const length = this._planesPrimitives.length;\n  for (let i = 0; i < length; ++i) {\n    this._outlinePrimitives[i] =\n      this._outlinePrimitives[i] && this._outlinePrimitives[i].destroy();\n    this._planesPrimitives[i] =\n      this._planesPrimitives[i] && this._planesPrimitives[i].destroy();\n  }\n  return destroyObject(this);\n};\nexport default DebugCameraPrimitive;\n","import Color from \"../Core/Color.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * @private\n */\nfunction DebugInspector() {\n  this._cachedShowFrustumsShaders = {};\n}\n\nfunction getAttributeLocations(shaderProgram) {\n  const attributeLocations = {};\n  const attributes = shaderProgram.vertexAttributes;\n  for (const a in attributes) {\n    if (attributes.hasOwnProperty(a)) {\n      attributeLocations[a] = attributes[a].index;\n    }\n  }\n\n  return attributeLocations;\n}\n\nfunction createDebugShowFrustumsShaderProgram(scene, shaderProgram) {\n  const context = scene.context;\n  const sp = shaderProgram;\n  const fs = sp.fragmentShaderSource.clone();\n\n  const targets = [];\n  fs.sources = fs.sources.map(function (source) {\n    source = ShaderSource.replaceMain(source, \"czm_Debug_main\");\n    const re = /out_FragData_(\\d+)/g;\n    let match;\n    while ((match = re.exec(source)) !== null) {\n      if (targets.indexOf(match[1]) === -1) {\n        targets.push(match[1]);\n      }\n    }\n    return source;\n  });\n  const length = targets.length;\n\n  let newMain = \"\";\n  newMain += \"uniform vec3 debugShowCommandsColor;\\n\";\n  newMain += \"uniform vec3 debugShowFrustumsColor;\\n\";\n  newMain += \"void main() \\n\" + \"{ \\n\" + \"    czm_Debug_main(); \\n\";\n\n  // set debugShowCommandsColor to Color(1.0, 1.0, 1.0, 1.0) to stop rendering scene.debugShowCommands\n  // set debugShowFrustumsColor to Color(1.0, 1.0, 1.0, 1.0) to stop rendering scene.debugShowFrustums\n  let i;\n  if (length > 0) {\n    for (i = 0; i < length; ++i) {\n      newMain += `    out_FragData_${targets[i]}.rgb *= debugShowCommandsColor;\\n`;\n      newMain += `    out_FragData_${targets[i]}.rgb *= debugShowFrustumsColor;\\n`;\n    }\n  } else {\n    newMain += \"    out_FragColor.rgb *= debugShowCommandsColor;\\n\";\n    newMain += \"    out_FragColor.rgb *= debugShowFrustumsColor;\\n\";\n  }\n  newMain += \"}\";\n\n  fs.sources.push(newMain);\n\n  const attributeLocations = getAttributeLocations(sp);\n\n  return ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: sp.vertexShaderSource,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n}\n\nconst scratchFrustumColor = new Color();\nfunction createDebugShowFrustumsUniformMap(scene, command) {\n  // setup uniform for the shader\n  let debugUniformMap;\n  if (!defined(command.uniformMap)) {\n    debugUniformMap = {};\n  } else {\n    debugUniformMap = command.uniformMap;\n  }\n\n  if (\n    defined(debugUniformMap.debugShowCommandsColor) ||\n    defined(debugUniformMap.debugShowFrustumsColor)\n  ) {\n    return debugUniformMap;\n  }\n\n  debugUniformMap.debugShowCommandsColor = function () {\n    if (!scene.debugShowCommands) {\n      return Color.WHITE;\n    }\n\n    if (!defined(command._debugColor)) {\n      command._debugColor = Color.fromRandom();\n    }\n\n    return command._debugColor;\n  };\n\n  debugUniformMap.debugShowFrustumsColor = function () {\n    if (!scene.debugShowFrustums) {\n      return Color.WHITE;\n    }\n\n    // Support up to three frustums.  If a command overlaps all\n    // three, it's code is not changed.\n    scratchFrustumColor.red =\n      command.debugOverlappingFrustums & (1 << 0) ? 1.0 : 0.0;\n    scratchFrustumColor.green =\n      command.debugOverlappingFrustums & (1 << 1) ? 1.0 : 0.0;\n    scratchFrustumColor.blue =\n      command.debugOverlappingFrustums & (1 << 2) ? 1.0 : 0.0;\n    scratchFrustumColor.alpha = 1.0;\n    return scratchFrustumColor;\n  };\n\n  return debugUniformMap;\n}\n\nconst scratchShowFrustumCommand = new DrawCommand();\nDebugInspector.prototype.executeDebugShowFrustumsCommand = function (\n  scene,\n  command,\n  passState,\n) {\n  // create debug command\n  const shaderProgramId = command.shaderProgram.id;\n  let debugShaderProgram = this._cachedShowFrustumsShaders[shaderProgramId];\n  if (!defined(debugShaderProgram)) {\n    debugShaderProgram = createDebugShowFrustumsShaderProgram(\n      scene,\n      command.shaderProgram,\n    );\n\n    this._cachedShowFrustumsShaders[shaderProgramId] = debugShaderProgram;\n  }\n\n  const debugCommand = DrawCommand.shallowClone(\n    command,\n    scratchShowFrustumCommand,\n  );\n  debugCommand.shaderProgram = debugShaderProgram;\n  debugCommand.uniformMap = createDebugShowFrustumsUniformMap(scene, command);\n  debugCommand.execute(scene.context, passState);\n};\nexport default DebugInspector;\n","import ArcType from \"../Core/ArcType.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PolylineGeometry from \"../Core/PolylineGeometry.js\";\nimport PolylineColorAppearance from \"./PolylineColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * Draws the axes of a reference frame defined by a matrix that transforms to world\n * coordinates, i.e., Earth's WGS84 coordinates.  The most prominent example is\n * a primitives <code>modelMatrix</code>.\n * <p>\n * The X axis is red; Y is green; and Z is blue.\n * </p>\n * <p>\n * This is for debugging only; it is not optimized for production use.\n * </p>\n *\n * @alias DebugModelMatrixPrimitive\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.length=10000000.0] The length of the axes in meters.\n * @param {number} [options.width=2.0] The width of the axes in pixels.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick}\n *\n * @example\n * primitives.add(new Cesium.DebugModelMatrixPrimitive({\n *   modelMatrix : primitive.modelMatrix,  // primitive to debug\n *   length : 100000.0,\n *   width : 10.0\n * }));\n */\nfunction DebugModelMatrixPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The length of the axes in meters.\n   *\n   * @type {number}\n   * @default 10000000.0\n   */\n  this.length = options.length ?? 10000000.0;\n  this._length = undefined;\n\n  /**\n   * The width of the axes in pixels.\n   *\n   * @type {number}\n   * @default 2.0\n   */\n  this.width = options.width ?? 2.0;\n  this._width = undefined;\n\n  /**\n   * Determines if this primitive will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * The 4x4 matrix that defines the reference frame, i.e., origin plus axes, to visualize.\n   *\n   * @type {Matrix4}\n   * @default {@link Matrix4.IDENTITY}\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._modelMatrix = new Matrix4();\n\n  /**\n   * User-defined value returned when the primitive is picked.\n   *\n   * @type {*}\n   * @default undefined\n   *\n   * @see Scene#pick\n   */\n  this.id = options.id;\n  this._id = undefined;\n\n  this._primitive = undefined;\n}\n\n/**\n * @private\n */\nDebugModelMatrixPrimitive.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  if (\n    !defined(this._primitive) ||\n    !Matrix4.equals(this._modelMatrix, this.modelMatrix) ||\n    this._length !== this.length ||\n    this._width !== this.width ||\n    this._id !== this.id\n  ) {\n    this._modelMatrix = Matrix4.clone(this.modelMatrix, this._modelMatrix);\n    this._length = this.length;\n    this._width = this.width;\n    this._id = this.id;\n\n    if (defined(this._primitive)) {\n      this._primitive.destroy();\n    }\n\n    // Workaround projecting (0, 0, 0)\n    if (\n      this.modelMatrix[12] === 0.0 &&\n      this.modelMatrix[13] === 0.0 &&\n      this.modelMatrix[14] === 0.0\n    ) {\n      this.modelMatrix[14] = 0.01;\n    }\n\n    const x = new GeometryInstance({\n      geometry: new PolylineGeometry({\n        positions: [Cartesian3.ZERO, Cartesian3.UNIT_X],\n        width: this.width,\n        vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,\n        colors: [Color.RED, Color.RED],\n        arcType: ArcType.NONE,\n      }),\n      modelMatrix: Matrix4.multiplyByUniformScale(\n        this.modelMatrix,\n        this.length,\n        new Matrix4(),\n      ),\n      id: this.id,\n      pickPrimitive: this,\n    });\n    const y = new GeometryInstance({\n      geometry: new PolylineGeometry({\n        positions: [Cartesian3.ZERO, Cartesian3.UNIT_Y],\n        width: this.width,\n        vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,\n        colors: [Color.GREEN, Color.GREEN],\n        arcType: ArcType.NONE,\n      }),\n      modelMatrix: Matrix4.multiplyByUniformScale(\n        this.modelMatrix,\n        this.length,\n        new Matrix4(),\n      ),\n      id: this.id,\n      pickPrimitive: this,\n    });\n    const z = new GeometryInstance({\n      geometry: new PolylineGeometry({\n        positions: [Cartesian3.ZERO, Cartesian3.UNIT_Z],\n        width: this.width,\n        vertexFormat: PolylineColorAppearance.VERTEX_FORMAT,\n        colors: [Color.BLUE, Color.BLUE],\n        arcType: ArcType.NONE,\n      }),\n      modelMatrix: Matrix4.multiplyByUniformScale(\n        this.modelMatrix,\n        this.length,\n        new Matrix4(),\n      ),\n      id: this.id,\n      pickPrimitive: this,\n    });\n\n    this._primitive = new Primitive({\n      geometryInstances: [x, y, z],\n      appearance: new PolylineColorAppearance(),\n      asynchronous: false,\n    });\n  }\n\n  this._primitive.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see DebugModelMatrixPrimitive#destroy\n */\nDebugModelMatrixPrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * p = p && p.destroy();\n *\n * @see DebugModelMatrixPrimitive#isDestroyed\n */\nDebugModelMatrixPrimitive.prototype.destroy = function () {\n  this._primitive = this._primitive && this._primitive.destroy();\n  return destroyObject(this);\n};\nexport default DebugModelMatrixPrimitive;\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines the function used to compare two depths for the depth test.\n *\n * @enum {number}\n */\nconst DepthFunction = {\n  /**\n   * The depth test never passes.\n   *\n   * @type {number}\n   * @constant\n   */\n  NEVER: WebGLConstants.NEVER,\n\n  /**\n   * The depth test passes if the incoming depth is less than the stored depth.\n   *\n   * @type {number}\n   * @constant\n   */\n  LESS: WebGLConstants.LESS,\n\n  /**\n   * The depth test passes if the incoming depth is equal to the stored depth.\n   *\n   * @type {number}\n   * @constant\n   */\n  EQUAL: WebGLConstants.EQUAL,\n\n  /**\n   * The depth test passes if the incoming depth is less than or equal to the stored depth.\n   *\n   * @type {number}\n   * @constant\n   */\n  LESS_OR_EQUAL: WebGLConstants.LEQUAL,\n\n  /**\n   * The depth test passes if the incoming depth is greater than the stored depth.\n   *\n   * @type {number}\n   * @constant\n   */\n  GREATER: WebGLConstants.GREATER,\n\n  /**\n   * The depth test passes if the incoming depth is not equal to the stored depth.\n   *\n   * @type {number}\n   * @constant\n   */\n  NOT_EQUAL: WebGLConstants.NOTEQUAL,\n\n  /**\n   * The depth test passes if the incoming depth is greater than or equal to the stored depth.\n   *\n   * @type {number}\n   * @constant\n   */\n  GREATER_OR_EQUAL: WebGLConstants.GEQUAL,\n\n  /**\n   * The depth test always passes.\n   *\n   * @type {number}\n   * @constant\n   */\n  ALWAYS: WebGLConstants.ALWAYS,\n};\nexport default Object.freeze(DepthFunction);\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport DepthPlaneFS from \"../Shaders/DepthPlaneFS.js\";\nimport DepthPlaneVS from \"../Shaders/DepthPlaneVS.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\n\n/**\n * @private\n */\nfunction DepthPlane(depthPlaneEllipsoidOffset) {\n  this._rs = undefined;\n  this._sp = undefined;\n  this._va = undefined;\n  this._command = undefined;\n  this._mode = undefined;\n  this._useLogDepth = false;\n  this._ellipsoidOffset = depthPlaneEllipsoidOffset ?? 0;\n}\n\nconst depthQuadScratch = FeatureDetection.supportsTypedArrays()\n  ? new Float32Array(12)\n  : [];\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\nconst scratchCartesian4 = new Cartesian3();\nconst scratchCartesian5 = new Cartesian3();\n\nfunction computeDepthQuad(ellipsoid, frameState) {\n  const radii = ellipsoid.radii;\n  const camera = frameState.camera;\n  let center, eastOffset, northOffset;\n\n  if (camera.frustum instanceof OrthographicFrustum) {\n    center = Cartesian3.ZERO;\n    eastOffset = camera.rightWC;\n    northOffset = camera.upWC;\n  } else {\n    const p = camera.positionWC;\n\n    // Find the corresponding position in the scaled space of the ellipsoid.\n    const q = Cartesian3.multiplyComponents(\n      ellipsoid.oneOverRadii,\n      p,\n      scratchCartesian1,\n    );\n\n    const qUnit = Cartesian3.normalize(q, scratchCartesian2);\n\n    // Determine the east and north directions at q.\n    const eUnit = Cartesian3.normalize(\n      Cartesian3.cross(Cartesian3.UNIT_Z, q, scratchCartesian3),\n      scratchCartesian3,\n    );\n    const nUnit = Cartesian3.normalize(\n      Cartesian3.cross(qUnit, eUnit, scratchCartesian4),\n      scratchCartesian4,\n    );\n\n    const qMagnitude = Cartesian3.magnitude(q);\n\n    // Determine the radius of the 'limb' of the ellipsoid.\n    const wMagnitude = Math.sqrt(qMagnitude * qMagnitude - 1.0);\n\n    // Compute the center and offsets.\n    center = Cartesian3.multiplyByScalar(\n      qUnit,\n      1.0 / qMagnitude,\n      scratchCartesian1,\n    );\n    const scalar = wMagnitude / qMagnitude;\n    eastOffset = Cartesian3.multiplyByScalar(eUnit, scalar, scratchCartesian2);\n    northOffset = Cartesian3.multiplyByScalar(nUnit, scalar, scratchCartesian3);\n  }\n\n  // A conservative measure for the longitudes would be to use the min/max longitudes of the bounding frustum.\n  const upperLeft = Cartesian3.add(center, northOffset, scratchCartesian5);\n  Cartesian3.subtract(upperLeft, eastOffset, upperLeft);\n  Cartesian3.multiplyComponents(radii, upperLeft, upperLeft);\n  Cartesian3.pack(upperLeft, depthQuadScratch, 0);\n\n  const lowerLeft = Cartesian3.subtract(center, northOffset, scratchCartesian5);\n  Cartesian3.subtract(lowerLeft, eastOffset, lowerLeft);\n  Cartesian3.multiplyComponents(radii, lowerLeft, lowerLeft);\n  Cartesian3.pack(lowerLeft, depthQuadScratch, 3);\n\n  const upperRight = Cartesian3.add(center, northOffset, scratchCartesian5);\n  Cartesian3.add(upperRight, eastOffset, upperRight);\n  Cartesian3.multiplyComponents(radii, upperRight, upperRight);\n  Cartesian3.pack(upperRight, depthQuadScratch, 6);\n\n  const lowerRight = Cartesian3.subtract(\n    center,\n    northOffset,\n    scratchCartesian5,\n  );\n  Cartesian3.add(lowerRight, eastOffset, lowerRight);\n  Cartesian3.multiplyComponents(radii, lowerRight, lowerRight);\n  Cartesian3.pack(lowerRight, depthQuadScratch, 9);\n\n  return depthQuadScratch;\n}\n\nDepthPlane.prototype.update = function (frameState) {\n  this._mode = frameState.mode;\n  if (frameState.mode !== SceneMode.SCENE3D) {\n    return;\n  }\n\n  const context = frameState.context;\n\n  // Allow offsetting the ellipsoid radius to address rendering artifacts below ellipsoid zero elevation.\n  const radii = frameState.mapProjection.ellipsoid.radii;\n  const ellipsoid = new Ellipsoid(\n    radii.x + this._ellipsoidOffset,\n    radii.y + this._ellipsoidOffset,\n    radii.z + this._ellipsoidOffset,\n  );\n\n  const useLogDepth = frameState.useLogDepth;\n\n  if (!defined(this._command)) {\n    this._rs = RenderState.fromCache({\n      // Write depth, not color\n      cull: {\n        enabled: true,\n      },\n      depthTest: {\n        enabled: true,\n      },\n      colorMask: {\n        red: false,\n        green: false,\n        blue: false,\n        alpha: false,\n      },\n    });\n\n    this._command = new DrawCommand({\n      renderState: this._rs,\n      boundingVolume: new BoundingSphere(\n        Cartesian3.ZERO,\n        ellipsoid.maximumRadius,\n      ),\n      pass: Pass.OPAQUE,\n      owner: this,\n    });\n  }\n\n  if (!defined(this._sp) || this._useLogDepth !== useLogDepth) {\n    this._useLogDepth = useLogDepth;\n\n    const vs = new ShaderSource({\n      sources: [DepthPlaneVS],\n    });\n    const fs = new ShaderSource({\n      sources: [DepthPlaneFS],\n    });\n    if (useLogDepth) {\n      fs.defines.push(\"LOG_DEPTH\");\n      vs.defines.push(\"LOG_DEPTH\");\n    }\n\n    this._sp = ShaderProgram.replaceCache({\n      shaderProgram: this._sp,\n      context: context,\n      vertexShaderSource: vs,\n      fragmentShaderSource: fs,\n      attributeLocations: {\n        position: 0,\n      },\n    });\n\n    this._command.shaderProgram = this._sp;\n  }\n\n  // update depth plane\n  const depthQuad = computeDepthQuad(ellipsoid, frameState);\n\n  // depth plane\n  if (!defined(this._va)) {\n    const geometry = new Geometry({\n      attributes: {\n        position: new GeometryAttribute({\n          componentDatatype: ComponentDatatype.FLOAT,\n          componentsPerAttribute: 3,\n          values: depthQuad,\n        }),\n      },\n      indices: [0, 1, 2, 2, 1, 3],\n      primitiveType: PrimitiveType.TRIANGLES,\n    });\n\n    this._va = VertexArray.fromGeometry({\n      context: context,\n      geometry: geometry,\n      attributeLocations: {\n        position: 0,\n      },\n      bufferUsage: BufferUsage.DYNAMIC_DRAW,\n    });\n\n    this._command.vertexArray = this._va;\n  } else {\n    this._va.getAttribute(0).vertexBuffer.copyFromArrayView(depthQuad);\n  }\n};\n\nDepthPlane.prototype.execute = function (context, passState) {\n  if (this._mode === SceneMode.SCENE3D) {\n    this._command.execute(context, passState);\n  }\n};\n\nDepthPlane.prototype.isDestroyed = function () {\n  return false;\n};\n\nDepthPlane.prototype.destroy = function () {\n  this._sp = this._sp && this._sp.destroy();\n  this._va = this._va && this._va.destroy();\n};\nexport default DepthPlane;\n","import { MetadataComponentType } from \"@cesium/engine\";\nimport defined from \"../Core/defined.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport MetadataPickingPipelineStage from \"./Model/MetadataPickingPipelineStage.js\";\n\n/**\n * @private\n */\nfunction DerivedCommand() {}\n\nconst fragDepthRegex = /\\bgl_FragDepth\\b/;\nconst discardRegex = /\\bdiscard\\b/;\n\nfunction getDepthOnlyShaderProgram(context, shaderProgram) {\n  const cachedShader = context.shaderCache.getDerivedShaderProgram(\n    shaderProgram,\n    \"depthOnly\",\n  );\n  if (defined(cachedShader)) {\n    return cachedShader;\n  }\n\n  let fs = shaderProgram.fragmentShaderSource;\n\n  let writesDepthOrDiscards = false;\n  const sources = fs.sources;\n  for (let i = 0; i < sources.length; ++i) {\n    if (fragDepthRegex.test(sources[i]) || discardRegex.test(sources[i])) {\n      writesDepthOrDiscards = true;\n      break;\n    }\n  }\n\n  const usesLogDepth = fs.defines.indexOf(\"LOG_DEPTH\") >= 0;\n\n  if (!writesDepthOrDiscards && !usesLogDepth) {\n    const source = `void main()\n{\n    out_FragColor = vec4(1.0);\n}\n`;\n    fs = new ShaderSource({\n      sources: [source],\n    });\n  } else if (!writesDepthOrDiscards && usesLogDepth) {\n    const source = `void main()\n{\n    out_FragColor = vec4(1.0);\n    czm_writeLogDepth();\n}\n`;\n    fs = new ShaderSource({\n      defines: [\"LOG_DEPTH\"],\n      sources: [source],\n    });\n  }\n\n  return context.shaderCache.createDerivedShaderProgram(\n    shaderProgram,\n    \"depthOnly\",\n    {\n      vertexShaderSource: shaderProgram.vertexShaderSource,\n      fragmentShaderSource: fs,\n      attributeLocations: shaderProgram._attributeLocations,\n    },\n  );\n}\n\nfunction getDepthOnlyRenderState(scene, renderState) {\n  const cache = scene._depthOnlyRenderStateCache;\n\n  const cachedDepthOnlyState = cache[renderState.id];\n  if (defined(cachedDepthOnlyState)) {\n    return cachedDepthOnlyState;\n  }\n\n  const rs = RenderState.getState(renderState);\n  rs.depthMask = true;\n  rs.colorMask = {\n    red: false,\n    green: false,\n    blue: false,\n    alpha: false,\n  };\n\n  const depthOnlyState = RenderState.fromCache(rs);\n  cache[renderState.id] = depthOnlyState;\n\n  return depthOnlyState;\n}\n\nDerivedCommand.createDepthOnlyDerivedCommand = function (\n  scene,\n  command,\n  context,\n  result,\n) {\n  // For a depth only pass, we bind a framebuffer with only a depth attachment (no color attachments),\n  // do not write color, and write depth. If the fragment shader doesn't modify the fragment depth\n  // or discard, the driver can replace the fragment shader with a pass-through shader. We're unsure if this\n  // actually happens so we modify the shader to use a pass-through fragment shader.\n\n  if (!defined(result)) {\n    result = {};\n  }\n\n  const shader = result.depthOnlyCommand?.shaderProgram;\n  const renderState = result.depthOnlyCommand?.renderState;\n\n  result.depthOnlyCommand = DrawCommand.shallowClone(\n    command,\n    result.depthOnlyCommand,\n  );\n\n  if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n    result.depthOnlyCommand.shaderProgram = getDepthOnlyShaderProgram(\n      context,\n      command.shaderProgram,\n    );\n    result.depthOnlyCommand.renderState = getDepthOnlyRenderState(\n      scene,\n      command.renderState,\n    );\n    result.shaderProgramId = command.shaderProgram.id;\n  } else {\n    result.depthOnlyCommand.shaderProgram = shader;\n    result.depthOnlyCommand.renderState = renderState;\n  }\n\n  return result;\n};\n\nconst writeLogDepthRegex = /\\s+czm_writeLogDepth\\(/;\nconst vertexlogDepthRegex = /\\s+czm_vertexLogDepth\\(/;\n\nfunction getLogDepthShaderProgram(context, shaderProgram) {\n  const disableLogDepthWrite =\n    shaderProgram.fragmentShaderSource.defines.indexOf(\"LOG_DEPTH_READ_ONLY\") >=\n    0;\n  if (disableLogDepthWrite) {\n    return shaderProgram;\n  }\n\n  const cachedShader = context.shaderCache.getDerivedShaderProgram(\n    shaderProgram,\n    \"logDepth\",\n  );\n  if (defined(cachedShader)) {\n    return cachedShader;\n  }\n\n  const attributeLocations = shaderProgram._attributeLocations;\n  const vs = shaderProgram.vertexShaderSource.clone();\n  const fs = shaderProgram.fragmentShaderSource.clone();\n\n  vs.defines = defined(vs.defines) ? vs.defines.slice(0) : [];\n  vs.defines.push(\"LOG_DEPTH\");\n  fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n  fs.defines.push(\"LOG_DEPTH\");\n\n  let writesLogDepth = false;\n  let sources = vs.sources;\n  for (let i = 0; i < sources.length; ++i) {\n    if (vertexlogDepthRegex.test(sources[i])) {\n      writesLogDepth = true;\n      break;\n    }\n  }\n\n  if (!writesLogDepth) {\n    for (let i = 0; i < sources.length; ++i) {\n      sources[i] = ShaderSource.replaceMain(sources[i], \"czm_log_depth_main\");\n    }\n\n    const logMain = `\n\nvoid main()\n{\n    czm_log_depth_main();\n    czm_vertexLogDepth();\n}\n`;\n    sources.push(logMain);\n  }\n\n  sources = fs.sources;\n\n  writesLogDepth = false;\n  for (let i = 0; i < sources.length; ++i) {\n    if (writeLogDepthRegex.test(sources[i])) {\n      writesLogDepth = true;\n    }\n  }\n  // This define indicates that a log depth value is written by the shader but doesn't use czm_writeLogDepth.\n  if (fs.defines.indexOf(\"LOG_DEPTH_WRITE\") !== -1) {\n    writesLogDepth = true;\n  }\n\n  let logSource = \"\";\n\n  if (!writesLogDepth) {\n    for (let i = 0; i < sources.length; i++) {\n      sources[i] = ShaderSource.replaceMain(sources[i], \"czm_log_depth_main\");\n    }\n\n    logSource = `\nvoid main()\n{\n    czm_log_depth_main();\n    czm_writeLogDepth();\n}\n`;\n  }\n\n  sources.push(logSource);\n\n  return context.shaderCache.createDerivedShaderProgram(\n    shaderProgram,\n    \"logDepth\",\n    {\n      vertexShaderSource: vs,\n      fragmentShaderSource: fs,\n      attributeLocations: attributeLocations,\n    },\n  );\n}\n\nDerivedCommand.createLogDepthCommand = function (command, context, result) {\n  if (!defined(result)) {\n    result = {};\n  }\n\n  const shader = result.command?.shaderProgram;\n\n  result.command = DrawCommand.shallowClone(command, result.command);\n\n  if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n    result.command.shaderProgram = getLogDepthShaderProgram(\n      context,\n      command.shaderProgram,\n    );\n    result.shaderProgramId = command.shaderProgram.id;\n  } else {\n    result.command.shaderProgram = shader;\n  }\n\n  return result;\n};\n\nfunction getPickShaderProgram(context, shaderProgram, pickId) {\n  const cachedShader = context.shaderCache.getDerivedShaderProgram(\n    shaderProgram,\n    \"pick\",\n  );\n  if (defined(cachedShader)) {\n    return cachedShader;\n  }\n\n  const attributeLocations = shaderProgram._attributeLocations;\n  const { sources, defines } = shaderProgram.fragmentShaderSource;\n\n  const hasFragData = sources.some((source) => source.includes(\"out_FragData\"));\n  const outputColorVariable = hasFragData ? \"out_FragData_0\" : \"out_FragColor\";\n  const newMain = `void main ()\n{\n    czm_non_pick_main();\n    if (${outputColorVariable}.a == 0.0) {\n        discard;\n    }\n    ${outputColorVariable} = ${pickId};\n} `;\n\n  const length = sources.length;\n  const newSources = new Array(length + 1);\n  for (let i = 0; i < length; ++i) {\n    newSources[i] = ShaderSource.replaceMain(sources[i], \"czm_non_pick_main\");\n  }\n  newSources[length] = newMain;\n  const fragmentShaderSource = new ShaderSource({\n    sources: newSources,\n    defines: defines,\n  });\n  return context.shaderCache.createDerivedShaderProgram(shaderProgram, \"pick\", {\n    vertexShaderSource: shaderProgram.vertexShaderSource,\n    fragmentShaderSource: fragmentShaderSource,\n    attributeLocations: attributeLocations,\n  });\n}\n\nfunction getPickRenderState(scene, renderState) {\n  const cache = scene.picking.pickRenderStateCache;\n  const cachedPickState = cache[renderState.id];\n  if (defined(cachedPickState)) {\n    return cachedPickState;\n  }\n\n  const rs = RenderState.getState(renderState);\n  rs.blending.enabled = false;\n\n  // Turns on depth writing for opaque and translucent passes\n  // Overlapping translucent geometry on the globe surface may exhibit z-fighting\n  // during the pick pass which may not match the rendered scene. Once\n  // terrain is on by default and ground primitives are used instead\n  // this will become less of a problem.\n  rs.depthMask = true;\n\n  const pickState = RenderState.fromCache(rs);\n  cache[renderState.id] = pickState;\n  return pickState;\n}\n\nDerivedCommand.createPickDerivedCommand = function (\n  scene,\n  command,\n  context,\n  result,\n) {\n  if (!defined(result)) {\n    result = {};\n  }\n\n  const shader = result.pickCommand?.shaderProgram;\n  const renderState = result.pickCommand?.renderState;\n\n  result.pickCommand = DrawCommand.shallowClone(command, result.pickCommand);\n\n  if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n    result.pickCommand.shaderProgram = getPickShaderProgram(\n      context,\n      command.shaderProgram,\n      command.pickId,\n    );\n    result.pickCommand.renderState = getPickRenderState(\n      scene,\n      command.renderState,\n    );\n    result.shaderProgramId = command.shaderProgram.id;\n  } else {\n    result.pickCommand.shaderProgram = shader;\n    result.pickCommand.renderState = renderState;\n  }\n\n  return result;\n};\n\n/**\n * Replaces the value of the specified 'define' directive identifier\n * with the given value.\n *\n * The given defines are the parts of the define directives that are\n * stored in the `ShaderSource`. For example, the defines may be\n * `[\"EXAMPLE\", \"EXAMPLE_VALUE 123\"]`\n *\n * Calling `replaceDefine(defines, \"EXAMPLE\", 999)` will result in\n * the defines being\n * `[\"EXAMPLE 999\", \"EXAMPLE_VALUE 123\"]`\n *\n * @param {string[]} defines The define directive identifiers\n * @param {string} defineName The name (identifier) of the define directive\n * @param {any} newDefineValue The new value whose string representation\n * will become the token string for the define directive\n * @private\n */\nfunction replaceDefine(defines, defineName, newDefineValue) {\n  const n = defines.length;\n  for (let i = 0; i < n; i++) {\n    const define = defines[i];\n    const tokens = define.trimStart().split(/\\s+/);\n    if (tokens[0] === defineName) {\n      defines[i] = `${defineName} ${newDefineValue}`;\n    }\n  }\n}\n\n/**\n * Returns the component count for the given class property, or\n * its array length if it is an array.\n *\n * This will be\n * `[1, 2, 3, 4]` for `[SCALAR, VEC2, VEC3, VEC4`] types,\n * or the array length if it is an array.\n *\n * @param {MetadataClassProperty} classProperty The class property\n * @returns {number} The component count\n * @private\n */\nfunction getComponentCount(classProperty) {\n  if (!classProperty.isArray) {\n    return MetadataType.getComponentCount(classProperty.type);\n  }\n  return classProperty.arrayLength;\n}\n\n/**\n * Returns a shader statement that applies the inverse of the\n * value transform to the given value, based on the given offset\n * and scale.\n *\n * @param {string} input The input value\n * @param {string} offset The offset\n * @param {string} scale The scale\n * @returns {string} The statement\n */\nfunction unapplyValueTransform(input, offset, scale) {\n  return `((${input} - float(${offset})) / float(${scale}))`;\n}\n\n/**\n * Returns a shader statement that applies the inverse of the\n * normalization, based on the given component type\n *\n * @param {string} input The input value\n * @param {string} componentType The component type\n * @returns {string} The statement\n */\nfunction unnormalize(input, componentType) {\n  const max = MetadataComponentType.getMaximum(componentType);\n  return `(${input}) / float(${max})`;\n}\n\n/**\n * Creates a shader statement that returns the value of the specified\n * property, normalized to the range [0, 1].\n *\n * @param {MetadataClassProperty} classProperty The class property\n * @param {object} metadataProperty The metadata property, either\n * a `PropertyTextureProperty` or a `PropertyAttributeProperty`\n * @returns {string} The string\n */\nfunction getSourceValueStringScalar(classProperty, metadataProperty) {\n  let result = `float(value)`;\n\n  // The 'hasValueTransform' indicates whether the property\n  // (or its class property) did define an 'offset' or 'scale'.\n  // Even when they had not been defined in the JSON, they are\n  // defined in the object, with default values.\n  if (metadataProperty.hasValueTransform) {\n    const offset = metadataProperty.offset;\n    const scale = metadataProperty.scale;\n    result = unapplyValueTransform(result, offset, scale);\n  }\n  if (!classProperty.normalized) {\n    result = unnormalize(result, classProperty.componentType);\n  }\n  return result;\n}\n\n/**\n * Creates a shader statement that returns the value of the specified\n * component of the given property, normalized to the range [0, 1].\n *\n * @param {MetadataClassProperty} classProperty The class property\n * @param {object} metadataProperty The metadata property, either\n * a `PropertyTextureProperty` or a `PropertyAttributeProperty`\n * @param {string} componentName The name, in [\"x\", \"y\", \"z\", \"w\"]\n * @returns {string} The string\n */\nfunction getSourceValueStringComponent(\n  classProperty,\n  metadataProperty,\n  componentName,\n) {\n  const valueString = `value.${componentName}`;\n  let result = `float(${valueString})`;\n\n  // The 'hasValueTransform' indicates whether the property\n  // (or its class property) did define an 'offset' or 'scale'.\n  // Even when they had not been defined in the JSON, they are\n  // defined in the object, with default values\n  // Note that in the 'PropertyTextureProperty' and the\n  // 'PropertyAttributeProperty', these values are\n  // stored as \"object types\" (like 'Cartesian2'), whereas\n  // in the 'MetadataClassProperty', they are stored as\n  // \"array types\", e.g. a `[number, number]`\n  if (metadataProperty.hasValueTransform) {\n    const offset = metadataProperty.offset[componentName];\n    const scale = metadataProperty.scale[componentName];\n    result = unapplyValueTransform(result, offset, scale);\n  }\n  if (!classProperty.normalized) {\n    result = unnormalize(result, classProperty.componentType);\n  }\n  return result;\n}\n\n/**\n * Creates a new `ShaderProgram` from the given input that renders metadata\n * values into the frame buffer, according to the given picked metadata info.\n *\n * This will update the `defines` of the fragment shader of the given shader\n * program, by setting `METADATA_PICKING_ENABLED`, and updating the\n * `METADATA_PICKING_VALUE_*` defines so that they reflect the components\n * of the metadata that should be written into the RGBA (vec4) that\n * ends up as the 'color' in the frame buffer.\n *\n * The RGBA values will eventually be converted back into an actual metadata\n * value in `Picking.js`, by calling `MetadataPicking.decodeMetadataValues`.\n *\n * @param {Context} context The context\n * @param {ShaderProgram} shaderProgram The shader program\n * @param {PickedMetadataInfo} pickedMetadataInfo The picked metadata info\n * @returns {ShaderProgram} The new shader program\n * @private\n */\nfunction getPickMetadataShaderProgram(\n  context,\n  shaderProgram,\n  pickedMetadataInfo,\n) {\n  const schemaId = pickedMetadataInfo.schemaId;\n  const className = pickedMetadataInfo.className;\n  const propertyName = pickedMetadataInfo.propertyName;\n  const keyword = `pickMetadata-${schemaId}-${className}-${propertyName}`;\n  const shader = context.shaderCache.getDerivedShaderProgram(\n    shaderProgram,\n    keyword,\n  );\n  if (defined(shader)) {\n    return shader;\n  }\n\n  const metadataProperty = pickedMetadataInfo.metadataProperty;\n  const classProperty = pickedMetadataInfo.classProperty;\n  const glslType = classProperty.getGlslType();\n\n  // Define the components that will go into the output `metadataValues`.\n  // This will be the 'color' that is written into the frame buffer,\n  // meaning that the values should be in [0.0, 1.0], and will become\n  // values in [0, 255] in the frame buffer.\n  // By default, all of them are 0.0.\n  const sourceValueStrings = [\"0.0\", \"0.0\", \"0.0\", \"0.0\"];\n  const componentCount = getComponentCount(classProperty);\n  if (componentCount === 1) {\n    // When the property is a scalar, store the source value\n    // string directly in `metadataValues.x`\n    sourceValueStrings[0] = getSourceValueStringScalar(\n      classProperty,\n      metadataProperty,\n    );\n  } else {\n    // When the property is an array, store the array elements\n    // in `metadataValues.x/y/z/w`\n    const componentNames = [\"x\", \"y\", \"z\", \"w\"];\n    for (let i = 0; i < componentCount; i++) {\n      sourceValueStrings[i] = getSourceValueStringComponent(\n        classProperty,\n        metadataProperty,\n        componentNames[i],\n      );\n    }\n  }\n\n  const newDefines = shaderProgram.fragmentShaderSource.defines.slice();\n  newDefines.push(MetadataPickingPipelineStage.METADATA_PICKING_ENABLED);\n\n  // Replace the defines of the shader, using the type, property\n  // access, and value components  that have been determined\n  replaceDefine(\n    newDefines,\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_TYPE,\n    glslType,\n  );\n  replaceDefine(\n    newDefines,\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_STRING,\n    `metadata.${propertyName}`,\n  );\n  replaceDefine(\n    newDefines,\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_X,\n    sourceValueStrings[0],\n  );\n  replaceDefine(\n    newDefines,\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_Y,\n    sourceValueStrings[1],\n  );\n  replaceDefine(\n    newDefines,\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_Z,\n    sourceValueStrings[2],\n  );\n  replaceDefine(\n    newDefines,\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_W,\n    sourceValueStrings[3],\n  );\n\n  const newFragmentShaderSource = new ShaderSource({\n    sources: shaderProgram.fragmentShaderSource.sources,\n    defines: newDefines,\n  });\n  const newShader = context.shaderCache.createDerivedShaderProgram(\n    shaderProgram,\n    keyword,\n    {\n      vertexShaderSource: shaderProgram.vertexShaderSource,\n      fragmentShaderSource: newFragmentShaderSource,\n      attributeLocations: shaderProgram._attributeLocations,\n    },\n  );\n  return newShader;\n}\n\n/**\n * @private\n */\nDerivedCommand.createPickMetadataDerivedCommand = function (\n  scene,\n  command,\n  context,\n  result,\n) {\n  if (!defined(result)) {\n    result = {};\n  }\n  result.pickMetadataCommand = DrawCommand.shallowClone(\n    command,\n    result.pickMetadataCommand,\n  );\n\n  result.pickMetadataCommand.shaderProgram = getPickMetadataShaderProgram(\n    context,\n    command.shaderProgram,\n    command.pickedMetadataInfo,\n  );\n  result.pickMetadataCommand.renderState = getPickRenderState(\n    scene,\n    command.renderState,\n  );\n  result.shaderProgramId = command.shaderProgram.id;\n\n  return result;\n};\n\nfunction getHdrShaderProgram(context, shaderProgram) {\n  const cachedShader = context.shaderCache.getDerivedShaderProgram(\n    shaderProgram,\n    \"HDR\",\n  );\n  if (defined(cachedShader)) {\n    return cachedShader;\n  }\n\n  const attributeLocations = shaderProgram._attributeLocations;\n  const vs = shaderProgram.vertexShaderSource.clone();\n  const fs = shaderProgram.fragmentShaderSource.clone();\n\n  vs.defines = defined(vs.defines) ? vs.defines.slice(0) : [];\n  vs.defines.push(\"HDR\");\n  fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n  fs.defines.push(\"HDR\");\n\n  return context.shaderCache.createDerivedShaderProgram(shaderProgram, \"HDR\", {\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n}\n\nDerivedCommand.createHdrCommand = function (command, context, result) {\n  if (!defined(result)) {\n    result = {};\n  }\n\n  const shader = result.command?.shaderProgram;\n\n  result.command = DrawCommand.shallowClone(command, result.command);\n\n  if (!defined(shader) || result.shaderProgramId !== command.shaderProgram.id) {\n    result.command.shaderProgram = getHdrShaderProgram(\n      context,\n      command.shaderProgram,\n    );\n    result.shaderProgramId = command.shaderProgram.id;\n  } else {\n    result.command.shaderProgram = shader;\n  }\n\n  return result;\n};\nexport default DerivedCommand;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\n\n/**\n * @private\n */\nfunction DeviceOrientationCameraController(scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n\n  this._lastAlpha = undefined;\n  this._lastBeta = undefined;\n  this._lastGamma = undefined;\n\n  this._alpha = undefined;\n  this._beta = undefined;\n  this._gamma = undefined;\n\n  const that = this;\n\n  function callback(e) {\n    const alpha = e.alpha;\n    if (!defined(alpha)) {\n      that._alpha = undefined;\n      that._beta = undefined;\n      that._gamma = undefined;\n      return;\n    }\n\n    that._alpha = CesiumMath.toRadians(alpha);\n    that._beta = CesiumMath.toRadians(e.beta);\n    that._gamma = CesiumMath.toRadians(e.gamma);\n  }\n\n  window.addEventListener(\"deviceorientation\", callback, false);\n\n  this._removeListener = function () {\n    window.removeEventListener(\"deviceorientation\", callback, false);\n  };\n}\n\nconst scratchQuaternion1 = new Quaternion();\nconst scratchQuaternion2 = new Quaternion();\nconst scratchMatrix3 = new Matrix3();\n\nfunction rotate(camera, alpha, beta, gamma) {\n  const direction = camera.direction;\n  const right = camera.right;\n  const up = camera.up;\n\n  const bQuat = Quaternion.fromAxisAngle(direction, beta, scratchQuaternion2);\n  const gQuat = Quaternion.fromAxisAngle(right, gamma, scratchQuaternion1);\n\n  const rotQuat = Quaternion.multiply(gQuat, bQuat, gQuat);\n\n  const aQuat = Quaternion.fromAxisAngle(up, alpha, scratchQuaternion2);\n  Quaternion.multiply(aQuat, rotQuat, rotQuat);\n\n  const matrix = Matrix3.fromQuaternion(rotQuat, scratchMatrix3);\n  Matrix3.multiplyByVector(matrix, right, right);\n  Matrix3.multiplyByVector(matrix, up, up);\n  Matrix3.multiplyByVector(matrix, direction, direction);\n}\n\nDeviceOrientationCameraController.prototype.update = function () {\n  if (!defined(this._alpha)) {\n    return;\n  }\n\n  if (!defined(this._lastAlpha)) {\n    this._lastAlpha = this._alpha;\n    this._lastBeta = this._beta;\n    this._lastGamma = this._gamma;\n  }\n\n  const a = this._lastAlpha - this._alpha;\n  const b = this._lastBeta - this._beta;\n  const g = this._lastGamma - this._gamma;\n\n  rotate(this._scene.camera, -a, b, g);\n\n  this._lastAlpha = this._alpha;\n  this._lastBeta = this._beta;\n  this._lastGamma = this._gamma;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nDeviceOrientationCameraController.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the resources held by this object.  Destroying an object allows for deterministic\n * release of resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nDeviceOrientationCameraController.prototype.destroy = function () {\n  this._removeListener();\n  return destroyObject(this);\n};\nexport default DeviceOrientationCameraController;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A light that gets emitted in a single direction from infinitely far away.\n *\n * @param {object} options Object with the following properties:\n * @param {Cartesian3} options.direction The direction in which light gets emitted.\n * @param {Color} [options.color=Color.WHITE] The color of the light.\n * @param {number} [options.intensity=1.0] The intensity of the light.\n *\n * @exception {DeveloperError} options.direction cannot be zero-length\n *\n * @alias DirectionalLight\n * @constructor\n */\nfunction DirectionalLight(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.direction\", options.direction);\n  if (Cartesian3.equals(options.direction, Cartesian3.ZERO)) {\n    throw new DeveloperError(\"options.direction cannot be zero-length\");\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * The direction in which light gets emitted.\n   * @type {Cartesian3}\n   */\n  this.direction = Cartesian3.clone(options.direction);\n\n  /**\n   * The color of the light.\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  this.color = Color.clone(options.color ?? Color.WHITE);\n\n  /**\n   * The intensity of the light.\n   * @type {number}\n   * @default 1.0\n   */\n  this.intensity = options.intensity ?? 1.0;\n}\n\nexport default DirectionalLight;\n","import defined from \"../Core/defined.js\";\n\n/**\n * A policy for discarding tile images that contain no data (and so aren't actually images).\n * This policy discards {@link DiscardEmptyTileImagePolicy.EMPTY_IMAGE}, which is\n * expected to be used in place of any empty tile images by the image loading code.\n *\n * @alias DiscardEmptyTileImagePolicy\n * @constructor\n *\n * @see DiscardMissingTileImagePolicy\n */\nfunction DiscardEmptyTileImagePolicy(options) {}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nDiscardEmptyTileImagePolicy.prototype.isReady = function () {\n  return true;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {boolean} True if the image should be discarded; otherwise, false.\n */\nDiscardEmptyTileImagePolicy.prototype.shouldDiscardImage = function (image) {\n  return DiscardEmptyTileImagePolicy.EMPTY_IMAGE === image;\n};\n\nlet emptyImage;\n\nObject.defineProperties(DiscardEmptyTileImagePolicy, {\n  /**\n   * Default value for representing an empty image.\n   * @type {HTMLImageElement}\n   * @readonly\n   * @memberof DiscardEmptyTileImagePolicy\n   */\n  EMPTY_IMAGE: {\n    get: function () {\n      if (!defined(emptyImage)) {\n        emptyImage = new Image();\n        // load a blank data URI with a 1x1 transparent pixel.\n        emptyImage.src =\n          \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\";\n      }\n      return emptyImage;\n    },\n  },\n});\nexport default DiscardEmptyTileImagePolicy;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getImagePixels from \"../Core/getImagePixels.js\";\nimport Resource from \"../Core/Resource.js\";\n\n/**\n * A policy for discarding tile images that match a known image containing a\n * \"missing\" image.\n *\n * @alias DiscardMissingTileImagePolicy\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Resource|string} options.missingImageUrl The URL of the known missing image.\n * @param {Cartesian2[]} options.pixelsToCheck An array of {@link Cartesian2} pixel positions to\n *        compare against the missing image.\n * @param {boolean} [options.disableCheckIfAllPixelsAreTransparent=false] If true, the discard check will be disabled\n *                  if all of the pixelsToCheck in the missingImageUrl have an alpha value of 0.  If false, the\n *                  discard check will proceed no matter the values of the pixelsToCheck.\n */\nfunction DiscardMissingTileImagePolicy(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.missingImageUrl)) {\n    throw new DeveloperError(\"options.missingImageUrl is required.\");\n  }\n\n  if (!defined(options.pixelsToCheck)) {\n    throw new DeveloperError(\"options.pixelsToCheck is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._pixelsToCheck = options.pixelsToCheck;\n  this._missingImagePixels = undefined;\n  this._missingImageByteLength = undefined;\n  this._isReady = false;\n\n  const resource = Resource.createIfNeeded(options.missingImageUrl);\n\n  const that = this;\n\n  function success(image) {\n    if (defined(image.blob)) {\n      that._missingImageByteLength = image.blob.size;\n    }\n\n    let pixels = getImagePixels(image);\n\n    if (options.disableCheckIfAllPixelsAreTransparent) {\n      let allAreTransparent = true;\n      const width = image.width;\n\n      const pixelsToCheck = options.pixelsToCheck;\n      for (\n        let i = 0, len = pixelsToCheck.length;\n        allAreTransparent && i < len;\n        ++i\n      ) {\n        const pos = pixelsToCheck[i];\n        const index = pos.x * 4 + pos.y * width;\n        const alpha = pixels[index + 3];\n\n        if (alpha > 0) {\n          allAreTransparent = false;\n        }\n      }\n\n      if (allAreTransparent) {\n        pixels = undefined;\n      }\n    }\n\n    that._missingImagePixels = pixels;\n    that._isReady = true;\n  }\n\n  function failure() {\n    // Failed to download \"missing\" image, so assume that any truly missing tiles\n    // will also fail to download and disable the discard check.\n    that._missingImagePixels = undefined;\n    that._isReady = true;\n  }\n\n  resource\n    .fetchImage({\n      preferBlob: true,\n      preferImageBitmap: true,\n      flipY: true,\n    })\n    .then(success)\n    .catch(failure);\n}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nDiscardMissingTileImagePolicy.prototype.isReady = function () {\n  return this._isReady;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {boolean} True if the image should be discarded; otherwise, false.\n *\n * @exception {DeveloperError} <code>shouldDiscardImage</code> must not be called before the discard policy is ready.\n */\nDiscardMissingTileImagePolicy.prototype.shouldDiscardImage = function (image) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!this._isReady) {\n    throw new DeveloperError(\n      \"shouldDiscardImage must not be called before the discard policy is ready.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const pixelsToCheck = this._pixelsToCheck;\n  const missingImagePixels = this._missingImagePixels;\n\n  // If missingImagePixels is undefined, it indicates that the discard check has been disabled.\n  if (!defined(missingImagePixels)) {\n    return false;\n  }\n\n  if (defined(image.blob) && image.blob.size !== this._missingImageByteLength) {\n    return false;\n  }\n\n  const pixels = getImagePixels(image);\n  const width = image.width;\n\n  for (let i = 0, len = pixelsToCheck.length; i < len; ++i) {\n    const pos = pixelsToCheck[i];\n    const index = pos.x * 4 + pos.y * width;\n    for (let offset = 0; offset < 4; ++offset) {\n      const pixel = index + offset;\n      if (pixels[pixel] !== missingImagePixels[pixel]) {\n        return false;\n      }\n    }\n  }\n  return true;\n};\nexport default DiscardMissingTileImagePolicy;\n","import defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\n\n/**\n * @private\n */\nclass DracoLoader {\n  static _getDecoderTaskProcessor() {\n    if (!defined(DracoLoader._decoderTaskProcessor)) {\n      const processor = new TaskProcessor(\n        \"decodeDraco\",\n        DracoLoader._maxDecodingConcurrency,\n      );\n      processor\n        .initWebAssemblyModule({\n          wasmBinaryFile: \"ThirdParty/draco_decoder.wasm\",\n        })\n        .then(function (result) {\n          if (result) {\n            DracoLoader._taskProcessorReady = true;\n          } else {\n            DracoLoader._error = new RuntimeError(\n              \"Draco decoder could not be initialized.\",\n            );\n          }\n        })\n        .catch((error) => {\n          DracoLoader._error = error;\n        });\n      DracoLoader._decoderTaskProcessor = processor;\n    }\n\n    return DracoLoader._decoderTaskProcessor;\n  }\n\n  /**\n   * Decodes a compressed point cloud. Returns undefined if the task cannot be scheduled.\n   * @private\n   *\n   * @exception {RuntimeError} Draco decoder could not be initialized.\n   */\n  static decodePointCloud(parameters) {\n    const decoderTaskProcessor = DracoLoader._getDecoderTaskProcessor();\n    if (defined(DracoLoader._error)) {\n      throw DracoLoader._error;\n    }\n\n    if (!DracoLoader._taskProcessorReady) {\n      // The task processor is not ready to schedule tasks\n      return;\n    }\n    return decoderTaskProcessor.scheduleTask(parameters, [\n      parameters.buffer.buffer,\n    ]);\n  }\n\n  /**\n   * Decodes a buffer view. Returns undefined if the task cannot be scheduled.\n   *\n   * @param {object} options Object with the following properties:\n   * @param {Uint8Array} options.array The typed array containing the buffer view data.\n   * @param {object} options.bufferView The glTF buffer view object.\n   * @param {Object<string, number>} options.compressedAttributes The compressed attributes.\n   * @param {boolean} options.dequantizeInShader Whether POSITION and NORMAL attributes should be dequantized on the GPU.\n   *\n   * @returns {Promise} A promise that resolves to the decoded indices and attributes.\n   * @private\n   *\n   * @exception {RuntimeError} Draco decoder could not be initialized.\n   */\n  static decodeBufferView(options) {\n    const decoderTaskProcessor = DracoLoader._getDecoderTaskProcessor();\n\n    if (defined(DracoLoader._error)) {\n      throw DracoLoader._error;\n    }\n\n    if (!DracoLoader._taskProcessorReady) {\n      // The task processor is not ready to schedule tasks\n      return;\n    }\n\n    return decoderTaskProcessor.scheduleTask(options, [options.array.buffer]);\n  }\n}\n\n// Maximum concurrency to use when decoding draco models\nDracoLoader._maxDecodingConcurrency = Math.max(\n  FeatureDetection.hardwareConcurrency - 1,\n  1,\n);\n\n// Exposed for testing purposes\nDracoLoader._decoderTaskProcessor = undefined;\nDracoLoader._taskProcessorReady = false;\nDracoLoader._error = undefined;\n\nexport default DracoLoader;\n","/**\n * Atmosphere lighting effects (sky atmosphere, ground atmosphere, fog) can be\n * further modified with dynamic lighting from the sun or other light source\n * that changes over time. This enum determines which light source to use.\n *\n * @enum {number}\n */\nconst DynamicAtmosphereLightingType = {\n  /**\n   * Do not use dynamic atmosphere lighting. Atmosphere lighting effects will\n   * be lit from directly above rather than using the scene's light source.\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n  /**\n   * Use the scene's current light source for dynamic atmosphere lighting.\n   *\n   * @type {number}\n   * @constant\n   */\n  SCENE_LIGHT: 1,\n  /**\n   * Force the dynamic atmosphere lighting to always use the sunlight direction,\n   * even if the scene uses a different light source.\n   *\n   * @type {number}\n   * @constant\n   */\n  SUNLIGHT: 2,\n};\n\n/**\n * Get the lighting enum from the older globe flags\n *\n * @param {Globe} globe The globe\n * @return {DynamicAtmosphereLightingType} The corresponding enum value\n *\n * @private\n */\nDynamicAtmosphereLightingType.fromGlobeFlags = function (globe) {\n  const lightingOn = globe.enableLighting && globe.dynamicAtmosphereLighting;\n  if (!lightingOn) {\n    return DynamicAtmosphereLightingType.NONE;\n  }\n\n  // Force sunlight\n  if (globe.dynamicAtmosphereLightingFromSun) {\n    return DynamicAtmosphereLightingType.SUNLIGHT;\n  }\n\n  return DynamicAtmosphereLightingType.SCENE_LIGHT;\n};\n\nexport default Object.freeze(DynamicAtmosphereLightingType);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport Atmosphere from \"./Atmosphere.js\";\nimport DynamicAtmosphereLightingType from \"./DynamicAtmosphereLightingType.js\";\nimport AtmosphereCommon from \"../Shaders/AtmosphereCommon.js\";\nimport ComputeIrradianceFS from \"../Shaders/ComputeIrradianceFS.js\";\nimport ComputeRadianceMapFS from \"../Shaders/ComputeRadianceMapFS.js\";\nimport ConvolveSpecularMapFS from \"../Shaders/ConvolveSpecularMapFS.js\";\nimport ConvolveSpecularMapVS from \"../Shaders/ConvolveSpecularMapVS.js\";\n\n/**\n * @typedef {object} DynamicEnvironmentMapManager.ConstructorOptions\n * Options for the DynamicEnvironmentMapManager constructor\n * @property {boolean} [enabled=true] If true, the environment map and related properties will continue to update.\n * @property {number} [mipmapLevels=7] The maximum desired number of mipmap levels to generate for specular maps. More mipmap levels will produce a higher resolution specular reflection. The actual number of mipmaps used will be bounded by the cubemap texture size supported on the client machine. The number of mipmaps must be at least one for the environment map to be generated.\n * @property {number} [maximumSecondsDifference=3600] The maximum amount of elapsed seconds before a new environment map is created.\n * @property {number} [maximumPositionEpsilon=1000] The maximum difference in position before a new environment map is created, in meters. Small differences in position will not visibly affect results.\n * @property {number} [atmosphereScatteringIntensity=2.0] The intensity of the scattered light emitted from the atmosphere. This should be adjusted relative to the value of {@link Scene.light} intensity.\n * @property {number} [gamma=1.0] The gamma correction to apply to the range of light emitted from the environment. 1.0 uses the unmodified emitted light color.\n * @property {number} [brightness=1.0] The brightness of light emitted from the environment. 1.0 uses the unmodified emitted environment color. Less than 1.0 makes the light darker while greater than 1.0 makes it brighter.\n * @property {number} [saturation=1.0] The saturation of the light emitted from the environment. 1.0 uses the unmodified emitted environment color. Less than 1.0 reduces the saturation while greater than 1.0 increases it.\n * @property {Color} [groundColor=DynamicEnvironmentMapManager.AVERAGE_EARTH_GROUND_COLOR] Solid color used to represent the ground.\n * @property {number} [groundAlbedo=0.31] The percentage of light reflected from the ground. The average earth albedo is 0.31.\n */\n\n/**\n * Generates an environment map at the given position based on scene's current lighting conditions. From this, it produces multiple levels of specular maps and spherical harmonic coefficients than can be used with {@link ImageBasedLighting} for models or tilesets.\n * @alias DynamicEnvironmentMapManager\n * @constructor\n * @param {DynamicEnvironmentMapManager.ConstructorOptions} [options] An object describing initialization options.\n *\n * @example\n * // Enable time-of-day environment mapping in a scene\n * scene.atmosphere.dynamicLighting = Cesium.DynamicAtmosphereLightingType.SUNLIGHT;\n *\n * // Decrease the directional lighting contribution\n * scene.light.intensity = 0.5\n *\n * // Increase the intensity of of the environment map lighting contribution\n * const environmentMapManager = tileset.environmentMapManager;\n * environmentMapManager.atmosphereScatteringIntensity = 3.0;\n *\n * @example\n * // Change the ground color used for a model's environment map to a forest green\n * const environmentMapManager = model.environmentMapManager;\n * environmentMapManager.groundColor = Cesium.Color.fromCssColorString(\"#203b34\");\n */\nfunction DynamicEnvironmentMapManager(options) {\n  this._position = undefined;\n\n  this._radianceMapDirty = false;\n  this._radianceCommandsDirty = false;\n  this._convolutionsCommandsDirty = false;\n  this._irradianceCommandDirty = false;\n  this._irradianceTextureDirty = false;\n  this._sphericalHarmonicCoefficientsDirty = false;\n\n  this._shouldRegenerateShaders = false;\n  this._shouldReset = false;\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const mipmapLevels = Math.max(\n    Math.floor(\n      Math.min(\n        options.mipmapLevels ?? 7,\n        Math.log2(ContextLimits.maximumCubeMapSize),\n      ),\n    ),\n    0,\n  );\n\n  this._mipmapLevels = mipmapLevels;\n\n  const arrayLength = Math.max(mipmapLevels - 1, 0) * 6;\n  this._radianceMapComputeCommands = new Array(6);\n  this._convolutionComputeCommands = new Array(arrayLength);\n  this._irradianceComputeCommand = undefined;\n\n  this._radianceMapFS = undefined;\n  this._irradianceMapFS = undefined;\n  this._convolveSP = undefined;\n  this._va = undefined;\n\n  this._radianceMapTextures = new Array(6);\n  this._specularMapTextures = new Array(arrayLength);\n  this._radianceCubeMap = undefined;\n  this._irradianceMapTexture = undefined;\n\n  this._sphericalHarmonicCoefficients =\n    DynamicEnvironmentMapManager.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS.slice();\n\n  this._lastTime = new JulianDate();\n  const width = Math.max(Math.pow(2, mipmapLevels - 1), 1);\n  this._textureDimensions = new Cartesian2(width, width);\n\n  this._radiiAndDynamicAtmosphereColor = new Cartesian3();\n  this._sceneEnvironmentMap = undefined;\n  this._backgroundColor = undefined;\n\n  // If this DynamicEnvironmentMapManager has an owner, only its owner should update or destroy it.\n  // This is because in a Cesium3DTileset multiple models may reference one tileset's DynamicEnvironmentMapManager.\n  this._owner = undefined;\n\n  /**\n   * If true, the environment map and related properties will continue to update.\n   * @type {boolean}\n   * @default true\n   */\n  this.enabled = options.enabled ?? true;\n\n  /**\n   * Disables updates. For internal use.\n   * @private\n   * @default true\n   */\n  this.shouldUpdate = true;\n\n  /**\n   * The maximum amount of elapsed seconds before a new environment map is created.\n   * @type {number}\n   * @default 3600\n   */\n  this.maximumSecondsDifference = options.maximumSecondsDifference ?? 60 * 60;\n\n  /**\n   * The maximum difference in position before a new environment map is created, in meters. Small differences in position will not visibly affect results.\n   * @type {number}\n   * @default 1000\n   */\n  this.maximumPositionEpsilon = options.maximumPositionEpsilon ?? 1000.0;\n\n  /**\n   * The intensity of the scattered light emitted from the atmosphere. This should be adjusted relative to the value of {@link Scene.light} intensity.\n   * @type {number}\n   * @default 2.0\n   * @see DirectionalLight.intensity\n   * @see SunLight.intensity\n   */\n  this.atmosphereScatteringIntensity =\n    options.atmosphereScatteringIntensity ?? 2.0;\n\n  /**\n   * The gamma correction to apply to the range of light emitted from the environment. 1.0 uses the unmodified incoming light color.\n   * @type {number}\n   * @default 1.0\n   */\n  this.gamma = options.gamma ?? 1.0;\n\n  /**\n   * The brightness of light emitted from the environment. 1.0 uses the unmodified emitted environment color. Less than 1.0\n   * makes the light darker while greater than 1.0 makes it brighter.\n   * @type {number}\n   * @default 1.0\n   */\n  this.brightness = options.brightness ?? 1.0;\n\n  /**\n   * The saturation of the light emitted from the environment. 1.0 uses the unmodified emitted environment color. Less than 1.0 reduces the\n   * saturation while greater than 1.0 increases it.\n   * @type {number}\n   * @default 1.0\n   */\n  this.saturation = options.saturation ?? 1.0;\n\n  /**\n   * Solid color used to represent the ground.\n   * @type {Color}\n   * @default DynamicEnvironmentMapManager.AVERAGE_EARTH_GROUND_COLOR\n   */\n  this.groundColor =\n    options.groundColor ??\n    DynamicEnvironmentMapManager.AVERAGE_EARTH_GROUND_COLOR;\n\n  /**\n   * The percentage of light reflected from the ground. The average earth albedo is 0.31.\n   * @type {number}\n   * @default 0.31\n   */\n  this.groundAlbedo = options.groundAlbedo ?? 0.31;\n}\n\nObject.defineProperties(DynamicEnvironmentMapManager.prototype, {\n  /**\n   * A reference to the DynamicEnvironmentMapManager's owner, if any.\n   * @memberof DynamicEnvironmentMapManager.prototype\n   * @type {object|undefined}\n   * @readonly\n   * @private\n   */\n  owner: {\n    get: function () {\n      return this._owner;\n    },\n  },\n\n  /**\n   * True if model shaders need to be regenerated to account for updates.\n   * @memberof DynamicEnvironmentMapManager.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  shouldRegenerateShaders: {\n    get: function () {\n      return this._shouldRegenerateShaders;\n    },\n  },\n\n  /**\n   * The position around which the environment map is generated.\n   * @memberof DynamicEnvironmentMapManager.prototype\n   * @type {Cartesian3|undefined}\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n    set: function (value) {\n      if (\n        Cartesian3.equalsEpsilon(\n          value,\n          this._position,\n          0.0,\n          this.maximumPositionEpsilon,\n        )\n      ) {\n        return;\n      }\n\n      this._position = Cartesian3.clone(value, this._position);\n      this._shouldReset = true;\n    },\n  },\n\n  /**\n   * The computed radiance map, or <code>undefined</code> if it has not yet been created.\n   * @memberof DynamicEnvironmentMapManager.prototype\n   * @type {CubeMap|undefined}\n   * @readonly\n   * @private\n   */\n  radianceCubeMap: {\n    get: function () {\n      return this._radianceCubeMap;\n    },\n  },\n\n  /**\n   * The maximum number of mip levels available in the radiance cubemap.\n   * @memberof DynamicEnvironmentMapManager.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  maximumMipmapLevel: {\n    get: function () {\n      return this._mipmapLevels;\n    },\n  },\n\n  /**\n   * The third order spherical harmonic coefficients used for the diffuse color of image-based lighting.\n   * <p>\n   * There are nine <code>Cartesian3</code> coefficients.\n   * The order of the coefficients is: L<sub>0,0</sub>, L<sub>1,-1</sub>, L<sub>1,0</sub>, L<sub>1,1</sub>, L<sub>2,-2</sub>, L<sub>2,-1</sub>, L<sub>2,0</sub>, L<sub>2,1</sub>, L<sub>2,2</sub>\n   * </p>\n   * @memberof DynamicEnvironmentMapManager.prototype\n   * @readonly\n   * @type {Cartesian3[]}\n   * @see {@link https://graphics.stanford.edu/papers/envmap/envmap.pdf|An Efficient Representation for Irradiance Environment Maps}\n   * @private\n   */\n  sphericalHarmonicCoefficients: {\n    get: function () {\n      return this._sphericalHarmonicCoefficients;\n    },\n  },\n});\n\n// Internally manage a queue of commands across all instances to prevent too many commands from being added in a single frame and using too much memory at once.\nDynamicEnvironmentMapManager._maximumComputeCommandCount = 8; // This value is updated once a context is created.\nDynamicEnvironmentMapManager._activeComputeCommandCount = 0;\nDynamicEnvironmentMapManager._nextFrameCommandQueue = [];\n/**\n * Add a command to the queue. If possible, it will be added to the list of commands for the next frame. Otherwise, it will be added to a backlog\n * and attempted next frame.\n * @private\n * @param {ComputeCommand} command The created command\n * @param {FrameState} frameState The current frame state\n */\nDynamicEnvironmentMapManager._queueCommand = (command, frameState) => {\n  if (\n    DynamicEnvironmentMapManager._activeComputeCommandCount >=\n    DynamicEnvironmentMapManager._maximumComputeCommandCount\n  ) {\n    // Command will instead be scheduled next frame\n    DynamicEnvironmentMapManager._nextFrameCommandQueue.push(command);\n    return;\n  }\n\n  frameState.commandList.push(command);\n  DynamicEnvironmentMapManager._activeComputeCommandCount++;\n};\n/**\n * If there are any backlogged commands, queue up as many as possible for the next frame.\n * @private\n * @param {FrameState} frameState The current frame state\n */\nDynamicEnvironmentMapManager._updateCommandQueue = (frameState) => {\n  DynamicEnvironmentMapManager._maximumComputeCommandCount = Math.log2(\n    ContextLimits.maximumCubeMapSize,\n  ); // Scale relative to GPU resources available\n\n  if (\n    DynamicEnvironmentMapManager._nextFrameCommandQueue.length > 0 &&\n    DynamicEnvironmentMapManager._activeComputeCommandCount <\n      DynamicEnvironmentMapManager._maximumComputeCommandCount\n  ) {\n    let command = DynamicEnvironmentMapManager._nextFrameCommandQueue.shift();\n    while (\n      defined(command) &&\n      DynamicEnvironmentMapManager._activeComputeCommandCount <\n        DynamicEnvironmentMapManager._maximumComputeCommandCount\n    ) {\n      if (command.owner.isDestroyed() || command.canceled) {\n        command = DynamicEnvironmentMapManager._nextFrameCommandQueue.shift();\n        continue;\n      }\n\n      frameState.commandList.push(command);\n      DynamicEnvironmentMapManager._activeComputeCommandCount++;\n      command = DynamicEnvironmentMapManager._nextFrameCommandQueue.shift();\n    }\n\n    if (defined(command)) {\n      DynamicEnvironmentMapManager._nextFrameCommandQueue.push(command);\n    }\n  }\n};\n\n/**\n * Sets the owner for the input DynamicEnvironmentMapManager if there wasn't another owner.\n * Destroys the owner's previous DynamicEnvironmentMapManager if setting is successful.\n * @param {DynamicEnvironmentMapManager} [environmentMapManager] A DynamicEnvironmentMapManager (or undefined) being attached to an object\n * @param {object} owner An Object that should receive the new DynamicEnvironmentMapManager\n * @param {string} key The Key for the Object to reference the DynamicEnvironmentMapManager\n * @private\n */\nDynamicEnvironmentMapManager.setOwner = function (\n  environmentMapManager,\n  owner,\n  key,\n) {\n  // Don't destroy the DynamicEnvironmentMapManager if it's already owned by newOwner\n  if (environmentMapManager === owner[key]) {\n    return;\n  }\n  // Destroy the existing DynamicEnvironmentMapManager, if any\n  owner[key] = owner[key] && owner[key].destroy();\n  if (defined(environmentMapManager)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (defined(environmentMapManager._owner)) {\n      throw new DeveloperError(\n        \"DynamicEnvironmentMapManager should only be assigned to one object\",\n      );\n    }\n    //>>includeEnd('debug');\n    environmentMapManager._owner = owner;\n    owner[key] = environmentMapManager;\n  }\n};\n\n/**\n * Cancels any in-progress commands and marks the environment map as dirty.\n * @private\n */\nDynamicEnvironmentMapManager.prototype.reset = function () {\n  let length = this._radianceMapComputeCommands.length;\n  for (let i = 0; i < length; ++i) {\n    if (defined(this._radianceMapComputeCommands[i])) {\n      this._radianceMapComputeCommands[i].canceled = true;\n    }\n    this._radianceMapComputeCommands[i] = undefined;\n  }\n\n  length = this._convolutionComputeCommands.length;\n  for (let i = 0; i < length; ++i) {\n    if (defined(this._convolutionComputeCommands[i])) {\n      this._convolutionComputeCommands[i].canceled = true;\n    }\n    this._convolutionComputeCommands[i] = undefined;\n  }\n\n  if (defined(this._irradianceComputeCommand)) {\n    this._irradianceComputeCommand.canceled = true;\n    this._irradianceComputeCommand = undefined;\n  }\n\n  this._radianceMapDirty = true;\n  this._radianceCommandsDirty = true;\n  this._convolutionsCommandsDirty = false;\n  this._irradianceCommandDirty = false;\n};\n\nconst scratchPackedAtmosphere = new Cartesian3();\nconst scratchSurfacePosition = new Cartesian3();\n\n/**\n * Update atmosphere properties and returns true if the environment map needs to be regenerated.\n * @param {DynamicEnvironmentMapManager} manager this manager\n * @param {FrameState} frameState the current frameState\n * @returns {boolean} true if the environment map needs to be regenerated.\n * @private\n */\nfunction atmosphereNeedsUpdate(manager, frameState) {\n  const position = manager._position;\n  const atmosphere = frameState.atmosphere;\n\n  const ellipsoid = frameState.mapProjection.ellipsoid;\n  const surfacePosition = ellipsoid.scaleToGeodeticSurface(\n    position,\n    scratchSurfacePosition,\n  );\n  const outerEllipsoidScale = 1.025;\n\n  // Pack outer radius, inner radius, and dynamic atmosphere flag\n  const radiiAndDynamicAtmosphereColor = scratchPackedAtmosphere;\n  const radius = defined(surfacePosition)\n    ? Cartesian3.magnitude(surfacePosition)\n    : ellipsoid.maximumRadius;\n  radiiAndDynamicAtmosphereColor.x = radius * outerEllipsoidScale;\n  radiiAndDynamicAtmosphereColor.y = radius;\n  radiiAndDynamicAtmosphereColor.z = atmosphere.dynamicLighting;\n\n  if (\n    !Cartesian3.equalsEpsilon(\n      manager._radiiAndDynamicAtmosphereColor,\n      radiiAndDynamicAtmosphereColor,\n    ) ||\n    frameState.environmentMap !== manager._sceneEnvironmentMap ||\n    frameState.backgroundColor !== manager._backgroundColor\n  ) {\n    Cartesian3.clone(\n      radiiAndDynamicAtmosphereColor,\n      manager._radiiAndDynamicAtmosphereColor,\n    );\n    manager._sceneEnvironmentMap = frameState.environmentMap;\n    manager._backgroundColor = frameState.backgroundColor;\n    return true;\n  }\n\n  return false;\n}\n\nconst scratchCartesian = new Cartesian3();\nconst scratchMatrix = new Matrix4();\nconst scratchAdjustments = new Cartesian4();\nconst scratchColor = new Color();\n\n/**\n * Renders the highest resolution specular map by creating compute commands for each cube face\n * @param {DynamicEnvironmentMapManager} manager this manager\n * @param {FrameState} frameState the current frameState\n * @private\n */\nfunction updateRadianceMap(manager, frameState) {\n  const context = frameState.context;\n  const textureDimensions = manager._textureDimensions;\n\n  if (!defined(manager._radianceCubeMap)) {\n    manager._radianceCubeMap = new CubeMap({\n      context: context,\n      width: textureDimensions.x,\n      height: textureDimensions.y,\n      pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n      pixelFormat: PixelFormat.RGBA,\n    });\n  }\n\n  if (manager._radianceCommandsDirty) {\n    let fs = manager._radianceMapFS;\n    if (!defined(fs)) {\n      fs = new ShaderSource({\n        sources: [AtmosphereCommon, ComputeRadianceMapFS],\n      });\n      manager._radianceMapFS = fs;\n    }\n\n    if (Atmosphere.requiresColorCorrect(frameState.atmosphere)) {\n      fs.defines.push(\"ATMOSPHERE_COLOR_CORRECT\");\n    }\n\n    const position = manager._position;\n    const radiiAndDynamicAtmosphereColor =\n      manager._radiiAndDynamicAtmosphereColor;\n\n    const ellipsoid = frameState.mapProjection.ellipsoid;\n    const enuToFixedFrame = Transforms.eastNorthUpToFixedFrame(\n      position,\n      ellipsoid,\n      scratchMatrix,\n    );\n\n    const adjustments = scratchAdjustments;\n\n    adjustments.x = manager.brightness;\n    adjustments.y = manager.saturation;\n    adjustments.z = manager.gamma;\n    adjustments.w = manager.atmosphereScatteringIntensity;\n\n    if (\n      manager.brightness !== 1.0 ||\n      manager.saturation !== 1.0 ||\n      manager.gamma !== 1.0\n    ) {\n      fs.defines.push(\"ENVIRONMENT_COLOR_CORRECT\");\n    }\n\n    let i = 0;\n    for (const face of CubeMap.faceNames()) {\n      let texture = manager._radianceMapTextures[i];\n      // Destroy any existing textures that have no yet been cleaned up\n      if (defined(texture) && !texture.isDestroyed()) {\n        texture.destroy();\n      }\n\n      texture = new Texture({\n        context: context,\n        width: textureDimensions.x,\n        height: textureDimensions.y,\n        pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n        pixelFormat: PixelFormat.RGBA,\n      });\n      manager._radianceMapTextures[i] = texture;\n\n      const index = i;\n      const command = new ComputeCommand({\n        fragmentShaderSource: fs,\n        outputTexture: texture,\n        uniformMap: {\n          u_radiiAndDynamicAtmosphereColor: () =>\n            radiiAndDynamicAtmosphereColor,\n          u_enuToFixedFrame: () => enuToFixedFrame,\n          u_faceDirection: () => CubeMap.getDirection(face, scratchCartesian),\n          u_positionWC: () => position,\n          u_brightnessSaturationGammaIntensity: () => adjustments,\n          u_groundColor: () => {\n            return manager.groundColor.withAlpha(\n              manager.groundAlbedo,\n              scratchColor,\n            );\n          },\n        },\n        owner: manager,\n      });\n      command.postExecute = () => {\n        if (manager.isDestroyed() || command.canceled) {\n          DynamicEnvironmentMapManager._activeComputeCommandCount--;\n          return;\n        }\n\n        const commands = manager._radianceMapComputeCommands;\n        commands[index] = undefined;\n\n        const framebuffer = new Framebuffer({\n          context: context,\n          colorTextures: [manager._radianceMapTextures[index]],\n        });\n\n        // Copy the output texture into the corresponding cubemap face\n        framebuffer._bind();\n        manager._radianceCubeMap[face].copyFromFramebuffer();\n        framebuffer._unBind();\n        framebuffer.destroy();\n\n        DynamicEnvironmentMapManager._activeComputeCommandCount--;\n\n        if (!commands.some(defined)) {\n          manager._convolutionsCommandsDirty = true;\n          manager._shouldRegenerateShaders = true;\n        }\n      };\n\n      manager._radianceMapComputeCommands[i] = command;\n      DynamicEnvironmentMapManager._queueCommand(command, frameState);\n      i++;\n    }\n    manager._radianceCommandsDirty = false;\n  }\n}\n\n/**\n * Creates a mipmap chain for the cubemap by convolving the environment map for each roughness level\n * @param {DynamicEnvironmentMapManager} manager this manager\n * @param {FrameState} frameState the current frameState\n * @private\n */\nfunction updateSpecularMaps(manager, frameState) {\n  const radianceCubeMap = manager._radianceCubeMap;\n  radianceCubeMap.generateMipmap();\n\n  const mipmapLevels = manager._mipmapLevels;\n  const textureDimensions = manager._textureDimensions;\n  let width = textureDimensions.x / 2;\n  let height = textureDimensions.y / 2;\n  const context = frameState.context;\n\n  let facesCopied = 0;\n  const checkComplete = () => {\n    // All faces for each mipmap level have been copied\n    const length = manager._specularMapTextures.length;\n    if (facesCopied >= length) {\n      manager._irradianceCommandDirty = true;\n\n      if (mipmapLevels > 1) {\n        radianceCubeMap.sampler = new Sampler({\n          minificationFilter: TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n        });\n\n        manager._shouldRegenerateShaders = true;\n\n        // Cleanup shared resources\n        manager._va.destroy();\n        manager._va = undefined;\n        manager._convolveSP.destroy();\n        manager._convolveSP = undefined;\n      }\n    }\n  };\n\n  const getPostExecute = (command, index, texture, face, level) => () => {\n    if (manager.isDestroyed() || command.canceled) {\n      DynamicEnvironmentMapManager._activeComputeCommandCount--;\n      return;\n    }\n\n    // Copy output texture to corresponding face and mipmap level\n    const commands = manager._convolutionComputeCommands;\n    commands[index] = undefined;\n\n    radianceCubeMap.copyFace(frameState, texture, face, level);\n    facesCopied++;\n    DynamicEnvironmentMapManager._activeComputeCommandCount--;\n\n    texture.destroy();\n    manager._specularMapTextures[index] = undefined;\n\n    checkComplete();\n  };\n\n  let index = 0;\n  for (let level = 1; level < mipmapLevels; ++level) {\n    for (const face of CubeMap.faceNames()) {\n      if (defined(manager._specularMapTextures[index])) {\n        manager._specularMapTextures[index].destroy();\n      }\n\n      const texture = (manager._specularMapTextures[index] = new Texture({\n        context: context,\n        width: width,\n        height: height,\n        pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n        pixelFormat: PixelFormat.RGBA,\n      }));\n\n      let vertexArray = manager._va;\n      if (!defined(vertexArray)) {\n        vertexArray = CubeMap.createVertexArray(context, face);\n        manager._va = vertexArray;\n      }\n\n      let shaderProgram = manager._convolveSP;\n      if (!defined(shaderProgram)) {\n        shaderProgram = ShaderProgram.fromCache({\n          context: context,\n          vertexShaderSource: ConvolveSpecularMapVS,\n          fragmentShaderSource: ConvolveSpecularMapFS,\n          attributeLocations: {\n            positions: 0,\n          },\n        });\n        manager._convolveSP = shaderProgram;\n      }\n\n      const command = new ComputeCommand({\n        shaderProgram: shaderProgram,\n        vertexArray: vertexArray,\n        outputTexture: texture,\n        // Persist so we can use a shared shader progam and vertex array across all commands\n        // Shared resources are instead destroyed in postExecute\n        persists: true,\n        owner: manager,\n        uniformMap: {\n          u_roughness: () => level / (mipmapLevels - 1),\n          u_radianceTexture: () => radianceCubeMap ?? context.defaultTexture,\n          u_faceDirection: () => {\n            return CubeMap.getDirection(face, scratchCartesian);\n          },\n        },\n      });\n      command.postExecute = getPostExecute(\n        command,\n        index,\n        texture,\n        face,\n        level,\n      );\n      manager._convolutionComputeCommands[index] = command;\n      DynamicEnvironmentMapManager._queueCommand(command, frameState);\n      ++index;\n    }\n\n    width /= 2;\n    height /= 2;\n  }\n  checkComplete();\n}\n\nconst irradianceTextureDimensions = new Cartesian2(3, 3); // 9 coefficients\n\n/**\n * Computes spherical harmonic coefficients by convolving the environment map.\n * @param {DynamicEnvironmentMapManager} manager this manager\n * @param {FrameState} frameState the current frameState\n * @private\n */\nfunction updateIrradianceResources(manager, frameState) {\n  const context = frameState.context;\n  const dimensions = irradianceTextureDimensions;\n\n  let texture = manager._irradianceMapTexture;\n  if (defined(texture) && !texture.isDestroyed()) {\n    texture.destroy();\n  }\n\n  texture = new Texture({\n    context: context,\n    width: dimensions.x,\n    height: dimensions.y,\n    pixelDatatype: PixelDatatype.FLOAT,\n    pixelFormat: PixelFormat.RGBA,\n  });\n  manager._irradianceMapTexture = texture;\n\n  let fs = manager._irradianceMapFS;\n  if (!defined(fs)) {\n    fs = new ShaderSource({\n      sources: [ComputeIrradianceFS],\n    });\n    manager._irradianceMapFS = fs;\n  }\n\n  const command = new ComputeCommand({\n    fragmentShaderSource: fs,\n    outputTexture: texture,\n    owner: manager,\n    uniformMap: {\n      u_radianceMap: () => manager._radianceCubeMap ?? context.defaultTexture,\n    },\n  });\n\n  command.postExecute = () => {\n    if (manager.isDestroyed() || command.canceled) {\n      DynamicEnvironmentMapManager._activeComputeCommandCount--;\n      return;\n    }\n    manager._irradianceTextureDirty = false;\n    manager._irradianceComputeCommand = undefined;\n    manager._sphericalHarmonicCoefficientsDirty = true;\n    manager._irradianceMapFS = undefined;\n\n    DynamicEnvironmentMapManager._activeComputeCommandCount--;\n  };\n\n  manager._irradianceComputeCommand = command;\n  DynamicEnvironmentMapManager._queueCommand(command, frameState);\n  manager._irradianceTextureDirty = true;\n}\n\n/**\n * Copies coefficients from the output texture using readPixels.\n * @param {DynamicEnvironmentMapManager} manager this manager\n * @param {FrameState} frameState the current frameState\n * @private\n */\nfunction updateSphericalHarmonicCoefficients(manager, frameState) {\n  const context = frameState.context;\n\n  if (!defined(manager._irradianceMapTexture)) {\n    // Operation was canceled\n    return;\n  }\n\n  const framebuffer = new Framebuffer({\n    context: context,\n    colorTextures: [manager._irradianceMapTexture],\n    destroyAttachments: false,\n  });\n\n  const dimensions = irradianceTextureDimensions;\n  const data = context.readPixels({\n    x: 0,\n    y: 0,\n    width: dimensions.x,\n    height: dimensions.y,\n    framebuffer: framebuffer,\n  });\n\n  for (let i = 0; i < 9; ++i) {\n    manager._sphericalHarmonicCoefficients[i] = Cartesian3.unpack(data, i * 4);\n    Cartesian3.multiplyByScalar(\n      manager._sphericalHarmonicCoefficients[i],\n      manager.atmosphereScatteringIntensity,\n      manager._sphericalHarmonicCoefficients[i],\n    );\n  }\n\n  framebuffer.destroy();\n  manager._irradianceMapTexture.destroy();\n  manager._irradianceMapTexture = undefined;\n  manager._shouldRegenerateShaders = true;\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * build the resources for the environment maps.\n * <p>\n * Do not call this function directly.\n * </p>\n * @private\n */\nDynamicEnvironmentMapManager.prototype.update = function (frameState) {\n  const mode = frameState.mode;\n  const isSupported =\n    // @ts-expect-error A FrameState type works here because the function only references the context parameter.\n    DynamicEnvironmentMapManager.isDynamicUpdateSupported(frameState) &&\n    this._mipmapLevels >= 1;\n\n  if (\n    !isSupported ||\n    !this.enabled ||\n    !this.shouldUpdate ||\n    !defined(this._position) ||\n    mode === SceneMode.MORPHING\n  ) {\n    this._shouldRegenerateShaders = false;\n    return;\n  }\n\n  DynamicEnvironmentMapManager._updateCommandQueue(frameState);\n\n  const dynamicLighting = frameState.atmosphere.dynamicLighting;\n  const regenerateEnvironmentMap =\n    atmosphereNeedsUpdate(this, frameState) ||\n    (dynamicLighting === DynamicAtmosphereLightingType.SUNLIGHT &&\n      !JulianDate.equalsEpsilon(\n        frameState.time,\n        this._lastTime,\n        this.maximumSecondsDifference,\n      ));\n\n  if (this._shouldReset || regenerateEnvironmentMap) {\n    this.reset();\n    this._shouldReset = false;\n    this._lastTime = JulianDate.clone(frameState.time, this._lastTime);\n    return;\n  }\n\n  if (this._radianceMapDirty) {\n    updateRadianceMap(this, frameState);\n    this._radianceMapDirty = false;\n  }\n\n  if (this._convolutionsCommandsDirty) {\n    updateSpecularMaps(this, frameState);\n    this._convolutionsCommandsDirty = false;\n  }\n\n  if (this._irradianceCommandDirty) {\n    updateIrradianceResources(this, frameState);\n    this._irradianceCommandDirty = false;\n  }\n\n  if (this._irradianceTextureDirty) {\n    this._shouldRegenerateShaders = false;\n    return;\n  }\n\n  if (this._sphericalHarmonicCoefficientsDirty) {\n    updateSphericalHarmonicCoefficients(this, frameState);\n    this._sphericalHarmonicCoefficientsDirty = false;\n    return;\n  }\n\n  this._shouldRegenerateShaders = false;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n * @see DynamicEnvironmentMapManager#destroy\n */\nDynamicEnvironmentMapManager.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * @throws {DeveloperError} This object was destroyed, i.e., destroy() was called.\n * @example\n * mapManager = mapManager && mapManager.destroy();\n * @see DynamicEnvironmentMapManager#isDestroyed\n */\nDynamicEnvironmentMapManager.prototype.destroy = function () {\n  // Cancel in-progress commands\n  let length = this._radianceMapComputeCommands.length;\n  for (let i = 0; i < length; ++i) {\n    this._radianceMapComputeCommands[i] = undefined;\n  }\n\n  length = this._convolutionComputeCommands.length;\n  for (let i = 0; i < length; ++i) {\n    this._convolutionComputeCommands[i] = undefined;\n  }\n\n  this._irradianceMapComputeCommand = undefined;\n\n  // Destroy all textures\n  length = this._radianceMapTextures.length;\n  for (let i = 0; i < length; ++i) {\n    this._radianceMapTextures[i] =\n      this._radianceMapTextures[i] &&\n      !this._radianceMapTextures[i].isDestroyed() &&\n      this._radianceMapTextures[i].destroy();\n  }\n\n  length = this._specularMapTextures.length;\n  for (let i = 0; i < length; ++i) {\n    this._specularMapTextures[i] =\n      this._specularMapTextures[i] &&\n      !this._specularMapTextures[i].isDestroyed() &&\n      this._specularMapTextures[i].destroy();\n  }\n\n  this._radianceCubeMap =\n    this._radianceCubeMap && this._radianceCubeMap.destroy();\n  this._irradianceMapTexture =\n    this._irradianceMapTexture &&\n    !this._irradianceMapTexture.isDestroyed() &&\n    this._irradianceMapTexture.destroy();\n\n  if (defined(this._va)) {\n    this._va.destroy();\n  }\n\n  if (defined(this._convolveSP)) {\n    this._convolveSP.destroy();\n  }\n\n  return destroyObject(this);\n};\n\n/**\n * Returns <code>true</code> if dynamic updates are supported in the current WebGL rendering context.\n * Dynamic updates requires the EXT_color_buffer_float or EXT_color_buffer_half_float extension.\n *\n * @param {Scene} scene The object containing the rendering context\n * @returns {boolean} true if supported\n */\nDynamicEnvironmentMapManager.isDynamicUpdateSupported = function (scene) {\n  const context = scene.context;\n  return context.halfFloatingPointTexture || context.colorBufferFloat;\n};\n\n/**\n * Average hue of ground color on earth, a warm green-gray.\n * @type {Color}\n * @readonly\n */\nDynamicEnvironmentMapManager.AVERAGE_EARTH_GROUND_COLOR = Object.freeze(\n  Color.fromCssColorString(\"#717145\"),\n);\n\n/**\n * The default third order spherical harmonic coefficients used for the diffuse color of image-based lighting, a white ambient light with low intensity.\n * <p>\n * There are nine <code>Cartesian3</code> coefficients.\n * The order of the coefficients is: L<sub>0,0</sub>, L<sub>1,-1</sub>, L<sub>1,0</sub>, L<sub>1,1</sub>, L<sub>2,-2</sub>, L<sub>2,-1</sub>, L<sub>2,0</sub>, L<sub>2,1</sub>, L<sub>2,2</sub>\n * </p>\n * @readonly\n * @type {Cartesian3[]}\n * @see {@link https://graphics.stanford.edu/papers/envmap/envmap.pdf|An Efficient Representation for Irradiance Environment Maps}\n */\nDynamicEnvironmentMapManager.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS =\n  Object.freeze([\n    Object.freeze(new Cartesian3(0.35449, 0.35449, 0.35449)),\n    Cartesian3.ZERO,\n    Cartesian3.ZERO,\n    Cartesian3.ZERO,\n    Cartesian3.ZERO,\n    Cartesian3.ZERO,\n    Cartesian3.ZERO,\n    Cartesian3.ZERO,\n    Cartesian3.ZERO,\n  ]);\n\nexport default DynamicEnvironmentMapManager;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Color from \"../Core/Color.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\n\n/**\n * Creates and manages framebuffers for edge visibility rendering.\n *\n * @param {Object} options Object with the following properties:\n *\n * @alias EdgeFramebuffer\n * @constructor\n *\n * @private\n */\nfunction EdgeFramebuffer(options) {\n  options = options || {};\n\n  // Create framebuffer manager with multiple render targets (MRT)\n  // Color attachment 0: edge color output (visualization / debug)\n  // Color attachment 1: R: edge type, G: featureId (metadata / ids)\n  // Color attachment 2: packed depth (czm_packDepth) for edge fragments\n  this._framebufferManager = new FramebufferManager({\n    colorAttachmentsLength: 3, // MRT: Color + ID + Depth (packed RGBA)\n    createColorAttachments: true,\n    depthStencil: true,\n    supportsDepthTexture: true,\n    color: true,\n  });\n\n  this._framebuffer = undefined;\n  this._colorTexture = undefined;\n  this._idTexture = undefined;\n  this._depthTexture = undefined; // packed depth color attachment (location = 2)\n  this._depthStencilTexture = undefined;\n\n  this._clearCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    depth: 1.0,\n    stencil: 0,\n    owner: this,\n  });\n}\n\nObject.defineProperties(EdgeFramebuffer.prototype, {\n  /**\n   * Gets the framebuffer for edge rendering.\n   * @memberof EdgeFramebuffer.prototype\n   * @type {Framebuffer}\n   * @readonly\n   */\n  framebuffer: {\n    get: function () {\n      return this._framebuffer;\n    },\n  },\n\n  /**\n   * Gets the color texture.\n   * @memberof EdgeFramebuffer.prototype\n   * @type {Texture}\n   * @readonly\n   */\n  colorTexture: {\n    get: function () {\n      return this._colorTexture;\n    },\n  },\n\n  /**\n   * Gets the ID texture.\n   * @memberof EdgeFramebuffer.prototype\n   * @type {Texture}\n   * @readonly\n   */\n  idTexture: {\n    get: function () {\n      return this._idTexture;\n    },\n  },\n\n  /**\n   * Gets the packed depth texture written during the edge pass.\n   * @memberof EdgeFramebuffer.prototype\n   * @type {Texture}\n   * @readonly\n   */\n  depthTexture: {\n    get: function () {\n      return this._depthTexture;\n    },\n  },\n\n  /**\n   * Gets the depth-stencil texture.\n   * @memberof EdgeFramebuffer.prototype\n   * @type {Texture}\n   * @readonly\n   */\n  depthStencilTexture: {\n    get: function () {\n      return this._depthStencilTexture;\n    },\n  },\n});\n\n/**\n * Updates the framebuffer.\n *\n * @param {Context} context The context.\n * @param {Viewport} viewport The viewport.\n * @param {boolean} hdr Whether HDR is enabled.\n * @param {Texture} [existingColorTexture] Optional existing color texture to reuse.\n * @param {Texture} [existingDepthTexture] Optional existing depth texture to reuse.\n *\n * @returns {boolean} True if the framebuffer was updated; otherwise, false.\n */\nEdgeFramebuffer.prototype.update = function (\n  context,\n  viewport,\n  hdr,\n  existingColorTexture,\n  existingDepthTexture,\n) {\n  const width = viewport.width;\n  const height = viewport.height;\n\n  const pixelDatatype = hdr\n    ? context.halfFloatingPointTexture\n      ? PixelDatatype.HALF_FLOAT\n      : PixelDatatype.FLOAT\n    : PixelDatatype.UNSIGNED_BYTE;\n\n  const changed = this._framebufferManager.update(\n    context,\n    width,\n    height,\n    1, // No MSAA\n    pixelDatatype,\n    PixelFormat.RGBA,\n  );\n\n  // Always assign framebuffer if FramebufferManager has one\n  if (this._framebufferManager.framebuffer) {\n    this._framebuffer = this._framebufferManager.framebuffer;\n\n    // Get the textures from the framebuffer manager or use existing ones\n    this._colorTexture = defined(existingColorTexture)\n      ? existingColorTexture\n      : this._framebufferManager.getColorTexture(0); // Color attachment 0\n    this._idTexture = this._framebufferManager.getColorTexture(1); // Color attachment 1: ID texture\n    this._depthTexture = this._framebufferManager.getColorTexture(2); // Color attachment 2: packed depth\n    this._depthStencilTexture = defined(existingDepthTexture)\n      ? existingDepthTexture\n      : this._framebufferManager.getDepthStencilTexture();\n  }\n\n  return changed;\n};\n\n/**\n * Clears the framebuffer using ClearCommand.\n * @deprecated Use getClearCommand() instead for proper MRT clearing.\n *\n * @param {Context} context The context.\n * @param {PassState} passState The pass state.\n * @param {Color} clearColor The clear color.\n */\nEdgeFramebuffer.prototype.clear = function (context, passState, clearColor) {\n  const clearCommand = this.getClearCommand(clearColor);\n  clearCommand.execute(context, passState);\n};\n\n/**\n * Gets the clear command for this framebuffer.\n *\n * @param {Color} [clearColor] The clear color to use. If undefined, uses the default.\n * @returns {ClearCommand} The clear command.\n */\nEdgeFramebuffer.prototype.getClearCommand = function (clearColor) {\n  this._clearCommand.framebuffer = this._framebuffer;\n\n  if (defined(clearColor)) {\n    Color.clone(clearColor, this._clearCommand.color);\n  }\n\n  return this._clearCommand;\n};\n\n/**\n * Gets the edge framebuffer, creating it if necessary.\n *\n * @param {Context} context The context.\n * @param {Viewport} viewport The viewport.\n * @param {Texture} [existingColorTexture] Optional existing color texture to reuse.\n * @param {Texture} [existingDepthTexture] Optional existing depth texture to reuse.\n *\n * @returns {Framebuffer} The edge framebuffer.\n */\nEdgeFramebuffer.prototype.getFramebuffer = function (\n  context,\n  viewport,\n  existingColorTexture,\n  existingDepthTexture,\n) {\n  this.update(\n    context,\n    viewport,\n    false,\n    existingColorTexture,\n    existingDepthTexture,\n  );\n  return this._framebuffer;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nEdgeFramebuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nEdgeFramebuffer.prototype.destroy = function () {\n  this._framebufferManager =\n    this._framebufferManager && this._framebufferManager.destroy();\n  this._clearCommand = undefined;\n  return destroyObject(this);\n};\n\nexport default EdgeFramebuffer;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxGeometry from \"../Core/BoxGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport combine from \"../Core/combine.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport EllipsoidFS from \"../Shaders/EllipsoidFS.js\";\nimport EllipsoidVS from \"../Shaders/EllipsoidVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\nimport Material from \"./Material.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nconst attributeLocations = {\n  position: 0,\n};\n\n/**\n * A renderable ellipsoid.  It can also draw spheres when the three {@link EllipsoidPrimitive#radii} components are equal.\n * <p>\n * This is only supported in 3D.  The ellipsoid is not shown in 2D or Columbus view.\n * </p>\n *\n * @alias EllipsoidPrimitive\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The center of the ellipsoid in the ellipsoid's model coordinates.\n * @param {Cartesian3} [options.radii] The radius of the ellipsoid along the <code>x</code>, <code>y</code>, and <code>z</code> axes in the ellipsoid's model coordinates.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the ellipsoid from model to world coordinates.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Material} [options.material=Material.ColorType] The surface appearance of the primitive.\n * @param {object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick}\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n *\n * @private\n */\nfunction EllipsoidPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The center of the ellipsoid in the ellipsoid's model coordinates.\n   * <p>\n   * The default is {@link Cartesian3.ZERO}.\n   * </p>\n   *\n   * @type {Cartesian3}\n   * @default {@link Cartesian3.ZERO}\n   *\n   * @see EllipsoidPrimitive#modelMatrix\n   */\n  this.center = Cartesian3.clone(options.center ?? Cartesian3.ZERO);\n  this._center = new Cartesian3();\n\n  /**\n   * The radius of the ellipsoid along the <code>x</code>, <code>y</code>, and <code>z</code> axes in the ellipsoid's model coordinates.\n   * When these are the same, the ellipsoid is a sphere.\n   * <p>\n   * The default is <code>undefined</code>.  The ellipsoid is not drawn until a radii is provided.\n   * </p>\n   *\n   * @type {Cartesian3}\n   * @default undefined\n   *\n   *\n   * @example\n   * // A sphere with a radius of 2.0\n   * e.radii = new Cesium.Cartesian3(2.0, 2.0, 2.0);\n   *\n   * @see EllipsoidPrimitive#modelMatrix\n   */\n  this.radii = Cartesian3.clone(options.radii);\n  this._radii = new Cartesian3();\n\n  this._oneOverEllipsoidRadiiSquared = new Cartesian3();\n  this._boundingSphere = new BoundingSphere();\n\n  /**\n   * The 4x4 transformation matrix that transforms the ellipsoid from model to world coordinates.\n   * When this is the identity matrix, the ellipsoid is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * @type {Matrix4}\n   * @default {@link Matrix4.IDENTITY}\n   *\n   * @example\n   * const origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n   * e.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._modelMatrix = new Matrix4();\n  this._computedModelMatrix = new Matrix4();\n\n  /**\n   * Determines if the ellipsoid primitive will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * The surface appearance of the ellipsoid.  This can be one of several built-in {@link Material} objects or a custom material, scripted with\n   * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n   * <p>\n   * The default material is <code>Material.ColorType</code>.\n   * </p>\n   *\n   * @type {Material}\n   * @default Material.fromType(Material.ColorType)\n   *\n   *\n   * @example\n   * // 1. Change the color of the default material to yellow\n   * e.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);\n   *\n   * // 2. Change material to horizontal stripes\n   * e.material = Cesium.Material.fromType(Cesium.Material.StripeType);\n   *\n   * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n   */\n  this.material = options.material ?? Material.fromType(Material.ColorType);\n  this._material = undefined;\n  this._translucent = undefined;\n\n  /**\n   * User-defined object returned when the ellipsoid is picked.\n   *\n   * @type {object}\n   *\n   * @default undefined\n   *\n   * @see Scene#pick\n   */\n  this.id = options.id;\n  this._id = undefined;\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * @private\n   */\n  this.onlySunLighting = options.onlySunLighting ?? false;\n  this._onlySunLighting = false;\n\n  /**\n   * @private\n   */\n  this._depthTestEnabled = options.depthTestEnabled ?? true;\n\n  this._useLogDepth = false;\n\n  this._sp = undefined;\n  this._rs = undefined;\n  this._va = undefined;\n\n  this._pickSP = undefined;\n  this._pickId = undefined;\n\n  this._colorCommand = new DrawCommand({\n    owner: options._owner ?? this,\n  });\n  this._pickCommand = new DrawCommand({\n    owner: options._owner ?? this,\n    pickOnly: true,\n  });\n\n  const that = this;\n  this._uniforms = {\n    u_radii: function () {\n      return that.radii;\n    },\n    u_oneOverEllipsoidRadiiSquared: function () {\n      return that._oneOverEllipsoidRadiiSquared;\n    },\n  };\n\n  this._pickUniforms = {\n    czm_pickColor: function () {\n      return that._pickId.color;\n    },\n  };\n}\n\nfunction getVertexArray(context) {\n  let vertexArray = context.cache.ellipsoidPrimitive_vertexArray;\n\n  if (defined(vertexArray)) {\n    return vertexArray;\n  }\n\n  const geometry = BoxGeometry.createGeometry(\n    BoxGeometry.fromDimensions({\n      dimensions: new Cartesian3(2.0, 2.0, 2.0),\n      vertexFormat: VertexFormat.POSITION_ONLY,\n    }),\n  );\n\n  vertexArray = VertexArray.fromGeometry({\n    context: context,\n    geometry: geometry,\n    attributeLocations: attributeLocations,\n    bufferUsage: BufferUsage.STATIC_DRAW,\n    interleave: true,\n  });\n\n  context.cache.ellipsoidPrimitive_vertexArray = vertexArray;\n  return vertexArray;\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} this.material must be defined.\n */\nEllipsoidPrimitive.prototype.update = function (frameState) {\n  if (\n    !this.show ||\n    frameState.mode !== SceneMode.SCENE3D ||\n    !defined(this.center) ||\n    !defined(this.radii)\n  ) {\n    return;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(this.material)) {\n    throw new DeveloperError(\"this.material must be defined.\");\n  }\n  //>>includeEnd('debug');\n\n  const context = frameState.context;\n  const translucent = this.material.isTranslucent();\n  const translucencyChanged = this._translucent !== translucent;\n\n  if (!defined(this._rs) || translucencyChanged) {\n    this._translucent = translucent;\n\n    // If this render state is ever updated to use a non-default\n    // depth range, the hard-coded values in EllipsoidVS.glsl need\n    // to be updated as well.\n\n    this._rs = RenderState.fromCache({\n      // Cull front faces - not back faces - so the ellipsoid doesn't\n      // disappear if the viewer enters the bounding box.\n      cull: {\n        enabled: true,\n        face: CullFace.FRONT,\n      },\n      depthTest: {\n        enabled: this._depthTestEnabled,\n      },\n      // Only write depth when EXT_frag_depth is supported since the depth for\n      // the bounding box is wrong; it is not the true depth of the ray casted ellipsoid.\n      depthMask: !translucent && context.fragmentDepth,\n      blending: translucent ? BlendingState.ALPHA_BLEND : undefined,\n    });\n  }\n\n  if (!defined(this._va)) {\n    this._va = getVertexArray(context);\n  }\n\n  let boundingSphereDirty = false;\n\n  const radii = this.radii;\n  if (!Cartesian3.equals(this._radii, radii)) {\n    Cartesian3.clone(radii, this._radii);\n\n    const r = this._oneOverEllipsoidRadiiSquared;\n    r.x = 1.0 / (radii.x * radii.x);\n    r.y = 1.0 / (radii.y * radii.y);\n    r.z = 1.0 / (radii.z * radii.z);\n\n    boundingSphereDirty = true;\n  }\n\n  if (\n    !Matrix4.equals(this.modelMatrix, this._modelMatrix) ||\n    !Cartesian3.equals(this.center, this._center)\n  ) {\n    Matrix4.clone(this.modelMatrix, this._modelMatrix);\n    Cartesian3.clone(this.center, this._center);\n\n    // Translate model coordinates used for rendering such that the origin is the center of the ellipsoid.\n    Matrix4.multiplyByTranslation(\n      this.modelMatrix,\n      this.center,\n      this._computedModelMatrix,\n    );\n    boundingSphereDirty = true;\n  }\n\n  if (boundingSphereDirty) {\n    Cartesian3.clone(Cartesian3.ZERO, this._boundingSphere.center);\n    this._boundingSphere.radius = Cartesian3.maximumComponent(radii);\n    BoundingSphere.transform(\n      this._boundingSphere,\n      this._computedModelMatrix,\n      this._boundingSphere,\n    );\n  }\n\n  const materialChanged = this._material !== this.material;\n  this._material = this.material;\n  this._material.update(context);\n\n  const lightingChanged = this.onlySunLighting !== this._onlySunLighting;\n  this._onlySunLighting = this.onlySunLighting;\n\n  const useLogDepth = frameState.useLogDepth;\n  const useLogDepthChanged = this._useLogDepth !== useLogDepth;\n  this._useLogDepth = useLogDepth;\n\n  const colorCommand = this._colorCommand;\n  let vs;\n  let fs;\n\n  // Recompile shader when material, lighting, or translucency changes\n  if (\n    materialChanged ||\n    lightingChanged ||\n    translucencyChanged ||\n    useLogDepthChanged\n  ) {\n    vs = new ShaderSource({\n      sources: [EllipsoidVS],\n    });\n    fs = new ShaderSource({\n      sources: [this.material.shaderSource, EllipsoidFS],\n    });\n    if (this.onlySunLighting) {\n      fs.defines.push(\"ONLY_SUN_LIGHTING\");\n    }\n    if (!translucent && context.fragmentDepth) {\n      fs.defines.push(\"WRITE_DEPTH\");\n    }\n    if (this._useLogDepth) {\n      vs.defines.push(\"LOG_DEPTH\");\n      fs.defines.push(\"LOG_DEPTH\");\n    }\n\n    this._sp = ShaderProgram.replaceCache({\n      context: context,\n      shaderProgram: this._sp,\n      vertexShaderSource: vs,\n      fragmentShaderSource: fs,\n      attributeLocations: attributeLocations,\n    });\n\n    colorCommand.vertexArray = this._va;\n    colorCommand.renderState = this._rs;\n    colorCommand.shaderProgram = this._sp;\n    colorCommand.uniformMap = combine(this._uniforms, this.material._uniforms);\n    colorCommand.executeInClosestFrustum = translucent;\n  }\n\n  const commandList = frameState.commandList;\n  const passes = frameState.passes;\n\n  if (passes.render) {\n    colorCommand.boundingVolume = this._boundingSphere;\n    colorCommand.debugShowBoundingVolume = this.debugShowBoundingVolume;\n    colorCommand.modelMatrix = this._computedModelMatrix;\n    colorCommand.pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n\n    commandList.push(colorCommand);\n  }\n\n  if (passes.pick) {\n    const pickCommand = this._pickCommand;\n\n    if (!defined(this._pickId) || this._id !== this.id) {\n      this._id = this.id;\n      this._pickId = this._pickId && this._pickId.destroy();\n      this._pickId = context.createPickId({\n        primitive: this,\n        id: this.id,\n      });\n    }\n\n    // Recompile shader when material changes\n    if (\n      materialChanged ||\n      lightingChanged ||\n      !defined(this._pickSP) ||\n      useLogDepthChanged\n    ) {\n      vs = new ShaderSource({\n        sources: [EllipsoidVS],\n      });\n      fs = new ShaderSource({\n        sources: [this.material.shaderSource, EllipsoidFS],\n        pickColorQualifier: \"uniform\",\n      });\n      if (this.onlySunLighting) {\n        fs.defines.push(\"ONLY_SUN_LIGHTING\");\n      }\n      if (!translucent && context.fragmentDepth) {\n        fs.defines.push(\"WRITE_DEPTH\");\n      }\n      if (this._useLogDepth) {\n        vs.defines.push(\"LOG_DEPTH\");\n        fs.defines.push(\"LOG_DEPTH\");\n      }\n\n      this._pickSP = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._pickSP,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n\n      pickCommand.vertexArray = this._va;\n      pickCommand.renderState = this._rs;\n      pickCommand.shaderProgram = this._pickSP;\n      pickCommand.uniformMap = combine(\n        combine(this._uniforms, this._pickUniforms),\n        this.material._uniforms,\n      );\n      pickCommand.executeInClosestFrustum = translucent;\n    }\n\n    pickCommand.boundingVolume = this._boundingSphere;\n    pickCommand.modelMatrix = this._computedModelMatrix;\n    pickCommand.pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n\n    commandList.push(pickCommand);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see EllipsoidPrimitive#destroy\n */\nEllipsoidPrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * e = e && e.destroy();\n *\n * @see EllipsoidPrimitive#isDestroyed\n */\nEllipsoidPrimitive.prototype.destroy = function () {\n  this._sp = this._sp && this._sp.destroy();\n  this._pickSP = this._pickSP && this._pickSP.destroy();\n  this._pickId = this._pickId && this._pickId.destroy();\n  return destroyObject(this);\n};\nexport default EllipsoidPrimitive;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport EllipsoidSurfaceAppearanceFS from \"../Shaders/Appearances/EllipsoidSurfaceAppearanceFS.js\";\nimport EllipsoidSurfaceAppearanceVS from \"../Shaders/Appearances/EllipsoidSurfaceAppearanceVS.js\";\nimport Appearance from \"./Appearance.js\";\nimport Material from \"./Material.js\";\n\n/**\n * An appearance for geometry on the surface of the ellipsoid like {@link PolygonGeometry}\n * and {@link RectangleGeometry}, which supports all materials like {@link MaterialAppearance}\n * with {@link MaterialAppearance.MaterialSupport.ALL}.  However, this appearance requires\n * fewer vertex attributes since the fragment shader can procedurally compute <code>normal</code>,\n * <code>tangent</code>, and <code>bitangent</code>.\n *\n * @alias EllipsoidSurfaceAppearance\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.flat=false] When <code>true</code>, flat shading is used in the fragment shader, which means lighting is not taking into account.\n * @param {boolean} [options.faceForward=options.aboveGround] When <code>true</code>, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots.  This is useful when both sides of a geometry should be shaded like {@link WallGeometry}.\n * @param {boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link EllipsoidSurfaceAppearance#renderState} has alpha blending enabled.\n * @param {boolean} [options.aboveGround=false] When <code>true</code>, the geometry is expected to be on the ellipsoid's surface - not at a constant height above it - so {@link EllipsoidSurfaceAppearance#renderState} has backface culling enabled.\n * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n * @param {string} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {string} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {object} [options.renderState] Optional render state to override the default render state.\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n *\n * @example\n * const primitive = new Cesium.Primitive({\n *   geometryInstances : new Cesium.GeometryInstance({\n *     geometry : new Cesium.PolygonGeometry({\n *       vertexFormat : Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,\n *       // ...\n *     })\n *   }),\n *   appearance : new Cesium.EllipsoidSurfaceAppearance({\n *     material : Cesium.Material.fromType('Stripe')\n *   })\n * });\n */\nfunction EllipsoidSurfaceAppearance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const translucent = options.translucent ?? true;\n  const aboveGround = options.aboveGround ?? false;\n\n  /**\n   * The material used to determine the fragment color.  Unlike other {@link EllipsoidSurfaceAppearance}\n   * properties, this is not read-only, so an appearance's material can change on the fly.\n   *\n   * @type Material\n   *\n   * @default {@link Material.ColorType}\n   *\n   * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n   */\n  this.material = defined(options.material)\n    ? options.material\n    : Material.fromType(Material.ColorType);\n\n  /**\n   * When <code>true</code>, the geometry is expected to appear translucent.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.translucent = options.translucent ?? true;\n\n  this._vertexShaderSource =\n    options.vertexShaderSource ?? EllipsoidSurfaceAppearanceVS;\n  this._fragmentShaderSource =\n    options.fragmentShaderSource ?? EllipsoidSurfaceAppearanceFS;\n  this._renderState = Appearance.getDefaultRenderState(\n    translucent,\n    !aboveGround,\n    options.renderState,\n  );\n  this._closed = false;\n\n  // Non-derived members\n\n  this._flat = options.flat ?? false;\n  this._faceForward = options.faceForward ?? aboveGround;\n  this._aboveGround = aboveGround;\n}\n\nObject.defineProperties(EllipsoidSurfaceAppearance.prototype, {\n  /**\n   * The GLSL source code for the vertex shader.\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      return this._vertexShaderSource;\n    },\n  },\n\n  /**\n   * The GLSL source code for the fragment shader.  The full fragment shader\n   * source is built procedurally taking into account {@link EllipsoidSurfaceAppearance#material},\n   * {@link EllipsoidSurfaceAppearance#flat}, and {@link EllipsoidSurfaceAppearance#faceForward}.\n   * Use {@link EllipsoidSurfaceAppearance#getFragmentShaderSource} to get the full source.\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n\n  /**\n   * The WebGL fixed-function state to use when rendering the geometry.\n   * <p>\n   * The render state can be explicitly defined when constructing a {@link EllipsoidSurfaceAppearance}\n   * instance, or it is set implicitly via {@link EllipsoidSurfaceAppearance#translucent}\n   * and {@link EllipsoidSurfaceAppearance#aboveGround}.\n   * </p>\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be closed so\n   * {@link EllipsoidSurfaceAppearance#renderState} has backface culling enabled.\n   * If the viewer enters the geometry, it will not be visible.\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  closed: {\n    get: function () {\n      return this._closed;\n    },\n  },\n\n  /**\n   * The {@link VertexFormat} that this appearance instance is compatible with.\n   * A geometry can have more vertex attributes and still be compatible - at a\n   * potential performance cost - but it can't have less.\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type VertexFormat\n   * @readonly\n   *\n   * @default {@link EllipsoidSurfaceAppearance.VERTEX_FORMAT}\n   */\n  vertexFormat: {\n    get: function () {\n      return EllipsoidSurfaceAppearance.VERTEX_FORMAT;\n    },\n  },\n\n  /**\n   * When <code>true</code>, flat shading is used in the fragment shader,\n   * which means lighting is not taking into account.\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  flat: {\n    get: function () {\n      return this._flat;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the fragment shader flips the surface normal\n   * as needed to ensure that the normal faces the viewer to avoid\n   * dark spots.  This is useful when both sides of a geometry should be\n   * shaded like {@link WallGeometry}.\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  faceForward: {\n    get: function () {\n      return this._faceForward;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be on the ellipsoid's\n   * surface - not at a constant height above it - so {@link EllipsoidSurfaceAppearance#renderState}\n   * has backface culling enabled.\n   *\n   *\n   * @memberof EllipsoidSurfaceAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  aboveGround: {\n    get: function () {\n      return this._aboveGround;\n    },\n  },\n});\n\n/**\n * The {@link VertexFormat} that all {@link EllipsoidSurfaceAppearance} instances\n * are compatible with, which requires only <code>position</code> and <code>st</code>\n * attributes.  Other attributes are procedurally computed in the fragment shader.\n *\n * @type VertexFormat\n *\n * @constant\n */\nEllipsoidSurfaceAppearance.VERTEX_FORMAT = VertexFormat.POSITION_AND_ST;\n\n/**\n * Procedurally creates the full GLSL fragment shader source.  For {@link EllipsoidSurfaceAppearance},\n * this is derived from {@link EllipsoidSurfaceAppearance#fragmentShaderSource}, {@link EllipsoidSurfaceAppearance#flat},\n * and {@link EllipsoidSurfaceAppearance#faceForward}.\n *\n * @function\n *\n * @returns {string} The full GLSL fragment shader source.\n */\nEllipsoidSurfaceAppearance.prototype.getFragmentShaderSource =\n  Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link EllipsoidSurfaceAppearance#translucent} and {@link Material#isTranslucent}.\n *\n * @function\n *\n * @returns {boolean} <code>true</code> if the appearance is translucent.\n */\nEllipsoidSurfaceAppearance.prototype.isTranslucent =\n  Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state.  This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {object} The render state.\n */\nEllipsoidSurfaceAppearance.prototype.getRenderState =\n  Appearance.prototype.getRenderState;\nexport default EllipsoidSurfaceAppearance;\n","import destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Represents empty content for tiles in a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles} tileset that\n * do not have content, e.g., because they are used to optimize hierarchical culling.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Empty3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Empty3DTileContent(tileset, tile) {\n  this._tileset = tileset;\n  this._tile = tile;\n\n  this.featurePropertiesDirty = false;\n}\n\nObject.defineProperties(Empty3DTileContent.prototype, {\n  featuresLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  pointsLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  trianglesLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  geometryByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  texturesByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  batchTableByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Empty3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return true;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  url: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  metadata: {\n    get: function () {\n      return undefined;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\n        \"Empty3DTileContent cannot have content metadata\",\n      );\n      //>>includeEnd('debug');\n    },\n  },\n\n  batchTable: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  group: {\n    get: function () {\n      return undefined;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\"Empty3DTileContent cannot have group metadata\");\n      //>>includeEnd('debug');\n    },\n  },\n});\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Empty3DTileContent</code>\n * always returns <code>false</code> since a tile of this type does not have any features.\n */\nEmpty3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Empty3DTileContent</code>\n * always returns <code>undefined</code> since a tile of this type does not have any features.\n */\nEmpty3DTileContent.prototype.getFeature = function (batchId) {\n  return undefined;\n};\n\nEmpty3DTileContent.prototype.applyDebugSettings = function (enabled, color) {};\n\nEmpty3DTileContent.prototype.applyStyle = function (style) {};\n\nEmpty3DTileContent.prototype.update = function (tileset, frameState) {};\n\nEmpty3DTileContent.prototype.pick = function (ray, frameState, result) {\n  return undefined;\n};\n\nEmpty3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nEmpty3DTileContent.prototype.destroy = function () {\n  return destroyObject(this);\n};\nexport default Empty3DTileContent;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport SphereGeometry from \"../Core/SphereGeometry.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Material from \"./Material.js\";\nimport MaterialAppearance from \"./MaterialAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\n\nconst DEFAULT_RADIUS = 100000.0;\n\n/**\n * @typedef {object} EquirectangularPanorama.ConstructorOptions\n *\n * Initialization options for the EquirectangularPanorama constructor\n *\n * @property {Matrix4} options.transform A 4x4 transformation matrix that defines the panorama’s position and orientation\n * (for example, derived from a position and heading-pitch-roll).\n * @property {string|HTMLImageElement|HTMLCanvasElement|ImageBitmap} options.image A URL to an image resource, or a preloaded image object.\n * @property {number} [options.radius=100000.0] The radius of the panorama in meters.\n * @property {number} [options.repeatHorizontal=1.0] The number of times to repeat the texture horizontally.\n * @property {number} [options.repeatVertical=1.0] The number of times to repeat the texture vertically.\n * @property {Credit|string} [options.credit] A credit for the panorama, which is displayed on the canvas.\n */\n\n/**\n * A {@link Panorama} that displays imagery in equirectangular format in a scene.\n *\n * @alias EquirectangularPanorama\n * @constructor\n *\n * @param {EquirectangularPanorama.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * const position = Cesium.Cartesian3.fromDegrees(\n *   -75.1699,  // longitude\n *   39.9522,   // latitude\n *   100.0      // height in meters\n * );\n *\n * const heading = Cesium.Math.toRadians(45.0); // rotation about up axis\n * const pitch = Cesium.Math.toRadians(-30.0);   // pitch (negative looks down)\n * const roll = Cesium.Math.toRadians(10.0);    // roll about forward axis\n *\n * const hpr = new Cesium.HeadingPitchRoll(\n *   heading,\n *   pitch,\n *   roll\n * );\n *\n * const modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(\n *   position,\n *   hpr,\n *   Cesium.Ellipsoid.WGS84,\n *   Cesium.Transforms.eastNorthUpToFixedFrame\n * );\n *\n * scene.primitives.add(new Cesium.EquirectangularPanorama({\n *   transform: modelMatrix,\n *   image: 'path/to/image',\n * }));\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=panorama|Cesium Sandcastle Panorama}\n */\nfunction EquirectangularPanorama(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.image)) {\n    throw new DeveloperError(\"options.image is required.\");\n  }\n\n  if (defined(options.transform) && !(options.transform instanceof Matrix4)) {\n    throw new DeveloperError(\"options.transform must be a Matrix4.\");\n  }\n  //>>includeEnd('debug');\n\n  // Credit specified by the user.\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n\n  this._radius = defined(options.radius) ? options.radius : DEFAULT_RADIUS;\n  this._image = options.image;\n  this._transform = defined(options.transform)\n    ? options.transform\n    : Matrix4.IDENTITY;\n  this._repeatHorizontal = defined(options.repeatHorizontal)\n    ? options.repeatHorizontal\n    : 1.0;\n  this._repeatVertical = defined(options.repeatVertical)\n    ? options.repeatVertical\n    : 1.0;\n\n  const geometry = new SphereGeometry({\n    radius: this._radius,\n    vertexFormat: VertexFormat.ALL,\n  });\n\n  const geometryInstance = new GeometryInstance({\n    geometry: geometry,\n    modelMatrix: this._transform,\n  });\n\n  const equirectangularMaterial = new Material({\n    fabric: {\n      type: \"Image\",\n      uniforms: {\n        image: this._image, // 2:1 360 degrees equirectangular image path\n        repeat: new Cartesian2(-this._repeatHorizontal, this._repeatVertical), // flip horizontally by default to match expected orientation of images inside a sphere, but allow user to override\n      },\n    },\n  });\n\n  // Create the primitive with the material\n  this._primitive = new Primitive({\n    geometryInstances: geometryInstance,\n    appearance: new MaterialAppearance({\n      material: equirectangularMaterial,\n      closed: true,\n      faceForward: false,\n      translucent: false,\n      renderState: {\n        cull: {\n          enabled: false, // show inside of sphere\n        },\n      },\n    }),\n    credit: this._credit,\n  });\n\n  return this;\n}\n\nObject.defineProperties(EquirectangularPanorama.prototype, {\n  /**\n   * Gets the radius of the panorama.\n   * @memberof EquirectangularPanorama.prototype\n   * @type {number}\n   * @readonly\n   */\n  radius: {\n    get: function () {\n      return this._radius;\n    },\n  },\n\n  /**\n   * Gets the source image of the panorama.\n   * @memberof EquirectangularPanorama.prototype\n   * @type {string|HTMLImageElement|HTMLCanvasElement|ImageBitmap}\n   * @readonly\n   */\n  image: {\n    get: function () {\n      return this._image;\n    },\n  },\n\n  /**\n   * Gets the transform of the panorama.\n   * @memberof EquirectangularPanorama.prototype\n   * @type {Matrix4}\n   * @readonly\n   */\n  transform: {\n    get: function () {\n      return this._transform;\n    },\n  },\n\n  /**\n   * Gets the credits of the panorama.\n   * @memberof EquirectangularPanorama.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return defined(this._credit) ? this._credit : undefined;\n    },\n  },\n\n  /**\n   * Determines if the equirectangular panorama will be shown.\n   * @memberof EquirectangularPanorama.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return defined(this._primitive) ? this._primitive.show : undefined;\n    },\n    set: function (value) {\n      if (defined(this._primitive)) {\n        this._primitive.show = value;\n      }\n    },\n  },\n});\n\n// Proxy update/destroy/etc to the primitive\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n */\nEquirectangularPanorama.prototype.update = function (frameState) {\n  if (defined(this._credit)) {\n    frameState.creditDisplay.addCreditToNextFrame(this._credit);\n  }\n\n  return this._primitive.update(frameState);\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * equirectangularPanorama = equirectangularPanorama && equirectangularPanorama.destroy();\n *\n * @see EquirectangularPanorama#isDestroyed\n */\nEquirectangularPanorama.prototype.destroy = function () {\n  this._primitive = this._primitive && this._primitive.destroy();\n  return destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see EquirectangularPanorama#destroy\n */\n\nEquirectangularPanorama.prototype.isDestroyed = function () {\n  return this._primitive.isDestroyed();\n};\n\n// Exposed for tests\nexport default EquirectangularPanorama;\n","/**\n * @implements {IHooks}\n */\nclass Hooks {\n\t/**\n\t * @callback HookCallback\n\t * @this {*|Jsep} this\n\t * @param {Jsep} env\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given callback to the list of callbacks for the given hook.\n\t *\n\t * The callback will be invoked when the hook it is registered for is run.\n\t *\n\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t *\n\t * @param {string|object} name The name of the hook, or an object of callbacks keyed by name\n\t * @param {HookCallback|boolean} callback The callback function which is given environment variables.\n\t * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)\n\t * @public\n\t */\n\tadd(name, callback, first) {\n\t\tif (typeof arguments[0] != 'string') {\n\t\t\t// Multiple hook callbacks, keyed by name\n\t\t\tfor (let name in arguments[0]) {\n\t\t\t\tthis.add(name, arguments[0][name], arguments[1]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t(Array.isArray(name) ? name : [name]).forEach(function (name) {\n\t\t\t\tthis[name] = this[name] || [];\n\n\t\t\t\tif (callback) {\n\t\t\t\t\tthis[name][first ? 'unshift' : 'push'](callback);\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t}\n\n\t/**\n\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t *\n\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t *\n\t * @param {string} name The name of the hook.\n\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t * @public\n\t */\n\trun(name, env) {\n\t\tthis[name] = this[name] || [];\n\t\tthis[name].forEach(function (callback) {\n\t\t\tcallback.call(env && env.context ? env.context : env, env);\n\t\t});\n\t}\n}\n\n/**\n * @implements {IPlugins}\n */\nclass Plugins {\n\tconstructor(jsep) {\n\t\tthis.jsep = jsep;\n\t\tthis.registered = {};\n\t}\n\n\t/**\n\t * @callback PluginSetup\n\t * @this {Jsep} jsep\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given plugin(s) to the registry\n\t *\n\t * @param {object} plugins\n\t * @param {string} plugins.name The name of the plugin\n\t * @param {PluginSetup} plugins.init The init function\n\t * @public\n\t */\n\tregister(...plugins) {\n\t\tplugins.forEach((plugin) => {\n\t\t\tif (typeof plugin !== 'object' || !plugin.name || !plugin.init) {\n\t\t\t\tthrow new Error('Invalid JSEP plugin format');\n\t\t\t}\n\t\t\tif (this.registered[plugin.name]) {\n\t\t\t\t// already registered. Ignore.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tplugin.init(this.jsep);\n\t\t\tthis.registered[plugin.name] = plugin;\n\t\t});\n\t}\n}\n\n//     JavaScript Expression Parser (JSEP) 1.4.0\n\nclass Jsep {\n\t/**\n\t * @returns {string}\n\t */\n\tstatic get version() {\n\t\t// To be filled in by the template\n\t\treturn '1.4.0';\n\t}\n\n\t/**\n\t * @returns {string}\n\t */\n\tstatic toString() {\n\t\treturn 'JavaScript Expression Parser (JSEP) v' + Jsep.version;\n\t};\n\n\t// ==================== CONFIG ================================\n\t/**\n\t * @method addUnaryOp\n\t * @param {string} op_name The name of the unary op to add\n\t * @returns {Jsep}\n\t */\n\tstatic addUnaryOp(op_name) {\n\t\tJsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);\n\t\tJsep.unary_ops[op_name] = 1;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method jsep.addBinaryOp\n\t * @param {string} op_name The name of the binary op to add\n\t * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence\n\t * @param {boolean} [isRightAssociative=false] whether operator is right-associative\n\t * @returns {Jsep}\n\t */\n\tstatic addBinaryOp(op_name, precedence, isRightAssociative) {\n\t\tJsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);\n\t\tJsep.binary_ops[op_name] = precedence;\n\t\tif (isRightAssociative) {\n\t\t\tJsep.right_associative.add(op_name);\n\t\t}\n\t\telse {\n\t\t\tJsep.right_associative.delete(op_name);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addIdentifierChar\n\t * @param {string} char The additional character to treat as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic addIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.add(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addLiteral\n\t * @param {string} literal_name The name of the literal to add\n\t * @param {*} literal_value The value of the literal\n\t * @returns {Jsep}\n\t */\n\tstatic addLiteral(literal_name, literal_value) {\n\t\tJsep.literals[literal_name] = literal_value;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeUnaryOp\n\t * @param {string} op_name The name of the unary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeUnaryOp(op_name) {\n\t\tdelete Jsep.unary_ops[op_name];\n\t\tif (op_name.length === Jsep.max_unop_len) {\n\t\t\tJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllUnaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllUnaryOps() {\n\t\tJsep.unary_ops = {};\n\t\tJsep.max_unop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeIdentifierChar\n\t * @param {string} char The additional character to stop treating as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic removeIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.delete(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeBinaryOp\n\t * @param {string} op_name The name of the binary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeBinaryOp(op_name) {\n\t\tdelete Jsep.binary_ops[op_name];\n\n\t\tif (op_name.length === Jsep.max_binop_len) {\n\t\t\tJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\t\t}\n\t\tJsep.right_associative.delete(op_name);\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllBinaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllBinaryOps() {\n\t\tJsep.binary_ops = {};\n\t\tJsep.max_binop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeLiteral\n\t * @param {string} literal_name The name of the literal to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeLiteral(literal_name) {\n\t\tdelete Jsep.literals[literal_name];\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllLiterals\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllLiterals() {\n\t\tJsep.literals = {};\n\n\t\treturn Jsep;\n\t}\n\t// ==================== END CONFIG ============================\n\n\n\t/**\n\t * @returns {string}\n\t */\n\tget char() {\n\t\treturn this.expr.charAt(this.index);\n\t}\n\n\t/**\n\t * @returns {number}\n\t */\n\tget code() {\n\t\treturn this.expr.charCodeAt(this.index);\n\t};\n\n\n\t/**\n\t * @param {string} expr a string with the passed in express\n\t * @returns Jsep\n\t */\n\tconstructor(expr) {\n\t\t// `index` stores the character number we are currently at\n\t\t// All of the gobbles below will modify `index` as we move along\n\t\tthis.expr = expr;\n\t\tthis.index = 0;\n\t}\n\n\t/**\n\t * static top-level parser\n\t * @returns {jsep.Expression}\n\t */\n\tstatic parse(expr) {\n\t\treturn (new Jsep(expr)).parse();\n\t}\n\n\t/**\n\t * Get the longest key length of any object\n\t * @param {object} obj\n\t * @returns {number}\n\t */\n\tstatic getMaxKeyLen(obj) {\n\t\treturn Math.max(0, ...Object.keys(obj).map(k => k.length));\n\t}\n\n\t/**\n\t * `ch` is a character code in the next three functions\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isDecimalDigit(ch) {\n\t\treturn (ch >= 48 && ch <= 57); // 0...9\n\t}\n\n\t/**\n\t * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.\n\t * @param {string} op_val\n\t * @returns {number}\n\t */\n\tstatic binaryPrecedence(op_val) {\n\t\treturn Jsep.binary_ops[op_val] || 0;\n\t}\n\n\t/**\n\t * Looks for start of identifier\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierStart(ch) {\n\t\treturn  (ch >= 65 && ch <= 90) || // A...Z\n\t\t\t(ch >= 97 && ch <= 122) || // a...z\n\t\t\t(ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)]) || // any non-ASCII that is not an operator\n\t\t\t(Jsep.additional_identifier_chars.has(String.fromCharCode(ch))); // additional characters\n\t}\n\n\t/**\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierPart(ch) {\n\t\treturn Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);\n\t}\n\n\t/**\n\t * throw error at index of the expression\n\t * @param {string} message\n\t * @throws\n\t */\n\tthrowError(message) {\n\t\tconst error = new Error(message + ' at character ' + this.index);\n\t\terror.index = this.index;\n\t\terror.description = message;\n\t\tthrow error;\n\t}\n\n\t/**\n\t * Run a given hook\n\t * @param {string} name\n\t * @param {jsep.Expression|false} [node]\n\t * @returns {?jsep.Expression}\n\t */\n\trunHook(name, node) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this, node };\n\t\t\tJsep.hooks.run(name, env);\n\t\t\treturn env.node;\n\t\t}\n\t\treturn node;\n\t}\n\n\t/**\n\t * Runs a given hook until one returns a node\n\t * @param {string} name\n\t * @returns {?jsep.Expression}\n\t */\n\tsearchHook(name) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this };\n\t\t\tJsep.hooks[name].find(function (callback) {\n\t\t\t\tcallback.call(env.context, env);\n\t\t\t\treturn env.node;\n\t\t\t});\n\t\t\treturn env.node;\n\t\t}\n\t}\n\n\t/**\n\t * Push `index` up to the next non-space character\n\t */\n\tgobbleSpaces() {\n\t\tlet ch = this.code;\n\t\t// Whitespace\n\t\twhile (ch === Jsep.SPACE_CODE\n\t\t|| ch === Jsep.TAB_CODE\n\t\t|| ch === Jsep.LF_CODE\n\t\t|| ch === Jsep.CR_CODE) {\n\t\t\tch = this.expr.charCodeAt(++this.index);\n\t\t}\n\t\tthis.runHook('gobble-spaces');\n\t}\n\n\t/**\n\t * Top-level method to parse all expressions and returns compound or single node\n\t * @returns {jsep.Expression}\n\t */\n\tparse() {\n\t\tthis.runHook('before-all');\n\t\tconst nodes = this.gobbleExpressions();\n\n\t\t// If there's only one expression just try returning the expression\n\t\tconst node = nodes.length === 1\n\t\t  ? nodes[0]\n\t\t\t: {\n\t\t\t\ttype: Jsep.COMPOUND,\n\t\t\t\tbody: nodes\n\t\t\t};\n\t\treturn this.runHook('after-all', node);\n\t}\n\n\t/**\n\t * top-level parser (but can be reused within as well)\n\t * @param {number} [untilICode]\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleExpressions(untilICode) {\n\t\tlet nodes = [], ch_i, node;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch_i = this.code;\n\n\t\t\t// Expressions can be separated by semicolons, commas, or just inferred without any\n\t\t\t// separators\n\t\t\tif (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {\n\t\t\t\tthis.index++; // ignore separators\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Try to gobble each expression individually\n\t\t\t\tif (node = this.gobbleExpression()) {\n\t\t\t\t\tnodes.push(node);\n\t\t\t\t\t// If we weren't able to find a binary expression and are out of room, then\n\t\t\t\t\t// the expression passed in probably has too much\n\t\t\t\t}\n\t\t\t\telse if (this.index < this.expr.length) {\n\t\t\t\t\tif (ch_i === untilICode) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\t/**\n\t * The main parsing function.\n\t * @returns {?jsep.Expression}\n\t */\n\tgobbleExpression() {\n\t\tconst node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();\n\t\tthis.gobbleSpaces();\n\n\t\treturn this.runHook('after-expression', node);\n\t}\n\n\t/**\n\t * Search for the operation portion of the string (e.g. `+`, `===`)\n\t * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n\t * and move down from 3 to 2 to 1 character until a matching binary operation is found\n\t * then, return that binary operation\n\t * @returns {string|boolean}\n\t */\n\tgobbleBinaryOp() {\n\t\tthis.gobbleSpaces();\n\t\tlet to_check = this.expr.substr(this.index, Jsep.max_binop_len);\n\t\tlet tc_len = to_check.length;\n\n\t\twhile (tc_len > 0) {\n\t\t\t// Don't accept a binary op when it is an identifier.\n\t\t\t// Binary ops that start with a identifier-valid character must be followed\n\t\t\t// by a non identifier-part valid character\n\t\t\tif (Jsep.binary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t)) {\n\t\t\t\tthis.index += tc_len;\n\t\t\t\treturn to_check;\n\t\t\t}\n\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * This function is responsible for gobbling an individual expression,\n\t * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n\t * @returns {?jsep.BinaryExpression}\n\t */\n\tgobbleBinaryExpression() {\n\t\tlet node, biop, prec, stack, biop_info, left, right, i, cur_biop;\n\n\t\t// First, try to get the leftmost thing\n\t\t// Then, check to see if there's a binary operator operating on that leftmost thing\n\t\t// Don't gobbleBinaryOp without a left-hand-side\n\t\tleft = this.gobbleToken();\n\t\tif (!left) {\n\t\t\treturn left;\n\t\t}\n\t\tbiop = this.gobbleBinaryOp();\n\n\t\t// If there wasn't a binary operator, just return the leftmost node\n\t\tif (!biop) {\n\t\t\treturn left;\n\t\t}\n\n\t\t// Otherwise, we need to start a stack to properly place the binary operations in their\n\t\t// precedence structure\n\t\tbiop_info = { value: biop, prec: Jsep.binaryPrecedence(biop), right_a: Jsep.right_associative.has(biop) };\n\n\t\tright = this.gobbleToken();\n\n\t\tif (!right) {\n\t\t\tthis.throwError(\"Expected expression after \" + biop);\n\t\t}\n\n\t\tstack = [left, biop_info, right];\n\n\t\t// Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n\t\twhile ((biop = this.gobbleBinaryOp())) {\n\t\t\tprec = Jsep.binaryPrecedence(biop);\n\n\t\t\tif (prec === 0) {\n\t\t\t\tthis.index -= biop.length;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbiop_info = { value: biop, prec, right_a: Jsep.right_associative.has(biop) };\n\n\t\t\tcur_biop = biop;\n\n\t\t\t// Reduce: make a binary expression from the three topmost entries.\n\t\t\tconst comparePrev = prev => biop_info.right_a && prev.right_a\n\t\t\t\t? prec > prev.prec\n\t\t\t\t: prec <= prev.prec;\n\t\t\twhile ((stack.length > 2) && comparePrev(stack[stack.length - 2])) {\n\t\t\t\tright = stack.pop();\n\t\t\t\tbiop = stack.pop().value;\n\t\t\t\tleft = stack.pop();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\t\toperator: biop,\n\t\t\t\t\tleft,\n\t\t\t\t\tright\n\t\t\t\t};\n\t\t\t\tstack.push(node);\n\t\t\t}\n\n\t\t\tnode = this.gobbleToken();\n\n\t\t\tif (!node) {\n\t\t\t\tthis.throwError(\"Expected expression after \" + cur_biop);\n\t\t\t}\n\n\t\t\tstack.push(biop_info, node);\n\t\t}\n\n\t\ti = stack.length - 1;\n\t\tnode = stack[i];\n\n\t\twhile (i > 1) {\n\t\t\tnode = {\n\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\toperator: stack[i - 1].value,\n\t\t\t\tleft: stack[i - 2],\n\t\t\t\tright: node\n\t\t\t};\n\t\t\ti -= 2;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * An individual part of a binary expression:\n\t * e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleToken() {\n\t\tlet ch, to_check, tc_len, node;\n\n\t\tthis.gobbleSpaces();\n\t\tnode = this.searchHook('gobble-token');\n\t\tif (node) {\n\t\t\treturn this.runHook('after-token', node);\n\t\t}\n\n\t\tch = this.code;\n\n\t\tif (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {\n\t\t\t// Char code 46 is a dot `.` which can start off a numeric literal\n\t\t\treturn this.gobbleNumericLiteral();\n\t\t}\n\n\t\tif (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {\n\t\t\t// Single or double quotes\n\t\t\tnode = this.gobbleStringLiteral();\n\t\t}\n\t\telse if (ch === Jsep.OBRACK_CODE) {\n\t\t\tnode = this.gobbleArray();\n\t\t}\n\t\telse {\n\t\t\tto_check = this.expr.substr(this.index, Jsep.max_unop_len);\n\t\t\ttc_len = to_check.length;\n\n\t\t\twhile (tc_len > 0) {\n\t\t\t\t// Don't accept an unary op when it is an identifier.\n\t\t\t\t// Unary ops that start with a identifier-valid character must be followed\n\t\t\t\t// by a non identifier-part valid character\n\t\t\t\tif (Jsep.unary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t\t)) {\n\t\t\t\t\tthis.index += tc_len;\n\t\t\t\t\tconst argument = this.gobbleToken();\n\t\t\t\t\tif (!argument) {\n\t\t\t\t\t\tthis.throwError('missing unaryOp argument');\n\t\t\t\t\t}\n\t\t\t\t\treturn this.runHook('after-token', {\n\t\t\t\t\t\ttype: Jsep.UNARY_EXP,\n\t\t\t\t\t\toperator: to_check,\n\t\t\t\t\t\targument,\n\t\t\t\t\t\tprefix: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t\t}\n\n\t\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\t\tnode = this.gobbleIdentifier();\n\t\t\t\tif (Jsep.literals.hasOwnProperty(node.name)) {\n\t\t\t\t\tnode = {\n\t\t\t\t\t\ttype: Jsep.LITERAL,\n\t\t\t\t\t\tvalue: Jsep.literals[node.name],\n\t\t\t\t\t\traw: node.name,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (node.name === Jsep.this_str) {\n\t\t\t\t\tnode = { type: Jsep.THIS_EXP };\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) { // open parenthesis\n\t\t\t\tnode = this.gobbleGroup();\n\t\t\t}\n\t\t}\n\n\t\tif (!node) {\n\t\t\treturn this.runHook('after-token', false);\n\t\t}\n\n\t\tnode = this.gobbleTokenProperty(node);\n\t\treturn this.runHook('after-token', node);\n\t}\n\n\t/**\n\t * Gobble properties of of identifiers/strings/arrays/groups.\n\t * e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n\t * It also gobbles function calls:\n\t * e.g. `Math.acos(obj.angle)`\n\t * @param {jsep.Expression} node\n\t * @returns {jsep.Expression}\n\t */\n\tgobbleTokenProperty(node) {\n\t\tthis.gobbleSpaces();\n\n\t\tlet ch = this.code;\n\t\twhile (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {\n\t\t\tlet optional;\n\t\t\tif (ch === Jsep.QUMARK_CODE) {\n\t\t\t\tif (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toptional = true;\n\t\t\t\tthis.index += 2;\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t}\n\t\t\tthis.index++;\n\n\t\t\tif (ch === Jsep.OBRACK_CODE) {\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: true,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleExpression()\n\t\t\t\t};\n\t\t\t\tif (!node.property) {\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t\tif (ch !== Jsep.CBRACK_CODE) {\n\t\t\t\t\tthis.throwError('Unclosed [');\n\t\t\t\t}\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) {\n\t\t\t\t// A function call is being made; gobble all the arguments\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.CALL_EXP,\n\t\t\t\t\t'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),\n\t\t\t\t\tcallee: node\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (ch === Jsep.PERIOD_CODE || optional) {\n\t\t\t\tif (optional) {\n\t\t\t\t\tthis.index--;\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: false,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleIdentifier(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (optional) {\n\t\t\t\tnode.optional = true;\n\t\t\t} // else leave undefined for compatibility with esprima\n\n\t\t\tthis.gobbleSpaces();\n\t\t\tch = this.code;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n\t * keep track of everything in the numeric literal and then calling `parseFloat` on that string\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleNumericLiteral() {\n\t\tlet number = '', ch, chCode;\n\n\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t}\n\n\t\tif (this.code === Jsep.PERIOD_CODE) { // can start with a decimal marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\t\t}\n\n\t\tch = this.char;\n\n\t\tif (ch === 'e' || ch === 'E') { // exponent marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\tch = this.char;\n\n\t\t\tif (ch === '+' || ch === '-') { // exponent sign\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) { // exponent itself\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\tif (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1)) ) {\n\t\t\t\tthis.throwError('Expected exponent (' + number + this.char + ')');\n\t\t\t}\n\t\t}\n\n\t\tchCode = this.code;\n\n\t\t// Check to make sure this isn't a variable name that start with a number (123abc)\n\t\tif (Jsep.isIdentifierStart(chCode)) {\n\t\t\tthis.throwError('Variable names cannot start with a number (' +\n\t\t\t\tnumber + this.char + ')');\n\t\t}\n\t\telse if (chCode === Jsep.PERIOD_CODE || (number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE)) {\n\t\t\tthis.throwError('Unexpected period');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: parseFloat(number),\n\t\t\traw: number\n\t\t};\n\t}\n\n\t/**\n\t * Parses a string literal, staring with single or double quotes with basic support for escape codes\n\t * e.g. `\"hello world\"`, `'this is\\nJSEP'`\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleStringLiteral() {\n\t\tlet str = '';\n\t\tconst startIndex = this.index;\n\t\tconst quote = this.expr.charAt(this.index++);\n\t\tlet closed = false;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tlet ch = this.expr.charAt(this.index++);\n\n\t\t\tif (ch === quote) {\n\t\t\t\tclosed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch === '\\\\') {\n\t\t\t\t// Check for all of the common escape codes\n\t\t\t\tch = this.expr.charAt(this.index++);\n\n\t\t\t\tswitch (ch) {\n\t\t\t\t\tcase 'n': str += '\\n'; break;\n\t\t\t\t\tcase 'r': str += '\\r'; break;\n\t\t\t\t\tcase 't': str += '\\t'; break;\n\t\t\t\t\tcase 'b': str += '\\b'; break;\n\t\t\t\t\tcase 'f': str += '\\f'; break;\n\t\t\t\t\tcase 'v': str += '\\x0B'; break;\n\t\t\t\t\tdefault : str += ch;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstr += ch;\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Unclosed quote after \"' + str + '\"');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: str,\n\t\t\traw: this.expr.substring(startIndex, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles only identifiers\n\t * e.g.: `foo`, `_value`, `$x1`\n\t * Also, this function checks if that identifier is a literal:\n\t * (e.g. `true`, `false`, `null`) or `this`\n\t * @returns {jsep.Identifier}\n\t */\n\tgobbleIdentifier() {\n\t\tlet ch = this.code, start = this.index;\n\n\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\tthis.index++;\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unexpected ' + this.char);\n\t\t}\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch = this.code;\n\n\t\t\tif (Jsep.isIdentifierPart(ch)) {\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: Jsep.IDENTIFIER,\n\t\t\tname: this.expr.slice(start, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles a list of arguments within the context of a function call\n\t * or array literal. This function also assumes that the opening character\n\t * `(` or `[` has already been gobbled, and gobbles expressions and commas\n\t * until the terminator character `)` or `]` is encountered.\n\t * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n\t * @param {number} termination\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleArguments(termination) {\n\t\tconst args = [];\n\t\tlet closed = false;\n\t\tlet separator_count = 0;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tthis.gobbleSpaces();\n\t\t\tlet ch_i = this.code;\n\n\t\t\tif (ch_i === termination) { // done parsing\n\t\t\t\tclosed = true;\n\t\t\t\tthis.index++;\n\n\t\t\t\tif (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length){\n\t\t\t\t\tthis.throwError('Unexpected token ' + String.fromCharCode(termination));\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch_i === Jsep.COMMA_CODE) { // between expressions\n\t\t\t\tthis.index++;\n\t\t\t\tseparator_count++;\n\n\t\t\t\tif (separator_count !== args.length) { // missing argument\n\t\t\t\t\tif (termination === Jsep.CPAREN_CODE) {\n\t\t\t\t\t\tthis.throwError('Unexpected token ,');\n\t\t\t\t\t}\n\t\t\t\t\telse if (termination === Jsep.CBRACK_CODE) {\n\t\t\t\t\t\tfor (let arg = args.length; arg < separator_count; arg++) {\n\t\t\t\t\t\t\targs.push(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (args.length !== separator_count && separator_count !== 0) {\n\t\t\t\t// NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments\n\t\t\t\tthis.throwError('Expected comma');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst node = this.gobbleExpression();\n\n\t\t\t\tif (!node || node.type === Jsep.COMPOUND) {\n\t\t\t\t\tthis.throwError('Expected comma');\n\t\t\t\t}\n\n\t\t\t\targs.push(node);\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Expected ' + String.fromCharCode(termination));\n\t\t}\n\n\t\treturn args;\n\t}\n\n\t/**\n\t * Responsible for parsing a group of things within parentheses `()`\n\t * that have no identifier in front (so not a function call)\n\t * This function assumes that it needs to gobble the opening parenthesis\n\t * and then tries to gobble everything within that parenthesis, assuming\n\t * that the next thing it should see is the close parenthesis. If not,\n\t * then the expression probably doesn't have a `)`\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleGroup() {\n\t\tthis.index++;\n\t\tlet nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);\n\t\tif (this.code === Jsep.CPAREN_CODE) {\n\t\t\tthis.index++;\n\t\t\tif (nodes.length === 1) {\n\t\t\t\treturn nodes[0];\n\t\t\t}\n\t\t\telse if (!nodes.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn {\n\t\t\t\t\ttype: Jsep.SEQUENCE_EXP,\n\t\t\t\t\texpressions: nodes,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unclosed (');\n\t\t}\n\t}\n\n\t/**\n\t * Responsible for parsing Array literals `[1, 2, 3]`\n\t * This function assumes that it needs to gobble the opening bracket\n\t * and then tries to gobble the expressions as arguments.\n\t * @returns {jsep.ArrayExpression}\n\t */\n\tgobbleArray() {\n\t\tthis.index++;\n\n\t\treturn {\n\t\t\ttype: Jsep.ARRAY_EXP,\n\t\t\telements: this.gobbleArguments(Jsep.CBRACK_CODE)\n\t\t};\n\t}\n}\n\n// Static fields:\nconst hooks = new Hooks();\nObject.assign(Jsep, {\n\thooks,\n\tplugins: new Plugins(Jsep),\n\n\t// Node Types\n\t// ----------\n\t// This is the full set of types that any JSEP node can be.\n\t// Store them here to save space when minified\n\tCOMPOUND:        'Compound',\n\tSEQUENCE_EXP:    'SequenceExpression',\n\tIDENTIFIER:      'Identifier',\n\tMEMBER_EXP:      'MemberExpression',\n\tLITERAL:         'Literal',\n\tTHIS_EXP:        'ThisExpression',\n\tCALL_EXP:        'CallExpression',\n\tUNARY_EXP:       'UnaryExpression',\n\tBINARY_EXP:      'BinaryExpression',\n\tARRAY_EXP:       'ArrayExpression',\n\n\tTAB_CODE:    9,\n\tLF_CODE:     10,\n\tCR_CODE:     13,\n\tSPACE_CODE:  32,\n\tPERIOD_CODE: 46, // '.'\n\tCOMMA_CODE:  44, // ','\n\tSQUOTE_CODE: 39, // single quote\n\tDQUOTE_CODE: 34, // double quotes\n\tOPAREN_CODE: 40, // (\n\tCPAREN_CODE: 41, // )\n\tOBRACK_CODE: 91, // [\n\tCBRACK_CODE: 93, // ]\n\tQUMARK_CODE: 63, // ?\n\tSEMCOL_CODE: 59, // ;\n\tCOLON_CODE:  58, // :\n\n\n\t// Operations\n\t// ----------\n\t// Use a quickly-accessible map to store all of the unary operators\n\t// Values are set to `1` (it really doesn't matter)\n\tunary_ops: {\n\t\t'-': 1,\n\t\t'!': 1,\n\t\t'~': 1,\n\t\t'+': 1\n\t},\n\n\t// Also use a map for the binary operations but set their values to their\n\t// binary precedence for quick reference (higher number = higher precedence)\n\t// see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)\n\tbinary_ops: {\n\t\t'||': 1, '??': 1,\n\t\t'&&': 2, '|': 3, '^': 4, '&': 5,\n\t\t'==': 6, '!=': 6, '===': 6, '!==': 6,\n\t\t'<': 7, '>': 7, '<=': 7, '>=': 7,\n\t\t'<<': 8, '>>': 8, '>>>': 8,\n\t\t'+': 9, '-': 9,\n\t\t'*': 10, '/': 10, '%': 10,\n\t\t'**': 11,\n\t},\n\n\t// sets specific binary_ops as right-associative\n\tright_associative: new Set(['**']),\n\n\t// Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)\n\tadditional_identifier_chars: new Set(['$', '_']),\n\n\t// Literals\n\t// ----------\n\t// Store the values to return for the various literals we may encounter\n\tliterals: {\n\t\t'true': true,\n\t\t'false': false,\n\t\t'null': null\n\t},\n\n\t// Except for `this`, which is special. This could be changed to something like `'self'` as well\n\tthis_str: 'this',\n});\nJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\nJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\n// Backward Compatibility:\nconst jsep = expr => (new Jsep(expr)).parse();\nconst stdClassProps = Object.getOwnPropertyNames(class Test{});\nObject.getOwnPropertyNames(Jsep)\n\t.filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined)\n\t.forEach((m) => {\n\t\tjsep[m] = Jsep[m];\n\t});\njsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');\n\nconst CONDITIONAL_EXP = 'ConditionalExpression';\n\nvar ternary = {\n\tname: 'ternary',\n\n\tinit(jsep) {\n\t\t// Ternary expression: test ? consequent : alternate\n\t\tjsep.hooks.add('after-expression', function gobbleTernary(env) {\n\t\t\tif (env.node && this.code === jsep.QUMARK_CODE) {\n\t\t\t\tthis.index++;\n\t\t\t\tconst test = env.node;\n\t\t\t\tconst consequent = this.gobbleExpression();\n\n\t\t\t\tif (!consequent) {\n\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t}\n\n\t\t\t\tthis.gobbleSpaces();\n\n\t\t\t\tif (this.code === jsep.COLON_CODE) {\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tconst alternate = this.gobbleExpression();\n\n\t\t\t\t\tif (!alternate) {\n\t\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t\t}\n\t\t\t\t\tenv.node = {\n\t\t\t\t\t\ttype: CONDITIONAL_EXP,\n\t\t\t\t\t\ttest,\n\t\t\t\t\t\tconsequent,\n\t\t\t\t\t\talternate,\n\t\t\t\t\t};\n\n\t\t\t\t\t// check for operators of higher priority than ternary (i.e. assignment)\n\t\t\t\t\t// jsep sets || at 1, and assignment at 0.9, and conditional should be between them\n\t\t\t\t\tif (test.operator && jsep.binary_ops[test.operator] <= 0.9) {\n\t\t\t\t\t\tlet newTest = test;\n\t\t\t\t\t\twhile (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {\n\t\t\t\t\t\t\tnewTest = newTest.right;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tenv.node.test = newTest.right;\n\t\t\t\t\t\tnewTest.right = env.node;\n\t\t\t\t\t\tenv.node = test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.throwError('Expected :');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n};\n\n// Add default plugins:\n\njsep.plugins.register(ternary);\n\nexport { Jsep, jsep as default };\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport jsep from \"jsep\";\nimport ExpressionNodeType from \"./ExpressionNodeType.js\";\n\n/**\n * An expression for a style applied to a {@link Cesium3DTileset}.\n * <p>\n * Evaluates an expression defined using the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}.\n * </p>\n * <p>\n * Implements the {@link StyleExpression} interface.\n * </p>\n *\n * @alias Expression\n * @constructor\n *\n * @param {string} [expression] The expression defined using the 3D Tiles Styling language.\n * @param {object} [defines] Defines in the style.\n *\n * @example\n * const expression = new Cesium.Expression('(regExp(\"^Chest\").test(${County})) && (${YearBuilt} >= 1970)');\n * expression.evaluate(feature); // returns true or false depending on the feature's properties\n *\n * @example\n * const expression = new Cesium.Expression('(${Temperature} > 90) ? color(\"red\") : color(\"white\")');\n * expression.evaluateColor(feature, result); // returns a Cesium.Color object\n */\nfunction Expression(expression, defines) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"expression\", expression);\n  //>>includeEnd('debug');\n\n  this._expression = expression;\n  expression = replaceDefines(expression, defines);\n  expression = replaceVariables(removeBackslashes(expression));\n\n  // customize jsep operators\n  jsep.addBinaryOp(\"=~\", 0);\n  jsep.addBinaryOp(\"!~\", 0);\n\n  let ast;\n  try {\n    ast = jsep(expression);\n  } catch (e) {\n    throw new RuntimeError(e);\n  }\n\n  this._runtimeAst = createRuntimeAst(this, ast);\n}\n\nObject.defineProperties(Expression.prototype, {\n  /**\n   * Gets the expression defined in the 3D Tiles Styling language.\n   *\n   * @memberof Expression.prototype\n   *\n   * @type {string}\n   * @readonly\n   *\n   * @default undefined\n   */\n  expression: {\n    get: function () {\n      return this._expression;\n    },\n  },\n});\n\n// Scratch storage manager while evaluating deep expressions.\n// For example, an expression like dot(vec4(${red}), vec4(${green}) * vec4(${blue}) requires 3 scratch Cartesian4's\nconst scratchStorage = {\n  arrayIndex: 0,\n  arrayArray: [[]],\n  cartesian2Index: 0,\n  cartesian3Index: 0,\n  cartesian4Index: 0,\n  cartesian2Array: [new Cartesian2()],\n  cartesian3Array: [new Cartesian3()],\n  cartesian4Array: [new Cartesian4()],\n  reset: function () {\n    this.arrayIndex = 0;\n    this.cartesian2Index = 0;\n    this.cartesian3Index = 0;\n    this.cartesian4Index = 0;\n  },\n  getArray: function () {\n    if (this.arrayIndex >= this.arrayArray.length) {\n      this.arrayArray.push([]);\n    }\n    const array = this.arrayArray[this.arrayIndex++];\n    array.length = 0;\n    return array;\n  },\n  getCartesian2: function () {\n    if (this.cartesian2Index >= this.cartesian2Array.length) {\n      this.cartesian2Array.push(new Cartesian2());\n    }\n    return this.cartesian2Array[this.cartesian2Index++];\n  },\n  getCartesian3: function () {\n    if (this.cartesian3Index >= this.cartesian3Array.length) {\n      this.cartesian3Array.push(new Cartesian3());\n    }\n    return this.cartesian3Array[this.cartesian3Index++];\n  },\n  getCartesian4: function () {\n    if (this.cartesian4Index >= this.cartesian4Array.length) {\n      this.cartesian4Array.push(new Cartesian4());\n    }\n    return this.cartesian4Array[this.cartesian4Index++];\n  },\n};\n\n/**\n * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of\n * the expression in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}\n * is of type <code>Boolean</code>, <code>Number</code>, or <code>String</code>, the corresponding JavaScript\n * primitive type will be returned. If the result is a <code>RegExp</code>, a Javascript <code>RegExp</code>\n * object will be returned. If the result is a <code>Cartesian2</code>, <code>Cartesian3</code>, or <code>Cartesian4</code>,\n * a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the <code>result</code> argument is\n * a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned.\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {object} [result] The object onto which to store the result.\n * @returns {boolean|number|string|RegExp|Cartesian2|Cartesian3|Cartesian4|Color} The result of evaluating the expression.\n */\nExpression.prototype.evaluate = function (feature, result) {\n  scratchStorage.reset();\n  const value = this._runtimeAst.evaluate(feature);\n  if (result instanceof Color && value instanceof Cartesian4) {\n    return Color.fromCartesian4(value, result);\n  }\n  if (\n    value instanceof Cartesian2 ||\n    value instanceof Cartesian3 ||\n    value instanceof Cartesian4\n  ) {\n    return value.clone(result);\n  }\n  return value;\n};\n\n/**\n * Evaluates the result of a Color expression, optionally using the provided feature's properties.\n * <p>\n * This is equivalent to {@link Expression#evaluate} but always returns a {@link Color} object.\n * </p>\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Color} [result] The object in which to store the result\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nExpression.prototype.evaluateColor = function (feature, result) {\n  scratchStorage.reset();\n  const color = this._runtimeAst.evaluate(feature);\n  return Color.fromCartesian4(color, result);\n};\n\n/**\n * Gets the shader function for this expression.\n * Returns undefined if the shader function can't be generated from this expression.\n *\n * @param {string} functionSignature Signature of the generated function.\n * @param {object} variableSubstitutionMap Maps variable names to shader variable names.\n * @param {object} shaderState Stores information about the generated shader function, including whether it is translucent.\n * @param {string} returnType The return type of the generated function.\n *\n * @returns {string} The shader function.\n *\n * @private\n */\nExpression.prototype.getShaderFunction = function (\n  functionSignature,\n  variableSubstitutionMap,\n  shaderState,\n  returnType,\n) {\n  let shaderExpression = this.getShaderExpression(\n    variableSubstitutionMap,\n    shaderState,\n  );\n\n  shaderExpression =\n    `${returnType} ${functionSignature}\\n` +\n    `{\\n` +\n    `    return ${shaderExpression};\\n` +\n    `}\\n`;\n\n  return shaderExpression;\n};\n\n/**\n * Gets the shader expression for this expression.\n * Returns undefined if the shader expression can't be generated from this expression.\n *\n * @param {object} variableSubstitutionMap Maps variable names to shader variable names.\n * @param {object} shaderState Stores information about the generated shader function, including whether it is translucent.\n *\n * @returns {string} The shader expression.\n *\n * @private\n */\nExpression.prototype.getShaderExpression = function (\n  variableSubstitutionMap,\n  shaderState,\n) {\n  return this._runtimeAst.getShaderExpression(\n    variableSubstitutionMap,\n    shaderState,\n  );\n};\n\n/**\n * Gets the variables used by the expression.\n *\n * @returns {string[]} The variables used by the expression.\n *\n * @private\n */\nExpression.prototype.getVariables = function () {\n  let variables = [];\n\n  this._runtimeAst.getVariables(variables);\n\n  // Remove duplicates\n  variables = variables.filter(function (variable, index, variables) {\n    return variables.indexOf(variable) === index;\n  });\n\n  return variables;\n};\n\nconst unaryOperators = [\"!\", \"-\", \"+\"];\nconst binaryOperators = [\n  \"+\",\n  \"-\",\n  \"*\",\n  \"/\",\n  \"%\",\n  \"===\",\n  \"!==\",\n  \">\",\n  \">=\",\n  \"<\",\n  \"<=\",\n  \"&&\",\n  \"||\",\n  \"!~\",\n  \"=~\",\n];\n\nconst variableRegex = /\\${(.*?)}/g; // Matches ${variable_name}\nconst backslashRegex = /\\\\/g;\nconst backslashReplacement = \"@#%\";\nconst replacementRegex = /@#%/g;\n\nconst scratchColor = new Color();\n\nconst unaryFunctions = {\n  abs: getEvaluateUnaryComponentwise(Math.abs),\n  sqrt: getEvaluateUnaryComponentwise(Math.sqrt),\n  cos: getEvaluateUnaryComponentwise(Math.cos),\n  sin: getEvaluateUnaryComponentwise(Math.sin),\n  tan: getEvaluateUnaryComponentwise(Math.tan),\n  acos: getEvaluateUnaryComponentwise(Math.acos),\n  asin: getEvaluateUnaryComponentwise(Math.asin),\n  atan: getEvaluateUnaryComponentwise(Math.atan),\n  radians: getEvaluateUnaryComponentwise(CesiumMath.toRadians),\n  degrees: getEvaluateUnaryComponentwise(CesiumMath.toDegrees),\n  sign: getEvaluateUnaryComponentwise(CesiumMath.sign),\n  floor: getEvaluateUnaryComponentwise(Math.floor),\n  ceil: getEvaluateUnaryComponentwise(Math.ceil),\n  round: getEvaluateUnaryComponentwise(Math.round),\n  exp: getEvaluateUnaryComponentwise(Math.exp),\n  exp2: getEvaluateUnaryComponentwise(exp2),\n  log: getEvaluateUnaryComponentwise(Math.log),\n  log2: getEvaluateUnaryComponentwise(log2),\n  fract: getEvaluateUnaryComponentwise(fract),\n  length: length,\n  normalize: normalize,\n};\n\nconst binaryFunctions = {\n  atan2: getEvaluateBinaryComponentwise(Math.atan2, false),\n  pow: getEvaluateBinaryComponentwise(Math.pow, false),\n  min: getEvaluateBinaryComponentwise(Math.min, true),\n  max: getEvaluateBinaryComponentwise(Math.max, true),\n  distance: distance,\n  dot: dot,\n  cross: cross,\n};\n\nconst ternaryFunctions = {\n  clamp: getEvaluateTernaryComponentwise(CesiumMath.clamp, true),\n  mix: getEvaluateTernaryComponentwise(CesiumMath.lerp, true),\n};\n\nfunction fract(number) {\n  return number - Math.floor(number);\n}\n\nfunction exp2(exponent) {\n  return Math.pow(2.0, exponent);\n}\n\nfunction log2(number) {\n  return CesiumMath.log2(number);\n}\n\nfunction getEvaluateUnaryComponentwise(operation) {\n  return function (call, left) {\n    if (typeof left === \"number\") {\n      return operation(left);\n    } else if (left instanceof Cartesian2) {\n      return Cartesian2.fromElements(\n        operation(left.x),\n        operation(left.y),\n        scratchStorage.getCartesian2(),\n      );\n    } else if (left instanceof Cartesian3) {\n      return Cartesian3.fromElements(\n        operation(left.x),\n        operation(left.y),\n        operation(left.z),\n        scratchStorage.getCartesian3(),\n      );\n    } else if (left instanceof Cartesian4) {\n      return Cartesian4.fromElements(\n        operation(left.x),\n        operation(left.y),\n        operation(left.z),\n        operation(left.w),\n        scratchStorage.getCartesian4(),\n      );\n    }\n    throw new RuntimeError(\n      `Function \"${call}\" requires a vector or number argument. Argument is ${left}.`,\n    );\n  };\n}\n\nfunction getEvaluateBinaryComponentwise(operation, allowScalar) {\n  return function (call, left, right) {\n    if (allowScalar && typeof right === \"number\") {\n      if (typeof left === \"number\") {\n        return operation(left, right);\n      } else if (left instanceof Cartesian2) {\n        return Cartesian2.fromElements(\n          operation(left.x, right),\n          operation(left.y, right),\n          scratchStorage.getCartesian2(),\n        );\n      } else if (left instanceof Cartesian3) {\n        return Cartesian3.fromElements(\n          operation(left.x, right),\n          operation(left.y, right),\n          operation(left.z, right),\n          scratchStorage.getCartesian3(),\n        );\n      } else if (left instanceof Cartesian4) {\n        return Cartesian4.fromElements(\n          operation(left.x, right),\n          operation(left.y, right),\n          operation(left.z, right),\n          operation(left.w, right),\n          scratchStorage.getCartesian4(),\n        );\n      }\n    }\n\n    if (typeof left === \"number\" && typeof right === \"number\") {\n      return operation(left, right);\n    } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n      return Cartesian2.fromElements(\n        operation(left.x, right.x),\n        operation(left.y, right.y),\n        scratchStorage.getCartesian2(),\n      );\n    } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n      return Cartesian3.fromElements(\n        operation(left.x, right.x),\n        operation(left.y, right.y),\n        operation(left.z, right.z),\n        scratchStorage.getCartesian3(),\n      );\n    } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n      return Cartesian4.fromElements(\n        operation(left.x, right.x),\n        operation(left.y, right.y),\n        operation(left.z, right.z),\n        operation(left.w, right.w),\n        scratchStorage.getCartesian4(),\n      );\n    }\n\n    throw new RuntimeError(\n      `Function \"${call}\" requires vector or number arguments of matching types. Arguments are ${left} and ${right}.`,\n    );\n  };\n}\n\nfunction getEvaluateTernaryComponentwise(operation, allowScalar) {\n  return function (call, left, right, test) {\n    if (allowScalar && typeof test === \"number\") {\n      if (typeof left === \"number\" && typeof right === \"number\") {\n        return operation(left, right, test);\n      } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n        return Cartesian2.fromElements(\n          operation(left.x, right.x, test),\n          operation(left.y, right.y, test),\n          scratchStorage.getCartesian2(),\n        );\n      } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n        return Cartesian3.fromElements(\n          operation(left.x, right.x, test),\n          operation(left.y, right.y, test),\n          operation(left.z, right.z, test),\n          scratchStorage.getCartesian3(),\n        );\n      } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n        return Cartesian4.fromElements(\n          operation(left.x, right.x, test),\n          operation(left.y, right.y, test),\n          operation(left.z, right.z, test),\n          operation(left.w, right.w, test),\n          scratchStorage.getCartesian4(),\n        );\n      }\n    }\n\n    if (\n      typeof left === \"number\" &&\n      typeof right === \"number\" &&\n      typeof test === \"number\"\n    ) {\n      return operation(left, right, test);\n    } else if (\n      left instanceof Cartesian2 &&\n      right instanceof Cartesian2 &&\n      test instanceof Cartesian2\n    ) {\n      return Cartesian2.fromElements(\n        operation(left.x, right.x, test.x),\n        operation(left.y, right.y, test.y),\n        scratchStorage.getCartesian2(),\n      );\n    } else if (\n      left instanceof Cartesian3 &&\n      right instanceof Cartesian3 &&\n      test instanceof Cartesian3\n    ) {\n      return Cartesian3.fromElements(\n        operation(left.x, right.x, test.x),\n        operation(left.y, right.y, test.y),\n        operation(left.z, right.z, test.z),\n        scratchStorage.getCartesian3(),\n      );\n    } else if (\n      left instanceof Cartesian4 &&\n      right instanceof Cartesian4 &&\n      test instanceof Cartesian4\n    ) {\n      return Cartesian4.fromElements(\n        operation(left.x, right.x, test.x),\n        operation(left.y, right.y, test.y),\n        operation(left.z, right.z, test.z),\n        operation(left.w, right.w, test.w),\n        scratchStorage.getCartesian4(),\n      );\n    }\n\n    throw new RuntimeError(\n      `Function \"${call}\" requires vector or number arguments of matching types. Arguments are ${left}, ${right}, and ${test}.`,\n    );\n  };\n}\n\nfunction length(call, left) {\n  if (typeof left === \"number\") {\n    return Math.abs(left);\n  } else if (left instanceof Cartesian2) {\n    return Cartesian2.magnitude(left);\n  } else if (left instanceof Cartesian3) {\n    return Cartesian3.magnitude(left);\n  } else if (left instanceof Cartesian4) {\n    return Cartesian4.magnitude(left);\n  }\n\n  throw new RuntimeError(\n    `Function \"${call}\" requires a vector or number argument. Argument is ${left}.`,\n  );\n}\n\nfunction normalize(call, left) {\n  if (typeof left === \"number\") {\n    return 1.0;\n  } else if (left instanceof Cartesian2) {\n    return Cartesian2.normalize(left, scratchStorage.getCartesian2());\n  } else if (left instanceof Cartesian3) {\n    return Cartesian3.normalize(left, scratchStorage.getCartesian3());\n  } else if (left instanceof Cartesian4) {\n    return Cartesian4.normalize(left, scratchStorage.getCartesian4());\n  }\n\n  throw new RuntimeError(\n    `Function \"${call}\" requires a vector or number argument. Argument is ${left}.`,\n  );\n}\n\nfunction distance(call, left, right) {\n  if (typeof left === \"number\" && typeof right === \"number\") {\n    return Math.abs(left - right);\n  } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n    return Cartesian2.distance(left, right);\n  } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n    return Cartesian3.distance(left, right);\n  } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n    return Cartesian4.distance(left, right);\n  }\n\n  throw new RuntimeError(\n    `Function \"${call}\" requires vector or number arguments of matching types. Arguments are ${left} and ${right}.`,\n  );\n}\n\nfunction dot(call, left, right) {\n  if (typeof left === \"number\" && typeof right === \"number\") {\n    return left * right;\n  } else if (left instanceof Cartesian2 && right instanceof Cartesian2) {\n    return Cartesian2.dot(left, right);\n  } else if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n    return Cartesian3.dot(left, right);\n  } else if (left instanceof Cartesian4 && right instanceof Cartesian4) {\n    return Cartesian4.dot(left, right);\n  }\n\n  throw new RuntimeError(\n    `Function \"${call}\" requires vector or number arguments of matching types. Arguments are ${left} and ${right}.`,\n  );\n}\n\nfunction cross(call, left, right) {\n  if (left instanceof Cartesian3 && right instanceof Cartesian3) {\n    return Cartesian3.cross(left, right, scratchStorage.getCartesian3());\n  }\n\n  throw new RuntimeError(\n    `Function \"${call}\" requires vec3 arguments. Arguments are ${left} and ${right}.`,\n  );\n}\n\nfunction Node(type, value, left, right, test) {\n  this._type = type;\n  this._value = value;\n  this._left = left;\n  this._right = right;\n  this._test = test;\n  this.evaluate = undefined;\n\n  setEvaluateFunction(this);\n}\n\nfunction replaceDefines(expression, defines) {\n  if (!defined(defines)) {\n    return expression;\n  }\n  for (const key in defines) {\n    if (defines.hasOwnProperty(key)) {\n      const definePlaceholder = new RegExp(`\\\\$\\\\{${key}\\\\}`, \"g\");\n      const defineReplace = `(${defines[key]})`;\n      if (defined(defineReplace)) {\n        expression = expression.replace(definePlaceholder, defineReplace);\n      }\n    }\n  }\n  return expression;\n}\n\nfunction removeBackslashes(expression) {\n  return expression.replace(backslashRegex, backslashReplacement);\n}\n\nfunction replaceBackslashes(expression) {\n  return expression.replace(replacementRegex, \"\\\\\");\n}\n\nfunction replaceVariables(expression) {\n  let exp = expression;\n  let result = \"\";\n  let i = exp.indexOf(\"${\");\n  while (i >= 0) {\n    // Check if string is inside quotes\n    const openSingleQuote = exp.indexOf(\"'\");\n    const openDoubleQuote = exp.indexOf('\"');\n    let closeQuote;\n    if (openSingleQuote >= 0 && openSingleQuote < i) {\n      closeQuote = exp.indexOf(\"'\", openSingleQuote + 1);\n      result += exp.substr(0, closeQuote + 1);\n      exp = exp.substr(closeQuote + 1);\n      i = exp.indexOf(\"${\");\n    } else if (openDoubleQuote >= 0 && openDoubleQuote < i) {\n      closeQuote = exp.indexOf('\"', openDoubleQuote + 1);\n      result += exp.substr(0, closeQuote + 1);\n      exp = exp.substr(closeQuote + 1);\n      i = exp.indexOf(\"${\");\n    } else {\n      result += exp.substr(0, i);\n      const j = exp.indexOf(\"}\");\n      if (j < 0) {\n        throw new RuntimeError(\"Unmatched {.\");\n      }\n      result += `czm_${exp.substr(i + 2, j - (i + 2))}`;\n      exp = exp.substr(j + 1);\n      i = exp.indexOf(\"${\");\n    }\n  }\n  result += exp;\n  return result;\n}\n\nfunction parseLiteral(ast) {\n  const type = typeof ast.value;\n  if (ast.value === null) {\n    return new Node(ExpressionNodeType.LITERAL_NULL, null);\n  } else if (type === \"boolean\") {\n    return new Node(ExpressionNodeType.LITERAL_BOOLEAN, ast.value);\n  } else if (type === \"number\") {\n    return new Node(ExpressionNodeType.LITERAL_NUMBER, ast.value);\n  } else if (type === \"string\") {\n    if (ast.value.indexOf(\"${\") >= 0) {\n      return new Node(ExpressionNodeType.VARIABLE_IN_STRING, ast.value);\n    }\n    return new Node(\n      ExpressionNodeType.LITERAL_STRING,\n      replaceBackslashes(ast.value),\n    );\n  }\n}\n\nfunction parseCall(expression, ast) {\n  const args = ast.arguments;\n  const argsLength = args.length;\n  let call;\n  let val, left, right;\n\n  // Member function calls\n  if (ast.callee.type === \"MemberExpression\") {\n    call = ast.callee.property.name;\n    const object = ast.callee.object;\n    if (call === \"test\" || call === \"exec\") {\n      // Make sure this is called on a valid type\n      if (!defined(object.callee) || object.callee.name !== \"regExp\") {\n        throw new RuntimeError(`${call} is not a function.`);\n      }\n      if (argsLength === 0) {\n        if (call === \"test\") {\n          return new Node(ExpressionNodeType.LITERAL_BOOLEAN, false);\n        }\n        return new Node(ExpressionNodeType.LITERAL_NULL, null);\n      }\n      left = createRuntimeAst(expression, object);\n      right = createRuntimeAst(expression, args[0]);\n      return new Node(ExpressionNodeType.FUNCTION_CALL, call, left, right);\n    } else if (call === \"toString\") {\n      val = createRuntimeAst(expression, object);\n      return new Node(ExpressionNodeType.FUNCTION_CALL, call, val);\n    }\n\n    throw new RuntimeError(`Unexpected function call \"${call}\".`);\n  }\n\n  // Non-member function calls\n  call = ast.callee.name;\n  if (call === \"color\") {\n    if (argsLength === 0) {\n      return new Node(ExpressionNodeType.LITERAL_COLOR, call);\n    }\n    val = createRuntimeAst(expression, args[0]);\n    if (defined(args[1])) {\n      const alpha = createRuntimeAst(expression, args[1]);\n      return new Node(ExpressionNodeType.LITERAL_COLOR, call, [val, alpha]);\n    }\n    return new Node(ExpressionNodeType.LITERAL_COLOR, call, [val]);\n  } else if (call === \"rgb\" || call === \"hsl\") {\n    if (argsLength < 3) {\n      throw new RuntimeError(`${call} requires three arguments.`);\n    }\n    val = [\n      createRuntimeAst(expression, args[0]),\n      createRuntimeAst(expression, args[1]),\n      createRuntimeAst(expression, args[2]),\n    ];\n    return new Node(ExpressionNodeType.LITERAL_COLOR, call, val);\n  } else if (call === \"rgba\" || call === \"hsla\") {\n    if (argsLength < 4) {\n      throw new RuntimeError(`${call} requires four arguments.`);\n    }\n    val = [\n      createRuntimeAst(expression, args[0]),\n      createRuntimeAst(expression, args[1]),\n      createRuntimeAst(expression, args[2]),\n      createRuntimeAst(expression, args[3]),\n    ];\n    return new Node(ExpressionNodeType.LITERAL_COLOR, call, val);\n  } else if (call === \"vec2\" || call === \"vec3\" || call === \"vec4\") {\n    // Check for invalid constructors at evaluation time\n    val = new Array(argsLength);\n    for (let i = 0; i < argsLength; ++i) {\n      val[i] = createRuntimeAst(expression, args[i]);\n    }\n    return new Node(ExpressionNodeType.LITERAL_VECTOR, call, val);\n  } else if (call === \"isNaN\" || call === \"isFinite\") {\n    if (argsLength === 0) {\n      if (call === \"isNaN\") {\n        return new Node(ExpressionNodeType.LITERAL_BOOLEAN, true);\n      }\n      return new Node(ExpressionNodeType.LITERAL_BOOLEAN, false);\n    }\n    val = createRuntimeAst(expression, args[0]);\n    return new Node(ExpressionNodeType.UNARY, call, val);\n  } else if (call === \"isExactClass\" || call === \"isClass\") {\n    if (argsLength < 1 || argsLength > 1) {\n      throw new RuntimeError(`${call} requires exactly one argument.`);\n    }\n    val = createRuntimeAst(expression, args[0]);\n    return new Node(ExpressionNodeType.UNARY, call, val);\n  } else if (call === \"getExactClassName\") {\n    if (argsLength > 0) {\n      throw new RuntimeError(`${call} does not take any argument.`);\n    }\n    return new Node(ExpressionNodeType.UNARY, call);\n  } else if (defined(unaryFunctions[call])) {\n    if (argsLength !== 1) {\n      throw new RuntimeError(`${call} requires exactly one argument.`);\n    }\n    val = createRuntimeAst(expression, args[0]);\n    return new Node(ExpressionNodeType.UNARY, call, val);\n  } else if (defined(binaryFunctions[call])) {\n    if (argsLength !== 2) {\n      throw new RuntimeError(`${call} requires exactly two arguments.`);\n    }\n    left = createRuntimeAst(expression, args[0]);\n    right = createRuntimeAst(expression, args[1]);\n    return new Node(ExpressionNodeType.BINARY, call, left, right);\n  } else if (defined(ternaryFunctions[call])) {\n    if (argsLength !== 3) {\n      throw new RuntimeError(`${call} requires exactly three arguments.`);\n    }\n    left = createRuntimeAst(expression, args[0]);\n    right = createRuntimeAst(expression, args[1]);\n    const test = createRuntimeAst(expression, args[2]);\n    return new Node(ExpressionNodeType.TERNARY, call, left, right, test);\n  } else if (call === \"Boolean\") {\n    if (argsLength === 0) {\n      return new Node(ExpressionNodeType.LITERAL_BOOLEAN, false);\n    }\n    val = createRuntimeAst(expression, args[0]);\n    return new Node(ExpressionNodeType.UNARY, call, val);\n  } else if (call === \"Number\") {\n    if (argsLength === 0) {\n      return new Node(ExpressionNodeType.LITERAL_NUMBER, 0);\n    }\n    val = createRuntimeAst(expression, args[0]);\n    return new Node(ExpressionNodeType.UNARY, call, val);\n  } else if (call === \"String\") {\n    if (argsLength === 0) {\n      return new Node(ExpressionNodeType.LITERAL_STRING, \"\");\n    }\n    val = createRuntimeAst(expression, args[0]);\n    return new Node(ExpressionNodeType.UNARY, call, val);\n  } else if (call === \"regExp\") {\n    return parseRegex(expression, ast);\n  }\n\n  throw new RuntimeError(`Unexpected function call \"${call}\".`);\n}\n\nfunction parseRegex(expression, ast) {\n  const args = ast.arguments;\n  // no arguments, return default regex\n  if (args.length === 0) {\n    return new Node(ExpressionNodeType.LITERAL_REGEX, new RegExp());\n  }\n\n  const pattern = createRuntimeAst(expression, args[0]);\n  let exp;\n\n  // optional flag argument supplied\n  if (args.length > 1) {\n    const flags = createRuntimeAst(expression, args[1]);\n    if (isLiteralType(pattern) && isLiteralType(flags)) {\n      try {\n        exp = new RegExp(\n          replaceBackslashes(String(pattern._value)),\n          flags._value,\n        );\n      } catch (e) {\n        throw new RuntimeError(e);\n      }\n      return new Node(ExpressionNodeType.LITERAL_REGEX, exp);\n    }\n    return new Node(ExpressionNodeType.REGEX, pattern, flags);\n  }\n\n  // only pattern argument supplied\n  if (isLiteralType(pattern)) {\n    try {\n      exp = new RegExp(replaceBackslashes(String(pattern._value)));\n    } catch (e) {\n      throw new RuntimeError(e);\n    }\n    return new Node(ExpressionNodeType.LITERAL_REGEX, exp);\n  }\n  return new Node(ExpressionNodeType.REGEX, pattern);\n}\n\nfunction parseKeywordsAndVariables(ast) {\n  if (isVariable(ast.name)) {\n    const name = getPropertyName(ast.name);\n    if (name.substr(0, 8) === \"tiles3d_\") {\n      return new Node(ExpressionNodeType.BUILTIN_VARIABLE, name);\n    }\n    return new Node(ExpressionNodeType.VARIABLE, name);\n  } else if (ast.name === \"NaN\") {\n    return new Node(ExpressionNodeType.LITERAL_NUMBER, NaN);\n  } else if (ast.name === \"Infinity\") {\n    return new Node(ExpressionNodeType.LITERAL_NUMBER, Infinity);\n  } else if (ast.name === \"undefined\") {\n    return new Node(ExpressionNodeType.LITERAL_UNDEFINED, undefined);\n  }\n\n  throw new RuntimeError(`${ast.name} is not defined.`);\n}\n\nfunction parseMathConstant(ast) {\n  const name = ast.property.name;\n  if (name === \"PI\") {\n    return new Node(ExpressionNodeType.LITERAL_NUMBER, Math.PI);\n  } else if (name === \"E\") {\n    return new Node(ExpressionNodeType.LITERAL_NUMBER, Math.E);\n  }\n}\n\nfunction parseNumberConstant(ast) {\n  const name = ast.property.name;\n  if (name === \"POSITIVE_INFINITY\") {\n    return new Node(\n      ExpressionNodeType.LITERAL_NUMBER,\n      Number.POSITIVE_INFINITY,\n    );\n  }\n}\n\nfunction parseMemberExpression(expression, ast) {\n  if (ast.object.name === \"Math\") {\n    return parseMathConstant(ast);\n  } else if (ast.object.name === \"Number\") {\n    return parseNumberConstant(ast);\n  }\n\n  let val;\n  const obj = createRuntimeAst(expression, ast.object);\n  if (ast.computed) {\n    val = createRuntimeAst(expression, ast.property);\n    return new Node(ExpressionNodeType.MEMBER, \"brackets\", obj, val);\n  }\n\n  val = new Node(ExpressionNodeType.LITERAL_STRING, ast.property.name);\n  return new Node(ExpressionNodeType.MEMBER, \"dot\", obj, val);\n}\n\nfunction isLiteralType(node) {\n  return node._type >= ExpressionNodeType.LITERAL_NULL;\n}\n\nfunction isVariable(name) {\n  return name.substr(0, 4) === \"czm_\";\n}\n\nfunction getPropertyName(variable) {\n  return variable.substr(4);\n}\n\nfunction createRuntimeAst(expression, ast) {\n  let node;\n  let op;\n  let left;\n  let right;\n\n  if (ast.type === \"Literal\") {\n    node = parseLiteral(ast);\n  } else if (ast.type === \"CallExpression\") {\n    node = parseCall(expression, ast);\n  } else if (ast.type === \"Identifier\") {\n    node = parseKeywordsAndVariables(ast);\n  } else if (ast.type === \"UnaryExpression\") {\n    op = ast.operator;\n    const child = createRuntimeAst(expression, ast.argument);\n    if (unaryOperators.indexOf(op) > -1) {\n      node = new Node(ExpressionNodeType.UNARY, op, child);\n    } else {\n      throw new RuntimeError(`Unexpected operator \"${op}\".`);\n    }\n  } else if (ast.type === \"BinaryExpression\") {\n    op = ast.operator;\n    left = createRuntimeAst(expression, ast.left);\n    right = createRuntimeAst(expression, ast.right);\n    if (binaryOperators.indexOf(op) > -1) {\n      node = new Node(ExpressionNodeType.BINARY, op, left, right);\n    } else {\n      throw new RuntimeError(`Unexpected operator \"${op}\".`);\n    }\n  } else if (ast.type === \"LogicalExpression\") {\n    op = ast.operator;\n    left = createRuntimeAst(expression, ast.left);\n    right = createRuntimeAst(expression, ast.right);\n    if (binaryOperators.indexOf(op) > -1) {\n      node = new Node(ExpressionNodeType.BINARY, op, left, right);\n    }\n  } else if (ast.type === \"ConditionalExpression\") {\n    const test = createRuntimeAst(expression, ast.test);\n    left = createRuntimeAst(expression, ast.consequent);\n    right = createRuntimeAst(expression, ast.alternate);\n    node = new Node(ExpressionNodeType.CONDITIONAL, \"?\", left, right, test);\n  } else if (ast.type === \"MemberExpression\") {\n    node = parseMemberExpression(expression, ast);\n  } else if (ast.type === \"ArrayExpression\") {\n    const val = [];\n    for (let i = 0; i < ast.elements.length; i++) {\n      val[i] = createRuntimeAst(expression, ast.elements[i]);\n    }\n    node = new Node(ExpressionNodeType.ARRAY, val);\n  } else if (ast.type === \"Compound\") {\n    // empty expression or multiple expressions\n    throw new RuntimeError(\"Provide exactly one expression.\");\n  } else {\n    throw new RuntimeError(\"Cannot parse expression.\");\n  }\n\n  return node;\n}\n\nfunction setEvaluateFunction(node) {\n  if (node._type === ExpressionNodeType.CONDITIONAL) {\n    node.evaluate = node._evaluateConditional;\n  } else if (node._type === ExpressionNodeType.FUNCTION_CALL) {\n    if (node._value === \"test\") {\n      node.evaluate = node._evaluateRegExpTest;\n    } else if (node._value === \"exec\") {\n      node.evaluate = node._evaluateRegExpExec;\n    } else if (node._value === \"toString\") {\n      node.evaluate = node._evaluateToString;\n    }\n  } else if (node._type === ExpressionNodeType.UNARY) {\n    if (node._value === \"!\") {\n      node.evaluate = node._evaluateNot;\n    } else if (node._value === \"-\") {\n      node.evaluate = node._evaluateNegative;\n    } else if (node._value === \"+\") {\n      node.evaluate = node._evaluatePositive;\n    } else if (node._value === \"isNaN\") {\n      node.evaluate = node._evaluateNaN;\n    } else if (node._value === \"isFinite\") {\n      node.evaluate = node._evaluateIsFinite;\n    } else if (node._value === \"isExactClass\") {\n      node.evaluate = node._evaluateIsExactClass;\n    } else if (node._value === \"isClass\") {\n      node.evaluate = node._evaluateIsClass;\n    } else if (node._value === \"getExactClassName\") {\n      node.evaluate = node._evaluateGetExactClassName;\n    } else if (node._value === \"Boolean\") {\n      node.evaluate = node._evaluateBooleanConversion;\n    } else if (node._value === \"Number\") {\n      node.evaluate = node._evaluateNumberConversion;\n    } else if (node._value === \"String\") {\n      node.evaluate = node._evaluateStringConversion;\n    } else if (defined(unaryFunctions[node._value])) {\n      node.evaluate = getEvaluateUnaryFunction(node._value);\n    }\n  } else if (node._type === ExpressionNodeType.BINARY) {\n    if (node._value === \"+\") {\n      node.evaluate = node._evaluatePlus;\n    } else if (node._value === \"-\") {\n      node.evaluate = node._evaluateMinus;\n    } else if (node._value === \"*\") {\n      node.evaluate = node._evaluateTimes;\n    } else if (node._value === \"/\") {\n      node.evaluate = node._evaluateDivide;\n    } else if (node._value === \"%\") {\n      node.evaluate = node._evaluateMod;\n    } else if (node._value === \"===\") {\n      node.evaluate = node._evaluateEqualsStrict;\n    } else if (node._value === \"!==\") {\n      node.evaluate = node._evaluateNotEqualsStrict;\n    } else if (node._value === \"<\") {\n      node.evaluate = node._evaluateLessThan;\n    } else if (node._value === \"<=\") {\n      node.evaluate = node._evaluateLessThanOrEquals;\n    } else if (node._value === \">\") {\n      node.evaluate = node._evaluateGreaterThan;\n    } else if (node._value === \">=\") {\n      node.evaluate = node._evaluateGreaterThanOrEquals;\n    } else if (node._value === \"&&\") {\n      node.evaluate = node._evaluateAnd;\n    } else if (node._value === \"||\") {\n      node.evaluate = node._evaluateOr;\n    } else if (node._value === \"=~\") {\n      node.evaluate = node._evaluateRegExpMatch;\n    } else if (node._value === \"!~\") {\n      node.evaluate = node._evaluateRegExpNotMatch;\n    } else if (defined(binaryFunctions[node._value])) {\n      node.evaluate = getEvaluateBinaryFunction(node._value);\n    }\n  } else if (node._type === ExpressionNodeType.TERNARY) {\n    node.evaluate = getEvaluateTernaryFunction(node._value);\n  } else if (node._type === ExpressionNodeType.MEMBER) {\n    if (node._value === \"brackets\") {\n      node.evaluate = node._evaluateMemberBrackets;\n    } else {\n      node.evaluate = node._evaluateMemberDot;\n    }\n  } else if (node._type === ExpressionNodeType.ARRAY) {\n    node.evaluate = node._evaluateArray;\n  } else if (node._type === ExpressionNodeType.VARIABLE) {\n    node.evaluate = node._evaluateVariable;\n  } else if (node._type === ExpressionNodeType.VARIABLE_IN_STRING) {\n    node.evaluate = node._evaluateVariableString;\n  } else if (node._type === ExpressionNodeType.LITERAL_COLOR) {\n    node.evaluate = node._evaluateLiteralColor;\n  } else if (node._type === ExpressionNodeType.LITERAL_VECTOR) {\n    node.evaluate = node._evaluateLiteralVector;\n  } else if (node._type === ExpressionNodeType.LITERAL_STRING) {\n    node.evaluate = node._evaluateLiteralString;\n  } else if (node._type === ExpressionNodeType.REGEX) {\n    node.evaluate = node._evaluateRegExp;\n  } else if (node._type === ExpressionNodeType.BUILTIN_VARIABLE) {\n    if (node._value === \"tiles3d_tileset_time\") {\n      node.evaluate = evaluateTilesetTime;\n    }\n  } else {\n    node.evaluate = node._evaluateLiteral;\n  }\n}\n\nfunction evaluateTilesetTime(feature) {\n  if (!defined(feature)) {\n    return 0.0;\n  }\n  return feature.content.tileset.timeSinceLoad;\n}\n\nfunction getEvaluateUnaryFunction(call) {\n  const evaluate = unaryFunctions[call];\n  return function (feature) {\n    const left = this._left.evaluate(feature);\n    return evaluate(call, left);\n  };\n}\n\nfunction getEvaluateBinaryFunction(call) {\n  const evaluate = binaryFunctions[call];\n  return function (feature) {\n    const left = this._left.evaluate(feature);\n    const right = this._right.evaluate(feature);\n    return evaluate(call, left, right);\n  };\n}\n\nfunction getEvaluateTernaryFunction(call) {\n  const evaluate = ternaryFunctions[call];\n  return function (feature) {\n    const left = this._left.evaluate(feature);\n    const right = this._right.evaluate(feature);\n    const test = this._test.evaluate(feature);\n    return evaluate(call, left, right, test);\n  };\n}\n\nfunction getFeatureProperty(feature, name) {\n  // Returns undefined if the feature is not defined or the property name is not defined for that feature\n  if (defined(feature)) {\n    return feature.getPropertyInherited(name);\n  }\n}\n\nNode.prototype._evaluateLiteral = function () {\n  return this._value;\n};\n\nNode.prototype._evaluateLiteralColor = function (feature) {\n  const color = scratchColor;\n  const args = this._left;\n  if (this._value === \"color\") {\n    if (!defined(args)) {\n      Color.fromBytes(255, 255, 255, 255, color);\n    } else if (args.length > 1) {\n      Color.fromCssColorString(args[0].evaluate(feature), color);\n      color.alpha = args[1].evaluate(feature);\n    } else {\n      Color.fromCssColorString(args[0].evaluate(feature), color);\n    }\n  } else if (this._value === \"rgb\") {\n    Color.fromBytes(\n      args[0].evaluate(feature),\n      args[1].evaluate(feature),\n      args[2].evaluate(feature),\n      255,\n      color,\n    );\n  } else if (this._value === \"rgba\") {\n    // convert between css alpha (0 to 1) and cesium alpha (0 to 255)\n    const a = args[3].evaluate(feature) * 255;\n    Color.fromBytes(\n      args[0].evaluate(feature),\n      args[1].evaluate(feature),\n      args[2].evaluate(feature),\n      a,\n      color,\n    );\n  } else if (this._value === \"hsl\") {\n    Color.fromHsl(\n      args[0].evaluate(feature),\n      args[1].evaluate(feature),\n      args[2].evaluate(feature),\n      1.0,\n      color,\n    );\n  } else if (this._value === \"hsla\") {\n    Color.fromHsl(\n      args[0].evaluate(feature),\n      args[1].evaluate(feature),\n      args[2].evaluate(feature),\n      args[3].evaluate(feature),\n      color,\n    );\n  }\n  return Cartesian4.fromColor(color, scratchStorage.getCartesian4());\n};\n\nNode.prototype._evaluateLiteralVector = function (feature) {\n  // Gather the components that make up the vector, which includes components from interior vectors.\n  // For example vec3(1, 2, 3) or vec3(vec2(1, 2), 3) are both valid.\n  //\n  // If the number of components does not equal the vector's size, then a RuntimeError is thrown - with two exceptions:\n  // 1. A vector may be constructed from a larger vector and drop the extra components.\n  // 2. A vector may be constructed from a single component - vec3(1) will become vec3(1, 1, 1).\n  //\n  // Examples of invalid constructors include:\n  // vec4(1, 2)        // not enough components\n  // vec3(vec2(1, 2))  // not enough components\n  // vec3(1, 2, 3, 4)  // too many components\n  // vec2(vec4(1), 1)  // too many components\n\n  const components = scratchStorage.getArray();\n  const call = this._value;\n  const args = this._left;\n  const argsLength = args.length;\n  for (let i = 0; i < argsLength; ++i) {\n    const value = args[i].evaluate(feature);\n    if (typeof value === \"number\") {\n      components.push(value);\n    } else if (value instanceof Cartesian2) {\n      components.push(value.x, value.y);\n    } else if (value instanceof Cartesian3) {\n      components.push(value.x, value.y, value.z);\n    } else if (value instanceof Cartesian4) {\n      components.push(value.x, value.y, value.z, value.w);\n    } else {\n      throw new RuntimeError(\n        `${call} argument must be a vector or number. Argument is ${value}.`,\n      );\n    }\n  }\n\n  const componentsLength = components.length;\n  const vectorLength = parseInt(call.charAt(3));\n\n  if (componentsLength === 0) {\n    throw new RuntimeError(`Invalid ${call} constructor. No valid arguments.`);\n  } else if (componentsLength < vectorLength && componentsLength > 1) {\n    throw new RuntimeError(\n      `Invalid ${call} constructor. Not enough arguments.`,\n    );\n  } else if (componentsLength > vectorLength && argsLength > 1) {\n    throw new RuntimeError(`Invalid ${call} constructor. Too many arguments.`);\n  }\n\n  if (componentsLength === 1) {\n    // Add the same component 3 more times\n    const component = components[0];\n    components.push(component, component, component);\n  }\n\n  if (call === \"vec2\") {\n    return Cartesian2.fromArray(components, 0, scratchStorage.getCartesian2());\n  } else if (call === \"vec3\") {\n    return Cartesian3.fromArray(components, 0, scratchStorage.getCartesian3());\n  } else if (call === \"vec4\") {\n    return Cartesian4.fromArray(components, 0, scratchStorage.getCartesian4());\n  }\n};\n\nNode.prototype._evaluateLiteralString = function () {\n  return this._value;\n};\n\nNode.prototype._evaluateVariableString = function (feature) {\n  let result = this._value;\n  let match = variableRegex.exec(result);\n  while (match !== null) {\n    const placeholder = match[0];\n    const variableName = match[1];\n    let property = getFeatureProperty(feature, variableName);\n    if (!defined(property)) {\n      property = \"\";\n    }\n    result = result.replace(placeholder, property);\n    variableRegex.lastIndex += property.length - placeholder.length;\n    match = variableRegex.exec(result);\n  }\n  return result;\n};\n\nNode.prototype._evaluateVariable = function (feature) {\n  // evaluates to undefined if the property name is not defined for that feature\n  return getFeatureProperty(feature, this._value);\n};\n\nfunction checkFeature(ast) {\n  return ast._value === \"feature\";\n}\n\n// PERFORMANCE_IDEA: Determine if parent property needs to be computed before runtime\nNode.prototype._evaluateMemberDot = function (feature) {\n  if (checkFeature(this._left)) {\n    return getFeatureProperty(feature, this._right.evaluate(feature));\n  }\n  const property = this._left.evaluate(feature);\n  if (!defined(property)) {\n    return undefined;\n  }\n\n  const member = this._right.evaluate(feature);\n  if (\n    property instanceof Cartesian2 ||\n    property instanceof Cartesian3 ||\n    property instanceof Cartesian4\n  ) {\n    // Vector components may be accessed with .r, .g, .b, .a and implicitly with .x, .y, .z, .w\n    if (member === \"r\") {\n      return property.x;\n    } else if (member === \"g\") {\n      return property.y;\n    } else if (member === \"b\") {\n      return property.z;\n    } else if (member === \"a\") {\n      return property.w;\n    }\n  }\n  return property[member];\n};\n\nNode.prototype._evaluateMemberBrackets = function (feature) {\n  if (checkFeature(this._left)) {\n    return getFeatureProperty(feature, this._right.evaluate(feature));\n  }\n  const property = this._left.evaluate(feature);\n  if (!defined(property)) {\n    return undefined;\n  }\n\n  const member = this._right.evaluate(feature);\n  if (\n    property instanceof Cartesian2 ||\n    property instanceof Cartesian3 ||\n    property instanceof Cartesian4\n  ) {\n    // Vector components may be accessed with [0][1][2][3], ['r']['g']['b']['a'] and implicitly with ['x']['y']['z']['w']\n    // For Cartesian2 and Cartesian3 out-of-range components will just return undefined\n    if (member === 0 || member === \"r\") {\n      return property.x;\n    } else if (member === 1 || member === \"g\") {\n      return property.y;\n    } else if (member === 2 || member === \"b\") {\n      return property.z;\n    } else if (member === 3 || member === \"a\") {\n      return property.w;\n    }\n  }\n  return property[member];\n};\n\nNode.prototype._evaluateArray = function (feature) {\n  const array = [];\n  for (let i = 0; i < this._value.length; i++) {\n    array[i] = this._value[i].evaluate(feature);\n  }\n  return array;\n};\n\n// PERFORMANCE_IDEA: Have \"fast path\" functions that deal only with specific types\n// that we can assign if we know the types before runtime\n\nNode.prototype._evaluateNot = function (feature) {\n  const left = this._left.evaluate(feature);\n  if (typeof left !== \"boolean\") {\n    throw new RuntimeError(\n      `Operator \"!\" requires a boolean argument. Argument is ${left}.`,\n    );\n  }\n  return !left;\n};\n\nNode.prototype._evaluateNegative = function (feature) {\n  const left = this._left.evaluate(feature);\n  if (left instanceof Cartesian2) {\n    return Cartesian2.negate(left, scratchStorage.getCartesian2());\n  } else if (left instanceof Cartesian3) {\n    return Cartesian3.negate(left, scratchStorage.getCartesian3());\n  } else if (left instanceof Cartesian4) {\n    return Cartesian4.negate(left, scratchStorage.getCartesian4());\n  } else if (typeof left === \"number\") {\n    return -left;\n  }\n\n  throw new RuntimeError(\n    `Operator \"-\" requires a vector or number argument. Argument is ${left}.`,\n  );\n};\n\nNode.prototype._evaluatePositive = function (feature) {\n  const left = this._left.evaluate(feature);\n\n  if (\n    !(\n      left instanceof Cartesian2 ||\n      left instanceof Cartesian3 ||\n      left instanceof Cartesian4 ||\n      typeof left === \"number\"\n    )\n  ) {\n    throw new RuntimeError(\n      `Operator \"+\" requires a vector or number argument. Argument is ${left}.`,\n    );\n  }\n\n  return left;\n};\n\nNode.prototype._evaluateLessThan = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (typeof left !== \"number\" || typeof right !== \"number\") {\n    throw new RuntimeError(\n      `Operator \"<\" requires number arguments. Arguments are ${left} and ${right}.`,\n    );\n  }\n\n  return left < right;\n};\n\nNode.prototype._evaluateLessThanOrEquals = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (typeof left !== \"number\" || typeof right !== \"number\") {\n    throw new RuntimeError(\n      `Operator \"<=\" requires number arguments. Arguments are ${left} and ${right}.`,\n    );\n  }\n\n  return left <= right;\n};\n\nNode.prototype._evaluateGreaterThan = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (typeof left !== \"number\" || typeof right !== \"number\") {\n    throw new RuntimeError(\n      `Operator \">\" requires number arguments. Arguments are ${left} and ${right}.`,\n    );\n  }\n\n  return left > right;\n};\n\nNode.prototype._evaluateGreaterThanOrEquals = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (typeof left !== \"number\" || typeof right !== \"number\") {\n    throw new RuntimeError(\n      `Operator \">=\" requires number arguments. Arguments are ${left} and ${right}.`,\n    );\n  }\n\n  return left >= right;\n};\n\nNode.prototype._evaluateOr = function (feature) {\n  const left = this._left.evaluate(feature);\n  if (typeof left !== \"boolean\") {\n    throw new RuntimeError(\n      `Operator \"||\" requires boolean arguments. First argument is ${left}.`,\n    );\n  }\n\n  // short circuit the expression\n  if (left) {\n    return true;\n  }\n\n  const right = this._right.evaluate(feature);\n  if (typeof right !== \"boolean\") {\n    throw new RuntimeError(\n      `Operator \"||\" requires boolean arguments. Second argument is ${right}.`,\n    );\n  }\n\n  return left || right;\n};\n\nNode.prototype._evaluateAnd = function (feature) {\n  const left = this._left.evaluate(feature);\n  if (typeof left !== \"boolean\") {\n    throw new RuntimeError(\n      `Operator \"&&\" requires boolean arguments. First argument is ${left}.`,\n    );\n  }\n\n  // short circuit the expression\n  if (!left) {\n    return false;\n  }\n\n  const right = this._right.evaluate(feature);\n  if (typeof right !== \"boolean\") {\n    throw new RuntimeError(\n      `Operator \"&&\" requires boolean arguments. Second argument is ${right}.`,\n    );\n  }\n\n  return left && right;\n};\n\nNode.prototype._evaluatePlus = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n  if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n    return Cartesian2.add(left, right, scratchStorage.getCartesian2());\n  } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n    return Cartesian3.add(left, right, scratchStorage.getCartesian3());\n  } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n    return Cartesian4.add(left, right, scratchStorage.getCartesian4());\n  } else if (typeof left === \"string\" || typeof right === \"string\") {\n    // If only one argument is a string the other argument calls its toString function.\n    return left + right;\n  } else if (typeof left === \"number\" && typeof right === \"number\") {\n    return left + right;\n  }\n\n  throw new RuntimeError(\n    `Operator \"+\" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${left} and ${right}.`,\n  );\n};\n\nNode.prototype._evaluateMinus = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n  if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n    return Cartesian2.subtract(left, right, scratchStorage.getCartesian2());\n  } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n    return Cartesian3.subtract(left, right, scratchStorage.getCartesian3());\n  } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n    return Cartesian4.subtract(left, right, scratchStorage.getCartesian4());\n  } else if (typeof left === \"number\" && typeof right === \"number\") {\n    return left - right;\n  }\n\n  throw new RuntimeError(\n    `Operator \"-\" requires vector or number arguments of matching types. Arguments are ${left} and ${right}.`,\n  );\n};\n\nNode.prototype._evaluateTimes = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n  if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n    return Cartesian2.multiplyComponents(\n      left,\n      right,\n      scratchStorage.getCartesian2(),\n    );\n  } else if (right instanceof Cartesian2 && typeof left === \"number\") {\n    return Cartesian2.multiplyByScalar(\n      right,\n      left,\n      scratchStorage.getCartesian2(),\n    );\n  } else if (left instanceof Cartesian2 && typeof right === \"number\") {\n    return Cartesian2.multiplyByScalar(\n      left,\n      right,\n      scratchStorage.getCartesian2(),\n    );\n  } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n    return Cartesian3.multiplyComponents(\n      left,\n      right,\n      scratchStorage.getCartesian3(),\n    );\n  } else if (right instanceof Cartesian3 && typeof left === \"number\") {\n    return Cartesian3.multiplyByScalar(\n      right,\n      left,\n      scratchStorage.getCartesian3(),\n    );\n  } else if (left instanceof Cartesian3 && typeof right === \"number\") {\n    return Cartesian3.multiplyByScalar(\n      left,\n      right,\n      scratchStorage.getCartesian3(),\n    );\n  } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n    return Cartesian4.multiplyComponents(\n      left,\n      right,\n      scratchStorage.getCartesian4(),\n    );\n  } else if (right instanceof Cartesian4 && typeof left === \"number\") {\n    return Cartesian4.multiplyByScalar(\n      right,\n      left,\n      scratchStorage.getCartesian4(),\n    );\n  } else if (left instanceof Cartesian4 && typeof right === \"number\") {\n    return Cartesian4.multiplyByScalar(\n      left,\n      right,\n      scratchStorage.getCartesian4(),\n    );\n  } else if (typeof left === \"number\" && typeof right === \"number\") {\n    return left * right;\n  }\n\n  throw new RuntimeError(\n    `Operator \"*\" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${left} and ${right}.`,\n  );\n};\n\nNode.prototype._evaluateDivide = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n  if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n    return Cartesian2.divideComponents(\n      left,\n      right,\n      scratchStorage.getCartesian2(),\n    );\n  } else if (left instanceof Cartesian2 && typeof right === \"number\") {\n    return Cartesian2.divideByScalar(\n      left,\n      right,\n      scratchStorage.getCartesian2(),\n    );\n  } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n    return Cartesian3.divideComponents(\n      left,\n      right,\n      scratchStorage.getCartesian3(),\n    );\n  } else if (left instanceof Cartesian3 && typeof right === \"number\") {\n    return Cartesian3.divideByScalar(\n      left,\n      right,\n      scratchStorage.getCartesian3(),\n    );\n  } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n    return Cartesian4.divideComponents(\n      left,\n      right,\n      scratchStorage.getCartesian4(),\n    );\n  } else if (left instanceof Cartesian4 && typeof right === \"number\") {\n    return Cartesian4.divideByScalar(\n      left,\n      right,\n      scratchStorage.getCartesian4(),\n    );\n  } else if (typeof left === \"number\" && typeof right === \"number\") {\n    return left / right;\n  }\n\n  throw new RuntimeError(\n    `Operator \"/\" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${left} and ${right}.`,\n  );\n};\n\nNode.prototype._evaluateMod = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n  if (right instanceof Cartesian2 && left instanceof Cartesian2) {\n    return Cartesian2.fromElements(\n      left.x % right.x,\n      left.y % right.y,\n      scratchStorage.getCartesian2(),\n    );\n  } else if (right instanceof Cartesian3 && left instanceof Cartesian3) {\n    return Cartesian3.fromElements(\n      left.x % right.x,\n      left.y % right.y,\n      left.z % right.z,\n      scratchStorage.getCartesian3(),\n    );\n  } else if (right instanceof Cartesian4 && left instanceof Cartesian4) {\n    return Cartesian4.fromElements(\n      left.x % right.x,\n      left.y % right.y,\n      left.z % right.z,\n      left.w % right.w,\n      scratchStorage.getCartesian4(),\n    );\n  } else if (typeof left === \"number\" && typeof right === \"number\") {\n    return left % right;\n  }\n\n  throw new RuntimeError(\n    `Operator \"%\" requires vector or number arguments of matching types. Arguments are ${left} and ${right}.`,\n  );\n};\n\nNode.prototype._evaluateEqualsStrict = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n  if (\n    (right instanceof Cartesian2 && left instanceof Cartesian2) ||\n    (right instanceof Cartesian3 && left instanceof Cartesian3) ||\n    (right instanceof Cartesian4 && left instanceof Cartesian4)\n  ) {\n    return left.equals(right);\n  }\n  return left === right;\n};\n\nNode.prototype._evaluateNotEqualsStrict = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n  if (\n    (right instanceof Cartesian2 && left instanceof Cartesian2) ||\n    (right instanceof Cartesian3 && left instanceof Cartesian3) ||\n    (right instanceof Cartesian4 && left instanceof Cartesian4)\n  ) {\n    return !left.equals(right);\n  }\n  return left !== right;\n};\n\nNode.prototype._evaluateConditional = function (feature) {\n  const test = this._test.evaluate(feature);\n\n  if (typeof test !== \"boolean\") {\n    throw new RuntimeError(\n      `Conditional argument of conditional expression must be a boolean. Argument is ${test}.`,\n    );\n  }\n\n  if (test) {\n    return this._left.evaluate(feature);\n  }\n  return this._right.evaluate(feature);\n};\n\nNode.prototype._evaluateNaN = function (feature) {\n  return isNaN(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateIsFinite = function (feature) {\n  return isFinite(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateIsExactClass = function (feature) {\n  if (defined(feature)) {\n    return feature.isExactClass(this._left.evaluate(feature));\n  }\n  return false;\n};\n\nNode.prototype._evaluateIsClass = function (feature) {\n  if (defined(feature)) {\n    return feature.isClass(this._left.evaluate(feature));\n  }\n  return false;\n};\n\nNode.prototype._evaluateGetExactClassName = function (feature) {\n  if (defined(feature)) {\n    return feature.getExactClassName();\n  }\n};\n\nNode.prototype._evaluateBooleanConversion = function (feature) {\n  return Boolean(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateNumberConversion = function (feature) {\n  return Number(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateStringConversion = function (feature) {\n  return String(this._left.evaluate(feature));\n};\n\nNode.prototype._evaluateRegExp = function (feature) {\n  const pattern = this._value.evaluate(feature);\n  let flags = \"\";\n\n  if (defined(this._left)) {\n    flags = this._left.evaluate(feature);\n  }\n\n  let exp;\n  try {\n    exp = new RegExp(pattern, flags);\n  } catch (e) {\n    throw new RuntimeError(e);\n  }\n  return exp;\n};\n\nNode.prototype._evaluateRegExpTest = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (!(left instanceof RegExp && typeof right === \"string\")) {\n    throw new RuntimeError(\n      `RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${left} and ${right}.`,\n    );\n  }\n\n  return left.test(right);\n};\n\nNode.prototype._evaluateRegExpMatch = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (left instanceof RegExp && typeof right === \"string\") {\n    return left.test(right);\n  } else if (right instanceof RegExp && typeof left === \"string\") {\n    return right.test(left);\n  }\n\n  throw new RuntimeError(\n    `Operator \"=~\" requires one RegExp argument and one string argument. Arguments are ${left} and ${right}.`,\n  );\n};\n\nNode.prototype._evaluateRegExpNotMatch = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (left instanceof RegExp && typeof right === \"string\") {\n    return !left.test(right);\n  } else if (right instanceof RegExp && typeof left === \"string\") {\n    return !right.test(left);\n  }\n\n  throw new RuntimeError(\n    `Operator \"!~\" requires one RegExp argument and one string argument. Arguments are ${left} and ${right}.`,\n  );\n};\n\nNode.prototype._evaluateRegExpExec = function (feature) {\n  const left = this._left.evaluate(feature);\n  const right = this._right.evaluate(feature);\n\n  if (!(left instanceof RegExp && typeof right === \"string\")) {\n    throw new RuntimeError(\n      `RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${left} and ${right}.`,\n    );\n  }\n\n  const exec = left.exec(right);\n  if (!defined(exec)) {\n    return null;\n  }\n  return exec[1];\n};\n\nNode.prototype._evaluateToString = function (feature) {\n  const left = this._left.evaluate(feature);\n  if (\n    left instanceof RegExp ||\n    left instanceof Cartesian2 ||\n    left instanceof Cartesian3 ||\n    left instanceof Cartesian4\n  ) {\n    return String(left);\n  }\n\n  throw new RuntimeError(`Unexpected function call \"${this._value}\".`);\n};\n\nfunction convertHSLToRGB(ast) {\n  // Check if the color contains any nested expressions to see if the color can be converted here.\n  // E.g. \"hsl(0.9, 0.6, 0.7)\" is able to convert directly to rgb, \"hsl(0.9, 0.6, ${Height})\" is not.\n  const channels = ast._left;\n  const length = channels.length;\n  for (let i = 0; i < length; ++i) {\n    if (channels[i]._type !== ExpressionNodeType.LITERAL_NUMBER) {\n      return undefined;\n    }\n  }\n  const h = channels[0]._value;\n  const s = channels[1]._value;\n  const l = channels[2]._value;\n  const a = length === 4 ? channels[3]._value : 1.0;\n  return Color.fromHsl(h, s, l, a, scratchColor);\n}\n\nfunction convertRGBToColor(ast) {\n  // Check if the color contains any nested expressions to see if the color can be converted here.\n  // E.g. \"rgb(255, 255, 255)\" is able to convert directly to Color, \"rgb(255, 255, ${Height})\" is not.\n  const channels = ast._left;\n  const length = channels.length;\n  for (let i = 0; i < length; ++i) {\n    if (channels[i]._type !== ExpressionNodeType.LITERAL_NUMBER) {\n      return undefined;\n    }\n  }\n  const color = scratchColor;\n  color.red = channels[0]._value / 255.0;\n  color.green = channels[1]._value / 255.0;\n  color.blue = channels[2]._value / 255.0;\n  color.alpha = length === 4 ? channels[3]._value : 1.0;\n  return color;\n}\n\nfunction numberToString(number) {\n  if (number % 1 === 0) {\n    // Add a .0 to whole numbers\n    return number.toFixed(1);\n  }\n\n  return number.toString();\n}\n\nfunction colorToVec3(color) {\n  const r = numberToString(color.red);\n  const g = numberToString(color.green);\n  const b = numberToString(color.blue);\n  return `vec3(${r}, ${g}, ${b})`;\n}\n\nfunction colorToVec4(color) {\n  const r = numberToString(color.red);\n  const g = numberToString(color.green);\n  const b = numberToString(color.blue);\n  const a = numberToString(color.alpha);\n  return `vec4(${r}, ${g}, ${b}, ${a})`;\n}\n\nfunction getExpressionArray(\n  array,\n  variableSubstitutionMap,\n  shaderState,\n  parent,\n) {\n  const length = array.length;\n  const expressions = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    expressions[i] = array[i].getShaderExpression(\n      variableSubstitutionMap,\n      shaderState,\n      parent,\n    );\n  }\n  return expressions;\n}\n\nfunction getVariableName(variableName, variableSubstitutionMap) {\n  if (!defined(variableSubstitutionMap[variableName])) {\n    return Expression.NULL_SENTINEL;\n  }\n\n  return variableSubstitutionMap[variableName];\n}\n\n/**\n * @private\n */\nExpression.NULL_SENTINEL = \"czm_infinity\"; // null just needs to be some sentinel value that will cause \"[expression] === null\" to be false in nearly all cases. GLSL doesn't have a NaN constant so use czm_infinity.\n\nNode.prototype.getShaderExpression = function (\n  variableSubstitutionMap,\n  shaderState,\n  parent,\n) {\n  let color;\n  let left;\n  let right;\n  let test;\n\n  const type = this._type;\n  let value = this._value;\n\n  if (defined(this._left)) {\n    if (Array.isArray(this._left)) {\n      // Left can be an array if the type is LITERAL_COLOR or LITERAL_VECTOR\n      left = getExpressionArray(\n        this._left,\n        variableSubstitutionMap,\n        shaderState,\n        this,\n      );\n    } else {\n      left = this._left.getShaderExpression(\n        variableSubstitutionMap,\n        shaderState,\n        this,\n      );\n    }\n  }\n\n  if (defined(this._right)) {\n    right = this._right.getShaderExpression(\n      variableSubstitutionMap,\n      shaderState,\n      this,\n    );\n  }\n\n  if (defined(this._test)) {\n    test = this._test.getShaderExpression(\n      variableSubstitutionMap,\n      shaderState,\n      this,\n    );\n  }\n\n  if (Array.isArray(this._value)) {\n    // For ARRAY type\n    value = getExpressionArray(\n      this._value,\n      variableSubstitutionMap,\n      shaderState,\n      this,\n    );\n  }\n\n  let args;\n  let length;\n  let vectorExpression;\n  switch (type) {\n    case ExpressionNodeType.VARIABLE:\n      if (checkFeature(this)) {\n        return undefined;\n      }\n      return getVariableName(value, variableSubstitutionMap);\n    case ExpressionNodeType.UNARY:\n      // Supported types: +, -, !, Boolean, Number\n      if (value === \"Boolean\") {\n        return `bool(${left})`;\n      } else if (value === \"Number\") {\n        return `float(${left})`;\n      } else if (value === \"round\") {\n        return `floor(${left} + 0.5)`;\n      } else if (defined(unaryFunctions[value])) {\n        return `${value}(${left})`;\n      } else if (value === \"isNaN\") {\n        // In GLSL 2.0 use isnan instead\n        return `(${left} != ${left})`;\n      } else if (value === \"isFinite\") {\n        // In GLSL 2.0 use isinf instead. GLSL doesn't have an infinity constant so use czm_infinity which is an arbitrarily big enough number.\n        return `(abs(${left}) < czm_infinity)`;\n      } else if (\n        value === \"String\" ||\n        value === \"isExactClass\" ||\n        value === \"isClass\" ||\n        value === \"getExactClassName\"\n      ) {\n        throw new RuntimeError(\n          `Error generating style shader: \"${value}\" is not supported.`,\n        );\n      }\n      return value + left;\n    case ExpressionNodeType.BINARY:\n      // Supported types: ||, &&, ===, !==, <, >, <=, >=, +, -, *, /, %\n      if (value === \"%\") {\n        return `mod(${left}, ${right})`;\n      } else if (value === \"===\") {\n        return `(${left} == ${right})`;\n      } else if (value === \"!==\") {\n        return `(${left} != ${right})`;\n      } else if (value === \"atan2\") {\n        return `atan(${left}, ${right})`;\n      } else if (defined(binaryFunctions[value])) {\n        return `${value}(${left}, ${right})`;\n      }\n      return `(${left} ${value} ${right})`;\n    case ExpressionNodeType.TERNARY:\n      if (defined(ternaryFunctions[value])) {\n        return `${value}(${left}, ${right}, ${test})`;\n      }\n      break;\n    case ExpressionNodeType.CONDITIONAL:\n      return `(${test} ? ${left} : ${right})`;\n    case ExpressionNodeType.MEMBER:\n      if (checkFeature(this._left)) {\n        return getVariableName(right, variableSubstitutionMap);\n      }\n      // This is intended for accessing the components of vector properties. String members aren't supported.\n      // Check for 0.0 rather than 0 because all numbers are previously converted to decimals.\n      if (right === \"r\" || right === \"x\" || right === \"0.0\") {\n        return `${left}[0]`;\n      } else if (right === \"g\" || right === \"y\" || right === \"1.0\") {\n        return `${left}[1]`;\n      } else if (right === \"b\" || right === \"z\" || right === \"2.0\") {\n        return `${left}[2]`;\n      } else if (right === \"a\" || right === \"w\" || right === \"3.0\") {\n        return `${left}[3]`;\n      }\n      return `${left}[int(${right})]`;\n    case ExpressionNodeType.FUNCTION_CALL:\n      throw new RuntimeError(\n        `Error generating style shader: \"${value}\" is not supported.`,\n      );\n    case ExpressionNodeType.ARRAY:\n      if (value.length === 4) {\n        return `vec4(${value[0]}, ${value[1]}, ${value[2]}, ${value[3]})`;\n      } else if (value.length === 3) {\n        return `vec3(${value[0]}, ${value[1]}, ${value[2]})`;\n      } else if (value.length === 2) {\n        return `vec2(${value[0]}, ${value[1]})`;\n      }\n      throw new RuntimeError(\n        \"Error generating style shader: Invalid array length. Array length should be 2, 3, or 4.\",\n      );\n    case ExpressionNodeType.REGEX:\n      throw new RuntimeError(\n        \"Error generating style shader: Regular expressions are not supported.\",\n      );\n    case ExpressionNodeType.VARIABLE_IN_STRING:\n      throw new RuntimeError(\n        \"Error generating style shader: Converting a variable to a string is not supported.\",\n      );\n    case ExpressionNodeType.LITERAL_NULL:\n      return Expression.NULL_SENTINEL;\n    case ExpressionNodeType.LITERAL_BOOLEAN:\n      return value ? \"true\" : \"false\";\n    case ExpressionNodeType.LITERAL_NUMBER:\n      return numberToString(value);\n    case ExpressionNodeType.LITERAL_STRING:\n      if (defined(parent) && parent._type === ExpressionNodeType.MEMBER) {\n        if (\n          value === \"r\" ||\n          value === \"g\" ||\n          value === \"b\" ||\n          value === \"a\" ||\n          value === \"x\" ||\n          value === \"y\" ||\n          value === \"z\" ||\n          value === \"w\" ||\n          checkFeature(parent._left)\n        ) {\n          return value;\n        }\n      }\n      // Check for css color strings\n      color = Color.fromCssColorString(value, scratchColor);\n      if (defined(color)) {\n        return colorToVec3(color);\n      }\n      throw new RuntimeError(\n        \"Error generating style shader: String literals are not supported.\",\n      );\n    case ExpressionNodeType.LITERAL_COLOR:\n      args = left;\n      if (value === \"color\") {\n        if (!defined(args)) {\n          return \"vec4(1.0)\";\n        } else if (args.length > 1) {\n          const rgb = args[0];\n          const alpha = args[1];\n          if (alpha !== \"1.0\") {\n            shaderState.translucent = true;\n          }\n          return `vec4(${rgb}, ${alpha})`;\n        }\n        return `vec4(${args[0]}, 1.0)`;\n      } else if (value === \"rgb\") {\n        color = convertRGBToColor(this);\n        if (defined(color)) {\n          return colorToVec4(color);\n        }\n        return `vec4(${args[0]} / 255.0, ${args[1]} / 255.0, ${args[2]} / 255.0, 1.0)`;\n      } else if (value === \"rgba\") {\n        if (args[3] !== \"1.0\") {\n          shaderState.translucent = true;\n        }\n        color = convertRGBToColor(this);\n        if (defined(color)) {\n          return colorToVec4(color);\n        }\n        return `vec4(${args[0]} / 255.0, ${args[1]} / 255.0, ${args[2]} / 255.0, ${args[3]})`;\n      } else if (value === \"hsl\") {\n        color = convertHSLToRGB(this);\n        if (defined(color)) {\n          return colorToVec4(color);\n        }\n        return `vec4(czm_HSLToRGB(vec3(${args[0]}, ${args[1]}, ${args[2]})), 1.0)`;\n      } else if (value === \"hsla\") {\n        color = convertHSLToRGB(this);\n        if (defined(color)) {\n          if (color.alpha !== 1.0) {\n            shaderState.translucent = true;\n          }\n          return colorToVec4(color);\n        }\n        if (args[3] !== \"1.0\") {\n          shaderState.translucent = true;\n        }\n        return `vec4(czm_HSLToRGB(vec3(${args[0]}, ${args[1]}, ${args[2]})), ${args[3]})`;\n      }\n      break;\n    case ExpressionNodeType.LITERAL_VECTOR:\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(left)) {\n        throw new DeveloperError(\n          \"left should always be defined for type ExpressionNodeType.LITERAL_VECTOR\",\n        );\n      }\n      //>>includeEnd('debug');\n      length = left.length;\n      vectorExpression = `${value}(`;\n      for (let i = 0; i < length; ++i) {\n        vectorExpression += left[i];\n        if (i < length - 1) {\n          vectorExpression += \", \";\n        }\n      }\n      vectorExpression += \")\";\n      return vectorExpression;\n    case ExpressionNodeType.LITERAL_REGEX:\n      throw new RuntimeError(\n        \"Error generating style shader: Regular expressions are not supported.\",\n      );\n    case ExpressionNodeType.LITERAL_UNDEFINED:\n      return Expression.NULL_SENTINEL;\n    case ExpressionNodeType.BUILTIN_VARIABLE:\n      if (value === \"tiles3d_tileset_time\") {\n        return value;\n      }\n  }\n};\n\nNode.prototype.getVariables = function (variables, parent) {\n  let array;\n  let length;\n  let i;\n\n  const type = this._type;\n  const value = this._value;\n\n  if (defined(this._left)) {\n    if (Array.isArray(this._left)) {\n      // Left can be an array if the type is LITERAL_COLOR or LITERAL_VECTOR\n      array = this._left;\n      length = array.length;\n      for (i = 0; i < length; ++i) {\n        array[i].getVariables(variables, this);\n      }\n    } else {\n      this._left.getVariables(variables, this);\n    }\n  }\n\n  if (defined(this._right)) {\n    this._right.getVariables(variables, this);\n  }\n\n  if (defined(this._test)) {\n    this._test.getVariables(variables, this);\n  }\n\n  if (Array.isArray(this._value)) {\n    // For ARRAY type\n    array = this._value;\n    length = array.length;\n    for (i = 0; i < length; ++i) {\n      array[i].getVariables(variables, this);\n    }\n  }\n\n  let match;\n  switch (type) {\n    case ExpressionNodeType.VARIABLE:\n      if (!checkFeature(this)) {\n        variables.push(value);\n      }\n      break;\n    case ExpressionNodeType.VARIABLE_IN_STRING:\n      match = variableRegex.exec(value);\n      while (match !== null) {\n        variables.push(match[1]);\n        match = variableRegex.exec(value);\n      }\n      break;\n    case ExpressionNodeType.LITERAL_STRING:\n      if (\n        defined(parent) &&\n        parent._type === ExpressionNodeType.MEMBER &&\n        checkFeature(parent._left)\n      ) {\n        variables.push(value);\n      }\n      break;\n  }\n};\n\nexport default Expression;\n","/**\n * @private\n */\nconst ExpressionNodeType = {\n  VARIABLE: 0,\n  UNARY: 1,\n  BINARY: 2,\n  TERNARY: 3,\n  CONDITIONAL: 4,\n  MEMBER: 5,\n  FUNCTION_CALL: 6,\n  ARRAY: 7,\n  REGEX: 8,\n  VARIABLE_IN_STRING: 9,\n  LITERAL_NULL: 10,\n  LITERAL_BOOLEAN: 11,\n  LITERAL_NUMBER: 12,\n  LITERAL_STRING: 13,\n  LITERAL_COLOR: 14,\n  LITERAL_VECTOR: 15,\n  LITERAL_REGEX: 16,\n  LITERAL_UNDEFINED: 17,\n  BUILTIN_VARIABLE: 18,\n};\nexport default Object.freeze(ExpressionNodeType);\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Blends the atmosphere to geometry far from the camera for horizon views. Allows for additional\n * performance improvements by rendering less geometry and dispatching less terrain requests.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=fog|Cesium Sandcastle Fog Demo}\n *\n * @alias Fog\n * @constructor\n */\nfunction Fog() {\n  /**\n   * <code>true</code> if fog is enabled, <code>false</code> otherwise.\n   * @type {boolean}\n   * @default true\n   * @example\n   * // Disable fog in the scene\n   * viewer.scene.fog.enabled = false;\n   */\n  this.enabled = true;\n  /**\n   * <code>true</code> if fog is renderable in shaders, <code>false</code> otherwise.\n   * This allows to benefits from optimized tile loading strategy based on fog density without the actual visual rendering.\n   * @type {boolean}\n   * @default true\n   * @example\n   * // Use fog culling but don't render it\n   * viewer.scene.fog.enabled = true;\n   * viewer.scene.fog.renderable = false;\n   */\n  this.renderable = true;\n  /**\n   * A scalar that determines the density of the fog. Terrain that is in full fog are culled.\n   * The density of the fog increases as this number approaches 1.0 and becomes less dense as it approaches zero.\n   * The more dense the fog is, the more aggressively the terrain is culled. For example, if the camera is a height of\n   * 1000.0m above the ellipsoid, increasing the value to 3.0e-3 will cause many tiles close to the viewer be culled.\n   * Decreasing the value will push the fog further from the viewer, but decrease performance as more of the terrain is rendered.\n   * @type {number}\n   * @default 0.0006\n   * @example\n   * // Double the default fog density\n   * viewer.scene.fog.density = 0.0012;\n   */\n  this.density = 0.0006;\n  /**\n   * A scalar used in the function to adjust density based on the height of the camera above the terrain.\n   * @type {number}\n   * @default 0.001\n   */\n  this.heightScalar = 0.001;\n  this._heightFalloff = 0.59;\n  /**\n   * The maximum height fog is applied. If the camera is above this height fog will be disabled.\n   * @type {number}\n   * @default 800000.0\n   */\n  this.maxHeight = 800000.0;\n  /**\n   * A scalar that impacts the visual density of fog. This value does not impact the culling of terrain.\n   * Use in combination with the {@link Fog.density} to make fog appear more or less dense.\n   * @type {number}\n   * @default 0.15\n   * @experimental The value of this scalar may not be final and is subject to change.\n   * @example\n   * // Increase fog appearance effect\n   * viewer.scene.fog.visualDensityScalar = 0.6;\n   */\n  this.visualDensityScalar = 0.15;\n  /**\n   * A factor used to increase the screen space error of terrain tiles when they are partially in fog. The effect is to reduce\n   * the number of terrain tiles requested for rendering. If set to zero, the feature will be disabled. If the value is increased\n   * for mountainous regions, less tiles will need to be requested, but the terrain meshes near the horizon may be a noticeably\n   * lower resolution. If the value is increased in a relatively flat area, there will be little noticeable change on the horizon.\n   * @type {number}\n   * @default 2.0\n   */\n  this.screenSpaceErrorFactor = 2.0;\n  /**\n   * The minimum brightness of the fog color from lighting. A value of 0.0 can cause the fog to be completely black. A value of 1.0 will not affect\n   * the brightness at all.\n   * @type {number}\n   * @default 0.03\n   */\n  this.minimumBrightness = 0.03;\n}\n\nObject.defineProperties(Fog.prototype, {\n  /**\n   * Exponent factor used in the function to adjust how density changes based on the height of the camera above the ellipsoid. Smaller values produce a more gradual transition as camera height increases.\n   * Value must be greater than 0.\n   * @memberof Fog.prototype\n   * @type {number}\n   * @default 0.59\n   */\n  heightFalloff: {\n    get: function () {\n      return this._heightFalloff;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value < 0) {\n        throw new DeveloperError(\"value must be positive.\");\n      }\n      //>>includeEnd('debug');\n\n      this._heightFalloff = value;\n    },\n  },\n});\n\nconst scratchPositionNormal = new Cartesian3();\n\n/**\n * @param {FrameState} frameState\n * @private\n */\nFog.prototype.update = function (frameState) {\n  const enabled = (frameState.fog.enabled = this.enabled);\n  if (!enabled) {\n    return;\n  }\n\n  frameState.fog.renderable = this.renderable;\n\n  const camera = frameState.camera;\n  const positionCartographic = camera.positionCartographic;\n\n  // Turn off fog in space.\n  if (\n    !defined(positionCartographic) ||\n    positionCartographic.height > this.maxHeight ||\n    frameState.mode !== SceneMode.SCENE3D\n  ) {\n    frameState.fog.enabled = false;\n    frameState.fog.density = 0;\n    return;\n  }\n\n  const height = positionCartographic.height;\n  let density =\n    this.density *\n    this.heightScalar *\n    Math.pow(\n      Math.max(height / this.maxHeight, CesiumMath.EPSILON4),\n      -Math.max(this._heightFalloff, 0.0),\n    );\n\n  // Fade fog in as the camera tilts toward the horizon.\n  const positionNormal = Cartesian3.normalize(\n    camera.positionWC,\n    scratchPositionNormal,\n  );\n  const dot = Math.abs(Cartesian3.dot(camera.directionWC, positionNormal));\n  density *= 1.0 - dot;\n\n  frameState.fog.density = density;\n  frameState.fog.visualDensityScalar = this.visualDensityScalar;\n  frameState.fog.sse = this.screenSpaceErrorFactor;\n  frameState.fog.minimumBrightness = this.minimumBrightness;\n};\nexport default Fog;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport TimeConstants from \"../Core/TimeConstants.js\";\n\n/**\n * Monitors the frame rate (frames per second) in a {@link Scene} and raises an event if the frame rate is\n * lower than a threshold.  Later, if the frame rate returns to the required level, a separate event is raised.\n * To avoid creating multiple FrameRateMonitors for a single {@link Scene}, use {@link FrameRateMonitor.fromScene}\n * instead of constructing an instance explicitly.\n *\n * @alias FrameRateMonitor\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Scene} options.scene The Scene instance for which to monitor performance.\n * @param {number} [options.samplingWindow=5.0] The length of the sliding window over which to compute the average frame rate, in seconds.\n * @param {number} [options.quietPeriod=2.0] The length of time to wait at startup and each time the page becomes visible (i.e. when the user\n *        switches back to the tab) before starting to measure performance, in seconds.\n * @param {number} [options.warmupPeriod=5.0] The length of the warmup period, in seconds.  During the warmup period, a separate\n *        (usually lower) frame rate is required.\n * @param {number} [options.minimumFrameRateDuringWarmup=4] The minimum frames-per-second that are required for acceptable performance during\n *        the warmup period.  If the frame rate averages less than this during any samplingWindow during the warmupPeriod, the\n *        lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any.\n * @param {number} [options.minimumFrameRateAfterWarmup=8] The minimum frames-per-second that are required for acceptable performance after\n *        the end of the warmup period.  If the frame rate averages less than this during any samplingWindow after the warmupPeriod, the\n *        lowFrameRate event will be raised and the page will redirect to the redirectOnLowFrameRateUrl, if any.\n */\nfunction FrameRateMonitor(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.scene)) {\n    throw new DeveloperError(\"options.scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._scene = options.scene;\n\n  /**\n   * Gets or sets the length of the sliding window over which to compute the average frame rate, in seconds.\n   * @type {number}\n   */\n  this.samplingWindow =\n    options.samplingWindow ?? FrameRateMonitor.defaultSettings.samplingWindow;\n\n  /**\n   * Gets or sets the length of time to wait at startup and each time the page becomes visible (i.e. when the user\n   * switches back to the tab) before starting to measure performance, in seconds.\n   * @type {number}\n   */\n  this.quietPeriod =\n    options.quietPeriod ?? FrameRateMonitor.defaultSettings.quietPeriod;\n\n  /**\n   * Gets or sets the length of the warmup period, in seconds.  During the warmup period, a separate\n   * (usually lower) frame rate is required.\n   * @type {number}\n   */\n  this.warmupPeriod =\n    options.warmupPeriod ?? FrameRateMonitor.defaultSettings.warmupPeriod;\n\n  /**\n   * Gets or sets the minimum frames-per-second that are required for acceptable performance during\n   * the warmup period.  If the frame rate averages less than this during any <code>samplingWindow</code> during the <code>warmupPeriod</code>, the\n   * <code>lowFrameRate</code> event will be raised and the page will redirect to the <code>redirectOnLowFrameRateUrl</code>, if any.\n   * @type {number}\n   */\n  this.minimumFrameRateDuringWarmup =\n    options.minimumFrameRateDuringWarmup ??\n    FrameRateMonitor.defaultSettings.minimumFrameRateDuringWarmup;\n\n  /**\n   * Gets or sets the minimum frames-per-second that are required for acceptable performance after\n   * the end of the warmup period.  If the frame rate averages less than this during any <code>samplingWindow</code> after the <code>warmupPeriod</code>, the\n   * <code>lowFrameRate</code> event will be raised and the page will redirect to the <code>redirectOnLowFrameRateUrl</code>, if any.\n   * @type {number}\n   */\n  this.minimumFrameRateAfterWarmup =\n    options.minimumFrameRateAfterWarmup ??\n    FrameRateMonitor.defaultSettings.minimumFrameRateAfterWarmup;\n\n  this._lowFrameRate = new Event();\n  this._nominalFrameRate = new Event();\n\n  this._frameTimes = [];\n  this._needsQuietPeriod = true;\n  this._quietPeriodEndTime = 0.0;\n  this._warmupPeriodEndTime = 0.0;\n  this._frameRateIsLow = false;\n  this._lastFramesPerSecond = undefined;\n  this._pauseCount = 0;\n\n  const that = this;\n  this._preUpdateRemoveListener = this._scene.preUpdate.addEventListener(\n    function (scene, time) {\n      update(that, time);\n    },\n  );\n\n  this._hiddenPropertyName =\n    document.hidden !== undefined\n      ? \"hidden\"\n      : document.mozHidden !== undefined\n        ? \"mozHidden\"\n        : document.msHidden !== undefined\n          ? \"msHidden\"\n          : document.webkitHidden !== undefined\n            ? \"webkitHidden\"\n            : undefined;\n\n  const visibilityChangeEventName =\n    document.hidden !== undefined\n      ? \"visibilitychange\"\n      : document.mozHidden !== undefined\n        ? \"mozvisibilitychange\"\n        : document.msHidden !== undefined\n          ? \"msvisibilitychange\"\n          : document.webkitHidden !== undefined\n            ? \"webkitvisibilitychange\"\n            : undefined;\n\n  function visibilityChangeListener() {\n    visibilityChanged(that);\n  }\n\n  this._visibilityChangeRemoveListener = undefined;\n  if (defined(visibilityChangeEventName)) {\n    document.addEventListener(\n      visibilityChangeEventName,\n      visibilityChangeListener,\n      false,\n    );\n\n    this._visibilityChangeRemoveListener = function () {\n      document.removeEventListener(\n        visibilityChangeEventName,\n        visibilityChangeListener,\n        false,\n      );\n    };\n  }\n}\n\n/**\n * The default frame rate monitoring settings.  These settings are used when {@link FrameRateMonitor.fromScene}\n * needs to create a new frame rate monitor, and for any settings that are not passed to the\n * {@link FrameRateMonitor} constructor.\n *\n * @memberof FrameRateMonitor\n * @type {object}\n */\nFrameRateMonitor.defaultSettings = {\n  samplingWindow: 5.0,\n  quietPeriod: 2.0,\n  warmupPeriod: 5.0,\n  minimumFrameRateDuringWarmup: 4,\n  minimumFrameRateAfterWarmup: 8,\n};\n\n/**\n * Gets the {@link FrameRateMonitor} for a given scene.  If the scene does not yet have\n * a {@link FrameRateMonitor}, one is created with the {@link FrameRateMonitor.defaultSettings}.\n *\n * @param {Scene} scene The scene for which to get the {@link FrameRateMonitor}.\n * @returns {FrameRateMonitor} The scene's {@link FrameRateMonitor}.\n */\nFrameRateMonitor.fromScene = function (scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (\n    !defined(scene._frameRateMonitor) ||\n    scene._frameRateMonitor.isDestroyed()\n  ) {\n    scene._frameRateMonitor = new FrameRateMonitor({\n      scene: scene,\n    });\n  }\n\n  return scene._frameRateMonitor;\n};\n\nObject.defineProperties(FrameRateMonitor.prototype, {\n  /**\n   * Gets the {@link Scene} instance for which to monitor performance.\n   * @memberof FrameRateMonitor.prototype\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets the event that is raised when a low frame rate is detected.  The function will be passed\n   * the {@link Scene} instance as its first parameter and the average number of frames per second\n   * over the sampling window as its second parameter.\n   * @memberof FrameRateMonitor.prototype\n   * @type {Event}\n   */\n  lowFrameRate: {\n    get: function () {\n      return this._lowFrameRate;\n    },\n  },\n\n  /**\n   * Gets the event that is raised when the frame rate returns to a normal level after having been low.\n   * The function will be passed the {@link Scene} instance as its first parameter and the average\n   * number of frames per second over the sampling window as its second parameter.\n   * @memberof FrameRateMonitor.prototype\n   * @type {Event}\n   */\n  nominalFrameRate: {\n    get: function () {\n      return this._nominalFrameRate;\n    },\n  },\n\n  /**\n   * Gets the most recently computed average frames-per-second over the last <code>samplingWindow</code>.\n   * This property may be undefined if the frame rate has not been computed.\n   * @memberof FrameRateMonitor.prototype\n   * @type {number}\n   */\n  lastFramesPerSecond: {\n    get: function () {\n      return this._lastFramesPerSecond;\n    },\n  },\n});\n\n/**\n * Pauses monitoring of the frame rate.  To resume monitoring, {@link FrameRateMonitor#unpause}\n * must be called once for each time this function is called.\n * @memberof FrameRateMonitor\n */\nFrameRateMonitor.prototype.pause = function () {\n  ++this._pauseCount;\n  if (this._pauseCount === 1) {\n    this._frameTimes.length = 0;\n    this._lastFramesPerSecond = undefined;\n  }\n};\n\n/**\n * Resumes monitoring of the frame rate.  If {@link FrameRateMonitor#pause} was called\n * multiple times, this function must be called the same number of times in order to\n * actually resume monitoring.\n * @memberof FrameRateMonitor\n */\nFrameRateMonitor.prototype.unpause = function () {\n  --this._pauseCount;\n  if (this._pauseCount <= 0) {\n    this._pauseCount = 0;\n    this._needsQuietPeriod = true;\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @memberof FrameRateMonitor\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see FrameRateMonitor#destroy\n */\nFrameRateMonitor.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Unsubscribes this instance from all events it is listening to.\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @memberof FrameRateMonitor\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see FrameRateMonitor#isDestroyed\n */\nFrameRateMonitor.prototype.destroy = function () {\n  this._preUpdateRemoveListener();\n\n  if (defined(this._visibilityChangeRemoveListener)) {\n    this._visibilityChangeRemoveListener();\n  }\n\n  return destroyObject(this);\n};\n\nfunction update(monitor, time) {\n  if (monitor._pauseCount > 0) {\n    return;\n  }\n\n  const timeStamp = getTimestamp();\n\n  if (monitor._needsQuietPeriod) {\n    monitor._needsQuietPeriod = false;\n    monitor._frameTimes.length = 0;\n    monitor._quietPeriodEndTime =\n      timeStamp + monitor.quietPeriod / TimeConstants.SECONDS_PER_MILLISECOND;\n    monitor._warmupPeriodEndTime =\n      monitor._quietPeriodEndTime +\n      (monitor.warmupPeriod + monitor.samplingWindow) /\n        TimeConstants.SECONDS_PER_MILLISECOND;\n  } else if (timeStamp >= monitor._quietPeriodEndTime) {\n    monitor._frameTimes.push(timeStamp);\n\n    const beginningOfWindow =\n      timeStamp -\n      monitor.samplingWindow / TimeConstants.SECONDS_PER_MILLISECOND;\n\n    if (\n      monitor._frameTimes.length >= 2 &&\n      monitor._frameTimes[0] <= beginningOfWindow\n    ) {\n      while (\n        monitor._frameTimes.length >= 2 &&\n        monitor._frameTimes[1] < beginningOfWindow\n      ) {\n        monitor._frameTimes.shift();\n      }\n\n      const averageTimeBetweenFrames =\n        (timeStamp - monitor._frameTimes[0]) / (monitor._frameTimes.length - 1);\n\n      monitor._lastFramesPerSecond = 1000.0 / averageTimeBetweenFrames;\n\n      const maximumFrameTime =\n        1000.0 /\n        (timeStamp > monitor._warmupPeriodEndTime\n          ? monitor.minimumFrameRateAfterWarmup\n          : monitor.minimumFrameRateDuringWarmup);\n      if (averageTimeBetweenFrames > maximumFrameTime) {\n        if (!monitor._frameRateIsLow) {\n          monitor._frameRateIsLow = true;\n          monitor._needsQuietPeriod = true;\n          monitor.lowFrameRate.raiseEvent(\n            monitor.scene,\n            monitor._lastFramesPerSecond,\n          );\n        }\n      } else if (monitor._frameRateIsLow) {\n        monitor._frameRateIsLow = false;\n        monitor._needsQuietPeriod = true;\n        monitor.nominalFrameRate.raiseEvent(\n          monitor.scene,\n          monitor._lastFramesPerSecond,\n        );\n      }\n    }\n  }\n}\n\nfunction visibilityChanged(monitor) {\n  if (document[monitor._hiddenPropertyName]) {\n    monitor.pause();\n  } else {\n    monitor.unpause();\n  }\n}\nexport default FrameRateMonitor;\n","import SceneMode from \"./SceneMode.js\";\n\n/**\n * State information about the current frame.  An instance of this class\n * is provided to update functions.\n *\n * @param {Context} context The rendering context\n * @param {CreditDisplay} creditDisplay Handles adding and removing credits from an HTML element\n * @param {JobScheduler} jobScheduler The job scheduler\n *\n * @alias FrameState\n * @constructor\n *\n * @private\n */\nfunction FrameState(context, creditDisplay, jobScheduler) {\n  /**\n   * The rendering context.\n   *\n   * @type {Context}\n   */\n  this.context = context;\n\n  /**\n   * An array of rendering commands.\n   *\n   * @type {DrawCommand[]}\n   */\n  this.commandList = [];\n\n  /**\n   * An array of panorama rendering commands.\n   *\n   * @type {DrawCommand[]}\n   */\n  this.panoramaCommandList = [];\n\n  /**\n   * An array of shadow maps.\n   * @type {ShadowMap[]}\n   */\n  this.shadowMaps = [];\n\n  /**\n   * The BRDF look up texture generator used for image-based lighting for PBR models\n   * @type {BrdfLutGenerator}\n   */\n  this.brdfLutGenerator = undefined;\n\n  /**\n   * The environment map used for image-based lighting for PBR models\n   * @type {CubeMap}\n   */\n  this.environmentMap = undefined;\n\n  /**\n   * The spherical harmonic coefficients used for image-based lighting for PBR models.\n   * @type {Cartesian3[]}\n   */\n  this.sphericalHarmonicCoefficients = undefined;\n\n  /**\n   * The specular environment atlas used for image-based lighting for PBR models.\n   * @type {Texture}\n   */\n  this.specularEnvironmentMaps = undefined;\n\n  /**\n   * The maximum level-of-detail of the specular environment atlas used for image-based lighting for PBR models.\n   * @type {number}\n   */\n  this.specularEnvironmentMapsMaximumLOD = undefined;\n\n  /**\n   * The current mode of the scene.\n   *\n   * @type {SceneMode}\n   * @default {@link SceneMode.SCENE3D}\n   */\n  this.mode = SceneMode.SCENE3D;\n\n  /**\n   * The current morph transition time between 2D/Columbus View and 3D,\n   * with 0.0 being 2D or Columbus View and 1.0 being 3D.\n   *\n   * @type {number}\n   */\n  this.morphTime = SceneMode.getMorphTime(SceneMode.SCENE3D);\n\n  /**\n   * The current frame number.\n   *\n   * @type {number}\n   * @default 0\n   */\n  this.frameNumber = 0;\n\n  /**\n   * <code>true</code> if a new frame has been issued and the frame number has been updated.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.newFrame = false;\n\n  /**\n   * The scene's current time.\n   *\n   * @type {JulianDate}\n   * @default undefined\n   */\n  this.time = undefined;\n\n  /**\n   * The job scheduler.\n   *\n   * @type {JobScheduler}\n   */\n  this.jobScheduler = jobScheduler;\n\n  /**\n   * The map projection to use in 2D and Columbus View modes.\n   *\n   * @type {MapProjection}\n   * @default undefined\n   */\n  this.mapProjection = undefined;\n\n  /**\n   * The current camera.\n   *\n   * @type {Camera}\n   * @default undefined\n   */\n  this.camera = undefined;\n\n  /**\n   * Whether the camera is underground.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.cameraUnderground = false;\n\n  /**\n   * The {@link GlobeTranslucencyState} object used by the scene.\n   *\n   * @type {GlobeTranslucencyState}\n   * @default undefined\n   */\n  this.globeTranslucencyState = undefined;\n\n  /**\n   * The culling volume.\n   *\n   * @type {CullingVolume}\n   * @default undefined\n   */\n  this.cullingVolume = undefined;\n\n  /**\n   * The current occluder.\n   *\n   * @type {Occluder}\n   * @default undefined\n   */\n  this.occluder = undefined;\n\n  /**\n   * The maximum screen-space error used to drive level-of-detail refinement.  Higher\n   * values will provide better performance but lower visual quality.\n   *\n   * @type {number}\n   * @default 2\n   */\n  this.maximumScreenSpaceError = undefined;\n\n  /**\n   * Ratio between a pixel and a density-independent pixel. Provides a standard unit of\n   * measure for real pixel measurements appropriate to a particular device.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.pixelRatio = 1.0;\n\n  /**\n   * @typedef FrameState.Passes\n   * @type {object}\n   * @property {boolean} render <code>true</code> if the primitive should update for a render pass, <code>false</code> otherwise.\n   * @property {boolean} pick <code>true</code> if the primitive should update for a picking pass, <code>false</code> otherwise.\n   * @property {boolean} pickVoxel <code>true</code> if the primitive should update for a voxel picking pass, <code>false</code> otherwise.\n   * @property {boolean} depth <code>true</code> if the primitive should update for a depth only pass, <code>false</code> otherwise.\n   * @property {boolean} postProcess <code>true</code> if the primitive should update for a per-feature post-process pass, <code>false</code> otherwise.\n   * @property {boolean} offscreen <code>true</code> if the primitive should update for an offscreen pass, <code>false</code> otherwise.\n   */\n\n  /**\n   * @type {FrameState.Passes}\n   */\n  this.passes = {\n    /**\n     * @default false\n     */\n    render: false,\n    /**\n     * @default false\n     */\n    pick: false,\n    /**\n     * @default false\n     */\n    pickVoxel: false,\n    /**\n     * @default false\n     */\n    depth: false,\n    /**\n     * @default false\n     */\n    postProcess: false,\n    /**\n     * @default false\n     */\n    offscreen: false,\n  };\n\n  /**\n   * The credit display.\n   *\n   * @type {CreditDisplay}\n   */\n  this.creditDisplay = creditDisplay;\n\n  /**\n   * An array of functions to be called at the end of the frame.  This array\n   * will be cleared after each frame.\n   * <p>\n   * This allows queueing up events in <code>update</code> functions and\n   * firing them at a time when the subscribers are free to change the\n   * scene state, e.g., manipulate the camera, instead of firing events\n   * directly in <code>update</code> functions.\n   * </p>\n   * <p>\n   * If any function in the array returns <code>true</code>, in request render mode\n   * another frame will be rendered.\n   * </p>\n   *\n   * @type {FrameState.AfterRenderCallback[]}\n   *\n   * @example\n   * frameState.afterRender.push(function() {\n   *   // take some action, raise an event, etc.\n   * });\n   */\n  this.afterRender = [];\n\n  /**\n   * Gets whether or not to optimize for 3D only.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.scene3DOnly = false;\n\n  /**\n   * @typedef FrameState.Fog\n   * @type {object}\n   * @property {boolean} enabled <code>true</code> if fog is enabled, <code>false</code> otherwise. This affects both fog culling and rendering.\n   * @property {boolean} renderable <code>true</code> if fog should be rendered, <code>false</code> if not. This flag should be checked in combination with fog.enabled.\n   * @property {number | undefined} density A positive number used to mix the color and fog color based on camera distance.\n   * @property {number | undefined} visualDensityScalar A positive number to modify how impactful the fog is based off the density\n   * @property {number | undefined} sse A scalar used to modify the screen space error of geometry partially in fog.\n   * @property {number | undefined} minimumBrightness The minimum brightness of terrain with fog applied.\n   */\n\n  /**\n   * @type {FrameState.Fog}\n   */\n\n  this.fog = {\n    /**\n     * @default false\n     */\n    enabled: false,\n    renderable: false,\n    density: undefined,\n    visualDensityScalar: undefined,\n    sse: undefined,\n    minimumBrightness: undefined,\n  };\n\n  /**\n   * The current Atmosphere\n   * @type {Atmosphere}\n   */\n  this.atmosphere = undefined;\n\n  /**\n   * A scalar used to vertically exaggerate the scene\n   * @type {number}\n   * @default 1.0\n   */\n  this.verticalExaggeration = 1.0;\n\n  /**\n   * The height relative to which the scene is vertically exaggerated.\n   * @type {number}\n   * @default 0.0\n   */\n  this.verticalExaggerationRelativeHeight = 0.0;\n\n  /**\n   * @typedef FrameState.ShadowState\n   * @type {object}\n   * @property {boolean} shadowsEnabled Whether there are any active shadow maps this frame.\n   * @property {boolean} lightShadowsEnabled Whether there are any active shadow maps that originate from light sources. Does not include shadow maps that are used for analytical purposes.\n   * @property {ShadowMap[]} shadowMaps All shadow maps that are enabled this frame.\n   * @property {ShadowMap[]} lightShadowMaps Shadow maps that originate from light sources. Does not include shadow maps that are used for analytical purposes. Only these shadow maps will be used to generate receive shadows shaders.\n   * @property {number} nearPlane The near plane of the scene's frustum commands. Used for fitting cascaded shadow maps.\n   * @property {number} farPlane The far plane of the scene's frustum commands. Used for fitting cascaded shadow maps.\n   * @property {number} closestObjectSize The size of the bounding volume that is closest to the camera. This is used to place more shadow detail near the object.\n   * @property {number} lastDirtyTime The time when a shadow map was last dirty\n   * @property {boolean} outOfView Whether the shadows maps are out of view this frame\n   */\n\n  /**\n   * @type {FrameState.ShadowState}\n   */\n\n  this.shadowState = {\n    /**\n     * @default true\n     */\n    shadowsEnabled: true,\n    shadowMaps: [],\n    lightShadowMaps: [],\n    /**\n     * @default 1.0\n     */\n    nearPlane: 1.0,\n    /**\n     * @default 5000.0\n     */\n    farPlane: 5000.0,\n    /**\n     * @default 1000.0\n     */\n    closestObjectSize: 1000.0,\n    /**\n     * @default 0\n     */\n    lastDirtyTime: 0,\n    /**\n     * @default true\n     */\n    outOfView: true,\n  };\n\n  /**\n   * The position of the splitter to use when rendering different things on either side of a splitter.\n   * This value should be between 0.0 and 1.0 with 0 being the far left of the viewport and 1 being the far right of the viewport.\n   * @type {number}\n   * @default 0.0\n   */\n  this.splitPosition = 0.0;\n\n  /**\n   * Distances to the near and far planes of the camera frustums\n   * @type {number[]}\n   * @default []\n   */\n  this.frustumSplits = [];\n\n  /**\n   * The current scene background color\n   *\n   * @type {Color}\n   */\n  this.backgroundColor = undefined;\n\n  /**\n   * The light used to shade the scene.\n   *\n   * @type {Light}\n   */\n  this.light = undefined;\n\n  /**\n   * The distance from the camera at which to disable the depth test of billboards, labels and points\n   * to, for example, prevent clipping against terrain. When set to zero, the depth test should always\n   * be applied. When less than zero, the depth test should never be applied.\n   * @type {number}\n   */\n  this.minimumDisableDepthTestDistance = undefined;\n\n  /**\n   * When <code>false</code>, 3D Tiles will render normally. When <code>true</code>, classified 3D Tile geometry will render normally and\n   * unclassified 3D Tile geometry will render with the color multiplied with {@link FrameState#invertClassificationColor}.\n   * @type {boolean}\n   * @default false\n   */\n  this.invertClassification = false;\n\n  /**\n   * The highlight color of unclassified 3D Tile geometry when {@link FrameState#invertClassification} is <code>true</code>.\n   * @type {Color}\n   */\n  this.invertClassificationColor = undefined;\n\n  /**\n   * Whether or not the scene uses a logarithmic depth buffer.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.useLogDepth = false;\n\n  /**\n   * Additional state used to update 3D Tilesets.\n   *\n   * @type {Cesium3DTilePassState}\n   */\n  this.tilesetPassState = undefined;\n\n  /**\n   * The minimum terrain height out of all rendered terrain tiles. Used to improve culling for objects underneath the ellipsoid but above terrain.\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.minimumTerrainHeight = 0.0;\n\n  /**\n   * Whether metadata picking is currently in progress.\n   *\n   * This is set to `true` in the `Picking.pickMetadata` function,\n   * immediately before updating and executing the draw commands,\n   * and set back to `false` immediately afterwards. It will be\n   * used to determine whether the metadata picking draw commands\n   * should be executed, in the `Scene.executeCommand` function.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.pickingMetadata = false;\n\n  /**\n   * Metadata picking information.\n   *\n   * This describes the metadata property that is supposed to be picked\n   * in a `Picking.pickMetadata` call.\n   *\n   * This is stored in the frame state and in the metadata picking draw\n   * commands. In the `Scene.updateDerivedCommands` call, it will be\n   * checked whether the instance that is stored in the frame state\n   * is different from the one in the draw command, and if necessary,\n   * the derived commands for metadata picking will be updated based\n   * on this information.\n   *\n   * @type {PickedMetadataInfo|undefined}\n   */\n  this.pickedMetadataInfo = undefined;\n\n  /**\n   * Internal toggle indicating that at least one primitive for this frame requested\n   * edge visibility rendering (EXT_mesh_primitive_edge_visibility). This allows\n   * lazy allocation/activation of the edge MRT without storing a Scene reference\n   * on the frame state (avoids passing entire Scene through internal APIs).\n   * Set by model pipeline stages when they encounter edge visibility data.\n   * Consumed by Scene to flip its _enableEdgeVisibility flag.\n   * @type {boolean}\n   * @private\n   */\n  this.edgeVisibilityRequested = false;\n}\n\n/**\n * A function that will be called at the end of the frame.\n *\n * @callback FrameState.AfterRenderCallback\n * @returns {boolean} true if another render should be requested in request render mode\n */\nexport default FrameState;\n","import Pass from \"../Renderer/Pass.js\";\n\n/**\n * Defines a list of commands whose geometry are bound by near and far distances from the camera.\n * @alias FrustumCommands\n * @constructor\n *\n * @param {number} [near=0.0] The lower bound or closest distance from the camera.\n * @param {number} [far=0.0] The upper bound or farthest distance from the camera.\n *\n * @private\n */\nfunction FrustumCommands(near, far) {\n  this.near = near ?? 0.0;\n  this.far = far ?? 0.0;\n\n  const numPasses = Pass.NUMBER_OF_PASSES;\n  const commands = new Array(numPasses);\n  const indices = new Array(numPasses);\n\n  for (let i = 0; i < numPasses; ++i) {\n    commands[i] = [];\n    indices[i] = 0;\n  }\n\n  this.commands = commands;\n  this.indices = indices;\n}\nexport default FrustumCommands;\n","import defined from \"../Core/defined.js\";\nimport Resource from \"../Core/Resource.js\";\nimport GltfLoader from \"./GltfLoader.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Axis from \"./Axis.js\";\nimport GaussianSplatPrimitive from \"./GaussianSplatPrimitive.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ModelUtility from \"./Model/ModelUtility.js\";\nimport VertexAttributeSemantic from \"./VertexAttributeSemantic.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\n\n/**\n * Represents the contents of a glTF or glb using the {@link https://github.com/CesiumGS/glTF/tree/draft-splat-spz/extensions/2.0/Khronos/KHR_gaussian_splatting | KHR_gaussian_splatting} and {@link https://github.com/CesiumGS/glTF/tree/draft-splat-spz/extensions/2.0/Khronos/KHR_gaussian_splatting_compression_spz_2 | KHR_gaussian_splatting_compression_spz_2} extensions.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias GaussianSplat3DTileContent\n * @constructor\n */\nfunction GaussianSplat3DTileContent(loader, tileset, tile, resource) {\n  this._tileset = tileset;\n  this._tile = tile;\n  this._resource = resource;\n  this._loader = loader;\n\n  if (!defined(this._tileset.gaussianSplatPrimitive)) {\n    this._tileset.gaussianSplatPrimitive = new GaussianSplatPrimitive({\n      tileset: this._tileset,\n    });\n  }\n\n  /**\n   * Local copy of the position attribute buffer that has been transformed into root tile space. Originals are kept in the gltf loader.\n   * Used for rendering\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  this._positions = undefined;\n\n  /**\n   * Local copy of the rotation attribute buffer that has been transformed into root tile space. Originals are kept in the gltf loader.\n   * Used for rendering\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  this._rotations = undefined;\n\n  /**\n   * Local copy of the scale attribute buffer that has been transformed into root tile space. Originals are kept in the gltf loader.\n   * Used for rendering\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  this._scales = undefined;\n\n  /**\n   * glTF primitive data that contains the Gaussian splat data needed for rendering.\n   * @type {undefined|Primitive}\n   * @private\n   */\n  this.gltfPrimitive = undefined;\n\n  /**\n   * Transform matrix to turn model coordinates into world coordinates.\n   * @type {undefined|Matrix4}\n   * @private\n   */\n  this.worldTransform = undefined;\n\n  /**\n   * Gets or sets if any feature's property changed.  Used to\n   * optimized applying a style when a feature's property changed.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  this.featurePropertiesDirty = false;\n\n  this._metadata = undefined;\n  this._group = undefined;\n  this._ready = false;\n  /**\n   * Indicates whether or not the local coordinates of the tile have been transformed\n   * @type {boolean}\n   * @private\n   */\n  this._transformed = false;\n\n  /**\n   * The degree of the spherical harmonics used for the Gaussian splats.\n   * @type {number}\n   * @private\n   */\n  this._sphericalHarmonicsDegree = 0;\n\n  /**\n   * The number of spherical harmonic coefficients used for the Gaussian splats.\n   * @type {number}\n   * @private\n   */\n  this._sphericalHarmonicsCoefficientCount = 0;\n\n  /**\n   * Spherical Harmonic data that has been packed for use in a texture or shader.\n   * @type {undefined|Uint32Array}\n   * @private\n   */\n  this._packedSphericalHarmonicsData = undefined;\n}\n\n/**\n * Performs checks to ensure that the provided tileset has the Gaussian Splatting extensions.\n *\n * @param {Cesium3DTileset} tileset The tileset to check for the extensions.\n * @returns {boolean} Returns <code>true</code> if the necessary extensions are included in the tileset.\n * @static\n */\nGaussianSplat3DTileContent.tilesetRequiresGaussianSplattingExt = function (\n  tileset,\n) {\n  let hasGaussianSplatExtension = false;\n  if (tileset.isGltfExtensionRequired instanceof Function) {\n    hasGaussianSplatExtension =\n      tileset.isGltfExtensionRequired(\"KHR_gaussian_splatting\") &&\n      tileset.isGltfExtensionRequired(\n        \"KHR_gaussian_splatting_compression_spz_2\",\n      );\n\n    if (\n      tileset.isGltfExtensionRequired(\"KHR_spz_gaussian_splats_compression\")\n    ) {\n      deprecationWarning(\n        \"KHR_spz_gaussian_splats_compression\",\n        \"Support for the original KHR_spz_gaussian_splats_compression extension has been removed in favor \" +\n          \"of the up to date KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extensions\" +\n          \"\\n\\nPlease retile your tileset with the KHR_gaussian_splatting and \" +\n          \"KHR_gaussian_splatting_compression_spz_2 extensions.\",\n      );\n    }\n  }\n\n  return hasGaussianSplatExtension;\n};\n\nObject.defineProperties(GaussianSplat3DTileContent.prototype, {\n  /**\n   * Gets the number of features in the tile. Currently this is always zero.\n   *\n   * @memberof GaussianSplat3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  featuresLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Equal to the number of Gaussian splats in the tile. Each splat is represented by a median point and a set of attributes, so we can\n   * treat this as the number of points in the tile.\n   *\n   * @memberof GaussianSplat3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  pointsLength: {\n    get: function () {\n      return this.gltfPrimitive.attributes[0].count;\n    },\n  },\n  /**\n   * Gets the number of triangles in the tile. Currently this is always zero because Gaussian splats are not represented as triangles in the tile content.\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  trianglesLength: {\n    get: function () {\n      return 0;\n    },\n  },\n  /**\n   * The number of bytes used by the geometry attributes of this content.\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   * @type {number}\n   * @readonly\n   */\n  geometryByteLength: {\n    get: function () {\n      return this.gltfPrimitive.attributes.reduce((totalLength, attribute) => {\n        return totalLength + attribute.byteLength;\n      }, 0);\n    },\n  },\n  /**\n   * The number of bytes used by the textures of this content.\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   * @type {number}\n   * @readonly\n   */\n  texturesByteLength: {\n    get: function () {\n      const texture = this._tileset.gaussianSplatPrimitive.gaussianSplatTexture;\n      const selectedTileLength =\n        this._tileset.gaussianSplatPrimitive.selectedTileLength;\n      if (!defined(texture) || selectedTileLength === 0) {\n        return 0;\n      }\n      return texture.sizeInBytes / selectedTileLength;\n    },\n  },\n  /**\n   * Gets the amount of memory used by the batch table textures and any binary\n   * metadata properties not accounted for in geometryByteLength or\n   * texturesByteLength\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  batchTableByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n  /**\n   * Gets the array of {@link Cesium3DTileContent} objects for contents that contain other contents, such as composite tiles. The inner contents may in turn have inner contents, such as a composite tile that contains a composite tile.\n   *\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Composite|Composite specification}\n   *\n   * @memberof GaussianSplat3DTileContent.prototype\n   *\n   * @type {Array}\n   * @readonly\n   */\n  innerContents: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof GaussianSplat3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is transformed to world coordinates; otherwise false\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  transformed: {\n    get: function () {\n      return this._transformed;\n    },\n  },\n\n  /**\n   * The tileset that this content belongs to.\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   * @type {Cesium3DTileset}\n   * @readonly\n   */\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n  /**\n   * The tile that this content belongs to.\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   * @type {Cesium3DTile}\n   * @readonly\n   */\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n  /**\n   * The resource that this content was loaded from.\n   * <p>\n   * @memberof GaussianSplat3DTileContent.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource.getUrlComponent(true);\n    },\n  },\n  /**\n   * Gets the batch table for this content.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {Cesium3DTileBatchTable}\n   * @readonly\n   *\n   * @private\n   */\n  batchTable: {\n    get: function () {\n      return undefined;\n    },\n  },\n  /**\n   * Gets the metadata for this content, whether it is available explicitly or via\n   * implicit tiling. If there is no metadata, this property should be undefined.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {ImplicitMetadataView|undefined}\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n    set: function (value) {\n      this._metadata = value;\n    },\n  },\n  /**\n   * Gets the group for this content if the content has metadata (3D Tiles 1.1) or\n   * if it uses the <code>3DTILES_metadata</code> extension. If neither are present,\n   * this property should be undefined.\n   * <p>\n   * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n   * not part of the public Cesium API.\n   * </p>\n   *\n   * @type {Cesium3DTileContentGroup|undefined}\n   *\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  group: {\n    get: function () {\n      return this._group;\n    },\n    set: function (value) {\n      this._group = value;\n    },\n  },\n\n  /**\n   * Get the transformed positions of this tile's Gaussian splats.\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  positions: {\n    get: function () {\n      return this._positions;\n    },\n  },\n  /**\n   * Get the transformed rotations of this tile's Gaussian splats.\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  rotations: {\n    get: function () {\n      return this._rotations;\n    },\n  },\n\n  /**\n   * Get the transformed scales of this tile's Gaussian splats.\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  scales: {\n    get: function () {\n      return this._scales;\n    },\n  },\n\n  /**\n   * The number of spherical harmonic coefficients used for the Gaussian splats.\n   * @type {number}\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  sphericalHarmonicsCoefficientCount: {\n    get: function () {\n      return this._sphericalHarmonicsCoefficientCount;\n    },\n  },\n  /**\n   * The degree of the spherical harmonics used for the Gaussian splats.\n   * @type {number}\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  sphericalHarmonicsDegree: {\n    get: function () {\n      return this._sphericalHarmonicsDegree;\n    },\n  },\n\n  /**\n   * The packed spherical harmonic data for the Gaussian splats for use a shader or texture.\n   * @type {number}\n   * @private\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  packedSphericalHarmonicsData: {\n    get: function () {\n      return this._packedSphericalHarmonicsData;\n    },\n  },\n});\n\nfunction getShAttributePrefix(attribute) {\n  const prefix = attribute.startsWith(\"KHR_gaussian_splatting:\")\n    ? \"KHR_gaussian_splatting:\"\n    : \"_\";\n  return `${prefix}SH_DEGREE_`;\n}\n\n/**\n * Determine Spherical Harmonics degree and coefficient count from attributes\n * @param {Attribute[]} attributes - The list of glTF attributes.\n * @returns {object} An object containing the degree (l) and coefficient (n).\n * @private\n */\nfunction degreeAndCoefFromAttributes(attributes) {\n  const shAttributes = attributes.filter((attr) =>\n    attr.name.includes(\"SH_DEGREE_\"),\n  );\n\n  switch (shAttributes.length) {\n    default:\n    case 0:\n      return { l: 0, n: 0 };\n    case 3:\n      return { l: 1, n: 9 };\n    case 8:\n      return { l: 2, n: 24 };\n    case 15:\n      return { l: 3, n: 45 };\n  }\n}\n\n/**\n * Converts a 32-bit floating point number to a 16-bit floating point number.\n * @param {number} float32 input\n * @returns {number} Half precision float\n * @private\n */\nconst buffer = new ArrayBuffer(4);\nconst floatView = new Float32Array(buffer);\nconst intView = new Uint32Array(buffer);\n\nfunction float32ToFloat16(float32) {\n  floatView[0] = float32;\n  const bits = intView[0];\n\n  const sign = (bits >> 31) & 0x1;\n  const exponent = (bits >> 23) & 0xff;\n  const mantissa = bits & 0x7fffff;\n\n  let half;\n\n  if (exponent === 0xff) {\n    half = (sign << 15) | (0x1f << 10) | (mantissa ? 0x200 : 0);\n  } else if (exponent === 0) {\n    half = sign << 15;\n  } else {\n    const newExponent = exponent - 127 + 15;\n    if (newExponent >= 31) {\n      half = (sign << 15) | (0x1f << 10);\n    } else if (newExponent <= 0) {\n      half = sign << 15;\n    } else {\n      half = (sign << 15) | (newExponent << 10) | (mantissa >>> 13);\n    }\n  }\n\n  return half;\n}\n\n/**\n * Extracts the spherical harmonic degree and coefficient from the attribute name.\n * @param {string} attribute - The attribute name.\n * @returns {object} An object containing the degree (l) and coefficient (n).\n * @private\n */\nfunction extractSHDegreeAndCoef(attribute) {\n  const prefix = getShAttributePrefix(attribute);\n  const separator = \"_COEF_\";\n\n  const lStart = prefix.length;\n  const coefIndex = attribute.indexOf(separator, lStart);\n\n  const l = parseInt(attribute.slice(lStart, coefIndex), 10);\n  const n = parseInt(attribute.slice(coefIndex + separator.length), 10);\n\n  return { l, n };\n}\n\n/**\n * Packs spherical harmonic data into half-precision floats.\n * @param {GaussianSplat3DTileContent} tileContent - The tile content containing the spherical harmonic data.\n * @returns {Uint32Array} - The Float16 packed spherical harmonic data.\n * @private\n */\nfunction packSphericalHarmonicsData(tileContent) {\n  const degree = tileContent.sphericalHarmonicsDegree;\n  const coefs = tileContent.sphericalHarmonicsCoefficientCount;\n  const totalLength = tileContent.pointsLength * (coefs * (2 / 3)); //3 packs into 2\n  const packedData = new Uint32Array(totalLength);\n\n  const shAttributes = tileContent.gltfPrimitive.attributes.filter((attr) =>\n    attr.name.includes(\"SH_DEGREE_\"),\n  );\n  let stride = 0;\n  const base = [0, 9, 24];\n  switch (degree) {\n    case 1:\n      stride = 9;\n      break;\n    case 2:\n      stride = 24;\n      break;\n    case 3:\n      stride = 45;\n      break;\n  }\n  shAttributes.sort((a, b) => {\n    if (a.name < b.name) {\n      return -1;\n    }\n    if (a.name > b.name) {\n      return 1;\n    }\n\n    return 0;\n  });\n  const packedStride = stride * (2 / 3);\n  for (let i = 0; i < shAttributes.length; i++) {\n    const { l, n } = extractSHDegreeAndCoef(shAttributes[i].name);\n    for (let j = 0; j < tileContent.pointsLength; j++) {\n      //interleave the data\n      const packedBase = (base[l - 1] * 2) / 3;\n      const idx = j * packedStride + packedBase + n * 2;\n      const src = j * 3;\n      packedData[idx] =\n        float32ToFloat16(shAttributes[i].typedArray[src]) |\n        (float32ToFloat16(shAttributes[i].typedArray[src + 1]) << 16);\n      packedData[idx + 1] = float32ToFloat16(\n        shAttributes[i].typedArray[src + 2],\n      );\n    }\n  }\n  return packedData;\n}\n\n/**\n * Creates a new instance of {@link GaussianSplat3DTileContent} from a glTF or glb resource.\n *\n * @param {Cesium3DTileset} tileset - The tileset that this content belongs to.\n * @param {Cesium3DTile} tile - The tile that this content belongs to.\n * @param {Resource|string} resource - The resource or URL of the glTF or glb file.\n * @param {object|Uint8Array} gltf - The glTF JSON object or a Uint8Array containing the glb binary data.\n * @returns {GaussianSplat3DTileContent} A new GaussianSplat3DTileContent instance.\n * @throws {RuntimeError} If the glTF or glb fails to load.\n * @private\n */\nGaussianSplat3DTileContent.fromGltf = async function (\n  tileset,\n  tile,\n  resource,\n  gltf,\n) {\n  const basePath = resource;\n  const baseResource = Resource.createIfNeeded(basePath);\n\n  const loaderOptions = {\n    releaseGltfJson: false,\n    upAxis: Axis.Y,\n    forwardAxis: Axis.Z,\n  };\n\n  if (defined(gltf.asset)) {\n    loaderOptions.gltfJson = gltf;\n    loaderOptions.baseResource = baseResource;\n    loaderOptions.gltfResource = baseResource;\n  } else if (gltf instanceof Uint8Array) {\n    loaderOptions.typedArray = gltf;\n    loaderOptions.baseResource = baseResource;\n    loaderOptions.gltfResource = baseResource;\n  } else {\n    loaderOptions.gltfResource = Resource.createIfNeeded(gltf);\n  }\n\n  const loader = new GltfLoader(loaderOptions);\n\n  try {\n    await loader.load();\n  } catch (error) {\n    loader.destroy();\n    throw new RuntimeError(`Failed to load glTF: ${error.message}`);\n  }\n\n  return new GaussianSplat3DTileContent(loader, tileset, tile, resource);\n};\n\n/**\n * Updates the content of the tile and prepares it for rendering.\n * @param {Cesium3DTileset}￼Data attribution\n * @param {FrameState} frameState - The current frame state.\n * @private\n */\nGaussianSplat3DTileContent.prototype.update = function (primitive, frameState) {\n  const loader = this._loader;\n\n  if (this._ready) {\n    if (!this._transformed && primitive.root.content.ready) {\n      GaussianSplatPrimitive.transformTile(this._tile);\n      this._transformed = true;\n    }\n\n    return;\n  }\n\n  frameState.afterRender.push(() => true);\n\n  if (!defined(loader)) {\n    this._ready = true;\n    return;\n  }\n\n  if (this._resourcesLoaded) {\n    this.gltfPrimitive = loader.components.scene.nodes[0].primitives[0];\n    this.worldTransform = loader.components.scene.nodes[0].matrix;\n    this._ready = true;\n\n    this._positions = new Float32Array(\n      ModelUtility.getAttributeBySemantic(\n        this.gltfPrimitive,\n        VertexAttributeSemantic.POSITION,\n      ).typedArray,\n    );\n\n    this._rotations = new Float32Array(\n      ModelUtility.getAttributeBySemantic(\n        this.gltfPrimitive,\n        VertexAttributeSemantic.ROTATION,\n      ).typedArray,\n    );\n\n    this._scales = new Float32Array(\n      ModelUtility.getAttributeBySemantic(\n        this.gltfPrimitive,\n        VertexAttributeSemantic.SCALE,\n      ).typedArray,\n    );\n\n    const { l, n } = degreeAndCoefFromAttributes(this.gltfPrimitive.attributes);\n    this._sphericalHarmonicsDegree = l;\n    this._sphericalHarmonicsCoefficientCount = n;\n\n    this._packedSphericalHarmonicsData = packSphericalHarmonicsData(this);\n\n    return;\n  }\n\n  this._resourcesLoaded = loader.process(frameState);\n};\n/**\n * Returns whether the feature has this property.\n *\n * @param {number} batchId The batchId for the feature.\n * @param {string} name The case-sensitive name of the property.\n * @returns {boolean} <code>true</code> if the feature has this property; otherwise, <code>false</code>.\n */\nGaussianSplat3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return false;\n};\n\n/**\n * Returns the {@link Cesium3DTileFeature} object for the feature with the\n * given <code>batchId</code>.  This object is used to get and modify the\n * feature's properties.\n * <p>\n * Features in a tile are ordered by <code>batchId</code>, an index used to retrieve their metadata from the batch table.\n * </p>\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/BatchTable}.\n *\n * @param {number} batchId The batchId for the feature.\n * @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.\n *\n * @exception {DeveloperError} batchId must be between zero and {@link Cesium3DTileContent#featuresLength} - 1.\n */\nGaussianSplat3DTileContent.prototype.getFeature = function (batchId) {\n  return undefined;\n};\n/**\n     * Called when {@link Cesium3DTileset#debugColorizeTiles} changes.\n     * <p>\n     * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n     * not part of the public Cesium API.\n     * </p>\n     *\n     * @param {boolean} enabled Whether to enable or disable debug settings.\n     * @returns {Cesium3DTileFeature} The corresponding {@link Cesium3DTileFeature} object.\n\n     * @private\n     */\nGaussianSplat3DTileContent.prototype.applyDebugSettings = function (\n  enabled,\n  color,\n) {};\n/**\n * Apply a style to the content\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @param {Cesium3DTileStyle} style The style.\n *\n * @private\n */\nGaussianSplat3DTileContent.prototype.applyStyle = function (style) {};\n/**\n * Find an intersection between a ray and the tile content surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nGaussianSplat3DTileContent.prototype.pick = function (ray, frameState, result) {\n  return undefined;\n};\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * <p>\n * This is used to implement the <code>Cesium3DTileContent</code> interface, but is\n * not part of the public Cesium API.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Cesium3DTileContent#destroy\n *\n * @private\n */\nGaussianSplat3DTileContent.prototype.isDestroyed = function () {\n  return this.isDestroyed;\n};\n\n/**\n * Frees the resources used by this object.\n * @private\n */\nGaussianSplat3DTileContent.prototype.destroy = function () {\n  this.splatPrimitive = undefined;\n\n  if (\n    defined(this._tileset.gaussianSplatPrimitive) &&\n    !this._tileset.gaussianSplatPrimitive.isDestroyed()\n  ) {\n    this._tileset.gaussianSplatPrimitive.destroy();\n  }\n  this._tileset.gaussianSplatPrimitive = undefined;\n\n  this._tile = undefined;\n  this._tileset = undefined;\n  this._resource = undefined;\n  this._ready = false;\n  this._group = undefined;\n  this._metadata = undefined;\n  this._resourcesLoaded = false;\n\n  if (defined(this._loader)) {\n    this._loader.destroy();\n    this._loader = undefined;\n  }\n\n  return destroyObject(this);\n};\n\nexport default GaussianSplat3DTileContent;\n","import Frozen from \"../Core/Frozen.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport ModelUtility from \"./Model/ModelUtility.js\";\nimport GaussianSplatSorter from \"./GaussianSplatSorter.js\";\nimport GaussianSplatTextureGenerator from \"./GaussianSplatTextureGenerator.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport GaussianSplatRenderResources from \"./GaussianSplatRenderResources.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport ShaderDestination from \"../Renderer/ShaderDestination.js\";\nimport GaussianSplatVS from \"../Shaders/PrimitiveGaussianSplatVS.js\";\nimport GaussianSplatFS from \"../Shaders/PrimitiveGaussianSplatFS.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport VertexAttributeSemantic from \"./VertexAttributeSemantic.js\";\nimport AttributeType from \"./AttributeType.js\";\nimport ModelComponents from \"./ModelComponents.js\";\nimport Axis from \"./Axis.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport SplitDirection from \"./SplitDirection.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport Transforms from \"../Core/Transforms.js\";\n\nconst scratchMatrix4A = new Matrix4();\nconst scratchMatrix4B = new Matrix4();\nconst scratchMatrix4C = new Matrix4();\nconst scratchMatrix4D = new Matrix4();\n\n/**\n * Runtime state machine for steady-state re-sorting of an already committed snapshot.\n *\n * The transition points are in {@link GaussianSplatPrimitive#update}:\n * - IDLE -> WAITING/SORTING when a new steady sort request is scheduled\n * - WAITING -> SORTING when a sorter promise becomes available\n * - SORTING -> SORTED when the active promise resolves with a valid result\n * - SORTED -> IDLE after rebuilding the draw command with fresh indexes\n * - Any state -> ERROR when the active sort promise rejects\n *\n * @private\n */\nconst GaussianSplatSortingState = {\n  // No steady sort request is in flight. update() may decide to start one.\n  IDLE: 0,\n  // A steady sort was requested, but sorter capacity was unavailable this frame.\n  WAITING: 1,\n  // A steady sort promise is in flight and results are pending.\n  SORTING: 2,\n  // A valid sorted index buffer is available and waiting to be committed to draw command.\n  SORTED: 3,\n  // The active sort request failed; update() throws the captured error.\n  ERROR: 4,\n};\n\n/**\n * Snapshot lifecycle for rebuilding aggregated splat data.\n *\n * Transition order:\n * BUILDING -> TEXTURE_PENDING -> TEXTURE_READY -> SORTING -> READY\n *\n * The transition points are split across two functions:\n * - {@link GaussianSplatPrimitive#update} drives BUILDING/SORTING/READY\n * - {@link GaussianSplatPrimitive.generateSplatTexture} drives TEXTURE_PENDING/TEXTURE_READY\n *\n * A snapshot is committed only when it reaches READY, so all GPU resources\n * and sorted indexes swap atomically as one unit.\n *\n * @private\n */\nconst SnapshotState = {\n  // CPU aggregation is complete and this snapshot is ready to start async texture generation.\n  BUILDING: \"BUILDING\",\n  // Async texture generation/upload is in flight for this snapshot.\n  TEXTURE_PENDING: \"TEXTURE_PENDING\",\n  // Attribute textures are ready; snapshot can now request index sorting.\n  TEXTURE_READY: \"TEXTURE_READY\",\n  // Sort request is in flight for this snapshot generation.\n  SORTING: \"SORTING\",\n  // Sorted indexes were validated for this generation and may be committed.\n  READY: \"READY\",\n};\n\n/**\n * Aggregated Gaussian splat snapshot data that is built asynchronously and\n * atomically committed once all required resources are ready.\n *\n * @typedef {object} GaussianSplatPrimitive.Snapshot\n * @property {number} generation Monotonic data generation token.\n * @property {Float32Array} positions Packed splat positions (xyz).\n * @property {Float32Array} rotations Packed splat rotations (xyzw).\n * @property {Float32Array} scales Packed splat scales (xyz).\n * @property {Uint8Array} colors Packed splat colors (rgba).\n * @property {Uint32Array|undefined} shData Packed spherical harmonics data.\n * @property {number} sphericalHarmonicsDegree Spherical harmonics degree.\n * @property {number} shCoefficientCount Coefficients per splat.\n * @property {number} numSplats Total splat count in this snapshot.\n * @property {Uint32Array|undefined} indexes Sorted index buffer when READY.\n * @property {Texture|undefined} gaussianSplatTexture Packed splat attribute texture.\n * @property {Texture|undefined} sphericalHarmonicsTexture Packed SH texture.\n * @property {number} lastTextureWidth Last splat texture width.\n * @property {number} lastTextureHeight Last splat texture height.\n * @property {string} state Current snapshot lifecycle state from {@link SnapshotState}.\n * @private\n */\n\n/**\n * Packed spherical harmonics texture payload.\n *\n * @typedef {object} GaussianSplatPrimitive.SphericalHarmonicsTextureData\n * @property {number} width Texture width in texels.\n * @property {number} height Texture height in texels.\n * @property {ArrayBufferView} data Packed unsigned integer texture data.\n * @private\n */\n\n/**\n * Packed Gaussian splat attribute texture payload.\n *\n * @typedef {object} GaussianSplatPrimitive.AttributeTextureData\n * @property {number} width Texture width in texels.\n * @property {number} height Texture height in texels.\n * @property {ArrayBufferView} data Packed unsigned integer texture data.\n * @private\n */\n\n// Two stable frames avoids rebuilding during brief selected-tile jitter.\nconst DEFAULT_STABLE_FRAMES = 2;\n// If selection keeps changing, force a rebuild after ~0.5s at 60fps to guarantee progress.\n// Lower values react faster but can thrash on noisy LOD transitions.\n// Higher values reduce rebuild churn but keep stale snapshots visible longer.\nconst DEFAULT_MAX_SNAPSHOT_STALL_FRAMES = 30;\n// Minimum delay between steady re-sort requests once the camera is moving.\nconst DEFAULT_SORT_MIN_FRAME_INTERVAL = 3;\n// ~0.5 degree camera direction change threshold before triggering steady re-sort.\nconst DEFAULT_SORT_MIN_ANGLE_RADIANS = 0.008726646259971648;\n// Minimum camera movement in world units before triggering steady re-sort.\nconst DEFAULT_SORT_MIN_POSITION_DELTA = 1.0;\n\n/**\n * Determines whether the camera has moved or rotated enough since the last\n * steady sort to justify scheduling a new one.\n *\n * Returns {@code true} when any of the following hold:\n * - No previous steady sort has been recorded yet.\n * - The camera position has moved by at least {@link DEFAULT_SORT_MIN_POSITION_DELTA} world units.\n * - The camera direction has changed by at least {@link DEFAULT_SORT_MIN_ANGLE_RADIANS} radians.\n *\n * A minimum frame interval ({@link DEFAULT_SORT_MIN_FRAME_INTERVAL}) is\n * enforced to prevent re-sorting every single frame.\n *\n * @param {GaussianSplatPrimitive} primitive The splat primitive to check.\n * @param {FrameState} frameState The current frame state.\n * @returns {boolean} Whether a new steady sort should begin.\n * @private\n */\nfunction shouldStartSteadySort(primitive, frameState) {\n  const framesSinceLastSort =\n    primitive._lastSteadySortFrameNumber >= 0\n      ? frameState.frameNumber - primitive._lastSteadySortFrameNumber\n      : Number.POSITIVE_INFINITY;\n  if (\n    primitive._lastSteadySortFrameNumber >= 0 &&\n    framesSinceLastSort < DEFAULT_SORT_MIN_FRAME_INTERVAL\n  ) {\n    return false;\n  }\n\n  const camera = frameState.camera;\n  if (!defined(camera)) {\n    return false;\n  }\n  if (\n    !primitive._hasLastSteadySortCameraPosition ||\n    !primitive._hasLastSteadySortCameraDirection\n  ) {\n    return true;\n  }\n\n  const positionDelta = Cartesian3.distance(\n    camera.positionWC,\n    primitive._lastSteadySortCameraPosition,\n  );\n  if (positionDelta >= DEFAULT_SORT_MIN_POSITION_DELTA) {\n    return true;\n  }\n\n  const angleDelta = Cartesian3.angleBetween(\n    camera.directionWC,\n    primitive._lastSteadySortCameraDirection,\n  );\n  return angleDelta >= DEFAULT_SORT_MIN_ANGLE_RADIANS;\n}\n\n/**\n * Records the frame number and camera pose at the start of a steady sort so\n * that {@link shouldStartSteadySort} can later compute deltas.\n *\n * @param {GaussianSplatPrimitive} primitive The splat primitive to update.\n * @param {FrameState} frameState The current frame state.\n * @private\n */\nfunction markSteadySortStart(primitive, frameState) {\n  primitive._lastSteadySortFrameNumber = frameState.frameNumber;\n  const camera = frameState.camera;\n  if (!defined(camera)) {\n    return;\n  }\n  Cartesian3.clone(camera.positionWC, primitive._lastSteadySortCameraPosition);\n  primitive._hasLastSteadySortCameraPosition = true;\n  Cartesian3.clone(\n    camera.directionWC,\n    primitive._lastSteadySortCameraDirection,\n  );\n  primitive._hasLastSteadySortCameraDirection = true;\n}\n\n/**\n * Checks whether the set of currently selected tiles differs from the set\n * recorded on the primitive. This is used to detect LOD transitions that\n * require a snapshot rebuild.\n *\n * @param {GaussianSplatPrimitive} primitive The splat primitive.\n * @param {Cesium3DTile[]} selectedTiles The tiles selected this frame.\n * @returns {boolean} {@code true} if the tile set has changed.\n * @private\n */\nfunction haveSelectedTilesChanged(primitive, selectedTiles) {\n  const prevSet = primitive._selectedTileSet;\n  if (!defined(prevSet) || prevSet.size !== selectedTiles.length) {\n    return true;\n  }\n\n  for (let i = 0; i < selectedTiles.length; i++) {\n    if (!prevSet.has(selectedTiles[i])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns whether the given sort result still matches the primitive's current\n * sort request and data generation, i.e. it has not been superseded.\n *\n * @param {GaussianSplatPrimitive} primitive The splat primitive.\n * @param {object} activeSort The sort result to validate.\n * @returns {boolean} {@code true} if the sort result is still current.\n * @private\n */\nfunction isActiveSort(primitive, activeSort) {\n  return (\n    defined(activeSort) &&\n    activeSort.requestId === primitive._sortRequestId &&\n    activeSort.dataGeneration === primitive._splatDataGeneration\n  );\n}\n\n/**\n * Destroys the GPU textures owned by a snapshot, if any, and clears the\n * references so they are not used after destruction.\n *\n * @param {GaussianSplatPrimitive.Snapshot|undefined} snapshot The snapshot whose textures should be destroyed.\n * @private\n */\nfunction destroySnapshotTextures(snapshot) {\n  if (!defined(snapshot)) {\n    return;\n  }\n  if (defined(snapshot.gaussianSplatTexture)) {\n    snapshot.gaussianSplatTexture.destroy();\n    snapshot.gaussianSplatTexture = undefined;\n  }\n  if (defined(snapshot.sphericalHarmonicsTexture)) {\n    snapshot.sphericalHarmonicsTexture.destroy();\n    snapshot.sphericalHarmonicsTexture = undefined;\n  }\n}\n\n/**\n * Schedules a GPU texture for deferred destruction. The texture is kept alive\n * for one additional frame so that any in-flight draw commands that reference\n * it can finish before the underlying GPU resource is released.\n *\n * @param {GaussianSplatPrimitive} primitive The owning primitive.\n * @param {Texture|undefined} texture The texture to retire.\n * @param {number} frameNumber The frame number at which the texture was retired.\n * @private\n */\nfunction retireTexture(primitive, texture, frameNumber) {\n  if (!defined(texture)) {\n    return;\n  }\n  const retired = primitive._retiredTextures;\n  retired.push({\n    texture: texture,\n    frameNumber: frameNumber,\n  });\n}\n\n/**\n * Destroys any retired textures whose grace period (one frame) has elapsed.\n * Called once per frame to reclaim GPU memory from textures that were replaced\n * by a newer snapshot.\n *\n * @param {GaussianSplatPrimitive} primitive The owning primitive.\n * @param {number} frameNumber The current frame number.\n * @private\n */\nfunction releaseRetiredTextures(primitive, frameNumber) {\n  const retired = primitive._retiredTextures;\n  if (!defined(retired) || retired.length === 0) {\n    return;\n  }\n  const next = [];\n  for (let i = 0; i < retired.length; i++) {\n    const entry = retired[i];\n    if (frameNumber - entry.frameNumber > 0) {\n      entry.texture.destroy();\n    } else {\n      next.push(entry);\n    }\n  }\n  primitive._retiredTextures = next;\n}\n\n/**\n * Atomically promotes a fully-built snapshot to be the active splat data for\n * the primitive. This includes swapping attribute arrays, GPU textures, and\n * sorted indexes, as well as retiring any previously active textures so they\n * can be safely destroyed after the current frame finishes.\n *\n * The snapshot <b>must</b> be in the {@link SnapshotState.READY} state;\n * otherwise a {@link DeveloperError} is thrown.\n *\n * @param {GaussianSplatPrimitive} primitive The owning primitive.\n * @param {GaussianSplatPrimitive.Snapshot} snapshot The snapshot to commit.\n * @param {FrameState} frameState The current frame state.\n * @throws {DeveloperError} If the snapshot is not READY.\n * @private\n */\nfunction commitSnapshot(primitive, snapshot, frameState) {\n  if (!defined(snapshot.indexes) || snapshot.state !== SnapshotState.READY) {\n    throw new DeveloperError(\"Committing snapshot before it is READY.\");\n  }\n\n  const frameNumber = frameState.frameNumber;\n  const currentSnapshot = primitive._snapshot;\n  const splatTexture = defined(currentSnapshot)\n    ? currentSnapshot.gaussianSplatTexture\n    : primitive.gaussianSplatTexture;\n  if (defined(splatTexture) && splatTexture !== snapshot.gaussianSplatTexture) {\n    retireTexture(primitive, splatTexture, frameNumber);\n  }\n\n  const sphericalHarmonicsTexture = defined(currentSnapshot)\n    ? currentSnapshot.sphericalHarmonicsTexture\n    : primitive.sphericalHarmonicsTexture;\n  if (\n    defined(sphericalHarmonicsTexture) &&\n    sphericalHarmonicsTexture !== snapshot.sphericalHarmonicsTexture\n  ) {\n    retireTexture(primitive, sphericalHarmonicsTexture, frameNumber);\n  }\n\n  primitive._snapshot = snapshot;\n  primitive._positions = snapshot.positions;\n  primitive._rotations = snapshot.rotations;\n  primitive._scales = snapshot.scales;\n  primitive._colors = snapshot.colors;\n  primitive._shData = snapshot.shData;\n  primitive._sphericalHarmonicsDegree = snapshot.sphericalHarmonicsDegree;\n  primitive._numSplats = snapshot.numSplats;\n  primitive._indexes = snapshot.indexes;\n  primitive.gaussianSplatTexture = snapshot.gaussianSplatTexture;\n  primitive.sphericalHarmonicsTexture = snapshot.sphericalHarmonicsTexture;\n  primitive._lastTextureWidth = snapshot.lastTextureWidth;\n  primitive._lastTextureHeight = snapshot.lastTextureHeight;\n  primitive._hasGaussianSplatTexture = defined(snapshot.gaussianSplatTexture);\n  primitive._needsGaussianSplatTexture = false;\n  primitive._gaussianSplatTexturePending = false;\n\n  primitive._vertexArray = undefined;\n  primitive._vertexArrayLen = -1;\n  primitive._drawCommand = undefined;\n  primitive._sorterPromise = undefined;\n  primitive._activeSort = undefined;\n  primitive._sorterState = GaussianSplatSortingState.IDLE;\n  primitive._dirty = false;\n}\n\n/**\n * Finalizes async splat texture generation for a snapshot. The resolved data\n * updates or recreates GPU textures, and the snapshot transitions to\n * {@link SnapshotState.TEXTURE_READY} when complete.\n *\n * @param {GaussianSplatPrimitive} primitive The owning primitive.\n * @param {FrameState} frameState The current frame state.\n * @param {GaussianSplatPrimitive.Snapshot} snapshot Snapshot being populated.\n * @param {Promise<GaussianSplatPrimitive.AttributeTextureData>} promise Promise that resolves to packed splat texture data.\n * @returns {Promise<void>}\n * @private\n */\nasync function processGeneratedSplatTextureData(\n  primitive,\n  frameState,\n  snapshot,\n  promise,\n) {\n  try {\n    const splatTextureData = await promise;\n    if (primitive._pendingSnapshot !== snapshot) {\n      snapshot.state = SnapshotState.BUILDING;\n      return;\n    }\n    if (!defined(snapshot.gaussianSplatTexture)) {\n      snapshot.gaussianSplatTexture = createGaussianSplatTexture(\n        frameState.context,\n        splatTextureData,\n      );\n    } else if (\n      snapshot.lastTextureHeight !== splatTextureData.height ||\n      snapshot.lastTextureWidth !== splatTextureData.width\n    ) {\n      const oldTex = snapshot.gaussianSplatTexture;\n      snapshot.gaussianSplatTexture = createGaussianSplatTexture(\n        frameState.context,\n        splatTextureData,\n      );\n      oldTex.destroy();\n    } else {\n      snapshot.gaussianSplatTexture.copyFrom({\n        source: {\n          width: splatTextureData.width,\n          height: splatTextureData.height,\n          arrayBufferView: splatTextureData.data,\n        },\n      });\n    }\n    snapshot.lastTextureHeight = splatTextureData.height;\n    snapshot.lastTextureWidth = splatTextureData.width;\n\n    if (defined(snapshot.shData) && snapshot.sphericalHarmonicsDegree > 0) {\n      const oldTex = snapshot.sphericalHarmonicsTexture;\n      const width = ContextLimits.maximumTextureSize;\n      const dims = snapshot.shCoefficientCount / 3;\n      const splatsPerRow = Math.floor(width / dims);\n      const floatsPerRow = splatsPerRow * (dims * 2);\n      const texBuf = new Uint32Array(\n        width * Math.ceil(snapshot.numSplats / splatsPerRow) * 2,\n      );\n\n      let dataIndex = 0;\n      for (let i = 0; dataIndex < snapshot.shData.length; i += width * 2) {\n        texBuf.set(\n          snapshot.shData.subarray(dataIndex, dataIndex + floatsPerRow),\n          i,\n        );\n        dataIndex += floatsPerRow;\n      }\n      snapshot.sphericalHarmonicsTexture = createSphericalHarmonicsTexture(\n        frameState.context,\n        {\n          data: texBuf,\n          width: width,\n          height: Math.ceil(snapshot.numSplats / splatsPerRow),\n        },\n      );\n      if (defined(oldTex)) {\n        oldTex.destroy();\n      }\n    }\n\n    snapshot.state = SnapshotState.TEXTURE_READY;\n  } catch (error) {\n    console.error(\"Error generating Gaussian splat texture:\", error);\n    snapshot.state = SnapshotState.BUILDING;\n  }\n}\n\n/**\n * Resolves an in-flight sort for a pending snapshot, validates that the result\n * still matches the active generation/request, and commits the snapshot when\n * valid.\n *\n * @param {GaussianSplatPrimitive} primitive The owning primitive.\n * @param {FrameState} frameState The current frame state.\n * @param {object|undefined} pendingSort Pending sort metadata.\n * @param {Promise<Uint32Array>} sortPromise Promise that resolves to sorted indexes.\n * @returns {Promise<void>}\n * @private\n */\nasync function resolvePendingSnapshotSort(\n  primitive,\n  frameState,\n  pendingSort,\n  sortPromise,\n) {\n  try {\n    const sortedData = await sortPromise;\n    if (\n      !defined(pendingSort) ||\n      pendingSort.snapshot !== primitive._pendingSnapshot\n    ) {\n      return;\n    }\n    const expectedCount = pendingSort.expectedCount;\n    const currentCount = expectedCount;\n    const sortedLen = sortedData?.length;\n    if (expectedCount !== currentCount || sortedLen !== expectedCount) {\n      primitive._pendingSortPromise = undefined;\n      primitive._pendingSort = undefined;\n      if (pendingSort.snapshot.state === SnapshotState.SORTING) {\n        pendingSort.snapshot.state = SnapshotState.TEXTURE_READY;\n      }\n      return;\n    }\n\n    const pending = pendingSort.snapshot;\n    pending.indexes = sortedData;\n    pending.state = SnapshotState.READY;\n    primitive._pendingSortPromise = undefined;\n    primitive._pendingSort = undefined;\n    commitSnapshot(primitive, pending, frameState);\n    primitive._pendingSnapshot = undefined;\n    GaussianSplatPrimitive.buildGSplatDrawCommand(primitive, frameState);\n  } catch (err) {\n    if (\n      !defined(pendingSort) ||\n      pendingSort.snapshot !== primitive._pendingSnapshot\n    ) {\n      return;\n    }\n    primitive._pendingSortPromise = undefined;\n    primitive._pendingSort = undefined;\n    if (pendingSort.snapshot.state === SnapshotState.SORTING) {\n      pendingSort.snapshot.state = SnapshotState.TEXTURE_READY;\n    }\n    primitive._sorterState = GaussianSplatSortingState.ERROR;\n    primitive._sorterError = err;\n  }\n}\n\n/**\n * Resolves an in-flight steady-state sort for the current committed snapshot.\n * Results are ignored when superseded; otherwise, they advance sorting state\n * to {@link GaussianSplatSortingState.SORTED}.\n *\n * @param {GaussianSplatPrimitive} primitive The owning primitive.\n * @param {object|undefined} activeSort Active sort metadata.\n * @param {Promise<Uint32Array>} sortPromise Promise that resolves to sorted indexes.\n * @returns {Promise<void>}\n * @private\n */\nasync function resolveSteadySort(primitive, activeSort, sortPromise) {\n  try {\n    const sortedData = await sortPromise;\n    const isActive = isActiveSort(primitive, activeSort);\n    const expectedCount = activeSort?.expectedCount;\n    const currentCount = expectedCount;\n    const sortedLen = sortedData?.length;\n    const isMismatch =\n      expectedCount !== currentCount || sortedLen !== expectedCount;\n    if (!isActive || isMismatch) {\n      if (isActive) {\n        primitive._sorterPromise = undefined;\n        primitive._sorterState = GaussianSplatSortingState.IDLE;\n      }\n      return;\n    }\n    primitive._indexes = sortedData;\n    primitive._sorterState = GaussianSplatSortingState.SORTED;\n  } catch (err) {\n    if (!isActiveSort(primitive, activeSort)) {\n      return;\n    }\n    primitive._sorterState = GaussianSplatSortingState.ERROR;\n    primitive._sorterError = err;\n  }\n}\n\n/**\n * Creates a GPU texture that stores packed spherical harmonics coefficient\n * data for all splats. The texture uses a two-channel unsigned-integer format\n * ({@link PixelFormat.RG_INTEGER}) and nearest-neighbor sampling.\n *\n * @param {Context} context The WebGL context.\n * @param {GaussianSplatPrimitive.SphericalHarmonicsTextureData} shData Packed SH texture payload.\n * @returns {Texture} The created texture.\n * @private\n */\nfunction createSphericalHarmonicsTexture(context, shData) {\n  const texture = new Texture({\n    context: context,\n    source: {\n      width: shData.width,\n      height: shData.height,\n      arrayBufferView: shData.data,\n    },\n    preMultiplyAlpha: false,\n    skipColorSpaceConversion: true,\n    pixelFormat: PixelFormat.RG_INTEGER,\n    pixelDatatype: PixelDatatype.UNSIGNED_INT,\n    flipY: false,\n    sampler: Sampler.NEAREST,\n  });\n\n  return texture;\n}\n\n/**\n * Creates a GPU texture that stores the packed Gaussian splat attributes\n * (positions, scales, rotations, colors). The texture uses an RGBA\n * unsigned-integer format ({@link PixelFormat.RGBA_INTEGER}) and\n * nearest-neighbor sampling.\n *\n * @param {Context} context The WebGL context.\n * @param {GaussianSplatPrimitive.AttributeTextureData} splatTextureData Packed splat texture payload.\n * @returns {Texture} The created texture.\n * @private\n */\nfunction createGaussianSplatTexture(context, splatTextureData) {\n  return new Texture({\n    context: context,\n    source: {\n      width: splatTextureData.width,\n      height: splatTextureData.height,\n      arrayBufferView: splatTextureData.data,\n    },\n    preMultiplyAlpha: false,\n    skipColorSpaceConversion: true,\n    pixelFormat: PixelFormat.RGBA_INTEGER,\n    pixelDatatype: PixelDatatype.UNSIGNED_INT,\n    flipY: false,\n    sampler: Sampler.NEAREST,\n  });\n}\n\n/** A primitive that renders Gaussian splats.\n * <p>\n * This primitive is used to render Gaussian splats in a 3D Tileset.\n * It is designed to work with the KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extensions.\n * </p>\n * @alias GaussianSplatPrimitive\n * @constructor\n * @param {object} options An object with the following properties:\n * @param {Cesium3DTileset} options.tileset The tileset that this primitive belongs to.\n * @param {boolean} [options.debugShowBoundingVolume=false] Whether to show the bounding volume of the primitive for debugging purposes.\n * @private\n */\n\nfunction GaussianSplatPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The positions of the Gaussian splats in the primitive.\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  this._positions = undefined;\n  /**\n   * The rotations of the Gaussian splats in the primitive.\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  this._rotations = undefined;\n  /**\n   * The scales of the Gaussian splats in the primitive.\n   * @type {undefined|Float32Array}\n   * @private\n   */\n  this._scales = undefined;\n  /**\n   * The colors of the Gaussian splats in the primitive.\n   * @type {undefined|Uint8Array}\n   * @private\n   */\n  this._colors = undefined;\n  /**\n   * The indexes of the Gaussian splats in the primitive.\n   * Used to index into the splat attribute texture in the vertex shader.\n   * @type {undefined|Uint32Array}\n   * @private\n   */\n  this._indexes = undefined;\n  /**\n   * The number of splats in the primitive.\n   * This is the total number of splats across all selected tiles.\n   * @type {number}\n   * @private\n   */\n  this._numSplats = 0;\n  /**\n   * Indicates whether or not the primitive needs a Gaussian splat texture.\n   * This is set to true when the primitive is first created or when the splat attributes change.\n   * @type {boolean}\n   * @private\n   */\n  this._needsGaussianSplatTexture = true;\n  this._snapshot = undefined;\n  this._pendingSnapshot = undefined;\n  this._retiredTextures = [];\n\n  /**\n   * Scratch buffer re-used across frames for aggregating packed spherical\n   * harmonics data so that a fresh typed-array allocation is avoided on\n   * every tile-selection change.\n   * @type {undefined|Uint32Array}\n   * @private\n   */\n  this._scratchAggregateShBuffer = undefined;\n  this._selectedTilesStableFrames = 0;\n  this._needsSnapshotRebuild = false;\n  this._snapshotRebuildStallFrames = 0;\n\n  /**\n   * The previous view matrix used to determine if the primitive needs to be updated.\n   * This is used to avoid unnecessary updates when the view matrix hasn't changed.\n   * @type {Matrix4}\n   * @private\n   */\n  this._prevViewMatrix = new Matrix4();\n\n  /**\n   * Indicates whether or not to show the bounding volume of the primitive for debugging purposes.\n   * This is used to visualize the bounding volume of the primitive in the scene.\n   * @type {boolean}\n   * @private\n   */\n  this._debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * The texture used to store the Gaussian splat attributes.\n   * This texture is created from the splat attributes (positions, scales, rotations, colors)\n   * and is used in the vertex shader to render the splats.\n   * @type {undefined|Texture}\n   * @private\n   * @see {@link GaussianSplatTextureGenerator}\n   */\n  this.gaussianSplatTexture = undefined;\n\n  /**\n   * The texture used to store the spherical harmonics coefficients for the Gaussian splats.\n   * @type {undefined|Texture}\n   * @private\n   */\n  this.sphericalHarmonicsTexture = undefined;\n\n  /**\n   * The last width of the Gaussian splat texture.\n   * This is used to track changes in the texture size and update the primitive accordingly.\n   * @type {number}\n   * @private\n   */\n  this._lastTextureWidth = 0;\n  /**\n   * The last height of the Gaussian splat texture.\n   * This is used to track changes in the texture size and update the primitive accordingly.\n   * @type {number}\n   * @private\n   */\n  this._lastTextureHeight = 0;\n  /**\n   * The vertex array used to render the Gaussian splats.\n   * This vertex array contains the attributes needed to render the splats, such as positions and indexes.\n   * @type {undefined|VertexArray}\n   * @private\n   */\n  this._vertexArray = undefined;\n  /**\n   * The length of the vertex array, used to track changes in the number of splats.\n   * This is used to determine if the vertex array needs to be rebuilt.\n   * @type {number}\n   * @private\n   */\n  this._vertexArrayLen = -1;\n  this._splitDirection = SplitDirection.NONE;\n\n  /**\n   * The dirty flag forces the primitive to render this frame.\n   * @type {boolean}\n   * @private\n   */\n  this._dirty = false;\n\n  this._tileset = options.tileset;\n\n  this._baseTilesetUpdate = this._tileset.update;\n  this._tileset.update = this._wrappedUpdate.bind(this);\n\n  this._tileset.tileLoad.addEventListener(this.onTileLoad, this);\n  this._tileset.tileVisible.addEventListener(this.onTileVisible, this);\n\n  /**\n   * Tracks current count of selected tiles.\n   * This is used to determine if the primitive needs to be rebuilt.\n   * @type {number}\n   * @private\n   */\n  this.selectedTileLength = 0;\n  this._selectedTileSet = new Set();\n\n  /**\n   * Indicates whether or not the primitive is ready for use.\n   * @type {boolean}\n   * @private\n   */\n  this._ready = false;\n\n  /**\n   * Indicates whether or not the primitive has a Gaussian splat texture.\n   * @type {boolean}\n   * @private\n   */\n  this._hasGaussianSplatTexture = false;\n\n  /**\n   * Indicates whether or not the primitive is currently generating a Gaussian splat texture.\n   * @type {boolean}\n   * @private\n   */\n  this._gaussianSplatTexturePending = false;\n\n  /**\n   * The draw command used to render the Gaussian splats.\n   * @type {undefined|DrawCommand}\n   * @private\n   */\n  this._drawCommand = undefined;\n  this._drawCommandModelMatrix = new Matrix4();\n  /**\n   * The root transform of the tileset.\n   * This is used to transform the splats into world space.\n   * @type {undefined|Matrix4}\n   * @private\n   */\n  this._rootTransform = undefined;\n\n  /**\n   * The axis correction matrix to transform the splats from Y-up to Z-up.\n   * @type {Matrix4}\n   * @private\n   */\n  this._axisCorrectionMatrix = ModelUtility.getAxisCorrectionMatrix(\n    Axis.Y,\n    Axis.X,\n    new Matrix4(),\n  );\n\n  /**\n   * Indicates whether or not the primitive has been destroyed.\n   * @type {boolean}\n   * @private\n   */\n  this._isDestroyed = false;\n\n  /**\n   * The state of the Gaussian splat sorting process.\n   * This is used to track the progress of the sorting operation.\n   * @type {GaussianSplatSortingState}\n   * @private\n   */\n  this._sorterState = GaussianSplatSortingState.IDLE;\n  /**\n   * A promise that resolves when the Gaussian splat sorting operation is complete.\n   * This is used to track the progress of the sorting operation.\n   * @type {undefined|Promise}\n   * @private\n   */\n  this._sorterPromise = undefined;\n  this._splatDataGeneration = 0;\n  this._sortRequestId = 0;\n  this._activeSort = undefined;\n  this._pendingSortPromise = undefined;\n  this._pendingSort = undefined;\n  this._lastSteadySortFrameNumber = -1;\n  this._lastSteadySortCameraPosition = new Cartesian3();\n  this._hasLastSteadySortCameraPosition = false;\n  this._lastSteadySortCameraDirection = new Cartesian3();\n  this._hasLastSteadySortCameraDirection = false;\n\n  /**\n   * An error that occurred during the Gaussian splat sorting operation.\n   * Thrown when state is ERROR.\n   * @type {undefined|Error}\n   * @private\n   */\n  this._sorterError = undefined;\n}\n\nObject.defineProperties(GaussianSplatPrimitive.prototype, {\n  /**\n   * Indicates whether the primitive is ready for use.\n   * @memberof GaussianSplatPrimitive.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * Indicates whether the primitive has completed loading and sorting.\n   * @memberof GaussianSplatPrimitive.prototype\n   * @type {boolean}\n   * @private\n   * @readonly\n   */\n  isStable: {\n    get: function () {\n      return (\n        !this._dirty &&\n        (!defined(this._pendingSnapshot) ||\n          this._pendingSnapshot.state === SnapshotState.READY)\n      );\n    },\n  },\n\n  /**\n   * The {@link SplitDirection} to apply to this point.\n   * @memberof GaussianSplatPrimitive.prototype\n   * @type {SplitDirection}\n   * @default {@link SplitDirection.NONE}\n   */\n  splitDirection: {\n    get: function () {\n      return this._splitDirection;\n    },\n    set: function (value) {\n      if (this._splitDirection !== value) {\n        this._splitDirection = value;\n        this._dirty = true;\n      }\n    },\n  },\n});\n\n/**\n * Since we aren't visible at the scene level, we need to wrap the tileset update\n * so we not only get called but ensure we update immediately after the tileset.\n * @param {FrameState} frameState\n * @private\n *\n */\nGaussianSplatPrimitive.prototype._wrappedUpdate = function (frameState) {\n  this._baseTilesetUpdate.call(this._tileset, frameState);\n  this.update(frameState);\n};\n\n/**\n * Destroys the primitive and releases its resources in a deterministic manner.\n * @private\n */\nGaussianSplatPrimitive.prototype.destroy = function () {\n  this._positions = undefined;\n  this._rotations = undefined;\n  this._scales = undefined;\n  this._colors = undefined;\n  this._indexes = undefined;\n  destroySnapshotTextures(this._pendingSnapshot);\n  destroySnapshotTextures(this._snapshot);\n  if (defined(this._retiredTextures)) {\n    for (let i = 0; i < this._retiredTextures.length; i++) {\n      this._retiredTextures[i].texture.destroy();\n    }\n  }\n  this._retiredTextures = [];\n  this._pendingSnapshot = undefined;\n  this._snapshot = undefined;\n  this.gaussianSplatTexture = undefined;\n  this.sphericalHarmonicsTexture = undefined;\n\n  const drawCommand = this._drawCommand;\n  if (defined(drawCommand)) {\n    drawCommand.shaderProgram =\n      drawCommand.shaderProgram && drawCommand.shaderProgram.destroy();\n  }\n\n  if (defined(this._vertexArray)) {\n    this._vertexArray.destroy();\n    this._vertexArray = undefined;\n  }\n\n  this._tileset.update = this._baseTilesetUpdate.bind(this._tileset);\n\n  return destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * @returns {boolean} Returns true if the primitive has been destroyed, otherwise false.\n * @private\n */\nGaussianSplatPrimitive.prototype.isDestroyed = function () {\n  return this._isDestroyed;\n};\n\n/**\n * Event callback for when a tile is loaded.\n * This method is called when a tile is loaded and the primitive needs to be updated.\n * It sets the dirty flag to true, indicating that the primitive needs to be rebuilt.\n * @param {Cesium3DTile} tile\n * @private\n */\nGaussianSplatPrimitive.prototype.onTileLoad = function (tile) {\n  this._dirty = true;\n};\n\n/**\n * Callback for visible tiles.\n * @param {Cesium3DTile} tile\n * @private\n */\nGaussianSplatPrimitive.prototype.onTileVisible = function (tile) {};\n\n/**\n * Transforms the tile's splat primitive attributes into world space.\n * <br /><br />\n * This method applies the computed transform of the tile and the tileset's bounding sphere\n * to the splat primitive's position, rotation, and scale attributes.\n * It modifies the attributes in place, transforming them from local space to world space.\n *\n * @param {Cesium3DTile} tile\n * @private\n */\nGaussianSplatPrimitive.transformTile = function (tile) {\n  const computedTransform = tile.computedTransform;\n  const gltfPrimitive = tile.content.gltfPrimitive;\n  const gaussianSplatPrimitive = tile.tileset.gaussianSplatPrimitive;\n\n  if (gaussianSplatPrimitive._rootTransform === undefined) {\n    gaussianSplatPrimitive._rootTransform = Transforms.eastNorthUpToFixedFrame(\n      tile.tileset.boundingSphere.center,\n    );\n  }\n  const rootTransform = gaussianSplatPrimitive._rootTransform;\n\n  const computedModelMatrix = Matrix4.multiplyTransformation(\n    computedTransform,\n    gaussianSplatPrimitive._axisCorrectionMatrix,\n    scratchMatrix4A,\n  );\n\n  Matrix4.multiplyTransformation(\n    computedModelMatrix,\n    tile.content.worldTransform,\n    computedModelMatrix,\n  );\n\n  const toGlobal = Matrix4.multiply(\n    tile.tileset.modelMatrix,\n    rootTransform,\n    scratchMatrix4B,\n  );\n  const toLocal = Matrix4.inverse(toGlobal, scratchMatrix4C);\n  const transform = Matrix4.multiplyTransformation(\n    toLocal,\n    computedModelMatrix,\n    scratchMatrix4A,\n  );\n  const positions = tile.content.positions;\n  const rotations = tile.content.rotations;\n  const scales = tile.content.scales;\n  const attributePositions = ModelUtility.getAttributeBySemantic(\n    gltfPrimitive,\n    VertexAttributeSemantic.POSITION,\n  ).typedArray;\n\n  const attributeRotations = ModelUtility.getAttributeBySemantic(\n    gltfPrimitive,\n    VertexAttributeSemantic.ROTATION,\n  ).typedArray;\n\n  const attributeScales = ModelUtility.getAttributeBySemantic(\n    gltfPrimitive,\n    VertexAttributeSemantic.SCALE,\n  ).typedArray;\n\n  const position = new Cartesian3();\n  const rotation = new Quaternion();\n  const scale = new Cartesian3();\n  for (let i = 0; i < attributePositions.length / 3; ++i) {\n    position.x = attributePositions[i * 3];\n    position.y = attributePositions[i * 3 + 1];\n    position.z = attributePositions[i * 3 + 2];\n\n    rotation.x = attributeRotations[i * 4];\n    rotation.y = attributeRotations[i * 4 + 1];\n    rotation.z = attributeRotations[i * 4 + 2];\n    rotation.w = attributeRotations[i * 4 + 3];\n\n    scale.x = attributeScales[i * 3];\n    scale.y = attributeScales[i * 3 + 1];\n    scale.z = attributeScales[i * 3 + 2];\n\n    Matrix4.fromTranslationQuaternionRotationScale(\n      position,\n      rotation,\n      scale,\n      scratchMatrix4C,\n    );\n\n    Matrix4.multiplyTransformation(transform, scratchMatrix4C, scratchMatrix4C);\n\n    Matrix4.getTranslation(scratchMatrix4C, position);\n    Matrix4.getRotation(scratchMatrix4C, rotation);\n    Matrix4.getScale(scratchMatrix4C, scale);\n\n    positions[i * 3] = position.x;\n    positions[i * 3 + 1] = position.y;\n    positions[i * 3 + 2] = position.z;\n\n    rotations[i * 4] = rotation.x;\n    rotations[i * 4 + 1] = rotation.y;\n    rotations[i * 4 + 2] = rotation.z;\n    rotations[i * 4 + 3] = rotation.w;\n\n    scales[i * 3] = scale.x;\n    scales[i * 3 + 1] = scale.y;\n    scales[i * 3 + 2] = scale.z;\n  }\n};\n\n/**\n * Generates the Gaussian splat texture for the primitive.\n * This method creates a texture from the splat attributes (positions, scales, rotations, colors)\n * and updates the primitive's state accordingly.\n *\n * @see {@link GaussianSplatTextureGenerator}\n *\n * @param {GaussianSplatPrimitive} primitive The owning primitive.\n * @param {FrameState} frameState The current frame state.\n * @param {GaussianSplatPrimitive.Snapshot} snapshot Snapshot being populated.\n * @private\n */\nGaussianSplatPrimitive.generateSplatTexture = function (\n  primitive,\n  frameState,\n  snapshot,\n) {\n  if (!defined(snapshot) || snapshot.state !== SnapshotState.BUILDING) {\n    return;\n  }\n  snapshot.state = SnapshotState.TEXTURE_PENDING;\n  const promise = GaussianSplatTextureGenerator.generateFromAttributes({\n    attributes: {\n      positions: new Float32Array(snapshot.positions),\n      scales: new Float32Array(snapshot.scales),\n      rotations: new Float32Array(snapshot.rotations),\n      colors: new Uint8Array(snapshot.colors),\n    },\n    count: snapshot.numSplats,\n  });\n  if (!defined(promise)) {\n    snapshot.state = SnapshotState.BUILDING;\n    return;\n  }\n  void processGeneratedSplatTextureData(\n    primitive,\n    frameState,\n    snapshot,\n    promise,\n  );\n};\n\n/**\n * Builds the draw command for the Gaussian splat primitive.\n * This method sets up the shader program, render state, and vertex array for rendering the Gaussian splats.\n * It also configures the attributes and uniforms required for rendering.\n *\n * @param {GaussianSplatPrimitive} primitive\n * @param {FrameState} frameState\n *\n * @private\n */\nGaussianSplatPrimitive.buildGSplatDrawCommand = function (\n  primitive,\n  frameState,\n) {\n  const tileset = primitive._tileset;\n  const renderResources = new GaussianSplatRenderResources(primitive);\n  const { shaderBuilder } = renderResources;\n  const renderStateOptions = renderResources.renderStateOptions;\n  renderStateOptions.cull.enabled = false;\n  renderStateOptions.depthMask = false;\n  renderStateOptions.depthTest.enabled = true;\n  renderStateOptions.blending = BlendingState.PRE_MULTIPLIED_ALPHA_BLEND;\n  renderResources.alphaOptions.pass = Pass.GAUSSIAN_SPLATS;\n\n  shaderBuilder.addAttribute(\"vec2\", \"a_screenQuadPosition\");\n  shaderBuilder.addAttribute(\"float\", \"a_splatIndex\");\n  shaderBuilder.addVarying(\"vec4\", \"v_splatColor\");\n  shaderBuilder.addVarying(\"vec2\", \"v_vertPos\");\n  shaderBuilder.addUniform(\n    \"float\",\n    \"u_splitDirection\",\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addVarying(\"float\", \"v_splitDirection\");\n  shaderBuilder.addUniform(\n    \"highp usampler2D\",\n    \"u_splatAttributeTexture\",\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addUniform(\n    \"float\",\n    \"u_sphericalHarmonicsDegree\",\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addUniform(\"float\", \"u_splatScale\", ShaderDestination.VERTEX);\n\n  shaderBuilder.addUniform(\n    \"vec3\",\n    \"u_cameraPositionWC\",\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addUniform(\n    \"mat3\",\n    \"u_inverseModelRotation\",\n    ShaderDestination.VERTEX,\n  );\n\n  const uniformMap = renderResources.uniformMap;\n\n  const textureCache = primitive.gaussianSplatTexture;\n  uniformMap.u_splatAttributeTexture = function () {\n    return textureCache;\n  };\n\n  if (primitive._sphericalHarmonicsDegree > 0) {\n    shaderBuilder.addDefine(\n      \"HAS_SPHERICAL_HARMONICS\",\n      \"1\",\n      ShaderDestination.VERTEX,\n    );\n    shaderBuilder.addUniform(\n      \"highp usampler2D\",\n      \"u_sphericalHarmonicsTexture\",\n      ShaderDestination.VERTEX,\n    );\n    uniformMap.u_sphericalHarmonicsTexture = function () {\n      return primitive.sphericalHarmonicsTexture;\n    };\n  }\n  uniformMap.u_sphericalHarmonicsDegree = function () {\n    return primitive._sphericalHarmonicsDegree;\n  };\n\n  uniformMap.u_cameraPositionWC = function () {\n    return Cartesian3.clone(frameState.camera.positionWC);\n  };\n\n  uniformMap.u_inverseModelRotation = function () {\n    const tileset = primitive._tileset;\n    const modelMatrix = Matrix4.multiply(\n      tileset.modelMatrix,\n      primitive._rootTransform,\n      scratchMatrix4A,\n    );\n    const inverseModelRotation = Matrix4.getRotation(\n      Matrix4.inverse(modelMatrix, scratchMatrix4C),\n      scratchMatrix4D,\n    );\n    return inverseModelRotation;\n  };\n\n  uniformMap.u_splitDirection = function () {\n    return primitive.splitDirection;\n  };\n\n  const instanceCount = defined(primitive._indexes)\n    ? primitive._indexes.length\n    : primitive._numSplats;\n  renderResources.instanceCount = instanceCount;\n  renderResources.count = 4;\n  renderResources.primitiveType = PrimitiveType.TRIANGLE_STRIP;\n  shaderBuilder.addVertexLines(GaussianSplatVS);\n  shaderBuilder.addFragmentLines(GaussianSplatFS);\n  const shaderProgram = shaderBuilder.buildShaderProgram(frameState.context);\n  let renderState = clone(\n    RenderState.fromCache(renderResources.renderStateOptions),\n    true,\n  );\n\n  renderState.cull.face = ModelUtility.getCullFace(\n    tileset.modelMatrix,\n    PrimitiveType.TRIANGLE_STRIP,\n  );\n\n  renderState = RenderState.fromCache(renderState);\n  const splatQuadAttrLocations = {\n    screenQuadPosition: 0,\n    splatIndex: 2,\n  };\n\n  const idxAttr = new ModelComponents.Attribute();\n  idxAttr.name = \"_SPLAT_INDEXES\";\n  idxAttr.typedArray = primitive._indexes;\n  idxAttr.componentDatatype = ComponentDatatype.UNSIGNED_INT;\n  idxAttr.type = AttributeType.SCALAR;\n  idxAttr.normalized = false;\n  idxAttr.count = renderResources.instanceCount;\n  idxAttr.constant = 0;\n  idxAttr.instanceDivisor = 1;\n\n  const needsRebuild =\n    !defined(primitive._vertexArray) ||\n    primitive._indexes.length > primitive._vertexArrayLen;\n  if (needsRebuild) {\n    const geometry = new Geometry({\n      attributes: {\n        screenQuadPosition: new GeometryAttribute({\n          componentDatatype: ComponentDatatype.FLOAT,\n          componentsPerAttribute: 2,\n          values: [-1, -1, 1, -1, 1, 1, -1, 1],\n          name: \"_SCREEN_QUAD_POS\",\n          variableName: \"screenQuadPosition\",\n        }),\n        splatIndex: { ...idxAttr, variableName: \"splatIndex\" },\n      },\n      primitiveType: PrimitiveType.TRIANGLE_STRIP,\n    });\n\n    primitive._vertexArray = VertexArray.fromGeometry({\n      context: frameState.context,\n      geometry: geometry,\n      attributeLocations: splatQuadAttrLocations,\n      bufferUsage: BufferUsage.DYNAMIC_DRAW,\n      interleave: false,\n    });\n  } else {\n    primitive._vertexArray\n      .getAttribute(1)\n      .vertexBuffer.copyFromArrayView(primitive._indexes);\n  }\n\n  primitive._vertexArrayLen = primitive._indexes.length;\n\n  const modelMatrix = Matrix4.multiply(\n    tileset.modelMatrix,\n    primitive._rootTransform,\n    primitive._drawCommandModelMatrix,\n  );\n\n  const vertexArrayCache = primitive._vertexArray;\n  const command = new DrawCommand({\n    boundingVolume: tileset.boundingSphere,\n    modelMatrix: modelMatrix,\n    uniformMap: uniformMap,\n    renderState: renderState,\n    vertexArray: vertexArrayCache,\n    shaderProgram: shaderProgram,\n    cull: renderStateOptions.cull.enabled,\n    pass: Pass.GAUSSIAN_SPLATS,\n    count: renderResources.count,\n    owner: primitive,\n    instanceCount: renderResources.instanceCount,\n    primitiveType: PrimitiveType.TRIANGLE_STRIP,\n    debugShowBoundingVolume: tileset.debugShowBoundingVolume,\n    castShadows: false,\n    receiveShadows: false,\n  });\n\n  primitive._drawCommand = command;\n};\n\n/**\n * Updates the Gaussian splat primitive for the current frame.\n * This method checks if the primitive needs to be updated based on the current frame state,\n * and if so, it processes the selected tiles, aggregates their attributes,\n * and generates the Gaussian splat texture if necessary.\n * It also handles the sorting of splat indexes and builds the draw command for rendering.\n *\n * @param {FrameState} frameState\n * @private\n */\nGaussianSplatPrimitive.prototype.update = function (frameState) {\n  const tileset = this._tileset;\n\n  releaseRetiredTextures(this, frameState.frameNumber);\n\n  if (!tileset.show) {\n    return;\n  }\n\n  if (this._drawCommand) {\n    frameState.commandList.push(this._drawCommand);\n  }\n\n  if (tileset._modelMatrixChanged) {\n    this._dirty = true;\n    return;\n  }\n  const hasRootTransform = defined(this._rootTransform);\n\n  if (frameState.passes.pick === true) {\n    return;\n  }\n\n  if (this.splitDirection !== tileset.splitDirection) {\n    this.splitDirection = tileset.splitDirection;\n  }\n  const camera = frameState.camera;\n  if (!defined(camera)) {\n    return;\n  }\n\n  if (this._sorterState === GaussianSplatSortingState.IDLE) {\n    const selectedTilesChanged =\n      tileset._selectedTiles.length !== 0 &&\n      haveSelectedTilesChanged(this, tileset._selectedTiles);\n    if (tileset._selectedTiles.length === 0) {\n      this._selectedTilesStableFrames = 0;\n      this._needsSnapshotRebuild = false;\n      this._snapshotRebuildStallFrames = 0;\n    } else if (selectedTilesChanged) {\n      this._selectedTilesStableFrames = 0;\n    } else {\n      this._selectedTilesStableFrames++;\n    }\n    if (selectedTilesChanged || this._dirty) {\n      this._needsSnapshotRebuild = true;\n    }\n    const isStable = this._selectedTilesStableFrames >= DEFAULT_STABLE_FRAMES;\n    const isBootstrap =\n      !defined(this._snapshot) &&\n      !defined(this._pendingSnapshot) &&\n      !defined(this._drawCommand);\n    // This prevents an indefinite wait if selected tiles never settle completely.\n    // In practice, this is the upper bound on \"wait-for-stability\" before forcing\n    // a rebuild to avoid visible starvation.\n    if (this._needsSnapshotRebuild && tileset._selectedTiles.length !== 0) {\n      this._snapshotRebuildStallFrames++;\n    } else {\n      this._snapshotRebuildStallFrames = 0;\n    }\n    const allowRebuild =\n      isStable ||\n      isBootstrap ||\n      this._snapshotRebuildStallFrames >= DEFAULT_MAX_SNAPSHOT_STALL_FRAMES;\n    const hasPendingWork =\n      this._dirty ||\n      this._needsSnapshotRebuild ||\n      selectedTilesChanged ||\n      defined(this._pendingSnapshot) ||\n      defined(this._pendingSortPromise) ||\n      !defined(this._drawCommand);\n    if (\n      !hasPendingWork &&\n      Matrix4.equals(camera.viewMatrix, this._prevViewMatrix)\n    ) {\n      return;\n    }\n\n    if (\n      tileset._selectedTiles.length !== 0 &&\n      this._needsSnapshotRebuild &&\n      allowRebuild\n    ) {\n      this._splatDataGeneration++;\n      this._activeSort = undefined;\n      this._sorterPromise = undefined;\n      this._sorterState = GaussianSplatSortingState.IDLE;\n      this._pendingSortPromise = undefined;\n      this._pendingSort = undefined;\n      if (defined(this._pendingSnapshot)) {\n        destroySnapshotTextures(this._pendingSnapshot);\n      }\n\n      const tiles = tileset._selectedTiles;\n      const totalElements = tiles.reduce(\n        (total, tile) => total + tile.content.pointsLength,\n        0,\n      );\n      const aggregateAttributeValues = (\n        componentDatatype,\n        getAttributeCallback,\n        numberOfComponents,\n      ) => {\n        let aggregate;\n        let offset = 0;\n        for (const tile of tiles) {\n          const content = tile.content;\n          const attribute = getAttributeCallback(content);\n          const componentsPerAttribute = defined(numberOfComponents)\n            ? numberOfComponents\n            : AttributeType.getNumberOfComponents(attribute.type);\n          const buffer = defined(attribute.typedArray)\n            ? attribute.typedArray\n            : attribute;\n          if (!defined(aggregate)) {\n            aggregate = ComponentDatatype.createTypedArray(\n              componentDatatype,\n              totalElements * componentsPerAttribute,\n            );\n          }\n          aggregate.set(buffer, offset);\n          offset += buffer.length;\n        }\n        return aggregate;\n      };\n\n      const aggregateShData = () => {\n        // Determine the SH degree from the first tile with SH data so we can\n        // pre-allocate the aggregate buffer once, outside the tile loop.\n        let coefs = 0;\n        for (const tile of tiles) {\n          if (tile.content.sphericalHarmonicsDegree > 0) {\n            switch (tile.content.sphericalHarmonicsDegree) {\n              case 1:\n                coefs = 9;\n                break;\n              case 2:\n                coefs = 24;\n                break;\n              case 3:\n                coefs = 45;\n                break;\n            }\n            break;\n          }\n        }\n\n        if (coefs === 0) {\n          return undefined;\n        }\n\n        const requiredLength = totalElements * (coefs * (2 / 3));\n\n        // Re-use the class-level scratch buffer when it is already large\n        // enough, avoiding a fresh allocation (and eventual GC) every frame.\n        if (\n          !defined(this._scratchAggregateShBuffer) ||\n          this._scratchAggregateShBuffer.length < requiredLength\n        ) {\n          this._scratchAggregateShBuffer = new Uint32Array(requiredLength);\n        }\n        const aggregate = this._scratchAggregateShBuffer;\n\n        let offset = 0;\n        for (const tile of tiles) {\n          const tileShData = tile.content.packedSphericalHarmonicsData;\n          if (tile.content.sphericalHarmonicsDegree > 0) {\n            aggregate.set(tileShData, offset);\n            offset += tileShData.length;\n          }\n        }\n\n        // Return a correctly-sized view so downstream consumers see the\n        // exact element count they expect.\n        if (offset < aggregate.length) {\n          return aggregate.subarray(0, offset);\n        }\n        return aggregate;\n      };\n\n      const positions = aggregateAttributeValues(\n        ComponentDatatype.FLOAT,\n        (content) => content.positions,\n        3,\n      );\n\n      const scales = aggregateAttributeValues(\n        ComponentDatatype.FLOAT,\n        (content) => content.scales,\n        3,\n      );\n\n      const rotations = aggregateAttributeValues(\n        ComponentDatatype.FLOAT,\n        (content) => content.rotations,\n        4,\n      );\n\n      const colors = aggregateAttributeValues(\n        ComponentDatatype.UNSIGNED_BYTE,\n        (content) =>\n          ModelUtility.getAttributeBySemantic(\n            content.gltfPrimitive,\n            VertexAttributeSemantic.COLOR,\n          ),\n      );\n\n      const sphericalHarmonicsDegree =\n        tiles[0].content.sphericalHarmonicsDegree;\n      const shCoefficientCount =\n        sphericalHarmonicsDegree > 0\n          ? tiles[0].content.sphericalHarmonicsCoefficientCount\n          : 0;\n      const shData = aggregateShData();\n\n      this._pendingSnapshot = {\n        generation: this._splatDataGeneration,\n        positions: positions,\n        rotations: rotations,\n        scales: scales,\n        colors: colors,\n        shData: shData,\n        sphericalHarmonicsDegree: sphericalHarmonicsDegree,\n        shCoefficientCount: shCoefficientCount,\n        numSplats: totalElements,\n        indexes: undefined,\n        gaussianSplatTexture: undefined,\n        sphericalHarmonicsTexture: undefined,\n        lastTextureWidth: 0,\n        lastTextureHeight: 0,\n        state: SnapshotState.BUILDING,\n      };\n\n      this.selectedTileLength = tileset._selectedTiles.length;\n      this._selectedTileSet = new Set(tileset._selectedTiles);\n      this._dirty = false;\n      this._needsSnapshotRebuild = false;\n      this._snapshotRebuildStallFrames = 0;\n    }\n\n    if (defined(this._pendingSnapshot)) {\n      const pending = this._pendingSnapshot;\n      if (pending.state === SnapshotState.BUILDING) {\n        GaussianSplatPrimitive.generateSplatTexture(this, frameState, pending);\n        return;\n      }\n      if (pending.state === SnapshotState.TEXTURE_PENDING) {\n        return;\n      }\n      if (\n        pending.state === SnapshotState.TEXTURE_READY &&\n        !defined(pending.gaussianSplatTexture)\n      ) {\n        return;\n      }\n\n      if (!hasRootTransform) {\n        return;\n      }\n\n      Matrix4.clone(camera.viewMatrix, this._prevViewMatrix);\n      Matrix4.multiply(camera.viewMatrix, this._rootTransform, scratchMatrix4A);\n\n      if (\n        pending.state === SnapshotState.TEXTURE_READY &&\n        !defined(this._pendingSortPromise)\n      ) {\n        const requestId = ++this._sortRequestId;\n        const dataGeneration = this._splatDataGeneration;\n        this._pendingSort = {\n          requestId: requestId,\n          dataGeneration: dataGeneration,\n          expectedCount: pending.numSplats,\n          snapshot: pending,\n        };\n        const sortPromise = GaussianSplatSorter.radixSortIndexes({\n          primitive: {\n            positions: new Float32Array(pending.positions),\n            modelView: Float32Array.from(scratchMatrix4A),\n            count: pending.numSplats,\n          },\n          sortType: \"Index\",\n        });\n        if (!defined(sortPromise)) {\n          this._pendingSortPromise = undefined;\n          this._pendingSort = undefined;\n          pending.state = SnapshotState.TEXTURE_READY;\n          return;\n        }\n        this._pendingSortPromise = sortPromise;\n        pending.state = SnapshotState.SORTING;\n        const pendingSort = this._pendingSort;\n        void resolvePendingSnapshotSort(\n          this,\n          frameState,\n          pendingSort,\n          sortPromise,\n        );\n        return;\n      }\n\n      if (!defined(this._pendingSortPromise)) {\n        if (pending.state === SnapshotState.SORTING) {\n          pending.state = SnapshotState.TEXTURE_READY;\n        }\n        return;\n      }\n      return;\n    }\n\n    if (this._numSplats === 0) {\n      return;\n    }\n\n    if (!hasRootTransform) {\n      return;\n    }\n\n    Matrix4.clone(camera.viewMatrix, this._prevViewMatrix);\n    Matrix4.multiply(camera.viewMatrix, this._rootTransform, scratchMatrix4A);\n\n    if (!defined(this._sorterPromise)) {\n      if (!shouldStartSteadySort(this, frameState)) {\n        return;\n      }\n      const requestId = ++this._sortRequestId;\n      const dataGeneration = this._splatDataGeneration;\n      const expectedCount = this._numSplats;\n      this._activeSort = {\n        requestId: requestId,\n        dataGeneration: dataGeneration,\n        expectedCount: expectedCount,\n      };\n      const rawPromise = GaussianSplatSorter.radixSortIndexes({\n        primitive: {\n          positions: new Float32Array(this._positions),\n          modelView: Float32Array.from(scratchMatrix4A),\n          count: this._numSplats,\n        },\n        sortType: \"Index\",\n      });\n      this._sorterPromise = rawPromise;\n      if (defined(rawPromise)) {\n        markSteadySortStart(this, frameState);\n        const activeSort = this._activeSort;\n        this._sorterState = GaussianSplatSortingState.SORTING;\n        void resolveSteadySort(this, activeSort, rawPromise);\n        return;\n      }\n    }\n\n    if (!defined(this._sorterPromise)) {\n      this._sorterState = GaussianSplatSortingState.WAITING;\n      return;\n    }\n    this._sorterState = GaussianSplatSortingState.SORTING;\n    return;\n  } else if (this._sorterState === GaussianSplatSortingState.WAITING) {\n    if (!defined(this._sorterPromise)) {\n      const requestId = ++this._sortRequestId;\n      const dataGeneration = this._splatDataGeneration;\n      const expectedCount = this._numSplats;\n      this._activeSort = {\n        requestId: requestId,\n        dataGeneration: dataGeneration,\n        expectedCount: expectedCount,\n      };\n      const rawPromise = GaussianSplatSorter.radixSortIndexes({\n        primitive: {\n          positions: new Float32Array(this._positions),\n          modelView: Float32Array.from(scratchMatrix4A),\n          count: this._numSplats,\n        },\n        sortType: \"Index\",\n      });\n      this._sorterPromise = rawPromise;\n      if (defined(rawPromise)) {\n        markSteadySortStart(this, frameState);\n        const activeSort = this._activeSort;\n        this._sorterState = GaussianSplatSortingState.SORTING;\n        void resolveSteadySort(this, activeSort, rawPromise);\n        return;\n      }\n    }\n    if (!defined(this._sorterPromise)) {\n      this._sorterState = GaussianSplatSortingState.WAITING;\n      return;\n    }\n    this._sorterState = GaussianSplatSortingState.SORTING;\n    return;\n  } else if (this._sorterState === GaussianSplatSortingState.SORTING) {\n    return; //still sorting, wait for next frame\n  } else if (this._sorterState === GaussianSplatSortingState.SORTED) {\n    //update the draw command if sorted\n    GaussianSplatPrimitive.buildGSplatDrawCommand(this, frameState);\n    this._sorterState = GaussianSplatSortingState.IDLE; //reset state for next frame\n    this._dirty = false;\n    this._sorterPromise = undefined; //reset promise for next frame\n    this._activeSort = undefined;\n  } else if (this._sorterState === GaussianSplatSortingState.ERROR) {\n    throw this._sorterError;\n  }\n\n  this._dirty = false;\n};\n\nexport default GaussianSplatPrimitive;\n","import ShaderBuilder from \"../Renderer/ShaderBuilder.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport DepthFunction from \"../Scene/DepthFunction.js\";\nimport ModelAlphaOptions from \"./Model/ModelAlphaOptions.js\";\nimport ShaderDestination from \"../Renderer/ShaderDestination.js\";\n\nfunction GaussianSplatRenderResources(primitive) {\n  const shaderBuilder = new ShaderBuilder();\n  /**\n   * An object used to build a shader incrementally. Each pipeline stage\n   * may add lines of shader code to this object.\n   *\n   * @type {ShaderBuilder}\n   * @readonly\n   *\n   * @private\n   */\n  this.shaderBuilder = shaderBuilder;\n\n  /**\n   * A dictionary mapping uniform name to functions that return the uniform\n   * values.\n   *\n   * @type {Object<string, Function>}\n   * @readonly\n   *\n   * @private\n   */\n  this.uniformMap = {};\n\n  /**\n   * An object storing options for creating a {@link RenderState}.\n   * The pipeline stages simply set the options, the render state is created\n   * when the {@link DrawCommand} is constructed.\n   *\n   * @type {object}\n   * @readonly\n   *\n   * @private\n   */\n  this.renderStateOptions = RenderState.getState(\n    RenderState.fromCache({\n      depthTest: {\n        enabled: true,\n        func: DepthFunction.LESS_OR_EQUAL,\n      },\n    }),\n  );\n\n  /**\n   * Options for configuring the alpha stage such as pass and alpha cutoff.\n   *\n   * @type {ModelAlphaOptions}\n   * @readonly\n   *\n   * @private\n   */\n  this.alphaOptions = new ModelAlphaOptions();\n\n  /**\n   * Whether the model is part of a tileset that uses the skipLevelOfDetail\n   * optimization. This value indicates what draw commands are needed and\n   * is set by TilesetPipelineStage.\n   *\n   * @type {boolean}\n   * @default false\n   *\n   * @private\n   */\n  this.hasSkipLevelOfDetail = false;\n\n  if (primitive._useLogDepth) {\n    shaderBuilder.addDefine(\n      \"LOG_DEPTH_READ_ONLY\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n}\n\nexport default GaussianSplatRenderResources;\n","import defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\n\n/** * A sorter for Gaussian splats that uses a task processor to handle sorting in parallel.\n * This class is responsible for initializing the task processor and scheduling sorting tasks.\n * * @constructor\n * @private\n */\nfunction GaussianSplatSorter() {}\n\nGaussianSplatSorter._maxSortingConcurrency = Math.max(\n  FeatureDetection.hardwareConcurrency - 1,\n  1,\n);\n\nGaussianSplatSorter._sorterTaskProcessor = undefined;\nGaussianSplatSorter._taskProcessorReady = false;\nGaussianSplatSorter._error = undefined;\nGaussianSplatSorter._getSorterTaskProcessor = function () {\n  if (!defined(GaussianSplatSorter._sorterTaskProcessor)) {\n    const processor = new TaskProcessor(\n      \"gaussianSplatSorter\",\n      GaussianSplatSorter._maxSortingConcurrency,\n    );\n    processor\n      .initWebAssemblyModule({\n        wasmBinaryFile: \"ThirdParty/wasm_splats_bg.wasm\",\n      })\n      .then(function (result) {\n        if (result) {\n          GaussianSplatSorter._taskProcessorReady = true;\n        } else {\n          GaussianSplatSorter._error = new RuntimeError(\n            \"Gaussian splat sorter could not be initialized.\",\n          );\n        }\n      })\n      .catch((error) => {\n        GaussianSplatSorter._error = error;\n      });\n    GaussianSplatSorter._sorterTaskProcessor = processor;\n  }\n\n  return GaussianSplatSorter._sorterTaskProcessor;\n};\n/**\n * Sorts Gaussian splats using a radix sort algorithm. Sorted by distance from the camera.\n * A new list of indexes is returned, which can be used to render the splats in the correct order.\n *\n * @param {object} parameters - The parameters for sorting Gaussian splat indexes.\n * @param {object} parameters.primitive - The primitive containing positions and modelView matrices.\n * @returns {Promise|undefined} A promise that resolves to the sorted indexes or undefined if the task cannot be scheduled.\n * @exception {RuntimeError} Sorter could not be initialized.\n * @private\n */\nGaussianSplatSorter.radixSortIndexes = function (parameters) {\n  const sorterTaskProcessor = GaussianSplatSorter._getSorterTaskProcessor();\n  if (defined(GaussianSplatSorter._error)) {\n    throw GaussianSplatSorter._error;\n  }\n\n  if (!GaussianSplatSorter._taskProcessorReady) {\n    return;\n  }\n\n  return sorterTaskProcessor.scheduleTask(parameters, [\n    parameters.primitive.positions.buffer,\n  ]);\n};\n\nexport default GaussianSplatSorter;\n","import defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\n\nfunction GaussianSplatTextureGenerator() {}\n\nGaussianSplatTextureGenerator._maxSortingConcurrency = Math.max(\n  FeatureDetection.hardwareConcurrency - 1,\n  1,\n);\n\nGaussianSplatTextureGenerator._textureTaskProcessor = undefined;\nGaussianSplatTextureGenerator._taskProcessorReady = false;\nGaussianSplatTextureGenerator._error = undefined;\nGaussianSplatTextureGenerator._getTextureTaskProcessor = function () {\n  if (!defined(GaussianSplatTextureGenerator._textureTaskProcessor)) {\n    const processor = new TaskProcessor(\n      \"gaussianSplatTextureGenerator\",\n      GaussianSplatTextureGenerator._maxSortingConcurrency,\n    );\n    processor\n      .initWebAssemblyModule({\n        wasmBinaryFile: \"ThirdParty/wasm_splats_bg.wasm\",\n      })\n      .then(function (result) {\n        if (result) {\n          GaussianSplatTextureGenerator._taskProcessorReady = true;\n        } else {\n          GaussianSplatTextureGenerator._error = new RuntimeError(\n            \"Gaussian splat sorter could not be initialized.\",\n          );\n        }\n      })\n      .catch((error) => {\n        GaussianSplatTextureGenerator._error = error;\n      });\n    GaussianSplatTextureGenerator._textureTaskProcessor = processor;\n  }\n\n  return GaussianSplatTextureGenerator._textureTaskProcessor;\n};\n\nGaussianSplatTextureGenerator.generateFromAttributes = function (parameters) {\n  const textureTaskProcessor =\n    GaussianSplatTextureGenerator._getTextureTaskProcessor();\n  if (defined(GaussianSplatTextureGenerator._error)) {\n    throw GaussianSplatTextureGenerator._error;\n  }\n\n  if (!GaussianSplatTextureGenerator._taskProcessorReady) {\n    return;\n  }\n\n  const { attributes } = parameters;\n  return textureTaskProcessor.scheduleTask(parameters, [\n    attributes.positions.buffer,\n    attributes.scales.buffer,\n    attributes.rotations.buffer,\n    attributes.colors.buffer,\n  ]);\n};\n\nexport default GaussianSplatTextureGenerator;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Vector3DTileGeometry from \"./Vector3DTileGeometry.js\";\n\n/**\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Geometry3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Geometry3DTileContent(\n  tileset,\n  tile,\n  resource,\n  arrayBuffer,\n  byteOffset,\n) {\n  this._tileset = tileset;\n  this._tile = tile;\n  this._resource = resource;\n  this._geometries = undefined;\n\n  this._metadata = undefined;\n\n  this._batchTable = undefined;\n  this._features = undefined;\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.\n   */\n  this.featurePropertiesDirty = false;\n  this._group = undefined;\n\n  this._ready = false;\n\n  initialize(this, arrayBuffer, byteOffset);\n}\n\nObject.defineProperties(Geometry3DTileContent.prototype, {\n  featuresLength: {\n    get: function () {\n      return defined(this._batchTable) ? this._batchTable.featuresLength : 0;\n    },\n  },\n\n  pointsLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  trianglesLength: {\n    get: function () {\n      if (defined(this._geometries)) {\n        return this._geometries.trianglesLength;\n      }\n      return 0;\n    },\n  },\n\n  geometryByteLength: {\n    get: function () {\n      if (defined(this._geometries)) {\n        return this._geometries.geometryByteLength;\n      }\n      return 0;\n    },\n  },\n\n  texturesByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  batchTableByteLength: {\n    get: function () {\n      return defined(this._batchTable)\n        ? this._batchTable.batchTableByteLength\n        : 0;\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Geometry3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  url: {\n    get: function () {\n      return this._resource.getUrlComponent(true);\n    },\n  },\n\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n    set: function (value) {\n      this._metadata = value;\n    },\n  },\n\n  batchTable: {\n    get: function () {\n      return this._batchTable;\n    },\n  },\n\n  group: {\n    get: function () {\n      return this._group;\n    },\n    set: function (value) {\n      this._group = value;\n    },\n  },\n});\n\nfunction createColorChangedCallback(content) {\n  return function (batchId, color) {\n    if (defined(content._geometries)) {\n      content._geometries.updateCommands(batchId, color);\n    }\n  };\n}\n\nfunction getBatchIds(featureTableJson, featureTableBinary) {\n  let boxBatchIds;\n  let cylinderBatchIds;\n  let ellipsoidBatchIds;\n  let sphereBatchIds;\n  let i;\n\n  const numberOfBoxes = featureTableJson.BOXES_LENGTH ?? 0;\n  const numberOfCylinders = featureTableJson.CYLINDERS_LENGTH ?? 0;\n  const numberOfEllipsoids = featureTableJson.ELLIPSOIDS_LENGTH ?? 0;\n  const numberOfSpheres = featureTableJson.SPHERES_LENGTH ?? 0;\n\n  if (numberOfBoxes > 0 && defined(featureTableJson.BOX_BATCH_IDS)) {\n    const boxBatchIdsByteOffset =\n      featureTableBinary.byteOffset + featureTableJson.BOX_BATCH_IDS.byteOffset;\n    boxBatchIds = new Uint16Array(\n      featureTableBinary.buffer,\n      boxBatchIdsByteOffset,\n      numberOfBoxes,\n    );\n  }\n\n  if (numberOfCylinders > 0 && defined(featureTableJson.CYLINDER_BATCH_IDS)) {\n    const cylinderBatchIdsByteOffset =\n      featureTableBinary.byteOffset +\n      featureTableJson.CYLINDER_BATCH_IDS.byteOffset;\n    cylinderBatchIds = new Uint16Array(\n      featureTableBinary.buffer,\n      cylinderBatchIdsByteOffset,\n      numberOfCylinders,\n    );\n  }\n\n  if (numberOfEllipsoids > 0 && defined(featureTableJson.ELLIPSOID_BATCH_IDS)) {\n    const ellipsoidBatchIdsByteOffset =\n      featureTableBinary.byteOffset +\n      featureTableJson.ELLIPSOID_BATCH_IDS.byteOffset;\n    ellipsoidBatchIds = new Uint16Array(\n      featureTableBinary.buffer,\n      ellipsoidBatchIdsByteOffset,\n      numberOfEllipsoids,\n    );\n  }\n\n  if (numberOfSpheres > 0 && defined(featureTableJson.SPHERE_BATCH_IDS)) {\n    const sphereBatchIdsByteOffset =\n      featureTableBinary.byteOffset +\n      featureTableJson.SPHERE_BATCH_IDS.byteOffset;\n    sphereBatchIds = new Uint16Array(\n      featureTableBinary.buffer,\n      sphereBatchIdsByteOffset,\n      numberOfSpheres,\n    );\n  }\n\n  const atLeastOneDefined =\n    defined(boxBatchIds) ||\n    defined(cylinderBatchIds) ||\n    defined(ellipsoidBatchIds) ||\n    defined(sphereBatchIds);\n  const atLeastOneUndefined =\n    (numberOfBoxes > 0 && !defined(boxBatchIds)) ||\n    (numberOfCylinders > 0 && !defined(cylinderBatchIds)) ||\n    (numberOfEllipsoids > 0 && !defined(ellipsoidBatchIds)) ||\n    (numberOfSpheres > 0 && !defined(sphereBatchIds));\n\n  if (atLeastOneDefined && atLeastOneUndefined) {\n    throw new RuntimeError(\n      \"If one group of batch ids is defined, then all batch ids must be defined\",\n    );\n  }\n\n  const allUndefinedBatchIds =\n    !defined(boxBatchIds) &&\n    !defined(cylinderBatchIds) &&\n    !defined(ellipsoidBatchIds) &&\n    !defined(sphereBatchIds);\n  if (allUndefinedBatchIds) {\n    let id = 0;\n    if (!defined(boxBatchIds) && numberOfBoxes > 0) {\n      boxBatchIds = new Uint16Array(numberOfBoxes);\n      for (i = 0; i < numberOfBoxes; ++i) {\n        boxBatchIds[i] = id++;\n      }\n    }\n    if (!defined(cylinderBatchIds) && numberOfCylinders > 0) {\n      cylinderBatchIds = new Uint16Array(numberOfCylinders);\n      for (i = 0; i < numberOfCylinders; ++i) {\n        cylinderBatchIds[i] = id++;\n      }\n    }\n    if (!defined(ellipsoidBatchIds) && numberOfEllipsoids > 0) {\n      ellipsoidBatchIds = new Uint16Array(numberOfEllipsoids);\n      for (i = 0; i < numberOfEllipsoids; ++i) {\n        ellipsoidBatchIds[i] = id++;\n      }\n    }\n    if (!defined(sphereBatchIds) && numberOfSpheres > 0) {\n      sphereBatchIds = new Uint16Array(numberOfSpheres);\n      for (i = 0; i < numberOfSpheres; ++i) {\n        sphereBatchIds[i] = id++;\n      }\n    }\n  }\n\n  return {\n    boxes: boxBatchIds,\n    cylinders: cylinderBatchIds,\n    ellipsoids: ellipsoidBatchIds,\n    spheres: sphereBatchIds,\n  };\n}\n\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nfunction initialize(content, arrayBuffer, byteOffset) {\n  byteOffset = byteOffset ?? 0;\n\n  const uint8Array = new Uint8Array(arrayBuffer);\n  const view = new DataView(arrayBuffer);\n  byteOffset += sizeOfUint32; // Skip magic number\n\n  const version = view.getUint32(byteOffset, true);\n  if (version !== 1) {\n    throw new RuntimeError(\n      `Only Geometry tile version 1 is supported.  Version ${version} is not.`,\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  const byteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  if (byteLength === 0) {\n    content._ready = true;\n    return;\n  }\n\n  const featureTableJSONByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  if (featureTableJSONByteLength === 0) {\n    throw new RuntimeError(\n      \"Feature table must have a byte length greater than zero\",\n    );\n  }\n\n  const featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const batchTableJSONByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const featureTableJson = getJsonFromTypedArray(\n    uint8Array,\n    byteOffset,\n    featureTableJSONByteLength,\n  );\n  byteOffset += featureTableJSONByteLength;\n\n  const featureTableBinary = new Uint8Array(\n    arrayBuffer,\n    byteOffset,\n    featureTableBinaryByteLength,\n  );\n  byteOffset += featureTableBinaryByteLength;\n\n  let batchTableJson;\n  let batchTableBinary;\n  if (batchTableJSONByteLength > 0) {\n    // PERFORMANCE_IDEA: is it possible to allocate this on-demand?  Perhaps keep the\n    // arraybuffer/string compressed in memory and then decompress it when it is first accessed.\n    //\n    // We could also make another request for it, but that would make the property set/get\n    // API async, and would double the number of numbers in some cases.\n    batchTableJson = getJsonFromTypedArray(\n      uint8Array,\n      byteOffset,\n      batchTableJSONByteLength,\n    );\n    byteOffset += batchTableJSONByteLength;\n\n    if (batchTableBinaryByteLength > 0) {\n      // Has a batch table binary\n      batchTableBinary = new Uint8Array(\n        arrayBuffer,\n        byteOffset,\n        batchTableBinaryByteLength,\n      );\n      // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n      batchTableBinary = new Uint8Array(batchTableBinary);\n    }\n  }\n\n  const numberOfBoxes = featureTableJson.BOXES_LENGTH ?? 0;\n  const numberOfCylinders = featureTableJson.CYLINDERS_LENGTH ?? 0;\n  const numberOfEllipsoids = featureTableJson.ELLIPSOIDS_LENGTH ?? 0;\n  const numberOfSpheres = featureTableJson.SPHERES_LENGTH ?? 0;\n\n  const totalPrimitives =\n    numberOfBoxes + numberOfCylinders + numberOfEllipsoids + numberOfSpheres;\n\n  const batchTable = new Cesium3DTileBatchTable(\n    content,\n    totalPrimitives,\n    batchTableJson,\n    batchTableBinary,\n    createColorChangedCallback(content),\n  );\n  content._batchTable = batchTable;\n\n  if (totalPrimitives === 0) {\n    return;\n  }\n\n  const modelMatrix = content.tile.computedTransform;\n\n  let center;\n  if (defined(featureTableJson.RTC_CENTER)) {\n    center = Cartesian3.unpack(featureTableJson.RTC_CENTER);\n    Matrix4.multiplyByPoint(modelMatrix, center, center);\n  }\n\n  const batchIds = getBatchIds(featureTableJson, featureTableBinary);\n\n  if (\n    numberOfBoxes > 0 ||\n    numberOfCylinders > 0 ||\n    numberOfEllipsoids > 0 ||\n    numberOfSpheres > 0\n  ) {\n    let boxes;\n    let cylinders;\n    let ellipsoids;\n    let spheres;\n\n    if (numberOfBoxes > 0) {\n      const boxesByteOffset =\n        featureTableBinary.byteOffset + featureTableJson.BOXES.byteOffset;\n      boxes = new Float32Array(\n        featureTableBinary.buffer,\n        boxesByteOffset,\n        Vector3DTileGeometry.packedBoxLength * numberOfBoxes,\n      );\n    }\n\n    if (numberOfCylinders > 0) {\n      const cylindersByteOffset =\n        featureTableBinary.byteOffset + featureTableJson.CYLINDERS.byteOffset;\n      cylinders = new Float32Array(\n        featureTableBinary.buffer,\n        cylindersByteOffset,\n        Vector3DTileGeometry.packedCylinderLength * numberOfCylinders,\n      );\n    }\n\n    if (numberOfEllipsoids > 0) {\n      const ellipsoidsByteOffset =\n        featureTableBinary.byteOffset + featureTableJson.ELLIPSOIDS.byteOffset;\n      ellipsoids = new Float32Array(\n        featureTableBinary.buffer,\n        ellipsoidsByteOffset,\n        Vector3DTileGeometry.packedEllipsoidLength * numberOfEllipsoids,\n      );\n    }\n\n    if (numberOfSpheres > 0) {\n      const spheresByteOffset =\n        featureTableBinary.byteOffset + featureTableJson.SPHERES.byteOffset;\n      spheres = new Float32Array(\n        featureTableBinary.buffer,\n        spheresByteOffset,\n        Vector3DTileGeometry.packedSphereLength * numberOfSpheres,\n      );\n    }\n\n    content._geometries = new Vector3DTileGeometry({\n      boxes: boxes,\n      boxBatchIds: batchIds.boxes,\n      cylinders: cylinders,\n      cylinderBatchIds: batchIds.cylinders,\n      ellipsoids: ellipsoids,\n      ellipsoidBatchIds: batchIds.ellipsoids,\n      spheres: spheres,\n      sphereBatchIds: batchIds.spheres,\n      center: center,\n      modelMatrix: modelMatrix,\n      batchTable: batchTable,\n      boundingVolume: content.tile.boundingVolume.boundingVolume,\n    });\n\n    return content;\n  }\n\n  return Promise.resolve(content);\n}\n\nfunction createFeatures(content) {\n  const featuresLength = content.featuresLength;\n  if (!defined(content._features) && featuresLength > 0) {\n    const features = new Array(featuresLength);\n    if (defined(content._geometries)) {\n      content._geometries.createFeatures(content, features);\n    }\n    content._features = features;\n  }\n}\n\nGeometry3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return this._batchTable.hasProperty(batchId, name);\n};\n\nGeometry3DTileContent.prototype.getFeature = function (batchId) {\n  //>>includeStart('debug', pragmas.debug);\n  const featuresLength = this.featuresLength;\n  if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n    throw new DeveloperError(\n      `batchId is required and between zero and featuresLength - 1 (${\n        featuresLength - 1\n      }).`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  createFeatures(this);\n  return this._features[batchId];\n};\n\nGeometry3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n  if (defined(this._geometries)) {\n    this._geometries.applyDebugSettings(enabled, color);\n  }\n};\n\nGeometry3DTileContent.prototype.applyStyle = function (style) {\n  createFeatures(this);\n  if (defined(this._geometries)) {\n    this._geometries.applyStyle(style, this._features);\n  }\n};\n\nGeometry3DTileContent.prototype.update = function (tileset, frameState) {\n  if (defined(this._geometries)) {\n    this._geometries.classificationType = this._tileset.classificationType;\n    this._geometries.debugWireframe = this._tileset.debugWireframe;\n    this._geometries.update(frameState);\n  }\n\n  if (defined(this._batchTable) && this._geometries.ready) {\n    this._batchTable.update(tileset, frameState);\n    this._ready = true;\n  }\n};\n\nGeometry3DTileContent.prototype.pick = function (ray, frameState, result) {\n  return undefined;\n};\n\nGeometry3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nGeometry3DTileContent.prototype.destroy = function () {\n  this._geometries = this._geometries && this._geometries.destroy();\n  this._batchTable = this._batchTable && this._batchTable.destroy();\n  return destroyObject(this);\n};\nexport default Geometry3DTileContent;\n","import Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport ImageryLayerFeatureInfo from \"./ImageryLayerFeatureInfo.js\";\n\n/**\n * Describes the format in which to request GetFeatureInfo from a Web Map Service (WMS) server.\n *\n * @alias GetFeatureInfoFormat\n * @constructor\n *\n * @param {string} type The type of response to expect from a GetFeatureInfo request.  Valid\n *        values are 'json', 'xml', 'html', or 'text'.\n * @param {string} [format] The info format to request from the WMS server.  This is usually a\n *        MIME type such as 'application/json' or text/xml'.  If this parameter is not specified, the provider will request 'json'\n *        using 'application/json', 'xml' using 'text/xml', 'html' using 'text/html', and 'text' using 'text/plain'.\n * @param {Function} [callback] A function to invoke with the GetFeatureInfo response from the WMS server\n *        in order to produce an array of picked {@link ImageryLayerFeatureInfo} instances.  If this parameter is not specified,\n *        a default function for the type of response is used.\n */\nfunction GetFeatureInfoFormat(type, format, callback) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(type)) {\n    throw new DeveloperError(\"type is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.type = type;\n\n  if (!defined(format)) {\n    if (type === \"json\") {\n      format = \"application/json\";\n    } else if (type === \"xml\") {\n      format = \"text/xml\";\n    } else if (type === \"html\") {\n      format = \"text/html\";\n    } else if (type === \"text\") {\n      format = \"text/plain\";\n    }\n    //>>includeStart('debug', pragmas.debug);\n    else {\n      throw new DeveloperError(\n        'format is required when type is not \"json\", \"xml\", \"html\", or \"text\".',\n      );\n    }\n    //>>includeEnd('debug');\n  }\n\n  this.format = format;\n\n  if (!defined(callback)) {\n    if (type === \"json\") {\n      callback = geoJsonToFeatureInfo;\n    } else if (type === \"xml\") {\n      callback = xmlToFeatureInfo;\n    } else if (type === \"html\") {\n      callback = textToFeatureInfo;\n    } else if (type === \"text\") {\n      callback = textToFeatureInfo;\n    }\n    //>>includeStart('debug', pragmas.debug);\n    else {\n      throw new DeveloperError(\n        'callback is required when type is not \"json\", \"xml\", \"html\", or \"text\".',\n      );\n    }\n    //>>includeEnd('debug');\n  }\n\n  this.callback = callback;\n}\n\nfunction geoJsonToFeatureInfo(json) {\n  const result = [];\n\n  const features = json.features;\n  for (let i = 0; i < features.length; ++i) {\n    const feature = features[i];\n\n    const featureInfo = new ImageryLayerFeatureInfo();\n    featureInfo.data = feature;\n    featureInfo.properties = feature.properties;\n    featureInfo.configureNameFromProperties(feature.properties);\n    featureInfo.configureDescriptionFromProperties(feature.properties);\n\n    // If this is a point feature, use the coordinates of the point.\n    if (defined(feature.geometry) && feature.geometry.type === \"Point\") {\n      const longitude = feature.geometry.coordinates[0];\n      const latitude = feature.geometry.coordinates[1];\n      featureInfo.position = Cartographic.fromDegrees(longitude, latitude);\n    }\n\n    result.push(featureInfo);\n  }\n\n  return result;\n}\n\nconst mapInfoMxpNamespace = \"http://www.mapinfo.com/mxp\";\nconst esriWmsNamespace = \"http://www.esri.com/wms\";\nconst wfsNamespace = \"http://www.opengis.net/wfs\";\nconst gmlNamespace = \"http://www.opengis.net/gml\";\n\nfunction xmlToFeatureInfo(xml) {\n  const documentElement = xml.documentElement;\n  if (\n    documentElement.localName === \"MultiFeatureCollection\" &&\n    documentElement.namespaceURI === mapInfoMxpNamespace\n  ) {\n    // This looks like a MapInfo MXP response\n    return mapInfoXmlToFeatureInfo(xml);\n  } else if (\n    documentElement.localName === \"FeatureInfoResponse\" &&\n    documentElement.namespaceURI === esriWmsNamespace\n  ) {\n    // This looks like an Esri WMS response\n    return esriXmlToFeatureInfo(xml);\n  } else if (\n    documentElement.localName === \"FeatureCollection\" &&\n    documentElement.namespaceURI === wfsNamespace\n  ) {\n    // This looks like a WFS/GML response.\n    return gmlToFeatureInfo(xml);\n  } else if (documentElement.localName === \"ServiceExceptionReport\") {\n    // This looks like a WMS server error, so no features picked.\n    throw new RuntimeError(\n      new XMLSerializer().serializeToString(documentElement),\n    );\n  } else if (documentElement.localName === \"msGMLOutput\") {\n    return msGmlToFeatureInfo(xml);\n  } else {\n    // Unknown response type, so just dump the XML itself into the description.\n    return unknownXmlToFeatureInfo(xml);\n  }\n}\n\nfunction mapInfoXmlToFeatureInfo(xml) {\n  const result = [];\n\n  const multiFeatureCollection = xml.documentElement;\n\n  const features = multiFeatureCollection.getElementsByTagNameNS(\n    mapInfoMxpNamespace,\n    \"Feature\",\n  );\n  for (let featureIndex = 0; featureIndex < features.length; ++featureIndex) {\n    const feature = features[featureIndex];\n\n    const properties = {};\n\n    const propertyElements = feature.getElementsByTagNameNS(\n      mapInfoMxpNamespace,\n      \"Val\",\n    );\n    for (\n      let propertyIndex = 0;\n      propertyIndex < propertyElements.length;\n      ++propertyIndex\n    ) {\n      const propertyElement = propertyElements[propertyIndex];\n      if (propertyElement.hasAttribute(\"ref\")) {\n        const name = propertyElement.getAttribute(\"ref\");\n        const value = propertyElement.textContent.trim();\n        properties[name] = value;\n      }\n    }\n\n    const featureInfo = new ImageryLayerFeatureInfo();\n    featureInfo.data = feature;\n    featureInfo.properties = properties;\n    featureInfo.configureNameFromProperties(properties);\n    featureInfo.configureDescriptionFromProperties(properties);\n    result.push(featureInfo);\n  }\n\n  return result;\n}\n\nfunction esriXmlToFeatureInfo(xml) {\n  const featureInfoResponse = xml.documentElement;\n  const result = [];\n  let properties;\n\n  const features = featureInfoResponse.getElementsByTagNameNS(\"*\", \"FIELDS\");\n  if (features.length > 0) {\n    // Standard esri format\n    for (let featureIndex = 0; featureIndex < features.length; ++featureIndex) {\n      const feature = features[featureIndex];\n\n      properties = {};\n\n      const propertyAttributes = feature.attributes;\n      for (\n        let attributeIndex = 0;\n        attributeIndex < propertyAttributes.length;\n        ++attributeIndex\n      ) {\n        const attribute = propertyAttributes[attributeIndex];\n        properties[attribute.name] = attribute.value;\n      }\n\n      result.push(\n        imageryLayerFeatureInfoFromDataAndProperties(feature, properties),\n      );\n    }\n  } else {\n    // Thredds format -- looks like esri, but instead of containing FIELDS, contains FeatureInfo element\n    const featureInfoElements = featureInfoResponse.getElementsByTagNameNS(\n      \"*\",\n      \"FeatureInfo\",\n    );\n    for (\n      let featureInfoElementIndex = 0;\n      featureInfoElementIndex < featureInfoElements.length;\n      ++featureInfoElementIndex\n    ) {\n      const featureInfoElement = featureInfoElements[featureInfoElementIndex];\n\n      properties = {};\n\n      // node.children is not supported in IE9-11, so use childNodes and check that child.nodeType is an element\n      const featureInfoChildren = featureInfoElement.childNodes;\n      for (\n        let childIndex = 0;\n        childIndex < featureInfoChildren.length;\n        ++childIndex\n      ) {\n        const child = featureInfoChildren[childIndex];\n        if (child.nodeType === Node.ELEMENT_NODE) {\n          properties[child.localName] = child.textContent;\n        }\n      }\n\n      result.push(\n        imageryLayerFeatureInfoFromDataAndProperties(\n          featureInfoElement,\n          properties,\n        ),\n      );\n    }\n  }\n\n  return result;\n}\n\nfunction gmlToFeatureInfo(xml) {\n  const result = [];\n\n  const featureCollection = xml.documentElement;\n\n  const featureMembers = featureCollection.getElementsByTagNameNS(\n    gmlNamespace,\n    \"featureMember\",\n  );\n  for (\n    let featureIndex = 0;\n    featureIndex < featureMembers.length;\n    ++featureIndex\n  ) {\n    const featureMember = featureMembers[featureIndex];\n\n    const properties = {};\n    getGmlPropertiesRecursively(featureMember, properties);\n    result.push(\n      imageryLayerFeatureInfoFromDataAndProperties(featureMember, properties),\n    );\n  }\n\n  return result;\n}\n\n// msGmlToFeatureInfo is similar to gmlToFeatureInfo, but assumes different XML structure\n// eg. <msGMLOutput> <ABC_layer> <ABC_feature> <foo>bar</foo> ... </ABC_feature> </ABC_layer> </msGMLOutput>\n\nfunction msGmlToFeatureInfo(xml) {\n  const result = [];\n\n  // Find the first child. Except for IE, this would work:\n  // const layer = xml.documentElement.children[0];\n  let layer;\n  const children = xml.documentElement.childNodes;\n  for (let i = 0; i < children.length; i++) {\n    if (children[i].nodeType === Node.ELEMENT_NODE) {\n      layer = children[i];\n      break;\n    }\n  }\n  if (!defined(layer)) {\n    throw new RuntimeError(\n      \"Unable to find first child of the feature info xml document\",\n    );\n  }\n  const featureMembers = layer.childNodes;\n  for (\n    let featureIndex = 0;\n    featureIndex < featureMembers.length;\n    ++featureIndex\n  ) {\n    const featureMember = featureMembers[featureIndex];\n    if (featureMember.nodeType === Node.ELEMENT_NODE) {\n      const properties = {};\n      getGmlPropertiesRecursively(featureMember, properties);\n      result.push(\n        imageryLayerFeatureInfoFromDataAndProperties(featureMember, properties),\n      );\n    }\n  }\n\n  return result;\n}\n\nfunction getGmlPropertiesRecursively(gmlNode, properties) {\n  let isSingleValue = true;\n\n  for (let i = 0; i < gmlNode.childNodes.length; ++i) {\n    const child = gmlNode.childNodes[i];\n\n    if (child.nodeType === Node.ELEMENT_NODE) {\n      isSingleValue = false;\n    }\n\n    if (\n      child.localName === \"Point\" ||\n      child.localName === \"LineString\" ||\n      child.localName === \"Polygon\" ||\n      child.localName === \"boundedBy\"\n    ) {\n      continue;\n    }\n\n    if (\n      child.hasChildNodes() &&\n      getGmlPropertiesRecursively(child, properties)\n    ) {\n      properties[child.localName] = child.textContent;\n    }\n  }\n\n  return isSingleValue;\n}\n\nfunction imageryLayerFeatureInfoFromDataAndProperties(data, properties) {\n  const featureInfo = new ImageryLayerFeatureInfo();\n  featureInfo.data = data;\n  featureInfo.properties = properties;\n  featureInfo.configureNameFromProperties(properties);\n  featureInfo.configureDescriptionFromProperties(properties);\n  return featureInfo;\n}\n\nfunction unknownXmlToFeatureInfo(xml) {\n  const xmlText = new XMLSerializer().serializeToString(xml);\n\n  const element = document.createElement(\"div\");\n  const pre = document.createElement(\"pre\");\n  pre.textContent = xmlText;\n  element.appendChild(pre);\n\n  const featureInfo = new ImageryLayerFeatureInfo();\n  featureInfo.data = xml;\n  featureInfo.description = element.innerHTML;\n  return [featureInfo];\n}\n\nconst emptyBodyRegex = /<body>\\s*<\\/body>/im;\nconst wmsServiceExceptionReportRegex =\n  /<ServiceExceptionReport([\\s\\S]*)<\\/ServiceExceptionReport>/im;\nconst titleRegex = /<title>([\\s\\S]*)<\\/title>/im;\n\nfunction textToFeatureInfo(text) {\n  // If the text is HTML and it has an empty body tag, assume it means no features were found.\n  if (emptyBodyRegex.test(text)) {\n    return undefined;\n  }\n\n  // If this is a WMS exception report, treat it as \"no features found\" rather than showing\n  // bogus feature info.\n  if (wmsServiceExceptionReportRegex.test(text)) {\n    return undefined;\n  }\n\n  // If the text has a <title> element, use it as the name.\n  let name;\n  const title = titleRegex.exec(text);\n  if (title && title.length > 1) {\n    name = title[1];\n  }\n\n  const featureInfo = new ImageryLayerFeatureInfo();\n  featureInfo.name = name;\n  featureInfo.description = text;\n  featureInfo.data = text;\n  return [featureInfo];\n}\nexport default GetFeatureInfoFormat;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidTerrainProvider from \"../Core/EllipsoidTerrainProvider.js\";\nimport Event from \"../Core/Event.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport GlobeFS from \"../Shaders/GlobeFS.js\";\nimport GlobeVS from \"../Shaders/GlobeVS.js\";\nimport AtmosphereCommon from \"../Shaders/AtmosphereCommon.js\";\nimport GroundAtmosphere from \"../Shaders/GroundAtmosphere.js\";\nimport GlobeSurfaceShaderSet from \"./GlobeSurfaceShaderSet.js\";\nimport GlobeSurfaceTileProvider from \"./GlobeSurfaceTileProvider.js\";\nimport GlobeTranslucency from \"./GlobeTranslucency.js\";\nimport ImageryLayerCollection from \"./ImageryLayerCollection.js\";\nimport QuadtreePrimitive from \"./QuadtreePrimitive.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * The globe rendered in the scene, including its terrain ({@link Globe#terrainProvider})\n * and imagery layers ({@link Globe#imageryLayers}).  Access the globe using {@link Scene#globe}.\n *\n * @alias Globe\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] Determines the size and shape of the\n * globe.\n */\nfunction Globe(ellipsoid) {\n  ellipsoid = ellipsoid ?? Ellipsoid.default;\n  const terrainProvider = new EllipsoidTerrainProvider({\n    ellipsoid: ellipsoid,\n  });\n  const imageryLayerCollection = new ImageryLayerCollection();\n\n  this._ellipsoid = ellipsoid;\n  this._imageryLayerCollection = imageryLayerCollection;\n\n  this._surfaceShaderSet = new GlobeSurfaceShaderSet();\n  this._material = undefined;\n\n  this._surface = new QuadtreePrimitive({\n    tileProvider: new GlobeSurfaceTileProvider({\n      terrainProvider: terrainProvider,\n      imageryLayers: imageryLayerCollection,\n      surfaceShaderSet: this._surfaceShaderSet,\n    }),\n  });\n\n  this._terrainProvider = terrainProvider;\n  this._terrainProviderChanged = new Event();\n\n  this._undergroundColor = Color.clone(Color.BLACK);\n  this._undergroundColorAlphaByDistance = new NearFarScalar(\n    ellipsoid.maximumRadius / 1000.0,\n    0.0,\n    ellipsoid.maximumRadius / 5.0,\n    1.0,\n  );\n\n  this._translucency = new GlobeTranslucency();\n\n  makeShadersDirty(this);\n\n  /**\n   * Determines if the globe will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = true;\n\n  this._oceanNormalMapResourceDirty = true;\n  this._oceanNormalMapResource = new Resource({\n    url: buildModuleUrl(\"Assets/Textures/waterNormalsSmall.jpg\"),\n  });\n\n  /**\n   * The maximum screen-space error used to drive level-of-detail refinement.  Higher\n   * values will provide better performance but lower visual quality.\n   *\n   * @type {number}\n   * @default 2\n   */\n  this.maximumScreenSpaceError = 2;\n\n  /**\n   * The size of the terrain tile cache, expressed as a number of tiles.  Any additional\n   * tiles beyond this number will be freed, as long as they aren't needed for rendering\n   * this frame.  A larger number will consume more memory but will show detail faster\n   * when, for example, zooming out and then back in.\n   *\n   * @type {number}\n   * @default 100\n   */\n  this.tileCacheSize = 100;\n\n  /**\n   * Gets or sets the number of loading descendant tiles that is considered \"too many\".\n   * If a tile has too many loading descendants, that tile will be loaded and rendered before any of\n   * its descendants are loaded and rendered. This means more feedback for the user that something\n   * is happening at the cost of a longer overall load time. Setting this to 0 will cause each\n   * tile level to be loaded successively, significantly increasing load time. Setting it to a large\n   * number (e.g. 1000) will minimize the number of tiles that are loaded but tend to make\n   * detail appear all at once after a long wait.\n   * @type {number}\n   * @default 20\n   */\n  this.loadingDescendantLimit = 20;\n\n  /**\n   * Gets or sets a value indicating whether the ancestors of rendered tiles should be preloaded.\n   * Setting this to true optimizes the zoom-out experience and provides more detail in\n   * newly-exposed areas when panning. The down side is that it requires loading more tiles.\n   * @type {boolean}\n   * @default true\n   */\n  this.preloadAncestors = true;\n\n  /**\n   * Gets or sets a value indicating whether the siblings of rendered tiles should be preloaded.\n   * Setting this to true causes tiles with the same parent as a rendered tile to be loaded, even\n   * if they are culled. Setting this to true may provide a better panning experience at the\n   * cost of loading more tiles.\n   * @type {boolean}\n   * @default false\n   */\n  this.preloadSiblings = false;\n\n  /**\n   * The color to use to highlight terrain fill tiles. If undefined, fill tiles are not\n   * highlighted at all. The alpha value is used to alpha blend with the tile's\n   * actual color. Because terrain fill tiles do not represent the actual terrain surface,\n   * it may be useful in some applications to indicate visually that they are not to be trusted.\n   * @type {Color}\n   * @default undefined\n   */\n  this.fillHighlightColor = undefined;\n\n  /**\n   * Enable lighting the globe with the scene's light source.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.enableLighting = false;\n\n  /**\n   * A multiplier to adjust terrain lambert lighting.\n   * This number is multiplied by the result of <code>czm_getLambertDiffuse</code> in GlobeFS.glsl.\n   * This only takes effect when <code>enableLighting</code> is <code>true</code>.\n   *\n   * @type {number}\n   * @default 0.9\n   */\n  this.lambertDiffuseMultiplier = 0.9;\n\n  /**\n   * Enable dynamic lighting effects on atmosphere and fog. This only takes effect\n   * when <code>enableLighting</code> is <code>true</code>.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.dynamicAtmosphereLighting = true;\n\n  /**\n   * Whether dynamic atmosphere lighting uses the sun direction instead of the scene's\n   * light direction. This only takes effect when <code>enableLighting</code> and\n   * <code>dynamicAtmosphereLighting</code> are <code>true</code>.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.dynamicAtmosphereLightingFromSun = false;\n\n  /**\n   * Enable the ground atmosphere, which is drawn over the globe when viewed from a distance between <code>lightingFadeInDistance</code> and <code>lightingFadeOutDistance</code>.\n   *\n   * @type {boolean}\n   * @default true when using the WGS84 ellipsoid, false otherwise\n   */\n  this.showGroundAtmosphere = Ellipsoid.WGS84.equals(ellipsoid);\n\n  /**\n   * The intensity of the light that is used for computing the ground atmosphere color.\n   *\n   * @type {number}\n   * @default 10.0\n   */\n  this.atmosphereLightIntensity = 10.0;\n\n  /**\n   * The Rayleigh scattering coefficient used in the atmospheric scattering equations for the ground atmosphere.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3(5.5e-6, 13.0e-6, 28.4e-6)\n   */\n  this.atmosphereRayleighCoefficient = new Cartesian3(5.5e-6, 13.0e-6, 28.4e-6);\n\n  /**\n   * The Mie scattering coefficient used in the atmospheric scattering equations for the ground atmosphere.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3(21e-6, 21e-6, 21e-6)\n   */\n  this.atmosphereMieCoefficient = new Cartesian3(21e-6, 21e-6, 21e-6);\n\n  /**\n   * The Rayleigh scale height used in the atmospheric scattering equations for the ground atmosphere, in meters.\n   *\n   * @type {number}\n   * @default 10000.0\n   */\n  this.atmosphereRayleighScaleHeight = 10000.0;\n\n  /**\n   * The Mie scale height used in the atmospheric scattering equations for the ground atmosphere, in meters.\n   *\n   * @type {number}\n   * @default 3200.0\n   */\n  this.atmosphereMieScaleHeight = 3200.0;\n\n  /**\n   * The anisotropy of the medium to consider for Mie scattering.\n   * <p>\n   * Valid values are between -1.0 and 1.0.\n   * </p>\n   * @type {number}\n   * @default 0.9\n   */\n  this.atmosphereMieAnisotropy = 0.9;\n\n  /**\n   * The distance where everything becomes lit. This only takes effect\n   * when <code>enableLighting</code> or <code>showGroundAtmosphere</code> is <code>true</code>.\n   *\n   * @type {number}\n   * @default 1/2 * pi * ellipsoid.minimumRadius\n   */\n  this.lightingFadeOutDistance =\n    CesiumMath.PI_OVER_TWO * ellipsoid.minimumRadius;\n\n  /**\n   * The distance where lighting resumes. This only takes effect\n   * when <code>enableLighting</code> or <code>showGroundAtmosphere</code> is <code>true</code>.\n   *\n   * @type {number}\n   * @default pi * ellipsoid.minimumRadius\n   */\n  this.lightingFadeInDistance = CesiumMath.PI * ellipsoid.minimumRadius;\n\n  /**\n   * The distance where the darkness of night from the ground atmosphere fades out to a lit ground atmosphere.\n   * This only takes effect when <code>showGroundAtmosphere</code>, <code>enableLighting</code>, and\n   * <code>dynamicAtmosphereLighting</code> are <code>true</code>.\n   *\n   * @type {number}\n   * @default 1/2 * pi * ellipsoid.minimumRadius\n   */\n  this.nightFadeOutDistance = CesiumMath.PI_OVER_TWO * ellipsoid.minimumRadius;\n\n  /**\n   * The distance where the darkness of night from the ground atmosphere fades in to an unlit ground atmosphere.\n   * This only takes effect when <code>showGroundAtmosphere</code>, <code>enableLighting</code>, and\n   * <code>dynamicAtmosphereLighting</code> are <code>true</code>.\n   *\n   * @type {number}\n   * @default 5/2 * pi * ellipsoid.minimumRadius\n   */\n  this.nightFadeInDistance =\n    5.0 * CesiumMath.PI_OVER_TWO * ellipsoid.minimumRadius;\n\n  /**\n   * True if an animated wave effect should be shown in areas of the globe\n   * covered by water; otherwise, false.  This property is ignored if the\n   * <code>terrainProvider</code> does not provide a water mask.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.showWaterEffect = true;\n\n  /**\n   * True if primitives such as billboards, polylines, labels, etc. should be depth-tested\n   * against the terrain surface, or false if such primitives should always be drawn on top\n   * of terrain unless they're on the opposite side of the globe.  The disadvantage of depth\n   * testing primitives against terrain is that slight numerical noise or terrain level-of-detail\n   * switched can sometimes make a primitive that should be on the surface disappear underneath it.\n   *\n   * @type {boolean}\n   * @default false\n   *\n   */\n  this.depthTestAgainstTerrain = false;\n\n  /**\n   * Determines whether the globe casts or receives shadows from light sources. Setting the globe\n   * to cast shadows may impact performance since the terrain is rendered again from the light's perspective.\n   * Currently only terrain that is in view casts shadows. By default the globe does not cast shadows.\n   *\n   * @type {ShadowMode}\n   * @default ShadowMode.RECEIVE_ONLY\n   */\n  this.shadows = ShadowMode.RECEIVE_ONLY;\n\n  /**\n   * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A hue shift of 1.0 indicates a complete rotation of the hues available.\n   * @type {number}\n   * @default 0.0\n   */\n  this.atmosphereHueShift = 0.0;\n\n  /**\n   * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A saturation shift of -1.0 is monochrome.\n   * @type {number}\n   * @default 0.0\n   */\n  this.atmosphereSaturationShift = 0.0;\n\n  /**\n   * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A brightness shift of -1.0 is complete darkness, which will let space show through.\n   * @type {number}\n   * @default 0.0\n   */\n  this.atmosphereBrightnessShift = 0.0;\n\n  /**\n   * Whether to show terrain skirts. Terrain skirts are geometry extending downwards from a tile's edges used to hide seams between neighboring tiles.\n   * Skirts are always hidden when the camera is underground or translucency is enabled.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.showSkirts = true;\n\n  /**\n   * Whether to cull back-facing terrain. Back faces are not culled when the camera is underground or translucency is enabled.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.backFaceCulling = true;\n\n  this._oceanNormalMap = undefined;\n  this._zoomedOutOceanSpecularIntensity = undefined;\n\n  /**\n   * Determines the darkness of the vertex shadow.\n   * This only takes effect when <code>enableLighting</code> is <code>true</code>.\n   *\n   * @type {number}\n   * @default 0.3\n   */\n  this.vertexShadowDarkness = 0.3;\n}\n\nObject.defineProperties(Globe.prototype, {\n  /**\n   * Gets an ellipsoid describing the shape of this globe.\n   * @memberof Globe.prototype\n   * @type {Ellipsoid}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n  /**\n   * Gets the collection of image layers that will be rendered on this globe.\n   * @memberof Globe.prototype\n   * @type {ImageryLayerCollection}\n   */\n  imageryLayers: {\n    get: function () {\n      return this._imageryLayerCollection;\n    },\n  },\n  /**\n   * Gets an event that's raised when an imagery layer is added, shown, hidden, moved, or removed.\n   *\n   * @memberof Globe.prototype\n   * @type {Event}\n   * @readonly\n   */\n  imageryLayersUpdatedEvent: {\n    get: function () {\n      return this._surface.tileProvider.imageryLayersUpdatedEvent;\n    },\n  },\n  /**\n   * Returns <code>true</code> when the tile load queue is empty, <code>false</code> otherwise.  When the load queue is empty,\n   * all terrain and imagery for the current view have been loaded.\n   * @memberof Globe.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  tilesLoaded: {\n    get: function () {\n      if (!defined(this._surface)) {\n        return true;\n      }\n      return (\n        this._surface._tileLoadQueueHigh.length === 0 &&\n        this._surface._tileLoadQueueMedium.length === 0 &&\n        this._surface._tileLoadQueueLow.length === 0\n      );\n    },\n  },\n  /**\n   * Gets or sets the color of the globe when no imagery is available.\n   * @memberof Globe.prototype\n   * @type {Color}\n   */\n  baseColor: {\n    get: function () {\n      return this._surface.tileProvider.baseColor;\n    },\n    set: function (value) {\n      this._surface.tileProvider.baseColor = value;\n    },\n  },\n  /**\n   * A property specifying a {@link ClippingPlaneCollection} used to selectively disable rendering on the outside of each plane.\n   *\n   * @memberof Globe.prototype\n   * @type {ClippingPlaneCollection}\n   */\n  clippingPlanes: {\n    get: function () {\n      return this._surface.tileProvider.clippingPlanes;\n    },\n    set: function (value) {\n      this._surface.tileProvider.clippingPlanes = value;\n    },\n  },\n  /**\n   * A property specifying a {@link ClippingPolygonCollection} used to selectively disable rendering inside or outside a list of polygons.\n   *\n   * @memberof Globe.prototype\n   * @type {ClippingPolygonCollection}\n   */\n  clippingPolygons: {\n    get: function () {\n      return this._surface.tileProvider.clippingPolygons;\n    },\n    set: function (value) {\n      this._surface.tileProvider.clippingPolygons = value;\n    },\n  },\n  /**\n   * A property specifying a {@link Rectangle} used to limit globe rendering to a cartographic area.\n   * Defaults to the maximum extent of cartographic coordinates.\n   *\n   * @memberof Globe.prototype\n   * @type {Rectangle}\n   * @default {@link Rectangle.MAX_VALUE}\n   */\n  cartographicLimitRectangle: {\n    get: function () {\n      return this._surface.tileProvider.cartographicLimitRectangle;\n    },\n    set: function (value) {\n      if (!defined(value)) {\n        value = Rectangle.clone(Rectangle.MAX_VALUE);\n      }\n      this._surface.tileProvider.cartographicLimitRectangle = value;\n    },\n  },\n  /**\n   * The normal map to use for rendering waves in the ocean.  Setting this property will\n   * only have an effect if the configured terrain provider includes a water mask.\n   * @memberof Globe.prototype\n   * @type {string}\n   * @default buildModuleUrl('Assets/Textures/waterNormalsSmall.jpg')\n   */\n  oceanNormalMapUrl: {\n    get: function () {\n      return this._oceanNormalMapResource.url;\n    },\n    set: function (value) {\n      this._oceanNormalMapResource.url = value;\n      this._oceanNormalMapResourceDirty = true;\n    },\n  },\n  /**\n   * The terrain provider providing surface geometry for this globe.\n   * @type {TerrainProvider}\n   *\n   * @memberof Globe.prototype\n   * @type {TerrainProvider}\n   *\n   */\n  terrainProvider: {\n    get: function () {\n      return this._terrainProvider;\n    },\n    set: function (value) {\n      if (value !== this._terrainProvider) {\n        this._terrainProvider = value;\n        this._terrainProviderChanged.raiseEvent(value);\n        if (defined(this._material)) {\n          makeShadersDirty(this);\n        }\n      }\n    },\n  },\n  /**\n   * Gets an event that's raised when the terrain provider is changed\n   *\n   * @memberof Globe.prototype\n   * @type {Event}\n   * @readonly\n   */\n  terrainProviderChanged: {\n    get: function () {\n      return this._terrainProviderChanged;\n    },\n  },\n  /**\n   * Gets an event that's raised when the length of the tile load queue has changed since the last render frame.  When the load queue is empty,\n   * all terrain and imagery for the current view have been loaded.  The event passes the new length of the tile load queue.\n   *\n   * @memberof Globe.prototype\n   * @type {Event}\n   */\n  tileLoadProgressEvent: {\n    get: function () {\n      return this._surface.tileLoadProgressEvent;\n    },\n  },\n\n  /**\n   * Gets or sets the material appearance of the Globe.  This can be one of several built-in {@link Material} objects or a custom material, scripted with\n   * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n   * @memberof Globe.prototype\n   * @type {Material | undefined}\n   */\n  material: {\n    get: function () {\n      return this._material;\n    },\n    set: function (material) {\n      if (this._material !== material) {\n        this._material = material;\n        makeShadersDirty(this);\n      }\n    },\n  },\n\n  /**\n   * The color to render the back side of the globe when the camera is underground or the globe is translucent,\n   * blended with the globe color based on the camera's distance.\n   * <br /><br />\n   * To disable underground coloring, set <code>undergroundColor</code> to <code>undefined</code>.\n   *\n   * @memberof Globe.prototype\n   * @type {Color}\n   * @default {@link Color.BLACK}\n   *\n   * @see Globe#undergroundColorAlphaByDistance\n   */\n  undergroundColor: {\n    get: function () {\n      return this._undergroundColor;\n    },\n    set: function (value) {\n      this._undergroundColor = Color.clone(value, this._undergroundColor);\n    },\n  },\n\n  /**\n   * Gets or sets the near and far distance for blending {@link Globe#undergroundColor} with the globe color.\n   * The alpha will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the alpha remains clamped to the nearest bound. If undefined,\n   * the underground color will not be blended with the globe color.\n   * <br /> <br />\n   * When the camera is above the ellipsoid the distance is computed from the nearest\n   * point on the ellipsoid instead of the camera's position.\n   *\n   * @memberof Globe.prototype\n   * @type {NearFarScalar}\n   *\n   * @see Globe#undergroundColor\n   *\n   */\n  undergroundColorAlphaByDistance: {\n    get: function () {\n      return this._undergroundColorAlphaByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far < value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n      this._undergroundColorAlphaByDistance = NearFarScalar.clone(\n        value,\n        this._undergroundColorAlphaByDistance,\n      );\n    },\n  },\n\n  /**\n   * Properties for controlling globe translucency.\n   *\n   * @memberof Globe.prototype\n   * @type {GlobeTranslucency}\n   */\n  translucency: {\n    get: function () {\n      return this._translucency;\n    },\n  },\n});\n\nfunction makeShadersDirty(globe) {\n  const defines = [];\n\n  const requireNormals =\n    defined(globe._material) &&\n    (defined(globe._material.shaderSource.match(/slope/)) ||\n      defined(globe._material.shaderSource.match(\"normalEC\")));\n\n  const fragmentSources = [AtmosphereCommon, GroundAtmosphere];\n  if (\n    defined(globe._material) &&\n    (!requireNormals || globe._terrainProvider.hasVertexNormals)\n  ) {\n    fragmentSources.push(globe._material.shaderSource);\n    defines.push(\"APPLY_MATERIAL\");\n    globe._surface._tileProvider.materialUniformMap = globe._material._uniforms;\n  } else {\n    globe._surface._tileProvider.materialUniformMap = undefined;\n  }\n  fragmentSources.push(GlobeFS);\n\n  globe._surfaceShaderSet.baseVertexShaderSource = new ShaderSource({\n    sources: [AtmosphereCommon, GroundAtmosphere, GlobeVS],\n    defines: defines,\n  });\n\n  globe._surfaceShaderSet.baseFragmentShaderSource = new ShaderSource({\n    sources: fragmentSources,\n    defines: defines,\n  });\n  globe._surfaceShaderSet.material = globe._material;\n}\n\nfunction createComparePickTileFunction(rayOrigin) {\n  return function (a, b) {\n    const aDist = BoundingSphere.distanceSquaredTo(\n      a.pickBoundingSphere,\n      rayOrigin,\n    );\n    const bDist = BoundingSphere.distanceSquaredTo(\n      b.pickBoundingSphere,\n      rayOrigin,\n    );\n\n    return aDist - bDist;\n  };\n}\n\nconst scratchArray = [];\nconst scratchSphereIntersectionResult = {\n  start: 0.0,\n  stop: 0.0,\n};\n\n/**\n * Find an intersection between a ray and the globe surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {Scene} scene The scene.\n * @param {boolean} [cullBackFaces=true] Set to true to not pick back faces.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.  The returned position is in projected coordinates for 2D and Columbus View.\n *\n * @private\n */\nGlobe.prototype.pickWorldCoordinates = function (\n  ray,\n  scene,\n  cullBackFaces,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(ray)) {\n    throw new DeveloperError(\"ray is required\");\n  }\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required\");\n  }\n  //>>includeEnd('debug');\n\n  cullBackFaces = cullBackFaces ?? true;\n\n  const mode = scene.mode;\n  const projection = scene.mapProjection;\n\n  const sphereIntersections = scratchArray;\n  sphereIntersections.length = 0;\n\n  for (const tile of this._surface._tilesRenderedThisFrame) {\n    const surfaceTile = tile.data;\n\n    if (!defined(surfaceTile)) {\n      continue;\n    }\n\n    let boundingVolume = surfaceTile.pickBoundingSphere;\n    if (mode !== SceneMode.SCENE3D) {\n      surfaceTile.pickBoundingSphere = boundingVolume =\n        BoundingSphere.fromRectangleWithHeights2D(\n          tile.rectangle,\n          projection,\n          surfaceTile.tileBoundingRegion.minimumHeight,\n          surfaceTile.tileBoundingRegion.maximumHeight,\n          boundingVolume,\n        );\n      Cartesian3.fromElements(\n        boundingVolume.center.z,\n        boundingVolume.center.x,\n        boundingVolume.center.y,\n        boundingVolume.center,\n      );\n    } else if (defined(surfaceTile.renderedMesh)) {\n      BoundingSphere.clone(\n        surfaceTile.tileBoundingRegion.boundingSphere,\n        boundingVolume,\n      );\n    } else {\n      // So wait how did we render this thing then? It shouldn't be possible to get here.\n      continue;\n    }\n\n    const boundingSphereIntersection = IntersectionTests.raySphere(\n      ray,\n      boundingVolume,\n      scratchSphereIntersectionResult,\n    );\n    if (defined(boundingSphereIntersection)) {\n      sphereIntersections.push(surfaceTile);\n    }\n  }\n\n  sphereIntersections.sort(createComparePickTileFunction(ray.origin));\n\n  let intersection;\n  const length = sphereIntersections.length;\n  for (let i = 0; i < length; ++i) {\n    intersection = sphereIntersections[i].pick(\n      ray,\n      scene.mode,\n      scene.mapProjection,\n      cullBackFaces,\n      result,\n    );\n    if (defined(intersection)) {\n      break;\n    }\n  }\n\n  return intersection;\n};\n\nconst cartoScratch = new Cartographic();\n/**\n * Find an intersection between a ray and the globe surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {Scene} scene The scene.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @example\n * // find intersection of ray through a pixel and the globe\n * const ray = viewer.camera.getPickRay(windowCoordinates);\n * const intersection = globe.pick(ray, scene);\n */\nGlobe.prototype.pick = function (ray, scene, result) {\n  result = this.pickWorldCoordinates(ray, scene, true, result);\n  if (defined(result) && scene.mode !== SceneMode.SCENE3D) {\n    result = Cartesian3.fromElements(result.y, result.z, result.x, result);\n    const carto = scene.mapProjection.unproject(result, cartoScratch);\n    result = this._ellipsoid.cartographicToCartesian(carto, result);\n  }\n\n  return result;\n};\n\nconst scratchGetHeightCartesian = new Cartesian3();\nconst scratchGetHeightIntersection = new Cartesian3();\nconst scratchGetHeightCartographic = new Cartographic();\nconst scratchGetHeightRay = new Ray();\n\nfunction tileIfContainsCartographic(tile, cartographic) {\n  return defined(tile) && Rectangle.contains(tile.rectangle, cartographic)\n    ? tile\n    : undefined;\n}\n\n/**\n * Get the height of the surface at a given cartographic.\n *\n * @param {Cartographic} cartographic The cartographic for which to find the height.\n * @returns {number|undefined} The height of the cartographic or undefined if it could not be found.\n */\nGlobe.prototype.getHeight = function (cartographic) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cartographic)) {\n    throw new DeveloperError(\"cartographic is required\");\n  }\n  //>>includeEnd('debug');\n\n  const levelZeroTiles = this._surface._levelZeroTiles;\n  if (!defined(levelZeroTiles)) {\n    return;\n  }\n\n  let tile;\n  let i;\n\n  const length = levelZeroTiles.length;\n  for (i = 0; i < length; ++i) {\n    tile = levelZeroTiles[i];\n    if (Rectangle.contains(tile.rectangle, cartographic)) {\n      break;\n    }\n  }\n\n  if (i >= length) {\n    return undefined;\n  }\n\n  let tileWithMesh = tile;\n\n  while (defined(tile)) {\n    tile =\n      tileIfContainsCartographic(tile._southwestChild, cartographic) ||\n      tileIfContainsCartographic(tile._southeastChild, cartographic) ||\n      tileIfContainsCartographic(tile._northwestChild, cartographic) ||\n      tile._northeastChild;\n\n    if (\n      defined(tile) &&\n      defined(tile.data) &&\n      defined(tile.data.renderedMesh)\n    ) {\n      tileWithMesh = tile;\n    }\n  }\n\n  tile = tileWithMesh;\n\n  // This tile was either rendered or culled.\n  // It is sometimes useful to get a height from a culled tile,\n  // e.g. when we're getting a height in order to place a billboard\n  // on terrain, and the camera is looking at that same billboard.\n  // The culled tile must have a valid mesh, though.\n  if (\n    !defined(tile) ||\n    !defined(tile.data) ||\n    !defined(tile.data.renderedMesh)\n  ) {\n    // Tile was not rendered (culled).\n    return undefined;\n  }\n\n  const projection = this._surface._tileProvider.tilingScheme.projection;\n  const ellipsoid = this._surface._tileProvider.tilingScheme.ellipsoid;\n\n  //cartesian has to be on the ellipsoid surface for `ellipsoid.geodeticSurfaceNormal`\n  const cartesian = Cartesian3.fromRadians(\n    cartographic.longitude,\n    cartographic.latitude,\n    0.0,\n    ellipsoid,\n    scratchGetHeightCartesian,\n  );\n\n  const ray = scratchGetHeightRay;\n  const surfaceNormal = ellipsoid.geodeticSurfaceNormal(\n    cartesian,\n    ray.direction,\n  );\n\n  // Try to find the intersection point between the surface normal and z-axis.\n  // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n  const rayOrigin = ellipsoid.getSurfaceNormalIntersectionWithZAxis(\n    cartesian,\n    11500.0,\n    ray.origin,\n  );\n\n  // Theoretically, not with Earth datums, the intersection point can be outside the ellipsoid\n  if (!defined(rayOrigin)) {\n    // intersection point is outside the ellipsoid, try other value\n    // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n    let minimumHeight;\n    if (defined(tile.data.tileBoundingRegion)) {\n      minimumHeight = tile.data.tileBoundingRegion.minimumHeight;\n    }\n    const magnitude = Math.min(minimumHeight ?? 0.0, -11500.0);\n\n    // multiply by the *positive* value of the magnitude\n    const vectorToMinimumPoint = Cartesian3.multiplyByScalar(\n      surfaceNormal,\n      Math.abs(magnitude) + 1,\n      scratchGetHeightIntersection,\n    );\n    Cartesian3.subtract(cartesian, vectorToMinimumPoint, ray.origin);\n  }\n\n  const intersection = tile.data.pick(\n    ray,\n    // Globe height is the same at a given cartographic regardless of the scene mode,\n    // but the ray is constructed via a surface normal (which assumes 3D), so pick in 3D mode.\n    SceneMode.SCENE3D,\n    projection,\n    false,\n    scratchGetHeightIntersection,\n  );\n  if (!defined(intersection)) {\n    return undefined;\n  }\n\n  return ellipsoid.cartesianToCartographic(\n    intersection,\n    scratchGetHeightCartographic,\n  ).height;\n};\n\n/**\n * @private\n */\nGlobe.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  if (frameState.passes.render) {\n    this._surface.update(frameState);\n  }\n};\n\n/**\n * @private\n */\nGlobe.prototype.beginFrame = function (frameState) {\n  const surface = this._surface;\n  const tileProvider = surface.tileProvider;\n  const terrainProvider = this.terrainProvider;\n  const hasWaterMask =\n    defined(terrainProvider) &&\n    terrainProvider.hasWaterMask &&\n    terrainProvider.hasWaterMask;\n\n  if (hasWaterMask && this._oceanNormalMapResourceDirty) {\n    // url changed, load new normal map asynchronously\n    this._oceanNormalMapResourceDirty = false;\n    const oceanNormalMapResource = this._oceanNormalMapResource;\n    const oceanNormalMapUrl = oceanNormalMapResource.url;\n    if (defined(oceanNormalMapUrl)) {\n      const that = this;\n      oceanNormalMapResource.fetchImage().then(function (image) {\n        if (oceanNormalMapUrl !== that._oceanNormalMapResource.url) {\n          // url changed while we were loading\n          return;\n        }\n\n        that._oceanNormalMap =\n          that._oceanNormalMap && that._oceanNormalMap.destroy();\n        that._oceanNormalMap = new Texture({\n          context: frameState.context,\n          source: image,\n        });\n      });\n    } else {\n      this._oceanNormalMap =\n        this._oceanNormalMap && this._oceanNormalMap.destroy();\n    }\n  }\n\n  const pass = frameState.passes;\n  const mode = frameState.mode;\n\n  if (pass.render) {\n    if (this.showGroundAtmosphere) {\n      this._zoomedOutOceanSpecularIntensity = 0.4;\n    } else {\n      this._zoomedOutOceanSpecularIntensity = 0.5;\n    }\n\n    surface.maximumScreenSpaceError = this.maximumScreenSpaceError;\n    surface.tileCacheSize = this.tileCacheSize;\n    surface.loadingDescendantLimit = this.loadingDescendantLimit;\n    surface.preloadAncestors = this.preloadAncestors;\n    surface.preloadSiblings = this.preloadSiblings;\n\n    tileProvider.terrainProvider = this.terrainProvider;\n    tileProvider.lightingFadeOutDistance = this.lightingFadeOutDistance;\n    tileProvider.lightingFadeInDistance = this.lightingFadeInDistance;\n    tileProvider.nightFadeOutDistance = this.nightFadeOutDistance;\n    tileProvider.nightFadeInDistance = this.nightFadeInDistance;\n    tileProvider.zoomedOutOceanSpecularIntensity =\n      mode === SceneMode.SCENE3D ? this._zoomedOutOceanSpecularIntensity : 0.0;\n    tileProvider.hasWaterMask = hasWaterMask;\n    tileProvider.showWaterEffect = this.showWaterEffect;\n    tileProvider.oceanNormalMap = this._oceanNormalMap;\n    tileProvider.enableLighting = this.enableLighting;\n    tileProvider.dynamicAtmosphereLighting = this.dynamicAtmosphereLighting;\n    tileProvider.dynamicAtmosphereLightingFromSun =\n      this.dynamicAtmosphereLightingFromSun;\n    tileProvider.showGroundAtmosphere = this.showGroundAtmosphere;\n    tileProvider.atmosphereLightIntensity = this.atmosphereLightIntensity;\n    tileProvider.atmosphereRayleighCoefficient =\n      this.atmosphereRayleighCoefficient;\n    tileProvider.atmosphereMieCoefficient = this.atmosphereMieCoefficient;\n    tileProvider.atmosphereRayleighScaleHeight =\n      this.atmosphereRayleighScaleHeight;\n    tileProvider.atmosphereMieScaleHeight = this.atmosphereMieScaleHeight;\n    tileProvider.atmosphereMieAnisotropy = this.atmosphereMieAnisotropy;\n    tileProvider.shadows = this.shadows;\n    tileProvider.hueShift = this.atmosphereHueShift;\n    tileProvider.saturationShift = this.atmosphereSaturationShift;\n    tileProvider.brightnessShift = this.atmosphereBrightnessShift;\n    tileProvider.fillHighlightColor = this.fillHighlightColor;\n    tileProvider.showSkirts = this.showSkirts;\n    tileProvider.backFaceCulling = this.backFaceCulling;\n    tileProvider.vertexShadowDarkness = this.vertexShadowDarkness;\n    tileProvider.undergroundColor = this._undergroundColor;\n    tileProvider.undergroundColorAlphaByDistance =\n      this._undergroundColorAlphaByDistance;\n    tileProvider.lambertDiffuseMultiplier = this.lambertDiffuseMultiplier;\n\n    surface.beginFrame(frameState);\n  }\n};\n\n/**\n * @private\n */\nGlobe.prototype.render = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  if (defined(this._material)) {\n    this._material.update(frameState.context);\n  }\n\n  this._surface.render(frameState);\n};\n\n/**\n * @private\n */\nGlobe.prototype.endFrame = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  if (frameState.passes.render) {\n    this._surface.endFrame(frameState);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see Globe#destroy\n */\nGlobe.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * globe = globe && globe.destroy();\n *\n * @see Globe#isDestroyed\n */\nGlobe.prototype.destroy = function () {\n  this._surfaceShaderSet =\n    this._surfaceShaderSet && this._surfaceShaderSet.destroy();\n  this._surface = this._surface && this._surface.destroy();\n  this._oceanNormalMap = this._oceanNormalMap && this._oceanNormalMap.destroy();\n  return destroyObject(this);\n};\nexport default Globe;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport PassThroughDepth from \"../Shaders/PostProcessStages/PassThroughDepth.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * @alias GlobeDepth\n * @constructor\n *\n * @private\n */\nfunction GlobeDepth() {\n  this._picking = false;\n  this._numSamples = 1;\n  this._tempCopyDepthTexture = undefined;\n\n  this._pickColorFramebuffer = new FramebufferManager({\n    depthStencil: true,\n    supportsDepthTexture: true,\n  });\n  this._outputFramebuffer = new FramebufferManager({\n    depthStencil: true,\n    supportsDepthTexture: true,\n  });\n  this._copyDepthFramebuffer = new FramebufferManager();\n  this._tempCopyDepthFramebuffer = new FramebufferManager();\n  this._updateDepthFramebuffer = new FramebufferManager({\n    createColorAttachments: false,\n    createDepthAttachments: false,\n    depthStencil: true,\n  });\n\n  this._clearGlobeColorCommand = undefined;\n  this._copyColorCommand = undefined;\n  this._copyDepthCommand = undefined;\n  this._tempCopyDepthCommand = undefined;\n  this._updateDepthCommand = undefined;\n\n  this._viewport = new BoundingRectangle();\n  this._rs = undefined;\n  this._rsBlend = undefined;\n  this._rsUpdate = undefined;\n\n  this._useScissorTest = false;\n  this._scissorRectangle = undefined;\n\n  this._useHdr = undefined;\n  this._clearGlobeDepth = undefined;\n}\n\nObject.defineProperties(GlobeDepth.prototype, {\n  colorFramebufferManager: {\n    get: function () {\n      return this._picking\n        ? this._pickColorFramebuffer\n        : this._outputFramebuffer;\n    },\n  },\n  framebuffer: {\n    get: function () {\n      return this.colorFramebufferManager.framebuffer;\n    },\n  },\n  depthStencilTexture: {\n    get: function () {\n      return this.colorFramebufferManager.getDepthStencilTexture();\n    },\n  },\n  picking: {\n    get: function () {\n      return this._picking;\n    },\n    set: function (value) {\n      this._picking = value;\n    },\n  },\n});\n\nfunction updateCopyCommands(globeDepth, context, width, height, passState) {\n  const viewport = globeDepth._viewport;\n  viewport.width = width;\n  viewport.height = height;\n\n  const useScissorTest = !BoundingRectangle.equals(\n    viewport,\n    passState.viewport,\n  );\n  let updateScissor = useScissorTest !== globeDepth._useScissorTest;\n  globeDepth._useScissorTest = useScissorTest;\n\n  if (\n    !BoundingRectangle.equals(globeDepth._scissorRectangle, passState.viewport)\n  ) {\n    globeDepth._scissorRectangle = BoundingRectangle.clone(\n      passState.viewport,\n      globeDepth._scissorRectangle,\n    );\n    updateScissor = true;\n  }\n\n  if (\n    !defined(globeDepth._rs) ||\n    !BoundingRectangle.equals(viewport, globeDepth._rs.viewport) ||\n    updateScissor\n  ) {\n    globeDepth._rs = RenderState.fromCache({\n      viewport: viewport,\n      scissorTest: {\n        enabled: globeDepth._useScissorTest,\n        rectangle: globeDepth._scissorRectangle,\n      },\n    });\n    globeDepth._rsBlend = RenderState.fromCache({\n      viewport: viewport,\n      scissorTest: {\n        enabled: globeDepth._useScissorTest,\n        rectangle: globeDepth._scissorRectangle,\n      },\n      blending: BlendingState.ALPHA_BLEND,\n    });\n\n    // Copy packed depth only if the 3D Tiles bit is set\n    globeDepth._rsUpdate = RenderState.fromCache({\n      viewport: viewport,\n      scissorTest: {\n        enabled: globeDepth._useScissorTest,\n        rectangle: globeDepth._scissorRectangle,\n      },\n      stencilTest: {\n        enabled: true,\n        frontFunction: StencilFunction.EQUAL,\n        frontOperation: {\n          fail: StencilOperation.KEEP,\n          zFail: StencilOperation.KEEP,\n          zPass: StencilOperation.KEEP,\n        },\n        backFunction: StencilFunction.NEVER,\n        reference: StencilConstants.CESIUM_3D_TILE_MASK,\n        mask: StencilConstants.CESIUM_3D_TILE_MASK,\n      },\n    });\n  }\n\n  if (!defined(globeDepth._copyDepthCommand)) {\n    globeDepth._copyDepthCommand = context.createViewportQuadCommand(\n      PassThroughDepth,\n      {\n        uniformMap: {\n          u_depthTexture: function () {\n            return globeDepth.colorFramebufferManager.getDepthStencilTexture();\n          },\n        },\n        owner: globeDepth,\n      },\n    );\n  }\n\n  globeDepth._copyDepthCommand.framebuffer =\n    globeDepth._copyDepthFramebuffer.framebuffer;\n  globeDepth._copyDepthCommand.renderState = globeDepth._rs;\n\n  if (!defined(globeDepth._copyColorCommand)) {\n    globeDepth._copyColorCommand = context.createViewportQuadCommand(\n      PassThrough,\n      {\n        uniformMap: {\n          colorTexture: function () {\n            return globeDepth.colorFramebufferManager.getColorTexture();\n          },\n        },\n        owner: globeDepth,\n      },\n    );\n  }\n\n  globeDepth._copyColorCommand.renderState = globeDepth._rs;\n\n  if (!defined(globeDepth._tempCopyDepthCommand)) {\n    globeDepth._tempCopyDepthCommand = context.createViewportQuadCommand(\n      PassThroughDepth,\n      {\n        uniformMap: {\n          u_depthTexture: function () {\n            return globeDepth._tempCopyDepthTexture;\n          },\n        },\n        owner: globeDepth,\n      },\n    );\n  }\n\n  globeDepth._tempCopyDepthCommand.framebuffer =\n    globeDepth._tempCopyDepthFramebuffer.framebuffer;\n  globeDepth._tempCopyDepthCommand.renderState = globeDepth._rs;\n\n  if (!defined(globeDepth._updateDepthCommand)) {\n    globeDepth._updateDepthCommand = context.createViewportQuadCommand(\n      PassThrough,\n      {\n        uniformMap: {\n          colorTexture: function () {\n            return globeDepth._tempCopyDepthFramebuffer.getColorTexture();\n          },\n        },\n        owner: globeDepth,\n      },\n    );\n  }\n\n  globeDepth._updateDepthCommand.framebuffer =\n    globeDepth._updateDepthFramebuffer.framebuffer;\n  globeDepth._updateDepthCommand.renderState = globeDepth._rsUpdate;\n\n  if (!defined(globeDepth._clearGlobeColorCommand)) {\n    globeDepth._clearGlobeColorCommand = new ClearCommand({\n      color: new Color(0.0, 0.0, 0.0, 0.0),\n      stencil: 0.0,\n      owner: globeDepth,\n    });\n  }\n\n  globeDepth._clearGlobeColorCommand.framebuffer = globeDepth.framebuffer;\n}\n\n/**\n * Update framebuffers and render state.\n *\n * @param {Context} context The context used for rendering.\n * @param {PassState} passState Rendering state for subsequent render passes.\n * @param {BoundingRectangle} viewport The viewport for the rendering.\n * @param {number} numSamples The number of samples for multi-sample anti-aliasing (MSAA).\n * @param {boolean} hdr <code>true</code> if the color output needs to be floating point for HDR rendering.\n * @param {boolean} clearGlobeDepth <code>true</code> if the depth buffer should be cleared before rendering 3D Tiles and opaque entities.\n *\n * @private\n */\nGlobeDepth.prototype.update = function (\n  context,\n  passState,\n  viewport,\n  numSamples,\n  hdr,\n  clearGlobeDepth,\n) {\n  const { width, height } = viewport;\n\n  const pixelDatatype = hdr\n    ? context.halfFloatingPointTexture\n      ? PixelDatatype.HALF_FLOAT\n      : PixelDatatype.FLOAT\n    : PixelDatatype.UNSIGNED_BYTE;\n  this._numSamples = numSamples;\n  if (this.picking) {\n    this._pickColorFramebuffer.update(context, width, height);\n  } else {\n    this._outputFramebuffer.update(\n      context,\n      width,\n      height,\n      numSamples,\n      pixelDatatype,\n    );\n  }\n  this._copyDepthFramebuffer.update(context, width, height);\n  updateCopyCommands(this, context, width, height, passState);\n  context.uniformState.globeDepthTexture = undefined;\n\n  this._clearGlobeDepth = clearGlobeDepth;\n};\n\n/**\n * If using MSAA, resolve the stencil.\n *\n * @param {Context} context\n * @param {boolean} blitStencil <code>true</code> if the stencil has been set.\n *\n * @private\n */\nGlobeDepth.prototype.prepareColorTextures = function (context, blitStencil) {\n  if (!this.picking && this._numSamples > 1) {\n    this._outputFramebuffer.prepareTextures(context, blitStencil);\n  }\n};\n\nGlobeDepth.prototype.executeCopyDepth = function (context, passState) {\n  if (defined(this._copyDepthCommand)) {\n    this.prepareColorTextures(context);\n    this._copyDepthCommand.execute(context, passState);\n    context.uniformState.globeDepthTexture =\n      this._copyDepthFramebuffer.getColorTexture();\n  }\n};\n\n/**\n * Update the existing depth texture using a stencil.\n *\n * @param {Context} context The context used for rendering.\n * @param {PassState} passState Render state for subsequent rendering passes.\n * @param {Texture} [depthTexture] The depth texture to copy.\n */\nGlobeDepth.prototype.executeUpdateDepth = function (\n  context,\n  passState,\n  depthTexture,\n) {\n  const depthTextureToCopy = defined(depthTexture)\n    ? depthTexture\n    : passState.framebuffer.depthStencilTexture;\n  if (\n    !this._clearGlobeDepth &&\n    depthTextureToCopy === this.colorFramebufferManager.getDepthStencilTexture()\n  ) {\n    // Fast path - the depth texture can be copied normally.\n    if (defined(this._copyDepthCommand)) {\n      this._copyDepthCommand.execute(context, passState);\n    }\n    return;\n  }\n  if (!defined(this._updateDepthCommand)) {\n    return;\n  }\n\n  // First copy the depth to a temporary globe depth texture, then update the\n  // main globe depth texture where the stencil bit for 3D Tiles is set.\n  // This preserves the original globe depth except where 3D Tiles is rendered.\n  // The additional texture and framebuffer resources are created on demand.\n  const updateDepthFramebuffer = this._updateDepthFramebuffer;\n  if (\n    !defined(updateDepthFramebuffer.framebuffer) ||\n    updateDepthFramebuffer.getDepthStencilTexture() !== depthTextureToCopy ||\n    updateDepthFramebuffer.getColorTexture() !==\n      this._copyDepthFramebuffer.getColorTexture()\n  ) {\n    const colorTexture = this._copyDepthFramebuffer.getColorTexture();\n    const { width, height } = colorTexture;\n    this._tempCopyDepthFramebuffer.destroy();\n    this._tempCopyDepthFramebuffer.update(context, width, height);\n\n    updateDepthFramebuffer.setColorTexture(colorTexture, 0);\n    updateDepthFramebuffer.setDepthStencilTexture(depthTextureToCopy);\n    updateDepthFramebuffer.update(context, width, height);\n\n    updateCopyCommands(this, context, width, height, passState);\n  }\n  this._tempCopyDepthTexture = depthTextureToCopy;\n  this._tempCopyDepthCommand.execute(context, passState);\n  this._updateDepthCommand.execute(context, passState);\n};\n\nGlobeDepth.prototype.executeCopyColor = function (context, passState) {\n  if (defined(this._copyColorCommand)) {\n    this._copyColorCommand.execute(context, passState);\n  }\n};\n\nGlobeDepth.prototype.clear = function (context, passState, clearColor) {\n  const clear = this._clearGlobeColorCommand;\n  if (defined(clear)) {\n    Color.clone(clearColor, clear.color);\n    this.colorFramebufferManager.clear(context, clear, passState);\n  }\n};\n\nGlobeDepth.prototype.isDestroyed = function () {\n  return false;\n};\n\nGlobeDepth.prototype.destroy = function () {\n  this._pickColorFramebuffer.destroy();\n  this._outputFramebuffer.destroy();\n  this._copyDepthFramebuffer.destroy();\n  this._tempCopyDepthFramebuffer.destroy();\n  this._updateDepthFramebuffer.destroy();\n\n  if (defined(this._copyColorCommand)) {\n    this._copyColorCommand.shaderProgram =\n      this._copyColorCommand.shaderProgram.destroy();\n  }\n\n  if (defined(this._copyDepthCommand)) {\n    this._copyDepthCommand.shaderProgram =\n      this._copyDepthCommand.shaderProgram.destroy();\n  }\n\n  if (defined(this._tempCopyDepthCommand)) {\n    this._tempCopyDepthCommand.shaderProgram =\n      this._tempCopyDepthCommand.shaderProgram.destroy();\n  }\n\n  if (defined(this._updateDepthCommand)) {\n    this._updateDepthCommand.shaderProgram =\n      this._updateDepthCommand.shaderProgram.destroy();\n  }\n\n  return destroyObject(this);\n};\nexport default GlobeDepth;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport TerrainQuantization from \"../Core/TerrainQuantization.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport getClippingFunction from \"./getClippingFunction.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nfunction GlobeSurfaceShader(\n  numberOfDayTextures,\n  flags,\n  material,\n  shaderProgram,\n  clippingShaderState,\n  clippingPolygonShaderState,\n) {\n  this.numberOfDayTextures = numberOfDayTextures;\n  this.flags = flags;\n  this.material = material;\n  this.shaderProgram = shaderProgram;\n  this.clippingShaderState = clippingShaderState;\n  this.clippingPolygonShaderState = clippingPolygonShaderState;\n}\n\n/**\n * Manages the shaders used to shade the surface of a {@link Globe}.\n *\n * @alias GlobeSurfaceShaderSet\n * @private\n */\nfunction GlobeSurfaceShaderSet() {\n  this.baseVertexShaderSource = undefined;\n  this.baseFragmentShaderSource = undefined;\n\n  this._shadersByTexturesFlags = [];\n\n  this.material = undefined;\n}\n\nfunction getPositionMode(sceneMode) {\n  const getPosition3DMode =\n    \"vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }\";\n  const getPositionColumbusViewAnd2DMode =\n    \"vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }\";\n  const getPositionMorphingMode =\n    \"vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }\";\n\n  let positionMode;\n\n  switch (sceneMode) {\n    case SceneMode.SCENE3D:\n      positionMode = getPosition3DMode;\n      break;\n    case SceneMode.SCENE2D:\n    case SceneMode.COLUMBUS_VIEW:\n      positionMode = getPositionColumbusViewAnd2DMode;\n      break;\n    case SceneMode.MORPHING:\n      positionMode = getPositionMorphingMode;\n      break;\n  }\n\n  return positionMode;\n}\n\nfunction getPolygonClippingFunction(context) {\n  // return a noop for webgl1\n  if (!context.webgl2) {\n    return `void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) {\n    }`;\n  }\n\n  return `void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) {\n    czm_clipPolygons(clippingDistance, regionsLength, clippingPosition, regionIndex);\n  }`;\n}\n\nfunction getUnpackClippingFunction(context) {\n  // return a noop for webgl1\n  if (!context.webgl2) {\n    return `vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) {\n      return vec4();\n    }`;\n  }\n\n  return `vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) {\n    return czm_unpackClippingExtents(extentsTexture, index);\n  }`;\n}\n\nfunction get2DYPositionFraction(useWebMercatorProjection) {\n  const get2DYPositionFractionGeographicProjection =\n    \"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }\";\n  const get2DYPositionFractionMercatorProjection =\n    \"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }\";\n  return useWebMercatorProjection\n    ? get2DYPositionFractionMercatorProjection\n    : get2DYPositionFractionGeographicProjection;\n}\n\nGlobeSurfaceShaderSet.prototype.getShaderProgram = function (options) {\n  const frameState = options.frameState;\n  const surfaceTile = options.surfaceTile;\n  const numberOfDayTextures = options.numberOfDayTextures;\n  const applyBrightness = options.applyBrightness;\n  const applyContrast = options.applyContrast;\n  const applyHue = options.applyHue;\n  const applySaturation = options.applySaturation;\n  const applyGamma = options.applyGamma;\n  const applyAlpha = options.applyAlpha;\n  const applyDayNightAlpha = options.applyDayNightAlpha;\n  const applySplit = options.applySplit;\n  const hasWaterMask = options.hasWaterMask;\n  const showReflectiveOcean = options.showReflectiveOcean;\n  const showOceanWaves = options.showOceanWaves;\n  const enableLighting = options.enableLighting;\n  const dynamicAtmosphereLighting = options.dynamicAtmosphereLighting;\n  const dynamicAtmosphereLightingFromSun =\n    options.dynamicAtmosphereLightingFromSun;\n  const showGroundAtmosphere = options.showGroundAtmosphere;\n  const perFragmentGroundAtmosphere = options.perFragmentGroundAtmosphere;\n  const hasVertexNormals = options.hasVertexNormals;\n  const useWebMercatorProjection = options.useWebMercatorProjection;\n  const enableFog = options.enableFog;\n  const enableClippingPlanes = options.enableClippingPlanes;\n  const clippingPlanes = options.clippingPlanes;\n  const enableClippingPolygons = options.enableClippingPolygons;\n  const clippingPolygons = options.clippingPolygons;\n  const clippedByBoundaries = options.clippedByBoundaries;\n  const hasImageryLayerCutout = options.hasImageryLayerCutout;\n  const colorCorrect = options.colorCorrect;\n  const highlightFillTile = options.highlightFillTile;\n  const colorToAlpha = options.colorToAlpha;\n  const hasGeodeticSurfaceNormals = options.hasGeodeticSurfaceNormals;\n  const hasExaggeration = options.hasExaggeration;\n  const showUndergroundColor = options.showUndergroundColor;\n  const translucent = options.translucent;\n\n  let quantization = 0;\n  let quantizationDefine = \"\";\n\n  const mesh = surfaceTile.renderedMesh;\n  const terrainEncoding = mesh.encoding;\n  const quantizationMode = terrainEncoding.quantization;\n  if (quantizationMode === TerrainQuantization.BITS12) {\n    quantization = 1;\n    quantizationDefine = \"QUANTIZATION_BITS12\";\n  }\n\n  let cartographicLimitRectangleFlag = 0;\n  let cartographicLimitRectangleDefine = \"\";\n  if (clippedByBoundaries) {\n    cartographicLimitRectangleFlag = 1;\n    cartographicLimitRectangleDefine = \"TILE_LIMIT_RECTANGLE\";\n  }\n\n  let imageryCutoutFlag = 0;\n  let imageryCutoutDefine = \"\";\n  if (hasImageryLayerCutout) {\n    imageryCutoutFlag = 1;\n    imageryCutoutDefine = \"APPLY_IMAGERY_CUTOUT\";\n  }\n\n  const sceneMode = frameState.mode;\n  // Bitwise OR uses 32-bit integers; bits 0-31 are packed below.\n  // Flags beyond bit 31 use arithmetic to avoid silent wrap-around\n  // (x << 32 === x << 0 in JavaScript).\n  const flags =\n    ((sceneMode |\n      (applyBrightness << 2) |\n      (applyContrast << 3) |\n      (applyHue << 4) |\n      (applySaturation << 5) |\n      (applyGamma << 6) |\n      (applyAlpha << 7) |\n      (hasWaterMask << 8) |\n      (showReflectiveOcean << 9) |\n      (showOceanWaves << 10) |\n      (enableLighting << 11) |\n      (dynamicAtmosphereLighting << 12) |\n      (dynamicAtmosphereLightingFromSun << 13) |\n      (showGroundAtmosphere << 14) |\n      (perFragmentGroundAtmosphere << 15) |\n      (hasVertexNormals << 16) |\n      (useWebMercatorProjection << 17) |\n      (enableFog << 18) |\n      (quantization << 19) |\n      (applySplit << 20) |\n      (enableClippingPlanes << 21) |\n      (enableClippingPolygons << 22) |\n      (cartographicLimitRectangleFlag << 23) |\n      (imageryCutoutFlag << 24) |\n      (colorCorrect << 25) |\n      (highlightFillTile << 26) |\n      (colorToAlpha << 27) |\n      (hasGeodeticSurfaceNormals << 28) |\n      (hasExaggeration << 29) |\n      (showUndergroundColor << 30) |\n      (translucent << 31)) >>>\n      0) +\n    (applyDayNightAlpha ? 0x100000000 : 0);\n\n  let currentClippingShaderState = 0;\n  if (defined(clippingPlanes) && clippingPlanes.length > 0) {\n    currentClippingShaderState = enableClippingPlanes\n      ? clippingPlanes.clippingPlanesState\n      : 0;\n  }\n\n  let currentClippingPolygonsShaderState = 0;\n  if (defined(clippingPolygons) && clippingPolygons.length > 0) {\n    currentClippingPolygonsShaderState = enableClippingPolygons\n      ? clippingPolygons.clippingPolygonsState\n      : 0;\n  }\n\n  let surfaceShader = surfaceTile.surfaceShader;\n  if (\n    defined(surfaceShader) &&\n    surfaceShader.numberOfDayTextures === numberOfDayTextures &&\n    surfaceShader.flags === flags &&\n    surfaceShader.material === this.material &&\n    surfaceShader.clippingShaderState === currentClippingShaderState &&\n    surfaceShader.clippingPolygonShaderState ===\n      currentClippingPolygonsShaderState\n  ) {\n    return surfaceShader.shaderProgram;\n  }\n\n  // New tile, or tile changed number of textures, flags, or clipping planes\n  let shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures];\n  if (!defined(shadersByFlags)) {\n    shadersByFlags = this._shadersByTexturesFlags[numberOfDayTextures] = [];\n  }\n\n  surfaceShader = shadersByFlags[flags];\n  if (\n    !defined(surfaceShader) ||\n    surfaceShader.material !== this.material ||\n    surfaceShader.clippingShaderState !== currentClippingShaderState ||\n    surfaceShader.clippingPolygonShaderState !==\n      currentClippingPolygonsShaderState\n  ) {\n    // Cache miss - we've never seen this combination of numberOfDayTextures and flags before.\n    const vs = this.baseVertexShaderSource.clone();\n    const fs = this.baseFragmentShaderSource.clone();\n\n    // Need to go before GlobeFS\n    if (currentClippingShaderState !== 0) {\n      fs.sources.unshift(\n        getClippingFunction(clippingPlanes, frameState.context),\n      );\n    }\n\n    // Need to go before GlobeFS\n    if (currentClippingPolygonsShaderState !== 0) {\n      fs.sources.unshift(getPolygonClippingFunction(frameState.context));\n      vs.sources.unshift(getUnpackClippingFunction(frameState.context));\n    }\n\n    vs.defines.push(quantizationDefine);\n    fs.defines.push(\n      `TEXTURE_UNITS ${numberOfDayTextures}`,\n      cartographicLimitRectangleDefine,\n      imageryCutoutDefine,\n    );\n\n    if (applyBrightness) {\n      fs.defines.push(\"APPLY_BRIGHTNESS\");\n    }\n    if (applyContrast) {\n      fs.defines.push(\"APPLY_CONTRAST\");\n    }\n    if (applyHue) {\n      fs.defines.push(\"APPLY_HUE\");\n    }\n    if (applySaturation) {\n      fs.defines.push(\"APPLY_SATURATION\");\n    }\n    if (applyGamma) {\n      fs.defines.push(\"APPLY_GAMMA\");\n    }\n    if (applyAlpha) {\n      fs.defines.push(\"APPLY_ALPHA\");\n    }\n    if (applyDayNightAlpha) {\n      fs.defines.push(\"APPLY_DAY_NIGHT_ALPHA\");\n    }\n    if (hasWaterMask) {\n      fs.defines.push(\"HAS_WATER_MASK\");\n    }\n    if (showReflectiveOcean) {\n      fs.defines.push(\"SHOW_REFLECTIVE_OCEAN\");\n      vs.defines.push(\"SHOW_REFLECTIVE_OCEAN\");\n    }\n    if (showOceanWaves) {\n      fs.defines.push(\"SHOW_OCEAN_WAVES\");\n    }\n    if (colorToAlpha) {\n      fs.defines.push(\"APPLY_COLOR_TO_ALPHA\");\n    }\n    if (showUndergroundColor) {\n      vs.defines.push(\"UNDERGROUND_COLOR\");\n      fs.defines.push(\"UNDERGROUND_COLOR\");\n    }\n    if (translucent) {\n      vs.defines.push(\"TRANSLUCENT\");\n      fs.defines.push(\"TRANSLUCENT\");\n    }\n    if (enableLighting) {\n      if (hasVertexNormals) {\n        vs.defines.push(\"ENABLE_VERTEX_LIGHTING\");\n        fs.defines.push(\"ENABLE_VERTEX_LIGHTING\");\n      } else {\n        vs.defines.push(\"ENABLE_DAYNIGHT_SHADING\");\n        fs.defines.push(\"ENABLE_DAYNIGHT_SHADING\");\n      }\n    }\n\n    if (dynamicAtmosphereLighting) {\n      vs.defines.push(\"DYNAMIC_ATMOSPHERE_LIGHTING\");\n      fs.defines.push(\"DYNAMIC_ATMOSPHERE_LIGHTING\");\n      if (dynamicAtmosphereLightingFromSun) {\n        vs.defines.push(\"DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN\");\n        fs.defines.push(\"DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN\");\n      }\n    }\n\n    if (showGroundAtmosphere) {\n      vs.defines.push(\"GROUND_ATMOSPHERE\");\n      fs.defines.push(\"GROUND_ATMOSPHERE\");\n      if (perFragmentGroundAtmosphere) {\n        vs.defines.push(\"PER_FRAGMENT_GROUND_ATMOSPHERE\");\n        fs.defines.push(\"PER_FRAGMENT_GROUND_ATMOSPHERE\");\n      }\n    }\n\n    vs.defines.push(\"INCLUDE_WEB_MERCATOR_Y\");\n    fs.defines.push(\"INCLUDE_WEB_MERCATOR_Y\");\n\n    if (enableFog) {\n      vs.defines.push(\"FOG\");\n      fs.defines.push(\"FOG\");\n    }\n\n    if (applySplit) {\n      fs.defines.push(\"APPLY_SPLIT\");\n    }\n\n    if (enableClippingPlanes) {\n      fs.defines.push(\"ENABLE_CLIPPING_PLANES\");\n    }\n\n    if (enableClippingPolygons) {\n      fs.defines.push(\"ENABLE_CLIPPING_POLYGONS\");\n      vs.defines.push(\"ENABLE_CLIPPING_POLYGONS\");\n\n      if (clippingPolygons.inverse) {\n        fs.defines.push(\"CLIPPING_INVERSE\");\n      }\n\n      fs.defines.push(\n        `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,\n      );\n      vs.defines.push(\n        `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,\n      );\n    }\n\n    if (colorCorrect) {\n      fs.defines.push(\"COLOR_CORRECT\");\n    }\n\n    if (highlightFillTile) {\n      fs.defines.push(\"HIGHLIGHT_FILL_TILE\");\n    }\n\n    if (hasGeodeticSurfaceNormals) {\n      vs.defines.push(\"GEODETIC_SURFACE_NORMALS\");\n    }\n\n    if (hasExaggeration) {\n      vs.defines.push(\"EXAGGERATION\");\n    }\n\n    let computeDayColor =\n      \"\\\n    vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)\\n\\\n    {\\n\\\n        vec4 color = initialColor;\\n\";\n\n    if (hasImageryLayerCutout) {\n      computeDayColor +=\n        \"\\\n        vec4 cutoutAndColorResult;\\n\\\n        bool texelUnclipped;\\n\";\n    }\n\n    for (let i = 0; i < numberOfDayTextures; ++i) {\n      if (hasImageryLayerCutout) {\n        computeDayColor += `\\\n        cutoutAndColorResult = u_dayTextureCutoutRectangles[${i}];\\n\\\n        texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;\\n\\\n        cutoutAndColorResult = sampleAndBlend(\\n`;\n      } else {\n        computeDayColor +=\n          \"\\\n        color = sampleAndBlend(\\n\";\n      }\n      computeDayColor += `\\\n            color,\\n\\\n            u_dayTextures[${i}],\\n\\\n            u_dayTextureUseWebMercatorT[${i}] ? textureCoordinates.xz : textureCoordinates.xy,\\n\\\n            u_dayTextureTexCoordsRectangle[${i}],\\n\\\n            u_dayTextureTranslationAndScale[${i}],\\n\\\n            ${applyAlpha ? `u_dayTextureAlpha[${i}]` : \"1.0\"},\\n\\\n            ${applyDayNightAlpha ? `u_dayTextureNightAlpha[${i}]` : \"1.0\"},\\n\\\n            ${applyDayNightAlpha ? `u_dayTextureDayAlpha[${i}]` : \"1.0\"},\\n\\\n            ${applyBrightness ? `u_dayTextureBrightness[${i}]` : \"0.0\"},\\n\\\n            ${applyContrast ? `u_dayTextureContrast[${i}]` : \"0.0\"},\\n\\\n            ${applyHue ? `u_dayTextureHue[${i}]` : \"0.0\"},\\n\\\n            ${applySaturation ? `u_dayTextureSaturation[${i}]` : \"0.0\"},\\n\\\n            ${applyGamma ? `u_dayTextureOneOverGamma[${i}]` : \"0.0\"},\\n\\\n            ${applySplit ? `u_dayTextureSplit[${i}]` : \"0.0\"},\\n\\\n            ${colorToAlpha ? `u_colorsToAlpha[${i}]` : \"vec4(0.0)\"},\\n\\\n            nightBlend\\);\\n`;\n      if (hasImageryLayerCutout) {\n        computeDayColor +=\n          \"\\\n        color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);\\n\";\n      }\n    }\n\n    computeDayColor +=\n      \"\\\n        return color;\\n\\\n    }\";\n\n    fs.sources.push(computeDayColor);\n\n    vs.sources.push(getPositionMode(sceneMode));\n    vs.sources.push(get2DYPositionFraction(useWebMercatorProjection));\n\n    const shader = ShaderProgram.fromCache({\n      context: frameState.context,\n      vertexShaderSource: vs,\n      fragmentShaderSource: fs,\n      attributeLocations: terrainEncoding.getAttributeLocations(),\n    });\n\n    surfaceShader = shadersByFlags[flags] = new GlobeSurfaceShader(\n      numberOfDayTextures,\n      flags,\n      this.material,\n      shader,\n      currentClippingShaderState,\n      currentClippingPolygonsShaderState,\n    );\n  }\n\n  surfaceTile.surfaceShader = surfaceShader;\n  return surfaceShader.shaderProgram;\n};\n\nGlobeSurfaceShaderSet.prototype.destroy = function () {\n  let flags;\n  let shader;\n\n  const shadersByTexturesFlags = this._shadersByTexturesFlags;\n  for (const textureCount in shadersByTexturesFlags) {\n    if (shadersByTexturesFlags.hasOwnProperty(textureCount)) {\n      const shadersByFlags = shadersByTexturesFlags[textureCount];\n      if (!defined(shadersByFlags)) {\n        continue;\n      }\n\n      for (flags in shadersByFlags) {\n        if (shadersByFlags.hasOwnProperty(flags)) {\n          shader = shadersByFlags[flags];\n          if (defined(shader)) {\n            shader.shaderProgram.destroy();\n          }\n        }\n      }\n    }\n  }\n\n  return destroyObject(this);\n};\nexport default GlobeSurfaceShaderSet;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport defined from \"../Core/defined.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestState from \"../Core/RequestState.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport ImageryState from \"./ImageryState.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport TerrainState from \"./TerrainState.js\";\n\n/**\n * Contains additional information about a {@link QuadtreeTile} of the globe's surface, and\n * encapsulates state transition logic for loading tiles.\n *\n * @constructor\n * @alias GlobeSurfaceTile\n * @private\n */\nfunction GlobeSurfaceTile() {\n  /**\n   * The {@link TileImagery} attached to this tile.\n   * @type {TileImagery[]}\n   * @default []\n   */\n  this.imagery = [];\n\n  this.waterMaskTexture = undefined;\n  this.waterMaskTranslationAndScale = new Cartesian4(0.0, 0.0, 1.0, 1.0);\n\n  this.terrainData = undefined;\n  this.vertexArray = undefined;\n\n  /**\n   * A bounding region used to estimate distance to the tile. The horizontal bounds are always tight-fitting,\n   * but the `minimumHeight` and `maximumHeight` properties may be derived from the min/max of an ancestor tile\n   * and be quite loose-fitting and thus very poor for estimating distance.\n   * @type {TileBoundingRegion}\n   */\n  this.tileBoundingRegion = undefined;\n  this.occludeePointInScaledSpace = new Cartesian3();\n  this.boundingVolumeSourceTile = undefined;\n  this.boundingVolumeIsFromMesh = false;\n\n  this.terrainState = TerrainState.UNLOADED;\n  this.mesh = undefined;\n  this.fill = undefined;\n\n  this.pickBoundingSphere = new BoundingSphere();\n\n  this.surfaceShader = undefined;\n  this.isClipped = true;\n\n  this.clippedByBoundaries = false;\n}\n\nObject.defineProperties(GlobeSurfaceTile.prototype, {\n  /**\n   * Gets a value indicating whether or not this tile is eligible to be unloaded.\n   * Typically, a tile is ineligible to be unloaded while an asynchronous operation,\n   * such as a request for data, is in progress on it.  A tile will never be\n   * unloaded while it is needed for rendering, regardless of the value of this\n   * property.\n   * @memberof GlobeSurfaceTile.prototype\n   * @type {boolean}\n   */\n  eligibleForUnloading: {\n    get: function () {\n      // Do not remove tiles that are transitioning or that have\n      // imagery that is transitioning.\n      const terrainState = this.terrainState;\n      const loadingIsTransitioning =\n        terrainState === TerrainState.RECEIVING ||\n        terrainState === TerrainState.TRANSFORMING;\n\n      let shouldRemoveTile = !loadingIsTransitioning;\n\n      const imagery = this.imagery;\n      for (let i = 0, len = imagery.length; shouldRemoveTile && i < len; ++i) {\n        const tileImagery = imagery[i];\n        shouldRemoveTile =\n          !defined(tileImagery.loadingImagery) ||\n          tileImagery.loadingImagery.state !== ImageryState.TRANSITIONING;\n      }\n\n      return shouldRemoveTile;\n    },\n  },\n\n  /**\n   * Gets the {@link TerrainMesh} that is used for rendering this tile, if any.\n   * Returns the value of the {@link GlobeSurfaceTile#mesh} property if\n   * {@link GlobeSurfaceTile#vertexArray} is defined. Otherwise, It returns the\n   * {@link TerrainFillMesh#mesh} property of the {@link GlobeSurfaceTile#fill}.\n   * If there is no fill, it returns undefined.\n   *\n   * @memberof GlobeSurfaceTile.prototype\n   * @type {TerrainMesh}\n   */\n  renderedMesh: {\n    get: function () {\n      if (defined(this.vertexArray)) {\n        return this.mesh;\n      } else if (defined(this.fill)) {\n        return this.fill.mesh;\n      }\n      return undefined;\n    },\n  },\n});\n\nGlobeSurfaceTile.prototype.pick = function (\n  ray,\n  mode,\n  projection,\n  cullBackFaces,\n  result,\n) {\n  if (!defined(this.renderedMesh)) {\n    return undefined;\n  }\n  const value = this.renderedMesh.pick(ray, cullBackFaces, mode, projection);\n  return Cartesian3.clone(value, result);\n};\n\nGlobeSurfaceTile.prototype.freeResources = function () {\n  if (defined(this.waterMaskTexture)) {\n    --this.waterMaskTexture.referenceCount;\n    if (this.waterMaskTexture.referenceCount === 0) {\n      this.waterMaskTexture.destroy();\n    }\n    this.waterMaskTexture = undefined;\n  }\n\n  this.terrainData = undefined;\n\n  this.terrainState = TerrainState.UNLOADED;\n  this.mesh = undefined;\n  this.fill = this.fill && this.fill.destroy();\n\n  const imageryList = this.imagery;\n  for (let i = 0, len = imageryList.length; i < len; ++i) {\n    imageryList[i].freeResources();\n  }\n  this.imagery.length = 0;\n\n  this.freeVertexArray();\n};\n\nGlobeSurfaceTile.prototype.freeVertexArray = function () {\n  GlobeSurfaceTile._freeVertexArray(this.vertexArray);\n  this.vertexArray = undefined;\n  GlobeSurfaceTile._freeVertexArray(this.wireframeVertexArray);\n  this.wireframeVertexArray = undefined;\n};\n\nGlobeSurfaceTile.initialize = function (\n  tile,\n  terrainProvider,\n  imageryLayerCollection,\n) {\n  let surfaceTile = tile.data;\n  if (!defined(surfaceTile)) {\n    surfaceTile = tile.data = new GlobeSurfaceTile();\n  }\n\n  if (tile.state === QuadtreeTileLoadState.START) {\n    prepareNewTile(tile, terrainProvider, imageryLayerCollection);\n    tile.state = QuadtreeTileLoadState.LOADING;\n  }\n};\n\nGlobeSurfaceTile.processStateMachine = function (\n  tile,\n  frameState,\n  terrainProvider,\n  imageryLayerCollection,\n  quadtree,\n  vertexArraysToDestroy,\n  terrainOnly,\n) {\n  GlobeSurfaceTile.initialize(tile, terrainProvider, imageryLayerCollection);\n\n  const surfaceTile = tile.data;\n\n  if (tile.state === QuadtreeTileLoadState.LOADING) {\n    processTerrainStateMachine(\n      tile,\n      frameState,\n      terrainProvider,\n      imageryLayerCollection,\n      quadtree,\n      vertexArraysToDestroy,\n    );\n  }\n\n  // From here down we're loading imagery, not terrain. We don't want to load imagery until\n  // we're certain that the terrain tiles are actually visible, though. We'll load terrainOnly\n  // in these scenarios:\n  //   * our bounding volume isn't accurate so we're not certain this tile is really visible (see GlobeSurfaceTileProvider#loadTile).\n  //   * we want to upsample from this tile but don't plan to render it (see processTerrainStateMachine).\n  if (terrainOnly) {\n    return;\n  }\n\n  const wasAlreadyRenderable = tile.renderable;\n\n  // The terrain is renderable as soon as we have a valid vertex array.\n  tile.renderable = defined(surfaceTile.vertexArray);\n\n  // But it's not done loading until it's in the READY state.\n  const isTerrainDoneLoading = surfaceTile.terrainState === TerrainState.READY;\n\n  // If this tile's terrain and imagery are just upsampled from its parent, mark the tile as\n  // upsampled only.  We won't refine a tile if its four children are upsampled only.\n  tile.upsampledFromParent =\n    defined(surfaceTile.terrainData) &&\n    surfaceTile.terrainData.wasCreatedByUpsampling();\n\n  const isImageryDoneLoading = surfaceTile.processImagery(\n    tile,\n    terrainProvider,\n    frameState,\n  );\n\n  if (isTerrainDoneLoading && isImageryDoneLoading) {\n    const callbacks = tile._loadedCallbacks;\n    const newCallbacks = {};\n    for (const layerId in callbacks) {\n      if (callbacks.hasOwnProperty(layerId)) {\n        if (!callbacks[layerId](tile)) {\n          newCallbacks[layerId] = callbacks[layerId];\n        }\n      }\n    }\n    tile._loadedCallbacks = newCallbacks;\n\n    tile.state = QuadtreeTileLoadState.DONE;\n  }\n\n  // Once a tile is renderable, it stays renderable, because doing otherwise would\n  // cause detail (or maybe even the entire globe) to vanish when adding a new\n  // imagery layer. `GlobeSurfaceTileProvider._onLayerAdded` sets renderable to\n  // false for all affected tiles that are not currently being rendered.\n  if (wasAlreadyRenderable) {\n    tile.renderable = true;\n  }\n};\n\nGlobeSurfaceTile.prototype.processImagery = function (\n  tile,\n  terrainProvider,\n  frameState,\n  skipLoading,\n) {\n  const surfaceTile = tile.data;\n  let isUpsampledOnly = tile.upsampledFromParent;\n  let isAnyTileLoaded = false;\n  let isDoneLoading = true;\n\n  // Transition imagery states\n  const tileImageryCollection = surfaceTile.imagery;\n  let i, len;\n  for (i = 0, len = tileImageryCollection.length; i < len; ++i) {\n    const tileImagery = tileImageryCollection[i];\n    if (!defined(tileImagery.loadingImagery)) {\n      isUpsampledOnly = false;\n      continue;\n    }\n\n    if (tileImagery.loadingImagery.state === ImageryState.PLACEHOLDER) {\n      const imageryLayer = tileImagery.loadingImagery.imageryLayer;\n      if (imageryLayer.ready) {\n        // Remove the placeholder and add the actual skeletons (if any)\n        // at the same position.  Then continue the loop at the same index.\n        tileImagery.freeResources();\n        tileImageryCollection.splice(i, 1);\n        imageryLayer._createTileImagerySkeletons(tile, terrainProvider, i);\n        --i;\n        len = tileImageryCollection.length;\n        continue;\n      } else {\n        isUpsampledOnly = false;\n      }\n    }\n\n    const thisTileDoneLoading = tileImagery.processStateMachine(\n      tile,\n      frameState,\n      skipLoading,\n    );\n    isDoneLoading = isDoneLoading && thisTileDoneLoading;\n\n    // The imagery is renderable as soon as we have any renderable imagery for this region.\n    isAnyTileLoaded =\n      isAnyTileLoaded ||\n      thisTileDoneLoading ||\n      defined(tileImagery.readyImagery);\n\n    isUpsampledOnly =\n      isUpsampledOnly &&\n      defined(tileImagery.loadingImagery) &&\n      (tileImagery.loadingImagery.state === ImageryState.FAILED ||\n        tileImagery.loadingImagery.state === ImageryState.INVALID);\n  }\n\n  tile.upsampledFromParent = isUpsampledOnly;\n\n  // Allow rendering if any available layers are loaded\n  tile.renderable = tile.renderable && (isAnyTileLoaded || isDoneLoading);\n\n  return isDoneLoading;\n};\n\nfunction toggleGeodeticSurfaceNormals(\n  surfaceTile,\n  enabled,\n  ellipsoid,\n  frameState,\n) {\n  const renderedMesh = surfaceTile.renderedMesh;\n  const vertexBuffer = renderedMesh.vertices;\n  const encoding = renderedMesh.encoding;\n  const vertexCount = vertexBuffer.length / encoding.stride;\n\n  // Calculate the new stride and generate a new buffer\n  // Clone the other encoding, toggle geodetic surface normals, then clone again to get updated stride\n  let newEncoding = TerrainEncoding.clone(encoding);\n  newEncoding.hasGeodeticSurfaceNormals = enabled;\n  newEncoding = TerrainEncoding.clone(newEncoding);\n  const newStride = newEncoding.stride;\n  const newVertexBuffer = new Float32Array(vertexCount * newStride);\n\n  if (enabled) {\n    encoding.addGeodeticSurfaceNormals(\n      vertexBuffer,\n      newVertexBuffer,\n      ellipsoid,\n    );\n  } else {\n    encoding.removeGeodeticSurfaceNormals(vertexBuffer, newVertexBuffer);\n  }\n\n  renderedMesh.vertices = newVertexBuffer;\n  renderedMesh.stride = newStride;\n\n  // delete the old vertex array (which deletes the vertex buffer attached to it), and create a new vertex array with the new vertex buffer\n  const isFill = renderedMesh !== surfaceTile.mesh;\n  if (isFill) {\n    GlobeSurfaceTile._freeVertexArray(surfaceTile.fill.vertexArray);\n    surfaceTile.fill.vertexArray = GlobeSurfaceTile._createVertexArrayForMesh(\n      frameState.context,\n      renderedMesh,\n    );\n  } else {\n    GlobeSurfaceTile._freeVertexArray(surfaceTile.vertexArray);\n    surfaceTile.vertexArray = GlobeSurfaceTile._createVertexArrayForMesh(\n      frameState.context,\n      renderedMesh,\n    );\n  }\n  GlobeSurfaceTile._freeVertexArray(surfaceTile.wireframeVertexArray);\n  surfaceTile.wireframeVertexArray = undefined;\n}\n\nGlobeSurfaceTile.prototype.addGeodeticSurfaceNormals = function (\n  ellipsoid,\n  frameState,\n) {\n  toggleGeodeticSurfaceNormals(this, true, ellipsoid, frameState);\n};\n\nGlobeSurfaceTile.prototype.removeGeodeticSurfaceNormals = function (\n  frameState,\n) {\n  toggleGeodeticSurfaceNormals(this, false, undefined, frameState);\n};\n\nGlobeSurfaceTile.prototype.updateExaggeration = function (\n  tile,\n  frameState,\n  quadtree,\n) {\n  const surfaceTile = this;\n  const mesh = surfaceTile.renderedMesh;\n  if (mesh === undefined) {\n    return;\n  }\n\n  // Check the tile's terrain encoding to see if it has been exaggerated yet\n  const exaggeration = frameState.verticalExaggeration;\n  const exaggerationRelativeHeight =\n    frameState.verticalExaggerationRelativeHeight;\n  const hasExaggerationScale = exaggeration !== 1.0;\n\n  const encoding = mesh.encoding;\n  const encodingExaggerationScaleChanged =\n    encoding.exaggeration !== exaggeration;\n  const encodingRelativeHeightChanged =\n    encoding.exaggerationRelativeHeight !== exaggerationRelativeHeight;\n  const exaggerationChanged =\n    encodingExaggerationScaleChanged || encodingRelativeHeightChanged;\n\n  if (exaggerationChanged) {\n    // Turning exaggeration scale on/off requires adding or removing geodetic surface normals\n    // Relative height only translates, so it has no effect on normals\n    if (encodingExaggerationScaleChanged) {\n      if (hasExaggerationScale && !encoding.hasGeodeticSurfaceNormals) {\n        const ellipsoid = tile.tilingScheme.ellipsoid;\n        surfaceTile.addGeodeticSurfaceNormals(ellipsoid, frameState);\n      } else if (!hasExaggerationScale && encoding.hasGeodeticSurfaceNormals) {\n        surfaceTile.removeGeodeticSurfaceNormals(frameState);\n      }\n    }\n\n    encoding.exaggeration = exaggeration;\n    encoding.exaggerationRelativeHeight = exaggerationRelativeHeight;\n\n    // Notify the quadtree that this tile's height has changed\n    if (quadtree !== undefined) {\n      quadtree._tileToUpdateHeights.push(tile);\n      const customData = tile.customData;\n      for (const data of customData) {\n        // Restart the level so that a height update is triggered\n        data.level = -1;\n      }\n    }\n\n    mesh.updateExaggeration(exaggeration, exaggerationRelativeHeight);\n  }\n};\n\nGlobeSurfaceTile.prototype.updateSceneMode = function (mode) {\n  const surfaceTile = this;\n  const mesh = surfaceTile.renderedMesh;\n  if (mesh === undefined) {\n    return;\n  }\n\n  mesh.updateSceneMode(mode);\n};\n\nfunction prepareNewTile(tile, terrainProvider, imageryLayerCollection) {\n  let available = terrainProvider.getTileDataAvailable(\n    tile.x,\n    tile.y,\n    tile.level,\n  );\n\n  if (!defined(available) && defined(tile.parent)) {\n    // Provider doesn't know if this tile is available. Does the parent tile know?\n    const parent = tile.parent;\n    const parentSurfaceTile = parent.data;\n    if (defined(parentSurfaceTile) && defined(parentSurfaceTile.terrainData)) {\n      available = parentSurfaceTile.terrainData.isChildAvailable(\n        parent.x,\n        parent.y,\n        tile.x,\n        tile.y,\n      );\n    }\n  }\n\n  if (available === false) {\n    // This tile is not available, so mark it failed so we start upsampling right away.\n    tile.data.terrainState = TerrainState.FAILED;\n  }\n\n  // Map imagery tiles to this terrain tile\n  for (let i = 0, len = imageryLayerCollection.length; i < len; ++i) {\n    const layer = imageryLayerCollection.get(i);\n    if (layer.show) {\n      layer._createTileImagerySkeletons(tile, terrainProvider);\n    }\n  }\n}\n\nfunction processTerrainStateMachine(\n  tile,\n  frameState,\n  terrainProvider,\n  imageryLayerCollection,\n  quadtree,\n  vertexArraysToDestroy,\n) {\n  const surfaceTile = tile.data;\n\n  // If this tile is FAILED, we'll need to upsample from the parent. If the parent isn't\n  // ready for that, let's push it along.\n  const parent = tile.parent;\n  if (\n    surfaceTile.terrainState === TerrainState.FAILED &&\n    parent !== undefined\n  ) {\n    const parentReady =\n      parent.data !== undefined &&\n      parent.data.terrainData !== undefined &&\n      parent.data.terrainData.canUpsample !== false;\n    if (!parentReady) {\n      GlobeSurfaceTile.processStateMachine(\n        parent,\n        frameState,\n        terrainProvider,\n        imageryLayerCollection,\n        quadtree,\n        vertexArraysToDestroy,\n        true,\n      );\n    }\n  }\n\n  if (surfaceTile.terrainState === TerrainState.FAILED) {\n    upsample(\n      surfaceTile,\n      tile,\n      frameState,\n      terrainProvider,\n      tile.x,\n      tile.y,\n      tile.level,\n    );\n  }\n\n  if (surfaceTile.terrainState === TerrainState.UNLOADED) {\n    requestTileGeometry(\n      surfaceTile,\n      terrainProvider,\n      tile.x,\n      tile.y,\n      tile.level,\n    );\n  }\n\n  if (surfaceTile.terrainState === TerrainState.RECEIVED) {\n    transform(\n      surfaceTile,\n      frameState,\n      terrainProvider,\n      tile.x,\n      tile.y,\n      tile.level,\n    );\n  }\n\n  if (surfaceTile.terrainState === TerrainState.TRANSFORMED) {\n    createResources(\n      surfaceTile,\n      frameState.context,\n      terrainProvider,\n      tile.x,\n      tile.y,\n      tile.level,\n      vertexArraysToDestroy,\n    );\n\n    // Update the tile's exaggeration in case the globe's exaggeration changed while the tile was being processed\n    surfaceTile.updateExaggeration(tile, frameState, quadtree);\n  }\n\n  if (\n    surfaceTile.terrainState >= TerrainState.RECEIVED &&\n    surfaceTile.waterMaskTexture === undefined &&\n    terrainProvider.hasWaterMask\n  ) {\n    const terrainData = surfaceTile.terrainData;\n    if (terrainData.waterMask !== undefined) {\n      createWaterMaskTextureIfNeeded(frameState.context, surfaceTile);\n    } else {\n      const sourceTile = surfaceTile._findAncestorTileWithTerrainData(tile);\n      if (defined(sourceTile) && defined(sourceTile.data.waterMaskTexture)) {\n        surfaceTile.waterMaskTexture = sourceTile.data.waterMaskTexture;\n        ++surfaceTile.waterMaskTexture.referenceCount;\n        surfaceTile._computeWaterMaskTranslationAndScale(\n          tile,\n          sourceTile,\n          surfaceTile.waterMaskTranslationAndScale,\n        );\n      }\n    }\n  }\n}\n\nfunction upsample(surfaceTile, tile, frameState, terrainProvider, x, y, level) {\n  const parent = tile.parent;\n  if (!parent) {\n    // Trying to upsample from a root tile. No can do. This tile is a failure.\n    tile.state = QuadtreeTileLoadState.FAILED;\n    return;\n  }\n\n  const sourceData = parent.data.terrainData;\n  const sourceX = parent.x;\n  const sourceY = parent.y;\n  const sourceLevel = parent.level;\n\n  if (!defined(sourceData)) {\n    // Parent is not available, so we can't upsample this tile yet.\n    return;\n  }\n\n  const terrainDataPromise = sourceData.upsample(\n    terrainProvider.tilingScheme,\n    sourceX,\n    sourceY,\n    sourceLevel,\n    x,\n    y,\n    level,\n  );\n  if (!defined(terrainDataPromise)) {\n    // The upsample request has been deferred - try again later.\n    return;\n  }\n\n  surfaceTile.terrainState = TerrainState.RECEIVING;\n\n  Promise.resolve(terrainDataPromise)\n    .then(function (terrainData) {\n      if (!defined(terrainData)) {\n        // The upsample request has been deferred - try again later.\n        return;\n      }\n\n      surfaceTile.terrainData = terrainData;\n      surfaceTile.terrainState = TerrainState.RECEIVED;\n    })\n    .catch(function () {\n      surfaceTile.terrainState = TerrainState.FAILED;\n    });\n}\n\nfunction requestTileGeometry(surfaceTile, terrainProvider, x, y, level) {\n  function success(terrainData) {\n    if (!defined(terrainData)) {\n      // Throttled due to low priority - try again later.\n      surfaceTile.terrainState = TerrainState.UNLOADED;\n      surfaceTile.request = undefined;\n      return;\n    }\n\n    surfaceTile.terrainData = terrainData;\n    surfaceTile.terrainState = TerrainState.RECEIVED;\n    surfaceTile.request = undefined;\n  }\n\n  function failure(error) {\n    if (surfaceTile.request.state === RequestState.CANCELLED) {\n      // Cancelled due to low priority - try again later.\n      surfaceTile.terrainData = undefined;\n      surfaceTile.terrainState = TerrainState.UNLOADED;\n      surfaceTile.request = undefined;\n      return;\n    }\n\n    // Initially assume failure.  reportError may retry, in which case the state will\n    // change to RECEIVING or UNLOADED.\n    surfaceTile.terrainState = TerrainState.FAILED;\n    surfaceTile.request = undefined;\n\n    const message = `Failed to obtain terrain tile X: ${x} Y: ${y} Level: ${level}. Error message: \"${error}\"`;\n    terrainProvider._requestError = TileProviderError.reportError(\n      terrainProvider._requestError,\n      terrainProvider,\n      terrainProvider.errorEvent,\n      message,\n      x,\n      y,\n      level,\n    );\n    if (terrainProvider._requestError.retry) {\n      doRequest();\n    }\n  }\n\n  function doRequest() {\n    // Request the terrain from the terrain provider.\n    const request = new Request({\n      throttle: false,\n      throttleByServer: true,\n      type: RequestType.TERRAIN,\n    });\n    surfaceTile.request = request;\n\n    const requestPromise = terrainProvider.requestTileGeometry(\n      x,\n      y,\n      level,\n      request,\n    );\n\n    // If the request method returns undefined (instead of a promise), the request\n    // has been deferred.\n    if (defined(requestPromise)) {\n      surfaceTile.terrainState = TerrainState.RECEIVING;\n      Promise.resolve(requestPromise)\n        .then(function (terrainData) {\n          success(terrainData);\n        })\n        .catch(function (e) {\n          failure(e);\n        });\n    } else {\n      // Deferred - try again later.\n      surfaceTile.terrainState = TerrainState.UNLOADED;\n      surfaceTile.request = undefined;\n    }\n  }\n\n  doRequest();\n}\n\nconst scratchCreateMeshOptions = {\n  tilingScheme: undefined,\n  x: 0,\n  y: 0,\n  level: 0,\n  exaggeration: 1.0,\n  exaggerationRelativeHeight: 0.0,\n  throttle: true,\n};\n\nfunction transform(surfaceTile, frameState, terrainProvider, x, y, level) {\n  const tilingScheme = terrainProvider.tilingScheme;\n\n  const createMeshOptions = scratchCreateMeshOptions;\n  createMeshOptions.tilingScheme = tilingScheme;\n  createMeshOptions.x = x;\n  createMeshOptions.y = y;\n  createMeshOptions.level = level;\n  createMeshOptions.exaggeration = frameState.verticalExaggeration;\n  createMeshOptions.exaggerationRelativeHeight =\n    frameState.verticalExaggerationRelativeHeight;\n  createMeshOptions.throttle = true;\n\n  const terrainData = surfaceTile.terrainData;\n  const meshPromise = terrainData.createMesh(createMeshOptions);\n\n  if (!defined(meshPromise)) {\n    // Postponed.\n    return;\n  }\n\n  surfaceTile.terrainState = TerrainState.TRANSFORMING;\n\n  Promise.resolve(meshPromise)\n    .then(function (mesh) {\n      surfaceTile.mesh = mesh;\n      surfaceTile.terrainState = TerrainState.TRANSFORMED;\n    })\n    .catch(function () {\n      surfaceTile.terrainState = TerrainState.FAILED;\n    });\n}\n\nGlobeSurfaceTile._createVertexArrayForMesh = function (context, mesh) {\n  const typedArray = mesh.vertices;\n  const buffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: typedArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const attributes = mesh.encoding.getAttributes(buffer);\n\n  const indexBuffers = mesh.indices.indexBuffers || {};\n  let indexBuffer = indexBuffers[context.id];\n  if (!defined(indexBuffer) || indexBuffer.isDestroyed()) {\n    const indices = mesh.indices;\n    indexBuffer = Buffer.createIndexBuffer({\n      context: context,\n      typedArray: indices,\n      usage: BufferUsage.STATIC_DRAW,\n      indexDatatype: IndexDatatype.fromSizeInBytes(indices.BYTES_PER_ELEMENT),\n    });\n    indexBuffer.vertexArrayDestroyable = false;\n    indexBuffer.referenceCount = 1;\n    indexBuffers[context.id] = indexBuffer;\n    mesh.indices.indexBuffers = indexBuffers;\n  } else {\n    ++indexBuffer.referenceCount;\n  }\n\n  return new VertexArray({\n    context: context,\n    attributes: attributes,\n    indexBuffer: indexBuffer,\n  });\n};\n\nGlobeSurfaceTile._freeVertexArray = function (vertexArray) {\n  if (defined(vertexArray)) {\n    const indexBuffer = vertexArray.indexBuffer;\n\n    if (!vertexArray.isDestroyed()) {\n      vertexArray.destroy();\n    }\n\n    if (\n      defined(indexBuffer) &&\n      !indexBuffer.isDestroyed() &&\n      defined(indexBuffer.referenceCount)\n    ) {\n      --indexBuffer.referenceCount;\n      if (indexBuffer.referenceCount === 0) {\n        indexBuffer.destroy();\n      }\n    }\n  }\n};\n\nfunction createResources(\n  surfaceTile,\n  context,\n  terrainProvider,\n  x,\n  y,\n  level,\n  vertexArraysToDestroy,\n) {\n  surfaceTile.vertexArray = GlobeSurfaceTile._createVertexArrayForMesh(\n    context,\n    surfaceTile.mesh,\n  );\n  surfaceTile.terrainState = TerrainState.READY;\n  surfaceTile.fill =\n    surfaceTile.fill && surfaceTile.fill.destroy(vertexArraysToDestroy);\n}\n\nfunction getContextWaterMaskData(context) {\n  let data = context.cache.tile_waterMaskData;\n\n  if (!defined(data)) {\n    const allWaterTexture = Texture.create({\n      context: context,\n      pixelFormat: PixelFormat.LUMINANCE,\n      pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n      source: {\n        arrayBufferView: new Uint8Array([255]),\n        width: 1,\n        height: 1,\n      },\n    });\n    allWaterTexture.referenceCount = 1;\n\n    const sampler = new Sampler({\n      wrapS: TextureWrap.CLAMP_TO_EDGE,\n      wrapT: TextureWrap.CLAMP_TO_EDGE,\n      minificationFilter: TextureMinificationFilter.LINEAR,\n      magnificationFilter: TextureMagnificationFilter.LINEAR,\n    });\n\n    data = {\n      allWaterTexture: allWaterTexture,\n      sampler: sampler,\n      destroy: function () {\n        this.allWaterTexture.destroy();\n      },\n    };\n\n    context.cache.tile_waterMaskData = data;\n  }\n\n  return data;\n}\n\nfunction createWaterMaskTextureIfNeeded(context, surfaceTile) {\n  const waterMask = surfaceTile.terrainData.waterMask;\n  const waterMaskData = getContextWaterMaskData(context);\n  let texture;\n\n  const waterMaskLength = waterMask.length;\n  if (waterMask instanceof ImageBitmap) {\n    texture = Texture.create({\n      context: context,\n      source: waterMask,\n      sampler: waterMaskData.sampler,\n      flipY: false,\n      skipColorSpaceConversion: true,\n    });\n  } else if (waterMaskLength === 1) {\n    // Length 1 means the tile is entirely land or entirely water.\n    // A value of 0 indicates entirely land, a value of 1 indicates entirely water.\n    if (waterMask[0] !== 0) {\n      texture = waterMaskData.allWaterTexture;\n    } else {\n      // Leave the texture undefined if the tile is entirely land.\n      return;\n    }\n  } else {\n    const textureSize = Math.sqrt(waterMaskLength);\n    texture = Texture.create({\n      context: context,\n      pixelFormat: PixelFormat.LUMINANCE,\n      pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n      source: {\n        width: textureSize,\n        height: textureSize,\n        arrayBufferView: waterMask,\n      },\n      sampler: waterMaskData.sampler,\n      flipY: false,\n    });\n\n    texture.referenceCount = 0;\n  }\n\n  ++texture.referenceCount;\n  surfaceTile.waterMaskTexture = texture;\n\n  Cartesian4.fromElements(\n    0.0,\n    0.0,\n    1.0,\n    1.0,\n    surfaceTile.waterMaskTranslationAndScale,\n  );\n}\n\nGlobeSurfaceTile.prototype._findAncestorTileWithTerrainData = function (tile) {\n  let sourceTile = tile.parent;\n\n  while (\n    defined(sourceTile) &&\n    (!defined(sourceTile.data) ||\n      !defined(sourceTile.data.terrainData) ||\n      sourceTile.data.terrainData.wasCreatedByUpsampling())\n  ) {\n    sourceTile = sourceTile.parent;\n  }\n\n  return sourceTile;\n};\n\nGlobeSurfaceTile.prototype._computeWaterMaskTranslationAndScale = function (\n  tile,\n  sourceTile,\n  result,\n) {\n  const sourceTileRectangle = sourceTile.rectangle;\n  const tileRectangle = tile.rectangle;\n  const tileWidth = tileRectangle.width;\n  const tileHeight = tileRectangle.height;\n\n  const scaleX = tileWidth / sourceTileRectangle.width;\n  const scaleY = tileHeight / sourceTileRectangle.height;\n  result.x =\n    (scaleX * (tileRectangle.west - sourceTileRectangle.west)) / tileWidth;\n  result.y =\n    (scaleY * (tileRectangle.south - sourceTileRectangle.south)) / tileHeight;\n  result.z = scaleX;\n  result.w = scaleY;\n\n  return result;\n};\nexport default GlobeSurfaceTile;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport combine from \"../Core/combine.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport SphereOutlineGeometry from \"../Core/SphereOutlineGeometry.js\";\nimport VerticalExaggeration from \"../Core/VerticalExaggeration.js\";\nimport TerrainQuantization from \"../Core/TerrainQuantization.js\";\nimport Visibility from \"../Core/Visibility.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport ClippingPolygonCollection from \"./ClippingPolygonCollection.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport GlobeSurfaceTile from \"./GlobeSurfaceTile.js\";\nimport ImageryLayer from \"./ImageryLayer.js\";\nimport ImageryState from \"./ImageryState.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\nimport TerrainFillMesh from \"./TerrainFillMesh.js\";\nimport TerrainState from \"./TerrainState.js\";\nimport TileBoundingRegion from \"./TileBoundingRegion.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\n/**\n * Provides quadtree tiles representing the surface of the globe.  This type is intended to be used\n * with {@link QuadtreePrimitive}.\n *\n * @alias GlobeSurfaceTileProvider\n * @constructor\n *\n * @param {TerrainProvider} options.terrainProvider The terrain provider that describes the surface geometry.\n * @param {ImageryLayerCollection} option.imageryLayers The collection of imagery layers describing the shading of the surface.\n * @param {GlobeSurfaceShaderSet} options.surfaceShaderSet The set of shaders used to render the surface.\n *\n * @private\n */\nfunction GlobeSurfaceTileProvider(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options)) {\n    throw new DeveloperError(\"options is required.\");\n  }\n  if (!defined(options.terrainProvider)) {\n    throw new DeveloperError(\"options.terrainProvider is required.\");\n  } else if (!defined(options.imageryLayers)) {\n    throw new DeveloperError(\"options.imageryLayers is required.\");\n  } else if (!defined(options.surfaceShaderSet)) {\n    throw new DeveloperError(\"options.surfaceShaderSet is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this.lightingFadeOutDistance = 6500000.0;\n  this.lightingFadeInDistance = 9000000.0;\n  this.hasWaterMask = false;\n  this.showWaterEffect = false;\n  this.oceanNormalMap = undefined;\n  this.zoomedOutOceanSpecularIntensity = 0.5;\n  this.enableLighting = false;\n  this.dynamicAtmosphereLighting = false;\n  this.dynamicAtmosphereLightingFromSun = false;\n  this.showGroundAtmosphere = false;\n  this.shadows = ShadowMode.RECEIVE_ONLY;\n  this.vertexShadowDarkness = 0.3;\n\n  /**\n   * The color to use to highlight terrain fill tiles. If undefined, fill tiles are not\n   * highlighted at all. The alpha value is used to alpha blend with the tile's\n   * actual color. Because terrain fill tiles do not represent the actual terrain surface,\n   * it may be useful in some applications to indicate visually that they are not to be trusted.\n   * @type {Color}\n   * @default undefined\n   */\n  this.fillHighlightColor = undefined;\n\n  this.hueShift = 0.0;\n  this.saturationShift = 0.0;\n  this.brightnessShift = 0.0;\n\n  this.showSkirts = true;\n  this.backFaceCulling = true;\n  this.undergroundColor = undefined;\n  this.undergroundColorAlphaByDistance = undefined;\n\n  this.lambertDiffuseMultiplier = 0.0;\n\n  this.materialUniformMap = undefined;\n  this._materialUniformMap = undefined;\n\n  this._quadtree = undefined;\n  this._terrainProvider = options.terrainProvider;\n  this._imageryLayers = options.imageryLayers;\n  this._surfaceShaderSet = options.surfaceShaderSet;\n\n  this._renderState = undefined;\n  this._blendRenderState = undefined;\n  this._disableCullingRenderState = undefined;\n  this._disableCullingBlendRenderState = undefined;\n\n  this._errorEvent = new Event();\n\n  this._removeLayerAddedListener =\n    this._imageryLayers.layerAdded.addEventListener(\n      GlobeSurfaceTileProvider.prototype._onLayerAdded,\n      this,\n    );\n  this._removeLayerRemovedListener =\n    this._imageryLayers.layerRemoved.addEventListener(\n      GlobeSurfaceTileProvider.prototype._onLayerRemoved,\n      this,\n    );\n  this._removeLayerMovedListener =\n    this._imageryLayers.layerMoved.addEventListener(\n      GlobeSurfaceTileProvider.prototype._onLayerMoved,\n      this,\n    );\n  this._removeLayerShownListener =\n    this._imageryLayers.layerShownOrHidden.addEventListener(\n      GlobeSurfaceTileProvider.prototype._onLayerShownOrHidden,\n      this,\n    );\n  this._imageryLayersUpdatedEvent = new Event();\n\n  this._layerOrderChanged = false;\n\n  this._tilesToRenderByTextureCount = [];\n  this._drawCommands = [];\n  this._uniformMaps = [];\n  this._usedDrawCommands = 0;\n\n  this._vertexArraysToDestroy = [];\n\n  this._debug = {\n    wireframe: false,\n    boundingSphereTile: undefined,\n  };\n\n  this._baseColor = undefined;\n  this._firstPassInitialColor = undefined;\n  this.baseColor = new Color(0.0, 0.0, 0.5, 1.0);\n\n  /**\n   * A property specifying a {@link ClippingPlaneCollection} used to selectively disable rendering on the outside of each plane.\n   * @type {ClippingPlaneCollection}\n   * @private\n   */\n  this._clippingPlanes = undefined;\n\n  /**\n   * A property specifying a {@link ClippingPolygonCollection} used to selectively disable rendering inside or outside a list of polygons.\n   * @type {ClippingPolygonCollection}\n   * @private\n   */\n  this._clippingPolygons = undefined;\n\n  /**\n   * A property specifying a {@link Rectangle} used to selectively limit terrain and imagery rendering.\n   * @type {Rectangle}\n   */\n  this.cartographicLimitRectangle = Rectangle.clone(Rectangle.MAX_VALUE);\n\n  this._hasLoadedTilesThisFrame = false;\n  this._hasFillTilesThisFrame = false;\n\n  this._oldVerticalExaggeration = undefined;\n  this._oldVerticalExaggerationRelativeHeight = undefined;\n  this._oldSceneMode = SceneMode.SCENE3D;\n}\n\nObject.defineProperties(GlobeSurfaceTileProvider.prototype, {\n  /**\n   * Gets or sets the color of the globe when no imagery is available.\n   * @memberof GlobeSurfaceTileProvider.prototype\n   * @type {Color}\n   */\n  baseColor: {\n    get: function () {\n      return this._baseColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      this._baseColor = value;\n      this._firstPassInitialColor = Cartesian4.fromColor(\n        value,\n        this._firstPassInitialColor,\n      );\n    },\n  },\n  /**\n   * Gets or sets the {@link QuadtreePrimitive} for which this provider is\n   * providing tiles.  This property may be undefined if the provider is not yet associated\n   * with a {@link QuadtreePrimitive}.\n   * @memberof GlobeSurfaceTileProvider.prototype\n   * @type {QuadtreePrimitive}\n   */\n  quadtree: {\n    get: function () {\n      return this._quadtree;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      this._quadtree = value;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof GlobeSurfaceTileProvider.prototype\n   * @type {TilingScheme}\n   */\n  tilingScheme: {\n    get: function () {\n      if (!defined(this._terrainProvider)) {\n        return undefined;\n      }\n\n      return this._terrainProvider.tilingScheme;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the geometry provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof GlobeSurfaceTileProvider.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when an imagery layer is added, shown, hidden, moved, or removed.\n   * @memberof GlobeSurfaceTileProvider.prototype\n   * @type {Event}\n   */\n  imageryLayersUpdatedEvent: {\n    get: function () {\n      return this._imageryLayersUpdatedEvent;\n    },\n  },\n\n  /**\n   * Gets or sets the terrain provider that describes the surface geometry.\n   * @memberof GlobeSurfaceTileProvider.prototype\n   * @type {TerrainProvider}\n   */\n  terrainProvider: {\n    get: function () {\n      return this._terrainProvider;\n    },\n    set: function (terrainProvider) {\n      if (this._terrainProvider === terrainProvider) {\n        return;\n      }\n\n      this._terrainProvider = terrainProvider;\n\n      if (defined(this._quadtree)) {\n        this._quadtree.invalidateAllTiles();\n      }\n    },\n  },\n  /**\n   * The {@link ClippingPlaneCollection} used to selectively disable rendering.\n   *\n   * @type {ClippingPlaneCollection}\n   *\n   * @private\n   */\n  clippingPlanes: {\n    get: function () {\n      return this._clippingPlanes;\n    },\n    set: function (value) {\n      ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n    },\n  },\n\n  /**\n   * The {@link ClippingPolygonCollection} used to selectively disable rendering inside or outside a list of polygons.\n   *\n   * @type {ClippingPolygonCollection}\n   *\n   * @private\n   */\n  clippingPolygons: {\n    get: function () {\n      return this._clippingPolygons;\n    },\n    set: function (value) {\n      ClippingPolygonCollection.setOwner(value, this, \"_clippingPolygons\");\n    },\n  },\n});\n\nfunction sortTileImageryByLayerIndex(a, b) {\n  let aImagery = a.loadingImagery;\n  if (!defined(aImagery)) {\n    aImagery = a.readyImagery;\n  }\n\n  let bImagery = b.loadingImagery;\n  if (!defined(bImagery)) {\n    bImagery = b.readyImagery;\n  }\n\n  return aImagery.imageryLayer._layerIndex - bImagery.imageryLayer._layerIndex;\n}\n\n/**\n * Make updates to the tile provider that are not involved in rendering. Called before the render update cycle.\n */\nGlobeSurfaceTileProvider.prototype.update = function (frameState) {\n  // update collection: imagery indices, base layers, raise layer show/hide event\n  this._imageryLayers._update();\n};\n\nfunction updateCredits(surface, frameState) {\n  const creditDisplay = frameState.creditDisplay;\n  const terrainProvider = surface._terrainProvider;\n  if (defined(terrainProvider) && defined(terrainProvider.credit)) {\n    creditDisplay.addCreditToNextFrame(terrainProvider.credit);\n  }\n\n  const imageryLayers = surface._imageryLayers;\n  for (let i = 0, len = imageryLayers.length; i < len; ++i) {\n    const layer = imageryLayers.get(i);\n    if (layer.ready && layer.show && defined(layer.imageryProvider.credit)) {\n      creditDisplay.addCreditToNextFrame(layer.imageryProvider.credit);\n    }\n  }\n}\n\n/**\n * Called at the beginning of each render frame, before {@link QuadtreeTileProvider#showTileThisFrame}\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.initialize = function (frameState) {\n  // update each layer for texture reprojection.\n  this._imageryLayers.queueReprojectionCommands(frameState);\n\n  if (this._layerOrderChanged) {\n    this._layerOrderChanged = false;\n\n    // Sort the TileImagery instances in each tile by the layer index.\n    this._quadtree.forEachLoadedTile(function (tile) {\n      tile.data.imagery.sort(sortTileImageryByLayerIndex);\n    });\n  }\n\n  // Add credits for terrain and imagery providers.\n  updateCredits(this, frameState);\n\n  const vertexArraysToDestroy = this._vertexArraysToDestroy;\n  const length = vertexArraysToDestroy.length;\n  for (let j = 0; j < length; ++j) {\n    GlobeSurfaceTile._freeVertexArray(vertexArraysToDestroy[j]);\n  }\n  vertexArraysToDestroy.length = 0;\n};\n\n/**\n * Called at the beginning of the update cycle for each render frame, before {@link QuadtreeTileProvider#showTileThisFrame}\n * or any other functions.\n *\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.beginUpdate = function (frameState) {\n  const tilesToRenderByTextureCount = this._tilesToRenderByTextureCount;\n  for (let i = 0, len = tilesToRenderByTextureCount.length; i < len; ++i) {\n    const tiles = tilesToRenderByTextureCount[i];\n    if (defined(tiles)) {\n      tiles.length = 0;\n    }\n  }\n  // update clipping planes\n  const clippingPlanes = this._clippingPlanes;\n  if (defined(clippingPlanes) && clippingPlanes.enabled) {\n    clippingPlanes.update(frameState);\n  }\n\n  // update clipping polygons\n  const clippingPolygons = this._clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.enabled) {\n    clippingPolygons.update(frameState);\n    clippingPolygons.queueCommands(frameState);\n  }\n\n  this._usedDrawCommands = 0;\n\n  this._hasLoadedTilesThisFrame = false;\n  this._hasFillTilesThisFrame = false;\n};\n\n/**\n * Called at the end of the update cycle for each render frame, after {@link QuadtreeTileProvider#showTileThisFrame}\n * and any other functions.\n *\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.endUpdate = function (frameState) {\n  if (!defined(this._renderState)) {\n    this._renderState = RenderState.fromCache({\n      // Write color and depth\n      cull: {\n        enabled: true,\n      },\n      depthTest: {\n        enabled: true,\n        func: DepthFunction.LESS,\n      },\n    });\n\n    this._blendRenderState = RenderState.fromCache({\n      // Write color and depth\n      cull: {\n        enabled: true,\n      },\n      depthTest: {\n        enabled: true,\n        func: DepthFunction.LESS_OR_EQUAL,\n      },\n      blending: BlendingState.ALPHA_BLEND,\n    });\n\n    let rs = clone(this._renderState, true);\n    rs.cull.enabled = false;\n    this._disableCullingRenderState = RenderState.fromCache(rs);\n\n    rs = clone(this._blendRenderState, true);\n    rs.cull.enabled = false;\n    this._disableCullingBlendRenderState = RenderState.fromCache(rs);\n  }\n\n  // If this frame has a mix of loaded and fill tiles, we need to propagate\n  // loaded heights to the fill tiles.\n  if (this._hasFillTilesThisFrame && this._hasLoadedTilesThisFrame) {\n    TerrainFillMesh.updateFillTiles(\n      this,\n      this._quadtree._tilesToRender,\n      frameState,\n      this._vertexArraysToDestroy,\n    );\n  }\n\n  // When vertical exaggeration changes, all of the loaded tiles need to generate\n  // geodetic surface normals so they can scale properly when rendered.\n  // When exaggeration is reset, geodetic surface normals are removed to decrease\n  // memory usage. Some tiles might have been constructed with the correct\n  // exaggeration already, so skip over them.\n\n  // If the geodetic surface normals can't be created because the tile doesn't\n  // have a mesh, keep checking until the tile does have a mesh. This can happen\n  // if the tile's mesh starts construction in a worker thread right before the\n  // exaggeration changes.\n\n  const quadtree = this.quadtree;\n  const exaggeration = frameState.verticalExaggeration;\n  const exaggerationRelativeHeight =\n    frameState.verticalExaggerationRelativeHeight;\n  const exaggerationChanged =\n    this._oldVerticalExaggeration !== exaggeration ||\n    this._oldVerticalExaggerationRelativeHeight !== exaggerationRelativeHeight;\n\n  // Keep track of the next time there is a change in exaggeration\n  this._oldVerticalExaggeration = exaggeration;\n  this._oldVerticalExaggerationRelativeHeight = exaggerationRelativeHeight;\n\n  if (exaggerationChanged) {\n    quadtree.forEachLoadedTile(function (tile) {\n      const surfaceTile = tile.data;\n      surfaceTile.updateExaggeration(tile, frameState, quadtree);\n    });\n  }\n\n  const sceneModeChanged = this._oldSceneMode !== frameState.mode;\n  this._oldSceneMode = frameState.mode;\n\n  if (sceneModeChanged) {\n    quadtree.forEachLoadedTile(function (tile) {\n      const surfaceTile = tile.data;\n      surfaceTile.updateSceneMode(frameState.mode);\n    });\n  }\n\n  // Add the tile render commands to the command list, sorted by texture count.\n  const tilesToRenderByTextureCount = this._tilesToRenderByTextureCount;\n  for (\n    let textureCountIndex = 0,\n      textureCountLength = tilesToRenderByTextureCount.length;\n    textureCountIndex < textureCountLength;\n    ++textureCountIndex\n  ) {\n    const tilesToRender = tilesToRenderByTextureCount[textureCountIndex];\n    if (!defined(tilesToRender)) {\n      continue;\n    }\n\n    for (\n      let tileIndex = 0, tileLength = tilesToRender.length;\n      tileIndex < tileLength;\n      ++tileIndex\n    ) {\n      const tile = tilesToRender[tileIndex];\n      const tileBoundingRegion = tile.data.tileBoundingRegion;\n      addDrawCommandsForTile(this, tile, frameState);\n      frameState.minimumTerrainHeight = Math.min(\n        frameState.minimumTerrainHeight,\n        tileBoundingRegion.minimumHeight,\n      );\n    }\n  }\n};\n\nfunction pushCommand(command, frameState) {\n  const globeTranslucencyState = frameState.globeTranslucencyState;\n  if (globeTranslucencyState.translucent) {\n    const isBlendCommand = command.renderState.blending.enabled;\n    globeTranslucencyState.pushDerivedCommands(\n      command,\n      isBlendCommand,\n      frameState,\n    );\n  } else {\n    frameState.commandList.push(command);\n  }\n}\n\n/**\n * Adds draw commands for tiles rendered in the previous frame for a pick pass.\n *\n * @param {FrameState} frameState The frame state.\n */\nGlobeSurfaceTileProvider.prototype.updateForPick = function (frameState) {\n  // Add the tile pick commands from the tiles drawn last frame.\n  const drawCommands = this._drawCommands;\n  for (let i = 0, length = this._usedDrawCommands; i < length; ++i) {\n    pushCommand(drawCommands[i], frameState);\n  }\n};\n\n/**\n * Cancels any imagery re-projections in the queue.\n */\nGlobeSurfaceTileProvider.prototype.cancelReprojections = function () {\n  this._imageryLayers.cancelReprojections();\n};\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level, in meters.\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error in meters.\n */\nGlobeSurfaceTileProvider.prototype.getLevelMaximumGeometricError = function (\n  level,\n) {\n  if (!defined(this._terrainProvider)) {\n    return 0;\n  }\n\n  return this._terrainProvider.getLevelMaximumGeometricError(level);\n};\n\n/**\n * Loads, or continues loading, a given tile.  This function will continue to be called\n * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}.\n *\n * @param {FrameState} frameState The frame state.\n * @param {QuadtreeTile} tile The tile to load.\n */\nGlobeSurfaceTileProvider.prototype.loadTile = function (frameState, tile) {\n  // We don't want to load imagery until we're certain that the terrain tiles are actually visible.\n  // So if our bounding volume isn't accurate because it came from another tile, load terrain only\n  // initially. If we load some terrain and suddenly have a more accurate bounding volume and the\n  // tile is _still_ visible, give the tile a chance to load imagery immediately rather than\n  // waiting for next frame.\n\n  let surfaceTile = tile.data;\n  let terrainOnly = true;\n  let terrainStateBefore;\n  if (defined(surfaceTile)) {\n    terrainOnly =\n      surfaceTile.boundingVolumeSourceTile !== tile ||\n      tile._lastSelectionResult === TileSelectionResult.CULLED_BUT_NEEDED;\n    terrainStateBefore = surfaceTile.terrainState;\n  }\n\n  GlobeSurfaceTile.processStateMachine(\n    tile,\n    frameState,\n    this.terrainProvider,\n    this._imageryLayers,\n    this.quadtree,\n    this._vertexArraysToDestroy,\n    terrainOnly,\n  );\n\n  surfaceTile = tile.data;\n  if (terrainOnly && terrainStateBefore !== tile.data.terrainState) {\n    // Terrain state changed. If:\n    // a) The tile is visible, and\n    // b) The bounding volume is accurate (updated as a side effect of computing visibility)\n    // Then we'll load imagery, too.\n    if (\n      this.computeTileVisibility(tile, frameState, this.quadtree.occluders) !==\n        Visibility.NONE &&\n      surfaceTile.boundingVolumeSourceTile === tile\n    ) {\n      terrainOnly = false;\n      GlobeSurfaceTile.processStateMachine(\n        tile,\n        frameState,\n        this.terrainProvider,\n        this._imageryLayers,\n        this.quadtree,\n        this._vertexArraysToDestroy,\n        terrainOnly,\n      );\n    }\n  }\n};\n\nconst boundingSphereScratch = new BoundingSphere();\nconst rectangleIntersectionScratch = new Rectangle();\nconst splitCartographicLimitRectangleScratch = new Rectangle();\nconst rectangleCenterScratch = new Cartographic();\n\n// cartographicLimitRectangle may span the IDL, but tiles never will.\nfunction clipRectangleAntimeridian(tileRectangle, cartographicLimitRectangle) {\n  if (cartographicLimitRectangle.west < cartographicLimitRectangle.east) {\n    return cartographicLimitRectangle;\n  }\n  const splitRectangle = Rectangle.clone(\n    cartographicLimitRectangle,\n    splitCartographicLimitRectangleScratch,\n  );\n  const tileCenter = Rectangle.center(tileRectangle, rectangleCenterScratch);\n  if (tileCenter.longitude > 0.0) {\n    splitRectangle.east = CesiumMath.PI;\n  } else {\n    splitRectangle.west = -CesiumMath.PI;\n  }\n  return splitRectangle;\n}\n\nfunction isUndergroundVisible(tileProvider, frameState) {\n  if (frameState.cameraUnderground) {\n    return true;\n  }\n\n  if (frameState.globeTranslucencyState.translucent) {\n    return true;\n  }\n\n  if (tileProvider.backFaceCulling) {\n    return false;\n  }\n\n  const clippingPlanes = tileProvider._clippingPlanes;\n  if (defined(clippingPlanes) && clippingPlanes.enabled) {\n    return true;\n  }\n\n  const clippingPolygons = tileProvider._clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.enabled) {\n    return true;\n  }\n\n  if (\n    !Rectangle.equals(\n      tileProvider.cartographicLimitRectangle,\n      Rectangle.MAX_VALUE,\n    )\n  ) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Determines the visibility of a given tile.  The tile may be fully visible, partially visible, or not\n * visible at all.  Tiles that are renderable and are at least partially visible will be shown by a call\n * to {@link GlobeSurfaceTileProvider#showTileThisFrame}.\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information about the current frame.\n * @param {QuadtreeOccluders} occluders The objects that may occlude this tile.\n *\n * @returns {Visibility} Visibility.NONE if the tile is not visible,\n *                       Visibility.PARTIAL if the tile is partially visible, or\n *                       Visibility.FULL if the tile is fully visible.\n */\nGlobeSurfaceTileProvider.prototype.computeTileVisibility = function (\n  tile,\n  frameState,\n  occluders,\n) {\n  const distance = this.computeDistanceToTile(tile, frameState);\n  tile._distance = distance;\n\n  const undergroundVisible = isUndergroundVisible(this, frameState);\n\n  if (frameState.fog.enabled && !undergroundVisible) {\n    if (CesiumMath.fog(distance, frameState.fog.density) >= 1.0) {\n      // Tile is completely in fog so return that it is not visible.\n      return Visibility.NONE;\n    }\n  }\n\n  const surfaceTile = tile.data;\n  const tileBoundingRegion = surfaceTile.tileBoundingRegion;\n\n  if (surfaceTile.boundingVolumeSourceTile === undefined) {\n    // We have no idea where this tile is, so let's just call it partially visible.\n    return Visibility.PARTIAL;\n  }\n\n  const cullingVolume = frameState.cullingVolume;\n  let boundingVolume = tileBoundingRegion.boundingVolume;\n\n  if (!defined(boundingVolume)) {\n    boundingVolume = tileBoundingRegion.boundingSphere;\n  }\n\n  // Check if the tile is outside the limit area in cartographic space\n  surfaceTile.clippedByBoundaries = false;\n  const clippedCartographicLimitRectangle = clipRectangleAntimeridian(\n    tile.rectangle,\n    this.cartographicLimitRectangle,\n  );\n  const areaLimitIntersection = Rectangle.simpleIntersection(\n    clippedCartographicLimitRectangle,\n    tile.rectangle,\n    rectangleIntersectionScratch,\n  );\n  if (!defined(areaLimitIntersection)) {\n    return Visibility.NONE;\n  }\n  if (!Rectangle.equals(areaLimitIntersection, tile.rectangle)) {\n    surfaceTile.clippedByBoundaries = true;\n  }\n\n  if (frameState.mode !== SceneMode.SCENE3D) {\n    boundingVolume = boundingSphereScratch;\n    BoundingSphere.fromRectangleWithHeights2D(\n      tile.rectangle,\n      frameState.mapProjection,\n      tileBoundingRegion.minimumHeight,\n      tileBoundingRegion.maximumHeight,\n      boundingVolume,\n    );\n    Cartesian3.fromElements(\n      boundingVolume.center.z,\n      boundingVolume.center.x,\n      boundingVolume.center.y,\n      boundingVolume.center,\n    );\n\n    if (\n      frameState.mode === SceneMode.MORPHING &&\n      defined(surfaceTile.renderedMesh)\n    ) {\n      boundingVolume = BoundingSphere.union(\n        tileBoundingRegion.boundingSphere,\n        boundingVolume,\n        boundingVolume,\n      );\n    }\n  }\n\n  if (!defined(boundingVolume)) {\n    return Visibility.PARTIAL;\n  }\n\n  const clippingPlanes = this._clippingPlanes;\n  if (defined(clippingPlanes) && clippingPlanes.enabled) {\n    const planeIntersection =\n      clippingPlanes.computeIntersectionWithBoundingVolume(boundingVolume);\n    tile.isClipped = planeIntersection !== Intersect.INSIDE;\n    if (planeIntersection === Intersect.OUTSIDE) {\n      return Visibility.NONE;\n    }\n  }\n\n  const clippingPolygons = this._clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.enabled) {\n    const polygonIntersection =\n      clippingPolygons.computeIntersectionWithBoundingVolume(\n        tileBoundingRegion,\n      );\n    tile.isClipped = polygonIntersection !== Intersect.OUTSIDE;\n    // Polygon clipping intersections are determined by outer rectangles, therefore we cannot\n    // preemptively determine if a tile is completely clipped or not here.\n  }\n\n  let visibility;\n  const intersection = cullingVolume.computeVisibility(boundingVolume);\n\n  if (intersection === Intersect.OUTSIDE) {\n    visibility = Visibility.NONE;\n  } else if (intersection === Intersect.INTERSECTING) {\n    visibility = Visibility.PARTIAL;\n  } else if (intersection === Intersect.INSIDE) {\n    visibility = Visibility.FULL;\n  }\n\n  if (visibility === Visibility.NONE) {\n    return visibility;\n  }\n\n  const ortho3D =\n    frameState.mode === SceneMode.SCENE3D &&\n    frameState.camera.frustum instanceof OrthographicFrustum;\n  if (\n    frameState.mode === SceneMode.SCENE3D &&\n    !ortho3D &&\n    defined(occluders) &&\n    !undergroundVisible\n  ) {\n    const occludeePointInScaledSpace = surfaceTile.occludeePointInScaledSpace;\n    if (!defined(occludeePointInScaledSpace)) {\n      return visibility;\n    }\n\n    if (\n      occluders.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(\n        occludeePointInScaledSpace,\n        tileBoundingRegion.minimumHeight,\n      )\n    ) {\n      return visibility;\n    }\n\n    return Visibility.NONE;\n  }\n\n  return visibility;\n};\n\n/**\n * Determines if the given tile can be refined\n * @param {QuadtreeTile} tile The tile to check.\n * @returns {boolean} True if the tile can be refined, false if it cannot.\n */\nGlobeSurfaceTileProvider.prototype.canRefine = function (tile) {\n  // Only allow refinement it we know whether or not the children of this tile exist.\n  // For a tileset with `availability`, we'll always be able to refine.\n  // We can ask for availability of _any_ child tile because we only need to confirm\n  // that we get a yes or no answer, it doesn't matter what the answer is.\n  if (defined(tile.data.terrainData)) {\n    return true;\n  }\n  const childAvailable = this.terrainProvider.getTileDataAvailable(\n    tile.x * 2,\n    tile.y * 2,\n    tile.level + 1,\n  );\n  return childAvailable !== undefined;\n};\n\nconst readyImageryScratch = [];\nconst canRenderTraversalStack = [];\n\n/**\n * Determines if the given not-fully-loaded tile can be rendered without losing detail that\n * was present last frame as a result of rendering descendant tiles. This method will only be\n * called if this tile's descendants were rendered last frame. If the tile is fully loaded,\n * it is assumed that this method will return true and it will not be called.\n * @param {QuadtreeTile} tile The tile to check.\n * @returns {boolean} True if the tile can be rendered without losing detail.\n */\nGlobeSurfaceTileProvider.prototype.canRenderWithoutLosingDetail = function (\n  tile,\n  frameState,\n) {\n  const surfaceTile = tile.data;\n\n  const readyImagery = readyImageryScratch;\n  readyImagery.length = this._imageryLayers.length;\n\n  let terrainReady = false;\n  let initialImageryState = false;\n  let imagery;\n\n  if (defined(surfaceTile)) {\n    // We can render even with non-ready terrain as long as all our rendered descendants\n    // are missing terrain geometry too. i.e. if we rendered fills for more detailed tiles\n    // last frame, it's ok to render a fill for this tile this frame.\n    terrainReady = surfaceTile.terrainState === TerrainState.READY;\n\n    // Initially assume all imagery layers are ready, unless imagery hasn't been initialized at all.\n    initialImageryState = true;\n\n    imagery = surfaceTile.imagery;\n  }\n\n  let i;\n  let len;\n\n  for (i = 0, len = readyImagery.length; i < len; ++i) {\n    readyImagery[i] = initialImageryState;\n  }\n\n  if (defined(imagery)) {\n    for (i = 0, len = imagery.length; i < len; ++i) {\n      const tileImagery = imagery[i];\n      const loadingImagery = tileImagery.loadingImagery;\n      const isReady =\n        !defined(loadingImagery) ||\n        loadingImagery.state === ImageryState.FAILED ||\n        loadingImagery.state === ImageryState.INVALID;\n      const layerIndex = (\n        tileImagery.loadingImagery || tileImagery.readyImagery\n      ).imageryLayer._layerIndex;\n\n      // For a layer to be ready, all tiles belonging to that layer must be ready.\n      readyImagery[layerIndex] = isReady && readyImagery[layerIndex];\n    }\n  }\n\n  const lastFrame = this.quadtree._lastSelectionFrameNumber;\n\n  // Traverse the descendants looking for one with terrain or imagery that is not loaded on this tile.\n  const stack = canRenderTraversalStack;\n  stack.length = 0;\n  stack.push(\n    tile.southwestChild,\n    tile.southeastChild,\n    tile.northwestChild,\n    tile.northeastChild,\n  );\n\n  while (stack.length > 0) {\n    const descendant = stack.pop();\n    const lastFrameSelectionResult =\n      descendant._lastSelectionResultFrame === lastFrame\n        ? descendant._lastSelectionResult\n        : TileSelectionResult.NONE;\n\n    if (lastFrameSelectionResult === TileSelectionResult.RENDERED) {\n      const descendantSurface = descendant.data;\n\n      if (!defined(descendantSurface)) {\n        // Descendant has no data, so it can't block rendering.\n        continue;\n      }\n\n      if (\n        !terrainReady &&\n        descendant.data.terrainState === TerrainState.READY\n      ) {\n        // Rendered descendant has real terrain, but we don't. Rendering is blocked.\n        return false;\n      }\n\n      const descendantImagery = descendant.data.imagery;\n      for (i = 0, len = descendantImagery.length; i < len; ++i) {\n        const descendantTileImagery = descendantImagery[i];\n        const descendantLoadingImagery = descendantTileImagery.loadingImagery;\n        const descendantIsReady =\n          !defined(descendantLoadingImagery) ||\n          descendantLoadingImagery.state === ImageryState.FAILED ||\n          descendantLoadingImagery.state === ImageryState.INVALID;\n        const descendantLayerIndex = (\n          descendantTileImagery.loadingImagery ||\n          descendantTileImagery.readyImagery\n        ).imageryLayer._layerIndex;\n\n        // If this imagery tile of a descendant is ready but the layer isn't ready in this tile,\n        // then rendering is blocked.\n        if (descendantIsReady && !readyImagery[descendantLayerIndex]) {\n          return false;\n        }\n      }\n    } else if (lastFrameSelectionResult === TileSelectionResult.REFINED) {\n      stack.push(\n        descendant.southwestChild,\n        descendant.southeastChild,\n        descendant.northwestChild,\n        descendant.northeastChild,\n      );\n    }\n  }\n\n  return true;\n};\n\nconst tileDirectionScratch = new Cartesian3();\n\n/**\n * Determines the priority for loading this tile. Lower priority values load sooner.\n * @param {QuadtreeTile} tile The tile.\n * @param {FrameState} frameState The frame state.\n * @returns {number} The load priority value.\n */\nGlobeSurfaceTileProvider.prototype.computeTileLoadPriority = function (\n  tile,\n  frameState,\n) {\n  const surfaceTile = tile.data;\n  if (surfaceTile === undefined) {\n    return 0.0;\n  }\n\n  const obb = surfaceTile.tileBoundingRegion.boundingVolume;\n  if (obb === undefined) {\n    return 0.0;\n  }\n\n  const cameraPosition = frameState.camera.positionWC;\n  const cameraDirection = frameState.camera.directionWC;\n  const tileDirection = Cartesian3.subtract(\n    obb.center,\n    cameraPosition,\n    tileDirectionScratch,\n  );\n  const magnitude = Cartesian3.magnitude(tileDirection);\n  if (magnitude < CesiumMath.EPSILON5) {\n    return 0.0;\n  }\n  Cartesian3.divideByScalar(tileDirection, magnitude, tileDirection);\n  return (\n    (1.0 - Cartesian3.dot(tileDirection, cameraDirection)) * tile._distance\n  );\n};\n\nconst modifiedModelViewScratch = new Matrix4();\nconst modifiedModelViewProjectionScratch = new Matrix4();\nconst tileRectangleScratch = new Cartesian4();\nconst localizedCartographicLimitRectangleScratch = new Cartesian4();\nconst localizedTranslucencyRectangleScratch = new Cartesian4();\nconst rtcScratch = new Cartesian3();\nconst centerEyeScratch = new Cartesian3();\nconst southwestScratch = new Cartesian3();\nconst northeastScratch = new Cartesian3();\n\n/**\n * Shows a specified tile in this frame.  The provider can cause the tile to be shown by adding\n * render commands to the commandList, or use any other method as appropriate.  The tile is not\n * expected to be visible next frame as well, unless this method is called next frame, too.\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information of the current rendering frame.\n */\nGlobeSurfaceTileProvider.prototype.showTileThisFrame = function (\n  tile,\n  frameState,\n) {\n  let readyTextureCount = 0;\n  const tileImageryCollection = tile.data.imagery;\n  for (let i = 0, len = tileImageryCollection.length; i < len; ++i) {\n    const tileImagery = tileImageryCollection[i];\n    if (\n      defined(tileImagery.readyImagery) &&\n      tileImagery.readyImagery.imageryLayer.alpha !== 0.0\n    ) {\n      ++readyTextureCount;\n    }\n  }\n\n  let tileSet = this._tilesToRenderByTextureCount[readyTextureCount];\n  if (!defined(tileSet)) {\n    tileSet = [];\n    this._tilesToRenderByTextureCount[readyTextureCount] = tileSet;\n  }\n\n  tileSet.push(tile);\n\n  const surfaceTile = tile.data;\n  if (!defined(surfaceTile.vertexArray)) {\n    this._hasFillTilesThisFrame = true;\n  } else {\n    this._hasLoadedTilesThisFrame = true;\n  }\n\n  const debug = this._debug;\n  ++debug.tilesRendered;\n  debug.texturesRendered += readyTextureCount;\n};\n\nconst cornerPositionsScratch = [\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n];\n\nfunction computeOccludeePoint(\n  tileProvider,\n  center,\n  rectangle,\n  minimumHeight,\n  maximumHeight,\n  result,\n) {\n  const ellipsoidalOccluder = tileProvider.quadtree._occluders.ellipsoid;\n  const ellipsoid = ellipsoidalOccluder.ellipsoid;\n\n  const cornerPositions = cornerPositionsScratch;\n  Cartesian3.fromRadians(\n    rectangle.west,\n    rectangle.south,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[0],\n  );\n  Cartesian3.fromRadians(\n    rectangle.east,\n    rectangle.south,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[1],\n  );\n  Cartesian3.fromRadians(\n    rectangle.west,\n    rectangle.north,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[2],\n  );\n  Cartesian3.fromRadians(\n    rectangle.east,\n    rectangle.north,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[3],\n  );\n\n  return ellipsoidalOccluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n    center,\n    cornerPositions,\n    minimumHeight,\n    result,\n  );\n}\n\n/**\n * Gets the distance from the camera to the closest point on the tile.  This is used for level-of-detail selection.\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information of the current rendering frame.\n *\n * @returns {number} The distance from the camera to the closest point on the tile, in meters.\n */\nGlobeSurfaceTileProvider.prototype.computeDistanceToTile = function (\n  tile,\n  frameState,\n) {\n  // The distance should be:\n  // 1. the actual distance to the tight-fitting bounding volume, or\n  // 2. a distance that is equal to or greater than the actual distance to the tight-fitting bounding volume.\n  //\n  // When we don't know the min/max heights for a tile, but we do know the min/max of an ancestor tile, we can\n  // build a tight-fitting bounding volume horizontally, but not vertically. The min/max heights from the\n  // ancestor will likely form a volume that is much bigger than it needs to be. This means that the volume may\n  // be deemed to be much closer to the camera than it really is, causing us to select tiles that are too detailed.\n  // Loading too-detailed tiles is super expensive, so we don't want to do that. We don't know where the child\n  // tile really lies within the parent range of heights, but we _do_ know the child tile can't be any closer than\n  // the ancestor height surface (min or max) that is _farthest away_ from the camera. So if we compute distance\n  // based on that conservative metric, we may end up loading tiles that are not detailed enough, but that's much\n  // better (faster) than loading tiles that are too detailed.\n\n  updateTileBoundingRegion(tile, this, frameState);\n\n  const surfaceTile = tile.data;\n  const boundingVolumeSourceTile = surfaceTile.boundingVolumeSourceTile;\n  if (boundingVolumeSourceTile === undefined) {\n    // Can't find any min/max heights anywhere? Ok, let's just say the\n    // tile is really far away so we'll load and render it rather than\n    // refining.\n    return 9999999999.0;\n  }\n\n  const tileBoundingRegion = surfaceTile.tileBoundingRegion;\n  const min = tileBoundingRegion.minimumHeight;\n  const max = tileBoundingRegion.maximumHeight;\n\n  if (surfaceTile.boundingVolumeSourceTile !== tile) {\n    const cameraHeight = frameState.camera.positionCartographic.height;\n    const distanceToMin = Math.abs(cameraHeight - min);\n    const distanceToMax = Math.abs(cameraHeight - max);\n    if (distanceToMin > distanceToMax) {\n      tileBoundingRegion.minimumHeight = min;\n      tileBoundingRegion.maximumHeight = min;\n    } else {\n      tileBoundingRegion.minimumHeight = max;\n      tileBoundingRegion.maximumHeight = max;\n    }\n  }\n\n  const result = tileBoundingRegion.distanceToCamera(frameState);\n\n  tileBoundingRegion.minimumHeight = min;\n  tileBoundingRegion.maximumHeight = max;\n\n  return result;\n};\n\nfunction updateTileBoundingRegion(tile, tileProvider, frameState) {\n  let surfaceTile = tile.data;\n  if (surfaceTile === undefined) {\n    surfaceTile = tile.data = new GlobeSurfaceTile();\n  }\n\n  const ellipsoid = tile.tilingScheme.ellipsoid;\n  if (surfaceTile.tileBoundingRegion === undefined) {\n    surfaceTile.tileBoundingRegion = new TileBoundingRegion({\n      computeBoundingVolumes: false,\n      rectangle: tile.rectangle,\n      ellipsoid: ellipsoid,\n      minimumHeight: 0.0,\n      maximumHeight: 0.0,\n    });\n  }\n\n  const tileBoundingRegion = surfaceTile.tileBoundingRegion;\n  const oldMinimumHeight = tileBoundingRegion.minimumHeight;\n  const oldMaximumHeight = tileBoundingRegion.maximumHeight;\n  let hasBoundingVolumesFromMesh = false;\n  let sourceTile = tile;\n\n  // Get min and max heights from the mesh.\n  // If the mesh is not available, get them from the terrain data.\n  // If the terrain data is not available either, get them from an ancestor.\n  // If none of the ancestors are available, then there are no min and max heights for this tile at this time.\n  const mesh = surfaceTile.mesh;\n  const terrainData = surfaceTile.terrainData;\n  if (\n    mesh !== undefined &&\n    mesh.minimumHeight !== undefined &&\n    mesh.maximumHeight !== undefined\n  ) {\n    tileBoundingRegion.minimumHeight = mesh.minimumHeight;\n    tileBoundingRegion.maximumHeight = mesh.maximumHeight;\n    hasBoundingVolumesFromMesh = true;\n  } else if (\n    terrainData !== undefined &&\n    terrainData._minimumHeight !== undefined &&\n    terrainData._maximumHeight !== undefined\n  ) {\n    tileBoundingRegion.minimumHeight = terrainData._minimumHeight;\n    tileBoundingRegion.maximumHeight = terrainData._maximumHeight;\n  } else {\n    // No accurate min/max heights available, so we're stuck with min/max heights from an ancestor tile.\n    tileBoundingRegion.minimumHeight = Number.NaN;\n    tileBoundingRegion.maximumHeight = Number.NaN;\n\n    let ancestorTile = tile.parent;\n    while (ancestorTile !== undefined) {\n      const ancestorSurfaceTile = ancestorTile.data;\n      if (ancestorSurfaceTile !== undefined) {\n        const ancestorMesh = ancestorSurfaceTile.mesh;\n        const ancestorTerrainData = ancestorSurfaceTile.terrainData;\n        if (\n          ancestorMesh !== undefined &&\n          ancestorMesh.minimumHeight !== undefined &&\n          ancestorMesh.maximumHeight !== undefined\n        ) {\n          tileBoundingRegion.minimumHeight = ancestorMesh.minimumHeight;\n          tileBoundingRegion.maximumHeight = ancestorMesh.maximumHeight;\n          break;\n        } else if (\n          ancestorTerrainData !== undefined &&\n          ancestorTerrainData._minimumHeight !== undefined &&\n          ancestorTerrainData._maximumHeight !== undefined\n        ) {\n          tileBoundingRegion.minimumHeight = ancestorTerrainData._minimumHeight;\n          tileBoundingRegion.maximumHeight = ancestorTerrainData._maximumHeight;\n          break;\n        }\n      }\n      ancestorTile = ancestorTile.parent;\n    }\n    sourceTile = ancestorTile;\n  }\n\n  // Update bounding regions from the min and max heights\n  if (sourceTile !== undefined) {\n    const exaggeration = frameState.verticalExaggeration;\n    const exaggerationRelativeHeight =\n      frameState.verticalExaggerationRelativeHeight;\n    const hasExaggeration = exaggeration !== 1.0;\n    if (hasExaggeration) {\n      hasBoundingVolumesFromMesh = false;\n      tileBoundingRegion.minimumHeight = VerticalExaggeration.getHeight(\n        tileBoundingRegion.minimumHeight,\n        exaggeration,\n        exaggerationRelativeHeight,\n      );\n      tileBoundingRegion.maximumHeight = VerticalExaggeration.getHeight(\n        tileBoundingRegion.maximumHeight,\n        exaggeration,\n        exaggerationRelativeHeight,\n      );\n    }\n\n    if (hasBoundingVolumesFromMesh) {\n      if (!surfaceTile.boundingVolumeIsFromMesh) {\n        tileBoundingRegion._orientedBoundingBox = OrientedBoundingBox.clone(\n          mesh.orientedBoundingBox,\n          tileBoundingRegion._orientedBoundingBox,\n        );\n        tileBoundingRegion._boundingSphere = BoundingSphere.clone(\n          mesh.boundingSphere3D,\n          tileBoundingRegion._boundingSphere,\n        );\n        surfaceTile.occludeePointInScaledSpace = Cartesian3.clone(\n          mesh.occludeePointInScaledSpace,\n          surfaceTile.occludeePointInScaledSpace,\n        );\n\n        // If the occludee point is not defined, fallback to calculating it from the OBB\n        if (!defined(surfaceTile.occludeePointInScaledSpace)) {\n          surfaceTile.occludeePointInScaledSpace = computeOccludeePoint(\n            tileProvider,\n            tileBoundingRegion._orientedBoundingBox.center,\n            tile.rectangle,\n            tileBoundingRegion.minimumHeight,\n            tileBoundingRegion.maximumHeight,\n            surfaceTile.occludeePointInScaledSpace,\n          );\n        }\n      }\n    } else {\n      const needsBounds =\n        tileBoundingRegion._orientedBoundingBox === undefined ||\n        tileBoundingRegion._boundingSphere === undefined;\n      const heightChanged =\n        tileBoundingRegion.minimumHeight !== oldMinimumHeight ||\n        tileBoundingRegion.maximumHeight !== oldMaximumHeight;\n      if (heightChanged || needsBounds) {\n        // Bounding volumes need to be recomputed in some circumstances\n        tileBoundingRegion.computeBoundingVolumes(ellipsoid);\n        surfaceTile.occludeePointInScaledSpace = computeOccludeePoint(\n          tileProvider,\n          tileBoundingRegion._orientedBoundingBox.center,\n          tile.rectangle,\n          tileBoundingRegion.minimumHeight,\n          tileBoundingRegion.maximumHeight,\n          surfaceTile.occludeePointInScaledSpace,\n        );\n      }\n    }\n    surfaceTile.boundingVolumeSourceTile = sourceTile;\n    surfaceTile.boundingVolumeIsFromMesh = hasBoundingVolumesFromMesh;\n  } else {\n    surfaceTile.boundingVolumeSourceTile = undefined;\n    surfaceTile.boundingVolumeIsFromMesh = false;\n  }\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see GlobeSurfaceTileProvider#destroy\n */\nGlobeSurfaceTileProvider.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * provider = provider && provider();\n *\n * @see GlobeSurfaceTileProvider#isDestroyed\n */\nGlobeSurfaceTileProvider.prototype.destroy = function () {\n  this._tileProvider = this._tileProvider && this._tileProvider.destroy();\n  this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();\n  this._clippingPolygons =\n    this._clippingPolygons && this._clippingPolygons.destroy();\n  this._removeLayerAddedListener =\n    this._removeLayerAddedListener && this._removeLayerAddedListener();\n  this._removeLayerRemovedListener =\n    this._removeLayerRemovedListener && this._removeLayerRemovedListener();\n  this._removeLayerMovedListener =\n    this._removeLayerMovedListener && this._removeLayerMovedListener();\n  this._removeLayerShownListener =\n    this._removeLayerShownListener && this._removeLayerShownListener();\n\n  return destroyObject(this);\n};\n\nfunction getTileReadyCallback(tileImageriesToFree, layer, terrainProvider) {\n  return function (tile) {\n    let tileImagery;\n    let imagery;\n    let startIndex = -1;\n    const tileImageryCollection = tile.data.imagery;\n    const length = tileImageryCollection.length;\n    let i;\n    for (i = 0; i < length; ++i) {\n      tileImagery = tileImageryCollection[i];\n      imagery = tileImagery.readyImagery ?? tileImagery.loadingImagery;\n      if (imagery.imageryLayer === layer) {\n        startIndex = i;\n        break;\n      }\n    }\n\n    if (startIndex !== -1) {\n      const endIndex = startIndex + tileImageriesToFree;\n      tileImagery = tileImageryCollection[endIndex];\n      imagery = defined(tileImagery)\n        ? (tileImagery.readyImagery ?? tileImagery.loadingImagery)\n        : undefined;\n      if (!defined(imagery) || imagery.imageryLayer !== layer) {\n        // Return false to keep the callback if we have to wait on the skeletons\n        // Return true to remove the callback if something went wrong\n        return !layer._createTileImagerySkeletons(\n          tile,\n          terrainProvider,\n          endIndex,\n        );\n      }\n\n      for (i = startIndex; i < endIndex; ++i) {\n        tileImageryCollection[i].freeResources();\n      }\n\n      tileImageryCollection.splice(startIndex, tileImageriesToFree);\n    }\n\n    return true; // Everything is done, so remove the callback\n  };\n}\n\nGlobeSurfaceTileProvider.prototype._onLayerAdded = function (layer, index) {\n  if (this.isDestroyed()) {\n    return;\n  }\n\n  if (layer.show) {\n    const terrainProvider = this._terrainProvider;\n\n    const that = this;\n    const tileImageryUpdatedEvent = this._imageryLayersUpdatedEvent;\n    const reloadFunction = function () {\n      // Clear the layer's cache\n      layer._imageryCache = {};\n\n      that._quadtree.forEachLoadedTile(function (tile) {\n        // If this layer is still waiting to for the loaded callback, just return\n        if (defined(tile._loadedCallbacks[layer._layerIndex])) {\n          return;\n        }\n\n        let i;\n\n        // Figure out how many TileImageries we will need to remove and where to insert new ones\n        const tileImageryCollection = tile.data.imagery;\n        const length = tileImageryCollection.length;\n        let startIndex = -1;\n        let tileImageriesToFree = 0;\n        for (i = 0; i < length; ++i) {\n          const tileImagery = tileImageryCollection[i];\n          const imagery =\n            tileImagery.readyImagery ?? tileImagery.loadingImagery;\n          if (imagery.imageryLayer === layer) {\n            if (startIndex === -1) {\n              startIndex = i;\n            }\n\n            ++tileImageriesToFree;\n          } else if (startIndex !== -1) {\n            // iterated past the section of TileImageries belonging to this layer, no need to continue.\n            break;\n          }\n        }\n\n        if (startIndex === -1) {\n          return;\n        }\n\n        // Insert immediately after existing TileImageries\n        const insertionPoint = startIndex + tileImageriesToFree;\n\n        // Create new TileImageries for all loaded tiles\n        if (\n          layer._createTileImagerySkeletons(\n            tile,\n            terrainProvider,\n            insertionPoint,\n          )\n        ) {\n          // Add callback to remove old TileImageries when the new TileImageries are ready\n          tile._loadedCallbacks[layer._layerIndex] = getTileReadyCallback(\n            tileImageriesToFree,\n            layer,\n            terrainProvider,\n          );\n\n          tile.state = QuadtreeTileLoadState.LOADING;\n        }\n      });\n    };\n\n    if (layer.ready) {\n      const imageryProvider = layer.imageryProvider;\n      imageryProvider._reload = reloadFunction;\n    }\n\n    // create TileImageries for this layer for all previously loaded tiles\n    this._quadtree.forEachLoadedTile(function (tile) {\n      if (layer._createTileImagerySkeletons(tile, terrainProvider)) {\n        tile.state = QuadtreeTileLoadState.LOADING;\n\n        // Tiles that are not currently being rendered need to load the new layer before they're renderable.\n        // We don't mark the rendered tiles non-renderable, though, because that would make the globe disappear.\n        if (\n          tile.level !== 0 &&\n          (tile._lastSelectionResultFrame !==\n            that.quadtree._lastSelectionFrameNumber ||\n            tile._lastSelectionResult !== TileSelectionResult.RENDERED)\n        ) {\n          tile.renderable = false;\n        }\n      }\n    });\n\n    this._layerOrderChanged = true;\n    tileImageryUpdatedEvent.raiseEvent();\n  }\n};\n\nGlobeSurfaceTileProvider.prototype._onLayerRemoved = function (layer, index) {\n  // destroy TileImagerys for this layer for all previously loaded tiles\n  this._quadtree.forEachLoadedTile(function (tile) {\n    const tileImageryCollection = tile.data.imagery;\n\n    let startIndex = -1;\n    let numDestroyed = 0;\n    for (let i = 0, len = tileImageryCollection.length; i < len; ++i) {\n      const tileImagery = tileImageryCollection[i];\n      let imagery = tileImagery.loadingImagery;\n      if (!defined(imagery)) {\n        imagery = tileImagery.readyImagery;\n      }\n      if (imagery.imageryLayer === layer) {\n        if (startIndex === -1) {\n          startIndex = i;\n        }\n\n        tileImagery.freeResources();\n        ++numDestroyed;\n      } else if (startIndex !== -1) {\n        // iterated past the section of TileImagerys belonging to this layer, no need to continue.\n        break;\n      }\n    }\n\n    if (startIndex !== -1) {\n      tileImageryCollection.splice(startIndex, numDestroyed);\n    }\n  });\n\n  if (defined(layer.imageryProvider)) {\n    layer.imageryProvider._reload = undefined;\n  }\n\n  this._imageryLayersUpdatedEvent.raiseEvent();\n};\n\nGlobeSurfaceTileProvider.prototype._onLayerMoved = function (\n  layer,\n  newIndex,\n  oldIndex,\n) {\n  this._layerOrderChanged = true;\n  this._imageryLayersUpdatedEvent.raiseEvent();\n};\n\nGlobeSurfaceTileProvider.prototype._onLayerShownOrHidden = function (\n  layer,\n  index,\n  show,\n) {\n  if (show) {\n    this._onLayerAdded(layer, index);\n  } else {\n    this._onLayerRemoved(layer, index);\n  }\n};\n\nconst scratchClippingPlanesMatrix = new Matrix4();\nconst scratchInverseTransposeClippingPlanesMatrix = new Matrix4();\nfunction createTileUniformMap(frameState, globeSurfaceTileProvider) {\n  const uniformMap = {\n    u_initialColor: function () {\n      return this.properties.initialColor;\n    },\n    u_fillHighlightColor: function () {\n      return this.properties.fillHighlightColor;\n    },\n    u_zoomedOutOceanSpecularIntensity: function () {\n      return this.properties.zoomedOutOceanSpecularIntensity;\n    },\n    u_oceanNormalMap: function () {\n      return this.properties.oceanNormalMap;\n    },\n    u_atmosphereLightIntensity: function () {\n      return this.properties.atmosphereLightIntensity;\n    },\n    u_atmosphereRayleighCoefficient: function () {\n      return this.properties.atmosphereRayleighCoefficient;\n    },\n    u_atmosphereMieCoefficient: function () {\n      return this.properties.atmosphereMieCoefficient;\n    },\n    u_atmosphereRayleighScaleHeight: function () {\n      return this.properties.atmosphereRayleighScaleHeight;\n    },\n    u_atmosphereMieScaleHeight: function () {\n      return this.properties.atmosphereMieScaleHeight;\n    },\n    u_atmosphereMieAnisotropy: function () {\n      return this.properties.atmosphereMieAnisotropy;\n    },\n    u_lightingFadeDistance: function () {\n      return this.properties.lightingFadeDistance;\n    },\n    u_nightFadeDistance: function () {\n      return this.properties.nightFadeDistance;\n    },\n    u_center3D: function () {\n      return this.properties.center3D;\n    },\n    u_verticalExaggerationAndRelativeHeight: function () {\n      return this.properties.verticalExaggerationAndRelativeHeight;\n    },\n    u_tileRectangle: function () {\n      return this.properties.tileRectangle;\n    },\n    u_modifiedModelView: function () {\n      const viewMatrix = frameState.context.uniformState.view;\n      const centerEye = Matrix4.multiplyByPoint(\n        viewMatrix,\n        this.properties.rtc,\n        centerEyeScratch,\n      );\n      Matrix4.setTranslation(viewMatrix, centerEye, modifiedModelViewScratch);\n      return modifiedModelViewScratch;\n    },\n    u_modifiedModelViewProjection: function () {\n      const viewMatrix = frameState.context.uniformState.view;\n      const projectionMatrix = frameState.context.uniformState.projection;\n      const centerEye = Matrix4.multiplyByPoint(\n        viewMatrix,\n        this.properties.rtc,\n        centerEyeScratch,\n      );\n      Matrix4.setTranslation(\n        viewMatrix,\n        centerEye,\n        modifiedModelViewProjectionScratch,\n      );\n      Matrix4.multiply(\n        projectionMatrix,\n        modifiedModelViewProjectionScratch,\n        modifiedModelViewProjectionScratch,\n      );\n      return modifiedModelViewProjectionScratch;\n    },\n    u_dayTextures: function () {\n      return this.properties.dayTextures;\n    },\n    u_dayTextureTranslationAndScale: function () {\n      return this.properties.dayTextureTranslationAndScale;\n    },\n    u_dayTextureTexCoordsRectangle: function () {\n      return this.properties.dayTextureTexCoordsRectangle;\n    },\n    u_dayTextureUseWebMercatorT: function () {\n      return this.properties.dayTextureUseWebMercatorT;\n    },\n    u_dayTextureAlpha: function () {\n      return this.properties.dayTextureAlpha;\n    },\n    u_dayTextureNightAlpha: function () {\n      return this.properties.dayTextureNightAlpha;\n    },\n    u_dayTextureDayAlpha: function () {\n      return this.properties.dayTextureDayAlpha;\n    },\n    u_dayTextureBrightness: function () {\n      return this.properties.dayTextureBrightness;\n    },\n    u_dayTextureContrast: function () {\n      return this.properties.dayTextureContrast;\n    },\n    u_dayTextureHue: function () {\n      return this.properties.dayTextureHue;\n    },\n    u_dayTextureSaturation: function () {\n      return this.properties.dayTextureSaturation;\n    },\n    u_dayTextureOneOverGamma: function () {\n      return this.properties.dayTextureOneOverGamma;\n    },\n    u_dayIntensity: function () {\n      return this.properties.dayIntensity;\n    },\n    u_southAndNorthLatitude: function () {\n      return this.properties.southAndNorthLatitude;\n    },\n    u_southMercatorYAndOneOverHeight: function () {\n      return this.properties.southMercatorYAndOneOverHeight;\n    },\n    u_waterMask: function () {\n      return this.properties.waterMask;\n    },\n    u_waterMaskTranslationAndScale: function () {\n      return this.properties.waterMaskTranslationAndScale;\n    },\n    u_minMaxHeight: function () {\n      return this.properties.minMaxHeight;\n    },\n    u_scaleAndBias: function () {\n      return this.properties.scaleAndBias;\n    },\n    u_dayTextureSplit: function () {\n      return this.properties.dayTextureSplit;\n    },\n    u_dayTextureCutoutRectangles: function () {\n      return this.properties.dayTextureCutoutRectangles;\n    },\n    u_clippingPlanes: function () {\n      const clippingPlanes = globeSurfaceTileProvider._clippingPlanes;\n      if (defined(clippingPlanes) && defined(clippingPlanes.texture)) {\n        // Check in case clippingPlanes hasn't been updated yet.\n        return clippingPlanes.texture;\n      }\n      return frameState.context.defaultTexture;\n    },\n    u_cartographicLimitRectangle: function () {\n      return this.properties.localizedCartographicLimitRectangle;\n    },\n    u_clippingPlanesMatrix: function () {\n      const clippingPlanes = globeSurfaceTileProvider._clippingPlanes;\n      const transform = defined(clippingPlanes)\n        ? Matrix4.multiply(\n            frameState.context.uniformState.view,\n            clippingPlanes.modelMatrix,\n            scratchClippingPlanesMatrix,\n          )\n        : Matrix4.IDENTITY;\n\n      return Matrix4.inverseTranspose(\n        transform,\n        scratchInverseTransposeClippingPlanesMatrix,\n      );\n    },\n    u_clippingPlanesEdgeStyle: function () {\n      const style = this.properties.clippingPlanesEdgeColor;\n      style.alpha = this.properties.clippingPlanesEdgeWidth;\n      return style;\n    },\n    u_clippingDistance: function () {\n      const texture =\n        globeSurfaceTileProvider._clippingPolygons.clippingTexture;\n      if (defined(texture)) {\n        return texture;\n      }\n      return frameState.context.defaultTexture;\n    },\n    u_clippingExtents: function () {\n      const texture = globeSurfaceTileProvider._clippingPolygons.extentsTexture;\n      if (defined(texture)) {\n        return texture;\n      }\n      return frameState.context.defaultTexture;\n    },\n    u_minimumBrightness: function () {\n      return frameState.fog.minimumBrightness;\n    },\n    u_hsbShift: function () {\n      return this.properties.hsbShift;\n    },\n    u_colorsToAlpha: function () {\n      return this.properties.colorsToAlpha;\n    },\n    u_frontFaceAlphaByDistance: function () {\n      return this.properties.frontFaceAlphaByDistance;\n    },\n    u_backFaceAlphaByDistance: function () {\n      return this.properties.backFaceAlphaByDistance;\n    },\n    u_translucencyRectangle: function () {\n      return this.properties.localizedTranslucencyRectangle;\n    },\n    u_undergroundColor: function () {\n      return this.properties.undergroundColor;\n    },\n    u_undergroundColorAlphaByDistance: function () {\n      return this.properties.undergroundColorAlphaByDistance;\n    },\n    u_lambertDiffuseMultiplier: function () {\n      return this.properties.lambertDiffuseMultiplier;\n    },\n    u_vertexShadowDarkness: function () {\n      return this.properties.vertexShadowDarkness;\n    },\n\n    // make a separate object so that changes to the properties are seen on\n    // derived commands that combine another uniform map with this one.\n    properties: {\n      initialColor: new Cartesian4(0.0, 0.0, 0.5, 1.0),\n      fillHighlightColor: new Color(0.0, 0.0, 0.0, 0.0),\n      zoomedOutOceanSpecularIntensity: 0.5,\n      oceanNormalMap: undefined,\n      lightingFadeDistance: new Cartesian2(6500000.0, 9000000.0),\n      nightFadeDistance: new Cartesian2(10000000.0, 40000000.0),\n      atmosphereLightIntensity: 10.0,\n      atmosphereRayleighCoefficient: new Cartesian3(5.5e-6, 13.0e-6, 28.4e-6),\n      atmosphereMieCoefficient: new Cartesian3(21e-6, 21e-6, 21e-6),\n      atmosphereRayleighScaleHeight: 10000.0,\n      atmosphereMieScaleHeight: 3200.0,\n      atmosphereMieAnisotropy: 0.9,\n      hsbShift: new Cartesian3(),\n\n      center3D: undefined,\n      rtc: new Cartesian3(),\n      modifiedModelView: new Matrix4(),\n      tileRectangle: new Cartesian4(),\n\n      verticalExaggerationAndRelativeHeight: new Cartesian2(1.0, 0.0),\n\n      dayTextures: [],\n      dayTextureTranslationAndScale: [],\n      dayTextureTexCoordsRectangle: [],\n      dayTextureUseWebMercatorT: [],\n      dayTextureAlpha: [],\n      dayTextureNightAlpha: [],\n      dayTextureDayAlpha: [],\n      dayTextureBrightness: [],\n      dayTextureContrast: [],\n      dayTextureHue: [],\n      dayTextureSaturation: [],\n      dayTextureOneOverGamma: [],\n      dayTextureSplit: [],\n      dayTextureCutoutRectangles: [],\n      dayIntensity: 0.0,\n      colorsToAlpha: [],\n\n      southAndNorthLatitude: new Cartesian2(),\n      southMercatorYAndOneOverHeight: new Cartesian2(),\n\n      waterMask: undefined,\n      waterMaskTranslationAndScale: new Cartesian4(),\n\n      minMaxHeight: new Cartesian2(),\n      scaleAndBias: new Matrix4(),\n      clippingPlanesEdgeColor: Color.clone(Color.WHITE),\n      clippingPlanesEdgeWidth: 0.0,\n\n      localizedCartographicLimitRectangle: new Cartesian4(),\n\n      frontFaceAlphaByDistance: new Cartesian4(),\n      backFaceAlphaByDistance: new Cartesian4(),\n      localizedTranslucencyRectangle: new Cartesian4(),\n      undergroundColor: Color.clone(Color.TRANSPARENT),\n      undergroundColorAlphaByDistance: new Cartesian4(),\n      lambertDiffuseMultiplier: 0.0,\n      vertexShadowDarkness: 0.0,\n    },\n  };\n\n  if (defined(globeSurfaceTileProvider.materialUniformMap)) {\n    return combine(uniformMap, globeSurfaceTileProvider.materialUniformMap);\n  }\n\n  return uniformMap;\n}\n\nfunction createWireframeVertexArrayIfNecessary(context, provider, tile) {\n  const surfaceTile = tile.data;\n\n  let mesh;\n  let vertexArray;\n\n  if (defined(surfaceTile.vertexArray)) {\n    mesh = surfaceTile.mesh;\n    vertexArray = surfaceTile.vertexArray;\n  } else if (\n    defined(surfaceTile.fill) &&\n    defined(surfaceTile.fill.vertexArray)\n  ) {\n    mesh = surfaceTile.fill.mesh;\n    vertexArray = surfaceTile.fill.vertexArray;\n  }\n\n  if (!defined(mesh) || !defined(vertexArray)) {\n    return;\n  }\n\n  if (defined(surfaceTile.wireframeVertexArray)) {\n    if (surfaceTile.wireframeVertexArray.mesh === mesh) {\n      return;\n    }\n\n    surfaceTile.wireframeVertexArray.destroy();\n    surfaceTile.wireframeVertexArray = undefined;\n  }\n\n  surfaceTile.wireframeVertexArray = createWireframeVertexArray(\n    context,\n    vertexArray,\n    mesh,\n  );\n  surfaceTile.wireframeVertexArray.mesh = mesh;\n}\n\n/**\n * Creates a vertex array for wireframe rendering of a terrain tile.\n *\n * @private\n *\n * @param {Context} context The context in which to create the vertex array.\n * @param {VertexArray} vertexArray The existing, non-wireframe vertex array.  The new vertex array\n *                      will share vertex buffers with this existing one.\n * @param {TerrainMesh} terrainMesh The terrain mesh containing non-wireframe indices.\n * @returns {VertexArray} The vertex array for wireframe rendering.\n */\nfunction createWireframeVertexArray(context, vertexArray, terrainMesh) {\n  const indices = terrainMesh.indices;\n\n  const geometry = {\n    indices: indices,\n    primitiveType: PrimitiveType.TRIANGLES,\n  };\n\n  GeometryPipeline.toWireframe(geometry);\n\n  const wireframeIndices = geometry.indices;\n  const wireframeIndexBuffer = Buffer.createIndexBuffer({\n    context: context,\n    typedArray: wireframeIndices,\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: IndexDatatype.fromSizeInBytes(\n      wireframeIndices.BYTES_PER_ELEMENT,\n    ),\n  });\n  return new VertexArray({\n    context: context,\n    attributes: vertexArray._attributes,\n    indexBuffer: wireframeIndexBuffer,\n  });\n}\n\nlet getDebugOrientedBoundingBox;\nlet getDebugBoundingSphere;\nlet debugDestroyPrimitive;\n\n(function () {\n  const instanceOBB = new GeometryInstance({\n    geometry: BoxOutlineGeometry.fromDimensions({\n      dimensions: new Cartesian3(2.0, 2.0, 2.0),\n    }),\n  });\n  const instanceSphere = new GeometryInstance({\n    geometry: new SphereOutlineGeometry({ radius: 1.0 }),\n  });\n  let modelMatrix = new Matrix4();\n  let previousVolume;\n  let primitive;\n\n  function createDebugPrimitive(instance) {\n    return new Primitive({\n      geometryInstances: instance,\n      appearance: new PerInstanceColorAppearance({\n        translucent: false,\n        flat: true,\n      }),\n      asynchronous: false,\n    });\n  }\n\n  getDebugOrientedBoundingBox = function (obb, color) {\n    if (obb === previousVolume) {\n      return primitive;\n    }\n    debugDestroyPrimitive();\n\n    previousVolume = obb;\n    modelMatrix = Matrix4.fromRotationTranslation(\n      obb.halfAxes,\n      obb.center,\n      modelMatrix,\n    );\n\n    instanceOBB.modelMatrix = modelMatrix;\n    instanceOBB.attributes.color =\n      ColorGeometryInstanceAttribute.fromColor(color);\n\n    primitive = createDebugPrimitive(instanceOBB);\n    return primitive;\n  };\n\n  getDebugBoundingSphere = function (sphere, color) {\n    if (sphere === previousVolume) {\n      return primitive;\n    }\n    debugDestroyPrimitive();\n\n    previousVolume = sphere;\n    modelMatrix = Matrix4.fromTranslation(sphere.center, modelMatrix);\n    modelMatrix = Matrix4.multiplyByUniformScale(\n      modelMatrix,\n      sphere.radius,\n      modelMatrix,\n    );\n\n    instanceSphere.modelMatrix = modelMatrix;\n    instanceSphere.attributes.color =\n      ColorGeometryInstanceAttribute.fromColor(color);\n\n    primitive = createDebugPrimitive(instanceSphere);\n    return primitive;\n  };\n\n  debugDestroyPrimitive = function () {\n    if (defined(primitive)) {\n      primitive.destroy();\n      primitive = undefined;\n      previousVolume = undefined;\n    }\n  };\n})();\n\nconst otherPassesInitialColor = new Cartesian4(0.0, 0.0, 0.0, 0.0);\nconst surfaceShaderSetOptionsScratch = {\n  frameState: undefined,\n  surfaceTile: undefined,\n  numberOfDayTextures: undefined,\n  applyBrightness: undefined,\n  applyContrast: undefined,\n  applyHue: undefined,\n  applySaturation: undefined,\n  applyGamma: undefined,\n  applyAlpha: undefined,\n  applyDayNightAlpha: undefined,\n  applySplit: undefined,\n  showReflectiveOcean: undefined,\n  showOceanWaves: undefined,\n  enableLighting: undefined,\n  dynamicAtmosphereLighting: undefined,\n  dynamicAtmosphereLightingFromSun: undefined,\n  showGroundAtmosphere: undefined,\n  perFragmentGroundAtmosphere: undefined,\n  hasVertexNormals: undefined,\n  useWebMercatorProjection: undefined,\n  enableFog: undefined,\n  enableClippingPlanes: undefined,\n  clippingPlanes: undefined,\n  enableClippingPolygons: undefined,\n  clippingPolygons: undefined,\n  clippedByBoundaries: undefined,\n  hasImageryLayerCutout: undefined,\n  colorCorrect: undefined,\n  colorToAlpha: undefined,\n  hasGeodeticSurfaceNormals: undefined,\n  hasExaggeration: undefined,\n};\n\nconst defaultUndergroundColor = Color.TRANSPARENT;\nconst defaultUndergroundColorAlphaByDistance = new NearFarScalar();\n\nfunction addDrawCommandsForTile(tileProvider, tile, frameState) {\n  const surfaceTile = tile.data;\n\n  if (!defined(surfaceTile.vertexArray)) {\n    if (surfaceTile.fill === undefined) {\n      // No fill was created for this tile, probably because this tile is not connected to\n      // any renderable tiles. So create a simple tile in the middle of the tile's possible\n      // height range.\n      surfaceTile.fill = new TerrainFillMesh(tile);\n    }\n    surfaceTile.fill.update(tileProvider, frameState);\n  }\n\n  const creditDisplay = frameState.creditDisplay;\n\n  const terrainData = surfaceTile.terrainData;\n  if (defined(terrainData) && defined(terrainData.credits)) {\n    const tileCredits = terrainData.credits;\n    for (\n      let tileCreditIndex = 0, tileCreditLength = tileCredits.length;\n      tileCreditIndex < tileCreditLength;\n      ++tileCreditIndex\n    ) {\n      creditDisplay.addCreditToNextFrame(tileCredits[tileCreditIndex]);\n    }\n  }\n\n  let maxTextures = ContextLimits.maximumTextureImageUnits;\n\n  let waterMaskTexture = surfaceTile.waterMaskTexture;\n  let waterMaskTranslationAndScale = surfaceTile.waterMaskTranslationAndScale;\n  if (!defined(waterMaskTexture) && defined(surfaceTile.fill)) {\n    waterMaskTexture = surfaceTile.fill.waterMaskTexture;\n    waterMaskTranslationAndScale =\n      surfaceTile.fill.waterMaskTranslationAndScale;\n  }\n\n  const cameraUnderground = frameState.cameraUnderground;\n\n  const globeTranslucencyState = frameState.globeTranslucencyState;\n  const translucent = globeTranslucencyState.translucent;\n  const frontFaceAlphaByDistance =\n    globeTranslucencyState.frontFaceAlphaByDistance;\n  const backFaceAlphaByDistance =\n    globeTranslucencyState.backFaceAlphaByDistance;\n  const translucencyRectangle = globeTranslucencyState.rectangle;\n\n  const undergroundColor =\n    tileProvider.undergroundColor ?? defaultUndergroundColor;\n  const undergroundColorAlphaByDistance =\n    tileProvider.undergroundColorAlphaByDistance ??\n    defaultUndergroundColorAlphaByDistance;\n  const showUndergroundColor =\n    isUndergroundVisible(tileProvider, frameState) &&\n    frameState.mode === SceneMode.SCENE3D &&\n    undergroundColor.alpha > 0.0 &&\n    (undergroundColorAlphaByDistance.nearValue > 0.0 ||\n      undergroundColorAlphaByDistance.farValue > 0.0);\n\n  const lambertDiffuseMultiplier = tileProvider.lambertDiffuseMultiplier;\n  const vertexShadowDarkness = tileProvider.vertexShadowDarkness;\n\n  const hasWaterMask = tileProvider.hasWaterMask && defined(waterMaskTexture);\n  const showReflectiveOcean = hasWaterMask && tileProvider.showWaterEffect;\n  const oceanNormalMap = tileProvider.oceanNormalMap;\n  const showOceanWaves = showReflectiveOcean && defined(oceanNormalMap);\n  const terrainProvider = tileProvider.terrainProvider;\n  const hasVertexNormals =\n    defined(terrainProvider) && tileProvider.terrainProvider.hasVertexNormals;\n  const enableFog =\n    frameState.fog.enabled && frameState.fog.renderable && !cameraUnderground;\n  const showGroundAtmosphere =\n    tileProvider.showGroundAtmosphere && frameState.mode === SceneMode.SCENE3D;\n  const castShadows =\n    ShadowMode.castShadows(tileProvider.shadows) && !translucent;\n  const receiveShadows =\n    ShadowMode.receiveShadows(tileProvider.shadows) && !translucent;\n\n  const hueShift = tileProvider.hueShift;\n  const saturationShift = tileProvider.saturationShift;\n  const brightnessShift = tileProvider.brightnessShift;\n\n  let colorCorrect = !(\n    CesiumMath.equalsEpsilon(hueShift, 0.0, CesiumMath.EPSILON7) &&\n    CesiumMath.equalsEpsilon(saturationShift, 0.0, CesiumMath.EPSILON7) &&\n    CesiumMath.equalsEpsilon(brightnessShift, 0.0, CesiumMath.EPSILON7)\n  );\n\n  let perFragmentGroundAtmosphere = false;\n  if (showGroundAtmosphere) {\n    const cameraDistance = Cartesian3.magnitude(frameState.camera.positionWC);\n    const fadeOutDistance = tileProvider.nightFadeOutDistance;\n    perFragmentGroundAtmosphere = cameraDistance > fadeOutDistance;\n  }\n\n  if (hasWaterMask) {\n    --maxTextures;\n  }\n  if (showOceanWaves) {\n    --maxTextures;\n  }\n  if (\n    defined(frameState.shadowState) &&\n    frameState.shadowState.shadowsEnabled\n  ) {\n    --maxTextures;\n  }\n  if (\n    defined(tileProvider.clippingPlanes) &&\n    tileProvider.clippingPlanes.enabled\n  ) {\n    --maxTextures;\n  }\n  if (\n    defined(tileProvider.clippingPolygons) &&\n    tileProvider.clippingPolygons.enabled\n  ) {\n    --maxTextures;\n    --maxTextures;\n  }\n\n  maxTextures -= globeTranslucencyState.numberOfTextureUniforms;\n\n  const mesh = surfaceTile.renderedMesh;\n  let rtc = mesh.center;\n  const encoding = mesh.encoding;\n  const tileBoundingRegion = surfaceTile.tileBoundingRegion;\n\n  const exaggeration = frameState.verticalExaggeration;\n  const exaggerationRelativeHeight =\n    frameState.verticalExaggerationRelativeHeight;\n  const hasExaggeration = exaggeration !== 1.0;\n  const hasGeodeticSurfaceNormals = encoding.hasGeodeticSurfaceNormals;\n\n  // Not used in 3D.\n  const tileRectangle = tileRectangleScratch;\n\n  // Only used for Mercator projections.\n  let southLatitude = 0.0;\n  let northLatitude = 0.0;\n  let southMercatorY = 0.0;\n  let oneOverMercatorHeight = 0.0;\n\n  let useWebMercatorProjection = false;\n\n  if (frameState.mode !== SceneMode.SCENE3D) {\n    const projection = frameState.mapProjection;\n    const southwest = projection.project(\n      Rectangle.southwest(tile.rectangle),\n      southwestScratch,\n    );\n    const northeast = projection.project(\n      Rectangle.northeast(tile.rectangle),\n      northeastScratch,\n    );\n\n    tileRectangle.x = southwest.x;\n    tileRectangle.y = southwest.y;\n    tileRectangle.z = northeast.x;\n    tileRectangle.w = northeast.y;\n\n    // In 2D and Columbus View, use the center of the tile for RTC rendering.\n    if (frameState.mode !== SceneMode.MORPHING) {\n      rtc = rtcScratch;\n      rtc.x = 0.0;\n      rtc.y = (tileRectangle.z + tileRectangle.x) * 0.5;\n      rtc.z = (tileRectangle.w + tileRectangle.y) * 0.5;\n      tileRectangle.x -= rtc.y;\n      tileRectangle.y -= rtc.z;\n      tileRectangle.z -= rtc.y;\n      tileRectangle.w -= rtc.z;\n    }\n\n    if (\n      frameState.mode === SceneMode.SCENE2D &&\n      encoding.quantization === TerrainQuantization.BITS12\n    ) {\n      // In 2D, the texture coordinates of the tile are interpolated over the rectangle to get the position in the vertex shader.\n      // When the texture coordinates are quantized, error is introduced. This can be seen through the 1px wide cracking\n      // between the quantized tiles in 2D. To compensate for the error, move the expand the rectangle in each direction by\n      // half the error amount.\n      const epsilon = (1.0 / (Math.pow(2.0, 12.0) - 1.0)) * 0.5;\n      const widthEpsilon = (tileRectangle.z - tileRectangle.x) * epsilon;\n      const heightEpsilon = (tileRectangle.w - tileRectangle.y) * epsilon;\n      tileRectangle.x -= widthEpsilon;\n      tileRectangle.y -= heightEpsilon;\n      tileRectangle.z += widthEpsilon;\n      tileRectangle.w += heightEpsilon;\n    }\n\n    if (projection instanceof WebMercatorProjection) {\n      southLatitude = tile.rectangle.south;\n      northLatitude = tile.rectangle.north;\n\n      southMercatorY =\n        WebMercatorProjection.geodeticLatitudeToMercatorAngle(southLatitude);\n\n      oneOverMercatorHeight =\n        1.0 /\n        (WebMercatorProjection.geodeticLatitudeToMercatorAngle(northLatitude) -\n          southMercatorY);\n\n      useWebMercatorProjection = true;\n    }\n  }\n\n  const surfaceShaderSetOptions = surfaceShaderSetOptionsScratch;\n  surfaceShaderSetOptions.frameState = frameState;\n  surfaceShaderSetOptions.surfaceTile = surfaceTile;\n  surfaceShaderSetOptions.hasWaterMask = hasWaterMask;\n  surfaceShaderSetOptions.showReflectiveOcean = showReflectiveOcean;\n  surfaceShaderSetOptions.showOceanWaves = showOceanWaves;\n  surfaceShaderSetOptions.enableLighting = tileProvider.enableLighting;\n  surfaceShaderSetOptions.dynamicAtmosphereLighting =\n    tileProvider.dynamicAtmosphereLighting;\n  surfaceShaderSetOptions.dynamicAtmosphereLightingFromSun =\n    tileProvider.dynamicAtmosphereLightingFromSun;\n  surfaceShaderSetOptions.showGroundAtmosphere = showGroundAtmosphere;\n  surfaceShaderSetOptions.atmosphereLightIntensity =\n    tileProvider.atmosphereLightIntensity;\n  surfaceShaderSetOptions.atmosphereRayleighCoefficient =\n    tileProvider.atmosphereRayleighCoefficient;\n  surfaceShaderSetOptions.atmosphereMieCoefficient =\n    tileProvider.atmosphereMieCoefficient;\n  surfaceShaderSetOptions.atmosphereRayleighScaleHeight =\n    tileProvider.atmosphereRayleighScaleHeight;\n  surfaceShaderSetOptions.atmosphereMieScaleHeight =\n    tileProvider.atmosphereMieScaleHeight;\n  surfaceShaderSetOptions.atmosphereMieAnisotropy =\n    tileProvider.atmosphereMieAnisotropy;\n  surfaceShaderSetOptions.perFragmentGroundAtmosphere =\n    perFragmentGroundAtmosphere;\n  surfaceShaderSetOptions.hasVertexNormals = hasVertexNormals;\n  surfaceShaderSetOptions.useWebMercatorProjection = useWebMercatorProjection;\n  surfaceShaderSetOptions.clippedByBoundaries = surfaceTile.clippedByBoundaries;\n  surfaceShaderSetOptions.hasGeodeticSurfaceNormals = hasGeodeticSurfaceNormals;\n  surfaceShaderSetOptions.hasExaggeration = hasExaggeration;\n\n  const tileImageryCollection = surfaceTile.imagery;\n  let imageryIndex = 0;\n  const imageryLen = tileImageryCollection.length;\n\n  const showSkirts =\n    tileProvider.showSkirts && !cameraUnderground && !translucent;\n  const backFaceCulling =\n    tileProvider.backFaceCulling && !cameraUnderground && !translucent;\n  const firstPassRenderState = backFaceCulling\n    ? tileProvider._renderState\n    : tileProvider._disableCullingRenderState;\n  const otherPassesRenderState = backFaceCulling\n    ? tileProvider._blendRenderState\n    : tileProvider._disableCullingBlendRenderState;\n  let renderState = firstPassRenderState;\n\n  let initialColor = tileProvider._firstPassInitialColor;\n\n  const context = frameState.context;\n\n  if (!defined(tileProvider._debug.boundingSphereTile)) {\n    debugDestroyPrimitive();\n  }\n\n  const materialUniformMapChanged =\n    tileProvider._materialUniformMap !== tileProvider.materialUniformMap;\n  if (materialUniformMapChanged) {\n    tileProvider._materialUniformMap = tileProvider.materialUniformMap;\n    const drawCommandsLength = tileProvider._drawCommands.length;\n    for (let i = 0; i < drawCommandsLength; ++i) {\n      tileProvider._uniformMaps[i] = createTileUniformMap(\n        frameState,\n        tileProvider,\n      );\n    }\n  }\n\n  do {\n    let numberOfDayTextures = 0;\n\n    let command;\n    let uniformMap;\n\n    if (tileProvider._drawCommands.length <= tileProvider._usedDrawCommands) {\n      command = new DrawCommand();\n      command.owner = tile;\n      command.cull = false;\n      command.boundingVolume = new BoundingSphere();\n      command.orientedBoundingBox = undefined;\n\n      uniformMap = createTileUniformMap(frameState, tileProvider);\n\n      tileProvider._drawCommands.push(command);\n      tileProvider._uniformMaps.push(uniformMap);\n    } else {\n      command = tileProvider._drawCommands[tileProvider._usedDrawCommands];\n      uniformMap = tileProvider._uniformMaps[tileProvider._usedDrawCommands];\n    }\n\n    command.owner = tile;\n\n    ++tileProvider._usedDrawCommands;\n\n    if (tile === tileProvider._debug.boundingSphereTile) {\n      const obb = tileBoundingRegion.boundingVolume;\n      const boundingSphere = tileBoundingRegion.boundingSphere;\n      // If a debug primitive already exists for this tile, it will not be\n      // re-created, to avoid allocation every frame. If it were possible\n      // to have more than one selected tile, this would have to change.\n      if (defined(obb)) {\n        getDebugOrientedBoundingBox(obb, Color.RED).update(frameState);\n      } else if (defined(boundingSphere)) {\n        getDebugBoundingSphere(boundingSphere, Color.RED).update(frameState);\n      }\n    }\n\n    const uniformMapProperties = uniformMap.properties;\n    Cartesian4.clone(initialColor, uniformMapProperties.initialColor);\n    uniformMapProperties.oceanNormalMap = oceanNormalMap;\n    uniformMapProperties.lightingFadeDistance.x =\n      tileProvider.lightingFadeOutDistance;\n    uniformMapProperties.lightingFadeDistance.y =\n      tileProvider.lightingFadeInDistance;\n    uniformMapProperties.nightFadeDistance.x =\n      tileProvider.nightFadeOutDistance;\n    uniformMapProperties.nightFadeDistance.y = tileProvider.nightFadeInDistance;\n    uniformMapProperties.atmosphereLightIntensity =\n      tileProvider.atmosphereLightIntensity;\n    uniformMapProperties.atmosphereRayleighCoefficient =\n      tileProvider.atmosphereRayleighCoefficient;\n    uniformMapProperties.atmosphereMieCoefficient =\n      tileProvider.atmosphereMieCoefficient;\n    uniformMapProperties.atmosphereRayleighScaleHeight =\n      tileProvider.atmosphereRayleighScaleHeight;\n    uniformMapProperties.atmosphereMieScaleHeight =\n      tileProvider.atmosphereMieScaleHeight;\n    uniformMapProperties.atmosphereMieAnisotropy =\n      tileProvider.atmosphereMieAnisotropy;\n    uniformMapProperties.zoomedOutOceanSpecularIntensity =\n      tileProvider.zoomedOutOceanSpecularIntensity;\n\n    const frontFaceAlphaByDistanceFinal = cameraUnderground\n      ? backFaceAlphaByDistance\n      : frontFaceAlphaByDistance;\n    const backFaceAlphaByDistanceFinal = cameraUnderground\n      ? frontFaceAlphaByDistance\n      : backFaceAlphaByDistance;\n\n    if (defined(frontFaceAlphaByDistanceFinal)) {\n      Cartesian4.fromElements(\n        frontFaceAlphaByDistanceFinal.near,\n        frontFaceAlphaByDistanceFinal.nearValue,\n        frontFaceAlphaByDistanceFinal.far,\n        frontFaceAlphaByDistanceFinal.farValue,\n        uniformMapProperties.frontFaceAlphaByDistance,\n      );\n      Cartesian4.fromElements(\n        backFaceAlphaByDistanceFinal.near,\n        backFaceAlphaByDistanceFinal.nearValue,\n        backFaceAlphaByDistanceFinal.far,\n        backFaceAlphaByDistanceFinal.farValue,\n        uniformMapProperties.backFaceAlphaByDistance,\n      );\n    }\n\n    Cartesian4.fromElements(\n      undergroundColorAlphaByDistance.near,\n      undergroundColorAlphaByDistance.nearValue,\n      undergroundColorAlphaByDistance.far,\n      undergroundColorAlphaByDistance.farValue,\n      uniformMapProperties.undergroundColorAlphaByDistance,\n    );\n    Color.clone(undergroundColor, uniformMapProperties.undergroundColor);\n\n    uniformMapProperties.lambertDiffuseMultiplier = lambertDiffuseMultiplier;\n    uniformMapProperties.vertexShadowDarkness = vertexShadowDarkness;\n\n    const highlightFillTile =\n      !defined(surfaceTile.vertexArray) &&\n      defined(tileProvider.fillHighlightColor) &&\n      tileProvider.fillHighlightColor.alpha > 0.0;\n    if (highlightFillTile) {\n      Color.clone(\n        tileProvider.fillHighlightColor,\n        uniformMapProperties.fillHighlightColor,\n      );\n    }\n\n    uniformMapProperties.verticalExaggerationAndRelativeHeight.x = exaggeration;\n    uniformMapProperties.verticalExaggerationAndRelativeHeight.y =\n      exaggerationRelativeHeight;\n\n    uniformMapProperties.center3D = mesh.center;\n    Cartesian3.clone(rtc, uniformMapProperties.rtc);\n\n    Cartesian4.clone(tileRectangle, uniformMapProperties.tileRectangle);\n    uniformMapProperties.southAndNorthLatitude.x = southLatitude;\n    uniformMapProperties.southAndNorthLatitude.y = northLatitude;\n    uniformMapProperties.southMercatorYAndOneOverHeight.x = southMercatorY;\n    uniformMapProperties.southMercatorYAndOneOverHeight.y =\n      oneOverMercatorHeight;\n\n    // Convert tile limiter rectangle from cartographic to texture space using the tileRectangle.\n    const localizedCartographicLimitRectangle =\n      localizedCartographicLimitRectangleScratch;\n    const cartographicLimitRectangle = clipRectangleAntimeridian(\n      tile.rectangle,\n      tileProvider.cartographicLimitRectangle,\n    );\n\n    const localizedTranslucencyRectangle =\n      localizedTranslucencyRectangleScratch;\n    const clippedTranslucencyRectangle = clipRectangleAntimeridian(\n      tile.rectangle,\n      translucencyRectangle,\n    );\n\n    Cartesian3.fromElements(\n      hueShift,\n      saturationShift,\n      brightnessShift,\n      uniformMapProperties.hsbShift,\n    );\n\n    const cartographicTileRectangle = tile.rectangle;\n    const inverseTileWidth = 1.0 / cartographicTileRectangle.width;\n    const inverseTileHeight = 1.0 / cartographicTileRectangle.height;\n    localizedCartographicLimitRectangle.x =\n      (cartographicLimitRectangle.west - cartographicTileRectangle.west) *\n      inverseTileWidth;\n    localizedCartographicLimitRectangle.y =\n      (cartographicLimitRectangle.south - cartographicTileRectangle.south) *\n      inverseTileHeight;\n    localizedCartographicLimitRectangle.z =\n      (cartographicLimitRectangle.east - cartographicTileRectangle.west) *\n      inverseTileWidth;\n    localizedCartographicLimitRectangle.w =\n      (cartographicLimitRectangle.north - cartographicTileRectangle.south) *\n      inverseTileHeight;\n\n    Cartesian4.clone(\n      localizedCartographicLimitRectangle,\n      uniformMapProperties.localizedCartographicLimitRectangle,\n    );\n\n    localizedTranslucencyRectangle.x =\n      (clippedTranslucencyRectangle.west - cartographicTileRectangle.west) *\n      inverseTileWidth;\n    localizedTranslucencyRectangle.y =\n      (clippedTranslucencyRectangle.south - cartographicTileRectangle.south) *\n      inverseTileHeight;\n    localizedTranslucencyRectangle.z =\n      (clippedTranslucencyRectangle.east - cartographicTileRectangle.west) *\n      inverseTileWidth;\n    localizedTranslucencyRectangle.w =\n      (clippedTranslucencyRectangle.north - cartographicTileRectangle.south) *\n      inverseTileHeight;\n\n    Cartesian4.clone(\n      localizedTranslucencyRectangle,\n      uniformMapProperties.localizedTranslucencyRectangle,\n    );\n\n    // For performance, render fog only when fog is enabled and the effect of\n    // fog would be non-negligible. This prevents the shader from running when\n    // the camera is in space, for example.\n    const applyFog =\n      enableFog &&\n      CesiumMath.fog(tile._distance, frameState.fog.density) >\n        CesiumMath.EPSILON3;\n    colorCorrect = colorCorrect && (applyFog || showGroundAtmosphere);\n\n    let applyBrightness = false;\n    let applyContrast = false;\n    let applyHue = false;\n    let applySaturation = false;\n    let applyGamma = false;\n    let applyAlpha = false;\n    let applyDayNightAlpha = false;\n    let applySplit = false;\n    let applyCutout = false;\n    let applyColorToAlpha = false;\n\n    while (numberOfDayTextures < maxTextures && imageryIndex < imageryLen) {\n      const tileImagery = tileImageryCollection[imageryIndex];\n      const imagery = tileImagery.readyImagery;\n      ++imageryIndex;\n\n      if (!defined(imagery) || imagery.imageryLayer.alpha === 0.0) {\n        continue;\n      }\n\n      const texture = tileImagery.useWebMercatorT\n        ? imagery.textureWebMercator\n        : imagery.texture;\n\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(texture)) {\n        // Our \"ready\" texture isn't actually ready.  This should never happen.\n        //\n        // Side note: It IS possible for it to not be in the READY ImageryState, though.\n        // This can happen when a single imagery tile is shared by two terrain tiles (common)\n        // and one of them (A) needs a geographic version of the tile because it is near the poles,\n        // and the other (B) does not.  B can and will transition the imagery tile to the READY state\n        // without reprojecting to geographic.  Then, later, A will deem that same tile not-ready-yet\n        // because it only has the Web Mercator texture, and flip it back to the TRANSITIONING state.\n        // The imagery tile won't be in the READY state anymore, but it's still READY enough for B's\n        // purposes.\n        throw new DeveloperError(\"readyImagery is not actually ready!\");\n      }\n      //>>includeEnd('debug');\n\n      const imageryLayer = imagery.imageryLayer;\n\n      if (!defined(tileImagery.textureTranslationAndScale)) {\n        tileImagery.textureTranslationAndScale =\n          imageryLayer._calculateTextureTranslationAndScale(tile, tileImagery);\n      }\n\n      uniformMapProperties.dayTextures[numberOfDayTextures] = texture;\n      uniformMapProperties.dayTextureTranslationAndScale[numberOfDayTextures] =\n        tileImagery.textureTranslationAndScale;\n      uniformMapProperties.dayTextureTexCoordsRectangle[numberOfDayTextures] =\n        tileImagery.textureCoordinateRectangle;\n      uniformMapProperties.dayTextureUseWebMercatorT[numberOfDayTextures] =\n        tileImagery.useWebMercatorT;\n\n      uniformMapProperties.dayTextureAlpha[numberOfDayTextures] =\n        imageryLayer.alpha;\n      applyAlpha =\n        applyAlpha ||\n        uniformMapProperties.dayTextureAlpha[numberOfDayTextures] !== 1.0;\n\n      uniformMapProperties.dayTextureNightAlpha[numberOfDayTextures] =\n        imageryLayer.nightAlpha;\n      applyDayNightAlpha =\n        applyDayNightAlpha ||\n        uniformMapProperties.dayTextureNightAlpha[numberOfDayTextures] !== 1.0;\n\n      uniformMapProperties.dayTextureDayAlpha[numberOfDayTextures] =\n        imageryLayer.dayAlpha;\n      applyDayNightAlpha =\n        applyDayNightAlpha ||\n        uniformMapProperties.dayTextureDayAlpha[numberOfDayTextures] !== 1.0;\n\n      uniformMapProperties.dayTextureBrightness[numberOfDayTextures] =\n        imageryLayer.brightness;\n      applyBrightness =\n        applyBrightness ||\n        uniformMapProperties.dayTextureBrightness[numberOfDayTextures] !==\n          ImageryLayer.DEFAULT_BRIGHTNESS;\n\n      uniformMapProperties.dayTextureContrast[numberOfDayTextures] =\n        imageryLayer.contrast;\n      applyContrast =\n        applyContrast ||\n        uniformMapProperties.dayTextureContrast[numberOfDayTextures] !==\n          ImageryLayer.DEFAULT_CONTRAST;\n\n      uniformMapProperties.dayTextureHue[numberOfDayTextures] =\n        imageryLayer.hue;\n      applyHue =\n        applyHue ||\n        uniformMapProperties.dayTextureHue[numberOfDayTextures] !==\n          ImageryLayer.DEFAULT_HUE;\n\n      uniformMapProperties.dayTextureSaturation[numberOfDayTextures] =\n        imageryLayer.saturation;\n      applySaturation =\n        applySaturation ||\n        uniformMapProperties.dayTextureSaturation[numberOfDayTextures] !==\n          ImageryLayer.DEFAULT_SATURATION;\n\n      uniformMapProperties.dayTextureOneOverGamma[numberOfDayTextures] =\n        1.0 / imageryLayer.gamma;\n      applyGamma =\n        applyGamma ||\n        uniformMapProperties.dayTextureOneOverGamma[numberOfDayTextures] !==\n          1.0 / ImageryLayer.DEFAULT_GAMMA;\n\n      uniformMapProperties.dayTextureSplit[numberOfDayTextures] =\n        imageryLayer.splitDirection;\n      applySplit =\n        applySplit ||\n        uniformMapProperties.dayTextureSplit[numberOfDayTextures] !== 0.0;\n\n      // Update cutout rectangle\n      let dayTextureCutoutRectangle =\n        uniformMapProperties.dayTextureCutoutRectangles[numberOfDayTextures];\n      if (!defined(dayTextureCutoutRectangle)) {\n        dayTextureCutoutRectangle =\n          uniformMapProperties.dayTextureCutoutRectangles[numberOfDayTextures] =\n            new Cartesian4();\n      }\n\n      Cartesian4.clone(Cartesian4.ZERO, dayTextureCutoutRectangle);\n      if (defined(imageryLayer.cutoutRectangle)) {\n        const cutoutRectangle = clipRectangleAntimeridian(\n          cartographicTileRectangle,\n          imageryLayer.cutoutRectangle,\n        );\n        const intersection = Rectangle.simpleIntersection(\n          cutoutRectangle,\n          cartographicTileRectangle,\n          rectangleIntersectionScratch,\n        );\n        applyCutout = defined(intersection) || applyCutout;\n\n        dayTextureCutoutRectangle.x =\n          (cutoutRectangle.west - cartographicTileRectangle.west) *\n          inverseTileWidth;\n        dayTextureCutoutRectangle.y =\n          (cutoutRectangle.south - cartographicTileRectangle.south) *\n          inverseTileHeight;\n        dayTextureCutoutRectangle.z =\n          (cutoutRectangle.east - cartographicTileRectangle.west) *\n          inverseTileWidth;\n        dayTextureCutoutRectangle.w =\n          (cutoutRectangle.north - cartographicTileRectangle.south) *\n          inverseTileHeight;\n      }\n\n      // Update color to alpha\n      let colorToAlpha =\n        uniformMapProperties.colorsToAlpha[numberOfDayTextures];\n      if (!defined(colorToAlpha)) {\n        colorToAlpha = uniformMapProperties.colorsToAlpha[numberOfDayTextures] =\n          new Cartesian4();\n      }\n\n      const hasColorToAlpha =\n        defined(imageryLayer.colorToAlpha) &&\n        imageryLayer.colorToAlphaThreshold > 0.0;\n      applyColorToAlpha = applyColorToAlpha || hasColorToAlpha;\n\n      if (hasColorToAlpha) {\n        const color = imageryLayer.colorToAlpha;\n        colorToAlpha.x = color.red;\n        colorToAlpha.y = color.green;\n        colorToAlpha.z = color.blue;\n        colorToAlpha.w = imageryLayer.colorToAlphaThreshold;\n      } else {\n        colorToAlpha.w = -1.0;\n      }\n\n      if (defined(imagery.credits)) {\n        const credits = imagery.credits;\n        for (\n          let creditIndex = 0, creditLength = credits.length;\n          creditIndex < creditLength;\n          ++creditIndex\n        ) {\n          creditDisplay.addCreditToNextFrame(credits[creditIndex]);\n        }\n      }\n\n      ++numberOfDayTextures;\n    }\n\n    // trim texture array to the used length so we don't end up using old textures\n    // which might get destroyed eventually\n    uniformMapProperties.dayTextures.length = numberOfDayTextures;\n    uniformMapProperties.waterMask = waterMaskTexture;\n    Cartesian4.clone(\n      waterMaskTranslationAndScale,\n      uniformMapProperties.waterMaskTranslationAndScale,\n    );\n\n    uniformMapProperties.minMaxHeight.x = encoding.minimumHeight;\n    uniformMapProperties.minMaxHeight.y = encoding.maximumHeight;\n    Matrix4.clone(encoding.matrix, uniformMapProperties.scaleAndBias);\n\n    // update clipping planes\n    const clippingPlanes = tileProvider._clippingPlanes;\n    const clippingPlanesEnabled =\n      defined(clippingPlanes) && clippingPlanes.enabled && tile.isClipped;\n    if (clippingPlanesEnabled) {\n      uniformMapProperties.clippingPlanesEdgeColor = Color.clone(\n        clippingPlanes.edgeColor,\n        uniformMapProperties.clippingPlanesEdgeColor,\n      );\n      uniformMapProperties.clippingPlanesEdgeWidth = clippingPlanes.edgeWidth;\n    }\n\n    // update clipping polygons\n    const clippingPolygons = tileProvider._clippingPolygons;\n    const clippingPolygonsEnabled =\n      defined(clippingPolygons) && clippingPolygons.enabled && tile.isClipped;\n\n    surfaceShaderSetOptions.numberOfDayTextures = numberOfDayTextures;\n    surfaceShaderSetOptions.applyBrightness = applyBrightness;\n    surfaceShaderSetOptions.applyContrast = applyContrast;\n    surfaceShaderSetOptions.applyHue = applyHue;\n    surfaceShaderSetOptions.applySaturation = applySaturation;\n    surfaceShaderSetOptions.applyGamma = applyGamma;\n    surfaceShaderSetOptions.applyAlpha = applyAlpha;\n    surfaceShaderSetOptions.applyDayNightAlpha = applyDayNightAlpha;\n    surfaceShaderSetOptions.applySplit = applySplit;\n    surfaceShaderSetOptions.enableFog = applyFog;\n    surfaceShaderSetOptions.enableClippingPlanes = clippingPlanesEnabled;\n    surfaceShaderSetOptions.clippingPlanes = clippingPlanes;\n    surfaceShaderSetOptions.enableClippingPolygons = clippingPolygonsEnabled;\n    surfaceShaderSetOptions.clippingPolygons = clippingPolygons;\n    surfaceShaderSetOptions.hasImageryLayerCutout = applyCutout;\n    surfaceShaderSetOptions.colorCorrect = colorCorrect;\n    surfaceShaderSetOptions.highlightFillTile = highlightFillTile;\n    surfaceShaderSetOptions.colorToAlpha = applyColorToAlpha;\n    surfaceShaderSetOptions.showUndergroundColor = showUndergroundColor;\n    surfaceShaderSetOptions.translucent = translucent;\n\n    let count = surfaceTile.renderedMesh.indices.length;\n    if (!showSkirts) {\n      count = surfaceTile.renderedMesh.indexCountWithoutSkirts;\n    }\n\n    command.shaderProgram = tileProvider._surfaceShaderSet.getShaderProgram(\n      surfaceShaderSetOptions,\n    );\n    command.castShadows = castShadows;\n    command.receiveShadows = receiveShadows;\n    command.renderState = renderState;\n    command.primitiveType = PrimitiveType.TRIANGLES;\n    command.vertexArray =\n      surfaceTile.vertexArray || surfaceTile.fill.vertexArray;\n    command.count = count;\n    command.uniformMap = uniformMap;\n    command.pass = Pass.GLOBE;\n\n    if (tileProvider._debug.wireframe) {\n      createWireframeVertexArrayIfNecessary(context, tileProvider, tile);\n      if (defined(surfaceTile.wireframeVertexArray)) {\n        command.vertexArray = surfaceTile.wireframeVertexArray;\n        command.primitiveType = PrimitiveType.LINES;\n        command.count = count * 2;\n      }\n    }\n\n    let boundingVolume = command.boundingVolume;\n    const orientedBoundingBox = command.orientedBoundingBox;\n\n    if (frameState.mode !== SceneMode.SCENE3D) {\n      BoundingSphere.fromRectangleWithHeights2D(\n        tile.rectangle,\n        frameState.mapProjection,\n        tileBoundingRegion.minimumHeight,\n        tileBoundingRegion.maximumHeight,\n        boundingVolume,\n      );\n      Cartesian3.fromElements(\n        boundingVolume.center.z,\n        boundingVolume.center.x,\n        boundingVolume.center.y,\n        boundingVolume.center,\n      );\n\n      if (frameState.mode === SceneMode.MORPHING) {\n        boundingVolume = BoundingSphere.union(\n          tileBoundingRegion.boundingSphere,\n          boundingVolume,\n          boundingVolume,\n        );\n      }\n    } else {\n      command.boundingVolume = BoundingSphere.clone(\n        tileBoundingRegion.boundingSphere,\n        boundingVolume,\n      );\n      command.orientedBoundingBox = OrientedBoundingBox.clone(\n        tileBoundingRegion.boundingVolume,\n        orientedBoundingBox,\n      );\n    }\n\n    command.dirty = true;\n\n    if (translucent) {\n      globeTranslucencyState.updateDerivedCommands(command, frameState);\n    }\n\n    pushCommand(command, frameState);\n\n    renderState = otherPassesRenderState;\n    initialColor = otherPassesInitialColor;\n  } while (imageryIndex < imageryLen);\n}\nexport default GlobeSurfaceTileProvider;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\n\n/**\n * Properties for controlling globe translucency.\n *\n * @alias GlobeTranslucency\n * @constructor\n */\nfunction GlobeTranslucency() {\n  this._enabled = false;\n  this._frontFaceAlpha = 1.0;\n  this._frontFaceAlphaByDistance = undefined;\n  this._backFaceAlpha = 1.0;\n  this._backFaceAlphaByDistance = undefined;\n  this._rectangle = Rectangle.clone(Rectangle.MAX_VALUE);\n}\n\nObject.defineProperties(GlobeTranslucency.prototype, {\n  /**\n   * When true, the globe is rendered as a translucent surface.\n   * <br /><br />\n   * The alpha is computed by blending {@link Globe#material}, {@link Globe#imageryLayers},\n   * and {@link Globe#baseColor}, all of which may contain translucency, and then multiplying by\n   * {@link GlobeTranslucency#frontFaceAlpha} and {@link GlobeTranslucency#frontFaceAlphaByDistance} for front faces and\n   * {@link GlobeTranslucency#backFaceAlpha} and {@link GlobeTranslucency#backFaceAlphaByDistance} for back faces.\n   * When the camera is underground back faces and front faces are swapped, i.e. back-facing geometry\n   * is considered front facing.\n   * <br /><br />\n   * Translucency is disabled by default.\n   *\n   * @memberof GlobeTranslucency.prototype\n   *\n   * @type {boolean}\n   * @default false\n   *\n   * @see GlobeTranslucency#frontFaceAlpha\n   * @see GlobeTranslucency#frontFaceAlphaByDistance\n   * @see GlobeTranslucency#backFaceAlpha\n   * @see GlobeTranslucency#backFaceAlphaByDistance\n   */\n  enabled: {\n    get: function () {\n      return this._enabled;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"enabled\", value);\n      //>>includeEnd('debug');\n      this._enabled = value;\n    },\n  },\n\n  /**\n   * A constant translucency to apply to front faces of the globe.\n   * <br /><br />\n   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n   *\n   * @memberof GlobeTranslucency.prototype\n   *\n   * @type {number}\n   * @default 1.0\n   *\n   * @see GlobeTranslucency#enabled\n   * @see GlobeTranslucency#frontFaceAlphaByDistance\n   *\n   * @example\n   * // Set front face translucency to 0.5.\n   * globe.translucency.frontFaceAlpha = 0.5;\n   * globe.translucency.enabled = true;\n   */\n  frontFaceAlpha: {\n    get: function () {\n      return this._frontFaceAlpha;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"frontFaceAlpha\", value, 0.0);\n      Check.typeOf.number.lessThanOrEquals(\"frontFaceAlpha\", value, 1.0);\n      //>>includeEnd('debug');\n      this._frontFaceAlpha = value;\n    },\n  },\n  /**\n   * Gets or sets near and far translucency properties of front faces of the globe based on the distance to the camera.\n   * The translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the translucency remains clamped to the nearest bound.  If undefined,\n   * frontFaceAlphaByDistance will be disabled.\n   * <br /><br />\n   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n   *\n   * @memberof GlobeTranslucency.prototype\n   *\n   * @type {NearFarScalar}\n   * @default undefined\n   *\n   * @see GlobeTranslucency#enabled\n   * @see GlobeTranslucency#frontFaceAlpha\n   *\n   * @example\n   * // Example 1.\n   * // Set front face translucency to 0.5 when the\n   * // camera is 1500 meters from the surface and 1.0\n   * // as the camera distance approaches 8.0e6 meters.\n   * globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);\n   * globe.translucency.enabled = true;\n   *\n   * @example\n   * // Example 2.\n   * // Disable front face translucency by distance\n   * globe.translucency.frontFaceAlphaByDistance = undefined;\n   */\n  frontFaceAlphaByDistance: {\n    get: function () {\n      return this._frontFaceAlphaByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far < value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n      this._frontFaceAlphaByDistance = NearFarScalar.clone(\n        value,\n        this._frontFaceAlphaByDistance,\n      );\n    },\n  },\n\n  /**\n   * A constant translucency to apply to back faces of the globe.\n   * <br /><br />\n   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n   *\n   * @memberof GlobeTranslucency.prototype\n   *\n   * @type {number}\n   * @default 1.0\n   *\n   * @see GlobeTranslucency#enabled\n   * @see GlobeTranslucency#backFaceAlphaByDistance\n   *\n   * @example\n   * // Set back face translucency to 0.5.\n   * globe.translucency.backFaceAlpha = 0.5;\n   * globe.translucency.enabled = true;\n   */\n  backFaceAlpha: {\n    get: function () {\n      return this._backFaceAlpha;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"backFaceAlpha\", value, 0.0);\n      Check.typeOf.number.lessThanOrEquals(\"backFaceAlpha\", value, 1.0);\n      //>>includeEnd('debug');\n      this._backFaceAlpha = value;\n    },\n  },\n  /**\n   * Gets or sets near and far translucency properties of back faces of the globe based on the distance to the camera.\n   * The translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the translucency remains clamped to the nearest bound.  If undefined,\n   * backFaceAlphaByDistance will be disabled.\n   * <br /><br />\n   * {@link GlobeTranslucency#enabled} must be set to true for this option to take effect.\n   *\n   * @memberof GlobeTranslucency.prototype\n   *\n   * @type {NearFarScalar}\n   * @default undefined\n   *\n   * @see GlobeTranslucency#enabled\n   * @see GlobeTranslucency#backFaceAlpha\n   *\n   * @example\n   * // Example 1.\n   * // Set back face translucency to 0.5 when the\n   * // camera is 1500 meters from the surface and 1.0\n   * // as the camera distance approaches 8.0e6 meters.\n   * globe.translucency.backFaceAlphaByDistance = new Cesium.NearFarScalar(1.5e2, 0.5, 8.0e6, 1.0);\n   * globe.translucency.enabled = true;\n   *\n   * @example\n   * // Example 2.\n   * // Disable back face translucency by distance\n   * globe.translucency.backFaceAlphaByDistance = undefined;\n   */\n  backFaceAlphaByDistance: {\n    get: function () {\n      return this._backFaceAlphaByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far < value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n      this._backFaceAlphaByDistance = NearFarScalar.clone(\n        value,\n        this._backFaceAlphaByDistance,\n      );\n    },\n  },\n\n  /**\n   * A property specifying a {@link Rectangle} used to limit translucency to a cartographic area.\n   * Defaults to the maximum extent of cartographic coordinates.\n   *\n   * @memberof GlobeTranslucency.prototype\n   *\n   * @type {Rectangle}\n   * @default {@link Rectangle.MAX_VALUE}\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n    set: function (value) {\n      if (!defined(value)) {\n        value = Rectangle.clone(Rectangle.MAX_VALUE);\n      }\n      Rectangle.clone(value, this._rectangle);\n    },\n  },\n});\n\nexport default GlobeTranslucency;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport PassThroughDepth from \"../Shaders/PostProcessStages/PassThroughDepth.js\";\n\n/**\n * @private\n */\nfunction GlobeTranslucencyFramebuffer() {\n  this._framebuffer = new FramebufferManager({\n    depthStencil: true,\n    supportsDepthTexture: true,\n  });\n  this._packedDepthFramebuffer = new FramebufferManager();\n\n  this._renderState = undefined;\n\n  this._packedDepthCommand = undefined;\n  this._clearCommand = undefined;\n\n  this._viewport = new BoundingRectangle();\n  this._useScissorTest = false;\n  this._scissorRectangle = undefined;\n  this._useHdr = undefined;\n}\n\nObject.defineProperties(GlobeTranslucencyFramebuffer.prototype, {\n  // Exposed for testing\n  classificationTexture: {\n    get: function () {\n      return this._framebuffer.getColorTexture();\n    },\n  },\n  classificationFramebuffer: {\n    get: function () {\n      return this._framebuffer.framebuffer;\n    },\n  },\n  // Exposed for testing\n  packedDepthFramebuffer: {\n    get: function () {\n      return this._packedDepthFramebuffer.framebuffer;\n    },\n  },\n  depthStencilTexture: {\n    get: function () {\n      return this._framebuffer.getDepthStencilTexture();\n    },\n  },\n  // Exposed for testing\n  depthStencilRenderbuffer: {\n    get: function () {\n      return this._framebuffer.getDepthStencilRenderbuffer();\n    },\n  },\n  packedDepthTexture: {\n    get: function () {\n      return this._packedDepthFramebuffer.getColorTexture();\n    },\n  },\n});\n\nfunction destroyResources(globeTranslucency) {\n  globeTranslucency._framebuffer.destroy();\n  globeTranslucency._packedDepthFramebuffer.destroy();\n}\n\nfunction updateResources(globeTranslucency, context, width, height, hdr) {\n  const pixelDatatype = hdr\n    ? context.halfFloatingPointTexture\n      ? PixelDatatype.HALF_FLOAT\n      : PixelDatatype.FLOAT\n    : PixelDatatype.UNSIGNED_BYTE;\n  globeTranslucency._framebuffer.update(\n    context,\n    width,\n    height,\n    1,\n    pixelDatatype,\n  );\n  globeTranslucency._packedDepthFramebuffer.update(context, width, height);\n}\n\nfunction updateCommands(globeTranslucency, context, width, height, passState) {\n  globeTranslucency._viewport.width = width;\n  globeTranslucency._viewport.height = height;\n\n  const useScissorTest = !BoundingRectangle.equals(\n    globeTranslucency._viewport,\n    passState.viewport,\n  );\n  let updateScissor = useScissorTest !== globeTranslucency._useScissorTest;\n  globeTranslucency._useScissorTest = useScissorTest;\n\n  if (\n    !BoundingRectangle.equals(\n      globeTranslucency._scissorRectangle,\n      passState.viewport,\n    )\n  ) {\n    globeTranslucency._scissorRectangle = BoundingRectangle.clone(\n      passState.viewport,\n      globeTranslucency._scissorRectangle,\n    );\n    updateScissor = true;\n  }\n\n  if (\n    !defined(globeTranslucency._renderState) ||\n    !BoundingRectangle.equals(\n      globeTranslucency._viewport,\n      globeTranslucency._renderState.viewport,\n    ) ||\n    updateScissor\n  ) {\n    globeTranslucency._renderState = RenderState.fromCache({\n      viewport: globeTranslucency._viewport,\n      scissorTest: {\n        enabled: globeTranslucency._useScissorTest,\n        rectangle: globeTranslucency._scissorRectangle,\n      },\n    });\n  }\n\n  if (!defined(globeTranslucency._packedDepthCommand)) {\n    globeTranslucency._packedDepthCommand = context.createViewportQuadCommand(\n      PassThroughDepth,\n      {\n        uniformMap: {\n          u_depthTexture: function () {\n            return globeTranslucency.depthStencilTexture;\n          },\n        },\n        owner: globeTranslucency,\n      },\n    );\n  }\n\n  if (!defined(globeTranslucency._clearCommand)) {\n    globeTranslucency._clearCommand = new ClearCommand({\n      color: new Color(0.0, 0.0, 0.0, 0.0),\n      depth: 1.0,\n      stencil: 0.0,\n      owner: globeTranslucency,\n    });\n  }\n\n  globeTranslucency._packedDepthCommand.framebuffer =\n    globeTranslucency._packedDepthFramebuffer.framebuffer;\n  globeTranslucency._packedDepthCommand.renderState =\n    globeTranslucency._renderState;\n  globeTranslucency._clearCommand.framebuffer =\n    globeTranslucency.classificationFramebuffer;\n  globeTranslucency._clearCommand.renderState = globeTranslucency._renderState;\n}\n\nGlobeTranslucencyFramebuffer.prototype.updateAndClear = function (\n  hdr,\n  viewport,\n  context,\n  passState,\n) {\n  const width = viewport.width;\n  const height = viewport.height;\n\n  updateResources(this, context, width, height, hdr);\n  updateCommands(this, context, width, height, passState);\n\n  this._useHdr = hdr;\n};\n\nGlobeTranslucencyFramebuffer.prototype.clearClassification = function (\n  context,\n  passState,\n) {\n  this._clearCommand.execute(context, passState);\n};\n\nGlobeTranslucencyFramebuffer.prototype.packDepth = function (\n  context,\n  passState,\n) {\n  this._packedDepthCommand.execute(context, passState);\n  return this.packedDepthTexture;\n};\n\nGlobeTranslucencyFramebuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nGlobeTranslucencyFramebuffer.prototype.destroy = function () {\n  destroyResources(this);\n  return destroyObject(this);\n};\n\nexport default GlobeTranslucencyFramebuffer;\n","import combine from \"../Core/combine.js\";\nimport defined from \"../Core/defined.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nconst DerivedCommandType = {\n  OPAQUE_FRONT_FACE: 0,\n  OPAQUE_BACK_FACE: 1,\n  DEPTH_ONLY_FRONT_FACE: 2,\n  DEPTH_ONLY_BACK_FACE: 3,\n  DEPTH_ONLY_FRONT_AND_BACK_FACE: 4,\n  TRANSLUCENT_FRONT_FACE: 5,\n  TRANSLUCENT_BACK_FACE: 6,\n  TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST: 7,\n  TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST: 8,\n  PICK_FRONT_FACE: 9,\n  PICK_BACK_FACE: 10,\n  DERIVED_COMMANDS_MAXIMUM_LENGTH: 11,\n};\n\nconst derivedCommandsMaximumLength =\n  DerivedCommandType.DERIVED_COMMANDS_MAXIMUM_LENGTH;\n\nconst DerivedCommandNames = [\n  \"opaqueFrontFaceCommand\",\n  \"opaqueBackFaceCommand\",\n  \"depthOnlyFrontFaceCommand\",\n  \"depthOnlyBackFaceCommand\",\n  \"depthOnlyFrontAndBackFaceCommand\",\n  \"translucentFrontFaceCommand\",\n  \"translucentBackFaceCommand\",\n  \"translucentFrontFaceManualDepthTestCommand\",\n  \"translucentBackFaceManualDepthTestCommand\",\n  \"pickFrontFaceCommand\",\n  \"pickBackFaceCommand\",\n];\n\n/**\n * @private\n */\nfunction GlobeTranslucencyState() {\n  this._frontFaceAlphaByDistance = new NearFarScalar(0.0, 1.0, 0.0, 1.0);\n  this._backFaceAlphaByDistance = new NearFarScalar(0.0, 1.0, 0.0, 1.0);\n\n  this._frontFaceTranslucent = false;\n  this._backFaceTranslucent = false;\n  this._requiresManualDepthTest = false;\n  this._sunVisibleThroughGlobe = false;\n  this._environmentVisible = false;\n  this._useDepthPlane = false;\n  this._numberOfTextureUniforms = 0;\n  this._globeTranslucencyFramebuffer = undefined;\n  this._rectangle = Rectangle.clone(Rectangle.MAX_VALUE);\n\n  this._derivedCommandKey = 0;\n  this._derivedCommandsDirty = false;\n  this._derivedCommandPacks = undefined;\n\n  this._derivedCommandTypes = new Array(derivedCommandsMaximumLength);\n  this._derivedBlendCommandTypes = new Array(derivedCommandsMaximumLength);\n  this._derivedPickCommandTypes = new Array(derivedCommandsMaximumLength);\n  this._derivedCommandTypesToUpdate = new Array(derivedCommandsMaximumLength);\n\n  this._derivedCommandsLength = 0;\n  this._derivedBlendCommandsLength = 0;\n  this._derivedPickCommandsLength = 0;\n  this._derivedCommandsToUpdateLength = 0;\n}\n\nObject.defineProperties(GlobeTranslucencyState.prototype, {\n  frontFaceAlphaByDistance: {\n    get: function () {\n      return this._frontFaceAlphaByDistance;\n    },\n  },\n  backFaceAlphaByDistance: {\n    get: function () {\n      return this._backFaceAlphaByDistance;\n    },\n  },\n  translucent: {\n    get: function () {\n      return this._frontFaceTranslucent;\n    },\n  },\n  sunVisibleThroughGlobe: {\n    get: function () {\n      return this._sunVisibleThroughGlobe;\n    },\n  },\n  environmentVisible: {\n    get: function () {\n      return this._environmentVisible;\n    },\n  },\n  useDepthPlane: {\n    get: function () {\n      return this._useDepthPlane;\n    },\n  },\n  numberOfTextureUniforms: {\n    get: function () {\n      return this._numberOfTextureUniforms;\n    },\n  },\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n});\n\nGlobeTranslucencyState.prototype.update = function (scene) {\n  const globe = scene.globe;\n  if (!defined(globe) || !globe.show) {\n    this._frontFaceTranslucent = false;\n    this._backFaceTranslucent = false;\n    this._sunVisibleThroughGlobe = true;\n    this._environmentVisible = true;\n    this._useDepthPlane = false;\n    return;\n  }\n\n  this._frontFaceAlphaByDistance = updateAlphaByDistance(\n    globe.translucency.enabled,\n    globe.translucency.frontFaceAlpha,\n    globe.translucency.frontFaceAlphaByDistance,\n    this._frontFaceAlphaByDistance,\n  );\n  this._backFaceAlphaByDistance = updateAlphaByDistance(\n    globe.translucency.enabled,\n    globe.translucency.backFaceAlpha,\n    globe.translucency.backFaceAlphaByDistance,\n    this._backFaceAlphaByDistance,\n  );\n\n  this._frontFaceTranslucent = isFaceTranslucent(\n    globe.translucency.enabled,\n    this._frontFaceAlphaByDistance,\n    globe,\n  );\n  this._backFaceTranslucent = isFaceTranslucent(\n    globe.translucency.enabled,\n    this._backFaceAlphaByDistance,\n    globe,\n  );\n\n  this._requiresManualDepthTest = requiresManualDepthTest(this, scene, globe);\n\n  this._sunVisibleThroughGlobe = isSunVisibleThroughGlobe(this, scene);\n  this._environmentVisible = isEnvironmentVisible(this, scene);\n  this._useDepthPlane = useDepthPlane(this, scene);\n  this._numberOfTextureUniforms = getNumberOfTextureUniforms(this);\n\n  this._rectangle = Rectangle.clone(\n    globe.translucency.rectangle,\n    this._rectangle,\n  );\n\n  gatherDerivedCommandRequirements(this, scene);\n};\n\nfunction updateAlphaByDistance(enabled, alpha, alphaByDistance, result) {\n  if (!enabled) {\n    result.nearValue = 1.0;\n    result.farValue = 1.0;\n    return result;\n  }\n\n  if (!defined(alphaByDistance)) {\n    result.nearValue = alpha;\n    result.farValue = alpha;\n    return result;\n  }\n\n  NearFarScalar.clone(alphaByDistance, result);\n  result.nearValue *= alpha;\n  result.farValue *= alpha;\n  return result;\n}\n\nfunction isFaceTranslucent(translucencyEnabled, alphaByDistance, globe) {\n  return (\n    translucencyEnabled &&\n    (globe.baseColor.alpha < 1.0 ||\n      alphaByDistance.nearValue < 1.0 ||\n      alphaByDistance.farValue < 1.0)\n  );\n}\n\nfunction isSunVisibleThroughGlobe(state, scene) {\n  // The sun is visible through the globe if the front and back faces are translucent when above ground\n  // or if front faces are translucent when below ground\n  const frontTranslucent = state._frontFaceTranslucent;\n  const backTranslucent = state._backFaceTranslucent;\n  return frontTranslucent && (scene.cameraUnderground || backTranslucent);\n}\n\nfunction isEnvironmentVisible(state, scene) {\n  // The environment is visible if the camera is above ground or underground with translucency\n  return !scene.cameraUnderground || state._frontFaceTranslucent;\n}\n\nfunction useDepthPlane(state, scene) {\n  // Use the depth plane when the camera is above ground and the globe is opaque\n  return !scene.cameraUnderground && !state._frontFaceTranslucent;\n}\n\nfunction requiresManualDepthTest(state, scene, globe) {\n  return (\n    state._frontFaceTranslucent &&\n    !state._backFaceTranslucent &&\n    !globe.depthTestAgainstTerrain &&\n    scene.mode !== SceneMode.SCENE2D &&\n    scene.context.depthTexture\n  );\n}\n\nfunction getNumberOfTextureUniforms(state) {\n  let numberOfTextureUniforms = 0;\n\n  if (state._frontFaceTranslucent) {\n    ++numberOfTextureUniforms; // classification texture\n  }\n\n  if (state._requiresManualDepthTest) {\n    ++numberOfTextureUniforms; // czm_globeDepthTexture for manual depth testing\n  }\n\n  return numberOfTextureUniforms;\n}\n\nfunction gatherDerivedCommandRequirements(state, scene) {\n  state._derivedCommandsLength = getDerivedCommandTypes(\n    state,\n    scene,\n    false,\n    false,\n    state._derivedCommandTypes,\n  );\n\n  state._derivedBlendCommandsLength = getDerivedCommandTypes(\n    state,\n    scene,\n    true,\n    false,\n    state._derivedBlendCommandTypes,\n  );\n\n  state._derivedPickCommandsLength = getDerivedCommandTypes(\n    state,\n    scene,\n    false,\n    true,\n    state._derivedPickCommandTypes,\n  );\n\n  let i;\n\n  let derivedCommandKey = 0;\n  for (i = 0; i < state._derivedCommandsLength; ++i) {\n    derivedCommandKey |= 1 << state._derivedCommandTypes[i];\n  }\n  for (i = 0; i < state._derivedBlendCommandsLength; ++i) {\n    derivedCommandKey |= 1 << state._derivedBlendCommandTypes[i];\n  }\n  for (i = 0; i < state._derivedPickCommandsLength; ++i) {\n    derivedCommandKey |= 1 << state._derivedPickCommandTypes[i];\n  }\n\n  let derivedCommandsToUpdateLength = 0;\n  for (i = 0; i < derivedCommandsMaximumLength; ++i) {\n    if ((derivedCommandKey & (1 << i)) > 0) {\n      state._derivedCommandTypesToUpdate[derivedCommandsToUpdateLength++] = i;\n    }\n  }\n  state._derivedCommandsToUpdateLength = derivedCommandsToUpdateLength;\n\n  const derivedCommandsDirty = derivedCommandKey !== state._derivedCommandKey;\n  state._derivedCommandKey = derivedCommandKey;\n  state._derivedCommandsDirty = derivedCommandsDirty;\n\n  if (!defined(state._derivedCommandPacks) && state._frontFaceTranslucent) {\n    state._derivedCommandPacks = createDerivedCommandPacks();\n  }\n}\n\nfunction getDerivedCommandTypes(\n  state,\n  scene,\n  isBlendCommand,\n  isPickCommand,\n  types,\n) {\n  let length = 0;\n\n  const frontTranslucent = state._frontFaceTranslucent;\n  const backTranslucent = state._backFaceTranslucent;\n\n  if (!frontTranslucent) {\n    // Don't use derived commands if the globe is opaque\n    return length;\n  }\n\n  const cameraUnderground = scene.cameraUnderground;\n  const requiresManualDepthTest = state._requiresManualDepthTest;\n\n  const translucentFrontFaceCommandType = isPickCommand\n    ? DerivedCommandType.PICK_FRONT_FACE\n    : requiresManualDepthTest\n      ? DerivedCommandType.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST\n      : DerivedCommandType.TRANSLUCENT_FRONT_FACE;\n\n  const translucentBackFaceCommandType = isPickCommand\n    ? DerivedCommandType.PICK_BACK_FACE\n    : requiresManualDepthTest\n      ? DerivedCommandType.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST\n      : DerivedCommandType.TRANSLUCENT_BACK_FACE;\n\n  if (scene.mode === SceneMode.SCENE2D) {\n    types[length++] = DerivedCommandType.DEPTH_ONLY_FRONT_FACE;\n    types[length++] = translucentFrontFaceCommandType;\n    return length;\n  }\n\n  if (backTranslucent) {\n    // Push depth-only command for classification. Blend commands do not need to write depth.\n    // Push translucent commands for front and back faces.\n    if (!isBlendCommand) {\n      types[length++] = DerivedCommandType.DEPTH_ONLY_FRONT_AND_BACK_FACE;\n    }\n    if (cameraUnderground) {\n      types[length++] = translucentFrontFaceCommandType;\n      types[length++] = translucentBackFaceCommandType;\n    } else {\n      types[length++] = translucentBackFaceCommandType;\n      types[length++] = translucentFrontFaceCommandType;\n    }\n  } else {\n    // Push opaque command for the face that appears in back.\n    // Push depth-only command and translucent command for the face that appears in front.\n    // eslint-disable-next-line no-lonely-if\n    if (cameraUnderground) {\n      if (!isBlendCommand) {\n        types[length++] = DerivedCommandType.DEPTH_ONLY_BACK_FACE;\n      }\n      types[length++] = DerivedCommandType.OPAQUE_FRONT_FACE;\n      types[length++] = translucentBackFaceCommandType;\n    } else {\n      if (!isBlendCommand) {\n        types[length++] = DerivedCommandType.DEPTH_ONLY_FRONT_FACE;\n      }\n      types[length++] = DerivedCommandType.OPAQUE_BACK_FACE;\n      types[length++] = translucentFrontFaceCommandType;\n    }\n  }\n\n  return length;\n}\n\nfunction removeDefine(defines, defineToRemove) {\n  const index = defines.indexOf(defineToRemove);\n  if (index > -1) {\n    defines.splice(index, 1);\n  }\n}\n\nfunction hasDefine(defines, define) {\n  return defines.indexOf(define) > -1;\n}\n\nfunction getOpaqueFrontFaceShaderProgram(vs, fs) {\n  removeDefine(vs.defines, \"TRANSLUCENT\");\n  removeDefine(fs.defines, \"TRANSLUCENT\");\n}\n\nfunction getOpaqueBackFaceShaderProgram(vs, fs) {\n  removeDefine(vs.defines, \"GROUND_ATMOSPHERE\");\n  removeDefine(fs.defines, \"GROUND_ATMOSPHERE\");\n  removeDefine(vs.defines, \"FOG\");\n  removeDefine(fs.defines, \"FOG\");\n  removeDefine(vs.defines, \"TRANSLUCENT\");\n  removeDefine(fs.defines, \"TRANSLUCENT\");\n}\n\nfunction getDepthOnlyShaderProgram(vs, fs) {\n  if (\n    hasDefine(fs.defines, \"TILE_LIMIT_RECTANGLE\") ||\n    hasDefine(fs.defines, \"ENABLE_CLIPPING_PLANES\")\n  ) {\n    // Need to execute the full shader if discard is called\n    return;\n  }\n\n  const depthOnlyShader =\n    \"void main() \\n\" + \"{ \\n\" + \"    out_FragColor = vec4(1.0); \\n\" + \"} \\n\";\n\n  fs.sources = [depthOnlyShader];\n}\n\nfunction getTranslucentShaderProgram(vs, fs) {\n  const sources = fs.sources;\n  const length = sources.length;\n  for (let i = 0; i < length; ++i) {\n    sources[i] = ShaderSource.replaceMain(\n      sources[i],\n      \"czm_globe_translucency_main\",\n    );\n  }\n\n  const globeTranslucencyMain =\n    \"\\n\\n\" +\n    \"uniform sampler2D u_classificationTexture; \\n\" +\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    vec2 st = gl_FragCoord.xy / czm_viewport.zw; \\n\" +\n    \"#ifdef MANUAL_DEPTH_TEST \\n\" +\n    \"    float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st)); \\n\" +\n    \"    if (logDepthOrDepth != 0.0) \\n\" +\n    \"    { \\n\" +\n    \"        vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); \\n\" +\n    \"        float depthEC = eyeCoordinate.z / eyeCoordinate.w; \\n\" +\n    \"        if (v_positionEC.z < depthEC) \\n\" +\n    \"        { \\n\" +\n    \"            discard; \\n\" +\n    \"        } \\n\" +\n    \"    } \\n\" +\n    \"#endif \\n\" +\n    \"    czm_globe_translucency_main(); \\n\" +\n    \"    vec4 classificationColor = texture(u_classificationTexture, st); \\n\" +\n    \"    if (classificationColor.a > 0.0) \\n\" +\n    \"    { \\n\" +\n    \"        // Reverse premultiplication process to get the correct composited result of the classification primitives \\n\" +\n    \"        classificationColor.rgb /= classificationColor.a; \\n\" +\n    \"    } \\n\" +\n    \"    out_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + out_FragColor * (1.0 - classificationColor.a); \\n\" +\n    \"} \\n\";\n\n  sources.push(globeTranslucencyMain);\n}\n\nfunction getTranslucentBackFaceShaderProgram(vs, fs) {\n  getTranslucentShaderProgram(vs, fs);\n  removeDefine(vs.defines, \"GROUND_ATMOSPHERE\");\n  removeDefine(fs.defines, \"GROUND_ATMOSPHERE\");\n  removeDefine(vs.defines, \"FOG\");\n  removeDefine(fs.defines, \"FOG\");\n}\n\nfunction getTranslucentFrontFaceManualDepthTestShaderProgram(vs, fs) {\n  getTranslucentShaderProgram(vs, fs);\n  vs.defines.push(\"GENERATE_POSITION\");\n  fs.defines.push(\"MANUAL_DEPTH_TEST\");\n}\n\nfunction getTranslucentBackFaceManualDepthTestShaderProgram(vs, fs) {\n  getTranslucentBackFaceShaderProgram(vs, fs);\n  vs.defines.push(\"GENERATE_POSITION\");\n  fs.defines.push(\"MANUAL_DEPTH_TEST\");\n}\n\nfunction getPickShaderProgram(vs, fs) {\n  const pickShader =\n    \"uniform sampler2D u_classificationTexture; \\n\" +\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    vec2 st = gl_FragCoord.xy / czm_viewport.zw; \\n\" +\n    \"    vec4 pickColor = texture(u_classificationTexture, st); \\n\" +\n    \"    if (pickColor == vec4(0.0)) \\n\" +\n    \"    { \\n\" +\n    \"        discard; \\n\" +\n    \"    } \\n\" +\n    \"    out_FragColor = pickColor; \\n\" +\n    \"} \\n\";\n\n  fs.sources = [pickShader];\n}\n\nfunction getDerivedShaderProgram(\n  context,\n  shaderProgram,\n  derivedShaderProgram,\n  shaderProgramDirty,\n  getShaderProgramFunction,\n  cacheName,\n) {\n  if (!defined(getShaderProgramFunction)) {\n    return shaderProgram;\n  }\n\n  if (!shaderProgramDirty && defined(derivedShaderProgram)) {\n    return derivedShaderProgram;\n  }\n\n  let shader = context.shaderCache.getDerivedShaderProgram(\n    shaderProgram,\n    cacheName,\n  );\n  if (!defined(shader)) {\n    const attributeLocations = shaderProgram._attributeLocations;\n    const vs = shaderProgram.vertexShaderSource.clone();\n    const fs = shaderProgram.fragmentShaderSource.clone();\n    vs.defines = defined(vs.defines) ? vs.defines.slice(0) : [];\n    fs.defines = defined(fs.defines) ? fs.defines.slice(0) : [];\n\n    getShaderProgramFunction(vs, fs);\n\n    shader = context.shaderCache.createDerivedShaderProgram(\n      shaderProgram,\n      cacheName,\n      {\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      },\n    );\n  }\n\n  return shader;\n}\n\nfunction getOpaqueFrontFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.BACK;\n  renderState.cull.enabled = true;\n}\n\nfunction getOpaqueBackFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.FRONT;\n  renderState.cull.enabled = true;\n}\n\nfunction getDepthOnlyFrontFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.BACK;\n  renderState.cull.enabled = true;\n  renderState.colorMask = {\n    red: false,\n    green: false,\n    blue: false,\n    alpha: false,\n  };\n}\n\nfunction getDepthOnlyBackFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.FRONT;\n  renderState.cull.enabled = true;\n  renderState.colorMask = {\n    red: false,\n    green: false,\n    blue: false,\n    alpha: false,\n  };\n}\n\nfunction getDepthOnlyFrontAndBackFaceRenderState(renderState) {\n  renderState.cull.enabled = false;\n  renderState.colorMask = {\n    red: false,\n    green: false,\n    blue: false,\n    alpha: false,\n  };\n}\n\nfunction getTranslucentFrontFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.BACK;\n  renderState.cull.enabled = true;\n  renderState.depthMask = false;\n  renderState.blending = BlendingState.ALPHA_BLEND;\n}\n\nfunction getTranslucentBackFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.FRONT;\n  renderState.cull.enabled = true;\n  renderState.depthMask = false;\n  renderState.blending = BlendingState.ALPHA_BLEND;\n}\n\nfunction getPickFrontFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.BACK;\n  renderState.cull.enabled = true;\n  renderState.blending.enabled = false;\n}\n\nfunction getPickBackFaceRenderState(renderState) {\n  renderState.cull.face = CullFace.FRONT;\n  renderState.cull.enabled = true;\n  renderState.blending.enabled = false;\n}\n\nfunction getDerivedRenderState(\n  renderState,\n  derivedRenderState,\n  renderStateDirty,\n  getRenderStateFunction,\n  cache,\n) {\n  if (!defined(getRenderStateFunction)) {\n    return renderState;\n  }\n\n  if (!renderStateDirty && defined(derivedRenderState)) {\n    return derivedRenderState;\n  }\n\n  let cachedRenderState = cache[renderState.id];\n  if (!defined(cachedRenderState)) {\n    const rs = RenderState.getState(renderState);\n    getRenderStateFunction(rs);\n    cachedRenderState = RenderState.fromCache(rs);\n    cache[renderState.id] = cachedRenderState;\n  }\n\n  return cachedRenderState;\n}\n\nfunction getTranslucencyUniformMap(state) {\n  return {\n    u_classificationTexture: function () {\n      return state._globeTranslucencyFramebuffer.classificationTexture;\n    },\n  };\n}\n\nfunction getDerivedUniformMap(\n  state,\n  uniformMap,\n  derivedUniformMap,\n  uniformMapDirty,\n  getDerivedUniformMapFunction,\n) {\n  if (!defined(getDerivedUniformMapFunction)) {\n    return uniformMap;\n  }\n\n  if (!uniformMapDirty && defined(derivedUniformMap)) {\n    return derivedUniformMap;\n  }\n\n  return combine(uniformMap, getDerivedUniformMapFunction(state), false);\n}\n\nfunction DerivedCommandPack(options) {\n  this.pass = options.pass;\n  this.pickOnly = options.pickOnly;\n  this.getShaderProgramFunction = options.getShaderProgramFunction;\n  this.getRenderStateFunction = options.getRenderStateFunction;\n  this.getUniformMapFunction = options.getUniformMapFunction;\n  this.renderStateCache = {};\n}\n\nfunction createDerivedCommandPacks() {\n  return [\n    // opaqueFrontFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.GLOBE,\n      pickOnly: false,\n      getShaderProgramFunction: getOpaqueFrontFaceShaderProgram,\n      getRenderStateFunction: getOpaqueFrontFaceRenderState,\n      getUniformMapFunction: undefined,\n    }),\n    // opaqueBackFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.GLOBE,\n      pickOnly: false,\n      getShaderProgramFunction: getOpaqueBackFaceShaderProgram,\n      getRenderStateFunction: getOpaqueBackFaceRenderState,\n      getUniformMapFunction: undefined,\n    }),\n    // depthOnlyFrontFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.GLOBE,\n      pickOnly: false,\n      getShaderProgramFunction: getDepthOnlyShaderProgram,\n      getRenderStateFunction: getDepthOnlyFrontFaceRenderState,\n      getUniformMapFunction: undefined,\n    }),\n    // depthOnlyBackFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.GLOBE,\n      pickOnly: false,\n      getShaderProgramFunction: getDepthOnlyShaderProgram,\n      getRenderStateFunction: getDepthOnlyBackFaceRenderState,\n      getUniformMapFunction: undefined,\n    }),\n    // depthOnlyFrontAndBackFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.GLOBE,\n      pickOnly: false,\n      getShaderProgramFunction: getDepthOnlyShaderProgram,\n      getRenderStateFunction: getDepthOnlyFrontAndBackFaceRenderState,\n      getUniformMapFunction: undefined,\n    }),\n    // translucentFrontFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.TRANSLUCENT,\n      pickOnly: false,\n      getShaderProgramFunction: getTranslucentShaderProgram,\n      getRenderStateFunction: getTranslucentFrontFaceRenderState,\n      getUniformMapFunction: getTranslucencyUniformMap,\n    }),\n    // translucentBackFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.TRANSLUCENT,\n      pickOnly: false,\n      getShaderProgramFunction: getTranslucentBackFaceShaderProgram,\n      getRenderStateFunction: getTranslucentBackFaceRenderState,\n      getUniformMapFunction: getTranslucencyUniformMap,\n    }),\n    // translucentFrontFaceManualDepthTestCommand\n    new DerivedCommandPack({\n      pass: Pass.TRANSLUCENT,\n      pickOnly: false,\n      getShaderProgramFunction:\n        getTranslucentFrontFaceManualDepthTestShaderProgram,\n      getRenderStateFunction: getTranslucentFrontFaceRenderState,\n      getUniformMapFunction: getTranslucencyUniformMap,\n    }),\n    // translucentBackFaceManualDepthTestCommand\n    new DerivedCommandPack({\n      pass: Pass.TRANSLUCENT,\n      pickOnly: false,\n      getShaderProgramFunction:\n        getTranslucentBackFaceManualDepthTestShaderProgram,\n      getRenderStateFunction: getTranslucentBackFaceRenderState,\n      getUniformMapFunction: getTranslucencyUniformMap,\n    }),\n    // pickFrontFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.TRANSLUCENT,\n      pickOnly: true,\n      getShaderProgramFunction: getPickShaderProgram,\n      getRenderStateFunction: getPickFrontFaceRenderState,\n      getUniformMapFunction: getTranslucencyUniformMap,\n    }),\n    // pickBackFaceCommand\n    new DerivedCommandPack({\n      pass: Pass.TRANSLUCENT,\n      pickOnly: true,\n      getShaderProgramFunction: getPickShaderProgram,\n      getRenderStateFunction: getPickBackFaceRenderState,\n      getUniformMapFunction: getTranslucencyUniformMap,\n    }),\n  ];\n}\n\nconst derivedCommandNames = new Array(derivedCommandsMaximumLength);\nconst derivedCommandPacks = new Array(derivedCommandsMaximumLength);\n\nGlobeTranslucencyState.prototype.updateDerivedCommands = function (\n  command,\n  frameState,\n) {\n  const derivedCommandTypes = this._derivedCommandTypesToUpdate;\n  const derivedCommandsLength = this._derivedCommandsToUpdateLength;\n\n  if (derivedCommandsLength === 0) {\n    return;\n  }\n\n  for (let i = 0; i < derivedCommandsLength; ++i) {\n    derivedCommandPacks[i] = this._derivedCommandPacks[derivedCommandTypes[i]];\n    derivedCommandNames[i] = DerivedCommandNames[derivedCommandTypes[i]];\n  }\n\n  updateDerivedCommands(\n    this,\n    command,\n    derivedCommandsLength,\n    derivedCommandTypes,\n    derivedCommandNames,\n    derivedCommandPacks,\n    frameState,\n  );\n};\n\nfunction updateDerivedCommands(\n  state,\n  command,\n  derivedCommandsLength,\n  derivedCommandTypes,\n  derivedCommandNames,\n  derivedCommandPacks,\n  frameState,\n) {\n  let derivedCommandsObject = command.derivedCommands.globeTranslucency;\n  const derivedCommandsDirty = state._derivedCommandsDirty;\n\n  if (\n    command.dirty ||\n    !defined(derivedCommandsObject) ||\n    derivedCommandsDirty\n  ) {\n    command.dirty = false;\n\n    if (!defined(derivedCommandsObject)) {\n      derivedCommandsObject = {};\n      command.derivedCommands.globeTranslucency = derivedCommandsObject;\n    }\n\n    const frameNumber = frameState.frameNumber;\n\n    const uniformMapDirtyFrame =\n      derivedCommandsObject.uniformMapDirtyFrame ?? 0;\n    const shaderProgramDirtyFrame =\n      derivedCommandsObject.shaderProgramDirtyFrame ?? 0;\n    const renderStateDirtyFrame =\n      derivedCommandsObject.renderStateDirtyFrame ?? 0;\n\n    const uniformMapDirty =\n      derivedCommandsObject.uniformMap !== command.uniformMap;\n\n    const shaderProgramDirty =\n      derivedCommandsObject.shaderProgramId !== command.shaderProgram.id;\n\n    const renderStateDirty =\n      derivedCommandsObject.renderStateId !== command.renderState.id;\n\n    if (uniformMapDirty) {\n      derivedCommandsObject.uniformMapDirtyFrame = frameNumber;\n    }\n    if (shaderProgramDirty) {\n      derivedCommandsObject.shaderProgramDirtyFrame = frameNumber;\n    }\n    if (renderStateDirty) {\n      derivedCommandsObject.renderStateDirtyFrame = frameNumber;\n    }\n\n    derivedCommandsObject.uniformMap = command.uniformMap;\n    derivedCommandsObject.shaderProgramId = command.shaderProgram.id;\n    derivedCommandsObject.renderStateId = command.renderState.id;\n\n    for (let i = 0; i < derivedCommandsLength; ++i) {\n      const derivedCommandPack = derivedCommandPacks[i];\n      const derivedCommandType = derivedCommandTypes[i];\n      const derivedCommandName = derivedCommandNames[i];\n      let derivedCommand = derivedCommandsObject[derivedCommandName];\n\n      let derivedUniformMap;\n      let derivedShaderProgram;\n      let derivedRenderState;\n\n      if (defined(derivedCommand)) {\n        derivedUniformMap = derivedCommand.uniformMap;\n        derivedShaderProgram = derivedCommand.shaderProgram;\n        derivedRenderState = derivedCommand.renderState;\n      } else {\n        derivedUniformMap = undefined;\n        derivedShaderProgram = undefined;\n        derivedRenderState = undefined;\n      }\n\n      derivedCommand = DrawCommand.shallowClone(command, derivedCommand);\n      derivedCommandsObject[derivedCommandName] = derivedCommand;\n\n      const derivedUniformMapDirtyFrame =\n        derivedCommand.derivedCommands.uniformMapDirtyFrame ?? 0;\n      const derivedShaderProgramDirtyFrame =\n        derivedCommand.derivedCommands.shaderProgramDirtyFrame ?? 0;\n      const derivedRenderStateDirtyFrame =\n        derivedCommand.derivedCommands.renderStateDirtyFrame ?? 0;\n\n      const derivedUniformMapDirty =\n        uniformMapDirty || derivedUniformMapDirtyFrame < uniformMapDirtyFrame;\n      const derivedShaderProgramDirty =\n        shaderProgramDirty ||\n        derivedShaderProgramDirtyFrame < shaderProgramDirtyFrame;\n      const derivedRenderStateDirty =\n        renderStateDirty ||\n        derivedRenderStateDirtyFrame < renderStateDirtyFrame;\n\n      if (derivedUniformMapDirty) {\n        derivedCommand.derivedCommands.uniformMapDirtyFrame = frameNumber;\n      }\n      if (derivedShaderProgramDirty) {\n        derivedCommand.derivedCommands.shaderProgramDirtyFrame = frameNumber;\n      }\n      if (derivedRenderStateDirty) {\n        derivedCommand.derivedCommands.renderStateDirtyFrame = frameNumber;\n      }\n\n      derivedCommand.derivedCommands.type = derivedCommandType;\n      derivedCommand.pass = derivedCommandPack.pass;\n      derivedCommand.pickOnly = derivedCommandPack.pickOnly;\n      derivedCommand.uniformMap = getDerivedUniformMap(\n        state,\n        command.uniformMap,\n        derivedUniformMap,\n        derivedUniformMapDirty,\n        derivedCommandPack.getUniformMapFunction,\n      );\n      derivedCommand.shaderProgram = getDerivedShaderProgram(\n        frameState.context,\n        command.shaderProgram,\n        derivedShaderProgram,\n        derivedShaderProgramDirty,\n        derivedCommandPack.getShaderProgramFunction,\n        derivedCommandName,\n      );\n      derivedCommand.renderState = getDerivedRenderState(\n        command.renderState,\n        derivedRenderState,\n        derivedRenderStateDirty,\n        derivedCommandPack.getRenderStateFunction,\n        derivedCommandPack.renderStateCache,\n      );\n    }\n  }\n}\n\nGlobeTranslucencyState.prototype.pushDerivedCommands = function (\n  command,\n  isBlendCommand,\n  frameState,\n) {\n  const picking = frameState.passes.pick || frameState.passes.pickVoxel;\n  if (picking && isBlendCommand) {\n    // No need to push blend commands in the pick pass\n    return;\n  }\n\n  let derivedCommandTypes = this._derivedCommandTypes;\n  let derivedCommandsLength = this._derivedCommandsLength;\n\n  if (picking) {\n    derivedCommandTypes = this._derivedPickCommandTypes;\n    derivedCommandsLength = this._derivedPickCommandsLength;\n  } else if (isBlendCommand) {\n    derivedCommandTypes = this._derivedBlendCommandTypes;\n    derivedCommandsLength = this._derivedBlendCommandsLength;\n  }\n\n  if (derivedCommandsLength === 0) {\n    // No derived commands to push so just push the globe command\n    frameState.commandList.push(command);\n    return;\n  }\n\n  // Push derived commands\n  const derivedCommands = command.derivedCommands.globeTranslucency;\n  for (let i = 0; i < derivedCommandsLength; ++i) {\n    const derivedCommandName = DerivedCommandNames[derivedCommandTypes[i]];\n    frameState.commandList.push(derivedCommands[derivedCommandName]);\n  }\n};\n\nfunction executeCommandsMatchingType(\n  commands,\n  commandsLength,\n  executeCommandFunction,\n  scene,\n  passState,\n  types,\n) {\n  for (let i = 0; i < commandsLength; ++i) {\n    const command = commands[i];\n    const type = command.derivedCommands.type;\n    if (!defined(types) || types.indexOf(type) > -1) {\n      executeCommandFunction(command, scene, passState);\n    }\n  }\n}\n\nfunction executeCommands(\n  commands,\n  commandsLength,\n  executeCommandFunction,\n  scene,\n  passState,\n) {\n  for (let i = 0; i < commandsLength; ++i) {\n    executeCommandFunction(commands[i], scene, passState);\n  }\n}\n\nconst opaqueTypes = [\n  DerivedCommandType.OPAQUE_FRONT_FACE,\n  DerivedCommandType.OPAQUE_BACK_FACE,\n];\nconst depthOnlyTypes = [\n  DerivedCommandType.DEPTH_ONLY_FRONT_FACE,\n  DerivedCommandType.DEPTH_ONLY_BACK_FACE,\n  DerivedCommandType.DEPTH_ONLY_FRONT_AND_BACK_FACE,\n];\n\nGlobeTranslucencyState.prototype.executeGlobeCommands = function (\n  frustumCommands,\n  executeCommandFunction,\n  globeTranslucencyFramebuffer,\n  scene,\n  passState,\n) {\n  const context = scene.context;\n  const globeCommands = frustumCommands.commands[Pass.GLOBE];\n  const globeCommandsLength = frustumCommands.indices[Pass.GLOBE];\n\n  if (globeCommandsLength === 0) {\n    return;\n  }\n\n  this._globeTranslucencyFramebuffer = globeTranslucencyFramebuffer;\n  globeTranslucencyFramebuffer.clearClassification(context, passState);\n\n  // Render opaque commands like normal\n  executeCommandsMatchingType(\n    globeCommands,\n    globeCommandsLength,\n    executeCommandFunction,\n    scene,\n    passState,\n    opaqueTypes,\n  );\n};\n\nGlobeTranslucencyState.prototype.executeGlobeClassificationCommands = function (\n  frustumCommands,\n  executeCommandFunction,\n  globeTranslucencyFramebuffer,\n  scene,\n  passState,\n) {\n  const { context } = scene;\n  const { uniformState } = context;\n\n  const globeCommands = frustumCommands.commands[Pass.GLOBE];\n  const globeCommandsLength = frustumCommands.indices[Pass.GLOBE];\n  const classificationCommands =\n    frustumCommands.commands[Pass.TERRAIN_CLASSIFICATION];\n  const classificationCommandsLength =\n    frustumCommands.indices[Pass.TERRAIN_CLASSIFICATION];\n\n  if (globeCommandsLength === 0 || classificationCommandsLength === 0) {\n    return;\n  }\n\n  const frontTranslucent = this._frontFaceTranslucent;\n  const backTranslucent = this._backFaceTranslucent;\n\n  if (!frontTranslucent || !backTranslucent) {\n    // Render classification on opaque faces like normal\n    executeCommands(\n      classificationCommands,\n      classificationCommandsLength,\n      executeCommandFunction,\n      scene,\n      passState,\n    );\n  }\n\n  if (!frontTranslucent && !backTranslucent) {\n    // No translucent commands to render. Skip translucent classification.\n    return;\n  }\n\n  this._globeTranslucencyFramebuffer = globeTranslucencyFramebuffer;\n\n  const originalGlobeDepthTexture = uniformState.globeDepthTexture;\n  const originalFramebuffer = passState.framebuffer;\n\n  // Render to internal framebuffer and get the first depth peel\n  passState.framebuffer =\n    globeTranslucencyFramebuffer.classificationFramebuffer;\n\n  executeCommandsMatchingType(\n    globeCommands,\n    globeCommandsLength,\n    executeCommandFunction,\n    scene,\n    passState,\n    depthOnlyTypes,\n  );\n\n  if (context.depthTexture) {\n    // Pack depth into separate texture for ground polylines and textured ground primitives\n    const packedDepthTexture = globeTranslucencyFramebuffer.packDepth(\n      context,\n      passState,\n    );\n    uniformState.globeDepthTexture = packedDepthTexture;\n  }\n\n  // Render classification on translucent faces\n  executeCommands(\n    classificationCommands,\n    classificationCommandsLength,\n    executeCommandFunction,\n    scene,\n    passState,\n  );\n\n  // Unset temporary state\n  uniformState.globeDepthTexture = originalGlobeDepthTexture;\n  passState.framebuffer = originalFramebuffer;\n};\n\nexport default GlobeTranslucencyState;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport { MeshoptDecoder } from \"meshoptimizer\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\n\n/**\n * Loads a glTF buffer view.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfBufferViewLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {object} options.gltf The glTF JSON.\n   * @param {number} options.bufferViewId The buffer view ID.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltf = options.gltf;\n    const bufferViewId = options.bufferViewId;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const cacheKey = options.cacheKey;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.number(\"options.bufferViewId\", bufferViewId);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    //>>includeEnd('debug');\n\n    const bufferView = gltf.bufferViews[bufferViewId];\n    let bufferId = bufferView.buffer;\n    let byteOffset = bufferView.byteOffset;\n    let byteLength = bufferView.byteLength;\n\n    let hasMeshopt = false;\n    let meshoptByteStride;\n    let meshoptCount;\n    let meshoptMode;\n    let meshoptFilter;\n\n    if (hasExtension(bufferView, \"EXT_meshopt_compression\")) {\n      const meshopt = bufferView.extensions.EXT_meshopt_compression;\n      bufferId = meshopt.buffer;\n      byteOffset = meshopt.byteOffset ?? 0;\n      byteLength = meshopt.byteLength;\n\n      hasMeshopt = true;\n      meshoptByteStride = meshopt.byteStride;\n      meshoptCount = meshopt.count;\n      meshoptMode = meshopt.mode;\n      meshoptFilter = meshopt.filter ?? \"NONE\";\n    }\n\n    const buffer = gltf.buffers[bufferId];\n\n    this._hasMeshopt = hasMeshopt;\n    this._meshoptByteStride = meshoptByteStride;\n    this._meshoptCount = meshoptCount;\n    this._meshoptMode = meshoptMode;\n    this._meshoptFilter = meshoptFilter;\n\n    this._resourceCache = resourceCache;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._buffer = buffer;\n    this._bufferId = bufferId;\n    this._byteOffset = byteOffset;\n    this._byteLength = byteLength;\n    this._cacheKey = cacheKey;\n    this._bufferLoader = undefined;\n    this._typedArray = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfBufferViewLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The typed array containing buffer view data.\n   *\n   * @memberof GltfBufferViewLoader.prototype\n   *\n   * @type {Uint8Array}\n   * @readonly\n   * @private\n   */\n  get typedArray() {\n    return this._typedArray;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfBufferViewLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._state = ResourceLoaderState.LOADING;\n    this._promise = loadResources(this);\n    return this._promise;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    if (defined(this._bufferLoader) && !this._bufferLoader.isDestroyed()) {\n      this._resourceCache.unload(this._bufferLoader);\n    }\n\n    this._bufferLoader = undefined;\n    this._typedArray = undefined;\n  }\n}\n\n/**\n * Load the resources associated with the loader.\n * @private\n * @param {GltfBufferViewLoader} loader\n * @returns {Promise<GltfBufferViewLoader>}\n */\nasync function loadResources(loader) {\n  try {\n    const bufferLoader = getBufferLoader(loader);\n    loader._bufferLoader = bufferLoader;\n    await bufferLoader.load();\n\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    const bufferTypedArray = bufferLoader.typedArray;\n    const bufferViewTypedArray = new Uint8Array(\n      bufferTypedArray.buffer,\n      bufferTypedArray.byteOffset + loader._byteOffset,\n      loader._byteLength,\n    );\n\n    // Unload the buffer\n    loader.unload();\n\n    loader._typedArray = bufferViewTypedArray;\n    if (loader._hasMeshopt) {\n      const count = loader._meshoptCount;\n      const byteStride = loader._meshoptByteStride;\n      const result = new Uint8Array(count * byteStride);\n      MeshoptDecoder.decodeGltfBuffer(\n        result,\n        count,\n        byteStride,\n        loader._typedArray,\n        loader._meshoptMode,\n        loader._meshoptFilter,\n      );\n      loader._typedArray = result;\n    }\n\n    loader._state = ResourceLoaderState.READY;\n    return loader;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader.unload();\n    loader._state = ResourceLoaderState.FAILED;\n    const errorMessage = \"Failed to load buffer view\";\n    throw loader.getError(errorMessage, error);\n  }\n}\n\n/**\n * Get the buffer loader for the specified buffer view loader.\n * Attempts to retrieve from the resource cache first. If a buffer loader is\n * not found, creates a new buffer loader and adds it to the resource cache.\n * @private\n * @param {GltfBufferViewLoader} bufferViewLoader The loader.\n * @returns {BufferLoader} The buffer loader.\n */\nfunction getBufferLoader(bufferViewLoader) {\n  const resourceCache = bufferViewLoader._resourceCache;\n  const buffer = bufferViewLoader._buffer;\n\n  if (defined(buffer.uri)) {\n    const baseResource = bufferViewLoader._baseResource;\n    const resource = baseResource.getDerivedResource({\n      url: buffer.uri,\n    });\n    return resourceCache.getExternalBufferLoader({\n      resource: resource,\n    });\n  }\n\n  const source = buffer.extras?._pipeline?.source;\n  return resourceCache.getEmbeddedBufferLoader({\n    parentResource: bufferViewLoader._gltfResource,\n    bufferId: bufferViewLoader._bufferId,\n    typedArray: source,\n  });\n}\n\nexport default GltfBufferViewLoader;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DracoLoader from \"./DracoLoader.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\nimport VertexAttributeSemantic from \"./VertexAttributeSemantic.js\";\n\n/**\n * Load a draco buffer from a glTF.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfDracoLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {object} options.gltf The glTF JSON.\n   * @param {object} options.primitive The primitive containing the Draco extension.\n   * @param {object} options.draco The Draco extension object.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltf = options.gltf;\n    const primitive = options.primitive;\n    const draco = options.draco;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const cacheKey = options.cacheKey;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.object(\"options.primitive\", primitive);\n    Check.typeOf.object(\"options.draco\", draco);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    //>>includeEnd('debug');\n\n    this._resourceCache = resourceCache;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._gltf = gltf;\n    this._primitive = primitive;\n    this._draco = draco;\n    this._cacheKey = cacheKey;\n    this._bufferViewLoader = undefined;\n    this._bufferViewTypedArray = undefined;\n    this._decodePromise = undefined;\n    this._decodedData = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n    this._dracoError = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfDracoLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The decoded data.\n   *\n   * @memberof GltfDracoLoader.prototype\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  get decodedData() {\n    return this._decodedData;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfDracoLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._state = ResourceLoaderState.LOADING;\n    this._promise = loadResources(this);\n    return this._promise;\n  }\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === ResourceLoaderState.READY) {\n      return true;\n    }\n\n    if (this._state !== ResourceLoaderState.PROCESSING) {\n      return false;\n    }\n\n    if (defined(this._dracoError)) {\n      handleError(this, this._dracoError);\n    }\n\n    if (!defined(this._bufferViewTypedArray)) {\n      // Not ready to decode the Draco buffer\n      return false;\n    }\n\n    if (defined(this._decodePromise)) {\n      // Currently decoding\n      return false;\n    }\n\n    const draco = this._draco;\n    const primitive = this._primitive;\n    const gltf = this._gltf;\n    const bufferViews = gltf.bufferViews;\n    const bufferViewId = draco.bufferView;\n    const bufferView = bufferViews[bufferViewId];\n    const compressedAttributes = draco.attributes;\n\n    // Skip de-quantization transform if present for floating point attributes.\n    // They will stay quantized in memory and be dequantized in the shader.\n    const attributesToSkipTransform = [];\n\n    for (const attribute in primitive.attributes) {\n      if (primitive.attributes.hasOwnProperty(attribute)) {\n        const dracoAttributeType = getDracoAttributeType(attribute);\n        if (defined(dracoAttributeType)) {\n          const accessor = gltf.accessors[primitive.attributes[attribute]];\n          if (accessor.componentType === ComponentDatatype.FLOAT) {\n            if (!attributesToSkipTransform.includes(dracoAttributeType)) {\n              attributesToSkipTransform.push(dracoAttributeType);\n            }\n          }\n        }\n      }\n    }\n\n    const decodeOptions = {\n      // Need to make a copy of the typed array otherwise the underlying\n      // ArrayBuffer may be accessed on both the worker and the main thread. This\n      // leads to errors such as \"ArrayBuffer at index 0 is already detached\".\n      // PERFORMANCE_IDEA: Look into SharedArrayBuffer to get around this.\n      array: new Uint8Array(this._bufferViewTypedArray),\n      bufferView: bufferView,\n      compressedAttributes: compressedAttributes,\n      dequantizeInShader: true,\n      attributesToSkipTransform: attributesToSkipTransform,\n    };\n\n    const decodePromise = DracoLoader.decodeBufferView(decodeOptions);\n\n    if (!defined(decodePromise)) {\n      // Cannot schedule task this frame\n      return false;\n    }\n\n    this._decodePromise = processDecode(this, decodePromise);\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    if (defined(this._bufferViewLoader)) {\n      this._resourceCache.unload(this._bufferViewLoader);\n    }\n\n    this._bufferViewLoader = undefined;\n    this._bufferViewTypedArray = undefined;\n    this._decodedData = undefined;\n    this._gltf = undefined;\n    this._primitive = undefined;\n  }\n}\n\nasync function loadResources(loader) {\n  const resourceCache = loader._resourceCache;\n  try {\n    const bufferViewLoader = resourceCache.getBufferViewLoader({\n      gltf: loader._gltf,\n      bufferViewId: loader._draco.bufferView,\n      gltfResource: loader._gltfResource,\n      baseResource: loader._baseResource,\n    });\n    loader._bufferViewLoader = bufferViewLoader;\n    await bufferViewLoader.load();\n\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader._bufferViewTypedArray = bufferViewLoader.typedArray;\n    loader._state = ResourceLoaderState.PROCESSING;\n    return loader;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    handleError(loader, error);\n  }\n}\n\nfunction handleError(dracoLoader, error) {\n  dracoLoader.unload();\n  dracoLoader._state = ResourceLoaderState.FAILED;\n  const errorMessage = \"Failed to load Draco\";\n  throw dracoLoader.getError(errorMessage, error);\n}\n\nasync function processDecode(loader, decodePromise) {\n  try {\n    const results = await decodePromise;\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    // Unload everything except the decoded data\n    loader.unload();\n\n    loader._decodedData = {\n      indices: results.indexArray,\n      vertexAttributes: results.attributeData,\n    };\n    loader._state = ResourceLoaderState.READY;\n    return loader._baseResource;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    // Capture this error so it can be thrown on the next `process` call\n    loader._dracoError = error;\n  }\n}\n\nconst SemanticToDracoAttributeType = {};\nSemanticToDracoAttributeType[VertexAttributeSemantic.POSITION] = \"POSITION\";\nSemanticToDracoAttributeType[VertexAttributeSemantic.NORMAL] = \"NORMAL\";\nSemanticToDracoAttributeType[VertexAttributeSemantic.COLOR] = \"COLOR\";\nSemanticToDracoAttributeType[VertexAttributeSemantic.TEXCOORD] = \"TEX_COORD\";\n\nfunction getDracoAttributeType(attribute) {\n  for (const semantic in SemanticToDracoAttributeType) {\n    if (SemanticToDracoAttributeType.hasOwnProperty(semantic)) {\n      if (attribute.startsWith(semantic)) {\n        return SemanticToDracoAttributeType[semantic];\n      }\n    }\n  }\n\n  return undefined;\n}\n\nexport default GltfDracoLoader;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport loadImageFromTypedArray from \"../Core/loadImageFromTypedArray.js\";\nimport loadKTX2 from \"../Core/loadKTX2.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\n\n/**\n * Loads a glTF image.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfImageLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {object} options.gltf The glTF JSON.\n   * @param {number} options.imageId The image ID.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltf = options.gltf;\n    const imageId = options.imageId;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const cacheKey = options.cacheKey;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.number(\"options.imageId\", imageId);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    //>>includeEnd('debug');\n\n    const image = gltf.images[imageId];\n    const bufferViewId = image.bufferView;\n    const uri = image.uri;\n\n    this._resourceCache = resourceCache;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._gltf = gltf;\n    this._bufferViewId = bufferViewId;\n    this._uri = uri;\n    this._cacheKey = cacheKey;\n    this._bufferViewLoader = undefined;\n    this._image = undefined;\n    this._mipLevels = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfImageLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The image.\n   *\n   * @memberof GltfImageLoader.prototype\n   *\n   * @type {Image|ImageBitmap|CompressedTextureBuffer}\n   * @readonly\n   * @private\n   */\n  get image() {\n    return this._image;\n  }\n\n  /**\n   * The mip levels. Only defined for KTX2 files containing mip levels.\n   *\n   * @memberof GltfImageLoader.prototype\n   *\n   * @type {Uint8Array[]}\n   * @readonly\n   * @private\n   */\n  get mipLevels() {\n    return this._mipLevels;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfImageLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    if (defined(this._bufferViewId)) {\n      this._promise = loadFromBufferView(this);\n      return this._promise;\n    }\n\n    this._promise = loadFromUri(this);\n    return this._promise;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    if (\n      defined(this._bufferViewLoader) &&\n      !this._bufferViewLoader.isDestroyed()\n    ) {\n      this._resourceCache.unload(this._bufferViewLoader);\n    }\n\n    this._bufferViewLoader = undefined;\n    this._uri = undefined; // Free in case the uri is a data uri\n    this._image = undefined;\n    this._mipLevels = undefined;\n    this._gltf = undefined;\n  }\n}\n\nfunction getImageAndMipLevels(image) {\n  // Images transcoded from KTX2 can contain multiple mip levels:\n  // https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n  let mipLevels;\n  if (Array.isArray(image)) {\n    // highest detail mip should be level 0\n    mipLevels = image.slice(1, image.length).map(function (mipLevel) {\n      return mipLevel.bufferView;\n    });\n    image = image[0];\n  }\n  return {\n    image: image,\n    mipLevels: mipLevels,\n  };\n}\n\nasync function loadFromBufferView(imageLoader) {\n  imageLoader._state = ResourceLoaderState.LOADING;\n  const resourceCache = imageLoader._resourceCache;\n  try {\n    const bufferViewLoader = resourceCache.getBufferViewLoader({\n      gltf: imageLoader._gltf,\n      bufferViewId: imageLoader._bufferViewId,\n      gltfResource: imageLoader._gltfResource,\n      baseResource: imageLoader._baseResource,\n    });\n    imageLoader._bufferViewLoader = bufferViewLoader;\n    await bufferViewLoader.load();\n\n    if (imageLoader.isDestroyed()) {\n      return;\n    }\n\n    const typedArray = bufferViewLoader.typedArray;\n    const image = await loadImageFromBufferTypedArray(typedArray);\n    if (imageLoader.isDestroyed()) {\n      return;\n    }\n\n    const imageAndMipLevels = getImageAndMipLevels(image);\n\n    // Unload everything except the image\n    imageLoader.unload();\n\n    imageLoader._image = imageAndMipLevels.image;\n    imageLoader._mipLevels = imageAndMipLevels.mipLevels;\n    imageLoader._state = ResourceLoaderState.READY;\n\n    return imageLoader;\n  } catch (error) {\n    if (imageLoader.isDestroyed()) {\n      return;\n    }\n\n    return handleError(imageLoader, error, \"Failed to load embedded image\");\n  }\n}\n\nasync function loadFromUri(imageLoader) {\n  imageLoader._state = ResourceLoaderState.LOADING;\n  const baseResource = imageLoader._baseResource;\n  const uri = imageLoader._uri;\n  const resource = baseResource.getDerivedResource({\n    url: uri,\n  });\n\n  try {\n    const image = await loadImageFromUri(resource);\n    if (imageLoader.isDestroyed()) {\n      return;\n    }\n\n    const imageAndMipLevels = getImageAndMipLevels(image);\n\n    // Unload everything except the image\n    imageLoader.unload();\n\n    imageLoader._image = imageAndMipLevels.image;\n    imageLoader._mipLevels = imageAndMipLevels.mipLevels;\n    imageLoader._state = ResourceLoaderState.READY;\n\n    return imageLoader;\n  } catch (error) {\n    if (imageLoader.isDestroyed()) {\n      return;\n    }\n    return handleError(imageLoader, error, `Failed to load image: ${uri}`);\n  }\n}\n\nfunction handleError(imageLoader, error, errorMessage) {\n  imageLoader.unload();\n  imageLoader._state = ResourceLoaderState.FAILED;\n  return Promise.reject(imageLoader.getError(errorMessage, error));\n}\n\nfunction getMimeTypeFromTypedArray(typedArray) {\n  const header = typedArray.subarray(0, 2);\n  const webpHeaderRIFFChars = typedArray.subarray(0, 4);\n  const webpHeaderWEBPChars = typedArray.subarray(8, 12);\n\n  if (header[0] === 0xff && header[1] === 0xd8) {\n    // See https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format\n    return \"image/jpeg\";\n  } else if (header[0] === 0x89 && header[1] === 0x50) {\n    // See http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html\n    return \"image/png\";\n  } else if (header[0] === 0xab && header[1] === 0x4b) {\n    // See http://github.khronos.org/KTX-Specification/#_identifier\n    return \"image/ktx2\";\n  } else if (\n    // See https://developers.google.com/speed/webp/docs/riff_container#webp_file_header\n    webpHeaderRIFFChars[0] === 0x52 &&\n    webpHeaderRIFFChars[1] === 0x49 &&\n    webpHeaderRIFFChars[2] === 0x46 &&\n    webpHeaderRIFFChars[3] === 0x46 &&\n    webpHeaderWEBPChars[0] === 0x57 &&\n    webpHeaderWEBPChars[1] === 0x45 &&\n    webpHeaderWEBPChars[2] === 0x42 &&\n    webpHeaderWEBPChars[3] === 0x50\n  ) {\n    return \"image/webp\";\n  }\n\n  throw new RuntimeError(\"Image format is not recognized\");\n}\n\nasync function loadImageFromBufferTypedArray(typedArray) {\n  const mimeType = getMimeTypeFromTypedArray(typedArray);\n  if (mimeType === \"image/ktx2\") {\n    // Need to make a copy of the embedded KTX2 buffer otherwise the underlying\n    // ArrayBuffer may be accessed on both the worker and the main thread and\n    // throw an error like \"Cannot perform Construct on a detached ArrayBuffer\".\n    // Look into SharedArrayBuffer at some point to get around this.\n    const ktxBuffer = new Uint8Array(typedArray);\n\n    // Resolves to a CompressedTextureBuffer\n    return loadKTX2(ktxBuffer);\n  }\n  // Resolves to an Image or ImageBitmap\n  return GltfImageLoader._loadImageFromTypedArray({\n    uint8Array: typedArray,\n    format: mimeType,\n    flipY: false,\n    skipColorSpaceConversion: true,\n  });\n}\n\nconst ktx2Regex = /(^data:image\\/ktx2)|(\\.ktx2$)/i;\n\nfunction loadImageFromUri(resource) {\n  const uri = resource.getUrlComponent(false, true);\n  if (ktx2Regex.test(uri)) {\n    // Resolves to a CompressedTextureBuffer\n    return loadKTX2(resource);\n  }\n  // Resolves to an ImageBitmap or Image\n  return resource.fetchImage({\n    skipColorSpaceConversion: true,\n    preferImageBitmap: true,\n  });\n}\n\n// Exposed for testing\nGltfImageLoader._loadImageFromTypedArray = loadImageFromTypedArray;\n\nexport default GltfImageLoader;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport JobType from \"./JobType.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\n\n/**\n * Loads an index buffer from a glTF accessor.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfIndexBufferLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {object} options.gltf The glTF JSON.\n   * @param {number} options.accessorId The accessor ID corresponding to the index buffer.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {object} [options.primitive] The primitive containing the Draco extension.\n   * @param {object} [options.draco] The Draco extension object.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n   * @param {boolean} [options.loadBuffer=false] Load the index buffer as a GPU index buffer.\n   * @param {boolean} [options.loadTypedArray=false] Load the index buffer as a typed array.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltf = options.gltf;\n    const accessorId = options.accessorId;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const primitive = options.primitive;\n    const draco = options.draco;\n    const cacheKey = options.cacheKey;\n    const asynchronous = options.asynchronous ?? true;\n    const loadBuffer = options.loadBuffer ?? false;\n    const loadTypedArray = options.loadTypedArray ?? false;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.number(\"options.accessorId\", accessorId);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    if (!loadBuffer && !loadTypedArray) {\n      throw new DeveloperError(\n        \"At least one of loadBuffer and loadTypedArray must be true.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const indexDatatype = gltf.accessors[accessorId].componentType;\n\n    this._resourceCache = resourceCache;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._gltf = gltf;\n    this._accessorId = accessorId;\n    this._indexDatatype = indexDatatype;\n    this._primitive = primitive;\n    this._draco = draco;\n    this._cacheKey = cacheKey;\n    this._asynchronous = asynchronous;\n    this._loadBuffer = loadBuffer;\n    this._loadTypedArray = loadTypedArray;\n    this._bufferViewLoader = undefined;\n    this._dracoLoader = undefined;\n    this._typedArray = undefined;\n    this._buffer = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfIndexBufferLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The index buffer. This is only defined when <code>loadBuffer</code> is true.\n   *\n   * @memberof GltfIndexBufferLoader.prototype\n   *\n   * @type {Buffer}\n   * @readonly\n   * @private\n   */\n  get buffer() {\n    return this._buffer;\n  }\n\n  /**\n   * The typed array containing indices. This is only defined when <code>loadTypedArray</code> is true.\n   *\n   * @memberof GltfIndexBufferLoader.prototype\n   *\n   * @type {Uint8Array|Uint16Array|Uint32Array}\n   * @readonly\n   * @private\n   */\n  get typedArray() {\n    return this._typedArray;\n  }\n\n  /**\n   * The index datatype after decode.\n   *\n   * @memberof GltfIndexBufferLoader.prototype\n   *\n   * @type {IndexDatatype}\n   * @readonly\n   * @private\n   */\n  get indexDatatype() {\n    return this._indexDatatype;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfIndexBufferLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    if (defined(this._draco)) {\n      this._promise = loadFromDraco(this);\n      return this._promise;\n    }\n\n    this._promise = loadFromBufferView(this);\n    return this._promise;\n  }\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === ResourceLoaderState.READY) {\n      return true;\n    }\n\n    if (\n      this._state !== ResourceLoaderState.LOADED &&\n      this._state !== ResourceLoaderState.PROCESSING\n    ) {\n      return false;\n    }\n\n    let typedArray = this._typedArray;\n    let indexDatatype = this._indexDatatype;\n\n    if (defined(this._dracoLoader)) {\n      try {\n        const ready = this._dracoLoader.process(frameState);\n        if (ready) {\n          const dracoLoader = this._dracoLoader;\n          typedArray = dracoLoader.decodedData.indices.typedArray;\n          this._typedArray = typedArray;\n          // The index datatype may be a smaller datatype after draco decode\n          indexDatatype = ComponentDatatype.fromTypedArray(typedArray);\n          this._indexDatatype = indexDatatype;\n        }\n      } catch (error) {\n        handleError(this, error);\n      }\n    }\n\n    if (!defined(typedArray)) {\n      // Buffer view hasn't been loaded yet\n      return false;\n    }\n\n    let buffer;\n    if (this._loadBuffer && this._asynchronous) {\n      const indexBufferJob = scratchIndexBufferJob;\n      indexBufferJob.set(typedArray, indexDatatype, frameState.context);\n      const jobScheduler = frameState.jobScheduler;\n      if (!jobScheduler.execute(indexBufferJob, JobType.BUFFER)) {\n        // Job scheduler is full. Try again next frame.\n        return false;\n      }\n      buffer = indexBufferJob.buffer;\n    } else if (this._loadBuffer) {\n      buffer = createIndexBuffer(typedArray, indexDatatype, frameState.context);\n    }\n\n    // Unload everything except the index buffer and/or typed array.\n    this.unload();\n\n    this._buffer = buffer;\n    this._typedArray = this._loadTypedArray ? typedArray : undefined;\n    this._state = ResourceLoaderState.READY;\n\n    this._resourceCache.statistics.addGeometryLoader(this);\n    return true;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    if (defined(this._buffer)) {\n      this._buffer.destroy();\n    }\n\n    const resourceCache = this._resourceCache;\n\n    if (\n      defined(this._bufferViewLoader) &&\n      !this._bufferViewLoader.isDestroyed()\n    ) {\n      resourceCache.unload(this._bufferViewLoader);\n    }\n\n    if (defined(this._dracoLoader)) {\n      resourceCache.unload(this._dracoLoader);\n    }\n\n    this._bufferViewLoader = undefined;\n    this._dracoLoader = undefined;\n    this._typedArray = undefined;\n    this._buffer = undefined;\n    this._gltf = undefined;\n    this._primitive = undefined;\n  }\n}\n\nclass CreateIndexBufferJob {\n  constructor() {\n    this.typedArray = undefined;\n    this.indexDatatype = undefined;\n    this.context = undefined;\n    this.buffer = undefined;\n  }\n\n  set(typedArray, indexDatatype, context) {\n    this.typedArray = typedArray;\n    this.indexDatatype = indexDatatype;\n    this.context = context;\n  }\n\n  execute() {\n    this.buffer = createIndexBuffer(\n      this.typedArray,\n      this.indexDatatype,\n      this.context,\n    );\n  }\n}\n\nfunction createIndexBuffer(typedArray, indexDatatype, context) {\n  const buffer = Buffer.createIndexBuffer({\n    typedArray: typedArray,\n    context: context,\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: indexDatatype,\n  });\n  buffer.vertexArrayDestroyable = false;\n  return buffer;\n}\n\nconst scratchIndexBufferJob = new CreateIndexBufferJob();\n\nasync function loadFromDraco(indexBufferLoader) {\n  indexBufferLoader._state = ResourceLoaderState.LOADING;\n  const resourceCache = indexBufferLoader._resourceCache;\n\n  try {\n    const dracoLoader = resourceCache.getDracoLoader({\n      gltf: indexBufferLoader._gltf,\n      primitive: indexBufferLoader._primitive,\n      draco: indexBufferLoader._draco,\n      gltfResource: indexBufferLoader._gltfResource,\n      baseResource: indexBufferLoader._baseResource,\n    });\n    indexBufferLoader._dracoLoader = dracoLoader;\n    await dracoLoader.load();\n\n    if (indexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    // Now wait for process() to run to finish loading\n    indexBufferLoader._state = ResourceLoaderState.LOADED;\n    return indexBufferLoader;\n  } catch (error) {\n    if (indexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    handleError(indexBufferLoader, error);\n  }\n}\n\nasync function loadFromBufferView(indexBufferLoader) {\n  const gltf = indexBufferLoader._gltf;\n  const accessorId = indexBufferLoader._accessorId;\n  const accessor = gltf.accessors[accessorId];\n  const bufferViewId = accessor.bufferView;\n\n  indexBufferLoader._state = ResourceLoaderState.LOADING;\n  const resourceCache = indexBufferLoader._resourceCache;\n  try {\n    const bufferViewLoader = resourceCache.getBufferViewLoader({\n      gltf: gltf,\n      bufferViewId: bufferViewId,\n      gltfResource: indexBufferLoader._gltfResource,\n      baseResource: indexBufferLoader._baseResource,\n    });\n    indexBufferLoader._bufferViewLoader = bufferViewLoader;\n\n    await bufferViewLoader.load();\n    if (indexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    const bufferViewTypedArray = bufferViewLoader.typedArray;\n    indexBufferLoader._typedArray = createIndicesTypedArray(\n      indexBufferLoader,\n      bufferViewTypedArray,\n    );\n    indexBufferLoader._state = ResourceLoaderState.PROCESSING;\n    return indexBufferLoader;\n  } catch (error) {\n    if (indexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    handleError(indexBufferLoader, error);\n  }\n}\n\nfunction createIndicesTypedArray(indexBufferLoader, bufferViewTypedArray) {\n  const gltf = indexBufferLoader._gltf;\n  const accessorId = indexBufferLoader._accessorId;\n  const accessor = gltf.accessors[accessorId];\n  const count = accessor.count;\n  const indexDatatype = accessor.componentType;\n  const indexSize = IndexDatatype.getSizeInBytes(indexDatatype);\n\n  let arrayBuffer = bufferViewTypedArray.buffer;\n  let byteOffset = bufferViewTypedArray.byteOffset + accessor.byteOffset;\n\n  if (byteOffset % indexSize !== 0) {\n    const byteLength = count * indexSize;\n    const view = new Uint8Array(arrayBuffer, byteOffset, byteLength);\n    const copy = new Uint8Array(view);\n    arrayBuffer = copy.buffer;\n    byteOffset = 0;\n    deprecationWarning(\n      \"index-buffer-unaligned\",\n      `The index array is not aligned to a ${indexSize}-byte boundary.`,\n    );\n  }\n\n  let typedArray;\n  if (indexDatatype === IndexDatatype.UNSIGNED_BYTE) {\n    typedArray = new Uint8Array(arrayBuffer, byteOffset, count);\n  } else if (indexDatatype === IndexDatatype.UNSIGNED_SHORT) {\n    typedArray = new Uint16Array(arrayBuffer, byteOffset, count);\n  } else if (indexDatatype === IndexDatatype.UNSIGNED_INT) {\n    typedArray = new Uint32Array(arrayBuffer, byteOffset, count);\n  }\n\n  return typedArray;\n}\n\nfunction handleError(indexBufferLoader, error) {\n  indexBufferLoader.unload();\n  indexBufferLoader._state = ResourceLoaderState.FAILED;\n  const errorMessage = \"Failed to load index buffer\";\n  throw indexBufferLoader.getError(errorMessage, error);\n}\n\nexport default GltfIndexBufferLoader;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport getMagic from \"../Core/getMagic.js\";\nimport isDataUri from \"../Core/isDataUri.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport addDefaults from \"./GltfPipeline/addDefaults.js\";\nimport addPipelineExtras from \"./GltfPipeline/addPipelineExtras.js\";\nimport ForEach from \"./GltfPipeline/ForEach.js\";\nimport parseGlb from \"./GltfPipeline/parseGlb.js\";\nimport removePipelineExtras from \"./GltfPipeline/removePipelineExtras.js\";\nimport updateVersion from \"./GltfPipeline/updateVersion.js\";\nimport usesExtension from \"./GltfPipeline/usesExtension.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\nimport ModelUtility from \"./Model/ModelUtility.js\";\n\n/**\n * Loads a glTF JSON from a glTF or glb.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfJsonLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {Uint8Array} [options.typedArray] The typed array containing the glTF contents.\n   * @param {object} [options.gltfJson] The parsed glTF JSON contents.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const typedArray = options.typedArray;\n    const gltfJson = options.gltfJson;\n    const cacheKey = options.cacheKey;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    //>>includeEnd('debug');\n\n    this._resourceCache = resourceCache;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._typedArray = typedArray;\n    this._gltfJson = gltfJson;\n    this._cacheKey = cacheKey;\n    this._gltf = undefined;\n    this._bufferLoaders = [];\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfJsonLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The glTF JSON.\n   *\n   * @memberof GltfJsonLoader.prototype\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  get gltf() {\n    return this._gltf;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfJsonLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._state = ResourceLoaderState.LOADING;\n\n    if (defined(this._gltfJson)) {\n      this._promise = processGltfJson(this, this._gltfJson);\n      return this._promise;\n    }\n\n    if (defined(this._typedArray)) {\n      this._promise = processGltfTypedArray(this, this._typedArray);\n      return this._promise;\n    }\n\n    this._promise = loadFromUri(this);\n    return this._promise;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    const bufferLoaders = this._bufferLoaders;\n    const bufferLoadersLength = bufferLoaders.length;\n    for (let i = 0; i < bufferLoadersLength; ++i) {\n      bufferLoaders[i] =\n        !bufferLoaders[i].isDestroyed() &&\n        this._resourceCache.unload(bufferLoaders[i]);\n    }\n    this._bufferLoaders.length = 0;\n\n    this._gltf = undefined;\n  }\n\n  /**\n   * Exposed for testing\n   *\n   * @private\n   */\n  _fetchGltf() {\n    return this._gltfResource.fetchArrayBuffer();\n  }\n}\n\nasync function loadFromUri(gltfJsonLoader) {\n  let typedArray;\n  try {\n    const arrayBuffer = await gltfJsonLoader._fetchGltf();\n    if (gltfJsonLoader.isDestroyed()) {\n      return;\n    }\n\n    typedArray = new Uint8Array(arrayBuffer);\n  } catch (error) {\n    if (gltfJsonLoader.isDestroyed()) {\n      return;\n    }\n\n    handleError(gltfJsonLoader, error);\n  }\n\n  return processGltfTypedArray(gltfJsonLoader, typedArray);\n}\n\nfunction handleError(gltfJsonLoader, error) {\n  gltfJsonLoader.unload();\n  gltfJsonLoader._state = ResourceLoaderState.FAILED;\n  const errorMessage = `Failed to load glTF: ${gltfJsonLoader._gltfResource.url}`;\n  throw gltfJsonLoader.getError(errorMessage, error);\n}\n\nasync function upgradeVersion(gltfJsonLoader, gltf) {\n  if (\n    defined(gltf.asset) &&\n    gltf.asset.version === \"2.0\" &&\n    !usesExtension(gltf, \"KHR_techniques_webgl\") &&\n    !usesExtension(gltf, \"KHR_materials_common\")\n  ) {\n    return Promise.resolve();\n  }\n\n  // Load all buffers into memory. updateVersion will read and in some cases modify\n  // the buffer data, which it accesses from buffer.extras._pipeline.source\n  const promises = [];\n  ForEach.buffer(gltf, function (buffer) {\n    if (\n      !defined(buffer.extras._pipeline.source) && // Ignore uri if this buffer uses the glTF 1.0 KHR_binary_glTF extension\n      defined(buffer.uri)\n    ) {\n      const resource = gltfJsonLoader._baseResource.getDerivedResource({\n        url: buffer.uri,\n      });\n      const resourceCache = gltfJsonLoader._resourceCache;\n      const bufferLoader = resourceCache.getExternalBufferLoader({\n        resource: resource,\n      });\n      gltfJsonLoader._bufferLoaders.push(bufferLoader);\n\n      promises.push(\n        bufferLoader.load().then(function () {\n          if (bufferLoader.isDestroyed()) {\n            return;\n          }\n\n          buffer.extras._pipeline.source = bufferLoader.typedArray;\n        }),\n      );\n    }\n  });\n\n  await Promise.all(promises);\n  updateVersion(gltf);\n}\n\nfunction decodeDataUris(gltf) {\n  const promises = [];\n  ForEach.buffer(gltf, function (buffer) {\n    const bufferUri = buffer.uri;\n    if (\n      !defined(buffer.extras._pipeline.source) && // Ignore uri if this buffer uses the glTF 1.0 KHR_binary_glTF extension\n      defined(bufferUri) &&\n      isDataUri(bufferUri)\n    ) {\n      delete buffer.uri; // Delete the data URI to keep the cached glTF JSON small\n      promises.push(\n        Resource.fetchArrayBuffer(bufferUri).then(function (arrayBuffer) {\n          buffer.extras._pipeline.source = new Uint8Array(arrayBuffer);\n        }),\n      );\n    }\n  });\n  return Promise.all(promises);\n}\n\nfunction loadEmbeddedBuffers(gltfJsonLoader, gltf) {\n  const promises = [];\n  ForEach.buffer(gltf, function (buffer, bufferId) {\n    const source = buffer.extras._pipeline.source;\n    if (defined(source) && !defined(buffer.uri)) {\n      const resourceCache = gltfJsonLoader._resourceCache;\n      const bufferLoader = resourceCache.getEmbeddedBufferLoader({\n        parentResource: gltfJsonLoader._gltfResource,\n        bufferId: bufferId,\n        typedArray: source,\n      });\n      gltfJsonLoader._bufferLoaders.push(bufferLoader);\n      promises.push(bufferLoader.load());\n    }\n  });\n  return Promise.all(promises);\n}\n\nasync function processGltfJson(gltfJsonLoader, gltf) {\n  try {\n    addPipelineExtras(gltf);\n\n    await decodeDataUris(gltf);\n    await upgradeVersion(gltfJsonLoader, gltf);\n    addDefaults(gltf);\n    await loadEmbeddedBuffers(gltfJsonLoader, gltf);\n    removePipelineExtras(gltf);\n\n    const version = gltf.asset.version;\n    if (version !== \"1.0\" && version !== \"2.0\") {\n      throw new RuntimeError(`Unsupported glTF version: ${version}`);\n    }\n\n    const extensionsRequired = gltf.extensionsRequired;\n    if (defined(extensionsRequired)) {\n      ModelUtility.checkSupportedExtensions(extensionsRequired);\n    }\n\n    gltfJsonLoader._gltf = gltf;\n    gltfJsonLoader._state = ResourceLoaderState.READY;\n    return gltfJsonLoader;\n  } catch (error) {\n    if (gltfJsonLoader.isDestroyed()) {\n      return;\n    }\n\n    handleError(gltfJsonLoader, error);\n  }\n}\n\nasync function processGltfTypedArray(gltfJsonLoader, typedArray) {\n  let gltf;\n  try {\n    if (getMagic(typedArray) === \"glTF\") {\n      gltf = parseGlb(typedArray);\n    } else {\n      gltf = getJsonFromTypedArray(typedArray);\n    }\n  } catch (error) {\n    if (gltfJsonLoader.isDestroyed()) {\n      return;\n    }\n\n    handleError(gltfJsonLoader, error);\n  }\n\n  return processGltfJson(gltfJsonLoader, gltf);\n}\n\nexport default GltfJsonLoader;\n","import ArticulationStageType from \"../Core/ArticulationStageType.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport InterpolationType from \"../Core/InterpolationType.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport getAccessorByteStride from \"./GltfPipeline/getAccessorByteStride.js\";\nimport getComponentReader from \"./GltfPipeline/getComponentReader.js\";\nimport numberOfComponentsForType from \"./GltfPipeline/numberOfComponentsForType.js\";\nimport GltfStructuralMetadataLoader from \"./GltfStructuralMetadataLoader.js\";\nimport AttributeType from \"./AttributeType.js\";\nimport Axis from \"./Axis.js\";\nimport GltfLoaderUtil from \"./GltfLoaderUtil.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport InstanceAttributeSemantic from \"./InstanceAttributeSemantic.js\";\nimport ModelComponents from \"./ModelComponents.js\";\nimport PrimitiveLoadPlan from \"./PrimitiveLoadPlan.js\";\nimport ResourceCache from \"./ResourceCache.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport SupportedImageFormats from \"./SupportedImageFormats.js\";\nimport VertexAttributeSemantic from \"./VertexAttributeSemantic.js\";\nimport GltfGpmLoader from \"./Model/Extensions/Gpm/GltfGpmLoader.js\";\nimport GltfMeshPrimitiveGpmLoader from \"./Model/Extensions/Gpm/GltfMeshPrimitiveGpmLoader.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport addAllToArray from \"../Core/addAllToArray.js\";\nimport getMeshPrimitives from \"./getMeshPrimitives.js\";\n\nconst {\n  Attribute,\n  Indices,\n  FeatureIdAttribute,\n  FeatureIdTexture,\n  FeatureIdImplicitRange,\n  MorphTarget,\n  Primitive,\n  Instances,\n  Skin,\n  Node,\n  AnimatedPropertyType,\n  AnimationSampler,\n  AnimationTarget,\n  AnimationChannel,\n  Animation,\n  ArticulationStage,\n  Articulation,\n  Asset,\n  Scene,\n  Components,\n  MetallicRoughness,\n  SpecularGlossiness,\n  Specular,\n  Anisotropy,\n  Clearcoat,\n  Material,\n} = ModelComponents;\n\n/**\n * States of the glTF loading process. These states also apply to\n * asynchronous texture loading unless otherwise noted\n *\n * @enum {number}\n *\n * @private\n */\nconst GltfLoaderState = {\n  /**\n   * The initial state of the glTF loader before load() is called.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  NOT_LOADED: 0,\n  /**\n   * The state of the loader while waiting for the glTF JSON loader promise\n   * to resolve.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  LOADING: 1,\n  /**\n   * The state of the loader once the glTF JSON is loaded but before\n   * process() is called.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  LOADED: 2,\n  /**\n   * The state of the loader while parsing the glTF and creating GPU resources\n   * as needed.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  PROCESSING: 3,\n  /**\n   * For some features like handling CESIUM_primitive_outlines, the geometry\n   * must be modified after it is loaded. The post-processing state handles\n   * any geometry modification (if needed).\n   * <p>\n   * This state is not used for asynchronous texture loading.\n   * </p>\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  POST_PROCESSING: 4,\n  /**\n   * Once the processing/post-processing states are finished, the loader\n   * enters the processed state (sometimes from a promise chain). The next\n   * call to process() will advance to the ready state.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  PROCESSED: 5,\n  /**\n   * When the loader reaches the ready state, the loaders' promise will be\n   * resolved.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  READY: 6,\n  /**\n   * If an error occurs at any point, the loader switches to the failed state.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  FAILED: 7,\n  /**\n   * If unload() is called, the loader switches to the unloaded state.\n   *\n   * @type {number}\n   * @constant\n   *\n   * @private\n   */\n  UNLOADED: 8,\n};\n\n/**\n * Loads a glTF model.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF. This is often the path of the .gltf or .glb file, but may also be the path of the .b3dm, .i3dm, or .cmpt file containing the embedded glb. .cmpt resources should have a URI fragment indicating the index of the inner content to which the glb belongs in order to individually identify the glb in the cache, e.g. http://example.com/tile.cmpt#index=2.\n   * @param {Resource} [options.baseResource] The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {Uint8Array} [options.typedArray] The typed array containing the glTF contents, e.g. from a .b3dm, .i3dm, or .cmpt file.\n   * @param {object} [options.gltfJson] A parsed glTF JSON file instead of passing it in as a typed array.\n   * @param {boolean} [options.releaseGltfJson=false] When true, the glTF JSON is released once the glTF is loaded. This is especially useful for cases like 3D Tiles, where each .gltf model is unique and caching the glTF JSON is not effective.\n   * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n   * @param {boolean} [options.incrementallyLoadTextures=true] Determine if textures may continue to stream in after the glTF is loaded.\n   * @param {Axis} [options.upAxis=Axis.Y] The up-axis of the glTF model.\n   * @param {Axis} [options.forwardAxis=Axis.Z] The forward-axis of the glTF model.\n   * @param {boolean} [options.loadAttributesAsTypedArray=false] Load all attributes and indices as typed arrays instead of GPU buffers. If the attributes are interleaved in the glTF they will be de-interleaved in the typed array.\n   * @param {boolean} [options.loadAttributesFor2D=false] If <code>true</code>, load the positions buffer and any instanced attribute buffers as typed arrays for accurately projecting models to 2D.\n   * @param {boolean} [options.enablePick=false]  If <code>true</code>, load the positions buffer, any instanced attribute buffers, and index buffer as typed arrays for CPU-enabled picking in WebGL1.\n   * @param {boolean} [options.loadIndicesForWireframe=false] If <code>true</code>, load the index buffer as both a buffer and typed array. The latter is useful for creating wireframe indices in WebGL1.\n   * @param {boolean} [options.loadPrimitiveOutline=true] If <code>true</code>, load outlines from the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. This can be set false to avoid post-processing geometry at load time.\n   * @param {boolean} [options.loadForClassification=false] If <code>true</code> and if the model has feature IDs, load the feature IDs and indices as typed arrays. This is useful for batching features for classification.\n   * @param {boolean} [options.renameBatchIdSemantic=false] If <code>true</code>, rename _BATCHID or BATCHID to _FEATURE_ID_0. This is used for .b3dm models\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const {\n      gltfResource,\n      typedArray,\n      releaseGltfJson = false,\n      asynchronous = true,\n      incrementallyLoadTextures = true,\n      upAxis = Axis.Y,\n      forwardAxis = Axis.Z,\n      loadAttributesAsTypedArray = false,\n      loadAttributesFor2D = false,\n      enablePick = false,\n      loadIndicesForWireframe = false,\n      loadPrimitiveOutline = true,\n      loadForClassification = false,\n      renameBatchIdSemantic = false,\n    } = options;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    //>>includeEnd('debug');\n\n    const { baseResource = gltfResource.clone() } = options;\n\n    this._gltfJson = options.gltfJson;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._typedArray = typedArray;\n    this._releaseGltfJson = releaseGltfJson;\n    this._asynchronous = asynchronous;\n    this._incrementallyLoadTextures = incrementallyLoadTextures;\n    this._upAxis = upAxis;\n    this._forwardAxis = forwardAxis;\n    this._loadAttributesAsTypedArray = loadAttributesAsTypedArray;\n    this._loadAttributesFor2D = loadAttributesFor2D;\n    this._enablePick = enablePick;\n    this._loadIndicesForWireframe = loadIndicesForWireframe;\n    this._loadPrimitiveOutline = loadPrimitiveOutline;\n    this._loadForClassification = loadForClassification;\n    this._renameBatchIdSemantic = renameBatchIdSemantic;\n\n    // When loading EXT_feature_metadata, the feature tables and textures\n    // are now stored as arrays like the newer EXT_structural_metadata extension.\n    // This requires sorting the dictionary keys for a consistent ordering.\n    this._sortedPropertyTableIds = undefined;\n    this._sortedFeatureTextureIds = undefined;\n\n    this._gltfJsonLoader = undefined;\n    this._state = GltfLoaderState.NOT_LOADED;\n    this._textureState = GltfLoaderState.NOT_LOADED;\n    this._promise = undefined;\n    this._processError = undefined;\n    this._textureErrors = [];\n\n    // Information about whether to load primitives as typed arrays or buffers,\n    // and whether post-processing is needed after loading (e.g. for\n    // generating outlines)\n    this._primitiveLoadPlans = [];\n\n    // Loaders that need to be processed before the glTF becomes ready\n    this._loaderPromises = [];\n    this._textureLoaders = [];\n    this._texturesPromises = [];\n    this._textureCallbacks = [];\n    this._bufferViewLoaders = [];\n    this._geometryLoaders = [];\n    this._geometryCallbacks = [];\n    this._structuralMetadataLoader = undefined;\n    this._meshPrimitiveGpmLoader = undefined;\n    this._loadResourcesPromise = undefined;\n    this._resourcesLoaded = false;\n    this._texturesLoaded = false;\n\n    this._supportedImageFormats = undefined;\n\n    // In some cases where geometry post-processing is needed (like generating\n    // outlines) new attributes are added that may have GPU resources attached.\n    // The GltfLoader will own the resources and store them here.\n    this._postProcessBuffers = [];\n\n    // Loaded results\n    this._components = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return undefined;\n  }\n\n  /**\n   * The loaded components.\n   *\n   * @memberof GltfLoader.prototype\n   *\n   * @type {ModelComponents.Components}\n   * @readonly\n   * @private\n   */\n  get components() {\n    return this._components;\n  }\n\n  /**\n   * The loaded glTF json.\n   *\n   * @memberof GltfLoader.prototype\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  get gltfJson() {\n    if (defined(this._gltfJsonLoader)) {\n      return this._gltfJsonLoader.gltf;\n    }\n    return this._gltfJson;\n  }\n\n  /**\n   * Returns true if textures are loaded separately from the other glTF resources.\n   *\n   * @memberof GltfLoader.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  get incrementallyLoadTextures() {\n    return this._incrementallyLoadTextures;\n  }\n\n  /**\n   * true if textures are loaded, useful when incrementallyLoadTextures is true\n   *\n   * @memberof GltfLoader.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  get texturesLoaded() {\n    return this._texturesLoaded;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise.<GltfLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @exception {RuntimeError} Unsupported glTF version\n   * @exception {RuntimeError} Unsupported glTF Extension\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._promise = loadGltfJson(this);\n    return this._promise;\n  }\n\n  /**\n   * Process loaders other than textures\n   * @private\n   */\n  _process(frameState) {\n    if (this._state === GltfLoaderState.READY) {\n      return true;\n    }\n\n    if (this._state === GltfLoaderState.PROCESSING) {\n      processLoaders(this, frameState);\n    }\n\n    if (\n      this._resourcesLoaded &&\n      this._state === GltfLoaderState.POST_PROCESSING\n    ) {\n      postProcessGeometry(this, frameState.context);\n      this._state = GltfLoaderState.PROCESSED;\n    }\n\n    if (this._resourcesLoaded && this._state === GltfLoaderState.PROCESSED) {\n      // The buffer views can be unloaded once the data is copied.\n      unloadBufferViewLoaders(this);\n\n      // Similarly, if the glTF was loaded from a typed array, release the memory\n      this._typedArray = undefined;\n\n      this._state = GltfLoaderState.READY;\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Process textures other than textures\n   * @private\n   */\n  _processTextures(frameState) {\n    if (this._textureState === GltfLoaderState.READY) {\n      return true;\n    }\n\n    if (this._textureState !== GltfLoaderState.PROCESSING) {\n      return false;\n    }\n\n    let ready = true;\n    const textureLoaders = this._textureLoaders;\n    for (let i = 0; i < textureLoaders.length; ++i) {\n      const textureReady = textureLoaders[i].process(frameState);\n      if (textureReady && defined(this._textureCallbacks[i])) {\n        this._textureCallbacks[i]();\n        this._textureCallbacks[i] = undefined;\n      }\n\n      ready = ready && textureReady;\n    }\n\n    if (!ready) {\n      return false;\n    }\n\n    this._textureState = GltfLoaderState.READY;\n    this._texturesLoaded = true;\n    return true;\n  }\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (\n      this._state === GltfLoaderState.LOADED &&\n      !defined(this._loadResourcesPromise)\n    ) {\n      this._loadResourcesPromise = loadResources(this, frameState)\n        .then(() => {\n          this._resourcesLoaded = true;\n        })\n        .catch((error) => {\n          this._processError = error;\n        });\n    }\n\n    if (defined(this._processError)) {\n      this._state = GltfLoaderState.FAILED;\n      const error = this._processError;\n      this._processError = undefined;\n      handleError(this, error);\n    }\n\n    // Pop the next error of the list in case there are multiple\n    const textureError = this._textureErrors.pop();\n    if (defined(textureError)) {\n      // There shouldn't be the need to completely unload in this case. Just throw the error.\n      const error = this.getError(\"Failed to load glTF texture\", textureError);\n      error.name = \"TextureError\";\n      throw error;\n    }\n\n    if (this._state === GltfLoaderState.FAILED) {\n      return false;\n    }\n\n    let ready = false;\n    try {\n      ready = this._process(frameState);\n    } catch (error) {\n      this._state = GltfLoaderState.FAILED;\n      handleError(this, error);\n    }\n\n    // Since textures can be loaded independently and are handled through a separate promise, they are processed in their own function\n    let texturesReady = false;\n    try {\n      texturesReady = this._processTextures(frameState);\n    } catch (error) {\n      this._textureState = GltfLoaderState.FAILED;\n      handleError(this, error);\n    }\n\n    if (this._incrementallyLoadTextures) {\n      return ready;\n    }\n\n    return ready && texturesReady;\n  }\n\n  /**\n   * Returns whether the resource has been unloaded.\n   * @private\n   */\n  isUnloaded() {\n    return this._state === GltfLoaderState.UNLOADED;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    if (defined(this._gltfJsonLoader) && !this._gltfJsonLoader.isDestroyed()) {\n      ResourceCache.unload(this._gltfJsonLoader);\n    }\n    this._gltfJsonLoader = undefined;\n\n    unloadTextures(this);\n    unloadBufferViewLoaders(this);\n    unloadGeometry(this);\n    unloadGeneratedAttributes(this);\n    unloadStructuralMetadata(this);\n    unloadMeshPrimitiveGpm(this);\n\n    this._components = undefined;\n    this._typedArray = undefined;\n    this._state = GltfLoaderState.UNLOADED;\n  }\n}\n\n/**\n * Loads the gltf object\n */\nasync function loadGltfJson(loader) {\n  loader._state = GltfLoaderState.LOADING;\n  loader._textureState = GltfLoaderState.LOADING;\n\n  try {\n    const gltfJsonLoader = ResourceCache.getGltfJsonLoader({\n      gltfResource: loader._gltfResource,\n      baseResource: loader._baseResource,\n      typedArray: loader._typedArray,\n      gltfJson: loader._gltfJson,\n    });\n    loader._gltfJsonLoader = gltfJsonLoader;\n    await gltfJsonLoader.load();\n\n    if (\n      loader.isDestroyed() ||\n      loader.isUnloaded() ||\n      gltfJsonLoader.isDestroyed()\n    ) {\n      return;\n    }\n\n    loader._state = GltfLoaderState.LOADED;\n    loader._textureState = GltfLoaderState.LOADED;\n\n    return loader;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader._state = GltfLoaderState.FAILED;\n    loader._textureState = GltfLoaderState.FAILED;\n    handleError(loader, error);\n  }\n}\n\nasync function loadResources(loader, frameState) {\n  if (!FeatureDetection.supportsWebP.initialized) {\n    await FeatureDetection.supportsWebP.initialize();\n  }\n\n  loader._supportedImageFormats = new SupportedImageFormats({\n    webp: FeatureDetection.supportsWebP(),\n    basis: frameState.context.supportsBasis,\n  });\n\n  // Loaders that create GPU resources need to be processed every frame until they become\n  // ready since the JobScheduler is not able to execute all jobs in a single\n  // frame. Any promise failures are collected, and will be handled synchronously in process().\n  // Also note that it's fine to call process before a loader is ready to process or\n  // after it has failed; nothing will happen.\n  const promise = parse(loader, frameState);\n\n  // All resource loaders have been created, so we can begin processing\n  loader._state = GltfLoaderState.PROCESSING;\n  loader._textureState = GltfLoaderState.PROCESSING;\n\n  if (defined(loader._gltfJsonLoader) && loader._releaseGltfJson) {\n    // Check that the glTF JSON loader is still defined before trying to unload it.\n    // It can be unloaded if the glTF loader is destroyed.\n    ResourceCache.unload(loader._gltfJsonLoader);\n    loader._gltfJsonLoader = undefined;\n  }\n\n  return promise;\n}\n\nfunction handleError(gltfLoader, error) {\n  gltfLoader.unload();\n  const errorMessage = \"Failed to load glTF\";\n  throw gltfLoader.getError(errorMessage, error);\n}\n\nfunction processLoaders(loader, frameState) {\n  let ready = true;\n  const geometryLoaders = loader._geometryLoaders;\n  for (let i = 0; i < geometryLoaders.length; ++i) {\n    const geometryReady = geometryLoaders[i].process(frameState);\n    if (geometryReady && defined(loader._geometryCallbacks[i])) {\n      loader._geometryCallbacks[i]();\n      loader._geometryCallbacks[i] = undefined;\n    }\n    ready = ready && geometryReady;\n  }\n\n  const structuralMetadataLoader = loader._structuralMetadataLoader;\n  if (defined(structuralMetadataLoader)) {\n    const metadataReady = structuralMetadataLoader.process(frameState);\n    if (metadataReady) {\n      loader._components.structuralMetadata =\n        structuralMetadataLoader.structuralMetadata;\n    }\n    ready = ready && metadataReady;\n  }\n\n  const meshPrimitiveGpmLoader = loader._meshPrimitiveGpmLoader;\n  if (defined(meshPrimitiveGpmLoader)) {\n    const metadataReady = meshPrimitiveGpmLoader.process(frameState);\n    if (metadataReady) {\n      if (defined(loader._components.structuralMetadata)) {\n        oneTimeWarning(\n          \"structural-metadata-gpm\",\n          \"The model defines both the 'EXT_structural_metadata' extension and the \" +\n            \"'NGA_gpm_local' extension. The data from the 'EXT_structural_metadata' \" +\n            \"extension will be replaced with the data from the 'NGA_gpm_local' extension, \" +\n            \"and will no longer be available for styling and picking.\",\n        );\n      }\n      loader._components.structuralMetadata =\n        meshPrimitiveGpmLoader.structuralMetadata;\n    }\n    ready = ready && metadataReady;\n  }\n\n  if (ready) {\n    // Geometry requires further processing\n    loader._state = GltfLoaderState.POST_PROCESSING;\n  }\n}\n\nfunction postProcessGeometry(loader, context) {\n  // Apply post-processing steps on geometry such as\n  // updating attributes for rendering outlines.\n  const loadPlans = loader._primitiveLoadPlans;\n  for (let i = 0; i < loadPlans.length; i++) {\n    const loadPlan = loadPlans[i];\n    loadPlan.postProcess(context);\n    if (loadPlan.needsOutlines || loadPlan.needsGaussianSplats) {\n      // The glTF loader takes ownership of any buffers generated in the\n      // post-process stage since they were created after the geometry loaders\n      // finished. This way they can be destroyed when the loader is destroyed.\n      gatherPostProcessBuffers(loader, loadPlan);\n    }\n  }\n}\n\nfunction gatherPostProcessBuffers(loader, primitiveLoadPlan) {\n  const buffers = loader._postProcessBuffers;\n  const primitive = primitiveLoadPlan.primitive;\n\n  const outlineCoordinates = primitive.outlineCoordinates;\n  if (defined(outlineCoordinates)) {\n    // outline coordinates are always loaded as a buffer.\n    buffers.push(outlineCoordinates.buffer);\n  }\n\n  // to do post-processing, all the attributes are loaded as typed arrays\n  // so if a buffer exists, it was newly generated\n  const attributes = primitive.attributes;\n  for (let i = 0; i < attributes.length; i++) {\n    const attribute = attributes[i];\n    if (defined(attribute.buffer)) {\n      buffers.push(attribute.buffer);\n    }\n  }\n\n  // Similarly for the indices.\n  const indices = primitive.indices;\n  if (defined(indices) && defined(indices.buffer)) {\n    buffers.push(indices.buffer);\n  }\n}\n\nfunction getVertexBufferLoader(\n  loader,\n  accessorId,\n  semantic,\n  primitive,\n  draco,\n  spzExtension,\n  loadBuffer,\n  loadTypedArray,\n  frameState,\n) {\n  const gltf = loader.gltfJson;\n  const accessor = gltf.accessors[accessorId];\n  const bufferViewId = accessor.bufferView;\n\n  const vertexBufferLoader = ResourceCache.getVertexBufferLoader({\n    gltf: gltf,\n    gltfResource: loader._gltfResource,\n    baseResource: loader._baseResource,\n    frameState: frameState,\n    bufferViewId: bufferViewId,\n    primitive: primitive,\n    draco: draco,\n    spz: spzExtension,\n    attributeSemantic: semantic,\n    accessorId: accessorId,\n    asynchronous: loader._asynchronous,\n    loadBuffer: loadBuffer,\n    loadTypedArray: loadTypedArray,\n  });\n\n  return vertexBufferLoader;\n}\n\nfunction getIndexBufferLoader(\n  loader,\n  accessorId,\n  primitive,\n  draco,\n  loadBuffer,\n  loadTypedArray,\n  frameState,\n) {\n  const indexBufferLoader = ResourceCache.getIndexBufferLoader({\n    gltf: loader.gltfJson,\n    accessorId: accessorId,\n    gltfResource: loader._gltfResource,\n    baseResource: loader._baseResource,\n    frameState: frameState,\n    primitive: primitive,\n    draco: draco,\n    asynchronous: loader._asynchronous,\n    loadBuffer: loadBuffer,\n    loadTypedArray: loadTypedArray,\n  });\n\n  return indexBufferLoader;\n}\n\nfunction getBufferViewLoader(loader, bufferViewId) {\n  const bufferViewLoader = ResourceCache.getBufferViewLoader({\n    gltf: loader.gltfJson,\n    bufferViewId: bufferViewId,\n    gltfResource: loader._gltfResource,\n    baseResource: loader._baseResource,\n  });\n\n  loader._bufferViewLoaders.push(bufferViewLoader);\n\n  return bufferViewLoader;\n}\n\nfunction getPackedTypedArray(gltf, accessor, bufferViewTypedArray) {\n  let byteOffset = accessor.byteOffset;\n  const byteStride = getAccessorByteStride(gltf, accessor);\n  const count = accessor.count;\n  const componentCount = numberOfComponentsForType(accessor.type);\n  const componentType = accessor.componentType;\n  const componentByteLength = ComponentDatatype.getSizeInBytes(componentType);\n  const defaultByteStride = componentByteLength * componentCount;\n  const componentsLength = count * componentCount;\n\n  if (byteStride === defaultByteStride) {\n    // Copy the typed array and let the underlying ArrayBuffer be freed\n    bufferViewTypedArray = new Uint8Array(bufferViewTypedArray);\n    return ComponentDatatype.createArrayBufferView(\n      componentType,\n      bufferViewTypedArray.buffer,\n      bufferViewTypedArray.byteOffset + byteOffset,\n      componentsLength,\n    );\n  }\n\n  const accessorTypedArray = ComponentDatatype.createTypedArray(\n    componentType,\n    componentsLength,\n  );\n\n  const dataView = new DataView(bufferViewTypedArray.buffer);\n  const components = new Array(componentCount);\n  const componentReader = getComponentReader(accessor.componentType);\n  byteOffset = bufferViewTypedArray.byteOffset + byteOffset;\n\n  for (let i = 0; i < count; ++i) {\n    componentReader(\n      dataView,\n      byteOffset,\n      componentCount,\n      componentByteLength,\n      components,\n    );\n    for (let j = 0; j < componentCount; ++j) {\n      accessorTypedArray[i * componentCount + j] = components[j];\n    }\n    byteOffset += byteStride;\n  }\n\n  return accessorTypedArray;\n}\n\nfunction loadDefaultAccessorValues(accessor, values) {\n  const accessorType = accessor.type;\n  if (accessorType === AttributeType.SCALAR) {\n    return values.fill(0);\n  }\n\n  const MathType = AttributeType.getMathType(accessorType);\n  return values.fill(MathType.clone(MathType.ZERO));\n}\n\nfunction loadAccessorValues(accessor, typedArray, values, useQuaternion) {\n  const accessorType = accessor.type;\n  const accessorCount = accessor.count;\n\n  if (accessorType === AttributeType.SCALAR) {\n    for (let i = 0; i < accessorCount; i++) {\n      values[i] = typedArray[i];\n    }\n  } else if (accessorType === AttributeType.VEC4 && useQuaternion) {\n    for (let i = 0; i < accessorCount; i++) {\n      values[i] = Quaternion.unpack(typedArray, i * 4);\n    }\n  } else {\n    const MathType = AttributeType.getMathType(accessorType);\n    const numberOfComponents =\n      AttributeType.getNumberOfComponents(accessorType);\n\n    for (let i = 0; i < accessorCount; i++) {\n      values[i] = MathType.unpack(typedArray, i * numberOfComponents);\n    }\n  }\n\n  return values;\n}\n\nasync function loadAccessorBufferView(\n  loader,\n  bufferViewLoader,\n  accessor,\n  useQuaternion,\n  values,\n) {\n  // Save a link to the gltfJson, which is removed after bufferViewLoader.load()\n  const { gltfJson } = loader;\n\n  await bufferViewLoader.load();\n  if (loader.isDestroyed()) {\n    return;\n  }\n\n  const typedArray = getPackedTypedArray(\n    gltfJson,\n    accessor,\n    bufferViewLoader.typedArray,\n  );\n\n  useQuaternion = useQuaternion ?? false;\n  loadAccessorValues(accessor, typedArray, values, useQuaternion);\n}\n\nfunction loadAccessor(loader, accessor, useQuaternion) {\n  const values = new Array(accessor.count);\n\n  const bufferViewId = accessor.bufferView;\n  if (defined(bufferViewId)) {\n    const bufferViewLoader = getBufferViewLoader(loader, bufferViewId);\n    const promise = loadAccessorBufferView(\n      loader,\n      bufferViewLoader,\n      accessor,\n      useQuaternion,\n      values,\n    );\n    loader._loaderPromises.push(promise);\n\n    return values;\n  }\n\n  return loadDefaultAccessorValues(accessor, values);\n}\n\nfunction fromArray(MathType, values) {\n  if (!defined(values)) {\n    return undefined;\n  }\n\n  if (MathType === Number) {\n    return values[0];\n  }\n\n  return MathType.unpack(values);\n}\n\nfunction getDefault(MathType) {\n  if (MathType === Number) {\n    return 0.0;\n  }\n\n  return new MathType(); // defaults to 0.0 for all types\n}\n\nfunction getQuantizationDivisor(componentDatatype) {\n  switch (componentDatatype) {\n    case ComponentDatatype.BYTE:\n      return 127;\n    case ComponentDatatype.UNSIGNED_BYTE:\n      return 255;\n    case ComponentDatatype.SHORT:\n      return 32767;\n    case ComponentDatatype.UNSIGNED_SHORT:\n      return 65535;\n    default:\n      return 1.0;\n  }\n}\n\nconst minimumBoundsByType = {\n  VEC2: new Cartesian2(-1.0, -1.0),\n  VEC3: new Cartesian3(-1.0, -1.0, -1.0),\n  VEC4: new Cartesian4(-1.0, -1.0, -1.0, -1.0),\n};\n\nfunction dequantizeMinMax(attribute, VectorType) {\n  const divisor = getQuantizationDivisor(attribute.componentDatatype);\n  const minimumBound = minimumBoundsByType[attribute.type];\n\n  // dequantized = max(quantized / divisor, -1.0)\n  let min = attribute.min;\n  if (defined(min)) {\n    min = VectorType.divideByScalar(min, divisor, min);\n    min = VectorType.maximumByComponent(min, minimumBound, min);\n  }\n\n  let max = attribute.max;\n  if (defined(max)) {\n    max = VectorType.divideByScalar(max, divisor, max);\n    max = VectorType.maximumByComponent(max, minimumBound, max);\n  }\n\n  attribute.min = min;\n  attribute.max = max;\n}\n\nfunction setQuantizationFromWeb3dQuantizedAttributes(\n  extension,\n  attribute,\n  MathType,\n) {\n  const decodeMatrix = extension.decodeMatrix;\n  const decodedMin = fromArray(MathType, extension.decodedMin);\n  const decodedMax = fromArray(MathType, extension.decodedMax);\n\n  if (defined(decodedMin) && defined(decodedMax)) {\n    attribute.min = decodedMin;\n    attribute.max = decodedMax;\n  }\n\n  const quantization = new ModelComponents.Quantization();\n  quantization.componentDatatype = attribute.componentDatatype;\n  quantization.type = attribute.type;\n\n  if (decodeMatrix.length === 4) {\n    quantization.quantizedVolumeOffset = decodeMatrix[2];\n    quantization.quantizedVolumeStepSize = decodeMatrix[0];\n  } else if (decodeMatrix.length === 9) {\n    quantization.quantizedVolumeOffset = new Cartesian2(\n      decodeMatrix[6],\n      decodeMatrix[7],\n    );\n    quantization.quantizedVolumeStepSize = new Cartesian2(\n      decodeMatrix[0],\n      decodeMatrix[4],\n    );\n  } else if (decodeMatrix.length === 16) {\n    quantization.quantizedVolumeOffset = new Cartesian3(\n      decodeMatrix[12],\n      decodeMatrix[13],\n      decodeMatrix[14],\n    );\n    quantization.quantizedVolumeStepSize = new Cartesian3(\n      decodeMatrix[0],\n      decodeMatrix[5],\n      decodeMatrix[10],\n    );\n  } else if (decodeMatrix.length === 25) {\n    quantization.quantizedVolumeOffset = new Cartesian4(\n      decodeMatrix[20],\n      decodeMatrix[21],\n      decodeMatrix[22],\n      decodeMatrix[23],\n    );\n    quantization.quantizedVolumeStepSize = new Cartesian4(\n      decodeMatrix[0],\n      decodeMatrix[6],\n      decodeMatrix[12],\n      decodeMatrix[18],\n    );\n  }\n\n  attribute.quantization = quantization;\n}\n\nfunction createAttribute(gltf, accessorId, name, semantic, setIndex) {\n  const accessor = gltf.accessors[accessorId];\n  const MathType = AttributeType.getMathType(accessor.type);\n  const normalized = accessor.normalized ?? false;\n\n  const attribute = new Attribute();\n  attribute.name = name;\n  attribute.semantic = semantic;\n  attribute.setIndex = setIndex;\n  attribute.constant = getDefault(MathType);\n  attribute.componentDatatype = accessor.componentType;\n  attribute.normalized = normalized;\n  attribute.count = accessor.count;\n  attribute.type = accessor.type;\n  attribute.min = fromArray(MathType, accessor.min);\n  attribute.max = fromArray(MathType, accessor.max);\n  attribute.byteOffset = accessor.byteOffset;\n  attribute.byteStride = getAccessorByteStride(gltf, accessor);\n\n  if (hasExtension(accessor, \"WEB3D_quantized_attributes\")) {\n    setQuantizationFromWeb3dQuantizedAttributes(\n      accessor.extensions.WEB3D_quantized_attributes,\n      attribute,\n      MathType,\n    );\n  }\n\n  const isQuantizable =\n    attribute.semantic === VertexAttributeSemantic.POSITION ||\n    attribute.semantic === VertexAttributeSemantic.NORMAL ||\n    attribute.semantic === VertexAttributeSemantic.TANGENT ||\n    attribute.semantic === VertexAttributeSemantic.TEXCOORD ||\n    attribute.semantic === VertexAttributeSemantic.FEATURE_ID ||\n    attribute.semantic === VertexAttributeSemantic.SCALE ||\n    attribute.semantic === VertexAttributeSemantic.ROTATION;\n\n  // In the glTF 2.0 spec, min and max are not affected by the normalized flag.\n  // However, for KHR_mesh_quantization, min and max must be dequantized for\n  // normalized values, else the bounding sphere will be computed incorrectly.\n  const hasKhrMeshQuantization = gltf.extensionsRequired?.includes(\n    \"KHR_mesh_quantization\",\n  );\n\n  if (hasKhrMeshQuantization && normalized && isQuantizable) {\n    dequantizeMinMax(attribute, MathType);\n  }\n\n  return attribute;\n}\n\nfunction getSetIndex(gltfSemantic) {\n  const setIndexRegex = /^\\w+_(\\d+)$/;\n  const setIndexMatch = setIndexRegex.exec(gltfSemantic);\n  if (setIndexMatch !== null) {\n    return parseInt(setIndexMatch[1]);\n  }\n  return undefined;\n}\n\nconst scratchSemanticInfo = {\n  gltfSemantic: undefined,\n  renamedSemantic: undefined,\n  modelSemantic: undefined,\n};\n\nfunction getSemanticInfo(loader, semanticType, gltfSemantic) {\n  // For .b3dm, rename _BATCHID (or the legacy BATCHID) to _FEATURE_ID_0\n  // in the generated model components for compatibility with EXT_mesh_features\n  let renamedSemantic = gltfSemantic;\n  if (\n    loader._renameBatchIdSemantic &&\n    (gltfSemantic === \"_BATCHID\" || gltfSemantic === \"BATCHID\")\n  ) {\n    renamedSemantic = \"_FEATURE_ID_0\";\n  }\n\n  const modelSemantic = semanticType.fromGltfSemantic(renamedSemantic);\n\n  const semanticInfo = scratchSemanticInfo;\n  semanticInfo.gltfSemantic = gltfSemantic;\n  semanticInfo.renamedSemantic = renamedSemantic;\n  semanticInfo.modelSemantic = modelSemantic;\n\n  return semanticInfo;\n}\n\nfunction isClassificationAttribute(attributeSemantic) {\n  // Classification models only use the position, texcoord, and feature ID attributes.\n  const isPositionAttribute =\n    attributeSemantic === VertexAttributeSemantic.POSITION;\n  const isFeatureIdAttribute =\n    attributeSemantic === VertexAttributeSemantic.FEATURE_ID;\n  const isTexcoordAttribute =\n    attributeSemantic === VertexAttributeSemantic.TEXCOORD;\n\n  return isPositionAttribute || isFeatureIdAttribute || isTexcoordAttribute;\n}\n\nfunction finalizeDracoAttribute(\n  attribute,\n  vertexBufferLoader,\n  loadBuffer,\n  loadTypedArray,\n) {\n  // The accessor's byteOffset and byteStride should be ignored for draco.\n  // Each attribute is tightly packed in its own buffer after decode.\n  attribute.byteOffset = 0;\n  attribute.byteStride = undefined;\n  attribute.quantization = vertexBufferLoader.quantization;\n\n  if (loadBuffer) {\n    attribute.buffer = vertexBufferLoader.buffer;\n  }\n\n  if (loadTypedArray) {\n    const componentDatatype = defined(vertexBufferLoader.quantization)\n      ? vertexBufferLoader.quantization.componentDatatype\n      : attribute.componentDatatype;\n\n    attribute.typedArray = ComponentDatatype.createArrayBufferView(\n      componentDatatype,\n      vertexBufferLoader.typedArray.buffer,\n    );\n  }\n}\n\nfunction finalizeSpzAttribute(\n  attribute,\n  vertexBufferLoader,\n  loadBuffer,\n  loadTypedArray,\n) {\n  attribute.byteOffset = 0;\n  attribute.byteStride = undefined;\n\n  if (loadBuffer) {\n    attribute.buffer = vertexBufferLoader.buffer;\n  }\n\n  if (loadTypedArray && defined(vertexBufferLoader.typedArray)) {\n    attribute.typedArray = ComponentDatatype.createArrayBufferView(\n      attribute.componentDatatype,\n      vertexBufferLoader.typedArray.buffer,\n    );\n  }\n\n  if (attribute.semantic === VertexAttributeSemantic.POSITION) {\n    const findMinMaxXY = (flatArray) => {\n      let minX = Infinity;\n      let maxX = -Infinity;\n      let minY = Infinity;\n      let maxY = -Infinity;\n      let minZ = Infinity;\n      let maxZ = -Infinity;\n\n      for (let i = 0; i < flatArray.length; i += 3) {\n        const x = flatArray[i];\n        const y = flatArray[i + 1];\n        const z = flatArray[i + 2];\n\n        minX = Math.min(minX, x);\n        maxX = Math.max(maxX, x);\n        minY = Math.min(minY, y);\n        maxY = Math.max(maxY, y);\n        minZ = Math.min(minZ, z);\n        maxZ = Math.max(maxZ, z);\n      }\n\n      return [\n        new Cartesian3(minX, minY, minZ),\n        new Cartesian3(maxX, maxY, maxZ),\n      ];\n    };\n    const buffer = attribute.typedArray;\n    [attribute.min, attribute.max] = findMinMaxXY(buffer);\n  }\n}\n\nfunction finalizeAttribute(\n  gltf,\n  accessor,\n  attribute,\n  vertexBufferLoader,\n  loadBuffer,\n  loadTypedArray,\n) {\n  if (loadBuffer) {\n    attribute.buffer = vertexBufferLoader.buffer;\n  }\n\n  if (loadTypedArray) {\n    const bufferViewTypedArray = vertexBufferLoader.typedArray;\n    attribute.typedArray = getPackedTypedArray(\n      gltf,\n      accessor,\n      bufferViewTypedArray,\n    );\n\n    if (!loadBuffer) {\n      // If the buffer isn't loaded, then the accessor's byteOffset and\n      // byteStride should be ignored, since values are only available in a\n      // tightly packed typed array\n      attribute.byteOffset = 0;\n      attribute.byteStride = undefined;\n    }\n  }\n}\n\nfunction loadAttribute(\n  loader,\n  accessorId,\n  semanticInfo,\n  primitive,\n  draco,\n  spz,\n  loadBuffer,\n  loadTypedArray,\n  frameState,\n) {\n  const gltf = loader.gltfJson;\n  const accessor = gltf.accessors[accessorId];\n  const bufferViewId = accessor.bufferView;\n\n  const gltfSemantic = semanticInfo.gltfSemantic;\n  const renamedSemantic = semanticInfo.renamedSemantic;\n  const modelSemantic = semanticInfo.modelSemantic;\n\n  const setIndex = defined(modelSemantic)\n    ? getSetIndex(renamedSemantic)\n    : undefined;\n\n  const name = gltfSemantic;\n  const attribute = createAttribute(\n    gltf,\n    accessorId,\n    name,\n    modelSemantic,\n    setIndex,\n  );\n\n  if (!defined(draco) && !defined(bufferViewId) && !defined(spz)) {\n    return attribute;\n  }\n\n  const vertexBufferLoader = getVertexBufferLoader(\n    loader,\n    accessorId,\n    gltfSemantic,\n    primitive,\n    draco,\n    spz,\n    loadBuffer,\n    loadTypedArray,\n    frameState,\n  );\n\n  const index = loader._geometryLoaders.length;\n  loader._geometryLoaders.push(vertexBufferLoader);\n  const promise = vertexBufferLoader.load();\n  loader._loaderPromises.push(promise);\n\n  // This can only execute once vertexBufferLoader.process() has run and returns true\n  // Save this finish callback by the loader index so it can be called\n  // in process().\n  loader._geometryCallbacks[index] = () => {\n    if (\n      defined(draco) &&\n      defined(draco.attributes) &&\n      defined(draco.attributes[gltfSemantic])\n    ) {\n      finalizeDracoAttribute(\n        attribute,\n        vertexBufferLoader,\n        loadBuffer,\n        loadTypedArray,\n      );\n    } else if (defined(spz)) {\n      finalizeSpzAttribute(\n        attribute,\n        vertexBufferLoader,\n        loadBuffer,\n        loadTypedArray,\n      );\n    } else {\n      finalizeAttribute(\n        gltf,\n        accessor,\n        attribute,\n        vertexBufferLoader,\n        loadBuffer,\n        loadTypedArray,\n      );\n    }\n  };\n\n  return attribute;\n}\n\nfunction loadVertexAttribute(\n  loader,\n  accessorId,\n  semanticInfo,\n  primitive,\n  draco,\n  spz,\n  hasInstances,\n  needsPostProcessing,\n  frameState,\n) {\n  const modelSemantic = semanticInfo.modelSemantic;\n\n  const isPositionAttribute =\n    modelSemantic === VertexAttributeSemantic.POSITION;\n  const isFeatureIdAttribute =\n    modelSemantic === VertexAttributeSemantic.FEATURE_ID;\n\n  const loadTypedArrayFor2D =\n    isPositionAttribute &&\n    !hasInstances &&\n    loader._loadAttributesFor2D &&\n    !frameState.scene3DOnly;\n  const loadTypedArrayForPicking =\n    isPositionAttribute && loader._enablePick && !frameState.context.webgl2;\n\n  const loadTypedArrayForClassification =\n    loader._loadForClassification && isFeatureIdAttribute;\n\n  // Whether the final output should be a buffer or typed array\n  // after loading and post-processing.\n  const outputTypedArrayOnly = loader._loadAttributesAsTypedArray;\n  const outputBuffer = !outputTypedArrayOnly;\n  const outputTypedArray =\n    outputTypedArrayOnly ||\n    loadTypedArrayFor2D ||\n    loadTypedArrayForPicking ||\n    loadTypedArrayForClassification;\n\n  // Determine what to load right now:\n  //\n  // - If post-processing is needed, load a packed typed array for\n  //   further processing, and defer the buffer loading until later.\n  // - On the other hand, if post-processing is not needed,\n  //   set the load flags directly\n  const loadBuffer = needsPostProcessing ? false : outputBuffer;\n  const loadTypedArray = needsPostProcessing ? true : outputTypedArray;\n\n  const attribute = loadAttribute(\n    loader,\n    accessorId,\n    semanticInfo,\n    primitive,\n    draco,\n    spz,\n    loadBuffer,\n    loadTypedArray,\n    frameState,\n  );\n\n  const attributePlan = new PrimitiveLoadPlan.AttributeLoadPlan(attribute);\n  attributePlan.loadBuffer = outputBuffer;\n  attributePlan.loadTypedArray = outputTypedArray;\n\n  return attributePlan;\n}\n\nfunction loadInstancedAttribute(\n  loader,\n  accessorId,\n  attributes,\n  gltfSemantic,\n  frameState,\n) {\n  const accessors = loader.gltfJson.accessors;\n  const hasRotation = defined(attributes.ROTATION);\n  const hasTranslationMinMax =\n    defined(attributes.TRANSLATION) &&\n    defined(accessors[attributes.TRANSLATION].min) &&\n    defined(accessors[attributes.TRANSLATION].max);\n\n  const semanticInfo = getSemanticInfo(\n    loader,\n    InstanceAttributeSemantic,\n    gltfSemantic,\n  );\n  const modelSemantic = semanticInfo.modelSemantic;\n\n  const isTransformAttribute =\n    modelSemantic === InstanceAttributeSemantic.TRANSLATION ||\n    modelSemantic === InstanceAttributeSemantic.ROTATION ||\n    modelSemantic === InstanceAttributeSemantic.SCALE;\n  const isTranslationAttribute =\n    modelSemantic === InstanceAttributeSemantic.TRANSLATION;\n\n  // Load the attributes as typed arrays only if:\n  // - loadAttributesAsTypedArray is true\n  // - the instances have rotations. This only applies to the transform attributes,\n  //   since The instance matrices are computed on the CPU. This avoids the\n  //   expensive quaternion -> rotation matrix conversion in the shader.\n  // - GPU instancing is not supported.\n  const loadAsTypedArrayOnly =\n    loader._loadAttributesAsTypedArray ||\n    (hasRotation && isTransformAttribute) ||\n    !frameState.context.instancedArrays;\n  const loadTypedArrayForPicking =\n    loader._enablePick && !frameState.context.webgl2;\n\n  const loadBuffer = !loadAsTypedArrayOnly;\n\n  // Load the translations as a typed array in addition to the buffer if\n  // - the accessor does not have a min and max. The values will be used\n  //   for computing an accurate bounding volume.\n  // - the model will be projected to 2D.\n  const loadFor2D = loader._loadAttributesFor2D && !frameState.scene3DOnly;\n  const loadTranslationAsTypedArray =\n    isTranslationAttribute &&\n    (!hasTranslationMinMax || loadFor2D || loadTypedArrayForPicking);\n\n  const loadTypedArray = loadAsTypedArrayOnly || loadTranslationAsTypedArray;\n\n  // Don't pass in primitive or draco object since instanced attributes can't be draco compressed\n  return loadAttribute(\n    loader,\n    accessorId,\n    semanticInfo,\n    undefined,\n    undefined,\n    undefined,\n    loadBuffer,\n    loadTypedArray,\n    frameState,\n  );\n}\n\nfunction loadIndices(\n  loader,\n  accessorId,\n  primitive,\n  hasFeatureIds,\n  needsPostProcessing,\n  frameState,\n) {\n  const accessor = loader.gltfJson.accessors[accessorId];\n  const bufferViewId = accessor.bufferView;\n  // Infer compression / extensions directly from the glTF primitive instead of passing in flags\n  const extensions = primitive.extensions ?? Frozen.EMPTY_OBJECT;\n  const draco = extensions.KHR_draco_mesh_compression;\n  const hasEdgeVisibility = defined(\n    extensions.EXT_mesh_primitive_edge_visibility,\n  );\n\n  if (!defined(draco) && !defined(bufferViewId)) {\n    return undefined;\n  }\n\n  const indices = new Indices();\n  indices.count = accessor.count;\n\n  const loadAttributesAsTypedArray = loader._loadAttributesAsTypedArray;\n  // Load the index buffer as a typed array to generate wireframes or pick in WebGL1.\n  const loadForCpuOperations =\n    (loader._loadIndicesForWireframe || loader._enablePick) &&\n    !frameState.context.webgl2;\n\n  // Load the index buffer as a typed array to batch features together for classification.\n  const loadForClassification = loader._loadForClassification && hasFeatureIds;\n\n  // Whether the final output should be a buffer or typed array\n  // after loading and post-processing.\n  const outputTypedArrayOnly = loadAttributesAsTypedArray;\n  const outputBuffer = !outputTypedArrayOnly;\n  const outputTypedArray =\n    loadAttributesAsTypedArray ||\n    loadForCpuOperations ||\n    loadForClassification ||\n    hasEdgeVisibility;\n\n  // Determine what to load right now:\n  //\n  // - If post-processing is needed, load a packed typed array for\n  //   further processing, and defer the buffer loading until later.\n  // - On the other hand, if post-processing is not needed, set the load\n  //   flags directly\n  const loadBuffer = needsPostProcessing ? false : outputBuffer;\n  const loadTypedArray = needsPostProcessing ? true : outputTypedArray;\n\n  const indexBufferLoader = getIndexBufferLoader(\n    loader,\n    accessorId,\n    primitive,\n    draco,\n    loadBuffer,\n    loadTypedArray,\n    frameState,\n  );\n\n  const index = loader._geometryLoaders.length;\n  loader._geometryLoaders.push(indexBufferLoader);\n  const promise = indexBufferLoader.load();\n  loader._loaderPromises.push(promise);\n  // This can only execute once indexBufferLoader.process() has run and returns true\n  // Save this finish callback by the loader index so it can be called\n  // in process().\n  loader._geometryCallbacks[index] = () => {\n    indices.indexDatatype = indexBufferLoader.indexDatatype;\n    indices.buffer = indexBufferLoader.buffer;\n    indices.typedArray = indexBufferLoader.typedArray;\n  };\n\n  const indicesPlan = new PrimitiveLoadPlan.IndicesLoadPlan(indices);\n  indicesPlan.loadBuffer = outputBuffer;\n  indicesPlan.loadTypedArray = outputTypedArray;\n\n  return indicesPlan;\n}\n\nfunction loadTexture(loader, textureInfo, frameState, samplerOverride) {\n  const gltf = loader.gltfJson;\n  const imageId = GltfLoaderUtil.getImageIdFromTexture({\n    gltf: gltf,\n    textureId: textureInfo.index,\n    supportedImageFormats: loader._supportedImageFormats,\n  });\n\n  if (!defined(imageId)) {\n    return undefined;\n  }\n\n  const textureLoader = ResourceCache.getTextureLoader({\n    gltf: gltf,\n    textureInfo: textureInfo,\n    gltfResource: loader._gltfResource,\n    baseResource: loader._baseResource,\n    supportedImageFormats: loader._supportedImageFormats,\n    frameState: frameState,\n    asynchronous: loader._asynchronous,\n  });\n\n  const textureReader = GltfLoaderUtil.createModelTextureReader({\n    textureInfo: textureInfo,\n  });\n\n  const index = loader._textureLoaders.length;\n  loader._textureLoaders.push(textureLoader);\n  const promise = textureLoader.load().catch((error) => {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    if (!loader._incrementallyLoadTextures) {\n      // If incrementallyLoadTextures is false, throw the error to ensure the loader state\n      // immediately is set to have failed\n      throw error;\n    }\n\n    // Otherwise, save the error so it can be thrown next\n    loader._textureState = GltfLoaderState.FAILED;\n    loader._textureErrors.push(error);\n  });\n  loader._texturesPromises.push(promise);\n  // This can only execute once textureLoader.process() has run and returns true\n  // Save this finish callback by the loader index so it can be called\n  // in process().\n  loader._textureCallbacks[index] = () => {\n    textureReader.texture = textureLoader.texture;\n    if (defined(samplerOverride)) {\n      textureReader.texture.sampler = samplerOverride;\n    }\n  };\n\n  return textureReader;\n}\n\n/**\n * Load textures and parse factors for the KHR_materials_pbrSpecularGlossiness extension\n * @param {GltfLoader} loader\n * @param {object} specularGlossinessInfo The contents of the KHR_materials_pbrSpecularGlossiness extension in the parsed glTF JSON\n * @param {FrameState} frameState\n * @returns {ModelComponents.SpecularGlossiness}\n * @private\n */\nfunction loadSpecularGlossiness(loader, specularGlossinessInfo, frameState) {\n  const {\n    diffuseTexture,\n    specularGlossinessTexture,\n    diffuseFactor,\n    specularFactor,\n    glossinessFactor,\n  } = specularGlossinessInfo;\n\n  const specularGlossiness = new SpecularGlossiness();\n  if (defined(diffuseTexture)) {\n    specularGlossiness.diffuseTexture = loadTexture(\n      loader,\n      diffuseTexture,\n      frameState,\n    );\n  }\n  if (defined(specularGlossinessTexture)) {\n    specularGlossiness.specularGlossinessTexture = loadTexture(\n      loader,\n      specularGlossinessTexture,\n      frameState,\n    );\n  }\n  specularGlossiness.diffuseFactor = fromArray(Cartesian4, diffuseFactor);\n  specularGlossiness.specularFactor = fromArray(Cartesian3, specularFactor);\n  specularGlossiness.glossinessFactor = glossinessFactor;\n\n  return specularGlossiness;\n}\n\n/**\n * Load textures and parse factors for a metallic-roughness PBR model in a glTF material\n * @param {GltfLoader} loader\n * @param {object} metallicRoughnessInfo The contents of a pbrMetallicRoughness property in the parsed glTF JSON\n * @param {FrameState} frameState\n * @returns {ModelComponents.MetallicRoughness}\n * @private\n */\nfunction loadMetallicRoughness(loader, metallicRoughnessInfo, frameState) {\n  const {\n    baseColorTexture,\n    metallicRoughnessTexture,\n    baseColorFactor,\n    metallicFactor,\n    roughnessFactor,\n  } = metallicRoughnessInfo;\n\n  const metallicRoughness = new MetallicRoughness();\n  if (defined(baseColorTexture)) {\n    metallicRoughness.baseColorTexture = loadTexture(\n      loader,\n      baseColorTexture,\n      frameState,\n    );\n  }\n  if (defined(metallicRoughnessTexture)) {\n    metallicRoughness.metallicRoughnessTexture = loadTexture(\n      loader,\n      metallicRoughnessTexture,\n      frameState,\n    );\n  }\n  metallicRoughness.baseColorFactor = fromArray(Cartesian4, baseColorFactor);\n  metallicRoughness.metallicFactor = metallicFactor;\n  metallicRoughness.roughnessFactor = roughnessFactor;\n\n  return metallicRoughness;\n}\n\nfunction loadSpecular(loader, specularInfo, frameState) {\n  const {\n    specularFactor,\n    specularTexture,\n    specularColorFactor,\n    specularColorTexture,\n  } = specularInfo;\n\n  const specular = new Specular();\n  if (defined(specularTexture)) {\n    specular.specularTexture = loadTexture(loader, specularTexture, frameState);\n  }\n  if (defined(specularColorTexture)) {\n    specular.specularColorTexture = loadTexture(\n      loader,\n      specularColorTexture,\n      frameState,\n    );\n  }\n  specular.specularFactor = specularFactor;\n  specular.specularColorFactor = fromArray(Cartesian3, specularColorFactor);\n\n  return specular;\n}\n\nfunction loadAnisotropy(loader, anisotropyInfo, frameState) {\n  const {\n    anisotropyStrength = Anisotropy.DEFAULT_ANISOTROPY_STRENGTH,\n    anisotropyRotation = Anisotropy.DEFAULT_ANISOTROPY_ROTATION,\n    anisotropyTexture,\n  } = anisotropyInfo;\n\n  const anisotropy = new Anisotropy();\n  if (defined(anisotropyTexture)) {\n    anisotropy.anisotropyTexture = loadTexture(\n      loader,\n      anisotropyTexture,\n      frameState,\n    );\n  }\n  anisotropy.anisotropyStrength = anisotropyStrength;\n  anisotropy.anisotropyRotation = anisotropyRotation;\n\n  return anisotropy;\n}\n\nfunction loadClearcoat(loader, clearcoatInfo, frameState) {\n  const {\n    clearcoatFactor = Clearcoat.DEFAULT_CLEARCOAT_FACTOR,\n    clearcoatTexture,\n    clearcoatRoughnessFactor = Clearcoat.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,\n    clearcoatRoughnessTexture,\n    clearcoatNormalTexture,\n  } = clearcoatInfo;\n\n  const clearcoat = new Clearcoat();\n  if (defined(clearcoatTexture)) {\n    clearcoat.clearcoatTexture = loadTexture(\n      loader,\n      clearcoatTexture,\n      frameState,\n    );\n  }\n  if (defined(clearcoatRoughnessTexture)) {\n    clearcoat.clearcoatRoughnessTexture = loadTexture(\n      loader,\n      clearcoatRoughnessTexture,\n      frameState,\n    );\n  }\n  if (defined(clearcoatNormalTexture)) {\n    clearcoat.clearcoatNormalTexture = loadTexture(\n      loader,\n      clearcoatNormalTexture,\n      frameState,\n    );\n  }\n  clearcoat.clearcoatFactor = clearcoatFactor;\n  clearcoat.clearcoatRoughnessFactor = clearcoatRoughnessFactor;\n\n  return clearcoat;\n}\n\n/**\n * Load textures and parse factors and flags for a glTF material\n *\n * @param {GltfLoader} loader\n * @param {object} gltfMaterial An entry from the <code>.materials</code> array in the glTF JSON\n * @param {FrameState} frameState\n * @returns {ModelComponents.Material}\n * @private\n */\nfunction loadMaterial(loader, gltfMaterial, frameState) {\n  const material = new Material();\n\n  const extensions = gltfMaterial.extensions ?? Frozen.EMPTY_OBJECT;\n  const pbrSpecularGlossiness = extensions.KHR_materials_pbrSpecularGlossiness;\n  const pbrSpecular = extensions.KHR_materials_specular;\n  const pbrAnisotropy = extensions.KHR_materials_anisotropy;\n  const pbrClearcoat = extensions.KHR_materials_clearcoat;\n  const pbrMetallicRoughness = gltfMaterial.pbrMetallicRoughness;\n\n  material.unlit = defined(extensions.KHR_materials_unlit);\n\n  if (defined(pbrSpecularGlossiness)) {\n    material.specularGlossiness = loadSpecularGlossiness(\n      loader,\n      pbrSpecularGlossiness,\n      frameState,\n    );\n  } else {\n    if (defined(pbrMetallicRoughness)) {\n      material.metallicRoughness = loadMetallicRoughness(\n        loader,\n        pbrMetallicRoughness,\n        frameState,\n      );\n    }\n    if (defined(pbrSpecular) && !material.unlit) {\n      material.specular = loadSpecular(loader, pbrSpecular, frameState);\n    }\n    if (defined(pbrAnisotropy) && !material.unlit) {\n      material.anisotropy = loadAnisotropy(loader, pbrAnisotropy, frameState);\n    }\n    if (defined(pbrClearcoat) && !material.unlit) {\n      material.clearcoat = loadClearcoat(loader, pbrClearcoat, frameState);\n    }\n  }\n\n  // Top level textures\n  if (defined(gltfMaterial.emissiveTexture)) {\n    material.emissiveTexture = loadTexture(\n      loader,\n      gltfMaterial.emissiveTexture,\n      frameState,\n    );\n  }\n  // Normals aren't used for classification, so don't load the normal texture.\n  if (defined(gltfMaterial.normalTexture) && !loader._loadForClassification) {\n    material.normalTexture = loadTexture(\n      loader,\n      gltfMaterial.normalTexture,\n      frameState,\n    );\n  }\n  if (defined(gltfMaterial.occlusionTexture)) {\n    material.occlusionTexture = loadTexture(\n      loader,\n      gltfMaterial.occlusionTexture,\n      frameState,\n    );\n  }\n  material.emissiveFactor = fromArray(Cartesian3, gltfMaterial.emissiveFactor);\n  material.alphaMode = gltfMaterial.alphaMode;\n  material.alphaCutoff = gltfMaterial.alphaCutoff;\n  material.doubleSided = gltfMaterial.doubleSided;\n\n  // BENTLEY_materials_point_style extension\n  const pointStyleExtension = extensions.BENTLEY_materials_point_style;\n  if (defined(pointStyleExtension) && defined(pointStyleExtension.diameter)) {\n    const diameter = pointStyleExtension.diameter;\n    // The spec requires a positive integer, but we floor non-integers as a best effort.\n    if (diameter >= 1) {\n      material.pointDiameter = Math.floor(diameter);\n    }\n  }\n\n  return material;\n}\n\n// for EXT_mesh_features\nfunction loadFeatureIdAttribute(featureIds, positionalLabel) {\n  const featureIdAttribute = new FeatureIdAttribute();\n  featureIdAttribute.featureCount = featureIds.featureCount;\n  featureIdAttribute.nullFeatureId = featureIds.nullFeatureId;\n  featureIdAttribute.propertyTableId = featureIds.propertyTable;\n  featureIdAttribute.setIndex = featureIds.attribute;\n  featureIdAttribute.label = featureIds.label;\n  featureIdAttribute.positionalLabel = positionalLabel;\n  return featureIdAttribute;\n}\n\n// for backwards compatibility with EXT_feature_metadata\nfunction loadFeatureIdAttributeLegacy(\n  gltfFeatureIdAttribute,\n  featureTableId,\n  featureCount,\n  positionalLabel,\n) {\n  const featureIdAttribute = new FeatureIdAttribute();\n  const featureIds = gltfFeatureIdAttribute.featureIds;\n  featureIdAttribute.featureCount = featureCount;\n  featureIdAttribute.propertyTableId = featureTableId;\n  featureIdAttribute.setIndex = getSetIndex(featureIds.attribute);\n  featureIdAttribute.positionalLabel = positionalLabel;\n  return featureIdAttribute;\n}\n\n// implicit ranges do not exist in EXT_mesh_features and EXT_instance_features,\n// but both default to the vertex/instance ID which is like\n// an implicit range of {offset: 0, repeat: 1}\nfunction loadDefaultFeatureIds(featureIds, positionalLabel) {\n  const featureIdRange = new FeatureIdImplicitRange();\n  featureIdRange.propertyTableId = featureIds.propertyTable;\n  featureIdRange.featureCount = featureIds.featureCount;\n  featureIdRange.nullFeatureId = featureIds.nullFeatureId;\n  featureIdRange.label = featureIds.label;\n  featureIdRange.positionalLabel = positionalLabel;\n  featureIdRange.offset = 0;\n  featureIdRange.repeat = 1;\n  return featureIdRange;\n}\n\n// for backwards compatibility with EXT_feature_metadata\nfunction loadFeatureIdImplicitRangeLegacy(\n  gltfFeatureIdAttribute,\n  featureTableId,\n  featureCount,\n  positionalLabel,\n) {\n  const featureIdRange = new FeatureIdImplicitRange();\n  const featureIds = gltfFeatureIdAttribute.featureIds;\n  featureIdRange.propertyTableId = featureTableId;\n  featureIdRange.featureCount = featureCount;\n\n  // constant/divisor was renamed to offset/repeat\n  featureIdRange.offset = featureIds.constant ?? 0;\n  // The default is now undefined\n  const divisor = featureIds.divisor ?? 0;\n  featureIdRange.repeat = divisor === 0 ? undefined : divisor;\n\n  featureIdRange.positionalLabel = positionalLabel;\n  return featureIdRange;\n}\n\n// for EXT_mesh_features\nfunction loadFeatureIdTexture(\n  loader,\n  gltfFeatureIdTexture,\n  frameState,\n  positionalLabel,\n) {\n  const featureIdTexture = new FeatureIdTexture();\n\n  featureIdTexture.featureCount = gltfFeatureIdTexture.featureCount;\n  featureIdTexture.nullFeatureId = gltfFeatureIdTexture.nullFeatureId;\n  featureIdTexture.propertyTableId = gltfFeatureIdTexture.propertyTable;\n  featureIdTexture.label = gltfFeatureIdTexture.label;\n  featureIdTexture.positionalLabel = positionalLabel;\n\n  const textureInfo = gltfFeatureIdTexture.texture;\n  featureIdTexture.textureReader = loadTexture(\n    loader,\n    textureInfo,\n    frameState,\n    Sampler.NEAREST, // Feature ID textures require nearest sampling\n  );\n\n  // Though the new channel index is more future-proof, this implementation\n  // only supports RGBA textures. At least for now, the string representation\n  // is more useful for generating shader code.\n  const channels = defined(textureInfo.channels) ? textureInfo.channels : [0];\n  const channelString = channels\n    .map(function (channelIndex) {\n      return \"rgba\".charAt(channelIndex);\n    })\n    .join(\"\");\n  featureIdTexture.textureReader.channels = channelString;\n\n  return featureIdTexture;\n}\n\n// for backwards compatibility with EXT_feature_metadata\nfunction loadFeatureIdTextureLegacy(\n  loader,\n  gltfFeatureIdTexture,\n  featureTableId,\n  frameState,\n  featureCount,\n  positionalLabel,\n) {\n  const featureIdTexture = new FeatureIdTexture();\n  const featureIds = gltfFeatureIdTexture.featureIds;\n  const textureInfo = featureIds.texture;\n  featureIdTexture.featureCount = featureCount;\n  featureIdTexture.propertyTableId = featureTableId;\n  featureIdTexture.textureReader = loadTexture(\n    loader,\n    textureInfo,\n    frameState,\n    Sampler.NEAREST, // Feature ID textures require nearest sampling\n  );\n\n  featureIdTexture.textureReader.channels = featureIds.channels;\n  featureIdTexture.positionalLabel = positionalLabel;\n\n  return featureIdTexture;\n}\n\nfunction loadMorphTarget(\n  loader,\n  target,\n  needsPostProcessing,\n  primitiveLoadPlan,\n  frameState,\n) {\n  const morphTarget = new MorphTarget();\n\n  // Don't pass in primitive or draco object since morph targets can't be draco compressed\n  const primitive = undefined;\n  const draco = undefined;\n  const spz = undefined;\n  const hasInstances = false;\n\n  for (const semantic in target) {\n    if (!target.hasOwnProperty(semantic)) {\n      continue;\n    }\n    const accessorId = target[semantic];\n\n    const semanticInfo = getSemanticInfo(\n      loader,\n      VertexAttributeSemantic,\n      semantic,\n    );\n\n    const attributePlan = loadVertexAttribute(\n      loader,\n      accessorId,\n      semanticInfo,\n      primitive,\n      draco,\n      spz,\n      hasInstances,\n      needsPostProcessing,\n      frameState,\n    );\n    morphTarget.attributes.push(attributePlan.attribute);\n\n    // The load plan doesn't need to distinguish morph target attributes from\n    // regular attributes\n    primitiveLoadPlan.attributePlans.push(attributePlan);\n  }\n\n  return morphTarget;\n}\n\nfunction fetchSpzExtensionFrom(extensions) {\n  const gaussianSplatting = extensions?.KHR_gaussian_splatting;\n  const gsExtensions = gaussianSplatting?.extensions;\n  const spz = gsExtensions?.KHR_gaussian_splatting_compression_spz_2;\n  if (defined(spz)) {\n    return spz;\n  }\n\n  return undefined;\n}\n\n/**\n * Load resources associated with a mesh primitive for a glTF node\n * @param {GltfLoader} loader\n * @param {object} gltfPrimitive One of the primitives in a mesh\n * @param {boolean} hasInstances True if the node using this mesh has instances\n * @param {FrameState} frameState\n * @returns {ModelComponents.Primitive}\n * @private\n */\nfunction loadPrimitive(loader, gltfPrimitive, hasInstances, frameState) {\n  const primitive = new Primitive();\n  const primitivePlan = new PrimitiveLoadPlan(primitive);\n  loader._primitiveLoadPlans.push(primitivePlan);\n\n  const materialId = gltfPrimitive.material;\n  if (defined(materialId)) {\n    primitive.material = loadMaterial(\n      loader,\n      loader.gltfJson.materials[materialId],\n      frameState,\n    );\n  }\n\n  const extensions = gltfPrimitive.extensions ?? Frozen.EMPTY_OBJECT;\n\n  let needsPostProcessing = false;\n  const outlineExtension = extensions.CESIUM_primitive_outline;\n  if (loader._loadPrimitiveOutline && defined(outlineExtension)) {\n    needsPostProcessing = true;\n    primitivePlan.needsOutlines = true;\n    primitivePlan.outlineIndices = loadPrimitiveOutline(\n      loader,\n      outlineExtension,\n      primitivePlan,\n    );\n  }\n\n  // Edge Visibility\n  const edgeVisibilityExtension = extensions.EXT_mesh_primitive_edge_visibility;\n  const hasEdgeVisibility = defined(edgeVisibilityExtension);\n  if (hasEdgeVisibility) {\n    const visibilityAccessor =\n      loader.gltfJson.accessors[edgeVisibilityExtension.visibility];\n    if (!defined(visibilityAccessor)) {\n      throw new RuntimeError(\"Edge visibility accessor not found!\");\n    }\n    const visibilityValues = loadAccessor(loader, visibilityAccessor);\n    primitive.edgeVisibility = {\n      visibility: visibilityValues,\n      material: edgeVisibilityExtension.material,\n    };\n\n    // Load silhouette normals\n    if (defined(edgeVisibilityExtension.silhouetteNormals)) {\n      const silhouetteNormalsAccessor =\n        loader.gltfJson.accessors[edgeVisibilityExtension.silhouetteNormals];\n      if (defined(silhouetteNormalsAccessor)) {\n        const silhouetteNormalsValues = loadAccessor(\n          loader,\n          silhouetteNormalsAccessor,\n        );\n        primitive.edgeVisibility.silhouetteNormals = silhouetteNormalsValues;\n      }\n    }\n\n    // Load line strings\n    if (defined(edgeVisibilityExtension.lineStrings)) {\n      primitivePlan.edgeVisibility.lineStrings =\n        edgeVisibilityExtension.lineStrings;\n    }\n  }\n\n  //support the latest glTF spec and the legacy extension\n  const spzExtension = fetchSpzExtensionFrom(extensions);\n\n  if (defined(spzExtension)) {\n    needsPostProcessing = true;\n    primitivePlan.needsGaussianSplats = true;\n  }\n\n  const loadForClassification = loader._loadForClassification;\n  const draco = extensions.KHR_draco_mesh_compression;\n\n  let hasFeatureIds = false;\n  const attributes = gltfPrimitive.attributes;\n  if (defined(attributes)) {\n    for (const semantic in attributes) {\n      if (!attributes.hasOwnProperty(semantic)) {\n        continue;\n      }\n      const accessorId = attributes[semantic];\n      const semanticInfo = getSemanticInfo(\n        loader,\n        VertexAttributeSemantic,\n        semantic,\n      );\n\n      const modelSemantic = semanticInfo.modelSemantic;\n      if (loadForClassification && !isClassificationAttribute(modelSemantic)) {\n        continue;\n      }\n\n      if (modelSemantic === VertexAttributeSemantic.FEATURE_ID) {\n        hasFeatureIds = true;\n      }\n\n      const attributePlan = loadVertexAttribute(\n        loader,\n        accessorId,\n        semanticInfo,\n        gltfPrimitive,\n        draco,\n        spzExtension,\n        hasInstances,\n        needsPostProcessing,\n        frameState,\n      );\n\n      primitivePlan.attributePlans.push(attributePlan);\n      primitive.attributes.push(attributePlan.attribute);\n    }\n  }\n\n  const targets = gltfPrimitive.targets;\n  // Morph targets are disabled for classification models.\n  if (defined(targets) && !loadForClassification) {\n    for (let i = 0; i < targets.length; ++i) {\n      primitive.morphTargets.push(\n        loadMorphTarget(\n          loader,\n          targets[i],\n          needsPostProcessing,\n          primitivePlan,\n          frameState,\n        ),\n      );\n    }\n  }\n\n  const indices = gltfPrimitive.indices;\n  if (defined(indices)) {\n    const indicesPlan = loadIndices(\n      loader,\n      indices,\n      gltfPrimitive,\n      hasFeatureIds,\n      needsPostProcessing,\n      frameState,\n    );\n\n    if (defined(indicesPlan)) {\n      primitivePlan.indicesPlan = indicesPlan;\n      primitive.indices = indicesPlan.indices;\n    }\n  }\n\n  // With the latest revision, feature IDs are defined in EXT_mesh_features\n  // while EXT_structural_metadata is for defining property textures and\n  // property mappings. In the legacy EXT_feature_metadata, these concepts\n  // were all in one extension.\n  const structuralMetadata = extensions.EXT_structural_metadata;\n  const meshFeatures = extensions.EXT_mesh_features;\n  const featureMetadataLegacy = extensions.EXT_feature_metadata;\n  const hasFeatureMetadataLegacy = defined(featureMetadataLegacy);\n\n  // Load feature Ids\n  if (defined(meshFeatures)) {\n    loadPrimitiveFeatures(loader, primitive, meshFeatures, frameState);\n  } else if (hasFeatureMetadataLegacy) {\n    loadPrimitiveFeaturesLegacy(\n      loader,\n      primitive,\n      featureMetadataLegacy,\n      frameState,\n    );\n  }\n\n  // Load structural metadata\n  if (defined(structuralMetadata)) {\n    loadPrimitiveMetadata(primitive, structuralMetadata);\n  } else if (hasFeatureMetadataLegacy) {\n    loadPrimitiveMetadataLegacy(loader, primitive, featureMetadataLegacy);\n  }\n\n  const primitiveType = gltfPrimitive.mode;\n  if (loadForClassification && primitiveType !== PrimitiveType.TRIANGLES) {\n    throw new RuntimeError(\n      \"Only triangle meshes can be used for classification.\",\n    );\n  }\n  primitive.primitiveType = primitiveType;\n\n  return primitive;\n}\n\nfunction loadPrimitiveOutline(loader, outlineExtension) {\n  const accessorId = outlineExtension.indices;\n  const accessor = loader.gltfJson.accessors[accessorId];\n  const useQuaternion = false;\n  return loadAccessor(loader, accessor, useQuaternion);\n}\n\n// For EXT_mesh_features\nfunction loadPrimitiveFeatures(\n  loader,\n  primitive,\n  meshFeaturesExtension,\n  frameState,\n) {\n  let featureIdsArray;\n  if (\n    defined(meshFeaturesExtension) &&\n    defined(meshFeaturesExtension.featureIds)\n  ) {\n    featureIdsArray = meshFeaturesExtension.featureIds;\n  } else {\n    featureIdsArray = [];\n  }\n\n  for (let i = 0; i < featureIdsArray.length; i++) {\n    const featureIds = featureIdsArray[i];\n    const label = `featureId_${i}`;\n\n    let featureIdComponent;\n    if (defined(featureIds.texture)) {\n      featureIdComponent = loadFeatureIdTexture(\n        loader,\n        featureIds,\n        frameState,\n        label,\n      );\n    } else if (defined(featureIds.attribute)) {\n      featureIdComponent = loadFeatureIdAttribute(featureIds, label);\n    } else {\n      // default to vertex ID, in other words an implicit range with\n      // offset: 0, repeat: 1\n      featureIdComponent = loadDefaultFeatureIds(featureIds, label);\n    }\n\n    primitive.featureIds.push(featureIdComponent);\n  }\n}\n\n// For EXT_feature_metadata\nfunction loadPrimitiveFeaturesLegacy(\n  loader,\n  primitive,\n  metadataExtension,\n  frameState,\n) {\n  // For looking up the featureCount for each set of feature IDs\n  const { featureTables } = loader.gltfJson.extensions.EXT_feature_metadata;\n\n  let nextFeatureIdIndex = 0;\n\n  // Feature ID Attributes\n  const featureIdAttributes = metadataExtension.featureIdAttributes;\n  if (defined(featureIdAttributes)) {\n    for (let i = 0; i < featureIdAttributes.length; ++i) {\n      const featureIdAttribute = featureIdAttributes[i];\n      const featureTableId = featureIdAttribute.featureTable;\n      const propertyTableId =\n        loader._sortedPropertyTableIds.indexOf(featureTableId);\n      const featureCount = featureTables[featureTableId].count;\n      const label = `featureId_${nextFeatureIdIndex}`;\n      nextFeatureIdIndex++;\n\n      let featureIdComponent;\n      if (defined(featureIdAttribute.featureIds.attribute)) {\n        featureIdComponent = loadFeatureIdAttributeLegacy(\n          featureIdAttribute,\n          propertyTableId,\n          featureCount,\n          label,\n        );\n      } else {\n        featureIdComponent = loadFeatureIdImplicitRangeLegacy(\n          featureIdAttribute,\n          propertyTableId,\n          featureCount,\n          label,\n        );\n      }\n      primitive.featureIds.push(featureIdComponent);\n    }\n  }\n\n  // Feature ID Textures\n  const featureIdTextures = metadataExtension.featureIdTextures;\n  if (defined(featureIdTextures)) {\n    for (let i = 0; i < featureIdTextures.length; ++i) {\n      const featureIdTexture = featureIdTextures[i];\n      const featureTableId = featureIdTexture.featureTable;\n      const propertyTableId =\n        loader._sortedPropertyTableIds.indexOf(featureTableId);\n      const featureCount = featureTables[featureTableId].count;\n      const featureIdLabel = `featureId_${nextFeatureIdIndex}`;\n      nextFeatureIdIndex++;\n\n      const featureIdComponent = loadFeatureIdTextureLegacy(\n        loader,\n        featureIdTexture,\n        propertyTableId,\n        frameState,\n        featureCount,\n        featureIdLabel,\n      );\n      // Feature ID textures are added after feature ID attributes in the list\n      primitive.featureIds.push(featureIdComponent);\n    }\n  }\n}\n\n// For primitive-level EXT_structural_metadata\nfunction loadPrimitiveMetadata(primitive, structuralMetadataExtension) {\n  if (!defined(structuralMetadataExtension)) {\n    return;\n  }\n  const { propertyTextures, propertyAttributes } = structuralMetadataExtension;\n\n  if (defined(propertyTextures)) {\n    primitive.propertyTextureIds = propertyTextures;\n  }\n\n  if (defined(propertyAttributes)) {\n    primitive.propertyAttributeIds = propertyAttributes;\n  }\n}\n\n// For EXT_feature_metadata\nfunction loadPrimitiveMetadataLegacy(loader, primitive, metadataExtension) {\n  // Feature Textures\n  if (defined(metadataExtension.featureTextures)) {\n    // feature textures are now identified by an integer index. To convert the\n    // string IDs to integers, find their place in the sorted list of feature\n    // table names\n    primitive.propertyTextureIds = metadataExtension.featureTextures.map(\n      function (id) {\n        return loader._sortedFeatureTextureIds.indexOf(id);\n      },\n    );\n  }\n}\n\nfunction loadInstances(loader, nodeExtensions, frameState) {\n  const instancingExtension = nodeExtensions.EXT_mesh_gpu_instancing;\n\n  const instances = new Instances();\n  const attributes = instancingExtension.attributes;\n  if (defined(attributes)) {\n    for (const semantic in attributes) {\n      if (!attributes.hasOwnProperty(semantic)) {\n        continue;\n      }\n      const accessorId = attributes[semantic];\n      instances.attributes.push(\n        loadInstancedAttribute(\n          loader,\n          accessorId,\n          attributes,\n          semantic,\n          frameState,\n        ),\n      );\n    }\n  }\n\n  const instancingExtExtensions =\n    instancingExtension.extensions ?? Frozen.EMPTY_OBJECT;\n  const instanceFeatures = nodeExtensions.EXT_instance_features;\n  const featureMetadataLegacy = instancingExtExtensions.EXT_feature_metadata;\n\n  if (defined(instanceFeatures)) {\n    loadInstanceFeatures(instances, instanceFeatures);\n  } else if (defined(featureMetadataLegacy)) {\n    loadInstanceFeaturesLegacy(\n      loader.gltfJson,\n      instances,\n      featureMetadataLegacy,\n      loader._sortedPropertyTableIds,\n    );\n  }\n\n  return instances;\n}\n\n// For EXT_mesh_features\nfunction loadInstanceFeatures(instances, instanceFeaturesExtension) {\n  // feature IDs are required in EXT_instance_features\n  const featureIdsArray = instanceFeaturesExtension.featureIds;\n\n  for (let i = 0; i < featureIdsArray.length; i++) {\n    const featureIds = featureIdsArray[i];\n    const label = `instanceFeatureId_${i}`;\n\n    let featureIdComponent;\n    if (defined(featureIds.attribute)) {\n      featureIdComponent = loadFeatureIdAttribute(featureIds, label);\n    } else {\n      // in EXT_instance_features, the default is to assign IDs by instance\n      // ID. This can be expressed with offset: 0, repeat: 1\n      featureIdComponent = loadDefaultFeatureIds(featureIds, label);\n    }\n\n    instances.featureIds.push(featureIdComponent);\n  }\n}\n\n// For backwards-compatibility with EXT_feature_metadata\nfunction loadInstanceFeaturesLegacy(\n  gltf,\n  instances,\n  metadataExtension,\n  sortedPropertyTableIds,\n) {\n  // For looking up the featureCount for each set of feature IDs\n  const featureTables = gltf.extensions.EXT_feature_metadata.featureTables;\n\n  const featureIdAttributes = metadataExtension.featureIdAttributes;\n  if (defined(featureIdAttributes)) {\n    for (let i = 0; i < featureIdAttributes.length; ++i) {\n      const featureIdAttribute = featureIdAttributes[i];\n      const featureTableId = featureIdAttribute.featureTable;\n      const propertyTableId = sortedPropertyTableIds.indexOf(featureTableId);\n      const featureCount = featureTables[featureTableId].count;\n      const label = `instanceFeatureId_${i}`;\n\n      let featureIdComponent;\n      if (defined(featureIdAttribute.featureIds.attribute)) {\n        featureIdComponent = loadFeatureIdAttributeLegacy(\n          featureIdAttribute,\n          propertyTableId,\n          featureCount,\n          label,\n        );\n      } else {\n        featureIdComponent = loadFeatureIdImplicitRangeLegacy(\n          featureIdAttribute,\n          propertyTableId,\n          featureCount,\n          label,\n        );\n      }\n      instances.featureIds.push(featureIdComponent);\n    }\n  }\n}\n\n/**\n * Load resources associated with one node from a glTF JSON\n * @param {GltfLoader} loader\n * @param {object} gltfNode An entry from the <code>.nodes</code> array in the glTF JSON\n * @param {FrameState} frameState\n * @returns {ModelComponents.Node}\n * @private\n */\nfunction loadNode(loader, gltfNode, frameState) {\n  const node = new Node();\n\n  node.name = gltfNode.name;\n\n  node.matrix = fromArray(Matrix4, gltfNode.matrix);\n  node.translation = fromArray(Cartesian3, gltfNode.translation);\n  node.rotation = fromArray(Quaternion, gltfNode.rotation);\n  node.scale = fromArray(Cartesian3, gltfNode.scale);\n\n  const nodeExtensions = gltfNode.extensions ?? Frozen.EMPTY_OBJECT;\n  const instancingExtension = nodeExtensions.EXT_mesh_gpu_instancing;\n  const articulationsExtension = nodeExtensions.AGI_articulations;\n\n  if (defined(instancingExtension)) {\n    if (loader._loadForClassification) {\n      throw new RuntimeError(\n        \"Models with the EXT_mesh_gpu_instancing extension cannot be used for classification.\",\n      );\n    }\n    node.instances = loadInstances(loader, nodeExtensions, frameState);\n  }\n\n  if (defined(articulationsExtension)) {\n    node.articulationName = articulationsExtension.articulationName;\n  }\n\n  const meshId = gltfNode.mesh;\n  if (defined(meshId)) {\n    const mesh = loader.gltfJson.meshes[meshId];\n    const primitives = getMeshPrimitives(mesh);\n    for (let i = 0; i < primitives.length; ++i) {\n      node.primitives.push(\n        loadPrimitive(\n          loader,\n          primitives[i],\n          defined(node.instances),\n          frameState,\n        ),\n      );\n    }\n\n    // If the node has no weights array, it will look for the weights array provided\n    // by the mesh. If both are undefined, it will default to an array of zero weights.\n    const morphWeights = gltfNode.weights ?? mesh.weights;\n    const targets = node.primitives[0].morphTargets;\n\n    // Since meshes are not stored as separate components, the mesh weights will still\n    // be stored at the node level.\n    node.morphWeights = defined(morphWeights)\n      ? morphWeights.slice()\n      : new Array(targets.length).fill(0.0);\n  }\n\n  return node;\n}\n\n/**\n * Load resources associated with the nodes in a glTF JSON\n * @param {GltfLoader} loader\n * @param {FrameState} frameState\n * @returns {ModelComponents.Node[]}\n * @private\n */\nfunction loadNodes(loader, frameState) {\n  const nodeJsons = loader.gltfJson.nodes;\n  if (!defined(nodeJsons)) {\n    return [];\n  }\n\n  const loadedNodes = nodeJsons.map(function (nodeJson, i) {\n    const node = loadNode(loader, nodeJson, frameState);\n    node.index = i;\n    return node;\n  });\n\n  for (let i = 0; i < loadedNodes.length; ++i) {\n    const childrenNodeIds = nodeJsons[i].children;\n    if (defined(childrenNodeIds)) {\n      for (let j = 0; j < childrenNodeIds.length; ++j) {\n        loadedNodes[i].children.push(loadedNodes[childrenNodeIds[j]]);\n      }\n    }\n  }\n\n  return loadedNodes;\n}\n\nfunction loadSkin(loader, gltfSkin, nodes) {\n  const skin = new Skin();\n\n  const jointIds = gltfSkin.joints;\n  skin.joints = jointIds.map((jointId) => nodes[jointId]);\n\n  const inverseBindMatricesAccessorId = gltfSkin.inverseBindMatrices;\n  if (defined(inverseBindMatricesAccessorId)) {\n    const accessor = loader.gltfJson.accessors[inverseBindMatricesAccessorId];\n    skin.inverseBindMatrices = loadAccessor(loader, accessor);\n  } else {\n    skin.inverseBindMatrices = new Array(jointIds.length).fill(\n      Matrix4.IDENTITY,\n    );\n  }\n\n  return skin;\n}\n\nfunction loadSkins(loader, nodes) {\n  const skinJsons = loader.gltfJson.skins;\n\n  // Skins are disabled for classification models.\n  if (loader._loadForClassification || !defined(skinJsons)) {\n    return [];\n  }\n\n  const loadedSkins = skinJsons.map(function (skinJson, i) {\n    const skin = loadSkin(loader, skinJson, nodes);\n    skin.index = i;\n    return skin;\n  });\n\n  const nodeJsons = loader.gltfJson.nodes;\n  for (let i = 0; i < nodes.length; ++i) {\n    const skinId = nodeJsons[i].skin;\n    if (defined(skinId)) {\n      nodes[i].skin = loadedSkins[skinId];\n    }\n  }\n\n  return loadedSkins;\n}\n\nasync function loadStructuralMetadata(\n  loader,\n  extension,\n  extensionLegacy,\n  frameState,\n) {\n  const structuralMetadataLoader = new GltfStructuralMetadataLoader({\n    gltf: loader.gltfJson,\n    extension: extension,\n    extensionLegacy: extensionLegacy,\n    gltfResource: loader._gltfResource,\n    baseResource: loader._baseResource,\n    supportedImageFormats: loader._supportedImageFormats,\n    frameState: frameState,\n    asynchronous: loader._asynchronous,\n  });\n  loader._structuralMetadataLoader = structuralMetadataLoader;\n  return structuralMetadataLoader.load();\n}\n\nasync function loadMeshPrimitiveGpm(loader, gltf, extension, frameState) {\n  const meshPrimitiveGpmLoader = new GltfMeshPrimitiveGpmLoader({\n    gltf: gltf,\n    extension: extension,\n    gltfResource: loader._gltfResource,\n    baseResource: loader._baseResource,\n    supportedImageFormats: loader._supportedImageFormats,\n    frameState: frameState,\n    asynchronous: loader._asynchronous,\n  });\n  loader._meshPrimitiveGpmLoader = meshPrimitiveGpmLoader;\n  return meshPrimitiveGpmLoader.load();\n}\n\nfunction loadAnimationSampler(loader, gltfSampler) {\n  const animationSampler = new AnimationSampler();\n  const accessors = loader.gltfJson.accessors;\n\n  const inputAccessor = accessors[gltfSampler.input];\n  animationSampler.input = loadAccessor(loader, inputAccessor);\n\n  const gltfInterpolation = gltfSampler.interpolation;\n  animationSampler.interpolation =\n    InterpolationType[gltfInterpolation] ?? InterpolationType.LINEAR;\n\n  const outputAccessor = accessors[gltfSampler.output];\n  animationSampler.output = loadAccessor(loader, outputAccessor, true);\n\n  return animationSampler;\n}\n\nfunction loadAnimationTarget(gltfTarget, nodes) {\n  const animationTarget = new AnimationTarget();\n\n  const nodeIndex = gltfTarget.node;\n  // If the node isn't defined, the animation channel should be ignored.\n  // It's easiest to signal this by returning undefined.\n  if (!defined(nodeIndex)) {\n    return undefined;\n  }\n\n  animationTarget.node = nodes[nodeIndex];\n\n  const path = gltfTarget.path.toUpperCase();\n  animationTarget.path = AnimatedPropertyType[path];\n\n  return animationTarget;\n}\n\nfunction loadAnimationChannel(gltfChannel, samplers, nodes) {\n  const animationChannel = new AnimationChannel();\n\n  const samplerIndex = gltfChannel.sampler;\n  animationChannel.sampler = samplers[samplerIndex];\n  animationChannel.target = loadAnimationTarget(gltfChannel.target, nodes);\n\n  return animationChannel;\n}\n\nfunction loadAnimation(loader, animationJson, nodes) {\n  const animation = new Animation();\n  animation.name = animationJson.name;\n\n  const samplers = animationJson.samplers.map(function (samplerJson, i) {\n    const sampler = loadAnimationSampler(loader, samplerJson);\n    sampler.index = i;\n    return sampler;\n  });\n\n  const channels = animationJson.channels.map(function (channelJson) {\n    return loadAnimationChannel(channelJson, samplers, nodes);\n  });\n\n  animation.samplers = samplers;\n  animation.channels = channels;\n\n  return animation;\n}\n\nfunction loadAnimations(loader, nodes) {\n  const animationJsons = loader.gltfJson.animations;\n\n  // Animations are disabled for classification models.\n  if (loader._loadForClassification || !defined(animationJsons)) {\n    return [];\n  }\n\n  const animations = animationJsons.map(function (animationJson, i) {\n    const animation = loadAnimation(loader, animationJson, nodes);\n    animation.index = i;\n    return animation;\n  });\n\n  return animations;\n}\n\nfunction loadArticulationStage(gltfStage) {\n  const stage = new ArticulationStage();\n  stage.name = gltfStage.name;\n\n  const type = gltfStage.type.toUpperCase();\n  stage.type = ArticulationStageType[type];\n\n  stage.minimumValue = gltfStage.minimumValue;\n  stage.maximumValue = gltfStage.maximumValue;\n  stage.initialValue = gltfStage.initialValue;\n\n  return stage;\n}\n\nfunction loadArticulation(articulationJson) {\n  const articulation = new Articulation();\n  articulation.name = articulationJson.name;\n  articulation.stages = articulationJson.stages.map(loadArticulationStage);\n  return articulation;\n}\n\nfunction loadArticulations(gltf) {\n  const extensions = gltf.extensions ?? Frozen.EMPTY_OBJECT;\n  const articulationJsons = extensions.AGI_articulations?.articulations;\n  if (!defined(articulationJsons)) {\n    return [];\n  }\n  return articulationJsons.map(loadArticulation);\n}\n\nfunction getSceneNodeIds(gltf) {\n  let nodesIds;\n  if (defined(gltf.scenes) && defined(gltf.scene)) {\n    nodesIds = gltf.scenes[gltf.scene].nodes;\n  }\n  nodesIds = nodesIds ?? gltf.nodes;\n  nodesIds = defined(nodesIds) ? nodesIds : [];\n  return nodesIds;\n}\n\nfunction loadScene(gltf, nodes) {\n  const scene = new Scene();\n  const sceneNodeIds = getSceneNodeIds(gltf);\n  scene.nodes = sceneNodeIds.map(function (sceneNodeId) {\n    return nodes[sceneNodeId];\n  });\n  return scene;\n}\n\nconst scratchCenter = new Cartesian3();\n\n/**\n * Parse the glTF which populates the loaders arrays. Loading promises will be created, and will\n * resolve once the loaders are ready (i.e. all external resources\n * have been fetched and all GPU resources have been created). Loaders that\n * create GPU resources need to be processed every frame until they become\n * ready since the JobScheduler is not able to execute all jobs in a single\n * frame. Any promise failures are collected, and will be handled synchronously in process().\n * Also note that it's fine to call process before a loader is ready to process or\n * after it has failed; nothing will happen.\n *\n * @param {GltfLoader} loader\n * @param {FrameState} frameState\n * @returns {Promise} A Promise that resolves when all loaders are ready\n * @private\n */\nfunction parse(loader, frameState) {\n  const gltf = loader.gltfJson;\n  const extensions = gltf.extensions ?? Frozen.EMPTY_OBJECT;\n  const structuralMetadataExtension = extensions.EXT_structural_metadata;\n  const featureMetadataExtensionLegacy = extensions.EXT_feature_metadata;\n  const cesiumRtcExtension = extensions.CESIUM_RTC;\n\n  if (defined(featureMetadataExtensionLegacy)) {\n    // If the old EXT_feature_metadata extension is present, sort the IDs of the\n    // feature tables and feature textures so we don't have to do this once\n    // per primitive.\n    //\n    // This must run before loadNodes so these IDs are available when\n    // attributes are processed.\n    const featureTables = featureMetadataExtensionLegacy.featureTables;\n    const featureTextures = featureMetadataExtensionLegacy.featureTextures;\n    const allPropertyTableIds = defined(featureTables) ? featureTables : [];\n    const allFeatureTextureIds = defined(featureTextures)\n      ? featureTextures\n      : [];\n    loader._sortedPropertyTableIds = Object.keys(allPropertyTableIds).sort();\n    loader._sortedFeatureTextureIds = Object.keys(allFeatureTextureIds).sort();\n  }\n\n  const nodes = loadNodes(loader, frameState);\n  const skins = loadSkins(loader, nodes);\n  const animations = loadAnimations(loader, nodes);\n  const articulations = loadArticulations(gltf);\n  const scene = loadScene(gltf, nodes);\n\n  const components = new Components();\n  const asset = new Asset();\n  const copyright = gltf.asset.copyright;\n  if (defined(copyright)) {\n    const credits = copyright.split(\";\").map(function (string) {\n      return new Credit(string.trim());\n    });\n    asset.credits = credits;\n  }\n\n  components.asset = asset;\n  components.scene = scene;\n  components.nodes = nodes;\n  components.skins = skins;\n  components.animations = animations;\n  components.articulations = articulations;\n  components.upAxis = loader._upAxis;\n  components.forwardAxis = loader._forwardAxis;\n\n  if (defined(cesiumRtcExtension)) {\n    // CESIUM_RTC is almost always WGS84 coordinates so no axis conversion needed\n    const center = Cartesian3.fromArray(\n      cesiumRtcExtension.center,\n      0,\n      scratchCenter,\n    );\n    components.transform = Matrix4.fromTranslation(\n      center,\n      components.transform,\n    );\n  }\n\n  loader._components = components;\n\n  // Load structural metadata (property tables and property textures)\n  if (\n    defined(structuralMetadataExtension) ||\n    defined(featureMetadataExtensionLegacy)\n  ) {\n    const promise = loadStructuralMetadata(\n      loader,\n      structuralMetadataExtension,\n      featureMetadataExtensionLegacy,\n      frameState,\n    );\n    loader._loaderPromises.push(promise);\n  }\n\n  // Load NGA_gpm_local from root object\n  const gpmExtension = extensions.NGA_gpm_local;\n  if (defined(gpmExtension)) {\n    const gltfGpmLocal = GltfGpmLoader.load(gpmExtension);\n    loader._components.extensions[\"NGA_gpm_local\"] = gltfGpmLocal;\n  }\n\n  // Load NGA_gpm_local from mesh primitives\n  const meshes = gltf.meshes;\n  if (defined(meshes)) {\n    for (const mesh of meshes) {\n      const primitives = mesh.primitives;\n      if (defined(primitives)) {\n        for (const primitive of primitives) {\n          const primitiveExtensions = primitive.extensions;\n          if (defined(primitiveExtensions)) {\n            const meshPrimitiveGpmExtension = primitiveExtensions.NGA_gpm_local;\n            if (defined(meshPrimitiveGpmExtension)) {\n              const promise = loadMeshPrimitiveGpm(\n                loader,\n                gltf,\n                meshPrimitiveGpmExtension,\n                frameState,\n              );\n              loader._loaderPromises.push(promise);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  // Gather promises and handle any errors\n  const readyPromises = [];\n  addAllToArray(readyPromises, loader._loaderPromises);\n\n  // When incrementallyLoadTextures is true, the errors are caught and thrown individually\n  // since it doesn't affect the overall loader state\n  if (!loader._incrementallyLoadTextures) {\n    addAllToArray(readyPromises, loader._texturesPromises);\n  }\n\n  return Promise.all(readyPromises);\n}\n\nfunction unloadTextures(loader) {\n  const textureLoaders = loader._textureLoaders;\n  for (let i = 0; i < textureLoaders.length; ++i) {\n    textureLoaders[i] =\n      !textureLoaders[i].isDestroyed() &&\n      ResourceCache.unload(textureLoaders[i]);\n  }\n  loader._textureLoaders.length = 0;\n}\n\nfunction unloadBufferViewLoaders(loader) {\n  const bufferViewLoaders = loader._bufferViewLoaders;\n  for (let i = 0; i < bufferViewLoaders.length; ++i) {\n    bufferViewLoaders[i] =\n      !bufferViewLoaders[i].isDestroyed() &&\n      ResourceCache.unload(bufferViewLoaders[i]);\n  }\n  loader._bufferViewLoaders.length = 0;\n}\n\nfunction unloadGeometry(loader) {\n  const geometryLoaders = loader._geometryLoaders;\n  for (let i = 0; i < geometryLoaders.length; ++i) {\n    geometryLoaders[i] =\n      !geometryLoaders[i].isDestroyed() &&\n      ResourceCache.unload(geometryLoaders[i]);\n  }\n  loader._geometryLoaders.length = 0;\n}\n\nfunction unloadGeneratedAttributes(loader) {\n  const buffers = loader._postProcessBuffers;\n  for (let i = 0; i < buffers.length; i++) {\n    const buffer = buffers[i];\n    if (!buffer.isDestroyed()) {\n      buffer.destroy();\n    }\n  }\n  buffers.length = 0;\n}\n\nfunction unloadStructuralMetadata(loader) {\n  if (\n    defined(loader._structuralMetadataLoader) &&\n    !loader._structuralMetadataLoader.isDestroyed()\n  ) {\n    loader._structuralMetadataLoader.destroy();\n    loader._structuralMetadataLoader = undefined;\n  }\n}\n\nfunction unloadMeshPrimitiveGpm(loader) {\n  if (\n    defined(loader._meshPrimitiveGpmLoader) &&\n    !loader._meshPrimitiveGpmLoader.isDestroyed()\n  ) {\n    loader._meshPrimitiveGpmLoader.destroy();\n    loader._meshPrimitiveGpmLoader = undefined;\n  }\n}\n\nexport default GltfLoader;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport ModelComponents from \"./ModelComponents.js\";\n\n/**\n * glTF loading utilities.\n *\n * @namespace GltfLoaderUtil\n *\n * @private\n */\nconst GltfLoaderUtil = {};\n\n/**\n * Get the image ID referenced by a texture.\n * <p>\n * When the texture has the EXT_texture_webp extension and the browser supports\n * WebP images the WebP image ID is returned.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {number} options.textureId The texture ID.\n * @param {SupportedImageFormats} options.supportedImageFormats The supported image formats.\n *\n * @returns {number} The image ID.\n * @private\n */\nGltfLoaderUtil.getImageIdFromTexture = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, textureId, supportedImageFormats } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.textureId\", textureId);\n  Check.typeOf.object(\"options.supportedImageFormats\", supportedImageFormats);\n  //>>includeEnd('debug');\n\n  const texture = gltf.textures[textureId];\n  const extensions = texture.extensions;\n  if (defined(extensions)) {\n    if (supportedImageFormats.webp && defined(extensions.EXT_texture_webp)) {\n      return extensions.EXT_texture_webp.source;\n    } else if (\n      supportedImageFormats.basis &&\n      defined(extensions.KHR_texture_basisu)\n    ) {\n      return extensions.KHR_texture_basisu.source;\n    }\n  }\n  return texture.source;\n};\n\n/**\n * Create a sampler for a texture.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {object} options.textureInfo The texture info object.\n * @param {boolean} [options.compressedTextureNoMipmap=false] True when the texture is compressed and does not have an embedded mipmap.\n *\n * @returns {Sampler} The sampler.\n * @private\n */\nGltfLoaderUtil.createSampler = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, textureInfo, compressedTextureNoMipmap = false } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.textureInfo\", textureInfo);\n  //>>includeEnd('debug');\n\n  // Default sampler properties\n  let wrapS = TextureWrap.REPEAT;\n  let wrapT = TextureWrap.REPEAT;\n  let minFilter = TextureMinificationFilter.LINEAR;\n  let magFilter = TextureMagnificationFilter.LINEAR;\n\n  const textureId = textureInfo.index;\n  const texture = gltf.textures[textureId];\n  const samplerId = texture.sampler;\n\n  if (defined(samplerId)) {\n    const sampler = gltf.samplers[samplerId];\n    wrapS = sampler.wrapS ?? wrapS;\n    wrapT = sampler.wrapT ?? wrapT;\n    minFilter = sampler.minFilter ?? minFilter;\n    magFilter = sampler.magFilter ?? magFilter;\n  }\n\n  if (\n    compressedTextureNoMipmap &&\n    minFilter !== TextureMinificationFilter.LINEAR &&\n    minFilter !== TextureMinificationFilter.NEAREST\n  ) {\n    if (\n      minFilter === TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n      minFilter === TextureMinificationFilter.NEAREST_MIPMAP_LINEAR\n    ) {\n      minFilter = TextureMinificationFilter.NEAREST;\n    } else {\n      minFilter = TextureMinificationFilter.LINEAR;\n    }\n  }\n\n  return new Sampler({\n    wrapS: wrapS,\n    wrapT: wrapT,\n    minificationFilter: minFilter,\n    magnificationFilter: magFilter,\n  });\n};\n\nconst defaultScale = new Cartesian2(1.0, 1.0);\n\n/**\n * Create a model texture reader.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.textureInfo The texture info JSON.\n * @param {string} [options.channels] The texture channels to read from.\n * @param {Texture} [options.texture] The texture object.\n *\n * @returns {ModelComponents.TextureReader} The texture reader for this model.\n */\nGltfLoaderUtil.createModelTextureReader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { textureInfo, channels, texture } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.textureInfo\", textureInfo);\n  //>>includeEnd('debug');\n\n  let texCoord = textureInfo.texCoord ?? 0;\n  let transform;\n\n  const textureTransform = textureInfo.extensions?.KHR_texture_transform;\n\n  if (defined(textureTransform)) {\n    texCoord = textureTransform.texCoord ?? texCoord;\n\n    const offset = defined(textureTransform.offset)\n      ? Cartesian2.unpack(textureTransform.offset)\n      : Cartesian2.ZERO;\n    let rotation = textureTransform.rotation ?? 0.0;\n    const scale = defined(textureTransform.scale)\n      ? Cartesian2.unpack(textureTransform.scale)\n      : defaultScale;\n\n    // glTF assumes UV coordinates start with (0, 0) in the top left corner\n    // (y-down) unlike WebGL which puts (0, 0) in the bottom left corner (y-up).\n    // This means rotations are reversed since the angle from x to y is now\n    // clockwise instead of CCW. Translations and scales are not impacted by\n    // this.\n    rotation = -rotation;\n\n    // prettier-ignore\n    transform = new Matrix3(\n        Math.cos(rotation) * scale.x, -Math.sin(rotation) * scale.y, offset.x,\n        Math.sin(rotation) * scale.x, Math.cos(rotation) * scale.y, offset.y,\n        0.0, 0.0, 1.0\n      );\n  }\n\n  const modelTextureReader = new ModelComponents.TextureReader();\n  modelTextureReader.index = textureInfo.index;\n  modelTextureReader.texture = texture;\n  modelTextureReader.texCoord = texCoord;\n  modelTextureReader.scale = textureInfo.scale;\n  modelTextureReader.transform = transform;\n  modelTextureReader.channels = channels;\n\n  return modelTextureReader;\n};\n\nexport default GltfLoaderUtil;\n","import usesExtension from \"./usesExtension.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Contains traversal functions for processing elements of the glTF hierarchy.\n * @constructor\n *\n * @private\n */\nfunction ForEach() {}\n\n/**\n * Fallback for glTF 1.0\n * @private\n */\nForEach.objectLegacy = function (objects, handler) {\n  if (defined(objects)) {\n    for (const objectId in objects) {\n      if (Object.prototype.hasOwnProperty.call(objects, objectId)) {\n        const object = objects[objectId];\n        const value = handler(object, objectId);\n\n        if (defined(value)) {\n          return value;\n        }\n      }\n    }\n  }\n};\n\n/**\n * @private\n */\nForEach.object = function (arrayOfObjects, handler) {\n  if (defined(arrayOfObjects)) {\n    const length = arrayOfObjects.length;\n    for (let i = 0; i < length; i++) {\n      const object = arrayOfObjects[i];\n      const value = handler(object, i);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\n/**\n * Supports glTF 1.0 and 2.0\n * @private\n */\nForEach.topLevel = function (gltf, name, handler) {\n  const gltfProperty = gltf[name];\n  if (defined(gltfProperty) && !Array.isArray(gltfProperty)) {\n    return ForEach.objectLegacy(gltfProperty, handler);\n  }\n\n  return ForEach.object(gltfProperty, handler);\n};\n\nForEach.accessor = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"accessors\", handler);\n};\n\nForEach.accessorWithSemantic = function (gltf, semantic, handler) {\n  const visited = {};\n  return ForEach.mesh(gltf, function (mesh) {\n    return ForEach.meshPrimitive(mesh, function (primitive) {\n      const valueForEach = ForEach.meshPrimitiveAttribute(\n        primitive,\n        function (accessorId, attributeSemantic) {\n          if (\n            attributeSemantic.indexOf(semantic) === 0 &&\n            !defined(visited[accessorId])\n          ) {\n            visited[accessorId] = true;\n            const value = handler(accessorId);\n\n            if (defined(value)) {\n              return value;\n            }\n          }\n        },\n      );\n\n      if (defined(valueForEach)) {\n        return valueForEach;\n      }\n\n      return ForEach.meshPrimitiveTarget(primitive, function (target) {\n        return ForEach.meshPrimitiveTargetAttribute(\n          target,\n          function (accessorId, attributeSemantic) {\n            if (\n              attributeSemantic.indexOf(semantic) === 0 &&\n              !defined(visited[accessorId])\n            ) {\n              visited[accessorId] = true;\n              const value = handler(accessorId);\n\n              if (defined(value)) {\n                return value;\n              }\n            }\n          },\n        );\n      });\n    });\n  });\n};\n\nForEach.accessorContainingVertexAttributeData = function (gltf, handler) {\n  const visited = {};\n  return ForEach.mesh(gltf, function (mesh) {\n    return ForEach.meshPrimitive(mesh, function (primitive) {\n      const valueForEach = ForEach.meshPrimitiveAttribute(\n        primitive,\n        function (accessorId) {\n          if (!defined(visited[accessorId])) {\n            visited[accessorId] = true;\n            const value = handler(accessorId);\n\n            if (defined(value)) {\n              return value;\n            }\n          }\n        },\n      );\n\n      if (defined(valueForEach)) {\n        return valueForEach;\n      }\n\n      return ForEach.meshPrimitiveTarget(primitive, function (target) {\n        return ForEach.meshPrimitiveTargetAttribute(\n          target,\n          function (accessorId) {\n            if (!defined(visited[accessorId])) {\n              visited[accessorId] = true;\n              const value = handler(accessorId);\n\n              if (defined(value)) {\n                return value;\n              }\n            }\n          },\n        );\n      });\n    });\n  });\n};\n\nForEach.accessorContainingIndexData = function (gltf, handler) {\n  const visited = {};\n  return ForEach.mesh(gltf, function (mesh) {\n    return ForEach.meshPrimitive(mesh, function (primitive) {\n      const indices = primitive.indices;\n      if (defined(indices) && !defined(visited[indices])) {\n        visited[indices] = true;\n        const value = handler(indices);\n\n        if (defined(value)) {\n          return value;\n        }\n      }\n    });\n  });\n};\n\nForEach.animation = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"animations\", handler);\n};\n\nForEach.animationChannel = function (animation, handler) {\n  const channels = animation.channels;\n  return ForEach.object(channels, handler);\n};\n\nForEach.animationSampler = function (animation, handler) {\n  const samplers = animation.samplers;\n  return ForEach.object(samplers, handler);\n};\n\nForEach.buffer = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"buffers\", handler);\n};\n\nForEach.bufferView = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"bufferViews\", handler);\n};\n\nForEach.camera = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"cameras\", handler);\n};\n\nForEach.image = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"images\", handler);\n};\n\nForEach.material = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"materials\", handler);\n};\n\nForEach.materialValue = function (material, handler) {\n  let values = material.values;\n  if (\n    defined(material.extensions) &&\n    defined(material.extensions.KHR_techniques_webgl)\n  ) {\n    values = material.extensions.KHR_techniques_webgl.values;\n  }\n\n  for (const name in values) {\n    if (Object.prototype.hasOwnProperty.call(values, name)) {\n      const value = handler(values[name], name);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.mesh = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"meshes\", handler);\n};\n\nForEach.meshPrimitive = function (mesh, handler) {\n  const primitives = mesh.primitives;\n  if (defined(primitives)) {\n    const primitivesLength = primitives.length;\n    for (let i = 0; i < primitivesLength; i++) {\n      const primitive = primitives[i];\n      const value = handler(primitive, i);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.meshPrimitiveAttribute = function (primitive, handler) {\n  const attributes = primitive.attributes;\n  for (const semantic in attributes) {\n    if (Object.prototype.hasOwnProperty.call(attributes, semantic)) {\n      const value = handler(attributes[semantic], semantic);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.meshPrimitiveTarget = function (primitive, handler) {\n  const targets = primitive.targets;\n  if (defined(targets)) {\n    const length = targets.length;\n    for (let i = 0; i < length; ++i) {\n      const value = handler(targets[i], i);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.meshPrimitiveTargetAttribute = function (target, handler) {\n  for (const semantic in target) {\n    if (Object.prototype.hasOwnProperty.call(target, semantic)) {\n      const accessorId = target[semantic];\n      const value = handler(accessorId, semantic);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.node = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"nodes\", handler);\n};\n\nForEach.nodeInTree = function (gltf, nodeIds, handler) {\n  const nodes = gltf.nodes;\n  if (defined(nodes)) {\n    const length = nodeIds.length;\n    for (let i = 0; i < length; i++) {\n      const nodeId = nodeIds[i];\n      const node = nodes[nodeId];\n      if (defined(node)) {\n        let value = handler(node, nodeId);\n\n        if (defined(value)) {\n          return value;\n        }\n\n        const children = node.children;\n        if (defined(children)) {\n          value = ForEach.nodeInTree(gltf, children, handler);\n\n          if (defined(value)) {\n            return value;\n          }\n        }\n      }\n    }\n  }\n};\n\nForEach.nodeInScene = function (gltf, scene, handler) {\n  const sceneNodeIds = scene.nodes;\n  if (defined(sceneNodeIds)) {\n    return ForEach.nodeInTree(gltf, sceneNodeIds, handler);\n  }\n};\n\nForEach.program = function (gltf, handler) {\n  if (usesExtension(gltf, \"KHR_techniques_webgl\")) {\n    return ForEach.object(\n      gltf.extensions.KHR_techniques_webgl.programs,\n      handler,\n    );\n  }\n\n  return ForEach.topLevel(gltf, \"programs\", handler);\n};\n\nForEach.sampler = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"samplers\", handler);\n};\n\nForEach.scene = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"scenes\", handler);\n};\n\nForEach.shader = function (gltf, handler) {\n  if (usesExtension(gltf, \"KHR_techniques_webgl\")) {\n    return ForEach.object(\n      gltf.extensions.KHR_techniques_webgl.shaders,\n      handler,\n    );\n  }\n\n  return ForEach.topLevel(gltf, \"shaders\", handler);\n};\n\nForEach.skin = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"skins\", handler);\n};\n\nForEach.skinJoint = function (skin, handler) {\n  const joints = skin.joints;\n  if (defined(joints)) {\n    const jointsLength = joints.length;\n    for (let i = 0; i < jointsLength; i++) {\n      const joint = joints[i];\n      const value = handler(joint);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.techniqueAttribute = function (technique, handler) {\n  const attributes = technique.attributes;\n  for (const attributeName in attributes) {\n    if (Object.prototype.hasOwnProperty.call(attributes, attributeName)) {\n      const value = handler(attributes[attributeName], attributeName);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.techniqueUniform = function (technique, handler) {\n  const uniforms = technique.uniforms;\n  for (const uniformName in uniforms) {\n    if (Object.prototype.hasOwnProperty.call(uniforms, uniformName)) {\n      const value = handler(uniforms[uniformName], uniformName);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.techniqueParameter = function (technique, handler) {\n  const parameters = technique.parameters;\n  for (const parameterName in parameters) {\n    if (Object.prototype.hasOwnProperty.call(parameters, parameterName)) {\n      const value = handler(parameters[parameterName], parameterName);\n\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n};\n\nForEach.technique = function (gltf, handler) {\n  if (usesExtension(gltf, \"KHR_techniques_webgl\")) {\n    return ForEach.object(\n      gltf.extensions.KHR_techniques_webgl.techniques,\n      handler,\n    );\n  }\n\n  return ForEach.topLevel(gltf, \"techniques\", handler);\n};\n\nForEach.texture = function (gltf, handler) {\n  return ForEach.topLevel(gltf, \"textures\", handler);\n};\n\nexport default ForEach;\n","import addToArray from \"./addToArray.js\";\n\n/**\n * Adds buffer to gltf.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {Buffer} buffer A Buffer object which will be added to gltf.buffers.\n * @returns {number} The bufferView id of the newly added bufferView.\n *\n * @private\n */\nfunction addBuffer(gltf, buffer) {\n  const newBuffer = {\n    byteLength: buffer.length,\n    extras: {\n      _pipeline: {\n        source: buffer,\n      },\n    },\n  };\n  const bufferId = addToArray(gltf.buffers, newBuffer);\n  const bufferView = {\n    buffer: bufferId,\n    byteOffset: 0,\n    byteLength: buffer.length,\n  };\n  return addToArray(gltf.bufferViews, bufferView);\n}\n\nexport default addBuffer;\n","import addToArray from \"./addToArray.js\";\nimport ForEach from \"./ForEach.js\";\nimport getAccessorByteStride from \"./getAccessorByteStride.js\";\nimport defined from \"../../Core/defined.js\";\nimport WebGLConstants from \"../../Core/WebGLConstants.js\";\n\n/**\n * Adds default glTF values if they don't exist.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @returns {object} The modified glTF.\n *\n * @private\n */\nfunction addDefaults(gltf) {\n  ForEach.accessor(gltf, function (accessor) {\n    if (defined(accessor.bufferView)) {\n      accessor.byteOffset = accessor.byteOffset ?? 0;\n    }\n  });\n\n  ForEach.bufferView(gltf, function (bufferView) {\n    if (defined(bufferView.buffer)) {\n      bufferView.byteOffset = bufferView.byteOffset ?? 0;\n    }\n  });\n\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      primitive.mode = primitive.mode ?? WebGLConstants.TRIANGLES;\n      if (!defined(primitive.material)) {\n        if (!defined(gltf.materials)) {\n          gltf.materials = [];\n        }\n        const defaultMaterial = {\n          name: \"default\",\n        };\n        primitive.material = addToArray(gltf.materials, defaultMaterial);\n      }\n    });\n  });\n\n  ForEach.accessorContainingVertexAttributeData(gltf, function (accessorId) {\n    const accessor = gltf.accessors[accessorId];\n    const bufferViewId = accessor.bufferView;\n    accessor.normalized = accessor.normalized ?? false;\n    if (defined(bufferViewId)) {\n      const bufferView = gltf.bufferViews[bufferViewId];\n      bufferView.byteStride = getAccessorByteStride(gltf, accessor);\n      bufferView.target = WebGLConstants.ARRAY_BUFFER;\n    }\n  });\n\n  ForEach.accessorContainingIndexData(gltf, function (accessorId) {\n    const accessor = gltf.accessors[accessorId];\n    const bufferViewId = accessor.bufferView;\n    if (defined(bufferViewId)) {\n      const bufferView = gltf.bufferViews[bufferViewId];\n      bufferView.target = WebGLConstants.ELEMENT_ARRAY_BUFFER;\n    }\n  });\n\n  ForEach.material(gltf, function (material) {\n    const extensions = material.extensions ?? {};\n    const materialsCommon = extensions.KHR_materials_common;\n    if (defined(materialsCommon)) {\n      const technique = materialsCommon.technique;\n      const values = defined(materialsCommon.values)\n        ? materialsCommon.values\n        : {};\n      materialsCommon.values = values;\n\n      values.ambient = defined(values.ambient)\n        ? values.ambient\n        : [0.0, 0.0, 0.0, 1.0];\n      values.emission = defined(values.emission)\n        ? values.emission\n        : [0.0, 0.0, 0.0, 1.0];\n\n      values.transparency = values.transparency ?? 1.0;\n\n      if (technique !== \"CONSTANT\") {\n        values.diffuse = defined(values.diffuse)\n          ? values.diffuse\n          : [0.0, 0.0, 0.0, 1.0];\n        if (technique !== \"LAMBERT\") {\n          values.specular = defined(values.specular)\n            ? values.specular\n            : [0.0, 0.0, 0.0, 1.0];\n          values.shininess = values.shininess ?? 0.0;\n        }\n      }\n\n      // These actually exist on the extension object, not the values object despite what's shown in the spec\n      materialsCommon.transparent = materialsCommon.transparent ?? false;\n      materialsCommon.doubleSided = materialsCommon.doubleSided ?? false;\n\n      return;\n    }\n\n    material.emissiveFactor = material.emissiveFactor ?? [0.0, 0.0, 0.0];\n    material.alphaMode = material.alphaMode ?? \"OPAQUE\";\n    material.doubleSided = material.doubleSided ?? false;\n\n    if (material.alphaMode === \"MASK\") {\n      material.alphaCutoff = material.alphaCutoff ?? 0.5;\n    }\n\n    const techniquesExtension = extensions.KHR_techniques_webgl;\n    if (defined(techniquesExtension)) {\n      ForEach.materialValue(material, function (materialValue) {\n        // Check if material value is a TextureInfo object\n        if (defined(materialValue.index)) {\n          addTextureDefaults(materialValue);\n        }\n      });\n    }\n\n    addTextureDefaults(material.emissiveTexture);\n    addTextureDefaults(material.normalTexture);\n    addTextureDefaults(material.occlusionTexture);\n\n    const pbrMetallicRoughness = material.pbrMetallicRoughness;\n    if (defined(pbrMetallicRoughness)) {\n      pbrMetallicRoughness.baseColorFactor =\n        pbrMetallicRoughness.baseColorFactor ?? [1.0, 1.0, 1.0, 1.0];\n      pbrMetallicRoughness.metallicFactor =\n        pbrMetallicRoughness.metallicFactor ?? 1.0;\n      pbrMetallicRoughness.roughnessFactor =\n        pbrMetallicRoughness.roughnessFactor ?? 1.0;\n      addTextureDefaults(pbrMetallicRoughness.baseColorTexture);\n      addTextureDefaults(pbrMetallicRoughness.metallicRoughnessTexture);\n    }\n\n    const pbrSpecularGlossiness =\n      extensions.KHR_materials_pbrSpecularGlossiness;\n    if (defined(pbrSpecularGlossiness)) {\n      pbrSpecularGlossiness.diffuseFactor =\n        pbrSpecularGlossiness.diffuseFactor ?? [1.0, 1.0, 1.0, 1.0];\n      pbrSpecularGlossiness.specularFactor =\n        pbrSpecularGlossiness.specularFactor ?? [1.0, 1.0, 1.0];\n      pbrSpecularGlossiness.glossinessFactor =\n        pbrSpecularGlossiness.glossinessFactor ?? 1.0;\n      addTextureDefaults(pbrSpecularGlossiness.specularGlossinessTexture);\n    }\n  });\n\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationSampler(animation, function (sampler) {\n      sampler.interpolation = sampler.interpolation ?? \"LINEAR\";\n    });\n  });\n\n  const animatedNodes = getAnimatedNodes(gltf);\n  ForEach.node(gltf, function (node, id) {\n    const animated = defined(animatedNodes[id]);\n    if (\n      animated ||\n      defined(node.translation) ||\n      defined(node.rotation) ||\n      defined(node.scale)\n    ) {\n      node.translation = node.translation ?? [0.0, 0.0, 0.0];\n      node.rotation = node.rotation ?? [0.0, 0.0, 0.0, 1.0];\n      node.scale = node.scale ?? [1.0, 1.0, 1.0];\n    } else {\n      node.matrix = node.matrix ?? [\n        1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,\n        0.0, 1.0,\n      ];\n    }\n  });\n\n  ForEach.sampler(gltf, function (sampler) {\n    sampler.wrapS = sampler.wrapS ?? WebGLConstants.REPEAT;\n    sampler.wrapT = sampler.wrapT ?? WebGLConstants.REPEAT;\n  });\n\n  if (defined(gltf.scenes) && !defined(gltf.scene)) {\n    gltf.scene = 0;\n  }\n\n  return gltf;\n}\n\nfunction getAnimatedNodes(gltf) {\n  const nodes = {};\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationChannel(animation, function (channel) {\n      const target = channel.target;\n      const nodeId = target.node;\n      const path = target.path;\n      // Ignore animations that target 'weights'\n      if (path === \"translation\" || path === \"rotation\" || path === \"scale\") {\n        nodes[nodeId] = true;\n      }\n    });\n  });\n  return nodes;\n}\n\nfunction addTextureDefaults(texture) {\n  if (defined(texture)) {\n    texture.texCoord = texture.texCoord ?? 0;\n  }\n}\n\nexport default addDefaults;\n","import addExtensionsUsed from \"./addExtensionsUsed.js\";\nimport addToArray from \"./addToArray.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Adds an extension to gltf.extensionsRequired if it does not already exist.\n * Initializes extensionsRequired if it is not defined.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {string} extension The extension to add.\n *\n * @private\n */\nfunction addExtensionsRequired(gltf, extension) {\n  let extensionsRequired = gltf.extensionsRequired;\n  if (!defined(extensionsRequired)) {\n    extensionsRequired = [];\n    gltf.extensionsRequired = extensionsRequired;\n  }\n  addToArray(extensionsRequired, extension, true);\n  addExtensionsUsed(gltf, extension);\n}\n\nexport default addExtensionsRequired;\n","import addToArray from \"./addToArray.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Adds an extension to gltf.extensionsUsed if it does not already exist.\n * Initializes extensionsUsed if it is not defined.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {string} extension The extension to add.\n *\n * @private\n */\nfunction addExtensionsUsed(gltf, extension) {\n  let extensionsUsed = gltf.extensionsUsed;\n  if (!defined(extensionsUsed)) {\n    extensionsUsed = [];\n    gltf.extensionsUsed = extensionsUsed;\n  }\n  addToArray(extensionsUsed, extension, true);\n}\n\nexport default addExtensionsUsed;\n","import ForEach from \"./ForEach.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Adds extras._pipeline to each object that can have extras in the glTF asset.\n * This stage runs before updateVersion and handles both glTF 1.0 and glTF 2.0 assets.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @returns {object} The glTF asset with the added pipeline extras.\n *\n * @private\n */\nfunction addPipelineExtras(gltf) {\n  ForEach.shader(gltf, function (shader) {\n    addExtras(shader);\n  });\n  ForEach.buffer(gltf, function (buffer) {\n    addExtras(buffer);\n  });\n  ForEach.image(gltf, function (image) {\n    addExtras(image);\n  });\n\n  addExtras(gltf);\n\n  return gltf;\n}\n\nfunction addExtras(object) {\n  object.extras = defined(object.extras) ? object.extras : {};\n  object.extras._pipeline = defined(object.extras._pipeline)\n    ? object.extras._pipeline\n    : {};\n}\n\nexport default addPipelineExtras;\n","\n\n/**\n * Adds an element to an array and returns the element's index.\n *\n * @param {Array} array The array to add to.\n * @param {object} element The element to add.\n * @param {boolean} [checkDuplicates=false] When <code>true</code>, if a duplicate element is found its index is returned and <code>element</code> is not added to the array.\n *\n * @private\n */\nfunction addToArray(array, element, checkDuplicates) {\n  checkDuplicates = checkDuplicates ?? false;\n  if (checkDuplicates) {\n    const index = array.indexOf(element);\n    if (index > -1) {\n      return index;\n    }\n  }\n\n  array.push(element);\n  return array.length - 1;\n}\n\nexport default addToArray;\n","import getAccessorByteStride from \"./getAccessorByteStride.js\";\nimport getComponentReader from \"./getComponentReader.js\";\nimport numberOfComponentsForType from \"./numberOfComponentsForType.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Finds the min and max values of the accessor.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {object} accessor The accessor object from the glTF asset to read.\n * @returns {{min: Array, max: Array}} min holding the array of minimum values and max holding the array of maximum values.\n *\n * @private\n */\nfunction findAccessorMinMax(gltf, accessor) {\n  const bufferViews = gltf.bufferViews;\n  const buffers = gltf.buffers;\n  const bufferViewId = accessor.bufferView;\n  const numberOfComponents = numberOfComponentsForType(accessor.type);\n\n  // According to the spec, when bufferView is not defined, accessor must be initialized with zeros\n  if (!defined(accessor.bufferView)) {\n    return {\n      min: new Array(numberOfComponents).fill(0.0),\n      max: new Array(numberOfComponents).fill(0.0),\n    };\n  }\n\n  const min = new Array(numberOfComponents).fill(Number.POSITIVE_INFINITY);\n  const max = new Array(numberOfComponents).fill(Number.NEGATIVE_INFINITY);\n\n  const bufferView = bufferViews[bufferViewId];\n  const bufferId = bufferView.buffer;\n  const buffer = buffers[bufferId];\n  const source = buffer.extras._pipeline.source;\n\n  const count = accessor.count;\n  const byteStride = getAccessorByteStride(gltf, accessor);\n  let byteOffset =\n    accessor.byteOffset + bufferView.byteOffset + source.byteOffset;\n  const componentType = accessor.componentType;\n  const componentTypeByteLength =\n    ComponentDatatype.getSizeInBytes(componentType);\n  const dataView = new DataView(source.buffer);\n  const components = new Array(numberOfComponents);\n  const componentReader = getComponentReader(componentType);\n\n  for (let i = 0; i < count; i++) {\n    componentReader(\n      dataView,\n      byteOffset,\n      numberOfComponents,\n      componentTypeByteLength,\n      components,\n    );\n    for (let j = 0; j < numberOfComponents; j++) {\n      const value = components[j];\n      min[j] = Math.min(min[j], value);\n      max[j] = Math.max(max[j], value);\n    }\n    byteOffset += byteStride;\n  }\n\n  return {\n    min: min,\n    max: max,\n  };\n}\n\nexport default findAccessorMinMax;\n","import ForEach from \"./ForEach.js\";\nimport Check from \"../../Core/Check.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Calls the provider handler function on each texture used by the material.\n * Mimics the behavior of functions in gltf-pipeline ForEach.\n * @param {object} material The glTF material.\n * @param {forEachTextureInMaterial~handler} handler Function that is called for each texture in the material.\n *\n * @private\n */\nfunction forEachTextureInMaterial(material, handler) {\n  Check.typeOf.object(\"material\", material);\n  Check.defined(\"handler\", handler);\n\n  // Metallic roughness\n  const pbrMetallicRoughness = material.pbrMetallicRoughness;\n  if (defined(pbrMetallicRoughness)) {\n    if (defined(pbrMetallicRoughness.baseColorTexture)) {\n      const textureInfo = pbrMetallicRoughness.baseColorTexture;\n      const value = handler(textureInfo.index, textureInfo);\n      if (defined(value)) {\n        return value;\n      }\n    }\n    if (defined(pbrMetallicRoughness.metallicRoughnessTexture)) {\n      const textureInfo = pbrMetallicRoughness.metallicRoughnessTexture;\n      const value = handler(textureInfo.index, textureInfo);\n      if (defined(value)) {\n        return value;\n      }\n    }\n  }\n\n  const { extensions } = material;\n  if (defined(extensions)) {\n    // Spec gloss extension\n    const pbrSpecularGlossiness =\n      extensions.KHR_materials_pbrSpecularGlossiness;\n    if (defined(pbrSpecularGlossiness)) {\n      if (defined(pbrSpecularGlossiness.diffuseTexture)) {\n        const textureInfo = pbrSpecularGlossiness.diffuseTexture;\n        const value = handler(textureInfo.index, textureInfo);\n        if (defined(value)) {\n          return value;\n        }\n      }\n      if (defined(pbrSpecularGlossiness.specularGlossinessTexture)) {\n        const textureInfo = pbrSpecularGlossiness.specularGlossinessTexture;\n        const value = handler(textureInfo.index, textureInfo);\n        if (defined(value)) {\n          return value;\n        }\n      }\n    }\n\n    // Specular extension\n    const specular = extensions.KHR_materials_specular;\n    if (defined(specular)) {\n      const { specularTexture, specularColorTexture } = specular;\n      if (defined(specularTexture)) {\n        const value = handler(specularTexture.index, specularTexture);\n        if (defined(value)) {\n          return value;\n        }\n      }\n      if (defined(specularColorTexture)) {\n        const value = handler(specularColorTexture.index, specularColorTexture);\n        if (defined(value)) {\n          return value;\n        }\n      }\n    }\n\n    // Materials common extension (may be present in models converted from glTF 1.0)\n    const materialsCommon = extensions.KHR_materials_common;\n    if (defined(materialsCommon) && defined(materialsCommon.values)) {\n      const { diffuse, ambient, emission, specular } = materialsCommon.values;\n      if (defined(diffuse) && defined(diffuse.index)) {\n        const value = handler(diffuse.index, diffuse);\n        if (defined(value)) {\n          return value;\n        }\n      }\n      if (defined(ambient) && defined(ambient.index)) {\n        const value = handler(ambient.index, ambient);\n        if (defined(value)) {\n          return value;\n        }\n      }\n      if (defined(emission) && defined(emission.index)) {\n        const value = handler(emission.index, emission);\n        if (defined(value)) {\n          return value;\n        }\n      }\n      if (defined(specular) && defined(specular.index)) {\n        const value = handler(specular.index, specular);\n        if (defined(value)) {\n          return value;\n        }\n      }\n    }\n  }\n\n  // KHR_techniques_webgl extension\n  const value = ForEach.materialValue(material, function (materialValue) {\n    if (defined(materialValue.index)) {\n      const value = handler(materialValue.index, materialValue);\n      if (defined(value)) {\n        return value;\n      }\n    }\n  });\n  if (defined(value)) {\n    return value;\n  }\n\n  // Top level textures\n  if (defined(material.emissiveTexture)) {\n    const textureInfo = material.emissiveTexture;\n    const value = handler(textureInfo.index, textureInfo);\n    if (defined(value)) {\n      return value;\n    }\n  }\n\n  if (defined(material.normalTexture)) {\n    const textureInfo = material.normalTexture;\n    const value = handler(textureInfo.index, textureInfo);\n    if (defined(value)) {\n      return value;\n    }\n  }\n\n  if (defined(material.occlusionTexture)) {\n    const textureInfo = material.occlusionTexture;\n    const value = handler(textureInfo.index, textureInfo);\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\n\n/**\n * Function that is called for each texture in the material. If this function returns a value the for each stops and returns that value.\n * @callback forEachTextureInMaterial~handler\n * @param {number} The texture index.\n * @param {object} The texture info object.\n *\n * @private\n */\n\nexport default forEachTextureInMaterial;\n","import numberOfComponentsForType from \"./numberOfComponentsForType.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Returns the byte stride of the provided accessor.\n * If the byteStride is 0, it is calculated based on type and componentType\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {object} accessor The accessor.\n * @returns {number} The byte stride of the accessor.\n *\n * @private\n */\nfunction getAccessorByteStride(gltf, accessor) {\n  const bufferViewId = accessor.bufferView;\n  if (defined(bufferViewId)) {\n    const bufferView = gltf.bufferViews[bufferViewId];\n    if (defined(bufferView.byteStride) && bufferView.byteStride > 0) {\n      return bufferView.byteStride;\n    }\n  }\n  return (\n    ComponentDatatype.getSizeInBytes(accessor.componentType) *\n    numberOfComponentsForType(accessor.type)\n  );\n}\n\nexport default getAccessorByteStride;\n","import ComponentDatatype from \"../../Core/ComponentDatatype.js\";\n\n/**\n * Returns a function to read and convert data from a DataView into an array.\n *\n * @param {number} componentType Type to convert the data to.\n * @returns {ComponentReader} Function that reads and converts data.\n *\n * @private\n */\nfunction getComponentReader(componentType) {\n  switch (componentType) {\n    case ComponentDatatype.BYTE:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getInt8(\n            byteOffset + i * componentTypeByteLength,\n          );\n        }\n      };\n    case ComponentDatatype.UNSIGNED_BYTE:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getUint8(\n            byteOffset + i * componentTypeByteLength,\n          );\n        }\n      };\n    case ComponentDatatype.SHORT:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getInt16(\n            byteOffset + i * componentTypeByteLength,\n            true,\n          );\n        }\n      };\n    case ComponentDatatype.UNSIGNED_SHORT:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getUint16(\n            byteOffset + i * componentTypeByteLength,\n            true,\n          );\n        }\n      };\n    case ComponentDatatype.INT:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getInt32(\n            byteOffset + i * componentTypeByteLength,\n            true,\n          );\n        }\n      };\n    case ComponentDatatype.UNSIGNED_INT:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getUint32(\n            byteOffset + i * componentTypeByteLength,\n            true,\n          );\n        }\n      };\n    case ComponentDatatype.FLOAT:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getFloat32(\n            byteOffset + i * componentTypeByteLength,\n            true,\n          );\n        }\n      };\n    case ComponentDatatype.DOUBLE:\n      return function (\n        dataView,\n        byteOffset,\n        numberOfComponents,\n        componentTypeByteLength,\n        result,\n      ) {\n        for (let i = 0; i < numberOfComponents; ++i) {\n          result[i] = dataView.getFloat64(\n            byteOffset + i * componentTypeByteLength,\n            true,\n          );\n        }\n      };\n  }\n}\n\n/**\n * A callback function that logs messages.\n * @callback ComponentReader\n *\n * @param {DataView} dataView The data view to read from.\n * @param {number} byteOffset The byte offset applied when reading from the data view.\n * @param {number} numberOfComponents The number of components to read.\n * @param {number} componentTypeByteLength The byte length of each component.\n * @param {number} result An array storing the components that are read.\n *\n * @private\n */\n\nexport default getComponentReader;\n","import addExtensionsUsed from \"./addExtensionsUsed.js\";\nimport ForEach from \"./ForEach.js\";\nimport defined from \"../../Core/defined.js\";\nimport WebGLConstants from \"../../Core/WebGLConstants.js\";\n\nconst defaultBlendEquation = [WebGLConstants.FUNC_ADD, WebGLConstants.FUNC_ADD];\n\nconst defaultBlendFactors = [\n  WebGLConstants.ONE,\n  WebGLConstants.ZERO,\n  WebGLConstants.ONE,\n  WebGLConstants.ZERO,\n];\n\nfunction isStateEnabled(renderStates, state) {\n  const enabled = renderStates.enable;\n  if (!defined(enabled)) {\n    return false;\n  }\n\n  return enabled.indexOf(state) > -1;\n}\n\nconst supportedBlendFactors = [\n  WebGLConstants.ZERO,\n  WebGLConstants.ONE,\n  WebGLConstants.SRC_COLOR,\n  WebGLConstants.ONE_MINUS_SRC_COLOR,\n  WebGLConstants.SRC_ALPHA,\n  WebGLConstants.ONE_MINUS_SRC_ALPHA,\n  WebGLConstants.DST_ALPHA,\n  WebGLConstants.ONE_MINUS_DST_ALPHA,\n  WebGLConstants.DST_COLOR,\n  WebGLConstants.ONE_MINUS_DST_COLOR,\n];\n\n// If any of the blend factors are not supported, return the default\nfunction getSupportedBlendFactors(value, defaultValue) {\n  if (!defined(value)) {\n    return defaultValue;\n  }\n\n  for (let i = 0; i < 4; i++) {\n    if (supportedBlendFactors.indexOf(value[i]) === -1) {\n      return defaultValue;\n    }\n  }\n\n  return value;\n}\n\n/**\n * Move glTF 1.0 technique render states to glTF 2.0 materials properties and KHR_blend extension.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @returns {object} The updated glTF asset.\n *\n * @private\n */\nfunction moveTechniqueRenderStates(gltf) {\n  const blendingForTechnique = {};\n  const materialPropertiesForTechnique = {};\n  const techniquesLegacy = gltf.techniques;\n  if (!defined(techniquesLegacy)) {\n    return gltf;\n  }\n\n  ForEach.technique(gltf, function (techniqueLegacy, techniqueIndex) {\n    const renderStates = techniqueLegacy.states;\n    if (defined(renderStates)) {\n      const materialProperties = (materialPropertiesForTechnique[\n        techniqueIndex\n      ] = {});\n\n      // If BLEND is enabled, the material should have alpha mode BLEND\n      if (isStateEnabled(renderStates, WebGLConstants.BLEND)) {\n        materialProperties.alphaMode = \"BLEND\";\n\n        const blendFunctions = renderStates.functions;\n        if (\n          defined(blendFunctions) &&\n          (defined(blendFunctions.blendEquationSeparate) ||\n            defined(blendFunctions.blendFuncSeparate))\n        ) {\n          blendingForTechnique[techniqueIndex] = {\n            blendEquation:\n              blendFunctions.blendEquationSeparate ?? defaultBlendEquation,\n            blendFactors: getSupportedBlendFactors(\n              blendFunctions.blendFuncSeparate,\n              defaultBlendFactors,\n            ),\n          };\n        }\n      }\n\n      // If CULL_FACE is not enabled, the material should be doubleSided\n      if (!isStateEnabled(renderStates, WebGLConstants.CULL_FACE)) {\n        materialProperties.doubleSided = true;\n      }\n\n      delete techniqueLegacy.states;\n    }\n  });\n\n  if (Object.keys(blendingForTechnique).length > 0) {\n    if (!defined(gltf.extensions)) {\n      gltf.extensions = {};\n    }\n\n    addExtensionsUsed(gltf, \"KHR_blend\");\n  }\n\n  ForEach.material(gltf, function (material) {\n    if (defined(material.technique)) {\n      const materialProperties =\n        materialPropertiesForTechnique[material.technique];\n      ForEach.objectLegacy(materialProperties, function (value, property) {\n        material[property] = value;\n      });\n\n      const blending = blendingForTechnique[material.technique];\n      if (defined(blending)) {\n        if (!defined(material.extensions)) {\n          material.extensions = {};\n        }\n\n        material.extensions.KHR_blend = blending;\n      }\n    }\n  });\n\n  return gltf;\n}\n\nexport default moveTechniqueRenderStates;\n","import addExtensionsUsed from \"./addExtensionsUsed.js\";\nimport addExtensionsRequired from \"./addExtensionsRequired.js\";\nimport addToArray from \"./addToArray.js\";\nimport ForEach from \"./ForEach.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Move glTF 1.0 material techniques to glTF 2.0 KHR_techniques_webgl extension.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @returns {object} The updated glTF asset.\n *\n * @private\n */\nfunction moveTechniquesToExtension(gltf) {\n  const techniquesLegacy = gltf.techniques;\n  const mappedUniforms = {};\n  const updatedTechniqueIndices = {};\n  const seenPrograms = {};\n  if (defined(techniquesLegacy)) {\n    const extension = {\n      programs: [],\n      shaders: [],\n      techniques: [],\n    };\n\n    // Some 1.1 models have a glExtensionsUsed property that can be transferred to program.glExtensions\n    const glExtensions = gltf.glExtensionsUsed;\n    delete gltf.glExtensionsUsed;\n\n    ForEach.technique(gltf, function (techniqueLegacy, techniqueId) {\n      const technique = {\n        name: techniqueLegacy.name,\n        program: undefined,\n        attributes: {},\n        uniforms: {},\n      };\n\n      let parameterLegacy;\n      ForEach.techniqueAttribute(\n        techniqueLegacy,\n        function (parameterName, attributeName) {\n          parameterLegacy = techniqueLegacy.parameters[parameterName];\n          technique.attributes[attributeName] = {\n            semantic: parameterLegacy.semantic,\n          };\n        },\n      );\n\n      ForEach.techniqueUniform(\n        techniqueLegacy,\n        function (parameterName, uniformName) {\n          parameterLegacy = techniqueLegacy.parameters[parameterName];\n          technique.uniforms[uniformName] = {\n            count: parameterLegacy.count,\n            node: parameterLegacy.node,\n            type: parameterLegacy.type,\n            semantic: parameterLegacy.semantic,\n            value: parameterLegacy.value,\n          };\n\n          // Store the name of the uniform to update material values.\n          if (!defined(mappedUniforms[techniqueId])) {\n            mappedUniforms[techniqueId] = {};\n          }\n          mappedUniforms[techniqueId][parameterName] = uniformName;\n        },\n      );\n\n      if (!defined(seenPrograms[techniqueLegacy.program])) {\n        const programLegacy = gltf.programs[techniqueLegacy.program];\n\n        const program = {\n          name: programLegacy.name,\n          fragmentShader: undefined,\n          vertexShader: undefined,\n          glExtensions: glExtensions,\n        };\n\n        const fs = gltf.shaders[programLegacy.fragmentShader];\n        program.fragmentShader = addToArray(extension.shaders, fs, true);\n\n        const vs = gltf.shaders[programLegacy.vertexShader];\n        program.vertexShader = addToArray(extension.shaders, vs, true);\n\n        technique.program = addToArray(extension.programs, program);\n        seenPrograms[techniqueLegacy.program] = technique.program;\n      } else {\n        technique.program = seenPrograms[techniqueLegacy.program];\n      }\n\n      // Store the index of the new technique to reference instead.\n      updatedTechniqueIndices[techniqueId] = addToArray(\n        extension.techniques,\n        technique,\n      );\n    });\n\n    if (extension.techniques.length > 0) {\n      if (!defined(gltf.extensions)) {\n        gltf.extensions = {};\n      }\n\n      gltf.extensions.KHR_techniques_webgl = extension;\n      addExtensionsUsed(gltf, \"KHR_techniques_webgl\");\n      addExtensionsRequired(gltf, \"KHR_techniques_webgl\");\n    }\n  }\n\n  ForEach.material(gltf, function (material) {\n    if (defined(material.technique)) {\n      const materialExtension = {\n        technique: updatedTechniqueIndices[material.technique],\n      };\n\n      ForEach.objectLegacy(material.values, function (value, parameterName) {\n        if (!defined(materialExtension.values)) {\n          materialExtension.values = {};\n        }\n\n        const uniformName = mappedUniforms[material.technique][parameterName];\n        if (defined(uniformName)) {\n          materialExtension.values[uniformName] = value;\n        }\n      });\n\n      if (!defined(material.extensions)) {\n        material.extensions = {};\n      }\n\n      material.extensions.KHR_techniques_webgl = materialExtension;\n    }\n\n    delete material.technique;\n    delete material.values;\n  });\n\n  delete gltf.techniques;\n  delete gltf.programs;\n  delete gltf.shaders;\n\n  return gltf;\n}\n\nexport default moveTechniquesToExtension;\n","\n\n/**\n * Utility function for retrieving the number of components in a given type.\n *\n * @param {string} type glTF type\n * @returns {number} The number of components in that type.\n *\n * @private\n */\nfunction numberOfComponentsForType(type) {\n  switch (type) {\n    case \"SCALAR\":\n      return 1;\n    case \"VEC2\":\n      return 2;\n    case \"VEC3\":\n      return 3;\n    case \"VEC4\":\n    case \"MAT2\":\n      return 4;\n    case \"MAT3\":\n      return 9;\n    case \"MAT4\":\n      return 16;\n  }\n}\n\nexport default numberOfComponentsForType;\n","import addPipelineExtras from \"./addPipelineExtras.js\";\nimport removeExtensionsUsed from \"./removeExtensionsUsed.js\";\nimport defined from \"../../Core/defined.js\";\nimport getMagic from \"../../Core/getMagic.js\";\nimport getStringFromTypedArray from \"../../Core/getStringFromTypedArray.js\";\nimport RuntimeError from \"../../Core/RuntimeError.js\";\n\nconst sizeOfUint32 = 4;\n\n/**\n * Convert a binary glTF to glTF.\n *\n * The returned glTF has pipeline extras included. The embedded binary data is stored in gltf.buffers[0].extras._pipeline.source.\n *\n * @param {Buffer} glb The glb data to parse.\n * @returns {object} A javascript object containing a glTF asset with pipeline extras included.\n *\n * @private\n */\nfunction parseGlb(glb) {\n  // Check that the magic string is present\n  const magic = getMagic(glb);\n  if (magic !== \"glTF\") {\n    throw new RuntimeError(\"File is not valid binary glTF\");\n  }\n\n  const header = readHeader(glb, 0, 5);\n  const version = header[1];\n  if (version !== 1 && version !== 2) {\n    throw new RuntimeError(\"Binary glTF version is not 1 or 2\");\n  }\n\n  if (version === 1) {\n    return parseGlbVersion1(glb, header);\n  }\n\n  return parseGlbVersion2(glb, header);\n}\n\nfunction readHeader(glb, byteOffset, count) {\n  const dataView = new DataView(glb.buffer);\n  const header = new Array(count);\n  for (let i = 0; i < count; ++i) {\n    header[i] = dataView.getUint32(\n      glb.byteOffset + byteOffset + i * sizeOfUint32,\n      true,\n    );\n  }\n  return header;\n}\n\nfunction parseGlbVersion1(glb, header) {\n  const length = header[2];\n  const contentLength = header[3];\n  const contentFormat = header[4];\n\n  // Check that the content format is 0, indicating that it is JSON\n  if (contentFormat !== 0) {\n    throw new RuntimeError(\"Binary glTF scene format is not JSON\");\n  }\n\n  const jsonStart = 20;\n  const binaryStart = jsonStart + contentLength;\n\n  const contentString = getStringFromTypedArray(glb, jsonStart, contentLength);\n  const gltf = JSON.parse(contentString);\n  addPipelineExtras(gltf);\n\n  const binaryBuffer = glb.subarray(binaryStart, length);\n\n  const buffers = gltf.buffers;\n  if (defined(buffers) && Object.keys(buffers).length > 0) {\n    // In some older models, the binary glTF buffer is named KHR_binary_glTF\n    const binaryGltfBuffer = buffers.binary_glTF ?? buffers.KHR_binary_glTF;\n    if (defined(binaryGltfBuffer)) {\n      binaryGltfBuffer.extras._pipeline.source = binaryBuffer;\n      delete binaryGltfBuffer.uri;\n    }\n  }\n  // Remove the KHR_binary_glTF extension\n  removeExtensionsUsed(gltf, \"KHR_binary_glTF\");\n  return gltf;\n}\n\nfunction parseGlbVersion2(glb, header) {\n  const length = header[2];\n  let byteOffset = 12;\n  let gltf;\n  let binaryBuffer;\n  while (byteOffset < length) {\n    const chunkHeader = readHeader(glb, byteOffset, 2);\n    const chunkLength = chunkHeader[0];\n    const chunkType = chunkHeader[1];\n    byteOffset += 8;\n    const chunkBuffer = glb.subarray(byteOffset, byteOffset + chunkLength);\n    byteOffset += chunkLength;\n    // Load JSON chunk\n    if (chunkType === 0x4e4f534a) {\n      const jsonString = getStringFromTypedArray(chunkBuffer);\n      gltf = JSON.parse(jsonString);\n      addPipelineExtras(gltf);\n    }\n    // Load Binary chunk\n    else if (chunkType === 0x004e4942) {\n      binaryBuffer = chunkBuffer;\n    }\n  }\n  if (defined(gltf) && defined(binaryBuffer)) {\n    const buffers = gltf.buffers;\n    if (defined(buffers) && buffers.length > 0) {\n      const buffer = buffers[0];\n      buffer.extras._pipeline.source = binaryBuffer;\n    }\n  }\n  return gltf;\n}\n\nexport default parseGlb;\n","import getAccessorByteStride from \"./getAccessorByteStride.js\";\nimport getComponentReader from \"./getComponentReader.js\";\nimport numberOfComponentsForType from \"./numberOfComponentsForType.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Returns the accessor data in a contiguous array.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {object} accessor The accessor.\n * @returns {Array} The accessor values in a contiguous array.\n *\n * @private\n */\nfunction readAccessorPacked(gltf, accessor) {\n  const byteStride = getAccessorByteStride(gltf, accessor);\n  const componentTypeByteLength = ComponentDatatype.getSizeInBytes(\n    accessor.componentType,\n  );\n  const numberOfComponents = numberOfComponentsForType(accessor.type);\n  const count = accessor.count;\n  const values = new Array(numberOfComponents * count);\n\n  if (!defined(accessor.bufferView)) {\n    return values.fill(0);\n  }\n\n  const bufferView = gltf.bufferViews[accessor.bufferView];\n  const source = gltf.buffers[bufferView.buffer].extras._pipeline.source;\n  let byteOffset =\n    accessor.byteOffset + bufferView.byteOffset + source.byteOffset;\n\n  const dataView = new DataView(source.buffer);\n  const components = new Array(numberOfComponents);\n  const componentReader = getComponentReader(accessor.componentType);\n\n  for (let i = 0; i < count; ++i) {\n    componentReader(\n      dataView,\n      byteOffset,\n      numberOfComponents,\n      componentTypeByteLength,\n      components,\n    );\n    for (let j = 0; j < numberOfComponents; ++j) {\n      values[i * numberOfComponents + j] = components[j];\n    }\n    byteOffset += byteStride;\n  }\n  return values;\n}\n\nexport default readAccessorPacked;\n","import ForEach from \"./ForEach.js\";\nimport removeExtensionsUsed from \"./removeExtensionsUsed.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Removes an extension from gltf.extensions, gltf.extensionsUsed, gltf.extensionsRequired, and any other objects in the glTF if it is present.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {string} extension The extension to remove.\n *\n * @returns {*} The extension data removed from gltf.extensions.\n */\nfunction removeExtension(gltf, extension) {\n  removeExtensionsUsed(gltf, extension); // Also removes from extensionsRequired\n\n  if (extension === \"CESIUM_RTC\") {\n    removeCesiumRTC(gltf);\n  }\n\n  return removeExtensionAndTraverse(gltf, extension);\n}\n\nfunction removeCesiumRTC(gltf) {\n  ForEach.technique(gltf, function (technique) {\n    ForEach.techniqueUniform(technique, function (uniform) {\n      if (uniform.semantic === \"CESIUM_RTC_MODELVIEW\") {\n        uniform.semantic = \"MODELVIEW\";\n      }\n    });\n  });\n}\n\nfunction removeExtensionAndTraverse(object, extension) {\n  if (Array.isArray(object)) {\n    const length = object.length;\n    for (let i = 0; i < length; ++i) {\n      removeExtensionAndTraverse(object[i], extension);\n    }\n  } else if (\n    object !== null &&\n    typeof object === \"object\" &&\n    object.constructor === Object\n  ) {\n    const extensions = object.extensions;\n    let extensionData;\n    if (defined(extensions)) {\n      extensionData = extensions[extension];\n      if (defined(extensionData)) {\n        delete extensions[extension];\n        if (Object.keys(extensions).length === 0) {\n          delete object.extensions;\n        }\n      }\n    }\n    for (const key in object) {\n      if (Object.prototype.hasOwnProperty.call(object, key)) {\n        removeExtensionAndTraverse(object[key], extension);\n      }\n    }\n    return extensionData;\n  }\n}\n\nexport default removeExtension;\n","import defined from \"../../Core/defined.js\";\n\n/**\n * Removes an extension from gltf.extensionsRequired if it is present.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {string} extension The extension to remove.\n *\n * @private\n */\nfunction removeExtensionsRequired(gltf, extension) {\n  const extensionsRequired = gltf.extensionsRequired;\n  if (defined(extensionsRequired)) {\n    const index = extensionsRequired.indexOf(extension);\n    if (index >= 0) {\n      extensionsRequired.splice(index, 1);\n    }\n    if (extensionsRequired.length === 0) {\n      delete gltf.extensionsRequired;\n    }\n  }\n}\n\nexport default removeExtensionsRequired;\n","import removeExtensionsRequired from \"./removeExtensionsRequired.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Removes an extension from gltf.extensionsUsed and gltf.extensionsRequired if it is present.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {string} extension The extension to remove.\n *\n * @private\n */\nfunction removeExtensionsUsed(gltf, extension) {\n  const extensionsUsed = gltf.extensionsUsed;\n  if (defined(extensionsUsed)) {\n    const index = extensionsUsed.indexOf(extension);\n    if (index >= 0) {\n      extensionsUsed.splice(index, 1);\n    }\n    removeExtensionsRequired(gltf, extension);\n    if (extensionsUsed.length === 0) {\n      delete gltf.extensionsUsed;\n    }\n  }\n}\n\nexport default removeExtensionsUsed;\n","import ForEach from \"./ForEach.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * Iterate through the objects within the glTF and delete their pipeline extras object.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @returns {object} glTF with no pipeline extras.\n *\n * @private\n */\nfunction removePipelineExtras(gltf) {\n  ForEach.shader(gltf, function (shader) {\n    removeExtras(shader);\n  });\n  ForEach.buffer(gltf, function (buffer) {\n    removeExtras(buffer);\n  });\n  ForEach.image(gltf, function (image) {\n    removeExtras(image);\n  });\n\n  removeExtras(gltf);\n\n  return gltf;\n}\n\nfunction removeExtras(object) {\n  if (!defined(object.extras)) {\n    return;\n  }\n\n  if (defined(object.extras._pipeline)) {\n    delete object.extras._pipeline;\n  }\n\n  if (Object.keys(object.extras).length === 0) {\n    delete object.extras;\n  }\n}\n\nexport default removePipelineExtras;\n","import ForEach from \"./ForEach.js\";\nimport forEachTextureInMaterial from \"./forEachTextureInMaterial.js\";\nimport usesExtension from \"./usesExtension.js\";\nimport defined from \"../../Core/defined.js\";\n\nconst allElementTypes = [\n  \"mesh\",\n  \"node\",\n  \"material\",\n  \"accessor\",\n  \"bufferView\",\n  \"buffer\",\n  \"texture\",\n  \"sampler\",\n  \"image\",\n];\n\n/**\n * Removes unused elements from gltf.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {string[]} [elementTypes=['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer']] Element types to be removed. Needs to be a subset of ['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer'], other items will be ignored.\n *\n * @private\n */\nfunction removeUnusedElements(gltf, elementTypes) {\n  elementTypes = elementTypes ?? allElementTypes;\n  allElementTypes.forEach(function (type) {\n    if (elementTypes.indexOf(type) > -1) {\n      removeUnusedElementsByType(gltf, type);\n    }\n  });\n  return gltf;\n}\n\nconst TypeToGltfElementName = {\n  accessor: \"accessors\",\n  buffer: \"buffers\",\n  bufferView: \"bufferViews\",\n  image: \"images\",\n  node: \"nodes\",\n  material: \"materials\",\n  mesh: \"meshes\",\n  sampler: \"samplers\",\n  texture: \"textures\",\n};\n\nfunction removeUnusedElementsByType(gltf, type) {\n  const name = TypeToGltfElementName[type];\n  const arrayOfObjects = gltf[name];\n\n  if (defined(arrayOfObjects)) {\n    let removed = 0;\n    const usedIds = getListOfElementsIdsInUse[type](gltf);\n    const length = arrayOfObjects.length;\n\n    for (let i = 0; i < length; ++i) {\n      if (!usedIds[i]) {\n        Remove[type](gltf, i - removed);\n        removed++;\n      }\n    }\n  }\n}\n\n/**\n * Contains functions for removing elements from a glTF hierarchy.\n * Since top-level glTF elements are arrays, when something is removed, referring\n * indices need to be updated.\n * @constructor\n *\n * @private\n */\nfunction Remove() {}\n\nRemove.accessor = function (gltf, accessorId) {\n  const accessors = gltf.accessors;\n\n  accessors.splice(accessorId, 1);\n\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      // Update accessor ids for the primitives.\n      ForEach.meshPrimitiveAttribute(\n        primitive,\n        function (attributeAccessorId, semantic) {\n          if (attributeAccessorId > accessorId) {\n            primitive.attributes[semantic]--;\n          }\n        },\n      );\n\n      // Update accessor ids for the targets.\n      ForEach.meshPrimitiveTarget(primitive, function (target) {\n        ForEach.meshPrimitiveTargetAttribute(\n          target,\n          function (attributeAccessorId, semantic) {\n            if (attributeAccessorId > accessorId) {\n              target[semantic]--;\n            }\n          },\n        );\n      });\n      const indices = primitive.indices;\n      if (defined(indices) && indices > accessorId) {\n        primitive.indices--;\n      }\n\n      const ext = primitive.extensions;\n      if (\n        defined(ext) &&\n        defined(ext.CESIUM_primitive_outline) &&\n        ext.CESIUM_primitive_outline.indices > accessorId\n      ) {\n        --ext.CESIUM_primitive_outline.indices;\n      }\n    });\n  });\n\n  ForEach.skin(gltf, function (skin) {\n    if (\n      defined(skin.inverseBindMatrices) &&\n      skin.inverseBindMatrices > accessorId\n    ) {\n      skin.inverseBindMatrices--;\n    }\n  });\n\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationSampler(animation, function (sampler) {\n      if (defined(sampler.input) && sampler.input > accessorId) {\n        sampler.input--;\n      }\n      if (defined(sampler.output) && sampler.output > accessorId) {\n        sampler.output--;\n      }\n    });\n  });\n};\n\nRemove.buffer = function (gltf, bufferId) {\n  const buffers = gltf.buffers;\n\n  buffers.splice(bufferId, 1);\n\n  ForEach.bufferView(gltf, function (bufferView) {\n    if (defined(bufferView.buffer) && bufferView.buffer > bufferId) {\n      bufferView.buffer--;\n    }\n\n    if (\n      defined(bufferView.extensions) &&\n      defined(bufferView.extensions.EXT_meshopt_compression)\n    ) {\n      bufferView.extensions.EXT_meshopt_compression.buffer--;\n    }\n  });\n};\n\nRemove.bufferView = function (gltf, bufferViewId) {\n  const bufferViews = gltf.bufferViews;\n\n  bufferViews.splice(bufferViewId, 1);\n\n  ForEach.accessor(gltf, function (accessor) {\n    if (defined(accessor.bufferView) && accessor.bufferView > bufferViewId) {\n      accessor.bufferView--;\n    }\n  });\n\n  ForEach.shader(gltf, function (shader) {\n    if (defined(shader.bufferView) && shader.bufferView > bufferViewId) {\n      shader.bufferView--;\n    }\n  });\n\n  ForEach.image(gltf, function (image) {\n    if (defined(image.bufferView) && image.bufferView > bufferViewId) {\n      image.bufferView--;\n    }\n  });\n\n  if (usesExtension(gltf, \"KHR_draco_mesh_compression\")) {\n    ForEach.mesh(gltf, function (mesh) {\n      ForEach.meshPrimitive(mesh, function (primitive) {\n        if (\n          defined(primitive.extensions) &&\n          defined(primitive.extensions.KHR_draco_mesh_compression)\n        ) {\n          if (\n            primitive.extensions.KHR_draco_mesh_compression.bufferView >\n            bufferViewId\n          ) {\n            primitive.extensions.KHR_draco_mesh_compression.bufferView--;\n          }\n        }\n      });\n    });\n  }\n\n  if (usesExtension(gltf, \"EXT_feature_metadata\")) {\n    const extension = gltf.extensions.EXT_feature_metadata;\n    const featureTables = extension.featureTables;\n    for (const featureTableId in featureTables) {\n      if (featureTables.hasOwnProperty(featureTableId)) {\n        const featureTable = featureTables[featureTableId];\n        const properties = featureTable.properties;\n        if (defined(properties)) {\n          for (const propertyId in properties) {\n            if (properties.hasOwnProperty(propertyId)) {\n              const property = properties[propertyId];\n              if (\n                defined(property.bufferView) &&\n                property.bufferView > bufferViewId\n              ) {\n                property.bufferView--;\n              }\n              if (\n                defined(property.arrayOffsetBufferView) &&\n                property.arrayOffsetBufferView > bufferViewId\n              ) {\n                property.arrayOffsetBufferView--;\n              }\n              if (\n                defined(property.stringOffsetBufferView) &&\n                property.stringOffsetBufferView > bufferViewId\n              ) {\n                property.stringOffsetBufferView--;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  if (usesExtension(gltf, \"EXT_structural_metadata\")) {\n    const extension = gltf.extensions.EXT_structural_metadata;\n    const propertyTables = extension.propertyTables;\n    if (defined(propertyTables)) {\n      const propertyTablesLength = propertyTables.length;\n      for (let i = 0; i < propertyTablesLength; ++i) {\n        const propertyTable = propertyTables[i];\n        const properties = propertyTable.properties;\n        for (const propertyId in properties) {\n          if (properties.hasOwnProperty(propertyId)) {\n            const property = properties[propertyId];\n            if (defined(property.values) && property.values > bufferViewId) {\n              property.values--;\n            }\n            if (\n              defined(property.arrayOffsets) &&\n              property.arrayOffsets > bufferViewId\n            ) {\n              property.arrayOffsets--;\n            }\n            if (\n              defined(property.stringOffsets) &&\n              property.stringOffsets > bufferViewId\n            ) {\n              property.stringOffsets--;\n            }\n          }\n        }\n      }\n    }\n  }\n};\n\nRemove.image = function (gltf, imageId) {\n  const images = gltf.images;\n  images.splice(imageId, 1);\n\n  ForEach.texture(gltf, function (texture) {\n    if (defined(texture.source)) {\n      if (texture.source > imageId) {\n        --texture.source;\n      }\n    }\n    const ext = texture.extensions;\n    if (\n      defined(ext) &&\n      defined(ext.EXT_texture_webp) &&\n      ext.EXT_texture_webp.source > imageId\n    ) {\n      --texture.extensions.EXT_texture_webp.source;\n    } else if (\n      defined(ext) &&\n      defined(ext.KHR_texture_basisu) &&\n      ext.KHR_texture_basisu.source > imageId\n    ) {\n      --texture.extensions.KHR_texture_basisu.source;\n    }\n  });\n};\n\nRemove.mesh = function (gltf, meshId) {\n  const meshes = gltf.meshes;\n  meshes.splice(meshId, 1);\n\n  ForEach.node(gltf, function (node) {\n    if (defined(node.mesh)) {\n      if (node.mesh > meshId) {\n        node.mesh--;\n      } else if (node.mesh === meshId) {\n        // Remove reference to deleted mesh\n        delete node.mesh;\n      }\n    }\n  });\n};\n\nRemove.node = function (gltf, nodeId) {\n  const nodes = gltf.nodes;\n  nodes.splice(nodeId, 1);\n\n  // Shift all node references\n  ForEach.skin(gltf, function (skin) {\n    if (defined(skin.skeleton) && skin.skeleton > nodeId) {\n      skin.skeleton--;\n    }\n\n    skin.joints = skin.joints.map(function (x) {\n      return x > nodeId ? x - 1 : x;\n    });\n  });\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationChannel(animation, function (channel) {\n      if (\n        defined(channel.target) &&\n        defined(channel.target.node) &&\n        channel.target.node > nodeId\n      ) {\n        channel.target.node--;\n      }\n    });\n  });\n  ForEach.technique(gltf, function (technique) {\n    ForEach.techniqueUniform(technique, function (uniform) {\n      if (defined(uniform.node) && uniform.node > nodeId) {\n        uniform.node--;\n      }\n    });\n  });\n  ForEach.node(gltf, function (node) {\n    if (!defined(node.children)) {\n      return;\n    }\n\n    node.children = node.children\n      .filter(function (x) {\n        return x !== nodeId; // Remove\n      })\n      .map(function (x) {\n        return x > nodeId ? x - 1 : x; // Shift indices\n      });\n  });\n  ForEach.scene(gltf, function (scene) {\n    scene.nodes = scene.nodes\n      .filter(function (x) {\n        return x !== nodeId; // Remove\n      })\n      .map(function (x) {\n        return x > nodeId ? x - 1 : x; // Shift indices\n      });\n  });\n};\n\nRemove.material = function (gltf, materialId) {\n  const materials = gltf.materials;\n  materials.splice(materialId, 1);\n\n  // Shift other material ids\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      if (defined(primitive.material) && primitive.material > materialId) {\n        primitive.material--;\n      }\n    });\n  });\n};\n\nRemove.sampler = function (gltf, samplerId) {\n  const samplers = gltf.samplers;\n  samplers.splice(samplerId, 1);\n\n  ForEach.texture(gltf, function (texture) {\n    if (defined(texture.sampler)) {\n      if (texture.sampler > samplerId) {\n        --texture.sampler;\n      }\n    }\n  });\n};\n\nRemove.texture = function (gltf, textureId) {\n  const textures = gltf.textures;\n  textures.splice(textureId, 1);\n\n  ForEach.material(gltf, function (material) {\n    forEachTextureInMaterial(material, function (textureIndex, textureInfo) {\n      if (textureInfo.index > textureId) {\n        --textureInfo.index;\n      }\n    });\n  });\n\n  if (usesExtension(gltf, \"EXT_feature_metadata\")) {\n    ForEach.mesh(gltf, function (mesh) {\n      ForEach.meshPrimitive(mesh, function (primitive) {\n        const extensions = primitive.extensions;\n        if (defined(extensions) && defined(extensions.EXT_feature_metadata)) {\n          const extension = extensions.EXT_feature_metadata;\n          const featureIdTextures = extension.featureIdTextures;\n          if (defined(featureIdTextures)) {\n            const featureIdTexturesLength = featureIdTextures.length;\n            for (let i = 0; i < featureIdTexturesLength; ++i) {\n              const featureIdTexture = featureIdTextures[i];\n              const textureInfo = featureIdTexture.featureIds.texture;\n              if (textureInfo.index > textureId) {\n                --textureInfo.index;\n              }\n            }\n          }\n        }\n      });\n    });\n\n    const extension = gltf.extensions.EXT_feature_metadata;\n    const featureTextures = extension.featureTextures;\n    for (const featureTextureId in featureTextures) {\n      if (featureTextures.hasOwnProperty(featureTextureId)) {\n        const featureTexture = featureTextures[featureTextureId];\n        const properties = featureTexture.properties;\n        if (defined(properties)) {\n          for (const propertyId in properties) {\n            if (properties.hasOwnProperty(propertyId)) {\n              const property = properties[propertyId];\n              const textureInfo = property.texture;\n              if (textureInfo.index > textureId) {\n                --textureInfo.index;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  if (usesExtension(gltf, \"EXT_mesh_features\")) {\n    ForEach.mesh(gltf, function (mesh) {\n      ForEach.meshPrimitive(mesh, function (primitive) {\n        const extensions = primitive.extensions;\n        if (defined(extensions) && defined(extensions.EXT_mesh_features)) {\n          const extension = extensions.EXT_mesh_features;\n          const featureIds = extension.featureIds;\n          if (defined(featureIds)) {\n            const featureIdsLength = featureIds.length;\n            for (let i = 0; i < featureIdsLength; ++i) {\n              const featureId = featureIds[i];\n              if (defined(featureId.texture)) {\n                if (featureId.texture.index > textureId) {\n                  --featureId.texture.index;\n                }\n              }\n            }\n          }\n        }\n      });\n    });\n  }\n\n  if (usesExtension(gltf, \"EXT_structural_metadata\")) {\n    const extension = gltf.extensions.EXT_structural_metadata;\n    const propertyTextures = extension.propertyTextures;\n    if (defined(propertyTextures)) {\n      const propertyTexturesLength = propertyTextures.length;\n      for (let i = 0; i < propertyTexturesLength; ++i) {\n        const propertyTexture = propertyTextures[i];\n        const properties = propertyTexture.properties;\n        for (const propertyId in properties) {\n          if (properties.hasOwnProperty(propertyId)) {\n            const property = properties[propertyId];\n            if (property.index > textureId) {\n              --property.index;\n            }\n          }\n        }\n      }\n    }\n  }\n};\n\n/**\n * Contains functions for getting a list of element ids in use by the glTF asset.\n * @constructor\n *\n * @private\n */\nfunction getListOfElementsIdsInUse() {}\n\ngetListOfElementsIdsInUse.accessor = function (gltf) {\n  // Calculate accessor's that are currently in use.\n  const usedAccessorIds = {};\n\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      ForEach.meshPrimitiveAttribute(primitive, function (accessorId) {\n        usedAccessorIds[accessorId] = true;\n      });\n      ForEach.meshPrimitiveTarget(primitive, function (target) {\n        ForEach.meshPrimitiveTargetAttribute(target, function (accessorId) {\n          usedAccessorIds[accessorId] = true;\n        });\n      });\n      const indices = primitive.indices;\n      if (defined(indices)) {\n        usedAccessorIds[indices] = true;\n      }\n    });\n  });\n\n  ForEach.skin(gltf, function (skin) {\n    if (defined(skin.inverseBindMatrices)) {\n      usedAccessorIds[skin.inverseBindMatrices] = true;\n    }\n  });\n\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationSampler(animation, function (sampler) {\n      if (defined(sampler.input)) {\n        usedAccessorIds[sampler.input] = true;\n      }\n      if (defined(sampler.output)) {\n        usedAccessorIds[sampler.output] = true;\n      }\n    });\n  });\n\n  if (usesExtension(gltf, \"EXT_mesh_gpu_instancing\")) {\n    ForEach.node(gltf, function (node) {\n      if (\n        defined(node.extensions) &&\n        defined(node.extensions.EXT_mesh_gpu_instancing)\n      ) {\n        Object.keys(node.extensions.EXT_mesh_gpu_instancing.attributes).forEach(\n          function (key) {\n            const attributeAccessorId =\n              node.extensions.EXT_mesh_gpu_instancing.attributes[key];\n            usedAccessorIds[attributeAccessorId] = true;\n          },\n        );\n      }\n    });\n  }\n\n  if (usesExtension(gltf, \"CESIUM_primitive_outline\")) {\n    ForEach.mesh(gltf, function (mesh) {\n      ForEach.meshPrimitive(mesh, function (primitive) {\n        const extensions = primitive.extensions;\n        if (\n          defined(extensions) &&\n          defined(extensions.CESIUM_primitive_outline)\n        ) {\n          const extension = extensions.CESIUM_primitive_outline;\n          const indicesAccessorId = extension.indices;\n          if (defined(indicesAccessorId)) {\n            usedAccessorIds[indicesAccessorId] = true;\n          }\n        }\n      });\n    });\n  }\n\n  return usedAccessorIds;\n};\n\ngetListOfElementsIdsInUse.buffer = function (gltf) {\n  // Calculate buffer's that are currently in use.\n  const usedBufferIds = {};\n\n  ForEach.bufferView(gltf, function (bufferView) {\n    if (defined(bufferView.buffer)) {\n      usedBufferIds[bufferView.buffer] = true;\n    }\n    if (\n      defined(bufferView.extensions) &&\n      defined(bufferView.extensions.EXT_meshopt_compression)\n    ) {\n      usedBufferIds[bufferView.extensions.EXT_meshopt_compression.buffer] =\n        true;\n    }\n  });\n\n  return usedBufferIds;\n};\n\ngetListOfElementsIdsInUse.bufferView = function (gltf) {\n  // Calculate bufferView's that are currently in use.\n  const usedBufferViewIds = {};\n\n  ForEach.accessor(gltf, function (accessor) {\n    if (defined(accessor.bufferView)) {\n      usedBufferViewIds[accessor.bufferView] = true;\n    }\n  });\n\n  ForEach.shader(gltf, function (shader) {\n    if (defined(shader.bufferView)) {\n      usedBufferViewIds[shader.bufferView] = true;\n    }\n  });\n\n  ForEach.image(gltf, function (image) {\n    if (defined(image.bufferView)) {\n      usedBufferViewIds[image.bufferView] = true;\n    }\n  });\n\n  if (usesExtension(gltf, \"KHR_draco_mesh_compression\")) {\n    ForEach.mesh(gltf, function (mesh) {\n      ForEach.meshPrimitive(mesh, function (primitive) {\n        if (\n          defined(primitive.extensions) &&\n          defined(primitive.extensions.KHR_draco_mesh_compression)\n        ) {\n          usedBufferViewIds[\n            primitive.extensions.KHR_draco_mesh_compression.bufferView\n          ] = true;\n        }\n      });\n    });\n  }\n\n  if (usesExtension(gltf, \"EXT_feature_metadata\")) {\n    const extension = gltf.extensions.EXT_feature_metadata;\n    const featureTables = extension.featureTables;\n    for (const featureTableId in featureTables) {\n      if (featureTables.hasOwnProperty(featureTableId)) {\n        const featureTable = featureTables[featureTableId];\n        const properties = featureTable.properties;\n        if (defined(properties)) {\n          for (const propertyId in properties) {\n            if (properties.hasOwnProperty(propertyId)) {\n              const property = properties[propertyId];\n              if (defined(property.bufferView)) {\n                usedBufferViewIds[property.bufferView] = true;\n              }\n              if (defined(property.arrayOffsetBufferView)) {\n                usedBufferViewIds[property.arrayOffsetBufferView] = true;\n              }\n              if (defined(property.stringOffsetBufferView)) {\n                usedBufferViewIds[property.stringOffsetBufferView] = true;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  if (usesExtension(gltf, \"EXT_structural_metadata\")) {\n    const extension = gltf.extensions.EXT_structural_metadata;\n    const propertyTables = extension.propertyTables;\n    if (defined(propertyTables)) {\n      const propertyTablesLength = propertyTables.length;\n      for (let i = 0; i < propertyTablesLength; ++i) {\n        const propertyTable = propertyTables[i];\n        const properties = propertyTable.properties;\n        for (const propertyId in properties) {\n          if (properties.hasOwnProperty(propertyId)) {\n            const property = properties[propertyId];\n            if (defined(property.values)) {\n              usedBufferViewIds[property.values] = true;\n            }\n            if (defined(property.arrayOffsets)) {\n              usedBufferViewIds[property.arrayOffsets] = true;\n            }\n            if (defined(property.stringOffsets)) {\n              usedBufferViewIds[property.stringOffsets] = true;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return usedBufferViewIds;\n};\n\ngetListOfElementsIdsInUse.image = function (gltf) {\n  const usedImageIds = {};\n\n  ForEach.texture(gltf, function (texture) {\n    if (defined(texture.source)) {\n      usedImageIds[texture.source] = true;\n    }\n\n    if (\n      defined(texture.extensions) &&\n      defined(texture.extensions.EXT_texture_webp)\n    ) {\n      usedImageIds[texture.extensions.EXT_texture_webp.source] = true;\n    } else if (\n      defined(texture.extensions) &&\n      defined(texture.extensions.KHR_texture_basisu)\n    ) {\n      usedImageIds[texture.extensions.KHR_texture_basisu.source] = true;\n    }\n  });\n  return usedImageIds;\n};\n\ngetListOfElementsIdsInUse.mesh = function (gltf) {\n  const usedMeshIds = {};\n  ForEach.node(gltf, function (node) {\n    if (defined(node.mesh && defined(gltf.meshes))) {\n      const mesh = gltf.meshes[node.mesh];\n      if (\n        defined(mesh) &&\n        defined(mesh.primitives) &&\n        mesh.primitives.length > 0\n      ) {\n        usedMeshIds[node.mesh] = true;\n      }\n    }\n  });\n\n  return usedMeshIds;\n};\n\n// Check if node is empty. It is considered empty if neither referencing\n// mesh, camera, extensions and has no children\nfunction nodeIsEmpty(gltf, nodeId, usedNodeIds) {\n  const node = gltf.nodes[nodeId];\n  if (\n    defined(node.mesh) ||\n    defined(node.camera) ||\n    defined(node.skin) ||\n    defined(node.weights) ||\n    defined(node.extras) ||\n    (defined(node.extensions) && Object.keys(node.extensions).length !== 0) ||\n    defined(usedNodeIds[nodeId])\n  ) {\n    return false;\n  }\n\n  // Empty if no children or children are all empty nodes\n  return (\n    !defined(node.children) ||\n    node.children.filter(function (n) {\n      return !nodeIsEmpty(gltf, n, usedNodeIds);\n    }).length === 0\n  );\n}\n\ngetListOfElementsIdsInUse.node = function (gltf) {\n  const usedNodeIds = {};\n  ForEach.skin(gltf, function (skin) {\n    if (defined(skin.skeleton)) {\n      usedNodeIds[skin.skeleton] = true;\n    }\n\n    ForEach.skinJoint(skin, function (joint) {\n      usedNodeIds[joint] = true;\n    });\n  });\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationChannel(animation, function (channel) {\n      if (defined(channel.target) && defined(channel.target.node)) {\n        usedNodeIds[channel.target.node] = true;\n      }\n    });\n  });\n  ForEach.technique(gltf, function (technique) {\n    ForEach.techniqueUniform(technique, function (uniform) {\n      if (defined(uniform.node)) {\n        usedNodeIds[uniform.node] = true;\n      }\n    });\n  });\n  ForEach.node(gltf, function (node, nodeId) {\n    if (!nodeIsEmpty(gltf, nodeId, usedNodeIds)) {\n      usedNodeIds[nodeId] = true;\n    }\n  });\n\n  return usedNodeIds;\n};\n\ngetListOfElementsIdsInUse.material = function (gltf) {\n  const usedMaterialIds = {};\n\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      if (defined(primitive.material)) {\n        usedMaterialIds[primitive.material] = true;\n      }\n    });\n  });\n\n  return usedMaterialIds;\n};\n\ngetListOfElementsIdsInUse.texture = function (gltf) {\n  const usedTextureIds = {};\n\n  ForEach.material(gltf, function (material) {\n    forEachTextureInMaterial(material, function (textureId) {\n      usedTextureIds[textureId] = true;\n    });\n  });\n\n  if (usesExtension(gltf, \"EXT_feature_metadata\")) {\n    ForEach.mesh(gltf, function (mesh) {\n      ForEach.meshPrimitive(mesh, function (primitive) {\n        const extensions = primitive.extensions;\n        if (defined(extensions) && defined(extensions.EXT_feature_metadata)) {\n          const extension = extensions.EXT_feature_metadata;\n          const featureIdTextures = extension.featureIdTextures;\n          if (defined(featureIdTextures)) {\n            const featureIdTexturesLength = featureIdTextures.length;\n            for (let i = 0; i < featureIdTexturesLength; ++i) {\n              const featureIdTexture = featureIdTextures[i];\n              const textureInfo = featureIdTexture.featureIds.texture;\n              usedTextureIds[textureInfo.index] = true;\n            }\n          }\n        }\n      });\n    });\n\n    const extension = gltf.extensions.EXT_feature_metadata;\n    const featureTextures = extension.featureTextures;\n    for (const featureTextureId in featureTextures) {\n      if (featureTextures.hasOwnProperty(featureTextureId)) {\n        const featureTexture = featureTextures[featureTextureId];\n        const properties = featureTexture.properties;\n        if (defined(properties)) {\n          for (const propertyId in properties) {\n            if (properties.hasOwnProperty(propertyId)) {\n              const property = properties[propertyId];\n              const textureInfo = property.texture;\n              usedTextureIds[textureInfo.index] = true;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  if (usesExtension(gltf, \"EXT_mesh_features\")) {\n    ForEach.mesh(gltf, function (mesh) {\n      ForEach.meshPrimitive(mesh, function (primitive) {\n        const extensions = primitive.extensions;\n        if (defined(extensions) && defined(extensions.EXT_mesh_features)) {\n          const extension = extensions.EXT_mesh_features;\n          const featureIds = extension.featureIds;\n          if (defined(featureIds)) {\n            const featureIdsLength = featureIds.length;\n            for (let i = 0; i < featureIdsLength; ++i) {\n              const featureId = featureIds[i];\n              if (defined(featureId.texture)) {\n                usedTextureIds[featureId.texture.index] = true;\n              }\n            }\n          }\n        }\n      });\n    });\n  }\n\n  if (usesExtension(gltf, \"EXT_structural_metadata\")) {\n    const extension = gltf.extensions.EXT_structural_metadata;\n    const propertyTextures = extension.propertyTextures;\n    if (defined(propertyTextures)) {\n      const propertyTexturesLength = propertyTextures.length;\n      for (let i = 0; i < propertyTexturesLength; ++i) {\n        const propertyTexture = propertyTextures[i];\n        const properties = propertyTexture.properties;\n        for (const propertyId in properties) {\n          if (properties.hasOwnProperty(propertyId)) {\n            const property = properties[propertyId];\n            usedTextureIds[property.index] = true;\n          }\n        }\n      }\n    }\n  }\n\n  return usedTextureIds;\n};\n\ngetListOfElementsIdsInUse.sampler = function (gltf) {\n  const usedSamplerIds = {};\n\n  ForEach.texture(gltf, function (texture) {\n    if (defined(texture.sampler)) {\n      usedSamplerIds[texture.sampler] = true;\n    }\n  });\n\n  return usedSamplerIds;\n};\n\nexport default removeUnusedElements;\n","import addBuffer from \"./addBuffer.js\";\nimport ForEach from \"./ForEach.js\";\nimport readAccessorPacked from \"./readAccessorPacked.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport WebGLConstants from \"../../Core/WebGLConstants.js\";\n\n/**\n * Update accessors referenced by JOINTS_0 and WEIGHTS_0 attributes to use correct component types.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @returns {object} The glTF asset with compressed meshes.\n *\n * @private\n */\nfunction updateAccessorComponentTypes(gltf) {\n  let componentType;\n  ForEach.accessorWithSemantic(gltf, \"JOINTS_0\", function (accessorId) {\n    const accessor = gltf.accessors[accessorId];\n    componentType = accessor.componentType;\n    if (componentType === WebGLConstants.BYTE) {\n      convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE);\n    } else if (\n      componentType !== WebGLConstants.UNSIGNED_BYTE &&\n      componentType !== WebGLConstants.UNSIGNED_SHORT\n    ) {\n      convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT);\n    }\n  });\n  ForEach.accessorWithSemantic(gltf, \"WEIGHTS_0\", function (accessorId) {\n    const accessor = gltf.accessors[accessorId];\n    componentType = accessor.componentType;\n    if (componentType === WebGLConstants.BYTE) {\n      convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE);\n    } else if (componentType === WebGLConstants.SHORT) {\n      convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT);\n    }\n  });\n\n  return gltf;\n}\n\nfunction convertType(gltf, accessor, updatedComponentType) {\n  const typedArray = ComponentDatatype.createTypedArray(\n    updatedComponentType,\n    readAccessorPacked(gltf, accessor),\n  );\n  const newBuffer = new Uint8Array(typedArray.buffer);\n  accessor.bufferView = addBuffer(gltf, newBuffer);\n  accessor.componentType = updatedComponentType;\n  accessor.byteOffset = 0;\n}\n\nexport default updateAccessorComponentTypes;\n","import addExtensionsUsed from \"./addExtensionsUsed.js\";\nimport addToArray from \"./addToArray.js\";\nimport findAccessorMinMax from \"./findAccessorMinMax.js\";\nimport ForEach from \"./ForEach.js\";\nimport getAccessorByteStride from \"./getAccessorByteStride.js\";\nimport numberOfComponentsForType from \"./numberOfComponentsForType.js\";\nimport moveTechniqueRenderStates from \"./moveTechniqueRenderStates.js\";\nimport moveTechniquesToExtension from \"./moveTechniquesToExtension.js\";\nimport removeUnusedElements from \"./removeUnusedElements.js\";\nimport updateAccessorComponentTypes from \"./updateAccessorComponentTypes.js\";\nimport removeExtension from \"./removeExtension.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cartesian4 from \"../../Core/Cartesian4.js\";\nimport clone from \"../../Core/clone.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Quaternion from \"../../Core/Quaternion.js\";\nimport WebGLConstants from \"../../Core/WebGLConstants.js\";\n\nconst updateFunctions = {\n  0.8: glTF08to10,\n  \"1.0\": glTF10to20,\n  \"2.0\": undefined,\n};\n\n/**\n * Update the glTF version to the latest version (2.0), or targetVersion if specified.\n * Applies changes made to the glTF spec between revisions so that the core library\n * only has to handle the latest version.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {object} [options] Options for updating the glTF.\n * @param {string} [options.targetVersion] The glTF will be upgraded until it hits the specified version.\n * @param {string[]} [options.baseColorTextureNames] Names of uniforms that indicate base color textures.\n * @param {string[]} [options.baseColorFactorNames] Names of uniforms that indicate base color factors.\n * @returns {object} The updated glTF asset.\n *\n * @private\n */\nfunction updateVersion(gltf, options) {\n  options = options ?? {};\n  const targetVersion = options.targetVersion;\n  let version = gltf.version;\n\n  gltf.asset = gltf.asset ?? {\n    version: \"1.0\",\n  };\n\n  gltf.asset.version = gltf.asset.version ?? \"1.0\";\n  version = (version ?? gltf.asset.version).toString();\n\n  // Invalid version\n  if (!Object.prototype.hasOwnProperty.call(updateFunctions, version)) {\n    // Try truncating trailing version numbers, could be a number as well if it is 0.8\n    if (defined(version)) {\n      version = version.substring(0, 3);\n    }\n    // Default to 1.0 if it cannot be determined\n    if (!Object.prototype.hasOwnProperty.call(updateFunctions, version)) {\n      version = \"1.0\";\n    }\n  }\n\n  let updateFunction = updateFunctions[version];\n\n  while (defined(updateFunction)) {\n    if (version === targetVersion) {\n      break;\n    }\n    updateFunction(gltf, options);\n    version = gltf.asset.version;\n    updateFunction = updateFunctions[version];\n  }\n\n  if (!options.keepLegacyExtensions) {\n    convertTechniquesToPbr(gltf, options);\n    convertMaterialsCommonToPbr(gltf);\n  }\n\n  return gltf;\n}\n\nfunction updateInstanceTechniques(gltf) {\n  const materials = gltf.materials;\n  for (const materialId in materials) {\n    if (Object.prototype.hasOwnProperty.call(materials, materialId)) {\n      const material = materials[materialId];\n      const instanceTechnique = material.instanceTechnique;\n      if (defined(instanceTechnique)) {\n        material.technique = instanceTechnique.technique;\n        material.values = instanceTechnique.values;\n        delete material.instanceTechnique;\n      }\n    }\n  }\n}\n\nfunction setPrimitiveModes(gltf) {\n  const meshes = gltf.meshes;\n  for (const meshId in meshes) {\n    if (Object.prototype.hasOwnProperty.call(meshes, meshId)) {\n      const mesh = meshes[meshId];\n      const primitives = mesh.primitives;\n      if (defined(primitives)) {\n        const primitivesLength = primitives.length;\n        for (let i = 0; i < primitivesLength; ++i) {\n          const primitive = primitives[i];\n          const defaultMode = primitive.primitive ?? WebGLConstants.TRIANGLES;\n          primitive.mode = primitive.mode ?? defaultMode;\n          delete primitive.primitive;\n        }\n      }\n    }\n  }\n}\n\nfunction updateNodes(gltf) {\n  const nodes = gltf.nodes;\n  const axis = new Cartesian3();\n  const quat = new Quaternion();\n  for (const nodeId in nodes) {\n    if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n      const node = nodes[nodeId];\n      if (defined(node.rotation)) {\n        const rotation = node.rotation;\n        Cartesian3.fromArray(rotation, 0, axis);\n        Quaternion.fromAxisAngle(axis, rotation[3], quat);\n        node.rotation = [quat.x, quat.y, quat.z, quat.w];\n      }\n      const instanceSkin = node.instanceSkin;\n      if (defined(instanceSkin)) {\n        node.skeletons = instanceSkin.skeletons;\n        node.skin = instanceSkin.skin;\n        node.meshes = instanceSkin.meshes;\n        delete node.instanceSkin;\n      }\n    }\n  }\n}\n\nfunction updateAnimations(gltf) {\n  const animations = gltf.animations;\n  const accessors = gltf.accessors;\n  const bufferViews = gltf.bufferViews;\n  const buffers = gltf.buffers;\n  const updatedAccessors = {};\n  const axis = new Cartesian3();\n  const quat = new Quaternion();\n  for (const animationId in animations) {\n    if (Object.prototype.hasOwnProperty.call(animations, animationId)) {\n      const animation = animations[animationId];\n      const channels = animation.channels;\n      const parameters = animation.parameters;\n      const samplers = animation.samplers;\n      if (defined(channels)) {\n        const channelsLength = channels.length;\n        for (let i = 0; i < channelsLength; ++i) {\n          const channel = channels[i];\n          if (channel.target.path === \"rotation\") {\n            const accessorId = parameters[samplers[channel.sampler].output];\n            if (defined(updatedAccessors[accessorId])) {\n              continue;\n            }\n            updatedAccessors[accessorId] = true;\n            const accessor = accessors[accessorId];\n            const bufferView = bufferViews[accessor.bufferView];\n            const buffer = buffers[bufferView.buffer];\n            const source = buffer.extras._pipeline.source;\n            const byteOffset =\n              source.byteOffset + bufferView.byteOffset + accessor.byteOffset;\n            const componentType = accessor.componentType;\n            const count = accessor.count;\n            const componentsLength = numberOfComponentsForType(accessor.type);\n            const length = accessor.count * componentsLength;\n            const typedArray = ComponentDatatype.createArrayBufferView(\n              componentType,\n              source.buffer,\n              byteOffset,\n              length,\n            );\n\n            for (let j = 0; j < count; j++) {\n              const offset = j * componentsLength;\n              Cartesian3.unpack(typedArray, offset, axis);\n              const angle = typedArray[offset + 3];\n              Quaternion.fromAxisAngle(axis, angle, quat);\n              Quaternion.pack(quat, typedArray, offset);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction removeTechniquePasses(gltf) {\n  const techniques = gltf.techniques;\n  for (const techniqueId in techniques) {\n    if (Object.prototype.hasOwnProperty.call(techniques, techniqueId)) {\n      const technique = techniques[techniqueId];\n      const passes = technique.passes;\n      if (defined(passes)) {\n        const passName = technique.pass ?? \"defaultPass\";\n        if (Object.prototype.hasOwnProperty.call(passes, passName)) {\n          const pass = passes[passName];\n          const instanceProgram = pass.instanceProgram;\n          technique.attributes =\n            technique.attributes ?? instanceProgram.attributes;\n          technique.program = technique.program ?? instanceProgram.program;\n          technique.uniforms = technique.uniforms ?? instanceProgram.uniforms;\n          technique.states = technique.states ?? pass.states;\n        }\n        delete technique.passes;\n        delete technique.pass;\n      }\n    }\n  }\n}\n\nfunction glTF08to10(gltf) {\n  if (!defined(gltf.asset)) {\n    gltf.asset = {};\n  }\n  const asset = gltf.asset;\n  asset.version = \"1.0\";\n  // Profile should be an object, not a string\n  if (typeof asset.profile === \"string\") {\n    const split = asset.profile.split(\" \");\n    asset.profile = {\n      api: split[0],\n      version: split[1],\n    };\n  } else {\n    asset.profile = {};\n  }\n\n  // Version property should be in asset, not on the root element\n  if (defined(gltf.version)) {\n    delete gltf.version;\n  }\n  // material.instanceTechnique properties should be directly on the material\n  updateInstanceTechniques(gltf);\n  // primitive.primitive should be primitive.mode\n  setPrimitiveModes(gltf);\n  // Node rotation should be quaternion, not axis-angle\n  // node.instanceSkin is deprecated\n  updateNodes(gltf);\n  // Animations that target rotations should be quaternion, not axis-angle\n  updateAnimations(gltf);\n  // technique.pass and techniques.passes are deprecated\n  removeTechniquePasses(gltf);\n  // gltf.allExtensions -> extensionsUsed\n  if (defined(gltf.allExtensions)) {\n    gltf.extensionsUsed = gltf.allExtensions;\n    delete gltf.allExtensions;\n  }\n  // gltf.lights -> khrMaterialsCommon.lights\n  if (defined(gltf.lights)) {\n    const extensions = gltf.extensions ?? {};\n    gltf.extensions = extensions;\n    const materialsCommon = extensions.KHR_materials_common ?? {};\n    extensions.KHR_materials_common = materialsCommon;\n    materialsCommon.lights = gltf.lights;\n    delete gltf.lights;\n    addExtensionsUsed(gltf, \"KHR_materials_common\");\n  }\n}\n\nfunction removeAnimationSamplersIndirection(gltf) {\n  const animations = gltf.animations;\n  for (const animationId in animations) {\n    if (Object.prototype.hasOwnProperty.call(animations, animationId)) {\n      const animation = animations[animationId];\n      const parameters = animation.parameters;\n      if (defined(parameters)) {\n        const samplers = animation.samplers;\n        for (const samplerId in samplers) {\n          if (Object.prototype.hasOwnProperty.call(samplers, samplerId)) {\n            const sampler = samplers[samplerId];\n            sampler.input = parameters[sampler.input];\n            sampler.output = parameters[sampler.output];\n          }\n        }\n        delete animation.parameters;\n      }\n    }\n  }\n}\n\nfunction objectToArray(object, mapping) {\n  const array = [];\n  for (const id in object) {\n    if (Object.prototype.hasOwnProperty.call(object, id)) {\n      const value = object[id];\n      mapping[id] = array.length;\n      array.push(value);\n      if (!defined(value.name)) {\n        value.name = id;\n      }\n    }\n  }\n  return array;\n}\n\nfunction objectsToArrays(gltf) {\n  let i;\n  const globalMapping = {\n    accessors: {},\n    animations: {},\n    buffers: {},\n    bufferViews: {},\n    cameras: {},\n    images: {},\n    materials: {},\n    meshes: {},\n    nodes: {},\n    programs: {},\n    samplers: {},\n    scenes: {},\n    shaders: {},\n    skins: {},\n    textures: {},\n    techniques: {},\n  };\n\n  // Map joint names to id names\n  let jointName;\n  const jointNameToId = {};\n  const nodes = gltf.nodes;\n  for (const id in nodes) {\n    if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n      jointName = nodes[id].jointName;\n      if (defined(jointName)) {\n        jointNameToId[jointName] = id;\n      }\n    }\n  }\n\n  // Convert top level objects to arrays\n  for (const topLevelId in gltf) {\n    if (\n      Object.prototype.hasOwnProperty.call(gltf, topLevelId) &&\n      defined(globalMapping[topLevelId])\n    ) {\n      const objectMapping = {};\n      const object = gltf[topLevelId];\n      gltf[topLevelId] = objectToArray(object, objectMapping);\n      globalMapping[topLevelId] = objectMapping;\n    }\n  }\n\n  // Remap joint names to array indexes\n  for (jointName in jointNameToId) {\n    if (Object.prototype.hasOwnProperty.call(jointNameToId, jointName)) {\n      jointNameToId[jointName] = globalMapping.nodes[jointNameToId[jointName]];\n    }\n  }\n\n  // Fix references\n  if (defined(gltf.scene)) {\n    gltf.scene = globalMapping.scenes[gltf.scene];\n  }\n  ForEach.bufferView(gltf, function (bufferView) {\n    if (defined(bufferView.buffer)) {\n      bufferView.buffer = globalMapping.buffers[bufferView.buffer];\n    }\n  });\n  ForEach.accessor(gltf, function (accessor) {\n    if (defined(accessor.bufferView)) {\n      accessor.bufferView = globalMapping.bufferViews[accessor.bufferView];\n    }\n  });\n  ForEach.shader(gltf, function (shader) {\n    const extensions = shader.extensions;\n    if (defined(extensions)) {\n      const binaryGltf = extensions.KHR_binary_glTF;\n      if (defined(binaryGltf)) {\n        shader.bufferView = globalMapping.bufferViews[binaryGltf.bufferView];\n        delete extensions.KHR_binary_glTF;\n      }\n      if (Object.keys(extensions).length === 0) {\n        delete shader.extensions;\n      }\n    }\n  });\n  ForEach.program(gltf, function (program) {\n    if (defined(program.vertexShader)) {\n      program.vertexShader = globalMapping.shaders[program.vertexShader];\n    }\n    if (defined(program.fragmentShader)) {\n      program.fragmentShader = globalMapping.shaders[program.fragmentShader];\n    }\n  });\n  ForEach.technique(gltf, function (technique) {\n    if (defined(technique.program)) {\n      technique.program = globalMapping.programs[technique.program];\n    }\n    ForEach.techniqueParameter(technique, function (parameter) {\n      if (defined(parameter.node)) {\n        parameter.node = globalMapping.nodes[parameter.node];\n      }\n      const value = parameter.value;\n      if (typeof value === \"string\") {\n        parameter.value = {\n          index: globalMapping.textures[value],\n        };\n      }\n    });\n  });\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      if (defined(primitive.indices)) {\n        primitive.indices = globalMapping.accessors[primitive.indices];\n      }\n      ForEach.meshPrimitiveAttribute(\n        primitive,\n        function (accessorId, semantic) {\n          primitive.attributes[semantic] = globalMapping.accessors[accessorId];\n        },\n      );\n      if (defined(primitive.material)) {\n        primitive.material = globalMapping.materials[primitive.material];\n      }\n    });\n  });\n  ForEach.node(gltf, function (node) {\n    let children = node.children;\n    if (defined(children)) {\n      const childrenLength = children.length;\n      for (i = 0; i < childrenLength; ++i) {\n        children[i] = globalMapping.nodes[children[i]];\n      }\n    }\n    if (defined(node.meshes)) {\n      // Split out meshes on nodes\n      const meshes = node.meshes;\n      const meshesLength = meshes.length;\n      if (meshesLength > 0) {\n        node.mesh = globalMapping.meshes[meshes[0]];\n        for (i = 1; i < meshesLength; ++i) {\n          const meshNode = {\n            mesh: globalMapping.meshes[meshes[i]],\n          };\n          const meshNodeId = addToArray(gltf.nodes, meshNode);\n          if (!defined(children)) {\n            children = [];\n            node.children = children;\n          }\n          children.push(meshNodeId);\n        }\n      }\n      delete node.meshes;\n    }\n    if (defined(node.camera)) {\n      node.camera = globalMapping.cameras[node.camera];\n    }\n    if (defined(node.skin)) {\n      node.skin = globalMapping.skins[node.skin];\n    }\n    if (defined(node.skeletons)) {\n      // Assign skeletons to skins\n      const skeletons = node.skeletons;\n      const skeletonsLength = skeletons.length;\n      if (skeletonsLength > 0 && defined(node.skin)) {\n        const skin = gltf.skins[node.skin];\n        skin.skeleton = globalMapping.nodes[skeletons[0]];\n      }\n      delete node.skeletons;\n    }\n    if (defined(node.jointName)) {\n      delete node.jointName;\n    }\n  });\n  ForEach.skin(gltf, function (skin) {\n    if (defined(skin.inverseBindMatrices)) {\n      skin.inverseBindMatrices =\n        globalMapping.accessors[skin.inverseBindMatrices];\n    }\n    const jointNames = skin.jointNames;\n    if (defined(jointNames)) {\n      const joints = [];\n      const jointNamesLength = jointNames.length;\n      for (i = 0; i < jointNamesLength; ++i) {\n        joints[i] = jointNameToId[jointNames[i]];\n      }\n      skin.joints = joints;\n      delete skin.jointNames;\n    }\n  });\n  ForEach.scene(gltf, function (scene) {\n    const sceneNodes = scene.nodes;\n    if (defined(sceneNodes)) {\n      const sceneNodesLength = sceneNodes.length;\n      for (i = 0; i < sceneNodesLength; ++i) {\n        sceneNodes[i] = globalMapping.nodes[sceneNodes[i]];\n      }\n    }\n  });\n  ForEach.animation(gltf, function (animation) {\n    const samplerMapping = {};\n    animation.samplers = objectToArray(animation.samplers, samplerMapping);\n    ForEach.animationSampler(animation, function (sampler) {\n      sampler.input = globalMapping.accessors[sampler.input];\n      sampler.output = globalMapping.accessors[sampler.output];\n    });\n    ForEach.animationChannel(animation, function (channel) {\n      channel.sampler = samplerMapping[channel.sampler];\n      const target = channel.target;\n      if (defined(target)) {\n        target.node = globalMapping.nodes[target.id];\n        delete target.id;\n      }\n    });\n  });\n  ForEach.material(gltf, function (material) {\n    if (defined(material.technique)) {\n      material.technique = globalMapping.techniques[material.technique];\n    }\n    ForEach.materialValue(material, function (value, name) {\n      if (typeof value === \"string\") {\n        material.values[name] = {\n          index: globalMapping.textures[value],\n        };\n      }\n    });\n    const extensions = material.extensions;\n    if (defined(extensions)) {\n      const materialsCommon = extensions.KHR_materials_common;\n      if (defined(materialsCommon) && defined(materialsCommon.values)) {\n        ForEach.materialValue(materialsCommon, function (value, name) {\n          if (typeof value === \"string\") {\n            materialsCommon.values[name] = {\n              index: globalMapping.textures[value],\n            };\n          }\n        });\n      }\n    }\n  });\n  ForEach.image(gltf, function (image) {\n    const extensions = image.extensions;\n    if (defined(extensions)) {\n      const binaryGltf = extensions.KHR_binary_glTF;\n      if (defined(binaryGltf)) {\n        image.bufferView = globalMapping.bufferViews[binaryGltf.bufferView];\n        image.mimeType = binaryGltf.mimeType;\n        delete extensions.KHR_binary_glTF;\n      }\n      if (Object.keys(extensions).length === 0) {\n        delete image.extensions;\n      }\n    }\n  });\n  ForEach.texture(gltf, function (texture) {\n    if (defined(texture.sampler)) {\n      texture.sampler = globalMapping.samplers[texture.sampler];\n    }\n    if (defined(texture.source)) {\n      texture.source = globalMapping.images[texture.source];\n    }\n  });\n}\n\nfunction removeAnimationSamplerNames(gltf) {\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationSampler(animation, function (sampler) {\n      delete sampler.name;\n    });\n  });\n}\n\nfunction removeEmptyArrays(gltf) {\n  for (const topLevelId in gltf) {\n    if (Object.prototype.hasOwnProperty.call(gltf, topLevelId)) {\n      const array = gltf[topLevelId];\n      if (Array.isArray(array) && array.length === 0) {\n        delete gltf[topLevelId];\n      }\n    }\n  }\n  ForEach.node(gltf, function (node) {\n    if (defined(node.children) && node.children.length === 0) {\n      delete node.children;\n    }\n  });\n}\n\nfunction stripAsset(gltf) {\n  const asset = gltf.asset;\n  delete asset.profile;\n  delete asset.premultipliedAlpha;\n}\n\nconst knownExtensions = {\n  CESIUM_RTC: true,\n  KHR_materials_common: true,\n  WEB3D_quantized_attributes: true,\n};\nfunction requireKnownExtensions(gltf) {\n  const extensionsUsed = gltf.extensionsUsed;\n  gltf.extensionsRequired = gltf.extensionsRequired ?? [];\n  if (defined(extensionsUsed)) {\n    const extensionsUsedLength = extensionsUsed.length;\n    for (let i = 0; i < extensionsUsedLength; ++i) {\n      const extension = extensionsUsed[i];\n      if (defined(knownExtensions[extension])) {\n        gltf.extensionsRequired.push(extension);\n      }\n    }\n  }\n}\n\nfunction removeBufferType(gltf) {\n  ForEach.buffer(gltf, function (buffer) {\n    delete buffer.type;\n  });\n}\n\nfunction removeTextureProperties(gltf) {\n  ForEach.texture(gltf, function (texture) {\n    delete texture.format;\n    delete texture.internalFormat;\n    delete texture.target;\n    delete texture.type;\n  });\n}\n\nfunction requireAttributeSetIndex(gltf) {\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      ForEach.meshPrimitiveAttribute(\n        primitive,\n        function (accessorId, semantic) {\n          if (semantic === \"TEXCOORD\") {\n            primitive.attributes.TEXCOORD_0 = accessorId;\n          } else if (semantic === \"COLOR\") {\n            primitive.attributes.COLOR_0 = accessorId;\n          }\n        },\n      );\n      delete primitive.attributes.TEXCOORD;\n      delete primitive.attributes.COLOR;\n    });\n  });\n  ForEach.technique(gltf, function (technique) {\n    ForEach.techniqueParameter(technique, function (parameter) {\n      const semantic = parameter.semantic;\n      if (defined(semantic)) {\n        if (semantic === \"TEXCOORD\") {\n          parameter.semantic = \"TEXCOORD_0\";\n        } else if (semantic === \"COLOR\") {\n          parameter.semantic = \"COLOR_0\";\n        }\n      }\n    });\n  });\n}\n\nconst knownSemantics = {\n  POSITION: true,\n  NORMAL: true,\n  TANGENT: true,\n};\nconst indexedSemantics = {\n  COLOR: \"COLOR\",\n  JOINT: \"JOINTS\",\n  JOINTS: \"JOINTS\",\n  TEXCOORD: \"TEXCOORD\",\n  WEIGHT: \"WEIGHTS\",\n  WEIGHTS: \"WEIGHTS\",\n};\nfunction underscoreApplicationSpecificSemantics(gltf) {\n  const mappedSemantics = {};\n  ForEach.mesh(gltf, function (mesh) {\n    ForEach.meshPrimitive(mesh, function (primitive) {\n      /*eslint-disable no-unused-vars*/\n      ForEach.meshPrimitiveAttribute(\n        primitive,\n        function (accessorId, semantic) {\n          if (semantic.charAt(0) !== \"_\") {\n            const setIndex = semantic.search(/_[0-9]+/g);\n            let strippedSemantic = semantic;\n            let suffix = \"_0\";\n            if (setIndex >= 0) {\n              strippedSemantic = semantic.substring(0, setIndex);\n              suffix = semantic.substring(setIndex);\n            }\n            let newSemantic;\n            const indexedSemantic = indexedSemantics[strippedSemantic];\n            if (defined(indexedSemantic)) {\n              newSemantic = indexedSemantic + suffix;\n              mappedSemantics[semantic] = newSemantic;\n            } else if (!defined(knownSemantics[strippedSemantic])) {\n              newSemantic = `_${semantic}`;\n              mappedSemantics[semantic] = newSemantic;\n            }\n          }\n        },\n      );\n      for (const semantic in mappedSemantics) {\n        if (Object.prototype.hasOwnProperty.call(mappedSemantics, semantic)) {\n          const mappedSemantic = mappedSemantics[semantic];\n          const accessorId = primitive.attributes[semantic];\n          if (defined(accessorId)) {\n            delete primitive.attributes[semantic];\n            primitive.attributes[mappedSemantic] = accessorId;\n          }\n        }\n      }\n    });\n  });\n  ForEach.technique(gltf, function (technique) {\n    ForEach.techniqueParameter(technique, function (parameter) {\n      const mappedSemantic = mappedSemantics[parameter.semantic];\n      if (defined(mappedSemantic)) {\n        parameter.semantic = mappedSemantic;\n      }\n    });\n  });\n}\n\nfunction clampCameraParameters(gltf) {\n  ForEach.camera(gltf, function (camera) {\n    const perspective = camera.perspective;\n    if (defined(perspective)) {\n      const aspectRatio = perspective.aspectRatio;\n      if (defined(aspectRatio) && aspectRatio === 0.0) {\n        delete perspective.aspectRatio;\n      }\n      const yfov = perspective.yfov;\n      if (defined(yfov) && yfov === 0.0) {\n        perspective.yfov = 1.0;\n      }\n    }\n  });\n}\n\nfunction computeAccessorByteStride(gltf, accessor) {\n  return defined(accessor.byteStride) && accessor.byteStride !== 0\n    ? accessor.byteStride\n    : getAccessorByteStride(gltf, accessor);\n}\n\nfunction requireByteLength(gltf) {\n  ForEach.buffer(gltf, function (buffer) {\n    if (!defined(buffer.byteLength)) {\n      buffer.byteLength = buffer.extras._pipeline.source.length;\n    }\n  });\n  ForEach.accessor(gltf, function (accessor) {\n    const bufferViewId = accessor.bufferView;\n    if (defined(bufferViewId)) {\n      const bufferView = gltf.bufferViews[bufferViewId];\n      const accessorByteStride = computeAccessorByteStride(gltf, accessor);\n      const accessorByteEnd =\n        accessor.byteOffset + accessor.count * accessorByteStride;\n      bufferView.byteLength = Math.max(\n        bufferView.byteLength ?? 0,\n        accessorByteEnd,\n      );\n    }\n  });\n}\n\nfunction moveByteStrideToBufferView(gltf) {\n  let i;\n  let j;\n  let bufferView;\n  const bufferViews = gltf.bufferViews;\n\n  const bufferViewHasVertexAttributes = {};\n  ForEach.accessorContainingVertexAttributeData(gltf, function (accessorId) {\n    const accessor = gltf.accessors[accessorId];\n    if (defined(accessor.bufferView)) {\n      bufferViewHasVertexAttributes[accessor.bufferView] = true;\n    }\n  });\n\n  // Map buffer views to a list of accessors\n  const bufferViewMap = {};\n  ForEach.accessor(gltf, function (accessor) {\n    if (defined(accessor.bufferView)) {\n      bufferViewMap[accessor.bufferView] =\n        bufferViewMap[accessor.bufferView] ?? [];\n      bufferViewMap[accessor.bufferView].push(accessor);\n    }\n  });\n\n  // Split accessors with different byte strides\n  for (const bufferViewId in bufferViewMap) {\n    if (Object.prototype.hasOwnProperty.call(bufferViewMap, bufferViewId)) {\n      bufferView = bufferViews[bufferViewId];\n      const accessors = bufferViewMap[bufferViewId];\n      accessors.sort(function (a, b) {\n        return a.byteOffset - b.byteOffset;\n      });\n      let currentByteOffset = 0;\n      let currentIndex = 0;\n      const accessorsLength = accessors.length;\n      for (i = 0; i < accessorsLength; ++i) {\n        let accessor = accessors[i];\n        const accessorByteStride = computeAccessorByteStride(gltf, accessor);\n        const accessorByteOffset = accessor.byteOffset;\n        const accessorByteLength = accessor.count * accessorByteStride;\n        delete accessor.byteStride;\n\n        const hasNextAccessor = i < accessorsLength - 1;\n        const nextAccessorByteStride = hasNextAccessor\n          ? computeAccessorByteStride(gltf, accessors[i + 1])\n          : undefined;\n        if (accessorByteStride !== nextAccessorByteStride) {\n          const newBufferView = clone(bufferView, true);\n          if (bufferViewHasVertexAttributes[bufferViewId]) {\n            newBufferView.byteStride = accessorByteStride;\n          }\n          newBufferView.byteOffset += currentByteOffset;\n          newBufferView.byteLength =\n            accessorByteOffset + accessorByteLength - currentByteOffset;\n          const newBufferViewId = addToArray(bufferViews, newBufferView);\n          for (j = currentIndex; j <= i; ++j) {\n            accessor = accessors[j];\n            accessor.bufferView = newBufferViewId;\n            accessor.byteOffset = accessor.byteOffset - currentByteOffset;\n          }\n          // Set current byte offset to next accessor's byte offset\n          currentByteOffset = hasNextAccessor\n            ? accessors[i + 1].byteOffset\n            : undefined;\n          currentIndex = i + 1;\n        }\n      }\n    }\n  }\n\n  // Remove unused buffer views\n  removeUnusedElements(gltf, [\"accessor\", \"bufferView\", \"buffer\"]);\n}\n\nfunction requirePositionAccessorMinMax(gltf) {\n  ForEach.accessorWithSemantic(gltf, \"POSITION\", function (accessorId) {\n    const accessor = gltf.accessors[accessorId];\n    if (!defined(accessor.min) || !defined(accessor.max)) {\n      const minMax = findAccessorMinMax(gltf, accessor);\n      accessor.min = minMax.min;\n      accessor.max = minMax.max;\n    }\n  });\n}\n\nfunction isNodeEmpty(node) {\n  return (\n    (!defined(node.children) || node.children.length === 0) &&\n    (!defined(node.meshes) || node.meshes.length === 0) &&\n    !defined(node.camera) &&\n    !defined(node.skin) &&\n    !defined(node.skeletons) &&\n    !defined(node.jointName) &&\n    (!defined(node.translation) ||\n      Cartesian3.fromArray(node.translation).equals(Cartesian3.ZERO)) &&\n    (!defined(node.scale) ||\n      Cartesian3.fromArray(node.scale).equals(new Cartesian3(1.0, 1.0, 1.0))) &&\n    (!defined(node.rotation) ||\n      Cartesian4.fromArray(node.rotation).equals(\n        new Cartesian4(0.0, 0.0, 0.0, 1.0),\n      )) &&\n    (!defined(node.matrix) ||\n      Matrix4.fromColumnMajorArray(node.matrix).equals(Matrix4.IDENTITY)) &&\n    !defined(node.extensions) &&\n    !defined(node.extras)\n  );\n}\n\nfunction deleteNode(gltf, nodeId) {\n  // Remove from list of nodes in scene\n  ForEach.scene(gltf, function (scene) {\n    const sceneNodes = scene.nodes;\n    if (defined(sceneNodes)) {\n      const sceneNodesLength = sceneNodes.length;\n      for (let i = sceneNodesLength; i >= 0; --i) {\n        if (sceneNodes[i] === nodeId) {\n          sceneNodes.splice(i, 1);\n          return;\n        }\n      }\n    }\n  });\n\n  // Remove parent node's reference to this node, and delete the parent if also empty\n  ForEach.node(gltf, function (parentNode, parentNodeId) {\n    if (defined(parentNode.children)) {\n      const index = parentNode.children.indexOf(nodeId);\n      if (index > -1) {\n        parentNode.children.splice(index, 1);\n\n        if (isNodeEmpty(parentNode)) {\n          deleteNode(gltf, parentNodeId);\n        }\n      }\n    }\n  });\n\n  delete gltf.nodes[nodeId];\n}\n\nfunction removeEmptyNodes(gltf) {\n  ForEach.node(gltf, function (node, nodeId) {\n    if (isNodeEmpty(node)) {\n      deleteNode(gltf, nodeId);\n    }\n  });\n\n  return gltf;\n}\n\nfunction requireAnimationAccessorMinMax(gltf) {\n  ForEach.animation(gltf, function (animation) {\n    ForEach.animationSampler(animation, function (sampler) {\n      const accessor = gltf.accessors[sampler.input];\n      if (!defined(accessor.min) || !defined(accessor.max)) {\n        const minMax = findAccessorMinMax(gltf, accessor);\n        accessor.min = minMax.min;\n        accessor.max = minMax.max;\n      }\n    });\n  });\n}\n\nfunction validatePresentAccessorMinMax(gltf) {\n  ForEach.accessor(gltf, function (accessor) {\n    if (defined(accessor.min) || defined(accessor.max)) {\n      const minMax = findAccessorMinMax(gltf, accessor);\n      if (defined(accessor.min)) {\n        accessor.min = minMax.min;\n      }\n      if (defined(accessor.max)) {\n        accessor.max = minMax.max;\n      }\n    }\n  });\n}\n\nfunction glTF10to20(gltf) {\n  gltf.asset = gltf.asset ?? {};\n  gltf.asset.version = \"2.0\";\n  // material.instanceTechnique properties should be directly on the material. instanceTechnique is a gltf 0.8 property but is seen in some 1.0 models.\n  updateInstanceTechniques(gltf);\n  // animation.samplers now refers directly to accessors and animation.parameters should be removed\n  removeAnimationSamplersIndirection(gltf);\n  // Remove empty nodes and re-assign referencing indices\n  removeEmptyNodes(gltf);\n  // Top-level objects are now arrays referenced by index instead of id\n  objectsToArrays(gltf);\n  // Animation.sampler objects cannot have names\n  removeAnimationSamplerNames(gltf);\n  // asset.profile no longer exists\n  stripAsset(gltf);\n  // Move known extensions from extensionsUsed to extensionsRequired\n  requireKnownExtensions(gltf);\n  // bufferView.byteLength and buffer.byteLength are required\n  requireByteLength(gltf);\n  // byteStride moved from accessor to bufferView\n  moveByteStrideToBufferView(gltf);\n  // accessor.min and accessor.max must be defined for accessors containing POSITION attributes\n  requirePositionAccessorMinMax(gltf);\n  // An animation sampler's input accessor must have min and max properties defined\n  requireAnimationAccessorMinMax(gltf);\n  // When an acccessor has a min- or max, then it is recomputed, to capture the actual\n  // value, and not use the (possibly imprecise) value from the input\n  validatePresentAccessorMinMax(gltf);\n  // buffer.type is unnecessary and should be removed\n  removeBufferType(gltf);\n  // Remove format, internalFormat, target, and type\n  removeTextureProperties(gltf);\n  // TEXCOORD and COLOR attributes must be written with a set index (TEXCOORD_#)\n  requireAttributeSetIndex(gltf);\n  // Add underscores to application-specific parameters\n  underscoreApplicationSpecificSemantics(gltf);\n  // Accessors referenced by JOINTS_0 and WEIGHTS_0 attributes must have correct component types\n  updateAccessorComponentTypes(gltf);\n  // Clamp camera parameters\n  clampCameraParameters(gltf);\n  // Move legacy technique render states to material properties and add KHR_blend extension blending functions\n  moveTechniqueRenderStates(gltf);\n  // Add material techniques to KHR_techniques_webgl extension, removing shaders, programs, and techniques\n  moveTechniquesToExtension(gltf);\n  // Remove empty arrays\n  removeEmptyArrays(gltf);\n}\n\n// It's not possible to upgrade glTF 1.0 shaders to 2.0 PBR materials in a generic way,\n// but we can look for certain uniform names that are commonly found in glTF 1.0 assets\n// and create PBR materials out of those.\nconst defaultBaseColorTextureNames = [\n  \"u_tex\",\n  \"u_diffuse\",\n  \"u_emission\",\n  \"u_diffuse_tex\",\n];\nconst defaultBaseColorFactorNames = [\"u_diffuse\", \"u_diffuse_mat\"];\n\nfunction initializePbrMaterial(material) {\n  material.pbrMetallicRoughness = defined(material.pbrMetallicRoughness)\n    ? material.pbrMetallicRoughness\n    : {};\n\n  material.pbrMetallicRoughness.roughnessFactor = 1.0;\n  material.pbrMetallicRoughness.metallicFactor = 0.0;\n}\n\nfunction isTexture(value) {\n  return defined(value.index);\n}\n\nfunction isVec4(value) {\n  return Array.isArray(value) && value.length === 4;\n}\n\nfunction srgbToLinear(srgb) {\n  const linear = new Array(4);\n  linear[3] = srgb[3];\n\n  for (let i = 0; i < 3; i++) {\n    const c = srgb[i];\n    if (c <= 0.04045) {\n      // eslint-disable-next-line no-loss-of-precision\n      linear[i] = srgb[i] * 0.07739938080495356037151702786378;\n    } else {\n      linear[i] = Math.pow(\n        // eslint-disable-next-line no-loss-of-precision\n        (c + 0.055) * 0.94786729857819905213270142180095,\n        2.4,\n      );\n    }\n  }\n\n  return linear;\n}\n\nfunction convertTechniquesToPbr(gltf, options) {\n  options = options ?? {};\n  const baseColorTextureNames =\n    options.baseColorTextureNames ?? defaultBaseColorTextureNames;\n  const baseColorFactorNames =\n    options.baseColorFactorNames ?? defaultBaseColorFactorNames;\n\n  // Future work: convert other values like emissive, specular, etc. Only handling diffuse right now.\n  ForEach.material(gltf, function (material) {\n    ForEach.materialValue(material, function (value, name) {\n      if (baseColorTextureNames.indexOf(name) !== -1 && isTexture(value)) {\n        initializePbrMaterial(material);\n        material.pbrMetallicRoughness.baseColorTexture = value;\n      } else if (baseColorFactorNames.indexOf(name) !== -1 && isVec4(value)) {\n        initializePbrMaterial(material);\n        material.pbrMetallicRoughness.baseColorFactor = srgbToLinear(value);\n      }\n    });\n  });\n\n  removeExtension(gltf, \"KHR_techniques_webgl\");\n  removeExtension(gltf, \"KHR_blend\");\n}\n\nfunction assignAsBaseColor(material, baseColor) {\n  if (defined(baseColor)) {\n    if (isVec4(baseColor)) {\n      material.pbrMetallicRoughness.baseColorFactor = srgbToLinear(baseColor);\n    } else if (isTexture(baseColor)) {\n      material.pbrMetallicRoughness.baseColorTexture = baseColor;\n    }\n  }\n}\n\nfunction assignAsEmissive(material, emissive) {\n  if (defined(emissive)) {\n    if (isVec4(emissive)) {\n      material.emissiveFactor = emissive.slice(0, 3);\n    } else if (isTexture(emissive)) {\n      material.emissiveTexture = emissive;\n    }\n  }\n}\n\nfunction convertMaterialsCommonToPbr(gltf) {\n  // Future work: convert KHR_materials_common lights to KHR_lights_punctual\n  ForEach.material(gltf, function (material) {\n    const materialsCommon = (material.extensions ?? {}).KHR_materials_common;\n    if (!defined(materialsCommon)) {\n      // Nothing to do\n      return;\n    }\n\n    const values = materialsCommon.values ?? {};\n    const ambient = values.ambient;\n    const diffuse = values.diffuse;\n    const emission = values.emission;\n    const transparency = values.transparency;\n\n    // These actually exist on the extension object, not the values object despite what's shown in the spec\n    const doubleSided = materialsCommon.doubleSided;\n    const transparent = materialsCommon.transparent;\n\n    // Ignore specular and shininess for now because the conversion to PBR\n    // isn't straightforward and depends on the technique\n    initializePbrMaterial(material);\n\n    const technique = materialsCommon.technique;\n    if (technique === \"CONSTANT\") {\n      // Add the KHR_materials_unlit extension\n      addExtensionsUsed(gltf, \"KHR_materials_unlit\");\n      material.extensions = defined(material.extensions)\n        ? material.extensions\n        : {};\n      material.extensions[\"KHR_materials_unlit\"] = {};\n\n      // The CONSTANT technique does not support 'diffuse', so\n      // assign either the 'emission' or the 'ambient' as the\n      // base color\n      assignAsBaseColor(material, emission);\n      assignAsBaseColor(material, ambient);\n    } else {\n      // Assign the 'diffuse' as the base color, and\n      // the 'ambient' or 'emissive' as the emissive\n      // part if they are present.\n      assignAsBaseColor(material, diffuse);\n      assignAsEmissive(material, ambient);\n      assignAsEmissive(material, emission);\n    }\n\n    if (defined(doubleSided)) {\n      material.doubleSided = doubleSided;\n    }\n    if (defined(transparency)) {\n      if (defined(material.pbrMetallicRoughness.baseColorFactor)) {\n        material.pbrMetallicRoughness.baseColorFactor[3] *= transparency;\n      } else {\n        material.pbrMetallicRoughness.baseColorFactor = [1, 1, 1, transparency];\n      }\n    }\n    if (defined(transparent)) {\n      material.alphaMode = transparent ? \"BLEND\" : \"OPAQUE\";\n    }\n  });\n\n  removeExtension(gltf, \"KHR_materials_common\");\n}\n\nexport default updateVersion;\n","import defined from \"../../Core/defined.js\";\n\n/**\n * Checks whether the glTF uses the given extension.\n *\n * @param {object} gltf A javascript object containing a glTF asset.\n * @param {string} extension The name of the extension.\n * @returns {boolean} Whether the glTF uses the given extension.\n *\n * @private\n */\nfunction usesExtension(gltf, extension) {\n  return (\n    defined(gltf.extensionsUsed) && gltf.extensionsUsed.indexOf(extension) >= 0\n  );\n}\n\nexport default usesExtension;\n","async function TI(R = {}) {\n  var DI;\n  var s, i = R, L = typeof window == \"object\", k = typeof WorkerGlobalScope < \"u\", f = typeof process == \"object\" && ((DI = process.versions) == null ? void 0 : DI.node) && process.type != \"renderer\";\n  if (f) {\n    const { createRequire: I } = await Promise.resolve().then(() => bI);\n    var r = I(import.meta.url);\n  }\n  var x = \"./this.program\", p = import.meta.url, $;\n  if (f) {\n    var wI = r(\"fs\");\n    p.startsWith(\"file:\") && r(\"path\").dirname(r(\"url\").fileURLToPath(p)), $ = (I) => (I = oI(I) ? new URL(I) : I, wI.readFileSync(I)), 1 < process.argv.length && (x = process.argv[1].replace(/\\\\/g, \"/\")), process.argv.slice(2);\n  } else if (L || k) {\n    try {\n      new URL(\".\", p);\n    } catch {\n    }\n    k && ($ = (I) => {\n      var A = new XMLHttpRequest();\n      return A.open(\"GET\", I, !1), A.responseType = \"arraybuffer\", A.send(null), new Uint8Array(A.response);\n    });\n  }\n  var qA = console.log.bind(console), _ = console.error.bind(console), GA, fA = !1, oI = (I) => I.startsWith(\"file://\"), AA, IA, gA, BA, c, O, P, W, a, eA, dA, lA, xA, WA = !1;\n  function ZA() {\n    var I = gA.buffer;\n    BA = new Int8Array(I), O = new Int16Array(I), i.HEAPU8 = c = new Uint8Array(I), P = new Uint16Array(I), W = new Int32Array(I), a = new Uint32Array(I), i.HEAPF32 = eA = new Float32Array(I), dA = new Float64Array(I), lA = new BigInt64Array(I), xA = new BigUint64Array(I);\n  }\n  var e = 0, u = null;\n  function jA(I) {\n    var A;\n    throw (A = i.onAbort) == null || A.call(i, I), I = \"Aborted(\" + I + \")\", _(I), fA = !0, I = new WebAssembly.RuntimeError(I + \". Build with -sASSERTIONS for more info.\"), IA == null || IA(I), I;\n  }\n  var RA;\n  async function FI(I) {\n    if (!ArrayBuffer.isView(I)) if (I == RA && GA) I = new Uint8Array(GA);\n    else if ($) I = $(I);\n    else throw \"both async and sync fetching of the wasm failed\";\n    return I;\n  }\n  async function GI(I) {\n    var A = RA;\n    try {\n      var g = await FI(A);\n      return await WebAssembly.instantiate(g, I);\n    } catch (B) {\n      _(`failed to asynchronously prepare wasm: ${B}`), jA(B);\n    }\n  }\n  async function RI(I) {\n    return GI(I);\n  }\n  var VA = (I) => {\n    for (; 0 < I.length; ) I.shift()(i);\n  }, XA = [], TA = [], sI = () => {\n    var I = i.preRun.shift();\n    TA.push(I);\n  }, yI = (I) => {\n    if (f) return I = Buffer.from(I, \"base64\"), new Uint8Array(I.buffer, I.byteOffset, I.length);\n    for (var A, g, B = 0, Q = 0, E = I.length, C = new Uint8Array((3 * E >> 2) - (I[E - 2] == \"=\") - (I[E - 1] == \"=\")); B < E; B += 4, Q += 3) A = t[I.charCodeAt(B + 1)], g = t[I.charCodeAt(B + 2)], C[Q] = t[I.charCodeAt(B)] << 2 | A >> 4, C[Q + 1] = A << 4 | g >> 2, C[Q + 2] = g << 6 | t[I.charCodeAt(B + 3)];\n    return C;\n  }, QA = {}, sA = (I) => {\n    for (; I.length; ) {\n      var A = I.pop();\n      I.pop()(A);\n    }\n  };\n  function m(I) {\n    return this.N(a[I >> 2]);\n  }\n  var Z = {}, d = {}, CA = {}, EA = class extends Error {\n    constructor(I) {\n      super(I), this.name = \"InternalError\";\n    }\n  }, l = (I, A, g) => {\n    function B(D) {\n      if (D = g(D), D.length !== I.length) throw new EA(\"Mismatched type converter count\");\n      for (var o = 0; o < I.length; ++o) J(I[o], D[o]);\n    }\n    I.forEach((D) => CA[D] = A);\n    var Q = Array(A.length), E = [], C = 0;\n    A.forEach((D, o) => {\n      d.hasOwnProperty(D) ? Q[o] = d[D] : (E.push(D), Z.hasOwnProperty(D) || (Z[D] = []), Z[D].push(() => {\n        Q[o] = d[D], ++C, C === E.length && B(Q);\n      }));\n    }), E.length === 0 && B(Q);\n  }, h = (I) => {\n    for (var A = \"\"; ; ) {\n      var g = c[I++];\n      if (!g) return A;\n      A += String.fromCharCode(g);\n    }\n  }, G = class extends Error {\n    constructor(I) {\n      super(I), this.name = \"BindingError\";\n    }\n  }, aI = (I) => {\n    throw new G(I);\n  };\n  function hI(I, A, g = {}) {\n    var B = A.name;\n    if (!I) throw new G(`type \"${B}\" must have a positive integer typeid pointer`);\n    if (d.hasOwnProperty(I)) {\n      if (g.wa) return;\n      throw new G(`Cannot register type '${B}' twice`);\n    }\n    d[I] = A, delete CA[I], Z.hasOwnProperty(I) && (A = Z[I], delete Z[I], A.forEach((Q) => Q()));\n  }\n  function J(I, A, g = {}) {\n    return hI(I, A, g);\n  }\n  var pA = (I, A, g) => {\n    switch (A) {\n      case 1:\n        return g ? (B) => BA[B] : (B) => c[B];\n      case 2:\n        return g ? (B) => O[B >> 1] : (B) => P[B >> 1];\n      case 4:\n        return g ? (B) => W[B >> 2] : (B) => a[B >> 2];\n      case 8:\n        return g ? (B) => lA[B >> 3] : (B) => xA[B >> 3];\n      default:\n        throw new TypeError(`invalid integer width (${A}): ${I}`);\n    }\n  }, yA = (I) => {\n    throw new G(I.L.P.M.name + \" instance already deleted\");\n  }, aA = !1, OA = () => {\n  }, b = (I) => typeof FinalizationRegistry > \"u\" ? (b = (A) => A, I) : (aA = new FinalizationRegistry((A) => {\n    A = A.L, --A.count.value, A.count.value === 0 && (A.S ? A.W.Y(A.S) : A.P.M.Y(A.O));\n  }), b = (A) => {\n    var g = A.L;\n    return g.S && aA.register(A, { L: g }, A), A;\n  }, OA = (A) => {\n    aA.unregister(A);\n  }, b(I));\n  function DA() {\n  }\n  var iA = (I, A) => Object.defineProperty(A, \"name\", { value: I }), PA = {}, uA = (I, A, g) => {\n    if (I[A].R === void 0) {\n      var B = I[A];\n      I[A] = function(...Q) {\n        if (!I[A].R.hasOwnProperty(Q.length)) throw new G(`Function '${g}' called with an invalid number of arguments (${Q.length}) - expects one of (${I[A].R})!`);\n        return I[A].R[Q.length].apply(this, Q);\n      }, I[A].R = [], I[A].R[B.aa] = B;\n    }\n  }, hA = (I, A, g) => {\n    if (i.hasOwnProperty(I)) {\n      if (g === void 0 || i[I].R !== void 0 && i[I].R[g] !== void 0) throw new G(`Cannot register public name '${I}' twice`);\n      if (uA(i, I, I), i[I].R.hasOwnProperty(g)) throw new G(`Cannot register multiple overloads of a function with the same number of arguments (${g})!`);\n      i[I].R[g] = A;\n    } else i[I] = A, i[I].aa = g;\n  }, MI = (I) => {\n    I = I.replace(/[^a-zA-Z0-9_]/g, \"$\");\n    var A = I.charCodeAt(0);\n    return 48 <= A && 57 >= A ? `_${I}` : I;\n  };\n  function NI(I, A, g, B, Q, E, C, D) {\n    this.name = I, this.constructor = A, this.$ = g, this.Y = B, this.U = Q, this.ra = E, this.ea = C, this.pa = D, this.ya = [];\n  }\n  var MA = (I, A, g) => {\n    for (; A !== g; ) {\n      if (!A.ea) throw new G(`Expected null or instance of ${g.name}, got an instance of ${A.name}`);\n      I = A.ea(I), A = A.U;\n    }\n    return I;\n  }, NA = (I) => {\n    if (I === null) return \"null\";\n    var A = typeof I;\n    return A === \"object\" || A === \"array\" || A === \"function\" ? I.toString() : \"\" + I;\n  };\n  function UI(I, A) {\n    if (A === null) {\n      if (this.ha) throw new G(`null is not a valid ${this.name}`);\n      return 0;\n    }\n    if (!A.L) throw new G(`Cannot pass \"${NA(A)}\" as a ${this.name}`);\n    if (!A.L.O) throw new G(`Cannot pass deleted object as a pointer of type ${this.name}`);\n    return MA(A.L.O, A.L.P.M, this.M);\n  }\n  function SI(I, A) {\n    if (A === null) {\n      if (this.ha) throw new G(`null is not a valid ${this.name}`);\n      if (this.ga) {\n        var g = this.ia();\n        return I !== null && I.push(this.Y, g), g;\n      }\n      return 0;\n    }\n    if (!A || !A.L) throw new G(`Cannot pass \"${NA(A)}\" as a ${this.name}`);\n    if (!A.L.O) throw new G(`Cannot pass deleted object as a pointer of type ${this.name}`);\n    if (!this.fa && A.L.P.fa) throw new G(`Cannot convert argument of type ${A.L.W ? A.L.W.name : A.L.P.name} to parameter type ${this.name}`);\n    if (g = MA(A.L.O, A.L.P.M, this.M), this.ga) {\n      if (A.L.S === void 0) throw new G(\"Passing raw pointer to smart pointer is illegal\");\n      switch (this.Da) {\n        case 0:\n          if (A.L.W === this) g = A.L.S;\n          else throw new G(`Cannot convert argument of type ${A.L.W ? A.L.W.name : A.L.P.name} to parameter type ${this.name}`);\n          break;\n        case 1:\n          g = A.L.S;\n          break;\n        case 2:\n          if (A.L.W === this) g = A.L.S;\n          else {\n            var B = A.clone();\n            g = this.za(g, LA(() => B.delete())), I !== null && I.push(this.Y, g);\n          }\n          break;\n        default:\n          throw new G(\"Unsupporting sharing policy\");\n      }\n    }\n    return g;\n  }\n  function JI(I, A) {\n    if (A === null) {\n      if (this.ha) throw new G(`null is not a valid ${this.name}`);\n      return 0;\n    }\n    if (!A.L) throw new G(`Cannot pass \"${NA(A)}\" as a ${this.name}`);\n    if (!A.L.O) throw new G(`Cannot pass deleted object as a pointer of type ${this.name}`);\n    if (A.L.P.fa) throw new G(`Cannot convert argument of type ${A.L.P.name} to parameter type ${this.name}`);\n    return MA(A.L.O, A.L.P.M, this.M);\n  }\n  var mA = (I, A, g) => A === g ? I : g.U === void 0 ? null : (I = mA(I, A, g.U), I === null ? null : g.pa(I)), YI = {}, LI = (I, A) => {\n    if (A === void 0) throw new G(\"ptr should not be undefined\");\n    for (; I.U; ) A = I.ea(A), I = I.U;\n    return YI[A];\n  }, wA = (I, A) => {\n    if (!A.P || !A.O) throw new EA(\"makeClassHandle requires ptr and ptrType\");\n    if (!!A.W != !!A.S) throw new EA(\"Both smartPtrType and smartPtr must be specified\");\n    return A.count = { value: 1 }, b(Object.create(I, { L: { value: A, writable: !0 } }));\n  };\n  function oA(I, A, g, B, Q, E, C, D, o, F, w) {\n    this.name = I, this.M = A, this.ha = g, this.fa = B, this.ga = Q, this.xa = E, this.Da = C, this.na = D, this.ia = o, this.za = F, this.Y = w, Q || A.U !== void 0 ? this.T = SI : (this.T = B ? UI : JI, this.V = null);\n  }\n  var bA = (I, A, g) => {\n    if (!i.hasOwnProperty(I)) throw new EA(\"Replacing nonexistent public symbol\");\n    i[I].R !== void 0 && g !== void 0 ? i[I].R[g] = A : (i[I] = A, i[I].aa = g);\n  }, zA, H = (I, A) => {\n    I = h(I);\n    var g = zA.get(A);\n    if (typeof g != \"function\") throw new G(`unknown function pointer with signature ${I}: ${A}`);\n    return g;\n  };\n  class kI extends Error {\n  }\n  var vA = (I) => {\n    I = EI(I);\n    var A = h(I);\n    return q(I), A;\n  }, FA = (I, A) => {\n    function g(E) {\n      Q[E] || d[E] || (CA[E] ? CA[E].forEach(g) : (B.push(E), Q[E] = !0));\n    }\n    var B = [], Q = {};\n    throw A.forEach(g), new kI(`${I}: ` + B.map(vA).join([\", \"]));\n  }, UA = (I, A) => {\n    for (var g = [], B = 0; B < I; B++) g.push(a[A + 4 * B >> 2]);\n    return g;\n  };\n  function $A(I) {\n    for (var A = 1; A < I.length; ++A) if (I[A] !== null && I[A].V === void 0) return !0;\n    return !1;\n  }\n  function SA(I, A, g, B, Q, E) {\n    var C = A.length;\n    if (2 > C) throw new G(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n    var D = A[1] !== null && g !== null, o = $A(A);\n    g = !A[0].ma;\n    var F = A[0], w = A[1];\n    for (B = [I, aI, B, Q, sA, F.N.bind(F), w == null ? void 0 : w.T.bind(w)], Q = 2; Q < C; ++Q) F = A[Q], B.push(F.T.bind(F));\n    if (!o) for (Q = D ? 1 : 2; Q < A.length; ++Q) A[Q].V !== null && B.push(A[Q].V);\n    for (o = $A(A), Q = A.length - 2, w = [], F = [\"fn\"], D && F.push(\"thisWired\"), C = 0; C < Q; ++C) w.push(`arg${C}`), F.push(`arg${C}Wired`);\n    w = w.join(\",\"), F = F.join(\",\"), w = `return function (${w}) {\n`, o && (w += `var destructors = [];\n`);\n    var y = o ? \"destructors\" : \"null\", U = \"humanName throwBindingError invoker fn runDestructors fromRetWire toClassParamWire\".split(\" \");\n    for (D && (w += `var thisWired = toClassParamWire(${y}, this);\n`), C = 0; C < Q; ++C) {\n      var M = `toArg${C}Wire`;\n      w += `var arg${C}Wired = ${M}(${y}, arg${C});\n`, U.push(M);\n    }\n    if (w += (g || E ? \"var rv = \" : \"\") + `invoker(${F});\n`, o) w += `runDestructors(destructors);\n`;\n    else for (C = D ? 1 : 2; C < A.length; ++C) E = C === 1 ? \"thisWired\" : \"arg\" + (C - 2) + \"Wired\", A[C].V !== null && (w += `${E}_dtor(${E});\n`, U.push(`${E}_dtor`));\n    return g && (w += `var ret = fromRetWire(rv);\nreturn ret;\n`), A = new Function(U, w + `}\n`)(...B), iA(I, A);\n  }\n  for (var _A = (I) => {\n    I = I.trim();\n    const A = I.indexOf(\"(\");\n    return A === -1 ? I : I.slice(0, A);\n  }, AI = [], j = [0, 1, , 1, null, 1, !0, 1, !1, 1], JA = (I) => {\n    9 < I && --j[I + 1] === 0 && (j[I] = void 0, AI.push(I));\n  }, YA = (I) => {\n    if (!I) throw new G(`Cannot use deleted val. handle = ${I}`);\n    return j[I];\n  }, LA = (I) => {\n    switch (I) {\n      case void 0:\n        return 2;\n      case null:\n        return 4;\n      case !0:\n        return 6;\n      case !1:\n        return 8;\n      default:\n        const A = AI.pop() || j.length;\n        return j[A] = I, j[A + 1] = 1, A;\n    }\n  }, II = { name: \"emscripten::val\", N: (I) => {\n    var A = YA(I);\n    return JA(I), A;\n  }, T: (I, A) => LA(A), X: m, V: null }, cI = (I, A, g) => {\n    switch (A) {\n      case 1:\n        return g ? function(B) {\n          return this.N(BA[B]);\n        } : function(B) {\n          return this.N(c[B]);\n        };\n      case 2:\n        return g ? function(B) {\n          return this.N(O[B >> 1]);\n        } : function(B) {\n          return this.N(P[B >> 1]);\n        };\n      case 4:\n        return g ? function(B) {\n          return this.N(W[B >> 2]);\n        } : function(B) {\n          return this.N(a[B >> 2]);\n        };\n      default:\n        throw new TypeError(`invalid integer width (${A}): ${I}`);\n    }\n  }, gI = (I, A) => {\n    var g = d[I];\n    if (g === void 0) throw I = `${A} has unknown type ${vA(I)}`, new G(I);\n    return g;\n  }, HI = (I, A) => {\n    switch (A) {\n      case 4:\n        return function(g) {\n          return this.N(eA[g >> 2]);\n        };\n      case 8:\n        return function(g) {\n          return this.N(dA[g >> 3]);\n        };\n      default:\n        throw new TypeError(`invalid float width (${A}): ${I}`);\n    }\n  }, tI = Object.assign({ optional: !0 }, II), V = (I, A, g) => {\n    var B = c;\n    if (!(0 < g)) return 0;\n    var Q = A;\n    g = A + g - 1;\n    for (var E = 0; E < I.length; ++E) {\n      var C = I.codePointAt(E);\n      if (127 >= C) {\n        if (A >= g) break;\n        B[A++] = C;\n      } else if (2047 >= C) {\n        if (A + 1 >= g) break;\n        B[A++] = 192 | C >> 6, B[A++] = 128 | C & 63;\n      } else if (65535 >= C) {\n        if (A + 2 >= g) break;\n        B[A++] = 224 | C >> 12, B[A++] = 128 | C >> 6 & 63, B[A++] = 128 | C & 63;\n      } else {\n        if (A + 3 >= g) break;\n        B[A++] = 240 | C >> 18, B[A++] = 128 | C >> 12 & 63, B[A++] = 128 | C >> 6 & 63, B[A++] = 128 | C & 63, E++;\n      }\n    }\n    return B[A] = 0, A - Q;\n  }, BI = (I) => {\n    for (var A = 0, g = 0; g < I.length; ++g) {\n      var B = I.charCodeAt(g);\n      127 >= B ? A++ : 2047 >= B ? A += 2 : 55296 <= B && 57343 >= B ? (A += 4, ++g) : A += 3;\n    }\n    return A;\n  }, QI = new TextDecoder(), kA = (I, A, g, B) => {\n    if (g = A + g, B) return g;\n    for (; I[A] && !(A >= g); ) ++A;\n    return A;\n  }, KI = new TextDecoder(\"utf-16le\"), rI = (I, A, g) => (I >>= 1, KI.decode(P.subarray(I, kA(P, I, A / 2, g)))), nI = (I, A, g) => {\n    if (g ?? (g = 2147483647), 2 > g) return 0;\n    g -= 2;\n    var B = A;\n    g = g < 2 * I.length ? g / 2 : I.length;\n    for (var Q = 0; Q < g; ++Q) O[A >> 1] = I.charCodeAt(Q), A += 2;\n    return O[A >> 1] = 0, A - B;\n  }, qI = (I) => 2 * I.length, fI = (I, A, g) => {\n    var B = \"\";\n    I >>= 2;\n    for (var Q = 0; !(Q >= A / 4); Q++) {\n      var E = a[I + Q];\n      if (!E && !g) break;\n      B += String.fromCodePoint(E);\n    }\n    return B;\n  }, eI = (I, A, g) => {\n    if (g ?? (g = 2147483647), 4 > g) return 0;\n    var B = A;\n    g = B + g - 4;\n    for (var Q = 0; Q < I.length; ++Q) {\n      var E = I.codePointAt(Q);\n      if (65535 < E && Q++, W[A >> 2] = E, A += 4, A + 4 > g) break;\n    }\n    return W[A >> 2] = 0, A - B;\n  }, dI = (I) => {\n    for (var A = 0, g = 0; g < I.length; ++g) 65535 < I.codePointAt(g) && g++, A += 4;\n    return A;\n  }, cA = [], lI = (I) => {\n    var A = cA.length;\n    return cA.push(I), A;\n  }, xI = (I, A) => {\n    for (var g = Array(I), B = 0; B < I; ++B) g[B] = gI(a[A + 4 * B >> 2], `parameter ${B}`);\n    return g;\n  }, WI = (I, A, g) => {\n    var B = [];\n    return I = I(B, g), B.length && (a[A >> 2] = LA(B)), I;\n  }, ZI = {}, jI = (I) => {\n    var A = ZI[I];\n    return A === void 0 ? h(I) : A;\n  }, HA = {}, CI = () => {\n    if (!tA) {\n      var I = { USER: \"web_user\", LOGNAME: \"web_user\", PATH: \"/\", PWD: \"/\", HOME: \"/home/web_user\", LANG: (typeof navigator == \"object\" && navigator.language || \"C\").replace(\"-\", \"_\") + \".UTF-8\", _: x || \"./this.program\" }, A;\n      for (A in HA) HA[A] === void 0 ? delete I[A] : I[A] = HA[A];\n      var g = [];\n      for (A in I) g.push(`${A}=${I[A]}`);\n      tA = g;\n    }\n    return tA;\n  }, tA, VI = [null, [], []], t = new Uint8Array(123), n = 25; 0 <= n; --n) t[48 + n] = 52 + n, t[65 + n] = n, t[97 + n] = 26 + n;\n  t[43] = 62, t[47] = 63, (() => {\n    let I = DA.prototype;\n    Object.assign(I, { isAliasOf: function(g) {\n      if (!(this instanceof DA && g instanceof DA)) return !1;\n      var B = this.L.P.M, Q = this.L.O;\n      g.L = g.L;\n      var E = g.L.P.M;\n      for (g = g.L.O; B.U; ) Q = B.ea(Q), B = B.U;\n      for (; E.U; ) g = E.ea(g), E = E.U;\n      return B === E && Q === g;\n    }, clone: function() {\n      if (this.L.O || yA(this), this.L.da) return this.L.count.value += 1, this;\n      var g = b, B = Object, Q = B.create, E = Object.getPrototypeOf(this), C = this.L;\n      return g = g(Q.call(B, E, { L: { value: { count: C.count, ba: C.ba, da: C.da, O: C.O, P: C.P, S: C.S, W: C.W } } })), g.L.count.value += 1, g.L.ba = !1, g;\n    }, delete() {\n      if (this.L.O || yA(this), this.L.ba && !this.L.da) throw new G(\"Object already scheduled for deletion\");\n      OA(this);\n      var g = this.L;\n      --g.count.value, g.count.value === 0 && (g.S ? g.W.Y(g.S) : g.P.M.Y(g.O)), this.L.da || (this.L.S = void 0, this.L.O = void 0);\n    }, isDeleted: function() {\n      return !this.L.O;\n    }, deleteLater: function() {\n      if (this.L.O || yA(this), this.L.ba && !this.L.da) throw new G(\"Object already scheduled for deletion\");\n      return this.L.ba = !0, this;\n    } });\n    const A = Symbol.dispose;\n    A && (I[A] = I.delete);\n  })(), Object.assign(oA.prototype, { sa(I) {\n    return this.na && (I = this.na(I)), I;\n  }, ka(I) {\n    var A;\n    (A = this.Y) == null || A.call(this, I);\n  }, X: m, N: function(I) {\n    function A() {\n      return this.ga ? wA(this.M.$, { P: this.xa, O: g, W: this, S: I }) : wA(this.M.$, { P: this, O: I });\n    }\n    var g = this.sa(I);\n    if (!g) return this.ka(I), null;\n    var B = LI(this.M, g);\n    if (B !== void 0)\n      return B.L.count.value === 0 ? (B.L.O = g, B.L.S = I, B.clone()) : (B = B.clone(), this.ka(I), B);\n    if (B = this.M.ra(g), B = PA[B], !B) return A.call(this);\n    B = this.fa ? B.oa : B.pointerType;\n    var Q = mA(g, this.M, B.M);\n    return Q === null ? A.call(this) : this.ga ? wA(B.M.$, { P: B, O: Q, W: this, S: I }) : wA(B.M.$, { P: B, O: Q });\n  } }), i.print && (qA = i.print), i.printErr && (_ = i.printErr), i.wasmBinary && (GA = i.wasmBinary), i.thisProgram && (x = i.thisProgram);\n  var EI, KA, q, XI = { x: () => jA(\"\"), q: (I) => {\n    var A = QA[I];\n    delete QA[I];\n    var g = A.ia, B = A.Y, Q = A.la, E = Q.map((C) => C.va).concat(Q.map((C) => C.Ba));\n    l([I], E, (C) => {\n      var D = {};\n      return Q.forEach((o, F) => {\n        var w = C[F], y = o.ta, U = o.ua, M = C[F + Q.length], N = o.Aa, Y = o.Ca;\n        D[o.qa] = { read: (K) => w.N(y(U, K)), write: (K, z) => {\n          var S = [];\n          N(Y, K, M.T(S, z)), sA(S);\n        }, optional: C[F].optional };\n      }), [{ name: A.name, N: (o) => {\n        var F = {}, w;\n        for (w in D) F[w] = D[w].read(o);\n        return B(o), F;\n      }, T: (o, F) => {\n        for (var w in D) if (!(w in F || D[w].optional)) throw new TypeError(`Missing field: \"${w}\"`);\n        var y = g();\n        for (w in D) D[w].write(y, F[w]);\n        return o !== null && o.push(B, y), y;\n      }, X: m, V: B }];\n    });\n  }, n: (I, A, g, B, Q) => {\n    A = h(A), B = B === 0n;\n    let E = (C) => C;\n    if (B) {\n      const C = 8 * g;\n      E = (D) => BigInt.asUintN(C, D), Q = E(Q);\n    }\n    J(I, { name: A, N: E, T: (C, D) => (typeof D == \"number\" && (D = BigInt(D)), D), X: pA(A, g, !B), V: null });\n  }, B: (I, A, g, B) => {\n    A = h(A), J(I, { name: A, N: function(Q) {\n      return !!Q;\n    }, T: function(Q, E) {\n      return E ? g : B;\n    }, X: function(Q) {\n      return this.N(c[Q]);\n    }, V: null });\n  }, j: (I, A, g, B, Q, E, C, D, o, F, w, y, U) => {\n    w = h(w), E = H(Q, E), D && (D = H(C, D)), F && (F = H(o, F)), U = H(y, U);\n    var M = MI(w);\n    hA(M, function() {\n      FA(\n        `Cannot construct ${w} due to unbound types`,\n        [B]\n      );\n    }), l([I, A, g], B ? [B] : [], (N) => {\n      if (N = N[0], B)\n        var Y = N.M, K = Y.$;\n      else K = DA.prototype;\n      N = iA(w, function(...nA) {\n        if (Object.getPrototypeOf(this) !== z) throw new G(`Use 'new' to construct ${w}`);\n        if (S.Z === void 0) throw new G(`${w} has no accessible constructor`);\n        var iI = S.Z[nA.length];\n        if (iI === void 0) throw new G(`Tried to invoke ctor of ${w} with invalid number of parameters (${nA.length}) - expected (${Object.keys(S.Z).toString()}) parameters instead!`);\n        return iI.apply(this, nA);\n      });\n      var z = Object.create(K, { constructor: { value: N } });\n      N.prototype = z;\n      var S = new NI(w, N, z, U, Y, E, D, F);\n      if (S.U) {\n        var v;\n        (v = S.U).ja ?? (v.ja = []), S.U.ja.push(S);\n      }\n      return Y = new oA(w, S, !0, !1, !1), v = new oA(w + \"*\", S, !1, !1, !1), K = new oA(w + \" const*\", S, !1, !0, !1), PA[I] = { pointerType: v, oa: K }, bA(M, N), [Y, v, K];\n    });\n  }, g: (I, A, g, B, Q, E) => {\n    var C = UA(A, g);\n    Q = H(B, Q), l([], [I], (D) => {\n      D = D[0];\n      var o = `constructor ${D.name}`;\n      if (D.M.Z === void 0 && (D.M.Z = []), D.M.Z[A - 1] !== void 0) throw new G(`Cannot register multiple constructors with identical number of parameters (${A - 1}) for class '${D.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);\n      return D.M.Z[A - 1] = () => {\n        FA(`Cannot construct ${D.name} due to unbound types`, C);\n      }, l([], C, (F) => (F.splice(1, 0, null), D.M.Z[A - 1] = SA(o, F, null, Q, E), [])), [];\n    });\n  }, b: (I, A, g, B, Q, E, C, D, o) => {\n    var F = UA(g, B);\n    A = h(A), A = _A(A), E = H(Q, E), l([], [I], (w) => {\n      function y() {\n        FA(`Cannot call ${U} due to unbound types`, F);\n      }\n      w = w[0];\n      var U = `${w.name}.${A}`;\n      A.startsWith(\"@@\") && (A = Symbol[A.substring(2)]), D && w.M.ya.push(A);\n      var M = w.M.$, N = M[A];\n      return N === void 0 || N.R === void 0 && N.className !== w.name && N.aa === g - 2 ? (y.aa = g - 2, y.className = w.name, M[A] = y) : (uA(\n        M,\n        A,\n        U\n      ), M[A].R[g - 2] = y), l([], F, (Y) => (Y = SA(U, Y, w, E, C, o), M[A].R === void 0 ? (Y.aa = g - 2, M[A] = Y) : M[A].R[g - 2] = Y, [])), [];\n    });\n  }, z: (I) => J(I, II), r: (I, A, g, B) => {\n    function Q() {\n    }\n    A = h(A), Q.values = {}, J(I, { name: A, constructor: Q, N: function(E) {\n      return this.constructor.values[E];\n    }, T: (E, C) => C.value, X: cI(A, g, B), V: null }), hA(A, Q);\n  }, d: (I, A, g) => {\n    var B = gI(I, \"enum\");\n    A = h(A), I = B.constructor, B = Object.create(B.constructor.prototype, { value: { value: g }, constructor: { value: iA(`${B.name}_${A}`, function() {\n    }) } }), I.values[g] = B, I[A] = B;\n  }, m: (I, A, g) => {\n    A = h(A), J(I, { name: A, N: (B) => B, T: (B, Q) => Q, X: HI(A, g), V: null });\n  }, l: (I, A, g, B, Q, E, C) => {\n    var D = UA(A, g);\n    I = h(I), I = _A(I), Q = H(B, Q), hA(I, function() {\n      FA(`Cannot call ${I} due to unbound types`, D);\n    }, A - 1), l([], D, (o) => (o = [o[0], null].concat(o.slice(1)), bA(I, SA(I, o, null, Q, E, C), A - 1), []));\n  }, c: (I, A, g, B, Q) => {\n    A = h(A);\n    let E = (D) => D;\n    if (B === 0) {\n      var C = 32 - 8 * g;\n      E = (D) => D << C >>> C, Q = E(Q);\n    }\n    J(I, { name: A, N: E, T: (D, o) => o, X: pA(A, g, B !== 0), V: null });\n  }, a: (I, A, g) => {\n    function B(E) {\n      return new Q(BA.buffer, a[E + 4 >> 2], a[E >> 2]);\n    }\n    var Q = [\n      Int8Array,\n      Uint8Array,\n      Int16Array,\n      Uint16Array,\n      Int32Array,\n      Uint32Array,\n      Float32Array,\n      Float64Array,\n      BigInt64Array,\n      BigUint64Array\n    ][A];\n    g = h(g), J(I, { name: g, N: B, X: B }, { wa: !0 });\n  }, h: (I) => {\n    J(I, tI);\n  }, A: (I, A) => {\n    A = h(A), J(I, { name: A, N(g) {\n      var B = (B = g + 4) ? QI.decode(c.subarray(B, kA(c, B, a[g >> 2], !0))) : \"\";\n      return q(g), B;\n    }, T(g, B) {\n      B instanceof ArrayBuffer && (B = new Uint8Array(B));\n      var Q = typeof B == \"string\";\n      if (!(Q || ArrayBuffer.isView(B) && B.BYTES_PER_ELEMENT == 1)) throw new G(\"Cannot pass non-string to std::string\");\n      var E = Q ? BI(B) : B.length, C = KA(4 + E + 1), D = C + 4;\n      return a[C >> 2] = E, Q ? V(B, D, E + 1) : c.set(B, D), g !== null && g.push(q, C), C;\n    }, X: m, V(g) {\n      q(g);\n    } });\n  }, f: (I, A, g) => {\n    if (g = h(g), A === 2)\n      var B = rI, Q = nI, E = qI;\n    else B = fI, Q = eI, E = dI;\n    J(I, { name: g, N: (C) => {\n      var D = B(C + 4, a[C >> 2] * A, !0);\n      return q(C), D;\n    }, T: (C, D) => {\n      if (typeof D != \"string\") throw new G(`Cannot pass non-string to C++ string type ${g}`);\n      var o = E(D), F = KA(4 + o + A);\n      return a[F >> 2] = o / A, Q(D, F + 4, o + A), C !== null && C.push(q, F), F;\n    }, X: m, V(C) {\n      q(C);\n    } });\n  }, i: (I, A, g, B, Q, E) => {\n    QA[I] = { name: h(A), ia: H(g, B), Y: H(Q, E), la: [] };\n  }, e: (I, A, g, B, Q, E, C, D, o, F) => {\n    QA[I].la.push({\n      qa: h(A),\n      va: g,\n      ta: H(B, Q),\n      ua: E,\n      Ba: C,\n      Aa: H(D, o),\n      Ca: F\n    });\n  }, C: (I, A) => {\n    A = h(A), J(I, { ma: !0, name: A, N: () => {\n    }, T: () => {\n    } });\n  }, p: (I, A, g) => {\n    var [B, ...Q] = xI(I, A);\n    A = B.T.bind(B);\n    var E = Q.map((o) => o.X.bind(o));\n    I--;\n    var C = { toValue: YA };\n    switch (I = E.map((o, F) => {\n      var w = `argFromPtr${F}`;\n      return C[w] = o, `${w}(args${F ? \"+\" + 8 * F : \"\"})`;\n    }), g) {\n      case 0:\n        var D = \"toValue(handle)\";\n        break;\n      case 2:\n        D = \"new (toValue(handle))\";\n        break;\n      case 3:\n        D = \"\";\n        break;\n      case 1:\n        C.getStringOrSymbol = jI, D = \"toValue(handle)[getStringOrSymbol(methodName)]\";\n    }\n    return D += `(${I})`, B.ma || (C.toReturnWire = A, C.emval_returnValue = WI, D = `return emval_returnValue(toReturnWire, destructorsRef, ${D})`), D = `return function (handle, methodName, destructorsRef, args) {\n  ${D}\n  }`, g = new Function(Object.keys(C), D)(...Object.values(C)), D = `methodCaller<(${Q.map((o) => o.name)}) => ${B.name}>`, lI(iA(D, g));\n  }, E: JA, o: (I, A, g, B, Q) => cA[I](A, g, B, Q), D: (I) => {\n    var A = YA(I);\n    sA(A), JA(I);\n  }, s: (I, A, g, B) => {\n    var Q = (/* @__PURE__ */ new Date()).getFullYear(), E = new Date(Q, 0, 1).getTimezoneOffset();\n    Q = new Date(Q, 6, 1).getTimezoneOffset(), a[I >> 2] = 60 * Math.max(E, Q), W[A >> 2] = +(E != Q), A = (C) => {\n      var D = Math.abs(C);\n      return `UTC${0 <= C ? \"-\" : \"+\"}${String(Math.floor(D / 60)).padStart(2, \"0\")}${String(D % 60).padStart(2, \"0\")}`;\n    }, I = A(E), A = A(Q), Q < E ? (V(I, g, 17), V(A, B, 17)) : (V(I, B, 17), V(A, g, 17));\n  }, y: (I) => {\n    var A = c.length;\n    if (I >>>= 0, 2147483648 < I) return !1;\n    for (var g = 1; 4 >= g; g *= 2) {\n      var B = A * (1 + 0.2 / g);\n      B = Math.min(B, I + 100663296);\n      A: {\n        B = (Math.min(2147483648, 65536 * Math.ceil(Math.max(I, B) / 65536)) - gA.buffer.byteLength + 65535) / 65536 | 0;\n        try {\n          gA.grow(B), ZA();\n          var Q = 1;\n          break A;\n        } catch {\n        }\n        Q = void 0;\n      }\n      if (Q) return !0;\n    }\n    return !1;\n  }, t: (I, A) => {\n    var g = 0, B = 0, Q;\n    for (Q of CI()) {\n      var E = A + g;\n      a[I + B >> 2] = E, g += V(Q, E, 1 / 0) + 1, B += 4;\n    }\n    return 0;\n  }, u: (I, A) => {\n    var g = CI();\n    a[I >> 2] = g.length, I = 0;\n    for (var B of g) I += BI(B) + 1;\n    return a[A >> 2] = I, 0;\n  }, v: () => 52, w: function() {\n    return 70;\n  }, k: (I, A, g, B) => {\n    for (var Q = 0, E = 0; E < g; E++) {\n      var C = a[A >> 2], D = a[A + 4 >> 2];\n      A += 8;\n      for (var o = 0; o < D; o++) {\n        var F = I, w = c[C + o], y = VI[F];\n        w === 0 || w === 10 ? (F = F === 1 ? qA : _, w = kA(y, 0), w = QI.decode(y.buffer ? y.subarray(0, w) : new Uint8Array(y.slice(0, w))), F(w), y.length = 0) : y.push(w);\n      }\n      Q += D;\n    }\n    return a[B >> 2] = Q, 0;\n  } }, X = await async function() {\n    var g;\n    function I(B) {\n      var Q;\n      return X = B.exports, gA = X.F, ZA(), zA = X.H, B = X, EI = B.I, i._malloc = KA = B.J, i._free = q = B.K, e--, (Q = i.monitorRunDependencies) == null || Q.call(i, e), e == 0 && u && (B = u, u = null, B()), X;\n    }\n    e++, (g = i.monitorRunDependencies) == null || g.call(i, e);\n    var A = { a: XI };\n    return i.instantiateWasm ? new Promise((B) => {\n      i.instantiateWasm(A, (Q, E) => {\n        B(I(Q));\n      });\n    }) : (RA ?? (RA = yI(\"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C0EAEKEDRQRAQZiDASEBIARBmIMBQRgQiwFFDQJBsIMBIQEgBEGwgwFBGBCLAUUNAkEAIQBBvO4BLQAARQRAA0AgAEECdCAAQcYfEKIDNgKM7gEgAEEBaiIAQQZHDQALQbzuAUEBOgAAQaTuAUGM7gEoAgA2AgALQYzuASEBIAJBCGoiAEGM7gFBGBCLAUUNAkGk7gEhASAAQaTuAUEYEIsBRQ0CQRgQNCIBRQ0BCyABIAIpAgg3AgAgASACKQIYNwIQIAEgAikCEDcCCAwBC0EAIQELIAJBIGokAEGc8QFBAToAAEGY8QEgATYCACABC80KAgV/CX4jAEHgAGsiBSQAIARC////////P4MhCiACIASFQoCAgICAgICAgH+DIQsgAkL///////8/gyIMQiCIIQ8gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCwwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCELIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACELQgAhAQwDCyALQoCAgICAgMD//wCEIQtCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASANhEIAIQFQBEBCgICAgICA4P//ACELDAMLIAtCgICAgICAwP//AIQhCwwCCyABIA2EUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyANQv///////z9YBEAgBUHQAGogASAMIAEgDCAMUCIGG3lCwABCACAGG3ynIgZBD2sQREEQIAZrIQYgBSkDWCIMQiCIIQ8gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAogAyAKIApQIggbeULAAEIAIAgbfKciCEEPaxBEIAYgCGtBEGohBiAFKQNIIQogBSkDQCEDCyAHIAlqIAZqQf//AGshBgJAIApCD4YiDkIgiEKAgICACIQiAiABQiCIIgR+IhAgA0IPhiIRQiCIIgogD0KAgASEIg1+fCIPIBBUrSAPIANCMYggDoRC/////w+DIgMgDEL/////D4MiDH58Ig4gD1StfCACIA1+fCAOIA4gEUKAgP7/D4MiDyAMfiIRIAQgCn58IhAgEVStIBAgECADIAFC/////w+DIgF+fCIQVq18fCIOVq18IAMgDX4iEiACIAx+fCIRIBJUrUIghiARQiCIhHwgDiAOIBFCIIZ8Ig5WrXwgDiANIA9+Ig0gCiAMfnwiDCABIAJ+fCICIAMgBH58IgNCIIggAiADVq0gDCANVK0gAiAMVK18fEIghoR8IgIgDlStfCACIBAgBCAPfiIMIAEgCn58IgRCIIggBCAMVK1CIIaEfCIKIBBUrSAKIANCIIZ8IgMgClStfHwiCiACVK18IAogAyAEQiCGIgIgASAPfnwiASACVK18IgIgA1StfCIEIApUrXwiA0KAgICAgIDAAINQRQRAIAZBAWohBgwBCyABQj+IIANCAYYgBEI/iIQhAyAEQgGGIAJCP4iEIQQgAUIBhiEBIAJCAYaEIQILIAZB//8BTgRAIAtCgICAgICAwP//AIQhC0IAIQEMAQsCfiAGQQBMBEBBASAGayIHQf8ATQRAIAVBMGogASACIAZB/wBqIgYQRCAFQSBqIAQgAyAGEEQgBUEQaiABIAIgBxCKASAFIAQgAyAHEIoBIAUpAzAgBSkDOIRCAFKtIAUpAyAgBSkDEISEIQEgBSkDKCAFKQMYhCECIAUpAwAhBCAFKQMIDAILQgAhAQwCCyADQv///////z+DIAatQjCGhAsgC4QhCyABUCACQgBZIAJCgICAgICAgICAf1EbRQRAIAsgBEIBfCIBUK18IQsMAQsgASACQoCAgICAgICAgH+FhFBFBEAgBCEBDAELIAsgBCAEQgGDfCIBIARUrXwhCwsgACABNwMAIAAgCzcDCCAFQeAAaiQACwYAIAAQLQt8AQN/IwBBEGsiASQAIAEgADYCDCMAQRBrIgIkACAAKAIAQX9HBEAgAkEIaiACQQxqIAFBDGoQVRBVIQMDQCAAKAIAQQFGDQALIAAoAgBFBEAgAEEBNgIAIAMQ0gIgAEF/NgIACwsgAkEQaiQAIAAoAgQgAUEQaiQAQQFrCyAAIAAgAUEBazYCBCAAQeDVATYCACAAQZCtATYCACAAC/cFAQl/IwBBEGsiCSQAIAEQ1wIgCUEMaiABEFUhCCAAQQhqIgMQayACTQRAAkAgAkEBaiIAIAMQayIBSwRAIwBBIGsiCiQAAkAgACABayIHIAMoAgggAygCBGtBAnVNBEAgAyAHENkCDAELIApBDGohAQJ/IAMQayAHaiEFIwBBEGsiACQAIAAgBTYCDCAFELwCIgRNBEAgAxC5AiIFIARBAXZJBEAgACAFQQF0NgIIIABBCGogAEEMahCgASgCACEECyAAQRBqJAAgBAwBCxCMAQALIQQgAxBrIQUjAEEQayIAJAAgASADQQxqIgs2AhAgAUEANgIMIAQEfyAAQQhqIAsgBBC7AiAAKAIIIQYgACgCDAVBAAshBCABIAY2AgAgASAGIAVBAnRqIgU2AgggASAGIARBAnRqNgIMIAEgBTYCBCAAQRBqJAAjAEEQayIGJAAgASgCCCEEIAZBBGoiACABQQhqNgIIIAAgBDYCACAAIAQgB0ECdGo2AgQgACgCACEEA0AgACgCBCAERwRAIAEoAhAaIAQQugIgACAAKAIAQQRqIgQ2AgAMAQsLIAAoAgggACgCADYCACAGQRBqJAAgASgCBCADKAIAIgAgAygCBGtqIQQgAygCBCAAayIHBEAgBCAAIAf8CgAACyABIAQ2AgQgAyADKAIANgIEIAMgAUEEahDXASADQQRqIAFBCGoQ1wEgA0EIaiABQQxqENcBIAEgASgCBDYCACADEGsaIAEoAgQhAANAIAEoAggiBCAARwRAIAEgBEEEazYCCCABKAIQGgwBCwsgASgCACIABEAgASgCECAAIAEoAgwgASgCAGtBAnUQuAILCyAKQSBqJAAMAQsgACABSQRAIAMoAgAgAEECdGohACADEGsaIAMgABDYAgsLCyADIAIQggEoAgAEQCADIAIQggEoAgAQvwELIAgQrAEhACADIAIQggEgADYCACAIKAIAIQAgCEEANgIAIAAEQCAAEL8BCyAJQRBqJAALySgBC38jAEEQayIKJAACQAJAAkACQAJAAkACQAJAAkACQCAAQfQBTQRAQYzqASgCACIEQRAgAEELakH4A3EgAEELSRsiBkEDdiIAdiIBQQNxBEACQCABQX9zQQFxIABqIgJBA3QiAUG06gFqIgAgASgCvOoBIgEoAggiBUYEQEGM6gEgBEF+IAJ3cTYCAAwBCyAFIAA2AgwgACAFNgIICyABQQhqIQAgASACQQN0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KAIAKAIcEQQAC8EBAQN/IAAtAABBIHFFBEACQCAAKAIQIgMEfyADBSAAEN8BDQEgACgCEAsgACgCFCIEayACSQRAIAAgASACIAAoAiQRAwAaDAELAkACQCACRSAAKAJQQQBIcg0AIAIhAwNAIAEgA2oiBUEBay0AAEEKRwRAIANBAWsiAw0BDAILCyAAIAEgAyAAKAIkEQMAIANJDQIgAiADayECIAAoAhQhBAwBCyABIQULIAQgBSACEHEaIAAgACgCFCACajYCFAsLC6EBAQJ/AkAgABAfRSACIAFrQQVIcg0AIAEgAhDHASACQQRrIQQgABAjIgIgABAfaiEFAkADQAJAIAIsAAAhACABIARPDQAgAEEATCAAQf8ATnJFBEAgASgCACACLAAARw0DCyABQQRqIQEgAiAFIAJrQQFKaiECDAELCyAAQQBMIABB/wBOcg0BIAIsAAAgBCgCAEEBa0sNAQsgA0EENgIACwtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAtpAQF/IwBBgAJrIgUkACAEQYDABHEgAiADTHJFBEAgBSABIAIgA2siA0GAAiADQYACSSIBGxCYAiABRQRAA0AgACAFQYACEEIgA0GAAmsiA0H/AUsNAAsLIAAgBSADEEILIAVBgAJqJAALBABBAAsKACAALQALQQd2CwoAIABB0PIBEHoLCgAgAEHY8gEQegvPCQIEfwR+IwBB8ABrIgYkACAEQv///////////wCDIQkCQAJAIAFQIgUgAkL///////////8AgyIKQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIApQG0UEQCADQgBSIAlCgICAgICAwP//AH0iC0KAgICAgIDAgIB/ViALQoCAgICAgMCAgH9RGw0BCyAFIApCgICAgICAwP//AFQgCkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAJQoCAgICAgMD//wBUIAlCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIApCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIFGyEEQgAgASAFGyEDDAILIAMgCUKAgICAgIDA//8AhYRQDQEgASAKhFAEQCADIAmEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAmEUEUNACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL///////8/gyEJIAIgBCAIGyILQjCIp0H//wFxIQcgDEIwiKdB//8BcSIFRQRAIAZB4ABqIAogCSAKIAkgCVAiBRt5QsAAQgAgBRt8pyIFQQ9rEEQgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3lCwABCACAHG3ynIgdBD2sQREEQIAdrIQcgBikDUCEDIAYpA1gLQgOGIANCPYiEQoCAgICAgIAEhCEBIAlCA4YgCkI9iIQgAiAEhSEEAn4gA0IDhiICIAUgB0YNABogBSAHayIHQf8ASwRAQgAhAUIBDAELIAZBQGsgAiABQYABIAdrEEQgBkEwaiACIAEgBxCKASAGKQM4IQEgBikDMCAGKQNAIAYpA0iEQgBSrYQLIQlCgICAgICAgASEIQsgCkIDhiEKAkAgBEIAUwRAQgAhA0IAIQQgCSAKhSABIAuFhFANAiAKIAl9IQIgCyABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5QsAAQgAgBxt8p0EMayIHEEQgBSAHayEFIAYpAyghBCAGKQMgIQIMAQsgCSAKfCICIAlUrSABIAt8fCIEQoCAgICAgIAIg1ANACAJQgGDIARCP4YgAkIBiISEIQIgBUEBaiEFIARCAYghBAsgDEKAgICAgICAgIB/gyEDIAVB//8BTgRAIANCgICAgICAwP//AIQhBEIAIQMMAQtBACEHAkAgBUEASgRAIAUhBwwBCyAGQRBqIAIgBCAFQf8AahBEIAYgAiAEQQEgBWsQigEgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIARCPYYgAkIDiIQhASAEQgOIQv///////z+DIAetQjCGhCADhCEEAkACQCACp0EHcSIFQQRHBEAgBCABIAEgBUEES618IgNWrXwhBAwBCyAEIAEgASABQgGDfCIDVq18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAsRACAAIAEgACgCACgCLBEEAAsIACAAQYABSQsRACACBEAgACABIAL8CgAACwsJACAAECMQ9wELhAECAn8BfiMAQRBrIgMkACAAAn4gAUUEQEIADAELIAMgASABQR91IgJzIAJrIgKtQgAgAmciAkHRAGoQRCADKQMIQoCAgICAgMAAhUGegAEgAmutQjCGfEKAgICAgICAgIB/QgAgAUEASBuEIQQgAykDAAs3AwAgACAENwMIIANBEGokAAsNACAAIAFB/wBxOgALC6oMAQh/An9BACABRQ0AGiAAQX9zIQMgAkEXTwRAAkAgAUEDcUUNACABLQAAIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQFrIgBFIAFBAWoiBEEDcUVyRQRAIAEtAAEgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBAmsiAEUgAUECaiIEQQNxRXJFBEAgAS0AAiADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkEDayIARSABQQNqIgRBA3FFckUEQCABLQADIANzQf8BcUECdCgC0DMgA0EIdnMhAyABQQRqIQEgAkEEayECDAMLIAAhAiAEIQEMAgsgACECIAQhAQwBCyAAIQIgBCEBCyACQRRuIghBbGwhCgJAIAhBAWsiCUUEQEEAIQQMAQsgASEAQQAhBANAIAAoAhAgB3MiB0EWdkH8B3EoAtBTIAdBDnZB/AdxKALQSyAHQQZ2QfwHcSgC0EMgB0H/AXFBAnQoAtA7c3NzIQcgACgCDCAGcyIGQRZ2QfwHcSgC0FMgBkEOdkH8B3EoAtBLIAZBBnZB/AdxKALQQyAGQf8BcUECdCgC0Dtzc3MhBiAAKAIIIARzIgRBFnZB/AdxKALQUyAEQQ52QfwHcSgC0EsgBEEGdkH8B3EoAtBDIARB/wFxQQJ0KALQO3NzcyEEIAAoAgQgBXMiBUEWdkH8B3EoAtBTIAVBDnZB/AdxKALQSyAFQQZ2QfwHcSgC0EMgBUH/AXFBAnQoAtA7c3NzIQUgACgCACADcyIDQRZ2QfwHcSgC0FMgA0EOdkH8B3EoAtBLIANBBnZB/AdxKALQQyADQf8BcUECdCgC0Dtzc3MhAyAAQRRqIQAgCUEBayIJDQALIAEgCEEUbGpBFGshAQsgAiAKaiECIAEoAhAgASgCDCABKAIIIAEoAgQgASgCACADcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQf8BcUECdCgC0DMgBXNzIABBCHZzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBB/wFxQQJ0KALQMyAEc3MgAEEIdnMiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEH/AXFBAnQoAtAzIAZzcyAAQQh2cyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQf8BcUECdCgC0DMgB3NzIABBCHZzIgBBCHYgAEH/AXFBAnQoAtAzcyIAQQh2IABB/wFxQQJ0KALQM3MiAEEIdiAAQf8BcUECdCgC0DNzIgBBCHYgAEH/AXFBAnQoAtAzcyEDIAFBFGohAQsgAkEHSwRAA0AgAS0AACADc0H/AXFBAnQoAtAzIANBCHZzIgBBCHYgAS0AASAAc0H/AXFBAnQoAtAzcyIAQQh2IAEtAAIgAHNB/wFxQQJ0KALQM3MiAEEIdiABLQADIABzQf8BcUECdCgC0DNzIgBBCHYgAS0ABCAAc0H/AXFBAnQoAtAzcyIAQQh2IAEtAAUgAHNB/wFxQQJ0KALQM3MiAEEIdiABLQAGIABzQf8BcUECdCgC0DNzIgBBCHYgAS0AByAAc0H/AXFBAnQoAtAzcyEDIAFBCGohASACQQhrIgJBB0sNAAsLAkAgAkUNACABLQAAIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQFGDQAgAS0AASADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkECRg0AIAEtAAIgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBA0YNACABLQADIANzQf8BcUECdCgC0DMgA0EIdnMhAyACQQRGDQAgAS0ABCADc0H/AXFBAnQoAtAzIANBCHZzIQMgAkEFRg0AIAEtAAUgA3NB/wFxQQJ0KALQMyADQQh2cyEDIAJBBkYNACABLQAGIANzQf8BcUECdCgC0DMgA0EIdnMhAwsgA0F/cwsL5QMBBX8jAEEQayIDJAAgAyAAKAIAIgRBCGsoAgAiAjYCDCADIAAgAmo2AgQgAyAEQQRrKAIANgIIIAMoAggiBCABQQAQOyECIAMoAgQhBQJAIAIEQCADKAIMIQAjAEFAaiIBJAAgAUFAayQAQQAgBSAAGyECDAELIwBBQGoiAiQAIAAgBU4EQCACQgA3AhwgAkIANwIkIAJCADcCLCACQgA3AhQgAkEANgIQIAIgATYCDCACIAQ2AgQgAkEANgI8IAJCgYCAgICAgIABNwI0IAIgADYCCCAEIAJBBGogBSAFQQFBACAEKAIAKAIUEQoAIABBACACKAIcGyEGCyACQUBrJAAgBiICDQAjAEFAaiICJAAgAkEANgIQIAJBlNYBNgIMIAIgADYCCCACIAE2AgRBACEAIAJBFGpBAEEn/AsAIAJBADYCPCACQQE6ADsgBCACQQRqIAVBAUEAIAQoAgAoAhgRCwACQAJAAkAgAigCKA4CAAECCyACKAIYQQAgAigCJEEBRhtBACACKAIgQQFGG0EAIAIoAixBAUYbIQAMAQsgAigCHEEBRwRAIAIoAiwNASACKAIgQQFHDQEgAigCJEEBRw0BCyACKAIUIQALIAJBQGskACAAIQILIANBEGokACACCzwBAn9BASAAIABBAU0bIQEDQAJAIAEQNCIADQBB5P4BKAIAIgJFDQAgAhEMAAwBCwsgAEUEQBDrAQsgAAsUAQF/QQQQUyIBIAAoAgA2AgAgAQsLACAAIAE2AgAgAAsMACAAIAEoAgA2AgALBwAgABAkGgsRACAAIAEgASgCACgCFBEBAAsPACAAIAAoAgAoAhARAAALBwAgABAfRQsJAEGFEBCuAgALEAAgACABQYCAgIB4cjYCCAsMACAAIAEtAAA6AAALCwAgAC0AC0H/AHELEwAgACABIAIgACgCACgCDBEDAAsiAQF/IAIQTAR/IAAoAgggAkECdGooAgAgAXFBAEcFQQALC+wBAQN/IABFBEBB0N4BKAIABEBB0N4BKAIAEGEhAQtBgOABKAIABEBBgOABKAIAEGEgAXIhAQtBwOABKAIAIgAEQANAIAAoAkwaIAAoAhQgACgCHEcEQCAAEGEgAXIhAQsgACgCOCIADQALCyABDwsgACgCTEEASCECAkACQCAAKAIUIAAoAhxGDQAgAEEAQQAgACgCJBEDABogACgCFA0AQX8hAQwBCyAAKAIEIgEgACgCCCIDRwRAIAAgASADa6xBASAAKAIoERYAGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAINAAsgAQsSACAAKAIAIgAEQCAAEJwDGgsLEQAgACABKAIAEJwDNgIAIAALQQEBfyAAIAE3A3AgACAAKAIsIAAoAgQiAmusNwN4IAAgAVAgASAAKAIIIgAgAmusWXIEfyAABSACIAGnags2AmgLHgACQCACRQ0AIAJBAnQiAkUNACAAIAEgAvwKAAALCxYAIAAgASgCADYCACAAIAIoAgA2AgQLtQEBAn8jAEEQayIFJAAgBSABNgIMQQAhAQJAIAICf0EGIAAgBUEMahArDQAaQQQgA0HAACAAEDciBhBfRQ0AGiADIAYQlAEhAQNAAkAgABA+GiABQTBrIQEgACAFQQxqECsgBEECSHINACADQcAAIAAQNyIGEF9FDQMgBEEBayEEIAMgBhCUASABQQpsaiEBDAELCyAAIAVBDGoQK0UNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELtQEBAn8jAEEQayIFJAAgBSABNgIMQQAhAQJAIAICf0EGIAAgBUEMahAsDQAaQQQgA0HAACAAEDgiBhBgRQ0AGiADIAYQlQEhAQNAAkAgABA/GiABQTBrIQEgACAFQQxqECwgBEECSHINACADQcAAIAAQOCIGEGBFDQMgBEEBayEEIAMgBhCVASABQQpsaiEBDAELCyAAIAVBDGoQLEUNAUECCyACKAIAcjYCAAsgBUEQaiQAIAELYwAgAigCBEGwAXEiAkEgRgRAIAEPCwJAIAJBEEcNAAJAAkAgAC0AACICQStrDgMAAQABCyAAQQFqDwsgAkEwRyABIABrQQJIcg0AIAAtAAFBIHJB+ABHDQAgAEECaiEACyAACy4AAkAgACgCBEHKAHEiAARAIABBwABGBEBBCA8LIABBCEcNAUEQDwtBAA8LQQoLEAAgACgCBCAAKAIAa0ECdQvOAQIEfgJ/IwBBEGsiBiQAIAG9IgVC/////////weDIQIgAAJ+IAVCNIhC/w+DIgNQRQRAIANC/w9SBEAgAkIEiCEEIANCgPgAfCEDIAJCPIYMAgsgAkIEiCEEQv//ASEDIAJCPIYMAQsgAlAEQEIAIQNCAAwBCyAGIAJCACACeaciB0ExahBEIAYpAwhCgICAgICAwACFIQRBjPgAIAdrrSEDIAYpAwALNwMAIAAgBUKAgICAgICAgIB/gyADQjCGhCAEhDcDCCAGQRBqJAALsgMBA38jAEEQayIIJAAgCCACNgIIIAggATYCDCAIQQRqIgEgAxAnIAEQSCEJIAEQJSAEQQA2AgBBACEBAkADQCAGIAdGIAFyDQECQCAIQQxqIAhBCGoQKw0AAkAgCSAGKAIAEJQBQSVGBEAgBkEEaiAHRg0CQQAhAgJ/AkAgCSAGKAIEEJQBIgFBxQBGDQBBBCEKIAFB/wFxQTBGDQAgAQwBCyAGQQhqIAdGDQNBCCEKIAEhAiAJIAYoAggQlAELIQEgCCAAIAgoAgwgCCgCCCADIAQgBSABIAIgACgCACgCJBENADYCDCAGIApqQQRqIQYMAQsgCUEBIAYoAgAQXwRAA0AgByAGQQRqIgZHBEAgCUEBIAYoAgAQXw0BCwsDQCAIQQxqIgEgCEEIahArDQIgCUEBIAEQNxBfRQ0CIAEQPhoMAAsACyAJIAhBDGoiARA3EEEgCSAGKAIAEEFGBEAgBkEEaiEGIAEQPhoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEMaiAIQQhqECsEQCAEIAQoAgBBAnI2AgALIAgoAgwgCEEQaiQAC7QDAQN/IwBBEGsiCCQAIAggAjYCCCAIIAE2AgwgCEEEaiIBIAMQJyABEEkhCSABECUgBEEANgIAQQAhAQJAA0AgBiAHRiABcg0BAkAgCEEMaiAIQQhqECwNAAJAIAkgBiwAABCVAUElRgRAIAZBAWogB0YNAkEAIQICfwJAIAkgBiwAARCVASIBQcUARg0AQQEhCiABQf8BcUEwRg0AIAEMAQsgBkECaiAHRg0DQQIhCiABIQIgCSAGLAACEJUBCyEBIAggACAIKAIMIAgoAgggAyAEIAUgASACIAAoAgAoAiQRDQA2AgwgBiAKakEBaiEGDAELIAlBASAGLAAAEGAEQANAIAcgBkEBaiIGRwRAIAlBASAGLAAAEGANAQsLA0AgCEEMaiIBIAhBCGoQLA0CIAlBASABEDgQYEUNAiABED8aDAALAAsgCSAIQQxqIgEQOBDOASAJIAYsAAAQzgFGBEAgBkEBaiEGIAEQPxoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEMaiAIQQhqECwEQCAEIAQoAgBBAnI2AgALIAgoAgwgCEEQaiQACxYAIAAgASACIAMgACgCACgCMBEJABoLPAAgACwAC0EASARAIAAoAggaIAAoAgAQLQsgACABKQIANwIAIAAgASgCCDYCCCABQQA6AAsgAUEAOgAACxMAIAIEQCAAIAEgAvwKAAALIAALKwEBfyMAQRBrIgIkACACIAE2AgxBwN0BIAAgAUEAQQAQ0QMaIAJBEGokAAsjAQF/IwBBEGsiASQAIAEgADYCDCABQQxqEOwBIAFBEGokAAsMACAAQYKGgCA2AAALEQAgABAjIAAQH0ECdGoQ9wELDQAgACgCACABKAIARgsOACAAECMgABAfahD3AQsPACAAIAAoAgAoAgwRAAALFgAgACABIAIgAyAAKAIAKAIgEQkAGgtEAQF/IAAoAgAhAiABEDEhACACQQhqIgEQayAASwR/IAEgABCCASgCAEEARwVBAAtFBEAQPQALIAJBCGogABCCASgCAAsRACAAIAEgASgCACgCHBEBAAsRACAAIAEgASgCACgCGBEBAAsQACAAQSBGIABBCWtBBUlyCw4AIAAoAghB/////wdxC9cBAQF/AkBBjN4BKAIAIgBBAE4EQCAARQ0BQZThASgCACAAQf////8DcUcNAQsCQEGQ3gEoAgBBCkYNAEHU3QEoAgAiAEHQ3QEoAgBGDQBB1N0BIABBAWo2AgAgAEEKOgAADwtBwN0BEN4BDwtBjN4BQYzeASgCACIAQf////8DIAAbNgIAAkACQEGQ3gEoAgBBCkYNAEHU3QEoAgAiAEHQ3QEoAgBGDQBB1N0BIABBAWo2AgAgAEEKOgAADAELQcDdARDeAQtBjN4BKAIAGkGM3gFBADYCAAvDAQEEfyMAQRBrIgckAAJAIABFDQAgBCgCDCEJIAIgAWsiBkEASgRAIAAgASAGIAAoAgAoAjARAwAgBkcNAQsgAyABayIBIAlIBEAgB0EEaiIGIAkgAWsiASAFELACIAAgBygCBCAGIAcsAA9BAEgbIAEgACgCACgCMBEDACEFIAYQIBogASAFRw0BCyADIAJrIgFBAEoEQCAAIAIgASAAKAIAKAIwEQMAIAFHDQELIARBADYCDCAAIQgLIAdBEGokACAIC14BA38gAEEANgIIIABCADcCACABKAIAIQMgASgCBCIBIANrIgRBAnUiAgRAIAAgAhCuAyAAKAIEIQIgBEUgASADRnJFBEAgAiADIAT8CgAACyAAIAIgBGo2AgQLIAALDQAgACgCACABQQJ0agsXACAAEEcEQCAAIAE2AgQPCyAAIAEQUAthAQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIAIoAggQ8wIgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC6wBAQR/IwBBEGsiByQAAkAgAEUNACAEKAIMIQYgAiABa0ECdSIIQQBKBEAgACABIAgQjQIgCEcNAQsgAyABa0ECdSIBIAZIBEAgACAHQQRqIAYgAWsiASAFEP0CIgUQIyABEI0CIQYgBRA5GiABIAZHDQELIAMgAmtBAnUiAUEASgRAIAAgAiABEI0CIAFHDQELIAQoAgwaIARBADYCDCAAIQkLIAdBEGokACAJCycBAX8jAEEQayIDJAAgAyACNgIMIABB5AAgASACENEBIANBEGokAAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEAgACACVCABIANTIAEgA1EbBEBBfw8LIAAgAoUgASADhYRCAFIPCyAAIAJWIAEgA1UgASADURsEQEF/DwsgACAChSABIAOFhEIAUiEECyAEC+wBAQR/IwBBEGsiBCQAIABBADYCBCMAQRBrIgUkACAEQQA6AA8gACAAKAIAQQxrKAIAahDZASEGIAAgACgCAEEMaygCAGohAwJAIAYEQCADKAJIBEAgACAAKAIAQQxrKAIAaigCSBDFAwsgBCAAIAAoAgBBDGsoAgBqENkBOgAPDAELIANBBBDVAQsgBUEQaiQAQQQhAyAELQAPBEAgACAAIAAoAgBBDGsoAgBqKAIYIgMgASACIAMoAgAoAiARAwAiATYCBEEGQQAgASACRxshAwsgACAAKAIAQQxrKAIAaiADENUBIARB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AxsLPAAgAEEANgIIIABCADcCACAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCABQQA2AgggAUIANwIACywBAX8gAEEANgIIIABCADcCACAAIAEoAgAiAiABKAIEIgEgASACaxDAAyAACwgAIABB/wFxC/wBAQN/IAAoAgQgACgCACIDa0ECdSICIAFJBEAjAEEgayIDJAACQCABIAJrIgIgACgCCCAAKAIEIgFrQQJ1TQRAIAAoAgQiASACQQJ0aiECA0AgASACRgRAIAAgAjYCBAUgAUEANgIAIAFBBGohAQwBCwsMAQsgA0EMaiAAIAEgACgCAGtBAnUgAmoQtgEgACgCBCAAKAIAa0ECdSAAEIcCIgQoAggiASACQQJ0aiECA0AgASACRwRAIAFBADYCACABQQRqIQEMAQsLIAQgAjYCCCAAIAQQhQIgBBCBAgsgA0EgaiQADwsgASACSQRAIAAgAyABQQJ0ajYCBAsLUgECf0HU3gEoAgAiASAAQQdqQXhxIgJqIQACQCACQQAgACABTRtFBEAgAD8AQRB0TQ0BIAAQGA0BC0GI6gFBMDYCAEF/DwtB1N4BIAA2AgAgAQt/AgF+A38CQCAAQoCAgIAQVARAIAAhAgwBCwNAIAFBAWsiASAAIABCCoAiAkIKfn2nQTByOgAAIABC/////58BViACIQANAAsLIAJQRQRAIAKnIQMDQCABQQFrIgEgAyADQQpuIgRBCmxrQTByOgAAIANBCUsgBCEDDQALCyABC78BAQN/IAAoAgQgACgCACIDayICIAFJBEAjAEEgayIDJAACQCABIAJrIgIgACgCCCAAKAIEIgFrTQRAIAAgAhCYAwwBCyACIANBDGogACABIAJqIAAoAgBrELQBIAAoAgQgACgCAGsgABDGASIEKAIIIgFqIQIDQCABIAJHBEAgAUEAOgAAIAFBAWohAQwBCwsgBCACNgIIIAAgBBDvASAEELoBCyADQSBqJAAPCyABIAJJBEAgACABIANqNgIECwt9AQN/AkACQCAAIgFBA3FFDQAgAS0AAEUEQEEADwsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBQYCChAggAigCACIDayADckGAgYKEeHFBgIGChHhGDQALA0AgAiIBQQFqIQIgAS0AAA0ACwsgASAA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BEBBCiEBIAAQXgwBCyAAEH5BAWshASAAKAIECyIDIAFGBEAgACABQQEgASABEPQBIAAQIxoMAQsgABAjGiAEDQAgACIBIANBAWoQUAwBCyAAKAIAIQEgACADQQFqNgIECyABIANqIgAgAkEPahBdIAJBADoADiAAQQFqIAJBDmoQXSACQRBqJAALoQIBA38jAEEgayIIJABB9////wciCSABQX9zaiACTwRAIAAQIyEKIAFB8////wNJBEAgCCABQQF0NgIcIAggASACajYCECAIQRBqIAhBHGoQoAEoAgAQnwFBAWohCQsgCEEcaiAIQRhqIAAQVSgCABC8ASAIQRBqIAkQngEgCCgCECECIAgoAhQaIAQEQCACIAogBBBNCyAGBEAgAiAEaiAHIAYQTQsgAyAEIAVqIglrIQcgAyAJRwRAIAIgBGogBmogBCAKaiAFaiAHEE0LIAFBCkcEQCAKEIsCCyAAIAI2AgAgACAIKAIUEFwgACAEIAZqIAdqIgA2AgQgCEEAOgAPIAAgAmogCEEPahBdIAhBHGoQuwEgCEEgaiQADwsQWwALCQAgAEEBEKgCCwoAIAAoAgAQHxoLCQAgACABEFUaCwcAIABBAkkLBABBBAsoAQF/IAAgACgCBEEBayIBNgIEIAFBf0YEQCAAIAAoAgAoAggRAgALC5UBAQN/IwBBEGsiBCQAIAQgATYCDCAEIAM2AgggBEEEaiAEQQxqEGMgBCgCCCEDIwBBEGsiASQAIAEgAzYCDCABIAM2AghBfyEFAkBBAEEAIAIgAxDRASIDQQBIDQAgACADQQFqIgMQNCIANgIAIABFDQAgACADIAIgASgCDBDRASEFCyABQRBqJAAQYiAEQRBqJAAgBQsPACAAIAAoAgAoAiQRAAALEQAgACABIAEoAgAoAiARAQALDgAgACABKAIANgIAIAALCABB/////wcLBQBB/wALOwAgACADNgIQIAAgAQR/IAEQUwVBAAsiAzYCACAAIAIgA2oiAjYCCCAAIAEgA2o2AgwgACACNgIEIAALYQEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBBGsiATYCCCAAIAFPDQEgAigCDCACKAIIENcBIAIgAigCDEEEaiIANgIMIAIoAgghAQwACwALIAJBEGokAAs5AgF/AX4jAEEQayIEJAAgAykDACEFIAQgAykDCDcDCCAEIAU3AwAgACABIAIgBBDAASAEQRBqJAAL0AEBAn8gAkGAEHEEQCAAQSs6AAAgAEEBaiEACyACQYAIcQRAIABBIzoAACAAQQFqIQALIAJBhAJxIgNBhAJHBEAgAEGu1AA7AAAgAEECaiEACyACQYCAAXEhAgNAIAEtAAAiBARAIAAgBDoAACAAQQFqIQAgAUEBaiEBDAELCyAAAn8CQCADQYACRwRAIANBBEcNAUHGAEHmACACGwwCC0HFAEHlACACGwwBC0HBAEHhACACGyADQYQCRg0AGkHHAEHnACACGws6AAAgA0GEAkcLKwEBfyMAQRBrIgUkACAFIAQoAgA2AgAgACABIAIgAyAFEJYBIAVBEGokAAuqAQEBfwJAIANBgBBxRSACRXINACADQcoAcSIEQQhGIARBwABGcg0AIABBKzoAACAAQQFqIQALIANBgARxBEAgAEEjOgAAIABBAWohAAsDQCABLQAAIgQEQCAAIAQ6AAAgAEEBaiEAIAFBAWohAQwBCwsgAAJ/Qe8AIANBygBxIgFBwABGDQAaQdgAQfgAIANBgIABcRsgAUEIRg0AGkHkAEH1ACACGws6AAALDAAgABAjIAFBAnRqC5IEAQt/IwBBgAFrIgokACAKIAE2AnwgAiADELUCIQggCkHjADYCECAKQQhqQQAgCkEQaiIJEDYhDwJAAkACQCAIQeUATwRAIAgQNCIJRQ0BIA8gCRA8CyAJIQcgAiEBA0AgASADRgRAA0AgACAKQfwAaiIBECtBASAIGwRAIAAgARArBEAgBSAFKAIAQQJyNgIACwNAIAIgA0YNBiAJLQAAQQJGDQcgCUEBaiEJIAJBDGohAgwACwALIAAQNyEOIAZFBEAgBCAOEEEhDgsgDUEBaiEMQQAhECAJIQcgAiEBA0AgASADRgRAIAwhDSAQRQ0CIAAQPhogCSEHIAIhASAIIAtqQQJJDQIDQCABIANGBEAMBAUCQCAHLQAAQQJHDQAgARAfIA1GDQAgB0EAOgAAIAtBAWshCwsgB0EBaiEHIAFBDGohAQwBCwALAAUCQCAHLQAAQQFHDQAgASANEMwBKAIAIRECQCAGBH8gEQUgBCAREEELIA5GBEBBASEQIAEQHyAMRw0CIAdBAjoAACALQQFqIQsMAQsgB0EAOgAACyAIQQFrIQgLIAdBAWohByABQQxqIQEMAQsACwALAAUgB0ECQQEgARBaIgwbOgAAIAdBAWohByABQQxqIQEgCyAMaiELIAggDGshCAwBCwALAAsQPQALIAUgBSgCAEEEcjYCAAsgDxA1IApBgAFqJAAgAgsRACAAIAEgACgCACgCDBEEAAuTBAELfyMAQYABayIKJAAgCiABNgJ8IAIgAxC1AiEIIApB4wA2AhAgCkEIakEAIApBEGoiCRA2IQ8CQAJAAkAgCEHlAE8EQCAIEDQiCUUNASAPIAkQPAsgCSEHIAIhAQNAIAEgA0YEQANAIAAgCkH8AGoiARAsQQEgCBsEQCAAIAEQLARAIAUgBSgCAEECcjYCAAsDQCACIANGDQYgCS0AAEECRg0HIAlBAWohCSACQQxqIQIMAAsACyAAEDghDiAGRQRAIAQgDhDOASEOCyANQQFqIQxBACEQIAkhByACIQEDQCABIANGBEAgDCENIBBFDQIgABA/GiAJIQcgAiEBIAggC2pBAkkNAgNAIAEgA0YEQAwEBQJAIActAABBAkcNACABEB8gDUYNACAHQQA6AAAgC0EBayELCyAHQQFqIQcgAUEMaiEBDAELAAsABQJAIActAABBAUcNACABIA0QIiwAACERAkAgBgR/IBEFIAQgERDOAQsgDkYEQEEBIRAgARAfIAxHDQIgB0ECOgAAIAtBAWohCwwBCyAHQQA6AAALIAhBAWshCAsgB0EBaiEHIAFBDGohAQwBCwALAAsABSAHQQJBASABEFoiDBs6AAAgB0EBaiEHIAFBDGohASALIAxqIQsgCCAMayEIDAELAAsACxA9AAsgBSAFKAIAQQRyNgIACyAPEDUgCkGAAWokACACC0oBAn8CQCAALQAAIgJFIAIgAS0AACIDR3INAANAIAEtAAEhAyAALQABIgJFDQEgAUEBaiEBIABBAWohACACIANGDQALCyACIANrC4QBAQJ/IwBBoAFrIgQkACAEIAAgBEGeAWogARsiADYClAEgBCABQQFrIgVBACABIAVPGzYCmAEgBEEAQZAB/AsAIARBfzYCTCAEQeIANgIkIARBfzYCUCAEIARBnwFqNgIsIAQgBEGUAWo2AlQgAEEAOgAAIAQgAiADEM0DIARBoAFqJAALuwIBBH8gA0H87QEgAxsiBSgCACEDAkAC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IBAtIAAoAiQQLSAAKAIwEC0gACgCPBAtCyAACwcAIAEgAGsLDABBARDWARogABAtCwkAIAAQsQEQLQsTACAAIAEgAiAAKAIAKAIwEQMACwkAIAAQ2AEQLQsMACAAQQRqENoBIAALDAAgAEEIahDaASAACygBAn8jAEEQayICJAAgASgCACAAKAIASCEDIAJBEGokACABIAAgAxsLEAAgACABNwMIIABCADcDAAsCAAsUACAAQZj1ADYCACAAQQRqECUgAAvyAwICfgV/IwBBIGsiBSQAIAFC////////P4MhAgJ+IAFCMIhC//8BgyIDpyIEQYH4AGtB/Q9NBEAgAkIEhiAAQjyIhCECIARBgPgAa60hAwJAIABC//////////8PgyIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECC0IAIAIgAkL/////////B1YiBBshACAErSADfAwBCyAAIAKEUCADQv//AVJyRQRAIAJCBIYgAEI8iIRCgICAgICAgASEIQBC/w8MAQsgBEH+hwFLBEBCACEAQv8PDAELQYD4AEGB+AAgA1AiBxsiCCAEayIGQfAASgRAQgAhAEIADAELIAVBEGogACACIAJCgICAgICAwACEIAcbIgJBgAEgBmsQRCAFIAAgAiAGEIoBIAUpAwhCBIYgBSkDACICQjyIhCEAAkAgBCAIRyAFKQMQIAUpAxiEQgBSca0gAkL//////////w+DhCICQoGAgICAgICACFoEQCAAQgF8IQAMAQsgAkKAgICAgICAgAhSDQAgAEIBgyAAfCEACyAAQoCAgICAgIAIhSAAIABC/////////wdWIgQbIQAgBK0LIQIgBUEgaiQAIAFCgICAgICAgICAf4MgAkI0hoQgAIS/C4kCAAJAIAAEfyABQf8ATQ0BAkBB3OEBKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBA8LC0GI6gFBGTYCAEF/BUEBCw8LIAAgAToAAEEBCzABAX8jAEEQayICJAAgAiABKAIANgIAIAAgAhByEH9BoPEAKAIAEGEaIAJBEGokAAsRACACBEAgACABwCAC/AsACwupAQEBfEQAAAAAAADwPyEBAkAgAEGACE4EQEQAAAAAAADgfyEBIABB/w9JBEAgAEH/B2shAAwCC0QAAAAAAADwfyEBQf0XIAAgAEH9F08bQf4PayEADAELIABBgXhKDQBEAAAAAAAAYAMhASAAQbhwSwRAIABByQdqIQAMAQtEAAAAAAAAAAAhAUHwaCAAIABB8GhNG0GSD2ohAAsgASAAQf8Haq1CNIa/ogtEAQF/IwBBEGsiAiQAIAAoAgAhACACIAE2AgggAiAANgIEIAJB/BQ2AgBByAsgAhByEH9BoPEAKAIAEGEaIAJBEGokAAt4AQN/AkAgAEUNACAAKAIgRQ0AIAAoAiQiAkUNACAAKAIcIgFFDQAgASgCACAARw0AIAEoAgRBtP4Aa0EfSw0AIAEoAjgiAwRAIAAoAiggAyACEQEAIAAoAiQhAiAAKAIcIQELIAAoAiggASACEQEAIABBADYCHAsL6QMAQZTZAUGFExAcQazZAUGUDkEBQQAQG0G42QFB8QxBAUGAf0H/ABACQdDZAUHqDEEBQYB/Qf8AEAJBxNkBQegMQQFBAEH/ARACQdzZAUGjCUECQYCAfkH//wEQAkHo2QFBmglBAkEAQf//AxACQfTZAUGyCUEEQYCAgIB4Qf////8HEAJBgNoBQakJQQRBAEF/EAJBjNoBQfMPQQRBgICAgHhB/////wcQAkGY2gFB6g9BBEEAQX8QAkGk2gFB4A9BCEKAgICAgICAgIB/Qv///////////wAQDUGw2gFB1w9BCEIAQn8QDUG82gFBogpBBBAMQcjaAUGMEUEIEAxBmC1BkhAQGkHgLUEEQfgPEAVBqC5BAkGeEBAFQfQuQQRBrRAQBUHMJhAZQcAvQQBB9RkQAEHoL0EAQboaEABBkDBBAUGTGhAAQbgwQQJBwhYQAEHgMEEDQeEWEABBiDFBBEGJFxAAQbAxQQVBphcQAEHYMUEEQd8aEABBgDJBBUH9GhAAQegvQQBBjBgQAEGQMEEBQesXEABBuDBBAkHOGBAAQeAwQQNBrBgQAEGIMUEEQdQZEABBsDFBBUGyGRAAQagyQQhBkRkQAEHQMkEJQe8YEABB+DJBBkHMFxAAQaAzQQdBpBsQAAsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBEAAA8LIAAgAUEBajYCDCABLQAAC2ABBH8gASAAKAIEIgYgA2siB2ohBCAGIQUDQCACIARNBEAgACAFNgIEIAdFIAMgBkZyRQRAIAYgB2sgASAH/AoAAAsFIAUgBC0AADoAACAFQQFqIQUgBEEBaiEEDAELCwsQACAAKAIAIgAEQCAAEB0LCzUBAX8gASAAKAIEIgJBAXVqIQEgACgCACEAIAEgAkEBcQR/IAEoAgAgAGooAgAFIAALEQAAC6ABAQR/IwBBgAJrIgAkACAAIAQ3A/gBIABCJTcD8AEgAEHwAWoiB0EBckGZDiAFIAIoAgQQywEgAEHQAWoiBiAGEC4gByAAQfgBahCJAyAGaiIIIAIQaSEJIABBBGoiByACECcgBiAJIAggAEEQaiIGIABBDGogAEEIaiAHEIADIAcQJSABIAYgACgCDCAAKAIIIAIgAxCFASAAQYACaiQAC6IBAQN/IwBBkAFrIgAkACAAIAQ2AowBIABCJTcDgAEgAEGAAWoiBkEBckGgDiAFIAIoAgQQywEgAEHzAGoiBCAEQQ0QLiAGIABBjAFqEMoBIARqIgcgAhBpIQggAEEEaiIGIAIQJyAEIAggByAAQRBqIgQgAEEMaiAAQQhqIAYQgAMgBhAlIAEgBCAAKAIMIAAoAgggAiADEIUBIABBkAFqJAALnQEBBH8jAEHwAGsiACQAIAAgBDcDaCAAQiU3A2AgAEHgAGoiB0EBckGZDiAFIAIoAgQQywEgAEFAayIGIAYQLiAHIABB6ABqEIkDIAZqIgggAhBpIQkgAEEEaiIHIAIQJyAGIAkgCCAAQRBqIgYgAEEMaiAAQQhqIAcQigMgBxAlIAEgBiAAKAIMIAAoAgggAiADEIABIABB8ABqJAALngEBA38jAEHQAGsiACQAIAAgBDYCTCAAQiU3A0AgAEFAayIGQQFyQaAOIAUgAigCBBDLASAAQTNqIgQgBEENEC4gBiAAQcwAahDKASAEaiIHIAIQaSEIIABBBGoiBiACECcgBCAIIAcgAEEQaiIEIABBDGogAEEIaiAGEIoDIAYQJSABIAQgACgCDCAAKAIIIAIgAxCAASAAQdAAaiQACwcAIAARDwALQgADQCABIAJHBEAgAQJ/IAEsAAAQTARAIAMoAgAgASwAAEECdGooAgAMAQsgAS0AAAs6AAAgAUEBaiEBDAELCyABCz0AA0AgASACRwRAIAEiACAAKAIAEEwEfyADKAIAIAAoAgBBAnRqBSAACygCADYCACAAQQRqIQEMAQsLIAELPwECfyAAKAIEIQMgACgCCCECA0AgAiADRwRAIAAgAiABayICNgIIDAELCyAAKAIAIgIEQCAAKAIMGiACEC0LC0wBAX8CQCABRQ0AIAFBiNgBEFIiAUUNACABKAIIIAAoAghBf3NxDQAgACgCDCABKAIMQQAQO0UNACAAKAIQIAEoAhBBABA7IQILIAILCwBBnBFBABCtAgALgQEBA38gACgCBCIEQQFxIQUCfyABLQA3QQFGBEAgBEEIdSIGIAVFDQEaIAIoAgAgBhDoAQwBCyAEQQh1IAVFDQAaIAEgACgCACgCBDYCOCAAKAIEIQRBACECQQALIQUgACgCACIAIAEgAiAFaiADQQIgBEECcRsgACgCACgCHBEIAAsKACAAIAFBABA7C/gBAQF/IwBBEGsiAiQAIAIgATYCDEGQ1gEoAgAiAiAAIAEQzQMaIAAQqAEgAGpBAWstAABBCkcEQAJAAkAgAigCTCIAQQBOBEAgAEUNAUGU4QEoAgAgAEH/////A3FHDQELAkAgAigCUEEKRg0AIAIoAhQiACACKAIQRg0AIAIgAEEBajYCFCAAQQo6AAAMAgsgAhDeAQwBCyACQcwAaiIBIgAgACgCACIAQf////8DIAAbNgIAAkACQCACKAJQQQpGDQAgAigCFCIAIAIoAhBGDQAgAiAAQQFqNgIUIABBCjoAAAwBCyACEN4BCyABEKwBGgsLEMoDAAsdAQF/IwBBEGsiASQAIAEgADYCAEG9HiABEK0CAAu5AgEDfyMAQSBrIggkAEH3////AyIJIAFBf3NqIAJPBEAgABAjIQogAUHz////AUkEQCAIIAFBAXQ2AhwgCCABIAJqNgIQIAhBEGogCEEcahCgASgCABCQAUEBaiEJCyAIQRxqIAhBGGogABBVKAIAELwBIAhBEGogCRCPASAIKAIQIQIgCCgCFBogBARAIAIgCiAEEGULIAYEQCAEQQJ0IAJqIAcgBhBlCyADIAQgBWoiCWshByADIAlHBEAgBEECdCIDIAJqIAZBAnRqIAMgCmogBUECdGogBxBlCyABQQFqIgFBAkcEQCAKIAEQqQELIAAgAjYCACAAIAgoAhQQXCAAIAQgBmogB2oiADYCBCAIQQA2AgwgAiAAQQJ0aiAIQQxqEFYgCEEcahC7ASAIQSBqJAAPCxBbAAuJAQECfyMAQRBrIgMkACABQff///8HTQRAAkAgARDUAQRAIAAgARBQIAAhBAwBCyADQQhqIAEQnwFBAWoQngEgAygCDBogACADKAIIIgQ2AgAgACADKAIMEFwgACABNgIECyAEIAEgAhCyAiADQQA6AAcgASAEaiADQQdqEF0gA0EQaiQADwsQWwALRAECfyAAECghAyAAEB8hBCACIANNBEAgABAjIgMgASACEE0gACADIAIQwAIPCyAAIAMgAiADayAEQQAgBCACIAEQuQELPQEBfyMAQRBrIgMkACADIAI6AA8DQCABBEAgACADLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIANBEGokAAsZACAAQYCAgIAETwRAEKoCAAsgAEECdBBTC5IFAQh/QQQgASABQQRNGyEDQQEgACAAQQFNGyEHA0ACQCAHIAMgB2pBAWtBACADa3EiACAAIAdJGyEEQQAhASMAQRBrIggkAAJAIANBA3ENACAEIANwDQACfwJAQTACfyADQQhGBEAgBBA0DAELQRwhASADQQNxIANBBElyDQEgA0ECdiIAIABBAWtxDQFBMEFAIANrIARJDQIaAn9BECEBAkBBEEEQIAMgA0EQTRsiACAAQRBNGyICIAJBAWtxRQRAIAIhAAwBCwNAIAEiAEEBdCEBIAAgAkkNAAsLQUAgAGsgBE0EQEGI6gFBMDYCAEEADAELQQBBECAEQQtqQXhxIARBC0kbIgUgAGpBDGoQNCICRQ0AGiACQQhrIQECQCAAQQFrIAJxRQRAIAEhAAwBCyACQQRrIgkoAgAiBEF4cSAAIAJqQQFrQQAgAGtxQQhrIgIgAEEAIAIgAWtBD00baiIAIAFrIgZrIQIgBEEDcUUEQCABKAIAIQEgACACNgIEIAAgASAGajYCAAwBCyAAIAIgACgCBEEBcXJBAnI2AgQgACACaiICIAIoAgRBAXI2AgQgCSAGIAkoAgBBAXFyQQJyNgIAIAEgBmoiAiACKAIEQQFyNgIEIAEgBhDbAQsCQCAAKAIEIgJBA3FFDQAgAkF4cSIBIAVBEGpNDQAgACAFIAJBAXFyQQJyNgIEIAAgBWoiBCABIAVrIgJBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQgBCACENsBCyAAQQhqCwsiAEUNARogCCAANgIMQQAhAQsgAQshAEEAIAgoAgwgABshAQsgCEEQaiQAIAENAEHk/gEoAgAiAEUNACAAEQwADAELCyABRQRAEOsBCyABCwoAIAEgAGtBDG0LCQAgABAuNgIACyMBAn8gACEBA0AgASICQQRqIQEgAigCAA0ACyACIABrQQJ1Cy8BAX8jAEEQayIDJAACQCAAIAFGBEAgAEEAOgB4DAELIAEgAhCpAQsgA0EQaiQACxAAIAAoAgggACgCAGtBAnULCQAgAEEANgIAC0kBAX8jAEEQayIDJAACQAJAIAJBHksNACABLQB4QQFxDQAgAUEBOgB4DAELIAIQwQIhAQsgA0EQaiQAIAAgAjYCBCAAIAE2AgALOgECfyMAQRBrIgAkACAAQf////8DNgIMIABB/////wc2AgggAEEMaiAAQQhqELUDKAIAIABBEGokAAs0AQF/IwBBEGsiAyQAIAMgARBzNgIMIAMgAhBzNgIIIAAgA0EMaiADQQhqEGYgA0EQaiQAC04BAX8jAEEQayIDJAAgAyABNgIIIAMgADYCDCADIAI2AgRBACEBIANBBGoiACADQQxqENMBRQRAIAAgA0EIahDTASEBCyADQRBqJAAgAQswAQF/IwBBEGsiAyQAIAMgATYCDCADIAI2AgggACADQQxqIANBCGoQZiADQRBqJAALMwEBfyMAQRBrIgMkACAAEB8aIAAgAhCDASADQQA6AA8gASACaiADQQ9qEF0gA0EQaiQACzEAIABB/////wNLBEAQqgIACwJ/IABBAnQhAEEEENYBBEAgAEEEELQCDAELIAAQUwsLCQAgABDtARAtCxUAIABB8KoBNgIAIABBEGoQIBogAAsVACAAQciqATYCACAAQQxqECAaIAALgAMBBH8gAiEAA0ACQCAEIAdNIAAgA09yDQAgACwAACIBQf8BcSEFAn9BASABQQBODQAaIAFBQkkNASABQV9NBEAgAyAA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ZEYNAEEAIQAgC0EANgIQIBEgDygCACALKAJkIAtBEGoQQyALKAIQBEAgBSAFKAIAQQRyNgIADAELQQEhAAsgEBAgGiANECAaIA4QIBogDBAgGiARECAaIA8QNQwDCyACIQELIANBAWohAwwACwALIAtBkARqJAAgAAsMACAAQQFBLRD9AhoLCwAgAEEBQS0QsAILHAEBfyAALQAAIQIgACABLQAAOgAAIAEgAjoAAAtlAQF/IwBBEGsiBiQAIAZBADoADyAGIAU6AA4gBiAEOgANIAZBJToADCAFBEAgBkENaiAGQQ5qEPMCCyACIAEgASACKAIAEIoCIAZBDGogAyAAKAIAEJ4DIAFqNgIAIAZBEGokAAtBACABIAIgAyAEQQQQZyEBIAMtAABBBHFFBEAgACABQdAPaiABQewOaiABIAFB5ABJGyABQcUASBtB7A5rNgIACwtAACACIAMgAEEIaiAAKAIIKAIEEQAAIgAgAEGgAmogBSAEQQAQzQEgAGsiAEGfAkwEQCABIABBDG1BDG82AgALC0AAIAIgAyAAQQhqIAAoAggoAgARAAAiACAAQagBaiAFIARBABDNASAAayIAQacBTARAIAEgAEEMbUEHbzYCAAsLQQAgASACIAMgBEEEEGghASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBEAACIAIABBoAJqIAUgBEEAEM8BIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQAAIgAgAEGoAWogBSAEQQAQzwEgAGsiAEGnAUwEQCABIABBDG1BB282AgALCxgBAX9BDBBTIgBBADYCCCAAQgA3AgAgAAsEAEECC8oBAQR/IwBBEGsiAyQAAkAgAUH3////A00EQAJAIAEQvQEEQCAAIAEQUCAAIQQMAQsgA0EIaiABEJABQQFqEI8BIAMoAgwaIAAgAygCCCIENgIAIAAgAygCDBBcIAAgATYCBAsjAEEQayIFJAAgBSACNgIMIAQhBiABIQIDQCACBEAgBiAFKAIMNgIAIAJBAWshAiAGQQRqIQYMAQsLIAVBEGokACADQQA2AgQgBCABQQJ0aiADQQRqEFYgA0EQaiQADAELEFsA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hoRCAEKAgICAgIDAwz8QLyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAuIEAIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQsgAkL///////8/gyEKIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQcCQAJAIAJCMIinQf//AXEiCEH//wFrQYKAfk8EQCAHQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg5CgICAgICAwP//AFQgDkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDkKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASAOhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyAOQv///////z9YBEAgBUHAAmogASAKIAEgCiAKUCIGG3lCwABCACAGG3ynIgZBD2sQREEQIAZrIQYgBSkDyAIhCiAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyALIAMgCyALUCIJG3lCwABCACAJG3ynIglBD2sQRCAGIAlqQRBrIQYgBSkDuAIhCyAFKQOwAiEDCyAFQaACaiALQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABBAIAVBkAJqQgAgBSkDqAJ9QgAgBEIAEEAgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQQCAFQfABaiAEQgBCACAFKQOIAn1CABBAIAVB4AFqIAUpA/gBQgGGIAUpA/ABQj+IhCIEQgAgAkIAEEAgBUHQAWogBEIAQgAgBSkD6AF9QgAQQCAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABBAIAVBsAFqIARCAEIAIAUpA8gBfUIAEEAgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQQCAFQZABaiADQg+GQgAgAkIAEEAgBUHwAGogAkIAQgAgBSkDqAEgBSkDoAEiDiAFKQOYAXwiBCAOVK18IARCAVatfH1CABBAIAVBgAFqQgEgBH1CACACQgAQQCAGIAggB2tqIghB//8AaiEGAn4gBSkDcCITQgGGIg0gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgCkKAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiIOQiCIIgsgECAUVq0gDSAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig0gEVStIA0gDSATQv////8PgyITIAFCP4giFyAKQgGGhEL/////D4MiCn58Ig1WrXwgBCAQfnwgBCATfiIRIAogEH58Ig8gEVStQiCGIA9CIIiEfCANIA9CIIZ8Ig8gDVStfCAPIA8gFEL/////D4MiFCAKfiINIAIgC358IhEgDVStIBEgESATIA5C/v///w+DIg1+fCIRVq18fCIPVq18IA8gBCAUfiIYIA0gEH58IgQgAiAKfnwiCiALIBN+fCIQQiCIIAogEFatIAQgGFStIAQgClatfHxCIIaEfCIEIA9UrXwgBCAEIBEgAiANfiIKIAsgFH58IgJCIIggAiAKVK1CIIaEfCIKIBFUrSAKIAogEEIghnwiClatfHwiBFatfCAEIAQgCiACQiCGIgIgDSAUfnwgAlStQn+FIgJWIAIgClJxrXwiBFatfCICQv////////8AWARAIBYgF4QhFSAFQdAAaiAEIAJCgICAgICAwABUIgetIguGIgogAiALhiAEQgGIIAdBP3OtiIQiBCADIBIQQCAIQf7/AGogBiAHG0EBayEGIAFCMYYgBSkDWH0gBSkDUCIBQgBSrX0hC0IAIAF9DAELIAVB4ABqIAJCP4YgBEIBiIQiCiACQgGIIgQgAyASEEAgAUIwhiAFKQNofSAFKQNgIgJCAFKtfSELIAEhDkIAIAJ9CyECIAZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgC0IBhiACQj+IhCEBIARC////////P4MgBq1CMIaEIQsgAkIBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAogBEEBIAZrEIoBIAVBMGogDiAVIAZB8ABqEEQgBUEgaiADIBIgBSkDQCIKIAUpA0giCxBAIAUpAzggBSkDKEIBhiAFKQMgIgFCP4iEfSAFKQMwIgIgAUIBhiIEVK19IQEgAiAEfQshAiAFQRBqIAMgEkIDQgAQQCAFIAMgEkIFQgAQQCALIAogAyAKQgGDIgMgAnwiAlQgASACIANUrXwiASASViABIBJRG618IgMgClStfCIEIAMgAyAEQoCAgICAgMD//wBUIAIgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgNWrXwiBCADIARCgICAgICAwP//AFQgAiAFKQMAViABIAUpAwgiAlYgASACURtxrXwiASADVK18IAyEIQwLIAAgATcDACAAIAw3AwggBUHQAmokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQLyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABAvQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORAvIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORAvQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhAvIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAs8ACAAIAE3AwAgACACQv///////z+DIAJCgICAgICAwP//AINCMIinIANCMIinQYCAAnFyrUIwhoQ3AwgLwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAg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EKYCCyEAIAEQTAR/QZiEASgCACABQf8BcUECdGooAgAFIAELwAsJACAAENACEC0LOwADQCABIAJGRQRAIAMhACAEIAEoAgAQTAR/IAEoAgAFIAALOgAAIARBAWohBCABQQRqIQEMAQsLIAELDAAgASACIAEQTBvACyoAA0AgASACRkUEQCADIAEsAAA2AgAgA0EEaiEDIAFBAWohAQwBCwsgAQsPACAAIAEgAkGgkAEQpwILHAAgARBMBH9BoJABKAIAIAFBAnRqKAIABSABCwsPACAAIAEgAkGYhAEQpwILHAAgARBMBH9BmIQBKAIAIAFBAnRqKAIABSABCwsQACAABEAgABDHAwsgABAtCzoAA0ACQCACIANGDQAgAigCABBMRQ0AIAIoAgBBAnRBkKIBaigCACABcUUNACACQQRqIQIMAQsLIAILOQADQAJAIAIgA0YNACACKAIAEEwEQCACKAIAQQJ0QZCiAWooAgAgAXENAQsgAkEEaiECDAELCyACC0YAA0AgASACRkUEQEEAIQAgAyABKAIAEEwEfyABKAIAQQJ0QZCiAWooAgAFQQALNgIAIANBBGohAyABQQRqIQEMAQsLIAELIwBBACEAIAIQTAR/IAJBAnRBkKIBaigCACABcUEARwVBAAsLDwAgACAAKAIAKAIEEQIACwkAIAAQ1gIQLQsVAQF/QdQAEFMiAEEAQdQA/AsAIAALFAAgACgCACABaiACLQAAOgAAQQELrgEAAkAgBRBHRQRAIAAgBSkCADcCACAAIAUoAgg2AgggABBeGgwBCyAFKAIAIQQgBSgCBCECIwBBEGsiAyQAAkACQAJAIAIQvQEEQCAAIgEgAhBQDAELIAJB9////wNLDQEgA0EIaiACEJABQQFqEI8BIAMoAgwaIAAgAygCCCIBNgIAIAAgAygCDBBcIAAgAjYCBAsgASAEIAJBAWoQZSADQRBqJAAMAQsQWwALCwsJACAAIAUQ5AELhAMBCH8jAEHgA2siACQAIABB3ANqIgYgAxAnIAYQSCEKIAUQHwRAIAVBABDMASgCACAKQS0QS0YhCwsgAiALIABB3ANqIABB2ANqIABB1ANqIABB0ANqIABBxANqECQiDCAAQbgDahAkIgYgAEGsA2oQJCIHIABBqANqEN8CIABB4wA2AhAgAEEIakEAIABBEGoiAhA2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KAK8ASAEEI8DOQMAIABBzAFqIABBEGogACgCDCAEEEMgAEHcAmogAEHYAmoQKwRAIAQgBCgCAEECcjYCAAsgACgC3AIgARAgGiAAQcwBahAgGiAAQeACaiQADAMLQQEhAwsgAEHcAmoQPhoMAAsACwvKBAEDfwJ/IwBB4AJrIgAkACAAIAI2AtgCIAAgATYC3AIgAEHMAWogAyAAQeABaiAAQdwBaiAAQdgBahD7ASAAQcABahAkIgEgARAoECEgACABQQAQIiICNgK8ASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGQQAhAwNAAkACQAJAIABB3AJqIABB2AJqECsNACAAKAK8ASABEB8gAmpGBEAgARAfIQYgASABEB9BAXQQISABIAEQKBAhIAAgBiABQQAQIiICajYCvAELIABB3AJqEDcgAEEHaiAAQQZqIAIgAEG8AWogACgC3AEgACgC2AEgAEHMAWogAEEQaiAAQQxqIABBCGogAEHgAWoQ+gENACADDQFBACEDIAAoArwBIAJrIgdBAEwNAgJAAkAgAi0AACIGQStrIggOAwEAAQALIAZBLkYNAkEBIQMgBkEwa0H/AXFBCkkNAwwBCyAHQQFGDQICQCAIDgMAAwADCyACLQABIgZBLkYNAUEBIQMgBkEwa0H/AXFBCU0NAgsCQCAAQcwBahAfRQ0AIAAtAAdBAXFFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK8ASAEEJEDOAIAIABBzAFqIABBEGogACgCDCAEEEMgAEHcAmogAEHYAmoQKwRAIAQgBCgCAEECcjYCAAsgACgC3AIgARAgGiAAQcwBahAgGiAAQeACaiQADAMLQQEhAwsgAEHcAmoQPhoMAAsACwuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCSAzcDACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhCVAzsBACAAQcQBaiAAQRBqIAAoAgwgBBBDIABBzAJqIABByAJqECsEQCAEIAQoAgBBAnI2AgALIAAoAswCIAEQIBogAEHEAWoQIBogAEHQAmokAAuWAwECfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQaiEGIAMgAEHQAWoQrgEhByAAQcQBaiADIABBxAJqEK0BIABBuAFqECQiASABECgQISAAIAFBABAiIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECsNACAAKAK0ASABEB8gAmpGBEAgARAfIQMgASABEB9BAXQQISABIAEQKBAhIAAgAyABQQAQIiICajYCtAELIABBzAJqIgMQNyAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxCYAQ0AIAMQPhoMAQsLAkAgAEHEAWoQH0UNACAAKAIMIgMgAEEQamtB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DCECDAYLIANBIHIhAyABQQRqIQIgBEEEayEEIAEtAAMgCHQgB2ohBwsCQCAFQQRxRQ0AIAcgBigCIEYNACAKQd4ONgIYIAZB0f4ANgIEIAIhASAGKAIEIQUMAQsLIAIhAUEAIQdBACEDCyAGQdD+ADYCBAtBASECDAELQQAhBCAMIQILIAogDzYCECAKIBA2AgwgCiAENgIEIAogATYCACAGIAM2AkAgBiAHNgI8AkACQCAGKAIsRQRAIA8gFUYNASAGKAIEQdD+AEsNAQsCfyAVIA9rIQMCQAJAIAooAhwiASgCOCIMRQRAQQEhBSABIAooAihBASABKAIodEEBIAooAiARAwAiDDYCOCAMRQ0BCyABKAIsIgRFBEAgAUIANwIwIAFBASABKAIodCIENgIsCyADIARPBEAgBARAIAwgECAEayAE/AoAAAsgAUEANgI0DAILIAQgASgCNCIIayIFIAMgAyAFSxsiBARAIAggDGogECADayAE/AoAAAsgAyAFSwRAIAMgBGsiAwRAIAEoAjggECADayAD/AoAAAsgASADNgI0DAILQQAhBSABIAEoAjQgBGoiA0EAIAMgASgCLCIMRxs2AjQgDCABKAIwIgNNDQAgASADIARqNgIwCyAFDAELIAEgASgCLDYCMEEACw0BIAooAhAhDyAKKAIEIQQLIAogCigCCCAkIARrajYCCCAKIBUgD2siASAKKAIUajYCFCAGIAYoAiAgAWo2AiAgBi0ADEEEcUUgDyAVRnJFBEAgCigCDCABayEDIAYoAhwhBSAGAn8gBigCFARAIAUgAyABEFEMAQsgBSADIAEQswELIgE2AhwgCiABNgIwCyAKIAYoAkBBwABBACAGKAIIG2pBgAFBACAGKAIEIgFBv/4ARhtqQYACQYACQQAgAUHC/gBGGyABQcf+AEYbajYCLCACQXsgAhsgAiAPIBVGGyACIAQgJEYbIRwMAgsgBkHS/gA2AgQLQXwhHAsgF0EQaiQAIBxBAUsNASATQagBaiEBIBMoAqwBIQMgGigCACEJIBooAgQgEygCFGshDCMAQSBrIggkAAJAIAwgCWsiBUEATA0AIAEoAgggASgCBCICayAFTgRAIAIgA2siBCAFSARAIAwgBCAJaiIHayILRSAHIAxGckUEQCACIAcgC/wKAAALIAEgAiALajYCBCAE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eQAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AE5vdgBUaHUAQXVndXN0AHVuc2lnbmVkIHNob3J0AHVuc2lnbmVkIGludABpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQAaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0AHVua25vd24gaGVhZGVyIGZsYWdzIHNldABpbnZhbGlkIGRpc3RhbmNlcyBzZXQAZ2V0AE9jdABmbG9hdABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AFNhdABudW1Qb2ludHMAY29sb3JzAFVucGFja09wdGlvbnMAcG9zaXRpb25zAHJvdGF0aW9ucwB0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scwBpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzAHNjYWxlcwBhbHBoYXMAW1NQWjogRVJST1JdIENoZWNrIGZhaWxlZDogJXM6JWQ6ICVzAHZmMzJfcHRyAEFwcgB2ZWN0b3IAbW9uZXlfZ2V0IGVycm9yAFtTUFogRVJST1JdIGRlc2VyaWFsaXplUGFja2VkR2F1c3NpYW5zOiByZWFkIGVycm9yAE9jdG9iZXIATm92ZW1iZXIAU2VwdGVtYmVyAERlY2VtYmVyAHVuc2lnbmVkIGNoYXIAaW9zX2Jhc2U6OmNsZWFyAE1hcgAvZW1zZGsvZW1zY3JpcHRlbi9zeXN0ZW0vbGliL2xpYmN4eGFiaS9zcmMvcHJpdmF0ZV90eXBlaW5mby5jcHAAU2VwACVJOiVNOiVTICVwAFN1bgBKdW4ATW9uAG5hbgBKYW4AY29vcmRpbmF0ZVN5c3RlbQBDb29yZGluYXRlU3lzdGVtAEp1bABib29sAGxsAEFwcmlsAGludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jawBpbmNvcnJlY3QgaGVhZGVyIGNoZWNrAGluY29ycmVjdCBsZW5ndGggY2hlY2sAaW5jb3JyZWN0IGRhdGEgY2hlY2sAcHVzaF9iYWNrAGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrAEZyaQBzaABoZWFkZXIgY3JjIG1pc21hdGNoAE1hcmNoAEF1ZwB1bnNpZ25lZCBsb25nIGxvbmcAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlLjBMZgAlTGYAcmVzaXplAGludmFsaWQgd2luZG93IHNpemUAdHJ1ZQBUdWUAZmFsc2UAaW52YWxpZCBibG9jayB0eXBlAEp1bmUAZG91YmxlAHNoRGVncmVlAGJhZF9hcnJheV9uZXdfbGVuZ3RoIHdhcyB0aHJvd24gaW4gLWZuby1leGNlcHRpb25zIG1vZGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQBSYXdHYXVzc2lhbkNsb3VkAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAFtTUFogRVJST1JdIGRlc2VyaWFsaXplUGFja2VkR2F1c3NpYW5zOiBoZWFkZXIgbm90IGZvdW5kACUwKmxsZAAlKmxsZAArJWxsZAAlKy40bGQAdm9pZABsb2NhbGUgbm90IHN1cHBvcnRlZABhbnRpYWxpYXNlZABXZWQAJVktJW0tJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IFRvbyBtYW55IHBvaW50czogJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IFVuc3VwcG9ydGVkIFNIIGRlZ3JlZTogJWQAW1NQWiBFUlJPUl0gZGVzZXJpYWxpemVQYWNrZWRHYXVzc2lhbnM6IHZlcnNpb24gbm90IHN1cHBvcnRlZDogJWQARGVjAC4vc3B6L3NyYy9jYy9sb2FkLXNwei5jYwBGZWIAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAVmVjdG9yVUludDhUACVIOiVNOiVTAE5BTgBQTQBBTQAlSDolTQBMQ19BTEwAQVNDSUkATEFORwBSVUYATFVGAElORgBSREYATERGAFVOU1BFQ0lGSUVEAEMAUlVCAExVQgBSREIATERCAGNhdGNoaW5nIGEgY2xhc3Mgd2l0aG91dCBhbiBvYmplY3Q/AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+ADAxMjM0NTY3ODkAQy5VVEYtOABWZWN0b3JGbG9hdDMyADEuMy4xAC4ALQAocGFja2VkLmFscGhhcy5zaXplKCkpID09IChudW1Qb2ludHMpAChudWxsKQAocGFja2VkLmNvbG9ycy5zaXplKCkpID09IChudW1Qb2ludHMgKiAzKQAocGFja2VkLnNjYWxlcy5zaXplKCkpID09IChudW1Qb2ludHMgKiAzKQAocGFja2VkLnNoLnNpemUoKSkgPT0gKG51bVBvaW50cyAqIHNoRGltICogMykAKHBhY2tlZC5yb3RhdGlvbnMuc2l6ZSgpKSA9PSAobnVtUG9pbnRzICogKHBhY2tlZC51c2VzUXVhdGVybmlvblNtYWxsZXN0VGhyZWUgPyA0IDogMykpAChwYWNrZWQucG9zaXRpb25zLnNpemUoKSkgPT0gKG51bVBvaW50cyAqIDMgKiAodXNlc0Zsb2F0MTYgPyAyIDogMykpACUAbGVuZ3RoX2Vycm9yIHdhcyB0aHJvd24gaW4gLWZuby1leGNlcHRpb25zIG1vZGUgd2l0aCBtZXNzYWdlICIlcyIAUHVyZSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxlZCEAW1NQWjogRVJST1JdIFVuc3VwcG9ydGVkIFNIIGRlZ3JlZTogJWQKAAkAAAAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwBBkCALthMgEAAA9GwAAPRsAABAEAAAqG0AACgQAABOM3NwejEzR2F1c3NpYW5DbG91ZEUAAACobQAASBAAAE4zc3B6MTNVbnBhY2tPcHRpb25zRQBwcGlpcAD0bAAAbBAAAKhtAAB0EAAATlN0M19fMjZ2ZWN0b3JJZk5TXzlhbGxvY2F0b3JJZkVFRUUAaXBwACxuAADEEAAAAAAAAAMAAADcEAAAAAAAACgSAAAAAAAAWBIAAAAAAABOU3QzX18yOG9wdGlvbmFsSWZFRQAAAADQbQAA6BAAABgRAABOU3QzX18yMjdfX29wdGlvbmFsX21vdmVfYXNzaWduX2Jhc2VJZkxiMUVFRQAAAADQbQAAJBEAAFQRAABOU3QzX18yMjdfX29wdGlvbmFsX2NvcHlfYXNzaWduX2Jhc2VJZkxiMUVFRQAAAADQbQAAYBEAAIgRAABOU3QzX18yMjBfX29wdGlvbmFsX21vdmVfYmFzZUlmTGIxRUVFAAAA0G0AAJQRAAC8EQAATlN0M19fMjIwX19vcHRpb25hbF9jb3B5X2Jhc2VJZkxiMUVFRQAAANBtAADIEQAA9BEAAE5TdDNfXzIyM19fb3B0aW9uYWxfc3RvcmFnZV9iYXNlSWZMYjBFRUUAAAAAqG0AAPwRAABOU3QzX18yMjRfX29wdGlvbmFsX2Rlc3RydWN0X2Jhc2VJZkxiMUVFRQAAAKhtAAAwEgAATlN0M19fMjE4X19zZmluYWVfY3Rvcl9iYXNlSUxiMUVMYjFFRUUAAKhtAABgEgAATlN0M19fMjIwX19zZmluYWVfYXNzaWduX2Jhc2VJTGIxRUxiMUVFRQAAAACIbgAAnBIAAAAAAABsEAAAUE5TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAAAAAIhuAADUEgAAAQAAAGwQAABQS05TdDNfXzI2dmVjdG9ySWZOU185YWxsb2NhdG9ySWZFRUVFAHBwAHYAdnAAAACMEgAAcHAAAJRsAACMEgAAPG0AAHZwcGQAAAAAlGwAAIwSAAAYbQAAPG0AAHZwcHBkAAAAGG0AAMQSAABwcHAATBMAADxtAACobQAAVBMAAE4xMGVtc2NyaXB0ZW4zdmFsRQAAnBAAAGwQAAAYbQAAcHBwcAAAAAAAAAAArGwAAGwQAAAYbQAAPG0AAGlwcHBkAAAALG4AAMATAAAAAAAAAwAAANgTAAAAAAAAKBIAAAAAAABYEgAAAAAAAE5TdDNfXzI4b3B0aW9uYWxJaEVFAAAAANBtAADkEwAAFBQAAE5TdDNfXzIyN19fb3B0aW9uYWxfbW92ZV9hc3NpZ25fYmFzZUloTGIxRUVFAAAAANBtAAAgFAAAUBQAAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUloTGIxRUVFAAAAANBtAABcFAAAhBQAAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSWhMYjFFRUUAAADQbQAAkBQAALgUAABOU3QzX18yMjBfX29wdGlvbmFsX2NvcHlfYmFzZUloTGIxRUVFAAAA0G0AAMQUAADwFAAATlN0M19fMjIzX19vcHRpb25hbF9zdG9yYWdlX2Jhc2VJaExiMEVFRQAAAACobQAA+BQAAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUloTGIxRUVFAAAAqG0AACwVAABOU3QzX18yNnZlY3RvckloTlNfOWFsbG9jYXRvckloRUVFRQCIbgAAYBUAAAAAAAAkFQAAUE5TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAAAAAIhuAACYFQAAAQAAACQVAABQS05TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAHBwAHZwAFAVAABwcAAAlGwAAFAVAADEbAAAdnBwaQAAAACUbAAAUBUAABhtAADEbAAAdnBwcGkAAAAYbQAAiBUAAHBwcABMEwAAxGwAAJgTAAAkFQAAGG0AAHBwcHAAAAAArGwAACQVAAAYbQAAxGwAAGlwcHBpAHAAdnAAaXBwAHZwcGkAaXBwAHZwcGkAcHBwAHZwcHAAAABcbQAAYBYAAE4zc3B6MTZDb29yZGluYXRlU3lzdGVtRQBwAHZwAGlwcAB2cHBpAAAAAAAAAwAAAAgAAAAPAAAAqG0AAKAWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAqG0AAOgWAABOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQAAqG0AADAXAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRHNOU18xMWNoYXJfdHJhaXRzSURzRUVOU185YWxsb2NhdG9ySURzRUVFRQAAAKhtAAB8FwAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURpTlNfMTFjaGFyX3RyYWl0c0lEaUVFTlNfOWFsbG9jYXRvcklEaUVFRUUAAACobQAAyBcAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWNFRQAAqG0AAPAXAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUAAKhtAAAYGAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaEVFAACobQAAQBgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXNFRQAAqG0AAGgYAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUAAKhtAACQGAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJaUVFAACobQAAuBgAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWpFRQAAqG0AAOAYAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUAAKhtAAAIGQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJbUVFAACobQAAMBkAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXhFRQAAqG0AAFgZAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l5RUUAAKhtAACAGQAATjEwZW1zY3Jp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AAAJqAAACAQAAAiEAAAIRAAACegAEAcIAAAIXAAACBwAAAmYABQHUwAACHwAAAg8AAAJ2AASBxcAAAhsAAAILAAACbgAAAgMAAAIjAAACEwAAAn4ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcQAEQcLAAAIYgAACCIAAAmkAAAIAgAACIIAAAhCAAAJ5AAQBwcAAAhaAAAIGgAACZQAFAdDAAAIegAACDoAAAnUABIHEwAACGoAAAgqAAAJtAAACAoAAAiKAAAISgAACfQAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzAARBw8AAAhmAAAIJgAACawAAAgGAAAIhgAACEYAAAnsABAHCQAACF4AAAgeAAAJnAAUB2MAAAh+AAAIPgAACdwAEgcbAAAIbgAACC4AAAm8AAAIDgAACI4AAAhOAAAJ/ABgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnCABAHCgAACGEAAAghAAAJogAACAEAAAiBAAAIQQAACeIAEAcGAAAIWQAACBkAAAmSABMHOwAACHkAAAg5AAAJ0gARBxEAAAhpAAAIKQAACbIAAAgJAAAIiQAACEkAAAnyABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcoAEQcNAAAIZQAACCUAAAmqAAAIBQAACIUAAAhFAAAJ6gAQBwgAAAhdAAAIHQAACZoAFAdTAAAIfQAACD0AAAnaABIHFwAACG0AAAgtAAAJugAACA0AAAiNAAAITQAACfoAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxgARBwsAAAhjAAAIIwAACaYAAAgDAAAIgwAACEMAAAnmABAHBwAACFsAAAgbAAAJlgAUB0MAAAh7AAAIOwAACdYAEgcTAAAIawAACCsAAAm2AAAICwAACIsAAAhLAAAJ9gAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnOABEHDwAACGcAAAgnAAAJrgAACAcAAAiHAAAIRwAACe4AEAcJAAAIXwAACB8AAAmeABQHYwAACH8AAAg/AAAJ3gASBxsAAAhvAAAILwAACb4AAAgPAAAIjwAACE8AAAn+AGAHAAAACFAAAAgQABQIcwASBx8AAAhwAAAIMAAACcEAEAcKAAAIYAAACCAAAAmhAAAIAAAACIAAAAhAAAAJ4QAQBwYAAAhYAAAIGAAACZEAEwc7AAAIeAAACDgAAAnRABEHEQAACGgAAAgoAAAJsQAACAgAAAiIAAAISAAACfEAEAcEAAAIVAAACBQAFQjjABMHKwAACHQAAAg0AAAJyQARBw0AAAhkAAAIJAAACakAAAgEAAAIhAAACEQAAAnpABAHCAAACFwAAAgcAAAJmQAUB1MAAAh8AAAIPAAACdkAEgcXAAAIbAAACCwAAAm5AAAIDAAACIwAAAhMAAAJ+QAQBwMAAAhSAAAIEgAVCKMAEwcjAAAIcgAACDIAAAnFABEHCwAACGIAAAgiAAAJpQAACAIAAAiCAAAIQgAACeUAEAcHAAAIWgAACBoAAAmVABQHQwAACHoAAAg6AAAJ1QASBxMAAAhqAAAIKgAACbUAAAgKAAAIigAACEoAAAn1ABAHBQAACFYAAAgWAEAIAAATBzMAAAh2AAAINgAACc0AEQcPAAAIZgAACCYAAAmtAAAIBgAACIYAAAhGAAAJ7QAQBwkAAAheAAAIHgAACZ0AFAdjAAAIfgAACD4AAAndABIHGwAACG4AAAguAAAJvQAACA4AAAiOAAAITgAACf0AYAcAAAAIUQAACBEAFQiDABIHHwAACHEAAAgxAAAJwwAQBwoAAAhhAAAIIQAACaMAAAgBAAAIgQAACEEAAAnjABAHBgAACFkAAAgZAAAJkwATBzsAAAh5AAAIOQAACdMAEQcRAAAIaQAACCkAAAmzAAAICQAACIkAAAhJAAAJ8wAQBwQAAAhVAAAIFQAQCAIBEwcrAAAIdQAACDUAAAnLABEHDQAACGUAAAglAAAJqwAACAUAAAiFAAAIRQAACesAEAcIAAAIXQAACB0AAAmbABQHUwAACH0AAAg9AAAJ2wASBxcAAAhtAAAILQAACbsAAAgNAAAIjQAACE0AAAn7ABAHAwAACFMAAAgTABUIwwATByMAAAhzAAAIMwAACccAEQcLAAAIYwAACCMAAAmnAAAIAwAACIMAAAhDAAAJ5wAQBwcAAAhbAAAIGwAACZcAFAdDAAAIewAACDsAAAnXABIHEwAACGsAAAgrAAAJtwAACAsAAAiLAAAISwAACfcAEAcFAAAIVwAACBcAQAgAABMHMwAACHcAAAg3AAAJzwARBw8AAAhnAAAIJwAACa8AAAgH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Y05TXzExY2hhcl90cmFpdHNJY0VFRUUA0G0AAHg9AAAAPAAATlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABAAAAAAAAAAKw+AABZAAAAWgAAADgAAAD4////rD4AAFsAAABcAAAAwP///8D///+sPgAAXQAAAF4AAADIPQAALD4AAGg+AAB8PgAAkD4AAKQ+AABUPgAAQD4AAPA9AADcPQAAQAAAAAAAAAAcPQAATAAAAE0AAAA4AAAA+P///xw9AABOAAAATwAAAMD////A////HD0AAFAAAABRAAAAQAAAAAAAAAA8PAAARAAAAEUAAADA////wP///zw8AABGAAAARwAAADgAAAAAAAAAhDwAAEgAAABJAAAAyP///8j///+EPAAASgAAAEsAAADQbQAAuD4AABw9AABOU3QzX18yMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRQAAAAAAAAAAED8AAF8AAABgAAAAqG0AABg/AABOU3QzX18yOGlvc19iYXNlRQAAAAAAAADRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAAAAAAAAAAgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADA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\")), I((await RI(A)).instance));\n  }();\n  function rA() {\n    function I() {\n      var g;\n      if (i.calledRun = !0, !fA) {\n        if (WA = !0, X.G(), AA == null || AA(i), (g = i.onRuntimeInitialized) == null || g.call(i), i.postRun) for (typeof i.postRun == \"function\" && (i.postRun = [i.postRun]); i.postRun.length; ) {\n          var A = i.postRun.shift();\n          XA.push(A);\n        }\n        VA(XA);\n      }\n    }\n    if (0 < e) u = rA;\n    else {\n      if (i.preRun) for (typeof i.preRun == \"function\" && (i.preRun = [i.preRun]); i.preRun.length; ) sI();\n      VA(TA), 0 < e ? u = rA : i.setStatus ? (i.setStatus(\"Running...\"), setTimeout(() => {\n        setTimeout(() => i.setStatus(\"\"), 1), I();\n      }, 1)) : I();\n    }\n  }\n  if (i.preInit) for (typeof i.preInit == \"function\" && (i.preInit = [i.preInit]); 0 < i.preInit.length; ) i.preInit.shift()();\n  return rA(), WA ? s = i : s = new Promise((I, A) => {\n    AA = I, IA = A;\n  }), s;\n}\nconst T = (R, s, i = (L) => L) => {\n  const L = R.vf32_ptr(s), k = s.size();\n  return new Float32Array(R.HEAPF32.buffer, L, k).map(i);\n}, pI = (R) => 1 / (1 + Math.exp(-R)), OI = (R) => (s) => s * R + 0.5, PI = (R, s, i) => {\n  const L = (i == null ? void 0 : i.colorScaleFactor) ?? 0.282;\n  return {\n    numPoints: s.numPoints,\n    shDegree: s.shDegree,\n    antialiased: s.antialiased,\n    positions: T(R, s.positions),\n    scales: T(R, s.scales, Math.exp),\n    rotations: T(R, s.rotations),\n    alphas: T(R, s.alphas, pI),\n    colors: T(\n      R,\n      s.colors,\n      OI(L)\n    ),\n    // FIXME: incorrect SH logic\n    sh: T(R, s.sh)\n  };\n}, uI = (R, s) => {\n  R._free(R.vf32_ptr(s.positions)), R._free(R.vf32_ptr(s.scales)), R._free(R.vf32_ptr(s.rotations)), R._free(R.vf32_ptr(s.alphas)), R._free(R.vf32_ptr(s.colors)), R._free(R.vf32_ptr(s.sh));\n}, mI = async (R, s) => {\n  var f;\n  const i = await TI(), L = R instanceof Uint8Array ? R : new Uint8Array(R);\n  let k = null;\n  try {\n    if (k = i._malloc(\n      Uint8Array.BYTES_PER_ELEMENT * L.length\n    ), k === null)\n      throw new Error(\"couldn't allocate memory\");\n    i.HEAPU8.set(L, k / Uint8Array.BYTES_PER_ELEMENT);\n    const r = i.CoordinateSystem[((f = s == null ? void 0 : s.unpackOptions) == null ? void 0 : f.coordinateSystem) ?? \"UNSPECIFIED\"], x = i.load_spz(k, L.length, {\n      coordinateSystem: r\n    }), p = PI(\n      i,\n      x,\n      s\n    );\n    return uI(i, x), p;\n  } catch (r) {\n    throw r;\n  } finally {\n    k !== null && i._free(k);\n  }\n}, zI = (R, s) => fetch(R).then((i) => i.arrayBuffer()).then((i) => mI(i, s)), bI = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n  mI as loadSpz,\n  zI as loadSpzFromUrl\n};\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\nimport { loadSpz } from \"@spz-loader/core\";\n\n/**\n * Load a SPZ buffer from a glTF.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfSpzLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {object} options.gltf The glTF JSON.\n   * @param {object} options.primitive The primitive containing the SPZ extension.\n   * @param {object} options.spz The SPZ extension object.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltf = options.gltf;\n    const primitive = options.primitive;\n    const spz = options.spz;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const cacheKey = options.cacheKey;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.object(\"options.primitive\", primitive);\n    Check.typeOf.object(\"options.spz\", spz);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    //>>includeEnd('debug');\n\n    this._resourceCache = resourceCache;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._gltf = gltf;\n    this._primitive = primitive;\n    this._spz = spz;\n    this._cacheKey = cacheKey;\n    this._bufferViewLoader = undefined;\n    this._bufferViewTypedArray = undefined;\n    this._decodePromise = undefined;\n    this._decodedData = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n    this._spzError = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   * @memberof GltfSpzLoader.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The decoded SPZ data.\n   * @memberof GltfSpzLoader.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  get decodedData() {\n    return this._decodedData;\n  }\n\n  /**\n   * Loads the SPZ resource.\n   * @returns {Promise<Resource>} A promise that resolves to the resource when the SPZ is loaded.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._state = ResourceLoaderState.LOADING;\n    this._promise = loadResources(this);\n    return this._promise;\n  }\n\n  /**\n   * Processes the SPZ resource.\n   * @param {FrameState} frameState The frame state.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === ResourceLoaderState.READY) {\n      return true;\n    }\n\n    if (this._state !== ResourceLoaderState.PROCESSING) {\n      return false;\n    }\n\n    if (defined(this._spzError)) {\n      handleError(this, this._spzError);\n    }\n\n    if (!defined(this._bufferViewTypedArray)) {\n      return false;\n    }\n\n    if (defined(this._decodePromise)) {\n      return false;\n    }\n\n    const decodePromise = loadSpz(this._bufferViewTypedArray, {\n      unpackOptions: { coordinateSystem: \"UNSPECIFIED\" },\n    });\n\n    if (!defined(decodePromise)) {\n      return false;\n    }\n\n    this._decodePromise = processDecode(this, decodePromise);\n  }\n\n  /**\n   * Unloads the SPZ resource and frees associated resources.\n   * @private\n   */\n  unload() {\n    if (defined(this._bufferViewLoader)) {\n      this._resourceCache.unload(this._bufferViewLoader);\n    }\n\n    this._bufferViewLoader = undefined;\n    this._bufferViewTypedArray = undefined;\n    this._decodedData = undefined;\n    this._gltf = undefined;\n    this._primitive = undefined;\n  }\n}\n\nasync function loadResources(loader) {\n  const resourceCache = loader._resourceCache;\n  try {\n    const bufferViewLoader = resourceCache.getBufferViewLoader({\n      gltf: loader._gltf,\n      bufferViewId: 0,\n      gltfResource: loader._gltfResource,\n      baseResource: loader._baseResource,\n    });\n    loader._bufferViewLoader = bufferViewLoader;\n    await bufferViewLoader.load();\n\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader._bufferViewTypedArray = bufferViewLoader.typedArray;\n    loader._state = ResourceLoaderState.PROCESSING;\n    return loader;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    handleError(loader, error);\n  }\n}\n\nfunction handleError(spzLoader, error) {\n  spzLoader.unload();\n  spzLoader._state = ResourceLoaderState.FAILED;\n  const errorMessage = \"Failed to load SPZ\";\n  throw spzLoader.getError(errorMessage, error);\n}\n\nasync function processDecode(loader, decodePromise) {\n  try {\n    const gcloud = await decodePromise;\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader.unload();\n\n    loader._decodedData = {\n      gcloud: gcloud,\n    };\n    loader._state = ResourceLoaderState.READY;\n    return loader._baseResource;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader._spzError = error;\n  }\n}\n\nexport default GltfSpzLoader;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport parseStructuralMetadata from \"./parseStructuralMetadata.js\";\nimport parseFeatureMetadataLegacy from \"./parseFeatureMetadataLegacy.js\";\nimport ResourceCache from \"./ResourceCache.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\n\n/**\n * Loads glTF structural metadata\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nclass GltfStructuralMetadataLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {object} options.gltf The glTF JSON.\n   * @param {string} [options.extension] The <code>EXT_structural_metadata</code> extension object. If this is undefined, then extensionLegacy must be defined.\n   * @param {string} [options.extensionLegacy] The legacy <code>EXT_feature_metadata</code> extension for backwards compatibility.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {SupportedImageFormats} options.supportedImageFormats The supported image formats.\n   * @param {FrameState} options.frameState The frame state.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const {\n      gltf,\n      extension,\n      extensionLegacy,\n      gltfResource,\n      baseResource,\n      supportedImageFormats,\n      frameState,\n      cacheKey,\n      asynchronous = true,\n    } = options;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    Check.typeOf.object(\"options.supportedImageFormats\", supportedImageFormats);\n    Check.typeOf.object(\"options.frameState\", frameState);\n\n    if (!defined(options.extension) && !defined(options.extensionLegacy)) {\n      throw new DeveloperError(\n        \"One of options.extension or options.extensionLegacy must be specified\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._gltf = gltf;\n    this._extension = extension;\n    this._extensionLegacy = extensionLegacy;\n    this._supportedImageFormats = supportedImageFormats;\n    this._frameState = frameState;\n    this._cacheKey = cacheKey;\n    this._asynchronous = asynchronous;\n    this._bufferViewLoaders = [];\n    this._bufferViewIds = [];\n    this._textureLoaders = [];\n    this._textureIds = [];\n    this._schemaLoader = undefined;\n    this._structuralMetadata = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfStructuralMetadataLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The parsed structural metadata\n   *\n   * @memberof GltfStructuralMetadataLoader.prototype\n   *\n   * @type {StructuralMetadata}\n   * @readonly\n   * @private\n   */\n  get structuralMetadata() {\n    return this._structuralMetadata;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfStructuralMetadataLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._state = ResourceLoaderState.LOADING;\n    this._promise = loadResources(this);\n    return this._promise;\n  }\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === ResourceLoaderState.READY) {\n      return true;\n    }\n\n    if (this._state !== ResourceLoaderState.LOADED) {\n      return false;\n    }\n\n    const textureLoaders = this._textureLoaders;\n    const textureLoadersLength = textureLoaders.length;\n    let ready = true;\n    for (let i = 0; i < textureLoadersLength; ++i) {\n      const textureLoader = textureLoaders[i];\n      const textureReady = textureLoader.process(frameState);\n      ready = ready && textureReady;\n    }\n\n    if (!ready) {\n      return false;\n    }\n\n    const schema = this._schemaLoader.schema;\n    const bufferViews = {};\n    for (let i = 0; i < this._bufferViewIds.length; ++i) {\n      const bufferViewId = this._bufferViewIds[i];\n      const bufferViewLoader = this._bufferViewLoaders[i];\n      if (!bufferViewLoader.isDestroyed()) {\n        // Copy the typed array and let the underlying ArrayBuffer be freed\n        const bufferViewTypedArray = new Uint8Array(\n          bufferViewLoader.typedArray,\n        );\n        bufferViews[bufferViewId] = bufferViewTypedArray;\n      }\n    }\n\n    const textures = {};\n    for (let i = 0; i < this._textureIds.length; ++i) {\n      const textureId = this._textureIds[i];\n      const textureLoader = textureLoaders[i];\n      if (!textureLoader.isDestroyed()) {\n        textures[textureId] = textureLoader.texture;\n      }\n    }\n    if (defined(this._extension)) {\n      this._structuralMetadata = parseStructuralMetadata({\n        extension: this._extension,\n        schema: schema,\n        bufferViews: bufferViews,\n        textures: textures,\n        context: frameState.context,\n      });\n    } else {\n      this._structuralMetadata = parseFeatureMetadataLegacy({\n        extension: this._extensionLegacy,\n        schema: schema,\n        bufferViews: bufferViews,\n        textures: textures,\n      });\n    }\n\n    // Buffer views can be unloaded after the data has been copied\n    unloadBufferViews(this);\n\n    this._state = ResourceLoaderState.READY;\n    return true;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    unloadBufferViews(this);\n    unloadTextures(this);\n\n    if (defined(this._schemaLoader)) {\n      ResourceCache.unload(this._schemaLoader);\n    }\n    this._schemaLoader = undefined;\n\n    if (defined(this._structuralMetadata)) {\n      this._structuralMetadata.destroy();\n    }\n\n    this._structuralMetadata = undefined;\n  }\n}\n\nasync function loadResources(loader) {\n  try {\n    const bufferViewsPromise = loadBufferViews(loader);\n    const texturesPromise = loadTextures(loader);\n    const schemaPromise = loadSchema(loader);\n\n    await Promise.all([bufferViewsPromise, texturesPromise, schemaPromise]);\n\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader._gltf = undefined; // No longer need to hold onto the glTF\n\n    loader._state = ResourceLoaderState.LOADED;\n    return loader;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader.unload();\n    loader._state = ResourceLoaderState.FAILED;\n    const errorMessage = \"Failed to load structural metadata\";\n    throw loader.getError(errorMessage, error);\n  }\n}\n\nfunction gatherBufferViewIdsFromProperties(properties, bufferViewIdSet) {\n  for (const propertyId in properties) {\n    if (properties.hasOwnProperty(propertyId)) {\n      const property = properties[propertyId];\n      const values = property.values;\n      const arrayOffsets = property.arrayOffsets;\n      const stringOffsets = property.stringOffsets;\n\n      // Using an object like a mathematical set\n      if (defined(values)) {\n        bufferViewIdSet[values] = true;\n      }\n      if (defined(arrayOffsets)) {\n        bufferViewIdSet[arrayOffsets] = true;\n      }\n      if (defined(stringOffsets)) {\n        bufferViewIdSet[stringOffsets] = true;\n      }\n    }\n  }\n}\n\nfunction gatherBufferViewIdsFromPropertiesLegacy(properties, bufferViewIdSet) {\n  for (const propertyId in properties) {\n    if (properties.hasOwnProperty(propertyId)) {\n      const property = properties[propertyId];\n      const bufferView = property.bufferView;\n      const arrayOffsetBufferView = property.arrayOffsetBufferView;\n      const stringOffsetBufferView = property.stringOffsetBufferView;\n\n      // Using an object like a mathematical set\n      if (defined(bufferView)) {\n        bufferViewIdSet[bufferView] = true;\n      }\n      if (defined(arrayOffsetBufferView)) {\n        bufferViewIdSet[arrayOffsetBufferView] = true;\n      }\n      if (defined(stringOffsetBufferView)) {\n        bufferViewIdSet[stringOffsetBufferView] = true;\n      }\n    }\n  }\n}\n\nfunction gatherUsedBufferViewIds(extension) {\n  const propertyTables = extension.propertyTables;\n  const bufferViewIdSet = {};\n  if (defined(propertyTables)) {\n    for (let i = 0; i < propertyTables.length; i++) {\n      const propertyTable = propertyTables[i];\n      gatherBufferViewIdsFromProperties(\n        propertyTable.properties,\n        bufferViewIdSet,\n      );\n    }\n  }\n  return bufferViewIdSet;\n}\n\nfunction gatherUsedBufferViewIdsLegacy(extensionLegacy) {\n  const featureTables = extensionLegacy.featureTables;\n\n  const bufferViewIdSet = {};\n  if (defined(featureTables)) {\n    for (const featureTableId in featureTables) {\n      if (featureTables.hasOwnProperty(featureTableId)) {\n        const featureTable = featureTables[featureTableId];\n        const properties = featureTable.properties;\n        if (defined(properties)) {\n          gatherBufferViewIdsFromPropertiesLegacy(properties, bufferViewIdSet);\n        }\n      }\n    }\n  }\n  return bufferViewIdSet;\n}\n\nasync function loadBufferViews(structuralMetadataLoader) {\n  let bufferViewIds;\n  if (defined(structuralMetadataLoader._extension)) {\n    bufferViewIds = gatherUsedBufferViewIds(\n      structuralMetadataLoader._extension,\n    );\n  } else {\n    bufferViewIds = gatherUsedBufferViewIdsLegacy(\n      structuralMetadataLoader._extensionLegacy,\n    );\n  }\n\n  // Load the buffer views\n  const bufferViewPromises = [];\n  for (const bufferViewId in bufferViewIds) {\n    if (bufferViewIds.hasOwnProperty(bufferViewId)) {\n      const bufferViewLoader = ResourceCache.getBufferViewLoader({\n        gltf: structuralMetadataLoader._gltf,\n        bufferViewId: parseInt(bufferViewId),\n        gltfResource: structuralMetadataLoader._gltfResource,\n        baseResource: structuralMetadataLoader._baseResource,\n      });\n\n      structuralMetadataLoader._bufferViewLoaders.push(bufferViewLoader);\n      structuralMetadataLoader._bufferViewIds.push(bufferViewId);\n\n      bufferViewPromises.push(bufferViewLoader.load());\n    }\n  }\n\n  return Promise.all(bufferViewPromises);\n}\n\nfunction gatherUsedTextureIds(structuralMetadataExtension) {\n  // Gather the used textures\n  const textureIds = {};\n  const propertyTextures = structuralMetadataExtension.propertyTextures;\n  if (defined(propertyTextures)) {\n    for (let i = 0; i < propertyTextures.length; i++) {\n      const propertyTexture = propertyTextures[i];\n      const properties = propertyTexture.properties;\n      if (defined(properties)) {\n        gatherTextureIdsFromProperties(properties, textureIds);\n      }\n    }\n  }\n  return textureIds;\n}\n\nfunction gatherTextureIdsFromProperties(properties, textureIds) {\n  for (const propertyId in properties) {\n    if (properties.hasOwnProperty(propertyId)) {\n      // in EXT_structural_metadata the property is a valid textureInfo.\n      const textureInfo = properties[propertyId];\n      textureIds[textureInfo.index] = textureInfo;\n    }\n  }\n}\n\nfunction gatherUsedTextureIdsLegacy(extensionLegacy) {\n  // Gather the used textures\n  const textureIds = {};\n  const featureTextures = extensionLegacy.featureTextures;\n  if (defined(featureTextures)) {\n    for (const featureTextureId in featureTextures) {\n      if (featureTextures.hasOwnProperty(featureTextureId)) {\n        const featureTexture = featureTextures[featureTextureId];\n        const properties = featureTexture.properties;\n        if (defined(properties)) {\n          gatherTextureIdsFromPropertiesLegacy(properties, textureIds);\n        }\n      }\n    }\n  }\n\n  return textureIds;\n}\n\nfunction gatherTextureIdsFromPropertiesLegacy(properties, textureIds) {\n  for (const propertyId in properties) {\n    if (properties.hasOwnProperty(propertyId)) {\n      const property = properties[propertyId];\n      const textureInfo = property.texture;\n      textureIds[textureInfo.index] = textureInfo;\n    }\n  }\n}\n\nfunction loadTextures(structuralMetadataLoader) {\n  let textureIds;\n  if (defined(structuralMetadataLoader._extension)) {\n    textureIds = gatherUsedTextureIds(structuralMetadataLoader._extension);\n  } else {\n    textureIds = gatherUsedTextureIdsLegacy(\n      structuralMetadataLoader._extensionLegacy,\n    );\n  }\n\n  const gltf = structuralMetadataLoader._gltf;\n  const gltfResource = structuralMetadataLoader._gltfResource;\n  const baseResource = structuralMetadataLoader._baseResource;\n  const supportedImageFormats = structuralMetadataLoader._supportedImageFormats;\n  const frameState = structuralMetadataLoader._frameState;\n  const asynchronous = structuralMetadataLoader._asynchronous;\n\n  // Load the textures\n  const texturePromises = [];\n  for (const textureId in textureIds) {\n    if (textureIds.hasOwnProperty(textureId)) {\n      const textureLoader = ResourceCache.getTextureLoader({\n        gltf: gltf,\n        textureInfo: textureIds[textureId],\n        gltfResource: gltfResource,\n        baseResource: baseResource,\n        supportedImageFormats: supportedImageFormats,\n        frameState: frameState,\n        asynchronous: asynchronous,\n      });\n      structuralMetadataLoader._textureLoaders.push(textureLoader);\n      structuralMetadataLoader._textureIds.push(textureId);\n      texturePromises.push(textureLoader.load());\n    }\n  }\n\n  return Promise.all(texturePromises);\n}\n\nasync function loadSchema(structuralMetadataLoader) {\n  const extension =\n    structuralMetadataLoader._extension ??\n    structuralMetadataLoader._extensionLegacy;\n\n  let schemaLoader;\n  if (defined(extension.schemaUri)) {\n    const resource = structuralMetadataLoader._baseResource.getDerivedResource({\n      url: extension.schemaUri,\n    });\n    schemaLoader = ResourceCache.getSchemaLoader({\n      resource: resource,\n    });\n  } else {\n    schemaLoader = ResourceCache.getSchemaLoader({\n      schema: extension.schema,\n    });\n  }\n\n  structuralMetadataLoader._schemaLoader = schemaLoader;\n  await schemaLoader.load();\n  if (!schemaLoader.isDestroyed()) {\n    return schemaLoader.schema;\n  }\n}\n\nfunction unloadBufferViews(structuralMetadataLoader) {\n  const bufferViewLoaders = structuralMetadataLoader._bufferViewLoaders;\n  const bufferViewLoadersLength = bufferViewLoaders.length;\n  for (let i = 0; i < bufferViewLoadersLength; ++i) {\n    ResourceCache.unload(bufferViewLoaders[i]);\n  }\n  structuralMetadataLoader._bufferViewLoaders.length = 0;\n  structuralMetadataLoader._bufferViewIds.length = 0;\n}\n\nfunction unloadTextures(structuralMetadataLoader) {\n  const textureLoaders = structuralMetadataLoader._textureLoaders;\n  const textureLoadersLength = textureLoaders.length;\n  for (let i = 0; i < textureLoadersLength; ++i) {\n    ResourceCache.unload(textureLoaders[i]);\n  }\n  structuralMetadataLoader._textureLoaders.length = 0;\n  structuralMetadataLoader._textureIds.length = 0;\n}\n\nexport default GltfStructuralMetadataLoader;\n","import Check from \"../Core/Check.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport GltfLoaderUtil from \"./GltfLoaderUtil.js\";\nimport JobType from \"./JobType.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\nimport resizeImageToNextPowerOfTwo from \"../Core/resizeImageToNextPowerOfTwo.js\";\n\n/**\n * Loads a glTF texture.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfTextureLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {object} options.gltf The glTF JSON.\n   * @param {object} options.textureInfo The texture info object.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {SupportedImageFormats} options.supportedImageFormats The supported image formats.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltf = options.gltf;\n    const textureInfo = options.textureInfo;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const supportedImageFormats = options.supportedImageFormats;\n    const cacheKey = options.cacheKey;\n    const asynchronous = options.asynchronous ?? true;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.object(\"options.textureInfo\", textureInfo);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    Check.typeOf.object(\"options.supportedImageFormats\", supportedImageFormats);\n    //>>includeEnd('debug');\n\n    const textureId = textureInfo.index;\n\n    // imageId is guaranteed to be defined otherwise the GltfTextureLoader\n    // wouldn't have been created\n    const imageId = GltfLoaderUtil.getImageIdFromTexture({\n      gltf: gltf,\n      textureId: textureId,\n      supportedImageFormats: supportedImageFormats,\n    });\n\n    this._resourceCache = resourceCache;\n    this._gltf = gltf;\n    this._textureInfo = textureInfo;\n    this._imageId = imageId;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._cacheKey = cacheKey;\n    this._asynchronous = asynchronous;\n    this._imageLoader = undefined;\n    this._image = undefined;\n    this._mipLevels = undefined;\n    this._texture = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfTextureLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The texture.\n   *\n   * @memberof GltfTextureLoader.prototype\n   *\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  get texture() {\n    return this._texture;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfDracoLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._state = ResourceLoaderState.LOADING;\n    this._promise = loadResources(this);\n    return this._promise;\n  }\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @returns {boolean} true once all resourced are ready.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === ResourceLoaderState.READY) {\n      return true;\n    }\n\n    if (\n      this._state !== ResourceLoaderState.LOADED &&\n      this._state !== ResourceLoaderState.PROCESSING\n    ) {\n      return false;\n    }\n\n    if (defined(this._texture)) {\n      // Already created texture\n      return false;\n    }\n\n    if (!defined(this._image)) {\n      // Not ready to create texture\n      return false;\n    }\n\n    this._state = ResourceLoaderState.PROCESSING;\n\n    let texture;\n    if (this._asynchronous) {\n      const textureJob = scratchTextureJob;\n      textureJob.set(\n        this._gltf,\n        this._textureInfo,\n        this._cacheKey,\n        this._image,\n        this._mipLevels,\n        frameState.context,\n      );\n      const jobScheduler = frameState.jobScheduler;\n      if (!jobScheduler.execute(textureJob, JobType.TEXTURE)) {\n        // Job scheduler is full. Try again next frame.\n        return false;\n      }\n      texture = textureJob.texture;\n    } else {\n      texture = createTexture(\n        this._gltf,\n        this._textureInfo,\n        this._cacheKey,\n        this._image,\n        this._mipLevels,\n        frameState.context,\n      );\n    }\n\n    // Unload everything except the texture\n    this.unload();\n\n    this._texture = texture;\n    this._state = ResourceLoaderState.READY;\n    this._resourceCache.statistics.addTextureLoader(this);\n    return true;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    if (defined(this._texture)) {\n      this._texture.destroy();\n    }\n\n    if (defined(this._imageLoader) && !this._imageLoader.isDestroyed()) {\n      this._resourceCache.unload(this._imageLoader);\n    }\n\n    this._imageLoader = undefined;\n    this._image = undefined;\n    this._mipLevels = undefined;\n    this._texture = undefined;\n    this._gltf = undefined;\n  }\n}\n\nclass CreateTextureJob {\n  constructor() {\n    this.gltf = undefined;\n    this.textureInfo = undefined;\n    this.textureId = undefined;\n    this.image = undefined;\n    this.context = undefined;\n    this.texture = undefined;\n  }\n\n  set(gltf, textureInfo, textureId, image, mipLevels, context) {\n    this.gltf = gltf;\n    this.textureInfo = textureInfo;\n    this.textureId = textureId;\n    this.image = image;\n    this.mipLevels = mipLevels;\n    this.context = context;\n  }\n\n  execute() {\n    this.texture = createTexture(\n      this.gltf,\n      this.textureInfo,\n      this.textureId,\n      this.image,\n      this.mipLevels,\n      this.context,\n    );\n  }\n}\n\nfunction createTexture(\n  gltf,\n  textureInfo,\n  textureId,\n  image,\n  mipLevels,\n  context,\n) {\n  // internalFormat is only defined for CompressedTextureBuffer\n  const internalFormat = image.internalFormat;\n\n  let compressedTextureNoMipmap = false;\n  if (PixelFormat.isCompressedFormat(internalFormat) && !defined(mipLevels)) {\n    compressedTextureNoMipmap = true;\n  }\n\n  const sampler = GltfLoaderUtil.createSampler({\n    gltf: gltf,\n    textureInfo: textureInfo,\n    compressedTextureNoMipmap: compressedTextureNoMipmap,\n  });\n\n  const minFilter = sampler.minificationFilter;\n  const wrapS = sampler.wrapS;\n  const wrapT = sampler.wrapT;\n\n  const samplerRequiresMipmap =\n    minFilter === TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||\n    minFilter === TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||\n    minFilter === TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||\n    minFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR;\n\n  // generateMipmap is disallowed for compressed textures. Compressed textures\n  // can have mipmaps but they must come with the KTX2 instead of generated by\n  // WebGL. Also note from the KHR_texture_basisu spec:\n  //\n  //   When a texture refers to a sampler with mipmap minification or when the\n  //   sampler is undefined, the KTX2 image SHOULD contain a full mip pyramid.\n  //\n  const generateMipmap = !defined(internalFormat) && samplerRequiresMipmap;\n\n  // WebGL 1 requires power-of-two texture dimensions for mipmapping and REPEAT/MIRRORED_REPEAT wrap modes.\n  const requiresPowerOfTwo =\n    generateMipmap ||\n    wrapS === TextureWrap.REPEAT ||\n    wrapS === TextureWrap.MIRRORED_REPEAT ||\n    wrapT === TextureWrap.REPEAT ||\n    wrapT === TextureWrap.MIRRORED_REPEAT;\n\n  const nonPowerOfTwo =\n    !CesiumMath.isPowerOfTwo(image.width) ||\n    !CesiumMath.isPowerOfTwo(image.height);\n\n  const requiresResize = requiresPowerOfTwo && nonPowerOfTwo;\n\n  let texture;\n  if (defined(internalFormat)) {\n    if (\n      !context.webgl2 &&\n      PixelFormat.isCompressedFormat(internalFormat) &&\n      nonPowerOfTwo &&\n      requiresPowerOfTwo\n    ) {\n      console.warn(\n        \"Compressed texture uses REPEAT or MIRRORED_REPEAT texture wrap mode and dimensions are not powers of two. The texture may be rendered incorrectly.\",\n      );\n    }\n\n    texture = Texture.create({\n      id: textureId,\n      context: context,\n      source: {\n        arrayBufferView: image.bufferView, // Only defined for CompressedTextureBuffer\n        mipLevels: mipLevels,\n      },\n      width: image.width,\n      height: image.height,\n      pixelFormat: image.internalFormat, // Only defined for CompressedTextureBuffer\n      sampler: sampler,\n    });\n  } else {\n    if (requiresResize) {\n      image = resizeImageToNextPowerOfTwo(image);\n    }\n    texture = Texture.create({\n      id: textureId,\n      context: context,\n      source: image,\n      sampler: sampler,\n      flipY: false,\n      skipColorSpaceConversion: true,\n    });\n  }\n\n  if (generateMipmap) {\n    texture.generateMipmap();\n  }\n\n  return texture;\n}\n\nconst scratchTextureJob = new CreateTextureJob();\n\nasync function loadResources(loader) {\n  const resourceCache = loader._resourceCache;\n  try {\n    const imageLoader = resourceCache.getImageLoader({\n      gltf: loader._gltf,\n      imageId: loader._imageId,\n      gltfResource: loader._gltfResource,\n      baseResource: loader._baseResource,\n    });\n    loader._imageLoader = imageLoader;\n    await imageLoader.load();\n\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    // Now wait for process() to run to finish loading\n    loader._image = imageLoader.image;\n    loader._mipLevels = imageLoader.mipLevels;\n    loader._state = ResourceLoaderState.LOADED;\n\n    return loader;\n  } catch (error) {\n    if (loader.isDestroyed()) {\n      return;\n    }\n\n    loader.unload();\n    loader._state = ResourceLoaderState.FAILED;\n    const errorMessage = \"Failed to load texture\";\n    throw loader.getError(errorMessage, error);\n  }\n}\n\nexport default GltfTextureLoader;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport AttributeType from \"./AttributeType.js\";\nimport JobType from \"./JobType.js\";\nimport ModelComponents from \"./ModelComponents.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * Loads a vertex buffer from a glTF buffer view.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GltfVertexBufferLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {ResourceCache} options.resourceCache The {@link ResourceCache} (to avoid circular dependencies).\n   * @param {object} options.gltf The glTF JSON.\n   * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n   * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {number} [options.bufferViewId] The bufferView ID corresponding to the vertex buffer.\n   * @param {object} [options.primitive] The primitive containing the Draco extension.\n   * @param {object} [options.draco] The Draco extension object.\n   * @param {string} [options.attributeSemantic] The attribute semantic, e.g. POSITION or NORMAL.\n   * @param {number} [options.accessorId] The accessor id.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n   * @param {boolean} [options.loadBuffer=false] Load vertex buffer as a GPU vertex buffer.\n   * @param {boolean} [options.loadTypedArray=false] Load vertex buffer as a typed array.\n   *\n   * @exception {DeveloperError} One of options.bufferViewId and options.draco must be defined.\n   * @exception {DeveloperError} When options.draco is defined options.attributeSemantic must also be defined.\n   * @exception {DeveloperError} When options.draco is defined options.accessorId must also be defined.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const resourceCache = options.resourceCache;\n    const gltf = options.gltf;\n    const gltfResource = options.gltfResource;\n    const baseResource = options.baseResource;\n    const bufferViewId = options.bufferViewId;\n    const primitive = options.primitive;\n    const draco = options.draco;\n    const attributeSemantic = options.attributeSemantic;\n    const accessorId = options.accessorId;\n    const cacheKey = options.cacheKey;\n    const spz = options.spz;\n    const asynchronous = options.asynchronous ?? true;\n    const loadBuffer = options.loadBuffer ?? false;\n    const loadTypedArray = options.loadTypedArray ?? false;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.resourceCache\", resourceCache);\n    Check.typeOf.object(\"options.gltf\", gltf);\n    Check.typeOf.object(\"options.gltfResource\", gltfResource);\n    Check.typeOf.object(\"options.baseResource\", baseResource);\n    if (!loadBuffer && !loadTypedArray) {\n      throw new DeveloperError(\n        \"At least one of loadBuffer and loadTypedArray must be true.\",\n      );\n    }\n\n    const hasBufferViewId = defined(bufferViewId);\n    const hasPrimitive = defined(primitive);\n    const hasDraco = hasDracoCompression(draco, attributeSemantic);\n    const hasAttributeSemantic = defined(attributeSemantic);\n    const hasAccessorId = defined(accessorId);\n    const hasSpz = defined(spz);\n    if (hasBufferViewId === (hasDraco !== hasSpz)) {\n      throw new DeveloperError(\n        \"One of options.bufferViewId, options.draco, or options.spz must be defined.\",\n      );\n    }\n\n    if (hasDraco && !hasAttributeSemantic) {\n      throw new DeveloperError(\n        \"When options.draco is defined options.attributeSemantic must also be defined.\",\n      );\n    }\n\n    if (hasDraco && !hasAccessorId) {\n      throw new DeveloperError(\n        \"When options.draco is defined options.accessorId must also be defined.\",\n      );\n    }\n\n    if (hasDraco && !hasPrimitive) {\n      throw new DeveloperError(\n        \"When options.draco is defined options.primitive must also be defined.\",\n      );\n    }\n\n    if (hasDraco) {\n      Check.typeOf.object(\"options.primitive\", primitive);\n      Check.typeOf.object(\"options.draco\", draco);\n      Check.typeOf.string(\"options.attributeSemantic\", attributeSemantic);\n      Check.typeOf.number(\"options.accessorId\", accessorId);\n    }\n\n    //>>includeEnd('debug');\n\n    this._resourceCache = resourceCache;\n    this._gltfResource = gltfResource;\n    this._baseResource = baseResource;\n    this._gltf = gltf;\n    this._bufferViewId = bufferViewId;\n    this._primitive = primitive;\n    this._draco = draco;\n    this._spz = spz;\n    this._attributeSemantic = attributeSemantic;\n    this._accessorId = accessorId;\n    this._cacheKey = cacheKey;\n    this._asynchronous = asynchronous;\n    this._loadBuffer = loadBuffer;\n    this._loadTypedArray = loadTypedArray;\n    this._bufferViewLoader = undefined;\n    this._dracoLoader = undefined;\n    this._quantization = undefined;\n    this._typedArray = undefined;\n    this._buffer = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfVertexBufferLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The vertex buffer. This is only defined when <code>loadAsTypedArray</code> is false.\n   *\n   * @memberof GltfVertexBufferLoader.prototype\n   *\n   * @type {Buffer}\n   * @readonly\n   * @private\n   */\n  get buffer() {\n    return this._buffer;\n  }\n\n  /**\n   * The typed array containing vertex buffer data. This is only defined when <code>loadAsTypedArray</code> is true.\n   *\n   * @memberof GltfVertexBufferLoader.prototype\n   *\n   * @type {Uint8Array}\n   * @readonly\n   * @private\n   */\n  get typedArray() {\n    return this._typedArray;\n  }\n\n  /**\n   * Information about the quantized vertex attribute after Draco decode.\n   *\n   * @memberof GltfVertexBufferLoader.prototype\n   *\n   * @type {ModelComponents.Quantization}\n   * @readonly\n   * @private\n   */\n  get quantization() {\n    return this._quantization;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GltfVertexBufferLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    if (defined(this._spz)) {\n      this._promise = loadFromSpz(this);\n      return this._promise;\n    }\n\n    if (hasDracoCompression(this._draco, this._attributeSemantic)) {\n      this._promise = loadFromDraco(this);\n      return this._promise;\n    }\n\n    this._promise = loadFromBufferView(this);\n    return this._promise;\n  }\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === ResourceLoaderState.READY) {\n      return true;\n    }\n\n    if (\n      this._state !== ResourceLoaderState.LOADED &&\n      this._state !== ResourceLoaderState.PROCESSING\n    ) {\n      return false;\n    }\n\n    if (defined(this._dracoLoader)) {\n      try {\n        const ready = this._dracoLoader.process(frameState);\n        if (!ready) {\n          return false;\n        }\n      } catch (error) {\n        handleError(this, error);\n      }\n\n      processDraco(this);\n    }\n\n    if (defined(this._spzLoader)) {\n      try {\n        const ready = this._spzLoader.process(frameState);\n        if (!ready) {\n          return false;\n        }\n      } catch (error) {\n        handleError(this, error);\n      }\n\n      processSpz(this);\n    }\n\n    let buffer;\n    const typedArray = this._typedArray;\n    if (this._loadBuffer && this._asynchronous) {\n      const vertexBufferJob = scratchVertexBufferJob;\n      vertexBufferJob.set(typedArray, frameState.context);\n      const jobScheduler = frameState.jobScheduler;\n      if (!jobScheduler.execute(vertexBufferJob, JobType.BUFFER)) {\n        // Job scheduler is full. Try again next frame.\n        return false;\n      }\n      buffer = vertexBufferJob.buffer;\n    } else if (this._loadBuffer) {\n      buffer = createVertexBuffer(typedArray, frameState.context);\n    }\n\n    // Unload everything except the vertex buffer\n    this.unload();\n\n    this._buffer = buffer;\n    this._typedArray = this._loadTypedArray ? typedArray : undefined;\n    this._state = ResourceLoaderState.READY;\n    this._resourceCache.statistics.addGeometryLoader(this);\n    return true;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    if (defined(this._buffer)) {\n      this._buffer.destroy();\n    }\n\n    const resourceCache = this._resourceCache;\n\n    if (\n      defined(this._bufferViewLoader) &&\n      !this._bufferViewLoader.isDestroyed()\n    ) {\n      resourceCache.unload(this._bufferViewLoader);\n    }\n\n    if (defined(this._dracoLoader)) {\n      resourceCache.unload(this._dracoLoader);\n    }\n\n    if (defined(this._spzLoader)) {\n      resourceCache.unload(this._spzLoader);\n    }\n\n    this._bufferViewLoader = undefined;\n    this._dracoLoader = undefined;\n    this._spzLoader = undefined;\n    this._typedArray = undefined;\n    this._buffer = undefined;\n    this._gltf = undefined;\n    this._primitive = undefined;\n  }\n}\n\nfunction hasDracoCompression(draco, semantic) {\n  return (\n    defined(draco) &&\n    defined(draco.attributes) &&\n    defined(draco.attributes[semantic])\n  );\n}\n\nfunction getQuantizationInformation(\n  dracoQuantization,\n  componentDatatype,\n  componentCount,\n  type,\n) {\n  const quantizationBits = dracoQuantization.quantizationBits;\n  const normalizationRange = (1 << quantizationBits) - 1;\n  const normalizationDivisor = 1.0 / normalizationRange;\n\n  const quantization = new ModelComponents.Quantization();\n  quantization.componentDatatype = componentDatatype;\n  quantization.octEncoded = dracoQuantization.octEncoded;\n  quantization.octEncodedZXY = true;\n  quantization.type = type;\n\n  if (quantization.octEncoded) {\n    quantization.type = AttributeType.VEC2;\n    quantization.normalizationRange = normalizationRange;\n  } else {\n    const MathType = AttributeType.getMathType(type);\n    if (MathType === Number) {\n      const dimensions = dracoQuantization.range;\n      quantization.quantizedVolumeOffset = dracoQuantization.minValues[0];\n      quantization.quantizedVolumeDimensions = dimensions;\n      quantization.normalizationRange = normalizationRange;\n      quantization.quantizedVolumeStepSize = dimensions * normalizationDivisor;\n    } else {\n      quantization.quantizedVolumeOffset = MathType.unpack(\n        dracoQuantization.minValues,\n      );\n      quantization.normalizationRange = MathType.unpack(\n        new Array(componentCount).fill(normalizationRange),\n      );\n      const packedDimensions = new Array(componentCount).fill(\n        dracoQuantization.range,\n      );\n      quantization.quantizedVolumeDimensions =\n        MathType.unpack(packedDimensions);\n\n      // Computing the step size\n      const packedSteps = packedDimensions.map(function (dimension) {\n        return dimension * normalizationDivisor;\n      });\n      quantization.quantizedVolumeStepSize = MathType.unpack(packedSteps);\n    }\n  }\n\n  return quantization;\n}\n\nasync function loadFromSpz(vertexBufferLoader) {\n  vertexBufferLoader._state = ResourceLoaderState.LOADING;\n  const resourceCache = vertexBufferLoader._resourceCache;\n  try {\n    const spzLoader = resourceCache.getSpzLoader({\n      gltf: vertexBufferLoader._gltf,\n      primitive: vertexBufferLoader._primitive,\n      spz: vertexBufferLoader._spz,\n      gltfResource: vertexBufferLoader._gltfResource,\n      baseResource: vertexBufferLoader._baseResource,\n    });\n    vertexBufferLoader._spzLoader = spzLoader;\n    await spzLoader.load();\n\n    if (vertexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    vertexBufferLoader._state = ResourceLoaderState.LOADED;\n    return vertexBufferLoader;\n  } catch {\n    if (vertexBufferLoader.isDestroyed()) {\n      return;\n    }\n  }\n}\n\nfunction getShAttributePrefix(attribute) {\n  const prefix = attribute.startsWith(\"KHR_gaussian_splatting:\")\n    ? \"KHR_gaussian_splatting:\"\n    : \"_\";\n  return `${prefix}SH_DEGREE_`;\n}\n\nfunction extractSHDegreeAndCoef(attribute) {\n  const prefix = getShAttributePrefix(attribute);\n  const separator = \"_COEF_\";\n\n  const lStart = prefix.length;\n  const coefIndex = attribute.indexOf(separator, lStart);\n\n  const l = parseInt(attribute.slice(lStart, coefIndex), 10);\n  const n = parseInt(attribute.slice(coefIndex + separator.length), 10);\n\n  return { l, n };\n}\n\nfunction processSpz(vertexBufferLoader) {\n  vertexBufferLoader._state = ResourceLoaderState.PROCESSING;\n  const spzLoader = vertexBufferLoader._spzLoader;\n\n  const gcloudData = spzLoader.decodedData.gcloud;\n\n  if (vertexBufferLoader._attributeSemantic === \"POSITION\") {\n    vertexBufferLoader._typedArray = gcloudData.positions;\n  } else if (\n    vertexBufferLoader._attributeSemantic === \"KHR_gaussian_splatting:SCALE\" ||\n    vertexBufferLoader._attributeSemantic === \"_SCALE\"\n  ) {\n    vertexBufferLoader._typedArray = gcloudData.scales;\n  } else if (\n    vertexBufferLoader._attributeSemantic ===\n      \"KHR_gaussian_splatting:ROTATION\" ||\n    vertexBufferLoader._attributeSemantic === \"_ROTATION\"\n  ) {\n    vertexBufferLoader._typedArray = gcloudData.rotations;\n  } else if (vertexBufferLoader._attributeSemantic === \"COLOR_0\") {\n    const colors = gcloudData.colors;\n    const alphas = gcloudData.alphas;\n    vertexBufferLoader._typedArray = new Uint8Array((colors.length / 3) * 4);\n    for (let i = 0; i < colors.length / 3; i++) {\n      vertexBufferLoader._typedArray[i * 4] = CesiumMath.clamp(\n        colors[i * 3] * 255.0,\n        0.0,\n        255.0,\n      );\n      vertexBufferLoader._typedArray[i * 4 + 1] = CesiumMath.clamp(\n        colors[i * 3 + 1] * 255.0,\n        0.0,\n        255.0,\n      );\n      vertexBufferLoader._typedArray[i * 4 + 2] = CesiumMath.clamp(\n        colors[i * 3 + 2] * 255.0,\n        0.0,\n        255.0,\n      );\n      vertexBufferLoader._typedArray[i * 4 + 3] = CesiumMath.clamp(\n        alphas[i] * 255.0,\n        0.0,\n        255.0,\n      );\n    }\n  } else if (vertexBufferLoader._attributeSemantic.includes(\"SH_DEGREE_\")) {\n    const { l, n } = extractSHDegreeAndCoef(\n      vertexBufferLoader._attributeSemantic,\n    );\n    const sphericalHarmonicDegree = gcloudData.shDegree;\n    let stride = 0;\n    const base = [0, 9, 24];\n    switch (sphericalHarmonicDegree) {\n      case 1:\n        stride = 9;\n        break;\n      case 2:\n        stride = 24;\n        break;\n      case 3:\n        stride = 45;\n        break;\n    }\n    const count = gcloudData.numPoints;\n    const sh = gcloudData.sh;\n    vertexBufferLoader._typedArray = new Float32Array(count * 3);\n    for (let i = 0; i < count; i++) {\n      const idx = i * stride + base[l - 1] + n * 3;\n      vertexBufferLoader._typedArray[i * 3] = sh[idx];\n      vertexBufferLoader._typedArray[i * 3 + 1] = sh[idx + 1];\n      vertexBufferLoader._typedArray[i * 3 + 2] = sh[idx + 2];\n    }\n  }\n}\n\nasync function loadFromDraco(vertexBufferLoader) {\n  vertexBufferLoader._state = ResourceLoaderState.LOADING;\n  const resourceCache = vertexBufferLoader._resourceCache;\n  try {\n    const dracoLoader = resourceCache.getDracoLoader({\n      gltf: vertexBufferLoader._gltf,\n      primitive: vertexBufferLoader._primitive,\n      draco: vertexBufferLoader._draco,\n      gltfResource: vertexBufferLoader._gltfResource,\n      baseResource: vertexBufferLoader._baseResource,\n    });\n    vertexBufferLoader._dracoLoader = dracoLoader;\n    await dracoLoader.load();\n\n    if (vertexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    // Now wait for process() to run to finish loading\n    vertexBufferLoader._state = ResourceLoaderState.LOADED;\n    return vertexBufferLoader;\n  } catch {\n    if (vertexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    handleError(vertexBufferLoader);\n  }\n}\n\nfunction processDraco(vertexBufferLoader) {\n  vertexBufferLoader._state = ResourceLoaderState.PROCESSING;\n  const dracoLoader = vertexBufferLoader._dracoLoader;\n\n  // Get the typed array and quantization information\n  const decodedVertexAttributes = dracoLoader.decodedData.vertexAttributes;\n  const attributeSemantic = vertexBufferLoader._attributeSemantic;\n  const dracoAttribute = decodedVertexAttributes[attributeSemantic];\n  const accessorId = vertexBufferLoader._accessorId;\n  const accessor = vertexBufferLoader._gltf.accessors[accessorId];\n  const type = accessor.type;\n  const typedArray = dracoAttribute.array;\n  const dracoQuantization = dracoAttribute.data.quantization;\n  if (defined(dracoQuantization)) {\n    vertexBufferLoader._quantization = getQuantizationInformation(\n      dracoQuantization,\n      dracoAttribute.data.componentDatatype,\n      dracoAttribute.data.componentsPerAttribute,\n      type,\n    );\n  }\n\n  vertexBufferLoader._typedArray = new Uint8Array(\n    typedArray.buffer,\n    typedArray.byteOffset,\n    typedArray.byteLength,\n  );\n}\n\nasync function loadFromBufferView(vertexBufferLoader) {\n  vertexBufferLoader._state = ResourceLoaderState.LOADING;\n  const resourceCache = vertexBufferLoader._resourceCache;\n  try {\n    const bufferViewLoader = resourceCache.getBufferViewLoader({\n      gltf: vertexBufferLoader._gltf,\n      bufferViewId: vertexBufferLoader._bufferViewId,\n      gltfResource: vertexBufferLoader._gltfResource,\n      baseResource: vertexBufferLoader._baseResource,\n    });\n    vertexBufferLoader._bufferViewLoader = bufferViewLoader;\n    await bufferViewLoader.load();\n\n    if (vertexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    vertexBufferLoader._typedArray = bufferViewLoader.typedArray;\n    vertexBufferLoader._state = ResourceLoaderState.PROCESSING;\n    return vertexBufferLoader;\n  } catch (error) {\n    if (vertexBufferLoader.isDestroyed()) {\n      return;\n    }\n\n    handleError(vertexBufferLoader, error);\n  }\n}\n\nfunction handleError(vertexBufferLoader, error) {\n  vertexBufferLoader.unload();\n  vertexBufferLoader._state = ResourceLoaderState.FAILED;\n  const errorMessage = \"Failed to load vertex buffer\";\n  throw vertexBufferLoader.getError(errorMessage, error);\n}\n\nclass CreateVertexBufferJob {\n  constructor() {\n    this.typedArray = undefined;\n    this.context = undefined;\n    this.buffer = undefined;\n  }\n\n  set(typedArray, context) {\n    this.typedArray = typedArray;\n    this.context = context;\n  }\n\n  execute() {\n    this.buffer = createVertexBuffer(this.typedArray, this.context);\n  }\n}\n\nfunction createVertexBuffer(typedArray, context) {\n  const buffer = Buffer.createVertexBuffer({\n    typedArray: typedArray,\n    context: context,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  buffer.vertexArrayDestroyable = false;\n  return buffer;\n}\n\nconst scratchVertexBufferJob = new CreateVertexBufferJob();\n\nexport default GltfVertexBufferLoader;\n","import Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport IonResource from \"../Core/IonResource.js\";\nimport Check from \"../Core/Check.js\";\nimport GoogleMaps from \"../Core/GoogleMaps.js\";\nimport { GOOGLE_2D_MAPS as createFromIonEndpoint } from \"./IonImageryProviderFactory.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nconst trailingSlashRegex = /\\/$/;\n\n/**\n * @typedef {object} Google2DImageryProvider.ConstructorOptions\n *\n * Initialization options for the Google2DImageryProvider constructor\n *\n * @property {string} key The Google api key to send with tile requests.\n * @property {string} session The Google session token that tracks the current state of your map and viewport.\n * @property {string|Resource|IonResource} url The Google 2D maps endpoint.\n * @property {string} tileWidth The width of each tile in pixels.\n * @property {string} tileHeight The height of each tile in pixels.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @property {number} [maximumLevel=22] The maximum level-of-detail supported by the imagery provider.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n */\n\n/**\n * <div class=\"notice\">\n * This object is normally not instantiated directly, use {@link Google2DImageryProvider.fromIonAssetId} or {@link Google2DImageryProvider.fromUrl}.\n * </div>\n *\n *\n * Provides 2D image tiles from {@link https://developers.google.com/maps/documentation/tile/2d-tiles-overview|Google 2D Tiles}.\n *\n * Google 2D Tiles can only be used with the Google geocoder.\n *\n * @alias Google2DImageryProvider\n * @constructor\n *\n * @param {Google2DImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Google 2D imagery provider\n * const googleTilesProvider = Cesium.Google2DImageryProvider.fromIonAssetId({\n *     assetId: 3830184\n * });\n  * @example\n * // Use your own Google api key\n * Cesium.GoogleMaps.defaultApiKey = \"your-api-key\";\n *\n * const googleTilesProvider = Cesium.Google2DImageryProvider.fromUrl({\n *     mapType: \"SATELLITE\"\n * });\n *\n\n *\n * @see {@link https://developers.google.com/maps/documentation/tile/2d-tiles-overview}\n * @see {@link https://developers.google.com/maps/documentation/tile/session_tokens}\n * @see {@link https://en.wikipedia.org/wiki/IETF_language_tag|IETF Language Tags}\n * @see {@link https://cldr.unicode.org/|Common Locale Data Repository region identifiers}\n */\n\nfunction Google2DImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  this._maximumLevel = options.maximumLevel ?? 22;\n  this._minimumLevel = options.minimumLevel ?? 0;\n\n  //>>includeStart(\"debug\", pragmas.debug);\n  Check.defined(\"options.session\", options.session);\n  Check.defined(\"options.tileWidth\", options.tileWidth);\n  Check.defined(\"options.tileHeight\", options.tileHeight);\n  Check.defined(\"options.key\", options.key);\n  //>>includeEnd(\"debug\");\n\n  this._session = options.session;\n  this._key = options.key;\n  this._tileWidth = options.tileWidth;\n  this._tileHeight = options.tileHeight;\n\n  const resource =\n    options.url instanceof IonResource\n      ? options.url\n      : Resource.createIfNeeded(options.url ?? GoogleMaps.mapTilesApiEndpoint);\n\n  let templateUrl = resource.getUrlComponent();\n  if (!trailingSlashRegex.test(templateUrl)) {\n    templateUrl += \"/\";\n  }\n  const tilesUrl = `${templateUrl}v1/2dtiles/{z}/{x}/{y}`;\n  this._viewportUrl = `${templateUrl}tile/v1/viewport`;\n\n  resource.url = tilesUrl;\n\n  resource.setQueryParameters({\n    session: encodeURIComponent(options.session),\n    key: encodeURIComponent(options.key),\n  });\n\n  this._resource = resource.clone();\n\n  let credit;\n  if (defined(options.credit)) {\n    credit = options.credit;\n    if (typeof credit === \"string\") {\n      credit = new Credit(credit);\n    }\n  }\n\n  const provider = new UrlTemplateImageryProvider({\n    url: resource,\n    credit: credit,\n    tileWidth: options.tileWidth,\n    tileHeight: options.tileHeight,\n    ellipsoid: options.ellipsoid,\n    rectangle: options.rectangle,\n    maximumLevel: this._maximumLevel,\n    minimumLevel: this._minimumLevel,\n  });\n  provider._resource = resource;\n  this._imageryProvider = provider;\n\n  // This will be defined for ion resources\n  this._tileCredits = resource.credits;\n  this._attributionsByLevel = undefined;\n}\n\nObject.defineProperties(Google2DImageryProvider.prototype, {\n  /**\n   * Gets the URL of the Google 2D Imagery server.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._imageryProvider.url;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._imageryProvider.rectangle;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._imageryProvider.tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._imageryProvider.tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._imageryProvider.maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested. Generally,\n   * a minimum level should only be used when the rectangle of the imagery is small\n   * enough that the number of tiles at the minimum level is small.  An imagery\n   * provider with more than a few tiles at the minimum level will lead to\n   * rendering problems.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return this._imageryProvider.minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._imageryProvider.tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._imageryProvider.tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._imageryProvider.errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._imageryProvider.credit;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._imageryProvider.proxy;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof Google2DImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return this._imageryProvider.hasAlphaChannel;\n    },\n  },\n});\n\n/**\n * Creates an {@link ImageryProvider} which provides 2D global tiled imagery from {@link https://developers.google.com/maps/documentation/tile/2d-tiles-overview|Google 2D Tiles}, streamed using the Cesium ion REST API.\n * @param {object} options Object with the following properties:\n * @param {string} options.assetId The Cesium ion asset id.\n * @param {\"satellite\" | \"terrain\" | \"roadmap\"} [options.mapType=\"satellite\"] The map type of the Google map imagery. Valid options are satellite, terrain, and roadmap. If overlayLayerType is set, mapType is ignored and a transparent overlay is returned. If overlayMapType is undefined, then a basemap of mapType is returned. layerRoadmap overlayLayerType is included in terrain and roadmap mapTypes.\n * @param {string} [options.language=\"en_US\"] an IETF language tag that specifies the language used to display information on the tiles\n * @param {string} [options.region=\"US\"] A Common Locale Data Repository region identifier (two uppercase letters) that represents the physical location of the user.\n * @param {\"layerRoadmap\" | \"layerStreetview\" | \"layerTraffic\"} [options.overlayLayerType] Returns a transparent overlay map with the specified layerType. If no value is provided, a basemap of mapType is returned. Use multiple instances of Google2DImageryProvider to add multiple Google Maps overlays to a scene. layerRoadmap is included in terrain and roadmap mapTypes, so adding as overlay to terrain or roadmap has no effect.\n * @param {object} [options.styles] An array of JSON style objects that specify the appearance and detail level of map features such as roads, parks, and built-up areas. Styling is used to customize the standard Google base map. The styles parameter is valid only if the mapType is roadmap. For the complete style syntax, see the ({@link https://developers.google.com/maps/documentation/tile/style-reference|Google Style Reference}).\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @param {number} [options.minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @param {number} [options.maximumLevel=22] The maximum level-of-detail supported by the imagery provider.\n * @param {Rectangle} [options.rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @param {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @returns {Promise<Google2DImageryProvider>} A promise that resolves to the created Google2DImageryProvider.\n *\n * @example\n * // Google 2D imagery provider\n * const googleTilesProvider = Cesium.Google2DImageryProvider.fromIonAssetId({\n *     assetId: 3830184\n * });\n * @example\n * // Google 2D roadmap overlay with custom styles\n * const googleTilesProvider = Cesium.Google2DImageryProvider.fromIonAssetId({\n *     assetId: 3830184,\n *     overlayLayerType: \"layerRoadmap\",\n *     styles: [\n *         {\n *             stylers: [{ hue: \"#00ffe6\" }, { saturation: -20 }],\n *         },\n *         {\n *             featureType: \"road\",\n *             elementType: \"geometry\",\n *             stylers: [{ lightness: 100 }, { visibility: \"simplified\" }],\n *         },\n *     ],\n * });\n */\nGoogle2DImageryProvider.fromIonAssetId = async function (options) {\n  options = options ?? {};\n  options.mapType = options.mapType ?? \"satellite\";\n  options.language = options.language ?? \"en_US\";\n  options.region = options.region ?? \"US\";\n\n  const overlayLayerType = options.overlayLayerType;\n  //>>includeStart(\"debug\", pragmas.debug);\n  if (defined(overlayLayerType)) {\n    Check.typeOf.string(\"options.overlayLayerType\", overlayLayerType);\n  }\n  Check.defined(\"options.assetId\", options.assetId);\n  //>>includeEnd(\"debug\");\n\n  const queryOptions = buildQueryOptions(options);\n\n  const endpointResource = IonResource._createEndpointResource(\n    options.assetId,\n    {\n      queryParameters: {\n        options: JSON.stringify(queryOptions),\n      },\n    },\n  );\n\n  const providerOptions = {\n    language: options.language,\n    region: options.region,\n    ellipsoid: options.ellipsoid,\n    minimumLevel: options.minimumLevel,\n    maximumLevel: options.maximumLevel,\n    rectangle: options.rectangle,\n    credit: options.credit,\n  };\n\n  const endpoint = await endpointResource.fetchJson();\n  const url = endpoint.options.url;\n  delete endpoint.options.url;\n  endpoint.options = {\n    ...endpoint.options,\n    ...providerOptions,\n  };\n\n  return createFromIonEndpoint(url, endpoint, endpointResource);\n};\n\n/**\n * Creates an {@link ImageryProvider} which provides 2D global tiled imagery from {@link https://developers.google.com/maps/documentation/tile/2d-tiles-overview|Google 2D Tiles}.\n * @param {object} options Object with the following properties:\n * @param {string} [options.key=GoogleMaps.defaultApiKey] Your API key to access Google 2D Tiles. See {@link https://developers.google.com/maps/documentation/javascript/get-api-key} for instructions on how to create your own key.\n * @param {\"satellite\" | \"terrain\" | \"roadmap\"} [options.mapType=\"satellite\"] The map type of the Google map imagery. Valid options are satellite, terrain, and roadmap. If overlayLayerType is set, mapType is ignored and a transparent overlay is returned. If overlayMapType is undefined, then a basemap of mapType is returned. layerRoadmap overlayLayerType is included in terrain and roadmap mapTypes.\n * @param {string} [options.language=\"en_US\"] an IETF language tag that specifies the language used to display information on the tiles\n * @param {string} [options.region=\"US\"] A Common Locale Data Repository region identifier (two uppercase letters) that represents the physical location of the user.\n * @param {\"layerRoadmap\" | \"layerStreetview\" | \"layerTraffic\"} [options.overlayLayerType] Returns a transparent overlay map with the specified layerType. If no value is provided, a basemap of mapType is returned. Use multiple instances of Google2DImageryProvider to add multiple Google Maps overlays to a scene. layerRoadmap is included in terrain and roadmap mapTypes, so adding as overlay to terrain or roadmap has no effect.\n * @param {object} [options.styles] An array of JSON style objects that specify the appearance and detail level of map features such as roads, parks, and built-up areas. Styling is used to customize the standard Google base map. The styles parameter is valid only if the mapType is roadmap. For the complete style syntax, see the ({@link https://developers.google.com/maps/documentation/tile/style-reference|Google Style Reference}).\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @param {number} [options.minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @param {number} [options.maximumLevel=22] The maximum level-of-detail supported by the imagery provider.\n * @param {Rectangle} [options.rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @param {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @returns {Promise<Google2DImageryProvider>} A promise that resolves to the created Google2DImageryProvider.\n *\n * @example\n * // Use your own Google api key\n * Cesium.GoogleMaps.defaultApiKey = \"your-api-key\";\n *\n * const googleTilesProvider = Cesium.Google2DImageryProvider.fromUrl({\n *     mapType: \"satellite\"\n * });\n * @example\n * // Google 2D roadmap overlay with custom styles\n * Cesium.GoogleMaps.defaultApiKey = \"your-api-key\";\n *\n * const googleTilesProvider = Cesium.Google2DImageryProvider.fromUrl({\n *     overlayLayerType: \"layerRoadmap\",\n *     styles: [\n *         {\n *             stylers: [{ hue: \"#00ffe6\" }, { saturation: -20 }],\n *         },\n *         {\n *             featureType: \"road\",\n *             elementType: \"geometry\",\n *             stylers: [{ lightness: 100 }, { visibility: \"simplified\" }],\n *         },\n *     ],\n * });\n */\nGoogle2DImageryProvider.fromUrl = async function (options) {\n  options = options ?? {};\n  options.mapType = options.mapType ?? \"satellite\";\n  options.language = options.language ?? \"en_US\";\n  options.region = options.region ?? \"US\";\n  options.url = options.url ?? GoogleMaps.mapTilesApiEndpoint;\n  options.key = options.key ?? GoogleMaps.defaultApiKey;\n\n  const overlayLayerType = options.overlayLayerType;\n  //>>includeStart(\"debug\", pragmas.debug);\n  if (defined(overlayLayerType)) {\n    Check.typeOf.string(\"overlayLayerType\", overlayLayerType);\n  }\n  if (!defined(options.key) && !defined(GoogleMaps.defaultApiKey)) {\n    throw new DeveloperError(\n      \"options.key or GoogleMaps.defaultApiKey is required.\",\n    );\n  }\n  //>>includeEnd(\"debug\");\n\n  const sessionJson = await createGoogleImagerySession(options);\n  return new Google2DImageryProvider({\n    ...sessionJson,\n    ...options,\n    credit: options.credit ?? GoogleMaps.getDefaultCredit(),\n  });\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]|undefined} The credits to be displayed when the tile is displayed.\n */\nGoogle2DImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  const hasAttributions = defined(this._attributionsByLevel);\n\n  if (!hasAttributions || !defined(this._tileCredits)) {\n    return undefined;\n  }\n\n  const innerCredits = this._attributionsByLevel.get(level);\n  if (!defined(this._tileCredits)) {\n    return innerCredits;\n  }\n\n  return this._tileCredits.concat(innerCredits);\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nGoogle2DImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const promise = this._imageryProvider.requestImage(x, y, level, request);\n\n  // If the requestImage call returns undefined, it couldn't be scheduled this frame. Make sure to return undefined so this can be handled upstream.\n  if (!defined(promise)) {\n    return undefined;\n  }\n\n  // Asynchronously request and populate _attributionsByLevel if it hasn't been already. We do this here so that the promise can be properly awaited.\n  if (!defined(this._attributionsByLevel)) {\n    return Promise.all([promise, this.getViewportCredits()]).then(\n      (results) => results[0],\n    );\n  }\n\n  return promise;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nGoogle2DImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\n\n/**\n * Get attribution for imagery from Google Maps to display in the credits\n * @private\n * @return {Promise<Map<Credit[]>>} The list of attribution sources to display in the credits.\n */\nGoogle2DImageryProvider.prototype.getViewportCredits = async function () {\n  const maximumLevel = this._maximumLevel;\n\n  const promises = [];\n  for (let level = 0; level < maximumLevel + 1; level++) {\n    promises.push(\n      fetchViewportAttribution(this._resource, this._viewportUrl, level),\n    );\n  }\n  const results = await Promise.all(promises);\n\n  const attributionsByLevel = new Map();\n  for (let level = 0; level < maximumLevel + 1; level++) {\n    const credits = [];\n    const attributions = results[level];\n    if (attributions) {\n      const levelCredits = new Credit(attributions);\n      credits.push(levelCredits);\n    }\n    attributionsByLevel.set(level, credits);\n  }\n\n  this._attributionsByLevel = attributionsByLevel;\n\n  return attributionsByLevel;\n};\n\nasync function fetchViewportAttribution(resource, url, level) {\n  const viewportResource = resource.getDerivedResource({\n    url,\n    queryParameters: {\n      zoom: level,\n      north: 90,\n      south: -90,\n      east: 180,\n      west: -180,\n    },\n    data: JSON.stringify(Frozen.EMPTY_OBJECT),\n  });\n  const viewportJson = await viewportResource.fetchJson();\n  return viewportJson.copyright;\n}\n\nfunction buildQueryOptions(options) {\n  const { mapType, overlayLayerType, styles } = options;\n\n  const queryOptions = {\n    mapType,\n    overlay: false,\n  };\n\n  if (mapType === \"terrain\" && !defined(overlayLayerType)) {\n    queryOptions.layerTypes = [\"layerRoadmap\"];\n  }\n\n  if (defined(overlayLayerType)) {\n    queryOptions.mapType = \"satellite\";\n    queryOptions.overlay = true;\n    queryOptions.layerTypes = [overlayLayerType];\n  }\n  if (defined(styles)) {\n    queryOptions.styles = styles;\n  }\n  return queryOptions;\n}\n\nasync function createGoogleImagerySession(options) {\n  const { language, region, key, url } = options;\n\n  const queryOptions = buildQueryOptions(options);\n\n  let baseUrl = url.url ?? url;\n  if (!trailingSlashRegex.test(baseUrl)) {\n    baseUrl += \"/\";\n  }\n\n  const response = await Resource.post({\n    url: `${baseUrl}v1/createSession`,\n    queryParameters: { key: key },\n    data: JSON.stringify({\n      ...queryOptions,\n      language,\n      region,\n    }),\n  });\n  const responseJson = JSON.parse(response);\n  return responseJson;\n}\n\nexport default Google2DImageryProvider;\n","import Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport decodeGoogleEarthEnterpriseData from \"../Core/decodeGoogleEarthEnterpriseData.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport GoogleEarthEnterpriseMetadata from \"../Core/GoogleEarthEnterpriseMetadata.js\";\nimport loadImageFromTypedArray from \"../Core/loadImageFromTypedArray.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Request from \"../Core/Request.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport * as protobuf from \"protobufjs/dist/minimal/protobuf.js\";\n\n/**\n * @private\n */\nfunction GoogleEarthEnterpriseDiscardPolicy() {\n  this._image = new Image();\n}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nGoogleEarthEnterpriseDiscardPolicy.prototype.isReady = function () {\n  return true;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {boolean} True if the image should be discarded; otherwise, false.\n */\nGoogleEarthEnterpriseDiscardPolicy.prototype.shouldDiscardImage = function (\n  image,\n) {\n  return image === this._image;\n};\n\n/**\n * @typedef {object} GoogleEarthEnterpriseImageryProvider.ConstructorOptions\n *\n * Initialization options for the GoogleEarthEnterpriseImageryProvider constructor\n *\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n *        is invalid and should be discarded. If this value is not specified, a default\n *        is to discard tiles that fail to download.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * <div class=\"notice\">\n * To construct a GoogleEarthEnterpriseImageryProvider, call {@link GoogleEarthEnterpriseImageryProvider.fromMetadata}. Do not call the constructor directly.\n * </div>\n *\n * Provides tiled imagery using the Google Earth Enterprise REST API.\n *\n * Notes: This provider is for use with the 3D Earth API of Google Earth Enterprise,\n *        {@link GoogleEarthEnterpriseMapsProvider} should be used with 2D Maps API.\n *\n * @alias GoogleEarthEnterpriseImageryProvider\n * @constructor\n *\n * @param {GoogleEarthEnterpriseImageryProvider.ConstructorOptions} [options] Object describing initialization options\n *\n * @see GoogleEarthEnterpriseImageryProvider.fromMetadata\n * @see GoogleEarthEnterpriseTerrainProvider\n * @see ArcGisMapServerImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n *\n * @example\n * const geeMetadata = await GoogleEarthEnterpriseMetadata.fromUrl(\"http://www.example.com\");\n * const gee = Cesium.GoogleEarthEnterpriseImageryProvider.fromMetadata(geeMetadata);\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction GoogleEarthEnterpriseImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  this._tileDiscardPolicy = options.tileDiscardPolicy;\n\n  this._tilingScheme = new GeographicTilingScheme({\n    numberOfLevelZeroTilesX: 2,\n    numberOfLevelZeroTilesY: 2,\n    rectangle: new Rectangle(\n      -CesiumMath.PI,\n      -CesiumMath.PI,\n      CesiumMath.PI,\n      CesiumMath.PI,\n    ),\n    ellipsoid: options.ellipsoid,\n  });\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n\n  this._tileWidth = 256;\n  this._tileHeight = 256;\n  this._maximumLevel = 23;\n\n  // Install the default tile discard policy if none has been supplied.\n  if (!defined(this._tileDiscardPolicy)) {\n    this._tileDiscardPolicy = new GoogleEarthEnterpriseDiscardPolicy();\n  }\n\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(GoogleEarthEnterpriseImageryProvider.prototype, {\n  /**\n   * Gets the name of the Google Earth Enterprise server url hosting the imagery.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._metadata.url;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._metadata.proxy;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._tilingScheme.rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  Setting this property to false reduces memory usage\n   * and texture upload time.\n   * @memberof GoogleEarthEnterpriseImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return false;\n    },\n  },\n});\n\n/**\n * Creates a tiled imagery provider using the Google Earth Enterprise REST API.\n * @param {GoogleEarthEnterpriseMetadata} metadata A metadata object that can be used to share metadata requests with a GoogleEarthEnterpriseTerrainProvider.\n * @param {GoogleEarthEnterpriseImageryProvider.ConstructorOptions} options Object describing initialization options.\n * @returns {GoogleEarthEnterpriseImageryProvider}\n *\n * @exception {RuntimeError} The metadata url does not have imagery\n *\n * @example\n * const geeMetadata = await GoogleEarthEnterpriseMetadata.fromUrl(\"http://www.example.com\");\n * const gee = Cesium.GoogleEarthEnterpriseImageryProvider.fromMetadata(geeMetadata);\n */\nGoogleEarthEnterpriseImageryProvider.fromMetadata = function (\n  metadata,\n  options,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"metadata\", metadata);\n  //>>includeEnd('debug');\n\n  if (!metadata.imageryPresent) {\n    throw new RuntimeError(`The server ${metadata.url} doesn't have imagery`);\n  }\n\n  const provider = new GoogleEarthEnterpriseImageryProvider(options);\n  provider._metadata = metadata;\n  return provider;\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nGoogleEarthEnterpriseImageryProvider.prototype.getTileCredits = function (\n  x,\n  y,\n  level,\n) {\n  const metadata = this._metadata;\n  const info = metadata.getTileInformation(x, y, level);\n  if (defined(info)) {\n    const credit = metadata.providers[info.imageryProvider];\n    if (defined(credit)) {\n      return [credit];\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nGoogleEarthEnterpriseImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const invalidImage = this._tileDiscardPolicy._image; // Empty image or undefined depending on discard policy\n  const metadata = this._metadata;\n  const quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n  const info = metadata.getTileInformation(x, y, level);\n  if (!defined(info)) {\n    if (metadata.isValid(quadKey)) {\n      const metadataRequest = new Request({\n        throttle: request.throttle,\n        throttleByServer: request.throttleByServer,\n        type: request.type,\n        priorityFunction: request.priorityFunction,\n      });\n      metadata.populateSubtree(x, y, level, metadataRequest);\n      return undefined; // No metadata so return undefined so we can be loaded later\n    }\n    return Promise.resolve(invalidImage); // Image doesn't exist\n  }\n\n  if (!info.hasImagery()) {\n    // Already have info and there isn't any imagery here\n    return Promise.resolve(invalidImage);\n  }\n  const promise = buildImageResource(\n    this,\n    info,\n    x,\n    y,\n    level,\n    request,\n  ).fetchArrayBuffer();\n  if (!defined(promise)) {\n    return undefined; // Throttled\n  }\n\n  return promise.then(function (image) {\n    decodeGoogleEarthEnterpriseData(metadata.key, image);\n    let a = new Uint8Array(image);\n    let type;\n\n    const protoImagery = metadata.protoImagery;\n    if (!defined(protoImagery) || !protoImagery) {\n      type = getImageType(a);\n    }\n\n    if (!defined(type) && (!defined(protoImagery) || protoImagery)) {\n      const message = decodeEarthImageryPacket(a);\n      type = message.imageType;\n      a = message.imageData;\n    }\n\n    if (!defined(type) || !defined(a)) {\n      return invalidImage;\n    }\n\n    return loadImageFromTypedArray({\n      uint8Array: a,\n      format: type,\n      flipY: true,\n    });\n  });\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nGoogleEarthEnterpriseImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\n\n//\n// Functions to handle imagery packets\n//\nfunction buildImageResource(imageryProvider, info, x, y, level, request) {\n  const quadKey = GoogleEarthEnterpriseMetadata.tileXYToQuadKey(x, y, level);\n  let version = info.imageryVersion;\n  version = defined(version) && version > 0 ? version : 1;\n\n  return imageryProvider._metadata.resource.getDerivedResource({\n    url: `flatfile?f1-0${quadKey}-i.${version.toString()}`,\n    request: request,\n  });\n}\n\n// Detects if a Uint8Array is a JPEG or PNG\nfunction getImageType(image) {\n  const jpeg = \"JFIF\";\n  if (\n    image[6] === jpeg.charCodeAt(0) &&\n    image[7] === jpeg.charCodeAt(1) &&\n    image[8] === jpeg.charCodeAt(2) &&\n    image[9] === jpeg.charCodeAt(3)\n  ) {\n    return \"image/jpeg\";\n  }\n\n  const png = \"PNG\";\n  if (\n    image[1] === png.charCodeAt(0) &&\n    image[2] === png.charCodeAt(1) &&\n    image[3] === png.charCodeAt(2)\n  ) {\n    return \"image/png\";\n  }\n\n  return undefined;\n}\n\n// Decodes an Imagery protobuf into the message\n// Partially generated with the help of protobuf.js static generator\nfunction decodeEarthImageryPacket(data) {\n  const reader = protobuf.Reader.create(data);\n  const end = reader.len;\n  const message = {};\n  while (reader.pos < end) {\n    const tag = reader.uint32();\n    let copyrightIds;\n    switch (tag >>> 3) {\n      case 1:\n        message.imageType = reader.uint32();\n        break;\n      case 2:\n        message.imageData = reader.bytes();\n        break;\n      case 3:\n        message.alphaType = reader.uint32();\n        break;\n      case 4:\n        message.imageAlpha = reader.bytes();\n        break;\n      case 5:\n        copyrightIds = message.copyrightIds;\n        if (!defined(copyrightIds)) {\n          copyrightIds = message.copyrightIds = [];\n        }\n        if ((tag & 7) === 2) {\n          const end2 = reader.uint32() + reader.pos;\n          while (reader.pos < end2) {\n            copyrightIds.push(reader.uint32());\n          }\n        } else {\n          copyrightIds.push(reader.uint32());\n        }\n        break;\n      default:\n        reader.skipType(tag & 7);\n        break;\n    }\n  }\n\n  const imageType = message.imageType;\n  if (defined(imageType)) {\n    switch (imageType) {\n      case 0:\n        message.imageType = \"image/jpeg\";\n        break;\n      case 4:\n        message.imageType = \"image/png\";\n        break;\n      default:\n        throw new RuntimeError(\n          \"GoogleEarthEnterpriseImageryProvider: Unsupported image type.\",\n        );\n    }\n  }\n\n  const alphaType = message.alphaType;\n  if (defined(alphaType) && alphaType !== 0) {\n    console.log(\n      \"GoogleEarthEnterpriseImageryProvider: External alpha not supported.\",\n    );\n    delete message.alphaType;\n    delete message.imageAlpha;\n  }\n\n  return message;\n}\nexport default GoogleEarthEnterpriseImageryProvider;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\n/**\n * @typedef {object} GoogleEarthEnterpriseMapsProvider.ConstructorOptions\n *\n * Initialization options for the GoogleEarthEnterpriseMapsProvider constructor\n *\n * @property {number} channel The channel (id) to be used when requesting data from the server.\n *        The channel number can be found by looking at the json file located at:\n *        earth.localdomain/default_map/query?request=Json&vars=geeServerDefs The /default_map path may\n *        differ depending on your Google Earth Enterprise server configuration. Look for the \"id\" that\n *        is associated with a \"ImageryMaps\" requestType. There may be more than one id available.\n *        Example:\n *        {\n *          layers: [\n *            {\n *              id: 1002,\n *              requestType: \"ImageryMaps\"\n *            },\n *            {\n *              id: 1007,\n *              requestType: \"VectorMapsRaster\"\n *            }\n *          ]\n *        }\n * @property {string} [path=\"/default_map\"] The path of the Google Earth server hosting the imagery.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the Google Earth\n *        Enterprise server, or undefined if there is no limit.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile\n *        is invalid and should be discarded. To ensure that no tiles are discarded, construct and pass\n *        a {@link NeverTileDiscardPolicy} for this parameter.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n */\n\n/**\n * Used to track creation details while fetching initial metadata\n *\n * @constructor\n * @private\n *\n * @param {GoogleEarthEnterpriseMapsProvider.ConstructorOptions} options An object describing initialization options\n */\nfunction ImageryProviderBuilder(options) {\n  this.channel = options.channel;\n  this.ellipsoid = options.ellipsoid;\n  this.tilingScheme = undefined;\n  this.version = undefined;\n}\n\n/**\n * Complete GoogleEarthEnterpriseMapsProvider creation based on builder values.\n *\n * @private\n *\n * @param {GoogleEarthEnterpriseMapsProvider} provider\n */\nImageryProviderBuilder.prototype.build = function (provider) {\n  provider._channel = this.channel;\n  provider._version = this.version;\n  provider._tilingScheme = this.tilingScheme;\n};\n\nfunction metadataSuccess(text, imageryProviderBuilder) {\n  let data;\n\n  // The Google Earth server sends malformed JSON data currently...\n  try {\n    // First, try parsing it like normal in case a future version sends correctly formatted JSON\n    data = JSON.parse(text);\n  } catch (e) {\n    // Quote object strings manually, then try parsing again\n    data = JSON.parse(\n      text.replace(/([\\[\\{,])[\\n\\r ]*([A-Za-z0-9]+)[\\n\\r ]*:/g, '$1\"$2\":'),\n    );\n  }\n\n  let layer;\n  for (let i = 0; i < data.layers.length; i++) {\n    if (data.layers[i].id === imageryProviderBuilder.channel) {\n      layer = data.layers[i];\n      break;\n    }\n  }\n\n  if (!defined(layer)) {\n    const message = `Could not find layer with channel (id) of ${imageryProviderBuilder.channel}.`;\n    throw new RuntimeError(message);\n  }\n\n  if (!defined(layer.version)) {\n    const message = `Could not find a version in channel (id) ${imageryProviderBuilder.channel}.`;\n    throw new RuntimeError(message);\n  }\n\n  imageryProviderBuilder.version = layer.version;\n\n  if (defined(data.projection) && data.projection === \"flat\") {\n    imageryProviderBuilder.tilingScheme = new GeographicTilingScheme({\n      numberOfLevelZeroTilesX: 2,\n      numberOfLevelZeroTilesY: 2,\n      rectangle: new Rectangle(-Math.PI, -Math.PI, Math.PI, Math.PI),\n      ellipsoid: imageryProviderBuilder.ellipsoid,\n    });\n    // Default to mercator projection when projection is undefined\n  } else if (!defined(data.projection) || data.projection === \"mercator\") {\n    imageryProviderBuilder.tilingScheme = new WebMercatorTilingScheme({\n      numberOfLevelZeroTilesX: 2,\n      numberOfLevelZeroTilesY: 2,\n      ellipsoid: imageryProviderBuilder.ellipsoid,\n    });\n  } else {\n    const message = `Unsupported projection ${data.projection}.`;\n    throw new RuntimeError(message);\n  }\n\n  return true;\n}\n\nfunction metadataFailure(error, metadataResource, provider) {\n  let message = `An error occurred while accessing ${metadataResource.url}.`;\n  if (defined(error) && defined(error.message)) {\n    message += `: ${error.message}`;\n  }\n\n  TileProviderError.reportError(\n    undefined,\n    provider,\n    defined(provider) ? provider._errorEvent : undefined,\n    message,\n  );\n\n  throw new RuntimeError(message);\n}\n\nasync function requestMetadata(\n  metadataResource,\n  imageryProviderBuilder,\n  provider,\n) {\n  try {\n    const text = await metadataResource.fetchText();\n    metadataSuccess(text, imageryProviderBuilder);\n  } catch (error) {\n    metadataFailure(error, metadataResource, provider);\n  }\n}\n\n/**\n * <div class=\"notice\">\n * To construct a GoogleEarthEnterpriseMapsProvider, call {@link GoogleEarthEnterpriseImageryProvider.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * Provides tiled imagery using the Google Earth Imagery API.\n *\n * Notes: This imagery provider does not work with the public Google Earth servers. It works with the\n *        Google Earth Enterprise Server.\n *\n *        By default the Google Earth Enterprise server does not set the\n *        {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} headers. You can either\n *        use a proxy server which adds these headers, or in the /opt/google/gehttpd/conf/gehttpd.conf\n *        and add the 'Header set Access-Control-Allow-Origin \"*\"' option to the '&lt;Directory /&gt;' and\n *        '&lt;Directory \"/opt/google/gehttpd/htdocs\"&gt;' directives.\n *\n *        This provider is for use with 2D Maps API as part of Google Earth Enterprise. For 3D Earth API uses, it\n *        is necessary to use {@link GoogleEarthEnterpriseImageryProvider}\n *\n * @alias GoogleEarthEnterpriseMapsProvider\n * @constructor\n *\n * @param {GoogleEarthEnterpriseMapsProvider.ConstructorOptions} options Object describing initialization options\n *\n * @exception {RuntimeError} Could not find layer with channel (id) of <code>options.channel</code>.\n * @exception {RuntimeError} Could not find a version in channel (id) <code>options.channel</code>.\n * @exception {RuntimeError} Unsupported projection <code>data.projection</code>.\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n *\n * @example\n * const google = await Cesium.GoogleEarthEnterpriseMapsProvider.fromUrl(\"https://earth.localdomain\", 1008);\n *\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction GoogleEarthEnterpriseMapsProvider(options) {\n  options = options ?? {};\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = 1.9;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  this._tileDiscardPolicy = options.tileDiscardPolicy;\n  this._channel = options.channel;\n  this._requestType = \"ImageryMaps\";\n  this._credit = new Credit(\n    `<a href=\"http://www.google.com/enterprise/mapsearth/products/earthenterprise.html\"><img src=\"${GoogleEarthEnterpriseMapsProvider.logoUrl}\" title=\"Google Imagery\"/></a>`,\n  );\n\n  this._tilingScheme = undefined;\n\n  this._version = undefined;\n\n  this._tileWidth = 256;\n  this._tileHeight = 256;\n  this._maximumLevel = options.maximumLevel;\n\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(GoogleEarthEnterpriseMapsProvider.prototype, {\n  /**\n   * Gets the URL of the Google Earth MapServer.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._url;\n    },\n  },\n\n  /**\n   * Gets the url path of the data on the Google Earth server.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  path: {\n    get: function () {\n      return this._path;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the imagery channel (id) currently being used.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  channel: {\n    get: function () {\n      return this._channel;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the version of the data used by this provider.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  version: {\n    get: function () {\n      return this._version;\n    },\n  },\n\n  /**\n   * Gets the type of data that is being requested from the provider.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  requestType: {\n    get: function () {\n      return this._requestType;\n    },\n  },\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._tilingScheme.rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof GoogleEarthEnterpriseMapsProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return true;\n    },\n  },\n});\n\n/**\n * Creates a tiled imagery provider using the Google Earth Imagery API.\n *\n * @param {Resource|string} url The url of the Google Earth server hosting the imagery.\n * @param {GoogleEarthEnterpriseMapsProvider.ConstructorOptions} [options] Object describing initialization options\n * @returns {Promise<GoogleEarthEnterpriseMapsProvider>} The created GoogleEarthEnterpriseMapsProvider.\n *\n * @exception {RuntimeError} Could not find layer with channel (id) of <code>options.channel</code>.\n * @exception {RuntimeError} Could not find a version in channel (id) <code>options.channel</code>.\n * @exception {RuntimeError} Unsupported projection <code>data.projection</code>.\n *\n * @example\n * const google = await Cesium.GoogleEarthEnterpriseMapsProvider.fromUrl(\"https://earth.localdomain\", 1008);\n */\nGoogleEarthEnterpriseMapsProvider.fromUrl = async function (\n  url,\n  channel,\n  options,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  Check.defined(\"channel\", channel);\n  //>>includeEnd('debug');\n\n  options = options ?? {};\n\n  const path = options.path ?? \"/default_map\";\n\n  const resource = Resource.createIfNeeded(url).getDerivedResource({\n    // We used to just append path to url, so now that we do proper URI resolution, removed the /\n    url: path[0] === \"/\" ? path.substring(1) : path,\n  });\n\n  resource.appendForwardSlash();\n\n  const metadataResource = resource.getDerivedResource({\n    url: \"query\",\n    queryParameters: {\n      request: \"Json\",\n      vars: \"geeServerDefs\",\n      is2d: \"t\",\n    },\n  });\n\n  const imageryProviderBuilder = new ImageryProviderBuilder(options);\n  imageryProviderBuilder.channel = channel;\n  await requestMetadata(metadataResource, imageryProviderBuilder);\n\n  const provider = new GoogleEarthEnterpriseMapsProvider(options);\n  imageryProviderBuilder.build(provider);\n\n  provider._resource = resource;\n  provider._url = url;\n  provider._path = path;\n\n  return provider;\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nGoogleEarthEnterpriseMapsProvider.prototype.getTileCredits = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nGoogleEarthEnterpriseMapsProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const resource = this._resource.getDerivedResource({\n    url: \"query\",\n    request: request,\n    queryParameters: {\n      request: this._requestType,\n      channel: this._channel,\n      version: this._version,\n      x: x,\n      y: y,\n      z: level + 1, // Google Earth starts with a zoom level of 1, not 0\n    },\n  });\n\n  return ImageryProvider.loadImage(this, resource);\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nGoogleEarthEnterpriseMapsProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\n\nGoogleEarthEnterpriseMapsProvider._logoUrl = undefined;\n\nObject.defineProperties(GoogleEarthEnterpriseMapsProvider, {\n  /**\n   * Gets or sets the URL to the Google Earth logo for display in the credit.\n   * @memberof GoogleEarthEnterpriseMapsProvider\n   * @type {string}\n   */\n  logoUrl: {\n    get: function () {\n      if (!defined(GoogleEarthEnterpriseMapsProvider._logoUrl)) {\n        GoogleEarthEnterpriseMapsProvider._logoUrl = buildModuleUrl(\n          \"Assets/Images/google_earth_credit.png\",\n        );\n      }\n      return GoogleEarthEnterpriseMapsProvider._logoUrl;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n\n      GoogleEarthEnterpriseMapsProvider._logoUrl = value;\n    },\n  },\n});\nexport default GoogleEarthEnterpriseMapsProvider;\n","import DeveloperError from \"../Core/DeveloperError.js\";\nimport defined from \"../Core/defined.js\";\nimport Resource from \"../Core/Resource.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport GoogleMaps from \"../Core/GoogleMaps.js\";\nimport CubeMapPanorama from \"./CubeMapPanorama.js\";\n\nconst DEFAULT_TILE_SIZE = 600;\n\n/**\n * <div class=\"notice\">\n * This object is normally not instantiated directly, use {@link GoogleStreetViewCubeMapPanoramaProvider.fromUrl}.\n * </div>\n *\n *\n * Creates a {@link PanoramaProvider} which provides imagery from {@link https://developers.google.com/maps/documentation/streetview|Google Street View Static API} to be displayed in a panorama.\n *\n * @alias GoogleStreetViewCubeMapPanoramaProvider\n * @constructor\n *\n * @see CubeMapPanorama\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=google-streetview-panorama|Cesium Sandcastle Google Streetview Panorama}\n *\n */\nfunction GoogleStreetViewCubeMapPanoramaProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  this._key = defined(options.key) ? options.key : GoogleMaps.defaultApiKey;\n\n  this._baseResource = Resource.createIfNeeded(\n    options.url ?? GoogleMaps.streetViewStaticApiEndpoint,\n  );\n\n  this._metadataResource = this._baseResource.getDerivedResource({\n    url: \"streetview/metadata\",\n  });\n\n  this._tileSize = options.tileSize ?? DEFAULT_TILE_SIZE;\n}\n\nObject.defineProperties(GoogleStreetViewCubeMapPanoramaProvider.prototype, {});\n\n/**\n * Gets the panorama primitive for a requested position and orientation.\n * @param {object} options Object with the following properties:\n * @param {Cartographic} options.cartographic The position to place the panorama in the scene.\n * @param {string} [options.panoId] The panoramaId identifier for the image in the Google API. If not provided this will be looked up for the provided cartographic location.\n * @param {number} [options.tileSize] - Optional tile size override (square).\n * @param {string} [options.signature] - Optional signature for signed URLs. See {@link https://developers.google.com/maps/documentation/streetview/digital-signature} for more information.\n * @param {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @returns {CubeMapPanorama} The panorama primitive textured with imagery.\n *\n * @example\n *\n * const provider = await Cesium.GoogleStreetViewCubeMapPanoramaProvider.fromUrl({\n *   key: 'your Google Streetview Static api key'\n * })\n *\n * const panoIdObject = provider.getNearestPanoId(position);\n * const position = Cartographic.fromDegrees(panoIdObject.location.lng, panoIdObject.location.lat, 0);\n *\n * const primitive = await provider.loadPanorama({\n *   cartographic: position,\n *   panoId: panoIdObject.panoId\n * });\n * viewer.scene.primitive.add(primitive);\n *\n */\nGoogleStreetViewCubeMapPanoramaProvider.prototype.loadPanorama =\n  async function (options) {\n    const cartographic = options.cartographic;\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(options.cartographic)) {\n      throw new DeveloperError(\"options.cartographic is required.\");\n    }\n    //>>includeEnd('debug');\n\n    const tileSize = options.tileSize ?? this._tileSize;\n    const tileSizeString = `${tileSize}x${tileSize}`;\n\n    const signature = options.signature;\n\n    let { panoId } = options;\n\n    if (!defined(panoId)) {\n      const panoIdObject = await this.getNearestPanoId(cartographic);\n      panoId = panoIdObject.panoId;\n    }\n\n    const credit = GoogleMaps.getDefaultCredit();\n\n    const posObj = Cartesian3.fromDegrees(\n      CesiumMath.toDegrees(cartographic.longitude),\n      CesiumMath.toDegrees(cartographic.latitude),\n      0,\n    );\n\n    const facePromises = [\n      this._loadFaceImage({\n        heading: 0,\n        pitch: 0,\n        tileSizeString,\n        panoId,\n        signature,\n      }),\n      this._loadFaceImage({\n        heading: 180,\n        pitch: 0,\n        tileSizeString,\n        panoId,\n        signature,\n      }),\n      this._loadFaceImage({\n        heading: -90,\n        pitch: -90,\n        tileSizeString,\n        panoId,\n        signature,\n      }),\n      this._loadFaceImage({\n        heading: -90,\n        pitch: 90,\n        tileSizeString,\n        panoId,\n        signature,\n      }),\n      this._loadFaceImage({\n        heading: 270,\n        pitch: 0,\n        tileSizeString,\n        panoId,\n        signature,\n      }),\n      this._loadFaceImage({\n        heading: 90,\n        pitch: 0,\n        tileSizeString,\n        panoId,\n        signature,\n      }),\n    ];\n\n    const [positiveX, negativeX, positiveY, negativeY, positiveZ, negativeZ] =\n      await Promise.all(facePromises);\n\n    const northDownEastToFixedFrameTransform =\n      Transforms.localFrameToFixedFrameGenerator(\"north\", \"down\");\n\n    const transform = Matrix4.getMatrix3(\n      northDownEastToFixedFrameTransform(posObj, Ellipsoid.default),\n      new Matrix3(),\n    );\n\n    const panorama = new CubeMapPanorama({\n      sources: {\n        positiveX,\n        negativeX,\n        positiveY,\n        negativeY,\n        positiveZ,\n        negativeZ,\n      },\n      transform: transform,\n      credit,\n    });\n\n    return panorama;\n  };\n\n/**\n * Gets the panoIds for the given cartographic location. See {@link https://developers.google.com/maps/documentation/tile/streetview#panoid-search}.\n\n * @param {Cartographic} position The position to search for the nearest panoId.\n * @param {number} [radius=50] The radius in meters to search for the nearest panoId.\n * \n * @returns {Object} an object containing a panoId, latitude, and longitude of the closest panorama\n * \n * @example\n * \n * const provider = await Cesium.GoogleStreetViewCubeMapPanoramaProvider.fromUrl({\n *   key: 'your Google Streetview Static api key'\n * })\n * const panoIds = provider.getNearestPanoId(position);\n */\nGoogleStreetViewCubeMapPanoramaProvider.prototype.getNearestPanoId =\n  async function (position, radius) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(position)) {\n      throw new DeveloperError(\"position is required.\");\n    }\n    //>>includeEnd('debug');\n\n    const pos = [\n      CesiumMath.toDegrees(position.latitude),\n      CesiumMath.toDegrees(position.longitude),\n    ];\n    const posString = pos.join(\",\");\n\n    const resource = this._metadataResource.getDerivedResource({\n      queryParameters: {\n        key: this._key,\n        location: posString,\n        radius: radius ?? 50,\n      },\n    });\n\n    const panoIdObject = await resource.fetchJson();\n\n    if (panoIdObject.status !== \"OK\") {\n      throw new DeveloperError(\n        `GoogleStreetViewCubeMapPanoramaProvider metadata error: ${panoIdObject.status}`,\n      );\n    }\n    return {\n      panoId: panoIdObject.pano_id,\n      latitude: panoIdObject.location.lat,\n      longitude: panoIdObject.location.lng,\n    };\n  };\n\n/**\n * Gets metadata for panoId. See {@link https://developers.google.com/maps/documentation/tile/streetview#metadata_response} for response object.\n * @param {string} panoId\n *\n * @returns {object} object containing metadata for the panoId.\n *\n * @example\n * const panoIdObject = provider.getNearestPanoId(position);\n * const panoIdMetadata = provider.getPanoIdMetadata(panoIdObject.panoId);\n *\n */\nGoogleStreetViewCubeMapPanoramaProvider.prototype.getPanoIdMetadata =\n  async function (panoId) {\n    const resource = this._metadataResource.getDerivedResource({\n      queryParameters: {\n        key: this._key,\n        pano: panoId,\n      },\n    });\n\n    const panoIdObject = await resource.fetchJson();\n\n    if (panoIdObject.status !== \"OK\") {\n      throw new DeveloperError(\n        `GoogleStreetViewCubeMapPanoramaProvider metadata error: ${panoIdObject.status}`,\n      );\n    }\n    return panoIdObject;\n  };\n\nGoogleStreetViewCubeMapPanoramaProvider.prototype._loadFaceImage =\n  async function (options) {\n    const url = this._buildFaceUrl(options);\n\n    try {\n      return await Resource.fetchImage({\n        url,\n        preferImageBitmap: true,\n        flipY: true,\n      });\n    } catch (error) {\n      throw new DeveloperError(`Failed to load Street View face image: ${url}`);\n    }\n  };\n\nGoogleStreetViewCubeMapPanoramaProvider.prototype._buildFaceUrl = function (\n  options,\n) {\n  const { heading, pitch, tileSizeString, panoId, signature } = options;\n  const resource = this._baseResource.getDerivedResource({\n    queryParameters: {\n      size: tileSizeString,\n      pano: panoId,\n      heading,\n      pitch,\n      key: this._key,\n      ...(defined(signature) && { signature }),\n    },\n  });\n\n  return resource.url;\n};\n\n/**\n * Creates a {@link PanoramaProvider} which provides cube face images from the {@link https://developers.google.com/maps/documentation/streetview|Google Street View Static API}.\n * @param {object} options Object with the following properties:\n * @param {string} [options.key=GoogleMaps.defaultStreetViewStaticApiKey] Your API key to access Google Street View Static API. See {@link https://developers.google.com/maps/documentation/javascript/get-api-key} for instructions on how to create your own key. If undefined, defaults to {@link GoogleMaps.defaultStreetViewStaticApiKey}. If that value is unavailable, falls back to {@link GoogleMaps.defaultApiKey}.\n * @param {string|Resource} [options.url=GoogleMaps.streetViewStaticApiEndpoint] The URL to access Google Street View Static API. See {@link https://developers.google.com/maps/documentation/streetview/overview} for more information.\n * @param {number} [options.tileSize=600] Default width and height (in pixels) of each square tile.\n * @param {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.\n *\n * @returns {Promise<GoogleStreetViewCubeMapPanoramaProvider>} A promise that resolves to the created GoogleStreetViewCubeMapPanoramaProvider.'\n *\n * @example\n * const provider = await Cesium.GoogleStreetViewCubeMapPanoramaProvider.fromUrl({\n *   key: 'your Google Streetview Static api key'\n * })\n */\nGoogleStreetViewCubeMapPanoramaProvider.fromUrl = async function (options) {\n  options = options ?? {};\n  options.key =\n    options.key ??\n    GoogleMaps.defaultStreetViewStaticApiKey ??\n    GoogleMaps.defaultApiKey;\n  if (\n    !defined(options.key) &&\n    !defined(GoogleMaps.defaultStreetViewStaticApiKey) &&\n    !defined(GoogleMaps.defaultApiKey)\n  ) {\n    throw new DeveloperError(\n      \"options.key, GoogleMaps.defaultStreetViewStaticApiKey or GoogleMaps.defaultApiKey is required.\",\n    );\n  }\n\n  return new GoogleStreetViewCubeMapPanoramaProvider({\n    ...options,\n  });\n};\n\nGoogleStreetViewCubeMapPanoramaProvider._parseMetadata = function (\n  panoIdMetadata,\n) {\n  const cartographic = Cartographic.fromDegrees(\n    panoIdMetadata.location.lng,\n    panoIdMetadata.location.lat,\n    0,\n  );\n  return {\n    cartographic,\n  };\n};\n\nexport default GoogleStreetViewCubeMapPanoramaProvider;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\n\nconst defaultColor = new Color(1.0, 1.0, 1.0, 0.4);\nconst defaultGlowColor = new Color(0.0, 1.0, 0.0, 0.05);\nconst defaultBackgroundColor = new Color(0.0, 0.5, 0.0, 0.2);\n\n/**\n * @typedef {object} GridImageryProvider.ConstructorOptions\n *\n * Initialization options for the GridImageryProvider constructor\n *\n * @property {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme for which to draw tiles.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If the tilingScheme is specified,\n *                    this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n *                    parameter is specified, the default ellipsoid is used.\n * @property {number} [cells=8] The number of grids cells.\n * @property {Color} [color=Color(1.0, 1.0, 1.0, 0.4)] The color to draw grid lines.\n * @property {Color} [glowColor=Color(0.0, 1.0, 0.0, 0.05)] The color to draw glow for grid lines.\n * @property {number} [glowWidth=6] The width of lines used for rendering the line glow effect.\n * @property {Color} [backgroundColor=Color(0.0, 0.5, 0.0, 0.2)] Background fill color.\n * @property {number} [tileWidth=256] The width of the tile for level-of-detail selection purposes.\n * @property {number} [tileHeight=256] The height of the tile for level-of-detail selection purposes.\n * @property {number} [canvasSize=256] The size of the canvas used for rendering.\n */\n\n/**\n * An {@link ImageryProvider} that draws a wireframe grid on every tile with controllable background and glow.\n * May be useful for custom rendering effects or debugging terrain.\n *\n * @alias GridImageryProvider\n * @constructor\n * @param {GridImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n */\nfunction GridImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  this._tilingScheme = defined(options.tilingScheme)\n    ? options.tilingScheme\n    : new GeographicTilingScheme({ ellipsoid: options.ellipsoid });\n  this._cells = options.cells ?? 8;\n  this._color = options.color ?? defaultColor;\n  this._glowColor = options.glowColor ?? defaultGlowColor;\n  this._glowWidth = options.glowWidth ?? 6;\n  this._backgroundColor = options.backgroundColor ?? defaultBackgroundColor;\n  this._errorEvent = new Event();\n\n  this._tileWidth = options.tileWidth ?? 256;\n  this._tileHeight = options.tileHeight ?? 256;\n\n  // A little larger than tile size so lines are sharper\n  // Note: can't be too much difference otherwise texture blowout\n  this._canvasSize = options.canvasSize ?? 256;\n\n  // We only need a single canvas since all tiles will be the same\n  this._canvas = this._createGridCanvas();\n}\n\nObject.defineProperties(GridImageryProvider.prototype, {\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof GridImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof GridImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof GridImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof GridImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof GridImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof GridImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof GridImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._tilingScheme.rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof GridImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof GridImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof GridImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof GridImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return true;\n    },\n  },\n});\n\n/**\n * Draws a grid of lines into a canvas.\n */\nGridImageryProvider.prototype._drawGrid = function (context) {\n  const minPixel = 0;\n  const maxPixel = this._canvasSize;\n  for (let x = 0; x <= this._cells; ++x) {\n    const nx = x / this._cells;\n    const val = 1 + nx * (maxPixel - 1);\n\n    context.moveTo(val, minPixel);\n    context.lineTo(val, maxPixel);\n    context.moveTo(minPixel, val);\n    context.lineTo(maxPixel, val);\n  }\n  context.stroke();\n};\n\n/**\n * Render a grid into a canvas with background and glow\n */\nGridImageryProvider.prototype._createGridCanvas = function () {\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = this._canvasSize;\n  canvas.height = this._canvasSize;\n  const minPixel = 0;\n  const maxPixel = this._canvasSize;\n\n  const context = canvas.getContext(\"2d\");\n\n  // Fill the background\n  const cssBackgroundColor = this._backgroundColor.toCssColorString();\n  context.fillStyle = cssBackgroundColor;\n  context.fillRect(minPixel, minPixel, maxPixel, maxPixel);\n\n  // Glow for grid lines\n  const cssGlowColor = this._glowColor.toCssColorString();\n  context.strokeStyle = cssGlowColor;\n  // Wide\n  context.lineWidth = this._glowWidth;\n  context.strokeRect(minPixel, minPixel, maxPixel, maxPixel);\n  this._drawGrid(context);\n  // Narrow\n  context.lineWidth = this._glowWidth * 0.5;\n  context.strokeRect(minPixel, minPixel, maxPixel, maxPixel);\n  this._drawGrid(context);\n\n  // Grid lines\n  const cssColor = this._color.toCssColorString();\n  // Border\n  context.strokeStyle = cssColor;\n  context.lineWidth = 2;\n  context.strokeRect(minPixel, minPixel, maxPixel, maxPixel);\n  // Inner\n  context.lineWidth = 1;\n  this._drawGrid(context);\n\n  return canvas;\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nGridImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<HTMLCanvasElement>} The resolved image as a Canvas DOM object.\n */\nGridImageryProvider.prototype.requestImage = function (x, y, level, request) {\n  return Promise.resolve(this._canvas);\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nGridImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\nexport default GridImageryProvider;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryInstanceAttribute from \"../Core/GeometryInstanceAttribute.js\";\nimport GroundPolylineGeometry from \"../Core/GroundPolylineGeometry.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport PolylineShadowVolumeFS from \"../Shaders/PolylineShadowVolumeFS.js\";\nimport PolylineShadowVolumeMorphFS from \"../Shaders/PolylineShadowVolumeMorphFS.js\";\nimport PolylineShadowVolumeMorphVS from \"../Shaders/PolylineShadowVolumeMorphVS.js\";\nimport PolylineShadowVolumeVS from \"../Shaders/PolylineShadowVolumeVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport CullFace from \"./CullFace.js\";\nimport PolylineColorAppearance from \"./PolylineColorAppearance.js\";\nimport PolylineMaterialAppearance from \"./PolylineMaterialAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * A GroundPolylinePrimitive represents a polyline draped over the terrain or 3D Tiles in the {@link Scene}.\n * <p>\n * Only to be used with GeometryInstances containing {@link GroundPolylineGeometry}.\n * </p>\n *\n * @alias GroundPolylinePrimitive\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Array|GeometryInstance} [options.geometryInstances] GeometryInstances containing GroundPolylineGeometry\n * @param {Appearance} [options.appearance] The Appearance used to render the polyline. Defaults to a white color {@link Material} on a {@link PolylineMaterialAppearance}.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n * @param {boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first.\n * @param {ClassificationType} [options.classificationType=ClassificationType.BOTH] Determines whether terrain, 3D Tiles or both will be classified.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {boolean} [options.debugShowShadowVolume=false] For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be <code>true</code> on creation to have effect.\n *\n * @example\n * // 1. Draw a polyline on terrain with a basic color material\n *\n * const instance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.GroundPolylineGeometry({\n *      positions : Cesium.Cartesian3.fromDegreesArray([\n *          -112.1340164450331, 36.05494287836128,\n *          -112.08821010582645, 36.097804071380715\n *      ]),\n *      width : 4.0\n *   }),\n *   id : 'object returned when this instance is picked and to get/set per-instance attributes'\n * });\n *\n * scene.groundPrimitives.add(new Cesium.GroundPolylinePrimitive({\n *   geometryInstances : instance,\n *   appearance : new Cesium.PolylineMaterialAppearance()\n * }));\n *\n * // 2. Draw a looped polyline on terrain with per-instance color and a distance display condition.\n * // Distance display conditions for polylines on terrain are based on an approximate terrain height\n * // instead of true terrain height.\n *\n * const instance2 = new Cesium.GeometryInstance({\n *   geometry : new Cesium.GroundPolylineGeometry({\n *      positions : Cesium.Cartesian3.fromDegreesArray([\n *          -112.1340164450331, 36.05494287836128,\n *          -112.08821010582645, 36.097804071380715,\n *          -112.13296079730024, 36.168769146801104\n *      ]),\n *      loop : true,\n *      width : 4.0\n *   }),\n *   attributes : {\n *      color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.fromCssColorString('green').withAlpha(0.7)),\n *      distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(1000, 30000)\n *   },\n *   id : 'object returned when this instance is picked and to get/set per-instance attributes'\n * });\n *\n * scene.groundPrimitives.add(new Cesium.GroundPolylinePrimitive({\n *   geometryInstances : instance2,\n *   appearance : new Cesium.PolylineColorAppearance()\n * }));\n */\nfunction GroundPolylinePrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The geometry instances rendered with this primitive. This may\n   * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n   * is <code>true</code> when the primitive is constructed.\n   * <p>\n   * Changing this property after the primitive is rendered has no effect.\n   * </p>\n   *\n   * @readonly\n   * @type {Array|GeometryInstance}\n   *\n   * @default undefined\n   */\n  this.geometryInstances = options.geometryInstances;\n  this._hasPerInstanceColors = true;\n\n  let appearance = options.appearance;\n  if (!defined(appearance)) {\n    appearance = new PolylineMaterialAppearance();\n  }\n  /**\n   * The {@link Appearance} used to shade this primitive. Each geometry\n   * instance is shaded with the same appearance.  Some appearances, like\n   * {@link PolylineColorAppearance} allow giving each instance unique\n   * properties.\n   *\n   * @type Appearance\n   *\n   * @default undefined\n   */\n  this.appearance = appearance;\n\n  /**\n   * Determines if the primitive will be shown.  This affects all geometry\n   * instances in the primitive.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * Determines whether terrain, 3D Tiles or both will be classified.\n   *\n   * @type {ClassificationType}\n   *\n   * @default ClassificationType.BOTH\n   */\n  this.classificationType =\n    options.classificationType ?? ClassificationType.BOTH;\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  // Shadow volume is shown by removing a discard in the shader, so this isn't toggleable.\n  this._debugShowShadowVolume = options.debugShowShadowVolume ?? false;\n\n  this._primitiveOptions = {\n    geometryInstances: undefined,\n    appearance: undefined,\n    vertexCacheOptimize: false,\n    interleave: options.interleave ?? false,\n    releaseGeometryInstances: options.releaseGeometryInstances ?? true,\n    allowPicking: options.allowPicking ?? true,\n    asynchronous: options.asynchronous ?? true,\n    compressVertices: false,\n    _createShaderProgramFunction: undefined,\n    _createCommandsFunction: undefined,\n    _updateAndQueueCommandsFunction: undefined,\n  };\n\n  // Used when inserting in an OrderedPrimitiveCollection\n  this._zIndex = undefined;\n\n  this._ready = false;\n  this._primitive = undefined;\n\n  this._sp = undefined;\n  this._sp2D = undefined;\n  this._spMorph = undefined;\n\n  this._renderState = getRenderState(false);\n  this._renderState3DTiles = getRenderState(true);\n\n  this._renderStateMorph = RenderState.fromCache({\n    cull: {\n      enabled: true,\n      face: CullFace.FRONT, // Geometry is \"inverted,\" so cull front when materials on volume instead of on terrain (morph)\n    },\n    depthTest: {\n      enabled: true,\n    },\n    blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n    depthMask: false,\n  });\n}\n\nObject.defineProperties(GroundPolylinePrimitive.prototype, {\n  /**\n   * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n   *\n   * @memberof GroundPolylinePrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  interleave: {\n    get: function () {\n      return this._primitiveOptions.interleave;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n   *\n   * @memberof GroundPolylinePrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  releaseGeometryInstances: {\n    get: function () {\n      return this._primitiveOptions.releaseGeometryInstances;\n    },\n  },\n\n  /**\n   * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n   *\n   * @memberof GroundPolylinePrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  allowPicking: {\n    get: function () {\n      return this._primitiveOptions.allowPicking;\n    },\n  },\n\n  /**\n   * Determines if the geometry instances will be created and batched on a web worker.\n   *\n   * @memberof GroundPolylinePrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  asynchronous: {\n    get: function () {\n      return this._primitiveOptions.asynchronous;\n    },\n  },\n\n  /**\n   * Determines if the primitive is complete and ready to render.  If this property is\n   * true, the primitive will be rendered the next time that {@link GroundPolylinePrimitive#update}\n   * is called.\n   *\n   * @memberof GroundPolylinePrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * If true, draws the shadow volume for each geometry in the primitive.\n   * </p>\n   *\n   * @memberof GroundPolylinePrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  debugShowShadowVolume: {\n    get: function () {\n      return this._debugShowShadowVolume;\n    },\n  },\n});\n\n/**\n * Initializes the minimum and maximum terrain heights. This only needs to be called if you are creating the\n * GroundPolylinePrimitive synchronously.\n *\n * @returns {Promise<void>} A promise that will resolve once the terrain heights have been loaded.\n */\nGroundPolylinePrimitive.initializeTerrainHeights = function () {\n  return ApproximateTerrainHeights.initialize();\n};\n\nfunction createShaderProgram(groundPolylinePrimitive, frameState, appearance) {\n  const context = frameState.context;\n  const primitive = groundPolylinePrimitive._primitive;\n  const attributeLocations = primitive._attributeLocations;\n\n  let vs = primitive._batchTable.getVertexShaderCallback()(\n    PolylineShadowVolumeVS,\n  );\n  vs = Primitive._appendShowToShader(primitive, vs);\n  vs = Primitive._appendDistanceDisplayConditionToShader(primitive, vs);\n  vs = Primitive._modifyShaderPosition(\n    groundPolylinePrimitive,\n    vs,\n    frameState.scene3DOnly,\n  );\n\n  let vsMorph = primitive._batchTable.getVertexShaderCallback()(\n    PolylineShadowVolumeMorphVS,\n  );\n  vsMorph = Primitive._appendShowToShader(primitive, vsMorph);\n  vsMorph = Primitive._appendDistanceDisplayConditionToShader(\n    primitive,\n    vsMorph,\n  );\n  vsMorph = Primitive._modifyShaderPosition(\n    groundPolylinePrimitive,\n    vsMorph,\n    frameState.scene3DOnly,\n  );\n\n  // Access pick color from fragment shader.\n  // Helps with varying budget.\n  let fs = primitive._batchTable.getVertexShaderCallback()(\n    PolylineShadowVolumeFS,\n  );\n\n  const vsDefines = [\n    `GLOBE_MINIMUM_ALTITUDE ${frameState.mapProjection.ellipsoid.minimumRadius.toFixed(\n      1,\n    )}`,\n  ];\n  let colorDefine = \"\";\n  let materialShaderSource = \"\";\n  if (defined(appearance.material)) {\n    materialShaderSource = defined(appearance.material)\n      ? appearance.material.shaderSource\n      : \"\";\n\n    // Check for use of v_width and v_polylineAngle in material shader\n    // to determine whether these varyings should be active in the vertex shader.\n    if (materialShaderSource.search(/in\\s+float\\s+v_polylineAngle;/g) !== -1) {\n      vsDefines.push(\"ANGLE_VARYING\");\n    }\n    if (materialShaderSource.search(/in\\s+float\\s+v_width;/g) !== -1) {\n      vsDefines.push(\"WIDTH_VARYING\");\n    }\n  } else {\n    colorDefine = \"PER_INSTANCE_COLOR\";\n  }\n\n  vsDefines.push(colorDefine);\n  const fsDefines = groundPolylinePrimitive.debugShowShadowVolume\n    ? [\"DEBUG_SHOW_VOLUME\", colorDefine]\n    : [colorDefine];\n\n  const vsColor3D = new ShaderSource({\n    defines: vsDefines,\n    sources: [vs],\n  });\n  const fsColor3D = new ShaderSource({\n    defines: fsDefines,\n    sources: [materialShaderSource, fs],\n  });\n  groundPolylinePrimitive._sp = ShaderProgram.replaceCache({\n    context: context,\n    shaderProgram: primitive._sp,\n    vertexShaderSource: vsColor3D,\n    fragmentShaderSource: fsColor3D,\n    attributeLocations: attributeLocations,\n  });\n\n  // Derive 2D/CV\n  let colorProgram2D = context.shaderCache.getDerivedShaderProgram(\n    groundPolylinePrimitive._sp,\n    \"2dColor\",\n  );\n  if (!defined(colorProgram2D)) {\n    const vsColor2D = new ShaderSource({\n      defines: vsDefines.concat([\"COLUMBUS_VIEW_2D\"]),\n      sources: [vs],\n    });\n    colorProgram2D = context.shaderCache.createDerivedShaderProgram(\n      groundPolylinePrimitive._sp,\n      \"2dColor\",\n      {\n        context: context,\n        shaderProgram: groundPolylinePrimitive._sp2D,\n        vertexShaderSource: vsColor2D,\n        fragmentShaderSource: fsColor3D,\n        attributeLocations: attributeLocations,\n      },\n    );\n  }\n  groundPolylinePrimitive._sp2D = colorProgram2D;\n\n  // Derive Morph\n  let colorProgramMorph = context.shaderCache.getDerivedShaderProgram(\n    groundPolylinePrimitive._sp,\n    \"MorphColor\",\n  );\n  if (!defined(colorProgramMorph)) {\n    const vsColorMorph = new ShaderSource({\n      defines: vsDefines.concat([\n        `MAX_TERRAIN_HEIGHT ${ApproximateTerrainHeights._defaultMaxTerrainHeight.toFixed(\n          1,\n        )}`,\n      ]),\n      sources: [vsMorph],\n    });\n\n    fs = primitive._batchTable.getVertexShaderCallback()(\n      PolylineShadowVolumeMorphFS,\n    );\n    const fsColorMorph = new ShaderSource({\n      defines: fsDefines,\n      sources: [materialShaderSource, fs],\n    });\n    colorProgramMorph = context.shaderCache.createDerivedShaderProgram(\n      groundPolylinePrimitive._sp,\n      \"MorphColor\",\n      {\n        context: context,\n        shaderProgram: groundPolylinePrimitive._spMorph,\n        vertexShaderSource: vsColorMorph,\n        fragmentShaderSource: fsColorMorph,\n        attributeLocations: attributeLocations,\n      },\n    );\n  }\n  groundPolylinePrimitive._spMorph = colorProgramMorph;\n}\n\nfunction getRenderState(mask3DTiles) {\n  return RenderState.fromCache({\n    cull: {\n      enabled: true, // prevent double-draw. Geometry is \"inverted\" (reversed winding order) so we're drawing backfaces.\n    },\n    blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n    depthMask: false,\n    stencilTest: {\n      enabled: mask3DTiles,\n      frontFunction: StencilFunction.EQUAL,\n      frontOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.KEEP,\n        zPass: StencilOperation.KEEP,\n      },\n      backFunction: StencilFunction.EQUAL,\n      backOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.KEEP,\n        zPass: StencilOperation.KEEP,\n      },\n      reference: StencilConstants.CESIUM_3D_TILE_MASK,\n      mask: StencilConstants.CESIUM_3D_TILE_MASK,\n    },\n  });\n}\n\nfunction createCommands(\n  groundPolylinePrimitive,\n  appearance,\n  material,\n  translucent,\n  colorCommands,\n  pickCommands,\n) {\n  const primitive = groundPolylinePrimitive._primitive;\n  const length = primitive._va.length;\n  colorCommands.length = length;\n  pickCommands.length = length;\n\n  const isPolylineColorAppearance =\n    appearance instanceof PolylineColorAppearance;\n\n  const materialUniforms = isPolylineColorAppearance ? {} : material._uniforms;\n  const uniformMap =\n    primitive._batchTable.getUniformMapCallback()(materialUniforms);\n\n  for (let i = 0; i < length; i++) {\n    const vertexArray = primitive._va[i];\n\n    let command = colorCommands[i];\n    if (!defined(command)) {\n      command = colorCommands[i] = new DrawCommand({\n        owner: groundPolylinePrimitive,\n        primitiveType: primitive._primitiveType,\n      });\n    }\n\n    command.vertexArray = vertexArray;\n    command.renderState = groundPolylinePrimitive._renderState;\n    command.shaderProgram = groundPolylinePrimitive._sp;\n    command.uniformMap = uniformMap;\n    command.pass = Pass.TERRAIN_CLASSIFICATION;\n    command.pickId = \"czm_batchTable_pickColor(v_endPlaneNormalEcAndBatchId.w)\";\n\n    const derivedTilesetCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.tileset,\n    );\n    derivedTilesetCommand.renderState =\n      groundPolylinePrimitive._renderState3DTiles;\n    derivedTilesetCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    command.derivedCommands.tileset = derivedTilesetCommand;\n\n    // derive for 2D\n    const derived2DCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.color2D,\n    );\n    derived2DCommand.shaderProgram = groundPolylinePrimitive._sp2D;\n    command.derivedCommands.color2D = derived2DCommand;\n\n    const derived2DTilesetCommand = DrawCommand.shallowClone(\n      derivedTilesetCommand,\n      derivedTilesetCommand.derivedCommands.color2D,\n    );\n    derived2DTilesetCommand.shaderProgram = groundPolylinePrimitive._sp2D;\n    derivedTilesetCommand.derivedCommands.color2D = derived2DTilesetCommand;\n\n    // derive for Morph\n    const derivedMorphCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.colorMorph,\n    );\n    derivedMorphCommand.renderState = groundPolylinePrimitive._renderStateMorph;\n    derivedMorphCommand.shaderProgram = groundPolylinePrimitive._spMorph;\n    derivedMorphCommand.pickId = \"czm_batchTable_pickColor(v_batchId)\";\n    command.derivedCommands.colorMorph = derivedMorphCommand;\n  }\n}\n\nfunction updateAndQueueCommand(\n  groundPolylinePrimitive,\n  command,\n  frameState,\n  modelMatrix,\n  cull,\n  boundingVolume,\n  debugShowBoundingVolume,\n) {\n  // Use derived appearance command for morph and 2D\n  if (frameState.mode === SceneMode.MORPHING) {\n    command = command.derivedCommands.colorMorph;\n  } else if (frameState.mode !== SceneMode.SCENE3D) {\n    command = command.derivedCommands.color2D;\n  }\n  command.modelMatrix = modelMatrix;\n  command.boundingVolume = boundingVolume;\n  command.cull = cull;\n  command.debugShowBoundingVolume = debugShowBoundingVolume;\n\n  frameState.commandList.push(command);\n}\n\nfunction updateAndQueueCommands(\n  groundPolylinePrimitive,\n  frameState,\n  colorCommands,\n  pickCommands,\n  modelMatrix,\n  cull,\n  debugShowBoundingVolume,\n) {\n  const primitive = groundPolylinePrimitive._primitive;\n\n  Primitive._updateBoundingVolumes(primitive, frameState, modelMatrix); // Expected to be identity - GroundPrimitives don't support other model matrices\n\n  let boundingSpheres;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    boundingSpheres = primitive._boundingSphereWC;\n  } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n    boundingSpheres = primitive._boundingSphereCV;\n  } else if (\n    frameState.mode === SceneMode.SCENE2D &&\n    defined(primitive._boundingSphere2D)\n  ) {\n    boundingSpheres = primitive._boundingSphere2D;\n  } else if (defined(primitive._boundingSphereMorph)) {\n    boundingSpheres = primitive._boundingSphereMorph;\n  }\n\n  const morphing = frameState.mode === SceneMode.MORPHING;\n  const classificationType = groundPolylinePrimitive.classificationType;\n  const queueTerrainCommands =\n    classificationType !== ClassificationType.CESIUM_3D_TILE;\n  const queue3DTilesCommands =\n    classificationType !== ClassificationType.TERRAIN && !morphing;\n\n  let command;\n  const passes = frameState.passes;\n  if (passes.render || (passes.pick && primitive.allowPicking)) {\n    const colorLength = colorCommands.length;\n    for (let j = 0; j < colorLength; ++j) {\n      const boundingVolume = boundingSpheres[j];\n      if (queueTerrainCommands) {\n        command = colorCommands[j];\n        updateAndQueueCommand(\n          groundPolylinePrimitive,\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n      if (queue3DTilesCommands) {\n        command = colorCommands[j].derivedCommands.tileset;\n        updateAndQueueCommand(\n          groundPolylinePrimitive,\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n    }\n  }\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} For synchronous GroundPolylinePrimitives, you must call GroundPolylinePrimitives.initializeTerrainHeights() and wait for the returned promise to resolve.\n * @exception {DeveloperError} All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.\n */\nGroundPolylinePrimitive.prototype.update = function (frameState) {\n  if (!defined(this._primitive) && !defined(this.geometryInstances)) {\n    return;\n  }\n\n  if (!ApproximateTerrainHeights.initialized) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!this.asynchronous) {\n      throw new DeveloperError(\n        \"For synchronous GroundPolylinePrimitives, you must call GroundPolylinePrimitives.initializeTerrainHeights() and wait for the returned promise to resolve.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    GroundPolylinePrimitive.initializeTerrainHeights();\n    return;\n  }\n\n  let i;\n\n  const that = this;\n  const primitiveOptions = this._primitiveOptions;\n  if (!defined(this._primitive)) {\n    const geometryInstances = Array.isArray(this.geometryInstances)\n      ? this.geometryInstances\n      : [this.geometryInstances];\n    const geometryInstancesLength = geometryInstances.length;\n    const groundInstances = new Array(geometryInstancesLength);\n\n    let attributes;\n\n    // Check if each instance has a color attribute.\n    for (i = 0; i < geometryInstancesLength; ++i) {\n      attributes = geometryInstances[i].attributes;\n      if (!defined(attributes) || !defined(attributes.color)) {\n        this._hasPerInstanceColors = false;\n        break;\n      }\n    }\n\n    for (i = 0; i < geometryInstancesLength; ++i) {\n      const geometryInstance = geometryInstances[i];\n      attributes = {};\n      const instanceAttributes = geometryInstance.attributes;\n      for (const attributeKey in instanceAttributes) {\n        if (instanceAttributes.hasOwnProperty(attributeKey)) {\n          attributes[attributeKey] = instanceAttributes[attributeKey];\n        }\n      }\n\n      // Automatically create line width attribute if not already given\n      if (!defined(attributes.width)) {\n        attributes.width = new GeometryInstanceAttribute({\n          componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n          componentsPerAttribute: 1.0,\n          value: [geometryInstance.geometry.width],\n        });\n      }\n\n      // Update each geometry for framestate.scene3DOnly = true and projection\n      geometryInstance.geometry._scene3DOnly = frameState.scene3DOnly;\n      GroundPolylineGeometry.setProjectionAndEllipsoid(\n        geometryInstance.geometry,\n        frameState.mapProjection,\n      );\n\n      groundInstances[i] = new GeometryInstance({\n        geometry: geometryInstance.geometry,\n        attributes: attributes,\n        id: geometryInstance.id,\n        pickPrimitive: that,\n      });\n    }\n\n    primitiveOptions.geometryInstances = groundInstances;\n    primitiveOptions.appearance = this.appearance;\n\n    primitiveOptions._createShaderProgramFunction = function (\n      primitive,\n      frameState,\n      appearance,\n    ) {\n      createShaderProgram(that, frameState, appearance);\n    };\n    primitiveOptions._createCommandsFunction = function (\n      primitive,\n      appearance,\n      material,\n      translucent,\n      twoPasses,\n      colorCommands,\n      pickCommands,\n    ) {\n      createCommands(\n        that,\n        appearance,\n        material,\n        translucent,\n        colorCommands,\n        pickCommands,\n      );\n    };\n    primitiveOptions._updateAndQueueCommandsFunction = function (\n      primitive,\n      frameState,\n      colorCommands,\n      pickCommands,\n      modelMatrix,\n      cull,\n      debugShowBoundingVolume,\n      twoPasses,\n    ) {\n      updateAndQueueCommands(\n        that,\n        frameState,\n        colorCommands,\n        pickCommands,\n        modelMatrix,\n        cull,\n        debugShowBoundingVolume,\n      );\n    };\n\n    this._primitive = new Primitive(primitiveOptions);\n  }\n\n  if (\n    this.appearance instanceof PolylineColorAppearance &&\n    !this._hasPerInstanceColors\n  ) {\n    throw new DeveloperError(\n      \"All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.\",\n    );\n  }\n\n  this._primitive.appearance = this.appearance;\n  this._primitive.show = this.show;\n  this._primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;\n  this._primitive.update(frameState);\n  frameState.afterRender.push(() => {\n    if (!this._ready && defined(this._primitive) && this._primitive.ready) {\n      this._ready = true;\n\n      if (this.releaseGeometryInstances) {\n        this.geometryInstances = undefined;\n      }\n    }\n  });\n};\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n */\nGroundPolylinePrimitive.prototype.getGeometryInstanceAttributes = function (\n  id,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(this._primitive)) {\n    throw new DeveloperError(\n      \"must call update before calling getGeometryInstanceAttributes\",\n    );\n  }\n  //>>includeEnd('debug');\n  return this._primitive.getGeometryInstanceAttributes(id);\n};\n\n/**\n * Checks if the given Scene supports GroundPolylinePrimitives.\n * GroundPolylinePrimitives require support for the WEBGL_depth_texture extension.\n *\n * @param {Scene} scene The current scene.\n * @returns {boolean} Whether or not the current scene supports GroundPolylinePrimitives.\n */\nGroundPolylinePrimitive.isSupported = function (scene) {\n  return scene.frameState.context.depthTexture;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see GroundPolylinePrimitive#destroy\n */\nGroundPolylinePrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see GroundPolylinePrimitive#isDestroyed\n */\nGroundPolylinePrimitive.prototype.destroy = function () {\n  this._primitive = this._primitive && this._primitive.destroy();\n  this._sp = this._sp && this._sp.destroy();\n\n  // Derived programs, destroyed above if they existed.\n  this._sp2D = undefined;\n  this._spMorph = undefined;\n\n  return destroyObject(this);\n};\nexport default GroundPolylinePrimitive;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport VerticalExaggeration from \"../Core/VerticalExaggeration.js\";\nimport ClassificationPrimitive from \"./ClassificationPrimitive.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowVolumeAppearance from \"./ShadowVolumeAppearance.js\";\n\nconst GroundPrimitiveUniformMap = {\n  u_globeMinimumAltitude: function () {\n    return 55000.0;\n  },\n};\n\n/**\n * A ground primitive represents geometry draped over terrain or 3D Tiles in the {@link Scene}.\n * <p>\n * A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including\n * {@link Material} and {@link RenderState}.  Roughly, the geometry instance defines the structure and placement,\n * and the appearance defines the visual characteristics.  Decoupling geometry and appearance allows us to mix\n * and match most of them and add a new geometry or appearance independently of each other.\n * </p>\n * <p>\n * Support for the WEBGL_depth_texture extension is required to use GeometryInstances with different PerInstanceColors\n * or materials besides PerInstanceColorAppearance.\n * </p>\n * <p>\n * Textured GroundPrimitives were designed for notional patterns and are not meant for precisely mapping\n * textures to terrain - for that use case, use {@link SingleTileImageryProvider}.\n * </p>\n * <p>\n * For correct rendering, this feature requires the EXT_frag_depth WebGL extension. For hardware that do not support this extension, there\n * will be rendering artifacts for some viewing angles.\n * </p>\n * <p>\n * Valid geometries are {@link CircleGeometry}, {@link CorridorGeometry}, {@link EllipseGeometry}, {@link PolygonGeometry}, and {@link RectangleGeometry}.\n * </p>\n *\n * @alias GroundPrimitive\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Array|GeometryInstance} [options.geometryInstances] The geometry instances to render.\n * @param {Appearance} [options.appearance] The appearance used to render the primitive. Defaults to a flat PerInstanceColorAppearance when GeometryInstances have a color attribute.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {boolean} [options.vertexCacheOptimize=false] When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n * @param {boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {boolean} [options.compressVertices=true] When <code>true</code>, the geometry vertices are compressed, which will save memory.\n * @param {boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n * @param {boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready. If false initializeTerrainHeights() must be called first.\n * @param {ClassificationType} [options.classificationType=ClassificationType.BOTH] Determines whether terrain, 3D Tiles or both will be classified.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {boolean} [options.debugShowShadowVolume=false] For debugging only. Determines if the shadow volume for each geometry in the primitive is drawn. Must be <code>true</code> on\n *                  creation for the volumes to be created before the geometry is released or options.releaseGeometryInstance must be <code>false</code>.\n *\n * @example\n * // Example 1: Create primitive with a single instance\n * const rectangleInstance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.RectangleGeometry({\n *     rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0)\n *   }),\n *   id : 'rectangle',\n *   attributes : {\n *     color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)\n *   }\n * });\n * scene.primitives.add(new Cesium.GroundPrimitive({\n *   geometryInstances : rectangleInstance\n * }));\n *\n * // Example 2: Batch instances\n * const color = new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5); // Both instances must have the same color.\n * const rectangleInstance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.RectangleGeometry({\n *     rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0)\n *   }),\n *   id : 'rectangle',\n *   attributes : {\n *     color : color\n *   }\n * });\n * const ellipseInstance = new Cesium.GeometryInstance({\n *     geometry : new Cesium.EllipseGeometry({\n *         center : Cesium.Cartesian3.fromDegrees(-105.0, 40.0),\n *         semiMinorAxis : 300000.0,\n *         semiMajorAxis : 400000.0\n *     }),\n *     id : 'ellipse',\n *     attributes : {\n *         color : color\n *     }\n * });\n * scene.primitives.add(new Cesium.GroundPrimitive({\n *   geometryInstances : [rectangleInstance, ellipseInstance]\n * }));\n *\n * @see Primitive\n * @see ClassificationPrimitive\n * @see GeometryInstance\n * @see Appearance\n */\nfunction GroundPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let appearance = options.appearance;\n  const geometryInstances = options.geometryInstances;\n  if (!defined(appearance) && defined(geometryInstances)) {\n    const geometryInstancesArray = Array.isArray(geometryInstances)\n      ? geometryInstances\n      : [geometryInstances];\n    const geometryInstanceCount = geometryInstancesArray.length;\n    for (let i = 0; i < geometryInstanceCount; i++) {\n      const attributes = geometryInstancesArray[i].attributes;\n      if (defined(attributes) && defined(attributes.color)) {\n        appearance = new PerInstanceColorAppearance({\n          flat: true,\n        });\n        break;\n      }\n    }\n  }\n  /**\n   * The {@link Appearance} used to shade this primitive. Each geometry\n   * instance is shaded with the same appearance.  Some appearances, like\n   * {@link PerInstanceColorAppearance} allow giving each instance unique\n   * properties.\n   *\n   * @type Appearance\n   *\n   * @default undefined\n   */\n  this.appearance = appearance;\n\n  /**\n   * The geometry instances rendered with this primitive.  This may\n   * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n   * is <code>true</code> when the primitive is constructed.\n   * <p>\n   * Changing this property after the primitive is rendered has no effect.\n   * </p>\n   *\n   * @readonly\n   * @type {Array|GeometryInstance}\n   *\n   * @default undefined\n   */\n  this.geometryInstances = options.geometryInstances;\n  /**\n   * Determines if the primitive will be shown.  This affects all geometry\n   * instances in the primitive.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.show = options.show ?? true;\n  /**\n   * Determines whether terrain, 3D Tiles or both will be classified.\n   *\n   * @type {ClassificationType}\n   *\n   * @default ClassificationType.BOTH\n   */\n  this.classificationType =\n    options.classificationType ?? ClassificationType.BOTH;\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the shadow volume for each geometry in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowShadowVolume = options.debugShowShadowVolume ?? false;\n\n  this._boundingVolumes = [];\n  this._boundingVolumes2D = [];\n\n  this._ready = false;\n  this._primitive = undefined;\n\n  this._maxHeight = undefined;\n  this._minHeight = undefined;\n\n  this._maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n  this._minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\n\n  this._boundingSpheresKeys = [];\n  this._boundingSpheres = [];\n\n  this._useFragmentCulling = false;\n  // Used when inserting in an OrderedPrimitiveCollection\n  this._zIndex = undefined;\n\n  const that = this;\n  this._classificationPrimitiveOptions = {\n    geometryInstances: undefined,\n    appearance: undefined,\n    vertexCacheOptimize: options.vertexCacheOptimize ?? false,\n    interleave: options.interleave ?? false,\n    releaseGeometryInstances: options.releaseGeometryInstances ?? true,\n    allowPicking: options.allowPicking ?? true,\n    asynchronous: options.asynchronous ?? true,\n    compressVertices: options.compressVertices ?? true,\n    _createBoundingVolumeFunction: undefined,\n    _updateAndQueueCommandsFunction: undefined,\n    _pickPrimitive: that,\n    _extruded: true,\n    _uniformMap: GroundPrimitiveUniformMap,\n  };\n}\n\nObject.defineProperties(GroundPrimitive.prototype, {\n  /**\n   * When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n   *\n   * @memberof GroundPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  vertexCacheOptimize: {\n    get: function () {\n      return this._classificationPrimitiveOptions.vertexCacheOptimize;\n    },\n  },\n\n  /**\n   * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n   *\n   * @memberof GroundPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  interleave: {\n    get: function () {\n      return this._classificationPrimitiveOptions.interleave;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n   *\n   * @memberof GroundPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  releaseGeometryInstances: {\n    get: function () {\n      return this._classificationPrimitiveOptions.releaseGeometryInstances;\n    },\n  },\n\n  /**\n   * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n   *\n   * @memberof GroundPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  allowPicking: {\n    get: function () {\n      return this._classificationPrimitiveOptions.allowPicking;\n    },\n  },\n\n  /**\n   * Determines if the geometry instances will be created and batched on a web worker.\n   *\n   * @memberof GroundPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  asynchronous: {\n    get: function () {\n      return this._classificationPrimitiveOptions.asynchronous;\n    },\n  },\n\n  /**\n   * When <code>true</code>, geometry vertices are compressed, which will save memory.\n   *\n   * @memberof GroundPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  compressVertices: {\n    get: function () {\n      return this._classificationPrimitiveOptions.compressVertices;\n    },\n  },\n\n  /**\n   * Determines if the primitive is complete and ready to render.  If this property is\n   * true, the primitive will be rendered the next time that {@link GroundPrimitive#update}\n   * is called.\n   *\n   * @memberof GroundPrimitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\n/**\n * Determines if GroundPrimitive rendering is supported.\n *\n * @function\n * @param {Scene} scene The scene.\n * @returns {boolean} <code>true</code> if GroundPrimitives are supported; otherwise, returns <code>false</code>\n */\nGroundPrimitive.isSupported = ClassificationPrimitive.isSupported;\n\nfunction getComputeMaximumHeightFunction(primitive) {\n  return function (granularity, ellipsoid) {\n    const r = ellipsoid.maximumRadius;\n    const delta = r / Math.cos(granularity * 0.5) - r;\n    return primitive._maxHeight + delta;\n  };\n}\n\nfunction getComputeMinimumHeightFunction(primitive) {\n  return function (granularity, ellipsoid) {\n    return primitive._minHeight;\n  };\n}\n\nconst scratchBVCartesianHigh = new Cartesian3();\nconst scratchBVCartesianLow = new Cartesian3();\nconst scratchBVCartesian = new Cartesian3();\nconst scratchBVCartographic = new Cartographic();\nconst scratchBVRectangle = new Rectangle();\n\nfunction getRectangle(frameState, geometry) {\n  const ellipsoid = frameState.mapProjection.ellipsoid;\n\n  if (\n    !defined(geometry.attributes) ||\n    !defined(geometry.attributes.position3DHigh)\n  ) {\n    if (defined(geometry.rectangle)) {\n      return geometry.rectangle;\n    }\n\n    return undefined;\n  }\n\n  const highPositions = geometry.attributes.position3DHigh.values;\n  const lowPositions = geometry.attributes.position3DLow.values;\n  const length = highPositions.length;\n\n  let minLat = Number.POSITIVE_INFINITY;\n  let minLon = Number.POSITIVE_INFINITY;\n  let maxLat = Number.NEGATIVE_INFINITY;\n  let maxLon = Number.NEGATIVE_INFINITY;\n\n  for (let i = 0; i < length; i += 3) {\n    const highPosition = Cartesian3.unpack(\n      highPositions,\n      i,\n      scratchBVCartesianHigh,\n    );\n    const lowPosition = Cartesian3.unpack(\n      lowPositions,\n      i,\n      scratchBVCartesianLow,\n    );\n\n    const position = Cartesian3.add(\n      highPosition,\n      lowPosition,\n      scratchBVCartesian,\n    );\n    const cartographic = ellipsoid.cartesianToCartographic(\n      position,\n      scratchBVCartographic,\n    );\n\n    const latitude = cartographic.latitude;\n    const longitude = cartographic.longitude;\n\n    minLat = Math.min(minLat, latitude);\n    minLon = Math.min(minLon, longitude);\n    maxLat = Math.max(maxLat, latitude);\n    maxLon = Math.max(maxLon, longitude);\n  }\n\n  const rectangle = scratchBVRectangle;\n  rectangle.north = maxLat;\n  rectangle.south = minLat;\n  rectangle.east = maxLon;\n  rectangle.west = minLon;\n\n  return rectangle;\n}\n\nfunction setMinMaxTerrainHeights(primitive, rectangle, ellipsoid) {\n  const result = ApproximateTerrainHeights.getMinimumMaximumHeights(\n    rectangle,\n    ellipsoid,\n  );\n\n  primitive._minTerrainHeight = result.minimumTerrainHeight;\n  primitive._maxTerrainHeight = result.maximumTerrainHeight;\n}\n\nfunction createBoundingVolume(groundPrimitive, frameState, geometry) {\n  const ellipsoid = frameState.mapProjection.ellipsoid;\n  const rectangle = getRectangle(frameState, geometry);\n\n  const obb = OrientedBoundingBox.fromRectangle(\n    rectangle,\n    groundPrimitive._minHeight,\n    groundPrimitive._maxHeight,\n    ellipsoid,\n  );\n  groundPrimitive._boundingVolumes.push(obb);\n\n  if (!frameState.scene3DOnly) {\n    const projection = frameState.mapProjection;\n    const boundingVolume = BoundingSphere.fromRectangleWithHeights2D(\n      rectangle,\n      projection,\n      groundPrimitive._maxHeight,\n      groundPrimitive._minHeight,\n    );\n    Cartesian3.fromElements(\n      boundingVolume.center.z,\n      boundingVolume.center.x,\n      boundingVolume.center.y,\n      boundingVolume.center,\n    );\n\n    groundPrimitive._boundingVolumes2D.push(boundingVolume);\n  }\n}\n\nfunction boundingVolumeIndex(commandIndex, length) {\n  return Math.floor((commandIndex % length) / 2);\n}\n\nfunction updateAndQueueRenderCommand(\n  groundPrimitive,\n  command,\n  frameState,\n  modelMatrix,\n  cull,\n  boundingVolume,\n  debugShowBoundingVolume,\n) {\n  // Use derived appearance command for 2D if needed\n  const classificationPrimitive = groundPrimitive._primitive;\n  if (\n    frameState.mode !== SceneMode.SCENE3D &&\n    command.shaderProgram === classificationPrimitive._spColor &&\n    classificationPrimitive._needs2DShader\n  ) {\n    command = command.derivedCommands.appearance2D;\n  }\n\n  command.owner = groundPrimitive;\n  command.modelMatrix = modelMatrix;\n  command.boundingVolume = boundingVolume;\n  command.cull = cull;\n  command.debugShowBoundingVolume = debugShowBoundingVolume;\n\n  frameState.commandList.push(command);\n}\n\nfunction updateAndQueuePickCommand(\n  groundPrimitive,\n  command,\n  frameState,\n  modelMatrix,\n  cull,\n  boundingVolume,\n) {\n  // Use derived pick command for 2D if needed\n  const classificationPrimitive = groundPrimitive._primitive;\n  if (\n    frameState.mode !== SceneMode.SCENE3D &&\n    command.shaderProgram === classificationPrimitive._spPick &&\n    classificationPrimitive._needs2DShader\n  ) {\n    command = command.derivedCommands.pick2D;\n  }\n\n  command.owner = groundPrimitive;\n  command.modelMatrix = modelMatrix;\n  command.boundingVolume = boundingVolume;\n  command.cull = cull;\n\n  frameState.commandList.push(command);\n}\n\nfunction updateAndQueueCommands(\n  groundPrimitive,\n  frameState,\n  colorCommands,\n  pickCommands,\n  modelMatrix,\n  cull,\n  debugShowBoundingVolume,\n  twoPasses,\n) {\n  let boundingVolumes;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    boundingVolumes = groundPrimitive._boundingVolumes;\n  } else {\n    boundingVolumes = groundPrimitive._boundingVolumes2D;\n  }\n\n  const classificationType = groundPrimitive.classificationType;\n  const queueTerrainCommands =\n    classificationType !== ClassificationType.CESIUM_3D_TILE;\n  const queue3DTilesCommands =\n    classificationType !== ClassificationType.TERRAIN;\n\n  const passes = frameState.passes;\n  const classificationPrimitive = groundPrimitive._primitive;\n\n  let i;\n  let boundingVolume;\n  let command;\n\n  if (passes.render) {\n    const colorLength = colorCommands.length;\n\n    for (i = 0; i < colorLength; ++i) {\n      boundingVolume = boundingVolumes[boundingVolumeIndex(i, colorLength)];\n      if (queueTerrainCommands) {\n        command = colorCommands[i];\n        updateAndQueueRenderCommand(\n          groundPrimitive,\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n      if (queue3DTilesCommands) {\n        command = colorCommands[i].derivedCommands.tileset;\n        updateAndQueueRenderCommand(\n          groundPrimitive,\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n    }\n\n    if (frameState.invertClassification) {\n      const ignoreShowCommands = classificationPrimitive._commandsIgnoreShow;\n      const ignoreShowCommandsLength = ignoreShowCommands.length;\n      for (i = 0; i < ignoreShowCommandsLength; ++i) {\n        boundingVolume = boundingVolumes[i];\n        command = ignoreShowCommands[i];\n        updateAndQueueRenderCommand(\n          groundPrimitive,\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n          debugShowBoundingVolume,\n        );\n      }\n    }\n  }\n\n  if (passes.pick) {\n    const pickLength = pickCommands.length;\n\n    let pickOffsets;\n    if (!groundPrimitive._useFragmentCulling) {\n      // Must be using pick offsets\n      pickOffsets = classificationPrimitive._primitive._pickOffsets;\n    }\n    for (i = 0; i < pickLength; ++i) {\n      boundingVolume = boundingVolumes[boundingVolumeIndex(i, pickLength)];\n      if (!groundPrimitive._useFragmentCulling) {\n        const pickOffset = pickOffsets[boundingVolumeIndex(i, pickLength)];\n        boundingVolume = boundingVolumes[pickOffset.index];\n      }\n      if (queueTerrainCommands) {\n        command = pickCommands[i];\n        updateAndQueuePickCommand(\n          groundPrimitive,\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n        );\n      }\n      if (queue3DTilesCommands) {\n        command = pickCommands[i].derivedCommands.tileset;\n        updateAndQueuePickCommand(\n          groundPrimitive,\n          command,\n          frameState,\n          modelMatrix,\n          cull,\n          boundingVolume,\n        );\n      }\n    }\n  }\n}\n\n/**\n * Initializes the minimum and maximum terrain heights. This only needs to be called if you are creating the\n * GroundPrimitive synchronously.\n *\n * @returns {Promise<void>} A promise that will resolve once the terrain heights have been loaded.\n *\n */\nGroundPrimitive.initializeTerrainHeights = function () {\n  return ApproximateTerrainHeights.initialize();\n};\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} For synchronous GroundPrimitive, you must call GroundPrimitive.initializeTerrainHeights() and wait for the returned promise to resolve.\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n * @exception {DeveloperError} Appearance and material have a uniform with the same name.\n */\nGroundPrimitive.prototype.update = function (frameState) {\n  if (!defined(this._primitive) && !defined(this.geometryInstances)) {\n    return;\n  }\n\n  if (!ApproximateTerrainHeights.initialized) {\n    //>>includeStart('debug', pragmas.debug);\n    if (!this.asynchronous) {\n      throw new DeveloperError(\n        \"For synchronous GroundPrimitives, you must call GroundPrimitive.initializeTerrainHeights() and wait for the returned promise to resolve.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    GroundPrimitive.initializeTerrainHeights();\n    return;\n  }\n\n  const that = this;\n  const primitiveOptions = this._classificationPrimitiveOptions;\n\n  if (!defined(this._primitive)) {\n    const ellipsoid = frameState.mapProjection.ellipsoid;\n\n    let instance;\n    let geometry;\n    let instanceType;\n\n    const instances = Array.isArray(this.geometryInstances)\n      ? this.geometryInstances\n      : [this.geometryInstances];\n    const length = instances.length;\n    const groundInstances = new Array(length);\n\n    let i;\n    let rectangle;\n    for (i = 0; i < length; ++i) {\n      instance = instances[i];\n      geometry = instance.geometry;\n      const instanceRectangle = getRectangle(frameState, geometry);\n      if (!defined(rectangle)) {\n        rectangle = Rectangle.clone(instanceRectangle);\n      } else if (defined(instanceRectangle)) {\n        Rectangle.union(rectangle, instanceRectangle, rectangle);\n      }\n\n      const id = instance.id;\n      if (defined(id) && defined(instanceRectangle)) {\n        const boundingSphere = ApproximateTerrainHeights.getBoundingSphere(\n          instanceRectangle,\n          ellipsoid,\n        );\n        this._boundingSpheresKeys.push(id);\n        this._boundingSpheres.push(boundingSphere);\n      }\n\n      instanceType = geometry.constructor;\n      if (!defined(instanceType) || !defined(instanceType.createShadowVolume)) {\n        //>>includeStart('debug', pragmas.debug);\n        throw new DeveloperError(\n          \"Not all of the geometry instances have GroundPrimitive support.\",\n        );\n        //>>includeEnd('debug');\n      }\n    }\n\n    // Now compute the min/max heights for the primitive\n    setMinMaxTerrainHeights(this, rectangle, ellipsoid);\n    const exaggeration = frameState.verticalExaggeration;\n    const exaggerationRelativeHeight =\n      frameState.verticalExaggerationRelativeHeight;\n    this._minHeight = VerticalExaggeration.getHeight(\n      this._minTerrainHeight,\n      exaggeration,\n      exaggerationRelativeHeight,\n    );\n    this._maxHeight = VerticalExaggeration.getHeight(\n      this._maxTerrainHeight,\n      exaggeration,\n      exaggerationRelativeHeight,\n    );\n\n    const useFragmentCulling = GroundPrimitive._supportsMaterials(\n      frameState.context,\n    );\n    this._useFragmentCulling = useFragmentCulling;\n\n    if (useFragmentCulling) {\n      // Determine whether to add spherical or planar extent attributes for computing texture coordinates.\n      // This depends on the size of the GeometryInstances.\n      let attributes;\n      let usePlanarExtents = true;\n      for (i = 0; i < length; ++i) {\n        instance = instances[i];\n        geometry = instance.geometry;\n        rectangle = getRectangle(frameState, geometry);\n        if (ShadowVolumeAppearance.shouldUseSphericalCoordinates(rectangle)) {\n          usePlanarExtents = false;\n          break;\n        }\n      }\n\n      for (i = 0; i < length; ++i) {\n        instance = instances[i];\n        geometry = instance.geometry;\n        instanceType = geometry.constructor;\n\n        const boundingRectangle = getRectangle(frameState, geometry);\n        const textureCoordinateRotationPoints =\n          geometry.textureCoordinateRotationPoints;\n\n        if (usePlanarExtents) {\n          attributes =\n            ShadowVolumeAppearance.getPlanarTextureCoordinateAttributes(\n              boundingRectangle,\n              textureCoordinateRotationPoints,\n              ellipsoid,\n              frameState.mapProjection,\n              this._maxHeight,\n            );\n        } else {\n          attributes =\n            ShadowVolumeAppearance.getSphericalExtentGeometryInstanceAttributes(\n              boundingRectangle,\n              textureCoordinateRotationPoints,\n              ellipsoid,\n              frameState.mapProjection,\n            );\n        }\n\n        const instanceAttributes = instance.attributes;\n        for (const attributeKey in instanceAttributes) {\n          if (instanceAttributes.hasOwnProperty(attributeKey)) {\n            attributes[attributeKey] = instanceAttributes[attributeKey];\n          }\n        }\n\n        groundInstances[i] = new GeometryInstance({\n          geometry: instanceType.createShadowVolume(\n            geometry,\n            getComputeMinimumHeightFunction(this),\n            getComputeMaximumHeightFunction(this),\n          ),\n          attributes: attributes,\n          id: instance.id,\n        });\n      }\n    } else {\n      // ClassificationPrimitive will check if the colors are all the same if it detects lack of fragment culling attributes\n      for (i = 0; i < length; ++i) {\n        instance = instances[i];\n        geometry = instance.geometry;\n        instanceType = geometry.constructor;\n        groundInstances[i] = new GeometryInstance({\n          geometry: instanceType.createShadowVolume(\n            geometry,\n            getComputeMinimumHeightFunction(this),\n            getComputeMaximumHeightFunction(this),\n          ),\n          attributes: instance.attributes,\n          id: instance.id,\n        });\n      }\n    }\n\n    primitiveOptions.geometryInstances = groundInstances;\n    primitiveOptions.appearance = this.appearance;\n\n    primitiveOptions._createBoundingVolumeFunction = function (\n      frameState,\n      geometry,\n    ) {\n      createBoundingVolume(that, frameState, geometry);\n    };\n    primitiveOptions._updateAndQueueCommandsFunction = function (\n      primitive,\n      frameState,\n      colorCommands,\n      pickCommands,\n      modelMatrix,\n      cull,\n      debugShowBoundingVolume,\n      twoPasses,\n    ) {\n      updateAndQueueCommands(\n        that,\n        frameState,\n        colorCommands,\n        pickCommands,\n        modelMatrix,\n        cull,\n        debugShowBoundingVolume,\n        twoPasses,\n      );\n    };\n\n    this._primitive = new ClassificationPrimitive(primitiveOptions);\n  }\n\n  this._primitive.appearance = this.appearance;\n  this._primitive.show = this.show;\n  this._primitive.debugShowShadowVolume = this.debugShowShadowVolume;\n  this._primitive.debugShowBoundingVolume = this.debugShowBoundingVolume;\n  this._primitive.update(frameState);\n\n  frameState.afterRender.push(() => {\n    if (!this._ready && defined(this._primitive) && this._primitive.ready) {\n      this._ready = true;\n\n      if (this.releaseGeometryInstances) {\n        this.geometryInstances = undefined;\n      }\n    }\n  });\n};\n\n/**\n * @private\n */\nGroundPrimitive.prototype.getBoundingSphere = function (id) {\n  const index = this._boundingSpheresKeys.indexOf(id);\n  if (index !== -1) {\n    return this._boundingSpheres[index];\n  }\n\n  return undefined;\n};\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n */\nGroundPrimitive.prototype.getGeometryInstanceAttributes = function (id) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(this._primitive)) {\n    throw new DeveloperError(\n      \"must call update before calling getGeometryInstanceAttributes\",\n    );\n  }\n  //>>includeEnd('debug');\n  return this._primitive.getGeometryInstanceAttributes(id);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see GroundPrimitive#destroy\n */\nGroundPrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see GroundPrimitive#isDestroyed\n */\nGroundPrimitive.prototype.destroy = function () {\n  this._primitive = this._primitive && this._primitive.destroy();\n  return destroyObject(this);\n};\n\n/**\n * Exposed for testing.\n *\n * @param {Context} context Rendering context\n * @returns {boolean} Whether or not the current context supports materials on GroundPrimitives.\n * @private\n */\nGroundPrimitive._supportsMaterials = function (context) {\n  return context.depthTexture;\n};\n\n/**\n * Checks if the given Scene supports materials on GroundPrimitives.\n * Materials on GroundPrimitives require support for the WEBGL_depth_texture extension.\n *\n * @param {Scene} scene The current scene.\n * @returns {boolean} Whether or not the current scene supports materials on GroundPrimitives.\n */\nGroundPrimitive.supportsMaterials = function (scene) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  return GroundPrimitive._supportsMaterials(scene.frameState.context);\n};\nexport default GroundPrimitive;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport MetadataEntity from \"./MetadataEntity.js\";\n\n/**\n * Metadata about a group of {@link Cesium3DTileContent}\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.id The ID of the group.\n * @param {object} options.group The group JSON object.\n * @param {MetadataClass} options.class The class that group metadata conforms to.\n *\n * @alias GroupMetadata\n * @constructor\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction GroupMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const id = options.id;\n  const group = options.group;\n  const metadataClass = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.group\", group);\n  Check.typeOf.object(\"options.class\", metadataClass);\n  //>>includeEnd('debug');\n\n  const properties = defined(group.properties) ? group.properties : {};\n\n  this._class = metadataClass;\n  this._properties = properties;\n  this._id = id;\n  this._extras = group.extras;\n  this._extensions = group.extensions;\n}\n\nObject.defineProperties(GroupMetadata.prototype, {\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof GroupMetadata.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * The ID of the group.\n   *\n   * @memberof GroupMetadata.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof GroupMetadata.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof GroupMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Returns whether the group has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the group has this property.\n * @private\n */\nGroupMetadata.prototype.hasProperty = function (propertyId) {\n  return MetadataEntity.hasProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Returns whether the group has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the group has a property with the given semantic.\n * @private\n */\nGroupMetadata.prototype.hasPropertyBySemantic = function (semantic) {\n  return MetadataEntity.hasPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nGroupMetadata.prototype.getPropertyIds = function (results) {\n  return MetadataEntity.getPropertyIds(this._properties, this._class, results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the group does not have this property.\n * @private\n */\nGroupMetadata.prototype.getProperty = function (propertyId) {\n  return MetadataEntity.getProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nGroupMetadata.prototype.setProperty = function (propertyId, value) {\n  return MetadataEntity.setProperty(\n    propertyId,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the group does not have this semantic.\n * @private\n */\nGroupMetadata.prototype.getPropertyBySemantic = function (semantic) {\n  return MetadataEntity.getPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nGroupMetadata.prototype.setPropertyBySemantic = function (semantic, value) {\n  return MetadataEntity.setPropertyBySemantic(\n    semantic,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\nexport default GroupMetadata;\n","/**\n * Represents the position relative to the terrain.\n *\n * @enum {number}\n */\nconst HeightReference = {\n  /**\n   * The position is absolute.\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n\n  /**\n   * The position is clamped to the terrain and 3D Tiles. When clamping to 3D Tilesets such as photorealistic 3D Tiles, ensure the tileset has {@link Cesium3DTileset#enableCollision} set to <code>true</code>. Otherwise, the entity may not be correctly clamped to the tileset surface.\n   * @type {number}\n   * @constant\n   */\n  CLAMP_TO_GROUND: 1,\n\n  /**\n   * The position height is the height above the terrain and 3D Tiles.\n   * @type {number}\n   * @constant\n   */\n  RELATIVE_TO_GROUND: 2,\n\n  /**\n   * The position is clamped to terain.\n   * @type {number}\n   * @constant\n   */\n  CLAMP_TO_TERRAIN: 3,\n\n  /**\n   * The position height is the height above terrain.\n   * @type {number}\n   * @constant\n   */\n  RELATIVE_TO_TERRAIN: 4,\n\n  /**\n   * The position is clamped to 3D Tiles.\n   * @type {number}\n   * @constant\n   */\n  CLAMP_TO_3D_TILE: 5,\n\n  /**\n   * The position height is the height above 3D Tiles.\n   * @type {number}\n   * @constant\n   */\n  RELATIVE_TO_3D_TILE: 6,\n};\n\nexport default Object.freeze(HeightReference);\n\n/**\n * Returns true if the height should be clamped to the surface\n * @param {HeightReference} heightReference\n * @returns true if the height should be clamped to the surface\n * @private\n */\nexport function isHeightReferenceClamp(heightReference) {\n  return (\n    heightReference === HeightReference.CLAMP_TO_GROUND ||\n    heightReference === HeightReference.CLAMP_TO_3D_TILE ||\n    heightReference === HeightReference.CLAMP_TO_TERRAIN\n  );\n}\n\n/**\n * Returns true if the height should be offset relative to the surface\n * @param {HeightReference} heightReference\n * @returns true if the height should be offset relative to the surface\n * @private\n */\nexport function isHeightReferenceRelative(heightReference) {\n  return (\n    heightReference === HeightReference.RELATIVE_TO_GROUND ||\n    heightReference === HeightReference.RELATIVE_TO_3D_TILE ||\n    heightReference === HeightReference.RELATIVE_TO_TERRAIN\n  );\n}\n","/**\n * The horizontal location of an origin relative to an object, e.g., a {@link Billboard}\n * or {@link Label}.  For example, setting the horizontal origin to <code>LEFT</code>\n * or <code>RIGHT</code> will display a billboard to the left or right (in screen space)\n * of the anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setHorizontalOrigin.png' width='648' height='196' /><br />\n * </div>\n *\n * @enum {number}\n *\n * @see Billboard#horizontalOrigin\n * @see Label#horizontalOrigin\n */\nconst HorizontalOrigin = {\n  /**\n   * The origin is at the horizontal center of the object.\n   *\n   * @type {number}\n   * @constant\n   */\n  CENTER: 0,\n\n  /**\n   * The origin is on the left side of the object.\n   *\n   * @type {number}\n   * @constant\n   */\n  LEFT: 1,\n\n  /**\n   * The origin is on the right side of the object.\n   *\n   * @type {number}\n   * @constant\n   */\n  RIGHT: -1,\n};\nexport default Object.freeze(HorizontalOrigin);\n","/*\n * Esri Contribution: This code implements support for I3S (Indexed 3D Scene Layers), an OGC Community Standard.\n * Co-authored-by: Alexandre Jean-Claude ajeanclaude@spiria.com\n * Co-authored-by: Anthony Mirabeau anthony.mirabeau@presagis.com\n * Co-authored-by: Elizabeth Rudkin elizabeth.rudkin@presagis.com\n * Co-authored-by: Tamrat Belayneh tbelayneh@esri.com\n *\n * The I3S format has been developed by Esri and is shared under an Apache 2.0 license and is maintained @ https://github.com/Esri/i3s-spec.\n * This implementation supports loading, displaying, and querying an I3S layer (supported versions include Esri github I3S versions 1.6, 1.7/1.8 -\n * whose OGC equivalent are I3S Community Standard Version 1.1 & 1.2) in the CesiumJS viewer.\n * It enables the user to access an I3S layer via its URL and load it inside of the CesiumJS viewer.\n *\n * When a scene layer is initialized it accomplishes the following:\n *\n * It processes the 3D Scene Layer resource (https://github.com/Esri/i3s-spec/blob/master/docs/1.8/3DSceneLayer.cmn.md) of an I3S dataset\n * and loads the layers data. It does so by creating a Cesium 3D Tileset for the given i3s layer and loads the root node.\n * When the root node is imported, it creates a Cesium 3D Tile that is parented to the Cesium 3D Tileset\n * and loads all children of the root node:\n *  for each children\n *   Create a place holder 3D tile so that the LOD display can use the nodes' selection criteria (maximumScreenSpaceError) to select the appropriate node\n *   based on the current LOD display & evaluation. If the Cesium 3D tile is visible, it invokes requestContent on it.\n *   At that moment, we intercept the call to requestContent, and we load the geometry in I3S format\n *   That geometry is transcoded on the fly to glTF format and ingested by CesiumJS\n *   When the geometry is loaded, we then load all children of this node as placeholders so that the LOD\n *   can know about them too.\n *\n * About transcoding:\n *\n * We use web workers to transcode I3S geometries into glTF\n * The steps are:\n *\n * Decode geometry attributes (positions, normals, etc..) either from DRACO or Binary format.\n * If requested, when creating an I3SDataProvider the user has the option to specify a tiled elevation terrain provider\n * (geoidTiledTerrainProvider) such as the one shown in the sandcastle example based on ArcGISTiledElevationTerrainProvider, that allows\n * conversion of heights for all vertices & bounding boxes of an I3S layer from (typically) gravity related (Orthometric) heights to Ellipsoidal.\n * This step is essential when fusing data with varying height sources (as is the case when fusing the I3S dataset (gravity related) in the sandcastle examples with the cesium world terrain (ellipsoidal)).\n * We then transform vertex coordinates from LONG/LAT/HEIGHT to Cartesian in local space and\n * scale appropriately if specified in the attribute metadata\n * Crop UVs if UV regions are defined in the attribute metadata\n * Create a glTF document in memory that will be ingested as part of a glb payload\n *\n * About GEOID data:\n *\n * We provide the ability to use GEOID data to convert heights from gravity related (orthometric) height systems to ellipsoidal.\n * We employ a service architecture to get the conversion factor for a given long lat values, leveraging existing implementation based on ArcGISTiledElevationTerrainProvider\n * to avoid requiring bloated look up files. The source Data used in this transcoding service was compiled from https://earth-info.nga.mil/#tab_wgs84-data and is based on\n * EGM2008 Gravity Model. The sandcastle examples show how to set the terrain provider service if required.\n */\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport HeightmapEncoding from \"../Core/HeightmapEncoding.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport I3SLayer from \"./I3SLayer.js\";\nimport I3SStatistics from \"./I3SStatistics.js\";\nimport I3SSublayer from \"./I3SSublayer.js\";\nimport Lerc from \"lerc\";\nimport Rectangle from \"../Core/Rectangle.js\";\n\n/**\n * @typedef {object} I3SDataProvider.ConstructorOptions\n *\n * Initialization options for the I3SDataProvider constructor\n *\n * @property {string} [name] The name of the I3S dataset.\n * @property {boolean} [show=true] Determines if the dataset will be shown.\n * @property {ArcGISTiledElevationTerrainProvider|Promise<ArcGISTiledElevationTerrainProvider>} [geoidTiledTerrainProvider] Tiled elevation provider describing an Earth Gravitational Model. If defined, geometry will be shifted based on the offsets given by this provider. Required to position I3S data sets with gravity-related height at the correct location.\n * @property {Cesium3DTileset.ConstructorOptions} [cesium3dTilesetOptions] Object containing options to pass to an internally created {@link Cesium3DTileset}. See {@link Cesium3DTileset} for list of valid properties. All options can be used with the exception of <code>url</code> and <code>show</code> which are overridden by values from I3SDataProvider.\n * @property {boolean} [showFeatures=false] Determines if the features will be shown.\n * @property {boolean} [adjustMaterialAlphaMode=false] The option to adjust the alpha mode of the material based on the transparency of the vertex color. When <code>true</code>, the alpha mode of the material (if not defined) will be set to BLEND for geometry with any transparency in the color vertex attribute.\n * @property {boolean} [applySymbology=false] Determines if the I3S symbology will be parsed and applied for the layers.\n * @property {boolean} [calculateNormals=false] Determines if the flat normals will be generated for I3S geometry without normals.\n *\n * @example\n * // Increase LOD by reducing SSE\n * const cesium3dTilesetOptions = {\n *   maximumScreenSpaceError: 1,\n * };\n * const i3sOptions = {\n *   cesium3dTilesetOptions: cesium3dTilesetOptions,\n * };\n *\n * @example\n * // Set a custom outline color to replace the color defined in I3S symbology\n * const cesium3dTilesetOptions = {\n *   outlineColor: Cesium.Color.BLUE,\n * };\n * const i3sOptions = {\n *   cesium3dTilesetOptions: cesium3dTilesetOptions,\n *   applySymbology: true,\n * };\n */\n\n/**\n * An I3SDataProvider is the main public class for I3S support. The url option\n * should return a scene object. Currently supported I3S versions are 1.6 and\n * 1.7/1.8 (OGC I3S 1.2). I3SFeature and I3SNode classes implement the\n * Object Model for I3S entities, with public interfaces.\n *\n * <div class=\"notice\">\n * This object is normally not instantiated directly, use {@link I3SDataProvider.fromUrl}.\n * </div>\n *\n * @alias I3SDataProvider\n * @constructor\n *\n * @param {I3SDataProvider.ConstructorOptions} options An object describing initialization options\n *\n * @see I3SDataProvider.fromUrl\n * @see ArcGISTiledElevationTerrainProvider\n *\n * @example\n * try {\n *   const i3sData = await I3SDataProvider.fromUrl(\n *     \"https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0\"\n *   );\n *   viewer.scene.primitives.add(i3sData);\n * } catch (error) {\n *   console.log(`There was an error creating the I3S Data Provider: ${error}`);\n * }\n *\n * @example\n * try {\n *   const geoidService = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(\n *     \"https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/EGM2008/ImageServer\"\n *   );\n *   const i3sData = await I3SDataProvider.fromUrl(\n *     \"https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0\", {\n *       geoidTiledTerrainProvider: geoidService\n *   });\n *   viewer.scene.primitives.add(i3sData);\n * } catch (error) {\n *   console.log(`There was an error creating the I3S Data Provider: ${error}`);\n * }\n */\nfunction I3SDataProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  // All public configuration is defined as ES5 properties\n  // These are just the \"private\" variables and their defaults.\n  this._name = options.name;\n  this._show = options.show ?? true;\n  this._geoidTiledTerrainProvider = options.geoidTiledTerrainProvider;\n  this._showFeatures = options.showFeatures ?? false;\n  this._adjustMaterialAlphaMode = options.adjustMaterialAlphaMode ?? false;\n  this._applySymbology = options.applySymbology ?? false;\n  this._calculateNormals = options.calculateNormals ?? false;\n\n  this._cesium3dTilesetOptions =\n    options.cesium3dTilesetOptions ?? Frozen.EMPTY_OBJECT;\n\n  this._layers = [];\n  this._sublayers = [];\n  this._data = undefined;\n  this._extent = undefined;\n  this._geoidDataPromise = undefined;\n  this._geoidDataList = undefined;\n  this._decoderTaskProcessor = undefined;\n  this._taskProcessorReadyPromise = undefined;\n  this._attributeStatistics = [];\n  this._layersExtent = [];\n}\n\nObject.defineProperties(I3SDataProvider.prototype, {\n  /**\n   * Gets a human-readable name for this dataset.\n   * @memberof I3SDataProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * Determines if the dataset will be shown.\n   * @memberof I3SDataProvider.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._show !== value) {\n        this._show = value;\n        for (let i = 0; i < this._layers.length; i++) {\n          this._layers[i]._updateVisibility();\n        }\n      }\n    },\n  },\n\n  /**\n   * The terrain provider referencing the GEOID service to be used for orthometric to ellipsoidal conversion.\n   * @memberof I3SDataProvider.prototype\n   * @type {ArcGISTiledElevationTerrainProvider}\n   * @readonly\n   */\n  geoidTiledTerrainProvider: {\n    get: function () {\n      return this._geoidTiledTerrainProvider;\n    },\n  },\n\n  /**\n   * Gets the collection of layers.\n   * @memberof I3SDataProvider.prototype\n   * @type {I3SLayer[]}\n   * @readonly\n   */\n  layers: {\n    get: function () {\n      return this._layers;\n    },\n  },\n\n  /**\n   * Gets the collection of building sublayers.\n   * @memberof I3SDataProvider.prototype\n   * @type {I3SSublayer[]}\n   * @readonly\n   */\n  sublayers: {\n    get: function () {\n      return this._sublayers;\n    },\n  },\n\n  /**\n   * Gets the I3S data for this object.\n   * @memberof I3SDataProvider.prototype\n   * @type {object}\n   * @readonly\n   */\n  data: {\n    get: function () {\n      return this._data;\n    },\n  },\n\n  /**\n   * Gets the extent covered by this I3S.\n   * @memberof I3SDataProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  extent: {\n    get: function () {\n      return this._extent;\n    },\n  },\n\n  /**\n   * The resource used to fetch the I3S dataset.\n   * @memberof I3SDataProvider.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n\n  /**\n   * Determines if the features will be shown.\n   * @memberof I3SDataProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  showFeatures: {\n    get: function () {\n      return this._showFeatures;\n    },\n  },\n\n  /**\n   * Determines if the alpha mode of the material will be adjusted depending on the color vertex attribute.\n   * @memberof I3SDataProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  adjustMaterialAlphaMode: {\n    get: function () {\n      return this._adjustMaterialAlphaMode;\n    },\n  },\n\n  /**\n   * Determines if the I3S symbology will be parsed and applied for the layers.\n   * @memberof I3SDataProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  applySymbology: {\n    get: function () {\n      return this._applySymbology;\n    },\n  },\n\n  /**\n   * Determines if the flat normals will be generated for I3S geometry without normals.\n   * @memberof I3SDataProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  calculateNormals: {\n    get: function () {\n      return this._calculateNormals;\n    },\n  },\n});\n\n/**\n * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see I3SDataProvider#isDestroyed\n */\nI3SDataProvider.prototype.destroy = function () {\n  for (let i = 0; i < this._layers.length; i++) {\n    if (defined(this._layers[i]._tileset)) {\n      this._layers[i]._tileset.destroy();\n    }\n  }\n\n  return destroyObject(this);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see I3SDataProvider#destroy\n */\nI3SDataProvider.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * @private\n */\nI3SDataProvider.prototype.update = function (frameState) {\n  for (let i = 0; i < this._layers.length; i++) {\n    if (defined(this._layers[i]._tileset)) {\n      this._layers[i]._tileset.update(frameState);\n    }\n  }\n};\n\n/**\n * @private\n */\nI3SDataProvider.prototype.prePassesUpdate = function (frameState) {\n  for (let i = 0; i < this._layers.length; i++) {\n    if (defined(this._layers[i]._tileset)) {\n      this._layers[i]._tileset.prePassesUpdate(frameState);\n    }\n  }\n};\n\n/**\n * @private\n */\nI3SDataProvider.prototype.postPassesUpdate = function (frameState) {\n  for (let i = 0; i < this._layers.length; i++) {\n    if (defined(this._layers[i]._tileset)) {\n      this._layers[i]._tileset.postPassesUpdate(frameState);\n    }\n  }\n};\n\n/**\n * @private\n */\nI3SDataProvider.prototype.updateForPass = function (frameState, passState) {\n  for (let i = 0; i < this._layers.length; i++) {\n    if (defined(this._layers[i]._tileset)) {\n      this._layers[i]._tileset.updateForPass(frameState, passState);\n    }\n  }\n};\n\nfunction buildLayerUrl(provider, layerId) {\n  const dataProviderUrl = provider.resource.getUrlComponent();\n\n  let layerUrl = \"\";\n  if (dataProviderUrl.match(/layers\\/\\d/)) {\n    layerUrl = `${dataProviderUrl}`.replace(/\\/+$/, \"\");\n  } else {\n    // Add '/' to url if needed + `$layers/${layerId}/` if tilesetUrl not already in ../layers/[id] format\n    layerUrl = `${dataProviderUrl}`\n      .replace(/\\/?$/, \"/\")\n      .concat(`layers/${layerId}`);\n  }\n  return layerUrl;\n}\n\nasync function addLayers(provider, data, options) {\n  if (data.layerType === \"Building\") {\n    if (!defined(options.showFeatures)) {\n      // The Building Scene Layer requires features to be shown to support filtering\n      provider._showFeatures = true;\n    }\n    if (!defined(options.adjustMaterialAlphaMode)) {\n      // The Building Scene Layer enables transparency by default\n      provider._adjustMaterialAlphaMode = true;\n    }\n    if (!defined(options.applySymbology)) {\n      // The Building Scene Layer applies symbology by default\n      provider._applySymbology = true;\n    }\n    if (!defined(options.calculateNormals)) {\n      // The Building Scene Layer calculates flat normals by default\n      provider._calculateNormals = true;\n    }\n\n    const buildingLayerUrl = buildLayerUrl(provider, data.id);\n    if (defined(data.sublayers)) {\n      const promises = [];\n      for (let i = 0; i < data.sublayers.length; i++) {\n        const promise = I3SSublayer._fromData(\n          provider,\n          buildingLayerUrl,\n          data.sublayers[i],\n          provider,\n        );\n        promises.push(promise);\n      }\n      const sublayers = await Promise.all(promises);\n      for (let i = 0; i < sublayers.length; i++) {\n        const sublayer = sublayers[i];\n        provider._sublayers.push(sublayer);\n        provider._layers.push(...sublayer._i3sLayers);\n      }\n    }\n\n    if (defined(data.statisticsHRef)) {\n      const uri = buildingLayerUrl.concat(`/${data.statisticsHRef}`);\n      const statistics = new I3SStatistics(provider, uri);\n      await statistics.load();\n      provider._attributeStatistics.push(statistics);\n    }\n\n    if (defined(data.fullExtent)) {\n      const extent = Rectangle.fromDegrees(\n        data.fullExtent.xmin,\n        data.fullExtent.ymin,\n        data.fullExtent.xmax,\n        data.fullExtent.ymax,\n      );\n      provider._layersExtent.push(extent);\n    }\n  } else if (\n    data.layerType === \"3DObject\" ||\n    data.layerType === \"IntegratedMesh\"\n  ) {\n    if (\n      !defined(options.calculateNormals) &&\n      !defined(data.textureSetDefinitions)\n    ) {\n      // I3S Layers without textures should calculate flat normals by default\n      provider._calculateNormals = true;\n    }\n\n    const newLayer = new I3SLayer(provider, data, provider);\n    provider._layers.push(newLayer);\n    if (defined(newLayer._extent)) {\n      provider._layersExtent.push(newLayer._extent);\n    }\n  } else {\n    // Filter other scene layer types out\n    console.log(\n      `${data.layerType} layer ${data.name} is skipped as not supported.`,\n    );\n  }\n}\n\n/**\n * Creates an I3SDataProvider. Currently supported I3S versions are 1.6 and\n * 1.7/1.8 (OGC I3S 1.2).\n *\n * @param {string|Resource} url The url of the I3S dataset, which should return an I3S scene object\n * @param {I3SDataProvider.ConstructorOptions} options An object describing initialization options\n * @returns {Promise<I3SDataProvider>}\n *\n * @example\n * try {\n *   const i3sData = await I3SDataProvider.fromUrl(\n *     \"https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0\"\n *   );\n *   viewer.scene.primitives.add(i3sData);\n * } catch (error) {\n *   console.log(`There was an error creating the I3S Data Provider: ${error}`);\n * }\n *\n * @example\n * try {\n *   const geoidService = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(\n *     \"https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/EGM2008/ImageServer\"\n *   );\n *   const i3sData = await I3SDataProvider.fromUrl(\n *     \"https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0\", {\n *       geoidTiledTerrainProvider: geoidService\n *   });\n *   viewer.scene.primitives.add(i3sData);\n * } catch (error) {\n *   console.log(`There was an error creating the I3S Data Provider: ${error}`);\n * }\n */\nI3SDataProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const resource = Resource.createIfNeeded(url);\n  // Set a query parameter for json to avoid failure on html pages\n  resource.setQueryParameters({ f: \"pjson\" }, true);\n  const data = await I3SDataProvider.loadJson(resource);\n\n  const provider = new I3SDataProvider(options);\n  provider._resource = resource;\n  provider._data = data;\n\n  // Success\n  if (defined(data.layers)) {\n    const promises = [];\n    for (let layerIndex = 0; layerIndex < data.layers.length; layerIndex++) {\n      const promise = addLayers(provider, data.layers[layerIndex], options);\n      promises.push(promise);\n    }\n    await Promise.all(promises);\n  } else {\n    await addLayers(provider, data, options);\n  }\n\n  provider._computeExtent();\n\n  // Start loading all of the tiles\n  const layerPromises = [];\n  for (let i = 0; i < provider._layers.length; i++) {\n    layerPromises.push(\n      provider._layers[i].load(options.cesium3dTilesetOptions),\n    );\n  }\n\n  await Promise.all(layerPromises);\n  return provider;\n};\n\n/**\n * @private\n */\nI3SDataProvider._fetchJson = function (resource) {\n  return resource.fetchJson();\n};\n\n/**\n * @private\n *\n * @param {Resource} resource The JSON resource to request\n * @returns {Promise<object>} The fetched data\n */\nI3SDataProvider.loadJson = async function (resource) {\n  const data = await I3SDataProvider._fetchJson(resource);\n  if (defined(data.error)) {\n    console.error(\"Failed to fetch I3S \", resource.url);\n    if (defined(data.error.message)) {\n      console.error(data.error.message);\n    }\n    if (defined(data.error.details)) {\n      for (let i = 0; i < data.error.details.length; i++) {\n        console.log(data.error.details[i]);\n      }\n    }\n\n    throw new RuntimeError(data.error);\n  }\n\n  return data;\n};\n\n/**\n * @private\n */\nI3SDataProvider.prototype._loadBinary = async function (resource) {\n  const buffer = await resource.fetchArrayBuffer();\n  if (buffer.byteLength > 0) {\n    // Check if we have a JSON response with 404\n    const array = new Uint8Array(buffer);\n    if (array[0] === \"{\".charCodeAt(0)) {\n      const textContent = new TextDecoder();\n      const str = textContent.decode(buffer);\n      if (str.includes(\"404\")) {\n        throw new RuntimeError(`Failed to load binary: ${resource.url}`);\n      }\n    }\n  }\n  return buffer;\n};\n\n/**\n * @private\n */\nI3SDataProvider.prototype._binarizeGltf = function (rawGltf) {\n  const encoder = new TextEncoder();\n  const rawGltfData = encoder.encode(JSON.stringify(rawGltf));\n  const binaryGltfData = new Uint8Array(rawGltfData.byteLength + 20);\n  const binaryGltf = {\n    magic: new Uint8Array(binaryGltfData.buffer, 0, 4),\n    version: new Uint32Array(binaryGltfData.buffer, 4, 1),\n    length: new Uint32Array(binaryGltfData.buffer, 8, 1),\n    chunkLength: new Uint32Array(binaryGltfData.buffer, 12, 1),\n    chunkType: new Uint32Array(binaryGltfData.buffer, 16, 1),\n    chunkData: new Uint8Array(\n      binaryGltfData.buffer,\n      20,\n      rawGltfData.byteLength,\n    ),\n  };\n\n  binaryGltf.magic[0] = \"g\".charCodeAt();\n  binaryGltf.magic[1] = \"l\".charCodeAt();\n  binaryGltf.magic[2] = \"T\".charCodeAt();\n  binaryGltf.magic[3] = \"F\".charCodeAt();\n\n  binaryGltf.version[0] = 2;\n  binaryGltf.length[0] = binaryGltfData.byteLength;\n  binaryGltf.chunkLength[0] = rawGltfData.byteLength;\n  binaryGltf.chunkType[0] = 0x4e4f534a; // JSON\n  binaryGltf.chunkData.set(rawGltfData);\n\n  return binaryGltfData;\n};\n\nconst scratchCartesian2 = new Cartesian2();\n\nfunction getCoveredTiles(terrainProvider, extent) {\n  const tilingScheme = terrainProvider.tilingScheme;\n\n  // Sort points into a set of tiles\n  const tileRequests = []; // Result will be an Array as it's easier to work with\n  const tileRequestSet = {}; // A unique set\n\n  const maxLevel = terrainProvider._lodCount;\n\n  const topLeftCorner = Cartographic.fromRadians(extent.west, extent.north);\n  const bottomRightCorner = Cartographic.fromRadians(extent.east, extent.south);\n  const minCornerXY = tilingScheme.positionToTileXY(topLeftCorner, maxLevel);\n  const maxCornerXY = tilingScheme.positionToTileXY(\n    bottomRightCorner,\n    maxLevel,\n  );\n\n  // Get all the tiles in between\n  for (let x = minCornerXY.x; x <= maxCornerXY.x; x++) {\n    for (let y = minCornerXY.y; y <= maxCornerXY.y; y++) {\n      const xy = Cartesian2.fromElements(x, y, scratchCartesian2);\n      const key = xy.toString();\n      if (!tileRequestSet.hasOwnProperty(key)) {\n        // When tile is requested for the first time\n        const value = {\n          x: xy.x,\n          y: xy.y,\n          level: maxLevel,\n          tilingScheme: tilingScheme,\n          terrainProvider: terrainProvider,\n          positions: [],\n        };\n        tileRequestSet[key] = value;\n        tileRequests.push(value);\n      }\n    }\n  }\n\n  // Send request for each required tile\n  const tilePromises = [];\n  for (let i = 0; i < tileRequests.length; ++i) {\n    const tileRequest = tileRequests[i];\n    const requestPromise = tileRequest.terrainProvider.requestTileGeometry(\n      tileRequest.x,\n      tileRequest.y,\n      tileRequest.level,\n    );\n\n    tilePromises.push(requestPromise);\n  }\n\n  return Promise.all(tilePromises).then(function (heightMapBuffers) {\n    const heightMaps = [];\n    for (let i = 0; i < heightMapBuffers.length; i++) {\n      const options = {\n        tilingScheme: tilingScheme,\n        x: tileRequests[i].x,\n        y: tileRequests[i].y,\n        level: tileRequests[i].level,\n      };\n      const heightMap = heightMapBuffers[i];\n\n      let projectionType = \"Geographic\";\n      if (tilingScheme._projection instanceof WebMercatorProjection) {\n        projectionType = \"WebMercator\";\n      }\n\n      const heightMapData = {\n        projectionType: projectionType,\n        projection: tilingScheme._projection,\n        nativeExtent: tilingScheme.tileXYToNativeRectangle(\n          options.x,\n          options.y,\n          options.level,\n        ),\n        height: heightMap._height,\n        width: heightMap._width,\n        scale: heightMap._structure.heightScale,\n        offset: heightMap._structure.heightOffset,\n      };\n\n      if (heightMap._encoding === HeightmapEncoding.LERC) {\n        const result = Lerc.decode(heightMap._buffer);\n        heightMapData.buffer = result.pixels[0];\n      } else {\n        heightMapData.buffer = heightMap._buffer;\n      }\n\n      heightMaps.push(heightMapData);\n    }\n\n    return heightMaps;\n  });\n}\n\nasync function loadGeoidData(provider) {\n  // Load tiles from arcgis\n  const geoidTerrainProvider = provider._geoidTiledTerrainProvider;\n\n  if (!defined(geoidTerrainProvider)) {\n    return;\n  }\n\n  try {\n    const heightMaps = await getCoveredTiles(\n      geoidTerrainProvider,\n      provider._extent,\n    );\n    provider._geoidDataList = heightMaps;\n  } catch (error) {\n    console.log(\n      \"Error retrieving Geoid Terrain tiles - no geoid conversion will be performed.\",\n    );\n  }\n}\n\n/**\n * @private\n */\nI3SDataProvider.prototype.loadGeoidData = async function () {\n  if (defined(this._geoidDataPromise)) {\n    return this._geoidDataPromise;\n  }\n\n  this._geoidDataPromise = loadGeoidData(this);\n  return this._geoidDataPromise;\n};\n\n/**\n * @private\n */\nI3SDataProvider.prototype._computeExtent = function () {\n  let rectangle;\n\n  // Compute the extent from all layers\n  for (\n    let layerIndex = 0;\n    layerIndex < this._layersExtent.length;\n    layerIndex++\n  ) {\n    const layerExtent = this._layersExtent[layerIndex];\n    if (!defined(rectangle)) {\n      rectangle = Rectangle.clone(layerExtent);\n    } else {\n      Rectangle.union(rectangle, layerExtent, rectangle);\n    }\n  }\n\n  this._extent = rectangle;\n};\n\n/**\n * Returns the collection of names for all available attributes\n * @returns {string[]} The collection of attribute names\n */\nI3SDataProvider.prototype.getAttributeNames = function () {\n  const attributes = [];\n  for (let i = 0; i < this._attributeStatistics.length; ++i) {\n    attributes.push(...this._attributeStatistics[i].names);\n  }\n  return attributes;\n};\n\n/**\n * Returns the collection of values for the attribute with the given name\n * @param {string} name The attribute name\n * @returns {string[]} The collection of attribute values\n */\nI3SDataProvider.prototype.getAttributeValues = function (name) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"name\", name);\n  //>>includeEnd('debug');\n\n  for (let i = 0; i < this._attributeStatistics.length; ++i) {\n    const values = this._attributeStatistics[i]._getValues(name);\n    if (defined(values)) {\n      return values;\n    }\n  }\n  return [];\n};\n\n/**\n * Filters the drawn elements of a scene to specific attribute names and values\n * @param {I3SNode.AttributeFilter[]} [filters=[]] The collection of attribute filters\n * @returns {Promise<void>} A promise that is resolved when the filter is applied\n */\nI3SDataProvider.prototype.filterByAttributes = function (filters) {\n  const promises = [];\n  for (let i = 0; i < this._layers.length; i++) {\n    const promise = this._layers[i].filterByAttributes(filters);\n    promises.push(promise);\n  }\n  return Promise.all(promises);\n};\n\nexport default I3SDataProvider;\n","import Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\n\n/**\n * Decode I3S using web workers.\n *\n * @private\n */\nfunction I3SDecoder() {}\n\n// Maximum concurrency to use when decoding draco models\nI3SDecoder._maxDecodingConcurrency = Math.max(\n  FeatureDetection.hardwareConcurrency - 1,\n  1,\n);\n\nI3SDecoder._decodeTaskProcessor = new TaskProcessor(\n  \"decodeI3S\",\n  I3SDecoder._maxDecodingConcurrency,\n);\n\nI3SDecoder._promise = undefined;\n\nasync function initializeDecoder() {\n  const result = await I3SDecoder._decodeTaskProcessor.initWebAssemblyModule({\n    wasmBinaryFile: \"ThirdParty/draco_decoder.wasm\",\n  });\n  if (result) {\n    return I3SDecoder._decodeTaskProcessor;\n  }\n\n  throw new RuntimeError(\"I3S decoder could not be initialized.\");\n}\n\n/**\n * Transcodes I3S to glTF in a web worker\n * @param {string} url custom attributes source URL\n * @param {object} defaultGeometrySchema Schema to use during decoding\n * @param {I3SGeometry} geometryData The draco encoded geometry data\n * @param {Array} [featureData] The draco encoded feature data\n * @param {object} [symbologyData] The rendering symbology to apply\n * @returns Promise<undefined|object> Returns a promise which resolves to the glTF result, or undefined if the task cannot be scheduled this frame.\n *\n * @exception {RuntimeError} I3S decoder could not be initialized.\n */\nI3SDecoder.decode = async function (\n  url,\n  defaultGeometrySchema,\n  geometryData,\n  featureData,\n  symbologyData,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"url\", url);\n  Check.defined(\"defaultGeometrySchema\", defaultGeometrySchema);\n  Check.defined(\"geometryData\", geometryData);\n  //>>includeEnd('debug');\n\n  if (!defined(I3SDecoder._promise)) {\n    I3SDecoder._promise = initializeDecoder();\n  }\n\n  return I3SDecoder._promise.then(function (taskProcessor) {\n    // Prepare the data to send to the worker\n    const parentData = geometryData._parent._data;\n    const parentRotationInverseMatrix =\n      geometryData._parent._inverseRotationMatrix;\n\n    let longitude = 0.0;\n    let latitude = 0.0;\n    let height = 0.0;\n\n    if (defined(parentData.obb)) {\n      longitude = parentData.obb.center[0];\n      latitude = parentData.obb.center[1];\n      height = parentData.obb.center[2];\n    } else if (defined(parentData.mbs)) {\n      longitude = parentData.mbs[0];\n      latitude = parentData.mbs[1];\n      height = parentData.mbs[2];\n    }\n\n    const axisFlipRotation = Matrix3.fromRotationX(-CesiumMath.PI_OVER_TWO);\n    const parentRotation = new Matrix3();\n\n    Matrix3.multiply(\n      axisFlipRotation,\n      parentRotationInverseMatrix,\n      parentRotation,\n    );\n\n    const cartographicCenter = Cartographic.fromDegrees(\n      longitude,\n      latitude,\n      height,\n    );\n\n    const cartesianCenter =\n      Ellipsoid.WGS84.cartographicToCartesian(cartographicCenter);\n\n    const payload = {\n      binaryData: geometryData._data,\n      featureData:\n        defined(featureData) && defined(featureData[0])\n          ? featureData[0].data\n          : undefined,\n      schema: defaultGeometrySchema,\n      bufferInfo: geometryData._geometryBufferInfo,\n      ellipsoidRadiiSquare: Ellipsoid.WGS84.radiiSquared,\n      url: url,\n      geoidDataList: geometryData._dataProvider._geoidDataList,\n      cartographicCenter: cartographicCenter,\n      cartesianCenter: cartesianCenter,\n      parentRotation: parentRotation,\n      enableFeatures: geometryData._dataProvider.showFeatures,\n      splitGeometryByColorTransparency:\n        geometryData._dataProvider.adjustMaterialAlphaMode,\n      symbologyData: symbologyData,\n      calculateNormals: geometryData._dataProvider.calculateNormals,\n    };\n\n    return taskProcessor.scheduleTask(payload);\n  });\n};\n\nexport default I3SDecoder;\n","import defined from \"../Core/defined.js\";\nimport I3SDataProvider from \"./I3SDataProvider.js\";\n\n/**\n * This class implements an I3S Feature.\n * <p>\n * Do not construct this directly, instead access tiles through {@link I3SNode}.\n * </p>\n * @alias I3SFeature\n * @internalConstructor\n */\nfunction I3SFeature(parent, uri) {\n  this._parent = parent;\n  this._dataProvider = parent._dataProvider;\n  this._layer = parent._layer;\n\n  if (defined(this._parent._nodeIndex)) {\n    this._resource = this._parent._layer.resource.getDerivedResource({\n      url: `nodes/${this._parent._data.mesh.attribute.resource}/${uri}`,\n    });\n  } else {\n    this._resource = this._parent.resource.getDerivedResource({ url: uri });\n  }\n}\n\nObject.defineProperties(I3SFeature.prototype, {\n  /**\n   * Gets the resource for the feature\n   * @memberof I3SFeature.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n  /**\n   * Gets the I3S data for this object.\n   * @memberof I3SFeature.prototype\n   * @type {object}\n   * @readonly\n   */\n  data: {\n    get: function () {\n      return this._data;\n    },\n  },\n});\n\n/**\n * Loads the content.\n * @returns {Promise<object>} A promise that is resolved when the data of the I3S feature is loaded\n * @private\n */\nI3SFeature.prototype.load = async function () {\n  this._data = await I3SDataProvider.loadJson(this._resource);\n  return this._data;\n};\n\nexport default I3SFeature;\n","import defined from \"../Core/defined.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * This class implements an I3S Field which is custom data attached\n * to nodes\n * @alias I3SField\n * @internalConstructor\n * @privateParam {I3SNode} parent The parent of that geometry\n * @privateParam {object} storageInfo The structure containing the storage info of the field\n */\nfunction I3SField(parent, storageInfo) {\n  this._storageInfo = storageInfo;\n  this._parent = parent;\n  this._dataProvider = parent._dataProvider;\n  this._loadPromise = undefined;\n  const uri = `attributes/${storageInfo.key}/0`;\n\n  if (defined(this._parent._nodeIndex)) {\n    this._resource = this._parent._layer.resource.getDerivedResource({\n      url: `nodes/${this._parent._data.mesh.attribute.resource}/${uri}`,\n    });\n  } else {\n    this._resource = this._parent.resource.getDerivedResource({ url: uri });\n  }\n}\n\nObject.defineProperties(I3SField.prototype, {\n  /**\n   * Gets the resource for the fields\n   * @memberof I3SField.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n  /**\n   * Gets the header for this field.\n   * @memberof I3SField.prototype\n   * @type {object}\n   * @readonly\n   */\n  header: {\n    get: function () {\n      return this._header;\n    },\n  },\n  /**\n   * Gets the values for this field.\n   * @memberof I3SField.prototype\n   * @type {object}\n   * @readonly\n   */\n  values: {\n    get: function () {\n      if (defined(this._values)) {\n        // attribute data can be stored either as values or as object identifiers\n        if (defined(this._values.attributeValues)) {\n          return this._values.attributeValues;\n        }\n        if (defined(this._values.objectIds)) {\n          return this._values.objectIds;\n        }\n      }\n      return [];\n    },\n  },\n  /**\n   * Gets the name for the field.\n   * @memberof I3SField.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._storageInfo.name;\n    },\n  },\n});\n\nfunction getNumericTypeSize(type) {\n  if (type === \"UInt8\" || type === \"Int8\") {\n    return 1;\n  } else if (type === \"UInt16\" || type === \"Int16\") {\n    return 2;\n  } else if (\n    type === \"UInt32\" ||\n    type === \"Int32\" ||\n    type === \"Oid32\" ||\n    type === \"Float32\"\n  ) {\n    return 4;\n  } else if (type === \"UInt64\" || type === \"Int64\" || type === \"Float64\") {\n    return 8;\n  }\n\n  // Not a numeric type\n  return 0;\n}\n\nfunction getValueTypeSize(type) {\n  if (type === \"String\") {\n    return 1;\n  }\n  return getNumericTypeSize(type);\n}\n\nasync function load(field) {\n  const data = await field._dataProvider._loadBinary(field._resource);\n  const dataView = new DataView(data);\n  field._data = data;\n  field._validateHeader(dataView);\n  const headerSize = field._parseHeader(dataView);\n  const offset = field._getBodyOffset(headerSize);\n  field._validateBody(dataView, offset);\n  field._parseBody(dataView, offset);\n}\n\n/**\n * Loads the content.\n * @returns {Promise<void>} A promise that is resolved when the field data is loaded\n */\nI3SField.prototype.load = function () {\n  if (defined(this._loadPromise)) {\n    return this._loadPromise;\n  }\n\n  this._loadPromise = load(this).catch(function (error) {\n    console.error(error);\n  });\n  return this._loadPromise;\n};\n\n/**\n * @private\n */\nI3SField.prototype._parseValue = function (dataView, type, offset) {\n  let value;\n  if (type === \"UInt8\") {\n    value = dataView.getUint8(offset);\n    offset += 1;\n  } else if (type === \"Int8\") {\n    value = dataView.getInt8(offset);\n    offset += 1;\n  } else if (type === \"UInt16\") {\n    value = dataView.getUint16(offset, true);\n    offset += 2;\n  } else if (type === \"Int16\") {\n    value = dataView.getInt16(offset, true);\n    offset += 2;\n  } else if (type === \"UInt32\") {\n    value = dataView.getUint32(offset, true);\n    offset += 4;\n  } else if (type === \"Oid32\") {\n    value = dataView.getUint32(offset, true);\n    offset += 4;\n  } else if (type === \"Int32\") {\n    value = dataView.getInt32(offset, true);\n    offset += 4;\n  } else if (type === \"UInt64\") {\n    const left = dataView.getUint32(offset, true);\n    const right = dataView.getUint32(offset + 4, true);\n    value = left + Math.pow(2, 32) * right;\n    offset += 8;\n  } else if (type === \"Int64\") {\n    const left = dataView.getUint32(offset, true);\n    const right = dataView.getUint32(offset + 4, true);\n    if (right < Math.pow(2, 31)) {\n      // Positive number\n      value = left + Math.pow(2, 32) * right;\n    } else {\n      // Negative\n      value = left + Math.pow(2, 32) * (right - Math.pow(2, 32));\n    }\n\n    offset += 8;\n  } else if (type === \"Float32\") {\n    value = dataView.getFloat32(offset, true);\n    offset += 4;\n  } else if (type === \"Float64\") {\n    value = dataView.getFloat64(offset, true);\n    offset += 8;\n  } else if (type === \"String\") {\n    value = String.fromCharCode(dataView.getUint8(offset));\n    offset += 1;\n  }\n\n  return {\n    value: value,\n    offset: offset,\n  };\n};\n\n/**\n * @private\n */\nI3SField.prototype._parseHeader = function (dataView) {\n  let offset = 0;\n  this._header = {};\n  for (\n    let itemIndex = 0;\n    itemIndex < this._storageInfo.header.length;\n    itemIndex++\n  ) {\n    const item = this._storageInfo.header[itemIndex];\n    const parsedValue = this._parseValue(dataView, item.valueType, offset);\n    this._header[item.property] = parsedValue.value;\n    offset = parsedValue.offset;\n  }\n  return offset;\n};\n\n/**\n * @private\n */\nI3SField.prototype._parseBody = function (dataView, offset) {\n  this._values = {};\n  for (\n    let itemIndex = 0;\n    itemIndex < this._storageInfo.ordering.length;\n    itemIndex++\n  ) {\n    const orderingValue = this._storageInfo.ordering[itemIndex];\n    // all strings in the ordering array correspond to the property name, except ObjectIds\n    const item = orderingValue === \"ObjectIds\" ? \"objectIds\" : orderingValue;\n    const desc = this._storageInfo[item];\n    if (defined(desc)) {\n      this._values[item] = [];\n      for (let index = 0; index < this._header.count; ++index) {\n        if (desc.valueType !== \"String\") {\n          const parsedValue = this._parseValue(\n            dataView,\n            desc.valueType,\n            offset,\n          );\n          this._values[item].push(parsedValue.value);\n          offset = parsedValue.offset;\n        } else {\n          const stringLen = this._values.attributeByteCounts[index];\n          let stringContent = \"\";\n          for (let cIndex = 0; cIndex < stringLen; ++cIndex) {\n            const curParsedValue = this._parseValue(\n              dataView,\n              desc.valueType,\n              offset,\n            );\n            if (curParsedValue.value.charCodeAt(0) !== 0) {\n              stringContent += curParsedValue.value;\n            }\n            offset = curParsedValue.offset;\n          }\n          // We skip the last character of the string since it's a null terminator\n          this._values[item].push(stringContent);\n        }\n      }\n    }\n  }\n};\n\n/**\n * @private\n */\nI3SField.prototype._getBodyOffset = function (headerSize) {\n  let valueSize = 0;\n  if (defined(this._storageInfo.attributeValues)) {\n    valueSize = getNumericTypeSize(this._storageInfo.attributeValues.valueType);\n  } else if (defined(this._storageInfo.objectIds)) {\n    valueSize = getNumericTypeSize(this._storageInfo.objectIds.valueType);\n  }\n  if (valueSize > 0) {\n    // Values will be padded to align the addresses with the data size\n    return Math.ceil(headerSize / valueSize) * valueSize;\n  }\n  return headerSize;\n};\n\n/**\n * @private\n */\nI3SField.prototype._validateHeader = function (dataView) {\n  let headerSize = 0;\n  for (\n    let itemIndex = 0;\n    itemIndex < this._storageInfo.header.length;\n    itemIndex++\n  ) {\n    const item = this._storageInfo.header[itemIndex];\n    headerSize += getValueTypeSize(item.valueType);\n  }\n  if (dataView.byteLength < headerSize) {\n    throw new RuntimeError(\n      `Invalid attribute buffer size (field: ${this.name}, header: ${headerSize}, actual: ${dataView.byteLength})`,\n    );\n  }\n};\n\n/**\n * @private\n */\nI3SField.prototype._validateBody = function (dataView, offset) {\n  if (!defined(this._header.count)) {\n    throw new RuntimeError(\n      `Invalid attribute buffer (field: ${this.name}, count is missing)`,\n    );\n  }\n  let attributeByteCountsOffset;\n  for (\n    let itemIndex = 0;\n    itemIndex < this._storageInfo.ordering.length &&\n    offset < dataView.byteLength;\n    itemIndex++\n  ) {\n    const orderingValue = this._storageInfo.ordering[itemIndex];\n    // all strings in the ordering array correspond to the property name, except ObjectIds\n    const item = orderingValue === \"ObjectIds\" ? \"objectIds\" : orderingValue;\n    const desc = this._storageInfo[item];\n    if (defined(desc)) {\n      if (desc.valueType !== \"String\") {\n        if (item === \"attributeByteCounts\") {\n          attributeByteCountsOffset = offset;\n        }\n        const valueSize = getNumericTypeSize(desc.valueType);\n        offset += valueSize * this._header.count;\n      } else {\n        if (!defined(attributeByteCountsOffset)) {\n          throw new RuntimeError(\n            `Invalid attribute buffer (field: ${this.name}, attributeByteCounts is missing)`,\n          );\n        }\n        for (\n          let index = 0;\n          index < this._header.count && offset < dataView.byteLength;\n          ++index\n        ) {\n          const parsedValue = this._parseValue(\n            dataView,\n            this._storageInfo.attributeByteCounts.valueType,\n            attributeByteCountsOffset,\n          );\n          offset += parsedValue.value;\n          attributeByteCountsOffset = parsedValue.offset;\n        }\n      }\n    } else {\n      throw new RuntimeError(\n        `Invalid attribute buffer (field: ${this.name}, ${item} is missing)`,\n      );\n    }\n  }\n  if (dataView.byteLength < offset) {\n    throw new RuntimeError(\n      `Invalid attribute buffer size (field: ${this.name}, expected: ${offset}, actual: ${dataView.byteLength})`,\n    );\n  }\n};\n\nexport default I3SField;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport srgbToLinear from \"../Core/srgbToLinear.js\";\n\n/**\n * This class implements an I3S Geometry. Each I3SGeometry\n * generates an in memory glTF to be used as content for a Cesium3DTile\n * <p>\n * Do not construct this directly, instead access tiles through {@link I3SNode}.\n * </p>\n * @alias I3SGeometry\n * @internalConstructor\n * @privateParam {I3SNode} parent The parent of that geometry\n * @privateParam {string} uri The uri to load the data from\n */\nfunction I3SGeometry(parent, uri) {\n  const dataProvider = parent._dataProvider;\n  const layer = parent._layer;\n\n  let resource;\n\n  if (defined(parent._nodeIndex)) {\n    resource = layer.resource.getDerivedResource({\n      url: `nodes/${parent._data.mesh.geometry.resource}/${uri}`,\n    });\n  } else {\n    resource = parent.resource.getDerivedResource({ url: uri });\n  }\n\n  this._parent = parent;\n  this._dataProvider = dataProvider;\n  this._layer = layer;\n  this._resource = resource;\n\n  this._customAttributes = undefined;\n}\n\nObject.defineProperties(I3SGeometry.prototype, {\n  /**\n   * Gets the resource for the geometry\n   * @memberof I3SGeometry.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n\n  /**\n   * Gets the I3S data for this object.\n   * @memberof I3SGeometry.prototype\n   * @type {object}\n   * @readonly\n   */\n  data: {\n    get: function () {\n      return this._data;\n    },\n  },\n  /**\n   * Gets the custom attributes of the geometry.\n   * @memberof I3SGeometry.prototype\n   * @type {object}\n   * @readonly\n   */\n  customAttributes: {\n    get: function () {\n      return this._customAttributes;\n    },\n  },\n});\n\n/**\n * Loads the content.\n * @returns {Promise<object>} A promise that is resolved when the geometry data is loaded\n * @private\n */\nI3SGeometry.prototype.load = function () {\n  const that = this;\n  return this._dataProvider._loadBinary(this._resource).then(function (data) {\n    that._data = data;\n    return data;\n  });\n};\n\nconst scratchAb = new Cartesian3();\nconst scratchAp1 = new Cartesian3();\nconst scratchAp2 = new Cartesian3();\nconst scratchCp1 = new Cartesian3();\nconst scratchCp2 = new Cartesian3();\n\nfunction sameSide(p1, p2, a, b) {\n  const ab = Cartesian3.subtract(b, a, scratchAb);\n  const cp1 = Cartesian3.cross(\n    ab,\n    Cartesian3.subtract(p1, a, scratchAp1),\n    scratchCp1,\n  );\n  const cp2 = Cartesian3.cross(\n    ab,\n    Cartesian3.subtract(p2, a, scratchAp2),\n    scratchCp2,\n  );\n  return Cartesian3.dot(cp1, cp2) >= 0;\n}\n\nconst scratchV0 = new Cartesian3();\nconst scratchV1 = new Cartesian3();\nconst scratchV2 = new Cartesian3();\n\nconst scratchV0V1 = new Cartesian3();\nconst scratchV0V2 = new Cartesian3();\nconst scratchCrossProd = new Cartesian3();\nconst scratchNormal = new Cartesian3();\n\nconst scratchV0p = new Cartesian3();\nconst scratchV1p = new Cartesian3();\nconst scratchV2p = new Cartesian3();\n\n/**\n * Find a triangle touching the point [px, py, pz], then return the vertex closest to the search point\n * @param {number} px The x component of the point to query\n * @param {number} py The y component of the point to query\n * @param {number} pz The z component of the point to query\n * @returns {object} A structure containing the index of the closest point,\n * the squared distance from the queried point to the point that is found,\n * the distance from the queried point to the point that is found,\n * the queried position in local space,\n * the closest position in local space\n */\nI3SGeometry.prototype.getClosestPointIndexOnTriangle = function (px, py, pz) {\n  if (\n    defined(this._customAttributes) &&\n    defined(this._customAttributes.positions)\n  ) {\n    // Convert queried position to local\n    const position = new Cartesian3(px, py, pz);\n\n    position.x -= this._customAttributes.cartesianCenter.x;\n    position.y -= this._customAttributes.cartesianCenter.y;\n    position.z -= this._customAttributes.cartesianCenter.z;\n    Matrix3.multiplyByVector(\n      this._customAttributes.parentRotation,\n      position,\n      position,\n    );\n\n    let bestTriDist = Number.MAX_VALUE;\n    let bestTri;\n    let bestDistSq;\n    let bestIndex;\n    let bestPt;\n\n    // Brute force lookup, @TODO: this can be improved with a spatial partitioning search system\n    const positions = this._customAttributes.positions;\n    const indices = this._customAttributes.indices;\n\n    // We may have indexed or non-indexed triangles here\n    let triCount;\n    if (defined(indices)) {\n      triCount = indices.length;\n    } else {\n      triCount = positions.length / 3;\n    }\n\n    for (let triIndex = 0; triIndex < triCount; triIndex++) {\n      let i0, i1, i2;\n      if (defined(indices)) {\n        i0 = indices[triIndex];\n        i1 = indices[triIndex + 1];\n        i2 = indices[triIndex + 2];\n      } else {\n        i0 = triIndex * 3;\n        i1 = triIndex * 3 + 1;\n        i2 = triIndex * 3 + 2;\n      }\n\n      const v0 = Cartesian3.fromElements(\n        positions[i0 * 3],\n        positions[i0 * 3 + 1],\n        positions[i0 * 3 + 2],\n        scratchV0,\n      );\n      const v1 = Cartesian3.fromElements(\n        positions[i1 * 3],\n        positions[i1 * 3 + 1],\n        positions[i1 * 3 + 2],\n        scratchV1,\n      );\n      const v2 = new Cartesian3(\n        positions[i2 * 3],\n        positions[i2 * 3 + 1],\n        positions[i2 * 3 + 2],\n        scratchV2,\n      );\n\n      // Check how the point is positioned relative to the triangle.\n      // This will tell us whether the projection of the point in the triangle's plane lands in the triangle\n      if (\n        !sameSide(position, v0, v1, v2) ||\n        !sameSide(position, v1, v0, v2) ||\n        !sameSide(position, v2, v0, v1)\n      ) {\n        continue;\n      }\n      // Because of precision issues, we can't always reliably tell if the point lands directly on the face, so the most robust way is just to find the closest one\n      const v0v1 = Cartesian3.subtract(v1, v0, scratchV0V1);\n      const v0v2 = Cartesian3.subtract(v2, v0, scratchV0V2);\n      const crossProd = Cartesian3.cross(v0v1, v0v2, scratchCrossProd);\n\n      // Skip \"triangles\" with 3 colinear points\n      if (Cartesian3.magnitude(crossProd) === 0) {\n        continue;\n      }\n      const normal = Cartesian3.normalize(crossProd, scratchNormal);\n\n      const v0p = Cartesian3.subtract(position, v0, scratchV0p);\n      const normalDist = Math.abs(Cartesian3.dot(v0p, normal));\n      if (normalDist < bestTriDist) {\n        bestTriDist = normalDist;\n        bestTri = triIndex;\n\n        // Found a triangle, return the index of the closest point\n        const d0 = Cartesian3.magnitudeSquared(\n          Cartesian3.subtract(position, v0, v0p),\n        );\n        const d1 = Cartesian3.magnitudeSquared(\n          Cartesian3.subtract(position, v1, scratchV1p),\n        );\n        const d2 = Cartesian3.magnitudeSquared(\n          Cartesian3.subtract(position, v2, scratchV2p),\n        );\n        if (d0 < d1 && d0 < d2) {\n          bestIndex = i0;\n          bestPt = v0;\n          bestDistSq = d0;\n        } else if (d1 < d2) {\n          bestIndex = i1;\n          bestPt = v1;\n          bestDistSq = d1;\n        } else {\n          bestIndex = i2;\n          bestPt = v2;\n          bestDistSq = d2;\n        }\n      }\n    }\n\n    if (defined(bestTri)) {\n      return {\n        index: bestIndex,\n        distanceSquared: bestDistSq,\n        distance: Math.sqrt(bestDistSq),\n        queriedPosition: position,\n        closestPosition: Cartesian3.clone(bestPt),\n      };\n    }\n  }\n\n  // No hits found\n  return {\n    index: -1,\n    distanceSquared: Number.Infinity,\n    distance: Number.Infinity,\n  };\n};\n\nfunction convertColorFactor(factor) {\n  const convertedFactor = [];\n  const length = factor.length;\n  for (let i = 0; i < length; i++) {\n    if (i < 3) {\n      convertedFactor.push(srgbToLinear(factor[i]));\n    } else {\n      convertedFactor.push(factor[i]);\n    }\n  }\n  return convertedFactor;\n}\n\n/**\n * @private\n */\nI3SGeometry.prototype._generateGltf = function (\n  nodesInScene,\n  nodes,\n  meshes,\n  buffers,\n  bufferViews,\n  accessors,\n  extensions,\n  extensionsUsed,\n) {\n  // Get the material definition\n  let gltfMaterial = {\n    pbrMetallicRoughness: {\n      metallicFactor: 0.0,\n    },\n    doubleSided: true,\n    name: \"Material\",\n  };\n\n  let isTextured = false;\n  let materialDefinition;\n  let texturePath = \"\";\n  if (\n    defined(this._parent._data.mesh) &&\n    defined(this._layer._data.materialDefinitions)\n  ) {\n    const materialInfo = this._parent._data.mesh.material;\n    const materialIndex = materialInfo.definition;\n    if (\n      materialIndex >= 0 &&\n      materialIndex < this._layer._data.materialDefinitions.length\n    ) {\n      materialDefinition = this._layer._data.materialDefinitions[materialIndex];\n      gltfMaterial = materialDefinition;\n\n      if (\n        defined(gltfMaterial.pbrMetallicRoughness) &&\n        defined(gltfMaterial.pbrMetallicRoughness.baseColorTexture)\n      ) {\n        isTextured = true;\n        gltfMaterial.pbrMetallicRoughness.baseColorTexture.index = 0;\n\n        // Choose the JPG for the texture\n        let textureName = \"0\";\n\n        if (defined(this._layer._data.textureSetDefinitions)) {\n          for (\n            let defIndex = 0;\n            defIndex < this._layer._data.textureSetDefinitions.length;\n            defIndex++\n          ) {\n            const textureSetDefinition =\n              this._layer._data.textureSetDefinitions[defIndex];\n            for (\n              let formatIndex = 0;\n              formatIndex < textureSetDefinition.formats.length;\n              formatIndex++\n            ) {\n              const textureFormat = textureSetDefinition.formats[formatIndex];\n              if (textureFormat.format === \"jpg\") {\n                textureName = textureFormat.name;\n                break;\n              }\n            }\n          }\n        }\n\n        if (\n          defined(this._parent._data.mesh) &&\n          this._parent._data.mesh.material.resource >= 0\n        ) {\n          texturePath = this._layer.resource.getDerivedResource({\n            url: `nodes/${this._parent._data.mesh.material.resource}/textures/${textureName}`,\n          }).url;\n        }\n      }\n\n      // Convert color factors from sRGB to linear color space\n      if (\n        defined(gltfMaterial.pbrMetallicRoughness) &&\n        defined(gltfMaterial.pbrMetallicRoughness.baseColorFactor)\n      ) {\n        gltfMaterial.pbrMetallicRoughness.baseColorFactor = convertColorFactor(\n          gltfMaterial.pbrMetallicRoughness.baseColorFactor,\n        );\n      }\n      if (defined(gltfMaterial.emissiveFactor)) {\n        gltfMaterial.emissiveFactor = convertColorFactor(\n          gltfMaterial.emissiveFactor,\n        );\n      }\n    }\n  } else if (defined(this._parent._data.textureData)) {\n    // No material definition, but if there's a texture reference, we can create a simple material using it (version 1.6 support)\n    isTextured = true;\n    texturePath = this._parent.resource.getDerivedResource({\n      url: `${this._parent._data.textureData[0].href}`,\n    }).url;\n    gltfMaterial.pbrMetallicRoughness.baseColorTexture = { index: 0 };\n  }\n  if (defined(gltfMaterial.alphaMode)) {\n    // I3S specifies alphaMode values in lowercase, but glTF expects values in uppercase\n    gltfMaterial.alphaMode = gltfMaterial.alphaMode.toUpperCase();\n  }\n\n  let gltfTextures = [];\n  let gltfImages = [];\n  let gltfSamplers = [];\n\n  if (isTextured) {\n    gltfTextures = [\n      {\n        sampler: 0,\n        source: 0,\n      },\n    ];\n\n    gltfImages = [\n      {\n        uri: texturePath,\n      },\n    ];\n\n    gltfSamplers = [\n      {\n        magFilter: 9729,\n        minFilter: 9986,\n        wrapS: 10497,\n        wrapT: 10497,\n      },\n    ];\n  }\n\n  const gltfMaterials = [];\n  const meshesLength = meshes.length;\n  for (let meshIndex = 0; meshIndex < meshesLength; meshIndex++) {\n    const primitives = meshes[meshIndex].primitives;\n    const primitivesLength = primitives.length;\n    for (\n      let primitiveIndex = 0;\n      primitiveIndex < primitivesLength;\n      primitiveIndex++\n    ) {\n      const primitive = primitives[primitiveIndex];\n      if (defined(primitive.material)) {\n        // Create as many copies of the material as specified in the mesh primitives\n        while (primitive.material >= gltfMaterials.length) {\n          const material = clone(gltfMaterial, true);\n          gltfMaterials.push(material);\n        }\n        const primitiveMaterial = gltfMaterials[primitive.material];\n        if (defined(primitive.extra) && primitive.extra.isTransparent) {\n          // If the alpha mode is not specified in the original material but the geometry is transparent, we need to force set BLEND alpha mode. Otherwise the geometry will be rendered opaque.\n          if (!defined(primitiveMaterial.alphaMode)) {\n            primitiveMaterial.alphaMode = \"BLEND\";\n          }\n        } else if (primitiveMaterial.alphaMode === \"BLEND\") {\n          // If the geometry is not transparent, but the alpha mode is set to BLEND in the original material, we need to force set OPAQUE alpha mode. Otherwise the geometry will be rendered transparent.\n          primitiveMaterial.alphaMode = \"OPAQUE\";\n        }\n      }\n    }\n  }\n  const gltfData = {\n    scene: 0,\n    scenes: [\n      {\n        nodes: nodesInScene,\n      },\n    ],\n    nodes: nodes,\n    meshes: meshes,\n    buffers: buffers,\n    bufferViews: bufferViews,\n    accessors: accessors,\n    materials: gltfMaterials,\n    textures: gltfTextures,\n    images: gltfImages,\n    samplers: gltfSamplers,\n    asset: {\n      version: \"2.0\",\n    },\n    extensions: extensions,\n    extensionsUsed: extensionsUsed,\n  };\n\n  return gltfData;\n};\n\nexport default I3SGeometry;\n","import Cartesian4 from \"../Core/Cartesian4.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Cesium3DTileset from \"./Cesium3DTileset.js\";\nimport I3SNode from \"./I3SNode.js\";\nimport I3SSymbology from \"./I3SSymbology.js\";\n\n/**\n * This class implements an I3S layer. In CesiumJS each I3SLayer creates a Cesium3DTileset.\n * <p>\n * Do not construct this directly, instead access layers through {@link I3SDataProvider}.\n * </p>\n * @alias I3SLayer\n * @internalConstructor\n * @privateParam {I3SDataProvider} dataProvider The i3s data provider\n * @privateParam {object} layerData The layer data that is loaded from the scene layer\n * @privateParam {I3SDataProvider|I3SSublayer} parent The parent of that layer\n */\nfunction I3SLayer(dataProvider, layerData, parent) {\n  this._dataProvider = dataProvider;\n  this._parent = parent;\n\n  if (!defined(layerData.href) && defined(layerData.id)) {\n    // assign a default layer\n    layerData.href = `layers/${layerData.id}`;\n  }\n\n  const parentUrl = this._parent.resource.getUrlComponent();\n\n  let tilesetUrl = \"\";\n  if (parentUrl.match(/layers\\/\\d/)) {\n    tilesetUrl = `${parentUrl}`.replace(/\\/+$/, \"\");\n  } else {\n    // Add '/' to url if needed + `${layerData.href}` if tilesetUrl not already in ../layers/[id] format\n    tilesetUrl = `${parentUrl}`\n      .replace(/\\/?$/, \"/\")\n      .concat(`${layerData.href}`);\n  }\n\n  this._version = layerData.store.version;\n  const splitVersion = this._version.split(\".\");\n  this._majorVersion = parseInt(splitVersion[0]);\n  this._minorVersion = splitVersion.length > 1 ? parseInt(splitVersion[1]) : 0;\n\n  this._resource = new Resource({ url: tilesetUrl });\n  this._resource.setQueryParameters(\n    this._dataProvider.resource.queryParameters,\n  );\n  this._resource.appendForwardSlash();\n  this._data = layerData;\n  this._rootNode = undefined;\n  this._nodePages = {};\n  this._nodePageFetches = {};\n  this._extent = undefined;\n  this._tileset = undefined;\n  this._geometryDefinitions = undefined;\n  this._filters = [];\n  this._symbology = undefined;\n\n  this._computeGeometryDefinitions(true);\n  this._computeExtent();\n}\n\nObject.defineProperties(I3SLayer.prototype, {\n  /**\n   * Gets the resource for the layer.\n   * @memberof I3SLayer.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n\n  /**\n   * Gets the root node of this layer.\n   * @memberof I3SLayer.prototype\n   * @type {I3SNode}\n   * @readonly\n   */\n  rootNode: {\n    get: function () {\n      return this._rootNode;\n    },\n  },\n  /**\n   * Gets the Cesium3DTileset for this layer.\n   * @memberof I3SLayer.prototype\n   * @type {Cesium3DTileset|undefined}\n   * @readonly\n   */\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n  /**\n   * Gets the I3S data for this object.\n   * @memberof I3SLayer.prototype\n   * @type {object}\n   * @readonly\n   */\n  data: {\n    get: function () {\n      return this._data;\n    },\n  },\n\n  /**\n   * The version string of the loaded I3S dataset\n   * @memberof I3SLayer.prototype\n   * @type {string}\n   * @readonly\n   */\n  version: {\n    get: function () {\n      return this._version;\n    },\n  },\n\n  /**\n   * The major version number of the loaded I3S dataset\n   * @memberof I3SLayer.prototype\n   * @type {number}\n   * @readonly\n   */\n  majorVersion: {\n    get: function () {\n      return this._majorVersion;\n    },\n  },\n\n  /**\n   * The minor version number of the loaded I3S dataset\n   * @memberof I3SLayer.prototype\n   * @type {number}\n   * @readonly\n   */\n  minorVersion: {\n    get: function () {\n      return this._minorVersion;\n    },\n  },\n\n  /**\n   * When <code>true</code>, when the loaded I3S version is 1.6 or older\n   * @memberof I3SLayer.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  legacyVersion16: {\n    get: function () {\n      if (!defined(this.version)) {\n        return undefined;\n      }\n      if (\n        this.majorVersion < 1 ||\n        (this.majorVersion === 1 && this.minorVersion <= 6)\n      ) {\n        return true;\n      }\n      return false;\n    },\n  },\n});\n\n/**\n * Loads the content, including the root node definition and its children\n * @param {Cesium3DTileset.ConstructorOptions} [cesium3dTilesetOptions] options for Cesium3dTileset constructor\n * @returns {Promise<void>} A promise that is resolved when the layer data is loaded\n * @private\n */\nI3SLayer.prototype.load = async function (cesium3dTilesetOptions) {\n  if (this._data.spatialReference.wkid !== 4326) {\n    throw new RuntimeError(\n      `Unsupported spatial reference: ${this._data.spatialReference.wkid}`,\n    );\n  }\n\n  if (this._dataProvider.applySymbology) {\n    this._symbology = new I3SSymbology(this);\n  }\n  await this._dataProvider.loadGeoidData();\n  await this._loadRootNode(cesium3dTilesetOptions);\n  await this._create3DTileset(cesium3dTilesetOptions);\n\n  this._rootNode._tile = this._tileset._root;\n  this._tileset._root._i3sNode = this._rootNode;\n  if (this.legacyVersion16) {\n    return this._rootNode._loadChildren();\n  }\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._computeGeometryDefinitions = function (useCompression) {\n  // create a table of all geometry buffers based on\n  // the number of attributes and whether they are\n  // compressed or not, sort them by priority\n\n  this._geometryDefinitions = [];\n\n  if (defined(this._data.geometryDefinitions)) {\n    for (\n      let defIndex = 0;\n      defIndex < this._data.geometryDefinitions.length;\n      defIndex++\n    ) {\n      const geometryBuffersInfo = [];\n      const geometryBuffers =\n        this._data.geometryDefinitions[defIndex].geometryBuffers;\n\n      for (let bufIndex = 0; bufIndex < geometryBuffers.length; bufIndex++) {\n        const geometryBuffer = geometryBuffers[bufIndex];\n        const collectedAttributes = [];\n        let compressed = false;\n\n        if (defined(geometryBuffer.compressedAttributes) && useCompression) {\n          // check if compressed\n          compressed = true;\n          const attributes = geometryBuffer.compressedAttributes.attributes;\n          for (let i = 0; i < attributes.length; i++) {\n            collectedAttributes.push(attributes[i]);\n          }\n        } else {\n          // uncompressed attributes\n          for (const attribute in geometryBuffer) {\n            if (attribute !== \"offset\") {\n              collectedAttributes.push(attribute);\n            }\n          }\n        }\n\n        geometryBuffersInfo.push({\n          compressed: compressed,\n          attributes: collectedAttributes,\n          index: geometryBuffers.indexOf(geometryBuffer),\n        });\n      }\n\n      // rank the buffer info\n      geometryBuffersInfo.sort(function (a, b) {\n        if (a.compressed && !b.compressed) {\n          return -1;\n        } else if (!a.compressed && b.compressed) {\n          return 1;\n        }\n        return a.attributes.length - b.attributes.length;\n      });\n      this._geometryDefinitions.push(geometryBuffersInfo);\n    }\n  }\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._findBestGeometryBuffers = function (\n  definition,\n  attributes,\n) {\n  // find the most appropriate geometry definition\n  // based on the required attributes, and by favouring\n  // compression to improve bandwidth requirements\n\n  const geometryDefinition = this._geometryDefinitions[definition];\n\n  if (defined(geometryDefinition)) {\n    for (let index = 0; index < geometryDefinition.length; ++index) {\n      const geometryBufferInfo = geometryDefinition[index];\n      let missed = false;\n      const geometryAttributes = geometryBufferInfo.attributes;\n      for (let attrIndex = 0; attrIndex < attributes.length; attrIndex++) {\n        if (!geometryAttributes.includes(attributes[attrIndex])) {\n          missed = true;\n          break;\n        }\n      }\n      if (!missed) {\n        return {\n          bufferIndex: geometryBufferInfo.index,\n          definition: geometryDefinition,\n          geometryBufferInfo: geometryBufferInfo,\n        };\n      }\n    }\n    // If no match found return first geometryBuffer\n    if (defined(geometryDefinition[0])) {\n      return {\n        bufferIndex: 0,\n        definition: geometryDefinition,\n        geometryBufferInfo: geometryDefinition[0],\n      };\n    }\n  }\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._loadRootNode = function (cesium3dTilesetOptions) {\n  if (defined(this._data.nodePages)) {\n    let rootIndex = 0;\n    if (defined(this._data.nodePages.rootIndex)) {\n      rootIndex = this._data.nodePages.rootIndex;\n    }\n    this._rootNode = new I3SNode(this, rootIndex, true);\n  } else {\n    this._rootNode = new I3SNode(this, this._data.store.rootNode, true);\n  }\n\n  return this._rootNode.load(cesium3dTilesetOptions);\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._getNodeInNodePages = function (nodeIndex) {\n  const index = Math.floor(nodeIndex / this._data.nodePages.nodesPerPage);\n  const offsetInPage = nodeIndex % this._data.nodePages.nodesPerPage;\n  return this._loadNodePage(index).then(function (data) {\n    return data.nodes[offsetInPage];\n  });\n};\n\n/**\n * @private\n */\nI3SLayer._fetchJson = function (resource) {\n  return resource.fetchJson();\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._loadNodePage = function (page) {\n  const that = this;\n\n  // If node page was already requested return the same promise\n  if (!defined(this._nodePageFetches[page])) {\n    const nodePageResource = this.resource.getDerivedResource({\n      url: `nodepages/${page}/`,\n    });\n    const fetchPromise = I3SLayer._fetchJson(nodePageResource).then(\n      function (data) {\n        if (defined(data.error) && data.error.code !== 200) {\n          return Promise.reject(data.error);\n        }\n\n        that._nodePages[page] = data.nodes;\n        return data;\n      },\n    );\n\n    this._nodePageFetches[page] = fetchPromise;\n  }\n\n  return this._nodePageFetches[page];\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._computeExtent = function () {\n  if (defined(this._data.fullExtent)) {\n    this._extent = Rectangle.fromDegrees(\n      this._data.fullExtent.xmin,\n      this._data.fullExtent.ymin,\n      this._data.fullExtent.xmax,\n      this._data.fullExtent.ymax,\n    );\n  } else if (defined(this._data.store.extent)) {\n    this._extent = Rectangle.fromDegrees(\n      this._data.store.extent[0],\n      this._data.store.extent[1],\n      this._data.store.extent[2],\n      this._data.store.extent[3],\n    );\n  }\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._create3DTileset = async function (cesium3dTilesetOptions) {\n  const inPlaceTileset = {\n    asset: {\n      version: \"1.0\",\n    },\n    geometricError: Number.MAX_VALUE,\n    root: this._rootNode._create3DTileDefinition(),\n  };\n\n  const tilesetBlob = new Blob([JSON.stringify(inPlaceTileset)], {\n    type: \"application/json\",\n  });\n\n  const tilesetUrl = URL.createObjectURL(tilesetBlob);\n  const outlineColor = this._symbology?.defaultSymbology?.edges?.color;\n  if (defined(outlineColor) && !defined(cesium3dTilesetOptions?.outlineColor)) {\n    cesium3dTilesetOptions = defined(cesium3dTilesetOptions)\n      ? clone(cesium3dTilesetOptions)\n      : {};\n    cesium3dTilesetOptions.outlineColor = Color.fromCartesian4(\n      Cartesian4.fromArray(outlineColor),\n    );\n  }\n  this._tileset = await Cesium3DTileset.fromUrl(\n    tilesetUrl,\n    cesium3dTilesetOptions,\n  );\n  this._tileset.show = this._parent.show;\n  this._tileset._isI3STileSet = true;\n  this._tileset.tileUnload.addEventListener(function (tile) {\n    tile._i3sNode._clearGeometryData();\n    URL.revokeObjectURL(tile._contentResource._url);\n    tile._contentResource = tile._i3sNode.resource;\n  });\n\n  this._tileset.tileVisible.addEventListener(function (tile) {\n    if (defined(tile._i3sNode)) {\n      tile._i3sNode._loadChildren();\n    }\n  });\n};\n\n/**\n * @private\n */\nI3SLayer.prototype._updateVisibility = function () {\n  if (defined(this._tileset)) {\n    this._tileset.show = this._parent.show;\n  }\n};\n\n/**\n * Filters the drawn elements of a layer to specific attribute names and values\n * @param {I3SNode.AttributeFilter[]} [filters=[]] The collection of attribute filters\n * @returns {Promise<void>} A promise that is resolved when the filter is applied\n */\nI3SLayer.prototype.filterByAttributes = function (filters) {\n  // Filters are applied for each node in the layer when the node model is loaded\n  this._filters = defined(filters) ? clone(filters, true) : [];\n\n  // Forced filtering is required for loaded nodes only\n  const rootNode = this._rootNode;\n  if (defined(rootNode)) {\n    return rootNode._filterFeatures();\n  }\n  return Promise.resolve();\n};\n\nexport default I3SLayer;\n","import Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport HeadingPitchRoll from \"../Core/HeadingPitchRoll.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Cesium3DTile from \"./Cesium3DTile.js\";\nimport I3SDataProvider from \"./I3SDataProvider.js\";\nimport I3SDecoder from \"./I3SDecoder.js\";\nimport I3SFeature from \"./I3SFeature.js\";\nimport I3SField from \"./I3SField.js\";\nimport I3SGeometry from \"./I3SGeometry.js\";\n\n/**\n * @typedef {object} I3SNode.AttributeFilter\n *\n * A filter given by an attribute name and values.\n * The 3D feature object should be hidden if its value for the attribute name is not specified in the collection of values.\n *\n * @property {string} name The name of the attribute\n * @property {string[]|number[]} values The collection of values\n */\n\n/**\n * This class implements an I3S Node. In CesiumJS each I3SNode creates a Cesium3DTile.\n * <p>\n * Do not construct this directly, instead access tiles through {@link I3SLayer}.\n * </p>\n * @alias I3SNode\n * @internalConstructor\n */\nfunction I3SNode(parent, ref, isRoot) {\n  let level;\n  let layer;\n  let nodeIndex;\n  let resource;\n\n  if (isRoot) {\n    level = 0;\n    layer = parent;\n  } else {\n    level = parent._level + 1;\n    layer = parent._layer;\n  }\n\n  if (typeof ref === \"number\") {\n    nodeIndex = ref;\n  } else {\n    resource = parent.resource.getDerivedResource({\n      url: `${ref}/`,\n    });\n  }\n\n  this._parent = parent;\n  this._dataProvider = parent._dataProvider;\n  this._isRoot = isRoot;\n  this._level = level;\n  this._layer = layer;\n  this._nodeIndex = nodeIndex;\n  this._resource = resource;\n  this._isLoading = false;\n\n  this._tile = undefined;\n  this._data = undefined;\n  this._geometryData = [];\n  this._featureData = [];\n  this._fields = {};\n  this._children = [];\n  this._childrenReadyPromise = undefined;\n  this._globalTransform = undefined;\n  this._inverseGlobalTransform = undefined;\n  this._inverseRotationMatrix = undefined;\n  this._symbologyData = undefined;\n}\n\nObject.defineProperties(I3SNode.prototype, {\n  /**\n   * Gets the resource for the node.\n   * @memberof I3SNode.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n  /**\n   * Gets the parent layer.\n   * @memberof I3SNode.prototype\n   * @type {I3SLayer}\n   * @readonly\n   */\n  layer: {\n    get: function () {\n      return this._layer;\n    },\n  },\n  /**\n   * Gets the parent node.\n   * @memberof I3SNode.prototype\n   * @type {I3SNode|undefined}\n   * @readonly\n   */\n  parent: {\n    get: function () {\n      return this._parent;\n    },\n  },\n  /**\n   * Gets the children nodes.\n   * @memberof I3SNode.prototype\n   * @type {I3SNode[]}\n   * @readonly\n   */\n  children: {\n    get: function () {\n      return this._children;\n    },\n  },\n  /**\n   * Gets the collection of geometries.\n   * @memberof I3SNode.prototype\n   * @type {I3SGeometry[]}\n   * @readonly\n   */\n  geometryData: {\n    get: function () {\n      return this._geometryData;\n    },\n  },\n  /**\n   * Gets the collection of features.\n   * @memberof I3SNode.prototype\n   * @type {I3SFeature[]}\n   * @readonly\n   */\n  featureData: {\n    get: function () {\n      return this._featureData;\n    },\n  },\n  /**\n   * Gets the collection of fields.\n   * @memberof I3SNode.prototype\n   * @type {I3SField[]}\n   * @readonly\n   */\n  fields: {\n    get: function () {\n      return this._fields;\n    },\n  },\n  /**\n   * Gets the Cesium3DTile for this node.\n   * @memberof I3SNode.prototype\n   * @type {Cesium3DTile}\n   * @readonly\n   */\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n  /**\n   * Gets the I3S data for this object.\n   * @memberof I3SNode.prototype\n   * @type {object}\n   * @readonly\n   */\n  data: {\n    get: function () {\n      return this._data;\n    },\n  },\n});\n\n/**\n * @private\n */\nI3SNode.prototype.load = async function () {\n  const that = this;\n\n  function processData() {\n    if (!that._isRoot) {\n      // Create a new tile\n      const tileDefinition = that._create3DTileDefinition();\n\n      that._tile = new Cesium3DTile(\n        that._layer._tileset,\n        that._dataProvider.resource,\n        tileDefinition,\n        that._parent._tile,\n      );\n\n      that._tile._i3sNode = that;\n    }\n  }\n\n  // If we don't have a nodepage index load from json\n  if (!defined(this._nodeIndex)) {\n    const data = await I3SDataProvider.loadJson(this._resource);\n    that._data = data;\n    processData();\n    return;\n  }\n\n  const node = await this._layer._getNodeInNodePages(this._nodeIndex);\n  that._data = node;\n  let uri;\n  if (that._isRoot) {\n    uri = \"nodes/root/\";\n  } else if (defined(node.mesh)) {\n    const uriIndex = node.mesh.geometry.resource;\n    uri = `../${uriIndex}/`;\n  }\n  if (defined(uri) && defined(that._parent.resource)) {\n    that._resource = that._parent.resource.getDerivedResource({ url: uri });\n  }\n\n  processData();\n};\n\nfunction createAndLoadField(node, storageInfo) {\n  const newField = new I3SField(node, storageInfo);\n  node._fields[storageInfo.name] = newField;\n  return newField.load();\n}\n\n/**\n * Loads the node fields.\n * @returns {Promise<void>} A promise that is resolved when the I3S Node fields are loaded\n */\nI3SNode.prototype.loadFields = function () {\n  // Check if we must load fields\n  const fields = this._layer._data.attributeStorageInfo;\n\n  const promises = [];\n  if (defined(fields)) {\n    for (let i = 0; i < fields.length; i++) {\n      const storageInfo = fields[i];\n      const field = this._fields[storageInfo.name];\n      if (defined(field)) {\n        promises.push(field.load());\n      } else {\n        promises.push(createAndLoadField(this, storageInfo));\n      }\n    }\n  }\n\n  return Promise.all(promises);\n};\n\n/**\n * Loads the node field.\n * @param {string} name The field name\n * @returns {Promise<void>} A promise that is resolved when the I3S Node field is loaded\n */\nI3SNode.prototype.loadField = function (name) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"name\", name);\n  //>>includeEnd('debug');\n\n  const field = this._fields[name];\n  if (defined(field)) {\n    return field.load();\n  }\n\n  const fields = this._layer._data.attributeStorageInfo;\n  if (defined(fields)) {\n    for (let i = 0; i < fields.length; i++) {\n      const storageInfo = fields[i];\n      if (storageInfo.name === name) {\n        return createAndLoadField(this, storageInfo);\n      }\n    }\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Returns the fields for a given picked position\n * @param {Cartesian3} pickedPosition The picked position\n * @returns {object} Object containing field names and their values\n */\nI3SNode.prototype.getFieldsForPickedPosition = function (pickedPosition) {\n  const geometry = this.geometryData[0];\n  if (!defined(geometry.customAttributes.featureIndex)) {\n    return {};\n  }\n\n  const location = geometry.getClosestPointIndexOnTriangle(\n    pickedPosition.x,\n    pickedPosition.y,\n    pickedPosition.z,\n  );\n\n  if (\n    location.index === -1 ||\n    location.index > geometry.customAttributes.featureIndex.length\n  ) {\n    return {};\n  }\n\n  const featureIndex = geometry.customAttributes.featureIndex[location.index];\n  return this.getFieldsForFeature(featureIndex);\n};\n\n/**\n * Returns the fields for a given feature\n * @param {number} featureIndex Index of the feature whose attributes we want to get\n * @returns {object} Object containing field names and their values\n */\nI3SNode.prototype.getFieldsForFeature = function (featureIndex) {\n  const featureFields = {};\n  for (const fieldName in this.fields) {\n    if (this.fields.hasOwnProperty(fieldName)) {\n      const field = this.fields[fieldName];\n      if (featureIndex >= 0 && featureIndex < field.values.length) {\n        featureFields[field.name] = field.values[featureIndex];\n      }\n    }\n  }\n  return featureFields;\n};\n\n/**\n * @private\n */\nI3SNode.prototype._loadChildren = function () {\n  const that = this;\n  // If the promise for loading the children was already created, just return it\n  if (defined(this._childrenReadyPromise)) {\n    return this._childrenReadyPromise;\n  }\n\n  const childPromises = [];\n  if (defined(that._data.children)) {\n    for (\n      let childIndex = 0;\n      childIndex < that._data.children.length;\n      childIndex++\n    ) {\n      const child = that._data.children[childIndex];\n      const newChild = new I3SNode(that, child.href ?? child, false);\n      that._children.push(newChild);\n      childPromises.push(newChild.load());\n    }\n  }\n\n  this._childrenReadyPromise = Promise.all(childPromises).then(function () {\n    for (let i = 0; i < that._children.length; i++) {\n      that._tile.children.push(that._children[i]._tile);\n    }\n  });\n\n  return this._childrenReadyPromise;\n};\n\n/**\n * @private\n */\nI3SNode.prototype._loadGeometryData = function () {\n  const geometryPromises = [];\n\n  // To debug decoding for a specific tile, add a condition\n  // that wraps this if/else to match the tile uri\n  if (defined(this._data.geometryData)) {\n    for (\n      let geomIndex = 0;\n      geomIndex < this._data.geometryData.length;\n      geomIndex++\n    ) {\n      const curGeometryData = new I3SGeometry(\n        this,\n        this._data.geometryData[geomIndex].href,\n      );\n      this._geometryData.push(curGeometryData);\n      geometryPromises.push(curGeometryData.load());\n    }\n  } else if (defined(this._data.mesh)) {\n    const geometryDefinition = this._layer._findBestGeometryBuffers(\n      this._data.mesh.geometry.definition,\n      [\"position\", \"uv0\"],\n    );\n\n    const geometryURI = `./geometries/${geometryDefinition.bufferIndex}/`;\n    const newGeometryData = new I3SGeometry(this, geometryURI);\n    newGeometryData._geometryDefinitions = geometryDefinition.definition;\n    newGeometryData._geometryBufferInfo = geometryDefinition.geometryBufferInfo;\n    this._geometryData.push(newGeometryData);\n    geometryPromises.push(newGeometryData.load());\n  }\n\n  return Promise.all(geometryPromises);\n};\n\n/**\n * @private\n */\nI3SNode.prototype._loadFeatureData = function () {\n  const featurePromises = [];\n\n  // To debug decoding for a specific tile, add a condition\n  // that wraps this if/else to match the tile uri\n  if (defined(this._data.featureData)) {\n    for (\n      let featureIndex = 0;\n      featureIndex < this._data.featureData.length;\n      featureIndex++\n    ) {\n      const newFeatureData = new I3SFeature(\n        this,\n        this._data.featureData[featureIndex].href,\n      );\n      this._featureData.push(newFeatureData);\n      featurePromises.push(newFeatureData.load());\n    }\n  }\n\n  return Promise.all(featurePromises);\n};\n\n/**\n * @private\n */\nI3SNode.prototype._clearGeometryData = function () {\n  this._geometryData = [];\n};\n\n/**\n * @private\n */\nI3SNode.prototype._create3DTileDefinition = function () {\n  const obb = this._data.obb;\n  const mbs = this._data.mbs;\n\n  if (!defined(obb) && !defined(mbs)) {\n    console.error(\"Failed to load I3S node. Bounding volume is required.\");\n    return undefined;\n  }\n\n  let geoPosition;\n\n  if (defined(obb)) {\n    geoPosition = Cartographic.fromDegrees(\n      obb.center[0],\n      obb.center[1],\n      obb.center[2],\n    );\n  } else {\n    geoPosition = Cartographic.fromDegrees(mbs[0], mbs[1], mbs[2]);\n  }\n\n  // Offset bounding box position if we have a geoid service defined\n  if (defined(this._dataProvider._geoidDataList) && defined(geoPosition)) {\n    for (let i = 0; i < this._dataProvider._geoidDataList.length; i++) {\n      const tile = this._dataProvider._geoidDataList[i];\n      const projectedPos = tile.projection.project(geoPosition);\n      if (\n        projectedPos.x > tile.nativeExtent.west &&\n        projectedPos.x < tile.nativeExtent.east &&\n        projectedPos.y > tile.nativeExtent.south &&\n        projectedPos.y < tile.nativeExtent.north\n      ) {\n        geoPosition.height += sampleGeoid(projectedPos.x, projectedPos.y, tile);\n        break;\n      }\n    }\n  }\n\n  let boundingVolume = {};\n  let position;\n  let span = 0;\n  if (defined(obb)) {\n    boundingVolume = {\n      box: [\n        0,\n        0,\n        0,\n        obb.halfSize[0],\n        0,\n        0,\n        0,\n        obb.halfSize[1],\n        0,\n        0,\n        0,\n        obb.halfSize[2],\n      ],\n    };\n    span = Math.max(\n      Math.max(this._data.obb.halfSize[0], this._data.obb.halfSize[1]),\n      this._data.obb.halfSize[2],\n    );\n    position = Ellipsoid.WGS84.cartographicToCartesian(geoPosition);\n  } else {\n    boundingVolume = {\n      sphere: [0, 0, 0, mbs[3]],\n    };\n    position = Ellipsoid.WGS84.cartographicToCartesian(geoPosition);\n    span = this._data.mbs[3];\n  }\n  span *= 2;\n  // Compute the geometric error\n  let metersPerPixel = Infinity;\n\n  // Get the meters/pixel density required to pop the next LOD\n  if (defined(this._data.lodThreshold)) {\n    if (\n      this._layer._data.nodePages.lodSelectionMetricType ===\n      \"maxScreenThresholdSQ\"\n    ) {\n      const maxScreenThreshold = Math.sqrt(\n        this._data.lodThreshold / (Math.PI * 0.25),\n      );\n      metersPerPixel = span / maxScreenThreshold;\n    } else if (\n      this._layer._data.nodePages.lodSelectionMetricType ===\n      \"maxScreenThreshold\"\n    ) {\n      const maxScreenThreshold = this._data.lodThreshold;\n      metersPerPixel = span / maxScreenThreshold;\n    } else {\n      // Other LOD selection types can only be used for point cloud data\n      console.error(\"Invalid lodSelectionMetricType in Layer\");\n    }\n  } else if (defined(this._data.lodSelection)) {\n    for (\n      let lodIndex = 0;\n      lodIndex < this._data.lodSelection.length;\n      lodIndex++\n    ) {\n      if (\n        this._data.lodSelection[lodIndex].metricType === \"maxScreenThreshold\"\n      ) {\n        metersPerPixel = span / this._data.lodSelection[lodIndex].maxError;\n      }\n    }\n  }\n\n  if (metersPerPixel === Infinity) {\n    metersPerPixel = 100000;\n  }\n\n  // Calculate the length of 16 pixels in order to trigger the screen space error\n  const geometricError = metersPerPixel * 16;\n\n  // Transformations\n  const hpr = new HeadingPitchRoll(0, 0, 0);\n  let orientation = Transforms.headingPitchRollQuaternion(position, hpr);\n\n  if (defined(this._data.obb)) {\n    orientation = new Quaternion(\n      this._data.obb.quaternion[0],\n      this._data.obb.quaternion[1],\n      this._data.obb.quaternion[2],\n      this._data.obb.quaternion[3],\n    );\n  }\n\n  const rotationMatrix = Matrix3.fromQuaternion(orientation);\n  const inverseRotationMatrix = Matrix3.inverse(rotationMatrix, new Matrix3());\n\n  const globalTransform = new Matrix4(\n    rotationMatrix[0],\n    rotationMatrix[1],\n    rotationMatrix[2],\n    0,\n    rotationMatrix[3],\n    rotationMatrix[4],\n    rotationMatrix[5],\n    0,\n    rotationMatrix[6],\n    rotationMatrix[7],\n    rotationMatrix[8],\n    0,\n    position.x,\n    position.y,\n    position.z,\n    1,\n  );\n\n  const inverseGlobalTransform = Matrix4.inverse(\n    globalTransform,\n    new Matrix4(),\n  );\n\n  const localTransform = Matrix4.clone(globalTransform);\n\n  if (defined(this._parent._globalTransform)) {\n    Matrix4.multiply(\n      globalTransform,\n      this._parent._inverseGlobalTransform,\n      localTransform,\n    );\n  }\n\n  this._globalTransform = globalTransform;\n  this._inverseGlobalTransform = inverseGlobalTransform;\n  this._inverseRotationMatrix = inverseRotationMatrix;\n\n  // get children definition\n  const childrenDefinition = [];\n  for (let childIndex = 0; childIndex < this._children.length; childIndex++) {\n    childrenDefinition.push(\n      this._children[childIndex]._create3DTileDefinition(),\n    );\n  }\n\n  // Create a tile set\n  const inPlaceTileDefinition = {\n    children: childrenDefinition,\n    refine: \"REPLACE\",\n    boundingVolume: boundingVolume,\n    transform: [\n      localTransform[0],\n      localTransform[4],\n      localTransform[8],\n      localTransform[12],\n      localTransform[1],\n      localTransform[5],\n      localTransform[9],\n      localTransform[13],\n      localTransform[2],\n      localTransform[6],\n      localTransform[10],\n      localTransform[14],\n      localTransform[3],\n      localTransform[7],\n      localTransform[11],\n      localTransform[15],\n    ],\n    content: {\n      uri: defined(this._resource) ? this._resource.url : undefined,\n    },\n    geometricError: geometricError,\n  };\n\n  return inPlaceTileDefinition;\n};\n\n/**\n * @private\n */\nI3SNode.prototype._loadSymbology = async function () {\n  if (!defined(this._symbologyData) && defined(this._layer._symbology)) {\n    this._symbologyData = await this._layer._symbology._getSymbology(this);\n  }\n};\n\n/**\n * @private\n */\nI3SNode.prototype._createContentURL = async function () {\n  let rawGltf = {\n    scene: 0,\n    scenes: [\n      {\n        nodes: [0],\n      },\n    ],\n    nodes: [\n      {\n        name: \"singleNode\",\n      },\n    ],\n    meshes: [],\n    buffers: [],\n    bufferViews: [],\n    accessors: [],\n    materials: [],\n    textures: [],\n    images: [],\n    samplers: [],\n    asset: {\n      version: \"2.0\",\n    },\n  };\n\n  // Load the geometry data\n  const dataPromises = [this._loadGeometryData()];\n  if (this._dataProvider.legacyVersion16) {\n    dataPromises.push(this._loadFeatureData());\n  }\n\n  await Promise.all(dataPromises);\n  // Binary glTF\n  if (defined(this._geometryData) && this._geometryData.length > 0) {\n    if (this._dataProvider._applySymbology) {\n      await this._loadSymbology();\n    }\n\n    const url = this._geometryData[0].resource.url;\n    const geometrySchema = this._layer._data.store.defaultGeometrySchema;\n    const geometryData = this._geometryData[0];\n    const result = await I3SDecoder.decode(\n      url,\n      geometrySchema,\n      geometryData,\n      this._featureData[0],\n      this._symbologyData,\n    );\n    if (!defined(result)) {\n      // Postponed\n      return;\n    }\n\n    rawGltf = geometryData._generateGltf(\n      result.meshData.nodesInScene,\n      result.meshData.nodes,\n      result.meshData.meshes,\n      result.meshData.buffers,\n      result.meshData.bufferViews,\n      result.meshData.accessors,\n      result.meshData.rootExtensions,\n      result.meshData.extensionsUsed,\n    );\n\n    this._geometryData[0]._customAttributes = result.meshData._customAttributes;\n  }\n\n  const binaryGltfData = this._dataProvider._binarizeGltf(rawGltf);\n  const glbDataBlob = new Blob([binaryGltfData], {\n    type: \"application/binary\",\n  });\n  return URL.createObjectURL(glbDataBlob);\n};\n\nasync function loadFilters(node) {\n  const filters = node._layer._filters;\n  const promises = [];\n  for (let i = 0; i < filters.length; i++) {\n    const promise = node.loadField(filters[i].name);\n    promises.push(promise);\n  }\n  await Promise.all(promises);\n  return filters;\n}\n\nfunction checkFeatureValue(featureIndex, field, filter) {\n  if (!defined(filter.values) || filter.values.length === 0) {\n    return false;\n  }\n\n  const fieldValues = defined(field) ? field.values : [];\n  let featureValue;\n  if (featureIndex < fieldValues.length) {\n    featureValue = fieldValues[featureIndex];\n  }\n  let matches = false;\n  for (let i = 0; i < filter.values.length; i++) {\n    if (filter.values[i] === featureValue) {\n      matches = true;\n      break;\n    }\n  }\n  return matches;\n}\n\nasync function filterFeatures(node, contentModel) {\n  const batchTable = node._tile.content.batchTable;\n  if (defined(batchTable) && batchTable.featuresLength > 0) {\n    batchTable.setAllShow(true);\n\n    const filters = await loadFilters(node);\n    if (filters.length > 0) {\n      for (\n        let featureIndex = 0;\n        featureIndex < batchTable.featuresLength;\n        featureIndex++\n      ) {\n        for (let filterIndex = 0; filterIndex < filters.length; filterIndex++) {\n          const filter = filters[filterIndex];\n          if (\n            !checkFeatureValue(featureIndex, node._fields[filter.name], filter)\n          ) {\n            batchTable.setShow(featureIndex, false);\n            break;\n          }\n        }\n      }\n    }\n  }\n  contentModel.show = true;\n}\n\n/**\n * @private\n */\nI3SNode.prototype._filterFeatures = function () {\n  const promises = [];\n  // Forced filtering is required for loaded nodes only\n  for (let i = 0; i < this._children.length; i++) {\n    const promise = this._children[i]._filterFeatures();\n    promises.push(promise);\n  }\n\n  // Filters are applied for nodes with geometry data only\n  const contentModel = this._tile?.content?._model;\n  if (\n    defined(this._geometryData) &&\n    this._geometryData.length > 0 &&\n    defined(contentModel) &&\n    contentModel.ready\n  ) {\n    // The model needs to be hidden till the filters are applied\n    contentModel.show = false;\n    const promise = filterFeatures(this, contentModel);\n    promises.push(promise);\n  }\n  return Promise.all(promises);\n};\n\n// Reimplement Cesium3DTile.prototype.requestContent so that\n// We get a chance to load our own gltf from I3S data\nCesium3DTile.prototype._hookedRequestContent =\n  Cesium3DTile.prototype.requestContent;\n\n/**\n * Requests the tile's content.\n * <p>\n * The request may not be made if the Cesium Request Scheduler can't prioritize it.\n * </p>\n *\n * @return {Promise<Cesium3DTileContent>|undefined} A promise that resolves when the request completes, or undefined if there is no request needed, or the request cannot be scheduled.\n * @private\n */\nCesium3DTile.prototype.requestContent = function () {\n  if (!this.tileset._isI3STileSet) {\n    return this._hookedRequestContent();\n  }\n\n  if (!this._isLoading) {\n    this._isLoading = true;\n    const that = this;\n    return this._i3sNode\n      ._createContentURL()\n      .then((url) => {\n        if (!defined(url)) {\n          that._isLoading = false;\n          return;\n        }\n\n        that._contentResource = new Resource({ url: url });\n        return that._hookedRequestContent();\n      })\n      .then((content) => {\n        // Filters are applied for nodes with geometry data only\n        const contentModel = content?._model;\n        if (\n          defined(that._i3sNode._geometryData) &&\n          that._i3sNode._geometryData.length > 0 &&\n          defined(contentModel)\n        ) {\n          // The model needs to be hidden till the filters are applied\n          contentModel.show = false;\n          contentModel.readyEvent.addEventListener(() => {\n            filterFeatures(that._i3sNode, contentModel);\n          });\n        }\n        that._isLoading = false;\n        return content;\n      });\n  }\n};\n\nfunction bilinearInterpolate(tx, ty, h00, h10, h01, h11) {\n  const a = h00 * (1 - tx) + h10 * tx;\n  const b = h01 * (1 - tx) + h11 * tx;\n  return a * (1 - ty) + b * ty;\n}\n\nfunction sampleMap(u, v, width, data) {\n  const address = u + v * width;\n  return data[address];\n}\n\nfunction sampleGeoid(sampleX, sampleY, geoidData) {\n  const extent = geoidData.nativeExtent;\n  let x =\n    ((sampleX - extent.west) / (extent.east - extent.west)) *\n    (geoidData.width - 1);\n  let y =\n    ((sampleY - extent.south) / (extent.north - extent.south)) *\n    (geoidData.height - 1);\n  const xi = Math.floor(x);\n  let yi = Math.floor(y);\n\n  x -= xi;\n  y -= yi;\n\n  const xNext = xi < geoidData.width ? xi + 1 : xi;\n  let yNext = yi < geoidData.height ? yi + 1 : yi;\n\n  yi = geoidData.height - 1 - yi;\n  yNext = geoidData.height - 1 - yNext;\n\n  const h00 = sampleMap(xi, yi, geoidData.width, geoidData.buffer);\n  const h10 = sampleMap(xNext, yi, geoidData.width, geoidData.buffer);\n  const h01 = sampleMap(xi, yNext, geoidData.width, geoidData.buffer);\n  const h11 = sampleMap(xNext, yNext, geoidData.width, geoidData.buffer);\n\n  let finalHeight = bilinearInterpolate(x, y, h00, h10, h01, h11);\n  finalHeight = finalHeight * geoidData.scale + geoidData.offset;\n  return finalHeight;\n}\n\nObject.defineProperties(Cesium3DTile.prototype, {\n  /**\n   * Gets the I3S Node for the tile.\n   * @memberof Cesium3DTile.prototype\n   * @type {string}\n   */\n  i3sNode: {\n    get: function () {\n      return this._i3sNode;\n    },\n  },\n});\n\nexport default I3SNode;\n","import defined from \"../Core/defined.js\";\nimport I3SDataProvider from \"./I3SDataProvider.js\";\nimport Resource from \"../Core/Resource.js\";\n\n/**\n * This class implements an I3S statistics for Building Scene Layer.\n * <p>\n * Do not construct this directly, instead access statistics through {@link I3SDataProvider}.\n * </p>\n * @alias I3SStatistics\n * @internalConstructor\n */\nfunction I3SStatistics(dataProvider, uri) {\n  this._dataProvider = dataProvider;\n\n  this._resource = new Resource({ url: uri });\n  this._resource.setQueryParameters(dataProvider.resource.queryParameters);\n  this._resource.appendForwardSlash();\n}\n\nObject.defineProperties(I3SStatistics.prototype, {\n  /**\n   * Gets the resource for the statistics\n   * @memberof I3SStatistics.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n\n  /**\n   * Gets the I3S data for this object.\n   * @memberof I3SStatistics.prototype\n   * @type {object}\n   * @readonly\n   */\n  data: {\n    get: function () {\n      return this._data;\n    },\n  },\n\n  /**\n   * Gets the collection of attribute names.\n   * @memberof I3SStatistics.prototype\n   * @type {string[]}\n   * @readonly\n   */\n  names: {\n    get: function () {\n      const names = [];\n      const summary = this._data.summary;\n      if (defined(summary)) {\n        for (let i = 0; i < summary.length; ++i) {\n          names.push(summary[i].fieldName);\n        }\n      }\n      return names;\n    },\n  },\n});\n\n/**\n * Loads the content.\n * @returns {Promise<object>} A promise that is resolved when the data of the I3S statistics is loaded\n * @private\n */\nI3SStatistics.prototype.load = async function () {\n  this._data = await I3SDataProvider.loadJson(this._resource);\n  return this._data;\n};\n\n/**\n * @private\n */\nI3SStatistics.prototype._getValues = function (attributeName) {\n  const summary = this._data.summary;\n  if (defined(summary)) {\n    for (let i = 0; i < summary.length; ++i) {\n      const attribute = summary[i];\n      if (attribute.fieldName === attributeName) {\n        if (defined(attribute.mostFrequentValues)) {\n          return [...attribute.mostFrequentValues];\n        }\n        return [];\n      }\n    }\n  }\n};\n\nexport default I3SStatistics;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport I3SDataProvider from \"./I3SDataProvider.js\";\nimport I3SLayer from \"./I3SLayer.js\";\nimport Resource from \"../Core/Resource.js\";\n\n/**\n * This class implements an I3S sublayer for Building Scene Layer.\n * <p>\n * This object is normally not instantiated directly, use {@link I3SSublayer.fromData}.\n * </p>\n * @alias I3SSublayer\n * @internalConstructor\n */\nfunction I3SSublayer(dataProvider, parent, sublayerData) {\n  this._dataProvider = dataProvider;\n  this._parent = parent;\n  this._data = sublayerData;\n  this._name = sublayerData.name;\n  this._modelName = sublayerData.modelName;\n  this._visibility = sublayerData.visibility ?? true;\n  this._resource = undefined;\n  this._sublayers = [];\n  this._i3sLayers = [];\n}\n\nObject.defineProperties(I3SSublayer.prototype, {\n  /**\n   * Gets the resource for the sublayer\n   * @memberof I3SSublayer.prototype\n   * @type {Resource}\n   * @readonly\n   */\n  resource: {\n    get: function () {\n      return this._resource;\n    },\n  },\n\n  /**\n   * Gets the I3S data for this object.\n   * @memberof I3SSublayer.prototype\n   * @type {object}\n   * @readonly\n   */\n  data: {\n    get: function () {\n      return this._data;\n    },\n  },\n\n  /**\n   * Gets the name for the sublayer.\n   * @memberof I3SSublayer.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * Gets the model name for the sublayer.\n   * @memberof I3SSublayer.prototype\n   * @type {string}\n   * @readonly\n   */\n  modelName: {\n    get: function () {\n      return this._modelName;\n    },\n  },\n\n  /**\n   * Gets the collection of child sublayers.\n   * @memberof I3SSublayer.prototype\n   * @type {I3SSublayer[]}\n   * @readonly\n   */\n  sublayers: {\n    get: function () {\n      return this._sublayers;\n    },\n  },\n\n  /**\n   * Gets or sets the sublayer visibility.\n   * @memberof I3SSublayer.prototype\n   * @type {boolean}\n   */\n  visibility: {\n    get: function () {\n      return this._visibility;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (this._visibility !== value) {\n        this._visibility = value;\n        for (let i = 0; i < this._i3sLayers.length; i++) {\n          this._i3sLayers[i]._updateVisibility();\n        }\n      }\n    },\n  },\n\n  /**\n   * Determines if the sublayer will be shown.\n   * @memberof I3SSublayer.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  show: {\n    get: function () {\n      return this._visibility && this._parent.show;\n    },\n  },\n});\n\n/**\n * @private\n */\nI3SSublayer._fromData = async function (\n  dataProvider,\n  buildingLayerUrl,\n  sublayerData,\n  parent,\n) {\n  const sublayer = new I3SSublayer(dataProvider, parent, sublayerData);\n  if (sublayer._data.layerType === \"group\") {\n    const sublayers = sublayer._data.sublayers;\n    if (defined(sublayers)) {\n      const promises = [];\n      for (let i = 0; i < sublayers.length; i++) {\n        const promise = I3SSublayer._fromData(\n          dataProvider,\n          buildingLayerUrl,\n          sublayers[i],\n          sublayer,\n        );\n        promises.push(promise);\n      }\n      const childSublayers = await Promise.all(promises);\n      for (let i = 0; i < childSublayers.length; i++) {\n        const childSublayer = childSublayers[i];\n        sublayer._sublayers.push(childSublayer);\n        sublayer._i3sLayers.push(...childSublayer._i3sLayers);\n      }\n    }\n  } else if (sublayer._data.layerType === \"3DObject\") {\n    const sublayerUrl = buildingLayerUrl.concat(\n      `/sublayers/${sublayer._data.id}`,\n    );\n    const resource = new Resource({ url: sublayerUrl });\n    resource.setQueryParameters(dataProvider.resource.queryParameters);\n    resource.appendForwardSlash();\n    sublayer._resource = resource;\n\n    const layerData = await I3SDataProvider.loadJson(sublayer._resource);\n    const layer = new I3SLayer(dataProvider, layerData, sublayer);\n    sublayer._i3sLayers.push(layer);\n  } else {\n    // Filter other scene layer types out\n    console.log(\n      `${sublayer._data.layerType} layer ${sublayer._data.name} is skipped as not supported.`,\n    );\n  }\n  return sublayer;\n};\n\nexport default I3SSublayer;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport srgbToLinear from \"../Core/srgbToLinear.js\";\n\n/**\n * This class implements an I3S symbology for I3S Layers.\n * <p>\n * Do not construct this directly, instead access symbology through {@link I3SLayer}.\n * </p>\n * @alias I3SSymbology\n * @internalConstructor\n */\nfunction I3SSymbology(layer) {\n  this._layer = layer;\n  this._defaultSymbology = undefined;\n  this._valueFields = [];\n  this._uniqueValueHash = undefined;\n  this._classBreaksHash = undefined;\n\n  this._parseLayerSymbology();\n}\n\nObject.defineProperties(I3SSymbology.prototype, {\n  /**\n   * Gets the default symbology data.\n   * @memberof I3SSymbology.prototype\n   * @type {object}\n   * @readonly\n   */\n  defaultSymbology: {\n    get: function () {\n      return this._defaultSymbology;\n    },\n  },\n});\n\nfunction convertColor(color, transparency) {\n  // color is represented as a three or four-element array, values range from 0 through 255.\n  // transparency value has to lie between 100 (full transparency) and 0 (full opacity).\n  const convertedColor = [];\n  for (let i = 0; i < color.length; i++) {\n    const floatColor = Color.byteToFloat(color[i]);\n    if (i < 3) {\n      convertedColor.push(srgbToLinear(floatColor));\n    } else {\n      convertedColor.push(floatColor);\n    }\n  }\n  if (convertedColor.length === 3) {\n    if (defined(transparency)) {\n      convertedColor.push(1.0 - transparency / 100.0);\n    } else {\n      convertedColor.push(1.0);\n    }\n  }\n  return convertedColor;\n}\n\nfunction parseSymbol(symbol, isColorCaptured) {\n  const symbology = {\n    edges: undefined,\n    material: undefined,\n  };\n  if (defined(symbol) && defined(symbol.symbolLayers)) {\n    for (let i = 0; i < symbol.symbolLayers.length; i++) {\n      const symbolLayer = symbol.symbolLayers[i];\n      if (symbolLayer.type === \"Fill\") {\n        const edges = symbolLayer.edges;\n        const outline = symbolLayer.outline;\n        if (defined(edges)) {\n          symbology.edges = {};\n          if (defined(edges.color)) {\n            symbology.edges.color = convertColor(\n              edges.color,\n              edges.transparency,\n            );\n          }\n        } else if (defined(outline)) {\n          symbology.edges = {};\n          if (defined(outline.color)) {\n            symbology.edges.color = convertColor(\n              outline.color,\n              outline.transparency,\n            );\n          }\n        }\n\n        if (!isColorCaptured) {\n          const material = symbolLayer.material;\n          if (defined(material)) {\n            symbology.material = {\n              colorMixMode: material.colorMixMode,\n            };\n            if (defined(material.color)) {\n              symbology.material.color = convertColor(\n                material.color,\n                material.transparency,\n              );\n            }\n          }\n        }\n        break;\n      }\n    }\n  }\n  return symbology;\n}\n\nfunction buildUniqueValueHash(renderer, isColorCaptured) {\n  if (defined(renderer.uniqueValueGroups)) {\n    const valueHash = {};\n    for (\n      let groupIndex = 0;\n      groupIndex < renderer.uniqueValueGroups.length;\n      groupIndex++\n    ) {\n      const classes = renderer.uniqueValueGroups[groupIndex].classes;\n      if (defined(classes)) {\n        for (let classIndex = 0; classIndex < classes.length; classIndex++) {\n          const classSymbology = parseSymbol(\n            classes[classIndex].symbol,\n            isColorCaptured,\n          );\n          const values = classes[classIndex].values;\n          for (let valueIndex = 0; valueIndex < values.length; valueIndex++) {\n            const fieldValues = values[valueIndex];\n            let hash = valueHash;\n            for (\n              let fieldIndex = 0;\n              fieldIndex < fieldValues.length;\n              fieldIndex++\n            ) {\n              const fieldValue = fieldValues[fieldIndex];\n              if (fieldIndex === fieldValues.length - 1) {\n                hash[fieldValue] = classSymbology;\n              } else {\n                if (!defined(hash[fieldValue])) {\n                  hash[fieldValue] = {};\n                }\n                hash = hash[fieldValue];\n              }\n            }\n          }\n        }\n      }\n    }\n    return valueHash;\n  }\n  if (defined(renderer.uniqueValueInfos)) {\n    const valueHash = {};\n    for (\n      let infoIndex = 0;\n      infoIndex < renderer.uniqueValueInfos.length;\n      infoIndex++\n    ) {\n      const info = renderer.uniqueValueInfos[infoIndex];\n      valueHash[info.value] = parseSymbol(info.symbol, isColorCaptured);\n    }\n    return valueHash;\n  }\n  return undefined;\n}\n\nfunction buildClassBreaksHash(renderer, isColorCaptured) {\n  if (defined(renderer.classBreakInfos)) {\n    const classBreakInfos = [...renderer.classBreakInfos];\n    classBreakInfos.sort(function (a, b) {\n      const aMax = a.classMaxValue ?? a.classMinValue;\n      const bMax = b.classMaxValue ?? b.classMinValue;\n      return aMax - bMax;\n    });\n    const valueHash = {\n      ranges: [],\n      symbols: [],\n    };\n\n    if (defined(renderer.minValue)) {\n      valueHash.ranges.push(renderer.minValue);\n      valueHash.symbols.push(undefined);\n    }\n    for (let infoIndex = 0; infoIndex < classBreakInfos.length; infoIndex++) {\n      const info = classBreakInfos[infoIndex];\n      if (defined(info.classMinValue)) {\n        if (\n          valueHash.ranges.length === 0 ||\n          info.classMinValue > valueHash.ranges[valueHash.ranges.length - 1]\n        ) {\n          valueHash.ranges.push(info.classMinValue);\n          valueHash.symbols.push(undefined);\n        }\n      }\n      if (defined(info.classMaxValue)) {\n        if (\n          valueHash.ranges.length === 0 ||\n          info.classMaxValue > valueHash.ranges[valueHash.ranges.length - 1]\n        ) {\n          valueHash.ranges.push(info.classMaxValue);\n          valueHash.symbols.push(parseSymbol(info.symbol, isColorCaptured));\n        }\n      }\n    }\n    valueHash.symbols.push(undefined);\n\n    return valueHash;\n  }\n  return undefined;\n}\n\n/**\n * @private\n */\nI3SSymbology.prototype._parseLayerSymbology = function () {\n  const drawingInfo = this._layer.data.drawingInfo;\n  if (defined(drawingInfo) && defined(drawingInfo.renderer)) {\n    const cachedDrawingInfo = this._layer.data.cachedDrawingInfo;\n    const isColorCaptured =\n      defined(cachedDrawingInfo) && cachedDrawingInfo.color === true;\n    const renderer = drawingInfo.renderer;\n    if (renderer.type === \"simple\") {\n      this._defaultSymbology = parseSymbol(renderer.symbol, isColorCaptured);\n    } else if (renderer.type === \"uniqueValue\") {\n      this._defaultSymbology = parseSymbol(\n        renderer.defaultSymbol,\n        isColorCaptured,\n      );\n      this._valueFields.push(renderer.field1);\n      if (defined(renderer.field2)) {\n        this._valueFields.push(renderer.field2);\n      }\n      if (defined(renderer.field3)) {\n        this._valueFields.push(renderer.field3);\n      }\n      this._uniqueValueHash = buildUniqueValueHash(renderer, isColorCaptured);\n    } else if (renderer.type === \"classBreaks\") {\n      this._defaultSymbology = parseSymbol(\n        renderer.defaultSymbol,\n        isColorCaptured,\n      );\n      this._valueFields.push(renderer.field);\n      this._classBreaksHash = buildClassBreaksHash(renderer, isColorCaptured);\n    }\n  }\n};\n\nfunction findHashForUniqueValues(hash, values, hashLevel, valueIndex) {\n  const levelValues = values[hashLevel];\n  if (valueIndex < levelValues.length) {\n    const hashValue = levelValues[valueIndex];\n    const innerHash = hash[hashValue];\n    if (defined(innerHash) && ++hashLevel < values.length) {\n      return findHashForUniqueValues(innerHash, values, hashLevel, valueIndex);\n    }\n    return innerHash;\n  }\n  return undefined;\n}\n\nfunction bisect(array, value) {\n  let low = 0;\n  let high = array.length;\n  if (low < high) {\n    do {\n      const mid = (low + high) >>> 1;\n      if (array[mid] < value) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    } while (low < high);\n  }\n  return low;\n}\n\nfunction findHashForClassBreaks(hash, values, valueIndex) {\n  const value = values[valueIndex];\n  const range = bisect(hash.ranges, value);\n  return hash.symbols[range];\n}\n\n/**\n * @private\n */\nI3SSymbology.prototype._getSymbology = async function (node) {\n  const symbology = {\n    default: this._defaultSymbology,\n  };\n\n  if (this._valueFields.length > 0) {\n    const promises = [];\n    for (let i = 0; i < this._valueFields.length; i++) {\n      promises.push(node.loadField(this._valueFields[i]));\n    }\n    await Promise.all(promises);\n\n    const fieldsValues = [];\n    for (let i = 0; i < this._valueFields.length; i++) {\n      fieldsValues.push(node.fields[this._valueFields[i]].values);\n    }\n\n    let featureHashFn;\n    if (defined(this._uniqueValueHash)) {\n      featureHashFn = (featureIndex) =>\n        findHashForUniqueValues(\n          this._uniqueValueHash,\n          fieldsValues,\n          0,\n          featureIndex,\n        );\n    } else if (defined(this._classBreaksHash)) {\n      featureHashFn = (featureIndex) =>\n        findHashForClassBreaks(\n          this._classBreaksHash,\n          fieldsValues[0],\n          featureIndex,\n        );\n    }\n\n    if (defined(featureHashFn)) {\n      const firstFieldValues = fieldsValues[0];\n      for (\n        let featureIndex = 0;\n        featureIndex < firstFieldValues.length;\n        featureIndex++\n      ) {\n        const featureSymbology = featureHashFn(featureIndex);\n        if (defined(featureSymbology)) {\n          symbology[featureIndex] = featureSymbology;\n        }\n      }\n    }\n  }\n\n  return symbology;\n};\n\nexport default I3SSymbology;\n","import Check from \"../Core/Check.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * Handles parsing of an Instanced 3D Model.\n *\n * @namespace I3dmParser\n * @private\n */\nconst I3dmParser = {};\nI3dmParser._deprecationWarning = deprecationWarning;\n\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\n/**\n * Parses the contents of a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Instanced3DModel|Instanced 3D Model}.\n *\n * @private\n *\n * @param {ArrayBuffer} arrayBuffer The array buffer containing the i3dm.\n * @param {number} [byteOffset=0] The byte offset of the beginning of the i3dm in the array buffer.\n * @returns {object} Returns an object with the glTF format, feature table (binary and json), batch table (binary and json) and glTF parts of the i3dm.\n */\nI3dmParser.parse = function (arrayBuffer, byteOffset) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"arrayBuffer\", arrayBuffer);\n  //>>includeEnd('debug');\n\n  const byteStart = byteOffset ?? 0;\n  byteOffset = byteStart;\n\n  const uint8Array = new Uint8Array(arrayBuffer);\n  const view = new DataView(arrayBuffer);\n  byteOffset += sizeOfUint32; // Skip magic\n\n  const version = view.getUint32(byteOffset, true);\n  if (version !== 1) {\n    throw new RuntimeError(\n      `Only Instanced 3D Model version 1 is supported. Version ${version} is not.`,\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  const byteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const featureTableJsonByteLength = view.getUint32(byteOffset, true);\n  if (featureTableJsonByteLength === 0) {\n    throw new RuntimeError(\n      \"featureTableJsonByteLength is zero, the feature table must be defined.\",\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  const featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const batchTableJsonByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const gltfFormat = view.getUint32(byteOffset, true);\n  if (gltfFormat !== 1 && gltfFormat !== 0) {\n    throw new RuntimeError(\n      `Only glTF format 0 (uri) or 1 (embedded) are supported. Format ${gltfFormat} is not.`,\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  const featureTableJson = getJsonFromTypedArray(\n    uint8Array,\n    byteOffset,\n    featureTableJsonByteLength,\n  );\n  byteOffset += featureTableJsonByteLength;\n\n  const featureTableBinary = new Uint8Array(\n    arrayBuffer,\n    byteOffset,\n    featureTableBinaryByteLength,\n  );\n  byteOffset += featureTableBinaryByteLength;\n\n  let batchTableJson;\n  let batchTableBinary;\n  if (batchTableJsonByteLength > 0) {\n    batchTableJson = getJsonFromTypedArray(\n      uint8Array,\n      byteOffset,\n      batchTableJsonByteLength,\n    );\n    byteOffset += batchTableJsonByteLength;\n\n    if (batchTableBinaryByteLength > 0) {\n      // Has a batch table binary\n      batchTableBinary = new Uint8Array(\n        arrayBuffer,\n        byteOffset,\n        batchTableBinaryByteLength,\n      );\n      // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n      batchTableBinary = new Uint8Array(batchTableBinary);\n      byteOffset += batchTableBinaryByteLength;\n    }\n  }\n\n  const gltfByteLength = byteStart + byteLength - byteOffset;\n  if (gltfByteLength === 0) {\n    throw new RuntimeError(\"glTF byte length must be greater than 0.\");\n  }\n\n  let gltfView;\n  if (byteOffset % 4 === 0) {\n    gltfView = new Uint8Array(arrayBuffer, byteOffset, gltfByteLength);\n  } else {\n    // Create a copy of the glb so that it is 4-byte aligned\n    I3dmParser._deprecationWarning(\n      \"i3dm-glb-unaligned\",\n      \"The embedded glb is not aligned to a 4-byte boundary.\",\n    );\n    gltfView = new Uint8Array(\n      uint8Array.subarray(byteOffset, byteOffset + gltfByteLength),\n    );\n  }\n\n  return {\n    gltfFormat: gltfFormat,\n    featureTableJson: featureTableJson,\n    featureTableBinary: featureTableBinary,\n    batchTableJson: batchTableJson,\n    batchTableBinary: batchTableBinary,\n    gltf: gltfView,\n  };\n};\n\nexport default I3dmParser;\n","import Cesium3DTileset from \"./Cesium3DTileset.js\";\nimport defined from \"../Core/defined.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ITwinPlatform from \"../Core/ITwinPlatform.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Check from \"../Core/Check.js\";\nimport KmlDataSource from \"../DataSources/KmlDataSource.js\";\nimport GeoJsonDataSource from \"../DataSources/GeoJsonDataSource.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Methods for loading iTwin platform data into CesiumJS\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @see ITwinPlatform\n * @namespace ITwinData\n */\nconst ITwinData = {};\n\n/**\n * Create a {@link Cesium3DTileset} for the given iModel id using iTwin's Mesh Export API.\n *\n * If there is not a completed export available for the given iModel id, the returned promise will resolve to <code>undefined</code>.\n * We recommend waiting 10-20 seconds and trying to load the tileset again.\n * If all exports are Invalid this will throw an error.\n *\n * See the {@link https://developer.bentley.com/apis/mesh-export/overview/|iTwin Platform Mesh Export API documentation} for more information on request parameters\n *\n * @example\n * const tileset = await Cesium.ITwinData.createTilesetFromIModelId({ iModelId });\n * if (Cesium.defined(tileset)) {\n *   viewer.scene.primitives.add(tileset);\n * }\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @param {object} options\n * @param {string} options.iModelId The id of the iModel to load\n * @param {Cesium3DTileset.ConstructorOptions} [options.tilesetOptions] Object containing options to pass to the internally created {@link Cesium3DTileset}.\n * @param {string} [options.changesetId] The id of the changeset to load, if not provided the latest changesets will be used\n * @returns {Promise<Cesium3DTileset | undefined>} A promise that will resolve to the created 3D tileset or <code>undefined</code> if there is no completed export for the given iModel id\n *\n * @throws {RuntimeError} If all exports for the given iModel are Invalid\n * @throws {RuntimeError} If the iTwin API request is not successful\n */\nITwinData.createTilesetFromIModelId = async function ({\n  iModelId,\n  changesetId,\n  tilesetOptions,\n}) {\n  const { exports } = await ITwinPlatform.getExports(iModelId, changesetId);\n\n  if (\n    exports.length > 0 &&\n    exports.every((exportObj) => {\n      return exportObj.status === ITwinPlatform.ExportStatus.Invalid;\n    })\n  ) {\n    throw new RuntimeError(\n      `All exports for this iModel are Invalid: ${iModelId}`,\n    );\n  }\n\n  const completeExport = exports.find((exportObj) => {\n    return exportObj.status === ITwinPlatform.ExportStatus.Complete;\n  });\n\n  if (!defined(completeExport)) {\n    return;\n  }\n\n  // Convert the link to the tileset url while preserving the search paramaters\n  // This link is only valid 1 hour\n  const baseUrl = new URL(completeExport._links.mesh.href);\n  baseUrl.pathname = `${baseUrl.pathname}/tileset.json`;\n  const tilesetUrl = baseUrl.toString();\n\n  const resource = new Resource({\n    url: tilesetUrl,\n  });\n\n  return Cesium3DTileset.fromUrl(resource, tilesetOptions);\n};\n\n/**\n * Create a tileset for the specified reality data id. This function only works\n * with 3D Tiles meshes and point clouds.\n *\n * If the <code>type</code> or <code>rootDocument</code> are not provided this function\n * will first request the full metadata for the specified reality data to fill these values.\n *\n * The <code>maximumScreenSpaceError</code> of the resulting tileset will default to 4,\n * unless it is explicitly overridden with the given tileset options.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @param {object} options\n * @param {string} options.iTwinId The id of the iTwin to load data from\n * @param {string} options.realityDataId The id of the reality data to load\n * @param {ITwinPlatform.RealityDataType} [options.type] The type of this reality data\n * @param {string} [options.rootDocument] The path of the root document for this reality data\n * @param {Cesium3DTileset.ConstructorOptions} [options.tilesetOptions] Object containing\n * options to pass to the internally created {@link Cesium3DTileset}.\n * @returns {Promise<Cesium3DTileset>}\n *\n * @throws {RuntimeError} if the type of reality data is not supported by this function\n */\nITwinData.createTilesetForRealityDataId = async function ({\n  iTwinId,\n  realityDataId,\n  type,\n  rootDocument,\n  tilesetOptions,\n}) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"iTwinId\", iTwinId);\n  Check.typeOf.string(\"realityDataId\", realityDataId);\n  if (defined(type)) {\n    Check.typeOf.string(\"type\", type);\n  }\n  if (defined(rootDocument)) {\n    Check.typeOf.string(\"rootDocument\", rootDocument);\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(type) || !defined(rootDocument)) {\n    const metadata = await ITwinPlatform.getRealityDataMetadata(\n      iTwinId,\n      realityDataId,\n    );\n    rootDocument = metadata.rootDocument;\n    type = metadata.type;\n  }\n\n  const supportedRealityDataTypes = [\n    ITwinPlatform.RealityDataType.Cesium3DTiles,\n    ITwinPlatform.RealityDataType.PNTS,\n    ITwinPlatform.RealityDataType.RealityMesh3DTiles,\n    ITwinPlatform.RealityDataType.Terrain3DTiles,\n  ];\n\n  if (!supportedRealityDataTypes.includes(type)) {\n    throw new RuntimeError(`Reality data type is not a mesh type: ${type}`);\n  }\n\n  const tilesetAccessUrl = await ITwinPlatform.getRealityDataURL(\n    iTwinId,\n    realityDataId,\n    rootDocument,\n  );\n\n  // The maximum screen space error was defined to default to 4 for\n  // reality data tilesets, because they did not show the expected\n  // amount of detail with the default value of 16. Values that are\n  // given in the tilesetOptions should still override that default.\n  const internalTilesetOptions = {\n    maximumScreenSpaceError: 4,\n    ...tilesetOptions,\n  };\n\n  return Cesium3DTileset.fromUrl(tilesetAccessUrl, internalTilesetOptions);\n};\n\n/**\n * Create a data source of the correct type for the specified reality data id.\n * This function only works for KML and GeoJSON type data.\n *\n * If the <code>type</code> or <code>rootDocument</code> are not provided this function\n * will first request the full metadata for the specified reality data to fill these values.\n *\n * @param {object} options\n * @param {string} options.iTwinId The id of the iTwin to load data from\n * @param {string} options.realityDataId The id of the reality data to load\n * @param {ITwinPlatform.RealityDataType} [options.type] The type of this reality data\n * @param {string} [options.rootDocument] The path of the root document for this reality data\n * @returns {Promise<GeoJsonDataSource | KmlDataSource>}\n *\n * @throws {RuntimeError} if the type of reality data is not supported by this function\n */\nITwinData.createDataSourceForRealityDataId = async function ({\n  iTwinId,\n  realityDataId,\n  type,\n  rootDocument,\n}) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"iTwinId\", iTwinId);\n  Check.typeOf.string(\"realityDataId\", realityDataId);\n  if (defined(type)) {\n    Check.typeOf.string(\"type\", type);\n  }\n  if (defined(rootDocument)) {\n    Check.typeOf.string(\"rootDocument\", rootDocument);\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(type) || !defined(rootDocument)) {\n    const metadata = await ITwinPlatform.getRealityDataMetadata(\n      iTwinId,\n      realityDataId,\n    );\n    rootDocument = metadata.rootDocument;\n    type = metadata.type;\n  }\n\n  const supportedRealityDataTypes = [\n    ITwinPlatform.RealityDataType.KML,\n    ITwinPlatform.RealityDataType.GeoJSON,\n  ];\n\n  if (!supportedRealityDataTypes.includes(type)) {\n    throw new RuntimeError(\n      `Reality data type is not a data source type: ${type}`,\n    );\n  }\n\n  const tilesetAccessUrl = await ITwinPlatform.getRealityDataURL(\n    iTwinId,\n    realityDataId,\n    rootDocument,\n  );\n\n  if (type === ITwinPlatform.RealityDataType.GeoJSON) {\n    return GeoJsonDataSource.load(tilesetAccessUrl);\n  }\n\n  // If we get here it's guaranteed to be a KML type\n  return KmlDataSource.load(tilesetAccessUrl);\n};\n\n/**\n * Load data from the Geospatial Features API as GeoJSON.\n *\n * @param {object} options\n * @param {string} options.iTwinId The id of the iTwin to load data from\n * @param {string} options.collectionId The id of the data collection to load\n * @param {number} [options.limit=10000] number of items per page, must be between 1 and 10,000 inclusive\n * @returns {Promise<GeoJsonDataSource>}\n */\nITwinData.loadGeospatialFeatures = async function ({\n  iTwinId,\n  collectionId,\n  limit,\n}) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"iTwinId\", iTwinId);\n  Check.typeOf.string(\"collectionId\", collectionId);\n  if (defined(limit)) {\n    Check.typeOf.number(\"limit\", limit);\n    Check.typeOf.number.lessThanOrEquals(\"limit\", limit, 10000);\n    Check.typeOf.number.greaterThanOrEquals(\"limit\", limit, 1);\n  }\n  if (\n    !defined(ITwinPlatform.defaultAccessToken) &&\n    !defined(ITwinPlatform.defaultShareKey)\n  ) {\n    throw new DeveloperError(\n      \"Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const pageLimit = limit ?? 10000;\n\n  const tilesetUrl = `${ITwinPlatform.apiEndpoint}geospatial-features/itwins/${iTwinId}/ogc/collections/${collectionId}/items`;\n\n  const resource = new Resource({\n    url: tilesetUrl,\n    headers: {\n      Authorization: ITwinPlatform._getAuthorizationHeader(),\n      Accept: \"application/vnd.bentley.itwin-platform.v1+json\",\n    },\n    queryParameters: {\n      limit: pageLimit,\n      client: \"CesiumJS\",\n    },\n  });\n\n  return GeoJsonDataSource.load(resource);\n};\n\nexport default ITwinData;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport SpecularEnvironmentCubeMap from \"./SpecularEnvironmentCubeMap.js\";\n\n/**\n * Properties for managing image-based lighting on tilesets and models.\n * Also manages the necessary resources and textures.\n * <p>\n * If specular environment maps are used, {@link ImageBasedLighting#destroy} must be called\n * when the image-based lighting is no longer needed to clean up GPU resources properly.\n * If a model or tileset creates an instance of ImageBasedLighting, it will handle this.\n * Otherwise, the application is responsible for calling destroy().\n *</p>\n *\n * @alias ImageBasedLighting\n * @constructor\n *\n * @param {Cartesian2} [options.imageBasedLightingFactor=Cartesian2(1.0, 1.0)] Scales diffuse and specular image-based lighting from the earth, sky, atmosphere and star skybox.\n * @param {Cartesian3[]} [options.sphericalHarmonicCoefficients] The third order spherical harmonic coefficients used for the diffuse color of image-based lighting.\n * @param {string} [options.specularEnvironmentMaps] A URL to a KTX2 file that contains a cube map of the specular lighting and the convoluted specular mipmaps.\n */\nfunction ImageBasedLighting(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const imageBasedLightingFactor = defined(options.imageBasedLightingFactor)\n    ? Cartesian2.clone(options.imageBasedLightingFactor)\n    : new Cartesian2(1.0, 1.0);\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\n    \"options.imageBasedLightingFactor\",\n    imageBasedLightingFactor,\n  );\n  Check.typeOf.number.greaterThanOrEquals(\n    \"options.imageBasedLightingFactor.x\",\n    imageBasedLightingFactor.x,\n    0.0,\n  );\n  Check.typeOf.number.lessThanOrEquals(\n    \"options.imageBasedLightingFactor.x\",\n    imageBasedLightingFactor.x,\n    1.0,\n  );\n  Check.typeOf.number.greaterThanOrEquals(\n    \"options.imageBasedLightingFactor.y\",\n    imageBasedLightingFactor.y,\n    0.0,\n  );\n  Check.typeOf.number.lessThanOrEquals(\n    \"options.imageBasedLightingFactor.y\",\n    imageBasedLightingFactor.y,\n    1.0,\n  );\n  //>>includeEnd('debug');\n\n  this._imageBasedLightingFactor = imageBasedLightingFactor;\n\n  const sphericalHarmonicCoefficients = options.sphericalHarmonicCoefficients;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    defined(sphericalHarmonicCoefficients) &&\n    (!Array.isArray(sphericalHarmonicCoefficients) ||\n      sphericalHarmonicCoefficients.length !== 9)\n  ) {\n    throw new DeveloperError(\n      \"options.sphericalHarmonicCoefficients must be an array of 9 Cartesian3 values.\",\n    );\n  }\n  //>>includeEnd('debug');\n  this._sphericalHarmonicCoefficients = sphericalHarmonicCoefficients;\n\n  // The specular environment map texture is created in update();\n  this._specularEnvironmentMaps = options.specularEnvironmentMaps;\n  this._specularEnvironmentCubeMap = undefined;\n  this._specularEnvironmentCubeMapDirty = true;\n  this._specularEnvironmentMapLoaded = false;\n  this._previousSpecularEnvironmentMapLoaded = false;\n\n  this._useDefaultSpecularMaps = false;\n  this._useDefaultSphericalHarmonics = false;\n  this._shouldRegenerateShaders = false;\n\n  // Store the previous frame number to prevent redundant update calls\n  this._previousFrameNumber = undefined;\n  this._previousFrameContext = undefined;\n\n  // Keeps track of the last values for use during update logic\n  this._previousImageBasedLightingFactor = Cartesian2.clone(\n    imageBasedLightingFactor,\n  );\n  this._previousSphericalHarmonicCoefficients = sphericalHarmonicCoefficients;\n  this._removeErrorListener = undefined;\n}\n\nObject.defineProperties(ImageBasedLighting.prototype, {\n  /**\n   * Cesium adds lighting from the earth, sky, atmosphere, and star skybox.\n   * This cartesian is used to scale the final diffuse and specular lighting\n   * contribution from those sources to the final color. A value of 0.0 will\n   * disable those light sources.\n   *\n   * @memberof ImageBasedLighting.prototype\n   *\n   * @type {Cartesian2}\n   * @default Cartesian2(1.0, 1.0)\n   */\n  imageBasedLightingFactor: {\n    get: function () {\n      return this._imageBasedLightingFactor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"imageBasedLightingFactor\", value);\n      Check.typeOf.number.greaterThanOrEquals(\n        \"imageBasedLightingFactor.x\",\n        value.x,\n        0.0,\n      );\n      Check.typeOf.number.lessThanOrEquals(\n        \"imageBasedLightingFactor.x\",\n        value.x,\n        1.0,\n      );\n      Check.typeOf.number.greaterThanOrEquals(\n        \"imageBasedLightingFactor.y\",\n        value.y,\n        0.0,\n      );\n      Check.typeOf.number.lessThanOrEquals(\n        \"imageBasedLightingFactor.y\",\n        value.y,\n        1.0,\n      );\n      //>>includeEnd('debug');\n      this._previousImageBasedLightingFactor = Cartesian2.clone(\n        this._imageBasedLightingFactor,\n        this._previousImageBasedLightingFactor,\n      );\n      this._imageBasedLightingFactor = Cartesian2.clone(\n        value,\n        this._imageBasedLightingFactor,\n      );\n    },\n  },\n\n  /**\n   * The third order spherical harmonic coefficients used for the diffuse color of image-based lighting. When <code>undefined</code>, a diffuse irradiance\n   * computed from the atmosphere color is used.\n   * <p>\n   * There are nine <code>Cartesian3</code> coefficients.\n   * The order of the coefficients is: L<sub>0,0</sub>, L<sub>1,-1</sub>, L<sub>1,0</sub>, L<sub>1,1</sub>, L<sub>2,-2</sub>, L<sub>2,-1</sub>, L<sub>2,0</sub>, L<sub>2,1</sub>, L<sub>2,2</sub>\n   * </p>\n   *\n   * These values can be obtained by preprocessing the environment map using the <code>cmgen</code> tool of\n   * {@link https://github.com/google/filament/releases|Google's Filament project}.\n   * Be sure to use the <code>--no-mirror</code> option in <code>cmgen</code>.\n   *\n   * @memberof ImageBasedLighting.prototype\n   *\n   * @type {Cartesian3[]}\n   * @demo {@link https://sandcastle.cesium.com/index.html?id=image-based-lighting|Sandcastle Image Based Lighting Demo}\n   * @see {@link https://graphics.stanford.edu/papers/envmap/envmap.pdf|An Efficient Representation for Irradiance Environment Maps}\n   */\n  sphericalHarmonicCoefficients: {\n    get: function () {\n      return this._sphericalHarmonicCoefficients;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && (!Array.isArray(value) || value.length !== 9)) {\n        throw new DeveloperError(\n          \"sphericalHarmonicCoefficients must be an array of 9 Cartesian3 values.\",\n        );\n      }\n      //>>includeEnd('debug');\n      this._previousSphericalHarmonicCoefficients =\n        this._sphericalHarmonicCoefficients;\n      this._sphericalHarmonicCoefficients = value;\n    },\n  },\n\n  /**\n   * A URL to a KTX2 file that contains a cube map of the specular lighting and the convoluted specular mipmaps.\n   *\n   * @memberof ImageBasedLighting.prototype\n   * @demo {@link https://sandcastle.cesium.com/index.html?id=image-based-lighting|Sandcastle Image Based Lighting Demo}\n   * @type {string}\n   * @see ImageBasedLighting#sphericalHarmonicCoefficients\n   */\n  specularEnvironmentMaps: {\n    get: function () {\n      return this._specularEnvironmentMaps;\n    },\n    set: function (value) {\n      if (value !== this._specularEnvironmentMaps) {\n        this._specularEnvironmentCubeMapDirty =\n          this._specularEnvironmentCubeMapDirty ||\n          value !== this._specularEnvironmentMaps;\n        this._specularEnvironmentMapLoaded = false;\n      }\n      this._specularEnvironmentMaps = value;\n    },\n  },\n\n  /**\n   * Whether or not image-based lighting is enabled.\n   *\n   * @memberof ImageBasedLighting.prototype\n   * @type {boolean}\n   *\n   * @private\n   */\n  enabled: {\n    get: function () {\n      return (\n        this._imageBasedLightingFactor.x > 0.0 ||\n        this._imageBasedLightingFactor.y > 0.0\n      );\n    },\n  },\n\n  /**\n   * Whether or not the models that use this lighting should regenerate their shaders,\n   * based on the properties and resources have changed.\n   *\n   * @memberof ImageBasedLighting.prototype\n   * @type {boolean}\n   *\n   * @private\n   */\n  shouldRegenerateShaders: {\n    get: function () {\n      return this._shouldRegenerateShaders;\n    },\n  },\n\n  /**\n   * The texture atlas for the specular environment maps.\n   *\n   * @memberof ImageBasedLighting.prototype\n   * @type {SpecularEnvironmentCubeMap}\n   *\n   * @private\n   */\n  specularEnvironmentCubeMap: {\n    get: function () {\n      return this._specularEnvironmentCubeMap;\n    },\n  },\n\n  /**\n   * Whether or not to use the default spherical harmonics coefficients.\n   *\n   * @memberof ImageBasedLighting.prototype\n   * @type {boolean}\n   *\n   * @private\n   */\n  useDefaultSphericalHarmonics: {\n    get: function () {\n      return this._useDefaultSphericalHarmonics;\n    },\n  },\n\n  /**\n   * Whether or not to use the default specular environment maps.\n   *\n   * @memberof ImageBasedLighting.prototype\n   * @type {boolean}\n   *\n   * @private\n   */\n  useDefaultSpecularMaps: {\n    get: function () {\n      return this._useDefaultSpecularMaps;\n    },\n  },\n\n  /**\n   * Whether or not the image-based lighting settings use specular environment maps.\n   *\n   * @memberof ImageBasedLighting.prototype\n   * @type {boolean}\n   *\n   * @private\n   */\n  useSpecularEnvironmentMaps: {\n    get: function () {\n      return (\n        (defined(this._specularEnvironmentCubeMap) &&\n          this._specularEnvironmentCubeMap.ready) ||\n        this._useDefaultSpecularMaps\n      );\n    },\n  },\n});\n\nfunction createSpecularEnvironmentCubeMap(imageBasedLighting, context) {\n  if (!SpecularEnvironmentCubeMap.isSupported(context)) {\n    return;\n  }\n\n  imageBasedLighting._specularEnvironmentCubeMap =\n    imageBasedLighting._specularEnvironmentCubeMap &&\n    imageBasedLighting._specularEnvironmentCubeMap.destroy();\n\n  if (defined(imageBasedLighting._specularEnvironmentMaps)) {\n    const cubeMap = new SpecularEnvironmentCubeMap(\n      imageBasedLighting._specularEnvironmentMaps,\n    );\n    imageBasedLighting._specularEnvironmentCubeMap = cubeMap;\n\n    imageBasedLighting._removeErrorListener =\n      cubeMap.errorEvent.addEventListener((error) => {\n        console.error(`Error loading specularEnvironmentMaps: ${error}`);\n      });\n  }\n\n  // Regenerate shaders so they do not use an environment map.\n  // Will be set to true again if there was a new environment map and it is ready.\n  imageBasedLighting._shouldRegenerateShaders = true;\n}\n\nImageBasedLighting.prototype.update = function (frameState) {\n  if (\n    frameState.frameNumber === this._previousFrameNumber &&\n    frameState.context === this._previousFrameContext\n  ) {\n    return;\n  }\n\n  this._previousFrameNumber = frameState.frameNumber;\n  const context = (this._previousFrameContext = frameState.context);\n\n  frameState.brdfLutGenerator.update(frameState);\n  this._shouldRegenerateShaders = false;\n\n  const iblFactor = this._imageBasedLightingFactor;\n  const previousIBLFactor = this._previousImageBasedLightingFactor;\n  if (!Cartesian2.equals(iblFactor, previousIBLFactor)) {\n    this._shouldRegenerateShaders =\n      (iblFactor.x > 0.0 && previousIBLFactor.x === 0.0) ||\n      (iblFactor.x === 0.0 && previousIBLFactor.x > 0.0);\n    this._shouldRegenerateShaders =\n      this._shouldRegenerateShaders ||\n      (iblFactor.y > 0.0 && previousIBLFactor.y === 0.0) ||\n      (iblFactor.y === 0.0 && previousIBLFactor.y > 0.0);\n\n    this._previousImageBasedLightingFactor = Cartesian2.clone(\n      this._imageBasedLightingFactor,\n      this._previousImageBasedLightingFactor,\n    );\n  }\n\n  if (\n    this._previousSphericalHarmonicCoefficients !==\n    this._sphericalHarmonicCoefficients\n  ) {\n    this._shouldRegenerateShaders =\n      this._shouldRegenerateShaders ||\n      defined(this._previousSphericalHarmonicCoefficients) !==\n        defined(this._sphericalHarmonicCoefficients);\n\n    this._previousSphericalHarmonicCoefficients =\n      this._sphericalHarmonicCoefficients;\n  }\n\n  this._shouldRegenerateShaders =\n    this._shouldRegenerateShaders ||\n    this._previousSpecularEnvironmentMapLoaded !==\n      this._specularEnvironmentMapLoaded;\n\n  this._previousSpecularEnvironmentMapLoaded =\n    this._specularEnvironmentMapLoaded;\n\n  if (this._specularEnvironmentCubeMapDirty) {\n    createSpecularEnvironmentCubeMap(this, context);\n    this._specularEnvironmentCubeMapDirty = false;\n  }\n\n  if (defined(this._specularEnvironmentCubeMap)) {\n    this._specularEnvironmentCubeMap.update(frameState);\n    if (this._specularEnvironmentCubeMap.ready) {\n      this._specularEnvironmentMapLoaded = true;\n    }\n  }\n\n  const recompileWithDefaultCubeMap =\n    !defined(this._specularEnvironmentCubeMap) &&\n    defined(frameState.specularEnvironmentMaps) &&\n    !this._useDefaultSpecularMaps;\n  const recompileWithoutDefaultCubeMap =\n    !defined(frameState.specularEnvironmentMaps) &&\n    this._useDefaultSpecularMaps;\n\n  const recompileWithDefaultSHCoeffs =\n    !defined(this._sphericalHarmonicCoefficients) &&\n    defined(frameState.sphericalHarmonicCoefficients) &&\n    !this._useDefaultSphericalHarmonics;\n  const recompileWithoutDefaultSHCoeffs =\n    !defined(frameState.sphericalHarmonicCoefficients) &&\n    this._useDefaultSphericalHarmonics;\n\n  this._shouldRegenerateShaders =\n    this._shouldRegenerateShaders ||\n    recompileWithDefaultCubeMap ||\n    recompileWithoutDefaultCubeMap ||\n    recompileWithDefaultSHCoeffs ||\n    recompileWithoutDefaultSHCoeffs;\n\n  this._useDefaultSpecularMaps =\n    !defined(this._specularEnvironmentCubeMap) &&\n    defined(frameState.specularEnvironmentMaps);\n  this._useDefaultSphericalHarmonics =\n    !defined(this._sphericalHarmonicCoefficients) &&\n    defined(frameState.sphericalHarmonicCoefficients);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see ImageBasedLighting#destroy\n * @private\n */\nImageBasedLighting.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * imageBasedLighting = imageBasedLighting && imageBasedLighting.destroy();\n *\n * @see ImageBasedLighting#isDestroyed\n * @private\n */\nImageBasedLighting.prototype.destroy = function () {\n  this._specularEnvironmentCubeMap =\n    this._specularEnvironmentCubeMap &&\n    this._specularEnvironmentCubeMap.destroy();\n  this._removeErrorListener =\n    this._removeErrorListener && this._removeErrorListener();\n  return destroyObject(this);\n};\n\nexport default ImageBasedLighting;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ImageryState from \"./ImageryState.js\";\n\n/**\n * Stores details about a tile of imagery.\n *\n * @alias Imagery\n * @private\n */\nfunction Imagery(imageryLayer, x, y, level, rectangle) {\n  this.imageryLayer = imageryLayer;\n  this.x = x;\n  this.y = y;\n  this.level = level;\n  this.request = undefined;\n\n  if (level !== 0) {\n    const parentX = (x / 2) | 0;\n    const parentY = (y / 2) | 0;\n    const parentLevel = level - 1;\n    this.parent = imageryLayer.getImageryFromCache(\n      parentX,\n      parentY,\n      parentLevel,\n    );\n  }\n\n  this.state = ImageryState.UNLOADED;\n  this.imageUrl = undefined;\n  this.image = undefined;\n  this.texture = undefined;\n  this.textureWebMercator = undefined;\n  this.credits = undefined;\n  this.referenceCount = 0;\n\n  if (!defined(rectangle) && imageryLayer.ready) {\n    const tilingScheme = imageryLayer.imageryProvider.tilingScheme;\n    rectangle = tilingScheme.tileXYToRectangle(x, y, level);\n  }\n\n  this.rectangle = rectangle;\n}\nImagery.createPlaceholder = function (imageryLayer) {\n  const result = new Imagery(imageryLayer, 0, 0, 0);\n  result.addReference();\n  result.state = ImageryState.PLACEHOLDER;\n  return result;\n};\n\nImagery.prototype.addReference = function () {\n  ++this.referenceCount;\n};\n\nImagery.prototype.releaseReference = function () {\n  --this.referenceCount;\n\n  if (this.referenceCount === 0) {\n    this.imageryLayer.removeImageryFromCache(this);\n\n    if (defined(this.parent)) {\n      this.parent.releaseReference();\n    }\n\n    if (defined(this.image) && defined(this.image.destroy)) {\n      this.image.destroy();\n    }\n\n    if (defined(this.texture)) {\n      this.texture.destroy();\n    }\n\n    if (\n      defined(this.textureWebMercator) &&\n      this.texture !== this.textureWebMercator\n    ) {\n      this.textureWebMercator.destroy();\n    }\n\n    destroyObject(this);\n\n    return 0;\n  }\n\n  return this.referenceCount;\n};\n\nImagery.prototype.processStateMachine = function (\n  frameState,\n  needGeographicProjection,\n  skipLoading,\n) {\n  if (this.state === ImageryState.UNLOADED && !skipLoading) {\n    this.state = ImageryState.TRANSITIONING;\n    this.imageryLayer._requestImagery(this);\n  }\n\n  if (this.state === ImageryState.RECEIVED) {\n    this.state = ImageryState.TRANSITIONING;\n    this.imageryLayer._createTexture(frameState.context, this);\n  }\n\n  // If the imagery is already ready, but we need a geographic version and don't have it yet,\n  // we still need to do the reprojection step. This can happen if the Web Mercator version\n  // is fine initially, but the geographic one is needed later.\n  const needsReprojection =\n    this.state === ImageryState.READY &&\n    needGeographicProjection &&\n    !this.texture;\n\n  if (this.state === ImageryState.TEXTURE_LOADED || needsReprojection) {\n    this.state = ImageryState.TRANSITIONING;\n    this.imageryLayer._reprojectTexture(\n      frameState,\n      this,\n      needGeographicProjection,\n    );\n  }\n};\nexport default Imagery;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport createWorldImageryAsync from \"../Scene/createWorldImageryAsync.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestState from \"../Core/RequestState.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport TerrainProvider from \"../Core/TerrainProvider.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport MipmapHint from \"../Renderer/MipmapHint.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport ReprojectWebMercatorFS from \"../Shaders/ReprojectWebMercatorFS.js\";\nimport ReprojectWebMercatorVS from \"../Shaders/ReprojectWebMercatorVS.js\";\nimport Imagery from \"./Imagery.js\";\nimport ImageryState from \"./ImageryState.js\";\nimport SplitDirection from \"./SplitDirection.js\";\nimport TileImagery from \"./TileImagery.js\";\n\n/**\n * @typedef {object} ImageryLayer.ConstructorOptions\n *\n * Initialization options for the ImageryLayer constructor.\n *\n * @property {Rectangle} [rectangle=imageryProvider.rectangle] The rectangle of the layer.  This rectangle\n *        can limit the visible portion of the imagery provider.\n * @property {number|Function} [alpha=1.0] The alpha blending value of this layer, from 0.0 to 1.0.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates of the\n *                          imagery tile for which the alpha is required, and it is expected to return\n *                          the alpha value to use for the tile.\n * @property {number|Function} [nightAlpha=1.0] The alpha blending value of this layer on the night side of the globe, from 0.0 to 1.0.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates of the\n *                          imagery tile for which the alpha is required, and it is expected to return\n *                          the alpha value to use for the tile. This only takes effect when <code>enableLighting</code> is <code>true</code>.\n * @property {number|Function} [dayAlpha=1.0] The alpha blending value of this layer on the day side of the globe, from 0.0 to 1.0.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates of the\n *                          imagery tile for which the alpha is required, and it is expected to return\n *                          the alpha value to use for the tile. This only takes effect when <code>enableLighting</code> is <code>true</code>.\n * @property {number|Function} [brightness=1.0] The brightness of this layer.  1.0 uses the unmodified imagery\n *                          color.  Less than 1.0 makes the imagery darker while greater than 1.0 makes it brighter.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates of the\n *                          imagery tile for which the brightness is required, and it is expected to return\n *                          the brightness value to use for the tile.  The function is executed for every\n *                          frame and for every tile, so it must be fast.\n * @property {number|Function} [contrast=1.0] The contrast of this layer.  1.0 uses the unmodified imagery color.\n *                          Less than 1.0 reduces the contrast while greater than 1.0 increases it.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates of the\n *                          imagery tile for which the contrast is required, and it is expected to return\n *                          the contrast value to use for the tile.  The function is executed for every\n *                          frame and for every tile, so it must be fast.\n * @property {number|Function} [hue=0.0] The hue of this layer.  0.0 uses the unmodified imagery color.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates\n *                          of the imagery tile for which the hue is required, and it is expected to return\n *                          the hue value to use for the tile.  The function is executed for every\n *                          frame and for every tile, so it must be fast.\n * @property {number|Function} [saturation=1.0] The saturation of this layer.  1.0 uses the unmodified imagery color.\n *                          Less than 1.0 reduces the saturation while greater than 1.0 increases it.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates\n *                          of the imagery tile for which the saturation is required, and it is expected to return\n *                          the saturation value to use for the tile.  The function is executed for every\n *                          frame and for every tile, so it must be fast.\n * @property {number|Function} [gamma=1.0] The gamma correction to apply to this layer.  1.0 uses the unmodified imagery color.\n *                          This can either be a simple number or a function with the signature\n *                          <code>function(frameState, layer, x, y, level)</code>.  The function is passed the\n *                          current frame state, this layer, and the x, y, and level coordinates of the\n *                          imagery tile for which the gamma is required, and it is expected to return\n *                          the gamma value to use for the tile.  The function is executed for every\n *                          frame and for every tile, so it must be fast.\n * @property {SplitDirection|Function} [splitDirection=SplitDirection.NONE] The {@link SplitDirection} split to apply to this layer.\n * @property {TextureMinificationFilter} [minificationFilter=TextureMinificationFilter.LINEAR] The\n *                                    texture minification filter to apply to this layer. Possible values\n *                                    are <code>TextureMinificationFilter.LINEAR</code> and\n *                                    <code>TextureMinificationFilter.NEAREST</code>.\n * @property {TextureMagnificationFilter} [magnificationFilter=TextureMagnificationFilter.LINEAR] The\n *                                     texture minification filter to apply to this layer. Possible values\n *                                     are <code>TextureMagnificationFilter.LINEAR</code> and\n *                                     <code>TextureMagnificationFilter.NEAREST</code>.\n * @property {boolean} [show=true] True if the layer is shown; otherwise, false.\n * @property {number} [maximumAnisotropy=maximum supported] The maximum anisotropy level to use\n *        for texture filtering.  If this parameter is not specified, the maximum anisotropy supported\n *        by the WebGL stack will be used.  Larger values make the imagery look better in horizon\n *        views.\n * @property {number} [minimumTerrainLevel] The minimum terrain level-of-detail at which to show this imagery layer,\n *                 or undefined to show it at all levels.  Level zero is the least-detailed level.\n * @property {number} [maximumTerrainLevel] The maximum terrain level-of-detail at which to show this imagery layer,\n *                 or undefined to show it at all levels.  Level zero is the least-detailed level.\n * @property {Rectangle} [cutoutRectangle] Cartographic rectangle for cutting out a portion of this ImageryLayer.\n * @property {Color} [colorToAlpha] Color to be used as alpha.\n * @property {number} [colorToAlphaThreshold=0.004] Threshold for color-to-alpha.\n */\n\n/**\n * An imagery layer that displays tiled image data from a single imagery provider\n * on a {@link Globe} or {@link Cesium3DTileset}.\n *\n * @alias ImageryLayer\n * @constructor\n *\n * @param {ImageryProvider} [imageryProvider] The imagery provider to use.\n * @param {ImageryLayer.ConstructorOptions} [options] An object describing initialization options\n *\n * @see {@link ImageryLayer.fromProviderAsync} for creating an imagery layer from an asynchronous imagery provider.\n * @see {@link ImageryLayer.fromWorldImagery} for creating an imagery layer for Cesium ion's default global base imagery layer.\n * @see {@link Scene#imageryLayers} for adding an imagery layer to the globe.\n * @see {@link Cesium3DTileset#imageryLayers} for adding an imagery layer to a 3D tileset.\n *\n * @example\n * // Add an OpenStreetMaps layer\n * const imageryLayer = new Cesium.ImageryLayer(new Cesium.OpenStreetMapImageryProvider({\n *   url: \"https://tile.openstreetmap.org/\"\n * }));\n * scene.imageryLayers.add(imageryLayer);\n *\n * @example\n * // Add Cesium ion's default world imagery layer\n * const imageryLayer = Cesium.ImageryLayer.fromWorldImagery();\n * scene.imageryLayers.add(imageryLayer);\n *\n * @example\n * // Add a new transparent layer from Cesium ion\n * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));\n * imageryLayer.alpha = 0.5;\n * scene.imageryLayers.add(imageryLayer);\n *\n * @example\n * // Drape Bing Maps Aerial imagery over a 3D tileset\n * const tileset = await Cesium.Cesium3DTileset.fromUrl(\n *   \"http://localhost:8002/tilesets/Seattle/tileset.json\"\n * );\n * scene.primitives.add(tileset);\n *\n * const imageryProvider = await Cesium.createWorldImageryAsync({\n *   style: Cesium.IonWorldImageryStyle.AERIAL,\n * });\n * const imageryLayer = new ImageryLayer(imageryProvider);\n * tileset.imageryLayers.add(imageryLayer);\n */\nfunction ImageryLayer(imageryProvider, options) {\n  this._imageryProvider = imageryProvider;\n\n  this._readyEvent = new Event();\n  this._errorEvent = new Event();\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  imageryProvider = imageryProvider ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The alpha blending value of this layer, with 0.0 representing fully transparent and\n   * 1.0 representing fully opaque.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.alpha = options.alpha ?? imageryProvider._defaultAlpha ?? 1.0;\n\n  /**\n   * The alpha blending value of this layer on the night side of the globe, with 0.0 representing fully transparent and\n   * 1.0 representing fully opaque. This only takes effect when {@link Globe#enableLighting} is <code>true</code>.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.nightAlpha =\n    options.nightAlpha ?? imageryProvider._defaultNightAlpha ?? 1.0;\n\n  /**\n   * The alpha blending value of this layer on the day side of the globe, with 0.0 representing fully transparent and\n   * 1.0 representing fully opaque. This only takes effect when {@link Globe#enableLighting} is <code>true</code>.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.dayAlpha = options.dayAlpha ?? imageryProvider._defaultDayAlpha ?? 1.0;\n\n  /**\n   * The brightness of this layer.  1.0 uses the unmodified imagery color.  Less than 1.0\n   * makes the imagery darker while greater than 1.0 makes it brighter.\n   *\n   * @type {number}\n   * @default {@link ImageryLayer.DEFAULT_BRIGHTNESS}\n   */\n  this.brightness =\n    options.brightness ??\n    imageryProvider._defaultBrightness ??\n    ImageryLayer.DEFAULT_BRIGHTNESS;\n\n  /**\n   * The contrast of this layer.  1.0 uses the unmodified imagery color.  Less than 1.0 reduces\n   * the contrast while greater than 1.0 increases it.\n   *\n   * @type {number}\n   * @default {@link ImageryLayer.DEFAULT_CONTRAST}\n   */\n  this.contrast =\n    options.contrast ??\n    imageryProvider._defaultContrast ??\n    ImageryLayer.DEFAULT_CONTRAST;\n\n  /**\n   * The hue of this layer in radians. 0.0 uses the unmodified imagery color.\n   *\n   * @type {number}\n   * @default {@link ImageryLayer.DEFAULT_HUE}\n   */\n  this.hue =\n    options.hue ?? imageryProvider._defaultHue ?? ImageryLayer.DEFAULT_HUE;\n\n  /**\n   * The saturation of this layer. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the\n   * saturation while greater than 1.0 increases it.\n   *\n   * @type {number}\n   * @default {@link ImageryLayer.DEFAULT_SATURATION}\n   */\n  this.saturation =\n    options.saturation ??\n    imageryProvider._defaultSaturation ??\n    ImageryLayer.DEFAULT_SATURATION;\n\n  /**\n   * The gamma correction to apply to this layer.  1.0 uses the unmodified imagery color.\n   *\n   * @type {number}\n   * @default {@link ImageryLayer.DEFAULT_GAMMA}\n   */\n  this.gamma =\n    options.gamma ??\n    imageryProvider._defaultGamma ??\n    ImageryLayer.DEFAULT_GAMMA;\n\n  /**\n   * The {@link SplitDirection} to apply to this layer.\n   *\n   * @type {SplitDirection}\n   * @default {@link ImageryLayer.DEFAULT_SPLIT}\n   */\n  this.splitDirection = options.splitDirection ?? ImageryLayer.DEFAULT_SPLIT;\n\n  /**\n   * The {@link TextureMinificationFilter} to apply to this layer.\n   * Possible values are {@link TextureMinificationFilter.LINEAR} (the default)\n   * and {@link TextureMinificationFilter.NEAREST}.\n   *\n   * To take effect, this property must be set immediately after adding the imagery layer.\n   * Once a texture is loaded it won't be possible to change the texture filter used.\n   *\n   * @type {TextureMinificationFilter}\n   * @default {@link ImageryLayer.DEFAULT_MINIFICATION_FILTER}\n   */\n  this.minificationFilter =\n    options.minificationFilter ??\n    imageryProvider._defaultMinificationFilter ??\n    ImageryLayer.DEFAULT_MINIFICATION_FILTER;\n\n  /**\n   * The {@link TextureMagnificationFilter} to apply to this layer.\n   * Possible values are {@link TextureMagnificationFilter.LINEAR} (the default)\n   * and {@link TextureMagnificationFilter.NEAREST}.\n   *\n   * To take effect, this property must be set immediately after adding the imagery layer.\n   * Once a texture is loaded it won't be possible to change the texture filter used.\n   *\n   * @type {TextureMagnificationFilter}\n   * @default {@link ImageryLayer.DEFAULT_MAGNIFICATION_FILTER}\n   */\n  this.magnificationFilter =\n    options.magnificationFilter ??\n    imageryProvider._defaultMagnificationFilter ??\n    ImageryLayer.DEFAULT_MAGNIFICATION_FILTER;\n\n  /**\n   * Determines if this layer is shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  this._minimumTerrainLevel = options.minimumTerrainLevel;\n  this._maximumTerrainLevel = options.maximumTerrainLevel;\n\n  this._rectangle = options.rectangle ?? Rectangle.MAX_VALUE;\n  this._maximumAnisotropy = options.maximumAnisotropy;\n\n  this._imageryCache = {};\n\n  this._skeletonPlaceholder = new TileImagery(Imagery.createPlaceholder(this));\n\n  // The value of the show property on the last update.\n  this._show = true;\n\n  // The index of this layer in the ImageryLayerCollection.\n  this._layerIndex = -1;\n\n  // true if this is the base (lowest shown) layer.\n  this._isBaseLayer = false;\n\n  this._requestImageError = undefined;\n\n  this._reprojectComputeCommands = [];\n\n  /**\n   * Rectangle cutout in this layer of imagery.\n   *\n   * @type {Rectangle}\n   */\n  this.cutoutRectangle = options.cutoutRectangle;\n\n  /**\n   * Color value that should be set to transparent.\n   *\n   * @type {Color}\n   */\n  this.colorToAlpha = options.colorToAlpha;\n\n  /**\n   * Normalized (0-1) threshold for color-to-alpha.\n   *\n   * @type {number}\n   */\n  this.colorToAlphaThreshold =\n    options.colorToAlphaThreshold ??\n    ImageryLayer.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD;\n}\n\nObject.defineProperties(ImageryLayer.prototype, {\n  /**\n   * Gets the imagery provider for this layer. This should not be called before {@link ImageryLayer#ready} returns true.\n   * @memberof ImageryLayer.prototype\n   * @type {ImageryProvider}\n   * @readonly\n   */\n  imageryProvider: {\n    get: function () {\n      return this._imageryProvider;\n    },\n  },\n\n  /**\n   * Returns true when the terrain provider has been successfully created. Otherwise, returns false.\n   * @memberof ImageryLayer.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return defined(this._imageryProvider);\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of the thrown error.\n   * @memberof ImageryLayer.prototype\n   * @type {Event<ImageryLayer.ErrorEventCallback>}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider has been successfully created. Event listeners\n   * are passed the created instance of {@link ImageryProvider}.\n   * @memberof ImageryLayer.prototype\n   * @type {Event<ImageryLayer.ReadyEventCallback>}\n   * @readonly\n   */\n  readyEvent: {\n    get: function () {\n      return this._readyEvent;\n    },\n  },\n\n  /**\n   * Gets the rectangle of this layer.  If this rectangle is smaller than the rectangle of the\n   * {@link ImageryProvider}, only a portion of the imagery provider is shown.\n   * @memberof ImageryLayer.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n});\n\n/**\n * This value is used as the default brightness for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the brightness of the imagery.\n * @type {number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_BRIGHTNESS = 1.0;\n/**\n * This value is used as the default contrast for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the contrast of the imagery.\n * @type {number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_CONTRAST = 1.0;\n/**\n * This value is used as the default hue for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the hue of the imagery.\n * @type {number}\n * @default 0.0\n */\nImageryLayer.DEFAULT_HUE = 0.0;\n/**\n * This value is used as the default saturation for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the saturation of the imagery.\n * @type {number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_SATURATION = 1.0;\n/**\n * This value is used as the default gamma for the imagery layer if one is not provided during construction\n * or by the imagery provider. This value does not modify the gamma of the imagery.\n * @type {number}\n * @default 1.0\n */\nImageryLayer.DEFAULT_GAMMA = 1.0;\n\n/**\n * This value is used as the default split for the imagery layer if one is not provided during construction\n * or by the imagery provider.\n * @type {SplitDirection}\n * @default SplitDirection.NONE\n */\nImageryLayer.DEFAULT_SPLIT = SplitDirection.NONE;\n\n/**\n * This value is used as the default texture minification filter for the imagery layer if one is not provided\n * during construction or by the imagery provider.\n * @type {TextureMinificationFilter}\n * @default TextureMinificationFilter.LINEAR\n */\nImageryLayer.DEFAULT_MINIFICATION_FILTER = TextureMinificationFilter.LINEAR;\n\n/**\n * This value is used as the default texture magnification filter for the imagery layer if one is not provided\n * during construction or by the imagery provider.\n * @type {TextureMagnificationFilter}\n * @default TextureMagnificationFilter.LINEAR\n */\nImageryLayer.DEFAULT_MAGNIFICATION_FILTER = TextureMagnificationFilter.LINEAR;\n\n/**\n * This value is used as the default threshold for color-to-alpha if one is not provided\n * during construction or by the imagery provider.\n * @type {number}\n * @default 0.004\n */\nImageryLayer.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD = 0.004;\n\n/**\n * Create a new imagery layer from an asynchronous imagery provider. The layer will handle any asynchronous loads or errors, and begin rendering the imagery layer once ready.\n *\n * @param {Promise<ImageryProvider>} imageryProviderPromise A promise which resolves to a imagery provider\n * @param {ImageryLayer.ConstructorOptions} [options] An object describing initialization options\n * @returns {ImageryLayer} The created imagery layer.\n *\n * @example\n * // Create a new base layer\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   baseLayer: Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));\n * });\n *\n * @example\n * // Add a new transparent layer\n * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));\n * imageryLayer.alpha = 0.5;\n * viewer.imageryLayers.add(imageryLayer);\n *\n * @example\n * // Handle loading events\n * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));\n * viewer.imageryLayers.add(imageryLayer);\n *\n * imageryLayer.readyEvent.addEventListener(provider => {\n *   imageryLayer.imageryProvider.errorEvent.addEventListener(error => {\n *     alert(`Encountered an error while loading imagery tiles! ${error}`);\n *   });\n * });\n *\n * imageryLayer.errorEvent.addEventListener(error => {\n *   alert(`Encountered an error while creating an imagery layer! ${error}`);\n * });\n *\n * @see ImageryLayer#errorEvent\n * @see ImageryLayer#readyEvent\n * @see ImageryLayer#imageryProvider\n * @see ImageryLayer.fromWorldImagery\n */\nImageryLayer.fromProviderAsync = function (imageryProviderPromise, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"imageryProviderPromise\", imageryProviderPromise);\n  //>>includeEnd('debug');\n\n  const layer = new ImageryLayer(undefined, options);\n\n  handlePromise(layer, Promise.resolve(imageryProviderPromise));\n\n  return layer;\n};\n\n/**\n * @typedef {ImageryLayer.ConstructorOptions} ImageryLayer.WorldImageryConstructorOptions\n *\n * Initialization options for ImageryLayer.fromWorldImagery\n *\n * @property {IonWorldImageryStyle} [options.style=IonWorldImageryStyle] The style of base imagery, only AERIAL, AERIAL_WITH_LABELS, and ROAD are currently supported.\n */\n\n/**\n * Create a new imagery layer for ion's default global base imagery layer, currently Bing Maps. The layer will handle any asynchronous loads or errors, and begin rendering the imagery layer once ready.\n *\n * @param {ImageryLayer.WorldImageryConstructorOptions} options An object describing initialization options\n * @returns {ImageryLayer} The created imagery layer.\n *\n * * @example\n * // Create a new base layer\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   baseLayer: Cesium.ImageryLayer.fromWorldImagery();\n * });\n *\n * @example\n * // Add a new transparent layer\n * const imageryLayer = Cesium.ImageryLayer.fromWorldImagery();\n * imageryLayer.alpha = 0.5;\n * viewer.imageryLayers.add(imageryLayer);\n *\n * @example\n * // Handle loading events\n * const imageryLayer = Cesium.ImageryLayer.fromWorldImagery();\n * viewer.imageryLayers.add(imageryLayer);\n *\n * imageryLayer.readyEvent.addEventListener(provider => {\n *   imageryLayer.imageryProvider.errorEvent.addEventListener(error => {\n *     alert(`Encountered an error while loading imagery tiles! ${error}`);\n *   });\n * });\n *\n * imageryLayer.errorEvent.addEventListener(error => {\n *   alert(`Encountered an error while creating an imagery layer! ${error}`);\n * });\n *\n * @see ImageryLayer#errorEvent\n * @see ImageryLayer#readyEvent\n * @see ImageryLayer#imageryProvider\n */\nImageryLayer.fromWorldImagery = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  return ImageryLayer.fromProviderAsync(\n    createWorldImageryAsync({\n      style: options.style,\n    }),\n    options,\n  );\n};\n\n/**\n * Gets a value indicating whether this layer is the base layer in the\n * {@link ImageryLayerCollection}.  The base layer is the one that underlies all\n * others.  It is special in that it is treated as if it has global rectangle, even if\n * it actually does not, by stretching the texels at the edges over the entire\n * globe.\n *\n * @returns {boolean} true if this is the base layer; otherwise, false.\n */\nImageryLayer.prototype.isBaseLayer = function () {\n  return this._isBaseLayer;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see ImageryLayer#destroy\n */\nImageryLayer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * imageryLayer = imageryLayer && imageryLayer.destroy();\n *\n * @see ImageryLayer#isDestroyed\n */\nImageryLayer.prototype.destroy = function () {\n  return destroyObject(this);\n};\n\nconst imageryBoundsScratch = new Rectangle();\nconst tileImageryBoundsScratch = new Rectangle();\nconst clippedRectangleScratch = new Rectangle();\nconst terrainRectangleScratch = new Rectangle();\n\n/**\n * Computes the intersection of this layer's rectangle with the imagery provider's availability rectangle,\n * producing the overall bounds of imagery that can be produced by this layer.\n *\n * @returns {Rectangle} A rectangle which defines the overall bounds of imagery that can be produced by this layer.\n *\n * @example\n * // Zoom to an imagery layer.\n * const imageryRectangle = imageryLayer.getImageryRectangle();\n * scene.camera.flyTo({\n *     destination: rectangle\n * });\n *\n */\nImageryLayer.prototype.getImageryRectangle = function () {\n  const imageryProvider = this._imageryProvider;\n  const rectangle = this._rectangle;\n  return Rectangle.intersection(imageryProvider.rectangle, rectangle);\n};\n\n/**\n * Create skeletons for the imagery tiles that partially or completely overlap a given terrain\n * tile.\n *\n * @private\n *\n * @param {QuadtreeTile} tile The terrain tile.\n * @param {TerrainProvider|undefined} terrainProvider The terrain provider associated with the terrain tile.\n * @param {number} insertionPoint The position to insert new skeletons before in the tile's imagery list.\n * @returns {boolean} true if this layer overlaps any portion of the terrain tile; otherwise, false.\n */\nImageryLayer.prototype._createTileImagerySkeletons = function (\n  tile,\n  terrainProvider,\n  insertionPoint,\n) {\n  const surfaceTile = tile.data;\n\n  if (\n    !defined(terrainProvider) ||\n    (defined(this._minimumTerrainLevel) &&\n      tile.level < this._minimumTerrainLevel)\n  ) {\n    return false;\n  }\n  if (\n    defined(this._maximumTerrainLevel) &&\n    tile.level > this._maximumTerrainLevel\n  ) {\n    return false;\n  }\n\n  if (!defined(insertionPoint)) {\n    insertionPoint = surfaceTile.imagery.length;\n  }\n\n  const imageryProvider = this._imageryProvider;\n  if (!this.ready) {\n    // The imagery provider is not ready, so we can't create skeletons, yet.\n    // Instead, add a placeholder so that we'll know to create\n    // the skeletons once the provider is ready.\n    this._skeletonPlaceholder.loadingImagery.addReference();\n    surfaceTile.imagery.splice(insertionPoint, 0, this._skeletonPlaceholder);\n    return true;\n  }\n\n  // Use Web Mercator for our texture coordinate computations if this imagery layer uses\n  // that projection and the terrain tile falls entirely inside the valid bounds of the\n  // projection.\n  const useWebMercatorT =\n    imageryProvider.tilingScheme.projection instanceof WebMercatorProjection &&\n    tile.rectangle.north < WebMercatorProjection.MaximumLatitude &&\n    tile.rectangle.south > -WebMercatorProjection.MaximumLatitude;\n\n  // Compute the rectangle of the imagery from this imageryProvider that overlaps\n  // the geometry tile.  The ImageryProvider and ImageryLayer both have the\n  // opportunity to constrain the rectangle.  The imagery TilingScheme's rectangle\n  // always fully contains the ImageryProvider's rectangle.\n  const imageryBounds = Rectangle.intersection(\n    imageryProvider.rectangle,\n    this._rectangle,\n    imageryBoundsScratch,\n  );\n  let rectangle = Rectangle.intersection(\n    tile.rectangle,\n    imageryBounds,\n    tileImageryBoundsScratch,\n  );\n\n  if (!defined(rectangle)) {\n    // There is no overlap between this terrain tile and this imagery\n    // provider.  Unless this is the base layer, no skeletons need to be created.\n    // We stretch texels at the edge of the base layer over the entire globe.\n    if (!this.isBaseLayer()) {\n      return false;\n    }\n\n    const baseImageryRectangle = imageryBounds;\n    const baseTerrainRectangle = tile.rectangle;\n    rectangle = tileImageryBoundsScratch;\n\n    if (baseTerrainRectangle.south >= baseImageryRectangle.north) {\n      rectangle.north = rectangle.south = baseImageryRectangle.north;\n    } else if (baseTerrainRectangle.north <= baseImageryRectangle.south) {\n      rectangle.north = rectangle.south = baseImageryRectangle.south;\n    } else {\n      rectangle.south = Math.max(\n        baseTerrainRectangle.south,\n        baseImageryRectangle.south,\n      );\n      rectangle.north = Math.min(\n        baseTerrainRectangle.north,\n        baseImageryRectangle.north,\n      );\n    }\n\n    if (baseTerrainRectangle.west >= baseImageryRectangle.east) {\n      rectangle.west = rectangle.east = baseImageryRectangle.east;\n    } else if (baseTerrainRectangle.east <= baseImageryRectangle.west) {\n      rectangle.west = rectangle.east = baseImageryRectangle.west;\n    } else {\n      rectangle.west = Math.max(\n        baseTerrainRectangle.west,\n        baseImageryRectangle.west,\n      );\n      rectangle.east = Math.min(\n        baseTerrainRectangle.east,\n        baseImageryRectangle.east,\n      );\n    }\n  }\n\n  let latitudeClosestToEquator = 0.0;\n  if (rectangle.south > 0.0) {\n    latitudeClosestToEquator = rectangle.south;\n  } else if (rectangle.north < 0.0) {\n    latitudeClosestToEquator = rectangle.north;\n  }\n\n  // Compute the required level in the imagery tiling scheme.\n  // The errorRatio should really be imagerySSE / terrainSSE rather than this hard-coded value.\n  // But first we need configurable imagery SSE and we need the rendering to be able to handle more\n  // images attached to a terrain tile than there are available texture units.  So that's for the future.\n  const errorRatio = 1.0;\n  const targetGeometricError =\n    errorRatio * terrainProvider.getLevelMaximumGeometricError(tile.level);\n  let imageryLevel = getLevelWithMaximumTexelSpacing(\n    this,\n    targetGeometricError,\n    latitudeClosestToEquator,\n  );\n  imageryLevel = Math.max(0, imageryLevel);\n  const maximumLevel = imageryProvider.maximumLevel;\n  if (imageryLevel > maximumLevel) {\n    imageryLevel = maximumLevel;\n  }\n\n  if (defined(imageryProvider.minimumLevel)) {\n    const minimumLevel = imageryProvider.minimumLevel;\n    if (imageryLevel < minimumLevel) {\n      imageryLevel = minimumLevel;\n    }\n  }\n\n  const imageryTilingScheme = imageryProvider.tilingScheme;\n  const northwestTileCoordinates = imageryTilingScheme.positionToTileXY(\n    Rectangle.northwest(rectangle),\n    imageryLevel,\n  );\n  const southeastTileCoordinates = imageryTilingScheme.positionToTileXY(\n    Rectangle.southeast(rectangle),\n    imageryLevel,\n  );\n\n  // If the southeast corner of the rectangle lies very close to the north or west side\n  // of the southeast tile, we don't actually need the southernmost or easternmost\n  // tiles.\n  // Similarly, if the northwest corner of the rectangle lies very close to the south or east side\n  // of the northwest tile, we don't actually need the northernmost or westernmost tiles.\n\n  // We define \"very close\" as being within 1/512 of the width of the tile.\n  let veryCloseX = tile.rectangle.width / 512.0;\n  let veryCloseY = tile.rectangle.height / 512.0;\n\n  const northwestTileRectangle = imageryTilingScheme.tileXYToRectangle(\n    northwestTileCoordinates.x,\n    northwestTileCoordinates.y,\n    imageryLevel,\n  );\n  if (\n    Math.abs(northwestTileRectangle.south - tile.rectangle.north) <\n      veryCloseY &&\n    northwestTileCoordinates.y < southeastTileCoordinates.y\n  ) {\n    ++northwestTileCoordinates.y;\n  }\n  if (\n    Math.abs(northwestTileRectangle.east - tile.rectangle.west) < veryCloseX &&\n    northwestTileCoordinates.x < southeastTileCoordinates.x\n  ) {\n    ++northwestTileCoordinates.x;\n  }\n\n  const southeastTileRectangle = imageryTilingScheme.tileXYToRectangle(\n    southeastTileCoordinates.x,\n    southeastTileCoordinates.y,\n    imageryLevel,\n  );\n  if (\n    Math.abs(southeastTileRectangle.north - tile.rectangle.south) <\n      veryCloseY &&\n    southeastTileCoordinates.y > northwestTileCoordinates.y\n  ) {\n    --southeastTileCoordinates.y;\n  }\n  if (\n    Math.abs(southeastTileRectangle.west - tile.rectangle.east) < veryCloseX &&\n    southeastTileCoordinates.x > northwestTileCoordinates.x\n  ) {\n    --southeastTileCoordinates.x;\n  }\n\n  // Create TileImagery instances for each imagery tile overlapping this terrain tile.\n  // We need to do all texture coordinate computations in the imagery tile's tiling scheme.\n\n  const terrainRectangle = Rectangle.clone(\n    tile.rectangle,\n    terrainRectangleScratch,\n  );\n  let imageryRectangle = imageryTilingScheme.tileXYToRectangle(\n    northwestTileCoordinates.x,\n    northwestTileCoordinates.y,\n    imageryLevel,\n  );\n  let clippedImageryRectangle = Rectangle.intersection(\n    imageryRectangle,\n    imageryBounds,\n    clippedRectangleScratch,\n  );\n\n  let imageryTileXYToRectangle;\n  if (useWebMercatorT) {\n    imageryTilingScheme.rectangleToNativeRectangle(\n      terrainRectangle,\n      terrainRectangle,\n    );\n    imageryTilingScheme.rectangleToNativeRectangle(\n      imageryRectangle,\n      imageryRectangle,\n    );\n    imageryTilingScheme.rectangleToNativeRectangle(\n      clippedImageryRectangle,\n      clippedImageryRectangle,\n    );\n    imageryTilingScheme.rectangleToNativeRectangle(\n      imageryBounds,\n      imageryBounds,\n    );\n    imageryTileXYToRectangle =\n      imageryTilingScheme.tileXYToNativeRectangle.bind(imageryTilingScheme);\n    veryCloseX = terrainRectangle.width / 512.0;\n    veryCloseY = terrainRectangle.height / 512.0;\n  } else {\n    imageryTileXYToRectangle =\n      imageryTilingScheme.tileXYToRectangle.bind(imageryTilingScheme);\n  }\n\n  let minU;\n  let maxU = 0.0;\n\n  let minV = 1.0;\n  let maxV;\n\n  // If this is the northern-most or western-most tile in the imagery tiling scheme,\n  // it may not start at the northern or western edge of the terrain tile.\n  // Calculate where it does start.\n  if (\n    !this.isBaseLayer() &&\n    Math.abs(clippedImageryRectangle.west - terrainRectangle.west) >= veryCloseX\n  ) {\n    maxU = Math.min(\n      1.0,\n      (clippedImageryRectangle.west - terrainRectangle.west) /\n        terrainRectangle.width,\n    );\n  }\n\n  if (\n    !this.isBaseLayer() &&\n    Math.abs(clippedImageryRectangle.north - terrainRectangle.north) >=\n      veryCloseY\n  ) {\n    minV = Math.max(\n      0.0,\n      (clippedImageryRectangle.north - terrainRectangle.south) /\n        terrainRectangle.height,\n    );\n  }\n\n  const initialMinV = minV;\n\n  for (\n    let i = northwestTileCoordinates.x;\n    i <= southeastTileCoordinates.x;\n    i++\n  ) {\n    minU = maxU;\n\n    imageryRectangle = imageryTileXYToRectangle(\n      i,\n      northwestTileCoordinates.y,\n      imageryLevel,\n    );\n    clippedImageryRectangle = Rectangle.simpleIntersection(\n      imageryRectangle,\n      imageryBounds,\n      clippedRectangleScratch,\n    );\n\n    if (!defined(clippedImageryRectangle)) {\n      continue;\n    }\n\n    maxU = Math.min(\n      1.0,\n      (clippedImageryRectangle.east - terrainRectangle.west) /\n        terrainRectangle.width,\n    );\n\n    // If this is the eastern-most imagery tile mapped to this terrain tile,\n    // and there are more imagery tiles to the east of this one, the maxU\n    // should be 1.0 to make sure rounding errors don't make the last\n    // image fall shy of the edge of the terrain tile.\n    if (\n      i === southeastTileCoordinates.x &&\n      (this.isBaseLayer() ||\n        Math.abs(clippedImageryRectangle.east - terrainRectangle.east) <\n          veryCloseX)\n    ) {\n      maxU = 1.0;\n    }\n\n    minV = initialMinV;\n\n    for (\n      let j = northwestTileCoordinates.y;\n      j <= southeastTileCoordinates.y;\n      j++\n    ) {\n      maxV = minV;\n\n      imageryRectangle = imageryTileXYToRectangle(i, j, imageryLevel);\n      clippedImageryRectangle = Rectangle.simpleIntersection(\n        imageryRectangle,\n        imageryBounds,\n        clippedRectangleScratch,\n      );\n\n      if (!defined(clippedImageryRectangle)) {\n        continue;\n      }\n\n      minV = Math.max(\n        0.0,\n        (clippedImageryRectangle.south - terrainRectangle.south) /\n          terrainRectangle.height,\n      );\n\n      // If this is the southern-most imagery tile mapped to this terrain tile,\n      // and there are more imagery tiles to the south of this one, the minV\n      // should be 0.0 to make sure rounding errors don't make the last\n      // image fall shy of the edge of the terrain tile.\n      if (\n        j === southeastTileCoordinates.y &&\n        (this.isBaseLayer() ||\n          Math.abs(clippedImageryRectangle.south - terrainRectangle.south) <\n            veryCloseY)\n      ) {\n        minV = 0.0;\n      }\n\n      const texCoordsRectangle = new Cartesian4(minU, minV, maxU, maxV);\n      const imagery = this.getImageryFromCache(i, j, imageryLevel);\n      surfaceTile.imagery.splice(\n        insertionPoint,\n        0,\n        new TileImagery(imagery, texCoordsRectangle, useWebMercatorT),\n      );\n      ++insertionPoint;\n    }\n  }\n\n  return true;\n};\n\n/**\n * Calculate the translation and scale for a particular {@link TileImagery} attached to a\n * particular terrain tile.\n *\n * @private\n *\n * @param {Tile} tile The terrain tile.\n * @param {TileImagery} tileImagery The imagery tile mapping.\n * @returns {Cartesian4} The translation and scale where X and Y are the translation and Z and W\n *          are the scale.\n */\nImageryLayer.prototype._calculateTextureTranslationAndScale = function (\n  tile,\n  tileImagery,\n) {\n  let imageryRectangle = tileImagery.readyImagery.rectangle;\n  let terrainRectangle = tile.rectangle;\n\n  if (tileImagery.useWebMercatorT) {\n    const tilingScheme =\n      tileImagery.readyImagery.imageryLayer.imageryProvider.tilingScheme;\n    imageryRectangle = tilingScheme.rectangleToNativeRectangle(\n      imageryRectangle,\n      imageryBoundsScratch,\n    );\n    terrainRectangle = tilingScheme.rectangleToNativeRectangle(\n      terrainRectangle,\n      terrainRectangleScratch,\n    );\n  }\n\n  const terrainWidth = terrainRectangle.width;\n  const terrainHeight = terrainRectangle.height;\n\n  const scaleX = terrainWidth / imageryRectangle.width;\n  const scaleY = terrainHeight / imageryRectangle.height;\n  return new Cartesian4(\n    (scaleX * (terrainRectangle.west - imageryRectangle.west)) / terrainWidth,\n    (scaleY * (terrainRectangle.south - imageryRectangle.south)) /\n      terrainHeight,\n    scaleX,\n    scaleY,\n  );\n};\n\n/**\n * Request a particular piece of imagery from the imagery provider.  This method handles raising an\n * error event if the request fails, and retrying the request if necessary.\n *\n * @private\n *\n * @param {Imagery} imagery The imagery to request.\n */\nImageryLayer.prototype._requestImagery = function (imagery) {\n  const imageryProvider = this._imageryProvider;\n\n  const that = this;\n\n  function success(image) {\n    if (!defined(image)) {\n      return failure();\n    }\n\n    imagery.image = image;\n    imagery.state = ImageryState.RECEIVED;\n    imagery.request = undefined;\n\n    TileProviderError.reportSuccess(that._requestImageError);\n  }\n\n  function failure(e) {\n    if (imagery.request.state === RequestState.CANCELLED) {\n      // Cancelled due to low priority - try again later.\n      imagery.state = ImageryState.UNLOADED;\n      imagery.request = undefined;\n      return;\n    }\n\n    // Initially assume failure. An error handler may retry, in which case the state will\n    // change to TRANSITIONING.\n    imagery.state = ImageryState.FAILED;\n    imagery.request = undefined;\n\n    const message = `Failed to obtain image tile X: ${imagery.x} Y: ${imagery.y} Level: ${imagery.level}.`;\n    that._requestImageError = TileProviderError.reportError(\n      that._requestImageError,\n      imageryProvider,\n      imageryProvider.errorEvent,\n      message,\n      imagery.x,\n      imagery.y,\n      imagery.level,\n      e,\n    );\n    if (that._requestImageError.retry) {\n      doRequest();\n    }\n  }\n\n  function doRequest() {\n    const request = new Request({\n      throttle: false,\n      throttleByServer: true,\n      type: RequestType.IMAGERY,\n    });\n    imagery.request = request;\n    imagery.state = ImageryState.TRANSITIONING;\n    const imagePromise = imageryProvider.requestImage(\n      imagery.x,\n      imagery.y,\n      imagery.level,\n      request,\n    );\n\n    if (!defined(imagePromise)) {\n      // Too many parallel requests, so postpone loading tile.\n      imagery.state = ImageryState.UNLOADED;\n      imagery.request = undefined;\n      return;\n    }\n\n    if (defined(imageryProvider.getTileCredits)) {\n      imagery.credits = imageryProvider.getTileCredits(\n        imagery.x,\n        imagery.y,\n        imagery.level,\n      );\n    }\n\n    imagePromise\n      .then(function (image) {\n        success(image);\n      })\n      .catch(function (e) {\n        failure(e);\n      });\n  }\n\n  doRequest();\n};\n\nImageryLayer.prototype._createTextureWebGL = function (context, imagery) {\n  const sampler = new Sampler({\n    minificationFilter: this.minificationFilter,\n    magnificationFilter: this.magnificationFilter,\n  });\n\n  const image = imagery.image;\n\n  if (defined(image.internalFormat)) {\n    return new Texture({\n      context: context,\n      pixelFormat: image.internalFormat,\n      width: image.width,\n      height: image.height,\n      source: {\n        arrayBufferView: image.bufferView,\n      },\n      sampler: sampler,\n    });\n  }\n  return new Texture({\n    context: context,\n    source: image,\n    pixelFormat: this._imageryProvider.hasAlphaChannel\n      ? PixelFormat.RGBA\n      : PixelFormat.RGB,\n    sampler: sampler,\n  });\n};\n\n/**\n * Create a WebGL texture for a given {@link Imagery} instance.\n *\n * @private\n *\n * @param {Context} context The rendered context to use to create textures.\n * @param {Imagery} imagery The imagery for which to create a texture.\n */\nImageryLayer.prototype._createTexture = function (context, imagery) {\n  const imageryProvider = this._imageryProvider;\n  const image = imagery.image;\n\n  // If this imagery provider has a discard policy, use it to check if this\n  // image should be discarded.\n  if (defined(imageryProvider.tileDiscardPolicy)) {\n    const discardPolicy = imageryProvider.tileDiscardPolicy;\n    if (defined(discardPolicy)) {\n      // If the discard policy is not ready yet, transition back to the\n      // RECEIVED state and we'll try again next time.\n      if (!discardPolicy.isReady()) {\n        imagery.state = ImageryState.RECEIVED;\n        return;\n      }\n\n      // Mark discarded imagery tiles invalid.  Parent imagery will be used instead.\n      if (discardPolicy.shouldDiscardImage(image)) {\n        imagery.state = ImageryState.INVALID;\n        return;\n      }\n    }\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    this.minificationFilter !== TextureMinificationFilter.NEAREST &&\n    this.minificationFilter !== TextureMinificationFilter.LINEAR\n  ) {\n    throw new DeveloperError(\n      \"ImageryLayer minification filter must be NEAREST or LINEAR\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  // Imagery does not need to be discarded, so upload it to WebGL.\n  const texture = this._createTextureWebGL(context, imagery);\n\n  if (\n    imageryProvider.tilingScheme.projection instanceof WebMercatorProjection\n  ) {\n    imagery.textureWebMercator = texture;\n  } else {\n    imagery.texture = texture;\n  }\n  imagery.image = undefined;\n  imagery.state = ImageryState.TEXTURE_LOADED;\n};\n\nfunction getSamplerKey(\n  minificationFilter,\n  magnificationFilter,\n  maximumAnisotropy,\n) {\n  return `${minificationFilter}:${magnificationFilter}:${maximumAnisotropy}`;\n}\n\nImageryLayer.prototype._finalizeReprojectTexture = function (context, texture) {\n  let minificationFilter = this.minificationFilter;\n  const magnificationFilter = this.magnificationFilter;\n  const usesLinearTextureFilter =\n    minificationFilter === TextureMinificationFilter.LINEAR &&\n    magnificationFilter === TextureMagnificationFilter.LINEAR;\n  // Use mipmaps if this texture has power-of-two dimensions.\n  // In addition, mipmaps are only generated if the texture filters are both LINEAR.\n  if (\n    usesLinearTextureFilter &&\n    !PixelFormat.isCompressedFormat(texture.pixelFormat) &&\n    CesiumMath.isPowerOfTwo(texture.width) &&\n    CesiumMath.isPowerOfTwo(texture.height)\n  ) {\n    minificationFilter = TextureMinificationFilter.LINEAR_MIPMAP_LINEAR;\n    const maximumSupportedAnisotropy =\n      ContextLimits.maximumTextureFilterAnisotropy;\n    const maximumAnisotropy = Math.min(\n      maximumSupportedAnisotropy,\n      this._maximumAnisotropy ?? maximumSupportedAnisotropy,\n    );\n    const mipmapSamplerKey = getSamplerKey(\n      minificationFilter,\n      magnificationFilter,\n      maximumAnisotropy,\n    );\n    let mipmapSamplers = context.cache.imageryLayerMipmapSamplers;\n    if (!defined(mipmapSamplers)) {\n      mipmapSamplers = {};\n      context.cache.imageryLayerMipmapSamplers = mipmapSamplers;\n    }\n    let mipmapSampler = mipmapSamplers[mipmapSamplerKey];\n    if (!defined(mipmapSampler)) {\n      mipmapSampler = mipmapSamplers[mipmapSamplerKey] = new Sampler({\n        wrapS: TextureWrap.CLAMP_TO_EDGE,\n        wrapT: TextureWrap.CLAMP_TO_EDGE,\n        minificationFilter: minificationFilter,\n        magnificationFilter: magnificationFilter,\n        maximumAnisotropy: maximumAnisotropy,\n      });\n    }\n    texture.generateMipmap(MipmapHint.NICEST);\n    texture.sampler = mipmapSampler;\n  } else {\n    const nonMipmapSamplerKey = getSamplerKey(\n      minificationFilter,\n      magnificationFilter,\n      0,\n    );\n    let nonMipmapSamplers = context.cache.imageryLayerNonMipmapSamplers;\n    if (!defined(nonMipmapSamplers)) {\n      nonMipmapSamplers = {};\n      context.cache.imageryLayerNonMipmapSamplers = nonMipmapSamplers;\n    }\n    let nonMipmapSampler = nonMipmapSamplers[nonMipmapSamplerKey];\n    if (!defined(nonMipmapSampler)) {\n      nonMipmapSampler = nonMipmapSamplers[nonMipmapSamplerKey] = new Sampler({\n        wrapS: TextureWrap.CLAMP_TO_EDGE,\n        wrapT: TextureWrap.CLAMP_TO_EDGE,\n        minificationFilter: minificationFilter,\n        magnificationFilter: magnificationFilter,\n      });\n    }\n    texture.sampler = nonMipmapSampler;\n  }\n};\n\n/**\n * Enqueues a command re-projecting a texture to a {@link GeographicProjection} on the next update, if necessary, and generate\n * mipmaps for the geographic texture.\n *\n * @private\n *\n * @param {FrameState} frameState The frameState.\n * @param {Imagery} imagery The imagery instance to reproject.\n * @param {boolean} [needGeographicProjection=true] True to reproject to geographic, or false if Web Mercator is fine.\n */\nImageryLayer.prototype._reprojectTexture = function (\n  frameState,\n  imagery,\n  needGeographicProjection,\n) {\n  const texture = imagery.textureWebMercator || imagery.texture;\n  const rectangle = imagery.rectangle;\n  const context = frameState.context;\n\n  needGeographicProjection = needGeographicProjection ?? true;\n\n  // Reproject this texture if it is not already in a geographic projection and\n  // the pixels are more than 1e-5 radians apart.  The pixel spacing cutoff\n  // avoids precision problems in the reprojection transformation while making\n  // no noticeable difference in the georeferencing of the image.\n  if (\n    needGeographicProjection &&\n    !(\n      this._imageryProvider.tilingScheme.projection instanceof\n      GeographicProjection\n    ) &&\n    rectangle.width / texture.width > 1e-5\n  ) {\n    const that = this;\n    imagery.addReference();\n    const computeCommand = new ComputeCommand({\n      persists: true,\n      owner: this,\n      // Update render resources right before execution instead of now.\n      // This allows different ImageryLayers to share the same vao and buffers.\n      preExecute: function (command) {\n        reprojectToGeographic(command, context, texture, imagery.rectangle);\n      },\n      postExecute: function (outputTexture) {\n        imagery.texture = outputTexture;\n        that._finalizeReprojectTexture(context, outputTexture);\n        imagery.state = ImageryState.READY;\n        imagery.releaseReference();\n      },\n      canceled: function () {\n        imagery.state = ImageryState.TEXTURE_LOADED;\n        imagery.releaseReference();\n      },\n    });\n    this._reprojectComputeCommands.push(computeCommand);\n  } else {\n    if (needGeographicProjection) {\n      imagery.texture = texture;\n    }\n    this._finalizeReprojectTexture(context, texture);\n    imagery.state = ImageryState.READY;\n  }\n};\n\n/**\n * Updates frame state to execute any queued texture re-projections.\n *\n * @private\n *\n * @param {FrameState} frameState The frameState.\n */\nImageryLayer.prototype.queueReprojectionCommands = function (frameState) {\n  const computeCommands = this._reprojectComputeCommands;\n  const length = computeCommands.length;\n  for (let i = 0; i < length; ++i) {\n    frameState.commandList.push(computeCommands[i]);\n  }\n  computeCommands.length = 0;\n};\n\n/**\n * Cancels re-projection commands queued for the next frame.\n *\n * @private\n */\nImageryLayer.prototype.cancelReprojections = function () {\n  this._reprojectComputeCommands.forEach(function (command) {\n    if (defined(command.canceled)) {\n      command.canceled();\n    }\n  });\n  this._reprojectComputeCommands.length = 0;\n};\n\nImageryLayer.prototype.getImageryFromCache = function (\n  x,\n  y,\n  level,\n  imageryRectangle,\n) {\n  const cacheKey = getImageryCacheKey(x, y, level);\n  let imagery = this._imageryCache[cacheKey];\n\n  if (!defined(imagery)) {\n    imagery = new Imagery(this, x, y, level, imageryRectangle);\n    this._imageryCache[cacheKey] = imagery;\n  }\n\n  imagery.addReference();\n  return imagery;\n};\n\nImageryLayer.prototype.removeImageryFromCache = function (imagery) {\n  const cacheKey = getImageryCacheKey(imagery.x, imagery.y, imagery.level);\n  delete this._imageryCache[cacheKey];\n};\n\nfunction getImageryCacheKey(x, y, level) {\n  return JSON.stringify([x, y, level]);\n}\n\nconst uniformMap = {\n  u_textureDimensions: function () {\n    return this.textureDimensions;\n  },\n  u_texture: function () {\n    return this.texture;\n  },\n\n  textureDimensions: new Cartesian2(),\n  texture: undefined,\n};\n\nconst float32ArrayScratch = FeatureDetection.supportsTypedArrays()\n  ? new Float32Array(2 * 64)\n  : undefined;\n\nfunction reprojectToGeographic(command, context, texture, rectangle) {\n  // This function has gone through a number of iterations, because GPUs are awesome.\n  //\n  // Originally, we had a very simple vertex shader and computed the Web Mercator texture coordinates\n  // per-fragment in the fragment shader.  That worked well, except on mobile devices, because\n  // fragment shaders have limited precision on many mobile devices.  The result was smearing artifacts\n  // at medium zoom levels because different geographic texture coordinates would be reprojected to Web\n  // Mercator as the same value.\n  //\n  // Our solution was to reproject to Web Mercator in the vertex shader instead of the fragment shader.\n  // This required far more vertex data.  With fragment shader reprojection, we only needed a single quad.\n  // But to achieve the same precision with vertex shader reprojection, we needed a vertex for each\n  // output pixel.  So we used a grid of 256x256 vertices, because most of our imagery\n  // tiles are 256x256.  Fortunately the grid could be created and uploaded to the GPU just once and\n  // re-used for all reprojections, so the performance was virtually unchanged from our original fragment\n  // shader approach.  See https://github.com/CesiumGS/cesium/pull/714.\n  //\n  // Over a year later, we noticed (https://github.com/CesiumGS/cesium/issues/2110)\n  // that our reprojection code was creating a rare but severe artifact on some GPUs (Intel HD 4600\n  // for one).  The problem was that the GLSL sin function on these GPUs had a discontinuity at fine scales in\n  // a few places.\n  //\n  // We solved this by implementing a more reliable sin function based on the CORDIC algorithm\n  // (https://github.com/CesiumGS/cesium/pull/2111).  Even though this was a fair\n  // amount of code to be executing per vertex, the performance seemed to be pretty good on most GPUs.\n  // Unfortunately, on some GPUs, the performance was absolutely terrible\n  // (https://github.com/CesiumGS/cesium/issues/2258).\n  //\n  // So that brings us to our current solution, the one you see here.  Effectively, we compute the Web\n  // Mercator texture coordinates on the CPU and store the T coordinate with each vertex (the S coordinate\n  // is the same in Geographic and Web Mercator).  To make this faster, we reduced our reprojection mesh\n  // to be only 2 vertices wide and 64 vertices high.  We should have reduced the width to 2 sooner,\n  // because the extra vertices weren't buying us anything.  The height of 64 means we are technically\n  // doing a slightly less accurate reprojection than we were before, but we can't see the difference\n  // so it's worth the 4x speedup.\n\n  let reproject = context.cache.imageryLayer_reproject;\n\n  if (!defined(reproject)) {\n    reproject = context.cache.imageryLayer_reproject = {\n      vertexArray: undefined,\n      shaderProgram: undefined,\n      sampler: undefined,\n      destroy: function () {\n        if (defined(this.framebuffer)) {\n          this.framebuffer.destroy();\n        }\n        if (defined(this.vertexArray)) {\n          this.vertexArray.destroy();\n        }\n        if (defined(this.shaderProgram)) {\n          this.shaderProgram.destroy();\n        }\n      },\n    };\n\n    const positions = new Float32Array(2 * 64 * 2);\n    let index = 0;\n    for (let j = 0; j < 64; ++j) {\n      const y = j / 63.0;\n      positions[index++] = 0.0;\n      positions[index++] = y;\n      positions[index++] = 1.0;\n      positions[index++] = y;\n    }\n\n    const reprojectAttributeIndices = {\n      position: 0,\n      webMercatorT: 1,\n    };\n\n    const indices = TerrainProvider.getRegularGridIndices(2, 64);\n    const indexBuffer = Buffer.createIndexBuffer({\n      context: context,\n      typedArray: indices,\n      usage: BufferUsage.STATIC_DRAW,\n      indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n    });\n\n    reproject.vertexArray = new VertexArray({\n      context: context,\n      attributes: [\n        {\n          index: reprojectAttributeIndices.position,\n          vertexBuffer: Buffer.createVertexBuffer({\n            context: context,\n            typedArray: positions,\n            usage: BufferUsage.STATIC_DRAW,\n          }),\n          componentsPerAttribute: 2,\n        },\n        {\n          index: reprojectAttributeIndices.webMercatorT,\n          vertexBuffer: Buffer.createVertexBuffer({\n            context: context,\n            sizeInBytes: 64 * 2 * 4,\n            usage: BufferUsage.STREAM_DRAW,\n          }),\n          componentsPerAttribute: 1,\n        },\n      ],\n      indexBuffer: indexBuffer,\n    });\n\n    const vs = new ShaderSource({\n      sources: [ReprojectWebMercatorVS],\n    });\n\n    reproject.shaderProgram = ShaderProgram.fromCache({\n      context: context,\n      vertexShaderSource: vs,\n      fragmentShaderSource: ReprojectWebMercatorFS,\n      attributeLocations: reprojectAttributeIndices,\n    });\n\n    reproject.sampler = new Sampler({\n      wrapS: TextureWrap.CLAMP_TO_EDGE,\n      wrapT: TextureWrap.CLAMP_TO_EDGE,\n      minificationFilter: TextureMinificationFilter.LINEAR,\n      magnificationFilter: TextureMagnificationFilter.LINEAR,\n    });\n  }\n\n  texture.sampler = reproject.sampler;\n\n  const width = texture.width;\n  const height = texture.height;\n\n  uniformMap.textureDimensions.x = width;\n  uniformMap.textureDimensions.y = height;\n  uniformMap.texture = texture;\n\n  let sinLatitude = Math.sin(rectangle.south);\n  const southMercatorY = 0.5 * Math.log((1 + sinLatitude) / (1 - sinLatitude));\n\n  sinLatitude = Math.sin(rectangle.north);\n  const northMercatorY = 0.5 * Math.log((1 + sinLatitude) / (1 - sinLatitude));\n  const oneOverMercatorHeight = 1.0 / (northMercatorY - southMercatorY);\n\n  const outputTexture = new Texture({\n    context: context,\n    width: width,\n    height: height,\n    pixelFormat: texture.pixelFormat,\n    pixelDatatype: texture.pixelDatatype,\n    preMultiplyAlpha: texture.preMultiplyAlpha,\n  });\n\n  // Allocate memory for the mipmaps.  Failure to do this before rendering\n  // to the texture via the FBO, and calling generateMipmap later,\n  // will result in the texture appearing blank.  I can't pretend to\n  // understand exactly why this is.\n  if (CesiumMath.isPowerOfTwo(width) && CesiumMath.isPowerOfTwo(height)) {\n    outputTexture.generateMipmap(MipmapHint.NICEST);\n  }\n\n  const south = rectangle.south;\n  const north = rectangle.north;\n\n  const webMercatorT = float32ArrayScratch;\n\n  let outputIndex = 0;\n  for (let webMercatorTIndex = 0; webMercatorTIndex < 64; ++webMercatorTIndex) {\n    const fraction = webMercatorTIndex / 63.0;\n    const latitude = CesiumMath.lerp(south, north, fraction);\n    sinLatitude = Math.sin(latitude);\n    const mercatorY = 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\n    const mercatorFraction =\n      (mercatorY - southMercatorY) * oneOverMercatorHeight;\n    webMercatorT[outputIndex++] = mercatorFraction;\n    webMercatorT[outputIndex++] = mercatorFraction;\n  }\n\n  reproject.vertexArray\n    .getAttribute(1)\n    .vertexBuffer.copyFromArrayView(webMercatorT);\n\n  command.shaderProgram = reproject.shaderProgram;\n  command.outputTexture = outputTexture;\n  command.uniformMap = uniformMap;\n  command.vertexArray = reproject.vertexArray;\n}\n\n/**\n * Gets the level with the specified world coordinate spacing between texels, or less.\n *\n * @param {ImageryLayer} layer The imagery layer to use.\n * @param {number} texelSpacing The texel spacing for which to find a corresponding level.\n * @param {number} latitudeClosestToEquator The latitude closest to the equator that we're concerned with.\n * @returns {number} The level with the specified texel spacing or less.\n * @private\n */\nfunction getLevelWithMaximumTexelSpacing(\n  layer,\n  texelSpacing,\n  latitudeClosestToEquator,\n) {\n  // PERFORMANCE_IDEA: factor out the stuff that doesn't change.\n  const imageryProvider = layer._imageryProvider;\n  const tilingScheme = imageryProvider.tilingScheme;\n  const ellipsoid = tilingScheme.ellipsoid;\n  const latitudeFactor = !(\n    layer._imageryProvider.tilingScheme.projection instanceof\n    GeographicProjection\n  )\n    ? Math.cos(latitudeClosestToEquator)\n    : 1.0;\n  const tilingSchemeRectangle = tilingScheme.rectangle;\n  const levelZeroMaximumTexelSpacing =\n    (ellipsoid.maximumRadius * tilingSchemeRectangle.width * latitudeFactor) /\n    (imageryProvider.tileWidth * tilingScheme.getNumberOfXTilesAtLevel(0));\n\n  const twoToTheLevelPower = levelZeroMaximumTexelSpacing / texelSpacing;\n  const level = Math.log(twoToTheLevelPower) / Math.log(2);\n  const rounded = Math.round(level);\n  return rounded | 0;\n}\n\nfunction handleError(errorEvent, error) {\n  if (errorEvent.numberOfListeners > 0) {\n    errorEvent.raiseEvent(error);\n  } else {\n    // Default handler is to log to the console\n    console.error(error);\n  }\n}\n\nasync function handlePromise(instance, promise) {\n  let provider;\n  try {\n    provider = await Promise.resolve(promise);\n    if (instance.isDestroyed()) {\n      return;\n    }\n    instance._imageryProvider = provider;\n    instance._readyEvent.raiseEvent(provider);\n  } catch (error) {\n    handleError(instance._errorEvent, error);\n  }\n}\n\nexport default ImageryLayer;\n\n/**\n * A function that is called when an error occurs.\n * @callback ImageryLayer.ErrorEventCallback\n *\n * @this ImageryLayer\n * @param {Error} err An object holding details about the error that occurred.\n */\n\n/**\n * A function that is called when the provider has been created\n * @callback ImageryLayer.ReadyEventCallback\n *\n * @this ImageryLayer\n * @param {ImageryProvider} provider The created imagery provider.\n */\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport ImageryLayer from \"./ImageryLayer.js\";\n\n/**\n * An ordered collection of imagery layers for rendering raster imagery on a {@link Globe} or {@link Cesium3DTileset}.\n *\n * @alias ImageryLayerCollection\n * @constructor\n * @see {@link Scene#imageryLayers} for manipulating imagery layers on the globe.\n * @see {@link Cesium3DTileset#imageryLayers} for manipulating imagery layers on a 3D tileset.\n * @demo {@link https://sandcastle.cesium.com/index.html?id=imagery-adjustment|Cesium Sandcastle Imagery Adjustment Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?id=imagery-layers-manipulation|Cesium Sandcastle Imagery Manipulation Demo}\n */\nfunction ImageryLayerCollection() {\n  this._layers = [];\n\n  /**\n   * An event that is raised when a layer is added to the collection.  Event handlers are passed the layer that\n   * was added and the index at which it was added.\n   * @type {Event}\n   * @default Event()\n   */\n  this.layerAdded = new Event();\n\n  /**\n   * An event that is raised when a layer is removed from the collection.  Event handlers are passed the layer that\n   * was removed and the index from which it was removed.\n   * @type {Event}\n   * @default Event()\n   */\n  this.layerRemoved = new Event();\n\n  /**\n   * An event that is raised when a layer changes position in the collection.  Event handlers are passed the layer that\n   * was moved, its new index after the move, and its old index prior to the move.\n   * @type {Event}\n   * @default Event()\n   */\n  this.layerMoved = new Event();\n\n  /**\n   * An event that is raised when a layer is shown or hidden by setting the\n   * {@link ImageryLayer#show} property.  Event handlers are passed a reference to this layer,\n   * the index of the layer in the collection, and a flag that is true if the layer is now\n   * shown or false if it is now hidden.\n   *\n   * @type {Event}\n   * @default Event()\n   */\n  this.layerShownOrHidden = new Event();\n}\n\nObject.defineProperties(ImageryLayerCollection.prototype, {\n  /**\n   * Gets the number of layers in this collection.\n   * @memberof ImageryLayerCollection.prototype\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      return this._layers.length;\n    },\n  },\n});\n\n/**\n * Adds a layer to the collection.\n *\n * @param {ImageryLayer} layer the layer to add.\n * @param {number} [index] the index to add the layer at.  If omitted, the layer will\n *                         be added on top of all existing layers.\n *\n * @exception {DeveloperError} index, if supplied, must be greater than or equal to zero and less than or equal to the number of the layers.\n *\n * @example\n * const imageryLayer = Cesium.ImageryLayer.fromWorldImagery();\n * scene.imageryLayers.add(imageryLayer);\n *\n * @example\n * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));\n * scene.imageryLayers.add(imageryLayer);\n */\nImageryLayerCollection.prototype.add = function (layer, index) {\n  const hasIndex = defined(index);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(layer)) {\n    throw new DeveloperError(\"layer is required.\");\n  }\n  if (hasIndex) {\n    if (index < 0) {\n      throw new DeveloperError(\"index must be greater than or equal to zero.\");\n    } else if (index > this._layers.length) {\n      throw new DeveloperError(\n        \"index must be less than or equal to the number of layers.\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  if (!hasIndex) {\n    index = this._layers.length;\n    this._layers.push(layer);\n  } else {\n    this._layers.splice(index, 0, layer);\n  }\n\n  this._update();\n  this.layerAdded.raiseEvent(layer, index);\n  const removeReadyEventListener = layer.readyEvent.addEventListener(() => {\n    this.layerShownOrHidden.raiseEvent(layer, layer._layerIndex, layer.show);\n    removeReadyEventListener();\n  });\n};\n\n/**\n * Creates a new layer using the given ImageryProvider and adds it to the collection.\n *\n * @param {ImageryProvider} imageryProvider the imagery provider to create a new layer for.\n * @param {number} [index] the index to add the layer at.  If omitted, the layer will\n *                         added on top of all existing layers.\n * @returns {ImageryLayer} The newly created layer.\n *\n * @example\n * try {\n *    const provider = await Cesium.IonImageryProvider.fromAssetId(3812);\n *    scene.imageryLayers.addImageryProvider(provider);\n * } catch (error) {\n *   console.log(`There was an error creating the imagery layer. ${error}`)\n * }\n */\nImageryLayerCollection.prototype.addImageryProvider = function (\n  imageryProvider,\n  index,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(imageryProvider)) {\n    throw new DeveloperError(\"imageryProvider is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const layer = new ImageryLayer(imageryProvider);\n  this.add(layer, index);\n  return layer;\n};\n\n/**\n * Removes a layer from this collection, if present.\n *\n * @param {ImageryLayer} layer The layer to remove.\n * @param {boolean} [destroy=true] whether to destroy the layers in addition to removing them.\n * @returns {boolean} true if the layer was in the collection and was removed,\n *                    false if the layer was not in the collection.\n */\nImageryLayerCollection.prototype.remove = function (layer, destroy) {\n  destroy = destroy ?? true;\n\n  const index = this._layers.indexOf(layer);\n  if (index !== -1) {\n    this._layers.splice(index, 1);\n\n    this._update();\n\n    this.layerRemoved.raiseEvent(layer, index);\n\n    if (destroy) {\n      layer.destroy();\n    }\n\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all layers from this collection.\n *\n * @param {boolean} [destroy=true] whether to destroy the layers in addition to removing them.\n */\nImageryLayerCollection.prototype.removeAll = function (destroy) {\n  destroy = destroy ?? true;\n\n  const layers = this._layers;\n  for (let i = 0, len = layers.length; i < len; i++) {\n    const layer = layers[i];\n    this.layerRemoved.raiseEvent(layer, i);\n\n    if (destroy) {\n      layer.destroy();\n    }\n  }\n\n  this._layers = [];\n};\n\n/**\n * Checks to see if the collection contains a given layer.\n *\n * @param {ImageryLayer} layer the layer to check for.\n *\n * @returns {boolean} true if the collection contains the layer, false otherwise.\n */\nImageryLayerCollection.prototype.contains = function (layer) {\n  return this.indexOf(layer) !== -1;\n};\n\n/**\n * Determines the index of a given layer in the collection.\n *\n * @param {ImageryLayer} layer The layer to find the index of.\n *\n * @returns {number} The index of the layer in the collection, or -1 if the layer does not exist in the collection.\n */\nImageryLayerCollection.prototype.indexOf = function (layer) {\n  return this._layers.indexOf(layer);\n};\n\n/**\n * Gets a layer by index from the collection.\n *\n * @param {number} index the index to retrieve.\n *\n * @returns {ImageryLayer} The imagery layer at the given index.\n */\nImageryLayerCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\", \"index\");\n  }\n  //>>includeEnd('debug');\n\n  return this._layers[index];\n};\n\nfunction getLayerIndex(layers, layer) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(layer)) {\n    throw new DeveloperError(\"layer is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const index = layers.indexOf(layer);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (index === -1) {\n    throw new DeveloperError(\"layer is not in this collection.\");\n  }\n  //>>includeEnd('debug');\n\n  return index;\n}\n\nfunction swapLayers(collection, i, j) {\n  const arr = collection._layers;\n  i = CesiumMath.clamp(i, 0, arr.length - 1);\n  j = CesiumMath.clamp(j, 0, arr.length - 1);\n\n  if (i === j) {\n    return;\n  }\n\n  const temp = arr[i];\n  arr[i] = arr[j];\n  arr[j] = temp;\n\n  collection._update();\n\n  collection.layerMoved.raiseEvent(temp, j, i);\n}\n\n/**\n * Raises a layer up one position in the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.raise = function (layer) {\n  const index = getLayerIndex(this._layers, layer);\n  swapLayers(this, index, index + 1);\n};\n\n/**\n * Lowers a layer down one position in the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.lower = function (layer) {\n  const index = getLayerIndex(this._layers, layer);\n  swapLayers(this, index, index - 1);\n};\n\n/**\n * Raises a layer to the top of the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.raiseToTop = function (layer) {\n  const index = getLayerIndex(this._layers, layer);\n  if (index === this._layers.length - 1) {\n    return;\n  }\n  this._layers.splice(index, 1);\n  this._layers.push(layer);\n\n  this._update();\n\n  this.layerMoved.raiseEvent(layer, this._layers.length - 1, index);\n};\n\n/**\n * Lowers a layer to the bottom of the collection.\n *\n * @param {ImageryLayer} layer the layer to move.\n *\n * @exception {DeveloperError} layer is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nImageryLayerCollection.prototype.lowerToBottom = function (layer) {\n  const index = getLayerIndex(this._layers, layer);\n  if (index === 0) {\n    return;\n  }\n  this._layers.splice(index, 1);\n  this._layers.splice(0, 0, layer);\n\n  this._update();\n\n  this.layerMoved.raiseEvent(layer, 0, index);\n};\n\nconst applicableRectangleScratch = new Rectangle();\n\nfunction pickImageryHelper(scene, pickedLocation, pickFeatures, callback) {\n  // Find the terrain tile containing the picked location.\n  const tilesToRender = scene.globe._surface._tilesToRender;\n  let pickedTile;\n\n  for (\n    let textureIndex = 0;\n    !defined(pickedTile) && textureIndex < tilesToRender.length;\n    ++textureIndex\n  ) {\n    const tile = tilesToRender[textureIndex];\n    if (Rectangle.contains(tile.rectangle, pickedLocation)) {\n      pickedTile = tile;\n    }\n  }\n\n  if (!defined(pickedTile)) {\n    return;\n  }\n\n  // Pick against all attached imagery tiles containing the pickedLocation.\n  const imageryTiles = pickedTile.data.imagery;\n\n  for (let i = imageryTiles.length - 1; i >= 0; --i) {\n    const terrainImagery = imageryTiles[i];\n    const imagery = terrainImagery.readyImagery;\n    if (!defined(imagery)) {\n      continue;\n    }\n    if (!imagery.imageryLayer.ready) {\n      continue;\n    }\n    const provider = imagery.imageryLayer.imageryProvider;\n    if (pickFeatures && !defined(provider.pickFeatures)) {\n      continue;\n    }\n\n    if (!Rectangle.contains(imagery.rectangle, pickedLocation)) {\n      continue;\n    }\n\n    // If this imagery came from a parent, it may not be applicable to its entire rectangle.\n    // Check the textureCoordinateRectangle.\n    const applicableRectangle = applicableRectangleScratch;\n\n    const epsilon = 1 / 1024; // 1/4 of a pixel in a typical 256x256 tile.\n    applicableRectangle.west = CesiumMath.lerp(\n      pickedTile.rectangle.west,\n      pickedTile.rectangle.east,\n      terrainImagery.textureCoordinateRectangle.x - epsilon,\n    );\n    applicableRectangle.east = CesiumMath.lerp(\n      pickedTile.rectangle.west,\n      pickedTile.rectangle.east,\n      terrainImagery.textureCoordinateRectangle.z + epsilon,\n    );\n    applicableRectangle.south = CesiumMath.lerp(\n      pickedTile.rectangle.south,\n      pickedTile.rectangle.north,\n      terrainImagery.textureCoordinateRectangle.y - epsilon,\n    );\n    applicableRectangle.north = CesiumMath.lerp(\n      pickedTile.rectangle.south,\n      pickedTile.rectangle.north,\n      terrainImagery.textureCoordinateRectangle.w + epsilon,\n    );\n    if (!Rectangle.contains(applicableRectangle, pickedLocation)) {\n      continue;\n    }\n\n    callback(imagery);\n  }\n}\n\n/**\n * Determines the imagery layers that are intersected by a pick ray. To compute a pick ray from a\n * location on the screen, use {@link Camera.getPickRay}.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {Scene} scene The scene.\n * @return {ImageryLayer[]|undefined} An array that includes all of\n *                                 the layers that are intersected by a given pick ray. Undefined if\n *                                 no layers are selected.\n *\n */\nImageryLayerCollection.prototype.pickImageryLayers = function (ray, scene) {\n  // Find the picked location on the globe.\n  const pickedPosition = scene.globe.pick(ray, scene);\n  if (!defined(pickedPosition)) {\n    return;\n  }\n\n  const pickedLocation =\n    scene.ellipsoid.cartesianToCartographic(pickedPosition);\n\n  const imageryLayers = [];\n\n  pickImageryHelper(scene, pickedLocation, false, function (imagery) {\n    imageryLayers.push(imagery.imageryLayer);\n  });\n\n  if (imageryLayers.length === 0) {\n    return undefined;\n  }\n\n  return imageryLayers;\n};\n\n/**\n * Asynchronously determines the imagery layer features that are intersected by a pick ray.  The intersected imagery\n * layer features are found by invoking {@link ImageryProvider#pickFeatures} for each imagery layer tile intersected\n * by the pick ray.  To compute a pick ray from a location on the screen, use {@link Camera.getPickRay}.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {Scene} scene The scene.\n * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise that resolves to an array of features intersected by the pick ray.\n *                                             If it can be quickly determined that no features are intersected (for example,\n *                                             because no active imagery providers support {@link ImageryProvider#pickFeatures}\n *                                             or because the pick ray does not intersect the surface), this function will\n *                                             return undefined.\n *\n * @example\n * const pickRay = viewer.camera.getPickRay(windowPosition);\n * const featuresPromise = viewer.imageryLayers.pickImageryLayerFeatures(pickRay, viewer.scene);\n * if (!Cesium.defined(featuresPromise)) {\n *     console.log('No features picked.');\n * } else {\n *     Promise.resolve(featuresPromise).then(function(features) {\n *         // This function is called asynchronously when the list if picked features is available.\n *         console.log(`Number of features: ${features.length}`);\n *         if (features.length > 0) {\n *             console.log(`First feature name: ${features[0].name}`);\n *         }\n *     });\n * }\n */\nImageryLayerCollection.prototype.pickImageryLayerFeatures = function (\n  ray,\n  scene,\n) {\n  // Find the picked location on the globe.\n  const pickedPosition = scene.globe.pick(ray, scene);\n  if (!defined(pickedPosition)) {\n    return;\n  }\n\n  const pickedLocation =\n    scene.ellipsoid.cartesianToCartographic(pickedPosition);\n\n  const promises = [];\n  const imageryLayers = [];\n\n  pickImageryHelper(scene, pickedLocation, true, function (imagery) {\n    if (!imagery.imageryLayer.ready) {\n      return undefined;\n    }\n    const provider = imagery.imageryLayer.imageryProvider;\n    const promise = provider.pickFeatures(\n      imagery.x,\n      imagery.y,\n      imagery.level,\n      pickedLocation.longitude,\n      pickedLocation.latitude,\n    );\n    if (defined(promise)) {\n      promises.push(promise);\n      imageryLayers.push(imagery.imageryLayer);\n    }\n  });\n\n  if (promises.length === 0) {\n    return undefined;\n  }\n  return Promise.all(promises).then(function (results) {\n    const features = [];\n    for (let resultIndex = 0; resultIndex < results.length; ++resultIndex) {\n      const result = results[resultIndex];\n      const image = imageryLayers[resultIndex];\n      if (defined(result) && result.length > 0) {\n        for (\n          let featureIndex = 0;\n          featureIndex < result.length;\n          ++featureIndex\n        ) {\n          const feature = result[featureIndex];\n          feature.imageryLayer = image;\n          // For features without a position, use the picked location.\n          if (!defined(feature.position)) {\n            feature.position = pickedLocation;\n          }\n          features.push(feature);\n        }\n      }\n    }\n    return features;\n  });\n};\n\n/**\n * Updates frame state to execute any queued texture re-projections.\n *\n * @private\n *\n * @param {FrameState} frameState The frameState.\n */\nImageryLayerCollection.prototype.queueReprojectionCommands = function (\n  frameState,\n) {\n  const layers = this._layers;\n  for (let i = 0, len = layers.length; i < len; ++i) {\n    layers[i].queueReprojectionCommands(frameState);\n  }\n};\n\n/**\n * Cancels re-projection commands queued for the next frame.\n *\n * @private\n */\nImageryLayerCollection.prototype.cancelReprojections = function () {\n  const layers = this._layers;\n  for (let i = 0, len = layers.length; i < len; ++i) {\n    layers[i].cancelReprojections();\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} true if this object was destroyed; otherwise, false.\n *\n * @see ImageryLayerCollection#destroy\n */\nImageryLayerCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by all layers in this collection.  Explicitly destroying this\n * object allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector.\n * <br /><br />\n * Once this object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * layerCollection = layerCollection && layerCollection.destroy();\n *\n * @see ImageryLayerCollection#isDestroyed\n */\nImageryLayerCollection.prototype.destroy = function () {\n  this.removeAll(true);\n  return destroyObject(this);\n};\n\nImageryLayerCollection.prototype._update = function () {\n  let isBaseLayer = true;\n  const layers = this._layers;\n  let layersShownOrHidden;\n  let layer;\n  let i, len;\n  for (i = 0, len = layers.length; i < len; ++i) {\n    layer = layers[i];\n\n    layer._layerIndex = i;\n\n    if (layer.show) {\n      layer._isBaseLayer = isBaseLayer;\n      isBaseLayer = false;\n    } else {\n      layer._isBaseLayer = false;\n    }\n\n    if (layer.show !== layer._show) {\n      if (defined(layer._show)) {\n        if (!defined(layersShownOrHidden)) {\n          layersShownOrHidden = [];\n        }\n        layersShownOrHidden.push(layer);\n      }\n      layer._show = layer.show;\n    }\n  }\n\n  if (defined(layersShownOrHidden)) {\n    for (i = 0, len = layersShownOrHidden.length; i < len; ++i) {\n      layer = layersShownOrHidden[i];\n      this.layerShownOrHidden.raiseEvent(layer, layer._layerIndex, layer.show);\n    }\n  }\n};\nexport default ImageryLayerCollection;\n","import defined from \"../Core/defined.js\";\n\n/**\n * Describes a rasterized feature, such as a point, polygon, polyline, etc., in an imagery layer.\n *\n * @alias ImageryLayerFeatureInfo\n * @constructor\n */\nfunction ImageryLayerFeatureInfo() {\n  /**\n   * Gets or sets the name of the feature.\n   * @type {string|undefined}\n   */\n  this.name = undefined;\n\n  /**\n   * Gets or sets an HTML description of the feature.  The HTML is not trusted and should\n   * be sanitized before display to the user.\n   * @type {string|undefined}\n   */\n  this.description = undefined;\n\n  /**\n   * Gets or sets the position of the feature, or undefined if the position is not known.\n   *\n   * @type {Cartographic|undefined}\n   */\n  this.position = undefined;\n\n  /**\n   * Gets or sets the raw data describing the feature.  The raw data may be in any\n   * number of formats, such as GeoJSON, KML, etc.\n   * @type {object|undefined}\n   */\n  this.data = undefined;\n\n  /**\n   * Gets or sets the image layer of the feature.\n   * @type {object|undefined}\n   */\n  this.imageryLayer = undefined;\n}\n\n/**\n * Configures the name of this feature by selecting an appropriate property.  The name will be obtained from\n * one of the following sources, in this order: 1) the property with the name 'name', 2) the property with the name 'title',\n * 3) the first property containing the word 'name', 4) the first property containing the word 'title'.  If\n * the name cannot be obtained from any of these sources, the existing name will be left unchanged.\n *\n * @param {object} properties An object literal containing the properties of the feature.\n */\nImageryLayerFeatureInfo.prototype.configureNameFromProperties = function (\n  properties,\n) {\n  let namePropertyPrecedence = 10;\n  let nameProperty;\n\n  for (const key in properties) {\n    if (properties.hasOwnProperty(key) && properties[key]) {\n      const lowerKey = key.toLowerCase();\n\n      if (namePropertyPrecedence > 1 && lowerKey === \"name\") {\n        namePropertyPrecedence = 1;\n        nameProperty = key;\n      } else if (namePropertyPrecedence > 2 && lowerKey === \"title\") {\n        namePropertyPrecedence = 2;\n        nameProperty = key;\n      } else if (namePropertyPrecedence > 3 && /name/i.test(key)) {\n        namePropertyPrecedence = 3;\n        nameProperty = key;\n      } else if (namePropertyPrecedence > 4 && /title/i.test(key)) {\n        namePropertyPrecedence = 4;\n        nameProperty = key;\n      }\n    }\n  }\n\n  if (defined(nameProperty)) {\n    this.name = properties[nameProperty];\n  }\n};\n\n/**\n * Configures the description of this feature by creating an HTML table of properties and their values.\n *\n * @param {object} properties An object literal containing the properties of the feature.\n */\nImageryLayerFeatureInfo.prototype.configureDescriptionFromProperties =\n  function (properties) {\n    function describe(properties) {\n      let html = '<table class=\"cesium-infoBox-defaultTable\">';\n      for (const key in properties) {\n        if (properties.hasOwnProperty(key)) {\n          const value = properties[key];\n          if (defined(value)) {\n            if (typeof value === \"object\") {\n              html += `<tr><td>${key}</td><td>${describe(value)}</td></tr>`;\n            } else {\n              html += `<tr><td>${key}</td><td>${value}</td></tr>`;\n            }\n          }\n        }\n      }\n      html += \"</table>\";\n\n      return html;\n    }\n\n    this.description = describe(properties);\n  };\nexport default ImageryLayerFeatureInfo;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport loadKTX2 from \"../Core/loadKTX2.js\";\nimport Resource from \"../Core/Resource.js\";\n\n/**\n * @typedef {HTMLImageElement|HTMLCanvasElement|ImageBitmap} ImageryTypes\n *\n * The format in which {@link ImageryProvider} methods return an image may\n * vary by provider, configuration, or server settings.  Most common are\n * <code>HTMLImageElement</code>, <code>HTMLCanvasElement</code>, or on supported\n * browsers, <code>ImageBitmap</code>.\n *\n * See the documentation for each ImageryProvider class for more information about how they return images.\n */\n\n/**\n * Provides imagery to be displayed on the surface of an ellipsoid.  This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias ImageryProvider\n * @constructor\n * @abstract\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see OpenStreetMapImageryProvider\n * @see TileMapServiceImageryProvider\n * @see GoogleEarthEnterpriseImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see GridImageryProvider\n * @see IonImageryProvider\n * @see MapboxImageryProvider\n * @see MapboxStyleImageryProvider\n * @see SingleTileImageryProvider\n * @see TileCoordinatesImageryProvider\n * @see UrlTemplateImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=imagery-layers|Cesium Sandcastle Imagery Layers Demo}\n * @demo {@link https://sandcastle.cesium.com/index.html?id=imagery-layers-manipulation|Cesium Sandcastle Imagery Manipulation Demo}\n */\nfunction ImageryProvider() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(ImageryProvider.prototype, {\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   * @memberof ImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof ImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof ImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof ImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.  Generally,\n   * a minimum level should only be used when the rectangle of the imagery is small\n   * enough that the number of tiles at the minimum level is small.  An imagery\n   * provider with more than a few tiles at the minimum level will lead to\n   * rendering problems.\n   * @memberof ImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof ImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof ImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof ImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof ImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof ImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof ImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} Returns a promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nImageryProvider.prototype.requestImage = function (x, y, level, request) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile.\n * This function is optional, so it may not exist on all ImageryProviders.\n *\n * @function\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n *                   instances.  The array may be empty if no features are found at the given location.\n *                   It may also be undefined if picking is not supported.\n *\n */\nImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  DeveloperError.throwInstantiationError();\n};\n\nconst ktx2Regex = /\\.ktx2$/i;\n\n/**\n * Loads an image from a given URL.  If the server referenced by the URL already has\n * too many requests pending, this function will instead return undefined, indicating\n * that the request should be retried later.\n *\n * @param {ImageryProvider} imageryProvider The imagery provider for the URL.\n * @param {Resource|string} url The URL of the image.\n * @returns {Promise<ImageryTypes|CompressedTextureBuffer>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nImageryProvider.loadImage = function (imageryProvider, url) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  const resource = Resource.createIfNeeded(url);\n\n  if (ktx2Regex.test(resource.url)) {\n    // Resolves with `CompressedTextureBuffer`\n    return loadKTX2(resource);\n  } else if (\n    defined(imageryProvider) &&\n    defined(imageryProvider.tileDiscardPolicy)\n  ) {\n    // Resolves with `HTMLImageElement` or `ImageBitmap`\n    return resource.fetchImage({\n      preferBlob: true,\n      preferImageBitmap: true,\n      flipY: true,\n    });\n  }\n\n  return resource.fetchImage({\n    preferImageBitmap: true,\n    flipY: true,\n  });\n};\nexport default ImageryProvider;\n","/**\n * @private\n */\nconst ImageryState = {\n  UNLOADED: 0,\n  TRANSITIONING: 1,\n  RECEIVED: 2,\n  TEXTURE_LOADED: 3,\n  READY: 4,\n  FAILED: 5,\n  INVALID: 6,\n  PLACEHOLDER: 7,\n};\nexport default Object.freeze(ImageryState);\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport combine from \"../Core/combine.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport HilbertOrder from \"../Core/HilbertOrder.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport S2Cell from \"../Core/S2Cell.js\";\nimport ImplicitSubtree from \"./ImplicitSubtree.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport MetadataSemantic from \"./MetadataSemantic.js\";\nimport BoundingVolumeSemantics from \"./BoundingVolumeSemantics.js\";\n\n/**\n * A specialized {@link Cesium3DTileContent} that lazily evaluates an implicit\n * tileset. It is somewhat similar in operation to a\n * {@link Tileset3DTileContent} in that once the content is constructed, it\n * updates the tileset tree with more tiles. However, unlike external tilesets,\n * child subtrees are represented as additional placeholder nodes with\n * Implicit3DTileContent.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n * This object is normally not instantiated directly, use {@link Implicit3DTileContent.fromSubtreeJson}.\n *\n * @alias Implicit3DTileContent\n * @constructor\n *\n * @param {Cesium3DTileset} tileset The tileset this content belongs to\n * @param {Cesium3DTile} tile The tile this content belongs to.\n * @param {Resource} resource The resource for the tileset\n * @param {object} [json] The JSON object containing the subtree. Mutually exclusive with arrayBuffer.\n * @param {ArrayBuffer} [arrayBuffer] The array buffer that stores the content payload. Mutually exclusive with json.\n * @param {number} [byteOffset=0] The offset into the array buffer, if one was provided\n *\n * @exception {DeveloperError} One of json and arrayBuffer must be defined.\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction Implicit3DTileContent(tileset, tile, resource) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"tile.implicitTileset\", tile.implicitTileset);\n  Check.defined(\"tile.implicitCoordinates\", tile.implicitCoordinates);\n  //>>includeEnd('debug');\n\n  const implicitTileset = tile.implicitTileset;\n  const implicitCoordinates = tile.implicitCoordinates;\n\n  this._implicitTileset = implicitTileset;\n  this._implicitCoordinates = implicitCoordinates;\n  this._implicitSubtree = undefined;\n  this._tileset = tileset;\n  this._tile = tile;\n  this._resource = resource;\n\n  this._metadata = undefined;\n\n  this.featurePropertiesDirty = false;\n  this._group = undefined;\n\n  const templateValues = implicitCoordinates.getTemplateValues();\n  const subtreeResource = implicitTileset.subtreeUriTemplate.getDerivedResource(\n    {\n      templateValues: templateValues,\n    },\n  );\n  this._url = subtreeResource.getUrlComponent(true);\n\n  this._ready = false;\n}\n\nObject.defineProperties(Implicit3DTileContent.prototype, {\n  featuresLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  pointsLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  trianglesLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  geometryByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  texturesByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  batchTableByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Implicit3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  url: {\n    get: function () {\n      return this._url;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Implicit3DTileContent</code>\n   * always returns <code>undefined</code>. Only transcoded tiles have content metadata.\n   * @memberof Implicit3DTileContent.prototype\n   * @private\n   */\n  metadata: {\n    get: function () {\n      return undefined;\n    },\n    set: function () {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\"Implicit3DTileContent cannot have metadata\");\n      //>>includeEnd('debug');\n    },\n  },\n\n  batchTable: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  group: {\n    get: function () {\n      return this._group;\n    },\n    set: function (value) {\n      this._group = value;\n    },\n  },\n});\n\n/**\n * Initialize the implicit content by parsing the subtree resource and setting\n * up a promise chain to expand the immediate subtree.\n *\n * @param {Cesium3DTileset} tileset The tileset this content belongs to\n * @param {Cesium3DTile} tile The tile this content belongs to.\n * @param {Resource} resource The resource for the tileset\n * @param {object} [json] The JSON containing the subtree. Mutually exclusive with arrayBuffer.\n * @param {ArrayBuffer} [arrayBuffer] The ArrayBuffer containing a subtree binary. Mutually exclusive with json.\n * @param {number} [byteOffset=0] The byte offset into the arrayBuffer\n * @return {Promise<Implicit3DTileContent>}\n *\n * @exception {DeveloperError} One of json and arrayBuffer must be defined.\n *\n * @private\n */\nImplicit3DTileContent.fromSubtreeJson = async function (\n  tileset,\n  tile,\n  resource,\n  json,\n  arrayBuffer,\n  byteOffset,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"tile.implicitTileset\", tile.implicitTileset);\n  Check.defined(\"tile.implicitCoordinates\", tile.implicitCoordinates);\n  if (defined(json) === defined(arrayBuffer)) {\n    throw new DeveloperError(\"One of json and arrayBuffer must be defined.\");\n  }\n  //>>includeEnd('debug');\n\n  byteOffset = byteOffset ?? 0;\n  let uint8Array;\n  if (defined(arrayBuffer)) {\n    uint8Array = new Uint8Array(arrayBuffer, byteOffset);\n  }\n\n  const implicitTileset = tile.implicitTileset;\n  const implicitCoordinates = tile.implicitCoordinates;\n\n  const subtree = await ImplicitSubtree.fromSubtreeJson(\n    resource,\n    json,\n    uint8Array,\n    implicitTileset,\n    implicitCoordinates,\n  );\n\n  const content = new Implicit3DTileContent(tileset, tile, resource);\n\n  content._implicitSubtree = subtree;\n  expandSubtree(content, subtree);\n  content._ready = true;\n\n  return content;\n};\n\n/**\n * Expand a single subtree placeholder tile. This transcodes the subtree into\n * a tree of {@link Cesium3DTile}. The root of this tree is stored in\n * the placeholder tile's children array. This method also creates placeholder\n * tiles for the child subtrees to be lazily expanded as needed.\n *\n * @param {Implicit3DTileContent} content The content\n * @param {ImplicitSubtree} subtree The parsed subtree\n * @private\n */\nfunction expandSubtree(content, subtree) {\n  const placeholderTile = content._tile;\n\n  // Parse the tiles inside this immediate subtree\n  const childIndex = content._implicitCoordinates.childIndex;\n  const results = transcodeSubtreeTiles(\n    content,\n    subtree,\n    placeholderTile,\n    childIndex,\n  );\n\n  const statistics = content._tileset.statistics;\n\n  // Link the new subtree to the existing placeholder tile.\n  placeholderTile.children.push(results.rootTile);\n  statistics.numberOfTilesTotal++;\n\n  // for each child subtree, make new placeholder tiles\n  const childSubtrees = listChildSubtrees(content, subtree, results.bottomRow);\n  for (let i = 0; i < childSubtrees.length; i++) {\n    const subtreeLocator = childSubtrees[i];\n    const leafTile = subtreeLocator.tile;\n    const implicitChildTile = makePlaceholderChildSubtree(\n      content,\n      leafTile,\n      subtreeLocator.childIndex,\n    );\n    leafTile.children.push(implicitChildTile);\n    statistics.numberOfTilesTotal++;\n  }\n}\n\n/**\n * A pair of (tile, childIndex) used for finding child subtrees.\n *\n * @typedef {object} ChildSubtreeLocator\n * @property {Cesium3DTile} tile One of the tiles in the bottommost row of the subtree.\n * @property {number} childIndex The morton index of the child tile relative to its parent\n * @private\n */\n\n/**\n * Determine what child subtrees exist and return a list of information\n *\n * @param {Implicit3DTileContent} content The implicit content\n * @param {ImplicitSubtree} subtree The subtree for looking up availability\n * @param {Array<Cesium3DTile|undefined>} bottomRow The bottom row of tiles in a transcoded subtree\n * @returns {ChildSubtreeLocator[]} A list of identifiers for the child subtrees.\n * @private\n */\nfunction listChildSubtrees(content, subtree, bottomRow) {\n  const results = [];\n  const branchingFactor = content._implicitTileset.branchingFactor;\n  for (let i = 0; i < bottomRow.length; i++) {\n    const leafTile = bottomRow[i];\n    if (!defined(leafTile)) {\n      continue;\n    }\n\n    for (let j = 0; j < branchingFactor; j++) {\n      const index = i * branchingFactor + j;\n      if (subtree.childSubtreeIsAvailableAtIndex(index)) {\n        results.push({\n          tile: leafTile,\n          childIndex: j,\n        });\n      }\n    }\n  }\n  return results;\n}\n\n/**\n * Results of transcodeSubtreeTiles, containing the root tile of the\n * subtree and the bottom row of nodes for further processing.\n *\n * @typedef {object} TranscodedSubtree\n * @property {Cesium3DTile} rootTile The transcoded root tile of the subtree\n * @property {Array<Cesium3DTile|undefined>} bottomRow The bottom row of transcoded tiles. This is helpful for processing child subtrees\n * @private\n */\n\n/**\n * Transcode the implicitly-defined tiles within this subtree and generate\n * explicit {@link Cesium3DTile} objects. This function only transcode tiles,\n * child subtrees are handled separately.\n *\n * @param {Implicit3DTileContent} content The implicit content\n * @param {ImplicitSubtree} subtree The subtree to get availability information\n * @param {Cesium3DTile} placeholderTile The placeholder tile, used for constructing the subtree root tile\n * @param {number} childIndex The Morton index of the root tile relative to parentOfRootTile\n * @returns {TranscodedSubtree} The newly created subtree of tiles\n * @private\n */\nfunction transcodeSubtreeTiles(content, subtree, placeholderTile, childIndex) {\n  const rootBitIndex = 0;\n  const rootParentIsPlaceholder = true;\n  const rootTile = deriveChildTile(\n    content,\n    subtree,\n    placeholderTile,\n    childIndex,\n    rootBitIndex,\n    rootParentIsPlaceholder,\n  );\n\n  const statistics = content._tileset.statistics;\n\n  // Sliding window over the levels of the tree.\n  // Each row is branchingFactor * length of previous row\n  // Tiles within a row are ordered by Morton index.\n  let parentRow = [rootTile];\n  let currentRow = [];\n\n  const implicitTileset = content._implicitTileset;\n  for (let level = 1; level < implicitTileset.subtreeLevels; level++) {\n    const levelOffset = subtree.getLevelOffset(level);\n    const numberOfChildren = implicitTileset.branchingFactor * parentRow.length;\n    for (\n      let childMortonIndex = 0;\n      childMortonIndex < numberOfChildren;\n      childMortonIndex++\n    ) {\n      const childBitIndex = levelOffset + childMortonIndex;\n\n      if (!subtree.tileIsAvailableAtIndex(childBitIndex)) {\n        currentRow.push(undefined);\n        continue;\n      }\n\n      const parentMortonIndex = subtree.getParentMortonIndex(childMortonIndex);\n      const parentTile = parentRow[parentMortonIndex];\n      const childChildIndex =\n        childMortonIndex % implicitTileset.branchingFactor;\n      const childTile = deriveChildTile(\n        content,\n        subtree,\n        parentTile,\n        childChildIndex,\n        childBitIndex,\n      );\n      parentTile.children.push(childTile);\n      statistics.numberOfTilesTotal++;\n      currentRow.push(childTile);\n    }\n\n    parentRow = currentRow;\n    currentRow = [];\n  }\n\n  return {\n    rootTile: rootTile,\n    // At the end of the last loop, bottomRow was moved to parentRow\n    bottomRow: parentRow,\n  };\n}\n\nfunction getGeometricError(tileMetadata, implicitTileset, implicitCoordinates) {\n  const semantic = MetadataSemantic.TILE_GEOMETRIC_ERROR;\n\n  if (defined(tileMetadata) && tileMetadata.hasPropertyBySemantic(semantic)) {\n    return tileMetadata.getPropertyBySemantic(semantic);\n  }\n\n  return (\n    implicitTileset.geometricError / Math.pow(2, implicitCoordinates.level)\n  );\n}\n\n/**\n * Given a parent tile and information about which child to create, derive\n * the properties of the child tile implicitly.\n * <p>\n * This creates a real tile for rendering, not a placeholder tile like some of\n * the other methods of ImplicitTileset.\n * </p>\n *\n * @param {Implicit3DTileContent} implicitContent The implicit content\n * @param {ImplicitSubtree} subtree The subtree the child tile belongs to\n * @param {Cesium3DTile} parentTile The parent of the new child tile\n * @param {number} childIndex The morton index of the child tile relative to its parent\n * @param {number} childBitIndex The index of the child tile within the tile's availability information.\n * @param {boolean} [parentIsPlaceholderTile=false] True if parentTile is a placeholder tile. This is true for the root of each subtree.\n * @returns {Cesium3DTile} The new child tile.\n * @private\n */\nfunction deriveChildTile(\n  implicitContent,\n  subtree,\n  parentTile,\n  childIndex,\n  childBitIndex,\n  parentIsPlaceholderTile,\n) {\n  const implicitTileset = implicitContent._implicitTileset;\n  let implicitCoordinates;\n  if (parentIsPlaceholderTile ?? false) {\n    implicitCoordinates = parentTile.implicitCoordinates;\n  } else {\n    implicitCoordinates =\n      parentTile.implicitCoordinates.getChildCoordinates(childIndex);\n  }\n\n  // Parse metadata and bounding volume semantics at the beginning\n  // as the bounding volumes are needed below.\n  let tileMetadata;\n  let tileBounds;\n  if (defined(subtree.tilePropertyTableJson)) {\n    tileMetadata = subtree.getTileMetadataView(implicitCoordinates);\n\n    tileBounds = BoundingVolumeSemantics.parseAllBoundingVolumeSemantics(\n      \"TILE\",\n      tileMetadata,\n    );\n  }\n\n  // Content is not loaded at this point, so this flag is set for future reference.\n  const contentPropertyTableJsons = subtree.contentPropertyTableJsons;\n  const length = contentPropertyTableJsons.length;\n  let hasImplicitContentMetadata = false;\n  for (let i = 0; i < length; i++) {\n    if (subtree.contentIsAvailableAtCoordinates(implicitCoordinates, i)) {\n      hasImplicitContentMetadata = true;\n      break;\n    }\n  }\n\n  const boundingVolume = getTileBoundingVolume(\n    implicitTileset,\n    implicitCoordinates,\n    childIndex,\n    parentIsPlaceholderTile,\n    parentTile,\n    tileBounds,\n  );\n\n  const contentJsons = [];\n  for (let i = 0; i < implicitTileset.contentCount; i++) {\n    if (!subtree.contentIsAvailableAtIndex(childBitIndex, i)) {\n      continue;\n    }\n    const childContentTemplate = implicitTileset.contentUriTemplates[i];\n    const childContentUri = childContentTemplate.getDerivedResource({\n      templateValues: implicitCoordinates.getTemplateValues(),\n    }).url;\n    const contentJson = {\n      uri: childContentUri,\n    };\n\n    let contentBounds;\n\n    if (subtree.contentPropertyTableJsons.length > 0) {\n      const contentMetadata = subtree.getContentMetadataView(\n        implicitCoordinates,\n        i,\n      );\n\n      contentBounds = BoundingVolumeSemantics.parseAllBoundingVolumeSemantics(\n        \"CONTENT\",\n        contentMetadata,\n      );\n    }\n\n    const contentBoundingVolume = getContentBoundingVolume(\n      boundingVolume,\n      contentBounds,\n    );\n\n    if (defined(contentBoundingVolume)) {\n      contentJson.boundingVolume = contentBoundingVolume;\n    }\n\n    // combine() is used to pass through any additional properties the\n    // user specified such as extras or extensions\n    contentJsons.push(combine(contentJson, implicitTileset.contentHeaders[i]));\n  }\n\n  const childGeometricError = getGeometricError(\n    tileMetadata,\n    implicitTileset,\n    implicitCoordinates,\n  );\n\n  const tileJson = {\n    boundingVolume: boundingVolume,\n    geometricError: childGeometricError,\n    refine: implicitTileset.refine,\n    contents: contentJsons,\n  };\n\n  // combine() is used to pass through any additional properties the\n  // user specified such as extras or extensions.\n  const deep = true;\n  const rootHeader = clone(implicitTileset.tileHeader, deep);\n  // The bounding volume was computed above since it may come from metadata\n  // in the subtree file.\n  delete rootHeader.boundingVolume;\n  // Copying the transform to all the transcoded tiles would cause the transform\n  // to be applied multiple times. Removing it from the header avoids this issue.\n  delete rootHeader.transform;\n  // The implicit tiling spec does not specify what should happen if explicit\n  // tile metadata is added to the placeholder tile. Since implicit tile\n  // metadata comes from the subtree file, ignore the explicit version.\n  //\n  // Also, when a property with the semantic TILE_BOUNDING_VOLUME is added to\n  // the placeholder tile to set a tight bounding volume (See Cesium3DTile.js)\n  // propagating it to transcoded tiles causes transcoded tiles to use the\n  // wrong bounding volume, this can lead to loading far too many tiles.\n  delete rootHeader.metadata;\n  const combinedTileJson = combine(tileJson, rootHeader, deep);\n\n  const childTile = makeTile(\n    implicitContent,\n    implicitTileset.baseResource,\n    combinedTileJson,\n    parentTile,\n  );\n\n  childTile.implicitCoordinates = implicitCoordinates;\n  childTile.implicitSubtree = subtree;\n  childTile.metadata = tileMetadata;\n  childTile.hasImplicitContentMetadata = hasImplicitContentMetadata;\n\n  return childTile;\n}\n\n/**\n * Checks whether the bounding volume's heights can be updated.\n * Returns true if the minimumHeight/maximumHeight parameter\n * is defined and the bounding volume is a region or S2 cell.\n *\n * @param {object} [boundingVolume] The bounding volume\n * @param {object} [tileBounds] The tile bounds\n * @param {number} [tileBounds.minimumHeight] The minimum height\n * @param {number} [tileBounds.maximumHeight] The maximum height\n * @returns {boolean} Whether the bounding volume's heights can be updated\n * @private\n */\nfunction canUpdateHeights(boundingVolume, tileBounds) {\n  return (\n    defined(boundingVolume) &&\n    defined(tileBounds) &&\n    (defined(tileBounds.minimumHeight) || defined(tileBounds.maximumHeight)) &&\n    (hasExtension(boundingVolume, \"3DTILES_bounding_volume_S2\") ||\n      defined(boundingVolume.region))\n  );\n}\n\n/**\n * Update the minimum and maximum height of the bounding volume.\n * This is typically used to tighten a bounding volume using the\n * <code>TILE_MINIMUM_HEIGHT</code> and <code>TILE_MAXIMUM_HEIGHT</code>\n * semantics. Heights are only updated if the respective\n * minimumHeight/maximumHeight parameter is defined and the\n * bounding volume is a region or S2 cell.\n *\n * @param {object} boundingVolume The bounding volume\n * @param {object} [tileBounds] The tile bounds\n * @param {number} [tileBounds.minimumHeight] The new minimum height\n * @param {number} [tileBounds.maximumHeight] The new maximum height\n * @private\n */\nfunction updateHeights(boundingVolume, tileBounds) {\n  if (!defined(tileBounds)) {\n    return;\n  }\n\n  if (hasExtension(boundingVolume, \"3DTILES_bounding_volume_S2\")) {\n    updateS2CellHeights(\n      boundingVolume.extensions[\"3DTILES_bounding_volume_S2\"],\n      tileBounds.minimumHeight,\n      tileBounds.maximumHeight,\n    );\n  } else if (defined(boundingVolume.region)) {\n    updateRegionHeights(\n      boundingVolume.region,\n      tileBounds.minimumHeight,\n      tileBounds.maximumHeight,\n    );\n  }\n}\n\n/**\n * For a bounding region, update the minimum and maximum height. This\n * is typically used to tighten a bounding volume using the\n * <code>TILE_MINIMUM_HEIGHT</code> and <code>TILE_MAXIMUM_HEIGHT</code>\n * semantics. Heights are only updated if the respective\n * minimumHeight/maximumHeight parameter is defined.\n *\n * @param {Array} region A 6-element array describing the bounding region\n * @param {number} [minimumHeight] The new minimum height\n * @param {number} [maximumHeight] The new maximum height\n * @private\n */\nfunction updateRegionHeights(region, minimumHeight, maximumHeight) {\n  if (defined(minimumHeight)) {\n    region[4] = minimumHeight;\n  }\n\n  if (defined(maximumHeight)) {\n    region[5] = maximumHeight;\n  }\n}\n\n/**\n * For a bounding S2 cell, update the minimum and maximum height. This\n * is typically used to tighten a bounding volume using the\n * <code>TILE_MINIMUM_HEIGHT</code> and <code>TILE_MAXIMUM_HEIGHT</code>\n * semantics. Heights are only updated if the respective\n * minimumHeight/maximumHeight parameter is defined.\n *\n * @param {object} s2CellVolume An object describing the S2 cell\n * @param {number} [minimumHeight] The new minimum height\n * @param {number} [maximumHeight] The new maximum height\n * @private\n */\nfunction updateS2CellHeights(s2CellVolume, minimumHeight, maximumHeight) {\n  if (defined(minimumHeight)) {\n    s2CellVolume.minimumHeight = minimumHeight;\n  }\n\n  if (defined(maximumHeight)) {\n    s2CellVolume.maximumHeight = maximumHeight;\n  }\n}\n\n/**\n * Gets the tile's bounding volume, which may be specified via\n * metadata semantics such as TILE_BOUNDING_BOX or implicitly\n * derived from the implicit root tile's bounding volume.\n * <p>\n * Priority of bounding volume types:\n * <ol>\n * <li>Explicit min/max height\n *   <ol>\n *     <li>With explicit region</li>\n *     <li>With implicit S2</li>\n *     <li>With implicit region</li>\n *   </ol>\n * </li>\n * <li>Explicit box</li>\n * <li>Explicit region</li>\n * <li>Explicit sphere</li>\n * <li>Implicit S2</li>\n * <li>Implicit box</li>\n * <li>Implicit region</li>\n * </ol>\n * </p>\n *\n * @param {ImplicitTileset} implicitTileset The implicit tileset struct which holds the root bounding volume\n * @param {ImplicitTileCoordinates} implicitCoordinates The coordinates of the child tile\n * @param {number} childIndex The morton index of the child tile relative to its parent\n * @param {boolean} parentIsPlaceholderTile True if parentTile is a placeholder tile. This is true for the root of each subtree.\n * @param {Cesium3DTile} parentTile The parent of the new child tile\n * @param {object} [tileBounds] The tile bounds\n * @returns {object} An object containing the JSON for a bounding volume\n * @private\n */\nfunction getTileBoundingVolume(\n  implicitTileset,\n  implicitCoordinates,\n  childIndex,\n  parentIsPlaceholderTile,\n  parentTile,\n  tileBounds,\n) {\n  let boundingVolume;\n\n  if (\n    !defined(tileBounds) ||\n    !defined(tileBounds.boundingVolume) ||\n    (!canUpdateHeights(tileBounds.boundingVolume, tileBounds) &&\n      canUpdateHeights(implicitTileset.boundingVolume, tileBounds))\n  ) {\n    boundingVolume = deriveBoundingVolume(\n      implicitTileset,\n      implicitCoordinates,\n      childIndex,\n      parentIsPlaceholderTile ?? false,\n      parentTile,\n    );\n  } else {\n    boundingVolume = tileBounds.boundingVolume;\n  }\n\n  // The TILE_MINIMUM_HEIGHT and TILE_MAXIMUM_HEIGHT metadata semantics\n  // can be used to tighten the bounding volume\n  updateHeights(boundingVolume, tileBounds);\n\n  return boundingVolume;\n}\n\n/**\n * Gets the content bounding volume, which may be specified via\n * metadata semantics such as CONTENT_BOUNDING_BOX.\n * <p>\n * Priority of bounding volume types:\n * <ol>\n * <li>Explicit min/max height\n *   <ol>\n *     <li>With explicit region</li>\n *     <li>With tile bounding volume (S2 or region)</li>\n *   </ol>\n * </li>\n * <li>Explicit box</li>\n * <li>Explicit region</li>\n * <li>Explicit sphere</li>\n * <li>Tile bounding volume (when content.boundingVolume is undefined)</li>\n * </ol>\n * </p>\n *\n * @param {object} tileBoundingVolume An object containing the JSON for the tile's bounding volume\n * @param {object} [contentBounds] The content bounds\n * @returns {object|undefined} An object containing the JSON for a bounding volume, or <code>undefined</code> if there is no bounding volume\n * @private\n */\nfunction getContentBoundingVolume(tileBoundingVolume, contentBounds) {\n  // content bounding volumes can only be specified via\n  // metadata semantics such as CONTENT_BOUNDING_BOX\n  let contentBoundingVolume;\n  if (defined(contentBounds)) {\n    contentBoundingVolume = contentBounds.boundingVolume;\n  }\n\n  // The CONTENT_MINIMUM_HEIGHT and CONTENT_MAXIMUM_HEIGHT metadata semantics\n  // can be used to tighten the bounding volume\n  if (canUpdateHeights(contentBoundingVolume, contentBounds)) {\n    updateHeights(contentBoundingVolume, contentBounds);\n  } else if (canUpdateHeights(tileBoundingVolume, contentBounds)) {\n    contentBoundingVolume = clone(tileBoundingVolume, true);\n    updateHeights(contentBoundingVolume, contentBounds);\n  }\n\n  return contentBoundingVolume;\n}\n\n/**\n * Given the coordinates of a tile, derive its bounding volume from the root.\n *\n * @param {ImplicitTileset} implicitTileset The implicit tileset struct which holds the root bounding volume\n * @param {ImplicitTileCoordinates} implicitCoordinates The coordinates of the child tile\n * @param {number} childIndex The morton index of the child tile relative to its parent\n * @param {boolean} parentIsPlaceholderTile True if parentTile is a placeholder tile. This is true for the root of each subtree.\n * @param {Cesium3DTile} parentTile The parent of the new child tile\n * @returns {object} An object containing the JSON for a bounding volume\n * @private\n */\nfunction deriveBoundingVolume(\n  implicitTileset,\n  implicitCoordinates,\n  childIndex,\n  parentIsPlaceholderTile,\n  parentTile,\n) {\n  const rootBoundingVolume = implicitTileset.boundingVolume;\n\n  if (hasExtension(rootBoundingVolume, \"3DTILES_bounding_volume_S2\")) {\n    return deriveBoundingVolumeS2(\n      parentIsPlaceholderTile,\n      parentTile,\n      childIndex,\n      implicitCoordinates.level,\n      implicitCoordinates.x,\n      implicitCoordinates.y,\n      implicitCoordinates.z,\n    );\n  }\n\n  if (defined(rootBoundingVolume.region)) {\n    const childRegion = deriveBoundingRegion(\n      rootBoundingVolume.region,\n      implicitCoordinates.level,\n      implicitCoordinates.x,\n      implicitCoordinates.y,\n      implicitCoordinates.z,\n    );\n\n    return {\n      region: childRegion,\n    };\n  }\n\n  const childBox = deriveBoundingBox(\n    rootBoundingVolume.box,\n    implicitCoordinates.level,\n    implicitCoordinates.x,\n    implicitCoordinates.y,\n    implicitCoordinates.z,\n  );\n\n  return {\n    box: childBox,\n  };\n}\n\n/**\n * Derive a bounding volume for a descendant tile (child, grandchild, etc.),\n * assuming a quadtree or octree implicit tiling scheme. The (level, x, y, [z])\n * coordinates are given to select the descendant tile and compute its position\n * and dimensions.\n * <p>\n * If z is present, octree subdivision is used. Otherwise, quadtree subdivision\n * is used. Quadtrees are always divided at the midpoint of the the horizontal\n * dimensions, i.e. (x, y), leaving the z axis unchanged.\n * </p>\n *\n * @param {boolean} parentIsPlaceholderTile True if parentTile is a placeholder tile. This is true for the root of each subtree.\n * @param {Cesium3DTile} parentTile The parent of the new child tile\n * @param {number} childIndex The morton index of the child tile relative to its parent\n * @param {number} level The level of the descendant tile relative to the root implicit tile\n * @param {number} x The x coordinate of the descendant tile\n * @param {number} y The y coordinate of the descendant tile\n * @param {number} [z] The z coordinate of the descendant tile (octree only)\n * @returns {object} An object with the 3DTILES_bounding_volume_S2 extension.\n * @private\n */\nfunction deriveBoundingVolumeS2(\n  parentIsPlaceholderTile,\n  parentTile,\n  childIndex,\n  level,\n  x,\n  y,\n  z,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bool(\"parentIsPlaceholderTile\", parentIsPlaceholderTile);\n  Check.typeOf.object(\"parentTile\", parentTile);\n  Check.typeOf.number(\"childIndex\", childIndex);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  if (defined(z)) {\n    Check.typeOf.number(\"z\", z);\n  }\n  //>>includeEnd('debug');\n\n  const boundingVolumeS2 = parentTile._boundingVolume;\n\n  // Handle the placeholder tile case, where we just duplicate the placeholder's bounding volume.\n  if (parentIsPlaceholderTile) {\n    return {\n      extensions: {\n        \"3DTILES_bounding_volume_S2\": {\n          token: S2Cell.getTokenFromId(boundingVolumeS2.s2Cell._cellId),\n          minimumHeight: boundingVolumeS2.minimumHeight,\n          maximumHeight: boundingVolumeS2.maximumHeight,\n        },\n      },\n    };\n  }\n\n  // Extract the first 3 face bits from the 64-bit S2 cell ID.\n  const face = Number(parentTile._boundingVolume.s2Cell._cellId >> BigInt(61));\n  // The Hilbert curve is rotated for the \"odd\" faces on the S2 Earthcube.\n  // See http://s2geometry.io/devguide/img/s2cell_global.jpg\n  const position =\n    face % 2 === 0\n      ? HilbertOrder.encode2D(level, x, y)\n      : HilbertOrder.encode2D(level, y, x);\n  const cell = S2Cell.fromFacePositionLevel(face, BigInt(position), level);\n\n  let minHeight, maxHeight;\n  if (defined(z)) {\n    const midpointHeight =\n      (boundingVolumeS2.maximumHeight + boundingVolumeS2.minimumHeight) / 2;\n    minHeight =\n      childIndex < 4 ? boundingVolumeS2.minimumHeight : midpointHeight;\n    maxHeight =\n      childIndex < 4 ? midpointHeight : boundingVolumeS2.maximumHeight;\n  } else {\n    minHeight = boundingVolumeS2.minimumHeight;\n    maxHeight = boundingVolumeS2.maximumHeight;\n  }\n\n  return {\n    extensions: {\n      \"3DTILES_bounding_volume_S2\": {\n        token: S2Cell.getTokenFromId(cell._cellId),\n        minimumHeight: minHeight,\n        maximumHeight: maxHeight,\n      },\n    },\n  };\n}\n\nconst scratchScaleFactors = new Cartesian3();\nconst scratchRootCenter = new Cartesian3();\nconst scratchCenter = new Cartesian3();\nconst scratchHalfAxes = new Matrix3();\n/**\n * Derive a bounding volume for a descendant tile (child, grandchild, etc.),\n * assuming a quadtree or octree implicit tiling scheme. The (level, x, y, [z])\n * coordinates are given to select the descendant tile and compute its position\n * and dimensions.\n * <p>\n * If z is present, octree subdivision is used. Otherwise, quadtree subdivision\n * is used. Quadtrees are always divided at the midpoint of the the horizontal\n * dimensions, i.e. (x, y), leaving the z axis unchanged.\n * </p>\n * <p>\n * This computes the child volume directly from the root bounding volume rather\n * than recursively subdividing to minimize floating point error.\n * </p>\n *\n * @param {number[]} rootBox An array of 12 numbers representing the bounding box of the root tile\n * @param {number} level The level of the descendant tile relative to the root implicit tile\n * @param {number} x The x coordinate of the descendant tile\n * @param {number} y The y coordinate of the descendant tile\n * @param {number} [z] The z coordinate of the descendant tile (octree only)\n * @returns {number[]} An array of 12 numbers representing the bounding box of the descendant tile.\n * @private\n */\nfunction deriveBoundingBox(rootBox, level, x, y, z) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rootBox\", rootBox);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  if (defined(z)) {\n    Check.typeOf.number(\"z\", z);\n  }\n  //>>includeEnd('debug');\n\n  if (level === 0) {\n    return rootBox;\n  }\n\n  const rootCenter = Cartesian3.unpack(rootBox, 0, scratchRootCenter);\n  const rootHalfAxes = Matrix3.unpack(rootBox, 3, scratchHalfAxes);\n\n  const tileScale = Math.pow(2, -level);\n  const modelSpaceX = -1 + (2 * x + 1) * tileScale;\n  const modelSpaceY = -1 + (2 * y + 1) * tileScale;\n\n  let modelSpaceZ = 0;\n  const scaleFactors = Cartesian3.fromElements(\n    tileScale,\n    tileScale,\n    1,\n    scratchScaleFactors,\n  );\n\n  if (defined(z)) {\n    modelSpaceZ = -1 + (2 * z + 1) * tileScale;\n    scaleFactors.z = tileScale;\n  }\n\n  let center = Cartesian3.fromElements(\n    modelSpaceX,\n    modelSpaceY,\n    modelSpaceZ,\n    scratchCenter,\n  );\n  center = Matrix3.multiplyByVector(rootHalfAxes, center, scratchCenter);\n  center = Cartesian3.add(center, rootCenter, scratchCenter);\n\n  let halfAxes = Matrix3.clone(rootHalfAxes);\n  halfAxes = Matrix3.multiplyByScale(halfAxes, scaleFactors, halfAxes);\n\n  const childBox = new Array(12);\n  Cartesian3.pack(center, childBox);\n  Matrix3.pack(halfAxes, childBox, 3);\n  return childBox;\n}\n\nconst scratchRectangle = new Rectangle();\n/**\n * Derive a bounding volume for a descendant tile (child, grandchild, etc.),\n * assuming a quadtree or octree implicit tiling scheme. The (level, x, y, [z])\n * coordinates are given to select the descendant tile and compute its position\n * and dimensions.\n * <p>\n * If z is present, octree subdivision is used. Otherwise, quadtree subdivision\n * is used. Quadtrees are always divided at the midpoint of the the horizontal\n * dimensions, i.e. (mid_longitude, mid_latitude), leaving the height values\n * unchanged.\n * </p>\n * <p>\n * This computes the child volume directly from the root bounding volume rather\n * than recursively subdividing to minimize floating point error.\n * </p>\n * @param {number[]} rootRegion An array of 6 numbers representing the root implicit tile\n * @param {number} level The level of the descendant tile relative to the root implicit tile\n * @param {number} x The x coordinate of the descendant tile\n * @param {number} y The x coordinate of the descendant tile\n * @param {number} [z] The z coordinate of the descendant tile (octree only)\n * @returns {number[]} An array of 6 numbers representing the bounding region of the descendant tile\n * @private\n */\nfunction deriveBoundingRegion(rootRegion, level, x, y, z) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rootRegion\", rootRegion);\n  Check.typeOf.number(\"level\", level);\n  Check.typeOf.number(\"x\", x);\n  Check.typeOf.number(\"y\", y);\n  if (defined(z)) {\n    Check.typeOf.number(\"z\", z);\n  }\n  //>>includeEnd('debug');\n\n  if (level === 0) {\n    return rootRegion.slice();\n  }\n\n  const rectangle = Rectangle.unpack(rootRegion, 0, scratchRectangle);\n  const rootMinimumHeight = rootRegion[4];\n  const rootMaximumHeight = rootRegion[5];\n  const tileScale = Math.pow(2, -level);\n\n  const childWidth = tileScale * rectangle.width;\n  const west = CesiumMath.negativePiToPi(rectangle.west + x * childWidth);\n  const east = CesiumMath.negativePiToPi(west + childWidth);\n\n  const childHeight = tileScale * rectangle.height;\n  const south = CesiumMath.negativePiToPi(rectangle.south + y * childHeight);\n  const north = CesiumMath.negativePiToPi(south + childHeight);\n\n  // Height is only subdivided for octrees; It remains constant for quadtrees.\n  let minimumHeight = rootMinimumHeight;\n  let maximumHeight = rootMaximumHeight;\n  if (defined(z)) {\n    const childThickness = tileScale * (rootMaximumHeight - rootMinimumHeight);\n    minimumHeight += z * childThickness;\n    maximumHeight = minimumHeight + childThickness;\n  }\n\n  return [west, south, east, north, minimumHeight, maximumHeight];\n}\n\n/**\n * Create a placeholder 3D Tile whose content will be an Implicit3DTileContent\n * for lazy evaluation of a child subtree.\n *\n * @param {Implicit3DTileContent} content The content object.\n * @param {Cesium3DTile} parentTile The parent of the new child subtree.\n * @param {number} childIndex The morton index of the child tile relative to its parent\n * @returns {Cesium3DTile} The new placeholder tile\n * @private\n */\nfunction makePlaceholderChildSubtree(content, parentTile, childIndex) {\n  const implicitTileset = content._implicitTileset;\n  const implicitCoordinates =\n    parentTile.implicitCoordinates.getChildCoordinates(childIndex);\n\n  const childBoundingVolume = deriveBoundingVolume(\n    implicitTileset,\n    implicitCoordinates,\n    childIndex,\n    false,\n    parentTile,\n  );\n\n  // Ignore tile metadata when computing geometric error for the placeholder tile\n  // since the child subtree's metadata hasn't been loaded yet.\n  // The actual geometric error will be computed in deriveChildTile.\n  const childGeometricError = getGeometricError(\n    undefined,\n    implicitTileset,\n    implicitCoordinates,\n  );\n\n  const childContentUri = implicitTileset.subtreeUriTemplate.getDerivedResource(\n    {\n      templateValues: implicitCoordinates.getTemplateValues(),\n    },\n  ).url;\n  const tileJson = {\n    boundingVolume: childBoundingVolume,\n    geometricError: childGeometricError,\n    refine: implicitTileset.refine,\n    contents: [\n      {\n        uri: childContentUri,\n      },\n    ],\n  };\n\n  const tile = makeTile(\n    content,\n    implicitTileset.baseResource,\n    tileJson,\n    parentTile,\n  );\n  tile.implicitTileset = implicitTileset;\n  tile.implicitCoordinates = implicitCoordinates;\n  return tile;\n}\n\n/**\n * Make a {@link Cesium3DTile}. This uses the content's tile's constructor instead\n * of importing Cesium3DTile. This is to avoid a circular dependency between\n * this file and Cesium3DTile.js\n * @param {Implicit3DTileContent} content The implicit content\n * @param {Resource} baseResource The base resource for the tileset\n * @param {object} tileJson The JSON header for the tile\n * @param {Cesium3DTile} parentTile The parent of the new tile\n * @returns {Cesium3DTile} The newly created tile.\n * @private\n */\nfunction makeTile(content, baseResource, tileJson, parentTile) {\n  const Cesium3DTile = content._tile.constructor;\n  return new Cesium3DTile(content._tileset, baseResource, tileJson, parentTile);\n}\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Implicit3DTileContent</code>\n * always returns <code>false</code> since a tile of this type does not have any features.\n * @private\n */\nImplicit3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Implicit3DTileContent</code>\n * always returns <code>undefined</code> since a tile of this type does not have any features.\n * @private\n */\nImplicit3DTileContent.prototype.getFeature = function (batchId) {\n  return undefined;\n};\n\nImplicit3DTileContent.prototype.applyDebugSettings = function (\n  enabled,\n  color,\n) {};\n\nImplicit3DTileContent.prototype.applyStyle = function (style) {};\n\nImplicit3DTileContent.prototype.update = function (tileset, frameState) {};\n\nImplicit3DTileContent.prototype.pick = function (ray, frameState, result) {\n  return undefined;\n};\n\nImplicit3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nImplicit3DTileContent.prototype.destroy = function () {\n  this._implicitSubtree =\n    this._implicitSubtree && this._implicitSubtree.destroy();\n  return destroyObject(this);\n};\n\n// Exposed for testing\nImplicit3DTileContent._deriveBoundingBox = deriveBoundingBox;\nImplicit3DTileContent._deriveBoundingRegion = deriveBoundingRegion;\nImplicit3DTileContent._deriveBoundingVolumeS2 = deriveBoundingVolumeS2;\n\nexport default Implicit3DTileContent;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * An availability bitstream for use in an {@link ImplicitSubtree}. This handles\n * both Uint8Array bitstreams and constant values.\n *\n * @alias ImplicitAvailabilityBitstream\n * @constructor\n *\n * @param {object} options An object with the following properties:\n * @param {number} options.lengthBits The length of the bitstream in bits\n * @param {boolean} [options.constant] A single boolean value indicating the value of all the bits in the bitstream if they are all the same\n * @param {Uint8Array} [options.bitstream] An array of bytes storing the bitstream in binary\n * @param {number} [options.availableCount] A number indicating how many 1 bits are found in the bitstream\n * @param {boolean} [options.computeAvailableCountEnabled=false] If true, and options.availableCount is undefined, the availableCount will be computed from the bitstream.\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ImplicitAvailabilityBitstream(options) {\n  const lengthBits = options.lengthBits;\n  let availableCount = options.availableCount;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"options.lengthBits\", lengthBits);\n  //>>includeEnd('debug');\n\n  const constant = options.constant;\n  const bitstream = options.bitstream;\n\n  if (defined(constant)) {\n    // if defined, constant must be 1 which means all tiles are available\n    availableCount = lengthBits;\n  } else {\n    const expectedLength = Math.ceil(lengthBits / 8);\n    if (bitstream.length !== expectedLength) {\n      throw new RuntimeError(\n        `Availability bitstream must be exactly ${expectedLength} bytes long to store ${lengthBits} bits. Actual bitstream was ${bitstream.length} bytes long.`,\n      );\n    }\n\n    // Only compute the available count if requested, as this involves looping\n    // over the bitstream.\n    const computeAvailableCountEnabled =\n      options.computeAvailableCountEnabled ?? false;\n    if (!defined(availableCount) && computeAvailableCountEnabled) {\n      availableCount = count1Bits(bitstream, lengthBits);\n    }\n  }\n\n  this._lengthBits = lengthBits;\n  this._availableCount = availableCount;\n  this._constant = constant;\n  this._bitstream = bitstream;\n}\n\n/**\n * Count the number of bits with value 1 in the bitstream. This is used for\n * computing availableCount if not precomputed\n *\n * @param {Uint8Array} bitstream The bitstream typed array\n * @param {number} lengthBits How many bits are in the bitstream\n * @private\n */\nfunction count1Bits(bitstream, lengthBits) {\n  let count = 0;\n  for (let i = 0; i < lengthBits; i++) {\n    const byteIndex = i >> 3;\n    const bitIndex = i % 8;\n    count += (bitstream[byteIndex] >> bitIndex) & 1;\n  }\n  return count;\n}\n\nObject.defineProperties(ImplicitAvailabilityBitstream.prototype, {\n  /**\n   * The length of the bitstream in bits.\n   *\n   * @memberof ImplicitAvailabilityBitstream.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  lengthBits: {\n    get: function () {\n      return this._lengthBits;\n    },\n  },\n  /**\n   * The number of bits in the bitstream with value <code>1</code>.\n   *\n   * @memberof ImplicitAvailabilityBitstream.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  availableCount: {\n    get: function () {\n      return this._availableCount;\n    },\n  },\n});\n\n/**\n * Get a bit from the availability bitstream as a Boolean. If the bitstream\n * is a constant, the constant value is returned instead.\n *\n * @param {number} index The integer index of the bit.\n * @returns {boolean} The value of the bit\n * @private\n */\nImplicitAvailabilityBitstream.prototype.getBit = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (index < 0 || index >= this._lengthBits) {\n    throw new DeveloperError(\"Bit index out of bounds.\");\n  }\n  //>>includeEnd('debug');\n\n  if (defined(this._constant)) {\n    return this._constant;\n  }\n\n  // byteIndex is floor(index / 8)\n  const byteIndex = index >> 3;\n  const bitIndex = index % 8;\n\n  return ((this._bitstream[byteIndex] >> bitIndex) & 1) === 1;\n};\n\nexport default ImplicitAvailabilityBitstream;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\n\n/**\n * This class represents a single entity in the <code>MetadataTable</code> owned by an implicit subtree. The entity is specified by the entityId.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles\n * </p>\n *\n * @param {MetadataTable} options.metadataTable The metadata table.\n * @param {MetadataClass} options.class The class that the metadata conforms to.\n * @param {number} options.entityId The ID of the entity the metadata belongs to.\n * @param {object} options.propertyTableJson The JSON that contains the property table of the entity.\n *\n * @alias ImplicitMetadataView\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ImplicitMetadataView(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const metadataTable = options.metadataTable;\n  const metadataClass = options.class;\n  const entityId = options.entityId;\n  const propertyTableJson = options.propertyTableJson;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.metadataTable\", metadataTable);\n  Check.typeOf.object(\"options.class\", metadataClass);\n  Check.typeOf.number(\"options.entityId\", entityId);\n  Check.typeOf.object(\"options.propertyTableJson\", propertyTableJson);\n\n  //>>includeEnd('debug');\n\n  this._class = metadataClass;\n  this._metadataTable = metadataTable;\n  this._entityId = entityId;\n\n  this._extensions = propertyTableJson.extensions;\n  this._extras = propertyTableJson.extras;\n}\n\nObject.defineProperties(ImplicitMetadataView.prototype, {\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof ImplicitMetadataView.prototype\n   * @type {MetadataClass}\n   * @readonly\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof ImplicitMetadataView.prototype\n   * @type {object}\n   * @readonly\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof ImplicitMetadataView.prototype\n   * @type {object}\n   * @readonly\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Returns whether the metadata contains this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the tile has this property.\n * @private\n */\nImplicitMetadataView.prototype.hasProperty = function (propertyId) {\n  return this._metadataTable.hasProperty(propertyId);\n};\n\n/**\n * Returns whether the metadata contains a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the tile has a property with the given semantic.\n * @private\n */\nImplicitMetadataView.prototype.hasPropertyBySemantic = function (semantic) {\n  return this._metadataTable.hasPropertyBySemantic(semantic);\n};\n\n/**\n * Returns an array of property IDs in the metadata table.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nImplicitMetadataView.prototype.getPropertyIds = function (results) {\n  return this._metadataTable.getPropertyIds(results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the tile does not have this property.\n * @private\n */\nImplicitMetadataView.prototype.getProperty = function (propertyId) {\n  return this._metadataTable.getProperty(this._entityId, propertyId);\n};\n\n/**\n * Sets the value of the property with the given ID in the metadata table.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nImplicitMetadataView.prototype.setProperty = function (propertyId, value) {\n  return this._metadataTable.setProperty(this._entityId, propertyId, value);\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic in the metadata table.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the tile does not have this semantic.\n * @private\n */\nImplicitMetadataView.prototype.getPropertyBySemantic = function (semantic) {\n  return this._metadataTable.getPropertyBySemantic(this._entityId, semantic);\n};\n\n/**\n * Sets the value of the property with the given semantic in the metadata table.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\n\nImplicitMetadataView.prototype.setPropertyBySemantic = function (\n  semantic,\n  value,\n) {\n  return this._metadataTable.setPropertyBySemantic(\n    this._entityId,\n    semantic,\n    value,\n  );\n};\n\nexport default ImplicitMetadataView;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * The subdivision scheme for an implicit tileset.\n *\n * @enum {string}\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst ImplicitSubdivisionScheme = {\n  /**\n   * A quadtree divides a parent tile into four children, split at the midpoint\n   * of the x and y dimensions of the bounding box\n   * @type {string}\n   * @constant\n   * @private\n   */\n  QUADTREE: \"QUADTREE\",\n  /**\n   * An octree divides a parent tile into eight children, split at the midpoint\n   * of the x, y, and z dimensions of the bounding box.\n   * @type {string}\n   * @constant\n   * @private\n   */\n  OCTREE: \"OCTREE\",\n};\n\n/**\n * Get the branching factor for the given subdivision scheme\n * @param {ImplicitSubdivisionScheme} subdivisionScheme The subdivision scheme\n * @returns {number} The branching factor, either 4 for QUADTREE or 8 for OCTREE\n * @private\n */\nImplicitSubdivisionScheme.getBranchingFactor = function (subdivisionScheme) {\n  switch (subdivisionScheme) {\n    case ImplicitSubdivisionScheme.OCTREE:\n      return 8;\n    case ImplicitSubdivisionScheme.QUADTREE:\n      return 4;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"subdivisionScheme is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\nexport default Object.freeze(ImplicitSubdivisionScheme);\n","import Check from \"../Core/Check.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport ImplicitAvailabilityBitstream from \"./ImplicitAvailabilityBitstream.js\";\nimport ImplicitMetadataView from \"./ImplicitMetadataView.js\";\nimport ImplicitSubdivisionScheme from \"./ImplicitSubdivisionScheme.js\";\nimport ImplicitSubtreeMetadata from \"./ImplicitSubtreeMetadata.js\";\nimport MetadataTable from \"./MetadataTable.js\";\nimport ResourceCache from \"./ResourceCache.js\";\n\n/**\n * An object representing a single subtree in an implicit tileset\n * including availability.\n * <p>\n * Subtrees handle tile metadata, defined in the subtree JSON in either\n * tileMetadata (3D Tiles 1.1) or the <code>3DTILES_metadata</code> extension.\n * Subtrees also handle content metadata and metadata about the subtree itself.\n * </p>\n *\n * This object is normally not instantiated directly, use {@link ImplicitSubtree.fromSubtreeJson}.\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata#implicit-tile-properties|Implicit Tile Properties in the 3DTILES_metadata specification}\n * @see ImplicitSubtree.fromSubtreeJson\n *\n * @alias ImplicitSubtree\n * @constructor\n *\n * @param {Resource} resource The resource for this subtree. This is used for fetching external buffers as needed.\n * @param {ImplicitTileset} implicitTileset The implicit tileset. This includes information about the size of subtrees\n * @param {ImplicitTileCoordinates} implicitCoordinates The coordinates of the subtree's root tile.\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ImplicitSubtree(resource, implicitTileset, implicitCoordinates) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"resource\", resource);\n  Check.typeOf.object(\"implicitTileset\", implicitTileset);\n  Check.typeOf.object(\"implicitCoordinates\", implicitCoordinates);\n  //>>includeEnd('debug');\n\n  this._resource = resource;\n  this._subtreeJson = undefined;\n  this._bufferLoader = undefined;\n  this._tileAvailability = undefined;\n  this._contentAvailabilityBitstreams = [];\n  this._childSubtreeAvailability = undefined;\n  this._implicitCoordinates = implicitCoordinates;\n  this._subtreeLevels = implicitTileset.subtreeLevels;\n  this._subdivisionScheme = implicitTileset.subdivisionScheme;\n  this._branchingFactor = implicitTileset.branchingFactor;\n\n  // properties for metadata\n  this._metadata = undefined;\n  this._tileMetadataTable = undefined;\n  this._tilePropertyTableJson = undefined;\n\n  this._contentMetadataTables = [];\n  this._contentPropertyTableJsons = [];\n\n  // Jump buffers are maps of availability bit index to entity ID\n  this._tileJumpBuffer = undefined;\n  this._contentJumpBuffers = [];\n\n  this._ready = false;\n}\n\nObject.defineProperties(ImplicitSubtree.prototype, {\n  /**\n   * Returns true once all necessary availability buffers\n   * are loaded.\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * When subtree metadata is present (3D Tiles 1.1), this property stores an {@link ImplicitSubtreeMetadata} instance\n   *\n   * @type {ImplicitSubtreeMetadata}\n   * @readonly\n   * @private\n   */\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n  },\n\n  /**\n   * When tile metadata is present (3D Tiles 1.1) or the <code>3DTILES_metadata</code> extension is used,\n   * this property stores a {@link MetadataTable} instance for the tiles in the subtree.\n   *\n   * @type {MetadataTable}\n   * @readonly\n   * @private\n   */\n  tileMetadataTable: {\n    get: function () {\n      return this._tileMetadataTable;\n    },\n  },\n\n  /**\n   * When tile metadata is present (3D Tiles 1.1) or the <code>3DTILES_metadata</code> extension is used,\n   * this property stores the JSON from the extension. This is used by {@link TileMetadata}\n   * to get the extras and extensions for the tiles in the subtree.\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  tilePropertyTableJson: {\n    get: function () {\n      return this._tilePropertyTableJson;\n    },\n  },\n\n  /**\n   * When content metadata is present (3D Tiles 1.1), this property stores\n   * an array of {@link MetadataTable} instances for the contents in the subtree.\n   *\n   * @type {Array}\n   * @readonly\n   * @private\n   */\n  contentMetadataTables: {\n    get: function () {\n      return this._contentMetadataTables;\n    },\n  },\n\n  /**\n   * When content metadata is present (3D Tiles 1.1), this property\n   * an array of the JSONs from the extension. This is used to get the extras\n   * and extensions for the contents in the subtree.\n   *\n   * @type {Array}\n   * @readonly\n   * @private\n   */\n  contentPropertyTableJsons: {\n    get: function () {\n      return this._contentPropertyTableJsons;\n    },\n  },\n\n  /**\n   * Gets the implicit tile coordinates for the root of the subtree.\n   *\n   * @type {ImplicitTileCoordinates}\n   * @readonly\n   * @private\n   */\n  implicitCoordinates: {\n    get: function () {\n      return this._implicitCoordinates;\n    },\n  },\n});\n\n/**\n * Check if a specific tile is available at an index of the tile availability bitstream\n *\n * @param {number} index The index of the desired tile\n * @returns {boolean} The value of the i-th bit\n * @private\n */\nImplicitSubtree.prototype.tileIsAvailableAtIndex = function (index) {\n  return this._tileAvailability.getBit(index);\n};\n\n/**\n * Check if a specific tile is available at an implicit tile coordinate\n * NOTE: only used for voxels.\n *\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a tile\n * @returns {boolean} The value of the i-th bit\n * @private\n */\nImplicitSubtree.prototype.tileIsAvailableAtCoordinates = function (\n  implicitCoordinates,\n) {\n  const index = this.getTileIndex(implicitCoordinates);\n  return this.tileIsAvailableAtIndex(index);\n};\n\n/**\n * Check if a specific tile's content is available at an index of the content availability bitstream\n *\n * @param {number} index The index of the desired tile\n * @param {number} [contentIndex=0] The index of the desired content when multiple contents are used.\n * @returns {boolean} The value of the i-th bit\n * @private\n */\nImplicitSubtree.prototype.contentIsAvailableAtIndex = function (\n  index,\n  contentIndex,\n) {\n  contentIndex = contentIndex ?? 0;\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    contentIndex < 0 ||\n    contentIndex >= this._contentAvailabilityBitstreams.length\n  ) {\n    throw new DeveloperError(\"contentIndex out of bounds.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._contentAvailabilityBitstreams[contentIndex].getBit(index);\n};\n\n/**\n * Check if a specific tile's content is available at an implicit tile coordinate\n *\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a tile\n * @param {number} [contentIndex=0] The index of the desired content when the <code>3DTILES_multiple_contents</code> extension is used.\n * @returns {boolean} The value of the i-th bit\n * @private\n */\nImplicitSubtree.prototype.contentIsAvailableAtCoordinates = function (\n  implicitCoordinates,\n  contentIndex,\n) {\n  const index = this.getTileIndex(implicitCoordinates);\n  return this.contentIsAvailableAtIndex(index, contentIndex);\n};\n\n/**\n * Check if a child subtree is available at an index of the child subtree availability bitstream\n *\n * @param {number} index The index of the desired child subtree\n * @returns {boolean} The value of the i-th bit\n * @private\n */\nImplicitSubtree.prototype.childSubtreeIsAvailableAtIndex = function (index) {\n  return this._childSubtreeAvailability.getBit(index);\n};\n\n/**\n * Check if a specific child subtree is available at an implicit tile coordinate\n * NOTE: only used for voxels.\n *\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a child subtree\n * @returns {boolean} The value of the i-th bit\n * @private\n */\nImplicitSubtree.prototype.childSubtreeIsAvailableAtCoordinates = function (\n  implicitCoordinates,\n) {\n  const index = this.getChildSubtreeIndex(implicitCoordinates);\n  return this.childSubtreeIsAvailableAtIndex(index);\n};\n\n/**\n * Get the index of the first node at the given level within this subtree.\n * e.g. for a quadtree:\n * <ul>\n * <li>Level 0 starts at index 0</li>\n * <li>Level 1 starts at index 1</li>\n * <li>Level 2 starts at index 5</li>\n * </ul>\n *\n * @param {number} level The 0-indexed level number relative to the root of the subtree\n * @returns {number} The first index at the desired level\n * @private\n */\nImplicitSubtree.prototype.getLevelOffset = function (level) {\n  const branchingFactor = this._branchingFactor;\n  return (Math.pow(branchingFactor, level) - 1) / (branchingFactor - 1);\n};\n\n/**\n * Get the morton index of a tile's parent. This is equivalent to\n * chopping off the last 2 (quadtree) or 3 (octree) bits of the morton\n * index.\n *\n * @param {number} childIndex The morton index of the child tile relative to its parent\n * @returns {number} The index of the child's parent node\n * @private\n */\nImplicitSubtree.prototype.getParentMortonIndex = function (mortonIndex) {\n  let bitsPerLevel = 2;\n  if (this._subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    bitsPerLevel = 3;\n  }\n\n  return mortonIndex >> bitsPerLevel;\n};\n\n/**\n * Parse all relevant information out of the subtree. This fetches any\n * external buffers that are used by the implicit tileset.\n *\n * @param {Resource} resource The resource for this subtree. This is used for fetching external buffers as needed.\n * @param {object} [json] The JSON object for this subtree. If parsing from a binary subtree file, this will be undefined.\n * @param {Uint8Array} [subtreeView] The contents of the subtree binary\n * @param {ImplicitTileset} implicitTileset The implicit tileset this subtree belongs to.\n * @param {ImplicitTileCoordinates} implicitCoordinates The coordinates of the subtree's root tile.\n * @return {Promise<ImplicitSubtree>} The created subtree\n * @private\n *\n * @exception {DeveloperError} One of json and subtreeView must be defined.\n */\nImplicitSubtree.fromSubtreeJson = async function (\n  resource,\n  json,\n  subtreeView,\n  implicitTileset,\n  implicitCoordinates,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"resource\", resource);\n  if (defined(json) === defined(subtreeView)) {\n    throw new DeveloperError(\"One of json and subtreeView must be defined.\");\n  }\n  Check.typeOf.object(\"implicitTileset\", implicitTileset);\n  Check.typeOf.object(\"implicitCoordinates\", implicitCoordinates);\n  //>>includeEnd('debug');\n\n  const subtree = new ImplicitSubtree(\n    resource,\n    implicitTileset,\n    implicitCoordinates,\n  );\n\n  let chunks;\n  if (defined(json)) {\n    chunks = {\n      json: json,\n      binary: undefined,\n    };\n  } else {\n    chunks = parseSubtreeChunks(subtreeView);\n  }\n\n  const subtreeJson = chunks.json;\n  subtree._subtreeJson = subtreeJson;\n\n  let tilePropertyTableJson;\n  if (hasExtension(subtreeJson, \"3DTILES_metadata\")) {\n    tilePropertyTableJson = subtreeJson.extensions[\"3DTILES_metadata\"];\n  } else if (defined(subtreeJson.tileMetadata)) {\n    const propertyTableIndex = subtreeJson.tileMetadata;\n    tilePropertyTableJson = subtreeJson.propertyTables[propertyTableIndex];\n  }\n\n  const contentPropertyTableJsons = [];\n  if (defined(subtreeJson.contentMetadata)) {\n    const length = subtreeJson.contentMetadata.length;\n    for (let i = 0; i < length; i++) {\n      const propertyTableIndex = subtreeJson.contentMetadata[i];\n      contentPropertyTableJsons.push(\n        subtreeJson.propertyTables[propertyTableIndex],\n      );\n    }\n  }\n\n  let metadata;\n  const schema = implicitTileset.metadataSchema;\n  const subtreeMetadata = subtreeJson.subtreeMetadata;\n  if (defined(subtreeMetadata)) {\n    const metadataClass = subtreeMetadata.class;\n    const subtreeMetadataClass = schema.classes[metadataClass];\n    metadata = new ImplicitSubtreeMetadata({\n      subtreeMetadata: subtreeMetadata,\n      class: subtreeMetadataClass,\n    });\n  }\n\n  subtree._metadata = metadata;\n  subtree._tilePropertyTableJson = tilePropertyTableJson;\n  subtree._contentPropertyTableJsons = contentPropertyTableJsons;\n\n  // if no contentAvailability is specified, no tile in the subtree has\n  // content\n  const defaultContentAvailability = {\n    constant: 0,\n  };\n\n  // In 3D Tiles 1.1, content availability is provided in an array in the subtree JSON\n  // regardless of whether or not it contains multiple contents. This differs from previous\n  // schemas, where content availability is either a single object in the subtree JSON or\n  // as an array in the 3DTILES_multiple_contents extension.\n  //\n  // After identifying how availability is stored, put the results in this new array for consistent processing later\n  subtreeJson.contentAvailabilityHeaders = [];\n  if (hasExtension(subtreeJson, \"3DTILES_multiple_contents\")) {\n    subtreeJson.contentAvailabilityHeaders =\n      subtreeJson.extensions[\"3DTILES_multiple_contents\"].contentAvailability;\n  } else if (Array.isArray(subtreeJson.contentAvailability)) {\n    subtreeJson.contentAvailabilityHeaders = subtreeJson.contentAvailability;\n  } else {\n    subtreeJson.contentAvailabilityHeaders.push(\n      subtreeJson.contentAvailability ?? defaultContentAvailability,\n    );\n  }\n\n  const bufferHeaders = preprocessBuffers(subtreeJson.buffers);\n  const bufferViewHeaders = preprocessBufferViews(\n    subtreeJson.bufferViews,\n    bufferHeaders,\n  );\n\n  // Buffers and buffer views are inactive until explicitly marked active.\n  // This way we can avoid fetching buffers that will not be used.\n  markActiveBufferViews(subtreeJson, bufferViewHeaders);\n  if (defined(tilePropertyTableJson)) {\n    markActiveMetadataBufferViews(tilePropertyTableJson, bufferViewHeaders);\n  }\n\n  for (let i = 0; i < contentPropertyTableJsons.length; i++) {\n    const contentPropertyTableJson = contentPropertyTableJsons[i];\n    markActiveMetadataBufferViews(contentPropertyTableJson, bufferViewHeaders);\n  }\n\n  const buffersU8 = await requestActiveBuffers(\n    subtree,\n    bufferHeaders,\n    chunks.binary,\n  );\n  const bufferViewsU8 = parseActiveBufferViews(bufferViewHeaders, buffersU8);\n  parseAvailability(subtree, subtreeJson, implicitTileset, bufferViewsU8);\n\n  if (defined(tilePropertyTableJson)) {\n    parseTileMetadataTable(subtree, implicitTileset, bufferViewsU8);\n    makeTileJumpBuffer(subtree);\n  }\n\n  parseContentMetadataTables(subtree, implicitTileset, bufferViewsU8);\n  makeContentJumpBuffers(subtree);\n\n  subtree._ready = true;\n  return subtree;\n};\n\n/**\n * A helper object for storing the two parts of the subtree binary\n *\n * @typedef {object} SubtreeChunks\n * @property {object} json The json chunk of the subtree\n * @property {Uint8Array} binary The binary chunk of the subtree. This represents the internal buffer.\n * @private\n */\n\n/**\n * Given the binary contents of a subtree, split into JSON and binary chunks\n *\n * @param {Uint8Array} subtreeView The subtree binary\n * @returns {SubtreeChunks} An object containing the JSON and binary chunks.\n * @private\n */\nfunction parseSubtreeChunks(subtreeView) {\n  // Parse the header\n  const littleEndian = true;\n  const subtreeReader = new DataView(\n    subtreeView.buffer,\n    subtreeView.byteOffset,\n  );\n  // Skip to the chunk lengths\n  let byteOffset = 8;\n\n  // Read the bottom 32 bits of the 64-bit byte length. This is ok for now because:\n  // 1) not all browsers have native 64-bit operations\n  // 2) the data is well under 4GB\n  const jsonByteLength = subtreeReader.getUint32(byteOffset, littleEndian);\n  byteOffset += 8;\n  const binaryByteLength = subtreeReader.getUint32(byteOffset, littleEndian);\n  byteOffset += 8;\n\n  const subtreeJson = getJsonFromTypedArray(\n    subtreeView,\n    byteOffset,\n    jsonByteLength,\n  );\n  byteOffset += jsonByteLength;\n  const subtreeBinary = subtreeView.subarray(\n    byteOffset,\n    byteOffset + binaryByteLength,\n  );\n\n  return {\n    json: subtreeJson,\n    binary: subtreeBinary,\n  };\n}\n\n/**\n * A buffer header is the JSON header from the subtree JSON chunk plus\n * a couple extra boolean flags for easy reference.\n *\n * Buffers are assumed inactive until explicitly marked active. This is used\n * to avoid fetching unneeded buffers.\n *\n * @typedef {object} BufferHeader\n * @property {boolean} isExternal True if this is an external buffer\n * @property {boolean} isActive Whether this buffer is currently used.\n * @property {string} [uri] The URI of the buffer (external buffers only)\n * @property {number} byteLength The byte length of the buffer, including any padding contained within.\n * @private\n */\n\n/**\n * Iterate over the list of buffers from the subtree JSON and add the\n * isExternal and isActive fields for easier parsing later. This modifies\n * the objects in place.\n *\n * @param {object[]} [bufferHeaders=[]] The JSON from subtreeJson.buffers.\n * @returns {BufferHeader[]} The same array of headers with additional fields.\n * @private\n */\nfunction preprocessBuffers(bufferHeaders) {\n  bufferHeaders = defined(bufferHeaders) ? bufferHeaders : [];\n  for (let i = 0; i < bufferHeaders.length; i++) {\n    const bufferHeader = bufferHeaders[i];\n    bufferHeader.isExternal = defined(bufferHeader.uri);\n    bufferHeader.isActive = false;\n  }\n\n  return bufferHeaders;\n}\n\n/**\n * A buffer header is the JSON header from the subtree JSON chunk plus\n * the isActive flag and a reference to the header for the underlying buffer\n *\n * @typedef {object} BufferViewHeader\n * @property {BufferHeader} bufferHeader A reference to the header for the underlying buffer\n * @property {boolean} isActive Whether this bufferView is currently used.\n * @property {number} buffer The index of the underlying buffer.\n * @property {number} byteOffset The start byte of the bufferView within the buffer.\n * @property {number} byteLength The length of the bufferView. No padding is included in this length.\n * @private\n */\n\n/**\n * Iterate the list of buffer views from the subtree JSON and add the\n * isActive flag. Also save a reference to the bufferHeader\n *\n * @param {object[]} [bufferViewHeaders=[]] The JSON from subtree.bufferViews\n * @param {BufferHeader[]} bufferHeaders The preprocessed buffer headers\n * @returns {BufferViewHeader[]} The same array of bufferView headers with additional fields\n * @private\n */\nfunction preprocessBufferViews(bufferViewHeaders, bufferHeaders) {\n  bufferViewHeaders = defined(bufferViewHeaders) ? bufferViewHeaders : [];\n  for (let i = 0; i < bufferViewHeaders.length; i++) {\n    const bufferViewHeader = bufferViewHeaders[i];\n    const bufferHeader = bufferHeaders[bufferViewHeader.buffer];\n    bufferViewHeader.bufferHeader = bufferHeader;\n    bufferViewHeader.isActive = false;\n  }\n  return bufferViewHeaders;\n}\n\n/**\n * Determine which buffer views need to be loaded into memory. This includes:\n *\n * <ul>\n * <li>The tile availability bitstream (if a bitstream is defined)</li>\n * <li>The content availability bitstream(s) (if a bitstream is defined)</li>\n * <li>The child subtree availability bitstream (if a bitstream is defined)</li>\n * </ul>\n *\n * <p>\n * This function modifies the buffer view headers' isActive flags in place.\n * </p>\n *\n * @param {object[]} subtreeJson The JSON chunk from the subtree\n * @param {BufferViewHeader[]} bufferViewHeaders The preprocessed buffer view headers\n * @private\n */\nfunction markActiveBufferViews(subtreeJson, bufferViewHeaders) {\n  let header;\n  const tileAvailabilityHeader = subtreeJson.tileAvailability;\n\n  // Check for bitstream first, which is part of the current schema.\n  // bufferView is the name of the bitstream from an older schema.\n  if (defined(tileAvailabilityHeader.bitstream)) {\n    header = bufferViewHeaders[tileAvailabilityHeader.bitstream];\n  } else if (defined(tileAvailabilityHeader.bufferView)) {\n    header = bufferViewHeaders[tileAvailabilityHeader.bufferView];\n  }\n\n  if (defined(header)) {\n    header.isActive = true;\n    header.bufferHeader.isActive = true;\n  }\n\n  const contentAvailabilityHeaders = subtreeJson.contentAvailabilityHeaders;\n  for (let i = 0; i < contentAvailabilityHeaders.length; i++) {\n    header = undefined;\n    if (defined(contentAvailabilityHeaders[i].bitstream)) {\n      header = bufferViewHeaders[contentAvailabilityHeaders[i].bitstream];\n    } else if (defined(contentAvailabilityHeaders[i].bufferView)) {\n      header = bufferViewHeaders[contentAvailabilityHeaders[i].bufferView];\n    }\n\n    if (defined(header)) {\n      header.isActive = true;\n      header.bufferHeader.isActive = true;\n    }\n  }\n\n  header = undefined;\n  const childSubtreeAvailabilityHeader = subtreeJson.childSubtreeAvailability;\n  if (defined(childSubtreeAvailabilityHeader.bitstream)) {\n    header = bufferViewHeaders[childSubtreeAvailabilityHeader.bitstream];\n  } else if (defined(childSubtreeAvailabilityHeader.bufferView)) {\n    header = bufferViewHeaders[childSubtreeAvailabilityHeader.bufferView];\n  }\n\n  if (defined(header)) {\n    header.isActive = true;\n    header.bufferHeader.isActive = true;\n  }\n}\n\n/**\n * For handling metadata, look over the tile and content metadata buffers\n * <p>\n * This always loads all of the metadata immediately. Future iterations may\n * allow filtering this to avoid downloading unneeded buffers.\n * </p>\n *\n * @param {object} propertyTableJson The property table JSON for either a tile or some content\n * @param {BufferViewHeader[]} bufferViewHeaders The preprocessed buffer view headers\n * @private\n */\nfunction markActiveMetadataBufferViews(propertyTableJson, bufferViewHeaders) {\n  const properties = propertyTableJson.properties;\n  let header;\n  for (const key in properties) {\n    if (properties.hasOwnProperty(key)) {\n      const metadataHeader = properties[key];\n\n      // An older spec used bufferView\n      const valuesBufferView =\n        metadataHeader.values ?? metadataHeader.bufferView;\n      header = bufferViewHeaders[valuesBufferView];\n      header.isActive = true;\n      header.bufferHeader.isActive = true;\n\n      // An older spec used stringOffsetBufferView\n      const stringOffsetBufferView =\n        metadataHeader.stringOffsets ?? metadataHeader.stringOffsetBufferView;\n      if (defined(stringOffsetBufferView)) {\n        header = bufferViewHeaders[stringOffsetBufferView];\n        header.isActive = true;\n        header.bufferHeader.isActive = true;\n      }\n\n      // an older spec used arrayOffsetBufferView\n      const arrayOffsetBufferView =\n        metadataHeader.arrayOffsets ?? metadataHeader.arrayOffsetBufferView;\n      if (defined(arrayOffsetBufferView)) {\n        header = bufferViewHeaders[arrayOffsetBufferView];\n        header.isActive = true;\n        header.bufferHeader.isActive = true;\n      }\n    }\n  }\n}\n\n/**\n * Go through the list of buffers and gather all the active ones into a\n * a dictionary. Since external buffers are allowed, this sometimes involves\n * fetching separate binary files. Consequently, this method returns a promise.\n * <p>\n * The results are put into a dictionary object. The keys are indices of\n * buffers, and the values are Uint8Arrays of the contents. Only buffers\n * marked with the isActive flag are fetched.\n * </p>\n * <p>\n * The internal buffer (the subtree's binary chunk) is also stored in this\n * dictionary if it is marked active.\n * </p>\n * @param {ImplicitSubtree} subtree The subtree\n * @param {BufferHeader[]} bufferHeaders The preprocessed buffer headers\n * @param {Uint8Array} internalBuffer The binary chunk of the subtree file\n * @returns {Promise<object>} A promise resolving to the dictionary of active buffers\n * @private\n */\nfunction requestActiveBuffers(subtree, bufferHeaders, internalBuffer) {\n  const promises = [];\n  for (let i = 0; i < bufferHeaders.length; i++) {\n    const bufferHeader = bufferHeaders[i];\n    if (!bufferHeader.isActive) {\n      promises.push(Promise.resolve(undefined));\n    } else if (bufferHeader.isExternal) {\n      const promise = requestExternalBuffer(subtree, bufferHeader);\n      promises.push(promise);\n    } else {\n      promises.push(Promise.resolve(internalBuffer));\n    }\n  }\n  return Promise.all(promises).then(function (bufferResults) {\n    const buffersU8 = {};\n    for (let i = 0; i < bufferResults.length; i++) {\n      const result = bufferResults[i];\n      if (defined(result)) {\n        buffersU8[i] = result;\n      }\n    }\n    return buffersU8;\n  });\n}\n\nasync function requestExternalBuffer(subtree, bufferHeader) {\n  const baseResource = subtree._resource;\n  const bufferResource = baseResource.getDerivedResource({\n    url: bufferHeader.uri,\n  });\n\n  const bufferLoader = ResourceCache.getExternalBufferLoader({\n    resource: bufferResource,\n  });\n  subtree._bufferLoader = bufferLoader;\n\n  try {\n    await bufferLoader.load();\n  } catch (error) {\n    if (bufferLoader.isDestroyed()) {\n      return;\n    }\n\n    throw error;\n  }\n\n  return bufferLoader.typedArray;\n}\n\n/**\n * Go through the list of buffer views, and if they are marked as active,\n * extract a subarray from one of the active buffers.\n *\n * @param {BufferViewHeader[]} bufferViewHeaders\n * @param {object} buffersU8 A dictionary of buffer index to a Uint8Array of its contents.\n * @returns {object} A dictionary of buffer view index to a Uint8Array of its contents.\n * @private\n */\nfunction parseActiveBufferViews(bufferViewHeaders, buffersU8) {\n  const bufferViewsU8 = {};\n  for (let i = 0; i < bufferViewHeaders.length; i++) {\n    const bufferViewHeader = bufferViewHeaders[i];\n\n    if (!bufferViewHeader.isActive) {\n      continue;\n    }\n\n    const start = bufferViewHeader.byteOffset;\n    const end = start + bufferViewHeader.byteLength;\n    const buffer = buffersU8[bufferViewHeader.buffer];\n    const bufferView = buffer.subarray(start, end);\n    bufferViewsU8[i] = bufferView;\n  }\n  return bufferViewsU8;\n}\n\n/**\n * Parse the three availability bitstreams and store them in the subtree\n *\n * @param {ImplicitSubtree} subtree The subtree to modify\n * @param {object} subtreeJson The subtree JSON\n * @param {ImplicitTileset} implicitTileset The implicit tileset this subtree belongs to\n * @param {object} bufferViewsU8 A dictionary of buffer view index to a Uint8Array of its contents.\n * @private\n */\nfunction parseAvailability(\n  subtree,\n  subtreeJson,\n  implicitTileset,\n  bufferViewsU8,\n) {\n  const branchingFactor = implicitTileset.branchingFactor;\n  const subtreeLevels = implicitTileset.subtreeLevels;\n  const tileAvailabilityBits =\n    (Math.pow(branchingFactor, subtreeLevels) - 1) / (branchingFactor - 1);\n  const childSubtreeBits = Math.pow(branchingFactor, subtreeLevels);\n\n  // availableCount is only needed for the metadata jump buffer, which\n  // corresponds to the tile availability bitstream.\n  const hasMetadataExtension = hasExtension(subtreeJson, \"3DTILES_metadata\");\n  const hasTileMetadata = defined(subtree._tilePropertyTableJson);\n  let computeAvailableCountEnabled = hasMetadataExtension || hasTileMetadata;\n\n  subtree._tileAvailability = parseAvailabilityBitstream(\n    subtreeJson.tileAvailability,\n    bufferViewsU8,\n    tileAvailabilityBits,\n    computeAvailableCountEnabled,\n  );\n\n  const hasContentMetadata = subtree._contentPropertyTableJsons.length > 0;\n  computeAvailableCountEnabled =\n    computeAvailableCountEnabled || hasContentMetadata;\n\n  for (let i = 0; i < subtreeJson.contentAvailabilityHeaders.length; i++) {\n    const bitstream = parseAvailabilityBitstream(\n      subtreeJson.contentAvailabilityHeaders[i],\n      bufferViewsU8,\n      // content availability has the same length as tile availability.\n      tileAvailabilityBits,\n      computeAvailableCountEnabled,\n    );\n    subtree._contentAvailabilityBitstreams.push(bitstream);\n  }\n\n  subtree._childSubtreeAvailability = parseAvailabilityBitstream(\n    subtreeJson.childSubtreeAvailability,\n    bufferViewsU8,\n    childSubtreeBits,\n  );\n}\n\n/**\n * Given the JSON describing an availability bitstream, turn it into an\n * in-memory representation using an {@link ImplicitAvailabilityBitstream}\n * object. This handles both constants and bitstreams from a bufferView.\n *\n * @param {object} availabilityJson A JSON object representing the availability\n * @param {object} bufferViewsU8 A dictionary of bufferView index to its Uint8Array contents.\n * @param {number} lengthBits The length of the availability bitstream in bits\n * @param {boolean} [computeAvailableCountEnabled] If true and availabilityJson.availableCount is undefined, the availableCount will be computed.\n * @returns {ImplicitAvailabilityBitstream} The parsed bitstream object\n * @private\n */\nfunction parseAvailabilityBitstream(\n  availabilityJson,\n  bufferViewsU8,\n  lengthBits,\n  computeAvailableCountEnabled,\n) {\n  if (defined(availabilityJson.constant)) {\n    return new ImplicitAvailabilityBitstream({\n      constant: Boolean(availabilityJson.constant),\n      lengthBits: lengthBits,\n      availableCount: availabilityJson.availableCount,\n    });\n  }\n\n  let bufferView;\n\n  // Check for bitstream first, which is part of the current schema.\n  // bufferView is the name of the bitstream from an older schema.\n  if (defined(availabilityJson.bitstream)) {\n    bufferView = bufferViewsU8[availabilityJson.bitstream];\n  } else if (defined(availabilityJson.bufferView)) {\n    bufferView = bufferViewsU8[availabilityJson.bufferView];\n  }\n\n  return new ImplicitAvailabilityBitstream({\n    bitstream: bufferView,\n    lengthBits: lengthBits,\n    availableCount: availabilityJson.availableCount,\n    computeAvailableCountEnabled: computeAvailableCountEnabled,\n  });\n}\n\n/**\n * Parse the metadata table for the tile metadata, storing a {@link MetadataTable}\n * in the subtree.\n *\n * @param {ImplicitSubtree} subtree The subtree\n * @param {ImplicitTileset} implicitTileset The implicit tileset this subtree belongs to.\n * @param {object} bufferViewsU8 A dictionary of bufferView index to its Uint8Array contents.\n * @private\n */\nfunction parseTileMetadataTable(subtree, implicitTileset, bufferViewsU8) {\n  const tilePropertyTableJson = subtree._tilePropertyTableJson;\n  const tileCount = subtree._tileAvailability.availableCount;\n  const metadataSchema = implicitTileset.metadataSchema;\n\n  const tileMetadataClassName = tilePropertyTableJson.class;\n  const tileMetadataClass = metadataSchema.classes[tileMetadataClassName];\n\n  subtree._tileMetadataTable = new MetadataTable({\n    class: tileMetadataClass,\n    count: tileCount,\n    properties: tilePropertyTableJson.properties,\n    bufferViews: bufferViewsU8,\n  });\n}\n\n/**\n * Parse the metadata tables for the content metadata, storing an array of\n * {@link MetadataTable}s in the subtree.\n *\n * @param {ImplicitSubtree} subtree The subtree\n * @param {ImplicitTileset} implicitTileset The implicit tileset this subtree belongs to.\n * @param {object} bufferViewsU8 A dictionary of bufferView index to its Uint8Array contents.\n * @private\n */\nfunction parseContentMetadataTables(subtree, implicitTileset, bufferViewsU8) {\n  const contentPropertyTableJsons = subtree._contentPropertyTableJsons;\n  const contentAvailabilityBitstreams = subtree._contentAvailabilityBitstreams;\n  const metadataSchema = implicitTileset.metadataSchema;\n\n  const contentMetadataTables = subtree._contentMetadataTables;\n  for (let i = 0; i < contentPropertyTableJsons.length; i++) {\n    const contentPropertyTableJson = contentPropertyTableJsons[i];\n    const contentAvailabilityBitsteam = contentAvailabilityBitstreams[i];\n\n    const contentCount = contentAvailabilityBitsteam.availableCount;\n    const contentMetadataClassName = contentPropertyTableJson.class;\n    const contentMetadataClass =\n      metadataSchema.classes[contentMetadataClassName];\n\n    const metadataTable = new MetadataTable({\n      class: contentMetadataClass,\n      count: contentCount,\n      properties: contentPropertyTableJson.properties,\n      bufferViews: bufferViewsU8,\n    });\n\n    contentMetadataTables.push(metadataTable);\n  }\n}\n\n/**\n * Make a jump buffer, i.e. a map of a bit index to the metadata entity ID.\n * <p>\n * For unavailable tiles and content, the jump buffer entries will be uninitialized.\n * Use the tile and content availability to determine whether a jump buffer value is valid.\n * </p>\n *\n * @param {ImplicitAvailabilityBitstream} availability The availability bitstream to create the jump buffer from.\n * @returns {Array} The resulting jump buffer.\n * @private\n */\nfunction makeJumpBuffer(availability) {\n  let entityId = 0;\n  const bufferLength = availability.lengthBits;\n  const availableCount = availability.availableCount;\n\n  let jumpBuffer;\n  if (availableCount < 256) {\n    jumpBuffer = new Uint8Array(bufferLength);\n  } else if (availableCount < 65536) {\n    jumpBuffer = new Uint16Array(bufferLength);\n  } else {\n    jumpBuffer = new Uint32Array(bufferLength);\n  }\n\n  for (let i = 0; i < availability.lengthBits; i++) {\n    if (availability.getBit(i)) {\n      jumpBuffer[i] = entityId;\n      entityId++;\n    }\n  }\n\n  return jumpBuffer;\n}\n\n/**\n * Make the jump buffer, i.e. a map of a bit index to the metadata entity ID,\n * for the content metadata. This is stored in the subtree.\n *\n * @param {ImplicitSubtree} subtree The subtree\n * @private\n */\nfunction makeTileJumpBuffer(subtree) {\n  const tileJumpBuffer = makeJumpBuffer(subtree._tileAvailability);\n  subtree._tileJumpBuffer = tileJumpBuffer;\n}\n\n/**\n * Make the jump buffers, i.e. maps of bit indices to the metadata entity IDs,\n * for the content metadata. This is stored in the subtree.\n *\n * @param {ImplicitSubtree} subtree The subtree\n * @private\n */\nfunction makeContentJumpBuffers(subtree) {\n  const contentJumpBuffers = subtree._contentJumpBuffers;\n  const contentAvailabilityBitstreams = subtree._contentAvailabilityBitstreams;\n  for (let i = 0; i < contentAvailabilityBitstreams.length; i++) {\n    const contentAvailability = contentAvailabilityBitstreams[i];\n    const contentJumpBuffer = makeJumpBuffer(contentAvailability);\n    contentJumpBuffers.push(contentJumpBuffer);\n  }\n}\n\n/**\n * Given the implicit tiling coordinates for a tile, get the index within the\n * subtree's tile availability bitstream.\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a tile\n * @return {number} The tile's index within the subtree.\n * @private\n */\nImplicitSubtree.prototype.getTileIndex = function (implicitCoordinates) {\n  const localLevel =\n    implicitCoordinates.level - this._implicitCoordinates.level;\n  if (localLevel < 0 || this._subtreeLevels <= localLevel) {\n    throw new RuntimeError(\"level is out of bounds for this subtree\");\n  }\n\n  const subtreeCoordinates = implicitCoordinates.getSubtreeCoordinates();\n  const offsetCoordinates =\n    subtreeCoordinates.getOffsetCoordinates(implicitCoordinates);\n  const index = offsetCoordinates.tileIndex;\n  return index;\n};\n\n/**\n * Given the implicit tiling coordinates for a child subtree, get the index within the\n * subtree's child subtree availability bitstream.\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a child subtree\n * @return {number} The child subtree's index within the subtree's child subtree availability bitstream.\n * @private\n */\nImplicitSubtree.prototype.getChildSubtreeIndex = function (\n  implicitCoordinates,\n) {\n  const localLevel =\n    implicitCoordinates.level - this._implicitCoordinates.level;\n  if (localLevel !== this._implicitCoordinates.subtreeLevels) {\n    throw new RuntimeError(\"level is out of bounds for this subtree\");\n  }\n\n  // Call getParentSubtreeCoordinates instead of getSubtreeCoordinates because the\n  // child subtree is by definition the root of its own subtree, so we need to find\n  // the parent subtree.\n  const parentSubtreeCoordinates =\n    implicitCoordinates.getParentSubtreeCoordinates();\n  const offsetCoordinates =\n    parentSubtreeCoordinates.getOffsetCoordinates(implicitCoordinates);\n  const index = offsetCoordinates.mortonIndex;\n  return index;\n};\n\n/**\n * Get the entity ID for a tile within this subtree.\n * @param {ImplicitSubtree} subtree The subtree\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a tile\n * @return {number} The entity ID for this tile for accessing tile metadata, or <code>undefined</code> if not applicable.\n *\n * @private\n */\nfunction getTileEntityId(subtree, implicitCoordinates) {\n  if (!defined(subtree._tileMetadataTable)) {\n    return undefined;\n  }\n\n  const tileIndex = subtree.getTileIndex(implicitCoordinates);\n  if (subtree._tileAvailability.getBit(tileIndex)) {\n    return subtree._tileJumpBuffer[tileIndex];\n  }\n\n  return undefined;\n}\n\n/**\n * Get the entity ID for a content within this subtree.\n * @param {ImplicitSubtree} subtree The subtree\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a content\n * @param {number} contentIndex The content index, for distinguishing between multiple contents.\n * @return {number} The entity ID for this content for accessing content metadata, or <code>undefined</code> if not applicable.\n *\n * @private\n */\nfunction getContentEntityId(subtree, implicitCoordinates, contentIndex) {\n  const metadataTables = subtree._contentMetadataTables;\n  if (!defined(metadataTables)) {\n    return undefined;\n  }\n\n  const metadataTable = metadataTables[contentIndex];\n  if (!defined(metadataTable)) {\n    return undefined;\n  }\n\n  const availability = subtree._contentAvailabilityBitstreams[contentIndex];\n  const tileIndex = subtree.getTileIndex(implicitCoordinates);\n  if (availability.getBit(tileIndex)) {\n    const contentJumpBuffer = subtree._contentJumpBuffers[contentIndex];\n    return contentJumpBuffer[tileIndex];\n  }\n\n  return undefined;\n}\n\n/**\n * Create and return a metadata table view for a tile within this subtree.\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a tile\n * @return {ImplicitMetadataView} The metadata view for this tile, or <code>undefined</code> if not applicable.\n *\n * @private\n */\nImplicitSubtree.prototype.getTileMetadataView = function (implicitCoordinates) {\n  const entityId = getTileEntityId(this, implicitCoordinates);\n  if (!defined(entityId)) {\n    return undefined;\n  }\n\n  const metadataTable = this._tileMetadataTable;\n  return new ImplicitMetadataView({\n    class: metadataTable.class,\n    metadataTable: metadataTable,\n    entityId: entityId,\n    propertyTableJson: this._tilePropertyTableJson,\n  });\n};\n\n/**\n * Create and return a metadata table view for a content within this subtree.\n * @param {ImplicitTileCoordinates} implicitCoordinates The global coordinates of a content\n * @param {number} contentIndex The index of the content used to distinguish between multiple contents\n * @return {ImplicitMetadataView} The metadata view for this content, or <code>undefined</code> if not applicable.\n *\n * @private\n */\nImplicitSubtree.prototype.getContentMetadataView = function (\n  implicitCoordinates,\n  contentIndex,\n) {\n  const entityId = getContentEntityId(this, implicitCoordinates, contentIndex);\n  if (!defined(entityId)) {\n    return undefined;\n  }\n\n  const metadataTable = this._contentMetadataTables[contentIndex];\n  const propertyTableJson = this._contentPropertyTableJsons[contentIndex];\n  return new ImplicitMetadataView({\n    class: metadataTable.class,\n    metadataTable: metadataTable,\n    entityId: entityId,\n    contentIndex: contentIndex,\n    propertyTableJson: propertyTableJson,\n  });\n};\n\n/**\n * @private\n */\nImplicitSubtree.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * @private\n */\nImplicitSubtree.prototype.destroy = function () {\n  if (defined(this._bufferLoader)) {\n    ResourceCache.unload(this._bufferLoader);\n  }\n\n  return destroyObject(this);\n};\n\nexport default ImplicitSubtree;\n","import Frozen from \"../Core/Frozen.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DoubleEndedPriorityQueue from \"../Core/DoubleEndedPriorityQueue.js\";\n\n/**\n * @alias ImplicitSubtreeCache\n * @constructor\n *\n * @param {object} [options] Object with the following properties\n * @param {number} [options.maximumSubtreeCount=0] The total number of subtrees this cache can store. If adding a new subtree would exceed this limit, the lowest priority subtrees will be removed until there is room, unless the subtree that is going to be removed is the parent of the new subtree, in which case it will not be removed and the new subtree will still be added, exceeding the memory limit.\n *\n * @private\n */\nfunction ImplicitSubtreeCache(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._maximumSubtreeCount = options.maximumSubtreeCount ?? 0;\n\n  /**\n   * A counter that goes up whenever a subtree is added. Used to sort subtrees by recency.\n   * @type {number}\n   * @private\n   */\n  this._subtreeRequestCounter = 0;\n\n  /**\n   * @type {DoubleEndedPriorityQueue}\n   * @private\n   */\n  this._queue = new DoubleEndedPriorityQueue({\n    comparator: ImplicitSubtreeCache.comparator,\n  });\n}\n\n/**\n * @param {ImplicitSubtree} subtree\n */\nImplicitSubtreeCache.prototype.addSubtree = function (subtree) {\n  const cacheNode = new ImplicitSubtreeCacheNode(\n    subtree,\n    this._subtreeRequestCounter,\n  );\n  this._subtreeRequestCounter++;\n  this._queue.insert(cacheNode);\n\n  // Make sure the parent subtree exists in the cache\n  const subtreeCoord = subtree.implicitCoordinates;\n  if (subtreeCoord.level > 0) {\n    const parentCoord = subtreeCoord.getParentSubtreeCoordinates();\n    const parentNode = this.find(parentCoord);\n\n    //>>includeStart('debug', pragmas.debug)\n    if (parentNode === undefined) {\n      throw new DeveloperError(\"parent node needs to exist\");\n    }\n    //>>includeEnd('debug');\n  }\n\n  if (this._maximumSubtreeCount > 0) {\n    while (this._queue.length > this._maximumSubtreeCount) {\n      const lowestPriorityNode = this._queue.getMinimum();\n      if (lowestPriorityNode === cacheNode) {\n        // Don't remove itself\n        break;\n      }\n\n      this._queue.removeMinimum();\n    }\n  }\n};\n\n/**\n * @param {ImplicitTileCoordinates} subtreeCoord\n * @returns {ImplicitSubtree|undefined}\n */\nImplicitSubtreeCache.prototype.find = function (subtreeCoord) {\n  const queue = this._queue;\n  const array = queue.internalArray;\n  const arrayLength = queue.length;\n\n  for (let i = 0; i < arrayLength; i++) {\n    const other = array[i];\n    const otherSubtree = other.subtree;\n    const otherCoord = otherSubtree.implicitCoordinates;\n    if (subtreeCoord.isEqual(otherCoord)) {\n      return other.subtree;\n    }\n  }\n  return undefined;\n};\n\n/**\n * @param {ImplicitSubtreeCacheNode} a\n * @param {ImplicitSubtreeCacheNode} b\n * @returns {number}\n */\nImplicitSubtreeCache.comparator = function (a, b) {\n  const aCoord = a.subtree.implicitCoordinates;\n  const bCoord = b.subtree.implicitCoordinates;\n  if (aCoord.isAncestor(bCoord)) {\n    // Technically this shouldn't happen because the ancestor subtree was supposed to be added to the cache first.\n    return +1.0;\n  } else if (bCoord.isAncestor(aCoord)) {\n    return -1.0;\n  }\n  return a.stamp - b.stamp;\n};\n\n/**\n * @alias ImplicitSubtreeCacheNode\n * @constructor\n *\n * @param {ImplicitSubtree} subtree\n * @param {number} stamp\n *\n * @private\n */\nfunction ImplicitSubtreeCacheNode(subtree, stamp) {\n  this.subtree = subtree;\n  this.stamp = stamp;\n}\n\nexport default ImplicitSubtreeCache;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport MetadataEntity from \"./MetadataEntity.js\";\n\n/**\n * Metadata about an implicit subtree.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.subtreeMetadata The subtree metadata JSON object.\n * @param {MetadataClass} options.class The class that subtree metadata conforms to.\n *\n * @alias ImplicitSubtreeMetadata\n * @constructor\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ImplicitSubtreeMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const subtreeMetadata = options.subtreeMetadata;\n  const metadataClass = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.subtreeMetadata\", subtreeMetadata);\n  Check.typeOf.object(\"options.class\", metadataClass);\n  //>>includeEnd('debug');\n\n  const properties = defined(subtreeMetadata.properties)\n    ? subtreeMetadata.properties\n    : {};\n\n  this._class = metadataClass;\n  this._properties = properties;\n  this._extras = subtreeMetadata.extras;\n  this._extensions = subtreeMetadata.extensions;\n}\n\nObject.defineProperties(ImplicitSubtreeMetadata.prototype, {\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof ImplicitSubtreeMetadata.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof ImplicitSubtreeMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof ImplicitSubtreeMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Returns whether the subtree has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the subtree has this property.\n * @private\n */\nImplicitSubtreeMetadata.prototype.hasProperty = function (propertyId) {\n  return MetadataEntity.hasProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Returns whether the subtree has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the subtree has a property with the given semantic.\n * @private\n */\nImplicitSubtreeMetadata.prototype.hasPropertyBySemantic = function (semantic) {\n  return MetadataEntity.hasPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nImplicitSubtreeMetadata.prototype.getPropertyIds = function (results) {\n  return MetadataEntity.getPropertyIds(this._properties, this._class, results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the subtree does not have this property.\n * @private\n */\nImplicitSubtreeMetadata.prototype.getProperty = function (propertyId) {\n  return MetadataEntity.getProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nImplicitSubtreeMetadata.prototype.setProperty = function (propertyId, value) {\n  return MetadataEntity.setProperty(\n    propertyId,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the subtree does not have this semantic.\n * @private\n */\nImplicitSubtreeMetadata.prototype.getPropertyBySemantic = function (semantic) {\n  return MetadataEntity.getPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nImplicitSubtreeMetadata.prototype.setPropertyBySemantic = function (\n  semantic,\n  value,\n) {\n  return MetadataEntity.setPropertyBySemantic(\n    semantic,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\nexport default ImplicitSubtreeMetadata;\n","import CesiumMath from \"../Core/Math.js\";\nimport Check from \"../Core/Check.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport MortonOrder from \"../Core/MortonOrder.js\";\nimport ImplicitSubdivisionScheme from \"./ImplicitSubdivisionScheme.js\";\n\n/**\n * The coordinates for a tile in an implicit tileset. The coordinates\n * are (level, x, y) for quadtrees or (level, x, y, z) for octrees.\n * <p>\n * Level numbers are 0-indexed and typically start at the root of the implicit\n * tileset (the tile with either implicitTiling in its JSON (3D Tiles 1.1) or\n * the <code>3DTILES_implicit_tiling</code> extension).\n * This object can also represent the relative offset from one set of coordinates\n * to another. See {@link ImplicitTileCoordinates#getOffsetCoordinates}. The term\n * local coordinates refers to coordinates that are relative to the root of a\n * subtree and the term global coordinates refers to coordinates relative to the\n * root of an implicit tileset.\n * </p>\n * <p>\n * For box bounding volumes, x, y, z increase along the +x, +y, and +z\n * directions defined by the half axes.\n * </p>\n * <p>\n * For region bounding volumes, x increases in the +longitude direction, y\n * increases in the +latitude direction, and z increases in the +height\n * direction.\n * </p>\n * <p>\n * Care must be taken when converting between implicit coordinates and Morton\n * indices because there is a 16-bit limit on {@link MortonOrder#encode2D} and\n * a 10-bit limit on {@link MortonOrder#encode3D}. Typically these conversions\n * should be done on local coordinates, not global coordinates, and the maximum\n * number of levels in the subtree should be 15 for quadtree and 9 for octree (to\n * account for the extra level needed by child subtree coordinates).\n * </p>\n *\n * @alias ImplicitTileCoordinates\n * @constructor\n *\n * @param {object} options An object with the following properties:\n * @param {ImplicitSubdivisionScheme} options.subdivisionScheme Whether the coordinates are for a quadtree or octree\n * @param {number} options.subtreeLevels The number of distinct levels within the coordinate's subtree\n * @param {number} options.level The level of a tile relative to the tile with the extension\n * @param {number} options.x The x coordinate of the tile\n * @param {number} options.y The y coordinate of the tile\n * @param {number} [options.z] The z coordinate of the tile. Only required when options.subdivisionScheme is ImplicitSubdivisionScheme.OCTREE\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ImplicitTileCoordinates(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.subdivisionScheme\", options.subdivisionScheme);\n  Check.typeOf.number(\"options.subtreeLevels\", options.subtreeLevels);\n  Check.typeOf.number(\"options.level\", options.level);\n  Check.typeOf.number(\"options.x\", options.x);\n  Check.typeOf.number(\"options.y\", options.y);\n  if (options.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    Check.typeOf.number(\"options.z\", options.z);\n  }\n  // Check for values that are negative\n  if (options.level < 0) {\n    throw new DeveloperError(\"level must be non-negative\");\n  }\n  if (options.x < 0) {\n    throw new DeveloperError(\"x must be non-negative\");\n  }\n  if (options.y < 0) {\n    throw new DeveloperError(\"y must be non-negative\");\n  }\n  if (options.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    if (options.z < 0) {\n      throw new DeveloperError(\"z must be non-negative\");\n    }\n  }\n\n  // Check for values that are too large\n  const dimensionAtLevel = 1 << options.level;\n  if (options.x >= dimensionAtLevel) {\n    throw new DeveloperError(\"x is out of range\");\n  }\n  if (options.y >= dimensionAtLevel) {\n    throw new DeveloperError(\"y is out of range\");\n  }\n  if (options.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    if (options.z >= dimensionAtLevel) {\n      throw new DeveloperError(\"z is out of range\");\n    }\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * Whether the tileset is a quadtree or octree\n   *\n   * @type {ImplicitSubdivisionScheme}\n   * @readonly\n   * @private\n   */\n  this.subdivisionScheme = options.subdivisionScheme;\n\n  /**\n   * The number of distinct levels within the coordinate's subtree\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.subtreeLevels = options.subtreeLevels;\n\n  /**\n   * Level of this tile, relative to the tile with implicit tiling in its JSON\n   * (3D Tiles 1.1) or the <code>3DTILES_implicit_tiling</code> extension.\n   * Level numbers start at 0.\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.level = options.level;\n\n  /**\n   * X coordinate of this tile\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.x = options.x;\n\n  /**\n   * Y coordinate of this tile\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.y = options.y;\n\n  /**\n   * Z coordinate of this tile. Only defined for octrees.\n   *\n   * @type {number|undefined}\n   * @readonly\n   * @private\n   */\n  this.z = undefined;\n  if (options.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    this.z = options.z;\n  }\n}\n\nObject.defineProperties(ImplicitTileCoordinates.prototype, {\n  /**\n   * An index in the range of [0, branchingFactor) that indicates\n   * which child of the parent cell these coordinates correspond to.\n   * This can be viewed as a morton index within the parent tile.\n   * <p>\n   * This is the last 3 bits of the morton index of the tile, but it can\n   * be computed more directly by concatenating the bits [z0] y0 x0\n   * </p>\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  childIndex: {\n    get: function () {\n      let childIndex = 0;\n      childIndex |= this.x & 1;\n      childIndex |= (this.y & 1) << 1;\n      if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n        childIndex |= (this.z & 1) << 2;\n      }\n\n      return childIndex;\n    },\n  },\n\n  /**\n   * Get the Morton index for this tile within the current level by interleaving\n   * the bits of the x, y and z coordinates.\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  mortonIndex: {\n    get: function () {\n      if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n        return MortonOrder.encode3D(this.x, this.y, this.z);\n      }\n      return MortonOrder.encode2D(this.x, this.y);\n    },\n  },\n\n  /**\n   * Get the tile index by adding the Morton index to the level offset\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  tileIndex: {\n    get: function () {\n      const levelOffset =\n        this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE\n          ? // (8^N - 1) / (8-1)\n            ((1 << (3 * this.level)) - 1) / 7\n          : // (4^N - 1) / (4-1)\n            ((1 << (2 * this.level)) - 1) / 3;\n\n      const mortonIndex = this.mortonIndex;\n      return levelOffset + mortonIndex;\n    },\n  },\n});\n\n/**\n * Check that the two coordinates are compatible\n * @param {ImplicitTileCoordinates} a\n * @param {ImplicitTileCoordinates} b\n * @private\n */\nfunction checkMatchingSubtreeShape(a, b) {\n  if (a.subdivisionScheme !== b.subdivisionScheme) {\n    throw new DeveloperError(\"coordinates must have same subdivisionScheme\");\n  }\n  if (a.subtreeLevels !== b.subtreeLevels) {\n    throw new DeveloperError(\"coordinates must have same subtreeLevels\");\n  }\n}\n\n/**\n * Compute the coordinates of a tile deeper in the tree with a (level, x, y, [z]) relative offset.\n *\n * @param {ImplicitTileCoordinates} offsetCoordinates The offset from the ancestor\n * @returns {ImplicitTileCoordinates} The coordinates of the descendant\n * @private\n */\nImplicitTileCoordinates.prototype.getDescendantCoordinates = function (\n  offsetCoordinates,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"offsetCoordinates\", offsetCoordinates);\n  checkMatchingSubtreeShape(this, offsetCoordinates);\n  //>>includeEnd('debug');\n\n  const descendantLevel = this.level + offsetCoordinates.level;\n  const descendantX = (this.x << offsetCoordinates.level) + offsetCoordinates.x;\n  const descendantY = (this.y << offsetCoordinates.level) + offsetCoordinates.y;\n\n  if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    const descendantZ =\n      (this.z << offsetCoordinates.level) + offsetCoordinates.z;\n\n    return new ImplicitTileCoordinates({\n      subdivisionScheme: this.subdivisionScheme,\n      subtreeLevels: this.subtreeLevels,\n      level: descendantLevel,\n      x: descendantX,\n      y: descendantY,\n      z: descendantZ,\n    });\n  }\n\n  // Quadtree\n  return new ImplicitTileCoordinates({\n    subdivisionScheme: this.subdivisionScheme,\n    subtreeLevels: this.subtreeLevels,\n    level: descendantLevel,\n    x: descendantX,\n    y: descendantY,\n  });\n};\n\n/**\n * Compute the coordinates of a tile higher up in the tree by going up a number of levels.\n *\n * @param {number} offsetLevels The number of levels to go up in the tree\n * @returns {ImplicitTileCoordinates} The coordinates of the ancestor\n * @private\n */\nImplicitTileCoordinates.prototype.getAncestorCoordinates = function (\n  offsetLevels,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"offsetLevels\", offsetLevels);\n  if (offsetLevels < 0) {\n    throw new DeveloperError(\"offsetLevels must be non-negative\");\n  }\n  if (offsetLevels > this.level) {\n    throw new DeveloperError(\"ancestor cannot be above the tileset root\");\n  }\n  //>>includeEnd('debug');\n\n  const divisor = 1 << offsetLevels;\n  const ancestorLevel = this.level - offsetLevels;\n  const ancestorX = Math.floor(this.x / divisor);\n  const ancestorY = Math.floor(this.y / divisor);\n\n  if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    const ancestorZ = Math.floor(this.z / divisor);\n\n    return new ImplicitTileCoordinates({\n      subdivisionScheme: this.subdivisionScheme,\n      subtreeLevels: this.subtreeLevels,\n      level: ancestorLevel,\n      x: ancestorX,\n      y: ancestorY,\n      z: ancestorZ,\n    });\n  }\n\n  // Quadtree\n  return new ImplicitTileCoordinates({\n    subdivisionScheme: this.subdivisionScheme,\n    subtreeLevels: this.subtreeLevels,\n    level: ancestorLevel,\n    x: ancestorX,\n    y: ancestorY,\n  });\n};\n\n/**\n * Compute the (level, x, y, [z]) offset to a descendant\n *\n * @param {ImplicitTileCoordinates} descendantCoordinates The descendant coordinates\n * @returns {ImplicitTileCoordinates} The offset between the ancestor and the descendant\n */\nImplicitTileCoordinates.prototype.getOffsetCoordinates = function (\n  descendantCoordinates,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"descendantCoordinates\", descendantCoordinates);\n  if (\n    !this.isEqual(descendantCoordinates) &&\n    !this.isAncestor(descendantCoordinates)\n  ) {\n    throw new DeveloperError(\"this is not an ancestor of descendant\");\n  }\n  checkMatchingSubtreeShape(this, descendantCoordinates);\n  //>>includeEnd('debug');\n\n  const offsetLevel = descendantCoordinates.level - this.level;\n  const dimensionAtOffsetLevel = 1 << offsetLevel;\n\n  const offsetX = descendantCoordinates.x % dimensionAtOffsetLevel;\n  const offsetY = descendantCoordinates.y % dimensionAtOffsetLevel;\n\n  if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    const offsetZ = descendantCoordinates.z % dimensionAtOffsetLevel;\n\n    return new ImplicitTileCoordinates({\n      subdivisionScheme: this.subdivisionScheme,\n      subtreeLevels: this.subtreeLevels,\n      level: offsetLevel,\n      x: offsetX,\n      y: offsetY,\n      z: offsetZ,\n    });\n  }\n\n  // Quadtree\n  return new ImplicitTileCoordinates({\n    subdivisionScheme: this.subdivisionScheme,\n    subtreeLevels: this.subtreeLevels,\n    level: offsetLevel,\n    x: offsetX,\n    y: offsetY,\n  });\n};\n\n/**\n * Given the morton index of the child, compute the coordinates of the child.\n * This is a special case of {@link ImplicitTileCoordinates#getDescendantCoordinates}.\n *\n * @param {number} childIndex The morton index of the child tile relative to its parent\n * @returns {ImplicitTileCoordinates} The tile coordinates of the child\n * @private\n */\nImplicitTileCoordinates.prototype.getChildCoordinates = function (childIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"childIndex\", childIndex);\n  const branchingFactor = ImplicitSubdivisionScheme.getBranchingFactor(\n    this.subdivisionScheme,\n  );\n  if (childIndex < 0 || branchingFactor <= childIndex) {\n    throw new DeveloperError(\n      `childIndex must be at least 0 and less than ${branchingFactor}`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  const level = this.level + 1;\n  const x = 2 * this.x + (childIndex % 2);\n  const y = 2 * this.y + (Math.floor(childIndex / 2) % 2);\n\n  if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    const z = 2 * this.z + (Math.floor(childIndex / 4) % 2);\n    return new ImplicitTileCoordinates({\n      subdivisionScheme: this.subdivisionScheme,\n      subtreeLevels: this.subtreeLevels,\n      level: level,\n      x: x,\n      y: y,\n      z: z,\n    });\n  }\n\n  // Quadtree\n  return new ImplicitTileCoordinates({\n    subdivisionScheme: this.subdivisionScheme,\n    subtreeLevels: this.subtreeLevels,\n    level: level,\n    x: x,\n    y: y,\n  });\n};\n\n/**\n * Get the coordinates of the subtree that contains this tile. If the tile is\n * the root of the subtree, the root of the subtree is returned.\n *\n * @returns {ImplicitTileCoordinates} The subtree that contains this tile\n * @private\n */\nImplicitTileCoordinates.prototype.getSubtreeCoordinates = function () {\n  return this.getAncestorCoordinates(this.level % this.subtreeLevels);\n};\n\n/**\n * Get the coordinates of the parent subtree that contains this tile\n *\n * @returns {ImplicitTileCoordinates} The parent subtree that contains this tile\n * @private\n */\nImplicitTileCoordinates.prototype.getParentSubtreeCoordinates = function () {\n  return this.getAncestorCoordinates(\n    (this.level % this.subtreeLevels) + this.subtreeLevels,\n  );\n};\n\n/**\n * Returns whether this tile is an ancestor of another tile\n *\n * @param {ImplicitTileCoordinates} descendantCoordinates the descendant coordinates\n * @returns {boolean} <code>true</code> if this tile is an ancestor of the other tile\n * @private\n */\nImplicitTileCoordinates.prototype.isAncestor = function (\n  descendantCoordinates,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"descendantCoordinates\", descendantCoordinates);\n  checkMatchingSubtreeShape(this, descendantCoordinates);\n  //>>includeEnd('debug');\n\n  const levelDifference = descendantCoordinates.level - this.level;\n  if (levelDifference <= 0) {\n    return false;\n  }\n\n  const ancestorX = descendantCoordinates.x >> levelDifference;\n  const ancestorY = descendantCoordinates.y >> levelDifference;\n  const isAncestorX = this.x === ancestorX;\n  const isAncestorY = this.y === ancestorY;\n\n  if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    const ancestorZ = descendantCoordinates.z >> levelDifference;\n    const isAncestorZ = this.z === ancestorZ;\n    return isAncestorX && isAncestorY && isAncestorZ;\n  }\n\n  // Quadtree\n  return isAncestorX && isAncestorY;\n};\n\n/**\n * Returns whether the provided coordinates are equal to this coordinate\n *\n * @param {ImplicitTileCoordinates} otherCoordinates the other coordinates\n * @returns {boolean} <code>true</code> if the coordinates are equal\n * @private\n */\nImplicitTileCoordinates.prototype.isEqual = function (otherCoordinates) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"otherCoordinates\", otherCoordinates);\n  //>>includeEnd('debug');\n\n  return (\n    this.subdivisionScheme === otherCoordinates.subdivisionScheme &&\n    this.subtreeLevels === otherCoordinates.subtreeLevels &&\n    this.level === otherCoordinates.level &&\n    this.x === otherCoordinates.x &&\n    this.y === otherCoordinates.y &&\n    (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE\n      ? this.z === otherCoordinates.z\n      : true)\n  );\n};\n\n/**\n * Returns whether this tile is the root of the implicit tileset\n *\n * @returns {boolean} <code>true</code> if this tile is the root\n * @private\n */\nImplicitTileCoordinates.prototype.isImplicitTilesetRoot = function () {\n  return this.level === 0;\n};\n\n/**\n * Returns whether this tile is the root of the subtree\n *\n * @returns {boolean} <code>true</code> if this tile is the root of the subtree\n * @private\n */\nImplicitTileCoordinates.prototype.isSubtreeRoot = function () {\n  return this.level % this.subtreeLevels === 0;\n};\n\n/**\n * Returns whether this tile is on the last row of tiles in the subtree\n *\n * @returns {boolean} <code>true</code> if this tile is on the last row of tiles in the subtree\n * @private\n */\nImplicitTileCoordinates.prototype.isBottomOfSubtree = function () {\n  return this.level % this.subtreeLevels === this.subtreeLevels - 1;\n};\n\n/**\n * Get a dictionary of values for templating into an implicit template URI.\n *\n * @returns {object} An object suitable for use with {@link Resource#getDerivedResource}\n * @private\n */\nImplicitTileCoordinates.prototype.getTemplateValues = function () {\n  const values = {\n    level: this.level,\n    x: this.x,\n    y: this.y,\n  };\n  if (this.subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    values.z = this.z;\n  }\n\n  return values;\n};\n\nconst scratchCoordinatesArray = [0, 0, 0];\n\n/**\n * Given a level number, morton index, and whether the tileset is an\n * octree/quadtree, compute the (level, x, y, [z]) coordinates\n *\n * @param {ImplicitSubdivisionScheme} subdivisionScheme Whether the coordinates are for a quadtree or octree\n * @param {number} subtreeLevels The number of distinct levels within the coordinate's subtree\n * @param {number} level The level of the tree\n * @param {number} mortonIndex The morton index of the tile.\n * @returns {ImplicitTileCoordinates} The coordinates of the tile with the given Morton index\n * @private\n */\nImplicitTileCoordinates.fromMortonIndex = function (\n  subdivisionScheme,\n  subtreeLevels,\n  level,\n  mortonIndex,\n) {\n  let coordinatesArray;\n  if (subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    coordinatesArray = MortonOrder.decode3D(\n      mortonIndex,\n      scratchCoordinatesArray,\n    );\n    return new ImplicitTileCoordinates({\n      subdivisionScheme: subdivisionScheme,\n      subtreeLevels: subtreeLevels,\n      level: level,\n      x: coordinatesArray[0],\n      y: coordinatesArray[1],\n      z: coordinatesArray[2],\n    });\n  }\n\n  coordinatesArray = MortonOrder.decode2D(mortonIndex, scratchCoordinatesArray);\n  return new ImplicitTileCoordinates({\n    subdivisionScheme: subdivisionScheme,\n    subtreeLevels: subtreeLevels,\n    level: level,\n    x: coordinatesArray[0],\n    y: coordinatesArray[1],\n  });\n};\n\n/**\n * Given a tile index and whether the tileset is an octree/quadtree, compute\n * the (level, x, y, [z]) coordinates\n *\n * @param {ImplicitSubdivisionScheme} subdivisionScheme Whether the coordinates are for a quadtree or octree\n * @param {number} subtreeLevels The number of distinct levels within the coordinate's subtree\n * @param {number} tileIndex The tile's index\n * @returns {ImplicitTileCoordinates} The coordinates of the tile with the given tile index\n * @private\n */\nImplicitTileCoordinates.fromTileIndex = function (\n  subdivisionScheme,\n  subtreeLevels,\n  tileIndex,\n) {\n  let level;\n  let levelOffset;\n  let mortonIndex;\n\n  if (subdivisionScheme === ImplicitSubdivisionScheme.OCTREE) {\n    // Node count up to octree level: (8^L - 1) / (8-1)\n    // (8^L - 1) / (8-1) <= X < (8^(L+1) - 1) / (8-1)\n    // 8^L <= (7x + 1) < 8^(L+1)\n    // L <= log8(7x + 1) < L + 1\n    // L = floor(log8(7x + 1))\n    // L = floor(log2(7x + 1) / log2(8))\n    // L = floor(log2(7x + 1) / 3)\n    level = Math.floor(CesiumMath.log2(7 * tileIndex + 1) / 3);\n    levelOffset = ((1 << (3 * level)) - 1) / 7;\n    mortonIndex = tileIndex - levelOffset;\n  } else {\n    // Node count up to quadtree level: (4^L - 1) / (4-1)\n    // (4^L - 1) / (4-1) <= X < (4^(L+1) - 1) / (4-1)\n    // 4^L <= (3x + 1) < 4^(L+1)\n    // L <= log4(3x + 1) < L + 1\n    // L = floor(log4(3x + 1))\n    // L = floor(log2(3x + 1) / log2(4))\n    // L = floor(log2(3x + 1) / 2)\n    level = Math.floor(CesiumMath.log2(3 * tileIndex + 1) / 2);\n    levelOffset = ((1 << (2 * level)) - 1) / 3;\n    mortonIndex = tileIndex - levelOffset;\n  }\n\n  return ImplicitTileCoordinates.fromMortonIndex(\n    subdivisionScheme,\n    subtreeLevels,\n    level,\n    mortonIndex,\n  );\n};\n\nexport default ImplicitTileCoordinates;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport ImplicitSubdivisionScheme from \"./ImplicitSubdivisionScheme.js\";\n\n/**\n * An ImplicitTileset is a simple struct that stores information about the\n * structure of a single implicit tileset. This includes template URIs for\n * locating resources, details from the implicit root tile (bounding volume,\n * geometricError, etc.), and details about the subtrees (e.g. subtreeLevels,\n * subdivisionScheme).\n *\n * @alias ImplicitTileset\n * @constructor\n *\n * @param {Resource} baseResource The base resource for the tileset\n * @param {object} tileJson The JSON header of the tile with either implicit tiling (3D Tiles 1.1) or the 3DTILES_implicit_tiling extension.\n * @param {MetadataSchema} [metadataSchema] The metadata schema containing the implicit tile metadata class.\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ImplicitTileset(baseResource, tileJson, metadataSchema) {\n  const implicitTiling = hasExtension(tileJson, \"3DTILES_implicit_tiling\")\n    ? tileJson.extensions[\"3DTILES_implicit_tiling\"]\n    : tileJson.implicitTiling;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"implicitTiling\", implicitTiling);\n  //>>includeEnd('debug');\n\n  /**\n   * The base resource for the tileset. This is stored here as it is needed\n   * later when expanding Implicit3DTileContents so tile URLs are relative\n   * to the tileset, not the subtree file.\n   *\n   * @type {Resource}\n   * @readonly\n   * @private\n   */\n  this.baseResource = baseResource;\n\n  /**\n   * The geometric error of the root tile\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.geometricError = tileJson.geometricError;\n\n  /**\n   * The metadata schema containing the implicit tile metadata class.\n   *\n   * @type {MetadataSchema|undefined}\n   * @readonly\n   * @private\n   */\n  this.metadataSchema = metadataSchema;\n\n  // Due to using explicit tile metadata to store a tight bounding box\n  // in some cases (see https://github.com/CesiumGS/cesium/pull/11365)\n  // it's important that this bounding volume is computed from the tile JSON\n  // (which is the original, possibly loose bounding volume) rather than\n  // tile.boundingVolume which is the tighter one.\n  const boundingVolume = tileJson.boundingVolume;\n  if (\n    !defined(boundingVolume.box) &&\n    !defined(boundingVolume.region) &&\n    !hasExtension(boundingVolume, \"3DTILES_bounding_volume_S2\") &&\n    !hasExtension(boundingVolume, \"3DTILES_bounding_volume_cylinder\")\n  ) {\n    throw new RuntimeError(\n      \"Only box, region, 3DTILES_bounding_volume_S2, and 3DTILES_bounding_volume_cylinder are supported for implicit tiling\",\n    );\n  }\n\n  /**\n   * The JSON representation of a bounding volume. This is either a box or a\n   * region.\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  this.boundingVolume = boundingVolume;\n\n  /**\n   * The refine strategy as a string, either 'ADD' or 'REPLACE'\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  this.refine = tileJson.refine;\n\n  /**\n   * Template URI for the subtree resources, e.g.\n   * <code>https://example.com/{level}/{x}/{y}.subtree</code>\n   *\n   * @type {Resource}\n   * @readonly\n   * @private\n   */\n\n  this.subtreeUriTemplate = new Resource({ url: implicitTiling.subtrees.uri });\n\n  /**\n   * Template URIs for locating content resources, e.g.\n   * <code>https://example.com/{level}/{x}/{y}.b3dm</code>.\n   * <p>\n   * This is an array to support multiple contents.\n   * </p>\n   *\n   * @type {Resource[]}\n   * @readonly\n   * @private\n   */\n  this.contentUriTemplates = [];\n\n  /**\n   * Store a copy of the content headers, so properties such as\n   * <code>extras</code> or <code>extensions</code> are preserved when\n   * {@link Cesium3DTile}s are created for each tile.\n   * <p>\n   * This is an array to support multiple contents.\n   * </p>\n   *\n   * @type {object[]}\n   * @readonly\n   * @private\n   */\n  this.contentHeaders = [];\n\n  const contentHeaders = gatherContentHeaders(tileJson);\n  for (let i = 0; i < contentHeaders.length; i++) {\n    const contentHeader = contentHeaders[i];\n    this.contentHeaders.push(clone(contentHeader, true));\n    const contentResource = new Resource({ url: contentHeader.uri });\n    this.contentUriTemplates.push(contentResource);\n  }\n\n  /**\n   * The maximum number of contents as well as content availability bitstreams.\n   * This is used for loop bounds when checking content availability.\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.contentCount = this.contentHeaders.length;\n\n  /**\n   * Stores a copy of the root implicit tile's JSON header. This is used\n   * as a template for creating {@link Cesium3DTile}s. The following properties\n   * are removed:\n   *\n   * <ul>\n   * <li><code>tile.implicitTiling</code> to prevent infinite loops of implicit tiling</li>\n   * <li><code>tile.extensions[\"3DTILES_implicit_tiling\"]</code>, if used instead of tile.implicitTiling</li>\n   * <li><code>tile.contents</code>, since contents are handled separately</li>\n   * <li><code>tile.content</code>, if used instead of tile.contents</li>\n   * <li><code>tile.extensions[\"3DTILES_multiple_contents\"]</code>, if used instead of tile.contents or tile.content</li>\n   * </ul>\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  this.tileHeader = makeTileHeaderTemplate(tileJson);\n\n  /**\n   * The subdivision scheme for this implicit tileset; either OCTREE or QUADTREE\n   *\n   * @type {ImplicitSubdivisionScheme}\n   * @readonly\n   * @private\n   */\n  this.subdivisionScheme =\n    ImplicitSubdivisionScheme[implicitTiling.subdivisionScheme];\n\n  /**\n   * The branching factor for this tileset. Either 4 for quadtrees or 8 for\n   * octrees.\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.branchingFactor = ImplicitSubdivisionScheme.getBranchingFactor(\n    this.subdivisionScheme,\n  );\n\n  /**\n   * How many distinct levels within each subtree. For example, a quadtree\n   * with subtreeLevels = 2 will have 5 nodes per quadtree (1 root + 4 children)\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  this.subtreeLevels = implicitTiling.subtreeLevels;\n\n  /**\n   * The number of levels containing available tiles in the tileset.\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  if (defined(implicitTiling.availableLevels)) {\n    this.availableLevels = implicitTiling.availableLevels;\n  } else {\n    this.availableLevels = implicitTiling.maximumLevel + 1;\n  }\n}\n\n/**\n * Gather JSON headers for all contents in the tile.\n * This handles both regular tiles and tiles with multiple contents, either\n * in the contents array (3D Tiles 1.1) or the `3DTILES_multiple_contents` extension\n *\n * @param {object} tileJson The JSON header of the tile with either implicit tiling (3D Tiles 1.1) or the 3DTILES_implicit_tiling extension.\n * @return {object[]} An array of JSON headers for the contents of each tile\n * @private\n */\nfunction gatherContentHeaders(tileJson) {\n  if (hasExtension(tileJson, \"3DTILES_multiple_contents\")) {\n    const extension = tileJson.extensions[\"3DTILES_multiple_contents\"];\n    return defined(extension.contents) ? extension.contents : extension.content;\n  }\n\n  if (defined(tileJson.contents)) {\n    return tileJson.contents;\n  }\n\n  if (defined(tileJson.content)) {\n    return [tileJson.content];\n  }\n\n  return [];\n}\n\nfunction makeTileHeaderTemplate(tileJson) {\n  const template = clone(tileJson, true);\n\n  // Remove the implicit tiling extension to prevent infinite loops,\n  // as well as content-related properties since content is handled separately\n  if (defined(template.extensions)) {\n    delete template.extensions[\"3DTILES_implicit_tiling\"];\n    delete template.extensions[\"3DTILES_multiple_contents\"];\n\n    // if there are no other extensions, remove the extensions property to\n    // keep each tile simple\n    if (Object.keys(template.extensions).length === 0) {\n      delete template.extensions;\n    }\n  }\n\n  delete template.implicitTiling;\n  delete template.contents;\n  delete template.content;\n\n  return template;\n}\n\nexport default ImplicitTileset;\n","import Check from \"../Core/Check.js\";\n\n/**\n * An enum describing the built-in instance attribute semantics.\n *\n * @enum {string}\n *\n * @private\n */\nconst InstanceAttributeSemantic = {\n  /**\n   * Per-instance translation.\n   *\n   * @type {string}\n   * @constant\n   */\n  TRANSLATION: \"TRANSLATION\",\n\n  /**\n   * Per-instance rotation.\n   *\n   * @type {string}\n   * @constant\n   */\n  ROTATION: \"ROTATION\",\n\n  /**\n   * Per-instance scale.\n   *\n   * @type {string}\n   * @constant\n   */\n  SCALE: \"SCALE\",\n\n  /**\n   * Per-instance feature ID.\n   *\n   * @type {string}\n   * @constant\n   */\n  FEATURE_ID: \"_FEATURE_ID\",\n};\n\n/**\n * Gets the instance attribute semantic matching the glTF attribute semantic.\n *\n * @returns {InstanceAttributeSemantic} The instance attribute semantic, or undefined if there is no match.\n *\n * @private\n */\nInstanceAttributeSemantic.fromGltfSemantic = function (gltfSemantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"gltfSemantic\", gltfSemantic);\n  //>>includeEnd('debug');\n\n  let semantic = gltfSemantic;\n\n  // Strip the set index from the semantic\n  const setIndexRegex = /^(\\w+)_\\d+$/;\n  const setIndexMatch = setIndexRegex.exec(gltfSemantic);\n  if (setIndexMatch !== null) {\n    semantic = setIndexMatch[1];\n  }\n\n  switch (semantic) {\n    case \"TRANSLATION\":\n      return InstanceAttributeSemantic.TRANSLATION;\n    case \"ROTATION\":\n      return InstanceAttributeSemantic.ROTATION;\n    case \"SCALE\":\n      return InstanceAttributeSemantic.SCALE;\n    case \"_FEATURE_ID\":\n      return InstanceAttributeSemantic.FEATURE_ID;\n  }\n\n  return undefined;\n};\n\nexport default Object.freeze(InstanceAttributeSemantic);\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Renderbuffer from \"../Renderer/Renderbuffer.js\";\nimport RenderbufferFormat from \"../Renderer/RenderbufferFormat.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * @private\n */\nfunction InvertClassification() {\n  this._numSamples = 1;\n  this.previousFramebuffer = undefined;\n  this._previousFramebuffer = undefined;\n\n  this._depthStencilTexture = undefined;\n  this._depthStencilRenderbuffer = undefined;\n  this._fbo = new FramebufferManager({\n    depthStencil: true,\n    createDepthAttachments: false,\n  });\n  this._fboClassified = new FramebufferManager({\n    depthStencil: true,\n    createDepthAttachments: false,\n  });\n\n  this._rsUnclassified = undefined;\n  this._rsClassified = undefined;\n\n  this._unclassifiedCommand = undefined;\n  this._classifiedCommand = undefined;\n  this._translucentCommand = undefined;\n\n  this._clearColorCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    owner: this,\n  });\n  this._clearCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    depth: 1.0,\n    stencil: 0,\n  });\n\n  const that = this;\n  this._uniformMap = {\n    colorTexture: function () {\n      return that._fbo.getColorTexture();\n    },\n    depthTexture: function () {\n      return that._depthStencilTexture;\n    },\n    classifiedTexture: function () {\n      return that._fboClassified.getColorTexture();\n    },\n  };\n}\n\nObject.defineProperties(InvertClassification.prototype, {\n  unclassifiedCommand: {\n    get: function () {\n      return this._unclassifiedCommand;\n    },\n  },\n});\n\nInvertClassification.isTranslucencySupported = function (context) {\n  return context.depthTexture && context.fragmentDepth;\n};\n\nconst rsUnclassified = {\n  depthMask: false,\n  stencilTest: {\n    enabled: true,\n    frontFunction: StencilFunction.EQUAL,\n    frontOperation: {\n      fail: StencilOperation.KEEP,\n      zFail: StencilOperation.KEEP,\n      zPass: StencilOperation.KEEP,\n    },\n    backFunction: StencilFunction.NEVER,\n    reference: 0,\n    mask: StencilConstants.CLASSIFICATION_MASK,\n  },\n  blending: BlendingState.ALPHA_BLEND,\n};\n\nconst rsClassified = {\n  depthMask: false,\n  stencilTest: {\n    enabled: true,\n    frontFunction: StencilFunction.NOT_EQUAL,\n    frontOperation: {\n      fail: StencilOperation.KEEP,\n      zFail: StencilOperation.KEEP,\n      zPass: StencilOperation.KEEP,\n    },\n    backFunction: StencilFunction.NEVER,\n    reference: 0,\n    mask: StencilConstants.CLASSIFICATION_MASK,\n  },\n  blending: BlendingState.ALPHA_BLEND,\n};\n\n// Set the 3D Tiles bit when rendering back into the scene's framebuffer. This is only needed if\n// invert classification does not use the scene's depth-stencil texture, which is the case if the invert\n// classification color is translucent.\nconst rsDefault = {\n  depthMask: true,\n  depthTest: {\n    enabled: true,\n  },\n  stencilTest: StencilConstants.setCesium3DTileBit(),\n  stencilMask: StencilConstants.CESIUM_3D_TILE_MASK,\n  blending: BlendingState.ALPHA_BLEND,\n};\n\nconst translucentFS =\n  \"uniform sampler2D colorTexture;\\n\" +\n  \"uniform sampler2D depthTexture;\\n\" +\n  \"uniform sampler2D classifiedTexture;\\n\" +\n  \"in vec2 v_textureCoordinates;\\n\" +\n  \"void main()\\n\" +\n  \"{\\n\" +\n  \"    vec4 color = texture(colorTexture, v_textureCoordinates);\\n\" +\n  \"    if (color.a == 0.0)\\n\" +\n  \"    {\\n\" +\n  \"        discard;\\n\" +\n  \"    }\\n\" +\n  \"    bool isClassified = all(equal(texture(classifiedTexture, v_textureCoordinates), vec4(0.0)));\\n\" +\n  \"#ifdef UNCLASSIFIED\\n\" +\n  \"    vec4 highlightColor = czm_invertClassificationColor;\\n\" +\n  \"    if (isClassified)\\n\" +\n  \"    {\\n\" +\n  \"        discard;\\n\" +\n  \"    }\\n\" +\n  \"#else\\n\" +\n  \"    vec4 highlightColor = vec4(1.0);\\n\" +\n  \"    if (!isClassified)\\n\" +\n  \"    {\\n\" +\n  \"        discard;\\n\" +\n  \"    }\\n\" +\n  \"#endif\\n\" +\n  \"    out_FragColor = color * highlightColor;\\n\" +\n  \"    gl_FragDepth = texture(depthTexture, v_textureCoordinates).r;\\n\" +\n  \"}\\n\";\n\nconst opaqueFS =\n  \"uniform sampler2D colorTexture;\\n\" +\n  \"in vec2 v_textureCoordinates;\\n\" +\n  \"void main()\\n\" +\n  \"{\\n\" +\n  \"    vec4 color = texture(colorTexture, v_textureCoordinates);\\n\" +\n  \"    if (color.a == 0.0)\\n\" +\n  \"    {\\n\" +\n  \"        discard;\\n\" +\n  \"    }\\n\" +\n  \"#ifdef UNCLASSIFIED\\n\" +\n  \"    out_FragColor = color * czm_invertClassificationColor;\\n\" +\n  \"#else\\n\" +\n  \"    out_FragColor = color;\\n\" +\n  \"#endif\\n\" +\n  \"}\\n\";\n\nInvertClassification.prototype.update = function (\n  context,\n  numSamples,\n  globeFramebuffer,\n) {\n  const texture = this._fbo.getColorTexture();\n  const previousFramebufferChanged =\n    this.previousFramebuffer !== this._previousFramebuffer;\n  this._previousFramebuffer = this.previousFramebuffer;\n  const samplesChanged = this._numSamples !== numSamples;\n\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight;\n  const textureChanged =\n    !defined(texture) || texture.width !== width || texture.height !== height;\n\n  if (textureChanged || previousFramebufferChanged || samplesChanged) {\n    this._numSamples = numSamples;\n    this._depthStencilTexture =\n      this._depthStencilTexture && this._depthStencilTexture.destroy();\n    this._depthStencilRenderbuffer =\n      this._depthStencilRenderbuffer &&\n      this._depthStencilRenderbuffer.destroy();\n\n    if (!defined(this._previousFramebuffer)) {\n      this._depthStencilTexture = new Texture({\n        context: context,\n        width: width,\n        height: height,\n        pixelFormat: PixelFormat.DEPTH_STENCIL,\n        pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n      });\n      if (numSamples > 1) {\n        this._depthStencilRenderbuffer = new Renderbuffer({\n          context: context,\n          width: width,\n          height: height,\n          format: RenderbufferFormat.DEPTH24_STENCIL8,\n          numSamples: numSamples,\n        });\n      }\n    }\n  }\n\n  if (\n    !defined(this._fbo.framebuffer) ||\n    textureChanged ||\n    previousFramebufferChanged ||\n    samplesChanged\n  ) {\n    this._fbo.destroy();\n    this._fboClassified.destroy();\n\n    let depthStencilTexture;\n    let depthStencilRenderbuffer;\n    if (defined(this._previousFramebuffer)) {\n      depthStencilTexture = globeFramebuffer.getDepthStencilTexture();\n      depthStencilRenderbuffer = globeFramebuffer.getDepthStencilRenderbuffer();\n    } else {\n      depthStencilTexture = this._depthStencilTexture;\n      depthStencilRenderbuffer = this._depthStencilRenderbuffer;\n    }\n\n    this._fbo.setDepthStencilTexture(depthStencilTexture);\n    if (defined(depthStencilRenderbuffer)) {\n      this._fbo.setDepthStencilRenderbuffer(depthStencilRenderbuffer);\n    }\n    this._fbo.update(context, width, height, numSamples);\n\n    if (!defined(this._previousFramebuffer)) {\n      this._fboClassified.setDepthStencilTexture(depthStencilTexture);\n      this._fboClassified.update(context, width, height);\n    }\n  }\n\n  if (!defined(this._rsUnclassified)) {\n    this._rsUnclassified = RenderState.fromCache(rsUnclassified);\n    this._rsClassified = RenderState.fromCache(rsClassified);\n    this._rsDefault = RenderState.fromCache(rsDefault);\n  }\n\n  if (\n    !defined(this._unclassifiedCommand) ||\n    previousFramebufferChanged ||\n    samplesChanged\n  ) {\n    if (defined(this._unclassifiedCommand)) {\n      this._unclassifiedCommand.shaderProgram =\n        this._unclassifiedCommand.shaderProgram &&\n        this._unclassifiedCommand.shaderProgram.destroy();\n      this._classifiedCommand.shaderProgram =\n        this._classifiedCommand.shaderProgram &&\n        this._classifiedCommand.shaderProgram.destroy();\n    }\n\n    const fs = defined(this._previousFramebuffer) ? opaqueFS : translucentFS;\n    const unclassifiedFSSource = new ShaderSource({\n      defines: [\"UNCLASSIFIED\"],\n      sources: [fs],\n    });\n    const classifiedFSSource = new ShaderSource({\n      sources: [fs],\n    });\n    this._unclassifiedCommand = context.createViewportQuadCommand(\n      unclassifiedFSSource,\n      {\n        renderState: defined(this._previousFramebuffer)\n          ? this._rsUnclassified\n          : this._rsDefault,\n        uniformMap: this._uniformMap,\n        owner: this,\n      },\n    );\n    this._classifiedCommand = context.createViewportQuadCommand(\n      classifiedFSSource,\n      {\n        renderState: defined(this._previousFramebuffer)\n          ? this._rsClassified\n          : this._rsDefault,\n        uniformMap: this._uniformMap,\n        owner: this,\n      },\n    );\n\n    if (defined(this._translucentCommand)) {\n      this._translucentCommand.shaderProgram =\n        this._translucentCommand.shaderProgram &&\n        this._translucentCommand.shaderProgram.destroy();\n    }\n    if (!defined(this._previousFramebuffer)) {\n      this._translucentCommand = context.createViewportQuadCommand(\n        PassThrough,\n        {\n          renderState: this._rsUnclassified,\n          uniformMap: this._uniformMap,\n          owner: this,\n        },\n      );\n    }\n  }\n};\n\nInvertClassification.prototype.prepareTextures = function (\n  context,\n  blitStencil,\n) {\n  if (this._fbo._numSamples > 1) {\n    this._fbo.prepareTextures(context, blitStencil);\n  }\n};\n\nInvertClassification.prototype.clear = function (context, passState) {\n  if (defined(this._previousFramebuffer)) {\n    this._fbo.clear(context, this._clearColorCommand, passState);\n  } else {\n    this._fbo.clear(context, this._clearCommand, passState);\n    this._fboClassified.clear(context, this._clearCommand, passState);\n  }\n};\n\nInvertClassification.prototype.executeClassified = function (\n  context,\n  passState,\n) {\n  if (!defined(this._previousFramebuffer)) {\n    const framebuffer = passState.framebuffer;\n\n    this.prepareTextures(context, true);\n    passState.framebuffer = this._fboClassified.framebuffer;\n    this._translucentCommand.execute(context, passState);\n\n    passState.framebuffer = framebuffer;\n  }\n  this._classifiedCommand.execute(context, passState);\n};\n\nInvertClassification.prototype.executeUnclassified = function (\n  context,\n  passState,\n) {\n  this._unclassifiedCommand.execute(context, passState);\n};\n\nInvertClassification.prototype.isDestroyed = function () {\n  return false;\n};\n\nInvertClassification.prototype.destroy = function () {\n  this._fbo.destroy();\n  this._fboClassified.destroy();\n  this._depthStencilTexture =\n    this._depthStencilTexture && this._depthStencilTexture.destroy();\n  this._depthStencilRenderbuffer =\n    this._depthStencilRenderbuffer && this._depthStencilRenderbuffer.destroy();\n\n  if (defined(this._unclassifiedCommand)) {\n    this._unclassifiedCommand.shaderProgram =\n      this._unclassifiedCommand.shaderProgram &&\n      this._unclassifiedCommand.shaderProgram.destroy();\n    this._classifiedCommand.shaderProgram =\n      this._classifiedCommand.shaderProgram &&\n      this._classifiedCommand.shaderProgram.destroy();\n  }\n\n  return destroyObject(this);\n};\nexport default InvertClassification;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport IonResource from \"../Core/IonResource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport IonImageryProviderFactory from \"./IonImageryProviderFactory.js\";\n\n/**\n * @typedef {object} IonImageryProvider.ConstructorOptions\n *\n * Initialization options for the TileMapServiceImageryProvider constructor\n *\n * @property {string} [accessToken=Ion.defaultAccessToken] The access token to use.\n * @property {string|Resource} [server=Ion.defaultServer] The resource to the Cesium ion API server.\n */\n\n/**\n * <div class=\"notice\">\n * To construct a IonImageryProvider, call {@link IonImageryProvider.fromAssetId}. Do not call the constructor directly.\n * </div>\n *\n * Provides tiled imagery using the Cesium ion REST API.\n *\n * @alias IonImageryProvider\n * @constructor\n *\n * @param {IonImageryProvider.ConstructorOptions} [options] Object describing initialization options\n *\n * @example\n * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));\n * viewer.imageryLayers.add(imageryLayer);\n *\n * @see IonImageryProvider.fromAssetId\n */\nfunction IonImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  this._tileCredits = undefined;\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(IonImageryProvider.prototype, {\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   * @memberof IonImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._imageryProvider.rectangle;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof IonImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._imageryProvider.tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof IonImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._imageryProvider.tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof IonImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._imageryProvider.maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested. Generally,\n   * a minimum level should only be used when the rectangle of the imagery is small\n   * enough that the number of tiles at the minimum level is small.  An imagery\n   * provider with more than a few tiles at the minimum level will lead to\n   * rendering problems.\n   * @memberof IonImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return this._imageryProvider.minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof IonImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._imageryProvider.tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof IonImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._imageryProvider.tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof IonImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof IonImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._imageryProvider.credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof IonImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return this._imageryProvider.hasAlphaChannel;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof IonImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   * @default undefined\n   */\n  proxy: {\n    get: function () {\n      return undefined;\n    },\n  },\n});\n\n/**\n * Creates a provider for tiled imagery using the Cesium ion REST API.\n *\n * @param {number} assetId  An ion imagery asset ID.\n * @param {IonImageryProvider.ConstructorOptions} [options] Object describing initialization options.\n * @returns {Promise<IonImageryProvider>} A promise which resolves to the created IonImageryProvider.\n *\n * @example\n * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));\n * viewer.imageryLayers.add(imageryLayer);\n *\n * @exception {RuntimeError} Cesium ion assetId is not an imagery asset\n * @exception {RuntimeError} Unrecognized Cesium ion imagery type\n */\nIonImageryProvider.fromAssetId = async function (assetId, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"assetId\", assetId);\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const endpointResource = IonResource._createEndpointResource(\n    assetId,\n    options,\n  );\n\n  // A simple cache to avoid making repeated requests to ion for endpoints we've\n  // already retrieved. This exists mainly to support Bing caching to reduce\n  // world imagery sessions, but provides a small boost of performance in general\n  // if constantly reloading assets\n  const cacheKey = assetId.toString() + options.accessToken + options.server;\n  let promise = IonImageryProvider._endpointCache[cacheKey];\n  if (!defined(promise)) {\n    promise = endpointResource.fetchJson();\n    IonImageryProvider._endpointCache[cacheKey] = promise;\n  }\n\n  let endpoint = await promise;\n  if (endpoint.type !== \"IMAGERY\") {\n    throw new RuntimeError(\n      `Cesium ion asset ${assetId} is not an imagery asset.`,\n    );\n  }\n\n  const externalType = endpoint.externalType;\n  let factory = IonImageryProviderFactory.defaultFactoryCallback;\n\n  // Make a copy before editing since this object reference is cached;\n  endpoint = clone(endpoint, true);\n  endpoint.options = endpoint.options ?? {};\n  const url = endpoint.options?.url;\n  delete options.url;\n\n  if (defined(externalType)) {\n    factory = IonImageryProviderFactory[externalType];\n\n    if (!defined(factory)) {\n      throw new RuntimeError(\n        `Unrecognized Cesium ion imagery type: ${externalType}`,\n      );\n    }\n  }\n\n  const imageryProvider = await factory(url, endpoint, endpointResource);\n  const provider = new IonImageryProvider(options);\n\n  imageryProvider.errorEvent.addEventListener(function (tileProviderError) {\n    //Propagate the errorEvent but set the provider to this instance instead\n    //of the inner instance.\n    tileProviderError.provider = provider;\n    provider._errorEvent.raiseEvent(tileProviderError);\n  });\n\n  provider._tileCredits = IonResource.getCreditsFromEndpoint(\n    endpoint,\n    endpointResource,\n  );\n\n  provider._imageryProvider = imageryProvider;\n\n  return provider;\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n * @function\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nIonImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  const innerCredits = this._imageryProvider.getTileCredits(x, y, level);\n  if (!defined(innerCredits)) {\n    return this._tileCredits;\n  }\n\n  return this._tileCredits.concat(innerCredits);\n};\n\n/**\n * Requests the image for a given tile.\n * @function\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nIonImageryProvider.prototype.requestImage = function (x, y, level, request) {\n  return this._imageryProvider.requestImage(x, y, level, request);\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function is optional, so it may not exist on all ImageryProviders.\n *\n * @function\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n *                   instances.  The array may be empty if no features are found at the given location.\n *                   It may also be undefined if picking is not supported.\n */\nIonImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return this._imageryProvider.pickFeatures(x, y, level, longitude, latitude);\n};\n\n//exposed for testing\nIonImageryProvider._endpointCache = {};\nexport default IonImageryProvider;\n","import IonResource from \"../Core/IonResource.js\";\nimport ArcGisMapServerImageryProvider from \"./ArcGisMapServerImageryProvider.js\";\nimport BingMapsImageryProvider from \"./BingMapsImageryProvider.js\";\nimport TileMapServiceImageryProvider from \"./TileMapServiceImageryProvider.js\";\nimport GoogleEarthEnterpriseMapsProvider from \"./GoogleEarthEnterpriseMapsProvider.js\";\nimport MapboxImageryProvider from \"./MapboxImageryProvider.js\";\nimport SingleTileImageryProvider from \"./SingleTileImageryProvider.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\nimport WebMapServiceImageryProvider from \"./WebMapServiceImageryProvider.js\";\nimport WebMapTileServiceImageryProvider from \"./WebMapTileServiceImageryProvider.js\";\nimport Google2DImageryProvider from \"./Google2DImageryProvider.js\";\nimport Azure2DImageryProvider from \"./Azure2DImageryProvider.js\";\n\n/**\n * An asynchronous callback function that creates an ImageryProvider from\n * a Cesium ion asset endpoint.\n * @template {ImageryProvider} T\n * @callback IonImageryProviderFactoryCallback\n * @param {string} url The URL of the imagery service.\n * @param {object} endpoint The result of the Cesium ion asset endpoint service.\n * @param {Resource} endpointResource The original resource used to retrieve the endpoint.\n * @returns {Promise<T>} A promise that resolves to an instance of an ImageryProvider.\n * @private\n */\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<TileMapServiceImageryProvider>}\n */\nexport const defaultFactoryCallback = async (url, endpoint, endpointResource) =>\n  TileMapServiceImageryProvider.fromUrl(\n    new IonResource(endpoint, endpointResource),\n  );\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<ArcGisMapServerImageryProvider>}\n */\nexport const ARCGIS_MAPSERVER = async (url, { options }) =>\n  ArcGisMapServerImageryProvider.fromUrl(url, options);\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<BingMapsImageryProvider>}\n */\nexport const BING = async (url, { options }) => {\n  return BingMapsImageryProvider.fromUrl(url, options);\n};\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<GoogleEarthEnterpriseMapsProvider>}\n */\nexport const GOOGLE_EARTH = async (url, { options }) => {\n  const channel = options.channel;\n  delete options.channel;\n  return GoogleEarthEnterpriseMapsProvider.fromUrl(url, channel, options);\n};\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<MapboxImageryProvider>}\n */\nexport const MAPBOX = async (url, { options }) => {\n  return new MapboxImageryProvider({\n    url: url,\n    ...options,\n  });\n};\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<SingleTileImageryProvider>}\n */\nexport const SINGLE_TILE = async (url, { options }) =>\n  SingleTileImageryProvider.fromUrl(url, options);\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<TileMapServiceImageryProvider>}\n */\nexport const TMS = async (url, { options }) =>\n  TileMapServiceImageryProvider.fromUrl(url, options);\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<UrlTemplateImageryProvider>}\n */\nexport const URL_TEMPLATE = async (url, { options }) => {\n  return new UrlTemplateImageryProvider({\n    url: url,\n    ...options,\n  });\n};\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<WebMapServiceImageryProvider>}\n */\nexport const WMS = async (url, { options }) => {\n  return new WebMapServiceImageryProvider({\n    url: url,\n    ...options,\n  });\n};\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<WebMapTileServiceImageryProvider>}\n */\nexport const WMTS = async (url, { options }) => {\n  return new WebMapTileServiceImageryProvider({\n    url: url,\n    ...options,\n  });\n};\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<Google2DImageryProvider>}\n */\nexport const GOOGLE_2D_MAPS = async (url, endpoint, endpointResource) => {\n  delete endpoint.externalType;\n  endpoint.url = url;\n\n  const ionResource = new IonResource(endpoint, endpointResource);\n\n  const callback = (ionRoot, endpoint) => {\n    delete endpoint.externalType;\n    endpoint.url = url;\n\n    const { options } = endpoint;\n    ionRoot.setQueryParameters({\n      session: options.session,\n      key: options.key,\n    });\n  };\n\n  ionResource.refreshCallback = callback;\n  return new Google2DImageryProvider({\n    ...endpoint.options,\n    url: ionResource,\n  });\n};\n\n/**\n * @private\n * @type {IonImageryProviderFactoryCallback<Azure2DImageryProvider>}\n */\nexport const AZURE_MAPS = async (url, endpoint, endpointResource) => {\n  delete endpoint.externalType;\n  endpoint.url = url;\n\n  const ionResource = new IonResource(endpoint, endpointResource);\n\n  const callback = (ionRoot, endpoint) => {\n    delete endpoint.externalType;\n    endpoint.url = url;\n\n    const { options } = endpoint;\n    ionRoot.setQueryParameters({\n      \"subscription-key\": options[\"subscription-key\"],\n    });\n  };\n\n  ionResource.refreshCallback = callback;\n  return new Azure2DImageryProvider({\n    ...endpoint.options,\n    url: ionResource,\n  });\n};\n\n/**\n * Mapping of supported external imagery asset types returned from Cesium ion to their\n * corresponding ImageryProvider constructors.\n * @private\n * @type {object<string, IonImageryProviderFactoryCallback>}\n */\nconst IonImageryProviderFactory = {\n  ARCGIS_MAPSERVER,\n  BING,\n  GOOGLE_EARTH,\n  MAPBOX,\n  SINGLE_TILE,\n  TMS,\n  URL_TEMPLATE,\n  WMS,\n  WMTS,\n  GOOGLE_2D_MAPS,\n  AZURE_MAPS,\n  defaultFactoryCallback,\n};\n\nexport default Object.freeze(IonImageryProviderFactory);\n","// Note, these values map directly to ion asset ids.\n\n/**\n * The types of imagery provided by {@link createWorldImagery}.\n *\n * @enum {number}\n */\nconst IonWorldImageryStyle = {\n  /**\n   * Aerial imagery.\n   *\n   * @type {number}\n   * @constant\n   */\n  AERIAL: 2,\n\n  /**\n   * Aerial imagery with a road overlay.\n   *\n   * @type {number}\n   * @constant\n   */\n  AERIAL_WITH_LABELS: 3,\n\n  /**\n   * Roads without additional imagery.\n   *\n   * @type {number}\n   * @constant\n   */\n  ROAD: 4,\n};\nexport default Object.freeze(IonWorldImageryStyle);\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport JobType from \"./JobType.js\";\n\n/**\n *\n * @private\n * @constructor\n */\nfunction JobTypeBudget(total) {\n  /**\n   * Total budget, in milliseconds, allowed for one frame\n   */\n  this._total = total;\n\n  /**\n   * Time, in milliseconds, used so far during this frame\n   */\n  this.usedThisFrame = 0.0;\n\n  /**\n   * Time, in milliseconds, that other job types stole this frame\n   */\n  this.stolenFromMeThisFrame = 0.0;\n\n  /**\n   * Indicates if this job type was starved this frame, i.e., a job\n   * tried to run but didn't have budget\n   */\n  this.starvedThisFrame = false;\n\n  /**\n   * Indicates if this job was starved last frame.  This prevents it\n   * from being stolen from this frame.\n   */\n  this.starvedLastFrame = false;\n}\n\nObject.defineProperties(JobTypeBudget.prototype, {\n  total: {\n    get: function () {\n      return this._total;\n    },\n  },\n});\n\n/**\n * Engine for time slicing jobs during a frame to amortize work over multiple frames.  This supports:\n * <ul>\n *   <li>\n *     Separate budgets for different job types, e.g., texture, shader program, and buffer creation.  This\n *     allows all job types to make progress each frame.\n *   </li>\n *   <li>\n *     Stealing from other jobs type budgets if they were not exhausted in the previous frame.  This allows\n *     using the entire budget for all job types each frame even if, for example, all the jobs are the same type.\n *   </li>\n *   <li>\n *     Guaranteed progress on all job types each frame, even if it means exceeding the total budget for the frame.\n *     This prevents, for example, several expensive texture uploads over many frames from prevent a shader compile.\n *   </li>\n * </ul>\n *\n * @private\n */\nfunction JobScheduler(budgets) {\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(budgets) && budgets.length !== JobType.NUMBER_OF_JOB_TYPES) {\n    throw new DeveloperError(\n      \"A budget must be specified for each job type; budgets.length should equal JobType.NUMBER_OF_JOB_TYPES.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  // Total for defaults is half of of one frame at 10 fps\n  const jobBudgets = new Array(JobType.NUMBER_OF_JOB_TYPES);\n  jobBudgets[JobType.TEXTURE] = new JobTypeBudget(\n    defined(budgets) ? budgets[JobType.TEXTURE] : 10.0,\n  );\n  // On cache miss, this most likely only allows one shader compile per frame\n  jobBudgets[JobType.PROGRAM] = new JobTypeBudget(\n    defined(budgets) ? budgets[JobType.PROGRAM] : 10.0,\n  );\n  jobBudgets[JobType.BUFFER] = new JobTypeBudget(\n    defined(budgets) ? budgets[JobType.BUFFER] : 30.0,\n  );\n\n  const length = jobBudgets.length;\n  let i;\n\n  let totalBudget = 0.0;\n  for (i = 0; i < length; ++i) {\n    totalBudget += jobBudgets[i].total;\n  }\n\n  const executedThisFrame = new Array(length);\n  for (i = 0; i < length; ++i) {\n    executedThisFrame[i] = false;\n  }\n\n  this._totalBudget = totalBudget;\n  this._totalUsedThisFrame = 0.0;\n  this._budgets = jobBudgets;\n  this._executedThisFrame = executedThisFrame;\n}\n\n// For unit testing\nJobScheduler.getTimestamp = getTimestamp;\n\nObject.defineProperties(JobScheduler.prototype, {\n  totalBudget: {\n    get: function () {\n      return this._totalBudget;\n    },\n  },\n});\n\nJobScheduler.prototype.disableThisFrame = function () {\n  // Prevent jobs from running this frame\n  this._totalUsedThisFrame = this._totalBudget;\n};\n\nJobScheduler.prototype.resetBudgets = function () {\n  const budgets = this._budgets;\n  const length = budgets.length;\n  for (let i = 0; i < length; ++i) {\n    const budget = budgets[i];\n    budget.starvedLastFrame = budget.starvedThisFrame;\n    budget.starvedThisFrame = false;\n    budget.usedThisFrame = 0.0;\n    budget.stolenFromMeThisFrame = 0.0;\n  }\n  this._totalUsedThisFrame = 0.0;\n};\n\nJobScheduler.prototype.execute = function (job, jobType) {\n  const budgets = this._budgets;\n  const budget = budgets[jobType];\n\n  // This ensures each job type makes progress each frame by executing at least once\n  const progressThisFrame = this._executedThisFrame[jobType];\n\n  if (this._totalUsedThisFrame >= this._totalBudget && progressThisFrame) {\n    // No budget left this frame for jobs of any type\n    budget.starvedThisFrame = true;\n    return false;\n  }\n\n  let stolenBudget;\n\n  if (budget.usedThisFrame + budget.stolenFromMeThisFrame >= budget.total) {\n    // No budget remaining for jobs of this type. Try to steal from other job types.\n    const length = budgets.length;\n    let i;\n    for (i = 0; i < length; ++i) {\n      stolenBudget = budgets[i];\n\n      // Steal from this budget if it has time left and it wasn't starved last fame\n      if (\n        stolenBudget.usedThisFrame + stolenBudget.stolenFromMeThisFrame <\n          stolenBudget.total &&\n        !stolenBudget.starvedLastFrame\n      ) {\n        break;\n      }\n    }\n\n    if (i === length && progressThisFrame) {\n      // No other job types can give up their budget this frame, and\n      // this job type already progressed this frame\n      return false;\n    }\n\n    if (progressThisFrame) {\n      // It is considered \"starved\" even if it executes using stolen time so that\n      // next frame, no other job types can steal time from it.\n      budget.starvedThisFrame = true;\n    }\n  }\n\n  const startTime = JobScheduler.getTimestamp();\n  job.execute();\n  const duration = JobScheduler.getTimestamp() - startTime;\n\n  // Track both time remaining for this job type and all jobs\n  // so budget stealing does send us way over the total budget.\n  this._totalUsedThisFrame += duration;\n\n  if (stolenBudget) {\n    stolenBudget.stolenFromMeThisFrame += duration;\n  } else {\n    budget.usedThisFrame += duration;\n  }\n  this._executedThisFrame[jobType] = true;\n\n  return true;\n};\nexport default JobScheduler;\n","/**\n * @private\n */\nconst JobType = {\n  TEXTURE: 0,\n  PROGRAM: 1,\n  BUFFER: 2,\n  NUMBER_OF_JOB_TYPES: 3,\n};\nexport default Object.freeze(JobType);\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport MetadataEntity from \"./MetadataEntity.js\";\n\n/**\n * A table for storing free-form JSON metadata, as in the 3D Tiles batch table.\n *\n * @param {object} options Object with the following properties:\n * @param {number} options.count The number of entities in the table.\n * @param {Object<string, Array>} options.properties The JSON representation of the metadata table. All the arrays must have exactly options.count elements.\n *\n * @alias JsonMetadataTable\n * @constructor\n * @private\n */\n\n// An empty class is used because JsonMetadataTable is an older type of metadata table\n// that does not have a class definition.\nconst emptyClass = {};\n\nfunction JsonMetadataTable(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"options.count\", options.count, 0);\n  Check.typeOf.object(\"options.properties\", options.properties);\n  //>>includeEnd('debug');\n\n  this._count = options.count;\n  this._properties = clone(options.properties, true);\n}\n\n/**\n * Returns whether the table has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the table has this property.\n * @private\n */\nJsonMetadataTable.prototype.hasProperty = function (propertyId) {\n  return MetadataEntity.hasProperty(propertyId, this._properties, emptyClass);\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nJsonMetadataTable.prototype.getPropertyIds = function (results) {\n  return MetadataEntity.getPropertyIds(this._properties, emptyClass, results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n *\n * @param {number} index The index of the entity.\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the entity does not have this property.\n *\n * @exception {DeveloperError} index is out of bounds\n * @private\n */\nJsonMetadataTable.prototype.getProperty = function (index, propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  Check.typeOf.string(\"propertyId\", propertyId);\n\n  if (index < 0 || index >= this._count) {\n    throw new DeveloperError(`index must be in the range [0, ${this._count})`);\n  }\n  //>>includeEnd('debug');\n\n  const property = this._properties[propertyId];\n  if (defined(property)) {\n    return clone(property[index], true);\n  }\n\n  return undefined;\n};\n\n/**\n * Sets the value of the property with the given ID. If the property did not\n * exist, it will be created.\n *\n * @param {number} index The index of the entity.\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n *\n * @exception {DeveloperError} index is out of bounds\n * @private\n */\nJsonMetadataTable.prototype.setProperty = function (index, propertyId, value) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  Check.typeOf.string(\"propertyId\", propertyId);\n\n  if (index < 0 || index >= this._count) {\n    throw new DeveloperError(`index must be in the range [0, ${this._count})`);\n  }\n  //>>includeEnd('debug');\n\n  let property = this._properties[propertyId];\n  if (!defined(property)) {\n    // Property does not exist. Create it.\n    property = new Array(this._count);\n    this._properties[propertyId] = property;\n  }\n\n  property[index] = clone(value, true);\n};\n\nexport default JsonMetadataTable;\n","const LoadState = Object.freeze({\n  UNLOADED: 0, // Has no data and is in dormant state\n  RECEIVING: 1, // Is waiting on data from the provider\n  PROCESSING: 2, // Data received.  Contents are being processed for rendering.  Depending on the content, it might make its own requests for external data.\n  LOADED: 3, // Processed data from provider\n  FAILED: 4, // Failed to receive data from the provider\n  UNAVAILABLE: 5, // No data available for this tile\n});\n\n/**\n * @alias KeyframeNode\n * @constructor\n *\n * @param {SpatialNode} spatialNode\n * @param {number} keyframe\n *\n * @private\n */\nfunction KeyframeNode(spatialNode, keyframe) {\n  this.spatialNode = spatialNode;\n  this.keyframe = keyframe;\n  this.state = LoadState.UNLOADED;\n  this.content = undefined;\n  this.megatextureIndex = -1;\n  this.priority = -Number.MAX_VALUE;\n  this.highPriorityFrameNumber = -1;\n}\n\n/**\n * Frees the resources used by this object.\n * @private\n */\nKeyframeNode.prototype.unload = function () {\n  this.content = this.content && this.content.destroy();\n\n  this.spatialNode = undefined;\n  this.state = LoadState.UNLOADED;\n  this.megatextureIndex = -1;\n  this.priority = -Number.MAX_VALUE;\n  this.highPriorityFrameNumber = -1;\n};\n\n/**\n * @param {KeyframeNode} a\n * @param {KeyframeNode} b\n */\nKeyframeNode.priorityComparator = function (a, b) {\n  return a.priority - b.priority;\n};\n\n/**\n * @param {KeyframeNode} a\n * @param {KeyframeNode} b\n */\nKeyframeNode.searchComparator = function (a, b) {\n  return a.keyframe - b.keyframe;\n};\n\nKeyframeNode.LoadState = LoadState;\n\nexport default KeyframeNode;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Billboard from \"./Billboard.js\";\nimport HeightReference from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport LabelStyle from \"./LabelStyle.js\";\nimport SDFSettings from \"./SDFSettings.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\n\nconst fontInfoCache = {};\nlet fontInfoCacheLength = 0;\nconst fontInfoCacheMaxSize = 256;\nconst defaultBackgroundColor = new Color(0.165, 0.165, 0.165, 0.8);\nconst defaultBackgroundPadding = new Cartesian2(7, 5);\n\nconst textTypes = Object.freeze({\n  LTR: 0,\n  RTL: 1,\n  WEAK: 2,\n  BRACKETS: 3,\n});\n\nfunction rebindAllGlyphs(label) {\n  if (!label._rebindAllGlyphs && !label._repositionAllGlyphs) {\n    // only push label if it's not already been marked dirty\n    label._labelCollection._labelsToUpdate.push(label);\n  }\n  label._rebindAllGlyphs = true;\n}\n\nfunction repositionAllGlyphs(label) {\n  if (!label._rebindAllGlyphs && !label._repositionAllGlyphs) {\n    // only push label if it's not already been marked dirty\n    label._labelCollection._labelsToUpdate.push(label);\n  }\n  label._repositionAllGlyphs = true;\n}\n\nfunction getCSSValue(element, property) {\n  return document.defaultView\n    .getComputedStyle(element, null)\n    .getPropertyValue(property);\n}\n\nfunction parseFont(label) {\n  let fontInfo = fontInfoCache[label._font];\n  if (!defined(fontInfo)) {\n    const div = document.createElement(\"div\");\n    div.style.position = \"absolute\";\n    div.style.opacity = 0;\n    div.style.font = label._font;\n    document.body.appendChild(div);\n\n    let lineHeight = parseFloat(getCSSValue(div, \"line-height\"));\n    if (isNaN(lineHeight)) {\n      // line-height isn't a number, i.e. 'normal'; apply default line-spacing\n      lineHeight = undefined;\n    }\n\n    fontInfo = {\n      family: getCSSValue(div, \"font-family\"),\n      size: getCSSValue(div, \"font-size\").replace(\"px\", \"\"),\n      style: getCSSValue(div, \"font-style\"),\n      weight: getCSSValue(div, \"font-weight\"),\n      lineHeight: lineHeight,\n    };\n\n    document.body.removeChild(div);\n    if (fontInfoCacheLength < fontInfoCacheMaxSize) {\n      fontInfoCache[label._font] = fontInfo;\n      fontInfoCacheLength++;\n    }\n  }\n  label._fontFamily = fontInfo.family;\n  label._fontSize = fontInfo.size;\n  label._fontStyle = fontInfo.style;\n  label._fontWeight = fontInfo.weight;\n  label._lineHeight = fontInfo.lineHeight;\n}\n\n/**\n * @typedef {object} Label.ConstructorOptions\n *\n * Initialization options for the Label constructor\n *\n * @property {Cartesian3} position The cartesian position of the label.\n * @property {*} [id] A user-defined object to return when the label is picked with {@link Scene#pick}.\n * @property {boolean} [show=true] Determines if this label will be shown.\n * @property {string} [text] A string specifying the text of the label.\n * @property {string} [font='30px sans-serif'] A string specifying the font used to draw this label. Fonts are specified using the same syntax as the CSS 'font' property.\n * @property {LabelStyle} [style=LabelStyle.FILL] A {@link LabelStyle} specifying the style of the label.\n * @property {number} [scale=1.0] A number specifying the uniform scale that is multiplied with the label size.\n * @property {boolean} [showBackground=false] Determines if a background behind this label will be shown.\n * @property {Color} [backgroundColor=new Color(0.165, 0.165, 0.165, 0.8)] A {@link Color} specifying the background color of the label.\n * @property {Cartesian2} [backgroundPadding=new Cartesian2(7, 5)] A {@link Cartesian2} Specifying the horizontal and vertical background padding in pixels.\n * @property {Cartesian2} [pixelOffset=Cartesian2.ZERO] A {@link Cartesian2} specifying the pixel offset in screen space from the origin of this label.\n * @property {Cartesian3} [eyeOffset=Cartesian3.ZERO] A {@link Cartesian3} specifying the 3D Cartesian offset applied to this label in eye coordinates.\n * @property {HorizontalOrigin} [horizontalOrigin=HorizontalOrigin.LEFT] A {@link HorizontalOrigin} specifying the horizontal origin of this label.\n * @property {VerticalOrigin} [verticalOrigin=VerticalOrigin.BASELINE] A {@link VerticalOrigin} specifying the vertical origin of this label.\n * @property {HeightReference} [heightReference=HeightReference.NONE] A {@link HeightReference} specifying the height reference of this label.\n * @property {Color} [fillColor=Color.WHITE] A {@link Color} specifying the fill color of the label.\n * @property {Color} [outlineColor=Color.BLACK] A {@link Color} specifying the outline color of the label.\n * @property {number} [outlineWidth=1.0] A number specifying the outline width of the label.\n * @property {NearFarScalar} [translucencyByDistance] A {@link NearFarScalar} specifying near and far translucency properties of the label based on the label's distance from the camera.\n * @property {NearFarScalar} [pixelOffsetScaleByDistance] A {@link NearFarScalar} specifying near and far pixel offset scaling properties of the label based on the label's distance from the camera.\n * @property {NearFarScalar} [scaleByDistance] A {@link NearFarScalar} specifying near and far scaling properties of the label based on the label's distance from the camera.\n * @property {DistanceDisplayCondition} [distanceDisplayCondition] A {@link DistanceDisplayCondition} specifying at what distance from the camera that this label will be displayed.\n * @property {number} [disableDepthTestDistance] The distance from the camera, beyond which, depth testing is disabled—to, for example, prevent clipping against terrain.\n */\n\n/**\n * <div class=\"notice\">\n * Create labels by calling {@link LabelCollection#add}. Do not call the constructor directly.\n * </div>\n *\n * @alias Label\n * @internalConstructor\n * @class\n *\n * @param {Label.ConstructorOptions} options Object describing initialization options\n * @param {LabelCollection} labelCollection Instance of LabelCollection\n *\n * @exception {DeveloperError} translucencyByDistance.far must be greater than translucencyByDistance.near\n * @exception {DeveloperError} pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @see LabelCollection\n * @see LabelCollection#add\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=labels|Cesium Sandcastle Labels Demo}\n */\nfunction Label(options, labelCollection) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    defined(options.disableDepthTestDistance) &&\n    options.disableDepthTestDistance < 0.0\n  ) {\n    throw new DeveloperError(\n      \"disableDepthTestDistance must be greater than 0.0.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let translucencyByDistance = options.translucencyByDistance;\n  let pixelOffsetScaleByDistance = options.pixelOffsetScaleByDistance;\n  let scaleByDistance = options.scaleByDistance;\n  let distanceDisplayCondition = options.distanceDisplayCondition;\n  if (defined(translucencyByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (translucencyByDistance.far <= translucencyByDistance.near) {\n      throw new DeveloperError(\n        \"translucencyByDistance.far must be greater than translucencyByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    translucencyByDistance = NearFarScalar.clone(translucencyByDistance);\n  }\n  if (defined(pixelOffsetScaleByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (pixelOffsetScaleByDistance.far <= pixelOffsetScaleByDistance.near) {\n      throw new DeveloperError(\n        \"pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    pixelOffsetScaleByDistance = NearFarScalar.clone(\n      pixelOffsetScaleByDistance,\n    );\n  }\n  if (defined(scaleByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (scaleByDistance.far <= scaleByDistance.near) {\n      throw new DeveloperError(\n        \"scaleByDistance.far must be greater than scaleByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    scaleByDistance = NearFarScalar.clone(scaleByDistance);\n  }\n  if (defined(distanceDisplayCondition)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n      throw new DeveloperError(\n        \"distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    distanceDisplayCondition = DistanceDisplayCondition.clone(\n      distanceDisplayCondition,\n    );\n  }\n\n  this._renderedText = undefined;\n  this._text = undefined;\n  this._show = options.show ?? true;\n  this._font = options.font ?? \"30px sans-serif\";\n  this._fillColor = Color.clone(options.fillColor ?? Color.WHITE);\n  this._outlineColor = Color.clone(options.outlineColor ?? Color.BLACK);\n  this._outlineWidth = options.outlineWidth ?? 1.0;\n  this._showBackground = options.showBackground ?? false;\n  this._backgroundColor = Color.clone(\n    options.backgroundColor ?? defaultBackgroundColor,\n  );\n  this._backgroundPadding = Cartesian2.clone(\n    options.backgroundPadding ?? defaultBackgroundPadding,\n  );\n  this._style = options.style ?? LabelStyle.FILL;\n  this._verticalOrigin = options.verticalOrigin ?? VerticalOrigin.BASELINE;\n  this._horizontalOrigin = options.horizontalOrigin ?? HorizontalOrigin.LEFT;\n  this._pixelOffset = Cartesian2.clone(options.pixelOffset ?? Cartesian2.ZERO);\n  this._eyeOffset = Cartesian3.clone(options.eyeOffset ?? Cartesian3.ZERO);\n  this._position = Cartesian3.clone(options.position ?? Cartesian3.ZERO);\n  this._scale = options.scale ?? 1.0;\n  this._id = options.id;\n  this._translucencyByDistance = translucencyByDistance;\n  this._pixelOffsetScaleByDistance = pixelOffsetScaleByDistance;\n  this._scaleByDistance = scaleByDistance;\n  this._heightReference = options.heightReference ?? HeightReference.NONE;\n  this._distanceDisplayCondition = distanceDisplayCondition;\n  this._disableDepthTestDistance = options.disableDepthTestDistance;\n\n  this._labelCollection = labelCollection;\n  this._glyphs = [];\n  this._backgroundBillboard = undefined;\n  this._batchIndex = undefined; // Used only by Vector3DTilePoints and BillboardCollection\n\n  this._rebindAllGlyphs = true;\n  this._repositionAllGlyphs = true;\n\n  this._actualClampedPosition = undefined;\n  this._removeCallbackFunc = undefined;\n  this._mode = undefined;\n\n  this._clusterShow = true;\n\n  this.text = options.text ?? \"\";\n\n  this._relativeSize = 1.0;\n\n  parseFont(this);\n\n  this._updateClamping();\n}\n\nObject.defineProperties(Label.prototype, {\n  /**\n   * Determines if this label will be shown.  Use this to hide or show a label, instead\n   * of removing it and re-adding it to the collection.\n   * @memberof Label.prototype\n   * @type {boolean}\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._show !== value) {\n        this._show = value;\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const billboard = glyphs[i].billboard;\n          if (defined(billboard)) {\n            billboard.show = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.show = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the Cartesian position of this label.\n   * @memberof Label.prototype\n   * @type {Cartesian3}\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const position = this._position;\n      if (!Cartesian3.equals(position, value)) {\n        Cartesian3.clone(value, position);\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const billboard = glyphs[i].billboard;\n          if (defined(billboard)) {\n            billboard.position = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.position = value;\n        }\n\n        this._updateClamping();\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the height reference of this billboard.\n   * @memberof Label.prototype\n   * @type {HeightReference}\n   * @default HeightReference.NONE\n   */\n  heightReference: {\n    get: function () {\n      return this._heightReference;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (value !== this._heightReference) {\n        this._heightReference = value;\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const billboard = glyphs[i].billboard;\n          if (defined(billboard)) {\n            billboard.heightReference = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.heightReference = value;\n        }\n\n        repositionAllGlyphs(this);\n\n        this._updateClamping();\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the text of this label.\n   * @memberof Label.prototype\n   * @type {string}\n   */\n  text: {\n    get: function () {\n      return this._text;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._text !== value) {\n        this._text = value;\n\n        const renderedValue = Label.filterUnsupportedCharacters(value);\n        this._renderedText = Label.enableRightToLeftDetection\n          ? reverseRtl(renderedValue)\n          : renderedValue;\n        rebindAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the font used to draw this label. Fonts are specified using the same syntax as the CSS 'font' property.\n   * @memberof Label.prototype\n   * @type {string}\n   * @default '30px sans-serif'\n   * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#text-styles|HTML canvas 2D context text styles}\n   */\n  font: {\n    get: function () {\n      return this._font;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._font !== value) {\n        this._font = value;\n        rebindAllGlyphs(this);\n        parseFont(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the fill color of this label.\n   * @memberof Label.prototype\n   * @type {Color}\n   * @default Color.WHITE\n   * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#fill-and-stroke-styles|HTML canvas 2D context fill and stroke styles}\n   */\n  fillColor: {\n    get: function () {\n      return this._fillColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const fillColor = this._fillColor;\n      if (!Color.equals(fillColor, value)) {\n        Color.clone(value, fillColor);\n        rebindAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the outline color of this label.\n   * @memberof Label.prototype\n   * @type {Color}\n   * @default Color.BLACK\n   * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#fill-and-stroke-styles|HTML canvas 2D context fill and stroke styles}\n   */\n  outlineColor: {\n    get: function () {\n      return this._outlineColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const outlineColor = this._outlineColor;\n      if (!Color.equals(outlineColor, value)) {\n        Color.clone(value, outlineColor);\n        rebindAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the outline width of this label.\n   * @memberof Label.prototype\n   * @type {number}\n   * @default 1.0\n   * @see {@link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#fill-and-stroke-styles|HTML canvas 2D context fill and stroke styles}\n   */\n  outlineWidth: {\n    get: function () {\n      return this._outlineWidth;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._outlineWidth !== value) {\n        this._outlineWidth = value;\n        rebindAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Determines if a background behind this label will be shown.\n   * @memberof Label.prototype\n   * @default false\n   * @type {boolean}\n   */\n  showBackground: {\n    get: function () {\n      return this._showBackground;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._showBackground !== value) {\n        this._showBackground = value;\n        rebindAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the background color of this label.\n   * @memberof Label.prototype\n   * @type {Color}\n   * @default new Color(0.165, 0.165, 0.165, 0.8)\n   */\n  backgroundColor: {\n    get: function () {\n      return this._backgroundColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const backgroundColor = this._backgroundColor;\n      if (!Color.equals(backgroundColor, value)) {\n        Color.clone(value, backgroundColor);\n\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.color = backgroundColor;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the background padding, in pixels, of this label.  The <code>x</code> value\n   * controls horizontal padding, and the <code>y</code> value controls vertical padding.\n   * @memberof Label.prototype\n   * @type {Cartesian2}\n   * @default new Cartesian2(7, 5)\n   */\n  backgroundPadding: {\n    get: function () {\n      return this._backgroundPadding;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const backgroundPadding = this._backgroundPadding;\n      if (!Cartesian2.equals(backgroundPadding, value)) {\n        Cartesian2.clone(value, backgroundPadding);\n        repositionAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the style of this label.\n   * @memberof Label.prototype\n   * @type {LabelStyle}\n   * @default LabelStyle.FILL\n   */\n  style: {\n    get: function () {\n      return this._style;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._style !== value) {\n        this._style = value;\n        rebindAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the pixel offset in screen space from the origin of this label.  This is commonly used\n   * to align multiple labels and billboards at the same position, e.g., an image and text.  The\n   * screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n   * left to right, and <code>y</code> increases from top to bottom.\n   * <br /><br />\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><code>default</code><br/><img src='Images/Label.setPixelOffset.default.png' width='250' height='188' /></td>\n   * <td align='center'><code>l.pixeloffset = new Cartesian2(25, 75);</code><br/><img src='Images/Label.setPixelOffset.x50y-25.png' width='250' height='188' /></td>\n   * </tr></table>\n   * The label's origin is indicated by the yellow point.\n   * </div>\n   * @memberof Label.prototype\n   * @type {Cartesian2}\n   * @default Cartesian2.ZERO\n   */\n  pixelOffset: {\n    get: function () {\n      return this._pixelOffset;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const pixelOffset = this._pixelOffset;\n      if (!Cartesian2.equals(pixelOffset, value)) {\n        Cartesian2.clone(value, pixelOffset);\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.pixelOffset = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.pixelOffset = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far translucency properties of a Label based on the Label's distance from the camera.\n   * A label's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the label's translucency remains clamped to the nearest bound.  If undefined,\n   * translucencyByDistance will be disabled.\n   * @memberof Label.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a label's translucencyByDistance to 1.0 when the\n   * // camera is 1500 meters from the label and disappear as\n   * // the camera distance approaches 8.0e6 meters.\n   * text.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable translucency by distance\n   * text.translucencyByDistance = undefined;\n   */\n  translucencyByDistance: {\n    get: function () {\n      return this._translucencyByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const translucencyByDistance = this._translucencyByDistance;\n      if (!NearFarScalar.equals(translucencyByDistance, value)) {\n        this._translucencyByDistance = NearFarScalar.clone(\n          value,\n          translucencyByDistance,\n        );\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.translucencyByDistance = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.translucencyByDistance = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far pixel offset scaling properties of a Label based on the Label's distance from the camera.\n   * A label's pixel offset will be scaled between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the label's pixel offset scaling remains clamped to the nearest bound.  If undefined,\n   * pixelOffsetScaleByDistance will be disabled.\n   * @memberof Label.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a label's pixel offset scale to 0.0 when the\n   * // camera is 1500 meters from the label and scale pixel offset to 10.0 pixels\n   * // in the y direction the camera distance approaches 8.0e6 meters.\n   * text.pixelOffset = new Cesium.Cartesian2(0.0, 1.0);\n   * text.pixelOffsetScaleByDistance = new Cesium.NearFarScalar(1.5e2, 0.0, 8.0e6, 10.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable pixel offset by distance\n   * text.pixelOffsetScaleByDistance = undefined;\n   */\n  pixelOffsetScaleByDistance: {\n    get: function () {\n      return this._pixelOffsetScaleByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const pixelOffsetScaleByDistance = this._pixelOffsetScaleByDistance;\n      if (!NearFarScalar.equals(pixelOffsetScaleByDistance, value)) {\n        this._pixelOffsetScaleByDistance = NearFarScalar.clone(\n          value,\n          pixelOffsetScaleByDistance,\n        );\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.pixelOffsetScaleByDistance = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.pixelOffsetScaleByDistance = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far scaling properties of a Label based on the label's distance from the camera.\n   * A label's scale will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the label's scale remains clamped to the nearest bound.  If undefined,\n   * scaleByDistance will be disabled.\n   * @memberof Label.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a label's scaleByDistance to scale by 1.5 when the\n   * // camera is 1500 meters from the label and disappear as\n   * // the camera distance approaches 8.0e6 meters.\n   * label.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1.5, 8.0e6, 0.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable scaling by distance\n   * label.scaleByDistance = undefined;\n   */\n  scaleByDistance: {\n    get: function () {\n      return this._scaleByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const scaleByDistance = this._scaleByDistance;\n      if (!NearFarScalar.equals(scaleByDistance, value)) {\n        this._scaleByDistance = NearFarScalar.clone(value, scaleByDistance);\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.scaleByDistance = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.scaleByDistance = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets and sets the 3D Cartesian offset applied to this label in eye coordinates.  Eye coordinates is a left-handed\n   * coordinate system, where <code>x</code> points towards the viewer's right, <code>y</code> points up, and\n   * <code>z</code> points into the screen.  Eye coordinates use the same scale as world and model coordinates,\n   * which is typically meters.\n   * <br /><br />\n   * An eye offset is commonly used to arrange multiple label or objects at the same position, e.g., to\n   * arrange a label above its corresponding 3D model.\n   * <br /><br />\n   * Below, the label is positioned at the center of the Earth but an eye offset makes it always\n   * appear on top of the Earth regardless of the viewer's or Earth's orientation.\n   * <br /><br />\n   * <div align='center'>\n   * <table border='0' cellpadding='5'><tr>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>\n   * <td align='center'><img src='Images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>\n   * </tr></table>\n   * <code>l.eyeOffset = new Cartesian3(0.0, 8000000.0, 0.0);</code><br /><br />\n   * </div>\n   * @memberof Label.prototype\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   */\n  eyeOffset: {\n    get: function () {\n      return this._eyeOffset;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const eyeOffset = this._eyeOffset;\n      if (!Cartesian3.equals(eyeOffset, value)) {\n        Cartesian3.clone(value, eyeOffset);\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.eyeOffset = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.eyeOffset = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the horizontal origin of this label, which determines if the label is drawn\n   * to the left, center, or right of its anchor position.\n   * <br /><br />\n   * <div align='center'>\n   * <img src='Images/Billboard.setHorizontalOrigin.png' width='648' height='196' /><br />\n   * </div>\n   * @memberof Label.prototype\n   * @type {HorizontalOrigin}\n   * @default HorizontalOrigin.LEFT\n   * @example\n   * // Use a top, right origin\n   * l.horizontalOrigin = Cesium.HorizontalOrigin.RIGHT;\n   * l.verticalOrigin = Cesium.VerticalOrigin.TOP;\n   */\n  horizontalOrigin: {\n    get: function () {\n      return this._horizontalOrigin;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._horizontalOrigin !== value) {\n        this._horizontalOrigin = value;\n        repositionAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the vertical origin of this label, which determines if the label is\n   * to the above, below, or at the center of its anchor position.\n   * <br /><br />\n   * <div align='center'>\n   * <img src='Images/Billboard.setVerticalOrigin.png' width='695' height='175' /><br />\n   * </div>\n   * @memberof Label.prototype\n   * @type {VerticalOrigin}\n   * @default VerticalOrigin.BASELINE\n   * @example\n   * // Use a top, right origin\n   * l.horizontalOrigin = Cesium.HorizontalOrigin.RIGHT;\n   * l.verticalOrigin = Cesium.VerticalOrigin.TOP;\n   */\n  verticalOrigin: {\n    get: function () {\n      return this._verticalOrigin;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._verticalOrigin !== value) {\n        this._verticalOrigin = value;\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.verticalOrigin = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.verticalOrigin = value;\n        }\n\n        repositionAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the uniform scale that is multiplied with the label's size in pixels.\n   * A scale of <code>1.0</code> does not change the size of the label; a scale greater than\n   * <code>1.0</code> enlarges the label; a positive scale less than <code>1.0</code> shrinks\n   * the label.\n   * <br /><br />\n   * Applying a large scale value may pixelate the label.  To make text larger without pixelation,\n   * use a larger font size when calling {@link Label#font} instead.\n   * <br /><br />\n   * <div align='center'>\n   * <img src='Images/Label.setScale.png' width='400' height='300' /><br/>\n   * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>,\n   * and <code>2.0</code>.\n   * </div>\n   * @memberof Label.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._scale !== value) {\n        this._scale = value;\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.scale = value * this._relativeSize;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.scale = value * this._relativeSize;\n        }\n\n        repositionAllGlyphs(this);\n      }\n    },\n  },\n\n  /**\n   * Gets the total scale of the label, which is the label's scale multiplied by the computed relative size\n   * of the desired font compared to the generated glyph size.\n   * @memberof Label.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  totalScale: {\n    get: function () {\n      return this._scale * this._relativeSize;\n    },\n  },\n\n  /**\n   * Gets or sets the condition specifying at what distance from the camera that this label will be displayed.\n   * @memberof Label.prototype\n   * @type {DistanceDisplayCondition}\n   * @default undefined\n   */\n  distanceDisplayCondition: {\n    get: function () {\n      return this._distanceDisplayCondition;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\"far must be greater than near\");\n      }\n      //>>includeEnd('debug');\n      if (\n        !DistanceDisplayCondition.equals(value, this._distanceDisplayCondition)\n      ) {\n        this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n          value,\n          this._distanceDisplayCondition,\n        );\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.distanceDisplayCondition = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.distanceDisplayCondition = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the distance from the camera, beyond which, depth testing is disabled—to, for example, prevent clipping against terrain.\n   * When set to <code>undefined</code> or\n   * <code>0</code>, the depth test is always applied. When set to Number.<code>POSITIVE_INFINITY</code>, the depth test is never applied.\n   * @memberof Label.prototype\n   * @type {number|undefined}\n   * @default undefined\n   */\n  disableDepthTestDistance: {\n    get: function () {\n      return this._disableDepthTestDistance;\n    },\n    set: function (value) {\n      if (this._disableDepthTestDistance !== value) {\n        //>>includeStart('debug', pragmas.debug);\n        if (defined(value) && value < 0.0) {\n          throw new DeveloperError(\n            \"disableDepthTestDistance must be greater than 0.0.\",\n          );\n        }\n        //>>includeEnd('debug');\n        this._disableDepthTestDistance = value;\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.disableDepthTestDistance = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.disableDepthTestDistance = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the user-defined value returned when the label is picked.\n   * @memberof Label.prototype\n   * @type {*}\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n    set: function (value) {\n      if (this._id !== value) {\n        this._id = value;\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.id = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.id = value;\n        }\n      }\n    },\n  },\n\n  /**\n   * @private\n   */\n  pickId: {\n    get: function () {\n      if (this._glyphs.length === 0 || !defined(this._glyphs[0].billboard)) {\n        return undefined;\n      }\n      return this._glyphs[0].billboard.pickId;\n    },\n  },\n\n  /**\n   * Keeps track of the position of the label based on the height reference.\n   * @memberof Label.prototype\n   * @type {Cartesian3}\n   * @private\n   */\n  _clampedPosition: {\n    get: function () {\n      return this._actualClampedPosition;\n    },\n    set: function (value) {\n      this._actualClampedPosition = Cartesian3.clone(\n        value,\n        this._actualClampedPosition,\n      );\n\n      const glyphs = this._glyphs;\n      for (let i = 0, len = glyphs.length; i < len; i++) {\n        const glyph = glyphs[i];\n        if (defined(glyph.billboard)) {\n          // Set all the private values here, because we already clamped to ground\n          //  so we don't want to do it again for every glyph\n          glyph.billboard._clampedPosition = value;\n        }\n      }\n      const backgroundBillboard = this._backgroundBillboard;\n      if (defined(backgroundBillboard)) {\n        backgroundBillboard._clampedPosition = value;\n      }\n    },\n  },\n\n  /**\n   * Determines whether or not this label will be shown or hidden because it was clustered.\n   * @memberof Label.prototype\n   * @type {boolean}\n   * @default true\n   * @private\n   */\n  clusterShow: {\n    get: function () {\n      return this._clusterShow;\n    },\n    set: function (value) {\n      if (this._clusterShow !== value) {\n        this._clusterShow = value;\n\n        const glyphs = this._glyphs;\n        for (let i = 0, len = glyphs.length; i < len; i++) {\n          const glyph = glyphs[i];\n          if (defined(glyph.billboard)) {\n            glyph.billboard.clusterShow = value;\n          }\n        }\n        const backgroundBillboard = this._backgroundBillboard;\n        if (defined(backgroundBillboard)) {\n          backgroundBillboard.clusterShow = value;\n        }\n      }\n    },\n  },\n});\n\nLabel.prototype._updateClamping = function () {\n  Billboard._updateClamping(this._labelCollection, this);\n};\n\n/**\n * Computes the screen-space position of the label's origin, taking into account eye and pixel offsets.\n * The screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n *\n * @param {Scene} scene The scene the label is in.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The screen-space position of the label.\n *\n *\n * @example\n * console.log(l.computeScreenSpacePosition(scene).toString());\n *\n * @see Label#eyeOffset\n * @see Label#pixelOffset\n */\nLabel.prototype.computeScreenSpacePosition = function (scene, result) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(result)) {\n    result = new Cartesian2();\n  }\n\n  const labelCollection = this._labelCollection;\n  const modelMatrix = labelCollection.modelMatrix;\n  const actualPosition = defined(this._actualClampedPosition)\n    ? this._actualClampedPosition\n    : this._position;\n\n  const windowCoordinates = Billboard._computeScreenSpacePosition(\n    modelMatrix,\n    actualPosition,\n    this._eyeOffset,\n    this._pixelOffset,\n    scene,\n    result,\n  );\n  return windowCoordinates;\n};\n\n/**\n * Gets a label's screen space bounding box centered around screenSpacePosition.\n * @param {Label} label The label to get the screen space bounding box for.\n * @param {Cartesian2} screenSpacePosition The screen space center of the label.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The screen space bounding box.\n *\n * @private\n */\nLabel.getScreenSpaceBoundingBox = function (\n  label,\n  screenSpacePosition,\n  result,\n) {\n  let x = 0;\n  let y = 0;\n  let width = 0;\n  let height = 0;\n  const scale = label.totalScale;\n\n  const backgroundBillboard = label._backgroundBillboard;\n  if (defined(backgroundBillboard)) {\n    x = screenSpacePosition.x + backgroundBillboard._translate.x;\n    y = screenSpacePosition.y - backgroundBillboard._translate.y;\n    width = backgroundBillboard.width * scale;\n    height = backgroundBillboard.height * scale;\n\n    if (\n      label.verticalOrigin === VerticalOrigin.BOTTOM ||\n      label.verticalOrigin === VerticalOrigin.BASELINE\n    ) {\n      y -= height;\n    } else if (label.verticalOrigin === VerticalOrigin.CENTER) {\n      y -= height * 0.5;\n    }\n  } else {\n    x = Number.POSITIVE_INFINITY;\n    y = Number.POSITIVE_INFINITY;\n    let maxX = 0;\n    let maxY = 0;\n    const glyphs = label._glyphs;\n    const length = glyphs.length;\n    for (let i = 0; i < length; ++i) {\n      const glyph = glyphs[i];\n      const billboard = glyph.billboard;\n      if (!defined(billboard)) {\n        continue;\n      }\n\n      const glyphX = screenSpacePosition.x + billboard._translate.x;\n      let glyphY = screenSpacePosition.y - billboard._translate.y;\n      const glyphWidth = glyph.dimensions.width * scale;\n      const glyphHeight = glyph.dimensions.height * scale;\n\n      if (\n        label.verticalOrigin === VerticalOrigin.BOTTOM ||\n        label.verticalOrigin === VerticalOrigin.BASELINE\n      ) {\n        glyphY -= glyphHeight;\n      } else if (label.verticalOrigin === VerticalOrigin.CENTER) {\n        glyphY -= glyphHeight * 0.5;\n      }\n\n      if (label._verticalOrigin === VerticalOrigin.TOP) {\n        glyphY += SDFSettings.PADDING * scale;\n      } else if (\n        label._verticalOrigin === VerticalOrigin.BOTTOM ||\n        label._verticalOrigin === VerticalOrigin.BASELINE\n      ) {\n        glyphY -= SDFSettings.PADDING * scale;\n      }\n\n      x = Math.min(x, glyphX);\n      y = Math.min(y, glyphY);\n      maxX = Math.max(maxX, glyphX + glyphWidth);\n      maxY = Math.max(maxY, glyphY + glyphHeight);\n    }\n\n    width = maxX - x;\n    height = maxY - y;\n  }\n\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n\n  result.x = x;\n  result.y = y;\n  result.width = width;\n  result.height = height;\n\n  return result;\n};\n\n/**\n * Removes control characters and soft hyphon (auto-wrap) characters, which will cause an error when rendering a glyph. This does not remove tabs, carriage returns, or newlines.\n * @private\n * @param {string} text The original label text\n * @returns {string} The renderable filtered text\n */\nLabel.filterUnsupportedCharacters = function (text) {\n  const problematicCharactersRegex = new RegExp(\n    // eslint-disable-next-line no-control-regex\n    /[\\u0000-\\u0008\\u000E-\\u001F\\u00ad\\u202a-\\u206f\\u200b-\\u200f]/,\n    \"g\",\n  );\n  return text.replace(problematicCharactersRegex, \"\");\n};\n\n/**\n * Determines if this label equals another label.  Labels are equal if all their properties\n * are equal.  Labels in different collections can be equal.\n *\n * @param {Label} [other] The label to compare for equality.\n * @returns {boolean} <code>true</code> if the labels are equal; otherwise, <code>false</code>.\n */\nLabel.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (defined(other) &&\n      this._show === other._show &&\n      this._scale === other._scale &&\n      this._outlineWidth === other._outlineWidth &&\n      this._showBackground === other._showBackground &&\n      this._style === other._style &&\n      this._verticalOrigin === other._verticalOrigin &&\n      this._horizontalOrigin === other._horizontalOrigin &&\n      this._heightReference === other._heightReference &&\n      this._renderedText === other._renderedText &&\n      this._font === other._font &&\n      Cartesian3.equals(this._position, other._position) &&\n      Color.equals(this._fillColor, other._fillColor) &&\n      Color.equals(this._outlineColor, other._outlineColor) &&\n      Color.equals(this._backgroundColor, other._backgroundColor) &&\n      Cartesian2.equals(this._backgroundPadding, other._backgroundPadding) &&\n      Cartesian2.equals(this._pixelOffset, other._pixelOffset) &&\n      Cartesian3.equals(this._eyeOffset, other._eyeOffset) &&\n      NearFarScalar.equals(\n        this._translucencyByDistance,\n        other._translucencyByDistance,\n      ) &&\n      NearFarScalar.equals(\n        this._pixelOffsetScaleByDistance,\n        other._pixelOffsetScaleByDistance,\n      ) &&\n      NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance) &&\n      DistanceDisplayCondition.equals(\n        this._distanceDisplayCondition,\n        other._distanceDisplayCondition,\n      ) &&\n      this._disableDepthTestDistance === other._disableDepthTestDistance &&\n      this._id === other._id)\n  );\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n */\nLabel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Determines whether or not run the algorithm, that match the text of the label to right-to-left languages\n * @memberof Label\n * @type {boolean}\n * @default false\n *\n * @example\n * // Example 1.\n * // Set a label's rightToLeft before init\n * Cesium.Label.enableRightToLeftDetection = true;\n * const myLabelEntity = viewer.entities.add({\n *   label: {\n *     id: 'my label',\n *     text: 'זה טקסט בעברית \\n ועכשיו יורדים שורה',\n *   }\n * });\n *\n * @example\n * // Example 2.\n * const myLabelEntity = viewer.entities.add({\n *   label: {\n *     id: 'my label',\n *     text: 'English text'\n *   }\n * });\n * // Set a label's rightToLeft after init\n * Cesium.Label.enableRightToLeftDetection = true;\n * myLabelEntity.text = 'טקסט חדש';\n */\nLabel.enableRightToLeftDetection = false;\n\nfunction convertTextToTypes(text, rtlChars) {\n  const ltrChars = /[a-zA-Z0-9]/;\n  const bracketsChars = /[()[\\]{}<>]/;\n  const parsedText = [];\n  let word = \"\";\n  let lastType = textTypes.LTR;\n  let currentType = \"\";\n  const textLength = text.length;\n  for (let textIndex = 0; textIndex < textLength; ++textIndex) {\n    const character = text.charAt(textIndex);\n    if (rtlChars.test(character)) {\n      currentType = textTypes.RTL;\n    } else if (ltrChars.test(character)) {\n      currentType = textTypes.LTR;\n    } else if (bracketsChars.test(character)) {\n      currentType = textTypes.BRACKETS;\n    } else {\n      currentType = textTypes.WEAK;\n    }\n\n    if (textIndex === 0) {\n      lastType = currentType;\n    }\n\n    if (lastType === currentType && currentType !== textTypes.BRACKETS) {\n      word += character;\n    } else {\n      if (word !== \"\") {\n        parsedText.push({ Type: lastType, Word: word });\n      }\n      lastType = currentType;\n      word = character;\n    }\n  }\n  parsedText.push({ Type: currentType, Word: word });\n  return parsedText;\n}\n\nfunction reverseWord(word) {\n  return word.split(\"\").reverse().join(\"\");\n}\n\nfunction spliceWord(result, pointer, word) {\n  return result.slice(0, pointer) + word + result.slice(pointer);\n}\n\nfunction reverseBrackets(bracket) {\n  switch (bracket) {\n    case \"(\":\n      return \")\";\n    case \")\":\n      return \"(\";\n    case \"[\":\n      return \"]\";\n    case \"]\":\n      return \"[\";\n    case \"{\":\n      return \"}\";\n    case \"}\":\n      return \"{\";\n    case \"<\":\n      return \">\";\n    case \">\":\n      return \"<\";\n  }\n}\n\n// To add another language, add its Unicode block range(s) to the below regex.\nconst hebrew = \"\\u05D0-\\u05EA\";\nconst arabic = \"\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\";\nconst rtlChars = new RegExp(`[${hebrew}${arabic}]`);\n\n/**\n *\n * @param {string} value the text to parse and reorder\n * @returns {string} the text as rightToLeft direction\n * @private\n */\nfunction reverseRtl(value) {\n  const texts = value.split(\"\\n\");\n  let result = \"\";\n  for (let i = 0; i < texts.length; i++) {\n    const text = texts[i];\n    // first character of the line is a RTL character, so need to manage different cases\n    const rtlDir = rtlChars.test(text.charAt(0));\n    const parsedText = convertTextToTypes(text, rtlChars);\n\n    let splicePointer = 0;\n    let line = \"\";\n    for (let wordIndex = 0; wordIndex < parsedText.length; ++wordIndex) {\n      const subText = parsedText[wordIndex];\n      const reverse =\n        subText.Type === textTypes.BRACKETS\n          ? reverseBrackets(subText.Word)\n          : reverseWord(subText.Word);\n      if (rtlDir) {\n        if (subText.Type === textTypes.RTL) {\n          line = reverse + line;\n          splicePointer = 0;\n        } else if (subText.Type === textTypes.LTR) {\n          line = spliceWord(line, splicePointer, subText.Word);\n          splicePointer += subText.Word.length;\n        } else if (\n          subText.Type === textTypes.WEAK ||\n          subText.Type === textTypes.BRACKETS\n        ) {\n          // current word is weak, last one was bracket\n          if (\n            subText.Type === textTypes.WEAK &&\n            parsedText[wordIndex - 1].Type === textTypes.BRACKETS\n          ) {\n            line = reverse + line;\n          }\n          // current word is weak or bracket, last one was rtl\n          else if (parsedText[wordIndex - 1].Type === textTypes.RTL) {\n            line = reverse + line;\n            splicePointer = 0;\n          }\n          // current word is weak or bracket, there is at least one more word\n          else if (parsedText.length > wordIndex + 1) {\n            // next word is rtl\n            if (parsedText[wordIndex + 1].Type === textTypes.RTL) {\n              line = reverse + line;\n              splicePointer = 0;\n            } else {\n              line = spliceWord(line, splicePointer, subText.Word);\n              splicePointer += subText.Word.length;\n            }\n          }\n          // current word is weak or bracket, and it the last in this line\n          else {\n            line = spliceWord(line, 0, reverse);\n          }\n        }\n      }\n      // ltr line, rtl word\n      else if (subText.Type === textTypes.RTL) {\n        line = spliceWord(line, splicePointer, reverse);\n      }\n      // ltr line, ltr word\n      else if (subText.Type === textTypes.LTR) {\n        line += subText.Word;\n        splicePointer = line.length;\n      }\n      // ltr line, weak or bracket word\n      else if (\n        subText.Type === textTypes.WEAK ||\n        subText.Type === textTypes.BRACKETS\n      ) {\n        // not first word in line\n        if (wordIndex > 0) {\n          // last word was rtl\n          if (parsedText[wordIndex - 1].Type === textTypes.RTL) {\n            // there is at least one more word\n            if (parsedText.length > wordIndex + 1) {\n              // next word is rtl\n              if (parsedText[wordIndex + 1].Type === textTypes.RTL) {\n                line = spliceWord(line, splicePointer, reverse);\n              } else {\n                line += subText.Word;\n                splicePointer = line.length;\n              }\n            } else {\n              line += subText.Word;\n            }\n          } else {\n            line += subText.Word;\n            splicePointer = line.length;\n          }\n        } else {\n          line += subText.Word;\n          splicePointer = line.length;\n        }\n      }\n    }\n\n    result += line;\n    if (i < texts.length - 1) {\n      result += \"\\n\";\n    }\n  }\n  return result;\n}\nexport default Label;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport writeTextToCanvas from \"../Core/writeTextToCanvas.js\";\nimport bitmapSDF from \"bitmap-sdf\";\nimport BillboardCollection from \"./BillboardCollection.js\";\nimport BillboardTexture from \"./BillboardTexture.js\";\nimport BlendOption from \"./BlendOption.js\";\nimport { isHeightReferenceClamp } from \"./HeightReference.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport Label from \"./Label.js\";\nimport LabelStyle from \"./LabelStyle.js\";\nimport SDFSettings from \"./SDFSettings.js\";\nimport TextureAtlas from \"../Renderer/TextureAtlas.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\nimport GraphemeSplitter from \"grapheme-splitter\";\nimport { Check } from \"@cesium/engine\";\n\n/**\n * A glyph represents a single character in label.\n * @private\n */\nfunction Glyph() {\n  /**\n   * Object containing dimensions of the character as rendered to a canvas.\n   * @see {writeTextToCanvas}\n   * @type {object}\n   * @private\n   */\n  this.dimensions = undefined;\n\n  /**\n   * Reference to loaded image data for a single character, drawn in a particular style, shared and referenced across all labels.\n   * @type {BillboardTexture}\n   * @private\n   */\n  this.billboardTexture = undefined;\n\n  /**\n   * The individual billboard used to render the glyph. This may be <code>undefined</code> if the associated character is whitespace.\n   * @type {Billboard|undefined}\n   * @private\n   */\n  this.billboard = undefined;\n}\n\n// Traditionally, leading is %20 of the font size.\nconst defaultLineSpacingPercent = 1.2;\nconst whitePixelCanvasId = \"ID_WHITE_PIXEL\";\nconst whitePixelSize = new Cartesian2(4, 4);\nconst whitePixelBoundingRegion = new BoundingRectangle(1, 1, 1, 1);\n\n/**\n * Create the background image and start loading it into a texture\n * @private\n * @param {BillboardCollection} billboardCollection\n * @param {LabelCollection} labelCollection\n * @returns {Billboard}\n */\nfunction getWhitePixelBillboard(billboardCollection, labelCollection) {\n  const billboardTexture = labelCollection._backgroundBillboardTexture;\n  if (!billboardTexture.hasImage) {\n    const canvas = document.createElement(\"canvas\");\n    canvas.width = whitePixelSize.x;\n    canvas.height = whitePixelSize.y;\n\n    const context2D = canvas.getContext(\"2d\");\n    context2D.fillStyle = \"#fff\";\n    context2D.fillRect(0, 0, canvas.width, canvas.height);\n\n    billboardTexture.loadImage(whitePixelCanvasId, canvas);\n    billboardTexture.addImageSubRegion(\n      whitePixelCanvasId,\n      whitePixelBoundingRegion,\n    );\n  }\n\n  const billboard = billboardCollection.add({\n    collection: labelCollection,\n  });\n\n  billboard.setImageTexture(billboardTexture);\n\n  return billboard;\n}\n\n// reusable object for calling writeTextToCanvas\nconst writeTextToCanvasParameters = {};\nfunction createGlyphCanvas(\n  character,\n  font,\n  fillColor,\n  outlineColor,\n  outlineWidth,\n  style,\n) {\n  writeTextToCanvasParameters.font = font;\n  writeTextToCanvasParameters.fillColor = fillColor;\n  writeTextToCanvasParameters.strokeColor = outlineColor;\n  writeTextToCanvasParameters.strokeWidth = outlineWidth;\n  // Setting the padding to something bigger is necessary to get enough space for the outlining.\n  writeTextToCanvasParameters.padding = SDFSettings.PADDING;\n\n  writeTextToCanvasParameters.fill =\n    style === LabelStyle.FILL || style === LabelStyle.FILL_AND_OUTLINE;\n  writeTextToCanvasParameters.stroke =\n    style === LabelStyle.OUTLINE || style === LabelStyle.FILL_AND_OUTLINE;\n  writeTextToCanvasParameters.backgroundColor = Color.BLACK;\n\n  return writeTextToCanvas(character, writeTextToCanvasParameters);\n}\n\nfunction unbindGlyphBillboard(labelCollection, glyph) {\n  const billboard = glyph.billboard;\n  if (defined(billboard)) {\n    billboard.show = false;\n    billboard._clampedPosition = undefined;\n    if (defined(billboard._removeCallbackFunc)) {\n      billboard._removeCallbackFunc();\n      billboard._removeCallbackFunc = undefined;\n    }\n    labelCollection._spareBillboards.push(billboard);\n    glyph.billboard = undefined;\n  }\n}\n\nconst splitter = new GraphemeSplitter();\nconst whitespaceRegex = /\\s/;\n\nfunction rebindAllGlyphs(labelCollection, label) {\n  const text = label._renderedText;\n  const graphemes = splitter.splitGraphemes(text);\n  const textLength = graphemes.length;\n  const glyphs = label._glyphs;\n  const glyphsLength = glyphs.length;\n\n  // Compute a font size scale relative to the sdf font generated size.\n  label._relativeSize = label._fontSize / SDFSettings.FONT_SIZE;\n\n  // if we have more glyphs than needed, unbind the extras.\n  if (textLength < glyphsLength) {\n    for (let glyphIndex = textLength; glyphIndex < glyphsLength; ++glyphIndex) {\n      unbindGlyphBillboard(labelCollection, glyphs[glyphIndex]);\n    }\n  }\n\n  // presize glyphs to match the new text length\n  glyphs.length = textLength;\n\n  let backgroundBillboard = label._backgroundBillboard;\n  const backgroundBillboardCollection =\n    labelCollection._backgroundBillboardCollection;\n\n  // Create backgroundBillboard if needed\n  if (label._showBackground && !defined(backgroundBillboard)) {\n    backgroundBillboard = getWhitePixelBillboard(\n      backgroundBillboardCollection,\n      labelCollection,\n    );\n    label._backgroundBillboard = backgroundBillboard;\n  }\n\n  updateBackgroundBillboard(\n    backgroundBillboardCollection,\n    label,\n    backgroundBillboard,\n  );\n\n  const glyphBillboardCollection = labelCollection._glyphBillboardCollection;\n  const glyphTextureCache = glyphBillboardCollection.billboardTextureCache;\n  const textDimensionsCache = labelCollection._textDimensionsCache;\n\n  // walk the text looking for new characters (creating new glyphs for each)\n  // or changed characters (rebinding existing glyphs)\n  for (let textIndex = 0; textIndex < textLength; ++textIndex) {\n    const character = graphemes[textIndex];\n    const verticalOrigin = label._verticalOrigin;\n\n    const id = JSON.stringify([\n      character,\n      label._fontFamily,\n      label._fontStyle,\n      label._fontWeight,\n      +verticalOrigin,\n    ]);\n\n    let dimensions = textDimensionsCache[id];\n    let glyphBillboardTexture = glyphTextureCache.get(id);\n    if (!defined(glyphBillboardTexture) || !defined(dimensions)) {\n      glyphBillboardTexture = new BillboardTexture(glyphBillboardCollection);\n      glyphTextureCache.set(id, glyphBillboardTexture);\n\n      const glyphFont = `${label._fontStyle} ${label._fontWeight} ${SDFSettings.FONT_SIZE}px ${label._fontFamily}`;\n\n      const canvas = createGlyphCanvas(\n        character,\n        glyphFont,\n        Color.WHITE,\n        Color.WHITE,\n        0.0,\n        LabelStyle.FILL,\n      );\n\n      dimensions = canvas.dimensions;\n      textDimensionsCache[id] = dimensions;\n\n      if (\n        canvas.width > 0 &&\n        canvas.height > 0 &&\n        !whitespaceRegex.test(character)\n      ) {\n        const sdfValues = bitmapSDF(canvas, {\n          cutoff: SDFSettings.CUTOFF,\n          radius: SDFSettings.RADIUS,\n        });\n\n        // Context is originally created in writeTextToCanvas()\n        const ctx = canvas.getContext(\"2d\");\n        const canvasWidth = canvas.width;\n        const canvasHeight = canvas.height;\n        const imgData = ctx.getImageData(0, 0, canvasWidth, canvasHeight);\n        for (let i = 0; i < canvasWidth; i++) {\n          for (let j = 0; j < canvasHeight; j++) {\n            const baseIndex = j * canvasWidth + i;\n            const alpha = sdfValues[baseIndex] * 255;\n            const imageIndex = baseIndex * 4;\n            imgData.data[imageIndex + 0] = alpha;\n            imgData.data[imageIndex + 1] = alpha;\n            imgData.data[imageIndex + 2] = alpha;\n            imgData.data[imageIndex + 3] = alpha;\n          }\n        }\n        ctx.putImageData(imgData, 0, 0);\n        glyphBillboardTexture.loadImage(id, canvas);\n      }\n    }\n\n    let glyph = glyphs[textIndex];\n    if (!defined(glyph)) {\n      glyph = new Glyph();\n      glyph.dimensions = dimensions;\n      glyph.billboardTexture = glyphBillboardTexture;\n      glyphs[textIndex] = glyph;\n    }\n\n    if (glyph.billboardTexture.id !== id) {\n      // This glyph has been mapped to a new texture. If we had one before, release\n      // our reference to that texture and dimensions, but reuse the billboard.\n      glyph.billboardTexture = glyphBillboardTexture;\n      glyph.dimensions = dimensions;\n    }\n\n    if (!glyphBillboardTexture.hasImage) {\n      // No texture, and therefore no billboard, for this glyph.\n      // so, completely unbind glyph to free up the billboard for others\n      unbindGlyphBillboard(labelCollection, glyph);\n      continue;\n    }\n\n    // If we have a texture, configure the existing billboard, or obtain one\n    let billboard = glyph.billboard;\n    const spareBillboards = labelCollection._spareBillboards;\n    if (!defined(billboard)) {\n      if (spareBillboards.length > 0) {\n        billboard = spareBillboards.pop();\n      } else {\n        billboard = glyphBillboardCollection.add({\n          collection: labelCollection,\n        });\n        billboard._labelDimensions = new Cartesian2();\n        billboard._labelTranslate = new Cartesian2();\n        billboard._positionFromParent = true;\n      }\n      glyph.billboard = billboard;\n    }\n\n    billboard.setImageTexture(glyphBillboardTexture);\n\n    billboard.show = label._show;\n    billboard.position = label._position;\n    billboard.eyeOffset = label._eyeOffset;\n    billboard.pixelOffset = label._pixelOffset;\n    billboard.horizontalOrigin = HorizontalOrigin.LEFT;\n    billboard.verticalOrigin = label._verticalOrigin;\n    billboard.heightReference = label._heightReference;\n    billboard.scale = label.totalScale;\n    billboard.pickPrimitive = label;\n    billboard.id = label._id;\n    billboard.translucencyByDistance = label._translucencyByDistance;\n    billboard.pixelOffsetScaleByDistance = label._pixelOffsetScaleByDistance;\n    billboard.scaleByDistance = label._scaleByDistance;\n    billboard.distanceDisplayCondition = label._distanceDisplayCondition;\n    billboard.disableDepthTestDistance = label._disableDepthTestDistance;\n    billboard._batchIndex = label._batchIndex;\n    billboard.outlineColor = label.outlineColor;\n    if (label.style === LabelStyle.FILL_AND_OUTLINE) {\n      billboard.color = label._fillColor;\n      billboard.outlineWidth = label.outlineWidth;\n    } else if (label.style === LabelStyle.FILL) {\n      billboard.color = label._fillColor;\n      billboard.outlineWidth = 0.0;\n    } else if (label.style === LabelStyle.OUTLINE) {\n      billboard.color = Color.TRANSPARENT;\n      billboard.outlineWidth = label.outlineWidth;\n    }\n  }\n\n  // changing glyphs will cause the position of the\n  // glyphs to change, since different characters have different widths\n  label._repositionAllGlyphs = true;\n}\n\nfunction updateBackgroundBillboard(\n  backgroundBillboardCollection,\n  label,\n  backgroundBillboard,\n) {\n  if (!defined(backgroundBillboard)) {\n    return;\n  }\n  const showBackground =\n    label.show &&\n    label._showBackground &&\n    label._renderedText.split(\"\\n\").join(\"\").length > 0;\n  // Label is shown and background is hidden - remove the background billboard\n  if (label.show && !showBackground) {\n    backgroundBillboardCollection.remove(backgroundBillboard);\n    label._backgroundBillboard = backgroundBillboard = undefined;\n    return;\n  }\n\n  backgroundBillboard.color = label._backgroundColor;\n  backgroundBillboard.show = label._show;\n  backgroundBillboard.position = label._position;\n  backgroundBillboard.eyeOffset = label._eyeOffset;\n  backgroundBillboard.pixelOffset = label._pixelOffset;\n  backgroundBillboard.horizontalOrigin = HorizontalOrigin.LEFT;\n  backgroundBillboard.verticalOrigin = label._verticalOrigin;\n  backgroundBillboard.heightReference = label._heightReference;\n  backgroundBillboard.scale = label.totalScale;\n  backgroundBillboard.pickPrimitive = label;\n  backgroundBillboard.id = label._id;\n  backgroundBillboard.translucencyByDistance = label._translucencyByDistance;\n  backgroundBillboard.pixelOffsetScaleByDistance =\n    label._pixelOffsetScaleByDistance;\n  backgroundBillboard.scaleByDistance = label._scaleByDistance;\n  backgroundBillboard.distanceDisplayCondition =\n    label._distanceDisplayCondition;\n  backgroundBillboard.disableDepthTestDistance =\n    label._disableDepthTestDistance;\n  backgroundBillboard.clusterShow = label.clusterShow;\n}\n\nfunction calculateWidthOffset(lineWidth, horizontalOrigin, backgroundPadding) {\n  if (horizontalOrigin === HorizontalOrigin.CENTER) {\n    return -lineWidth / 2;\n  } else if (horizontalOrigin === HorizontalOrigin.RIGHT) {\n    return -(lineWidth + backgroundPadding.x);\n  }\n  return backgroundPadding.x;\n}\n\n// reusable Cartesian2 instances\nconst glyphPixelOffset = new Cartesian2();\nconst scratchBackgroundPadding = new Cartesian2();\n\nfunction repositionAllGlyphs(label) {\n  const glyphs = label._glyphs;\n  const text = label._renderedText;\n  let lastLineWidth = 0;\n  let maxLineWidth = 0;\n  const lineWidths = [];\n  let maxGlyphDescent = Number.NEGATIVE_INFINITY;\n  let maxGlyphY = 0;\n  let numberOfLines = 1;\n  const glyphLength = glyphs.length;\n\n  const backgroundBillboard = label._backgroundBillboard;\n  const backgroundPadding = Cartesian2.clone(\n    defined(backgroundBillboard) ? label._backgroundPadding : Cartesian2.ZERO,\n    scratchBackgroundPadding,\n  );\n\n  // We need to scale the background padding, which is specified in pixels by the inverse of the relative size so it is scaled properly.\n  backgroundPadding.x /= label._relativeSize;\n  backgroundPadding.y /= label._relativeSize;\n\n  for (let glyphIndex = 0; glyphIndex < glyphLength; ++glyphIndex) {\n    if (text.charAt(glyphIndex) === \"\\n\") {\n      lineWidths.push(lastLineWidth);\n      ++numberOfLines;\n      lastLineWidth = 0;\n      continue;\n    }\n\n    const glyph = glyphs[glyphIndex];\n    const dimensions = glyph.dimensions;\n    if (defined(dimensions)) {\n      maxGlyphY = Math.max(maxGlyphY, dimensions.height - dimensions.descent);\n      maxGlyphDescent = Math.max(maxGlyphDescent, dimensions.descent);\n\n      // Computing the line width must also account for the kerning that occurs between letters.\n      lastLineWidth += dimensions.width - dimensions.minx;\n      if (glyphIndex < glyphLength - 1) {\n        lastLineWidth += glyphs[glyphIndex + 1].dimensions.minx;\n      }\n      maxLineWidth = Math.max(maxLineWidth, lastLineWidth);\n    }\n  }\n  lineWidths.push(lastLineWidth);\n  const maxLineHeight = maxGlyphY + maxGlyphDescent;\n\n  const scale = label.totalScale;\n  const horizontalOrigin = label._horizontalOrigin;\n  const verticalOrigin = label._verticalOrigin;\n  let lineIndex = 0;\n  let lineWidth = lineWidths[lineIndex];\n  let widthOffset = calculateWidthOffset(\n    lineWidth,\n    horizontalOrigin,\n    backgroundPadding,\n  );\n  const lineSpacing =\n    (defined(label._lineHeight)\n      ? label._lineHeight\n      : defaultLineSpacingPercent * label._fontSize) / label._relativeSize;\n  const otherLinesHeight = lineSpacing * (numberOfLines - 1);\n  let totalLineWidth = maxLineWidth;\n  let totalLineHeight = maxLineHeight + otherLinesHeight;\n\n  if (defined(backgroundBillboard)) {\n    totalLineWidth += backgroundPadding.x * 2;\n    totalLineHeight += backgroundPadding.y * 2;\n    backgroundBillboard._labelHorizontalOrigin = horizontalOrigin;\n  }\n\n  glyphPixelOffset.x = widthOffset * scale;\n  glyphPixelOffset.y = 0;\n\n  let firstCharOfLine = true;\n\n  let lineOffsetY = 0;\n  for (let glyphIndex = 0; glyphIndex < glyphLength; ++glyphIndex) {\n    if (text.charAt(glyphIndex) === \"\\n\") {\n      ++lineIndex;\n      lineOffsetY += lineSpacing;\n      lineWidth = lineWidths[lineIndex];\n      widthOffset = calculateWidthOffset(\n        lineWidth,\n        horizontalOrigin,\n        backgroundPadding,\n      );\n      glyphPixelOffset.x = widthOffset * scale;\n      firstCharOfLine = true;\n      continue;\n    }\n\n    const glyph = glyphs[glyphIndex];\n    const dimensions = glyph.dimensions;\n    if (defined(dimensions)) {\n      if (verticalOrigin === VerticalOrigin.TOP) {\n        glyphPixelOffset.y =\n          dimensions.height - maxGlyphY - backgroundPadding.y;\n        glyphPixelOffset.y += SDFSettings.PADDING;\n      } else if (verticalOrigin === VerticalOrigin.CENTER) {\n        glyphPixelOffset.y =\n          (otherLinesHeight + dimensions.height - maxGlyphY) / 2;\n      } else if (verticalOrigin === VerticalOrigin.BASELINE) {\n        glyphPixelOffset.y = otherLinesHeight;\n        glyphPixelOffset.y -= SDFSettings.PADDING;\n      } else {\n        // VerticalOrigin.BOTTOM\n        glyphPixelOffset.y =\n          otherLinesHeight + maxGlyphDescent + backgroundPadding.y;\n        glyphPixelOffset.y -= SDFSettings.PADDING;\n      }\n      glyphPixelOffset.y =\n        (glyphPixelOffset.y - dimensions.descent - lineOffsetY) * scale;\n\n      // Handle any offsets for the first character of the line since the bounds might not be right on the bottom left pixel.\n      if (firstCharOfLine) {\n        glyphPixelOffset.x -= SDFSettings.PADDING * scale;\n        firstCharOfLine = false;\n      }\n\n      if (defined(glyph.billboard)) {\n        glyph.billboard._setTranslate(glyphPixelOffset);\n        glyph.billboard._labelDimensions.x = totalLineWidth;\n        glyph.billboard._labelDimensions.y = totalLineHeight;\n        glyph.billboard._labelHorizontalOrigin = horizontalOrigin;\n      }\n\n      //Compute the next x offset taking into account the kerning performed\n      //on both the current letter as well as the next letter to be drawn\n      //as well as any applied scale.\n      if (glyphIndex < glyphLength - 1) {\n        const nextGlyph = glyphs[glyphIndex + 1];\n        glyphPixelOffset.x +=\n          (dimensions.width - dimensions.minx + nextGlyph.dimensions.minx) *\n          scale;\n      }\n    }\n  }\n\n  if (defined(backgroundBillboard) && text.split(\"\\n\").join(\"\").length > 0) {\n    if (horizontalOrigin === HorizontalOrigin.CENTER) {\n      widthOffset = -maxLineWidth / 2 - backgroundPadding.x;\n    } else if (horizontalOrigin === HorizontalOrigin.RIGHT) {\n      widthOffset = -(maxLineWidth + backgroundPadding.x * 2);\n    } else {\n      widthOffset = 0;\n    }\n    glyphPixelOffset.x = widthOffset * scale;\n\n    if (verticalOrigin === VerticalOrigin.TOP) {\n      glyphPixelOffset.y = maxLineHeight - maxGlyphY - maxGlyphDescent;\n    } else if (verticalOrigin === VerticalOrigin.CENTER) {\n      glyphPixelOffset.y = (maxLineHeight - maxGlyphY) / 2 - maxGlyphDescent;\n    } else if (verticalOrigin === VerticalOrigin.BASELINE) {\n      glyphPixelOffset.y = -backgroundPadding.y - maxGlyphDescent;\n    } else {\n      // VerticalOrigin.BOTTOM\n      glyphPixelOffset.y = 0;\n    }\n    glyphPixelOffset.y = glyphPixelOffset.y * scale;\n    backgroundBillboard.width = totalLineWidth;\n    backgroundBillboard.height = totalLineHeight;\n    backgroundBillboard._setTranslate(glyphPixelOffset);\n    backgroundBillboard._labelTranslate = Cartesian2.clone(\n      glyphPixelOffset,\n      backgroundBillboard._labelTranslate,\n    );\n  }\n\n  if (isHeightReferenceClamp(label.heightReference)) {\n    for (let glyphIndex = 0; glyphIndex < glyphLength; ++glyphIndex) {\n      const glyph = glyphs[glyphIndex];\n      const billboard = glyph.billboard;\n      if (defined(billboard)) {\n        billboard._labelTranslate = Cartesian2.clone(\n          glyphPixelOffset,\n          billboard._labelTranslate,\n        );\n      }\n    }\n  }\n}\n\nfunction destroyLabel(labelCollection, label) {\n  const glyphs = label._glyphs;\n  for (let i = 0, len = glyphs.length; i < len; ++i) {\n    unbindGlyphBillboard(labelCollection, glyphs[i]);\n  }\n  if (defined(label._backgroundBillboard)) {\n    labelCollection._backgroundBillboardCollection.remove(\n      label._backgroundBillboard,\n    );\n    label._backgroundBillboard = undefined;\n  }\n  label._labelCollection = undefined;\n\n  if (defined(label._removeCallbackFunc)) {\n    label._removeCallbackFunc();\n  }\n\n  destroyObject(label);\n}\n\n/**\n * A renderable collection of labels.  Labels are viewport-aligned text positioned in the 3D scene.\n * Each label can have a different font, color, scale, etc.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Label.png' width='400' height='300' /><br />\n * Example labels\n * </div>\n * <br /><br />\n * Labels are added and removed from the collection using {@link LabelCollection#add}\n * and {@link LabelCollection#remove}.\n *\n * @alias LabelCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each label from model to world coordinates.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {Scene} [options.scene] Must be passed in for labels that use the height reference property or will be depth tested against the globe.\n * @param {BlendOption} [options.blendOption=BlendOption.OPAQUE_AND_TRANSLUCENT] The label blending option. The default\n * is used for rendering both opaque and translucent labels. However, if either all of the labels are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x.\n * @param {boolean} [options.show=true] Determines if the labels in the collection will be shown.\n * @param {number} [options.coarseDepthTestDistance] The distance from the camera, beyond which, labels are depth-tested against an approximation of the globe ellipsoid rather than against the full globe depth buffer. If unspecified, the default value is determined relative to the value of {@link Ellipsoid.default}.\n * @param {number} [options.threePointDepthTestDistance] The distance from the camera, within which, lables with a {@link Label#heightReference} value of {@link HeightReference.CLAMP_TO_GROUND} or {@link HeightReference.CLAMP_TO_TERRAIN} are depth tested against three key points. This ensures that if any key point of the label is visible, the whole label will be visible. If unspecified, the default value is determined relative to the value of {@link Ellipsoid.default}.\n * @performance For best performance, prefer a few collections, each with many labels, to\n * many collections with only a few labels each.  Avoid having collections where some\n * labels change every frame and others do not; instead, create one or more collections\n * for static labels, and one or more collections for dynamic labels.\n *\n * @see LabelCollection#add\n * @see LabelCollection#remove\n * @see Label\n * @see BillboardCollection\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=labels|Cesium Sandcastle Labels Demo}\n *\n * @example\n * // Create a label collection with two labels\n * const labels = scene.primitives.add(new Cesium.LabelCollection());\n * labels.add({\n *   position : new Cesium.Cartesian3(1.0, 2.0, 3.0),\n *   text : 'A label'\n * });\n * labels.add({\n *   position : new Cesium.Cartesian3(4.0, 5.0, 6.0),\n *   text : 'Another label'\n * });\n */\nfunction LabelCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._scene = options.scene;\n  this._batchTable = options.batchTable;\n\n  const backgroundBillboardCollection = new BillboardCollection({\n    scene: this._scene,\n    textureAtlas: new TextureAtlas({\n      initialSize: whitePixelSize,\n    }),\n    coarseDepthTestDistance: options.coarseDepthTestDistance,\n    threePointDepthTestDistance: options.threePointDepthTestDistance,\n  });\n  this._backgroundBillboardCollection = backgroundBillboardCollection;\n  this._backgroundBillboardTexture = new BillboardTexture(\n    backgroundBillboardCollection,\n  );\n\n  this._glyphBillboardCollection = new BillboardCollection({\n    scene: this._scene,\n    batchTable: this._batchTable,\n    coarseDepthTestDistance: options.coarseDepthTestDistance,\n    threePointDepthTestDistance: options.threePointDepthTestDistance,\n  });\n  this._glyphBillboardCollection._sdf = true;\n\n  this._spareBillboards = [];\n  this._textDimensionsCache = {};\n  this._labels = [];\n  this._labelsToUpdate = [];\n  this._totalGlyphCount = 0;\n\n  this._highlightColor = Color.clone(Color.WHITE); // Only used by Vector3DTilePoints\n\n  /**\n   * Determines if labels in this collection will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * The 4x4 transformation matrix that transforms each label in this collection from model to world coordinates.\n   * When this is the identity matrix, the labels are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * @type Matrix4\n   * @default {@link Matrix4.IDENTITY}\n   *\n   * @example\n   * const center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n   * labels.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n   * labels.add({\n   *   position : new Cesium.Cartesian3(0.0, 0.0, 0.0),\n   *   text     : 'Center'\n   * });\n   * labels.add({\n   *   position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0),\n   *   text     : 'East'\n   * });\n   * labels.add({\n   *   position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0),\n   *   text     : 'North'\n   * });\n   * labels.add({\n   *   position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0),\n   *   text     : 'Up'\n   * });\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * The label blending option. The default is used for rendering both opaque and translucent labels.\n   * However, if either all of the labels are completely opaque or all are completely translucent,\n   * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve\n   * performance by up to 2x.\n   * @type {BlendOption}\n   * @default BlendOption.OPAQUE_AND_TRANSLUCENT\n   */\n  this.blendOption = options.blendOption ?? BlendOption.OPAQUE_AND_TRANSLUCENT;\n}\n\nObject.defineProperties(LabelCollection.prototype, {\n  /**\n   * Returns the number of labels in this collection.  This is commonly used with\n   * {@link LabelCollection#get} to iterate over all the labels\n   * in the collection.\n   * @memberof LabelCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._labels.length;\n    },\n  },\n\n  /**\n   * Returns the size in bytes of the WebGL texture resources.\n   * @private\n   * @memberof LabelCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  sizeInBytes: {\n    get: function () {\n      return (\n        this._glyphBillboardCollection.sizeInBytes +\n        this._backgroundBillboardCollection.sizeInBytes\n      );\n    },\n  },\n\n  /**\n   * True when all labels currently in the collection are ready for rendering.\n   * @private\n   * @memberof LabelCollection.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      const backgroundBillboard = this._backgroundBillboardCollection.get(0);\n      if (defined(backgroundBillboard) && !backgroundBillboard.ready) {\n        return false;\n      }\n\n      return this._glyphBillboardCollection.ready;\n    },\n  },\n\n  /**\n   * The distance from the camera, beyond which, labels are depth-tested against an approximation of\n   * the globe ellipsoid rather than against the full globe depth buffer. When set to <code>0</code>, the\n   * approximate depth test is always applied. When set to <code>Number.POSITIVE_INFINITY</code>, the\n   * approximate depth test is never applied.\n   * <br/><br/>\n   * This setting only applies when a label's {@link Label#disableDepthTestDistance} value would\n   * otherwise allow depth testing—i.e., distance from the camera to the label is less than the\n   * label's {@link Label#disableDepthTestDistance} value.\n   * @memberof LabelCollection.prototype\n   * @type {number}\n   */\n  coarseDepthTestDistance: {\n    get: function () {\n      return this._backgroundBillboardCollection.coarseDepthTestDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"coarseDepthTestDistance\", value);\n      //>>includeEnd('debug');\n      this._backgroundBillboardCollection.coarseDepthTestDistance = value;\n      this._glyphBillboardCollection.coarseDepthTestDistance = value;\n    },\n  },\n\n  /**\n   * The distance from the camera, within which, labels with a {@link Label#heightReference} value\n   * of {@link HeightReference.CLAMP_TO_GROUND} or {@link HeightReference.CLAMP_TO_TERRAIN} are depth tested\n   * against three key points. This ensures that if any key point of the label is visible, the whole\n   * label will be visible. When set to <code>0</code>, this feature is disabled and portions of a\n   * label behind terrain be clipped.\n   * <br/><br/>\n   * This setting only applies when a labels's {@link Label#disableDepthTestDistance} value would\n   * otherwise allow depth testing—i.e., distance from the camera to the label is less than the\n   * labels's {@link Label#disableDepthTestDistance} value.\n   * @see {@link https://cesium.com/blog/2018/07/30/billboards-on-terrain-improvements/|Billboards and Labels on Terrain Improvements}\n   * @memberof LabelCollection.prototype\n   * @type {number}\n   */\n  threePointDepthTestDistance: {\n    get: function () {\n      return this._backgroundBillboardCollection.threePointDepthTestDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"threePointDepthTestDistance\", value);\n      //>>includeEnd('debug');\n      this._backgroundBillboardCollection.threePointDepthTestDistance = value;\n      this._glyphBillboardCollection.threePointDepthTestDistance = value;\n    },\n  },\n});\n\n/**\n * Creates and adds a label with the specified initial properties to the collection.\n * The added label is returned so it can be modified or removed from the collection later.\n *\n * @param {Label.ConstructorOptions} [options] A template describing the label's properties as shown in Example 1.\n * @returns {Label} The label that was added to the collection.\n *\n * @performance Calling <code>add</code> is expected constant time.  However, the collection's vertex buffer\n * is rewritten; this operations is <code>O(n)</code> and also incurs\n * CPU to GPU overhead.  For best performance, add as many billboards as possible before\n * calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Example 1:  Add a label, specifying all the default values.\n * const l = labels.add({\n *   show : true,\n *   position : Cesium.Cartesian3.ZERO,\n *   text : '',\n *   font : '30px sans-serif',\n *   fillColor : Cesium.Color.WHITE,\n *   outlineColor : Cesium.Color.BLACK,\n *   outlineWidth : 1.0,\n *   showBackground : false,\n *   backgroundColor : new Cesium.Color(0.165, 0.165, 0.165, 0.8),\n *   backgroundPadding : new Cesium.Cartesian2(7, 5),\n *   style : Cesium.LabelStyle.FILL,\n *   pixelOffset : Cesium.Cartesian2.ZERO,\n *   eyeOffset : Cesium.Cartesian3.ZERO,\n *   horizontalOrigin : Cesium.HorizontalOrigin.LEFT,\n *   verticalOrigin : Cesium.VerticalOrigin.BASELINE,\n *   scale : 1.0,\n *   translucencyByDistance : undefined,\n *   pixelOffsetScaleByDistance : undefined,\n *   heightReference : HeightReference.NONE,\n *   distanceDisplayCondition : undefined\n * });\n *\n * @example\n * // Example 2:  Specify only the label's cartographic position,\n * // text, and font.\n * const l = labels.add({\n *   position : Cesium.Cartesian3.fromRadians(longitude, latitude, height),\n *   text : 'Hello World',\n *   font : '24px Helvetica',\n * });\n *\n *\n * @see LabelCollection#remove\n * @see LabelCollection#removeAll\n */\nLabelCollection.prototype.add = function (options) {\n  const label = new Label(options, this);\n\n  this._labels.push(label);\n  this._labelsToUpdate.push(label);\n\n  return label;\n};\n\n/**\n * Removes a label from the collection.  Once removed, a label is no longer usable.\n *\n * @param {Label} label The label to remove.\n * @returns {boolean} <code>true</code> if the label was removed; <code>false</code> if the label was not found in the collection.\n *\n * @performance Calling <code>remove</code> is expected constant time.  However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.  For\n * best performance, remove as many labels as possible before calling <code>update</code>.\n * If you intend to temporarily hide a label, it is usually more efficient to call\n * {@link Label#show} instead of removing and re-adding the label.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * const l = labels.add(...);\n * labels.remove(l);  // Returns true\n *\n * @see LabelCollection#add\n * @see LabelCollection#removeAll\n * @see Label#show\n */\nLabelCollection.prototype.remove = function (label) {\n  if (defined(label) && label._labelCollection === this) {\n    const index = this._labels.indexOf(label);\n    if (index !== -1) {\n      this._labels.splice(index, 1);\n      destroyLabel(this, label);\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Removes all labels from the collection.\n *\n * @performance <code>O(n)</code>.  It is more efficient to remove all the labels\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * labels.add(...);\n * labels.add(...);\n * labels.removeAll();\n *\n * @see LabelCollection#add\n * @see LabelCollection#remove\n */\nLabelCollection.prototype.removeAll = function () {\n  const labels = this._labels;\n\n  for (let i = 0, len = labels.length; i < len; ++i) {\n    destroyLabel(this, labels[i]);\n  }\n\n  labels.length = 0;\n};\n\n/**\n * Check whether this collection contains a given label.\n *\n * @param {Label} label The label to check for.\n * @returns {boolean} true if this collection contains the label, false otherwise.\n *\n * @see LabelCollection#get\n *\n */\nLabelCollection.prototype.contains = function (label) {\n  return defined(label) && label._labelCollection === this;\n};\n\n/**\n * Returns the label in the collection at the specified index.  Indices are zero-based\n * and increase as labels are added.  Removing a label shifts all labels after\n * it to the left, changing their indices.  This function is commonly used with\n * {@link LabelCollection#length} to iterate over all the labels\n * in the collection.\n *\n * @param {number} index The zero-based index of the billboard.\n *\n * @returns {Label} The label at the specified index.\n *\n * @performance Expected constant time.  If labels were removed from the collection and\n * {@link Scene#render} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every label in the collection\n * const len = labels.length;\n * for (let i = 0; i < len; ++i) {\n *   const l = billboards.get(i);\n *   l.show = !l.show;\n * }\n *\n * @see LabelCollection#length\n */\nLabelCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._labels[index];\n};\n\n/**\n * @private\n */\nLabelCollection.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  const glyphBillboardCollection = this._glyphBillboardCollection;\n  const backgroundBillboardCollection = this._backgroundBillboardCollection;\n\n  glyphBillboardCollection.modelMatrix = this.modelMatrix;\n  glyphBillboardCollection.debugShowBoundingVolume =\n    this.debugShowBoundingVolume;\n  backgroundBillboardCollection.modelMatrix = this.modelMatrix;\n  backgroundBillboardCollection.debugShowBoundingVolume =\n    this.debugShowBoundingVolume;\n\n  const len = this._labelsToUpdate.length;\n  for (let i = 0; i < len; ++i) {\n    const label = this._labelsToUpdate[i];\n    if (label.isDestroyed()) {\n      continue;\n    }\n\n    const preUpdateGlyphCount = label._glyphs.length;\n\n    if (label._rebindAllGlyphs) {\n      rebindAllGlyphs(this, label);\n      label._rebindAllGlyphs = false;\n    }\n\n    if (label._repositionAllGlyphs) {\n      repositionAllGlyphs(label);\n      label._repositionAllGlyphs = false;\n    }\n\n    const glyphCountDifference = label._glyphs.length - preUpdateGlyphCount;\n    this._totalGlyphCount += glyphCountDifference;\n  }\n\n  const blendOption =\n    backgroundBillboardCollection.length > 0\n      ? BlendOption.TRANSLUCENT\n      : this.blendOption;\n  glyphBillboardCollection.blendOption = blendOption;\n  backgroundBillboardCollection.blendOption = blendOption;\n\n  glyphBillboardCollection._highlightColor = this._highlightColor;\n  backgroundBillboardCollection._highlightColor = this._highlightColor;\n\n  this._labelsToUpdate.length = 0;\n  backgroundBillboardCollection.update(frameState);\n  glyphBillboardCollection.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see LabelCollection#destroy\n */\nLabelCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * labels = labels && labels.destroy();\n *\n * @see LabelCollection#isDestroyed\n */\nLabelCollection.prototype.destroy = function () {\n  this.removeAll();\n  this._glyphBillboardCollection = this._glyphBillboardCollection.destroy();\n  this._backgroundBillboardCollection =\n    this._backgroundBillboardCollection.destroy();\n\n  return destroyObject(this);\n};\nexport default LabelCollection;\n","/**\n * Describes how to draw a label.\n *\n * @enum {number}\n *\n * @see Label#style\n */\nconst LabelStyle = {\n  /**\n   * Fill the text of the label, but do not outline.\n   *\n   * @type {number}\n   * @constant\n   */\n  FILL: 0,\n\n  /**\n   * Outline the text of the label, but do not fill.\n   *\n   * @type {number}\n   * @constant\n   */\n  OUTLINE: 1,\n\n  /**\n   * Fill and outline the text of the label.\n   *\n   * @type {number}\n   * @constant\n   */\n  FILL_AND_OUTLINE: 2,\n};\nexport default Object.freeze(LabelStyle);\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A light source. This type describes an interface and is not intended to be instantiated directly. Together, <code>color</code> and <code>intensity</code> produce a high-dynamic-range light color. <code>intensity</code> can also be used individually to dim or brighten the light without changing the hue.\n *\n * @alias Light\n * @constructor\n *\n * @see DirectionalLight\n * @see SunLight\n */\nfunction Light() {}\n\nObject.defineProperties(Light.prototype, {\n  /**\n   * The color of the light.\n   * @memberof Light.prototype\n   * @type {Color}\n   */\n  color: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * The intensity controls the strength of the light. <code>intensity</code> has a minimum value of 0.0 and no maximum value.\n   * @memberof Light.prototype\n   * @type {number}\n   */\n  intensity: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\nexport default Light;\n","/**\n * Describes how the map will operate in 2D.\n *\n * @enum {number}\n */\nconst MapMode2D = {\n  /**\n   * The 2D map can be rotated about the z axis.\n   *\n   * @type {number}\n   * @constant\n   */\n  ROTATE: 0,\n\n  /**\n   * The 2D map can be scrolled infinitely in the horizontal direction.\n   *\n   * @type {number}\n   * @constant\n   */\n  INFINITE_SCROLL: 1,\n};\nexport default Object.freeze(MapMode2D);\n","import Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nconst trailingSlashRegex = /\\/$/;\nconst defaultCredit = new Credit(\n  '&copy; <a href=\"https://www.mapbox.com/about/maps/\">Mapbox</a> &copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> <strong><a href=\"https://www.mapbox.com/map-feedback/\">Improve this map</a></strong>',\n);\n\n/**\n * @typedef {object} MapboxImageryProvider.ConstructorOptions\n *\n * Initialization options for the MapboxImageryProvider constructor\n *\n * @property {string} [url='https://api.mapbox.com/v4/'] The Mapbox server url.\n * @property {string} mapId The Mapbox Map ID.\n * @property {string} accessToken The public access token for the imagery.\n * @property {string} [format='png'] The format of the image request.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * Provides tiled imagery hosted by Mapbox.\n *\n * @alias MapboxImageryProvider\n * @constructor\n *\n * @param {MapboxImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Mapbox tile provider\n * const mapbox = new Cesium.MapboxImageryProvider({\n *     mapId: 'mapbox.mapbox-terrain-v2',\n *     accessToken: 'thisIsMyAccessToken'\n * });\n *\n * @see {@link https://docs.mapbox.com/api/maps/raster-tiles/}\n * @see {@link https://docs.mapbox.com/api/accounts/tokens/}\n */\nfunction MapboxImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const mapId = options.mapId;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(mapId)) {\n    throw new DeveloperError(\"options.mapId is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const accessToken = options.accessToken;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(accessToken)) {\n    throw new DeveloperError(\"options.accessToken is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  const resource = Resource.createIfNeeded(\n    options.url ?? \"https://{s}.tiles.mapbox.com/v4/\",\n  );\n\n  this._mapId = mapId;\n  this._accessToken = accessToken;\n\n  let format = options.format ?? \"png\";\n  if (!/\\./.test(format)) {\n    format = `.${format}`;\n  }\n  this._format = format;\n\n  let templateUrl = resource.getUrlComponent();\n  if (!trailingSlashRegex.test(templateUrl)) {\n    templateUrl += \"/\";\n  }\n  templateUrl += `${mapId}/{z}/{x}/{y}${this._format}`;\n  resource.url = templateUrl;\n\n  resource.setQueryParameters({\n    access_token: accessToken,\n  });\n\n  let credit;\n  if (defined(options.credit)) {\n    credit = options.credit;\n    if (typeof credit === \"string\") {\n      credit = new Credit(credit);\n    }\n  } else {\n    credit = defaultCredit;\n  }\n\n  this._resource = resource;\n  this._imageryProvider = new UrlTemplateImageryProvider({\n    url: resource,\n    credit: credit,\n    ellipsoid: options.ellipsoid,\n    minimumLevel: options.minimumLevel,\n    maximumLevel: options.maximumLevel,\n    rectangle: options.rectangle,\n  });\n}\n\nObject.defineProperties(MapboxImageryProvider.prototype, {\n  /**\n   * Gets the URL of the Mapbox server.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._imageryProvider.url;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._imageryProvider.rectangle;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._imageryProvider.tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._imageryProvider.tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._imageryProvider.maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested. Generally,\n   * a minimum level should only be used when the rectangle of the imagery is small\n   * enough that the number of tiles at the minimum level is small.  An imagery\n   * provider with more than a few tiles at the minimum level will lead to\n   * rendering problems.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return this._imageryProvider.minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._imageryProvider.tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._imageryProvider.tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error..  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._imageryProvider.errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._imageryProvider.credit;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._imageryProvider.proxy;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof MapboxImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return this._imageryProvider.hasAlphaChannel;\n    },\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nMapboxImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nMapboxImageryProvider.prototype.requestImage = function (x, y, level, request) {\n  return this._imageryProvider.requestImage(x, y, level, request);\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function is optional, so it may not exist on all ImageryProviders.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n *                   instances.  The array may be empty if no features are found at the given location.\n *                   It may also be undefined if picking is not supported.\n */\nMapboxImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return this._imageryProvider.pickFeatures(x, y, level, longitude, latitude);\n};\n\n// Exposed for tests\nMapboxImageryProvider._defaultCredit = defaultCredit;\nexport default MapboxImageryProvider;\n","import Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Resource from \"../Core/Resource.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nconst trailingSlashRegex = /\\/$/;\nconst defaultCredit = new Credit(\n  '&copy; <a href=\"https://www.mapbox.com/about/maps/\">Mapbox</a> &copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> <strong><a href=\"https://www.mapbox.com/map-feedback/\">Improve this map</a></strong>',\n);\n\n/**\n * @typedef {object} MapboxStyleImageryProvider.ConstructorOptions\n *\n * Initialization options for the MapboxStyleImageryProvider constructor\n *\n * @property {Resource|string} [url='https://api.mapbox.com/styles/v1/'] The Mapbox server url.\n * @property {string} [username='mapbox'] The username of the map account.\n * @property {string} styleId The Mapbox Style ID.\n * @property {string} accessToken The public access token for the imagery.\n * @property {number} [tilesize=512] The size of the image tiles.\n * @property {boolean} [scaleFactor] Determines if tiles are rendered at a @2x scale factor.\n * @property {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid.  If not specified, the default ellipsoid is used.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * Provides tiled imagery hosted by Mapbox.\n *\n * @alias MapboxStyleImageryProvider\n * @constructor\n *\n * @param {MapboxStyleImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Mapbox style provider\n * const mapbox = new Cesium.MapboxStyleImageryProvider({\n *     styleId: 'streets-v11',\n *     accessToken: 'thisIsMyAccessToken'\n * });\n *\n * @see {@link https://docs.mapbox.com/api/maps/#styles}\n * @see {@link https://docs.mapbox.com/api/#access-tokens-and-token-scopes}\n */\nfunction MapboxStyleImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const styleId = options.styleId;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(styleId)) {\n    throw new DeveloperError(\"options.styleId is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const accessToken = options.accessToken;\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(accessToken)) {\n    throw new DeveloperError(\"options.accessToken is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  const resource = Resource.createIfNeeded(\n    options.url ?? \"https://api.mapbox.com/styles/v1/\",\n  );\n\n  this._styleId = styleId;\n  this._accessToken = accessToken;\n\n  const tilesize = options.tilesize ?? 512;\n  this._tilesize = tilesize;\n\n  const username = options.username ?? \"mapbox\";\n  this._username = username;\n\n  const scaleFactor = defined(options.scaleFactor) ? \"@2x\" : \"\";\n\n  let templateUrl = resource.getUrlComponent();\n  if (!trailingSlashRegex.test(templateUrl)) {\n    templateUrl += \"/\";\n  }\n  templateUrl += `${this._username}/${styleId}/tiles/${this._tilesize}/{z}/{x}/{y}${scaleFactor}`;\n  resource.url = templateUrl;\n\n  resource.setQueryParameters({\n    access_token: accessToken,\n  });\n\n  let credit;\n  if (defined(options.credit)) {\n    credit = options.credit;\n    if (typeof credit === \"string\") {\n      credit = new Credit(credit);\n    }\n  } else {\n    credit = defaultCredit;\n  }\n\n  this._resource = resource;\n  this._imageryProvider = new UrlTemplateImageryProvider({\n    url: resource,\n    credit: credit,\n    ellipsoid: options.ellipsoid,\n    minimumLevel: options.minimumLevel,\n    maximumLevel: options.maximumLevel,\n    rectangle: options.rectangle,\n  });\n}\n\nObject.defineProperties(MapboxStyleImageryProvider.prototype, {\n  /**\n   * Gets the URL of the Mapbox server.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._imageryProvider.url;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._imageryProvider.rectangle;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._imageryProvider.tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._imageryProvider.tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._imageryProvider.maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested. Generally,\n   * a minimum level should only be used when the rectangle of the imagery is small\n   * enough that the number of tiles at the minimum level is small.  An imagery\n   * provider with more than a few tiles at the minimum level will lead to\n   * rendering problems.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return this._imageryProvider.minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._imageryProvider.tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._imageryProvider.tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error..  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._imageryProvider.errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._imageryProvider.credit;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._imageryProvider.proxy;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof MapboxStyleImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return this._imageryProvider.hasAlphaChannel;\n    },\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nMapboxStyleImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nMapboxStyleImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  return this._imageryProvider.requestImage(x, y, level, request);\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile. This function is optional, so it may not exist on all ImageryProviders.\n *\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n *                   instances.  The array may be empty if no features are found at the given location.\n *                   It may also be undefined if picking is not supported.\n */\nMapboxStyleImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return this._imageryProvider.pickFeatures(x, y, level, longitude, latitude);\n};\n\n// Exposed for tests\nMapboxStyleImageryProvider._defaultCredit = defaultCredit;\nexport default MapboxStyleImageryProvider;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport loadKTX2 from \"../Core/loadKTX2.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport AspectRampMaterial from \"../Shaders/Materials/AspectRampMaterial.js\";\nimport BumpMapMaterial from \"../Shaders/Materials/BumpMapMaterial.js\";\nimport CheckerboardMaterial from \"../Shaders/Materials/CheckerboardMaterial.js\";\nimport DotMaterial from \"../Shaders/Materials/DotMaterial.js\";\nimport ElevationBandMaterial from \"../Shaders/Materials/ElevationBandMaterial.js\";\nimport ElevationContourMaterial from \"../Shaders/Materials/ElevationContourMaterial.js\";\nimport ElevationRampMaterial from \"../Shaders/Materials/ElevationRampMaterial.js\";\nimport FadeMaterial from \"../Shaders/Materials/FadeMaterial.js\";\nimport GridMaterial from \"../Shaders/Materials/GridMaterial.js\";\nimport NormalMapMaterial from \"../Shaders/Materials/NormalMapMaterial.js\";\nimport PolylineArrowMaterial from \"../Shaders/Materials/PolylineArrowMaterial.js\";\nimport PolylineDashMaterial from \"../Shaders/Materials/PolylineDashMaterial.js\";\nimport PolylineGlowMaterial from \"../Shaders/Materials/PolylineGlowMaterial.js\";\nimport PolylineOutlineMaterial from \"../Shaders/Materials/PolylineOutlineMaterial.js\";\nimport RimLightingMaterial from \"../Shaders/Materials/RimLightingMaterial.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport SlopeRampMaterial from \"../Shaders/Materials/SlopeRampMaterial.js\";\nimport StripeMaterial from \"../Shaders/Materials/StripeMaterial.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport WaterMaskMaterial from \"../Shaders/Materials/WaterMaskMaterial.js\";\nimport WaterMaterial from \"../Shaders/Materials/Water.js\";\n\n/**\n * A Material defines surface appearance through a combination of diffuse, specular,\n * normal, emission, and alpha components. These values are specified using a\n * JSON schema called Fabric which gets parsed and assembled into glsl shader code\n * behind-the-scenes. Check out the {@link https://github.com/CesiumGS/cesium/wiki/Fabric|wiki page}\n * for more details on Fabric.\n * <br /><br />\n * <style type=\"text/css\">\n *  #materialDescriptions code {\n *      font-weight: normal;\n *      font-family: Consolas, 'Lucida Console', Monaco, monospace;\n *      color: #A35A00;\n *  }\n *  #materialDescriptions ul, #materialDescriptions ul ul {\n *      list-style-type: none;\n *  }\n *  #materialDescriptions ul ul {\n *      margin-bottom: 10px;\n *  }\n *  #materialDescriptions ul ul li {\n *      font-weight: normal;\n *      color: #000000;\n *      text-indent: -2em;\n *      margin-left: 2em;\n *  }\n *  #materialDescriptions ul li {\n *      font-weight: bold;\n *      color: #0053CF;\n *  }\n * </style>\n *\n * Base material types and their uniforms:\n * <div id='materialDescriptions'>\n * <ul>\n *  <li>Color</li>\n *  <ul>\n *      <li><code>color</code>:  rgba color object.</li>\n *  </ul>\n *  <li>Image</li>\n *  <ul>\n *      <li><code>image</code>:  path to image.</li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of times to repeat the image.</li>\n *  </ul>\n *  <li>DiffuseMap</li>\n *  <ul>\n *      <li><code>image</code>:  path to image.</li>\n *      <li><code>channels</code>:  Three character string containing any combination of r, g, b, and a for selecting the desired image channels.</li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of times to repeat the image.</li>\n *  </ul>\n *  <li>AlphaMap</li>\n *  <ul>\n *      <li><code>image</code>:  path to image.</li>\n *      <li><code>channel</code>:  One character string containing r, g, b, or a for selecting the desired image channel. </li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of times to repeat the image.</li>\n *  </ul>\n *  <li>SpecularMap</li>\n *  <ul>\n *      <li><code>image</code>: path to image.</li>\n *      <li><code>channel</code>: One character string containing r, g, b, or a for selecting the desired image channel. </li>\n *      <li><code>repeat</code>: Object with x and y values specifying the number of times to repeat the image.</li>\n *  </ul>\n *  <li>EmissionMap</li>\n *  <ul>\n *      <li><code>image</code>:  path to image.</li>\n *      <li><code>channels</code>:  Three character string containing any combination of r, g, b, and a for selecting the desired image channels. </li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of times to repeat the image.</li>\n *  </ul>\n *  <li>BumpMap</li>\n *  <ul>\n *      <li><code>image</code>:  path to image.</li>\n *      <li><code>channel</code>:  One character string containing r, g, b, or a for selecting the desired image channel. </li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of times to repeat the image.</li>\n *      <li><code>strength</code>:  Bump strength value between 0.0 and 1.0 where 0.0 is small bumps and 1.0 is large bumps.</li>\n *  </ul>\n *  <li>NormalMap</li>\n *  <ul>\n *      <li><code>image</code>:  path to image.</li>\n *      <li><code>channels</code>:  Three character string containing any combination of r, g, b, and a for selecting the desired image channels. </li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of times to repeat the image.</li>\n *      <li><code>strength</code>:  Bump strength value between 0.0 and 1.0 where 0.0 is small bumps and 1.0 is large bumps.</li>\n *  </ul>\n *  <li>Grid</li>\n *  <ul>\n *      <li><code>color</code>:  rgba color object for the whole material.</li>\n *      <li><code>cellAlpha</code>: Alpha value for the cells between grid lines.  This will be combined with color.alpha.</li>\n *      <li><code>lineCount</code>:  Object with x and y values specifying the number of columns and rows respectively.</li>\n *      <li><code>lineThickness</code>:  Object with x and y values specifying the thickness of grid lines (in pixels where available).</li>\n *      <li><code>lineOffset</code>:  Object with x and y values specifying the offset of grid lines (range is 0 to 1).</li>\n *  </ul>\n *  <li>Stripe</li>\n *  <ul>\n *      <li><code>horizontal</code>:  Boolean that determines if the stripes are horizontal or vertical.</li>\n *      <li><code>evenColor</code>:  rgba color object for the stripe's first color.</li>\n *      <li><code>oddColor</code>:  rgba color object for the stripe's second color.</li>\n *      <li><code>offset</code>:  Number that controls at which point into the pattern to begin drawing; with 0.0 being the beginning of the even color, 1.0 the beginning of the odd color, 2.0 being the even color again, and any multiple or fractional values being in between.</li>\n *      <li><code>repeat</code>:  Number that controls the total number of stripes, half light and half dark.</li>\n *  </ul>\n *  <li>Checkerboard</li>\n *  <ul>\n *      <li><code>lightColor</code>:  rgba color object for the checkerboard's light alternating color.</li>\n *      <li><code>darkColor</code>: rgba color object for the checkerboard's dark alternating color.</li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of columns and rows respectively.</li>\n *  </ul>\n *  <li>Dot</li>\n *  <ul>\n *      <li><code>lightColor</code>:  rgba color object for the dot color.</li>\n *      <li><code>darkColor</code>:  rgba color object for the background color.</li>\n *      <li><code>repeat</code>:  Object with x and y values specifying the number of columns and rows of dots respectively.</li>\n *  </ul>\n *  <li>Water</li>\n *  <ul>\n *      <li><code>baseWaterColor</code>:  rgba color object base color of the water.</li>\n *      <li><code>blendColor</code>:  rgba color object used when blending from water to non-water areas.</li>\n *      <li><code>specularMap</code>:  Single channel texture used to indicate areas of water.</li>\n *      <li><code>normalMap</code>:  Normal map for water normal perturbation.</li>\n *      <li><code>frequency</code>:  Number that controls the number of waves.</li>\n *      <li><code>animationSpeed</code>:  Number that controls the animations speed of the water.</li>\n *      <li><code>amplitude</code>:  Number that controls the amplitude of water waves.</li>\n *      <li><code>specularIntensity</code>:  Number that controls the intensity of specular reflections.</li>\n *  </ul>\n *  <li>RimLighting</li>\n *  <ul>\n *      <li><code>color</code>:  diffuse color and alpha.</li>\n *      <li><code>rimColor</code>:  diffuse color and alpha of the rim.</li>\n *      <li><code>width</code>:  Number that determines the rim's width.</li>\n *  </ul>\n *  <li>Fade</li>\n *  <ul>\n *      <li><code>fadeInColor</code>: diffuse color and alpha at <code>time</code></li>\n *      <li><code>fadeOutColor</code>: diffuse color and alpha at <code>maximumDistance</code> from <code>time</code></li>\n *      <li><code>maximumDistance</code>: Number between 0.0 and 1.0 where the <code>fadeInColor</code> becomes the <code>fadeOutColor</code>. A value of 0.0 gives the entire material a color of <code>fadeOutColor</code> and a value of 1.0 gives the the entire material a color of <code>fadeInColor</code></li>\n *      <li><code>repeat</code>: true if the fade should wrap around the texture coodinates.</li>\n *      <li><code>fadeDirection</code>: Object with x and y values specifying if the fade should be in the x and y directions.</li>\n *      <li><code>time</code>: Object with x and y values between 0.0 and 1.0 of the <code>fadeInColor</code> position</li>\n *  </ul>\n *  <li>PolylineArrow</li>\n *  <ul>\n *      <li><code>color</code>: diffuse color and alpha.</li>\n *  </ul>\n *  <li>PolylineDash</li>\n *  <ul>\n *      <li><code>color</code>: color for the line.</li>\n *      <li><code>gapColor</code>: color for the gaps in the line.</li>\n *      <li><code>dashLength</code>: Dash length in pixels.</li>\n *      <li><code>dashPattern</code>: The 16 bit stipple pattern for the line..</li>\n *  </ul>\n *  <li>PolylineGlow</li>\n *  <ul>\n *      <li><code>color</code>: color and maximum alpha for the glow on the line.</li>\n *      <li><code>glowPower</code>: strength of the glow, as a percentage of the total line width (less than 1.0).</li>\n *      <li><code>taperPower</code>: strength of the tapering effect, as a percentage of the total line length.  If 1.0 or higher, no taper effect is used.</li>\n *  </ul>\n *  <li>PolylineOutline</li>\n *  <ul>\n *      <li><code>color</code>: diffuse color and alpha for the interior of the line.</li>\n *      <li><code>outlineColor</code>: diffuse color and alpha for the outline.</li>\n *      <li><code>outlineWidth</code>: width of the outline in pixels.</li>\n *  </ul>\n *  <li>ElevationContour</li>\n *  <ul>\n *      <li><code>color</code>: color and alpha for the contour line.</li>\n *      <li><code>spacing</code>: spacing for contour lines in meters.</li>\n *      <li><code>width</code>: Number specifying the width of the grid lines in pixels.</li>\n *  </ul>\n *  <li>ElevationRamp</li>\n *  <ul>\n *      <li><code>image</code>: color ramp image to use for coloring the terrain.</li>\n *      <li><code>minimumHeight</code>: minimum height for the ramp.</li>\n *      <li><code>maximumHeight</code>: maximum height for the ramp.</li>\n *  </ul>\n *  <li>SlopeRamp</li>\n *  <ul>\n *      <li><code>image</code>: color ramp image to use for coloring the terrain by slope.</li>\n *  </ul>\n *  <li>AspectRamp</li>\n *  <ul>\n *      <li><code>image</code>: color ramp image to use for color the terrain by aspect.</li>\n *  </ul>\n *  <li>ElevationBand</li>\n *  <ul>\n *      <li><code>heights</code>: image of heights sorted from lowest to highest.</li>\n *      <li><code>colors</code>: image of colors at the corresponding heights.</li>\n * </ul>\n * <li>WaterMask</li>\n * <ul>\n *      <li><code>waterColor</code>: diffuse color and alpha for the areas covered by water.</li>\n *      <li><code>landColor</code>: diffuse color and alpha for the areas covered by land.</li>\n * </ul>\n * </ul>\n * </ul>\n * </div>\n *\n * @alias Material\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.strict=false] Throws errors for issues that would normally be ignored, including unused uniforms or materials.\n * @param {boolean|Function} [options.translucent=true] When <code>true</code> or a function that returns <code>true</code>, the geometry\n *                           with this material is expected to appear translucent.\n * @param {TextureMinificationFilter} [options.minificationFilter=TextureMinificationFilter.LINEAR] The {@link TextureMinificationFilter} to apply to this material's textures.\n * @param {TextureMagnificationFilter} [options.magnificationFilter=TextureMagnificationFilter.LINEAR] The {@link TextureMagnificationFilter} to apply to this material's textures.\n * @param {object} options.fabric The fabric JSON used to generate the material.\n *\n * @exception {DeveloperError} fabric: uniform has invalid type.\n * @exception {DeveloperError} fabric: uniforms and materials cannot share the same property.\n * @exception {DeveloperError} fabric: cannot have source and components in the same section.\n * @exception {DeveloperError} fabric: property name is not valid. It should be 'type', 'materials', 'uniforms', 'components', or 'source'.\n * @exception {DeveloperError} fabric: property name is not valid. It should be 'diffuse', 'specular', 'shininess', 'normal', 'emission', or 'alpha'.\n * @exception {DeveloperError} strict: shader source does not use string.\n * @exception {DeveloperError} strict: shader source does not use uniform.\n * @exception {DeveloperError} strict: shader source does not use material.\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric wiki page} for a more detailed options of Fabric.\n * @demo {@link https://sandcastle.cesium.com/index.html?id=materials|Cesium Sandcastle Materials Demo}\n *\n * @example\n * // Create a color material with fromType:\n * polygon.material = Cesium.Material.fromType('Color');\n * polygon.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);\n *\n * // Create the default material:\n * polygon.material = new Cesium.Material();\n *\n * // Create a color material with full Fabric notation:\n * polygon.material = new Cesium.Material({\n *   fabric: {\n *     type: 'Color',\n *     uniforms: {\n *       color: new Cesium.Color(1.0, 1.0, 0.0, 1.0)\n *     }\n *   }\n * });\n */\nfunction Material(options) {\n  /**\n   * The material type. Can be an existing type or a new type. If no type is specified in fabric, type is a GUID.\n   * @type {string}\n   * @default undefined\n   */\n  this.type = undefined;\n\n  /**\n   * The glsl shader source for this material.\n   * @type {string}\n   * @default undefined\n   */\n  this.shaderSource = undefined;\n\n  /**\n   * Maps sub-material names to Material objects.\n   * @type {object}\n   * @default undefined\n   */\n  this.materials = undefined;\n\n  /**\n   * Maps uniform names to their values.\n   * @type {object}\n   * @default undefined\n   */\n  this.uniforms = undefined;\n  this._uniforms = undefined;\n\n  /**\n   * When <code>true</code> or a function that returns <code>true</code>,\n   * the geometry is expected to appear translucent.\n   * @type {boolean|Function}\n   * @default undefined\n   */\n  this.translucent = undefined;\n\n  this._minificationFilter =\n    options.minificationFilter ?? TextureMinificationFilter.LINEAR;\n  this._magnificationFilter =\n    options.magnificationFilter ?? TextureMagnificationFilter.LINEAR;\n\n  this._strict = undefined;\n  this._template = undefined;\n  this._count = undefined;\n\n  this._texturePaths = {};\n  this._loadedImages = [];\n  this._loadedCubeMaps = [];\n\n  this._textures = {};\n\n  this._updateFunctions = [];\n\n  this._defaultTexture = undefined;\n\n  /**\n   * Any and all promises that are created when initializing the material.\n   * Examples: loading images and cubemaps.\n   *\n   * @type {Promise[]}\n   * @private\n   */\n  this._initializationPromises = [];\n\n  /**\n   * An error that occurred in async operations during material initialization.\n   * Only one error is stored.\n   *\n   * @type {Error|undefined}\n   * @private\n   */\n  this._initializationError = undefined;\n\n  initializeMaterial(options, this);\n  Object.defineProperties(this, {\n    type: {\n      value: this.type,\n      writable: false,\n    },\n\n    /**\n     * The {@link TextureMinificationFilter} to apply to this material's textures.\n     * @type {TextureMinificationFilter}\n     * @default TextureMinificationFilter.LINEAR\n     */\n    minificationFilter: {\n      get: function () {\n        return this._minificationFilter;\n      },\n      set: function (value) {\n        this._minificationFilter = value;\n      },\n    },\n\n    /**\n     * The {@link TextureMagnificationFilter} to apply to this material's textures.\n     * @type {TextureMagnificationFilter}\n     * @default TextureMagnificationFilter.LINEAR\n     */\n    magnificationFilter: {\n      get: function () {\n        return this._magnificationFilter;\n      },\n      set: function (value) {\n        this._magnificationFilter = value;\n      },\n    },\n  });\n\n  if (!defined(Material._uniformList[this.type])) {\n    Material._uniformList[this.type] = Object.keys(this._uniforms);\n  }\n}\n\n// Cached list of combined uniform names indexed by type.\n// Used to get the list of uniforms in the same order.\nMaterial._uniformList = {};\n\n/**\n * Creates a new material using an existing material type.\n * <br /><br />\n * Shorthand for: new Material({fabric : {type : type}});\n *\n * @param {string} type The base material type.\n * @param {object} [uniforms] Overrides for the default uniforms.\n * @returns {Material} New material object.\n *\n * @exception {DeveloperError} material with that type does not exist.\n *\n * @example\n * const material = Cesium.Material.fromType('Color', {\n *   color: new Cesium.Color(1.0, 0.0, 0.0, 1.0)\n * });\n */\nMaterial.fromType = function (type, uniforms) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(Material._materialCache.getMaterial(type))) {\n    throw new DeveloperError(`material with type '${type}' does not exist.`);\n  }\n  //>>includeEnd('debug');\n\n  const material = new Material({\n    fabric: {\n      type: type,\n    },\n  });\n\n  if (defined(uniforms)) {\n    for (const name in uniforms) {\n      if (uniforms.hasOwnProperty(name)) {\n        material.uniforms[name] = uniforms[name];\n      }\n    }\n  }\n\n  return material;\n};\n\n/**\n * Creates a new material using an existing material type and returns a promise that resolves when\n * all of the material's resources have been loaded.\n *\n * @param {string} type The base material type.\n * @param {object} [uniforms] Overrides for the default uniforms.\n * @returns {Promise<Material>} A promise that resolves to a new material object when all resources are loaded.\n *\n * @exception {DeveloperError} material with that type does not exist.\n *\n * @example\n * const material = await Cesium.Material.fromTypeAsync('Image', {\n *    image: '../Images/Cesium_Logo_overlay.png'\n * });\n */\nMaterial.fromTypeAsync = async function (type, uniforms) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(Material._materialCache.getMaterial(type))) {\n    throw new DeveloperError(`material with type '${type}' does not exist.`);\n  }\n  //>>includeEnd('debug');\n\n  const initializationPromises = [];\n  // Unlike Material.fromType, we need to specify the uniforms in the Material constructor up front,\n  // or else anything that needs to be async loaded won't be kicked off until the next Update call.\n  const material = new Material({\n    fabric: {\n      type: type,\n      uniforms: uniforms,\n    },\n  });\n\n  // Recursively collect initialization promises for this material and its submaterials.\n  getInitializationPromises(material, initializationPromises);\n  await Promise.all(initializationPromises);\n  initializationPromises.length = 0;\n\n  if (defined(material._initializationError)) {\n    throw material._initializationError;\n  }\n\n  return material;\n};\n\n/**\n * Recursively traverses the material and its submaterials to collect all initialization promises.\n * @param {Material} material The material to traverse.\n * @param {Promise[]} initializationPromises The array to collect promises into.\n *\n * @private\n */\nfunction getInitializationPromises(material, initializationPromises) {\n  initializationPromises.push(...material._initializationPromises);\n  const submaterials = material.materials;\n  for (const name in submaterials) {\n    if (submaterials.hasOwnProperty(name)) {\n      const submaterial = submaterials[name];\n      getInitializationPromises(submaterial, initializationPromises);\n    }\n  }\n}\n\n/**\n * Gets whether or not this material is translucent.\n * @returns {boolean} <code>true</code> if this material is translucent, <code>false</code> otherwise.\n */\nMaterial.prototype.isTranslucent = function () {\n  if (defined(this.translucent)) {\n    if (typeof this.translucent === \"function\") {\n      return this.translucent();\n    }\n\n    return this.translucent;\n  }\n\n  let translucent = true;\n  const funcs = this._translucentFunctions;\n  const length = funcs.length;\n  for (let i = 0; i < length; ++i) {\n    const func = funcs[i];\n    if (typeof func === \"function\") {\n      translucent = translucent && func();\n    } else {\n      translucent = translucent && func;\n    }\n\n    if (!translucent) {\n      break;\n    }\n  }\n  return translucent;\n};\n\n/**\n * @private\n */\nMaterial.prototype.update = function (context) {\n  this._defaultTexture = context.defaultTexture;\n\n  let i;\n  let uniformId;\n\n  const loadedImages = this._loadedImages;\n  let length = loadedImages.length;\n  for (i = 0; i < length; ++i) {\n    const loadedImage = loadedImages[i];\n    uniformId = loadedImage.id;\n    let image = loadedImage.image;\n\n    // Images transcoded from KTX2 can contain multiple mip levels:\n    // https://github.khronos.org/KTX-Specification/#_mip_level_array\n    let mipLevels;\n    if (Array.isArray(image)) {\n      // highest detail mip should be level 0\n      mipLevels = image.slice(1, image.length).map(function (mipLevel) {\n        return mipLevel.bufferView;\n      });\n      image = image[0];\n    }\n\n    const sampler = new Sampler({\n      minificationFilter: this._minificationFilter,\n      magnificationFilter: this._magnificationFilter,\n    });\n\n    let texture;\n    if (defined(image.internalFormat)) {\n      texture = new Texture({\n        context: context,\n        pixelFormat: image.internalFormat,\n        width: image.width,\n        height: image.height,\n        source: {\n          arrayBufferView: image.bufferView,\n          mipLevels: mipLevels,\n        },\n        sampler: sampler,\n      });\n    } else {\n      texture = new Texture({\n        context: context,\n        source: image,\n        sampler: sampler,\n      });\n    }\n\n    // The material destroys its old texture only after the new one has been loaded.\n    // This will ensure a smooth swap of textures and prevent the default texture\n    // from appearing for a few frames.\n    const oldTexture = this._textures[uniformId];\n    if (defined(oldTexture) && oldTexture !== this._defaultTexture) {\n      oldTexture.destroy();\n    }\n\n    this._textures[uniformId] = texture;\n\n    const uniformDimensionsName = `${uniformId}Dimensions`;\n    if (this.uniforms.hasOwnProperty(uniformDimensionsName)) {\n      const uniformDimensions = this.uniforms[uniformDimensionsName];\n      uniformDimensions.x = texture._width;\n      uniformDimensions.y = texture._height;\n    }\n  }\n\n  loadedImages.length = 0;\n\n  const loadedCubeMaps = this._loadedCubeMaps;\n  length = loadedCubeMaps.length;\n\n  for (i = 0; i < length; ++i) {\n    const loadedCubeMap = loadedCubeMaps[i];\n    uniformId = loadedCubeMap.id;\n    const images = loadedCubeMap.images;\n\n    const cubeMap = new CubeMap({\n      context: context,\n      source: {\n        positiveX: images[0],\n        negativeX: images[1],\n        positiveY: images[2],\n        negativeY: images[3],\n        positiveZ: images[4],\n        negativeZ: images[5],\n      },\n      sampler: new Sampler({\n        minificationFilter: this._minificationFilter,\n        magnificationFilter: this._magnificationFilter,\n      }),\n    });\n\n    this._textures[uniformId] = cubeMap;\n  }\n\n  loadedCubeMaps.length = 0;\n\n  const updateFunctions = this._updateFunctions;\n  length = updateFunctions.length;\n  for (i = 0; i < length; ++i) {\n    updateFunctions[i](this, context);\n  }\n\n  const subMaterials = this.materials;\n  for (const name in subMaterials) {\n    if (subMaterials.hasOwnProperty(name)) {\n      subMaterials[name].update(context);\n    }\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see Material#destroy\n */\nMaterial.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * material = material && material.destroy();\n *\n * @see Material#isDestroyed\n */\nMaterial.prototype.destroy = function () {\n  const textures = this._textures;\n  for (const texture in textures) {\n    if (textures.hasOwnProperty(texture)) {\n      const instance = textures[texture];\n      if (instance !== this._defaultTexture) {\n        instance.destroy();\n      }\n    }\n  }\n\n  const materials = this.materials;\n  for (const material in materials) {\n    if (materials.hasOwnProperty(material)) {\n      materials[material].destroy();\n    }\n  }\n  return destroyObject(this);\n};\n\nfunction initializeMaterial(options, result) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  result._strict = options.strict ?? false;\n  result._count = options.count ?? 0;\n  result._template = clone(options.fabric ?? Frozen.EMPTY_OBJECT);\n  result.fabric = clone(options.fabric ?? Frozen.EMPTY_OBJECT);\n  result._template.uniforms = clone(\n    result._template.uniforms ?? Frozen.EMPTY_OBJECT,\n  );\n  result._template.materials = clone(\n    result._template.materials ?? Frozen.EMPTY_OBJECT,\n  );\n\n  result.type = defined(result._template.type)\n    ? result._template.type\n    : createGuid();\n\n  result.shaderSource = \"\";\n  result.materials = {};\n  result.uniforms = {};\n  result._uniforms = {};\n  result._translucentFunctions = [];\n\n  let translucent;\n\n  // If the cache contains this material type, build the material template off of the stored template.\n  const cachedMaterial = Material._materialCache.getMaterial(result.type);\n  if (defined(cachedMaterial)) {\n    const template = clone(cachedMaterial.fabric, true);\n    result._template = combine(result._template, template, true);\n    translucent = cachedMaterial.translucent;\n  }\n\n  // Make sure the template has no obvious errors. More error checking happens later.\n  checkForTemplateErrors(result);\n\n  createMethodDefinition(result);\n  createUniforms(result);\n  createSubMaterials(result);\n\n  // If the material has a new type, add it to the cache.\n  if (!defined(cachedMaterial)) {\n    Material._materialCache.addMaterial(result.type, result);\n  }\n\n  const defaultTranslucent =\n    result._translucentFunctions.length === 0 ? true : undefined;\n  translucent = translucent ?? defaultTranslucent;\n  translucent = options.translucent ?? translucent;\n\n  if (defined(translucent)) {\n    if (typeof translucent === \"function\") {\n      const wrappedTranslucent = function () {\n        return translucent(result);\n      };\n      result._translucentFunctions.push(wrappedTranslucent);\n    } else {\n      result._translucentFunctions.push(translucent);\n    }\n  }\n}\n\nfunction checkForValidProperties(object, properties, result, throwNotFound) {\n  if (defined(object)) {\n    for (const property in object) {\n      if (object.hasOwnProperty(property)) {\n        const hasProperty = properties.indexOf(property) !== -1;\n        if (\n          (throwNotFound && !hasProperty) ||\n          (!throwNotFound && hasProperty)\n        ) {\n          result(property, properties);\n        }\n      }\n    }\n  }\n}\n\nfunction invalidNameError(property, properties) {\n  //>>includeStart('debug', pragmas.debug);\n  let errorString = `fabric: property name '${property}' is not valid. It should be `;\n  for (let i = 0; i < properties.length; i++) {\n    const propertyName = `'${properties[i]}'`;\n    errorString +=\n      i === properties.length - 1 ? `or ${propertyName}.` : `${propertyName}, `;\n  }\n  throw new DeveloperError(errorString);\n  //>>includeEnd('debug');\n}\n\nfunction duplicateNameError(property, properties) {\n  //>>includeStart('debug', pragmas.debug);\n  const errorString = `fabric: uniforms and materials cannot share the same property '${property}'`;\n  throw new DeveloperError(errorString);\n  //>>includeEnd('debug');\n}\n\nconst templateProperties = [\n  \"type\",\n  \"materials\",\n  \"uniforms\",\n  \"components\",\n  \"source\",\n];\nconst componentProperties = [\n  \"diffuse\",\n  \"specular\",\n  \"shininess\",\n  \"normal\",\n  \"emission\",\n  \"alpha\",\n];\n\nfunction checkForTemplateErrors(material) {\n  const template = material._template;\n  const uniforms = template.uniforms;\n  const materials = template.materials;\n  const components = template.components;\n\n  // Make sure source and components do not exist in the same template.\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(components) && defined(template.source)) {\n    throw new DeveloperError(\n      \"fabric: cannot have source and components in the same template.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  // Make sure all template and components properties are valid.\n  checkForValidProperties(template, templateProperties, invalidNameError, true);\n  checkForValidProperties(\n    components,\n    componentProperties,\n    invalidNameError,\n    true,\n  );\n\n  // Make sure uniforms and materials do not share any of the same names.\n  const materialNames = [];\n  for (const property in materials) {\n    if (materials.hasOwnProperty(property)) {\n      materialNames.push(property);\n    }\n  }\n  checkForValidProperties(uniforms, materialNames, duplicateNameError, false);\n}\n\nfunction isMaterialFused(shaderComponent, material) {\n  const materials = material._template.materials;\n  for (const subMaterialId in materials) {\n    if (materials.hasOwnProperty(subMaterialId)) {\n      if (shaderComponent.indexOf(subMaterialId) > -1) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\n// Create the czm_getMaterial method body using source or components.\nfunction createMethodDefinition(material) {\n  const components = material._template.components;\n  const source = material._template.source;\n  if (defined(source)) {\n    material.shaderSource += `${source}\\n`;\n  } else {\n    material.shaderSource +=\n      \"czm_material czm_getMaterial(czm_materialInput materialInput)\\n{\\n\";\n    material.shaderSource +=\n      \"czm_material material = czm_getDefaultMaterial(materialInput);\\n\";\n    if (defined(components)) {\n      const isMultiMaterial =\n        Object.keys(material._template.materials).length > 0;\n      for (const component in components) {\n        if (components.hasOwnProperty(component)) {\n          if (component === \"diffuse\" || component === \"emission\") {\n            const isFusion =\n              isMultiMaterial &&\n              isMaterialFused(components[component], material);\n            const componentSource = isFusion\n              ? components[component]\n              : `czm_gammaCorrect(${components[component]})`;\n            material.shaderSource += `material.${component} = ${componentSource}; \\n`;\n          } else if (component === \"alpha\") {\n            material.shaderSource += `material.alpha = ${components.alpha}; \\n`;\n          } else {\n            material.shaderSource += `material.${component} = ${components[component]};\\n`;\n          }\n        }\n      }\n    }\n    material.shaderSource += \"return material;\\n}\\n\";\n  }\n}\n\nconst matrixMap = {\n  mat2: Matrix2,\n  mat3: Matrix3,\n  mat4: Matrix4,\n};\n\nconst ktx2Regex = /\\.ktx2$/i;\n\nfunction createTexture2DUpdateFunction(uniformId) {\n  let oldUniformValue;\n  return function (material, context) {\n    const uniforms = material.uniforms;\n    const uniformValue = uniforms[uniformId];\n    const uniformChanged = oldUniformValue !== uniformValue;\n    const uniformValueIsDefaultImage =\n      !defined(uniformValue) || uniformValue === Material.DefaultImageId;\n    oldUniformValue = uniformValue;\n\n    let texture = material._textures[uniformId];\n    let uniformDimensionsName;\n    let uniformDimensions;\n\n    if (uniformValue instanceof HTMLVideoElement) {\n      // HTMLVideoElement.readyState >=2 means we have enough data for the current frame.\n      // See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState\n      if (uniformValue.readyState >= 2) {\n        if (uniformChanged && defined(texture)) {\n          if (texture !== context.defaultTexture) {\n            texture.destroy();\n          }\n          texture = undefined;\n        }\n\n        if (!defined(texture) || texture === context.defaultTexture) {\n          const sampler = new Sampler({\n            minificationFilter: material._minificationFilter,\n            magnificationFilter: material._magnificationFilter,\n          });\n          texture = new Texture({\n            context: context,\n            source: uniformValue,\n            sampler: sampler,\n          });\n          material._textures[uniformId] = texture;\n          return;\n        }\n\n        texture.copyFrom({\n          source: uniformValue,\n        });\n      } else if (!defined(texture)) {\n        material._textures[uniformId] = context.defaultTexture;\n      }\n      return;\n    }\n\n    if (uniformValue instanceof Texture && uniformValue !== texture) {\n      material._texturePaths[uniformId] = undefined;\n      const tmp = material._textures[uniformId];\n      if (defined(tmp) && tmp !== material._defaultTexture) {\n        tmp.destroy();\n      }\n      material._textures[uniformId] = uniformValue;\n\n      uniformDimensionsName = `${uniformId}Dimensions`;\n      if (uniforms.hasOwnProperty(uniformDimensionsName)) {\n        uniformDimensions = uniforms[uniformDimensionsName];\n        uniformDimensions.x = uniformValue._width;\n        uniformDimensions.y = uniformValue._height;\n      }\n\n      return;\n    }\n\n    if (uniformChanged && defined(texture) && uniformValueIsDefaultImage) {\n      // If the newly-assigned texture is the default texture,\n      // we don't need to wait for a new image to load before destroying\n      // the old texture.\n      if (texture !== material._defaultTexture) {\n        texture.destroy();\n      }\n      texture = undefined;\n      material._texturePaths[uniformId] = undefined;\n    }\n\n    if (!defined(texture)) {\n      texture = material._textures[uniformId] = material._defaultTexture;\n\n      uniformDimensionsName = `${uniformId}Dimensions`;\n      if (uniforms.hasOwnProperty(uniformDimensionsName)) {\n        uniformDimensions = uniforms[uniformDimensionsName];\n        uniformDimensions.x = texture._width;\n        uniformDimensions.y = texture._height;\n      }\n    }\n\n    if (uniformValueIsDefaultImage) {\n      return;\n    }\n\n    if (\n      (uniformValue instanceof HTMLCanvasElement ||\n        uniformValue instanceof HTMLImageElement ||\n        uniformValue instanceof ImageBitmap ||\n        uniformValue instanceof OffscreenCanvas) &&\n      uniformValue !== material._texturePaths[uniformId]\n    ) {\n      material._loadedImages.push({\n        id: uniformId,\n        image: uniformValue,\n      });\n      material._texturePaths[uniformId] = uniformValue;\n      return;\n    }\n\n    // If we get to this point, the image should be a string URL or Resource.\n    // Don't wait on the promise to resolve, just start loading the image and poll status from the update loop.\n    loadTexture2DImageForUniform(material, uniformId);\n  };\n}\n\n/**\n * For a given uniform ID, potentially loads a texture image for the material, if the uniform value is a Resource or string URL,\n * and has changed since the last time this was called (either on construction or update).\n *\n * @param {Material} material The material to load the texture for.\n * @param {string} uniformId The ID of the uniform of the image.\n * @returns A promise that resolves when the image is loaded, or a resolved promise if image loading is not necessary.\n *\n * @private\n */\nfunction loadTexture2DImageForUniform(material, uniformId) {\n  const uniforms = material.uniforms;\n  const uniformValue = uniforms[uniformId];\n  if (uniformValue === Material.DefaultImageId) {\n    return Promise.resolve();\n  }\n\n  // Attempt to make a resource from the uniform value. If it's not already a resource or string, this returns the original object.\n  const resource = Resource.createIfNeeded(uniformValue);\n  if (!(resource instanceof Resource)) {\n    return Promise.resolve();\n  }\n\n  // When using the entity layer, the Resource objects get recreated on getValue because\n  // they are clonable. That's why we check the url property for Resources\n  // because the instances aren't the same and we keep trying to load the same\n  // image if it fails to load.\n  const oldResource = Resource.createIfNeeded(\n    material._texturePaths[uniformId],\n  );\n  const uniformHasChanged =\n    !defined(oldResource) || oldResource.url !== resource.url;\n  if (!uniformHasChanged) {\n    return Promise.resolve();\n  }\n\n  let promise;\n  if (ktx2Regex.test(resource.url)) {\n    promise = loadKTX2(resource.url);\n  } else {\n    promise = resource.fetchImage();\n  }\n\n  Promise.resolve(promise)\n    .then(function (image) {\n      material._loadedImages.push({\n        id: uniformId,\n        image: image,\n      });\n    })\n    .catch(function (error) {\n      material._initializationError = error;\n      const texture = material._textures[uniformId];\n      if (defined(texture) && texture !== material._defaultTexture) {\n        texture.destroy();\n      }\n      material._textures[uniformId] = material._defaultTexture;\n    });\n\n  material._texturePaths[uniformId] = uniformValue;\n  return promise;\n}\n\nfunction createCubeMapUpdateFunction(uniformId) {\n  return function (material, context) {\n    const uniformValue = material.uniforms[uniformId];\n\n    if (uniformValue instanceof CubeMap) {\n      const tmp = material._textures[uniformId];\n      if (tmp !== material._defaultTexture) {\n        tmp.destroy();\n      }\n      material._texturePaths[uniformId] = undefined;\n      material._textures[uniformId] = uniformValue;\n      return;\n    }\n\n    if (!defined(material._textures[uniformId])) {\n      material._textures[uniformId] = context.defaultCubeMap;\n    }\n\n    loadCubeMapImagesForUniform(material, uniformId);\n  };\n}\n\n/**\n * Loads the images for a cubemap uniform, if it has changed since the last time this was called.\n *\n * @param {Material} material The material to load the cubemap images for.\n * @param {string} uniformId The ID of the uniform that corresponds to the cubemap images.\n * @returns A promise that resolves when the images are loaded, or a resolved promise if image loading is not necessary.\n */\nfunction loadCubeMapImagesForUniform(material, uniformId) {\n  const uniforms = material.uniforms;\n  const uniformValue = uniforms[uniformId];\n  if (uniformValue === Material.DefaultCubeMapId) {\n    return Promise.resolve();\n  }\n\n  const path =\n    uniformValue.positiveX +\n    uniformValue.negativeX +\n    uniformValue.positiveY +\n    uniformValue.negativeY +\n    uniformValue.positiveZ +\n    uniformValue.negativeZ;\n\n  // The uniform value is unchanged, no update / image load necessary.\n  if (path === material._texturePaths[uniformId]) {\n    return Promise.resolve();\n  }\n\n  const promises = [\n    Resource.createIfNeeded(uniformValue.positiveX).fetchImage(),\n    Resource.createIfNeeded(uniformValue.negativeX).fetchImage(),\n    Resource.createIfNeeded(uniformValue.positiveY).fetchImage(),\n    Resource.createIfNeeded(uniformValue.negativeY).fetchImage(),\n    Resource.createIfNeeded(uniformValue.positiveZ).fetchImage(),\n    Resource.createIfNeeded(uniformValue.negativeZ).fetchImage(),\n  ];\n\n  const allPromise = Promise.all(promises);\n  allPromise\n    .then(function (images) {\n      material._loadedCubeMaps.push({\n        id: uniformId,\n        images: images,\n      });\n    })\n    .catch(function (error) {\n      material._initializationError = error;\n    });\n\n  material._texturePaths[uniformId] = path;\n\n  return allPromise;\n}\n\nfunction createUniforms(material) {\n  const uniforms = material._template.uniforms;\n  for (const uniformId in uniforms) {\n    if (uniforms.hasOwnProperty(uniformId)) {\n      createUniform(material, uniformId);\n    }\n  }\n}\n\n// Writes uniform declarations to the shader file and connects uniform values with\n// corresponding material properties through the returnUniforms function.\nfunction createUniform(material, uniformId) {\n  const strict = material._strict;\n  const materialUniforms = material._template.uniforms;\n  const uniformValue = materialUniforms[uniformId];\n  const uniformType = getUniformType(uniformValue);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(uniformType)) {\n    throw new DeveloperError(\n      `fabric: uniform '${uniformId}' has invalid type.`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  let replacedTokenCount;\n  if (uniformType === \"channels\") {\n    replacedTokenCount = replaceToken(material, uniformId, uniformValue, false);\n    //>>includeStart('debug', pragmas.debug);\n    if (replacedTokenCount === 0 && strict) {\n      throw new DeveloperError(\n        `strict: shader source does not use channels '${uniformId}'.`,\n      );\n    }\n    //>>includeEnd('debug');\n  } else {\n    // Since webgl doesn't allow texture dimension queries in glsl, create a uniform to do it.\n    // Check if the shader source actually uses texture dimensions before creating the uniform.\n    if (uniformType === \"sampler2D\") {\n      const imageDimensionsUniformName = `${uniformId}Dimensions`;\n      if (getNumberOfTokens(material, imageDimensionsUniformName) > 0) {\n        materialUniforms[imageDimensionsUniformName] = {\n          type: \"ivec3\",\n          x: 1,\n          y: 1,\n        };\n        createUniform(material, imageDimensionsUniformName);\n      }\n    }\n\n    // Add uniform declaration to source code.\n    const uniformDeclarationRegex = new RegExp(\n      `uniform\\\\s+${uniformType}\\\\s+${uniformId}\\\\s*;`,\n    );\n    if (!uniformDeclarationRegex.test(material.shaderSource)) {\n      const uniformDeclaration = `uniform ${uniformType} ${uniformId};`;\n      material.shaderSource = uniformDeclaration + material.shaderSource;\n    }\n\n    const newUniformId = `${uniformId}_${material._count++}`;\n    replacedTokenCount = replaceToken(material, uniformId, newUniformId);\n    //>>includeStart('debug', pragmas.debug);\n    if (replacedTokenCount === 1 && strict) {\n      throw new DeveloperError(\n        `strict: shader source does not use uniform '${uniformId}'.`,\n      );\n    }\n    //>>includeEnd('debug');\n\n    // Set uniform value\n    material.uniforms[uniformId] = uniformValue;\n\n    if (uniformType === \"sampler2D\") {\n      material._uniforms[newUniformId] = function () {\n        return material._textures[uniformId];\n      };\n      material._updateFunctions.push(createTexture2DUpdateFunction(uniformId));\n      material._initializationPromises.push(\n        loadTexture2DImageForUniform(material, uniformId),\n      );\n    } else if (uniformType === \"samplerCube\") {\n      material._uniforms[newUniformId] = function () {\n        return material._textures[uniformId];\n      };\n      material._updateFunctions.push(createCubeMapUpdateFunction(uniformId));\n      material._initializationPromises.push(\n        loadCubeMapImagesForUniform(material, uniformId),\n      );\n    } else if (uniformType.indexOf(\"mat\") !== -1) {\n      const scratchMatrix = new matrixMap[uniformType]();\n      material._uniforms[newUniformId] = function () {\n        return matrixMap[uniformType].fromColumnMajorArray(\n          material.uniforms[uniformId],\n          scratchMatrix,\n        );\n      };\n    } else {\n      material._uniforms[newUniformId] = function () {\n        return material.uniforms[uniformId];\n      };\n    }\n  }\n}\n\n// Determines the uniform type based on the uniform in the template.\nfunction getUniformType(uniformValue) {\n  let uniformType = uniformValue.type;\n  if (!defined(uniformType)) {\n    const type = typeof uniformValue;\n    if (type === \"number\") {\n      uniformType = \"float\";\n    } else if (type === \"boolean\") {\n      uniformType = \"bool\";\n    } else if (\n      type === \"string\" ||\n      uniformValue instanceof Resource ||\n      uniformValue instanceof HTMLCanvasElement ||\n      uniformValue instanceof HTMLImageElement ||\n      uniformValue instanceof ImageBitmap ||\n      uniformValue instanceof OffscreenCanvas\n    ) {\n      if (/^([rgba]){1,4}$/i.test(uniformValue)) {\n        uniformType = \"channels\";\n      } else if (uniformValue === Material.DefaultCubeMapId) {\n        uniformType = \"samplerCube\";\n      } else {\n        uniformType = \"sampler2D\";\n      }\n    } else if (type === \"object\") {\n      if (Array.isArray(uniformValue)) {\n        if (\n          uniformValue.length === 4 ||\n          uniformValue.length === 9 ||\n          uniformValue.length === 16\n        ) {\n          uniformType = `mat${Math.sqrt(uniformValue.length)}`;\n        }\n      } else {\n        let numAttributes = 0;\n        for (const attribute in uniformValue) {\n          if (uniformValue.hasOwnProperty(attribute)) {\n            numAttributes += 1;\n          }\n        }\n        if (numAttributes >= 2 && numAttributes <= 4) {\n          uniformType = `vec${numAttributes}`;\n        } else if (numAttributes === 6) {\n          uniformType = \"samplerCube\";\n        }\n      }\n    }\n  }\n  return uniformType;\n}\n\n// Create all sub-materials by combining source and uniforms together.\nfunction createSubMaterials(material) {\n  const strict = material._strict;\n  const subMaterialTemplates = material._template.materials;\n  for (const subMaterialId in subMaterialTemplates) {\n    if (subMaterialTemplates.hasOwnProperty(subMaterialId)) {\n      // Construct the sub-material.\n      const subMaterial = new Material({\n        strict: strict,\n        fabric: subMaterialTemplates[subMaterialId],\n        count: material._count,\n      });\n\n      material._count = subMaterial._count;\n      material._uniforms = combine(\n        material._uniforms,\n        subMaterial._uniforms,\n        true,\n      );\n      material.materials[subMaterialId] = subMaterial;\n      material._translucentFunctions = material._translucentFunctions.concat(\n        subMaterial._translucentFunctions,\n      );\n\n      // Make the material's czm_getMaterial unique by appending the sub-material type.\n      const originalMethodName = \"czm_getMaterial\";\n      const newMethodName = `${originalMethodName}_${material._count++}`;\n      replaceToken(subMaterial, originalMethodName, newMethodName);\n      material.shaderSource = subMaterial.shaderSource + material.shaderSource;\n\n      // Replace each material id with an czm_getMaterial method call.\n      const materialMethodCall = `${newMethodName}(materialInput)`;\n      const tokensReplacedCount = replaceToken(\n        material,\n        subMaterialId,\n        materialMethodCall,\n      );\n      //>>includeStart('debug', pragmas.debug);\n      if (tokensReplacedCount === 0 && strict) {\n        throw new DeveloperError(\n          `strict: shader source does not use material '${subMaterialId}'.`,\n        );\n      }\n      //>>includeEnd('debug');\n    }\n  }\n}\n\n// Used for searching or replacing a token in a material's shader source with something else.\n// If excludePeriod is true, do not accept tokens that are preceded by periods.\n// http://stackoverflow.com/questions/641407/javascript-negative-lookbehind-equivalent\nfunction replaceToken(material, token, newToken, excludePeriod) {\n  excludePeriod = excludePeriod ?? true;\n  let count = 0;\n  const suffixChars = \"([\\\\w])?\";\n  const prefixChars = `([\\\\w${excludePeriod ? \".\" : \"\"}])?`;\n  const regExp = new RegExp(prefixChars + token + suffixChars, \"g\");\n  material.shaderSource = material.shaderSource.replace(\n    regExp,\n    function ($0, $1, $2) {\n      if ($1 || $2) {\n        return $0;\n      }\n      count += 1;\n      return newToken;\n    },\n  );\n  return count;\n}\n\nfunction getNumberOfTokens(material, token, excludePeriod) {\n  return replaceToken(material, token, token, excludePeriod);\n}\n\nMaterial._materialCache = {\n  _materials: {},\n  addMaterial: function (type, materialTemplate) {\n    this._materials[type] = materialTemplate;\n  },\n  getMaterial: function (type) {\n    return this._materials[type];\n  },\n};\n\n/**\n * Gets or sets the default texture uniform value.\n * @type {string}\n */\nMaterial.DefaultImageId = \"czm_defaultImage\";\n\n/**\n * Gets or sets the default cube map texture uniform value.\n * @type {string}\n */\nMaterial.DefaultCubeMapId = \"czm_defaultCubeMap\";\n\n/**\n * Gets the name of the color material.\n * @type {string}\n * @readonly\n */\nMaterial.ColorType = \"Color\";\nMaterial._materialCache.addMaterial(Material.ColorType, {\n  fabric: {\n    type: Material.ColorType,\n    uniforms: {\n      color: new Color(1.0, 0.0, 0.0, 0.5),\n    },\n    components: {\n      diffuse: \"color.rgb\",\n      alpha: \"color.a\",\n    },\n  },\n  translucent: function (material) {\n    return material.uniforms.color.alpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the image material.\n * @type {string}\n * @readonly\n */\nMaterial.ImageType = \"Image\";\nMaterial._materialCache.addMaterial(Material.ImageType, {\n  fabric: {\n    type: Material.ImageType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      repeat: new Cartesian2(1.0, 1.0),\n      color: new Color(1.0, 1.0, 1.0, 1.0),\n    },\n    components: {\n      diffuse:\n        \"texture(image, fract(repeat * materialInput.st)).rgb * color.rgb\",\n      alpha: \"texture(image, fract(repeat * materialInput.st)).a * color.a\",\n    },\n  },\n  translucent: function (material) {\n    return material.uniforms.color.alpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the diffuce map material.\n * @type {string}\n * @readonly\n */\nMaterial.DiffuseMapType = \"DiffuseMap\";\nMaterial._materialCache.addMaterial(Material.DiffuseMapType, {\n  fabric: {\n    type: Material.DiffuseMapType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      channels: \"rgb\",\n      repeat: new Cartesian2(1.0, 1.0),\n    },\n    components: {\n      diffuse: \"texture(image, fract(repeat * materialInput.st)).channels\",\n    },\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the alpha map material.\n * @type {string}\n * @readonly\n */\nMaterial.AlphaMapType = \"AlphaMap\";\nMaterial._materialCache.addMaterial(Material.AlphaMapType, {\n  fabric: {\n    type: Material.AlphaMapType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      channel: \"a\",\n      repeat: new Cartesian2(1.0, 1.0),\n    },\n    components: {\n      alpha: \"texture(image, fract(repeat * materialInput.st)).channel\",\n    },\n  },\n  translucent: true,\n});\n\n/**\n * Gets the name of the specular map material.\n * @type {string}\n * @readonly\n */\nMaterial.SpecularMapType = \"SpecularMap\";\nMaterial._materialCache.addMaterial(Material.SpecularMapType, {\n  fabric: {\n    type: Material.SpecularMapType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      channel: \"r\",\n      repeat: new Cartesian2(1.0, 1.0),\n    },\n    components: {\n      specular: \"texture(image, fract(repeat * materialInput.st)).channel\",\n    },\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the emmision map material.\n * @type {string}\n * @readonly\n */\nMaterial.EmissionMapType = \"EmissionMap\";\nMaterial._materialCache.addMaterial(Material.EmissionMapType, {\n  fabric: {\n    type: Material.EmissionMapType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      channels: \"rgb\",\n      repeat: new Cartesian2(1.0, 1.0),\n    },\n    components: {\n      emission: \"texture(image, fract(repeat * materialInput.st)).channels\",\n    },\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the bump map material.\n * @type {string}\n * @readonly\n */\nMaterial.BumpMapType = \"BumpMap\";\nMaterial._materialCache.addMaterial(Material.BumpMapType, {\n  fabric: {\n    type: Material.BumpMapType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      channel: \"r\",\n      strength: 0.8,\n      repeat: new Cartesian2(1.0, 1.0),\n    },\n    source: BumpMapMaterial,\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the normal map material.\n * @type {string}\n * @readonly\n */\nMaterial.NormalMapType = \"NormalMap\";\nMaterial._materialCache.addMaterial(Material.NormalMapType, {\n  fabric: {\n    type: Material.NormalMapType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      channels: \"rgb\",\n      strength: 0.8,\n      repeat: new Cartesian2(1.0, 1.0),\n    },\n    source: NormalMapMaterial,\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the grid material.\n * @type {string}\n * @readonly\n */\nMaterial.GridType = \"Grid\";\nMaterial._materialCache.addMaterial(Material.GridType, {\n  fabric: {\n    type: Material.GridType,\n    uniforms: {\n      color: new Color(0.0, 1.0, 0.0, 1.0),\n      cellAlpha: 0.1,\n      lineCount: new Cartesian2(8.0, 8.0),\n      lineThickness: new Cartesian2(1.0, 1.0),\n      lineOffset: new Cartesian2(0.0, 0.0),\n    },\n    source: GridMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return uniforms.color.alpha < 1.0 || uniforms.cellAlpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the stripe material.\n * @type {string}\n * @readonly\n */\nMaterial.StripeType = \"Stripe\";\nMaterial._materialCache.addMaterial(Material.StripeType, {\n  fabric: {\n    type: Material.StripeType,\n    uniforms: {\n      horizontal: true,\n      evenColor: new Color(1.0, 1.0, 1.0, 0.5),\n      oddColor: new Color(0.0, 0.0, 1.0, 0.5),\n      offset: 0.0,\n      repeat: 5.0,\n    },\n    source: StripeMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return uniforms.evenColor.alpha < 1.0 || uniforms.oddColor.alpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the checkerboard material.\n * @type {string}\n * @readonly\n */\nMaterial.CheckerboardType = \"Checkerboard\";\nMaterial._materialCache.addMaterial(Material.CheckerboardType, {\n  fabric: {\n    type: Material.CheckerboardType,\n    uniforms: {\n      lightColor: new Color(1.0, 1.0, 1.0, 0.5),\n      darkColor: new Color(0.0, 0.0, 0.0, 0.5),\n      repeat: new Cartesian2(5.0, 5.0),\n    },\n    source: CheckerboardMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return uniforms.lightColor.alpha < 1.0 || uniforms.darkColor.alpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the dot material.\n * @type {string}\n * @readonly\n */\nMaterial.DotType = \"Dot\";\nMaterial._materialCache.addMaterial(Material.DotType, {\n  fabric: {\n    type: Material.DotType,\n    uniforms: {\n      lightColor: new Color(1.0, 1.0, 0.0, 0.75),\n      darkColor: new Color(0.0, 1.0, 1.0, 0.75),\n      repeat: new Cartesian2(5.0, 5.0),\n    },\n    source: DotMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return uniforms.lightColor.alpha < 1.0 || uniforms.darkColor.alpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the water material.\n * @type {string}\n * @readonly\n */\nMaterial.WaterType = \"Water\";\nMaterial._materialCache.addMaterial(Material.WaterType, {\n  fabric: {\n    type: Material.WaterType,\n    uniforms: {\n      baseWaterColor: new Color(0.2, 0.3, 0.6, 1.0),\n      blendColor: new Color(0.0, 1.0, 0.699, 1.0),\n      specularMap: Material.DefaultImageId,\n      normalMap: Material.DefaultImageId,\n      frequency: 10.0,\n      animationSpeed: 0.01,\n      amplitude: 1.0,\n      specularIntensity: 0.5,\n      fadeFactor: 1.0,\n    },\n    source: WaterMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return (\n      uniforms.baseWaterColor.alpha < 1.0 || uniforms.blendColor.alpha < 1.0\n    );\n  },\n});\n\n/**\n * Gets the name of the rim lighting material.\n * @type {string}\n * @readonly\n */\nMaterial.RimLightingType = \"RimLighting\";\nMaterial._materialCache.addMaterial(Material.RimLightingType, {\n  fabric: {\n    type: Material.RimLightingType,\n    uniforms: {\n      color: new Color(1.0, 0.0, 0.0, 0.7),\n      rimColor: new Color(1.0, 1.0, 1.0, 0.4),\n      width: 0.3,\n    },\n    source: RimLightingMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return uniforms.color.alpha < 1.0 || uniforms.rimColor.alpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the fade material.\n * @type {string}\n * @readonly\n */\nMaterial.FadeType = \"Fade\";\nMaterial._materialCache.addMaterial(Material.FadeType, {\n  fabric: {\n    type: Material.FadeType,\n    uniforms: {\n      fadeInColor: new Color(1.0, 0.0, 0.0, 1.0),\n      fadeOutColor: new Color(0.0, 0.0, 0.0, 0.0),\n      maximumDistance: 0.5,\n      repeat: true,\n      fadeDirection: {\n        x: true,\n        y: true,\n      },\n      time: new Cartesian2(0.5, 0.5),\n    },\n    source: FadeMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return (\n      uniforms.fadeInColor.alpha < 1.0 || uniforms.fadeOutColor.alpha < 1.0\n    );\n  },\n});\n\n/**\n * Gets the name of the polyline arrow material.\n * @type {string}\n * @readonly\n */\nMaterial.PolylineArrowType = \"PolylineArrow\";\nMaterial._materialCache.addMaterial(Material.PolylineArrowType, {\n  fabric: {\n    type: Material.PolylineArrowType,\n    uniforms: {\n      color: new Color(1.0, 1.0, 1.0, 1.0),\n    },\n    source: PolylineArrowMaterial,\n  },\n  translucent: true,\n});\n\n/**\n * Gets the name of the polyline glow material.\n * @type {string}\n * @readonly\n */\nMaterial.PolylineDashType = \"PolylineDash\";\nMaterial._materialCache.addMaterial(Material.PolylineDashType, {\n  fabric: {\n    type: Material.PolylineDashType,\n    uniforms: {\n      color: new Color(1.0, 0.0, 1.0, 1.0),\n      gapColor: new Color(0.0, 0.0, 0.0, 0.0),\n      dashLength: 16.0,\n      dashPattern: 255.0,\n    },\n    source: PolylineDashMaterial,\n  },\n  translucent: true,\n});\n\n/**\n * Gets the name of the polyline glow material.\n * @type {string}\n * @readonly\n */\nMaterial.PolylineGlowType = \"PolylineGlow\";\nMaterial._materialCache.addMaterial(Material.PolylineGlowType, {\n  fabric: {\n    type: Material.PolylineGlowType,\n    uniforms: {\n      color: new Color(0.0, 0.5, 1.0, 1.0),\n      glowPower: 0.25,\n      taperPower: 1.0,\n    },\n    source: PolylineGlowMaterial,\n  },\n  translucent: true,\n});\n\n/**\n * Gets the name of the polyline outline material.\n * @type {string}\n * @readonly\n */\nMaterial.PolylineOutlineType = \"PolylineOutline\";\nMaterial._materialCache.addMaterial(Material.PolylineOutlineType, {\n  fabric: {\n    type: Material.PolylineOutlineType,\n    uniforms: {\n      color: new Color(1.0, 1.0, 1.0, 1.0),\n      outlineColor: new Color(1.0, 0.0, 0.0, 1.0),\n      outlineWidth: 1.0,\n    },\n    source: PolylineOutlineMaterial,\n  },\n  translucent: function (material) {\n    const uniforms = material.uniforms;\n    return uniforms.color.alpha < 1.0 || uniforms.outlineColor.alpha < 1.0;\n  },\n});\n\n/**\n * Gets the name of the elevation contour material.\n * @type {string}\n * @readonly\n */\nMaterial.ElevationContourType = \"ElevationContour\";\nMaterial._materialCache.addMaterial(Material.ElevationContourType, {\n  fabric: {\n    type: Material.ElevationContourType,\n    uniforms: {\n      spacing: 100.0,\n      color: new Color(1.0, 0.0, 0.0, 1.0),\n      width: 1.0,\n    },\n    source: ElevationContourMaterial,\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the elevation contour material.\n * @type {string}\n * @readonly\n */\nMaterial.ElevationRampType = \"ElevationRamp\";\nMaterial._materialCache.addMaterial(Material.ElevationRampType, {\n  fabric: {\n    type: Material.ElevationRampType,\n    uniforms: {\n      image: Material.DefaultImageId,\n      minimumHeight: 0.0,\n      maximumHeight: 10000.0,\n    },\n    source: ElevationRampMaterial,\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the slope ramp material.\n * @type {string}\n * @readonly\n */\nMaterial.SlopeRampMaterialType = \"SlopeRamp\";\nMaterial._materialCache.addMaterial(Material.SlopeRampMaterialType, {\n  fabric: {\n    type: Material.SlopeRampMaterialType,\n    uniforms: {\n      image: Material.DefaultImageId,\n    },\n    source: SlopeRampMaterial,\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the aspect ramp material.\n * @type {string}\n * @readonly\n */\nMaterial.AspectRampMaterialType = \"AspectRamp\";\nMaterial._materialCache.addMaterial(Material.AspectRampMaterialType, {\n  fabric: {\n    type: Material.AspectRampMaterialType,\n    uniforms: {\n      image: Material.DefaultImageId,\n    },\n    source: AspectRampMaterial,\n  },\n  translucent: false,\n});\n\n/**\n * Gets the name of the elevation band material.\n * @type {string}\n * @readonly\n */\nMaterial.ElevationBandType = \"ElevationBand\";\nMaterial._materialCache.addMaterial(Material.ElevationBandType, {\n  fabric: {\n    type: Material.ElevationBandType,\n    uniforms: {\n      heights: Material.DefaultImageId,\n      colors: Material.DefaultImageId,\n    },\n    source: ElevationBandMaterial,\n  },\n  translucent: true,\n});\n\n/**\n * Gets the name of the water mask material.\n * @type {string}\n * @readonly\n */\nMaterial.WaterMaskType = \"WaterMask\";\nMaterial._materialCache.addMaterial(Material.WaterMaskType, {\n  fabric: {\n    type: Material.WaterMaskType,\n    source: WaterMaskMaterial,\n    uniforms: {\n      waterColor: new Color(1.0, 1.0, 1.0, 1.0),\n      landColor: new Color(0.0, 0.0, 0.0, 0.0),\n    },\n  },\n  translucent: false,\n});\n\nexport default Material;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport AllMaterialAppearanceFS from \"../Shaders/Appearances/AllMaterialAppearanceFS.js\";\nimport AllMaterialAppearanceVS from \"../Shaders/Appearances/AllMaterialAppearanceVS.js\";\nimport BasicMaterialAppearanceFS from \"../Shaders/Appearances/BasicMaterialAppearanceFS.js\";\nimport BasicMaterialAppearanceVS from \"../Shaders/Appearances/BasicMaterialAppearanceVS.js\";\nimport TexturedMaterialAppearanceFS from \"../Shaders/Appearances/TexturedMaterialAppearanceFS.js\";\nimport TexturedMaterialAppearanceVS from \"../Shaders/Appearances/TexturedMaterialAppearanceVS.js\";\nimport Appearance from \"./Appearance.js\";\nimport Material from \"./Material.js\";\n\n/**\n     * An appearance for arbitrary geometry (as opposed to {@link EllipsoidSurfaceAppearance}, for example)\n     * that supports shading with materials.\n     *\n     * @alias MaterialAppearance\n     * @constructor\n     *\n     * @param {object} [options] Object with the following properties:\n     * @param {boolean} [options.flat=false] When <code>true</code>, flat shading is used in the fragment shader, which means lighting is not taking into account.\n     * @param {boolean} [options.faceForward=!options.closed] When <code>true</code>, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots.  This is useful when both sides of a geometry should be shaded like {@link WallGeometry}.\n     * @param {boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link MaterialAppearance#renderState} has alpha blending enabled.\n     * @param {boolean} [options.closed=false] When <code>true</code>, the geometry is expected to be closed so {@link MaterialAppearance#renderState} has backface culling enabled.\n     * @param {MaterialAppearance.MaterialSupportType} [options.materialSupport=MaterialAppearance.MaterialSupport.TEXTURED] The type of materials that will be supported.\n     * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n     * @param {string} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n     * @param {string} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n     * @param {object} [options.renderState] Optional render state to override the default render state.\n     *\n     * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n     * @demo {@link https://sandcastle.cesium.com/index.html?id=materials|Cesium Sandcastle Material Appearance Demo}\n     *\n     * @example\n     * const primitive = new Cesium.Primitive({\n     *   geometryInstances : new Cesium.GeometryInstance({\n     *     geometry : new Cesium.WallGeometry({\n            materialSupport :  Cesium.MaterialAppearance.MaterialSupport.BASIC.vertexFormat,\n     *       // ...\n     *     })\n     *   }),\n     *   appearance : new Cesium.MaterialAppearance({\n     *     material : Cesium.Material.fromType('Color'),\n     *     faceForward : true\n     *   })\n     *\n     * });\n     */\nfunction MaterialAppearance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const translucent = options.translucent ?? true;\n  const closed = options.closed ?? false;\n  const materialSupport =\n    options.materialSupport ?? MaterialAppearance.MaterialSupport.TEXTURED;\n\n  /**\n   * The material used to determine the fragment color.  Unlike other {@link MaterialAppearance}\n   * properties, this is not read-only, so an appearance's material can change on the fly.\n   *\n   * @type Material\n   *\n   * @default {@link Material.ColorType}\n   *\n   * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n   */\n  this.material = defined(options.material)\n    ? options.material\n    : Material.fromType(Material.ColorType);\n\n  /**\n   * When <code>true</code>, the geometry is expected to appear translucent.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.translucent = translucent;\n\n  this._vertexShaderSource =\n    options.vertexShaderSource ?? materialSupport.vertexShaderSource;\n  this._fragmentShaderSource =\n    options.fragmentShaderSource ?? materialSupport.fragmentShaderSource;\n  this._renderState = Appearance.getDefaultRenderState(\n    translucent,\n    closed,\n    options.renderState,\n  );\n  this._closed = closed;\n\n  // Non-derived members\n\n  this._materialSupport = materialSupport;\n  this._vertexFormat = materialSupport.vertexFormat;\n  this._flat = options.flat ?? false;\n  this._faceForward = options.faceForward ?? !closed;\n}\n\nObject.defineProperties(MaterialAppearance.prototype, {\n  /**\n   * The GLSL source code for the vertex shader.\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      return this._vertexShaderSource;\n    },\n  },\n\n  /**\n   * The GLSL source code for the fragment shader.  The full fragment shader\n   * source is built procedurally taking into account {@link MaterialAppearance#material},\n   * {@link MaterialAppearance#flat}, and {@link MaterialAppearance#faceForward}.\n   * Use {@link MaterialAppearance#getFragmentShaderSource} to get the full source.\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n\n  /**\n   * The WebGL fixed-function state to use when rendering the geometry.\n   * <p>\n   * The render state can be explicitly defined when constructing a {@link MaterialAppearance}\n   * instance, or it is set implicitly via {@link MaterialAppearance#translucent}\n   * and {@link MaterialAppearance#closed}.\n   * </p>\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be closed so\n   * {@link MaterialAppearance#renderState} has backface culling enabled.\n   * If the viewer enters the geometry, it will not be visible.\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  closed: {\n    get: function () {\n      return this._closed;\n    },\n  },\n\n  /**\n   * The type of materials supported by this instance.  This impacts the required\n   * {@link VertexFormat} and the complexity of the vertex and fragment shaders.\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type {MaterialAppearance.MaterialSupportType}\n   * @readonly\n   *\n   * @default {@link MaterialAppearance.MaterialSupport.TEXTURED}\n   */\n  materialSupport: {\n    get: function () {\n      return this._materialSupport;\n    },\n  },\n\n  /**\n   * The {@link VertexFormat} that this appearance instance is compatible with.\n   * A geometry can have more vertex attributes and still be compatible - at a\n   * potential performance cost - but it can't have less.\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type VertexFormat\n   * @readonly\n   *\n   * @default {@link MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat}\n   */\n  vertexFormat: {\n    get: function () {\n      return this._vertexFormat;\n    },\n  },\n\n  /**\n   * When <code>true</code>, flat shading is used in the fragment shader,\n   * which means lighting is not taking into account.\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  flat: {\n    get: function () {\n      return this._flat;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the fragment shader flips the surface normal\n   * as needed to ensure that the normal faces the viewer to avoid\n   * dark spots.  This is useful when both sides of a geometry should be\n   * shaded like {@link WallGeometry}.\n   *\n   * @memberof MaterialAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  faceForward: {\n    get: function () {\n      return this._faceForward;\n    },\n  },\n});\n\n/**\n * Procedurally creates the full GLSL fragment shader source.  For {@link MaterialAppearance},\n * this is derived from {@link MaterialAppearance#fragmentShaderSource}, {@link MaterialAppearance#material},\n * {@link MaterialAppearance#flat}, and {@link MaterialAppearance#faceForward}.\n *\n * @function\n *\n * @returns {string} The full GLSL fragment shader source.\n */\nMaterialAppearance.prototype.getFragmentShaderSource =\n  Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link MaterialAppearance#translucent} and {@link Material#isTranslucent}.\n *\n * @function\n *\n * @returns {boolean} <code>true</code> if the appearance is translucent.\n */\nMaterialAppearance.prototype.isTranslucent = Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state.  This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {object} The render state.\n */\nMaterialAppearance.prototype.getRenderState =\n  Appearance.prototype.getRenderState;\n\n/**\n * @typedef MaterialAppearance.MaterialSupportType\n * @type {object}\n * @property {VertexFormat} vertexFormat\n * @property {string} vertexShaderSource\n * @property {string} fragmentShaderSource\n */\n\n/**\n * Determines the type of {@link Material} that is supported by a\n * {@link MaterialAppearance} instance.  This is a trade-off between\n * flexibility (a wide array of materials) and memory/performance\n * (required vertex format and GLSL shader complexity.\n * @namespace\n */\nMaterialAppearance.MaterialSupport = {\n  /**\n   * Only basic materials, which require just <code>position</code> and\n   * <code>normal</code> vertex attributes, are supported.\n   *\n   * @type {MaterialAppearance.MaterialSupportType}\n   * @constant\n   */\n  BASIC: Object.freeze({\n    vertexFormat: VertexFormat.POSITION_AND_NORMAL,\n    vertexShaderSource: BasicMaterialAppearanceVS,\n    fragmentShaderSource: BasicMaterialAppearanceFS,\n  }),\n  /**\n   * Materials with textures, which require <code>position</code>,\n   * <code>normal</code>, and <code>st</code> vertex attributes,\n   * are supported.  The vast majority of materials fall into this category.\n   *\n   * @type {MaterialAppearance.MaterialSupportType}\n   * @constant\n   */\n  TEXTURED: Object.freeze({\n    vertexFormat: VertexFormat.POSITION_NORMAL_AND_ST,\n    vertexShaderSource: TexturedMaterialAppearanceVS,\n    fragmentShaderSource: TexturedMaterialAppearanceFS,\n  }),\n  /**\n   * All materials, including those that work in tangent space, are supported.\n   * This requires <code>position</code>, <code>normal</code>, <code>st</code>,\n   * <code>tangent</code>, and <code>bitangent</code> vertex attributes.\n   *\n   * @type {MaterialAppearance.MaterialSupportType}\n   * @constant\n   */\n  ALL: Object.freeze({\n    vertexFormat: VertexFormat.ALL,\n    vertexShaderSource: AllMaterialAppearanceVS,\n    fragmentShaderSource: AllMaterialAppearanceFS,\n  }),\n};\nexport default MaterialAppearance;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport MetadataComponentType from \"./MetadataComponentType.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture3D from \"../Renderer/Texture3D.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\n\n/**\n * @alias Megatexture\n * @constructor\n *\n * @param {Context} context The context in which to create GPU resources.\n * @param {Cartesian3} dimensions The number of voxels in each dimension of the tile.\n * @param {number} channelCount The number of channels in the metadata.\n * @param {MetadataComponentType} componentType The component type of the metadata.\n * @param {number} [availableTextureMemoryBytes=134217728] An upper limit on the texture memory size in bytes.\n *\n * @exception {RuntimeError} The GL context does not support a 3D texture large enough to contain a tile with the given dimensions.\n * @exception {RuntimeError} Not enough texture memory available to create a megatexture with the given tile dimensions.\n *\n * @private\n */\nfunction Megatexture(\n  context,\n  dimensions,\n  channelCount,\n  componentType,\n  availableTextureMemoryBytes = 134217728, // 128 MB\n  tileCount,\n) {\n  // TODO there are a lot of texture packing rules, see https://github.com/CesiumGS/cesium/issues/9572\n  const pixelDataType = getPixelDataType(componentType);\n  const pixelFormat = getPixelFormat(channelCount);\n\n  const bytesPerSample =\n    channelCount * MetadataComponentType.getSizeInBytes(componentType);\n  const textureDimension = Megatexture.get3DTextureDimension(\n    dimensions,\n    bytesPerSample,\n    availableTextureMemoryBytes,\n    tileCount,\n  );\n\n  const tileCounts = Cartesian3.divideComponents(\n    textureDimension,\n    dimensions,\n    new Cartesian3(),\n  );\n\n  /**\n   * @type {number}\n   * @readonly\n   */\n  this.channelCount = channelCount;\n\n  /**\n   * @type {MetadataComponentType}\n   * @readonly\n   */\n  this.componentType = componentType;\n\n  /**\n   * @type {number}\n   * @readonly\n   */\n  this.textureMemoryByteLength =\n    bytesPerSample *\n    textureDimension.x *\n    textureDimension.y *\n    textureDimension.z;\n\n  /**\n   * @type {Cartesian3}\n   * @readonly\n   */\n  this.tileCounts = Cartesian3.clone(tileCounts, new Cartesian3());\n\n  /**\n   * @type {Cartesian3}\n   * @readonly\n   */\n  this.voxelCountPerTile = Cartesian3.clone(dimensions, new Cartesian3());\n\n  /**\n   * @type {number}\n   * @readonly\n   */\n  this.maximumTileCount = tileCounts.x * tileCounts.y * tileCounts.z;\n\n  /**\n   * @type {Texture3D}\n   * @readonly\n   */\n  this.texture = new Texture3D({\n    context: context,\n    pixelFormat: pixelFormat,\n    pixelDatatype: pixelDataType,\n    flipY: false,\n    width: textureDimension.x,\n    height: textureDimension.y,\n    depth: textureDimension.z,\n    sampler: new Sampler({\n      wrapR: TextureWrap.CLAMP_TO_EDGE,\n      wrapS: TextureWrap.CLAMP_TO_EDGE,\n      wrapT: TextureWrap.CLAMP_TO_EDGE,\n      minificationFilter: TextureMinificationFilter.LINEAR,\n      magnificationFilter: TextureMagnificationFilter.LINEAR,\n    }),\n  });\n\n  /**\n   * @type {MegatextureNode[]}\n   * @readonly\n   */\n  this.nodes = new Array(this.maximumTileCount);\n  for (let tileIndex = 0; tileIndex < this.maximumTileCount; tileIndex++) {\n    this.nodes[tileIndex] = new MegatextureNode(tileIndex);\n  }\n  for (let tileIndex = 0; tileIndex < this.maximumTileCount; tileIndex++) {\n    const node = this.nodes[tileIndex];\n    node.previousNode = tileIndex > 0 ? this.nodes[tileIndex - 1] : undefined;\n    node.nextNode =\n      tileIndex < this.maximumTileCount - 1\n        ? this.nodes[tileIndex + 1]\n        : undefined;\n  }\n\n  /**\n   * @type {MegatextureNode}\n   * @readonly\n   */\n  this.occupiedList = undefined;\n\n  /**\n   * @type {MegatextureNode}\n   * @readonly\n   */\n  this.emptyList = this.nodes[0];\n\n  /**\n   * @type {number}\n   * @readonly\n   */\n  this.occupiedCount = 0;\n\n  this._nearestSampling = false;\n}\n\nObject.defineProperties(Megatexture.prototype, {\n  /**\n   * Gets or sets the nearest sampling flag.\n   * @type {boolean}\n   */\n  nearestSampling: {\n    get: function () {\n      return this._nearestSampling;\n    },\n    set: function (nearestSampling) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"nearestSampling\", nearestSampling);\n      //>>includeEnd('debug');\n      if (this._nearestSampling === nearestSampling) {\n        return;\n      }\n      if (nearestSampling) {\n        this.texture.sampler = Sampler.NEAREST;\n      } else {\n        this.texture.sampler = new Sampler({\n          wrapR: TextureWrap.CLAMP_TO_EDGE,\n          wrapS: TextureWrap.CLAMP_TO_EDGE,\n          wrapT: TextureWrap.CLAMP_TO_EDGE,\n          minificationFilter: TextureMinificationFilter.LINEAR,\n          magnificationFilter: TextureMagnificationFilter.LINEAR,\n        });\n      }\n      this._nearestSampling = nearestSampling;\n    },\n  },\n});\n\n/**\n * Get the pixel data type to use in a megatexture.\n * TODO support more\n *\n * @param {MetadataComponentType} componentType The component type of the metadata.\n * @returns {PixelDatatype} The pixel datatype to use for a megatexture.\n *\n * @private\n */\nfunction getPixelDataType(componentType) {\n  if (\n    componentType === MetadataComponentType.FLOAT32 ||\n    componentType === MetadataComponentType.FLOAT64\n  ) {\n    return PixelDatatype.FLOAT;\n  } else if (componentType === MetadataComponentType.UINT8) {\n    return PixelDatatype.UNSIGNED_BYTE;\n  }\n}\n\n/**\n * Get the pixel format to use for a megatexture.\n *\n * @param {number} channelCount The number of channels in the metadata. Must be 1 to 4.\n * @returns {PixelFormat} The pixel format to use for a megatexture.\n *\n * @private\n */\nfunction getPixelFormat(channelCount) {\n  switch (channelCount) {\n    case 1:\n      return PixelFormat.RED;\n    case 2:\n      return PixelFormat.RG;\n    case 3:\n      return PixelFormat.RGB;\n    case 4:\n      return PixelFormat.RGBA;\n  }\n}\n\n/**\n * @alias MegatextureNode\n * @constructor\n *\n * @param {number} index\n *\n * @private\n */\nfunction MegatextureNode(index) {\n  /**\n   * @type {number}\n   */\n  this.index = index;\n\n  /**\n   * @type {MegatextureNode}\n   */\n  this.nextNode = undefined;\n\n  /**\n   * @type {MegatextureNode}\n   */\n  this.previousNode = undefined;\n}\n\n/**\n * Add an array of tile metadata to the megatexture.\n * @param {Array} data The data to be added.\n * @returns {number} The index of the tile's location in the megatexture.\n *\n * @exception {DeveloperError} Trying to add when there are no empty spots.\n */\nMegatexture.prototype.add = function (data) {\n  if (this.isFull()) {\n    throw new DeveloperError(\"Trying to add when there are no empty spots\");\n  }\n\n  // remove head of empty list\n  const node = this.emptyList;\n  this.emptyList = this.emptyList.nextNode;\n  if (defined(this.emptyList)) {\n    this.emptyList.previousNode = undefined;\n  }\n\n  // make head of occupied list\n  node.nextNode = this.occupiedList;\n  if (defined(node.nextNode)) {\n    node.nextNode.previousNode = node;\n  }\n  this.occupiedList = node;\n\n  const index = node.index;\n  this.writeDataToTexture(index, data);\n\n  this.occupiedCount++;\n  return index;\n};\n\n/**\n * @param {number} index\n * @exception {DeveloperError} Megatexture index out of bounds.\n */\nMegatexture.prototype.remove = function (index) {\n  if (index < 0 || index >= this.maximumTileCount) {\n    throw new DeveloperError(\"Megatexture index out of bounds\");\n  }\n\n  // remove from list\n  const node = this.nodes[index];\n  if (defined(node.previousNode)) {\n    node.previousNode.nextNode = node.nextNode;\n  }\n  if (defined(node.nextNode)) {\n    node.nextNode.previousNode = node.previousNode;\n  }\n\n  // make head of empty list\n  node.nextNode = this.emptyList;\n  if (defined(node.nextNode)) {\n    node.nextNode.previousNode = node;\n  }\n  node.previousNode = undefined;\n  this.emptyList = node;\n  this.occupiedCount--;\n};\n\n/**\n * @returns {boolean}\n */\nMegatexture.prototype.isFull = function () {\n  return this.emptyList === undefined;\n};\n\n/**\n * Compute a 3D texture dimension that contains the given number of tiles, or as many tiles as can fit within the available texture memory.\n * Not used outside the class, but exposed for testing.\n * @param {Cartesian3} tileDimensions The dimensions of one tile in number of voxels.\n * @param {number} bytesPerSample The number of bytes per voxel sample.\n * @param {number} availableTextureMemoryBytes An upper limit on the texture memory size in bytes.\n * @param {number} [tileCount] The total number of tiles in the tileset.\n * @returns {Cartesian3} The computed 3D texture dimensions.\n *\n * @exception {RuntimeError} The GL context does not support a 3D texture large enough to contain a tile with the given dimensions.\n * @exception {RuntimeError} Not enough texture memory available to create a megatexture with the given tile dimensions.\n * @private\n */\nMegatexture.get3DTextureDimension = function (\n  tileDimensions,\n  bytesPerSample,\n  availableTextureMemoryBytes,\n  tileCount,\n) {\n  const { maximum3DTextureSize } = ContextLimits;\n  if (Cartesian3.maximumComponent(tileDimensions) > maximum3DTextureSize) {\n    throw new RuntimeError(\n      \"The GL context does not support a 3D texture large enough to contain a tile with the given dimensions.\",\n    );\n  }\n\n  // Find the number of tiles we can fit.\n  const tileSizeInBytes =\n    bytesPerSample * tileDimensions.x * tileDimensions.y * tileDimensions.z;\n  const maxTileCount = Math.floor(\n    availableTextureMemoryBytes / tileSizeInBytes,\n  );\n  if (maxTileCount < 1) {\n    throw new RuntimeError(\n      \"Not enough texture memory available to create a megatexture with the given tile dimensions.\",\n    );\n  }\n\n  if (defined(tileCount)) {\n    tileCount = Math.min(tileCount, maxTileCount);\n  } else {\n    tileCount = maxTileCount;\n  }\n\n  // Sort the tile dimensions from largest to smallest.\n  const sortedDimensions = Object.entries(tileDimensions).sort(\n    (a, b) => b[1] - a[1],\n  );\n\n  // Compute the number of tiles that we can fit along each axis of a 3D texture,\n  // starting from the largest texture the context can support\n  const tilesPerDimension = sortedDimensions.map(([axis, dimension]) =>\n    Math.floor(maximum3DTextureSize / dimension),\n  );\n\n  // Reduce the number of tiles along each dimension until the total number of\n  // tiles is close to but not less than tileCount.\n  // Start from the dimension along which the tiles are largest, since\n  // along this dimension each removed slice will contain the most tiles.\n  for (let i = 0; i < 3; i++) {\n    const currentTileCount = getVolume(tilesPerDimension);\n    if (currentTileCount < tileCount) {\n      break;\n    }\n    const sliceDimensions = tilesPerDimension.slice();\n    sliceDimensions.splice(i, 1);\n    const tilesPerSlice = sliceDimensions[0] * sliceDimensions[1];\n    const excessTiles = currentTileCount - tileCount;\n    const slicesToRemove = Math.floor(excessTiles / tilesPerSlice);\n    tilesPerDimension[i] -= slicesToRemove;\n  }\n\n  // Make sure we are less than maximumTileCount (to fit within memory)\n  if (getVolume(tilesPerDimension) > maxTileCount) {\n    tilesPerDimension[2] = Math.floor(\n      maxTileCount / (tilesPerDimension[0] * tilesPerDimension[1]),\n    );\n  }\n\n  // Compute the final texture dimensions\n  const textureDimension = new Cartesian3();\n  for (let i = 0; i < 3; i++) {\n    const [axis, dimension] = sortedDimensions[i];\n    textureDimension[axis] = tilesPerDimension[i] * dimension;\n  }\n\n  return textureDimension;\n};\n\nfunction getVolume(dimensionsArray) {\n  return dimensionsArray.reduce((p, d) => p * d);\n}\n\n/**\n * Write an array of tile metadata to the megatexture.\n * @param {number} index The index of the tile's location in the megatexture.\n * @param {Float32Array|Uint16Array|Uint8Array} tileData The data to be written.\n */\nMegatexture.prototype.writeDataToTexture = function (index, tileData) {\n  const { tileCounts, voxelCountPerTile } = this;\n\n  const source = {\n    arrayBufferView: tileData,\n    width: voxelCountPerTile.x,\n    height: voxelCountPerTile.y,\n    depth: voxelCountPerTile.z,\n  };\n\n  const tilesPerZ = tileCounts.x * tileCounts.y;\n  const iz = Math.floor(index / tilesPerZ);\n  const remainder = index - iz * tilesPerZ;\n  const iy = Math.floor(remainder / tileCounts.x);\n  const ix = remainder - iy * tileCounts.x;\n\n  const copyOptions = {\n    source: source,\n    xOffset: ix * voxelCountPerTile.x,\n    yOffset: iy * voxelCountPerTile.y,\n    zOffset: iz * voxelCountPerTile.z,\n  };\n\n  this.texture.copyFrom(copyOptions);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Megatexture#destroy\n */\nMegatexture.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see Megatexture#isDestroyed\n *\n * @example\n * megatexture = megatexture && megatexture.destroy();\n */\nMegatexture.prototype.destroy = function () {\n  this.texture = this.texture && this.texture.destroy();\n  return destroyObject(this);\n};\n\nexport default Megatexture;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport MetadataClassProperty from \"./MetadataClassProperty.js\";\n\n/**\n * A metadata class.\n *\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata|3D Metadata Specification} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.id The ID of the class.\n * @param {string} [options.name] The name of the class.\n * @param {string} [options.description] The description of the class.\n * @param {Object<string, MetadataClassProperty>} [options.properties] The class properties, where each key is the property ID.\n * @param {*} [options.extras] Extra user-defined properties.\n * @param {object} [options.extensions] An object containing extensions.\n *\n * @alias MetadataClass\n * @constructor\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataClass(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const id = options.id;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.id\", id);\n  //>>includeEnd('debug');\n\n  const properties = options.properties ?? {};\n  const propertiesBySemantic = {};\n  for (const propertyId in properties) {\n    if (properties.hasOwnProperty(propertyId)) {\n      const property = properties[propertyId];\n      if (defined(property.semantic)) {\n        propertiesBySemantic[property.semantic] = property;\n      }\n    }\n  }\n\n  this._id = id;\n  this._name = options.name;\n  this._description = options.description;\n  this._properties = properties;\n  this._propertiesBySemantic = propertiesBySemantic;\n  this._extras = clone(options.extras, true);\n  this._extensions = clone(options.extensions, true);\n}\n\n/**\n * Creates a {@link MetadataClass} from either 3D Tiles 1.1, 3DTILES_metadata, EXT_structural_metadata, or EXT_feature_metadata.\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.id The ID of the class.\n * @param {object} options.class The class JSON object.\n * @param {Object<string, MetadataEnum>} [options.enums] A dictionary of enums.\n *\n * @returns {MetadataClass} The newly created metadata class.\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nMetadataClass.fromJson = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const id = options.id;\n  const classDefinition = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.id\", id);\n  Check.typeOf.object(\"options.class\", classDefinition);\n  //>>includeEnd('debug');\n\n  const properties = {};\n  for (const propertyId in classDefinition.properties) {\n    if (classDefinition.properties.hasOwnProperty(propertyId)) {\n      const property = MetadataClassProperty.fromJson({\n        id: propertyId,\n        property: classDefinition.properties[propertyId],\n        enums: options.enums,\n      });\n      properties[propertyId] = property;\n    }\n  }\n\n  return new MetadataClass({\n    id: id,\n    name: classDefinition.name,\n    description: classDefinition.description,\n    properties: properties,\n    extras: classDefinition.extras,\n    extensions: classDefinition.extensions,\n  });\n};\n\nObject.defineProperties(MetadataClass.prototype, {\n  /**\n   * The class properties.\n   *\n   * @memberof MetadataClass.prototype\n   * @type {Object<string, MetadataClassProperty>}\n   * @readonly\n   */\n  properties: {\n    get: function () {\n      return this._properties;\n    },\n  },\n\n  /**\n   * A dictionary mapping semantics to class properties.\n   *\n   * @memberof MetadataClass.prototype\n   * @type {Object<string, MetadataClassProperty>}\n   * @readonly\n   *\n   * @private\n   */\n  propertiesBySemantic: {\n    get: function () {\n      return this._propertiesBySemantic;\n    },\n  },\n\n  /**\n   * The ID of the class.\n   *\n   * @memberof MetadataClass.prototype\n   * @type {string}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * The name of the class.\n   *\n   * @memberof MetadataClass.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The description of the class.\n   *\n   * @memberof MetadataClass.prototype\n   * @type {string}\n   * @readonly\n   */\n  description: {\n    get: function () {\n      return this._description;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof MetadataClass.prototype\n   * @type {*}\n   * @readonly\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof MetadataClass.prototype\n   * @type {object}\n   * @readonly\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * The class name given to the metadata class when a batch\n * table is loaded from 3D Tiles 1.0 formats.\n *\n * @private\n */\nMetadataClass.BATCH_TABLE_CLASS_NAME = \"_batchTable\";\n\nexport default MetadataClass;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport MetadataComponentType, {\n  ScalarCategories,\n} from \"./MetadataComponentType.js\";\n\n/**\n * A metadata property, as part of a {@link MetadataClass}.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata|3D Metadata Specification} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.id The ID of the property.\n * @param {MetadataType} options.type The type of the property such as SCALAR, VEC2, VEC3.\n * @param {MetadataComponentType} [options.componentType] The component type of the property. This includes integer (e.g. INT8 or UINT16), and floating point (FLOAT32 and FLOAT64) values.\n * @param {MetadataEnum} [options.enumType] The enum type of the property. Only defined when type is ENUM.\n * @param {boolean} [options.isArray=false] True if a property is an array (either fixed length or variable length), false otherwise.\n * @param {boolean} [options.isVariableLengthArray=false] True if a property is a variable length array, false otherwise.\n * @param {number} [options.arrayLength] The number of array elements. Only defined for fixed length arrays.\n * @param {boolean} [options.normalized=false] Whether the property is normalized.\n * @param {number|number[]|number[][]} [options.min] A number or an array of numbers storing the minimum allowable value of this property. Only defined when type is a numeric type.\n * @param {number|number[]|number[][]} [options.max] A number or an array of numbers storing the maximum allowable value of this property. Only defined when type is a numeric type.\n * @param {number|number[]|number[][]} [options.offset] The offset to be added to property values as part of the value transform.\n * @param {number|number[]|number[][]} [options.scale] The scale to be multiplied to property values as part of the value transform.\n * @param {number|string|Array} [options.noData] The no-data sentinel value that represents null values.\n * @param {number|string|Array} [options.default] A default value to use when an entity's property value is not defined.\n * @param {boolean} [options.required=false] Whether the property is required.\n * @param {string} [options.name] The name of the property.\n * @param {string} [options.description] The description of the property.\n * @param {string} [options.semantic] An identifier that describes how this property should be interpreted.\n * @param {*} [options.extras] Extra user-defined properties.\n * @param {object} [options.extensions] An object containing extensions.\n *\n * @alias MetadataClassProperty\n * @constructor\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataClassProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const id = options.id;\n  const type = options.type;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.id\", id);\n  Check.typeOf.string(\"options.type\", type);\n  //>>includeEnd('debug');\n\n  const componentType = options.componentType;\n  const enumType = options.enumType;\n\n  const normalized =\n    defined(componentType) &&\n    (options.normalized ?? false) &&\n    MetadataComponentType.isIntegerType(componentType);\n\n  // Basic information about this property\n  this._id = id;\n  this._name = options.name;\n  this._description = options.description;\n  this._semantic = options.semantic;\n\n  // Only for unit testing purposes, not documented in the API\n  this._isLegacyExtension = options.isLegacyExtension;\n\n  // Details about basic types\n  this._type = type;\n  this._componentType = componentType;\n  this._enumType = enumType;\n  this._valueType = defined(enumType) ? enumType.valueType : componentType;\n\n  // Details about arrays\n  this._isArray = options.isArray ?? false;\n  this._isVariableLengthArray = options.isVariableLengthArray ?? false;\n  this._arrayLength = options.arrayLength;\n\n  // min and max allowed values\n  this._min = clone(options.min, true);\n  this._max = clone(options.max, true);\n\n  // properties that adjust the range of metadata values\n  this._normalized = normalized;\n\n  let offset = clone(options.offset, true);\n  let scale = clone(options.scale, true);\n  const hasValueTransform = defined(offset) || defined(scale);\n\n  const enableNestedArrays = true;\n  if (!defined(offset)) {\n    offset = this.expandConstant(0, enableNestedArrays);\n  }\n\n  if (!defined(scale)) {\n    scale = this.expandConstant(1, enableNestedArrays);\n  }\n\n  this._offset = offset;\n  this._scale = scale;\n  this._hasValueTransform = hasValueTransform;\n\n  // sentinel value for missing data, and a default value to use\n  // in its place if needed.\n  this._noData = clone(options.noData, true);\n  // For vector and array types, this is stored as an array of values.\n  this._default = clone(options.default, true);\n\n  this._required = options.required ?? true;\n\n  // extras and extensions\n  this._extras = clone(options.extras, true);\n  this._extensions = clone(options.extensions, true);\n}\n\n/**\n * Creates a {@link MetadataClassProperty} from either 3D Tiles 1.1, 3DTILES_metadata, EXT_structural_metadata, or EXT_feature_metadata.\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.id The ID of the property.\n * @param {object} options.property The property JSON object.\n * @param {Object<string, MetadataEnum>} [options.enums] A dictionary of enums.\n *\n * @returns {MetadataClassProperty} The newly created metadata class property.\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nMetadataClassProperty.fromJson = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const id = options.id;\n  const property = options.property;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.id\", id);\n  Check.typeOf.object(\"options.property\", property);\n  Check.typeOf.string(\"options.property.type\", property.type);\n  //>>includeEnd('debug');\n\n  // Try to determine if this is the legacy extension. This is not\n  // always possible, as there are some types that are valid in both\n  // extensions.\n  const isLegacyExtension = isLegacy(property);\n  const parsedType = parseType(property, options.enums);\n\n  // EXT_feature_metadata had an optional flag, while EXT_structural_metadata\n  // has a required flag. The defaults are not the same, and there's some cases\n  // like {type: BOOLEAN} that are ambiguous. Coalesce this into a single\n  // required flag\n  let required;\n  if (!defined(isLegacyExtension)) {\n    // Impossible to tell which extension was used, so don't require\n    // the property\n    required = false;\n  } else if (isLegacyExtension) {\n    required = defined(property.optional) ? !property.optional : true;\n  } else {\n    required = property.required ?? false;\n  }\n\n  return new MetadataClassProperty({\n    id: id,\n    type: parsedType.type,\n    componentType: parsedType.componentType,\n    enumType: parsedType.enumType,\n    isArray: parsedType.isArray,\n    isVariableLengthArray: parsedType.isVariableLengthArray,\n    arrayLength: parsedType.arrayLength,\n    normalized: property.normalized,\n    min: property.min,\n    max: property.max,\n    offset: property.offset,\n    scale: property.scale,\n    noData: property.noData,\n    default: property.default,\n    required: required,\n    name: property.name,\n    description: property.description,\n    semantic: property.semantic,\n    extras: property.extras,\n    extensions: property.extensions,\n    isLegacyExtension: isLegacyExtension,\n  });\n};\n\nObject.defineProperties(MetadataClassProperty.prototype, {\n  /**\n   * The ID of the property.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {string}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * The name of the property.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The description of the property.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {string}\n   * @readonly\n   */\n  description: {\n    get: function () {\n      return this._description;\n    },\n  },\n\n  /**\n   * The type of the property such as SCALAR, VEC2, VEC3\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {MetadataType}\n   * @readonly\n   */\n  type: {\n    get: function () {\n      return this._type;\n    },\n  },\n\n  /**\n   * The enum type of the property. Only defined when type is ENUM.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {MetadataEnum}\n   * @readonly\n   */\n  enumType: {\n    get: function () {\n      return this._enumType;\n    },\n  },\n\n  /**\n   * The component type of the property. This includes integer\n   * (e.g. INT8 or UINT16), and floating point (FLOAT32 and FLOAT64) values\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {MetadataComponentType}\n   * @readonly\n   */\n  componentType: {\n    get: function () {\n      return this._componentType;\n    },\n  },\n\n  /**\n   * The datatype used for storing each component of the property. This\n   * is usually the same as componentType except for ENUM, where this\n   * returns an integer type\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {MetadataComponentType}\n   * @readonly\n   * @private\n   */\n  valueType: {\n    get: function () {\n      return this._valueType;\n    },\n  },\n\n  /**\n   * True if a property is an array (either fixed length or variable length),\n   * false otherwise.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isArray: {\n    get: function () {\n      return this._isArray;\n    },\n  },\n\n  /**\n   * True if a property is a variable length array, false otherwise.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  isVariableLengthArray: {\n    get: function () {\n      return this._isVariableLengthArray;\n    },\n  },\n\n  /**\n   * The number of array elements. Only defined for fixed-size\n   * arrays.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number}\n   * @readonly\n   */\n  arrayLength: {\n    get: function () {\n      return this._arrayLength;\n    },\n  },\n\n  /**\n   * Whether the property is normalized.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  normalized: {\n    get: function () {\n      return this._normalized;\n    },\n  },\n\n  /**\n   * A number or an array of numbers storing the maximum allowable value of this property. Only defined when type is a numeric type.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|number[]|number[][]}\n   * @readonly\n   */\n  max: {\n    get: function () {\n      return this._max;\n    },\n  },\n\n  /**\n   * A number or an array of numbers storing the minimum allowable value of this property. Only defined when type is a numeric type.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|number[]|number[][]}\n   * @readonly\n   */\n  min: {\n    get: function () {\n      return this._min;\n    },\n  },\n\n  /**\n   * The no-data sentinel value that represents null values\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|string|Array}\n   * @readonly\n   */\n  noData: {\n    get: function () {\n      return this._noData;\n    },\n  },\n\n  /**\n   * A default value to use when an entity's property value is not defined.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|string|Array}\n   * @readonly\n   */\n  default: {\n    get: function () {\n      return this._default;\n    },\n  },\n\n  /**\n   * Whether the property is required.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  required: {\n    get: function () {\n      return this._required;\n    },\n  },\n\n  /**\n   * An identifier that describes how this property should be interpreted.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {string}\n   * @readonly\n   */\n  semantic: {\n    get: function () {\n      return this._semantic;\n    },\n  },\n\n  /**\n   * True if offset/scale should be applied. If both offset/scale were\n   * undefined, they default to identity so this property is set false\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  hasValueTransform: {\n    get: function () {\n      return this._hasValueTransform;\n    },\n  },\n\n  /**\n   * The offset to be added to property values as part of the value transform.\n   *\n   * This is always defined, even when `hasValueTransform` is `false`. If\n   * the class property JSON itself did not define it, then it will be\n   * initialized to the default value.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|number[]|number[][]}\n   * @readonly\n   */\n  offset: {\n    get: function () {\n      return this._offset;\n    },\n  },\n\n  /**\n   * The scale to be multiplied to property values as part of the value transform.\n   *\n   * This is always defined, even when `hasValueTransform` is `false`. If\n   * the class property JSON itself did not define it, then it will be\n   * initialized to the default value.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|number[]|number[][]}\n   * @readonly\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {*}\n   * @readonly\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {object}\n   * @readonly\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\nfunction isLegacy(property) {\n  if (property.type === \"ARRAY\") {\n    return true;\n  }\n\n  // New property types in EXT_structural_metadata\n  const type = property.type;\n  if (\n    type === MetadataType.SCALAR ||\n    MetadataType.isMatrixType(type) ||\n    MetadataType.isVectorType(type)\n  ) {\n    return false;\n  }\n\n  // EXT_feature_metadata allowed numeric types as a type. Now they are\n  // represented as {type: SINGLE, componentType: type}\n  if (defined(MetadataComponentType[type])) {\n    return true;\n  }\n\n  // New properties in EXT_structural_metadata\n  if (\n    defined(property.noData) ||\n    defined(property.scale) ||\n    defined(property.offset) ||\n    defined(property.required) ||\n    defined(property.count) ||\n    defined(property.array)\n  ) {\n    return false;\n  }\n\n  // Properties that only exist in EXT_feature_metadata\n  if (defined(property.optional)) {\n    return false;\n  }\n\n  // impossible to tell, give up.\n  return undefined;\n}\n\nfunction parseType(property, enums) {\n  const type = property.type;\n  const componentType = property.componentType;\n\n  // EXT_feature_metadata had an ARRAY type. This is now handled\n  // with array + count, so some details need to be transcoded\n  const isLegacyArray = type === \"ARRAY\";\n  let isArray;\n  let arrayLength;\n  let isVariableLengthArray;\n  if (isLegacyArray) {\n    // definitely EXT_feature_metadata\n    isArray = true;\n    arrayLength = property.componentCount;\n    isVariableLengthArray = !defined(arrayLength);\n  } else if (property.array) {\n    isArray = true;\n    arrayLength = property.count;\n    isVariableLengthArray = !defined(property.count);\n  } else {\n    // Could be either extension. Some cases are impossible to distinguish\n    // Default to a single value\n    isArray = false;\n    arrayLength = undefined;\n    isVariableLengthArray = false;\n  }\n\n  let enumType;\n  if (defined(property.enumType)) {\n    enumType = enums[property.enumType];\n  }\n\n  // In both EXT_feature_metadata and EXT_structural_metadata, ENUM appears\n  // as a type.\n  if (type === MetadataType.ENUM) {\n    return {\n      type: type,\n      componentType: undefined,\n      enumType: enumType,\n      valueType: enumType.valueType,\n      isArray: isArray,\n      isVariableLengthArray: isVariableLengthArray,\n      arrayLength: arrayLength,\n    };\n  }\n\n  // In EXT_feature_metadata, ENUM also appears as an ARRAY componentType\n  if (isLegacyArray && componentType === MetadataType.ENUM) {\n    return {\n      type: componentType,\n      componentType: undefined,\n      enumType: enumType,\n      valueType: enumType.valueType,\n      isArray: isArray,\n      isVariableLengthArray: isVariableLengthArray,\n      arrayLength: arrayLength,\n    };\n  }\n\n  // EXT_structural_metadata only: SCALAR, VECN and MATN\n  if (\n    type === MetadataType.SCALAR ||\n    MetadataType.isMatrixType(type) ||\n    MetadataType.isVectorType(type)\n  ) {\n    return {\n      type: type,\n      componentType: componentType,\n      enumType: undefined,\n      valueType: componentType,\n      isArray: isArray,\n      isVariableLengthArray: isVariableLengthArray,\n      arrayLength: arrayLength,\n    };\n  }\n\n  // In both EXT_structural_metadata and EXT_feature_metadata,\n  // BOOLEAN and STRING appear as types\n  if (type === MetadataType.BOOLEAN || type === MetadataType.STRING) {\n    return {\n      type: type,\n      componentType: undefined,\n      enumType: undefined,\n      valueType: undefined,\n      isArray: isArray,\n      isVariableLengthArray: isVariableLengthArray,\n      arrayLength: arrayLength,\n    };\n  }\n\n  // EXT_feature_metadata also allows BOOLEAN and STRING as an ARRAY\n  // componentType\n  if (\n    isLegacyArray &&\n    (componentType === MetadataType.BOOLEAN ||\n      componentType === MetadataType.STRING)\n  ) {\n    return {\n      type: componentType,\n      componentType: undefined,\n      enumType: undefined,\n      valueType: undefined,\n      isArray: isArray,\n      isVariableLengthArray: isVariableLengthArray,\n      arrayLength: arrayLength,\n    };\n  }\n\n  // Both EXT_feature_metadata and EXT_structural_metadata allow numeric types like\n  // INT32 or FLOAT64 as a componentType.\n  if (defined(componentType) && defined(MetadataComponentType[componentType])) {\n    return {\n      type: MetadataType.SCALAR,\n      componentType: componentType,\n      enumType: undefined,\n      valueType: componentType,\n      isArray: isArray,\n      isVariableLengthArray: isVariableLengthArray,\n      arrayLength: arrayLength,\n    };\n  }\n\n  // EXT_feature_metadata: integer and float types were allowed as types,\n  // but now these are expressed as {type: SCALAR, componentType: type}\n  if (defined(MetadataComponentType[type])) {\n    return {\n      type: MetadataType.SCALAR,\n      componentType: type,\n      enumType: undefined,\n      valueType: type,\n      isArray: isArray,\n      isVariableLengthArray: isVariableLengthArray,\n      arrayLength: arrayLength,\n    };\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    `unknown metadata type {type: ${type}, componentType: ${componentType})`,\n  );\n  //>>includeEnd('debug');\n}\n\n/**\n * Normalizes integer property values. If the property is not normalized\n * the value is returned unmodified.\n * <p>\n * Given the way normalization is defined in {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata#normalized-values|the 3D Metadata Specification},\n * normalize and unnormalize are almost, but not quite inverses. In particular,\n * the smallest signed integer value will be off by one after normalizing and\n * unnormalizing. See\n * {@link https://www.desmos.com/calculator/nledg1evut|this Desmos graph} for\n * an example using INT8.\n * </p>\n * <p>\n * Furthermore, for 64-bit integer types, there may be a loss of precision\n * due to conversion to Number\n * </p>\n *\n * @param {*} value The integer value or array of integer values.\n * @returns {*} The normalized value or array of normalized values.\n *\n * @private\n */\nMetadataClassProperty.prototype.normalize = function (value) {\n  if (!this._normalized) {\n    return value;\n  }\n\n  return normalizeInPlace(\n    value,\n    this._valueType,\n    MetadataComponentType.normalize,\n  );\n};\n\n/**\n * Unnormalizes integer property values. If the property is not normalized\n * the value is returned unmodified.\n * <p>\n * Given the way normalization is defined in {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata#normalized-values|the 3D Metadata Specification},\n * normalize and unnormalize are almost, but not quite inverses. In particular,\n * the smallest signed integer value will be off by one after normalizing and\n * unnormalizing. See\n * {@link https://www.desmos.com/calculator/nledg1evut|this Desmos graph} for\n * an example using INT8.\n * </p>\n * <p>\n * Furthermore, for 64-bit integer types, there may be a loss of precision\n * due to conversion to Number\n * </p>\n *\n * @param {*} value The normalized value or array of normalized values.\n * @returns {*} The integer value or array of integer values.\n *\n * @private\n */\nMetadataClassProperty.prototype.unnormalize = function (value) {\n  if (!this._normalized) {\n    return value;\n  }\n\n  return normalizeInPlace(\n    value,\n    this._valueType,\n    MetadataComponentType.unnormalize,\n  );\n};\n\n/**\n * @private\n */\nMetadataClassProperty.prototype.applyValueTransform = function (value) {\n  // variable length arrays do not have a well-defined offset/scale so this\n  // is forbidden by the spec\n  if (!this._hasValueTransform || this._isVariableLengthArray) {\n    return value;\n  }\n\n  return MetadataClassProperty.valueTransformInPlace(\n    value,\n    this._offset,\n    this._scale,\n    MetadataComponentType.applyValueTransform,\n  );\n};\n\n/**\n * @private\n */\nMetadataClassProperty.prototype.unapplyValueTransform = function (value) {\n  // variable length arrays do not have a well-defined offset/scale so this\n  // is forbidden by the spec\n  if (!this._hasValueTransform || this._isVariableLengthArray) {\n    return value;\n  }\n\n  return MetadataClassProperty.valueTransformInPlace(\n    value,\n    this._offset,\n    this._scale,\n    MetadataComponentType.unapplyValueTransform,\n  );\n};\n\n/**\n * @private\n */\nMetadataClassProperty.prototype.expandConstant = function (\n  constant,\n  enableNestedArrays,\n) {\n  enableNestedArrays = enableNestedArrays ?? false;\n  const isArray = this._isArray;\n  const arrayLength = this._arrayLength;\n  const componentCount = MetadataType.getComponentCount(this._type);\n  const isNested = isArray && componentCount > 1;\n\n  // scalar values can be returned directly\n  if (!isArray && componentCount === 1) {\n    return constant;\n  }\n\n  // vector and matrix values\n  if (!isArray) {\n    return new Array(componentCount).fill(constant);\n  }\n\n  // arrays of scalars\n  if (!isNested) {\n    return new Array(arrayLength).fill(constant);\n  }\n\n  // arrays of vectors/matrices: flattened\n  if (!enableNestedArrays) {\n    return new Array(this._arrayLength * componentCount).fill(constant);\n  }\n\n  // array of vectors/matrices: nested\n  const innerConstant = new Array(componentCount).fill(constant);\n  // This array fill duplicates the pointer to the inner arrays. Since this is\n  // intended for use with constants, no need to clone the array.\n  return new Array(this._arrayLength).fill(innerConstant);\n};\n\n/**\n * If the value is the noData sentinel, return undefined. Otherwise, return\n * the value.\n * @param {*} value The raw value\n * @returns {*} Either the value or undefined if the value was a no data value.\n *\n * @private\n */\nMetadataClassProperty.prototype.handleNoData = function (value) {\n  const sentinel = this._noData;\n  if (!defined(sentinel)) {\n    return value;\n  }\n\n  if (arrayEquals(value, sentinel)) {\n    return undefined;\n  }\n\n  return value;\n};\n\nfunction arrayEquals(left, right) {\n  if (!Array.isArray(left)) {\n    return left === right;\n  }\n\n  if (!Array.isArray(right)) {\n    return false;\n  }\n\n  if (left.length !== right.length) {\n    return false;\n  }\n\n  for (let i = 0; i < left.length; i++) {\n    if (!arrayEquals(left[i], right[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Unpack VECN values into {@link Cartesian2}, {@link Cartesian3}, or\n * {@link Cartesian4} and MATN values into {@link Matrix2}, {@link Matrix3}, or\n * {@link Matrix4} depending on N. All other values (including arrays of\n * other sizes) are passed through unaltered.\n *\n * @param {*} value the original, normalized values.\n * @param {boolean} [enableNestedArrays=false] If true, arrays of vectors are represented as nested arrays. This is used for JSON encoding but not binary encoding\n * @returns {*} The appropriate vector or matrix type if the value is a vector or matrix type, respectively. If the property is an array of vectors or matrices, an array of the appropriate vector or matrix type is returned. Otherwise, the value is returned unaltered.\n * @private\n */\nMetadataClassProperty.prototype.unpackVectorAndMatrixTypes = function (\n  value,\n  enableNestedArrays,\n) {\n  enableNestedArrays = enableNestedArrays ?? false;\n  const MathType = MetadataType.getMathType(this._type);\n  const isArray = this._isArray;\n  const componentCount = MetadataType.getComponentCount(this._type);\n  const isNested = isArray && componentCount > 1;\n\n  if (!defined(MathType)) {\n    return value;\n  }\n\n  if (enableNestedArrays && isNested) {\n    return value.map(function (x) {\n      return MathType.unpack(x);\n    });\n  }\n\n  if (isArray) {\n    return MathType.unpackArray(value);\n  }\n\n  return MathType.unpack(value);\n};\n\n/**\n * Pack a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} into an\n * array if this property is an <code>VECN</code>.\n * Pack a {@link Matrix2}, {@link Matrix3}, or {@link Matrix4} into an\n * array if this property is an <code>MATN</code>.\n * All other values (including arrays of other sizes) are passed through unaltered.\n *\n * @param {*} value The value of this property\n * @param {boolean} [enableNestedArrays=false] If true, arrays of vectors are represented as nested arrays. This is used for JSON encoding but not binary encoding\n * @returns {*} An array of the appropriate length if the property is a vector or matrix type. Otherwise, the value is returned unaltered.\n * @private\n */\nMetadataClassProperty.prototype.packVectorAndMatrixTypes = function (\n  value,\n  enableNestedArrays,\n) {\n  enableNestedArrays = enableNestedArrays ?? false;\n  const MathType = MetadataType.getMathType(this._type);\n  const isArray = this._isArray;\n  const componentCount = MetadataType.getComponentCount(this._type);\n  const isNested = isArray && componentCount > 1;\n\n  if (!defined(MathType)) {\n    return value;\n  }\n\n  if (enableNestedArrays && isNested) {\n    return value.map(function (x) {\n      return MathType.pack(x, []);\n    });\n  }\n\n  if (isArray) {\n    return MathType.packArray(value, []);\n  }\n\n  return MathType.pack(value, []);\n};\n\n/**\n * Validates whether the given value conforms to the property.\n *\n * @param {*} value The value.\n * @returns {string|undefined} An error message if the value does not conform to the property, otherwise undefined.\n * @private\n */\nMetadataClassProperty.prototype.validate = function (value) {\n  if (!defined(value) && defined(this._default)) {\n    // no value, but we have a default to use.\n    return undefined;\n  }\n\n  if (this._required && !defined(value)) {\n    return `required property must have a value`;\n  }\n\n  if (this._isArray) {\n    return validateArray(this, value);\n  }\n\n  return validateSingleValue(this, value);\n};\n\nfunction validateArray(classProperty, value) {\n  if (!Array.isArray(value)) {\n    return `value ${value} must be an array`;\n  }\n\n  const length = value.length;\n  if (\n    !classProperty._isVariableLengthArray &&\n    length !== classProperty._arrayLength\n  ) {\n    return \"Array length does not match property.arrayLength\";\n  }\n\n  for (let i = 0; i < length; i++) {\n    const message = validateSingleValue(classProperty, value[i]);\n    if (defined(message)) {\n      return message;\n    }\n  }\n}\n\nfunction validateSingleValue(classProperty, value) {\n  const type = classProperty._type;\n  const componentType = classProperty._componentType;\n  const enumType = classProperty._enumType;\n  const normalized = classProperty._normalized;\n\n  if (MetadataType.isVectorType(type)) {\n    return validateVector(value, type, componentType);\n  } else if (MetadataType.isMatrixType(type)) {\n    return validateMatrix(value, type, componentType);\n  } else if (type === MetadataType.STRING) {\n    return validateString(value);\n  } else if (type === MetadataType.BOOLEAN) {\n    return validateBoolean(value);\n  } else if (type === MetadataType.ENUM) {\n    return validateEnum(value, enumType);\n  }\n\n  return validateScalar(value, componentType, normalized);\n}\n\nfunction validateVector(value, type, componentType) {\n  if (!MetadataComponentType.isVectorCompatible(componentType)) {\n    return `componentType ${componentType} is incompatible with vector type ${type}`;\n  }\n\n  if (type === MetadataType.VEC2 && !(value instanceof Cartesian2)) {\n    return `vector value ${value} must be a Cartesian2`;\n  }\n\n  if (type === MetadataType.VEC3 && !(value instanceof Cartesian3)) {\n    return `vector value ${value} must be a Cartesian3`;\n  }\n\n  if (type === MetadataType.VEC4 && !(value instanceof Cartesian4)) {\n    return `vector value ${value} must be a Cartesian4`;\n  }\n}\n\nfunction validateMatrix(value, type, componentType) {\n  if (!MetadataComponentType.isVectorCompatible(componentType)) {\n    return `componentType ${componentType} is incompatible with matrix type ${type}`;\n  }\n\n  if (type === MetadataType.MAT2 && !(value instanceof Matrix2)) {\n    return `matrix value ${value} must be a Matrix2`;\n  }\n\n  if (type === MetadataType.MAT3 && !(value instanceof Matrix3)) {\n    return `matrix value ${value} must be a Matrix3`;\n  }\n\n  if (type === MetadataType.MAT4 && !(value instanceof Matrix4)) {\n    return `matrix value ${value} must be a Matrix4`;\n  }\n}\n\nfunction validateString(value) {\n  if (typeof value !== \"string\") {\n    return getTypeErrorMessage(value, MetadataType.STRING);\n  }\n}\n\nfunction validateBoolean(value) {\n  if (typeof value !== \"boolean\") {\n    return getTypeErrorMessage(value, MetadataType.BOOLEAN);\n  }\n}\n\nfunction validateEnum(value, enumType) {\n  const javascriptType = typeof value;\n  if (defined(enumType)) {\n    if (javascriptType !== \"string\" || !defined(enumType.valuesByName[value])) {\n      return `value ${value} is not a valid enum name for ${enumType.id}`;\n    }\n    return;\n  }\n}\n\nfunction validateScalar(value, componentType, normalized) {\n  const javascriptType = typeof value;\n\n  switch (componentType) {\n    case MetadataComponentType.INT8:\n    case MetadataComponentType.UINT8:\n    case MetadataComponentType.INT16:\n    case MetadataComponentType.UINT16:\n    case MetadataComponentType.INT32:\n    case MetadataComponentType.UINT32:\n    case MetadataComponentType.FLOAT32:\n    case MetadataComponentType.FLOAT64:\n      if (javascriptType !== \"number\") {\n        return getTypeErrorMessage(value, componentType);\n      }\n      if (!isFinite(value)) {\n        return getNonFiniteErrorMessage(value, componentType);\n      }\n      return checkInRange(value, componentType, normalized);\n    case MetadataComponentType.INT64:\n    case MetadataComponentType.UINT64:\n      if (javascriptType !== \"number\" && javascriptType !== \"bigint\") {\n        return getTypeErrorMessage(value, componentType);\n      }\n      if (javascriptType === \"number\" && !isFinite(value)) {\n        return getNonFiniteErrorMessage(value, componentType);\n      }\n      return checkInRange(value, componentType, normalized);\n  }\n}\n\nfunction getTypeErrorMessage(value, type) {\n  return `value ${value} does not match type ${type}`;\n}\n\nfunction getOutOfRangeErrorMessage(value, type, normalized) {\n  let errorMessage = `value ${value} is out of range for type ${type}`;\n  if (normalized) {\n    errorMessage += \" (normalized)\";\n  }\n  return errorMessage;\n}\n\nfunction checkInRange(value, componentType, normalized) {\n  if (normalized) {\n    const min = MetadataComponentType.isUnsignedIntegerType(componentType)\n      ? 0.0\n      : -1.0;\n    const max = 1.0;\n    if (value < min || value > max) {\n      return getOutOfRangeErrorMessage(value, componentType, normalized);\n    }\n    return;\n  }\n\n  if (\n    value < MetadataComponentType.getMinimum(componentType) ||\n    value > MetadataComponentType.getMaximum(componentType)\n  ) {\n    return getOutOfRangeErrorMessage(value, componentType, normalized);\n  }\n}\n\nfunction getNonFiniteErrorMessage(value, type) {\n  return `value ${value} of type ${type} must be finite`;\n}\n\nfunction normalizeInPlace(values, valueType, normalizeFunction) {\n  if (!Array.isArray(values)) {\n    return normalizeFunction(values, valueType);\n  }\n\n  for (let i = 0; i < values.length; i++) {\n    values[i] = normalizeInPlace(values[i], valueType, normalizeFunction);\n  }\n\n  return values;\n}\n\n/**\n * Applies the value transform that is defined with the given offsets\n * and scales to the given values.\n *\n * If the given values are not an array, then the given transformation\n * function will be applied directly.\n *\n * If the values are an array, then this function will be called recursively\n * with the array elements, boiling down to a component-wise application\n * of the transformation function to the innermost array elements.\n *\n * @param {number|number[]|number[][]} values The input values\n * @param {number|number[]|number[][]} offsets The offsets\n * @param {number|number[]|number[][]} scales The scales\n * @param {Function} transformationFunction The function with the signature\n * `(value:number, offset:number, scale:number) : number` that will be\n * applied to the innermost elements\n * @returns The input values (or the result of applying the transformation\n * function to a single value if the values have not been an array).\n * @private\n */\nMetadataClassProperty.valueTransformInPlace = function (\n  values,\n  offsets,\n  scales,\n  transformationFunction,\n) {\n  if (!Array.isArray(values)) {\n    // transform a single value\n    return transformationFunction(values, offsets, scales);\n  }\n\n  for (let i = 0; i < values.length; i++) {\n    // offsets and scales must be the same array shape as values.\n    values[i] = MetadataClassProperty.valueTransformInPlace(\n      values[i],\n      offsets[i],\n      scales[i],\n      transformationFunction,\n    );\n  }\n\n  return values;\n};\n\n/**\n * Determines the byte size of a single property element.\n * For example, if the metadata type is VEC3 and the component type is FLOAT32, this would return 12 bytes.\n *\n * @returns {number} The byte size of a single property element.\n *\n * @private\n */\nMetadataClassProperty.prototype.bytesPerElement = function () {\n  const type = this.type;\n  const valueType = this.valueType;\n  const componentCount = MetadataType.getComponentCount(type);\n  const arrayLength = this.isArray ? this.arrayLength : 1;\n  const bytesPerComponent = MetadataComponentType.getSizeInBytes(valueType);\n  return componentCount * arrayLength * bytesPerComponent;\n};\n\n/**\n * Determines whether this property can be stored in a texture, given the property's datatype and the number of\n * texture channels dedicated property value.\n *\n * @param {Number} channelsLength The number of texture channels to pack each property value into\n * @returns {boolean} true if the property can be stored in a texture with the given number of channels, false otherwise\n *\n * @private\n */\nMetadataClassProperty.prototype.isGpuCompatible = function (channelsLength) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(channelsLength) || channelsLength <= 0) {\n    throw new DeveloperError(\"channelsLength must be a positive number.\");\n  }\n  //>>includeEnd('debug');\n\n  const type = this.type;\n\n  if (this.isVariableLengthArray) {\n    return false;\n  }\n\n  if (type === MetadataType.STRING) {\n    return false;\n  }\n\n  // For the time being, boolean properties are not considered GPU compatible, because they are\n  // packed as bitstreams and the texture-unpacking logic does not currently support this.\n  if (type === MetadataType.BOOLEAN) {\n    return false;\n  }\n\n  // For all other properties, make sure the components fit in the sampled channels.\n  // (Note that it's possible to treat 64-bit types as two 32-bit components, but for now that's not supported)\n  const elementSizeInBytes = this.bytesPerElement();\n  if (elementSizeInBytes > channelsLength) {\n    return false;\n  }\n\n  return true;\n};\n\nconst floatTypesByComponentCount = [undefined, \"float\", \"vec2\", \"vec3\", \"vec4\"];\n\nconst integerTypesByComponentCount = [\n  undefined,\n  \"int\",\n  \"ivec2\",\n  \"ivec3\",\n  \"ivec4\",\n];\n\nconst unsignedIntegerTypesByComponentCount = [\n  undefined,\n  \"uint\",\n  \"uvec2\",\n  \"uvec3\",\n  \"uvec4\",\n];\n\n// Map from scalar component type to the GLSL function used to reinterpret from uint bits to the scalar type\nconst uintBitsToScalarType = {\n  [ScalarCategories.FLOAT]: \"uintBitsToFloat\",\n  [ScalarCategories.INTEGER]: \"int\",\n  [ScalarCategories.UNSIGNED_INTEGER]: \"\",\n};\n\nMetadataClassProperty.prototype.getGlslTypeWebGL1 = function () {\n  let componentCount = MetadataType.getComponentCount(this.type);\n  if (this.isArray) {\n    // fixed-sized arrays of length 2-4 UINT8s are represented as vectors as the\n    // shader since those are more useful in GLSL.\n    componentCount = this.arrayLength;\n  }\n\n  // Normalized UINT8 properties are float types in the shader\n  if (this.normalized) {\n    return floatTypesByComponentCount[componentCount];\n  }\n\n  // other UINT8-based properties are represented as integer types.\n  return integerTypesByComponentCount[componentCount];\n};\n\nMetadataClassProperty.prototype.getGlslType = function () {\n  const valueType = this.valueType;\n\n  let componentCount = MetadataType.getComponentCount(this.type);\n  const arrayLength = this.isArray ? this.arrayLength : 1;\n  componentCount *= arrayLength;\n\n  // Normalized fields are integers represented as float types ([0, 1] or [-1, 1] depending if signed)\n  if (!MetadataComponentType.isIntegerType(valueType) || this.normalized) {\n    return floatTypesByComponentCount[componentCount];\n  }\n\n  if (MetadataComponentType.isUnsignedIntegerType(valueType)) {\n    return unsignedIntegerTypesByComponentCount[componentCount];\n  }\n\n  return integerTypesByComponentCount[componentCount];\n};\n\nMetadataClassProperty.prototype.unpackTextureInShader = function (\n  sampledTextureExpression,\n  channelsString,\n  metadataVariableName,\n  shaderLines,\n) {\n  const glslType = this.getGlslType();\n  const valueType = this.valueType;\n  const numChannels = channelsString.length;\n  const type = this.type;\n\n  // Calculate total number of components\n  // (e.g. a length-2 fixed-sized array of VEC2 has 4 components - isGpuCompatible checks this fits in the channels)\n  const componentCount =\n    MetadataType.getComponentCount(type) *\n    (this.isArray ? this.arrayLength : 1);\n  const channelsPerComponent = Math.floor(numChannels / componentCount);\n\n  const rawChannelsName = `${metadataVariableName}_rawChannels`;\n  const rawBitsName = `${metadataVariableName}_rawBits`;\n  const unpackedValueName = `${metadataVariableName}_unpackedValue`;\n\n  const declareUnpackedValueLine = `${glslType} ${unpackedValueName};`;\n  const declareRawBitsLine = `uint ${rawBitsName};`;\n  shaderLines.push(declareUnpackedValueLine);\n  shaderLines.push(declareRawBitsLine);\n\n  // Sample all (specified) channels of the texture\n  const assignRawValuesLine = `${floatTypesByComponentCount[numChannels]} ${rawChannelsName} = ${sampledTextureExpression};`;\n  shaderLines.push(assignRawValuesLine);\n\n  const castFunction =\n    uintBitsToScalarType[MetadataComponentType.category(valueType)];\n  const hasMultipleComponents = componentCount > 1;\n\n  // Unpack each component of the output property from the raw channel values\n  // E.g. if the output type is a vec2, and 4 channels are given, unpack x from `rg` and y from `ba`\n  for (let i = 0; i < componentCount; i++) {\n    const channelSlice = \"rgba\".slice(\n      i * channelsPerComponent,\n      (i + 1) * channelsPerComponent,\n    );\n    const subChannels = numChannels > 1 ? `.${channelSlice}` : \"\";\n    const assignRawBitsLine = `${rawBitsName} = czm_unpackTexture(${rawChannelsName}${subChannels});`;\n\n    let indexExpression = \"\";\n    if (hasMultipleComponents) {\n      indexExpression = `[${i}]`;\n    }\n\n    let normalize = \"\";\n    let toFloatIfNormalize = \"\";\n    if (this.normalized) {\n      const maxValue = MetadataComponentType.getMaximum(valueType);\n      normalize = ` * ${1.0 / Number(maxValue)}`;\n      toFloatIfNormalize = \"float\";\n    }\n\n    const assignUnpackedValueLine = `${unpackedValueName}${indexExpression} = ${toFloatIfNormalize}(${castFunction}(${rawBitsName}))${normalize};`;\n\n    shaderLines.push(assignRawBitsLine);\n    shaderLines.push(assignUnpackedValueLine);\n  }\n\n  return unpackedValueName;\n};\n\n// In WebGL 1, we limit property texture support to UINT8 properties.\nMetadataClassProperty.prototype.unpackTextureInShaderWebGL1 = function (\n  sampledTextureExpression,\n) {\n  // no unpacking needed if for normalized types\n  if (this.normalized) {\n    return sampledTextureExpression;\n  }\n\n  // integer types are read from the texture as normalized float values.\n  // these need to be rescaled to [0, 255] and cast to the appropriate integer\n  // type.\n  const glslType = this.getGlslTypeWebGL1();\n  return `${glslType}(255.0 * ${sampledTextureExpression})`;\n};\n\nexport default MetadataClassProperty;\n","import CesiumMath from \"../Core/Math.js\";\nimport Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * An enum of metadata component types.\n *\n * @enum {string}\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst MetadataComponentType = {\n  /**\n   * An 8-bit signed integer\n   *\n   * @type {string}\n   * @constant\n   */\n  INT8: \"INT8\",\n  /**\n   * An 8-bit unsigned integer\n   *\n   * @type {string}\n   * @constant\n   */\n  UINT8: \"UINT8\",\n  /**\n   * A 16-bit signed integer\n   *\n   * @type {string}\n   * @constant\n   */\n  INT16: \"INT16\",\n  /**\n   * A 16-bit unsigned integer\n   *\n   * @type {string}\n   * @constant\n   */\n  UINT16: \"UINT16\",\n  /**\n   * A 32-bit signed integer\n   *\n   * @type {string}\n   * @constant\n   */\n  INT32: \"INT32\",\n  /**\n   * A 32-bit unsigned integer\n   *\n   * @type {string}\n   * @constant\n   */\n  UINT32: \"UINT32\",\n  /**\n   * A 64-bit signed integer.\n   *\n   * @type {string}\n   * @constant\n   */\n  INT64: \"INT64\",\n  /**\n   * A 64-bit signed integer.\n   *\n   * @type {string}\n   * @constant\n   */\n  UINT64: \"UINT64\",\n  /**\n   * A 32-bit (single precision) floating point number\n   *\n   * @type {string}\n   * @constant\n   */\n  FLOAT32: \"FLOAT32\",\n  /**\n   * A 64-bit (double precision) floating point number\n   *\n   * @type {string}\n   * @constant\n   */\n  FLOAT64: \"FLOAT64\",\n};\n\nexport const ScalarCategories = {\n  INTEGER: \"int\",\n  UNSIGNED_INTEGER: \"uint\",\n  FLOAT: \"float\",\n};\n\nMetadataComponentType.typeInfo = {\n  INT8: {\n    vectorCompatible: true,\n    size: 1,\n    maximumValue: 127,\n    minimumValue: -128,\n    category: ScalarCategories.INTEGER,\n  },\n  UINT8: {\n    vectorCompatible: true,\n    size: 1,\n    maximumValue: 255,\n    minimumValue: 0,\n    category: ScalarCategories.UNSIGNED_INTEGER,\n  },\n  INT16: {\n    vectorCompatible: true,\n    size: 2,\n    maximumValue: 32767,\n    minimumValue: -32768,\n    category: ScalarCategories.INTEGER,\n  },\n  UINT16: {\n    vectorCompatible: true,\n    size: 2,\n    maximumValue: 65535,\n    minimumValue: 0,\n    category: ScalarCategories.UNSIGNED_INTEGER,\n  },\n  INT32: {\n    vectorCompatible: true,\n    size: 4,\n    maximumValue: 2147483647,\n    minimumValue: -2147483648,\n    category: ScalarCategories.INTEGER,\n  },\n  UINT32: {\n    vectorCompatible: true,\n    size: 4,\n    maximumValue: 4294967295,\n    minimumValue: 0,\n    category: ScalarCategories.UNSIGNED_INTEGER,\n  },\n  INT64: {\n    vectorCompatible: false,\n    size: 8,\n    maximumValue: BigInt(\"9223372036854775807\"),\n    minimumValue: BigInt(\"-9223372036854775808\"),\n    category: ScalarCategories.INTEGER,\n  },\n  UINT64: {\n    vectorCompatible: false,\n    size: 8,\n    maximumValue: BigInt(\"18446744073709551615\"),\n    minimumValue: BigInt(0),\n    category: ScalarCategories.UNSIGNED_INTEGER,\n  },\n  FLOAT32: {\n    vectorCompatible: true,\n    size: 4,\n    maximumValue: 340282346638528859811704183484516925440.0,\n    minimumValue: -340282346638528859811704183484516925440.0,\n    category: ScalarCategories.FLOAT,\n  },\n  FLOAT64: {\n    vectorCompatible: true,\n    size: 8,\n    maximumValue: Number.MAX_VALUE,\n    minimumValue: -Number.MAX_VALUE,\n    category: ScalarCategories.FLOAT,\n  },\n};\n\n/**\n * Gets the minimum value for the numeric type.\n * <p>\n * Returns a BigInt for the INT64 and UINT64 types.\n * </p>\n *\n * @param {MetadataComponentType} type The type.\n * @returns {number|bigint} The minimum value.\n *\n * @private\n */\nMetadataComponentType.getMinimum = function (type) {\n  const typeInfo = MetadataComponentType.typeInfo[type];\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(typeInfo)) {\n    throw new DeveloperError(`Invalid MetadataComponentType: ${type}`);\n  }\n  //>>includeEnd('debug');\n\n  return typeInfo.minimumValue;\n};\n\n/**\n * Gets the maximum value for the numeric type.\n * <p>\n * Returns a BigInt for the INT64 and UINT64 types.\n * </p>\n *\n * @param {MetadataComponentType} type The type.\n * @returns {number|bigint} The maximum value.\n *\n * @private\n */\nMetadataComponentType.getMaximum = function (type) {\n  const typeInfo = MetadataComponentType.typeInfo[type];\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(typeInfo)) {\n    throw new DeveloperError(`Invalid MetadataComponentType: ${type}`);\n  }\n  //>>includeEnd('debug');\n\n  return typeInfo.maximumValue;\n};\n\n/**\n * Returns whether the type is an integer type.\n *\n * @param {MetadataComponentType} type The type.\n * @returns {boolean} Whether the type is an integer type.\n *\n * @private\n */\nMetadataComponentType.isIntegerType = function (type) {\n  const typeInfo = MetadataComponentType.typeInfo[type];\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(typeInfo)) {\n    throw new DeveloperError(`Invalid MetadataComponentType: ${type}`);\n  }\n  //>>includeEnd('debug');\n\n  return typeInfo.category !== ScalarCategories.FLOAT;\n};\n\n/**\n * Returns whether the type is an unsigned integer type.\n *\n * @param {MetadataComponentType} type The type.\n * @returns {boolean} Whether the type is an unsigned integer type.\n *\n * @private\n */\nMetadataComponentType.isUnsignedIntegerType = function (type) {\n  const typeInfo = MetadataComponentType.typeInfo[type];\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(typeInfo)) {\n    throw new DeveloperError(`Invalid MetadataComponentType: ${type}`);\n  }\n  //>>includeEnd('debug');\n\n  return typeInfo.category === ScalarCategories.UNSIGNED_INTEGER;\n};\n\n/**\n * Returns whether a type can be used in a vector, i.e. the {@link Cartesian2},\n * {@link Cartesian3}, or {@link Cartesian4} classes. This includes all numeric\n * types except for types requiring 64-bit integers\n * @param {MetadataComponentType} type The type to check\n * @return {boolean} <code>true</code> if the type can be encoded as a vector type, or <code>false</code> otherwise\n * @private\n */\nMetadataComponentType.isVectorCompatible = function (type) {\n  const typeInfo = MetadataComponentType.typeInfo[type];\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(typeInfo)) {\n    throw new DeveloperError(`Invalid MetadataComponentType: ${type}`);\n  }\n  //>>includeEnd('debug');\n\n  return typeInfo.vectorCompatible;\n};\n\n/**\n * Gets the category of the numeric type (signed integer, unsigned integer, or float).\n * @param {MetadataComponentType} type The type.\n * @returns {ScalarCategories} The category.\n */\nMetadataComponentType.category = function (type) {\n  const typeInfo = MetadataComponentType.typeInfo[type];\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(typeInfo)) {\n    throw new DeveloperError(`Invalid MetadataComponentType: ${type}`);\n  }\n  //>>includeEnd('debug');\n\n  return typeInfo.category;\n};\n\n/**\n * Normalizes signed integers to the range [-1.0, 1.0] and unsigned integers to\n * the range [0.0, 1.0].\n * <p>\n * The value may be a BigInt for the INT64 and UINT64 types. The value is converted\n * to a 64-bit floating point number during normalization which may result in\n * small precision differences.\n * </p>\n *\n * @param {number|bigint} value The integer value.\n * @param {MetadataComponentType} type The type.\n * @returns {number} The normalized value.\n *\n * @exception {DeveloperError} value must be a number or a BigInt\n * @exception {DeveloperError} type must be an integer type\n *\n * @private\n */\nMetadataComponentType.normalize = function (value, type) {\n  //>>includeStart('debug', pragmas.debug);\n  if (typeof value !== \"number\" && typeof value !== \"bigint\") {\n    throw new DeveloperError(\"value must be a number or a BigInt\");\n  }\n  if (!MetadataComponentType.isIntegerType(type)) {\n    throw new DeveloperError(\"type must be an integer type\");\n  }\n  //>>includeEnd('debug');\n\n  return Math.max(\n    Number(value) / Number(MetadataComponentType.getMaximum(type)),\n    -1.0,\n  );\n};\n\n/**\n * Unnormalizes signed numbers in the range [-1.0, 1.0] to signed integers and\n * unsigned numbers in the range [0.0, 1.0] to unsigned integers. Values outside\n * the range are clamped to the range.\n * <p>\n * Returns a BigInt for the INT64 and UINT64 types if BigInt is supported on this platform.\n * </p>\n *\n * @param {number} value The normalized value.\n * @param {MetadataComponentType} type The type.\n * @returns {number|bigint} The integer value.\n *\n * @exception {DeveloperError} type must be an integer type\n *\n * @private\n */\nMetadataComponentType.unnormalize = function (value, type) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"value\", value);\n  if (!MetadataComponentType.isIntegerType(type)) {\n    throw new DeveloperError(\"type must be an integer type\");\n  }\n  //>>includeEnd('debug');\n\n  const max = MetadataComponentType.getMaximum(type);\n  const min = MetadataComponentType.isUnsignedIntegerType(type) ? 0 : -max;\n\n  value = CesiumMath.sign(value) * Math.round(Math.abs(value) * Number(max));\n\n  if (\n    (type === MetadataComponentType.INT64 ||\n      type === MetadataComponentType.UINT64) &&\n    FeatureDetection.supportsBigInt()\n  ) {\n    value = BigInt(value);\n  }\n\n  if (value > max) {\n    return max;\n  }\n\n  if (value < min) {\n    return min;\n  }\n\n  return value;\n};\n\n/**\n * @private\n */\nMetadataComponentType.applyValueTransform = function (value, offset, scale) {\n  return scale * value + offset;\n};\n\n/**\n * @private\n */\nMetadataComponentType.unapplyValueTransform = function (value, offset, scale) {\n  // if the scale is 0, avoid a divide by zero error. The result can be any\n  // finite number, so 0.0 will do nicely.\n  if (scale === 0) {\n    return 0.0;\n  }\n\n  return (value - offset) / scale;\n};\n\n/**\n * Gets the size in bytes for the numeric type.\n *\n * @param {MetadataComponentType} type The type.\n * @returns {number} The size in bytes.\n *\n * @private\n */\nMetadataComponentType.getSizeInBytes = function (type) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  //>>includeEnd('debug');\n\n  return MetadataComponentType.typeInfo[type].size;\n};\n\n/**\n * Gets the {@link MetadataComponentType} from a {@link ComponentDatatype}.\n *\n * @param {ComponentDatatype} componentDatatype The component datatype.\n * @returns {MetadataComponentType} The type.\n *\n * @private\n */\nMetadataComponentType.fromComponentDatatype = function (componentDatatype) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"componentDatatype\", componentDatatype);\n  //>>includeEnd('debug');\n\n  switch (componentDatatype) {\n    case ComponentDatatype.BYTE:\n      return MetadataComponentType.INT8;\n    case ComponentDatatype.UNSIGNED_BYTE:\n      return MetadataComponentType.UINT8;\n    case ComponentDatatype.SHORT:\n      return MetadataComponentType.INT16;\n    case ComponentDatatype.UNSIGNED_SHORT:\n      return MetadataComponentType.UINT16;\n    case ComponentDatatype.INT:\n      return MetadataComponentType.INT32;\n    case ComponentDatatype.UNSIGNED_INT:\n      return MetadataComponentType.UINT32;\n    case ComponentDatatype.FLOAT:\n      return MetadataComponentType.FLOAT32;\n    case ComponentDatatype.DOUBLE:\n      return MetadataComponentType.FLOAT64;\n  }\n};\n\n/**\n * Gets the {@link ComponentDatatype} from a {@link MetadataComponentType}.\n *\n * @param {MetadataComponentType} type The type.\n * @returns {ComponentDatatype} The component datatype.\n *\n * @private\n */\nMetadataComponentType.toComponentDatatype = function (type) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  //>>includeEnd('debug');\n\n  switch (type) {\n    case MetadataComponentType.INT8:\n      return ComponentDatatype.BYTE;\n    case MetadataComponentType.UINT8:\n      return ComponentDatatype.UNSIGNED_BYTE;\n    case MetadataComponentType.INT16:\n      return ComponentDatatype.SHORT;\n    case MetadataComponentType.UINT16:\n      return ComponentDatatype.UNSIGNED_SHORT;\n    case MetadataComponentType.INT32:\n      return ComponentDatatype.INT;\n    case MetadataComponentType.UINT32:\n      return ComponentDatatype.UNSIGNED_INT;\n    case MetadataComponentType.FLOAT32:\n      return ComponentDatatype.FLOAT;\n    case MetadataComponentType.FLOAT64:\n      return ComponentDatatype.DOUBLE;\n  }\n};\n\n/**\n * Gets a function for setting values of the given component type on a DataView.\n *\n * @param {DataView} view The DataView.\n * @param {MetadataComponentType} componentType The component type.\n * @returns {Function} The setter function.\n *\n * @private\n */\nMetadataComponentType.getDataViewSetter = function (view, componentType) {\n  const setters = {\n    [MetadataComponentType.UINT8]: view.setUint8.bind(view),\n    [MetadataComponentType.INT8]: view.setInt8.bind(view),\n    [MetadataComponentType.UINT16]: (offset, value) =>\n      view.setUint16(offset, value, true /* little-endian */),\n    [MetadataComponentType.INT16]: (offset, value) =>\n      view.setInt16(offset, value, true),\n    [MetadataComponentType.UINT32]: (offset, value) =>\n      view.setUint32(offset, value, true),\n    [MetadataComponentType.INT32]: (offset, value) =>\n      view.setInt32(offset, value, true),\n    [MetadataComponentType.FLOAT32]: (offset, value) =>\n      view.setFloat32(offset, value, true),\n    [MetadataComponentType.FLOAT64]: (offset, value) =>\n      view.setFloat64(offset, value, true),\n    [MetadataComponentType.UINT64]: (offset, value) =>\n      view.setBigUint64(offset, BigInt(value), true),\n    [MetadataComponentType.INT64]: (offset, value) =>\n      view.setBigInt64(offset, BigInt(value), true),\n  };\n\n  return setters[componentType];\n};\n\nexport default Object.freeze(MetadataComponentType);\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * An entity containing metadata.\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles\n * </p>\n *\n * @alias MetadataEntity\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataEntity() {}\n\nObject.defineProperties(MetadataEntity.prototype, {\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof MetadataEntity.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    // eslint-disable-next-line getter-return\n    get: function () {\n      DeveloperError.throwInstantiationError();\n    },\n  },\n});\n\n/**\n * Returns whether the entity has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the entity has this property.\n * @private\n */\nMetadataEntity.prototype.hasProperty = function (propertyId) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns whether the entity has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the entity has a property with the given semantic.\n * @private\n */\nMetadataEntity.prototype.hasPropertyBySemantic = function (semantic) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nMetadataEntity.prototype.getPropertyIds = function (results) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the entity does not have this property.\n * @private\n */\nMetadataEntity.prototype.getProperty = function (propertyId) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nMetadataEntity.prototype.setProperty = function (propertyId, value) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the entity does not have this property.\n * @private\n */\nMetadataEntity.prototype.getPropertyBySemantic = function (semantic) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nMetadataEntity.prototype.setPropertyBySemantic = function (semantic, value) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns whether the entity has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {object} properties The dictionary containing properties.\n * @param {MetadataClass} classDefinition The class.\n * @returns {boolean} Whether the entity has this property.\n *\n * @private\n */\nMetadataEntity.hasProperty = function (\n  propertyId,\n  properties,\n  classDefinition,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  Check.typeOf.object(\"properties\", properties);\n  Check.typeOf.object(\"classDefinition\", classDefinition);\n  //>>includeEnd('debug');\n\n  if (defined(properties[propertyId])) {\n    return true;\n  }\n\n  const classProperties = classDefinition.properties;\n  if (!defined(classProperties)) {\n    return false;\n  }\n\n  const classProperty = classProperties[propertyId];\n  if (defined(classProperty) && defined(classProperty.default)) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Returns whether the entity has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {object} properties The dictionary containing properties.\n * @param {MetadataClass} classDefinition The class.\n * @returns {boolean} Whether the entity has a property with the given semantic.\n *\n * @private\n */\nMetadataEntity.hasPropertyBySemantic = function (\n  semantic,\n  properties,\n  classDefinition,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  Check.typeOf.object(\"properties\", properties);\n  Check.typeOf.object(\"classDefinition\", classDefinition);\n  //>>includeEnd('debug');\n\n  const propertiesBySemantic = classDefinition.propertiesBySemantic;\n  if (!defined(propertiesBySemantic)) {\n    return false;\n  }\n\n  const property = propertiesBySemantic[semantic];\n  return defined(property);\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {object} properties The dictionary containing properties.\n * @param {MetadataClass} classDefinition The class.\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n *\n * @private\n */\nMetadataEntity.getPropertyIds = function (\n  properties,\n  classDefinition,\n  results,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"properties\", properties);\n  Check.typeOf.object(\"classDefinition\", classDefinition);\n  //>>includeEnd('debug');\n\n  results = defined(results) ? results : [];\n  results.length = 0;\n\n  // Add entity properties\n  for (const propertyId in properties) {\n    if (\n      properties.hasOwnProperty(propertyId) &&\n      defined(properties[propertyId])\n    ) {\n      results.push(propertyId);\n    }\n  }\n\n  // Add default properties\n  const classProperties = classDefinition.properties;\n  if (defined(classProperties)) {\n    for (const classPropertyId in classProperties) {\n      if (\n        classProperties.hasOwnProperty(classPropertyId) &&\n        !defined(properties[classPropertyId]) &&\n        defined(classProperties[classPropertyId].default)\n      ) {\n        results.push(classPropertyId);\n      }\n    }\n  }\n\n  return results;\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {object} properties The dictionary containing properties.\n * @param {MetadataClass} classDefinition The class.\n * @returns {*} The value of the property or <code>undefined</code> if the entity does not have this property.\n *\n * @private\n */\nMetadataEntity.getProperty = function (\n  propertyId,\n  properties,\n  classDefinition,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  Check.typeOf.object(\"properties\", properties);\n  Check.typeOf.object(\"classDefinition\", classDefinition);\n\n  if (!defined(classDefinition.properties[propertyId])) {\n    throw new DeveloperError(`Class definition missing property ${propertyId}`);\n  }\n  //>>includeEnd('debug');\n\n  const classProperty = classDefinition.properties[propertyId];\n  let value = properties[propertyId];\n\n  // Clone array values\n  if (Array.isArray(value)) {\n    value = value.slice();\n  }\n\n  // Arrays of vectors are represented as nested arrays in JSON\n  const enableNestedArrays = true;\n\n  // Handle noData and default\n  value = classProperty.handleNoData(value);\n  if (!defined(value) && defined(classProperty.default)) {\n    value = clone(classProperty.default, true);\n    return classProperty.unpackVectorAndMatrixTypes(value, enableNestedArrays);\n  }\n\n  if (!defined(value)) {\n    return undefined;\n  }\n\n  value = classProperty.normalize(value);\n  value = classProperty.applyValueTransform(value);\n  return classProperty.unpackVectorAndMatrixTypes(value, enableNestedArrays);\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @param {object} properties The dictionary containing properties.\n * @param {MetadataClass} classDefinition The class.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n *\n * @private\n */\nMetadataEntity.setProperty = function (\n  propertyId,\n  value,\n  properties,\n  classDefinition,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  Check.defined(\"value\", value);\n  Check.typeOf.object(\"properties\", properties);\n  Check.typeOf.object(\"classDefinition\", classDefinition);\n  //>>includeEnd('debug');\n\n  if (!defined(properties[propertyId])) {\n    return false;\n  }\n\n  if (Array.isArray(value)) {\n    value = value.slice(); // clone\n  }\n\n  let classProperty;\n  const classProperties = classDefinition.properties;\n  if (defined(classProperties)) {\n    classProperty = classProperties[propertyId];\n  }\n\n  // arrays of vectors are represented as nested arrays in JSON\n  const enableNestedArrays = true;\n  if (defined(classProperty)) {\n    value = classProperty.packVectorAndMatrixTypes(value, enableNestedArrays);\n    value = classProperty.unapplyValueTransform(value);\n    value = classProperty.unnormalize(value);\n  }\n\n  properties[propertyId] = value;\n  return true;\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {object} properties The dictionary containing properties.\n * @param {MetadataClass} classDefinition The class.\n * @returns {*} The value of the property or <code>undefined</code> if the entity does not have this property.\n *\n * @private\n */\nMetadataEntity.getPropertyBySemantic = function (\n  semantic,\n  properties,\n  classDefinition,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  Check.typeOf.object(\"properties\", properties);\n  Check.typeOf.object(\"classDefinition\", classDefinition);\n  //>>includeEnd('debug');\n\n  const propertiesBySemantic = classDefinition.propertiesBySemantic;\n  if (!defined(propertiesBySemantic)) {\n    return undefined;\n  }\n\n  const property = propertiesBySemantic[semantic];\n  if (defined(property)) {\n    return MetadataEntity.getProperty(property.id, properties, classDefinition);\n  }\n  return undefined;\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @param {object} properties The dictionary containing properties.\n * @param {MetadataClass} classDefinition The class.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nMetadataEntity.setPropertyBySemantic = function (\n  semantic,\n  value,\n  properties,\n  classDefinition,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  Check.defined(\"value\", value);\n  Check.typeOf.object(\"properties\", properties);\n  Check.typeOf.object(\"classDefinition\", classDefinition);\n  //>>includeEnd('debug');\n\n  const propertiesBySemantic = classDefinition.propertiesBySemantic;\n  if (!defined(propertiesBySemantic)) {\n    return false;\n  }\n\n  const property = classDefinition.propertiesBySemantic[semantic];\n  if (defined(property)) {\n    return MetadataEntity.setProperty(\n      property.id,\n      value,\n      properties,\n      classDefinition,\n    );\n  }\n\n  return false;\n};\n\nexport default MetadataEntity;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport MetadataEnumValue from \"./MetadataEnumValue.js\";\nimport MetadataComponentType from \"./MetadataComponentType.js\";\n\n/**\n * A metadata enum.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata|3D Metadata Specification} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.id The ID of the enum.\n * @param {MetadataEnumValue[]} options.values The enum values.\n * @param {MetadataComponentType} [options.valueType=MetadataComponentType.UINT16] The enum value type.\n * @param {string} [options.name] The name of the enum.\n * @param {string} [options.description] The description of the enum.\n * @param {*} [options.extras] Extra user-defined properties.\n * @param {object} [options.extensions] An object containing extensions.\n *\n * @alias MetadataEnum\n * @constructor\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataEnum(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const id = options.id;\n  const values = options.values;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.id\", id);\n  Check.defined(\"options.values\", values);\n  //>>includeEnd('debug');\n\n  const namesByValue = {};\n  const valuesByName = {};\n\n  const valuesLength = values.length;\n  for (let i = 0; i < valuesLength; ++i) {\n    const value = values[i];\n    namesByValue[value.value] = value.name;\n    valuesByName[value.name] = value.value;\n  }\n\n  const valueType = options.valueType ?? MetadataComponentType.UINT16;\n\n  this._values = values;\n  this._namesByValue = namesByValue;\n  this._valuesByName = valuesByName;\n  this._valueType = valueType;\n  this._id = id;\n  this._name = options.name;\n  this._description = options.description;\n  this._extras = clone(options.extras, true);\n  this._extensions = clone(options.extensions, true);\n}\n\n/**\n * Creates a {@link MetadataEnum} from either 3D Tiles 1.1, 3DTILES_metadata, EXT_structural_metadata, or EXT_feature_metadata.\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.id The ID of the enum.\n * @param {object} options.enum The enum JSON object.\n *\n * @returns {MetadataEnum} The newly created metadata enum.\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nMetadataEnum.fromJson = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const id = options.id;\n  const enumDefinition = options.enum;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.id\", id);\n  Check.typeOf.object(\"options.enum\", enumDefinition);\n  //>>includeEnd('debug');\n\n  const values = enumDefinition.values.map(function (value) {\n    return MetadataEnumValue.fromJson(value);\n  });\n\n  return new MetadataEnum({\n    id: id,\n    values: values,\n    valueType: MetadataComponentType[enumDefinition.valueType],\n    name: enumDefinition.name,\n    description: enumDefinition.description,\n    extras: enumDefinition.extras,\n    extensions: enumDefinition.extensions,\n  });\n};\n\nObject.defineProperties(MetadataEnum.prototype, {\n  /**\n   * The enum values.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {MetadataEnumValue[]}\n   * @readonly\n   */\n  values: {\n    get: function () {\n      return this._values;\n    },\n  },\n\n  /**\n   * A dictionary mapping enum integer values to names.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {Object<number, string>}\n   * @readonly\n   *\n   * @private\n   */\n  namesByValue: {\n    get: function () {\n      return this._namesByValue;\n    },\n  },\n\n  /**\n   * A dictionary mapping enum names to integer values.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {Object<string, number>}\n   * @readonly\n   *\n   * @private\n   */\n  valuesByName: {\n    get: function () {\n      return this._valuesByName;\n    },\n  },\n\n  /**\n   * The enum value type.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {MetadataComponentType}\n   * @readonly\n   */\n  valueType: {\n    get: function () {\n      return this._valueType;\n    },\n  },\n\n  /**\n   * The ID of the enum.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {string}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * The name of the enum.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The description of the enum.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {string}\n   * @readonly\n   */\n  description: {\n    get: function () {\n      return this._description;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {*}\n   * @readonly\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof MetadataEnum.prototype\n   * @type {object}\n   * @readonly\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\nexport default MetadataEnum;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\n\n/**\n * A metadata enum value.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata|3D Metadata Specification} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {number} options.value The integer value.\n * @param {string} options.name The name of the enum value.\n * @param {string} [options.description] The description of the enum value.\n * @param {*} [options.extras] Extra user-defined properties.\n * @param {object} [options.extensions] An object containing extensions.\n *\n * @alias MetadataEnumValue\n * @constructor\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataEnumValue(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const value = options.value;\n  const name = options.name;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"options.value\", value);\n  Check.typeOf.string(\"options.name\", name);\n\n  //>>includeEnd('debug');\n\n  this._value = value;\n  this._name = name;\n  this._description = options.description;\n  this._extras = clone(options.extras, true);\n  this._extensions = clone(options.extensions, true);\n}\n\n/**\n * Creates a {@link MetadataEnumValue} from either 3D Tiles 1.1, 3DTILES_metadata, EXT_structural_metadata, or EXT_feature_metadata.\n *\n * @param {object} value The enum value JSON object.\n *\n * @returns {MetadataEnumValue} The newly created metadata enum value.\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nMetadataEnumValue.fromJson = function (value) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"value\", value);\n  //>>includeEnd('debug');\n\n  return new MetadataEnumValue({\n    value: value.value,\n    name: value.name,\n    description: value.description,\n    extras: value.extras,\n    extensions: value.extensions,\n  });\n};\n\nObject.defineProperties(MetadataEnumValue.prototype, {\n  /**\n   * The integer value.\n   *\n   * @memberof MetadataEnumValue.prototype\n   * @type {number}\n   * @readonly\n   */\n  value: {\n    get: function () {\n      return this._value;\n    },\n  },\n\n  /**\n   * The name of the enum value.\n   *\n   * @memberof MetadataEnumValue.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The description of the enum value.\n   *\n   * @memberof MetadataEnumValue.prototype\n   * @type {string}\n   * @readonly\n   */\n  description: {\n    get: function () {\n      return this._description;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof MetadataEnumValue.prototype\n   * @type {*}\n   * @readonly\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof MetadataEnumValue.prototype\n   * @type {object}\n   * @readonly\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\nexport default MetadataEnumValue;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport defined from \"../Core/defined.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport MetadataClassProperty from \"./MetadataClassProperty.js\";\nimport MetadataComponentType from \"./MetadataComponentType.js\";\nimport MetadataType from \"./MetadataType.js\";\n\n/**\n * Utility functions for metadata picking.\n *\n * These are used by the `Picking.pickMetadata` function to decode\n * the metadata values that have been read from the frame buffer\n * into the actual metadata values, according to the structure\n * defined by the `MetadataClassProperty`.\n *\n * @private\n */\nconst MetadataPicking = {};\n\n/**\n * Returns the value at the specified index of the given data view,\n * interpreting the data to have the given component type.\n *\n * @param {MetadataComponentType} componentType The `MetadataComponentType`\n * @param {DataView} dataView The data view\n * @param {number} index The index (byte offset)\n * @returns {number|bigint|undefined} The value\n * @throws RuntimeError If the given component type is not a valid\n * `MetadataComponentType`\n * @throws RangeError If reading the data from the given data view would\n * cause an out-of-bounds access\n *\n * @private\n */\nMetadataPicking.decodeRawMetadataValue = function (\n  componentType,\n  dataView,\n  index,\n) {\n  switch (componentType) {\n    case MetadataComponentType.INT8:\n      return dataView.getInt8(index);\n    case MetadataComponentType.UINT8:\n      return dataView.getUint8(index);\n    case MetadataComponentType.INT16:\n      return dataView.getInt16(index, true);\n    case MetadataComponentType.UINT16:\n      return dataView.getUint16(index, true);\n    case MetadataComponentType.INT32:\n      return dataView.getInt32(index, true);\n    case MetadataComponentType.UINT32:\n      return dataView.getUint32(index, true);\n    case MetadataComponentType.INT64:\n      return dataView.getBigInt64(index, true);\n    case MetadataComponentType.UINT64:\n      return dataView.getBigUint64(index, true);\n    case MetadataComponentType.FLOAT32:\n      return dataView.getFloat32(index, true);\n    case MetadataComponentType.FLOAT64:\n      return dataView.getFloat64(index, true);\n  }\n  throw new RuntimeError(`Invalid component type: ${componentType}`);\n};\n\n/**\n * Decodes one component of a metadata value with the given property type\n * from the given data view.\n *\n * This will decode one component (e.g. one entry of a SCALAR array,\n * or one component of a VEC2 element).\n *\n * This will apply normalization to the raw component value if the given\n * class property is 'normalized'.\n *\n * @param {MetadataClassProperty} classProperty The class property\n * @param {DataView} dataView The data view containing the raw metadata values\n * @param {number} dataViewOffset The byte offset within the data view from\n * which the component should be read\n * @returns {number|bigint|undefined} The metadata value component\n * @throws RuntimeError If the component of the given property is not\n * a valid `MetadataComponentType`\n * @throws RangeError If reading the data from the given data view would\n * cause an out-of-bounds access\n */\nMetadataPicking.decodeRawMetadataValueComponent = function (\n  classProperty,\n  dataView,\n  dataViewOffset,\n) {\n  const componentType = classProperty.componentType;\n  const component = MetadataPicking.decodeRawMetadataValue(\n    componentType,\n    dataView,\n    dataViewOffset,\n  );\n  if (classProperty.normalized) {\n    return MetadataComponentType.normalize(component, componentType);\n  }\n  return component;\n};\n\n/**\n * Decodes one element of a metadata value with the given property type\n * from the given data view.\n *\n * When the given class property is vector- or matrix typed, then the\n * result will be an array, with a length that corresponds to the\n * number of vector- or matrix components.\n *\n * Otherwise, it will be a single value.\n *\n * In any case, the return value will be the \"raw\" value, which does\n * take into account normalization, but does NOT take into account\n * default/noData value handling.\n *\n * @param {MetadataClassProperty} classProperty The metadata class property\n * @param {DataView} dataView The data view containing the raw metadata values\n * @param {number} elementIndex The index of the element. This is the index\n * inside the array for array-typed properties, and 0 for non-array types.\n * @returns {number|number[]|bigint|bigint[]|undefined} The decoded metadata value element\n * @throws RuntimeError If the component of the given property is not\n * a valid `MetadataComponentType`\n * @throws RangeError If reading the data from the given data view would\n * cause an out-of-bounds access\n *\n */\nMetadataPicking.decodeRawMetadataValueElement = function (\n  classProperty,\n  dataView,\n  elementIndex,\n) {\n  const componentType = classProperty.componentType;\n  const componentSizeInBytes =\n    MetadataComponentType.getSizeInBytes(componentType);\n  const type = classProperty.type;\n  const componentCount = MetadataType.getComponentCount(type);\n  const elementSizeInBytes = componentSizeInBytes * componentCount;\n  if (componentCount > 1) {\n    const result = Array(componentCount);\n    for (let i = 0; i < componentCount; i++) {\n      const offset =\n        elementIndex * elementSizeInBytes + i * componentSizeInBytes;\n      const component = MetadataPicking.decodeRawMetadataValueComponent(\n        classProperty,\n        dataView,\n        offset,\n      );\n      result[i] = component;\n    }\n    return result;\n  }\n  const offset = elementIndex * elementSizeInBytes;\n  const result = MetadataPicking.decodeRawMetadataValueComponent(\n    classProperty,\n    dataView,\n    offset,\n  );\n  return result;\n};\n\n/**\n * Decode the given raw values into the raw (array-based) form of\n * a metadata property value.\n *\n * (For decoding to types like `CartesianN`, the `decodeMetadataValues`\n * function can be used)\n *\n * The given values are a `Uint8Array` containing the RGBA\n * values that have been read from the metadata picking\n * frame buffer. They are assumed to contain the value for\n * the given class property, as encoded by the\n * `MetadataPickingPipelineStage` for metadata picking.\n *\n * When the given class property is an array, then (it has to be\n * a fixed-length array, and) the result will be an array with\n * the respective length.\n *\n * When the given class property is vector- or matrix typed,\n * then the result will be an array, with a length that corresponds\n * to the number of vector- or matrix components.\n *\n * (The case that the property is an array of vector- or matrix\n * elements is not supported on the side of the general metadata\n * shader infrastructure, but handled here nevertheless. For such\n * an input, the result would be an array of arrays, with each\n * element representing one of the vectors or matrices).\n *\n * In any case, the return value will be the \"raw\" value, which does\n * take into account normalization, but does NOT take into account\n * any offset/scale, or default/noData value handling.\n *\n * @param {MetadataClassProperty} classProperty The `MetadataClassProperty`\n * @param {Uint8Array} rawPixelValues The raw values\n * @returns {number|bigint|number[]|bigint[]|undefined} The value\n * @throws RuntimeError If the class property has an invalid component type\n *\n * @private\n */\nMetadataPicking.decodeRawMetadataValues = function (\n  classProperty,\n  rawPixelValues,\n) {\n  const dataView = new DataView(\n    rawPixelValues.buffer,\n    rawPixelValues.byteOffset,\n    rawPixelValues.byteLength,\n  );\n  if (classProperty.isArray) {\n    const arrayLength = classProperty.arrayLength;\n    const result = Array(arrayLength);\n    for (let i = 0; i < arrayLength; i++) {\n      const element = MetadataPicking.decodeRawMetadataValueElement(\n        classProperty,\n        dataView,\n        i,\n      );\n      result[i] = element;\n    }\n    return result;\n  }\n  const result = MetadataPicking.decodeRawMetadataValueElement(\n    classProperty,\n    dataView,\n    0,\n  );\n  return result;\n};\n\n/**\n * Converts the given type into an object representation where appropriate.\n *\n * When the given type is `SCALAR`, `STRING`, `BOOLEAN`, or `ENUM`, or\n * when the given value is `undefined`, then the given value will be\n * returned.\n *\n * Otherwise, for the `VECn/MATn` types, the given value is assumed to be\n * a numeric array, and is converted into the matching `CartesianN/MatrixN`\n * value.\n *\n * @param {string} type The `ClassProperty` type\n * @param {number|bigint|number[]|bigint[]|undefined} value The input value\n * @returns {undefined|number|bigint|string|boolean|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4} The object representation\n * @throws RuntimeError If the type is not a valid `MetadataType`\n */\nMetadataPicking.convertToObjectType = function (type, value) {\n  if (!defined(value)) {\n    return value;\n  }\n  if (\n    type === MetadataType.SCALAR ||\n    type === MetadataType.STRING ||\n    type === MetadataType.BOOLEAN ||\n    type === MetadataType.ENUM\n  ) {\n    return value;\n  }\n  const numbers = value.map((n) => Number(n));\n  switch (type) {\n    case MetadataType.VEC2:\n      return Cartesian2.unpack(numbers, 0, new Cartesian2());\n    case MetadataType.VEC3:\n      return Cartesian3.unpack(numbers, 0, new Cartesian3());\n    case MetadataType.VEC4:\n      return Cartesian4.unpack(numbers, 0, new Cartesian4());\n    case MetadataType.MAT2:\n      return Matrix2.unpack(numbers, 0, new Matrix2());\n    case MetadataType.MAT3:\n      return Matrix3.unpack(numbers, 0, new Matrix3());\n    case MetadataType.MAT4:\n      return Matrix4.unpack(numbers, 0, new Matrix4());\n  }\n  // Should never happen:\n  throw new RuntimeError(`Invalid metadata object type: ${type}`);\n};\n\n/**\n * Converts the given type into a raw value or array representation.\n *\n * For `VECn/MATn` types, the given value is converted into an array.\n * For other types, the value is returned directly\n *\n * @param {string} type The `ClassProperty` type\n * @param {undefined|number|bigint|string|boolean|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4} value The input value\n * @returns {undefined|number|bigint|string|boolean|number[]} The array representation\n * @throws RuntimeError If the type is not a valid `MetadataType`\n */\nMetadataPicking.convertFromObjectType = function (type, value) {\n  if (!defined(value)) {\n    return value;\n  }\n  if (\n    type === MetadataType.SCALAR ||\n    type === MetadataType.STRING ||\n    type === MetadataType.BOOLEAN ||\n    type === MetadataType.ENUM\n  ) {\n    return value;\n  }\n  switch (type) {\n    case MetadataType.VEC2:\n      return Cartesian2.pack(value, Array(2));\n    case MetadataType.VEC3:\n      return Cartesian3.pack(value, Array(3));\n    case MetadataType.VEC4:\n      return Cartesian4.pack(value, Array(4));\n    case MetadataType.MAT2:\n      return Matrix2.pack(value, Array(4));\n    case MetadataType.MAT3:\n      return Matrix3.pack(value, Array(9));\n    case MetadataType.MAT4:\n      return Matrix4.pack(value, Array(16));\n  }\n  // Should never happen:\n  throw new RuntimeError(`Invalid metadata object type: ${type}`);\n};\n\n/**\n * Decode the given raw values into a metadata property value.\n *\n * This applies the value transform (offset/scale) to the result\n * of `decodeRawMetadataValues`, and converts this from array-based\n * types into object types like `CartesianN`.\n *\n * @param {MetadataClassProperty} classProperty The `MetadataClassProperty`\n * @param {object} metadataProperty The\n * `PropertyTextureProperty` or `PropertyAttributeProperty`\n * @param {Uint8Array} rawPixelValues The raw values\n * @returns {MetadataValue} The value\n * @throws RuntimeError If the class property has an invalid type\n * or component type\n * @throws RangeError If the given pixel values do not have sufficient\n * size to contain the expected value type\n *\n * @private\n */\nMetadataPicking.decodeMetadataValues = function (\n  classProperty,\n  metadataProperty,\n  rawPixelValues,\n) {\n  let arrayBasedResult = MetadataPicking.decodeRawMetadataValues(\n    classProperty,\n    rawPixelValues,\n  );\n\n  if (metadataProperty.hasValueTransform) {\n    // In the MetadataClassProperty, these offset/scale are always in\n    // their array-based form (e.g. a number[3] for `VEC3`). But for\n    // the PropertyTextureProperty and PropertyAttributeProperty,\n    // the type of the offset/scale is defined to be\n    // number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4\n    // So these types are converted into their array-based form here, before\n    // applying them with `MetadataClassProperty.valueTransformInPlace`\n\n    const offset = MetadataPicking.convertFromObjectType(\n      classProperty.type,\n      metadataProperty.offset,\n    );\n    const scale = MetadataPicking.convertFromObjectType(\n      classProperty.type,\n      metadataProperty.scale,\n    );\n    arrayBasedResult = MetadataClassProperty.valueTransformInPlace(\n      arrayBasedResult,\n      offset,\n      scale,\n      MetadataComponentType.applyValueTransform,\n    );\n  }\n\n  if (classProperty.isArray) {\n    const arrayLength = classProperty.arrayLength;\n    const result = Array(arrayLength);\n    for (let i = 0; i < arrayLength; i++) {\n      const arrayBasedValue = arrayBasedResult[i];\n      const objectBasedValue = MetadataPicking.convertToObjectType(\n        classProperty.type,\n        arrayBasedValue,\n      );\n      result[i] = objectBasedValue;\n    }\n    return result;\n  }\n  const objectResult = MetadataPicking.convertToObjectType(\n    classProperty.type,\n    arrayBasedResult,\n  );\n  return objectResult;\n};\n\nexport default Object.freeze(MetadataPicking);\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport MetadataClass from \"./MetadataClass.js\";\nimport MetadataEnum from \"./MetadataEnum.js\";\n\n/**\n * A schema containing classes and enums.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata|3D Metadata Specification} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} [options.id] The ID of the schema\n * @param {string} [options.name] The name of the schema.\n * @param {string} [options.description] The description of the schema.\n * @param {string} [options.version] The application-specific version of the schema.\n * @param {Object<string, MetadataClass>} [options.classes] Classes defined in the schema, where each key is the class ID.\n * @param {Object<string, MetadataEnum>} [options.enums] Enums defined in the schema, where each key is the enum ID.\n * @param {*} [options.extras] Extra user-defined properties.\n * @param {object} [options.extensions] An object containing extensions.\n *\n * @alias MetadataSchema\n * @constructor\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataSchema(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const classes = options.classes ?? {};\n  const enums = options.enums ?? {};\n\n  this._classes = classes;\n  this._enums = enums;\n  this._id = options.id;\n  this._name = options.name;\n  this._description = options.description;\n  this._version = options.version;\n  this._extras = clone(options.extras, true);\n  this._extensions = clone(options.extensions, true);\n}\n\n/**\n * Creates a {@link MetadataSchema} from either 3D Tiles 1.1, 3DTILES_metadata, EXT_structural_metadata, or EXT_feature_metadata.\n *\n * @param {object} schema The schema JSON object.\n *\n * @returns {MetadataSchema} The newly created metadata schema\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nMetadataSchema.fromJson = function (schema) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"schema\", schema);\n  //>>includeEnd('debug');\n\n  const enums = {};\n  if (defined(schema.enums)) {\n    for (const enumId in schema.enums) {\n      if (schema.enums.hasOwnProperty(enumId)) {\n        enums[enumId] = MetadataEnum.fromJson({\n          id: enumId,\n          enum: schema.enums[enumId],\n        });\n      }\n    }\n  }\n\n  const classes = {};\n  if (defined(schema.classes)) {\n    for (const classId in schema.classes) {\n      if (schema.classes.hasOwnProperty(classId)) {\n        classes[classId] = MetadataClass.fromJson({\n          id: classId,\n          class: schema.classes[classId],\n          enums: enums,\n        });\n      }\n    }\n  }\n\n  return new MetadataSchema({\n    id: schema.id,\n    name: schema.name,\n    description: schema.description,\n    version: schema.version,\n    classes: classes,\n    enums: enums,\n    extras: schema.extras,\n    extensions: schema.extensions,\n  });\n};\n\nObject.defineProperties(MetadataSchema.prototype, {\n  /**\n   * Classes defined in the schema.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {Object<string, MetadataClass>}\n   * @readonly\n   */\n  classes: {\n    get: function () {\n      return this._classes;\n    },\n  },\n\n  /**\n   * Enums defined in the schema.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {Object<string, MetadataEnum>}\n   * @readonly\n   */\n  enums: {\n    get: function () {\n      return this._enums;\n    },\n  },\n\n  /**\n   * The ID of the schema.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {string}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * The name of the schema.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The description of the schema.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {string}\n   * @readonly\n   */\n  description: {\n    get: function () {\n      return this._description;\n    },\n  },\n\n  /**\n   * The application-specific version of the schema.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {string}\n   * @readonly\n   */\n  version: {\n    get: function () {\n      return this._version;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {*}\n   * @readonly\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof MetadataSchema.prototype\n   * @type {object}\n   * @readonly\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\nexport default MetadataSchema;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport MetadataSchema from \"./MetadataSchema.js\";\nimport ResourceLoader from \"./ResourceLoader.js\";\nimport ResourceLoaderState from \"./ResourceLoaderState.js\";\n\n/**\n * A {@link MetadataSchema} loader.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nclass MetadataSchemaLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {object} [options.schema] An object that explicitly defines a schema JSON. Mutually exclusive with options.resource.\n   * @param {Resource} [options.resource] The {@link Resource} pointing to the schema JSON. Mutually exclusive with options.schema.\n   * @param {string} [options.cacheKey] The cache key of the resource.\n   *\n   * @exception {DeveloperError} One of options.schema and options.resource must be defined.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n    const schema = options.schema;\n    const resource = options.resource;\n    const cacheKey = options.cacheKey;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (defined(schema) === defined(resource)) {\n      throw new DeveloperError(\n        \"One of options.schema and options.resource must be defined.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    this._schema = defined(schema)\n      ? MetadataSchema.fromJson(schema)\n      : undefined;\n    this._resource = resource;\n    this._cacheKey = cacheKey;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._promise = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof MetadataSchemaLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return this._cacheKey;\n  }\n\n  /**\n   * The metadata schema object.\n   *\n   * @memberof MetadataSchemaLoader.prototype\n   *\n   * @type {MetadataSchema}\n   * @readonly\n   * @private\n   */\n  get schema() {\n    return this._schema;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<MetadataSchemaLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  async load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    if (defined(this._schema)) {\n      this._promise = Promise.resolve(this);\n      return this._promise;\n    }\n\n    this._promise = loadExternalSchema(this);\n    return this._promise;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    this._schema = undefined;\n  }\n}\n\nasync function loadExternalSchema(schemaLoader) {\n  const resource = schemaLoader._resource;\n  schemaLoader._state = ResourceLoaderState.LOADING;\n  try {\n    const json = await resource.fetchJson();\n    if (schemaLoader.isDestroyed()) {\n      return;\n    }\n\n    schemaLoader._schema = MetadataSchema.fromJson(json);\n    schemaLoader._state = ResourceLoaderState.READY;\n    return schemaLoader;\n  } catch (error) {\n    if (schemaLoader.isDestroyed()) {\n      return;\n    }\n\n    schemaLoader._state = ResourceLoaderState.FAILED;\n    const errorMessage = `Failed to load schema: ${resource.url}`;\n    throw schemaLoader.getError(errorMessage, error);\n  }\n}\n\nexport default MetadataSchemaLoader;\n","/**\n * An enum of built-in semantics.\n *\n * @enum MetadataSemantic\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata/Semantics|3D Metadata Semantic Reference}\n */\nconst MetadataSemantic = {\n  /**\n   * A unique identifier, stored as a <code>STRING</code>.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  ID: \"ID\",\n  /**\n   * A name, stored as a <code>STRING</code>. This does not have to be unique.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  NAME: \"NAME\",\n  /**\n   * A description, stored as a <code>STRING</code>.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  DESCRIPTION: \"DESCRIPTION\",\n  /**\n   * The number of tiles in a tileset, stored as a <code>UINT64</code>.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILESET_TILE_COUNT: \"TILESET_TILE_COUNT\",\n  /**\n   * A bounding box for a tile, stored as an array of 12 <code>FLOAT32</code> or <code>FLOAT64</code> components. The components are the same format as for <code>boundingVolume.box</code> in 3D Tiles 1.0. This semantic is used to provide a tighter bounding volume than the one implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILE_BOUNDING_BOX: \"TILE_BOUNDING_BOX\",\n  /**\n   * A bounding region for a tile, stored as an array of 6 <code>FLOAT64</code> components. The components are <code>[west, south, east, north, minimumHeight, maximumHeight]</code>. This semantic is used to provide a tighter bounding volume than the one implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILE_BOUNDING_REGION: \"TILE_BOUNDING_REGION\",\n  /**\n   * A bounding sphere for a tile, stored as an array of 4 <code>FLOAT32</code> or <code>FLOAT64</code> components. The components are <code>[centerX, centerY, centerZ, radius]</code>. This semantic is used to provide a tighter bounding volume than the one implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILE_BOUNDING_SPHERE: \"TILE_BOUNDING_SPHERE\",\n  /**\n   * The minimum height of a tile above (or below) the ellipsoid, stored as a <code>FLOAT32</code> or a <code>FLOAT64</code>. This semantic is used to tighten bounding regions implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILE_MINIMUM_HEIGHT: \"TILE_MINIMUM_HEIGHT\",\n  /**\n   * The maximum height of a tile above (or below) the ellipsoid, stored as a <code>FLOAT32</code> or a <code>FLOAT64</code>. This semantic is used to tighten bounding regions implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILE_MAXIMUM_HEIGHT: \"TILE_MAXIMUM_HEIGHT\",\n  /**\n   * The horizon occlusion point for a tile, stored as an <code>VEC3</code> of <code>FLOAT32</code> or <code>FLOAT64</code> components.\n   *\n   * @see {@link https://cesium.com/blog/2013/04/25/horizon-culling/|Horizon Culling}\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILE_HORIZON_OCCLUSION_POINT: \"TILE_HORIZON_OCCLUSION_POINT\",\n  /**\n   * The geometric error for a tile, stored as a <code>FLOAT32</code> or a <code>FLOAT64</code>. This semantic is used to override the geometric error implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  TILE_GEOMETRIC_ERROR: \"TILE_GEOMETRIC_ERROR\",\n  /**\n   * A bounding box for the content of a tile, stored as an array of 12 <code>FLOAT32</code> or <code>FLOAT64</code> components. The components are the same format as for <code>boundingVolume.box</code> in 3D Tiles 1.0. This semantic is used to provide a tighter bounding volume than the one implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  CONTENT_BOUNDING_BOX: \"CONTENT_BOUNDING_BOX\",\n  /**\n   * A bounding region for the content of a tile, stored as an array of 6 <code>FLOAT64</code> components. The components are <code>[west, south, east, north, minimumHeight, maximumHeight]</code>. This semantic is used to provide a tighter bounding volume than the one implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  CONTENT_BOUNDING_REGION: \"CONTENT_BOUNDING_REGION\",\n  /**\n   * A bounding sphere for the content of a tile, stored as an array of 4 <code>FLOAT32</code> or <code>FLOAT64</code> components. The components are <code>[centerX, centerY, centerZ, radius]</code>. This semantic is used to provide a tighter bounding volume than the one implicitly calculated in implicit tiling.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  CONTENT_BOUNDING_SPHERE: \"CONTENT_BOUNDING_SPHERE\",\n  /**\n   * The minimum height of the content of a tile above (or below) the ellipsoid, stored as a <code>FLOAT32</code> or a <code>FLOAT64</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  CONTENT_MINIMUM_HEIGHT: \"CONTENT_MINIMUM_HEIGHT\",\n  /**\n   * The maximum height of the content of a tile above (or below) the ellipsoid, stored as a <code>FLOAT32</code> or a <code>FLOAT64</code>\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  CONTENT_MAXIMUM_HEIGHT: \"CONTENT_MAXIMUM_HEIGHT\",\n  /**\n   * The horizon occlusion point for the content of a tile, stored as an <code>VEC3</code> of <code>FLOAT32</code> or <code>FLOAT64</code> components.\n   *\n   * @see {@link https://cesium.com/blog/2013/04/25/horizon-culling/|Horizon Culling}\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  CONTENT_HORIZON_OCCLUSION_POINT: \"CONTENT_HORIZON_OCCLUSION_POINT\",\n};\n\nexport default Object.freeze(MetadataSemantic);\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport MetadataEntity from \"./MetadataEntity.js\";\nimport MetadataTableProperty from \"./MetadataTableProperty.js\";\n\n/**\n * A table containing binary metadata for a collection of entities. This is\n * used for representing binary properties of a batch table, as well as binary\n * metadata in 3D Tiles next extensions.\n * <p>\n * For 3D Tiles Next details, see the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles, as well as the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension} for glTF.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {number} options.count The number of entities in the table.\n * @param {object} [options.properties] A dictionary containing properties.\n * @param {MetadataClass} options.class The class that properties conform to.\n * @param {Object<string, Uint8Array>} [options.bufferViews] An object mapping bufferView IDs to Uint8Array objects.\n *\n * @alias MetadataTable\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataTable(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const count = options.count;\n  const metadataClass = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"options.count\", count, 0);\n  Check.typeOf.object(\"options.class\", metadataClass);\n  //>>includeEnd('debug');\n\n  let byteLength = 0;\n  const properties = {};\n  if (defined(options.properties)) {\n    for (const propertyId in options.properties) {\n      if (options.properties.hasOwnProperty(propertyId)) {\n        const property = new MetadataTableProperty({\n          count: count,\n          property: options.properties[propertyId],\n          classProperty: metadataClass.properties[propertyId],\n          bufferViews: options.bufferViews,\n        });\n        properties[propertyId] = property;\n        byteLength += property.byteLength;\n      }\n    }\n  }\n\n  this._count = count;\n  this._class = metadataClass;\n  this._properties = properties;\n  this._byteLength = byteLength;\n}\n\nObject.defineProperties(MetadataTable.prototype, {\n  /**\n   * The number of entities in the table.\n   *\n   * @memberof MetadataTable.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  count: {\n    get: function () {\n      return this._count;\n    },\n  },\n\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof MetadataTable.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * The size of all typed arrays used in this table.\n   *\n   * @memberof MetadataTable.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  byteLength: {\n    get: function () {\n      return this._byteLength;\n    },\n  },\n\n  /**\n   * The properties of the table.\n   *\n   * @memberof MetadataTable.prototype\n   * @type {Object<string, MetadataTableProperty>}\n   * @readonly\n   * @private\n   */\n  properties: {\n    get: function () {\n      return this._properties;\n    },\n  },\n});\n\n/**\n * Returns whether the table has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the table has this property.\n * @private\n */\nMetadataTable.prototype.hasProperty = function (propertyId) {\n  return MetadataEntity.hasProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Returns whether the table has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the table has a property with the given semantic.\n * @private\n */\nMetadataTable.prototype.hasPropertyBySemantic = function (semantic) {\n  return MetadataEntity.hasPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nMetadataTable.prototype.getPropertyIds = function (results) {\n  return MetadataEntity.getPropertyIds(this._properties, this._class, results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is an enum the name of the enum is returned.\n * </p>\n * <p>\n * If the property is normalized the normalized value is returned. The value is\n * in the range [-1.0, 1.0] for signed integer types and [0.0, 1.0] for unsigned\n * integer types.\n * </p>\n * <p>\n * If the property is not normalized and type or componentType is INT64 or\n * UINT64 a BigInt will be returned. On platforms that don't support BigInt a\n * number will be returned instead. Note that numbers only support up to 52 bits\n * of integer precision. Values greater than 2^53 - 1 or less than -(2^53 - 1)\n * may lose precision when read.\n * </p>\n *\n * @param {number} index The index of the entity.\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the entity does not have this property.\n *\n * @exception {DeveloperError} index is required and between zero and count - 1\n * @private\n */\nMetadataTable.prototype.getProperty = function (index, propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  const property = this._properties[propertyId];\n\n  let value;\n  if (defined(property)) {\n    value = property.get(index);\n  } else {\n    value = getDefault(this._class, propertyId);\n  }\n\n  return value;\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is an enum the name of the enum must be provided, not the\n * integer value.\n * </p>\n * <p>\n * If the property is normalized a normalized value must be provided to this\n * function. The value must be in the range [-1.0, 1.0] for signed integer\n * types and [0.0, 1.0] for unsigned integer types.\n * </p>\n * <p>\n * If the property is not normalized and type or componentType is INT64 or\n * UINT64 a BigInt may be provided. On platforms that don't support BigInt a\n * number may be provided instead. Note that numbers only support up to 52 bits\n * of integer precision. Values greater than 2^53 - 1 or less than -(2^53 - 1)\n * may lose precision when set.\"\n * </p>\n *\n * @param {number} index The index of the entity.\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n *\n * @exception {DeveloperError} index is required and between zero and count - 1\n * @exception {DeveloperError} value does not match type\n * @exception {DeveloperError} value is out of range for type\n * @exception {DeveloperError} Array length does not match componentCount\n * @private\n */\nMetadataTable.prototype.setProperty = function (index, propertyId, value) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  const property = this._properties[propertyId];\n  if (defined(property)) {\n    property.set(index, value);\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {number} index The index of the entity.\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the entity does not have this semantic.\n *\n * @exception {DeveloperError} index is required and between zero and count - 1\n * @private\n */\nMetadataTable.prototype.getPropertyBySemantic = function (index, semantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  let property;\n  const propertiesBySemantic = this._class.propertiesBySemantic;\n  if (defined(propertiesBySemantic)) {\n    property = propertiesBySemantic[semantic];\n  }\n\n  if (defined(property)) {\n    return this.getProperty(index, property.id);\n  }\n\n  return undefined;\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {number} index The index of the entity.\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n *\n * @exception {DeveloperError} index is required and between zero and count - 1\n * @exception {DeveloperError} value does not match type\n * @exception {DeveloperError} value is out of range for type\n * @exception {DeveloperError} Array length does not match componentCount\n * @private\n */\nMetadataTable.prototype.setPropertyBySemantic = function (\n  index,\n  semantic,\n  value,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  let property;\n  const propertiesBySemantic = this._class.propertiesBySemantic;\n  if (defined(propertiesBySemantic)) {\n    property = propertiesBySemantic[semantic];\n  }\n\n  if (defined(property)) {\n    return this.setProperty(index, property.id, value);\n  }\n\n  return false;\n};\n\n/**\n * Returns a typed array containing the property values for a given propertyId.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The typed array containing the property values or <code>undefined</code> if the property values are not stored in a typed array.\n *\n * @private\n */\nMetadataTable.prototype.getPropertyTypedArray = function (propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  const property = this._properties[propertyId];\n\n  if (defined(property)) {\n    return property.getTypedArray();\n  }\n\n  return undefined;\n};\n\n/**\n * Returns a typed array containing the property values for the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The typed array containing the property values or <code>undefined</code> if the property values are not stored in a typed array.\n *\n * @private\n */\nMetadataTable.prototype.getPropertyTypedArrayBySemantic = function (semantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  let property;\n  const propertiesBySemantic = this._class.propertiesBySemantic;\n  if (defined(propertiesBySemantic)) {\n    property = propertiesBySemantic[semantic];\n  }\n\n  if (defined(property)) {\n    return this.getPropertyTypedArray(property.id);\n  }\n\n  return undefined;\n};\n\nfunction getDefault(classDefinition, propertyId) {\n  const classProperties = classDefinition.properties;\n  if (!defined(classProperties)) {\n    return undefined;\n  }\n\n  const classProperty = classProperties[propertyId];\n  if (defined(classProperty) && defined(classProperty.default)) {\n    let value = classProperty.default;\n    if (classProperty.isArray) {\n      value = clone(value, true);\n    }\n    value = classProperty.normalize(value);\n    return classProperty.unpackVectorAndMatrixTypes(value);\n  }\n}\n\nexport default MetadataTable;\n","import Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport getStringFromTypedArray from \"../Core/getStringFromTypedArray.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport MetadataComponentType from \"./MetadataComponentType.js\";\nimport MetadataClassProperty from \"./MetadataClassProperty.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport addAllToArray from \"../Core/addAllToArray.js\";\n\n/**\n * A binary property in a {@MetadataTable}\n * <p>\n * For 3D Tiles Next details, see the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension}\n * for 3D Tiles, as well as the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension}\n * for glTF. For the legacy glTF extension, see {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension}\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {number} options.count The number of elements in each property array.\n * @param {object} options.property The property JSON object.\n * @param {MetadataClassProperty} options.classProperty The class property.\n * @param {Object<string, Uint8Array>} options.bufferViews An object mapping bufferView IDs to Uint8Array objects.\n *\n * @alias MetadataTableProperty\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction MetadataTableProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const count = options.count;\n  const property = options.property;\n  const classProperty = options.classProperty;\n  const bufferViews = options.bufferViews;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"options.count\", count, 0);\n  Check.typeOf.object(\"options.property\", property);\n  Check.typeOf.object(\"options.classProperty\", classProperty);\n  Check.typeOf.object(\"options.bufferViews\", bufferViews);\n  //>>includeEnd('debug');\n\n  const type = classProperty.type;\n  const isArray = classProperty.isArray;\n  const isVariableLengthArray = classProperty.isVariableLengthArray;\n\n  let valueType = classProperty.valueType;\n  const enumType = classProperty.enumType;\n\n  const hasStrings = type === MetadataType.STRING;\n  const hasBooleans = type === MetadataType.BOOLEAN;\n\n  let byteLength = 0;\n\n  let arrayOffsets;\n  if (isVariableLengthArray) {\n    // EXT_structural_metadata uses arrayOffsetType.\n    // EXT_feature_metadata uses offsetType for both arrays and strings\n    let arrayOffsetType = property.arrayOffsetType ?? property.offsetType;\n    arrayOffsetType =\n      MetadataComponentType[arrayOffsetType] ?? MetadataComponentType.UINT32;\n\n    // EXT_structural_metadata uses arrayOffsets.\n    // EXT_feature_metadata uses arrayOffsetBufferView\n    const arrayOffsetBufferView =\n      property.arrayOffsets ?? property.arrayOffsetBufferView;\n    arrayOffsets = new BufferView(\n      bufferViews[arrayOffsetBufferView],\n      arrayOffsetType,\n      count + 1,\n    );\n\n    byteLength += arrayOffsets.typedArray.byteLength;\n  }\n\n  const vectorComponentCount = MetadataType.getComponentCount(type);\n\n  let arrayComponentCount;\n  if (isVariableLengthArray) {\n    arrayComponentCount = arrayOffsets.get(count) - arrayOffsets.get(0);\n  } else if (isArray) {\n    arrayComponentCount = count * classProperty.arrayLength;\n  } else {\n    arrayComponentCount = count;\n  }\n\n  const componentCount = vectorComponentCount * arrayComponentCount;\n\n  let stringOffsets;\n  if (hasStrings) {\n    // EXT_structural_metadata uses stringOffsetType, EXT_feature_metadata uses offsetType for both arrays and strings\n    let stringOffsetType = property.stringOffsetType ?? property.offsetType;\n    stringOffsetType =\n      MetadataComponentType[stringOffsetType] ?? MetadataComponentType.UINT32;\n\n    // EXT_structural_metadata uses stringOffsets.\n    // EXT_feature_metadata uses stringOffsetBufferView\n    const stringOffsetBufferView =\n      property.stringOffsets ?? property.stringOffsetBufferView;\n    stringOffsets = new BufferView(\n      bufferViews[stringOffsetBufferView],\n      stringOffsetType,\n      componentCount + 1,\n    );\n\n    byteLength += stringOffsets.typedArray.byteLength;\n  }\n\n  if (hasStrings || hasBooleans) {\n    // STRING and BOOLEAN types need to be parsed differently than other types\n    valueType = MetadataComponentType.UINT8;\n  }\n\n  let valueCount;\n  if (hasStrings) {\n    valueCount = stringOffsets.get(componentCount) - stringOffsets.get(0);\n  } else if (hasBooleans) {\n    valueCount = Math.ceil(componentCount / 8);\n  } else {\n    valueCount = componentCount;\n  }\n\n  // EXT_structural_metadata uses values\n  // EXT_feature_metadata uses bufferView\n  const valuesBufferView = property.values ?? property.bufferView;\n  const values = new BufferView(\n    bufferViews[valuesBufferView],\n    valueType,\n    valueCount,\n  );\n  byteLength += values.typedArray.byteLength;\n\n  let offset = property.offset;\n  let scale = property.scale;\n\n  // This needs to be set before handling default values\n  const hasValueTransform =\n    classProperty.hasValueTransform || defined(offset) || defined(scale);\n\n  // If the table does not define an offset/scale, it inherits from the\n  // class property. The class property handles setting the default of identity:\n  // (offset 0, scale 1) with the same array shape as the property's type\n  // information.\n  offset = offset ?? classProperty.offset;\n  scale = scale ?? classProperty.scale;\n\n  // Since metadata table properties are stored as packed typed\n  // arrays, flatten the offset/scale to make it easier to apply the\n  // transformation by iteration.\n  offset = flatten(offset);\n  scale = flatten(scale);\n\n  let getValueFunction;\n  let setValueFunction;\n  const that = this;\n  if (hasStrings) {\n    getValueFunction = function (index) {\n      return getString(index, that._values, that._stringOffsets);\n    };\n  } else if (hasBooleans) {\n    getValueFunction = function (index) {\n      return getBoolean(index, that._values);\n    };\n    setValueFunction = function (index, value) {\n      setBoolean(index, that._values, value);\n    };\n  } else if (defined(enumType)) {\n    getValueFunction = function (index) {\n      const integer = that._values.get(index);\n      return enumType.namesByValue[integer];\n    };\n    setValueFunction = function (index, value) {\n      const integer = enumType.valuesByName[value];\n      that._values.set(index, integer);\n    };\n  } else {\n    getValueFunction = function (index) {\n      return that._values.get(index);\n    };\n    setValueFunction = function (index, value) {\n      that._values.set(index, value);\n    };\n  }\n\n  this._arrayOffsets = arrayOffsets;\n  this._stringOffsets = stringOffsets;\n  this._values = values;\n  this._classProperty = classProperty;\n  this._count = count;\n  this._vectorComponentCount = vectorComponentCount;\n  this._min = property.min;\n  this._max = property.max;\n  this._offset = offset;\n  this._scale = scale;\n  this._hasValueTransform = hasValueTransform;\n  this._getValue = getValueFunction;\n  this._setValue = setValueFunction;\n  this._unpackedValues = undefined;\n  this._extras = property.extras;\n  this._extensions = property.extensions;\n  this._byteLength = byteLength;\n}\n\nObject.defineProperties(MetadataTableProperty.prototype, {\n  /**\n   * True if offset/scale should be applied. If both offset/scale were\n   * undefined, they default to identity so this property is set false\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  hasValueTransform: {\n    get: function () {\n      return this._hasValueTransform;\n    },\n  },\n\n  /**\n   * The offset to be added to property values as part of the value transform.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|number[]|number[][]}\n   * @readonly\n   * @private\n   */\n  offset: {\n    get: function () {\n      return this._offset;\n    },\n  },\n\n  /**\n   * The scale to be multiplied to property values as part of the value transform.\n   *\n   * @memberof MetadataClassProperty.prototype\n   * @type {number|number[]|number[][]}\n   * @readonly\n   * @private\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof MetadataTableProperty.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof MetadataTableProperty.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n\n  /**\n   * Size of all typed arrays used by this table property\n   *\n   * @memberof MetadataTableProperty.prototype\n   * @type {Normal}\n   * @readonly\n   * @private\n   */\n  byteLength: {\n    get: function () {\n      return this._byteLength;\n    },\n  },\n\n  /**\n   * The class property that this table property corresponds to.\n   *\n   * @memberof MetadataTableProperty.prototype\n   * @type {MetadataClassProperty}\n   * @readonly\n   * @private\n   */\n  classProperty: {\n    get: function () {\n      return this._classProperty;\n    },\n  },\n});\n\n/**\n * Returns a copy of the value at the given index.\n *\n * @param {number} index The index.\n * @returns {*} The value of the property.\n *\n * @private\n */\nMetadataTableProperty.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  checkIndex(this, index);\n  //>>includeEnd('debug');\n\n  let value = get(this, index);\n\n  // handle noData and default\n  value = this._classProperty.handleNoData(value);\n  if (!defined(value)) {\n    value = this._classProperty.default;\n    return this._classProperty.unpackVectorAndMatrixTypes(value);\n  }\n\n  value = this._classProperty.normalize(value);\n  value = applyValueTransform(this, value);\n  return this._classProperty.unpackVectorAndMatrixTypes(value);\n};\n\n/**\n * Sets the value at the given index.\n *\n * @param {number} index The index.\n * @param {*} value The value of the property.\n *\n * @private\n */\nMetadataTableProperty.prototype.set = function (index, value) {\n  const classProperty = this._classProperty;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"value\", value);\n  checkIndex(this, index);\n  const errorMessage = classProperty.validate(value);\n  if (defined(errorMessage)) {\n    throw new DeveloperError(errorMessage);\n  }\n  //>>includeEnd('debug');\n\n  value = classProperty.packVectorAndMatrixTypes(value);\n  value = unapplyValueTransform(this, value);\n  value = classProperty.unnormalize(value);\n\n  set(this, index, value);\n};\n\n/**\n * Returns a typed array containing the property values.\n *\n * @returns {*} The typed array containing the property values or <code>undefined</code> if the property values are not stored in a typed array.\n *\n * @private\n */\nMetadataTableProperty.prototype.getTypedArray = function () {\n  // Note: depending on the class definition some properties are unpacked to\n  // JS arrays when first accessed and values will be undefined. Generally not\n  // a concern for fixed-length arrays of numbers.\n  if (defined(this._values)) {\n    return this._values.typedArray;\n  }\n\n  return undefined;\n};\n\nfunction flatten(values) {\n  if (!Array.isArray(values)) {\n    return values;\n  }\n\n  const result = [];\n  for (let i = 0; i < values.length; i++) {\n    const value = values[i];\n    if (Array.isArray(value)) {\n      addAllToArray(result, value);\n    } else {\n      result.push(value);\n    }\n  }\n\n  return result;\n}\n\nfunction checkIndex(table, index) {\n  const count = table._count;\n  if (!defined(index) || index < 0 || index >= count) {\n    const maximumIndex = count - 1;\n    throw new DeveloperError(\n      `index is required and between zero and count - 1. Actual value: ${maximumIndex}`,\n    );\n  }\n}\n\nfunction get(property, index) {\n  if (requiresUnpackForGet(property)) {\n    unpackProperty(property);\n  }\n\n  const classProperty = property._classProperty;\n  const isArray = classProperty.isArray;\n  const type = classProperty.type;\n  const componentCount = MetadataType.getComponentCount(type);\n\n  if (defined(property._unpackedValues)) {\n    const value = property._unpackedValues[index];\n    if (isArray) {\n      return clone(value, true);\n    }\n    return value;\n  }\n\n  // handle single values\n  if (!isArray && componentCount === 1) {\n    return property._getValue(index);\n  }\n\n  return getArrayValues(property, classProperty, index);\n}\n\nfunction getArrayValues(property, classProperty, index) {\n  let offset;\n  let length;\n  if (classProperty.isVariableLengthArray) {\n    offset = property._arrayOffsets.get(index);\n    length = property._arrayOffsets.get(index + 1) - offset;\n\n    // for vectors and matrices, the offset and length need to be multiplied\n    // by the component count\n    const componentCount = MetadataType.getComponentCount(classProperty.type);\n    offset *= componentCount;\n    length *= componentCount;\n  } else {\n    const arrayLength = classProperty.arrayLength ?? 1;\n    const componentCount = arrayLength * property._vectorComponentCount;\n    offset = index * componentCount;\n    length = componentCount;\n  }\n\n  const values = new Array(length);\n  for (let i = 0; i < length; i++) {\n    values[i] = property._getValue(offset + i);\n  }\n\n  return values;\n}\n\nfunction set(property, index, value) {\n  if (requiresUnpackForSet(property, index, value)) {\n    unpackProperty(property);\n  }\n\n  const classProperty = property._classProperty;\n  const isArray = classProperty.isArray;\n  const type = classProperty.type;\n  const componentCount = MetadataType.getComponentCount(type);\n\n  if (defined(property._unpackedValues)) {\n    if (classProperty.isArray) {\n      value = clone(value, true);\n    }\n    property._unpackedValues[index] = value;\n    return;\n  }\n\n  // Values are unpacked if the length of a variable-size array changes or the\n  // property has strings. No need to handle these cases below.\n\n  // Handle single values\n  if (!isArray && componentCount === 1) {\n    property._setValue(index, value);\n    return;\n  }\n\n  let offset;\n  let length;\n  if (classProperty.isVariableLengthArray) {\n    offset = property._arrayOffsets.get(index);\n    length = property._arrayOffsets.get(index + 1) - offset;\n  } else {\n    const arrayLength = classProperty.arrayLength ?? 1;\n    const componentCount = arrayLength * property._vectorComponentCount;\n    offset = index * componentCount;\n    length = componentCount;\n  }\n\n  for (let i = 0; i < length; ++i) {\n    property._setValue(offset + i, value[i]);\n  }\n}\n\nfunction getString(index, values, stringOffsets) {\n  const stringByteOffset = stringOffsets.get(index);\n  const stringByteLength = stringOffsets.get(index + 1) - stringByteOffset;\n  return getStringFromTypedArray(\n    values.typedArray,\n    stringByteOffset,\n    stringByteLength,\n  );\n}\n\nfunction getBoolean(index, values) {\n  // byteIndex is floor(index / 8)\n  const byteIndex = index >> 3;\n  const bitIndex = index % 8;\n  return ((values.typedArray[byteIndex] >> bitIndex) & 1) === 1;\n}\n\nfunction setBoolean(index, values, value) {\n  // byteIndex is floor(index / 8)\n  const byteIndex = index >> 3;\n  const bitIndex = index % 8;\n\n  if (value) {\n    values.typedArray[byteIndex] |= 1 << bitIndex;\n  } else {\n    values.typedArray[byteIndex] &= ~(1 << bitIndex);\n  }\n}\n\nfunction getInt64NumberFallback(index, values) {\n  const dataView = values.dataView;\n  const byteOffset = index * 8;\n  let value = 0;\n  const isNegative = (dataView.getUint8(byteOffset + 7) & 0x80) > 0;\n  let carrying = true;\n  for (let i = 0; i < 8; ++i) {\n    let byte = dataView.getUint8(byteOffset + i);\n    if (isNegative) {\n      if (carrying) {\n        if (byte !== 0x00) {\n          byte = ~(byte - 1) & 0xff;\n          carrying = false;\n        }\n      } else {\n        byte = ~byte & 0xff;\n      }\n    }\n    value += byte * Math.pow(256, i);\n  }\n  if (isNegative) {\n    value = -value;\n  }\n  return value;\n}\n\nfunction getInt64BigIntFallback(index, values) {\n  const dataView = values.dataView;\n  const byteOffset = index * 8;\n  let value = BigInt(0);\n  const isNegative = (dataView.getUint8(byteOffset + 7) & 0x80) > 0;\n  let carrying = true;\n  for (let i = 0; i < 8; ++i) {\n    let byte = dataView.getUint8(byteOffset + i);\n    if (isNegative) {\n      if (carrying) {\n        if (byte !== 0x00) {\n          byte = ~(byte - 1) & 0xff;\n          carrying = false;\n        }\n      } else {\n        byte = ~byte & 0xff;\n      }\n    }\n    value += BigInt(byte) * (BigInt(1) << BigInt(i * 8));\n  }\n  if (isNegative) {\n    value = -value;\n  }\n  return value;\n}\n\nfunction getUint64NumberFallback(index, values) {\n  const dataView = values.dataView;\n  const byteOffset = index * 8;\n\n  // Split 64-bit number into two 32-bit (4-byte) parts\n  const left = dataView.getUint32(byteOffset, true);\n  const right = dataView.getUint32(byteOffset + 4, true);\n\n  // Combine the two 32-bit values\n  const value = left + 4294967296 * right;\n\n  return value;\n}\n\nfunction getUint64BigIntFallback(index, values) {\n  const dataView = values.dataView;\n  const byteOffset = index * 8;\n\n  // Split 64-bit number into two 32-bit (4-byte) parts\n  const left = BigInt(dataView.getUint32(byteOffset, true));\n\n  const right = BigInt(dataView.getUint32(byteOffset + 4, true));\n\n  // Combine the two 32-bit values\n  const value = left + BigInt(4294967296) * right;\n\n  return value;\n}\n\nfunction getComponentDatatype(componentType) {\n  switch (componentType) {\n    case MetadataComponentType.INT8:\n      return ComponentDatatype.BYTE;\n    case MetadataComponentType.UINT8:\n      return ComponentDatatype.UNSIGNED_BYTE;\n    case MetadataComponentType.INT16:\n      return ComponentDatatype.SHORT;\n    case MetadataComponentType.UINT16:\n      return ComponentDatatype.UNSIGNED_SHORT;\n    case MetadataComponentType.INT32:\n      return ComponentDatatype.INT;\n    case MetadataComponentType.UINT32:\n      return ComponentDatatype.UNSIGNED_INT;\n    case MetadataComponentType.FLOAT32:\n      return ComponentDatatype.FLOAT;\n    case MetadataComponentType.FLOAT64:\n      return ComponentDatatype.DOUBLE;\n  }\n}\n\nfunction requiresUnpackForGet(property) {\n  if (defined(property._unpackedValues)) {\n    return false;\n  }\n\n  const classProperty = property._classProperty;\n  const type = classProperty.type;\n  const valueType = classProperty.valueType;\n\n  if (type === MetadataType.STRING) {\n    // Unpack since UTF-8 decoding is expensive\n    return true;\n  }\n\n  if (\n    valueType === MetadataComponentType.INT64 &&\n    !FeatureDetection.supportsBigInt64Array()\n  ) {\n    // Unpack since the fallback INT64 getters are expensive\n    return true;\n  }\n\n  if (\n    valueType === MetadataComponentType.UINT64 &&\n    !FeatureDetection.supportsBigUint64Array()\n  ) {\n    // Unpack since the fallback UINT64 getters are expensive\n    return true;\n  }\n\n  return false;\n}\n\nfunction requiresUnpackForSet(property, index, value) {\n  if (requiresUnpackForGet(property)) {\n    return true;\n  }\n\n  const arrayOffsets = property._arrayOffsets;\n  if (defined(arrayOffsets)) {\n    // Unpacking is required if a variable-size array changes length since it\n    // would be expensive to repack the binary data\n    const oldLength = arrayOffsets.get(index + 1) - arrayOffsets.get(index);\n    const newLength = value.length;\n    if (oldLength !== newLength) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction unpackProperty(property) {\n  property._unpackedValues = unpackValues(property);\n\n  // Free memory\n  property._arrayOffsets = undefined;\n  property._stringOffsets = undefined;\n  property._values = undefined;\n}\n\nfunction unpackValues(property) {\n  const count = property._count;\n  const unpackedValues = new Array(count);\n\n  const classProperty = property._classProperty;\n  const isArray = classProperty.isArray;\n  const type = classProperty.type;\n  const componentCount = MetadataType.getComponentCount(type);\n\n  // Handle single values\n  if (!isArray && componentCount === 1) {\n    for (let i = 0; i < count; ++i) {\n      unpackedValues[i] = property._getValue(i);\n    }\n    return unpackedValues;\n  }\n\n  for (let i = 0; i < count; i++) {\n    unpackedValues[i] = getArrayValues(property, classProperty, i);\n  }\n  return unpackedValues;\n}\n\nfunction applyValueTransform(property, value) {\n  const classProperty = property._classProperty;\n  const isVariableLengthArray = classProperty.isVariableLengthArray;\n  if (!property._hasValueTransform || isVariableLengthArray) {\n    return value;\n  }\n\n  return MetadataClassProperty.valueTransformInPlace(\n    value,\n    property._offset,\n    property._scale,\n    MetadataComponentType.applyValueTransform,\n  );\n}\n\nfunction unapplyValueTransform(property, value) {\n  const classProperty = property._classProperty;\n  const isVariableLengthArray = classProperty.isVariableLengthArray;\n  if (!property._hasValueTransform || isVariableLengthArray) {\n    return value;\n  }\n\n  return MetadataClassProperty.valueTransformInPlace(\n    value,\n    property._offset,\n    property._scale,\n    MetadataComponentType.unapplyValueTransform,\n  );\n}\n\nfunction BufferView(bufferView, componentType, length) {\n  const that = this;\n\n  let typedArray;\n  let getFunction;\n  let setFunction;\n\n  if (componentType === MetadataComponentType.INT64) {\n    if (!FeatureDetection.supportsBigInt()) {\n      oneTimeWarning(\n        \"INT64 type is not fully supported on this platform. Values greater than 2^53 - 1 or less than -(2^53 - 1) may lose precision when read.\",\n      );\n      typedArray = new Uint8Array(\n        bufferView.buffer,\n        bufferView.byteOffset,\n        length * 8,\n      );\n      getFunction = function (index) {\n        return getInt64NumberFallback(index, that);\n      };\n    } else if (!FeatureDetection.supportsBigInt64Array()) {\n      typedArray = new Uint8Array(\n        bufferView.buffer,\n        bufferView.byteOffset,\n        length * 8,\n      );\n      getFunction = function (index) {\n        return getInt64BigIntFallback(index, that);\n      };\n    } else {\n      typedArray = new BigInt64Array(\n        bufferView.buffer,\n        bufferView.byteOffset,\n        length,\n      );\n      setFunction = function (index, value) {\n        // Convert the number to a BigInt before setting the value in the typed array\n        that.typedArray[index] = BigInt(value);\n      };\n    }\n  } else if (componentType === MetadataComponentType.UINT64) {\n    if (!FeatureDetection.supportsBigInt()) {\n      oneTimeWarning(\n        \"UINT64 type is not fully supported on this platform. Values greater than 2^53 - 1 may lose precision when read.\",\n      );\n      typedArray = new Uint8Array(\n        bufferView.buffer,\n        bufferView.byteOffset,\n        length * 8,\n      );\n      getFunction = function (index) {\n        return getUint64NumberFallback(index, that);\n      };\n    } else if (!FeatureDetection.supportsBigUint64Array()) {\n      typedArray = new Uint8Array(\n        bufferView.buffer,\n        bufferView.byteOffset,\n        length * 8,\n      );\n      getFunction = function (index) {\n        return getUint64BigIntFallback(index, that);\n      };\n    } else {\n      typedArray = new BigUint64Array(\n        bufferView.buffer,\n        bufferView.byteOffset,\n        length,\n      );\n      setFunction = function (index, value) {\n        // Convert the number to a BigInt before setting the value in the typed array\n        that.typedArray[index] = BigInt(value);\n      };\n    }\n  } else {\n    const componentDatatype = getComponentDatatype(componentType);\n    typedArray = ComponentDatatype.createArrayBufferView(\n      componentDatatype,\n      bufferView.buffer,\n      bufferView.byteOffset,\n      length,\n    );\n    setFunction = function (index, value) {\n      that.typedArray[index] = value;\n    };\n  }\n\n  if (!defined(getFunction)) {\n    getFunction = function (index) {\n      return that.typedArray[index];\n    };\n  }\n\n  this.typedArray = typedArray;\n  this.dataView = new DataView(typedArray.buffer, typedArray.byteOffset);\n  this.get = getFunction;\n  this.set = setFunction;\n\n  // for unit testing\n  this._componentType = componentType;\n}\n\nexport default MetadataTableProperty;\n","import Check from \"../Core/Check.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\n\n/**\n * An instance of a metadata value.<br>\n * <br>\n * This can be one of the following types:\n * <ul>\n *   <li><code>number</code> for type <code>SCALAR</code> and numeric component types except for <code>INT64</code> or <code>UINT64</code></li>\n *   <li><code>bigint</code> for type <code>SCALAR</code> and component type <code>INT64</code> or <code>UINT64</code></li>\n *   <li><code>string</code> for type <code>STRING</code> or <code>ENUM</code></li>\n *   <li><code>boolean</code> for type <code>BOOLEAN</code></li>\n *   <li><code>Cartesian2</code> for type <code>VEC2</code></li>\n *   <li><code>Cartesian3</code> for type <code>VEC3</code></li>\n *   <li><code>Cartesian4</code> for type <code>VEC4</code></li>\n *   <li><code>Matrix2</code> for type <code>MAT2</code></li>\n *   <li><code>Matrix3</code> for type <code>MAT3</code></li>\n *   <li><code>Matrix4</code> for type <code>MAT4</code></li>\n *   <li>Arrays of these types when the metadata value is an array</li>\n * </ul>\n * @typedef {(number|bigint|string|boolean|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4|number[]|bigint[]|string[]|boolean[]|Cartesian2[]|Cartesian3[]|Cartesian4[]|Matrix2[]|Matrix3[]|Matrix4[])} MetadataValue\n */\n\n/**\n * An enum of metadata types. These metadata types are containers containing\n * one or more components of type {@link MetadataComponentType}\n *\n * @enum {string}\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst MetadataType = {\n  /**\n   * A single component\n   *\n   * @type {string}\n   * @constant\n   */\n  SCALAR: \"SCALAR\",\n  /**\n   * A vector with two components\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC2: \"VEC2\",\n  /**\n   * A vector with three components\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC3: \"VEC3\",\n  /**\n   * A vector with four components\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC4: \"VEC4\",\n  /**\n   * A 2x2 matrix, stored in column-major format.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT2: \"MAT2\",\n  /**\n   * A 3x3 matrix, stored in column-major format.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT3: \"MAT3\",\n  /**\n   * A 4x4 matrix, stored in column-major format.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT4: \"MAT4\",\n  /**\n   * A boolean (true/false) value\n   *\n   * @type {string}\n   * @constant\n   */\n  BOOLEAN: \"BOOLEAN\",\n  /**\n   * A UTF-8 encoded string value\n   *\n   * @type {string}\n   * @constant\n   */\n  STRING: \"STRING\",\n  /**\n   * An enumerated value. This type is used in conjunction with a {@link MetadataEnum} to describe the valid values.\n   *\n   * @see MetadataEnum\n   *\n   * @type {string}\n   * @constant\n   */\n  ENUM: \"ENUM\",\n};\n\n/**\n * Check if a type is VEC2, VEC3 or VEC4\n *\n * @param {MetadataType} type The type\n * @return {boolean} <code>true</code> if the type is a vector, <code>false</code> otherwise\n * @private\n */\nMetadataType.isVectorType = function (type) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  //>>includeEnd('debug');\n\n  switch (type) {\n    case MetadataType.VEC2:\n    case MetadataType.VEC3:\n    case MetadataType.VEC4:\n      return true;\n    default:\n      return false;\n  }\n};\n\n/**\n * Check if a type is MAT2, MAT3 or MAT4\n *\n * @param {MetadataType} type The type\n * @return {boolean} <code>true</code> if the type is a matrix, <code>false</code> otherwise\n * @private\n */\nMetadataType.isMatrixType = function (type) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  //>>includeEnd('debug');\n\n  switch (type) {\n    case MetadataType.MAT2:\n    case MetadataType.MAT3:\n    case MetadataType.MAT4:\n      return true;\n    default:\n      return false;\n  }\n};\n\n/**\n * Get the number of components for a vector or matrix type. e.g.\n * a VECN returns N, and a MATN returns N*N. All other types return 1.\n *\n * @param {MetadataType} type The type to get the component count for\n * @return {number} The number of components\n * @private\n */\nMetadataType.getComponentCount = function (type) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"type\", type);\n  //>>includeEnd('debug');\n\n  switch (type) {\n    case MetadataType.SCALAR:\n    case MetadataType.STRING:\n    case MetadataType.ENUM:\n    case MetadataType.BOOLEAN:\n      return 1;\n    case MetadataType.VEC2:\n      return 2;\n    case MetadataType.VEC3:\n      return 3;\n    case MetadataType.VEC4:\n      return 4;\n    case MetadataType.MAT2:\n      return 4;\n    case MetadataType.MAT3:\n      return 9;\n    case MetadataType.MAT4:\n      return 16;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(`Invalid metadata type ${type}`);\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Get the corresponding vector or matrix class. This is used to simplify\n * packing and unpacking code.\n * @param {MetadataType} type The metadata type\n * @return {object} The appropriate CartesianN class for vector types, MatrixN class for matrix types, or undefined otherwise.\n * @private\n */\nMetadataType.getMathType = function (type) {\n  switch (type) {\n    case MetadataType.VEC2:\n      return Cartesian2;\n    case MetadataType.VEC3:\n      return Cartesian3;\n    case MetadataType.VEC4:\n      return Cartesian4;\n    case MetadataType.MAT2:\n      return Matrix2;\n    case MetadataType.MAT3:\n      return Matrix3;\n    case MetadataType.MAT4:\n      return Matrix4;\n    default:\n      return undefined;\n  }\n};\n\nexport default Object.freeze(MetadataType);\n","import defined from \"../../Core/defined.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport BlendingState from \"../BlendingState.js\";\nimport Pass from \"../../Renderer/Pass.js\";\n\n/**\n * A pipeline stage for configuring the alpha options for handling translucency.\n *\n * @namespace AlphaPipelineStage\n *\n * @private\n */\nconst AlphaPipelineStage = {\n  name: \"AlphaPipelineStage\", // Helps with debugging\n};\n\nAlphaPipelineStage.process = function (renderResources, primitive, frameState) {\n  const alphaOptions = renderResources.alphaOptions;\n\n  // Ensure the pass is defined\n  const model = renderResources.model;\n  alphaOptions.pass = alphaOptions.pass ?? model.opaquePass;\n\n  const renderStateOptions = renderResources.renderStateOptions;\n  if (alphaOptions.pass === Pass.TRANSLUCENT) {\n    renderStateOptions.cull.enabled = false;\n    renderStateOptions.depthMask = false;\n    renderStateOptions.blending = BlendingState.ALPHA_BLEND;\n  }\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  const uniformMap = renderResources.uniformMap;\n\n  if (defined(alphaOptions.alphaCutoff)) {\n    shaderBuilder.addDefine(\n      \"ALPHA_MODE_MASK\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_alphaCutoff\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_alphaCutoff = function () {\n      return alphaOptions.alphaCutoff;\n    };\n  }\n};\n\nexport default AlphaPipelineStage;\n","import Cartesian3 from \"../../Core/Cartesian3.js\";\nimport CesiumMath from \"../../Core/Math.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport AtmosphereStageFS from \"../../Shaders/Model/AtmosphereStageFS.js\";\nimport AtmosphereStageVS from \"../../Shaders/Model/AtmosphereStageVS.js\";\n\n/**\n * The atmosphere pipeline stage applies all earth atmosphere effects that apply\n * to models, including fog.\n *\n * @namespace AtmospherePipelineStage\n *\n * @private\n */\nconst AtmospherePipelineStage = {\n  name: \"AtmospherePipelineStage\", // Helps with debugging\n};\n\n/**\n * @param {ModelRenderResources} modelRenderResources\n * @param {Model} model\n * @param {FrameState} frameState\n */\nAtmospherePipelineStage.process = function (\n  modelRenderResources,\n  model,\n  frameState,\n) {\n  const shaderBuilder = modelRenderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\"HAS_ATMOSPHERE\", undefined, ShaderDestination.BOTH);\n  shaderBuilder.addDefine(\n    \"COMPUTE_POSITION_WC_ATMOSPHERE\",\n    undefined,\n    ShaderDestination.BOTH,\n  );\n\n  shaderBuilder.addVarying(\"vec3\", \"v_atmosphereRayleighColor\");\n  shaderBuilder.addVarying(\"vec3\", \"v_atmosphereMieColor\");\n  shaderBuilder.addVarying(\"float\", \"v_atmosphereOpacity\");\n\n  shaderBuilder.addVertexLines([AtmosphereStageVS]);\n  shaderBuilder.addFragmentLines([AtmosphereStageFS]);\n\n  // Add a uniform so fog is only calculated when the effect would\n  // be non-negligible. For example when the camera is in space, fog density decreases\n  // to 0 so fog shouldn't be rendered. Since this state may change rapidly if\n  // the camera is moving, this is implemented as a uniform, not a define.\n  shaderBuilder.addUniform(\"bool\", \"u_isInFog\", ShaderDestination.FRAGMENT);\n  modelRenderResources.uniformMap.u_isInFog = function () {\n    // We only need a rough measure of distance to the model, so measure\n    // from the camera to the bounding sphere center.\n    const distance = Cartesian3.distance(\n      frameState.camera.positionWC,\n      model.boundingSphere.center,\n    );\n\n    return (\n      CesiumMath.fog(distance, frameState.fog.density) > CesiumMath.EPSILON3\n    );\n  };\n};\n\nexport default AtmospherePipelineStage;\n","import Axis from \"../Axis.js\";\nimport B3dmParser from \"../B3dmParser.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cesium3DTileFeatureTable from \"../Cesium3DTileFeatureTable.js\";\nimport Check from \"../../Core/Check.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport StructuralMetadata from \"../StructuralMetadata.js\";\nimport GltfLoader from \"../GltfLoader.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport MetadataClass from \"../MetadataClass.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport parseBatchTable from \"../parseBatchTable.js\";\nimport PropertyTable from \"../PropertyTable.js\";\nimport ResourceLoader from \"../ResourceLoader.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\nconst B3dmLoaderState = {\n  UNLOADED: 0,\n  LOADING: 1,\n  PROCESSING: 2,\n  READY: 3,\n  FAILED: 4,\n};\n\nconst FeatureIdAttribute = ModelComponents.FeatureIdAttribute;\n\n/**\n * Loads a Batched 3D Model.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass B3dmLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {Resource} options.b3dmResource The {@link Resource} containing the b3dm.\n   * @param {ArrayBuffer} options.arrayBuffer The array buffer of the b3dm contents.\n   * @param {number} [options.byteOffset] The byte offset to the beginning of the b3dm contents in the array buffer.\n   * @param {Resource} [options.baseResource] The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {boolean} [options.releaseGltfJson=false] When true, the glTF JSON is released once the glTF is loaded. This is especially useful for cases like 3D Tiles, where each .gltf model is unique and caching the glTF JSON is not effective.\n   * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n   * @param {boolean} [options.incrementallyLoadTextures=true] Determine if textures may continue to stream in after the glTF is loaded.\n   * @param {Axis} [options.upAxis=Axis.Y] The up-axis of the glTF model.\n   * @param {Axis} [options.forwardAxis=Axis.X] The forward-axis of the glTF model.\n   * @param {boolean} [options.loadAttributesAsTypedArray=false] If <code>true</code>, load all attributes as typed arrays instead of GPU buffers. If the attributes are interleaved in the glTF they will be de-interleaved in the typed array.\n   * @param {boolean} [options.loadAttributesFor2D=false] If <code>true</code>, load the positions buffer and any instanced attribute buffers as typed arrays for accurately projecting models to 2D.\n   * @param {boolean} [options.enablePick=false]  If <code>true</code>, load the positions buffer, any instanced attribute buffers, and index buffer as typed arrays for CPU-enabled picking in WebGL1.\n   * @param {boolean} [options.loadIndicesForWireframe=false] If <code>true</code>, load the index buffer as a typed array. This is useful for creating wireframe indices in WebGL1.\n   * @param {boolean} [options.loadPrimitiveOutline=true] If <code>true</code>, load outlines from the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. This can be set false to avoid post-processing geometry at load time.\n   * @param {boolean} [options.loadForClassification=false] If <code>true</code> and if the model has feature IDs, load the feature IDs and indices as typed arrays. This is useful for batching features for classification.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n\n    const b3dmResource = options.b3dmResource;\n    let baseResource = options.baseResource;\n    const arrayBuffer = options.arrayBuffer;\n    const byteOffset = options.byteOffset ?? 0;\n    const releaseGltfJson = options.releaseGltfJson ?? false;\n    const asynchronous = options.asynchronous ?? true;\n    const incrementallyLoadTextures = options.incrementallyLoadTextures ?? true;\n    const upAxis = options.upAxis ?? Axis.Y;\n    const forwardAxis = options.forwardAxis ?? Axis.X;\n    const loadAttributesAsTypedArray =\n      options.loadAttributesAsTypedArray ?? false;\n    const loadAttributesFor2D = options.loadAttributesFor2D ?? false;\n    const enablePick = options.enablePick ?? false;\n    const loadIndicesForWireframe = options.loadIndicesForWireframe ?? false;\n    const loadPrimitiveOutline = options.loadPrimitiveOutline ?? true;\n    const loadForClassification = options.loadForClassification ?? false;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"options.b3dmResource\", b3dmResource);\n    Check.typeOf.object(\"options.arrayBuffer\", arrayBuffer);\n    //>>includeEnd('debug');\n\n    baseResource = defined(baseResource) ? baseResource : b3dmResource.clone();\n\n    this._b3dmResource = b3dmResource;\n    this._baseResource = baseResource;\n    this._arrayBuffer = arrayBuffer;\n    this._byteOffset = byteOffset;\n    this._releaseGltfJson = releaseGltfJson;\n    this._asynchronous = asynchronous;\n    this._incrementallyLoadTextures = incrementallyLoadTextures;\n    this._upAxis = upAxis;\n    this._forwardAxis = forwardAxis;\n    this._loadAttributesAsTypedArray = loadAttributesAsTypedArray;\n    this._loadAttributesFor2D = loadAttributesFor2D;\n    this._enablePick = enablePick;\n    this._loadIndicesForWireframe = loadIndicesForWireframe;\n    this._loadPrimitiveOutline = loadPrimitiveOutline;\n    this._loadForClassification = loadForClassification;\n\n    this._state = B3dmLoaderState.UNLOADED;\n\n    this._promise = undefined;\n\n    this._gltfLoader = undefined;\n\n    // Loaded results.\n    this._batchLength = 0;\n    this._propertyTable = undefined;\n\n    // The batch table object contains a json and a binary component access using keys of the same name.\n    this._batchTable = undefined;\n    this._components = undefined;\n    this._transform = Matrix4.IDENTITY;\n  }\n\n  /**\n   * true if textures are loaded, useful when incrementallyLoadTextures is true\n   *\n   * @memberof B3dmLoader.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  get texturesLoaded() {\n    return this._gltfLoader?.texturesLoaded;\n  }\n\n  /**\n   * The cache key of the resource\n   *\n   * @memberof B3dmLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return undefined;\n  }\n\n  /**\n   * The loaded components.\n   *\n   * @memberof B3dmLoader.prototype\n   *\n   * @type {ModelComponents.Components}\n   * @readonly\n   * @private\n   */\n  get components() {\n    return this._components;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<B3dmLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    const b3dm = B3dmParser.parse(this._arrayBuffer, this._byteOffset);\n\n    let batchLength = b3dm.batchLength;\n    const featureTableJson = b3dm.featureTableJson;\n    const featureTableBinary = b3dm.featureTableBinary;\n    const batchTableJson = b3dm.batchTableJson;\n    const batchTableBinary = b3dm.batchTableBinary;\n\n    const featureTable = new Cesium3DTileFeatureTable(\n      featureTableJson,\n      featureTableBinary,\n    );\n    batchLength = featureTable.getGlobalProperty(\"BATCH_LENGTH\");\n    // Set batch length.\n    this._batchLength = batchLength;\n    // Set the RTC Center transform, if present.\n    const rtcCenter = featureTable.getGlobalProperty(\n      \"RTC_CENTER\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n    if (defined(rtcCenter)) {\n      this._transform = Matrix4.fromTranslation(\n        Cartesian3.fromArray(rtcCenter),\n      );\n    }\n\n    this._batchTable = {\n      json: batchTableJson,\n      binary: batchTableBinary,\n    };\n\n    const gltfLoader = new GltfLoader({\n      typedArray: b3dm.gltf,\n      upAxis: this._upAxis,\n      forwardAxis: this._forwardAxis,\n      gltfResource: this._b3dmResource,\n      baseResource: this._baseResource,\n      releaseGltfJson: this._releaseGltfJson,\n      incrementallyLoadTextures: this._incrementallyLoadTextures,\n      loadAttributesAsTypedArray: this._loadAttributesAsTypedArray,\n      loadAttributesFor2D: this._loadAttributesFor2D,\n      enablePick: this._enablePick,\n      loadIndicesForWireframe: this._loadIndicesForWireframe,\n      loadPrimitiveOutline: this._loadPrimitiveOutline,\n      loadForClassification: this._loadForClassification,\n      renameBatchIdSemantic: true,\n    });\n\n    this._gltfLoader = gltfLoader;\n    this._state = B3dmLoaderState.LOADING;\n\n    const that = this;\n    this._promise = gltfLoader\n      .load()\n      .then(function () {\n        if (that.isDestroyed()) {\n          return;\n        }\n\n        that._state = B3dmLoaderState.PROCESSING;\n        return that;\n      })\n      .catch(function (error) {\n        if (that.isDestroyed()) {\n          return;\n        }\n\n        return handleError(that, error);\n      });\n\n    return this._promise;\n  }\n\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === B3dmLoaderState.READY) {\n      return true;\n    }\n\n    if (this._state !== B3dmLoaderState.PROCESSING) {\n      return false;\n    }\n\n    const ready = this._gltfLoader.process(frameState);\n    if (!ready) {\n      return false;\n    }\n\n    const components = this._gltfLoader.components;\n\n    // Combine the RTC_CENTER transform from the b3dm and the CESIUM_RTC\n    // transform from the glTF. In practice usually only one or the\n    // other is supplied. If they don't exist the transforms will\n    // be identity matrices.\n    components.transform = Matrix4.multiplyTransformation(\n      this._transform,\n      components.transform,\n      components.transform,\n    );\n    createStructuralMetadata(this, components);\n    this._components = components;\n\n    // Now that we have the parsed components, we can release the array buffer\n    this._arrayBuffer = undefined;\n\n    this._state = B3dmLoaderState.READY;\n    return true;\n  }\n\n  unload() {\n    if (defined(this._gltfLoader) && !this._gltfLoader.isDestroyed()) {\n      this._gltfLoader.unload();\n    }\n\n    this._components = undefined;\n    this._arrayBuffer = undefined;\n  }\n}\n\nfunction handleError(b3dmLoader, error) {\n  b3dmLoader.unload();\n  b3dmLoader._state = B3dmLoaderState.FAILED;\n  const errorMessage = \"Failed to load b3dm\";\n  error = b3dmLoader.getError(errorMessage, error);\n  return Promise.reject(error);\n}\n\nfunction createStructuralMetadata(loader, components) {\n  const batchTable = loader._batchTable;\n  const batchLength = loader._batchLength;\n\n  if (batchLength === 0) {\n    return;\n  }\n\n  let structuralMetadata;\n  if (defined(batchTable.json)) {\n    // Add the structural metadata from the batch table to the model components.\n    structuralMetadata = parseBatchTable({\n      count: batchLength,\n      batchTable: batchTable.json,\n      binaryBody: batchTable.binary,\n    });\n  } else {\n    // If batch table is not defined, create a property table without any properties.\n    const emptyPropertyTable = new PropertyTable({\n      name: MetadataClass.BATCH_TABLE_CLASS_NAME,\n      count: batchLength,\n    });\n    structuralMetadata = new StructuralMetadata({\n      schema: {},\n      propertyTables: [emptyPropertyTable],\n    });\n  }\n\n  // Add the feature ID attribute to the primitives.\n  const nodes = components.scene.nodes;\n  const length = nodes.length;\n  for (let i = 0; i < length; i++) {\n    processNode(nodes[i]);\n  }\n  components.structuralMetadata = structuralMetadata;\n}\n\n// Recursive function to add the feature ID attribute to all primitives that have a feature ID vertex attribute.\nfunction processNode(node) {\n  const childrenLength = node.children.length;\n  for (let i = 0; i < childrenLength; i++) {\n    processNode(node.children[i]);\n  }\n\n  const primitivesLength = node.primitives.length;\n  for (let i = 0; i < primitivesLength; i++) {\n    const primitive = node.primitives[i];\n    const featureIdVertexAttribute = ModelUtility.getAttributeBySemantic(\n      primitive,\n      VertexAttributeSemantic.FEATURE_ID,\n    );\n    if (defined(featureIdVertexAttribute)) {\n      featureIdVertexAttribute.setIndex = 0;\n      const featureIdAttribute = new FeatureIdAttribute();\n      featureIdAttribute.propertyTableId = 0;\n      featureIdAttribute.setIndex = 0;\n      featureIdAttribute.positionalLabel = \"featureId_0\";\n      primitive.featureIds.push(featureIdAttribute);\n    }\n  }\n}\n\nexport default B3dmLoader;\n","import combine from \"../../Core/combine.js\";\n\n/**\n * The batch texture stage is responsible for setting up the batch texture for the primitive.\n *\n * @namespace BatchTexturePipelineStage\n * @private\n */\nconst BatchTexturePipelineStage = {\n  name: \"BatchTexturePipelineStage\", // Helps with debugging\n};\n\n/**\n * Processes a primitive. This modifies the following parts of the render resources:\n * <ul>\n *  <li>adds uniforms for the batch texture</li>\n *  <li>adds defines for multiline batch textures</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n */\nBatchTexturePipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const batchTextureUniforms = {};\n\n  const model = renderResources.model;\n\n  const featureTable = model.featureTables[model.featureTableId];\n\n  // Number of features in the feature table.\n  const featuresLength = featureTable.featuresLength;\n  shaderBuilder.addUniform(\"int\", \"model_featuresLength\");\n  batchTextureUniforms.model_featuresLength = function () {\n    return featuresLength;\n  };\n\n  // Batch texture\n  const batchTexture = featureTable.batchTexture;\n  shaderBuilder.addUniform(\"sampler2D\", \"model_batchTexture\");\n  batchTextureUniforms.model_batchTexture = function () {\n    return batchTexture.batchTexture ?? batchTexture.defaultTexture;\n  };\n\n  // Batch texture step size\n  shaderBuilder.addUniform(\"vec4\", \"model_textureStep\");\n  batchTextureUniforms.model_textureStep = function () {\n    return batchTexture.textureStep;\n  };\n\n  // Batch texture dimensions\n  if (batchTexture.textureDimensions.y > 1) {\n    shaderBuilder.addDefine(\"MULTILINE_BATCH_TEXTURE\");\n    shaderBuilder.addUniform(\"vec2\", \"model_textureDimensions\");\n    batchTextureUniforms.model_textureDimensions = function () {\n      return batchTexture.textureDimensions;\n    };\n  }\n\n  renderResources.uniformMap = combine(\n    batchTextureUniforms,\n    renderResources.uniformMap,\n  );\n};\n\nexport default BatchTexturePipelineStage;\n","import ColorBlendMode from \"../ColorBlendMode.js\";\nimport CPUStylingStageVS from \"../../Shaders/Model/CPUStylingStageVS.js\";\nimport CPUStylingStageFS from \"../../Shaders/Model/CPUStylingStageFS.js\";\nimport defined from \"../../Core/defined.js\";\nimport ModelColorPipelineStage from \"./ModelColorPipelineStage.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\n\n/**\n * The CPU styling stage is responsible for ensuring that the feature's color\n * is applied at runtime.\n *\n * @namespace CPUStylingPipelineStage\n *\n * @private\n */\nconst CPUStylingPipelineStage = {\n  name: \"CPUStylingPipelineStage\", // Helps with debugging\n};\n\n/**\n * Processes a primitive. This modifies the following parts of the render resources:\n * <ul>\n *  <li>adds the styling code to both the vertex and fragment shaders</li>\n *  <li>adds the define to trigger the stage's shader functions</li>\n *  <li>adds a uniform with the model's color blend mode and amount</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nCPUStylingPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const model = renderResources.model;\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addVertexLines(CPUStylingStageVS);\n  shaderBuilder.addFragmentLines(CPUStylingStageFS);\n  shaderBuilder.addDefine(\"USE_CPU_STYLING\", undefined, ShaderDestination.BOTH);\n\n  // These uniforms may have already been added by the ModelColorStage\n  // if a static color is applied.\n  if (!defined(model.color)) {\n    shaderBuilder.addUniform(\n      \"float\",\n      ModelColorPipelineStage.COLOR_BLEND_UNIFORM_NAME,\n      ShaderDestination.FRAGMENT,\n    );\n    renderResources.uniformMap[\n      ModelColorPipelineStage.COLOR_BLEND_UNIFORM_NAME\n    ] = function () {\n      return ColorBlendMode.getColorBlend(\n        model.colorBlendMode,\n        model.colorBlendAmount,\n      );\n    };\n  }\n\n  shaderBuilder.addUniform(\n    \"bool\",\n    \"model_commandTranslucent\",\n    ShaderDestination.BOTH,\n  );\n  renderResources.uniformMap.model_commandTranslucent = function () {\n    // Always check the current value, because custom shaders may\n    // change the value with the translucencyMode parameter\n    return renderResources.alphaOptions.pass === Pass.TRANSLUCENT;\n  };\n};\n\nexport default CPUStylingPipelineStage;\n","/**\n * Internal class for texture coordinate and index range computations.\n *\n * @private\n */\nclass CartesianRectangle {\n  /**\n   * Creates a new instance\n   *\n   * @param {number} [minX=0] The minimum x-coordinate\n   * @param {number} [minY=0] The minimum y-coordinate\n   * @param {number} [maxX=0] The maximum x-coordinate\n   * @param {number} [maxY=0] The maximum y-coordinate\n   */\n  constructor(minX, minY, maxX, maxY) {\n    this._minX = minX ?? 0.0;\n    this._minY = minY ?? 0.0;\n    this._maxX = maxX ?? 0.0;\n    this._maxY = maxY ?? 0.0;\n  }\n\n  /**\n   * Returns the minimum x-coordinate\n   *\n   * @returns {number} The coordinate\n   */\n  get minX() {\n    return this._minX;\n  }\n  set minX(value) {\n    this._minX = value;\n  }\n\n  /**\n   * Returns the minimum y-coordinate\n   *\n   * @returns {number} The coordinate\n   */\n  get minY() {\n    return this._minY;\n  }\n  set minY(value) {\n    this._minY = value;\n  }\n\n  /**\n   * Returns the maximum x-coordinate\n   *\n   * @returns {number} The coordinate\n   */\n  get maxX() {\n    return this._maxX;\n  }\n  set maxX(value) {\n    this._maxX = value;\n  }\n\n  /**\n   * Returns the maximum y-coordinate\n   *\n   * @returns {number} The coordinate\n   */\n  get maxY() {\n    return this._maxY;\n  }\n  set maxY(value) {\n    this._maxY = value;\n  }\n\n  /**\n   * Returns whether this rectangle contains the given coordinates,\n   * using the default containment check, which includes the\n   * minimum point, but excludes the maximum point\n   *\n   * @param {number} x The x-coordinate\n   * @param {number} y The y-coordinate\n   * @returns {boolean} The result\n   */\n  contains(x, y) {\n    return x >= this.minX && x < this.maxX && y >= this.minY && y < this.maxY;\n  }\n\n  /**\n   * Returns whether this rectangle contains the given coordinates,\n   * excluding the border\n   *\n   * @param {number} x The x-coordinate\n   * @param {number} y The y-coordinate\n   * @returns {boolean} The result\n   */\n  containsExclusive(x, y) {\n    return x > this.minX && x < this.maxX && y > this.minY && y < this.maxY;\n  }\n\n  /**\n   * Returns whether this rectangle contains the given coordinates,\n   * including the border\n   *\n   * @param {number} x The x-coordinate\n   * @param {number} y The y-coordinate\n   * @returns {boolean} The result\n   */\n  containsInclusive(x, y) {\n    return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n  }\n}\n\nexport default CartesianRectangle;\n","import addAllToArray from \"../../Core/addAllToArray.js\";\nimport BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport DrawCommand from \"../../Renderer/DrawCommand.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport RenderState from \"../../Renderer/RenderState.js\";\nimport BlendingState from \"../BlendingState.js\";\nimport ClassificationType from \"../ClassificationType.js\";\nimport DepthFunction from \"../DepthFunction.js\";\nimport StencilConstants from \"../StencilConstants.js\";\nimport StencilFunction from \"../StencilFunction.js\";\nimport StencilOperation from \"../StencilOperation.js\";\n\n/**\n * A wrapper around the draw commands used to render a classification model,\n * i.e. a {@link Model} that classifies another asset. This manages the\n * derived commands and returns only the necessary commands depending on the\n * given frame state.\n *\n * @param {object} options An object containing the following options:\n * @param {DrawCommand} options.command The draw command from which to derive other commands from.\n * @param {PrimitiveRenderResources} options.primitiveRenderResources The render resources of the primitive associated with the command.\n *\n * @alias ClassificationModelDrawCommand\n * @constructor\n *\n * @private\n */\nfunction ClassificationModelDrawCommand(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const command = options.command;\n  const renderResources = options.primitiveRenderResources;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.command\", command);\n  Check.typeOf.object(\"options.primitiveRenderResources\", renderResources);\n  //>>includeEnd('debug');\n\n  const model = renderResources.model;\n\n  this._command = command;\n  this._model = model;\n  this._runtimePrimitive = renderResources.runtimePrimitive;\n\n  // Classification models aren't supported in 2D mode, so there's no need to\n  // duplicate the model matrix for each derived command.\n  this._modelMatrix = command.modelMatrix;\n  this._boundingVolume = command.boundingVolume;\n  this._cullFace = command.renderState.cull.face;\n\n  const type = model.classificationType;\n  this._classificationType = type;\n\n  // ClassificationType has three values: terrain only, 3D Tiles only, or both.\n  this._classifiesTerrain = type !== ClassificationType.CESIUM_3D_TILE;\n  this._classifies3DTiles = type !== ClassificationType.TERRAIN;\n\n  this._useDebugWireframe = model._enableDebugWireframe && model.debugWireframe;\n  this._pickId = renderResources.pickId;\n\n  this._commandListTerrain = [];\n  this._commandList3DTiles = [];\n  this._commandListIgnoreShow = []; // Used for inverted classification.\n  this._commandListDebugWireframe = [];\n\n  this._commandListTerrainPicking = [];\n  this._commandList3DTilesPicking = [];\n\n  initialize(this);\n}\n\nfunction getStencilDepthRenderState(stencilFunction) {\n  return {\n    colorMask: {\n      red: false,\n      green: false,\n      blue: false,\n      alpha: false,\n    },\n    stencilTest: {\n      enabled: true,\n      frontFunction: stencilFunction,\n      frontOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.DECREMENT_WRAP,\n        zPass: StencilOperation.KEEP,\n      },\n      backFunction: stencilFunction,\n      backOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.INCREMENT_WRAP,\n        zPass: StencilOperation.KEEP,\n      },\n      reference: StencilConstants.CESIUM_3D_TILE_MASK,\n      mask: StencilConstants.CESIUM_3D_TILE_MASK,\n    },\n    stencilMask: StencilConstants.CLASSIFICATION_MASK,\n    depthTest: {\n      enabled: true,\n      func: DepthFunction.LESS_OR_EQUAL,\n    },\n    depthMask: false,\n  };\n}\n\nconst colorRenderState = {\n  stencilTest: {\n    enabled: true,\n    frontFunction: StencilFunction.NOT_EQUAL,\n    frontOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    backFunction: StencilFunction.NOT_EQUAL,\n    backOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    reference: 0,\n    mask: StencilConstants.CLASSIFICATION_MASK,\n  },\n  stencilMask: StencilConstants.CLASSIFICATION_MASK,\n  depthTest: {\n    enabled: false,\n  },\n  depthMask: false,\n  blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n};\n\nconst pickRenderState = {\n  stencilTest: {\n    enabled: true,\n    frontFunction: StencilFunction.NOT_EQUAL,\n    frontOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    backFunction: StencilFunction.NOT_EQUAL,\n    backOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    reference: 0,\n    mask: StencilConstants.CLASSIFICATION_MASK,\n  },\n  stencilMask: StencilConstants.CLASSIFICATION_MASK,\n  depthTest: {\n    enabled: false,\n  },\n  depthMask: false,\n};\n\nconst scratchDerivedCommands = [];\n\nfunction initialize(drawCommand) {\n  const command = drawCommand._command;\n  const derivedCommands = scratchDerivedCommands;\n\n  // If debug wireframe is enabled, don't derive any new commands.\n  // Render normally in the opaque pass.\n  if (drawCommand._useDebugWireframe) {\n    command.pass = Pass.OPAQUE;\n\n    derivedCommands.length = 0;\n    derivedCommands.push(command);\n\n    drawCommand._commandListDebugWireframe = createBatchCommands(\n      drawCommand,\n      derivedCommands,\n      drawCommand._commandListDebugWireframe,\n    );\n\n    const commandList = drawCommand._commandListDebugWireframe;\n    const length = commandList.length;\n    for (let i = 0; i < length; i++) {\n      // The lengths / offsets of the batches have to be adjusted for wireframe.\n      // Only PrimitiveType.TRIANGLES is allowed for classification, so this\n      // just requires doubling the values for the batches.\n      const command = commandList[i];\n      command.count *= 2;\n      command.offset *= 2;\n    }\n\n    return;\n  }\n\n  const model = drawCommand.model;\n  const allowPicking = model.allowPicking;\n\n  if (drawCommand._classifiesTerrain) {\n    const pass = Pass.TERRAIN_CLASSIFICATION;\n    const stencilDepthCommand = deriveStencilDepthCommand(command, pass);\n    const colorCommand = deriveColorCommand(command, pass);\n\n    derivedCommands.length = 0;\n    derivedCommands.push(stencilDepthCommand, colorCommand);\n\n    drawCommand._commandListTerrain = createBatchCommands(\n      drawCommand,\n      derivedCommands,\n      drawCommand._commandListTerrain,\n    );\n\n    if (allowPicking) {\n      drawCommand._commandListTerrainPicking = createPickCommands(\n        drawCommand,\n        derivedCommands,\n        drawCommand._commandListTerrainPicking,\n      );\n    }\n  }\n\n  if (drawCommand._classifies3DTiles) {\n    const pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    const stencilDepthCommand = deriveStencilDepthCommand(command, pass);\n    const colorCommand = deriveColorCommand(command, pass);\n\n    derivedCommands.length = 0;\n    derivedCommands.push(stencilDepthCommand, colorCommand);\n\n    drawCommand._commandList3DTiles = createBatchCommands(\n      drawCommand,\n      derivedCommands,\n      drawCommand._commandList3DTiles,\n    );\n\n    if (allowPicking) {\n      drawCommand._commandList3DTilesPicking = createPickCommands(\n        drawCommand,\n        derivedCommands,\n        drawCommand._commandList3DTilesPicking,\n      );\n    }\n  }\n}\n\nfunction createBatchCommands(drawCommand, derivedCommands, result) {\n  const runtimePrimitive = drawCommand._runtimePrimitive;\n  const batchLengths = runtimePrimitive.batchLengths;\n  const batchOffsets = runtimePrimitive.batchOffsets;\n\n  const numBatches = batchLengths.length;\n  const numDerivedCommands = derivedCommands.length;\n  for (let i = 0; i < numBatches; i++) {\n    const batchLength = batchLengths[i];\n    const batchOffset = batchOffsets[i];\n    // For multiple derived commands (e.g. stencil and color commands),\n    // they must be added in a certain order even within the batches.\n    for (let j = 0; j < numDerivedCommands; j++) {\n      const derivedCommand = derivedCommands[j];\n      const batchCommand = DrawCommand.shallowClone(derivedCommand);\n      batchCommand.count = batchLength;\n      batchCommand.offset = batchOffset;\n      result.push(batchCommand);\n    }\n  }\n\n  return result;\n}\n\nfunction deriveStencilDepthCommand(command, pass) {\n  const stencilDepthCommand = DrawCommand.shallowClone(command);\n  stencilDepthCommand.cull = false;\n  stencilDepthCommand.pass = pass;\n\n  const stencilFunction =\n    pass === Pass.TERRAIN_CLASSIFICATION\n      ? StencilFunction.ALWAYS\n      : StencilFunction.EQUAL;\n  const renderState = getStencilDepthRenderState(stencilFunction);\n  stencilDepthCommand.renderState = RenderState.fromCache(renderState);\n\n  return stencilDepthCommand;\n}\n\nfunction deriveColorCommand(command, pass) {\n  const colorCommand = DrawCommand.shallowClone(command);\n  colorCommand.cull = false;\n  colorCommand.pass = pass;\n\n  colorCommand.renderState = RenderState.fromCache(colorRenderState);\n\n  return colorCommand;\n}\n\nconst scratchPickCommands = [];\n\nfunction createPickCommands(drawCommand, derivedCommands, commandList) {\n  const renderState = RenderState.fromCache(pickRenderState);\n  const stencilDepthCommand = derivedCommands[0];\n  const colorCommand = derivedCommands[1];\n\n  const pickStencilDepthCommand = DrawCommand.shallowClone(stencilDepthCommand);\n  pickStencilDepthCommand.cull = true;\n  pickStencilDepthCommand.pickOnly = true;\n\n  const pickColorCommand = DrawCommand.shallowClone(colorCommand);\n  pickColorCommand.cull = true;\n  pickColorCommand.pickOnly = true;\n  pickColorCommand.renderState = renderState;\n  pickColorCommand.pickId = drawCommand._pickId;\n\n  const pickCommands = scratchPickCommands;\n  pickCommands.length = 0;\n  pickCommands.push(pickStencilDepthCommand, pickColorCommand);\n\n  return createBatchCommands(drawCommand, pickCommands, commandList);\n}\n\nObject.defineProperties(ClassificationModelDrawCommand.prototype, {\n  /**\n   * The main draw command that the other commands are derived from.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {DrawCommand}\n   *\n   * @readonly\n   * @private\n   */\n  command: {\n    get: function () {\n      return this._command;\n    },\n  },\n\n  /**\n   * The runtime primitive that the draw command belongs to.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {ModelRuntimePrimitive}\n   *\n   * @readonly\n   * @private\n   */\n  runtimePrimitive: {\n    get: function () {\n      return this._runtimePrimitive;\n    },\n  },\n\n  /**\n   * The batch lengths used to generate multiple draw commands.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {number[]}\n   *\n   * @readonly\n   * @private\n   */\n  batchLengths: {\n    get: function () {\n      return this._runtimePrimitive.batchLengths;\n    },\n  },\n\n  /**\n   * The batch offsets used to generate multiple draw commands.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {number[]}\n   *\n   * @readonly\n   * @private\n   */\n  batchOffsets: {\n    get: function () {\n      return this._runtimePrimitive.batchOffsets;\n    },\n  },\n\n  /**\n   * The model that the draw command belongs to.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {Model}\n   *\n   * @readonly\n   * @private\n   */\n  model: {\n    get: function () {\n      return this._model;\n    },\n  },\n\n  /**\n   * The classification type of the model that this draw command belongs to.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {ClassificationType}\n   *\n   * @readonly\n   * @private\n   */\n  classificationType: {\n    get: function () {\n      return this._classificationType;\n    },\n  },\n\n  /**\n   * The current model matrix applied to the draw commands.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {Matrix4}\n   *\n   * @readonly\n   * @private\n   */\n  modelMatrix: {\n    get: function () {\n      return this._modelMatrix;\n    },\n    set: function (value) {\n      this._modelMatrix = Matrix4.clone(value, this._modelMatrix);\n      const boundingSphere = this._runtimePrimitive.boundingSphere;\n      this._boundingVolume = BoundingSphere.transform(\n        boundingSphere,\n        this._modelMatrix,\n        this._boundingVolume,\n      );\n    },\n  },\n\n  /**\n   * The bounding volume of the main draw command. This is equivalent\n   * to the primitive's bounding sphere transformed by the draw\n   * command's model matrix.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {BoundingSphere}\n   *\n   * @readonly\n   * @private\n   */\n  boundingVolume: {\n    get: function () {\n      return this._boundingVolume;\n    },\n  },\n\n  /**\n   * Culling is disabled for classification models, so this has no effect on\n   * how the model renders. This only exists to match the interface of\n   * {@link ModelDrawCommand}.\n   *\n   * @memberof ClassificationModelDrawCommand.prototype\n   * @type {CullFace}\n   *\n   * @private\n   */\n  cullFace: {\n    get: function () {\n      return this._cullFace;\n    },\n    set: function (value) {\n      this._cullFace = value;\n    },\n  },\n});\n\n/**\n * Pushes the draw commands necessary to render the primitive.\n *\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} result The array to push the draw commands to.\n *\n * @returns {DrawCommand[]} The modified result parameter.\n *\n * @private\n */\nClassificationModelDrawCommand.prototype.pushCommands = function (\n  frameState,\n  result,\n) {\n  const passes = frameState.passes;\n  if (passes.render) {\n    if (this._useDebugWireframe) {\n      addAllToArray(result, this._commandListDebugWireframe);\n      return;\n    }\n\n    if (this._classifiesTerrain) {\n      addAllToArray(result, this._commandListTerrain);\n    }\n\n    if (this._classifies3DTiles) {\n      addAllToArray(result, this._commandList3DTiles);\n    }\n\n    const useIgnoreShowCommands =\n      frameState.invertClassification && this._classifies3DTiles;\n\n    if (useIgnoreShowCommands) {\n      if (this._commandListIgnoreShow.length === 0) {\n        const pass = Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW;\n        const command = deriveStencilDepthCommand(this._command, pass);\n\n        const derivedCommands = scratchDerivedCommands;\n        derivedCommands.length = 0;\n        derivedCommands.push(command);\n\n        this._commandListIgnoreShow = createBatchCommands(\n          this,\n          derivedCommands,\n          this._commandListIgnoreShow,\n        );\n      }\n\n      addAllToArray(result, this._commandListIgnoreShow);\n    }\n  }\n\n  if (passes.pick) {\n    if (this._classifiesTerrain) {\n      addAllToArray(result, this._commandListTerrainPicking);\n    }\n\n    if (this._classifies3DTiles) {\n      addAllToArray(result, this._commandList3DTilesPicking);\n    }\n  }\n\n  return result;\n};\n\nexport default ClassificationModelDrawCommand;\n","import defined from \"../../Core/defined.js\";\nimport RuntimeError from \"../../Core/RuntimeError.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\n/**\n * The classification pipeline stage is responsible for batching features\n * together to be rendered by the {@link ClassificationModelDrawCommand}.\n *\n * @namespace ClassificationPipelineStage\n *\n * @private\n */\nconst ClassificationPipelineStage = {\n  name: \"ClassificationPipelineStage\", // Helps with debugging\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render resources:\n *\n * <ul>\n *  <li>adds a define to the shader to indicate that the primitive classifies other assets</li>\n *  <li>adds arrays containing batch lengths and offsets to the primitive's resources\n * </ul>\n *\n * <p>\n * See {@link ClassificationModelDrawCommand} for the use of the batch offsets and lengths.\n * </p>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nClassificationPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\n    \"HAS_CLASSIFICATION\",\n    undefined,\n    ShaderDestination.BOTH,\n  );\n\n  const runtimePrimitive = renderResources.runtimePrimitive;\n\n  if (!defined(runtimePrimitive.batchLengths)) {\n    createClassificationBatches(primitive, runtimePrimitive);\n  }\n};\n\nfunction createClassificationBatches(primitive, runtimePrimitive) {\n  const positionAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.POSITION,\n  );\n\n  if (!defined(positionAttribute)) {\n    throw new RuntimeError(\n      \"Primitives must have a position attribute to be used for classification.\",\n    );\n  }\n\n  let indicesArray;\n  const indices = primitive.indices;\n  const hasIndices = defined(indices);\n  if (hasIndices) {\n    indicesArray = indices.typedArray;\n    // Unload the typed array. This is just a pointer to the array in\n    // the index buffer loader.\n    indices.typedArray = undefined;\n  }\n\n  const count = hasIndices ? indices.count : positionAttribute.count;\n  const featureIdAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.FEATURE_ID,\n    0,\n  );\n\n  // If there are no feature IDs, render the primitive in a single batch.\n  if (!defined(featureIdAttribute)) {\n    runtimePrimitive.batchLengths = [count];\n    runtimePrimitive.batchOffsets = [0];\n\n    return;\n  }\n\n  const featureIds = featureIdAttribute.typedArray;\n  // Unload the typed array. This is just a pointer to the array in\n  // the vertex buffer loader, so if the typed array is shared by\n  // multiple primitives (i.e. multiple instances of the same mesh),\n  // this will not affect the other primitives.\n  featureIdAttribute.typedArray = undefined;\n\n  const batchLengths = [];\n  const batchOffsets = [0];\n\n  const firstIndex = hasIndices ? indicesArray[0] : 0;\n  let currentBatchId = featureIds[firstIndex];\n  let currentOffset = 0;\n\n  for (let i = 1; i < count; i++) {\n    const index = hasIndices ? indicesArray[i] : i;\n    const batchId = featureIds[index];\n\n    if (batchId !== currentBatchId) {\n      // Store the length of this batch and begin counting the next one.\n      const batchLength = i - currentOffset;\n      const newOffset = i;\n\n      batchLengths.push(batchLength);\n      batchOffsets.push(newOffset);\n\n      currentOffset = newOffset;\n      currentBatchId = batchId;\n    }\n  }\n\n  const finalBatchLength = count - currentOffset;\n  batchLengths.push(finalBatchLength);\n\n  runtimePrimitive.batchLengths = batchLengths;\n  runtimePrimitive.batchOffsets = batchOffsets;\n}\n\nexport default ClassificationPipelineStage;\n","import Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport CustomShaderMode from \"./CustomShaderMode.js\";\nimport UniformType from \"./UniformType.js\";\nimport TextureManager from \"./TextureManager.js\";\nimport CustomShaderTranslucencyMode from \"./CustomShaderTranslucencyMode.js\";\n\n/**\n * An object describing a uniform, its type, and an initial value\n *\n * @typedef {object} UniformSpecifier\n * @property {UniformType} type The Glsl type of the uniform.\n * @property {boolean|number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4|TextureUniform} value The initial value of the uniform\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\n\n/**\n * A set of variables parsed from the user-defined shader code. These can be\n * used for optimizations when generating the overall shader. Though they are\n * represented as JS objects, the intended use is like a set, so only the\n * existence of keys matter. The values will always be <code>true</code> if\n * defined. This data structure is used because:\n * <ul>\n *   <li>We cannot yet use ES6 Set objects</li>\n *   <li>Using a dictionary automatically de-duplicates variable names</li>\n *   <li>Queries such as <code>variableSet.hasOwnProperty(\"position\")</code> are straightforward</li>\n * </ul>\n * @typedef {Object<string, boolean>} VariableSet\n * @private\n */\n\n/**\n * Variable sets parsed from the user-defined vertex shader text.\n * @typedef {object} VertexVariableSets\n * @property {VariableSet} attributeSet A set of all unique attributes used in the vertex shader via the <code>vsInput.attributes</code> struct.\n * @property {VariableSet} featureIdSet A set of all unique feature ID sets used in the vertex shader via the <code>vsInput.featureIds</code> struct.\n * @property {VariableSet} metadataSet A set of all unique metadata properties used in the vertex shader via the <code>vsInput.metadata</code> struct.\n * @private\n */\n\n/**\n * Variable sets parsed from the user-defined fragment shader text.\n * @typedef {object} FragmentVariableSets\n * @property {VariableSet} attributeSet A set of all unique attributes used in the fragment shader via the <code>fsInput.attributes</code> struct\n * @property {VariableSet} featureIdSet A set of all unique feature ID sets used in the fragment shader via the <code>fsInput.featureIds</code> struct.\n * @property {VariableSet} metadataSet A set of all unique metadata properties used in the fragment shader via the <code>fsInput.metadata</code> struct.\n * @property {VariableSet} materialSet A set of all material variables such as diffuse, specular or alpha that are used in the fragment shader via the <code>material</code> struct.\n * @private\n */\n\n/**\n * A user defined GLSL shader used with {@link Model} as well\n * as {@link Cesium3DTileset}.\n * <p>\n * If texture uniforms are used, additional resource management must be done:\n * </p>\n * <ul>\n *   <li>\n *      The <code>update</code> function must be called each frame. When a\n *      custom shader is passed to a {@link Model} or a\n *      {@link Cesium3DTileset}, this step is handled automaticaly\n *   </li>\n *   <li>\n *      {@link CustomShader#destroy} must be called when the custom shader is\n *      no longer needed to clean up GPU resources properly. The application\n *      is responsible for calling this method.\n *   </li>\n * </ul>\n * <p>\n * See the {@link https://github.com/CesiumGS/cesium/tree/main/Documentation/CustomShaderGuide|Custom Shader Guide} for more detailed documentation.\n * </p>\n *\n * @param {object} options An object with the following options\n * @param {CustomShaderMode} [options.mode=CustomShaderMode.MODIFY_MATERIAL] The custom shader mode, which determines how the custom shader code is inserted into the fragment shader.\n * @param {LightingModel} [options.lightingModel] The lighting model (e.g. PBR or unlit). If present, this overrides the default lighting for the model.\n * @param {CustomShaderTranslucencyMode} [options.translucencyMode=CustomShaderTranslucencyMode.INHERIT] The translucency mode, which determines how the custom shader will be applied. If the value is CustomShaderTransulcencyMode.OPAQUE or CustomShaderTransulcencyMode.TRANSLUCENT, the custom shader will override settings from the model's material. If the value is CustomShaderTransulcencyMode.INHERIT, the custom shader will render as either opaque or translucent depending on the primitive's material settings.\n * @param {Object<string, UniformSpecifier>} [options.uniforms] A dictionary for user-defined uniforms. The key is the uniform name that will appear in the GLSL code. The value is an object that describes the uniform type and initial value\n * @param {Object<string, VaryingType>} [options.varyings] A dictionary for declaring additional GLSL varyings used in the shader. The key is the varying name that will appear in the GLSL code. The value is the data type of the varying. For each varying, the declaration will be added to the top of the shader automatically. The caller is responsible for assigning a value in the vertex shader and using the value in the fragment shader.\n * @param {string} [options.vertexShaderText] The custom vertex shader as a string of GLSL code. It must include a GLSL function called vertexMain. See the example for the expected signature. If not specified, the custom vertex shader step will be skipped in the computed vertex shader.\n * @param {string} [options.fragmentShaderText] The custom fragment shader as a string of GLSL code. It must include a GLSL function called fragmentMain. See the example for the expected signature. If not specified, the custom fragment shader step will be skipped in the computed fragment shader.\n *\n * @alias CustomShader\n * @constructor\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n *\n * @example\n * const customShader = new CustomShader({\n *   uniforms: {\n *     u_colorIndex: {\n *       type: Cesium.UniformType.FLOAT,\n *       value: 1.0\n *     },\n *     u_normalMap: {\n *       type: Cesium.UniformType.SAMPLER_2D,\n *       value: new Cesium.TextureUniform({\n *         url: \"http://example.com/normal.png\"\n *       })\n *     }\n *   },\n *   varyings: {\n *     v_selectedColor: Cesium.VaryingType.VEC3\n *   },\n *   vertexShaderText: `\n *   void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput) {\n *     v_selectedColor = mix(vsInput.attributes.color_0, vsInput.attributes.color_1, u_colorIndex);\n *     vsOutput.positionMC += 0.1 * vsInput.attributes.normal;\n *   }\n *   `,\n *   fragmentShaderText: `\n *   void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {\n *     material.normal = texture(u_normalMap, fsInput.attributes.texCoord_0);\n *     material.diffuse = v_selectedColor;\n *   }\n *   `\n * });\n */\nfunction CustomShader(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * A value determining how the custom shader interacts with the overall\n   * fragment shader. This is used by {@link CustomShaderPipelineStage}\n   *\n   * @type {CustomShaderMode}\n   * @readonly\n   */\n  this.mode = options.mode ?? CustomShaderMode.MODIFY_MATERIAL;\n  /**\n   * The lighting model to use when using the custom shader.\n   * This is used by {@link CustomShaderPipelineStage}\n   *\n   * @type {LightingModel}\n   * @readonly\n   */\n  this.lightingModel = options.lightingModel;\n  /**\n   * Additional uniforms as declared by the user.\n   *\n   * @type {Object<string, UniformSpecifier>}\n   * @readonly\n   */\n  this.uniforms = options.uniforms ?? Frozen.EMPTY_OBJECT;\n  /**\n   * Additional varyings as declared by the user.\n   * This is used by {@link CustomShaderPipelineStage}\n   *\n   * @type {Object<string, VaryingType>}\n   * @readonly\n   */\n  this.varyings = options.varyings ?? Frozen.EMPTY_OBJECT;\n  /**\n   * The user-defined GLSL code for the vertex shader\n   *\n   * @type {string}\n   * @readonly\n   */\n  this.vertexShaderText = options.vertexShaderText;\n  /**\n   * The user-defined GLSL code for the fragment shader\n   *\n   * @type {string}\n   * @readonly\n   */\n  this.fragmentShaderText = options.fragmentShaderText;\n\n  /**\n   * The translucency mode, which determines how the custom shader will be applied. If the value is\n   * CustomShaderTransulcencyMode.OPAQUE or CustomShaderTransulcencyMode.TRANSLUCENT, the custom shader\n   * will override settings from the model's material. If the value isCustomShaderTransulcencyMode.INHERIT,\n   * the custom shader will render as either opaque or translucent depending on the primitive's material settings.\n   *\n   * @type {CustomShaderTranslucencyMode}\n   * @default CustomShaderTranslucencyMode.INHERIT\n   * @readonly\n   */\n  this.translucencyMode =\n    options.translucencyMode ?? CustomShaderTranslucencyMode.INHERIT;\n\n  /**\n   * texture uniforms require some asynchronous processing. This is delegated\n   * to a texture manager.\n   *\n   * @type {TextureManager}\n   * @readonly\n   * @private\n   */\n  this._textureManager = new TextureManager();\n  /**\n   * The default texture (from the {@link Context}) to use while textures\n   * are loading\n   *\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  this._defaultTexture = undefined;\n  /**\n   * The map of uniform names to a function that returns a value. This map\n   * is combined with the overall uniform map used by the {@link DrawCommand}\n   *\n   * @type {Object<string, Function>}\n   * @readonly\n   * @private\n   */\n  this.uniformMap = buildUniformMap(this);\n\n  /**\n   * A collection of variables used in <code>vertexShaderText</code>. This\n   * is used only for optimizations in {@link CustomShaderPipelineStage}.\n   * @type {VertexVariableSets}\n   * @private\n   */\n  this.usedVariablesVertex = {\n    attributeSet: {},\n    featureIdSet: {},\n    metadataSet: {},\n  };\n  /**\n   * A collection of variables used in <code>fragmentShaderText</code>. This\n   * is used only for optimizations in {@link CustomShaderPipelineStage}.\n   * @type {FragmentVariableSets}\n   * @private\n   */\n  this.usedVariablesFragment = {\n    attributeSet: {},\n    featureIdSet: {},\n    metadataSet: {},\n    materialSet: {},\n  };\n\n  findUsedVariables(this);\n  validateBuiltinVariables(this);\n}\n\nfunction buildUniformMap(customShader) {\n  const uniforms = customShader.uniforms;\n  const uniformMap = {};\n  for (const uniformName in uniforms) {\n    if (uniforms.hasOwnProperty(uniformName)) {\n      const uniform = uniforms[uniformName];\n      const type = uniform.type;\n      //>>includeStart('debug', pragmas.debug);\n      if (type === UniformType.SAMPLER_CUBE) {\n        throw new DeveloperError(\n          \"CustomShader does not support samplerCube uniforms\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      if (type === UniformType.SAMPLER_2D) {\n        customShader._textureManager.loadTexture2D(uniformName, uniform.value);\n        uniformMap[uniformName] = createUniformTexture2DFunction(\n          customShader,\n          uniformName,\n        );\n      } else {\n        uniformMap[uniformName] = createUniformFunction(\n          customShader,\n          uniformName,\n        );\n      }\n    }\n  }\n  return uniformMap;\n}\n\nfunction createUniformTexture2DFunction(customShader, uniformName) {\n  return function () {\n    return (\n      customShader._textureManager.getTexture(uniformName) ??\n      customShader._defaultTexture\n    );\n  };\n}\n\nfunction createUniformFunction(customShader, uniformName) {\n  return function () {\n    return customShader.uniforms[uniformName].value;\n  };\n}\n\nfunction getVariables(shaderText, regex, outputSet) {\n  let match;\n  while ((match = regex.exec(shaderText)) !== null) {\n    const variableName = match[1];\n\n    // Using a dictionary like a set. The value doesn't\n    // matter, as this will only be used for queries such as\n    // if (set.hasOwnProperty(variableName)) { ... }\n    outputSet[variableName] = true;\n  }\n}\n\nfunction findUsedVariables(customShader) {\n  const attributeRegex = /[vf]sInput\\.attributes\\.(\\w+)/g;\n  const featureIdRegex = /[vf]sInput\\.featureIds\\.(\\w+)/g;\n  // Metadata is a little more complex. Match the first identifier after:\n  //  - vsInput.metadata.<property>\n  //  - vsInput.metadataClass.<property>\n  //  - vsInput.metadataStatistics.<property>\n  const metadataRegex =\n    /[vf]sInput\\.(?:metadata|metadataClass|metadataStatistics)\\.(\\w+)/g;\n  let attributeSet;\n\n  const vertexShaderText = customShader.vertexShaderText;\n  if (defined(vertexShaderText)) {\n    attributeSet = customShader.usedVariablesVertex.attributeSet;\n    getVariables(vertexShaderText, attributeRegex, attributeSet);\n\n    attributeSet = customShader.usedVariablesVertex.featureIdSet;\n    getVariables(vertexShaderText, featureIdRegex, attributeSet);\n\n    attributeSet = customShader.usedVariablesVertex.metadataSet;\n    getVariables(vertexShaderText, metadataRegex, attributeSet);\n  }\n\n  const fragmentShaderText = customShader.fragmentShaderText;\n  if (defined(fragmentShaderText)) {\n    attributeSet = customShader.usedVariablesFragment.attributeSet;\n    getVariables(fragmentShaderText, attributeRegex, attributeSet);\n\n    attributeSet = customShader.usedVariablesFragment.featureIdSet;\n    getVariables(fragmentShaderText, featureIdRegex, attributeSet);\n\n    attributeSet = customShader.usedVariablesFragment.metadataSet;\n    getVariables(fragmentShaderText, metadataRegex, attributeSet);\n\n    const materialRegex = /material\\.(\\w+)/g;\n    const materialSet = customShader.usedVariablesFragment.materialSet;\n    getVariables(fragmentShaderText, materialRegex, materialSet);\n  }\n}\n\nfunction expandCoordinateAbbreviations(variableName) {\n  const modelCoordinatesRegex = /^.*MC$/;\n  const worldCoordinatesRegex = /^.*WC$/;\n  const eyeCoordinatesRegex = /^.*EC$/;\n\n  if (modelCoordinatesRegex.test(variableName)) {\n    return `${variableName} (model coordinates)`;\n  }\n\n  if (worldCoordinatesRegex.test(variableName)) {\n    return `${variableName} (Cartesian world coordinates)`;\n  }\n\n  if (eyeCoordinatesRegex.test(variableName)) {\n    return `${variableName} (eye coordinates)`;\n  }\n\n  return variableName;\n}\n\nfunction validateVariableUsage(\n  variableSet,\n  incorrectVariable,\n  correctVariable,\n  vertexOrFragment,\n) {\n  if (variableSet.hasOwnProperty(incorrectVariable)) {\n    const message = `${expandCoordinateAbbreviations(\n      incorrectVariable,\n    )} is not available in the ${vertexOrFragment} shader. Did you mean ${expandCoordinateAbbreviations(\n      correctVariable,\n    )} instead?`;\n    throw new DeveloperError(message);\n  }\n}\n\nfunction validateBuiltinVariables(customShader) {\n  const attributesVS = customShader.usedVariablesVertex.attributeSet;\n\n  // names without MC/WC/EC are ambiguous\n  validateVariableUsage(attributesVS, \"position\", \"positionMC\", \"vertex\");\n  validateVariableUsage(attributesVS, \"normal\", \"normalMC\", \"vertex\");\n  validateVariableUsage(attributesVS, \"tangent\", \"tangentMC\", \"vertex\");\n  validateVariableUsage(attributesVS, \"bitangent\", \"bitangentMC\", \"vertex\");\n\n  // world and eye coordinate positions are only available in the fragment shader.\n  validateVariableUsage(attributesVS, \"positionWC\", \"positionMC\", \"vertex\");\n  validateVariableUsage(attributesVS, \"positionEC\", \"positionMC\", \"vertex\");\n\n  // normal, tangent and bitangent are in model coordinates in the vertex shader\n  validateVariableUsage(attributesVS, \"normalEC\", \"normalMC\", \"vertex\");\n  validateVariableUsage(attributesVS, \"tangentEC\", \"tangentMC\", \"vertex\");\n  validateVariableUsage(attributesVS, \"bitangentEC\", \"bitangentMC\", \"vertex\");\n\n  const attributesFS = customShader.usedVariablesFragment.attributeSet;\n\n  // names without MC/WC/EC are ambiguous\n  validateVariableUsage(attributesFS, \"position\", \"positionEC\", \"fragment\");\n  validateVariableUsage(attributesFS, \"normal\", \"normalEC\", \"fragment\");\n  validateVariableUsage(attributesFS, \"tangent\", \"tangentEC\", \"fragment\");\n  validateVariableUsage(attributesFS, \"bitangent\", \"bitangentEC\", \"fragment\");\n\n  // normal, tangent, and bitangent are in eye coordinates in the fragment\n  // shader.\n  validateVariableUsage(attributesFS, \"normalMC\", \"normalEC\", \"fragment\");\n  validateVariableUsage(attributesFS, \"tangentMC\", \"tangentEC\", \"fragment\");\n  validateVariableUsage(attributesFS, \"bitangentMC\", \"bitangentEC\", \"fragment\");\n}\n\n/**\n * Update the value of a uniform declared in the shader\n * @param {string} uniformName The GLSL name of the uniform. This must match one of the uniforms declared in the constructor\n * @param {boolean|number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4|string|Resource|TextureUniform} value The new value of the uniform.\n */\nCustomShader.prototype.setUniform = function (uniformName, value) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"uniformName\", uniformName);\n  Check.defined(\"value\", value);\n  if (!defined(this.uniforms[uniformName])) {\n    throw new DeveloperError(\n      `Uniform ${uniformName} must be declared in the CustomShader constructor.`,\n    );\n  }\n  //>>includeEnd('debug');\n  const uniform = this.uniforms[uniformName];\n  if (uniform.type === UniformType.SAMPLER_2D) {\n    // Textures are loaded asynchronously\n    this._textureManager.loadTexture2D(uniformName, value);\n  } else if (defined(value.clone)) {\n    // clone Cartesian and Matrix types.\n    uniform.value = value.clone(uniform.value);\n  } else {\n    uniform.value = value;\n  }\n};\n\nCustomShader.prototype.update = function (frameState) {\n  this._defaultTexture = frameState.context.defaultTexture;\n  this._textureManager.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see CustomShader#destroy\n */\nCustomShader.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * customShader = customShader && customShader.destroy();\n *\n * @see CustomShader#isDestroyed\n */\nCustomShader.prototype.destroy = function () {\n  this._textureManager = this._textureManager && this._textureManager.destroy();\n  destroyObject(this);\n};\n\nexport default CustomShader;\n","/**\n * An enum describing how the {@link CustomShader} will be added to the\n * fragment shader. This determines how the shader interacts with the material.\n *\n * @enum {string}\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst CustomShaderMode = {\n  /**\n   * The custom shader will be used to modify the results of the material stage\n   * before lighting is applied.\n   *\n   * @type {string}\n   * @constant\n   */\n  MODIFY_MATERIAL: \"MODIFY_MATERIAL\",\n  /**\n   * The custom shader will be used instead of the material stage. This is a hint\n   * to optimize out the material processing code.\n   *\n   * @type {string}\n   * @constant\n   */\n  REPLACE_MATERIAL: \"REPLACE_MATERIAL\",\n};\n\n/**\n * Convert the shader mode to an uppercase identifier for use in GLSL define\n * directives. For example:  <code>#define CUSTOM_SHADER_MODIFY_MATERIAL</code>\n * @param {CustomShaderMode} customShaderMode The shader mode\n * @return {string} The name of the GLSL macro to use\n *\n * @private\n */\nCustomShaderMode.getDefineName = function (customShaderMode) {\n  return `CUSTOM_SHADER_${customShaderMode}`;\n};\n\nexport default Object.freeze(CustomShaderMode);\n","import combine from \"../../Core/combine.js\";\nimport defined from \"../../Core/defined.js\";\nimport oneTimeWarning from \"../../Core/oneTimeWarning.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport CustomShaderStageVS from \"../../Shaders/Model/CustomShaderStageVS.js\";\nimport CustomShaderStageFS from \"../../Shaders/Model/CustomShaderStageFS.js\";\nimport CustomShaderMode from \"./CustomShaderMode.js\";\nimport FeatureIdPipelineStage from \"./FeatureIdPipelineStage.js\";\nimport MetadataPipelineStage from \"./MetadataPipelineStage.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport CustomShaderTranslucencyMode from \"./CustomShaderTranslucencyMode.js\";\n\n/**\n * The custom shader pipeline stage takes GLSL callbacks from the\n * {@link CustomShader} and inserts them into the overall shader code for the\n * {@link Model}. The input to the callback is a struct with many\n * properties that depend on the attributes of the primitive. This shader code\n * is automatically generated by this stage.\n *\n * @namespace CustomShaderPipelineStage\n *\n * @private\n */\nconst CustomShaderPipelineStage = {\n  name: \"CustomShaderPipelineStage\", // Helps with debugging\n\n  STRUCT_ID_ATTRIBUTES_VS: \"AttributesVS\",\n  STRUCT_ID_ATTRIBUTES_FS: \"AttributesFS\",\n  STRUCT_NAME_ATTRIBUTES: \"Attributes\",\n  STRUCT_ID_VERTEX_INPUT: \"VertexInput\",\n  STRUCT_NAME_VERTEX_INPUT: \"VertexInput\",\n  STRUCT_ID_FRAGMENT_INPUT: \"FragmentInput\",\n  STRUCT_NAME_FRAGMENT_INPUT: \"FragmentInput\",\n  FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS: \"initializeInputStructVS\",\n  FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS:\n    \"void initializeInputStruct(out VertexInput vsInput, ProcessedAttributes attributes)\",\n  FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS: \"initializeInputStructFS\",\n  FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS:\n    \"void initializeInputStruct(out FragmentInput fsInput, ProcessedAttributes attributes)\",\n\n  // Expose method for testing.\n  _oneTimeWarning: oneTimeWarning,\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render\n * resources:\n * <ul>\n *   <li>Modifies the shader to include the custom shader code to the vertex and fragment shaders</li>\n *   <li>Modifies the shader to include automatically-generated structs that serve as input to the custom shader callbacks </li>\n *   <li>Modifies the shader to include any additional user-defined uniforms</li>\n *   <li>Modifies the shader to include any additional user-defined varyings</li>\n *   <li>Adds any user-defined uniforms to the uniform map</li>\n *   <li>If the user specified a lighting model, the settings are overridden in the render resources</li>\n * </ul>\n * <p>\n * This pipeline stage is designed to fail gracefully where possible. If the\n * primitive does not have the right attributes to satisfy the shader code,\n * defaults will be inferred (when reasonable to do so). If not, the custom\n * shader will be disabled.\n * <p>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {FrameState} frameState The frame state.\n * @private\n */\nCustomShaderPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const { shaderBuilder, model, alphaOptions } = renderResources;\n  const { customShader } = model;\n\n  // Check the lighting model and translucent options first, as sometimes\n  // these are used even if there is no vertex or fragment shader text.\n  const { lightingModel, translucencyMode } = customShader;\n\n  // if present, the lighting model overrides the material's lighting model.\n  if (defined(lightingModel)) {\n    renderResources.lightingOptions.lightingModel = lightingModel;\n  }\n\n  if (translucencyMode === CustomShaderTranslucencyMode.TRANSLUCENT) {\n    alphaOptions.pass = Pass.TRANSLUCENT;\n  } else if (translucencyMode === CustomShaderTranslucencyMode.OPAQUE) {\n    // Use the default opqaue pass (either OPAQUE or 3D_TILES), regardless of whether\n    // the material pipeline stage used translucent. The default is configured\n    // in AlphaPipelineStage\n    alphaOptions.pass = undefined;\n  }\n  // For CustomShaderTranslucencyMode.INHERIT, do not modify alphaOptions.pass\n\n  // Generate lines of code for the shader, but don't add them to the shader\n  // yet.\n  const generatedCode = generateShaderLines(\n    customShader,\n    primitive,\n    renderResources,\n  );\n\n  // In some corner cases, the primitive may not be compatible with the\n  // shader. In this case, skip the custom shader.\n  if (!generatedCode.customShaderEnabled) {\n    return;\n  }\n  addLinesToShader(shaderBuilder, customShader, generatedCode);\n\n  // the input to the fragment shader may include a low-precision ECEF position\n  if (generatedCode.shouldComputePositionWC) {\n    shaderBuilder.addDefine(\n      \"COMPUTE_POSITION_WC_CUSTOM_SHADER\",\n      undefined,\n      ShaderDestination.BOTH,\n    );\n  }\n\n  if (defined(customShader.vertexShaderText)) {\n    shaderBuilder.addDefine(\n      \"HAS_CUSTOM_VERTEX_SHADER\",\n      undefined,\n      ShaderDestination.VERTEX,\n    );\n  }\n\n  if (defined(customShader.fragmentShaderText)) {\n    shaderBuilder.addDefine(\n      \"HAS_CUSTOM_FRAGMENT_SHADER\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n\n    // add defines like CUSTOM_SHADER_MODIFY_MATERIAL\n    const shaderModeDefine = CustomShaderMode.getDefineName(customShader.mode);\n    shaderBuilder.addDefine(\n      shaderModeDefine,\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  const uniforms = customShader.uniforms;\n  for (const uniformName in uniforms) {\n    if (uniforms.hasOwnProperty(uniformName)) {\n      const uniform = uniforms[uniformName];\n      shaderBuilder.addUniform(uniform.type, uniformName);\n    }\n  }\n\n  const varyings = customShader.varyings;\n  for (const varyingName in varyings) {\n    if (varyings.hasOwnProperty(varyingName)) {\n      const varyingType = varyings[varyingName];\n      shaderBuilder.addVarying(varyingType, varyingName);\n    }\n  }\n\n  renderResources.uniformMap = combine(\n    renderResources.uniformMap,\n    customShader.uniformMap,\n  );\n};\n\n/**\n * @private\n * @param {ModelComponents.Attribute[]} attributes\n * @returns {Object<string, ModelComponents.Attribute>}\n */\nfunction getAttributesByName(attributes) {\n  const names = {};\n  for (let i = 0; i < attributes.length; i++) {\n    const attributeInfo = ModelUtility.getAttributeInfo(attributes[i]);\n    names[attributeInfo.variableName] = attributeInfo;\n  }\n  return names;\n}\n\n// GLSL types of standard attribute types when uniquely defined\nconst attributeTypeLUT = {\n  position: \"vec3\",\n  normal: \"vec3\",\n  tangent: \"vec3\",\n  bitangent: \"vec3\",\n  texCoord: \"vec2\",\n  color: \"vec4\",\n  joints: \"ivec4\",\n  weights: \"vec4\",\n};\n\n// Corresponding attribute values\nconst attributeDefaultValueLUT = {\n  position: \"vec3(0.0)\",\n  normal: \"vec3(0.0, 0.0, 1.0)\",\n  tangent: \"vec3(1.0, 0.0, 0.0)\",\n  bitangent: \"vec3(0.0, 1.0, 0.0)\",\n  texCoord: \"vec2(0.0)\",\n  color: \"vec4(1.0)\",\n  joints: \"ivec4(0)\",\n  weights: \"vec4(0.0)\",\n};\n\nfunction inferAttributeDefaults(attributeName) {\n  // remove trailing set indices. E.g. \"texCoord_0\" -> \"texCoord\"\n  let trimmed = attributeName.replace(/_[0-9]+$/, \"\");\n  // also remove the MC/EC since they will have the same default value\n  trimmed = trimmed.replace(/(MC|EC)$/, \"\");\n\n  const glslType = attributeTypeLUT[trimmed];\n  const value = attributeDefaultValueLUT[trimmed];\n\n  // - _CUSTOM_ATTRIBUTE has an unknown type.\n  if (!defined(glslType)) {\n    return undefined;\n  }\n\n  return {\n    attributeField: [glslType, attributeName],\n    value: value,\n  };\n}\n\n/**\n * @private\n * @param {CustomShader} customShader\n * @param {Object<string, ModelComponents.Attribute>} attributesByName\n * @param {Set<string>} primitivePropertyIds all property IDs referenced by the primitive being processed, across all its property textures, property attributes, and property tables.\n * @returns {object}\n */\nfunction generateVertexShaderLines(\n  customShader,\n  attributesByName,\n  primitivePropertyIds,\n) {\n  if (!defined(customShader.vertexShaderText)) {\n    return { enabled: false };\n  }\n\n  const usedVariables = customShader.usedVariablesVertex;\n  if (\n    !checkMetadataCompatibility(usedVariables.metadataSet, primitivePropertyIds)\n  ) {\n    return { enabled: false };\n  }\n\n  const primitiveAttributes = usedVariables.attributeSet;\n  const addToShader = getPrimitiveAttributesUsedInShader(\n    attributesByName,\n    primitiveAttributes,\n    false,\n  );\n  const needsDefault = getAttributesNeedingDefaults(\n    attributesByName,\n    primitiveAttributes,\n    false,\n  );\n\n  let vertexInitialization;\n  const attributeFields = [];\n  const initializationLines = [];\n  for (const variableName in addToShader) {\n    if (!addToShader.hasOwnProperty(variableName)) {\n      continue;\n    }\n    const attributeInfo = addToShader[variableName];\n    const attributeField = [attributeInfo.glslType, variableName];\n    attributeFields.push(attributeField);\n\n    // Initializing attribute structs are just a matter of copying the\n    // attribute or varying: E.g.:\n    // \"    vsInput.attributes.position = a_position;\"\n    vertexInitialization = `vsInput.attributes.${variableName} = attributes.${variableName};`;\n    initializationLines.push(vertexInitialization);\n  }\n\n  for (let i = 0; i < needsDefault.length; i++) {\n    const variableName = needsDefault[i];\n    const attributeDefaults = inferAttributeDefaults(variableName);\n    if (!defined(attributeDefaults)) {\n      CustomShaderPipelineStage._oneTimeWarning(\n        \"CustomShaderPipelineStage.incompatiblePrimitiveVS\",\n        `Primitive is missing attribute ${variableName}, disabling custom vertex shader`,\n      );\n      // This primitive isn't compatible with the shader. Return early\n      // to skip the vertex shader\n      return { enabled: false };\n    }\n\n    attributeFields.push(attributeDefaults.attributeField);\n    vertexInitialization = `vsInput.attributes.${variableName} = ${attributeDefaults.value};`;\n    initializationLines.push(vertexInitialization);\n  }\n\n  return {\n    enabled: true,\n    attributeFields: attributeFields,\n    initializationLines: initializationLines,\n  };\n}\n\nfunction generatePositionBuiltins(customShader) {\n  const attributeFields = [];\n  const initializationLines = [];\n  const usedVariables = customShader.usedVariablesFragment.attributeSet;\n\n  // Model space position is the same position as in the glTF accessor,\n  // this is already added to the shader with other attributes.\n\n  // World coordinates in ECEF coordinates. Note that this is\n  // low precision (32-bit floats) on the GPU.\n  if (usedVariables.hasOwnProperty(\"positionWC\")) {\n    attributeFields.push([\"vec3\", \"positionWC\"]);\n    initializationLines.push(\n      \"fsInput.attributes.positionWC = attributes.positionWC;\",\n    );\n  }\n\n  // position in eye coordinates\n  if (usedVariables.hasOwnProperty(\"positionEC\")) {\n    attributeFields.push([\"vec3\", \"positionEC\"]);\n    initializationLines.push(\n      \"fsInput.attributes.positionEC = attributes.positionEC;\",\n    );\n  }\n\n  return {\n    attributeFields: attributeFields,\n    initializationLines: initializationLines,\n  };\n}\n\n/**\n * @private\n * @param {CustomShader} customShader\n * @param {Object<string, ModelComponents.Attribute>} attributesByName\n * @param {PrimitiveRenderResources} renderResources\n * @param {ModelComponents.Primitive} primitive\n * @param {Set<string>} primitivePropertyIds all property IDs referenced by the primitive being processed, across all its property textures, property attributes, and property tables.\n * @returns {object}\n */\nfunction generateFragmentShaderLines(\n  customShader,\n  attributesByName,\n  primitivePropertyIds,\n) {\n  if (!defined(customShader.fragmentShaderText)) {\n    return { enabled: false };\n  }\n\n  const usedVariables = customShader.usedVariablesFragment;\n  if (\n    !checkMetadataCompatibility(usedVariables.metadataSet, primitivePropertyIds)\n  ) {\n    return { enabled: false };\n  }\n\n  const primitiveAttributes = usedVariables.attributeSet;\n  const addToShader = getPrimitiveAttributesUsedInShader(\n    attributesByName,\n    primitiveAttributes,\n    true,\n  );\n  const needsDefault = getAttributesNeedingDefaults(\n    attributesByName,\n    primitiveAttributes,\n    true,\n  );\n\n  let fragmentInitialization;\n  const attributeFields = [];\n  const initializationLines = [];\n  for (const variableName in addToShader) {\n    if (!addToShader.hasOwnProperty(variableName)) {\n      continue;\n    }\n    const attributeInfo = addToShader[variableName];\n\n    const attributeField = [attributeInfo.glslType, variableName];\n    attributeFields.push(attributeField);\n\n    // Initializing attribute structs are just a matter of copying the\n    // value from the processed attributes\n    // \"    fsInput.attributes.positionMC = attributes.positionMC;\"\n    fragmentInitialization = `fsInput.attributes.${variableName} = attributes.${variableName};`;\n    initializationLines.push(fragmentInitialization);\n  }\n\n  for (let i = 0; i < needsDefault.length; i++) {\n    const variableName = needsDefault[i];\n    const attributeDefaults = inferAttributeDefaults(variableName);\n    if (!defined(attributeDefaults)) {\n      CustomShaderPipelineStage._oneTimeWarning(\n        \"CustomShaderPipelineStage.incompatiblePrimitiveFS\",\n        `Primitive is missing attribute ${variableName}, disabling custom fragment shader.`,\n      );\n\n      // This primitive isn't compatible with the shader. Return early\n      // so the fragment shader is skipped\n      return { enabled: false };\n    }\n\n    attributeFields.push(attributeDefaults.attributeField);\n    fragmentInitialization = `fsInput.attributes.${variableName} = ${attributeDefaults.value};`;\n    initializationLines.push(fragmentInitialization);\n  }\n\n  // Built-ins for positions in various coordinate systems.\n  const positionBuiltins = generatePositionBuiltins(customShader);\n\n  return {\n    enabled: true,\n    attributeFields: attributeFields.concat(positionBuiltins.attributeFields),\n    initializationLines:\n      positionBuiltins.initializationLines.concat(initializationLines),\n  };\n}\n\n// These attributes are derived from positionMC, and are handled separately\n// from other attributes\nconst builtinAttributes = {\n  positionWC: true,\n  positionEC: true,\n};\n\n/**\n * Get the primitive attributes that are referenced in the shader\n *\n * @private\n * @param {Object<string, ModelComponents.Attribute>} primitiveAttributes set of all the primitive's attributes\n * @param {Object<string, ModelComponents.Attribute>} shaderAttributeSet set of all attributes used in the shader\n * @param {boolean} isFragmentShader\n * @returns {Object<string, ModelComponents.Attribute>} A dictionary of the primitive attributes used in the shader\n */\nfunction getPrimitiveAttributesUsedInShader(\n  primitiveAttributes,\n  shaderAttributeSet,\n  isFragmentShader,\n) {\n  const addToShader = {};\n  for (const attributeName in primitiveAttributes) {\n    if (!primitiveAttributes.hasOwnProperty(attributeName)) {\n      continue;\n    }\n    const attribute = primitiveAttributes[attributeName];\n\n    // normals and tangents are in model coordinates in the attributes but\n    // in eye coordinates in the fragment shader.\n    let renamed = attributeName;\n    if (isFragmentShader && attributeName === \"normalMC\") {\n      renamed = \"normalEC\";\n    } else if (isFragmentShader && attributeName === \"tangentMC\") {\n      renamed = \"tangentEC\";\n      attribute.glslType = \"vec3\";\n    }\n\n    if (shaderAttributeSet.hasOwnProperty(renamed)) {\n      addToShader[renamed] = attribute;\n    }\n  }\n  return addToShader;\n}\n\n/**\n * Get the attributes that will need to have default values defined.\n * Attributes referenced in the shader which are not already defined\n * for the primitive and are not built-in will need default values.\n *\n * @private\n * @param {Object<string, ModelComponents.Attribute>} primitiveAttributes set of all the primitive's attributes\n * @param {Object<string, ModelComponents.Attribute>} shaderAttributeSet set of all attributes used in the shader\n * @param {boolean} isFragmentShader\n * @returns {string[]} The names of the attributes needing defaults\n */\nfunction getAttributesNeedingDefaults(\n  primitiveAttributes,\n  shaderAttributeSet,\n  isFragmentShader,\n) {\n  const needDefaults = [];\n  for (const attributeName in shaderAttributeSet) {\n    if (!shaderAttributeSet.hasOwnProperty(attributeName)) {\n      continue;\n    }\n    if (builtinAttributes.hasOwnProperty(attributeName)) {\n      // Builtins are handled separately from attributes, so skip them here\n      continue;\n    }\n\n    // normals and tangents are in model coordinates in the attributes but\n    // in eye coordinates in the fragment shader.\n    let renamed = attributeName;\n    if (isFragmentShader && attributeName === \"normalEC\") {\n      renamed = \"normalMC\";\n    } else if (isFragmentShader && attributeName === \"tangentEC\") {\n      renamed = \"tangentMC\";\n    }\n\n    if (!primitiveAttributes.hasOwnProperty(renamed)) {\n      needDefaults.push(attributeName);\n    }\n  }\n  return needDefaults;\n}\n\n/**\n * @private\n * @param {CustomShader} customShader\n * @param {ModelComponents.Primitive} primitive\n * @param {PrimitiveRenderResources} renderResources\n * @returns {object}\n */\nfunction generateShaderLines(customShader, primitive, renderResources) {\n  // Attempt to generate vertex and fragment shader lines before adding any\n  // code to the shader.\n  const attributesByName = getAttributesByName(primitive.attributes);\n  const primitivePropertyIds = getAllPropertyIds(\n    primitive,\n    renderResources.model.structuralMetadata,\n  );\n  const vertexLines = generateVertexShaderLines(\n    customShader,\n    attributesByName,\n    primitivePropertyIds,\n  );\n  const fragmentLines = generateFragmentShaderLines(\n    customShader,\n    attributesByName,\n    primitivePropertyIds,\n  );\n\n  // positionWC must be computed in the vertex shader\n  // for use in the fragmentShader. However, this can be skipped if:\n  // - positionWC isn't used in the fragment shader\n  // - or the fragment shader is disabled\n  const attributeSetFS = customShader.usedVariablesFragment.attributeSet;\n  const shouldComputePositionWC =\n    attributeSetFS.hasOwnProperty(\"positionWC\") && fragmentLines.enabled;\n\n  // Return any generated shader code along with some flags to indicate which\n  // defines should be added.\n  return {\n    vertexLines: vertexLines,\n    fragmentLines: fragmentLines,\n    customShaderEnabled: vertexLines.enabled || fragmentLines.enabled,\n    shouldComputePositionWC: shouldComputePositionWC,\n  };\n}\n\nfunction addVertexLinesToShader(shaderBuilder, vertexLines) {\n  let structId = CustomShaderPipelineStage.STRUCT_ID_ATTRIBUTES_VS;\n  shaderBuilder.addStruct(\n    structId,\n    CustomShaderPipelineStage.STRUCT_NAME_ATTRIBUTES,\n    ShaderDestination.VERTEX,\n  );\n\n  const { attributeFields, initializationLines } = vertexLines;\n  for (let i = 0; i < attributeFields.length; i++) {\n    const [glslType, variableName] = attributeFields[i];\n    shaderBuilder.addStructField(structId, glslType, variableName);\n  }\n\n  // This could be hard-coded, but the symmetry with other structs makes unit\n  // tests more convenient\n  structId = CustomShaderPipelineStage.STRUCT_ID_VERTEX_INPUT;\n  shaderBuilder.addStruct(\n    structId,\n    CustomShaderPipelineStage.STRUCT_NAME_VERTEX_INPUT,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addStructField(\n    structId,\n    CustomShaderPipelineStage.STRUCT_NAME_ATTRIBUTES,\n    \"attributes\",\n  );\n  // Add FeatureIds struct from the Feature ID stage\n  shaderBuilder.addStructField(\n    structId,\n    FeatureIdPipelineStage.STRUCT_NAME_FEATURE_IDS,\n    \"featureIds\",\n  );\n  // Add Metadata struct from the metadata stage\n  shaderBuilder.addStructField(\n    structId,\n    MetadataPipelineStage.STRUCT_NAME_METADATA,\n    \"metadata\",\n  );\n  // Add MetadataClass struct from the metadata stage\n  shaderBuilder.addStructField(\n    structId,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_CLASS,\n    \"metadataClass\",\n  );\n  // Add MetadataStatistics struct from the metadata stage\n  shaderBuilder.addStructField(\n    structId,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_STATISTICS,\n    \"metadataStatistics\",\n  );\n\n  const functionId =\n    CustomShaderPipelineStage.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS;\n  shaderBuilder.addFunction(\n    functionId,\n    CustomShaderPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS,\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addFunctionLines(functionId, initializationLines);\n}\n\nfunction addFragmentLinesToShader(shaderBuilder, fragmentLines) {\n  let structId = CustomShaderPipelineStage.STRUCT_ID_ATTRIBUTES_FS;\n  shaderBuilder.addStruct(\n    structId,\n    CustomShaderPipelineStage.STRUCT_NAME_ATTRIBUTES,\n    ShaderDestination.FRAGMENT,\n  );\n\n  const { attributeFields, initializationLines } = fragmentLines;\n  for (let i = 0; i < attributeFields.length; i++) {\n    const [glslType, variableName] = attributeFields[i];\n    shaderBuilder.addStructField(structId, glslType, variableName);\n  }\n\n  structId = CustomShaderPipelineStage.STRUCT_ID_FRAGMENT_INPUT;\n  shaderBuilder.addStruct(\n    structId,\n    CustomShaderPipelineStage.STRUCT_NAME_FRAGMENT_INPUT,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addStructField(\n    structId,\n    CustomShaderPipelineStage.STRUCT_NAME_ATTRIBUTES,\n    \"attributes\",\n  );\n  // Add FeatureIds struct from the Feature ID stage\n  shaderBuilder.addStructField(\n    structId,\n    FeatureIdPipelineStage.STRUCT_NAME_FEATURE_IDS,\n    \"featureIds\",\n  );\n  // Add Metadata struct from the metadata stage\n  shaderBuilder.addStructField(\n    structId,\n    MetadataPipelineStage.STRUCT_NAME_METADATA,\n    \"metadata\",\n  );\n  // Add MetadataClass struct from the metadata stage\n  shaderBuilder.addStructField(\n    structId,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_CLASS,\n    \"metadataClass\",\n  );\n  // Add MetadataStatistics struct from the metadata stage\n  shaderBuilder.addStructField(\n    structId,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_STATISTICS,\n    \"metadataStatistics\",\n  );\n\n  const functionId =\n    CustomShaderPipelineStage.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS;\n  shaderBuilder.addFunction(\n    functionId,\n    CustomShaderPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS,\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addFunctionLines(functionId, initializationLines);\n}\n\nconst scratchShaderLines = [];\n\nfunction addLinesToShader(shaderBuilder, customShader, generatedCode) {\n  const { vertexLines, fragmentLines } = generatedCode;\n  const shaderLines = scratchShaderLines;\n\n  if (vertexLines.enabled) {\n    addVertexLinesToShader(shaderBuilder, vertexLines);\n\n    shaderLines.length = 0;\n    shaderLines.push(\n      \"#line 0\",\n      customShader.vertexShaderText,\n      CustomShaderStageVS,\n    );\n\n    shaderBuilder.addVertexLines(shaderLines);\n  }\n\n  if (fragmentLines.enabled) {\n    addFragmentLinesToShader(shaderBuilder, fragmentLines);\n\n    shaderLines.length = 0;\n    shaderLines.push(\n      \"#line 0\",\n      customShader.fragmentShaderText,\n      CustomShaderStageFS,\n    );\n\n    shaderBuilder.addFragmentLines(shaderLines);\n  }\n}\n\n/**\n * Get all property IDs a given primitive references (whether or not used in the shader).\n *\n * @param {StructuralMetadata} structuralMetadata the structural metadata for the primitive being processed\n * @param {ModelComponents.Primitive} primitive the primitive being processed by this stage\n *\n * @returns {Set<string>} a set of all property IDs the primitive references\n *\n * @private\n */\nfunction getAllPropertyIds(primitive, structuralMetadata) {\n  if (!defined(structuralMetadata)) {\n    return new Set();\n  }\n\n  const usedPropertyTextures = primitive.propertyTextureIds;\n  const usedPropertyAttributes = primitive.propertyAttributeIds;\n  const usedPropertyTables = defined(primitive.featureIds)\n    ? primitive.featureIds.map((featureId) => featureId.propertyTableId)\n    : [];\n\n  const primitivePropertyIds = new Set();\n\n  function addUsedPropertyIds(propertyContainerIds, propertyContainers) {\n    for (const id of propertyContainerIds) {\n      const propertyContainer = propertyContainers[id];\n      Object.keys(propertyContainer.properties).forEach((propertyId) =>\n        primitivePropertyIds.add(propertyId),\n      );\n    }\n  }\n\n  addUsedPropertyIds(usedPropertyTextures, structuralMetadata.propertyTextures);\n  addUsedPropertyIds(\n    usedPropertyAttributes,\n    structuralMetadata.propertyAttributes,\n  );\n  addUsedPropertyIds(usedPropertyTables, structuralMetadata.propertyTables);\n\n  return primitivePropertyIds;\n}\n\n/**\n * Because all primitives in a tileset share the same shader, but not necessarily the same\n * metadata schema, not all primitives will be compatible with the custom shader. This is expected-\n * it should not cause a fatal error (compilation failure), but instead should disable the custom shader for this primitive.\n *\n * @param {Object<string, boolean>} metadataPropertiesUsedInShader the set of metadata properties used in the shader (see CustomShader.js)\n * @param {Set<string>} primitivePropertyIds the set of all metadata property IDs used in the primitive being processed\n *\n * @returns {boolean} true if all metadata properties used in the shader exist on the primitive, false otherwise\n *\n * @private\n */\nfunction checkMetadataCompatibility(\n  metadataPropertiesUsedInShader,\n  primitivePropertyIds,\n) {\n  for (const propertyName in metadataPropertiesUsedInShader) {\n    if (!metadataPropertiesUsedInShader.hasOwnProperty(propertyName)) {\n      continue;\n    }\n\n    if (!primitivePropertyIds.has(propertyName)) {\n      CustomShaderPipelineStage._oneTimeWarning(\n        \"CustomShaderPipelineStage.checkMetadataCompatibility\",\n        `A custom shader uses metadata property \"${propertyName}\" which is not present for all primitives in the tileset. Disabling the custom shader for these primitives.`,\n      );\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexport default CustomShaderPipelineStage;\n","/**\n * An enum for controling how {@link CustomShader} handles translucency compared with the original\n * primitive.\n *\n * @enum {number}\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst CustomShaderTranslucencyMode = {\n  /**\n   * Inherit translucency settings from the primitive's material. If the primitive used a\n   * translucent material, the custom shader will also be considered translucent. If the primitive\n   * used an opaque material, the custom shader will be considered opaque.\n   *\n   * @type {number}\n   * @constant\n   */\n  INHERIT: 0,\n  /**\n   * Force the primitive to render the primitive as opaque, ignoring any material settings.\n   *\n   * @type {number}\n   * @constant\n   */\n  OPAQUE: 1,\n  /**\n   * Force the primitive to render the primitive as translucent, ignoring any material settings.\n   *\n   * @type {number}\n   * @constant\n   */\n  TRANSLUCENT: 2,\n};\n\nexport default Object.freeze(CustomShaderTranslucencyMode);\n","import defined from \"../../Core/defined.js\";\nimport Cartesian4 from \"../../Core/Cartesian4.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\n/**\n * The dequantization stage generates shader code to dequantize attributes\n * in the vertex shader\n *\n * @namespace DequantizationPipelineStage\n *\n * @private\n */\nconst DequantizationPipelineStage = {\n  name: \"DequantizationPipelineStage\", // Helps with debugging\n\n  FUNCTION_ID_DEQUANTIZATION_STAGE_VS: \"dequantizationStage\",\n  FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS:\n    \"void dequantizationStage(inout ProcessedAttributes attributes)\",\n};\n\n/**\n * Process a primitive with quantized attributes. This stage modifies the\n * following parts of the render resources:\n * <ul>\n *  <li>generates dequantization function and adds it to the shader</li>\n *  <li>adds any uniforms needed for dequantization to the shader and uniform map</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nDequantizationPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const model = renderResources.model;\n  const hasClassification = defined(model.classificationType);\n\n  shaderBuilder.addDefine(\n    \"USE_DEQUANTIZATION\",\n    undefined,\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addFunction(\n    DequantizationPipelineStage.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,\n    DequantizationPipelineStage.FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS,\n    ShaderDestination.VERTEX,\n  );\n\n  const attributes = primitive.attributes;\n  for (let i = 0; i < attributes.length; i++) {\n    const attribute = attributes[i];\n    const quantization = attribute.quantization;\n    if (!defined(quantization)) {\n      // Non-quantized attributes were already handled in GeometryPipelineStage\n      continue;\n    }\n\n    // Only the position and texcoord attributes are used for classification models.\n    const isPositionAttribute =\n      attribute.semantic === VertexAttributeSemantic.POSITION;\n    const isTexcoordAttribute =\n      attribute.semantic === VertexAttributeSemantic.TEXCOORD;\n    if (hasClassification && !isPositionAttribute && !isTexcoordAttribute) {\n      continue;\n    }\n\n    const attributeInfo = ModelUtility.getAttributeInfo(attribute);\n    updateDequantizationFunction(shaderBuilder, attributeInfo);\n    addDequantizationUniforms(renderResources, attributeInfo);\n  }\n};\n\nfunction addDequantizationUniforms(renderResources, attributeInfo) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const uniformMap = renderResources.uniformMap;\n  const variableName = attributeInfo.variableName;\n  const quantization = attributeInfo.attribute.quantization;\n\n  if (quantization.octEncoded) {\n    const normalizationRange = `model_normalizationRange_${variableName}`;\n    shaderBuilder.addUniform(\n      \"float\",\n      normalizationRange,\n      ShaderDestination.VERTEX,\n    );\n    uniformMap[normalizationRange] = function () {\n      return quantization.normalizationRange;\n    };\n  } else {\n    const offset = `model_quantizedVolumeOffset_${variableName}`;\n    const stepSize = `model_quantizedVolumeStepSize_${variableName}`;\n    const glslType = attributeInfo.glslType;\n    shaderBuilder.addUniform(glslType, offset, ShaderDestination.VERTEX);\n    shaderBuilder.addUniform(glslType, stepSize, ShaderDestination.VERTEX);\n\n    let quantizedVolumeOffset = quantization.quantizedVolumeOffset;\n    let quantizedVolumeStepSize = quantization.quantizedVolumeStepSize;\n\n    // COLOR_n is promoted to a vec4 in the shader, so the alpha value\n    // defaults to 1. For correctness, the quantization uniforms must be\n    // promoted to vec4s. The alpha values are chosen so the alpha\n    // dequantization is the identity, i.e. 0.0 + 1.0 * color.a\n    if (/^color_\\d+$/.test(variableName)) {\n      quantizedVolumeOffset = promoteToVec4(quantizedVolumeOffset, 0);\n      quantizedVolumeStepSize = promoteToVec4(quantizedVolumeStepSize, 1);\n    }\n\n    uniformMap[offset] = function () {\n      return quantizedVolumeOffset;\n    };\n\n    uniformMap[stepSize] = function () {\n      return quantizedVolumeStepSize;\n    };\n  }\n}\n\nfunction promoteToVec4(value, defaultAlpha) {\n  if (value instanceof Cartesian4) {\n    return value;\n  }\n\n  return new Cartesian4(value.x, value.y, value.z, defaultAlpha);\n}\n\nfunction updateDequantizationFunction(shaderBuilder, attributeInfo) {\n  const variableName = attributeInfo.variableName;\n  const quantization = attributeInfo.attribute.quantization;\n\n  let line;\n  if (quantization.octEncoded) {\n    line = generateOctDecodeLine(variableName, quantization);\n  } else {\n    line = generateDequantizeLine(variableName);\n  }\n\n  shaderBuilder.addFunctionLines(\n    DequantizationPipelineStage.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,\n    [line],\n  );\n}\n\nfunction generateOctDecodeLine(variableName, quantization) {\n  const structField = `attributes.${variableName}`;\n\n  const quantizedAttribute = `a_quantized_${variableName}`;\n  const normalizationRange = `model_normalizationRange_${variableName}`;\n\n  // Draco stores things as .zxy instead of xyz, so be explicit about the\n  // swizzle to avoid confusion\n  const swizzle = quantization.octEncodedZXY ? \".zxy\" : \".xyz\";\n\n  // This generates lines such as:\n  // attributes.normal = czm_octDecode(a_quantized_normal, model_normalizationRange_normal).zxy;\n  return `${structField} = czm_octDecode(${quantizedAttribute}, ${normalizationRange})${swizzle};`;\n}\n\nfunction generateDequantizeLine(variableName) {\n  const structField = `attributes.${variableName}`;\n  const quantizedAttribute = `a_quantized_${variableName}`;\n  const offset = `model_quantizedVolumeOffset_${variableName}`;\n  const stepSize = `model_quantizedVolumeStepSize_${variableName}`;\n\n  // This generates lines such as:\n  // attributes.texCoord_0 = model_quantizedVolumeOffset_texCoord_0 + a_quantized_texCoord_0 * model_quantizedVolumeStepSize;\n  return `${structField} = ${offset} + ${quantizedAttribute} * ${stepSize};`;\n}\n\nexport default DequantizationPipelineStage;\n","import EdgeDetectionStageFS from \"../../Shaders/Model/EdgeDetectionStageFS.js\";\n\n/**\n * Performs the screen-space edge visibility / composition pass. This stage does not\n * build edge geometry itself; that work is handled earlier by {@link EdgeVisibilityPipelineStage},\n * which extracts unique model edges and writes them during a dedicated edge render pass\n * into edge ID / color targets. The fragment logic added here then:\n * <ul>\n *  <li>Samples the edge render targets (edge color + per-edge feature ID)</li>\n *  <li>Compares per-edge feature IDs with underlying surface feature IDs to suppress\n *      edges that belong to filtered or hidden features</li>\n *  <li>Performs depth-based tests (e.g., against globe or scene depth) to discard\n *      occluded edges</li>\n * </ul>\n * In summary: EdgeVisibilityPipelineStage = generate & encode edges; this stage = decide which of\n * those encoded edges are actually visible in the final frame and composite them.\n *\n * @namespace EdgeDetectionPipelineStage\n * @private\n */\nconst EdgeDetectionPipelineStage = {\n  name: \"EdgeDetectionPipelineStage\",\n};\n\n/**\n * Process a primitive by injecting the fragment shader logic that consumes the\n * intermediate edge buffers produced by the edge geometry pass. It adds code to:\n * <ul>\n *  <li>Read edge color / edge ID MRT outputs</li>\n *  <li>Apply depth & feature ID based rejection</li>\n *  <li>Emit final edge color for composition</li>\n * </ul>\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @private\n */\nEdgeDetectionPipelineStage.process = function (renderResources) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addFragmentLines([EdgeDetectionStageFS]);\n};\n\nexport default EdgeDetectionPipelineStage;\n","import Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport VertexArray from \"../../Renderer/VertexArray.js\";\nimport defined from \"../../Core/defined.js\";\nimport IndexDatatype from \"../../Core/IndexDatatype.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport EdgeVisibilityStageFS from \"../../Shaders/Model/EdgeVisibilityStageFS.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport ModelReader from \"./ModelReader.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\n/**\n * Builds derived line geometry for model edges using EXT_mesh_primitive_edge_visibility data.\n * It parses the encoded edge visibility bits, creates a separate edge-domain vertex array with\n * per-edge attributes (edge type, optional feature ID, silhouette normal, adjacent face normals),\n * sets up the required shader defines / varyings, and stores the resulting line list geometry on\n * the render resources for a later edge rendering pass.\n *\n * @namespace EdgeVisibilityPipelineStage\n * @private\n */\nconst EdgeVisibilityPipelineStage = {\n  name: \"EdgeVisibilityPipelineStage\",\n};\n\n/**\n * Process a primitive to derive edge geometry and shader bindings. This modifies the render resources by:\n * <ul>\n *  <li>Adding shader defines (<code>HAS_EDGE_VISIBILITY</code>, <code>HAS_EDGE_VISIBILITY_MRT</code>)</li>\n *  <li>Injecting the fragment shader logic that outputs edge color / feature information</li>\n *  <li>Adding per-vertex attributes: edge type, optional feature ID, silhouette normal, and adjacent face normals</li>\n *  <li>Adding varyings to pass these attributes to the fragment stage</li>\n *  <li>Creating and storing a derived line list vertex array in <code>renderResources.edgeGeometry</code></li>\n * </ul>\n * If the primitive does not contain edge visibility data, the function returns early.\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {FrameState} frameState The frame state\n * @private\n */\nEdgeVisibilityPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  if (!defined(primitive.edgeVisibility)) {\n    return;\n  }\n\n  // Fallback request: mark that edge visibility is needed this frame.\n  frameState.edgeVisibilityRequested = true;\n\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  // Add shader defines and fragment code\n  shaderBuilder.addDefine(\n    \"HAS_EDGE_VISIBILITY\",\n    undefined,\n    ShaderDestination.BOTH,\n  );\n  shaderBuilder.addDefine(\n    \"HAS_EDGE_VISIBILITY_MRT\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addFragmentLines(EdgeVisibilityStageFS);\n\n  // Add a uniform to distinguish between original geometry pass and edge pass\n  shaderBuilder.addUniform(\"bool\", \"u_isEdgePass\", ShaderDestination.BOTH);\n\n  // Add edge type attribute and varying\n  const edgeTypeLocation = shaderBuilder.addAttribute(\"float\", \"a_edgeType\");\n  shaderBuilder.addVarying(\"float\", \"v_edgeType\", \"flat\");\n\n  // Add edge feature ID attribute and varying\n  const edgeFeatureIdLocation = shaderBuilder.addAttribute(\n    \"float\",\n    \"a_edgeFeatureId\",\n  );\n\n  // Add silhouette normal attribute and varying for silhouette edges\n  const silhouetteNormalLocation = shaderBuilder.addAttribute(\n    \"vec3\",\n    \"a_silhouetteNormal\",\n  );\n  shaderBuilder.addVarying(\"vec3\", \"v_silhouetteNormalView\", \"flat\");\n\n  // Add face normal attributes for silhouette detection\n  const faceNormalALocation = shaderBuilder.addAttribute(\n    \"vec3\",\n    \"a_faceNormalA\",\n  );\n  const faceNormalBLocation = shaderBuilder.addAttribute(\n    \"vec3\",\n    \"a_faceNormalB\",\n  );\n  shaderBuilder.addVarying(\"vec3\", \"v_faceNormalAView\", \"flat\");\n  shaderBuilder.addVarying(\"vec3\", \"v_faceNormalBView\", \"flat\");\n\n  // Add varying for view space position for perspective-correct silhouette detection\n\n  // Pass edge type, silhouette normal, and face normals from vertex to fragment shader\n  shaderBuilder.addFunctionLines(\"setDynamicVaryingsVS\", [\n    \"#ifdef HAS_EDGE_VISIBILITY\",\n    \"  if (u_isEdgePass) {\",\n    \"    v_edgeType = a_edgeType;\",\n    \"#ifdef HAS_EDGE_FEATURE_ID\",\n    \"    v_featureId_0 = a_edgeFeatureId;\",\n    \"#endif\",\n    \"    // Transform normals from model space to view space\",\n    \"    v_silhouetteNormalView = czm_normal * a_silhouetteNormal;\",\n    \"    v_faceNormalAView = czm_normal * a_faceNormalA;\",\n    \"    v_faceNormalBView = czm_normal * a_faceNormalB;\",\n    \"  }\",\n    \"#endif\",\n  ]);\n\n  // Build triangle adjacency (mapping edges to adjacent triangles) and compute per-triangle face normals.\n  const adjacencyData = buildTriangleAdjacency(primitive);\n\n  const edgeResult = extractVisibleEdges(primitive);\n\n  if (\n    !defined(edgeResult) ||\n    !defined(edgeResult.edgeIndices) ||\n    edgeResult.edgeIndices.length === 0\n  ) {\n    return;\n  }\n\n  // Generate paired face normals for each unique edge (used to classify silhouette edges in the shader).\n  const edgeFaceNormals = generateEdgeFaceNormals(\n    adjacencyData,\n    edgeResult.edgeIndices,\n  );\n\n  // Create edge-domain line list geometry (2 vertices per edge) with all required attributes.\n  const edgeGeometry = createCPULineEdgeGeometry(\n    edgeResult.edgeIndices,\n    edgeResult.edgeData,\n    renderResources,\n    frameState.context,\n    edgeTypeLocation,\n    silhouetteNormalLocation,\n    faceNormalALocation,\n    faceNormalBLocation,\n    edgeFeatureIdLocation,\n    primitive.edgeVisibility,\n    edgeFaceNormals,\n  );\n\n  if (!defined(edgeGeometry)) {\n    return;\n  }\n\n  if (edgeGeometry.hasEdgeFeatureIds) {\n    shaderBuilder.addDefine(\n      \"HAS_EDGE_FEATURE_ID\",\n      undefined,\n      ShaderDestination.BOTH,\n    );\n  }\n\n  // Set default value for u_isEdgePass uniform (false for original geometry pass). A later pass overrides this.\n  renderResources.uniformMap.u_isEdgePass = function () {\n    return false;\n  };\n\n  // Store edge geometry metadata so the renderer can issue a separate edges pass.\n  renderResources.edgeGeometry = {\n    vertexArray: edgeGeometry.vertexArray,\n    indexCount: edgeGeometry.indexCount,\n    primitiveType: PrimitiveType.LINES,\n    pass: Pass.CESIUM_3D_TILE_EDGES,\n  };\n};\n\n/**\n * Build triangle adjacency information and per-triangle face normals in model space.\n * The adjacency map associates an undirected edge (minIndex,maxIndex) with the indices\n * of up to two adjacent triangles. Face normals are normalized and stored sequentially.\n *\n * @param {ModelComponents.Primitive} primitive The primitive containing triangle index + position data\n * @returns {{edgeMap:Map<string, number[]>, faceNormals:Float32Array, triangleCount:number}}\n * @private\n */\nfunction buildTriangleAdjacency(primitive) {\n  const indices = primitive.indices;\n  if (!defined(indices)) {\n    return {\n      edgeMap: new Map(),\n      faceNormals: new Float32Array(0),\n      triangleCount: 0,\n    };\n  }\n\n  const triangleIndexArray = indices.typedArray;\n  const triangleCount = Math.floor(triangleIndexArray.length / 3);\n\n  // Get vertex positions for face normal calculation\n  const positionAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.POSITION,\n  );\n\n  // Retrieve raw (possibly quantized) position data. If the attribute is quantized\n  // we must dequantize on the CPU here because we compute face normals and silhouette\n  // classification data before the vertex shader's dequantization stage runs.\n  let positions = defined(positionAttribute.typedArray)\n    ? positionAttribute.typedArray\n    : ModelReader.readAttributeAsTypedArray(positionAttribute);\n\n  const quantization = positionAttribute.quantization;\n  if (defined(quantization) && !quantization.octEncoded) {\n    const count = positions.length; // length is 3 * vertexCount\n    const dequantized = new Float32Array(count);\n    const offset = quantization.quantizedVolumeOffset;\n    const step = quantization.quantizedVolumeStepSize;\n    for (let i = 0; i < count; i += 3) {\n      dequantized[i] = offset.x + positions[i] * step.x;\n      dequantized[i + 1] = offset.y + positions[i + 1] * step.y;\n      dequantized[i + 2] = offset.z + positions[i + 2] * step.z;\n    }\n    positions = dequantized;\n  }\n\n  // Build edge map: key = \"min,max\", value = [triangleA, triangleB?]\n  const edgeMap = new Map();\n\n  // Calculate face normals for each triangle (model space)\n  const faceNormals = new Float32Array(triangleCount * 3);\n\n  // Scratch vectors to avoid heap allocations per triangle\n  const scratchP0 = new Cartesian3();\n  const scratchP1 = new Cartesian3();\n  const scratchP2 = new Cartesian3();\n  const scratchE1 = new Cartesian3();\n  const scratchE2 = new Cartesian3();\n  const scratchCross = new Cartesian3();\n\n  function processEdge(a, b, triIndex) {\n    const edgeKey = `${a < b ? a : b},${a < b ? b : a}`;\n    let list = edgeMap.get(edgeKey);\n    if (!defined(list)) {\n      list = [];\n      edgeMap.set(edgeKey, list);\n    }\n    if (list.length < 2) {\n      list.push(triIndex);\n    }\n  }\n\n  for (let t = 0; t < triangleCount; t++) {\n    const base = t * 3;\n    const i0 = triangleIndexArray[base];\n    const i1 = triangleIndexArray[base + 1];\n    const i2 = triangleIndexArray[base + 2];\n\n    const i0o = i0 * 3;\n    const i1o = i1 * 3;\n    const i2o = i2 * 3;\n\n    scratchP0.x = positions[i0o];\n    scratchP0.y = positions[i0o + 1];\n    scratchP0.z = positions[i0o + 2];\n    scratchP1.x = positions[i1o];\n    scratchP1.y = positions[i1o + 1];\n    scratchP1.z = positions[i1o + 2];\n    scratchP2.x = positions[i2o];\n    scratchP2.y = positions[i2o + 1];\n    scratchP2.z = positions[i2o + 2];\n\n    Cartesian3.subtract(scratchP1, scratchP0, scratchE1);\n    Cartesian3.subtract(scratchP2, scratchP0, scratchE2);\n    Cartesian3.cross(scratchE1, scratchE2, scratchCross);\n    Cartesian3.normalize(scratchCross, scratchCross);\n\n    faceNormals[base] = scratchCross.x;\n    faceNormals[base + 1] = scratchCross.y;\n    faceNormals[base + 2] = scratchCross.z;\n\n    // Edges\n    processEdge(i0, i1, t);\n    processEdge(i1, i2, t);\n    processEdge(i2, i0, t);\n  }\n\n  return { edgeMap, faceNormals, triangleCount };\n}\n\n/**\n * For each unique edge produce a pair of face normals (A,B). For boundary edges where only a single\n * adjacent triangle exists, the second normal is synthesized as the negation of the first to allow\n * the shader to reason about front/back facing transitions uniformly.\n *\n * @param {{edgeMap:Map<string,number[]>, faceNormals:Float32Array}} adjacencyData The adjacency data from buildTriangleAdjacency\n * @param {number[]} edgeIndices Packed array of 2 vertex indices per edge\n * @returns {Float32Array} Packed array: 6 floats per edge (normalA.xyz, normalB.xyz)\n * @private\n */\nfunction generateEdgeFaceNormals(adjacencyData, edgeIndices) {\n  const { edgeMap, faceNormals } = adjacencyData;\n  const numEdges = edgeIndices.length / 2;\n\n  // Each edge needs 2 face normals (left and right side)\n  const edgeFaceNormals = new Float32Array(numEdges * 6); // 2 normals * 3 components each\n\n  for (let i = 0; i < numEdges; i++) {\n    const a = edgeIndices[i * 2];\n    const b = edgeIndices[i * 2 + 1];\n    const edgeKey = `${a < b ? a : b},${a < b ? b : a}`;\n    const triangleList = edgeMap.get(edgeKey);\n\n    // Expect at least one triangle; silently skip if not found (defensive)\n    if (!defined(triangleList) || triangleList.length === 0) {\n      continue;\n    }\n\n    const tA = triangleList[0];\n    const aBase = tA * 3;\n    const nAx = faceNormals[aBase];\n    const nAy = faceNormals[aBase + 1];\n    const nAz = faceNormals[aBase + 2];\n\n    let nBx;\n    let nBy;\n    let nBz;\n    if (triangleList.length > 1) {\n      const tB = triangleList[1];\n      const bBase = tB * 3;\n      nBx = faceNormals[bBase];\n      nBy = faceNormals[bBase + 1];\n      nBz = faceNormals[bBase + 2];\n    } else {\n      // Boundary edge – synthesize opposite normal\n      nBx = -nAx;\n      nBy = -nAy;\n      nBz = -nAz;\n    }\n\n    const baseIdx = i * 6;\n    edgeFaceNormals[baseIdx] = nAx;\n    edgeFaceNormals[baseIdx + 1] = nAy;\n    edgeFaceNormals[baseIdx + 2] = nAz;\n    edgeFaceNormals[baseIdx + 3] = nBx;\n    edgeFaceNormals[baseIdx + 4] = nBy;\n    edgeFaceNormals[baseIdx + 5] = nBz;\n  }\n\n  return edgeFaceNormals;\n}\n\n/**\n * Parse the EXT_mesh_primitive_edge_visibility 2-bit edge encoding and extract\n * a unique set of edges that should be considered for rendering. Edge types:\n * <ul>\n *  <li>0 HIDDEN - skipped</li>\n *  <li>1 SILHOUETTE - candidates for conditional display based on facing</li>\n *  <li>2 HARD - always displayed</li>\n *  <li>3 REPEATED - secondary encoding for a hard edge (treated same as 2)</li>\n * </ul>\n * Deduplicates edges shared by adjacent triangles and records per-edge metadata.\n *\n * @param {ModelComponents.Primitive} primitive The primitive with EXT_mesh_primitive_edge_visibility data\n * @returns {{edgeIndices:number[], edgeData:Object[], silhouetteEdgeCount:number}} Edge extraction result\n * @private\n */\nfunction extractVisibleEdges(primitive) {\n  const edgeVisibility = primitive.edgeVisibility;\n  const visibility = edgeVisibility.visibility;\n  const indices = primitive.indices;\n\n  if (!defined(visibility) || !defined(indices)) {\n    return [];\n  }\n\n  const triangleIndexArray = indices.typedArray;\n  const vertexCount = primitive.attributes[0].count;\n  const edgeIndices = [];\n  const edgeData = [];\n  const seenEdgeHashes = new Set();\n  let silhouetteEdgeCount = 0;\n\n  // Process triangles and extract edges (2 bits per edge)\n  let edgeIndex = 0;\n  const totalIndices = triangleIndexArray.length;\n\n  for (let i = 0; i + 2 < totalIndices; i += 3) {\n    const v0 = triangleIndexArray[i];\n    const v1 = triangleIndexArray[i + 1];\n    const v2 = triangleIndexArray[i + 2];\n    for (let e = 0; e < 3; e++) {\n      let a, b;\n      if (e === 0) {\n        a = v0;\n        b = v1;\n      } else if (e === 1) {\n        a = v1;\n        b = v2;\n      } else if (e === 2) {\n        a = v2;\n        b = v0;\n      }\n      const byteIndex = Math.floor(edgeIndex / 4);\n      const bitPairOffset = (edgeIndex % 4) * 2;\n      edgeIndex++;\n\n      if (byteIndex >= visibility.length) {\n        break;\n      }\n\n      const byte = visibility[byteIndex];\n      const visibility2Bit = (byte >> bitPairOffset) & 0x3;\n\n      // Only include visible edge types according to EXT_mesh_primitive_edge_visibility spec\n      let shouldIncludeEdge = false;\n      switch (visibility2Bit) {\n        case 0: // HIDDEN - never draw\n          shouldIncludeEdge = false;\n          break;\n        case 1: // SILHOUETTE - conditionally visible (front-facing vs back-facing)\n          shouldIncludeEdge = true;\n          break;\n        case 2: // HARD - always draw (primary encoding)\n          shouldIncludeEdge = true;\n          break;\n        case 3: // REPEATED - always draw (secondary encoding of a hard edge already encoded as 2)\n          shouldIncludeEdge = true;\n          break;\n      }\n\n      if (shouldIncludeEdge) {\n        const small = Math.min(a, b);\n        const big = Math.max(a, b);\n        const hash = small * vertexCount + big;\n\n        if (!seenEdgeHashes.has(hash)) {\n          seenEdgeHashes.add(hash);\n          edgeIndices.push(a, b);\n\n          let mateVertexIndex = -1;\n          if (visibility2Bit === 1) {\n            mateVertexIndex = silhouetteEdgeCount;\n            silhouetteEdgeCount++;\n          }\n\n          edgeData.push({\n            edgeType: visibility2Bit,\n            triangleIndex: Math.floor(i / 3),\n            edgeIndex: e,\n            mateVertexIndex: mateVertexIndex,\n            currentTriangleVertices: [v0, v1, v2],\n          });\n        }\n      }\n    }\n  }\n\n  return { edgeIndices, edgeData, silhouetteEdgeCount };\n}\n\n/**\n * Create a derived line list geometry representing edges. A new vertex domain is used so we can pack\n * per-edge attributes (silhouette normal, face normal pair, edge type, optional feature ID) without\n * modifying or duplicating the original triangle mesh. Two vertices are generated per unique edge.\n *\n * @param {number[]} edgeIndices Packed array [a0,b0, a1,b1, ...] of vertex indices into the source mesh\n * @param {Object[]} edgeData Array of edge metadata including edge type and silhouette normal lookup index\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {Context} context The WebGL rendering context\n * @param {number} edgeTypeLocation Shader attribute location for the edge type\n * @param {number} silhouetteNormalLocation Shader attribute location for input silhouette normal\n * @param {number} faceNormalALocation Shader attribute location for face normal A\n * @param {number} faceNormalBLocation Shader attribute location for face normal B\n * @param {number} edgeFeatureIdLocation Shader attribute location for optional edge feature ID\n * @param {Object} edgeVisibility Edge visibility extension object (may contain silhouetteNormals[])\n * @param {Float32Array} edgeFaceNormals Packed face normals (6 floats per edge)\n * @returns {Object|undefined} Object with {vertexArray, indexBuffer, indexCount} or undefined on failure\n * @private\n */\nfunction createCPULineEdgeGeometry(\n  edgeIndices,\n  edgeData,\n  renderResources,\n  context,\n  edgeTypeLocation,\n  silhouetteNormalLocation,\n  faceNormalALocation,\n  faceNormalBLocation,\n  edgeFeatureIdLocation,\n  edgeVisibility,\n  edgeFaceNormals,\n) {\n  if (!defined(edgeIndices) || edgeIndices.length === 0) {\n    return undefined;\n  }\n\n  const numEdges = edgeData.length;\n  const vertsPerEdge = 2;\n  const totalVerts = numEdges * vertsPerEdge;\n\n  // Always use location 0 for position to avoid conflicts\n  const positionLocation = 0;\n\n  // Get original vertex positions\n  const positionAttribute = ModelUtility.getAttributeBySemantic(\n    renderResources.runtimePrimitive.primitive,\n    VertexAttributeSemantic.POSITION,\n  );\n  const srcPos = defined(positionAttribute.typedArray)\n    ? positionAttribute.typedArray\n    : ModelReader.readAttributeAsTypedArray(positionAttribute);\n\n  // Create edge-domain vertices (2 per edge)\n  const edgePosArray = new Float32Array(totalVerts * 3);\n  const edgeTypeArray = new Float32Array(totalVerts);\n  const silhouetteNormalArray = new Float32Array(totalVerts * 3);\n  const faceNormalAArray = new Float32Array(totalVerts * 3);\n  const faceNormalBArray = new Float32Array(totalVerts * 3);\n  let p = 0;\n\n  const maxSrcVertex = srcPos.length / 3 - 1;\n\n  for (let i = 0; i < numEdges; i++) {\n    const a = edgeIndices[i * 2];\n    const b = edgeIndices[i * 2 + 1];\n\n    // Validate vertex indices\n    if (a < 0 || b < 0 || a > maxSrcVertex || b > maxSrcVertex) {\n      // Fill with zeros to maintain indexing\n      edgePosArray[p++] = 0;\n      edgePosArray[p++] = 0;\n      edgePosArray[p++] = 0;\n      edgePosArray[p++] = 0;\n      edgePosArray[p++] = 0;\n      edgePosArray[p++] = 0;\n      edgeTypeArray[i * 2] = 0;\n      edgeTypeArray[i * 2 + 1] = 0;\n      // Fill with default values\n      const normalIdx = i * 2;\n      silhouetteNormalArray[normalIdx * 3] = 0;\n      silhouetteNormalArray[normalIdx * 3 + 1] = 0;\n      silhouetteNormalArray[normalIdx * 3 + 2] = 1;\n      silhouetteNormalArray[(normalIdx + 1) * 3] = 0;\n      silhouetteNormalArray[(normalIdx + 1) * 3 + 1] = 0;\n      silhouetteNormalArray[(normalIdx + 1) * 3 + 2] = 1;\n\n      // Fill face normals with default values\n      faceNormalAArray[normalIdx * 3] = 0;\n      faceNormalAArray[normalIdx * 3 + 1] = 0;\n      faceNormalAArray[normalIdx * 3 + 2] = 1;\n      faceNormalAArray[(normalIdx + 1) * 3] = 0;\n      faceNormalAArray[(normalIdx + 1) * 3 + 1] = 0;\n      faceNormalAArray[(normalIdx + 1) * 3 + 2] = 1;\n\n      faceNormalBArray[normalIdx * 3] = 0;\n      faceNormalBArray[normalIdx * 3 + 1] = 0;\n      faceNormalBArray[normalIdx * 3 + 2] = 1;\n      faceNormalBArray[(normalIdx + 1) * 3] = 0;\n      faceNormalBArray[(normalIdx + 1) * 3 + 1] = 0;\n      faceNormalBArray[(normalIdx + 1) * 3 + 2] = 1;\n      continue;\n    }\n\n    const ax = srcPos[a * 3];\n    const ay = srcPos[a * 3 + 1];\n    const az = srcPos[a * 3 + 2];\n    const bx = srcPos[b * 3];\n    const by = srcPos[b * 3 + 1];\n    const bz = srcPos[b * 3 + 2];\n\n    // Add edge endpoints\n    edgePosArray[p++] = ax;\n    edgePosArray[p++] = ay;\n    edgePosArray[p++] = az;\n    edgePosArray[p++] = bx;\n    edgePosArray[p++] = by;\n    edgePosArray[p++] = bz;\n\n    const rawType = edgeData[i].edgeType;\n    const t = rawType / 255.0;\n\n    edgeTypeArray[i * 2] = t;\n    edgeTypeArray[i * 2 + 1] = t;\n\n    // Add silhouette normal for silhouette edges (type 1)\n    let normalX = 0,\n      normalY = 0,\n      normalZ = 1; // Default normal pointing up\n\n    if (rawType === 1 && defined(edgeVisibility.silhouetteNormals)) {\n      const mateVertexIndex = edgeData[i].mateVertexIndex;\n      if (\n        mateVertexIndex >= 0 &&\n        mateVertexIndex < edgeVisibility.silhouetteNormals.length\n      ) {\n        const silhouetteNormals = edgeVisibility.silhouetteNormals;\n        const normal = silhouetteNormals[mateVertexIndex];\n\n        if (defined(normal)) {\n          normalX = normal.x;\n          normalY = normal.y;\n          normalZ = normal.z;\n        }\n      }\n    }\n\n    // Set silhouette normal for both edge endpoints\n    const normalIdx = i * 2;\n    silhouetteNormalArray[normalIdx * 3] = normalX;\n    silhouetteNormalArray[normalIdx * 3 + 1] = normalY;\n    silhouetteNormalArray[normalIdx * 3 + 2] = normalZ;\n    silhouetteNormalArray[(normalIdx + 1) * 3] = normalX;\n    silhouetteNormalArray[(normalIdx + 1) * 3 + 1] = normalY;\n    silhouetteNormalArray[(normalIdx + 1) * 3 + 2] = normalZ;\n\n    // Set face normals for both edge endpoints\n    const faceNormalIdx = i * 6; // 6 floats per edge (2 normals * 3 components)\n    const normalAX = edgeFaceNormals[faceNormalIdx];\n    const normalAY = edgeFaceNormals[faceNormalIdx + 1];\n    const normalAZ = edgeFaceNormals[faceNormalIdx + 2];\n    const normalBX = edgeFaceNormals[faceNormalIdx + 3];\n    const normalBY = edgeFaceNormals[faceNormalIdx + 4];\n    const normalBZ = edgeFaceNormals[faceNormalIdx + 5];\n\n    // Face normal A for both endpoints\n    faceNormalAArray[normalIdx * 3] = normalAX;\n    faceNormalAArray[normalIdx * 3 + 1] = normalAY;\n    faceNormalAArray[normalIdx * 3 + 2] = normalAZ;\n    faceNormalAArray[(normalIdx + 1) * 3] = normalAX;\n    faceNormalAArray[(normalIdx + 1) * 3 + 1] = normalAY;\n    faceNormalAArray[(normalIdx + 1) * 3 + 2] = normalAZ;\n\n    // Face normal B for both endpoints\n    faceNormalBArray[normalIdx * 3] = normalBX;\n    faceNormalBArray[normalIdx * 3 + 1] = normalBY;\n    faceNormalBArray[normalIdx * 3 + 2] = normalBZ;\n    faceNormalBArray[(normalIdx + 1) * 3] = normalBX;\n    faceNormalBArray[(normalIdx + 1) * 3 + 1] = normalBY;\n    faceNormalBArray[(normalIdx + 1) * 3 + 2] = normalBZ;\n  }\n\n  // Create vertex buffers\n  const edgePosBuffer = Buffer.createVertexBuffer({\n    context,\n    typedArray: edgePosArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const edgeTypeBuffer = Buffer.createVertexBuffer({\n    context,\n    typedArray: edgeTypeArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const silhouetteNormalBuffer = Buffer.createVertexBuffer({\n    context,\n    typedArray: silhouetteNormalArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const faceNormalABuffer = Buffer.createVertexBuffer({\n    context,\n    typedArray: faceNormalAArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const faceNormalBBuffer = Buffer.createVertexBuffer({\n    context,\n    typedArray: faceNormalBArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n\n  // Create sequential indices for line pairs\n  const useU32 = totalVerts > 65534;\n  const idx = new Array(totalVerts);\n  for (let i = 0; i < totalVerts; i++) {\n    idx[i] = i;\n  }\n\n  const indexBuffer = Buffer.createIndexBuffer({\n    context,\n    typedArray: useU32 ? new Uint32Array(idx) : new Uint16Array(idx),\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: useU32\n      ? IndexDatatype.UNSIGNED_INT\n      : IndexDatatype.UNSIGNED_SHORT,\n  });\n\n  // Create vertex array with position, edge type, silhouette normal, and face normal attributes\n  const attributes = [\n    {\n      index: positionLocation,\n      vertexBuffer: edgePosBuffer,\n      componentsPerAttribute: 3,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n    },\n    {\n      index: edgeTypeLocation,\n      vertexBuffer: edgeTypeBuffer,\n      componentsPerAttribute: 1,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n    },\n    {\n      index: silhouetteNormalLocation,\n      vertexBuffer: silhouetteNormalBuffer,\n      componentsPerAttribute: 3,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n    },\n    {\n      index: faceNormalALocation,\n      vertexBuffer: faceNormalABuffer,\n      componentsPerAttribute: 3,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n    },\n    {\n      index: faceNormalBLocation,\n      vertexBuffer: faceNormalBBuffer,\n      componentsPerAttribute: 3,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n    },\n  ];\n\n  // Get feature ID from original geometry\n  const primitive = renderResources.runtimePrimitive.primitive;\n  const getFeatureIdForEdge = function () {\n    // Try to get the first feature ID from the original primitive\n    if (defined(primitive.featureIds) && primitive.featureIds.length > 0) {\n      const firstFeatureIdSet = primitive.featureIds[0];\n\n      // Handle FeatureIdAttribute objects directly using setIndex\n      if (defined(firstFeatureIdSet.setIndex)) {\n        const featureIdAttribute = primitive.attributes.find(\n          (attr) =>\n            attr.semantic === VertexAttributeSemantic.FEATURE_ID &&\n            attr.setIndex === firstFeatureIdSet.setIndex,\n        );\n\n        if (defined(featureIdAttribute)) {\n          const featureIds = defined(featureIdAttribute.typedArray)\n            ? featureIdAttribute.typedArray\n            : ModelReader.readAttributeAsTypedArray(featureIdAttribute);\n\n          // Create edge feature ID buffer based on edge indices\n          const edgeFeatureIds = new Float32Array(totalVerts);\n          for (let i = 0; i < numEdges; i++) {\n            const a = edgeIndices[i * 2];\n            const featureId = a < featureIds.length ? featureIds[a] : 0;\n            edgeFeatureIds[i * 2] = featureId;\n            edgeFeatureIds[i * 2 + 1] = featureId;\n          }\n\n          return edgeFeatureIds;\n        }\n      }\n    }\n\n    return undefined;\n  };\n\n  const edgeFeatureIds = getFeatureIdForEdge();\n  const hasEdgeFeatureIds = defined(edgeFeatureIds);\n\n  if (hasEdgeFeatureIds) {\n    const edgeFeatureIdBuffer = Buffer.createVertexBuffer({\n      context,\n      typedArray: edgeFeatureIds,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n\n    attributes.push({\n      index: edgeFeatureIdLocation,\n      vertexBuffer: edgeFeatureIdBuffer,\n      componentsPerAttribute: 1,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n    });\n  }\n\n  const vertexArray = new VertexArray({ context, indexBuffer, attributes });\n\n  if (!vertexArray || totalVerts === 0 || totalVerts % 2 !== 0) {\n    return undefined;\n  }\n\n  return {\n    vertexArray,\n    indexBuffer,\n    indexCount: totalVerts,\n    hasEdgeFeatureIds,\n  };\n}\n\nexport default EdgeVisibilityPipelineStage;\n","import Check from \"../../../../Core/Check.js\";\n\n/**\n * @typedef {object} AnchorPointDirect.ConstructorOptions\n *\n * Initialization options for the AnchorPointDirect constructor\n *\n * @property {Cartesian3} position  Anchor point geographic coordinates\n * @property {Cartesian3} adjustmentParams The adjustment values in meters\n */\n\n/**\n * Metadata for one stored anchor point using direct storage.\n *\n * This reflects the `anchronPointDirect` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n *\n * @constructor\n * @param {AnchorPointDirect.ConstructorOptions} options An object describing initialization options\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction AnchorPointDirect(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.position\", options.position);\n  Check.typeOf.object(\"options.adjustmentParams\", options.adjustmentParams);\n  //>>includeEnd('debug');\n\n  this._position = options.position;\n  this._adjustmentParams = options.adjustmentParams;\n}\n\nObject.defineProperties(AnchorPointDirect.prototype, {\n  /**\n   * Anchor point geographic coordinates in meters as X/Easting, Y/Northing, Z/HAE\n   *\n   * @memberof AnchorPointDirect.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n  },\n\n  /**\n   * The delta-x delta-y delta-z adjustment values in meters per anchor\n   * point.\n   *\n   * @memberof AnchorPointDirect.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  adjustmentParams: {\n    get: function () {\n      return this._adjustmentParams;\n    },\n  },\n});\n\nexport default AnchorPointDirect;\n","import Check from \"../../../../Core/Check.js\";\n\n/**\n * @typedef {object} AnchorPointIndirect.ConstructorOptions\n *\n * Initialization options for the AnchorPointIndirect constructor\n *\n * @property {Cartesian3} position  Anchor point geographic coordinates\n * @property {Cartesian3} adjustmentParams The adjustment values in meters\n * @property {Matrix3} covarianceMatrix The 3x3 covariance matrix\n */\n\n/**\n * Metadata for one stored anchor point.\n *\n * This reflects the `anchronPointIndirect` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n *\n * @constructor\n * @param {AnchorPointIndirect.ConstructorOptions} options An object describing initialization options\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction AnchorPointIndirect(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.position\", options.position);\n  Check.typeOf.object(\"options.adjustmentParams\", options.adjustmentParams);\n  Check.typeOf.object(\"options.covarianceMatrix\", options.covarianceMatrix);\n  //>>includeEnd('debug');\n\n  this._position = options.position;\n  this._adjustmentParams = options.adjustmentParams;\n  this._covarianceMatrix = options.covarianceMatrix;\n}\n\nObject.defineProperties(AnchorPointIndirect.prototype, {\n  /**\n   * Anchor point geographic coordinates in meters as X/Easting, Y/Northing, Z/HAE\n   *\n   * @memberof AnchorPointIndirect.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n  },\n\n  /**\n   * The delta-x delta-y delta-z adjustment values in meters per anchor\n   * point.\n   *\n   * @memberof AnchorPointIndirect.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  adjustmentParams: {\n    get: function () {\n      return this._adjustmentParams;\n    },\n  },\n\n  /**\n   * The 3x3 covariance matrix.\n   *\n   * @memberof AnchorPointIndirect.prototype\n   * @type {Matrix3}\n   * @readonly\n   */\n  covarianceMatrix: {\n    get: function () {\n      return this._covarianceMatrix;\n    },\n  },\n});\n\nexport default AnchorPointIndirect;\n","import Check from \"../../../../Core/Check.js\";\n\n/**\n * @typedef {object} CorrelationGroup.ConstructorOptions\n *\n * Initialization options for the CorrelationGroup constructor\n *\n * @property {boolean[]} groupFlags Array of 3 booleans indicating if\n * parameters delta-x delta-y delta-z used in the correlation group\n * @property {Cartesian3} rotationThetas Rotations in milliradians\n * about X, Y, Z axes, respectively\n * @property {Spdcf[]} params Array of `Spdcf` (Strictly Positive-Definite\n * Correlation Function) parameters, for the U, V, W directions, respectively\n */\n\n/**\n * Metadata identifying parameters using same correlation modeling and\n * associated correlation parameters.\n *\n * This reflects the `correlationGroup` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n *\n * @constructor\n * @param {CorrelationGroup.ConstructorOptions} options An object describing initialization options\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction CorrelationGroup(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.groupFlags\", options.groupFlags);\n  Check.typeOf.object(\"options.rotationThetas\", options.rotationThetas);\n  Check.typeOf.object(\"options.params\", options.params);\n  //>>includeEnd('debug');\n\n  this._groupFlags = options.groupFlags;\n  this._rotationThetas = options.rotationThetas;\n  this._params = options.params;\n}\n\nObject.defineProperties(CorrelationGroup.prototype, {\n  /**\n   * Array of 3 booleans indicating if parameters delta-x delta-y delta-z\n   * used in the correlation group\n   *\n   * @memberof CorrelationGroup.prototype\n   * @type {boolean[]}\n   * @readonly\n   */\n  groupFlags: {\n    get: function () {\n      return this._groupFlags;\n    },\n  },\n\n  /**\n   * Rotations in milliradians about X, Y, Z axes, respectively\n   *\n   * @memberof CorrelationGroup.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  rotationThetas: {\n    get: function () {\n      return this._rotationThetas;\n    },\n  },\n\n  /**\n   * Array of 3 sets of SPDCF parameters, for the U, V, W directions, respectively\n   *\n   * @memberof CorrelationGroup.prototype\n   * @type {Spdcf[]}\n   * @readonly\n   */\n  params: {\n    get: function () {\n      return this._params;\n    },\n  },\n});\n\nexport default CorrelationGroup;\n","import Cartesian3 from \"../../../../Core/Cartesian3.js\";\nimport Check from \"../../../../Core/Check.js\";\nimport Matrix3 from \"../../../../Core/Matrix3.js\";\nimport RuntimeError from \"../../../../Core/RuntimeError.js\";\nimport AnchorPointDirect from \"./AnchorPointDirect.js\";\nimport AnchorPointIndirect from \"./AnchorPointIndirect.js\";\nimport CorrelationGroup from \"./CorrelationGroup.js\";\nimport GltfGpmLocal from \"./GltfGpmLocal.js\";\nimport Spdcf from \"./Spdcf.js\";\nimport StorageType from \"./StorageType.js\";\n\n/**\n * Loads glTF NGA_gpm_local from the root of a glTF object\n *\n * @alias GltfGpmLoader\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {string} [options.extension] The <code>NGA_gpm_local</code> extension object.\n *\n * @private\n */\nfunction GltfGpmLoader() {}\n\n/**\n * Creates a Matrix3 that describes a covariance matrix (which is\n * symmetric) from the array containing the upper triangle, in\n * column-major order.\n *\n * @param {number[]} array The input array\n * @returns {Matrix3} The Matrix3\n */\nfunction createCovarianceMatrixFromUpperTriangle(array) {\n  const covarianceMatrix = new Matrix3(\n    array[0],\n    array[1],\n    array[3],\n    array[1],\n    array[2],\n    array[4],\n    array[3],\n    array[4],\n    array[5],\n  );\n  return covarianceMatrix;\n}\n\n/**\n * Creates an `AnchorPointDirect` from the given JSON representation\n *\n * @param {object} anchorPointDirectJson The input JSON\n * @returns {AnchorPointDirect} The direct anchor point\n */\nfunction createAnchorPointDirect(anchorPointDirectJson) {\n  const position = Cartesian3.fromArray(\n    anchorPointDirectJson.position,\n    0,\n    new Cartesian3(),\n  );\n  const adjustmentParams = Cartesian3.fromArray(\n    anchorPointDirectJson.adjustmentParams,\n    0,\n    new Cartesian3(),\n  );\n  const anchorPointDirect = new AnchorPointDirect({\n    position: position,\n    adjustmentParams: adjustmentParams,\n  });\n  return anchorPointDirect;\n}\n\n/**\n * Creates an `AnchorPointIndirect` from the given JSON representation\n *\n * @param {object} anchorPointIndirectJson The input JSON\n * @returns {AnchorPointIndirect} The indirect anchor point\n */\nfunction createAnchorPointIndirect(anchorPointIndirectJson) {\n  const position = Cartesian3.fromArray(\n    anchorPointIndirectJson.position,\n    0,\n    new Cartesian3(),\n  );\n  const adjustmentParams = Cartesian3.fromArray(\n    anchorPointIndirectJson.adjustmentParams,\n    0,\n    new Cartesian3(),\n  );\n  const covarianceMatrix = createCovarianceMatrixFromUpperTriangle(\n    anchorPointIndirectJson.covarianceMatrix,\n  );\n  const anchorPointIndirect = new AnchorPointIndirect({\n    position: position,\n    adjustmentParams: adjustmentParams,\n    covarianceMatrix: covarianceMatrix,\n  });\n  return anchorPointIndirect;\n}\n\n/**\n * Creates a `CorrelationGroup` from the given JSON representation\n *\n * @param {object} correlationGroupJson The input JSON\n * @returns {CorrelationGroup} The correlation group\n */\nfunction createCorrelationGroup(correlationGroupJson) {\n  const groupFlags = correlationGroupJson.groupFlags;\n  const rotationThetas = Cartesian3.fromArray(\n    correlationGroupJson.rotationThetas,\n    0,\n    new Cartesian3(),\n  );\n  const params = [];\n  for (const paramJson of correlationGroupJson.params) {\n    const param = new Spdcf({\n      A: paramJson.A,\n      alpha: paramJson.alpha,\n      beta: paramJson.beta,\n      T: paramJson.T,\n    });\n    params.push(param);\n  }\n  const correlationGroup = new CorrelationGroup({\n    groupFlags: groupFlags,\n    rotationThetas: rotationThetas,\n    params: params,\n  });\n  return correlationGroup;\n}\n\n/**\n * Loads the GPM data from the given JSON that was found as the\n * `NGA_gpm_local` extension object in the root of the glTF.\n *\n * @param {object} gltfGpmLocalJson The extension object\n * @returns {GltfGpmLocal} The parsed object\n * @throws RuntimeError When the given object contains invalid storage types.\n * @private\n */\nGltfGpmLoader.load = function (gltfGpmLocalJson) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"gltfGpmLocalJson\", gltfGpmLocalJson);\n  //>>includeEnd('debug');\n\n  const storageType = gltfGpmLocalJson.storageType;\n  if (storageType === StorageType.Direct) {\n    return GltfGpmLoader.loadDirect(gltfGpmLocalJson);\n  }\n  if (storageType === StorageType.Indirect) {\n    return GltfGpmLoader.loadIndirect(gltfGpmLocalJson);\n  }\n  throw new RuntimeError(\n    `Invalid storage type in NGA_gpm_local - expected 'Direct' or 'Indirect', but found ${storageType}`,\n  );\n};\n\n/**\n * Loads the GPM data from the given JSON that was found as the\n * `NGA_gpm_local` extension object in the root of the glTF,\n * assuming that the `storageType` of the given object is\n * `StorageType.Direct`.\n *\n * @param {object} gltfGpmLocalJson The extension object\n * @returns {GltfGpmLocal} The parsed object\n * @private\n */\nGltfGpmLoader.loadDirect = function (gltfGpmLocalJson) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"gltfGpmLocalJson\", gltfGpmLocalJson);\n  Check.typeOf.object(\n    \"gltfGpmLocalJson.anchorPointsDirect\",\n    gltfGpmLocalJson.anchorPointsDirect,\n  );\n  Check.typeOf.object(\n    \"gltfGpmLocalJson.covarianceDirectUpperTriangle\",\n    gltfGpmLocalJson.covarianceDirectUpperTriangle,\n  );\n  //>>includeEnd('debug');\n\n  const anchorPointsDirect = [];\n  const anchorPointsDirectJson = gltfGpmLocalJson.anchorPointsDirect;\n  for (const anchorPointDirectJson of anchorPointsDirectJson) {\n    const anchorPointDirect = createAnchorPointDirect(anchorPointDirectJson);\n    anchorPointsDirect.push(anchorPointDirect);\n  }\n  const covarianceDirect = createCovarianceMatrixFromUpperTriangle(\n    gltfGpmLocalJson.covarianceDirectUpperTriangle,\n  );\n\n  const gltfGpmLocal = new GltfGpmLocal({\n    storageType: StorageType.Direct,\n    anchorPointsDirect: anchorPointsDirect,\n    covarianceDirect: covarianceDirect,\n  });\n  return gltfGpmLocal;\n};\n\n/**\n * Loads the GPM data from the given JSON that was found as the\n * `NGA_gpm_local` extension object in the root of the glTF,\n * assuming that the `storageType` of the given object is\n * `StorageType.Indirect`.\n *\n * @param {object} gltfGpmLocalJson The extension object\n * @returns {GltfGpmLocal} The parsed object\n * @private\n */\nGltfGpmLoader.loadIndirect = function (gltfGpmLocalJson) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"gltfGpmLocalJson\", gltfGpmLocalJson);\n  Check.typeOf.object(\n    \"gltfGpmLocalJson.anchorPointsIndirect\",\n    gltfGpmLocalJson.anchorPointsIndirect,\n  );\n  Check.typeOf.object(\n    \"gltfGpmLocalJson.intraTileCorrelationGroups\",\n    gltfGpmLocalJson.intraTileCorrelationGroups,\n  );\n  //>>includeEnd('debug');\n\n  const anchorPointsIndirect = [];\n  const anchorPointsIndirectJson = gltfGpmLocalJson.anchorPointsIndirect;\n  for (const anchorPointIndirectJson of anchorPointsIndirectJson) {\n    const anchorPointIndirect = createAnchorPointIndirect(\n      anchorPointIndirectJson,\n    );\n    anchorPointsIndirect.push(anchorPointIndirect);\n  }\n\n  const intraTileCorrelationGroupsJson =\n    gltfGpmLocalJson.intraTileCorrelationGroups;\n  const intraTileCorrelationGroups = [];\n\n  for (const correlationGroupJson of intraTileCorrelationGroupsJson) {\n    const correlationGroup = createCorrelationGroup(correlationGroupJson);\n    intraTileCorrelationGroups.push(correlationGroup);\n  }\n\n  const gltfGpmLocal = new GltfGpmLocal({\n    storageType: StorageType.Indirect,\n    anchorPointsIndirect: anchorPointsIndirect,\n    intraTileCorrelationGroups: intraTileCorrelationGroups,\n  });\n  return gltfGpmLocal;\n};\n\nexport default GltfGpmLoader;\n","import defined from \"../../../../Core/defined.js\";\nimport Check from \"../../../../Core/Check.js\";\nimport RuntimeError from \"../../../../Core/RuntimeError.js\";\nimport StorageType from \"./StorageType.js\";\n\n/**\n * @typedef {object} GltfGpmLocal.ConstructorOptions\n *\n * Initialization options for the GltfGpmLocal constructor\n *\n * @property {string} storageType The storage type.\n * This must be one of the `StorageType` constants, i.e. `Direct` or `Indirect`.\n * @property {AnchorPointIndirect[]|undefined} [anchorPointsIndirect] The indirect anchor points.\n * This must be present if and only if the storage type is `Indirect`.\n * @property {CorrelationGroup[]|undefined} [intraTileCorrelationGroups] The intra-tile correlation groups.\n * This must be present if and only if the storage type is `Indirect`.\n * @property {AnchorPointDirect[]|undefined} [anchorPointsDirect] The direct anchor points.\n * This must be present if and only if the storage type is `Direct`.\n * @property {Matrix3|undefined} [covarianceDirect] The covariance of anchor point parameters.\n * This must be present if and only if the storage type is `Direct`.\n */\n\n/**\n * The GPM metadata for a Ground-Space Indirect implementation stored\n * locally (i.e. a tile and/or leaf node).\n *\n * This reflects the root extension object of the {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local}\n * glTF extension. When a model that contains this extension was loaded,\n * then an object of this type can be obtained by calling\n * ```\n * const gltfGpmLocal = model.getExtension(\"NGA_gpm_local\");\n * ```\n *\n * The storage type determines the presence of the optional properties:\n * <ul>\n *  <li>\n *   When the storage type is `StorageType.Indirect`, then the\n *   `anchorPointsIndirect` and `intraTileCorrelationGroups`\n *   are present.\n *  </li>\n *  <li>\n *   When the storage type is `StorageType.Direct`, then the\n *   `anchorPointsDirect` and `covarianceDirect` are present.\n *  </li>\n * </ul>\n *\n * @constructor\n * @param {GltfGpmLocal.ConstructorOptions} options An object describing initialization options\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction GltfGpmLocal(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.storageType\", options.storageType);\n  //>>includeEnd('debug');\n\n  this._storageType = options.storageType;\n  this._anchorPointsIndirect = options.anchorPointsIndirect;\n  this._anchorPointsDirect = options.anchorPointsDirect;\n  this._intraTileCorrelationGroups = options.intraTileCorrelationGroups;\n  this._covarianceDirect = options.covarianceDirect;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (this.storageType === StorageType.Indirect) {\n    if (!defined(this.anchorPointsIndirect)) {\n      throw new RuntimeError(\n        \"The anchorPointsIndirect are required for 'Indirect' storage\",\n      );\n    }\n    if (!defined(this.intraTileCorrelationGroups)) {\n      throw new RuntimeError(\n        \"The intraTileCorrelationGroups are required for 'Indirect' storage\",\n      );\n    }\n    if (defined(this.anchorPointsDirect)) {\n      throw new RuntimeError(\n        \"The anchorPointsDirect must be omitted for 'Indirect' storage\",\n      );\n    }\n    if (defined(this.covarianceDirect)) {\n      throw new RuntimeError(\n        \"The covarianceDirect must be omitted for 'Indirect' storage\",\n      );\n    }\n  } else {\n    // Direct storage\n    if (!defined(this.anchorPointsDirect)) {\n      throw new RuntimeError(\n        \"The anchorPointsDirect are required for 'Direct' storage\",\n      );\n    }\n    if (!defined(this.covarianceDirect)) {\n      throw new RuntimeError(\n        \"The covarianceDirect is required for 'Direct' storage\",\n      );\n    }\n    if (defined(this.anchorPointsIndirect)) {\n      throw new RuntimeError(\n        \"The anchorPointsIndirect must be omitted for 'Direct' storage\",\n      );\n    }\n    if (defined(this.intraTileCorrelationGroups)) {\n      throw new RuntimeError(\n        \"The intraTileCorrelationGroups must be omitted for 'Direct' storage\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n}\n\nObject.defineProperties(GltfGpmLocal.prototype, {\n  /**\n   * Specifies if covariance storage is indirect or direct.\n   *\n   * @memberof GltfGpmLocal.prototype\n   * @type {StorageType}\n   * @readonly\n   */\n  storageType: {\n    get: function () {\n      return this._storageType;\n    },\n  },\n\n  /**\n   * Array of stored indirect anchor points\n   *\n   * @memberof GltfGpmLocal.prototype\n   * @type {AnchorPointIndirect[]|undefined}\n   * @readonly\n   */\n  anchorPointsIndirect: {\n    get: function () {\n      return this._anchorPointsIndirect;\n    },\n  },\n\n  /**\n   * Array of stored direct anchor points\n   *\n   * @memberof GltfGpmLocal.prototype\n   * @type {AnchorPointDirect[]|undefined}\n   * @readonly\n   */\n  anchorPointsDirect: {\n    get: function () {\n      return this._anchorPointsDirect;\n    },\n  },\n\n  /**\n   * Metadata identifying parameters using same correlation modeling and\n   * associated correlation parameters\n   *\n   * @memberof GltfGpmLocal.prototype\n   * @type {CorrelationGroup[]|undefined}\n   * @readonly\n   */\n  intraTileCorrelationGroups: {\n    get: function () {\n      return this._intraTileCorrelationGroups;\n    },\n  },\n\n  /**\n   * The full covariance of anchor point parameters\n   *\n   * @memberof GltfGpmLocal.prototype\n   * @type {Matrix3|undefined}\n   * @readonly\n   */\n  covarianceDirect: {\n    get: function () {\n      return this._covarianceDirect;\n    },\n  },\n});\n\nexport default GltfGpmLocal;\n","import Check from \"../../../../Core/Check.js\";\nimport Frozen from \"../../../../Core/Frozen.js\";\nimport defined from \"../../../../Core/defined.js\";\nimport ResourceCache from \"../../../ResourceCache.js\";\nimport ResourceLoader from \"../../../ResourceLoader.js\";\nimport ResourceLoaderState from \"../../../ResourceLoaderState.js\";\nimport PropertyTexture from \"../../../PropertyTexture.js\";\nimport StructuralMetadata from \"../../../StructuralMetadata.js\";\nimport MetadataSchema from \"../../../MetadataSchema.js\";\nimport PpeTexture from \"./PpeTexture.js\";\nimport PpeMetadata from \"./PpeMetadata.js\";\nimport MeshPrimitiveGpmLocal from \"./MeshPrimitiveGpmLocal.js\";\n\n/**\n * Loads glTF NGA_gpm_local from a glTF mesh primitive.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n * This loads the \"ppeTextures\" of the NGA_gpm_local extension of a mesh primitive\n * and stores them in a `MeshPrimitiveGpmLocal` object.\n *\n * This object will be converted into a `StructuralMetadata` object, which may\n * override any `StructuralMetadata` that was read directly from the glTF.\n *\n * @alias GltfMeshPrimitiveGpmLoader\n * @constructor\n * @augments ResourceLoader\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {string} [options.extension] The <code>NGA_gpm_local</code> extension object.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {SupportedImageFormats} options.supportedImageFormats The supported image formats.\n * @param {FrameState} options.frameState The frame state.\n * @param {string} [options.cacheKey] The cache key of the resource.\n * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n *\n * @private\n */\nfunction GltfMeshPrimitiveGpmLoader(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const gltf = options.gltf;\n  const extension = options.extension;\n  const gltfResource = options.gltfResource;\n  const baseResource = options.baseResource;\n  const supportedImageFormats = options.supportedImageFormats;\n  const frameState = options.frameState;\n  const cacheKey = options.cacheKey;\n  const asynchronous = options.asynchronous ?? true;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.extension\", extension);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  Check.typeOf.object(\"options.supportedImageFormats\", supportedImageFormats);\n  Check.typeOf.object(\"options.frameState\", frameState);\n  //>>includeEnd('debug');\n\n  this._gltfResource = gltfResource;\n  this._baseResource = baseResource;\n  this._gltf = gltf;\n  this._extension = extension;\n  this._supportedImageFormats = supportedImageFormats;\n  this._frameState = frameState;\n  this._cacheKey = cacheKey;\n  this._asynchronous = asynchronous;\n  this._textureLoaders = [];\n  this._textureIds = [];\n  this._meshPrimitiveGpmLocal = undefined;\n  this._structuralMetadata = undefined;\n  this._state = ResourceLoaderState.UNLOADED;\n  this._promise = undefined;\n}\n\nif (defined(Object.create)) {\n  GltfMeshPrimitiveGpmLoader.prototype = Object.create(\n    ResourceLoader.prototype,\n  );\n  GltfMeshPrimitiveGpmLoader.prototype.constructor = GltfMeshPrimitiveGpmLoader;\n}\n\nObject.defineProperties(GltfMeshPrimitiveGpmLoader.prototype, {\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GltfMeshPrimitiveGpmLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  cacheKey: {\n    get: function () {\n      return this._cacheKey;\n    },\n  },\n\n  /**\n   * The parsed GPM extension information from the mesh primitive\n   *\n   * @memberof GltfMeshPrimitiveGpmLoader.prototype\n   *\n   * @type {MeshPrimitiveGpmLocal}\n   * @readonly\n   * @private\n   */\n  meshPrimitiveGpmLocal: {\n    get: function () {\n      return this._meshPrimitiveGpmLocal;\n    },\n  },\n\n  /**\n   * Returns the result of converting the parsed 'MeshPrimitiveGpmLocal'\n   * into a 'StructuralMetadata'.\n   *\n   * Some details about the translation are intentionally not specified here.\n   *\n   * @memberof GltfMeshPrimitiveGpmLoader.prototype\n   *\n   * @type {StructuralMetadata}\n   * @readonly\n   * @private\n   */\n  structuralMetadata: {\n    get: function () {\n      return this._structuralMetadata;\n    },\n  },\n});\n\nGltfMeshPrimitiveGpmLoader.prototype._loadResources = async function () {\n  try {\n    const texturesPromise = this._loadTextures();\n    await texturesPromise;\n\n    if (this.isDestroyed()) {\n      return;\n    }\n\n    this._gltf = undefined; // No longer need to hold onto the glTF\n\n    this._state = ResourceLoaderState.LOADED;\n    return this;\n  } catch (error) {\n    if (this.isDestroyed()) {\n      return;\n    }\n\n    this.unload();\n    this._state = ResourceLoaderState.FAILED;\n    const errorMessage = \"Failed to load GPM data\";\n    throw this.getError(errorMessage, error);\n  }\n};\n\n/**\n * Loads the resource.\n * @returns {Promise<GltfMeshPrimitiveGpmLoader>} A promise which resolves to the loader when the resource loading is completed.\n * @private\n */\nGltfMeshPrimitiveGpmLoader.prototype.load = function () {\n  if (defined(this._promise)) {\n    return this._promise;\n  }\n\n  this._state = ResourceLoaderState.LOADING;\n  this._promise = this._loadResources(this);\n  return this._promise;\n};\n\nfunction gatherUsedTextureIds(gpmExtension) {\n  // Gather the used textures\n  const textureIds = {};\n  const ppeTextures = gpmExtension.ppeTextures;\n  if (defined(ppeTextures)) {\n    for (let i = 0; i < ppeTextures.length; i++) {\n      const ppeTexture = ppeTextures[i];\n      // The texture is a valid textureInfo.\n      textureIds[ppeTexture.index] = ppeTexture;\n    }\n  }\n  return textureIds;\n}\n\nGltfMeshPrimitiveGpmLoader.prototype._loadTextures = function () {\n  let textureIds;\n  if (defined(this._extension)) {\n    textureIds = gatherUsedTextureIds(this._extension);\n  }\n\n  const gltf = this._gltf;\n  const gltfResource = this._gltfResource;\n  const baseResource = this._baseResource;\n  const supportedImageFormats = this._supportedImageFormats;\n  const frameState = this._frameState;\n  const asynchronous = this._asynchronous;\n\n  // Load the textures\n  const texturePromises = [];\n  for (const textureId in textureIds) {\n    if (textureIds.hasOwnProperty(textureId)) {\n      const textureLoader = ResourceCache.getTextureLoader({\n        gltf: gltf,\n        textureInfo: textureIds[textureId],\n        gltfResource: gltfResource,\n        baseResource: baseResource,\n        supportedImageFormats: supportedImageFormats,\n        frameState: frameState,\n        asynchronous: asynchronous,\n      });\n      this._textureLoaders.push(textureLoader);\n      this._textureIds.push(textureId);\n      texturePromises.push(textureLoader.load());\n    }\n  }\n\n  return Promise.all(texturePromises);\n};\n\n/**\n * A static mapping from PPE texture property identifier keys\n * to `MetadataSchema` instances. This is used to create each\n * schema (with a certain structure) only ONCE in\n * _obtainPpeTexturesMetadataSchema\n *\n * @private\n */\nGltfMeshPrimitiveGpmLoader.ppeTexturesMetadataSchemaCache = new Map();\n\n/**\n * Create the JSON description of a metadata class that treats\n * the given PPE texture as a property texture property.\n *\n * @param {PpeTexture} ppeTexture - The PPE texture\n * @param {number} index - The index of the texture in the extension\n * @returns The class JSON\n */\nGltfMeshPrimitiveGpmLoader._createPpeTextureClassJson = function (\n  ppeTexture,\n  index,\n) {\n  const traits = ppeTexture.traits;\n  const ppePropertyName = traits.source;\n\n  // The ppeTexture will have a structure like this:\n  //\n  //\"ppeTextures\" : [\n  //  {\n  //    \"traits\" : {\n  //      \"source\" : \"SIGZ\",\n  //      \"min\" : 0.0,\n  //      \"max\" : 16.0\n  //    },\n  //    \"index\" : 2,\n  //    \"noData\" : 255,\n  //    \"offset\" : 0.0,\n  //    \"scale\" : 0.06274509803921569,\n  //    \"texCoord\" : 1\n  //  },\n  //\n  // This is translated into a single class property here, that defines\n  // the structure of the property texture property.\n  //\n  // Given that `offset` and `scale` may only be applied to integer\n  // property values when they are `normalized`, the values will be\n  // declared as `normalized` here.\n  // The normalization factor will later have to be cancelled out,\n  // with the `scale` being multiplied by 255.\n  const offset = ppeTexture.offset ?? 0.0;\n  const scale = (ppeTexture.scale ?? 1.0) * 255.0;\n  const classJson = {\n    name: `PPE texture class ${index}`,\n    properties: {\n      [ppePropertyName]: {\n        name: \"PPE\",\n        type: \"SCALAR\",\n        componentType: \"UINT8\",\n        normalized: true,\n        offset: offset,\n        scale: scale,\n        min: traits.min,\n        max: traits.max,\n      },\n    },\n  };\n  return classJson;\n};\n\n/**\n * Returns the `MetadataSchema` for the PPE textures in the given\n * `MeshPrimitiveGpmLocal` instance.\n *\n * This method will return a (statically/globally) cached metadata\n * schema that reflects the structure of the PPE textures in the\n * given instance, creating and caching it if necessary.\n *\n * For details on the cache key, see `_collectPpeTexturePropertyIdentifiers`\n *\n * @param {MeshPrimitiveGpmLocal} meshPrimitiveGpmLocal The extension object\n * @returns The `MetadataSchema`\n */\nGltfMeshPrimitiveGpmLoader._obtainPpeTexturesMetadataSchema = function (\n  meshPrimitiveGpmLocal,\n) {\n  const ppeTexturePropertyIdentifiers =\n    GltfMeshPrimitiveGpmLoader._collectPpeTexturePropertyIdentifiers(\n      meshPrimitiveGpmLocal,\n    );\n  const key = ppeTexturePropertyIdentifiers.toString();\n  let ppeTexturesMetadataSchema =\n    GltfMeshPrimitiveGpmLoader.ppeTexturesMetadataSchemaCache.get(key);\n  if (defined(ppeTexturesMetadataSchema)) {\n    return ppeTexturesMetadataSchema;\n  }\n\n  const schemaId = `PPE_TEXTURE_SCHEMA_${GltfMeshPrimitiveGpmLoader.ppeTexturesMetadataSchemaCache.size}`;\n  const ppeTexturesMetadataSchemaJson = {\n    id: schemaId,\n    classes: {},\n  };\n\n  const ppeTextures = meshPrimitiveGpmLocal.ppeTextures;\n  for (let i = 0; i < ppeTextures.length; i++) {\n    const ppeTexture = ppeTextures[i];\n    const classId = `ppeTexture_${i}`;\n    const classJson = GltfMeshPrimitiveGpmLoader._createPpeTextureClassJson(\n      ppeTexture,\n      i,\n    );\n    ppeTexturesMetadataSchemaJson.classes[classId] = classJson;\n  }\n\n  ppeTexturesMetadataSchema = MetadataSchema.fromJson(\n    ppeTexturesMetadataSchemaJson,\n  );\n  GltfMeshPrimitiveGpmLoader.ppeTexturesMetadataSchemaCache.set(\n    key,\n    ppeTexturesMetadataSchema,\n  );\n  return ppeTexturesMetadataSchema;\n};\n\n/**\n * Creates an array of strings that serve as identifiers for PPE textures.\n *\n * Each glTF may define multiple `ppeTexture` objects within the\n * `NGA_gpm_local` extensions. Each of these textures corresponds\n * to one 'property texture property' in a metadata schema.\n *\n * This method will create an array where each element is a (JSON)\n * string representation of the parts of a GPM PPE texture definition\n * that are relevant for distinguishing two PPE textures in terms\n * of their structure within a `StructuralMetadata`.\n *\n * @param {MeshPrimitiveGpmLocal} meshPrimitiveGpmLocal The extension object\n * @returns The identifiers\n */\nGltfMeshPrimitiveGpmLoader._collectPpeTexturePropertyIdentifiers = function (\n  meshPrimitiveGpmLocal,\n) {\n  const ppeTexturePropertyIdentifiers = [];\n  const ppeTextures = meshPrimitiveGpmLocal.ppeTextures;\n  for (let i = 0; i < ppeTextures.length; i++) {\n    const ppeTexture = ppeTextures[i];\n    // The following will create an identifier that can be used\n    // to define two PPE textures as \"representing the same\n    // property texture property\" within a structural metadata\n    // schema.\n    const classJson = GltfMeshPrimitiveGpmLoader._createPpeTextureClassJson(\n      ppeTexture,\n      i,\n    );\n    const ppeTexturePropertyIdentifier = JSON.stringify(classJson);\n    ppeTexturePropertyIdentifiers.push(ppeTexturePropertyIdentifier);\n  }\n  return ppeTexturePropertyIdentifiers;\n};\n\n/**\n * Converts the given `MeshPrimitiveGpmLocal` object into a `StructuralMetadata`\n * object.\n *\n * This will translate the PPE textures from the given object into property\n * texture properties. The schema will be created based on the the structure\n * of the PPE textures.\n *\n * @param {MeshPrimitiveGpmLocal} meshPrimitiveGpmLocal The extension object\n * @param {object} textures The mapping from texture ID to texture objects\n * @returns The `StructuralMetadata` object\n */\nGltfMeshPrimitiveGpmLoader._convertToStructuralMetadata = function (\n  meshPrimitiveGpmLocal,\n  textures,\n) {\n  const propertyTextures = [];\n  const ppeTexturesMetadataSchema =\n    GltfMeshPrimitiveGpmLoader._obtainPpeTexturesMetadataSchema(\n      meshPrimitiveGpmLocal,\n    );\n  const ppeTextures = meshPrimitiveGpmLocal.ppeTextures;\n  for (let i = 0; i < ppeTextures.length; i++) {\n    const ppeTexture = ppeTextures[i];\n    const classId = `ppeTexture_${i}`;\n    const traits = ppeTexture.traits;\n    const ppePropertyName = traits.source;\n    const metadataClass = ppeTexturesMetadataSchema.classes[classId];\n\n    const ppeTextureAsPropertyTexture = {\n      class: classId,\n      properties: {\n        [ppePropertyName]: {\n          index: ppeTexture.index,\n          texCoord: ppeTexture.texCoord,\n        },\n      },\n    };\n    propertyTextures.push(\n      new PropertyTexture({\n        id: i,\n        name: ppeTexture.name,\n        propertyTexture: ppeTextureAsPropertyTexture,\n        class: metadataClass,\n        textures: textures,\n      }),\n    );\n  }\n  const structuralMetadata = new StructuralMetadata({\n    schema: ppeTexturesMetadataSchema,\n    propertyTables: [],\n    propertyTextures: propertyTextures,\n    propertyAttributes: [],\n  });\n  return structuralMetadata;\n};\n\n/**\n * Processes the resource until it becomes ready.\n *\n * @param {FrameState} frameState The frame state.\n * @private\n */\nGltfMeshPrimitiveGpmLoader.prototype.process = function (frameState) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"frameState\", frameState);\n  //>>includeEnd('debug');\n\n  if (this._state === ResourceLoaderState.READY) {\n    return true;\n  }\n\n  if (this._state !== ResourceLoaderState.LOADED) {\n    return false;\n  }\n\n  // The standard process of loading textures\n  // (from GltfStructuralMetadataLoader)\n  const textureLoaders = this._textureLoaders;\n  const textureLoadersLength = textureLoaders.length;\n  let ready = true;\n  for (let i = 0; i < textureLoadersLength; ++i) {\n    const textureLoader = textureLoaders[i];\n    const textureReady = textureLoader.process(frameState);\n    ready = ready && textureReady;\n  }\n\n  if (!ready) {\n    return false;\n  }\n\n  // More of the standard process of loading textures\n  // (from GltfStructuralMetadataLoader)\n  const textures = {};\n  for (let i = 0; i < this._textureIds.length; ++i) {\n    const textureId = this._textureIds[i];\n    const textureLoader = textureLoaders[i];\n    if (!textureLoader.isDestroyed()) {\n      textures[textureId] = textureLoader.texture;\n    }\n  }\n\n  // Convert the JSON representation of the `ppeTextures` that\n  // are found in the extensjon JSON into `PpeTexture` objects\n  const ppeTextures = [];\n  const extension = this._extension;\n  if (defined(extension.ppeTextures)) {\n    const ppeTexturesJson = extension.ppeTextures;\n    for (const ppeTextureJson of ppeTexturesJson) {\n      const traitsJson = ppeTextureJson.traits;\n      const traits = new PpeMetadata({\n        min: traitsJson.min,\n        max: traitsJson.max,\n        source: traitsJson.source,\n      });\n      const ppeTexture = new PpeTexture({\n        traits: traits,\n        noData: ppeTextureJson.noData,\n        offset: ppeTextureJson.offset,\n        scale: ppeTextureJson.scale,\n        index: ppeTextureJson.index,\n        texCoord: ppeTextureJson.texCoord,\n      });\n      ppeTextures.push(ppeTexture);\n    }\n  }\n  const meshPrimitiveGpmLocal = new MeshPrimitiveGpmLocal(ppeTextures);\n  this._meshPrimitiveGpmLocal = meshPrimitiveGpmLocal;\n\n  const structuralMetadata =\n    GltfMeshPrimitiveGpmLoader._convertToStructuralMetadata(\n      meshPrimitiveGpmLocal,\n      textures,\n    );\n  this._structuralMetadata = structuralMetadata;\n\n  this._state = ResourceLoaderState.READY;\n  return true;\n};\n\nGltfMeshPrimitiveGpmLoader.prototype._unloadTextures = function () {\n  const textureLoaders = this._textureLoaders;\n  const textureLoadersLength = textureLoaders.length;\n  for (let i = 0; i < textureLoadersLength; ++i) {\n    ResourceCache.unload(textureLoaders[i]);\n  }\n  this._textureLoaders.length = 0;\n  this._textureIds.length = 0;\n};\n\n/**\n * Unloads the resource.\n * @private\n */\nGltfMeshPrimitiveGpmLoader.prototype.unload = function () {\n  this._unloadTextures();\n  this._gltf = undefined;\n  this._extension = undefined;\n  this._structuralMetadata = undefined;\n};\n\nexport default GltfMeshPrimitiveGpmLoader;\n","/**\n * Local Generic Point-cloud Model information about a glTF primitive.\n *\n * @param {PpeTexture[]} ppeTextures The Per-Point Error textures\n *\n * @constructor\n * @private\n */\nfunction MeshPrimitiveGpmLocal(ppeTextures) {\n  this._ppeTextures = ppeTextures;\n}\n\nObject.defineProperties(MeshPrimitiveGpmLocal.prototype, {\n  /**\n   * An array of ppe textures.\n   *\n   * @memberof MeshPrimitiveGpmLocal.prototype\n   * @type {PpeTexture[]|undefined}\n   * @readonly\n   */\n  ppeTextures: {\n    get: function () {\n      return this._ppeTextures;\n    },\n  },\n});\n\nexport default MeshPrimitiveGpmLocal;\n","import Check from \"../../../../Core/Check.js\";\n\n/**\n * @typedef {object} PpeMetadata.ConstructorOptions\n *\n * Initialization options for the PpeMetadata constructor\n *\n * @property {PpeSource} source The source of the error data\n * @property {number|undefined} [min] Minimum allowed value for the property.\n * @property {number|undefined} [max] Maximum allowed value for the property.\n */\n\n/**\n * Metadata related to the stored PPE (Per-Point Error) data.\n *\n * This reflects the `ppeMetadata` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n *\n * @constructor\n * @param {PpeMetadata.ConstructorOptions} options An object describing initialization options\n *\n * @private\n */\nfunction PpeMetadata(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.source\", options.source);\n  //>>includeEnd('debug');\n\n  this._min = options.min;\n  this._max = options.max;\n  this._source = options.source;\n}\n\nObject.defineProperties(PpeMetadata.prototype, {\n  /**\n   * Minimum allowed value for the property. This is the minimum of all\n   * values after the transforms based on the offset and scale properties\n   * have been applied.\n   *\n   * @memberof PpeMetadata.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  min: {\n    get: function () {\n      return this._min;\n    },\n  },\n\n  /**\n   * Maximum allowed value for the property. This is the maximum of all\n   * values after the transforms based on the offset and scale properties\n   * have been applied.\n   *\n   * @memberof PpeMetadata.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  max: {\n    get: function () {\n      return this._max;\n    },\n  },\n\n  /**\n   * Possible error source contents\n   *\n   * @memberof PpeMetadata.prototype\n   * @type {PpeSource}\n   * @readonly\n   */\n  source: {\n    get: function () {\n      return this._source;\n    },\n  },\n});\n\nexport default PpeMetadata;\n","/**\n * An enum of per-point error sources.\n *\n * This reflects the `ppeMetadata.source` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n *\n * @enum {string}\n * @private\n */\nconst PpeSource = {\n  /**\n   * The PPE standard deviation of error in the x dimension of the MCS (sigma x). Value will be squared\n   * and used to populate the (1,1) element in the PPE covariance matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  SIGX: \"SIGX\",\n\n  /**\n   * The PPE standard deviation of error in the y dimension of the MCS (sigma y). Value will be squared\n   * and used to populate the (2,2) element in the PPE covariance matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  SIGY: \"SIGY\",\n\n  /**\n   * The PPE standard deviation of error in the z dimension of the MCS (sigma z). Value will be squared\n   * and used to populate the (3,3) element in the PPE covariance matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  SIGZ: \"SIGZ\",\n\n  /**\n   * The PPE variance of error in the x dimension of the MCS (sigma x2). Value will be used to populate\n   * the (1,1) element in the PPE covariance matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  VARX: \"VARX\",\n\n  /**\n   * The PPE variance of error in the y dimension of the MCS (sigma y2). Value will be used to populate\n   * the (2,2) element in the PPE covariance matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  VARY: \"VARY\",\n\n  /**\n   * The PPE variance of error in the z dimension of the MCS (sigma z2). Value will be used to populate\n   * the (3,3) element in the PPE covariance matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  VARZ: \"VARZ\",\n\n  /**\n   * The PPE radial error in the horizontal dimension (x-y) of the MCS (sigma radial) . Value will be squared\n   * and used to populate the (1,1) and (2,2) element in the PPE covariance matrix.\n   *\n   * @type {string}\n   * @constant\n   */\n  SIGR: \"VARZ\",\n};\n\nexport default Object.freeze(PpeSource);\n","import Check from \"../../../../Core/Check.js\";\n\n/**\n * @typedef {object} PpeTexture.ConstructorOptions\n *\n * Initialization options for the PpeTexture constructor\n *\n * @property {PpeMetadata} traits The traits that indicate which data is stored in this texture\n * @property {number} index The index of the texture inside the glTF textures array\n * @property {number|undefined} [texCoord] The optional set index for the TEXCOORD attribute\n * @property {number|undefined} [noData] The value to represent missing data\n * @property {number|undefined} [offset] An offset to apply to property values.\n * @property {number|undefined} [scale] A scale to apply to property values.\n */\n\n/**\n * PPE (Per-Point Error) texture in `NGA_gpm_local`.\n *\n * This reflects the `ppeTexture` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n *\n * This is a valid glTF `TextureInfo` object (with a required `index`\n * and an optional `texCoord)`, with additional properties that\n * describe the structure of the metdata that is stored in the texture.\n *\n * @constructor\n * @param {PpeTexture.ConstructorOptions} options An object describing initialization options\n *\n * @private\n */\nfunction PpeTexture(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.traits\", options.traits);\n  Check.typeOf.number.greaterThanOrEquals(\"options.index\", options.index, 0);\n  //>>includeEnd('debug');\n\n  this._traits = options.traits;\n  this._noData = options.noData;\n  this._offset = options.offset;\n  this._scale = options.scale;\n  this._index = options.index;\n  this._texCoord = options.texCoord;\n}\n\nObject.defineProperties(PpeTexture.prototype, {\n  /**\n   * The data contained here applies to this node and corresponding\n   * texture.\n   *\n   * @memberof PpeTexture.prototype\n   * @type {PpeMetadata}\n   * @readonly\n   */\n  traits: {\n    get: function () {\n      return this._traits;\n    },\n  },\n\n  /**\n   * A value to represent missing data - also known as a sentinel value -\n   * wherever it appears.\n   *\n   * @memberof PpeTexture.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  noData: {\n    get: function () {\n      return this._noData;\n    },\n  },\n\n  /**\n   * An offset to apply to property values.\n   *\n   * @memberof PpeTexture.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  offset: {\n    get: function () {\n      return this._offset;\n    },\n  },\n\n  /**\n   * An scale to apply to property values.\n   *\n   * @memberof PpeTexture.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n  },\n\n  /**\n   * The index of the texture\n   *\n   * @memberof PpeTexture.prototype\n   * @type {number}\n   * @readonly\n   */\n  index: {\n    get: function () {\n      return this._index;\n    },\n  },\n\n  /**\n   * The set index of texture's TEXCOORD attribute used for texture coordinate mapping.\n   *\n   * @memberof PpeTexture.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  texCoord: {\n    get: function () {\n      return this._texCoord;\n    },\n  },\n});\n\nexport default PpeTexture;\n","import Check from \"../../../../Core/Check.js\";\n\n/**\n * @typedef {object} Spdcf.ConstructorOptions\n *\n * Initialization options for the Spdcf constructor\n *\n * @property {number} A The factor A, in (0, 1]\n * @property {number} alpha The alpha value, in [0, 1)\n * @property {number} beta The beta value, in [0, 10]\n * @property {number} T the tau value, in (0, +inf)\n */\n\n/**\n * Variables for a Strictly Positive-Definite Correlation Function.\n *\n * This reflects the `spdcf` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n * Instances of this type are stored as the parameters within a\n * `CorrelationGroup`.\n *\n * Parameters (A, alpha, beta, T) describe the correlation decrease\n * between points as a function of delta time:\n * ```\n * spdcf(delta_t) = A_t * (alpha_t + ((1 - alpha_t)(1 + beta_t)) / (beta_t + e^(delta_t/T_t)))\n * ```\n *\n * @constructor\n * @param {Spdcf.ConstructorOptions} options An object describing initialization options\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction Spdcf(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"options.A\", options.A, 0.0);\n  Check.typeOf.number.lessThanOrEquals(\"options.A\", options.A, 1.0);\n  Check.typeOf.number.greaterThanOrEquals(\"options.alpha\", options.alpha, 0.0);\n  Check.typeOf.number.lessThan(\"options.alpha\", options.alpha, 1.0);\n  Check.typeOf.number.greaterThanOrEquals(\"options.beta\", options.beta, 0.0);\n  Check.typeOf.number.lessThanOrEquals(\"options.beta\", options.beta, 10.0);\n  Check.typeOf.number.greaterThan(\"options.T\", options.T, 0.0);\n  //>>includeEnd('debug');\n\n  this._A = options.A;\n  this._alpha = options.alpha;\n  this._beta = options.beta;\n  this._T = options.T;\n}\n\nObject.defineProperties(Spdcf.prototype, {\n  /**\n   * In (0, 1]\n   *\n   * @memberof Spdcf.prototype\n   * @type {number}\n   * @readonly\n   */\n  A: {\n    get: function () {\n      return this._A;\n    },\n  },\n\n  /**\n   * In [0, 1)\n   *\n   * @memberof Spdcf.prototype\n   * @type {number}\n   * @readonly\n   */\n  alpha: {\n    get: function () {\n      return this._alpha;\n    },\n  },\n\n  /**\n   * In [0, 10]\n   *\n   * @memberof Spdcf.prototype\n   * @type {number}\n   * @readonly\n   */\n  beta: {\n    get: function () {\n      return this._beta;\n    },\n  },\n\n  /**\n   * In (0, +inf)\n   *\n   * @memberof Spdcf.prototype\n   * @type {number}\n   * @readonly\n   */\n  T: {\n    get: function () {\n      return this._T;\n    },\n  },\n});\n\nexport default Spdcf;\n","/**\n * An enum of storage types for covariance information.\n *\n * This reflects the `gltfGpmLocal.storageType` definition of the\n * {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local} glTF extension.\n *\n * @enum {string}\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst StorageType = {\n  /**\n   * Store the full error covariance of the anchor points, to include the cross-covariance terms\n   *\n   * @type {string}\n   * @constant\n   */\n  Direct: \"Direct\",\n\n  /**\n   * A full covariance matrix is stored for each of the anchor points. However, in this case the\n   * cross-covariance terms are not directly stored, but can be computed by a set of spatial\n   * correlation function parameters which are stored in the metadata.\n   *\n   * @type {string}\n   * @constant\n   */\n  Indirect: \"Indirect\",\n};\n\nexport default Object.freeze(StorageType);\n","import ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport FeatureIdStageFS from \"../../Shaders/Model/FeatureIdStageFS.js\";\nimport FeatureIdStageVS from \"../../Shaders/Model/FeatureIdStageVS.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport Matrix3 from \"../../Core/Matrix3.js\";\n\n/**\n * The feature ID pipeline stage is responsible for processing feature IDs\n * (both attributes and textures), updating the shader in preparation for\n * custom shaders, picking, and/or styling.\n *\n * @namespace FeatureIdPipelineStage\n * @private\n */\nconst FeatureIdPipelineStage = {\n  name: \"FeatureIdPipelineStage\", // Helps with debugging\n\n  STRUCT_ID_FEATURE_IDS_VS: \"FeatureIdsVS\",\n  STRUCT_ID_FEATURE_IDS_FS: \"FeatureIdsFS\",\n  STRUCT_NAME_FEATURE_IDS: \"FeatureIds\",\n  FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS: \"initializeFeatureIdsVS\",\n  FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS: \"initializeFeatureIdsFS\",\n  FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS: \"initializeFeatureIdAliasesVS\",\n  FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS: \"initializeFeatureIdAliasesFS\",\n  FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS:\n    \"void initializeFeatureIds(out FeatureIds featureIds, ProcessedAttributes attributes)\",\n  FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES:\n    \"void initializeFeatureIdAliases(inout FeatureIds featureIds)\",\n  FUNCTION_ID_SET_FEATURE_ID_VARYINGS: \"setFeatureIdVaryings\",\n  FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS: \"void setFeatureIdVaryings()\",\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render resources:\n * <ul>\n *  <li>Adds the FeatureIds struct and corresponding initialization functions in the vertex and fragment shader</li>\n *  <li>For each feature ID attribute, the attributes were already uploaded in the geometry stage, so just update the shader code </li>\n *  <li>For each feature ID implicit range, a new attribute is created and uploaded to the GPU since gl_VertexID is not available in WebGL 1. The shader is updated with an attribute, varying, and initialization code.</li>\n *  <li>For each feature ID texture, the texture is added to the uniform map, and shader code is added to perform the texture read.</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n */\nFeatureIdPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  declareStructsAndFunctions(shaderBuilder);\n\n  const instances = renderResources.runtimeNode.node.instances;\n  if (defined(instances)) {\n    processInstanceFeatureIds(renderResources, instances, frameState);\n  }\n  processPrimitiveFeatureIds(renderResources, primitive, frameState);\n\n  shaderBuilder.addVertexLines(FeatureIdStageVS);\n  shaderBuilder.addFragmentLines(FeatureIdStageFS);\n};\n\nfunction declareStructsAndFunctions(shaderBuilder) {\n  // Declare the FeatureIds struct. The vertex shader will only use\n  // feature ID attributes, while the fragment shader will also use\n  // feature ID textures.\n  shaderBuilder.addStruct(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_VS,\n    FeatureIdPipelineStage.STRUCT_NAME_FEATURE_IDS,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addStruct(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_FS,\n    FeatureIdPipelineStage.STRUCT_NAME_FEATURE_IDS,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // declare the initializeFeatureIds() function. The details may differ\n  // between vertex and fragment shader\n  shaderBuilder.addFunction(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,\n    FeatureIdPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addFunction(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,\n    FeatureIdPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // declare the initializeFeatureIdAliases() function. The details may differ\n  // between vertex and fragment shader\n  shaderBuilder.addFunction(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,\n    FeatureIdPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addFunction(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,\n    FeatureIdPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // declare the setFeatureIdVaryings() function in the vertex shader only\n  shaderBuilder.addFunction(\n    FeatureIdPipelineStage.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,\n    FeatureIdPipelineStage.FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS,\n    ShaderDestination.VERTEX,\n  );\n}\n\nfunction processInstanceFeatureIds(renderResources, instances, frameState) {\n  const featureIdsArray = instances.featureIds;\n  const count = instances.attributes[0].count;\n\n  for (let i = 0; i < featureIdsArray.length; i++) {\n    const featureIds = featureIdsArray[i];\n    const variableName = featureIds.positionalLabel;\n\n    if (featureIds instanceof ModelComponents.FeatureIdAttribute) {\n      processInstanceAttribute(renderResources, featureIds, variableName);\n    } else {\n      const instanceDivisor = 1;\n      processImplicitRange(\n        renderResources,\n        featureIds,\n        variableName,\n        count,\n        instanceDivisor,\n        frameState,\n      );\n    }\n\n    const label = featureIds.label;\n    if (defined(label)) {\n      addAlias(renderResources, variableName, label, ShaderDestination.BOTH);\n    }\n  }\n}\n\nfunction processPrimitiveFeatureIds(renderResources, primitive, frameState) {\n  const featureIdsArray = primitive.featureIds;\n  const positionAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.POSITION,\n  );\n  const count = positionAttribute.count;\n\n  for (let i = 0; i < featureIdsArray.length; i++) {\n    const featureIds = featureIdsArray[i];\n    const variableName = featureIds.positionalLabel;\n\n    let aliasDestination = ShaderDestination.BOTH;\n    if (featureIds instanceof ModelComponents.FeatureIdAttribute) {\n      processAttribute(renderResources, featureIds, variableName);\n    } else if (featureIds instanceof ModelComponents.FeatureIdImplicitRange) {\n      processImplicitRange(\n        renderResources,\n        featureIds,\n        variableName,\n        count,\n        undefined,\n        frameState,\n      );\n    } else {\n      processTexture(renderResources, featureIds, variableName, i, frameState);\n      aliasDestination = ShaderDestination.FRAGMENT;\n    }\n\n    const label = featureIds.label;\n    if (defined(label)) {\n      addAlias(renderResources, variableName, label, aliasDestination);\n    }\n  }\n}\n\nfunction processInstanceAttribute(\n  renderResources,\n  featureIdAttribute,\n  variableName,\n) {\n  // Add a field to the FeatureIds struct.\n  // Example:\n  // struct FeatureIds {\n  //   ...\n  //   int instanceFeatureId_n;\n  //   ...\n  // }\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_VS,\n    \"int\",\n    variableName,\n  );\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_FS,\n    \"int\",\n    variableName,\n  );\n\n  // Initialize the field from the corresponding attribute.\n  // Example: featureIds.instanceFeatureId_n = int(czm_round(attributes.instanceFeatureId_0));\n  const setIndex = featureIdAttribute.setIndex;\n  const prefix = variableName.replace(/_\\d+$/, \"_\");\n\n  const attributeName = `a_${prefix}${setIndex}`;\n  const varyingName = `v_${prefix}${setIndex}`;\n  const vertexLine = `featureIds.${variableName} = int(czm_round(${attributeName}));`;\n  const fragmentLine = `featureIds.${variableName} = int(czm_round(${varyingName}));`;\n\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,\n    [vertexLine],\n  );\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,\n    [fragmentLine],\n  );\n\n  // Instanced attributes don't normally need varyings, so add one here\n  shaderBuilder.addVarying(\"float\", varyingName);\n\n  // The varying needs initialization in the vertex shader\n  // Example:\n  // v_instanceFeatureId_n = a_instanceFeatureId_n;\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,\n    [`${varyingName} = ${attributeName};`],\n  );\n}\n\nfunction processAttribute(renderResources, featureIdAttribute, variableName) {\n  // Add a field to the FeatureIds struct.\n  // Example:\n  // struct FeatureIds {\n  //   ...\n  //   int featureId_n;\n  //   ...\n  // }\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_VS,\n    \"int\",\n    variableName,\n  );\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_FS,\n    \"int\",\n    variableName,\n  );\n\n  // Initialize the field from the corresponding attribute.\n  // Example: featureIds.featureId_n = attributes.featureId_0;\n  // Since this uses the ProcessedAttributes struct, the line is the same\n  // for both vertex and fragment shader.\n  const setIndex = featureIdAttribute.setIndex;\n  const prefix = variableName.replace(/_\\d+$/, \"_\");\n\n  const initializationLines = [\n    `featureIds.${variableName} = int(czm_round(attributes.${prefix}${setIndex}));`,\n  ];\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,\n    initializationLines,\n  );\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,\n    initializationLines,\n  );\n}\n\nfunction processImplicitRange(\n  renderResources,\n  implicitFeatureIds,\n  variableName,\n  count,\n  instanceDivisor,\n  frameState,\n) {\n  // Generate a vertex attribute for the implicit IDs since WebGL 1 does not\n  // support gl_VertexID\n  generateImplicitFeatureIdAttribute(\n    renderResources,\n    implicitFeatureIds,\n    count,\n    instanceDivisor,\n    frameState,\n  );\n\n  // Declare the vertex attribute in the shader\n  // Example: in float a_implicit_feature_id_n;\n  const shaderBuilder = renderResources.shaderBuilder;\n  const implicitAttributeName = `a_implicit_${variableName}`;\n  shaderBuilder.addAttribute(\"float\", implicitAttributeName);\n\n  // Also declare the corresponding varyings\n  // Example: in float v_implicit_feature_id_n;\n  const implicitVaryingName = `v_implicit_${variableName}`;\n  shaderBuilder.addVarying(\"float\", implicitVaryingName);\n\n  // Add a field to the FeatureIds struct.\n  // Example:\n  // struct FeatureIds {\n  //   ...\n  //   int featureId_n;\n  //   ...\n  // }\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_VS,\n    \"int\",\n    variableName,\n  );\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_FS,\n    \"int\",\n    variableName,\n  );\n\n  // The varying needs initialization in the vertex shader\n  // Example:\n  // v_implicit_featureId_n = a_implicit_featureId_n;\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,\n    [`${implicitVaryingName} = ${implicitAttributeName};`],\n  );\n\n  // Initialize the field from the generated attribute/varying.\n  // Example:\n  // featureIds.featureId_n = a_implicit_featureId_n; (VS)\n  // featureIds.featureId_n = v_implicit_featureId_n; (FS)\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,\n    [`featureIds.${variableName} = int(czm_round(${implicitAttributeName}));`],\n  );\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,\n    [`featureIds.${variableName} = int(czm_round(${implicitVaryingName}));`],\n  );\n}\n\nfunction processTexture(\n  renderResources,\n  featureIdTexture,\n  variableName,\n  index,\n  frameState,\n) {\n  // Create the feature ID texture uniform. The index matches the index from\n  // the featureIds array, even if this is not consecutive.\n  const uniformName = `u_featureIdTexture_${index}`;\n  const uniformMap = renderResources.uniformMap;\n  const textureReader = featureIdTexture.textureReader;\n  uniformMap[uniformName] = function () {\n    return textureReader.texture ?? frameState.context.defaultTexture;\n  };\n\n  const channels = textureReader.channels;\n\n  // Add a field to the FeatureIds struct in the fragment shader only\n  // Example:\n  // struct FeatureIds {\n  //   ...\n  //   int featureId_n;\n  //   ...\n  // }\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_FS,\n    \"int\",\n    variableName,\n  );\n\n  // Declare the uniform in the fragment shader\n  shaderBuilder.addUniform(\n    \"sampler2D\",\n    uniformName,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // Get a GLSL expression for the texture coordinates\n  const texCoord = textureReader.texCoord;\n  const texCoordVariable = `v_texCoord_${texCoord}`;\n  let texCoordVariableExpression = texCoordVariable;\n\n  // Check if the texture defines a `transform` from a `KHR_texture_transform`\n  const transform = textureReader.transform;\n  if (defined(transform) && !Matrix3.equals(transform, Matrix3.IDENTITY)) {\n    // Add a uniform for the transformation matrix\n    const transformUniformName = `${uniformName}Transform`;\n    shaderBuilder.addUniform(\n      \"mat3\",\n      transformUniformName,\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap[transformUniformName] = function () {\n      return transform;\n    };\n    // Update the expression for the texture coordinates\n    // with one that transforms the texture coordinates\n    // with the transform matrix first\n    texCoordVariableExpression = `vec2(${transformUniformName} * vec3(${texCoordVariable}, 1.0))`;\n  }\n  // Read one or more channels from the texture\n  // example: texture(u_featureIdTexture_0, v_texCoord_1).rg\n  const textureRead = `texture(${uniformName}, ${texCoordVariableExpression}).${channels}`;\n\n  // Finally, assign to the struct field. Example:\n  // featureIds.featureId_0 = unpacked;\n  const initializationLine = `featureIds.${variableName} = czm_unpackUint(${textureRead});`;\n\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,\n    [initializationLine],\n  );\n}\n\nfunction addAlias(renderResources, variableName, alias, shaderDestination) {\n  // Add a field to the FeatureIds struct.\n  // Example:\n  // struct FeatureIds {\n  //   ...\n  //   int alias;\n  //   ...\n  // }\n  const shaderBuilder = renderResources.shaderBuilder;\n  const updateVS = ShaderDestination.includesVertexShader(shaderDestination);\n  if (updateVS) {\n    shaderBuilder.addStructField(\n      FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_VS,\n      \"int\",\n      alias,\n    );\n  }\n  shaderBuilder.addStructField(\n    FeatureIdPipelineStage.STRUCT_ID_FEATURE_IDS_FS,\n    \"int\",\n    alias,\n  );\n\n  // Initialize the field from the original variable\n  // Example: featureIds.alias = featureIds.featureId_n;\n  const initializationLines = [\n    `featureIds.${alias} = featureIds.${variableName};`,\n  ];\n  if (updateVS) {\n    shaderBuilder.addFunctionLines(\n      FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,\n      initializationLines,\n    );\n  }\n  shaderBuilder.addFunctionLines(\n    FeatureIdPipelineStage.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,\n    initializationLines,\n  );\n}\n\nfunction generateImplicitFeatureIdAttribute(\n  renderResources,\n  implicitFeatureIds,\n  count,\n  instanceDivisor,\n  frameState,\n) {\n  const model = renderResources.model;\n  let vertexBuffer;\n  let value;\n  if (defined(implicitFeatureIds.repeat)) {\n    const typedArray = generateImplicitFeatureIdTypedArray(\n      implicitFeatureIds,\n      count,\n    );\n    vertexBuffer = Buffer.createVertexBuffer({\n      context: frameState.context,\n      typedArray: typedArray,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    vertexBuffer.vertexArrayDestroyable = false;\n    model._pipelineResources.push(vertexBuffer);\n    const hasCpuCopy = false;\n    model.statistics.addBuffer(vertexBuffer, hasCpuCopy);\n  } else {\n    value = [implicitFeatureIds.offset];\n  }\n\n  const generatedFeatureIdAttribute = {\n    index: renderResources.attributeIndex++,\n    instanceDivisor: instanceDivisor,\n    value: value,\n    vertexBuffer: vertexBuffer,\n    normalize: false,\n    componentsPerAttribute: 1,\n    componentDatatype: ComponentDatatype.FLOAT,\n    strideInBytes: ComponentDatatype.getSizeInBytes(ComponentDatatype.FLOAT),\n    offsetInBytes: 0,\n  };\n\n  renderResources.attributes.push(generatedFeatureIdAttribute);\n}\n\n/**\n * Generates a typed array for implicit feature IDs\n * @private\n */\nfunction generateImplicitFeatureIdTypedArray(implicitFeatureIds, count) {\n  const offset = implicitFeatureIds.offset;\n  const repeat = implicitFeatureIds.repeat;\n\n  const typedArray = new Float32Array(count);\n  for (let i = 0; i < count; i++) {\n    typedArray[i] = offset + Math.floor(i / repeat);\n  }\n\n  return typedArray;\n}\n\nexport default FeatureIdPipelineStage;\n","import Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Check from \"../../Core/Check.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport Ellipsoid from \"../../Core/Ellipsoid.js\";\nimport IndexDatatype from \"../../Core/IndexDatatype.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport RuntimeError from \"../../Core/RuntimeError.js\";\nimport Transforms from \"../../Core/Transforms.js\";\nimport AttributeType from \"../AttributeType.js\";\nimport JsonMetadataTable from \"../JsonMetadataTable.js\";\nimport MetadataSchema from \"../MetadataSchema.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport PropertyTable from \"../PropertyTable.js\";\nimport ResourceLoader from \"../ResourceLoader.js\";\nimport StructuralMetadata from \"../StructuralMetadata.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport addAllToArray from \"../../Core/addAllToArray.js\";\n\n/**\n * Loads a GeoJson model as part of the <code>MAXAR_content_geojson</code> extension with the following constraints:\n * <ul>\n *   <li>The top level GeoJSON type must be FeatureCollection or Feature.</li>\n *   <li>The geometry types must be LineString, MultiLineString, MultiPolygon, Polygon, MultiPoint, or Point.</li>\n *   <li>Polygon and polyline geometries are converted to geodesic lines.</li>\n *   <li>Only WGS84 geographic coordinates are supported.</li>\n * </ul>\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass GeoJsonLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {object} options.geoJson The GeoJson object.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"options.geoJson\", options.geoJson);\n    //>>includeEnd('debug');\n\n    this._geoJson = options.geoJson;\n    this._components = undefined;\n  }\n\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof GeoJsonLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return undefined;\n  }\n\n  /**\n   * The loaded components.\n   *\n   * @memberof GeoJsonLoader.prototype\n   *\n   * @type {ModelComponents.Components}\n   * @readonly\n   * @private\n   */\n  get components() {\n    return this._components;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<GeoJsonLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  load() {\n    return Promise.resolve(this);\n  }\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @private\n   */\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (defined(this._components)) {\n      return true;\n    }\n\n    this._components = parse(this._geoJson, frameState);\n    this._geoJson = undefined;\n    return true;\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {\n    this._components = undefined;\n  }\n}\n\nfunction ParsedFeature() {\n  this.lines = undefined;\n  this.points = undefined;\n  this.properties = undefined;\n}\n\nfunction ParseResult() {\n  this.features = [];\n}\n\nfunction parsePosition(position) {\n  const x = position[0];\n  const y = position[1];\n  const z = position[2] ?? 0.0;\n  return new Cartesian3(x, y, z);\n}\n\nfunction parseLineString(coordinates) {\n  const positionsLength = coordinates.length;\n  const line = new Array(positionsLength);\n  for (let i = 0; i < positionsLength; i++) {\n    line[i] = parsePosition(coordinates[i]);\n  }\n  const lines = [line];\n  return lines;\n}\n\nfunction parseMultiLineString(coordinates) {\n  const linesLength = coordinates.length;\n  const lines = new Array(linesLength);\n  for (let i = 0; i < linesLength; i++) {\n    lines[i] = parseLineString(coordinates[i])[0];\n  }\n  return lines;\n}\n\nfunction parsePolygon(coordinates) {\n  // Treat exterior polygon and interior polygons as lines\n  const linesLength = coordinates.length;\n  const lines = new Array(linesLength);\n  for (let i = 0; i < linesLength; i++) {\n    lines[i] = parseLineString(coordinates[i])[0];\n  }\n  return lines;\n}\n\nfunction parseMultiPolygon(coordinates) {\n  const polygonsLength = coordinates.length;\n  const lines = [];\n  for (let i = 0; i < polygonsLength; i++) {\n    const polygon = parsePolygon(coordinates[i]);\n    addAllToArray(lines, polygon);\n  }\n  return lines;\n}\n\nfunction parsePoint(coordinates) {\n  return [parsePosition(coordinates)];\n}\n\nfunction parseMultiPoint(coordinates) {\n  const pointsLength = coordinates.length;\n  const points = new Array(pointsLength);\n  for (let i = 0; i < pointsLength; i++) {\n    points[i] = parsePosition(coordinates[i]);\n  }\n  return points;\n}\n\nconst geometryTypes = {\n  LineString: parseLineString,\n  MultiLineString: parseMultiLineString,\n  MultiPolygon: parseMultiPolygon,\n  Polygon: parsePolygon,\n  MultiPoint: parseMultiPoint,\n  Point: parsePoint,\n};\n\nconst primitiveTypes = {\n  LineString: PrimitiveType.LINES,\n  MultiLineString: PrimitiveType.LINES,\n  MultiPolygon: PrimitiveType.LINES,\n  Polygon: PrimitiveType.LINES,\n  MultiPoint: PrimitiveType.POINTS,\n  Point: PrimitiveType.POINTS,\n};\n\nfunction parseFeature(feature, result) {\n  if (!defined(feature.geometry)) {\n    return;\n  }\n\n  const geometryType = feature.geometry.type;\n  const geometryFunction = geometryTypes[geometryType];\n  const primitiveType = primitiveTypes[geometryType];\n  const coordinates = feature.geometry.coordinates;\n\n  if (!defined(geometryFunction)) {\n    return;\n  }\n\n  if (!defined(coordinates)) {\n    return;\n  }\n\n  const parsedFeature = new ParsedFeature();\n\n  if (primitiveType === PrimitiveType.LINES) {\n    parsedFeature.lines = geometryFunction(coordinates);\n  } else if (primitiveType === PrimitiveType.POINTS) {\n    parsedFeature.points = geometryFunction(coordinates);\n  }\n\n  parsedFeature.properties = feature.properties;\n\n  result.features.push(parsedFeature);\n}\n\nfunction parseFeatureCollection(featureCollection, result) {\n  const features = featureCollection.features;\n  const featuresLength = features.length;\n  for (let i = 0; i < featuresLength; i++) {\n    parseFeature(features[i], result);\n  }\n}\n\nconst geoJsonObjectTypes = {\n  FeatureCollection: parseFeatureCollection,\n  Feature: parseFeature,\n};\n\nconst scratchCartesian = new Cartesian3();\n\nfunction createLinesPrimitive(features, toLocal, frameState) {\n  // Count the number of vertices and indices\n  let vertexCount = 0;\n  let indexCount = 0;\n\n  const featureCount = features.length;\n\n  for (let i = 0; i < featureCount; i++) {\n    const feature = features[i];\n    if (defined(feature.lines)) {\n      const linesLength = feature.lines.length;\n      for (let j = 0; j < linesLength; j++) {\n        const line = feature.lines[j];\n        vertexCount += line.length;\n        indexCount += (line.length - 1) * 2;\n      }\n    }\n  }\n\n  // Allocate typed arrays\n  const positionsTypedArray = new Float32Array(vertexCount * 3);\n  const featureIdsTypedArray = new Float32Array(vertexCount);\n  const indicesTypedArray = IndexDatatype.createTypedArray(\n    vertexCount,\n    indexCount,\n  );\n  const indexDatatype = IndexDatatype.fromTypedArray(indicesTypedArray);\n\n  // Process the data. Convert positions to local ENU. Generate indices.\n  const localMin = new Cartesian3(\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n  );\n\n  const localMax = new Cartesian3(\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n  );\n\n  let vertexCounter = 0;\n  let segmentCounter = 0;\n\n  for (let i = 0; i < featureCount; i++) {\n    const feature = features[i];\n\n    if (!defined(feature.lines)) {\n      continue;\n    }\n\n    const linesLength = feature.lines.length;\n    for (let j = 0; j < linesLength; j++) {\n      const line = feature.lines[j];\n      const positionsLength = line.length;\n      for (let k = 0; k < positionsLength; k++) {\n        const cartographic = line[k];\n        const globalCartesian = Cartesian3.fromDegrees(\n          cartographic.x,\n          cartographic.y,\n          cartographic.z,\n          Ellipsoid.WGS84,\n          scratchCartesian,\n        );\n        const localCartesian = Matrix4.multiplyByPoint(\n          toLocal,\n          globalCartesian,\n          scratchCartesian,\n        );\n\n        Cartesian3.minimumByComponent(localMin, localCartesian, localMin);\n        Cartesian3.maximumByComponent(localMax, localCartesian, localMax);\n\n        Cartesian3.pack(localCartesian, positionsTypedArray, vertexCounter * 3);\n\n        featureIdsTypedArray[vertexCounter] = i;\n\n        if (k < positionsLength - 1) {\n          indicesTypedArray[segmentCounter * 2] = vertexCounter;\n          indicesTypedArray[segmentCounter * 2 + 1] = vertexCounter + 1;\n          segmentCounter++;\n        }\n\n        vertexCounter++;\n      }\n    }\n  }\n\n  // Create GPU buffers\n  const positionBuffer = Buffer.createVertexBuffer({\n    typedArray: positionsTypedArray,\n    context: frameState.context,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  positionBuffer.vertexArrayDestroyable = false;\n\n  const featureIdBuffer = Buffer.createVertexBuffer({\n    typedArray: featureIdsTypedArray,\n    context: frameState.context,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  featureIdBuffer.vertexArrayDestroyable = false;\n\n  const indexBuffer = Buffer.createIndexBuffer({\n    typedArray: indicesTypedArray,\n    context: frameState.context,\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: indexDatatype,\n  });\n  indexBuffer.vertexArrayDestroyable = false;\n\n  // Create ModelComponents\n  const positionAttribute = new ModelComponents.Attribute();\n  positionAttribute.semantic = VertexAttributeSemantic.POSITION;\n  positionAttribute.componentDatatype = ComponentDatatype.FLOAT;\n  positionAttribute.type = AttributeType.VEC3;\n  positionAttribute.count = vertexCount;\n  positionAttribute.min = localMin;\n  positionAttribute.max = localMax;\n  positionAttribute.buffer = positionBuffer;\n\n  const featureIdAttribute = new ModelComponents.Attribute();\n  featureIdAttribute.semantic = VertexAttributeSemantic.FEATURE_ID;\n  featureIdAttribute.setIndex = 0;\n  featureIdAttribute.componentDatatype = ComponentDatatype.FLOAT;\n  featureIdAttribute.type = AttributeType.SCALAR;\n  featureIdAttribute.count = vertexCount;\n  featureIdAttribute.buffer = featureIdBuffer;\n\n  const attributes = [positionAttribute, featureIdAttribute];\n\n  const material = new ModelComponents.Material();\n  material.unlit = true;\n\n  const indices = new ModelComponents.Indices();\n  indices.indexDatatype = indexDatatype;\n  indices.count = indicesTypedArray.length;\n  indices.buffer = indexBuffer;\n\n  const featureId = new ModelComponents.FeatureIdAttribute();\n  featureId.featureCount = featureCount;\n  featureId.propertyTableId = 0;\n  featureId.setIndex = 0;\n  featureId.positionalLabel = \"featureId_0\";\n\n  const featureIds = [featureId];\n\n  const primitive = new ModelComponents.Primitive();\n  primitive.attributes = attributes;\n  primitive.indices = indices;\n  primitive.featureIds = featureIds;\n  primitive.primitiveType = PrimitiveType.LINES;\n  primitive.material = material;\n\n  return primitive;\n}\n\nfunction createPointsPrimitive(features, toLocal, frameState) {\n  // Count the number of vertices\n  let vertexCount = 0;\n\n  const featureCount = features.length;\n\n  for (let i = 0; i < featureCount; i++) {\n    const feature = features[i];\n    if (defined(feature.points)) {\n      vertexCount += feature.points.length;\n    }\n  }\n\n  // Allocate typed arrays\n  const positionsTypedArray = new Float32Array(vertexCount * 3);\n  const featureIdsTypedArray = new Float32Array(vertexCount);\n\n  // Process the data. Convert positions to local ENU.\n  const localMin = new Cartesian3(\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n  );\n\n  const localMax = new Cartesian3(\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n  );\n\n  let vertexCounter = 0;\n\n  for (let i = 0; i < featureCount; i++) {\n    const feature = features[i];\n\n    if (!defined(feature.points)) {\n      continue;\n    }\n\n    const pointsLength = feature.points.length;\n    for (let j = 0; j < pointsLength; j++) {\n      const cartographic = feature.points[j];\n      const globalCartesian = Cartesian3.fromDegrees(\n        cartographic.x,\n        cartographic.y,\n        cartographic.z,\n        Ellipsoid.WGS84,\n        scratchCartesian,\n      );\n      const localCartesian = Matrix4.multiplyByPoint(\n        toLocal,\n        globalCartesian,\n        scratchCartesian,\n      );\n\n      Cartesian3.minimumByComponent(localMin, localCartesian, localMin);\n      Cartesian3.maximumByComponent(localMax, localCartesian, localMax);\n\n      Cartesian3.pack(localCartesian, positionsTypedArray, vertexCounter * 3);\n\n      featureIdsTypedArray[vertexCounter] = i;\n\n      vertexCounter++;\n    }\n  }\n\n  // Create GPU buffers\n  const positionBuffer = Buffer.createVertexBuffer({\n    typedArray: positionsTypedArray,\n    context: frameState.context,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  positionBuffer.vertexArrayDestroyable = false;\n\n  const featureIdBuffer = Buffer.createVertexBuffer({\n    typedArray: featureIdsTypedArray,\n    context: frameState.context,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  featureIdBuffer.vertexArrayDestroyable = false;\n\n  // Create ModelComponents\n  const positionAttribute = new ModelComponents.Attribute();\n  positionAttribute.semantic = VertexAttributeSemantic.POSITION;\n  positionAttribute.componentDatatype = ComponentDatatype.FLOAT;\n  positionAttribute.type = AttributeType.VEC3;\n  positionAttribute.count = vertexCount;\n  positionAttribute.min = localMin;\n  positionAttribute.max = localMax;\n  positionAttribute.buffer = positionBuffer;\n\n  const featureIdAttribute = new ModelComponents.Attribute();\n  featureIdAttribute.semantic = VertexAttributeSemantic.FEATURE_ID;\n  featureIdAttribute.setIndex = 0;\n  featureIdAttribute.componentDatatype = ComponentDatatype.FLOAT;\n  featureIdAttribute.type = AttributeType.SCALAR;\n  featureIdAttribute.count = vertexCount;\n  featureIdAttribute.buffer = featureIdBuffer;\n\n  const attributes = [positionAttribute, featureIdAttribute];\n\n  const material = new ModelComponents.Material();\n  material.unlit = true;\n\n  const featureId = new ModelComponents.FeatureIdAttribute();\n  featureId.featureCount = featureCount;\n  featureId.propertyTableId = 0;\n  featureId.setIndex = 0;\n  featureId.positionalLabel = \"featureId_0\";\n\n  const featureIds = [featureId];\n\n  const primitive = new ModelComponents.Primitive();\n  primitive.attributes = attributes;\n  primitive.featureIds = featureIds;\n  primitive.primitiveType = PrimitiveType.POINTS;\n  primitive.material = material;\n\n  return primitive;\n}\n\nfunction parse(geoJson, frameState) {\n  const result = new ParseResult();\n\n  // Parse the GeoJSON\n  const parseFunction = geoJsonObjectTypes[geoJson.type];\n  if (defined(parseFunction)) {\n    parseFunction(geoJson, result);\n  }\n\n  const features = result.features;\n  const featureCount = features.length;\n\n  if (featureCount === 0) {\n    throw new RuntimeError(\"GeoJSON must have at least one feature\");\n  }\n\n  // Allocate space for property values\n  const properties = {};\n  for (let i = 0; i < featureCount; i++) {\n    const feature = features[i];\n    const featureProperties = feature.properties ?? Frozen.EMPTY_OBJECT;\n    for (const propertyId in featureProperties) {\n      if (featureProperties.hasOwnProperty(propertyId)) {\n        if (!defined(properties[propertyId])) {\n          properties[propertyId] = new Array(featureCount);\n        }\n      }\n    }\n  }\n\n  // Fill in the property values. Default to empty string for undefined values.\n  for (let i = 0; i < featureCount; i++) {\n    const feature = features[i];\n    for (const propertyId in properties) {\n      if (properties.hasOwnProperty(propertyId)) {\n        const value = feature.properties[propertyId] ?? \"\";\n        properties[propertyId][i] = value;\n      }\n    }\n  }\n\n  const jsonMetadataTable = new JsonMetadataTable({\n    count: featureCount,\n    properties: properties,\n  });\n\n  const propertyTable = new PropertyTable({\n    id: 0,\n    count: featureCount,\n    jsonMetadataTable: jsonMetadataTable,\n  });\n  const propertyTables = [propertyTable];\n\n  const schema = MetadataSchema.fromJson({});\n\n  const structuralMetadata = new StructuralMetadata({\n    schema: schema,\n    propertyTables: propertyTables,\n  });\n\n  // Find the cartographic bounding box\n  const cartographicMin = new Cartesian3(\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n    Number.POSITIVE_INFINITY,\n  );\n\n  const cartographicMax = new Cartesian3(\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n    Number.NEGATIVE_INFINITY,\n  );\n\n  let hasLines = false;\n  let hasPoints = false;\n\n  for (let i = 0; i < featureCount; i++) {\n    const feature = features[i];\n    if (defined(feature.lines)) {\n      hasLines = true;\n      const linesLength = feature.lines.length;\n      for (let j = 0; j < linesLength; j++) {\n        const line = feature.lines[j];\n        const positionsLength = line.length;\n        for (let k = 0; k < positionsLength; k++) {\n          Cartesian3.minimumByComponent(\n            cartographicMin,\n            line[k],\n            cartographicMin,\n          );\n          Cartesian3.maximumByComponent(\n            cartographicMax,\n            line[k],\n            cartographicMax,\n          );\n        }\n      }\n    }\n\n    if (defined(feature.points)) {\n      hasPoints = true;\n      const pointsLength = feature.points.length;\n      for (let j = 0; j < pointsLength; j++) {\n        const point = feature.points[j];\n        Cartesian3.minimumByComponent(cartographicMin, point, cartographicMin);\n        Cartesian3.maximumByComponent(cartographicMax, point, cartographicMax);\n      }\n    }\n  }\n\n  // Compute the ENU matrix\n  const cartographicCenter = Cartesian3.midpoint(\n    cartographicMin,\n    cartographicMax,\n    new Cartesian3(),\n  );\n  const ecefCenter = Cartesian3.fromDegrees(\n    cartographicCenter.x,\n    cartographicCenter.y,\n    cartographicCenter.z,\n    Ellipsoid.WGS84,\n    new Cartesian3(),\n  );\n  const toGlobal = Transforms.eastNorthUpToFixedFrame(\n    ecefCenter,\n    Ellipsoid.WGS84,\n    new Matrix4(),\n  );\n  const toLocal = Matrix4.inverseTransformation(toGlobal, new Matrix4());\n\n  const primitives = [];\n\n  if (hasLines) {\n    primitives.push(createLinesPrimitive(features, toLocal, frameState));\n  }\n\n  if (hasPoints) {\n    primitives.push(createPointsPrimitive(features, toLocal, frameState));\n  }\n\n  const node = new ModelComponents.Node();\n  node.index = 0;\n  node.primitives = primitives;\n\n  const nodes = [node];\n\n  const scene = new ModelComponents.Scene();\n  scene.nodes = nodes;\n\n  const components = new ModelComponents.Components();\n  components.scene = scene;\n  components.nodes = nodes;\n  components.transform = toGlobal;\n  components.structuralMetadata = structuralMetadata;\n\n  return components;\n}\n\nexport default GeoJsonLoader;\n","import ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport GeometryStageFS from \"../../Shaders/Model/GeometryStageFS.js\";\nimport GeometryStageVS from \"../../Shaders/Model/GeometryStageVS.js\";\nimport AttributeType from \"../AttributeType.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport ModelType from \"./ModelType.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport SelectedFeatureIdPipelineStage from \"./SelectedFeatureIdPipelineStage.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\n/**\n * The geometry pipeline stage processes the vertex attributes of a primitive.\n *\n * @namespace GeometryPipelineStage\n *\n * @private\n */\nconst GeometryPipelineStage = {\n  name: \"GeometryPipelineStage\", // Helps with debugging\n\n  STRUCT_ID_PROCESSED_ATTRIBUTES_VS: \"ProcessedAttributesVS\",\n  STRUCT_ID_PROCESSED_ATTRIBUTES_FS: \"ProcessedAttributesFS\",\n  STRUCT_NAME_PROCESSED_ATTRIBUTES: \"ProcessedAttributes\",\n  FUNCTION_ID_INITIALIZE_ATTRIBUTES: \"initializeAttributes\",\n  FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES:\n    \"void initializeAttributes(out ProcessedAttributes attributes)\",\n  FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS: \"setDynamicVaryingsVS\",\n  FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS: \"setDynamicVaryingsFS\",\n  FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS:\n    \"void setDynamicVaryings(inout ProcessedAttributes attributes)\",\n};\n\n/**\n * This pipeline stage processes the vertex attributes of a primitive,\n * adding attribute declarations to the shaders, adding attribute objects to the\n * render resources, and setting define flags as needed.\n *\n * Processes a primitive. This stage modifies the following parts of the render resources:\n * <ul>\n *  <li> adds attribute and varying declarations for the vertex attributes in the vertex and fragment shaders\n *  <li> creates the objects required to create VertexArrays\n *  <li> sets the flag for point primitive types\n * </ul>\n *\n * If the scene is in either 2D or CV mode, this stage also:\n * <ul>\n *  <li> adds a struct field for the 2D positions\n *  <li> adds an additional attribute object and declaration if the node containing this primitive is not instanced\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nGeometryPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const { shaderBuilder, model } = renderResources;\n\n  // These structs are similar, though the fragment shader version has a couple\n  // additional fields.\n  shaderBuilder.addStruct(\n    GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,\n    \"ProcessedAttributes\",\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addStruct(\n    GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,\n    \"ProcessedAttributes\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  // The Feature struct is always added since it's required for compilation.\n  // It may be unused if features are not present.\n  shaderBuilder.addStruct(\n    SelectedFeatureIdPipelineStage.STRUCT_ID_SELECTED_FEATURE,\n    SelectedFeatureIdPipelineStage.STRUCT_NAME_SELECTED_FEATURE,\n    ShaderDestination.BOTH,\n  );\n\n  // This initialization function is only needed in the vertex shader,\n  // it assigns the non-quantized attribute struct fields from the\n  // physical attributes\n  shaderBuilder.addFunction(\n    GeometryPipelineStage.FUNCTION_ID_INITIALIZE_ATTRIBUTES,\n    GeometryPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES,\n    ShaderDestination.VERTEX,\n  );\n\n  // Positions in other coordinate systems need more variables\n  shaderBuilder.addVarying(\"vec3\", \"v_positionWC\");\n  shaderBuilder.addVarying(\"vec3\", \"v_positionEC\");\n  shaderBuilder.addStructField(\n    GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,\n    \"vec3\",\n    \"positionWC\",\n  );\n  shaderBuilder.addStructField(\n    GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,\n    \"vec3\",\n    \"positionEC\",\n  );\n\n  // Though they have identical signatures, the implementation is different\n  // between vertex and fragment shaders. The VS stores attributes in\n  // varyings, while the FS unpacks the varyings for use by other stages.\n  shaderBuilder.addFunction(\n    GeometryPipelineStage.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,\n    GeometryPipelineStage.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addFunction(\n    GeometryPipelineStage.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,\n    GeometryPipelineStage.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // .pnts point clouds store sRGB color rather than linear color\n  if (model.type === ModelType.TILE_PNTS) {\n    shaderBuilder.addDefine(\n      \"HAS_SRGB_COLOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  // Attributes, structs, and functions will need to be modified for 2D / CV.\n  const use2D =\n    frameState.mode !== SceneMode.SCENE3D &&\n    !frameState.scene3DOnly &&\n    model._projectTo2D;\n\n  // If the model is instanced, the work for 2D projection will have been done\n  // in InstancingPipelineStage. The attribute struct will be updated with\n  // position2D, but nothing else should be modified.\n  const instanced = defined(renderResources.runtimeNode.node.instances);\n\n  // If the scene is in 3D or the model is instanced, the 2D position attribute\n  // is not needed, so don't increment attributeIndex.\n  const incrementIndexFor2D = use2D && !instanced;\n  const length = primitive.attributes.length;\n  for (let i = 0; i < length; i++) {\n    const attribute = primitive.attributes[i];\n    const attributeLocationCount = AttributeType.getAttributeLocationCount(\n      attribute.type,\n    );\n\n    //>>includeStart('debug', pragmas.debug);\n    if (!defined(attribute.buffer) && !defined(attribute.constant)) {\n      throw new DeveloperError(\n        \"Attributes must be provided as a Buffer or constant value\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    const isPositionAttribute =\n      attribute.semantic === VertexAttributeSemantic.POSITION;\n\n    let index;\n    if (attributeLocationCount > 1) {\n      index = renderResources.attributeIndex;\n      renderResources.attributeIndex += attributeLocationCount;\n    } else if (isPositionAttribute && !incrementIndexFor2D) {\n      index = 0;\n    } else {\n      index = renderResources.attributeIndex++;\n    }\n\n    // Use flat interpolation for point primitive vertex attributes (only supported in WebGL 2)\n    const interpolationQualifier =\n      !isPositionAttribute &&\n      primitive.primitiveType === PrimitiveType.POINTS &&\n      frameState.context.webgl2\n        ? \"flat\"\n        : undefined;\n\n    processAttribute(\n      renderResources,\n      attribute,\n      index,\n      attributeLocationCount,\n      use2D,\n      instanced,\n      interpolationQualifier,\n    );\n  }\n\n  handleBitangents(shaderBuilder, primitive.attributes);\n\n  if (primitive.primitiveType === PrimitiveType.POINTS) {\n    shaderBuilder.addDefine(\"PRIMITIVE_TYPE_POINTS\");\n  }\n\n  shaderBuilder.addVertexLines(GeometryStageVS);\n  shaderBuilder.addFragmentLines(GeometryStageFS);\n};\n\nfunction processAttribute(\n  renderResources,\n  attribute,\n  attributeIndex,\n  attributeLocationCount,\n  use2D,\n  instanced,\n  interpolationQualifier,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const attributeInfo = ModelUtility.getAttributeInfo(attribute);\n\n  // This indicates to only modify the resources for 2D if the model is\n  // not instanced.\n  const modifyFor2D = use2D && !instanced;\n\n  if (attributeLocationCount > 1) {\n    // Matrices are stored as multiple attributes, one per column vector.\n    addMatrixAttributeToRenderResources(\n      renderResources,\n      attribute,\n      attributeIndex,\n      attributeLocationCount,\n    );\n  } else {\n    addAttributeToRenderResources(\n      renderResources,\n      attribute,\n      attributeIndex,\n      modifyFor2D,\n    );\n  }\n\n  addAttributeDeclaration(shaderBuilder, attributeInfo, modifyFor2D);\n  addVaryingDeclaration(shaderBuilder, attributeInfo, interpolationQualifier);\n\n  // For common attributes like normals and tangents, the code is\n  // already in GeometryStageVS, we just need to enable it.\n  if (defined(attribute.semantic)) {\n    addSemanticDefine(shaderBuilder, attribute);\n  }\n\n  // Dynamically generate GLSL code for the current attribute.\n  // For 2D projection, the position2D field will always be added\n  // to the attributes struct, even if the model is instanced.\n  updateAttributesStruct(shaderBuilder, attributeInfo, use2D);\n  updateInitializeAttributesFunction(shaderBuilder, attributeInfo, modifyFor2D);\n  updateSetDynamicVaryingsFunction(shaderBuilder, attributeInfo);\n}\n\nfunction addSemanticDefine(shaderBuilder, attribute) {\n  const { semantic, setIndex } = attribute;\n  switch (semantic) {\n    case VertexAttributeSemantic.NORMAL:\n      shaderBuilder.addDefine(\"HAS_NORMALS\");\n      break;\n    case VertexAttributeSemantic.TANGENT:\n      shaderBuilder.addDefine(\"HAS_TANGENTS\");\n      break;\n    case VertexAttributeSemantic.FEATURE_ID:\n      // `_FEATURE_ID starts with an underscore so no need to double the\n      // underscore.\n      shaderBuilder.addDefine(`HAS${semantic}_${setIndex}`);\n      break;\n    case VertexAttributeSemantic.TEXCOORD:\n    case VertexAttributeSemantic.COLOR:\n      shaderBuilder.addDefine(`HAS_${semantic}_${setIndex}`);\n  }\n}\n\nfunction addAttributeToRenderResources(\n  renderResources,\n  attribute,\n  attributeIndex,\n  modifyFor2D,\n) {\n  const { quantization, semantic, setIndex } = attribute;\n  const { type, componentDatatype } = defined(quantization)\n    ? quantization\n    : attribute;\n\n  if (\n    semantic === VertexAttributeSemantic.FEATURE_ID &&\n    setIndex >= renderResources.featureIdVertexAttributeSetIndex\n  ) {\n    renderResources.featureIdVertexAttributeSetIndex = setIndex + 1;\n  }\n\n  // The position attribute should always be in the first index.\n  const isPositionAttribute = semantic === VertexAttributeSemantic.POSITION;\n  const index = isPositionAttribute ? 0 : attributeIndex;\n  const componentsPerAttribute = AttributeType.getNumberOfComponents(type);\n\n  const vertexAttribute = {\n    index: index,\n    value: defined(attribute.buffer) ? undefined : attribute.constant,\n    vertexBuffer: attribute.buffer,\n    count: attribute.count,\n    componentsPerAttribute: componentsPerAttribute,\n    componentDatatype: componentDatatype,\n    offsetInBytes: attribute.byteOffset,\n    strideInBytes: attribute.byteStride,\n    normalize: attribute.normalized,\n  };\n\n  renderResources.attributes.push(vertexAttribute);\n\n  if (!isPositionAttribute || !modifyFor2D) {\n    return;\n  }\n\n  // Add an additional attribute for the projected positions in 2D / CV.\n  const buffer2D = renderResources.runtimePrimitive.positionBuffer2D;\n  const positionAttribute2D = {\n    index: attributeIndex,\n    vertexBuffer: buffer2D,\n    count: attribute.count,\n    componentsPerAttribute: componentsPerAttribute,\n    componentDatatype: ComponentDatatype.FLOAT, // Projected positions will always be floats.\n    offsetInBytes: 0,\n    strideInBytes: undefined,\n    normalize: attribute.normalized,\n  };\n\n  renderResources.attributes.push(positionAttribute2D);\n}\n\nfunction addMatrixAttributeToRenderResources(\n  renderResources,\n  attribute,\n  attributeIndex,\n  columnCount,\n) {\n  const { quantization, normalized } = attribute;\n  const { type, componentDatatype } = defined(quantization)\n    ? quantization\n    : attribute;\n\n  // componentCount is either 4, 9 or 16\n  const componentCount = AttributeType.getNumberOfComponents(type);\n  // componentsPerColumn is either 2, 3, or 4\n  const componentsPerColumn = componentCount / columnCount;\n\n  const componentSizeInBytes =\n    ComponentDatatype.getSizeInBytes(componentDatatype);\n\n  const columnLengthInBytes = componentsPerColumn * componentSizeInBytes;\n\n  // The stride between corresponding columns of two matrices is constant\n  // regardless of where you start\n  const strideInBytes = attribute.byteStride;\n\n  for (let i = 0; i < columnCount; i++) {\n    const offsetInBytes = attribute.byteOffset + i * columnLengthInBytes;\n\n    // upload a single column vector.\n    const columnAttribute = {\n      index: attributeIndex + i,\n      vertexBuffer: attribute.buffer,\n      componentsPerAttribute: componentsPerColumn,\n      componentDatatype: componentDatatype,\n      offsetInBytes: offsetInBytes,\n      strideInBytes: strideInBytes,\n      normalize: normalized,\n    };\n\n    renderResources.attributes.push(columnAttribute);\n  }\n}\n\nfunction addVaryingDeclaration(\n  shaderBuilder,\n  attributeInfo,\n  interpolationQualifier,\n) {\n  const variableName = attributeInfo.variableName;\n  let varyingName = `v_${variableName}`;\n\n  let glslType;\n  if (variableName === \"normalMC\") {\n    // though the attribute is in model coordinates, the varying is\n    // in eye coordinates.\n    varyingName = \"v_normalEC\";\n    glslType = attributeInfo.glslType;\n  } else if (variableName === \"tangentMC\") {\n    // Tangent's glslType is vec4, but in the shader it is split into\n    // vec3 tangent and vec3 bitangent\n    glslType = \"vec3\";\n    // like normalMC, the varying is converted to eye coordinates\n    varyingName = \"v_tangentEC\";\n  } else {\n    glslType = attributeInfo.glslType;\n  }\n\n  shaderBuilder.addVarying(glslType, varyingName, interpolationQualifier);\n}\n\nfunction addAttributeDeclaration(shaderBuilder, attributeInfo, modifyFor2D) {\n  const semantic = attributeInfo.attribute.semantic;\n  const variableName = attributeInfo.variableName;\n\n  let attributeName;\n  let glslType;\n  if (attributeInfo.isQuantized) {\n    attributeName = `a_quantized_${variableName}`;\n    glslType = attributeInfo.quantizedGlslType;\n  } else {\n    attributeName = `a_${variableName}`;\n    glslType = attributeInfo.glslType;\n  }\n\n  const isPosition = semantic === VertexAttributeSemantic.POSITION;\n  if (isPosition) {\n    shaderBuilder.setPositionAttribute(glslType, attributeName);\n  } else {\n    shaderBuilder.addAttribute(glslType, attributeName);\n  }\n\n  if (isPosition && modifyFor2D) {\n    shaderBuilder.addAttribute(\"vec3\", \"a_position2D\");\n  }\n}\n\nfunction updateAttributesStruct(shaderBuilder, attributeInfo, use2D) {\n  const vsStructId = GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_VS;\n  const fsStructId = GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_FS;\n  const { variableName, glslType } = attributeInfo;\n\n  if (variableName === \"tangentMC\") {\n    // The w component of the tangent is only used for computing the bitangent,\n    // so it can be separated from the other tangent components.\n    shaderBuilder.addStructField(vsStructId, \"vec3\", \"tangentMC\");\n    shaderBuilder.addStructField(vsStructId, \"float\", \"tangentSignMC\");\n    // The tangent is in model coordinates in the vertex shader\n    // but in eye space in the fragment coordinates\n    shaderBuilder.addStructField(fsStructId, \"vec3\", \"tangentEC\");\n  } else if (variableName === \"normalMC\") {\n    // Normals are in model coordinates in the vertex shader but in eye\n    // coordinates in the fragment shader\n    shaderBuilder.addStructField(vsStructId, \"vec3\", \"normalMC\");\n    shaderBuilder.addStructField(fsStructId, \"vec3\", \"normalEC\");\n  } else {\n    shaderBuilder.addStructField(vsStructId, glslType, variableName);\n    shaderBuilder.addStructField(fsStructId, glslType, variableName);\n  }\n\n  if (variableName === \"positionMC\" && use2D) {\n    shaderBuilder.addStructField(vsStructId, \"vec3\", \"position2D\");\n  }\n}\n\nfunction updateInitializeAttributesFunction(\n  shaderBuilder,\n  attributeInfo,\n  use2D,\n) {\n  const functionId = GeometryPipelineStage.FUNCTION_ID_INITIALIZE_ATTRIBUTES;\n  const variableName = attributeInfo.variableName;\n\n  // If the scene is in 2D / CV mode, this line should always be added\n  // regardless of whether the data is quantized.\n  const use2DPosition = variableName === \"positionMC\" && use2D;\n  if (use2DPosition) {\n    const line = \"attributes.position2D = a_position2D;\";\n    shaderBuilder.addFunctionLines(functionId, [line]);\n  }\n\n  if (attributeInfo.isQuantized) {\n    // Skip initialization, it will be handled in the dequantization stage.\n    return;\n  }\n\n  const lines = [];\n  if (variableName === \"tangentMC\") {\n    lines.push(\"attributes.tangentMC = a_tangentMC.xyz;\");\n    lines.push(\"attributes.tangentSignMC = a_tangentMC.w;\");\n  } else {\n    lines.push(`attributes.${variableName} = a_${variableName};`);\n  }\n\n  shaderBuilder.addFunctionLines(functionId, lines);\n}\n\nfunction updateSetDynamicVaryingsFunction(shaderBuilder, attributeInfo) {\n  const { semantic, setIndex } = attributeInfo.attribute;\n  if (defined(semantic) && !defined(setIndex)) {\n    // positions, normals, and tangents are handled statically in\n    // GeometryStageVS\n    return;\n  }\n\n  // In the vertex shader, we want things like\n  // v_texCoord_1 = attributes.texCoord_1;\n  let functionId = GeometryPipelineStage.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS;\n  const variableName = attributeInfo.variableName;\n  let line = `v_${variableName} = attributes.${variableName};`;\n  shaderBuilder.addFunctionLines(functionId, [line]);\n\n  // In the fragment shader, we do the opposite:\n  // attributes.texCoord_1 = v_texCoord_1;\n  functionId = GeometryPipelineStage.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS;\n  line = `attributes.${variableName} = v_${variableName};`;\n  shaderBuilder.addFunctionLines(functionId, [line]);\n}\n\nfunction handleBitangents(shaderBuilder, attributes) {\n  let hasNormals = false;\n  let hasTangents = false;\n  for (let i = 0; i < attributes.length; i++) {\n    const attribute = attributes[i];\n    if (attribute.semantic === VertexAttributeSemantic.NORMAL) {\n      hasNormals = true;\n    } else if (attribute.semantic === VertexAttributeSemantic.TANGENT) {\n      hasTangents = true;\n    }\n  }\n\n  // Bitangents are only defined if we have normals and tangents\n  if (!hasNormals || !hasTangents) {\n    return;\n  }\n\n  shaderBuilder.addDefine(\"HAS_BITANGENTS\");\n\n  shaderBuilder.addVarying(\"vec3\", \"v_bitangentEC\");\n  shaderBuilder.addStructField(\n    GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,\n    \"vec3\",\n    \"bitangentMC\",\n  );\n  shaderBuilder.addStructField(\n    GeometryPipelineStage.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,\n    \"vec3\",\n    \"bitangentEC\",\n  );\n}\n\nexport default GeometryPipelineStage;\n","import AttributeCompression from \"../../Core/AttributeCompression.js\";\nimport BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Check from \"../../Core/Check.js\";\nimport clone from \"../../Core/clone.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport Ellipsoid from \"../../Core/Ellipsoid.js\";\nimport getStringFromTypedArray from \"../../Core/getStringFromTypedArray.js\";\nimport Matrix3 from \"../../Core/Matrix3.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Quaternion from \"../../Core/Quaternion.js\";\nimport RuntimeError from \"../../Core/RuntimeError.js\";\nimport Transforms from \"../../Core/Transforms.js\";\nimport Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport AttributeType from \"../AttributeType.js\";\nimport Axis from \"../Axis.js\";\nimport Cesium3DTileFeatureTable from \"../Cesium3DTileFeatureTable.js\";\nimport GltfLoader from \"../GltfLoader.js\";\nimport InstanceAttributeSemantic from \"../InstanceAttributeSemantic.js\";\nimport I3dmParser from \"../I3dmParser.js\";\nimport MetadataClass from \"../MetadataClass.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport parseBatchTable from \"../parseBatchTable.js\";\nimport PropertyTable from \"../PropertyTable.js\";\nimport ResourceLoader from \"../ResourceLoader.js\";\nimport StructuralMetadata from \"../StructuralMetadata.js\";\n\nconst I3dmLoaderState = {\n  NOT_LOADED: 0,\n  LOADING: 1,\n  PROCESSING: 2,\n  POST_PROCESSING: 3,\n  READY: 4,\n  FAILED: 5,\n  UNLOADED: 6,\n};\n\nconst Attribute = ModelComponents.Attribute;\nconst FeatureIdAttribute = ModelComponents.FeatureIdAttribute;\nconst Instances = ModelComponents.Instances;\n\n/**\n * Loads an Instanced 3D Model.\n * <p>\n * Implements the {@link ResourceLoader} interface.\n * </p>\n *\n * @private\n */\nclass I3dmLoader extends ResourceLoader {\n  /**\n   * @param {object} options Object with the following properties:\n   * @param {Resource} options.i3dmResource The {@link Resource} containing the i3dm.\n   * @param {ArrayBuffer} options.arrayBuffer The array buffer of the i3dm contents.\n   * @param {number} [options.byteOffset=0] The byte offset to the beginning of the i3dm contents in the array buffer.\n   * @param {Resource} [options.baseResource] The {@link Resource} that paths in the glTF JSON are relative to.\n   * @param {boolean} [options.releaseGltfJson=false] When true, the glTF JSON is released once the glTF is loaded. This is is especially useful for cases like 3D Tiles, where each .gltf model is unique and caching the glTF JSON is not effective.\n   * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n   * @param {boolean} [options.incrementallyLoadTextures=true] Determine if textures may continue to stream in after the glTF is loaded.\n   * @param {Axis} [options.upAxis=Axis.Y] The up-axis of the glTF model.\n   * @param {Axis} [options.forwardAxis=Axis.X] The forward-axis of the glTF model.\n   * @param {boolean} [options.loadAttributesAsTypedArray=false] Load all attributes as typed arrays instead of GPU buffers. If the attributes are interleaved in the glTF they will be de-interleaved in the typed array.\n   * @param {boolean} [options.enablePick=false]  If <code>true</code>, load the positions buffer, any instanced attribute buffers, and index buffer as typed arrays for CPU-enabled picking in WebGL1.\n   * @param {boolean} [options.loadIndicesForWireframe=false] Load the index buffer as a typed array so wireframe indices can be created for WebGL1.\n   * @param {boolean} [options.loadPrimitiveOutline=true] If true, load outlines from the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. This can be set false to avoid post-processing geometry at load time.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n\n    const i3dmResource = options.i3dmResource;\n    const arrayBuffer = options.arrayBuffer;\n    let baseResource = options.baseResource;\n    const byteOffset = options.byteOffset ?? 0;\n    const releaseGltfJson = options.releaseGltfJson ?? false;\n    const asynchronous = options.asynchronous ?? true;\n    const incrementallyLoadTextures = options.incrementallyLoadTextures ?? true;\n    const upAxis = options.upAxis ?? Axis.Y;\n    const forwardAxis = options.forwardAxis ?? Axis.X;\n    const loadAttributesAsTypedArray =\n      options.loadAttributesAsTypedArray ?? false;\n    const loadIndicesForWireframe = options.loadIndicesForWireframe ?? false;\n    const loadPrimitiveOutline = options.loadPrimitiveOutline ?? true;\n    const enablePick = options.enablePick ?? false;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"options.i3dmResource\", i3dmResource);\n    Check.typeOf.object(\"options.arrayBuffer\", arrayBuffer);\n    //>>includeEnd('debug');\n\n    baseResource = defined(baseResource) ? baseResource : i3dmResource.clone();\n\n    this._i3dmResource = i3dmResource;\n    this._baseResource = baseResource;\n    this._arrayBuffer = arrayBuffer;\n    this._byteOffset = byteOffset;\n    this._releaseGltfJson = releaseGltfJson;\n    this._asynchronous = asynchronous;\n    this._incrementallyLoadTextures = incrementallyLoadTextures;\n    this._upAxis = upAxis;\n    this._forwardAxis = forwardAxis;\n    this._loadAttributesAsTypedArray = loadAttributesAsTypedArray;\n    this._loadIndicesForWireframe = loadIndicesForWireframe;\n    this._loadPrimitiveOutline = loadPrimitiveOutline;\n    this._enablePick = enablePick;\n\n    this._state = I3dmLoaderState.NOT_LOADED;\n    this._promise = undefined;\n\n    this._gltfLoader = undefined;\n\n    // Instanced attributes are initially parsed as typed arrays, but if they\n    // do not need to be further processed (e.g. turned into transform matrices),\n    // it is more efficient to turn them into buffers. The I3dmLoader will own the\n    // resources and store them here.\n    this._buffers = [];\n    this._components = undefined;\n\n    this._transform = Matrix4.IDENTITY;\n    this._batchTable = undefined;\n    this._featureTable = undefined;\n    this._instancesLength = 0;\n  }\n\n  /**\n   * true if textures are loaded, useful when incrementallyLoadTextures is true\n   *\n   * @memberof  I3dmLoader.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  get texturesLoaded() {\n    return this._gltfLoader?.texturesLoaded;\n  }\n\n  /**\n   * The cache key of the resource\n   *\n   * @memberof I3dmLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return undefined;\n  }\n\n  /**\n   * The loaded components.\n   *\n   * @memberof I3dmLoader.prototype\n   *\n   * @type {ModelComponents.Components}\n   * @default {@link Matrix4.IDENTITY}\n   * @readonly\n   * @private\n   */\n  get components() {\n    return this._components;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<I3dmLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    // Parse the i3dm into its various sections.\n    const i3dm = I3dmParser.parse(this._arrayBuffer, this._byteOffset);\n\n    const featureTableJson = i3dm.featureTableJson;\n    const featureTableBinary = i3dm.featureTableBinary;\n    const batchTableJson = i3dm.batchTableJson;\n    const batchTableBinary = i3dm.batchTableBinary;\n    const gltfFormat = i3dm.gltfFormat;\n\n    // Generate the feature table.\n    const featureTable = new Cesium3DTileFeatureTable(\n      featureTableJson,\n      featureTableBinary,\n    );\n    this._featureTable = featureTable;\n\n    // Get the number of instances in the i3dm.\n    const instancesLength = featureTable.getGlobalProperty(\"INSTANCES_LENGTH\");\n    featureTable.featuresLength = instancesLength;\n    if (!defined(instancesLength)) {\n      throw new RuntimeError(\n        \"Feature table global property: INSTANCES_LENGTH must be defined\",\n      );\n    }\n    this._instancesLength = instancesLength;\n\n    // Get the RTC center, if available, and set the loader's transform.\n    const rtcCenter = featureTable.getGlobalProperty(\n      \"RTC_CENTER\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n    if (defined(rtcCenter)) {\n      this._transform = Matrix4.fromTranslation(\n        Cartesian3.fromArray(rtcCenter),\n      );\n    }\n\n    // Save the batch table section to use for StructuralMetadata generation.\n    this._batchTable = {\n      json: batchTableJson,\n      binary: batchTableBinary,\n    };\n\n    const loaderOptions = {\n      upAxis: this._upAxis,\n      forwardAxis: this._forwardAxis,\n      releaseGltfJson: this._releaseGltfJson,\n      incrementallyLoadTextures: this._incrementallyLoadTextures,\n      loadAttributesAsTypedArray: this._loadAttributesAsTypedArray,\n      enablePick: this._enablePick,\n      loadIndicesForWireframe: this._loadIndicesForWireframe,\n      loadPrimitiveOutline: this._loadPrimitiveOutline,\n    };\n\n    if (gltfFormat === 0) {\n      let gltfUrl = getStringFromTypedArray(i3dm.gltf);\n\n      // We need to remove padding from the end of the model URL in case this tile was part of a composite tile.\n      // This removes all white space and null characters from the end of the string.\n      gltfUrl = gltfUrl.replace(/[\\s\\0]+$/, \"\");\n      const gltfResource = this._baseResource.getDerivedResource({\n        url: gltfUrl,\n      });\n      loaderOptions.gltfResource = gltfResource;\n      loaderOptions.baseResource = gltfResource;\n    } else {\n      loaderOptions.gltfResource = this._i3dmResource;\n      loaderOptions.typedArray = i3dm.gltf;\n    }\n\n    // Create the GltfLoader, update the state and load the glTF.\n    const gltfLoader = new GltfLoader(loaderOptions);\n\n    this._gltfLoader = gltfLoader;\n    this._state = I3dmLoaderState.LOADING;\n\n    this._promise = gltfLoader\n      .load()\n      .then(() => {\n        if (this.isDestroyed()) {\n          return;\n        }\n\n        this._state = I3dmLoaderState.PROCESSING;\n        return this;\n      })\n      .catch((error) => {\n        if (this.isDestroyed()) {\n          return;\n        }\n        throw handleError(this, error);\n      });\n\n    return this._promise;\n  }\n\n  process(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (this._state === I3dmLoaderState.READY) {\n      return true;\n    }\n\n    const gltfLoader = this._gltfLoader;\n    let ready = false;\n    if (this._state === I3dmLoaderState.PROCESSING) {\n      ready = gltfLoader.process(frameState);\n    }\n\n    if (!ready) {\n      return false;\n    }\n\n    const components = gltfLoader.components;\n\n    // Combine the RTC_CENTER transform from the i3dm and the CESIUM_RTC\n    // transform from the glTF. In practice CESIUM_RTC is not set for\n    // instanced models but multiply the transforms just in case.\n    components.transform = Matrix4.multiplyTransformation(\n      this._transform,\n      components.transform,\n      components.transform,\n    );\n\n    createInstances(this, components, frameState);\n    createStructuralMetadata(this, components);\n    this._components = components;\n\n    // Now that we have the parsed components, we can release the array buffer\n    this._arrayBuffer = undefined;\n\n    this._state = I3dmLoaderState.READY;\n    return true;\n  }\n\n  isUnloaded() {\n    return this._state === I3dmLoaderState.UNLOADED;\n  }\n\n  unload() {\n    if (defined(this._gltfLoader) && !this._gltfLoader.isDestroyed()) {\n      this._gltfLoader.unload();\n    }\n\n    unloadBuffers(this);\n\n    this._components = undefined;\n    this._arrayBuffer = undefined;\n    this._state = I3dmLoaderState.UNLOADED;\n  }\n}\n\nfunction handleError(i3dmLoader, error) {\n  i3dmLoader.unload();\n  i3dmLoader._state = I3dmLoaderState.FAILED;\n  const errorMessage = \"Failed to load i3dm\";\n  return i3dmLoader.getError(errorMessage, error);\n}\n\nfunction createStructuralMetadata(loader, components) {\n  const batchTable = loader._batchTable;\n  const instancesLength = loader._instancesLength;\n\n  if (instancesLength === 0) {\n    return;\n  }\n\n  let structuralMetadata;\n  if (defined(batchTable.json)) {\n    // Add the structural metadata from the batch table to the model components.\n    structuralMetadata = parseBatchTable({\n      count: instancesLength,\n      batchTable: batchTable.json,\n      binaryBody: batchTable.binary,\n    });\n  } else {\n    // If batch table is not defined, create a property table without any properties.\n    const emptyPropertyTable = new PropertyTable({\n      name: MetadataClass.BATCH_TABLE_CLASS_NAME,\n      count: instancesLength,\n    });\n    structuralMetadata = new StructuralMetadata({\n      schema: {},\n      propertyTables: [emptyPropertyTable],\n    });\n  }\n\n  components.structuralMetadata = structuralMetadata;\n}\n\nconst positionScratch = new Cartesian3();\nconst propertyScratch1 = new Array(4);\nconst transformScratch = new Matrix4();\n\nfunction createInstances(loader, components, frameState) {\n  let i;\n  const featureTable = loader._featureTable;\n  const instancesLength = loader._instancesLength;\n\n  if (instancesLength === 0) {\n    return;\n  }\n\n  const rtcCenter = featureTable.getGlobalProperty(\n    \"RTC_CENTER\",\n    ComponentDatatype.FLOAT,\n    3,\n  );\n\n  const eastNorthUp = featureTable.getGlobalProperty(\"EAST_NORTH_UP\");\n  const hasRotation =\n    featureTable.hasProperty(\"NORMAL_UP\") ||\n    featureTable.hasProperty(\"NORMAL_UP_OCT32P\") ||\n    eastNorthUp;\n\n  const hasScale =\n    featureTable.hasProperty(\"SCALE\") ||\n    featureTable.hasProperty(\"SCALE_NON_UNIFORM\");\n\n  const translationTypedArray = getPositions(featureTable, instancesLength);\n  let rotationTypedArray;\n  if (hasRotation) {\n    rotationTypedArray = new Float32Array(4 * instancesLength);\n  }\n  let scaleTypedArray;\n  if (hasScale) {\n    scaleTypedArray = new Float32Array(3 * instancesLength);\n  }\n  const featureIdArray = new Float32Array(instancesLength);\n\n  const instancePositions = Cartesian3.unpackArray(translationTypedArray);\n  let instancePosition = new Cartesian3();\n\n  const instanceNormalRight = new Cartesian3();\n  const instanceNormalUp = new Cartesian3();\n  const instanceNormalForward = new Cartesian3();\n  const instanceRotation = new Matrix3();\n  const instanceQuaternion = new Quaternion();\n  const instanceQuaternionArray = new Array(4);\n\n  const instanceScale = new Cartesian3();\n  const instanceScaleArray = new Array(3);\n\n  const instanceTransform = new Matrix4();\n\n  // For I3DMs that do not define an RTC center, we manually compute a BoundingSphere and store\n  // positions relative to the center, to be uploaded to the GPU. This avoids jittering at higher\n  // precisions.\n  // Also manually compute if RTC center equals Cartesian3.ZERO\n  if (\n    !defined(rtcCenter) ||\n    Cartesian3.equals(Cartesian3.unpack(rtcCenter), Cartesian3.ZERO)\n  ) {\n    const positionBoundingSphere = BoundingSphere.fromPoints(instancePositions);\n\n    for (i = 0; i < instancePositions.length; i++) {\n      Cartesian3.subtract(\n        instancePositions[i],\n        positionBoundingSphere.center,\n        positionScratch,\n      );\n\n      translationTypedArray[3 * i + 0] = positionScratch.x;\n      translationTypedArray[3 * i + 1] = positionScratch.y;\n      translationTypedArray[3 * i + 2] = positionScratch.z;\n    }\n\n    // Set the center of the bounding sphere as the RTC center transform.\n    const centerTransform = Matrix4.fromTranslation(\n      positionBoundingSphere.center,\n      transformScratch,\n    );\n\n    // Combine the center transform and the CESIUM_RTC transform from the glTF.\n    // In practice CESIUM_RTC is not set for instanced models but multiply the\n    // transforms just in case.\n    components.transform = Matrix4.multiplyTransformation(\n      centerTransform,\n      components.transform,\n      components.transform,\n    );\n  }\n\n  for (i = 0; i < instancesLength; i++) {\n    // Get the instance position\n    instancePosition = Cartesian3.clone(instancePositions[i]);\n\n    if (defined(rtcCenter)) {\n      Cartesian3.add(\n        instancePosition,\n        Cartesian3.unpack(rtcCenter),\n        instancePosition,\n      );\n    }\n\n    // Get the instance rotation, if present\n    if (hasRotation) {\n      processRotation(\n        featureTable,\n        eastNorthUp,\n        i,\n        instanceQuaternion,\n        instancePosition,\n        instanceNormalUp,\n        instanceNormalRight,\n        instanceNormalForward,\n        instanceRotation,\n        instanceTransform,\n      );\n      Quaternion.pack(instanceQuaternion, instanceQuaternionArray, 0);\n      rotationTypedArray[4 * i + 0] = instanceQuaternionArray[0];\n      rotationTypedArray[4 * i + 1] = instanceQuaternionArray[1];\n      rotationTypedArray[4 * i + 2] = instanceQuaternionArray[2];\n      rotationTypedArray[4 * i + 3] = instanceQuaternionArray[3];\n    }\n\n    // Get the instance scale, if present\n    if (hasScale) {\n      processScale(featureTable, i, instanceScale);\n      Cartesian3.pack(instanceScale, instanceScaleArray, 0);\n      scaleTypedArray[3 * i + 0] = instanceScaleArray[0];\n      scaleTypedArray[3 * i + 1] = instanceScaleArray[1];\n      scaleTypedArray[3 * i + 2] = instanceScaleArray[2];\n    }\n\n    // Get the batchId\n    let batchId = featureTable.getProperty(\n      \"BATCH_ID\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      1,\n      i,\n    );\n    if (!defined(batchId)) {\n      // If BATCH_ID semantic is undefined, batchId is just the instance number\n      batchId = i;\n    }\n    featureIdArray[i] = batchId;\n  }\n\n  // Create instances.\n  const instances = new Instances();\n  instances.transformInWorldSpace = true;\n  const buffers = loader._buffers;\n\n  // Create translation vertex attribute.\n  const translationAttribute = new Attribute();\n  translationAttribute.name = \"Instance Translation\";\n  translationAttribute.semantic = InstanceAttributeSemantic.TRANSLATION;\n  translationAttribute.componentDatatype = ComponentDatatype.FLOAT;\n  translationAttribute.type = AttributeType.VEC3;\n  translationAttribute.count = instancesLength;\n  // The min / max values of the translation attribute need to be computed\n  // by the model pipeline, so so a pointer to the typed array is stored.\n  translationAttribute.typedArray = translationTypedArray;\n  // If there is no rotation attribute, however, the translations can also be\n  // loaded as a buffer to prevent additional resource creation in the pipeline.\n  if (!hasRotation) {\n    const buffer = Buffer.createVertexBuffer({\n      context: frameState.context,\n      typedArray: translationTypedArray,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    // Destruction of resources is handled by I3dmLoader.unload().\n    buffer.vertexArrayDestroyable = false;\n    buffers.push(buffer);\n\n    translationAttribute.buffer = buffer;\n  }\n\n  instances.attributes.push(translationAttribute);\n\n  // Create rotation vertex attribute.\n  if (hasRotation) {\n    const rotationAttribute = new Attribute();\n    rotationAttribute.name = \"Instance Rotation\";\n    rotationAttribute.semantic = InstanceAttributeSemantic.ROTATION;\n    rotationAttribute.componentDatatype = ComponentDatatype.FLOAT;\n    rotationAttribute.type = AttributeType.VEC4;\n    rotationAttribute.count = instancesLength;\n    rotationAttribute.typedArray = rotationTypedArray;\n    instances.attributes.push(rotationAttribute);\n  }\n\n  // Create scale vertex attribute.\n  if (hasScale) {\n    const scaleAttribute = new Attribute();\n    scaleAttribute.name = \"Instance Scale\";\n    scaleAttribute.semantic = InstanceAttributeSemantic.SCALE;\n    scaleAttribute.componentDatatype = ComponentDatatype.FLOAT;\n    scaleAttribute.type = AttributeType.VEC3;\n    scaleAttribute.count = instancesLength;\n    if (hasRotation) {\n      // If rotations are present, all transform attributes are loaded\n      // as typed arrays to compute transform matrices for the model.\n      scaleAttribute.typedArray = scaleTypedArray;\n    } else {\n      const buffer = Buffer.createVertexBuffer({\n        context: frameState.context,\n        typedArray: scaleTypedArray,\n        usage: BufferUsage.STATIC_DRAW,\n      });\n      // Destruction of resources is handled by I3dmLoader.unload().\n      buffer.vertexArrayDestroyable = false;\n      buffers.push(buffer);\n\n      scaleAttribute.buffer = buffer;\n    }\n\n    instances.attributes.push(scaleAttribute);\n  }\n\n  // Create feature ID vertex attribute.\n  const featureIdAttribute = new Attribute();\n  featureIdAttribute.name = \"Instance Feature ID\";\n  featureIdAttribute.setIndex = 0;\n  featureIdAttribute.semantic = InstanceAttributeSemantic.FEATURE_ID;\n  featureIdAttribute.componentDatatype = ComponentDatatype.FLOAT;\n  featureIdAttribute.type = AttributeType.SCALAR;\n  featureIdAttribute.count = instancesLength;\n  const buffer = Buffer.createVertexBuffer({\n    context: frameState.context,\n    typedArray: featureIdArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  // Destruction of resources is handled by I3dmLoader.unload().\n  buffer.vertexArrayDestroyable = false;\n  buffers.push(buffer);\n  featureIdAttribute.buffer = buffer;\n\n  instances.attributes.push(featureIdAttribute);\n\n  // Create feature ID attribute.\n  const featureIdInstanceAttribute = new FeatureIdAttribute();\n  featureIdInstanceAttribute.propertyTableId = 0;\n  featureIdInstanceAttribute.setIndex = 0;\n  featureIdInstanceAttribute.positionalLabel = \"instanceFeatureId_0\";\n  instances.featureIds.push(featureIdInstanceAttribute);\n\n  // Apply instancing to every node that has at least one primitive.\n  const nodes = components.nodes;\n  const nodesLength = nodes.length;\n  let makeInstancesCopy = false;\n  for (i = 0; i < nodesLength; i++) {\n    const node = nodes[i];\n    if (node.primitives.length > 0) {\n      // If the instances have not been assigned to a node already, assign\n      // it to the first node encountered. Otherwise, make a copy of them\n      // for each subsequent node.\n      node.instances = makeInstancesCopy\n        ? createInstancesCopy(instances)\n        : instances;\n\n      makeInstancesCopy = true;\n    }\n  }\n}\n\n/**\n * Returns a copy of the instances that contains shallow copies of the instanced\n * attributes. That is, the instances and attribute objects will be new copies,\n * but they will point to the same buffers and typed arrays. This is so each\n * node can manage memory separately, such that unloading memory for one\n * node does not unload it for another.\n *\n * @returns {ModelComponents.Instances}\n *\n * @private\n */\nfunction createInstancesCopy(instances) {\n  const instancesCopy = new Instances();\n  instancesCopy.transformInWorldSpace = instances.transformInWorldSpace;\n\n  const attributes = instances.attributes;\n  const attributesLength = attributes.length;\n\n  for (let i = 0; i < attributesLength; i++) {\n    const attributeCopy = clone(attributes[i], false);\n    instancesCopy.attributes.push(attributeCopy);\n  }\n\n  instancesCopy.featureIds = instances.featureIds;\n\n  return instancesCopy;\n}\n\n/**\n * Returns a typed array of positions from the i3dm's feature table. The positions\n * returned are dequantized, if dequantization is applied.\n *\n * @private\n */\nfunction getPositions(featureTable, instancesLength) {\n  if (featureTable.hasProperty(\"POSITION\")) {\n    // Handle positions.\n    return featureTable.getPropertyArray(\n      \"POSITION\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n  } else if (featureTable.hasProperty(\"POSITION_QUANTIZED\")) {\n    // Handle quantized positions.\n    const quantizedPositions = featureTable.getPropertyArray(\n      \"POSITION_QUANTIZED\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      3,\n    );\n\n    const quantizedVolumeOffset = featureTable.getGlobalProperty(\n      \"QUANTIZED_VOLUME_OFFSET\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n    if (!defined(quantizedVolumeOffset)) {\n      throw new RuntimeError(\n        \"Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.\",\n      );\n    }\n\n    const quantizedVolumeScale = featureTable.getGlobalProperty(\n      \"QUANTIZED_VOLUME_SCALE\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n    if (!defined(quantizedVolumeScale)) {\n      throw new RuntimeError(\n        \"Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.\",\n      );\n    }\n\n    const decodedPositions = new Float32Array(quantizedPositions.length);\n    for (let i = 0; i < quantizedPositions.length / 3; i++) {\n      for (let j = 0; j < 3; j++) {\n        const index = 3 * i + j;\n        decodedPositions[index] =\n          (quantizedPositions[index] / 65535.0) * quantizedVolumeScale[j] +\n          quantizedVolumeOffset[j];\n      }\n    }\n\n    return decodedPositions;\n\n    // eslint-disable-next-line no-else-return\n  } else {\n    throw new RuntimeError(\n      \"Either POSITION or POSITION_QUANTIZED must be defined for each instance.\",\n    );\n  }\n}\n\nconst propertyScratch2 = new Array(4);\nfunction processRotation(\n  featureTable,\n  eastNorthUp,\n  i,\n  instanceQuaternion,\n  instancePosition,\n  instanceNormalUp,\n  instanceNormalRight,\n  instanceNormalForward,\n  instanceRotation,\n  instanceTransform,\n) {\n  // Get the instance rotation\n  const normalUp = featureTable.getProperty(\n    \"NORMAL_UP\",\n    ComponentDatatype.FLOAT,\n    3,\n    i,\n    propertyScratch1,\n  );\n  const normalRight = featureTable.getProperty(\n    \"NORMAL_RIGHT\",\n    ComponentDatatype.FLOAT,\n    3,\n    i,\n    propertyScratch2,\n  );\n  let hasCustomOrientation = false;\n  if (defined(normalUp)) {\n    if (!defined(normalRight)) {\n      throw new RuntimeError(\n        \"To define a custom orientation, both NORMAL_UP and NORMAL_RIGHT must be defined.\",\n      );\n    }\n    Cartesian3.unpack(normalUp, 0, instanceNormalUp);\n    Cartesian3.unpack(normalRight, 0, instanceNormalRight);\n    hasCustomOrientation = true;\n  } else {\n    const octNormalUp = featureTable.getProperty(\n      \"NORMAL_UP_OCT32P\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      2,\n      i,\n      propertyScratch1,\n    );\n    const octNormalRight = featureTable.getProperty(\n      \"NORMAL_RIGHT_OCT32P\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      2,\n      i,\n      propertyScratch2,\n    );\n    if (defined(octNormalUp)) {\n      if (!defined(octNormalRight)) {\n        throw new RuntimeError(\n          \"To define a custom orientation with oct-encoded vectors, both NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P must be defined.\",\n        );\n      }\n      AttributeCompression.octDecodeInRange(\n        octNormalUp[0],\n        octNormalUp[1],\n        65535,\n        instanceNormalUp,\n      );\n      AttributeCompression.octDecodeInRange(\n        octNormalRight[0],\n        octNormalRight[1],\n        65535,\n        instanceNormalRight,\n      );\n      hasCustomOrientation = true;\n    } else if (eastNorthUp) {\n      Transforms.eastNorthUpToFixedFrame(\n        instancePosition,\n        Ellipsoid.WGS84,\n        instanceTransform,\n      );\n      Matrix4.getMatrix3(instanceTransform, instanceRotation);\n    } else {\n      Matrix3.clone(Matrix3.IDENTITY, instanceRotation);\n    }\n  }\n  if (hasCustomOrientation) {\n    Cartesian3.cross(\n      instanceNormalRight,\n      instanceNormalUp,\n      instanceNormalForward,\n    );\n    Cartesian3.normalize(instanceNormalForward, instanceNormalForward);\n    Matrix3.setColumn(\n      instanceRotation,\n      0,\n      instanceNormalRight,\n      instanceRotation,\n    );\n    Matrix3.setColumn(instanceRotation, 1, instanceNormalUp, instanceRotation);\n    Matrix3.setColumn(\n      instanceRotation,\n      2,\n      instanceNormalForward,\n      instanceRotation,\n    );\n  }\n  Quaternion.fromRotationMatrix(instanceRotation, instanceQuaternion);\n}\n\nfunction processScale(featureTable, i, instanceScale) {\n  instanceScale = Cartesian3.fromElements(1.0, 1.0, 1.0, instanceScale);\n  const scale = featureTable.getProperty(\n    \"SCALE\",\n    ComponentDatatype.FLOAT,\n    1,\n    i,\n  );\n  if (defined(scale)) {\n    Cartesian3.multiplyByScalar(instanceScale, scale, instanceScale);\n  }\n  const nonUniformScale = featureTable.getProperty(\n    \"SCALE_NON_UNIFORM\",\n    ComponentDatatype.FLOAT,\n    3,\n    i,\n    propertyScratch1,\n  );\n  if (defined(nonUniformScale)) {\n    instanceScale.x *= nonUniformScale[0];\n    instanceScale.y *= nonUniformScale[1];\n    instanceScale.z *= nonUniformScale[2];\n  }\n}\n\nfunction unloadBuffers(loader) {\n  const buffers = loader._buffers;\n  const length = buffers.length;\n  for (let i = 0; i < length; i++) {\n    const buffer = buffers[i];\n    if (!buffer.isDestroyed()) {\n      buffer.destroy();\n    }\n  }\n  buffers.length = 0;\n}\n\nexport default I3dmLoader;\n","import combine from \"../../Core/combine.js\";\nimport defined from \"../../Core/defined.js\";\nimport ImageBasedLightingStageFS from \"../../Shaders/Model/ImageBasedLightingStageFS.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport SpecularEnvironmentCubeMap from \"../SpecularEnvironmentCubeMap.js\";\nimport Cartesian2 from \"../../Core/Cartesian2.js\";\n\nconst ImageBasedLightingPipelineStage = {\n  name: \"ImageBasedLightingPipelineStage\", // Helps with debugging\n};\n\nconst scratchCartesian = new Cartesian2();\n\n/**\n * Add shader code, uniforms, and defines related to image based lighting\n * @param {ModelRenderResources} renderResources\n * @param {Model} model\n * @param {FrameState} frameState\n * @private\n */\nImageBasedLightingPipelineStage.process = function (\n  renderResources,\n  model,\n  frameState,\n) {\n  const imageBasedLighting = model.imageBasedLighting;\n  const environmentMapManager = model.environmentMapManager;\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  // If environment maps or spherical harmonics are not specifically provided, use procedural lighting.\n  let specularEnvironmentMapAtlas;\n  if (!defined(imageBasedLighting.specularEnvironmentMaps)) {\n    specularEnvironmentMapAtlas = environmentMapManager.radianceCubeMap;\n  }\n  const sphericalHarmonicCoefficients =\n    imageBasedLighting.sphericalHarmonicCoefficients ??\n    environmentMapManager.sphericalHarmonicCoefficients;\n\n  shaderBuilder.addDefine(\n    \"USE_IBL_LIGHTING\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addUniform(\n    \"vec2\",\n    \"model_iblFactor\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  if (SpecularEnvironmentCubeMap.isSupported(frameState.context)) {\n    const addMatrix =\n      imageBasedLighting.useSphericalHarmonics ||\n      imageBasedLighting.useSpecularEnvironmentMaps ||\n      imageBasedLighting.enabled;\n    if (addMatrix) {\n      shaderBuilder.addUniform(\n        \"mat3\",\n        \"model_iblReferenceFrameMatrix\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n\n    if (defined(specularEnvironmentMapAtlas)) {\n      shaderBuilder.addDefine(\n        \"COMPUTE_POSITION_WC_ATMOSPHERE\",\n        undefined,\n        ShaderDestination.BOTH,\n      );\n    }\n\n    if (\n      defined(sphericalHarmonicCoefficients) &&\n      defined(sphericalHarmonicCoefficients[0])\n    ) {\n      shaderBuilder.addDefine(\n        \"DIFFUSE_IBL\",\n        undefined,\n        ShaderDestination.FRAGMENT,\n      );\n      shaderBuilder.addDefine(\n        \"CUSTOM_SPHERICAL_HARMONICS\",\n        undefined,\n        ShaderDestination.FRAGMENT,\n      );\n      shaderBuilder.addUniform(\n        \"vec3\",\n        \"model_sphericalHarmonicCoefficients[9]\",\n        ShaderDestination.FRAGMENT,\n      );\n    } else if (imageBasedLighting.useDefaultSphericalHarmonics) {\n      shaderBuilder.addDefine(\n        \"DIFFUSE_IBL\",\n        undefined,\n        ShaderDestination.FRAGMENT,\n      );\n    }\n\n    if (\n      (defined(imageBasedLighting.specularEnvironmentCubeMap) &&\n        imageBasedLighting.specularEnvironmentCubeMap.ready) ||\n      defined(specularEnvironmentMapAtlas)\n    ) {\n      shaderBuilder.addDefine(\n        \"SPECULAR_IBL\",\n        undefined,\n        ShaderDestination.FRAGMENT,\n      );\n      shaderBuilder.addDefine(\n        \"CUSTOM_SPECULAR_IBL\",\n        undefined,\n        ShaderDestination.FRAGMENT,\n      );\n      shaderBuilder.addUniform(\n        \"samplerCube\",\n        \"model_specularEnvironmentMaps\",\n        ShaderDestination.FRAGMENT,\n      );\n      shaderBuilder.addUniform(\n        \"float\",\n        \"model_specularEnvironmentMapsMaximumLOD\",\n        ShaderDestination.FRAGMENT,\n      );\n    } else if (model.useDefaultSpecularMaps) {\n      shaderBuilder.addDefine(\n        \"SPECULAR_IBL\",\n        undefined,\n        ShaderDestination.FRAGMENT,\n      );\n    }\n  }\n\n  shaderBuilder.addFragmentLines(ImageBasedLightingStageFS);\n\n  const uniformMap = {\n    model_iblFactor: function () {\n      return Cartesian2.multiplyByScalar(\n        imageBasedLighting.imageBasedLightingFactor,\n        environmentMapManager?.intensity || 1.0,\n        scratchCartesian,\n      );\n    },\n    model_iblReferenceFrameMatrix: function () {\n      return model._iblReferenceFrameMatrix;\n    },\n    model_sphericalHarmonicCoefficients: function () {\n      return sphericalHarmonicCoefficients;\n    },\n    model_specularEnvironmentMaps: function () {\n      return imageBasedLighting.specularEnvironmentCubeMap.texture;\n    },\n    model_specularEnvironmentMapsMaximumLOD: function () {\n      return imageBasedLighting.specularEnvironmentCubeMap.maximumMipmapLevel;\n    },\n  };\n\n  if (defined(specularEnvironmentMapAtlas)) {\n    uniformMap.model_specularEnvironmentMaps = function () {\n      return specularEnvironmentMapAtlas;\n    };\n    uniformMap.model_specularEnvironmentMapsMaximumLOD = function () {\n      return environmentMapManager.maximumMipmapLevel;\n    };\n  }\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n};\n\nexport default ImageBasedLightingPipelineStage;\n","/**\n * A class containing a the values that affect the appearance of\n * an <code>ImageryLayer</code>.\n *\n * This is used in the <code>ModelImagery</code> to detect changes in\n * the imagery settings: The <code>ModelImagery</code> stores one\n * instance per imagery layer. During the <code>update</code>\n * call, it checks whether any of the settings was changed.\n * If this is the case, the draw commands of the model are reset.\n *\n * @private\n */\nclass ImageryConfiguration {\n  constructor(imageryLayer) {\n    this.show = imageryLayer.show;\n    this.alpha = imageryLayer.alpha;\n    this.brightness = imageryLayer.brightness;\n    this.contrast = imageryLayer.contrast;\n    this.hue = imageryLayer.hue;\n    this.saturation = imageryLayer.saturation;\n    this.gamma = imageryLayer.gamma;\n    this.colorToAlpha = imageryLayer.colorToAlpha;\n  }\n}\n\nexport default ImageryConfiguration;\n","import defined from \"../../Core/defined.js\";\nimport Rectangle from \"../../Core/Rectangle.js\";\n\nimport CartesianRectangle from \"./CartesianRectangle.js\";\n\nconst imageryBoundsScratch = new Rectangle();\nconst overlappedRectangleScratch = new Rectangle();\nconst clippedRectangleScratch = new Rectangle();\nconst nativeInputRectangleScratch = new Rectangle();\nconst nativeImageryBoundsScratch = new Rectangle();\nconst nativeClippedImageryBoundsScratch = new Rectangle();\n\n/**\n * A class containing information about a piece of imagery.\n *\n * This represents the result of computing the imagery tiles that\n * are covered by a given <code>Rectangle</code> (and which part\n * of that imagery is covered, in terms of texture coordinates).\n *\n * This class represents a plain structure, without member functions.\n * Instances are created with the <code>createImageryCoverages</code>\n * function.\n *\n * The instances are used by the <code>ModelPrimitiveImagery</code>, to\n * represent the imagery tiles that are covered by the cartographic\n * bounding rectangle of the primitive positions.\n *\n * Implementation note for ImageryCoverage:\n *\n * Some of the static functions in this class have been extracted from\n * <code>ImageryLayer.prototype._createTileImagerySkeletons</code>\n * See https://github.com/CesiumGS/cesium/blob/5eaa2280f495d8f300d9e1f0497118c97aec54c8/packages/engine/Source/Scene/ImageryLayer.js#L700\n * An instance of this class roughly corresponds to the <code>TileImagery</code>\n * that is created there.\n *\n * @private\n */\nclass ImageryCoverage {\n  /**\n   * Creates a new instance.\n   *\n   * @param {number} x x-coordinate of the imagery tile\n   * @param {number} y y-coordinate of the imagery tile\n   * @param {number} level level of the imagery tile\n   * @param {CartesianRectangle} textureCoordinateRectangle The texture coordinate\n   * rectangle from the imagery tile that is covered\n   * @param {Imagery} imagery The imagery\n   */\n  constructor(x, y, level, textureCoordinateRectangle, imagery) {\n    this._x = x;\n    this._y = y;\n    this._level = level;\n    this._textureCoordinateRectangle = textureCoordinateRectangle;\n    this._imagery = imagery;\n  }\n\n  /**\n   * The x-coordinate of the imagery tile, typically correlated with longitude\n   *\n   * @type {number}\n   * @readonly\n   */\n  get x() {\n    return this._x;\n  }\n\n  /**\n   * The y-coordinate of the imagery tile, typically correlated with latitude\n   *\n   * @type {number}\n   * @readonly\n   */\n  get y() {\n    return this._y;\n  }\n\n  /**\n   * The level of the imagery tile\n   *\n   * @type {number}\n   * @readonly\n   */\n  get level() {\n    return this._level;\n  }\n\n  /**\n   * The texture coordinate range that is covered from the\n   * imagery tile.\n   *\n   * This is a <code>CartesianRectangle</code> that contains the\n   * (minU, minV, maxU, maxV) coordinate range.\n   *\n   * Clients may not modify the returned instance.\n   *\n   * @type {CartesianRectangle}\n   * @readonly\n   */\n  get textureCoordinateRectangle() {\n    return this._textureCoordinateRectangle;\n  }\n\n  /**\n   * Returns the imagery\n   *\n   * @type {Imagery}\n   * @readonly\n   */\n  get imagery() {\n    return this._imagery;\n  }\n\n  /**\n   * Computes the <code>ImageryCoverage</code> objects that describe the imagery\n   * tiles and the respective texture coordinates that are covered by the given\n   * input rectangle in the given imagery data.\n   *\n   * The given imagery level will be clamped if necessary, to be in the valid\n   * range for the imagery provider of the given imagery layer.\n   *\n   * @param {Rectangle} inputRectangle The input rectangle (e.g. tile bounds)\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @param {number} inputImageryLevel The level for which the imagery coverage\n   * should be computed.\n   * @returns {ImageryCoverage[]} The objects describing the covered imagery\n   * and the respective texture coordinates\n   */\n  static createImageryCoverages(\n    inputRectangle,\n    imageryLayer,\n    inputImageryLevel,\n  ) {\n    if (!imageryLayer.show) {\n      return [];\n    }\n\n    const imageryProvider = imageryLayer.imageryProvider;\n    const imageryLevel = ImageryCoverage._clampImageryLevel(\n      imageryProvider,\n      inputImageryLevel,\n    );\n\n    // Compute the range, in integer coordinates, of imagery\n    // tiles that are covered by the input rectangle\n    const imageryBounds = Rectangle.intersection(\n      imageryProvider.rectangle,\n      imageryLayer.rectangle,\n      imageryBoundsScratch,\n    );\n    const imageryTilingScheme = imageryProvider.tilingScheme;\n    const imageryRange = ImageryCoverage._computeImageryRange(\n      inputRectangle,\n      imageryBounds,\n      imageryTilingScheme,\n      imageryLevel,\n    );\n\n    // Convert the input rectangle and the imagery bounds into\n    // the native coordinate system of the tiling scheme\n    const nativeInputRectangle = nativeInputRectangleScratch;\n    imageryTilingScheme.rectangleToNativeRectangle(\n      inputRectangle,\n      nativeInputRectangle,\n    );\n    const nativeImageryBounds = nativeImageryBoundsScratch;\n    imageryTilingScheme.rectangleToNativeRectangle(\n      imageryBounds,\n      nativeImageryBounds,\n    );\n\n    // A function that returns an imagery rectangle, based on (x, y, level),\n    // clipped to the imagery bounds (or undefined if there is no intersection\n    // between the imagery rectangle and the bounds)\n    const computeClippedImageryRectangle = (x, y, level) => {\n      const localImageryRectangle = imageryTilingScheme.tileXYToRectangle(\n        x,\n        y,\n        level,\n      );\n      const localClippedImageryRectangle = Rectangle.intersection(\n        localImageryRectangle,\n        imageryBounds,\n        clippedRectangleScratch,\n      );\n      if (!defined(localClippedImageryRectangle)) {\n        return undefined;\n      }\n      const nativeClippedImageryBounds = nativeClippedImageryBoundsScratch;\n      imageryTilingScheme.rectangleToNativeRectangle(\n        localClippedImageryRectangle,\n        nativeClippedImageryBounds,\n      );\n      return nativeClippedImageryBounds;\n    };\n\n    const imageryCoverages = ImageryCoverage._computeImageryCoverages(\n      imageryLayer,\n      imageryRange,\n      imageryLevel,\n      nativeInputRectangle,\n      computeClippedImageryRectangle,\n    );\n    return imageryCoverages;\n  }\n\n  /**\n   * Validate the given imagery level against the constraints of the\n   * given imagery provider.\n   *\n   * This will clamp the given level to be in the range\n   * <code>[minimumLevel, maximumLevel)</code> that is\n   * defined by the given imagery provider (and cut off\n   * any fractional part that the input may have)\n   *\n   * @param {ImageryProvider} imageryProvider The imagery provider\n   * @param {number} imageryLevel The imagery level\n   * @returns {number} The validated level\n   */\n  static _clampImageryLevel(imageryProvider, imageryLevel) {\n    const minimumLevel = imageryProvider.minimumLevel ?? 0;\n    const maximumLevel =\n      imageryProvider.maximumLevel ?? Number.POSITIVE_INFINITY;\n    const clampedImageryLevel = Math.min(\n      maximumLevel - 1,\n      Math.max(minimumLevel, imageryLevel),\n    );\n    const validImageryLevel = Math.floor(clampedImageryLevel);\n    return validImageryLevel;\n  }\n\n  /**\n   * Compute the rectangle describing the range of imagery that is covered\n   * with the given rectangle.\n   *\n   * This will compute a rectangle with integer coordinates that describe\n   * the X/Y coordinates of the imagery that is overlapped by the given\n   * input rectangle, based on the given imagery rectangle.\n   *\n   * Extracted from _createTileImagerySkeletons.\n   *\n   * @param {Rectangle} inputRectangle The input rectangle\n   * @param {Rectangle} imageryBounds The imagery bounds\n   * @param {TilingScheme} imageryTilingScheme The tiling scheme\n   * @param {number} imageryLevel The imagery level\n   * @returns {CartesianRectangle} The rectangle\n   */\n  static _computeImageryRange(\n    inputRectangle,\n    imageryBounds,\n    imageryTilingScheme,\n    imageryLevel,\n  ) {\n    const overlappedRectangle = ImageryCoverage._computeOverlappedRectangle(\n      inputRectangle,\n      imageryBounds,\n    );\n    const northwestTileCoordinates = imageryTilingScheme.positionToTileXY(\n      Rectangle.northwest(overlappedRectangle),\n      imageryLevel,\n    );\n    const southeastTileCoordinates = imageryTilingScheme.positionToTileXY(\n      Rectangle.southeast(overlappedRectangle),\n      imageryLevel,\n    );\n\n    const result = new CartesianRectangle();\n    result.minX = northwestTileCoordinates.x;\n    result.minY = northwestTileCoordinates.y;\n    result.maxX = southeastTileCoordinates.x;\n    result.maxY = southeastTileCoordinates.y;\n\n    // As extracted from _createTileImagerySkeletons:\n    // If the southeast corner of the rectangle lies very close to the north or west side\n    // of the southeast tile, we don't actually need the southernmost or easternmost\n    // tiles.\n    // Similarly, if the northwest corner of the rectangle lies very close to the south or east side\n    // of the northwest tile, we don't actually need the northernmost or westernmost tiles.\n    // We define \"very close\" as being within 1/512 of the width of the tile.\n    const veryCloseX = inputRectangle.width / 512.0;\n    const veryCloseY = inputRectangle.height / 512.0;\n\n    const northwestTileRectangle = imageryTilingScheme.tileXYToRectangle(\n      result.minX,\n      result.minY,\n      imageryLevel,\n    );\n    const deltaNorth = Math.abs(\n      northwestTileRectangle.south - inputRectangle.north,\n    );\n    if (deltaNorth < veryCloseY && result.minY < result.maxY) {\n      ++result.minY;\n    }\n    const deltaWest = Math.abs(\n      northwestTileRectangle.east - inputRectangle.west,\n    );\n    if (deltaWest < veryCloseX && result.minX < result.maxX) {\n      ++result.minX;\n    }\n\n    const southeastTileRectangle = imageryTilingScheme.tileXYToRectangle(\n      result.maxX,\n      result.maxY,\n      imageryLevel,\n    );\n    const deltaSouth = Math.abs(\n      southeastTileRectangle.north - inputRectangle.south,\n    );\n    if (deltaSouth < veryCloseY && result.maxY > result.minY) {\n      --result.maxY;\n    }\n    const deltaEast = Math.abs(\n      southeastTileRectangle.west - inputRectangle.east,\n    );\n    if (deltaEast < veryCloseX && result.maxX > result.minX) {\n      --result.maxX;\n    }\n\n    return result;\n  }\n\n  /**\n   * Clamp the given input rectangle to the given clamp rectangle.\n   *\n   * If the input rectangle is completely above/below or left/right\n   * of the clamp rectangle, then the north/south or east/east\n   * if the clamp rectangle will be used in the result.\n   *\n   * @param {Rectangle} input The input rectangle\n   * @param {Rectangle} clamp The clamping rectangle\n   * @param {Rectangle} [result] The result\n   * @returns {Rectangle} The result\n   */\n  static _clampRectangle(input, clamp, result) {\n    if (!defined(result)) {\n      result = new Rectangle();\n    }\n    if (input.south >= clamp.north) {\n      result.north = result.south = clamp.north;\n    } else if (input.north <= clamp.south) {\n      result.north = result.south = clamp.south;\n    } else {\n      result.south = Math.max(input.south, clamp.south);\n      result.north = Math.min(input.north, clamp.north);\n    }\n\n    if (input.west >= clamp.east) {\n      result.west = result.east = clamp.east;\n    } else if (input.east <= clamp.west) {\n      result.west = result.east = clamp.west;\n    } else {\n      result.west = Math.max(input.west, clamp.west);\n      result.east = Math.min(input.east, clamp.east);\n    }\n    return result;\n  }\n\n  /**\n   * Compute overlap between the given input rectangle, and the given\n   * bounds that have been obtained from the imagery provider.\n   *\n   * @param {Rectangle} inputRectangle The input\n   * @param {Rectangle} imageryBounds The imagery bounds\n   * @returns {Rectangle} The rectangle\n   */\n  static _computeOverlappedRectangle(inputRectangle, imageryBounds) {\n    const overlappedRectangle = Rectangle.intersection(\n      inputRectangle,\n      imageryBounds,\n      overlappedRectangleScratch,\n    );\n    if (defined(overlappedRectangle)) {\n      return overlappedRectangle;\n    }\n    return ImageryCoverage._clampRectangle(\n      inputRectangle,\n      imageryBounds,\n      overlappedRectangleScratch,\n    );\n  }\n\n  /**\n   * Computes the <code>ImageryCoverage</code> objects that describe the imagery and\n   * the texture coordinates that are contained in the given range of\n   * imagery tile coordinates, referring to the given input rectangle.\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @param {CartesianRectangle} imageryRange The range of imagery tile coordinates\n   * @param {number} imageryLevel The imagery level\n   * @param {Rectangle} nativeInputRectangle The input rectangle, in coordinates\n   * that are native for the tiling scheme\n   * @param {Function} computeClippedImageryRectangle A function that returns\n   * an imagery rectangle, based on (x, y, level), clipped to the imagery bounds\n   * (or undefined if there is no intersection between the imagery rectangle\n   * and the bounds)\n   * @returns {ImageryCoverage[]} The objects describing the covered imagery\n   * and the respective texture coordinates\n   */\n  static _computeImageryCoverages(\n    imageryLayer,\n    imageryRange,\n    imageryLevel,\n    nativeInputRectangle,\n    computeClippedImageryRectangle,\n  ) {\n    const imageryCoverages = [];\n\n    for (let i = imageryRange.minX; i <= imageryRange.maxX; i++) {\n      const clippedImageryRectangleU = computeClippedImageryRectangle(\n        i,\n        imageryRange.maxY,\n        imageryLevel,\n      );\n\n      if (!defined(clippedImageryRectangleU)) {\n        continue;\n      }\n\n      for (let j = imageryRange.minY; j <= imageryRange.maxY; j++) {\n        const clippedImageryRectangleV = computeClippedImageryRectangle(\n          i,\n          j,\n          imageryLevel,\n        );\n\n        if (!defined(clippedImageryRectangleV)) {\n          continue;\n        }\n\n        const textureCoordinateRectangle =\n          ImageryCoverage._localizeToCartesianRectangle(\n            clippedImageryRectangleV,\n            nativeInputRectangle,\n            undefined,\n          );\n\n        // Note: The getImageryFromCache function will create the whole \"chain\"\n        // of ancestor imageries, up to the root, and increases the reference\n        // counter for each of them, even though it is not called\n        // getImageryFromCacheAndCreateAllAncestorsAndAddReferences.\n        // There is currently no way to have a single imagery, because\n        // somewhere in TileImagery, the parent is assumed to be present.\n        const imagery = imageryLayer.getImageryFromCache(i, j, imageryLevel);\n        const imageryCoverage = new ImageryCoverage(\n          i,\n          j,\n          imageryLevel,\n          textureCoordinateRectangle,\n          imagery,\n        );\n        imageryCoverages.push(imageryCoverage);\n      }\n    }\n    return imageryCoverages;\n  }\n\n  /**\n   * Compute the coordinates of the first rectangle relative to the\n   * second rectangle.\n   *\n   * The result will describe the bounds of the first rectangle\n   * in coordinates that are relative to the (south,west) and\n   * (width, height) of the second rectangle. This is suitable\n   * for describing the texture coordinates of the first\n   * rectangle within the second one.\n   *\n   * The result will be stored in the given result parameter, or\n   * in a new rectangle if the result was undefined.\n   *\n   * @param {Rectangle} rectangleA The first rectangle\n   * @param {Rectangle} rectangleB The second rectangle\n   * @param {CartesianRectangle} [result] The result\n   * @returns {CartesianRectangle} The result\n   */\n  static _localizeToCartesianRectangle(rectangleA, rectangleB, result) {\n    if (!defined(result)) {\n      result = new CartesianRectangle();\n    }\n    const invX = 1.0 / rectangleB.width;\n    const invY = 1.0 / rectangleB.height;\n    result.minX = (rectangleA.west - rectangleB.west) * invX;\n    result.minY = (rectangleA.south - rectangleB.south) * invY;\n    result.maxX = (rectangleA.east - rectangleB.west) * invX;\n    result.maxY = (rectangleA.north - rectangleB.south) * invY;\n    return result;\n  }\n}\n\nexport default ImageryCoverage;\n","/**\n * A class containing a set of flags indicating which parts of an\n * <code>ImageryLayer</code> need to be processed.\n *\n * This is used in the <code>ImageryPipelineStage</code> to decide the\n * structure of the function that blends the imagery texture information\n * with the previous pixels.\n *\n * Each flag indicates that at least one of the <code>ImageryLayer</code> objects\n * that are part of the input did <b>not</b> have the default value that\n * was defined via the corresponding <code>ImageryLayer.DEFAULT_...</code>>.\n *\n * Note that the type of the flags can be <code>boolean</code> or\n * <code>number</code>. Users should check for these flags having\n * a 'truthy' or 'falsy' value.\n *\n * @private\n */\nclass ImageryFlags {\n  constructor() {\n    this.alpha = false;\n    this.brightness = false;\n    this.contrast = false;\n    this.hue = false;\n    this.saturation = false;\n    this.gamma = false;\n    this.colorToAlpha = false;\n  }\n}\n\nexport default ImageryFlags;\n","/**\n * A structure summarizing the input for the shader that is draping imagery\n * over 3D Tiles, as part of the <code>ImageryPipelineStage</code>.\n *\n * The <code>ImageryPipelineStage</code> receives the primitive, and their\n * <code>ModelPrimitiveImagery</code> objects. These objects provide the\n * <code>ImageryCoverage</code> information, indicating the set of imagery\n * tiles that are covered by the primitive.\n *\n * The <code>ImageryPipelineStage</code> uses the <code>ImageryCoverage</code>\n * to fetch the <code>Imagery</code> object and its texture for the (x, y, level)\n * of each coverage, computes the texture translation and scale, and the covered\n * texture coordinate rectangle of that imagery texture.\n *\n * This information is summarized in an instance of this class, to later\n * be passed to the shader via uniforms.\n *\n * @private\n */\nclass ImageryInput {\n  /**\n   * Creates a new instance\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @param {Texture} texture The texture from the imagery\n   * @param {Cartesian4} textureTranslationAndScale The translation\n   * and scale that have to be applied to the texture, to properly\n   * be draped on the primitive. This is stored as a Cartesian4\n   * with (x,y) being the translation and (z,w) being the scale.\n   * It could be cleaner and clearer to store this as separate\n   * Cartesian2 objects, but using a single Cartesian4 probably\n   * was a design choice that was originally made in GlobeFS.glsl,\n   * with the goal to have fewer uniforms\n   * @param {Cartesian4} textureCoordinateRectangle The bounding\n   * rectangle (in texture coordinates). This directly corresponds\n   * to the <code>ImageryCoverage.textureCoordinateRectangle</code>,\n   * but converted into a Cartesian4 for the consumption in the\n   * shader\n   * @param {number} imageryTexCoordAttributeSetIndex The \"set index\"\n   * of the texture coordinate attribute that should be used. This\n   * will be used to access the texture coordinate attribute\n   * <code>a_imagery_texCoord_${imageryTexCoordAttributeSetIndex}</code>\n   * in the shader.\n   */\n  constructor(\n    imageryLayer,\n    texture,\n    textureTranslationAndScale,\n    textureCoordinateRectangle,\n    imageryTexCoordAttributeSetIndex,\n  ) {\n    this.imageryLayer = imageryLayer;\n    this.texture = texture;\n    this.textureTranslationAndScale = textureTranslationAndScale;\n    this.textureCoordinateRectangle = textureCoordinateRectangle;\n    this.imageryTexCoordAttributeSetIndex = imageryTexCoordAttributeSetIndex;\n  }\n}\n\nexport default ImageryInput;\n","import defined from \"../../Core/defined.js\";\nimport Cartesian4 from \"../../Core/Cartesian4.js\";\nimport Check from \"../../Core/Check.js\";\nimport Rectangle from \"../../Core/Rectangle.js\";\n\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\n\nimport ImageryLayer from \"../ImageryLayer.js\";\nimport AttributeType from \"../AttributeType.js\";\n\nimport ImageryFlags from \"./ImageryFlags.js\";\nimport ModelPrimitiveImagery from \"./ModelPrimitiveImagery.js\";\nimport ImageryInput from \"./ImageryInput.js\";\nimport ImageryState from \"../ImageryState.js\";\nimport oneTimeWarning from \"../../Core/oneTimeWarning.js\";\n\n/**\n * A compile-time debugging flag to draw the boundaries of imagery tiles\n * (Similar to \"SHOW_TILE_BOUNDARIES\" in GlobeFS.glsl)\n * @private\n */\nconst debugDrawImageryBoundaries = false;\n\n// Scratch variable for _computeTextureTranslationAndScale\nconst nativeBoundingRectangleScratch = new Rectangle();\n\n// Scratch variable for _computeTextureTranslationAndScale\nconst nativeImageryRectangleScratch = new Rectangle();\n\n/**\n * A pipeline stage that modifies the model shader to take into account\n * imagery textures that are draped over a primitive of the model, when it\n * is part a <code>Model3DTileContent</code> of a <code>Cesium3DTileset</code>\n * that has <code>imageryLayers</code> associated with it.\n *\n * Most of what is done here tries to emulate the parts from\n * https://github.com/CesiumGS/cesium/blob/6cc004aaff586bb59f07f199216ae511014cf5a9/packages/engine/Source/Shaders/GlobeFS.glsl#L166\n * that are relevant for imagery, using the more modern ShaderBuilder structures.\n *\n * @namespace ImageryPipelineStage\n *\n * @private\n */\nclass ImageryPipelineStage {\n  /**\n   * Process a primitive.\n   *\n   * This will update the render resources of the given primitive,\n   * depending on the imagery that is covered by the given primitive.\n   *\n   * This will obtain the <code>ModelPrimitiveImagery</code> from\n   * the given primitive, and use that to compute the actual\n   * <code>ImageryInput</code> objects that describe the information\n   * that has to be passed to the shader for draping the imagery over\n   * the primitive.\n   *\n   * After the <code>ImageryInput</code> has been computed, it will\n   * extend the render resources with the texture coordinate\n   * attribute that has to be used for the imagery, and augment\n   * the <code>primitiveRenderResources.shaderBuilder</code> with\n   * the information hat is required for the draping.\n   *\n   * @param {PrimitiveRenderResources} primitiveRenderResources The render resources for the primitive\n   * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n   * @param {FrameState} frameState The frame state.\n   */\n  static process(primitiveRenderResources, primitive, frameState) {\n    const model = primitiveRenderResources.model;\n    const modelPrimitiveImagery = primitive.modelPrimitiveImagery;\n\n    // When the creation of the model primitive imagery is happening\n    // asynchronously, then the primitive may not yet contain it.\n    // Return early in this case\n    if (!defined(modelPrimitiveImagery)) {\n      return;\n    }\n\n    // Similarly, when the model primitive imagery is not yet ready,\n    // then nothing can be done here\n    if (!modelPrimitiveImagery.ready) {\n      return;\n    }\n\n    // Compute the arrays containing ALL projections and the array\n    // containing the UNIQUE projections from the imagery layers,\n    // to establish the mapping between the imagery index and the\n    // imagery texture coordinate attribute set index.\n    // (This should be implemented and/or documented better...)\n    const imageryLayers = model.imageryLayers;\n    const allProjections =\n      ModelPrimitiveImagery._extractProjections(imageryLayers);\n    const uniqueProjections = [...new Set(allProjections)];\n    const imageryTexCoordAttributeSetIndices =\n      ImageryPipelineStage._computeIndexMapping(\n        allProjections,\n        uniqueProjections,\n      );\n\n    // Create the `ImageryInput` objects that describe\n    // - the texture\n    // - texture coordinate rectangle\n    // - translation and scale\n    // - index of the imagery texture coordinate attribute\n    // to be passed to the actual imagery pipeline stage execution\n    const imageryInputs = ImageryPipelineStage._createImageryInputs(\n      imageryLayers,\n      modelPrimitiveImagery,\n      imageryTexCoordAttributeSetIndices,\n    );\n\n    // This can happen when none of the imagery textures could\n    // be obtained, because they had all been INVALID/FAILED,\n    // or when none of the imagery layers is actually visible\n    // according to `show==true`\n    // Bail out in this case\n    if (imageryInputs.length === 0) {\n      return;\n    }\n\n    // TODO_DRAPING This will have to be handled with upsampling.\n    // For now, just truncate the textures to not exceed the\n    // number of texture units\n    if (imageryInputs.length > 10) {\n      oneTimeWarning(\n        \"imagery-texture-units\",\n        `Warning: Draped imagery requires ${imageryInputs.length} texture units, truncating`,\n      );\n      imageryInputs.length = 10;\n    }\n\n    // Add the imagery texture coordinate attributes to the render\n    // resources\n    ImageryPipelineStage._addImageryTexCoordAttributesToRenderResources(\n      modelPrimitiveImagery,\n      primitiveRenderResources,\n    );\n\n    const imageryLayersArray = [];\n    for (let i = 0; i < imageryLayers.length; i++) {\n      imageryLayersArray.push(imageryLayers.get(i));\n    }\n\n    ImageryPipelineStage._processImageryInputs(\n      imageryLayersArray,\n      primitiveRenderResources,\n      imageryInputs,\n      uniqueProjections.length,\n    );\n  }\n\n  /**\n   * Add one attribute to the render resources, for each imagery texture\n   * coordinate that was computed in the given model primitive imagery\n   * (one for each projection)\n   *\n   * @param {ModelPrimitiveImagery} modelPrimitiveImagery The model primitive imagery\n   * @param {PrimitiveRenderResources} primitiveRenderResources The render resources\n   */\n  static _addImageryTexCoordAttributesToRenderResources(\n    modelPrimitiveImagery,\n    primitiveRenderResources,\n  ) {\n    const imageryTexCoordAttributes =\n      modelPrimitiveImagery.imageryTexCoordAttributesPerProjection();\n    for (const imageryTexCoordAttribute of imageryTexCoordAttributes) {\n      ImageryPipelineStage._addImageryTexCoordAttributeToRenderResources(\n        imageryTexCoordAttribute,\n        primitiveRenderResources,\n      );\n    }\n  }\n\n  /**\n   * Add the given attribute to the render resources\n   *\n   * @param {ModelComponents.Attribute} imageryTexCoordAttribute The attribute\n   * @param {PrimitiveRenderResources} primitiveRenderResources The render resources\n   */\n  static _addImageryTexCoordAttributeToRenderResources(\n    imageryTexCoordAttribute,\n    primitiveRenderResources,\n  ) {\n    const componentsPerAttribute = AttributeType.getNumberOfComponents(\n      imageryTexCoordAttribute.type,\n    );\n    // Convert the given object into another object that essentially\n    // contains the same information, but not exactly, and with most\n    // properties having slightly different names. Shrug.\n    const renderResourcesAttribute = {\n      index: primitiveRenderResources.attributeIndex++,\n      value: defined(imageryTexCoordAttribute.buffer)\n        ? undefined\n        : imageryTexCoordAttribute.constant,\n      vertexBuffer: imageryTexCoordAttribute.buffer,\n      count: imageryTexCoordAttribute.count,\n      componentsPerAttribute: componentsPerAttribute,\n      componentDatatype: imageryTexCoordAttribute.componentDatatype,\n      offsetInBytes: imageryTexCoordAttribute.byteOffset,\n      strideInBytes: imageryTexCoordAttribute.byteStride,\n      normalize: imageryTexCoordAttribute.normalized,\n    };\n    primitiveRenderResources.attributes.push(renderResourcesAttribute);\n  }\n\n  /**\n   * Process the <code>ImageryInput</code> objects that have been\n   * created in <code>process</code>.\n   *\n   * This will build the shader, containing the attributes, uniforms,\n   * and \"sample and blend\" function that is required according to\n   * the given imagery inputs\n   *\n   * @param {ImageryLayer[]} imageryLayersArray The imagery layers\n   * @param {PrimitiveRenderResources} primitiveRenderResources The primitive render resources\n   * @param {ImageryInput[]} imageryInputs The imagery inputs\n   * @param {number} numImageryTexCoordAttributes The number of texture coordinate\n   * attributes that have been created for the imagery (one for each distinct\n   * projection that was found in the imagery layers)\n   */\n  static _processImageryInputs(\n    imageryLayersArray,\n    renderResources,\n    imageryInputs,\n    numImageryTexCoordAttributes,\n  ) {\n    const shaderBuilder = renderResources.shaderBuilder;\n\n    const imageryFlags =\n      ImageryPipelineStage._computeImageryFlags(imageryLayersArray);\n    const numTextures = imageryInputs.length;\n\n    // Set the global defines indicating the presence and number of\n    // imagery textures.\n    shaderBuilder.addDefine(`HAS_IMAGERY`);\n    shaderBuilder.addDefine(`IMAGERY_TEXTURE_UNITS ${numTextures}`);\n\n    ImageryPipelineStage._addAttributes(\n      shaderBuilder,\n      numImageryTexCoordAttributes,\n    );\n\n    ImageryPipelineStage._defineUniforms(shaderBuilder, imageryFlags);\n    ImageryPipelineStage._buildSampleAndBlendFunction(\n      shaderBuilder,\n      imageryFlags,\n    );\n\n    ImageryPipelineStage._createMainImageryShader(\n      shaderBuilder,\n      imageryInputs,\n      imageryFlags,\n    );\n\n    const uniformMap = renderResources.uniformMap;\n    const uniforms = ImageryPipelineStage._createImageryUniforms(imageryInputs);\n    ImageryPipelineStage._setImageryUniforms(uniformMap, uniforms);\n  }\n\n  /**\n   * Add the attribute- and varying definitions for the imagery texture\n   * coordinates to the given shader.\n   *\n   * This includes the definition of the <code>initializeImageryAttributes</code>\n   * function that assigns the attribute values to varyings in the vertex shader.\n   *\n   * @param {ShaderBuilder} shaderBuilder The shader builder\n   * @param {number} numTexCoords The number of imagery texture coordinate sets\n   */\n  static _addAttributes(shaderBuilder, numTexCoords) {\n    for (let i = 0; i < numTexCoords; i++) {\n      shaderBuilder.addAttribute(\"vec2\", `a_imagery_texCoord_${i}`);\n      shaderBuilder.addVarying(\"vec2\", `v_imagery_texCoord_${i}`);\n    }\n\n    const functionId = \"initializeImageryAttributes\";\n    const signature = `void ${functionId}()`;\n    shaderBuilder.addFunction(functionId, signature, ShaderDestination.VERTEX);\n\n    for (let i = 0; i < numTexCoords; i++) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `v_imagery_texCoord_${i} = a_imagery_texCoord_${i};`,\n      ]);\n    }\n  }\n\n  /**\n   * Returns the `ImageryFlags` that indicate the features that are\n   * required for the given imagery layers.\n   *\n   * The resulting flags will indicate whether any of the given\n   * imagery layer objects did *not* have the default value for\n   * the respective property, as defined by `ImageryLayer.DEFAULT_...`\n   *\n   * @param {ImageryLayer[]} imageryLayers The imagery layers\n   * @returns {ImageryFlags} The imagery flags\n   */\n  static _computeImageryFlags(imageryLayers) {\n    const imageryFlags = new ImageryFlags();\n    for (let i = 0; i < imageryLayers.length; i++) {\n      const imageryLayer = imageryLayers[i];\n\n      // These are short-circuiting to `number` instead\n      // of `boolean` here. With \"ecmaVersion: 2021\", we\n      // could use \"||=\" here. Otherwise, there is no\n      // nice shortcut for this.\n      imageryFlags.alpha |= imageryLayer.alpha !== 1.0;\n      imageryFlags.brightness |=\n        imageryLayer.brightness !== ImageryLayer.DEFAULT_BRIGHTNESS;\n      imageryFlags.contrast |=\n        imageryLayer.contrast !== ImageryLayer.DEFAULT_CONTRAST;\n      imageryFlags.hue |= imageryLayer.hue !== ImageryLayer.DEFAULT_HUE;\n      imageryFlags.saturation |=\n        imageryLayer.saturation !== ImageryLayer.DEFAULT_SATURATION;\n      imageryFlags.gamma |= imageryLayer.gamma !== ImageryLayer.DEFAULT_GAMMA;\n      const hasColorToAlpha =\n        defined(imageryLayer.colorToAlpha) &&\n        imageryLayer.colorToAlphaThreshold > 0.0;\n      imageryFlags.colorToAlpha |= hasColorToAlpha;\n    }\n    return imageryFlags;\n  }\n\n  /**\n   * Adds the uniforms that are required for the imagery to the shader.\n   *\n   * This will use the given shader builder to add the uniforms to the\n   * shader that are always required for the imagery (e.g. the\n   * `sampler2D u_imageryTextures[...]`).\n   *\n   * The array size of all arrays will be `IMAGERY_TEXTURE_UNITS`,\n   * so this has to be added as a `define` with a positive value.\n   *\n   * Depending on the given imagery flags being `true`, it will add\n   * the optional uniforms, like `u_imageryTextureAlpha`.\n   *\n   * The naming pattern will be `u_imageryTexture<name>`, except for\n   * `gamma`: To safe that one measly division, the thane will be\n   * `oneOverGamma` there.\n   *\n   * @param {ShaderBuilder} shaderBuilder The shader builder\n   * @param {ImageryFlags} imageryFlags The imagery flags\n   */\n  static _defineUniforms(shaderBuilder, imageryFlags) {\n    shaderBuilder.addUniform(\n      \"sampler2D\",\n      \"u_imageryTextures[IMAGERY_TEXTURE_UNITS]\",\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addUniform(\n      \"vec4\",\n      \"u_imageryTextureCoordinateRectangle[IMAGERY_TEXTURE_UNITS]\",\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addUniform(\n      \"vec4\",\n      \"u_imageryTextureTranslationAndScale[IMAGERY_TEXTURE_UNITS]\",\n      ShaderDestination.FRAGMENT,\n    );\n\n    if (imageryFlags.alpha) {\n      shaderBuilder.addUniform(\n        \"float\",\n        \"u_imageryTextureAlpha[IMAGERY_TEXTURE_UNITS]\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n    if (imageryFlags.brightness) {\n      shaderBuilder.addUniform(\n        \"float\",\n        \"u_imageryTextureBrightness[IMAGERY_TEXTURE_UNITS]\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n    if (imageryFlags.contrast) {\n      shaderBuilder.addUniform(\n        \"float\",\n        \"u_imageryTextureContrast[IMAGERY_TEXTURE_UNITS]\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n    if (imageryFlags.hue) {\n      shaderBuilder.addUniform(\n        \"float\",\n        \"u_imageryTextureHue[IMAGERY_TEXTURE_UNITS]\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n    if (imageryFlags.saturation) {\n      shaderBuilder.addUniform(\n        \"float\",\n        \"u_imageryTextureSaturation[IMAGERY_TEXTURE_UNITS]\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n    if (imageryFlags.gamma) {\n      shaderBuilder.addUniform(\n        \"float\",\n        \"u_imageryTextureOneOverGamma[IMAGERY_TEXTURE_UNITS]\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n    if (imageryFlags.colorToAlpha) {\n      shaderBuilder.addUniform(\n        \"vec4\",\n        \"u_imageryTextureColorToAlpha[IMAGERY_TEXTURE_UNITS]\",\n        ShaderDestination.FRAGMENT,\n      );\n    }\n  }\n\n  /**\n   * Create the function signature for the `sampleAndBlend` function,\n   * based on the features that are required for the imagery.\n   *\n   * For details, see `buildSampleAndBlendFunction`\n   *\n   * @param {ImageryFlags} imageryFlags The imagery flags\n   * @returns {string} The string\n   */\n  static _createSampleAndBlendFunctionSignature(imageryFlags) {\n    const functionId = \"sampleAndBlend\";\n    const parameters = [];\n    parameters.push(`vec4 previousColor`);\n    parameters.push(`sampler2D textureToSample`);\n    parameters.push(`vec2 textureCoordinates`);\n    parameters.push(`vec4 textureCoordinateRectangle`);\n    parameters.push(`vec4 textureCoordinateTranslationAndScale`);\n    if (imageryFlags.alpha) {\n      parameters.push(`float textureAlpha`);\n    }\n    if (imageryFlags.brightness) {\n      parameters.push(`float textureBrightness`);\n    }\n    if (imageryFlags.contrast) {\n      parameters.push(`float textureContrast`);\n    }\n    if (imageryFlags.hue) {\n      parameters.push(`float textureHue`);\n    }\n    if (imageryFlags.saturation) {\n      parameters.push(`float textureSaturation`);\n    }\n    if (imageryFlags.gamma) {\n      parameters.push(`float textureOneOverGamma`);\n    }\n    if (imageryFlags.colorToAlpha) {\n      parameters.push(`vec4 colorToAlpha`);\n    }\n    const parametersString = parameters.join(\", \");\n\n    const signature = `vec4 ${functionId}(${parametersString})`;\n    return signature;\n  }\n\n  /**\n   * Build the `sampleAndBlend` function that will be called for each imagery,\n   * to combine the previous pixel color with the respective imagery input.\n   *\n   * The function that is built here resembles the function that was originally defined at\n   * https://github.com/CesiumGS/cesium/blob/6cc004aaff586bb59f07f199216ae511014cf5a9/packages/engine/Source/Shaders/GlobeFS.glsl#L166\n   *\n   * However, for the function that is built here, the signature will\n   * reflect the actual features that are required for the imagery:\n   * For example, the `float textureAlpha` parameter will only be\n   * present when `imageryFlags.alpha` is `true`.\n   *\n   * @param {ShaderBuilder} shaderBuilder The shader builder\n   * @param {ImageryFlags} imageryFlags The imagery flags\n   */\n  static _buildSampleAndBlendFunction(shaderBuilder, imageryFlags) {\n    const functionId = \"sampleAndBlend\";\n    const signature =\n      ImageryPipelineStage._createSampleAndBlendFunctionSignature(imageryFlags);\n    shaderBuilder.addFunction(\n      functionId,\n      signature,\n      ShaderDestination.FRAGMENT,\n    );\n\n    shaderBuilder.addFunctionLines(functionId, [`float effectiveAlpha = 1.0;`]);\n    if (imageryFlags.alpha) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `effectiveAlpha = textureAlpha;`,\n      ]);\n    }\n    shaderBuilder.addFunctionLines(functionId, [\n      // This is the part that is documented as \"This crazy step stuff\"\n      // in GlobeFS.glsl. Using the if-approach here...\n      `if (textureCoordinates.x < textureCoordinateRectangle.x) effectiveAlpha = 0.0;`,\n      `if (textureCoordinates.x > textureCoordinateRectangle.z) effectiveAlpha = 0.0;`,\n      `if (textureCoordinates.y < textureCoordinateRectangle.y) effectiveAlpha = 0.0;`,\n      `if (textureCoordinates.y > textureCoordinateRectangle.w) effectiveAlpha = 0.0;`,\n\n      `vec2 translation = textureCoordinateTranslationAndScale.xy;`,\n      `vec2 scale = textureCoordinateTranslationAndScale.zw;`,\n      `vec2 effectiveTextureCoordinates = textureCoordinates * scale + translation;`,\n      `vec4 value = texture(textureToSample, effectiveTextureCoordinates);`,\n      `value = czm_srgbToLinear(value);`,\n\n      `vec3 color = value.rgb;`,\n      `float alpha = value.a;`,\n    ]);\n\n    if (imageryFlags.colorToAlpha) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);`,\n        `colorDiff.r = czm_maximumComponent(colorDiff);`,\n        `alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);`,\n      ]);\n    }\n\n    if (imageryFlags.gamma) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `color = pow(color, vec3(textureOneOverGamma));`,\n      ]);\n    } else {\n      shaderBuilder.addFunctionLines(functionId, [\n        `vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));`,\n        `color = tempColor.rgb;`,\n        `alpha = tempColor.a;`,\n      ]);\n    }\n\n    if (imageryFlags.brightness) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `color = mix(vec3(0.0), color, textureBrightness);`,\n      ]);\n    }\n\n    if (imageryFlags.contrast) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `color = mix(vec3(0.5), color, textureContrast);`,\n      ]);\n    }\n    if (imageryFlags.hue) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `color = czm_hue(color, textureHue);`,\n      ]);\n    }\n\n    if (imageryFlags.saturation) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `color = czm_saturation(color, textureSaturation);`,\n      ]);\n    }\n\n    shaderBuilder.addFunctionLines(functionId, [\n      `float sourceAlpha = alpha * effectiveAlpha;`,\n      `float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);`,\n      `outAlpha += sign(outAlpha) - 1.0;`,\n      `vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;`,\n      // See comments in https://github.com/CesiumGS/cesium/blob/6cc004aaff586bb59f07f199216ae511014cf5a9/packages/engine/Source/Shaders/GlobeFS.glsl#L166\n      `vec4 result = vec4(outColor, max(outAlpha, 0.0));`,\n    ]);\n\n    // Debug mode: Draw boundaries of imagery in red\n    if (debugDrawImageryBoundaries) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `if (abs(textureCoordinates.x - textureCoordinateRectangle.x) < (1.0/256.0) || `,\n        `    abs(textureCoordinates.x - textureCoordinateRectangle.z) < (1.0/256.0) || `,\n        `    abs(textureCoordinates.y - textureCoordinateRectangle.y) < (1.0/256.0) || `,\n        `    abs(textureCoordinates.y - textureCoordinateRectangle.w) < (1.0/256.0))`,\n        `{`,\n        `    result = vec4(1.0, 0.0, 0.0, effectiveAlpha);`,\n        `}`,\n      ]);\n    }\n\n    shaderBuilder.addFunctionLines(functionId, [`return result;`]);\n  }\n\n  /**\n   * Creates the arguments for a call to `sampleAndBlend` for the\n   * specified imagery.\n   *\n   * For details, see `buildSampleAndBlendFunction`\n   *\n   * @param {ImageryFlags} imageryFlags The imagery flags\n   * @param {number} imageryTexCoordAttributeSetIndex The index for the texture coordinate attribute\n   * @param {number} i The imagery index\n   * @returns {string} The string\n   */\n  static _createSampleAndBlendCallArguments(\n    imageryFlags,\n    imageryTexCoordAttributeSetIndex,\n    i,\n  ) {\n    const textureCoordinates = `v_imagery_texCoord_${imageryTexCoordAttributeSetIndex}`;\n\n    const args = [];\n    args.push(`blendedBaseColor`);\n    args.push(`u_imageryTextures[${i}]`);\n    args.push(`${textureCoordinates}`);\n    args.push(`u_imageryTextureCoordinateRectangle[${i}]`);\n    args.push(`u_imageryTextureTranslationAndScale[${i}]`);\n    if (imageryFlags.alpha) {\n      args.push(`u_imageryTextureAlpha[${i}]`);\n    }\n    if (imageryFlags.brightness) {\n      args.push(`u_imageryTextureBrightness[${i}]`);\n    }\n    if (imageryFlags.contrast) {\n      args.push(`u_imageryTextureContrast[${i}]`);\n    }\n    if (imageryFlags.hue) {\n      args.push(`u_imageryTextureHue[${i}]`);\n    }\n    if (imageryFlags.saturation) {\n      args.push(`u_imageryTextureSaturation[${i}]`);\n    }\n    if (imageryFlags.gamma) {\n      args.push(`u_imageryTextureOneOverGamma[${i}]`);\n    }\n    if (imageryFlags.colorToAlpha) {\n      args.push(`u_imageryTextureColorToAlpha[${i}]`);\n    }\n\n    const argsString = args.join(\", \");\n    return argsString;\n  }\n\n  /**\n   * Creates the main part of the imagery shader.\n   *\n   * It adds the `blendBaseColorWithImagery` function, which is to be\n   * called in the `MaterialStageFS.glsl` when the `HAS_IMAGERY`\n   * flag was set in the shader.\n   *\n   * The `blendBaseColorWithImagery` function will go through all imagery\n   * layers in the input, and call the `sampleAndBlend` function, to\n   * incorporate the imagery input in the resulting pixel.\n   *\n   * @param {ShaderBuilder} shaderBuilder The shader builder\n   * @param {ImageryInput[]} imageryInputs The imagery inputs\n   * @param {ImageryFlags} imageryFlags The imagery flags\n   */\n  static _createMainImageryShader(shaderBuilder, imageryInputs, imageryFlags) {\n    const functionId = \"blendBaseColorWithImagery\";\n    shaderBuilder.addFunction(\n      functionId,\n      `vec4 blendBaseColorWithImagery(vec4 baseColorWithAlpha)`,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [\n      `vec4 blendedBaseColor = baseColorWithAlpha;`,\n    ]);\n\n    // Roughly what was done in https://github.com/CesiumGS/cesium/blob/6cc004aaff586bb59f07f199216ae511014cf5a9/packages/engine/Source/Scene/GlobeSurfaceShaderSet.js#L394\n    for (let i = 0; i < imageryInputs.length; i++) {\n      const imageryInput = imageryInputs[i];\n      const imageryTexCoordAttributeSetIndex =\n        imageryInput.imageryTexCoordAttributeSetIndex;\n      const argsString =\n        ImageryPipelineStage._createSampleAndBlendCallArguments(\n          imageryFlags,\n          imageryTexCoordAttributeSetIndex,\n          i,\n        );\n      shaderBuilder.addFunctionLines(functionId, [\n        `blendedBaseColor = sampleAndBlend(${argsString});`,\n      ]);\n    }\n\n    shaderBuilder.addFunctionLines(functionId, [`return blendedBaseColor;`]);\n  }\n\n  /**\n   * Creates an object that contains the uniform values the given imagery inputs.\n   *\n   * The result will be a structure that contains the uniform values\n   * that match the definitions that have been created by `defineUniforms`.\n   * (It will include the ones that still have their default values\n   * and may not be needed eventually)\n   *\n   * @param {ImageryInput[]} imageryInputs The imagery inputs\n   * @returns {object} The uniforms\n   */\n  static _createImageryUniforms(imageryInputs) {\n    const length = imageryInputs.length;\n    const uniforms = {};\n    uniforms.imageryTextures = Array(length);\n    uniforms.imageryTextureCoordinateRectangle = Array(length);\n    uniforms.imageryTextureTranslationAndScale = Array(length);\n    uniforms.imageryTextureAlpha = Array(length);\n    uniforms.imageryTextureBrightness = Array(length);\n    uniforms.imageryTextureContrast = Array(length);\n    uniforms.imageryTextureHue = Array(length);\n    uniforms.imageryTextureSaturation = Array(length);\n    uniforms.imageryTextureOneOverGamma = Array(length);\n    uniforms.imageryTextureColorToAlpha = Array(length);\n\n    for (let i = 0; i < length; i++) {\n      const imageryInput = imageryInputs[i];\n\n      const imageryLayer = imageryInput.imageryLayer;\n      const texture = imageryInput.texture;\n      const textureCoordinateRectangle =\n        imageryInput.textureCoordinateRectangle;\n      const textureTranslationAndScale =\n        imageryInput.textureTranslationAndScale;\n\n      uniforms.imageryTextures[i] = texture;\n      uniforms.imageryTextureTranslationAndScale[i] =\n        textureTranslationAndScale;\n      uniforms.imageryTextureCoordinateRectangle[i] =\n        textureCoordinateRectangle;\n\n      uniforms.imageryTextureAlpha[i] = imageryLayer.alpha;\n      uniforms.imageryTextureBrightness[i] = imageryLayer.brightness;\n      uniforms.imageryTextureContrast[i] = imageryLayer.contrast;\n      uniforms.imageryTextureHue[i] = imageryLayer.hue;\n      uniforms.imageryTextureSaturation[i] = imageryLayer.saturation;\n      uniforms.imageryTextureOneOverGamma[i] = 1.0 / imageryLayer.gamma;\n\n      let colorToAlpha = uniforms.imageryTextureColorToAlpha[i];\n      if (!defined(colorToAlpha)) {\n        colorToAlpha = new Cartesian4();\n        uniforms.imageryTextureColorToAlpha[i] = colorToAlpha;\n      }\n      const hasColorToAlpha =\n        defined(imageryLayer.colorToAlpha) &&\n        imageryLayer.colorToAlphaThreshold > 0.0;\n      if (hasColorToAlpha) {\n        const color = imageryLayer.colorToAlpha;\n        colorToAlpha.x = color.red;\n        colorToAlpha.y = color.green;\n        colorToAlpha.z = color.blue;\n        colorToAlpha.w = imageryLayer.colorToAlphaThreshold;\n      } else {\n        colorToAlpha.w = -1.0;\n      }\n    }\n    return uniforms;\n  }\n\n  /**\n   * Fill the given uniform map with functions for all properties\n   * in the given uniforms object.\n   *\n   * The uniform names will be created as `u_<propertyName>`, and\n   * their value will just be a function that returns the respective\n   * property value.\n   *\n   * @param {UniformMap} uniformMap The uniform map\n   * @param {object} uniforms The uniforms\n   */\n  static _setImageryUniforms(uniformMap, uniforms) {\n    for (const key in uniforms) {\n      if (uniforms.hasOwnProperty(key)) {\n        const name = `u_${key}`;\n        uniformMap[name] = function () {\n          return uniforms[key];\n        };\n      }\n    }\n  }\n\n  /**\n   * Create the <code>ImageryInput</code> objects that have to be fed to the imagery\n   * pipeline stage for draping the given imagery layers over the primitive\n   * that is described by the given model primitive imagery.\n   *\n   * For each imagery layer that is currently visible (as of `show==true`), this\n   * will obtain the <code>ImageryCoverage</code> objects that are provided by\n   * the given model primitive imagery (and that describe the imagery tiles\n   * that are covered by the primitive), and create one <code>ImageryInput</code> for\n   * each of them.\n   *\n   * @param {ImageryLayerCollection} imageryLayers The imagery layers\n   * @param {ModelPrimitiveImagery} modelPrimitiveImagery The model primitive imagery\n   * @param {number[]} imageryTexCoordAttributeSetIndices The array that contains,\n   * for each imagery layer index, the set index of the texture coordinate\n   * attribute that should be used for this imagery. This is the value that\n   * will be used to access the texture coordinate attribute\n   * <code>a_imagery_texCoord_${imageryTexCoordAttributeSetIndex}</code>\n   * in the shader.\n   * @returns {ImageryInput[]} The imagery inputs\n   */\n  static _createImageryInputs(\n    imageryLayers,\n    modelPrimitiveImagery,\n    imageryTexCoordAttributeSetIndices,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"imageryLayers\", imageryLayers);\n    Check.defined(\"modelPrimitiveImagery\", modelPrimitiveImagery);\n    Check.defined(\n      \"imageryTexCoordAttributeSetIndices\",\n      imageryTexCoordAttributeSetIndices,\n    );\n    //>>includeEnd('debug');\n\n    const imageryInputs = [];\n\n    for (let i = 0; i < imageryLayers.length; i++) {\n      const imageryLayer = imageryLayers.get(i);\n      if (!imageryLayer.show) {\n        continue;\n      }\n      const imageryTexCoordAttributeSetIndex =\n        imageryTexCoordAttributeSetIndices[i];\n      const mappedPositions =\n        modelPrimitiveImagery.mappedPositionsForImageryLayer(imageryLayer);\n      const cartographicBoundingRectangle =\n        mappedPositions.cartographicBoundingRectangle;\n      const coverages =\n        modelPrimitiveImagery.coveragesForImageryLayer(imageryLayer);\n\n      for (let j = 0; j < coverages.length; j++) {\n        const coverage = coverages[j];\n        const imageryInput = ImageryPipelineStage._createImageryInput(\n          imageryLayer,\n          coverage,\n          cartographicBoundingRectangle,\n          imageryTexCoordAttributeSetIndex,\n        );\n        if (defined(imageryInput)) {\n          imageryInputs.push(imageryInput);\n        }\n      }\n    }\n    return imageryInputs;\n  }\n\n  /**\n   * Create the `ImageryInput` that has to be passed to the imagery pipeline\n   * stage, for the given `ImageryCoverage`.\n   *\n   * The `ImageryCoverage` describes on imagery tile that is covered by the\n   * cartographic bounding rectangle of the primitive positions. This function\n   * obtains the actual `Imagery` object and its texture, computes the\n   * required texture coordinate and scale, and assembles this information\n   * into an `ImageryInput`.\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @param {ImageryCoverage} coverage The imagery coverage\n   * @param {Rectangle} cartographicBoundingRectangle The bounding rectangle\n   * of the cartographic primitive positions\n   * @param {number} imageryTexCoordAttributeSetIndex The set index of the\n   * texture coordinate attribute that should be used for this imagery.\n   * This is the value that will be used to access the texture coordinate\n   * attribute <code>a_imagery_texCoord_${imageryTexCoordAttributeSetIndex}</code>\n   * in the shader.\n   * @returns {ImageryInput|undefined} The imagery input, or undefined if\n   * the imagery for the given coverage turned out to be in the\n   * <code>ImageryState.INVALID/FAILED<code> state, or did not have\n   * a valid texture.\n   * @private\n   */\n  static _createImageryInput(\n    imageryLayer,\n    coverage,\n    cartographicBoundingRectangle,\n    imageryTexCoordAttributeSetIndex,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"imageryLayer\", imageryLayer);\n    Check.defined(\"coverage\", coverage);\n    Check.defined(\n      \"cartographicBoundingRectangle\",\n      cartographicBoundingRectangle,\n    );\n    Check.typeOf.number.greaterThanOrEquals(\n      \"imageryTexCoordAttributeSetIndex\",\n      imageryTexCoordAttributeSetIndex,\n      0,\n    );\n    //>>includeEnd('debug');\n\n    // Bail out early if something went wrong in the imagery\n    // loading state machine\n    const imagery = coverage.imagery;\n    if (\n      imagery.state === ImageryState.FAILED ||\n      imagery.state === ImageryState.INVALID\n    ) {\n      return undefined;\n    }\n\n    // The texture coordinates are computed for the respective\n    // imagery, so pick either the textureWebMercator or the\n    // texture here\n    let texture = imagery.textureWebMercator;\n    if (!defined(texture)) {\n      texture = imagery.texture;\n      if (!defined(texture)) {\n        // Print an error message only when the imagery\n        // SHOULD actually have a texture\n        if (imagery.state === ImageryState.READY) {\n          console.log(\n            `Imagery at ${coverage.x}, ${coverage.y} (level ${coverage.level}) does not have any texture - state ${imagery.state}`,\n          );\n        }\n        return undefined;\n      }\n    }\n\n    const textureTranslationAndScale =\n      ImageryPipelineStage._computeTextureTranslationAndScale(\n        imageryLayer,\n        cartographicBoundingRectangle,\n        imagery.rectangle,\n      );\n\n    // Convert the texture coordinate rectangle into a Cartesian4\n    // for the consumption as a uniform in the shader\n    const textureCoordinateCartesianRectangle =\n      coverage.textureCoordinateRectangle;\n    const textureCoordinateRectangle = new Cartesian4(\n      textureCoordinateCartesianRectangle.minX,\n      textureCoordinateCartesianRectangle.minY,\n      textureCoordinateCartesianRectangle.maxX,\n      textureCoordinateCartesianRectangle.maxY,\n    );\n\n    const imageryInput = new ImageryInput(\n      imageryLayer,\n      texture,\n      textureTranslationAndScale,\n      textureCoordinateRectangle,\n      imageryTexCoordAttributeSetIndex,\n    );\n    return imageryInput;\n  }\n\n  /**\n   * Compute the translation and scale that has to be applied to\n   * the texture coordinates for mapping the given imagery to\n   * the geometry.\n   *\n   * The given rectangles will be converted into their \"native\" representation,\n   * using the tiling scheme of the given imagery layer, and passed\n   * to `_computeTextureTranslationAndScaleFromNative` (see that for details).\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @param {Rectangle} nonNativeBoundingRectangle The bounding\n   * rectangle of the geometry\n   * @param {Rectangle} nonNativeImageryRectangle The bounding\n   * rectangle of the imagery\n   * @returns {Cartesian4} The translation and scale\n   * @private\n   */\n  static _computeTextureTranslationAndScale(\n    imageryLayer,\n    nonNativeBoundingRectangle,\n    nonNativeImageryRectangle,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"imageryLayer\", imageryLayer);\n    Check.defined(\"nonNativeBoundingRectangle\", nonNativeBoundingRectangle);\n    Check.defined(\"nonNativeImageryRectangle\", nonNativeImageryRectangle);\n    //>>includeEnd('debug');\n\n    const tilingScheme = imageryLayer.imageryProvider.tilingScheme;\n\n    const nativeBoundingRectangle = tilingScheme.rectangleToNativeRectangle(\n      nonNativeBoundingRectangle,\n      nativeBoundingRectangleScratch,\n    );\n    const nativeImageryRectangle = tilingScheme.rectangleToNativeRectangle(\n      nonNativeImageryRectangle,\n      nativeImageryRectangleScratch,\n    );\n\n    const translationAndScale =\n      ImageryPipelineStage._computeTextureTranslationAndScaleFromNative(\n        nativeBoundingRectangle,\n        nativeImageryRectangle,\n      );\n    return translationAndScale;\n  }\n\n  /**\n   * Compute the translation and scale that has to be applied to\n   * the texture coordinates for mapping the given imagery rectangle\n   * to the geometry rectangle.\n   *\n   * This will compute a Cartesian4 containing the\n   * (offsetX, offsetY, scaleX, scaleY) that have to be applied to\n   * the texture coordinates that that have been computed with\n   * `ModelImageryMapping.createTextureCoordinatesAttributeForMappedPositions`.\n   * In the shader, this offset and scale will map the given imagery rectangle\n   * to the geometry * rectangle.\n   *\n   * @param {Imagery} imagery The imagery\n   * @param {Rectangle} nonNativeBoundingRectangle The bounding\n   * rectangle of the geometry\n   * @param {Rectangle} nonNativeImageryRectangle The bounding\n   * rectangle of the imagery\n   * @returns {Cartesian4} The translation and scale\n   * @private\n   */\n  static _computeTextureTranslationAndScaleFromNative(\n    nativeBoundingRectangle,\n    nativeImageryRectangle,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"nativeBoundingRectangle\", nativeBoundingRectangle);\n    Check.defined(\"nativeImageryRectangle\", nativeImageryRectangle);\n    //>>includeEnd('debug');\n\n    const invImageryWidth = 1.0 / nativeImageryRectangle.width;\n    const invImageryHeight = 1.0 / nativeImageryRectangle.height;\n    const deltaWest =\n      nativeBoundingRectangle.west - nativeImageryRectangle.west;\n    const deltaSouth =\n      nativeBoundingRectangle.south - nativeImageryRectangle.south;\n    const offsetX = deltaWest * invImageryWidth;\n    const offsetY = deltaSouth * invImageryHeight;\n    const scaleX = nativeBoundingRectangle.width * invImageryWidth;\n    const scaleY = nativeBoundingRectangle.height * invImageryHeight;\n    return new Cartesian4(offsetX, offsetY, scaleX, scaleY);\n  }\n\n  /**\n   * Computes the index mapping from the given source to the given target.\n   *\n   * The result will be an array that has the same length as the source,\n   * and contains the indices that the source elements have in the\n   * target array.\n   *\n   * @param {object[]} source The source array\n   * @param {object[]} target The target array\n   * @returns {number[]} The result\n   */\n  static _computeIndexMapping(source, target) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"source\", source);\n    Check.defined(\"target\", target);\n    //>>includeEnd('debug');\n\n    const result = [];\n    const length = source.length;\n    for (let i = 0; i < length; i++) {\n      const element = source[i];\n      const index = target.indexOf(element);\n      result.push(index);\n    }\n    return result;\n  }\n}\n\n// Static properties (direct initialization disallowed by eslint)\n//ImageryPipelineStage.name = \"ImageryPipelineStage\"; // Helps with debugging, if you know where to look\n\nexport default ImageryPipelineStage;\n","import addAllToArray from \"../../Core/addAllToArray.js\";\nimport AttributeCompression from \"../../Core/AttributeCompression.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport clone from \"../../Core/clone.js\";\nimport combine from \"../../Core/combine.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Quaternion from \"../../Core/Quaternion.js\";\nimport Transforms from \"../../Core/Transforms.js\";\nimport Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport InstancingStageCommon from \"../../Shaders/Model/InstancingStageCommon.js\";\nimport InstancingStageVS from \"../../Shaders/Model/InstancingStageVS.js\";\nimport LegacyInstancingStageVS from \"../../Shaders/Model/LegacyInstancingStageVS.js\";\nimport AttributeType from \"../AttributeType.js\";\nimport InstanceAttributeSemantic from \"../InstanceAttributeSemantic.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport SceneTransforms from \"../SceneTransforms.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\nconst modelViewScratch = new Matrix4();\nconst nodeTransformScratch = new Matrix4();\nconst modelView2DScratch = new Matrix4();\n\n/**\n * The instancing pipeline stage is responsible for handling GPU mesh instancing at the node\n * level.\n *\n * @namespace InstancingPipelineStage\n * @private\n */\nconst InstancingPipelineStage = {\n  name: \"InstancingPipelineStage\", // Helps with debugging\n\n  // Expose some methods for testing\n  _getInstanceTransformsAsMatrices: getInstanceTransformsAsMatrices,\n  _transformsToTypedArray: transformsToTypedArray,\n};\n\n/**\n * Process a node. This modifies the following parts of the render resources:\n * <ul>\n *  <li> creates buffers for the typed arrays of each attribute, if they do not yet exist\n *  <li> adds attribute declarations for the instancing vertex attributes in the vertex shader</li>\n *  <li> sets the instancing translation min and max to compute an accurate bounding volume</li>\n * </ul>\n *\n * If the scene is in either 2D or CV mode, this stage also:\n * <ul>\n *  <li> adds additional attributes for the transformation attributes projected to 2D\n *  <li> adds a flag to the shader to use the 2D instanced attributes\n *  <li> adds a uniform for the view model matrix in 2D\n * </ul>\n *\n * @param {NodeRenderResources} renderResources The render resources for this node.\n * @param {ModelComponents.Node} node The node.\n * @param {FrameState} frameState The frame state.\n */\nInstancingPipelineStage.process = function (renderResources, node, frameState) {\n  const instances = node.instances;\n  const count = instances.attributes[0].count;\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addDefine(\"HAS_INSTANCING\");\n  shaderBuilder.addVertexLines(InstancingStageCommon);\n\n  const model = renderResources.model;\n  const sceneGraph = model.sceneGraph;\n  const runtimeNode = renderResources.runtimeNode;\n\n  const use2D =\n    frameState.mode !== SceneMode.SCENE3D &&\n    !frameState.scene3DOnly &&\n    model._projectTo2D;\n  const keepTypedArray = model._enablePick && !frameState.context.webgl2;\n\n  const instancingVertexAttributes = [];\n\n  processTransformAttributes(\n    renderResources,\n    frameState,\n    instances,\n    instancingVertexAttributes,\n    use2D,\n    keepTypedArray,\n  );\n\n  processFeatureIdAttributes(\n    renderResources,\n    frameState,\n    instances,\n    instancingVertexAttributes,\n  );\n\n  const uniformMap = {};\n\n  if (instances.transformInWorldSpace) {\n    shaderBuilder.addDefine(\n      \"USE_LEGACY_INSTANCING\",\n      undefined,\n      ShaderDestination.VERTEX,\n    );\n    shaderBuilder.addUniform(\n      \"mat4\",\n      \"u_instance_modifiedModelView\",\n      ShaderDestination.VERTEX,\n    );\n    shaderBuilder.addUniform(\n      \"mat4\",\n      \"u_instance_nodeTransform\",\n      ShaderDestination.VERTEX,\n    );\n\n    // The i3dm format applies the instancing transforms in world space.\n    // Instancing matrices come from a vertex attribute rather than a\n    // uniform, and they are multiplied in the middle of the modelView matrix\n    // product. This means czm_modelView can't be used. Instead, we split the\n    // matrix into two parts, modifiedModelView and nodeTransform, and handle\n    // this in LegacyInstancingStageVS.glsl. Conceptually the product looks like\n    // this:\n    //\n    // modelView = u_modifiedModelView * a_instanceTransform * u_nodeTransform\n    uniformMap.u_instance_modifiedModelView = function () {\n      // Model matrix without the node hierarchy or axis correction\n      // (see u_instance_nodeTransform).\n      let modifiedModelMatrix = Matrix4.multiplyTransformation(\n        // For 3D Tiles, model.modelMatrix is the computed tile\n        // transform (which includes tileset.modelMatrix). This always applies\n        // for i3dm, since such models are always part of a tileset.\n        model.modelMatrix,\n        // For i3dm models, components.transform contains the RTC_CENTER\n        // translation.\n        sceneGraph.components.transform,\n        modelViewScratch,\n      );\n\n      if (use2D) {\n        // If projectTo2D is enabled, the 2D view matrix\n        // will be accounted for in the u_modelView2D\n        // uniform.\n        //\n        // modifiedModelView = view3D * modifiedModel\n        return Matrix4.multiplyTransformation(\n          frameState.context.uniformState.view3D,\n          modifiedModelMatrix,\n          modelViewScratch,\n        );\n      }\n\n      // For projection to 2D without projectTo2D enabled,\n      // project the model matrix to 2D.\n      if (frameState.mode !== SceneMode.SCENE3D) {\n        modifiedModelMatrix = Transforms.basisTo2D(\n          frameState.mapProjection,\n          modifiedModelMatrix,\n          modelViewScratch,\n        );\n      }\n\n      // modifiedModelView = view * modifiedModel\n      return Matrix4.multiplyTransformation(\n        frameState.context.uniformState.view,\n        modifiedModelMatrix,\n        modelViewScratch,\n      );\n    };\n\n    uniformMap.u_instance_nodeTransform = function () {\n      // nodeTransform = axisCorrection * nodeHierarchyTransform\n      return Matrix4.multiplyTransformation(\n        // glTF y-up to 3D Tiles z-up\n        sceneGraph.axisCorrectionMatrix,\n        // This transforms from the node's coordinate system to the root\n        // of the node hierarchy\n        runtimeNode.computedTransform,\n        nodeTransformScratch,\n      );\n    };\n\n    shaderBuilder.addVertexLines(LegacyInstancingStageVS);\n  } else {\n    shaderBuilder.addVertexLines(InstancingStageVS);\n  }\n\n  if (use2D) {\n    shaderBuilder.addDefine(\n      \"USE_2D_INSTANCING\",\n      undefined,\n      ShaderDestination.VERTEX,\n    );\n\n    shaderBuilder.addUniform(\"mat4\", \"u_modelView2D\", ShaderDestination.VERTEX);\n\n    const context = frameState.context;\n    const modelMatrix2D = Matrix4.fromTranslation(\n      runtimeNode.instancingReferencePoint2D,\n      new Matrix4(),\n    );\n\n    uniformMap.u_modelView2D = function () {\n      return Matrix4.multiplyTransformation(\n        context.uniformState.view,\n        modelMatrix2D,\n        modelView2DScratch,\n      );\n    };\n  }\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n\n  renderResources.instanceCount = count;\n  addAllToArray(renderResources.attributes, instancingVertexAttributes);\n};\n\nconst projectedTransformScratch = new Matrix4();\nconst projectedPositionScratch = new Cartesian3();\n\nfunction projectTransformTo2D(\n  transform,\n  modelMatrix,\n  nodeTransform,\n  frameState,\n  result,\n) {\n  let projectedTransform = Matrix4.multiplyTransformation(\n    modelMatrix,\n    transform,\n    projectedTransformScratch,\n  );\n\n  projectedTransform = Matrix4.multiplyTransformation(\n    projectedTransform,\n    nodeTransform,\n    projectedTransformScratch,\n  );\n\n  result = Transforms.basisTo2D(\n    frameState.mapProjection,\n    projectedTransform,\n    result,\n  );\n\n  return result;\n}\n\nfunction projectPositionTo2D(\n  position,\n  modelMatrix,\n  nodeTransform,\n  frameState,\n  result,\n) {\n  const translationMatrix = Matrix4.fromTranslation(\n    position,\n    projectedTransformScratch,\n  );\n\n  let projectedTransform = Matrix4.multiplyTransformation(\n    modelMatrix,\n    translationMatrix,\n    projectedTransformScratch,\n  );\n\n  projectedTransform = Matrix4.multiplyTransformation(\n    projectedTransform,\n    nodeTransform,\n    projectedTransformScratch,\n  );\n\n  const finalPosition = Matrix4.getTranslation(\n    projectedTransform,\n    projectedPositionScratch,\n  );\n\n  result = SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    finalPosition,\n    result,\n  );\n\n  return result;\n}\n\nfunction getModelMatrixAndNodeTransform(\n  renderResources,\n  modelMatrix,\n  nodeComputedTransform,\n) {\n  const model = renderResources.model;\n  const sceneGraph = model.sceneGraph;\n\n  const instances = renderResources.runtimeNode.node.instances;\n  if (instances.transformInWorldSpace) {\n    // Replicate the multiplication order in LegacyInstancingStageVS.\n    modelMatrix = Matrix4.multiplyTransformation(\n      model.modelMatrix,\n      sceneGraph.components.transform,\n      modelMatrix,\n    );\n\n    nodeComputedTransform = Matrix4.multiplyTransformation(\n      sceneGraph.axisCorrectionMatrix,\n      renderResources.runtimeNode.computedTransform,\n      nodeComputedTransform,\n    );\n  } else {\n    // The node transform should be pre-multiplied with the instancing transform.\n    modelMatrix = Matrix4.clone(sceneGraph.computedModelMatrix, modelMatrix);\n    modelMatrix = Matrix4.multiplyTransformation(\n      modelMatrix,\n      renderResources.runtimeNode.computedTransform,\n      modelMatrix,\n    );\n\n    nodeComputedTransform = Matrix4.clone(\n      Matrix4.IDENTITY,\n      nodeComputedTransform,\n    );\n  }\n}\n\nconst modelMatrixScratch = new Matrix4();\nconst nodeComputedTransformScratch = new Matrix4();\nconst transformScratch = new Matrix4();\nconst positionScratch = new Cartesian3();\n\nfunction projectTransformsTo2D(\n  transforms,\n  renderResources,\n  frameState,\n  result,\n) {\n  const modelMatrix = modelMatrixScratch;\n  const nodeComputedTransform = nodeComputedTransformScratch;\n\n  getModelMatrixAndNodeTransform(\n    renderResources,\n    modelMatrix,\n    nodeComputedTransform,\n  );\n\n  const runtimeNode = renderResources.runtimeNode;\n  const referencePoint = runtimeNode.instancingReferencePoint2D;\n\n  const count = transforms.length;\n  for (let i = 0; i < count; i++) {\n    const transform = transforms[i];\n\n    const projectedTransform = projectTransformTo2D(\n      transform,\n      modelMatrix,\n      nodeComputedTransform,\n      frameState,\n      transformScratch,\n    );\n\n    const position = Matrix4.getTranslation(\n      projectedTransform,\n      positionScratch,\n    );\n\n    const finalTranslation = Cartesian3.subtract(\n      position,\n      referencePoint,\n      position,\n    );\n\n    result[i] = Matrix4.setTranslation(\n      projectedTransform,\n      finalTranslation,\n      result[i],\n    );\n  }\n\n  return result;\n}\n\nfunction projectTranslationsTo2D(\n  translations,\n  renderResources,\n  frameState,\n  result,\n) {\n  const modelMatrix = modelMatrixScratch;\n  const nodeComputedTransform = nodeComputedTransformScratch;\n\n  getModelMatrixAndNodeTransform(\n    renderResources,\n    modelMatrix,\n    nodeComputedTransform,\n  );\n\n  const runtimeNode = renderResources.runtimeNode;\n  const referencePoint = runtimeNode.instancingReferencePoint2D;\n  const count = translations.length;\n  for (let i = 0; i < count; i++) {\n    const translation = translations[i];\n\n    const projectedPosition = projectPositionTo2D(\n      translation,\n      modelMatrix,\n      nodeComputedTransform,\n      frameState,\n      translation,\n    );\n\n    result[i] = Cartesian3.subtract(\n      projectedPosition,\n      referencePoint,\n      result[i],\n    );\n  }\n\n  return result;\n}\n\nconst scratchProjectedMin = new Cartesian3();\nconst scratchProjectedMax = new Cartesian3();\n\nfunction computeReferencePoint2D(renderResources, frameState) {\n  // Compute the reference point by averaging the instancing translation\n  // min / max values after they are projected to 2D.\n  const runtimeNode = renderResources.runtimeNode;\n  const modelMatrix = renderResources.model.sceneGraph.computedModelMatrix;\n  const transformedPositionMin = Matrix4.multiplyByPoint(\n    modelMatrix,\n    runtimeNode.instancingTranslationMin,\n    scratchProjectedMin,\n  );\n\n  const projectedMin = SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    transformedPositionMin,\n    transformedPositionMin,\n  );\n\n  const transformedPositionMax = Matrix4.multiplyByPoint(\n    modelMatrix,\n    runtimeNode.instancingTranslationMax,\n    scratchProjectedMax,\n  );\n\n  const projectedMax = SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    transformedPositionMax,\n    transformedPositionMax,\n  );\n\n  runtimeNode.instancingReferencePoint2D = Cartesian3.lerp(\n    projectedMin,\n    projectedMax,\n    0.5,\n    new Cartesian3(),\n  );\n}\n\nfunction transformsToTypedArray(transforms) {\n  const elements = 12;\n  const count = transforms.length;\n  const transformsTypedArray = new Float32Array(count * elements);\n\n  for (let i = 0; i < count; i++) {\n    const transform = transforms[i];\n    const offset = elements * i;\n\n    transformsTypedArray[offset + 0] = transform[0];\n    transformsTypedArray[offset + 1] = transform[4];\n    transformsTypedArray[offset + 2] = transform[8];\n    transformsTypedArray[offset + 3] = transform[12];\n    transformsTypedArray[offset + 4] = transform[1];\n    transformsTypedArray[offset + 5] = transform[5];\n    transformsTypedArray[offset + 6] = transform[9];\n    transformsTypedArray[offset + 7] = transform[13];\n    transformsTypedArray[offset + 8] = transform[2];\n    transformsTypedArray[offset + 9] = transform[6];\n    transformsTypedArray[offset + 10] = transform[10];\n    transformsTypedArray[offset + 11] = transform[14];\n  }\n\n  return transformsTypedArray;\n}\n\nfunction translationsToTypedArray(translations) {\n  const elements = 3;\n  const count = translations.length;\n  const transationsTypedArray = new Float32Array(count * elements);\n\n  for (let i = 0; i < count; i++) {\n    const translation = translations[i];\n    const offset = elements * i;\n\n    transationsTypedArray[offset + 0] = translation[0];\n    transationsTypedArray[offset + 1] = translation[4];\n    transationsTypedArray[offset + 2] = translation[8];\n  }\n\n  return transationsTypedArray;\n}\n\nconst translationScratch = new Cartesian3();\nconst rotationScratch = new Quaternion();\nconst scaleScratch = new Cartesian3();\n\nfunction getInstanceTransformsAsMatrices(instances, count, renderResources) {\n  const transforms = new Array(count);\n\n  const translationAttribute = ModelUtility.getAttributeBySemantic(\n    instances,\n    InstanceAttributeSemantic.TRANSLATION,\n  );\n  const rotationAttribute = ModelUtility.getAttributeBySemantic(\n    instances,\n    InstanceAttributeSemantic.ROTATION,\n  );\n  const scaleAttribute = ModelUtility.getAttributeBySemantic(\n    instances,\n    InstanceAttributeSemantic.SCALE,\n  );\n\n  const instancingTranslationMax = new Cartesian3(\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n  );\n  const instancingTranslationMin = new Cartesian3(\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n  );\n\n  const hasTranslation = defined(translationAttribute);\n  const hasRotation = defined(rotationAttribute);\n  const hasScale = defined(scaleAttribute);\n\n  // Translations get initialized to (0, 0, 0).\n  const translationTypedArray = hasTranslation\n    ? translationAttribute.typedArray\n    : new Float32Array(count * 3);\n\n  // Rotations get initialized to (0, 0, 0, 0).\n  // The w-component is set to 1 in the loop below.\n  let rotationTypedArray = hasRotation\n    ? rotationAttribute.typedArray\n    : new Float32Array(count * 4);\n\n  // The rotation attribute may be normalized\n  if (hasRotation && rotationAttribute.normalized) {\n    rotationTypedArray = AttributeCompression.dequantize(\n      rotationTypedArray,\n      rotationAttribute.componentDatatype,\n      rotationAttribute.type,\n      count,\n    );\n  }\n\n  // Scales get initialized to (1, 1, 1).\n  let scaleTypedArray;\n  if (hasScale) {\n    scaleTypedArray = scaleAttribute.typedArray;\n  } else {\n    scaleTypedArray = new Float32Array(count * 3);\n    scaleTypedArray.fill(1);\n  }\n\n  for (let i = 0; i < count; i++) {\n    const translation = new Cartesian3(\n      translationTypedArray[i * 3],\n      translationTypedArray[i * 3 + 1],\n      translationTypedArray[i * 3 + 2],\n      translationScratch,\n    );\n\n    Cartesian3.maximumByComponent(\n      instancingTranslationMax,\n      translation,\n      instancingTranslationMax,\n    );\n    Cartesian3.minimumByComponent(\n      instancingTranslationMin,\n      translation,\n      instancingTranslationMin,\n    );\n\n    const rotation = new Quaternion(\n      rotationTypedArray[i * 4],\n      rotationTypedArray[i * 4 + 1],\n      rotationTypedArray[i * 4 + 2],\n      hasRotation ? rotationTypedArray[i * 4 + 3] : 1,\n      rotationScratch,\n    );\n\n    const scale = new Cartesian3(\n      scaleTypedArray[i * 3],\n      scaleTypedArray[i * 3 + 1],\n      scaleTypedArray[i * 3 + 2],\n      scaleScratch,\n    );\n\n    const transform = Matrix4.fromTranslationQuaternionRotationScale(\n      translation,\n      rotation,\n      scale,\n      new Matrix4(),\n    );\n\n    transforms[i] = transform;\n  }\n\n  const runtimeNode = renderResources.runtimeNode;\n  runtimeNode.instancingTranslationMin = instancingTranslationMin;\n  runtimeNode.instancingTranslationMax = instancingTranslationMax;\n\n  // Unload the typed arrays. These are just pointers to the arrays\n  // in the vertex buffer loader.\n  if (hasTranslation) {\n    translationAttribute.typedArray = undefined;\n  }\n  if (hasRotation) {\n    rotationAttribute.typedArray = undefined;\n  }\n  if (hasScale) {\n    scaleAttribute.typedArray = undefined;\n  }\n\n  return transforms;\n}\n\nfunction getInstanceTranslationsAsCartesian3s(\n  translationAttribute,\n  count,\n  renderResources,\n) {\n  const instancingTranslations = new Array(count);\n  const translationTypedArray = translationAttribute.typedArray;\n\n  const instancingTranslationMin = new Cartesian3(\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n  );\n  const instancingTranslationMax = new Cartesian3(\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n  );\n\n  for (let i = 0; i < count; i++) {\n    const translation = new Cartesian3(\n      translationTypedArray[i * 3],\n      translationTypedArray[i * 3 + 1],\n      translationTypedArray[i * 3 + 2],\n    );\n\n    instancingTranslations[i] = translation;\n\n    Cartesian3.minimumByComponent(\n      instancingTranslationMin,\n      translation,\n      instancingTranslationMin,\n    );\n    Cartesian3.maximumByComponent(\n      instancingTranslationMax,\n      translation,\n      instancingTranslationMax,\n    );\n  }\n\n  const runtimeNode = renderResources.runtimeNode;\n  runtimeNode.instancingTranslationMin = instancingTranslationMin;\n  runtimeNode.instancingTranslationMax = instancingTranslationMax;\n\n  // Unload the typed array. This is just a pointer to the array\n  // in the vertex buffer loader.\n  translationAttribute.typedArray = undefined;\n\n  return instancingTranslations;\n}\n\nfunction createVertexBuffer(typedArray, frameState) {\n  const buffer = Buffer.createVertexBuffer({\n    context: frameState.context,\n    typedArray: typedArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n\n  // Destruction of resources allocated by the Model\n  // is handled by Model.destroy().\n  buffer.vertexArrayDestroyable = false;\n\n  return buffer;\n}\n\nfunction processTransformAttributes(\n  renderResources,\n  frameState,\n  instances,\n  instancingVertexAttributes,\n  use2D,\n  keepTypedArray,\n) {\n  const rotationAttribute = ModelUtility.getAttributeBySemantic(\n    instances,\n    InstanceAttributeSemantic.ROTATION,\n  );\n\n  // Only use matrices for the transforms if the rotation attribute is defined.\n  if (defined(rotationAttribute)) {\n    processTransformMatrixAttributes(\n      renderResources,\n      instances,\n      instancingVertexAttributes,\n      frameState,\n      use2D,\n      keepTypedArray,\n    );\n  } else {\n    processTransformVec3Attributes(\n      renderResources,\n      instances,\n      instancingVertexAttributes,\n      frameState,\n      use2D,\n    );\n  }\n}\n\nfunction processTransformMatrixAttributes(\n  renderResources,\n  instances,\n  instancingVertexAttributes,\n  frameState,\n  use2D,\n  keepTypedArray,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const count = instances.attributes[0].count;\n\n  const model = renderResources.model;\n  const runtimeNode = renderResources.runtimeNode;\n\n  shaderBuilder.addDefine(\"HAS_INSTANCE_MATRICES\");\n  const attributeString = \"Transform\";\n\n  let transforms;\n  let buffer = runtimeNode.instancingTransformsBuffer;\n  if (!defined(buffer)) {\n    // This function computes the transforms, sets the translation min / max,\n    // and unloads the typed arrays associated with the attributes.\n    transforms = getInstanceTransformsAsMatrices(\n      instances,\n      count,\n      renderResources,\n    );\n\n    const transformsTypedArray = transformsToTypedArray(transforms);\n    buffer = createVertexBuffer(transformsTypedArray, frameState);\n    model._modelResources.push(buffer);\n\n    if (keepTypedArray) {\n      runtimeNode.transformsTypedArray = transformsTypedArray;\n    }\n\n    runtimeNode.instancingTransformsBuffer = buffer;\n  }\n\n  processMatrixAttributes(\n    renderResources,\n    buffer,\n    instancingVertexAttributes,\n    attributeString,\n  );\n\n  if (!use2D) {\n    return;\n  }\n\n  // Force the scene mode to be CV. In 2D, projected positions will have\n  // an x-coordinate of 0, which eliminates the height data that is\n  // necessary for rendering in CV mode.\n  const frameStateCV = clone(frameState);\n  frameStateCV.mode = SceneMode.COLUMBUS_VIEW;\n\n  // To prevent jitter, the positions are defined relative to a common\n  // reference point. For convenience, this is the center of the instanced\n  // translation bounds projected to 2D.\n  computeReferencePoint2D(renderResources, frameStateCV);\n\n  let buffer2D = runtimeNode.instancingTransformsBuffer2D;\n  if (!defined(buffer2D)) {\n    const projectedTransforms = projectTransformsTo2D(\n      transforms,\n      renderResources,\n      frameStateCV,\n      transforms,\n    );\n    const projectedTypedArray = transformsToTypedArray(projectedTransforms);\n\n    // This memory is counted during the statistics stage at the end\n    // of the pipeline.\n    buffer2D = createVertexBuffer(projectedTypedArray, frameState);\n    model._modelResources.push(buffer2D);\n\n    runtimeNode.instancingTransformsBuffer2D = buffer2D;\n  }\n\n  const attributeString2D = \"Transform2D\";\n  processMatrixAttributes(\n    renderResources,\n    buffer2D,\n    instancingVertexAttributes,\n    attributeString2D,\n  );\n}\n\nfunction processTransformVec3Attributes(\n  renderResources,\n  instances,\n  instancingVertexAttributes,\n  frameState,\n  use2D,\n  keepTypedArray,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const runtimeNode = renderResources.runtimeNode;\n  const translationAttribute = ModelUtility.getAttributeBySemantic(\n    instances,\n    InstanceAttributeSemantic.TRANSLATION,\n  );\n  const scaleAttribute = ModelUtility.getAttributeBySemantic(\n    instances,\n    InstanceAttributeSemantic.SCALE,\n  );\n\n  if (defined(scaleAttribute)) {\n    shaderBuilder.addDefine(\"HAS_INSTANCE_SCALE\");\n    const attributeString = \"Scale\";\n\n    // Instanced scale attributes are loaded as buffers only.\n    processVec3Attribute(\n      renderResources,\n      scaleAttribute.buffer,\n      scaleAttribute.byteOffset,\n      scaleAttribute.byteStride,\n      instancingVertexAttributes,\n      attributeString,\n    );\n  }\n\n  if (!defined(translationAttribute)) {\n    return;\n  }\n\n  let instancingTranslations;\n  const typedArray = translationAttribute.typedArray;\n  if (defined(typedArray)) {\n    // This function computes and set the translation min / max, and unloads\n    // the typed array associated with the attribute.\n    // The translations are also returned in case they're used for 2D projection.\n    instancingTranslations = getInstanceTranslationsAsCartesian3s(\n      translationAttribute,\n      translationAttribute.count,\n      renderResources,\n    );\n  } else if (!defined(runtimeNode.instancingTranslationMin)) {\n    runtimeNode.instancingTranslationMin = translationAttribute.min;\n    runtimeNode.instancingTranslationMax = translationAttribute.max;\n  }\n\n  shaderBuilder.addDefine(\"HAS_INSTANCE_TRANSLATION\");\n  const attributeString = \"Translation\";\n\n  processVec3Attribute(\n    renderResources,\n    translationAttribute.buffer,\n    translationAttribute.byteOffset,\n    translationAttribute.byteStride,\n    instancingVertexAttributes,\n    attributeString,\n  );\n\n  if (!use2D && !keepTypedArray) {\n    return;\n  }\n\n  // Force the scene mode to be CV. In 2D, projected positions will have\n  // an x-coordinate of 0, which eliminates the height data that is\n  // necessary for rendering in CV mode.\n  const frameStateCV = clone(frameState);\n  frameStateCV.mode = SceneMode.COLUMBUS_VIEW;\n\n  // To prevent jitter, the positions are defined relative to a common\n  // reference point. For convenience, this is the center of the instanced\n  // translation bounds projected to 2D.\n  computeReferencePoint2D(renderResources, frameStateCV);\n\n  let buffer2D = runtimeNode.instancingTranslationBuffer2D;\n\n  if (!defined(buffer2D)) {\n    const projectedTranslations = projectTranslationsTo2D(\n      instancingTranslations,\n      renderResources,\n      frameStateCV,\n      instancingTranslations,\n    );\n    const projectedTypedArray = translationsToTypedArray(projectedTranslations);\n\n    if (keepTypedArray) {\n      runtimeNode.transformsTypedArray = projectedTypedArray;\n    }\n\n    // This memory is counted during the statistics stage at the end\n    // of the pipeline.\n    buffer2D = createVertexBuffer(projectedTypedArray, frameState);\n    renderResources.model._modelResources.push(buffer2D);\n\n    runtimeNode.instancingTranslationBuffer2D = buffer2D;\n  }\n\n  if (!use2D) {\n    return;\n  }\n\n  const byteOffset = 0;\n  const byteStride = undefined;\n\n  const attributeString2D = \"Translation2D\";\n  processVec3Attribute(\n    renderResources,\n    buffer2D,\n    byteOffset,\n    byteStride,\n    instancingVertexAttributes,\n    attributeString2D,\n  );\n}\n\nfunction processMatrixAttributes(\n  renderResources,\n  buffer,\n  instancingVertexAttributes,\n  attributeString,\n) {\n  const vertexSizeInFloats = 12;\n  const componentByteSize = ComponentDatatype.getSizeInBytes(\n    ComponentDatatype.FLOAT,\n  );\n  const strideInBytes = componentByteSize * vertexSizeInFloats;\n\n  const matrixAttributes = [\n    {\n      index: renderResources.attributeIndex++,\n      vertexBuffer: buffer,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n      offsetInBytes: 0,\n      strideInBytes: strideInBytes,\n      instanceDivisor: 1,\n    },\n    {\n      index: renderResources.attributeIndex++,\n      vertexBuffer: buffer,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n      offsetInBytes: componentByteSize * 4,\n      strideInBytes: strideInBytes,\n      instanceDivisor: 1,\n    },\n    {\n      index: renderResources.attributeIndex++,\n      vertexBuffer: buffer,\n      componentsPerAttribute: 4,\n      componentDatatype: ComponentDatatype.FLOAT,\n      normalize: false,\n      offsetInBytes: componentByteSize * 8,\n      strideInBytes: strideInBytes,\n      instanceDivisor: 1,\n    },\n  ];\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addAttribute(\"vec4\", `a_instancing${attributeString}Row0`);\n  shaderBuilder.addAttribute(\"vec4\", `a_instancing${attributeString}Row1`);\n  shaderBuilder.addAttribute(\"vec4\", `a_instancing${attributeString}Row2`);\n\n  addAllToArray(instancingVertexAttributes, matrixAttributes);\n}\n\nfunction processVec3Attribute(\n  renderResources,\n  buffer,\n  byteOffset,\n  byteStride,\n  instancingVertexAttributes,\n  attributeString,\n) {\n  instancingVertexAttributes.push({\n    index: renderResources.attributeIndex++,\n    vertexBuffer: buffer,\n    componentsPerAttribute: 3,\n    componentDatatype: ComponentDatatype.FLOAT,\n    normalize: false,\n    offsetInBytes: byteOffset,\n    strideInBytes: byteStride,\n    instanceDivisor: 1,\n  });\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addAttribute(\"vec3\", `a_instance${attributeString}`);\n}\n\nfunction processFeatureIdAttributes(\n  renderResources,\n  frameState,\n  instances,\n  instancingVertexAttributes,\n) {\n  const attributes = instances.attributes;\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  for (let i = 0; i < attributes.length; i++) {\n    const attribute = attributes[i];\n    if (attribute.semantic !== InstanceAttributeSemantic.FEATURE_ID) {\n      continue;\n    }\n\n    if (\n      attribute.setIndex >= renderResources.featureIdVertexAttributeSetIndex\n    ) {\n      renderResources.featureIdVertexAttributeSetIndex = attribute.setIndex + 1;\n    }\n\n    instancingVertexAttributes.push({\n      index: renderResources.attributeIndex++,\n      vertexBuffer: attribute.buffer,\n      componentsPerAttribute: AttributeType.getNumberOfComponents(\n        attribute.type,\n      ),\n      componentDatatype: attribute.componentDatatype,\n      normalize: false,\n      offsetInBytes: attribute.byteOffset,\n      strideInBytes: attribute.byteStride,\n      instanceDivisor: 1,\n    });\n\n    shaderBuilder.addAttribute(\n      \"float\",\n      `a_instanceFeatureId_${attribute.setIndex}`,\n    );\n  }\n}\n\nexport default InstancingPipelineStage;\n","/**\n * The lighting model to use for lighting a {@link Model}.\n *\n * @enum {number}\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst LightingModel = {\n  /**\n   * Use unlit shading, i.e. skip lighting calculations. The model's\n   * diffuse color (assumed to be linear RGB, not sRGB) is used directly\n   * when computing <code>out_FragColor</code>. The alpha mode is still\n   * applied.\n   *\n   * @type {number}\n   * @constant\n   */\n  UNLIT: 0,\n  /**\n   * Use physically-based rendering lighting calculations. This includes\n   * both PBR metallic roughness and PBR specular glossiness. Image-based\n   * lighting is also applied when possible.\n   *\n   * @type {number}\n   * @constant\n   */\n  PBR: 1,\n};\n\nexport default Object.freeze(LightingModel);\n","import defined from \"../../Core/defined.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport LightingStageFS from \"../../Shaders/Model/LightingStageFS.js\";\nimport LightingModel from \"./LightingModel.js\";\n\n/**\n * The lighting pipeline stage is responsible for taking a material and rendering\n * it with a lighting model such as physically based rendering (PBR) or unlit\n * shading\n *\n * @namespace LightingPipelineStage\n *\n * @private\n */\nconst LightingPipelineStage = {\n  name: \"LightingPipelineStage\", // Helps with debugging\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render\n * resources:\n * <ul>\n *   <li>modifies the shader to include the lighting stage</li>\n * </ul>\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n *\n * @private\n */\nLightingPipelineStage.process = function (renderResources, primitive) {\n  const { model, lightingOptions, shaderBuilder } = renderResources;\n\n  if (defined(model.lightColor)) {\n    shaderBuilder.addDefine(\n      \"USE_CUSTOM_LIGHT_COLOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n\n    shaderBuilder.addUniform(\n      \"vec3\",\n      \"model_lightColorHdr\",\n      ShaderDestination.FRAGMENT,\n    );\n\n    const uniformMap = renderResources.uniformMap;\n    uniformMap.model_lightColorHdr = function () {\n      return model.lightColor;\n    };\n  }\n\n  // The lighting model is always set by the material. However, custom shaders\n  // can override this.\n  const { lightingModel } = lightingOptions;\n\n  if (lightingModel === LightingModel.PBR) {\n    shaderBuilder.addDefine(\n      \"LIGHTING_PBR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  } else {\n    shaderBuilder.addDefine(\n      \"LIGHTING_UNLIT\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  shaderBuilder.addFragmentLines(LightingStageFS);\n};\n\nexport default LightingPipelineStage;\n","import Check from \"../../Core/Check.js\";\n\n/**\n * A collection of cartographic positions (and their bounding rectangle) that\n * have been computed from cartesian positions, for a specific ellipsoid.\n *\n * This is used in the <code>ModelPrimitiveImagery</code> class, and stores\n * the positions of the primitive, mapped to an ellipsoid that was used\n * on one of the imagery layers. This avoids recomputing the transform\n * of the primitive POSITION attribute values into ECEF, and the subsequent\n * conversion of these positions into cartographic positions.\n *\n * @private\n */\nclass MappedPositions {\n  /**\n   * Creates a new instance\n   *\n   * @param {Iterable<Cartographic>} cartographicPositions The positions\n   * @param {number} numPositions The number of positions\n   * @param {Rectangle} cartographicBoundingRectangle The bounding\n   * rectangle of the positions\n   * @param {Ellipsoid} ellipsoid The ellipsoid\n   */\n  constructor(\n    cartographicPositions,\n    numPositions,\n    cartographicBoundingRectangle,\n    ellipsoid,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"cartographicPositions\", cartographicPositions);\n    Check.typeOf.number.greaterThanOrEquals(\"numPositions\", numPositions, 0);\n    Check.defined(\n      \"cartographicBoundingRectangle\",\n      cartographicBoundingRectangle,\n    );\n    Check.defined(\"ellipsoid\", ellipsoid);\n    //>>includeEnd('debug');\n\n    this._cartographicPositions = cartographicPositions;\n    this._numPositions = numPositions;\n    this._cartographicBoundingRectangle = cartographicBoundingRectangle;\n    this._ellipsoid = ellipsoid;\n  }\n\n  /**\n   * Returns the cartographic positions\n   *\n   * @returns {Iterable<Cartographic>} The positions\n   */\n  get cartographicPositions() {\n    return this._cartographicPositions;\n  }\n\n  /**\n   * Returns the number of positions\n   *\n   * @returns {number} The number of positions\n   */\n  get numPositions() {\n    return this._numPositions;\n  }\n\n  /**\n   * Returns the cartographic bounding rectangle\n   *\n   * @returns {Rectangle} The rectangle\n   */\n  get cartographicBoundingRectangle() {\n    return this._cartographicBoundingRectangle;\n  }\n\n  /**\n   * Returns the ellipsoid for which these positions have been created\n   *\n   * @returns {Ellipsoid} The ellipsoid\n   */\n  get ellipsoid() {\n    return this._ellipsoid;\n  }\n}\n\nexport default MappedPositions;\n","import defined from \"../../Core/defined.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cartesian4 from \"../../Core/Cartesian4.js\";\nimport Matrix3 from \"../../Core/Matrix3.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport MaterialStageFS from \"../../Shaders/Model/MaterialStageFS.js\";\nimport AlphaMode from \"../AlphaMode.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport LightingModel from \"./LightingModel.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\nconst { Material, MetallicRoughness, SpecularGlossiness, Specular, Clearcoat } =\n  ModelComponents;\n\n/**\n * The material pipeline stage processes textures and other uniforms needed\n * to render a primitive. This handles the following material types:\n * <ul>\n *   <li>Basic glTF materials (PBR metallic roughness model)</li>\n *   <li>The `KHR_materials_specular` glTF extension</li>\n *   <li>The `KHR_materials_pbrSpecularGlossiness` glTF extension</li>\n *   <li>The `KHR_materials_unlit` glTF extension</li>\n * </ul>\n *\n * @namespace MaterialPipelineStage\n *\n * @private\n */\nconst MaterialPipelineStage = {\n  name: \"MaterialPipelineStage\", // Helps with debugging\n\n  // Expose some methods for testing\n  _processTexture: processTexture,\n  _processTextureTransform: processTextureTransform,\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render\n * resources:\n * <ul>\n *   <li>Modifies the shader to include the material processing stage</li>\n *   <li>Modifies the shader to include additional uniforms for textures and other rendering details</li>\n *   <li>Modifies the lighting options to set either PBR or unlit lighting</li>\n *   <li>Sets the render state for back-face culling</li>\n * </ul>\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {FrameState} frameState The frame state.\n * @private\n */\nMaterialPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  // gltf-pipeline automatically creates a default material so this will always\n  // be defined.\n  const material = primitive.material;\n  const { model, uniformMap, shaderBuilder } = renderResources;\n\n  // Classification models only use position and feature ID attributes,\n  // so textures should be disabled to avoid compile errors.\n  const hasClassification = defined(model.classificationType);\n  const disableTextures = hasClassification;\n\n  // When textures are loaded incrementally, fall back to a default 1x1 texture\n  const { defaultTexture, defaultNormalTexture, defaultEmissiveTexture } =\n    frameState.context;\n\n  processMaterialUniforms(\n    material,\n    uniformMap,\n    shaderBuilder,\n    defaultTexture,\n    defaultNormalTexture,\n    defaultEmissiveTexture,\n    disableTextures,\n  );\n\n  if (defined(material.specularGlossiness)) {\n    processSpecularGlossinessUniforms(\n      material.specularGlossiness,\n      uniformMap,\n      shaderBuilder,\n      defaultTexture,\n      disableTextures,\n    );\n  } else {\n    if (\n      defined(material.specular) &&\n      ModelUtility.supportedExtensions.KHR_materials_specular\n    ) {\n      processSpecularUniforms(\n        material.specular,\n        uniformMap,\n        shaderBuilder,\n        defaultTexture,\n        disableTextures,\n      );\n    }\n    if (\n      defined(material.anisotropy) &&\n      ModelUtility.supportedExtensions.KHR_materials_anisotropy\n    ) {\n      processAnisotropyUniforms(\n        material.anisotropy,\n        uniformMap,\n        shaderBuilder,\n        defaultTexture,\n        disableTextures,\n      );\n    }\n    if (\n      defined(material.clearcoat) &&\n      ModelUtility.supportedExtensions.KHR_materials_clearcoat\n    ) {\n      processClearcoatUniforms(\n        material.clearcoat,\n        uniformMap,\n        shaderBuilder,\n        defaultTexture,\n        disableTextures,\n      );\n    }\n    processMetallicRoughnessUniforms(\n      material.metallicRoughness,\n      uniformMap,\n      shaderBuilder,\n      defaultTexture,\n      disableTextures,\n    );\n  }\n\n  // If the primitive does not have normals, fall back to unlit lighting.\n  const hasNormals = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.NORMAL,\n  );\n\n  // Disable PointCloud normals if the user explicitly turned them off.\n  const disablePointCloudNormals =\n    defined(model.pointCloudShading) && !model.pointCloudShading.normalShading;\n\n  // Classification models will be rendered as unlit.\n  const lightingOptions = renderResources.lightingOptions;\n  if (\n    material.unlit ||\n    !hasNormals ||\n    hasClassification ||\n    disablePointCloudNormals\n  ) {\n    lightingOptions.lightingModel = LightingModel.UNLIT;\n  } else {\n    lightingOptions.lightingModel = LightingModel.PBR;\n  }\n\n  // Configure back-face culling\n  const cull = model.backFaceCulling && !material.doubleSided;\n  renderResources.renderStateOptions.cull.enabled = cull;\n\n  const alphaOptions = renderResources.alphaOptions;\n  if (material.alphaMode === AlphaMode.BLEND) {\n    alphaOptions.pass = Pass.TRANSLUCENT;\n  } else if (material.alphaMode === AlphaMode.MASK) {\n    alphaOptions.alphaCutoff = material.alphaCutoff;\n  }\n\n  // Configure and handle point diameter for POINTS primitives (BENTLEY_materials_point_style extension).\n  if (defined(material.pointDiameter)) {\n    shaderBuilder.addDefine(\n      \"HAS_POINT_DIAMETER\",\n      undefined,\n      ShaderDestination.BOTH,\n    );\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_pointDiameter\",\n      ShaderDestination.VERTEX,\n    );\n    uniformMap.u_pointDiameter = function () {\n      return material.pointDiameter * frameState.pixelRatio;\n    };\n  }\n\n  shaderBuilder.addFragmentLines(MaterialStageFS);\n\n  if (material.doubleSided) {\n    shaderBuilder.addDefine(\n      \"HAS_DOUBLE_SIDED_MATERIAL\",\n      undefined,\n      ShaderDestination.BOTH,\n    );\n  }\n};\n\n/**\n * Process a single texture transformation and add it to the shader and uniform map.\n *\n * @param {ShaderBuilder} shaderBuilder The shader builder to modify\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ModelComponents.TextureReader} textureReader The texture to add to the shader\n * @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>\n * @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, \"BASE_COLOR\" or \"EMISSIVE\"\n *\n * @private\n */\nfunction processTextureTransform(\n  shaderBuilder,\n  uniformMap,\n  textureReader,\n  uniformName,\n  defineName,\n) {\n  // Add a define to enable the texture transformation code in the shader.\n  const transformDefine = `HAS_${defineName}_TEXTURE_TRANSFORM`;\n  shaderBuilder.addDefine(\n    transformDefine,\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // Add a uniform for the transformation matrix\n  const transformUniformName = `${uniformName}Transform`;\n  shaderBuilder.addUniform(\n    \"mat3\",\n    transformUniformName,\n    ShaderDestination.FRAGMENT,\n  );\n  uniformMap[transformUniformName] = function () {\n    return textureReader.transform;\n  };\n}\n\n/**\n * Process a single texture scale and add it to the shader and uniform map.\n *\n * @param {ShaderBuilder} shaderBuilder The shader builder to modify\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ModelComponents.TextureReader} textureReader The texture to add to the shader\n * @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>\n * @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, \"BASE_COLOR\" or \"EMISSIVE\"\n *\n * @private\n */\nfunction processTextureScale(\n  shaderBuilder,\n  uniformMap,\n  textureReader,\n  uniformName,\n  defineName,\n) {\n  // Add a define to enable the texture transformation code in the shader.\n  const transformDefine = `HAS_${defineName}_TEXTURE_SCALE`;\n  shaderBuilder.addDefine(\n    transformDefine,\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // Add a uniform for the transformation matrix\n  const scaleUniformName = `${uniformName}Scale`;\n  shaderBuilder.addUniform(\n    \"float\",\n    scaleUniformName,\n    ShaderDestination.FRAGMENT,\n  );\n  uniformMap[scaleUniformName] = function () {\n    return textureReader.scale;\n  };\n}\n\n/**\n * Process a single texture and add it to the shader and uniform map.\n *\n * @param {ShaderBuilder} shaderBuilder The shader builder to modify\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ModelComponents.TextureReader} textureReader The texture to add to the shader\n * @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>\n * @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, \"BASE_COLOR\" or \"EMISSIVE\"\n *\n * @private\n */\nfunction processTexture(\n  shaderBuilder,\n  uniformMap,\n  textureReader,\n  uniformName,\n  defineName,\n  defaultTexture,\n) {\n  // Add a uniform for the texture itself\n  shaderBuilder.addUniform(\n    \"sampler2D\",\n    uniformName,\n    ShaderDestination.FRAGMENT,\n  );\n  uniformMap[uniformName] = function () {\n    return textureReader.texture ?? defaultTexture;\n  };\n\n  // Add a #define directive to enable using the texture in the shader\n  const textureDefine = `HAS_${defineName}_TEXTURE`;\n  shaderBuilder.addDefine(textureDefine, undefined, ShaderDestination.FRAGMENT);\n\n  // Add a #define to tell the shader which texture coordinates varying to use.\n  const texCoordIndex = textureReader.texCoord;\n  const texCoordVarying = `v_texCoord_${texCoordIndex}`;\n  const texCoordDefine = `TEXCOORD_${defineName}`;\n  shaderBuilder.addDefine(\n    texCoordDefine,\n    texCoordVarying,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // Some textures have matrix transforms (e.g. for texture atlases). Add those\n  // to the shader if present.\n  const textureTransform = textureReader.transform;\n  if (\n    defined(textureTransform) &&\n    !Matrix3.equals(textureTransform, Matrix3.IDENTITY)\n  ) {\n    processTextureTransform(\n      shaderBuilder,\n      uniformMap,\n      textureReader,\n      uniformName,\n      defineName,\n    );\n  }\n\n  const { scale } = textureReader;\n  if (defined(scale) && scale !== 1.0) {\n    processTextureScale(\n      shaderBuilder,\n      uniformMap,\n      textureReader,\n      uniformName,\n      defineName,\n    );\n  }\n}\n\nfunction processMaterialUniforms(\n  material,\n  uniformMap,\n  shaderBuilder,\n  defaultTexture,\n  defaultNormalTexture,\n  defaultEmissiveTexture,\n  disableTextures,\n) {\n  const { emissiveFactor, emissiveTexture, normalTexture, occlusionTexture } =\n    material;\n\n  if (\n    defined(emissiveFactor) &&\n    !Cartesian3.equals(emissiveFactor, Material.DEFAULT_EMISSIVE_FACTOR)\n  ) {\n    shaderBuilder.addUniform(\n      \"vec3\",\n      \"u_emissiveFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_emissiveFactor = function () {\n      return material.emissiveFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_EMISSIVE_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n\n    if (defined(emissiveTexture) && !disableTextures) {\n      processTexture(\n        shaderBuilder,\n        uniformMap,\n        emissiveTexture,\n        \"u_emissiveTexture\",\n        \"EMISSIVE\",\n        defaultEmissiveTexture,\n      );\n    }\n  }\n\n  if (defined(normalTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      normalTexture,\n      \"u_normalTexture\",\n      \"NORMAL\",\n      defaultNormalTexture,\n    );\n  }\n\n  if (defined(occlusionTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      occlusionTexture,\n      \"u_occlusionTexture\",\n      \"OCCLUSION\",\n      defaultTexture,\n    );\n  }\n}\n\n/**\n * Add uniforms and defines for the KHR_materials_pbrSpecularGlossiness extension\n *\n * @param {ModelComponents.SpecularGlossiness} specularGlossiness\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ShaderBuilder} shaderBuilder\n * @param {Texture} defaultTexture\n * @param {boolean} disableTextures\n * @private\n */\nfunction processSpecularGlossinessUniforms(\n  specularGlossiness,\n  uniformMap,\n  shaderBuilder,\n  defaultTexture,\n  disableTextures,\n) {\n  const {\n    diffuseTexture,\n    diffuseFactor,\n    specularGlossinessTexture,\n    specularFactor,\n    glossinessFactor,\n  } = specularGlossiness;\n\n  shaderBuilder.addDefine(\n    \"USE_SPECULAR_GLOSSINESS\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  if (defined(diffuseTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      diffuseTexture,\n      \"u_diffuseTexture\",\n      \"DIFFUSE\",\n      defaultTexture,\n    );\n  }\n\n  if (\n    defined(diffuseFactor) &&\n    !Cartesian4.equals(diffuseFactor, SpecularGlossiness.DEFAULT_DIFFUSE_FACTOR)\n  ) {\n    shaderBuilder.addUniform(\n      \"vec4\",\n      \"u_diffuseFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_diffuseFactor = function () {\n      return specularGlossiness.diffuseFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_DIFFUSE_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  if (defined(specularGlossinessTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      specularGlossinessTexture,\n      \"u_specularGlossinessTexture\",\n      \"SPECULAR_GLOSSINESS\",\n      defaultTexture,\n    );\n  }\n\n  if (\n    defined(specularFactor) &&\n    !Cartesian3.equals(\n      specularFactor,\n      SpecularGlossiness.DEFAULT_SPECULAR_FACTOR,\n    )\n  ) {\n    shaderBuilder.addUniform(\n      \"vec3\",\n      \"u_legacySpecularFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_legacySpecularFactor = function () {\n      return specularGlossiness.specularFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_LEGACY_SPECULAR_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  if (\n    defined(glossinessFactor) &&\n    glossinessFactor !== SpecularGlossiness.DEFAULT_GLOSSINESS_FACTOR\n  ) {\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_glossinessFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_glossinessFactor = function () {\n      return specularGlossiness.glossinessFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_GLOSSINESS_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n}\n\n/**\n * Add uniforms and defines for the KHR_materials_specular extension\n *\n * @param {ModelComponents.Specular} specular\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ShaderBuilder} shaderBuilder\n * @param {Texture} defaultTexture\n * @param {boolean} disableTextures\n * @private\n */\nfunction processSpecularUniforms(\n  specular,\n  uniformMap,\n  shaderBuilder,\n  defaultTexture,\n  disableTextures,\n) {\n  const {\n    specularTexture,\n    specularFactor,\n    specularColorTexture,\n    specularColorFactor,\n  } = specular;\n\n  shaderBuilder.addDefine(\n    \"USE_SPECULAR\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  if (defined(specularTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      specularTexture,\n      \"u_specularTexture\",\n      \"SPECULAR\",\n      defaultTexture,\n    );\n  }\n\n  if (\n    defined(specularFactor) &&\n    specularFactor !== Specular.DEFAULT_SPECULAR_FACTOR\n  ) {\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_specularFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_specularFactor = function () {\n      return specular.specularFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_SPECULAR_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  if (defined(specularColorTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      specularColorTexture,\n      \"u_specularColorTexture\",\n      \"SPECULAR_COLOR\",\n      defaultTexture,\n    );\n  }\n\n  if (\n    defined(specularColorFactor) &&\n    !Cartesian3.equals(\n      specularColorFactor,\n      Specular.DEFAULT_SPECULAR_COLOR_FACTOR,\n    )\n  ) {\n    shaderBuilder.addUniform(\n      \"vec3\",\n      \"u_specularColorFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_specularColorFactor = function () {\n      return specular.specularColorFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_SPECULAR_COLOR_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n}\n\nconst scratchAnisotropy = new Cartesian3();\n\n/**\n * Add uniforms and defines for the KHR_materials_anisotropy extension\n *\n * @param {ModelComponents.Anisotropy} anisotropy\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ShaderBuilder} shaderBuilder\n * @param {Texture} defaultTexture\n * @param {boolean} disableTextures\n * @private\n */\nfunction processAnisotropyUniforms(\n  anisotropy,\n  uniformMap,\n  shaderBuilder,\n  defaultTexture,\n  disableTextures,\n) {\n  const { anisotropyStrength, anisotropyRotation, anisotropyTexture } =\n    anisotropy;\n\n  shaderBuilder.addDefine(\n    \"USE_ANISOTROPY\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  if (defined(anisotropyTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      anisotropyTexture,\n      \"u_anisotropyTexture\",\n      \"ANISOTROPY\",\n      defaultTexture,\n    );\n  }\n\n  // Pre-compute cos and sin of rotation, since they are the same for all fragments.\n  // Combine with strength as one vec3 uniform.\n  const cosRotation = Math.cos(anisotropyRotation);\n  const sinRotation = Math.sin(anisotropyRotation);\n  shaderBuilder.addUniform(\"vec3\", \"u_anisotropy\", ShaderDestination.FRAGMENT);\n  uniformMap.u_anisotropy = function () {\n    return Cartesian3.fromElements(\n      cosRotation,\n      sinRotation,\n      anisotropyStrength,\n      scratchAnisotropy,\n    );\n  };\n}\n\n/**\n * Add uniforms and defines for the KHR_materials_clearcoat extension\n *\n * @param {ModelComponents.Clearcoat} clearcoat\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ShaderBuilder} shaderBuilder\n * @param {Texture} defaultTexture\n * @param {boolean} disableTextures\n * @private\n */\nfunction processClearcoatUniforms(\n  clearcoat,\n  uniformMap,\n  shaderBuilder,\n  defaultTexture,\n  disableTextures,\n) {\n  const {\n    clearcoatFactor,\n    clearcoatTexture,\n    clearcoatRoughnessFactor,\n    clearcoatRoughnessTexture,\n    clearcoatNormalTexture,\n  } = clearcoat;\n\n  shaderBuilder.addDefine(\n    \"USE_CLEARCOAT\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  if (\n    defined(clearcoatFactor) &&\n    clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_FACTOR\n  ) {\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_clearcoatFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_clearcoatFactor = function () {\n      return clearcoat.clearcoatFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_CLEARCOAT_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  if (defined(clearcoatTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      clearcoatTexture,\n      \"u_clearcoatTexture\",\n      \"CLEARCOAT\",\n      defaultTexture,\n    );\n  }\n\n  if (\n    defined(clearcoatRoughnessFactor) &&\n    clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR\n  ) {\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_clearcoatRoughnessFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_clearcoatRoughnessFactor = function () {\n      return clearcoat.clearcoatRoughnessFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_CLEARCOAT_ROUGHNESS_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  if (defined(clearcoatRoughnessTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      clearcoatRoughnessTexture,\n      \"u_clearcoatRoughnessTexture\",\n      \"CLEARCOAT_ROUGHNESS\",\n      defaultTexture,\n    );\n  }\n\n  if (defined(clearcoatNormalTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      clearcoatNormalTexture,\n      \"u_clearcoatNormalTexture\",\n      \"CLEARCOAT_NORMAL\",\n      defaultTexture,\n    );\n  }\n}\n\n/**\n * Add uniforms and defines for the PBR metallic roughness model\n *\n * @param {ModelComponents.MetallicRoughness} metallicRoughness\n * @param {Object<string, Function>} uniformMap The uniform map to modify.\n * @param {ShaderBuilder} shaderBuilder\n * @param {Texture} defaultTexture\n * @param {boolean} disableTextures\n * @private\n */\nfunction processMetallicRoughnessUniforms(\n  metallicRoughness,\n  uniformMap,\n  shaderBuilder,\n  defaultTexture,\n  disableTextures,\n) {\n  shaderBuilder.addDefine(\n    \"USE_METALLIC_ROUGHNESS\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  const baseColorTexture = metallicRoughness.baseColorTexture;\n  if (defined(baseColorTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      baseColorTexture,\n      \"u_baseColorTexture\",\n      \"BASE_COLOR\",\n      defaultTexture,\n    );\n  }\n\n  const baseColorFactor = metallicRoughness.baseColorFactor;\n  if (\n    defined(baseColorFactor) &&\n    !Cartesian4.equals(\n      baseColorFactor,\n      MetallicRoughness.DEFAULT_BASE_COLOR_FACTOR,\n    )\n  ) {\n    shaderBuilder.addUniform(\n      \"vec4\",\n      \"u_baseColorFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_baseColorFactor = function () {\n      return metallicRoughness.baseColorFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_BASE_COLOR_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  const metallicRoughnessTexture = metallicRoughness.metallicRoughnessTexture;\n  if (defined(metallicRoughnessTexture) && !disableTextures) {\n    processTexture(\n      shaderBuilder,\n      uniformMap,\n      metallicRoughnessTexture,\n      \"u_metallicRoughnessTexture\",\n      \"METALLIC_ROUGHNESS\",\n      defaultTexture,\n    );\n  }\n\n  const metallicFactor = metallicRoughness.metallicFactor;\n  if (\n    defined(metallicFactor) &&\n    metallicFactor !== MetallicRoughness.DEFAULT_METALLIC_FACTOR\n  ) {\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_metallicFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_metallicFactor = function () {\n      return metallicRoughness.metallicFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_METALLIC_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  const roughnessFactor = metallicRoughness.roughnessFactor;\n  if (\n    defined(roughnessFactor) &&\n    roughnessFactor !== MetallicRoughness.DEFAULT_ROUGHNESS_FACTOR\n  ) {\n    shaderBuilder.addUniform(\n      \"float\",\n      \"u_roughnessFactor\",\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap.u_roughnessFactor = function () {\n      return metallicRoughness.roughnessFactor;\n    };\n    shaderBuilder.addDefine(\n      \"HAS_ROUGHNESS_FACTOR\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n}\n\nexport default MaterialPipelineStage;\n","import ShaderDestination from \"../../Renderer/ShaderDestination.js\";\n\n/**\n * The MetadataPickingPipelineStage is inserting the\n * metadataPickingStage function into the shader code,\n * including the 'defines' that will be filled with\n * the proper values for metadata picking in the\n * 'DerivedCommands'\n *\n * @namespace MetadataPickingPipelineStage\n * @private\n */\nconst MetadataPickingPipelineStage = {\n  name: \"MetadataPickingPipelineStage\", // Helps with debugging\n\n  // The identifiers for 'define' directives that are inserted into the\n  // shader code. The values of these defines will be be assigned\n  // in the `DerivedCommands` class when a derived command for metadata\n  // picking is created.\n  METADATA_PICKING_ENABLED: \"METADATA_PICKING_ENABLED\",\n  METADATA_PICKING_VALUE_TYPE: \"METADATA_PICKING_VALUE_TYPE\",\n  METADATA_PICKING_VALUE_STRING: \"METADATA_PICKING_VALUE_STRING\",\n  METADATA_PICKING_VALUE_COMPONENT_X: \"METADATA_PICKING_VALUE_COMPONENT_X\",\n  METADATA_PICKING_VALUE_COMPONENT_Y: \"METADATA_PICKING_VALUE_COMPONENT_Y\",\n  METADATA_PICKING_VALUE_COMPONENT_Z: \"METADATA_PICKING_VALUE_COMPONENT_Z\",\n  METADATA_PICKING_VALUE_COMPONENT_W: \"METADATA_PICKING_VALUE_COMPONENT_W\",\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render resources:\n * <ul>\n *  <li>adds the required defines and \"metadataPickingStage\" to function in the shader</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n */\nMetadataPickingPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_TYPE,\n    \"float\",\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addDefine(\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_STRING,\n    \"0.0\",\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addDefine(\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_X,\n    \"0.0\",\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addDefine(\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_Y,\n    \"0.0\",\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addDefine(\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_Z,\n    \"0.0\",\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addDefine(\n    MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_W,\n    \"0.0\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addFunction(\n    \"metadataPickingStage\",\n    \"void metadataPickingStage(Metadata metadata, MetadataClass metadataClass, inout vec4 metadataValues)\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addFunctionLines(\n    \"metadataPickingStage\",\n    [\n      `${MetadataPickingPipelineStage.METADATA_PICKING_VALUE_TYPE} value = ${MetadataPickingPipelineStage.METADATA_PICKING_VALUE_TYPE}(${MetadataPickingPipelineStage.METADATA_PICKING_VALUE_STRING});`,\n      `metadataValues.x = ${MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_X};`,\n      `metadataValues.y = ${MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_Y};`,\n      `metadataValues.z = ${MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_Z};`,\n      `metadataValues.w = ${MetadataPickingPipelineStage.METADATA_PICKING_VALUE_COMPONENT_W};`,\n    ],\n    ShaderDestination.FRAGMENT,\n  );\n};\n\nexport default MetadataPickingPipelineStage;\n","import Matrix3 from \"../../Core/Matrix3.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport defined from \"../../Core/defined.js\";\nimport oneTimeWarning from \"../../Core/oneTimeWarning.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport MetadataStageFS from \"../../Shaders/Model/MetadataStageFS.js\";\nimport MetadataStageVS from \"../../Shaders/Model/MetadataStageVS.js\";\nimport MetadataType from \"../MetadataType.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\n/**\n * The metadata pipeline stage processes metadata properties from\n * EXT_structural_metadata and inserts them into a struct in the shader.\n * This struct will be used by {@link CustomShaderPipelineStage} to allow the\n * user to access metadata using {@link CustomShader}\n *\n * @namespace MetadataPipelineStage\n *\n * @private\n */\nconst MetadataPipelineStage = {\n  name: \"MetadataPipelineStage\",\n\n  STRUCT_ID_METADATA_VS: \"MetadataVS\",\n  STRUCT_ID_METADATA_FS: \"MetadataFS\",\n  STRUCT_NAME_METADATA: \"Metadata\",\n\n  STRUCT_ID_METADATA_CLASS_VS: \"MetadataClassVS\",\n  STRUCT_ID_METADATA_CLASS_FS: \"MetadataClassFS\",\n  STRUCT_NAME_METADATA_CLASS: \"MetadataClass\",\n\n  STRUCT_ID_METADATA_STATISTICS_VS: \"MetadataStatisticsVS\",\n  STRUCT_ID_METADATA_STATISTICS_FS: \"MetadataStatisticsFS\",\n  STRUCT_NAME_METADATA_STATISTICS: \"MetadataStatistics\",\n\n  FUNCTION_ID_INITIALIZE_METADATA_VS: \"initializeMetadataVS\",\n  FUNCTION_ID_INITIALIZE_METADATA_FS: \"initializeMetadataFS\",\n  FUNCTION_SIGNATURE_INITIALIZE_METADATA:\n    \"void initializeMetadata(FeatureIds featureIds, out Metadata metadata, out MetadataClass metadataClass, out MetadataStatistics metadataStatistics, ProcessedAttributes attributes)\",\n  FUNCTION_ID_SET_METADATA_VARYINGS: \"setMetadataVaryings\",\n  FUNCTION_SIGNATURE_SET_METADATA_VARYINGS: \"void setMetadataVaryings()\",\n\n  // Metadata class and statistics fields:\n  // - some must be renamed to avoid reserved words\n  // - some always have float/vec values, even for integer/ivec property types\n  METADATA_CLASS_FIELDS: [\n    { specName: \"noData\", shaderName: \"noData\" },\n    { specName: \"default\", shaderName: \"defaultValue\" },\n    { specName: \"min\", shaderName: \"minValue\" },\n    { specName: \"max\", shaderName: \"maxValue\" },\n  ],\n  METADATA_STATISTICS_FIELDS: [\n    { specName: \"min\", shaderName: \"minValue\" },\n    { specName: \"max\", shaderName: \"maxValue\" },\n    { specName: \"mean\", shaderName: \"mean\", type: \"float\" },\n    { specName: \"median\", shaderName: \"median\" },\n    {\n      specName: \"standardDeviation\",\n      shaderName: \"standardDeviation\",\n      type: \"float\",\n    },\n    { specName: \"variance\", shaderName: \"variance\", type: \"float\" },\n    { specName: \"sum\", shaderName: \"sum\" },\n  ],\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render\n * resources:\n * <ul>\n *   <li>Adds a Metadata struct to the shader</li>\n *   <li>If the primitive has structural metadata, properties are added to the Metadata struct</li>\n *   <li>dynamic functions are added to the shader to initialize the metadata properties</li>\n *   <li>Adds uniforms for property textures to the uniform map as needed</li>\n *   <li>Adds uniforms for offset/scale to the uniform map as needed</li>\n * </ul>\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {FrameState} frameState The frame state\n * @private\n */\nMetadataPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const { shaderBuilder, model } = renderResources;\n  const { structuralMetadata = {}, content } = model;\n  const statistics = content?.tileset.metadataExtension?.statistics;\n  const webgl2 = frameState.context.webgl2;\n  const usedMetadataProperties = collectMetadataUsedByOtherStages(\n    model,\n    primitive,\n  );\n\n  const propertyAttributesInfo = getPropertyAttributesInfo(\n    structuralMetadata.propertyAttributes,\n    primitive,\n    statistics,\n  );\n  const propertyTexturesInfo = getPropertyTexturesInfo(\n    structuralMetadata.propertyTextures,\n    statistics,\n  );\n  const propertyTablesInfo = getPropertyTablesInfo(\n    structuralMetadata.propertyTables,\n    primitive,\n    renderResources,\n    statistics,\n    usedMetadataProperties,\n  );\n\n  // Declare <type>MetadataClass and <type>MetadataStatistics structs as needed\n  const allPropertyInfos = propertyAttributesInfo\n    .concat(propertyTexturesInfo)\n    .concat(propertyTablesInfo);\n  declareMetadataTypeStructs(shaderBuilder, allPropertyInfos);\n\n  // Always declare the Metadata, MetadataClass, and MetadataStatistics structs\n  // and the initializeMetadata() function, even if not used\n  declareStructsAndFunctions(shaderBuilder);\n  shaderBuilder.addVertexLines(MetadataStageVS);\n  shaderBuilder.addFragmentLines(MetadataStageFS);\n\n  for (let i = 0; i < propertyAttributesInfo.length; i++) {\n    const info = propertyAttributesInfo[i];\n    processPropertyAttributeProperty(renderResources, info);\n  }\n  for (let i = 0; i < propertyTexturesInfo.length; i++) {\n    const info = propertyTexturesInfo[i];\n    processPropertyTextureProperty(renderResources, info, webgl2);\n  }\n  for (let i = 0; i < propertyTablesInfo.length; i++) {\n    const info = propertyTablesInfo[i];\n    processPropertyTableProperty(renderResources, info, webgl2);\n  }\n};\n\n/**\n * Collect info about all properties of all propertyAttributes, and\n * return as a flattened Array\n * @param {PropertyAttribute[]} propertyAttributes The PropertyAttributes with properties to be described\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {object} [statistics] Statistics about the properties (if the model is from a 3DTiles tileset)\n * @param {object} usedMetadataProperties Metadata properties used in the primitive's shader by other stages\n * @returns {object[]} An array of objects containing information about each PropertyAttributeProperty\n * @private\n */\nfunction getPropertyAttributesInfo(propertyAttributes, primitive, statistics) {\n  if (!defined(propertyAttributes)) {\n    return [];\n  }\n  return propertyAttributes.flatMap((propertyAttribute) =>\n    getPropertyAttributeInfo(propertyAttribute, primitive, statistics),\n  );\n}\n\n/**\n * Collect info about the properties of a single PropertyAttribute\n * @param {PropertyAttribute} propertyAttribute The PropertyAttribute with properties to be described\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {object} [statistics] Statistics about the properties (if the model is from a 3DTiles tileset)\n * @returns {object[]} An array of objects containing information about each PropertyAttributeProperty\n * @private\n */\nfunction getPropertyAttributeInfo(propertyAttribute, primitive, statistics) {\n  const { getAttributeByName, getAttributeInfo, sanitizeGlslIdentifier } =\n    ModelUtility;\n\n  const classId = propertyAttribute.class.id;\n  const classStatistics = statistics?.classes[classId];\n\n  const propertiesArray = Object.entries(propertyAttribute.properties);\n  const infoArray = new Array(propertiesArray.length);\n\n  for (let i = 0; i < propertiesArray.length; i++) {\n    const [propertyId, property] = propertiesArray[i];\n    const modelAttribute = getAttributeByName(primitive, property.attribute);\n    const { glslType, variableName } = getAttributeInfo(modelAttribute);\n\n    infoArray[i] = {\n      metadataVariable: sanitizeGlslIdentifier(propertyId),\n      property,\n      classProperty: property.classProperty,\n      type: property.classProperty.type,\n      glslType,\n      variableName,\n      propertyStatistics: classStatistics?.properties[propertyId],\n      shaderDestination: ShaderDestination.BOTH,\n    };\n  }\n\n  return infoArray;\n}\n\n/**\n * Collect info about all properties of all propertyTextures, and\n * return as a flattened Array\n * @param {PropertyTexture[]} propertyTextures The PropertyTextures with properties to be described\n * @param {object} [statistics] Statistics about the properties (if the model is from a 3DTiles tileset)\n * @returns {object[]} An array of objects containing information about each PropertyTextureProperty\n * @private\n */\nfunction getPropertyTexturesInfo(propertyTextures, statistics) {\n  if (!defined(propertyTextures)) {\n    return [];\n  }\n  return propertyTextures.flatMap((propertyTexture) =>\n    getPropertyTextureInfo(propertyTexture, statistics),\n  );\n}\n\n/**\n * Collect info about the properties of a single PropertyTexture\n * @param {PropertyTexture} propertyTexture The PropertyTexture with properties to be described\n * @param {object} [statistics] Statistics about the properties (if the model is from a 3DTiles tileset)\n * @returns {object[]} An array of objects containing information about each PropertyTextureProperty\n * @private\n */\nfunction getPropertyTextureInfo(propertyTexture, statistics) {\n  const { sanitizeGlslIdentifier } = ModelUtility;\n\n  const classId = propertyTexture.class.id;\n  const classStatistics = statistics?.classes[classId];\n\n  const propertiesArray = Object.entries(propertyTexture.properties).filter(\n    ([id, property]) => {\n      const numChannels = property.textureReader.channels.length;\n      return property.classProperty.isGpuCompatible(numChannels);\n    },\n  );\n  const infoArray = new Array(propertiesArray.length);\n\n  for (let i = 0; i < propertiesArray.length; i++) {\n    const [propertyId, property] = propertiesArray[i];\n\n    infoArray[i] = {\n      metadataVariable: sanitizeGlslIdentifier(propertyId),\n      property,\n      classProperty: property.classProperty,\n      type: property.classProperty.type,\n      glslType: property.classProperty.getGlslType(),\n      propertyStatistics: classStatistics?.properties[propertyId],\n      shaderDestination: ShaderDestination.FRAGMENT,\n    };\n  }\n\n  return infoArray;\n}\n\nconst NUM_CHANNELS = 4; // use all channels for property table textures\n\nfunction getPropertyTablesInfo(\n  propertyTables,\n  primitive,\n  renderResources,\n  statistics,\n  usedMetadataProperties,\n) {\n  if (!defined(propertyTables)) {\n    return [];\n  }\n\n  // Each feature ID set can reference a property table.\n  // For a given primitive, as we have here, the mapping is 1:1.\n  // (This isn't strictly enforced in the EXT_mesh_features schema, but would be considered ill-formed and ambiguous.\n  // There _is_ a way to specify which featureID set to use for picking and styling in the Cesium3DTileset API, which we may want to respect here in the future).\n  const tableToFeatureSetInfo = mapPropertyTablesToFeatureIdSets(\n    renderResources,\n    primitive,\n  );\n\n  return propertyTables\n    .filter(\n      (propertyTable) =>\n        defined(propertyTable.class) &&\n        tableToFeatureSetInfo.has(String(propertyTable.id)),\n    )\n    .flatMap((propertyTable) =>\n      getPropertyTableInfo(\n        propertyTable,\n        tableToFeatureSetInfo,\n        statistics,\n        usedMetadataProperties,\n      ),\n    );\n}\n\nfunction getPropertyTableInfo(\n  propertyTable,\n  tableToFeatureSetInfo,\n  statistics,\n  usedMetadataProperties,\n) {\n  const { sanitizeGlslIdentifier } = ModelUtility;\n\n  const classDefinition = propertyTable.class;\n  const classStatistics = statistics?.classes[classDefinition.id];\n  const featureSetInfo =\n    tableToFeatureSetInfo.get(String(propertyTable.id)) ?? {};\n\n  // Depending on whether the featureIDs are a feature texture or feature attribute,\n  // the shader usage may be restricted to a given shader stage.\n  const shaderDestination =\n    featureSetInfo.shaderDestination ?? ShaderDestination.BOTH;\n\n  const properties = propertyTable.properties;\n  const classProperties = classDefinition.properties;\n  const infoArray = [];\n\n  // This is the per-table index of the property info, which is used to index into the property table texture\n  // during a texelFetch.\n  let propertyInfoIndex = 0;\n\n  // See note in {@link parseStructuralMetadata.collectGpuCompatiblePropertyBufferViews} about\n  // why we iterate over the class definition properties rather than the property table properties.\n  for (const [propertyId, classProperty] of Object.entries(classProperties)) {\n    if (!classProperty.isGpuCompatible(NUM_CHANNELS)) {\n      continue;\n    }\n\n    // For performance reasons, since property tables can be quite large, only include properties that are used by other pipeline stages in the shader.\n    // Note: we could do this for property textures and attributes as well - but since users can call the `pickMetadata`\n    // API with an arbitrary metadata property, we'd need to rebuild every model's shaders each time such a call is made. Since property textures\n    // and attributes tend to be less numerous than property tables anyway, it's more important to optimize table usage in this way.\n    const property = properties[propertyId];\n    const propertyShaderDestination = ShaderDestination.intersection(\n      propertyDestination(propertyId, usedMetadataProperties),\n      shaderDestination,\n    );\n\n    if (propertyShaderDestination === ShaderDestination.NONE) {\n      // Still need to increment the index to stay aligned with the rows of the metadata texture.\n      // The texture includes metadata whether or not it's used in the shader.\n      propertyInfoIndex++;\n      continue;\n    }\n\n    infoArray.push({\n      metadataVariable: sanitizeGlslIdentifier(propertyId),\n      property: property,\n      classProperty: classProperty,\n      type: classProperty.type,\n      glslType: classProperty.getGlslType(),\n      propertyStatistics: classStatistics?.properties[propertyId],\n      shaderDestination: propertyShaderDestination,\n      propertyTable: propertyTable,\n      featureIdVariableName: featureSetInfo.variableName,\n      propertyInfoIndex: propertyInfoIndex,\n    });\n\n    propertyInfoIndex++;\n  }\n\n  return infoArray;\n}\n\n/**\n * Map property tables to feature ID sets for a given primitive. In general, the mapping is not 1:1, but\n * within a given primitive it is safe to treat it as such.\n *\n * @param {PrimitiveRenderResources} renderResources\n * @param {ModelComponents.Primitive} primitive\n * @returns A map from property table ID to an object with the corresponding feature ID set information\n * for the given primitive. (Contains the shader variable name and shader destination.)\n *\n * @private\n */\nfunction mapPropertyTablesToFeatureIdSets(renderResources, primitive) {\n  const propertyTableToFeatureSet = new Map();\n\n  function addMapEntry(featureIds, shaderDestination) {\n    const propertyTableId = featureIds?.propertyTableId;\n    if (!defined(propertyTableId)) {\n      return;\n    }\n\n    const key = String(propertyTableId);\n    const entry = {\n      // This is consistent with the variable name given in the feature ID pipeline stage.\n      // Aliases can also be used, but this will always be valid.\n      variableName: featureIds.positionalLabel,\n      shaderDestination: shaderDestination,\n    };\n\n    const existingEntry = propertyTableToFeatureSet.get(key);\n    if (defined(existingEntry)) {\n      console.warn(\n        `Multiple feature ID sets reference the same property table ${propertyTableId} in primitive. Only one will be used.`,\n      );\n    }\n    propertyTableToFeatureSet.set(key, entry);\n  }\n\n  // Collect feature IDs from two sources: the primitive, and instances\n  const primitiveFeatureIds = primitive?.featureIds ?? [];\n  for (let i = 0; i < primitiveFeatureIds.length; i++) {\n    const featureIds = primitiveFeatureIds[i];\n    // Textures feature sets are fragment-only\n    const isTexture = defined(featureIds?.textureReader);\n    addMapEntry(\n      featureIds,\n      isTexture ? ShaderDestination.FRAGMENT : ShaderDestination.BOTH,\n    );\n  }\n\n  // Instance feature IDs (if present)\n  const instances = renderResources.runtimeNode?.node?.instances;\n  const instanceFeatureIds = instances?.featureIds ?? [];\n  for (let i = 0; i < instanceFeatureIds.length; i++) {\n    const featureIds = instanceFeatureIds[i];\n    addMapEntry(featureIds, ShaderDestination.BOTH);\n  }\n\n  return propertyTableToFeatureSet;\n}\n\n/**\n * Declare <type>MetadataClass structs in the shader for each PropertyAttributeProperty, PropertyTextureProperty, and MetadataTableProperty\n * @param {ShaderBuilder} shaderBuilder The shader builder for the primitive\n * @param {object[]} propertyInfos Information about the PropertyAttributeProperties, PropertyTextureProperties, and PropertyTableProperties\n * @private\n */\nfunction declareMetadataTypeStructs(shaderBuilder, propertyInfos) {\n  const classTypes = new Set();\n  const statisticsTypes = new Set();\n\n  for (let i = 0; i < propertyInfos.length; i++) {\n    const { type, glslType, propertyStatistics } = propertyInfos[i];\n    classTypes.add(glslType);\n    if (!defined(propertyStatistics)) {\n      continue;\n    }\n    if (type !== MetadataType.ENUM) {\n      statisticsTypes.add(glslType);\n    }\n  }\n\n  const classFields = MetadataPipelineStage.METADATA_CLASS_FIELDS;\n  for (const metadataType of classTypes) {\n    const classStructName = `${metadataType}MetadataClass`;\n    declareTypeStruct(classStructName, metadataType, classFields);\n  }\n\n  const statisticsFields = MetadataPipelineStage.METADATA_STATISTICS_FIELDS;\n  for (const metadataType of statisticsTypes) {\n    const statisticsStructName = `${metadataType}MetadataStatistics`;\n    declareTypeStruct(statisticsStructName, metadataType, statisticsFields);\n  }\n\n  function declareTypeStruct(structName, type, fields) {\n    shaderBuilder.addStruct(structName, structName, ShaderDestination.BOTH);\n\n    for (let i = 0; i < fields.length; i++) {\n      const { shaderName } = fields[i];\n      const shaderType =\n        fields[i].type === \"float\" ? convertToFloatComponents(type) : type;\n      shaderBuilder.addStructField(structName, shaderType, shaderName);\n    }\n  }\n}\n\nconst floatConversions = {\n  int: \"float\",\n  ivec2: \"vec2\",\n  ivec3: \"vec3\",\n  ivec4: \"vec4\",\n};\n\n/**\n * For a type with integer components, find a corresponding float-component type\n * @param {string} type The name of a GLSL type with integer components\n * @returns {string} The name of a GLSL type of the same dimension with float components, if available; otherwise the input type\n * @private\n */\nfunction convertToFloatComponents(type) {\n  const converted = floatConversions[type];\n  return defined(converted) ? converted : type;\n}\n\n/**\n * Declare the main Metadata, MetadataClass, and MetadataStatistics structs\n * and the initializeMetadata() function.\n * @param {ShaderBuilder} shaderBuilder The shader builder for the primitive\n * @private\n */\nfunction declareStructsAndFunctions(shaderBuilder) {\n  // Declare the Metadata struct.\n  shaderBuilder.addStruct(\n    MetadataPipelineStage.STRUCT_ID_METADATA_VS,\n    MetadataPipelineStage.STRUCT_NAME_METADATA,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addStruct(\n    MetadataPipelineStage.STRUCT_ID_METADATA_FS,\n    MetadataPipelineStage.STRUCT_NAME_METADATA,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // Declare the MetadataClass struct\n  shaderBuilder.addStruct(\n    MetadataPipelineStage.STRUCT_ID_METADATA_CLASS_VS,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_CLASS,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addStruct(\n    MetadataPipelineStage.STRUCT_ID_METADATA_CLASS_FS,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_CLASS,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // Declare the MetadataStatistics struct\n  shaderBuilder.addStruct(\n    MetadataPipelineStage.STRUCT_ID_METADATA_STATISTICS_VS,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_STATISTICS,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addStruct(\n    MetadataPipelineStage.STRUCT_ID_METADATA_STATISTICS_FS,\n    MetadataPipelineStage.STRUCT_NAME_METADATA_STATISTICS,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // declare the initializeMetadata() function. The details may differ\n  // between vertex and fragment shader\n  shaderBuilder.addFunction(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_VS,\n    MetadataPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_METADATA,\n    ShaderDestination.VERTEX,\n  );\n  shaderBuilder.addFunction(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_FS,\n    MetadataPipelineStage.FUNCTION_SIGNATURE_INITIALIZE_METADATA,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // declare the setMetadataVaryings() function in the vertex shader only.\n  shaderBuilder.addFunction(\n    MetadataPipelineStage.FUNCTION_ID_SET_METADATA_VARYINGS,\n    MetadataPipelineStage.FUNCTION_SIGNATURE_SET_METADATA_VARYINGS,\n    ShaderDestination.VERTEX,\n  );\n}\n\n/**\n * Update the shader for a single PropertyAttributeProperty\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {object} propertyInfo Info about the PropertyAttributeProperty\n * @private\n */\nfunction processPropertyAttributeProperty(renderResources, propertyInfo) {\n  addPropertyAttributePropertyMetadata(renderResources, propertyInfo);\n  addPropertyMetadataClass(renderResources.shaderBuilder, propertyInfo);\n  addPropertyMetadataStatistics(renderResources.shaderBuilder, propertyInfo);\n}\n\n/**\n * Add fields to the Metadata struct, and metadata value assignments to the\n * initializeMetadata function, for a PropertyAttributeProperty\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {object} propertyInfo Info about the PropertyAttributeProperty\n * @private\n */\nfunction addPropertyAttributePropertyMetadata(renderResources, propertyInfo) {\n  const { shaderBuilder } = renderResources;\n  const { metadataVariable, property, glslType } = propertyInfo;\n\n  const valueExpression = addValueTransformUniforms({\n    valueExpression: `attributes.${propertyInfo.variableName}`,\n    renderResources: renderResources,\n    glslType: glslType,\n    metadataVariable: metadataVariable,\n    shaderDestination: ShaderDestination.BOTH,\n    property: property,\n  });\n\n  // declare the struct field\n  shaderBuilder.addStructField(\n    MetadataPipelineStage.STRUCT_ID_METADATA_VS,\n    glslType,\n    metadataVariable,\n  );\n  shaderBuilder.addStructField(\n    MetadataPipelineStage.STRUCT_ID_METADATA_FS,\n    glslType,\n    metadataVariable,\n  );\n\n  // assign the result to the metadata struct property.\n  const initializationLine = `metadata.${metadataVariable} = ${valueExpression};`;\n  shaderBuilder.addFunctionLines(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_VS,\n    [initializationLine],\n  );\n  shaderBuilder.addFunctionLines(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_FS,\n    [initializationLine],\n  );\n}\n\n/**\n * Update the shader for a single PropertyTextureProperty\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {object[]} propertyInfo Info about the PropertyTextureProperty\n * @param {boolean} webgl2 True if the context is WebGL2\n * @private\n */\nfunction processPropertyTextureProperty(renderResources, propertyInfo, webgl2) {\n  addPropertyTexturePropertyMetadata(renderResources, propertyInfo, webgl2);\n  addPropertyMetadataClass(renderResources.shaderBuilder, propertyInfo);\n  addPropertyMetadataStatistics(renderResources.shaderBuilder, propertyInfo);\n}\n\n/**\n * Add fields to the Metadata struct, and metadata value expressions to the\n * initializeMetadata function, for a PropertyTextureProperty\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {object} propertyInfo Info about the PropertyTextureProperty\n * @param {boolean} webgl2 True if the context is WebGL2\n * @private\n */\nfunction addPropertyTexturePropertyMetadata(\n  renderResources,\n  propertyInfo,\n  webgl2,\n) {\n  const { shaderBuilder, uniformMap } = renderResources;\n  const { metadataVariable, glslType, property } = propertyInfo;\n\n  const { texCoord, channels, index, texture, transform } =\n    property.textureReader;\n  const textureUniformName = `u_propertyTexture_${index}`;\n  const initializationLines = [];\n\n  // Property texture properties may share the same physical texture, so only\n  // add the texture uniform the first time we encounter it.\n  if (!uniformMap.hasOwnProperty(textureUniformName)) {\n    shaderBuilder.addUniform(\n      \"sampler2D\",\n      textureUniformName,\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap[textureUniformName] = () => texture;\n  }\n\n  shaderBuilder.addStructField(\n    MetadataPipelineStage.STRUCT_ID_METADATA_FS,\n    glslType,\n    metadataVariable,\n  );\n\n  // Get a GLSL expression for the texture coordinates of the property.\n  // By default, this will be taken directly from the attributes.\n  const texCoordVariable = `attributes.texCoord_${texCoord}`;\n  let texCoordVariableExpression = texCoordVariable;\n\n  // Check if the texture defines a `transform` from a `KHR_texture_transform`\n  if (defined(transform) && !Matrix3.equals(transform, Matrix3.IDENTITY)) {\n    // Add a uniform for the transformation matrix\n    const transformUniformName = `${textureUniformName}Transform`;\n    shaderBuilder.addUniform(\n      \"mat3\",\n      transformUniformName,\n      ShaderDestination.FRAGMENT,\n    );\n    uniformMap[transformUniformName] = function () {\n      return transform;\n    };\n\n    // Update the expression for the texture coordinates\n    // with one that transforms the texture coordinates\n    // with the transform matrix first\n    texCoordVariableExpression = `vec2(${transformUniformName} * vec3(${texCoordVariable}, 1.0))`;\n  }\n  const valueExpression = `texture(${textureUniformName}, ${texCoordVariableExpression}).${channels}`;\n  const classProperty = property.classProperty;\n  let unpackedValue;\n  if (webgl2) {\n    unpackedValue = classProperty.unpackTextureInShader(\n      valueExpression,\n      channels,\n      metadataVariable,\n      initializationLines,\n    );\n  } else {\n    unpackedValue = classProperty.unpackTextureInShaderWebGL1(valueExpression);\n  }\n\n  const transformedValue = addValueTransformUniforms({\n    valueExpression: unpackedValue,\n    renderResources: renderResources,\n    glslType: glslType,\n    metadataVariable: metadataVariable,\n    shaderDestination: ShaderDestination.FRAGMENT,\n    property: property,\n  });\n\n  const finalAssignment = `metadata.${metadataVariable} = ${transformedValue};`;\n  initializationLines.push(finalAssignment);\n  shaderBuilder.addFunctionLines(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_FS,\n    initializationLines,\n  );\n}\n\n/**\n * Add fields to the MetadataClass struct, and metadataClass value expressions\n * to the initializeMetadata function, for a PropertyAttributeProperty,\n * PropertyTextureProperty, or MetadataTableProperty\n * @param {ShaderBuilder} shaderBuilder The shader builder for the primitive\n * @param {object} propertyInfo Info about the PropertyAttributeProperty, PropertyTextureProperty, or MetadataTableProperty\n * @private\n */\nfunction addPropertyMetadataClass(shaderBuilder, propertyInfo) {\n  const classProperty = propertyInfo.classProperty;\n  const { metadataVariable, glslType, shaderDestination } = propertyInfo;\n\n  // Construct assignment statements to set values in the metadataClass struct\n  const assignments = getStructAssignments(\n    MetadataPipelineStage.METADATA_CLASS_FIELDS,\n    classProperty,\n    `metadataClass.${metadataVariable}`,\n    glslType,\n  );\n\n  // Struct field: Prefix to get the appropriate <type>MetadataClass struct\n  const metadataType = `${glslType}MetadataClass`;\n  shaderBuilder.addStructField(\n    MetadataPipelineStage.STRUCT_ID_METADATA_CLASS_FS,\n    metadataType,\n    metadataVariable,\n  );\n  shaderBuilder.addFunctionLines(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_FS,\n    assignments,\n  );\n  if (!ShaderDestination.includesVertexShader(shaderDestination)) {\n    return;\n  }\n  shaderBuilder.addStructField(\n    MetadataPipelineStage.STRUCT_ID_METADATA_CLASS_VS,\n    metadataType,\n    metadataVariable,\n  );\n  shaderBuilder.addFunctionLines(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_VS,\n    assignments,\n  );\n}\n\n/**\n * Add fields to the MetadataStatistics struct, and metadataStatistics value\n * expressions to the initializeMetadata function, for a\n * PropertyAttributeProperty or PropertyTextureProperty\n * @param {ShaderBuilder} shaderBuilder The shader builder for the primitive\n * @param {object} propertyInfo Info about the PropertyAttributeProperty or PropertyTextureProperty\n * @private\n */\nfunction addPropertyMetadataStatistics(shaderBuilder, propertyInfo) {\n  const { propertyStatistics } = propertyInfo;\n  if (!defined(propertyStatistics)) {\n    return;\n  }\n  const { metadataVariable, type, glslType } = propertyInfo;\n  if (type === MetadataType.ENUM) {\n    // enums have an \"occurrences\" statistic which is not implemented yet\n    return;\n  }\n\n  // Construct assignment statements to set values in the metadataStatistics struct\n  const fields = MetadataPipelineStage.METADATA_STATISTICS_FIELDS;\n  const struct = `metadataStatistics.${metadataVariable}`;\n  const assignments = getStructAssignments(\n    fields,\n    propertyStatistics,\n    struct,\n    glslType,\n  );\n\n  // Struct field: Prefix to get the appropriate <type>MetadataStatistics struct\n  const statisticsType = `${glslType}MetadataStatistics`;\n  shaderBuilder.addStructField(\n    MetadataPipelineStage.STRUCT_ID_METADATA_STATISTICS_FS,\n    statisticsType,\n    metadataVariable,\n  );\n  shaderBuilder.addFunctionLines(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_FS,\n    assignments,\n  );\n  if (!ShaderDestination.includesVertexShader(propertyInfo.shaderDestination)) {\n    return;\n  }\n  shaderBuilder.addStructField(\n    MetadataPipelineStage.STRUCT_ID_METADATA_STATISTICS_VS,\n    statisticsType,\n    metadataVariable,\n  );\n  shaderBuilder.addFunctionLines(\n    MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_VS,\n    assignments,\n  );\n}\n\nfunction processPropertyTableProperty(renderResources, propertyInfo, webgl2) {\n  addPropertyTablePropertyMetadata(renderResources, propertyInfo, webgl2);\n  addPropertyMetadataClass(renderResources.shaderBuilder, propertyInfo);\n  addPropertyMetadataStatistics(renderResources.shaderBuilder, propertyInfo);\n}\n\nfunction addPropertyTablePropertyMetadata(\n  renderResources,\n  propertyInfo,\n  webgl2,\n) {\n  const { shaderBuilder, uniformMap } = renderResources;\n  const {\n    metadataVariable,\n    glslType,\n    property,\n    featureIdVariableName,\n    propertyTable,\n    propertyInfoIndex,\n  } = propertyInfo;\n\n  if (!webgl2) {\n    oneTimeWarning(\n      \"PropertyTableCustomShader\",\n      \"Property table support for custom shaders requires WebGL2.\",\n    );\n    return;\n  }\n\n  if (!defined(featureIdVariableName) || !defined(propertyTable.texture)) {\n    return;\n  }\n\n  // For property tables, all properties are packed into a single texture.\n  // Thus, the texture identifier is based on the table id.\n  const textureUniformName = `u_propertyTableTexture_${propertyTable.id}`;\n  const initializationLines = [];\n\n  if (!uniformMap.hasOwnProperty(textureUniformName)) {\n    // Note that, unlike property textures, property table textures are available in both\n    // the vertex and fragment shaders. While property textures rely on interpolated UV coords,\n    // property table textures generally apply to non-interpolated texel fetches based on (featureId, propertyId).\n    shaderBuilder.addUniform(\n      \"sampler2D\",\n      textureUniformName,\n      ShaderDestination.BOTH,\n    );\n    uniformMap[textureUniformName] = () => propertyTable.texture;\n  }\n\n  const shaderDestination = propertyInfo.shaderDestination;\n  if (ShaderDestination.includesVertexShader(shaderDestination)) {\n    shaderBuilder.addStructField(\n      MetadataPipelineStage.STRUCT_ID_METADATA_VS,\n      glslType,\n      metadataVariable,\n    );\n  }\n\n  if (ShaderDestination.includesFragmentShader(shaderDestination)) {\n    shaderBuilder.addStructField(\n      MetadataPipelineStage.STRUCT_ID_METADATA_FS,\n      glslType,\n      metadataVariable,\n    );\n  }\n\n  const featureIdExpression = `featureIds.${featureIdVariableName}`;\n  const texCoordExpression = `ivec2(${featureIdExpression}, ${propertyInfoIndex})`;\n  const textureSampleExpression = `texelFetch(${textureUniformName}, ${texCoordExpression}, 0)`;\n  const classProperty = propertyInfo.classProperty;\n\n  const unpackedVariable = classProperty.unpackTextureInShader(\n    textureSampleExpression,\n    `rgba`,\n    metadataVariable,\n    initializationLines,\n  );\n\n  const transformedValue = addValueTransformUniforms({\n    valueExpression: unpackedVariable,\n    renderResources: renderResources,\n    glslType: glslType,\n    metadataVariable: metadataVariable,\n    shaderDestination: shaderDestination,\n    // If the property is on the schema but not used by this primitive, value transforms come from class schema property\n    property: property ?? classProperty,\n  });\n\n  const finalAssignment = `metadata.${metadataVariable} = ${transformedValue};`;\n  initializationLines.push(finalAssignment);\n\n  if (ShaderDestination.includesVertexShader(shaderDestination)) {\n    shaderBuilder.addFunctionLines(\n      MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_VS,\n      initializationLines,\n    );\n  }\n\n  if (ShaderDestination.includesFragmentShader(shaderDestination)) {\n    shaderBuilder.addFunctionLines(\n      MetadataPipelineStage.FUNCTION_ID_INITIALIZE_METADATA_FS,\n      initializationLines,\n    );\n  }\n}\n\n/**\n * Construct GLSL assignment statements to set metadata spec values in a struct\n * @param {object[]} fieldNames An object with the following properties:\n * @param {string} fieldNames[].specName The name of the property in the spec\n * @param {string} fieldNames[].shaderName The name of the property in the shader\n * @param {object} values A source of property values, keyed on fieldNames[].specName\n * @param {string} struct The name of the struct to which values will be assigned\n * @param {string} type The type of the values to be assigned\n * @returns {Array<{name: string, value: any}>} Objects containing the property name (in the shader) and a GLSL assignment statement for the property value\n * @private\n */\nfunction getStructAssignments(fieldNames, values, struct, type) {\n  function constructAssignment(field) {\n    const value = values[field.specName];\n    if (defined(value)) {\n      // Note: template literals will coerce arrays to strings, if needed (e.g. if the metadata type is a vecN or an array, or even an array of vecN)\n      // In any case, the resulting string ends up as a flattened, comma-separated list. For example: [[1,2], [3,4]] will end up as vec4(1,2,3,4), which is valid GLSL.\n      return `${struct}.${field.shaderName} = ${type}(${value});`;\n    }\n  }\n  return defined(values)\n    ? fieldNames.map(constructAssignment).filter(defined)\n    : [];\n}\n\n/**\n * Handle offset/scale transform for a property value\n * This wraps the GLSL value expression with a czm_valueTransform() call\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.valueExpression The GLSL value expression without the transform\n * @param {string} options.metadataVariable The name of the GLSL variable that will contain the property value\n * @param {string} options.glslType The GLSL type of the variable\n * @param {ShaderDestination} options.shaderDestination Which shader(s) use this variable\n * @param {PrimitiveRenderResources} options.renderResources The render resources for this primitive\n * @param {(PropertyAttributeProperty|PropertyTextureProperty|MetadataTableProperty|MetadataClassProperty)} options.property The property from which the value is derived\n * @returns {string} A wrapped GLSL value expression\n * @private\n */\nfunction addValueTransformUniforms(options) {\n  const { valueExpression, property } = options;\n\n  if (!property.hasValueTransform) {\n    return valueExpression;\n  }\n\n  const metadataVariable = options.metadataVariable;\n  const offsetUniformName = `u_${metadataVariable}_offset`;\n  const scaleUniformName = `u_${metadataVariable}_scale`;\n\n  const { shaderBuilder, uniformMap } = options.renderResources;\n  const { glslType, shaderDestination } = options;\n  shaderBuilder.addUniform(glslType, offsetUniformName, shaderDestination);\n  shaderBuilder.addUniform(glslType, scaleUniformName, shaderDestination);\n\n  // Note: if property is an instance of MetadataClassProperty, offset and scale will be the default values set on the class definition.\n  // Otherwise, the spec allows them to be overridden per-property instance.\n  const { offset, scale } = property;\n  uniformMap[offsetUniformName] = () => offset;\n  uniformMap[scaleUniformName] = () => scale;\n\n  return `czm_valueTransform(${offsetUniformName}, ${scaleUniformName}, ${valueExpression})`;\n}\n\nfunction collectMetadataUsedByOtherStages(model, primitive) {\n  const usedInVertex = new Set();\n  const usedInFragment = new Set();\n\n  collectMetadataUsedInCustomShader(model, usedInVertex, usedInFragment);\n  collectMetadataUsedInPointCloudStyling(\n    model,\n    primitive,\n    usedInVertex,\n    usedInFragment,\n  );\n\n  return {\n    usedInVertex,\n    usedInFragment,\n  };\n}\n\nfunction collectMetadataUsedInCustomShader(\n  model,\n  usedInVertex,\n  usedInFragment,\n) {\n  const customShader = model.customShader;\n  if (!defined(customShader)) {\n    return;\n  }\n\n  const fragmentMetadataSet =\n    customShader.usedVariablesFragment?.metadataSet ?? {};\n  for (const propertyId in fragmentMetadataSet) {\n    if (fragmentMetadataSet.hasOwnProperty(propertyId)) {\n      usedInFragment.add(propertyId);\n    }\n  }\n\n  const vertexMetadataSet = customShader.usedVariablesVertex?.metadataSet ?? {};\n  for (const propertyId in vertexMetadataSet) {\n    if (vertexMetadataSet.hasOwnProperty(propertyId)) {\n      usedInVertex.add(propertyId);\n    }\n  }\n}\n\nfunction collectMetadataUsedInPointCloudStyling(\n  model,\n  primitive,\n  usedInVertex,\n  usedInFragment,\n) {\n  const style = model.style;\n  const hasPointCloudStyle =\n    defined(style) && primitive.primitiveType === PrimitiveType.POINTS;\n  if (!hasPointCloudStyle) {\n    return;\n  }\n\n  const colorVariables = style.color?.getVariables() ?? [];\n  for (const propertyId of colorVariables) {\n    usedInVertex.add(propertyId);\n    usedInFragment.add(propertyId);\n  }\n\n  const showVariables = style.show?.getVariables() ?? [];\n  for (const propertyId of showVariables) {\n    usedInVertex.add(propertyId);\n    usedInFragment.add(propertyId);\n  }\n\n  // Only used in vertex shader\n  const pointSizeVariables = style.pointSize?.getVariables() ?? [];\n  for (const propertyId of pointSizeVariables) {\n    usedInVertex.add(propertyId);\n  }\n}\n\n/**\n * Determines the shader destination(s) for a given property based on its use in other pipeline stages.\n *\n * @param {object} propertyId The ID of the property to check\n * @param {object} usedMetadataProperties Metadata properties used in the primitive's shader by other stages\n * @returns {ShaderDestination} The shader destination(s) for the property\n * @private\n */\nfunction propertyDestination(propertyId, usedMetadataProperties) {\n  const fragmentDestination = usedMetadataProperties.usedInFragment.has(\n    propertyId,\n  )\n    ? ShaderDestination.FRAGMENT\n    : ShaderDestination.NONE;\n  const vertexDestination = usedMetadataProperties.usedInVertex.has(propertyId)\n    ? ShaderDestination.VERTEX\n    : ShaderDestination.NONE;\n\n  return ShaderDestination.union(fragmentDestination, vertexDestination);\n}\n\nexport default MetadataPipelineStage;\n","import BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cartographic from \"../../Core/Cartographic.js\";\nimport Check from \"../../Core/Check.js\";\nimport Credit from \"../../Core/Credit.js\";\nimport Color from \"../../Core/Color.js\";\nimport defined from \"../../Core/defined.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DistanceDisplayCondition from \"../../Core/DistanceDisplayCondition.js\";\nimport Ellipsoid from \"../../Core/Ellipsoid.js\";\nimport Event from \"../../Core/Event.js\";\nimport Matrix3 from \"../../Core/Matrix3.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Resource from \"../../Core/Resource.js\";\nimport RuntimeError from \"../../Core/RuntimeError.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport ClippingPlaneCollection from \"../ClippingPlaneCollection.js\";\nimport ClippingPolygonCollection from \"../ClippingPolygonCollection.js\";\nimport DynamicEnvironmentMapManager from \"../DynamicEnvironmentMapManager.js\";\nimport ColorBlendMode from \"../ColorBlendMode.js\";\nimport GltfLoader from \"../GltfLoader.js\";\nimport HeightReference, {\n  isHeightReferenceRelative,\n} from \"../HeightReference.js\";\nimport ImageBasedLighting from \"../ImageBasedLighting.js\";\nimport PointCloudShading from \"../PointCloudShading.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport SceneTransforms from \"../SceneTransforms.js\";\nimport ShadowMode from \"../ShadowMode.js\";\nimport SplitDirection from \"../SplitDirection.js\";\nimport B3dmLoader from \"./B3dmLoader.js\";\nimport GeoJsonLoader from \"./GeoJsonLoader.js\";\nimport I3dmLoader from \"./I3dmLoader.js\";\nimport ModelAnimationCollection from \"./ModelAnimationCollection.js\";\nimport ModelFeatureTable from \"./ModelFeatureTable.js\";\nimport ModelSceneGraph from \"./ModelSceneGraph.js\";\nimport ModelStatistics from \"./ModelStatistics.js\";\nimport ModelType from \"./ModelType.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport oneTimeWarning from \"../../Core/oneTimeWarning.js\";\nimport PntsLoader from \"./PntsLoader.js\";\nimport StyleCommandsNeeded from \"./StyleCommandsNeeded.js\";\nimport pickModel from \"./pickModel.js\";\nimport ModelImagery from \"./ModelImagery.js\";\n\n/**\n * <div class=\"notice\">\n * To construct a Model, call {@link Model.fromGltfAsync}. Do not call the constructor directly.\n * </div>\n * A 3D model based on glTF, the runtime asset format for WebGL, OpenGL ES, and OpenGL.\n * <p>\n * Cesium supports glTF assets with the following extensions:\n * <ul>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/AGI_articulations/README.md|AGI_articulations}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Vendor/CESIUM_RTC/README.md|CESIUM_RTC}\n *  </li>\n *  <li>\n *  {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_instance_features|EXT_instance_features}\n *  </li>\n *  <li>\n *  {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_mesh_features|EXT_mesh_features}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Vendor/EXT_mesh_gpu_instancing|EXT_mesh_gpu_instancing}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/pull/2514|EXT_mesh_primitive_restart}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Vendor/EXT_meshopt_compression|EXT_meshopt_compression}\n *  </li>\n *  <li>\n *  {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Vendor/EXT_texture_webp|EXT_texture_webp}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_draco_mesh_compression/README.md|KHR_draco_mesh_compression}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Archived/KHR_techniques_webgl/README.md|KHR_techniques_webgl}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/blob/main/extensions/1.0/Khronos/KHR_materials_common/README.md|KHR_materials_common}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness|KHR_materials_pbrSpecularGlossiness}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit/README.md|KHR_materials_unlit}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_mesh_quantization|KHR_mesh_quantization}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_basisu|KHR_texture_basisu}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_transform/README.md|KHR_texture_transform}\n *  </li>\n *  <li>\n *  {@link https://github.com/KhronosGroup/glTF/blob/main/extensions/1.0/Vendor/WEB3D_quantized_attributes/README.md|WEB3D_quantized_attributes}\n *  </li>\n *  <li>\n *  {@link https://nsgreg.nga.mil/csmwg.jsp|NGA_gpm_local (experimental)}\n *  </li>\n * </ul>\n * </p>\n * <p>\n * Note: for models with compressed textures using the KHR_texture_basisu extension, we recommend power of 2 textures in both dimensions\n * for maximum compatibility. This is because some samplers require power of 2 textures ({@link https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL|Using textures in WebGL})\n * and KHR_texture_basisu requires multiple of 4 dimensions ({@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_basisu/README.md#additional-requirements|KHR_texture_basisu additional requirements}).\n * </p>\n *\n * @alias Model\n * @internalConstructor\n *\n * @privateParam {object} options Object with the following properties:\n * @privateParam {ResourceLoader} options.loader The loader used to load resources for this model.\n * @privateParam {ModelType} options.type Type of this model, to distinguish individual glTF files from 3D Tiles internally.\n * @privateParam {Resource} options.resource The Resource to the 3D model.\n * @privateParam {boolean} [options.show=true] Whether or not to render the model.\n * @privateParam {Matrix4} [options.modelMatrix=Matrix4.IDENTITY]  The 4x4 transformation matrix that transforms the model from model to world coordinates.\n * @privateParam {number} [options.scale=1.0] A uniform scale applied to this model.\n * @privateParam {boolean} [options.enableVerticalExaggeration=true] If <code>true</code>, the model is exaggerated along the ellipsoid normal when {@link Scene.verticalExaggeration} is set to a value other than <code>1.0</code>.\n * @privateParam {number} [options.minimumPixelSize=0.0] The approximate minimum pixel size of the model regardless of zoom.\n * @privateParam {number} [options.maximumScale] The maximum scale size of a model. An upper limit for minimumPixelSize.\n * @privateParam {object} [options.id] A user-defined object to return when the model is picked with {@link Scene#pick}.\n * @privateParam {boolean} [options.allowPicking=true] When <code>true</code>, each primitive is pickable with {@link Scene#pick}.\n * @privateParam {boolean} [options.clampAnimations=true] Determines if the model's animations should hold a pose over frames where no keyframes are specified.\n * @privateParam {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the model casts or receives shadows from light sources.\n * @privateParam {boolean} [options.debugShowBoundingVolume=false] For debugging only. Draws the bounding sphere for each draw command in the model.\n * @privateParam {boolean} [options.enableDebugWireframe=false] For debugging only. This must be set to true for debugWireframe to work in WebGL1. This cannot be set after the model has loaded.\n * @privateParam {boolean} [options.debugWireframe=false] For debugging only. Draws the model in wireframe. Will only work for WebGL1 if enableDebugWireframe is set to true.\n * @privateParam {boolean} [options.cull=true]  Whether or not to cull the model using frustum/horizon culling. If the model is part of a 3D Tiles tileset, this property will always be false, since the 3D Tiles culling system is used.\n * @privateParam {boolean} [options.opaquePass=Pass.OPAQUE] The pass to use in the {@link DrawCommand} for the opaque portions of the model.\n * @privateParam {CustomShader} [options.customShader] A custom shader. This will add user-defined GLSL code to the vertex and fragment shaders. Using custom shaders with a {@link Cesium3DTileStyle} may lead to undefined behavior.\n * @privateParam {Cesium3DTileContent} [options.content] The tile content this model belongs to. This property will be undefined if model is not loaded as part of a tileset.\n * @privateParam {HeightReference} [options.heightReference=HeightReference.NONE] Determines how the model is drawn relative to terrain.\n * @privateParam {Scene} [options.scene] Must be passed in for models that use the height reference property.\n * @privateParam {DistanceDisplayCondition} [options.distanceDisplayCondition] The condition specifying at what distance from the camera that this model will be displayed.\n * @privateParam {Color} [options.color] A color that blends with the model's rendered color.\n * @privateParam {ColorBlendMode} [options.colorBlendMode=ColorBlendMode.HIGHLIGHT] Defines how the color blends with the model.\n * @privateParam {number} [options.colorBlendAmount=0.5] Value used to determine the color strength when the <code>colorBlendMode</code> is <code>MIX</code>. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two.\n * @privateParam {Color} [options.silhouetteColor=Color.RED] The silhouette color. If more than 256 models have silhouettes enabled, there is a small chance that overlapping models will have minor artifacts.\n * @privateParam {number} [options.silhouetteSize=0.0] The size of the silhouette in pixels.\n * @privateParam {boolean} [options.enableShowOutline=true] Whether to enable outlines for models using the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. This can be set to false to avoid the additional processing of geometry at load time. When false, the showOutlines and outlineColor options are ignored.\n * @privateParam {boolean} [options.showOutline=true] Whether to display the outline for models using the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. When true, outlines are displayed. When false, outlines are not displayed.\n * @privateParam {Color} [options.outlineColor=Color.BLACK] The color to use when rendering outlines.\n * @privateParam {ClippingPlaneCollection} [options.clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n * @privateParam {ClippingPolygonCollection} [options.clippingPolygons] The {@link ClippingPolygonCollection} used to selectively disable rendering the model.\n * @privateParam {Cartesian3} [options.lightColor] The light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n * @privateParam {ImageBasedLighting} [options.imageBasedLighting] The properties for managing image-based lighting on this model.\n * @privateParam {DynamicEnvironmentMapManager.ConstructorOptions} [options.environmentMapOptions] The properties for managing dynamic environment maps on this model. Affects lighting.\n * @privateParam {boolean} [options.backFaceCulling=true] Whether to cull back-facing geometry. When true, back face culling is determined by the material's doubleSided property; when false, back face culling is disabled. Back faces are not culled if the model's color is translucent.\n * @privateParam {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.\n * @privateParam {boolean} [options.showCreditsOnScreen=false] Whether to display the credits of this model on screen.\n * @privateParam {SplitDirection} [options.splitDirection=SplitDirection.NONE] The {@link SplitDirection} split to apply to this model.\n * @privateParam {boolean} [options.projectTo2D=false] Whether to accurately project the model's positions in 2D. If this is true, the model will be projected accurately to 2D, but it will use more memory to do so. If this is false, the model will use less memory and will still render in 2D / CV mode, but its positions may be inaccurate. This disables minimumPixelSize and prevents future modification to the model matrix. This also cannot be set after the model has loaded.\n * @privateParam {boolean} [options.enablePick=false] Whether to allow CPU picking with <code>pick</code> when not using WebGL 2 or above. If using WebGL 2 or above, this option will be ignored. If using WebGL 1 and this is true, the <code>pick</code> operation will work correctly, but it will use more memory to do so. If running with WebGL 1 and this is false, the model will use less memory, but <code>pick</code> will always return <code>undefined</code>. This cannot be set after the model has loaded.\n * @privateParam {string|number} [options.featureIdLabel=\"featureId_0\"] Label of the feature ID set to use for picking and styling. For EXT_mesh_features, this is the feature ID's label property, or \"featureId_N\" (where N is the index in the featureIds array) when not specified. EXT_feature_metadata did not have a label field, so such feature ID sets are always labeled \"featureId_N\" where N is the index in the list of all feature Ids, where feature ID attributes are listed before feature ID textures. If featureIdLabel is an integer N, it is converted to the string \"featureId_N\" automatically. If both per-primitive and per-instance feature IDs are present, the instance feature IDs take priority.\n * @privateParam {string|number} [options.instanceFeatureIdLabel=\"instanceFeatureId_0\"] Label of the instance feature ID set used for picking and styling. If instanceFeatureIdLabel is set to an integer N, it is converted to the string \"instanceFeatureId_N\" automatically. If both per-primitive and per-instance feature IDs are present, the instance feature IDs take priority.\n * @privateParam {object} [options.pointCloudShading] Options for constructing a {@link PointCloudShading} object to control point attenuation based on geometric error and lighting.\n * @privateParam {ClassificationType} [options.classificationType] Determines whether terrain, 3D Tiles or both will be classified by this model. This cannot be set after the model has loaded.\n *\n *\n * @see Model.fromGltfAsync\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=3d-models|Cesium Sandcastle Models Demo}\n */\nfunction Model(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.loader\", options.loader);\n  Check.typeOf.object(\"options.resource\", options.resource);\n  //>>includeEnd('debug');\n\n  /**\n   * The loader used to load resources for this model.\n   *\n   * @type {ResourceLoader}\n   * @private\n   */\n  this._loader = options.loader;\n  this._resource = options.resource;\n\n  /**\n   * Type of this model, to distinguish individual glTF files from 3D Tiles\n   * internally.\n   *\n   * @type {ModelType}\n   * @readonly\n   *\n   * @private\n   */\n  this.type = options.type ?? ModelType.GLTF;\n\n  /**\n   * The 4x4 transformation matrix that transforms the model from model to world coordinates.\n   * When this is the identity matrix, the model is drawn in world coordinates, i.e., Earth's Cartesian WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * @type {Matrix4}\n\n   * @default {@link Matrix4.IDENTITY}\n   *\n   * @example\n   * const origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n   * m.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._modelMatrix = Matrix4.clone(this.modelMatrix);\n  this._scale = options.scale ?? 1.0;\n\n  this._minimumPixelSize = options.minimumPixelSize ?? 0.0;\n\n  this._maximumScale = options.maximumScale;\n\n  /**\n   * The scale value after being clamped by the maximum scale parameter.\n   * Used to adjust bounding spheres without repeated calculation.\n   *\n   * @type {number}\n   * @private\n   */\n  this._clampedScale = defined(this._maximumScale)\n    ? Math.min(this._scale, this._maximumScale)\n    : this._scale;\n\n  this._computedScale = this._clampedScale;\n\n  /**\n   * Whether or not the ModelSceneGraph should call updateModelMatrix.\n   * This will be true if any of the model matrix, scale, minimum pixel size, or maximum scale are dirty.\n   *\n   * @type {number}\n   * @private\n   */\n  this._updateModelMatrix = false;\n\n  /**\n   * If defined, this matrix is used to transform miscellaneous properties like\n   * clipping planes and image-based lighting instead of the modelMatrix. This is\n   * so that when models are part of a tileset, these properties get transformed\n   * relative to a common reference (such as the root).\n   *\n   * @type {Matrix4}\n   * @private\n   */\n  this.referenceMatrix = undefined;\n  this._iblReferenceFrameMatrix = Matrix3.clone(Matrix3.IDENTITY); // Derived from reference matrix and the current view matrix\n\n  this._resourcesLoaded = false;\n  this._drawCommandsBuilt = false;\n\n  this._ready = false;\n  this._customShader = options.customShader;\n  this._content = options.content;\n\n  this._texturesLoaded = false;\n  this._defaultTexture = undefined;\n\n  this._activeAnimations = new ModelAnimationCollection(this);\n  this._clampAnimations = options.clampAnimations ?? true;\n\n  // This flag is true when the Cesium API, not a glTF animation, changes\n  // the transform of a node in the model.\n  this._userAnimationDirty = false;\n\n  this._id = options.id;\n  this._idDirty = false;\n\n  this._color = Color.clone(options.color);\n  this._colorBlendMode = options.colorBlendMode ?? ColorBlendMode.HIGHLIGHT;\n  this._colorBlendAmount = options.colorBlendAmount ?? 0.5;\n\n  const silhouetteColor = options.silhouetteColor ?? Color.RED;\n  this._silhouetteColor = Color.clone(silhouetteColor);\n  this._silhouetteSize = options.silhouetteSize ?? 0.0;\n  this._silhouetteDirty = false;\n\n  // If silhouettes are used for the model, this will be set to the number\n  // of the stencil buffer used for rendering the silhouette. This is set\n  // by ModelSilhouettePipelineStage, not by Model itself.\n  this._silhouetteId = undefined;\n\n  this._cull = options.cull ?? true;\n  this._opaquePass = options.opaquePass ?? Pass.OPAQUE;\n  this._allowPicking = options.allowPicking ?? true;\n  this._show = options.show ?? true;\n\n  this._style = undefined;\n  this._styleDirty = false;\n  this._styleCommandsNeeded = undefined;\n\n  let featureIdLabel = options.featureIdLabel ?? \"featureId_0\";\n  if (typeof featureIdLabel === \"number\") {\n    featureIdLabel = `featureId_${featureIdLabel}`;\n  }\n  this._featureIdLabel = featureIdLabel;\n\n  let instanceFeatureIdLabel =\n    options.instanceFeatureIdLabel ?? \"instanceFeatureId_0\";\n  if (typeof instanceFeatureIdLabel === \"number\") {\n    instanceFeatureIdLabel = `instanceFeatureId_${instanceFeatureIdLabel}`;\n  }\n  this._instanceFeatureIdLabel = instanceFeatureIdLabel;\n\n  this._featureTables = [];\n  this._featureTableId = undefined;\n  this._featureTableIdDirty = true;\n\n  // Keeps track of resources that need to be destroyed when the draw commands are reset.\n  this._pipelineResources = [];\n\n  // Keeps track of resources that need to be destroyed when the Model is destroyed.\n  this._modelResources = [];\n\n  // Keeps track of the pick IDs for this model. These are stored and destroyed in the\n  // pipeline resources array; the purpose of this array is to separate them from other\n  // resources and update their ID objects when necessary.\n  this._pickIds = [];\n\n  // The model's bounding sphere and its initial radius are computed\n  // in ModelSceneGraph.\n  this._boundingSphere = new BoundingSphere();\n  this._initialRadius = undefined;\n\n  this._heightReference = options.heightReference ?? HeightReference.NONE;\n  this._heightDirty = this._heightReference !== HeightReference.NONE;\n  this._removeUpdateHeightCallback = undefined;\n\n  this._enableVerticalExaggeration = options.enableVerticalExaggeration ?? true;\n  this._hasVerticalExaggeration = false;\n\n  this._clampedModelMatrix = undefined; // For use with height reference\n\n  const scene = options.scene;\n  if (defined(scene) && defined(scene.terrainProviderChanged)) {\n    this._terrainProviderChangedCallback =\n      scene.terrainProviderChanged.addEventListener(() => {\n        this._heightDirty = true;\n      });\n  }\n  this._scene = scene;\n\n  this._distanceDisplayCondition = options.distanceDisplayCondition;\n\n  const pointCloudShading = new PointCloudShading(options.pointCloudShading);\n  this._pointCloudShading = pointCloudShading;\n  this._attenuation = pointCloudShading.attenuation;\n  this._pointCloudBackFaceCulling = pointCloudShading.backFaceCulling;\n\n  // If the given clipping planes don't have an owner, make this model its owner.\n  // Otherwise, the clipping planes are passed down from a tileset.\n  const clippingPlanes = options.clippingPlanes;\n  if (defined(clippingPlanes) && clippingPlanes.owner === undefined) {\n    ClippingPlaneCollection.setOwner(clippingPlanes, this, \"_clippingPlanes\");\n  } else {\n    this._clippingPlanes = clippingPlanes;\n  }\n  this._clippingPlanesState = 0; // If this value changes, the shaders need to be regenerated.\n  this._clippingPlanesMatrix = Matrix4.clone(Matrix4.IDENTITY); // Derived from reference matrix and the current view matrix\n\n  // If the given clipping polygons don't have an owner, make this model its owner.\n  // Otherwise, the clipping polygons are passed down from a tileset.\n  const clippingPolygons = options.clippingPolygons;\n  if (defined(clippingPolygons) && clippingPolygons.owner === undefined) {\n    ClippingPolygonCollection.setOwner(\n      clippingPolygons,\n      this,\n      \"_clippingPolygons\",\n    );\n  } else {\n    this._clippingPolygons = clippingPolygons;\n  }\n  this._clippingPolygonsState = 0; // If this value changes, the shaders need to be regenerated.\n\n  this._modelImagery = new ModelImagery(this);\n\n  this._lightColor = Cartesian3.clone(options.lightColor);\n\n  this._imageBasedLighting = defined(options.imageBasedLighting)\n    ? options.imageBasedLighting\n    : new ImageBasedLighting();\n  this._shouldDestroyImageBasedLighting = !defined(options.imageBasedLighting);\n\n  this._environmentMapManager = undefined;\n  const environmentMapManager = new DynamicEnvironmentMapManager(\n    options.environmentMapOptions,\n  );\n  DynamicEnvironmentMapManager.setOwner(\n    environmentMapManager,\n    this,\n    \"_environmentMapManager\",\n  );\n\n  this._backFaceCulling = options.backFaceCulling ?? true;\n  this._backFaceCullingDirty = false;\n\n  this._shadows = options.shadows ?? ShadowMode.ENABLED;\n  this._shadowsDirty = false;\n\n  this._debugShowBoundingVolumeDirty = false;\n  this._debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  this._enableDebugWireframe = options.enableDebugWireframe ?? false;\n  this._enableShowOutline = options.enableShowOutline ?? true;\n  this._debugWireframe = options.debugWireframe ?? false;\n\n  // Warning for improper setup of debug wireframe\n  if (\n    this._debugWireframe === true &&\n    this._enableDebugWireframe === false &&\n    this.type === ModelType.GLTF\n  ) {\n    oneTimeWarning(\n      \"model-debug-wireframe-ignored\",\n      \"enableDebugWireframe must be set to true in Model.fromGltf, otherwise debugWireframe will be ignored.\",\n    );\n  }\n\n  // Credit specified by the user.\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n\n  this._credits = [];\n  this._credit = credit;\n\n  // Credits to be added from the Resource (if it is an IonResource)\n  this._resourceCredits = [];\n\n  // Credits parsed from the glTF by GltfLoader.\n  this._gltfCredits = [];\n\n  this._showCreditsOnScreen = options.showCreditsOnScreen ?? false;\n  this._showCreditsOnScreenDirty = true;\n\n  this._splitDirection = options.splitDirection ?? SplitDirection.NONE;\n\n  this._enableShowOutline = options.enableShowOutline ?? true;\n\n  /**\n   * Whether to display the outline for models using the\n   * {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension.\n   * When true, outlines are displayed. When false, outlines are not displayed.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.showOutline = options.showOutline ?? true;\n\n  /**\n   * The color to use when rendering outlines.\n   *\n   * @type {Color}\n   *\n   * @default Color.BLACK\n   */\n  this.outlineColor = options.outlineColor ?? Color.BLACK;\n\n  this._classificationType = options.classificationType;\n\n  this._statistics = new ModelStatistics();\n\n  this._sceneMode = undefined;\n  this._projectTo2D = options.projectTo2D ?? false;\n  this._enablePick = options.enablePick ?? false;\n\n  this._fogRenderable = undefined;\n\n  this._skipLevelOfDetail = false;\n  this._ignoreCommands = options.ignoreCommands ?? false;\n\n  this._errorEvent = new Event();\n  this._readyEvent = new Event();\n  this._texturesReadyEvent = new Event();\n\n  this._sceneGraph = undefined;\n  this._nodesByName = {}; // Stores the nodes by their names in the glTF.\n\n  /**\n   * Used for picking primitives that wrap a model.\n   *\n   * @private\n   */\n  this.pickObject = options.pickObject;\n}\n\nfunction handleError(model, error) {\n  if (model._errorEvent.numberOfListeners > 0) {\n    model._errorEvent.raiseEvent(error);\n    return;\n  }\n\n  console.log(error);\n}\n\nfunction createModelFeatureTables(model, structuralMetadata) {\n  const featureTables = model._featureTables;\n\n  const propertyTables = structuralMetadata.propertyTables;\n  const length = propertyTables.length;\n  for (let i = 0; i < length; i++) {\n    const propertyTable = propertyTables[i];\n    const modelFeatureTable = new ModelFeatureTable({\n      model: model,\n      propertyTable: propertyTable,\n    });\n\n    featureTables.push(modelFeatureTable);\n  }\n\n  return featureTables;\n}\n\nfunction selectFeatureTableId(components, model) {\n  const featureIdLabel = model._featureIdLabel;\n  const instanceFeatureIdLabel = model._instanceFeatureIdLabel;\n\n  let i, j;\n  let featureIdAttribute;\n\n  let node;\n  // Scan the nodes till we find one with instances, get the feature table ID\n  // if the feature ID attribute of the user-selected index is present.\n  for (i = 0; i < components.nodes.length; i++) {\n    node = components.nodes[i];\n    if (defined(node.instances)) {\n      featureIdAttribute = ModelUtility.getFeatureIdsByLabel(\n        node.instances.featureIds,\n        instanceFeatureIdLabel,\n      );\n      if (\n        defined(featureIdAttribute) &&\n        defined(featureIdAttribute.propertyTableId)\n      ) {\n        return featureIdAttribute.propertyTableId;\n      }\n    }\n  }\n\n  // Scan the primitives till we find one with textures or attributes, get the feature table ID\n  // if the feature ID attribute/texture of the user-selected index is present.\n  for (i = 0; i < components.nodes.length; i++) {\n    node = components.nodes[i];\n    for (j = 0; j < node.primitives.length; j++) {\n      const primitive = node.primitives[j];\n      const featureIds = ModelUtility.getFeatureIdsByLabel(\n        primitive.featureIds,\n        featureIdLabel,\n      );\n\n      if (defined(featureIds)) {\n        return featureIds.propertyTableId;\n      }\n    }\n  }\n\n  // If there's only one feature table, then select it by default. This is\n  // to ensure backwards compatibility with the older handling of b3dm models.\n  if (model._featureTables.length === 1) {\n    return 0;\n  }\n}\n\n/**\n *  Returns whether the alpha state has changed between invisible,\n *  translucent, or opaque.\n *\n *  @private\n */\nfunction isColorAlphaDirty(currentColor, previousColor) {\n  if (!defined(currentColor) && !defined(previousColor)) {\n    return false;\n  }\n\n  if (defined(currentColor) !== defined(previousColor)) {\n    return true;\n  }\n\n  const currentAlpha = currentColor.alpha;\n  const previousAlpha = previousColor.alpha;\n  return (\n    Math.floor(currentAlpha) !== Math.floor(previousAlpha) ||\n    Math.ceil(currentAlpha) !== Math.ceil(previousAlpha)\n  );\n}\n\nObject.defineProperties(Model.prototype, {\n  /**\n   * When <code>true</code>, this model is ready to render, i.e., the external binary, image,\n   * and shader files were downloaded and the WebGL resources were created.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the model encounters an asynchronous rendering error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link ModelError}.\n   * @memberof Model.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the model is loaded and ready for rendering, i.e. when the external resources\n   * have been downloaded and the WebGL resources are created. Event listeners\n   * are passed an instance of the {@link Model}.\n   *\n   * <p>\n   * If {@link Model.incrementallyLoadTextures} is true, this event will be raised before all textures are loaded and ready for rendering. Subscribe to {@link Model.texturesReadyEvent} to be notified when the textures are ready.\n   * </p>\n   *\n   * @memberof Model.prototype\n   * @type {Event}\n   * @readonly\n   */\n  readyEvent: {\n    get: function () {\n      return this._readyEvent;\n    },\n  },\n\n  /**\n   * Returns true if textures are loaded separately from the other glTF resources.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  incrementallyLoadTextures: {\n    get: function () {\n      return this._loader.incrementallyLoadTextures ?? false;\n    },\n  },\n\n  /**\n   * Gets an event that, if {@link Model.incrementallyLoadTextures} is true, is raised when the model textures are loaded and ready for rendering, i.e. when the external resources\n   * have been downloaded and the WebGL resources are created. Event listeners\n   * are passed an instance of the {@link Model}.\n   *\n   * @memberof Model.prototype\n   * @type {Event}\n   * @readonly\n   */\n  texturesReadyEvent: {\n    get: function () {\n      return this._texturesReadyEvent;\n    },\n  },\n\n  /**\n   * @private\n   */\n  loader: {\n    get: function () {\n      return this._loader;\n    },\n  },\n\n  /**\n   * Get the estimated memory usage statistics for this model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {ModelStatistics}\n   * @readonly\n   *\n   * @private\n   */\n  statistics: {\n    get: function () {\n      return this._statistics;\n    },\n  },\n\n  /**\n   * The currently playing glTF animations.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {ModelAnimationCollection}\n   * @readonly\n   */\n  activeAnimations: {\n    get: function () {\n      return this._activeAnimations;\n    },\n  },\n\n  /**\n   * Determines if the model's animations should hold a pose over frames where no keyframes are specified.\n   *\n   * @memberof Model.prototype\n   * @type {boolean}\n   *\n   * @default true\n   */\n  clampAnimations: {\n    get: function () {\n      return this._clampAnimations;\n    },\n    set: function (value) {\n      this._clampAnimations = value;\n    },\n  },\n\n  /**\n   * Whether or not to cull the model using frustum/horizon culling. If the model is part of a 3D Tiles tileset, this property\n   * will always be false, since the 3D Tiles culling system is used.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  cull: {\n    get: function () {\n      return this._cull;\n    },\n  },\n\n  /**\n   * The pass to use in the {@link DrawCommand} for the opaque portions of the model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Pass}\n   * @readonly\n   *\n   * @private\n   */\n  opaquePass: {\n    get: function () {\n      return this._opaquePass;\n    },\n  },\n\n  /**\n   * Point cloud shading settings for controlling point cloud attenuation\n   * and lighting. For 3D Tiles, this is inherited from the\n   * {@link Cesium3DTileset}.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {PointCloudShading}\n   */\n  pointCloudShading: {\n    get: function () {\n      return this._pointCloudShading;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"pointCloudShading\", value);\n      //>>includeEnd('debug');\n      if (value !== this._pointCloudShading) {\n        this.resetDrawCommands();\n      }\n      this._pointCloudShading = value;\n    },\n  },\n\n  /**\n   * The model's custom shader, if it exists. Using custom shaders with a {@link Cesium3DTileStyle}\n   * may lead to undefined behavior.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {CustomShader}\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  customShader: {\n    get: function () {\n      return this._customShader;\n    },\n    set: function (value) {\n      if (value !== this._customShader) {\n        this.resetDrawCommands();\n      }\n      this._customShader = value;\n    },\n  },\n\n  /**\n   * The scene graph of this model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {ModelSceneGraph}\n   * @private\n   */\n  sceneGraph: {\n    get: function () {\n      return this._sceneGraph;\n    },\n  },\n\n  /**\n   * The tile content this model belongs to, if it is loaded as part of a {@link Cesium3DTileset}.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Cesium3DTileContent}\n   * @readonly\n   *\n   * @private\n   */\n  content: {\n    get: function () {\n      return this._content;\n    },\n  },\n\n  /**\n   * The height reference of the model, which determines how the model is drawn\n   * relative to terrain.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {HeightReference}\n   * @default {HeightReference.NONE}\n   *\n   */\n  heightReference: {\n    get: function () {\n      return this._heightReference;\n    },\n    set: function (value) {\n      if (value !== this._heightReference) {\n        this._heightDirty = true;\n      }\n      this._heightReference = value;\n    },\n  },\n\n  /**\n   * Gets or sets the distance display condition, which specifies at what distance\n   * from the camera this model will be displayed.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {DistanceDisplayCondition}\n   *\n   * @default undefined\n   *\n   */\n  distanceDisplayCondition: {\n    get: function () {\n      return this._distanceDisplayCondition;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\"far must be greater than near\");\n      }\n      //>>includeEnd('debug');\n      this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n        value,\n        this._distanceDisplayCondition,\n      );\n    },\n  },\n\n  /**\n   * The structural metadata from the EXT_structural_metadata extension\n   *\n   * @memberof Model.prototype\n   *\n   * @type {StructuralMetadata}\n   * @readonly\n   *\n   * @private\n   */\n  structuralMetadata: {\n    get: function () {\n      return this._sceneGraph.components.structuralMetadata;\n    },\n  },\n\n  /**\n   * The ID for the feature table to use for picking and styling in this model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {number}\n   *\n   * @private\n   */\n  featureTableId: {\n    get: function () {\n      return this._featureTableId;\n    },\n    set: function (value) {\n      this._featureTableId = value;\n    },\n  },\n\n  /**\n   * The feature tables for this model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Array}\n   * @readonly\n   *\n   * @private\n   */\n  featureTables: {\n    get: function () {\n      return this._featureTables;\n    },\n    set: function (value) {\n      this._featureTables = value;\n    },\n  },\n\n  /**\n   * A user-defined object that is returned when the model is picked.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {object}\n   *\n   * @default undefined\n   *\n   * @see Scene#pick\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n    set: function (value) {\n      if (value !== this._id) {\n        this._idDirty = true;\n      }\n\n      this._id = value;\n    },\n  },\n\n  /**\n   * When <code>true</code>, each primitive is pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  allowPicking: {\n    get: function () {\n      return this._allowPicking;\n    },\n  },\n\n  /**\n   * The style to apply to the features in the model. Cannot be applied if a {@link CustomShader} is also applied.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Cesium3DTileStyle}\n   */\n  style: {\n    get: function () {\n      return this._style;\n    },\n    set: function (value) {\n      this._style = value;\n      this._styleDirty = true;\n    },\n  },\n\n  /**\n   * The color to blend with the model's rendered color.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Color}\n   *\n   * @default undefined\n   */\n  color: {\n    get: function () {\n      return this._color;\n    },\n    set: function (value) {\n      if (isColorAlphaDirty(value, this._color)) {\n        this.resetDrawCommands();\n      }\n      this._color = Color.clone(value, this._color);\n    },\n  },\n\n  /**\n   * Defines how the color blends with the model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Cesium3DTileColorBlendMode|ColorBlendMode}\n   *\n   * @default ColorBlendMode.HIGHLIGHT\n   */\n  colorBlendMode: {\n    get: function () {\n      return this._colorBlendMode;\n    },\n    set: function (value) {\n      this._colorBlendMode = value;\n    },\n  },\n\n  /**\n   * Value used to determine the color strength when the <code>colorBlendMode</code> is <code>MIX</code>. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {number}\n   *\n   * @default 0.5\n   */\n  colorBlendAmount: {\n    get: function () {\n      return this._colorBlendAmount;\n    },\n    set: function (value) {\n      this._colorBlendAmount = value;\n    },\n  },\n\n  /**\n   * The silhouette color.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Color}\n   *\n   * @default Color.RED\n   */\n  silhouetteColor: {\n    get: function () {\n      return this._silhouetteColor;\n    },\n    set: function (value) {\n      if (!Color.equals(value, this._silhouetteColor)) {\n        const alphaDirty = isColorAlphaDirty(value, this._silhouetteColor);\n        this._silhouetteDirty = this._silhouetteDirty || alphaDirty;\n      }\n\n      this._silhouetteColor = Color.clone(value, this._silhouetteColor);\n    },\n  },\n\n  /**\n   * The size of the silhouette in pixels.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {number}\n   *\n   * @default 0.0\n   */\n  silhouetteSize: {\n    get: function () {\n      return this._silhouetteSize;\n    },\n    set: function (value) {\n      if (value !== this._silhouetteSize) {\n        const currentSize = this._silhouetteSize;\n        const sizeDirty =\n          (value > 0.0 && currentSize === 0.0) ||\n          (value === 0.0 && currentSize > 0.0);\n        this._silhouetteDirty = this._silhouetteDirty || sizeDirty;\n\n        // Back-face culling needs to be updated in case the silhouette size\n        // is greater than zero.\n        this._backFaceCullingDirty = this._backFaceCullingDirty || sizeDirty;\n      }\n\n      this._silhouetteSize = value;\n    },\n  },\n\n  /**\n   * Gets the model's bounding sphere in world space. This does not take into account\n   * glTF animations, skins, or morph targets. It also does not account for\n   * {@link Model#minimumPixelSize}.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      //>>includeStart('debug', pragmas.debug);\n      if (!this._ready) {\n        throw new DeveloperError(\n          \"The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const modelMatrix = defined(this._clampedModelMatrix)\n        ? this._clampedModelMatrix\n        : this.modelMatrix;\n      updateBoundingSphere(this, modelMatrix);\n\n      return this._boundingSphere;\n    },\n  },\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the model.\n   * </p>\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  debugShowBoundingVolume: {\n    get: function () {\n      return this._debugShowBoundingVolume;\n    },\n    set: function (value) {\n      if (this._debugShowBoundingVolume !== value) {\n        this._debugShowBoundingVolumeDirty = true;\n      }\n      this._debugShowBoundingVolume = value;\n    },\n  },\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the model in wireframe.\n   * </p>\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  debugWireframe: {\n    get: function () {\n      return this._debugWireframe;\n    },\n    set: function (value) {\n      if (this._debugWireframe !== value) {\n        this.resetDrawCommands();\n      }\n      this._debugWireframe = value;\n\n      // Warning for improper setup of debug wireframe\n      if (\n        this._debugWireframe === true &&\n        this._enableDebugWireframe === false &&\n        this.type === ModelType.GLTF\n      ) {\n        oneTimeWarning(\n          \"model-debug-wireframe-ignored\",\n          \"enableDebugWireframe must be set to true in Model.fromGltfAsync, otherwise debugWireframe will be ignored.\",\n        );\n      }\n    },\n  },\n\n  /**\n   * Whether or not to render the model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      this._show = value;\n    },\n  },\n\n  /**\n   * Label of the feature ID set to use for picking and styling.\n   * <p>\n   * For EXT_mesh_features, this is the feature ID's label property, or\n   * \"featureId_N\" (where N is the index in the featureIds array) when not\n   * specified. EXT_feature_metadata did not have a label field, so such\n   * feature ID sets are always labeled \"featureId_N\" where N is the index in\n   * the list of all feature Ids, where feature ID attributes are listed before\n   * feature ID textures.\n   * </p>\n   * <p>\n   * If featureIdLabel is set to an integer N, it is converted to\n   * the string \"featureId_N\" automatically. If both per-primitive and\n   * per-instance feature IDs are present, the instance feature IDs take\n   * priority.\n   * </p>\n   *\n   * @memberof Model.prototype\n   *\n   * @type {string}\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  featureIdLabel: {\n    get: function () {\n      return this._featureIdLabel;\n    },\n    set: function (value) {\n      // indices get converted into featureId_N\n      if (typeof value === \"number\") {\n        value = `featureId_${value}`;\n      }\n\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.string(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (value !== this._featureIdLabel) {\n        this._featureTableIdDirty = true;\n      }\n\n      this._featureIdLabel = value;\n    },\n  },\n\n  /**\n   * Label of the instance feature ID set used for picking and styling.\n   * <p>\n   * If instanceFeatureIdLabel is set to an integer N, it is converted to\n   * the string \"instanceFeatureId_N\" automatically.\n   * If both per-primitive and per-instance feature IDs are present, the\n   * instance feature IDs take priority.\n   * </p>\n   *\n   * @memberof Model.prototype\n   *\n   * @type {string}\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  instanceFeatureIdLabel: {\n    get: function () {\n      return this._instanceFeatureIdLabel;\n    },\n    set: function (value) {\n      // indices get converted into instanceFeatureId_N\n      if (typeof value === \"number\") {\n        value = `instanceFeatureId_${value}`;\n      }\n\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.string(\"value\", value);\n      //>>includeEnd('debug');\n\n      if (value !== this._instanceFeatureIdLabel) {\n        this._featureTableIdDirty = true;\n      }\n\n      this._instanceFeatureIdLabel = value;\n    },\n  },\n\n  /**\n   * The {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {ClippingPlaneCollection}\n   */\n  clippingPlanes: {\n    get: function () {\n      return this._clippingPlanes;\n    },\n    set: function (value) {\n      if (value !== this._clippingPlanes) {\n        // Handle destroying old clipping planes, new clipping planes ownership\n        ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n        this.resetDrawCommands();\n      }\n    },\n  },\n\n  /**\n   * The {@link ClippingPolygonCollection} used to selectively disable rendering the model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {ClippingPolygonCollection}\n   */\n  clippingPolygons: {\n    get: function () {\n      return this._clippingPolygons;\n    },\n    set: function (value) {\n      if (value !== this._clippingPolygons) {\n        // Handle destroying old clipping polygons, new clipping polygons ownership\n        ClippingPolygonCollection.setOwner(value, this, \"_clippingPolygons\");\n        this.resetDrawCommands();\n      }\n    },\n  },\n\n  /**\n   * If <code>true</code>, the model is exaggerated along the ellipsoid normal when {@link Scene.verticalExaggeration} is set to a value other than <code>1.0</code>.\n   *\n   * @memberof Model.prototype\n   * @type {boolean}\n   * @default true\n   *\n   * @example\n   * // Exaggerate terrain by a factor of 2, but prevent model exaggeration\n   * scene.verticalExaggeration = 2.0;\n   * model.enableVerticalExaggeration = false;\n   */\n  enableVerticalExaggeration: {\n    get: function () {\n      return this._enableVerticalExaggeration;\n    },\n    set: function (value) {\n      if (value !== this._enableVerticalExaggeration) {\n        this.resetDrawCommands();\n      }\n      this._enableVerticalExaggeration = value;\n    },\n  },\n\n  /**\n   * If <code>true</code>, the model is vertically exaggerated along the ellipsoid normal.\n   *\n   * @memberof Model.prototype\n   * @type {boolean}\n   * @default true\n   * @readonly\n   * @private\n   */\n  hasVerticalExaggeration: {\n    get: function () {\n      return this._hasVerticalExaggeration;\n    },\n  },\n\n  /**\n   * If this model is part of a <code>Model3DTileContent</code> of a tileset,\n   * then this will return the <code>ImageryLayerCollection</code>\n   * of that tileset. Otherwise, <code>undefined</code> is returned.\n   *\n   * @memberof Model.prototype\n   * @type {ImageryLayerCollection|undefined}\n   * @readonly\n   * @private\n   */\n  imageryLayers: {\n    get: function () {\n      if (defined(this._content)) {\n        const tileset = this._content.tileset;\n        if (defined(tileset)) {\n          return tileset.imageryLayers;\n        }\n      }\n      return undefined;\n    },\n  },\n\n  /**\n   * The directional light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n   * <p>\n   * Disabling additional light sources by setting\n   * <code>model.imageBasedLighting.imageBasedLightingFactor = new Cartesian2(0.0, 0.0)</code>\n   * will make the model much darker. Here, increasing the intensity of the light source will make the model brighter.\n   * </p>\n   * @memberof Model.prototype\n   *\n   * @type {Cartesian3}\n   *\n   * @default undefined\n   */\n  lightColor: {\n    get: function () {\n      return this._lightColor;\n    },\n    set: function (value) {\n      if (defined(value) !== defined(this._lightColor)) {\n        this.resetDrawCommands();\n      }\n\n      this._lightColor = Cartesian3.clone(value, this._lightColor);\n    },\n  },\n\n  /**\n   * The properties for managing image-based lighting on this model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {ImageBasedLighting}\n   */\n  imageBasedLighting: {\n    get: function () {\n      return this._imageBasedLighting;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"imageBasedLighting\", value);\n      //>>includeEnd('debug');\n\n      if (value !== this._imageBasedLighting) {\n        if (\n          this._shouldDestroyImageBasedLighting &&\n          !this._imageBasedLighting.isDestroyed()\n        ) {\n          this._imageBasedLighting.destroy();\n        }\n        this._imageBasedLighting = value;\n        this._shouldDestroyImageBasedLighting = false;\n        this.resetDrawCommands();\n      }\n    },\n  },\n\n  /**\n   * The properties for managing dynamic environment maps on this model. Affects lighting.\n   * @memberof Model.prototype\n   * @readonly\n   *\n   * @example\n   * // Change the ground color used for a model's environment map to a forest green\n   * const environmentMapManager = model.environmentMapManager;\n   * environmentMapManager.groundColor = Cesium.Color.fromCssColorString(\"#203b34\");\n   *\n   * @type {DynamicEnvironmentMapManager}\n   */\n  environmentMapManager: {\n    get: function () {\n      return this._environmentMapManager;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"environmentMapManager\", value);\n      //>>includeEnd('debug');\n\n      if (value !== this.environmentMapManager) {\n        DynamicEnvironmentMapManager.setOwner(\n          value,\n          this,\n          \"_environmentMapManager\",\n        );\n        this.resetDrawCommands();\n      }\n    },\n  },\n\n  /**\n   * Whether to cull back-facing geometry. When true, back face culling is\n   * determined by the material's doubleSided property; when false, back face\n   * culling is disabled. Back faces are not culled if {@link Model#color}\n   * is translucent or {@link Model#silhouetteSize} is greater than 0.0.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  backFaceCulling: {\n    get: function () {\n      return this._backFaceCulling;\n    },\n    set: function (value) {\n      if (value !== this._backFaceCulling) {\n        this._backFaceCullingDirty = true;\n      }\n\n      this._backFaceCulling = value;\n    },\n  },\n\n  /**\n   * A uniform scale applied to this model before the {@link Model#modelMatrix}.\n   * Values greater than <code>1.0</code> increase the size of the model; values\n   * less than <code>1.0</code> decrease.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {number}\n   *\n   * @default 1.0\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n    set: function (value) {\n      if (value !== this._scale) {\n        this._updateModelMatrix = true;\n      }\n      this._scale = value;\n    },\n  },\n\n  /**\n   * The true scale of the model after being affected by the model's scale,\n   * minimum pixel size, and maximum scale parameters.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  computedScale: {\n    get: function () {\n      return this._computedScale;\n    },\n  },\n\n  /**\n   * The approximate minimum pixel size of the model regardless of zoom.\n   * This can be used to ensure that a model is visible even when the viewer\n   * zooms out.  When <code>0.0</code>, no minimum size is enforced.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {number}\n   *\n   * @default 0.0\n   */\n  minimumPixelSize: {\n    get: function () {\n      return this._minimumPixelSize;\n    },\n    set: function (value) {\n      if (value !== this._minimumPixelSize) {\n        this._updateModelMatrix = true;\n      }\n      this._minimumPixelSize = value;\n    },\n  },\n\n  /**\n   * The maximum scale size for a model. This can be used to give\n   * an upper limit to the {@link Model#minimumPixelSize}, ensuring that the model\n   * is never an unreasonable scale.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {number}\n   */\n  maximumScale: {\n    get: function () {\n      return this._maximumScale;\n    },\n    set: function (value) {\n      if (value !== this._maximumScale) {\n        this._updateModelMatrix = true;\n      }\n      this._maximumScale = value;\n    },\n  },\n\n  /**\n   * Determines whether the model casts or receives shadows from light sources.\n\n   * @memberof Model.prototype\n   *\n   * @type {ShadowMode}\n   *\n   * @default ShadowMode.ENABLED\n   */\n  shadows: {\n    get: function () {\n      return this._shadows;\n    },\n    set: function (value) {\n      if (value !== this._shadows) {\n        this._shadowsDirty = true;\n      }\n\n      this._shadows = value;\n    },\n  },\n\n  /**\n   * Gets the credit that will be displayed for the model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets or sets whether the credits of the model will be displayed\n   * on the screen.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  showCreditsOnScreen: {\n    get: function () {\n      return this._showCreditsOnScreen;\n    },\n    set: function (value) {\n      if (this._showCreditsOnScreen !== value) {\n        this._showCreditsOnScreenDirty = true;\n      }\n\n      this._showCreditsOnScreen = value;\n    },\n  },\n\n  /**\n   * The {@link SplitDirection} to apply to this model.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {SplitDirection}\n   *\n   * @default {@link SplitDirection.NONE}\n   */\n  splitDirection: {\n    get: function () {\n      return this._splitDirection;\n    },\n    set: function (value) {\n      if (this._splitDirection !== value) {\n        this.resetDrawCommands();\n      }\n      this._splitDirection = value;\n    },\n  },\n\n  /**\n   * Gets the model's classification type. This determines whether terrain,\n   * 3D Tiles, or both will be classified by this model.\n   * <p>\n   * Additionally, there are a few requirements/limitations:\n   * <ul>\n   *     <li>The glTF cannot contain morph targets, skins, or animations.</li>\n   *     <li>The glTF cannot contain the <code>EXT_mesh_gpu_instancing</code> extension.</li>\n   *     <li>Only meshes with TRIANGLES can be used to classify other assets.</li>\n   *     <li>The meshes must be watertight.</li>\n   *     <li>The POSITION attribute is required.</li>\n   *     <li>If feature IDs and an index buffer are both present, all indices with the same feature id must occupy contiguous sections of the index buffer.</li>\n   *     <li>If feature IDs are present without an index buffer, all positions with the same feature id must occupy contiguous sections of the position buffer.</li>\n   * </ul>\n   * </p>\n   * <p>\n   * The 3D Tiles or terrain receiving the classification must be opaque.\n   * </p>\n   *\n   * @memberof Model.prototype\n   *\n   * @type {ClassificationType}\n   * @default undefined\n   *\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   * @readonly\n   */\n  classificationType: {\n    get: function () {\n      return this._classificationType;\n    },\n  },\n\n  /**\n   * Reference to the pick IDs. This is only used internally, e.g. for\n   * per-feature post-processing in {@link PostProcessStage}.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {PickId[]}\n   * @readonly\n   *\n   * @private\n   */\n  pickIds: {\n    get: function () {\n      return this._pickIds;\n    },\n  },\n\n  /**\n   * The {@link StyleCommandsNeeded} for the style currently applied to\n   * the features in the model. This is used internally by the {@link ModelDrawCommand}\n   * when determining which commands to submit in an update.\n   *\n   * @memberof Model.prototype\n   *\n   * @type {StyleCommandsNeeded}\n   * @readonly\n   *\n   * @private\n   */\n  styleCommandsNeeded: {\n    get: function () {\n      return this._styleCommandsNeeded;\n    },\n  },\n});\n\n/**\n * Returns the node with the given <code>name</code> in the glTF. This is used to\n * modify a node's transform for user-defined animation.\n *\n * @param {string} name The name of the node in the glTF.\n * @returns {ModelNode} The node, or <code>undefined</code> if no node with the <code>name</code> exists.\n *\n * @exception {DeveloperError} The model is not loaded.  Use Model.readyEvent or wait for Model.ready to be true.\n *\n * @example\n * // Apply non-uniform scale to node \"Hand\"\n * const node = model.getNode(\"Hand\");\n * node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix);\n */\nModel.prototype.getNode = function (name) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!this._ready) {\n    throw new DeveloperError(\n      \"The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\",\n    );\n  }\n  Check.typeOf.string(\"name\", name);\n  //>>includeEnd('debug');\n\n  return this._nodesByName[name];\n};\n\n/**\n * Sets the current value of an articulation stage.  After setting one or\n * multiple stage values, call Model.applyArticulations() to\n * cause the node matrices to be recalculated.\n *\n * @param {string} articulationStageKey The name of the articulation, a space, and the name of the stage.\n * @param {number} value The numeric value of this stage of the articulation.\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\n *\n * @see Model#applyArticulations\n *\n * @example\n * // Sets the value of the stage named \"MoveX\" belonging to the articulation named \"SampleArticulation\"\n * model.setArticulationStage(\"SampleArticulation MoveX\", 50.0);\n */\nModel.prototype.setArticulationStage = function (articulationStageKey, value) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"value\", value);\n  if (!this._ready) {\n    throw new DeveloperError(\n      \"The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._sceneGraph.setArticulationStage(articulationStageKey, value);\n};\n\n/**\n * Applies any modified articulation stages to the matrix of each node that\n * participates in any articulation. Note that this will overwrite any node\n * transformations on participating nodes.\n *\n * @exception {DeveloperError} The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\n */\nModel.prototype.applyArticulations = function () {\n  //>>includeStart('debug', pragmas.debug);\n  if (!this._ready) {\n    throw new DeveloperError(\n      \"The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._sceneGraph.applyArticulations();\n};\n\n/**\n * Returns the object that was created for the given extension.\n *\n * The given name may be the name of a glTF extension, like `\"EXT_example_extension\"`.\n * If the specified extension was present in the root of the underlying glTF asset,\n * and a loader for the specified extension has processed the extension data, then\n * this will return the model representation of the extension.\n *\n * @param {string} extensionName The name of the extension\n * @returns {object|undefined} The object, or `undefined`\n * @exception {DeveloperError} The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nModel.prototype.getExtension = function (extensionName) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"extensionName\", extensionName);\n  if (!this._ready) {\n    throw new DeveloperError(\n      \"The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.\",\n    );\n  }\n  //>>includeEnd('debug');\n  const components = this._loader.components;\n  return components.extensions[extensionName];\n};\n\n/**\n * Marks the model's {@link Model#style} as dirty, which forces all features\n * to re-evaluate the style in the next frame the model is visible.\n */\nModel.prototype.makeStyleDirty = function () {\n  this._styleDirty = true;\n};\n\n/**\n * Resets the draw commands for this model.\n *\n * @private\n */\nModel.prototype.resetDrawCommands = function () {\n  this._drawCommandsBuilt = false;\n};\n\nconst scratchIBLReferenceFrameMatrix4 = new Matrix4();\nconst scratchIBLReferenceFrameMatrix3 = new Matrix3();\nconst scratchClippingPlanesMatrix = new Matrix4();\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {RuntimeError} Failed to load external reference.\n */\nModel.prototype.update = function (frameState) {\n  let finishedProcessing = false;\n  try {\n    // Keep processing the model every frame until the main resources\n    // (buffer views) and textures (which may be loaded asynchronously)\n    // are processed.\n    finishedProcessing = processLoader(this, frameState);\n  } catch (error) {\n    if (\n      !this._loader.incrementallyLoadTextures &&\n      error.name === \"TextureError\"\n    ) {\n      handleError(this, error);\n    } else {\n      const runtimeError = ModelUtility.getError(\n        \"model\",\n        this._resource,\n        error,\n      );\n      handleError(this, runtimeError);\n    }\n  }\n\n  // A custom shader may have to load texture uniforms.\n  updateCustomShader(this, frameState);\n\n  // Environment maps, specular maps, and spherical harmonics may need to be updated or regenerated\n  updateEnvironmentMap(this, frameState);\n\n  // The image-based lighting may have to load texture uniforms\n  // for specular maps.\n  updateImageBasedLighting(this, frameState);\n\n  if (!this._resourcesLoaded && finishedProcessing) {\n    this._resourcesLoaded = true;\n\n    const components = this._loader.components;\n    if (!defined(components)) {\n      if (this._loader.isUnloaded()) {\n        return;\n      }\n\n      const error = ModelUtility.getError(\n        \"model\",\n        this._resource,\n        new RuntimeError(\"Failed to load model.\"),\n      );\n      handleError(error);\n      this._rejectLoad = this._rejectLoad && this._rejectLoad(error);\n    }\n\n    const structuralMetadata = components.structuralMetadata;\n    if (\n      defined(structuralMetadata) &&\n      structuralMetadata.propertyTableCount > 0\n    ) {\n      createModelFeatureTables(this, structuralMetadata);\n    }\n\n    const sceneGraph = new ModelSceneGraph({\n      model: this,\n      modelComponents: components,\n    });\n\n    this._sceneGraph = sceneGraph;\n    this._gltfCredits = sceneGraph.components.asset.credits;\n  }\n\n  // Short-circuit if the model resources aren't ready or the scene\n  // is currently morphing.\n  if (!this._resourcesLoaded || frameState.mode === SceneMode.MORPHING) {\n    return;\n  }\n\n  const modelImagery = this._modelImagery;\n  modelImagery.update(frameState);\n  if (!modelImagery.ready) {\n    // If the imagery loading should not happen asynchronously,\n    // then do not let the model count as 'ready' until the\n    // modelImagery is 'ready'\n    const asynchronouslyLoadImagery =\n      this._content?.tileset?._asynchronouslyLoadImagery ?? false;\n    if (!asynchronouslyLoadImagery) {\n      return;\n    }\n  }\n\n  updateFeatureTableId(this);\n  updateStyle(this);\n  updateFeatureTables(this, frameState);\n  updatePointCloudShading(this);\n  updateSilhouette(this, frameState);\n  updateSkipLevelOfDetail(this, frameState);\n  updateClippingPlanes(this, frameState);\n  updateClippingPolygons(this, frameState);\n  updateSceneMode(this, frameState);\n  updateFog(this, frameState);\n  updateVerticalExaggeration(this, frameState);\n\n  this._defaultTexture = frameState.context.defaultTexture;\n\n  buildDrawCommands(this, frameState);\n  updateModelMatrix(this, frameState);\n\n  // Many features (e.g. image-based lighting, clipping planes) depend on the model\n  // matrix being updated for the current height reference, so update it first.\n  updateClamping(this);\n\n  updateBoundingSphereAndScale(this, frameState);\n  updateReferenceMatrices(this, frameState);\n\n  // This check occurs after the bounding sphere has been updated so that\n  // zooming to the bounding sphere can account for any modifications\n  // from the clamp-to-ground setting.\n  if (!this._ready) {\n    // Set the model as ready after the first frame render since the user might set up events subscribed to\n    // the post render event, and the model may not be ready for those past the first frame.\n    frameState.afterRender.push(() => {\n      this._ready = true;\n      this._readyEvent.raiseEvent(this);\n    });\n\n    // Don't render until the next frame after the ready event has been raised.\n    return;\n  }\n\n  if (\n    this._loader.incrementallyLoadTextures &&\n    !this._texturesLoaded &&\n    this._loader.texturesLoaded\n  ) {\n    // Re-run the pipeline so texture memory statistics are re-computed\n    this.resetDrawCommands();\n\n    this._texturesLoaded = true;\n    this._texturesReadyEvent.raiseEvent(this);\n  }\n\n  updatePickIds(this);\n\n  // Update the scene graph and draw commands for any changes in model's properties\n  // (e.g. model matrix, back-face culling)\n  updateSceneGraph(this, frameState);\n  updateShowCreditsOnScreen(this);\n  submitDrawCommands(this, frameState);\n};\n\nfunction processLoader(model, frameState) {\n  if (\n    !model._resourcesLoaded ||\n    (model._loader.incrementallyLoadTextures && !model._texturesLoaded)\n  ) {\n    // Ensures frames continue to render in requestRender mode while resources are processing\n    frameState.afterRender.push(() => true);\n    return model._loader.process(frameState);\n  }\n\n  return true;\n}\n\nfunction updateCustomShader(model, frameState) {\n  if (defined(model._customShader)) {\n    model._customShader.update(frameState);\n  }\n}\n\nfunction updateEnvironmentMap(model, frameState) {\n  const environmentMapManager = model._environmentMapManager;\n  const picking = frameState.passes.pick || frameState.passes.pickVoxel;\n  if (model._ready && environmentMapManager.owner === model && !picking) {\n    environmentMapManager.position = model._boundingSphere.center;\n    environmentMapManager.shouldUpdate =\n      !defined(model._imageBasedLighting.sphericalHarmonicCoefficients) ||\n      !defined(model._imageBasedLighting.specularEnvironmentMaps);\n\n    environmentMapManager.update(frameState);\n\n    if (environmentMapManager.shouldRegenerateShaders) {\n      model.resetDrawCommands();\n    }\n  }\n}\n\nfunction updateImageBasedLighting(model, frameState) {\n  model._imageBasedLighting.update(frameState);\n  if (model._imageBasedLighting.shouldRegenerateShaders) {\n    model.resetDrawCommands();\n  }\n}\n\nfunction updateFeatureTableId(model) {\n  if (!model._featureTableIdDirty) {\n    return;\n  }\n  model._featureTableIdDirty = false;\n\n  const components = model._sceneGraph.components;\n  const structuralMetadata = components.structuralMetadata;\n\n  if (\n    defined(structuralMetadata) &&\n    structuralMetadata.propertyTableCount > 0\n  ) {\n    model.featureTableId = selectFeatureTableId(components, model);\n\n    // Mark the style dirty to re-apply it and reflect the new feature ID table.\n    model._styleDirty = true;\n\n    // Trigger a rebuild of the draw commands.\n    model.resetDrawCommands();\n  }\n}\n\nfunction updateStyle(model) {\n  if (model._styleDirty) {\n    model.applyStyle(model._style);\n    model._styleDirty = false;\n  }\n}\n\nfunction updateFeatureTables(model, frameState) {\n  const featureTables = model._featureTables;\n  const length = featureTables.length;\n\n  let styleCommandsNeededDirty = false;\n  for (let i = 0; i < length; i++) {\n    featureTables[i].update(frameState);\n    // Check if the types of style commands needed have changed and trigger a reset of the draw commands\n    // to ensure that translucent and opaque features are handled in the correct passes.\n    if (featureTables[i].styleCommandsNeededDirty) {\n      styleCommandsNeededDirty = true;\n    }\n  }\n\n  if (styleCommandsNeededDirty) {\n    updateStyleCommandsNeeded(model);\n  }\n}\n\nfunction updateStyleCommandsNeeded(model) {\n  const featureTable = model.featureTables[model.featureTableId];\n  model._styleCommandsNeeded = StyleCommandsNeeded.getStyleCommandsNeeded(\n    featureTable.featuresLength,\n    featureTable.batchTexture.translucentFeaturesLength,\n  );\n}\n\nfunction updatePointCloudShading(model) {\n  const pointCloudShading = model.pointCloudShading;\n\n  // Check if the shader needs to be updated for point cloud attenuation\n  // settings.\n  if (pointCloudShading.attenuation !== model._attenuation) {\n    model.resetDrawCommands();\n    model._attenuation = pointCloudShading.attenuation;\n  }\n\n  if (pointCloudShading.backFaceCulling !== model._pointCloudBackFaceCulling) {\n    model.resetDrawCommands();\n    model._pointCloudBackFaceCulling = pointCloudShading.backFaceCulling;\n  }\n}\n\nfunction updateSilhouette(model, frameState) {\n  if (model._silhouetteDirty) {\n    // Only rebuild draw commands if silhouettes are supported in the first place.\n    if (supportsSilhouettes(frameState)) {\n      model.resetDrawCommands();\n    }\n\n    model._silhouetteDirty = false;\n  }\n}\n\nfunction updateSkipLevelOfDetail(model, frameState) {\n  const skipLevelOfDetail = model.hasSkipLevelOfDetail(frameState);\n  if (skipLevelOfDetail !== model._skipLevelOfDetail) {\n    model.resetDrawCommands();\n    model._skipLevelOfDetail = skipLevelOfDetail;\n  }\n}\n\nfunction updateClippingPlanes(model, frameState) {\n  // Update the clipping planes collection / state for this model to detect any changes.\n  let currentClippingPlanesState = 0;\n  if (model.isClippingEnabled()) {\n    if (model._clippingPlanes.owner === model) {\n      model._clippingPlanes.update(frameState);\n    }\n    currentClippingPlanesState = model._clippingPlanes.clippingPlanesState;\n  }\n\n  if (currentClippingPlanesState !== model._clippingPlanesState) {\n    model.resetDrawCommands();\n    model._clippingPlanesState = currentClippingPlanesState;\n  }\n}\n\nfunction updateClippingPolygons(model, frameState) {\n  // Update the clipping polygon collection / state for this model to detect any changes.\n  let currentClippingPolygonsState = 0;\n  if (model.isClippingPolygonsEnabled()) {\n    if (model._clippingPolygons.owner === model) {\n      model._clippingPolygons.update(frameState);\n      model._clippingPolygons.queueCommands(frameState);\n    }\n    currentClippingPolygonsState =\n      model._clippingPolygons.clippingPolygonsState;\n  }\n\n  if (currentClippingPolygonsState !== model._clippingPolygonsState) {\n    model.resetDrawCommands();\n    model._clippingPolygonsState = currentClippingPolygonsState;\n  }\n}\n\nfunction updateSceneMode(model, frameState) {\n  if (frameState.mode !== model._sceneMode) {\n    if (model._projectTo2D) {\n      model.resetDrawCommands();\n    } else {\n      model._updateModelMatrix = true;\n    }\n    model._sceneMode = frameState.mode;\n  }\n}\n\nfunction updateFog(model, frameState) {\n  const fogRenderable = frameState.fog.enabled && frameState.fog.renderable;\n  if (fogRenderable !== model._fogRenderable) {\n    model.resetDrawCommands();\n    model._fogRenderable = fogRenderable;\n  }\n}\n\nfunction updateVerticalExaggeration(model, frameState) {\n  if (model.enableVerticalExaggeration) {\n    const verticalExaggerationNeeded = frameState.verticalExaggeration !== 1.0;\n    if (model.hasVerticalExaggeration !== verticalExaggerationNeeded) {\n      model.resetDrawCommands();\n      model._hasVerticalExaggeration = verticalExaggerationNeeded;\n    }\n  } else if (model.hasVerticalExaggeration) {\n    model.resetDrawCommands(); //if verticalExaggeration was on, reset.\n    model._hasVerticalExaggeration = false;\n  }\n}\n\nfunction buildDrawCommands(model, frameState) {\n  if (!model._drawCommandsBuilt) {\n    model.destroyPipelineResources();\n    model._sceneGraph.buildDrawCommands(frameState);\n    model._drawCommandsBuilt = true;\n  }\n}\n\nfunction updateModelMatrix(model, frameState) {\n  // This is done without a dirty flag so that the model matrix can be updated in-place\n  // without needing to use a setter.\n  if (!Matrix4.equals(model.modelMatrix, model._modelMatrix)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (frameState.mode !== SceneMode.SCENE3D && model._projectTo2D) {\n      throw new DeveloperError(\n        \"Model.modelMatrix cannot be changed in 2D or Columbus View if projectTo2D is true.\",\n      );\n    }\n    //>>includeEnd('debug');\n    model._updateModelMatrix = true;\n    model._modelMatrix = Matrix4.clone(model.modelMatrix, model._modelMatrix);\n  }\n}\n\nconst scratchPosition = new Cartesian3();\nconst scratchCartographic = new Cartographic();\n\nfunction updateClamping(model) {\n  if (\n    !model._updateModelMatrix &&\n    !model._heightDirty &&\n    model._minimumPixelSize === 0.0\n  ) {\n    return;\n  }\n\n  if (defined(model._removeUpdateHeightCallback)) {\n    model._removeUpdateHeightCallback();\n    model._removeUpdateHeightCallback = undefined;\n  }\n\n  const scene = model._scene;\n  if (!defined(scene) || model.heightReference === HeightReference.NONE) {\n    //>>includeStart('debug', pragmas.debug);\n    if (model.heightReference !== HeightReference.NONE) {\n      throw new DeveloperError(\n        \"Height reference is not supported without a scene.\",\n      );\n    }\n    //>>includeEnd('debug');\n    model._clampedModelMatrix = undefined;\n    return;\n  }\n\n  const ellipsoid = scene.ellipsoid ?? Ellipsoid.default;\n\n  // Compute cartographic position so we don't recompute every update\n  const modelMatrix = model.modelMatrix;\n  scratchPosition.x = modelMatrix[12];\n  scratchPosition.y = modelMatrix[13];\n  scratchPosition.z = modelMatrix[14];\n  const cartoPosition = ellipsoid.cartesianToCartographic(scratchPosition);\n\n  if (!defined(model._clampedModelMatrix)) {\n    model._clampedModelMatrix = Matrix4.clone(modelMatrix, new Matrix4());\n  }\n\n  // Install callback to handle updating of terrain tiles\n  model._removeUpdateHeightCallback = scene.updateHeight(\n    cartoPosition,\n    getUpdateHeightCallback(model, ellipsoid, cartoPosition),\n    model.heightReference,\n  );\n\n  // Set the correct height now\n  const height = scene.getHeight(cartoPosition, model.heightReference);\n  if (defined(height)) {\n    // Get callback with cartoPosition being the non-clamped position\n    const callback = getUpdateHeightCallback(model, ellipsoid, cartoPosition);\n\n    // Compute the clamped cartesian and call updateHeight callback\n    Cartographic.clone(cartoPosition, scratchCartographic);\n    scratchCartographic.height = height;\n    callback(scratchCartographic);\n  }\n\n  model._heightDirty = false;\n  model._updateModelMatrix = true;\n}\n\nfunction updateBoundingSphereAndScale(model, frameState) {\n  if (!model._updateModelMatrix && model._minimumPixelSize === 0.0) {\n    return;\n  }\n\n  const modelMatrix = defined(model._clampedModelMatrix)\n    ? model._clampedModelMatrix\n    : model.modelMatrix;\n\n  updateBoundingSphere(model, modelMatrix);\n  updateComputedScale(model, modelMatrix, frameState);\n}\n\nfunction updateBoundingSphere(model, modelMatrix) {\n  model._clampedScale = defined(model._maximumScale)\n    ? Math.min(model._scale, model._maximumScale)\n    : model._scale;\n\n  model._boundingSphere.center = Cartesian3.multiplyByScalar(\n    model._sceneGraph.boundingSphere.center,\n    model._clampedScale,\n    model._boundingSphere.center,\n  );\n  model._boundingSphere.radius = model._initialRadius * model._clampedScale;\n\n  model._boundingSphere = BoundingSphere.transform(\n    model._boundingSphere,\n    modelMatrix,\n    model._boundingSphere,\n  );\n}\n\nfunction updateComputedScale(model, modelMatrix, frameState) {\n  let scale = model.scale;\n\n  if (model.minimumPixelSize !== 0.0 && !model._projectTo2D) {\n    // Compute size of bounding sphere in pixels\n    const context = frameState.context;\n    const maxPixelSize = Math.max(\n      context.drawingBufferWidth,\n      context.drawingBufferHeight,\n    );\n\n    Matrix4.getTranslation(modelMatrix, scratchPosition);\n\n    if (model._sceneMode !== SceneMode.SCENE3D) {\n      SceneTransforms.computeActualEllipsoidPosition(\n        frameState,\n        scratchPosition,\n        scratchPosition,\n      );\n    }\n\n    const radius = model._boundingSphere.radius;\n    const metersPerPixel = scaleInPixels(scratchPosition, radius, frameState);\n\n    // metersPerPixel is always > 0.0\n    const pixelsPerMeter = 1.0 / metersPerPixel;\n    const diameterInPixels = Math.min(\n      pixelsPerMeter * (2.0 * radius),\n      maxPixelSize,\n    );\n\n    // Maintain model's minimum pixel size\n    if (diameterInPixels < model.minimumPixelSize) {\n      scale =\n        (model.minimumPixelSize * metersPerPixel) /\n        (2.0 * model._initialRadius);\n    }\n  }\n\n  model._computedScale = defined(model.maximumScale)\n    ? Math.min(model.maximumScale, scale)\n    : scale;\n}\n\nfunction updatePickIds(model) {\n  if (!model._idDirty) {\n    return;\n  }\n  model._idDirty = false;\n\n  const id = model._id;\n  const pickIds = model._pickIds;\n  const length = pickIds.length;\n  for (let i = 0; i < length; ++i) {\n    pickIds[i].object.id = id;\n  }\n}\n\n// Matrix3 is a row-major constructor.\n// The same constructor in GLSL will produce the transpose of this.\nconst yUpToZUp = new Matrix3(1, 0, 0, 0, 0, 1, 0, -1, 0);\n\nfunction updateReferenceMatrices(model, frameState) {\n  const modelMatrix = defined(model._clampedModelMatrix)\n    ? model._clampedModelMatrix\n    : model.modelMatrix;\n  const referenceMatrix = model.referenceMatrix ?? modelMatrix;\n  const context = frameState.context;\n\n  let iblReferenceFrameMatrix3 = scratchIBLReferenceFrameMatrix3;\n  let iblReferenceFrameMatrix4 = scratchIBLReferenceFrameMatrix4;\n\n  iblReferenceFrameMatrix4 = Matrix4.multiply(\n    context.uniformState.view3D,\n    referenceMatrix,\n    iblReferenceFrameMatrix4,\n  );\n  iblReferenceFrameMatrix3 = Matrix4.getRotation(\n    iblReferenceFrameMatrix4,\n    iblReferenceFrameMatrix3,\n  );\n  iblReferenceFrameMatrix3 = Matrix3.transpose(\n    iblReferenceFrameMatrix3,\n    iblReferenceFrameMatrix3,\n  );\n  model._iblReferenceFrameMatrix = Matrix3.multiply(\n    yUpToZUp,\n    iblReferenceFrameMatrix3,\n    model._iblReferenceFrameMatrix,\n  );\n\n  if (model.isClippingEnabled()) {\n    let clippingPlanesMatrix = scratchClippingPlanesMatrix;\n    clippingPlanesMatrix = Matrix4.multiply(\n      context.uniformState.view3D,\n      referenceMatrix,\n      clippingPlanesMatrix,\n    );\n    clippingPlanesMatrix = Matrix4.multiply(\n      clippingPlanesMatrix,\n      model._clippingPlanes.modelMatrix,\n      clippingPlanesMatrix,\n    );\n    model._clippingPlanesMatrix = Matrix4.inverseTranspose(\n      clippingPlanesMatrix,\n      model._clippingPlanesMatrix,\n    );\n  }\n}\n\nfunction updateSceneGraph(model, frameState) {\n  const sceneGraph = model._sceneGraph;\n  if (model._updateModelMatrix || model._minimumPixelSize !== 0.0) {\n    const modelMatrix = defined(model._clampedModelMatrix)\n      ? model._clampedModelMatrix\n      : model.modelMatrix;\n    sceneGraph.updateModelMatrix(modelMatrix, frameState);\n    model._updateModelMatrix = false;\n  }\n\n  if (model._backFaceCullingDirty) {\n    sceneGraph.updateBackFaceCulling(model._backFaceCulling);\n    model._backFaceCullingDirty = false;\n  }\n\n  if (model._shadowsDirty) {\n    sceneGraph.updateShadows(model._shadows);\n    model._shadowsDirty = false;\n  }\n\n  if (model._debugShowBoundingVolumeDirty) {\n    sceneGraph.updateShowBoundingVolume(model._debugShowBoundingVolume);\n    model._debugShowBoundingVolumeDirty = false;\n  }\n\n  let updateForAnimations = false;\n  // Animations are disabled for classification models.\n  if (!defined(model.classificationType)) {\n    updateForAnimations =\n      model._userAnimationDirty || model._activeAnimations.update(frameState);\n  }\n  sceneGraph.update(frameState, updateForAnimations);\n  model._userAnimationDirty = false;\n}\n\nfunction updateShowCreditsOnScreen(model) {\n  if (!model._showCreditsOnScreenDirty) {\n    return;\n  }\n  model._showCreditsOnScreenDirty = false;\n  model._credits.length = 0;\n\n  const showOnScreen = model._showCreditsOnScreen;\n  if (defined(model._credit)) {\n    const credit = Credit.clone(model._credit);\n    credit.showOnScreen = credit.showOnScreen || showOnScreen;\n    model._credits.push(credit);\n  }\n\n  const resourceCredits = model._resourceCredits;\n  const resourceCreditsLength = resourceCredits.length;\n  for (let i = 0; i < resourceCreditsLength; i++) {\n    const credit = Credit.clone(resourceCredits[i]);\n    credit.showOnScreen = credit.showOnScreen || showOnScreen;\n    model._credits.push(credit);\n  }\n\n  const gltfCredits = model._gltfCredits;\n  const gltfCreditsLength = gltfCredits.length;\n  for (let i = 0; i < gltfCreditsLength; i++) {\n    const credit = Credit.clone(gltfCredits[i]);\n    credit.showOnScreen = credit.showOnScreen || showOnScreen;\n    model._credits.push(credit);\n  }\n}\n\nfunction submitDrawCommands(model, frameState) {\n  // Check that show is true after draw commands are built;\n  // we want the user to be able to instantly see the model\n  // when show is set to true.\n\n  const displayConditionPassed = passesDistanceDisplayCondition(\n    model,\n    frameState,\n  );\n\n  const invisible = model.isInvisible();\n  const silhouette = model.hasSilhouette(frameState);\n\n  // If the model is invisible but has a silhouette, it still\n  // needs to draw in order to write to the stencil buffer and\n  // render the silhouette.\n  const showModel =\n    model._show &&\n    model._computedScale !== 0 &&\n    displayConditionPassed &&\n    (!invisible || silhouette);\n\n  const passes = frameState.passes;\n  const submitCommandsForPass =\n    passes.render || (passes.pick && model.allowPicking);\n\n  if (showModel && !model._ignoreCommands && submitCommandsForPass) {\n    addCreditsToCreditDisplay(model, frameState);\n    model._sceneGraph.pushDrawCommands(frameState);\n  }\n}\n\nconst scratchBoundingSphere = new BoundingSphere();\n\nfunction scaleInPixels(positionWC, radius, frameState) {\n  scratchBoundingSphere.center = positionWC;\n  scratchBoundingSphere.radius = radius;\n  return frameState.camera.getPixelSize(\n    scratchBoundingSphere,\n    frameState.context.drawingBufferWidth,\n    frameState.context.drawingBufferHeight,\n  );\n}\n\nconst scratchUpdateHeightCartesian = new Cartesian3();\nfunction getUpdateHeightCallback(model, ellipsoid, originalPostition) {\n  return function (clampedPosition) {\n    if (isHeightReferenceRelative(model.heightReference)) {\n      clampedPosition.height += originalPostition.height;\n    }\n\n    ellipsoid.cartographicToCartesian(\n      clampedPosition,\n      scratchUpdateHeightCartesian,\n    );\n\n    const clampedModelMatrix = model._clampedModelMatrix;\n\n    // Modify clamped model matrix to use new height\n    Matrix4.clone(model.modelMatrix, clampedModelMatrix);\n    clampedModelMatrix[12] = scratchUpdateHeightCartesian.x;\n    clampedModelMatrix[13] = scratchUpdateHeightCartesian.y;\n    clampedModelMatrix[14] = scratchUpdateHeightCartesian.z;\n\n    model._heightDirty = true;\n  };\n}\n\nconst scratchDisplayConditionCartesian = new Cartesian3();\n\nfunction passesDistanceDisplayCondition(model, frameState) {\n  const condition = model.distanceDisplayCondition;\n  if (!defined(condition)) {\n    return true;\n  }\n\n  const nearSquared = condition.near * condition.near;\n  const farSquared = condition.far * condition.far;\n  let distanceSquared;\n\n  if (frameState.mode === SceneMode.SCENE2D) {\n    const frustum2DWidth =\n      frameState.camera.frustum.right - frameState.camera.frustum.left;\n    const distance = frustum2DWidth * 0.5;\n    distanceSquared = distance * distance;\n  } else {\n    // Distance to center of primitive's reference frame\n    const position = Matrix4.getTranslation(\n      model.modelMatrix,\n      scratchDisplayConditionCartesian,\n    );\n\n    // This will project the position if the scene is in Columbus View,\n    // but leave the position as-is in 3D mode.\n    SceneTransforms.computeActualEllipsoidPosition(\n      frameState,\n      position,\n      position,\n    );\n\n    distanceSquared = Cartesian3.distanceSquared(\n      position,\n      frameState.camera.positionWC,\n    );\n  }\n\n  return distanceSquared >= nearSquared && distanceSquared <= farSquared;\n}\n\nfunction addCreditsToCreditDisplay(model, frameState) {\n  const creditDisplay = frameState.creditDisplay;\n  const credits = model._credits;\n  const creditsLength = credits.length;\n  for (let c = 0; c < creditsLength; c++) {\n    creditDisplay.addCreditToNextFrame(credits[c]);\n  }\n}\n\n/**\n * Gets whether or not the model is translucent based on its assigned model color.\n * If the model color's alpha is equal to zero, then it is considered invisible,\n * not translucent.\n *\n * @returns {boolean} <code>true</code> if the model is translucent, otherwise <code>false</code>.\n * @private\n */\nModel.prototype.isTranslucent = function () {\n  const color = this.color;\n  return defined(color) && color.alpha > 0.0 && color.alpha < 1.0;\n};\n\n/**\n * Gets whether or not the model is invisible, i.e. if the model color's alpha\n * is equal to zero.\n *\n * @returns {boolean} <code>true</code> if the model is invisible, otherwise <code>false</code>.\n * @private\n */\nModel.prototype.isInvisible = function () {\n  const color = this.color;\n  return defined(color) && color.alpha === 0.0;\n};\n\nfunction supportsSilhouettes(frameState) {\n  return frameState.context.stencilBuffer;\n}\n\n/**\n * Gets whether or not the model has a silhouette. This accounts for whether\n * silhouettes are supported (i.e. the context supports stencil buffers).\n * <p>\n * If the model classifies another model, its silhouette will be disabled.\n * </p>\n *\n * @param {FrameState} The frame state.\n * @returns {boolean} <code>true</code> if the model has silhouettes, otherwise <code>false</code>.\n * @private\n */\nModel.prototype.hasSilhouette = function (frameState) {\n  return (\n    supportsSilhouettes(frameState) &&\n    this._silhouetteSize > 0.0 &&\n    this._silhouetteColor.alpha > 0.0 &&\n    !defined(this._classificationType)\n  );\n};\n\n/**\n * Gets whether or not the model is part of a tileset that uses the\n * skipLevelOfDetail optimization. This accounts for whether skipLevelOfDetail\n * is supported (i.e. the context supports stencil buffers).\n *\n * @param {FrameState} frameState The frame state.\n * @returns {boolean} <code>true</code> if the model is part of a tileset that uses the skipLevelOfDetail optimization, <code>false</code> otherwise.\n * @private\n */\nModel.prototype.hasSkipLevelOfDetail = function (frameState) {\n  if (!ModelType.is3DTiles(this.type)) {\n    return false;\n  }\n\n  const supportsSkipLevelOfDetail = frameState.context.stencilBuffer;\n  const tileset = this._content.tileset;\n  return supportsSkipLevelOfDetail && tileset.isSkippingLevelOfDetail;\n};\n\n/**\n * Gets whether or not clipping planes are enabled for this model.\n *\n * @returns {boolean} <code>true</code> if clipping planes are enabled for this model, <code>false</code>.\n * @private\n */\nModel.prototype.isClippingEnabled = function () {\n  const clippingPlanes = this._clippingPlanes;\n  return (\n    defined(clippingPlanes) &&\n    clippingPlanes.enabled &&\n    clippingPlanes.length !== 0\n  );\n};\n\n/**\n * Find an intersection between a ray and the model surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {number} [verticalExaggeration=1.0] A scalar used to exaggerate the height of a position relative to the ellipsoid. If the value is 1.0 there will be no effect.\n * @param {number} [relativeHeight=0.0] The height above the ellipsoid relative to which a position is exaggerated. If the value is 0.0 the position will be exaggerated relative to the ellipsoid surface.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nModel.prototype.pick = function (\n  ray,\n  frameState,\n  verticalExaggeration,\n  relativeHeight,\n  result,\n) {\n  return pickModel(\n    this,\n    ray,\n    frameState,\n    verticalExaggeration,\n    relativeHeight,\n    result,\n  );\n};\n\n/**\n * Gets whether or not clipping polygons are enabled for this model.\n *\n * @returns {boolean} <code>true</code> if clipping polygons are enabled for this model, <code>false</code>.\n * @private\n */\nModel.prototype.isClippingPolygonsEnabled = function () {\n  const clippingPolygons = this._clippingPolygons;\n  return (\n    defined(clippingPolygons) &&\n    clippingPolygons.enabled &&\n    clippingPolygons.length !== 0\n  );\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Model#destroy\n */\nModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * model = model && model.destroy();\n *\n * @see Model#isDestroyed\n */\nModel.prototype.destroy = function () {\n  const loader = this._loader;\n  if (defined(loader)) {\n    loader.destroy();\n  }\n\n  const featureTables = this._featureTables;\n  if (defined(featureTables)) {\n    const length = featureTables.length;\n    for (let i = 0; i < length; i++) {\n      featureTables[i].destroy();\n    }\n  }\n\n  this.destroyPipelineResources();\n  this.destroyModelResources();\n\n  // Remove callbacks for height reference behavior.\n  if (defined(this._removeUpdateHeightCallback)) {\n    this._removeUpdateHeightCallback();\n    this._removeUpdateHeightCallback = undefined;\n  }\n\n  if (defined(this._terrainProviderChangedCallback)) {\n    this._terrainProviderChangedCallback();\n    this._terrainProviderChangedCallback = undefined;\n  }\n\n  // Only destroy the ClippingPlaneCollection if this is the owner.\n  const clippingPlaneCollection = this._clippingPlanes;\n  if (\n    defined(clippingPlaneCollection) &&\n    !clippingPlaneCollection.isDestroyed() &&\n    clippingPlaneCollection.owner === this\n  ) {\n    clippingPlaneCollection.destroy();\n  }\n  this._clippingPlanes = undefined;\n\n  // Only destroy the ClippingPolygonCollection if this is the owner.\n  const clippingPolygonCollection = this._clippingPolygons;\n  if (\n    defined(clippingPolygonCollection) &&\n    !clippingPolygonCollection.isDestroyed() &&\n    clippingPolygonCollection.owner === this\n  ) {\n    clippingPolygonCollection.destroy();\n  }\n  this._clippingPolygons = undefined;\n\n  // Only destroy the ImageBasedLighting if this is the owner.\n  if (\n    this._shouldDestroyImageBasedLighting &&\n    !this._imageBasedLighting.isDestroyed()\n  ) {\n    this._imageBasedLighting.destroy();\n  }\n  this._imageBasedLighting = undefined;\n\n  // Only destroy the environment map manager if this is the owner.\n  const environmentMapManager = this._environmentMapManager;\n  if (\n    !environmentMapManager.isDestroyed() &&\n    environmentMapManager.owner === this\n  ) {\n    environmentMapManager.destroy();\n  }\n  this._environmentMapManager = undefined;\n\n  destroyObject(this);\n};\n\n/**\n * Destroys resources generated in the pipeline stages\n * that must be destroyed when draw commands are rebuilt.\n * @private\n */\nModel.prototype.destroyPipelineResources = function () {\n  const resources = this._pipelineResources;\n  for (let i = 0; i < resources.length; i++) {\n    resources[i].destroy();\n  }\n  this._pipelineResources.length = 0;\n  this._pickIds.length = 0;\n};\n\n/**\n * Destroys resources generated in the pipeline stages\n * that exist for the lifetime of the model.\n * @private\n */\nModel.prototype.destroyModelResources = function () {\n  const resources = this._modelResources;\n  for (let i = 0; i < resources.length; i++) {\n    resources[i].destroy();\n  }\n  this._modelResources.length = 0;\n};\n\n/**\n * <p>\n * Asynchronously creates a model from a glTF asset. This function returns a promise that resolves when the model is ready to render, i.e., when the external binary, image,\n * and shader files are downloaded and the WebGL resources are created.\n * </p>\n * <p>\n * The model can be a traditional glTF asset with a .gltf extension or a Binary glTF using the .glb extension.\n *\n * @param {object} options Object with the following properties:\n * @param {string|Resource} options.url The url to the .gltf or .glb file.\n * @param {string|Resource} [options.basePath=''] The base path that paths in the glTF JSON are relative to.\n * @param {boolean} [options.show=true] Whether or not to render the model.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the model from model to world coordinates.\n * @param {number} [options.scale=1.0] A uniform scale applied to this model.\n * @param {boolean} [options.enableVerticalExaggeration=true] If <code>true</code>, the model is exaggerated along the ellipsoid normal when {@link Scene.verticalExaggeration} is set to a value other than <code>1.0</code>.\n * @param {number} [options.minimumPixelSize=0.0] The approximate minimum pixel size of the model regardless of zoom.\n * @param {number} [options.maximumScale] The maximum scale size of a model. An upper limit for minimumPixelSize.\n * @param {object} [options.id] A user-defined object to return when the model is picked with {@link Scene#pick}.\n * @param {boolean} [options.allowPicking=true] When <code>true</code>, each primitive is pickable with {@link Scene#pick}.\n * @param {boolean} [options.incrementallyLoadTextures=true] Determine if textures may continue to stream in after the model is loaded.\n * @param {boolean} [options.asynchronous=true] Determines if model WebGL resource creation will be spread out over several frames or block until completion once all glTF files are loaded.\n * @param {boolean} [options.clampAnimations=true] Determines if the model's animations should hold a pose over frames where no keyframes are specified.\n * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the model casts or receives shadows from light sources.\n * @param {boolean} [options.releaseGltfJson=false] When true, the glTF JSON is released once the glTF is loaded. This is is especially useful for cases like 3D Tiles, where each .gltf model is unique and caching the glTF JSON is not effective.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Draws the bounding sphere for each draw command in the model.\n * @param {boolean} [options.enableDebugWireframe=false] For debugging only. This must be set to true for debugWireframe to work in WebGL1. This cannot be set after the model has loaded.\n * @param {boolean} [options.debugWireframe=false] For debugging only. Draws the model in wireframe. Will only work for WebGL1 if enableDebugWireframe is set to true.\n * @param {boolean} [options.cull=true]  Whether or not to cull the model using frustum/horizon culling. If the model is part of a 3D Tiles tileset, this property will always be false, since the 3D Tiles culling system is used.\n * @param {boolean} [options.opaquePass=Pass.OPAQUE] The pass to use in the {@link DrawCommand} for the opaque portions of the model.\n * @param {Axis} [options.upAxis=Axis.Y] The up-axis of the glTF model.\n * @param {Axis} [options.forwardAxis=Axis.Z] The forward-axis of the glTF model.\n * @param {CustomShader} [options.customShader] A custom shader. This will add user-defined GLSL code to the vertex and fragment shaders. Using custom shaders with a {@link Cesium3DTileStyle} may lead to undefined behavior.\n * @param {Cesium3DTileContent} [options.content] The tile content this model belongs to. This property will be undefined if model is not loaded as part of a tileset.\n * @param {HeightReference} [options.heightReference=HeightReference.NONE] Determines how the model is drawn relative to terrain.\n * @param {Scene} [options.scene] Must be passed in for models that use the height reference property.\n * @param {DistanceDisplayCondition} [options.distanceDisplayCondition] The condition specifying at what distance from the camera that this model will be displayed.\n * @param {Color} [options.color] A color that blends with the model's rendered color.\n * @param {ColorBlendMode} [options.colorBlendMode=ColorBlendMode.HIGHLIGHT] Defines how the color blends with the model.\n * @param {number} [options.colorBlendAmount=0.5] Value used to determine the color strength when the <code>colorBlendMode</code> is <code>MIX</code>. A value of 0.0 results in the model's rendered color while a value of 1.0 results in a solid color, with any value in-between resulting in a mix of the two.\n * @param {Color} [options.silhouetteColor=Color.RED] The silhouette color. If more than 256 models have silhouettes enabled, there is a small chance that overlapping models will have minor artifacts.\n * @param {number} [options.silhouetteSize=0.0] The size of the silhouette in pixels.\n * @param {boolean} [options.enableShowOutline=true] Whether to enable outlines for models using the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. This can be set false to avoid post-processing geometry at load time. When false, the showOutlines and outlineColor options are ignored.\n * @param {boolean} [options.showOutline=true] Whether to display the outline for models using the {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/CESIUM_primitive_outline|CESIUM_primitive_outline} extension. When true, outlines are displayed. When false, outlines are not displayed.\n * @param {Color} [options.outlineColor=Color.BLACK] The color to use when rendering outlines.\n * @param {ClippingPlaneCollection} [options.clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the model.\n * @param {ClippingPolygonCollection} [options.clippingPolygons] The {@link ClippingPolygonCollection} used to selectively disable rendering the model.\n * @param {Cartesian3} [options.lightColor] The light color when shading the model. When <code>undefined</code> the scene's light color is used instead.\n * @param {ImageBasedLighting} [options.imageBasedLighting] The properties for managing image-based lighting on this model.\n * @param {DynamicEnvironmentMapManager.ConstructorOptions} [options.environmentMapOptions] The properties for managing dynamic environment maps on this model.\n * @param {boolean} [options.backFaceCulling=true] Whether to cull back-facing geometry. When true, back face culling is determined by the material's doubleSided property; when false, back face culling is disabled. Back faces are not culled if the model's color is translucent.\n * @param {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.\n * @param {boolean} [options.showCreditsOnScreen=false] Whether to display the credits of this model on screen.\n * @param {SplitDirection} [options.splitDirection=SplitDirection.NONE] The {@link SplitDirection} split to apply to this model.\n * @param {boolean} [options.projectTo2D=false] Whether to accurately project the model's positions in 2D. If this is true, the model will be projected accurately to 2D, but it will use more memory to do so. If this is false, the model will use less memory and will still render in 2D / CV mode, but its positions may be inaccurate. This disables minimumPixelSize and prevents future modification to the model matrix. This also cannot be set after the model has loaded.\n * @param {boolean} [options.enablePick=false] Whether to allow with CPU picking with <code>pick</code> when not using WebGL 2 or above. If using WebGL 2 or above, this option will be ignored. If using WebGL 1 and this is true, the <code>pick</code> operation will work correctly, but it will use more memory to do so. If running with WebGL 1 and this is false, the model will use less memory, but <code>pick</code> will always return <code>undefined</code>. This cannot be set after the model has loaded.\n * @param {string|number} [options.featureIdLabel=\"featureId_0\"] Label of the feature ID set to use for picking and styling. For EXT_mesh_features, this is the feature ID's label property, or \"featureId_N\" (where N is the index in the featureIds array) when not specified. EXT_feature_metadata did not have a label field, so such feature ID sets are always labeled \"featureId_N\" where N is the index in the list of all feature Ids, where feature ID attributes are listed before feature ID textures. If featureIdLabel is an integer N, it is converted to the string \"featureId_N\" automatically. If both per-primitive and per-instance feature IDs are present, the instance feature IDs take priority.\n * @param {string|number} [options.instanceFeatureIdLabel=\"instanceFeatureId_0\"] Label of the instance feature ID set used for picking and styling. If instanceFeatureIdLabel is set to an integer N, it is converted to the string \"instanceFeatureId_N\" automatically. If both per-primitive and per-instance feature IDs are present, the instance feature IDs take priority.\n * @param {object} [options.pointCloudShading] Options for constructing a {@link PointCloudShading} object to control point attenuation and lighting.\n * @param {ClassificationType} [options.classificationType] Determines whether terrain, 3D Tiles or both will be classified by this model. This cannot be set after the model has loaded.\n * @param {Model.GltfCallback} [options.gltfCallback] A function that is called with the loaded gltf object once loaded.\n *\n * @returns {Promise<Model>} A promise that resolves to the created model when it is ready to render.\n *\n * @exception {RuntimeError} The model failed to load.\n * @exception {RuntimeError} Unsupported glTF version.\n * @exception {RuntimeError} Unsupported glTF Extension\n *\n * @example\n * // Load a model and add it to the scene\n * try {\n *  const model = await Cesium.Model.fromGltfAsync({\n *    url: \"../../SampleData/models/CesiumMan/Cesium_Man.glb\"\n *  });\n *  viewer.scene.primitives.add(model);\n * } catch (error) {\n *  console.log(`Failed to load model. ${error}`);\n * }\n *\n * @example\n * // Position a model with modelMatrix and display it with a minimum size of 128 pixels\n * const position = Cesium.Cartesian3.fromDegrees(\n *   -123.0744619,\n *   44.0503706,\n *   5000.0\n * );\n * const headingPositionRoll = new Cesium.HeadingPitchRoll();\n * const fixedFrameTransform = Cesium.Transforms.localFrameToFixedFrameGenerator(\n *   \"north\",\n *   \"west\"\n * );\n * try {\n *  const model = await Cesium.Model.fromGltfAsync({\n *    url: \"../../SampleData/models/CesiumAir/Cesium_Air.glb\",\n *    modelMatrix: Cesium.Transforms.headingPitchRollToFixedFrame(\n *      position,\n *      headingPositionRoll,\n *      Cesium.Ellipsoid.WGS84,\n *      fixedFrameTransform\n *    ),\n *    minimumPixelSize: 128,\n *  });\n *  viewer.scene.primitives.add(model);\n * } catch (error) {\n *  console.log(`Failed to load model. ${error}`);\n * }\n *\n * @example\n * // Load a model and play the last animation at half speed\n * let animations;\n * try {\n *  const model = await Cesium.Model.fromGltfAsync({\n *    url: \"../../SampleData/models/CesiumMan/Cesium_Man.glb\",\n *    gltfCallback: gltf => {\n *      animations = gltf.animations\n *    }\n *  });\n *  viewer.scene.primitives.add(model);\n *  model.readyEvent.addEventListener(() => {\n *    model.activeAnimations.add({\n *      index: animations.length - 1,\n *      loop: Cesium.ModelAnimationLoop.REPEAT,\n *      multiplier: 0.5,\n *    });\n *  });\n * } catch (error) {\n *  console.log(`Failed to load model. ${error}`);\n * }\n */\nModel.fromGltfAsync = async function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.url) && !defined(options.gltf)) {\n    throw new DeveloperError(\"options.url is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // options.gltf is used internally for 3D Tiles. It can be a Resource, a URL\n  // to a glTF/glb file, a binary glTF buffer, or a JSON object containing the\n  // glTF contents.\n  const gltf = options.url ?? options.gltf;\n\n  const loaderOptions = {\n    releaseGltfJson: options.releaseGltfJson,\n    asynchronous: options.asynchronous,\n    incrementallyLoadTextures: options.incrementallyLoadTextures,\n    upAxis: options.upAxis,\n    forwardAxis: options.forwardAxis,\n    loadAttributesFor2D: options.projectTo2D,\n    enablePick: options.enablePick,\n    loadIndicesForWireframe: options.enableDebugWireframe,\n    loadPrimitiveOutline: options.enableShowOutline,\n    loadForClassification: defined(options.classificationType),\n  };\n\n  const basePath = options.basePath ?? \"\";\n  const baseResource = Resource.createIfNeeded(basePath);\n\n  if (defined(gltf.asset)) {\n    loaderOptions.gltfJson = gltf;\n    loaderOptions.baseResource = baseResource;\n    loaderOptions.gltfResource = baseResource;\n  } else if (gltf instanceof Uint8Array) {\n    loaderOptions.typedArray = gltf;\n    loaderOptions.baseResource = baseResource;\n    loaderOptions.gltfResource = baseResource;\n  } else {\n    loaderOptions.gltfResource = Resource.createIfNeeded(gltf);\n  }\n\n  const loader = new GltfLoader(loaderOptions);\n\n  const is3DTiles = defined(options.content);\n  const type = is3DTiles ? ModelType.TILE_GLTF : ModelType.GLTF;\n\n  const resource = loaderOptions.gltfResource;\n\n  const modelOptions = makeModelOptions(loader, type, options);\n  modelOptions.resource = resource;\n  modelOptions.environmentMapOptions = options.environmentMapOptions;\n\n  try {\n    // This load the gltf JSON and ensures the gltf is valid\n    // Further resource loading is handled synchronously in loader.process(), and requires\n    // hooking into model's update() as the frameState is needed\n    await loader.load();\n  } catch (error) {\n    loader.destroy();\n    throw ModelUtility.getError(\"model\", resource, error);\n  }\n\n  const gltfCallback = options.gltfCallback;\n  if (defined(gltfCallback)) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.func(\"options.gltfCallback\", gltfCallback);\n    //>>includeEnd('debug');\n\n    gltfCallback(loader.gltfJson);\n  }\n\n  const model = new Model(modelOptions);\n\n  const resourceCredits = model._resource.credits;\n  if (defined(resourceCredits)) {\n    const length = resourceCredits.length;\n    for (let i = 0; i < length; i++) {\n      model._resourceCredits.push(Credit.clone(resourceCredits[i]));\n    }\n  }\n\n  return model;\n};\n\n/*\n * @private\n */\nModel.fromB3dm = async function (options) {\n  const loaderOptions = {\n    b3dmResource: options.resource,\n    arrayBuffer: options.arrayBuffer,\n    byteOffset: options.byteOffset,\n    releaseGltfJson: options.releaseGltfJson,\n    asynchronous: options.asynchronous,\n    incrementallyLoadTextures: options.incrementallyLoadTextures,\n    upAxis: options.upAxis,\n    forwardAxis: options.forwardAxis,\n    loadAttributesFor2D: options.projectTo2D,\n    enablePick: options.enablePick,\n    loadIndicesForWireframe: options.enableDebugWireframe,\n    loadPrimitiveOutline: options.enableShowOutline,\n    loadForClassification: defined(options.classificationType),\n  };\n\n  const loader = new B3dmLoader(loaderOptions);\n\n  try {\n    await loader.load();\n\n    const modelOptions = makeModelOptions(loader, ModelType.TILE_B3DM, options);\n    const model = new Model(modelOptions);\n    return model;\n  } catch (error) {\n    loader.destroy();\n    throw error;\n  }\n};\n\n/**\n * @private\n */\nModel.fromPnts = async function (options) {\n  const loaderOptions = {\n    arrayBuffer: options.arrayBuffer,\n    byteOffset: options.byteOffset,\n    loadAttributesFor2D: options.projectTo2D,\n  };\n  const loader = new PntsLoader(loaderOptions);\n\n  try {\n    await loader.load();\n    const modelOptions = makeModelOptions(loader, ModelType.TILE_PNTS, options);\n    const model = new Model(modelOptions);\n    return model;\n  } catch (error) {\n    loader.destroy();\n    throw error;\n  }\n};\n\n/*\n * @private\n */\nModel.fromI3dm = async function (options) {\n  const loaderOptions = {\n    i3dmResource: options.resource,\n    arrayBuffer: options.arrayBuffer,\n    byteOffset: options.byteOffset,\n    releaseGltfJson: options.releaseGltfJson,\n    asynchronous: options.asynchronous,\n    incrementallyLoadTextures: options.incrementallyLoadTextures,\n    upAxis: options.upAxis,\n    forwardAxis: options.forwardAxis,\n    loadAttributesFor2D: options.projectTo2D,\n    enablePick: options.enablePick,\n    loadIndicesForWireframe: options.enableDebugWireframe,\n    loadPrimitiveOutline: options.enableShowOutline,\n  };\n  const loader = new I3dmLoader(loaderOptions);\n\n  try {\n    await loader.load();\n\n    const modelOptions = makeModelOptions(loader, ModelType.TILE_I3DM, options);\n    const model = new Model(modelOptions);\n    return model;\n  } catch (error) {\n    loader.destroy();\n    throw error;\n  }\n};\n\n/*\n * @private\n */\nModel.fromGeoJson = async function (options) {\n  const loaderOptions = {\n    geoJson: options.geoJson,\n  };\n  const loader = new GeoJsonLoader(loaderOptions);\n  const modelOptions = makeModelOptions(\n    loader,\n    ModelType.TILE_GEOJSON,\n    options,\n  );\n  const model = new Model(modelOptions);\n  return model;\n};\n\nconst scratchColor = new Color();\n\n/**\n * @private\n */\nModel.prototype.applyColorAndShow = function (style) {\n  const previousColor = Color.clone(this._color, scratchColor);\n  const hasColorStyle = defined(style) && defined(style.color);\n  const hasShowStyle = defined(style) && defined(style.show);\n\n  this._color = hasColorStyle\n    ? style.color.evaluateColor(undefined, this._color)\n    : Color.clone(Color.WHITE, this._color);\n  this._show = hasShowStyle ? style.show.evaluate(undefined) : true;\n\n  if (isColorAlphaDirty(previousColor, this._color)) {\n    this.resetDrawCommands();\n  }\n};\n\n/**\n * @private\n */\nModel.prototype.applyStyle = function (style) {\n  const isPnts = this.type === ModelType.TILE_PNTS;\n\n  const hasFeatureTable =\n    defined(this.featureTableId) &&\n    this.featureTables[this.featureTableId].featuresLength > 0;\n\n  const propertyAttributes = defined(this.structuralMetadata)\n    ? this.structuralMetadata.propertyAttributes\n    : undefined;\n  const hasPropertyAttributes =\n    defined(propertyAttributes) && defined(propertyAttributes[0]);\n\n  // Point clouds will be styled on the GPU unless they contain a batch table.\n  // That is, CPU styling will not be applied if:\n  // - points have no metadata at all, or\n  // - points have metadata stored as a property attribute\n  if (isPnts && (!hasFeatureTable || hasPropertyAttributes)) {\n    // Commands are rebuilt for point cloud styling since the new style may\n    // contain different shader functions.\n    this.resetDrawCommands();\n    return;\n  }\n\n  // The style is only set by the ModelFeatureTable. If there are no features,\n  // the color and show from the style are directly applied.\n  if (hasFeatureTable) {\n    const featureTable = this.featureTables[this.featureTableId];\n    featureTable.applyStyle(style);\n    updateStyleCommandsNeeded(this, style);\n  } else {\n    this.applyColorAndShow(style);\n    this._styleCommandsNeeded = undefined;\n  }\n};\n\nfunction makeModelOptions(loader, modelType, options) {\n  return {\n    loader: loader,\n    type: modelType,\n    resource: options.resource,\n    show: options.show,\n    modelMatrix: options.modelMatrix,\n    scale: options.scale,\n    enableVerticalExaggeration: options.enableVerticalExaggeration,\n    minimumPixelSize: options.minimumPixelSize,\n    maximumScale: options.maximumScale,\n    id: options.id,\n    allowPicking: options.allowPicking,\n    clampAnimations: options.clampAnimations,\n    shadows: options.shadows,\n    debugShowBoundingVolume: options.debugShowBoundingVolume,\n    enableDebugWireframe: options.enableDebugWireframe,\n    debugWireframe: options.debugWireframe,\n    cull: options.cull,\n    opaquePass: options.opaquePass,\n    customShader: options.customShader,\n    content: options.content,\n    heightReference: options.heightReference,\n    scene: options.scene,\n    distanceDisplayCondition: options.distanceDisplayCondition,\n    color: options.color,\n    colorBlendAmount: options.colorBlendAmount,\n    colorBlendMode: options.colorBlendMode,\n    silhouetteColor: options.silhouetteColor,\n    silhouetteSize: options.silhouetteSize,\n    enableShowOutline: options.enableShowOutline,\n    showOutline: options.showOutline,\n    outlineColor: options.outlineColor,\n    clippingPlanes: options.clippingPlanes,\n    clippingPolygons: options.clippingPolygons,\n    lightColor: options.lightColor,\n    imageBasedLighting: options.imageBasedLighting,\n    backFaceCulling: options.backFaceCulling,\n    credit: options.credit,\n    showCreditsOnScreen: options.showCreditsOnScreen,\n    splitDirection: options.splitDirection,\n    projectTo2D: options.projectTo2D,\n    enablePick: options.enablePick,\n    featureIdLabel: options.featureIdLabel,\n    instanceFeatureIdLabel: options.instanceFeatureIdLabel,\n    pointCloudShading: options.pointCloudShading,\n    classificationType: options.classificationType,\n    pickObject: options.pickObject,\n  };\n}\n\n/**\n * Interface for the function that is called with the loaded gltf object once loaded.\n * @callback Model.GltfCallback\n *\n * @param {object} gltf The gltf object\n */\n\nexport default Model;\n","import Color from \"../../Core/Color.js\";\nimport combine from \"../../Core/combine.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Ellipsoid from \"../../Core/Ellipsoid.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport ModelAnimationLoop from \"../ModelAnimationLoop.js\";\nimport Model from \"./Model.js\";\n\n/**\n * Represents the contents of a glTF, glb or\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel|Batched 3D Model}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n * This object is normally not instantiated directly, use {@link Model3DTileContent.fromGltf}, {@link Model3DTileContent.fromB3dm}, {@link Model3DTileContent.fromI3dm}, {@link Model3DTileContent.fromPnts}, or {@link Model3DTileContent.fromGeoJson}.\n *\n * @alias Model3DTileContent\n * @constructor\n * @private\n */\nfunction Model3DTileContent(tileset, tile, resource) {\n  this._tileset = tileset;\n  this._tile = tile;\n  this._resource = resource;\n\n  this._model = undefined;\n  this._metadata = undefined;\n  this._group = undefined;\n  this._ready = false;\n}\n\nObject.defineProperties(Model3DTileContent.prototype, {\n  featuresLength: {\n    get: function () {\n      const model = this._model;\n      const featureTables = model.featureTables;\n      const featureTableId = model.featureTableId;\n\n      if (defined(featureTables) && defined(featureTables[featureTableId])) {\n        return featureTables[featureTableId].featuresLength;\n      }\n\n      return 0;\n    },\n  },\n\n  pointsLength: {\n    get: function () {\n      return this._model.statistics.pointsLength;\n    },\n  },\n\n  trianglesLength: {\n    get: function () {\n      return this._model.statistics.trianglesLength;\n    },\n  },\n\n  geometryByteLength: {\n    get: function () {\n      return this._model.statistics.geometryByteLength;\n    },\n  },\n\n  texturesByteLength: {\n    get: function () {\n      return this._model.statistics.texturesByteLength;\n    },\n  },\n\n  batchTableByteLength: {\n    get: function () {\n      const statistics = this._model.statistics;\n      return (\n        statistics.propertyTablesByteLength + statistics.batchTexturesByteLength\n      );\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Model3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  url: {\n    get: function () {\n      return this._resource.getUrlComponent(true);\n    },\n  },\n\n  batchTable: {\n    get: function () {\n      const model = this._model;\n      const featureTables = model.featureTables;\n      const featureTableId = model.featureTableId;\n\n      if (defined(featureTables) && defined(featureTables[featureTableId])) {\n        return featureTables[featureTableId];\n      }\n\n      return undefined;\n    },\n  },\n\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n    set: function (value) {\n      this._metadata = value;\n    },\n  },\n\n  group: {\n    get: function () {\n      return this._group;\n    },\n    set: function (value) {\n      this._group = value;\n    },\n  },\n});\n\n/**\n * Returns an array containing the `texture.id` values for all textures\n * that are part of this content.\n *\n * @returns {string[]} The texture IDs\n */\nModel3DTileContent.prototype.getTextureIds = function () {\n  return this._model.statistics.getTextureIds();\n};\n\n/**\n * Returns the length, in bytes, of the texture data for the texture with\n * the given ID that is part of this content, or `undefined` if this\n * content does not contain the texture with the given ID.\n *\n * @param {string} textureId The texture ID\n * @returns {number|undefined} The texture byte length\n */\nModel3DTileContent.prototype.getTextureByteLengthById = function (textureId) {\n  return this._model.statistics.getTextureByteLengthById(textureId);\n};\n\n/**\n * Returns the object that was created for the given extension.\n *\n * The given name may be the name of a glTF extension, like `\"EXT_example_extension\"`.\n * If the specified extension was present in the root of the underlying glTF asset,\n * and a loader for the specified extension has processed the extension data, then\n * this will return the model representation of the extension.\n *\n * @param {string} extensionName The name of the extension\n * @returns {object|undefined} The object, or `undefined`\n *\n * @private\n */\nModel3DTileContent.prototype.getExtension = function (extensionName) {\n  const model = this._model;\n  const extension = model.getExtension(extensionName);\n  return extension;\n};\n\nModel3DTileContent.prototype.getFeature = function (featureId) {\n  const model = this._model;\n  const featureTableId = model.featureTableId;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(featureTableId)) {\n    throw new DeveloperError(\n      \"No feature ID set is selected. Make sure Cesium3DTileset.featureIdLabel or Cesium3DTileset.instanceFeatureIdLabel is defined\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const featureTable = model.featureTables[featureTableId];\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(featureTable)) {\n    throw new DeveloperError(\n      \"No feature table found for the selected feature ID set\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  //>>includeStart('debug', pragmas.debug);\n  const featuresLength = featureTable.featuresLength;\n  if (!defined(featureId) || featureId < 0 || featureId >= featuresLength) {\n    throw new DeveloperError(\n      `featureId is required and must be between 0 and featuresLength - 1 (${\n        featuresLength - 1\n      }).`,\n    );\n  }\n  //>>includeEnd('debug');\n  return featureTable.getFeature(featureId);\n};\n\nModel3DTileContent.prototype.hasProperty = function (featureId, name) {\n  const model = this._model;\n  const featureTableId = model.featureTableId;\n  if (!defined(featureTableId)) {\n    return false;\n  }\n\n  const featureTable = model.featureTables[featureTableId];\n  return featureTable.hasProperty(featureId, name);\n};\n\nModel3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n  color = enabled ? color : Color.WHITE;\n  if (this.featuresLength === 0) {\n    this._model.color = color;\n  } else if (defined(this.batchTable)) {\n    this.batchTable.setAllColor(color);\n  }\n};\n\nModel3DTileContent.prototype.applyStyle = function (style) {\n  // the setter will call model.applyStyle()\n  this._model.style = style;\n};\n\nModel3DTileContent.prototype.update = function (tileset, frameState) {\n  const model = this._model;\n  const tile = this._tile;\n\n  model.colorBlendAmount = tileset.colorBlendAmount;\n  model.colorBlendMode = tileset.colorBlendMode;\n  model.modelMatrix = tile.computedTransform;\n  model.customShader = tileset.customShader;\n  model.featureIdLabel = tileset.featureIdLabel;\n  model.instanceFeatureIdLabel = tileset.instanceFeatureIdLabel;\n  model.lightColor = tileset.lightColor;\n  model.imageBasedLighting = tileset.imageBasedLighting;\n  model.backFaceCulling = tileset.backFaceCulling;\n  model.shadows = tileset.shadows;\n  model.showCreditsOnScreen = tileset.showCreditsOnScreen;\n  model.splitDirection = tileset.splitDirection;\n  model.debugWireframe = tileset.debugWireframe;\n  model.showOutline = tileset.showOutline;\n  model.outlineColor = tileset.outlineColor;\n  model.pointCloudShading = tileset.pointCloudShading;\n\n  // Updating clipping planes requires more effort because of ownership checks\n  const tilesetClippingPlanes = tileset.clippingPlanes;\n  model.referenceMatrix = tileset.clippingPlanesOriginMatrix;\n  if (defined(tilesetClippingPlanes) && tile.clippingPlanesDirty) {\n    // Dereference the clipping planes from the model if they are irrelevant.\n    model._clippingPlanes =\n      tilesetClippingPlanes.enabled && tile._isClipped\n        ? tilesetClippingPlanes\n        : undefined;\n  }\n\n  const tilesetEnvironmentMapManager = tileset.environmentMapManager;\n  if (model.environmentMapManager !== tilesetClippingPlanes) {\n    model._environmentMapManager = tilesetEnvironmentMapManager;\n  }\n\n  // If the model references a different ClippingPlaneCollection from the tileset,\n  // update the model to use the new ClippingPlaneCollection.\n  if (\n    defined(tilesetClippingPlanes) &&\n    defined(model._clippingPlanes) &&\n    model._clippingPlanes !== tilesetClippingPlanes\n  ) {\n    model._clippingPlanes = tilesetClippingPlanes;\n    model._clippingPlanesState = 0;\n  }\n\n  // Updating clipping polygons requires more effort because of ownership checks\n  const tilesetClippingPolygons = tileset.clippingPolygons;\n  if (defined(tilesetClippingPolygons) && tile.clippingPolygonsDirty) {\n    // Dereference the clipping polygons from the model if they are irrelevant.\n    model._clippingPolygons =\n      tilesetClippingPolygons.enabled && tile._isClippedByPolygon\n        ? tilesetClippingPolygons\n        : undefined;\n  }\n\n  // If the model references a different ClippingPolygonCollection from the tileset,\n  // update the model to use the new ClippingPolygonCollection.\n  if (\n    defined(tilesetClippingPolygons) &&\n    defined(model._clippingPolygons) &&\n    model._clippingPolygons !== tilesetClippingPolygons\n  ) {\n    model._clippingPolygons = tilesetClippingPolygons;\n    model._clippingPolygonsState = 0;\n  }\n\n  model.update(frameState);\n\n  if (!this._ready && model.ready) {\n    // Animation can only be added once the model is ready\n    model.activeAnimations.addAll({\n      loop: ModelAnimationLoop.REPEAT,\n    });\n\n    this._ready = true;\n  }\n};\n\nModel3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nModel3DTileContent.prototype.destroy = function () {\n  this._model = this._model && this._model.destroy();\n  return destroyObject(this);\n};\n\nModel3DTileContent.fromGltf = async function (tileset, tile, resource, gltf) {\n  const content = new Model3DTileContent(tileset, tile, resource);\n\n  const additionalOptions = {\n    gltf: gltf,\n    basePath: resource,\n  };\n\n  const modelOptions = makeModelOptions(\n    tileset,\n    tile,\n    content,\n    additionalOptions,\n  );\n\n  const classificationType = tileset.vectorClassificationOnly\n    ? undefined\n    : tileset.classificationType;\n\n  modelOptions.classificationType = classificationType;\n\n  const model = await Model.fromGltfAsync(modelOptions);\n  content._model = model;\n\n  return content;\n};\n\nModel3DTileContent.fromB3dm = async function (\n  tileset,\n  tile,\n  resource,\n  arrayBuffer,\n  byteOffset,\n) {\n  const content = new Model3DTileContent(tileset, tile, resource);\n\n  const additionalOptions = {\n    arrayBuffer: arrayBuffer,\n    byteOffset: byteOffset,\n    resource: resource,\n  };\n\n  const modelOptions = makeModelOptions(\n    tileset,\n    tile,\n    content,\n    additionalOptions,\n  );\n\n  const classificationType = tileset.vectorClassificationOnly\n    ? undefined\n    : tileset.classificationType;\n\n  modelOptions.classificationType = classificationType;\n\n  const model = await Model.fromB3dm(modelOptions);\n  content._model = model;\n\n  return content;\n};\n\nModel3DTileContent.fromI3dm = async function (\n  tileset,\n  tile,\n  resource,\n  arrayBuffer,\n  byteOffset,\n) {\n  const content = new Model3DTileContent(tileset, tile, resource);\n\n  const additionalOptions = {\n    arrayBuffer: arrayBuffer,\n    byteOffset: byteOffset,\n    resource: resource,\n  };\n\n  const modelOptions = makeModelOptions(\n    tileset,\n    tile,\n    content,\n    additionalOptions,\n  );\n\n  const model = await Model.fromI3dm(modelOptions);\n  content._model = model;\n\n  return content;\n};\n\nModel3DTileContent.fromPnts = async function (\n  tileset,\n  tile,\n  resource,\n  arrayBuffer,\n  byteOffset,\n) {\n  const content = new Model3DTileContent(tileset, tile, resource);\n\n  const additionalOptions = {\n    arrayBuffer: arrayBuffer,\n    byteOffset: byteOffset,\n    resource: resource,\n  };\n\n  const modelOptions = makeModelOptions(\n    tileset,\n    tile,\n    content,\n    additionalOptions,\n  );\n  const model = await Model.fromPnts(modelOptions);\n  content._model = model;\n\n  return content;\n};\n\nModel3DTileContent.fromGeoJson = async function (\n  tileset,\n  tile,\n  resource,\n  geoJson,\n) {\n  const content = new Model3DTileContent(tileset, tile, resource);\n\n  const additionalOptions = {\n    geoJson: geoJson,\n    resource: resource,\n  };\n\n  const modelOptions = makeModelOptions(\n    tileset,\n    tile,\n    content,\n    additionalOptions,\n  );\n  const model = await Model.fromGeoJson(modelOptions);\n  content._model = model;\n\n  return content;\n};\n\n/**\n * Find an intersection between a ray and the tile content surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nModel3DTileContent.prototype.pick = function (ray, frameState, result) {\n  if (!defined(this._model) || !this._ready) {\n    return undefined;\n  }\n\n  const verticalExaggeration = frameState.verticalExaggeration;\n  const relativeHeight = frameState.verticalExaggerationRelativeHeight;\n\n  // All tilesets assume a WGS84 ellipsoid\n  return this._model.pick(\n    ray,\n    frameState,\n    verticalExaggeration,\n    relativeHeight,\n    Ellipsoid.WGS84,\n    result,\n  );\n};\n\nfunction makeModelOptions(tileset, tile, content, additionalOptions) {\n  const mainOptions = {\n    cull: false, // The model is already culled by 3D Tiles\n    releaseGltfJson: true, // Models are unique and will not benefit from caching so save memory\n    opaquePass: Pass.CESIUM_3D_TILE, // Draw opaque portions of the model during the 3D Tiles pass\n    modelMatrix: tile.computedTransform,\n    upAxis: tileset._modelUpAxis,\n    forwardAxis: tileset._modelForwardAxis,\n    incrementallyLoadTextures: false,\n    customShader: tileset.customShader,\n    content: content,\n    colorBlendMode: tileset.colorBlendMode,\n    colorBlendAmount: tileset.colorBlendAmount,\n    lightColor: tileset.lightColor,\n    imageBasedLighting: tileset.imageBasedLighting,\n    featureIdLabel: tileset.featureIdLabel,\n    instanceFeatureIdLabel: tileset.instanceFeatureIdLabel,\n    pointCloudShading: tileset.pointCloudShading,\n    clippingPlanes: tileset.clippingPlanes,\n    backFaceCulling: tileset.backFaceCulling,\n    shadows: tileset.shadows,\n    showCreditsOnScreen: tileset.showCreditsOnScreen,\n    splitDirection: tileset.splitDirection,\n    enableDebugWireframe: tileset._enableDebugWireframe,\n    debugWireframe: tileset.debugWireframe,\n    projectTo2D: tileset._projectTo2D,\n    enablePick: tileset._enablePick,\n    enableShowOutline: tileset._enableShowOutline,\n    showOutline: tileset.showOutline,\n    outlineColor: tileset.outlineColor,\n  };\n\n  return combine(additionalOptions, mainOptions);\n}\n\nexport default Model3DTileContent;\n","/**\n * Options for configuring the {@link AlphaPipelineStage}\n *\n * @alias ModelAlphaOptions\n * @constructor\n *\n * @private\n */\nfunction ModelAlphaOptions() {\n  /**\n   * Which render pass will render the model.\n   *\n   * @type {Pass}\n   * @private\n   */\n  this.pass = undefined;\n  /**\n   * Determines the alpha threshold below which fragments are discarded\n   *\n   * @type {number}\n   * @private\n   */\n  this.alphaCutoff = undefined;\n}\n\nexport default ModelAlphaOptions;\n","import defined from \"../../Core/defined.js\";\nimport Event from \"../../Core/Event.js\";\nimport JulianDate from \"../../Core/JulianDate.js\";\nimport ModelAnimationLoop from \"../ModelAnimationLoop.js\";\nimport ModelAnimationState from \"../ModelAnimationState.js\";\nimport ModelAnimationChannel from \"./ModelAnimationChannel.js\";\n\n/**\n * <div class=\"notice\">\n * Create animations by calling {@link ModelAnimationCollection#add}. Do not call the constructor directly.\n * </div>\n *\n * An active animation derived from a glTF asset. An active animation is an\n * animation that is either currently playing or scheduled to be played due to\n * being added to a model's {@link ModelAnimationCollection}. An active animation\n * is an instance of an animation; for example, there can be multiple active\n * animations for the same glTF animation, each with a different start time.\n *\n * @alias ModelAnimation\n * @internalConstructor\n * @class\n *\n * @see ModelAnimationCollection#add\n */\nfunction ModelAnimation(model, animation, options) {\n  this._animation = animation;\n  this._name = animation.name;\n  this._runtimeChannels = undefined;\n\n  this._startTime = JulianDate.clone(options.startTime);\n  this._delay = options.delay ?? 0.0; // in seconds\n  this._stopTime = JulianDate.clone(options.stopTime);\n\n  /**\n   * When <code>true</code>, the animation is removed after it stops playing.\n   * This is slightly more efficient that not removing it, but if, for example,\n   * time is reversed, the animation is not played again.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.removeOnStop = options.removeOnStop ?? false;\n  this._multiplier = options.multiplier ?? 1.0;\n  this._reverse = options.reverse ?? false;\n  this._loop = options.loop ?? ModelAnimationLoop.NONE;\n  this._animationTime = options.animationTime;\n  this._prevAnimationDelta = undefined;\n\n  /**\n   * The event fired when this animation is started.  This can be used, for\n   * example, to play a sound or start a particle system, when the animation starts.\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * animation.start.addEventListener(function(model, animation) {\n   *   console.log(`Animation started: ${animation.name}`);\n   * });\n   */\n  this.start = new Event();\n\n  /**\n   * The event fired when on each frame when this animation is updated.  The\n   * current time of the animation, relative to the glTF animation time span, is\n   * passed to the event, which allows, for example, starting new animations at a\n   * specific time relative to a playing animation.\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * animation.update.addEventListener(function(model, animation, time) {\n   *   console.log(`Animation updated: ${animation.name}. glTF animation time: ${time}`);\n   * });\n   */\n  this.update = new Event();\n\n  /**\n   * The event fired when this animation is stopped.  This can be used, for\n   * example, to play a sound or start a particle system, when the animation stops.\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * animation.stop.addEventListener(function(model, animation) {\n   *   console.log(`Animation stopped: ${animation.name}`);\n   * });\n   */\n  this.stop = new Event();\n\n  this._state = ModelAnimationState.STOPPED;\n\n  // Set during animation update\n  this._computedStartTime = undefined;\n  this._duration = undefined;\n\n  // To avoid allocations in ModelAnimationCollection.update\n  const that = this;\n  this._raiseStartEvent = function () {\n    that.start.raiseEvent(model, that);\n  };\n  this._updateEventTime = 0.0;\n  this._raiseUpdateEvent = function () {\n    that.update.raiseEvent(model, that, that._updateEventTime);\n  };\n  this._raiseStopEvent = function () {\n    that.stop.raiseEvent(model, that);\n  };\n\n  this._model = model;\n\n  this._localStartTime = undefined;\n  this._localStopTime = undefined;\n\n  initialize(this);\n}\n\nObject.defineProperties(ModelAnimation.prototype, {\n  /**\n   * The glTF animation.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {ModelComponents.Animation}\n   * @readonly\n   *\n   * @private\n   */\n  animation: {\n    get: function () {\n      return this._animation;\n    },\n  },\n\n  /**\n   * The name that identifies this animation in the model, if it exists.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The runtime animation channels for this animation.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {ModelAnimationChannel[]}\n   * @readonly\n   *\n   * @private\n   */\n  runtimeChannels: {\n    get: function () {\n      return this._runtimeChannels;\n    },\n  },\n\n  /**\n   * The {@link Model} that owns this animation.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {Model}\n   * @readonly\n   *\n   * @private\n   */\n  model: {\n    get: function () {\n      return this._model;\n    },\n  },\n\n  /**\n   * The starting point of the animation in local animation time. This is the minimum\n   * time value across all of the keyframes belonging to this animation.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  localStartTime: {\n    get: function () {\n      return this._localStartTime;\n    },\n  },\n\n  /**\n   * The stopping point of the animation in local animation time. This is the maximum\n   * time value across all of the keyframes belonging to this animation.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  localStopTime: {\n    get: function () {\n      return this._localStopTime;\n    },\n  },\n\n  /**\n   * The scene time to start playing this animation. When this is <code>undefined</code>,\n   * the animation starts at the next frame.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {JulianDate}\n   * @readonly\n   *\n   * @default undefined\n   */\n  startTime: {\n    get: function () {\n      return this._startTime;\n    },\n  },\n\n  /**\n   * The delay, in seconds, from {@link ModelAnimation#startTime} to start playing.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @default undefined\n   */\n  delay: {\n    get: function () {\n      return this._delay;\n    },\n  },\n\n  /**\n   * The scene time to stop playing this animation. When this is <code>undefined</code>,\n   * the animation is played for its full duration and perhaps repeated depending on\n   * {@link ModelAnimation#loop}.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {JulianDate}\n   * @readonly\n   *\n   * @default undefined\n   */\n  stopTime: {\n    get: function () {\n      return this._stopTime;\n    },\n  },\n\n  /**\n   * Values greater than <code>1.0</code> increase the speed that the animation is played relative\n   * to the scene clock speed; values less than <code>1.0</code> decrease the speed.  A value of\n   * <code>1.0</code> plays the animation at the speed in the glTF animation mapped to the scene\n   * clock speed.  For example, if the scene is played at 2x real-time, a two-second glTF animation\n   * will play in one second even if <code>multiplier</code> is <code>1.0</code>.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @default 1.0\n   */\n  multiplier: {\n    get: function () {\n      return this._multiplier;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the animation is played in reverse.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  reverse: {\n    get: function () {\n      return this._reverse;\n    },\n  },\n\n  /**\n   * Determines if and how the animation is looped.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {ModelAnimationLoop}\n   * @readonly\n   *\n   * @default {@link ModelAnimationLoop.NONE}\n   */\n  loop: {\n    get: function () {\n      return this._loop;\n    },\n  },\n\n  /**\n   * If this is defined, it will be used to compute the local animation time\n   * instead of the scene's time.\n   *\n   * @memberof ModelAnimation.prototype\n   *\n   * @type {ModelAnimation.AnimationTimeCallback}\n   * @default undefined\n   */\n  animationTime: {\n    get: function () {\n      return this._animationTime;\n    },\n  },\n});\n\nfunction initialize(runtimeAnimation) {\n  let localStartTime = Number.MAX_VALUE;\n  let localStopTime = -Number.MAX_VALUE;\n\n  const sceneGraph = runtimeAnimation._model.sceneGraph;\n  const animation = runtimeAnimation._animation;\n  const channels = animation.channels;\n  const length = channels.length;\n\n  const runtimeChannels = [];\n  for (let i = 0; i < length; i++) {\n    const channel = channels[i];\n    const target = channel.target;\n\n    // Ignore this channel if the target is invalid, i.e. if the node\n    // it references doesn't exist.\n    if (!defined(target)) {\n      continue;\n    }\n\n    const nodeIndex = target.node.index;\n    const runtimeNode = sceneGraph._runtimeNodes[nodeIndex];\n\n    const runtimeChannel = new ModelAnimationChannel({\n      channel: channel,\n      runtimeAnimation: runtimeAnimation,\n      runtimeNode: runtimeNode,\n    });\n\n    const times = channel.sampler.input;\n    localStartTime = Math.min(localStartTime, times[0]);\n    localStopTime = Math.max(localStopTime, times[times.length - 1]);\n\n    runtimeChannels.push(runtimeChannel);\n  }\n\n  runtimeAnimation._runtimeChannels = runtimeChannels;\n  runtimeAnimation._localStartTime = localStartTime;\n  runtimeAnimation._localStopTime = localStopTime;\n}\n\n/**\n * Evaluate all animation channels to advance this animation.\n *\n * @param {number} time The local animation time.\n *\n * @private\n */\nModelAnimation.prototype.animate = function (time) {\n  const runtimeChannels = this._runtimeChannels;\n  const length = runtimeChannels.length;\n  for (let i = 0; i < length; i++) {\n    runtimeChannels[i].animate(time);\n  }\n};\n\n/**\n * A function used to compute the local animation time for a ModelAnimation.\n * @callback ModelAnimation.AnimationTimeCallback\n *\n * @param {number} duration The animation's original duration in seconds.\n * @param {number} seconds The seconds since the animation started, in scene time.\n * @returns {number} Returns the local animation time.\n *\n * @example\n * // Use real time for model animation (assuming animateWhilePaused was set to true)\n * function animationTime(duration) {\n *     return Date.now() / 1000 / duration;\n * }\n *\n * @example\n * // Offset the phase of the animation, so it starts halfway through its cycle.\n * function animationTime(duration, seconds) {\n *     return seconds / duration + 0.5;\n * }\n */\nexport default ModelAnimation;\n","import Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Check from \"../../Core/Check.js\";\nimport ConstantSpline from \"../../Core/ConstantSpline.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport HermiteSpline from \"../../Core/HermiteSpline.js\";\nimport InterpolationType from \"../../Core/InterpolationType.js\";\nimport LinearSpline from \"../../Core/LinearSpline.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport SteppedSpline from \"../../Core/SteppedSpline.js\";\nimport Quaternion from \"../../Core/Quaternion.js\";\nimport QuaternionSpline from \"../../Core/QuaternionSpline.js\";\n\nconst AnimatedPropertyType = ModelComponents.AnimatedPropertyType;\n\n/**\n * A runtime animation channel for a {@link ModelAnimation}. An animation\n * channel is responsible for interpolating between the keyframe values of an animated\n * property, then applying the change to the target node.\n *\n * @param {object} options An object containing the following options:\n * @param {ModelComponents.AnimationChannel} options.channel The corresponding animation channel components from the 3D model.\n * @param {ModelAnimation} options.runtimeAnimation The runtime animation containing this channel.\n * @param {ModelRuntimeNode} options.runtimeNode The runtime node that this channel will animate.\n *\n * @alias ModelAnimationChannel\n * @constructor\n *\n * @private\n */\nfunction ModelAnimationChannel(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const channel = options.channel;\n  const runtimeAnimation = options.runtimeAnimation;\n  const runtimeNode = options.runtimeNode;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.channel\", channel);\n  Check.typeOf.object(\"options.runtimeAnimation\", runtimeAnimation);\n  Check.typeOf.object(\"options.runtimeNode\", runtimeNode);\n  //>>includeEnd('debug');\n\n  this._channel = channel;\n  this._runtimeAnimation = runtimeAnimation;\n  this._runtimeNode = runtimeNode;\n\n  // An animation channel can have multiple splines if it animates\n  // a node's morph weights, which will involve multiple morph targets.\n  this._splines = [];\n  this._path = undefined;\n\n  initialize(this);\n}\n\nObject.defineProperties(ModelAnimationChannel.prototype, {\n  /**\n   * The glTF animation channel.\n   *\n   * @memberof ModelAnimationChannel.prototype\n   *\n   * @type {ModelComponents.AnimationChannel}\n   * @readonly\n   *\n   * @private\n   */\n  channel: {\n    get: function () {\n      return this._channel;\n    },\n  },\n\n  /**\n   * The runtime animation that owns this channel.\n   *\n   * @memberof ModelAnimationChannel.prototype\n   *\n   * @type {ModelAnimation}\n   * @readonly\n   *\n   * @private\n   */\n  runtimeAnimation: {\n    get: function () {\n      return this._runtimeAnimation;\n    },\n  },\n\n  /**\n   * The runtime node that this channel animates.\n   *\n   * @memberof ModelAnimationChannel.prototype\n   *\n   * @type {ModelRuntimeNode}\n   * @readonly\n   *\n   * @private\n   */\n  runtimeNode: {\n    get: function () {\n      return this._runtimeNode;\n    },\n  },\n\n  /**\n   * The splines used to evaluate this animation channel.\n   *\n   * @memberof ModelAnimationChannel.prototype\n   *\n   * @type {Spline[]}\n   * @readonly\n   *\n   * @private\n   */\n  splines: {\n    get: function () {\n      return this._splines;\n    },\n  },\n});\n\nfunction createCubicSpline(times, points) {\n  const cubicPoints = [];\n  const inTangents = [];\n  const outTangents = [];\n\n  const length = points.length;\n  for (let i = 0; i < length; i += 3) {\n    inTangents.push(points[i]);\n    cubicPoints.push(points[i + 1]);\n    outTangents.push(points[i + 2]);\n  }\n\n  // Remove the first in-tangent and last out-tangent, since they\n  // are not used in the spline calculations\n  inTangents.splice(0, 1);\n  outTangents.length = outTangents.length - 1;\n\n  return new HermiteSpline({\n    times: times,\n    points: cubicPoints,\n    inTangents: inTangents,\n    outTangents: outTangents,\n  });\n}\n\nfunction createSpline(times, points, interpolation, path) {\n  if (times.length === 1 && points.length === 1) {\n    return new ConstantSpline(points[0]);\n  }\n\n  switch (interpolation) {\n    case InterpolationType.STEP:\n      return new SteppedSpline({\n        times: times,\n        points: points,\n      });\n    case InterpolationType.CUBICSPLINE:\n      return createCubicSpline(times, points);\n    case InterpolationType.LINEAR:\n      if (path === AnimatedPropertyType.ROTATION) {\n        return new QuaternionSpline({\n          times: times,\n          points: points,\n        });\n      }\n      return new LinearSpline({\n        times: times,\n        points: points,\n      });\n  }\n}\n\nfunction createSplines(times, points, interpolation, path, count) {\n  const splines = [];\n  if (path === AnimatedPropertyType.WEIGHTS) {\n    const pointsLength = points.length;\n    // Get the number of keyframes in each weight's output.\n    const outputLength = pointsLength / count;\n\n    // Iterate over the array using the number of morph targets in the model.\n    let targetIndex, i;\n    for (targetIndex = 0; targetIndex < count; targetIndex++) {\n      const output = new Array(outputLength);\n\n      // Weights are ordered such that they are keyframed in the order in which\n      // their targets appear the glTF. For example, the weights of three targets\n      // may appear as [w(0,0), w(0,1), w(0,2), w(1,0), w(1,1), w(1,2) ...],\n      // where i and j in w(i,j) are the time indices and target indices, respectively.\n\n      // However, for morph targets with cubic interpolation, the data is stored per\n      // keyframe in the order [a1, a2, ..., an, v1, v2, ... vn, b1, b2, ..., bn],\n      // where ai, vi, and bi are the in-tangent, property, and out-tangents of\n      // the ith morph target respectively.\n      let pointsIndex = targetIndex;\n      if (interpolation === InterpolationType.CUBICSPLINE) {\n        for (i = 0; i < outputLength; i += 3) {\n          output[i] = points[pointsIndex];\n          output[i + 1] = points[pointsIndex + count];\n          output[i + 2] = points[pointsIndex + 2 * count];\n          pointsIndex += count * 3;\n        }\n      } else {\n        for (i = 0; i < outputLength; i++) {\n          output[i] = points[pointsIndex];\n          pointsIndex += count;\n        }\n      }\n\n      splines.push(createSpline(times, output, interpolation, path));\n    }\n  } else {\n    splines.push(createSpline(times, points, interpolation, path));\n  }\n\n  return splines;\n}\n\nconst scratchCartesian3 = new Cartesian3();\nconst scratchQuaternion = new Quaternion();\n\nfunction initialize(runtimeChannel) {\n  const channel = runtimeChannel._channel;\n\n  const sampler = channel.sampler;\n  const times = sampler.input;\n  const points = sampler.output;\n\n  const interpolation = sampler.interpolation;\n  const target = channel.target;\n  const path = target.path;\n\n  const runtimeNode = runtimeChannel._runtimeNode;\n  const count = defined(runtimeNode.morphWeights)\n    ? runtimeNode.morphWeights.length\n    : 1;\n  const splines = createSplines(times, points, interpolation, path, count);\n\n  runtimeChannel._splines = splines;\n  runtimeChannel._path = path;\n}\n\n/**\n * Animates the target node property based on its spline.\n *\n * @param {number} time The local animation time.\n *\n * @private\n */\nModelAnimationChannel.prototype.animate = function (time) {\n  const splines = this._splines;\n  const path = this._path;\n  const model = this._runtimeAnimation.model;\n  const runtimeNode = this._runtimeNode;\n\n  // Weights are handled differently than the other properties because\n  // they need to be updated in place.\n  if (path === AnimatedPropertyType.WEIGHTS) {\n    const morphWeights = runtimeNode.morphWeights;\n    const length = morphWeights.length;\n    for (let i = 0; i < length; i++) {\n      const spline = splines[i];\n      const localAnimationTime = model.clampAnimations\n        ? spline.clampTime(time)\n        : spline.wrapTime(time);\n      morphWeights[i] = spline.evaluate(localAnimationTime);\n    }\n  } else if (runtimeNode.userAnimated) {\n    // If the node is being animated externally, ignore the glTF animation.\n    return;\n  } else {\n    const spline = splines[0];\n    const localAnimationTime = model.clampAnimations\n      ? spline.clampTime(time)\n      : spline.wrapTime(time);\n\n    // This sets the translate, rotate, and scale properties.\n    if (\n      path === AnimatedPropertyType.TRANSLATION ||\n      path === AnimatedPropertyType.SCALE\n    ) {\n      runtimeNode[path] = spline.evaluate(\n        localAnimationTime,\n        scratchCartesian3,\n      );\n    } else if (path === AnimatedPropertyType.ROTATION) {\n      runtimeNode[path] = spline.evaluate(\n        localAnimationTime,\n        scratchQuaternion,\n      );\n    }\n  }\n};\n\nexport default ModelAnimationChannel;\n","import Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Event from \"../../Core/Event.js\";\nimport JulianDate from \"../../Core/JulianDate.js\";\nimport CesiumMath from \"../../Core/Math.js\";\nimport ModelAnimation from \"./ModelAnimation.js\";\nimport ModelAnimationLoop from \".././ModelAnimationLoop.js\";\nimport ModelAnimationState from \".././ModelAnimationState.js\";\n\n/**\n * <div class=\"notice\">\n * Access a model's animations {@link Model#activeAnimations}. Do not call the constructor directly\n * </div>\n *\n * A collection of active model animations.\n *\n * @alias ModelAnimationCollection\n * @internalConstructor\n * @class\n *\n * @see Model#activeAnimations\n */\nfunction ModelAnimationCollection(model) {\n  /**\n   * The event fired when an animation is added to the collection.  This can be used, for\n   * example, to keep a UI in sync.\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * model.activeAnimations.animationAdded.addEventListener(function(model, animation) {\n   *   console.log(`Animation added: ${animation.name}`);\n   * });\n   */\n  this.animationAdded = new Event();\n\n  /**\n   * The event fired when an animation is removed from the collection.  This can be used, for\n   * example, to keep a UI in sync.\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * model.activeAnimations.animationRemoved.addEventListener(function(model, animation) {\n   *   console.log(`Animation removed: ${animation.name}`);\n   * });\n   */\n  this.animationRemoved = new Event();\n\n  /**\n   * When true, the animation will play even when the scene time is paused. However,\n   * whether animation takes place will depend on the animationTime functions assigned\n   * to the model's animations. By default, this is based on scene time, so models using\n   * the default will not animate regardless of this setting.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.animateWhilePaused = false;\n\n  this._model = model;\n  this._runtimeAnimations = [];\n  this._previousTime = undefined;\n}\n\nObject.defineProperties(ModelAnimationCollection.prototype, {\n  /**\n   * The number of animations in the collection.\n   *\n   * @memberof ModelAnimationCollection.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._runtimeAnimations.length;\n    },\n  },\n\n  /**\n   * The model that owns this animation collection.\n   *\n   * @memberof ModelAnimationCollection.prototype\n   *\n   * @type {Model}\n   * @readonly\n   */\n  model: {\n    get: function () {\n      return this._model;\n    },\n  },\n});\n\nfunction addAnimation(collection, animation, options) {\n  const model = collection._model;\n  const runtimeAnimation = new ModelAnimation(model, animation, options);\n  collection._runtimeAnimations.push(runtimeAnimation);\n  collection.animationAdded.raiseEvent(model, runtimeAnimation);\n  return runtimeAnimation;\n}\n\n/**\n * Creates and adds an animation with the specified initial properties to the collection.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationAdded} event so, for example, a UI can stay in sync.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} [options.name] The glTF animation name that identifies the animation. Must be defined if <code>options.index</code> is <code>undefined</code>.\n * @param {number} [options.index] The glTF animation index that identifies the animation. Must be defined if <code>options.name</code> is <code>undefined</code>.\n * @param {JulianDate} [options.startTime] The scene time to start playing the animation.  When this is <code>undefined</code>, the animation starts at the next frame.\n * @param {number} [options.delay=0.0] The delay, in seconds, from <code>startTime</code> to start playing. This will only affect the animation if <code>options.loop</code> is ModelAnimationLoop.NONE.\n * @param {JulianDate} [options.stopTime] The scene time to stop playing the animation.  When this is <code>undefined</code>, the animation is played for its full duration.\n * @param {boolean} [options.removeOnStop=false] When <code>true</code>, the animation is removed after it stops playing. This will only affect the animation if <code>options.loop</code> is ModelAnimationLoop.NONE.\n * @param {number} [options.multiplier=1.0] Values greater than <code>1.0</code> increase the speed that the animation is played relative to the scene clock speed; values less than <code>1.0</code> decrease the speed.\n * @param {boolean} [options.reverse=false] When <code>true</code>, the animation is played in reverse.\n * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animation is looped.\n * @param {ModelAnimation.AnimationTimeCallback} [options.animationTime=undefined] If defined, computes the local animation time for this animation.\n * @returns {ModelAnimation} The animation that was added to the collection.\n *\n * @exception {DeveloperError} Animations are not loaded.  Wait for the {@link Model#ready} to return trues.\n * @exception {DeveloperError} options.name must be a valid animation name.\n * @exception {DeveloperError} options.index must be a valid animation index.\n * @exception {DeveloperError} Either options.name or options.index must be defined.\n * @exception {DeveloperError} options.multiplier must be greater than zero.\n *\n * @example\n * // Example 1. Add an animation by name\n * model.activeAnimations.add({\n *   name : 'animation name'\n * });\n *\n * @example\n * // Example 2. Add an animation by index\n * model.activeAnimations.add({\n *   index : 0\n * });\n *\n * @example\n * // Example 3. Add an animation and provide all properties and events\n * const startTime = Cesium.JulianDate.now();\n *\n * const animation = model.activeAnimations.add({\n *   name : 'another animation name',\n *   startTime : startTime,\n *   delay : 0.0,                                 // Play at startTime (default)\n *   stopTime : Cesium.JulianDate.addSeconds(startTime, 4.0, new Cesium.JulianDate()),\n *   removeOnStop : false,                        // Do not remove when animation stops (default)\n *   multiplier : 2.0,                            // Play at double speed\n *   reverse : true,                              // Play in reverse\n *   loop : Cesium.ModelAnimationLoop.REPEAT      // Loop the animation\n * });\n *\n * animation.start.addEventListener(function(model, animation) {\n *   console.log(`Animation started: ${animation.name}`);\n * });\n * animation.update.addEventListener(function(model, animation, time) {\n *   console.log(`Animation updated: ${animation.name}. glTF animation time: ${time}`);\n * });\n * animation.stop.addEventListener(function(model, animation) {\n *   console.log(`Animation stopped: ${animation.name}`);\n * });\n */\nModelAnimationCollection.prototype.add = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const model = this._model;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!model.ready) {\n    throw new DeveloperError(\n      \"Animations are not loaded.  Wait for Model.ready to be true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const animations = model.sceneGraph.components.animations;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.name) && !defined(options.index)) {\n    throw new DeveloperError(\n      \"Either options.name or options.index must be defined.\",\n    );\n  }\n\n  if (defined(options.multiplier) && options.multiplier <= 0.0) {\n    throw new DeveloperError(\"options.multiplier must be greater than zero.\");\n  }\n\n  if (\n    defined(options.index) &&\n    (options.index >= animations.length || options.index < 0)\n  ) {\n    throw new DeveloperError(\"options.index must be a valid animation index.\");\n  }\n  //>>includeEnd('debug');\n\n  let index = options.index;\n  if (defined(index)) {\n    return addAnimation(this, animations[index], options);\n  }\n\n  // Find the index of the animation with the given name\n  const length = animations.length;\n  for (let i = 0; i < length; ++i) {\n    if (animations[i].name === options.name) {\n      index = i;\n      break;\n    }\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"options.name must be a valid animation name.\");\n  }\n  //>>includeEnd('debug');\n\n  return addAnimation(this, animations[index], options);\n};\n\n/**\n * Creates and adds animations with the specified initial properties to the collection\n * for all animations in the model.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationAdded} event for each model so, for example, a UI can stay in sync.\n * </p>\n *\n * @param {object} [options] Object with the following properties:\n * @param {JulianDate} [options.startTime] The scene time to start playing the animations. When this is <code>undefined</code>, the animations starts at the next frame.\n * @param {number} [options.delay=0.0] The delay, in seconds, from <code>startTime</code> to start playing. This will only affect the animation if <code>options.loop</code> is ModelAnimationLoop.NONE.\n * @param {JulianDate} [options.stopTime] The scene time to stop playing the animations. When this is <code>undefined</code>, the animations are played for its full duration.\n * @param {boolean} [options.removeOnStop=false] When <code>true</code>, the animations are removed after they stop playing. This will only affect the animation if <code>options.loop</code> is ModelAnimationLoop.NONE.\n * @param {number} [options.multiplier=1.0] Values greater than <code>1.0</code> increase the speed that the animations play relative to the scene clock speed; values less than <code>1.0</code> decrease the speed.\n * @param {boolean} [options.reverse=false] When <code>true</code>, the animations are played in reverse.\n * @param {ModelAnimationLoop} [options.loop=ModelAnimationLoop.NONE] Determines if and how the animations are looped.\n * @param {ModelAnimation.AnimationTimeCallback} [options.animationTime=undefined] If defined, computes the local animation time for all of the animations.\n * @returns {ModelAnimation[]} An array of {@link ModelAnimation} objects, one for each animation added to the collection.  If there are no glTF animations, the array is empty.\n *\n * @exception {DeveloperError} Animations are not loaded. Wait for the {@link Model#ready} to return true.\n * @exception {DeveloperError} options.multiplier must be greater than zero.\n *\n * @example\n * model.activeAnimations.addAll({\n *   multiplier : 0.5,                            // Play at half-speed\n *   loop : Cesium.ModelAnimationLoop.REPEAT      // Loop the animations\n * });\n */\nModelAnimationCollection.prototype.addAll = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const model = this._model;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!model.ready) {\n    throw new DeveloperError(\n      \"Animations are not loaded.  Wait for Model.ready to be true.\",\n    );\n  }\n\n  if (defined(options.multiplier) && options.multiplier <= 0.0) {\n    throw new DeveloperError(\"options.multiplier must be greater than zero.\");\n  }\n  //>>includeEnd('debug');\n\n  const animations = model.sceneGraph.components.animations;\n\n  const addedAnimations = [];\n  const length = animations.length;\n  for (let i = 0; i < length; ++i) {\n    const animation = addAnimation(this, animations[i], options);\n    addedAnimations.push(animation);\n  }\n  return addedAnimations;\n};\n\n/**\n * Removes an animation from the collection.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationRemoved} event so, for example, a UI can stay in sync.\n * </p>\n * <p>\n * An animation can also be implicitly removed from the collection by setting {@link ModelAnimationCollection#removeOnStop} to\n * <code>true</code>.  The {@link ModelAnimationCollection#animationRemoved} event is still fired when the animation is removed.\n * </p>\n *\n * @param {ModelAnimation} runtimeAnimation The runtime animation to remove.\n * @returns {boolean} <code>true</code> if the animation was removed; <code>false</code> if the animation was not found in the collection.\n *\n * @example\n * const a = model.activeAnimations.add({\n *   name : 'animation name'\n * });\n * model.activeAnimations.remove(a); // Returns true\n */\nModelAnimationCollection.prototype.remove = function (runtimeAnimation) {\n  if (!defined(runtimeAnimation)) {\n    return false;\n  }\n\n  const animations = this._runtimeAnimations;\n  const i = animations.indexOf(runtimeAnimation);\n  if (i !== -1) {\n    animations.splice(i, 1);\n    this.animationRemoved.raiseEvent(this._model, runtimeAnimation);\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all animations from the collection.\n * <p>\n * This raises the {@link ModelAnimationCollection#animationRemoved} event for each\n * animation so, for example, a UI can stay in sync.\n * </p>\n */\nModelAnimationCollection.prototype.removeAll = function () {\n  const model = this._model;\n  const animations = this._runtimeAnimations;\n  const length = animations.length;\n\n  this._runtimeAnimations.length = 0;\n\n  for (let i = 0; i < length; ++i) {\n    this.animationRemoved.raiseEvent(model, animations[i]);\n  }\n};\n\n/**\n * Determines whether this collection contains a given animation.\n *\n * @param {ModelAnimation} runtimeAnimation The runtime animation to check for.\n * @returns {boolean} <code>true</code> if this collection contains the animation, <code>false</code> otherwise.\n */\nModelAnimationCollection.prototype.contains = function (runtimeAnimation) {\n  if (defined(runtimeAnimation)) {\n    return this._runtimeAnimations.indexOf(runtimeAnimation) !== -1;\n  }\n\n  return false;\n};\n\n/**\n * Returns the animation in the collection at the specified index.  Indices are zero-based\n * and increase as animations are added.  Removing an animation shifts all animations after\n * it to the left, changing their indices.  This function is commonly used to iterate over\n * all the animations in the collection.\n *\n * @param {number} index The zero-based index of the animation.\n * @returns {ModelAnimation} The runtime animation at the specified index.\n *\n * @example\n * // Output the names of all the animations in the collection.\n * const animations = model.activeAnimations;\n * const length = animations.length;\n * for (let i = 0; i < length; ++i) {\n *   console.log(animations.get(i).name);\n * }\n */\nModelAnimationCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n\n  if (index >= this._runtimeAnimations.length || index < 0) {\n    throw new DeveloperError(\n      \"index must be valid within the range of the collection\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return this._runtimeAnimations[index];\n};\n\nconst animationsToRemove = [];\n\nfunction createAnimationRemovedFunction(\n  modelAnimationCollection,\n  model,\n  animation,\n) {\n  return function () {\n    modelAnimationCollection.animationRemoved.raiseEvent(model, animation);\n  };\n}\n\n/**\n * Updates the runtime animations in this collection, removing any animations\n * that have stopped.\n *\n * @param {FrameState} frameState The current frame state.\n * @returns {boolean} <code>true</code> if an animation played during this update, <code>false</code> otherwise.\n *\n * @private\n */\nModelAnimationCollection.prototype.update = function (frameState) {\n  const runtimeAnimations = this._runtimeAnimations;\n  let length = runtimeAnimations.length;\n\n  if (length === 0) {\n    this._previousTime = undefined;\n    return false;\n  }\n\n  if (\n    !this.animateWhilePaused &&\n    JulianDate.equals(frameState.time, this._previousTime)\n  ) {\n    return false;\n  }\n  this._previousTime = JulianDate.clone(frameState.time, this._previousTime);\n\n  let animationOccurred = false;\n  const sceneTime = frameState.time;\n  const model = this._model;\n\n  for (let i = 0; i < length; ++i) {\n    const runtimeAnimation = runtimeAnimations[i];\n\n    if (!defined(runtimeAnimation._computedStartTime)) {\n      runtimeAnimation._computedStartTime = JulianDate.addSeconds(\n        runtimeAnimation.startTime ?? sceneTime,\n        runtimeAnimation.delay,\n        new JulianDate(),\n      );\n    }\n\n    if (!defined(runtimeAnimation._duration)) {\n      runtimeAnimation._duration =\n        runtimeAnimation.localStopTime * (1.0 / runtimeAnimation.multiplier);\n    }\n\n    const startTime = runtimeAnimation._computedStartTime;\n    const duration = runtimeAnimation._duration;\n    const stopTime = runtimeAnimation.stopTime;\n\n    const pastStartTime = JulianDate.lessThanOrEquals(startTime, sceneTime);\n    const reachedStopTime =\n      defined(stopTime) && JulianDate.greaterThan(sceneTime, stopTime);\n\n    // [0.0, 1.0] normalized local animation time\n    let delta = 0.0;\n    if (duration !== 0.0) {\n      const seconds = JulianDate.secondsDifference(\n        reachedStopTime ? stopTime : sceneTime,\n        startTime,\n      );\n      delta = defined(runtimeAnimation._animationTime)\n        ? runtimeAnimation._animationTime(duration, seconds)\n        : seconds / duration;\n    }\n\n    // Play animation if\n    // * we are after the start time or the animation is being repeated, and\n    // * before the end of the animation's duration or the animation is being repeated, and\n    // * we did not reach a user-provided stop time.\n\n    const repeat =\n      runtimeAnimation.loop === ModelAnimationLoop.REPEAT ||\n      runtimeAnimation.loop === ModelAnimationLoop.MIRRORED_REPEAT;\n\n    const play =\n      (pastStartTime || (repeat && !defined(runtimeAnimation.startTime))) &&\n      (delta <= 1.0 || repeat) &&\n      !reachedStopTime;\n\n    if (delta === runtimeAnimation._prevAnimationDelta) {\n      const animationStopped =\n        runtimeAnimation._state === ModelAnimationState.STOPPED;\n      // no change to delta, and no change to the animation state means we can\n      // skip the update this time around.\n      if (play !== animationStopped) {\n        continue;\n      }\n    }\n    runtimeAnimation._prevAnimationDelta = delta;\n\n    // If it IS, or WAS, animating...\n    if (play || runtimeAnimation._state === ModelAnimationState.ANIMATING) {\n      // ...transition from STOPPED to ANIMATING\n      if (play && runtimeAnimation._state === ModelAnimationState.STOPPED) {\n        runtimeAnimation._state = ModelAnimationState.ANIMATING;\n        if (runtimeAnimation.start.numberOfListeners > 0) {\n          frameState.afterRender.push(runtimeAnimation._raiseStartEvent);\n        }\n      }\n\n      // Truncate to [0.0, 1.0] for repeating animations\n      if (runtimeAnimation.loop === ModelAnimationLoop.REPEAT) {\n        delta = delta - Math.floor(delta);\n      } else if (runtimeAnimation.loop === ModelAnimationLoop.MIRRORED_REPEAT) {\n        const floor = Math.floor(delta);\n        const fract = delta - floor;\n        // When odd use (1.0 - fract) to mirror repeat\n        delta = floor % 2 === 1.0 ? 1.0 - fract : fract;\n      }\n\n      if (runtimeAnimation.reverse) {\n        delta = 1.0 - delta;\n      }\n\n      let localAnimationTime = delta * duration * runtimeAnimation.multiplier;\n      // Clamp in case floating-point roundoff goes outside the animation's first or last keyframe\n      localAnimationTime = CesiumMath.clamp(\n        localAnimationTime,\n        runtimeAnimation.localStartTime,\n        runtimeAnimation.localStopTime,\n      );\n\n      runtimeAnimation.animate(localAnimationTime);\n\n      if (runtimeAnimation.update.numberOfListeners > 0) {\n        runtimeAnimation._updateEventTime = localAnimationTime;\n        frameState.afterRender.push(runtimeAnimation._raiseUpdateEvent);\n      }\n      animationOccurred = true;\n\n      if (!play) {\n        // transition from ANIMATING to STOPPED\n        runtimeAnimation._state = ModelAnimationState.STOPPED;\n        if (runtimeAnimation.stop.numberOfListeners > 0) {\n          frameState.afterRender.push(runtimeAnimation._raiseStopEvent);\n        }\n\n        if (runtimeAnimation.removeOnStop) {\n          animationsToRemove.push(runtimeAnimation);\n        }\n      }\n    }\n  }\n\n  // Remove animations that stopped\n  length = animationsToRemove.length;\n  for (let j = 0; j < length; ++j) {\n    const animationToRemove = animationsToRemove[j];\n    runtimeAnimations.splice(runtimeAnimations.indexOf(animationToRemove), 1);\n    frameState.afterRender.push(\n      createAnimationRemovedFunction(this, model, animationToRemove),\n    );\n  }\n  animationsToRemove.length = 0;\n\n  return animationOccurred;\n};\n\nexport default ModelAnimationCollection;\n","import Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport ModelArticulationStage from \"./ModelArticulationStage.js\";\n\n/**\n * An in-memory representation of an articulation that affects nodes in the\n * {@link ModelSceneGraph}. This is defined in a model by the\n * <code>AGI_articulations</code> extension.\n *\n * @param {object} options An object containing the following options:\n * @param {ModelComponents.Articulation} options.articulation The articulation components from the 3D model.\n * @param {ModelSceneGraph} options.sceneGraph The scene graph this articulation belongs to.\n *\n * @alias ModelArticulation\n * @constructor\n *\n * @private\n */\nfunction ModelArticulation(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const articulation = options.articulation;\n  const sceneGraph = options.sceneGraph;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.articulation\", articulation);\n  Check.typeOf.object(\"options.sceneGraph\", sceneGraph);\n  //>>includeEnd('debug');\n\n  this._articulation = articulation;\n  this._sceneGraph = sceneGraph;\n\n  this._name = articulation.name;\n  this._runtimeStages = [];\n  this._runtimeStagesByName = {};\n\n  // Will be populated as the runtime nodes are created\n  this._runtimeNodes = [];\n\n  // Set to true so that the first call to\n  // ModelSceneGraph.applyArticulations will work.\n  this._dirty = true;\n\n  initialize(this);\n}\n\nObject.defineProperties(ModelArticulation.prototype, {\n  /**\n   * The internal articulation that this runtime articulation represents.\n   *\n   * @memberof ModelArticulation.prototype\n   * @type {ModelComponents.Articulation}\n   * @readonly\n   *\n   * @private\n   */\n  articulation: {\n    get: function () {\n      return this._articulation;\n    },\n  },\n\n  /**\n   * The scene graph that this articulation belongs to.\n   *\n   * @memberof ModelArticulation.prototype\n   * @type {ModelSceneGraph}\n   * @readonly\n   *\n   * @private\n   */\n  sceneGraph: {\n    get: function () {\n      return this._sceneGraph;\n    },\n  },\n\n  /**\n   * The name of this articulation.\n   *\n   * @memberof ModelArticulation.prototype\n   * @type {string}\n   * @readonly\n   *\n   * @private\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The runtime stages that belong to this articulation.\n   *\n   * @memberof ModelArticulation.prototype\n   * @type {ModelArticulationStage[]}\n   * @readonly\n   *\n   * @private\n   */\n  runtimeStages: {\n    get: function () {\n      return this._runtimeStages;\n    },\n  },\n\n  /**\n   * The runtime nodes that are affected by this articulation.\n   *\n   * @memberof ModelArticulation.prototype\n   * @type {ModelRuntimeNode[]}\n   * @readonly\n   *\n   * @private\n   */\n  runtimeNodes: {\n    get: function () {\n      return this._runtimeNodes;\n    },\n  },\n});\n\nfunction initialize(runtimeArticulation) {\n  const articulation = runtimeArticulation.articulation;\n\n  const stages = articulation.stages;\n  const length = stages.length;\n\n  const runtimeStages = runtimeArticulation._runtimeStages;\n  const runtimeStagesByName = runtimeArticulation._runtimeStagesByName;\n  for (let i = 0; i < length; i++) {\n    const stage = stages[i];\n    const runtimeStage = new ModelArticulationStage({\n      stage: stage,\n      runtimeArticulation: runtimeArticulation,\n    });\n\n    // Store the stages in an array to preserve the order in which\n    // they appeared in the 3D model.\n    runtimeStages.push(runtimeStage);\n\n    // Store the stages in a dictionary for retrieval by name.\n    const stageName = stage.name;\n    runtimeStagesByName[stageName] = runtimeStage;\n  }\n}\n\n/**\n * Sets the current value of an articulation stage.\n *\n * @param {string} stageName The name of the articulation stage.\n * @param {number} value The numeric value of this stage of the articulation.\n *\n * @private\n */\nModelArticulation.prototype.setArticulationStage = function (stageName, value) {\n  const stage = this._runtimeStagesByName[stageName];\n  if (defined(stage)) {\n    stage.currentValue = value;\n  }\n};\n\nconst scratchArticulationMatrix = new Matrix4();\nconst scratchNodeMatrix = new Matrix4();\n\n/**\n * Applies the chain of articulation stages to the transform of each node that\n * participates in the articulation. This only recomputes the node transforms\n * if any stage in the articulation has been modified.\n * <p>\n * Note that this will overwrite any existing transformations on participating\n * nodes.\n * </p>\n *\n * @private\n */\nModelArticulation.prototype.apply = function () {\n  if (!this._dirty) {\n    return;\n  }\n  this._dirty = false;\n\n  let articulationMatrix = Matrix4.clone(\n    Matrix4.IDENTITY,\n    scratchArticulationMatrix,\n  );\n\n  let i;\n  const stages = this._runtimeStages;\n  const stagesLength = stages.length;\n\n  // Compute the result of the articulation stages...\n  for (i = 0; i < stagesLength; i++) {\n    const stage = stages[i];\n    articulationMatrix = stage.applyStageToMatrix(articulationMatrix);\n  }\n\n  // ...then apply it to the transforms of the affected nodes.\n  const nodes = this._runtimeNodes;\n  const nodesLength = nodes.length;\n  for (i = 0; i < nodesLength; i++) {\n    const node = nodes[i];\n    const transform = Matrix4.multiplyTransformation(\n      node.originalTransform,\n      articulationMatrix,\n      scratchNodeMatrix,\n    );\n    node.transform = transform;\n  }\n};\n\nexport default ModelArticulation;\n","import ArticulationStageType from \"../../Core/ArticulationStageType.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport CesiumMath from \"../../Core/Math.js\";\nimport Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport Matrix3 from \"../../Core/Matrix3.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\n\nconst articulationEpsilon = CesiumMath.EPSILON16;\n\n/**\n * An in-memory representation of an articulation stage belonging to a\n * {@link ModelArticulation}.\n *\n * @param {object} options An object containing the following options:\n * @param {ModelComponents.ArticulationStage} options.stage The articulation stage components from the 3D model.\n * @param {ModelArticulation} options.runtimeArticulation The runtime articulation that this stage belongs to.\n *\n * @alias ModelArticulationStage\n * @constructor\n *\n * @private\n */\nfunction ModelArticulationStage(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const stage = options.stage;\n  const runtimeArticulation = options.runtimeArticulation;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.stage\", stage);\n  Check.typeOf.object(\"options.runtimeArticulation\", runtimeArticulation);\n  //>>includeEnd('debug');\n\n  this._stage = stage;\n  this._runtimeArticulation = runtimeArticulation;\n\n  this._name = stage.name;\n  this._type = stage.type;\n  this._minimumValue = stage.minimumValue;\n  this._maximumValue = stage.maximumValue;\n  this._currentValue = stage.initialValue;\n}\n\nObject.defineProperties(ModelArticulationStage.prototype, {\n  /**\n   * The internal articulation stage that this runtime stage represents.\n   *\n   * @memberof ModelArticulationStage.prototype\n   * @type {ModelComponents.ArticulationStage}\n   * @readonly\n   *\n   * @private\n   */\n  stage: {\n    get: function () {\n      return this._stage;\n    },\n  },\n\n  /**\n   * The runtime articulation that this stage belongs to.\n   *\n   * @memberof ModelArticulationStage.prototype\n   * @type {ModelArticulation}\n   * @readonly\n   *\n   * @private\n   */\n  runtimeArticulation: {\n    get: function () {\n      return this._runtimeArticulation;\n    },\n  },\n\n  /**\n   * The name of this articulation stage.\n   *\n   * @memberof ModelArticulationStage.prototype\n   * @type {string}\n   * @readonly\n   *\n   * @private\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n\n  /**\n   * The type of this articulation stage. This specifies which of the\n   * node's properties is modified by the stage's value.\n   *\n   * @memberof ModelArticulationStage.prototype\n   * @type {ArticulationStageType}\n   * @readonly\n   *\n   * @private\n   */\n  type: {\n    get: function () {\n      return this._type;\n    },\n  },\n\n  /**\n   * The minimum value of this articulation stage.\n   *\n   * @memberof ModelArticulationStage.prototype\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  minimumValue: {\n    get: function () {\n      return this._minimumValue;\n    },\n  },\n\n  /**\n   * The maximum value of this articulation stage.\n   *\n   * @memberof ModelArticulationStage.prototype\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  maximumValue: {\n    get: function () {\n      return this._maximumValue;\n    },\n  },\n\n  /**\n   * The current value of this articulation stage.\n   *\n   * @memberof ModelArticulationStage.prototype\n   * @type {number}\n   *\n   * @private\n   */\n  currentValue: {\n    get: function () {\n      return this._currentValue;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"value\", value);\n      //>>includeEnd('debug');\n\n      value = CesiumMath.clamp(value, this.minimumValue, this.maximumValue);\n      if (\n        !CesiumMath.equalsEpsilon(\n          this._currentValue,\n          value,\n          articulationEpsilon,\n        )\n      ) {\n        this._currentValue = value;\n        this.runtimeArticulation._dirty = true;\n      }\n    },\n  },\n});\n\nconst scratchArticulationCartesian = new Cartesian3();\nconst scratchArticulationRotation = new Matrix3();\n\n/**\n * Modifies a Matrix4 by applying a transformation for a given value of a stage.\n * Note that the <code>result</code> parameter is not just a container for the\n * returned value. The incoming value of <code>result</code> is part of the\n * computation itself. Various stages of an articulation can be multiplied\n * together, so their transformations are all merged into a composite Matrix4\n * representing them all.\n *\n * @param {Matrix4} result The matrix to be modified.\n * @returns {Matrix4} The transformed matrix as requested by the articulation stage.\n *\n * @private\n */\nModelArticulationStage.prototype.applyStageToMatrix = function (result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const type = this.type;\n  const value = this.currentValue;\n  const cartesian = scratchArticulationCartesian;\n  let rotation;\n  switch (type) {\n    case ArticulationStageType.XROTATE:\n      rotation = Matrix3.fromRotationX(\n        CesiumMath.toRadians(value),\n        scratchArticulationRotation,\n      );\n      result = Matrix4.multiplyByMatrix3(result, rotation, result);\n      break;\n    case ArticulationStageType.YROTATE:\n      rotation = Matrix3.fromRotationY(\n        CesiumMath.toRadians(value),\n        scratchArticulationRotation,\n      );\n      result = Matrix4.multiplyByMatrix3(result, rotation, result);\n      break;\n    case ArticulationStageType.ZROTATE:\n      rotation = Matrix3.fromRotationZ(\n        CesiumMath.toRadians(value),\n        scratchArticulationRotation,\n      );\n      result = Matrix4.multiplyByMatrix3(result, rotation, result);\n      break;\n    case ArticulationStageType.XTRANSLATE:\n      cartesian.x = value;\n      cartesian.y = 0.0;\n      cartesian.z = 0.0;\n      result = Matrix4.multiplyByTranslation(result, cartesian, result);\n      break;\n    case ArticulationStageType.YTRANSLATE:\n      cartesian.x = 0.0;\n      cartesian.y = value;\n      cartesian.z = 0.0;\n      result = Matrix4.multiplyByTranslation(result, cartesian, result);\n      break;\n    case ArticulationStageType.ZTRANSLATE:\n      cartesian.x = 0.0;\n      cartesian.y = 0.0;\n      cartesian.z = value;\n      result = Matrix4.multiplyByTranslation(result, cartesian, result);\n      break;\n    case ArticulationStageType.XSCALE:\n      cartesian.x = value;\n      cartesian.y = 1.0;\n      cartesian.z = 1.0;\n      result = Matrix4.multiplyByScale(result, cartesian, result);\n      break;\n    case ArticulationStageType.YSCALE:\n      cartesian.x = 1.0;\n      cartesian.y = value;\n      cartesian.z = 1.0;\n      result = Matrix4.multiplyByScale(result, cartesian, result);\n      break;\n    case ArticulationStageType.ZSCALE:\n      cartesian.x = 1.0;\n      cartesian.y = 1.0;\n      cartesian.z = value;\n      result = Matrix4.multiplyByScale(result, cartesian, result);\n      break;\n    case ArticulationStageType.UNIFORMSCALE:\n      result = Matrix4.multiplyByUniformScale(result, value, result);\n      break;\n    default:\n      break;\n  }\n\n  return result;\n};\n\nexport default ModelArticulationStage;\n","import Cartesian2 from \"../../Core/Cartesian2.js\";\nimport ClippingPlaneCollection from \"../ClippingPlaneCollection.js\";\nimport combine from \"../../Core/combine.js\";\nimport Color from \"../../Core/Color.js\";\nimport ModelClippingPlanesStageFS from \"../../Shaders/Model/ModelClippingPlanesStageFS.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\n\n/**\n * The model clipping planes stage is responsible for applying clipping planes to the model.\n *\n * @namespace ModelClippingPlanesPipelineStage\n *\n * @private\n */\nconst ModelClippingPlanesPipelineStage = {\n  name: \"ModelClippingPlanesPipelineStage\", // Helps with debugging\n};\n\nconst textureResolutionScratch = new Cartesian2();\n/**\n * Process a model. This modifies the following parts of the render resources:\n *\n * <ul>\n *  <li>adds a define to the fragment shader to indicate that the model has clipping planes</li>\n *  <li>adds the defines to the fragment shader for parameters related to clipping planes, such as the number of planes</li>\n *  <li>adds a function to the fragment shader to apply the clipping planes to the model's base color</li>\n *  <li>adds the uniforms for the fragment shader for the clipping plane texture and matrix</li>\n *</ul>\n *\n * @param {ModelRenderResources} renderResources The render resources for this model.\n * @param {Model} model The model.\n * @param {FrameState} frameState The frameState.\n *\n * @private\n */\nModelClippingPlanesPipelineStage.process = function (\n  renderResources,\n  model,\n  frameState,\n) {\n  const clippingPlanes = model.clippingPlanes;\n  const context = frameState.context;\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\n    \"HAS_CLIPPING_PLANES\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addDefine(\n    \"CLIPPING_PLANES_LENGTH\",\n    clippingPlanes.length,\n    ShaderDestination.FRAGMENT,\n  );\n\n  if (clippingPlanes.unionClippingRegions) {\n    shaderBuilder.addDefine(\n      \"UNION_CLIPPING_REGIONS\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  if (ClippingPlaneCollection.useFloatTexture(context)) {\n    shaderBuilder.addDefine(\n      \"USE_CLIPPING_PLANES_FLOAT_TEXTURE\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  const textureResolution = ClippingPlaneCollection.getTextureResolution(\n    clippingPlanes,\n    context,\n    textureResolutionScratch,\n  );\n\n  shaderBuilder.addDefine(\n    \"CLIPPING_PLANES_TEXTURE_WIDTH\",\n    textureResolution.x,\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addDefine(\n    \"CLIPPING_PLANES_TEXTURE_HEIGHT\",\n    textureResolution.y,\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addUniform(\n    \"sampler2D\",\n    \"model_clippingPlanes\",\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addUniform(\n    \"vec4\",\n    \"model_clippingPlanesEdgeStyle\",\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addUniform(\n    \"mat4\",\n    \"model_clippingPlanesMatrix\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addFragmentLines(ModelClippingPlanesStageFS);\n\n  const uniformMap = {\n    model_clippingPlanes: function () {\n      return clippingPlanes.texture;\n    },\n    model_clippingPlanesEdgeStyle: function () {\n      const style = Color.clone(clippingPlanes.edgeColor);\n      style.alpha = clippingPlanes.edgeWidth;\n      return style;\n    },\n    model_clippingPlanesMatrix: function () {\n      return model._clippingPlanesMatrix;\n    },\n  };\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n};\n\nexport default ModelClippingPlanesPipelineStage;\n","import combine from \"../../Core/combine.js\";\nimport ModelClippingPolygonsStageVS from \"../../Shaders/Model/ModelClippingPolygonsStageVS.js\";\nimport ModelClippingPolygonsStageFS from \"../../Shaders/Model/ModelClippingPolygonsStageFS.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\n\n/**\n * The model clipping planes stage is responsible for applying clipping planes to the model.\n *\n * @namespace ModelClippingPolygonsPipelineStage\n *\n * @private\n */\nconst ModelClippingPolygonsPipelineStage = {\n  name: \"ModelClippingPolygonsPipelineStage\", // Helps with debugging\n};\n\n/**\n * Process a model for polygon clipping. This modifies the following parts of the render resources:\n *\n * <ul>\n *  <li>adds a define to both the vertex and fragment shaders to indicate that the model has clipping polygons</li>\n *  <li>adds the defines to both the vertex and fragment shaders for parameters related to clipping polygons, such as the number of polygons</li>\n *  <li>adds a function to the vertex shader to determine lookup uvs</li>\n *  <li>adds a function to the fragment shader to discard clipped regions</li>\n *  <li>adds the uniforms to the vertex and fragment shaders for the clipping extents texture and clipping distance respectively</li>\n *  <li>adds a varying for lookup uvs in the clipping texture</li>\n *</ul>\n *\n * @param {ModelRenderResources} renderResources The render resources for this model.\n * @param {Model} model The model.\n * @param {FrameState} frameState The frameState.\n *\n * @private\n */\nModelClippingPolygonsPipelineStage.process = function (\n  renderResources,\n  model,\n  frameState,\n) {\n  const clippingPolygons = model.clippingPolygons;\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\n    \"ENABLE_CLIPPING_POLYGONS\",\n    undefined,\n    ShaderDestination.BOTH,\n  );\n\n  if (clippingPolygons.inverse) {\n    shaderBuilder.addDefine(\n      \"CLIPPING_INVERSE\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  shaderBuilder.addDefine(\n    \"CLIPPING_POLYGON_REGIONS_LENGTH\",\n    clippingPolygons.extentsCount,\n    ShaderDestination.BOTH,\n  );\n\n  shaderBuilder.addUniform(\n    \"sampler2D\",\n    \"model_clippingDistance\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addUniform(\n    \"sampler2D\",\n    \"model_clippingExtents\",\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addVarying(\"vec2\", \"v_clippingPosition\");\n  shaderBuilder.addVarying(\"int\", \"v_regionIndex\", \"flat\");\n  shaderBuilder.addVertexLines(ModelClippingPolygonsStageVS);\n  shaderBuilder.addFragmentLines(ModelClippingPolygonsStageFS);\n\n  const uniformMap = {\n    model_clippingDistance: function () {\n      return (\n        // The later should never happen during a render pass, see https://github.com/CesiumGS/cesium/issues/12725\n        clippingPolygons.clippingTexture ?? frameState.context.defaultTexture\n      );\n    },\n    model_clippingExtents: function () {\n      return (\n        // The later should never happen during a render pass, see https://github.com/CesiumGS/cesium/issues/12725\n        clippingPolygons.extentsTexture ?? frameState.context.defaultTexture\n      );\n    },\n  };\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n};\n\nexport default ModelClippingPolygonsPipelineStage;\n","import ColorBlendMode from \"../ColorBlendMode.js\";\nimport combine from \"../../Core/combine.js\";\nimport ModelColorStageFS from \"../../Shaders/Model/ModelColorStageFS.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\n\n/**\n * The model color pipeline stage is responsible for handling the application of a static color to the model.\n *\n * @namespace ModelColorPipelineStage\n *\n * @private\n */\nconst ModelColorPipelineStage = {\n  name: \"ModelColorPipelineStage\", // Helps with debugging\n\n  COLOR_UNIFORM_NAME: \"model_color\",\n  COLOR_BLEND_UNIFORM_NAME: \"model_colorBlend\",\n};\n\n/**\n * Process a model. This modifies the following parts of the render resources:\n *\n * <ul>\n *  <li>adds a define to the fragment shader to indicate that the model has a color</li>\n *  <li>adds a function to the fragment shader to apply the color to the model's base color</li>\n *  <li>adds the uniforms for the fragment shader for the model's color and blending properties</li>\n *  <li>updates the pass type in the render resources based on translucency of the model's color</li>\n *</ul>\n *\n * @param {ModelRenderResources} renderResources The render resources for this model.\n * @param {Model} model The model.\n * @param {FrameState} frameState The frameState.\n *\n * @private\n */\nModelColorPipelineStage.process = function (\n  renderResources,\n  model,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\n    \"HAS_MODEL_COLOR\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addFragmentLines(ModelColorStageFS);\n\n  const stageUniforms = {};\n\n  // Pass the model's color as a uniform. Set the pass type to translucent, if needed.\n  const color = model.color;\n\n  if (color.alpha === 0.0 && !model.hasSilhouette(frameState)) {\n    renderResources.renderStateOptions.colorMask = {\n      red: false,\n      green: false,\n      blue: false,\n      alpha: false,\n    };\n  }\n\n  if (color.alpha < 1.0) {\n    renderResources.alphaOptions.pass = Pass.TRANSLUCENT;\n  }\n\n  shaderBuilder.addUniform(\n    \"vec4\",\n    ModelColorPipelineStage.COLOR_UNIFORM_NAME,\n    ShaderDestination.FRAGMENT,\n  );\n  stageUniforms[ModelColorPipelineStage.COLOR_UNIFORM_NAME] = function () {\n    return model.color;\n  };\n\n  // Create a colorBlend from the model's colorBlendMode and colorBlendAmount and pass it as a uniform.\n  shaderBuilder.addUniform(\n    \"float\",\n    ModelColorPipelineStage.COLOR_BLEND_UNIFORM_NAME,\n    ShaderDestination.FRAGMENT,\n  );\n  stageUniforms[ModelColorPipelineStage.COLOR_BLEND_UNIFORM_NAME] =\n    function () {\n      return ColorBlendMode.getColorBlend(\n        model.colorBlendMode,\n        model.colorBlendAmount,\n      );\n    };\n\n  renderResources.uniformMap = combine(\n    stageUniforms,\n    renderResources.uniformMap,\n  );\n};\n\nexport default ModelColorPipelineStage;\n","import BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../../Core/Cartesian2.js\";\nimport CesiumMath from \"../../Core/Math.js\";\nimport Check from \"../../Core/Check.js\";\nimport clone from \"../../Core/clone.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport WebGLConstants from \"../../Core/WebGLConstants.js\";\nimport DrawCommand from \"../../Renderer/DrawCommand.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport RenderState from \"../../Renderer/RenderState.js\";\nimport BlendingState from \"../BlendingState.js\";\nimport CullFace from \"../CullFace.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport ShadowMode from \"../ShadowMode.js\";\nimport StencilConstants from \"../StencilConstants.js\";\nimport StencilFunction from \"../StencilFunction.js\";\nimport StencilOperation from \"../StencilOperation.js\";\nimport StyleCommandsNeeded from \"./StyleCommandsNeeded.js\";\n\n/**\n * A wrapper around the draw commands used to render a {@link ModelRuntimePrimitive}.\n * This manages the derived commands and pushes only the necessary commands depending\n * on the given frame state.\n *\n * @param {object} options An object containing the following options:\n * @param {DrawCommand} options.command The draw command from which to derive other commands from.\n * @param {PrimitiveRenderResources} options.primitiveRenderResources The render resources of the primitive associated with the command.\n *\n * @alias ModelDrawCommand\n * @constructor\n *\n * @private\n */\nfunction ModelDrawCommand(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const command = options.command;\n  const renderResources = options.primitiveRenderResources;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.command\", command);\n  Check.typeOf.object(\"options.primitiveRenderResources\", renderResources);\n  //>>includeEnd('debug');\n\n  const model = renderResources.model;\n  this._model = model;\n\n  const runtimePrimitive = renderResources.runtimePrimitive;\n  this._runtimePrimitive = runtimePrimitive;\n\n  // Store render resources for edge command creation\n  this._primitiveRenderResources = renderResources;\n\n  // If the command is translucent, or if the primitive's material is\n  // double-sided, then back-face culling is automatically disabled for\n  // the command. The user value for back-face culling will be ignored.\n  const isTranslucent = command.pass === Pass.TRANSLUCENT;\n  const isDoubleSided = runtimePrimitive.primitive.material.doubleSided;\n  const usesBackFaceCulling = !isDoubleSided && !isTranslucent;\n  const hasSilhouette = renderResources.hasSilhouette;\n\n  // If the command was already translucent, there's no need to derive a new\n  // translucent command. As of now, a style can't change an originally\n  // translucent feature to opaque since the style's alpha is modulated,\n  // not replaced. When this changes, we need to derive new opaque commands\n  // in initialize().\n  //\n  // Silhouettes for primitives with both opaque and translucent features\n  // are not yet supported.\n  const needsTranslucentCommand = !isTranslucent && !hasSilhouette;\n\n  const needsSkipLevelOfDetailCommands =\n    renderResources.hasSkipLevelOfDetail && !isTranslucent;\n\n  const needsSilhouetteCommands = hasSilhouette;\n\n  const needsEdgeCommands = defined(renderResources.edgeGeometry);\n\n  this._command = command;\n\n  // None of the derived commands (non-2D) use a different model matrix\n  // or bounding volume than the original, so they all point to the\n  // ModelDrawCommand's copy to save update time and memory.\n  this._modelMatrix = Matrix4.clone(command.modelMatrix);\n  this._boundingVolume = BoundingSphere.clone(command.boundingVolume);\n\n  // The 2D model matrix depends on the frame state's map projection,\n  // so it must be updated when the commands are handled in pushCommands.\n  this._modelMatrix2D = new Matrix4();\n  this._boundingVolume2D = new BoundingSphere();\n  this._modelMatrix2DDirty = false;\n\n  this._backFaceCulling = command.renderState.cull.enabled;\n  this._cullFace = command.renderState.cull.face;\n  this._shadows = model.shadows;\n  this._debugShowBoundingVolume = command.debugShowBoundingVolume;\n\n  this._usesBackFaceCulling = usesBackFaceCulling;\n  this._needsTranslucentCommand = needsTranslucentCommand;\n  this._needsSkipLevelOfDetailCommands = needsSkipLevelOfDetailCommands;\n  this._needsSilhouetteCommands = needsSilhouetteCommands;\n  this._needsEdgeCommands = needsEdgeCommands;\n\n  // Derived commands\n  this._originalCommand = undefined;\n  this._translucentCommand = undefined;\n  this._skipLodBackfaceCommand = undefined;\n  this._skipLodStencilCommand = undefined;\n  this._silhouetteModelCommand = undefined;\n  this._silhouetteColorCommand = undefined;\n  this._edgeCommand = undefined;\n\n  // All derived commands (including 2D commands)\n  this._derivedCommands = [];\n  this._has2DCommands = false;\n\n  initialize(this);\n}\n\nfunction ModelDerivedCommand(options) {\n  // The DrawCommand managed by this derived command.\n  this.command = options.command;\n\n  // These control whether the derived command should update the\n  // values of the DrawCommand for the corresponding properties.\n  this.updateShadows = options.updateShadows;\n  this.updateBackFaceCulling = options.updateBackFaceCulling;\n  this.updateCullFace = options.updateCullFace;\n  this.updateDebugShowBoundingVolume = options.updateDebugShowBoundingVolume;\n\n  // Whether this ModelDerivedCommand is in 2D.\n  this.is2D = options.is2D ?? false;\n\n  // A ModelDerivedCommand that is the 2D version of this one.\n  this.derivedCommand2D = undefined;\n}\n\nModelDerivedCommand.clone = function (derivedCommand) {\n  return new ModelDerivedCommand({\n    command: derivedCommand.command,\n    updateShadows: derivedCommand.updateShadows,\n    updateBackFaceCulling: derivedCommand.updateBackFaceCulling,\n    updateCullFace: derivedCommand.updateCullFace,\n    updateDebugShowBoundingVolume: derivedCommand.updateDebugShowBoundingVolume,\n    is2D: derivedCommand.is2D,\n    derivedCommand2D: derivedCommand.derivedCommand2D,\n  });\n};\n\nfunction initialize(drawCommand) {\n  const command = drawCommand._command;\n  command.modelMatrix = drawCommand._modelMatrix;\n  command.boundingVolume = drawCommand._boundingVolume;\n\n  const model = drawCommand._model;\n  const usesBackFaceCulling = drawCommand._usesBackFaceCulling;\n  const derivedCommands = drawCommand._derivedCommands;\n\n  drawCommand._originalCommand = new ModelDerivedCommand({\n    command: command,\n    updateShadows: true,\n    updateBackFaceCulling: usesBackFaceCulling,\n    updateCullFace: usesBackFaceCulling,\n    updateDebugShowBoundingVolume: true,\n    is2D: false,\n  });\n\n  derivedCommands.push(drawCommand._originalCommand);\n\n  if (drawCommand._needsTranslucentCommand) {\n    drawCommand._translucentCommand = new ModelDerivedCommand({\n      command: deriveTranslucentCommand(command),\n      updateShadows: true,\n      updateBackFaceCulling: false,\n      updateCullFace: false,\n      updateDebugShowBoundingVolume: true,\n    });\n\n    derivedCommands.push(drawCommand._translucentCommand);\n  }\n\n  if (drawCommand._needsSkipLevelOfDetailCommands) {\n    drawCommand._skipLodBackfaceCommand = new ModelDerivedCommand({\n      command: deriveSkipLodBackfaceCommand(command),\n      updateShadows: false,\n      updateBackFaceCulling: false,\n      updateCullFace: usesBackFaceCulling,\n      updateDebugShowBoundingVolume: false,\n    });\n\n    drawCommand._skipLodStencilCommand = new ModelDerivedCommand({\n      command: deriveSkipLodStencilCommand(command, model),\n      updateShadows: true,\n      updateBackFaceCulling: usesBackFaceCulling,\n      updateCullFace: usesBackFaceCulling,\n      updateDebugShowBoundingVolume: true,\n    });\n\n    derivedCommands.push(drawCommand._skipLodBackfaceCommand);\n    derivedCommands.push(drawCommand._skipLodStencilCommand);\n  }\n\n  if (drawCommand._needsSilhouetteCommands) {\n    drawCommand._silhouetteModelCommand = new ModelDerivedCommand({\n      command: deriveSilhouetteModelCommand(command, model),\n      updateShadows: true,\n      updateBackFaceCulling: usesBackFaceCulling,\n      updateCullFace: usesBackFaceCulling,\n      updateDebugShowBoundingVolume: true,\n    });\n\n    drawCommand._silhouetteColorCommand = new ModelDerivedCommand({\n      command: deriveSilhouetteColorCommand(command, model),\n      updateShadows: false,\n      updateBackFaceCulling: false,\n      updateCullFace: false,\n      updateDebugShowBoundingVolume: false,\n    });\n\n    derivedCommands.push(drawCommand._silhouetteModelCommand);\n    derivedCommands.push(drawCommand._silhouetteColorCommand);\n  }\n\n  if (drawCommand._needsEdgeCommands) {\n    const renderResources = drawCommand._primitiveRenderResources;\n    drawCommand._edgeCommand = new ModelDerivedCommand({\n      command: deriveEdgeCommand(command, renderResources, model),\n      updateShadows: false,\n      updateBackFaceCulling: false,\n      updateCullFace: false,\n      updateDebugShowBoundingVolume: false,\n    });\n\n    derivedCommands.push(drawCommand._edgeCommand);\n  }\n}\n\nObject.defineProperties(ModelDrawCommand.prototype, {\n  /**\n   * The main draw command that the other commands are derived from.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {DrawCommand}\n   *\n   * @readonly\n   * @private\n   */\n  command: {\n    get: function () {\n      return this._command;\n    },\n  },\n\n  /**\n   * The runtime primitive that the draw command belongs to.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {ModelRuntimePrimitive}\n   *\n   * @readonly\n   * @private\n   */\n  runtimePrimitive: {\n    get: function () {\n      return this._runtimePrimitive;\n    },\n  },\n\n  /**\n   * The model that the draw command belongs to.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {Model}\n   *\n   * @readonly\n   * @private\n   */\n  model: {\n    get: function () {\n      return this._model;\n    },\n  },\n\n  /**\n   * The primitive type of the draw command.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {PrimitiveType}\n   *\n   * @readonly\n   * @private\n   */\n  primitiveType: {\n    get: function () {\n      return this._command.primitiveType;\n    },\n  },\n\n  /**\n   * The current model matrix applied to the draw commands. If there are\n   * 2D draw commands, their model matrix will be derived from the 3D one.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {Matrix4}\n   *\n   * @readonly\n   * @private\n   */\n  modelMatrix: {\n    get: function () {\n      return this._modelMatrix;\n    },\n    set: function (value) {\n      this._modelMatrix = Matrix4.clone(value, this._modelMatrix);\n      this._modelMatrix2DDirty = true;\n\n      this._boundingVolume = BoundingSphere.transform(\n        this.runtimePrimitive.boundingSphere,\n        this._modelMatrix,\n        this._boundingVolume,\n      );\n    },\n  },\n\n  /**\n   * The bounding volume of the main draw command. This is equivalent\n   * to the primitive's bounding sphere transformed by the draw\n   * command's model matrix.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {BoundingSphere}\n   *\n   * @readonly\n   * @private\n   */\n  boundingVolume: {\n    get: function () {\n      return this._boundingVolume;\n    },\n  },\n\n  /**\n   * Whether the geometry casts or receives shadows from light sources.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {ShadowMode}\n   *\n   * @private\n   */\n  shadows: {\n    get: function () {\n      return this._shadows;\n    },\n    set: function (value) {\n      this._shadows = value;\n      updateShadows(this);\n    },\n  },\n\n  /**\n   * Whether to cull back-facing geometry. When true, back face culling is\n   * determined by the material's doubleSided property; when false, back face\n   * culling is disabled. Back faces are not culled if the command is\n   * translucent.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {boolean}\n   *\n   * @private\n   */\n  backFaceCulling: {\n    get: function () {\n      return this._backFaceCulling;\n    },\n    set: function (value) {\n      if (this._backFaceCulling === value) {\n        return;\n      }\n\n      this._backFaceCulling = value;\n      updateBackFaceCulling(this);\n    },\n  },\n\n  /**\n   * Determines which faces to cull, if culling is enabled.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {CullFace}\n   *\n   * @private\n   */\n  cullFace: {\n    get: function () {\n      return this._cullFace;\n    },\n    set: function (value) {\n      if (this._cullFace === value) {\n        return;\n      }\n\n      this._cullFace = value;\n      updateCullFace(this);\n    },\n  },\n\n  /**\n   * Whether to draw the bounding sphere associated with this draw command.\n   *\n   * @memberof ModelDrawCommand.prototype\n   * @type {boolean}\n   *\n   * @private\n   */\n  debugShowBoundingVolume: {\n    get: function () {\n      return this._debugShowBoundingVolume;\n    },\n    set: function (value) {\n      if (this._debugShowBoundingVolume === value) {\n        return;\n      }\n\n      this._debugShowBoundingVolume = value;\n      updateDebugShowBoundingVolume(this);\n    },\n  },\n});\n\nfunction updateModelMatrix2D(drawCommand, frameState) {\n  const modelMatrix = drawCommand._modelMatrix;\n  drawCommand._modelMatrix2D = Matrix4.clone(\n    modelMatrix,\n    drawCommand._modelMatrix2D,\n  );\n\n  // Change the translation's y-component so it appears on the opposite side\n  // of the map.\n  drawCommand._modelMatrix2D[13] -=\n    CesiumMath.sign(modelMatrix[13]) *\n    2.0 *\n    CesiumMath.PI *\n    frameState.mapProjection.ellipsoid.maximumRadius;\n\n  drawCommand._boundingVolume2D = BoundingSphere.transform(\n    drawCommand.runtimePrimitive.boundingSphere,\n    drawCommand._modelMatrix2D,\n    drawCommand._boundingVolume2D,\n  );\n}\n\nfunction updateShadows(drawCommand) {\n  const shadows = drawCommand.shadows;\n  const castShadows = ShadowMode.castShadows(shadows);\n  const receiveShadows = ShadowMode.receiveShadows(shadows);\n\n  const derivedCommands = drawCommand._derivedCommands;\n\n  for (let i = 0; i < derivedCommands.length; ++i) {\n    const derivedCommand = derivedCommands[i];\n    if (derivedCommand.updateShadows) {\n      const command = derivedCommand.command;\n      command.castShadows = castShadows;\n      command.receiveShadows = receiveShadows;\n    }\n  }\n}\n\nfunction updateBackFaceCulling(drawCommand) {\n  const backFaceCulling = drawCommand.backFaceCulling;\n  const derivedCommands = drawCommand._derivedCommands;\n\n  for (let i = 0; i < derivedCommands.length; ++i) {\n    const derivedCommand = derivedCommands[i];\n    if (derivedCommand.updateBackFaceCulling) {\n      const command = derivedCommand.command;\n      const renderState = clone(command.renderState, true);\n      renderState.cull.enabled = backFaceCulling;\n      command.renderState = RenderState.fromCache(renderState);\n    }\n  }\n}\n\nfunction updateCullFace(drawCommand) {\n  const cullFace = drawCommand.cullFace;\n  const derivedCommands = drawCommand._derivedCommands;\n\n  for (let i = 0; i < derivedCommands.length; ++i) {\n    const derivedCommand = derivedCommands[i];\n    if (derivedCommand.updateCullFace) {\n      const command = derivedCommand.command;\n      const renderState = clone(command.renderState, true);\n      renderState.cull.face = cullFace;\n      command.renderState = RenderState.fromCache(renderState);\n    }\n  }\n}\n\nfunction updateDebugShowBoundingVolume(drawCommand) {\n  const debugShowBoundingVolume = drawCommand.debugShowBoundingVolume;\n  const derivedCommands = drawCommand._derivedCommands;\n\n  for (let i = 0; i < derivedCommands.length; ++i) {\n    const derivedCommand = derivedCommands[i];\n    if (derivedCommand.updateDebugShowBoundingVolume) {\n      const command = derivedCommand.command;\n      command.debugShowBoundingVolume = debugShowBoundingVolume;\n    }\n  }\n}\n\n/**\n * Pushes the draw commands necessary to render the primitive.\n * This does not include the draw commands that render its silhouette.\n *\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} result The array to push the draw commands to.\n *\n * @returns {DrawCommand[]} The modified result parameter.\n *\n * @private\n */\nModelDrawCommand.prototype.pushCommands = function (frameState, result) {\n  const use2D = shouldUse2DCommands(this, frameState);\n\n  if (use2D && !this._has2DCommands) {\n    derive2DCommands(this);\n    this._has2DCommands = true;\n    this._modelMatrix2DDirty = true;\n  }\n\n  if (this._modelMatrix2DDirty) {\n    updateModelMatrix2D(this, frameState);\n    this._modelMatrix2DDirty = false;\n  }\n\n  const styleCommandsNeeded = this.model.styleCommandsNeeded;\n  if (this._needsTranslucentCommand && defined(styleCommandsNeeded)) {\n    // StyleCommandsNeeded has three values: all opaque, all translucent, or both.\n    if (styleCommandsNeeded !== StyleCommandsNeeded.ALL_OPAQUE) {\n      pushCommand(result, this._translucentCommand, use2D);\n    }\n\n    // Continue only if opaque commands are needed.\n    if (styleCommandsNeeded === StyleCommandsNeeded.ALL_TRANSLUCENT) {\n      return;\n    }\n  }\n\n  if (this._needsSkipLevelOfDetailCommands) {\n    const { tileset, tile } = this._model.content;\n\n    if (tileset.hasMixedContent) {\n      if (!tile._finalResolution) {\n        pushCommand(\n          tileset._backfaceCommands,\n          this._skipLodBackfaceCommand,\n          use2D,\n        );\n      }\n\n      updateSkipLodStencilCommand(this, tile, use2D);\n      pushCommand(result, this._skipLodStencilCommand, use2D);\n      return;\n    }\n  }\n\n  if (this._needsSilhouetteCommands) {\n    pushCommand(result, this._silhouetteModelCommand, use2D);\n    return;\n  }\n\n  pushCommand(result, this._originalCommand, use2D);\n\n  return result;\n};\n\n/**\n * Pushes the draw commands necessary to render the silhouette. These should\n * be added to the command list after the draw commands of all primitives\n * in the model have been added. This way, the silhouette won't render on\n * top of the model.\n * <p>\n * This should only be called after pushCommands() has been invoked for\n * the ModelDrawCommand this frame. Otherwise, the silhouette commands may\n * not have been derived for 2D. The model matrix will also not have been\n * updated for 2D commands.\n * </p>\n *\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} result The array to push the silhouette commands to.\n *\n * @returns {DrawCommand[]} The modified result parameter.\n *\n * @private\n */\nModelDrawCommand.prototype.pushSilhouetteCommands = function (\n  frameState,\n  result,\n) {\n  const use2D = shouldUse2DCommands(this, frameState);\n  pushCommand(result, this._silhouetteColorCommand, use2D);\n\n  return result;\n};\n\n/**\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} result The draw commands to push to.\n * @returns {DrawCommand[]} The modified command list.\n *\n * @private\n */\nModelDrawCommand.prototype.pushEdgeCommands = function (frameState, result) {\n  if (!defined(this._edgeCommand)) {\n    return result;\n  }\n\n  const use2D = shouldUse2DCommands(this, frameState);\n  pushCommand(result, this._edgeCommand, use2D);\n\n  return result;\n};\n\nfunction pushCommand(commandList, derivedCommand, use2D) {\n  commandList.push(derivedCommand.command);\n  if (use2D) {\n    commandList.push(derivedCommand.derivedCommand2D.command);\n  }\n}\n\nfunction shouldUse2DCommands(drawCommand, frameState) {\n  if (frameState.mode !== SceneMode.SCENE2D || drawCommand.model._projectTo2D) {\n    return false;\n  }\n\n  // The draw command's bounding sphere might cause primitives not to render\n  // over the IDL, even if they are part of the same model. Use the scene graph's\n  // bounding sphere instead.\n  const model = drawCommand.model;\n  const boundingSphere = model.sceneGraph._boundingSphere2D;\n\n  const left = boundingSphere.center.y - boundingSphere.radius;\n  const right = boundingSphere.center.y + boundingSphere.radius;\n  const idl2D =\n    frameState.mapProjection.ellipsoid.maximumRadius * CesiumMath.PI;\n\n  return (left < idl2D && right > idl2D) || (left < -idl2D && right > -idl2D);\n}\n\nfunction derive2DCommand(drawCommand, derivedCommand) {\n  if (!defined(derivedCommand)) {\n    return;\n  }\n\n  // If the model crosses the IDL in 2D, it will be drawn in one viewport but get\n  // clipped by the other viewport. We create a second command that translates\n  // the model matrix to the opposite side of the map so the part that was clipped\n  // in one viewport is drawn in the other.\n  const derivedCommand2D = ModelDerivedCommand.clone(derivedCommand);\n\n  const command2D = DrawCommand.shallowClone(derivedCommand.command);\n  command2D.modelMatrix = drawCommand._modelMatrix2D;\n  command2D.boundingVolume = drawCommand._boundingVolume2D;\n\n  derivedCommand2D.command = command2D;\n  derivedCommand2D.updateShadows = false; // Shadows are disabled for 2D\n  derivedCommand2D.is2D = true;\n\n  derivedCommand.derivedCommand2D = derivedCommand2D;\n  drawCommand._derivedCommands.push(derivedCommand2D);\n\n  return derivedCommand2D;\n}\n\nfunction derive2DCommands(drawCommand) {\n  derive2DCommand(drawCommand, drawCommand._originalCommand);\n  derive2DCommand(drawCommand, drawCommand._translucentCommand);\n  derive2DCommand(drawCommand, drawCommand._skipLodBackfaceCommand);\n  derive2DCommand(drawCommand, drawCommand._skipLodStencilCommand);\n  derive2DCommand(drawCommand, drawCommand._silhouetteModelCommand);\n  derive2DCommand(drawCommand, drawCommand._silhouetteColorCommand);\n  derive2DCommand(drawCommand, drawCommand._edgeCommand);\n}\n\nfunction deriveTranslucentCommand(command) {\n  const derivedCommand = DrawCommand.shallowClone(command);\n  derivedCommand.pass = Pass.TRANSLUCENT;\n  const rs = clone(command.renderState, true);\n  rs.cull.enabled = false;\n  rs.depthMask = false;\n  rs.blending = BlendingState.ALPHA_BLEND;\n  derivedCommand.renderState = RenderState.fromCache(rs);\n\n  return derivedCommand;\n}\n\nfunction deriveSilhouetteModelCommand(command, model) {\n  // Wrap around after exceeding the 8-bit stencil limit.\n  // The reference is unique to each model until this point.\n  const stencilReference = model._silhouetteId % 255;\n  const silhouetteModelCommand = DrawCommand.shallowClone(command);\n  const renderState = clone(command.renderState, true);\n\n  // Write the reference value into the stencil buffer.\n  renderState.stencilTest = {\n    enabled: true,\n    frontFunction: WebGLConstants.ALWAYS,\n    backFunction: WebGLConstants.ALWAYS,\n    reference: stencilReference,\n    mask: ~0,\n    frontOperation: {\n      fail: WebGLConstants.KEEP,\n      zFail: WebGLConstants.KEEP,\n      zPass: WebGLConstants.REPLACE,\n    },\n    backOperation: {\n      fail: WebGLConstants.KEEP,\n      zFail: WebGLConstants.KEEP,\n      zPass: WebGLConstants.REPLACE,\n    },\n  };\n\n  if (model.isInvisible()) {\n    renderState.colorMask = {\n      red: false,\n      green: false,\n      blue: false,\n      alpha: false,\n    };\n  }\n\n  silhouetteModelCommand.renderState = RenderState.fromCache(renderState);\n\n  return silhouetteModelCommand;\n}\n\nfunction deriveSilhouetteColorCommand(command, model) {\n  // Wrap around after exceeding the 8-bit stencil limit.\n  // The reference is unique to each model until this point.\n  const stencilReference = model._silhouetteId % 255;\n  const silhouetteColorCommand = DrawCommand.shallowClone(command);\n  const renderState = clone(command.renderState, true);\n  renderState.cull.enabled = false;\n\n  // Render the silhouette in the translucent pass if either the command\n  // pass or the silhouette color is translucent. This will account for\n  // translucent model color, since ModelColorPipelineStage sets the pass\n  // to translucent.\n  const silhouetteTranslucent =\n    command.pass === Pass.TRANSLUCENT || model.silhouetteColor.alpha < 1.0;\n  if (silhouetteTranslucent) {\n    silhouetteColorCommand.pass = Pass.TRANSLUCENT;\n    renderState.depthMask = false;\n    renderState.blending = BlendingState.ALPHA_BLEND;\n  }\n\n  // Only render the pixels of the silhouette that don't conflict with\n  // the stencil buffer. This way, the silhouette doesn't render over\n  // the original model.\n  renderState.stencilTest = {\n    enabled: true,\n    frontFunction: WebGLConstants.NOTEQUAL,\n    backFunction: WebGLConstants.NOTEQUAL,\n    reference: stencilReference,\n    mask: ~0,\n    frontOperation: {\n      fail: WebGLConstants.KEEP,\n      zFail: WebGLConstants.KEEP,\n      zPass: WebGLConstants.KEEP,\n    },\n    backOperation: {\n      fail: WebGLConstants.KEEP,\n      zFail: WebGLConstants.KEEP,\n      zPass: WebGLConstants.KEEP,\n    },\n  };\n\n  const uniformMap = clone(command.uniformMap);\n  uniformMap.model_silhouettePass = function () {\n    return true;\n  };\n\n  silhouetteColorCommand.renderState = RenderState.fromCache(renderState);\n  silhouetteColorCommand.uniformMap = uniformMap;\n  silhouetteColorCommand.castShadows = false;\n  silhouetteColorCommand.receiveShadows = false;\n\n  return silhouetteColorCommand;\n}\n\nfunction deriveEdgeCommand(command, renderResources) {\n  const edgeGeometry = renderResources.edgeGeometry;\n  const edgeCommand = DrawCommand.shallowClone(command);\n\n  // Use the edge geometry instead of the original geometry\n  edgeCommand.vertexArray = edgeGeometry.vertexArray;\n  edgeCommand.primitiveType = edgeGeometry.primitiveType;\n  edgeCommand.count = edgeGeometry.indexCount;\n\n  // Use the edge shader program if available\n  if (defined(edgeGeometry.shaderProgram)) {\n    edgeCommand.shaderProgram = edgeGeometry.shaderProgram;\n  }\n\n  // Set pass for edge rendering (use the pass specified in edgeGeometry)\n  edgeCommand.pass = edgeGeometry.pass;\n\n  // Override uniformMap to set u_isEdgePass to true for the edge pass\n  const uniformMap = clone(command.uniformMap);\n  uniformMap.u_isEdgePass = function () {\n    return true; // This is the edge pass\n  };\n  edgeCommand.uniformMap = uniformMap;\n\n  edgeCommand.castShadows = false;\n  edgeCommand.receiveShadows = false;\n\n  return edgeCommand;\n}\n\nfunction updateSkipLodStencilCommand(drawCommand, tile, use2D) {\n  const stencilDerivedComand = drawCommand._skipLodStencilCommand;\n  const stencilCommand = stencilDerivedComand.command;\n\n  const selectionDepth = tile._selectionDepth;\n  const lastSelectionDepth = getLastSelectionDepth(stencilCommand);\n\n  if (selectionDepth !== lastSelectionDepth) {\n    const skipLodStencilReference = getStencilReference(selectionDepth);\n    const renderState = clone(stencilCommand.renderState, true);\n    renderState.stencilTest.reference = skipLodStencilReference;\n    stencilCommand.renderState = RenderState.fromCache(renderState);\n\n    if (use2D) {\n      stencilDerivedComand.derivedCommand2D.renderState = renderState;\n    }\n  }\n}\n\nfunction getLastSelectionDepth(stencilCommand) {\n  // Isolate the selection depth from the stencil reference.\n  const reference = stencilCommand.renderState.stencilTest.reference;\n  return (\n    (reference & StencilConstants.SKIP_LOD_MASK) >>>\n    StencilConstants.SKIP_LOD_BIT_SHIFT\n  );\n}\n\nfunction getStencilReference(selectionDepth) {\n  // Stencil test is masked to the most significant 3 bits so the reference is shifted.\n  // Writes 0 for the terrain bit.\n  return (\n    StencilConstants.CESIUM_3D_TILE_MASK |\n    (selectionDepth << StencilConstants.SKIP_LOD_BIT_SHIFT)\n  );\n}\n\nfunction deriveSkipLodBackfaceCommand(command) {\n  // Write just backface depth of unresolved tiles so resolved stenciled tiles\n  // do not appear in front.\n  const backfaceCommand = DrawCommand.shallowClone(command);\n  const renderState = clone(command.renderState, true);\n  renderState.cull.enabled = true;\n  renderState.cull.face = CullFace.FRONT;\n  // Back faces do not need to write color.\n  renderState.colorMask = {\n    red: false,\n    green: false,\n    blue: false,\n    alpha: false,\n  };\n  // Push back face depth away from the camera so it is less likely that back faces and front faces of the same tile\n  // intersect and overlap. This helps avoid flickering for very thin double-sided walls.\n  renderState.polygonOffset = {\n    enabled: true,\n    factor: 5.0,\n    units: 5.0,\n  };\n\n  // The stencil test is set in TilesetPipelineStage.\n\n  const uniformMap = clone(backfaceCommand.uniformMap);\n  const polygonOffset = new Cartesian2(5.0, 5.0);\n\n  uniformMap.u_polygonOffset = function () {\n    return polygonOffset;\n  };\n\n  backfaceCommand.renderState = RenderState.fromCache(renderState);\n  backfaceCommand.uniformMap = uniformMap;\n  backfaceCommand.castShadows = false;\n  backfaceCommand.receiveShadows = false;\n\n  return backfaceCommand;\n}\n\nfunction deriveSkipLodStencilCommand(command) {\n  // Tiles only draw if their selection depth is >= the tile drawn already. They write their\n  // selection depth to the stencil buffer to prevent ancestor tiles from drawing on top\n  const stencilCommand = DrawCommand.shallowClone(command);\n  const renderState = clone(command.renderState, true);\n  // The stencil reference is updated dynamically; see updateSkipLodStencilCommand().\n  const { stencilTest } = renderState;\n  stencilTest.enabled = true;\n  stencilTest.mask = StencilConstants.SKIP_LOD_MASK;\n  stencilTest.reference = StencilConstants.CESIUM_3D_TILE_MASK;\n  stencilTest.frontFunction = StencilFunction.GREATER_OR_EQUAL;\n  stencilTest.frontOperation.zPass = StencilOperation.REPLACE;\n  stencilTest.backFunction = StencilFunction.GREATER_OR_EQUAL;\n  stencilTest.backOperation.zPass = StencilOperation.REPLACE;\n  renderState.stencilMask =\n    StencilConstants.CESIUM_3D_TILE_MASK | StencilConstants.SKIP_LOD_MASK;\n\n  stencilCommand.renderState = RenderState.fromCache(renderState);\n\n  return stencilCommand;\n}\n\nexport default ModelDrawCommand;\n","import BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport clone from \"../../Core/clone.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport DrawCommand from \"../../Renderer/DrawCommand.js\";\nimport RenderState from \"../../Renderer/RenderState.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport ShadowMode from \"../ShadowMode.js\";\nimport ClassificationModelDrawCommand from \"./ClassificationModelDrawCommand.js\";\nimport ModelDrawCommand from \"./ModelDrawCommand.js\";\nimport VertexArray from \"../../Renderer/VertexArray.js\";\nimport ModelVS from \"../../Shaders/Model/ModelVS.js\";\nimport ModelFS from \"../../Shaders/Model/ModelFS.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\n\n/**\n * Internal functions to build draw commands for models.\n *\n * (The core of these functions was taken from `buildDrawCommand.js´,\n * as of commit hash 7b93161da1cc03bdc796b204e7aa51fb7acebf04)\n *\n * @private\n */\nfunction ModelDrawCommands() {}\n\n/**\n * Builds the {@link ModelDrawCommand} for a {@link ModelRuntimePrimitive}\n * using its render resources. If the model classifies another asset, it\n * builds a {@link ClassificationModelDrawCommand} instead.\n *\n * @param {PrimitiveRenderResources} primitiveRenderResources The render resources for a primitive.\n * @param {FrameState} frameState The frame state for creating GPU resources.\n * @returns {ModelDrawCommand|ClassificationModelDrawCommand} The generated ModelDrawCommand or ClassificationModelDrawCommand.\n *\n * @private\n */\nModelDrawCommands.buildModelDrawCommand = function (\n  primitiveRenderResources,\n  frameState,\n) {\n  const shaderBuilder = primitiveRenderResources.shaderBuilder;\n  const shaderProgram = createShaderProgram(\n    primitiveRenderResources,\n    shaderBuilder,\n    frameState,\n  );\n\n  const command = buildDrawCommandForModel(\n    primitiveRenderResources,\n    shaderProgram,\n    frameState,\n  );\n\n  const model = primitiveRenderResources.model;\n  const hasClassification = defined(model.classificationType);\n  if (hasClassification) {\n    return new ClassificationModelDrawCommand({\n      primitiveRenderResources: primitiveRenderResources,\n      command: command,\n    });\n  }\n\n  return new ModelDrawCommand({\n    primitiveRenderResources: primitiveRenderResources,\n    command: command,\n  });\n};\n\n/**\n * @private\n */\nfunction createShaderProgram(\n  primitiveRenderResources,\n  shaderBuilder,\n  frameState,\n) {\n  shaderBuilder.addVertexLines(ModelVS);\n  shaderBuilder.addFragmentLines(ModelFS);\n\n  const model = primitiveRenderResources.model;\n  const shaderProgram = shaderBuilder.buildShaderProgram(frameState.context);\n  model._pipelineResources.push(shaderProgram);\n  return shaderProgram;\n}\n\n/**\n * Builds the {@link DrawCommand} that serves as the basis for either creating\n * a {@link ModelDrawCommand} or a {@link ModelRuntimePrimitive}\n *\n * @param {PrimitiveRenderResources} primitiveRenderResources The render resources for a primitive.\n * @param {ShaderProgram} shaderProgram The shader program\n * @param {FrameState} frameState The frame state for creating GPU resources.\n *\n * @returns {DrawCommand} The generated DrawCommand, to be passed to\n * the ModelDrawCommand or ClassificationModelDrawCommand\n *\n * @private\n */\nfunction buildDrawCommandForModel(\n  primitiveRenderResources,\n  shaderProgram,\n  frameState,\n) {\n  const indexBuffer = getIndexBuffer(primitiveRenderResources);\n\n  const vertexArray = new VertexArray({\n    context: frameState.context,\n    indexBuffer: indexBuffer,\n    attributes: primitiveRenderResources.attributes,\n  });\n\n  const model = primitiveRenderResources.model;\n  model._pipelineResources.push(vertexArray);\n\n  const pass = primitiveRenderResources.alphaOptions.pass;\n  const sceneGraph = model.sceneGraph;\n\n  const is3D = frameState.mode === SceneMode.SCENE3D;\n  let modelMatrix, boundingSphere;\n\n  if (!is3D && !frameState.scene3DOnly && model._projectTo2D) {\n    modelMatrix = Matrix4.multiplyTransformation(\n      sceneGraph._computedModelMatrix,\n      primitiveRenderResources.runtimeNode.computedTransform,\n      new Matrix4(),\n    );\n\n    const runtimePrimitive = primitiveRenderResources.runtimePrimitive;\n    boundingSphere = runtimePrimitive.boundingSphere2D;\n  } else {\n    const computedModelMatrix = is3D\n      ? sceneGraph._computedModelMatrix\n      : sceneGraph._computedModelMatrix2D;\n\n    modelMatrix = Matrix4.multiplyTransformation(\n      computedModelMatrix,\n      primitiveRenderResources.runtimeNode.computedTransform,\n      new Matrix4(),\n    );\n\n    boundingSphere = BoundingSphere.transform(\n      primitiveRenderResources.boundingSphere,\n      modelMatrix,\n    );\n  }\n\n  // Initialize render state with default values\n  let renderState = clone(\n    RenderState.fromCache(primitiveRenderResources.renderStateOptions),\n    true,\n  );\n\n  renderState.cull.face = ModelUtility.getCullFace(\n    modelMatrix,\n    primitiveRenderResources.primitiveType,\n  );\n  renderState = RenderState.fromCache(renderState);\n\n  const hasClassification = defined(model.classificationType);\n  const castShadows = hasClassification\n    ? false\n    : ShadowMode.castShadows(model.shadows);\n  const receiveShadows = hasClassification\n    ? false\n    : ShadowMode.receiveShadows(model.shadows);\n  // Pick IDs are only added to specific draw commands for classification.\n  // This behavior is handled by ClassificationModelDrawCommand.\n  const pickId = hasClassification\n    ? undefined\n    : primitiveRenderResources.pickId;\n\n  const command = new DrawCommand({\n    boundingVolume: boundingSphere,\n    modelMatrix: modelMatrix,\n    uniformMap: primitiveRenderResources.uniformMap,\n    renderState: renderState,\n    vertexArray: vertexArray,\n    shaderProgram: shaderProgram,\n    cull: model.cull,\n    pass: pass,\n    count: primitiveRenderResources.count,\n    owner: model,\n    pickId: pickId,\n    pickMetadataAllowed: true,\n    instanceCount: primitiveRenderResources.instanceCount,\n    primitiveType: primitiveRenderResources.primitiveType,\n    debugShowBoundingVolume: model.debugShowBoundingVolume,\n    castShadows: castShadows,\n    receiveShadows: receiveShadows,\n  });\n  return command;\n}\n\n/**\n * @private\n */\nfunction getIndexBuffer(primitiveRenderResources) {\n  const wireframeIndexBuffer = primitiveRenderResources.wireframeIndexBuffer;\n  if (defined(wireframeIndexBuffer)) {\n    return wireframeIndexBuffer;\n  }\n\n  const indices = primitiveRenderResources.indices;\n  if (!defined(indices)) {\n    return undefined;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(indices.buffer)) {\n    throw new DeveloperError(\"Indices must be provided as a Buffer\");\n  }\n  //>>includeEnd('debug');\n\n  return indices.buffer;\n}\n\nexport default ModelDrawCommands;\n","import Color from \"../../Core/Color.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * A feature of a {@link Model}.\n * <p>\n * Provides access to a feature's properties stored in the model's feature table.\n * </p>\n * <p>\n * Modifications to a <code>ModelFeature</code> object have the lifetime of the model.\n * </p>\n * <p>\n * Do not construct this directly. Access it through picking using {@link Scene#pick}.\n * </p>\n *\n * @alias ModelFeature\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Model} options.model The model the feature belongs to.\n * @param {number} options.featureId The unique integral identifier for this feature.\n *\n * @example\n * // On mouse over, display all the properties for a feature in the console log.\n * handler.setInputAction(function(movement) {\n *     const feature = scene.pick(movement.endPosition);\n *     if (feature instanceof Cesium.ModelFeature) {\n *         console.log(feature);\n *     }\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n *\n */\nfunction ModelFeature(options) {\n  this._model = options.model;\n\n  // This ModelFeatureTable is not documented as an option since it is\n  // part of the private API and should not appear in the documentation.\n  this._featureTable = options.featureTable;\n\n  this._featureId = options.featureId;\n  this._color = undefined; // for calling getColor\n}\n\nObject.defineProperties(ModelFeature.prototype, {\n  /**\n   * Gets or sets if the feature will be shown. This is set for all features\n   * when a style's show is evaluated.\n   *\n   * @memberof ModelFeature.prototype\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._featureTable.getShow(this._featureId);\n    },\n    set: function (value) {\n      this._featureTable.setShow(this._featureId, value);\n    },\n  },\n\n  /**\n   * Gets or sets the highlight color multiplied with the feature's color.  When\n   * this is white, the feature's color is not changed. This is set for all features\n   * when a style's color is evaluated.\n   *\n   * @memberof ModelFeature.prototype\n   *\n   * @type {Color}\n   *\n   * @default {@link Color.WHITE}\n   */\n  color: {\n    get: function () {\n      if (!defined(this._color)) {\n        this._color = new Color();\n      }\n      return this._featureTable.getColor(this._featureId, this._color);\n    },\n    set: function (value) {\n      this._featureTable.setColor(this._featureId, value);\n    },\n  },\n  /**\n   * All objects returned by {@link Scene#pick} have a <code>primitive</code> property. This returns\n   * the model containing the feature.\n   *\n   * @memberof ModelFeature.prototype\n   *\n   * @type {Model}\n   *\n   * @readonly\n   * @private\n   */\n  primitive: {\n    get: function () {\n      return this._model;\n    },\n  },\n\n  /**\n   *  The {@link ModelFeatureTable} that this feature belongs to.\n   *\n   * @memberof ModelFeature.prototype\n   *\n   * @type {ModelFeatureTable}\n   *\n   * @readonly\n   * @private\n   */\n  featureTable: {\n    get: function () {\n      return this._featureTable;\n    },\n  },\n\n  /**\n   * Get the feature ID associated with this feature. For 3D Tiles 1.0, the\n   * batch ID is returned. For EXT_mesh_features, this is the feature ID from\n   * the selected feature ID set.\n   *\n   * @memberof ModelFeature.prototype\n   *\n   * @type {number}\n   *\n   * @readonly\n   * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n   */\n  featureId: {\n    get: function () {\n      return this._featureId;\n    },\n  },\n});\n\n/**\n * Returns whether the feature contains this property.\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {boolean} Whether the feature contains this property.\n */\nModelFeature.prototype.hasProperty = function (name) {\n  return this._featureTable.hasProperty(this._featureId, name);\n};\n\n/**\n * Returns a copy of the value of the feature's property with the given name.\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n *\n * @example\n * // Display all the properties for a feature in the console log.\n * const propertyIds = feature.getPropertyIds();\n * const length = propertyIds.length;\n * for (let i = 0; i < length; ++i) {\n *     const propertyId = propertyIds[i];\n *     console.log(propertyId + ': ' + feature.getProperty(propertyId));\n * }\n */\nModelFeature.prototype.getProperty = function (name) {\n  return this._featureTable.getProperty(this._featureId, name);\n};\n\n/**\n * Returns a copy of the feature's property with the given name, examining all\n * the metadata from the EXT_structural_metadata and legacy EXT_feature_metadata glTF\n * extensions. Metadata is checked against name from most specific to most\n * general and the first match is returned. Metadata is checked in this order:\n * <ol>\n *   <li>structural metadata property by semantic</li>\n *   <li>structural metadata property by property ID</li>\n * </ol>\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension} as well as the\n * previous {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension} for glTF.\n * </p>\n *\n * @param {string} name The semantic or property ID of the feature. Semantics are checked before property IDs in each granularity of metadata.\n * @return {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nModelFeature.prototype.getPropertyInherited = function (name) {\n  if (this._featureTable.hasPropertyBySemantic(this._featureId, name)) {\n    return this._featureTable.getPropertyBySemantic(this._featureId, name);\n  }\n\n  return this._featureTable.getProperty(this._featureId, name);\n};\n\n/**\n * Returns an array of property IDs for the feature.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The IDs of the feature's properties.\n */\nModelFeature.prototype.getPropertyIds = function (results) {\n  return this._featureTable.getPropertyIds(results);\n};\n\n/**\n * Sets the value of the feature's property with the given name.\n *\n * @param {string} name The case-sensitive name of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n *\n * @exception {DeveloperError} Inherited batch table hierarchy property is read only.\n *\n * @example\n * const height = feature.getProperty('Height'); // e.g., the height of a building\n *\n * @example\n * const name = 'clicked';\n * if (feature.getProperty(name)) {\n *     console.log('already clicked');\n * } else {\n *     feature.setProperty(name, true);\n *     console.log('first click');\n * }\n */\nModelFeature.prototype.setProperty = function (name, value) {\n  return this._featureTable.setProperty(this._featureId, name, value);\n};\n\nexport default ModelFeature;\n","import BatchTexture from \"../BatchTexture.js\";\nimport Cesium3DTileFeature from \"../Cesium3DTileFeature.js\";\nimport Check from \"../../Core/Check.js\";\nimport Color from \"../../Core/Color.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport ModelFeature from \"./ModelFeature.js\";\nimport StyleCommandsNeeded from \"./StyleCommandsNeeded.js\";\nimport ModelType from \"./ModelType.js\";\n\n/**\n * Manages the {@link ModelFeature}s in a {@link Model}.\n * Extracts the properties from a {@link PropertyTable}.\n *\n * @param {object} options An object containing the following options:\n * @param {Model} options.model The model that owns this feature table.\n * @param {PropertyTable} options.propertyTable The property table from the model used to initialize the model.\n *\n * @alias ModelFeatureTable\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction ModelFeatureTable(options) {\n  const model = options.model;\n  const propertyTable = options.propertyTable;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"propertyTable\", propertyTable);\n  Check.typeOf.object(\"model\", model);\n  //>>includeEnd('debug');\n\n  this._propertyTable = propertyTable;\n  this._model = model;\n\n  this._features = undefined;\n  this._featuresLength = 0;\n\n  this._batchTexture = undefined;\n\n  this._styleCommandsNeededDirty = false;\n  this._styleCommandsNeeded = StyleCommandsNeeded.ALL_OPAQUE;\n\n  initialize(this);\n}\n\nObject.defineProperties(ModelFeatureTable.prototype, {\n  /**\n   * The batch texture created for the features in this table.\n   *\n   * @memberof ModelFeatureTable.prototype\n   *\n   * @type {BatchTexture}\n   * @readonly\n   *\n   * @private\n   */\n  batchTexture: {\n    get: function () {\n      return this._batchTexture;\n    },\n  },\n\n  /**\n   * The number of features in this table.\n   *\n   * @memberof ModelFeatureTable.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  featuresLength: {\n    get: function () {\n      return this._featuresLength;\n    },\n  },\n\n  /**\n   * Size of the batch texture. This does not count the property table size\n   * as that is counted separately through StructuralMetadata.\n   *\n   * @memberof ModelFeatureTable.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  batchTextureByteLength: {\n    get: function () {\n      if (defined(this._batchTexture)) {\n        return this._batchTexture.byteLength;\n      }\n\n      return 0;\n    },\n  },\n\n  /**\n   * A flag to indicate whether or not the types of style commands needed by this feature table have changed.\n   *\n   * @memberof ModelFeatureTable.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  styleCommandsNeededDirty: {\n    get: function () {\n      return this._styleCommandsNeededDirty;\n    },\n  },\n});\n\nfunction initialize(modelFeatureTable) {\n  const model = modelFeatureTable._model;\n  const is3DTiles = ModelType.is3DTiles(model.type);\n\n  const featuresLength = modelFeatureTable._propertyTable.count;\n  if (featuresLength === 0) {\n    return;\n  }\n\n  let i;\n  const features = new Array(featuresLength);\n  if (is3DTiles) {\n    const content = model.content;\n    for (i = 0; i < featuresLength; i++) {\n      features[i] = new Cesium3DTileFeature(content, i);\n    }\n  } else {\n    for (i = 0; i < featuresLength; i++) {\n      features[i] = new ModelFeature({\n        model: model,\n        featureId: i,\n        featureTable: modelFeatureTable,\n      });\n    }\n  }\n\n  modelFeatureTable._features = features;\n  modelFeatureTable._featuresLength = featuresLength;\n\n  modelFeatureTable._batchTexture = new BatchTexture({\n    featuresLength: featuresLength,\n    owner: modelFeatureTable,\n    statistics: is3DTiles ? model.content.tileset.statistics : undefined,\n  });\n}\n\n/**\n * Creates/updates the batch texture.\n *\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nModelFeatureTable.prototype.update = function (frameState) {\n  // Assume the number of translucent features has not changed.\n  this._styleCommandsNeededDirty = false;\n  this._batchTexture.update(undefined, frameState);\n\n  const currentStyleCommandsNeeded = StyleCommandsNeeded.getStyleCommandsNeeded(\n    this._featuresLength,\n    this._batchTexture.translucentFeaturesLength,\n  );\n\n  if (this._styleCommandsNeeded !== currentStyleCommandsNeeded) {\n    this._styleCommandsNeededDirty = true;\n    this._styleCommandsNeeded = currentStyleCommandsNeeded;\n  }\n};\n\nModelFeatureTable.prototype.setShow = function (featureId, show) {\n  this._batchTexture.setShow(featureId, show);\n};\n\nModelFeatureTable.prototype.setAllShow = function (show) {\n  this._batchTexture.setAllShow(show);\n};\n\nModelFeatureTable.prototype.getShow = function (featureId) {\n  return this._batchTexture.getShow(featureId);\n};\n\nModelFeatureTable.prototype.setColor = function (featureId, color) {\n  this._batchTexture.setColor(featureId, color);\n};\n\nModelFeatureTable.prototype.setAllColor = function (color) {\n  this._batchTexture.setAllColor(color);\n};\n\nModelFeatureTable.prototype.getColor = function (featureId, result) {\n  return this._batchTexture.getColor(featureId, result);\n};\n\nModelFeatureTable.prototype.getPickColor = function (featureId) {\n  return this._batchTexture.getPickColor(featureId);\n};\n\nModelFeatureTable.prototype.getFeature = function (featureId) {\n  return this._features[featureId];\n};\n\nModelFeatureTable.prototype.hasProperty = function (featureId, propertyName) {\n  return this._propertyTable.hasProperty(featureId, propertyName);\n};\n\nModelFeatureTable.prototype.hasPropertyBySemantic = function (\n  featureId,\n  propertyName,\n) {\n  return this._propertyTable.hasPropertyBySemantic(featureId, propertyName);\n};\n\nModelFeatureTable.prototype.getProperty = function (featureId, name) {\n  return this._propertyTable.getProperty(featureId, name);\n};\n\nModelFeatureTable.prototype.getPropertyBySemantic = function (\n  featureId,\n  semantic,\n) {\n  return this._propertyTable.getPropertyBySemantic(featureId, semantic);\n};\n\nModelFeatureTable.prototype.getPropertyIds = function (results) {\n  return this._propertyTable.getPropertyIds(results);\n};\n\nModelFeatureTable.prototype.setProperty = function (featureId, name, value) {\n  return this._propertyTable.setProperty(featureId, name, value);\n};\n\nModelFeatureTable.prototype.isClass = function (featureId, className) {\n  return this._propertyTable.isClass(featureId, className);\n};\n\nModelFeatureTable.prototype.isExactClass = function (featureId, className) {\n  return this._propertyTable.isExactClass(featureId, className);\n};\n\nModelFeatureTable.prototype.getExactClassName = function (featureId) {\n  return this._propertyTable.getExactClassName(featureId);\n};\n\nconst scratchColor = new Color();\n/**\n * @private\n */\nModelFeatureTable.prototype.applyStyle = function (style) {\n  if (!defined(style)) {\n    this.setAllColor(BatchTexture.DEFAULT_COLOR_VALUE);\n    this.setAllShow(BatchTexture.DEFAULT_SHOW_VALUE);\n    return;\n  }\n\n  for (let i = 0; i < this._featuresLength; i++) {\n    const feature = this.getFeature(i);\n    const color = defined(style.color)\n      ? (style.color.evaluateColor(feature, scratchColor) ??\n        BatchTexture.DEFAULT_COLOR_VALUE)\n      : BatchTexture.DEFAULT_COLOR_VALUE;\n    const show = defined(style.show)\n      ? (style.show.evaluate(feature) ?? BatchTexture.DEFAULT_SHOW_VALUE)\n      : BatchTexture.DEFAULT_SHOW_VALUE;\n\n    this.setColor(i, color);\n    this.setShow(i, show);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ModelFeatureTable#destroy\n * @private\n */\nModelFeatureTable.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * e = e && e.destroy();\n *\n * @see ModelFeatureTable#isDestroyed\n * @private\n */\nModelFeatureTable.prototype.destroy = function (frameState) {\n  this._batchTexture = this._batchTexture && this._batchTexture.destroy();\n  destroyObject(this);\n};\n\nexport default ModelFeatureTable;\n","import Check from \"../../Core/Check.js\";\nimport defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\n\nimport ImageryConfiguration from \"./ImageryConfiguration.js\";\nimport ModelPrimitiveImagery from \"./ModelPrimitiveImagery.js\";\n\n/**\n * A class managing the draping of imagery on a <code>Model</code>.\n *\n * An instance of this class is created in the Model constructor. It will\n * create the data structures that carry the information that is required\n * for mapping imagery textures on model primitives.\n *\n * It offers two functions for managing the lifecycle of this draping process:\n *\n * The <code>update</code> function is called from the <code>Model.update</code>\n * function in each frame. It will create one <code>ModelPrimitiveImagery</code>\n * instance for each primitive that appears in the model, and call the\n * <code>update</code> function of these instances, respectively.\n *\n * The <code>ready</code> getter will be used to determine whether the\n * draping computations are done, and the update process of the <code>Model</code>\n * can continue, eventually causing the <code>model.ready</code> flag to\n * become <code>true</code>. The model imagery counts as \"ready\" when all\n * the imagery layers of the model are <code>ready</code>, and all the\n * <code>ModelPrimitiveImagery</code> instances are <code>ready</code>.\n *\n * @private\n */\nclass ModelImagery {\n  /**\n   * Creates a new instance\n   *\n   * @param {Model} model The model\n   * @throws {DeveloperError} If the model is not defined\n   */\n  constructor(model) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"model\", model);\n    //>>includeEnd('debug');\n\n    /**\n     * The model that this instance was created for.\n     *\n     * @type {Model}\n     * @readonly\n     * @private\n     */\n    this._model = model;\n\n    /**\n     * One <code<ModelPrimitiveImagery</code> for each primitive\n     * that appears in the model.\n     *\n     * Initially, this is <code>undefined</code>. When the <code>update</code>\n     * function is called and all imagery layers that are associated with the\n     * model are <code>ready</code>, this is initialized with one instance\n     * of a <code>ModelPrimitiveImagery</code> per runtime primitive (i.e. one for\n     * each <code>model.sceneGraph._runtimeNodes[n]._runtimePrimitives[p]</code>)\n     *\n     * @type {ModelPrimitiveImagery[]|undefined}\n     * @private\n     */\n    this._modelPrimitiveImageries = undefined;\n\n    /**\n     * One <code>ImageryConfiguration</code> object for each <code>ImageryLayer</code>\n     * that is associated with the model.\n     *\n     * This is used for determining whether the configuration (relevant property\n     * values) of an imagery layer has been changed since the previous\n     * <code>update</code> call, which should cause the draw commands of the\n     * model to be reset.\n     *\n     * @type {ImageryConfiguration[]}\n     * @private\n     */\n    this._imageryConfigurations = [];\n  }\n\n  /**\n   * The update function that is called from <code>Model.update</code> in\n   * each frame.\n   *\n   * This checks whether the imagery layer objects that are associated\n   * with the model are all <code>ready</code>. If they are not yet\n   * ready, then nothing is done.\n   *\n   * Otherwise, this just calls the <code>update</code> function of\n   * the <code>_modelPrimitiveImageries</code> (creating them if they had\n   * not been created yet).\n   *\n   * @param {FrameState} frameState The frame state\n   */\n  update(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (!this._hasImagery) {\n      // When there is no imagery, make sure to delete any model primitive\n      // imageries that may previously have been created\n      this._deleteModelPrimitiveImageries();\n      return;\n    }\n\n    if (!this._allImageryLayersReady) {\n      return;\n    }\n\n    if (!defined(this._modelPrimitiveImageries)) {\n      this._modelPrimitiveImageries = this._createModelPrimitiveImageries();\n    }\n    this._updateModelPrimitiveImageries(frameState);\n\n    this._checkForModifiedImageryConfigurations();\n  }\n\n  /**\n   * Creates the <code>ModelPrimitiveImagery</code> array that contains\n   * one <code>ModelPrimitiveImagery</code> for each primitive that is\n   * contained in the model.\n   *\n   * @returns {ModelPrimitiveImagery[]} The model primitive imageries\n   * @private\n   */\n  _createModelPrimitiveImageries() {\n    const model = this._model;\n    const runtimeNodesAndPrimitives = this._collectRuntimeNodesAndPrimitives();\n    const modelPrimitiveImageries = [];\n    const length = runtimeNodesAndPrimitives.length;\n    for (let i = 0; i < length; i++) {\n      const runtimeNodeAndPrimitive = runtimeNodesAndPrimitives[i];\n      const runtimeNode = runtimeNodeAndPrimitive.runtimeNode;\n      const runtimePrimitive = runtimeNodeAndPrimitive.runtimePrimitive;\n      const modelPrimitiveImagery = new ModelPrimitiveImagery(\n        model,\n        runtimeNode,\n        runtimePrimitive,\n      );\n      runtimePrimitive.primitive.modelPrimitiveImagery = modelPrimitiveImagery;\n      modelPrimitiveImageries.push(modelPrimitiveImagery);\n    }\n    return modelPrimitiveImageries;\n  }\n\n  /**\n   * Computes all runtime nodes and primitives of the model.\n   *\n   * This is just the array that contains a\n   * <code>{ runtimeNode, runtimePrimitive }</code>\n   * for each\n   * <code>model.sceneGraph._runtimeNodes[n]._runtimePrimitives[p]</code>.\n   *\n   * @returns {object[]} The runtime nodes and primitives\n   * @private\n   */\n  _collectRuntimeNodesAndPrimitives() {\n    const model = this._model;\n    const sceneGraph = model.sceneGraph;\n    const runtimeNodes = sceneGraph._runtimeNodes;\n    const runtimeNodesAndPrimitives = [];\n    for (let i = 0; i < runtimeNodes.length; i++) {\n      const runtimeNode = runtimeNodes[i];\n      if (!defined(runtimeNode)) {\n        continue;\n      }\n      for (let j = 0; j < runtimeNode.runtimePrimitives.length; j++) {\n        const runtimePrimitive = runtimeNode.runtimePrimitives[j];\n        runtimeNodesAndPrimitives.push({\n          runtimeNode: runtimeNode,\n          runtimePrimitive: runtimePrimitive,\n        });\n      }\n    }\n    return runtimeNodesAndPrimitives;\n  }\n\n  /**\n   * Just calls <code>update</code> on each <code>ModelPrimitiveImagery</code>\n   * as part of the <code>update</code> of this class.\n   *\n   * @private\n   */\n  _updateModelPrimitiveImageries(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    if (!defined(this._modelPrimitiveImageries)) {\n      throw new DeveloperError(\n        \"The modelPrimitiveImageries have not been created\",\n      );\n    }\n\n    const modelPrimitiveImageries = this._modelPrimitiveImageries;\n    const length = modelPrimitiveImageries.length;\n    for (let i = 0; i < length; i++) {\n      const modelPrimitiveImagery = modelPrimitiveImageries[i];\n      modelPrimitiveImagery.update(frameState);\n    }\n  }\n\n  /**\n   * Destroy and delete all <code>ModelPrimitiveImagery</code> instances\n   * if they already have been created.\n   */\n  _deleteModelPrimitiveImageries() {\n    const modelPrimitiveImageries = this._modelPrimitiveImageries;\n    if (!defined(modelPrimitiveImageries)) {\n      return;\n    }\n    const length = modelPrimitiveImageries.length;\n    for (let i = 0; i < length; i++) {\n      const modelPrimitiveImagery = modelPrimitiveImageries[i];\n      modelPrimitiveImagery.destroy();\n    }\n    delete this._modelPrimitiveImageries;\n    this._model.resetDrawCommands();\n  }\n\n  /**\n   * Returns whether this instance is \"ready\".\n   *\n   * This means that all imagery layers that are associated with the model\n   * are <code>ready</code>, and all <code>ModelPrimitiveImagery</code>\n   * instances are <code>ready</code>.\n   *\n   * When this is <code>true</code>, then the mapping computations are\n   * complete and the structures containing the mapping information have\n   * been initialized. Otherwise, subsequent calls to <code>update</code>\n   * will perform the necessary computation until this getter eventually\n   * returns <code>true</code>.\n   *\n   * @returns {boolean} Whether this instance is \"ready\"\n   */\n  get ready() {\n    if (!this._hasImagery) {\n      return true;\n    }\n    if (!this._allImageryLayersReady) {\n      return false;\n    }\n    if (!this._allModelPrimitiveImageriesReady) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Returns whether the model has imagery layers associated with it.\n   *\n   * @private\n   */\n  get _hasImagery() {\n    const model = this._model;\n    const imageryLayers = model.imageryLayers;\n    return defined(imageryLayers) && imageryLayers.length > 0;\n  }\n\n  /**\n   * Returns whether all imagery layers that are associated with the\n   * model are <code>ready</code>.\n   *\n   * If the model does not have imagery, then this always returns\n   * <code>true</code>. Otherwise, it returns whether each imagery\n   * layer is <code>ready</code>.\n   *\n   * @private\n   */\n  get _allImageryLayersReady() {\n    if (!this._hasImagery) {\n      return true;\n    }\n    const imageryLayers = this._model.imageryLayers;\n    const length = imageryLayers.length;\n    for (let i = 0; i < length; i++) {\n      const imageryLayer = imageryLayers.get(i);\n      if (!imageryLayer.ready) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Returns whether all <code>ModelPrimitiveImagery</code> instances\n   * are are <code>ready</code>.\n   *\n   * @private\n   */\n  get _allModelPrimitiveImageriesReady() {\n    const modelPrimitiveImageries = this._modelPrimitiveImageries;\n    if (!defined(modelPrimitiveImageries)) {\n      return false;\n    }\n    const length = modelPrimitiveImageries.length;\n    for (let i = 0; i < length; i++) {\n      const modelPrimitiveImagery = modelPrimitiveImageries[i];\n      if (!modelPrimitiveImagery.ready) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Check whether any of the settings of any imagery layer (like alpha\n   * or hue) has been changed since the last call to the <code>update</code>\n   * function.\n   *\n   * If this is the case, the draw commands of the model will be reset.\n   */\n  _checkForModifiedImageryConfigurations() {\n    if (this._imageryConfigurationsModified()) {\n      this._updateImageryConfigurations();\n      const model = this._model;\n      model.resetDrawCommands();\n    }\n  }\n\n  /**\n   * Returns whether any setting of an imagery layer (like alpha or hue) has\n   * been changed since the last time the <code>ImageryConfiguration</code>\n   * objects have been updated.\n   *\n   * @returns {boolean} Whether there was a modification\n   */\n  _imageryConfigurationsModified() {\n    const model = this._model;\n    const imageryLayers = model.imageryLayers;\n    const imageryConfigurations = this._imageryConfigurations;\n    if (imageryLayers.length !== imageryConfigurations.length) {\n      return true;\n    }\n    for (let i = 0; i < imageryLayers.length; i++) {\n      const imageryLayer = imageryLayers.get(i);\n      const imageryConfiguration = imageryConfigurations[i];\n\n      if (imageryLayer.show !== imageryConfiguration.show) {\n        return true;\n      }\n      if (imageryLayer.alpha !== imageryConfiguration.alpha) {\n        return true;\n      }\n      if (imageryLayer.brightness !== imageryConfiguration.brightness) {\n        return true;\n      }\n      if (imageryLayer.contrast !== imageryConfiguration.contrast) {\n        return true;\n      }\n      if (imageryLayer.hue !== imageryConfiguration.hue) {\n        return true;\n      }\n      if (imageryLayer.saturation !== imageryConfiguration.saturation) {\n        return true;\n      }\n      if (imageryLayer.gamma !== imageryConfiguration.gamma) {\n        return true;\n      }\n      if (imageryLayer.colorToAlpha !== imageryConfiguration.colorToAlpha) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Create one <code>ImageryConfiguration</code> object for each imagery\n   * layer that appears in the model, and store them as the\n   * <code>_imageryConfigurations</code>.\n   */\n  _updateImageryConfigurations() {\n    const model = this._model;\n    const imageryLayers = model.imageryLayers;\n    const imageryConfigurations = this._imageryConfigurations;\n    imageryConfigurations.length = imageryLayers.length;\n    for (let i = 0; i < imageryLayers.length; i++) {\n      const imageryLayer = imageryLayers.get(i);\n      imageryConfigurations[i] = new ImageryConfiguration(imageryLayer);\n    }\n  }\n\n  /**\n   * Returns whether this object was destroyed.\n   *\n   * If this object was destroyed, calling any function other than\n   * <code>isDestroyed</code> will result in a {@link DeveloperError}.\n   *\n   * @returns {boolean} Whether this object was destroyed\n   */\n  isDestroyed() {\n    return false;\n  }\n\n  /**\n   * Destroys this object and all its resources.\n   */\n  destroy() {\n    if (this.isDestroyed()) {\n      return;\n    }\n    this._deleteModelPrimitiveImageries();\n    return destroyObject(this);\n  }\n}\n\nexport default ModelImagery;\n","import defined from \"../../Core/defined.js\";\nimport Cartesian2 from \"../../Core/Cartesian2.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Rectangle from \"../../Core/Rectangle.js\";\nimport Cartographic from \"../../Core/Cartographic.js\";\nimport BoundingRectangle from \"../../Core/BoundingRectangle.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport Check from \"../../Core/Check.js\";\n\nimport AttributeType from \"../AttributeType.js\";\nimport ModelReader from \"./ModelReader.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\n/**\n * A class for computing the texture coordinates of imagery that is\n * supposed to be mapped on a <code>ModelComponents.Primitive</code>.\n *\n * @private\n */\nclass ModelImageryMapping {\n  /**\n   * Creates a typed array that contains texture coordinates for\n   * the given <code>MappedPositions</code>, using the given\n   * projection.\n   *\n   * This will be a typed array that contains the texture coordinates\n   * that result from projecting the given positions with the given\n   * projection, and normalizing them to their bounding rectangle.\n   *\n   * @param {MappedPositions} mappedPositions The positions\n   * @param {MapProjection} projection The projection that should be used\n   * @returns {TypedArray} The result\n   */\n  static createTextureCoordinatesForMappedPositions(\n    mappedPositions,\n    projection,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"mappedPositions\", mappedPositions);\n    Check.defined(\"projection\", projection);\n    //>>includeEnd('debug');\n\n    const cartographicPositions = mappedPositions.cartographicPositions;\n    const cartographicBoundingRectangle =\n      mappedPositions.cartographicBoundingRectangle;\n    const numPositions = mappedPositions.numPositions;\n    return ModelImageryMapping._createTextureCoordinates(\n      cartographicPositions,\n      numPositions,\n      cartographicBoundingRectangle,\n      projection,\n    );\n  }\n\n  /**\n   * Creates a typed array that contains texture coordinates for\n   * a primitive with the given positions, using the given\n   * projection.\n   *\n   * This will be a typed array of size <code>numPositions*2</code>\n   * that contains the texture coordinates that result from\n   * projecting the given positions with the given projection,\n   * and normalizing them to the given bounding rectangle.\n   *\n   * @param {Iterable<Cartographic>} cartographicPositions The\n   * cartographic positions\n   * @param {number} numPositions The number of positions (vertices)\n   * @param {Rectangle} cartographicBoundingRectangle The bounding\n   * rectangle of the cartographic positions\n   * @param {MapProjection} projection The projection that should be used\n   * @returns {TypedArray} The result\n   * @private\n   */\n  static _createTextureCoordinates(\n    cartographicPositions,\n    numPositions,\n    cartographicBoundingRectangle,\n    projection,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"cartographicPositions\", cartographicPositions);\n    Check.typeOf.number.greaterThanOrEquals(\"numPositions\", numPositions, 0);\n    Check.defined(\n      \"cartographicBoundingRectangle\",\n      cartographicBoundingRectangle,\n    );\n    Check.defined(\"projection\", projection);\n    //>>includeEnd('debug');\n\n    // Convert the bounding `Rectangle`(!) of the cartographic positions\n    // into a `BoundingRectangle`(!) using the given projection\n    const boundingRectangle = new BoundingRectangle();\n    BoundingRectangle.fromRectangle(\n      cartographicBoundingRectangle,\n      projection,\n      boundingRectangle,\n    );\n\n    // Compute the projected positions, using the given projection\n    const projectedPositions = ModelImageryMapping.createProjectedPositions(\n      cartographicPositions,\n      projection,\n    );\n\n    // Relativize the projected positions into the bounding rectangle\n    // to obtain texture coordinates\n    const texCoords = ModelImageryMapping.computeTexCoords(\n      projectedPositions,\n      boundingRectangle,\n    );\n\n    // Convert the texture coordinates into a typed array\n    const texCoordsTypedArray =\n      ModelImageryMapping.createTypedArrayFromCartesians2(\n        numPositions,\n        texCoords,\n      );\n\n    return texCoordsTypedArray;\n  }\n\n  /**\n   * Creates the `ModelComponents.Attribute` for the texture coordinates\n   * for a primitive\n   *\n   * This will create an attribute with\n   * - semantic: VertexAttributeSemantic.TEXCOORD\n   * - type: AttributeType.VEC2\n   * - count: mappedPositions.numPositions\n   * that contains the texture coordinates for the given vertex positions,\n   * after they are projected using the given projection, normalized to\n   * their bounding rectangle.\n   *\n   * @param {Iterable<Cartographic>} cartographicPositions The\n   * cartographic positions\n   * @param {number} numPositions The number of positions (vertices)\n   * @param {Rectangle} cartographicBoundingRectangle The bounding\n   * rectangle of the cartographic positions\n   * @param {MapProjection} projection The projection that should be used\n   * @returns {ModelComponents.Attribute} The new attribute\n   */\n  static createTextureCoordinatesAttributeForMappedPositions(\n    mappedPositions,\n    projection,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"mappedPositions\", mappedPositions);\n    Check.defined(\"projection\", projection);\n    //>>includeEnd('debug');\n\n    // Create the typed array that contains the texture coordinates\n    const texCoordsTypedArray =\n      ModelImageryMapping.createTextureCoordinatesForMappedPositions(\n        mappedPositions,\n        projection,\n      );\n\n    // Create an attribute from the texture coordinates typed array\n    const texCoordAttribute =\n      ModelImageryMapping.createTexCoordAttribute(texCoordsTypedArray);\n\n    return texCoordAttribute;\n  }\n\n  /**\n   * Create an iterable that provides the cartographic positions\n   * of the given POSITION attribute, based on the given ellipsoid\n   *\n   * @param {ModelComponents.Attribute} primitivePositionAttribute\n   * The \"POSITION\" attribute of the primitive.\n   * @param {Matrix4} primitivePositionTransform The full transform of the primitive\n   * @param {Elliposid} ellipsoid The ellipsoid that should be used\n   * @returns {Iterable<Cartographic>} The iterable over `Cartographic` objects\n   */\n  static createCartographicPositions(\n    primitivePositionAttribute,\n    primitivePositionTransform,\n    ellipsoid,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"primitivePositionAttribute\", primitivePositionAttribute);\n    Check.defined(\"primitivePositionTransform\", primitivePositionTransform);\n    Check.defined(\"ellipsoid\", ellipsoid);\n    //>>includeEnd('debug');\n\n    // Extract the positions as a typed array\n    const typedArray = ModelReader.readAttributeAsTypedArray(\n      primitivePositionAttribute,\n    );\n\n    // Create an iterable over the positions\n    const type = primitivePositionAttribute.type;\n    const numComponents = AttributeType.getNumberOfComponents(type);\n    const positions =\n      ModelImageryMapping.createIterableCartesian3FromTypedArray(\n        typedArray,\n        numComponents,\n      );\n\n    // Compute the positions after they are transformed with the given matrix\n    const transformedPositions = ModelImageryMapping.transformCartesians3(\n      positions,\n      primitivePositionTransform,\n    );\n\n    // Compute the cartographic positions for the given ellipsoid\n    const cartographicPositions = ModelImageryMapping.transformToCartographic(\n      transformedPositions,\n      ellipsoid,\n    );\n    return cartographicPositions;\n  }\n\n  /**\n   * Creates an iterable over `Cartesian3` objects from the given\n   * typed array.\n   *\n   * The resulting iterable will always return the same `Cartesian3`\n   * object. Clients should not store and modify this object.\n   *\n   * @param {TypedArray} typedArray The typed array\n   * @param {number} stride The stride between to consecutive\n   * `Cartesian3` elements in the given array. Must be at least 3.\n   * @returns {Iterable<Cartesian3>} The iterable\n   */\n  static createIterableCartesian3FromTypedArray(typedArray, stride) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"typedArray\", typedArray);\n    Check.typeOf.number.greaterThanOrEquals(\"stride\", stride, 3);\n    //>>includeEnd('debug');\n\n    const cartesian = new Cartesian3();\n    const numElements = typedArray.length / stride;\n    const result = {\n      [Symbol.iterator]: function* () {\n        for (let i = 0; i < numElements; i++) {\n          cartesian.x = typedArray[i * stride + 0];\n          cartesian.y = typedArray[i * stride + 1];\n          cartesian.z = typedArray[i * stride + 2];\n          yield cartesian;\n        }\n      },\n    };\n    return result;\n  }\n\n  /**\n   * Creates a new iterable that applies the given mapper to the given iterable.\n   *\n   * @param {Iterable} iterable The input iterable\n   * @param {Function} mapper The mapper\n   * @returns {Iterable} The mapped iterable\n   */\n  static map(iterable, mapper) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"iterable\", iterable);\n    Check.defined(\"mapper\", mapper);\n    //>>includeEnd('debug');\n\n    const result = {\n      [Symbol.iterator]: function* () {\n        for (const element of iterable) {\n          yield mapper(element);\n        }\n      },\n    };\n    return result;\n  }\n\n  /**\n   * Computes the bounding rectangle of the given cartographic positions,\n   * stores it in the given result, and returns it.\n   *\n   * If the given result is `undefined`, a new rectangle will be created\n   * and returned.\n   *\n   * @param {Iterable<Cartographic>} cartographicPositions The cartographics\n   * @param {Rectangle} [result] The result\n   * @returns {Rectangle} The result\n   */\n  static computeCartographicBoundingRectangle(cartographicPositions, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"cartographicPositions\", cartographicPositions);\n    //>>includeEnd('debug');\n\n    if (!defined(result)) {\n      result = new Rectangle();\n    }\n    // One could store these directly in the result, but that would\n    // violate the constraint of the PI-related ranges..\n    let north = Number.NEGATIVE_INFINITY;\n    let south = Number.POSITIVE_INFINITY;\n    let east = Number.NEGATIVE_INFINITY;\n    let west = Number.POSITIVE_INFINITY;\n    for (const cartographicPosition of cartographicPositions) {\n      north = Math.max(north, cartographicPosition.latitude);\n      south = Math.min(south, cartographicPosition.latitude);\n      east = Math.max(east, cartographicPosition.longitude);\n      west = Math.min(west, cartographicPosition.longitude);\n    }\n    result.north = north;\n    result.south = south;\n    result.east = east;\n    result.west = west;\n    return result;\n  }\n\n  /**\n   * Creates a new iterable that provides `Cartesian3` objects that\n   * are created by transforming the `Cartesian3` objects of the\n   * given iterable with the given matrix.\n   *\n   * The resulting iterable will always return the same `Cartesian3`\n   * object. Clients should not store and modify this object.\n   *\n   * @param {Iterable<Cartesian3>} positions The positions\n   * @param {Matrix4} matrix The matrix\n   * @returns {Iterable<Cartesian3>} The transformed cartesians\n   */\n  static transformCartesians3(positions, matrix) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"positions\", positions);\n    Check.defined(\"matrix\", matrix);\n    //>>includeEnd('debug');\n\n    const transformedPosition = new Cartesian3();\n    const transformedPositions = ModelImageryMapping.map(positions, (p) => {\n      Matrix4.multiplyByPoint(matrix, p, transformedPosition);\n      return transformedPosition;\n    });\n    return transformedPositions;\n  }\n\n  /**\n   * Creates a new iterable that provides `Cartographic` objects that\n   * are created by converting the given `Cartesian3` objects to\n   * cartographics, based on the given ellipsoid.\n   *\n   * The resulting iterable will always return the same `Cartographic`\n   * object. Clients should not store and modify this object.\n   *\n   * @param {Iterable<Cartesian3>} positions The positions\n   * @param {Ellipsoid} ellipsoid The ellipsoid\n   * @returns {Iterable<Cartographic>} The cartographic positions\n   */\n  static transformToCartographic(positions, ellipsoid) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"positions\", positions);\n    Check.defined(\"ellipsoid\", ellipsoid);\n    //>>includeEnd('debug');\n\n    const cartographicPosition = new Cartographic();\n    const cartographicPositions = ModelImageryMapping.map(positions, (p) => {\n      // Note: This will not yield valid results for p=(0,0,0).\n      // But there is no sensible cartographic position for\n      // that, so simply accept the unspecified output here.\n      ellipsoid.cartesianToCartographic(p, cartographicPosition);\n      return cartographicPosition;\n    });\n    return cartographicPositions;\n  }\n\n  /**\n   * Creates an iterable over the results of applying the given projection\n   * to the given cartographic positions.\n   *\n   * The resulting iterable will always return the same `Cartesian3`\n   * object. Clients should not store and modify this object.\n   *\n   * @param {Iterable<Cartographic>} cartographicPositions The cartographic\n   * positions\n   * @param {MapProjection} projection The projection to use\n   * @returns {Iterable<Cartesian3>} The projected positions\n   */\n  static createProjectedPositions(cartographicPositions, projection) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"cartographicPositions\", cartographicPositions);\n    Check.defined(\"projection\", projection);\n    //>>includeEnd('debug');\n\n    const projectedPosition = new Cartesian3();\n    const projectedPositions = ModelImageryMapping.map(\n      cartographicPositions,\n      (c) => {\n        projection.project(c, projectedPosition);\n        return projectedPosition;\n      },\n    );\n    return projectedPositions;\n  }\n\n  /**\n   * Computes the texture coordinates for the given positions, relative\n   * to the given bounding rectangle.\n   *\n   * This will make the x/y coordinates of the given cartesians relative\n   * to the given bounding rectangle and clamp them to [0,0]-[1,1].\n   *\n   * NOTE: This could be broken down into\n   * 1. mapping to 2D\n   * 2. relativizing for the bounding recangle\n   * 3. clamping to [0,0]-[1,1]\n   *\n   * @param {Iterable<Cartesian3>} positions The positions\n   * @param {BoundingRectangle} boundingRectangle The rectangle\n   * @returns {Iterable<Cartesian2>} The texture coordinates\n   */\n  static computeTexCoords(positions, boundingRectangle) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"positions\", positions);\n    Check.defined(\"boundingRectangle\", boundingRectangle);\n    //>>includeEnd('debug');\n\n    const texCoord = new Cartesian2();\n    const invSizeX = 1.0 / boundingRectangle.width;\n    const invSizeY = 1.0 / boundingRectangle.height;\n    const texCoords = ModelImageryMapping.map(positions, (p) => {\n      const uRaw = (p.x - boundingRectangle.x) * invSizeX;\n      const vRaw = (p.y - boundingRectangle.y) * invSizeY;\n      const u = Math.min(Math.max(uRaw, 0.0), 1.0);\n      const v = Math.min(Math.max(vRaw, 0.0), 1.0);\n      texCoord.x = u;\n      texCoord.y = v;\n      return texCoord;\n    });\n    return texCoords;\n  }\n\n  /**\n   * Creates a new typed array from the given `Cartesian2` objects.\n   *\n   * @param {number} numElements The number of elements\n   * @param {Iterable<Cartesian2>} elements The elements\n   * @returns {TypedArray} The typed array\n   */\n  static createTypedArrayFromCartesians2(numElements, elements) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number.greaterThanOrEquals(\"numElements\", numElements, 0);\n    Check.defined(\"elements\", elements);\n    //>>includeEnd('debug');\n\n    const typedArray = new Float32Array(numElements * 2);\n    let index = 0;\n    for (const element of elements) {\n      typedArray[index * 2 + 0] = element.x;\n      typedArray[index * 2 + 1] = element.y;\n      index++;\n    }\n    return typedArray;\n  }\n\n  /**\n   * Create a new texture coordinates attribute from the given data.\n   *\n   * This will create an attribute with\n   * - semantic: VertexAttributeSemantic.TEXCOORD\n   * - type: AttributeType.VEC2\n   * - count: texCoordsTypedArray.length / 2\n   * that contains the data from the given typed array.\n   *\n   * @param {TypedArray} texCoordsTypedArray The typed array\n   * @returns {ModelComponents.Attribute} The attribute\n   */\n  static createTexCoordAttribute(texCoordsTypedArray) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"texCoordsTypedArray\", texCoordsTypedArray);\n    //>>includeEnd('debug');\n\n    const texCoordAttribute = {\n      name: \"Imagery Texture Coordinates\",\n      semantic: VertexAttributeSemantic.TEXCOORD,\n      setIndex: 0,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC2,\n      normalized: false,\n      count: texCoordsTypedArray.length / 2,\n      min: undefined,\n      max: undefined,\n      constant: new Cartesian2(0, 0),\n      quantization: undefined,\n      typedArray: texCoordsTypedArray,\n      byteOffset: 0,\n      byteStride: undefined,\n    };\n    return texCoordAttribute;\n  }\n}\nexport default ModelImageryMapping;\n","import Frozen from \"../../Core/Frozen.js\";\nimport LightingModel from \"./LightingModel.js\";\n\n/**\n * Options for configuring the {@link LightingPipelineStage}\n *\n * @param {object} options An object containing the following options\n * @param {LightingModel} [options.lightingModel=LightingModel.UNLIT] The lighting model to use\n *\n * @alias ModelLightingOptions\n * @constructor\n *\n * @private\n */\nfunction ModelLightingOptions(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The lighting model to use, such as UNLIT or PBR. This is determined by\n   * the primitive's material.\n   *\n   * @type {LightingModel}\n   *\n   * @private\n   */\n  this.lightingModel = options.lightingModel ?? LightingModel.UNLIT;\n}\n\nexport default ModelLightingOptions;\n","import Matrix4 from \"../../Core/Matrix4.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport SceneMode from \"../SceneMode.js\";\n\n/**\n * The model matrix update stage is responsible for updating the model matrices and bounding volumes of the draw commands.\n *\n * @namespace ModelMatrixUpdateStage\n *\n * @private\n */\nconst ModelMatrixUpdateStage = {};\nModelMatrixUpdateStage.name = \"ModelMatrixUpdateStage\"; // Helps with debugging\n\n/**\n * Processes a runtime node. This modifies the following parts of the scene graph and draw commands:\n * <ul>\n *  <li>updates the transforms the children of any nodes with a dirty transform</li>\n *  <li>updates the model matrix of each draw command in each primitive of the the dirty nodes and their children</li>\n *  <li>updates the bounding volume of each draw command in each primitive of the the dirty nodes and their children</li>\n * </ul>\n *\n * @param {ModelRuntimeNode} runtimeNode\n * @param {ModelSceneGraph} sceneGraph\n * @param {FrameState} frameState\n *\n * @private\n */\nModelMatrixUpdateStage.update = function (runtimeNode, sceneGraph, frameState) {\n  // Skip the update stage if the model is being projected to 2D\n  const use2D = frameState.mode !== SceneMode.SCENE3D;\n  if (use2D && sceneGraph._model._projectTo2D) {\n    return;\n  }\n\n  if (runtimeNode._transformDirty) {\n    const modelMatrix = use2D\n      ? sceneGraph._computedModelMatrix2D\n      : sceneGraph._computedModelMatrix;\n\n    updateRuntimeNode(\n      runtimeNode,\n      sceneGraph,\n      modelMatrix,\n      runtimeNode.transformToRoot,\n    );\n    runtimeNode._transformDirty = false;\n  }\n};\n\n/**\n * Update the modelMatrix and cullFrace of the given draw command.\n *\n * @private\n */\nfunction updateDrawCommand(drawCommand, modelMatrix, transformToRoot) {\n  drawCommand.modelMatrix = Matrix4.multiplyTransformation(\n    modelMatrix,\n    transformToRoot,\n    drawCommand.modelMatrix,\n  );\n  drawCommand.cullFace = ModelUtility.getCullFace(\n    drawCommand.modelMatrix,\n    drawCommand.primitiveType,\n  );\n}\n\n/**\n * Recursively update all child runtime nodes and their runtime primitives.\n *\n * @private\n */\nfunction updateRuntimeNode(\n  runtimeNode,\n  sceneGraph,\n  modelMatrix,\n  transformToRoot,\n) {\n  let i;\n\n  // Apply the current node's transform to the end of the chain\n  transformToRoot = Matrix4.multiplyTransformation(\n    transformToRoot,\n    runtimeNode.transform,\n    new Matrix4(),\n  );\n\n  runtimeNode.updateComputedTransform();\n\n  const primitivesLength = runtimeNode.runtimePrimitives.length;\n  for (i = 0; i < primitivesLength; i++) {\n    const runtimePrimitive = runtimeNode.runtimePrimitives[i];\n    updateDrawCommand(\n      runtimePrimitive.drawCommand,\n      modelMatrix,\n      transformToRoot,\n    );\n  }\n\n  const childrenLength = runtimeNode.children.length;\n  for (i = 0; i < childrenLength; i++) {\n    const childRuntimeNode = sceneGraph._runtimeNodes[runtimeNode.children[i]];\n\n    // Update transformToRoot to accommodate changes in the transforms of this node and its ancestors\n    childRuntimeNode._transformToRoot = Matrix4.clone(\n      transformToRoot,\n      childRuntimeNode._transformToRoot,\n    );\n\n    updateRuntimeNode(\n      childRuntimeNode,\n      sceneGraph,\n      modelMatrix,\n      transformToRoot,\n    );\n    childRuntimeNode._transformDirty = false;\n  }\n}\n\nexport default ModelMatrixUpdateStage;\n","import Check from \"../../Core/Check.js\";\nimport defined from \"../../Core/defined.js\";\n\n/**\n * <div class=\"notice\">\n * Use {@link Model#getNode} to get a node from a loaded model. Do not call the constructor directly.\n * </div>\n *\n * A model node with a modifiable transform to allow users to define their\n * own animations. While a model's asset can contain animations that target\n * a node's transform, this class allows users to change a node's transform\n * externally. In this way, animation can be driven by another source, not\n * just by the model's asset.\n *\n * @alias ModelNode\n * @internalConstructor\n * @class\n *\n * @example\n * const node = model.getNode(\"Hand\");\n * node.matrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(5.0, 1.0, 1.0), node.matrix);\n *\n * @see Model#getNode\n */\nfunction ModelNode(model, runtimeNode) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"model\", model);\n  Check.typeOf.object(\"runtimeNode\", runtimeNode);\n  //>>includeEnd('debug');\n\n  this._model = model;\n  this._runtimeNode = runtimeNode;\n}\n\nObject.defineProperties(ModelNode.prototype, {\n  /**\n   * The value of the <code>name</code> property of this node.\n   *\n   * @memberof ModelNode.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._runtimeNode._name;\n    },\n  },\n\n  /**\n   * The index of the node in the glTF.\n   *\n   * @memberof ModelNode.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._runtimeNode._id;\n    },\n  },\n\n  /**\n   * Determines if this node and its children will be shown.\n   *\n   * @memberof ModelNode.prototype\n   * @type {boolean}\n   *\n   * @default true\n   */\n  show: {\n    get: function () {\n      return this._runtimeNode.show;\n    },\n    set: function (value) {\n      this._runtimeNode.show = value;\n    },\n  },\n\n  /**\n   * The node's 4x4 matrix transform from its local coordinates to\n   * its parent's. Setting the matrix to undefined will restore the\n   * node's original transform, and allow the node to be animated by\n   * any animations in the model again.\n   * <p>\n   * For changes to take effect, this property must be assigned to;\n   * setting individual elements of the matrix will not work.\n   * </p>\n   *\n   * @memberof ModelNode.prototype\n   * @type {Matrix4}\n   */\n  matrix: {\n    get: function () {\n      return this._runtimeNode.transform;\n    },\n    set: function (value) {\n      if (defined(value)) {\n        this._runtimeNode.transform = value;\n        this._runtimeNode.userAnimated = true;\n        this._model._userAnimationDirty = true;\n      } else {\n        this._runtimeNode.transform = this.originalMatrix;\n        this._runtimeNode.userAnimated = false;\n      }\n    },\n  },\n\n  /**\n   * Gets the node's original 4x4 matrix transform from its local\n   * coordinates to its parent's, without any node transformations\n   * or articulations applied.\n   *\n   * @memberof ModelNode.prototype\n   * @type {Matrix4}\n   */\n  originalMatrix: {\n    get: function () {\n      return this._runtimeNode.originalTransform;\n    },\n  },\n});\n\nexport default ModelNode;\n","import defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Check from \"../../Core/Check.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\n\nimport ImageryState from \"../ImageryState.js\";\nimport ImageryCoverage from \"./ImageryCoverage.js\";\nimport ModelImageryMapping from \"./ModelImageryMapping.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport MappedPositions from \"./MappedPositions.js\";\n\nimport Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\n\n/**\n * A class managing the draping of imagery on a single model primitive.\n *\n * The <code>ModelImagery</code> class creates one instance of this\n * class for each primitive that appears in the model.\n *\n * It is responsible for computing\n * - the mapped (cartographic) positions of the primitive\n * - the imagery tiles that are covered by these mapped positions\n * - the texture coordinates (attributes) that correspond to these mapped positions\n *\n * @private\n */\nclass ModelPrimitiveImagery {\n  /**\n   * Creates a new instance\n   *\n   * @param {Model} model The model\n   * @param {ModelRuntimeNode} runtimeNode The node that the primitive is attached to\n   * @param {ModelRuntimePrimitive} runtimePrimitive The primitive\n   * @throws {DeveloperError} If any argument is not defined\n   */\n  constructor(model, runtimeNode, runtimePrimitive) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"model\", model);\n    Check.defined(\"runtimeNode\", runtimeNode);\n    Check.defined(\"runtimePrimitive\", runtimePrimitive);\n    //>>includeEnd('debug');\n\n    /**\n     * The model that this instance was created for.\n     *\n     * @type {Model}\n     * @readonly\n     * @private\n     */\n    this._model = model;\n\n    /**\n     * The node that the primitive is attached to\n     *\n     * @type {ModelRuntimeNode}\n     * @readonly\n     * @private\n     */\n    this._runtimeNode = runtimeNode;\n\n    /**\n     * The primitive that this instance was created for.\n     *\n     * @type {ModelRuntimePrimitive}\n     * @readonly\n     * @private\n     */\n    this._runtimePrimitive = runtimePrimitive;\n\n    /**\n     * The <code>MappedPositions</code> objects, one for each ellipsoid\n     * of one of the imagery layers\n     *\n     * These objects are just plain structures that summarize the\n     * cartographic positions of the primitive for one specific\n     * ellipsoid\n     *\n     * @type {MappedPositions[]|undefined}\n     * @private\n     */\n    this._mappedPositionsPerEllipsoid = undefined;\n\n    /**\n     * The last <code>model.modelMatrix</code> for which the mapped\n     * positions have been computed.\n     *\n     * This is used for detecting changes in the model matrix that\n     * make it necessary to re-compute the mapped positions.\n     *\n     * @type {Matrix4}\n     * @readonly\n     * @private\n     */\n    this._mappedPositionsModelMatrix = new Matrix4();\n\n    /**\n     * The value that the <code>Cesium3DTileset.imageryLayersModificationCounter</code>\n     * had during the last update call. This is used for triggering updates when the\n     * imagery layer collection in the tileset changes.\n     */\n    this._lastImageryLayersModificationCounter = 0;\n\n    /**\n     * The texture coordinate attributes, one for each projection.\n     *\n     * This contains one <code>ModelComponents.Attribute</code> for each\n     * unique projection that is used in the imagery layers. These\n     * texture coordinate attributes are computed based on the mapped\n     * positions for the respective ellipsoid of that projection.\n     */\n    this._imageryTexCoordAttributesPerProjection = undefined;\n\n    /**\n     * The current imagery layers.\n     *\n     * This is initialized when the _coveragesPerLayer are computed,\n     * and tracked to that the reference counters of the imageries\n     * can be decreased when the coverages per layer are deleted.\n     *\n     * @type {ImageryLayer[]|undefined}\n     * @private\n     */\n    this._currentImageryLayers = undefined;\n\n    /**\n     * Information about the imagery tiles that are covered by the positions\n     * of the primitive.\n     *\n     * This is computed in the <code>update</code> function, based on the\n     * mapped positions of the primitive. After this computation,\n     * <code>_coveragesPerLayer[layerIndex]</code> is an array that contains\n     * the <code>ImageryCoverage</code> objects that describe the imagery\n     * tiles that are covered, including their texture coordinate rectangle.\n     *\n     * @type {ImageryCoverage[][]|undefined}\n     * @private\n     */\n    this._coveragesPerLayer = undefined;\n\n    /**\n     * A flag indicating whether all imagery objects that are covered\n     * are \"ready\".\n     *\n     * This is initially <code>false</code>. During the calls to the\n     * <code>update</code> function (which are triggered from the\n     * <code>Model.update</code> function, each frame), the\n     * <code>_updateImageries</code> function will be called, and\n     * process the imagery tiles, until all them them are in a\n     * state like <code>ImageryState.READY</code>, at which point\n     * this flag is set to <code>true</code>.\n     *\n     * @type {boolean}\n     * @private\n     */\n    this._allImageriesReady = false;\n  }\n\n  /**\n   * Returns the <code>ImageryCoverage</code> array that has been\n   * computed for the given imagery layer.\n   *\n   * This assumes that the given imagery layer is part of the\n   * imagery layer collection of the model, and that this\n   * model primitive imagery is \"ready\", meaning that the\n   * coverages have already been computed.\n   *\n   * Clients may <b>not</b> modify the returned array or any\n   * of its objects!\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @returns {ImageryCoverage[]} The coverage information\n   */\n  coveragesForImageryLayer(imageryLayer) {\n    const model = this._model;\n    const imageryLayers = model.imageryLayers;\n    const index = imageryLayers.indexOf(imageryLayer);\n    if (index === -1) {\n      throw new DeveloperError(\"Imagery layer is not part of the model\");\n    }\n    const coveragesPerLayer = this._coveragesPerLayer;\n    if (!defined(coveragesPerLayer)) {\n      throw new DeveloperError(\n        `The coveragesPerLayer have not been computed yet`,\n      );\n    }\n    return coveragesPerLayer[index];\n  }\n\n  /**\n   * Update the state of this instance.\n   *\n   * This is called as part of <code>ModelImagery.update</code>, which in\n   * turn is part of the <code>Model.update</code> that is called in each\n   * frame.\n   *\n   * This will perform the computations that are required to establish\n   * the mapping between the imagery and the primitive. It will...\n   * <ul>\n   *   <li>\n   *     Compute the <code>MappedPositions</code> of the primitive,\n   *     one instance for each ellipsoid\n   *   </li>\n   *   <li>\n   *     Compute the \"coverages per layer\", containing the information\n   *     about which parts of the respective imagery layer are covered\n   *     by the mapped positions\n   *   </li>\n   *   <li>\n   *     Compute the texture coordinate attributes for the imagery, one\n   *     for each projection, and store them as the\n   *     <code>_imageryTexCoordAttributesPerProjection</code>\n   *   </li>\n   *   <li>\n   *     Update the imageries (i.e. processing their state machine by\n   *     calling <code>Imagery.processStateMachine</code>) until they\n   *     are in the <code>ImageryState.READY</code> state\n   *   </li>\n   * </ul>\n   *\n   * @param {FrameState} frameState The frame state\n   */\n  update(frameState) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"frameState\", frameState);\n    //>>includeEnd('debug');\n\n    // If the imagery layers have been modified since the last call\n    // to this function, then re-build everything\n    const model = this._model;\n    const content = model.content;\n    const tileset = content.tileset;\n    const modificationCounter = tileset.imageryLayersModificationCounter;\n    if (this._lastImageryLayersModificationCounter !== modificationCounter) {\n      delete this._mappedPositionsPerEllipsoid;\n      this._lastImageryLayersModificationCounter = modificationCounter;\n    }\n\n    if (this._mappedPositionsNeedUpdate) {\n      model.resetDrawCommands();\n      this._mappedPositionsPerEllipsoid =\n        this._computeMappedPositionsPerEllipsoid();\n      this._deleteCoveragesPerLayer();\n      this._destroyImageryTexCoordAttributes();\n    }\n\n    if (!defined(this._imageryTexCoordAttributesPerProjection)) {\n      this._imageryTexCoordAttributesPerProjection =\n        this._computeImageryTexCoordsAttributesPerProjection();\n      this._uploadImageryTexCoordAttributes(frameState.context);\n    }\n\n    if (!defined(this._coveragesPerLayer)) {\n      this._computeCoveragesPerLayer();\n      this._allImageriesReady = false;\n    }\n    if (!this._allImageriesReady) {\n      this._updateImageries(frameState);\n    }\n  }\n\n  /**\n   * Delete the <code>_coveragesPerLayer</code> if they are defined.\n   *\n   * This will call <code>deleteCoverages</code> for each set of coverages,\n   * and eventually delete the <code>_coveragesPerLayer</code>.\n   *\n   * This will cause the reference counters of the imageries to be\n   * decreased.\n   */\n  _deleteCoveragesPerLayer() {\n    const coveragesPerLayer = this._coveragesPerLayer;\n    if (!defined(coveragesPerLayer)) {\n      return;\n    }\n    const imageryLayers = this._currentImageryLayers;\n    const length = coveragesPerLayer.length;\n    for (let i = 0; i < length; i++) {\n      const imageryLayer = imageryLayers[i];\n      const coverages = coveragesPerLayer[i];\n      this._deleteCoverages(imageryLayer, coverages);\n    }\n    delete this._currentImageryLayers;\n    delete this._coveragesPerLayer;\n  }\n\n  /**\n   * Delete the given imagery coverage objects for the given imagery\n   * layer, meaning that it will cause the reference counters of the\n   * imageries to be decreased.\n   *\n   * If the imagery layer already has been destroyed, then nothing\n   * will be done.\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @param {ImageryCoverage[]} coverages The coverages\n   */\n  _deleteCoverages(imageryLayer, coverages) {\n    if (imageryLayer.isDestroyed()) {\n      return;\n    }\n    const length = coverages.length;\n    for (let i = 0; i < length; i++) {\n      const coverage = coverages[i];\n      const imagery = coverage.imagery;\n      imagery.releaseReference();\n    }\n  }\n\n  /**\n   * Create the GPU buffers for the typed arrays that are contained\n   * in the <code>_imageryTexCoordAttributesPerProjection</code>\n   *\n   * @param {Context} context The GL context\n   */\n  _uploadImageryTexCoordAttributes(context) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"context\", context);\n    //>>includeEnd('debug');\n\n    const attributes = this._imageryTexCoordAttributesPerProjection;\n    if (!defined(attributes)) {\n      return;\n    }\n    const n = attributes.length;\n    for (let i = 0; i < n; i++) {\n      const attribute = attributes[i];\n\n      // Allocate the GL resources for the new attribute\n      const imageryTexCoordBuffer = Buffer.createVertexBuffer({\n        context: context,\n        typedArray: attribute.typedArray,\n        usage: BufferUsage.STATIC_DRAW,\n      });\n\n      // TODO_DRAPING Review this. Probably, some cleanup\n      // has to happen somewhere else after setting this.\n      // Check that the call to \"destroy\" in\n      // _destroyImageryTexCoordAttributes is the right\n      // thing to do here.\n      imageryTexCoordBuffer.vertexArrayDestroyable = false;\n\n      attribute.buffer = imageryTexCoordBuffer;\n    }\n  }\n\n  /**\n   * Destroy the <code>_imageryTexCoordAttributesPerProjection</code>\n   * array.\n   *\n   * This is called for cleaning up the allocated GPU resources, before\n   * they are supposed to be re-computed with\n   * <code>_computeImageryTexCoordsAttributesPerProjection</code>\n   */\n  _destroyImageryTexCoordAttributes() {\n    const attributes = this._imageryTexCoordAttributesPerProjection;\n    if (!defined(attributes)) {\n      return;\n    }\n    const n = attributes.length;\n    for (let i = 0; i < n; i++) {\n      const attribute = attributes[i];\n      if (defined(attribute)) {\n        if (defined(attribute.buffer)) {\n          if (!attribute.buffer.isDestroyed()) {\n            attribute.buffer.destroy();\n          }\n        }\n        attributes[i] = undefined;\n      }\n    }\n    delete this._imageryTexCoordAttributesPerProjection;\n  }\n\n  /**\n   * Returns whether the <code>MappedPositions</code> have to be\n   * re-computed with <code>_computeMappedPositionsPerEllipsoid</code>.\n   *\n   * This is <code>true</code> when the positions have not yet been\n   * computed, or when the <code>modelMatrix</code> of the model\n   * changed since the previous call.\n   *\n   * @returns {boolean} Whether the mapped positions need an update\n   * @private\n   */\n  get _mappedPositionsNeedUpdate() {\n    if (!defined(this._mappedPositionsPerEllipsoid)) {\n      return true;\n    }\n    const model = this._model;\n    const lastModelMatrix = this._mappedPositionsModelMatrix;\n    if (!Matrix4.equals(model.modelMatrix, lastModelMatrix)) {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Computes the mapped positions of the primitive, one for each ellipsoid.\n   *\n   * This computes the <i>unique</i> ellipsoids that appear in the imagery\n   * layers of the model, and creates one <code>MappedPositions</code>\n   * object for each of them.\n   *\n   * The respective <code>MappedPositions</code> objects will contain\n   * the cartographic positions that are computed from the positions\n   * of the primitive. These will serve as the basis for computing the\n   * part of the imagery that is covered by the primitive.\n   *\n   * These mapped positions depend on the current <code>modelMatrix</code>\n   * of the model. So they have to be re-computed when the model matrix\n   * changes.\n   *\n   * @returns {MappedPositions[]} The mapped positions\n   * @private\n   */\n  _computeMappedPositionsPerEllipsoid() {\n    const model = this._model;\n    const runtimeNode = this._runtimeNode;\n    const runtimePrimitive = this._runtimePrimitive;\n\n    const primitivePositionAttribute =\n      ModelPrimitiveImagery._obtainPrimitivePositionAttribute(\n        runtimePrimitive.primitive,\n      );\n    const numPositions = primitivePositionAttribute.count;\n\n    const primitivePositionTransform =\n      ModelPrimitiveImagery._computePrimitivePositionTransform(\n        model,\n        runtimeNode,\n        undefined,\n      );\n\n    const mappedPositionsPerEllipsoid = [];\n    const ellipsoids = ModelPrimitiveImagery._computeUniqueEllipsoids(\n      model.imageryLayers,\n    );\n\n    const length = ellipsoids.length;\n    for (let i = 0; i < length; i++) {\n      const ellipsoid = ellipsoids[i];\n      const cartographicPositions =\n        ModelImageryMapping.createCartographicPositions(\n          primitivePositionAttribute,\n          primitivePositionTransform,\n          ellipsoid,\n        );\n      const cartographicBoundingRectangle =\n        ModelImageryMapping.computeCartographicBoundingRectangle(\n          cartographicPositions,\n        );\n\n      const mappedPositions = new MappedPositions(\n        cartographicPositions,\n        numPositions,\n        cartographicBoundingRectangle,\n        ellipsoid,\n      );\n      mappedPositionsPerEllipsoid.push(mappedPositions);\n    }\n    Matrix4.clone(model.modelMatrix, this._mappedPositionsModelMatrix);\n    return mappedPositionsPerEllipsoid;\n  }\n\n  /**\n   * Computes an array containing the <i>unique</i> ellipsoids that\n   * appear in the imagery layers of the given collection.\n   *\n   * @param {ImageryLayerCollection} imageryLayers\n   * @returns {Ellipsoid[]} The ellipsoids\n   * @private\n   */\n  static _computeUniqueEllipsoids(imageryLayers) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"imageryLayers\", imageryLayers);\n    //>>includeEnd('debug');\n\n    const ellipsoidsSet = new Set();\n    const length = imageryLayers.length;\n    for (let i = 0; i < length; i++) {\n      const imageryLayer = imageryLayers.get(i);\n      const ellipsoid = ModelPrimitiveImagery._getEllipsoid(imageryLayer);\n      ellipsoidsSet.add(ellipsoid);\n    }\n    return [...ellipsoidsSet];\n  }\n\n  /**\n   * Computes one coordinate attribute for each unique projection\n   * that is used in the imagery layers.\n   *\n   * This is taking the mapped positions, projecting them with\n   * the respective projection, and creating a texture coordinate\n   * attribute that describes the texture coordinates of these\n   * positions, relative to the cartographic bounding rectangle\n   * of the mapped positions.\n   *\n   * @returns {ModelComponents.Attribute[]} The attributes\n   */\n  _computeImageryTexCoordsAttributesPerProjection() {\n    const model = this._model;\n    const imageryLayers = model.imageryLayers;\n\n    // Compute the arrays containing ALL projections and the array\n    // containing the UNIQUE projections from the imagery layers.\n    // Texture coordinate attributes only have to be created once\n    // for each projection.\n    const allProjections =\n      ModelPrimitiveImagery._extractProjections(imageryLayers);\n    const uniqueProjections = [...new Set(allProjections)];\n\n    // Create one texture coordinate attribute for each distinct\n    // projection that is used in the imagery layers\n    const attributes = this._createImageryTexCoordAttributes(uniqueProjections);\n    return attributes;\n  }\n\n  /**\n   * Computes an array containing the projections that are used in\n   * the given imagery layers.\n   *\n   * (Note that this array may contain duplicates)\n   *\n   * @param {ImageryLayerCollection} imageryLayers The imagery layers\n   * @returns {MapProjection[]} The projections\n   * @private\n   */\n  static _extractProjections(imageryLayers) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"imageryLayers\", imageryLayers);\n    //>>includeEnd('debug');\n\n    const projections = [];\n    const length = imageryLayers.length;\n    for (let i = 0; i < length; i++) {\n      const imageryLayer = imageryLayers.get(i);\n      const projection = ModelPrimitiveImagery._getProjection(imageryLayer);\n      projections.push(projection);\n    }\n    return projections;\n  }\n\n  /**\n   * Returns the projection of the given imagery layer.\n   *\n   * This only exists to hide a train wreck\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @returns {MapProjection} The projection\n   * @private\n   */\n  static _getProjection(imageryLayer) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"imageryLayer\", imageryLayer);\n    //>>includeEnd('debug');\n    const projection = imageryLayer.imageryProvider.tilingScheme.projection;\n    return projection;\n  }\n\n  /**\n   * Create texture coordinates, one for each projection.\n   *\n   * This will create a texture coordinate attribute for each of the given projections,\n   * using <code>ModelImageryMapping.createTextureCoordinatesAttributeForMappedPositions</code>,\n   *\n   * (This means that the given projections should indeed be unique,\n   * i.e. contain no duplicates)\n   *\n   * @param {MapProjection[]} uniqueProjections The projections\n   * @returns {ModelComponents.Attribute[]} The attributes\n   */\n  _createImageryTexCoordAttributes(uniqueProjections) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"uniqueProjections\", uniqueProjections);\n    //>>includeEnd('debug');\n\n    const imageryTexCoordAttributePerUniqueProjection = [];\n    const length = uniqueProjections.length;\n    for (let i = 0; i < length; i++) {\n      // Obtain the mapped positions for the ellipsoid that is used\n      // in the projection (i.e. the cartographic positions of the\n      // primitive, for the respective ellipsoid)\n      const projection = uniqueProjections[i];\n      const ellipsoid = projection.ellipsoid;\n      const mappedPositions = this.mappedPositionsForEllipsoid(ellipsoid);\n\n      // Create the actual attribute\n      const imageryTexCoordAttribute =\n        ModelImageryMapping.createTextureCoordinatesAttributeForMappedPositions(\n          mappedPositions,\n          projection,\n        );\n      imageryTexCoordAttributePerUniqueProjection.push(\n        imageryTexCoordAttribute,\n      );\n    }\n    return imageryTexCoordAttributePerUniqueProjection;\n  }\n\n  /**\n   * Compute the coverage information for the primitive, based on the\n   * imagery layers that are associated with the model.\n   *\n   * This updates the <code>_coveragesPerLayer[layerIndex]</code>, which\n   * is an array that contains the <code>ImageryCoverage</code> objects that\n   * describe the imagery tiles that are covered by the primitive, including\n   * their texture coordinate rectangle.\n   *\n   * This has to be called after the mapped positions for the primitive\n   * have been computed with <code>_computeMappedPositionsPerEllipsoid</code>.\n   *\n   * @private\n   */\n  _computeCoveragesPerLayer() {\n    const coveragesPerLayer = [];\n    const currentImageryLayers = [];\n\n    const model = this._model;\n    const imageryLayers = model.imageryLayers;\n    const length = imageryLayers.length;\n    for (let i = 0; i < length; i++) {\n      const imageryLayer = imageryLayers.get(i);\n      const coverages = this._computeCoverage(imageryLayer);\n      coveragesPerLayer.push(coverages);\n      currentImageryLayers.push(imageryLayer);\n    }\n\n    this._coveragesPerLayer = coveragesPerLayer;\n    this._currentImageryLayers = currentImageryLayers;\n  }\n\n  /**\n   * Compute the coverage information for the primitive, based on the\n   * given imagery layer.\n   *\n   * This returns an array that contains the <code>ImageryCoverage</code>\n   * objects that describe the imagery tiles that are covered by the\n   * primitive, including their texture coordinate rectangle.\n   *\n   * This has to be called after the mapped positions for the primitive\n   * have been computed with <code>_computeMappedPositionsPerEllipsoid</code>.\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @returns {ImageryCoverage[]} The coverage information\n   * @private\n   */\n  _computeCoverage(imageryLayer) {\n    const mappedPositions = this.mappedPositionsForImageryLayer(imageryLayer);\n    const cartographicBoundingRectangle =\n      mappedPositions.cartographicBoundingRectangle;\n\n    const imageryLevel = this._computeImageryLevel(\n      imageryLayer,\n      cartographicBoundingRectangle,\n    );\n\n    const coverages = ImageryCoverage.createImageryCoverages(\n      cartographicBoundingRectangle,\n      imageryLayer,\n      imageryLevel,\n    );\n    return coverages;\n  }\n\n  /**\n   * Compute a <code>level</code> for accessing the imagery from the given\n   * imagery layer that is suitable for a primitive with the given bounding\n   * rectangle.\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @param {Rectangle} cartographicBoundingRectangle The cartographic\n   * bounding rectangle, as obtained from the MappedPositions for\n   * the given imagery layer\n   * @returns {number} The imagery level\n   */\n  _computeImageryLevel(imageryLayer, cartographicBoundingRectangle) {\n    const imageryProvider = imageryLayer.imageryProvider;\n    const tilingScheme = imageryProvider.tilingScheme;\n    const rectangle = tilingScheme.rectangle;\n\n    // The number of tiles covered by the boundingRectangle (b)\n    // for a certain level, based on the tiling scheme rectangle (r) is\n    // numberOfTilesCovered = b / (r / 2^level)\n    // Solving for \"level\" yields\n    // level = log2( numberOfTilesCovered * r / b)\n\n    // The goal here is to drape approximately (!) one imagery\n    // tile on each primitive. In practice, it may be more\n    // (up to 9 in theory)\n    const desiredNumberOfTilesCovered = 1;\n\n    // Perform the computation of the desired level, based on the\n    // number of tiles that should be covered (by whatever is\n    // larger, the width or the height)\n    let boundingRectangleSize = cartographicBoundingRectangle.width;\n    let rectangleSize = rectangle.width;\n    if (\n      cartographicBoundingRectangle.height > cartographicBoundingRectangle.width\n    ) {\n      boundingRectangleSize = cartographicBoundingRectangle.height;\n      rectangleSize = rectangle.height;\n    }\n    const desiredLevel = Math.log2(\n      (desiredNumberOfTilesCovered * rectangleSize) / boundingRectangleSize,\n    );\n\n    // Clamp the level to a valid range, and an integer value\n    const imageryLevel = ImageryCoverage._clampImageryLevel(\n      imageryProvider,\n      desiredLevel,\n    );\n    return imageryLevel;\n  }\n\n  /**\n   * Update all <code>Imagery</code> objects.\n   *\n   * This is called as part of <code>update</code>, until all required\n   * imagery tiles are \"ready\", as indicated by their <code>state</code>\n   * being <code>ImageryState.READY</code>.\n   *\n   * This is called after it has been determined which imagery tiles are\n   * covered by the primitive (i.e. after the <code>_coveragesPerLayer</code>\n   * have been computed by calling <code>_computeCoverages</code>).\n   *\n   * For each covered imagery tile, this will call\n   * <code>Imagery.processStateMachine</code> until they are either\n   * READY, FAILED, or INVALID.\n   *\n   * Once they all are in one of these final states, it will set the\n   * <code>_allImageriesReady</code> flag to <code>true</code>.\n   *\n   * @param {FrameState} frameState The frame state, to be passed to\n   * <code>imagery.processStateMachine</code>\n   * @private\n   */\n  _updateImageries(frameState) {\n    const model = this._model;\n    const coveragesPerLayer = this._coveragesPerLayer;\n    const length = coveragesPerLayer.length;\n    let allImageriesReady = true;\n    for (let i = 0; i < length; i++) {\n      const coverages = coveragesPerLayer[i];\n      const n = coverages.length;\n      for (let j = 0; j < n; j++) {\n        const coverage = coverages[j];\n        const imagery = coverage.imagery;\n\n        // In the context of loading the imagery for draping\n        // it over the primitive, the imagery counts as \"ready\"\n        // when it is really ready, but also when it failed\n        // or was invalid (otherwise, the primitive would\n        // never turn \"ready\"\n        const countsAsReady =\n          imagery.state === ImageryState.READY ||\n          imagery.state === ImageryState.FAILED ||\n          imagery.state === ImageryState.INVALID;\n        if (!countsAsReady) {\n          allImageriesReady = false;\n          imagery.processStateMachine(frameState, false, false);\n        }\n      }\n    }\n\n    // When the imageries turned ready, reset the draw commands\n    // to trigger a rendering with the updated draw commands\n    // that include the imagery now.\n    if (allImageriesReady) {\n      model.resetDrawCommands();\n    }\n    this._allImageriesReady = allImageriesReady;\n  }\n\n  /**\n   * Returns the <code>MappedPositions</code> object that contains\n   * information about the primitive positions that have been computed\n   * for the given imagery layer.\n   *\n   * This assumes that <code>_computeMappedPositionsPerEllipsoid</code> has\n   * already been called.\n   *\n   * @param {ImageryLayer} imageryLayer The imageryLayer\n   * @returns {MappedPositions} The mapped positions\n   * @throws {DeveloperError} If the mapped positions for the\n   * ellipsoid could not be found.\n   */\n  mappedPositionsForImageryLayer(imageryLayer) {\n    const ellipsoid = ModelPrimitiveImagery._getEllipsoid(imageryLayer);\n    return this.mappedPositionsForEllipsoid(ellipsoid);\n  }\n\n  /**\n   * Returns the <code>MappedPositions</code> object that contains\n   * information about the primitive positions that have been computed\n   * from the given ellipsoid.\n   *\n   * This assumes that <code>_computeMappedPositions</code> has\n   * already been called.\n   *\n   * @param {Ellipsoid} ellipsoid The ellipsoid\n   * @returns {MappedPositions} The mapped positions\n   * @throws {DeveloperError} If the mapped positions for the\n   * given ellipsoid could not be found.\n   */\n  mappedPositionsForEllipsoid(ellipsoid) {\n    const mappedPositionsPerEllipsoid = this._mappedPositionsPerEllipsoid;\n    if (!defined(mappedPositionsPerEllipsoid)) {\n      throw new DeveloperError(\n        `The mappedPositions have not been computed yet`,\n      );\n    }\n\n    const length = mappedPositionsPerEllipsoid.length;\n    for (let i = 0; i < length; i++) {\n      const mappedPositions = mappedPositionsPerEllipsoid[i];\n      if (mappedPositions.ellipsoid === ellipsoid) {\n        return mappedPositions;\n      }\n    }\n    throw new DeveloperError(\n      `Could not find mapped positions for ellipsoid ${ellipsoid}`,\n    );\n  }\n\n  /**\n   * Returns the texture coordinate attributes for the primitive that\n   * are used for draping the imagery.\n   *\n   * This will be available when this object is <code>ready</code>, and\n   * will contain one attribute for each unique projection that appears\n   * in the imagery layers.\n   *\n   * @returns {ModelComponents.Attribute[]} The attributes\n   */\n  imageryTexCoordAttributesPerProjection() {\n    const imageryTexCoordAttributesPerProjection =\n      this._imageryTexCoordAttributesPerProjection;\n    if (!defined(imageryTexCoordAttributesPerProjection)) {\n      throw new DeveloperError(\n        `The imagery texture coordinate attributes have not been computed yet`,\n      );\n    }\n    return this._imageryTexCoordAttributesPerProjection;\n  }\n\n  /**\n   * Returns whether the draping computations are \"ready\".\n   *\n   * This means that the <code>coveragesPerLayer</code> information\n   * has been computed, which describes the set of imagery tiles\n   * that are covered by the primitive, <b>and</b> that all the\n   * covered imagery tiles are in a state that counts as \"ready\"\n   * (i.e. <code>ImageryState.READY</code>, <code>FAILED</code>,\n   * or <code>INVALID</code>).\n   *\n   * @returns {boolean} Whether the draping computations are ready\n   */\n  get ready() {\n    const coveragesPerLayer = this._coveragesPerLayer;\n    if (!defined(coveragesPerLayer)) {\n      return false;\n    }\n    return this._allImageriesReady;\n  }\n\n  /**\n   * Returns whether this object was destroyed.\n   *\n   * If this object was destroyed, calling any function other than\n   * <code>isDestroyed</code> will result in a {@link DeveloperError}.\n   *\n   * @returns {boolean} Whether this object was destroyed\n   */\n  isDestroyed() {\n    return false;\n  }\n\n  /**\n   * Destroys this object and all its resources.\n   */\n  destroy() {\n    if (this.isDestroyed()) {\n      return;\n    }\n    this._deleteCoveragesPerLayer();\n    this._destroyImageryTexCoordAttributes();\n    return destroyObject(this);\n  }\n\n  /**\n   * Compute the transform that apparently has to be applied to\n   * the positions attribute of a primitive, to compute the\n   * actual, final positions in ECEF coordinates.\n   *\n   * This is based on the computation of the bounding\n   * sphere that is done at the end of buildDrawCommands\n   *\n   * @param {Model} model The model\n   * @param {ModelComponents.Node} runtimeNode The runtime node\n   * that the primitive is attached to\n   * @param {Matrix4} [result] The result\n   * @returns {Matrix4} The result\n   * @private\n   */\n  static _computePrimitivePositionTransform(model, runtimeNode, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"model\", model);\n    Check.defined(\"runtimeNode\", runtimeNode);\n    //>>includeEnd('debug');\n\n    if (!defined(result)) {\n      result = new Matrix4();\n    }\n\n    const modelSceneGraph = model.sceneGraph;\n\n    Matrix4.clone(Matrix4.IDENTITY, result);\n    Matrix4.multiply(result, model.modelMatrix, result);\n    Matrix4.multiply(result, modelSceneGraph.components.transform, result);\n    Matrix4.multiply(result, modelSceneGraph.axisCorrectionMatrix, result);\n    Matrix4.multiply(result, runtimeNode.computedTransform, result);\n    return result;\n  }\n\n  /**\n   * Returns the <code>\"POSITION\"</code> attribute from the given primitive.\n   *\n   * The <code>\"POSITION\"</code> attribute is required. If it is not\n   * defined for the given primitive, then a <code>DeveloperError</code>\n   * is thrown.\n   *\n   * @param {ModelComponents.Primitive} primitive The primitive\n   * @returns {ModelComponents.Attribute} The position attribute\n   * @throws {DeveloperError} If there is no position attribute\n   * @private\n   */\n  static _obtainPrimitivePositionAttribute(primitive) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"primitive\", primitive);\n    //>>includeEnd('debug');\n\n    const primitivePositionAttribute = ModelUtility.getAttributeBySemantic(\n      primitive,\n      \"POSITION\",\n    );\n    if (!defined(primitivePositionAttribute)) {\n      throw new DeveloperError(\n        \"The primitive does not have a POSITION attribute\",\n      );\n    }\n    return primitivePositionAttribute;\n  }\n\n  /**\n   * Returns the ellipsoid of the given imagery layer.\n   *\n   * This only exists to hide a train wreck\n   *\n   * @param {ImageryLayer} imageryLayer The imagery layer\n   * @returns {Ellipsoid} The ellipsoid\n   * @private\n   */\n  static _getEllipsoid(imageryLayer) {\n    const ellipsoid =\n      imageryLayer.imageryProvider.tilingScheme.projection.ellipsoid;\n    return ellipsoid;\n  }\n}\n\nexport default ModelPrimitiveImagery;\n","import Check from \"../../Core/Check.js\";\nimport defined from \"../../Core/defined.js\";\nimport Cartesian2 from \"../../Core/Cartesian2.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cartesian4 from \"../../Core/Cartesian4.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport AttributeCompression from \"../../Core/AttributeCompression.js\";\nimport IndexDatatype from \"../../Core/IndexDatatype.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\n\nimport AttributeType from \"../AttributeType.js\";\n\n/**\n * A class for reading the data from a <code>ModelComponents.Attribute</code>.\n *\n * NOTE: Much of the functionality here already exists, scattered in many places.\n * In most cases, the functionality is tailored for \"one case\" (like only handling\n * positions, or only normals, or not considering quantization, or not handling\n * interleaved buffers, ...). In many cases, the functionality is tailored for an\n * 'accessor' (and often, the functions also expect the 'gltf' to be given).\n * Most of what is done here (and in the existing functions) is pretty low-level\n * and generic, though: The functions could often be fed with some (count, type,\n * componentType), and there could be convenience functions that EITHER take these\n * values from an 'accessor' OR from an 'attribute'. The tl;dr: Large parts of\n * this could be \"nicer\", or \"more generic\", and \"better\" along all dimensions\n * of this term. Just give me time...\n *\n * NOTE: The fact that all this has to operate on TypedArray is unfortunate.\n * Most of the subsequent processing could operate on some abstraction of\n * that. The fact that that TypedArrays can be read/written as \"bulk\", and\n * then offer access that is \"as efficient as it can be\" could be a\n * justification, as part of the performance-genericity trade-off\n *\n * NOTE: All this does not properly handle MATn types. There should be SOME\n * abstraction for element- and component-wise access of the data. See\n * https://github.com/javagl/JglTF/blob/84ce6d019fec3b75b6af1649bbe834005b2c620f/jgltf-model/src/main/java/de/javagl/jgltf/model/AbstractAccessorData.java#L149\n *\n * @private\n */\nclass ModelReader {\n  /**\n   * Reads the data of the given atttribute into a typed array.\n   *\n   * This will read the data into a compact, flat array with the data\n   * type corresponding to the data type of the attribute.\n   *\n   * If the attribute is contained in an interleaved buffer, marked as\n   * 'normalized', quantized, or oct-encoded, then it will be deinterleaved,\n   * normalization will be applied, it will be dequantized and oct-decoded\n   * as necessary.\n   *\n   * The result will be THE actual attribute data.\n   *\n   * @param {ModelComponents.Attribute} attribute The attribute\n   * @returns {TypedArray} The attribute data\n   */\n  static readAttributeAsTypedArray(attribute) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"attribute\", attribute);\n    //>>includeEnd('debug');\n\n    // Obtain a compact (non-interleaved) typed array that contains\n    // the components.\n    const compactTypedArray =\n      ModelReader.readAttributeAsRawCompactTypedArray(attribute);\n\n    // If the attribute is not normalized and the data is not quantized\n    // and not normalized, then this can be returned directly\n    const normalized = attribute.normalized;\n    const quantization = attribute.quantization;\n    if (!defined(quantization) && !normalized) {\n      return compactTypedArray;\n    }\n\n    const elementType = attribute.type;\n    const elementCount = attribute.count;\n\n    // If the attribute is normalized, normalize the data from\n    // the typed array\n    let normalizedTypedArray = compactTypedArray;\n    if (normalized) {\n      // Note that although this is called \"dequantize\", it does\n      // not really \"dequantize\" based on the quantization. It only\n      // performs the conversion from the (normalized) integer\n      // component types into floating point.\n      normalizedTypedArray = AttributeCompression.dequantize(\n        compactTypedArray,\n        attribute.componentDatatype,\n        elementType,\n        elementCount,\n      );\n    }\n\n    if (!defined(quantization)) {\n      return normalizedTypedArray;\n    }\n    // Now, this one actually DOES dequantize...\n    const dequantizedTypedArray = ModelReader.dequantize(\n      normalizedTypedArray,\n      elementCount,\n      elementType,\n      quantization,\n    );\n    return dequantizedTypedArray;\n  }\n\n  /**\n   * Read the data of the given attribute into a compact typed array.\n   *\n   * If the attribute is stored as interleaved data, then the result\n   * will be the deinterleaved data. If the data is quantized or\n   * normalized, then the resulting data will be the \"raw\" data,\n   * without applying normalization or dequantization.\n   *\n   * @param {ModelComponents.Attribute} attribute The attribute\n   * @returns {TypedArray} The raw attribute data\n   */\n  static readAttributeAsRawCompactTypedArray(attribute) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"attribute\", attribute);\n    //>>includeEnd('debug');\n\n    const elementType = attribute.type;\n    const elementCount = attribute.count;\n\n    const componentsPerElement =\n      AttributeType.getNumberOfComponents(elementType);\n    const totalComponentCount = elementCount * componentsPerElement;\n\n    // If the data is quantized, use the quantized component type\n    let componentType = attribute.componentDatatype;\n    const quantization = attribute.quantization;\n    if (defined(quantization)) {\n      componentType = quantization.componentDatatype;\n    }\n    const buffer = attribute.buffer;\n\n    // If the byte stride is the default (i.e. the total element size),\n    // then just fetch the whole buffer data into a typed array of the\n    // desired target type, and return it\n    const byteOffset = attribute.byteOffset;\n    const byteStride = attribute.byteStride;\n    const bytesPerComponent = ComponentDatatype.getSizeInBytes(componentType);\n    const defaultByteStride = componentsPerElement * bytesPerComponent;\n    if (!defined(byteStride) || byteStride === defaultByteStride) {\n      const typedArray = ComponentDatatype.createTypedArray(\n        componentType,\n        totalComponentCount,\n      );\n      buffer.getBufferData(typedArray, byteOffset);\n      return typedArray;\n    }\n\n    // Fetch the whole buffer in its raw form, to pick out the\n    // interleaved values.\n    // Note: When ALL attributes have to be fetched from an\n    // interleaved buffer, then this getBufferData call will\n    // be performed multiple times. It would be preferable to\n    // have ONE \"TypedArray[] getThemFrom(buffer)\" call that\n    // returns all of the (interleaved) attributes at once,\n    // but this requires abstractions that we don't have.\n    const fullTypedArray = new Uint8Array(buffer.sizeInBytes);\n    buffer.getBufferData(fullTypedArray);\n\n    // Read the components of each element, and write them into\n    // a typed array in a compact form\n    const compactTypedArray = ComponentDatatype.createTypedArray(\n      componentType,\n      totalComponentCount,\n    );\n    const elementByteStride = byteStride ?? defaultByteStride;\n    const dataView = new DataView(\n      fullTypedArray.buffer,\n      fullTypedArray.byteOffset,\n      fullTypedArray.byteLength,\n    );\n    const components = new Array(componentsPerElement);\n    const componentsReader = ModelReader.createComponentsReader(componentType);\n    for (let i = 0; i < elementCount; ++i) {\n      const elementByteOffset = byteOffset + i * elementByteStride;\n      componentsReader(\n        dataView,\n        elementByteOffset,\n        componentsPerElement,\n        components,\n      );\n      for (let j = 0; j < componentsPerElement; ++j) {\n        compactTypedArray[i * componentsPerElement + j] = components[j];\n      }\n    }\n    return compactTypedArray;\n  }\n\n  /**\n   * Dequantize the data from the given input array, based on the given\n   * quantization information, and return the result.\n   *\n   * This assumes that normalization has already been applied. This means that\n   * when the <code>quantization.normalized</code> flag is <code>true</code>,\n   * then the input is assumed to contain floating point values in the range\n   * [-1, 1].\n   *\n   * @param {TypedArray} quantizedTypedArray The quantized typed array\n   * @param {number} elementCount The number of elements\n   * @param {AttributeType} elementType The element type\n   * @param {ModelComponents.Quantization} quantization The quantization\n   * @returns {TypedArray} The result\n   * @throws DeveloperError When the element type is not SCALAR, VEC2,\n   * VEC3, or VEC4\n   */\n  static dequantize(\n    quantizedTypedArray,\n    elementCount,\n    elementType,\n    quantization,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"quantizedTypedArray\", quantizedTypedArray);\n    Check.typeOf.number.greaterThanOrEquals(\"elementCount\", elementCount, 0);\n    Check.defined(\"elementType\", elementType);\n    Check.defined(\"quantization\", quantization);\n    //>>includeEnd('debug');\n\n    if (quantization.octEncoded) {\n      const dequantizedTypedArray = ModelReader.octDecode(\n        quantizedTypedArray,\n        elementCount,\n        quantization.normalizationRange,\n        undefined,\n      );\n      if (quantization.octEncodedZXY) {\n        ModelReader.convertZxyToXyz(\n          dequantizedTypedArray,\n          dequantizedTypedArray,\n        );\n      }\n      return dequantizedTypedArray;\n    }\n\n    // These could be generalized, if the offset/stepSize were not\n    // CartesianX objects, but arrays...\n    const stepSize = quantization.quantizedVolumeStepSize;\n    const offset = quantization.quantizedVolumeOffset;\n    if (elementType === AttributeType.SCALAR) {\n      return ModelReader.dequantize1D(\n        quantizedTypedArray,\n        elementCount,\n        stepSize,\n        offset,\n        undefined,\n      );\n    }\n    if (elementType === AttributeType.VEC2) {\n      return ModelReader.dequantize2D(\n        quantizedTypedArray,\n        elementCount,\n        stepSize,\n        offset,\n        undefined,\n      );\n    }\n    if (elementType === AttributeType.VEC3) {\n      return ModelReader.dequantize3D(\n        quantizedTypedArray,\n        elementCount,\n        stepSize,\n        offset,\n        undefined,\n      );\n    }\n    if (elementType === AttributeType.VEC4) {\n      return ModelReader.dequantize4D(\n        quantizedTypedArray,\n        elementCount,\n        stepSize,\n        offset,\n        undefined,\n      );\n    }\n    throw new DeveloperError(\n      `Element type for dequantization must be SCALAR, VEC2, VEC3, or VEC4, but is ${elementType}`,\n    );\n  }\n\n  /**\n   * Decode oct-encoded normals from the given input, and write the\n   * result into the given output, allocating and returning a new\n   * array if the result was undefined.\n   *\n   * This will apply the <code>AttributeCompression.octDecodeInRange</code>\n   * function to each three components of the input.\n   *\n   * @param {TypedArray} quantizedTypedArray The input\n   * @param {number} elementCount The number of elements\n   * @param {number} normalizationRange The normalization range\n   * @param {TypedArray} [dequantizedTypedArray] The result\n   * @returns {TypedArray} The result\n   */\n  static octDecode(\n    quantizedTypedArray,\n    elementCount,\n    normalizationRange,\n    dequantizedTypedArray,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"quantizedTypedArray\", quantizedTypedArray);\n    Check.typeOf.number.greaterThanOrEquals(\"elementCount\", elementCount, 0);\n    Check.typeOf.number.greaterThan(\n      \"normalizationRange\",\n      normalizationRange,\n      0,\n    );\n    //>>includeEnd('debug');\n\n    if (!defined(dequantizedTypedArray)) {\n      dequantizedTypedArray = new Float32Array(quantizedTypedArray.length);\n    }\n    const c = new Cartesian3();\n    for (let i = 0; i < elementCount; i++) {\n      Cartesian3.unpack(quantizedTypedArray, i * 3, c);\n      AttributeCompression.octDecodeInRange(c, normalizationRange, c);\n      Cartesian3.pack(dequantizedTypedArray, c, i * 3);\n    }\n    return dequantizedTypedArray;\n  }\n\n  /**\n   * Swizzle all three consecutive elements in the given input array\n   * from (z, x, y) to (x, y, z), and write the result into the\n   * given output array, creating a new array if the given output\n   * array was undefined.\n   *\n   * @param {TypedArray} input The input\n   * @param {number} elementCount The number of elements\n   * @param {TypedArray} [output] The result\n   * @returns {TypedArray} The result\n   */\n  static convertZxyToXyz(input, elementCount, output) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"input\", input);\n    Check.typeOf.number.greaterThanOrEquals(\"elementCount\", elementCount, 0);\n    //>>includeEnd('debug');\n\n    if (!defined(output)) {\n      output = new Float32Array(input.length);\n    }\n    let offset = 0;\n    for (let i = 0; i < elementCount; i++, offset += 3) {\n      const z = input[offset + 0];\n      const x = input[offset + 1];\n      const y = input[offset + 2];\n      output[offset + 0] = x;\n      output[offset + 1] = y;\n      output[offset + 2] = z;\n    }\n    return output;\n  }\n\n  /**\n   * Dequantize the given quantized array, based on the given quantization\n   * information, and write the result into the given output array, creating\n   * the output array if it was undefined.\n   *\n   * This will simply fill the output array with\n   * <code>output[i] = input[i] * stepSize + offset</code>\n   *\n   * @param {TypedArray} quantizedTypedArray The quantized array\n   * @param {number} elementCount The number of elements\n   * @param {number} stepSize The quantization step size\n   * @param {number} offset The quantization offset\n   * @param {TypedArray} [dequantizedTypedArray] The result\n   * @returns {TypedArray} The result\n   */\n  static dequantize1D(\n    quantizedTypedArray,\n    elementCount,\n    stepSize,\n    offset,\n    dequantizedTypedArray,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"quantizedTypedArray\", quantizedTypedArray);\n    Check.typeOf.number.greaterThanOrEquals(\"elementCount\", elementCount, 0);\n    Check.defined(\"stepSize\", stepSize);\n    Check.defined(\"offset\", offset);\n    //>>includeEnd('debug');\n\n    if (!defined(dequantizedTypedArray)) {\n      dequantizedTypedArray = new Float32Array(quantizedTypedArray.length);\n    }\n    for (let i = 0; i < elementCount; i++) {\n      const q = quantizedTypedArray[i];\n      const d = q * stepSize + offset;\n      dequantizedTypedArray[i] = d;\n    }\n    return dequantizedTypedArray;\n  }\n\n  /**\n   * Dequantize the given quantized array, based on the given quantization\n   * information, and write the result into the given output array, creating\n   * the output array if it was undefined.\n   *\n   * This will simply fill the output array with\n   * <code>output[i] = input[i] * stepSize + offset</code>\n   * when interpreting the input and output as arrays of Cartesian2.\n   *\n   * @param {TypedArray} quantizedTypedArray The quantized array\n   * @param {number} elementCount The number of elements\n   * @param {Cartesian2} stepSize The quantization step size\n   * @param {Cartesian2} offset The quantization offset\n   * @param {TypedArray} [dequantizedTypedArray] The result\n   * @returns {TypedArray} The result\n   */\n  static dequantize2D(\n    quantizedTypedArray,\n    elementCount,\n    stepSize,\n    offset,\n    dequantizedTypedArray,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"quantizedTypedArray\", quantizedTypedArray);\n    Check.typeOf.number.greaterThanOrEquals(\"elementCount\", elementCount, 0);\n    Check.defined(\"stepSize\", stepSize);\n    Check.defined(\"offset\", offset);\n    //>>includeEnd('debug');\n\n    if (!defined(dequantizedTypedArray)) {\n      dequantizedTypedArray = new Float32Array(quantizedTypedArray.length);\n    }\n    const c = new Cartesian2();\n    for (let i = 0; i < elementCount; i++) {\n      Cartesian2.unpack(quantizedTypedArray, i * 2, c);\n      Cartesian2.multiplyComponents(c, stepSize, c);\n      Cartesian2.add(c, offset, c);\n      Cartesian2.pack(c, dequantizedTypedArray, i * 2);\n    }\n    return dequantizedTypedArray;\n  }\n\n  /**\n   * Dequantize the given quantized array, based on the given quantization\n   * information, and write the result into the given output array, creating\n   * the output array if it was undefined.\n   *\n   * This will simply fill the output array with\n   * <code>output[i] = input[i] * stepSize + offset</code>\n   * when interpreting the input and output as arrays of Cartesian3.\n   *\n   * @param {TypedArray} quantizedTypedArray The quantized array\n   * @param {number} elementCount The number of elements\n   * @param {Cartesian3} stepSize The quantization step size\n   * @param {Cartesian3} offset The quantization offset\n   * @param {TypedArray} [dequantizedTypedArray] The result\n   * @returns {TypedArray} The result\n   */\n  static dequantize3D(\n    quantizedTypedArray,\n    elementCount,\n    stepSize,\n    offset,\n    dequantizedTypedArray,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"quantizedTypedArray\", quantizedTypedArray);\n    Check.typeOf.number.greaterThanOrEquals(\"elementCount\", elementCount, 0);\n    Check.defined(\"stepSize\", stepSize);\n    Check.defined(\"offset\", offset);\n    //>>includeEnd('debug');\n\n    if (!defined(dequantizedTypedArray)) {\n      dequantizedTypedArray = new Float32Array(quantizedTypedArray.length);\n    }\n    const c = new Cartesian3();\n    for (let i = 0; i < elementCount; i++) {\n      Cartesian3.unpack(quantizedTypedArray, i * 3, c);\n      Cartesian3.multiplyComponents(c, stepSize, c);\n      Cartesian3.add(c, offset, c);\n      Cartesian3.pack(c, dequantizedTypedArray, i * 3);\n    }\n    return dequantizedTypedArray;\n  }\n\n  /**\n   * Dequantize the given quantized array, based on the given quantization\n   * information, and write the result into the given output array, creating\n   * the output array if it was undefined.\n   *\n   * This will simply fill the output array with\n   * <code>output[i] = input[i] * stepSize + offset</code>\n   * when interpreting the input and output as arrays of Cartesian4.\n   *\n   * @param {TypedArray} quantizedTypedArray The quantized array\n   * @param {number} elementCount The number of elements\n   * @param {Cartesian4} stepSize The quantization step size\n   * @param {Cartesian4} offset The quantization offset\n   * @param {TypedArray} [dequantizedTypedArray] The result\n   * @returns {TypedArray} The result\n   */\n  static dequantize4D(\n    quantizedTypedArray,\n    elementCount,\n    stepSize,\n    offset,\n    dequantizedTypedArray,\n  ) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"quantizedTypedArray\", quantizedTypedArray);\n    Check.typeOf.number.greaterThanOrEquals(\"elementCount\", elementCount, 0);\n    Check.defined(\"stepSize\", stepSize);\n    Check.defined(\"offset\", offset);\n    //>>includeEnd('debug');\n\n    if (!defined(dequantizedTypedArray)) {\n      dequantizedTypedArray = new Float32Array(quantizedTypedArray.length);\n    }\n    const c = new Cartesian4();\n    for (let i = 0; i < elementCount; i++) {\n      Cartesian4.unpack(quantizedTypedArray, i * 4, c);\n      Cartesian4.multiplyComponents(c, stepSize, c);\n      Cartesian4.add(c, offset, c);\n      Cartesian4.pack(c, dequantizedTypedArray, i * 4);\n    }\n    return dequantizedTypedArray;\n  }\n\n  /**\n   * Reads and returns a value with the given type\n   * at the given byte offset from the data view, in little-endian\n   * order\n   * @callback ComponentsReaderCallback\n   * @param {DataView} dataView Typed data view into a binary buffer\n   * @param {number} byteOffset The offset, in bytes, from the start of the view to read the data from\n   * @param {number} numberOfComponents The number of components to read\n   * @param {number[]} result The array in which to read the result\n   */\n\n  /**\n   * Creates a function that reads the specified number of components with\n   * the given type from the given data view, in little-endian\n   * order, and writes them into a given result array.\n   *\n   * @param {ComponentDatatype} componentType The component type\n   * @returns {ComponentsReaderCallback} The reader\n   */\n  static createComponentsReader(componentType) {\n    const componentReader = ModelReader.createComponentReader(componentType);\n    const sizeInBytes = ComponentDatatype.getSizeInBytes(componentType);\n    return function (dataView, byteOffset, numberOfComponents, result) {\n      let offset = byteOffset;\n      for (let i = 0; i < numberOfComponents; ++i) {\n        result[i] = componentReader(dataView, offset);\n        offset += sizeInBytes;\n      }\n    };\n  }\n\n  /**\n   * Reads and returns a value with the given type\n   * at the given byte offset from the data view, in little-endian\n   * order\n   * @callback ComponentReaderCallback\n   * @param {DataView} dataView Typed data view into a binary buffer\n   * @param {number} byteOffset The offset, in bytes, from the start of the view to read the data from\n   * @returns {number|BigInt} The value read from the dataView\n   */\n\n  /**\n   * Creates a function that reads and returns a value with the given type\n   * at the given byte offset from the data view, in little-endian\n   * order\n   * @param {ComponentDatatype} componentType The component type\n   * @returns {ComponentReaderCallback} The reader\n   */\n  static createComponentReader(componentType) {\n    switch (componentType) {\n      case ComponentDatatype.BYTE:\n        return function (dataView, byteOffset) {\n          return dataView.getInt8(byteOffset);\n        };\n      case ComponentDatatype.UNSIGNED_BYTE:\n        return function (dataView, byteOffset) {\n          return dataView.getUint8(byteOffset);\n        };\n      case ComponentDatatype.SHORT:\n        return function (dataView, byteOffset) {\n          return dataView.getInt16(byteOffset, true);\n        };\n      case ComponentDatatype.UNSIGNED_SHORT:\n        return function (dataView, byteOffset) {\n          return dataView.getUint16(byteOffset, true);\n        };\n      case ComponentDatatype.INT:\n        return function (dataView, byteOffset) {\n          return dataView.getInt32(byteOffset, true);\n        };\n      case ComponentDatatype.UNSIGNED_INT:\n        return function (dataView, byteOffset) {\n          return dataView.getUint32(byteOffset, true);\n        };\n      case ComponentDatatype.FLOAT:\n        return function (dataView, byteOffset) {\n          return dataView.getFloat32(byteOffset, true);\n        };\n      case ComponentDatatype.DOUBLE:\n        return function (dataView, byteOffset) {\n          return dataView.getFloat64(byteOffset, true);\n        };\n    }\n    throw new DeveloperError(\n      `The componentType must be a valid ComponentDatatype, but is ${componentType}`,\n    );\n  }\n\n  /**\n   * Transform the elements of the given array with the given 4x4 matrix,\n   * interpreting each 3 consecutive elements as a 3D point, and write\n   * the result into the given result array, creating the result array\n   * if it was undefined.\n   *\n   * @param {TypedArray} input The input array\n   * @param {Matrix4} matrix The matrix\n   * @param {TypedArray} [result] The result\n   * @returns {TypedArray} The result\n   */\n  static transform3D(input, matrix, result) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.defined(\"input\", input);\n    Check.defined(\"matrix\", matrix);\n    //>>includeEnd('debug');\n\n    if (!defined(result)) {\n      result = new Float32Array(input.length);\n    }\n    const c = new Cartesian3();\n    const elementCount = input.length / 3;\n    for (let i = 0; i < elementCount; i++) {\n      Cartesian3.unpack(input, i * 3, c);\n      Matrix4.multiplyByPoint(matrix, c, c);\n      Cartesian3.pack(c, result, i * 3);\n    }\n    return result;\n  }\n\n  /**\n   * Read the indices values from the given primitive indices, and\n   * return them as a typed array.\n   *\n   * If the given object already has a <code>typedArray/code> property, then it\n   * is assumed that this contains the proper indices, and they are returned.\n   *\n   * Otherwise, this reads the data from the <code>buffer</code> of the given\n   * primitive indices object, into a typed array with a type that matches the\n   * <code>indexDataType</code>, and returns it.\n   *\n   * Clients may not modify the returned typed array.\n   *\n   * @param {ModelComponents.Indices} primitiveIndices The primitive indices\n   * @returns {TypedArray} The indices values\n   * @throws {DeveloperError} If the <code>indexDataType</code> of the given\n   * object is neither <code>UNSIGNED_BYTE</code>, nor <code>UNSIGNED_SHORT</code>,\n   * nor <code>UNSIGNED_INT</code>\n   */\n  static readIndicesAsTypedArray(primitiveIndices) {\n    const existingIndices = primitiveIndices.typedArray;\n    if (defined(existingIndices)) {\n      return existingIndices;\n    }\n    const indicesBuffer = primitiveIndices.buffer;\n    const indicesCount = primitiveIndices.count;\n    const indexDatatype = primitiveIndices.indexDatatype;\n    const indices = ModelReader.createIndexTypedArray(\n      indexDatatype,\n      indicesCount,\n    );\n    indicesBuffer.getBufferData(indices);\n    return indices;\n  }\n\n  /**\n   * Read the indices values from the given primitive indices object, and return\n   * them as a typed array of triangle vertex indices.\n   *\n   * If the given primitive type is <code>TRIANGLES</code>, then the indices\n   * values will be read from the given object, and returned.\n   *\n   * If the primitive type is <code>TRIANGLE_STRIP</code> or <code>TRIANGLE_FAN</code>,\n   * then the original indices values, will be read, converted into triangle indices\n   * (i.e. their equivalent <code>TRIANGLES</code> representation), and the result\n   * will be returned.\n   *\n   * The type of the returned array will match the <code>indexDataType</code>\n   * of the given object.\n   *\n   * Clients may not modify the returned typed array.\n   *\n   * @param {ModelComponents.Indices} primitiveIndices The primitive indices\n   * @returns {TypedArray} The indices, converted to triangle indices if necessary\n   * @throws {DeveloperError} If the <code>indexDataType</code> of the given\n   * object is neither <code>UNSIGNED_BYTE</code>, nor <code>UNSIGNED_SHORT</code>,\n   * nor <code>UNSIGNED_INT</code>, or the given <code>primitiveType</code>\n   * is neither <code>TRIANGLES</code>, nor <code>TRIANGLE_STRIP</code>,\n   * nor <code>TRIANGLE_FAN</code>\n   */\n  static readIndicesAsTriangleIndicesTypedArray(\n    primitiveIndices,\n    primitiveType,\n  ) {\n    const originalIndices =\n      ModelReader.readIndicesAsTypedArray(primitiveIndices);\n    if (primitiveType === PrimitiveType.TRIANGLES) {\n      return originalIndices;\n    }\n    if (primitiveType === PrimitiveType.TRIANGLE_STRIP) {\n      const triangleIndices =\n        ModelReader.convertTriangleStripToTriangleIndices(originalIndices);\n      return triangleIndices;\n    }\n    if (primitiveType === PrimitiveType.TRIANGLE_FAN) {\n      const triangleIndices =\n        ModelReader.convertTriangleFanToTriangleIndices(originalIndices);\n      return triangleIndices;\n    }\n    throw new DeveloperError(\n      `The primitiveType must be TRIANGLES (${PrimitiveType.TRIANGLES}, ` +\n        `TRIANGLE_STRIP (${PrimitiveType.TRIANGLE_STRIP}, or ` +\n        `TRIANGLE_FAN (${PrimitiveType.TRIANGLE_FAN}, but is ${primitiveType}`,\n    );\n  }\n\n  /**\n   * Converts the given indices from a <code>TRIANGLE_STRIP</code> representation\n   * into a <code>TRIANGLES</code> representation, and returns the result.\n   *\n   * The type of the result will be the same as the type of the input array.\n   *\n   * @param {TypedArray} indices The input indices\n   * @returns {TypedArray} The resulting triangle indices\n   */\n  static convertTriangleStripToTriangleIndices(indices) {\n    const triangleIndices = indices.constructor((indices.length - 2) * 3);\n    for (let i = 0; i < indices.length - 2; i++) {\n      if (i % 2 === 1) {\n        triangleIndices[i * 3 + 0] = indices[i + 0];\n        triangleIndices[i * 3 + 1] = indices[i + 2];\n        triangleIndices[i * 3 + 2] = indices[i + 1];\n      } else {\n        triangleIndices[i * 3 + 0] = indices[i + 0];\n        triangleIndices[i * 3 + 1] = indices[i + 1];\n        triangleIndices[i * 3 + 2] = indices[i + 2];\n      }\n    }\n    return triangleIndices;\n  }\n\n  /**\n   * Converts the given indices from a <code>TRIANGLE_FAN</code> representation\n   * into a <code>TRIANGLES</code> representation, and returns the result.\n   *\n   * The type of the result will be the same as the type of the input array.\n   *\n   * @param {TypedArray} indices The input indices\n   * @returns {TypedArray} The resulting triangle indices\n   */\n  static convertTriangleFanToTriangleIndices(indices) {\n    const triangleIndices = indices.constructor((indices.length - 2) * 3);\n    for (let i = 0; i < indices.length - 2; i++) {\n      triangleIndices[i * 3 + 0] = indices[i + 0];\n      triangleIndices[i * 3 + 1] = indices[i + 1];\n      triangleIndices[i * 3 + 2] = indices[i + 2];\n    }\n    return triangleIndices;\n  }\n\n  /**\n   * Create a typed array with a type that matches the given index data type,\n   * and the given size.\n   *\n   * @param {number} indexDatatype The <code>IndexDataType</code>\n   * @param {number} size The size of the array that will be created\n   * @returns {TypedArray} The typed array\n   * @throws {DeveloperError} If the <code>indexDataType</code> is neither\n   * <code>UNSIGNED_BYTE</code>, nor <code>UNSIGNED_SHORT</code>,\n   * nor <code>UNSIGNED_INT</code>, or the size is negative.\n   */\n  static createIndexTypedArray(indexDatatype, size) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.number.greaterThanOrEquals(\"size\", size, 0);\n    //>>includeEnd('debug');\n\n    switch (indexDatatype) {\n      case IndexDatatype.UNSIGNED_BYTE:\n        return new Uint8Array(size);\n      case IndexDatatype.UNSIGNED_SHORT:\n        return new Uint16Array(size);\n      case IndexDatatype.UNSIGNED_INT:\n        return new Uint32Array(size);\n    }\n    throw new DeveloperError(\n      `The indexDatatype must be UNSIGNED_BYTE (${IndexDatatype.UNSIGNED_BYTE}, ` +\n        `UNSIGNED_SHORT (${IndexDatatype.UNSIGNED_SHORT}, or ` +\n        `UNSIGNED_INT (${IndexDatatype.UNSIGNED_INT}, but is ${indexDatatype}`,\n    );\n  }\n}\n\nexport default ModelReader;\n","import Check from \"../../Core/Check.js\";\nimport ModelAlphaOptions from \"./ModelAlphaOptions.js\";\nimport RenderState from \"../../Renderer/RenderState.js\";\nimport ShaderBuilder from \"../../Renderer/ShaderBuilder.js\";\nimport DepthFunction from \"../DepthFunction.js\";\n\n/**\n * Model render resources are for setting details that are consistent across\n * the entire model.\n *\n * @constructor\n * @param {Model} model The model that will be rendered\n *\n * @private\n */\nfunction ModelRenderResources(model) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"model\", model);\n  //>>includeEnd('debug');\n\n  /**\n   * An object used to build a shader incrementally. Each pipeline stage\n   * may add lines of shader code to this object.\n   *\n   * @type {ShaderBuilder}\n   * @readonly\n   *\n   * @private\n   */\n  this.shaderBuilder = new ShaderBuilder();\n\n  /**\n   * A reference to the model.\n   *\n   * @type {Model}\n   * @readonly\n   *\n   * @private\n   */\n  this.model = model;\n\n  /**\n   * A dictionary mapping uniform name to functions that return the uniform\n   * values.\n   *\n   * @type {Object<string, Function>}\n   * @readonly\n   *\n   * @private\n   */\n  this.uniformMap = {};\n\n  /**\n   * Options for configuring the alpha stage such as pass and alpha cutoff.\n   *\n   * @type {ModelAlphaOptions}\n   * @readonly\n   *\n   * @private\n   */\n  this.alphaOptions = new ModelAlphaOptions();\n\n  /**\n   * An object storing options for creating a {@link RenderState}.\n   * The pipeline stages simply set the options, the render state is created\n   * when the {@link DrawCommand} is constructed.\n   *\n   * @type {object}\n   * @readonly\n   *\n   * @private\n   */\n  this.renderStateOptions = RenderState.getState(\n    RenderState.fromCache({\n      depthTest: {\n        enabled: true,\n        func: DepthFunction.LESS_OR_EQUAL,\n      },\n    }),\n  );\n\n  /**\n   * Whether the model has a silhouette. This value indicates what draw commands\n   * are needed and is set by ModelSilhouettePipelineStage.\n   *\n   * @type {boolean}\n   * @default false\n   *\n   * @private\n   */\n  this.hasSilhouette = false;\n\n  /**\n   * Whether the model is part of a tileset that uses the skipLevelOfDetail\n   * optimization. This value indicates what draw commands are needed and\n   * is set by TilesetPipelineStage.\n   *\n   * @type {boolean}\n   * @default false\n   *\n   * @private\n   */\n  this.hasSkipLevelOfDetail = false;\n\n  /**\n   * The NodeRenderResources for the nodes of the scene graph.\n   *\n   * Note that elements of this array may be <code>undefined</code> when\n   * there was no runtime node for a certain node.\n   *\n   * @type {NodeRenderResources[]}\n   * @default []\n   *\n   * @private\n   */\n  this.nodeRenderResources = [];\n}\n\nexport default ModelRenderResources;\n","import Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport TranslationRotationScale from \"../../Core/TranslationRotationScale.js\";\nimport Quaternion from \"../../Core/Quaternion.js\";\nimport InstancingPipelineStage from \"./InstancingPipelineStage.js\";\nimport ModelMatrixUpdateStage from \"./ModelMatrixUpdateStage.js\";\nimport NodeStatisticsPipelineStage from \"./NodeStatisticsPipelineStage.js\";\n\n/**\n * An in-memory representation of a node as part of the {@link ModelSceneGraph}.\n *\n * @param {object} options An object containing the following options:\n * @param {ModelComponents.Node} options.node The corresponding node components from the 3D model.\n * @param {Matrix4} options.transform The transform of this node, excluding transforms from the node's ancestors or children.\n * @param {Matrix4} options.transformToRoot The product of the transforms of all the node's ancestors, excluding the node's own transform.\n * @param {ModelSceneGraph} options.sceneGraph The scene graph this node belongs to.\n * @param {number[]} options.children The indices of the children of this node in the runtime nodes array of the scene graph.\n *\n * @alias ModelRuntimeNode\n * @constructor\n *\n * @private\n */\nfunction ModelRuntimeNode(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const node = options.node;\n  const transform = options.transform;\n  const transformToRoot = options.transformToRoot;\n  const sceneGraph = options.sceneGraph;\n  const children = options.children;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.node\", node);\n  Check.typeOf.object(\"options.transform\", transform);\n  Check.typeOf.object(\"options.transformToRoot\", transformToRoot);\n  Check.typeOf.object(\"options.sceneGraph\", sceneGraph);\n  Check.typeOf.object(\"options.children\", children);\n  //>>includeEnd('debug');\n\n  this._node = node;\n  this._name = node.name;\n  this._id = node.index;\n  this._sceneGraph = sceneGraph;\n  this._children = children;\n\n  this._originalTransform = Matrix4.clone(transform, this._originalTransform);\n  this._transform = Matrix4.clone(transform, this._transform);\n  this._transformToRoot = Matrix4.clone(transformToRoot, this._transformToRoot);\n\n  this._computedTransform = new Matrix4(); // Computed in initialize()\n  this._transformDirty = false;\n\n  // Used for animation\n  this._transformParameters = undefined;\n  this._morphWeights = [];\n\n  // Will be set by the scene graph after the skins have been created\n  this._runtimeSkin = undefined;\n  this._computedJointMatrices = [];\n\n  /**\n   * Whether or not to show this node and its children. This can be toggled\n   * by the user through {@link ModelNode}.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   *\n   * @private\n   */\n  this.show = true;\n\n  /**\n   * Whether or not this node is animated by the user. This is set by the\n   * corresponding {@link ModelNode} when the user supplies their\n   * own transform. If this is true, the node will ignore animations in the\n   * model's asset.\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  this.userAnimated = false;\n\n  /**\n   * Pipeline stages to apply across all the mesh primitives of this node.\n   * This is an array of classes, each with a static method called\n   * <code>process()</code>.\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.pipelineStages = [];\n\n  /**\n   * The mesh primitives that belong to this node.\n   *\n   * @type {ModelRuntimePrimitive[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.runtimePrimitives = [];\n\n  /**\n   * Update stages to apply to this node.\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.updateStages = [];\n\n  /**\n   * The component-wise minimum value of the translations of the instances.\n   * This value is set by InstancingPipelineStage.\n   *\n   * @type {Cartesian3}\n   *\n   * @private\n   */\n  this.instancingTranslationMin = undefined;\n\n  /**\n   * The component-wise maximum value of the translations of the instances.\n   * This value is set by InstancingPipelineStage.\n   *\n   * @type {Cartesian3}\n   *\n   * @private\n   */\n  this.instancingTranslationMax = undefined;\n\n  /**\n   * A buffer containing the instanced transforms. The memory is managed\n   * by Model; this is just a reference.\n   *\n   * @type {Buffer}\n   *\n   * @private\n   */\n  this.instancingTransformsBuffer = undefined;\n\n  /**\n   * A buffer containing the instanced transforms projected to 2D world\n   * coordinates. Used for rendering in 2D / CV mode. The memory is managed\n   * by Model; this is just a reference.\n   *\n   * @type {Buffer}\n   *\n   * @private\n   */\n  this.instancingTransformsBuffer2D = undefined;\n\n  /**\n   * A buffer containing the instanced translation values for the node if\n   * it is instanced. Used for rendering in 2D / CV mode. The memory is\n   * managed by Model; this is just a reference.\n   *\n   * @type {Buffer}\n   *\n   * @private\n   */\n  this.instancingTranslationBuffer2D = undefined;\n\n  /**\n   * If the model is instanced and projected to 2D, the reference point is the\n   * average of the instancing translation max and min. The 2D translations are\n   * defined relative to this point to avoid precision issues on the GPU.\n   * <p>\n   * This value is set by InstancingPipelineStage.\n   * </p>\n   *\n   * @type {Cartesian3}\n   *\n   * @private\n   */\n  this.instancingReferencePoint2D = undefined;\n\n  initialize(this);\n}\n\nObject.defineProperties(ModelRuntimeNode.prototype, {\n  /**\n   * The internal node this runtime node represents.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {ModelComponents.Node}\n   * @readonly\n   *\n   * @private\n   */\n  node: {\n    get: function () {\n      return this._node;\n    },\n  },\n  /**\n   * The scene graph this node belongs to.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {ModelSceneGraph}\n   * @readonly\n   *\n   * @private\n   */\n  sceneGraph: {\n    get: function () {\n      return this._sceneGraph;\n    },\n  },\n\n  /**\n   * The indices of the children of this node in the scene graph.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {number[]}\n   * @readonly\n   *\n   * @private\n   */\n  children: {\n    get: function () {\n      return this._children;\n    },\n  },\n\n  /**\n   * The node's local space transform. This can be changed externally via\n   * the corresponding {@link ModelNode}, such that animation can be\n   * driven by another source, not just an animation in the model's asset.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Matrix4}\n   *\n   * @private\n   */\n  transform: {\n    get: function () {\n      return this._transform;\n    },\n    set: function (value) {\n      this._transformDirty = true;\n      this._transform = Matrix4.clone(value, this._transform);\n    },\n  },\n\n  /**\n   * The transforms of all the node's ancestors, not including this node's\n   * transform.\n   *\n   * @see ModelRuntimeNode#computedTransform\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @private\n   */\n  transformToRoot: {\n    get: function () {\n      return this._transformToRoot;\n    },\n  },\n\n  /**\n   * A transform from the node's local space to the model's scene graph space.\n   * This is the product of transformToRoot * transform.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @private\n   */\n  computedTransform: {\n    get: function () {\n      return this._computedTransform;\n    },\n  },\n\n  /**\n   * The node's original transform, as specified in the model.\n   * Does not include transformations from the node's ancestors.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @private\n   */\n  originalTransform: {\n    get: function () {\n      return this._originalTransform;\n    },\n  },\n\n  /**\n   * The node's local space translation. This is used internally to allow\n   * animations in the model's asset to affect the node's properties.\n   *\n   * If the node's transformation was originally described using a matrix\n   * in the model, then this will return undefined.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Cartesian3}\n   *\n   * @exception {DeveloperError} The translation of a node cannot be set if it was defined using a matrix in the model's asset.\n   *\n   * @private\n   */\n  translation: {\n    get: function () {\n      return defined(this._transformParameters)\n        ? this._transformParameters.translation\n        : undefined;\n    },\n    set: function (value) {\n      const transformParameters = this._transformParameters;\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(transformParameters)) {\n        throw new DeveloperError(\n          \"The translation of a node cannot be set if it was defined using a matrix in the model.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const currentTranslation = transformParameters.translation;\n      if (Cartesian3.equals(currentTranslation, value)) {\n        return;\n      }\n\n      transformParameters.translation = Cartesian3.clone(\n        value,\n        transformParameters.translation,\n      );\n\n      updateTransformFromParameters(this, transformParameters);\n    },\n  },\n\n  /**\n   * The node's local space rotation. This is used internally to allow\n   * animations in the model's asset to affect the node's properties.\n   *\n   * If the node's transformation was originally described using a matrix\n   * in the model, then this will return undefined.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Quaternion}\n   *\n   * @exception {DeveloperError} The rotation of a node cannot be set if it was defined using a matrix in the model's asset.\n   *\n   * @private\n   */\n  rotation: {\n    get: function () {\n      return defined(this._transformParameters)\n        ? this._transformParameters.rotation\n        : undefined;\n    },\n    set: function (value) {\n      const transformParameters = this._transformParameters;\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(transformParameters)) {\n        throw new DeveloperError(\n          \"The rotation of a node cannot be set if it was defined using a matrix in the model.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const currentRotation = transformParameters.rotation;\n      if (Quaternion.equals(currentRotation, value)) {\n        return;\n      }\n\n      transformParameters.rotation = Quaternion.clone(\n        value,\n        transformParameters.rotation,\n      );\n\n      updateTransformFromParameters(this, transformParameters);\n    },\n  },\n\n  /**\n   * The node's local space scale. This is used internally to allow\n   * animations in the model's asset to affect the node's properties.\n   *\n   * If the node's transformation was originally described using a matrix\n   * in the model, then this will return undefined.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Cartesian3}\n   *\n   * @exception {DeveloperError} The scale of a node cannot be set if it was defined using a matrix in the model's asset.\n   * @private\n   */\n  scale: {\n    get: function () {\n      return defined(this._transformParameters)\n        ? this._transformParameters.scale\n        : undefined;\n    },\n    set: function (value) {\n      const transformParameters = this._transformParameters;\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(transformParameters)) {\n        throw new DeveloperError(\n          \"The scale of a node cannot be set if it was defined using a matrix in the model.\",\n        );\n      }\n      //>>includeEnd('debug');\n      const currentScale = transformParameters.scale;\n      if (Cartesian3.equals(currentScale, value)) {\n        return;\n      }\n\n      transformParameters.scale = Cartesian3.clone(\n        value,\n        transformParameters.scale,\n      );\n\n      updateTransformFromParameters(this, transformParameters);\n    },\n  },\n\n  /**\n   * The node's morph weights. This is used internally to allow animations\n   * in the model's asset to affect the node's properties.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {number[]}\n   *\n   * @private\n   */\n  morphWeights: {\n    get: function () {\n      return this._morphWeights;\n    },\n    set: function (value) {\n      const valueLength = value.length;\n      //>>includeStart('debug', pragmas.debug);\n      if (this._morphWeights.length !== valueLength) {\n        throw new DeveloperError(\n          \"value must have the same length as the original weights array.\",\n        );\n      }\n      //>>includeEnd('debug');\n      for (let i = 0; i < valueLength; i++) {\n        this._morphWeights[i] = value[i];\n      }\n    },\n  },\n\n  /**\n   * The skin applied to this node, if it exists.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {ModelSkin}\n   * @readonly\n   *\n   * @private\n   */\n  runtimeSkin: {\n    get: function () {\n      return this._runtimeSkin;\n    },\n  },\n\n  /**\n   * The computed joint matrices of this node, derived from its skin.\n   *\n   * @memberof ModelRuntimeNode.prototype\n   * @type {Matrix4[]}\n   * @readonly\n   *\n   * @private\n   */\n  computedJointMatrices: {\n    get: function () {\n      return this._computedJointMatrices;\n    },\n  },\n});\n\nfunction initialize(runtimeNode) {\n  const transform = runtimeNode.transform;\n  const transformToRoot = runtimeNode.transformToRoot;\n  const computedTransform = runtimeNode._computedTransform;\n  runtimeNode._computedTransform = Matrix4.multiply(\n    transformToRoot,\n    transform,\n    computedTransform,\n  );\n\n  const node = runtimeNode.node;\n  if (!defined(node.matrix)) {\n    runtimeNode._transformParameters = new TranslationRotationScale(\n      node.translation,\n      node.rotation,\n      node.scale,\n    );\n  }\n\n  if (defined(node.morphWeights)) {\n    runtimeNode._morphWeights = node.morphWeights.slice();\n  }\n\n  // If this node is affected by an articulation from the AGI_articulations\n  // extension, add this node to its list of affected nodes.\n  const articulationName = node.articulationName;\n  if (defined(articulationName)) {\n    const sceneGraph = runtimeNode.sceneGraph;\n    const runtimeArticulations = sceneGraph._runtimeArticulations;\n\n    const runtimeArticulation = runtimeArticulations[articulationName];\n    if (defined(runtimeArticulation)) {\n      runtimeArticulation.runtimeNodes.push(runtimeNode);\n    }\n  }\n}\n\nfunction updateTransformFromParameters(runtimeNode, transformParameters) {\n  runtimeNode._transformDirty = true;\n\n  runtimeNode._transform = Matrix4.fromTranslationRotationScale(\n    transformParameters,\n    runtimeNode._transform,\n  );\n}\n\n/**\n * Returns the child with the given index.\n *\n * @param {number} index The index of the child.\n *\n * @returns {ModelRuntimeNode}\n *\n * @example\n * // Iterate through all children of a runtime node.\n * for (let i = 0; i < runtimeNode.children.length; i++)\n * {\n *   const childNode = runtimeNode.getChild(i);\n * }\n *\n * @private\n */\nModelRuntimeNode.prototype.getChild = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  if (index < 0 || index >= this.children.length) {\n    throw new DeveloperError(\n      \"index must be greater than or equal to 0 and less than the number of children.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return this.sceneGraph._runtimeNodes[this.children[index]];\n};\n\n/**\n * Configure the node pipeline stages. If the pipeline needs to be re-run, call\n * this method again to ensure the correct sequence of pipeline stages are\n * used.\n *\n * @private\n */\nModelRuntimeNode.prototype.configurePipeline = function () {\n  const node = this.node;\n  const pipelineStages = this.pipelineStages;\n  pipelineStages.length = 0;\n  const updateStages = this.updateStages;\n  updateStages.length = 0;\n\n  if (defined(node.instances)) {\n    pipelineStages.push(InstancingPipelineStage);\n  }\n\n  pipelineStages.push(NodeStatisticsPipelineStage);\n\n  updateStages.push(ModelMatrixUpdateStage);\n};\n\n/**\n * Updates the computed transform used for rendering and instancing.\n *\n * @private\n */\nModelRuntimeNode.prototype.updateComputedTransform = function () {\n  this._computedTransform = Matrix4.multiply(\n    this._transformToRoot,\n    this._transform,\n    this._computedTransform,\n  );\n};\n\n/**\n * Updates the joint matrices for this node, where each matrix is computed as\n * computedJointMatrix = nodeWorldTransform^(-1) * skinJointMatrix.\n *\n * @private\n */\nModelRuntimeNode.prototype.updateJointMatrices = function () {\n  const runtimeSkin = this._runtimeSkin;\n  if (!defined(runtimeSkin)) {\n    return;\n  }\n\n  runtimeSkin.updateJointMatrices();\n\n  const computedJointMatrices = this._computedJointMatrices;\n  const skinJointMatrices = runtimeSkin.jointMatrices;\n  const length = skinJointMatrices.length;\n\n  for (let i = 0; i < length; i++) {\n    if (!defined(computedJointMatrices[i])) {\n      computedJointMatrices[i] = new Matrix4();\n    }\n\n    const nodeWorldTransform = Matrix4.multiplyTransformation(\n      this.transformToRoot,\n      this.transform,\n      computedJointMatrices[i],\n    );\n\n    const inverseNodeWorldTransform = Matrix4.inverseTransformation(\n      nodeWorldTransform,\n      computedJointMatrices[i],\n    );\n\n    computedJointMatrices[i] = Matrix4.multiplyTransformation(\n      inverseNodeWorldTransform,\n      skinJointMatrices[i],\n      computedJointMatrices[i],\n    );\n  }\n};\n\nexport default ModelRuntimeNode;\n","import Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport AlphaPipelineStage from \"./AlphaPipelineStage.js\";\nimport BatchTexturePipelineStage from \"./BatchTexturePipelineStage.js\";\nimport ClassificationPipelineStage from \"./ClassificationPipelineStage.js\";\nimport CPUStylingPipelineStage from \"./CPUStylingPipelineStage.js\";\nimport CustomShaderMode from \"./CustomShaderMode.js\";\nimport CustomShaderPipelineStage from \"./CustomShaderPipelineStage.js\";\nimport DequantizationPipelineStage from \"./DequantizationPipelineStage.js\";\nimport EdgeDetectionPipelineStage from \"./EdgeDetectionPipelineStage.js\";\nimport EdgeVisibilityPipelineStage from \"./EdgeVisibilityPipelineStage.js\";\nimport FeatureIdPipelineStage from \"./FeatureIdPipelineStage.js\";\nimport GeometryPipelineStage from \"./GeometryPipelineStage.js\";\nimport ImageryPipelineStage from \"./ImageryPipelineStage.js\";\nimport LightingPipelineStage from \"./LightingPipelineStage.js\";\nimport MaterialPipelineStage from \"./MaterialPipelineStage.js\";\nimport MetadataPickingPipelineStage from \"./MetadataPickingPipelineStage.js\";\nimport MetadataPipelineStage from \"./MetadataPipelineStage.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport MorphTargetsPipelineStage from \"./MorphTargetsPipelineStage.js\";\nimport PickingPipelineStage from \"./PickingPipelineStage.js\";\nimport PointCloudStylingPipelineStage from \"./PointCloudStylingPipelineStage.js\";\nimport PrimitiveOutlinePipelineStage from \"./PrimitiveOutlinePipelineStage.js\";\nimport PrimitiveStatisticsPipelineStage from \"./PrimitiveStatisticsPipelineStage.js\";\nimport SceneMode2DPipelineStage from \"./SceneMode2DPipelineStage.js\";\nimport SelectedFeatureIdPipelineStage from \"./SelectedFeatureIdPipelineStage.js\";\nimport SkinningPipelineStage from \"./SkinningPipelineStage.js\";\nimport VerticalExaggerationPipelineStage from \"./VerticalExaggerationPipelineStage.js\";\nimport WireframePipelineStage from \"./WireframePipelineStage.js\";\nimport oneTimeWarning from \"../../Core/oneTimeWarning.js\";\n\n/**\n * In memory representation of a single primitive, that is, a primitive\n * and its corresponding mesh.\n *\n * @param {object} options An object containing the following options:\n * @param {ModelComponents.Primitive} options.primitive The primitive component.\n * @param {ModelComponents.Node} options.node The node that this primitive belongs to.\n * @param {Model} options.model The {@link Model} this primitive belongs to.\n *\n * @alias ModelRuntimePrimitive\n * @constructor\n *\n * @private\n */\nfunction ModelRuntimePrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const primitive = options.primitive;\n  const node = options.node;\n  const model = options.model;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.primitive\", primitive);\n  Check.typeOf.object(\"options.node\", node);\n  Check.typeOf.object(\"options.model\", model);\n  //>>includeEnd('debug');\n\n  /**\n   * The primitive component associated with this primitive.\n   *\n   * @type {ModelComponents.Primitive}\n   *\n   * @private\n   */\n  this.primitive = primitive;\n\n  /**\n   * A reference to the node this primitive belongs to.\n   *\n   * @type {ModelComponents.Node}\n   *\n   * @private\n   */\n  this.node = node;\n\n  /**\n   * A reference to the model\n   *\n   * @type {Model}\n   *\n   * @private\n   */\n  this.model = model;\n\n  /**\n   * Pipeline stages to apply to this primitive. This\n   * is an array of classes, each with a static method called\n   * <code>process()</code>\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.pipelineStages = [];\n\n  /**\n   * The generated {@link ModelDrawCommand} or {@link ClassificationModelDrawCommand}\n   * associated with this primitive.\n   *\n   * @type {ModelDrawCommand|ClassificationModelDrawCommand}\n   *\n   * @private\n   */\n  this.drawCommand = undefined;\n\n  /**\n   * The bounding sphere of this primitive in object-space.\n   *\n   * @type {BoundingSphere}\n   *\n   * @private\n   */\n  this.boundingSphere = undefined;\n\n  /**\n   * The bounding sphere of this primitive in 2D world space.\n   *\n   * @type {BoundingSphere}\n   *\n   * @private\n   */\n  this.boundingSphere2D = undefined;\n\n  /**\n   * A buffer containing the primitive's positions projected to 2D world\n   * coordinates. This is generated by SceneMode2DPipelineStage and used for\n   * rendering in 2D / CV mode. The memory is managed by Model; this is just\n   * a reference.\n   *\n   * @type {Buffer}\n   *\n   * @private\n   */\n  this.positionBuffer2D = undefined;\n\n  /**\n   * An array containing the lengths of the vertex batches for classification.\n   * Vertices with the same feature ID are batched together, and each batch is\n   * drawn with a different draw command in order to properly classify other\n   * assets.\n   * <p>\n   * This is generated by ClassificationPipelineStage. The memory is managed by\n   * Model; this is just a reference.\n   * </p>\n   *\n   * @type {number[]}\n   *\n   * @private\n   */\n  this.batchLengths = undefined;\n\n  /**\n   * An array containing the offsets of the vertex batches for classification.\n   * Vertices with the same feature ID are batched together, and each batch is\n   * drawn with a different draw command in order to properly classify other\n   * assets.\n   * <p>\n   * This is generated by ClassificationPipelineStage. The memory is managed by\n   * Model; this is just a reference.\n   * </p>\n   *\n   * @type {number[]}\n   *\n   * @private\n   */\n  this.batchOffsets = undefined;\n\n  /**\n   * Update stages to apply to this primitive.\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.updateStages = [];\n}\n\n/**\n * Configure the primitive pipeline stages. If the pipeline needs to be re-run,\n * call this method again to ensure the correct sequence of pipeline stages are\n * used.\n *\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nModelRuntimePrimitive.prototype.configurePipeline = function (frameState) {\n  const pipelineStages = this.pipelineStages;\n  pipelineStages.length = 0;\n\n  const primitive = this.primitive;\n  const node = this.node;\n  const model = this.model;\n\n  const customShader = model.customShader;\n  const style = model.style;\n\n  const useWebgl2 = frameState.context.webgl2;\n  const mode = frameState.mode;\n  const use2D =\n    mode !== SceneMode.SCENE3D && !frameState.scene3DOnly && model._projectTo2D;\n  const hasVerticalExaggeration =\n    frameState.verticalExaggeration !== 1.0 && model.hasVerticalExaggeration;\n\n  const hasMorphTargets =\n    defined(primitive.morphTargets) && primitive.morphTargets.length > 0;\n  const hasSkinning = defined(node.skin);\n\n  // Check whether the model is part of a `Model3DTileContent` that\n  // belongs to a tileset that has imagery layers. If this is the\n  // case, then the `ImageryPipelineStage` will be required.\n  const hasImageryLayers = defined(model.imageryLayers);\n\n  const hasCustomShader = defined(customShader);\n  const hasCustomFragmentShader =\n    hasCustomShader && defined(customShader.fragmentShaderText);\n  const materialsEnabled =\n    !hasCustomFragmentShader ||\n    customShader.mode !== CustomShaderMode.REPLACE_MATERIAL;\n  const hasQuantization = ModelUtility.hasQuantizedAttributes(\n    primitive.attributes,\n  );\n\n  const generateWireframeIndices =\n    model.debugWireframe &&\n    PrimitiveType.isTriangles(primitive.primitiveType) &&\n    // Generating index buffers for wireframes is always possible in WebGL2.\n    // However, this will only work in WebGL1 if the model was constructed with\n    // enableDebugWireframe set to true.\n    (model._enableDebugWireframe || useWebgl2);\n\n  const pointCloudShading = model.pointCloudShading;\n  const hasAttenuation =\n    defined(pointCloudShading) && pointCloudShading.attenuation;\n  const hasPointCloudBackFaceCulling =\n    defined(pointCloudShading) && pointCloudShading.backFaceCulling;\n  const hasPointCloudStyle =\n    primitive.primitiveType === PrimitiveType.POINTS &&\n    (defined(style) || hasAttenuation || hasPointCloudBackFaceCulling);\n\n  const hasOutlines =\n    model._enableShowOutline && defined(primitive.outlineCoordinates);\n\n  const hasEdgeVisibility = defined(primitive.edgeVisibility);\n\n  const featureIdFlags = inspectFeatureIds(model, node, primitive);\n\n  const hasClassification = defined(model.classificationType);\n\n  // Start of pipeline -----------------------------------------------------\n  if (use2D) {\n    pipelineStages.push(SceneMode2DPipelineStage);\n  }\n\n  pipelineStages.push(GeometryPipelineStage);\n\n  if (generateWireframeIndices) {\n    pipelineStages.push(WireframePipelineStage);\n  }\n\n  if (hasClassification) {\n    pipelineStages.push(ClassificationPipelineStage);\n  }\n\n  if (hasMorphTargets) {\n    pipelineStages.push(MorphTargetsPipelineStage);\n  }\n\n  if (hasSkinning) {\n    pipelineStages.push(SkinningPipelineStage);\n  }\n\n  if (hasPointCloudStyle) {\n    pipelineStages.push(PointCloudStylingPipelineStage);\n  }\n\n  if (hasQuantization) {\n    pipelineStages.push(DequantizationPipelineStage);\n  }\n\n  if (hasImageryLayers) {\n    if (hasOutlines) {\n      oneTimeWarning(\n        \"outlines-and-draping\",\n        \"Primitive outlines disable imagery draping\",\n      );\n    } else {\n      pipelineStages.push(ImageryPipelineStage);\n    }\n  }\n\n  if (materialsEnabled) {\n    pipelineStages.push(MaterialPipelineStage);\n  }\n\n  // These stages are always run to ensure structs\n  // are declared to avoid compilation errors.\n  pipelineStages.push(FeatureIdPipelineStage);\n  pipelineStages.push(MetadataPipelineStage);\n  pipelineStages.push(MetadataPickingPipelineStage);\n\n  if (featureIdFlags.hasPropertyTable) {\n    pipelineStages.push(SelectedFeatureIdPipelineStage);\n    pipelineStages.push(BatchTexturePipelineStage);\n    pipelineStages.push(CPUStylingPipelineStage);\n  }\n\n  if (hasVerticalExaggeration) {\n    pipelineStages.push(VerticalExaggerationPipelineStage);\n  }\n\n  if (hasCustomShader) {\n    pipelineStages.push(CustomShaderPipelineStage);\n  }\n\n  pipelineStages.push(LightingPipelineStage);\n\n  if (model.allowPicking) {\n    pipelineStages.push(PickingPipelineStage);\n  }\n\n  if (hasOutlines) {\n    pipelineStages.push(PrimitiveOutlinePipelineStage);\n  }\n\n  if (hasEdgeVisibility) {\n    // Indicate to Scene (after primitive updates) that the edge MRT should be enabled.\n    frameState.edgeVisibilityRequested = true;\n    pipelineStages.push(EdgeVisibilityPipelineStage);\n    pipelineStages.push(EdgeDetectionPipelineStage);\n  }\n\n  pipelineStages.push(AlphaPipelineStage);\n\n  pipelineStages.push(PrimitiveStatisticsPipelineStage);\n\n  return;\n};\n\nfunction inspectFeatureIds(model, node, primitive) {\n  let featureIds;\n  // Check instances first, as this is the most specific type of\n  // feature ID\n  if (defined(node.instances)) {\n    featureIds = ModelUtility.getFeatureIdsByLabel(\n      node.instances.featureIds,\n      model.instanceFeatureIdLabel,\n    );\n\n    if (defined(featureIds)) {\n      return {\n        hasFeatureIds: true,\n        hasPropertyTable: defined(featureIds.propertyTableId),\n      };\n    }\n  }\n\n  featureIds = ModelUtility.getFeatureIdsByLabel(\n    primitive.featureIds,\n    model.featureIdLabel,\n  );\n  if (defined(featureIds)) {\n    return {\n      hasFeatureIds: true,\n      hasPropertyTable: defined(featureIds.propertyTableId),\n    };\n  }\n\n  return {\n    hasFeatureIds: false,\n    hasPropertyTable: false,\n  };\n}\n\nexport default ModelRuntimePrimitive;\n","import BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Transforms from \"../../Core/Transforms.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport SplitDirection from \"../SplitDirection.js\";\nimport TilesetPipelineStage from \"./TilesetPipelineStage.js\";\nimport AtmospherePipelineStage from \"./AtmospherePipelineStage.js\";\nimport ImageBasedLightingPipelineStage from \"./ImageBasedLightingPipelineStage.js\";\nimport ModelArticulation from \"./ModelArticulation.js\";\nimport ModelColorPipelineStage from \"./ModelColorPipelineStage.js\";\nimport ModelClippingPlanesPipelineStage from \"./ModelClippingPlanesPipelineStage.js\";\nimport ModelClippingPolygonsPipelineStage from \"./ModelClippingPolygonsPipelineStage.js\";\nimport ModelNode from \"./ModelNode.js\";\nimport ModelRuntimeNode from \"./ModelRuntimeNode.js\";\nimport ModelRuntimePrimitive from \"./ModelRuntimePrimitive.js\";\nimport ModelSkin from \"./ModelSkin.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport ModelRenderResources from \"./ModelRenderResources.js\";\nimport ModelSilhouettePipelineStage from \"./ModelSilhouettePipelineStage.js\";\nimport ModelSplitterPipelineStage from \"./ModelSplitterPipelineStage.js\";\nimport ModelType from \"./ModelType.js\";\nimport NodeRenderResources from \"./NodeRenderResources.js\";\nimport PrimitiveRenderResources from \"./PrimitiveRenderResources.js\";\nimport ModelDrawCommands from \"./ModelDrawCommands.js\";\nimport addAllToArray from \"../../Core/addAllToArray.js\";\n\n/**\n * An in memory representation of the scene graph for a {@link Model}\n *\n * @param {object} options An object containing the following options\n * @param {Model} options.model The model this scene graph belongs to\n * @param {ModelComponents} options.modelComponents The model components describing the model\n *\n * @alias ModelSceneGraph\n * @constructor\n *\n * @private\n */\nfunction ModelSceneGraph(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const components = options.modelComponents;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.model\", options.model);\n  Check.typeOf.object(\"options.modelComponents\", components);\n  //>>includeEnd('debug');\n\n  /**\n   * A reference to the {@link Model} that owns this scene graph.\n   *\n   * @type {Model}\n   * @readonly\n   *\n   * @private\n   */\n  this._model = options.model;\n\n  /**\n   * The model components that represent the contents of the 3D model file.\n   *\n   * @type {ModelComponents}\n   * @readonly\n   *\n   * @private\n   */\n  this._components = components;\n\n  /**\n   * Pipeline stages to apply across the model.\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this._pipelineStages = [];\n\n  /**\n   * Update stages to apply across the model.\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this._updateStages = [];\n\n  /**\n   * The runtime nodes that make up the scene graph\n   *\n   * @type {ModelRuntimeNode[]}\n   * @readonly\n   *\n   * @private\n   */\n  this._runtimeNodes = [];\n\n  /**\n   * The indices of the root nodes in the runtime nodes array.\n   *\n   * @type {number[]}\n   * @readonly\n   *\n   * @private\n   */\n  this._rootNodes = [];\n\n  /**\n   * The indices of the skinned nodes in the runtime nodes array. These refer\n   * to the nodes that will be manipulated by their skin, as opposed to the nodes\n   * acting as joints for the skin.\n   *\n   * @type {number[]}\n   * @readonly\n   *\n   * @private\n   */\n  this._skinnedNodes = [];\n\n  /**\n   * The runtime skins that affect nodes in the scene graph.\n   *\n   * @type {ModelSkin[]}\n   * @readonly\n   *\n   * @private\n   */\n  this._runtimeSkins = [];\n\n  /**\n   * Pipeline stages to apply to this model. This\n   * is an array of classes, each with a static method called\n   * <code>process()</code>\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.modelPipelineStages = [];\n\n  // The scene graph's bounding sphere is model space, so that\n  // the model's bounding sphere can be recomputed when given a\n  // new model matrix.\n  this._boundingSphere = undefined;\n\n  // The 2D bounding sphere is in world space. This is checked\n  // by the draw commands to see if the model is over the IDL,\n  // and if so, renders the primitives using extra commands.\n  this._boundingSphere2D = undefined;\n\n  this._computedModelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n  this._computedModelMatrix2D = Matrix4.clone(Matrix4.IDENTITY);\n\n  this._axisCorrectionMatrix = ModelUtility.getAxisCorrectionMatrix(\n    components.upAxis,\n    components.forwardAxis,\n    new Matrix4(),\n  );\n\n  // Store articulations from the AGI_articulations extension\n  // by name in a dictionary for easy retrieval.\n  this._runtimeArticulations = {};\n\n  initialize(this);\n}\n\nObject.defineProperties(ModelSceneGraph.prototype, {\n  /**\n   * The model components this scene graph represents.\n   *\n   * @type {ModelComponents}\n   * @readonly\n   *\n   * @private\n   */\n  components: {\n    get: function () {\n      return this._components;\n    },\n  },\n\n  /**\n   * The axis-corrected model matrix.\n   *\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @private\n   */\n  computedModelMatrix: {\n    get: function () {\n      return this._computedModelMatrix;\n    },\n  },\n\n  /**\n   * A matrix to correct from y-up in some model formats (e.g. glTF) to the\n   * z-up coordinate system Cesium uses.\n   *\n   * @type {Matrix4}\n   * @readonly\n   *\n   * @private\n   */\n  axisCorrectionMatrix: {\n    get: function () {\n      return this._axisCorrectionMatrix;\n    },\n  },\n\n  /**\n   * The bounding sphere containing all the primitives in the scene graph\n   * in model space.\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   *\n   * @private\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n});\n\nfunction initialize(sceneGraph) {\n  const components = sceneGraph._components;\n  const scene = components.scene;\n  const model = sceneGraph._model;\n\n  // If the model has a height reference that modifies the model matrix,\n  // it will be accounted for in updateModelMatrix.\n  const modelMatrix = model.modelMatrix;\n  computeModelMatrix(sceneGraph, modelMatrix);\n\n  const articulations = components.articulations;\n  const articulationsLength = articulations.length;\n\n  const runtimeArticulations = sceneGraph._runtimeArticulations;\n  for (let i = 0; i < articulationsLength; i++) {\n    const articulation = articulations[i];\n    const runtimeArticulation = new ModelArticulation({\n      articulation: articulation,\n      sceneGraph: sceneGraph,\n    });\n\n    const name = runtimeArticulation.name;\n    runtimeArticulations[name] = runtimeArticulation;\n  }\n\n  const nodes = components.nodes;\n  const nodesLength = nodes.length;\n\n  // Initialize this array to be the same size as the nodes array in\n  // the model file. This is so the node indices remain the same. However,\n  // only nodes reachable from the scene's root node will be populated, the\n  // rest will be undefined\n  sceneGraph._runtimeNodes = new Array(nodesLength);\n\n  const rootNodes = scene.nodes;\n  const rootNodesLength = rootNodes.length;\n  const transformToRoot = Matrix4.IDENTITY;\n  for (let i = 0; i < rootNodesLength; i++) {\n    const rootNode = scene.nodes[i];\n\n    const rootNodeIndex = traverseAndCreateSceneGraph(\n      sceneGraph,\n      rootNode,\n      transformToRoot,\n    );\n\n    sceneGraph._rootNodes.push(rootNodeIndex);\n  }\n\n  // Handle skins after all runtime nodes are created\n  const skins = components.skins;\n  const runtimeSkins = sceneGraph._runtimeSkins;\n\n  const skinsLength = skins.length;\n  for (let i = 0; i < skinsLength; i++) {\n    const skin = skins[i];\n    runtimeSkins.push(\n      new ModelSkin({\n        skin: skin,\n        sceneGraph: sceneGraph,\n      }),\n    );\n  }\n\n  const skinnedNodes = sceneGraph._skinnedNodes;\n  const skinnedNodesLength = skinnedNodes.length;\n  for (let i = 0; i < skinnedNodesLength; i++) {\n    const skinnedNodeIndex = skinnedNodes[i];\n    const skinnedNode = sceneGraph._runtimeNodes[skinnedNodeIndex];\n\n    // Use the index of the skin in the model components to find\n    // the corresponding runtime skin.\n    const skin = nodes[skinnedNodeIndex].skin;\n    const skinIndex = skin.index;\n\n    skinnedNode._runtimeSkin = runtimeSkins[skinIndex];\n    skinnedNode.updateJointMatrices();\n  }\n\n  // Ensure articulations are applied with their initial values to their target nodes.\n  sceneGraph.applyArticulations();\n}\n\nfunction computeModelMatrix(sceneGraph, modelMatrix) {\n  const components = sceneGraph._components;\n  const model = sceneGraph._model;\n\n  sceneGraph._computedModelMatrix = Matrix4.multiplyTransformation(\n    modelMatrix,\n    components.transform,\n    sceneGraph._computedModelMatrix,\n  );\n\n  sceneGraph._computedModelMatrix = Matrix4.multiplyTransformation(\n    sceneGraph._computedModelMatrix,\n    sceneGraph._axisCorrectionMatrix,\n    sceneGraph._computedModelMatrix,\n  );\n\n  sceneGraph._computedModelMatrix = Matrix4.multiplyByUniformScale(\n    sceneGraph._computedModelMatrix,\n    model.computedScale,\n    sceneGraph._computedModelMatrix,\n  );\n}\n\nconst scratchComputedTranslation = new Cartesian3();\n\nfunction computeModelMatrix2D(sceneGraph, frameState) {\n  const computedModelMatrix = sceneGraph._computedModelMatrix;\n  const translation = Matrix4.getTranslation(\n    computedModelMatrix,\n    scratchComputedTranslation,\n  );\n\n  if (!Cartesian3.equals(translation, Cartesian3.ZERO)) {\n    sceneGraph._computedModelMatrix2D = Transforms.basisTo2D(\n      frameState.mapProjection,\n      computedModelMatrix,\n      sceneGraph._computedModelMatrix2D,\n    );\n  } else {\n    const center = sceneGraph.boundingSphere.center;\n    const to2D = Transforms.ellipsoidTo2DModelMatrix(\n      frameState.mapProjection,\n      center,\n      sceneGraph._computedModelMatrix2D,\n    );\n    sceneGraph._computedModelMatrix2D = Matrix4.multiply(\n      to2D,\n      computedModelMatrix,\n      sceneGraph._computedModelMatrix2D,\n    );\n  }\n\n  sceneGraph._boundingSphere2D = BoundingSphere.transform(\n    sceneGraph._boundingSphere,\n    sceneGraph._computedModelMatrix2D,\n    sceneGraph._boundingSphere2D,\n  );\n}\n\n/**\n * Recursively traverse through the nodes in the scene graph to create\n * their runtime versions, using a post-order depth-first traversal.\n *\n * @param {ModelSceneGraph} sceneGraph The scene graph\n * @param {ModelComponents.Node} node The current node\n * @param {Matrix4} transformToRoot The transforms of this node's ancestors.\n * @returns {number} The index of this node in the runtimeNodes array.\n *\n * @private\n */\nfunction traverseAndCreateSceneGraph(sceneGraph, node, transformToRoot) {\n  // The indices of the children of this node in the runtimeNodes array.\n  const childrenIndices = [];\n  const transform = ModelUtility.getNodeTransform(node);\n\n  // Traverse through scene graph.\n  const childrenLength = node.children.length;\n  for (let i = 0; i < childrenLength; i++) {\n    const childNode = node.children[i];\n    const childNodeTransformToRoot = Matrix4.multiplyTransformation(\n      transformToRoot,\n      transform,\n      new Matrix4(),\n    );\n\n    const childIndex = traverseAndCreateSceneGraph(\n      sceneGraph,\n      childNode,\n      childNodeTransformToRoot,\n    );\n    childrenIndices.push(childIndex);\n  }\n\n  // Process node and mesh primitives.\n  const runtimeNode = new ModelRuntimeNode({\n    node: node,\n    transform: transform,\n    transformToRoot: transformToRoot,\n    children: childrenIndices,\n    sceneGraph: sceneGraph,\n  });\n\n  const primitivesLength = node.primitives.length;\n  for (let i = 0; i < primitivesLength; i++) {\n    runtimeNode.runtimePrimitives.push(\n      new ModelRuntimePrimitive({\n        primitive: node.primitives[i],\n        node: node,\n        model: sceneGraph._model,\n      }),\n    );\n  }\n\n  const index = node.index;\n  sceneGraph._runtimeNodes[index] = runtimeNode;\n  if (defined(node.skin)) {\n    sceneGraph._skinnedNodes.push(index);\n  }\n\n  // Create and store the public version of the runtime node.\n  const name = node.name;\n  if (defined(name)) {\n    const model = sceneGraph._model;\n    const publicNode = new ModelNode(model, runtimeNode);\n    model._nodesByName[name] = publicNode;\n  }\n\n  return index;\n}\n\nconst scratchModelPositionMin = new Cartesian3();\nconst scratchModelPositionMax = new Cartesian3();\nconst scratchPrimitivePositionMin = new Cartesian3();\nconst scratchPrimitivePositionMax = new Cartesian3();\n\n/**\n * Generates the {@link ModelDrawCommand} for each primitive in the model.\n * If the model is used for classification, a {@link ClassificationModelDrawCommand}\n * is generated for each primitive instead.\n *\n * @param {FrameState} frameState The current frame state. This is needed to\n * allocate GPU resources as needed.\n *\n * @private\n */\nModelSceneGraph.prototype.buildDrawCommands = function (frameState) {\n  const modelRenderResources = this.buildRenderResources(frameState);\n  this.computeBoundingVolumes(modelRenderResources);\n  this.createDrawCommands(modelRenderResources, frameState);\n};\n\n/**\n * Generates the {@link ModelRenderResources} for the model.\n *\n * This will traverse the model, nodes and primitives of the scene graph,\n * and perform the following tasks:\n *\n * - configure the pipeline stages by calling `configurePipeline`,\n *   `runtimeNode.configurePipeline`, and `runtimePrimitive.configurePipeline`\n * - create the `ModelRenderResources`, `NodeRenderResources`, and\n *   `PrimitiveRenderResources`\n * - Process the render resources with the respective pipelines\n *\n * @param {FrameState} frameState The current frame state. This is needed to\n * allocate GPU resources as needed.\n * @returns {ModelRenderResources} The model render resources\n *\n * @private\n */\nModelSceneGraph.prototype.buildRenderResources = function (frameState) {\n  const model = this._model;\n  const modelRenderResources = new ModelRenderResources(model);\n\n  // Reset the memory counts before running the pipeline\n  model.statistics.clear();\n\n  this.configurePipeline(frameState);\n  const modelPipelineStages = this.modelPipelineStages;\n\n  for (let i = 0; i < modelPipelineStages.length; i++) {\n    const modelPipelineStage = modelPipelineStages[i];\n    modelPipelineStage.process(modelRenderResources, model, frameState);\n  }\n\n  for (let i = 0; i < this._runtimeNodes.length; i++) {\n    const runtimeNode = this._runtimeNodes[i];\n\n    // If a node in the model was unreachable from the scene graph, there will\n    // be no corresponding runtime node and therefore should be skipped.\n    if (!defined(runtimeNode)) {\n      continue;\n    }\n\n    runtimeNode.configurePipeline();\n    const nodePipelineStages = runtimeNode.pipelineStages;\n\n    const nodeRenderResources = new NodeRenderResources(\n      modelRenderResources,\n      runtimeNode,\n    );\n    modelRenderResources.nodeRenderResources[i] = nodeRenderResources;\n\n    for (let j = 0; j < nodePipelineStages.length; j++) {\n      const nodePipelineStage = nodePipelineStages[j];\n\n      nodePipelineStage.process(\n        nodeRenderResources,\n        runtimeNode.node,\n        frameState,\n      );\n    }\n\n    for (let j = 0; j < runtimeNode.runtimePrimitives.length; j++) {\n      const runtimePrimitive = runtimeNode.runtimePrimitives[j];\n\n      runtimePrimitive.configurePipeline(frameState);\n      const primitivePipelineStages = runtimePrimitive.pipelineStages;\n\n      const primitiveRenderResources = new PrimitiveRenderResources(\n        nodeRenderResources,\n        runtimePrimitive,\n      );\n      nodeRenderResources.primitiveRenderResources[j] =\n        primitiveRenderResources;\n\n      for (let k = 0; k < primitivePipelineStages.length; k++) {\n        const primitivePipelineStage = primitivePipelineStages[k];\n        primitivePipelineStage.process(\n          primitiveRenderResources,\n          runtimePrimitive.primitive,\n          frameState,\n        );\n      }\n    }\n  }\n  return modelRenderResources;\n};\n\n/**\n * Computes the bounding volumes for the scene graph and the model.\n *\n * This will traverse the model, nodes and primitives of the scene graph,\n * and compute the bounding volumes. Specifically, it will compute\n *\n * - this._boundingSphere\n * - model._boundingSphere\n *\n * With the latter being modified as of\n *\n * - model._initialRadius = model._boundingSphere.radius;\n * - model._boundingSphere.radius *= model._clampedScale;\n *\n * NOTE: This contains some bugs. See https://github.com/CesiumGS/cesium/issues/12108\n *\n * @param {ModelRenderResources} modelRenderResources The model render resources\n *\n * @private\n */\nModelSceneGraph.prototype.computeBoundingVolumes = function (\n  modelRenderResources,\n) {\n  const model = this._model;\n\n  const modelPositionMin = Cartesian3.fromElements(\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n    scratchModelPositionMin,\n  );\n  const modelPositionMax = Cartesian3.fromElements(\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n    scratchModelPositionMax,\n  );\n\n  for (let i = 0; i < this._runtimeNodes.length; i++) {\n    const runtimeNode = this._runtimeNodes[i];\n\n    // If a node in the model was unreachable from the scene graph, there will\n    // be no corresponding runtime node and therefore should be skipped.\n    if (!defined(runtimeNode)) {\n      continue;\n    }\n\n    const nodeRenderResources = modelRenderResources.nodeRenderResources[i];\n    const nodeTransform = runtimeNode.computedTransform;\n    for (let j = 0; j < runtimeNode.runtimePrimitives.length; j++) {\n      const runtimePrimitive = runtimeNode.runtimePrimitives[j];\n\n      const primitiveRenderResources =\n        nodeRenderResources.primitiveRenderResources[j];\n\n      runtimePrimitive.boundingSphere = BoundingSphere.clone(\n        primitiveRenderResources.boundingSphere,\n        new BoundingSphere(),\n      );\n\n      const primitivePositionMin = Matrix4.multiplyByPoint(\n        nodeTransform,\n        primitiveRenderResources.positionMin,\n        scratchPrimitivePositionMin,\n      );\n      const primitivePositionMax = Matrix4.multiplyByPoint(\n        nodeTransform,\n        primitiveRenderResources.positionMax,\n        scratchPrimitivePositionMax,\n      );\n\n      Cartesian3.minimumByComponent(\n        modelPositionMin,\n        primitivePositionMin,\n        modelPositionMin,\n      );\n      Cartesian3.maximumByComponent(\n        modelPositionMax,\n        primitivePositionMax,\n        modelPositionMax,\n      );\n    }\n  }\n\n  this._boundingSphere = BoundingSphere.fromCornerPoints(\n    modelPositionMin,\n    modelPositionMax,\n    new BoundingSphere(),\n  );\n\n  this._boundingSphere = BoundingSphere.transformWithoutScale(\n    this._boundingSphere,\n    this._axisCorrectionMatrix,\n    this._boundingSphere,\n  );\n\n  this._boundingSphere = BoundingSphere.transform(\n    this._boundingSphere,\n    this._components.transform,\n    this._boundingSphere,\n  );\n\n  model._boundingSphere = BoundingSphere.transform(\n    this._boundingSphere,\n    model.modelMatrix,\n    model._boundingSphere,\n  );\n\n  model._initialRadius = model._boundingSphere.radius;\n  model._boundingSphere.radius *= model._clampedScale;\n};\n\n/**\n * Creates the draw commands for the primitives in the scene graph.\n *\n * This will traverse the model, nodes and primitives of the scene graph,\n * and create the respective draw commands for the primitives, storing\n * them as the `runtimePrimitive.drawCommand`, respectively.\n *\n * @param {ModelRenderResources} modelRenderResources The model render resources\n *\n * @private\n */\nModelSceneGraph.prototype.createDrawCommands = function (\n  modelRenderResources,\n  frameState,\n) {\n  for (let i = 0; i < this._runtimeNodes.length; i++) {\n    const runtimeNode = this._runtimeNodes[i];\n\n    // If a node in the model was unreachable from the scene graph, there will\n    // be no corresponding runtime node and therefore should be skipped.\n    if (!defined(runtimeNode)) {\n      continue;\n    }\n\n    const nodeRenderResources = modelRenderResources.nodeRenderResources[i];\n\n    for (let j = 0; j < runtimeNode.runtimePrimitives.length; j++) {\n      const runtimePrimitive = runtimeNode.runtimePrimitives[j];\n\n      const primitiveRenderResources =\n        nodeRenderResources.primitiveRenderResources[j];\n\n      const drawCommand = ModelDrawCommands.buildModelDrawCommand(\n        primitiveRenderResources,\n        frameState,\n      );\n      runtimePrimitive.drawCommand = drawCommand;\n    }\n  }\n};\n\n/**\n * Configure the model pipeline stages. If the pipeline needs to be re-run, call\n * this method again to ensure the correct sequence of pipeline stages are\n * used.\n *\n * @param {FrameState} frameState\n * @private\n */\nModelSceneGraph.prototype.configurePipeline = function (frameState) {\n  const modelPipelineStages = this.modelPipelineStages;\n  modelPipelineStages.length = 0;\n\n  const model = this._model;\n  const fogRenderable = frameState.fog.enabled && frameState.fog.renderable;\n\n  if (defined(model.color)) {\n    modelPipelineStages.push(ModelColorPipelineStage);\n  }\n\n  // Skip these pipeline stages for classification models.\n  if (defined(model.classificationType)) {\n    return;\n  }\n\n  if (model.imageBasedLighting.enabled) {\n    modelPipelineStages.push(ImageBasedLightingPipelineStage);\n  }\n\n  if (model.isClippingEnabled()) {\n    modelPipelineStages.push(ModelClippingPlanesPipelineStage);\n  }\n\n  if (model.isClippingPolygonsEnabled()) {\n    modelPipelineStages.push(ModelClippingPolygonsPipelineStage);\n  }\n\n  if (model.hasSilhouette(frameState)) {\n    modelPipelineStages.push(ModelSilhouettePipelineStage);\n  }\n\n  if (\n    defined(model.splitDirection) &&\n    model.splitDirection !== SplitDirection.NONE\n  ) {\n    modelPipelineStages.push(ModelSplitterPipelineStage);\n  }\n\n  if (ModelType.is3DTiles(model.type)) {\n    modelPipelineStages.push(TilesetPipelineStage);\n  }\n\n  if (fogRenderable) {\n    modelPipelineStages.push(AtmospherePipelineStage);\n  }\n};\n\nModelSceneGraph.prototype.update = function (frameState, updateForAnimations) {\n  let i, j, k;\n\n  for (i = 0; i < this._runtimeNodes.length; i++) {\n    const runtimeNode = this._runtimeNodes[i];\n\n    // If a node in the model was unreachable from the scene graph, there will\n    // be no corresponding runtime node and therefore should be skipped.\n    if (!defined(runtimeNode)) {\n      continue;\n    }\n\n    for (j = 0; j < runtimeNode.updateStages.length; j++) {\n      const nodeUpdateStage = runtimeNode.updateStages[j];\n      nodeUpdateStage.update(runtimeNode, this, frameState);\n    }\n\n    const disableAnimations =\n      frameState.mode !== SceneMode.SCENE3D && this._model._projectTo2D;\n    if (updateForAnimations && !disableAnimations) {\n      this.updateJointMatrices();\n    }\n\n    for (j = 0; j < runtimeNode.runtimePrimitives.length; j++) {\n      const runtimePrimitive = runtimeNode.runtimePrimitives[j];\n      for (k = 0; k < runtimePrimitive.updateStages.length; k++) {\n        const stage = runtimePrimitive.updateStages[k];\n        stage.update(runtimePrimitive, this);\n      }\n    }\n  }\n};\n\nModelSceneGraph.prototype.updateModelMatrix = function (\n  modelMatrix,\n  frameState,\n) {\n  computeModelMatrix(this, modelMatrix);\n  if (frameState.mode !== SceneMode.SCENE3D) {\n    computeModelMatrix2D(this, frameState);\n  }\n\n  // Mark all root nodes as dirty. Any and all children will be\n  // affected recursively in the update stage.\n  const rootNodes = this._rootNodes;\n  for (let i = 0; i < rootNodes.length; i++) {\n    const node = this._runtimeNodes[rootNodes[i]];\n    node._transformDirty = true;\n  }\n};\n\n/**\n * Updates the joint matrices for the skins and nodes of the model.\n *\n * @private\n */\nModelSceneGraph.prototype.updateJointMatrices = function () {\n  const skinnedNodes = this._skinnedNodes;\n  const length = skinnedNodes.length;\n\n  for (let i = 0; i < length; i++) {\n    const nodeIndex = skinnedNodes[i];\n    const runtimeNode = this._runtimeNodes[nodeIndex];\n    runtimeNode.updateJointMatrices();\n  }\n};\n\n/**\n * A callback to be applied once at each runtime primitive in the\n * scene graph\n * @callback traverseSceneGraphCallback\n *\n * @param {ModelRuntimePrimitive} runtimePrimitive The runtime primitive for the current step of the traversal\n * @param {object} [options] A dictionary of additional options to be passed to the callback, or undefined if the callback does not need any additional information.\n *\n * @private\n */\n\n/**\n * Recursively traverse through the runtime nodes in the scene graph\n * using a post-order depth-first traversal to perform a callback on\n * their runtime primitives.\n *\n * @param {ModelSceneGraph} sceneGraph The scene graph.\n * @param {ModelRuntimeNode} runtimeNode The current runtime node.\n * @param {boolean} visibleNodesOnly Whether to only traverse nodes that are visible.\n * @param {traverseSceneGraphCallback} callback The callback to perform on the runtime primitives of the node.\n * @param {object} [callbackOptions] A dictionary of additional options to be passed to the callback, if needed.\n *\n * @private\n */\nfunction traverseSceneGraph(\n  sceneGraph,\n  runtimeNode,\n  visibleNodesOnly,\n  callback,\n  callbackOptions,\n) {\n  if (visibleNodesOnly && !runtimeNode.show) {\n    return;\n  }\n\n  const childrenLength = runtimeNode.children.length;\n  for (let i = 0; i < childrenLength; i++) {\n    const childRuntimeNode = runtimeNode.getChild(i);\n    traverseSceneGraph(\n      sceneGraph,\n      childRuntimeNode,\n      visibleNodesOnly,\n      callback,\n      callbackOptions,\n    );\n  }\n\n  const runtimePrimitives = runtimeNode.runtimePrimitives;\n  const runtimePrimitivesLength = runtimePrimitives.length;\n  for (let j = 0; j < runtimePrimitivesLength; j++) {\n    const runtimePrimitive = runtimePrimitives[j];\n    callback(runtimePrimitive, callbackOptions);\n  }\n}\n\nfunction forEachRuntimePrimitive(\n  sceneGraph,\n  visibleNodesOnly,\n  callback,\n  callbackOptions,\n) {\n  const rootNodes = sceneGraph._rootNodes;\n  const rootNodesLength = rootNodes.length;\n  for (let i = 0; i < rootNodesLength; i++) {\n    const rootNodeIndex = rootNodes[i];\n    const runtimeNode = sceneGraph._runtimeNodes[rootNodeIndex];\n    traverseSceneGraph(\n      sceneGraph,\n      runtimeNode,\n      visibleNodesOnly,\n      callback,\n      callbackOptions,\n    );\n  }\n}\n\nconst scratchBackFaceCullingOptions = {\n  backFaceCulling: undefined,\n};\n\n/**\n * Traverses through all draw commands and changes the back-face culling setting.\n *\n * @param {boolean} backFaceCulling The new value for the back-face culling setting.\n *\n * @private\n */\nModelSceneGraph.prototype.updateBackFaceCulling = function (backFaceCulling) {\n  const backFaceCullingOptions = scratchBackFaceCullingOptions;\n  backFaceCullingOptions.backFaceCulling = backFaceCulling;\n  forEachRuntimePrimitive(\n    this,\n    false,\n    updatePrimitiveBackFaceCulling,\n    backFaceCullingOptions,\n  );\n};\n\n// Callback is defined here to avoid allocating a closure in the render loop\nfunction updatePrimitiveBackFaceCulling(runtimePrimitive, options) {\n  const drawCommand = runtimePrimitive.drawCommand;\n  drawCommand.backFaceCulling = options.backFaceCulling;\n}\n\nconst scratchShadowOptions = {\n  shadowMode: undefined,\n};\n\n/**\n * Traverses through all draw commands and changes the shadow settings.\n *\n * @param {ShadowMode} shadowMode The new shadow settings.\n *\n * @private\n */\nModelSceneGraph.prototype.updateShadows = function (shadowMode) {\n  const shadowOptions = scratchShadowOptions;\n  shadowOptions.shadowMode = shadowMode;\n  forEachRuntimePrimitive(this, false, updatePrimitiveShadows, shadowOptions);\n};\n\n// Callback is defined here to avoid allocating a closure in the render loop\nfunction updatePrimitiveShadows(runtimePrimitive, options) {\n  const drawCommand = runtimePrimitive.drawCommand;\n  drawCommand.shadows = options.shadowMode;\n}\n\nconst scratchShowBoundingVolumeOptions = {\n  debugShowBoundingVolume: undefined,\n};\n\n/**\n * Traverses through all draw commands and changes whether to show the debug bounding volume.\n *\n * @param {boolean} debugShowBoundingVolume The new value for showing the debug bounding volume.\n *\n * @private\n */\nModelSceneGraph.prototype.updateShowBoundingVolume = function (\n  debugShowBoundingVolume,\n) {\n  const showBoundingVolumeOptions = scratchShowBoundingVolumeOptions;\n  showBoundingVolumeOptions.debugShowBoundingVolume = debugShowBoundingVolume;\n\n  forEachRuntimePrimitive(\n    this,\n    false,\n    updatePrimitiveShowBoundingVolume,\n    showBoundingVolumeOptions,\n  );\n};\n\n// Callback is defined here to avoid allocating a closure in the render loop\nfunction updatePrimitiveShowBoundingVolume(runtimePrimitive, options) {\n  const drawCommand = runtimePrimitive.drawCommand;\n  drawCommand.debugShowBoundingVolume = options.debugShowBoundingVolume;\n}\n\nconst scratchSilhouetteCommands = [];\nconst scratchEdgeCommands = [];\nconst scratchPushDrawCommandOptions = {\n  frameState: undefined,\n  hasSilhouette: undefined,\n};\n\n/**\n * Traverses through the scene graph and pushes the draw commands associated\n * with each primitive to the frame state's command list.\n *\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nModelSceneGraph.prototype.pushDrawCommands = function (frameState) {\n  // If a model has silhouettes, the commands that draw the silhouettes for\n  // each primitive can only be invoked after the entire model has drawn.\n  // Otherwise, the silhouette may draw on top of the model. This requires\n  // gathering the original commands and the silhouette commands separately.\n  const silhouetteCommands = scratchSilhouetteCommands;\n  silhouetteCommands.length = 0;\n\n  // Gather edge commands for the edge pass\n  const edgeCommands = scratchEdgeCommands;\n  edgeCommands.length = 0;\n\n  // Since this function is called each frame, the options object is\n  // preallocated in a scratch variable\n  const pushDrawCommandOptions = scratchPushDrawCommandOptions;\n  pushDrawCommandOptions.hasSilhouette = this._model.hasSilhouette(frameState);\n  pushDrawCommandOptions.frameState = frameState;\n\n  forEachRuntimePrimitive(\n    this,\n    true,\n    pushPrimitiveDrawCommands,\n    pushDrawCommandOptions,\n  );\n\n  addAllToArray(frameState.commandList, silhouetteCommands);\n  addAllToArray(frameState.commandList, edgeCommands);\n};\n\n// Callback is defined here to avoid allocating a closure in the render loop\nfunction pushPrimitiveDrawCommands(runtimePrimitive, options) {\n  const frameState = options.frameState;\n  const hasSilhouette = options.hasSilhouette;\n\n  const passes = frameState.passes;\n  const silhouetteCommands = scratchSilhouetteCommands;\n  const edgeCommands = scratchEdgeCommands;\n  const primitiveDrawCommand = runtimePrimitive.drawCommand;\n  primitiveDrawCommand.pushCommands(frameState, frameState.commandList);\n\n  // If a model has silhouettes, the commands that draw the silhouettes for\n  // each primitive can only be invoked after the entire model has drawn.\n  // Otherwise, the silhouette may draw on top of the model. This requires\n  // gathering the original commands and the silhouette commands separately.\n  if (hasSilhouette && !passes.pick) {\n    primitiveDrawCommand.pushSilhouetteCommands(frameState, silhouetteCommands);\n  }\n\n  // Add edge commands to the edge pass\n  if (defined(primitiveDrawCommand.pushEdgeCommands)) {\n    primitiveDrawCommand.pushEdgeCommands(frameState, edgeCommands);\n  }\n}\n\n/**\n * Sets the current value of an articulation stage.\n *\n * @param {string} articulationStageKey The name of the articulation, a space, and the name of the stage.\n * @param {number} value The numeric value of this stage of the articulation.\n *\n * @private\n */\nModelSceneGraph.prototype.setArticulationStage = function (\n  articulationStageKey,\n  value,\n) {\n  const names = articulationStageKey.split(\" \");\n  if (names.length !== 2) {\n    return;\n  }\n\n  const articulationName = names[0];\n  const stageName = names[1];\n\n  const runtimeArticulation = this._runtimeArticulations[articulationName];\n  if (defined(runtimeArticulation)) {\n    runtimeArticulation.setArticulationStage(stageName, value);\n  }\n};\n\n/**\n * Applies any modified articulation stages to the matrix of each node that participates\n * in any articulation.  Note that this will overwrite any nodeTransformations on participating nodes.\n *\n * @private\n */\nModelSceneGraph.prototype.applyArticulations = function () {\n  const runtimeArticulations = this._runtimeArticulations;\n  for (const articulationName in runtimeArticulations) {\n    if (runtimeArticulations.hasOwnProperty(articulationName)) {\n      const articulation = runtimeArticulations[articulationName];\n      articulation.apply();\n    }\n  }\n};\n\nexport default ModelSceneGraph;\n","import combine from \"../../Core/combine.js\";\nimport defined from \"../../Core/defined.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport ModelSilhouetteStageFS from \"../../Shaders/Model/ModelSilhouetteStageFS.js\";\nimport ModelSilhouetteStageVS from \"../../Shaders/Model/ModelSilhouetteStageVS.js\";\n\n/**\n * The model silhouette pipeline stage is responsible applying silhouettes to the model.\n *\n * @namespace ModelSilhouettePipelineStage\n *\n * @private\n */\nconst ModelSilhouettePipelineStage = {\n  name: \"ModelSilhouettePipelineStage\", // Helps with debugging\n};\n\n/**\n * Tracks how many silhouettes have been created. This value is used to\n * assign a reference number to the stencil.\n *\n * @type {number}\n * @private\n */\nModelSilhouettePipelineStage.silhouettesLength = 0;\n\n/**\n * Process a model. This modifies the following parts of the render resources:\n *\n * <ul>\n *  <li>defines the silhouette ID for the model, if it doesn't yet exist\n *  <li>adds a define to the shaders to indicate that the model uses silhouettes</li>\n *  <li>adds a function to the vertex shader to create the silhouette around the model</li>\n *  <li>adds a function to the fragment shader to apply color to the silhouette</li>\n *  <li>adds the uniforms to the shaders for the corresponding silhouette properties</li>\n *  <li>adds a uniform to distinguish which draw command is used to render the silhouette</li>\n *  <li>sets a variable in the render resources denoting whether the model has a silhouette</li>\n * </ul>\n *\n * <p>\n * Note that the model must have a normal attribute in order to use silhouettes. The flag for this is\n * added to the shader in GeometryPipelineStage.\n * </p>\n *\n * @param {ModelRenderResources} renderResources The render resources for this model.\n * @param {Model} model The model.\n * @param {FrameState} frameState The frameState.\n *\n * @private\n */\nModelSilhouettePipelineStage.process = function (\n  renderResources,\n  model,\n  frameState,\n) {\n  if (!defined(model._silhouetteId)) {\n    model._silhouetteId = ++ModelSilhouettePipelineStage.silhouettesLength;\n  }\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addDefine(\"HAS_SILHOUETTE\", undefined, ShaderDestination.BOTH);\n\n  shaderBuilder.addVertexLines(ModelSilhouetteStageVS);\n  shaderBuilder.addFragmentLines(ModelSilhouetteStageFS);\n\n  shaderBuilder.addUniform(\n    \"vec4\",\n    \"model_silhouetteColor\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  shaderBuilder.addUniform(\n    \"float\",\n    \"model_silhouetteSize\",\n    ShaderDestination.VERTEX,\n  );\n\n  // Rendering silhouettes requires two draw commands:\n  // - First, the model is rendered as normal, writing to the stencil buffer.\n  // - Second, the silhouette is drawn, and the stencil buffer is used to cutout\n  //   the part that overlaps the regular model.\n  //\n  // To avoid creating a second shader program to handle silhouettes, a uniform\n  // is used to distinguish between the two draw commands. The second command will set\n  // this uniform true, such that only it applies the silhouette stage.\n  shaderBuilder.addUniform(\n    \"bool\",\n    \"model_silhouettePass\",\n    ShaderDestination.BOTH,\n  );\n\n  const uniformMap = {\n    model_silhouetteColor: function () {\n      return model.silhouetteColor;\n    },\n    model_silhouetteSize: function () {\n      return model.silhouetteSize;\n    },\n    model_silhouettePass: function () {\n      // This will be set to true by the draw command that draws the silhouette.\n      return false;\n    },\n  };\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n  renderResources.hasSilhouette = true;\n};\n\nexport default ModelSilhouettePipelineStage;\n","import Matrix4 from \"../../Core/Matrix4.js\";\nimport Check from \"../../Core/Check.js\";\nimport Frozen from \"../../Core/Frozen.js\";\n\n/**\n * An in-memory representation of a skin that affects nodes in the {@link ModelSceneGraph}.\n * Skins should only be initialized after all of the {@link ModelRuntimeNode}s have been instantiated\n * by the scene graph.\n *\n * @param {object} options An object containing the following options:\n * @param {ModelComponents.Skin} options.skin The corresponding skin components from the 3D model\n * @param {ModelSceneGraph} options.sceneGraph The scene graph this skin belongs to.\n *\n * @alias ModelSkin\n * @constructor\n *\n * @private\n */\nfunction ModelSkin(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.skin\", options.skin);\n  Check.typeOf.object(\"options.sceneGraph\", options.sceneGraph);\n  //>>includeEnd('debug');\n\n  this._sceneGraph = options.sceneGraph;\n  const skin = options.skin;\n\n  this._skin = skin;\n\n  this._inverseBindMatrices = undefined;\n  this._joints = [];\n  this._jointMatrices = [];\n\n  initialize(this);\n}\n\nObject.defineProperties(ModelSkin.prototype, {\n  /**\n   * The internal skin this runtime skin represents.\n   *\n   * @memberof ModelSkin.prototype\n   * @type {ModelComponents.Skin}\n   * @readonly\n   *\n   * @private\n   */\n  skin: {\n    get: function () {\n      return this._skin;\n    },\n  },\n\n  /**\n   * The scene graph this skin belongs to.\n   *\n   * @memberof ModelSkin.prototype\n   * @type {ModelSceneGraph}\n   * @readonly\n   *\n   * @private\n   */\n  sceneGraph: {\n    get: function () {\n      return this._sceneGraph;\n    },\n  },\n\n  /**\n   * The inverse bind matrices of the skin.\n   *\n   * @memberof ModelSkin.prototype\n   * @type {Matrix4[]}\n   * @readonly\n   *\n   * @private\n   */\n  inverseBindMatrices: {\n    get: function () {\n      return this._inverseBindMatrices;\n    },\n  },\n\n  /**\n   * The joints of the skin.\n   *\n   * @memberof ModelSkin.prototype\n   * @type {ModelRuntimeNode[]}\n   * @readonly\n   *\n   * @private\n   */\n  joints: {\n    get: function () {\n      return this._joints;\n    },\n  },\n\n  /**\n   * The joint matrices for the skin, where each joint matrix is computed as\n   * jointMatrix = jointWorldTransform * inverseBindMatrix.\n   *\n   * Each node that references this skin is responsible for pre-multiplying its inverse\n   * world transform to the joint matrices for its own use.\n   *\n   * @memberof ModelSkin.prototype\n   * @type {Matrix4[]}\n   * @readonly\n   *\n   * @private\n   */\n  jointMatrices: {\n    get: function () {\n      return this._jointMatrices;\n    },\n  },\n});\n\nfunction initialize(runtimeSkin) {\n  const skin = runtimeSkin.skin;\n  const inverseBindMatrices = skin.inverseBindMatrices;\n  runtimeSkin._inverseBindMatrices = inverseBindMatrices;\n\n  const joints = skin.joints;\n  const length = joints.length;\n\n  const runtimeNodes = runtimeSkin.sceneGraph._runtimeNodes;\n  const runtimeJoints = runtimeSkin.joints;\n  const runtimeJointMatrices = runtimeSkin._jointMatrices;\n  for (let i = 0; i < length; i++) {\n    const jointIndex = joints[i].index;\n    const runtimeNode = runtimeNodes[jointIndex];\n    runtimeJoints.push(runtimeNode);\n\n    const inverseBindMatrix = inverseBindMatrices[i];\n    const jointMatrix = computeJointMatrix(\n      runtimeNode,\n      inverseBindMatrix,\n      new Matrix4(),\n    );\n    runtimeJointMatrices.push(jointMatrix);\n  }\n}\n\nfunction computeJointMatrix(joint, inverseBindMatrix, result) {\n  const jointWorldTransform = Matrix4.multiplyTransformation(\n    joint.transformToRoot,\n    joint.transform,\n    result,\n  );\n\n  result = Matrix4.multiplyTransformation(\n    jointWorldTransform,\n    inverseBindMatrix,\n    result,\n  );\n\n  return result;\n}\n\n/**\n * Updates the joint matrices for the skin.\n *\n * @private\n */\nModelSkin.prototype.updateJointMatrices = function () {\n  const jointMatrices = this._jointMatrices;\n  const length = jointMatrices.length;\n  for (let i = 0; i < length; i++) {\n    const joint = this.joints[i];\n    const inverseBindMatrix = this.inverseBindMatrices[i];\n    jointMatrices[i] = computeJointMatrix(\n      joint,\n      inverseBindMatrix,\n      jointMatrices[i],\n    );\n  }\n};\n\nexport default ModelSkin;\n","import combine from \"../../Core/combine.js\";\nimport ModelSplitterStageFS from \"../../Shaders/Model/ModelSplitterStageFS.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\n\n/**\n * The model splitting pipeline stage is responsible for discarding fragments on the wrong side of the splitter.\n *\n * @namespace ModelSplitterPipelineStage\n *\n * @private\n */\nconst ModelSplitterPipelineStage = {\n  name: \"ModelSplitterPipelineStage\", // Helps with debugging\n\n  SPLIT_DIRECTION_UNIFORM_NAME: \"model_splitDirection\",\n};\n\n/**\n * Process a model. This modifies the following parts of the render resources:\n *\n * <ul>\n *  <li>adds a define to the fragment shader to indicate that the model is split</li>\n *  <li>adds a function to the fragment shader to discard the fragment if it's on the wrong side of the splitter.</li>\n *  <li>adds a uniform indicating the \"splitDirection\" (side of the screen on which to show the model)\n *</ul>\n *\n * @param {ModelRenderResources} renderResources The render resources for this model.\n * @param {Model} model The model.\n * @param {FrameState} frameState The frameState.\n *\n * @private\n */\nModelSplitterPipelineStage.process = function (\n  renderResources,\n  model,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\n    \"HAS_MODEL_SPLITTER\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addFragmentLines(ModelSplitterStageFS);\n\n  const stageUniforms = {};\n\n  shaderBuilder.addUniform(\n    \"float\",\n    ModelSplitterPipelineStage.SPLIT_DIRECTION_UNIFORM_NAME,\n    ShaderDestination.FRAGMENT,\n  );\n  stageUniforms[ModelSplitterPipelineStage.SPLIT_DIRECTION_UNIFORM_NAME] =\n    function () {\n      return model.splitDirection;\n    };\n\n  renderResources.uniformMap = combine(\n    stageUniforms,\n    renderResources.uniformMap,\n  );\n};\n\nexport default ModelSplitterPipelineStage;\n","import AssociativeArray from \"../../Core/AssociativeArray.js\";\nimport Check from \"../../Core/Check.js\";\n\n/**\n * Rendering statistics for a single model.\n *\n * @alias ModelStatistics\n * @constructor\n *\n * @see Cesium3DTilesetStatistics\n *\n * @private\n */\nfunction ModelStatistics() {\n  /**\n   * Total number of points across all POINTS primitives in this model.\n   *\n   * @type {number}\n   * @private\n   */\n  this.pointsLength = 0;\n\n  /**\n   * Total number of triangles across all TRIANGLES, TRIANGLE_STRIP or\n   * TRIANGLE_FAN primitives in this model.\n   *\n   * @type {number}\n   * @private\n   */\n  this.trianglesLength = 0;\n\n  /**\n   * Total size of all geometry buffers in bytes. This accounts for the vertex\n   * attributes (which includes feature IDs and property attributes) and index\n   * buffers of all the model's primitives. Any attributes generated by the\n   * pipeline are included in this total.\n   *\n   * @type {number}\n   * @private\n   */\n  this.geometryByteLength = 0;\n\n  /**\n   * Total size of all textures in bytes. This includes materials,\n   * feature ID textures, and property textures.\n   *\n   * @type {number}\n   * @private\n   */\n  this.texturesByteLength = 0;\n\n  /**\n   * Total size of property tables. This excludes the batch textures used for\n   * picking and styling.\n   *\n   * @type {number}\n   * @private\n   */\n  this.propertyTablesByteLength = 0;\n\n  // Sets of buffers and textures that have already been counted.\n  // This is to prevent double-counting cached assets.\n  this._bufferIdSet = {};\n\n  /**\n   * The mapping from `texture.id` strings to the byte length of the\n   * respective texture\n   *\n   * @type {object}\n   * @private\n   */\n  this._textureIdByteLengths = {};\n\n  // Associated array of batch textures that have already been counted.\n  // This allows for quick look-up to check if a texture has been counted,\n  // while also allowing for dynamic texture counting.\n  this._batchTextureIdMap = new AssociativeArray();\n}\n\nObject.defineProperties(ModelStatistics.prototype, {\n  /**\n   * Total size of the batch textures used for picking and styling.\n   * Batch textures are created asynchronously, so this iterates\n   * over the textures to ensure their memory values are accurate.\n   *\n   * @memberof ModelStatistics.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  batchTexturesByteLength: {\n    get: function () {\n      const length = this._batchTextureIdMap.length;\n      const values = this._batchTextureIdMap.values;\n\n      let memory = 0;\n      for (let i = 0; i < length; i++) {\n        memory += values[i].byteLength;\n      }\n\n      return memory;\n    },\n  },\n});\n\n/**\n * Reset the memory counts for this model. This should be called each time the\n * draw command pipeline is rebuilt.\n *\n * @private\n */\nModelStatistics.prototype.clear = function () {\n  this.pointsLength = 0;\n  this.trianglesLength = 0;\n  this.geometryByteLength = 0;\n  this.texturesByteLength = 0;\n  this.propertyTablesByteLength = 0;\n\n  this._bufferIdSet = {};\n  this._textureIdByteLengths = {};\n  this._batchTextureIdMap.removeAll();\n};\n\n/**\n * Counts the given buffer's memory in bytes. If a buffer has\n * already been counted by these statistics, it will not be\n * counted again.\n *\n * @param {Buffer} buffer The GPU buffer associated with the model.\n * @param {boolean} hasCpuCopy Whether the buffer has a copy on the CPU via typed array.\n *\n * @private\n */\nModelStatistics.prototype.addBuffer = function (buffer, hasCpuCopy) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"buffer\", buffer);\n  Check.typeOf.bool(\"hasCpuCopy\", hasCpuCopy);\n  //>>includeEnd('debug');\n\n  if (!this._bufferIdSet.hasOwnProperty(buffer._id)) {\n    // If there's a CPU copy, count the memory twice.\n    const copies = hasCpuCopy ? 2 : 1;\n    this.geometryByteLength += buffer.sizeInBytes * copies;\n  }\n\n  // Simulate set insertion.\n  this._bufferIdSet[buffer._id] = true;\n};\n\n/**\n * Counts the given texture's memory in bytes. If a texture has\n * already been counted by these statistics, it will not be\n * counted again.\n * <p>\n * This is used to count the materials and property textures of\n * a model. Batch textures function differently and are counted\n * using <code>addBatchTexture</code> instead.\n * </p>\n *\n * @param {Texture} texture The texture associated with the model.\n *\n * @private\n */\nModelStatistics.prototype.addTexture = function (texture) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"texture\", texture);\n  //>>includeEnd('debug');\n\n  if (!this._textureIdByteLengths.hasOwnProperty(texture._id)) {\n    this.texturesByteLength += texture.sizeInBytes;\n    this._textureIdByteLengths[texture._id] = texture.sizeInBytes;\n  }\n};\n\n/**\n * Returns an array containing the `texture.id` values for all textures\n * that are part of the model.\n *\n * @returns {string[]} The texture IDs\n */\nModelStatistics.prototype.getTextureIds = function () {\n  return Object.keys(this._textureIdByteLengths);\n};\n\n/**\n * Returns the length, in bytes, of the texture data for the texture with\n * the given ID that is part of the model, or `undefined` if the model\n * does not contain the texture with the given ID.\n *\n * @param {string} textureId The texture ID\n * @returns {number|undefined} The texture byte length\n */\nModelStatistics.prototype.getTextureByteLengthById = function (textureId) {\n  return this._textureIdByteLengths[textureId];\n};\n\n/**\n * Counts the batch texture's memory in bytes. If a batch texture\n * has already been counted by these statistics, it will not be\n * counted again.\n * <p>\n * Batch textures are handled differently than other textures. They\n * include the batch and pick textures for the feature table, which\n * are created dynamically. As such, they may not have both textures\n * loaded by the time they are added to the statistics. Their memory\n * will thus be counted dynamically.\n * </p>\n *\n * @param {BatchTexture} batchTexture The batch texture associated with the model.\n *\n * @private\n */\nModelStatistics.prototype.addBatchTexture = function (batchTexture) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"batchTexture\", batchTexture);\n  //>>includeEnd('debug');\n\n  if (!this._batchTextureIdMap.contains(batchTexture._id)) {\n    this._batchTextureIdMap.set(batchTexture._id, batchTexture);\n  }\n};\n\nexport default ModelStatistics;\n","import Check from \"../../Core/Check.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\n\n/**\n * An enum to distinguish the different uses for {@link Model},\n * which include individual glTF models, and various 3D Tiles formats\n * (including glTF via <code>3DTILES_content_gltf</code>).\n *\n * @enum {string}\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst ModelType = {\n  /**\n   * An individual glTF model.\n   * <p>\n   * Not to be confused with {@link ModelType.TILE_GLTF}\n   * which is for 3D Tiles\n   * </p>\n   *\n   * @type {string}\n   * @constant\n   */\n  GLTF: \"GLTF\",\n  /**\n   * A glTF model used as tile content in a 3D Tileset via\n   * <code>3DTILES_content_gltf</code>.\n   * <p>\n   * Not to be confused with {@link ModelType.GLTF}\n   * which is for individual models\n   * </p>\n   *\n   * @type {string}\n   * @constant\n   */\n  TILE_GLTF: \"TILE_GLTF\",\n  /**\n   * A 3D Tiles 1.0 Batched 3D Model\n   *\n   * @type {string}\n   * @constant\n   */\n  TILE_B3DM: \"B3DM\",\n  /**\n   * A 3D Tiles 1.0 Instanced 3D Model\n   *\n   * @type {string}\n   * @constant\n   */\n  TILE_I3DM: \"I3DM\",\n  /**\n   * A 3D Tiles 1.0 Point Cloud\n   *\n   * @type {string}\n   * @constant\n   */\n  TILE_PNTS: \"PNTS\",\n\n  /**\n   * GeoJSON content for <code>MAXAR_content_geojson</code> extension\n   *\n   * @type {string}\n   * @constant\n   */\n  TILE_GEOJSON: \"TILE_GEOJSON\",\n};\n\n/**\n * Check if a model is used for 3D Tiles.\n * @param {ModelType} modelType The type of model\n * @returns {boolean} <code>true</code> if the model is a 3D Tiles format, <code>false</code> otherwise\n */\nModelType.is3DTiles = function (modelType) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"modelType\", modelType);\n  //>>includeEnd('debug');\n\n  switch (modelType) {\n    case ModelType.TILE_GLTF:\n    case ModelType.TILE_B3DM:\n    case ModelType.TILE_I3DM:\n    case ModelType.TILE_PNTS:\n    case ModelType.TILE_GEOJSON:\n      return true;\n    case ModelType.GLTF:\n      return false;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"modelType is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\nexport default Object.freeze(ModelType);\n","import Cartesian3 from \"../../Core/Cartesian3.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Quaternion from \"../../Core/Quaternion.js\";\nimport RuntimeError from \"../../Core/RuntimeError.js\";\nimport Axis from \"../Axis.js\";\nimport AttributeType from \"../AttributeType.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport CullFace from \"../CullFace.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport Matrix3 from \"../../Core/Matrix3.js\";\n\n/**\n * Utility functions for {@link Model}.\n *\n * @private\n */\nfunction ModelUtility() {}\n\n/**\n * Create a function for reporting when a model fails to load\n *\n * @param {string} type The type of object to report about\n * @param {string} path The URI of the model file\n * @param {Error} [error] The error which caused the failure\n * @returns {RuntimeError} An error for the failed model\n *\n * @private\n */\nModelUtility.getError = function (type, path, error) {\n  let message = `Failed to load ${type}: ${path}`;\n  if (defined(error) && defined(error.message)) {\n    message += `\\n${error.message}`;\n  }\n\n  const runtimeError = new RuntimeError(message);\n  if (defined(error)) {\n    // the original call stack is often more useful than the new error's stack,\n    // so add the information here\n    runtimeError.stack = `Original stack:\\n${error.stack}\\nHandler stack:\\n${runtimeError.stack}`;\n  }\n\n  return runtimeError;\n};\n\n/**\n * Get a transformation matrix from a node in the model.\n *\n * @param {ModelComponents.Node} node The node components\n * @returns {Matrix4} The computed transformation matrix. If no transformation matrix or parameters are specified, this will be the identity matrix.\n *\n * @private\n */\nModelUtility.getNodeTransform = function (node) {\n  if (defined(node.matrix)) {\n    return node.matrix;\n  }\n\n  return Matrix4.fromTranslationQuaternionRotationScale(\n    defined(node.translation) ? node.translation : Cartesian3.ZERO,\n    defined(node.rotation) ? node.rotation : Quaternion.IDENTITY,\n    defined(node.scale) ? node.scale : Cartesian3.ONE,\n  );\n};\n\n/**\n * Find an attribute by semantic such as POSITION or TANGENT.\n *\n * @param {ModelComponents.Primitive|ModelComponents.Instances} object The primitive components or instances object\n * @param {VertexAttributeSemantic|InstanceAttributeSemantic} semantic The semantic to search for\n * @param {number} [setIndex] The set index of the semantic. May be undefined for some semantics (POSITION, NORMAL, TRANSLATION, ROTATION, for example)\n * @return {ModelComponents.Attribute} The selected attribute, or undefined if not found.\n *\n * @private\n */\nModelUtility.getAttributeBySemantic = function (object, semantic, setIndex) {\n  const attributes = object.attributes;\n  const attributesLength = attributes.length;\n  for (let i = 0; i < attributesLength; ++i) {\n    const attribute = attributes[i];\n    const matchesSetIndex = defined(setIndex)\n      ? attribute.setIndex === setIndex\n      : true;\n    if (attribute.semantic === semantic && matchesSetIndex) {\n      return attribute;\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Similar to getAttributeBySemantic, but search using the name field only,\n * as custom attributes do not have a semantic.\n *\n * @param {ModelComponents.Primitive|ModelComponents.Instances} object The primitive components or instances object\n * @param {string} name The name of the attribute as it appears in the model file.\n * @return {ModelComponents.Attribute} The selected attribute, or undefined if not found.\n *\n * @private\n */\nModelUtility.getAttributeByName = function (object, name) {\n  const attributes = object.attributes;\n  const attributesLength = attributes.length;\n  for (let i = 0; i < attributesLength; ++i) {\n    const attribute = attributes[i];\n    if (attribute.name === name) {\n      return attribute;\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Find a feature ID from an array with label or positionalLabel matching the\n * given label\n * @param {ModelComponents.FeatureIdAttribute[]|ModelComponents.FeatureIdImplicitRange[]|ModelComponents.FeatureIdTexture[]} featureIds\n * @param {string} label the label to search for\n * @returns {ModelComponents.FeatureIdAttribute|ModelComponents.FeatureIdImplicitRange|ModelComponents.FeatureIdTexture} The feature ID set if found, otherwise <code>undefined</code>\n *\n * @private\n */\nModelUtility.getFeatureIdsByLabel = function (featureIds, label) {\n  for (let i = 0; i < featureIds.length; i++) {\n    const featureIdSet = featureIds[i];\n    if (\n      featureIdSet.positionalLabel === label ||\n      featureIdSet.label === label\n    ) {\n      return featureIdSet;\n    }\n  }\n\n  return undefined;\n};\n\nModelUtility.hasQuantizedAttributes = function (attributes) {\n  if (!defined(attributes)) {\n    return false;\n  }\n\n  for (let i = 0; i < attributes.length; i++) {\n    const attribute = attributes[i];\n    if (defined(attribute.quantization)) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * @param {ModelComponents.Attribute} attribute\n *\n * @private\n */\nModelUtility.getAttributeInfo = function (attribute) {\n  const semantic = attribute.semantic;\n  const setIndex = attribute.setIndex;\n\n  let variableName;\n  let hasSemantic = false;\n  if (defined(semantic)) {\n    variableName = VertexAttributeSemantic.getVariableName(semantic, setIndex);\n    hasSemantic = true;\n  } else {\n    variableName = attribute.name;\n    // According to the glTF 2.0 spec, custom attributes must be prepended with\n    // an underscore.\n    variableName = variableName.replace(/^_/, \"\");\n    variableName = variableName.toLowerCase();\n  }\n\n  const isVertexColor = /^color_\\d+$/.test(variableName);\n  const attributeType = attribute.type;\n  let glslType = AttributeType.getGlslType(attributeType);\n\n  // color_n can be either a vec3 or a vec4. But in GLSL we can always use\n  // attribute vec4 since GLSL promotes vec3 attribute data to vec4 with\n  // the .a channel set to 1.0.\n  if (isVertexColor) {\n    glslType = \"vec4\";\n  }\n\n  const isQuantized = defined(attribute.quantization);\n  let quantizedGlslType;\n  if (isQuantized) {\n    // The quantized color_n attribute also is promoted to a vec4 in the shader\n    quantizedGlslType = isVertexColor\n      ? \"vec4\"\n      : AttributeType.getGlslType(attribute.quantization.type);\n  }\n\n  return {\n    attribute: attribute,\n    isQuantized: isQuantized,\n    variableName: variableName,\n    hasSemantic: hasSemantic,\n    glslType: glslType,\n    quantizedGlslType: quantizedGlslType,\n  };\n};\n\nconst cartesianMaxScratch = new Cartesian3();\nconst cartesianMinScratch = new Cartesian3();\n\n/**\n * Get the minimum and maximum values for a primitive's POSITION attribute.\n * This is used to compute the bounding sphere of the primitive, as well as\n * the bounding sphere of the whole model.\n *\n * @param {ModelComponents.Primitive} primitive The primitive components.\n * @param {Cartesian3} [instancingTranslationMin] The component-wise minimum value of the instancing translation attribute.\n * @param {Cartesian3} [instancingTranslationMax] The component-wise maximum value of the instancing translation attribute.\n *\n * @returns {object} An object containing the minimum and maximum position values.\n *\n * @private\n */\nModelUtility.getPositionMinMax = function (\n  primitive,\n  instancingTranslationMin,\n  instancingTranslationMax,\n) {\n  const positionGltfAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    \"POSITION\",\n  );\n\n  let positionMax = positionGltfAttribute.max;\n  let positionMin = positionGltfAttribute.min;\n\n  if (defined(instancingTranslationMax) && defined(instancingTranslationMin)) {\n    positionMin = Cartesian3.add(\n      positionMin,\n      instancingTranslationMin,\n      cartesianMinScratch,\n    );\n    positionMax = Cartesian3.add(\n      positionMax,\n      instancingTranslationMax,\n      cartesianMaxScratch,\n    );\n  }\n\n  return {\n    min: positionMin,\n    max: positionMax,\n  };\n};\n\n/**\n * Model matrices in a model file (e.g. glTF) are typically in a different\n * coordinate system, such as with y-up instead of z-up in 3D Tiles.\n * This function returns a matrix that will correct this such that z is up,\n * and x is forward.\n *\n * @param {Axis} upAxis The original up direction\n * @param {Axis} forwardAxis The original forward direction\n * @param {Matrix4} result The matrix in which to store the result.\n * @returns {Matrix4} The axis correction matrix\n *\n * @private\n */\nModelUtility.getAxisCorrectionMatrix = function (upAxis, forwardAxis, result) {\n  result = Matrix4.clone(Matrix4.IDENTITY, result);\n\n  if (upAxis === Axis.Y) {\n    result = Matrix4.clone(Axis.Y_UP_TO_Z_UP, result);\n  } else if (upAxis === Axis.X) {\n    result = Matrix4.clone(Axis.X_UP_TO_Z_UP, result);\n  }\n\n  if (forwardAxis === Axis.Z) {\n    // glTF 2.0 has a Z-forward convention that must be adapted here to X-forward.\n    result = Matrix4.multiplyTransformation(result, Axis.Z_UP_TO_X_UP, result);\n  }\n\n  return result;\n};\n\nconst scratchMatrix3 = new Matrix3();\n\n/**\n * Get the cull face to use in the command's render state.\n * <p>\n * From the glTF spec section 3.7.4:\n * When a mesh primitive uses any triangle-based topology (i.e., triangles,\n * triangle strip, or triangle fan), the determinant of the node’s global\n * transform defines the winding order of that primitive. If the determinant\n * is a positive value, the winding order triangle faces is counterclockwise;\n * in the opposite case, the winding order is clockwise.\n * </p>\n *\n * @param {Matrix4} modelMatrix The model matrix\n * @param {PrimitiveType} primitiveType The primitive type\n * @returns {CullFace} The cull face\n *\n * @private\n */\nModelUtility.getCullFace = function (modelMatrix, primitiveType) {\n  if (!PrimitiveType.isTriangles(primitiveType)) {\n    return CullFace.BACK;\n  }\n\n  const matrix3 = Matrix4.getMatrix3(modelMatrix, scratchMatrix3);\n  return Matrix3.determinant(matrix3) < 0.0 ? CullFace.FRONT : CullFace.BACK;\n};\n\n/**\n * Sanitize the identifier to be used in a GLSL shader. The identifier\n * is sanitized as follows:\n * - Replace all sequences of non-alphanumeric characters with a single `_`.\n * - If the gl_ prefix is present, remove it. The prefix is reserved in GLSL.\n * - If the identifier starts with a digit, prefix it with an underscore.\n *\n * @example\n * // Returns \"customProperty\"\n * ModelUtility.sanitizeGlslIdentifier(\"gl_customProperty\");\n *\n * @example\n * // Returns \"_1234\"\n * ModelUtility.sanitizeGlslIdentifier(\"1234\");\n *\n * @param {string} identifier The original identifier.\n *\n * @returns {string} The sanitized version of the identifier.\n */\nModelUtility.sanitizeGlslIdentifier = function (identifier) {\n  // Remove non-alphanumeric characters and replace with a single underscore.\n  // This regex is designed so that the result won't have multiple underscores\n  // in a row.\n  let sanitizedIdentifier = identifier.replaceAll(/[^A-Za-z0-9]+/g, \"_\");\n  // Remove the gl_ prefix if present.\n  sanitizedIdentifier = sanitizedIdentifier.replace(/^gl_/, \"\");\n  // Add an underscore if first character is a digit.\n  if (/^\\d/.test(sanitizedIdentifier)) {\n    sanitizedIdentifier = `_${sanitizedIdentifier}`;\n  }\n\n  return sanitizedIdentifier;\n};\n\nModelUtility.supportedExtensions = {\n  AGI_articulations: true,\n  CESIUM_primitive_outline: true,\n  CESIUM_RTC: true,\n  EXT_feature_metadata: true,\n  EXT_implicit_cylinder_region: true,\n  EXT_implicit_ellipsoid_region: true,\n  EXT_instance_features: true,\n  EXT_mesh_features: true,\n  EXT_mesh_gpu_instancing: true,\n  EXT_meshopt_compression: true,\n  EXT_primitive_voxels: true,\n  EXT_structural_metadata: true,\n  EXT_texture_webp: true,\n  KHR_blend: true,\n  KHR_draco_mesh_compression: true,\n  KHR_implicit_shapes: true,\n  KHR_materials_common: true,\n  KHR_materials_pbrSpecularGlossiness: true,\n  KHR_materials_specular: true,\n  KHR_materials_anisotropy: true,\n  KHR_materials_clearcoat: true,\n  KHR_materials_unlit: true,\n  KHR_mesh_quantization: true,\n  KHR_techniques_webgl: true,\n  KHR_texture_basisu: true,\n  KHR_texture_transform: true,\n  KHR_gaussian_splatting: true,\n  KHR_gaussian_splatting_compression_spz_2: true,\n  WEB3D_quantized_attributes: true,\n};\n\n/**\n * Checks whether or not the extensions required by the glTF are\n * supported. If an unsupported extension is found, this throws\n * a {@link RuntimeError} with the extension name.\n *\n * @param {string[]} extensionsRequired The extensionsRequired array in the glTF.\n *\n * @exception {RuntimeError} Unsupported glTF Extension\n */\nModelUtility.checkSupportedExtensions = function (extensionsRequired) {\n  const length = extensionsRequired.length;\n  for (let i = 0; i < length; i++) {\n    const extension = extensionsRequired[i];\n    if (!ModelUtility.supportedExtensions[extension]) {\n      throw new RuntimeError(`Unsupported glTF Extension: ${extension}`);\n    }\n  }\n};\n\nexport default ModelUtility;\n","import AttributeType from \"../AttributeType.js\";\nimport combine from \"../../Core/combine.js\";\nimport defined from \"../../Core/defined.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport MorphTargetsStageVS from \"../../Shaders/Model/MorphTargetsStageVS.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\n/**\n * The morph targets pipeline stage processes the morph targets and weights of a primitive.\n *\n * @namespace MorphTargetsPipelineStage\n *\n * @private\n */\nconst MorphTargetsPipelineStage = {\n  name: \"MorphTargetsPipelineStage\", // Helps with debugging\n\n  FUNCTION_ID_GET_MORPHED_POSITION: \"getMorphedPosition\",\n  FUNCTION_SIGNATURE_GET_MORPHED_POSITION:\n    \"vec3 getMorphedPosition(in vec3 position)\",\n  FUNCTION_ID_GET_MORPHED_NORMAL: \"getMorphedNormal\",\n  FUNCTION_SIGNATURE_GET_MORPHED_NORMAL:\n    \"vec3 getMorphedNormal(in vec3 normal)\",\n  FUNCTION_ID_GET_MORPHED_TANGENT: \"getMorphedTangent\",\n  FUNCTION_SIGNATURE_GET_MORPHED_TANGENT:\n    \"vec3 getMorphedTangent(in vec3 tangent)\",\n};\n\n/**\n * This pipeline stage processes the morph targets and weights of a primitive,\n * adding the relevant attribute declarations and functions to the shaders.\n *\n * Processes a primitive. This stage modifies the following parts of the render resources:\n * <ul>\n *  <li> adds attribute declarations for the morph targets in the vertex shader\n *  <li> adds the uniform declaration for the morph weights in the vertex shader\n *  <li> adds functions to apply the morphs in the vertex shader\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n *\n * @private\n */\nMorphTargetsPipelineStage.process = function (renderResources, primitive) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\n    \"HAS_MORPH_TARGETS\",\n    undefined,\n    ShaderDestination.VERTEX,\n  );\n\n  addGetMorphedAttributeFunctionDeclarations(shaderBuilder);\n\n  const morphTargetsLength = primitive.morphTargets.length;\n  for (let i = 0; i < morphTargetsLength; i++) {\n    const attributes = primitive.morphTargets[i].attributes;\n\n    const attributesLength = attributes.length;\n    for (let j = 0; j < attributesLength; j++) {\n      const attribute = attributes[j];\n      const semantic = attribute.semantic;\n\n      // Cesium only supports morph targets for positions, normals, and tangents\n      if (\n        semantic !== VertexAttributeSemantic.POSITION &&\n        semantic !== VertexAttributeSemantic.NORMAL &&\n        semantic !== VertexAttributeSemantic.TANGENT\n      ) {\n        continue;\n      }\n\n      processMorphTargetAttribute(\n        renderResources,\n        attribute,\n        renderResources.attributeIndex,\n        i,\n      );\n      renderResources.attributeIndex++;\n    }\n  }\n\n  addGetMorphedAttributeFunctionReturns(shaderBuilder);\n\n  const weights = renderResources.runtimeNode.morphWeights;\n  const weightsLength = weights.length;\n  shaderBuilder.addUniform(\n    \"float\",\n    `u_morphWeights[${weightsLength}]`,\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addVertexLines(MorphTargetsStageVS);\n\n  const uniformMap = {\n    u_morphWeights: function () {\n      return renderResources.runtimeNode.morphWeights;\n    },\n  };\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n};\n\nconst scratchAttributeInfo = {\n  attributeString: undefined,\n  functionId: undefined,\n};\n\nfunction processMorphTargetAttribute(\n  renderResources,\n  attribute,\n  attributeIndex,\n  morphTargetIndex,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  addMorphTargetAttributeToRenderResources(\n    renderResources,\n    attribute,\n    attributeIndex,\n  );\n\n  const attributeInfo = getMorphTargetAttributeInfo(\n    attribute,\n    scratchAttributeInfo,\n  );\n\n  addMorphTargetAttributeDeclarationAndFunctionLine(\n    shaderBuilder,\n    attributeInfo,\n    morphTargetIndex,\n  );\n}\n\nfunction addMorphTargetAttributeToRenderResources(\n  renderResources,\n  attribute,\n  attributeIndex,\n) {\n  const vertexAttribute = {\n    index: attributeIndex,\n    value: defined(attribute.buffer) ? undefined : attribute.constant,\n    vertexBuffer: attribute.buffer,\n    componentsPerAttribute: AttributeType.getNumberOfComponents(attribute.type),\n    componentDatatype: attribute.componentDatatype,\n    offsetInBytes: attribute.byteOffset,\n    strideInBytes: attribute.byteStride,\n    normalize: attribute.normalized,\n  };\n\n  renderResources.attributes.push(vertexAttribute);\n}\n\nfunction getMorphTargetAttributeInfo(attribute, result) {\n  const semantic = attribute.semantic;\n  switch (semantic) {\n    case VertexAttributeSemantic.POSITION:\n      result.attributeString = \"Position\";\n      result.functionId =\n        MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_POSITION;\n      break;\n    case VertexAttributeSemantic.NORMAL:\n      result.attributeString = \"Normal\";\n      result.functionId =\n        MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_NORMAL;\n      break;\n    case VertexAttributeSemantic.TANGENT:\n      result.attributeString = \"Tangent\";\n      result.functionId =\n        MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_TANGENT;\n      break;\n    default:\n      break;\n  }\n  return result;\n}\n\nfunction addMorphTargetAttributeDeclarationAndFunctionLine(\n  shaderBuilder,\n  attributeInfo,\n  morphTargetIndex,\n) {\n  const attributeString = attributeInfo.attributeString;\n  const attributeName = `a_target${attributeString}_${morphTargetIndex}`;\n  const line = `morphed${attributeString} += u_morphWeights[${morphTargetIndex}] * a_target${attributeString}_${morphTargetIndex};`;\n  shaderBuilder.addAttribute(\"vec3\", attributeName);\n  shaderBuilder.addFunctionLines(attributeInfo.functionId, [line]);\n}\n\nfunction addGetMorphedAttributeFunctionDeclarations(shaderBuilder) {\n  shaderBuilder.addFunction(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_POSITION,\n    MorphTargetsPipelineStage.FUNCTION_SIGNATURE_GET_MORPHED_POSITION,\n    ShaderDestination.VERTEX,\n  );\n\n  const positionLine = \"vec3 morphedPosition = position;\";\n  shaderBuilder.addFunctionLines(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_POSITION,\n    [positionLine],\n  );\n\n  shaderBuilder.addFunction(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_NORMAL,\n    MorphTargetsPipelineStage.FUNCTION_SIGNATURE_GET_MORPHED_NORMAL,\n    ShaderDestination.VERTEX,\n  );\n\n  const normalLine = \"vec3 morphedNormal = normal;\";\n  shaderBuilder.addFunctionLines(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_NORMAL,\n    [normalLine],\n  );\n\n  shaderBuilder.addFunction(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_TANGENT,\n    MorphTargetsPipelineStage.FUNCTION_SIGNATURE_GET_MORPHED_TANGENT,\n    ShaderDestination.VERTEX,\n  );\n\n  const tangentLine = \"vec3 morphedTangent = tangent;\";\n  shaderBuilder.addFunctionLines(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_TANGENT,\n    [tangentLine],\n  );\n}\n\nfunction addGetMorphedAttributeFunctionReturns(shaderBuilder) {\n  const positionLine = \"return morphedPosition;\";\n  shaderBuilder.addFunctionLines(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_POSITION,\n    [positionLine],\n  );\n\n  const normalLine = \"return morphedNormal;\";\n  shaderBuilder.addFunctionLines(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_NORMAL,\n    [normalLine],\n  );\n\n  const tangentLine = \"return morphedTangent;\";\n  shaderBuilder.addFunctionLines(\n    MorphTargetsPipelineStage.FUNCTION_ID_GET_MORPHED_TANGENT,\n    [tangentLine],\n  );\n}\n\nexport default MorphTargetsPipelineStage;\n","import Check from \"../../Core/Check.js\";\nimport clone from \"../../Core/clone.js\";\n\n/**\n * A model is made up of one or more nodes in the scene graph. Some details\n * such as instancing are computed on a per-node basis. This class provides\n * a place to store such details. It also inherits some properties from\n * the model render resources.\n *\n * @constructor\n *\n * @param {ModelRenderResources} modelRenderResources The model resources to inherit\n * @param {ModelRuntimeNode} runtimeNode The in-memory representation of the scene graph node.\n *\n * @private\n */\nfunction NodeRenderResources(modelRenderResources, runtimeNode) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"modelRenderResources\", modelRenderResources);\n  Check.typeOf.object(\"runtimeNode\", runtimeNode);\n  //>>includeEnd('debug');\n\n  // Properties inherited from the ModelRenderResources.\n  /**\n   * A reference to the model. Inherited from the model render resources.\n   *\n   * @type {Model}\n   * @readonly\n   *\n   * @private\n   */\n  this.model = modelRenderResources.model;\n  /**\n   * An object used to build a shader incrementally. This is cloned from the\n   * model render resources because each node can compute a different shader.\n   *\n   * @type {ShaderBuilder}\n   * @readonly\n   *\n   * @private\n   */\n  this.shaderBuilder = modelRenderResources.shaderBuilder.clone();\n\n  /**\n   * A dictionary mapping uniform name to functions that return the uniform\n   * values. Inherited from the model render resources.\n   *\n   * @type {Object<string, Function>}\n   * @readonly\n   *\n   * @private\n   */\n  this.uniformMap = clone(modelRenderResources.uniformMap);\n\n  /**\n   * Options for configuring the alpha stage such as pass and alpha cutoff.\n   * Inherited from the model render resources.\n   *\n   * @type {ModelAlphaOptions}\n   * @readonly\n   *\n   * @private\n   */\n  this.alphaOptions = clone(modelRenderResources.alphaOptions);\n\n  /**\n   * An object storing options for creating a {@link RenderState}.\n   * The pipeline stages simply set the options, the render state is created\n   * when the {@link DrawCommand} is constructed. Inherited from the model\n   * render resources.\n   *\n   * @type {object}\n   * @readonly\n   *\n   * @private\n   */\n  this.renderStateOptions = clone(\n    modelRenderResources.renderStateOptions,\n    true,\n  );\n\n  /**\n   * Whether the model has a silhouette. This value indicates what draw commands\n   * are needed. Inherited from the model render resources.\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasSilhouette = modelRenderResources.hasSilhouette;\n\n  /**\n   * Whether the model is part of a tileset that uses the skipLevelOfDetail\n   * optimization. This value indicates what draw commands are needed.\n   * Inherited from the model render resources.\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasSkipLevelOfDetail = modelRenderResources.hasSkipLevelOfDetail;\n\n  // Other properties.\n  /**\n   * A reference to the runtime node\n   *\n   * @type {ModelRuntimeNode}\n   * @readonly\n   *\n   * @private\n   */\n  this.runtimeNode = runtimeNode;\n\n  /**\n   * An array of objects describing vertex attributes that will eventually\n   * be used to create a {@link VertexArray} for the draw command. Attributes\n   * at the node level may be needed for extensions such as EXT_mesh_gpu_instancing.\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.attributes = [];\n\n  /**\n   * The index to give to the next vertex attribute added to the attributes array.\n   * POSITION takes index 0.\n   *\n   * @type {number}\n   *\n   * @private\n   */\n  this.attributeIndex = 1;\n\n  /**\n   * The set index to assign to feature ID vertex attribute(s) created from the\n   * offset/repeat in the feature ID attribute.\n   *\n   * @type {number}\n   * @default 0\n   *\n   * @private\n   */\n  this.featureIdVertexAttributeSetIndex = 0;\n\n  /**\n   * The number of instances. This value is set by InstancingPipelineStage.\n   *\n   * @type {number}\n   * @default 0\n   *\n   * @private\n   */\n  this.instanceCount = 0;\n\n  /**\n   * The PrimitiveRenderResources for the primitives of the node.\n   *\n   * @type {PrimitiveRenderResources[]}\n   * @default []\n   *\n   * @private\n   */\n  this.primitiveRenderResources = [];\n}\n\nexport default NodeRenderResources;\n","import defined from \"../../Core/defined.js\";\n\n/**\n * The node statistics update stage updates memory usage statistics for a Model\n * on the node level. This counts the binary resources that exist for the\n * lifetime of the Model (e.g. attributes loaded by GltfLoader). It does not\n * count resources that are created every time the pipeline is run.\n * The individual pipeline stages are responsible for keeping track of any\n * additional memory they allocate.\n *\n * @namespace NodeStatisticsPipelineStage\n *\n * @private\n */\nconst NodeStatisticsPipelineStage = {\n  name: \"NodeStatisticsPipelineStage\", // Helps with debugging\n\n  // Expose some methods for testing\n  _countInstancingAttributes: countInstancingAttributes,\n  _countGeneratedBuffers: countGeneratedBuffers,\n};\n\nNodeStatisticsPipelineStage.process = function (\n  renderResources,\n  node,\n  frameState,\n) {\n  const statistics = renderResources.model.statistics;\n  const instances = node.instances;\n  const runtimeNode = renderResources.runtimeNode;\n\n  countInstancingAttributes(statistics, instances);\n  countGeneratedBuffers(statistics, runtimeNode);\n};\n\nfunction countInstancingAttributes(statistics, instances) {\n  if (!defined(instances)) {\n    return;\n  }\n\n  const attributes = instances.attributes;\n  const length = attributes.length;\n  for (let i = 0; i < length; i++) {\n    const attribute = attributes[i];\n    if (defined(attribute.buffer)) {\n      // Any typed arrays should have been unloaded before this stage.\n      const hasCpuCopy = false;\n      statistics.addBuffer(attribute.buffer, hasCpuCopy);\n    }\n  }\n}\n\nfunction countGeneratedBuffers(statistics, runtimeNode) {\n  if (defined(runtimeNode.instancingTransformsBuffer)) {\n    // The typed array containing the computed transforms isn't saved\n    // after the buffer is created.\n    const hasCpuCopy = false;\n    statistics.addBuffer(runtimeNode.instancingTransformsBuffer, hasCpuCopy);\n  }\n  if (defined(runtimeNode.instancingTransformsBuffer2D)) {\n    // The typed array containing the computed 2D transforms isn't saved\n    // after the buffer is created.\n    const hasCpuCopy = false;\n    statistics.addBuffer(runtimeNode.instancingTransformsBuffer2D, hasCpuCopy);\n  }\n\n  if (defined(runtimeNode.instancingTranslationBuffer2D)) {\n    // The typed array containing the computed 2D translations isn't saved\n    // after the buffer is created.\n    const hasCpuCopy = false;\n    statistics.addBuffer(runtimeNode.instancingTranslationBuffer2D, hasCpuCopy);\n  }\n}\n\nexport default NodeStatisticsPipelineStage;\n","import Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport Color from \"../../Core/Color.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport ModelType from \"./ModelType.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\n/**\n * The picking pipeline stage is responsible for handling picking of primitives.\n *\n * @namespace PickingPipelineStage\n * @private\n */\nconst PickingPipelineStage = {\n  name: \"PickingPipelineStage\", // Helps with debugging\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render resources:\n * <ul>\n *  <li>adds attribute and varying declaration for the pick color vertex attribute in the vertex shader for instanced meshes</li>\n *  <li>adds declaration for the pick color uniform for non-instanced meshes</li>\n *  <li>adds defines in the shader for when picking is enabled</li>\n *  <li>creates the pick ID objects in the context</li>\n * </ul>\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n */\nPickingPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const context = frameState.context;\n  const runtimeNode = renderResources.runtimeNode;\n  const shaderBuilder = renderResources.shaderBuilder;\n  const model = renderResources.model;\n  const instances = runtimeNode.node.instances;\n\n  if (renderResources.hasPropertyTable) {\n    processPickTexture(renderResources, primitive, instances, context);\n  } else if (defined(instances)) {\n    // For instanced meshes, a pick color vertex attribute is used.\n    processInstancedPickIds(renderResources, context);\n  } else {\n    // For non-instanced meshes, a pick color uniform is used.\n    const pickObject = buildPickObject(renderResources);\n\n    const pickId = context.createPickId(pickObject);\n    model._pipelineResources.push(pickId);\n    model._pickIds.push(pickId);\n\n    shaderBuilder.addUniform(\n      \"vec4\",\n      \"czm_pickColor\",\n      ShaderDestination.FRAGMENT,\n    );\n\n    const uniformMap = renderResources.uniformMap;\n    uniformMap.czm_pickColor = function () {\n      return pickId.color;\n    };\n\n    renderResources.pickId = \"czm_pickColor\";\n  }\n};\n\n/**\n * @private\n */\nfunction buildPickObject(renderResources, instanceId) {\n  const model = renderResources.model;\n\n  // Primitives that wrap Model may define the pickObject differently.\n  if (defined(model.pickObject)) {\n    return model.pickObject;\n  }\n\n  const detailPickObject = {\n    model: model,\n    node: renderResources.runtimeNode,\n    primitive: renderResources.runtimePrimitive,\n  };\n\n  let pickObject;\n\n  if (ModelType.is3DTiles(model.type)) {\n    // For 3D Tiles, the pick object's content and primitive are set to the Cesium3DTileContent that owns the model\n    // and the tileset it belongs to, respectively. The detail pick object is returned under the detail key.\n    const content = model.content;\n    pickObject = {\n      content: content,\n      primitive: content.tileset,\n      detail: detailPickObject,\n    };\n  } else {\n    // For models, the model itself is returned as the primitive, with the detail pick object under the detail key.\n    pickObject = {\n      primitive: model,\n      detail: detailPickObject,\n    };\n  }\n\n  pickObject.id = model.id;\n\n  if (defined(instanceId)) {\n    // For instanced models, an instanceId property is added to the pick object.\n    pickObject.instanceId = instanceId;\n  }\n\n  return pickObject;\n}\n\nfunction processPickTexture(renderResources, primitive, instances) {\n  const model = renderResources.model;\n  let featureTableId;\n  let featureIdAttribute;\n  const featureIdLabel = model.featureIdLabel;\n  const instanceFeatureIdLabel = model.instanceFeatureIdLabel;\n\n  if (defined(model.featureTableId)) {\n    // Extract the Feature Table ID from the Cesium3DTileContent.\n    featureTableId = model.featureTableId;\n  } else if (defined(instances)) {\n    // Extract the Feature Table ID from the instanced Feature ID attributes.\n    featureIdAttribute = ModelUtility.getFeatureIdsByLabel(\n      instances.featureIds,\n      instanceFeatureIdLabel,\n    );\n    featureTableId = featureIdAttribute.propertyTableId;\n  } else {\n    // Extract the Feature Table ID from the primitive Feature ID attributes.\n    featureIdAttribute = ModelUtility.getFeatureIdsByLabel(\n      primitive.featureIds,\n      featureIdLabel,\n    );\n    featureTableId = featureIdAttribute.propertyTableId;\n  }\n\n  const featureTable = model.featureTables[featureTableId];\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addUniform(\n    \"sampler2D\",\n    \"model_pickTexture\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  const batchTexture = featureTable.batchTexture;\n  renderResources.uniformMap.model_pickTexture = function () {\n    return batchTexture.pickTexture ?? batchTexture.defaultTexture;\n  };\n\n  // The feature ID is ignored if it is greater than the number of features.\n  renderResources.pickId =\n    \"((selectedFeature.id < int(model_featuresLength)) ? texture(model_pickTexture, selectedFeature.st) : vec4(0.0))\";\n}\n\nfunction processInstancedPickIds(renderResources, context) {\n  const instanceCount = renderResources.instanceCount;\n  const pickIds = new Array(instanceCount);\n  const pickIdsTypedArray = new Uint8Array(instanceCount * 4);\n\n  const model = renderResources.model;\n\n  const pipelineResources = model._pipelineResources;\n  for (let i = 0; i < instanceCount; i++) {\n    const pickObject = buildPickObject(renderResources, i);\n\n    const pickId = context.createPickId(pickObject);\n    pipelineResources.push(pickId);\n    pickIds[i] = pickId;\n\n    const pickColor = pickId.color;\n    pickIdsTypedArray[i * 4 + 0] = Color.floatToByte(pickColor.red);\n    pickIdsTypedArray[i * 4 + 1] = Color.floatToByte(pickColor.green);\n    pickIdsTypedArray[i * 4 + 2] = Color.floatToByte(pickColor.blue);\n    pickIdsTypedArray[i * 4 + 3] = Color.floatToByte(pickColor.alpha);\n  }\n\n  model._pickIds = pickIds;\n\n  const pickIdsBuffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: pickIdsTypedArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  // Destruction of resources allocated by the Model\n  // is handled by Model.destroyPipelineResources().\n  pickIdsBuffer.vertexArrayDestroyable = false;\n  const hasCpuCopy = false;\n  model.statistics.addBuffer(pickIdsBuffer, hasCpuCopy);\n  pipelineResources.push(pickIdsBuffer);\n\n  const pickIdsVertexAttribute = {\n    index: renderResources.attributeIndex++,\n    vertexBuffer: pickIdsBuffer,\n    componentsPerAttribute: 4,\n    componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n    normalize: true,\n    offsetInBytes: 0,\n    strideInBytes: 0,\n    instanceDivisor: 1,\n  };\n\n  renderResources.attributes.push(pickIdsVertexAttribute);\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addDefine(\"USE_PICKING\", undefined, ShaderDestination.BOTH);\n  shaderBuilder.addAttribute(\"vec4\", \"a_pickColor\");\n  shaderBuilder.addVarying(\"vec4\", \"v_pickColor\");\n  renderResources.pickId = \"v_pickColor\";\n}\n\nexport default PickingPipelineStage;\n","import AttributeCompression from \"../../Core/AttributeCompression.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Color from \"../../Core/Color.js\";\nimport Check from \"../../Core/Check.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport WebGLConstants from \"../../Core/WebGLConstants.js\";\nimport MersenneTwister from \"mersenne-twister\";\nimport Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport AlphaMode from \"../AlphaMode.js\";\nimport AttributeType from \"../AttributeType.js\";\nimport Axis from \"../Axis.js\";\nimport parseBatchTable from \"../parseBatchTable.js\";\nimport DracoLoader from \"../DracoLoader.js\";\nimport StructuralMetadata from \"../StructuralMetadata.js\";\nimport ResourceLoader from \"../ResourceLoader.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport PntsParser from \"../PntsParser.js\";\nimport ResourceLoaderState from \"../ResourceLoaderState.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\nconst Components = ModelComponents.Components;\nconst Scene = ModelComponents.Scene;\nconst Node = ModelComponents.Node;\nconst Primitive = ModelComponents.Primitive;\nconst Attribute = ModelComponents.Attribute;\nconst Quantization = ModelComponents.Quantization;\nconst FeatureIdAttribute = ModelComponents.FeatureIdAttribute;\nconst Material = ModelComponents.Material;\nconst MetallicRoughness = ModelComponents.MetallicRoughness;\n\n/**\n * Loads a .pnts point cloud and transcodes it into a {@link ModelComponents}\n *\n * @private\n */\nclass PntsLoader extends ResourceLoader {\n  /**\n   * @param {object} options An object containing the following properties\n   * @param {ArrayBuffer} options.arrayBuffer The array buffer of the pnts contents\n   * @param {number} [options.byteOffset] The byte offset to the beginning of the pnts contents in the array buffer\n   * @param {boolean} [options.loadAttributesFor2D=false] If true, load the positions buffer as a typed array for accurately projecting models to 2D.\n   */\n  constructor(options) {\n    super();\n\n    options = options ?? Frozen.EMPTY_OBJECT;\n\n    const arrayBuffer = options.arrayBuffer;\n    const byteOffset = options.byteOffset ?? 0;\n\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.object(\"options.arrayBuffer\", arrayBuffer);\n    //>>includeEnd('debug');\n\n    this._arrayBuffer = arrayBuffer;\n    this._byteOffset = byteOffset;\n    this._loadAttributesFor2D = options.loadAttributesFor2D ?? false;\n\n    this._parsedContent = undefined;\n    this._decodePromise = undefined;\n    this._decodedAttributes = undefined;\n\n    this._promise = undefined;\n    this._error = undefined;\n    this._state = ResourceLoaderState.UNLOADED;\n    this._buffers = [];\n\n    // The batch table object contains a json and a binary component access using keys of the same name.\n    this._components = undefined;\n    this._transform = Matrix4.IDENTITY;\n  }\n\n  /**\n   * The cache key of the resource\n   *\n   * @memberof PntsLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  get cacheKey() {\n    return undefined;\n  }\n\n  /**\n   * The loaded components.\n   *\n   * @memberof PntsLoader.prototype\n   *\n   * @type {ModelComponents.Components}\n   * @readonly\n   * @private\n   */\n  get components() {\n    return this._components;\n  }\n\n  /**\n   * A world-space transform to apply to the primitives.\n   * See {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/PointCloud#global-semantics}\n   *\n   * @memberof PntsLoader.prototype\n   *\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  get transform() {\n    return this._transform;\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<PntsLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  load() {\n    if (defined(this._promise)) {\n      return this._promise;\n    }\n\n    this._parsedContent = PntsParser.parse(this._arrayBuffer, this._byteOffset);\n    this._state = ResourceLoaderState.PROCESSING;\n\n    this._promise = Promise.resolve(this);\n  }\n\n  process(frameState) {\n    if (defined(this._error)) {\n      const error = this._error;\n      this._error = undefined;\n      throw error;\n    }\n\n    if (this._state === ResourceLoaderState.READY) {\n      return true;\n    }\n\n    if (this._state === ResourceLoaderState.PROCESSING) {\n      if (defined(this._decodePromise)) {\n        return false;\n      }\n\n      this._decodePromise = decodeDraco(this, frameState.context);\n    }\n\n    return false;\n  }\n\n  unload() {\n    const buffers = this._buffers;\n    for (let i = 0; i < buffers.length; i++) {\n      buffers[i].destroy();\n    }\n    buffers.length = 0;\n\n    this._components = undefined;\n    this._parsedContent = undefined;\n    this._arrayBuffer = undefined;\n  }\n}\n\nfunction decodeDraco(loader, context) {\n  const parsedContent = loader._parsedContent;\n  const draco = parsedContent.draco;\n\n  let decodePromise;\n  if (!defined(draco)) {\n    // The draco extension wasn't present,\n    decodePromise = Promise.resolve();\n  } else {\n    decodePromise = DracoLoader.decodePointCloud(draco, context);\n  }\n\n  if (!defined(decodePromise)) {\n    // Could not schedule Draco decoding this frame.\n    return;\n  }\n\n  loader._decodePromise = decodePromise;\n  return decodePromise\n    .then(function (decodeDracoResult) {\n      if (loader.isDestroyed()) {\n        return;\n      }\n\n      if (defined(decodeDracoResult)) {\n        processDracoAttributes(loader, draco, decodeDracoResult);\n      }\n      makeComponents(loader, context);\n      loader._state = ResourceLoaderState.READY;\n      return loader;\n    })\n    .catch(function (error) {\n      loader.unload();\n      loader._state = ResourceLoaderState.FAILED;\n      const errorMessage = \"Failed to load Draco pnts\";\n      // This error will be thrown next time process is called;\n      loader._error = loader.getError(errorMessage, error);\n    });\n}\n\nfunction processDracoAttributes(loader, draco, result) {\n  loader._state = ResourceLoaderState.READY;\n  const parsedContent = loader._parsedContent;\n\n  let attribute;\n  if (defined(result.POSITION)) {\n    attribute = {\n      name: \"POSITION\",\n      semantic: VertexAttributeSemantic.POSITION,\n      typedArray: result.POSITION.array,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC3,\n      isQuantized: false,\n    };\n\n    if (defined(result.POSITION.data.quantization)) {\n      // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n      // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n      const quantization = result.POSITION.data.quantization;\n      const range = quantization.range;\n      const quantizedVolumeScale = Cartesian3.fromElements(range, range, range);\n      const quantizedVolumeOffset = Cartesian3.unpack(quantization.minValues);\n      const quantizedRange = (1 << quantization.quantizationBits) - 1.0;\n\n      attribute.isQuantized = true;\n      attribute.quantizedRange = quantizedRange;\n      attribute.quantizedVolumeOffset = quantizedVolumeOffset;\n      attribute.quantizedVolumeScale = quantizedVolumeScale;\n      attribute.quantizedComponentDatatype =\n        quantizedRange <= 255\n          ? ComponentDatatype.UNSIGNED_BYTE\n          : ComponentDatatype.UNSIGNED_SHORT;\n      attribute.quantizedType = AttributeType.VEC3;\n    }\n\n    parsedContent.positions = attribute;\n  }\n\n  if (defined(result.NORMAL)) {\n    attribute = {\n      name: \"NORMAL\",\n      semantic: VertexAttributeSemantic.NORMAL,\n      typedArray: result.NORMAL.array,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC3,\n      isQuantized: false,\n      octEncoded: false,\n      octEncodedZXY: false,\n    };\n\n    if (defined(result.NORMAL.data.quantization)) {\n      const octEncodedRange =\n        (1 << result.NORMAL.data.quantization.quantizationBits) - 1.0;\n      attribute.quantizedRange = octEncodedRange;\n      attribute.octEncoded = true;\n      attribute.octEncodedZXY = true;\n      attribute.quantizedComponentDatatype = ComponentDatatype.UNSIGNED_BYTE;\n      attribute.quantizedType = AttributeType.VEC2;\n    }\n\n    parsedContent.normals = attribute;\n  }\n\n  if (defined(result.RGBA)) {\n    parsedContent.colors = {\n      name: \"COLOR\",\n      semantic: VertexAttributeSemantic.COLOR,\n      setIndex: 0,\n      typedArray: result.RGBA.array,\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      type: AttributeType.VEC4,\n      normalized: true,\n      isTranslucent: true,\n    };\n  } else if (defined(result.RGB)) {\n    parsedContent.colors = {\n      name: \"COLOR\",\n      semantic: VertexAttributeSemantic.COLOR,\n      setIndex: 0,\n      typedArray: result.RGB.array,\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      type: AttributeType.VEC3,\n      normalized: true,\n      isTranslucent: false,\n    };\n  }\n\n  // Transcode Batch ID (3D Tiles 1.0) -> Feature ID (3D Tiles Next)\n  if (defined(result.BATCH_ID)) {\n    const batchIds = result.BATCH_ID.array;\n    parsedContent.batchIds = {\n      name: \"_FEATURE_ID\",\n      semantic: VertexAttributeSemantic.FEATURE_ID,\n      setIndex: 0,\n      typedArray: batchIds,\n      componentDatatype: ComponentDatatype.fromTypedArray(batchIds),\n      type: AttributeType.SCALAR,\n    };\n  }\n\n  let batchTableJson = parsedContent.batchTableJson;\n\n  const batchTableProperties = draco.batchTableProperties;\n  for (const name in batchTableProperties) {\n    if (batchTableProperties.hasOwnProperty(name)) {\n      const property = result[name];\n\n      if (!defined(batchTableJson)) {\n        batchTableJson = {};\n      }\n\n      parsedContent.hasDracoBatchTable = true;\n\n      const data = property.data;\n      batchTableJson[name] = {\n        byteOffset: data.byteOffset,\n        // Draco returns the results like glTF values, but here\n        // we want to transcode to a batch table. It's redundant\n        // but necessary to use parseBatchTable()\n        type: transcodeAttributeType(data.componentsPerAttribute),\n        componentType: transcodeComponentType(data.componentDatatype),\n        // Each property is stored as a separate typed array, so\n        // store it here. parseBatchTable() will check for this\n        // instead of the entire binary body.\n        typedArray: property.array,\n      };\n    }\n  }\n  parsedContent.batchTableJson = batchTableJson;\n}\n\nfunction transcodeAttributeType(componentsPerAttribute) {\n  switch (componentsPerAttribute) {\n    case 1:\n      return \"SCALAR\";\n    case 2:\n      return \"VEC2\";\n    case 3:\n      return \"VEC3\";\n    case 4:\n      return \"VEC4\";\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\n        \"componentsPerAttribute must be a number from 1-4\",\n      );\n    //>>includeEnd('debug');\n  }\n}\n\nfunction transcodeComponentType(value) {\n  switch (value) {\n    case WebGLConstants.BYTE:\n      return \"BYTE\";\n    case WebGLConstants.UNSIGNED_BYTE:\n      return \"UNSIGNED_BYTE\";\n    case WebGLConstants.SHORT:\n      return \"SHORT\";\n    case WebGLConstants.UNSIGNED_SHORT:\n      return \"UNSIGNED_SHORT\";\n    case WebGLConstants.INT:\n      return \"INT\";\n    case WebGLConstants.UNSIGNED_INT:\n      return \"UNSIGNED_INT\";\n    case WebGLConstants.DOUBLE:\n      return \"DOUBLE\";\n    case WebGLConstants.FLOAT:\n      return \"FLOAT\";\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"value is not a valid WebGL constant\");\n    //>>includeEnd('debug');\n  }\n}\n\nfunction makeAttribute(loader, attributeInfo, context) {\n  let typedArray = attributeInfo.typedArray;\n  let quantization;\n  if (attributeInfo.octEncoded) {\n    quantization = new Quantization();\n    quantization.octEncoded = attributeInfo.octEncoded;\n    quantization.octEncodedZXY = attributeInfo.octEncodedZXY;\n    quantization.normalizationRange = attributeInfo.quantizedRange;\n    quantization.type = attributeInfo.quantizedType;\n    quantization.componentDatatype = attributeInfo.quantizedComponentDatatype;\n  }\n  if (attributeInfo.isQuantized) {\n    quantization = new Quantization();\n    const normalizationRange = attributeInfo.quantizedRange;\n    quantization.normalizationRange = normalizationRange;\n    // volume offset sometimes requires 64-bit precision so this is handled\n    // in the components.transform matrix.\n    quantization.quantizedVolumeOffset = Cartesian3.ZERO;\n    const quantizedVolumeDimensions = attributeInfo.quantizedVolumeScale;\n    quantization.quantizedVolumeDimensions = quantizedVolumeDimensions;\n    quantization.quantizedVolumeStepSize = Cartesian3.divideByScalar(\n      quantizedVolumeDimensions,\n      normalizationRange,\n      new Cartesian3(),\n    );\n    quantization.componentDatatype = attributeInfo.quantizedComponentDatatype;\n    quantization.type = attributeInfo.quantizedType;\n  }\n\n  const attribute = new Attribute();\n  attribute.name = attributeInfo.name;\n  attribute.semantic = attributeInfo.semantic;\n  attribute.setIndex = attributeInfo.setIndex;\n  attribute.componentDatatype = attributeInfo.componentDatatype;\n  attribute.type = attributeInfo.type;\n  attribute.normalized = attributeInfo.normalized ?? false;\n  attribute.min = attributeInfo.min;\n  attribute.max = attributeInfo.max;\n  attribute.quantization = quantization;\n\n  if (attributeInfo.isRGB565) {\n    typedArray = AttributeCompression.decodeRGB565(typedArray);\n  }\n\n  if (defined(attributeInfo.constantColor)) {\n    const packedColor = new Array(4);\n    attribute.constant = Color.pack(attributeInfo.constantColor, packedColor);\n  } else {\n    const buffer = Buffer.createVertexBuffer({\n      typedArray: typedArray,\n      context: context,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    buffer.vertexArrayDestroyable = false;\n    loader._buffers.push(buffer);\n    attribute.buffer = buffer;\n  }\n\n  const loadAttributesFor2D = loader._loadAttributesFor2D;\n  if (\n    attribute.semantic === VertexAttributeSemantic.POSITION &&\n    loadAttributesFor2D\n  ) {\n    attribute.typedArray = typedArray;\n  }\n\n  return attribute;\n}\n\nlet randomNumberGenerator;\nlet randomValues;\n\nfunction getRandomValues(samplesLength) {\n  // Use same random values across all runs\n  if (!defined(randomValues)) {\n    // Use MersenneTwister directly to avoid interfering with CesiumMath.nextRandomNumber()\n    // See https://github.com/CesiumGS/cesium/issues/9730\n    randomNumberGenerator = new MersenneTwister(0);\n    randomValues = new Array(samplesLength);\n    for (let i = 0; i < samplesLength; ++i) {\n      randomValues[i] = randomNumberGenerator.random();\n    }\n  }\n  return randomValues;\n}\n\nconst scratchMin = new Cartesian3();\nconst scratchMax = new Cartesian3();\nconst scratchPosition = new Cartesian3();\nfunction computeApproximateExtrema(positions) {\n  const positionsArray = positions.typedArray;\n  const maximumSamplesLength = 20;\n  const pointsLength = positionsArray.length / 3;\n  const samplesLength = Math.min(pointsLength, maximumSamplesLength);\n  const randomValues = getRandomValues(maximumSamplesLength);\n  const maxValue = Number.MAX_VALUE;\n  const minValue = -Number.MAX_VALUE;\n  let min = Cartesian3.fromElements(maxValue, maxValue, maxValue, scratchMin);\n  let max = Cartesian3.fromElements(minValue, minValue, minValue, scratchMax);\n  let i;\n  let index;\n  let position;\n  if (positions.isQuantized) {\n    // The quantized volume offset is not used here since it will become part of\n    // the model matrix.\n    min = Cartesian3.ZERO;\n    max = positions.quantizedVolumeScale;\n  } else {\n    for (i = 0; i < samplesLength; ++i) {\n      index = Math.floor(randomValues[i] * pointsLength);\n      position = Cartesian3.unpack(positionsArray, index * 3, scratchPosition);\n\n      Cartesian3.minimumByComponent(min, position, min);\n      Cartesian3.maximumByComponent(max, position, max);\n    }\n  }\n\n  positions.min = Cartesian3.clone(min);\n  positions.max = Cartesian3.clone(max);\n}\n\n// By default, point clouds are rendered as dark gray.\nconst defaultColorAttribute = {\n  name: VertexAttributeSemantic.COLOR,\n  semantic: VertexAttributeSemantic.COLOR,\n  setIndex: 0,\n  constantColor: Color.DARKGRAY,\n  componentDatatype: ComponentDatatype.FLOAT,\n  type: AttributeType.VEC4,\n  isQuantized: false,\n  isTranslucent: false,\n};\n\nfunction makeAttributes(loader, parsedContent, context) {\n  const attributes = [];\n  let attribute;\n  const positions = parsedContent.positions;\n  if (defined(positions)) {\n    computeApproximateExtrema(positions);\n    attribute = makeAttribute(loader, positions, context);\n    attribute.count = parsedContent.pointsLength;\n    attributes.push(attribute);\n  }\n\n  if (defined(parsedContent.normals)) {\n    attribute = makeAttribute(loader, parsedContent.normals, context);\n    attributes.push(attribute);\n  }\n\n  if (defined(parsedContent.colors)) {\n    attribute = makeAttribute(loader, parsedContent.colors, context);\n    attributes.push(attribute);\n  } else {\n    attribute = makeAttribute(loader, defaultColorAttribute, context);\n    attributes.push(attribute);\n  }\n\n  if (defined(parsedContent.batchIds)) {\n    attribute = makeAttribute(loader, parsedContent.batchIds, context);\n    attributes.push(attribute);\n  }\n\n  return attributes;\n}\n\nfunction makeStructuralMetadata(parsedContent, customAttributeOutput) {\n  const batchLength = parsedContent.batchLength;\n  const pointsLength = parsedContent.pointsLength;\n  const batchTableJson = parsedContent.batchTableJson;\n  const batchTableBinary = parsedContent.batchTableBinary;\n\n  // If there are batch IDs, parse as a property table. Otherwise, parse\n  // as property attributes.\n  const parseAsPropertyAttributes = !defined(parsedContent.batchIds);\n  if (\n    defined(batchTableBinary) ||\n    defined(batchTableJson) ||\n    parsedContent.hasDracoBatchTable\n  ) {\n    const count = batchLength ?? pointsLength;\n    return parseBatchTable({\n      count: count,\n      batchTable: batchTableJson,\n      binaryBody: batchTableBinary,\n      parseAsPropertyAttributes: parseAsPropertyAttributes,\n      customAttributeOutput: customAttributeOutput,\n    });\n  }\n\n  return new StructuralMetadata({\n    schema: {},\n    propertyTables: [],\n  });\n}\n\nfunction makeComponents(loader, context) {\n  const parsedContent = loader._parsedContent;\n\n  const metallicRoughness = new MetallicRoughness();\n  metallicRoughness.metallicFactor = 0;\n  metallicRoughness.roughnessFactor = 0.9;\n\n  const material = new Material();\n  material.metallicRoughness = metallicRoughness;\n\n  const colors = parsedContent.colors;\n  if (defined(colors) && colors.isTranslucent) {\n    material.alphaMode = AlphaMode.BLEND;\n  }\n\n  // Render point clouds as unlit, unless normals are present, in which case\n  // render as a PBR material.\n  const isUnlit = !defined(parsedContent.normals);\n  material.unlit = isUnlit;\n\n  const primitive = new Primitive();\n  primitive.attributes = makeAttributes(loader, parsedContent, context);\n  primitive.primitiveType = PrimitiveType.POINTS;\n  primitive.material = material;\n\n  if (defined(parsedContent.batchIds)) {\n    const featureIdAttribute = new FeatureIdAttribute();\n    featureIdAttribute.propertyTableId = 0;\n    featureIdAttribute.setIndex = 0;\n    featureIdAttribute.positionalLabel = \"featureId_0\";\n    primitive.featureIds.push(featureIdAttribute);\n  }\n\n  const node = new Node();\n  node.index = 0;\n  node.primitives = [primitive];\n\n  const scene = new Scene();\n  scene.nodes = [node];\n  scene.upAxis = Axis.Z;\n  scene.forwardAxis = Axis.X;\n\n  const components = new Components();\n  components.scene = scene;\n  components.nodes = [node];\n\n  // Per-point features will be parsed as property attributes and handled on\n  // the GPU since CPU styling would be too expensive. However, if batch IDs\n  // exist, features will be parsed as a property table.\n  //\n  // Property attributes refer to a custom attribute that will\n  // store the values; such attributes will be populated in this array\n  // as needed.\n  const customAttributeOutput = [];\n  components.structuralMetadata = makeStructuralMetadata(\n    parsedContent,\n    customAttributeOutput,\n  );\n\n  if (customAttributeOutput.length > 0) {\n    addPropertyAttributesToPrimitive(\n      loader,\n      primitive,\n      customAttributeOutput,\n      context,\n    );\n  }\n\n  if (defined(parsedContent.rtcCenter)) {\n    components.transform = Matrix4.multiplyByTranslation(\n      components.transform,\n      parsedContent.rtcCenter,\n      components.transform,\n    );\n  }\n\n  const positions = parsedContent.positions;\n  if (defined(positions) && positions.isQuantized) {\n    // The volume offset is sometimes in ECEF, so this is applied here rather\n    // than the dequantization shader to avoid jitter\n    components.transform = Matrix4.multiplyByTranslation(\n      components.transform,\n      positions.quantizedVolumeOffset,\n      components.transform,\n    );\n  }\n\n  loader._components = components;\n\n  // Free the parsed content and array buffer so we don't hold onto the large arrays.\n  loader._parsedContent = undefined;\n  loader._arrayBuffer = undefined;\n}\n\nfunction addPropertyAttributesToPrimitive(\n  loader,\n  primitive,\n  customAttributes,\n  context,\n) {\n  const attributes = primitive.attributes;\n\n  const length = customAttributes.length;\n  for (let i = 0; i < length; i++) {\n    const customAttribute = customAttributes[i];\n\n    // Upload the typed array to the GPU and free the CPU copy.\n    const buffer = Buffer.createVertexBuffer({\n      typedArray: customAttribute.typedArray,\n      context: context,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    buffer.vertexArrayDestroyable = false;\n    loader._buffers.push(buffer);\n    customAttribute.buffer = buffer;\n    customAttribute.typedArray = undefined;\n\n    attributes.push(customAttribute);\n  }\n\n  // The batch table is always transcoded as a single property attribute, so\n  // it will always be index 0\n  primitive.propertyAttributeIds = [0];\n}\n\nexport default PntsLoader;\n","import Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cartesian4 from \"../../Core/Cartesian4.js\";\nimport CesiumMath from \"../../Core/Math.js\";\nimport Cesium3DTileRefine from \"../Cesium3DTileRefine.js\";\nimport clone from \"../../Core/clone.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport ModelType from \"./ModelType.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport OrthographicFrustum from \"../../Core/OrthographicFrustum.js\";\nimport Pass from \"../../Renderer/Pass.js\";\nimport PointCloudStylingStageVS from \"../../Shaders/Model/PointCloudStylingStageVS.js\";\nimport RuntimeError from \"../../Core/RuntimeError.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\nconst scratchUniform = new Cartesian4();\n\n/**\n * The point cloud styling stage is responsible for applying color,\n * size, and show styles to point clouds at runtime. It also handles\n * point cloud shading provided by either the model or the tileset that\n * owns it. Point cloud shading is only applied if no point size style\n * is provided.\n *\n * @namespace PointCloudStylingPipelineStage\n *\n * @private\n */\nconst PointCloudStylingPipelineStage = {\n  name: \"PointCloudStylingPipelineStage\", // Helps with debugging\n};\n\n/**\n * Processes a primitive. If the model that owns it has a style, then\n * this stage modifies the following parts of the render resources:\n * <ul>\n *  <li>adds the styling functions to the vertex shaders</li>\n *  <li>adds a define to compute the position in world coordinates</li>\n *  <li>adds a varying to compute point cloud color</li>\n * </ul>\n *\n * If the model has point cloud shading, then this stage modifies the following\n * part of the render resources:\n * <ul>\n *  <li>adds vertex shader code to compute attenuation and update gl_PointSize</li>\n *  <li>updates the uniform map to pass in point cloud parameters</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nPointCloudStylingPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const model = renderResources.model;\n  const style = model.style;\n\n  // Point cloud styling will only be applied on the GPU if there is\n  // no batch table. If a batch table exists, then:\n  //  - the property attribute will not be defined\n  //  - the model will be using a feature table\n\n  const structuralMetadata = model.structuralMetadata;\n  const propertyAttributes = defined(structuralMetadata)\n    ? structuralMetadata.propertyAttributes\n    : undefined;\n\n  const hasFeatureTable =\n    defined(model.featureTableId) &&\n    model.featureTables[model.featureTableId].featuresLength > 0;\n\n  const hasBatchTable = !defined(propertyAttributes) && hasFeatureTable;\n\n  if (defined(style) && !hasBatchTable) {\n    const variableSubstitutionMap =\n      getVariableSubstitutionMap(propertyAttributes);\n    const shaderFunctionInfo = getStyleShaderFunctionInfo(\n      style,\n      variableSubstitutionMap,\n    );\n    addShaderFunctionsAndDefines(shaderBuilder, shaderFunctionInfo);\n\n    const propertyNames = getPropertyNames(shaderFunctionInfo);\n\n    const usesNormalSemantic = propertyNames.indexOf(\"normalMC\") >= 0;\n    const hasNormals = ModelUtility.getAttributeBySemantic(\n      primitive,\n      VertexAttributeSemantic.NORMAL,\n    );\n\n    if (usesNormalSemantic && !hasNormals) {\n      throw new RuntimeError(\n        \"Style references the NORMAL semantic but the point cloud does not have normals\",\n      );\n    }\n\n    shaderBuilder.addDefine(\n      \"COMPUTE_POSITION_WC_STYLE\",\n      undefined,\n      ShaderDestination.VERTEX,\n    );\n\n    // If the style is translucent, the alpha options must be adjusted.\n    const styleTranslucent = shaderFunctionInfo.styleTranslucent;\n    if (styleTranslucent) {\n      renderResources.alphaOptions.pass = Pass.TRANSLUCENT;\n    }\n  }\n\n  const pointCloudShading = model.pointCloudShading;\n  if (pointCloudShading.attenuation) {\n    shaderBuilder.addDefine(\n      \"HAS_POINT_CLOUD_ATTENUATION\",\n      undefined,\n      ShaderDestination.VERTEX,\n    );\n  }\n\n  if (pointCloudShading.backFaceCulling) {\n    shaderBuilder.addDefine(\n      \"HAS_POINT_CLOUD_BACK_FACE_CULLING\",\n      undefined,\n      ShaderDestination.VERTEX,\n    );\n  }\n\n  let content;\n  let is3DTiles;\n  let usesAddRefinement;\n\n  if (ModelType.is3DTiles(model.type)) {\n    is3DTiles = true;\n    content = model.content;\n    usesAddRefinement = content.tile.refine === Cesium3DTileRefine.ADD;\n  }\n\n  shaderBuilder.addUniform(\n    \"vec4\",\n    \"model_pointCloudParameters\",\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addVertexLines(PointCloudStylingStageVS);\n\n  const uniformMap = renderResources.uniformMap;\n  uniformMap.model_pointCloudParameters = function () {\n    const vec4 = scratchUniform;\n\n    // Point size\n    let defaultPointSize = 1.0;\n    if (is3DTiles) {\n      defaultPointSize = usesAddRefinement\n        ? 5.0\n        : content.tileset.memoryAdjustedScreenSpaceError;\n    }\n    vec4.x = pointCloudShading.maximumAttenuation ?? defaultPointSize;\n    vec4.x *= frameState.pixelRatio;\n\n    // Geometric error\n    const geometricError = getGeometricError(\n      renderResources,\n      primitive,\n      pointCloudShading,\n      content,\n    );\n    vec4.y = geometricError * pointCloudShading.geometricErrorScale;\n\n    const context = frameState.context;\n    const frustum = frameState.camera.frustum;\n    let depthMultiplier;\n\n    // Attenuation is maximumAttenuation in 2D/ortho\n    if (\n      frameState.mode === SceneMode.SCENE2D ||\n      frustum instanceof OrthographicFrustum\n    ) {\n      depthMultiplier = Number.POSITIVE_INFINITY;\n    } else {\n      depthMultiplier =\n        context.drawingBufferHeight / frameState.camera.frustum.sseDenominator;\n    }\n\n    // Depth multiplier\n    vec4.z = depthMultiplier;\n\n    // Time\n    if (is3DTiles) {\n      vec4.w = content.tileset.timeSinceLoad;\n    }\n\n    return vec4;\n  };\n};\n\nconst scratchDimensions = new Cartesian3();\nfunction getGeometricError(\n  renderResources,\n  primitive,\n  pointCloudShading,\n  content,\n) {\n  if (defined(content)) {\n    const geometricError = content.tile.geometricError;\n\n    if (geometricError > 0) {\n      return geometricError;\n    }\n  }\n\n  if (defined(pointCloudShading.baseResolution)) {\n    return pointCloudShading.baseResolution;\n  }\n\n  const positionAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.POSITION,\n  );\n  const pointsLength = positionAttribute.count;\n\n  // Estimate the geometric error\n  const nodeTransform = renderResources.runtimeNode.transform;\n  let dimensions = Cartesian3.subtract(\n    positionAttribute.max,\n    positionAttribute.min,\n    scratchDimensions,\n  );\n  // dimensions is a vector, as it is a subtraction between two points\n  dimensions = Matrix4.multiplyByPointAsVector(\n    nodeTransform,\n    dimensions,\n    scratchDimensions,\n  );\n  const volume = dimensions.x * dimensions.y * dimensions.z;\n  const geometricErrorEstimate = CesiumMath.cbrt(volume / pointsLength);\n  return geometricErrorEstimate;\n}\n\nconst scratchShaderFunctionInfo = {\n  colorStyleFunction: undefined,\n  showStyleFunction: undefined,\n  pointSizeStyleFunction: undefined,\n  styleTranslucent: false,\n};\n\nconst builtinVariableSubstitutionMap = {\n  POSITION: \"attributes.positionMC\",\n  POSITION_ABSOLUTE: \"v_positionWC\",\n  COLOR: \"attributes.color_0\",\n  NORMAL: \"attributes.normalMC\",\n};\n\nfunction getVariableSubstitutionMap(propertyAttributes) {\n  const variableSubstitutionMap = clone(builtinVariableSubstitutionMap);\n\n  if (!defined(propertyAttributes)) {\n    return variableSubstitutionMap;\n  }\n\n  for (let i = 0; i < propertyAttributes.length; i++) {\n    const propertyAttribute = propertyAttributes[i];\n    const properties = propertyAttribute.properties;\n    for (const propertyId in properties) {\n      // The property ID was already sanitized for GLSL by PntsLoader.\n      if (properties.hasOwnProperty(propertyId)) {\n        variableSubstitutionMap[propertyId] = `metadata.${propertyId}`;\n      }\n    }\n  }\n\n  return variableSubstitutionMap;\n}\nconst parameterList =\n  \"ProcessedAttributes attributes, \" +\n  \"Metadata metadata, \" +\n  \"float tiles3d_tileset_time\";\n\nfunction getStyleShaderFunctionInfo(style, variableSubstitutionMap) {\n  const info = scratchShaderFunctionInfo;\n  const shaderState = {\n    translucent: false,\n  };\n\n  info.colorStyleFunction = style.getColorShaderFunction(\n    `getColorFromStyle(${parameterList})`,\n    variableSubstitutionMap,\n    shaderState,\n  );\n  info.showStyleFunction = style.getShowShaderFunction(\n    `getShowFromStyle(${parameterList})`,\n    variableSubstitutionMap,\n    shaderState,\n  );\n  info.pointSizeStyleFunction = style.getPointSizeShaderFunction(\n    `getPointSizeFromStyle(${parameterList})`,\n    variableSubstitutionMap,\n    shaderState,\n  );\n  info.styleTranslucent =\n    defined(info.colorStyleFunction) && shaderState.translucent;\n\n  return info;\n}\n\nfunction addShaderFunctionsAndDefines(shaderBuilder, shaderFunctionInfo) {\n  const colorStyleFunction = shaderFunctionInfo.colorStyleFunction;\n  if (defined(colorStyleFunction)) {\n    shaderBuilder.addDefine(\n      \"HAS_POINT_CLOUD_COLOR_STYLE\",\n      undefined,\n      ShaderDestination.BOTH,\n    );\n    shaderBuilder.addVertexLines(colorStyleFunction);\n\n    // The point cloud may not necessarily have a color attribute.\n    // Use a custom varying to account for this.\n    shaderBuilder.addVarying(\"vec4\", \"v_pointCloudColor\");\n  }\n\n  const showStyleFunction = shaderFunctionInfo.showStyleFunction;\n  if (defined(showStyleFunction)) {\n    shaderBuilder.addDefine(\n      \"HAS_POINT_CLOUD_SHOW_STYLE\",\n      undefined,\n      ShaderDestination.BOTH,\n    );\n    shaderBuilder.addVertexLines(showStyleFunction);\n    shaderBuilder.addVarying(\"float\", \"v_pointCloudShow\");\n  }\n\n  const pointSizeStyleFunction = shaderFunctionInfo.pointSizeStyleFunction;\n  if (defined(pointSizeStyleFunction)) {\n    shaderBuilder.addDefine(\n      \"HAS_POINT_CLOUD_POINT_SIZE_STYLE\",\n      undefined,\n      ShaderDestination.VERTEX,\n    );\n    shaderBuilder.addVertexLines(pointSizeStyleFunction);\n  }\n}\n\n/**\n * Gets all the built-in property names used by the given style\n * function.\n *\n * @param {Function} source The style function.\n * @param {string[]} propertyNames The array of property names to add to.\n *\n * @private\n */\nfunction getBuiltinPropertyNames(source, propertyNames) {\n  const regex = /attributes\\.(\\w+)/g;\n  let matches = regex.exec(source);\n  while (matches !== null) {\n    const name = matches[1];\n    // Add the property name if it isn't already in the array.\n    if (propertyNames.indexOf(name) === -1) {\n      propertyNames.push(name);\n    }\n    matches = regex.exec(source);\n  }\n}\n\nfunction getPropertyNames(shaderFunctionInfo) {\n  const colorStyleFunction = shaderFunctionInfo.colorStyleFunction;\n  const showStyleFunction = shaderFunctionInfo.showStyleFunction;\n  const pointSizeStyleFunction = shaderFunctionInfo.pointSizeStyleFunction;\n\n  // Get the properties in use by the style.\n  const builtinPropertyNames = [];\n\n  if (defined(colorStyleFunction)) {\n    getBuiltinPropertyNames(colorStyleFunction, builtinPropertyNames);\n  }\n  if (defined(showStyleFunction)) {\n    getBuiltinPropertyNames(showStyleFunction, builtinPropertyNames);\n  }\n  if (defined(pointSizeStyleFunction)) {\n    getBuiltinPropertyNames(pointSizeStyleFunction, builtinPropertyNames);\n  }\n\n  return builtinPropertyNames;\n}\n\nexport default PointCloudStylingPipelineStage;\n","import Check from \"../../Core/Check.js\";\nimport defined from \"../../Core/defined.js\";\nimport Frozen from \"../../Core/Frozen.js\";\nimport PixelFormat from \"../../Core/PixelFormat.js\";\nimport ContextLimits from \"../../Renderer/ContextLimits.js\";\nimport Sampler from \"../../Renderer/Sampler.js\";\nimport Texture from \"../../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../../Renderer/TextureWrap.js\";\n\n// glTF does not allow an index value of 65535 because this is the primitive\n// restart value in some APIs.\nconst MAX_GLTF_UINT16_INDEX = 65534;\nconst MAX_GLTF_UINT8_INDEX = 255;\n\n/**\n * A class to handle the low-level details of processing indices and vertex\n * attributes for the CESIUM_primitive_outline extension.\n * <p>\n * To render outlines, a lookup texture is used 3 times, once per edge of a\n * triangle. In order to render correctly, all three vertices must agree on the\n * same ordering of the three edges when computing outline (texture)\n * coordinates. Sometimes this is not possible, as a vertex shared between\n * multiple triangles may become overly constrained. In such cases, vertices are\n * copied and indices are updated until valid outline coordinates can be\n * defined.\n * </p>\n *\n * @see {@link https://www.researchgate.net/publication/220067637_Fast_and_versatile_texture-based_wireframe_rendering|Fast and versatile texture-based wireframe rendering}\n *\n * @alias PrimitiveOutlineGenerator\n * @constructor\n *\n * @param {number} options Object with the following properties:\n * @param {Uint8Array|Uint16Array|Uint32Array} options.triangleIndices The original triangle indices of the primitive. The constructor takes ownership of this typed array as it will be modified internally. Use the updatedTriangleIndices getter to get the final result.\n * @param {number[]} options.outlineIndices The indices of edges in the triangle from the CESIUM_primitive_outline extension\n * @param {number} options.originalVertexCount The original number of vertices in the primitive\n * @example\n * // The constructor will compute the updated indices and generate outline\n * // coordinates.\n * const outlineGenerator = new PrimitiveOutlineGenerator({\n *   triangleIndices: primitive.indices.typedArray,\n *   outlineIndices: outlineIndices,\n *   originalVertexCount: primitive.attributes[0].count\n * });\n *\n * // Caller must update the indices (the data type may have been upgraded!)\n * primitive.indices.typedArray = outlineGenerator.updatedTriangleIndices;\n * primitive.indices.indexDatatype =\n *  IndexDatatype.fromTypedArray(primitive.indices.typedArray);\n *\n * // Create a new attribute for the generated outline coordinates\n * primitive.outlineCoordinates = new ModelComponents.Attribute();\n * // ... initialize as a vec3 attribute\n * primitive.outlineCoordinates.typedArray =\n *   outlineGenerator.outlineCoordinates;\n *\n * // Updating an attribute\n * const attribute = primitive.attributes[i];\n * attribute.typedArray = outlineGenerator.updateAttribute(\n *   attribute.typedArray\n * );\n *\n * @private\n */\nfunction PrimitiveOutlineGenerator(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const triangleIndices = options.triangleIndices;\n  const outlineIndices = options.outlineIndices;\n  const originalVertexCount = options.originalVertexCount;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.triangleIndices\", triangleIndices);\n  Check.typeOf.object(\"options.outlineIndices\", outlineIndices);\n  Check.typeOf.number(\"options.originalVertexCount\", originalVertexCount);\n  //>>includeEnd('debug');\n\n  /**\n   * The triangle indices. It will be modified in place.\n   *\n   * @type {Uint8Array|Uint16Array|Uint32Array}\n   *\n   * @private\n   */\n  this._triangleIndices = triangleIndices;\n\n  /**\n   * How many vertices were originally in the primitive\n   *\n   * @type {number}\n   *\n   * @private\n   */\n  this._originalVertexCount = originalVertexCount;\n\n  /**\n   * The outline indices represent edges of the primitive's triangle mesh where\n   * outlines must be drawn. This is stored as a hash set for efficient\n   * checks of whether an edge is present.\n   *\n   * @type {EdgeSet}\n   *\n   * @private\n   */\n  this._edges = new EdgeSet(outlineIndices, originalVertexCount);\n\n  /**\n   * The typed array that will store the outline texture coordinates\n   * once computed. This typed array should be turned into a vertex attribute\n   * when rendering outlines.\n   *\n   * @type {Float32Array}\n   *\n   * @private\n   */\n  this._outlineCoordinatesTypedArray = undefined;\n\n  /**\n   * Array containing the indices of any vertices that must be copied and\n   * appended to the list.\n   *\n   * @type {number[]}\n   *\n   * @private\n   */\n  this._extraVertices = [];\n\n  initialize(this);\n}\n\nObject.defineProperties(PrimitiveOutlineGenerator.prototype, {\n  /**\n   * The updated triangle indices after generating outlines. The caller is for\n   * responsible for updating the primitive's indices to use this array.\n   *\n   * @memberof PrimitiveOutlineGenerator.prototype\n   *\n   * @type {Uint8Array|Uint16Array|Uint32Array}\n   * @readonly\n   *\n   * @private\n   */\n  updatedTriangleIndices: {\n    get: function () {\n      return this._triangleIndices;\n    },\n  },\n\n  /**\n   * The computed outline coordinates. The caller is responsible for\n   * turning this into a vec3 attribute for rendering.\n   *\n   * @memberof PrimitiveOutlineGenerator.prototype\n   *\n   * @type {Float32Array}\n   * @readonly\n   *\n   * @private\n   */\n  outlineCoordinates: {\n    get: function () {\n      return this._outlineCoordinatesTypedArray;\n    },\n  },\n});\n\n/**\n * Initialize the outline generator from the CESIUM_primitive_outline\n * extension data. This updates the triangle indices and generates outline\n * coordinates, but does not update other attributes (see\n * {@link PrimitiveOutlineGenerator#updateAttribute})\n *\n * @param {PrimitiveOutlineGenerator} outlineGenerator The outline generator\n *\n * @private\n */\nfunction initialize(outlineGenerator) {\n  // triangle indices may be extended from 16-bits to 32 bits if needed.\n  let triangleIndices = outlineGenerator._triangleIndices;\n\n  const edges = outlineGenerator._edges;\n  const outlineCoordinates = [];\n  const extraVertices = outlineGenerator._extraVertices;\n  const vertexCount = outlineGenerator._originalVertexCount;\n\n  // Dictionary of unmatchable vertex index -> copied vertex index. This is\n  // used so we don't copy the same vertex more than necessary.\n  const vertexCopies = {};\n\n  // For each triangle, adjust vertex data so that the correct edges are outlined.\n  for (let i = 0; i < triangleIndices.length; i += 3) {\n    let i0 = triangleIndices[i];\n    let i1 = triangleIndices[i + 1];\n    let i2 = triangleIndices[i + 2];\n\n    // Check which edges need to be outlined based on the contents of the\n    // outline indices from the extension.\n    const all = false; // set this to true to draw a full wireframe.\n    const hasEdge01 = all || edges.hasEdge(i0, i1);\n    const hasEdge12 = all || edges.hasEdge(i1, i2);\n    const hasEdge20 = all || edges.hasEdge(i2, i0);\n\n    // Attempt to compute outline coordinates. If no consistent ordering of\n    // edges can be computed (due to constraints from adjacent faces), the\n    // first attempt may fail. In such cases, make a copy of a vertex and\n    // try again. This relaxes the constraints, so the while loop will\n    // eventually finish.\n    let unmatchableVertexIndex = matchAndStoreCoordinates(\n      outlineCoordinates,\n      i0,\n      i1,\n      i2,\n      hasEdge01,\n      hasEdge12,\n      hasEdge20,\n    );\n    while (defined(unmatchableVertexIndex)) {\n      // Copy the unmatchable index and try again.\n      let copy = vertexCopies[unmatchableVertexIndex];\n\n      // Only copy if we haven't already\n      if (!defined(copy)) {\n        // The new vertex will appear at the end of the vertex list\n        copy = vertexCount + extraVertices.length;\n\n        // Sometimes the copied vertex will in turn be a copy, so search\n        // for the original one\n        let original = unmatchableVertexIndex;\n        while (original >= vertexCount) {\n          original = extraVertices[original - vertexCount];\n        }\n\n        // Store the original vertex that needs to be copied\n        extraVertices.push(original);\n\n        // mark that we've seen this unmatchable vertex before so we don't\n        // copy it multiple times.\n        vertexCopies[unmatchableVertexIndex] = copy;\n      }\n\n      // Corner case: copying a vertex may overflow the range of an\n      // 8- or 16- bit index buffer, so upgrade to a larger data type.\n      if (\n        copy > MAX_GLTF_UINT16_INDEX &&\n        (triangleIndices instanceof Uint16Array ||\n          triangleIndices instanceof Uint8Array)\n      ) {\n        triangleIndices = new Uint32Array(triangleIndices);\n      } else if (\n        copy > MAX_GLTF_UINT8_INDEX &&\n        triangleIndices instanceof Uint8Array\n      ) {\n        triangleIndices = new Uint16Array(triangleIndices);\n      }\n\n      // Update the triangle indices buffer to use the copied vertex instead\n      // of the original one.\n      if (unmatchableVertexIndex === i0) {\n        i0 = copy;\n        triangleIndices[i] = copy;\n      } else if (unmatchableVertexIndex === i1) {\n        i1 = copy;\n        triangleIndices[i + 1] = copy;\n      } else {\n        i2 = copy;\n        triangleIndices[i + 2] = copy;\n      }\n\n      // Attempt to generate outline coordinates again. This is more likely\n      // to succeed since the copied vertex has no constraints on which order\n      // of the 3 edges to use.\n      unmatchableVertexIndex = matchAndStoreCoordinates(\n        outlineCoordinates,\n        i0,\n        i1,\n        i2,\n        hasEdge01,\n        hasEdge12,\n        hasEdge20,\n      );\n    }\n  }\n\n  // Store the triangle indices in case we had to expand to 32-bit indices\n  outlineGenerator._triangleIndices = triangleIndices;\n  outlineGenerator._outlineCoordinatesTypedArray = new Float32Array(\n    outlineCoordinates,\n  );\n}\n\n/**\n * This function attempts to compute a valid ordering of edges for this triangle\n * and if found, computes outline coordinates for the three vertices. If not\n * possible, one of the vertices is returned so it can be copied.\n *\n * @param {number[]} outlineCoordinates An array to store the computed outline coordinates. There are 3 components per vertex. This will be modified in place.\n * @param {number} i0 The index of the first vertex of the triangle.\n * @param {number} i1 The index of the second vertex of the triangle.\n * @param {number} i2 The index of the third vertex of the triangle.\n * @param {boolean} hasEdge01 Whether there is an outline edge between vertices 0 and 1 of the triangle\n * @param {boolean} hasEdge12 Whether there is an outline edge between vertices 1 and 2 of the triangle\n * @param {boolean} hasEdge20 Whether there is an outline edge between vertices 2 and 0 of the triangle\n * @returns {number} If it's not possible to compute consistent outline coordinates for this triangle, the index of the most constrained vertex of i0, i1 and i2 is returned. Otherwise, this function returns undefined to indicate a successful match.\n *\n * @private\n */\nfunction matchAndStoreCoordinates(\n  outlineCoordinates,\n  i0,\n  i1,\n  i2,\n  hasEdge01,\n  hasEdge12,\n  hasEdge20,\n) {\n  const a0 = hasEdge20 ? 1.0 : 0.0;\n  const b0 = hasEdge01 ? 1.0 : 0.0;\n  const c0 = 0.0;\n\n  const i0Mask = computeOrderMask(outlineCoordinates, i0, a0, b0, c0);\n  if (i0Mask === 0) {\n    return i0;\n  }\n\n  const a1 = 0.0;\n  const b1 = hasEdge01 ? 1.0 : 0.0;\n  const c1 = hasEdge12 ? 1.0 : 0.0;\n\n  const i1Mask = computeOrderMask(outlineCoordinates, i1, a1, b1, c1);\n  if (i1Mask === 0) {\n    return i1;\n  }\n\n  const a2 = hasEdge20 ? 1.0 : 0.0;\n  const b2 = 0.0;\n  const c2 = hasEdge12 ? 1.0 : 0.0;\n\n  const i2Mask = computeOrderMask(outlineCoordinates, i2, a2, b2, c2);\n  if (i2Mask === 0) {\n    return i2;\n  }\n\n  const workingOrders = i0Mask & i1Mask & i2Mask;\n\n  let a, b, c;\n\n  if (workingOrders & (1 << 0)) {\n    // 0 - abc\n    a = 0;\n    b = 1;\n    c = 2;\n  } else if (workingOrders & (1 << 1)) {\n    // 1 - acb\n    a = 0;\n    c = 1;\n    b = 2;\n  } else if (workingOrders & (1 << 2)) {\n    // 2 - bac\n    b = 0;\n    a = 1;\n    c = 2;\n  } else if (workingOrders & (1 << 3)) {\n    // 3 - bca\n    b = 0;\n    c = 1;\n    a = 2;\n  } else if (workingOrders & (1 << 4)) {\n    // 4 - cab\n    c = 0;\n    a = 1;\n    b = 2;\n  } else if (workingOrders & (1 << 5)) {\n    // 5 - cba\n    c = 0;\n    b = 1;\n    a = 2;\n  } else {\n    // No ordering works. Report the most constrained vertex (i.e. the one with\n    // fewest valid orderings) as unmatched so we copy that one.\n    const i0ValidOrderCount = popcount6Bit(i0Mask);\n    const i1ValidOrderCount = popcount6Bit(i1Mask);\n    const i2ValidOrderCount = popcount6Bit(i2Mask);\n    if (\n      i0ValidOrderCount < i1ValidOrderCount &&\n      i0ValidOrderCount < i2ValidOrderCount\n    ) {\n      return i0;\n    } else if (i1ValidOrderCount < i2ValidOrderCount) {\n      return i1;\n    }\n    return i2;\n  }\n\n  // We found a valid ordering of the edges, so store the outline coordinates\n  // for this triangle.\n  const i0Start = i0 * 3;\n  outlineCoordinates[i0Start + a] = a0;\n  outlineCoordinates[i0Start + b] = b0;\n  outlineCoordinates[i0Start + c] = c0;\n\n  const i1Start = i1 * 3;\n  outlineCoordinates[i1Start + a] = a1;\n  outlineCoordinates[i1Start + b] = b1;\n  outlineCoordinates[i1Start + c] = c1;\n\n  const i2Start = i2 * 3;\n  outlineCoordinates[i2Start + a] = a2;\n  outlineCoordinates[i2Start + b] = b2;\n  outlineCoordinates[i2Start + c] = c2;\n\n  // successful match\n  return undefined;\n}\n\n/**\n * Each vertex has three coordinates, a, b, and c.\n * a is the coordinate that applies to edge 2-0 for the vertex.\n * b is the coordinate that applies to edge 0-1 for the vertex.\n * c is the coordinate that applies to edge 1-2 for the vertex.\n *\n * A single triangle with all edges highlighted:\n *\n *                 | a | b | c |\n *                 | 1 | 1 | 0 |\n *                       0\n *                      / \\\n *                     /   \\\n *           edge 0-1 /     \\ edge 2-0\n *                   /       \\\n *                  /         \\\n * | a | b | c |   1-----------2   | a | b | c |\n * | 0 | 1 | 1 |     edge 1-2      | 1 | 0 | 1 |\n *\n * There are 6 possible orderings of coordinates a, b, and c:\n * 0 - abc\n * 1 - acb\n * 2 - bac\n * 3 - bca\n * 4 - cab\n * 5 - cba\n *\n * All vertices must use the _same ordering_ for the edges to be rendered\n * correctly. So we compute a bitmask for each vertex, where the bit at\n * each position indicates whether that ordering works (i.e. doesn't\n * conflict with already-assigned coordinates) for that vertex.\n *\n * Then we can find an ordering that works for all three vertices with a\n * bitwise AND.\n *\n * @param {number[]} outlineCoordinates The array of outline coordinates\n * @param {number} vertexIndex The index of the vertex to compute the mask for\n * @param {number} a The outline coordinate for edge 2-0\n * @param {number} b The outline coordinate for edge 0-1\n * @param {number} c The outline coordinate for edge 1-2\n * @returns {number} A bitmask with 6 bits where a 1 indicates the corresponding ordering is valid.\n *\n * @private\n */\nfunction computeOrderMask(outlineCoordinates, vertexIndex, a, b, c) {\n  const startIndex = vertexIndex * 3;\n  const first = outlineCoordinates[startIndex];\n  const second = outlineCoordinates[startIndex + 1];\n  const third = outlineCoordinates[startIndex + 2];\n\n  // If one coordinate is undefined, they all are since matchAndStoreCoordinates sets\n  // all 3 components at once. In this case, all orderings are fine.\n  if (!defined(first)) {\n    return 0b111111;\n  }\n\n  return (\n    ((first === a && second === b && third === c) << 0) |\n    ((first === a && second === c && third === b) << 1) |\n    ((first === b && second === a && third === c) << 2) |\n    ((first === b && second === c && third === a) << 3) |\n    ((first === c && second === a && third === b) << 4) |\n    ((first === c && second === b && third === a) << 5)\n  );\n}\n\n/**\n * Compute the popcount for 6-bit integers (values 0-63). This is the\n * number of 1s in the binary representation of the value.\n *\n * @param {number} value The value to compute the popcount for\n * @returns {number} The number of 1s in the binary representation of value\n *\n * @private\n */\nfunction popcount6Bit(value) {\n  return (\n    (value & 1) +\n    ((value >> 1) & 1) +\n    ((value >> 2) & 1) +\n    ((value >> 3) & 1) +\n    ((value >> 4) & 1) +\n    ((value >> 5) & 1)\n  );\n}\n\n/**\n * After computing the outline coordinates, some vertices may need to be\n * copied and appended to the end of the list of vertices. This function updates\n * a typed array for a single attribute (e.g. POSITION or NORMAL).\n *\n * @param {Uint8Array|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array} attributeTypedArray The attribute values to update. This function takes ownership of this typed array\n * @returns {Uint8Array|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array} A new typed array that contains the existing attribute values, plus any copied values at the end.\n *\n * @private\n */\nPrimitiveOutlineGenerator.prototype.updateAttribute = function (\n  attributeTypedArray,\n) {\n  const extraVertices = this._extraVertices;\n\n  const originalLength = attributeTypedArray.length;\n\n  // This is a stride in number of typed elements. For example, a VEC3 would\n  // have a stride of 3 (floats)\n  const stride = originalLength / this._originalVertexCount;\n\n  const extraVerticesLength = extraVertices.length;\n\n  // Make a larger typed array of the same type as the input\n  const ArrayType = attributeTypedArray.constructor;\n  const result = new ArrayType(\n    attributeTypedArray.length + extraVerticesLength * stride,\n  );\n\n  // Copy original vertices\n  result.set(attributeTypedArray);\n\n  // Copy the vertices added for outlining\n  for (let i = 0; i < extraVerticesLength; i++) {\n    const sourceIndex = extraVertices[i] * stride;\n    const resultIndex = originalLength + i * stride;\n    for (let j = 0; j < stride; j++) {\n      result[resultIndex + j] = result[sourceIndex + j];\n    }\n  }\n\n  return result;\n};\n\n/**\n * Create a mip-mapped lookup texture for rendering outlines. The texture is\n * constant, so it is cached on the context.\n *\n * @param {Context} context The context to use for creating the texture\n * @returns {Texture} The outline lookup texture.\n *\n * @private\n */\nPrimitiveOutlineGenerator.createTexture = function (context) {\n  let cache = context.cache.modelOutliningCache;\n  if (!defined(cache)) {\n    cache = context.cache.modelOutliningCache = {};\n  }\n\n  if (defined(cache.outlineTexture)) {\n    return cache.outlineTexture;\n  }\n\n  const maxSize = Math.min(4096, ContextLimits.maximumTextureSize);\n\n  let size = maxSize;\n  const levelZero = createMipLevel(size);\n\n  const mipLevels = [];\n\n  while (size > 1) {\n    size >>= 1;\n    mipLevels.push(createMipLevel(size));\n  }\n\n  const texture = new Texture({\n    context: context,\n    source: {\n      arrayBufferView: levelZero,\n      mipLevels: mipLevels,\n    },\n    width: maxSize,\n    height: 1,\n    pixelFormat: PixelFormat.LUMINANCE,\n    sampler: new Sampler({\n      wrapS: TextureWrap.CLAMP_TO_EDGE,\n      wrapT: TextureWrap.CLAMP_TO_EDGE,\n      minificationFilter: TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n      magnificationFilter: TextureMagnificationFilter.LINEAR,\n    }),\n  });\n\n  cache.outlineTexture = texture;\n\n  return texture;\n};\n\n/**\n * Create an outline lookup texture for a single mip level. This is a texture of\n * mostly 0 values, except for the last value which is brighter to indicate\n * the outline.\n *\n * @param {number} size The width of the texture for this mip level\n * @returns {Uint8Array} A typed array containing the texels of the mip level\n *\n * @private\n */\nfunction createMipLevel(size) {\n  const texture = new Uint8Array(size);\n\n  // This lookup texture creates an outline with width 0.75 px in screen space.\n  texture[size - 1] = 192;\n\n  // As we reach the top of the mip pyramid, a single set pixel becomes a\n  // significant portion of the texture. This doesn't look great when zoomed\n  // out, so attenuate the value by 50% at each level.\n  if (size === 8) {\n    texture[size - 1] = 96;\n  } else if (size === 4) {\n    texture[size - 1] = 48;\n  } else if (size === 2) {\n    texture[size - 1] = 24;\n  } else if (size === 1) {\n    texture[size - 1] = 12;\n  }\n  return texture;\n}\n\n/**\n * A hash set that provides quick lookups of whether an edge exists between\n * two vertices.\n *\n * @alias EdgeSet\n * @constructor\n *\n * @param {number[]} edgeIndices An array of vertex indices with an even number of elements where each pair of indices defines an edge.\n * @param {number} originalVertexCount The original number of vertices. This is used for computing a hash function.\n *\n * @private\n */\nfunction EdgeSet(edgeIndices, originalVertexCount) {\n  /**\n   * Original number of vertices in the primitive. This is used for computing\n   * the hash key\n   *\n   * @type {number}\n   *\n   * @private\n   */\n  this._originalVertexCount = originalVertexCount;\n\n  /**\n   * The internal hash set used to store the edges. Edges are hashed as follows:\n   * <p>\n   * smallerVertexIndex * originalVertexCount + biggerVertexIndex\n   * <p>\n   * @type {Set}\n   *\n   * @private\n   */\n  this._edges = new Set();\n  for (let i = 0; i < edgeIndices.length; i += 2) {\n    const a = edgeIndices[i];\n    const b = edgeIndices[i + 1];\n    const small = Math.min(a, b);\n    const big = Math.max(a, b);\n    const hash = small * this._originalVertexCount + big;\n    this._edges.add(hash);\n  }\n}\n\n/**\n * Check if an edge exists in the set. The order of the input vertices does\n * not matter.\n * @param {number} a The first index\n * @param {number} b The second index\n * @returns {boolean} true if there is an edge between a and b\n *\n * @private\n */\nEdgeSet.prototype.hasEdge = function (a, b) {\n  const small = Math.min(a, b);\n  const big = Math.max(a, b);\n  const hash = small * this._originalVertexCount + big;\n  return this._edges.has(hash);\n};\n\nexport default PrimitiveOutlineGenerator;\n","import AttributeType from \"../AttributeType.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport PrimitiveOutlineGenerator from \"./PrimitiveOutlineGenerator.js\";\nimport PrimitiveOutlineStageVS from \"../../Shaders/Model/PrimitiveOutlineStageVS.js\";\nimport PrimitiveOutlineStageFS from \"../../Shaders/Model/PrimitiveOutlineStageFS.js\";\n\n/**\n * The primitive outline pipeline stage configures the shader to render outlines\n * from the CESIUM_primitive_outline extension.\n *\n * @namespace PrimitiveOutlinePipelineStage\n *\n * @private\n */\nconst PrimitiveOutlinePipelineStage = {\n  name: \"PrimitiveOutlinePipelineStage\", // Helps with debugging\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render\n * resources:\n * <ul>\n *  <li>Declares a new attribute for the outline (texture) coordinates</li>\n *  <li>Adds shader code to overlay outlines on the primitive after lighting computations</li>\n *  <li>Add uniforms for showing the outline and changing its color</li>\n * </ul>\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {FrameState} frameState The frame state\n * @private\n */\nPrimitiveOutlinePipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n  const uniformMap = renderResources.uniformMap;\n\n  shaderBuilder.addDefine(\n    \"HAS_PRIMITIVE_OUTLINE\",\n    undefined,\n    ShaderDestination.BOTH,\n  );\n\n  shaderBuilder.addAttribute(\"vec3\", \"a_outlineCoordinates\");\n  shaderBuilder.addVarying(\"vec3\", \"v_outlineCoordinates\");\n\n  const outlineCoordinates = primitive.outlineCoordinates;\n  const vertexAttribute = {\n    index: renderResources.attributeIndex++,\n    vertexBuffer: outlineCoordinates.buffer,\n    componentsPerAttribute: AttributeType.getNumberOfComponents(\n      outlineCoordinates.type,\n    ),\n    componentDatatype: outlineCoordinates.componentDatatype,\n    offsetInBytes: outlineCoordinates.byteOffset,\n    strideInBytes: outlineCoordinates.byteStride,\n    normalize: outlineCoordinates.normalized,\n  };\n  renderResources.attributes.push(vertexAttribute);\n\n  shaderBuilder.addUniform(\n    \"sampler2D\",\n    \"model_outlineTexture\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  // This automatically handles caching the texture on the context\n  const outlineTexture = PrimitiveOutlineGenerator.createTexture(\n    frameState.context,\n  );\n  uniformMap.model_outlineTexture = function () {\n    return outlineTexture;\n  };\n\n  const model = renderResources.model;\n  shaderBuilder.addUniform(\n    \"vec4\",\n    \"model_outlineColor\",\n    ShaderDestination.FRAGMENT,\n  );\n  uniformMap.model_outlineColor = function () {\n    return model.outlineColor;\n  };\n  shaderBuilder.addUniform(\n    \"bool\",\n    \"model_showOutline\",\n    ShaderDestination.FRAGMENT,\n  );\n  uniformMap.model_showOutline = function () {\n    return model.showOutline;\n  };\n\n  shaderBuilder.addVertexLines(PrimitiveOutlineStageVS);\n  shaderBuilder.addFragmentLines(PrimitiveOutlineStageFS);\n};\n\nexport default PrimitiveOutlinePipelineStage;\n","import BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Check from \"../../Core/Check.js\";\nimport clone from \"../../Core/clone.js\";\nimport defined from \"../../Core/defined.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport ModelLightingOptions from \"./ModelLightingOptions.js\";\n\n/**\n * Each node may have many mesh primitives. Most model pipeline stages operate\n * at the primitive level. Again, properties are inherited from the parent.\n *\n * @param {NodeRenderResources} nodeRenderResources The node resources to inherit from\n * @param {ModelRuntimePrimitive} runtimePrimitive The primitive.\n *\n * @private\n */\nfunction PrimitiveRenderResources(nodeRenderResources, runtimePrimitive) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"nodeRenderResources\", nodeRenderResources);\n  Check.typeOf.object(\"runtimePrimitive\", runtimePrimitive);\n  //>>includeEnd('debug');\n\n  // Properties inherited from NodeRenderResources.\n  /**\n   * A reference to the model. Inherited from the node render resources.\n   *\n   * @type {Model}\n   * @readonly\n   *\n   * @private\n   */\n  this.model = nodeRenderResources.model;\n\n  /**\n   * A reference to the runtime node. Inherited from the node render resources.\n   *\n   * @type {ModelRuntimeNode}\n   * @readonly\n   *\n   * @private\n   */\n  this.runtimeNode = nodeRenderResources.runtimeNode;\n\n  /**\n   * The vertex attributes. This is shallow cloned from the node render\n   * resources as the primitive will add additional properties.\n   *\n   * @type {object[]}\n   * @readonly\n   *\n   * @private\n   */\n  this.attributes = nodeRenderResources.attributes.slice();\n\n  /**\n   * The index to give to the next vertex attribute added to the attributes\n   * array. POSITION takes index 0. Inherited from the node render resources.\n   *\n   * @type {number}\n   *\n   * @private\n   */\n  this.attributeIndex = nodeRenderResources.attributeIndex;\n\n  /**\n   * The set index to assign to feature ID vertex attribute(s) created from the\n   * offset/repeat in the feature ID attribute. Inherited from the node render\n   * resources.\n   *\n   * @type {number}\n   *\n   * @private\n   */\n  this.featureIdVertexAttributeSetIndex =\n    nodeRenderResources.featureIdVertexAttributeSetIndex;\n\n  /**\n   * A dictionary mapping uniform name to functions that return the uniform\n   * values. Inherited from the node render resources.\n   *\n   * @type {Object<string, Function>}\n   * @readonly\n   *\n   * @private\n   */\n  this.uniformMap = clone(nodeRenderResources.uniformMap);\n\n  /**\n   * Options for configuring the alpha stage such as pass and alpha cutoff.\n   * Inherited from the node render resources.\n   *\n   * @type {ModelAlphaOptions}\n   * @readonly\n   *\n   * @private\n   */\n  this.alphaOptions = clone(nodeRenderResources.alphaOptions);\n\n  /**\n   * An object storing options for creating a {@link RenderState}.\n   * The pipeline stages simply set the options; the actual render state\n   * is created when the {@link DrawCommand} is constructed. Inherited from\n   * the node render resources.\n   *\n   * @type {object}\n   * @readonly\n   *\n   * @private\n   */\n  this.renderStateOptions = clone(nodeRenderResources.renderStateOptions, true);\n\n  /**\n   * Whether the model has a silhouette. This value indicates what draw commands\n   * are needed. Inherited from the node render resources.\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasSilhouette = nodeRenderResources.hasSilhouette;\n\n  /**\n   * Whether the model is part of a tileset that uses the skipLevelOfDetail\n   * optimization. This value indicates what draw commands are needed.\n   * Inherited from the node render resources.\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @private\n   */\n  this.hasSkipLevelOfDetail = nodeRenderResources.hasSkipLevelOfDetail;\n\n  /**\n   * An object used to build a shader incrementally. This is cloned from the\n   * node render resources because each primitive can compute a different shader.\n   *\n   * @type {ShaderBuilder}\n   * @readonly\n   *\n   * @private\n   */\n  this.shaderBuilder = nodeRenderResources.shaderBuilder.clone();\n\n  /**\n   * The number of instances. Default is 0, if instancing is not used.\n   * Inherited from the node render resources.\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  this.instanceCount = nodeRenderResources.instanceCount;\n\n  // Other properties\n  /**\n   * A reference to the runtime primitive.\n   *\n   * @type {ModelRuntimePrimitive}\n   * @readonly\n   *\n   * @private\n   */\n  this.runtimePrimitive = runtimePrimitive;\n\n  /**\n   * The primitive associated with the render resources.\n   *\n   * @type {ModelComponents.Primitive}\n   * @readonly\n   *\n   * @private\n   */\n  const primitive = runtimePrimitive.primitive;\n\n  /**\n   * The number of indices in the primitive. The interpretation of this\n   * depends on the primitive type.\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  this.count = defined(primitive.indices)\n    ? primitive.indices.count\n    : ModelUtility.getAttributeBySemantic(primitive, \"POSITION\").count;\n\n  /**\n   * Whether or not this primitive has a property table for storing metadata.\n   * When present, picking and styling can use this. This value is set by\n   * SelectedFeatureIdPipelineStage.\n   *\n   * @type {boolean}\n   * @default false\n   *\n   * @private\n   */\n  this.hasPropertyTable = false;\n\n  /**\n   * The indices for this primitive.\n   *\n   * @type {ModelComponents.Indices}\n   * @readonly\n   *\n   * @private\n   */\n  this.indices = primitive.indices;\n\n  /**\n   * Additional index buffer for wireframe mode (if enabled). This value is set\n   * by WireframePipelineStage.\n   *\n   * @type {Buffer}\n   * @readonly\n   *\n   * @private\n   */\n  this.wireframeIndexBuffer = undefined;\n\n  /**\n   * The primitive type such as TRIANGLES or POINTS.\n   *\n   * @type {PrimitiveType}\n   * @readonly\n   *\n   * @private\n   */\n  this.primitiveType = primitive.primitiveType;\n\n  const positionMinMax = ModelUtility.getPositionMinMax(\n    primitive,\n    this.runtimeNode.instancingTranslationMin,\n    this.runtimeNode.instancingTranslationMax,\n  );\n\n  /**\n   * The minimum position value for this primitive.\n   *\n   * @type {Cartesian3}\n   * @readonly\n   *\n   * @private\n   */\n  this.positionMin = Cartesian3.clone(positionMinMax.min, new Cartesian3());\n\n  /**\n   * The maximum position value for this primitive.\n   *\n   * @type {Cartesian3}\n   * @readonly\n   *\n   * @private\n   */\n  this.positionMax = Cartesian3.clone(positionMinMax.max, new Cartesian3());\n\n  /**\n   * The bounding sphere that contains all the vertices in this primitive.\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   *\n   * @private\n   */\n  this.boundingSphere = BoundingSphere.fromCornerPoints(\n    this.positionMin,\n    this.positionMax,\n    new BoundingSphere(),\n  );\n\n  /**\n   * Options for configuring the lighting stage, such as selecting between\n   * unlit and PBR shading.\n   *\n   * @type {ModelLightingOptions}\n   * @readonly\n   *\n   * @private\n   */\n  this.lightingOptions = new ModelLightingOptions();\n\n  /**\n   * The shader variable to use for picking. If picking is enabled, this value\n   * is set by PickingPipelineStage.\n   *\n   * @type {string|undefined}\n   *\n   * @private\n   */\n  this.pickId = undefined;\n}\n\nexport default PrimitiveRenderResources;\n","import defined from \"../../Core/defined.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\n/**\n * The primitive statistics update stage updates memory usage statistics\n * on the primitive level. This counts the binary resources that exist\n * for the lifetime of the Model (e.g. attributes and textures\n * loaded by GltfLoader). It does not count resources that are created\n * every time the pipeline is run. The individual pipeline stages are\n * responsible for tracking the additional memory they allocate.\n *\n * @namespace PrimitiveStatisticsPipelineStage\n *\n * @private\n */\nconst PrimitiveStatisticsPipelineStage = {\n  name: \"PrimitiveStatisticsPipelineStage\", // Helps with debugging\n\n  // Expose some methods for testing\n  _countGeometry: countGeometry,\n  _count2DPositions: count2DPositions,\n  _countMorphTargetAttributes: countMorphTargetAttributes,\n  _countMaterialTextures: countMaterialTextures,\n  _countFeatureIdTextures: countFeatureIdTextures,\n  _countBinaryMetadata: countBinaryMetadata,\n};\n\nPrimitiveStatisticsPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const model = renderResources.model;\n  const statistics = model.statistics;\n\n  countGeometry(statistics, primitive);\n  count2DPositions(statistics, renderResources.runtimePrimitive);\n  countMorphTargetAttributes(statistics, primitive);\n  countMaterialTextures(statistics, primitive.material);\n  countFeatureIdTextures(statistics, primitive.featureIds);\n  countBinaryMetadata(statistics, model);\n\n  // The following stages handle their own memory statistics, since all their\n  // resources are generated each time draw commands are built:\n  //\n  // - PickingPipelineStage\n  // - WireframePipelineStage\n  // - InstancingPipelineStage\n  // - FeatureIdPipelineStage (feature ID implicit ranges only)\n};\n\nfunction countGeometry(statistics, primitive) {\n  const indicesCount = defined(primitive.indices)\n    ? primitive.indices.count\n    : ModelUtility.getAttributeBySemantic(primitive, \"POSITION\").count;\n\n  const primitiveType = primitive.primitiveType;\n\n  if (primitiveType === PrimitiveType.POINTS) {\n    statistics.pointsLength += indicesCount;\n  } else if (PrimitiveType.isTriangles(primitiveType)) {\n    statistics.trianglesLength += countTriangles(primitiveType, indicesCount);\n  }\n\n  const attributes = primitive.attributes;\n  const length = attributes.length;\n  for (let i = 0; i < length; i++) {\n    const attribute = attributes[i];\n    if (defined(attribute.buffer)) {\n      const hasCpuCopy = defined(attribute.typedArray);\n      statistics.addBuffer(attribute.buffer, hasCpuCopy);\n    }\n  }\n\n  const outlineCoordinates = primitive.outlineCoordinates;\n  if (defined(outlineCoordinates) && defined(outlineCoordinates.buffer)) {\n    const hasCpuCopy = false;\n    statistics.addBuffer(outlineCoordinates.buffer, hasCpuCopy);\n  }\n\n  const indices = primitive.indices;\n  if (defined(indices) && defined(indices.buffer)) {\n    // Wireframe mode will have both GPU and CPU copies\n    const hasCpuCopy = defined(indices.typedArray);\n    statistics.addBuffer(indices.buffer, hasCpuCopy);\n  }\n}\n\nfunction countTriangles(primitiveType, indicesCount) {\n  switch (primitiveType) {\n    case PrimitiveType.TRIANGLES:\n      return indicesCount / 3;\n    case PrimitiveType.TRIANGLE_STRIP:\n    case PrimitiveType.TRIANGLE_FAN:\n      return Math.max(indicesCount - 2, 0);\n    default:\n      return 0;\n  }\n}\n\nfunction count2DPositions(statistics, runtimePrimitive) {\n  const buffer2D = runtimePrimitive.positionBuffer2D;\n\n  // The 2D buffer is only created the first time the scene switches to 2D mode.\n  // This means there's two main cases for accounting for 2D positions:\n  // 1. The scene was in 3D mode so positions were never generated from\n  //    positionAttribute.typedArray. In this case, countGeometry() will\n  //    detect the typed array and set hasCpuCopy = true. No memory is counted\n  //    here.\n  // 2. The scene was in 2D mode so positions were generated as a buffer.\n  //    Even though the typed array was unlinked from the attribute, it still\n  //    exists in the loader so we count it here.\n  if (defined(buffer2D)) {\n    const hasCpuCopy = true;\n    statistics.addBuffer(buffer2D, hasCpuCopy);\n  }\n}\n\nfunction countMorphTargetAttributes(statistics, primitive) {\n  const morphTargets = primitive.morphTargets;\n  if (!defined(morphTargets)) {\n    return;\n  }\n\n  const hasCpuCopy = false;\n  const morphTargetsLength = morphTargets.length;\n  for (let i = 0; i < morphTargetsLength; i++) {\n    const attributes = morphTargets[i].attributes;\n\n    const attributesLength = attributes.length;\n    for (let j = 0; j < attributesLength; j++) {\n      const attribute = attributes[j];\n\n      if (defined(attribute.buffer)) {\n        statistics.addBuffer(attribute.buffer, hasCpuCopy);\n      }\n    }\n  }\n}\n\nfunction countMaterialTextures(statistics, material) {\n  // gltf-pipeline provides a default material so material will always be\n  // defined.\n  const textureReaders = getAllTextureReaders(material);\n  const length = textureReaders.length;\n  for (let i = 0; i < length; i++) {\n    const textureReader = textureReaders[i];\n    // If textures were loaded asynchronously, the texture may not be available\n    // the first time this is run.\n    if (defined(textureReader) && defined(textureReader.texture)) {\n      statistics.addTexture(textureReader.texture);\n    }\n  }\n}\n\nfunction getAllTextureReaders(material) {\n  const metallicRoughness = material.metallicRoughness;\n  const textureReaders = [\n    material.emissiveTexture,\n    material.normalTexture,\n    material.occlusionTexture,\n    metallicRoughness.baseColorTexture,\n    metallicRoughness.metallicRoughnessTexture,\n  ];\n\n  const specularGlossiness = material.specularGlossiness;\n  if (defined(specularGlossiness)) {\n    textureReaders.push(specularGlossiness.diffuseTexture);\n    textureReaders.push(specularGlossiness.specularGlossinessTexture);\n  }\n\n  return textureReaders;\n}\n\nfunction countFeatureIdTextures(statistics, featureIdSets) {\n  // Feature ID attributes are handled by countGeometry()\n\n  // Feature ID implicit ranges are handled in the FeatureIdPipelineStage,\n  // as they only are created as-needed.\n\n  const length = featureIdSets.length;\n  for (let i = 0; i < length; i++) {\n    const featureIds = featureIdSets[i];\n    if (featureIds instanceof ModelComponents.FeatureIdTexture) {\n      const textureReader = featureIds.textureReader;\n      if (defined(textureReader.texture)) {\n        statistics.addTexture(textureReader.texture);\n      }\n    }\n  }\n}\n\nfunction countBinaryMetadata(statistics, model) {\n  // Add metadata memory to the statistics. Note that feature ID memory is\n  // handled by the Feature ID pipeline stage.\n  const structuralMetadata = model.structuralMetadata;\n  if (defined(structuralMetadata)) {\n    // Property textures are added to the texture memory count. If textures\n    // are loaded asynchronously, this may add 0 to the total. The pipeline\n    // will be re-run when textures are loaded for an accurate count.\n    countPropertyTextures(statistics, structuralMetadata);\n\n    // Property tables are accounted for here.\n    statistics.propertyTablesByteLength +=\n      structuralMetadata.propertyTablesByteLength;\n\n    // Skip property attributes since those are handled in countGeometry().\n  }\n\n  // Model feature tables also have batch and pick textures that need to be\n  // counted.\n  const featureTables = model.featureTables;\n  if (!defined(featureTables)) {\n    return;\n  }\n\n  const length = featureTables.length;\n  for (let i = 0; i < length; i++) {\n    const featureTable = featureTables[i];\n\n    // This does not include the property table memory, since\n    // it is counted through the structuralMetadata above.\n    statistics.addBatchTexture(featureTable.batchTexture);\n  }\n}\n\nfunction countPropertyTextures(statistics, structuralMetadata) {\n  const propertyTextures = structuralMetadata.propertyTextures;\n  if (!defined(propertyTextures)) {\n    return;\n  }\n\n  // Loop over the property textures from here so we can use\n  // statistics.addTexture() which avoids double-counting shared textures.\n  const texturesLength = propertyTextures.length;\n  for (let i = 0; i < texturesLength; i++) {\n    const propertyTexture = propertyTextures[i];\n    const properties = propertyTexture.properties;\n    for (const propertyId in properties) {\n      if (properties.hasOwnProperty(propertyId)) {\n        const property = properties[propertyId];\n        const textureReader = property.textureReader;\n        if (defined(textureReader.texture)) {\n          statistics.addTexture(textureReader.texture);\n        }\n      }\n    }\n  }\n}\n\nexport default PrimitiveStatisticsPipelineStage;\n","import BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport clone from \"../../Core/clone.js\";\nimport combine from \"../../Core/combine.js\";\nimport defined from \"../../Core/defined.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport SceneTransforms from \"../SceneTransforms.js\";\n\nconst scratchModelMatrix = new Matrix4();\nconst scratchModelView2D = new Matrix4();\n\n/**\n * The scene mode 2D stage generates resources for rendering a primitive in 2D / CV mode.\n *\n * @namespace SceneMode2DPipelineStage\n *\n * @private\n */\nconst SceneMode2DPipelineStage = {\n  name: \"SceneMode2DPipelineStage\", // Helps with debugging\n};\n\n/**\n * This pipeline stage processes the position attribute of a primitive and adds the relevant\n * define and uniform matrix to the shader. It also generates new resources for the primitive\n * in 2D. These resources persist in the runtime primitive so that the typed array used to\n * store the positional data can be freed.\n *\n * This stage must go before the GeometryPipelineStage in the primitive pipeline.\n *\n * Processes a primitive. This stage modifies the following parts of the render resources:\n * <ul>\n *  <li> creates a vertex buffer for the positions of the primitive projected to 2D\n *  <li> creates the bounding sphere for the primitive in 2D\n *  <li> adds a flag to the shader to use 2D positions\n *  <li> adds a uniform for the view model matrix in 2D\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\n\nSceneMode2DPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const positionAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.POSITION,\n  );\n\n  const shaderBuilder = renderResources.shaderBuilder;\n  const model = renderResources.model;\n  const modelMatrix = model.sceneGraph.computedModelMatrix;\n  const nodeComputedTransform = renderResources.runtimeNode.computedTransform;\n  const computedModelMatrix = Matrix4.multiplyTransformation(\n    modelMatrix,\n    nodeComputedTransform,\n    scratchModelMatrix,\n  );\n\n  const boundingSphere2D = computeBoundingSphere2D(\n    renderResources,\n    computedModelMatrix,\n    frameState,\n  );\n\n  const runtimePrimitive = renderResources.runtimePrimitive;\n  runtimePrimitive.boundingSphere2D = boundingSphere2D;\n\n  // If the model is instanced, 2D projection will be handled in the\n  // InstancingPipelineStage.\n  const instances = renderResources.runtimeNode.node.instances;\n  if (defined(instances)) {\n    return;\n  }\n\n  // If the typed array of the position attribute exists, then\n  // the positions haven't been projected to 2D yet.\n  if (defined(positionAttribute.typedArray)) {\n    const buffer2D = createPositionBufferFor2D(\n      positionAttribute,\n      computedModelMatrix,\n      boundingSphere2D,\n      frameState,\n    );\n\n    // Since this buffer will persist even if the pipeline is re-run,\n    // its memory will be counted in PrimitiveStatisticsPipelineStage\n    runtimePrimitive.positionBuffer2D = buffer2D;\n    model._modelResources.push(buffer2D);\n\n    // Unload the typed array. This is just a pointer to the array in\n    // the vertex buffer loader, so if the typed array is shared by\n    // multiple primitives (i.e. multiple instances of the same mesh),\n    // this will not affect the other primitives.\n    positionAttribute.typedArray = undefined;\n  }\n\n  shaderBuilder.addDefine(\n    \"USE_2D_POSITIONS\",\n    undefined,\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addUniform(\"mat4\", \"u_modelView2D\", ShaderDestination.VERTEX);\n\n  const modelMatrix2D = Matrix4.fromTranslation(\n    boundingSphere2D.center,\n    new Matrix4(),\n  );\n\n  const context = frameState.context;\n  const uniformMap = {\n    u_modelView2D: function () {\n      return Matrix4.multiplyTransformation(\n        context.uniformState.view,\n        modelMatrix2D,\n        scratchModelView2D,\n      );\n    },\n  };\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n};\n\nconst scratchProjectedMin = new Cartesian3();\nconst scratchProjectedMax = new Cartesian3();\n\nfunction computeBoundingSphere2D(renderResources, modelMatrix, frameState) {\n  // Compute the bounding sphere in 2D.\n  const transformedPositionMin = Matrix4.multiplyByPoint(\n    modelMatrix,\n    renderResources.positionMin,\n    scratchProjectedMin,\n  );\n\n  const projectedMin = SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    transformedPositionMin,\n    transformedPositionMin,\n  );\n\n  const transformedPositionMax = Matrix4.multiplyByPoint(\n    modelMatrix,\n    renderResources.positionMax,\n    scratchProjectedMax,\n  );\n\n  const projectedMax = SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    transformedPositionMax,\n    transformedPositionMax,\n  );\n\n  return BoundingSphere.fromCornerPoints(\n    projectedMin,\n    projectedMax,\n    new BoundingSphere(),\n  );\n}\n\nconst scratchPosition = new Cartesian3();\n\nfunction dequantizePositionsTypedArray(typedArray, quantization) {\n  // Draco compression is normally handled in the dequantization stage\n  // in the shader, but it must be decoded here in order to project\n  // the positions to 2D / CV.\n  const length = typedArray.length;\n  const dequantizedArray = new Float32Array(length);\n  const quantizedVolumeOffset = quantization.quantizedVolumeOffset;\n  const quantizedVolumeStepSize = quantization.quantizedVolumeStepSize;\n  for (let i = 0; i < length; i += 3) {\n    const initialPosition = Cartesian3.fromArray(\n      typedArray,\n      i,\n      scratchPosition,\n    );\n    const scaledPosition = Cartesian3.multiplyComponents(\n      initialPosition,\n      quantizedVolumeStepSize,\n      initialPosition,\n    );\n    const dequantizedPosition = Cartesian3.add(\n      scaledPosition,\n      quantizedVolumeOffset,\n      scaledPosition,\n    );\n\n    dequantizedArray[i] = dequantizedPosition.x;\n    dequantizedArray[i + 1] = dequantizedPosition.y;\n    dequantizedArray[i + 2] = dequantizedPosition.z;\n  }\n\n  return dequantizedArray;\n}\n\nfunction createPositionsTypedArrayFor2D(\n  attribute,\n  modelMatrix,\n  referencePoint,\n  frameState,\n) {\n  let result;\n  if (defined(attribute.quantization)) {\n    // Dequantize the positions if necessary.\n    result = dequantizePositionsTypedArray(\n      attribute.typedArray,\n      attribute.quantization,\n    );\n  } else {\n    result = attribute.typedArray.slice();\n  }\n\n  const startIndex = attribute.byteOffset / Float32Array.BYTES_PER_ELEMENT;\n  const length = result.length;\n  const stride = defined(attribute.byteStride)\n    ? attribute.byteStride / Float32Array.BYTES_PER_ELEMENT\n    : 3;\n\n  for (let i = startIndex; i < length; i += stride) {\n    const initialPosition = Cartesian3.fromArray(result, i, scratchPosition);\n    if (\n      isNaN(initialPosition.x) ||\n      isNaN(initialPosition.y) ||\n      isNaN(initialPosition.z)\n    ) {\n      continue;\n    }\n\n    const transformedPosition = Matrix4.multiplyByPoint(\n      modelMatrix,\n      initialPosition,\n      initialPosition,\n    );\n\n    const projectedPosition = SceneTransforms.computeActualEllipsoidPosition(\n      frameState,\n      transformedPosition,\n      transformedPosition,\n    );\n\n    const relativePosition = Cartesian3.subtract(\n      projectedPosition,\n      referencePoint,\n      projectedPosition,\n    );\n\n    result[i] = relativePosition.x;\n    result[i + 1] = relativePosition.y;\n    result[i + 2] = relativePosition.z;\n  }\n\n  return result;\n}\n\nfunction createPositionBufferFor2D(\n  positionAttribute,\n  modelMatrix,\n  boundingSphere2D,\n  frameState,\n) {\n  // Force the scene mode to be CV. In 2D, projected positions will have\n  // an x-coordinate of 0, which eliminates the height data that is\n  // necessary for rendering in CV mode.\n  const frameStateCV = clone(frameState);\n  frameStateCV.mode = SceneMode.COLUMBUS_VIEW;\n\n  // To prevent jitter, the positions are defined relative to a common\n  // reference point. For convenience, this is the center of the\n  // primitive's bounding sphere in 2D.\n  const referencePoint = boundingSphere2D.center;\n  const projectedPositions = createPositionsTypedArrayFor2D(\n    positionAttribute,\n    modelMatrix,\n    referencePoint,\n    frameStateCV,\n  );\n\n  // Put the resulting data in a GPU buffer.\n  const buffer = Buffer.createVertexBuffer({\n    context: frameState.context,\n    typedArray: projectedPositions,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  buffer.vertexArrayDestroyable = false;\n\n  return buffer;\n}\n\nexport default SceneMode2DPipelineStage;\n","import defined from \"../../Core/defined.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport SelectedFeatureIdStageCommon from \"../../Shaders/Model/SelectedFeatureIdStageCommon.js\";\nimport ModelComponents from \"../ModelComponents.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\n/**\n * The selected feature ID pipeline stage is responsible for handling the\n * set of feature IDs selected for styling/picking.\n *\n * @namespace SelectedFeatureIdPipelineStage\n * @private\n */\nconst SelectedFeatureIdPipelineStage = {\n  name: \"SelectedFeatureIdPipelineStage\", // Helps with debugging\n\n  STRUCT_ID_SELECTED_FEATURE: \"SelectedFeature\",\n  STRUCT_NAME_SELECTED_FEATURE: \"SelectedFeature\",\n};\n\n/**\n * Process a primitive. This modifies the following parts of the render resources:\n * <ul>\n *  <li>sets the defines for the feature ID attribute to use for styling/picking</li>\n *  <li>adds fields to the SelectedFeature struct in the shader</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @param {FrameState} frameState The frame state.\n */\nSelectedFeatureIdPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  renderResources.hasPropertyTable = true;\n\n  const model = renderResources.model;\n  const node = renderResources.runtimeNode.node;\n  const selectedFeatureIds = getSelectedFeatureIds(model, node, primitive);\n  const shaderDestination = selectedFeatureIds.shaderDestination;\n\n  shaderBuilder.addDefine(\n    \"HAS_SELECTED_FEATURE_ID\",\n    undefined,\n    shaderDestination,\n  );\n\n  // Add a define to insert the variable to use.\n  // Example: #define SELECTED_FEATURE_ID featureId_1\n  // This corresponds to featureIds.featureId_1\n  shaderBuilder.addDefine(\n    \"SELECTED_FEATURE_ID\",\n    selectedFeatureIds.variableName,\n    shaderDestination,\n  );\n\n  // Add a define to the shader to distinguish feature ID attributes from\n  // textures. This is needed for determining where to filter features\n  // by pass type.\n  shaderBuilder.addDefine(\n    selectedFeatureIds.featureIdDefine,\n    undefined,\n    shaderDestination,\n  );\n\n  updateFeatureStruct(shaderBuilder);\n\n  const nullFeatureId = selectedFeatureIds.featureIds.nullFeatureId;\n  const uniformMap = renderResources.uniformMap;\n  if (defined(nullFeatureId)) {\n    shaderBuilder.addDefine(\n      \"HAS_NULL_FEATURE_ID\",\n      undefined,\n      shaderDestination,\n    );\n    shaderBuilder.addUniform(\"int\", \"model_nullFeatureId\", shaderDestination);\n    uniformMap.model_nullFeatureId = function () {\n      return nullFeatureId;\n    };\n  }\n\n  if (selectedFeatureIds.shaderDestination === ShaderDestination.BOTH) {\n    shaderBuilder.addVertexLines(SelectedFeatureIdStageCommon);\n  }\n  shaderBuilder.addFragmentLines(SelectedFeatureIdStageCommon);\n};\n\nfunction getFeatureIdDefine(featureIds) {\n  if (featureIds instanceof ModelComponents.FeatureIdTexture) {\n    return \"HAS_SELECTED_FEATURE_ID_TEXTURE\";\n  }\n\n  return \"HAS_SELECTED_FEATURE_ID_ATTRIBUTE\";\n}\n\nfunction getShaderDestination(featureIds) {\n  // Feature ID textures are only supported in the fragment shader.\n  if (featureIds instanceof ModelComponents.FeatureIdTexture) {\n    return ShaderDestination.FRAGMENT;\n  }\n\n  return ShaderDestination.BOTH;\n}\n\nfunction getSelectedFeatureIds(model, node, primitive) {\n  let variableName;\n  let featureIds;\n  // Check instances first, as this is the most specific type of\n  // feature ID\n  if (defined(node.instances)) {\n    featureIds = ModelUtility.getFeatureIdsByLabel(\n      node.instances.featureIds,\n      model.instanceFeatureIdLabel,\n    );\n\n    if (defined(featureIds)) {\n      // Either label could be used here, but prefer label as it may be more\n      // meaningful when debugging\n      variableName = featureIds.label ?? featureIds.positionalLabel;\n      return {\n        featureIds: featureIds,\n        variableName: variableName,\n        shaderDestination: getShaderDestination(featureIds),\n        featureIdDefine: getFeatureIdDefine(featureIds),\n      };\n    }\n  }\n\n  featureIds = ModelUtility.getFeatureIdsByLabel(\n    primitive.featureIds,\n    model.featureIdLabel,\n  );\n  // again, prefer label for being more descriptive\n  variableName = featureIds.label ?? featureIds.positionalLabel;\n  return {\n    featureIds: featureIds,\n    variableName: variableName,\n    shaderDestination: getShaderDestination(featureIds),\n    featureIdDefine: getFeatureIdDefine(featureIds),\n  };\n}\n\n/**\n * Populate the \"SelectedFeature\" struct in the shaders that holds information about the \"active\" (used for picking/styling) feature.\n * The struct is always added to the shader by the GeometryPipelineStage (required for compilation). The SelectedFeature struct looks\n * as follows:\n *\n * struct SelectedFeature {\n *   int id;\n *   vec2 st;\n *   vec4 color;\n * }\n *\n * @private\n */\nfunction updateFeatureStruct(shaderBuilder) {\n  shaderBuilder.addStructField(\n    SelectedFeatureIdPipelineStage.STRUCT_ID_SELECTED_FEATURE,\n    \"int\",\n    \"id\",\n  );\n\n  shaderBuilder.addStructField(\n    SelectedFeatureIdPipelineStage.STRUCT_ID_SELECTED_FEATURE,\n    \"vec2\",\n    \"st\",\n  );\n\n  shaderBuilder.addStructField(\n    SelectedFeatureIdPipelineStage.STRUCT_ID_SELECTED_FEATURE,\n    \"vec4\",\n    \"color\",\n  );\n}\n\nexport default SelectedFeatureIdPipelineStage;\n","import combine from \"../../Core/combine.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport SkinningStageVS from \"../../Shaders/Model/SkinningStageVS.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\n\n/**\n * The skinning pipeline stage processes the joint matrices of a skinned primitive.\n *\n * @namespace SkinningPipelineStage\n *\n * @private\n */\n\nconst SkinningPipelineStage = {\n  name: \"SkinningPipelineStage\", // Helps with debugging\n\n  FUNCTION_ID_GET_SKINNING_MATRIX: \"getSkinningMatrix\",\n  FUNCTION_SIGNATURE_GET_SKINNING_MATRIX: \"mat4 getSkinningMatrix()\",\n};\n\n/**\n * This pipeline stage processes the joint matrices of a skinned primitive, adding\n * the relevant functions and uniforms to the shaders. The joint and weight attributes\n * themselves are processed in the geometry pipeline stage.\n *\n * Processes a primitive. This stage modifies the following parts of the render resources:\n * <ul>\n *  <li> adds the uniform declaration for the joint matrices in the vertex shader</li>\n *  <li> adds the function to compute the skinning matrix in the vertex shader</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this primitive.\n * @param {ModelComponents.Primitive} primitive The primitive.\n * @private\n */\nSkinningPipelineStage.process = function (renderResources, primitive) {\n  const shaderBuilder = renderResources.shaderBuilder;\n\n  shaderBuilder.addDefine(\"HAS_SKINNING\", undefined, ShaderDestination.VERTEX);\n  addGetSkinningMatrixFunction(shaderBuilder, primitive);\n\n  const runtimeNode = renderResources.runtimeNode;\n  const jointMatrices = runtimeNode.computedJointMatrices;\n\n  shaderBuilder.addUniform(\n    \"mat4\",\n    `u_jointMatrices[${jointMatrices.length}]`,\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addVertexLines(SkinningStageVS);\n\n  const uniformMap = {\n    u_jointMatrices: function () {\n      return runtimeNode.computedJointMatrices;\n    },\n  };\n\n  renderResources.uniformMap = combine(uniformMap, renderResources.uniformMap);\n};\n\nfunction getMaximumAttributeSetIndex(primitive) {\n  let setIndex = -1;\n  const attributes = primitive.attributes;\n  const length = attributes.length;\n  for (let i = 0; i < length; i++) {\n    const attribute = attributes[i];\n    const isJointsOrWeights =\n      attribute.semantic === VertexAttributeSemantic.JOINTS ||\n      attribute.semantic === VertexAttributeSemantic.WEIGHTS;\n\n    if (!isJointsOrWeights) {\n      continue;\n    }\n\n    setIndex = Math.max(setIndex, attribute.setIndex);\n  }\n\n  return setIndex;\n}\n\nfunction addGetSkinningMatrixFunction(shaderBuilder, primitive) {\n  shaderBuilder.addFunction(\n    SkinningPipelineStage.FUNCTION_ID_GET_SKINNING_MATRIX,\n    SkinningPipelineStage.FUNCTION_SIGNATURE_GET_SKINNING_MATRIX,\n    ShaderDestination.VERTEX,\n  );\n\n  const initialLine = \"mat4 skinnedMatrix = mat4(0);\";\n  shaderBuilder.addFunctionLines(\n    SkinningPipelineStage.FUNCTION_ID_GET_SKINNING_MATRIX,\n    [initialLine],\n  );\n\n  let setIndex;\n  let componentIndex;\n  const componentStrings = [\"x\", \"y\", \"z\", \"w\"];\n  const maximumSetIndex = getMaximumAttributeSetIndex(primitive);\n  for (setIndex = 0; setIndex <= maximumSetIndex; setIndex++) {\n    for (componentIndex = 0; componentIndex <= 3; componentIndex++) {\n      const component = componentStrings[componentIndex];\n      // Example: skinnedMatrix += a_weights_0.x * u_jointMatrices[int(a_joints_0.x)];\n      const line = `skinnedMatrix += a_weights_${setIndex}.${component} * u_jointMatrices[int(a_joints_${setIndex}.${component})];`;\n      shaderBuilder.addFunctionLines(\n        SkinningPipelineStage.FUNCTION_ID_GET_SKINNING_MATRIX,\n        [line],\n      );\n    }\n  }\n\n  const returnLine = \"return skinnedMatrix;\";\n  shaderBuilder.addFunctionLines(\n    SkinningPipelineStage.FUNCTION_ID_GET_SKINNING_MATRIX,\n    [returnLine],\n  );\n}\n\nexport default SkinningPipelineStage;\n","/**\n * An enum describing what commands (opaque or translucent) are required by\n * a {@link Cesium3DTileStyle}.\n *\n * @enum {number}\n * @private\n */\nconst StyleCommandsNeeded = {\n  ALL_OPAQUE: 0,\n  ALL_TRANSLUCENT: 1,\n  OPAQUE_AND_TRANSLUCENT: 2,\n};\n\n/**\n * @private\n */\nStyleCommandsNeeded.getStyleCommandsNeeded = function (\n  featuresLength,\n  translucentFeaturesLength,\n) {\n  if (translucentFeaturesLength === 0) {\n    return StyleCommandsNeeded.ALL_OPAQUE;\n  } else if (translucentFeaturesLength === featuresLength) {\n    return StyleCommandsNeeded.ALL_TRANSLUCENT;\n  }\n  return StyleCommandsNeeded.OPAQUE_AND_TRANSLUCENT;\n};\n\nexport default Object.freeze(StyleCommandsNeeded);\n","import defined from \"../../Core/defined.js\";\nimport destroyObject from \"../../Core/destroyObject.js\";\nimport getImageFromTypedArray from \"../../Core/getImageFromTypedArray.js\";\nimport CesiumMath from \"../../Core/Math.js\";\nimport resizeImageToNextPowerOfTwo from \"../../Core/resizeImageToNextPowerOfTwo.js\";\nimport PixelDatatype from \"../../Renderer/PixelDatatype.js\";\nimport Texture from \"../../Renderer/Texture.js\";\nimport TextureMinificationFilter from \"../../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../../Renderer/TextureWrap.js\";\n\n/**\n * An object to manage loading textures\n *\n * @alias TextureManager\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction TextureManager() {\n  this._defaultTexture = undefined;\n  this._textures = {};\n  this._loadedImages = [];\n\n  // Keep track of the last time update() was called to avoid\n  // calling update() twice.\n  this._lastUpdatedFrame = -1;\n}\n\n/**\n * Get one of the loaded textures\n * @param {string} textureId The unique ID of the texture loaded by {@link TextureManager#loadTexture2D}\n * @return {Texture} The texture or <code>undefined</code> if no texture exists\n */\nTextureManager.prototype.getTexture = function (textureId) {\n  return this._textures[textureId];\n};\n\nfunction fetchTexture2D(textureManager, textureId, textureUniform) {\n  textureUniform.resource\n    .fetchImage()\n    .then(function (image) {\n      textureManager._loadedImages.push({\n        id: textureId,\n        image: image,\n        textureUniform: textureUniform,\n      });\n    })\n    .catch(function () {\n      const texture = textureManager._textures[textureId];\n      if (defined(texture) && texture !== textureManager._defaultTexture) {\n        texture.destroy();\n      }\n\n      textureManager._textures[textureId] = textureManager._defaultTexture;\n    });\n}\n\n/**\n * Load a texture 2D asynchronously. Note that {@link TextureManager#update}\n * must be called in the render loop to finish processing the textures.\n *\n * @param {string} textureId A unique ID to identify this texture.\n * @param {TextureUniform} textureUniform A description of the texture\n *\n * @private\n */\nTextureManager.prototype.loadTexture2D = function (textureId, textureUniform) {\n  if (defined(textureUniform.typedArray)) {\n    this._loadedImages.push({\n      id: textureId,\n      textureUniform: textureUniform,\n    });\n  } else {\n    fetchTexture2D(this, textureId, textureUniform);\n  }\n};\n\nfunction createTexture(textureManager, loadedImage, context) {\n  const { id, textureUniform, image } = loadedImage;\n\n  // If the context is WebGL1, and the sampler needs mipmaps or repeating\n  // boundary conditions, the image may need to be resized first\n  const texture = context.webgl2\n    ? getTextureAndMips(textureUniform, image, context)\n    : getWebGL1Texture(textureUniform, image, context);\n\n  // Destroy the old texture once the new one is loaded for more seamless\n  // transitions between values\n  const oldTexture = textureManager._textures[id];\n  if (defined(oldTexture) && oldTexture !== context.defaultTexture) {\n    oldTexture.destroy();\n  }\n  textureManager._textures[id] = texture;\n}\n\nfunction getTextureAndMips(textureUniform, image, context) {\n  const { typedArray, sampler } = textureUniform;\n\n  const texture = defined(typedArray)\n    ? getTextureFromTypedArray(textureUniform, context)\n    : new Texture({ context, source: image, sampler });\n\n  if (samplerRequiresMipmap(sampler)) {\n    texture.generateMipmap();\n  }\n\n  return texture;\n}\n\nfunction getWebGL1Texture(textureUniform, image, context) {\n  const { typedArray, sampler } = textureUniform;\n\n  // WebGL1 requires power-of-two texture dimensions for mipmapping and REPEAT wrap modes\n  const needMipmap = samplerRequiresMipmap(sampler);\n\n  const samplerRepeats =\n    sampler.wrapS === TextureWrap.REPEAT ||\n    sampler.wrapS === TextureWrap.MIRRORED_REPEAT ||\n    sampler.wrapT === TextureWrap.REPEAT ||\n    sampler.wrapT === TextureWrap.MIRRORED_REPEAT;\n\n  const { width, height } = defined(typedArray) ? textureUniform : image;\n  const isPowerOfTwo = [width, height].every(CesiumMath.isPowerOfTwo);\n  const requiresResize = (needMipmap || samplerRepeats) && !isPowerOfTwo;\n\n  if (!requiresResize) {\n    return getTextureAndMips(textureUniform, image, context);\n  } else if (!defined(typedArray)) {\n    const resizedImage = resizeImageToNextPowerOfTwo(image);\n    return getTextureAndMips(textureUniform, resizedImage, context);\n  } else if (textureUniform.pixelDatatype === PixelDatatype.UNSIGNED_BYTE) {\n    const imageFromArray = getImageFromTypedArray(typedArray, width, height);\n    const resizedImage = resizeImageToNextPowerOfTwo(imageFromArray);\n    return getTextureAndMips({ sampler }, resizedImage, context);\n  }\n\n  // typedArray is non-power-of-two but can't be resized. Warn and return raw texture (no mipmaps)\n  if (needMipmap) {\n    console.warn(\n      \"Texture requires resizing for mipmaps but pixelDataType cannot be resized. The texture may be rendered incorrectly.\",\n    );\n  } else if (samplerRepeats) {\n    console.warn(\n      \"Texture requires resizing for wrapping but pixelDataType cannot be resized. The texture may be rendered incorrectly.\",\n    );\n  }\n  return getTextureFromTypedArray(textureUniform, context);\n}\n\nfunction samplerRequiresMipmap(sampler) {\n  return [\n    TextureMinificationFilter.NEAREST_MIPMAP_NEAREST,\n    TextureMinificationFilter.NEAREST_MIPMAP_LINEAR,\n    TextureMinificationFilter.LINEAR_MIPMAP_NEAREST,\n    TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n  ].includes(sampler.minificationFilter);\n}\n\nfunction getTextureFromTypedArray(textureUniform, context) {\n  const {\n    pixelFormat,\n    pixelDatatype,\n    width,\n    height,\n    typedArray: arrayBufferView,\n    sampler,\n  } = textureUniform;\n\n  return new Texture({\n    context,\n    pixelFormat,\n    pixelDatatype,\n    source: { arrayBufferView, width, height },\n    sampler,\n    flipY: false,\n  });\n}\n\nTextureManager.prototype.update = function (frameState) {\n  // update only needs to be called once a frame.\n  if (frameState.frameNumber === this._lastUpdatedFrame) {\n    return;\n  }\n  this._lastUpdatedFrame = frameState.frameNumber;\n\n  const context = frameState.context;\n  this._defaultTexture = context.defaultTexture;\n\n  // If any images were loaded since the last frame, create Textures\n  // for them and store in the uniform dictionary\n  const loadedImages = this._loadedImages;\n  for (let i = 0; i < loadedImages.length; i++) {\n    const loadedImage = loadedImages[i];\n    createTexture(this, loadedImage, context);\n  }\n  loadedImages.length = 0;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see TextureManager#destroy\n * @private\n */\nTextureManager.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * textureManager = textureManager && textureManager.destroy();\n *\n * @see TextureManager#isDestroyed\n * @private\n */\nTextureManager.prototype.destroy = function () {\n  const textures = this._textures;\n  for (const texture in textures) {\n    if (textures.hasOwnProperty(texture)) {\n      const instance = textures[texture];\n      if (instance !== this._defaultTexture) {\n        instance.destroy();\n      }\n    }\n  }\n  return destroyObject(this);\n};\n\nexport default TextureManager;\n","import Frozen from \"../../Core/Frozen.js\";\nimport defined from \"../../Core/defined.js\";\nimport DeveloperError from \"../../Core/DeveloperError.js\";\nimport Resource from \"../../Core/Resource.js\";\nimport PixelFormat from \"../../Core/PixelFormat.js\";\nimport PixelDatatype from \"../../Renderer/PixelDatatype.js\";\nimport Sampler from \"../../Renderer/Sampler.js\";\nimport TextureWrap from \"../../Renderer/TextureWrap.js\";\n\n/**\n * A simple struct that serves as a value of a <code>sampler2D</code>-valued\n * uniform. This is used with {@link CustomShader} and {@link TextureManager}\n *\n * @param {object} options An object with the following properties:\n * @param {Uint8Array} [options.typedArray] A typed array storing the contents of a texture. Values are stored in row-major order. Since WebGL uses a y-up convention for textures, rows are listed from bottom to top.\n * @param {number} [options.width] The width of the image. Required when options.typedArray is present\n * @param {number} [options.height] The height of the image. Required when options.typedArray is present.\n * @param {string|Resource} [options.url] A URL string or resource pointing to a texture image.\n * @param {boolean} [options.repeat=true] When defined, the texture sampler will be set to wrap in both directions\n * @param {PixelFormat} [options.pixelFormat=PixelFormat.RGBA] When options.typedArray is defined, this is used to determine the pixel format of the texture\n * @param {PixelDatatype} [options.pixelDatatype=PixelDatatype.UNSIGNED_BYTE] When options.typedArray is defined, this is the data type of pixel values in the typed array.\n * @param {TextureMinificationFilter} [options.minificationFilter=TextureMinificationFilter.LINEAR] The minification filter of the texture sampler.\n * @param {TextureMagnificationFilter} [options.magnificationFilter=TextureMagnificationFilter.LINEAR] The magnification filter of the texture sampler.\n * @param {number} [options.maximumAnisotropy=1.0] The maximum anisotropy of the texture sampler\n *\n * @alias TextureUniform\n * @constructor\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction TextureUniform(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  //>>includeStart('debug', pragmas.debug);\n  const hasTypedArray = defined(options.typedArray);\n  const hasUrl = defined(options.url);\n  if (hasTypedArray === hasUrl) {\n    throw new DeveloperError(\n      \"exactly one of options.typedArray, options.url must be defined\",\n    );\n  }\n  if (hasTypedArray && (!defined(options.width) || !defined(options.height))) {\n    throw new DeveloperError(\n      \"options.width and options.height are required when options.typedArray is defined\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this.typedArray = options.typedArray;\n  this.width = options.width;\n  this.height = options.height;\n  this.pixelFormat = options.pixelFormat ?? PixelFormat.RGBA;\n  this.pixelDatatype = options.pixelDatatype ?? PixelDatatype.UNSIGNED_BYTE;\n\n  let resource = options.url;\n  if (typeof resource === \"string\") {\n    resource = Resource.createIfNeeded(resource);\n  }\n  this.resource = resource;\n\n  const repeat = options.repeat ?? true;\n  const wrap = repeat ? TextureWrap.REPEAT : TextureWrap.CLAMP_TO_EDGE;\n  this.sampler = new Sampler({\n    wrapS: wrap,\n    wrapT: wrap,\n    minificationFilter: options.minificationFilter,\n    magnificationFilter: options.magnificationFilter,\n    maximumAnisotropy: options.maximumAnisotropy,\n  });\n}\n\nexport default TextureUniform;\n","import combine from \"../../Core/combine.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport Cartesian2 from \"../../Core/Cartesian2.js\";\nimport StencilConstants from \"../StencilConstants.js\";\n\n/**\n * The tileset pipeline stage is responsible for updating the model with behavior\n * specific to 3D Tiles.\n *\n * @namespace TilesetPipelineStage\n *\n * @private\n */\nconst TilesetPipelineStage = {\n  name: \"TilesetPipelineStage\", // Helps with debugging\n};\n\n/**\n * Process a model. This modifies the following parts of the render resources:\n *\n * <ul>\n *  <li>adds a define to the fragment shader to indicate that the model uses polygon offset for the skipLevelOfDetail optimization</li>\n *  <li>adds a function to the uniform map to supply polygon offset values for the skipLevelOfDetail optimization</li>\n *  <li>sets stencil values that enable classification on 3D Tiles</li>\n * </ul>\n *\n * <p>\n * See {@link ModelDrawCommand} for the corresponding skipLevelOfDetail derived commands.\n * </p>\n *\n * @param {ModelRenderResources} renderResources The render resources for this model.\n * @param {ModelExperimental} model The model.\n * @param {FrameState} frameState The frameState.\n *\n * @private\n */\nTilesetPipelineStage.process = function (renderResources, model, frameState) {\n  if (model.hasSkipLevelOfDetail(frameState)) {\n    // Make the log-depth depth fragment write account for the polygon offset, too.\n    // Otherwise, the back face commands will cause the higher resolution\n    // tiles to disappear.\n    const shaderBuilder = renderResources.shaderBuilder;\n    shaderBuilder.addDefine(\n      \"POLYGON_OFFSET\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n\n    // This value will be overriden by the depth-only back face derived command.\n    // We just prepare it in advance so we don't have to recompile the shader.\n    // We don't add a uniform declaration through ShaderBuilder because\n    // this is included in writeLogDepth.glsl\n    const uniformMap = {\n      u_polygonOffset: function () {\n        return Cartesian2.ZERO;\n      },\n    };\n\n    renderResources.uniformMap = combine(\n      uniformMap,\n      renderResources.uniformMap,\n    );\n    renderResources.hasSkipLevelOfDetail = true;\n  }\n\n  // Set stencil values for classification on 3D Tiles. This is applied to all\n  // of the derived commands, not just the back-face derived command.\n  const renderStateOptions = renderResources.renderStateOptions;\n  renderStateOptions.stencilTest = StencilConstants.setCesium3DTileBit();\n  renderStateOptions.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n};\n\nexport default TilesetPipelineStage;\n","/**\n * An enum of the basic GLSL uniform types. These can be used with\n * {@link CustomShader} to declare user-defined uniforms.\n *\n * @enum {string}\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst UniformType = {\n  /**\n   * A single floating point value.\n   *\n   * @type {string}\n   * @constant\n   */\n  FLOAT: \"float\",\n  /**\n   * A vector of 2 floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC2: \"vec2\",\n  /**\n   * A vector of 3 floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC3: \"vec3\",\n  /**\n   * A vector of 4 floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC4: \"vec4\",\n  /**\n   * A single integer value\n   *\n   * @type {string}\n   * @constant\n   */\n  INT: \"int\",\n  /**\n   * A vector of 2 integer values.\n   *\n   * @type {string}\n   * @constant\n   */\n  INT_VEC2: \"ivec2\",\n  /**\n   * A vector of 3 integer values.\n   *\n   * @type {string}\n   * @constant\n   */\n  INT_VEC3: \"ivec3\",\n  /**\n   * A vector of 4 integer values.\n   *\n   * @type {string}\n   * @constant\n   */\n  INT_VEC4: \"ivec4\",\n  /**\n   * A single boolean value.\n   *\n   * @type {string}\n   * @constant\n   */\n  BOOL: \"bool\",\n  /**\n   * A vector of 2 boolean values.\n   *\n   * @type {string}\n   * @constant\n   */\n  BOOL_VEC2: \"bvec2\",\n  /**\n   * A vector of 3 boolean values.\n   *\n   * @type {string}\n   * @constant\n   */\n  BOOL_VEC3: \"bvec3\",\n  /**\n   * A vector of 4 boolean values.\n   *\n   * @type {string}\n   * @constant\n   */\n  BOOL_VEC4: \"bvec4\",\n  /**\n   * A 2x2 matrix of floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT2: \"mat2\",\n  /**\n   * A 3x3 matrix of floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT3: \"mat3\",\n  /**\n   * A 4x4 matrix of floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT4: \"mat4\",\n  /**\n   * A 2D sampled texture.\n   * @type {string}\n   * @constant\n   */\n  SAMPLER_2D: \"sampler2D\",\n  SAMPLER_CUBE: \"samplerCube\",\n};\n\nexport default Object.freeze(UniformType);\n","/**\n * An enum for the GLSL varying types. These can be used for declaring varyings\n * in {@link CustomShader}\n *\n * @enum {string}\n *\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst VaryingType = {\n  /**\n   * A single floating point value.\n   *\n   * @type {string}\n   * @constant\n   */\n  FLOAT: \"float\",\n  /**\n   * A vector of 2 floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC2: \"vec2\",\n  /**\n   * A vector of 3 floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC3: \"vec3\",\n  /**\n   * A vector of 4 floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  VEC4: \"vec4\",\n  /**\n   * A 2x2 matrix of floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT2: \"mat2\",\n  /**\n   * A 3x3 matrix of floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT3: \"mat3\",\n  /**\n   * A 4x4 matrix of floating point values.\n   *\n   * @type {string}\n   * @constant\n   */\n  MAT4: \"mat4\",\n};\n\nexport default Object.freeze(VaryingType);\n","import Cartesian2 from \"../../Core/Cartesian2.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport VerticalExaggerationStageVS from \"../../Shaders/Model/VerticalExaggerationStageVS.js\";\n\n/**\n * The vertical exaggeration pipeline stage transforms the vertex\n * positions based on the values of {@link Scene#verticalExaggeration} and\n * {@link Scene#verticalExaggerationRelativeHeight}\n *\n * @namespace VerticalExaggerationPipelineStage\n *\n * @private\n */\nconst VerticalExaggerationPipelineStage = {\n  name: \"VerticalExaggerationPipelineStage\", // Helps with debugging\n};\n\nconst scratchExaggerationUniform = new Cartesian2();\n\n/**\n * Add defines and uniforms for vertical exaggeration calculations in the vertex shader\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for the primitive\n * @param {ModelComponents.Primitive} primitive The primitive to be rendered\n * @param {FrameState} frameState The frame state.\n * @private\n */\nVerticalExaggerationPipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  const { shaderBuilder, uniformMap } = renderResources;\n\n  shaderBuilder.addVertexLines(VerticalExaggerationStageVS);\n\n  shaderBuilder.addDefine(\n    \"HAS_VERTICAL_EXAGGERATION\",\n    undefined,\n    ShaderDestination.VERTEX,\n  );\n\n  shaderBuilder.addUniform(\n    \"vec2\",\n    \"u_verticalExaggerationAndRelativeHeight\",\n    ShaderDestination.VERTEX,\n  );\n\n  uniformMap.u_verticalExaggerationAndRelativeHeight = function () {\n    return Cartesian2.fromElements(\n      frameState.verticalExaggeration,\n      frameState.verticalExaggerationRelativeHeight,\n      scratchExaggerationUniform,\n    );\n  };\n};\n\nexport default VerticalExaggerationPipelineStage;\n","import Buffer from \"../../Renderer/Buffer.js\";\nimport BufferUsage from \"../../Renderer/BufferUsage.js\";\nimport defined from \"../../Core/defined.js\";\nimport IndexDatatype from \"../../Core/IndexDatatype.js\";\nimport ModelUtility from \"./ModelUtility.js\";\nimport PrimitiveType from \"../../Core/PrimitiveType.js\";\nimport ShaderDestination from \"../../Renderer/ShaderDestination.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport WireframeIndexGenerator from \"../../Core/WireframeIndexGenerator.js\";\n\n/**\n * The wireframe pipeline stage generates a new index buffer for rendering the\n * structure of the mesh with gl.LINES.\n *\n * @namespace WireframePipelineStage\n * @private\n */\nconst WireframePipelineStage = {\n  name: \"WireframePipelineStage\", // Helps with debugging\n};\n\n/**\n * Process a primitive. This modifies the render resources as follows:\n * <ul>\n *   <li>Adds a define to the fragment shader to prevent extra shading of the lines.</li>\n *   <li>Adds a separate index buffer for wireframe indices</li>\n *   <li>Updates the primitive type and count for rendering with gl.LINES</li>\n * </ul>\n *\n * @param {PrimitiveRenderResources} renderResources The render resources for this node\n * @param {ModelComponents.primitive} primitive The primitive\n * @param {FrameState} frameState The frame state\n */\nWireframePipelineStage.process = function (\n  renderResources,\n  primitive,\n  frameState,\n) {\n  // Applying normal mapping to the lines will result in rendering\n  // errors on Linux. This define is added to disable normal\n  // mapping in the shader.\n  const shaderBuilder = renderResources.shaderBuilder;\n  shaderBuilder.addDefine(\n    \"HAS_WIREFRAME\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n\n  const model = renderResources.model;\n  const wireframeIndexBuffer = createWireframeIndexBuffer(\n    primitive,\n    renderResources.indices,\n    frameState,\n  );\n  model._pipelineResources.push(wireframeIndexBuffer);\n  renderResources.wireframeIndexBuffer = wireframeIndexBuffer;\n\n  // We only need to count memory for the generated buffer. In WebGL 1, the CPU\n  // copy of the original indices is already counted in the geometry stage,\n  // and in WebGL 2, the CPU copy of the original indices (generated from the\n  // data of the original buffer) is discarded after generating the wireframe\n  // indices.\n  const hasCpuCopy = false;\n  model.statistics.addBuffer(wireframeIndexBuffer, hasCpuCopy);\n\n  // Update render resources so we render LINES with the correct index count\n  const originalPrimitiveType = renderResources.primitiveType;\n  const originalCount = renderResources.count;\n  renderResources.primitiveType = PrimitiveType.LINES;\n  renderResources.count = WireframeIndexGenerator.getWireframeIndicesCount(\n    originalPrimitiveType,\n    originalCount,\n  );\n};\n\nfunction createWireframeIndexBuffer(primitive, indices, frameState) {\n  const positionAttribute = ModelUtility.getAttributeBySemantic(\n    primitive,\n    VertexAttributeSemantic.POSITION,\n  );\n  const vertexCount = positionAttribute.count;\n  const webgl2 = frameState.context.webgl2;\n\n  let originalIndices;\n  if (defined(indices)) {\n    const indicesBuffer = indices.buffer;\n    const indicesCount = indices.count;\n    if (defined(indicesBuffer) && webgl2) {\n      const useUint8Array = indicesBuffer.sizeInBytes === indicesCount;\n      originalIndices = useUint8Array\n        ? new Uint8Array(indicesCount)\n        : IndexDatatype.createTypedArray(vertexCount, indicesCount);\n\n      indicesBuffer.getBufferData(originalIndices);\n    } else {\n      originalIndices = indices.typedArray;\n    }\n  }\n\n  const primitiveType = primitive.primitiveType;\n  const wireframeIndices = WireframeIndexGenerator.createWireframeIndices(\n    primitiveType,\n    vertexCount,\n    originalIndices,\n  );\n  const indexDatatype = IndexDatatype.fromSizeInBytes(\n    wireframeIndices.BYTES_PER_ELEMENT,\n  );\n\n  return Buffer.createIndexBuffer({\n    context: frameState.context,\n    typedArray: wireframeIndices,\n    usage: BufferUsage.STATIC_DRAW,\n    indexDatatype: indexDatatype,\n  });\n}\n\nexport default WireframePipelineStage;\n","import AttributeCompression from \"../../Core/AttributeCompression.js\";\nimport BoundingSphere from \"../../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../../Core/Cartesian3.js\";\nimport Cartographic from \"../../Core/Cartographic.js\";\nimport Check from \"../../Core/Check.js\";\nimport ComponentDatatype from \"../../Core/ComponentDatatype.js\";\nimport defined from \"../../Core/defined.js\";\nimport Ellipsoid from \"../../Core/Ellipsoid.js\";\nimport IndexDatatype from \"../../Core/IndexDatatype.js\";\nimport IntersectionTests from \"../../Core/IntersectionTests.js\";\nimport Ray from \"../../Core/Ray.js\";\nimport Matrix4 from \"../../Core/Matrix4.js\";\nimport Transforms from \"../../Core/Transforms.js\";\nimport VerticalExaggeration from \"../../Core/VerticalExaggeration.js\";\nimport AttributeType from \"../AttributeType.js\";\nimport SceneMode from \"../SceneMode.js\";\nimport VertexAttributeSemantic from \"../VertexAttributeSemantic.js\";\nimport ModelUtility from \"./ModelUtility.js\";\n\nconst scratchV0 = new Cartesian3();\nconst scratchV1 = new Cartesian3();\nconst scratchV2 = new Cartesian3();\nconst scratchNodeComputedTransform = new Matrix4();\nconst scratchModelMatrix = new Matrix4();\nconst scratchcomputedModelMatrix = new Matrix4();\nconst scratchPickCartographic = new Cartographic();\nconst scratchBoundingSphere = new BoundingSphere();\n\n/**\n * Find an intersection between a ray and the model surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Model} model The model to pick.\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {number} [verticalExaggeration=1.0] A scalar used to exaggerate the height of a position relative to the ellipsoid. If the value is 1.0 there will be no effect.\n * @param {number} [relativeHeight=0.0] The ellipsoid height relative to which a position is exaggerated. If the value is 0.0 the position will be exaggerated relative to the ellipsoid surface.\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] The ellipsoid to which the exaggerated position is relative.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nexport default function pickModel(\n  model,\n  ray,\n  frameState,\n  verticalExaggeration,\n  relativeHeight,\n  ellipsoid,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"model\", model);\n  Check.typeOf.object(\"ray\", ray);\n  Check.typeOf.object(\"frameState\", frameState);\n  //>>includeEnd('debug');\n\n  if (!model._ready || frameState.mode === SceneMode.MORPHING) {\n    return;\n  }\n\n  let minT = Number.MAX_VALUE;\n  const sceneGraph = model.sceneGraph;\n\n  const nodes = sceneGraph._runtimeNodes;\n  for (let i = 0; i < nodes.length; i++) {\n    const runtimeNode = nodes[i];\n    const node = runtimeNode.node;\n\n    let nodeComputedTransform = Matrix4.clone(\n      runtimeNode.computedTransform,\n      scratchNodeComputedTransform,\n    );\n    let modelMatrix = Matrix4.clone(\n      sceneGraph.computedModelMatrix,\n      scratchModelMatrix,\n    );\n\n    const instances = node.instances;\n    if (defined(instances)) {\n      if (instances.transformInWorldSpace) {\n        // Replicate the multiplication order in LegacyInstancingStageVS.\n        modelMatrix = Matrix4.multiplyTransformation(\n          model.modelMatrix,\n          sceneGraph.components.transform,\n          modelMatrix,\n        );\n\n        nodeComputedTransform = Matrix4.multiplyTransformation(\n          sceneGraph.axisCorrectionMatrix,\n          runtimeNode.computedTransform,\n          nodeComputedTransform,\n        );\n      }\n    }\n\n    let computedModelMatrix = Matrix4.multiplyTransformation(\n      modelMatrix,\n      nodeComputedTransform,\n      scratchcomputedModelMatrix,\n    );\n\n    if (frameState.mode !== SceneMode.SCENE3D) {\n      computedModelMatrix = Transforms.basisTo2D(\n        frameState.mapProjection,\n        computedModelMatrix,\n        computedModelMatrix,\n      );\n    }\n\n    const transforms = [];\n    if (defined(instances)) {\n      const transformsCount = instances.attributes[0].count;\n      const instanceComponentDatatype =\n        instances.attributes[0].componentDatatype;\n\n      const transformElements = 12;\n      let transformsTypedArray = runtimeNode.transformsTypedArray;\n      if (!defined(transformsTypedArray)) {\n        const instanceTransformsBuffer = runtimeNode.instancingTransformsBuffer;\n        if (defined(instanceTransformsBuffer) && frameState.context.webgl2) {\n          transformsTypedArray = ComponentDatatype.createTypedArray(\n            instanceComponentDatatype,\n            transformsCount * transformElements,\n          );\n          instanceTransformsBuffer.getBufferData(transformsTypedArray);\n        }\n      }\n\n      if (defined(transformsTypedArray)) {\n        for (let i = 0; i < transformsCount; i++) {\n          const index = i * transformElements;\n\n          const transform = new Matrix4(\n            transformsTypedArray[index],\n            transformsTypedArray[index + 1],\n            transformsTypedArray[index + 2],\n            transformsTypedArray[index + 3],\n            transformsTypedArray[index + 4],\n            transformsTypedArray[index + 5],\n            transformsTypedArray[index + 6],\n            transformsTypedArray[index + 7],\n            transformsTypedArray[index + 8],\n            transformsTypedArray[index + 9],\n            transformsTypedArray[index + 10],\n            transformsTypedArray[index + 11],\n            0,\n            0,\n            0,\n            1,\n          );\n\n          if (instances.transformInWorldSpace) {\n            Matrix4.multiplyTransformation(\n              transform,\n              nodeComputedTransform,\n              transform,\n            );\n            Matrix4.multiplyTransformation(modelMatrix, transform, transform);\n          } else {\n            Matrix4.multiplyTransformation(\n              transform,\n              computedModelMatrix,\n              transform,\n            );\n          }\n          transforms.push(transform);\n        }\n      }\n    }\n\n    if (transforms.length === 0) {\n      transforms.push(computedModelMatrix);\n    }\n\n    const primitivesLength = runtimeNode.runtimePrimitives.length;\n    for (let j = 0; j < primitivesLength; j++) {\n      const runtimePrimitive = runtimeNode.runtimePrimitives[j];\n      const primitive = runtimePrimitive.primitive;\n\n      if (defined(runtimePrimitive.boundingSphere) && !defined(instances)) {\n        const boundingSphere = BoundingSphere.transform(\n          runtimePrimitive.boundingSphere,\n          computedModelMatrix,\n          scratchBoundingSphere,\n        );\n        const boundsIntersection = IntersectionTests.raySphere(\n          ray,\n          boundingSphere,\n        );\n        if (!defined(boundsIntersection)) {\n          continue;\n        }\n      }\n\n      const positionAttribute = ModelUtility.getAttributeBySemantic(\n        primitive,\n        VertexAttributeSemantic.POSITION,\n      );\n      const byteOffset = positionAttribute.byteOffset;\n      const byteStride = positionAttribute.byteStride;\n      const vertexCount = positionAttribute.count;\n\n      if (!defined(primitive.indices)) {\n        // Point clouds\n        continue;\n      }\n\n      let indices = primitive.indices.typedArray;\n      if (!defined(indices)) {\n        const indicesBuffer = primitive.indices.buffer;\n        const indicesCount = primitive.indices.count;\n        const indexDatatype = primitive.indices.indexDatatype;\n        if (defined(indicesBuffer) && frameState.context.webgl2) {\n          if (indexDatatype === IndexDatatype.UNSIGNED_BYTE) {\n            indices = new Uint8Array(indicesCount);\n          } else if (indexDatatype === IndexDatatype.UNSIGNED_SHORT) {\n            indices = new Uint16Array(indicesCount);\n          } else if (indexDatatype === IndexDatatype.UNSIGNED_INT) {\n            indices = new Uint32Array(indicesCount);\n          }\n\n          indicesBuffer.getBufferData(indices);\n        }\n      }\n\n      let vertices = positionAttribute.typedArray;\n      let componentDatatype = positionAttribute.componentDatatype;\n      let attributeType = positionAttribute.type;\n\n      const quantization = positionAttribute.quantization;\n      if (defined(quantization)) {\n        componentDatatype = positionAttribute.quantization.componentDatatype;\n        attributeType = positionAttribute.quantization.type;\n      }\n\n      const numComponents = AttributeType.getNumberOfComponents(attributeType);\n      const bytes = ComponentDatatype.getSizeInBytes(componentDatatype);\n      const isInterleaved =\n        !defined(vertices) &&\n        defined(byteStride) &&\n        byteStride !== numComponents * bytes;\n\n      let elementStride = numComponents;\n      let offset = 0;\n      if (isInterleaved) {\n        elementStride = byteStride / bytes;\n        offset = byteOffset / bytes;\n      }\n      const elementCount = vertexCount * elementStride;\n\n      if (!defined(vertices)) {\n        const verticesBuffer = positionAttribute.buffer;\n\n        if (defined(verticesBuffer) && frameState.context.webgl2) {\n          vertices = ComponentDatatype.createTypedArray(\n            componentDatatype,\n            elementCount,\n          );\n          verticesBuffer.getBufferData(\n            vertices,\n            isInterleaved ? 0 : byteOffset,\n            0,\n            elementCount,\n          );\n        }\n\n        if (quantization && positionAttribute.normalized) {\n          vertices = AttributeCompression.dequantize(\n            vertices,\n            componentDatatype,\n            attributeType,\n            vertexCount,\n          );\n        }\n      }\n\n      if (!defined(indices) || !defined(vertices)) {\n        return;\n      }\n\n      ellipsoid = ellipsoid ?? Ellipsoid.default;\n      verticalExaggeration = verticalExaggeration ?? 1.0;\n      relativeHeight = relativeHeight ?? 0.0;\n\n      const indicesLength = indices.length;\n      for (let i = 0; i < indicesLength; i += 3) {\n        const i0 = indices[i];\n        const i1 = indices[i + 1];\n        const i2 = indices[i + 2];\n\n        for (const instanceTransform of transforms) {\n          const v0 = getVertexPosition(\n            vertices,\n            i0,\n            offset,\n            elementStride,\n            quantization,\n            instanceTransform,\n            verticalExaggeration,\n            relativeHeight,\n            ellipsoid,\n            scratchV0,\n          );\n          const v1 = getVertexPosition(\n            vertices,\n            i1,\n            offset,\n            elementStride,\n            quantization,\n            instanceTransform,\n            verticalExaggeration,\n            relativeHeight,\n            ellipsoid,\n            scratchV1,\n          );\n          const v2 = getVertexPosition(\n            vertices,\n            i2,\n            offset,\n            elementStride,\n            quantization,\n            instanceTransform,\n            verticalExaggeration,\n            relativeHeight,\n            ellipsoid,\n            scratchV2,\n          );\n\n          const t = IntersectionTests.rayTriangleParametric(\n            ray,\n            v0,\n            v1,\n            v2,\n            model.backFaceCulling ?? true,\n          );\n\n          if (defined(t)) {\n            if (t < minT && t >= 0.0) {\n              minT = t;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  if (minT === Number.MAX_VALUE) {\n    return undefined;\n  }\n\n  result = Ray.getPoint(ray, minT, result);\n  if (frameState.mode !== SceneMode.SCENE3D) {\n    Cartesian3.fromElements(result.y, result.z, result.x, result);\n\n    const projection = frameState.mapProjection;\n    const ellipsoid = projection.ellipsoid;\n\n    const cartographic = projection.unproject(result, scratchPickCartographic);\n    ellipsoid.cartographicToCartesian(cartographic, result);\n  }\n\n  return result;\n}\n\nfunction getVertexPosition(\n  vertices,\n  index,\n  offset,\n  numElements,\n  quantization,\n  instanceTransform,\n  verticalExaggeration,\n  relativeHeight,\n  ellipsoid,\n  result,\n) {\n  const i = offset + index * numElements;\n  result.x = vertices[i];\n  result.y = vertices[i + 1];\n  result.z = vertices[i + 2];\n\n  if (defined(quantization)) {\n    if (quantization.octEncoded) {\n      result = AttributeCompression.octDecodeInRange(\n        result,\n        quantization.normalizationRange,\n        result,\n      );\n\n      if (quantization.octEncodedZXY) {\n        const x = result.x;\n        result.x = result.z;\n        result.z = result.y;\n        result.y = x;\n      }\n    } else {\n      result = Cartesian3.multiplyComponents(\n        result,\n        quantization.quantizedVolumeStepSize,\n        result,\n      );\n\n      result = Cartesian3.add(\n        result,\n        quantization.quantizedVolumeOffset,\n        result,\n      );\n    }\n  }\n\n  result = Matrix4.multiplyByPoint(instanceTransform, result, result);\n\n  if (verticalExaggeration !== 1.0) {\n    VerticalExaggeration.getPosition(\n      result,\n      ellipsoid,\n      verticalExaggeration,\n      relativeHeight,\n      result,\n    );\n  }\n\n  return result;\n}\n","/**\n * Determines if and how a glTF animation is looped.\n *\n * @enum {number}\n *\n * @see ModelAnimationCollection#add\n */\nconst ModelAnimationLoop = {\n  /**\n   * Play the animation once; do not loop it.\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: 0,\n\n  /**\n   * Loop the animation playing it from the start immediately after it stops.\n   *\n   * @type {number}\n   * @constant\n   */\n  REPEAT: 1,\n\n  /**\n   * Loop the animation.  First, playing it forward, then in reverse, then forward, and so on.\n   *\n   * @type {number}\n   * @constant\n   */\n  MIRRORED_REPEAT: 2,\n};\nexport default Object.freeze(ModelAnimationLoop);\n","/**\n * @private\n */\nconst ModelAnimationState = {\n  STOPPED: 0,\n  ANIMATING: 1,\n};\n\nexport default Object.freeze(ModelAnimationState);\n","import AlphaMode from \"./AlphaMode.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\n\n/**\n * Components for building models.\n *\n * @namespace ModelComponents\n *\n * @private\n */\nconst ModelComponents = {};\n\n/**\n * Information about the quantized attribute.\n *\n * @alias ModelComponents.Quantization\n * @constructor\n *\n * @private\n */\nfunction Quantization() {\n  /**\n   * Whether the quantized attribute is oct-encoded.\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.octEncoded = false;\n\n  /**\n   * Whether the oct-encoded values are stored as ZXY instead of XYZ. This is true when decoding from Draco.\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.octEncodedZXY = false;\n\n  /**\n   * The range used to convert buffer values to normalized values [0.0, 1.0]\n   * This is typically computed as (1 << quantizationBits) - 1.\n   * For oct-encoded values this value is a single Number.\n   *\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @private\n   */\n  this.normalizationRange = undefined;\n\n  /**\n   * The bottom-left corner of the quantization volume. Not applicable for oct encoded attributes.\n   * The type should match the attribute type - e.g. if the attribute type\n   * is AttributeType.VEC4 the offset should be a Cartesian4.\n   *\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @private\n   */\n  this.quantizedVolumeOffset = undefined;\n\n  /**\n   * The dimensions of the quantization volume. Not applicable for oct encoded attributes.\n   * The type should match the attribute type - e.g. if the attribute type\n   * is AttributeType.VEC4 the dimensions should be a Cartesian4.\n   *\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @private\n   */\n  this.quantizedVolumeDimensions = undefined;\n\n  /**\n   * The step size of the quantization volume, equal to\n   * quantizedVolumeDimensions / normalizationRange (component-wise).\n   * Not applicable for oct encoded attributes.\n   * The type should match the attribute type - e.g. if the attribute type\n   * is AttributeType.VEC4 the dimensions should be a Cartesian4.\n   *\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @private\n   */\n  this.quantizedVolumeStepSize = undefined;\n\n  /**\n   * The component data type of the quantized attribute, e.g. ComponentDatatype.UNSIGNED_SHORT.\n   *\n   * <p>\n   * The following component datatypes are not supported:\n   * <ul>\n   *   <li>ComponentDatatype.INT</li>\n   *   <li>ComponentDatatype.UNSIGNED_INT</li>\n   *   <li>ComponentDatatype.DOUBLE</li>\n   * </ul>\n   * </p>\n   *\n   * @type {ComponentDatatype}\n   * @private\n   */\n  this.componentDatatype = undefined;\n\n  /**\n   * The type of the quantized attribute, e.g. AttributeType.VEC2 for oct-encoded normals.\n   *\n   * @type {AttributeType}\n   * @private\n   */\n  this.type = undefined;\n}\n\n/**\n * A per-vertex or per-instance attribute.\n *\n * @alias ModelComponents.Attribute\n * @constructor\n *\n * @private\n */\nfunction Attribute() {\n  /**\n   * The attribute name. Must be unique within the attributes array.\n   *\n   * @type {string}\n   * @private\n   */\n  this.name = undefined;\n\n  /**\n   * The attribute semantic. The combination of semantic and setIndex must be\n   * unique within the attributes array.\n   *\n   * @type {VertexAttributeSemantic|InstanceAttributeSemantic}\n   * @private\n   */\n  this.semantic = undefined;\n\n  /**\n   * The set index of the attribute. Only applicable when the attribute has one\n   * of the following semantics:\n   *\n   * <ul>\n   *   <li>{@link VertexAttributeSemantic.TEXCOORD}</li>\n   *   <li>{@link VertexAttributeSemantic.COLOR}</li>\n   *   <li>{@link VertexAttributeSemantic.JOINTS}</li>\n   *   <li>{@link VertexAttributeSemantic.WEIGHTS}</li>\n   *   <li>{@link VertexAttributeSemantic.FEATURE_ID}</li>\n   *   <li>{@link InstanceAttributeSemantic.FEATURE_ID}</li>\n   * </ul>\n   */\n  this.setIndex = undefined;\n\n  /**\n   * The component data type of the attribute.\n   * <p>\n   * When the data is quantized the componentDatatype should match the\n   * dequantized data, which is typically ComponentDatatype.FLOAT.\n   * </p>\n   * <p>\n   * The following component datatypes are not supported:\n   * <ul>\n   *   <li>ComponentDatatype.INT</li>\n   *   <li>ComponentDatatype.UNSIGNED_INT</li>\n   *   <li>ComponentDatatype.DOUBLE</li>\n   * </ul>\n   * </p>\n   *\n   * @type {ComponentDatatype}\n   * @private\n   */\n  this.componentDatatype = undefined;\n\n  /**\n   * The type of the attribute.\n   * <p>\n   * When the data is oct-encoded the type should match the decoded data, which\n   * is typically AttributeType.VEC3.\n   * </p>\n   *\n   * @type {AttributeType}\n   * @private\n   */\n  this.type = undefined;\n\n  /**\n   * Whether the attribute is normalized.\n   *\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  this.normalized = false;\n\n  /**\n   * The number of elements.\n   *\n   * @type {number}\n   * @private\n   */\n  this.count = undefined;\n\n  /**\n   * Minimum value of each component in the attribute.\n   * <p>\n   * When the data is quantized the min should match the dequantized data.\n   * The normalized property has no effect on these values.\n   * </p>\n   * <p>\n   * Must be defined for POSITION attributes.\n   * </p>\n   *\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @private\n   */\n  this.min = undefined;\n\n  /**\n   * Maximum value of each component in the attribute.\n   * <p>\n   * When the data is quantized the max should match the dequantized data.\n   * The normalized property has no effect on these values.\n   * </p>\n   * <p>\n   * Must be defined for POSITION attributes.\n   * </p>\n   *\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @private\n   */\n  this.max = undefined;\n\n  /**\n   * A constant value used for all elements when typed array and buffer are undefined.\n   *\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @private\n   */\n  this.constant = undefined;\n\n  /**\n   * Information about the quantized attribute.\n   *\n   * @type {ModelComponents.Quantization}\n   * @private\n   */\n  this.quantization = undefined;\n\n  /**\n   * A typed array containing tightly-packed attribute values, as they appear\n   * in the model file.\n   *\n   * @type {Uint8Array|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array|Float32Array}\n   * @private\n   */\n  this.typedArray = undefined;\n\n  /**\n   * A vertex buffer. Attribute values are accessed using byteOffset and byteStride.\n   *\n   * @type {Buffer}\n   * @private\n   */\n  this.buffer = undefined;\n\n  /**\n   * The byte offset of elements in the buffer.\n   *\n   * @type {number}\n   * @default 0\n   * @private\n   */\n  this.byteOffset = 0;\n\n  /**\n   * The byte stride of elements in the buffer. When undefined the elements are tightly packed.\n   *\n   * @type {number}\n   * @private\n   */\n  this.byteStride = undefined;\n}\n\n/**\n * Indices used to select vertices for rendering.\n *\n * @alias ModelComponents.Indices\n * @constructor\n *\n * @private\n */\nfunction Indices() {\n  /**\n   * The index data type of the attribute, e.g. IndexDatatype.UNSIGNED_SHORT.\n   *\n   * @type {IndexDatatype}\n   * @private\n   */\n  this.indexDatatype = undefined;\n\n  /**\n   * The number of indices.\n   *\n   * @type {number}\n   * @private\n   */\n  this.count = undefined;\n\n  /**\n   * An index buffer containing indices.\n   *\n   * @type {Buffer}\n   * @private\n   */\n  this.buffer = undefined;\n\n  /**\n   * A typed array containing indices.\n   *\n   * @type {Uint8Array|Uint16Array|Uint32Array}\n   * @private\n   */\n  this.typedArray = undefined;\n}\n\n/**\n * Maps per-vertex or per-instance feature IDs to a property table. Feature\n * IDs are stored in an accessor.\n *\n * @alias ModelComponents.FeatureIdAttribute\n * @constructor\n *\n * @private\n */\nfunction FeatureIdAttribute() {\n  /**\n   * How many unique features are defined in this set of feature IDs\n   *\n   * @type {number}\n   * @private\n   */\n  this.featureCount = undefined;\n\n  /**\n   * This value indicates that no feature is indicated with this vertex\n   *\n   * @type {number}\n   * @private\n   */\n  this.nullFeatureId = undefined;\n\n  /**\n   * The ID of the property table that feature IDs index into. If undefined,\n   * feature IDs are used for classification, but no metadata is associated.\n   *\n   *\n   * @type {number}\n   * @private\n   */\n  this.propertyTableId = undefined;\n\n  /**\n   * The set index of feature ID attribute containing feature IDs.\n   *\n   * @type {number}\n   * @private\n   */\n  this.setIndex = undefined;\n\n  /**\n   * The label to identify this set of feature IDs. This is used in picking,\n   * styling and shaders.\n   *\n   * @type {string}\n   * @private\n   */\n  this.label = undefined;\n\n  /**\n   * Label to identify this set of feature IDs by its position in the array.\n   * This will always be either \"featureId_N\" for primitives or\n   * \"instanceFeatureId_N\" for instances.\n   *\n   * @type {string}\n   * @private\n   */\n  this.positionalLabel = undefined;\n}\n\n/**\n * Defines a range of implicitly-defined feature IDs, one for each vertex or\n * instance. Such feature IDs may optionally be associated with a property table\n * storing metadata\n *\n * @alias ModelComponents.FeatureIdImplicitRange\n * @constructor\n *\n * @private\n */\nfunction FeatureIdImplicitRange() {\n  /**\n   * How many unique features are defined in this set of feature IDs\n   *\n   * @type {number}\n   * @private\n   */\n  this.featureCount = undefined;\n\n  /**\n   * This value indicates that no feature is indicated with this vertex\n   *\n   * @type {number}\n   * @private\n   */\n  this.nullFeatureId = undefined;\n\n  /**\n   * The ID of the property table that feature IDs index into. If undefined,\n   * feature IDs are used for classification, but no metadata is associated.\n   *\n   * @type {number}\n   * @private\n   */\n  this.propertyTableId = undefined;\n\n  /**\n   * The first feature ID to use when setIndex is undefined\n   *\n   * @type {number}\n   * @default 0\n   * @private\n   */\n  this.offset = 0;\n\n  /**\n   * Number of times each feature ID is repeated before being incremented.\n   *\n   * @type {number}\n   * @private\n   */\n  this.repeat = undefined;\n\n  /**\n   * The label to identify this set of feature IDs. This is used in picking,\n   * styling and shaders.\n   *\n   * @type {string}\n   * @private\n   */\n  this.label = undefined;\n\n  /**\n   * Label to identify this set of feature IDs by its position in the array.\n   * This will always be either \"featureId_N\" for primitives or\n   * \"instanceFeatureId_N\" for instances.\n   *\n   * @type {string}\n   * @private\n   */\n  this.positionalLabel = undefined;\n}\n\n/**\n * A texture that contains per-texel feature IDs that index into a property table.\n *\n * @alias ModelComponents.FeatureIdTexture\n * @constructor\n *\n * @private\n */\nfunction FeatureIdTexture() {\n  /**\n   * How many unique features are defined in this set of feature IDs\n   *\n   * @type {number}\n   * @private\n   */\n  this.featureCount = undefined;\n\n  /**\n   * This value indicates that no feature is indicated with this texel\n   *\n   * @type {number}\n   * @private\n   */\n  this.nullFeatureId = undefined;\n\n  /**\n   * The ID of the property table that feature IDs index into. If undefined,\n   * feature IDs are used for classification, but no metadata is associated.\n   *\n   * @type {string}\n   * @private\n   */\n  this.propertyTableId = undefined;\n\n  /**\n   * The texture reader containing feature IDs.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.textureReader = undefined;\n\n  /**\n   * The label to identify this set of feature IDs. This is used in picking,\n   * styling and shaders.\n   *\n   * @type {string}\n   * @private\n   */\n  this.label = undefined;\n\n  /**\n   * Label to identify this set of feature IDs by its position in the array.\n   * This will always be either \"featureId_N\" for primitives or\n   * \"instanceFeatureId_N\" for instances.\n   *\n   * @type {string}\n   * @private\n   */\n  this.positionalLabel = undefined;\n}\n\n/**\n * A morph target where each attribute contains attribute displacement data.\n *\n * @alias ModelComponents.MorphTarget\n * @constructor\n *\n * @private\n */\nfunction MorphTarget() {\n  /**\n   * Attributes that are part of the morph target, e.g. positions, normals, and tangents.\n   *\n   * @type {ModelComponents.Attribute[]}\n   * @private\n   */\n  this.attributes = [];\n}\n\n/**\n * Geometry to be rendered with a material.\n *\n * @alias ModelComponents.Primitive\n * @constructor\n *\n * @private\n */\nfunction Primitive() {\n  /**\n   * The vertex attributes, e.g. positions, normals, etc.\n   *\n   * @type {ModelComponents.Attribute[]}\n   * @private\n   */\n  this.attributes = [];\n\n  /**\n   * The morph targets.\n   *\n   * @type {ModelComponents.MorphTarget[]}\n   * @private\n   */\n  this.morphTargets = [];\n\n  /**\n   * The indices.\n   *\n   * @type {ModelComponents.Indices}\n   * @private\n   */\n  this.indices = undefined;\n\n  /**\n   * The material.\n   *\n   * @type {ModelComponents.Material}\n   * @private\n   */\n  this.material = undefined;\n\n  /**\n   * The primitive type, e.g. PrimitiveType.TRIANGLES.\n   *\n   * @type {PrimitiveType}\n   * @private\n   */\n  this.primitiveType = undefined;\n\n  /**\n   * The feature IDs associated with this primitive. Feature ID types may\n   * be interleaved\n   *\n   * @type {Array<ModelComponents.FeatureIdAttribute|ModelComponents.FeatureIdImplicitRange|ModelComponents.FeatureIdTexture>}\n   * @private\n   */\n  this.featureIds = [];\n\n  /**\n   * The property texture IDs. These indices correspond to the array of\n   * property textures.\n   *\n   * @type {number[]}\n   * @private\n   */\n  this.propertyTextureIds = [];\n\n  /**\n   * The property attribute IDs. These indices correspond to the array of\n   * property attributes in the EXT_structural_metadata extension.\n   *\n   * @type {number[]}\n   * @private\n   */\n  this.propertyAttributeIds = [];\n\n  /**\n   * If the CESIUM_primitive_outline glTF extension is used, this property\n   * stores an additional attribute storing outline coordinates.\n   *\n   * @type {Attribute}\n   * @private\n   */\n  this.outlineCoordinates = undefined;\n\n  /**\n   * If the model is part of a Model3DTileContent of a Cesium3DTileset that\n   * has 'imageryLayers', then this will represent the information that is\n   * required for draping the imagery over this primitive.\n   *\n   * @type {ModelPrimitiveImagery|undefined}\n   * @private\n   */\n  this.modelPrimitiveImagery = undefined;\n}\n\n/**\n * Position and metadata information for instances of a node.\n *\n * @alias ModelComponents.Instances\n * @constructor\n *\n * @private\n */\nfunction Instances() {\n  /**\n   * The instance attributes, e.g. translation, rotation, scale, feature id, etc.\n   *\n   * @type {ModelComponents.Attribute[]}\n   * @private\n   */\n  this.attributes = [];\n\n  /**\n   * The feature ID attributes associated with this set of instances.\n   * Feature ID attribute types may be interleaved.\n   *\n   * @type {Array<ModelComponents.FeatureIdAttribute|ModelComponents.FeatureIdImplicitRange>}\n   * @private\n   */\n  this.featureIds = [];\n\n  /**\n   * Whether the instancing transforms are applied in world space. For glTF models that\n   * use EXT_mesh_gpu_instancing, the transform is applied in object space. For i3dm files,\n   * the instance transform is in world space.\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.transformInWorldSpace = false;\n}\n\n/**\n * Joints and matrices defining a skin.\n *\n * @alias ModelComponents.Skin\n * @constructor\n *\n * @private\n */\nfunction Skin() {\n  /**\n   * The index of the skin in the glTF. This is useful for finding the skin\n   * that applies to a node after the skin is instantiated at runtime.\n   *\n   * @type {number}\n   * @private\n   */\n  this.index = undefined;\n\n  /**\n   * The joints.\n   *\n   * @type {ModelComponents.Node[]}\n   * @private\n   */\n  this.joints = [];\n\n  /**\n   * The inverse bind matrices of the joints.\n   *\n   * @type {Matrix4[]}\n   * @private\n   */\n  this.inverseBindMatrices = [];\n}\n\n/**\n * A node in the node hierarchy.\n *\n * @alias ModelComponents.Node\n * @constructor\n *\n * @private\n */\nfunction Node() {\n  /**\n   * The name of the node.\n   *\n   * @type {string}\n   * @private\n   */\n  this.name = undefined;\n\n  /**\n   * The index of the node in the glTF. This is useful for finding the nodes\n   * that belong to a skin after they have been instantiated at runtime.\n   *\n   * @type {number}\n   * @private\n   */\n  this.index = undefined;\n\n  /**\n   * The children nodes.\n   *\n   * @type {ModelComponents.Node[]}\n   * @private\n   */\n  this.children = [];\n\n  /**\n   * The mesh primitives.\n   *\n   * @type {ModelComponents.Primitive[]}\n   * @private\n   */\n  this.primitives = [];\n\n  /**\n   * Instances of this node.\n   *\n   * @type {ModelComponents.Instances}\n   * @private\n   */\n  this.instances = undefined;\n\n  /**\n   * The skin.\n   *\n   * @type {ModelComponents.Skin}\n   * @private\n   */\n  this.skin = undefined;\n\n  /**\n   * The local transformation matrix. When matrix is defined translation,\n   * rotation, and scale must be undefined. When matrix is undefined\n   * translation, rotation, and scale must all be defined.\n   *\n   * @type {Matrix4}\n   * @private\n   */\n  this.matrix = undefined;\n\n  /**\n   * The local translation.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this.translation = undefined;\n\n  /**\n   * The local rotation.\n   *\n   * @type {Quaternion}\n   * @private\n   */\n  this.rotation = undefined;\n\n  /**\n   * The local scale.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this.scale = undefined;\n\n  /**\n   * An array of weights to be applied to the primitives' morph targets.\n   * These are supplied by either the node or its mesh.\n   *\n   * @type {number[]}\n   * @private\n   */\n  this.morphWeights = [];\n\n  /**\n   * The name of the articulation affecting this node, as defined by the\n   * AGI_articulations extension.\n   *\n   * @type {string}\n   * @private\n   */\n  this.articulationName = undefined;\n}\n\n/**\n * A scene containing nodes.\n *\n * @alias ModelComponents.Scene\n * @constructor\n *\n * @private\n */\nfunction Scene() {\n  /**\n   * The nodes belonging to the scene.\n   *\n   * @type {ModelComponents.Node[]}\n   * @private\n   */\n  this.nodes = [];\n}\n\n/**\n * The property of the node that is targeted by an animation. The values of\n * this enum are used to look up the appropriate property on the runtime node.\n *\n * @alias {ModelComponents.AnimatedPropertyType}\n * @enum {string}\n *\n * @private\n */\nconst AnimatedPropertyType = {\n  TRANSLATION: \"translation\",\n  ROTATION: \"rotation\",\n  SCALE: \"scale\",\n  WEIGHTS: \"weights\",\n};\n\n/**\n * An animation sampler that describes the sources of animated keyframe data\n * and their interpolation.\n *\n * @alias {ModelComponents.AnimationSampler}\n * @constructor\n *\n * @private\n */\nfunction AnimationSampler() {\n  /**\n   * The timesteps of the animation.\n   *\n   * @type {number[]}\n   * @private\n   */\n  this.input = [];\n\n  /**\n   * The method used to interpolate between the animation's keyframe data.\n   *\n   * @type {InterpolationType}\n   * @private\n   */\n  this.interpolation = undefined;\n\n  /**\n   * The keyframe data of the animation.\n   *\n   * @type {number[]|Cartesian3[]|Quaternion[]}\n   * @private\n   */\n  this.output = [];\n}\n\n/**\n * An animation target, which specifies the node and property to animate.\n *\n * @alias {ModelComponents.AnimationTarget}\n * @constructor\n *\n * @private\n */\nfunction AnimationTarget() {\n  /**\n   * The node that will be affected by the animation.\n   *\n   * @type {ModelComponents.Node}\n   * @private\n   */\n  this.node = undefined;\n\n  /**\n   * The property of the node to be animated.\n   *\n   * @type {ModelComponents.AnimatedPropertyType}\n   * @private\n   */\n  this.path = undefined;\n}\n\n/**\n * An animation channel linking an animation sampler and the target it animates.\n *\n * @alias {ModelComponents.AnimationChannel}\n * @constructor\n *\n * @private\n */\nfunction AnimationChannel() {\n  /**\n   * The sampler used as the source of the animation data.\n   *\n   * @type {ModelComponents.AnimationSampler}\n   * @private\n   */\n  this.sampler = undefined;\n\n  /**\n   * The target of the animation.\n   *\n   * @type {ModelComponents.AnimationTarget}\n   * @private\n   */\n  this.target = undefined;\n}\n\n/**\n * An animation in the model.\n *\n * @alias {ModelComponents.Animation}\n * @constructor\n *\n * @private\n */\nfunction Animation() {\n  /**\n   * The name of the animation.\n   *\n   * @type {string}\n   * @private\n   */\n  this.name = undefined;\n\n  /**\n   * The samplers used in this animation.\n   *\n   * @type {ModelComponents.AnimationSampler[]}\n   * @private\n   */\n  this.samplers = [];\n\n  /**\n   * The channels used in this animation.\n   *\n   * @type {ModelComponents.AnimationChannel[]}\n   * @private\n   */\n  this.channels = [];\n}\n\n/**\n * An articulation stage belonging to an articulation from the\n * AGI_articulations extension.\n *\n * @alias {ModelComponents.ArticulationStage}\n * @constructor\n *\n * @private\n */\nfunction ArticulationStage() {\n  /**\n   * The name of the articulation stage.\n   *\n   * @type {string}\n   * @private\n   */\n  this.name = undefined;\n\n  /**\n   * The type of the articulation stage, defined by the type of motion it modifies.\n   *\n   * @type {ArticulationStageType}\n   * @private\n   */\n  this.type = undefined;\n\n  /**\n   * The minimum value for the range of motion of this articulation stage.\n   *\n   * @type {number}\n   * @private\n   */\n  this.minimumValue = undefined;\n\n  /**\n   * The maximum value for the range of motion of this articulation stage.\n   *\n   * @type {number}\n   * @private\n   */\n  this.maximumValue = undefined;\n\n  /**\n   * The initial value for this articulation stage.\n   *\n   * @type {number}\n   * @private\n   */\n  this.initialValue = undefined;\n}\n\n/**\n * An articulation for the model, as defined by the AGI_articulations extension.\n *\n * @alias {ModelComponents.Articulation}\n * @constructor\n *\n * @private\n */\nfunction Articulation() {\n  /**\n   * The name of the articulation.\n   *\n   * @type {string}\n   * @private\n   */\n  this.name = undefined;\n\n  /**\n   * The stages belonging to this articulation. The stages are applied to\n   * the model in order of appearance.\n   *\n   * @type {ModelComponents.ArticulationStage[]}\n   * @private\n   */\n  this.stages = [];\n}\n\n/**\n * The asset of the model.\n *\n * @alias {ModelComponents.Asset}\n * @constructor\n *\n * @private\n */\nfunction Asset() {\n  /**\n   * The credits of the model.\n   *\n   * @type {Credit[]}\n   * @private\n   */\n  this.credits = [];\n}\n\n/**\n * The components that make up a model.\n *\n * @alias ModelComponents.Components\n * @constructor\n *\n * @private\n */\nfunction Components() {\n  /**\n   * The asset of the model.\n   *\n   * @type {ModelComponents.Asset}\n   * @private\n   */\n  this.asset = new Asset();\n\n  /**\n   * The default scene.\n   *\n   * @type {ModelComponents.Scene}\n   * @private\n   */\n  this.scene = undefined;\n\n  /**\n   * All nodes in the model.\n   *\n   * @type {ModelComponents.Node[]}\n   */\n  this.nodes = [];\n\n  /**\n   * All skins in the model.\n   *\n   * @type {ModelComponents.Skin[]}\n   */\n  this.skins = [];\n\n  /**\n   * All animations in the model.\n   *\n   * @type {ModelComponents.Animation[]}\n   */\n  this.animations = [];\n\n  /**\n   * All articulations in the model as defined by the AGI_articulations extension.\n   *\n   * @type {ModelComponents.Articulation[]}\n   */\n  this.articulations = [];\n\n  /**\n   * Structural metadata containing the schema, property tables, property\n   * textures and property mappings\n   *\n   * @type {StructuralMetadata}\n   * @private\n   */\n  this.structuralMetadata = undefined;\n\n  /**\n   * The model's up axis.\n   *\n   * @type {Axis}\n   * @private\n   */\n  this.upAxis = undefined;\n\n  /**\n   * The model's forward axis.\n   *\n   * @type {Axis}\n   * @private\n   */\n  this.forwardAxis = undefined;\n\n  /**\n   * A world-space transform to apply to the primitives.\n   *\n   * @type {Matrix4}\n   * @private\n   */\n  this.transform = Matrix4.clone(Matrix4.IDENTITY);\n\n  /**\n   * A mapping from extension names like `\"EXT_example_extension\"` to\n   * the object that was created from the extension input\n   *\n   * @type {object}\n   * @private\n   */\n  this.extensions = {};\n}\n\n/**\n * Information about a GPU texture, including the texture itself\n *\n * @alias ModelComponents.TextureReader\n * @constructor\n *\n * @private\n */\nfunction TextureReader() {\n  /**\n   * The underlying GPU texture. The {@link Texture} contains the sampler.\n   *\n   * @type {Texture}\n   * @private\n   */\n  this.texture = undefined;\n\n  /**\n   * The index of the texture in the glTF. This is useful for determining\n   * when textures are shared to avoid attaching a texture in multiple uniform\n   * slots in the shader.\n   *\n   * @type {number}\n   * @private\n   */\n  this.index = undefined;\n\n  /**\n   * The texture coordinate set.\n   *\n   * @type {number}\n   * @default 0\n   * @private\n   */\n  this.texCoord = 0;\n\n  /**\n   * Transformation matrix to apply to texture coordinates.\n   *\n   * @type {Matrix3}\n   * @default Matrix3.IDENTITY\n   */\n  this.transform = Matrix3.clone(Matrix3.IDENTITY);\n\n  /**\n   * Scale to apply to texture values.\n   *\n   * @type {number}\n   * @default 1.0\n   * @private\n   */\n  this.scale = 1.0;\n\n  /**\n   * The texture channels to read from. When undefined all channels are read.\n   *\n   * @type {string}\n   */\n  this.channels = undefined;\n}\n\n/**\n * Material properties for the PBR metallic roughness shading model.\n *\n * @alias ModelComponents.MetallicRoughness\n * @constructor\n *\n * @private\n */\nfunction MetallicRoughness() {\n  /**\n   * The base color texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.baseColorTexture = undefined;\n\n  /**\n   * The metallic roughness texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.metallicRoughnessTexture = undefined;\n\n  /**\n   * The base color factor.\n   *\n   * @type {Cartesian4}\n   * @default new Cartesian4(1.0, 1.0, 1.0, 1.0)\n   * @private\n   */\n  this.baseColorFactor = Cartesian4.clone(\n    MetallicRoughness.DEFAULT_BASE_COLOR_FACTOR,\n  );\n\n  /**\n   * The metallic factor.\n   *\n   * @type {number}\n   * @default 1.0\n   * @private\n   */\n  this.metallicFactor = MetallicRoughness.DEFAULT_METALLIC_FACTOR;\n\n  /**\n   * The roughness factor.\n   *\n   * @type {number}\n   * @default 1.0\n   * @private\n   */\n  this.roughnessFactor = MetallicRoughness.DEFAULT_ROUGHNESS_FACTOR;\n}\n\n/**\n * @private\n */\nMetallicRoughness.DEFAULT_BASE_COLOR_FACTOR = Cartesian4.ONE;\n\n/**\n * @private\n */\nMetallicRoughness.DEFAULT_METALLIC_FACTOR = 1.0;\n\n/**\n * @private\n */\nMetallicRoughness.DEFAULT_ROUGHNESS_FACTOR = 1.0;\n\n/**\n * Material properties for the PBR specular glossiness shading model.\n *\n * @alias ModelComponents.SpecularGlossiness\n * @constructor\n *\n * @private\n */\nfunction SpecularGlossiness() {\n  /**\n   * The diffuse texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.diffuseTexture = undefined;\n\n  /**\n   * The specular glossiness texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.specularGlossinessTexture = undefined;\n\n  /**\n   * The diffuse factor.\n   *\n   * @type {Cartesian4}\n   * @default new Cartesian4(1.0, 1.0, 1.0, 1.0)\n   * @private\n   */\n  this.diffuseFactor = Cartesian4.clone(\n    SpecularGlossiness.DEFAULT_DIFFUSE_FACTOR,\n  );\n\n  /**\n   * The specular factor.\n   *\n   * @type {Cartesian3}\n   * @default new Cartesian3(1.0, 1.0, 1.0)\n   * @private\n   */\n  this.specularFactor = Cartesian3.clone(\n    SpecularGlossiness.DEFAULT_SPECULAR_FACTOR,\n  );\n\n  /**\n   * The glossiness factor.\n   *\n   * @type {number}\n   * @default 1.0\n   * @private\n   */\n  this.glossinessFactor = SpecularGlossiness.DEFAULT_GLOSSINESS_FACTOR;\n}\n\n/**\n * @private\n */\nSpecularGlossiness.DEFAULT_DIFFUSE_FACTOR = Cartesian4.ONE;\n\n/**\n * @private\n */\nSpecularGlossiness.DEFAULT_SPECULAR_FACTOR = Cartesian3.ONE;\n\n/**\n * @private\n */\nSpecularGlossiness.DEFAULT_GLOSSINESS_FACTOR = 1.0;\n\nfunction Specular() {\n  /**\n   * The specular factor.\n   *\n   * @type {number}\n   * @default 1.0\n   * @private\n   */\n  this.specularFactor = Specular.DEFAULT_SPECULAR_FACTOR;\n\n  /**\n   * The specular texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.specularTexture = undefined;\n\n  /**\n   * The specular color factor.\n   *\n   * @type {Cartesian3}\n   * @default new Cartesian3(1.0, 1.0, 1.0)\n   * @private\n   */\n  this.specularColorFactor = Cartesian3.clone(\n    Specular.DEFAULT_SPECULAR_COLOR_FACTOR,\n  );\n\n  /**\n   * The specular color texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.specularColorTexture = undefined;\n}\n\n/**\n * @private\n */\nSpecular.DEFAULT_SPECULAR_FACTOR = 1.0;\n\n/**\n * @private\n */\nSpecular.DEFAULT_SPECULAR_COLOR_FACTOR = Cartesian3.ONE;\n\nfunction Anisotropy() {\n  /**\n   * The anisotropy strength.\n   *\n   * @type {number}\n   * @default 0.0\n   * @private\n   */\n  this.anisotropyStrength = Anisotropy.DEFAULT_ANISOTROPY_STRENGTH;\n\n  /**\n   * The rotation of the anisotropy in tangent, bitangent space,\n   * measured in radians counter-clockwise from the tangent.\n   *\n   * @type {number}\n   * @default 0.0\n   * @private\n   */\n  this.anisotropyRotation = Anisotropy.DEFAULT_ANISOTROPY_ROTATION;\n\n  /**\n   * The anisotropy texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.anisotropyTexture = undefined;\n}\n\n/**\n * @private\n */\nAnisotropy.DEFAULT_ANISOTROPY_STRENGTH = 0.0;\n\n/**\n * @private\n */\nAnisotropy.DEFAULT_ANISOTROPY_ROTATION = 0.0;\n\nfunction Clearcoat() {\n  /**\n   * The clearcoat layer intensity.\n   *\n   * @type {number}\n   * @default 0.0\n   * @private\n   */\n  this.clearcoatFactor = Clearcoat.DEFAULT_CLEARCOAT_FACTOR;\n\n  /**\n   * The clearcoat layer intensity texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.clearcoatTexture = undefined;\n\n  /**\n   * The clearcoat layer roughness.\n   *\n   * @type {number}\n   * @default 0.0\n   * @private\n   */\n  this.clearcoatRoughnessFactor = Clearcoat.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR;\n\n  /**\n   * The clearcoat layer roughness texture.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.clearcoatRoughnessTexture = undefined;\n\n  /**\n   * The clearcoat normal map texture.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.clearcoatNormalTexture = undefined;\n}\n\n/**\n * @private\n */\nClearcoat.DEFAULT_CLEARCOAT_FACTOR = 0.0;\n\n/**\n * @private\n */\nClearcoat.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR = 0.0;\n\n/**\n * The material appearance of a primitive.\n *\n * @alias ModelComponents.Material\n * @constructor\n *\n * @private\n */\nfunction Material() {\n  /**\n   * Material properties for the PBR metallic roughness shading model.\n   *\n   * @type {ModelComponents.MetallicRoughness}\n   * @private\n   */\n  this.metallicRoughness = new MetallicRoughness();\n\n  /**\n   * Material properties for the PBR specular glossiness shading model.\n   *\n   * @type {ModelComponents.SpecularGlossiness}\n   * @private\n   */\n  this.specularGlossiness = undefined;\n\n  /**\n   * Material properties for the PBR specular shading model.\n   *\n   * @type {ModelComponents.Specular}\n   * @private\n   */\n  this.specular = undefined;\n\n  /**\n   * Material properties for the PBR anisotropy shading model.\n   *\n   * @type {ModelComponents.Anisotropy}\n   * @private\n   */\n  this.anisotropy = undefined;\n\n  /**\n   * Material properties for the PBR clearcoat shading model.\n   *\n   * @type {ModelComponents.Clearcoat}\n   * @private\n   */\n  this.clearcoat = undefined;\n\n  /**\n   * The emissive texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.emissiveTexture = undefined;\n\n  /**\n   * The normal texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.normalTexture = undefined;\n\n  /**\n   * The occlusion texture reader.\n   *\n   * @type {ModelComponents.TextureReader}\n   * @private\n   */\n  this.occlusionTexture = undefined;\n\n  /**\n   * The emissive factor.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   * @private\n   */\n  this.emissiveFactor = Cartesian3.clone(Material.DEFAULT_EMISSIVE_FACTOR);\n\n  /**\n   * The alpha mode.\n   *\n   * @type {AlphaMode}\n   * @default AlphaMode.OPAQUE\n   * @private\n   */\n  this.alphaMode = AlphaMode.OPAQUE;\n\n  /**\n   * The alpha cutoff value of the material for the MASK alpha mode.\n   *\n   * @type {number}\n   * @default 0.5\n   * @private\n   */\n  this.alphaCutoff = 0.5;\n\n  /**\n   * Specifies whether the material is double sided.\n   *\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  this.doubleSided = false;\n\n  /**\n   * Specifies whether the material is unlit.\n   *\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  this.unlit = false;\n\n  /**\n   * The point diameter in pixels for POINTS primitives. This is set by the\n   * BENTLEY_materials_point_style extension.\n   *\n   * @type {number|undefined}\n   * @default undefined\n   * @private\n   */\n  this.pointDiameter = undefined;\n}\n\n/**\n * @private\n */\nMaterial.DEFAULT_EMISSIVE_FACTOR = Cartesian3.ZERO;\n\nModelComponents.Quantization = Quantization;\nModelComponents.Attribute = Attribute;\nModelComponents.Indices = Indices;\nModelComponents.FeatureIdAttribute = FeatureIdAttribute;\nModelComponents.FeatureIdTexture = FeatureIdTexture;\nModelComponents.FeatureIdImplicitRange = FeatureIdImplicitRange;\nModelComponents.MorphTarget = MorphTarget;\nModelComponents.Primitive = Primitive;\nModelComponents.Instances = Instances;\nModelComponents.Skin = Skin;\nModelComponents.Node = Node;\nModelComponents.Scene = Scene;\nModelComponents.AnimatedPropertyType = Object.freeze(AnimatedPropertyType);\nModelComponents.AnimationSampler = AnimationSampler;\nModelComponents.AnimationTarget = AnimationTarget;\nModelComponents.AnimationChannel = AnimationChannel;\nModelComponents.Animation = Animation;\nModelComponents.ArticulationStage = ArticulationStage;\nModelComponents.Articulation = Articulation;\nModelComponents.Asset = Asset;\nModelComponents.Components = Components;\nModelComponents.TextureReader = TextureReader;\nModelComponents.MetallicRoughness = MetallicRoughness;\nModelComponents.SpecularGlossiness = SpecularGlossiness;\nModelComponents.Specular = Specular;\nModelComponents.Anisotropy = Anisotropy;\nModelComponents.Clearcoat = Clearcoat;\nModelComponents.Material = Material;\n\nexport default ModelComponents;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport IauOrientationAxes from \"../Core/IauOrientationAxes.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Simon1994PlanetaryPositions from \"../Core/Simon1994PlanetaryPositions.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport EllipsoidPrimitive from \"./EllipsoidPrimitive.js\";\nimport Material from \"./Material.js\";\n\n/**\n * Draws the Moon in 3D.\n * @alias Moon\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.show=true] Determines whether the moon will be rendered.\n * @param {string} [options.textureUrl=buildModuleUrl('Assets/Textures/moonSmall.jpg')] The moon texture.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.MOON] The moon ellipsoid.\n * @param {boolean} [options.onlySunLighting=true] Use the sun as the only light source.\n *\n *\n * @example\n * scene.moon = new Cesium.Moon();\n *\n * @see Scene#moon\n */\nfunction Moon(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let url = options.textureUrl;\n  if (!defined(url)) {\n    url = buildModuleUrl(\"Assets/Textures/moonSmall.jpg\");\n  }\n\n  /**\n   * Determines if the moon will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * The moon texture.\n   * @type {string}\n   * @default buildModuleUrl('Assets/Textures/moonSmall.jpg')\n   */\n  this.textureUrl = url;\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.MOON;\n\n  /**\n   * Use the sun as the only light source.\n   * @type {boolean}\n   * @default true\n   */\n  this.onlySunLighting = options.onlySunLighting ?? true;\n\n  this._ellipsoidPrimitive = new EllipsoidPrimitive({\n    radii: this.ellipsoid.radii,\n    material: Material.fromType(Material.ImageType),\n    depthTestEnabled: false,\n    _owner: this,\n  });\n  this._ellipsoidPrimitive.material.translucent = false;\n\n  this._axes = new IauOrientationAxes();\n}\n\nObject.defineProperties(Moon.prototype, {\n  /**\n   * Get the ellipsoid that defines the shape of the moon.\n   *\n   * @memberof Moon.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   *\n   * @default {@link Ellipsoid.MOON}\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n});\n\nconst icrfToFixed = new Matrix3();\nconst rotationScratch = new Matrix3();\nconst translationScratch = new Cartesian3();\nconst scratchCommandList = [];\n\n/**\n * @private\n */\nMoon.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  const ellipsoidPrimitive = this._ellipsoidPrimitive;\n  ellipsoidPrimitive.material.uniforms.image = this.textureUrl;\n  ellipsoidPrimitive.onlySunLighting = this.onlySunLighting;\n\n  const date = frameState.time;\n  if (!defined(Transforms.computeIcrfToFixedMatrix(date, icrfToFixed))) {\n    Transforms.computeTemeToPseudoFixedMatrix(date, icrfToFixed);\n  }\n\n  const rotation = this._axes.evaluate(date, rotationScratch);\n  Matrix3.transpose(rotation, rotation);\n  Matrix3.multiply(icrfToFixed, rotation, rotation);\n\n  const translation =\n    Simon1994PlanetaryPositions.computeMoonPositionInEarthInertialFrame(\n      date,\n      translationScratch,\n    );\n  Matrix3.multiplyByVector(icrfToFixed, translation, translation);\n\n  Matrix4.fromRotationTranslation(\n    rotation,\n    translation,\n    ellipsoidPrimitive.modelMatrix,\n  );\n\n  const savedCommandList = frameState.commandList;\n  frameState.commandList = scratchCommandList;\n  scratchCommandList.length = 0;\n  ellipsoidPrimitive.update(frameState);\n  frameState.commandList = savedCommandList;\n  return scratchCommandList.length === 1 ? scratchCommandList[0] : undefined;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Moon#destroy\n */\nMoon.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * moon = moon && moon.destroy();\n *\n * @see Moon#isDestroyed\n */\nMoon.prototype.destroy = function () {\n  this._ellipsoidPrimitive =\n    this._ellipsoidPrimitive && this._ellipsoidPrimitive.destroy();\n  return destroyObject(this);\n};\nexport default Moon;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestScheduler from \"../Core/RequestScheduler.js\";\nimport RequestState from \"../Core/RequestState.js\";\nimport RequestType from \"../Core/RequestType.js\";\nimport Cesium3DContentGroup from \"./Cesium3DContentGroup.js\";\nimport Cesium3DTileContentType from \"./Cesium3DTileContentType.js\";\nimport Cesium3DTileContentFactory from \"./Cesium3DTileContentFactory.js\";\nimport findContentMetadata from \"./findContentMetadata.js\";\nimport findGroupMetadata from \"./findGroupMetadata.js\";\nimport preprocess3DTileContent from \"./preprocess3DTileContent.js\";\n\n/**\n * A collection of contents for tiles that have multiple contents, either via the tile JSON (3D Tiles 1.1) or the <code>3DTILES_multiple_contents</code> extension.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_multiple_contents|3DTILES_multiple_contents extension}\n *\n * @alias Multiple3DTileContent\n * @constructor\n *\n * @param {Cesium3DTileset} tileset The tileset this content belongs to\n * @param {Cesium3DTile} tile The content this content belongs to\n * @param {Resource} tilesetResource The resource that points to the tileset. This will be used to derive each inner content's resource.\n * @param {object} contentsJson Either the tile JSON containing the contents array (3D Tiles 1.1), or <code>3DTILES_multiple_contents</code> extension JSON\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction Multiple3DTileContent(tileset, tile, tilesetResource, contentsJson) {\n  this._tileset = tileset;\n  this._tile = tile;\n  this._tilesetResource = tilesetResource;\n  this._contents = [];\n  this._contentsCreated = false;\n\n  // An older version of 3DTILES_multiple_contents used \"content\" instead of \"contents\"\n  const contentHeaders = defined(contentsJson.contents)\n    ? contentsJson.contents\n    : contentsJson.content;\n\n  this._innerContentHeaders = contentHeaders;\n  this._requestsInFlight = 0;\n\n  // How many times cancelPendingRequests() has been called. This is\n  // used to help short-circuit computations after a tile was canceled.\n  this._cancelCount = 0;\n\n  // The number of contents that turned out to be external tilesets\n  // in createInnerContent. When all contents are external tilesets,\n  // then tile.hasRenderableContent will become `false`\n  this._externalTilesetCount = 0;\n\n  const contentCount = this._innerContentHeaders.length;\n  this._arrayFetchPromises = new Array(contentCount);\n  this._requests = new Array(contentCount);\n  this._ready = false;\n\n  this._innerContentResources = new Array(contentCount);\n  this._serverKeys = new Array(contentCount);\n\n  for (let i = 0; i < contentCount; i++) {\n    const contentResource = tilesetResource.getDerivedResource({\n      url: contentHeaders[i].uri,\n    });\n\n    const serverKey = RequestScheduler.getServerKey(\n      contentResource.getUrlComponent(),\n    );\n\n    this._innerContentResources[i] = contentResource;\n    this._serverKeys[i] = serverKey;\n  }\n}\n\nObject.defineProperties(Multiple3DTileContent.prototype, {\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code> checks if any of the inner contents have dirty featurePropertiesDirty.\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {boolean}\n   *\n   * @private\n   */\n  featurePropertiesDirty: {\n    get: function () {\n      const contents = this._contents;\n      const length = contents.length;\n      for (let i = 0; i < length; ++i) {\n        if (contents[i].featurePropertiesDirty) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    set: function (value) {\n      const contents = this._contents;\n      const length = contents.length;\n      for (let i = 0; i < length; ++i) {\n        contents[i].featurePropertiesDirty = value;\n      }\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>featuresLength</code> for a specific inner content.\n   *\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  featuresLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code>\n   * always returns <code>0</code>.  Instead, call <code>pointsLength</code> for a specific inner content.\n   *\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  pointsLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>trianglesLength</code> for a specific inner content.\n   *\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  trianglesLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>geometryByteLength</code> for a specific inner content.\n   *\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  geometryByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Multiple3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>texturesByteLength</code> for a specific inner content.\n   *\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  texturesByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code>\n   * always returns <code>0</code>.  Instead call <code>batchTableByteLength</code> for a specific inner content.\n   *\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @private\n   */\n  batchTableByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return this._contents;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      if (!this._contentsCreated) {\n        return false;\n      }\n\n      return this._ready;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.\n   * Unlike other content types, <code>Multiple3DTileContent</code> does not\n   * have a single URL, so this returns undefined.\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  url: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Multiple3DTileContent</code>\n   * always returns <code>undefined</code>.  Instead call <code>metadata</code> for a specific inner content.\n   * @memberof Multiple3DTileContent.prototype\n   * @private\n   */\n  metadata: {\n    get: function () {\n      return undefined;\n    },\n    set: function () {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\"Multiple3DTileContent cannot have metadata\");\n      //>>includeEnd('debug');\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Multiple3DTileContent</code>\n   * always returns <code>undefined</code>.  Instead call <code>batchTable</code> for a specific inner content.\n   * @memberof Multiple3DTileContent.prototype\n   * @private\n   */\n  batchTable: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface. <code>Multiple3DTileContent</code>\n   * always returns <code>undefined</code>.  Instead call <code>group</code> for a specific inner content.\n   * @memberof Multiple3DTileContent.prototype\n   * @private\n   */\n  group: {\n    get: function () {\n      return undefined;\n    },\n    set: function () {\n      //>>includeStart('debug', pragmas.debug);\n      throw new DeveloperError(\n        \"Multiple3DTileContent cannot have group metadata\",\n      );\n      //>>includeEnd('debug');\n    },\n  },\n\n  /**\n   * Get an array of the inner content URLs, regardless of whether they've\n   * been fetched or not. This is intended for use with\n   * {@link Cesium3DTileset#debugShowUrl}.\n   * @memberof Multiple3DTileContent.prototype\n   *\n   * @type {string[]}\n   * @readonly\n   * @private\n   */\n  innerContentUrls: {\n    get: function () {\n      return this._innerContentHeaders.map(function (contentHeader) {\n        return contentHeader.uri;\n      });\n    },\n  },\n});\n\nfunction updatePendingRequests(multipleContents, deltaRequestCount) {\n  multipleContents._requestsInFlight += deltaRequestCount;\n  multipleContents.tileset.statistics.numberOfPendingRequests +=\n    deltaRequestCount;\n}\n\nfunction cancelPendingRequests(multipleContents, originalContentState) {\n  multipleContents._cancelCount++;\n\n  // reset the tile's content state to try again later.\n  multipleContents._tile._contentState = originalContentState;\n\n  const statistics = multipleContents.tileset.statistics;\n\n  statistics.numberOfPendingRequests -= multipleContents._requestsInFlight;\n  statistics.numberOfAttemptedRequests += multipleContents._requestsInFlight;\n  multipleContents._requestsInFlight = 0;\n\n  // Discard the request promises.\n  const contentCount = multipleContents._innerContentHeaders.length;\n  multipleContents._arrayFetchPromises = new Array(contentCount);\n}\n\n/**\n * Request the inner contents of this <code>Multiple3DTileContent</code>. This must be called once a frame until\n * {@link Multiple3DTileContent#contentsFetchedPromise} is defined. This promise\n * becomes available as soon as all requests are scheduled.\n * <p>\n * This method also updates the tile statistics' pending request count if the\n * requests are successfully scheduled.\n * </p>\n *\n * @return {Promise<void>|undefined} A promise that resolves when the request completes, or undefined if there is no request needed, or the request cannot be scheduled.\n * @private\n */\nMultiple3DTileContent.prototype.requestInnerContents = function () {\n  // It's possible for these promises to leak content array buffers if the\n  // camera moves before they all are scheduled. To prevent this leak, check\n  // if we can schedule all the requests at once. If not, no requests are\n  // scheduled\n  if (!canScheduleAllRequests(this._serverKeys)) {\n    this.tileset.statistics.numberOfAttemptedRequests +=\n      this._serverKeys.length;\n    return;\n  }\n\n  const contentHeaders = this._innerContentHeaders;\n  updatePendingRequests(this, contentHeaders.length);\n\n  const originalCancelCount = this._cancelCount;\n  for (let i = 0; i < contentHeaders.length; i++) {\n    // The cancel count is needed to avoid a race condition where a content\n    // is canceled multiple times.\n    this._arrayFetchPromises[i] = requestInnerContent(\n      this,\n      i,\n      originalCancelCount,\n      this._tile._contentState,\n    );\n  }\n\n  return createInnerContents(this);\n};\n\n/**\n * Check if all requests for inner contents can be scheduled at once. This is slower, but it avoids a potential memory leak.\n * @param {string[]} serverKeys The server keys for all of the inner contents\n * @return {boolean} True if the request scheduler has enough open slots for all inner contents\n * @private\n */\nfunction canScheduleAllRequests(serverKeys) {\n  const requestCountsByServer = {};\n  for (let i = 0; i < serverKeys.length; i++) {\n    const serverKey = serverKeys[i];\n    if (defined(requestCountsByServer[serverKey])) {\n      requestCountsByServer[serverKey]++;\n    } else {\n      requestCountsByServer[serverKey] = 1;\n    }\n  }\n\n  for (const key in requestCountsByServer) {\n    if (\n      requestCountsByServer.hasOwnProperty(key) &&\n      !RequestScheduler.serverHasOpenSlots(key, requestCountsByServer[key])\n    ) {\n      return false;\n    }\n  }\n  return RequestScheduler.heapHasOpenSlots(serverKeys.length);\n}\n\nfunction requestInnerContent(\n  multipleContents,\n  index,\n  originalCancelCount,\n  originalContentState,\n) {\n  // it is important to clone here. The fetchArrayBuffer() below here uses\n  // throttling, but other uses of the resources do not.\n  const contentResource =\n    multipleContents._innerContentResources[index].clone();\n  const tile = multipleContents.tile;\n\n  // Always create a new request. If the tile gets canceled, this\n  // avoids getting stuck in the canceled state.\n  const priorityFunction = function () {\n    return tile._priority;\n  };\n  const serverKey = multipleContents._serverKeys[index];\n  const request = new Request({\n    throttle: true,\n    throttleByServer: true,\n    type: RequestType.TILES3D,\n    priorityFunction: priorityFunction,\n    serverKey: serverKey,\n  });\n  contentResource.request = request;\n  multipleContents._requests[index] = request;\n\n  const promise = contentResource.fetchArrayBuffer();\n  if (!defined(promise)) {\n    return;\n  }\n\n  return promise\n    .then(function (arrayBuffer) {\n      // Pending requests have already been canceled.\n      if (originalCancelCount < multipleContents._cancelCount) {\n        return;\n      }\n\n      if (\n        contentResource.request.cancelled ||\n        contentResource.request.state === RequestState.CANCELLED\n      ) {\n        cancelPendingRequests(multipleContents, originalContentState);\n        return;\n      }\n\n      updatePendingRequests(multipleContents, -1);\n      return arrayBuffer;\n    })\n    .catch(function (error) {\n      // Pending requests have already been canceled.\n      if (originalCancelCount < multipleContents._cancelCount) {\n        return;\n      }\n\n      if (\n        contentResource.request.cancelled ||\n        contentResource.request.state === RequestState.CANCELLED\n      ) {\n        cancelPendingRequests(multipleContents, originalContentState);\n        return;\n      }\n\n      updatePendingRequests(multipleContents, -1);\n      handleInnerContentFailed(multipleContents, index, error);\n    });\n}\n\nasync function createInnerContents(multipleContents) {\n  const originalCancelCount = multipleContents._cancelCount;\n  const arrayBuffers = await Promise.all(multipleContents._arrayFetchPromises);\n  // Request have been cancelled\n  if (originalCancelCount < multipleContents._cancelCount) {\n    return;\n  }\n\n  const promises = arrayBuffers.map((arrayBuffer, i) =>\n    createInnerContent(multipleContents, arrayBuffer, i),\n  );\n\n  // Even if we had a partial success (in which case the inner promise will be handled, but the content will not be returned), mark that we finished creating\n  // contents\n  const contents = await Promise.all(promises);\n  multipleContents._contentsCreated = true;\n  multipleContents._contents = contents.filter(defined);\n\n  // If each content is an external tileset, then the tile\n  // itself does not have any renderable content\n  if (\n    multipleContents._externalTilesetCount === multipleContents._contents.length\n  ) {\n    const tile = multipleContents._tile;\n    tile.hasRenderableContent = false;\n  }\n\n  return contents;\n}\n\nasync function createInnerContent(multipleContents, arrayBuffer, index) {\n  if (!defined(arrayBuffer)) {\n    // Content was not fetched. The error was handled in\n    // the fetch promise. Return undefined to indicate partial failure.\n    return;\n  }\n\n  try {\n    const preprocessed = preprocess3DTileContent(arrayBuffer);\n\n    const tileset = multipleContents._tileset;\n    const resource = multipleContents._innerContentResources[index];\n    const tile = multipleContents._tile;\n\n    if (preprocessed.contentType === Cesium3DTileContentType.EXTERNAL_TILESET) {\n      multipleContents._externalTilesetCount++;\n      tile.hasTilesetContent = true;\n    }\n\n    multipleContents._disableSkipLevelOfDetail =\n      multipleContents._disableSkipLevelOfDetail ||\n      preprocessed.contentType === Cesium3DTileContentType.GEOMETRY ||\n      preprocessed.contentType === Cesium3DTileContentType.VECTOR;\n\n    let content;\n    const contentFactory = Cesium3DTileContentFactory[preprocessed.contentType];\n    if (defined(preprocessed.binaryPayload)) {\n      content = await Promise.resolve(\n        contentFactory(\n          tileset,\n          tile,\n          resource,\n          preprocessed.binaryPayload.buffer,\n          0,\n        ),\n      );\n    } else {\n      // JSON formats\n      content = await Promise.resolve(\n        contentFactory(tileset, tile, resource, preprocessed.jsonPayload),\n      );\n    }\n\n    const contentHeader = multipleContents._innerContentHeaders[index];\n\n    if (tile.hasImplicitContentMetadata) {\n      const subtree = tile.implicitSubtree;\n      const coordinates = tile.implicitCoordinates;\n      content.metadata = subtree.getContentMetadataView(coordinates, index);\n    } else if (!tile.hasImplicitContent) {\n      content.metadata = findContentMetadata(tileset, contentHeader);\n    }\n\n    const groupMetadata = findGroupMetadata(tileset, contentHeader);\n    if (defined(groupMetadata)) {\n      content.group = new Cesium3DContentGroup({\n        metadata: groupMetadata,\n      });\n    }\n    return content;\n  } catch (error) {\n    handleInnerContentFailed(multipleContents, index, error);\n  }\n}\n\nfunction handleInnerContentFailed(multipleContents, index, error) {\n  const tileset = multipleContents._tileset;\n  const url = multipleContents._innerContentResources[index].url;\n  const message = defined(error.message) ? error.message : error.toString();\n  if (tileset.tileFailed.numberOfListeners > 0) {\n    tileset.tileFailed.raiseEvent({\n      url: url,\n      message: message,\n    });\n  } else {\n    console.log(`A content failed to load: ${url}`);\n    console.log(`Error: ${message}`);\n  }\n}\n\n/**\n * Cancel all requests for inner contents. This is called by the tile\n * when a tile goes out of view.\n *\n * @private\n */\nMultiple3DTileContent.prototype.cancelRequests = function () {\n  for (let i = 0; i < this._requests.length; i++) {\n    const request = this._requests[i];\n    if (defined(request)) {\n      request.cancel();\n    }\n  }\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code>\n * always returns <code>false</code>.  Instead call <code>hasProperty</code> for a specific inner content\n * @private\n */\nMultiple3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Multiple3DTileContent</code>\n * always returns <code>undefined</code>.  Instead call <code>getFeature</code> for a specific inner content\n * @private\n */\nMultiple3DTileContent.prototype.getFeature = function (batchId) {\n  return undefined;\n};\n\nMultiple3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n  const contents = this._contents;\n  const length = contents.length;\n  for (let i = 0; i < length; ++i) {\n    contents[i].applyDebugSettings(enabled, color);\n  }\n};\n\nMultiple3DTileContent.prototype.applyStyle = function (style) {\n  const contents = this._contents;\n  const length = contents.length;\n  for (let i = 0; i < length; ++i) {\n    contents[i].applyStyle(style);\n  }\n};\n\nMultiple3DTileContent.prototype.update = function (tileset, frameState) {\n  const contents = this._contents;\n  const length = contents.length;\n  let ready = true;\n  for (let i = 0; i < length; ++i) {\n    contents[i].update(tileset, frameState);\n    ready = ready && contents[i].ready;\n  }\n\n  if (!this._ready && ready) {\n    this._ready = true;\n  }\n};\n\n/**\n * Find an intersection between a ray and the tile content surface that was rendered. The ray must be given in world coordinates.\n *\n * @param {Ray} ray The ray to test for intersection.\n * @param {FrameState} frameState The frame state.\n * @param {Cartesian3|undefined} [result] The intersection or <code>undefined</code> if none was found.\n * @returns {Cartesian3|undefined} The intersection or <code>undefined</code> if none was found.\n *\n * @private\n */\nMultiple3DTileContent.prototype.pick = function (ray, frameState, result) {\n  if (!this._ready) {\n    return undefined;\n  }\n\n  let intersection;\n  let minDistance = Number.POSITIVE_INFINITY;\n  const contents = this._contents;\n  const length = contents.length;\n\n  for (let i = 0; i < length; ++i) {\n    const candidate = contents[i].pick(ray, frameState, result);\n\n    if (!defined(candidate)) {\n      continue;\n    }\n\n    const distance = Cartesian3.distance(ray.origin, candidate);\n    if (distance < minDistance) {\n      intersection = candidate;\n      minDistance = distance;\n    }\n  }\n\n  if (!defined(intersection)) {\n    return undefined;\n  }\n\n  return result;\n};\n\nMultiple3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nMultiple3DTileContent.prototype.destroy = function () {\n  const contents = this._contents;\n  const length = contents.length;\n  for (let i = 0; i < length; ++i) {\n    contents[i].destroy();\n  }\n  return destroyObject(this);\n};\n\nexport default Multiple3DTileContent;\n","/**\n * A {@link TileDiscardPolicy} specifying that tile images should never be discard.\n *\n * @alias NeverTileDiscardPolicy\n * @constructor\n *\n * @see DiscardMissingTileImagePolicy\n */\nfunction NeverTileDiscardPolicy(options) {}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @returns {boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nNeverTileDiscardPolicy.prototype.isReady = function () {\n  return true;\n};\n\n/**\n * Given a tile image, decide whether to discard that image.\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {boolean} True if the image should be discarded; otherwise, false.\n */\nNeverTileDiscardPolicy.prototype.shouldDiscardImage = function (image) {\n  return false;\n};\nexport default NeverTileDiscardPolicy;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport AdjustTranslucentFS from \"../Shaders/AdjustTranslucentFS.js\";\nimport CompositeOITFS from \"../Shaders/CompositeOITFS.js\";\nimport BlendEquation from \"./BlendEquation.js\";\nimport BlendFunction from \"./BlendFunction.js\";\n\n/**\n * @private\n * @constructor\n * @param {Context} context\n */\nfunction OIT(context) {\n  this._numSamples = 1;\n  // We support multipass for the Chrome D3D9 backend and ES 2.0 on mobile.\n  this._translucentMultipassSupport = false;\n  this._translucentMRTSupport = false;\n\n  const extensionsSupported =\n    context.colorBufferFloat && context.depthTexture && context.floatBlend;\n  this._translucentMRTSupport = context.drawBuffers && extensionsSupported;\n  this._translucentMultipassSupport =\n    !this._translucentMRTSupport && extensionsSupported;\n\n  this._opaqueFBO = undefined;\n  this._opaqueTexture = undefined;\n  this._depthStencilTexture = undefined;\n\n  this._accumulationTexture = undefined;\n\n  this._translucentFBO = new FramebufferManager({\n    colorAttachmentsLength: this._translucentMRTSupport ? 2 : 1,\n    createColorAttachments: false,\n    createDepthAttachments: false,\n    depth: true,\n  });\n  this._alphaFBO = new FramebufferManager({\n    createColorAttachments: false,\n    createDepthAttachments: false,\n    depth: true,\n  });\n\n  this._adjustTranslucentFBO = new FramebufferManager({\n    colorAttachmentsLength: this._translucentMRTSupport ? 2 : 1,\n    createColorAttachments: false,\n  });\n  this._adjustAlphaFBO = new FramebufferManager({\n    createColorAttachments: false,\n  });\n\n  this._opaqueClearCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    owner: this,\n  });\n  this._translucentMRTClearCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 1.0),\n    owner: this,\n  });\n  this._translucentMultipassClearCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    owner: this,\n  });\n  this._alphaClearCommand = new ClearCommand({\n    color: new Color(1.0, 1.0, 1.0, 1.0),\n    owner: this,\n  });\n\n  this._translucentRenderStateCache = {};\n  this._alphaRenderStateCache = {};\n\n  this._compositeCommand = undefined;\n  this._adjustTranslucentCommand = undefined;\n  this._adjustAlphaCommand = undefined;\n\n  this._viewport = new BoundingRectangle();\n  this._rs = undefined;\n\n  this._useScissorTest = false;\n  this._scissorRectangle = undefined;\n\n  this._useHDR = false;\n}\n\n/**\n * @private\n * @param {OIT} oit\n */\nfunction destroyTextures(oit) {\n  oit._accumulationTexture =\n    oit._accumulationTexture &&\n    !oit._accumulationTexture.isDestroyed() &&\n    oit._accumulationTexture.destroy();\n  oit._revealageTexture =\n    oit._revealageTexture &&\n    !oit._revealageTexture.isDestroyed() &&\n    oit._revealageTexture.destroy();\n}\n\n/**\n * @private\n * @param {OIT} oit\n */\nfunction destroyFramebuffers(oit) {\n  oit._translucentFBO.destroy();\n  oit._alphaFBO.destroy();\n  oit._adjustTranslucentFBO.destroy();\n  oit._adjustAlphaFBO.destroy();\n}\n\n/**\n * @private\n * @param {OIT} oit\n */\nfunction destroyResources(oit) {\n  destroyTextures(oit);\n  destroyFramebuffers(oit);\n}\n\n/**\n * @private\n * @param {OIT} oit\n * @param {Context} context\n * @param {number} width\n * @param {number} height\n */\nfunction updateTextures(oit, context, width, height) {\n  destroyTextures(oit);\n\n  oit._accumulationTexture = new Texture({\n    context: context,\n    width: width,\n    height: height,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.FLOAT,\n  });\n\n  oit._revealageTexture = new Texture({\n    context: context,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.FLOAT,\n    width: width,\n    height: height,\n    flipY: false,\n  });\n}\n\n/**\n * @private\n * @param {OIT} oit\n * @param {Context} context\n * @returns {boolean}\n */\nfunction updateFramebuffers(oit, context) {\n  destroyFramebuffers(oit);\n\n  const completeFBO = WebGLConstants.FRAMEBUFFER_COMPLETE;\n  let supported = true;\n\n  const { width, height } = oit._accumulationTexture;\n\n  // if MRT is supported, attempt to make an FBO with multiple color attachments\n  if (oit._translucentMRTSupport) {\n    oit._translucentFBO.setColorTexture(oit._accumulationTexture, 0);\n    oit._translucentFBO.setColorTexture(oit._revealageTexture, 1);\n    oit._translucentFBO.setDepthStencilTexture(oit._depthStencilTexture);\n    oit._translucentFBO.update(context, width, height);\n\n    oit._adjustTranslucentFBO.setColorTexture(oit._accumulationTexture, 0);\n    oit._adjustTranslucentFBO.setColorTexture(oit._revealageTexture, 1);\n    oit._adjustTranslucentFBO.update(context, width, height);\n\n    if (\n      oit._translucentFBO.status !== completeFBO ||\n      oit._adjustTranslucentFBO.status !== completeFBO\n    ) {\n      destroyFramebuffers(oit);\n      oit._translucentMRTSupport = false;\n    }\n  }\n\n  // either MRT isn't supported or FBO creation failed, attempt multipass\n  if (!oit._translucentMRTSupport) {\n    oit._translucentFBO.setColorTexture(oit._accumulationTexture);\n    oit._translucentFBO.setDepthStencilTexture(oit._depthStencilTexture);\n    oit._translucentFBO.update(context, width, height);\n\n    oit._alphaFBO.setColorTexture(oit._revealageTexture);\n    oit._alphaFBO.setDepthStencilTexture(oit._depthStencilTexture);\n    oit._alphaFBO.update(context, width, height);\n\n    oit._adjustTranslucentFBO.setColorTexture(oit._accumulationTexture);\n    oit._adjustTranslucentFBO.update(context, width, height);\n\n    oit._adjustAlphaFBO.setColorTexture(oit._revealageTexture);\n    oit._adjustAlphaFBO.update(context, width, height);\n\n    const translucentComplete = oit._translucentFBO.status === completeFBO;\n    const alphaComplete = oit._alphaFBO.status === completeFBO;\n    const adjustTranslucentComplete =\n      oit._adjustTranslucentFBO.status === completeFBO;\n    const adjustAlphaComplete = oit._adjustAlphaFBO.status === completeFBO;\n    if (\n      !translucentComplete ||\n      !alphaComplete ||\n      !adjustTranslucentComplete ||\n      !adjustAlphaComplete\n    ) {\n      destroyResources(oit);\n      oit._translucentMultipassSupport = false;\n      supported = false;\n    }\n  }\n\n  return supported;\n}\n\n/**\n * @private\n * @param {Context} context\n * @param {PassState} passState\n * @param {Framebuffer} framebuffer\n * @param {boolean} useHDR\n * @param {number} numSamples\n */\nOIT.prototype.update = function (\n  context,\n  passState,\n  framebuffer,\n  useHDR,\n  numSamples,\n) {\n  if (!this.isSupported()) {\n    return;\n  }\n\n  this._opaqueFBO = framebuffer;\n  this._opaqueTexture = framebuffer.getColorTexture(0);\n  this._depthStencilTexture = framebuffer.getDepthStencilTexture();\n\n  const { width, height } = this._opaqueTexture;\n\n  const accumulationTexture = this._accumulationTexture;\n  const textureChanged =\n    !defined(accumulationTexture) ||\n    accumulationTexture.width !== width ||\n    accumulationTexture.height !== height ||\n    useHDR !== this._useHDR;\n  const samplesChanged = this._numSamples !== numSamples;\n\n  if (textureChanged || samplesChanged) {\n    this._numSamples = numSamples;\n    updateTextures(this, context, width, height);\n  }\n\n  if (\n    !defined(this._translucentFBO.framebuffer) ||\n    textureChanged ||\n    samplesChanged\n  ) {\n    if (!updateFramebuffers(this, context)) {\n      // framebuffer creation failed\n      return;\n    }\n  }\n\n  this._useHDR = useHDR;\n\n  const that = this;\n  let fs;\n  let uniformMap;\n\n  if (!defined(this._compositeCommand)) {\n    fs = new ShaderSource({\n      sources: [CompositeOITFS],\n    });\n    if (this._translucentMRTSupport) {\n      fs.defines.push(\"MRT\");\n    }\n\n    uniformMap = {\n      u_opaque: function () {\n        return that._opaqueTexture;\n      },\n      u_accumulation: function () {\n        return that._accumulationTexture;\n      },\n      u_revealage: function () {\n        return that._revealageTexture;\n      },\n    };\n    this._compositeCommand = context.createViewportQuadCommand(fs, {\n      uniformMap: uniformMap,\n      owner: this,\n    });\n  }\n\n  if (!defined(this._adjustTranslucentCommand)) {\n    if (this._translucentMRTSupport) {\n      fs = new ShaderSource({\n        defines: [\"MRT\"],\n        sources: [AdjustTranslucentFS],\n      });\n\n      uniformMap = {\n        u_bgColor: function () {\n          return that._translucentMRTClearCommand.color;\n        },\n        u_depthTexture: function () {\n          return that._depthStencilTexture;\n        },\n      };\n\n      this._adjustTranslucentCommand = context.createViewportQuadCommand(fs, {\n        uniformMap: uniformMap,\n        owner: this,\n      });\n    } else if (this._translucentMultipassSupport) {\n      fs = new ShaderSource({\n        sources: [AdjustTranslucentFS],\n      });\n\n      uniformMap = {\n        u_bgColor: function () {\n          return that._translucentMultipassClearCommand.color;\n        },\n        u_depthTexture: function () {\n          return that._depthStencilTexture;\n        },\n      };\n\n      this._adjustTranslucentCommand = context.createViewportQuadCommand(fs, {\n        uniformMap: uniformMap,\n        owner: this,\n      });\n\n      uniformMap = {\n        u_bgColor: function () {\n          return that._alphaClearCommand.color;\n        },\n        u_depthTexture: function () {\n          return that._depthStencilTexture;\n        },\n      };\n\n      this._adjustAlphaCommand = context.createViewportQuadCommand(fs, {\n        uniformMap: uniformMap,\n        owner: this,\n      });\n    }\n  }\n\n  this._viewport.width = width;\n  this._viewport.height = height;\n\n  const useScissorTest = !BoundingRectangle.equals(\n    this._viewport,\n    passState.viewport,\n  );\n  let updateScissor = useScissorTest !== this._useScissorTest;\n  this._useScissorTest = useScissorTest;\n\n  if (!BoundingRectangle.equals(this._scissorRectangle, passState.viewport)) {\n    this._scissorRectangle = BoundingRectangle.clone(\n      passState.viewport,\n      this._scissorRectangle,\n    );\n    updateScissor = true;\n  }\n\n  if (\n    !defined(this._rs) ||\n    !BoundingRectangle.equals(this._viewport, this._rs.viewport) ||\n    updateScissor\n  ) {\n    this._rs = RenderState.fromCache({\n      viewport: this._viewport,\n      scissorTest: {\n        enabled: this._useScissorTest,\n        rectangle: this._scissorRectangle,\n      },\n    });\n  }\n\n  if (defined(this._compositeCommand)) {\n    this._compositeCommand.renderState = this._rs;\n  }\n\n  if (this._adjustTranslucentCommand) {\n    this._adjustTranslucentCommand.renderState = this._rs;\n  }\n\n  if (defined(this._adjustAlphaCommand)) {\n    this._adjustAlphaCommand.renderState = this._rs;\n  }\n};\n\nconst translucentMRTBlend = {\n  enabled: true,\n  color: new Color(0.0, 0.0, 0.0, 0.0),\n  equationRgb: BlendEquation.ADD,\n  equationAlpha: BlendEquation.ADD,\n  functionSourceRgb: BlendFunction.ONE,\n  functionDestinationRgb: BlendFunction.ONE,\n  functionSourceAlpha: BlendFunction.ZERO,\n  functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n};\n\nconst translucentColorBlend = {\n  enabled: true,\n  color: new Color(0.0, 0.0, 0.0, 0.0),\n  equationRgb: BlendEquation.ADD,\n  equationAlpha: BlendEquation.ADD,\n  functionSourceRgb: BlendFunction.ONE,\n  functionDestinationRgb: BlendFunction.ONE,\n  functionSourceAlpha: BlendFunction.ONE,\n  functionDestinationAlpha: BlendFunction.ONE,\n};\n\nconst translucentAlphaBlend = {\n  enabled: true,\n  color: new Color(0.0, 0.0, 0.0, 0.0),\n  equationRgb: BlendEquation.ADD,\n  equationAlpha: BlendEquation.ADD,\n  functionSourceRgb: BlendFunction.ZERO,\n  functionDestinationRgb: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n  functionSourceAlpha: BlendFunction.ZERO,\n  functionDestinationAlpha: BlendFunction.ONE_MINUS_SOURCE_ALPHA,\n};\n\nfunction getTranslucentRenderState(\n  context,\n  translucentBlending,\n  cache,\n  renderState,\n) {\n  let translucentState = cache[renderState.id];\n  if (!defined(translucentState)) {\n    const rs = RenderState.getState(renderState);\n    rs.depthMask = false;\n    rs.blending = translucentBlending;\n\n    translucentState = RenderState.fromCache(rs);\n    cache[renderState.id] = translucentState;\n  }\n\n  return translucentState;\n}\n\nfunction getTranslucentMRTRenderState(oit, context, renderState) {\n  return getTranslucentRenderState(\n    context,\n    translucentMRTBlend,\n    oit._translucentRenderStateCache,\n    renderState,\n  );\n}\n\nfunction getTranslucentColorRenderState(oit, context, renderState) {\n  return getTranslucentRenderState(\n    context,\n    translucentColorBlend,\n    oit._translucentRenderStateCache,\n    renderState,\n  );\n}\n\nfunction getTranslucentAlphaRenderState(oit, context, renderState) {\n  return getTranslucentRenderState(\n    context,\n    translucentAlphaBlend,\n    oit._alphaRenderStateCache,\n    renderState,\n  );\n}\n\nconst mrtShaderSource =\n  \"    vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a;\\n\" +\n  \"    float ai = czm_out_FragColor.a;\\n\" +\n  \"    float wzi = czm_alphaWeight(ai);\\n\" +\n  \"    out_FragData_0 = vec4(Ci * wzi, ai);\\n\" +\n  \"    out_FragData_1 = vec4(ai * wzi);\\n\";\n\nconst colorShaderSource =\n  \"    vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a;\\n\" +\n  \"    float ai = czm_out_FragColor.a;\\n\" +\n  \"    float wzi = czm_alphaWeight(ai);\\n\" +\n  \"    out_FragColor = vec4(Ci, ai) * wzi;\\n\";\n\nconst alphaShaderSource =\n  \"    float ai = czm_out_FragColor.a;\\n\" + \"    out_FragColor = vec4(ai);\\n\";\n\n/**\n * @private\n * @param {Context} context\n * @param {ShaderProgram} shaderProgram\n * @param {string} keyword\n * @param {string} source\n * @returns {ShaderProgram}\n */\nfunction getTranslucentShaderProgram(context, shaderProgram, keyword, source) {\n  const { shaderCache } = context;\n  const shader = shaderCache.getDerivedShaderProgram(shaderProgram, keyword);\n  if (defined(shader)) {\n    return shader;\n  }\n\n  const attributeLocations = shaderProgram._attributeLocations;\n  const fs = shaderProgram.fragmentShaderSource.clone();\n\n  fs.sources = fs.sources.map(function (fsSource) {\n    return ShaderSource.replaceMain(fsSource, \"czm_translucent_main\")\n      .replace(/out_FragColor/g, \"czm_out_FragColor\")\n      .replace(\n        /layout\\s*\\(location\\s*=\\s*0\\)\\s*out\\s+vec4\\s+out_FragColor;/g,\n        \"\",\n      )\n      .replace(/\\bdiscard\\b/g, \"czm_discard = true\")\n      .replace(/czm_phong/g, \"czm_translucentPhong\");\n  });\n\n  // Discarding the fragment in main is a workaround for ANGLE D3D9\n  // shader compilation errors.\n  //\n  // CESIUM_REDIRECTED_COLOR_OUTPUT: A general-purpose flag to indicate that this shader\n  // is a derived/modified version created by Cesium's rendering pipeline.\n  // This flag can be used to avoid color attachment conflicts when shaders\n  // need different output declarations for different rendering passes.\n  // For example, MRT (Multiple Render Targets) features can check this flag\n  // to conditionally declare their output variables only when not conflicting\n  // with the derived shader's output layout.\n  fs.sources.splice(\n    0,\n    0,\n    `#define CESIUM_REDIRECTED_COLOR_OUTPUT\\n` +\n      `vec4 czm_out_FragColor;\\n` +\n      `bool czm_discard = false;\\n`,\n  );\n\n  const fragDataMatches = [...source.matchAll(/out_FragData_(\\d+)/g)];\n  let fragDataDeclarations = ``;\n  for (let i = 0; i < fragDataMatches.length; i++) {\n    const fragDataMatch = fragDataMatches[i];\n    fragDataDeclarations = `layout (location = ${fragDataMatch[1]}) out vec4 ${fragDataMatch[0]};\\n${fragDataDeclarations}`;\n  }\n  fs.sources.push(fragDataDeclarations);\n\n  fs.sources.push(\n    `${\n      \"void main()\\n\" +\n      \"{\\n\" +\n      \"    czm_translucent_main();\\n\" +\n      \"    if (czm_discard)\\n\" +\n      \"    {\\n\" +\n      \"        discard;\\n\" +\n      \"    }\\n\"\n    }${source}}\\n`,\n  );\n\n  return shaderCache.createDerivedShaderProgram(shaderProgram, keyword, {\n    vertexShaderSource: shaderProgram.vertexShaderSource,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n}\n\nfunction getTranslucentMRTShaderProgram(context, shaderProgram) {\n  return getTranslucentShaderProgram(\n    context,\n    shaderProgram,\n    \"translucentMRT\",\n    mrtShaderSource,\n  );\n}\n\nfunction getTranslucentColorShaderProgram(context, shaderProgram) {\n  return getTranslucentShaderProgram(\n    context,\n    shaderProgram,\n    \"translucentMultipass\",\n    colorShaderSource,\n  );\n}\n\nfunction getTranslucentAlphaShaderProgram(context, shaderProgram) {\n  return getTranslucentShaderProgram(\n    context,\n    shaderProgram,\n    \"alphaMultipass\",\n    alphaShaderSource,\n  );\n}\n\n/**\n * @private\n * @param {DrawCommand} command\n * @param {Context} context\n * @param {*} result\n * @returns {*}\n */\nOIT.prototype.createDerivedCommands = function (command, context, result) {\n  if (!defined(result)) {\n    result = {};\n  }\n\n  if (this._translucentMRTSupport) {\n    let translucentShader;\n    let translucentRenderState;\n    if (defined(result.translucentCommand)) {\n      translucentShader = result.translucentCommand.shaderProgram;\n      translucentRenderState = result.translucentCommand.renderState;\n    }\n\n    result.translucentCommand = DrawCommand.shallowClone(\n      command,\n      result.translucentCommand,\n    );\n\n    if (\n      !defined(translucentShader) ||\n      result.shaderProgramId !== command.shaderProgram.id\n    ) {\n      result.translucentCommand.shaderProgram = getTranslucentMRTShaderProgram(\n        context,\n        command.shaderProgram,\n      );\n      result.translucentCommand.renderState = getTranslucentMRTRenderState(\n        this,\n        context,\n        command.renderState,\n      );\n      result.shaderProgramId = command.shaderProgram.id;\n    } else {\n      result.translucentCommand.shaderProgram = translucentShader;\n      result.translucentCommand.renderState = translucentRenderState;\n    }\n    return result;\n  }\n\n  let colorShader;\n  let colorRenderState;\n  let alphaShader;\n  let alphaRenderState;\n  if (defined(result.translucentCommand)) {\n    colorShader = result.translucentCommand.shaderProgram;\n    colorRenderState = result.translucentCommand.renderState;\n    alphaShader = result.alphaCommand.shaderProgram;\n    alphaRenderState = result.alphaCommand.renderState;\n  }\n\n  result.translucentCommand = DrawCommand.shallowClone(\n    command,\n    result.translucentCommand,\n  );\n  result.alphaCommand = DrawCommand.shallowClone(command, result.alphaCommand);\n\n  if (\n    !defined(colorShader) ||\n    result.shaderProgramId !== command.shaderProgram.id\n  ) {\n    result.translucentCommand.shaderProgram = getTranslucentColorShaderProgram(\n      context,\n      command.shaderProgram,\n    );\n    result.translucentCommand.renderState = getTranslucentColorRenderState(\n      this,\n      context,\n      command.renderState,\n    );\n    result.alphaCommand.shaderProgram = getTranslucentAlphaShaderProgram(\n      context,\n      command.shaderProgram,\n    );\n    result.alphaCommand.renderState = getTranslucentAlphaRenderState(\n      this,\n      context,\n      command.renderState,\n    );\n    result.shaderProgramId = command.shaderProgram.id;\n  } else {\n    result.translucentCommand.shaderProgram = colorShader;\n    result.translucentCommand.renderState = colorRenderState;\n    result.alphaCommand.shaderProgram = alphaShader;\n    result.alphaCommand.renderState = alphaRenderState;\n  }\n\n  return result;\n};\n\n/**\n * @private\n * @param {OIT} oit\n * @param {Scene} scene\n * @param {Function} executeFunction\n * @param {PassState} passState\n * @param {DrawCommand[]} commands\n * @param {InvertClassification} invertClassification\n */\nfunction executeTranslucentCommandsSortedMultipass(\n  oit,\n  scene,\n  executeFunction,\n  passState,\n  commands,\n  invertClassification,\n) {\n  const { context, frameState } = scene;\n  const { useLogDepth, shadowState } = frameState;\n  const useHdr = scene._hdr;\n  const framebuffer = passState.framebuffer;\n\n  const lightShadowsEnabled = shadowState.lightShadowsEnabled;\n\n  passState.framebuffer = oit._adjustTranslucentFBO.framebuffer;\n  oit._adjustTranslucentCommand.execute(context, passState);\n  passState.framebuffer = oit._adjustAlphaFBO.framebuffer;\n  oit._adjustAlphaCommand.execute(context, passState);\n\n  const debugFramebuffer = oit._opaqueFBO.framebuffer;\n  passState.framebuffer = oit._translucentFBO.framebuffer;\n\n  for (let j = 0; j < commands.length; ++j) {\n    let command = commands[j];\n    command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n    command = useHdr ? command.derivedCommands.hdr.command : command;\n    const derivedCommand =\n      lightShadowsEnabled && command.receiveShadows\n        ? command.derivedCommands.oit.shadows.translucentCommand\n        : command.derivedCommands.oit.translucentCommand;\n    executeFunction(derivedCommand, scene, passState, debugFramebuffer);\n  }\n\n  if (defined(invertClassification)) {\n    const command = invertClassification.unclassifiedCommand;\n    const derivedCommand =\n      lightShadowsEnabled && command.receiveShadows\n        ? command.derivedCommands.oit.shadows.translucentCommand\n        : command.derivedCommands.oit.translucentCommand;\n    executeFunction(derivedCommand, scene, passState, debugFramebuffer);\n  }\n\n  passState.framebuffer = oit._alphaFBO.framebuffer;\n\n  for (let j = 0; j < commands.length; ++j) {\n    let command = commands[j];\n    command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n    command = useHdr ? command.derivedCommands.hdr.command : command;\n    const derivedCommand =\n      lightShadowsEnabled && command.receiveShadows\n        ? command.derivedCommands.oit.shadows.alphaCommand\n        : command.derivedCommands.oit.alphaCommand;\n    executeFunction(derivedCommand, scene, passState, debugFramebuffer);\n  }\n\n  if (defined(invertClassification)) {\n    const command = invertClassification.unclassifiedCommand;\n    const derivedCommand =\n      lightShadowsEnabled && command.receiveShadows\n        ? command.derivedCommands.oit.shadows.alphaCommand\n        : command.derivedCommands.oit.alphaCommand;\n    executeFunction(derivedCommand, scene, passState, debugFramebuffer);\n  }\n\n  passState.framebuffer = framebuffer;\n}\n\n/**\n * @private\n * @param {OIT} oit\n * @param {Scene} scene\n * @param {Function} executeFunction\n * @param {PassState} passState\n * @param {DrawCommand[]} commands\n * @param {InvertClassification} invertClassification\n */\nfunction executeTranslucentCommandsSortedMRT(\n  oit,\n  scene,\n  executeFunction,\n  passState,\n  commands,\n  invertClassification,\n) {\n  const { context, frameState } = scene;\n  const { useLogDepth, shadowState } = frameState;\n  const useHdr = scene._hdr;\n  const framebuffer = passState.framebuffer;\n\n  const lightShadowsEnabled = shadowState.lightShadowsEnabled;\n\n  passState.framebuffer = oit._adjustTranslucentFBO.framebuffer;\n  oit._adjustTranslucentCommand.execute(context, passState);\n\n  const debugFramebuffer = oit._opaqueFBO.framebuffer;\n  passState.framebuffer = oit._translucentFBO.framebuffer;\n\n  for (let j = 0; j < commands.length; ++j) {\n    let command = commands[j];\n    command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n    command = useHdr ? command.derivedCommands.hdr.command : command;\n    const derivedCommand =\n      lightShadowsEnabled && command.receiveShadows\n        ? command.derivedCommands.oit.shadows.translucentCommand\n        : command.derivedCommands.oit.translucentCommand;\n    executeFunction(derivedCommand, scene, passState, debugFramebuffer);\n  }\n\n  if (defined(invertClassification)) {\n    const command = invertClassification.unclassifiedCommand;\n    const derivedCommand =\n      lightShadowsEnabled && command.receiveShadows\n        ? command.derivedCommands.oit.shadows.translucentCommand\n        : command.derivedCommands.oit.translucentCommand;\n    executeFunction(derivedCommand, scene, passState, debugFramebuffer);\n  }\n\n  passState.framebuffer = framebuffer;\n}\n\n/**\n * @private\n * @param {Scene} scene\n * @param {Function} executeFunction\n * @param {PassState} passState\n * @param {DrawCommand[]} commands\n * @param {InvertClassification} invertClassification\n */\nOIT.prototype.executeCommands = function (\n  scene,\n  executeFunction,\n  passState,\n  commands,\n  invertClassification,\n) {\n  if (this._translucentMRTSupport) {\n    executeTranslucentCommandsSortedMRT(\n      this,\n      scene,\n      executeFunction,\n      passState,\n      commands,\n      invertClassification,\n    );\n    return;\n  }\n\n  executeTranslucentCommandsSortedMultipass(\n    this,\n    scene,\n    executeFunction,\n    passState,\n    commands,\n    invertClassification,\n  );\n};\n\n/**\n * @private\n * @param {Context} context\n * @param {PassState} passState\n */\nOIT.prototype.execute = function (context, passState) {\n  this._compositeCommand.execute(context, passState);\n};\n\n/**\n * @private\n * @param {Context} context\n * @param {PassState} passState\n * @param {Color} clearColor\n */\nOIT.prototype.clear = function (context, passState, clearColor) {\n  const framebuffer = passState.framebuffer;\n\n  passState.framebuffer = this._opaqueFBO.framebuffer;\n  Color.clone(clearColor, this._opaqueClearCommand.color);\n  this._opaqueClearCommand.execute(context, passState);\n\n  passState.framebuffer = this._translucentFBO.framebuffer;\n  const translucentClearCommand = this._translucentMRTSupport\n    ? this._translucentMRTClearCommand\n    : this._translucentMultipassClearCommand;\n  translucentClearCommand.execute(context, passState);\n\n  if (this._translucentMultipassSupport) {\n    passState.framebuffer = this._alphaFBO.framebuffer;\n    this._alphaClearCommand.execute(context, passState);\n  }\n\n  passState.framebuffer = framebuffer;\n};\n\n/**\n * @private\n * @returns {boolean}\n */\nOIT.prototype.isSupported = function () {\n  return this._translucentMRTSupport || this._translucentMultipassSupport;\n};\n\n/**\n * @private\n * @returns {boolean}\n */\nOIT.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * @private\n */\nOIT.prototype.destroy = function () {\n  destroyResources(this);\n\n  if (defined(this._compositeCommand)) {\n    this._compositeCommand.shaderProgram =\n      this._compositeCommand.shaderProgram &&\n      this._compositeCommand.shaderProgram.destroy();\n  }\n\n  if (defined(this._adjustTranslucentCommand)) {\n    this._adjustTranslucentCommand.shaderProgram =\n      this._adjustTranslucentCommand.shaderProgram &&\n      this._adjustTranslucentCommand.shaderProgram.destroy();\n  }\n\n  if (defined(this._adjustAlphaCommand)) {\n    this._adjustAlphaCommand.shaderProgram =\n      this._adjustAlphaCommand.shaderProgram &&\n      this._adjustAlphaCommand.shaderProgram.destroy();\n  }\n\n  return destroyObject(this);\n};\n\nexport default OIT;\n","import Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\nconst defaultCredit = new Credit(\n  \"MapQuest, Open Street Map and contributors, CC-BY-SA\",\n);\n\n/**\n * @typedef {object} OpenStreetMapImageryProvider.ConstructorOptions\n *\n * Initialization options for the OpenStreetMapImageryProvider constructor\n *\n * @property {string} [url='https://tile.openstreetmap.org'] The OpenStreetMap server url.\n * @property {string} [fileExtension='png'] The file extension for images on the server.\n * @property {boolean} [retinaTiles=false] When true, request tiles at the 2x resolution for retina displays.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If not specified, the WGS84 ellipsoid is used.\n * @property {Credit|string} [credit='MapQuest, Open Street Map and contributors, CC-BY-SA'] A credit for the data source, which is displayed on the canvas.\n */\n\n/**\n * An imagery provider that provides tiled imagery hosted by OpenStreetMap\n * or another provider of Slippy tiles.  The default url connects to OpenStreetMap's volunteer-run\n * servers, so you must conform to their\n * {@link http://wiki.openstreetmap.org/wiki/Tile_usage_policy|Tile Usage Policy}.\n *\n * @alias OpenStreetMapImageryProvider\n * @constructor\n * @extends UrlTemplateImageryProvider\n *\n * @param {OpenStreetMapImageryProvider.ConstructorOptions} options Object describing initialization options\n * @exception {DeveloperError} The rectangle and minimumLevel indicate that there are more than four tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n * @example\n * const osm = new Cesium.OpenStreetMapImageryProvider({\n *     url : 'https://tile.openstreetmap.org/'\n * });\n *\n * @see {@link http://wiki.openstreetmap.org/wiki/Main_Page|OpenStreetMap Wiki}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n */\nfunction OpenStreetMapImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const resource = Resource.createIfNeeded(\n    options.url ?? \"https://tile.openstreetmap.org/\",\n  );\n  resource.appendForwardSlash();\n  resource.url += `{z}/{x}/{y}${\n    options.retinaTiles ? \"@2x\" : \"\"\n  }.${options.fileExtension ?? \"png\"}`;\n\n  const tilingScheme = new WebMercatorTilingScheme({\n    ellipsoid: options.ellipsoid,\n  });\n\n  const tileWidth = 256;\n  const tileHeight = 256;\n\n  const minimumLevel = options.minimumLevel ?? 0;\n  const maximumLevel = options.maximumLevel;\n\n  const rectangle = options.rectangle ?? tilingScheme.rectangle;\n\n  // Check the number of tiles at the minimum level.  If it's more than four,\n  // throw an exception, because starting at the higher minimum\n  // level will cause too many tiles to be downloaded and rendered.\n  const swTile = tilingScheme.positionToTileXY(\n    Rectangle.southwest(rectangle),\n    minimumLevel,\n  );\n  const neTile = tilingScheme.positionToTileXY(\n    Rectangle.northeast(rectangle),\n    minimumLevel,\n  );\n  const tileCount =\n    (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1);\n  //>>includeStart('debug', pragmas.debug);\n  if (tileCount > 4) {\n    throw new DeveloperError(\n      `The rectangle and minimumLevel indicate that there are ${tileCount} tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  let credit = options.credit ?? defaultCredit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n\n  UrlTemplateImageryProvider.call(this, {\n    url: resource,\n    credit: credit,\n    tilingScheme: tilingScheme,\n    tileWidth: tileWidth,\n    tileHeight: tileHeight,\n    minimumLevel: minimumLevel,\n    maximumLevel: maximumLevel,\n    rectangle: rectangle,\n  });\n}\n\nif (defined(Object.create)) {\n  OpenStreetMapImageryProvider.prototype = Object.create(\n    UrlTemplateImageryProvider.prototype,\n  );\n  OpenStreetMapImageryProvider.prototype.constructor =\n    OpenStreetMapImageryProvider;\n}\n\nexport default OpenStreetMapImageryProvider;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PrimitiveCollection from \"./PrimitiveCollection.js\";\n\n/**\n * A primitive collection for helping maintain the order or ground primitives based on a z-index\n *\n * @private\n */\nfunction OrderedGroundPrimitiveCollection() {\n  this._length = 0;\n  this._collections = {};\n  this._collectionsArray = [];\n\n  this.show = true;\n}\n\nObject.defineProperties(OrderedGroundPrimitiveCollection.prototype, {\n  /**\n   * Gets the number of primitives in the collection.\n   *\n   * @memberof OrderedGroundPrimitiveCollection.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._length;\n    },\n  },\n});\n\n/**\n * Adds a primitive to the collection.\n *\n * @param {GroundPrimitive} primitive The primitive to add.\n * @param {number} [zIndex = 0] The index of the primitive\n * @returns {GroundPrimitive} The primitive added to the collection.\n */\nOrderedGroundPrimitiveCollection.prototype.add = function (primitive, zIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"primitive\", primitive);\n  if (defined(zIndex)) {\n    Check.typeOf.number(\"zIndex\", zIndex);\n  }\n  //>>includeEnd('debug');\n\n  zIndex = zIndex ?? 0;\n  let collection = this._collections[zIndex];\n  if (!defined(collection)) {\n    collection = new PrimitiveCollection({ destroyPrimitives: false });\n    collection._zIndex = zIndex;\n    this._collections[zIndex] = collection;\n    const array = this._collectionsArray;\n    let i = 0;\n    while (i < array.length && array[i]._zIndex < zIndex) {\n      i++;\n    }\n    array.splice(i, 0, collection);\n  }\n\n  collection.add(primitive);\n  this._length++;\n  primitive._zIndex = zIndex;\n\n  return primitive;\n};\n\n/**\n * Adjusts the z-index\n * @param {GroundPrimitive} primitive\n * @param {number} zIndex\n */\nOrderedGroundPrimitiveCollection.prototype.set = function (primitive, zIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"primitive\", primitive);\n  Check.typeOf.number(\"zIndex\", zIndex);\n  //>>includeEnd('debug');\n\n  if (zIndex === primitive._zIndex) {\n    return primitive;\n  }\n\n  this.remove(primitive, true);\n  this.add(primitive, zIndex);\n\n  return primitive;\n};\n\n/**\n * Removes a primitive from the collection.\n *\n * @param {object} primitive The primitive to remove.\n * @param {boolean} [doNotDestroy = false]\n * @returns {boolean} <code>true</code> if the primitive was removed; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n */\nOrderedGroundPrimitiveCollection.prototype.remove = function (\n  primitive,\n  doNotDestroy,\n) {\n  if (this.contains(primitive)) {\n    const index = primitive._zIndex;\n    const collection = this._collections[index];\n    let result;\n    if (doNotDestroy) {\n      result = collection.remove(primitive);\n    } else {\n      result = collection.removeAndDestroy(primitive);\n    }\n\n    if (result) {\n      this._length--;\n    }\n\n    if (collection.length === 0) {\n      this._collectionsArray.splice(\n        this._collectionsArray.indexOf(collection),\n        1,\n      );\n      this._collections[index] = undefined;\n      collection.destroy();\n    }\n\n    return result;\n  }\n\n  return false;\n};\n\n/**\n * Removes all primitives in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see OrderedGroundPrimitiveCollection#destroyPrimitives\n */\nOrderedGroundPrimitiveCollection.prototype.removeAll = function () {\n  const collections = this._collectionsArray;\n  for (let i = 0; i < collections.length; i++) {\n    const collection = collections[i];\n    collection.destroyPrimitives = true;\n    collection.destroy();\n  }\n\n  this._collections = {};\n  this._collectionsArray = [];\n  this._length = 0;\n};\n\n/**\n * Determines if this collection contains a primitive.\n *\n * @param {object} primitive The primitive to check for.\n * @returns {boolean} <code>true</code> if the primitive is in the collection; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n */\nOrderedGroundPrimitiveCollection.prototype.contains = function (primitive) {\n  if (!defined(primitive)) {\n    return false;\n  }\n  const collection = this._collections[primitive._zIndex];\n  return defined(collection) && collection.contains(primitive);\n};\n\n/**\n * @private\n */\nOrderedGroundPrimitiveCollection.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  const collections = this._collectionsArray;\n  for (let i = 0; i < collections.length; i++) {\n    collections[i].update(frameState);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see OrderedGroundPrimitiveCollection#destroy\n */\nOrderedGroundPrimitiveCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by each primitive in this collection.  Explicitly destroying this\n * collection allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector to destroy this collection.\n * <br /><br />\n * Since destroying a collection destroys all the contained primitives, only destroy a collection\n * when you are sure no other code is still using any of the contained primitives.\n * <br /><br />\n * Once this collection is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * primitives = primitives && primitives.destroy();\n *\n * @see OrderedGroundPrimitiveCollection#isDestroyed\n */\nOrderedGroundPrimitiveCollection.prototype.destroy = function () {\n  this.removeAll();\n  return destroyObject(this);\n};\nexport default OrderedGroundPrimitiveCollection;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Displays panorama imagery in a scene. This type describes an interface and is not intended to be instantiated directly.\n *\n * @alias Panorama\n * @constructor\n * @abstract\n *\n * @see EquirectangularPanorama\n * @see CubeMapPanorama\n * @see GoogleStreetViewCubeMapPanoramaProvider\n *\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=panorama|Cesium Sandcastle Panorama}\n */\nfunction Panorama() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(Panorama.prototype, {\n  /**\n   * Determines if the panorama will be shown.\n   * @memberof Panorama.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: DeveloperError.throwInstantiationError,\n    set: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the transform of the panorama.\n   * @memberof Panorama.prototype\n   * @type {Matrix4}\n   * @readonly\n   */\n  transform: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the credits of the panorama.\n   * @memberof Panorama.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\nexport default Panorama;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Provides imagery to be displayed on the surface of an ellipsoid.  This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias PanoramaProvider\n * @constructor\n * @abstract\n *\n * @see GoogleStreetViewCubeMapPanoramaProvider\n * @see EquirectangularPanorama\n * @see CubeMapPanorama\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=panorama|Cesium Sandcastle Panorama}\n */\nfunction PanoramaProvider() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(PanoramaProvider.prototype, {});\n\n/**\n * Returns a panorama provider.\n *\n * @param {object} options Input options to create the panorama provider.\n * @returns {PanoramaProvider} The panorama provider for loading panoramas into a scene.\n */\nPanoramaProvider.fromUrl = function (options) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Returns a panorama primitive.\n *\n * @param {object} options Input options to create the panorama primitive.\n * @returns {Panorama} The panorama primitive for displaying panoramas in a scene.\n */\nPanoramaProvider.prototype.loadPanorama = function (options) {\n  DeveloperError.throwInstantiationError();\n};\n\nexport default PanoramaProvider;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\n\nconst defaultSize = new Cartesian2(1.0, 1.0);\n\n/**\n * A particle emitted by a {@link ParticleSystem}.\n *\n * @alias Particle\n * @constructor\n *\n * @param {object} options An object with the following properties:\n * @param {number} [options.mass=1.0] The mass of the particle in kilograms.\n * @param {Cartesian3} [options.position=Cartesian3.ZERO] The initial position of the particle in world coordinates.\n * @param {Cartesian3} [options.velocity=Cartesian3.ZERO] The velocity vector of the particle in world coordinates.\n * @param {number} [options.life=Number.MAX_VALUE] The life of the particle in seconds.\n * @param {object} [options.image] The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.\n * @param {Color} [options.startColor=Color.WHITE] The color of a particle when it is born.\n * @param {Color} [options.endColor=Color.WHITE] The color of a particle when it dies.\n * @param {number} [options.startScale=1.0] The scale of the particle when it is born.\n * @param {number} [options.endScale=1.0] The scale of the particle when it dies.\n * @param {Cartesian2} [options.imageSize=new Cartesian2(1.0, 1.0)] The dimensions, width by height, to scale the particle image in pixels.\n */\nfunction Particle(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The mass of the particle in kilograms.\n   * @type {number}\n   * @default 1.0\n   */\n  this.mass = options.mass ?? 1.0;\n  /**\n   * The positon of the particle in world coordinates.\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   */\n  this.position = Cartesian3.clone(options.position ?? Cartesian3.ZERO);\n  /**\n   * The velocity of the particle in world coordinates.\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   */\n  this.velocity = Cartesian3.clone(options.velocity ?? Cartesian3.ZERO);\n  /**\n   * The life of the particle in seconds.\n   * @type {number}\n   * @default Number.MAX_VALUE\n   */\n  this.life = options.life ?? Number.MAX_VALUE;\n  /**\n   * The image to use for the particle.\n   * @type {object}\n   * @default undefined\n   */\n  this.image = options.image;\n  /**\n   * The color of the particle when it is born.\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  this.startColor = Color.clone(options.startColor ?? Color.WHITE);\n  /**\n   * The color of the particle when it dies.\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  this.endColor = Color.clone(options.endColor ?? Color.WHITE);\n  /**\n   * the scale of the particle when it is born.\n   * @type {number}\n   * @default 1.0\n   */\n  this.startScale = options.startScale ?? 1.0;\n  /**\n   * The scale of the particle when it dies.\n   * @type {number}\n   * @default 1.0\n   */\n  this.endScale = options.endScale ?? 1.0;\n  /**\n   * The dimensions, width by height, to scale the particle image in pixels.\n   * @type {Cartesian2}\n   * @default new Cartesian(1.0, 1.0)\n   */\n  this.imageSize = Cartesian2.clone(options.imageSize ?? defaultSize);\n\n  this._age = 0.0;\n  this._normalizedAge = 0.0;\n\n  // used by ParticleSystem\n  this._billboard = undefined;\n}\n\nObject.defineProperties(Particle.prototype, {\n  /**\n   * Gets the age of the particle in seconds.\n   * @memberof Particle.prototype\n   * @type {number}\n   */\n  age: {\n    get: function () {\n      return this._age;\n    },\n  },\n  /**\n   * Gets the age normalized to a value in the range [0.0, 1.0].\n   * @memberof Particle.prototype\n   * @type {number}\n   */\n  normalizedAge: {\n    get: function () {\n      return this._normalizedAge;\n    },\n  },\n});\n\nconst deltaScratch = new Cartesian3();\n\n/**\n * @private\n */\nParticle.prototype.update = function (dt, particleUpdateFunction) {\n  // Apply the velocity\n  Cartesian3.multiplyByScalar(this.velocity, dt, deltaScratch);\n  Cartesian3.add(this.position, deltaScratch, this.position);\n\n  // Update any forces.\n  if (defined(particleUpdateFunction)) {\n    particleUpdateFunction(this, dt);\n  }\n\n  // Age the particle\n  this._age += dt;\n\n  // Compute the normalized age.\n  if (this.life === Number.MAX_VALUE) {\n    this._normalizedAge = 0.0;\n  } else {\n    this._normalizedAge = this._age / this.life;\n  }\n\n  // If this particle is older than it's lifespan then die.\n  return this._age <= this.life;\n};\nexport default Particle;\n","import Frozen from \"../Core/Frozen.js\";\n\n/**\n * Represents a burst of {@link Particle}s from a {@link ParticleSystem} at a given time in the systems lifetime.\n *\n * @alias ParticleBurst\n * @constructor\n *\n * @param {object} [options] An object with the following properties:\n * @param {number} [options.time=0.0] The time in seconds after the beginning of the particle system's lifetime that the burst will occur.\n * @param {number} [options.minimum=0.0] The minimum number of particles emmitted in the burst.\n * @param {number} [options.maximum=50.0] The maximum number of particles emitted in the burst.\n */\nfunction ParticleBurst(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The time in seconds after the beginning of the particle system's lifetime that the burst will occur.\n   * @type {number}\n   * @default 0.0\n   */\n  this.time = options.time ?? 0.0;\n  /**\n   * The minimum number of particles emitted.\n   * @type {number}\n   * @default 0.0\n   */\n  this.minimum = options.minimum ?? 0.0;\n  /**\n   * The maximum number of particles emitted.\n   * @type {number}\n   * @default 50.0\n   */\n  this.maximum = options.maximum ?? 50.0;\n\n  this._complete = false;\n}\n\nObject.defineProperties(ParticleBurst.prototype, {\n  /**\n   * <code>true</code> if the burst has been completed; <code>false</code> otherwise.\n   * @memberof ParticleBurst.prototype\n   * @type {boolean}\n   */\n  complete: {\n    get: function () {\n      return this._complete;\n    },\n  },\n});\nexport default ParticleBurst;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * <p>\n * An object that initializes a {@link Particle} from a {@link ParticleSystem}.\n * </p>\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n *\n * @alias ParticleEmitter\n * @constructor\n *\n * @see BoxEmitter\n * @see CircleEmitter\n * @see ConeEmitter\n * @see SphereEmitter\n */\nfunction ParticleEmitter(options) {\n  //>>includeStart('debug', pragmas.debug);\n  throw new DeveloperError(\n    \"This type should not be instantiated directly.  Instead, use BoxEmitter, CircleEmitter, ConeEmitter or SphereEmitter.\",\n  );\n  //>>includeEnd('debug');\n}\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} The particle to initialize\n */\nParticleEmitter.prototype.emit = function (particle) {\n  DeveloperError.throwInstantiationError();\n};\nexport default ParticleEmitter;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport BillboardCollection from \"./BillboardCollection.js\";\nimport CircleEmitter from \"./CircleEmitter.js\";\nimport Particle from \"./Particle.js\";\n\nconst defaultImageSize = new Cartesian2(1.0, 1.0);\n\n/**\n * A ParticleSystem manages the updating and display of a collection of particles.\n *\n * @alias ParticleSystem\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.show=true] Whether to display the particle system.\n * @param {ParticleSystem.updateCallback} [options.updateCallback] The callback function to be called each frame to update a particle.\n * @param {ParticleEmitter} [options.emitter=new CircleEmitter(0.5)] The particle emitter for this system.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the particle system from model to world coordinates.\n * @param {Matrix4} [options.emitterModelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system.\n * @param {number} [options.emissionRate=5] The number of particles to emit per second.\n * @param {ParticleBurst[]} [options.bursts] An array of {@link ParticleBurst}, emitting bursts of particles at periodic times.\n * @param {boolean} [options.loop=true] Whether the particle system should loop its bursts when it is complete.\n * @param {number} [options.scale=1.0] Sets the scale to apply to the image of the particle for the duration of its particleLife.\n * @param {number} [options.startScale] The initial scale to apply to the image of the particle at the beginning of its life.\n * @param {number} [options.endScale] The final scale to apply to the image of the particle at the end of its life.\n * @param {Color} [options.color=Color.WHITE] Sets the color of a particle for the duration of its particleLife.\n * @param {Color} [options.startColor] The color of the particle at the beginning of its life.\n * @param {Color} [options.endColor] The color of the particle at the end of its life.\n * @param {object} [options.image] The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.\n * @param {Cartesian2} [options.imageSize=new Cartesian2(1.0, 1.0)] If set, overrides the minimumImageSize and maximumImageSize inputs that scale the particle image's dimensions in pixels.\n * @param {Cartesian2} [options.minimumImageSize] Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels.\n * @param {Cartesian2} [options.maximumImageSize] Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels.\n * @param {boolean} [options.sizeInMeters] Sets if the size of particles is in meters or pixels. <code>true</code> to size the particles in meters; otherwise, the size is in pixels.\n * @param {number} [options.speed=1.0] If set, overrides the minimumSpeed and maximumSpeed inputs with this value.\n * @param {number} [options.minimumSpeed] Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen.\n * @param {number} [options.maximumSpeed] Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen.\n * @param {number} [options.lifetime=Number.MAX_VALUE] How long the particle system will emit particles, in seconds.\n * @param {number} [options.particleLife=5.0] If set, overrides the minimumParticleLife and maximumParticleLife inputs with this value.\n * @param {number} [options.minimumParticleLife] Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen.\n * @param {number} [options.maximumParticleLife] Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen.\n * @param {number} [options.mass=1.0] Sets the minimum and maximum mass of particles in kilograms.\n * @param {number} [options.minimumMass] Sets the minimum bound for the mass of a particle in kilograms. A particle's actual mass will be chosen as a random amount above this value.\n * @param {number} [options.maximumMass] Sets the maximum mass of particles in kilograms. A particle's actual mass will be chosen as a random amount below this value.\n * @demo {@link https://cesium.com/learn/cesiumjs-learn/cesiumjs-particle-systems/|Particle Systems Tutorial}\n * @demo {@link https://sandcastle.cesium.com/?id=particle-system|Particle Systems Tutorial Demo}\n * @demo {@link https://sandcastle.cesium.com/?id=particle-system-fireworks|Particle Systems Fireworks Demo}\n */\nfunction ParticleSystem(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * Whether to display the particle system.\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * An array of force callbacks. The callback is passed a {@link Particle} and the difference from the last time\n   * @type {ParticleSystem.updateCallback}\n   * @default undefined\n   */\n  this.updateCallback = options.updateCallback;\n\n  /**\n   * Whether the particle system should loop it's bursts when it is complete.\n   * @type {boolean}\n   * @default true\n   */\n  this.loop = options.loop ?? true;\n\n  /**\n   * The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.\n   * @type {object}\n   * @default undefined\n   */\n  this.image = options.image ?? undefined;\n\n  let emitter = options.emitter;\n  if (!defined(emitter)) {\n    emitter = new CircleEmitter(0.5);\n  }\n  this._emitter = emitter;\n\n  this._bursts = options.bursts;\n\n  this._modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._emitterModelMatrix = Matrix4.clone(\n    options.emitterModelMatrix ?? Matrix4.IDENTITY,\n  );\n  this._matrixDirty = true;\n  this._combinedMatrix = new Matrix4();\n\n  this._startColor = Color.clone(\n    options.color ?? options.startColor ?? Color.WHITE,\n  );\n  this._endColor = Color.clone(\n    options.color ?? options.endColor ?? Color.WHITE,\n  );\n\n  this._startScale = options.scale ?? options.startScale ?? 1.0;\n  this._endScale = options.scale ?? options.endScale ?? 1.0;\n\n  this._emissionRate = options.emissionRate ?? 5.0;\n\n  this._minimumSpeed = options.speed ?? options.minimumSpeed ?? 1.0;\n  this._maximumSpeed = options.speed ?? options.maximumSpeed ?? 1.0;\n\n  this._minimumParticleLife =\n    options.particleLife ?? options.minimumParticleLife ?? 5.0;\n  this._maximumParticleLife =\n    options.particleLife ?? options.maximumParticleLife ?? 5.0;\n\n  this._minimumMass = options.mass ?? options.minimumMass ?? 1.0;\n  this._maximumMass = options.mass ?? options.maximumMass ?? 1.0;\n\n  this._minimumImageSize = Cartesian2.clone(\n    options.imageSize ?? options.minimumImageSize ?? defaultImageSize,\n  );\n  this._maximumImageSize = Cartesian2.clone(\n    options.imageSize ?? options.maximumImageSize ?? defaultImageSize,\n  );\n\n  this._sizeInMeters = options.sizeInMeters ?? false;\n\n  this._lifetime = options.lifetime ?? Number.MAX_VALUE;\n\n  this._billboardCollection = undefined;\n  this._particles = [];\n\n  // An array of available particles that we can reuse instead of allocating new.\n  this._particlePool = [];\n\n  this._previousTime = undefined;\n  this._currentTime = 0.0;\n  this._carryOver = 0.0;\n\n  this._complete = new Event();\n  this._isComplete = false;\n\n  this._updateParticlePool = true;\n  this._particleEstimate = 0;\n}\n\nObject.defineProperties(ParticleSystem.prototype, {\n  /**\n   * The particle emitter for this\n   * @memberof ParticleSystem.prototype\n   * @type {ParticleEmitter}\n   * @default CircleEmitter\n   */\n  emitter: {\n    get: function () {\n      return this._emitter;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n      this._emitter = value;\n    },\n  },\n  /**\n   * An array of {@link ParticleBurst}, emitting bursts of particles at periodic times.\n   * @memberof ParticleSystem.prototype\n   * @type {ParticleBurst[]}\n   * @default undefined\n   */\n  bursts: {\n    get: function () {\n      return this._bursts;\n    },\n    set: function (value) {\n      this._bursts = value;\n      this._updateParticlePool = true;\n    },\n  },\n  /**\n   * The 4x4 transformation matrix that transforms the particle system from model to world coordinates.\n   * @memberof ParticleSystem.prototype\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   */\n  modelMatrix: {\n    get: function () {\n      return this._modelMatrix;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n      this._matrixDirty =\n        this._matrixDirty || !Matrix4.equals(this._modelMatrix, value);\n      Matrix4.clone(value, this._modelMatrix);\n    },\n  },\n  /**\n   * The 4x4 transformation matrix that transforms the particle system emitter within the particle systems local coordinate system.\n   * @memberof ParticleSystem.prototype\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   */\n  emitterModelMatrix: {\n    get: function () {\n      return this._emitterModelMatrix;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n      this._matrixDirty =\n        this._matrixDirty || !Matrix4.equals(this._emitterModelMatrix, value);\n      Matrix4.clone(value, this._emitterModelMatrix);\n    },\n  },\n  /**\n   * The color of the particle at the beginning of its life.\n   * @memberof ParticleSystem.prototype\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  startColor: {\n    get: function () {\n      return this._startColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n      Color.clone(value, this._startColor);\n    },\n  },\n  /**\n   * The color of the particle at the end of its life.\n   * @memberof ParticleSystem.prototype\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  endColor: {\n    get: function () {\n      return this._endColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"value\", value);\n      //>>includeEnd('debug');\n      Color.clone(value, this._endColor);\n    },\n  },\n  /**\n   * The initial scale to apply to the image of the particle at the beginning of its life.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  startScale: {\n    get: function () {\n      return this._startScale;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._startScale = value;\n    },\n  },\n  /**\n   * The final scale to apply to the image of the particle at the end of its life.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  endScale: {\n    get: function () {\n      return this._endScale;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._endScale = value;\n    },\n  },\n  /**\n   * The number of particles to emit per second.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 5\n   */\n  emissionRate: {\n    get: function () {\n      return this._emissionRate;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._emissionRate = value;\n      this._updateParticlePool = true;\n    },\n  },\n  /**\n   * Sets the minimum bound in meters per second above which a particle's actual speed will be randomly chosen.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  minimumSpeed: {\n    get: function () {\n      return this._minimumSpeed;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._minimumSpeed = value;\n    },\n  },\n  /**\n   * Sets the maximum bound in meters per second below which a particle's actual speed will be randomly chosen.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  maximumSpeed: {\n    get: function () {\n      return this._maximumSpeed;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._maximumSpeed = value;\n    },\n  },\n  /**\n   * Sets the minimum bound in seconds for the possible duration of a particle's life above which a particle's actual life will be randomly chosen.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 5.0\n   */\n  minimumParticleLife: {\n    get: function () {\n      return this._minimumParticleLife;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._minimumParticleLife = value;\n    },\n  },\n  /**\n   * Sets the maximum bound in seconds for the possible duration of a particle's life below which a particle's actual life will be randomly chosen.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 5.0\n   */\n  maximumParticleLife: {\n    get: function () {\n      return this._maximumParticleLife;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._maximumParticleLife = value;\n      this._updateParticlePool = true;\n    },\n  },\n  /**\n   * Sets the minimum mass of particles in kilograms.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  minimumMass: {\n    get: function () {\n      return this._minimumMass;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._minimumMass = value;\n    },\n  },\n  /**\n   * Sets the maximum mass of particles in kilograms.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  maximumMass: {\n    get: function () {\n      return this._maximumMass;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._maximumMass = value;\n    },\n  },\n  /**\n   * Sets the minimum bound, width by height, above which to randomly scale the particle image's dimensions in pixels.\n   * @memberof ParticleSystem.prototype\n   * @type {Cartesian2}\n   * @default new Cartesian2(1.0, 1.0)\n   */\n  minimumImageSize: {\n    get: function () {\n      return this._minimumImageSize;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      Check.typeOf.number.greaterThanOrEquals(\"value.x\", value.x, 0.0);\n      Check.typeOf.number.greaterThanOrEquals(\"value.y\", value.y, 0.0);\n      //>>includeEnd('debug');\n      this._minimumImageSize = value;\n    },\n  },\n  /**\n   * Sets the maximum bound, width by height, below which to randomly scale the particle image's dimensions in pixels.\n   * @memberof ParticleSystem.prototype\n   * @type {Cartesian2}\n   * @default new Cartesian2(1.0, 1.0)\n   */\n  maximumImageSize: {\n    get: function () {\n      return this._maximumImageSize;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"value\", value);\n      Check.typeOf.number.greaterThanOrEquals(\"value.x\", value.x, 0.0);\n      Check.typeOf.number.greaterThanOrEquals(\"value.y\", value.y, 0.0);\n      //>>includeEnd('debug');\n      this._maximumImageSize = value;\n    },\n  },\n  /**\n   * Gets or sets if the particle size is in meters or pixels. <code>true</code> to size particles in meters; otherwise, the size is in pixels.\n   * @memberof ParticleSystem.prototype\n   * @type {boolean}\n   * @default false\n   */\n  sizeInMeters: {\n    get: function () {\n      return this._sizeInMeters;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"value\", value);\n      //>>includeEnd('debug');\n      this._sizeInMeters = value;\n    },\n  },\n  /**\n   * How long the particle system will emit particles, in seconds.\n   * @memberof ParticleSystem.prototype\n   * @type {number}\n   * @default Number.MAX_VALUE\n   */\n  lifetime: {\n    get: function () {\n      return this._lifetime;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThanOrEquals(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._lifetime = value;\n    },\n  },\n  /**\n   * Fires an event when the particle system has reached the end of its lifetime.\n   * @memberof ParticleSystem.prototype\n   * @type {Event}\n   */\n  complete: {\n    get: function () {\n      return this._complete;\n    },\n  },\n  /**\n   * When <code>true</code>, the particle system has reached the end of its lifetime; <code>false</code> otherwise.\n   * @memberof ParticleSystem.prototype\n   * @type {boolean}\n   */\n  isComplete: {\n    get: function () {\n      return this._isComplete;\n    },\n  },\n});\n\nfunction updateParticlePool(system) {\n  const emissionRate = system._emissionRate;\n  const life = system._maximumParticleLife;\n\n  let burstAmount = 0;\n  const bursts = system._bursts;\n  if (defined(bursts)) {\n    const length = bursts.length;\n    for (let i = 0; i < length; ++i) {\n      burstAmount += bursts[i].maximum;\n    }\n  }\n\n  const billboardCollection = system._billboardCollection;\n  const image = system.image;\n\n  const particleEstimate = Math.ceil(emissionRate * life + burstAmount);\n  const particles = system._particles;\n  const particlePool = system._particlePool;\n  const numToAdd = Math.max(\n    particleEstimate - particles.length - particlePool.length,\n    0,\n  );\n\n  for (let j = 0; j < numToAdd; ++j) {\n    const particle = new Particle();\n    particle._billboard = billboardCollection.add({\n      image: image,\n      // Make the newly added billboards invisible when updating the particle pool\n      // to prevent the billboards from being displayed when the particles\n      // are not created. The billboard will always be set visible in\n      // updateBillboard function when its corresponding particle update.\n      show: false,\n    });\n    particlePool.push(particle);\n  }\n\n  system._particleEstimate = particleEstimate;\n}\n\nfunction getOrCreateParticle(system) {\n  // Try to reuse an existing particle from the pool.\n  let particle = system._particlePool.pop();\n  if (!defined(particle)) {\n    // Create a new one\n    particle = new Particle();\n  }\n  return particle;\n}\n\nfunction addParticleToPool(system, particle) {\n  system._particlePool.push(particle);\n}\n\nfunction freeParticlePool(system) {\n  const particles = system._particles;\n  const particlePool = system._particlePool;\n  const billboardCollection = system._billboardCollection;\n\n  const numParticles = particles.length;\n  const numInPool = particlePool.length;\n  const estimate = system._particleEstimate;\n\n  const start = numInPool - Math.max(estimate - numParticles - numInPool, 0);\n  for (let i = start; i < numInPool; ++i) {\n    const p = particlePool[i];\n    billboardCollection.remove(p._billboard);\n  }\n  particlePool.length = start;\n}\n\nfunction removeBillboard(particle) {\n  if (defined(particle._billboard)) {\n    particle._billboard.show = false;\n  }\n}\n\nfunction updateBillboard(system, particle) {\n  let billboard = particle._billboard;\n  if (!defined(billboard)) {\n    billboard = particle._billboard = system._billboardCollection.add({\n      image: particle.image,\n    });\n  }\n  billboard.width = particle.imageSize.x;\n  billboard.height = particle.imageSize.y;\n  billboard.position = particle.position;\n  billboard.sizeInMeters = system.sizeInMeters;\n  billboard.show = true;\n\n  // Update the color\n  const r = CesiumMath.lerp(\n    particle.startColor.red,\n    particle.endColor.red,\n    particle.normalizedAge,\n  );\n  const g = CesiumMath.lerp(\n    particle.startColor.green,\n    particle.endColor.green,\n    particle.normalizedAge,\n  );\n  const b = CesiumMath.lerp(\n    particle.startColor.blue,\n    particle.endColor.blue,\n    particle.normalizedAge,\n  );\n  const a = CesiumMath.lerp(\n    particle.startColor.alpha,\n    particle.endColor.alpha,\n    particle.normalizedAge,\n  );\n  billboard.color = new Color(r, g, b, a);\n\n  // Update the scale\n  billboard.scale = CesiumMath.lerp(\n    particle.startScale,\n    particle.endScale,\n    particle.normalizedAge,\n  );\n}\n\nfunction addParticle(system, particle) {\n  particle.startColor = Color.clone(system._startColor, particle.startColor);\n  particle.endColor = Color.clone(system._endColor, particle.endColor);\n  particle.startScale = system._startScale;\n  particle.endScale = system._endScale;\n  particle.image = system.image;\n  particle.life = CesiumMath.randomBetween(\n    system._minimumParticleLife,\n    system._maximumParticleLife,\n  );\n  particle.mass = CesiumMath.randomBetween(\n    system._minimumMass,\n    system._maximumMass,\n  );\n  particle.imageSize.x = CesiumMath.randomBetween(\n    system._minimumImageSize.x,\n    system._maximumImageSize.x,\n  );\n  particle.imageSize.y = CesiumMath.randomBetween(\n    system._minimumImageSize.y,\n    system._maximumImageSize.y,\n  );\n\n  // Reset the normalizedAge and age in case the particle was reused.\n  particle._normalizedAge = 0.0;\n  particle._age = 0.0;\n\n  const speed = CesiumMath.randomBetween(\n    system._minimumSpeed,\n    system._maximumSpeed,\n  );\n  Cartesian3.multiplyByScalar(particle.velocity, speed, particle.velocity);\n\n  system._particles.push(particle);\n}\n\nfunction calculateNumberToEmit(system, dt) {\n  // This emitter is finished if it exceeds it's lifetime.\n  if (system._isComplete) {\n    return 0;\n  }\n\n  dt = CesiumMath.mod(dt, system._lifetime);\n\n  // Compute the number of particles to emit based on the emissionRate.\n  const v = dt * system._emissionRate;\n  let numToEmit = Math.floor(v);\n  system._carryOver += v - numToEmit;\n  if (system._carryOver > 1.0) {\n    numToEmit++;\n    system._carryOver -= 1.0;\n  }\n\n  // Apply any bursts\n  if (defined(system.bursts)) {\n    const length = system.bursts.length;\n    for (let i = 0; i < length; i++) {\n      const burst = system.bursts[i];\n      const currentTime = system._currentTime;\n      if (defined(burst) && !burst._complete && currentTime > burst.time) {\n        numToEmit += CesiumMath.randomBetween(burst.minimum, burst.maximum);\n        burst._complete = true;\n      }\n    }\n  }\n\n  return numToEmit;\n}\n\nconst rotatedVelocityScratch = new Cartesian3();\n\n/**\n * @private\n */\nParticleSystem.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  if (!defined(this._billboardCollection)) {\n    this._billboardCollection = new BillboardCollection();\n  }\n\n  if (this._updateParticlePool) {\n    updateParticlePool(this);\n    this._updateParticlePool = false;\n  }\n\n  // Compute the frame time\n  let dt = 0.0;\n  if (this._previousTime) {\n    dt = JulianDate.secondsDifference(frameState.time, this._previousTime);\n  }\n\n  if (dt < 0.0) {\n    dt = 0.0;\n  }\n\n  const particles = this._particles;\n  const emitter = this._emitter;\n  const updateCallback = this.updateCallback;\n\n  let i;\n  let particle;\n\n  // update particles and remove dead particles\n  let length = particles.length;\n  for (i = 0; i < length; ++i) {\n    particle = particles[i];\n    if (!particle.update(dt, updateCallback)) {\n      removeBillboard(particle);\n      // Add the particle back to the pool so it can be reused.\n      addParticleToPool(this, particle);\n      particles[i] = particles[length - 1];\n      --i;\n      --length;\n    } else {\n      updateBillboard(this, particle);\n    }\n  }\n  particles.length = length;\n\n  const numToEmit = calculateNumberToEmit(this, dt);\n\n  if (numToEmit > 0 && defined(emitter)) {\n    // Compute the final model matrix by combining the particle systems model matrix and the emitter matrix.\n    if (this._matrixDirty) {\n      this._combinedMatrix = Matrix4.multiply(\n        this.modelMatrix,\n        this.emitterModelMatrix,\n        this._combinedMatrix,\n      );\n      this._matrixDirty = false;\n    }\n\n    const combinedMatrix = this._combinedMatrix;\n\n    for (i = 0; i < numToEmit; i++) {\n      // Create a new particle.\n      particle = getOrCreateParticle(this);\n\n      // Let the emitter initialize the particle.\n      this._emitter.emit(particle);\n\n      //For the velocity we need to add it to the original position and then multiply by point.\n      Cartesian3.add(\n        particle.position,\n        particle.velocity,\n        rotatedVelocityScratch,\n      );\n      Matrix4.multiplyByPoint(\n        combinedMatrix,\n        rotatedVelocityScratch,\n        rotatedVelocityScratch,\n      );\n\n      // Change the position to be in world coordinates\n      particle.position = Matrix4.multiplyByPoint(\n        combinedMatrix,\n        particle.position,\n        particle.position,\n      );\n\n      // Orient the velocity in world space as well.\n      Cartesian3.subtract(\n        rotatedVelocityScratch,\n        particle.position,\n        particle.velocity,\n      );\n      Cartesian3.normalize(particle.velocity, particle.velocity);\n\n      // Add the particle to the system.\n      addParticle(this, particle);\n      updateBillboard(this, particle);\n    }\n  }\n\n  this._billboardCollection.update(frameState);\n  this._previousTime = JulianDate.clone(frameState.time, this._previousTime);\n  this._currentTime += dt;\n\n  if (\n    this._lifetime !== Number.MAX_VALUE &&\n    this._currentTime > this._lifetime\n  ) {\n    if (this.loop) {\n      this._currentTime = CesiumMath.mod(this._currentTime, this._lifetime);\n      if (this.bursts) {\n        const burstLength = this.bursts.length;\n        // Reset any bursts\n        for (i = 0; i < burstLength; i++) {\n          this.bursts[i]._complete = false;\n        }\n      }\n    } else {\n      this._isComplete = true;\n      this._complete.raiseEvent(this);\n    }\n  }\n\n  // free particles in the pool and release billboard GPU memory\n  if (frameState.frameNumber % 120 === 0) {\n    freeParticlePool(this);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ParticleSystem#destroy\n */\nParticleSystem.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see ParticleSystem#isDestroyed\n */\nParticleSystem.prototype.destroy = function () {\n  this._billboardCollection =\n    this._billboardCollection && this._billboardCollection.destroy();\n  return destroyObject(this);\n};\n\n/**\n * A function used to modify attributes of the particle at each time step. This can include force modifications,\n * color, sizing, etc.\n *\n * @callback ParticleSystem.updateCallback\n *\n * @param {Particle} particle The particle being updated.\n * @param {number} dt The time in seconds since the last update.\n *\n * @example\n * function applyGravity(particle, dt) {\n *    const position = particle.position;\n *    const gravityVector = Cesium.Cartesian3.normalize(position, new Cesium.Cartesian3());\n *    Cesium.Cartesian3.multiplyByScalar(gravityVector, GRAVITATIONAL_CONSTANT * dt, gravityVector);\n *    particle.velocity = Cesium.Cartesian3.add(particle.velocity, gravityVector, particle.velocity);\n * }\n */\nexport default ParticleSystem;\n","import Frozen from \"../Core/Frozen.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport PerInstanceColorAppearanceFS from \"../Shaders/Appearances/PerInstanceColorAppearanceFS.js\";\nimport PerInstanceColorAppearanceVS from \"../Shaders/Appearances/PerInstanceColorAppearanceVS.js\";\nimport PerInstanceFlatColorAppearanceFS from \"../Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js\";\nimport PerInstanceFlatColorAppearanceVS from \"../Shaders/Appearances/PerInstanceFlatColorAppearanceVS.js\";\nimport Appearance from \"./Appearance.js\";\n\n/**\n * An appearance for {@link GeometryInstance} instances with color attributes.\n * This allows several geometry instances, each with a different color, to\n * be drawn with the same {@link Primitive} as shown in the second example below.\n *\n * @alias PerInstanceColorAppearance\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.flat=false] When <code>true</code>, flat shading is used in the fragment shader, which means lighting is not taking into account.\n * @param {boolean} [options.faceForward=!options.closed] When <code>true</code>, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots.  This is useful when both sides of a geometry should be shaded like {@link WallGeometry}.\n * @param {boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link PerInstanceColorAppearance#renderState} has alpha blending enabled.\n * @param {boolean} [options.closed=false] When <code>true</code>, the geometry is expected to be closed so {@link PerInstanceColorAppearance#renderState} has backface culling enabled.\n * @param {string} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {string} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {object} [options.renderState] Optional render state to override the default render state.\n *\n * @example\n * // A solid white line segment\n * const primitive = new Cesium.Primitive({\n *   geometryInstances : new Cesium.GeometryInstance({\n *     geometry : new Cesium.SimplePolylineGeometry({\n *       positions : Cesium.Cartesian3.fromDegreesArray([\n *         0.0, 0.0,\n *         5.0, 0.0\n *       ])\n *     }),\n *     attributes : {\n *       color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 1.0))\n *     }\n *   }),\n *   appearance : new Cesium.PerInstanceColorAppearance({\n *     flat : true,\n *     translucent : false\n *   })\n * });\n *\n * // Two rectangles in a primitive, each with a different color\n * const instance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.RectangleGeometry({\n *     rectangle : Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0)\n *   }),\n *   attributes : {\n *     color : new Cesium.ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 0.5)\n *   }\n * });\n *\n * const anotherInstance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.RectangleGeometry({\n *     rectangle : Cesium.Rectangle.fromDegrees(0.0, 40.0, 10.0, 50.0)\n *   }),\n *   attributes : {\n *     color : new Cesium.ColorGeometryInstanceAttribute(0.0, 0.0, 1.0, 0.5)\n *   }\n * });\n *\n * const rectanglePrimitive = new Cesium.Primitive({\n *   geometryInstances : [instance, anotherInstance],\n *   appearance : new Cesium.PerInstanceColorAppearance()\n * });\n */\nfunction PerInstanceColorAppearance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const translucent = options.translucent ?? true;\n  const closed = options.closed ?? false;\n  const flat = options.flat ?? false;\n  const vs = flat\n    ? PerInstanceFlatColorAppearanceVS\n    : PerInstanceColorAppearanceVS;\n  const fs = flat\n    ? PerInstanceFlatColorAppearanceFS\n    : PerInstanceColorAppearanceFS;\n  const vertexFormat = flat\n    ? PerInstanceColorAppearance.FLAT_VERTEX_FORMAT\n    : PerInstanceColorAppearance.VERTEX_FORMAT;\n\n  /**\n   * This property is part of the {@link Appearance} interface, but is not\n   * used by {@link PerInstanceColorAppearance} since a fully custom fragment shader is used.\n   *\n   * @type Material\n   *\n   * @default undefined\n   */\n  this.material = undefined;\n\n  /**\n   * When <code>true</code>, the geometry is expected to appear translucent so\n   * {@link PerInstanceColorAppearance#renderState} has alpha blending enabled.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.translucent = translucent;\n\n  this._vertexShaderSource = options.vertexShaderSource ?? vs;\n  this._fragmentShaderSource = options.fragmentShaderSource ?? fs;\n  this._renderState = Appearance.getDefaultRenderState(\n    translucent,\n    closed,\n    options.renderState,\n  );\n  this._closed = closed;\n\n  // Non-derived members\n\n  this._vertexFormat = vertexFormat;\n  this._flat = flat;\n  this._faceForward = options.faceForward ?? !closed;\n}\n\nObject.defineProperties(PerInstanceColorAppearance.prototype, {\n  /**\n   * The GLSL source code for the vertex shader.\n   *\n   * @memberof PerInstanceColorAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      return this._vertexShaderSource;\n    },\n  },\n\n  /**\n   * The GLSL source code for the fragment shader.\n   *\n   * @memberof PerInstanceColorAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n\n  /**\n   * The WebGL fixed-function state to use when rendering the geometry.\n   * <p>\n   * The render state can be explicitly defined when constructing a {@link PerInstanceColorAppearance}\n   * instance, or it is set implicitly via {@link PerInstanceColorAppearance#translucent}\n   * and {@link PerInstanceColorAppearance#closed}.\n   * </p>\n   *\n   * @memberof PerInstanceColorAppearance.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be closed so\n   * {@link PerInstanceColorAppearance#renderState} has backface culling enabled.\n   * If the viewer enters the geometry, it will not be visible.\n   *\n   * @memberof PerInstanceColorAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  closed: {\n    get: function () {\n      return this._closed;\n    },\n  },\n\n  /**\n   * The {@link VertexFormat} that this appearance instance is compatible with.\n   * A geometry can have more vertex attributes and still be compatible - at a\n   * potential performance cost - but it can't have less.\n   *\n   * @memberof PerInstanceColorAppearance.prototype\n   *\n   * @type VertexFormat\n   * @readonly\n   */\n  vertexFormat: {\n    get: function () {\n      return this._vertexFormat;\n    },\n  },\n\n  /**\n   * When <code>true</code>, flat shading is used in the fragment shader,\n   * which means lighting is not taking into account.\n   *\n   * @memberof PerInstanceColorAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  flat: {\n    get: function () {\n      return this._flat;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the fragment shader flips the surface normal\n   * as needed to ensure that the normal faces the viewer to avoid\n   * dark spots.  This is useful when both sides of a geometry should be\n   * shaded like {@link WallGeometry}.\n   *\n   * @memberof PerInstanceColorAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  faceForward: {\n    get: function () {\n      return this._faceForward;\n    },\n  },\n});\n\n/**\n * The {@link VertexFormat} that all {@link PerInstanceColorAppearance} instances\n * are compatible with.  This requires only <code>position</code> and <code>normal</code>\n * attributes.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPerInstanceColorAppearance.VERTEX_FORMAT = VertexFormat.POSITION_AND_NORMAL;\n\n/**\n * The {@link VertexFormat} that all {@link PerInstanceColorAppearance} instances\n * are compatible with when {@link PerInstanceColorAppearance#flat} is <code>true</code>.\n * This requires only a <code>position</code> attribute.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPerInstanceColorAppearance.FLAT_VERTEX_FORMAT = VertexFormat.POSITION_ONLY;\n\n/**\n * Procedurally creates the full GLSL fragment shader source.  For {@link PerInstanceColorAppearance},\n * this is derived from {@link PerInstanceColorAppearance#fragmentShaderSource}, {@link PerInstanceColorAppearance#flat},\n * and {@link PerInstanceColorAppearance#faceForward}.\n *\n * @function\n *\n * @returns {string} The full GLSL fragment shader source.\n */\nPerInstanceColorAppearance.prototype.getFragmentShaderSource =\n  Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link PerInstanceColorAppearance#translucent}.\n *\n * @function\n *\n * @returns {boolean} <code>true</code> if the appearance is translucent.\n */\nPerInstanceColorAppearance.prototype.isTranslucent =\n  Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state.  This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {object} The render state.\n */\nPerInstanceColorAppearance.prototype.getRenderState =\n  Appearance.prototype.getRenderState;\nexport default PerInstanceColorAppearance;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport getElement from \"../DataSources/getElement.js\";\n\n/**\n * @private\n */\nfunction PerformanceDisplay(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const container = getElement(options.container);\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required\");\n  }\n  //>>includeEnd('debug');\n\n  this._container = container;\n\n  const display = document.createElement(\"div\");\n  display.className = \"cesium-performanceDisplay\";\n  const fpsElement = document.createElement(\"div\");\n  fpsElement.className = \"cesium-performanceDisplay-fps\";\n  this._fpsText = document.createTextNode(\"\");\n  fpsElement.appendChild(this._fpsText);\n  const msElement = document.createElement(\"div\");\n  msElement.className = \"cesium-performanceDisplay-ms\";\n  this._msText = document.createTextNode(\"\");\n  msElement.appendChild(this._msText);\n  display.appendChild(msElement);\n  display.appendChild(fpsElement);\n  this._container.appendChild(display);\n\n  this._lastFpsSampleTime = getTimestamp();\n  this._lastMsSampleTime = getTimestamp();\n  this._fpsFrameCount = 0;\n  this._msFrameCount = 0;\n\n  this._throttled = false;\n  const throttledElement = document.createElement(\"div\");\n  throttledElement.className = \"cesium-performanceDisplay-throttled\";\n  this._throttledText = document.createTextNode(\"\");\n  throttledElement.appendChild(this._throttledText);\n  display.appendChild(throttledElement);\n}\n\nObject.defineProperties(PerformanceDisplay.prototype, {\n  /**\n   * The display should indicate the FPS is being throttled.\n   * @memberof PerformanceDisplay.prototype\n   *\n   * @type {boolean}\n   */\n  throttled: {\n    get: function () {\n      return this._throttled;\n    },\n    set: function (value) {\n      if (this._throttled === value) {\n        return;\n      }\n\n      if (value) {\n        this._throttledText.nodeValue = \"(throttled)\";\n      } else {\n        this._throttledText.nodeValue = \"\";\n      }\n\n      this._throttled = value;\n    },\n  },\n});\n\n/**\n * Update the display.  This function should only be called once per frame, because\n * each call records a frame in the internal buffer and redraws the display.\n *\n * @param {boolean} [renderedThisFrame=true] If provided, the FPS count will only update and display if true.\n */\nPerformanceDisplay.prototype.update = function (renderedThisFrame) {\n  const time = getTimestamp();\n  const updateDisplay = renderedThisFrame ?? true;\n\n  this._fpsFrameCount++;\n  const fpsElapsedTime = time - this._lastFpsSampleTime;\n  if (fpsElapsedTime > 1000) {\n    let fps = \"N/A\";\n    if (updateDisplay) {\n      fps = ((this._fpsFrameCount * 1000) / fpsElapsedTime) | 0;\n    }\n\n    this._fpsText.nodeValue = `${fps} FPS`;\n    this._lastFpsSampleTime = time;\n    this._fpsFrameCount = 0;\n  }\n\n  this._msFrameCount++;\n  const msElapsedTime = time - this._lastMsSampleTime;\n  if (msElapsedTime > 200) {\n    let ms = \"N/A\";\n    if (updateDisplay) {\n      ms = (msElapsedTime / this._msFrameCount).toFixed(2);\n    }\n\n    this._msText.nodeValue = `${ms} MS`;\n    this._lastMsSampleTime = time;\n    this._msFrameCount = 0;\n  }\n};\n\n/**\n * Destroys the WebGL resources held by this object.\n */\nPerformanceDisplay.prototype.destroy = function () {\n  return destroyObject(this);\n};\nexport default PerformanceDisplay;\n","import Cartesian4 from \"../Core/Cartesian4.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\n\n/**\n * @alias PickDepth\n * @constructor\n *\n * @private\n */\nfunction PickDepth() {\n  this._framebuffer = new FramebufferManager();\n\n  this._textureToCopy = undefined;\n  this._copyDepthCommand = undefined;\n}\n\nObject.defineProperties(PickDepth.prototype, {\n  framebuffer: {\n    get: function () {\n      return this._framebuffer.framebuffer;\n    },\n  },\n});\n\nfunction updateFramebuffers(pickDepth, context, depthTexture) {\n  const { width, height } = depthTexture;\n  pickDepth._framebuffer.update(context, width, height);\n}\n\nfunction updateCopyCommands(pickDepth, context, depthTexture) {\n  if (!defined(pickDepth._copyDepthCommand)) {\n    pickDepth._copyDepthCommand = context.createViewportQuadCommand(\n      `uniform highp sampler2D colorTexture;\n\nin vec2 v_textureCoordinates;\n\nvoid main()\n{\n  vec4 globeDepthPacked = texture(czm_globeDepthTexture, v_textureCoordinates);\n  float globeDepth = czm_unpackDepth(globeDepthPacked);\n  float depth = texture(colorTexture, v_textureCoordinates).r;\n  out_FragColor = czm_branchFreeTernary(globeDepth <= 0.0 || globeDepth >= 1.0 || depth < globeDepth && depth > 0.0 && depth < 1.0,\n    czm_packDepth(depth), globeDepthPacked);\n}\n`,\n      {\n        renderState: RenderState.fromCache(),\n        uniformMap: {\n          colorTexture: function () {\n            return pickDepth._textureToCopy;\n          },\n        },\n        owner: pickDepth,\n      },\n    );\n  }\n\n  pickDepth._textureToCopy = depthTexture;\n  pickDepth._copyDepthCommand.framebuffer = pickDepth.framebuffer;\n}\n\nPickDepth.prototype.update = function (context, depthTexture) {\n  updateFramebuffers(this, context, depthTexture);\n  updateCopyCommands(this, context, depthTexture);\n};\n\nconst scratchPackedDepth = new Cartesian4();\nconst packedDepthScale = new Cartesian4(\n  1.0,\n  1.0 / 255.0,\n  1.0 / 65025.0,\n  1.0 / 16581375.0,\n);\n\n/**\n * Read the depth from the framebuffer at the given coordinate.\n *\n * @param {Context} context\n * @param {number} x The x-coordinate at which to read the depth.\n * @param {number} y The y-coordinate at which to read the depth.\n * @returns {number} The depth read from the framebuffer.\n *\n * @private\n */\nPickDepth.prototype.getDepth = function (context, x, y) {\n  // If this function is called before the framebuffer is created, the depth is undefined.\n  if (!defined(this.framebuffer)) {\n    return undefined;\n  }\n\n  const pixels = context.readPixels({\n    x: x,\n    y: y,\n    width: 1,\n    height: 1,\n    framebuffer: this.framebuffer,\n  });\n\n  const packedDepth = Cartesian4.unpack(pixels, 0, scratchPackedDepth);\n  Cartesian4.divideByScalar(packedDepth, 255.0, packedDepth);\n  return Cartesian4.dot(packedDepth, packedDepthScale);\n};\n\nPickDepth.prototype.executeCopyDepth = function (context, passState) {\n  this._copyDepthCommand.execute(context, passState);\n};\n\nPickDepth.prototype.isDestroyed = function () {\n  return false;\n};\n\nPickDepth.prototype.destroy = function () {\n  this._framebuffer.destroy();\n  if (defined(this._copyDepthCommand)) {\n    this._copyDepthCommand.shaderProgram =\n      defined(this._copyDepthCommand.shaderProgram) &&\n      this._copyDepthCommand.shaderProgram.destroy();\n  }\n\n  return destroyObject(this);\n};\nexport default PickDepth;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PassState from \"../Renderer/PassState.js\";\n\n/**\n * @private\n */\nfunction PickDepthFramebuffer() {\n  this._framebuffer = new FramebufferManager({\n    color: false,\n    depthStencil: true,\n    supportsDepthTexture: true,\n  });\n  this._passState = undefined;\n}\n\nObject.defineProperties(PickDepthFramebuffer.prototype, {\n  framebuffer: {\n    get: function () {\n      return this._framebuffer.framebuffer;\n    },\n  },\n});\n\nfunction destroyResources(pickDepth) {\n  pickDepth._framebuffer.destroy();\n}\n\nfunction createResources(pickDepth, context) {\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight;\n\n  pickDepth._framebuffer.update(context, width, height);\n\n  const passState = new PassState(context);\n  passState.blendingEnabled = false;\n  passState.scissorTest = {\n    enabled: true,\n    rectangle: new BoundingRectangle(),\n  };\n  passState.viewport = new BoundingRectangle();\n  pickDepth._passState = passState;\n}\n\nPickDepthFramebuffer.prototype.update = function (\n  context,\n  drawingBufferPosition,\n  viewport,\n) {\n  const width = viewport.width;\n  const height = viewport.height;\n\n  if (this._framebuffer.isDirty(width, height)) {\n    createResources(this, context);\n  }\n\n  const framebuffer = this.framebuffer;\n  const passState = this._passState;\n  passState.framebuffer = framebuffer;\n  passState.viewport.width = width;\n  passState.viewport.height = height;\n  passState.scissorTest.rectangle.x = drawingBufferPosition.x;\n  passState.scissorTest.rectangle.y = height - drawingBufferPosition.y;\n  passState.scissorTest.rectangle.width = 1;\n  passState.scissorTest.rectangle.height = 1;\n\n  return passState;\n};\n\nPickDepthFramebuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nPickDepthFramebuffer.prototype.destroy = function () {\n  destroyResources(this);\n  return destroyObject(this);\n};\nexport default PickDepthFramebuffer;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Sync from \"../Renderer/Sync.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * @private\n */\nfunction PickFramebuffer(context) {\n  // Override per-command states\n  const passState = new PassState(context);\n  passState.blendingEnabled = false;\n  passState.scissorTest = {\n    enabled: true,\n    rectangle: new BoundingRectangle(),\n  };\n  passState.viewport = new BoundingRectangle();\n\n  this._context = context;\n  this._fb = new FramebufferManager({\n    depthStencil: true,\n  });\n  this._passState = passState;\n  this._width = 0;\n  this._height = 0;\n}\n\n/**\n * Return the picked object(s) rendered within a given rectangle.\n *\n * @private\n * @param {object} context The active context.\n * @param {Uint8Array|Uint16Array|Float32Array|Uint32Array} pixels The pixels in the specified rectangle.\n * @param {number} width The rectangle width.\n * @param {number} height The rectangle height.\n * @param {number} [limit=1] If supplied, stop iterating after collecting this many objects.\n * @returns {object[]} A list of rendered objects, ordered by distance to the middle of the rectangle.\n */\nfunction pickObjectsFromPixels(context, pixels, width, height, limit = 1) {\n  const max = Math.max(width, height);\n  const length = max * max;\n  const halfWidth = Math.floor(width * 0.5);\n  const halfHeight = Math.floor(height * 0.5);\n\n  let x = 0;\n  let y = 0;\n  let dx = 0;\n  let dy = -1;\n\n  // Spiral around the center pixel, this is a workaround until\n  // we can access the depth buffer on all browsers.\n\n  // The region does not have to square and the dimensions do not have to be odd, but\n  // loop iterations would be wasted. Prefer square regions where the size is odd.\n  const objects = new Set();\n  for (let i = 0; i < length; ++i) {\n    if (\n      -halfWidth <= x &&\n      x <= halfWidth &&\n      -halfHeight <= y &&\n      y <= halfHeight\n    ) {\n      const index = 4 * ((halfHeight - y) * width + x + halfWidth);\n\n      const pickColor = Color.bytesToRgba(\n        pixels[index],\n        pixels[index + 1],\n        pixels[index + 2],\n        pixels[index + 3],\n      );\n\n      const object = context.getObjectByPickColor(pickColor);\n      if (defined(object)) {\n        objects.add(object);\n        if (objects.size >= limit) {\n          break;\n        }\n      }\n    }\n\n    // if (top right || bottom left corners) || (top left corner) || (bottom right corner + (1, 0))\n    // change spiral direction\n    if (x === y || (x < 0 && -x === y) || (x > 0 && x === 1 - y)) {\n      const temp = dx;\n      dx = -dy;\n      dy = temp;\n    }\n\n    x += dx;\n    y += dy;\n  }\n  return [...objects];\n}\n\nPickFramebuffer.prototype.begin = function (screenSpaceRectangle, viewport) {\n  const context = this._context;\n  const { width, height } = viewport;\n\n  BoundingRectangle.clone(\n    screenSpaceRectangle,\n    this._passState.scissorTest.rectangle,\n  );\n\n  // Create or recreate renderbuffers and framebuffer used for picking\n  this._width = width;\n  this._height = height;\n  this._fb.update(context, width, height);\n  this._passState.framebuffer = this._fb.framebuffer;\n\n  this._passState.viewport.width = width;\n  this._passState.viewport.height = height;\n\n  return this._passState;\n};\n\n/**\n * Return the picked objects rendered within a given rectangle using asynchronously without stalling the GPU.\n * Requires WebGL2.\n *\n * @param {BoundingRectangle} screenSpaceRectangle\n * @param {FrameState} frameState\n * @param {number} [limit=1] If supplied, stop iterating after collecting this many objects.\n * @returns {Promise<object[]>} A list of rendered objects, ordered by distance to the middle of the rectangle.\n *\n * @exception {RuntimeError} Async Picking Request Timeout.\n * @exception {DeveloperError} A WebGL 2 context is required.\n */\nPickFramebuffer.prototype.endAsync = async function (\n  screenSpaceRectangle,\n  frameState,\n  limit = 1,\n) {\n  const width = screenSpaceRectangle.width ?? 1.0;\n  const height = screenSpaceRectangle.height ?? 1.0;\n\n  const context = this._context;\n  const framebuffer = this._fb.framebuffer;\n\n  let pixelDatatype = PixelDatatype.UNSIGNED_BYTE;\n  let pixelFormat = PixelFormat.RGBA;\n\n  if (defined(framebuffer) && framebuffer.numberOfColorAttachments > 0) {\n    pixelDatatype = framebuffer.getColorTexture(0).pixelDatatype;\n    pixelFormat = framebuffer.getColorTexture(0).pixelFormat;\n  }\n\n  const pbo = context.readPixelsToPBO({\n    x: screenSpaceRectangle.x,\n    y: screenSpaceRectangle.y,\n    width: width,\n    height: height,\n    framebuffer: framebuffer,\n  });\n\n  const sync = Sync.create({\n    context: context,\n  });\n\n  // Wait for the GPU to signal that it is ready to readback the PBO data\n  try {\n    await sync.waitForSignal((next) => frameState.afterRender.push(next));\n    const pixels = PixelFormat.createTypedArray(\n      pixelFormat,\n      pixelDatatype,\n      width,\n      height,\n    );\n    pbo.getBufferData(pixels);\n    const pickedObjects = pickObjectsFromPixels(\n      context,\n      pixels,\n      width,\n      height,\n      limit,\n    );\n    return pickedObjects;\n  } catch (e) {\n    throw new RuntimeError(\"Async Picking Request Timeout\");\n  } finally {\n    sync.destroy();\n    pbo.destroy();\n  }\n};\n\n/**\n * Return the picked objects rendered within a given rectangle.\n *\n * @param {BoundingRectangle} screenSpaceRectangle\n * @param {number} [limit=1] If supplied, stop iterating after collecting this many objects.\n * @returns {object[]} A list of rendered objects, ordered by distance to the middle of the rectangle.\n */\nPickFramebuffer.prototype.end = function (screenSpaceRectangle, limit = 1) {\n  const width = screenSpaceRectangle.width ?? 1.0;\n  const height = screenSpaceRectangle.height ?? 1.0;\n\n  const context = this._context;\n  const pixels = context.readPixels({\n    x: screenSpaceRectangle.x,\n    y: screenSpaceRectangle.y,\n    width: width,\n    height: height,\n    framebuffer: this._fb.framebuffer,\n  });\n\n  return pickObjectsFromPixels(context, pixels, width, height, limit);\n};\n\n/**\n * Return a typed array containing the RGBA (byte) components of the\n * pixel that is at the center of the given rectangle.\n *\n * This may, for example, be voxel tile and sample information as rendered\n * by a pickVoxel pass, within a given rectangle. Or it may be the result\n * of a metadata picking rendering pass.\n *\n * @param {BoundingRectangle} screenSpaceRectangle\n * @returns {Uint8Array} The RGBA components\n */\nPickFramebuffer.prototype.readCenterPixel = function (screenSpaceRectangle) {\n  const width = screenSpaceRectangle.width ?? 1.0;\n  const height = screenSpaceRectangle.height ?? 1.0;\n\n  const context = this._context;\n  const pixels = context.readPixels({\n    x: screenSpaceRectangle.x,\n    y: screenSpaceRectangle.y,\n    width: width,\n    height: height,\n    framebuffer: this._fb.framebuffer,\n  });\n\n  // Read the center pixel\n  const halfWidth = Math.floor(width * 0.5);\n  const halfHeight = Math.floor(height * 0.5);\n  const index = 4 * (halfHeight * width + halfWidth);\n\n  return pixels.slice(index, index + 4);\n};\n\nPickFramebuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nPickFramebuffer.prototype.destroy = function () {\n  this._fb.destroy();\n  return destroyObject(this);\n};\n\nexport default PickFramebuffer;\n","/**\n * Information about metadata that is supposed to be picked.\n *\n * This is initialized in the `Scene.pickMetadata` function, and passed to\n * the `FrameState`. It is used to configure the draw commands that render\n * the metadata values of an object into the picking frame buffer. The\n * raw values are read from that buffer, and are then translated back into\n * proper metadata values in `Picking.pickMetadata`, using the structural\n * information about the metadata that is stored here.\n *\n * @private\n */\nfunction PickedMetadataInfo(\n  schemaId,\n  className,\n  propertyName,\n  classProperty,\n  metadataProperty,\n) {\n  /**\n   * The optional ID of the metadata schema\n   *\n   * @type {string|undefined}\n   */\n  this.schemaId = schemaId;\n  /**\n   * The name of the metadata class\n   *\n   * @type {string}\n   */\n  this.className = className;\n  /**\n   * The name of the metadata property\n   *\n   * @type {string}\n   */\n  this.propertyName = propertyName;\n\n  /**\n   * The the `MetadataClassProperty` that is described by this\n   * structure, as obtained from the `MetadataSchema`\n   *\n   * @type {MetadataClassProperty}\n   */\n  this.classProperty = classProperty;\n\n  /**\n   * The `PropertyTextureProperty` or `PropertyAttributeProperty` that\n   * is described by this structure, as obtained from the property texture\n   * or property attribute of the `StructuralMetadata` that matches the\n   * class name and property name.\n   *\n   * @type {object}\n   */\n  this.metadataProperty = metadataProperty;\n}\nexport default PickedMetadataInfo;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport Ray from \"../Core/Ray.js\";\nimport ShowGeometryInstanceAttribute from \"../Core/ShowGeometryInstanceAttribute.js\";\nimport Camera from \"./Camera.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTilePassState from \"./Cesium3DTilePassState.js\";\nimport MetadataPicking from \"./MetadataPicking.js\";\nimport PickDepth from \"./PickDepth.js\";\nimport PrimitiveCollection from \"./PrimitiveCollection.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport View from \"./View.js\";\n\nconst offscreenDefaultWidth = 0.1;\n\nconst mostDetailedPreloadTilesetPassState = new Cesium3DTilePassState({\n  pass: Cesium3DTilePass.MOST_DETAILED_PRELOAD,\n});\n\nconst mostDetailedPickTilesetPassState = new Cesium3DTilePassState({\n  pass: Cesium3DTilePass.MOST_DETAILED_PICK,\n});\n\nconst pickTilesetPassState = new Cesium3DTilePassState({\n  pass: Cesium3DTilePass.PICK,\n});\n\n/**\n * @private\n */\nfunction Picking(scene) {\n  this._mostDetailedRayPicks = [];\n  this.pickRenderStateCache = {};\n  this._pickPositionCache = {};\n  this._pickPositionCacheDirty = false;\n\n  const pickOffscreenViewport = new BoundingRectangle(0, 0, 1, 1);\n  const pickOffscreenCamera = new Camera(scene);\n  pickOffscreenCamera.frustum = new OrthographicFrustum({\n    width: offscreenDefaultWidth,\n    aspectRatio: 1.0,\n    near: 0.1,\n  });\n\n  this._pickOffscreenView = new View(\n    scene,\n    pickOffscreenCamera,\n    pickOffscreenViewport,\n  );\n}\n\nPicking.prototype.update = function () {\n  this._pickPositionCacheDirty = true;\n};\n\nPicking.prototype.getPickDepth = function (scene, index) {\n  const pickDepths = scene.view.pickDepths;\n  let pickDepth = pickDepths[index];\n  if (!defined(pickDepth)) {\n    pickDepth = new PickDepth();\n    pickDepths[index] = pickDepth;\n  }\n  return pickDepth;\n};\n\nconst scratchOrthoPickingFrustum = new OrthographicOffCenterFrustum();\nconst scratchOrthoOrigin = new Cartesian3();\nconst scratchOrthoDirection = new Cartesian3();\nconst scratchOrthoPixelSize = new Cartesian2();\nconst scratchOrthoPickVolumeMatrix4 = new Matrix4();\n\nfunction getPickOrthographicCullingVolume(\n  scene,\n  drawingBufferPosition,\n  width,\n  height,\n  viewport,\n) {\n  const camera = scene.camera;\n  let frustum = camera.frustum;\n  const offCenterFrustum = frustum.offCenterFrustum;\n  if (defined(offCenterFrustum)) {\n    frustum = offCenterFrustum;\n  }\n\n  let x = (2.0 * (drawingBufferPosition.x - viewport.x)) / viewport.width - 1.0;\n  x *= (frustum.right - frustum.left) * 0.5;\n  let y =\n    (2.0 * (viewport.height - drawingBufferPosition.y - viewport.y)) /\n      viewport.height -\n    1.0;\n  y *= (frustum.top - frustum.bottom) * 0.5;\n\n  const transform = Matrix4.clone(\n    camera.transform,\n    scratchOrthoPickVolumeMatrix4,\n  );\n  camera._setTransform(Matrix4.IDENTITY);\n\n  const origin = Cartesian3.clone(camera.position, scratchOrthoOrigin);\n  Cartesian3.multiplyByScalar(camera.right, x, scratchOrthoDirection);\n  Cartesian3.add(scratchOrthoDirection, origin, origin);\n  Cartesian3.multiplyByScalar(camera.up, y, scratchOrthoDirection);\n  Cartesian3.add(scratchOrthoDirection, origin, origin);\n\n  camera._setTransform(transform);\n\n  if (scene.mode === SceneMode.SCENE2D) {\n    Cartesian3.fromElements(origin.z, origin.x, origin.y, origin);\n  }\n\n  const pixelSize = frustum.getPixelDimensions(\n    viewport.width,\n    viewport.height,\n    1.0,\n    1.0,\n    scratchOrthoPixelSize,\n  );\n\n  const ortho = scratchOrthoPickingFrustum;\n  ortho.right = pixelSize.x * 0.5;\n  ortho.left = -ortho.right;\n  ortho.top = pixelSize.y * 0.5;\n  ortho.bottom = -ortho.top;\n  ortho.near = frustum.near;\n  ortho.far = frustum.far;\n\n  return ortho.computeCullingVolume(origin, camera.directionWC, camera.upWC);\n}\n\nconst scratchPerspPickingFrustum = new PerspectiveOffCenterFrustum();\nconst scratchPerspPixelSize = new Cartesian2();\n\nfunction getPickPerspectiveCullingVolume(\n  scene,\n  drawingBufferPosition,\n  width,\n  height,\n  viewport,\n) {\n  const camera = scene.camera;\n  const frustum = camera.frustum;\n  const near = frustum.near;\n\n  const tanPhi = Math.tan(frustum.fovy * 0.5);\n  const tanTheta = frustum.aspectRatio * tanPhi;\n\n  const x =\n    (2.0 * (drawingBufferPosition.x - viewport.x)) / viewport.width - 1.0;\n  const y =\n    (2.0 * (viewport.height - drawingBufferPosition.y - viewport.y)) /\n      viewport.height -\n    1.0;\n\n  const xDir = x * near * tanTheta;\n  const yDir = y * near * tanPhi;\n\n  const pixelSize = frustum.getPixelDimensions(\n    viewport.width,\n    viewport.height,\n    1.0,\n    1.0,\n    scratchPerspPixelSize,\n  );\n  const pickWidth = pixelSize.x * width * 0.5;\n  const pickHeight = pixelSize.y * height * 0.5;\n\n  const offCenter = scratchPerspPickingFrustum;\n  offCenter.top = yDir + pickHeight;\n  offCenter.bottom = yDir - pickHeight;\n  offCenter.right = xDir + pickWidth;\n  offCenter.left = xDir - pickWidth;\n  offCenter.near = near;\n  offCenter.far = frustum.far;\n\n  return offCenter.computeCullingVolume(\n    camera.positionWC,\n    camera.directionWC,\n    camera.upWC,\n  );\n}\n\nfunction getPickCullingVolume(\n  scene,\n  drawingBufferPosition,\n  width,\n  height,\n  viewport,\n) {\n  const frustum = scene.camera.frustum;\n  if (\n    frustum instanceof OrthographicFrustum ||\n    frustum instanceof OrthographicOffCenterFrustum\n  ) {\n    return getPickOrthographicCullingVolume(\n      scene,\n      drawingBufferPosition,\n      width,\n      height,\n      viewport,\n    );\n  }\n\n  return getPickPerspectiveCullingVolume(\n    scene,\n    drawingBufferPosition,\n    width,\n    height,\n    viewport,\n  );\n}\n\n// Pick position and rectangle, used in all picking functions,\n// filled in computePickingDrawingBufferRectangle and passed\n// the the FrameBuffer begin/end methods\nconst scratchRectangle = new BoundingRectangle(0.0, 0.0, 3.0, 3.0);\nconst scratchPosition = new Cartesian2();\n\n// Dummy color that is passed to updateAndExecuteCommands in\n// all picking functions, used as the \"background color\"\nconst scratchColorZero = new Color(0.0, 0.0, 0.0, 0.0);\n\n/**\n * Compute the rectangle that describes the part of the drawing buffer\n * that is relevant for picking.\n *\n * @param {number} drawingBufferHeight The height of the drawing buffer\n * @param {Cartesian2} position The position inside the drawing buffer\n * @param {number|undefined} width The width of the rectangle, assumed to\n * be an odd integer number, default : 3.0\n * @param {number|undefined} height The height of the rectangle. If unspecified,\n * height will default to the value of <code>width</code>\n * @param {BoundingRectangle} result The result rectangle\n * @returns {BoundingRectangle} The result rectangle\n */\nfunction computePickingDrawingBufferRectangle(\n  drawingBufferHeight,\n  position,\n  width,\n  height,\n  result,\n) {\n  result.width = width ?? 3.0;\n  result.height = height ?? result.width;\n  result.x = position.x - (result.width - 1.0) * 0.5;\n  result.y = drawingBufferHeight - position.y - (result.height - 1.0) * 0.5;\n  return result;\n}\n\n/**\n * Setup needed before picking.\n *\n * @param {Scene} scene\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {BoundingRectangle} drawingBufferRectangle The output drawing buffer recangle.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n */\nfunction pickBegin(\n  scene,\n  windowPosition,\n  drawingBufferRectangle,\n  width,\n  height,\n) {\n  const { context, frameState, defaultView } = scene;\n  const { viewport, pickFramebuffer } = defaultView;\n\n  scene.view = defaultView;\n\n  viewport.x = 0;\n  viewport.y = 0;\n  viewport.width = context.drawingBufferWidth;\n  viewport.height = context.drawingBufferHeight;\n\n  let passState = defaultView.passState;\n  passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n  const drawingBufferPosition = SceneTransforms.transformWindowToDrawingBuffer(\n    scene,\n    windowPosition,\n    scratchPosition,\n  );\n  computePickingDrawingBufferRectangle(\n    context.drawingBufferHeight,\n    drawingBufferPosition,\n    width,\n    height,\n    drawingBufferRectangle,\n  );\n\n  scene.jobScheduler.disableThisFrame();\n\n  scene.updateFrameState();\n  frameState.cullingVolume = getPickCullingVolume(\n    scene,\n    drawingBufferPosition,\n    drawingBufferRectangle.width,\n    drawingBufferRectangle.height,\n    viewport,\n  );\n  frameState.invertClassification = false;\n  frameState.passes.pick = true;\n  frameState.tilesetPassState = pickTilesetPassState;\n\n  context.uniformState.update(frameState);\n\n  scene.updateEnvironment();\n\n  passState = pickFramebuffer.begin(drawingBufferRectangle, viewport);\n\n  scene.updateAndExecuteCommands(passState, scratchColorZero);\n  scene.resolveFramebuffers(passState);\n}\n\n/**\n * Teardown needed after picking.\n *\n * @param {Scene} scene\n */\nfunction pickEnd(scene) {\n  const { context } = scene;\n  context.endFrame();\n}\n\n/**\n * Same operation as {@link Picking#pick}, but returns a Promise that resolves asynchronously without blocking the main render thread.\n * Requires WebGL2 else using synchronous fallback.\n *\n * @see Picking#pick\n *\n * @param {Scene} scene\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n * @param {number} [limit=1] If supplied, stop iterating after collecting this many objects.\n * @returns {Promise<object[]>} List of objects containing the picked primitives.\n *\n * @exception {RuntimeError} Async Picking Request Timeout.\n */\nPicking.prototype.pickAsync = async function (\n  scene,\n  windowPosition,\n  width,\n  height,\n  limit = 1,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"windowPosition\", windowPosition);\n  //>>includeEnd('debug');\n\n  const { context, frameState, defaultView } = scene;\n  const { pickFramebuffer } = defaultView;\n  const drawingBufferRectangle = scratchRectangle;\n  pickBegin(scene, windowPosition, drawingBufferRectangle, width, height);\n  let pickedObjects;\n  if (context.webgl2) {\n    pickedObjects = pickFramebuffer.endAsync(\n      drawingBufferRectangle,\n      frameState,\n      limit,\n    ); // Promise<Object[]>\n  } else {\n    pickedObjects = pickFramebuffer.end(drawingBufferRectangle, limit); // Object[]\n    pickedObjects = Promise.resolve(pickedObjects); // Promise<Object[]> Wrap as Promise\n    oneTimeWarning(\n      \"picking-async-fallback\",\n      \"Fallback to synchronous picking because async operation requires WebGL2 context.\",\n    );\n  }\n  pickEnd(scene);\n  return pickedObjects;\n};\n\n/**\n * Returns a list of objects with a <code>primitive</code> property that contains the first (top) primitives\n * in the scene at a particular window coordinate. Other properties may potentially be set depending on the\n * type of primitive and may be used to further identify the picked object.\n * <p>\n * When a feature of a 3D Tiles tileset is picked, <code>pick</code> returns a {@link Cesium3DTileFeature} object.\n * </p>\n * @param {Scene} scene\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n * @param {number} [limit=1] If supplied, stop iterating after collecting this many objects.\n * @returns {object[]} List of objects containing the picked primitives.\n *\n */\nPicking.prototype.pick = function (\n  scene,\n  windowPosition,\n  width,\n  height,\n  limit = 1,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"windowPosition\", windowPosition);\n  //>>includeEnd('debug');\n\n  const { defaultView } = scene;\n  const { pickFramebuffer } = defaultView;\n  const drawingBufferRectangle = scratchRectangle;\n  pickBegin(scene, windowPosition, drawingBufferRectangle, width, height);\n  const pickedObjects = pickFramebuffer.end(drawingBufferRectangle, limit); // Object[]\n  pickEnd(scene);\n  return pickedObjects;\n};\n\n/**\n * Returns an object with information about the voxel sample rendered at\n * a particular window coordinate. Returns <code>undefined</code> if there is no\n * voxel at that position.\n *\n * @param {Scene} scene\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n * @returns {object|undefined} Object containing the picked primitive.\n */\nPicking.prototype.pickVoxelCoordinate = function (\n  scene,\n  windowPosition,\n  width,\n  height,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"windowPosition\", windowPosition);\n  //>>includeEnd('debug');\n\n  const { context, frameState, defaultView } = scene;\n  const { viewport, pickFramebuffer } = defaultView;\n\n  scene.view = defaultView;\n\n  viewport.x = 0;\n  viewport.y = 0;\n  viewport.width = context.drawingBufferWidth;\n  viewport.height = context.drawingBufferHeight;\n\n  let passState = defaultView.passState;\n  passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n  const drawingBufferPosition = SceneTransforms.transformWindowToDrawingBuffer(\n    scene,\n    windowPosition,\n    scratchPosition,\n  );\n  const drawingBufferRectangle = computePickingDrawingBufferRectangle(\n    context.drawingBufferHeight,\n    drawingBufferPosition,\n    width,\n    height,\n    scratchRectangle,\n  );\n\n  scene.jobScheduler.disableThisFrame();\n\n  scene.updateFrameState();\n  frameState.cullingVolume = getPickCullingVolume(\n    scene,\n    drawingBufferPosition,\n    drawingBufferRectangle.width,\n    drawingBufferRectangle.height,\n    viewport,\n  );\n  frameState.invertClassification = false;\n  frameState.passes.pickVoxel = true;\n  frameState.tilesetPassState = pickTilesetPassState;\n\n  context.uniformState.update(frameState);\n\n  scene.updateEnvironment();\n\n  passState = pickFramebuffer.begin(drawingBufferRectangle, viewport);\n\n  scene.updateAndExecuteCommands(passState, scratchColorZero);\n  scene.resolveFramebuffers(passState);\n\n  const voxelInfo = pickFramebuffer.readCenterPixel(drawingBufferRectangle);\n  context.endFrame();\n  return voxelInfo;\n};\n\n/**\n * Pick a metadata value at the given window position.\n *\n * The given `pickedMetadataInfo` defines the metadata value that is\n * supposed to be picked.\n *\n * The return type will depend on the type of the metadata property\n * that is picked. Given the current limitations of the types that\n * are supported for metadata picking, the return type will be one\n * of the following:\n *\n * - For `SCALAR`, the return type will be a `number`\n * - For `SCALAR` arrays, the return type will be a `number[]`\n * - For `VEC2`, the return type will be a `Cartesian2`\n * - For `VEC3`, the return type will be a `Cartesian3`\n * - For `VEC4`, the return type will be a `Cartesian4`\n *\n * Future implementations may additionally return `string`- or\n * `boolean` types, and `MATn` values as `MatrixN` objects,\n * and arrays of the respective types.\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {PickedMetadataInfo} pickedMetadataInfo Information about the picked metadata.\n * @returns {MetadataValue|undefined} The metadata value, or `undefined`\n * when no matching metadata value could be picked at the given position\n *\n * @private\n */\nPicking.prototype.pickMetadata = function (\n  scene,\n  windowPosition,\n  pickedMetadataInfo,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"windowPosition\", windowPosition);\n  Check.typeOf.object(\"pickedMetadataInfo\", pickedMetadataInfo);\n  //>>includeEnd('debug');\n\n  const { context, frameState, defaultView } = scene;\n  const { viewport, pickFramebuffer } = defaultView;\n\n  scene.view = defaultView;\n\n  viewport.x = 0;\n  viewport.y = 0;\n  viewport.width = context.drawingBufferWidth;\n  viewport.height = context.drawingBufferHeight;\n\n  let passState = defaultView.passState;\n  passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n  const drawingBufferPosition = SceneTransforms.transformWindowToDrawingBuffer(\n    scene,\n    windowPosition,\n    scratchPosition,\n  );\n  const drawingBufferRectangle = computePickingDrawingBufferRectangle(\n    context.drawingBufferHeight,\n    drawingBufferPosition,\n    1.0,\n    1.0,\n    scratchRectangle,\n  );\n\n  scene.jobScheduler.disableThisFrame();\n\n  scene.updateFrameState();\n  frameState.cullingVolume = getPickCullingVolume(\n    scene,\n    drawingBufferPosition,\n    drawingBufferRectangle.width,\n    drawingBufferRectangle.height,\n    viewport,\n  );\n  frameState.invertClassification = false;\n\n  frameState.passes.pick = true;\n  frameState.tilesetPassState = pickTilesetPassState;\n\n  // Insert the information about the picked metadata property\n  // into the frame state, so that the `Scene.updateDerivedCommands`\n  // call can detect any changes in the picked metadata description,\n  // and update the derived commands for the new picked metadata\n  // property\n  frameState.pickingMetadata = true;\n  frameState.pickedMetadataInfo = pickedMetadataInfo;\n  context.uniformState.update(frameState);\n\n  scene.updateEnvironment();\n\n  passState = pickFramebuffer.begin(drawingBufferRectangle, viewport);\n\n  scene.updateAndExecuteCommands(passState, scratchColorZero);\n\n  // When OIT is enabled, then the resolveFrameBuffers function\n  // will juggle around several frame buffers, and eventually use\n  // the \"environmentState.originalFramebuffer\" instead of the\n  // picking frame buffer. Skipping a million questions, just\n  // switch OIT off here:\n  const oldOIT = scene._environmentState.useOIT;\n  scene._environmentState.useOIT = false;\n  scene.resolveFramebuffers(passState);\n  scene._environmentState.useOIT = oldOIT;\n\n  const rawMetadataPixel = pickFramebuffer.readCenterPixel(\n    drawingBufferRectangle,\n  );\n  context.endFrame();\n\n  frameState.pickingMetadata = false;\n\n  const metadataValue = MetadataPicking.decodeMetadataValues(\n    pickedMetadataInfo.classProperty,\n    pickedMetadataInfo.metadataProperty,\n    rawMetadataPixel,\n  );\n\n  return metadataValue;\n};\n\n/**\n * @typedef {object} PickedMetadataInfo\n *\n * Information about metadata that is supposed to be picked\n *\n * @property {string|undefined} schemaId The optional ID of the metadata schema\n * @property {string} className The name of the metadata class\n * @property {string} propertyName The name of the metadata property\n * @property {MetadataClassProperty} classProperty The metadata class property\n */\n\nfunction renderTranslucentDepthForPick(scene, drawingBufferPosition) {\n  // PERFORMANCE_IDEA: render translucent only and merge with the previous frame\n  const { defaultView, context, frameState, environmentState } = scene;\n  const { viewport, pickDepthFramebuffer } = defaultView;\n\n  scene.view = defaultView;\n\n  viewport.x = 0;\n  viewport.y = 0;\n  viewport.width = context.drawingBufferWidth;\n  viewport.height = context.drawingBufferHeight;\n\n  let passState = defaultView.passState;\n  passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n  scene.clearPasses(frameState.passes);\n  frameState.passes.pick = true;\n  frameState.passes.depth = true;\n  frameState.cullingVolume = getPickCullingVolume(\n    scene,\n    drawingBufferPosition,\n    1,\n    1,\n    viewport,\n  );\n  frameState.tilesetPassState = pickTilesetPassState;\n\n  scene.updateEnvironment();\n  environmentState.renderTranslucentDepthForPick = true;\n  passState = pickDepthFramebuffer.update(\n    context,\n    drawingBufferPosition,\n    viewport,\n  );\n\n  scene.updateAndExecuteCommands(passState, scratchColorZero);\n  scene.resolveFramebuffers(passState);\n\n  context.endFrame();\n}\n\nconst scratchPerspectiveFrustum = new PerspectiveFrustum();\nconst scratchPerspectiveOffCenterFrustum = new PerspectiveOffCenterFrustum();\nconst scratchOrthographicFrustum = new OrthographicFrustum();\nconst scratchOrthographicOffCenterFrustum = new OrthographicOffCenterFrustum();\n\nPicking.prototype.pickPositionWorldCoordinates = function (\n  scene,\n  windowPosition,\n  result,\n) {\n  if (!scene.useDepthPicking) {\n    return undefined;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"windowPosition\", windowPosition);\n  if (!scene.context.depthTexture) {\n    throw new DeveloperError(\n      \"Picking from the depth buffer is not supported. Check pickPositionSupported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const cacheKey = windowPosition.toString();\n\n  if (this._pickPositionCacheDirty) {\n    this._pickPositionCache = {};\n    this._pickPositionCacheDirty = false;\n  } else if (this._pickPositionCache.hasOwnProperty(cacheKey)) {\n    return Cartesian3.clone(this._pickPositionCache[cacheKey], result);\n  }\n\n  const { context, frameState, camera, defaultView } = scene;\n  const { uniformState } = context;\n\n  scene.view = defaultView;\n\n  const drawingBufferPosition = SceneTransforms.transformWindowToDrawingBuffer(\n    scene,\n    windowPosition,\n    scratchPosition,\n  );\n  if (scene.pickTranslucentDepth) {\n    renderTranslucentDepthForPick(scene, drawingBufferPosition);\n  } else {\n    scene.updateFrameState();\n    uniformState.update(frameState);\n    scene.updateEnvironment();\n  }\n  drawingBufferPosition.y = scene.drawingBufferHeight - drawingBufferPosition.y;\n\n  // Create a working frustum from the original camera frustum.\n  let frustum;\n  if (defined(camera.frustum.fov)) {\n    frustum = camera.frustum.clone(scratchPerspectiveFrustum);\n  } else if (defined(camera.frustum.infiniteProjectionMatrix)) {\n    frustum = camera.frustum.clone(scratchPerspectiveOffCenterFrustum);\n  } else if (defined(camera.frustum.width)) {\n    frustum = camera.frustum.clone(scratchOrthographicFrustum);\n  } else {\n    frustum = camera.frustum.clone(scratchOrthographicOffCenterFrustum);\n  }\n\n  const { frustumCommandsList } = defaultView;\n  const numFrustums = frustumCommandsList.length;\n  for (let i = 0; i < numFrustums; ++i) {\n    const pickDepth = this.getPickDepth(scene, i);\n    const depth = pickDepth.getDepth(\n      context,\n      drawingBufferPosition.x,\n      drawingBufferPosition.y,\n    );\n    if (!defined(depth)) {\n      continue;\n    }\n    if (depth > 0.0 && depth < 1.0) {\n      const renderedFrustum = frustumCommandsList[i];\n      let height2D;\n      if (scene.mode === SceneMode.SCENE2D) {\n        height2D = camera.position.z;\n        camera.position.z = height2D - renderedFrustum.near + 1.0;\n        frustum.far = Math.max(1.0, renderedFrustum.far - renderedFrustum.near);\n        frustum.near = 1.0;\n        uniformState.update(frameState);\n        uniformState.updateFrustum(frustum);\n      } else {\n        frustum.near =\n          renderedFrustum.near *\n          (i !== 0 ? scene.opaqueFrustumNearOffset : 1.0);\n        frustum.far = renderedFrustum.far;\n        uniformState.updateFrustum(frustum);\n      }\n\n      result = SceneTransforms.drawingBufferToWorldCoordinates(\n        scene,\n        drawingBufferPosition,\n        depth,\n        result,\n      );\n\n      if (scene.mode === SceneMode.SCENE2D) {\n        camera.position.z = height2D;\n        uniformState.update(frameState);\n      }\n\n      this._pickPositionCache[cacheKey] = Cartesian3.clone(result);\n      return result;\n    }\n  }\n\n  this._pickPositionCache[cacheKey] = undefined;\n  return undefined;\n};\n\nconst scratchPickPositionCartographic = new Cartographic();\n\nPicking.prototype.pickPosition = function (scene, windowPosition, result) {\n  result = this.pickPositionWorldCoordinates(scene, windowPosition, result);\n  if (defined(result) && scene.mode !== SceneMode.SCENE3D) {\n    Cartesian3.fromElements(result.y, result.z, result.x, result);\n\n    const projection = scene.mapProjection;\n    const ellipsoid = projection.ellipsoid;\n\n    const cart = projection.unproject(result, scratchPickPositionCartographic);\n    ellipsoid.cartographicToCartesian(cart, result);\n  }\n\n  return result;\n};\n\n/**\n * @param {object[]} pickedResults the results from the pickCallback\n * @param {number} limit If supplied, stop drilling after collecting this many picks.\n * @param {object[]} results\n * @param {object[]} pickedPrimitives\n * @param {object[]} pickedAttributes\n * @param {object[]} pickedFeatures\n * @returns {boolean} whether picking should end\n */\nfunction addDrillPickedResults(\n  pickedResults,\n  limit,\n  results,\n  pickedPrimitives,\n  pickedAttributes,\n  pickedFeatures,\n) {\n  for (const pickedResult of pickedResults) {\n    const object = pickedResult.object;\n    const position = pickedResult.position;\n    const exclude = pickedResult.exclude;\n\n    if (defined(position) && !defined(object)) {\n      results.push(pickedResult);\n      return true;\n    }\n\n    if (!defined(object) || !defined(object.primitive)) {\n      return true;\n    }\n\n    if (!exclude) {\n      results.push(pickedResult);\n      if (results.length >= limit) {\n        return true;\n      }\n    }\n\n    const primitive = object.primitive;\n    let hasShowAttribute = false;\n\n    // If the picked object has a show attribute, use it.\n    if (typeof primitive.getGeometryInstanceAttributes === \"function\") {\n      if (defined(object.id)) {\n        const attributes = primitive.getGeometryInstanceAttributes(object.id);\n        if (defined(attributes) && defined(attributes.show)) {\n          hasShowAttribute = true;\n          attributes.show = ShowGeometryInstanceAttribute.toValue(\n            false,\n            attributes.show,\n          );\n          pickedAttributes.push(attributes);\n        }\n      }\n    }\n\n    if (object instanceof Cesium3DTileFeature) {\n      hasShowAttribute = true;\n      object.show = false;\n      pickedFeatures.push(object);\n    }\n\n    // Otherwise, hide the entire primitive\n    if (!hasShowAttribute) {\n      primitive.show = false;\n      pickedPrimitives.push(primitive);\n    }\n  }\n}\n\n/**\n * Drill pick by repeatedly calling a given `pickCallback`, each time stripping away the previously picked objects.\n * @param {function(number): object[]} pickCallback Pick callback to execute each iteration\n * @param {number} [limit=Number.MAX_VALUE] If supplied, stop drilling after collecting this many picks\n * @returns {object[]} List of picked results\n */\nfunction drillPick(pickCallback, limit) {\n  // PERFORMANCE_IDEA: This function calls each primitive's update for each pass. Instead\n  // we could update the primitive once, and then just execute their commands for each pass,\n  // and cull commands for picked primitives.  e.g., base on the command's owner.\n  const results = [];\n  const pickedPrimitives = [];\n  const pickedAttributes = [];\n  const pickedFeatures = [];\n  if (!defined(limit)) {\n    limit = Number.MAX_VALUE;\n  }\n\n  let pickedResults = pickCallback(limit);\n  while (defined(pickedResults) && pickedResults.length > 0) {\n    const complete = addDrillPickedResults(\n      pickedResults,\n      limit,\n      results,\n      pickedPrimitives,\n      pickedAttributes,\n      pickedFeatures,\n    );\n    if (complete) {\n      break;\n    }\n    pickedResults = pickCallback(limit - results.length);\n  }\n\n  // Unhide everything we hid while drill picking\n  for (let i = 0; i < pickedPrimitives.length; ++i) {\n    pickedPrimitives[i].show = true;\n  }\n\n  for (let i = 0; i < pickedAttributes.length; ++i) {\n    const attributes = pickedAttributes[i];\n    attributes.show = ShowGeometryInstanceAttribute.toValue(\n      true,\n      attributes.show,\n    );\n  }\n\n  for (let i = 0; i < pickedFeatures.length; ++i) {\n    pickedFeatures[i].show = true;\n  }\n\n  return results;\n}\n\nPicking.prototype.drillPick = function (\n  scene,\n  windowPosition,\n  limit,\n  width,\n  height,\n) {\n  const pickCallback = (limit) => {\n    const pickedObjects = this.pick(\n      scene,\n      windowPosition,\n      width,\n      height,\n      limit,\n    );\n    return pickedObjects.map((object) => ({\n      object: object,\n      position: undefined,\n      exclude: false,\n    }));\n  };\n  const objects = drillPick(pickCallback, limit);\n  return objects.map((element) => element.object);\n};\n\nconst scratchRight = new Cartesian3();\nconst scratchUp = new Cartesian3();\n\nfunction MostDetailedRayPick(ray, width, tilesets) {\n  this.ray = ray;\n  this.width = width;\n  this.tilesets = tilesets;\n  this.ready = false;\n  const pick = this;\n  this.promise = new Promise((resolve) => {\n    pick._completePick = () => {\n      resolve();\n    };\n  });\n}\n\nfunction updateOffscreenCameraFromRay(picking, ray, width, camera) {\n  const direction = ray.direction;\n  const orthogonalAxis = Cartesian3.mostOrthogonalAxis(direction, scratchRight);\n  const right = Cartesian3.cross(direction, orthogonalAxis, scratchRight);\n  const up = Cartesian3.cross(direction, right, scratchUp);\n\n  camera.position = ray.origin;\n  camera.direction = direction;\n  camera.up = up;\n  camera.right = right;\n\n  camera.frustum.width = width ?? offscreenDefaultWidth;\n  return camera.frustum.computeCullingVolume(\n    camera.positionWC,\n    camera.directionWC,\n    camera.upWC,\n  );\n}\n\nfunction updateMostDetailedRayPick(picking, scene, rayPick) {\n  const frameState = scene.frameState;\n\n  const { ray, width, tilesets } = rayPick;\n\n  const camera = picking._pickOffscreenView.camera;\n  const cullingVolume = updateOffscreenCameraFromRay(\n    picking,\n    ray,\n    width,\n    camera,\n  );\n\n  const tilesetPassState = mostDetailedPreloadTilesetPassState;\n  tilesetPassState.camera = camera;\n  tilesetPassState.cullingVolume = cullingVolume;\n\n  let ready = true;\n  const tilesetsLength = tilesets.length;\n  for (let i = 0; i < tilesetsLength; ++i) {\n    const tileset = tilesets[i];\n    if (tileset.show && scene.primitives.contains(tileset)) {\n      // Only update tilesets that are still contained in the scene's primitive collection and are still visible\n      // Update tilesets continually until all tilesets are ready. This way tiles are never removed from the cache.\n      tileset.updateForPass(frameState, tilesetPassState);\n      ready = ready && tilesetPassState.ready;\n    }\n  }\n\n  if (ready) {\n    rayPick._completePick();\n  }\n\n  return ready;\n}\n\nPicking.prototype.updateMostDetailedRayPicks = function (scene) {\n  // Modifies array during iteration\n  const rayPicks = this._mostDetailedRayPicks;\n  for (let i = 0; i < rayPicks.length; ++i) {\n    if (updateMostDetailedRayPick(this, scene, rayPicks[i])) {\n      rayPicks.splice(i--, 1);\n    }\n  }\n};\n\nfunction getTilesets(primitives, objectsToExclude, tilesets) {\n  for (let i = 0; i < primitives.length; ++i) {\n    const primitive = primitives.get(i);\n    if (primitive.show) {\n      if (defined(primitive.isCesium3DTileset)) {\n        if (\n          !defined(objectsToExclude) ||\n          objectsToExclude.indexOf(primitive) === -1\n        ) {\n          tilesets.push(primitive);\n        }\n      } else if (primitive instanceof PrimitiveCollection) {\n        getTilesets(primitive, objectsToExclude, tilesets);\n      }\n    }\n  }\n}\n\n/**\n * @private\n * @param {Picking} picking\n * @param {Scene} scene\n * @param {Ray} ray\n * @param {object[] | undefined} objectsToExclude\n * @param {number | undefined} width\n * @param {Function} callback\n * @returns {Promise<Cartesian3 | undefined>}\n */\nfunction launchMostDetailedRayPick(\n  picking,\n  scene,\n  ray,\n  objectsToExclude,\n  width,\n  callback,\n) {\n  const tilesets = [];\n  getTilesets(scene.primitives, objectsToExclude, tilesets);\n  if (tilesets.length === 0) {\n    return Promise.resolve(callback());\n  }\n\n  const rayPick = new MostDetailedRayPick(ray, width, tilesets);\n  picking._mostDetailedRayPicks.push(rayPick);\n  return rayPick.promise.then(function () {\n    return callback();\n  });\n}\n\nfunction isExcluded(object, objectsToExclude) {\n  if (\n    !defined(object) ||\n    !defined(objectsToExclude) ||\n    objectsToExclude.length === 0\n  ) {\n    return false;\n  }\n  return (\n    objectsToExclude.indexOf(object) > -1 ||\n    objectsToExclude.indexOf(object.primitive) > -1 ||\n    objectsToExclude.indexOf(object.id) > -1\n  );\n}\n\nfunction getRayIntersection(\n  picking,\n  scene,\n  ray,\n  objectsToExclude,\n  width,\n  requirePosition,\n  mostDetailed,\n) {\n  const { context, frameState } = scene;\n  const uniformState = context.uniformState;\n\n  const view = picking._pickOffscreenView;\n  scene.view = view;\n\n  updateOffscreenCameraFromRay(picking, ray, width, view.camera);\n\n  const drawingBufferRectangle = BoundingRectangle.clone(\n    view.viewport,\n    scratchRectangle,\n  );\n\n  const passState = view.pickFramebuffer.begin(\n    drawingBufferRectangle,\n    view.viewport,\n  );\n\n  scene.jobScheduler.disableThisFrame();\n\n  scene.updateFrameState();\n  frameState.invertClassification = false;\n  frameState.passes.pick = true;\n  frameState.passes.offscreen = true;\n\n  if (mostDetailed) {\n    frameState.tilesetPassState = mostDetailedPickTilesetPassState;\n  } else {\n    frameState.tilesetPassState = pickTilesetPassState;\n  }\n\n  uniformState.update(frameState);\n\n  scene.updateEnvironment();\n  scene.updateAndExecuteCommands(passState, scratchColorZero);\n  scene.resolveFramebuffers(passState);\n\n  let position;\n  // Picking one object, result is either [object] or []\n  const object = view.pickFramebuffer.end(drawingBufferRectangle, 1)[0];\n\n  if (scene.context.depthTexture) {\n    const { frustumCommandsList } = view;\n    const numFrustums = frustumCommandsList.length;\n    for (let i = 0; i < numFrustums; ++i) {\n      const pickDepth = picking.getPickDepth(scene, i);\n      const depth = pickDepth.getDepth(context, 0, 0);\n      if (!defined(depth)) {\n        continue;\n      }\n      if (depth > 0.0 && depth < 1.0) {\n        const renderedFrustum = frustumCommandsList[i];\n        const near =\n          renderedFrustum.near *\n          (i !== 0 ? scene.opaqueFrustumNearOffset : 1.0);\n        const far = renderedFrustum.far;\n        const distance = near + depth * (far - near);\n        position = Ray.getPoint(ray, distance);\n        break;\n      }\n    }\n  }\n\n  scene.view = scene.defaultView;\n  context.endFrame();\n\n  if (defined(object) || defined(position)) {\n    return {\n      object: object,\n      position: position,\n      exclude:\n        (!defined(position) && requirePosition) ||\n        isExcluded(object, objectsToExclude),\n    };\n  }\n}\n\nfunction drillPickFromRay(\n  picking,\n  scene,\n  ray,\n  limit,\n  objectsToExclude,\n  width,\n  requirePosition,\n  mostDetailed,\n) {\n  const pickCallback = function () {\n    const pickResult = getRayIntersection(\n      picking,\n      scene,\n      ray,\n      objectsToExclude,\n      width,\n      requirePosition,\n      mostDetailed,\n    );\n    return pickResult ? [pickResult] : undefined;\n  };\n  return drillPick(pickCallback, limit);\n}\n\nfunction pickFromRay(\n  picking,\n  scene,\n  ray,\n  objectsToExclude,\n  width,\n  requirePosition,\n  mostDetailed,\n) {\n  // Use drillPickFromRay rather than getRayIntersection directly to select the first non-excluded object\n  const results = drillPickFromRay(\n    picking,\n    scene,\n    ray,\n    1,\n    objectsToExclude,\n    width,\n    requirePosition,\n    mostDetailed,\n  );\n  if (results.length > 0) {\n    return results[0];\n  }\n}\n\nfunction deferPromiseUntilPostRender(scene, promise) {\n  // Resolve promise after scene's postRender in case entities are created when the promise resolves.\n  // Entities can't be created between viewer._onTick and viewer._postRender.\n  return new Promise((resolve, reject) => {\n    promise\n      .then(function (result) {\n        const removeCallback = scene.postRender.addEventListener(function () {\n          removeCallback();\n          resolve(result);\n        });\n        scene.requestRender();\n      })\n      .catch(function (error) {\n        reject(error);\n      });\n  });\n}\n\nPicking.prototype.pickFromRay = function (scene, ray, objectsToExclude, width) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"ray\", ray);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\n      \"Ray intersections are only supported in 3D mode.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return pickFromRay(this, scene, ray, objectsToExclude, width, false, false);\n};\n\nPicking.prototype.drillPickFromRay = function (\n  scene,\n  ray,\n  limit,\n  objectsToExclude,\n  width,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"ray\", ray);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\n      \"Ray intersections are only supported in 3D mode.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  return drillPickFromRay(\n    this,\n    scene,\n    ray,\n    limit,\n    objectsToExclude,\n    width,\n    false,\n    false,\n  );\n};\n\nPicking.prototype.pickFromRayMostDetailed = function (\n  scene,\n  ray,\n  objectsToExclude,\n  width,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"ray\", ray);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\n      \"Ray intersections are only supported in 3D mode.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const that = this;\n  ray = Ray.clone(ray);\n  objectsToExclude = defined(objectsToExclude)\n    ? objectsToExclude.slice()\n    : objectsToExclude;\n  return deferPromiseUntilPostRender(\n    scene,\n    launchMostDetailedRayPick(\n      that,\n      scene,\n      ray,\n      objectsToExclude,\n      width,\n      function () {\n        return pickFromRay(\n          that,\n          scene,\n          ray,\n          objectsToExclude,\n          width,\n          false,\n          true,\n        );\n      },\n    ),\n  );\n};\n\nPicking.prototype.drillPickFromRayMostDetailed = function (\n  scene,\n  ray,\n  limit,\n  objectsToExclude,\n  width,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"ray\", ray);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\n      \"Ray intersections are only supported in 3D mode.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const that = this;\n  ray = Ray.clone(ray);\n  objectsToExclude = defined(objectsToExclude)\n    ? objectsToExclude.slice()\n    : objectsToExclude;\n  return deferPromiseUntilPostRender(\n    scene,\n    launchMostDetailedRayPick(\n      that,\n      scene,\n      ray,\n      objectsToExclude,\n      width,\n      function () {\n        return drillPickFromRay(\n          that,\n          scene,\n          ray,\n          limit,\n          objectsToExclude,\n          width,\n          false,\n          true,\n        );\n      },\n    ),\n  );\n};\n\nconst scratchSurfacePosition = new Cartesian3();\nconst scratchSurfaceNormal = new Cartesian3();\nconst scratchSurfaceRay = new Ray();\nconst scratchCartographic = new Cartographic();\n\n/**\n * @private\n * @param {Scene} scene\n * @param {Cartographic} cartographic\n * @returns {Ray}\n */\nfunction getRayForSampleHeight(scene, cartographic) {\n  const ellipsoid = scene.ellipsoid;\n  const height = ApproximateTerrainHeights._defaultMaxTerrainHeight;\n  const surfaceNormal = ellipsoid.geodeticSurfaceNormalCartographic(\n    cartographic,\n    scratchSurfaceNormal,\n  );\n  const surfacePosition = Cartographic.toCartesian(\n    cartographic,\n    ellipsoid,\n    scratchSurfacePosition,\n  );\n  const surfaceRay = scratchSurfaceRay;\n  surfaceRay.origin = surfacePosition;\n  surfaceRay.direction = surfaceNormal;\n  const ray = new Ray();\n  Ray.getPoint(surfaceRay, height, ray.origin);\n  Cartesian3.negate(surfaceNormal, ray.direction);\n  return ray;\n}\n\n/**\n * @private\n * @param {Scene} scene\n * @param {Cartesian3} cartesian\n * @returns {Ray}\n */\nfunction getRayForClampToHeight(scene, cartesian) {\n  const ellipsoid = scene.ellipsoid;\n  const cartographic = Cartographic.fromCartesian(\n    cartesian,\n    ellipsoid,\n    scratchCartographic,\n  );\n  return getRayForSampleHeight(scene, cartographic);\n}\n\nfunction getHeightFromCartesian(scene, cartesian) {\n  const ellipsoid = scene.ellipsoid;\n  const cartographic = Cartographic.fromCartesian(\n    cartesian,\n    ellipsoid,\n    scratchCartographic,\n  );\n  return cartographic.height;\n}\n\nfunction sampleHeightMostDetailed(\n  picking,\n  scene,\n  cartographic,\n  objectsToExclude,\n  width,\n) {\n  const ray = getRayForSampleHeight(scene, cartographic);\n  return launchMostDetailedRayPick(\n    picking,\n    scene,\n    ray,\n    objectsToExclude,\n    width,\n    function () {\n      const pickResult = pickFromRay(\n        picking,\n        scene,\n        ray,\n        objectsToExclude,\n        width,\n        true,\n        true,\n      );\n      if (defined(pickResult)) {\n        return getHeightFromCartesian(scene, pickResult.position);\n      }\n    },\n  );\n}\n\n/**\n * @private\n * @param {Picking} picking\n * @param {Scene} scene\n * @param {Cartesian3} cartesian\n * @param {object[]} [objectsToExclude]\n * @param {number} [width]\n * @param {Cartesian3} [result]\n * @returns {Promise<Cartesian3 | undefined>}\n */\nfunction clampToHeightMostDetailed(\n  picking,\n  scene,\n  cartesian,\n  objectsToExclude,\n  width,\n  result,\n) {\n  const ray = getRayForClampToHeight(scene, cartesian);\n  return launchMostDetailedRayPick(\n    picking,\n    scene,\n    ray,\n    objectsToExclude,\n    width,\n    function () {\n      const pickResult = pickFromRay(\n        picking,\n        scene,\n        ray,\n        objectsToExclude,\n        width,\n        true,\n        true,\n      );\n      if (defined(pickResult)) {\n        return Cartesian3.clone(pickResult.position, result);\n      }\n    },\n  );\n}\n\nPicking.prototype.sampleHeight = function (\n  scene,\n  position,\n  objectsToExclude,\n  width,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"position\", position);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\"sampleHeight is only supported in 3D mode.\");\n  }\n  if (!scene.sampleHeightSupported) {\n    throw new DeveloperError(\n      \"sampleHeight requires depth texture support. Check sampleHeightSupported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const ray = getRayForSampleHeight(scene, position);\n  const pickResult = pickFromRay(\n    this,\n    scene,\n    ray,\n    objectsToExclude,\n    width,\n    true,\n    false,\n  );\n  if (defined(pickResult)) {\n    return getHeightFromCartesian(scene, pickResult.position);\n  }\n};\n\nPicking.prototype.clampToHeight = function (\n  scene,\n  cartesian,\n  objectsToExclude,\n  width,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesian\", cartesian);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\"clampToHeight is only supported in 3D mode.\");\n  }\n  if (!scene.clampToHeightSupported) {\n    throw new DeveloperError(\n      \"clampToHeight requires depth texture support. Check clampToHeightSupported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const ray = getRayForClampToHeight(scene, cartesian);\n  const pickResult = pickFromRay(\n    this,\n    scene,\n    ray,\n    objectsToExclude,\n    width,\n    true,\n    false,\n  );\n  if (defined(pickResult)) {\n    return Cartesian3.clone(pickResult.position, result);\n  }\n};\n\nPicking.prototype.sampleHeightMostDetailed = function (\n  scene,\n  positions,\n  objectsToExclude,\n  width,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"positions\", positions);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\n      \"sampleHeightMostDetailed is only supported in 3D mode.\",\n    );\n  }\n  if (!scene.sampleHeightSupported) {\n    throw new DeveloperError(\n      \"sampleHeightMostDetailed requires depth texture support. Check sampleHeightSupported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  objectsToExclude = defined(objectsToExclude)\n    ? objectsToExclude.slice()\n    : objectsToExclude;\n  const length = positions.length;\n  const promises = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    promises[i] = sampleHeightMostDetailed(\n      this,\n      scene,\n      positions[i],\n      objectsToExclude,\n      width,\n    );\n  }\n  return deferPromiseUntilPostRender(\n    scene,\n    Promise.all(promises).then(function (heights) {\n      const length = heights.length;\n      for (let i = 0; i < length; ++i) {\n        positions[i].height = heights[i];\n      }\n      return positions;\n    }),\n  );\n};\n\n/**\n * @private\n * @param {Scene} scene\n * @param {Cartesian3[]} cartesians\n * @param {object[]} [objectsToExclude]\n * @param {number} [width]\n * @returns {Promise<Array<Cartesian3 | undefined>>}\n */\nPicking.prototype.clampToHeightMostDetailed = function (\n  scene,\n  cartesians,\n  objectsToExclude,\n  width,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"cartesians\", cartesians);\n  if (scene.mode !== SceneMode.SCENE3D) {\n    throw new DeveloperError(\n      \"clampToHeightMostDetailed is only supported in 3D mode.\",\n    );\n  }\n  if (!scene.clampToHeightSupported) {\n    throw new DeveloperError(\n      \"clampToHeightMostDetailed requires depth texture support. Check clampToHeightSupported.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  objectsToExclude = defined(objectsToExclude)\n    ? objectsToExclude.slice()\n    : objectsToExclude;\n  const length = cartesians.length;\n  const promises = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    promises[i] = clampToHeightMostDetailed(\n      this,\n      scene,\n      cartesians[i],\n      objectsToExclude,\n      width,\n      cartesians[i],\n    );\n  }\n  return deferPromiseUntilPostRender(\n    scene,\n    Promise.all(promises).then(function (clampedCartesians) {\n      const length = clampedCartesians.length;\n      for (let i = 0; i < length; ++i) {\n        cartesians[i] = clampedCartesians[i];\n      }\n      return cartesians;\n    }),\n  );\n};\n\nPicking.prototype.destroy = function () {\n  this._pickOffscreenView =\n    this._pickOffscreenView && this._pickOffscreenView.destroy();\n};\nexport default Picking;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport AttributeType from \"./AttributeType.js\";\nimport Cesium3DTileFeatureTable from \"./Cesium3DTileFeatureTable.js\";\nimport VertexAttributeSemantic from \"./VertexAttributeSemantic.js\";\n\n/**\n * Handles parsing of a Point Cloud\n *\n * @namespace PntsParser\n * @private\n */\nconst PntsParser = {};\n\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\n/**\n * Parses the contents of a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/PointCloud|Point Cloud}.\n *\n * @private\n *\n * @param {*} arrayBuffer The array buffer containing the pnts\n * @param {*} [byteOffset=0] The byte offset of the beginning of the pnts in the array buffer\n * @returns {object} An object containing a parsed representation of the point cloud\n */\nPntsParser.parse = function (arrayBuffer, byteOffset) {\n  byteOffset = byteOffset ?? 0;\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"arrayBuffer\", arrayBuffer);\n  //>>includeEnd('debug');\n\n  const uint8Array = new Uint8Array(arrayBuffer);\n  const view = new DataView(arrayBuffer);\n  byteOffset += sizeOfUint32; // Skip magic\n\n  const version = view.getUint32(byteOffset, true);\n  if (version !== 1) {\n    throw new RuntimeError(\n      `Only Point Cloud tile version 1 is supported.  Version ${version} is not.`,\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  // Skip byteLength\n  byteOffset += sizeOfUint32;\n\n  const featureTableJsonByteLength = view.getUint32(byteOffset, true);\n  if (featureTableJsonByteLength === 0) {\n    throw new RuntimeError(\n      \"Feature table must have a byte length greater than zero\",\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  const featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const batchTableJsonByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const featureTableJson = getJsonFromTypedArray(\n    uint8Array,\n    byteOffset,\n    featureTableJsonByteLength,\n  );\n  byteOffset += featureTableJsonByteLength;\n\n  const featureTableBinary = new Uint8Array(\n    arrayBuffer,\n    byteOffset,\n    featureTableBinaryByteLength,\n  );\n  byteOffset += featureTableBinaryByteLength;\n\n  // Get the batch table JSON and binary\n  let batchTableJson;\n  let batchTableBinary;\n  if (batchTableJsonByteLength > 0) {\n    // Has a batch table JSON\n    batchTableJson = getJsonFromTypedArray(\n      uint8Array,\n      byteOffset,\n      batchTableJsonByteLength,\n    );\n    if (Object.keys(batchTableJson).length === 0) {\n      batchTableJson = undefined;\n    }\n    byteOffset += batchTableJsonByteLength;\n\n    if (batchTableBinaryByteLength > 0) {\n      // Has a batch table binary\n      batchTableBinary = new Uint8Array(\n        arrayBuffer,\n        byteOffset,\n        batchTableBinaryByteLength,\n      );\n      // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n      batchTableBinary = new Uint8Array(batchTableBinary);\n      byteOffset += batchTableBinaryByteLength;\n    }\n  }\n\n  const featureTable = new Cesium3DTileFeatureTable(\n    featureTableJson,\n    featureTableBinary,\n  );\n\n  const pointsLength = featureTable.getGlobalProperty(\"POINTS_LENGTH\");\n  featureTable.featuresLength = pointsLength;\n\n  if (!defined(pointsLength)) {\n    throw new RuntimeError(\n      \"Feature table global property: POINTS_LENGTH must be defined\",\n    );\n  }\n\n  let rtcCenter = featureTable.getGlobalProperty(\n    \"RTC_CENTER\",\n    ComponentDatatype.FLOAT,\n    3,\n  );\n  if (defined(rtcCenter)) {\n    rtcCenter = Cartesian3.unpack(rtcCenter);\n  }\n\n  // Start with the draco compressed properties and add in uncompressed\n  // properties.\n  const parsedContent = parseDracoProperties(featureTable, batchTableJson);\n  parsedContent.rtcCenter = rtcCenter;\n  parsedContent.pointsLength = pointsLength;\n\n  if (!parsedContent.hasPositions) {\n    const positions = parsePositions(featureTable);\n    parsedContent.positions = positions;\n    parsedContent.hasPositions =\n      parsedContent.hasPositions || defined(positions);\n  }\n\n  if (!parsedContent.hasPositions) {\n    throw new RuntimeError(\n      \"Either POSITION or POSITION_QUANTIZED must be defined.\",\n    );\n  }\n\n  if (!parsedContent.hasNormals) {\n    const normals = parseNormals(featureTable);\n    parsedContent.normals = normals;\n    parsedContent.hasNormals = parsedContent.hasNormals || defined(normals);\n  }\n\n  if (!parsedContent.hasColors) {\n    const colors = parseColors(featureTable);\n    parsedContent.colors = colors;\n    parsedContent.hasColors = parsedContent.hasColors || defined(colors);\n    parsedContent.hasConstantColor = defined(parsedContent.constantColor);\n    parsedContent.isTranslucent = defined(colors) && colors.isTranslucent;\n  }\n\n  if (!parsedContent.hasBatchIds) {\n    const batchIds = parseBatchIds(featureTable);\n    parsedContent.batchIds = batchIds;\n    parsedContent.hasBatchIds = parsedContent.hasBatchIds || defined(batchIds);\n  }\n\n  if (parsedContent.hasBatchIds) {\n    const batchLength = featureTable.getGlobalProperty(\"BATCH_LENGTH\");\n    if (!defined(batchLength)) {\n      throw new RuntimeError(\n        \"Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.\",\n      );\n    }\n    parsedContent.batchLength = batchLength;\n  }\n\n  if (defined(batchTableJson) || defined(batchTableBinary)) {\n    parsedContent.batchTableJson = batchTableJson;\n    parsedContent.batchTableBinary = batchTableBinary;\n  }\n\n  // Handle the case that binary body references are contained in the\n  // batch table without a batch table binary being present\n  removeInvalidBinaryBodyReferences(parsedContent);\n\n  return parsedContent;\n};\n\n/**\n * Remove all invalid binary body references from the batch table\n * JSON of the given parsed content.\n *\n * This is a workaround for gracefully handling the invalid PNTS\n * files that may have been created by the point cloud tiler.\n * See https://github.com/CesiumGS/cesium/issues/12872\n *\n * When the batch table JSON is undefined, nothing will be done.\n * When the batch table binary is defined, nothing will be done\n * (assuming that any binary body references are valid - this is\n * not checked here).\n *\n * Otherwise, this will remove all binary body references from the\n * batch table JSON that are not resolved from draco via the\n * `parsedContent.draco.batchTableProperties`.\n *\n * If any (invalid) binary body reference is found (and removed),\n * a one-time warning will be printed.\n *\n * @param {object} parsedContent The parsed content\n */\nfunction removeInvalidBinaryBodyReferences(parsedContent) {\n  const batchTableJson = parsedContent.batchTableJson;\n  if (!defined(batchTableJson)) {\n    return;\n  }\n  const batchTableBinary = parsedContent.batchTableBinary;\n  if (defined(batchTableBinary)) {\n    return;\n  }\n  const dracoBatchTablePropertyNames = Object.keys(\n    parsedContent.draco?.batchTableProperties ?? {},\n  );\n\n  // Collect the names of all binary body references (identified\n  // by the property having a `byteOffset`) that have not been\n  // resolved via the parsedContent.draco.batchTableProperties\n  const invalidBinaryBodyReferenceNames = [];\n  for (const name of Object.keys(batchTableJson)) {\n    const property = batchTableJson[name];\n    const byteOffset = property.byteOffset;\n    if (defined(byteOffset)) {\n      if (!dracoBatchTablePropertyNames.includes(name)) {\n        invalidBinaryBodyReferenceNames.push(name);\n      }\n    }\n  }\n\n  // If there have been invalid binary body references, print\n  // a one-time warning for each of them, and delete them.\n  for (const name of invalidBinaryBodyReferenceNames) {\n    oneTimeWarning(\n      `PntsParser-invalidBinaryBodyReference`,\n      `The point cloud data contained a binary property ${name} that could not be resolved - skipping`,\n    );\n    delete batchTableJson[name];\n  }\n}\n\nfunction parseDracoProperties(featureTable, batchTableJson) {\n  const featureTableJson = featureTable.json;\n  let dracoBuffer;\n  let dracoFeatureTableProperties;\n  let dracoBatchTableProperties;\n\n  const featureTableDraco = defined(featureTableJson.extensions)\n    ? featureTableJson.extensions[\"3DTILES_draco_point_compression\"]\n    : undefined;\n  const batchTableDraco =\n    defined(batchTableJson) && defined(batchTableJson.extensions)\n      ? batchTableJson.extensions[\"3DTILES_draco_point_compression\"]\n      : undefined;\n\n  if (defined(batchTableDraco)) {\n    dracoBatchTableProperties = batchTableDraco.properties;\n  }\n\n  let hasPositions;\n  let hasColors;\n  let hasNormals;\n  let hasBatchIds;\n  let isTranslucent;\n  if (defined(featureTableDraco)) {\n    dracoFeatureTableProperties = featureTableDraco.properties;\n    const dracoByteOffset = featureTableDraco.byteOffset;\n    const dracoByteLength = featureTableDraco.byteLength;\n    if (\n      !defined(dracoFeatureTableProperties) ||\n      !defined(dracoByteOffset) ||\n      !defined(dracoByteLength)\n    ) {\n      throw new RuntimeError(\n        \"Draco properties, byteOffset, and byteLength must be defined\",\n      );\n    }\n    dracoBuffer = featureTable.buffer.slice(\n      dracoByteOffset,\n      dracoByteOffset + dracoByteLength,\n    );\n    hasPositions = defined(dracoFeatureTableProperties.POSITION);\n    hasColors =\n      defined(dracoFeatureTableProperties.RGB) ||\n      defined(dracoFeatureTableProperties.RGBA);\n    hasNormals = defined(dracoFeatureTableProperties.NORMAL);\n    hasBatchIds = defined(dracoFeatureTableProperties.BATCH_ID);\n    isTranslucent = defined(dracoFeatureTableProperties.RGBA);\n  }\n\n  let draco;\n  if (defined(dracoBuffer)) {\n    draco = {\n      buffer: dracoBuffer,\n      featureTableProperties: dracoFeatureTableProperties,\n      batchTableProperties: dracoBatchTableProperties,\n      properties: combine(\n        dracoFeatureTableProperties,\n        dracoBatchTableProperties,\n      ),\n      dequantizeInShader: true,\n    };\n  }\n\n  return {\n    draco: draco,\n    hasPositions: hasPositions,\n    hasColors: hasColors,\n    isTranslucent: isTranslucent,\n    hasNormals: hasNormals,\n    hasBatchIds: hasBatchIds,\n  };\n}\n\nfunction parsePositions(featureTable) {\n  const featureTableJson = featureTable.json;\n\n  let positions;\n  if (defined(featureTableJson.POSITION)) {\n    positions = featureTable.getPropertyArray(\n      \"POSITION\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n\n    return {\n      name: VertexAttributeSemantic.POSITION,\n      semantic: VertexAttributeSemantic.POSITION,\n      typedArray: positions,\n      isQuantized: false,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC3,\n    };\n  } else if (defined(featureTableJson.POSITION_QUANTIZED)) {\n    positions = featureTable.getPropertyArray(\n      \"POSITION_QUANTIZED\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      3,\n    );\n\n    const quantizedVolumeScale = featureTable.getGlobalProperty(\n      \"QUANTIZED_VOLUME_SCALE\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n    if (!defined(quantizedVolumeScale)) {\n      throw new RuntimeError(\n        \"Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.\",\n      );\n    }\n    const quantizedRange = (1 << 16) - 1;\n\n    const quantizedVolumeOffset = featureTable.getGlobalProperty(\n      \"QUANTIZED_VOLUME_OFFSET\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n    if (!defined(quantizedVolumeOffset)) {\n      throw new RuntimeError(\n        \"Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.\",\n      );\n    }\n\n    return {\n      name: VertexAttributeSemantic.POSITION,\n      semantic: VertexAttributeSemantic.POSITION,\n      typedArray: positions,\n      isQuantized: true,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC3,\n      quantizedRange: quantizedRange,\n      quantizedVolumeOffset: Cartesian3.unpack(quantizedVolumeOffset),\n      quantizedVolumeScale: Cartesian3.unpack(quantizedVolumeScale),\n      quantizedComponentDatatype: ComponentDatatype.UNSIGNED_SHORT,\n      quantizedType: AttributeType.VEC3,\n    };\n  }\n}\n\nfunction parseColors(featureTable) {\n  const featureTableJson = featureTable.json;\n\n  let colors;\n  if (defined(featureTableJson.RGBA)) {\n    colors = featureTable.getPropertyArray(\n      \"RGBA\",\n      ComponentDatatype.UNSIGNED_BYTE,\n      4,\n    );\n    return {\n      name: VertexAttributeSemantic.COLOR,\n      semantic: VertexAttributeSemantic.COLOR,\n      setIndex: 0,\n      typedArray: colors,\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      type: AttributeType.VEC4,\n      normalized: true,\n      isRGB565: false,\n      isTranslucent: true,\n    };\n  } else if (defined(featureTableJson.RGB)) {\n    colors = featureTable.getPropertyArray(\n      \"RGB\",\n      ComponentDatatype.UNSIGNED_BYTE,\n      3,\n    );\n    return {\n      name: \"COLOR\",\n      semantic: VertexAttributeSemantic.COLOR,\n      setIndex: 0,\n      typedArray: colors,\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      type: AttributeType.VEC3,\n      normalized: true,\n      isRGB565: false,\n      isTranslucent: false,\n    };\n  } else if (defined(featureTableJson.RGB565)) {\n    colors = featureTable.getPropertyArray(\n      \"RGB565\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      1,\n    );\n    return {\n      name: \"COLOR\",\n      semantic: VertexAttributeSemantic.COLOR,\n      setIndex: 0,\n      typedArray: colors,\n      // These settings are for the Model implementation\n      // which decodes on the CPU and uploads a VEC3 of float colors.\n      // PointCloud does the decoding on the GPU so uploads a\n      // UNSIGNED_SHORT instead.\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC3,\n      normalized: false,\n      isRGB565: true,\n      isTranslucent: false,\n    };\n  } else if (defined(featureTableJson.CONSTANT_RGBA)) {\n    const constantRGBA = featureTable.getGlobalProperty(\n      \"CONSTANT_RGBA\",\n      ComponentDatatype.UNSIGNED_BYTE,\n      4,\n    );\n\n    const alpha = constantRGBA[3];\n    const constantColor = Color.fromBytes(\n      constantRGBA[0],\n      constantRGBA[1],\n      constantRGBA[2],\n      alpha,\n    );\n\n    const isTranslucent = alpha < 255;\n    return {\n      name: VertexAttributeSemantic.COLOR,\n      semantic: VertexAttributeSemantic.COLOR,\n      setIndex: 0,\n      constantColor: constantColor,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC4,\n      isQuantized: false,\n      isTranslucent: isTranslucent,\n    };\n  }\n\n  return undefined;\n}\n\nfunction parseNormals(featureTable) {\n  const featureTableJson = featureTable.json;\n  let normals;\n  if (defined(featureTableJson.NORMAL)) {\n    normals = featureTable.getPropertyArray(\n      \"NORMAL\",\n      ComponentDatatype.FLOAT,\n      3,\n    );\n    return {\n      name: VertexAttributeSemantic.NORMAL,\n      semantic: VertexAttributeSemantic.NORMAL,\n      typedArray: normals,\n      octEncoded: false,\n      octEncodedZXY: false,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC3,\n    };\n  } else if (defined(featureTableJson.NORMAL_OCT16P)) {\n    normals = featureTable.getPropertyArray(\n      \"NORMAL_OCT16P\",\n      ComponentDatatype.UNSIGNED_BYTE,\n      2,\n    );\n    const quantizationBits = 8;\n    return {\n      name: VertexAttributeSemantic.NORMAL,\n      semantic: VertexAttributeSemantic.NORMAL,\n      typedArray: normals,\n      octEncoded: true,\n      octEncodedZXY: false,\n      quantizedRange: (1 << quantizationBits) - 1,\n      quantizedType: AttributeType.VEC2,\n      quantizedComponentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentDatatype: ComponentDatatype.FLOAT,\n      type: AttributeType.VEC3,\n    };\n  }\n\n  return undefined;\n}\n\nfunction parseBatchIds(featureTable) {\n  const featureTableJson = featureTable.json;\n  if (defined(featureTableJson.BATCH_ID)) {\n    const batchIds = featureTable.getPropertyArray(\n      \"BATCH_ID\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      1,\n    );\n    return {\n      name: VertexAttributeSemantic.FEATURE_ID,\n      semantic: VertexAttributeSemantic.FEATURE_ID,\n      setIndex: 0,\n      typedArray: batchIds,\n      componentDatatype: ComponentDatatype.fromTypedArray(batchIds),\n      type: AttributeType.SCALAR,\n    };\n  }\n\n  return undefined;\n}\n\nexport default PntsParser;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport MersenneTwister from \"mersenne-twister\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport DracoLoader from \"./DracoLoader.js\";\nimport getClipAndStyleCode from \"./getClipAndStyleCode.js\";\nimport getClippingFunction from \"./getClippingFunction.js\";\nimport PntsParser from \"./PntsParser.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\nimport SplitDirection from \"./SplitDirection.js\";\nimport Splitter from \"./Splitter.js\";\nimport StencilConstants from \"./StencilConstants.js\";\n\nconst DecodingState = {\n  NEEDS_DECODE: 0,\n  DECODING: 1,\n  READY: 2,\n  FAILED: 3,\n};\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/PointCloud|Point Cloud}\n * tile. Used internally by {@link TimeDynamicPointCloud}.\n *\n * @alias PointCloud\n * @constructor\n *\n * @see TimeDynamicPointCloud\n *\n * @private\n */\nfunction PointCloud(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.arrayBuffer\", options.arrayBuffer);\n  //>>includeEnd('debug');\n\n  // Hold onto the payload until the render resources are created\n  this._parsedContent = undefined;\n\n  this._drawCommand = undefined;\n  this._isTranslucent = false;\n  this._styleTranslucent = false;\n  this._constantColor = Color.clone(Color.DARKGRAY);\n  this._highlightColor = Color.clone(Color.WHITE);\n  this._pointSize = 1.0;\n\n  this._rtcCenter = undefined;\n  this._quantizedVolumeScale = undefined;\n  this._quantizedVolumeOffset = undefined;\n\n  // These values are used to regenerate the shader when the style changes\n  this._styleableShaderAttributes = undefined;\n  this._isQuantized = false;\n  this._isOctEncoded16P = false;\n  this._isRGB565 = false;\n  this._hasColors = false;\n  this._hasNormals = false;\n  this._hasBatchIds = false;\n\n  // Draco\n  this._decodingState = DecodingState.READY;\n  this._dequantizeInShader = true;\n  this._isQuantizedDraco = false;\n  this._isOctEncodedDraco = false;\n  this._quantizedRange = 0.0;\n  this._octEncodedRange = 0.0;\n\n  // Use per-point normals to hide back-facing points.\n  this.backFaceCulling = false;\n  this._backFaceCulling = false;\n\n  // Whether to enable normal shading\n  this.normalShading = true;\n  this._normalShading = true;\n\n  this._opaqueRenderState = undefined;\n  this._translucentRenderState = undefined;\n\n  this._mode = undefined;\n\n  this._ready = false;\n  this._pointsLength = 0;\n  this._geometryByteLength = 0;\n\n  this._vertexShaderLoaded = options.vertexShaderLoaded;\n  this._fragmentShaderLoaded = options.fragmentShaderLoaded;\n  this._uniformMapLoaded = options.uniformMapLoaded;\n  this._batchTableLoaded = options.batchTableLoaded;\n  this._pickIdLoaded = options.pickIdLoaded;\n  this._opaquePass = options.opaquePass ?? Pass.OPAQUE;\n  this._cull = options.cull ?? true;\n\n  this.style = undefined;\n  this._style = undefined;\n  this.styleDirty = false;\n\n  this.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n  this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n  this.time = 0.0; // For styling\n  this.shadows = ShadowMode.ENABLED;\n  this._boundingSphere = undefined;\n\n  this.clippingPlanes = undefined;\n  this.isClipped = false;\n  this.clippingPlanesDirty = false;\n  // If defined, use this matrix to position the clipping planes instead of the modelMatrix.\n  // This is so that when point clouds are part of a tileset they all get clipped relative\n  // to the root tile.\n  this.clippingPlanesOriginMatrix = undefined;\n\n  this.attenuation = false;\n  this._attenuation = false;\n\n  // Options for geometric error based attenuation\n  this.geometricError = 0.0;\n  this.geometricErrorScale = 1.0;\n  this.maximumAttenuation = this._pointSize;\n\n  /**\n   * The {@link SplitDirection} to apply to this point cloud.\n   *\n   * @type {SplitDirection}\n   * @default {@link SplitDirection.NONE}\n   */\n  this.splitDirection = options.splitDirection ?? SplitDirection.NONE;\n  this._splittingEnabled = false;\n\n  this._error = undefined;\n  initialize(this, options);\n}\n\nObject.defineProperties(PointCloud.prototype, {\n  pointsLength: {\n    get: function () {\n      return this._pointsLength;\n    },\n  },\n\n  geometryByteLength: {\n    get: function () {\n      return this._geometryByteLength;\n    },\n  },\n\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  color: {\n    get: function () {\n      return Color.clone(this._highlightColor);\n    },\n    set: function (value) {\n      this._highlightColor = Color.clone(value, this._highlightColor);\n    },\n  },\n\n  boundingSphere: {\n    get: function () {\n      if (defined(this._drawCommand)) {\n        return this._drawCommand.boundingVolume;\n      }\n      return undefined;\n    },\n    set: function (value) {\n      this._boundingSphere = BoundingSphere.clone(value, this._boundingSphere);\n    },\n  },\n});\n\nfunction initialize(pointCloud, options) {\n  const parsedContent = PntsParser.parse(\n    options.arrayBuffer,\n    options.byteOffset,\n  );\n  pointCloud._parsedContent = parsedContent;\n  pointCloud._rtcCenter = parsedContent.rtcCenter;\n  pointCloud._hasNormals = parsedContent.hasNormals;\n  pointCloud._hasColors = parsedContent.hasColors;\n  pointCloud._hasBatchIds = parsedContent.hasBatchIds;\n  pointCloud._isTranslucent = parsedContent.isTranslucent;\n\n  // If points are not batched and there are per-point properties, use the\n  // properties as metadata for styling purposes.\n  if (!parsedContent.hasBatchIds && defined(parsedContent.batchTableBinary)) {\n    parsedContent.styleableProperties =\n      Cesium3DTileBatchTable.getBinaryProperties(\n        parsedContent.pointsLength,\n        parsedContent.batchTableJson,\n        parsedContent.batchTableBinary,\n      );\n  }\n\n  if (defined(parsedContent.draco)) {\n    const draco = parsedContent.draco;\n    pointCloud._decodingState = DecodingState.NEEDS_DECODE;\n    draco.dequantizeInShader = pointCloud._dequantizeInShader;\n  }\n\n  const positions = parsedContent.positions;\n  if (defined(positions)) {\n    pointCloud._isQuantized = positions.isQuantized;\n    pointCloud._quantizedVolumeScale = positions.quantizedVolumeScale;\n    pointCloud._quantizedVolumeOffset = positions.quantizedVolumeOffset;\n    pointCloud._quantizedRange = positions.quantizedRange;\n  }\n\n  const normals = parsedContent.normals;\n  if (defined(normals)) {\n    pointCloud._isOctEncoded16P = normals.octEncoded;\n  }\n\n  const colors = parsedContent.colors;\n  if (defined(colors)) {\n    if (defined(colors.constantColor)) {\n      pointCloud._constantColor = Color.clone(\n        colors.constantColor,\n        pointCloud._constantColor,\n      );\n\n      // Constant colors are handled as a uniform rather than a vertex\n      // attribute.\n      pointCloud._hasColors = false;\n    }\n    pointCloud._isRGB565 = colors.isRGB565;\n  }\n\n  // PntsParser parses BATCH_ID as _FEATURE_ID_0 for EXT_mesh_features.\n  // These properties aren't used but rename them to BATCH_ID to avoid\n  // confusion when debugging.\n  const batchIds = parsedContent.batchIds;\n  if (defined(parsedContent.batchIds)) {\n    batchIds.name = \"BATCH_ID\";\n    batchIds.semantic = \"BATCH_ID\";\n    batchIds.setIndex = undefined;\n  }\n\n  if (parsedContent.hasBatchIds) {\n    pointCloud._batchTableLoaded(\n      parsedContent.batchLength,\n      parsedContent.batchTableJson,\n      parsedContent.batchTableBinary,\n    );\n  }\n\n  pointCloud._pointsLength = parsedContent.pointsLength;\n}\n\nconst scratchMin = new Cartesian3();\nconst scratchMax = new Cartesian3();\nconst scratchPosition = new Cartesian3();\n\n// Use MersenneTwister directly to avoid interfering with CesiumMath.nextRandomNumber()\n// See https://github.com/CesiumGS/cesium/issues/9730\nlet randomNumberGenerator;\nlet randomValues;\n\nfunction getRandomValues(samplesLength) {\n  // Use same random values across all runs\n  if (!defined(randomValues)) {\n    // Use MersenneTwister directly to avoid interfering with CesiumMath.nextRandomNumber()\n    // See https://github.com/CesiumGS/cesium/issues/9730\n    randomNumberGenerator = new MersenneTwister(0);\n    randomValues = new Array(samplesLength);\n    for (let i = 0; i < samplesLength; ++i) {\n      randomValues[i] = randomNumberGenerator.random();\n    }\n  }\n  return randomValues;\n}\n\nfunction computeApproximateBoundingSphereFromPositions(positions) {\n  const maximumSamplesLength = 20;\n  const pointsLength = positions.length / 3;\n  const samplesLength = Math.min(pointsLength, maximumSamplesLength);\n  const randomValues = getRandomValues(maximumSamplesLength);\n  const maxValue = Number.MAX_VALUE;\n  const minValue = -Number.MAX_VALUE;\n  const min = Cartesian3.fromElements(maxValue, maxValue, maxValue, scratchMin);\n  const max = Cartesian3.fromElements(minValue, minValue, minValue, scratchMax);\n  for (let i = 0; i < samplesLength; ++i) {\n    const index = Math.floor(randomValues[i] * pointsLength);\n    const position = Cartesian3.unpack(positions, index * 3, scratchPosition);\n    Cartesian3.minimumByComponent(min, position, min);\n    Cartesian3.maximumByComponent(max, position, max);\n  }\n\n  const boundingSphere = BoundingSphere.fromCornerPoints(min, max);\n  boundingSphere.radius += CesiumMath.EPSILON2; // To avoid radius of zero\n  return boundingSphere;\n}\n\nfunction prepareVertexAttribute(typedArray, name) {\n  // WebGL does not support UNSIGNED_INT, INT, or DOUBLE vertex attributes. Convert these to FLOAT.\n  const componentDatatype = ComponentDatatype.fromTypedArray(typedArray);\n  if (\n    componentDatatype === ComponentDatatype.INT ||\n    componentDatatype === ComponentDatatype.UNSIGNED_INT ||\n    componentDatatype === ComponentDatatype.DOUBLE\n  ) {\n    oneTimeWarning(\n      \"Cast pnts property to floats\",\n      `Point cloud property \"${name}\" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`,\n    );\n    return new Float32Array(typedArray);\n  }\n  return typedArray;\n}\n\nconst scratchPointSizeAndTimeAndGeometricErrorAndDepthMultiplier =\n  new Cartesian4();\nconst scratchQuantizedVolumeScaleAndOctEncodedRange = new Cartesian4();\nconst scratchColor = new Color();\n\nconst positionLocation = 0;\nconst colorLocation = 1;\nconst normalLocation = 2;\nconst batchIdLocation = 3;\nconst numberOfAttributes = 4;\n\nconst scratchClippingPlanesMatrix = new Matrix4();\nconst scratchInverseTransposeClippingPlanesMatrix = new Matrix4();\n\nfunction createResources(pointCloud, frameState) {\n  const context = frameState.context;\n  const parsedContent = pointCloud._parsedContent;\n  const pointsLength = pointCloud._pointsLength;\n  const positions = parsedContent.positions;\n  const colors = parsedContent.colors;\n  const normals = parsedContent.normals;\n  const batchIds = parsedContent.batchIds;\n  const styleableProperties = parsedContent.styleableProperties;\n  const hasStyleableProperties = defined(styleableProperties);\n  const isQuantized = pointCloud._isQuantized;\n  const isQuantizedDraco = pointCloud._isQuantizedDraco;\n  const isOctEncoded16P = pointCloud._isOctEncoded16P;\n  const isOctEncodedDraco = pointCloud._isOctEncodedDraco;\n  const quantizedRange = pointCloud._quantizedRange;\n  const octEncodedRange = pointCloud._octEncodedRange;\n  const isRGB565 = pointCloud._isRGB565;\n  const isTranslucent = pointCloud._isTranslucent;\n  const hasColors = pointCloud._hasColors;\n  const hasNormals = pointCloud._hasNormals;\n  const hasBatchIds = pointCloud._hasBatchIds;\n\n  let componentsPerAttribute;\n  let componentDatatype;\n\n  const styleableVertexAttributes = [];\n  const styleableShaderAttributes = {};\n  pointCloud._styleableShaderAttributes = styleableShaderAttributes;\n\n  if (hasStyleableProperties) {\n    let attributeLocation = numberOfAttributes;\n\n    for (const name in styleableProperties) {\n      if (styleableProperties.hasOwnProperty(name)) {\n        const property = styleableProperties[name];\n        const typedArray = prepareVertexAttribute(property.typedArray, name);\n        componentsPerAttribute = property.componentCount;\n        componentDatatype = ComponentDatatype.fromTypedArray(typedArray);\n\n        const vertexBuffer = Buffer.createVertexBuffer({\n          context: context,\n          typedArray: typedArray,\n          usage: BufferUsage.STATIC_DRAW,\n        });\n\n        pointCloud._geometryByteLength += vertexBuffer.sizeInBytes;\n\n        const vertexAttribute = {\n          index: attributeLocation,\n          vertexBuffer: vertexBuffer,\n          componentsPerAttribute: componentsPerAttribute,\n          componentDatatype: componentDatatype,\n          normalize: false,\n          offsetInBytes: 0,\n          strideInBytes: 0,\n        };\n\n        styleableVertexAttributes.push(vertexAttribute);\n        styleableShaderAttributes[name] = {\n          location: attributeLocation,\n          componentCount: componentsPerAttribute,\n        };\n        ++attributeLocation;\n      }\n    }\n  }\n\n  const positionsVertexBuffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: positions.typedArray,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  pointCloud._geometryByteLength += positionsVertexBuffer.sizeInBytes;\n\n  let colorsVertexBuffer;\n  if (hasColors) {\n    colorsVertexBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: colors.typedArray,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    pointCloud._geometryByteLength += colorsVertexBuffer.sizeInBytes;\n  }\n\n  let normalsVertexBuffer;\n  if (hasNormals) {\n    normalsVertexBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: normals.typedArray,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    pointCloud._geometryByteLength += normalsVertexBuffer.sizeInBytes;\n  }\n\n  let batchIdsVertexBuffer;\n  if (hasBatchIds) {\n    batchIds.typedArray = prepareVertexAttribute(\n      batchIds.typedArray,\n      \"batchIds\",\n    );\n    batchIdsVertexBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: batchIds.typedArray,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    pointCloud._geometryByteLength += batchIdsVertexBuffer.sizeInBytes;\n  }\n\n  let attributes = [];\n\n  if (isQuantized) {\n    componentDatatype = ComponentDatatype.UNSIGNED_SHORT;\n  } else if (isQuantizedDraco) {\n    componentDatatype =\n      quantizedRange <= 255\n        ? ComponentDatatype.UNSIGNED_BYTE\n        : ComponentDatatype.UNSIGNED_SHORT;\n  } else {\n    componentDatatype = ComponentDatatype.FLOAT;\n  }\n\n  attributes.push({\n    index: positionLocation,\n    vertexBuffer: positionsVertexBuffer,\n    componentsPerAttribute: 3,\n    componentDatatype: componentDatatype,\n    normalize: false,\n    offsetInBytes: 0,\n    strideInBytes: 0,\n  });\n\n  if (pointCloud._cull) {\n    if (isQuantized || isQuantizedDraco) {\n      pointCloud._boundingSphere = BoundingSphere.fromCornerPoints(\n        Cartesian3.ZERO,\n        pointCloud._quantizedVolumeScale,\n      );\n    } else {\n      pointCloud._boundingSphere =\n        computeApproximateBoundingSphereFromPositions(positions.typedArray);\n    }\n  }\n\n  if (hasColors) {\n    if (isRGB565) {\n      attributes.push({\n        index: colorLocation,\n        vertexBuffer: colorsVertexBuffer,\n        componentsPerAttribute: 1,\n        componentDatatype: ComponentDatatype.UNSIGNED_SHORT,\n        normalize: false,\n        offsetInBytes: 0,\n        strideInBytes: 0,\n      });\n    } else {\n      const colorComponentsPerAttribute = isTranslucent ? 4 : 3;\n      attributes.push({\n        index: colorLocation,\n        vertexBuffer: colorsVertexBuffer,\n        componentsPerAttribute: colorComponentsPerAttribute,\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n        normalize: true,\n        offsetInBytes: 0,\n        strideInBytes: 0,\n      });\n    }\n  }\n\n  if (hasNormals) {\n    if (isOctEncoded16P) {\n      componentsPerAttribute = 2;\n      componentDatatype = ComponentDatatype.UNSIGNED_BYTE;\n    } else if (isOctEncodedDraco) {\n      componentsPerAttribute = 2;\n      componentDatatype =\n        octEncodedRange <= 255\n          ? ComponentDatatype.UNSIGNED_BYTE\n          : ComponentDatatype.UNSIGNED_SHORT;\n    } else {\n      componentsPerAttribute = 3;\n      componentDatatype = ComponentDatatype.FLOAT;\n    }\n    attributes.push({\n      index: normalLocation,\n      vertexBuffer: normalsVertexBuffer,\n      componentsPerAttribute: componentsPerAttribute,\n      componentDatatype: componentDatatype,\n      normalize: false,\n      offsetInBytes: 0,\n      strideInBytes: 0,\n    });\n  }\n\n  if (hasBatchIds) {\n    attributes.push({\n      index: batchIdLocation,\n      vertexBuffer: batchIdsVertexBuffer,\n      componentsPerAttribute: 1,\n      componentDatatype: ComponentDatatype.fromTypedArray(batchIds.typedArray),\n      normalize: false,\n      offsetInBytes: 0,\n      strideInBytes: 0,\n    });\n  }\n\n  if (hasStyleableProperties) {\n    attributes = attributes.concat(styleableVertexAttributes);\n  }\n\n  const vertexArray = new VertexArray({\n    context: context,\n    attributes: attributes,\n  });\n\n  const opaqueRenderState = {\n    depthTest: {\n      enabled: true,\n    },\n  };\n\n  const translucentRenderState = {\n    depthTest: {\n      enabled: true,\n    },\n    depthMask: false,\n    blending: BlendingState.ALPHA_BLEND,\n  };\n\n  if (pointCloud._opaquePass === Pass.CESIUM_3D_TILE) {\n    opaqueRenderState.stencilTest = StencilConstants.setCesium3DTileBit();\n    opaqueRenderState.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n    translucentRenderState.stencilTest = StencilConstants.setCesium3DTileBit();\n    translucentRenderState.stencilMask = StencilConstants.CESIUM_3D_TILE_MASK;\n  }\n\n  pointCloud._opaqueRenderState = RenderState.fromCache(opaqueRenderState);\n  pointCloud._translucentRenderState = RenderState.fromCache(\n    translucentRenderState,\n  );\n\n  pointCloud._drawCommand = new DrawCommand({\n    boundingVolume: new BoundingSphere(),\n    cull: pointCloud._cull,\n    modelMatrix: new Matrix4(),\n    primitiveType: PrimitiveType.POINTS,\n    vertexArray: vertexArray,\n    count: pointsLength,\n    shaderProgram: undefined, // Updated in createShaders\n    uniformMap: undefined, // Updated in createShaders\n    renderState: isTranslucent\n      ? pointCloud._translucentRenderState\n      : pointCloud._opaqueRenderState,\n    pass: isTranslucent ? Pass.TRANSLUCENT : pointCloud._opaquePass,\n    owner: pointCloud,\n    castShadows: false,\n    receiveShadows: false,\n    pickId: pointCloud._pickIdLoaded(),\n  });\n}\n\nfunction createUniformMap(pointCloud, frameState) {\n  const context = frameState.context;\n  const isQuantized = pointCloud._isQuantized;\n  const isQuantizedDraco = pointCloud._isQuantizedDraco;\n  const isOctEncodedDraco = pointCloud._isOctEncodedDraco;\n\n  let uniformMap = {\n    u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier: function () {\n      const scratch =\n        scratchPointSizeAndTimeAndGeometricErrorAndDepthMultiplier;\n      scratch.x = pointCloud._attenuation\n        ? pointCloud.maximumAttenuation\n        : pointCloud._pointSize;\n      scratch.x *= frameState.pixelRatio;\n\n      scratch.y = pointCloud.time;\n\n      if (pointCloud._attenuation) {\n        const frustum = frameState.camera.frustum;\n        let depthMultiplier;\n        // Attenuation is maximumAttenuation in 2D/ortho\n        if (\n          frameState.mode === SceneMode.SCENE2D ||\n          frustum instanceof OrthographicFrustum\n        ) {\n          depthMultiplier = Number.POSITIVE_INFINITY;\n        } else {\n          depthMultiplier =\n            context.drawingBufferHeight /\n            frameState.camera.frustum.sseDenominator;\n        }\n\n        scratch.z = pointCloud.geometricError * pointCloud.geometricErrorScale;\n        scratch.w = depthMultiplier;\n      }\n\n      return scratch;\n    },\n    u_highlightColor: function () {\n      return pointCloud._highlightColor;\n    },\n    u_constantColor: function () {\n      return pointCloud._constantColor;\n    },\n    u_clippingPlanes: function () {\n      const clippingPlanes = pointCloud.clippingPlanes;\n      const isClipped = pointCloud.isClipped;\n      return isClipped ? clippingPlanes.texture : context.defaultTexture;\n    },\n    u_clippingPlanesEdgeStyle: function () {\n      const clippingPlanes = pointCloud.clippingPlanes;\n      if (!defined(clippingPlanes)) {\n        return Color.TRANSPARENT;\n      }\n\n      const style = Color.clone(clippingPlanes.edgeColor, scratchColor);\n      style.alpha = clippingPlanes.edgeWidth;\n      return style;\n    },\n    u_clippingPlanesMatrix: function () {\n      const clippingPlanes = pointCloud.clippingPlanes;\n      if (!defined(clippingPlanes)) {\n        return Matrix4.IDENTITY;\n      }\n\n      const clippingPlanesOriginMatrix =\n        pointCloud.clippingPlanesOriginMatrix ?? pointCloud._modelMatrix;\n      Matrix4.multiply(\n        context.uniformState.view3D,\n        clippingPlanesOriginMatrix,\n        scratchClippingPlanesMatrix,\n      );\n      const transform = Matrix4.multiply(\n        scratchClippingPlanesMatrix,\n        clippingPlanes.modelMatrix,\n        scratchClippingPlanesMatrix,\n      );\n\n      return Matrix4.inverseTranspose(\n        transform,\n        scratchInverseTransposeClippingPlanesMatrix,\n      );\n    },\n  };\n\n  Splitter.addUniforms(pointCloud, uniformMap);\n\n  if (isQuantized || isQuantizedDraco || isOctEncodedDraco) {\n    uniformMap = combine(uniformMap, {\n      u_quantizedVolumeScaleAndOctEncodedRange: function () {\n        const scratch = scratchQuantizedVolumeScaleAndOctEncodedRange;\n        if (defined(pointCloud._quantizedVolumeScale)) {\n          const scale = Cartesian3.clone(\n            pointCloud._quantizedVolumeScale,\n            scratch,\n          );\n          Cartesian3.divideByScalar(scale, pointCloud._quantizedRange, scratch);\n        }\n        scratch.w = pointCloud._octEncodedRange;\n        return scratch;\n      },\n    });\n  }\n\n  if (defined(pointCloud._uniformMapLoaded)) {\n    uniformMap = pointCloud._uniformMapLoaded(uniformMap);\n  }\n\n  pointCloud._drawCommand.uniformMap = uniformMap;\n}\n\nfunction getStyleablePropertyIds(source, propertyIds) {\n  // Get all the property IDs used by this style\n  const regex = /czm_3dtiles_property_(\\d+)/g;\n  let matches = regex.exec(source);\n  while (matches !== null) {\n    const id = parseInt(matches[1]);\n    if (propertyIds.indexOf(id) === -1) {\n      propertyIds.push(id);\n    }\n    matches = regex.exec(source);\n  }\n}\n\nfunction getBuiltinPropertyNames(source, propertyNames) {\n  // Get all the builtin property names used by this style, ignoring the function signature\n  source = source.slice(source.indexOf(\"\\n\"));\n  const regex = /czm_3dtiles_builtin_property_(\\w+)/g;\n  let matches = regex.exec(source);\n  while (matches !== null) {\n    const name = matches[1];\n    if (propertyNames.indexOf(name) === -1) {\n      propertyNames.push(name);\n    }\n    matches = regex.exec(source);\n  }\n}\n\nfunction getVertexAttribute(vertexArray, index) {\n  const numberOfAttributes = vertexArray.numberOfAttributes;\n  for (let i = 0; i < numberOfAttributes; ++i) {\n    const attribute = vertexArray.getAttribute(i);\n    if (attribute.index === index) {\n      return attribute;\n    }\n  }\n}\n\nconst builtinVariableSubstitutionMap = {\n  POSITION: \"czm_3dtiles_builtin_property_POSITION\",\n  POSITION_ABSOLUTE: \"czm_3dtiles_builtin_property_POSITION_ABSOLUTE\",\n  COLOR: \"czm_3dtiles_builtin_property_COLOR\",\n  NORMAL: \"czm_3dtiles_builtin_property_NORMAL\",\n};\n\nfunction createShaders(pointCloud, frameState, style) {\n  let i;\n  let name;\n  let attribute;\n\n  const context = frameState.context;\n  const hasStyle = defined(style);\n  const isQuantized = pointCloud._isQuantized;\n  const isQuantizedDraco = pointCloud._isQuantizedDraco;\n  const isOctEncoded16P = pointCloud._isOctEncoded16P;\n  const isOctEncodedDraco = pointCloud._isOctEncodedDraco;\n  const isRGB565 = pointCloud._isRGB565;\n  const isTranslucent = pointCloud._isTranslucent;\n  const hasColors = pointCloud._hasColors;\n  const hasNormals = pointCloud._hasNormals;\n  const hasBatchIds = pointCloud._hasBatchIds;\n  const backFaceCulling = pointCloud._backFaceCulling;\n  const normalShading = pointCloud._normalShading;\n  const vertexArray = pointCloud._drawCommand.vertexArray;\n  const clippingPlanes = pointCloud.clippingPlanes;\n  const attenuation = pointCloud._attenuation;\n\n  let colorStyleFunction;\n  let showStyleFunction;\n  let pointSizeStyleFunction;\n  let styleTranslucent = isTranslucent;\n\n  const variableSubstitutionMap = clone(builtinVariableSubstitutionMap);\n  const propertyIdToAttributeMap = {};\n  const styleableShaderAttributes = pointCloud._styleableShaderAttributes;\n  for (name in styleableShaderAttributes) {\n    if (styleableShaderAttributes.hasOwnProperty(name)) {\n      attribute = styleableShaderAttributes[name];\n      variableSubstitutionMap[name] =\n        `czm_3dtiles_property_${attribute.location}`;\n      propertyIdToAttributeMap[attribute.location] = attribute;\n    }\n  }\n\n  if (hasStyle) {\n    const shaderState = {\n      translucent: false,\n    };\n    const parameterList =\n      \"(\" +\n      \"vec3 czm_3dtiles_builtin_property_POSITION, \" +\n      \"vec3 czm_3dtiles_builtin_property_POSITION_ABSOLUTE, \" +\n      \"vec4 czm_3dtiles_builtin_property_COLOR, \" +\n      \"vec3 czm_3dtiles_builtin_property_NORMAL\" +\n      \")\";\n    colorStyleFunction = style.getColorShaderFunction(\n      `getColorFromStyle${parameterList}`,\n      variableSubstitutionMap,\n      shaderState,\n    );\n    showStyleFunction = style.getShowShaderFunction(\n      `getShowFromStyle${parameterList}`,\n      variableSubstitutionMap,\n      shaderState,\n    );\n    pointSizeStyleFunction = style.getPointSizeShaderFunction(\n      `getPointSizeFromStyle${parameterList}`,\n      variableSubstitutionMap,\n      shaderState,\n    );\n    if (defined(colorStyleFunction) && shaderState.translucent) {\n      styleTranslucent = true;\n    }\n  }\n\n  pointCloud._styleTranslucent = styleTranslucent;\n\n  const hasColorStyle = defined(colorStyleFunction);\n  const hasShowStyle = defined(showStyleFunction);\n  const hasPointSizeStyle = defined(pointSizeStyleFunction);\n  const hasClippedContent = pointCloud.isClipped;\n\n  // Get the properties in use by the style\n  const styleablePropertyIds = [];\n  const builtinPropertyNames = [];\n\n  if (hasColorStyle) {\n    getStyleablePropertyIds(colorStyleFunction, styleablePropertyIds);\n    getBuiltinPropertyNames(colorStyleFunction, builtinPropertyNames);\n  }\n  if (hasShowStyle) {\n    getStyleablePropertyIds(showStyleFunction, styleablePropertyIds);\n    getBuiltinPropertyNames(showStyleFunction, builtinPropertyNames);\n  }\n  if (hasPointSizeStyle) {\n    getStyleablePropertyIds(pointSizeStyleFunction, styleablePropertyIds);\n    getBuiltinPropertyNames(pointSizeStyleFunction, builtinPropertyNames);\n  }\n\n  const usesColorSemantic = builtinPropertyNames.indexOf(\"COLOR\") >= 0;\n  const usesNormalSemantic = builtinPropertyNames.indexOf(\"NORMAL\") >= 0;\n\n  if (usesNormalSemantic && !hasNormals) {\n    throw new RuntimeError(\n      \"Style references the NORMAL semantic but the point cloud does not have normals\",\n    );\n  }\n\n  // Disable vertex attributes that aren't used in the style, enable attributes that are\n  for (name in styleableShaderAttributes) {\n    if (styleableShaderAttributes.hasOwnProperty(name)) {\n      attribute = styleableShaderAttributes[name];\n      const enabled = styleablePropertyIds.indexOf(attribute.location) >= 0;\n      const vertexAttribute = getVertexAttribute(\n        vertexArray,\n        attribute.location,\n      );\n      vertexAttribute.enabled = enabled;\n    }\n  }\n\n  const usesColors = hasColors && (!hasColorStyle || usesColorSemantic);\n  if (hasColors) {\n    // Disable the color vertex attribute if the color style does not reference the color semantic\n    const colorVertexAttribute = getVertexAttribute(vertexArray, colorLocation);\n    colorVertexAttribute.enabled = usesColors;\n  }\n\n  const usesNormals =\n    hasNormals && (normalShading || backFaceCulling || usesNormalSemantic);\n  if (hasNormals) {\n    // Disable the normal vertex attribute if normals are not used\n    const normalVertexAttribute = getVertexAttribute(\n      vertexArray,\n      normalLocation,\n    );\n    normalVertexAttribute.enabled = usesNormals;\n  }\n\n  const attributeLocations = {\n    a_position: positionLocation,\n  };\n  if (usesColors) {\n    attributeLocations.a_color = colorLocation;\n  }\n  if (usesNormals) {\n    attributeLocations.a_normal = normalLocation;\n  }\n  if (hasBatchIds) {\n    attributeLocations.a_batchId = batchIdLocation;\n  }\n\n  let attributeDeclarations = \"\";\n\n  const length = styleablePropertyIds.length;\n  for (i = 0; i < length; ++i) {\n    const propertyId = styleablePropertyIds[i];\n    attribute = propertyIdToAttributeMap[propertyId];\n    const componentCount = attribute.componentCount;\n    const attributeName = `czm_3dtiles_property_${propertyId}`;\n    let attributeType;\n    if (componentCount === 1) {\n      attributeType = \"float\";\n    } else {\n      attributeType = `vec${componentCount}`;\n    }\n\n    attributeDeclarations += `in ${attributeType} ${attributeName}; \\n`;\n    attributeLocations[attributeName] = attribute.location;\n  }\n\n  createUniformMap(pointCloud, frameState);\n\n  let vs =\n    \"in vec3 a_position; \\n\" +\n    \"out vec4 v_color; \\n\" +\n    \"uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; \\n\" +\n    \"uniform vec4 u_constantColor; \\n\" +\n    \"uniform vec4 u_highlightColor; \\n\";\n\n  // The time variable is named differently for compatibility with custom\n  // shaders in Model.\n  vs += \"float u_pointSize; \\n\" + \"float tiles3d_tileset_time; \\n\";\n\n  if (attenuation) {\n    vs += \"float u_geometricError; \\n\" + \"float u_depthMultiplier; \\n\";\n  }\n\n  vs += attributeDeclarations;\n\n  if (usesColors) {\n    if (isTranslucent) {\n      vs += \"in vec4 a_color; \\n\";\n    } else if (isRGB565) {\n      vs +=\n        \"in float a_color; \\n\" +\n        \"const float SHIFT_RIGHT_11 = 1.0 / 2048.0; \\n\" +\n        \"const float SHIFT_RIGHT_5 = 1.0 / 32.0; \\n\" +\n        \"const float SHIFT_LEFT_11 = 2048.0; \\n\" +\n        \"const float SHIFT_LEFT_5 = 32.0; \\n\" +\n        \"const float NORMALIZE_6 = 1.0 / 64.0; \\n\" +\n        \"const float NORMALIZE_5 = 1.0 / 32.0; \\n\";\n    } else {\n      vs += \"in vec3 a_color; \\n\";\n    }\n  }\n  if (usesNormals) {\n    if (isOctEncoded16P || isOctEncodedDraco) {\n      vs += \"in vec2 a_normal; \\n\";\n    } else {\n      vs += \"in vec3 a_normal; \\n\";\n    }\n  }\n\n  if (hasBatchIds) {\n    vs += \"in float a_batchId; \\n\";\n  }\n\n  if (isQuantized || isQuantizedDraco || isOctEncodedDraco) {\n    vs += \"uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; \\n\";\n  }\n\n  if (hasColorStyle) {\n    vs += colorStyleFunction;\n  }\n\n  if (hasShowStyle) {\n    vs += showStyleFunction;\n  }\n\n  if (hasPointSizeStyle) {\n    vs += pointSizeStyleFunction;\n  }\n\n  vs +=\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; \\n\" +\n    \"    tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; \\n\";\n\n  if (attenuation) {\n    vs +=\n      \"    u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; \\n\" +\n      \"    u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; \\n\";\n  }\n\n  if (usesColors) {\n    if (isTranslucent) {\n      vs += \"    vec4 color = a_color; \\n\";\n    } else if (isRGB565) {\n      vs +=\n        \"    float compressed = a_color; \\n\" +\n        \"    float r = floor(compressed * SHIFT_RIGHT_11); \\n\" +\n        \"    compressed -= r * SHIFT_LEFT_11; \\n\" +\n        \"    float g = floor(compressed * SHIFT_RIGHT_5); \\n\" +\n        \"    compressed -= g * SHIFT_LEFT_5; \\n\" +\n        \"    float b = compressed; \\n\" +\n        \"    vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5); \\n\" +\n        \"    vec4 color = vec4(rgb, 1.0); \\n\";\n    } else {\n      vs += \"    vec4 color = vec4(a_color, 1.0); \\n\";\n    }\n  } else {\n    vs += \"    vec4 color = u_constantColor; \\n\";\n  }\n\n  if (isQuantized || isQuantizedDraco) {\n    vs +=\n      \"    vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; \\n\";\n  } else {\n    vs += \"    vec3 position = a_position; \\n\";\n  }\n  vs +=\n    \"    vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); \\n\";\n\n  if (usesNormals) {\n    if (isOctEncoded16P) {\n      vs += \"    vec3 normal = czm_octDecode(a_normal); \\n\";\n    } else if (isOctEncodedDraco) {\n      // Draco oct-encoding decodes to zxy order\n      vs +=\n        \"    vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; \\n\";\n    } else {\n      vs += \"    vec3 normal = a_normal; \\n\";\n    }\n    vs += \"    vec3 normalEC = czm_normal * normal; \\n\";\n  } else {\n    vs += \"    vec3 normal = vec3(1.0); \\n\";\n  }\n\n  if (hasColorStyle) {\n    vs +=\n      \"    color = getColorFromStyle(position, position_absolute, color, normal); \\n\";\n  }\n\n  if (hasShowStyle) {\n    vs +=\n      \"    float show = float(getShowFromStyle(position, position_absolute, color, normal)); \\n\";\n  }\n\n  if (hasPointSizeStyle) {\n    vs +=\n      \"    gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; \\n\";\n  } else if (attenuation) {\n    vs +=\n      \"    vec4 positionEC = czm_modelView * vec4(position, 1.0); \\n\" +\n      \"    float depth = -positionEC.z; \\n\" +\n      // compute SSE for this point\n      \"    gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); \\n\";\n  } else {\n    vs += \"    gl_PointSize = u_pointSize; \\n\";\n  }\n\n  vs += \"    color = color * u_highlightColor; \\n\";\n\n  if (usesNormals && normalShading) {\n    vs +=\n      \"    float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); \\n\" +\n      \"    diffuseStrength = max(diffuseStrength, 0.4); \\n\" + // Apply some ambient lighting\n      \"    color.xyz *= diffuseStrength * czm_lightColor; \\n\";\n  }\n\n  vs +=\n    \"    v_color = color; \\n\" +\n    \"    gl_Position = czm_modelViewProjection * vec4(position, 1.0); \\n\";\n\n  if (usesNormals && backFaceCulling) {\n    vs +=\n      \"    float visible = step(-normalEC.z, 0.0); \\n\" +\n      \"    gl_Position *= visible; \\n\" +\n      \"    gl_PointSize *= visible; \\n\";\n  }\n\n  if (hasShowStyle) {\n    vs +=\n      \"    gl_Position.w *= float(show); \\n\" +\n      \"    gl_PointSize *= float(show); \\n\";\n  }\n\n  vs += \"} \\n\";\n\n  let fs = \"in vec4 v_color; \\n\";\n\n  if (hasClippedContent) {\n    fs +=\n      \"uniform highp sampler2D u_clippingPlanes; \\n\" +\n      \"uniform mat4 u_clippingPlanesMatrix; \\n\" +\n      \"uniform vec4 u_clippingPlanesEdgeStyle; \\n\";\n    fs += \"\\n\";\n    fs += getClippingFunction(clippingPlanes, context);\n    fs += \"\\n\";\n  }\n\n  fs +=\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    out_FragColor = czm_gammaCorrect(v_color); \\n\";\n\n  if (hasClippedContent) {\n    fs += getClipAndStyleCode(\n      \"u_clippingPlanes\",\n      \"u_clippingPlanesMatrix\",\n      \"u_clippingPlanesEdgeStyle\",\n    );\n  }\n\n  fs += \"} \\n\";\n\n  if (pointCloud.splitDirection !== SplitDirection.NONE) {\n    fs = Splitter.modifyFragmentShader(fs);\n  }\n\n  if (defined(pointCloud._vertexShaderLoaded)) {\n    vs = pointCloud._vertexShaderLoaded(vs);\n  }\n\n  if (defined(pointCloud._fragmentShaderLoaded)) {\n    fs = pointCloud._fragmentShaderLoaded(fs);\n  }\n\n  const drawCommand = pointCloud._drawCommand;\n  if (defined(drawCommand.shaderProgram)) {\n    // Destroy the old shader\n    drawCommand.shaderProgram.destroy();\n  }\n  drawCommand.shaderProgram = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n\n  try {\n    // Check if the shader compiles correctly. If not there is likely a syntax error with the style.\n    drawCommand.shaderProgram._bind();\n  } catch (error) {\n    // Rephrase the error.\n    throw new RuntimeError(\n      \"Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.\",\n    );\n  }\n}\n\nfunction decodeDraco(pointCloud, context) {\n  if (pointCloud._decodingState === DecodingState.READY) {\n    return false;\n  }\n  if (pointCloud._decodingState === DecodingState.NEEDS_DECODE) {\n    const parsedContent = pointCloud._parsedContent;\n    const draco = parsedContent.draco;\n    const decodePromise = DracoLoader.decodePointCloud(draco, context);\n    if (defined(decodePromise)) {\n      pointCloud._decodingState = DecodingState.DECODING;\n      decodePromise\n        .then(function (result) {\n          pointCloud._decodingState = DecodingState.READY;\n          const decodedPositions = defined(result.POSITION)\n            ? result.POSITION.array\n            : undefined;\n          const decodedRgb = defined(result.RGB) ? result.RGB.array : undefined;\n          const decodedRgba = defined(result.RGBA)\n            ? result.RGBA.array\n            : undefined;\n          const decodedNormals = defined(result.NORMAL)\n            ? result.NORMAL.array\n            : undefined;\n          const decodedBatchIds = defined(result.BATCH_ID)\n            ? result.BATCH_ID.array\n            : undefined;\n          const isQuantizedDraco =\n            defined(decodedPositions) &&\n            defined(result.POSITION.data.quantization);\n          const isOctEncodedDraco =\n            defined(decodedNormals) && defined(result.NORMAL.data.quantization);\n          if (isQuantizedDraco) {\n            // Draco quantization range == quantized volume scale - size in meters of the quantized volume\n            // Internal quantized range is the range of values of the quantized data, e.g. 255 for 8-bit, 1023 for 10-bit, etc\n            const quantization = result.POSITION.data.quantization;\n            const range = quantization.range;\n            pointCloud._quantizedVolumeScale = Cartesian3.fromElements(\n              range,\n              range,\n              range,\n            );\n            pointCloud._quantizedVolumeOffset = Cartesian3.unpack(\n              quantization.minValues,\n            );\n            pointCloud._quantizedRange =\n              (1 << quantization.quantizationBits) - 1.0;\n            pointCloud._isQuantizedDraco = true;\n          }\n          if (isOctEncodedDraco) {\n            pointCloud._octEncodedRange =\n              (1 << result.NORMAL.data.quantization.quantizationBits) - 1.0;\n            pointCloud._isOctEncodedDraco = true;\n          }\n          let styleableProperties = parsedContent.styleableProperties;\n          const batchTableProperties = draco.batchTableProperties;\n          for (const name in batchTableProperties) {\n            if (batchTableProperties.hasOwnProperty(name)) {\n              const property = result[name];\n              if (!defined(styleableProperties)) {\n                styleableProperties = {};\n              }\n              styleableProperties[name] = {\n                typedArray: property.array,\n                componentCount: property.data.componentsPerAttribute,\n              };\n            }\n          }\n\n          if (defined(decodedPositions)) {\n            parsedContent.positions = {\n              typedArray: decodedPositions,\n            };\n          }\n\n          const decodedColors = decodedRgba ?? decodedRgb;\n          if (defined(decodedColors)) {\n            parsedContent.colors = {\n              typedArray: decodedColors,\n            };\n          }\n\n          if (defined(decodedNormals)) {\n            parsedContent.normals = {\n              typedArray: decodedNormals,\n            };\n          }\n\n          if (defined(decodedBatchIds)) {\n            parsedContent.batchIds = {\n              typedArray: decodedBatchIds,\n            };\n          }\n\n          parsedContent.styleableProperties = styleableProperties;\n        })\n        .catch(function (error) {\n          pointCloud._decodingState = DecodingState.FAILED;\n          pointCloud._error = error;\n        });\n    }\n  }\n  return true;\n}\n\nconst scratchComputedTranslation = new Cartesian4();\nconst scratchScale = new Cartesian3();\n\nPointCloud.prototype.update = function (frameState) {\n  const context = frameState.context;\n\n  if (defined(this._error)) {\n    const error = this._error;\n    this._error = undefined;\n    throw error;\n  }\n\n  const decoding = decodeDraco(this, context);\n  if (decoding) {\n    return;\n  }\n\n  let shadersDirty = false;\n  let modelMatrixDirty = !Matrix4.equals(this._modelMatrix, this.modelMatrix);\n\n  if (this._mode !== frameState.mode) {\n    this._mode = frameState.mode;\n    modelMatrixDirty = true;\n  }\n\n  if (!defined(this._drawCommand)) {\n    createResources(this, frameState);\n    modelMatrixDirty = true;\n    shadersDirty = true;\n    this._ready = true;\n    this._parsedContent = undefined; // Unload\n  }\n\n  if (modelMatrixDirty) {\n    Matrix4.clone(this.modelMatrix, this._modelMatrix);\n    const modelMatrix = this._drawCommand.modelMatrix;\n    Matrix4.clone(this._modelMatrix, modelMatrix);\n\n    if (defined(this._rtcCenter)) {\n      Matrix4.multiplyByTranslation(modelMatrix, this._rtcCenter, modelMatrix);\n    }\n    if (defined(this._quantizedVolumeOffset)) {\n      Matrix4.multiplyByTranslation(\n        modelMatrix,\n        this._quantizedVolumeOffset,\n        modelMatrix,\n      );\n    }\n\n    if (frameState.mode !== SceneMode.SCENE3D) {\n      const projection = frameState.mapProjection;\n      const translation = Matrix4.getColumn(\n        modelMatrix,\n        3,\n        scratchComputedTranslation,\n      );\n      if (!Cartesian4.equals(translation, Cartesian4.UNIT_W)) {\n        Transforms.basisTo2D(projection, modelMatrix, modelMatrix);\n      }\n    }\n\n    const boundingSphere = this._drawCommand.boundingVolume;\n    BoundingSphere.clone(this._boundingSphere, boundingSphere);\n\n    if (this._cull) {\n      const center = boundingSphere.center;\n      Matrix4.multiplyByPoint(modelMatrix, center, center);\n      const scale = Matrix4.getScale(modelMatrix, scratchScale);\n      boundingSphere.radius *= Cartesian3.maximumComponent(scale);\n    }\n  }\n\n  if (this.clippingPlanesDirty) {\n    this.clippingPlanesDirty = false;\n    shadersDirty = true;\n  }\n\n  if (this._attenuation !== this.attenuation) {\n    this._attenuation = this.attenuation;\n    shadersDirty = true;\n  }\n\n  if (this.backFaceCulling !== this._backFaceCulling) {\n    this._backFaceCulling = this.backFaceCulling;\n    shadersDirty = true;\n  }\n\n  if (this.normalShading !== this._normalShading) {\n    this._normalShading = this.normalShading;\n    shadersDirty = true;\n  }\n\n  if (this._style !== this.style || this.styleDirty) {\n    this._style = this.style;\n    this.styleDirty = false;\n    shadersDirty = true;\n  }\n\n  const splittingEnabled = this.splitDirection !== SplitDirection.NONE;\n  if (this._splittingEnabled !== splittingEnabled) {\n    this._splittingEnabled = splittingEnabled;\n    shadersDirty = true;\n  }\n\n  if (shadersDirty) {\n    createShaders(this, frameState, this._style);\n  }\n\n  this._drawCommand.castShadows = ShadowMode.castShadows(this.shadows);\n  this._drawCommand.receiveShadows = ShadowMode.receiveShadows(this.shadows);\n\n  // Update the render state\n  const isTranslucent =\n    this._highlightColor.alpha < 1.0 ||\n    this._constantColor.alpha < 1.0 ||\n    this._styleTranslucent;\n  this._drawCommand.renderState = isTranslucent\n    ? this._translucentRenderState\n    : this._opaqueRenderState;\n  this._drawCommand.pass = isTranslucent ? Pass.TRANSLUCENT : this._opaquePass;\n\n  const commandList = frameState.commandList;\n\n  const passes = frameState.passes;\n  if (passes.render || passes.pick) {\n    commandList.push(this._drawCommand);\n  }\n};\n\nPointCloud.prototype.isDestroyed = function () {\n  return false;\n};\n\nPointCloud.prototype.destroy = function () {\n  const command = this._drawCommand;\n  if (defined(command)) {\n    command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n    command.shaderProgram =\n      command.shaderProgram && command.shaderProgram.destroy();\n  }\n  return destroyObject(this);\n};\nexport default PointCloud;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport BlendingState from \"../Scene/BlendingState.js\";\nimport StencilConstants from \"../Scene/StencilConstants.js\";\nimport PointCloudEyeDomeLightingShader from \"../Shaders/PostProcessStages/PointCloudEyeDomeLighting.js\";\n\n/**\n * Eye dome lighting. Does not support points with per-point translucency, but does allow translucent styling against the globe.\n * Requires support for EXT_frag_depth and WEBGL_draw_buffers extensions in WebGL 1.0.\n *\n * @private\n */\nfunction PointCloudEyeDomeLighting() {\n  this._framebuffer = new FramebufferManager({\n    colorAttachmentsLength: 2,\n    depth: true,\n    supportsDepthTexture: true,\n  });\n\n  this._drawCommand = undefined;\n  this._clearCommand = undefined;\n\n  this._strength = 1.0;\n  this._radius = 1.0;\n}\n\nObject.defineProperties(PointCloudEyeDomeLighting.prototype, {\n  framebuffer: {\n    get: function () {\n      return this._framebuffer.framebuffer;\n    },\n  },\n  colorGBuffer: {\n    get: function () {\n      return this._framebuffer.getColorTexture(0);\n    },\n  },\n  depthGBuffer: {\n    get: function () {\n      return this._framebuffer.getColorTexture(1);\n    },\n  },\n});\n\nfunction destroyFramebuffer(processor) {\n  processor._framebuffer.destroy();\n  processor._drawCommand = undefined;\n  processor._clearCommand = undefined;\n}\n\nconst distanceAndEdlStrengthScratch = new Cartesian2();\n\nfunction createCommands(processor, context) {\n  const blendFS = new ShaderSource({\n    defines: [\"LOG_DEPTH_WRITE\"],\n    sources: [PointCloudEyeDomeLightingShader],\n  });\n\n  const blendUniformMap = {\n    u_pointCloud_colorGBuffer: function () {\n      return processor.colorGBuffer;\n    },\n    u_pointCloud_depthGBuffer: function () {\n      return processor.depthGBuffer;\n    },\n    u_distanceAndEdlStrength: function () {\n      distanceAndEdlStrengthScratch.x = processor._radius;\n      distanceAndEdlStrengthScratch.y = processor._strength;\n      return distanceAndEdlStrengthScratch;\n    },\n  };\n\n  const blendRenderState = RenderState.fromCache({\n    blending: BlendingState.ALPHA_BLEND,\n    depthMask: true,\n    depthTest: {\n      enabled: true,\n    },\n    stencilTest: StencilConstants.setCesium3DTileBit(),\n    stencilMask: StencilConstants.CESIUM_3D_TILE_MASK,\n  });\n\n  processor._drawCommand = context.createViewportQuadCommand(blendFS, {\n    uniformMap: blendUniformMap,\n    renderState: blendRenderState,\n    pass: Pass.CESIUM_3D_TILE,\n    owner: processor,\n  });\n\n  processor._clearCommand = new ClearCommand({\n    framebuffer: processor.framebuffer,\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    depth: 1.0,\n    renderState: RenderState.fromCache(),\n    pass: Pass.CESIUM_3D_TILE,\n    owner: processor,\n  });\n}\n\nfunction createResources(processor, context) {\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight;\n  processor._framebuffer.update(context, width, height);\n  createCommands(processor, context);\n}\n\nfunction isSupported(context) {\n  return context.drawBuffers && context.fragmentDepth;\n}\n\nPointCloudEyeDomeLighting.isSupported = isSupported;\n\nfunction getECShaderProgram(context, shaderProgram) {\n  let shader = context.shaderCache.getDerivedShaderProgram(shaderProgram, \"EC\");\n  if (!defined(shader)) {\n    const attributeLocations = shaderProgram._attributeLocations;\n\n    const fs = shaderProgram.fragmentShaderSource.clone();\n\n    fs.sources.splice(\n      0,\n      0,\n      `layout (location = 0) out vec4 out_FragData_0;\\nlayout (location = 1) out vec4 out_FragData_1;`,\n    );\n\n    fs.sources = fs.sources.map(function (source) {\n      source = ShaderSource.replaceMain(\n        source,\n        \"czm_point_cloud_post_process_main\",\n      );\n      source = source.replaceAll(/out_FragColor/g, \"out_FragData_0\");\n      return source;\n    });\n\n    fs.sources.push(\n      \"void main() \\n\" +\n        \"{ \\n\" +\n        \"    czm_point_cloud_post_process_main(); \\n\" +\n        \"#ifdef LOG_DEPTH\\n\" +\n        \"    czm_writeLogDepth();\\n\" +\n        \"    out_FragData_1 = czm_packDepth(gl_FragDepth); \\n\" +\n        \"#else\\n\" +\n        \"    out_FragData_1 = czm_packDepth(gl_FragCoord.z);\\n\" +\n        \"#endif\\n\" +\n        \"}\",\n    );\n\n    shader = context.shaderCache.createDerivedShaderProgram(\n      shaderProgram,\n      \"EC\",\n      {\n        vertexShaderSource: shaderProgram.vertexShaderSource,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      },\n    );\n  }\n\n  return shader;\n}\n\nPointCloudEyeDomeLighting.prototype.update = function (\n  frameState,\n  commandStart,\n  pointCloudShading,\n  boundingVolume,\n) {\n  if (!isSupported(frameState.context)) {\n    return;\n  }\n\n  this._strength = pointCloudShading.eyeDomeLightingStrength;\n  this._radius =\n    pointCloudShading.eyeDomeLightingRadius * frameState.pixelRatio;\n\n  createResources(this, frameState.context);\n\n  // Hijack existing point commands to render into an offscreen FBO.\n  let i;\n  const commandList = frameState.commandList;\n  const commandEnd = commandList.length;\n\n  for (i = commandStart; i < commandEnd; ++i) {\n    const command = commandList[i];\n    if (\n      command.primitiveType !== PrimitiveType.POINTS ||\n      command.pass === Pass.TRANSLUCENT\n    ) {\n      continue;\n    }\n\n    let derivedCommand;\n    let originalShaderProgram;\n\n    let derivedCommandObject = command.derivedCommands.pointCloudProcessor;\n    if (defined(derivedCommandObject)) {\n      derivedCommand = derivedCommandObject.command;\n      originalShaderProgram = derivedCommandObject.originalShaderProgram;\n    }\n\n    if (\n      !defined(derivedCommand) ||\n      command.dirty ||\n      originalShaderProgram !== command.shaderProgram ||\n      derivedCommand.framebuffer !== this.framebuffer\n    ) {\n      // Prevent crash when tiles out-of-view come in-view during context size change or\n      // when the underlying shader changes while EDL is disabled\n      derivedCommand = DrawCommand.shallowClone(command, derivedCommand);\n      derivedCommand.framebuffer = this.framebuffer;\n      derivedCommand.shaderProgram = getECShaderProgram(\n        frameState.context,\n        command.shaderProgram,\n      );\n      derivedCommand.castShadows = false;\n      derivedCommand.receiveShadows = false;\n\n      if (!defined(derivedCommandObject)) {\n        derivedCommandObject = {\n          command: derivedCommand,\n          originalShaderProgram: command.shaderProgram,\n        };\n        command.derivedCommands.pointCloudProcessor = derivedCommandObject;\n      }\n\n      derivedCommandObject.originalShaderProgram = command.shaderProgram;\n    }\n\n    commandList[i] = derivedCommand;\n  }\n\n  const clearCommand = this._clearCommand;\n  const blendCommand = this._drawCommand;\n\n  blendCommand.boundingVolume = boundingVolume;\n\n  // Blend EDL into the main FBO\n  commandList.push(blendCommand);\n  commandList.push(clearCommand);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PointCloudEyeDomeLighting#destroy\n */\nPointCloudEyeDomeLighting.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * processor = processor && processor.destroy();\n *\n * @see PointCloudEyeDomeLighting#isDestroyed\n */\nPointCloudEyeDomeLighting.prototype.destroy = function () {\n  destroyFramebuffer(this);\n  return destroyObject(this);\n};\nexport default PointCloudEyeDomeLighting;\n","import PointCloudEyeDomeLighting from \"./PointCloudEyeDomeLighting.js\";\n\n/**\n * Options for performing point attenuation based on geometric error when rendering\n * point clouds using 3D Tiles.\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.attenuation=false] Perform point attenuation based on geometric error.\n * @param {number} [options.geometricErrorScale=1.0] Scale to be applied to each tile's geometric error.\n * @param {number} [options.maximumAttenuation] Maximum attenuation in pixels. Defaults to the Cesium3DTileset's maximumScreenSpaceError.\n * @param {number} [options.baseResolution] Average base resolution for the dataset in meters. Substitute for Geometric Error when not available.\n * @param {boolean} [options.eyeDomeLighting=true] When true, use eye dome lighting when drawing with point attenuation.\n * @param {number} [options.eyeDomeLightingStrength=1.0] Increasing this value increases contrast on slopes and edges.\n * @param {number} [options.eyeDomeLightingRadius=1.0] Increase the thickness of contours from eye dome lighting.\n * @param {boolean} [options.backFaceCulling=false] Determines whether back-facing points are hidden. This option works only if data has normals included.\n * @param {boolean} [options.normalShading=true] Determines whether a point cloud that contains normals is shaded by the scene's light source.\n *\n * @alias PointCloudShading\n * @constructor\n */\nfunction PointCloudShading(options) {\n  const pointCloudShading = options ?? {};\n\n  /**\n   * Perform point attenuation based on geometric error.\n   * @type {boolean}\n   * @default false\n   */\n  this.attenuation = pointCloudShading.attenuation ?? false;\n\n  /**\n   * Scale to be applied to the geometric error before computing attenuation.\n   * @type {number}\n   * @default 1.0\n   */\n  this.geometricErrorScale = pointCloudShading.geometricErrorScale ?? 1.0;\n\n  /**\n   * Maximum point attenuation in pixels. If undefined, the Cesium3DTileset's maximumScreenSpaceError will be used.\n   * @type {number}\n   */\n  this.maximumAttenuation = pointCloudShading.maximumAttenuation;\n\n  /**\n   * Average base resolution for the dataset in meters.\n   * Used in place of geometric error when geometric error is 0.\n   * If undefined, an approximation will be computed for each tile that has geometric error of 0.\n   * @type {number}\n   */\n  this.baseResolution = pointCloudShading.baseResolution;\n\n  /**\n   * Use eye dome lighting when drawing with point attenuation\n   * Requires support for EXT_frag_depth, OES_texture_float, and WEBGL_draw_buffers extensions in WebGL 1.0,\n   * otherwise eye dome lighting is ignored.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.eyeDomeLighting = pointCloudShading.eyeDomeLighting ?? true;\n\n  /**\n   * Eye dome lighting strength (apparent contrast)\n   * @type {number}\n   * @default 1.0\n   */\n  this.eyeDomeLightingStrength =\n    pointCloudShading.eyeDomeLightingStrength ?? 1.0;\n\n  /**\n   * Thickness of contours from eye dome lighting\n   * @type {number}\n   * @default 1.0\n   */\n  this.eyeDomeLightingRadius = pointCloudShading.eyeDomeLightingRadius ?? 1.0;\n\n  /**\n   * Determines whether back-facing points are hidden.\n   * This option works only if data has normals included.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.backFaceCulling = pointCloudShading.backFaceCulling ?? false;\n\n  /**\n   * Determines whether a point cloud that contains normals is shaded by the scene's light source.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.normalShading = pointCloudShading.normalShading ?? true;\n}\n\n/**\n * Determines if point cloud shading is supported.\n *\n * @param {Scene} scene The scene.\n * @returns {boolean} <code>true</code> if point cloud shading is supported; otherwise, returns <code>false</code>\n */\nPointCloudShading.isSupported = function (scene) {\n  return PointCloudEyeDomeLighting.isSupported(scene.context);\n};\nexport default PointCloudShading;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport SplitDirection from \"./SplitDirection.js\";\n\n/**\n * <div class=\"notice\">\n * A point is created and its initial properties are set by calling {@link PointPrimitiveCollection#add}. Do not call the constructor directly.\n * </div>\n * A graphical point positioned in the 3D scene, that is created\n * and rendered using a {@link PointPrimitiveCollection}.\n *\n * @alias PointPrimitive\n *\n * @performance Reading a property, e.g., {@link PointPrimitive#show}, is constant time.\n * Assigning to a property is constant time but results in\n * CPU to GPU traffic when {@link PointPrimitiveCollection#update} is called.  The per-pointPrimitive traffic is\n * the same regardless of how many properties were updated.  If most pointPrimitives in a collection need to be\n * updated, it may be more efficient to clear the collection with {@link PointPrimitiveCollection#removeAll}\n * and add new pointPrimitives instead of modifying each one.\n *\n * @exception {DeveloperError} scaleByDistance.far must be greater than scaleByDistance.near\n * @exception {DeveloperError} translucencyByDistance.far must be greater than translucencyByDistance.near\n * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near\n *\n * @see PointPrimitiveCollection\n * @see PointPrimitiveCollection#add\n *\n * @internalConstructor\n * @class\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=points|Cesium Sandcastle Points Demo}\n */\nfunction PointPrimitive(options, pointPrimitiveCollection) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    defined(options.disableDepthTestDistance) &&\n    options.disableDepthTestDistance < 0.0\n  ) {\n    throw new DeveloperError(\n      \"disableDepthTestDistance must be greater than or equal to 0.0.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let translucencyByDistance = options.translucencyByDistance;\n  let scaleByDistance = options.scaleByDistance;\n  let distanceDisplayCondition = options.distanceDisplayCondition;\n  if (defined(translucencyByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (translucencyByDistance.far <= translucencyByDistance.near) {\n      throw new DeveloperError(\n        \"translucencyByDistance.far must be greater than translucencyByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    translucencyByDistance = NearFarScalar.clone(translucencyByDistance);\n  }\n  if (defined(scaleByDistance)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (scaleByDistance.far <= scaleByDistance.near) {\n      throw new DeveloperError(\n        \"scaleByDistance.far must be greater than scaleByDistance.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    scaleByDistance = NearFarScalar.clone(scaleByDistance);\n  }\n  if (defined(distanceDisplayCondition)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {\n      throw new DeveloperError(\n        \"distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.\",\n      );\n    }\n    //>>includeEnd('debug');\n    distanceDisplayCondition = DistanceDisplayCondition.clone(\n      distanceDisplayCondition,\n    );\n  }\n\n  this._show = options.show ?? true;\n  this._position = Cartesian3.clone(options.position ?? Cartesian3.ZERO);\n  this._actualPosition = Cartesian3.clone(this._position); // For columbus view and 2D\n  this._color = Color.clone(options.color ?? Color.WHITE);\n  this._outlineColor = Color.clone(options.outlineColor ?? Color.TRANSPARENT);\n  this._outlineWidth = options.outlineWidth ?? 0.0;\n  this._pixelSize = options.pixelSize ?? 10.0;\n  this._scaleByDistance = scaleByDistance;\n  this._translucencyByDistance = translucencyByDistance;\n  this._distanceDisplayCondition = distanceDisplayCondition;\n  this._disableDepthTestDistance = options.disableDepthTestDistance ?? 0.0;\n  this._id = options.id;\n  this._collection = options.collection ?? pointPrimitiveCollection;\n\n  this._clusterShow = true;\n\n  this._pickId = undefined;\n  this._pointPrimitiveCollection = pointPrimitiveCollection;\n  this._dirty = false;\n  this._index = -1; //Used only by PointPrimitiveCollection\n\n  this._splitDirection = options.splitDirection ?? SplitDirection.NONE;\n}\n\nconst SHOW_INDEX = (PointPrimitive.SHOW_INDEX = 0);\nconst POSITION_INDEX = (PointPrimitive.POSITION_INDEX = 1);\nconst COLOR_INDEX = (PointPrimitive.COLOR_INDEX = 2);\nconst OUTLINE_COLOR_INDEX = (PointPrimitive.OUTLINE_COLOR_INDEX = 3);\nconst OUTLINE_WIDTH_INDEX = (PointPrimitive.OUTLINE_WIDTH_INDEX = 4);\nconst PIXEL_SIZE_INDEX = (PointPrimitive.PIXEL_SIZE_INDEX = 5);\nconst SCALE_BY_DISTANCE_INDEX = (PointPrimitive.SCALE_BY_DISTANCE_INDEX = 6);\nconst TRANSLUCENCY_BY_DISTANCE_INDEX =\n  (PointPrimitive.TRANSLUCENCY_BY_DISTANCE_INDEX = 7);\nconst DISTANCE_DISPLAY_CONDITION_INDEX =\n  (PointPrimitive.DISTANCE_DISPLAY_CONDITION_INDEX = 8);\nconst DISABLE_DEPTH_DISTANCE_INDEX =\n  (PointPrimitive.DISABLE_DEPTH_DISTANCE_INDEX = 9);\nconst SPLIT_DIRECTION_INDEX = (PointPrimitive.SPLIT_DIRECTION_INDEX = 10);\nPointPrimitive.NUMBER_OF_PROPERTIES = 11;\n\nfunction makeDirty(pointPrimitive, propertyChanged) {\n  const pointPrimitiveCollection = pointPrimitive._pointPrimitiveCollection;\n  if (defined(pointPrimitiveCollection)) {\n    pointPrimitiveCollection._updatePointPrimitive(\n      pointPrimitive,\n      propertyChanged,\n    );\n    pointPrimitive._dirty = true;\n  }\n}\n\nObject.defineProperties(PointPrimitive.prototype, {\n  /**\n   * Determines if this point will be shown.  Use this to hide or show a point, instead\n   * of removing it and re-adding it to the collection.\n   * @memberof PointPrimitive.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._show !== value) {\n        this._show = value;\n        makeDirty(this, SHOW_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the Cartesian position of this point.\n   * @memberof PointPrimitive.prototype\n   * @type {Cartesian3}\n   */\n  position: {\n    get: function () {\n      return this._position;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const position = this._position;\n      if (!Cartesian3.equals(position, value)) {\n        Cartesian3.clone(value, position);\n        Cartesian3.clone(value, this._actualPosition);\n\n        makeDirty(this, POSITION_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far scaling properties of a point based on the point's distance from the camera.\n   * A point's scale will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the point's scale remains clamped to the nearest bound.  This scale\n   * multiplies the pixelSize and outlineWidth to affect the total size of the point.  If undefined,\n   * scaleByDistance will be disabled.\n   * @memberof PointPrimitive.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a pointPrimitive's scaleByDistance to scale to 15 when the\n   * // camera is 1500 meters from the pointPrimitive and disappear as\n   * // the camera distance approaches 8.0e6 meters.\n   * p.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 15, 8.0e6, 0.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable scaling by distance\n   * p.scaleByDistance = undefined;\n   */\n  scaleByDistance: {\n    get: function () {\n      return this._scaleByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const scaleByDistance = this._scaleByDistance;\n      if (!NearFarScalar.equals(scaleByDistance, value)) {\n        this._scaleByDistance = NearFarScalar.clone(value, scaleByDistance);\n        makeDirty(this, SCALE_BY_DISTANCE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets near and far translucency properties of a point based on the point's distance from the camera.\n   * A point's translucency will interpolate between the {@link NearFarScalar#nearValue} and\n   * {@link NearFarScalar#farValue} while the camera distance falls within the lower and upper bounds\n   * of the specified {@link NearFarScalar#near} and {@link NearFarScalar#far}.\n   * Outside of these ranges the point's translucency remains clamped to the nearest bound.  If undefined,\n   * translucencyByDistance will be disabled.\n   * @memberof PointPrimitive.prototype\n   * @type {NearFarScalar}\n   *\n   * @example\n   * // Example 1.\n   * // Set a point's translucency to 1.0 when the\n   * // camera is 1500 meters from the point and disappear as\n   * // the camera distance approaches 8.0e6 meters.\n   * p.translucencyByDistance = new Cesium.NearFarScalar(1.5e2, 1.0, 8.0e6, 0.0);\n   *\n   * @example\n   * // Example 2.\n   * // disable translucency by distance\n   * p.translucencyByDistance = undefined;\n   */\n  translucencyByDistance: {\n    get: function () {\n      return this._translucencyByDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      const translucencyByDistance = this._translucencyByDistance;\n      if (!NearFarScalar.equals(translucencyByDistance, value)) {\n        this._translucencyByDistance = NearFarScalar.clone(\n          value,\n          translucencyByDistance,\n        );\n        makeDirty(this, TRANSLUCENCY_BY_DISTANCE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the inner size of the point in pixels.\n   * @memberof PointPrimitive.prototype\n   * @type {number}\n   */\n  pixelSize: {\n    get: function () {\n      return this._pixelSize;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._pixelSize !== value) {\n        this._pixelSize = value;\n        makeDirty(this, PIXEL_SIZE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the inner color of the point.\n   * The red, green, blue, and alpha values are indicated by <code>value</code>'s <code>red</code>, <code>green</code>,\n   * <code>blue</code>, and <code>alpha</code> properties as shown in Example 1.  These components range from <code>0.0</code>\n   * (no intensity) to <code>1.0</code> (full intensity).\n   * @memberof PointPrimitive.prototype\n   * @type {Color}\n   *\n   * @example\n   * // Example 1. Assign yellow.\n   * p.color = Cesium.Color.YELLOW;\n   *\n   * @example\n   * // Example 2. Make a pointPrimitive 50% translucent.\n   * p.color = new Cesium.Color(1.0, 1.0, 1.0, 0.5);\n   */\n  color: {\n    get: function () {\n      return this._color;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const color = this._color;\n      if (!Color.equals(color, value)) {\n        Color.clone(value, color);\n        makeDirty(this, COLOR_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the outline color of the point.\n   * @memberof PointPrimitive.prototype\n   * @type {Color}\n   */\n  outlineColor: {\n    get: function () {\n      return this._outlineColor;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const outlineColor = this._outlineColor;\n      if (!Color.equals(outlineColor, value)) {\n        Color.clone(value, outlineColor);\n        makeDirty(this, OUTLINE_COLOR_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the outline width in pixels.  This width adds to pixelSize,\n   * increasing the total size of the point.\n   * @memberof PointPrimitive.prototype\n   * @type {number}\n   */\n  outlineWidth: {\n    get: function () {\n      return this._outlineWidth;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._outlineWidth !== value) {\n        this._outlineWidth = value;\n        makeDirty(this, OUTLINE_WIDTH_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the condition specifying at what distance from the camera that this point will be displayed.\n   * @memberof PointPrimitive.prototype\n   * @type {DistanceDisplayCondition}\n   * @default undefined\n   */\n  distanceDisplayCondition: {\n    get: function () {\n      return this._distanceDisplayCondition;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\"far must be greater than near\");\n      }\n      //>>includeEnd('debug');\n      if (\n        !DistanceDisplayCondition.equals(this._distanceDisplayCondition, value)\n      ) {\n        this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n          value,\n          this._distanceDisplayCondition,\n        );\n        makeDirty(this, DISTANCE_DISPLAY_CONDITION_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the distance from the camera at which to disable the depth test to, for example, prevent clipping against terrain.\n   * When set to zero, the depth test is always applied. When set to Number.POSITIVE_INFINITY, the depth test is never applied.\n   * @memberof PointPrimitive.prototype\n   * @type {number}\n   * @default 0.0\n   */\n  disableDepthTestDistance: {\n    get: function () {\n      return this._disableDepthTestDistance;\n    },\n    set: function (value) {\n      if (this._disableDepthTestDistance !== value) {\n        //>>includeStart('debug', pragmas.debug);\n        if (!defined(value) || value < 0.0) {\n          throw new DeveloperError(\n            \"disableDepthTestDistance must be greater than or equal to 0.0.\",\n          );\n        }\n        //>>includeEnd('debug');\n        this._disableDepthTestDistance = value;\n        makeDirty(this, DISABLE_DEPTH_DISTANCE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the user-defined value returned when the point is picked.\n   * @memberof PointPrimitive.prototype\n   * @type {*}\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n    set: function (value) {\n      this._id = value;\n      if (defined(this._pickId)) {\n        this._pickId.object.id = value;\n      }\n    },\n  },\n\n  /**\n   * @private\n   */\n  pickId: {\n    get: function () {\n      return this._pickId;\n    },\n  },\n\n  /**\n   * Determines whether or not this point will be shown or hidden because it was clustered.\n   * @memberof PointPrimitive.prototype\n   * @type {boolean}\n   * @private\n   */\n  clusterShow: {\n    get: function () {\n      return this._clusterShow;\n    },\n    set: function (value) {\n      if (this._clusterShow !== value) {\n        this._clusterShow = value;\n        makeDirty(this, SHOW_INDEX);\n      }\n    },\n  },\n\n  /**\n   * The {@link SplitDirection} to apply to this point.\n   * @memberof PointPrimitive.prototype\n   * @type {SplitDirection}\n   * @default {@link SplitDirection.NONE}\n   */\n  splitDirection: {\n    get: function () {\n      return this._splitDirection;\n    },\n    set: function (value) {\n      if (this._splitDirection !== value) {\n        this._splitDirection = value;\n        makeDirty(this, SPLIT_DIRECTION_INDEX);\n      }\n    },\n  },\n});\n\nPointPrimitive.prototype.getPickId = function (context) {\n  if (!defined(this._pickId)) {\n    this._pickId = context.createPickId({\n      primitive: this,\n      collection: this._collection,\n      id: this._id,\n    });\n  }\n\n  return this._pickId;\n};\n\nPointPrimitive.prototype._getActualPosition = function () {\n  return this._actualPosition;\n};\n\nPointPrimitive.prototype._setActualPosition = function (value) {\n  Cartesian3.clone(value, this._actualPosition);\n  makeDirty(this, POSITION_INDEX);\n};\n\nconst tempCartesian3 = new Cartesian4();\nPointPrimitive._computeActualPosition = function (\n  position,\n  frameState,\n  modelMatrix,\n) {\n  if (frameState.mode === SceneMode.SCENE3D) {\n    return position;\n  }\n\n  Matrix4.multiplyByPoint(modelMatrix, position, tempCartesian3);\n  return SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    tempCartesian3,\n  );\n};\n\nconst scratchCartesian4 = new Cartesian4();\n\n// This function is basically a stripped-down JavaScript version of PointPrimitiveCollectionVS.glsl\nPointPrimitive._computeScreenSpacePosition = function (\n  modelMatrix,\n  position,\n  scene,\n  result,\n) {\n  // Model to world coordinates\n  const positionWorld = Matrix4.multiplyByVector(\n    modelMatrix,\n    Cartesian4.fromElements(\n      position.x,\n      position.y,\n      position.z,\n      1,\n      scratchCartesian4,\n    ),\n    scratchCartesian4,\n  );\n  const positionWC = SceneTransforms.worldToWindowCoordinates(\n    scene,\n    positionWorld,\n    result,\n  );\n  return positionWC;\n};\n\n/**\n * Computes the screen-space position of the point's origin.\n * The screen space origin is the top, left corner of the canvas; <code>x</code> increases from\n * left to right, and <code>y</code> increases from top to bottom.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian2} [result] The object onto which to store the result.\n * @returns {Cartesian2} The screen-space position of the point.\n *\n * @exception {DeveloperError} PointPrimitive must be in a collection.\n *\n * @example\n * console.log(p.computeScreenSpacePosition(scene).toString());\n */\nPointPrimitive.prototype.computeScreenSpacePosition = function (scene, result) {\n  const pointPrimitiveCollection = this._pointPrimitiveCollection;\n  if (!defined(result)) {\n    result = new Cartesian2();\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(pointPrimitiveCollection)) {\n    throw new DeveloperError(\"PointPrimitive must be in a collection.\");\n  }\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const modelMatrix = pointPrimitiveCollection.modelMatrix;\n  const windowCoordinates = PointPrimitive._computeScreenSpacePosition(\n    modelMatrix,\n    this._actualPosition,\n    scene,\n    result,\n  );\n  if (!defined(windowCoordinates)) {\n    return undefined;\n  }\n\n  windowCoordinates.y = scene.canvas.clientHeight - windowCoordinates.y;\n  return windowCoordinates;\n};\n\n/**\n * Gets a point's screen space bounding box centered around screenSpacePosition.\n * @param {PointPrimitive} point The point to get the screen space bounding box for.\n * @param {Cartesian2} screenSpacePosition The screen space center of the label.\n * @param {BoundingRectangle} [result] The object onto which to store the result.\n * @returns {BoundingRectangle} The screen space bounding box.\n *\n * @private\n */\nPointPrimitive.getScreenSpaceBoundingBox = function (\n  point,\n  screenSpacePosition,\n  result,\n) {\n  const size = point.pixelSize;\n  const halfSize = size * 0.5;\n\n  const x = screenSpacePosition.x - halfSize;\n  const y = screenSpacePosition.y - halfSize;\n  const width = size;\n  const height = size;\n\n  if (!defined(result)) {\n    result = new BoundingRectangle();\n  }\n\n  result.x = x;\n  result.y = y;\n  result.width = width;\n  result.height = height;\n\n  return result;\n};\n\n/**\n * Determines if this point equals another point.  Points are equal if all their properties\n * are equal.  Points in different collections can be equal.\n *\n * @param {PointPrimitive} [other] The point to compare for equality.\n * @returns {boolean} <code>true</code> if the points are equal; otherwise, <code>false</code>.\n */\nPointPrimitive.prototype.equals = function (other) {\n  return (\n    this === other ||\n    (defined(other) &&\n      this._id === other._id &&\n      Cartesian3.equals(this._position, other._position) &&\n      Color.equals(this._color, other._color) &&\n      this._pixelSize === other._pixelSize &&\n      this._outlineWidth === other._outlineWidth &&\n      this._show === other._show &&\n      Color.equals(this._outlineColor, other._outlineColor) &&\n      NearFarScalar.equals(this._scaleByDistance, other._scaleByDistance) &&\n      NearFarScalar.equals(\n        this._translucencyByDistance,\n        other._translucencyByDistance,\n      ) &&\n      DistanceDisplayCondition.equals(\n        this._distanceDisplayCondition,\n        other._distanceDisplayCondition,\n      ) &&\n      this._disableDepthTestDistance === other._disableDepthTestDistance &&\n      this._splitDirection === other._splitDirection)\n  );\n};\n\nPointPrimitive.prototype._destroy = function () {\n  this._pickId = this._pickId && this._pickId.destroy();\n  this._pointPrimitiveCollection = undefined;\n};\nexport default PointPrimitive;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArrayFacade from \"../Renderer/VertexArrayFacade.js\";\nimport PointPrimitiveCollectionFS from \"../Shaders/PointPrimitiveCollectionFS.js\";\nimport PointPrimitiveCollectionVS from \"../Shaders/PointPrimitiveCollectionVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport BlendOption from \"./BlendOption.js\";\nimport PointPrimitive from \"./PointPrimitive.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport AttributeCompression from \"../Core/AttributeCompression.js\";\n\nconst SHOW_INDEX = PointPrimitive.SHOW_INDEX;\nconst POSITION_INDEX = PointPrimitive.POSITION_INDEX;\nconst COLOR_INDEX = PointPrimitive.COLOR_INDEX;\nconst OUTLINE_COLOR_INDEX = PointPrimitive.OUTLINE_COLOR_INDEX;\nconst OUTLINE_WIDTH_INDEX = PointPrimitive.OUTLINE_WIDTH_INDEX;\nconst PIXEL_SIZE_INDEX = PointPrimitive.PIXEL_SIZE_INDEX;\nconst SCALE_BY_DISTANCE_INDEX = PointPrimitive.SCALE_BY_DISTANCE_INDEX;\nconst TRANSLUCENCY_BY_DISTANCE_INDEX =\n  PointPrimitive.TRANSLUCENCY_BY_DISTANCE_INDEX;\nconst DISTANCE_DISPLAY_CONDITION_INDEX =\n  PointPrimitive.DISTANCE_DISPLAY_CONDITION_INDEX;\nconst DISABLE_DEPTH_DISTANCE_INDEX =\n  PointPrimitive.DISABLE_DEPTH_DISTANCE_INDEX;\nconst SPLIT_DIRECTION_INDEX = PointPrimitive.SPLIT_DIRECTION_INDEX;\nconst NUMBER_OF_PROPERTIES = PointPrimitive.NUMBER_OF_PROPERTIES;\n\nconst attributeLocations = {\n  positionHighAndSize: 0,\n  positionLowAndOutline: 1,\n  compressedAttribute0: 2, // color, outlineColor, pick color\n  compressedAttribute1: 3, // show, translucency by distance, some free space\n  scaleByDistance: 4,\n  distanceDisplayConditionAndDisableDepthAndSplitDirection: 5,\n};\n\n/**\n * A renderable collection of points.\n * <br /><br />\n * Points are added and removed from the collection using {@link PointPrimitiveCollection#add}\n * and {@link PointPrimitiveCollection#remove}.\n *\n * @alias PointPrimitiveCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each point from model to world coordinates.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {BlendOption} [options.blendOption=BlendOption.OPAQUE_AND_TRANSLUCENT] The point blending option. The default\n * is used for rendering both opaque and translucent points. However, if either all of the points are completely opaque or all are completely translucent,\n * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve performance by up to 2x.\n * @param {boolean} [options.show=true] Determines if the primitives in the collection will be shown.\n *\n * @performance For best performance, prefer a few collections, each with many points, to\n * many collections with only a few points each.  Organize collections so that points\n * with the same update frequency are in the same collection, i.e., points that do not\n * change should be in one collection; points that change every frame should be in another\n * collection; and so on.\n *\n *\n * @example\n * // Create a pointPrimitive collection with two points\n * const points = scene.primitives.add(new Cesium.PointPrimitiveCollection());\n * points.add({\n *   position : new Cesium.Cartesian3(1.0, 2.0, 3.0),\n *   color : Cesium.Color.YELLOW\n * });\n * points.add({\n *   position : new Cesium.Cartesian3(4.0, 5.0, 6.0),\n *   color : Cesium.Color.CYAN\n * });\n *\n * @see PointPrimitiveCollection#add\n * @see PointPrimitiveCollection#remove\n * @see PointPrimitive\n */\nfunction PointPrimitiveCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._sp = undefined;\n  this._spTranslucent = undefined;\n  this._rsOpaque = undefined;\n  this._rsTranslucent = undefined;\n  this._vaf = undefined;\n\n  this._pointPrimitives = [];\n  this._pointPrimitivesToUpdate = [];\n  this._pointPrimitivesToUpdateIndex = 0;\n  this._pointPrimitivesRemoved = false;\n  this._createVertexArray = false;\n\n  this._shaderScaleByDistance = false;\n  this._compiledShaderScaleByDistance = false;\n\n  this._shaderTranslucencyByDistance = false;\n  this._compiledShaderTranslucencyByDistance = false;\n\n  this._shaderDistanceDisplayCondition = false;\n  this._compiledShaderDistanceDisplayCondition = false;\n\n  this._shaderDisableDepthDistance = false;\n  this._compiledShaderDisableDepthDistance = false;\n\n  this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n\n  this._maxPixelSize = 1.0;\n\n  this._baseVolume = new BoundingSphere();\n  this._baseVolumeWC = new BoundingSphere();\n  this._baseVolume2D = new BoundingSphere();\n  this._boundingVolume = new BoundingSphere();\n  this._boundingVolumeDirty = false;\n\n  this._colorCommands = [];\n\n  /**\n   * Determines if primitives in this collection will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * The 4x4 transformation matrix that transforms each point in this collection from model to world coordinates.\n   * When this is the identity matrix, the pointPrimitives are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * @type {Matrix4}\n   * @default {@link Matrix4.IDENTITY}\n   *\n   *\n   * @example\n   * const center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\n   * pointPrimitives.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);\n   * pointPrimitives.add({\n   *   color : Cesium.Color.ORANGE,\n   *   position : new Cesium.Cartesian3(0.0, 0.0, 0.0) // center\n   * });\n   * pointPrimitives.add({\n   *   color : Cesium.Color.YELLOW,\n   *   position : new Cesium.Cartesian3(1000000.0, 0.0, 0.0) // east\n   * });\n   * pointPrimitives.add({\n   *   color : Cesium.Color.GREEN,\n   *   position : new Cesium.Cartesian3(0.0, 1000000.0, 0.0) // north\n   * });\n   * pointPrimitives.add({\n   *   color : Cesium.Color.CYAN,\n   *   position : new Cesium.Cartesian3(0.0, 0.0, 1000000.0) // up\n   * });\n   *\n   * @see Transforms.eastNorthUpToFixedFrame\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * The point blending option. The default is used for rendering both opaque and translucent points.\n   * However, if either all of the points are completely opaque or all are completely translucent,\n   * setting the technique to BlendOption.OPAQUE or BlendOption.TRANSLUCENT can improve\n   * performance by up to 2x.\n   * @type {BlendOption}\n   * @default BlendOption.OPAQUE_AND_TRANSLUCENT\n   */\n  this.blendOption = options.blendOption ?? BlendOption.OPAQUE_AND_TRANSLUCENT;\n  this._blendOption = undefined;\n\n  this._mode = SceneMode.SCENE3D;\n  this._maxTotalPointSize = 1;\n\n  // The buffer usage for each attribute is determined based on the usage of the attribute over time.\n  this._buffersUsage = [\n    BufferUsage.STATIC_DRAW, // SHOW_INDEX\n    BufferUsage.STATIC_DRAW, // POSITION_INDEX\n    BufferUsage.STATIC_DRAW, // COLOR_INDEX\n    BufferUsage.STATIC_DRAW, // OUTLINE_COLOR_INDEX\n    BufferUsage.STATIC_DRAW, // OUTLINE_WIDTH_INDEX\n    BufferUsage.STATIC_DRAW, // PIXEL_SIZE_INDEX\n    BufferUsage.STATIC_DRAW, // SCALE_BY_DISTANCE_INDEX\n    BufferUsage.STATIC_DRAW, // TRANSLUCENCY_BY_DISTANCE_INDEX\n    BufferUsage.STATIC_DRAW, // DISTANCE_DISPLAY_CONDITION_INDEX\n  ];\n\n  const that = this;\n  this._uniforms = {\n    u_maxTotalPointSize: function () {\n      return that._maxTotalPointSize;\n    },\n  };\n}\n\nObject.defineProperties(PointPrimitiveCollection.prototype, {\n  /**\n   * Returns the number of points in this collection.  This is commonly used with\n   * {@link PointPrimitiveCollection#get} to iterate over all the points\n   * in the collection.\n   * @memberof PointPrimitiveCollection.prototype\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      removePointPrimitives(this);\n      return this._pointPrimitives.length;\n    },\n  },\n});\n\nfunction destroyPointPrimitives(pointPrimitives) {\n  const length = pointPrimitives.length;\n  for (let i = 0; i < length; ++i) {\n    if (pointPrimitives[i]) {\n      pointPrimitives[i]._destroy();\n    }\n  }\n}\n\n/**\n * Creates and adds a point with the specified initial properties to the collection.\n * The added point is returned so it can be modified or removed from the collection later.\n *\n * @param {object}[options] A template describing the point's properties as shown in Example 1.\n * @returns {PointPrimitive} The point that was added to the collection.\n *\n * @performance Calling <code>add</code> is expected constant time.  However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.  For\n * best performance, add as many pointPrimitives as possible before calling <code>update</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Example 1:  Add a point, specifying all the default values.\n * const p = pointPrimitives.add({\n *   show : true,\n *   position : Cesium.Cartesian3.ZERO,\n *   pixelSize : 10.0,\n *   color : Cesium.Color.WHITE,\n *   outlineColor : Cesium.Color.TRANSPARENT,\n *   outlineWidth : 0.0,\n *   id : undefined\n * });\n *\n * @example\n * // Example 2:  Specify only the point's cartographic position.\n * const p = pointPrimitives.add({\n *   position : Cesium.Cartesian3.fromDegrees(longitude, latitude, height)\n * });\n *\n * @see PointPrimitiveCollection#remove\n * @see PointPrimitiveCollection#removeAll\n */\nPointPrimitiveCollection.prototype.add = function (options) {\n  const p = new PointPrimitive(options, this);\n  p._index = this._pointPrimitives.length;\n\n  this._pointPrimitives.push(p);\n  this._createVertexArray = true;\n\n  return p;\n};\n\n/**\n * Removes a point from the collection.\n *\n * @param {PointPrimitive} pointPrimitive The point to remove.\n * @returns {boolean} <code>true</code> if the point was removed; <code>false</code> if the point was not found in the collection.\n *\n * @performance Calling <code>remove</code> is expected constant time.  However, the collection's vertex buffer\n * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.  For\n * best performance, remove as many points as possible before calling <code>update</code>.\n * If you intend to temporarily hide a point, it is usually more efficient to call\n * {@link PointPrimitive#show} instead of removing and re-adding the point.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * const p = pointPrimitives.add(...);\n * pointPrimitives.remove(p);  // Returns true\n *\n * @see PointPrimitiveCollection#add\n * @see PointPrimitiveCollection#removeAll\n * @see PointPrimitive#show\n */\nPointPrimitiveCollection.prototype.remove = function (pointPrimitive) {\n  if (this.contains(pointPrimitive)) {\n    this._pointPrimitives[pointPrimitive._index] = null; // Removed later\n    this._pointPrimitivesRemoved = true;\n    this._createVertexArray = true;\n    pointPrimitive._destroy();\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all points from the collection.\n *\n * @performance <code>O(n)</code>.  It is more efficient to remove all the points\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * pointPrimitives.add(...);\n * pointPrimitives.add(...);\n * pointPrimitives.removeAll();\n *\n * @see PointPrimitiveCollection#add\n * @see PointPrimitiveCollection#remove\n */\nPointPrimitiveCollection.prototype.removeAll = function () {\n  destroyPointPrimitives(this._pointPrimitives);\n  this._pointPrimitives = [];\n  this._pointPrimitivesToUpdate = [];\n  this._pointPrimitivesToUpdateIndex = 0;\n  this._pointPrimitivesRemoved = false;\n\n  this._createVertexArray = true;\n};\n\nfunction removePointPrimitives(pointPrimitiveCollection) {\n  if (pointPrimitiveCollection._pointPrimitivesRemoved) {\n    pointPrimitiveCollection._pointPrimitivesRemoved = false;\n\n    const newPointPrimitives = [];\n    const pointPrimitives = pointPrimitiveCollection._pointPrimitives;\n    const length = pointPrimitives.length;\n    for (let i = 0, j = 0; i < length; ++i) {\n      const pointPrimitive = pointPrimitives[i];\n      if (pointPrimitive) {\n        pointPrimitive._index = j++;\n        newPointPrimitives.push(pointPrimitive);\n      }\n    }\n\n    pointPrimitiveCollection._pointPrimitives = newPointPrimitives;\n  }\n}\n\nPointPrimitiveCollection.prototype._updatePointPrimitive = function (\n  pointPrimitive,\n  propertyChanged,\n) {\n  if (!pointPrimitive._dirty) {\n    this._pointPrimitivesToUpdate[this._pointPrimitivesToUpdateIndex++] =\n      pointPrimitive;\n  }\n\n  ++this._propertiesChanged[propertyChanged];\n};\n\n/**\n * Check whether this collection contains a given point.\n *\n * @param {PointPrimitive} [pointPrimitive] The point to check for.\n * @returns {boolean} true if this collection contains the point, false otherwise.\n *\n * @see PointPrimitiveCollection#get\n */\nPointPrimitiveCollection.prototype.contains = function (pointPrimitive) {\n  return (\n    defined(pointPrimitive) && pointPrimitive._pointPrimitiveCollection === this\n  );\n};\n\n/**\n * Returns the point in the collection at the specified index.  Indices are zero-based\n * and increase as points are added.  Removing a point shifts all points after\n * it to the left, changing their indices.  This function is commonly used with\n * {@link PointPrimitiveCollection#length} to iterate over all the points\n * in the collection.\n *\n * @param {number} index The zero-based index of the point.\n * @returns {PointPrimitive} The point at the specified index.\n *\n * @performance Expected constant time.  If points were removed from the collection and\n * {@link PointPrimitiveCollection#update} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every point in the collection\n * const len = pointPrimitives.length;\n * for (let i = 0; i < len; ++i) {\n *   const p = pointPrimitives.get(i);\n *   p.show = !p.show;\n * }\n *\n * @see PointPrimitiveCollection#length\n */\nPointPrimitiveCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n  //>>includeEnd('debug');\n\n  removePointPrimitives(this);\n  return this._pointPrimitives[index];\n};\n\nPointPrimitiveCollection.prototype.computeNewBuffersUsage = function () {\n  const buffersUsage = this._buffersUsage;\n  let usageChanged = false;\n\n  const properties = this._propertiesChanged;\n  for (let k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n    const newUsage =\n      properties[k] === 0 ? BufferUsage.STATIC_DRAW : BufferUsage.STREAM_DRAW;\n    usageChanged = usageChanged || buffersUsage[k] !== newUsage;\n    buffersUsage[k] = newUsage;\n  }\n\n  return usageChanged;\n};\n\nfunction createVAF(context, numberOfPointPrimitives, buffersUsage) {\n  return new VertexArrayFacade(\n    context,\n    [\n      {\n        index: attributeLocations.positionHighAndSize,\n        componentsPerAttribute: 4,\n        componentDatatype: ComponentDatatype.FLOAT,\n        usage: buffersUsage[POSITION_INDEX],\n      },\n      {\n        index: attributeLocations.positionLowAndShow,\n        componentsPerAttribute: 4,\n        componentDatatype: ComponentDatatype.FLOAT,\n        usage: buffersUsage[POSITION_INDEX],\n      },\n      {\n        index: attributeLocations.compressedAttribute0,\n        componentsPerAttribute: 4,\n        componentDatatype: ComponentDatatype.FLOAT,\n        usage: buffersUsage[COLOR_INDEX],\n      },\n      {\n        index: attributeLocations.compressedAttribute1,\n        componentsPerAttribute: 4,\n        componentDatatype: ComponentDatatype.FLOAT,\n        usage: buffersUsage[TRANSLUCENCY_BY_DISTANCE_INDEX],\n      },\n      {\n        index: attributeLocations.scaleByDistance,\n        componentsPerAttribute: 4,\n        componentDatatype: ComponentDatatype.FLOAT,\n        usage: buffersUsage[SCALE_BY_DISTANCE_INDEX],\n      },\n      {\n        index:\n          attributeLocations.distanceDisplayConditionAndDisableDepthAndSplitDirection,\n        componentsPerAttribute: 4,\n        componentDatatype: ComponentDatatype.FLOAT,\n        usage: buffersUsage[DISTANCE_DISPLAY_CONDITION_INDEX],\n      },\n    ],\n    numberOfPointPrimitives,\n  ); // 1 vertex per pointPrimitive\n}\n\n///////////////////////////////////////////////////////////////////////////\n\n// PERFORMANCE_IDEA:  Save memory if a property is the same for all pointPrimitives, use a latched attribute state,\n// instead of storing it in a vertex buffer.\n\nconst writePositionScratch = new EncodedCartesian3();\nconst writeColorScratch = new Color();\n\nfunction writePositionSizeAndOutline(\n  pointPrimitiveCollection,\n  context,\n  vafWriters,\n  pointPrimitive,\n) {\n  const i = pointPrimitive._index;\n  const position = pointPrimitive._getActualPosition();\n\n  if (pointPrimitiveCollection._mode === SceneMode.SCENE3D) {\n    BoundingSphere.expand(\n      pointPrimitiveCollection._baseVolume,\n      position,\n      pointPrimitiveCollection._baseVolume,\n    );\n    pointPrimitiveCollection._boundingVolumeDirty = true;\n  }\n\n  EncodedCartesian3.fromCartesian(position, writePositionScratch);\n  const pixelSize = pointPrimitive.pixelSize;\n  const outlineWidth = pointPrimitive.outlineWidth;\n\n  pointPrimitiveCollection._maxPixelSize = Math.max(\n    pointPrimitiveCollection._maxPixelSize,\n    pixelSize + outlineWidth,\n  );\n\n  const positionHighWriter = vafWriters[attributeLocations.positionHighAndSize];\n  const high = writePositionScratch.high;\n  positionHighWriter(i, high.x, high.y, high.z, pixelSize);\n\n  const positionLowWriter =\n    vafWriters[attributeLocations.positionLowAndOutline];\n  const low = writePositionScratch.low;\n  positionLowWriter(i, low.x, low.y, low.z, outlineWidth);\n}\n\nconst LEFT_SHIFT8 = 256.0; // 2^8\n\nfunction writeCompressedAttrib0(\n  pointPrimitiveCollection,\n  context,\n  vafWriters,\n  pointPrimitive,\n) {\n  const i = pointPrimitive._index;\n\n  const color = pointPrimitive.color;\n  const outlineColor = pointPrimitive.outlineColor;\n  const pickColor = pointPrimitive.getPickId(context).color;\n\n  // Pack all three alpha channels into an RGB-encoded component.\n  writeColorScratch.red = color.alpha;\n  writeColorScratch.green = outlineColor.alpha;\n  writeColorScratch.blue = pickColor.alpha;\n\n  const writer = vafWriters[attributeLocations.compressedAttribute0];\n  writer(\n    i,\n    AttributeCompression.encodeRGB8(color),\n    AttributeCompression.encodeRGB8(outlineColor),\n    AttributeCompression.encodeRGB8(pickColor),\n    AttributeCompression.encodeRGB8(writeColorScratch),\n  );\n}\n\nfunction writeCompressedAttrib1(\n  pointPrimitiveCollection,\n  context,\n  vafWriters,\n  pointPrimitive,\n) {\n  const i = pointPrimitive._index;\n\n  let near = 0.0;\n  let nearValue = 1.0;\n  let far = 1.0;\n  let farValue = 1.0;\n\n  const translucency = pointPrimitive.translucencyByDistance;\n  if (defined(translucency)) {\n    near = translucency.near;\n    nearValue = translucency.nearValue;\n    far = translucency.far;\n    farValue = translucency.farValue;\n\n    if (nearValue !== 1.0 || farValue !== 1.0) {\n      // translucency by distance calculation in shader need not be enabled\n      // until a pointPrimitive with near and far !== 1.0 is found\n      pointPrimitiveCollection._shaderTranslucencyByDistance = true;\n    }\n  }\n\n  let show = pointPrimitive.show && pointPrimitive.clusterShow;\n\n  // If the color alphas are zero, do not show this pointPrimitive.  This lets us avoid providing\n  // color during the pick pass and also eliminates a discard in the fragment shader.\n  if (\n    pointPrimitive.color.alpha === 0.0 &&\n    pointPrimitive.outlineColor.alpha === 0.0\n  ) {\n    show = false;\n  }\n\n  nearValue = CesiumMath.clamp(nearValue, 0.0, 1.0);\n  nearValue = nearValue === 1.0 ? 255.0 : (nearValue * 255.0) | 0;\n  const compressed0 = (show ? 1.0 : 0.0) * LEFT_SHIFT8 + nearValue;\n\n  farValue = CesiumMath.clamp(farValue, 0.0, 1.0);\n  farValue = farValue === 1.0 ? 255.0 : (farValue * 255.0) | 0;\n  const compressed1 = farValue;\n\n  const writer = vafWriters[attributeLocations.compressedAttribute1];\n  writer(i, compressed0, compressed1, near, far);\n}\n\nfunction writeScaleByDistance(\n  pointPrimitiveCollection,\n  context,\n  vafWriters,\n  pointPrimitive,\n) {\n  const i = pointPrimitive._index;\n  const writer = vafWriters[attributeLocations.scaleByDistance];\n  let near = 0.0;\n  let nearValue = 1.0;\n  let far = 1.0;\n  let farValue = 1.0;\n\n  const scale = pointPrimitive.scaleByDistance;\n  if (defined(scale)) {\n    near = scale.near;\n    nearValue = scale.nearValue;\n    far = scale.far;\n    farValue = scale.farValue;\n\n    if (nearValue !== 1.0 || farValue !== 1.0) {\n      // scale by distance calculation in shader need not be enabled\n      // until a pointPrimitive with near and far !== 1.0 is found\n      pointPrimitiveCollection._shaderScaleByDistance = true;\n    }\n  }\n\n  writer(i, near, nearValue, far, farValue);\n}\n\nfunction writeDistanceDisplayConditionAndDepthDisableAndSplitDirection(\n  pointPrimitiveCollection,\n  context,\n  vafWriters,\n  pointPrimitive,\n) {\n  const i = pointPrimitive._index;\n  const writer =\n    vafWriters[\n      attributeLocations\n        .distanceDisplayConditionAndDisableDepthAndSplitDirection\n    ];\n  let near = 0.0;\n  let far = Number.MAX_VALUE;\n\n  const distanceDisplayCondition = pointPrimitive.distanceDisplayCondition;\n  if (defined(distanceDisplayCondition)) {\n    near = distanceDisplayCondition.near;\n    far = distanceDisplayCondition.far;\n\n    near *= near;\n    far *= far;\n\n    pointPrimitiveCollection._shaderDistanceDisplayCondition = true;\n  }\n\n  let disableDepthTestDistance = pointPrimitive.disableDepthTestDistance;\n  disableDepthTestDistance *= disableDepthTestDistance;\n  if (disableDepthTestDistance > 0.0) {\n    pointPrimitiveCollection._shaderDisableDepthDistance = true;\n    if (disableDepthTestDistance === Number.POSITIVE_INFINITY) {\n      disableDepthTestDistance = -1.0;\n    }\n  }\n\n  let direction = 0.0;\n  const split = pointPrimitive.splitDirection;\n  if (defined(split)) {\n    direction = split;\n  }\n  writer(i, near, far, disableDepthTestDistance, direction);\n}\n\nfunction writePointPrimitive(\n  pointPrimitiveCollection,\n  context,\n  vafWriters,\n  pointPrimitive,\n) {\n  writePositionSizeAndOutline(\n    pointPrimitiveCollection,\n    context,\n    vafWriters,\n    pointPrimitive,\n  );\n  writeCompressedAttrib0(\n    pointPrimitiveCollection,\n    context,\n    vafWriters,\n    pointPrimitive,\n  );\n  writeCompressedAttrib1(\n    pointPrimitiveCollection,\n    context,\n    vafWriters,\n    pointPrimitive,\n  );\n  writeScaleByDistance(\n    pointPrimitiveCollection,\n    context,\n    vafWriters,\n    pointPrimitive,\n  );\n  writeDistanceDisplayConditionAndDepthDisableAndSplitDirection(\n    pointPrimitiveCollection,\n    context,\n    vafWriters,\n    pointPrimitive,\n  );\n}\n\nfunction recomputeActualPositions(\n  pointPrimitiveCollection,\n  pointPrimitives,\n  length,\n  frameState,\n  modelMatrix,\n  recomputeBoundingVolume,\n) {\n  let boundingVolume;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    boundingVolume = pointPrimitiveCollection._baseVolume;\n    pointPrimitiveCollection._boundingVolumeDirty = true;\n  } else {\n    boundingVolume = pointPrimitiveCollection._baseVolume2D;\n  }\n\n  const positions = [];\n  for (let i = 0; i < length; ++i) {\n    const pointPrimitive = pointPrimitives[i];\n    const position = pointPrimitive.position;\n    const actualPosition = PointPrimitive._computeActualPosition(\n      position,\n      frameState,\n      modelMatrix,\n    );\n    if (defined(actualPosition)) {\n      pointPrimitive._setActualPosition(actualPosition);\n\n      if (recomputeBoundingVolume) {\n        positions.push(actualPosition);\n      } else {\n        BoundingSphere.expand(boundingVolume, actualPosition, boundingVolume);\n      }\n    }\n  }\n\n  if (recomputeBoundingVolume) {\n    BoundingSphere.fromPoints(positions, boundingVolume);\n  }\n}\n\nfunction updateMode(pointPrimitiveCollection, frameState) {\n  const mode = frameState.mode;\n\n  const pointPrimitives = pointPrimitiveCollection._pointPrimitives;\n  const pointPrimitivesToUpdate =\n    pointPrimitiveCollection._pointPrimitivesToUpdate;\n  const modelMatrix = pointPrimitiveCollection._modelMatrix;\n\n  if (\n    pointPrimitiveCollection._createVertexArray ||\n    pointPrimitiveCollection._mode !== mode ||\n    (mode !== SceneMode.SCENE3D &&\n      !Matrix4.equals(modelMatrix, pointPrimitiveCollection.modelMatrix))\n  ) {\n    pointPrimitiveCollection._mode = mode;\n    Matrix4.clone(pointPrimitiveCollection.modelMatrix, modelMatrix);\n    pointPrimitiveCollection._createVertexArray = true;\n\n    if (\n      mode === SceneMode.SCENE3D ||\n      mode === SceneMode.SCENE2D ||\n      mode === SceneMode.COLUMBUS_VIEW\n    ) {\n      recomputeActualPositions(\n        pointPrimitiveCollection,\n        pointPrimitives,\n        pointPrimitives.length,\n        frameState,\n        modelMatrix,\n        true,\n      );\n    }\n  } else if (mode === SceneMode.MORPHING) {\n    recomputeActualPositions(\n      pointPrimitiveCollection,\n      pointPrimitives,\n      pointPrimitives.length,\n      frameState,\n      modelMatrix,\n      true,\n    );\n  } else if (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) {\n    recomputeActualPositions(\n      pointPrimitiveCollection,\n      pointPrimitivesToUpdate,\n      pointPrimitiveCollection._pointPrimitivesToUpdateIndex,\n      frameState,\n      modelMatrix,\n      false,\n    );\n  }\n}\n\nfunction updateBoundingVolume(collection, frameState, boundingVolume) {\n  const pixelSize = frameState.camera.getPixelSize(\n    boundingVolume,\n    frameState.context.drawingBufferWidth,\n    frameState.context.drawingBufferHeight,\n  );\n  const size = pixelSize * collection._maxPixelSize;\n  boundingVolume.radius += size;\n}\n\nconst scratchWriterArray = [];\n\n/**\n * @private\n */\nPointPrimitiveCollection.prototype.update = function (frameState) {\n  removePointPrimitives(this);\n\n  if (!this.show) {\n    return;\n  }\n\n  this._maxTotalPointSize = ContextLimits.maximumAliasedPointSize;\n\n  updateMode(this, frameState);\n\n  const pointPrimitives = this._pointPrimitives;\n  const pointPrimitivesLength = pointPrimitives.length;\n  const pointPrimitivesToUpdate = this._pointPrimitivesToUpdate;\n  const pointPrimitivesToUpdateLength = this._pointPrimitivesToUpdateIndex;\n\n  const properties = this._propertiesChanged;\n\n  const createVertexArray = this._createVertexArray;\n\n  let vafWriters;\n  const context = frameState.context;\n  const pass = frameState.passes;\n  const picking = pass.pick;\n\n  // PERFORMANCE_IDEA: Round robin multiple buffers.\n  if (createVertexArray || (!picking && this.computeNewBuffersUsage())) {\n    this._createVertexArray = false;\n\n    for (let k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n      properties[k] = 0;\n    }\n\n    this._vaf = this._vaf && this._vaf.destroy();\n\n    if (pointPrimitivesLength > 0) {\n      // PERFORMANCE_IDEA:  Instead of creating a new one, resize like std::vector.\n      this._vaf = createVAF(context, pointPrimitivesLength, this._buffersUsage);\n      vafWriters = this._vaf.writers;\n\n      // Rewrite entire buffer if pointPrimitives were added or removed.\n      for (let i = 0; i < pointPrimitivesLength; ++i) {\n        const pointPrimitive = this._pointPrimitives[i];\n        pointPrimitive._dirty = false; // In case it needed an update.\n        writePointPrimitive(this, context, vafWriters, pointPrimitive);\n      }\n\n      this._vaf.commit();\n    }\n\n    this._pointPrimitivesToUpdateIndex = 0;\n  } else if (pointPrimitivesToUpdateLength > 0) {\n    // PointPrimitives were modified, but none were added or removed.\n    const writers = scratchWriterArray;\n    writers.length = 0;\n\n    if (\n      properties[POSITION_INDEX] ||\n      properties[OUTLINE_WIDTH_INDEX] ||\n      properties[PIXEL_SIZE_INDEX]\n    ) {\n      writers.push(writePositionSizeAndOutline);\n    }\n\n    if (properties[COLOR_INDEX] || properties[OUTLINE_COLOR_INDEX]) {\n      writers.push(writeCompressedAttrib0);\n    }\n\n    if (properties[SHOW_INDEX] || properties[TRANSLUCENCY_BY_DISTANCE_INDEX]) {\n      writers.push(writeCompressedAttrib1);\n    }\n\n    if (properties[SCALE_BY_DISTANCE_INDEX]) {\n      writers.push(writeScaleByDistance);\n    }\n\n    if (\n      properties[DISTANCE_DISPLAY_CONDITION_INDEX] ||\n      properties[DISABLE_DEPTH_DISTANCE_INDEX] ||\n      properties[SPLIT_DIRECTION_INDEX]\n    ) {\n      writers.push(\n        writeDistanceDisplayConditionAndDepthDisableAndSplitDirection,\n      );\n    }\n\n    const numWriters = writers.length;\n\n    vafWriters = this._vaf.writers;\n\n    if (pointPrimitivesToUpdateLength / pointPrimitivesLength > 0.1) {\n      // If more than 10% of pointPrimitive change, rewrite the entire buffer.\n\n      // PERFORMANCE_IDEA:  I totally made up 10% :).\n\n      for (let m = 0; m < pointPrimitivesToUpdateLength; ++m) {\n        const b = pointPrimitivesToUpdate[m];\n        b._dirty = false;\n\n        for (let n = 0; n < numWriters; ++n) {\n          writers[n](this, context, vafWriters, b);\n        }\n      }\n      this._vaf.commit();\n    } else {\n      for (let h = 0; h < pointPrimitivesToUpdateLength; ++h) {\n        const bb = pointPrimitivesToUpdate[h];\n        bb._dirty = false;\n\n        for (let o = 0; o < numWriters; ++o) {\n          writers[o](this, context, vafWriters, bb);\n        }\n        this._vaf.subCommit(bb._index, 1);\n      }\n      this._vaf.endSubCommits();\n    }\n\n    this._pointPrimitivesToUpdateIndex = 0;\n  }\n\n  // If the number of total pointPrimitives ever shrinks considerably\n  // Truncate pointPrimitivesToUpdate so that we free memory that we're\n  // not going to be using.\n  if (pointPrimitivesToUpdateLength > pointPrimitivesLength * 1.5) {\n    pointPrimitivesToUpdate.length = pointPrimitivesLength;\n  }\n\n  if (!defined(this._vaf) || !defined(this._vaf.va)) {\n    return;\n  }\n\n  if (this._boundingVolumeDirty) {\n    this._boundingVolumeDirty = false;\n    BoundingSphere.transform(\n      this._baseVolume,\n      this.modelMatrix,\n      this._baseVolumeWC,\n    );\n  }\n\n  let boundingVolume;\n  let modelMatrix = Matrix4.IDENTITY;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    modelMatrix = this.modelMatrix;\n    boundingVolume = BoundingSphere.clone(\n      this._baseVolumeWC,\n      this._boundingVolume,\n    );\n  } else {\n    boundingVolume = BoundingSphere.clone(\n      this._baseVolume2D,\n      this._boundingVolume,\n    );\n  }\n  updateBoundingVolume(this, frameState, boundingVolume);\n\n  const blendOptionChanged = this._blendOption !== this.blendOption;\n  this._blendOption = this.blendOption;\n\n  if (blendOptionChanged) {\n    if (\n      this._blendOption === BlendOption.OPAQUE ||\n      this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n    ) {\n      this._rsOpaque = RenderState.fromCache({\n        depthTest: {\n          enabled: true,\n          func: WebGLConstants.LEQUAL,\n        },\n        depthMask: true,\n      });\n    } else {\n      this._rsOpaque = undefined;\n    }\n\n    if (\n      this._blendOption === BlendOption.TRANSLUCENT ||\n      this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT\n    ) {\n      this._rsTranslucent = RenderState.fromCache({\n        depthTest: {\n          enabled: true,\n          func: WebGLConstants.LEQUAL,\n        },\n        depthMask: false,\n        blending: BlendingState.ALPHA_BLEND,\n      });\n    } else {\n      this._rsTranslucent = undefined;\n    }\n  }\n\n  this._shaderDisableDepthDistance =\n    this._shaderDisableDepthDistance ||\n    frameState.minimumDisableDepthTestDistance !== 0.0;\n  let vs;\n  let fs;\n\n  if (\n    blendOptionChanged ||\n    (this._shaderScaleByDistance && !this._compiledShaderScaleByDistance) ||\n    (this._shaderTranslucencyByDistance &&\n      !this._compiledShaderTranslucencyByDistance) ||\n    (this._shaderDistanceDisplayCondition &&\n      !this._compiledShaderDistanceDisplayCondition) ||\n    this._shaderDisableDepthDistance !==\n      this._compiledShaderDisableDepthDistance\n  ) {\n    vs = new ShaderSource({\n      sources: [PointPrimitiveCollectionVS],\n    });\n    if (this._shaderScaleByDistance) {\n      vs.defines.push(\"EYE_DISTANCE_SCALING\");\n    }\n    if (this._shaderTranslucencyByDistance) {\n      vs.defines.push(\"EYE_DISTANCE_TRANSLUCENCY\");\n    }\n    if (this._shaderDistanceDisplayCondition) {\n      vs.defines.push(\"DISTANCE_DISPLAY_CONDITION\");\n    }\n    if (this._shaderDisableDepthDistance) {\n      vs.defines.push(\"DISABLE_DEPTH_DISTANCE\");\n    }\n\n    if (this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT) {\n      fs = new ShaderSource({\n        defines: [\"OPAQUE\"],\n        sources: [PointPrimitiveCollectionFS],\n      });\n      this._sp = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._sp,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n\n      fs = new ShaderSource({\n        defines: [\"TRANSLUCENT\"],\n        sources: [PointPrimitiveCollectionFS],\n      });\n      this._spTranslucent = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._spTranslucent,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n    }\n\n    if (this._blendOption === BlendOption.OPAQUE) {\n      fs = new ShaderSource({\n        sources: [PointPrimitiveCollectionFS],\n      });\n      this._sp = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._sp,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n    }\n\n    if (this._blendOption === BlendOption.TRANSLUCENT) {\n      fs = new ShaderSource({\n        sources: [PointPrimitiveCollectionFS],\n      });\n      this._spTranslucent = ShaderProgram.replaceCache({\n        context: context,\n        shaderProgram: this._spTranslucent,\n        vertexShaderSource: vs,\n        fragmentShaderSource: fs,\n        attributeLocations: attributeLocations,\n      });\n    }\n\n    this._compiledShaderScaleByDistance = this._shaderScaleByDistance;\n    this._compiledShaderTranslucencyByDistance =\n      this._shaderTranslucencyByDistance;\n    this._compiledShaderDistanceDisplayCondition =\n      this._shaderDistanceDisplayCondition;\n    this._compiledShaderDisableDepthDistance = this._shaderDisableDepthDistance;\n  }\n\n  let va;\n  let vaLength;\n  let command;\n  let j;\n\n  const commandList = frameState.commandList;\n\n  if (pass.render || picking) {\n    const colorList = this._colorCommands;\n\n    const opaque = this._blendOption === BlendOption.OPAQUE;\n    const opaqueAndTranslucent =\n      this._blendOption === BlendOption.OPAQUE_AND_TRANSLUCENT;\n\n    va = this._vaf.va;\n    vaLength = va.length;\n\n    colorList.length = vaLength;\n    const totalLength = opaqueAndTranslucent ? vaLength * 2 : vaLength;\n    for (j = 0; j < totalLength; ++j) {\n      const opaqueCommand = opaque || (opaqueAndTranslucent && j % 2 === 0);\n\n      command = colorList[j];\n      if (!defined(command)) {\n        command = colorList[j] = new DrawCommand();\n      }\n\n      command.primitiveType = PrimitiveType.POINTS;\n      command.pass =\n        opaqueCommand || !opaqueAndTranslucent ? Pass.OPAQUE : Pass.TRANSLUCENT;\n      command.owner = this;\n\n      const index = opaqueAndTranslucent ? Math.floor(j / 2.0) : j;\n      command.boundingVolume = boundingVolume;\n      command.modelMatrix = modelMatrix;\n      command.shaderProgram = opaqueCommand ? this._sp : this._spTranslucent;\n      command.uniformMap = this._uniforms;\n      command.vertexArray = va[index].va;\n      command.renderState = opaqueCommand\n        ? this._rsOpaque\n        : this._rsTranslucent;\n      command.debugShowBoundingVolume = this.debugShowBoundingVolume;\n      command.pickId = \"v_pickColor\";\n\n      commandList.push(command);\n    }\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PointPrimitiveCollection#destroy\n */\nPointPrimitiveCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * pointPrimitives = pointPrimitives && pointPrimitives.destroy();\n *\n * @see PointPrimitiveCollection#isDestroyed\n */\nPointPrimitiveCollection.prototype.destroy = function () {\n  this._sp = this._sp && this._sp.destroy();\n  this._spTranslucent = this._spTranslucent && this._spTranslucent.destroy();\n  this._spPick = this._spPick && this._spPick.destroy();\n  this._vaf = this._vaf && this._vaf.destroy();\n  destroyPointPrimitives(this._pointPrimitives);\n\n  return destroyObject(this);\n};\nexport default PointPrimitiveCollection;\n","import arrayRemoveDuplicates from \"../Core/arrayRemoveDuplicates.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PolylinePipeline from \"../Core/PolylinePipeline.js\";\nimport Material from \"./Material.js\";\n\n/**\n * <div class=\"notice\">\n * Create this by calling {@link PolylineCollection#add}. Do not call the constructor directly.\n * </div>\n *\n * A renderable polyline.\n *\n * @alias Polyline\n * @internalConstructor\n * @class\n *\n * @privateParam {object} options Object with the following properties:\n * @privateParam {boolean} [options.show=true] <code>true</code> if this polyline will be shown; otherwise, <code>false</code>.\n * @privateParam {number} [options.width=1.0] The width of the polyline in pixels.\n * @privateParam {boolean} [options.loop=false] Whether a line segment will be added between the last and first line positions to make this line a loop.\n * @privateParam {Material} [options.material=Material.ColorType] The material.\n * @privateParam {Cartesian3[]} [options.positions] The positions.\n * @privateParam {object} [options.id] The user-defined object to be returned when this polyline is picked.\n * @privateParam {DistanceDisplayCondition} [options.distanceDisplayCondition] The condition specifying at what distance from the camera that this polyline will be displayed.\n * @privateParam {PolylineCollection} polylineCollection The renderable polyline collection.\n *\n * @see PolylineCollection\n *\n */\nfunction Polyline(options, polylineCollection) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._show = options.show ?? true;\n  this._width = options.width ?? 1.0;\n  this._loop = options.loop ?? false;\n  this._distanceDisplayCondition = options.distanceDisplayCondition;\n\n  this._material = options.material;\n  if (!defined(this._material)) {\n    this._material = Material.fromType(Material.ColorType, {\n      color: new Color(1.0, 1.0, 1.0, 1.0),\n    });\n  }\n\n  let positions = options.positions;\n  if (!defined(positions)) {\n    positions = [];\n  }\n\n  this._positions = positions;\n  this._actualPositions = arrayRemoveDuplicates(\n    positions,\n    Cartesian3.equalsEpsilon,\n  );\n\n  if (this._loop && this._actualPositions.length > 2) {\n    if (this._actualPositions === this._positions) {\n      this._actualPositions = positions.slice();\n    }\n    this._actualPositions.push(Cartesian3.clone(this._actualPositions[0]));\n  }\n\n  this._length = this._actualPositions.length;\n  this._id = options.id;\n\n  let modelMatrix;\n  if (defined(polylineCollection)) {\n    modelMatrix = Matrix4.clone(polylineCollection.modelMatrix);\n  }\n\n  this._modelMatrix = modelMatrix;\n  this._segments = PolylinePipeline.wrapLongitude(\n    this._actualPositions,\n    modelMatrix,\n  );\n\n  this._actualLength = undefined;\n\n  this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n  this._polylineCollection = polylineCollection;\n  this._dirty = false;\n  this._pickId = undefined;\n  this._boundingVolume = BoundingSphere.fromPoints(this._actualPositions);\n  this._boundingVolumeWC = BoundingSphere.transform(\n    this._boundingVolume,\n    this._modelMatrix,\n  );\n  this._boundingVolume2D = new BoundingSphere(); // modified in PolylineCollection\n}\n\nconst POSITION_INDEX = (Polyline.POSITION_INDEX = 0);\nconst SHOW_INDEX = (Polyline.SHOW_INDEX = 1);\nconst WIDTH_INDEX = (Polyline.WIDTH_INDEX = 2);\nconst MATERIAL_INDEX = (Polyline.MATERIAL_INDEX = 3);\nconst POSITION_SIZE_INDEX = (Polyline.POSITION_SIZE_INDEX = 4);\nconst DISTANCE_DISPLAY_CONDITION = (Polyline.DISTANCE_DISPLAY_CONDITION = 5);\nconst NUMBER_OF_PROPERTIES = (Polyline.NUMBER_OF_PROPERTIES = 6);\n\nfunction makeDirty(polyline, propertyChanged) {\n  ++polyline._propertiesChanged[propertyChanged];\n  const polylineCollection = polyline._polylineCollection;\n  if (defined(polylineCollection)) {\n    polylineCollection._updatePolyline(polyline, propertyChanged);\n    polyline._dirty = true;\n  }\n}\n\nObject.defineProperties(Polyline.prototype, {\n  /**\n   * Determines if this polyline will be shown.  Use this to hide or show a polyline, instead\n   * of removing it and re-adding it to the collection.\n   * @memberof Polyline.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return this._show;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (value !== this._show) {\n        this._show = value;\n        makeDirty(this, SHOW_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the positions of the polyline.\n   * @memberof Polyline.prototype\n   * @type {Cartesian3[]}\n   * @example\n   * polyline.positions = Cesium.Cartesian3.fromDegreesArray([\n   *     0.0, 0.0,\n   *     10.0, 0.0,\n   *     0.0, 20.0\n   * ]);\n   */\n  positions: {\n    get: function () {\n      return this._positions;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      let positions = arrayRemoveDuplicates(value, Cartesian3.equalsEpsilon);\n\n      if (this._loop && positions.length > 2) {\n        if (positions === value) {\n          positions = value.slice();\n        }\n        positions.push(Cartesian3.clone(positions[0]));\n      }\n\n      if (\n        this._actualPositions.length !== positions.length ||\n        this._actualPositions.length !== this._length\n      ) {\n        makeDirty(this, POSITION_SIZE_INDEX);\n      }\n\n      this._positions = value;\n      this._actualPositions = positions;\n      this._length = positions.length;\n      this._boundingVolume = BoundingSphere.fromPoints(\n        this._actualPositions,\n        this._boundingVolume,\n      );\n      this._boundingVolumeWC = BoundingSphere.transform(\n        this._boundingVolume,\n        this._modelMatrix,\n        this._boundingVolumeWC,\n      );\n      makeDirty(this, POSITION_INDEX);\n\n      this.update();\n    },\n  },\n\n  /**\n   * Gets or sets the surface appearance of the polyline.  This can be one of several built-in {@link Material} objects or a custom material, scripted with\n   * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n   * @memberof Polyline.prototype\n   * @type {Material}\n   */\n  material: {\n    get: function () {\n      return this._material;\n    },\n    set: function (material) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(material)) {\n        throw new DeveloperError(\"material is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._material !== material) {\n        this._material = material;\n        makeDirty(this, MATERIAL_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the width of the polyline.\n   * @memberof Polyline.prototype\n   * @type {number}\n   */\n  width: {\n    get: function () {\n      return this._width;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      const width = this._width;\n      if (value !== width) {\n        this._width = value;\n        makeDirty(this, WIDTH_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets whether a line segment will be added between the first and last polyline positions.\n   * @memberof Polyline.prototype\n   * @type {boolean}\n   */\n  loop: {\n    get: function () {\n      return this._loop;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug)\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (value !== this._loop) {\n        let positions = this._actualPositions;\n        if (value) {\n          if (\n            positions.length > 2 &&\n            !Cartesian3.equals(positions[0], positions[positions.length - 1])\n          ) {\n            if (positions.length === this._positions.length) {\n              this._actualPositions = positions = this._positions.slice();\n            }\n            positions.push(Cartesian3.clone(positions[0]));\n          }\n        } else if (\n          positions.length > 2 &&\n          Cartesian3.equals(positions[0], positions[positions.length - 1])\n        ) {\n          if (positions.length - 1 === this._positions.length) {\n            this._actualPositions = this._positions;\n          } else {\n            positions.pop();\n          }\n        }\n\n        this._loop = value;\n        makeDirty(this, POSITION_SIZE_INDEX);\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the user-defined value returned when the polyline is picked.\n   * @memberof Polyline.prototype\n   * @type {*}\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n    set: function (value) {\n      this._id = value;\n      if (defined(this._pickId)) {\n        this._pickId.object.id = value;\n      }\n    },\n  },\n\n  /**\n   * @private\n   */\n  pickId: {\n    get: function () {\n      return this._pickId;\n    },\n  },\n\n  /**\n   * Gets the destruction status of this polyline\n   * @memberof Polyline.prototype\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  isDestroyed: {\n    get: function () {\n      return !defined(this._polylineCollection);\n    },\n  },\n\n  /**\n   * Gets or sets the condition specifying at what distance from the camera that this polyline will be displayed.\n   * @memberof Polyline.prototype\n   * @type {DistanceDisplayCondition}\n   * @default undefined\n   */\n  distanceDisplayCondition: {\n    get: function () {\n      return this._distanceDisplayCondition;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value.far <= value.near) {\n        throw new DeveloperError(\n          \"far distance must be greater than near distance.\",\n        );\n      }\n      //>>includeEnd('debug');\n      if (\n        !DistanceDisplayCondition.equals(value, this._distanceDisplayCondition)\n      ) {\n        this._distanceDisplayCondition = DistanceDisplayCondition.clone(\n          value,\n          this._distanceDisplayCondition,\n        );\n        makeDirty(this, DISTANCE_DISPLAY_CONDITION);\n      }\n    },\n  },\n});\n\n/**\n * @private\n */\nPolyline.prototype.update = function () {\n  let modelMatrix = Matrix4.IDENTITY;\n  if (defined(this._polylineCollection)) {\n    modelMatrix = this._polylineCollection.modelMatrix;\n  }\n\n  const segmentPositionsLength = this._segments.positions.length;\n  const segmentLengths = this._segments.lengths;\n\n  const positionsChanged =\n    this._propertiesChanged[POSITION_INDEX] > 0 ||\n    this._propertiesChanged[POSITION_SIZE_INDEX] > 0;\n  if (!Matrix4.equals(modelMatrix, this._modelMatrix) || positionsChanged) {\n    this._segments = PolylinePipeline.wrapLongitude(\n      this._actualPositions,\n      modelMatrix,\n    );\n    this._boundingVolumeWC = BoundingSphere.transform(\n      this._boundingVolume,\n      modelMatrix,\n      this._boundingVolumeWC,\n    );\n  }\n\n  this._modelMatrix = Matrix4.clone(modelMatrix, this._modelMatrix);\n\n  if (this._segments.positions.length !== segmentPositionsLength) {\n    // number of positions changed\n    makeDirty(this, POSITION_SIZE_INDEX);\n  } else {\n    const length = segmentLengths.length;\n    for (let i = 0; i < length; ++i) {\n      if (segmentLengths[i] !== this._segments.lengths[i]) {\n        // indices changed\n        makeDirty(this, POSITION_SIZE_INDEX);\n        break;\n      }\n    }\n  }\n};\n\n/**\n * @private\n */\nPolyline.prototype.getPickId = function (context) {\n  if (!defined(this._pickId)) {\n    this._pickId = context.createPickId({\n      primitive: this,\n      collection: this._polylineCollection,\n      id: this._id,\n    });\n  }\n  return this._pickId;\n};\n\nPolyline.prototype._clean = function () {\n  this._dirty = false;\n  const properties = this._propertiesChanged;\n  for (let k = 0; k < NUMBER_OF_PROPERTIES - 1; ++k) {\n    properties[k] = 0;\n  }\n};\n\nPolyline.prototype._destroy = function () {\n  this._pickId = this._pickId && this._pickId.destroy();\n  this._material = this._material && this._material.destroy();\n  this._polylineCollection = undefined;\n};\nexport default Polyline;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Plane from \"../Core/Plane.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport PolylineFS from \"../Shaders/PolylineFS.js\";\nimport PolylineVS from \"../Shaders/PolylineVS.js\";\nimport BatchTable from \"./BatchTable.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Material from \"./Material.js\";\nimport Polyline from \"./Polyline.js\";\nimport SceneMode from \"./SceneMode.js\";\n\nconst SHOW_INDEX = Polyline.SHOW_INDEX;\nconst WIDTH_INDEX = Polyline.WIDTH_INDEX;\nconst POSITION_INDEX = Polyline.POSITION_INDEX;\nconst MATERIAL_INDEX = Polyline.MATERIAL_INDEX;\n//POSITION_SIZE_INDEX is needed for when the polyline's position array changes size.\n//When it does, we need to recreate the indicesBuffer.\nconst POSITION_SIZE_INDEX = Polyline.POSITION_SIZE_INDEX;\nconst DISTANCE_DISPLAY_CONDITION = Polyline.DISTANCE_DISPLAY_CONDITION;\nconst NUMBER_OF_PROPERTIES = Polyline.NUMBER_OF_PROPERTIES;\n\nconst attributeLocations = {\n  texCoordExpandAndBatchIndex: 0,\n  position3DHigh: 1,\n  position3DLow: 2,\n  position2DHigh: 3,\n  position2DLow: 4,\n  prevPosition3DHigh: 5,\n  prevPosition3DLow: 6,\n  prevPosition2DHigh: 7,\n  prevPosition2DLow: 8,\n  nextPosition3DHigh: 9,\n  nextPosition3DLow: 10,\n  nextPosition2DHigh: 11,\n  nextPosition2DLow: 12,\n};\n\n/**\n * A renderable collection of polylines.\n * <br /><br />\n * <div align=\"center\">\n * <img src=\"Images/Polyline.png\" width=\"400\" height=\"300\" /><br />\n * Example polylines\n * </div>\n * <br /><br />\n * Polylines are added and removed from the collection using {@link PolylineCollection#add}\n * and {@link PolylineCollection#remove}.\n *\n * @alias PolylineCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms each polyline from model to world coordinates.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {boolean} [options.show=true] Determines if the polylines in the collection will be shown.\n *\n * @performance For best performance, prefer a few collections, each with many polylines, to\n * many collections with only a few polylines each.  Organize collections so that polylines\n * with the same update frequency are in the same collection, i.e., polylines that do not\n * change should be in one collection; polylines that change every frame should be in another\n * collection; and so on.\n *\n * @see PolylineCollection#add\n * @see PolylineCollection#remove\n * @see Polyline\n * @see LabelCollection\n *\n * @example\n * // Create a polyline collection with two polylines\n * const polylines = new Cesium.PolylineCollection();\n * polylines.add({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     -75.10, 39.57,\n *     -77.02, 38.53,\n *     -80.50, 35.14,\n *     -80.12, 25.46]),\n *   width : 2\n * });\n *\n * polylines.add({\n *   positions : Cesium.Cartesian3.fromDegreesArray([\n *     -73.10, 37.57,\n *     -75.02, 36.53,\n *     -78.50, 33.14,\n *     -78.12, 23.46]),\n *   width : 4\n * });\n */\nfunction PolylineCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * Determines if polylines in this collection will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * The 4x4 transformation matrix that transforms each polyline in this collection from model to world coordinates.\n   * When this is the identity matrix, the polylines are drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * @type {Matrix4}\n   * @default {@link Matrix4.IDENTITY}\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  this._opaqueRS = undefined;\n  this._translucentRS = undefined;\n\n  this._colorCommands = [];\n\n  this._polylinesUpdated = false;\n  this._polylinesRemoved = false;\n  this._createVertexArray = false;\n  this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);\n  this._polylines = [];\n  this._polylineBuckets = {};\n\n  // The buffer usage is determined based on the usage of the attribute over time.\n  this._positionBufferUsage = {\n    bufferUsage: BufferUsage.STATIC_DRAW,\n    frameCount: 0,\n  };\n\n  this._mode = undefined;\n\n  this._polylinesToUpdate = [];\n  this._vertexArrays = [];\n  this._positionBuffer = undefined;\n  this._texCoordExpandAndBatchIndexBuffer = undefined;\n\n  this._batchTable = undefined;\n  this._createBatchTable = false;\n\n  // Only used by Vector3DTilePoints\n  this._useHighlightColor = false;\n  this._highlightColor = Color.clone(Color.WHITE);\n\n  const that = this;\n  this._uniformMap = {\n    u_highlightColor: function () {\n      return that._highlightColor;\n    },\n  };\n}\n\nObject.defineProperties(PolylineCollection.prototype, {\n  /**\n   * Returns the number of polylines in this collection.  This is commonly used with\n   * {@link PolylineCollection#get} to iterate over all the polylines\n   * in the collection.\n   * @memberof PolylineCollection.prototype\n   * @type {number}\n   */\n  length: {\n    get: function () {\n      removePolylines(this);\n      return this._polylines.length;\n    },\n  },\n});\n\n/**\n     * Creates and adds a polyline with the specified initial properties to the collection.\n     * The added polyline is returned so it can be modified or removed from the collection later.\n     *\n     * @param {object}[options] A template describing the polyline's properties as shown in Example 1.\n     * @returns {Polyline} The polyline that was added to the collection.\n     *\n     * @performance After calling <code>add</code>, {@link PolylineCollection#update} is called and\n     * the collection's vertex buffer is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.\n     * For best performance, add as many polylines as possible before calling <code>update</code>.\n     *\n     * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n     *\n     *\n     * @example\n     * // Example 1:  Add a polyline, specifying all the default values.\n     * const p = polylines.add({\n     *   show : true,\n     *   positions : ellipsoid.cartographicArrayToCartesianArray([\n           Cesium.Cartographic.fromDegrees(-75.10, 39.57),\n           Cesium.Cartographic.fromDegrees(-77.02, 38.53)]),\n     *   width : 1\n     * });\n     *\n     * @see PolylineCollection#remove\n     * @see PolylineCollection#removeAll\n     * @see PolylineCollection#update\n     */\nPolylineCollection.prototype.add = function (options) {\n  const p = new Polyline(options, this);\n  p._index = this._polylines.length;\n  this._polylines.push(p);\n  this._createVertexArray = true;\n  this._createBatchTable = true;\n  return p;\n};\n\n/**\n * Removes a polyline from the collection.\n *\n * @param {Polyline} polyline The polyline to remove.\n * @returns {boolean} <code>true</code> if the polyline was removed; <code>false</code> if the polyline was not found in the collection.\n *\n * @performance After calling <code>remove</code>, {@link PolylineCollection#update} is called and\n * the collection's vertex buffer is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.\n * For best performance, remove as many polylines as possible before calling <code>update</code>.\n * If you intend to temporarily hide a polyline, it is usually more efficient to call\n * {@link Polyline#show} instead of removing and re-adding the polyline.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * const p = polylines.add(...);\n * polylines.remove(p);  // Returns true\n *\n * @see PolylineCollection#add\n * @see PolylineCollection#removeAll\n * @see PolylineCollection#update\n * @see Polyline#show\n */\nPolylineCollection.prototype.remove = function (polyline) {\n  if (this.contains(polyline)) {\n    this._polylinesRemoved = true;\n    this._createVertexArray = true;\n    this._createBatchTable = true;\n    if (defined(polyline._bucket)) {\n      const bucket = polyline._bucket;\n      bucket.shaderProgram =\n        bucket.shaderProgram && bucket.shaderProgram.destroy();\n    }\n    polyline._destroy();\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all polylines from the collection.\n *\n * @performance <code>O(n)</code>.  It is more efficient to remove all the polylines\n * from a collection and then add new ones than to create a new collection entirely.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * polylines.add(...);\n * polylines.add(...);\n * polylines.removeAll();\n *\n * @see PolylineCollection#add\n * @see PolylineCollection#remove\n * @see PolylineCollection#update\n */\nPolylineCollection.prototype.removeAll = function () {\n  releaseShaders(this);\n  destroyPolylines(this);\n  this._polylineBuckets = {};\n  this._polylinesRemoved = false;\n  this._polylines.length = 0;\n  this._polylinesToUpdate.length = 0;\n  this._createVertexArray = true;\n};\n\n/**\n * Determines if this collection contains the specified polyline.\n *\n * @param {Polyline} polyline The polyline to check for.\n * @returns {boolean} true if this collection contains the polyline, false otherwise.\n *\n * @see PolylineCollection#get\n */\nPolylineCollection.prototype.contains = function (polyline) {\n  return defined(polyline) && polyline._polylineCollection === this;\n};\n\n/**\n * Returns the polyline in the collection at the specified index.  Indices are zero-based\n * and increase as polylines are added.  Removing a polyline shifts all polylines after\n * it to the left, changing their indices.  This function is commonly used with\n * {@link PolylineCollection#length} to iterate over all the polylines\n * in the collection.\n *\n * @param {number} index The zero-based index of the polyline.\n * @returns {Polyline} The polyline at the specified index.\n *\n * @performance If polylines were removed from the collection and\n * {@link PolylineCollection#update} was not called, an implicit <code>O(n)</code>\n * operation is performed.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * // Toggle the show property of every polyline in the collection\n * const len = polylines.length;\n * for (let i = 0; i < len; ++i) {\n *   const p = polylines.get(i);\n *   p.show = !p.show;\n * }\n *\n * @see PolylineCollection#length\n */\nPolylineCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n  //>>includeEnd('debug');\n\n  removePolylines(this);\n  return this._polylines[index];\n};\n\nfunction createBatchTable(collection, context) {\n  if (defined(collection._batchTable)) {\n    collection._batchTable.destroy();\n  }\n\n  const attributes = [\n    {\n      functionName: \"batchTable_getWidthAndShow\",\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 2,\n    },\n    {\n      functionName: \"batchTable_getPickColor\",\n      componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      componentsPerAttribute: 4,\n      normalize: true,\n    },\n    {\n      functionName: \"batchTable_getCenterHigh\",\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n    },\n    {\n      functionName: \"batchTable_getCenterLowAndRadius\",\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 4,\n    },\n    {\n      functionName: \"batchTable_getDistanceDisplayCondition\",\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 2,\n    },\n  ];\n\n  collection._batchTable = new BatchTable(\n    context,\n    attributes,\n    collection._polylines.length,\n  );\n}\n\nconst scratchUpdatePolylineEncodedCartesian = new EncodedCartesian3();\nconst scratchUpdatePolylineCartesian4 = new Cartesian4();\nconst scratchNearFarCartesian2 = new Cartesian2();\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {RuntimeError} Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.\n */\nPolylineCollection.prototype.update = function (frameState) {\n  removePolylines(this);\n\n  if (this._polylines.length === 0 || !this.show) {\n    return;\n  }\n\n  updateMode(this, frameState);\n\n  const context = frameState.context;\n  const projection = frameState.mapProjection;\n  let polyline;\n  let properties = this._propertiesChanged;\n\n  if (this._createBatchTable) {\n    if (ContextLimits.maximumVertexTextureImageUnits === 0) {\n      throw new RuntimeError(\n        \"Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.\",\n      );\n    }\n    createBatchTable(this, context);\n    this._createBatchTable = false;\n  }\n\n  if (this._createVertexArray || computeNewBuffersUsage(this)) {\n    createVertexArrays(this, context, projection);\n  } else if (this._polylinesUpdated) {\n    // Polylines were modified, but no polylines were added or removed.\n    const polylinesToUpdate = this._polylinesToUpdate;\n    if (this._mode !== SceneMode.SCENE3D) {\n      const updateLength = polylinesToUpdate.length;\n      for (let i = 0; i < updateLength; ++i) {\n        polyline = polylinesToUpdate[i];\n        polyline.update();\n      }\n    }\n\n    // if a polyline's positions size changes, we need to recreate the vertex arrays and vertex buffers because the indices will be different.\n    // if a polyline's material changes, we need to recreate the VAOs and VBOs because they will be batched differently.\n    if (properties[POSITION_SIZE_INDEX] || properties[MATERIAL_INDEX]) {\n      createVertexArrays(this, context, projection);\n    } else {\n      const length = polylinesToUpdate.length;\n      const polylineBuckets = this._polylineBuckets;\n      for (let ii = 0; ii < length; ++ii) {\n        polyline = polylinesToUpdate[ii];\n        properties = polyline._propertiesChanged;\n        const bucket = polyline._bucket;\n        let index = 0;\n        for (const x in polylineBuckets) {\n          if (polylineBuckets.hasOwnProperty(x)) {\n            if (polylineBuckets[x] === bucket) {\n              if (properties[POSITION_INDEX]) {\n                bucket.writeUpdate(\n                  index,\n                  polyline,\n                  this._positionBuffer,\n                  projection,\n                );\n              }\n              break;\n            }\n            index += polylineBuckets[x].lengthOfPositions;\n          }\n        }\n\n        if (properties[SHOW_INDEX] || properties[WIDTH_INDEX]) {\n          this._batchTable.setBatchedAttribute(\n            polyline._index,\n            0,\n            new Cartesian2(polyline._width, polyline._show),\n          );\n        }\n\n        if (this._batchTable.attributes.length > 2) {\n          if (properties[POSITION_INDEX] || properties[POSITION_SIZE_INDEX]) {\n            const boundingSphere =\n              frameState.mode === SceneMode.SCENE2D\n                ? polyline._boundingVolume2D\n                : polyline._boundingVolumeWC;\n            const encodedCenter = EncodedCartesian3.fromCartesian(\n              boundingSphere.center,\n              scratchUpdatePolylineEncodedCartesian,\n            );\n            const low = Cartesian4.fromElements(\n              encodedCenter.low.x,\n              encodedCenter.low.y,\n              encodedCenter.low.z,\n              boundingSphere.radius,\n              scratchUpdatePolylineCartesian4,\n            );\n            this._batchTable.setBatchedAttribute(\n              polyline._index,\n              2,\n              encodedCenter.high,\n            );\n            this._batchTable.setBatchedAttribute(polyline._index, 3, low);\n          }\n\n          if (properties[DISTANCE_DISPLAY_CONDITION]) {\n            const nearFarCartesian = scratchNearFarCartesian2;\n            nearFarCartesian.x = 0.0;\n            nearFarCartesian.y = Number.MAX_VALUE;\n\n            const distanceDisplayCondition = polyline.distanceDisplayCondition;\n            if (defined(distanceDisplayCondition)) {\n              nearFarCartesian.x = distanceDisplayCondition.near;\n              nearFarCartesian.y = distanceDisplayCondition.far;\n            }\n\n            this._batchTable.setBatchedAttribute(\n              polyline._index,\n              4,\n              nearFarCartesian,\n            );\n          }\n        }\n\n        polyline._clean();\n      }\n    }\n    polylinesToUpdate.length = 0;\n    this._polylinesUpdated = false;\n  }\n\n  properties = this._propertiesChanged;\n  for (let k = 0; k < NUMBER_OF_PROPERTIES; ++k) {\n    properties[k] = 0;\n  }\n\n  let modelMatrix = Matrix4.IDENTITY;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    modelMatrix = this.modelMatrix;\n  }\n\n  const pass = frameState.passes;\n  const useDepthTest = frameState.morphTime !== 0.0;\n\n  if (\n    !defined(this._opaqueRS) ||\n    this._opaqueRS.depthTest.enabled !== useDepthTest\n  ) {\n    this._opaqueRS = RenderState.fromCache({\n      depthMask: useDepthTest,\n      depthTest: {\n        enabled: useDepthTest,\n      },\n    });\n  }\n\n  if (\n    !defined(this._translucentRS) ||\n    this._translucentRS.depthTest.enabled !== useDepthTest\n  ) {\n    this._translucentRS = RenderState.fromCache({\n      blending: BlendingState.ALPHA_BLEND,\n      depthMask: !useDepthTest,\n      depthTest: {\n        enabled: useDepthTest,\n      },\n    });\n  }\n\n  this._batchTable.update(frameState);\n\n  if (pass.render || pass.pick) {\n    const colorList = this._colorCommands;\n    createCommandLists(this, frameState, colorList, modelMatrix);\n  }\n};\n\nconst boundingSphereScratch = new BoundingSphere();\nconst boundingSphereScratch2 = new BoundingSphere();\n\nfunction createCommandLists(\n  polylineCollection,\n  frameState,\n  commands,\n  modelMatrix,\n) {\n  const context = frameState.context;\n  const commandList = frameState.commandList;\n\n  const commandsLength = commands.length;\n  let commandIndex = 0;\n  let cloneBoundingSphere = true;\n\n  const vertexArrays = polylineCollection._vertexArrays;\n  const debugShowBoundingVolume = polylineCollection.debugShowBoundingVolume;\n\n  const batchTable = polylineCollection._batchTable;\n  const uniformCallback = batchTable.getUniformMapCallback();\n\n  const length = vertexArrays.length;\n  for (let m = 0; m < length; ++m) {\n    const va = vertexArrays[m];\n    const buckets = va.buckets;\n    const bucketLength = buckets.length;\n\n    for (let n = 0; n < bucketLength; ++n) {\n      const bucketLocator = buckets[n];\n\n      let offset = bucketLocator.offset;\n      const sp = bucketLocator.bucket.shaderProgram;\n\n      const polylines = bucketLocator.bucket.polylines;\n      const polylineLength = polylines.length;\n      let currentId;\n      let currentMaterial;\n      let count = 0;\n      let command;\n      let uniformMap;\n\n      for (let s = 0; s < polylineLength; ++s) {\n        const polyline = polylines[s];\n        const mId = createMaterialId(polyline._material);\n        if (mId !== currentId) {\n          if (defined(currentId) && count > 0) {\n            const translucent = currentMaterial.isTranslucent();\n\n            if (commandIndex >= commandsLength) {\n              command = new DrawCommand({\n                owner: polylineCollection,\n              });\n              commands.push(command);\n            } else {\n              command = commands[commandIndex];\n            }\n\n            ++commandIndex;\n\n            uniformMap = combine(\n              uniformCallback(currentMaterial._uniforms),\n              polylineCollection._uniformMap,\n            );\n\n            command.boundingVolume = BoundingSphere.clone(\n              boundingSphereScratch,\n              command.boundingVolume,\n            );\n            command.modelMatrix = modelMatrix;\n            command.shaderProgram = sp;\n            command.vertexArray = va.va;\n            command.renderState = translucent\n              ? polylineCollection._translucentRS\n              : polylineCollection._opaqueRS;\n            command.pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n            command.debugShowBoundingVolume = debugShowBoundingVolume;\n            command.pickId = \"v_pickColor\";\n\n            command.uniformMap = uniformMap;\n            command.count = count;\n            command.offset = offset;\n\n            offset += count;\n            count = 0;\n            cloneBoundingSphere = true;\n\n            commandList.push(command);\n          }\n\n          currentMaterial = polyline._material;\n          currentMaterial.update(context);\n          currentId = mId;\n        }\n\n        const locators = polyline._locatorBuckets;\n        const locatorLength = locators.length;\n        for (let t = 0; t < locatorLength; ++t) {\n          const locator = locators[t];\n          if (locator.locator === bucketLocator) {\n            count += locator.count;\n          }\n        }\n\n        let boundingVolume;\n        if (frameState.mode === SceneMode.SCENE3D) {\n          boundingVolume = polyline._boundingVolumeWC;\n        } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n          boundingVolume = polyline._boundingVolume2D;\n        } else if (frameState.mode === SceneMode.SCENE2D) {\n          if (defined(polyline._boundingVolume2D)) {\n            boundingVolume = BoundingSphere.clone(\n              polyline._boundingVolume2D,\n              boundingSphereScratch2,\n            );\n            boundingVolume.center.x = 0.0;\n          }\n        } else if (\n          defined(polyline._boundingVolumeWC) &&\n          defined(polyline._boundingVolume2D)\n        ) {\n          boundingVolume = BoundingSphere.union(\n            polyline._boundingVolumeWC,\n            polyline._boundingVolume2D,\n            boundingSphereScratch2,\n          );\n        }\n\n        if (cloneBoundingSphere) {\n          cloneBoundingSphere = false;\n          BoundingSphere.clone(boundingVolume, boundingSphereScratch);\n        } else {\n          BoundingSphere.union(\n            boundingVolume,\n            boundingSphereScratch,\n            boundingSphereScratch,\n          );\n        }\n      }\n\n      if (defined(currentId) && count > 0) {\n        if (commandIndex >= commandsLength) {\n          command = new DrawCommand({\n            owner: polylineCollection,\n          });\n          commands.push(command);\n        } else {\n          command = commands[commandIndex];\n        }\n\n        ++commandIndex;\n\n        uniformMap = combine(\n          uniformCallback(currentMaterial._uniforms),\n          polylineCollection._uniformMap,\n        );\n\n        command.boundingVolume = BoundingSphere.clone(\n          boundingSphereScratch,\n          command.boundingVolume,\n        );\n        command.modelMatrix = modelMatrix;\n        command.shaderProgram = sp;\n        command.vertexArray = va.va;\n        command.renderState = currentMaterial.isTranslucent()\n          ? polylineCollection._translucentRS\n          : polylineCollection._opaqueRS;\n        command.pass = currentMaterial.isTranslucent()\n          ? Pass.TRANSLUCENT\n          : Pass.OPAQUE;\n        command.debugShowBoundingVolume = debugShowBoundingVolume;\n        command.pickId = \"v_pickColor\";\n\n        command.uniformMap = uniformMap;\n        command.count = count;\n        command.offset = offset;\n\n        cloneBoundingSphere = true;\n\n        commandList.push(command);\n      }\n\n      currentId = undefined;\n    }\n  }\n\n  commands.length = commandIndex;\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PolylineCollection#destroy\n */\nPolylineCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * polylines = polylines && polylines.destroy();\n *\n * @see PolylineCollection#isDestroyed\n */\nPolylineCollection.prototype.destroy = function () {\n  destroyVertexArrays(this);\n  releaseShaders(this);\n  destroyPolylines(this);\n  this._batchTable = this._batchTable && this._batchTable.destroy();\n  return destroyObject(this);\n};\n\nfunction computeNewBuffersUsage(collection) {\n  let usageChanged = false;\n  const properties = collection._propertiesChanged;\n  const bufferUsage = collection._positionBufferUsage;\n  if (properties[POSITION_INDEX]) {\n    if (bufferUsage.bufferUsage !== BufferUsage.STREAM_DRAW) {\n      usageChanged = true;\n      bufferUsage.bufferUsage = BufferUsage.STREAM_DRAW;\n      bufferUsage.frameCount = 100;\n    } else {\n      bufferUsage.frameCount = 100;\n    }\n  } else if (bufferUsage.bufferUsage !== BufferUsage.STATIC_DRAW) {\n    if (bufferUsage.frameCount === 0) {\n      usageChanged = true;\n      bufferUsage.bufferUsage = BufferUsage.STATIC_DRAW;\n    } else {\n      bufferUsage.frameCount--;\n    }\n  }\n\n  return usageChanged;\n}\n\nconst emptyVertexBuffer = [0.0, 0.0, 0.0];\n\nfunction createVertexArrays(collection, context, projection) {\n  collection._createVertexArray = false;\n  releaseShaders(collection);\n  destroyVertexArrays(collection);\n  sortPolylinesIntoBuckets(collection);\n\n  //stores all of the individual indices arrays.\n  const totalIndices = [[]];\n  let indices = totalIndices[0];\n\n  const batchTable = collection._batchTable;\n  const useHighlightColor = collection._useHighlightColor;\n\n  //used to determine the vertexBuffer offset if the indicesArray goes over 64k.\n  //if it's the same polyline while it goes over 64k, the offset needs to backtrack componentsPerAttribute * componentDatatype bytes\n  //so that the polyline looks contiguous.\n  //if the polyline ends at the 64k mark, then the offset is just 64k * componentsPerAttribute * componentDatatype\n  const vertexBufferOffset = [0];\n  let offset = 0;\n  const vertexArrayBuckets = [[]];\n  let totalLength = 0;\n  const polylineBuckets = collection._polylineBuckets;\n  let x;\n  let bucket;\n  for (x in polylineBuckets) {\n    if (polylineBuckets.hasOwnProperty(x)) {\n      bucket = polylineBuckets[x];\n      bucket.updateShader(context, batchTable, useHighlightColor);\n      totalLength += bucket.lengthOfPositions;\n    }\n  }\n\n  if (totalLength > 0) {\n    const mode = collection._mode;\n\n    const positionArray = new Float32Array(6 * totalLength * 3);\n    const texCoordExpandAndBatchIndexArray = new Float32Array(totalLength * 4);\n    let position3DArray;\n\n    let positionIndex = 0;\n    let colorIndex = 0;\n    let texCoordExpandAndBatchIndexIndex = 0;\n    for (x in polylineBuckets) {\n      if (polylineBuckets.hasOwnProperty(x)) {\n        bucket = polylineBuckets[x];\n        bucket.write(\n          positionArray,\n          texCoordExpandAndBatchIndexArray,\n          positionIndex,\n          colorIndex,\n          texCoordExpandAndBatchIndexIndex,\n          batchTable,\n          context,\n          projection,\n        );\n\n        if (mode === SceneMode.MORPHING) {\n          if (!defined(position3DArray)) {\n            position3DArray = new Float32Array(6 * totalLength * 3);\n          }\n          bucket.writeForMorph(position3DArray, positionIndex);\n        }\n\n        const bucketLength = bucket.lengthOfPositions;\n        positionIndex += 6 * bucketLength * 3;\n        colorIndex += bucketLength * 4;\n        texCoordExpandAndBatchIndexIndex += bucketLength * 4;\n        offset = bucket.updateIndices(\n          totalIndices,\n          vertexBufferOffset,\n          vertexArrayBuckets,\n          offset,\n        );\n      }\n    }\n\n    const positionBufferUsage = collection._positionBufferUsage.bufferUsage;\n    const texCoordExpandAndBatchIndexBufferUsage = BufferUsage.STATIC_DRAW;\n\n    collection._positionBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: positionArray,\n      usage: positionBufferUsage,\n    });\n    let position3DBuffer;\n    if (defined(position3DArray)) {\n      position3DBuffer = Buffer.createVertexBuffer({\n        context: context,\n        typedArray: position3DArray,\n        usage: positionBufferUsage,\n      });\n    }\n    collection._texCoordExpandAndBatchIndexBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: texCoordExpandAndBatchIndexArray,\n      usage: texCoordExpandAndBatchIndexBufferUsage,\n    });\n\n    const positionSizeInBytes = 3 * Float32Array.BYTES_PER_ELEMENT;\n    const texCoordExpandAndBatchIndexSizeInBytes =\n      4 * Float32Array.BYTES_PER_ELEMENT;\n\n    let vbo = 0;\n    const numberOfIndicesArrays = totalIndices.length;\n    for (let k = 0; k < numberOfIndicesArrays; ++k) {\n      indices = totalIndices[k];\n\n      if (indices.length > 0) {\n        const indicesArray = new Uint16Array(indices);\n        const indexBuffer = Buffer.createIndexBuffer({\n          context: context,\n          typedArray: indicesArray,\n          usage: BufferUsage.STATIC_DRAW,\n          indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n        });\n\n        vbo += vertexBufferOffset[k];\n\n        const positionHighOffset =\n          6 *\n          (k * (positionSizeInBytes * CesiumMath.SIXTY_FOUR_KILOBYTES) -\n            vbo * positionSizeInBytes); //componentsPerAttribute(3) * componentDatatype(4)\n        const positionLowOffset = positionSizeInBytes + positionHighOffset;\n        const prevPositionHighOffset = positionSizeInBytes + positionLowOffset;\n        const prevPositionLowOffset =\n          positionSizeInBytes + prevPositionHighOffset;\n        const nextPositionHighOffset =\n          positionSizeInBytes + prevPositionLowOffset;\n        const nextPositionLowOffset =\n          positionSizeInBytes + nextPositionHighOffset;\n        const vertexTexCoordExpandAndBatchIndexBufferOffset =\n          k *\n            (texCoordExpandAndBatchIndexSizeInBytes *\n              CesiumMath.SIXTY_FOUR_KILOBYTES) -\n          vbo * texCoordExpandAndBatchIndexSizeInBytes;\n\n        const attributes = [\n          {\n            index: attributeLocations.position3DHigh,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: positionHighOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.position3DLow,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: positionLowOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.position2DHigh,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: positionHighOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.position2DLow,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: positionLowOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.prevPosition3DHigh,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: prevPositionHighOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.prevPosition3DLow,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: prevPositionLowOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.prevPosition2DHigh,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: prevPositionHighOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.prevPosition2DLow,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: prevPositionLowOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.nextPosition3DHigh,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: nextPositionHighOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.nextPosition3DLow,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: nextPositionLowOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.nextPosition2DHigh,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: nextPositionHighOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.nextPosition2DLow,\n            componentsPerAttribute: 3,\n            componentDatatype: ComponentDatatype.FLOAT,\n            offsetInBytes: nextPositionLowOffset,\n            strideInBytes: 6 * positionSizeInBytes,\n          },\n          {\n            index: attributeLocations.texCoordExpandAndBatchIndex,\n            componentsPerAttribute: 4,\n            componentDatatype: ComponentDatatype.FLOAT,\n            vertexBuffer: collection._texCoordExpandAndBatchIndexBuffer,\n            offsetInBytes: vertexTexCoordExpandAndBatchIndexBufferOffset,\n          },\n        ];\n\n        let bufferProperty3D;\n        let buffer3D;\n        let buffer2D;\n        let bufferProperty2D;\n\n        if (mode === SceneMode.SCENE3D) {\n          buffer3D = collection._positionBuffer;\n          bufferProperty3D = \"vertexBuffer\";\n          buffer2D = emptyVertexBuffer;\n          bufferProperty2D = \"value\";\n        } else if (\n          mode === SceneMode.SCENE2D ||\n          mode === SceneMode.COLUMBUS_VIEW\n        ) {\n          buffer3D = emptyVertexBuffer;\n          bufferProperty3D = \"value\";\n          buffer2D = collection._positionBuffer;\n          bufferProperty2D = \"vertexBuffer\";\n        } else {\n          buffer3D = position3DBuffer;\n          bufferProperty3D = \"vertexBuffer\";\n          buffer2D = collection._positionBuffer;\n          bufferProperty2D = \"vertexBuffer\";\n        }\n\n        attributes[0][bufferProperty3D] = buffer3D;\n        attributes[1][bufferProperty3D] = buffer3D;\n        attributes[2][bufferProperty2D] = buffer2D;\n        attributes[3][bufferProperty2D] = buffer2D;\n        attributes[4][bufferProperty3D] = buffer3D;\n        attributes[5][bufferProperty3D] = buffer3D;\n        attributes[6][bufferProperty2D] = buffer2D;\n        attributes[7][bufferProperty2D] = buffer2D;\n        attributes[8][bufferProperty3D] = buffer3D;\n        attributes[9][bufferProperty3D] = buffer3D;\n        attributes[10][bufferProperty2D] = buffer2D;\n        attributes[11][bufferProperty2D] = buffer2D;\n\n        const va = new VertexArray({\n          context: context,\n          attributes: attributes,\n          indexBuffer: indexBuffer,\n        });\n        collection._vertexArrays.push({\n          va: va,\n          buckets: vertexArrayBuckets[k],\n        });\n      }\n    }\n  }\n}\n\nfunction replacer(key, value) {\n  if (value instanceof Texture) {\n    return value.id;\n  }\n\n  return value;\n}\n\nconst scratchUniformArray = [];\nfunction createMaterialId(material) {\n  const uniforms = Material._uniformList[material.type];\n  const length = uniforms.length;\n  scratchUniformArray.length = 2.0 * length;\n\n  let index = 0;\n  for (let i = 0; i < length; ++i) {\n    const uniform = uniforms[i];\n    scratchUniformArray[index] = uniform;\n    scratchUniformArray[index + 1] = material._uniforms[uniform]();\n    index += 2;\n  }\n\n  return `${material.type}:${JSON.stringify(scratchUniformArray, replacer)}`;\n}\n\nfunction sortPolylinesIntoBuckets(collection) {\n  const mode = collection._mode;\n  const modelMatrix = collection._modelMatrix;\n\n  const polylineBuckets = (collection._polylineBuckets = {});\n  const polylines = collection._polylines;\n  const length = polylines.length;\n  for (let i = 0; i < length; ++i) {\n    const p = polylines[i];\n    if (p._actualPositions.length > 1) {\n      p.update();\n      const material = p.material;\n      let value = polylineBuckets[material.type];\n      if (!defined(value)) {\n        value = polylineBuckets[material.type] = new PolylineBucket(\n          material,\n          mode,\n          modelMatrix,\n        );\n      }\n      value.addPolyline(p);\n    }\n  }\n}\n\nfunction updateMode(collection, frameState) {\n  const mode = frameState.mode;\n\n  if (\n    collection._mode !== mode ||\n    !Matrix4.equals(collection._modelMatrix, collection.modelMatrix)\n  ) {\n    collection._mode = mode;\n    collection._modelMatrix = Matrix4.clone(collection.modelMatrix);\n    collection._createVertexArray = true;\n  }\n}\n\nfunction removePolylines(collection) {\n  if (collection._polylinesRemoved) {\n    collection._polylinesRemoved = false;\n    const definedPolylines = [];\n    const definedPolylinesToUpdate = [];\n    let polyIndex = 0;\n    let polyline;\n\n    const length = collection._polylines.length;\n    for (let i = 0; i < length; ++i) {\n      polyline = collection._polylines[i];\n      if (!polyline.isDestroyed) {\n        polyline._index = polyIndex++;\n        definedPolylinesToUpdate.push(polyline);\n        definedPolylines.push(polyline);\n      }\n    }\n\n    collection._polylines = definedPolylines;\n    collection._polylinesToUpdate = definedPolylinesToUpdate;\n  }\n}\n\nfunction releaseShaders(collection) {\n  const polylines = collection._polylines;\n  const length = polylines.length;\n  for (let i = 0; i < length; ++i) {\n    if (!polylines[i].isDestroyed) {\n      const bucket = polylines[i]._bucket;\n      if (defined(bucket)) {\n        bucket.shaderProgram =\n          bucket.shaderProgram && bucket.shaderProgram.destroy();\n      }\n    }\n  }\n}\n\nfunction destroyVertexArrays(collection) {\n  const length = collection._vertexArrays.length;\n  for (let t = 0; t < length; ++t) {\n    collection._vertexArrays[t].va.destroy();\n  }\n  collection._vertexArrays.length = 0;\n}\n\nPolylineCollection.prototype._updatePolyline = function (\n  polyline,\n  propertyChanged,\n) {\n  this._polylinesUpdated = true;\n  if (!polyline._dirty) {\n    this._polylinesToUpdate.push(polyline);\n  }\n  ++this._propertiesChanged[propertyChanged];\n};\n\nfunction destroyPolylines(collection) {\n  const polylines = collection._polylines;\n  const length = polylines.length;\n  for (let i = 0; i < length; ++i) {\n    if (!polylines[i].isDestroyed) {\n      polylines[i]._destroy();\n    }\n  }\n}\n\nfunction VertexArrayBucketLocator(count, offset, bucket) {\n  this.count = count;\n  this.offset = offset;\n  this.bucket = bucket;\n}\n\nfunction PolylineBucket(material, mode, modelMatrix) {\n  this.polylines = [];\n  this.lengthOfPositions = 0;\n  this.material = material;\n  this.shaderProgram = undefined;\n  this.mode = mode;\n  this.modelMatrix = modelMatrix;\n}\n\nPolylineBucket.prototype.addPolyline = function (p) {\n  const polylines = this.polylines;\n  polylines.push(p);\n  p._actualLength = this.getPolylinePositionsLength(p);\n  this.lengthOfPositions += p._actualLength;\n  p._bucket = this;\n};\n\nPolylineBucket.prototype.updateShader = function (\n  context,\n  batchTable,\n  useHighlightColor,\n) {\n  if (defined(this.shaderProgram)) {\n    return;\n  }\n\n  const defines = [\"DISTANCE_DISPLAY_CONDITION\"];\n  if (useHighlightColor) {\n    defines.push(\"VECTOR_TILE\");\n  }\n\n  // Check for use of v_polylineAngle in material shader\n  if (\n    this.material.shaderSource.search(/in\\s+float\\s+v_polylineAngle;/g) !== -1\n  ) {\n    defines.push(\"POLYLINE_DASH\");\n  }\n\n  defines.push(\"CLIP_POLYLINE\");\n\n  const fs = new ShaderSource({\n    defines: defines,\n    sources: [\"in vec4 v_pickColor;\\n\", this.material.shaderSource, PolylineFS],\n  });\n\n  const vsSource = batchTable.getVertexShaderCallback()(PolylineVS);\n  const vs = new ShaderSource({\n    defines: defines,\n    sources: [PolylineCommon, vsSource],\n  });\n\n  this.shaderProgram = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n};\n\nfunction intersectsIDL(polyline) {\n  return (\n    Cartesian3.dot(Cartesian3.UNIT_X, polyline._boundingVolume.center) < 0 ||\n    polyline._boundingVolume.intersectPlane(Plane.ORIGIN_ZX_PLANE) ===\n      Intersect.INTERSECTING\n  );\n}\n\nPolylineBucket.prototype.getPolylinePositionsLength = function (polyline) {\n  let length;\n  if (this.mode === SceneMode.SCENE3D || !intersectsIDL(polyline)) {\n    length = polyline._actualPositions.length;\n    return length * 4.0 - 4.0;\n  }\n\n  let count = 0;\n  const segmentLengths = polyline._segments.lengths;\n  length = segmentLengths.length;\n  for (let i = 0; i < length; ++i) {\n    count += segmentLengths[i] * 4.0 - 4.0;\n  }\n\n  return count;\n};\n\nconst scratchWritePosition = new Cartesian3();\nconst scratchWritePrevPosition = new Cartesian3();\nconst scratchWriteNextPosition = new Cartesian3();\nconst scratchWriteVector = new Cartesian3();\nconst scratchPickColorCartesian = new Cartesian4();\nconst scratchWidthShowCartesian = new Cartesian2();\n\nPolylineBucket.prototype.write = function (\n  positionArray,\n  texCoordExpandAndBatchIndexArray,\n  positionIndex,\n  colorIndex,\n  texCoordExpandAndBatchIndexIndex,\n  batchTable,\n  context,\n  projection,\n) {\n  const mode = this.mode;\n  const maxLon = projection.ellipsoid.maximumRadius * CesiumMath.PI;\n\n  const polylines = this.polylines;\n  const length = polylines.length;\n  for (let i = 0; i < length; ++i) {\n    const polyline = polylines[i];\n    const width = polyline.width;\n    const show = polyline.show && width > 0.0;\n    const polylineBatchIndex = polyline._index;\n    const segments = this.getSegments(polyline, projection);\n    const positions = segments.positions;\n    const lengths = segments.lengths;\n    const positionsLength = positions.length;\n\n    const pickColor = polyline.getPickId(context).color;\n\n    let segmentIndex = 0;\n    let count = 0;\n    let position;\n\n    for (let j = 0; j < positionsLength; ++j) {\n      if (j === 0) {\n        if (polyline._loop) {\n          position = positions[positionsLength - 2];\n        } else {\n          position = scratchWriteVector;\n          Cartesian3.subtract(positions[0], positions[1], position);\n          Cartesian3.add(positions[0], position, position);\n        }\n      } else {\n        position = positions[j - 1];\n      }\n\n      Cartesian3.clone(position, scratchWritePrevPosition);\n      Cartesian3.clone(positions[j], scratchWritePosition);\n\n      if (j === positionsLength - 1) {\n        if (polyline._loop) {\n          position = positions[1];\n        } else {\n          position = scratchWriteVector;\n          Cartesian3.subtract(\n            positions[positionsLength - 1],\n            positions[positionsLength - 2],\n            position,\n          );\n          Cartesian3.add(positions[positionsLength - 1], position, position);\n        }\n      } else {\n        position = positions[j + 1];\n      }\n\n      Cartesian3.clone(position, scratchWriteNextPosition);\n\n      const segmentLength = lengths[segmentIndex];\n      if (j === count + segmentLength) {\n        count += segmentLength;\n        ++segmentIndex;\n      }\n\n      const segmentStart = j - count === 0;\n      const segmentEnd = j === count + lengths[segmentIndex] - 1;\n\n      if (mode === SceneMode.SCENE2D) {\n        scratchWritePrevPosition.z = 0.0;\n        scratchWritePosition.z = 0.0;\n        scratchWriteNextPosition.z = 0.0;\n      }\n\n      if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n        if (\n          (segmentStart || segmentEnd) &&\n          maxLon - Math.abs(scratchWritePosition.x) < 1.0\n        ) {\n          if (\n            (scratchWritePosition.x < 0.0 &&\n              scratchWritePrevPosition.x > 0.0) ||\n            (scratchWritePosition.x > 0.0 && scratchWritePrevPosition.x < 0.0)\n          ) {\n            Cartesian3.clone(scratchWritePosition, scratchWritePrevPosition);\n          }\n\n          if (\n            (scratchWritePosition.x < 0.0 &&\n              scratchWriteNextPosition.x > 0.0) ||\n            (scratchWritePosition.x > 0.0 && scratchWriteNextPosition.x < 0.0)\n          ) {\n            Cartesian3.clone(scratchWritePosition, scratchWriteNextPosition);\n          }\n        }\n      }\n\n      const startK = segmentStart ? 2 : 0;\n      const endK = segmentEnd ? 2 : 4;\n\n      for (let k = startK; k < endK; ++k) {\n        EncodedCartesian3.writeElements(\n          scratchWritePosition,\n          positionArray,\n          positionIndex,\n        );\n        EncodedCartesian3.writeElements(\n          scratchWritePrevPosition,\n          positionArray,\n          positionIndex + 6,\n        );\n        EncodedCartesian3.writeElements(\n          scratchWriteNextPosition,\n          positionArray,\n          positionIndex + 12,\n        );\n\n        const direction = k - 2 < 0 ? -1.0 : 1.0;\n        texCoordExpandAndBatchIndexArray[texCoordExpandAndBatchIndexIndex] =\n          j / (positionsLength - 1); // s tex coord\n        texCoordExpandAndBatchIndexArray[texCoordExpandAndBatchIndexIndex + 1] =\n          2 * (k % 2) - 1; // expand direction\n        texCoordExpandAndBatchIndexArray[texCoordExpandAndBatchIndexIndex + 2] =\n          direction;\n        texCoordExpandAndBatchIndexArray[texCoordExpandAndBatchIndexIndex + 3] =\n          polylineBatchIndex;\n\n        positionIndex += 6 * 3;\n        texCoordExpandAndBatchIndexIndex += 4;\n      }\n    }\n\n    const colorCartesian = scratchPickColorCartesian;\n    colorCartesian.x = Color.floatToByte(pickColor.red);\n    colorCartesian.y = Color.floatToByte(pickColor.green);\n    colorCartesian.z = Color.floatToByte(pickColor.blue);\n    colorCartesian.w = Color.floatToByte(pickColor.alpha);\n\n    const widthShowCartesian = scratchWidthShowCartesian;\n    widthShowCartesian.x = width;\n    widthShowCartesian.y = show ? 1.0 : 0.0;\n\n    const boundingSphere =\n      mode === SceneMode.SCENE2D\n        ? polyline._boundingVolume2D\n        : polyline._boundingVolumeWC;\n    const encodedCenter = EncodedCartesian3.fromCartesian(\n      boundingSphere.center,\n      scratchUpdatePolylineEncodedCartesian,\n    );\n    const high = encodedCenter.high;\n    const low = Cartesian4.fromElements(\n      encodedCenter.low.x,\n      encodedCenter.low.y,\n      encodedCenter.low.z,\n      boundingSphere.radius,\n      scratchUpdatePolylineCartesian4,\n    );\n\n    const nearFarCartesian = scratchNearFarCartesian2;\n    nearFarCartesian.x = 0.0;\n    nearFarCartesian.y = Number.MAX_VALUE;\n\n    const distanceDisplayCondition = polyline.distanceDisplayCondition;\n    if (defined(distanceDisplayCondition)) {\n      nearFarCartesian.x = distanceDisplayCondition.near;\n      nearFarCartesian.y = distanceDisplayCondition.far;\n    }\n\n    batchTable.setBatchedAttribute(polylineBatchIndex, 0, widthShowCartesian);\n    batchTable.setBatchedAttribute(polylineBatchIndex, 1, colorCartesian);\n\n    if (batchTable.attributes.length > 2) {\n      batchTable.setBatchedAttribute(polylineBatchIndex, 2, high);\n      batchTable.setBatchedAttribute(polylineBatchIndex, 3, low);\n      batchTable.setBatchedAttribute(polylineBatchIndex, 4, nearFarCartesian);\n    }\n  }\n};\n\nconst morphPositionScratch = new Cartesian3();\nconst morphPrevPositionScratch = new Cartesian3();\nconst morphNextPositionScratch = new Cartesian3();\nconst morphVectorScratch = new Cartesian3();\n\nPolylineBucket.prototype.writeForMorph = function (\n  positionArray,\n  positionIndex,\n) {\n  const modelMatrix = this.modelMatrix;\n  const polylines = this.polylines;\n  const length = polylines.length;\n  for (let i = 0; i < length; ++i) {\n    const polyline = polylines[i];\n    const positions = polyline._segments.positions;\n    const lengths = polyline._segments.lengths;\n    const positionsLength = positions.length;\n\n    let segmentIndex = 0;\n    let count = 0;\n\n    for (let j = 0; j < positionsLength; ++j) {\n      let prevPosition;\n      if (j === 0) {\n        if (polyline._loop) {\n          prevPosition = positions[positionsLength - 2];\n        } else {\n          prevPosition = morphVectorScratch;\n          Cartesian3.subtract(positions[0], positions[1], prevPosition);\n          Cartesian3.add(positions[0], prevPosition, prevPosition);\n        }\n      } else {\n        prevPosition = positions[j - 1];\n      }\n\n      prevPosition = Matrix4.multiplyByPoint(\n        modelMatrix,\n        prevPosition,\n        morphPrevPositionScratch,\n      );\n\n      const position = Matrix4.multiplyByPoint(\n        modelMatrix,\n        positions[j],\n        morphPositionScratch,\n      );\n\n      let nextPosition;\n      if (j === positionsLength - 1) {\n        if (polyline._loop) {\n          nextPosition = positions[1];\n        } else {\n          nextPosition = morphVectorScratch;\n          Cartesian3.subtract(\n            positions[positionsLength - 1],\n            positions[positionsLength - 2],\n            nextPosition,\n          );\n          Cartesian3.add(\n            positions[positionsLength - 1],\n            nextPosition,\n            nextPosition,\n          );\n        }\n      } else {\n        nextPosition = positions[j + 1];\n      }\n\n      nextPosition = Matrix4.multiplyByPoint(\n        modelMatrix,\n        nextPosition,\n        morphNextPositionScratch,\n      );\n\n      const segmentLength = lengths[segmentIndex];\n      if (j === count + segmentLength) {\n        count += segmentLength;\n        ++segmentIndex;\n      }\n\n      const segmentStart = j - count === 0;\n      const segmentEnd = j === count + lengths[segmentIndex] - 1;\n\n      const startK = segmentStart ? 2 : 0;\n      const endK = segmentEnd ? 2 : 4;\n\n      for (let k = startK; k < endK; ++k) {\n        EncodedCartesian3.writeElements(position, positionArray, positionIndex);\n        EncodedCartesian3.writeElements(\n          prevPosition,\n          positionArray,\n          positionIndex + 6,\n        );\n        EncodedCartesian3.writeElements(\n          nextPosition,\n          positionArray,\n          positionIndex + 12,\n        );\n\n        positionIndex += 6 * 3;\n      }\n    }\n  }\n};\n\nconst scratchSegmentLengths = new Array(1);\n\nPolylineBucket.prototype.updateIndices = function (\n  totalIndices,\n  vertexBufferOffset,\n  vertexArrayBuckets,\n  offset,\n) {\n  let vaCount = vertexArrayBuckets.length - 1;\n  let bucketLocator = new VertexArrayBucketLocator(0, offset, this);\n  vertexArrayBuckets[vaCount].push(bucketLocator);\n  let count = 0;\n  let indices = totalIndices[totalIndices.length - 1];\n  let indicesCount = 0;\n  if (indices.length > 0) {\n    indicesCount = indices[indices.length - 1] + 1;\n  }\n  const polylines = this.polylines;\n  const length = polylines.length;\n  for (let i = 0; i < length; ++i) {\n    const polyline = polylines[i];\n    polyline._locatorBuckets = [];\n\n    let segments;\n    if (this.mode === SceneMode.SCENE3D) {\n      segments = scratchSegmentLengths;\n      const positionsLength = polyline._actualPositions.length;\n      if (positionsLength > 0) {\n        segments[0] = positionsLength;\n      } else {\n        continue;\n      }\n    } else {\n      segments = polyline._segments.lengths;\n    }\n\n    const numberOfSegments = segments.length;\n    if (numberOfSegments > 0) {\n      let segmentIndexCount = 0;\n      for (let j = 0; j < numberOfSegments; ++j) {\n        const segmentLength = segments[j] - 1.0;\n        for (let k = 0; k < segmentLength; ++k) {\n          if (indicesCount + 4 > CesiumMath.SIXTY_FOUR_KILOBYTES) {\n            polyline._locatorBuckets.push({\n              locator: bucketLocator,\n              count: segmentIndexCount,\n            });\n            segmentIndexCount = 0;\n            vertexBufferOffset.push(4);\n            indices = [];\n            totalIndices.push(indices);\n            indicesCount = 0;\n            bucketLocator.count = count;\n            count = 0;\n            offset = 0;\n            bucketLocator = new VertexArrayBucketLocator(0, 0, this);\n            vertexArrayBuckets[++vaCount] = [bucketLocator];\n          }\n\n          indices.push(indicesCount, indicesCount + 2, indicesCount + 1);\n          indices.push(indicesCount + 1, indicesCount + 2, indicesCount + 3);\n\n          segmentIndexCount += 6;\n          count += 6;\n          offset += 6;\n          indicesCount += 4;\n        }\n      }\n\n      polyline._locatorBuckets.push({\n        locator: bucketLocator,\n        count: segmentIndexCount,\n      });\n\n      if (indicesCount + 4 > CesiumMath.SIXTY_FOUR_KILOBYTES) {\n        vertexBufferOffset.push(0);\n        indices = [];\n        totalIndices.push(indices);\n        indicesCount = 0;\n        bucketLocator.count = count;\n        offset = 0;\n        count = 0;\n        bucketLocator = new VertexArrayBucketLocator(0, 0, this);\n        vertexArrayBuckets[++vaCount] = [bucketLocator];\n      }\n    }\n    polyline._clean();\n  }\n  bucketLocator.count = count;\n  return offset;\n};\n\nPolylineBucket.prototype.getPolylineStartIndex = function (polyline) {\n  const polylines = this.polylines;\n  let positionIndex = 0;\n  const length = polylines.length;\n  for (let i = 0; i < length; ++i) {\n    const p = polylines[i];\n    if (p === polyline) {\n      break;\n    }\n    positionIndex += p._actualLength;\n  }\n  return positionIndex;\n};\n\nconst scratchSegments = {\n  positions: undefined,\n  lengths: undefined,\n};\nconst scratchLengths = new Array(1);\nconst pscratch = new Cartesian3();\nconst scratchCartographic = new Cartographic();\n\nPolylineBucket.prototype.getSegments = function (polyline, projection) {\n  let positions = polyline._actualPositions;\n\n  if (this.mode === SceneMode.SCENE3D) {\n    scratchLengths[0] = positions.length;\n    scratchSegments.positions = positions;\n    scratchSegments.lengths = scratchLengths;\n    return scratchSegments;\n  }\n\n  if (intersectsIDL(polyline)) {\n    positions = polyline._segments.positions;\n  }\n\n  const ellipsoid = projection.ellipsoid;\n  const newPositions = [];\n  const modelMatrix = this.modelMatrix;\n  const length = positions.length;\n  let position;\n  let p = pscratch;\n\n  for (let n = 0; n < length; ++n) {\n    position = positions[n];\n    p = Matrix4.multiplyByPoint(modelMatrix, position, p);\n    newPositions.push(\n      projection.project(\n        ellipsoid.cartesianToCartographic(p, scratchCartographic),\n      ),\n    );\n  }\n\n  if (newPositions.length > 0) {\n    polyline._boundingVolume2D = BoundingSphere.fromPoints(\n      newPositions,\n      polyline._boundingVolume2D,\n    );\n    const center2D = polyline._boundingVolume2D.center;\n    polyline._boundingVolume2D.center = new Cartesian3(\n      center2D.z,\n      center2D.x,\n      center2D.y,\n    );\n  }\n\n  scratchSegments.positions = newPositions;\n  scratchSegments.lengths = polyline._segments.lengths;\n  return scratchSegments;\n};\n\nlet scratchPositionsArray;\n\nPolylineBucket.prototype.writeUpdate = function (\n  index,\n  polyline,\n  positionBuffer,\n  projection,\n) {\n  const mode = this.mode;\n  const maxLon = projection.ellipsoid.maximumRadius * CesiumMath.PI;\n\n  let positionsLength = polyline._actualLength;\n  if (positionsLength) {\n    index += this.getPolylineStartIndex(polyline);\n\n    let positionArray = scratchPositionsArray;\n    const positionsArrayLength = 6 * positionsLength * 3;\n\n    if (\n      !defined(positionArray) ||\n      positionArray.length < positionsArrayLength\n    ) {\n      positionArray = scratchPositionsArray = new Float32Array(\n        positionsArrayLength,\n      );\n    } else if (positionArray.length > positionsArrayLength) {\n      positionArray = new Float32Array(\n        positionArray.buffer,\n        0,\n        positionsArrayLength,\n      );\n    }\n\n    const segments = this.getSegments(polyline, projection);\n    const positions = segments.positions;\n    const lengths = segments.lengths;\n\n    let positionIndex = 0;\n    let segmentIndex = 0;\n    let count = 0;\n    let position;\n\n    positionsLength = positions.length;\n    for (let i = 0; i < positionsLength; ++i) {\n      if (i === 0) {\n        if (polyline._loop) {\n          position = positions[positionsLength - 2];\n        } else {\n          position = scratchWriteVector;\n          Cartesian3.subtract(positions[0], positions[1], position);\n          Cartesian3.add(positions[0], position, position);\n        }\n      } else {\n        position = positions[i - 1];\n      }\n\n      Cartesian3.clone(position, scratchWritePrevPosition);\n      Cartesian3.clone(positions[i], scratchWritePosition);\n\n      if (i === positionsLength - 1) {\n        if (polyline._loop) {\n          position = positions[1];\n        } else {\n          position = scratchWriteVector;\n          Cartesian3.subtract(\n            positions[positionsLength - 1],\n            positions[positionsLength - 2],\n            position,\n          );\n          Cartesian3.add(positions[positionsLength - 1], position, position);\n        }\n      } else {\n        position = positions[i + 1];\n      }\n\n      Cartesian3.clone(position, scratchWriteNextPosition);\n\n      const segmentLength = lengths[segmentIndex];\n      if (i === count + segmentLength) {\n        count += segmentLength;\n        ++segmentIndex;\n      }\n\n      const segmentStart = i - count === 0;\n      const segmentEnd = i === count + lengths[segmentIndex] - 1;\n\n      if (mode === SceneMode.SCENE2D) {\n        scratchWritePrevPosition.z = 0.0;\n        scratchWritePosition.z = 0.0;\n        scratchWriteNextPosition.z = 0.0;\n      }\n\n      if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n        if (\n          (segmentStart || segmentEnd) &&\n          maxLon - Math.abs(scratchWritePosition.x) < 1.0\n        ) {\n          if (\n            (scratchWritePosition.x < 0.0 &&\n              scratchWritePrevPosition.x > 0.0) ||\n            (scratchWritePosition.x > 0.0 && scratchWritePrevPosition.x < 0.0)\n          ) {\n            Cartesian3.clone(scratchWritePosition, scratchWritePrevPosition);\n          }\n\n          if (\n            (scratchWritePosition.x < 0.0 &&\n              scratchWriteNextPosition.x > 0.0) ||\n            (scratchWritePosition.x > 0.0 && scratchWriteNextPosition.x < 0.0)\n          ) {\n            Cartesian3.clone(scratchWritePosition, scratchWriteNextPosition);\n          }\n        }\n      }\n\n      const startJ = segmentStart ? 2 : 0;\n      const endJ = segmentEnd ? 2 : 4;\n\n      for (let j = startJ; j < endJ; ++j) {\n        EncodedCartesian3.writeElements(\n          scratchWritePosition,\n          positionArray,\n          positionIndex,\n        );\n        EncodedCartesian3.writeElements(\n          scratchWritePrevPosition,\n          positionArray,\n          positionIndex + 6,\n        );\n        EncodedCartesian3.writeElements(\n          scratchWriteNextPosition,\n          positionArray,\n          positionIndex + 12,\n        );\n        positionIndex += 6 * 3;\n      }\n    }\n\n    positionBuffer.copyFromArrayView(\n      positionArray,\n      6 * 3 * Float32Array.BYTES_PER_ELEMENT * index,\n    );\n  }\n};\nexport default PolylineCollection;\n","import Frozen from \"../Core/Frozen.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport PerInstanceFlatColorAppearanceFS from \"../Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js\";\nimport PolylineColorAppearanceVS from \"../Shaders/Appearances/PolylineColorAppearanceVS.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport Appearance from \"./Appearance.js\";\n\nconst defaultVertexShaderSource = `#define CLIP_POLYLINE \\n${PolylineCommon}\\n${PolylineColorAppearanceVS}`;\nconst defaultFragmentShaderSource = PerInstanceFlatColorAppearanceFS;\n\n/**\n * An appearance for {@link GeometryInstance} instances with color attributes and\n * {@link PolylineGeometry} or {@link GroundPolylineGeometry}.\n * This allows several geometry instances, each with a different color, to\n * be drawn with the same {@link Primitive}.\n *\n * @alias PolylineColorAppearance\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link PolylineColorAppearance#renderState} has alpha blending enabled.\n * @param {string} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {string} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {object} [options.renderState] Optional render state to override the default render state.\n *\n * @example\n * // A solid white line segment\n * const primitive = new Cesium.Primitive({\n *   geometryInstances : new Cesium.GeometryInstance({\n *     geometry : new Cesium.PolylineGeometry({\n *       positions : Cesium.Cartesian3.fromDegreesArray([\n *         0.0, 0.0,\n *         5.0, 0.0\n *       ]),\n *       width : 10.0,\n *       vertexFormat : Cesium.PolylineColorAppearance.VERTEX_FORMAT\n *     }),\n *     attributes : {\n *       color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 1.0, 1.0, 1.0))\n *     }\n *   }),\n *   appearance : new Cesium.PolylineColorAppearance({\n *     translucent : false\n *   })\n * });\n */\nfunction PolylineColorAppearance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const translucent = options.translucent ?? true;\n  const closed = false;\n  const vertexFormat = PolylineColorAppearance.VERTEX_FORMAT;\n\n  /**\n   * This property is part of the {@link Appearance} interface, but is not\n   * used by {@link PolylineColorAppearance} since a fully custom fragment shader is used.\n   *\n   * @type Material\n   *\n   * @default undefined\n   */\n  this.material = undefined;\n\n  /**\n   * When <code>true</code>, the geometry is expected to appear translucent so\n   * {@link PolylineColorAppearance#renderState} has alpha blending enabled.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.translucent = translucent;\n\n  this._vertexShaderSource =\n    options.vertexShaderSource ?? defaultVertexShaderSource;\n  this._fragmentShaderSource =\n    options.fragmentShaderSource ?? defaultFragmentShaderSource;\n  this._renderState = Appearance.getDefaultRenderState(\n    translucent,\n    closed,\n    options.renderState,\n  );\n  this._closed = closed;\n\n  // Non-derived members\n\n  this._vertexFormat = vertexFormat;\n}\n\nObject.defineProperties(PolylineColorAppearance.prototype, {\n  /**\n   * The GLSL source code for the vertex shader.\n   *\n   * @memberof PolylineColorAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      return this._vertexShaderSource;\n    },\n  },\n\n  /**\n   * The GLSL source code for the fragment shader.\n   *\n   * @memberof PolylineColorAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n\n  /**\n   * The WebGL fixed-function state to use when rendering the geometry.\n   * <p>\n   * The render state can be explicitly defined when constructing a {@link PolylineColorAppearance}\n   * instance, or it is set implicitly via {@link PolylineColorAppearance#translucent}.\n   * </p>\n   *\n   * @memberof PolylineColorAppearance.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be closed so\n   * {@link PolylineColorAppearance#renderState} has backface culling enabled.\n   * This is always <code>false</code> for <code>PolylineColorAppearance</code>.\n   *\n   * @memberof PolylineColorAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  closed: {\n    get: function () {\n      return this._closed;\n    },\n  },\n\n  /**\n   * The {@link VertexFormat} that this appearance instance is compatible with.\n   * A geometry can have more vertex attributes and still be compatible - at a\n   * potential performance cost - but it can't have less.\n   *\n   * @memberof PolylineColorAppearance.prototype\n   *\n   * @type VertexFormat\n   * @readonly\n   *\n   * @default {@link PolylineColorAppearance.VERTEX_FORMAT}\n   */\n  vertexFormat: {\n    get: function () {\n      return this._vertexFormat;\n    },\n  },\n});\n\n/**\n * The {@link VertexFormat} that all {@link PolylineColorAppearance} instances\n * are compatible with. This requires only a <code>position</code> attribute.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPolylineColorAppearance.VERTEX_FORMAT = VertexFormat.POSITION_ONLY;\n\n/**\n * Procedurally creates the full GLSL fragment shader source.\n *\n * @function\n *\n * @returns {string} The full GLSL fragment shader source.\n */\nPolylineColorAppearance.prototype.getFragmentShaderSource =\n  Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link PolylineColorAppearance#translucent}.\n *\n * @function\n *\n * @returns {boolean} <code>true</code> if the appearance is translucent.\n */\nPolylineColorAppearance.prototype.isTranslucent =\n  Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state.  This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {object} The render state.\n */\nPolylineColorAppearance.prototype.getRenderState =\n  Appearance.prototype.getRenderState;\nexport default PolylineColorAppearance;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport PolylineMaterialAppearanceVS from \"../Shaders/Appearances/PolylineMaterialAppearanceVS.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport PolylineFS from \"../Shaders/PolylineFS.js\";\nimport Appearance from \"./Appearance.js\";\nimport Material from \"./Material.js\";\n\nconst defaultVertexShaderSource = `#define CLIP_POLYLINE \\n${PolylineCommon}\\n${PolylineMaterialAppearanceVS}`;\nconst defaultFragmentShaderSource = PolylineFS;\n\n/**\n * An appearance for {@link PolylineGeometry} that supports shading with materials.\n *\n * @alias PolylineMaterialAppearance\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.translucent=true] When <code>true</code>, the geometry is expected to appear translucent so {@link PolylineMaterialAppearance#renderState} has alpha blending enabled.\n * @param {Material} [options.material=Material.ColorType] The material used to determine the fragment color.\n * @param {string} [options.vertexShaderSource] Optional GLSL vertex shader source to override the default vertex shader.\n * @param {string} [options.fragmentShaderSource] Optional GLSL fragment shader source to override the default fragment shader.\n * @param {object} [options.renderState] Optional render state to override the default render state.\n *\n * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n *\n * @example\n * const primitive = new Cesium.Primitive({\n *   geometryInstances : new Cesium.GeometryInstance({\n *     geometry : new Cesium.PolylineGeometry({\n *       positions : Cesium.Cartesian3.fromDegreesArray([\n *         0.0, 0.0,\n *         5.0, 0.0\n *       ]),\n *       width : 10.0,\n *       vertexFormat : Cesium.PolylineMaterialAppearance.VERTEX_FORMAT\n *     })\n *   }),\n *   appearance : new Cesium.PolylineMaterialAppearance({\n *     material : Cesium.Material.fromType('Color')\n *   })\n * });\n */\nfunction PolylineMaterialAppearance(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const translucent = options.translucent ?? true;\n  const closed = false;\n  const vertexFormat = PolylineMaterialAppearance.VERTEX_FORMAT;\n\n  /**\n   * The material used to determine the fragment color.  Unlike other {@link PolylineMaterialAppearance}\n   * properties, this is not read-only, so an appearance's material can change on the fly.\n   *\n   * @type Material\n   *\n   * @default {@link Material.ColorType}\n   *\n   * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n   */\n  this.material = defined(options.material)\n    ? options.material\n    : Material.fromType(Material.ColorType);\n\n  /**\n   * When <code>true</code>, the geometry is expected to appear translucent so\n   * {@link PolylineMaterialAppearance#renderState} has alpha blending enabled.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.translucent = translucent;\n\n  this._vertexShaderSource =\n    options.vertexShaderSource ?? defaultVertexShaderSource;\n  this._fragmentShaderSource =\n    options.fragmentShaderSource ?? defaultFragmentShaderSource;\n  this._renderState = Appearance.getDefaultRenderState(\n    translucent,\n    closed,\n    options.renderState,\n  );\n  this._closed = closed;\n\n  // Non-derived members\n\n  this._vertexFormat = vertexFormat;\n}\n\nObject.defineProperties(PolylineMaterialAppearance.prototype, {\n  /**\n   * The GLSL source code for the vertex shader.\n   *\n   * @memberof PolylineMaterialAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  vertexShaderSource: {\n    get: function () {\n      let vs = this._vertexShaderSource;\n      if (\n        this.material.shaderSource.search(/in\\s+float\\s+v_polylineAngle;/g) !==\n        -1\n      ) {\n        vs = `#define POLYLINE_DASH\\n${vs}`;\n      }\n      return vs;\n    },\n  },\n\n  /**\n   * The GLSL source code for the fragment shader.\n   *\n   * @memberof PolylineMaterialAppearance.prototype\n   *\n   * @type {string}\n   * @readonly\n   */\n  fragmentShaderSource: {\n    get: function () {\n      return this._fragmentShaderSource;\n    },\n  },\n\n  /**\n   * The WebGL fixed-function state to use when rendering the geometry.\n   * <p>\n   * The render state can be explicitly defined when constructing a {@link PolylineMaterialAppearance}\n   * instance, or it is set implicitly via {@link PolylineMaterialAppearance#translucent}\n   * and {@link PolylineMaterialAppearance#closed}.\n   * </p>\n   *\n   * @memberof PolylineMaterialAppearance.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  renderState: {\n    get: function () {\n      return this._renderState;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the geometry is expected to be closed so\n   * {@link PolylineMaterialAppearance#renderState} has backface culling enabled.\n   * This is always <code>false</code> for <code>PolylineMaterialAppearance</code>.\n   *\n   * @memberof PolylineMaterialAppearance.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  closed: {\n    get: function () {\n      return this._closed;\n    },\n  },\n\n  /**\n   * The {@link VertexFormat} that this appearance instance is compatible with.\n   * A geometry can have more vertex attributes and still be compatible - at a\n   * potential performance cost - but it can't have less.\n   *\n   * @memberof PolylineMaterialAppearance.prototype\n   *\n   * @type VertexFormat\n   * @readonly\n   *\n   * @default {@link PolylineMaterialAppearance.VERTEX_FORMAT}\n   */\n  vertexFormat: {\n    get: function () {\n      return this._vertexFormat;\n    },\n  },\n});\n\n/**\n * The {@link VertexFormat} that all {@link PolylineMaterialAppearance} instances\n * are compatible with. This requires <code>position</code> and <code>st</code> attributes.\n *\n * @type VertexFormat\n *\n * @constant\n */\nPolylineMaterialAppearance.VERTEX_FORMAT = VertexFormat.POSITION_AND_ST;\n\n/**\n * Procedurally creates the full GLSL fragment shader source.  For {@link PolylineMaterialAppearance},\n * this is derived from {@link PolylineMaterialAppearance#fragmentShaderSource} and {@link PolylineMaterialAppearance#material}.\n *\n * @function\n *\n * @returns {string} The full GLSL fragment shader source.\n */\nPolylineMaterialAppearance.prototype.getFragmentShaderSource =\n  Appearance.prototype.getFragmentShaderSource;\n\n/**\n * Determines if the geometry is translucent based on {@link PolylineMaterialAppearance#translucent} and {@link Material#isTranslucent}.\n *\n * @function\n *\n * @returns {boolean} <code>true</code> if the appearance is translucent.\n */\nPolylineMaterialAppearance.prototype.isTranslucent =\n  Appearance.prototype.isTranslucent;\n\n/**\n * Creates a render state.  This is not the final render state instance; instead,\n * it can contain a subset of render state properties identical to the render state\n * created in the context.\n *\n * @function\n *\n * @returns {object} The render state.\n */\nPolylineMaterialAppearance.prototype.getRenderState =\n  Appearance.prototype.getRenderState;\nexport default PolylineMaterialAppearance;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Resource from \"../Core/Resource.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport PostProcessStageSampleMode from \"./PostProcessStageSampleMode.js\";\n\n/**\n * Runs a post-process stage on either the texture rendered by the scene or the output of a previous post-process stage.\n *\n * @alias PostProcessStage\n * @constructor\n *\n * @param {object} options An object with the following properties:\n * @param {string} options.fragmentShader The fragment shader to use. The default <code>sampler2D</code> uniforms are <code>colorTexture</code> and <code>depthTexture</code>. The color texture is the output of rendering the scene or the previous stage. The depth texture is the output from rendering the scene. The shader should contain one or both uniforms. There is also a <code>vec2</code> varying named <code>v_textureCoordinates</code> that can be used to sample the textures.\n * @param {object} [options.uniforms] An object whose properties will be used to set the shaders uniforms. The properties can be constant values or a function. A constant value can also be a URI, data URI, or HTML element to use as a texture.\n * @param {number} [options.textureScale=1.0] A number in the range (0.0, 1.0] used to scale the texture dimensions. A scale of 1.0 will render this post-process stage  to a texture the size of the viewport.\n * @param {boolean} [options.forcePowerOfTwo=false] Whether or not to force the texture dimensions to be both equal powers of two. The power of two will be the next power of two of the minimum of the dimensions.\n * @param {PostProcessStageSampleMode} [options.sampleMode=PostProcessStageSampleMode.NEAREST] How to sample the input color texture.\n * @param {PixelFormat} [options.pixelFormat=PixelFormat.RGBA] The color pixel format of the output texture.\n * @param {PixelDatatype} [options.pixelDatatype=PixelDatatype.UNSIGNED_BYTE] The pixel data type of the output texture.\n * @param {Color} [options.clearColor=Color.BLACK] The color to clear the output texture to.\n * @param {BoundingRectangle} [options.scissorRectangle] The rectangle to use for the scissor test.\n * @param {string} [options.name=createGuid()] The unique name of this post-process stage for reference by other stages in a composite. If a name is not supplied, a GUID will be generated.\n *\n * @exception {DeveloperError} options.textureScale must be greater than 0.0 and less than or equal to 1.0.\n * @exception {DeveloperError} options.pixelFormat must be a color format.\n * @exception {DeveloperError} When options.pixelDatatype is FLOAT, this WebGL implementation must support floating point textures. Check context.floatingPointTexture.\n *\n * @see PostProcessStageComposite\n *\n * @example\n * // Simple stage to change the color\n * const fs =`\n *     uniform sampler2D colorTexture;\n *     in vec2 v_textureCoordinates;\n *     uniform float scale;\n *     uniform vec3 offset;\n *     void main() {\n *         vec4 color = texture(colorTexture, v_textureCoordinates);\n *         out_FragColor = vec4(color.rgb * scale + offset, 1.0);\n *     }`;\n * scene.postProcessStages.add(new Cesium.PostProcessStage({\n *     fragmentShader : fs,\n *     uniforms : {\n *         scale : 1.1,\n *         offset : function() {\n *             return new Cesium.Cartesian3(0.1, 0.2, 0.3);\n *         }\n *     }\n * }));\n *\n * @example\n * // Simple stage to change the color of what is selected.\n * // If czm_selected returns true, the current fragment belongs to geometry in the selected array.\n * const fs =`\n *     uniform sampler2D colorTexture;\n *     in vec2 v_textureCoordinates;\n *     uniform vec4 highlight;\n *     void main() {\n *         vec4 color = texture(colorTexture, v_textureCoordinates);\n *         if (czm_selected()) {\n *             vec3 highlighted = highlight.a * highlight.rgb + (1.0 - highlight.a) * color.rgb;\n *             out_FragColor = vec4(highlighted, 1.0);\n *         } else {\n *             out_FragColor = color;\n *         }\n *     }`;\n * const stage = scene.postProcessStages.add(new Cesium.PostProcessStage({\n *     fragmentShader : fs,\n *     uniforms : {\n *         highlight : function() {\n *             return new Cesium.Color(1.0, 0.0, 0.0, 0.5);\n *         }\n *     }\n * }));\n * stage.selected = [cesium3DTileFeature];\n */\nfunction PostProcessStage(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    name = createGuid(),\n    fragmentShader,\n    uniforms,\n    textureScale = 1.0,\n    forcePowerOfTwo = false,\n    sampleMode = PostProcessStageSampleMode.NEAREST,\n    pixelFormat = PixelFormat.RGBA,\n    pixelDatatype = PixelDatatype.UNSIGNED_BYTE,\n    clearColor = Color.BLACK,\n    scissorRectangle,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.fragmentShader\", fragmentShader);\n  Check.typeOf.number.greaterThan(\"options.textureScale\", textureScale, 0.0);\n  Check.typeOf.number.lessThanOrEquals(\n    \"options.textureScale\",\n    textureScale,\n    1.0,\n  );\n  if (!PixelFormat.isColorFormat(pixelFormat)) {\n    throw new DeveloperError(\"options.pixelFormat must be a color format.\");\n  }\n  //>>includeEnd('debug');\n\n  this._fragmentShader = fragmentShader;\n  this._uniforms = uniforms;\n  this._textureScale = textureScale;\n  this._forcePowerOfTwo = forcePowerOfTwo;\n  this._sampleMode = sampleMode;\n  this._pixelFormat = pixelFormat;\n  this._pixelDatatype = pixelDatatype;\n  this._clearColor = clearColor;\n\n  this._uniformMap = undefined;\n  this._command = undefined;\n\n  this._colorTexture = undefined;\n  this._depthTexture = undefined;\n  this._idTexture = undefined;\n\n  this._actualUniforms = {};\n  this._dirtyUniforms = [];\n  this._texturesToRelease = [];\n  this._texturesToCreate = [];\n  this._texturePromise = undefined;\n\n  const passState = new PassState();\n  passState.scissorTest = {\n    enabled: true,\n    rectangle: defined(scissorRectangle)\n      ? BoundingRectangle.clone(scissorRectangle)\n      : new BoundingRectangle(),\n  };\n  this._passState = passState;\n\n  this._ready = false;\n\n  this._name = name;\n\n  this._logDepthChanged = undefined;\n  this._useLogDepth = undefined;\n\n  this._selectedIdTexture = undefined;\n  this._selected = undefined;\n  this._selectedShadow = undefined;\n  this._parentSelected = undefined;\n  this._parentSelectedShadow = undefined;\n  this._combinedSelected = undefined;\n  this._combinedSelectedShadow = undefined;\n  this._selectedLength = 0;\n  this._parentSelectedLength = 0;\n  this._selectedDirty = true;\n\n  // set by PostProcessStageCollection\n  this._textureCache = undefined;\n  this._index = undefined;\n\n  /**\n   * Whether or not to execute this post-process stage when ready.\n   *\n   * @type {boolean}\n   */\n  this.enabled = true;\n  this._enabled = true;\n}\n\nObject.defineProperties(PostProcessStage.prototype, {\n  /**\n   * Determines if this post-process stage is ready to be executed. A stage is only executed when both <code>ready</code>\n   * and {@link PostProcessStage#enabled} are <code>true</code>. A stage will not be ready while it is waiting on textures\n   * to load.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n  /**\n   * The unique name of this post-process stage for reference by other stages in a {@link PostProcessStageComposite}.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n  /**\n   * The fragment shader to use when execute this post-process stage.\n   * <p>\n   * The shader must contain a sampler uniform declaration for <code>colorTexture</code>, <code>depthTexture</code>,\n   * or both.\n   * </p>\n   * <p>\n   * The shader must contain a <code>vec2</code> varying declaration for <code>v_textureCoordinates</code> for sampling\n   * the texture uniforms.\n   * </p>\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {string}\n   * @readonly\n   */\n  fragmentShader: {\n    get: function () {\n      return this._fragmentShader;\n    },\n  },\n  /**\n   * An object whose properties are used to set the uniforms of the fragment shader.\n   * <p>\n   * The object property values can be either a constant or a function. The function will be called\n   * each frame before the post-process stage is executed.\n   * </p>\n   * <p>\n   * A constant value can also be a URI to an image, a data URI, or an HTML element that can be used as a texture, such as HTMLImageElement or HTMLCanvasElement.\n   * </p>\n   * <p>\n   * If this post-process stage is part of a {@link PostProcessStageComposite} that does not execute in series, the constant value can also be\n   * the name of another stage in a composite. This will set the uniform to the output texture the stage with that name.\n   * </p>\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {object}\n   * @readonly\n   */\n  uniforms: {\n    get: function () {\n      return this._uniforms;\n    },\n  },\n  /**\n   * A number in the range (0.0, 1.0] used to scale the output texture dimensions. A scale of 1.0 will render this post-process stage to a texture the size of the viewport.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {number}\n   * @readonly\n   */\n  textureScale: {\n    get: function () {\n      return this._textureScale;\n    },\n  },\n  /**\n   * Whether or not to force the output texture dimensions to be both equal powers of two. The power of two will be the next power of two of the minimum of the dimensions.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {number}\n   * @readonly\n   */\n  forcePowerOfTwo: {\n    get: function () {\n      return this._forcePowerOfTwo;\n    },\n  },\n  /**\n   * How to sample the input color texture.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {PostProcessStageSampleMode}\n   * @readonly\n   */\n  sampleMode: {\n    get: function () {\n      return this._sampleMode;\n    },\n  },\n  /**\n   * The color pixel format of the output texture.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {PixelFormat}\n   * @readonly\n   */\n  pixelFormat: {\n    get: function () {\n      return this._pixelFormat;\n    },\n  },\n  /**\n   * The pixel data type of the output texture.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {PixelDatatype}\n   * @readonly\n   */\n  pixelDatatype: {\n    get: function () {\n      return this._pixelDatatype;\n    },\n  },\n  /**\n   * The color to clear the output texture to.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {Color}\n   * @readonly\n   */\n  clearColor: {\n    get: function () {\n      return this._clearColor;\n    },\n  },\n  /**\n   * The {@link BoundingRectangle} to use for the scissor test. A default bounding rectangle will disable the scissor test.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {BoundingRectangle}\n   * @readonly\n   */\n  scissorRectangle: {\n    get: function () {\n      return this._passState.scissorTest.rectangle;\n    },\n  },\n  /**\n   * A reference to the texture written to when executing this post process stage.\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  outputTexture: {\n    get: function () {\n      if (defined(this._textureCache)) {\n        const framebuffer = this._textureCache.getFramebuffer(this._name);\n        if (defined(framebuffer)) {\n          return framebuffer.getColorTexture(0);\n        }\n      }\n      return undefined;\n    },\n  },\n  /**\n   * The features selected for applying the post-process.\n   * <p>\n   * In the fragment shader, use <code>czm_selected</code> to determine whether or not to apply the post-process\n   * stage to that fragment. For example:\n   * <code>\n   * if (czm_selected(v_textureCoordinates)) {\n   *     // apply post-process stage\n   * } else {\n   *     out_FragColor = texture(colorTexture, v_textureCoordinates);\n   * }\n   * </code>\n   * </p>\n   *\n   * @memberof PostProcessStage.prototype\n   * @type {Array}\n   */\n  selected: {\n    get: function () {\n      return this._selected;\n    },\n    set: function (value) {\n      this._selected = value;\n    },\n  },\n  /**\n   * @private\n   */\n  parentSelected: {\n    get: function () {\n      return this._parentSelected;\n    },\n    set: function (value) {\n      this._parentSelected = value;\n    },\n  },\n});\n\nconst depthTextureRegex = /uniform\\s+sampler2D\\s+depthTexture/g;\n\n/**\n * @private\n */\nPostProcessStage.prototype._isSupported = function (context) {\n  return !depthTextureRegex.test(this._fragmentShader) || context.depthTexture;\n};\n\nfunction getUniformValueGetterAndSetter(stage, uniforms, name) {\n  const currentValue = uniforms[name];\n  if (\n    typeof currentValue === \"string\" ||\n    currentValue instanceof HTMLCanvasElement ||\n    currentValue instanceof HTMLImageElement ||\n    currentValue instanceof HTMLVideoElement ||\n    currentValue instanceof ImageData\n  ) {\n    stage._dirtyUniforms.push(name);\n  }\n\n  return {\n    get: function () {\n      return uniforms[name];\n    },\n    set: function (value) {\n      const currentValue = uniforms[name];\n      uniforms[name] = value;\n\n      const actualUniforms = stage._actualUniforms;\n      const actualValue = actualUniforms[name];\n      if (\n        defined(actualValue) &&\n        actualValue !== currentValue &&\n        actualValue instanceof Texture &&\n        !defined(stage._textureCache.getStageByName(name))\n      ) {\n        stage._texturesToRelease.push(actualValue);\n        delete actualUniforms[name];\n        delete actualUniforms[`${name}Dimensions`];\n      }\n\n      if (currentValue instanceof Texture) {\n        stage._texturesToRelease.push(currentValue);\n      }\n\n      if (\n        typeof value === \"string\" ||\n        value instanceof HTMLCanvasElement ||\n        value instanceof HTMLImageElement ||\n        value instanceof HTMLVideoElement ||\n        value instanceof ImageData\n      ) {\n        stage._dirtyUniforms.push(name);\n      } else {\n        actualUniforms[name] = value;\n      }\n    },\n  };\n}\n\nfunction getUniformMapFunction(stage, name) {\n  return function () {\n    const value = stage._actualUniforms[name];\n    if (typeof value === \"function\") {\n      return value();\n    }\n    return value;\n  };\n}\n\nfunction getUniformMapDimensionsFunction(uniformMap, name) {\n  return function () {\n    const texture = uniformMap[name]();\n    if (defined(texture)) {\n      return texture.dimensions;\n    }\n    return undefined;\n  };\n}\n\nfunction createUniformMap(stage) {\n  if (defined(stage._uniformMap)) {\n    return;\n  }\n\n  const uniformMap = {};\n  const newUniforms = {};\n  const uniforms = stage._uniforms;\n  const actualUniforms = stage._actualUniforms;\n  for (const name in uniforms) {\n    if (!uniforms.hasOwnProperty(name)) {\n      continue;\n    }\n    if (typeof uniforms[name] !== \"function\") {\n      uniformMap[name] = getUniformMapFunction(stage, name);\n      newUniforms[name] = getUniformValueGetterAndSetter(stage, uniforms, name);\n    } else {\n      uniformMap[name] = uniforms[name];\n      newUniforms[name] = uniforms[name];\n    }\n\n    actualUniforms[name] = uniforms[name];\n\n    const value = uniformMap[name]();\n    if (\n      typeof value === \"string\" ||\n      value instanceof Texture ||\n      value instanceof HTMLImageElement ||\n      value instanceof HTMLCanvasElement ||\n      value instanceof HTMLVideoElement\n    ) {\n      uniformMap[`${name}Dimensions`] = getUniformMapDimensionsFunction(\n        uniformMap,\n        name,\n      );\n    }\n  }\n\n  stage._uniforms = {};\n  Object.defineProperties(stage._uniforms, newUniforms);\n\n  stage._uniformMap = combine(uniformMap, {\n    colorTexture: function () {\n      return stage._colorTexture;\n    },\n    colorTextureDimensions: function () {\n      return stage._colorTexture.dimensions;\n    },\n    depthTexture: function () {\n      return stage._depthTexture;\n    },\n    depthTextureDimensions: function () {\n      return stage._depthTexture.dimensions;\n    },\n    czm_idTexture: function () {\n      return stage._idTexture;\n    },\n    czm_selectedIdTexture: function () {\n      return stage._selectedIdTexture;\n    },\n    czm_selectedIdTextureStep: function () {\n      return 1.0 / stage._selectedIdTexture.width;\n    },\n  });\n}\n\nfunction addSelectedIdToShader(shaderSource, idTextureWidth) {\n  shaderSource = shaderSource.replace(/in\\s+vec2\\s+v_textureCoordinates;/g, \"\");\n  return `#define CZM_SELECTED_FEATURE\nuniform sampler2D czm_idTexture;\nuniform sampler2D czm_selectedIdTexture;\nuniform float czm_selectedIdTextureStep;\nin vec2 v_textureCoordinates;\nbool czm_selected(vec2 offset)\n{\n    bool selected = false;\n    vec4 id = texture(czm_idTexture, v_textureCoordinates + offset);\n    for (int i = 0; i < ${idTextureWidth}; ++i)\n    {\n        vec4 selectedId = texture(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5));\n        if (all(equal(id, selectedId)))\n        {\n            return true;\n        }\n    }\n    return false;\n}\nbool czm_selected()\n{\n    return czm_selected(vec2(0.0));\n}\n\n${shaderSource}`;\n}\n\nfunction createDrawCommand(stage, context) {\n  if (\n    defined(stage._command) &&\n    !stage._logDepthChanged &&\n    !stage._selectedDirty\n  ) {\n    return;\n  }\n\n  let fragmentShaderSource = stage._fragmentShader;\n  if (defined(stage._selectedIdTexture)) {\n    const width = stage._selectedIdTexture.width;\n    fragmentShaderSource = addSelectedIdToShader(fragmentShaderSource, width);\n  }\n\n  const fragmentShader = new ShaderSource({\n    defines: [stage._useLogDepth ? \"LOG_DEPTH\" : \"\"],\n    sources: [fragmentShaderSource],\n  });\n  stage._command = context.createViewportQuadCommand(fragmentShader, {\n    uniformMap: stage._uniformMap,\n    owner: stage,\n  });\n}\n\nfunction createSampler(stage) {\n  const mode = stage._sampleMode;\n\n  let minFilter;\n  let magFilter;\n\n  if (mode === PostProcessStageSampleMode.LINEAR) {\n    minFilter = TextureMinificationFilter.LINEAR;\n    magFilter = TextureMagnificationFilter.LINEAR;\n  } else {\n    minFilter = TextureMinificationFilter.NEAREST;\n    magFilter = TextureMagnificationFilter.NEAREST;\n  }\n\n  const sampler = stage._sampler;\n  if (\n    !defined(sampler) ||\n    sampler.minificationFilter !== minFilter ||\n    sampler.magnificationFilter !== magFilter\n  ) {\n    stage._sampler = new Sampler({\n      wrapS: TextureWrap.CLAMP_TO_EDGE,\n      wrapT: TextureWrap.CLAMP_TO_EDGE,\n      minificationFilter: minFilter,\n      magnificationFilter: magFilter,\n    });\n  }\n}\n\nfunction createLoadImageFunction(stage, name) {\n  return function (image) {\n    stage._texturesToCreate.push({\n      name: name,\n      source: image,\n    });\n  };\n}\n\nfunction createStageOutputTextureFunction(stage, name) {\n  return function () {\n    return stage._textureCache.getOutputTexture(name);\n  };\n}\n\nfunction updateUniformTextures(stage, context) {\n  const texturesToRelease = stage._texturesToRelease;\n  for (let i = 0; i < texturesToRelease.length; ++i) {\n    let texture = texturesToRelease[i];\n    texture = texture && texture.destroy();\n  }\n  texturesToRelease.length = 0;\n\n  const texturesToCreate = stage._texturesToCreate;\n  for (let i = 0; i < texturesToCreate.length; ++i) {\n    const { name, source } = texturesToCreate[i];\n    stage._actualUniforms[name] = new Texture({\n      context: context,\n      source: source,\n    });\n  }\n  texturesToCreate.length = 0;\n\n  const dirtyUniforms = stage._dirtyUniforms;\n  if (dirtyUniforms.length === 0 && !defined(stage._texturePromise)) {\n    stage._ready = true;\n    return;\n  }\n\n  if (dirtyUniforms.length === 0 || defined(stage._texturePromise)) {\n    return;\n  }\n\n  const uniforms = stage._uniforms;\n  const promises = [];\n  for (let i = 0; i < dirtyUniforms.length; ++i) {\n    const name = dirtyUniforms[i];\n    const stageNameUrlOrImage = uniforms[name];\n    const stageWithName =\n      stage._textureCache.getStageByName(stageNameUrlOrImage);\n    if (defined(stageWithName)) {\n      stage._actualUniforms[name] = createStageOutputTextureFunction(\n        stage,\n        stageNameUrlOrImage,\n      );\n    } else if (typeof stageNameUrlOrImage === \"string\") {\n      const resource = new Resource({\n        url: stageNameUrlOrImage,\n      });\n\n      promises.push(\n        resource.fetchImage().then(createLoadImageFunction(stage, name)),\n      );\n    } else {\n      stage._texturesToCreate.push({\n        name: name,\n        source: stageNameUrlOrImage,\n      });\n    }\n  }\n\n  dirtyUniforms.length = 0;\n\n  if (promises.length > 0) {\n    stage._ready = false;\n    stage._texturePromise = Promise.all(promises).then(function () {\n      stage._ready = true;\n      stage._texturePromise = undefined;\n    });\n  } else {\n    stage._ready = true;\n  }\n}\n\nfunction releaseResources(stage) {\n  if (defined(stage._command)) {\n    stage._command.shaderProgram =\n      stage._command.shaderProgram && stage._command.shaderProgram.destroy();\n    stage._command = undefined;\n  }\n\n  stage._selectedIdTexture =\n    stage._selectedIdTexture && stage._selectedIdTexture.destroy();\n\n  const textureCache = stage._textureCache;\n  if (!defined(textureCache)) {\n    return;\n  }\n\n  const uniforms = stage._uniforms;\n  const actualUniforms = stage._actualUniforms;\n  for (const name in actualUniforms) {\n    if (!actualUniforms.hasOwnProperty(name)) {\n      continue;\n    }\n    const actualUniform = actualUniforms[name];\n    if (actualUniform instanceof Texture) {\n      if (!defined(textureCache.getStageByName(uniforms[name]))) {\n        actualUniform.destroy();\n      }\n      stage._dirtyUniforms.push(name);\n    }\n  }\n}\n\nfunction isSelectedTextureDirty(stage) {\n  const length = defined(stage._selected) ? stage._selected.length : 0;\n  const parentLength = defined(stage._parentSelected)\n    ? stage._parentSelected\n    : 0;\n  const dirty =\n    stage._selected !== stage._selectedShadow ||\n    length !== stage._selectedLength ||\n    stage._parentSelected !== stage._parentSelectedShadow ||\n    parentLength !== stage._parentSelectedLength;\n\n  if (defined(stage._selected) && defined(stage._parentSelected)) {\n    stage._combinedSelected = stage._selected.concat(stage._parentSelected);\n  } else if (defined(stage._parentSelected)) {\n    stage._combinedSelected = stage._parentSelected;\n  } else {\n    stage._combinedSelected = stage._selected;\n  }\n\n  if (!dirty && defined(stage._combinedSelected)) {\n    if (!defined(stage._combinedSelectedShadow)) {\n      return true;\n    }\n\n    for (let i = 0; i < stage._combinedSelected.length; ++i) {\n      if (stage._combinedSelected[i] !== stage._combinedSelectedShadow[i]) {\n        return true;\n      }\n    }\n  }\n  return dirty;\n}\n\nfunction createSelectedTexture(stage, context) {\n  if (!stage._selectedDirty) {\n    return;\n  }\n\n  stage._selectedIdTexture =\n    stage._selectedIdTexture && stage._selectedIdTexture.destroy();\n  stage._selectedIdTexture = undefined;\n\n  const features = stage._combinedSelected;\n  if (!defined(features)) {\n    return;\n  }\n\n  let textureLength = 0;\n  for (let i = 0; i < features.length; ++i) {\n    const feature = features[i];\n    if (defined(feature.pickIds)) {\n      textureLength += feature.pickIds.length;\n    } else if (defined(feature.pickId)) {\n      ++textureLength;\n    }\n  }\n\n  if (features.length === 0 || textureLength === 0) {\n    // max pick id is reserved\n    const empty = new Uint8Array([255, 255, 255, 255]);\n    stage._selectedIdTexture = new Texture({\n      context: context,\n      pixelFormat: PixelFormat.RGBA,\n      pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n      source: {\n        arrayBufferView: empty,\n        width: 1,\n        height: 1,\n      },\n      sampler: Sampler.NEAREST,\n    });\n    return;\n  }\n\n  let offset = 0;\n  const ids = new Uint8Array(textureLength * 4);\n  for (let i = 0; i < features.length; ++i) {\n    const feature = features[i];\n    if (defined(feature.pickIds)) {\n      const pickIds = feature.pickIds;\n      const pickIdsLength = pickIds.length;\n      for (let j = 0; j < pickIdsLength; ++j) {\n        const pickColor = pickIds[j].color;\n        ids[offset] = Color.floatToByte(pickColor.red);\n        ids[offset + 1] = Color.floatToByte(pickColor.green);\n        ids[offset + 2] = Color.floatToByte(pickColor.blue);\n        ids[offset + 3] = Color.floatToByte(pickColor.alpha);\n        offset += 4;\n      }\n    } else if (defined(feature.pickId)) {\n      const pickColor = feature.pickId.color;\n      ids[offset] = Color.floatToByte(pickColor.red);\n      ids[offset + 1] = Color.floatToByte(pickColor.green);\n      ids[offset + 2] = Color.floatToByte(pickColor.blue);\n      ids[offset + 3] = Color.floatToByte(pickColor.alpha);\n      offset += 4;\n    }\n  }\n\n  stage._selectedIdTexture = new Texture({\n    context: context,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    source: {\n      arrayBufferView: ids,\n      width: textureLength,\n      height: 1,\n    },\n    sampler: Sampler.NEAREST,\n  });\n}\n\n/**\n * A function that will be called before execute. Used to create WebGL resources and load any textures.\n * @param {Context} context The context.\n * @param {boolean} useLogDepth Whether the scene uses a logarithmic depth buffer.\n * @private\n */\nPostProcessStage.prototype.update = function (context, useLogDepth) {\n  if (this.enabled !== this._enabled && !this.enabled) {\n    releaseResources(this);\n  }\n\n  this._enabled = this.enabled;\n  if (!this._enabled) {\n    return;\n  }\n\n  this._logDepthChanged = useLogDepth !== this._useLogDepth;\n  this._useLogDepth = useLogDepth;\n\n  this._selectedDirty = isSelectedTextureDirty(this);\n\n  this._selectedShadow = this._selected;\n  this._parentSelectedShadow = this._parentSelected;\n  this._combinedSelectedShadow = this._combinedSelected;\n  this._selectedLength = defined(this._selected) ? this._selected.length : 0;\n  this._parentSelectedLength = defined(this._parentSelected)\n    ? this._parentSelected.length\n    : 0;\n\n  createSelectedTexture(this, context);\n  createUniformMap(this);\n  updateUniformTextures(this, context);\n  createDrawCommand(this, context);\n  createSampler(this);\n\n  this._selectedDirty = false;\n\n  if (!this._ready) {\n    return;\n  }\n\n  const framebuffer = this._textureCache.getFramebuffer(this._name);\n  this._command.framebuffer = framebuffer;\n\n  if (!defined(framebuffer)) {\n    return;\n  }\n\n  const colorTexture = framebuffer.getColorTexture(0);\n  let renderState;\n  if (\n    colorTexture.width !== context.drawingBufferWidth ||\n    colorTexture.height !== context.drawingBufferHeight\n  ) {\n    renderState = this._renderState;\n    if (\n      !defined(renderState) ||\n      colorTexture.width !== renderState.viewport.width ||\n      colorTexture.height !== renderState.viewport.height\n    ) {\n      this._renderState = RenderState.fromCache({\n        viewport: new BoundingRectangle(\n          0,\n          0,\n          colorTexture.width,\n          colorTexture.height,\n        ),\n      });\n    }\n  }\n\n  this._command.renderState = renderState;\n};\n\n/**\n * Executes the post-process stage. The color texture is the texture rendered to by the scene or from the previous stage.\n * @param {Context} context The context.\n * @param {Texture} colorTexture The input color texture.\n * @param {Texture} depthTexture The input depth texture.\n * @param {Texture} idTexture The id texture.\n * @private\n */\nPostProcessStage.prototype.execute = function (\n  context,\n  colorTexture,\n  depthTexture,\n  idTexture,\n) {\n  if (\n    !defined(this._command) ||\n    !defined(this._command.framebuffer) ||\n    !this._ready ||\n    !this._enabled\n  ) {\n    return;\n  }\n\n  this._colorTexture = colorTexture;\n  this._depthTexture = depthTexture;\n  this._idTexture = idTexture;\n\n  if (!Sampler.equals(this._colorTexture.sampler, this._sampler)) {\n    this._colorTexture.sampler = this._sampler;\n  }\n\n  const passState =\n    this.scissorRectangle.width > 0 && this.scissorRectangle.height > 0\n      ? this._passState\n      : undefined;\n  if (defined(passState)) {\n    passState.context = context;\n  }\n\n  this._command.execute(context, passState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStage#destroy\n */\nPostProcessStage.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStage#isDestroyed\n */\nPostProcessStage.prototype.destroy = function () {\n  releaseResources(this);\n  return destroyObject(this);\n};\nexport default PostProcessStage;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport PostProcessStageLibrary from \"./PostProcessStageLibrary.js\";\nimport PostProcessStageTextureCache from \"./PostProcessStageTextureCache.js\";\nimport Tonemapper, { validateTonemapper } from \"./Tonemapper.js\";\n\nconst stackScratch = [];\n\n/**\n * A collection of {@link PostProcessStage}s and/or {@link PostProcessStageComposite}s.\n * <p>\n * The input texture for each post-process stage is the texture rendered to by the scene or the texture rendered\n * to by the previous stage in the collection.\n * </p>\n * <p>\n * If the ambient occlusion or bloom stages are enabled, they will execute before all other stages.\n * </p>\n * <p>\n * If the FXAA stage is enabled, it will execute after all other stages.\n * </p>\n *\n * @alias PostProcessStageCollection\n * @constructor\n */\nfunction PostProcessStageCollection() {\n  const fxaa = PostProcessStageLibrary.createFXAAStage();\n  const ao = PostProcessStageLibrary.createAmbientOcclusionStage();\n  const bloom = PostProcessStageLibrary.createBloomStage();\n\n  // Auto-exposure is currently disabled because most shaders output a value in [0.0, 1.0].\n  // Some shaders, such as the atmosphere and ground atmosphere, output values slightly over 1.0.\n  this._autoExposureEnabled = false;\n  this._autoExposure = PostProcessStageLibrary.createAutoExposureStage();\n  this._exposure = 1.0;\n  this._tonemapping = undefined;\n  this._tonemapper = undefined;\n\n  // set tonemapper and tonemapping using the setter\n  this.tonemapper = Tonemapper.PBR_NEUTRAL;\n\n  const tonemapping = this._tonemapping;\n\n  fxaa.enabled = false;\n  ao.enabled = false;\n  bloom.enabled = false;\n  tonemapping.enabled = false; // will be enabled if necessary in update\n\n  const textureCache = new PostProcessStageTextureCache(this);\n\n  const stageNames = {};\n  const stack = stackScratch;\n  stack.push(fxaa, ao, bloom, tonemapping);\n  while (stack.length > 0) {\n    const stage = stack.pop();\n    stageNames[stage.name] = stage;\n    stage._textureCache = textureCache;\n\n    const length = stage.length;\n    if (defined(length)) {\n      for (let i = 0; i < length; ++i) {\n        stack.push(stage.get(i));\n      }\n    }\n  }\n\n  this._stages = [];\n  this._activeStages = [];\n  this._previousActiveStages = [];\n\n  this._randomTexture = undefined; // For AO\n\n  const that = this;\n  ao.uniforms.randomTexture = function () {\n    return that._randomTexture;\n  };\n\n  this._ao = ao;\n  this._bloom = bloom;\n  this._fxaa = fxaa;\n\n  this._aoEnabled = undefined;\n  this._bloomEnabled = undefined;\n  this._tonemappingEnabled = undefined;\n  this._fxaaEnabled = undefined;\n\n  this._activeStagesChanged = false;\n  this._stagesRemoved = false;\n  this._textureCacheDirty = false;\n\n  this._stageNames = stageNames;\n  this._textureCache = textureCache;\n}\n\nObject.defineProperties(PostProcessStageCollection.prototype, {\n  /**\n   * Determines if all of the post-process stages in the collection are ready to be executed.\n   *\n   * @memberof PostProcessStageCollection.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      let readyAndEnabled = false;\n      const stages = this._stages;\n      const length = stages.length;\n      for (let i = length - 1; i >= 0; --i) {\n        const stage = stages[i];\n        readyAndEnabled = readyAndEnabled || (stage.ready && stage.enabled);\n      }\n\n      const fxaa = this._fxaa;\n      const ao = this._ao;\n      const bloom = this._bloom;\n      const tonemapping = this._tonemapping;\n\n      readyAndEnabled = readyAndEnabled || (fxaa.ready && fxaa.enabled);\n      readyAndEnabled = readyAndEnabled || (ao.ready && ao.enabled);\n      readyAndEnabled = readyAndEnabled || (bloom.ready && bloom.enabled);\n      readyAndEnabled =\n        readyAndEnabled || (tonemapping.ready && tonemapping.enabled);\n\n      return readyAndEnabled;\n    },\n  },\n  /**\n   * A post-process stage for Fast Approximate Anti-aliasing.\n   * <p>\n   * When enabled, this stage will execute after all others.\n   * </p>\n   *\n   * @memberof PostProcessStageCollection.prototype\n   * @type {PostProcessStage}\n   * @readonly\n   */\n  fxaa: {\n    get: function () {\n      return this._fxaa;\n    },\n  },\n  /**\n   * A post-process stage that applies Horizon-based Ambient Occlusion (HBAO) to the input texture.\n   * <p>\n   * Ambient occlusion simulates shadows from ambient light. These shadows would always be present when the\n   * surface receives light and regardless of the light's position.\n   * </p>\n   * <p>\n   * The uniforms have the following properties:\n   * <ul>\n   * <li><code>intensity</code> is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is <code>3.0</code>.</li>\n   * <li><code>bias</code> is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value,\n   * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is <code>0.1</code>.</li>\n   * <li><code>lengthCap</code> is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value,\n   * sampling stops in the current direction. The default value is <code>0.26</code>.</li>\n   * <li><code>directionCount</code> is the number of directions along which the ray marching will search for occluders. The default value is <code>8</code>.</li>\n   * <li><code>stepCount</code> is the number of steps the ray marching will take along each direction. The default value is <code>32</code>.</li>\n   * <li><code>randomTexture</code> is a texture where the red channel is a random value in [0.0, 1.0]. The default value is <code>undefined</code>. This texture needs to be set.</li>\n   * <li><code>ambientOcclusionOnly</code> is a boolean value. When <code>true</code>, only the shadows generated are written to the output. When <code>false</code>, the input texture is modulated\n   * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is <code>false</code>.</li>\n   * </ul>\n   * <p>\n   * When enabled, this stage will execute before all others.\n   * </p>\n   *\n   * @memberof PostProcessStageCollection.prototype\n   * @type {PostProcessStageComposite}\n   * @readonly\n   */\n  ambientOcclusion: {\n    get: function () {\n      return this._ao;\n    },\n  },\n  /**\n   * A post-process stage for a bloom effect.\n   * <p>\n   * A bloom effect adds glow effect, makes bright areas brighter, and dark areas darker.\n   * </p>\n   * <p>\n   * This stage has the following uniforms: <code>contrast</code>, <code>brightness</code>, <code>glowOnly</code>,\n   * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n   * </p>\n   * <ul>\n   * <li><code>contrast</code> is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is <code>128.0</code>.</li>\n   *\n   * <li><code>brightness</code> is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is\n   * added to the brightness. The default value is <code>-0.3</code>.</li>\n   *\n   * <li><code>glowOnly</code> is a boolean value. When <code>true</code>, only the glow effect will be shown. When <code>false</code>, the glow will be added to the input texture.\n   * The default value is <code>false</code>. This is a debug option for viewing the effects when changing the other uniform values.</li>\n   * </ul>\n   * <p>\n   * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n   * The blur is applied to the shadows generated from the image to make them smoother.\n   * </p>\n   * <p>\n   * When enabled, this stage will execute before all others.\n   * </p>\n   *\n   * @memberOf PostProcessStageCollection.prototype\n   * @type {PostProcessStageComposite}\n   * @readonly\n   */\n  bloom: {\n    get: function () {\n      return this._bloom;\n    },\n  },\n  /**\n   * The number of post-process stages in this collection.\n   *\n   * @memberof PostProcessStageCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      removeStages(this);\n      return this._stages.length;\n    },\n  },\n  /**\n   * A reference to the last texture written to when executing the post-process stages in this collection.\n   *\n   * @memberof PostProcessStageCollection.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  outputTexture: {\n    get: function () {\n      const fxaa = this._fxaa;\n      if (fxaa.enabled && fxaa.ready) {\n        return this.getOutputTexture(fxaa.name);\n      }\n\n      const stages = this._stages;\n      const length = stages.length;\n      for (let i = length - 1; i >= 0; --i) {\n        const stage = stages[i];\n        if (defined(stage) && stage.ready && stage.enabled) {\n          return this.getOutputTexture(stage.name);\n        }\n      }\n\n      const tonemapping = this._tonemapping;\n      if (tonemapping.enabled && tonemapping.ready) {\n        return this.getOutputTexture(tonemapping.name);\n      }\n\n      const bloom = this._bloom;\n      if (bloom.enabled && bloom.ready) {\n        return this.getOutputTexture(bloom.name);\n      }\n\n      const ao = this._ao;\n      if (ao.enabled && ao.ready) {\n        return this.getOutputTexture(ao.name);\n      }\n\n      return undefined;\n    },\n  },\n  /**\n   * Whether the collection has a stage that has selected features.\n   *\n   * @memberof PostProcessStageCollection.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  hasSelected: {\n    get: function () {\n      const stages = this._stages.slice();\n      while (stages.length > 0) {\n        const stage = stages.pop();\n        if (!defined(stage)) {\n          continue;\n        }\n        if (defined(stage.selected)) {\n          return true;\n        }\n        const length = stage.length;\n        if (defined(length)) {\n          for (let i = 0; i < length; ++i) {\n            stages.push(stage.get(i));\n          }\n        }\n      }\n      return false;\n    },\n  },\n\n  /**\n   * Specifies the tonemapping algorithm used when rendering with high dynamic range.\n   * {@link https://sandcastle.cesium.com/?id=high-dynamic-range|Sandcastle Demo}\n   *\n   * @example viewer.scene.postProcessStages.tonemapper = Cesium.Tonemapper.ACES;\n   *\n   * @default Tonemapper.PBR_NEUTRAL\n   * @memberof PostProcessStageCollection.prototype\n   * @type {Tonemapper}\n   */\n  tonemapper: {\n    get: function () {\n      return this._tonemapper;\n    },\n    set: function (value) {\n      if (this._tonemapper === value) {\n        return;\n      }\n      //>>includeStart('debug', pragmas.debug);\n      if (!validateTonemapper(value)) {\n        throw new DeveloperError(\"tonemapper was set to an invalid value.\");\n      }\n      //>>includeEnd('debug');\n\n      if (defined(this._tonemapping)) {\n        delete this._stageNames[this._tonemapping.name];\n        this._tonemapping.destroy();\n      }\n\n      const useAutoExposure = this._autoExposureEnabled;\n      let tonemapping;\n\n      switch (value) {\n        case Tonemapper.REINHARD:\n          tonemapping =\n            PostProcessStageLibrary.createReinhardTonemappingStage(\n              useAutoExposure,\n            );\n          break;\n        case Tonemapper.MODIFIED_REINHARD:\n          tonemapping =\n            PostProcessStageLibrary.createModifiedReinhardTonemappingStage(\n              useAutoExposure,\n            );\n          break;\n        case Tonemapper.FILMIC:\n          tonemapping =\n            PostProcessStageLibrary.createFilmicTonemappingStage(\n              useAutoExposure,\n            );\n          break;\n        case Tonemapper.PBR_NEUTRAL:\n          tonemapping =\n            PostProcessStageLibrary.createPbrNeutralTonemappingStage(\n              useAutoExposure,\n            );\n          break;\n        default:\n          tonemapping =\n            PostProcessStageLibrary.createAcesTonemappingStage(useAutoExposure);\n          break;\n      }\n\n      if (useAutoExposure) {\n        const autoexposure = this._autoExposure;\n        tonemapping.uniforms.autoExposure = function () {\n          return autoexposure.outputTexture;\n        };\n      } else {\n        tonemapping.uniforms.exposure = this._exposure;\n      }\n\n      this._tonemapper = value;\n      this._tonemapping = tonemapping;\n\n      if (defined(this._stageNames)) {\n        this._stageNames[tonemapping.name] = tonemapping;\n        tonemapping._textureCache = this._textureCache;\n      }\n\n      this._textureCacheDirty = true;\n    },\n  },\n\n  /**\n   * Control the exposure when HDR is on. Less than 1.0 makes the tonemapping darker while greater than 1.0 makes it brighter.\n   *\n   * @example viewer.scene.postProcessStages.exposure = 1.0;\n   *\n   * @default 1.0\n   * @memberof PostProcessStageCollection.prototype\n   * @type {number}\n   */\n  exposure: {\n    get: function () {\n      return this._exposure;\n    },\n    set: function (value) {\n      this._tonemapping.uniforms.exposure = value;\n      this._exposure = value;\n    },\n  },\n});\n\nfunction removeStages(collection) {\n  if (!collection._stagesRemoved) {\n    return;\n  }\n\n  collection._stagesRemoved = false;\n\n  const newStages = [];\n  const stages = collection._stages;\n  for (let i = 0, j = 0; i < stages.length; ++i) {\n    const stage = stages[i];\n    if (stage) {\n      stage._index = j++;\n      newStages.push(stage);\n    }\n  }\n\n  collection._stages = newStages;\n}\n\n/**\n * Adds the post-process stage to the collection.\n *\n * @param {PostProcessStage|PostProcessStageComposite} stage The post-process stage to add to the collection.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage that was added to the collection.\n *\n * @exception {DeveloperError} The post-process stage has already been added to the collection or does not have a unique name.\n */\nPostProcessStageCollection.prototype.add = function (stage) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"stage\", stage);\n  //>>includeEnd('debug');\n\n  const stageNames = this._stageNames;\n\n  const stack = stackScratch;\n  stack.push(stage);\n  while (stack.length > 0) {\n    const currentStage = stack.pop();\n    //>>includeStart('debug', pragmas.debug);\n    if (defined(stageNames[currentStage.name])) {\n      throw new DeveloperError(\n        `${currentStage.name} has already been added to the collection or does not have a unique name.`,\n      );\n    }\n    //>>includeEnd('debug');\n    stageNames[currentStage.name] = currentStage;\n    currentStage._textureCache = this._textureCache;\n\n    const length = currentStage.length;\n    if (defined(length)) {\n      for (let i = 0; i < length; ++i) {\n        stack.push(currentStage.get(i));\n      }\n    }\n  }\n\n  const stages = this._stages;\n  stage._index = stages.length;\n  stages.push(stage);\n  this._textureCacheDirty = true;\n  return stage;\n};\n\n/**\n * Removes a post-process stage from the collection and destroys it.\n *\n * @param {PostProcessStage|PostProcessStageComposite} stage The post-process stage to remove from the collection.\n * @return {boolean} Whether the post-process stage was removed.\n */\nPostProcessStageCollection.prototype.remove = function (stage) {\n  if (!this.contains(stage)) {\n    return false;\n  }\n\n  const stageNames = this._stageNames;\n\n  const stack = stackScratch;\n  stack.push(stage);\n  while (stack.length > 0) {\n    const currentStage = stack.pop();\n    delete stageNames[currentStage.name];\n\n    const length = currentStage.length;\n    if (defined(length)) {\n      for (let i = 0; i < length; ++i) {\n        stack.push(currentStage.get(i));\n      }\n    }\n  }\n\n  this._stages[stage._index] = undefined;\n  this._stagesRemoved = true;\n  this._textureCacheDirty = true;\n  stage._index = undefined;\n  stage._textureCache = undefined;\n  stage.destroy();\n  return true;\n};\n\n/**\n * Returns whether the collection contains a post-process stage.\n *\n * @param {PostProcessStage|PostProcessStageComposite} stage The post-process stage.\n * @return {boolean} Whether the collection contains the post-process stage.\n */\nPostProcessStageCollection.prototype.contains = function (stage) {\n  return (\n    defined(stage) &&\n    defined(stage._index) &&\n    stage._textureCache === this._textureCache\n  );\n};\n\n/**\n * Gets the post-process stage at <code>index</code>.\n *\n * @param {number} index The index of the post-process stage.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage at index.\n */\nPostProcessStageCollection.prototype.get = function (index) {\n  removeStages(this);\n  const stages = this._stages;\n  //>>includeStart('debug', pragmas.debug);\n  const length = stages.length;\n  Check.typeOf.number.greaterThanOrEquals(\"stages length\", length, 0);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThan(\"index\", index, length);\n  //>>includeEnd('debug');\n  return stages[index];\n};\n\n/**\n * Removes all post-process stages from the collection and destroys them.\n */\nPostProcessStageCollection.prototype.removeAll = function () {\n  const stages = this._stages;\n  const length = stages.length;\n  for (let i = 0; i < length; ++i) {\n    this.remove(stages[i]);\n  }\n  stages.length = 0;\n};\n\n/**\n * Gets a post-process stage in the collection by its name.\n *\n * @param {string} name The name of the post-process stage.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage.\n *\n * @private\n */\nPostProcessStageCollection.prototype.getStageByName = function (name) {\n  return this._stageNames[name];\n};\n\n/**\n * Called before the post-process stages in the collection are executed. Calls update for each stage and creates WebGL resources.\n *\n * @param {Context} context The context.\n * @param {boolean} useLogDepth Whether the scene uses a logarithmic depth buffer.\n *\n * @private\n */\nPostProcessStageCollection.prototype.update = function (\n  context,\n  useLogDepth,\n  useHdr,\n) {\n  removeStages(this);\n\n  const previousActiveStages = this._activeStages;\n  const activeStages = (this._activeStages = this._previousActiveStages);\n  this._previousActiveStages = previousActiveStages;\n\n  const stages = this._stages;\n  activeStages.length = stages.length;\n\n  let count = 0;\n  for (let i = 0; i < stages.length; ++i) {\n    const stage = stages[i];\n    if (stage.ready && stage.enabled && stage._isSupported(context)) {\n      activeStages[count++] = stage;\n    }\n  }\n  activeStages.length = count;\n\n  let activeStagesChanged = count !== previousActiveStages.length;\n  if (!activeStagesChanged) {\n    for (let i = 0; i < count; ++i) {\n      if (activeStages[i] !== previousActiveStages[i]) {\n        activeStagesChanged = true;\n        break;\n      }\n    }\n  }\n\n  const ao = this._ao;\n  const bloom = this._bloom;\n  const autoexposure = this._autoExposure;\n  const tonemapping = this._tonemapping;\n  const fxaa = this._fxaa;\n\n  tonemapping.enabled = useHdr;\n\n  const aoEnabled = ao.enabled && ao._isSupported(context);\n  const bloomEnabled = bloom.enabled && bloom._isSupported(context);\n  const tonemappingEnabled =\n    tonemapping.enabled && tonemapping._isSupported(context);\n  const fxaaEnabled = fxaa.enabled && fxaa._isSupported(context);\n\n  if (\n    activeStagesChanged ||\n    this._textureCacheDirty ||\n    aoEnabled !== this._aoEnabled ||\n    bloomEnabled !== this._bloomEnabled ||\n    tonemappingEnabled !== this._tonemappingEnabled ||\n    fxaaEnabled !== this._fxaaEnabled\n  ) {\n    // The number of stages to execute has changed.\n    // Update dependencies and recreate framebuffers.\n    this._textureCache.updateDependencies();\n\n    this._aoEnabled = aoEnabled;\n    this._bloomEnabled = bloomEnabled;\n    this._tonemappingEnabled = tonemappingEnabled;\n    this._fxaaEnabled = fxaaEnabled;\n    this._textureCacheDirty = false;\n  }\n\n  if (defined(this._randomTexture) && !aoEnabled) {\n    this._randomTexture.destroy();\n    this._randomTexture = undefined;\n  }\n\n  if (!defined(this._randomTexture) && aoEnabled) {\n    const length = 256 * 256 * 3;\n    const random = new Uint8Array(length);\n    for (let i = 0; i < length; i += 3) {\n      random[i] = Math.floor(Math.random() * 255.0);\n    }\n\n    this._randomTexture = new Texture({\n      context: context,\n      pixelFormat: PixelFormat.RGB,\n      pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n      source: {\n        arrayBufferView: random,\n        width: 256,\n        height: 256,\n      },\n      sampler: new Sampler({\n        wrapS: TextureWrap.REPEAT,\n        wrapT: TextureWrap.REPEAT,\n        minificationFilter: TextureMinificationFilter.NEAREST,\n        magnificationFilter: TextureMagnificationFilter.NEAREST,\n      }),\n    });\n  }\n\n  this._textureCache.update(context);\n\n  fxaa.update(context, useLogDepth);\n  ao.update(context, useLogDepth);\n  bloom.update(context, useLogDepth);\n  tonemapping.update(context, useLogDepth);\n\n  if (this._autoExposureEnabled) {\n    autoexposure.update(context, useLogDepth);\n  }\n\n  for (let i = 0; i < stages.length; ++i) {\n    stages[i].update(context, useLogDepth);\n  }\n\n  count = 0;\n  for (let i = 0; i < stages.length; ++i) {\n    const stage = stages[i];\n    if (stage.ready && stage.enabled && stage._isSupported(context)) {\n      count++;\n    }\n  }\n  activeStagesChanged = count !== activeStages.length;\n  if (activeStagesChanged) {\n    this.update(context, useLogDepth, useHdr);\n  }\n};\n\n/**\n * Clears all of the framebuffers used by the stages.\n *\n * @param {Context} context The context.\n *\n * @private\n */\nPostProcessStageCollection.prototype.clear = function (context) {\n  this._textureCache.clear(context);\n\n  if (this._autoExposureEnabled) {\n    this._autoExposure.clear(context);\n  }\n};\n\nfunction getOutputTexture(stage) {\n  while (defined(stage.length)) {\n    stage = stage.get(stage.length - 1);\n  }\n  return stage.outputTexture;\n}\n\n/**\n * Gets the output texture of a stage with the given name.\n *\n * @param {string} stageName The name of the stage.\n * @return {Texture|undefined} The texture rendered to by the stage with the given name.\n *\n * @private\n */\nPostProcessStageCollection.prototype.getOutputTexture = function (stageName) {\n  const stage = this.getStageByName(stageName);\n  if (!defined(stage)) {\n    return undefined;\n  }\n  return getOutputTexture(stage);\n};\n\nfunction execute(stage, context, colorTexture, depthTexture, idTexture) {\n  if (defined(stage.execute)) {\n    stage.execute(context, colorTexture, depthTexture, idTexture);\n    return;\n  }\n\n  if (stage.inputPreviousStageTexture) {\n    execute(stage.get(0), context, colorTexture, depthTexture, idTexture);\n    for (let i = 1; i < stage.length; ++i) {\n      execute(\n        stage.get(i),\n        context,\n        getOutputTexture(stage.get(i - 1)),\n        depthTexture,\n        idTexture,\n      );\n    }\n  } else {\n    for (let i = 0; i < stage.length; ++i) {\n      execute(stage.get(i), context, colorTexture, depthTexture, idTexture);\n    }\n  }\n}\n\n/**\n * Executes all ready and enabled stages in the collection.\n *\n * @param {Context} context The context.\n * @param {Texture} colorTexture The color texture rendered to by the scene.\n * @param {Texture} depthTexture The depth texture written to by the scene.\n * @param {Texture} idTexture The id texture written to by the scene.\n *\n * @private\n */\nPostProcessStageCollection.prototype.execute = function (\n  context,\n  colorTexture,\n  depthTexture,\n  idTexture,\n) {\n  const activeStages = this._activeStages;\n  const length = activeStages.length;\n  const fxaa = this._fxaa;\n  const ao = this._ao;\n  const bloom = this._bloom;\n  const autoexposure = this._autoExposure;\n  const tonemapping = this._tonemapping;\n\n  const aoEnabled = ao.enabled && ao._isSupported(context);\n  const bloomEnabled = bloom.enabled && bloom._isSupported(context);\n  const autoExposureEnabled = this._autoExposureEnabled;\n  const tonemappingEnabled =\n    tonemapping.enabled && tonemapping._isSupported(context);\n  const fxaaEnabled = fxaa.enabled && fxaa._isSupported(context);\n\n  if (\n    !fxaaEnabled &&\n    !aoEnabled &&\n    !bloomEnabled &&\n    !tonemappingEnabled &&\n    length === 0\n  ) {\n    return;\n  }\n\n  let initialTexture = colorTexture;\n  if (aoEnabled && ao.ready) {\n    execute(ao, context, initialTexture, depthTexture, idTexture);\n    initialTexture = getOutputTexture(ao);\n  }\n  if (bloomEnabled && bloom.ready) {\n    execute(bloom, context, initialTexture, depthTexture, idTexture);\n    initialTexture = getOutputTexture(bloom);\n  }\n  if (autoExposureEnabled && autoexposure.ready) {\n    execute(autoexposure, context, initialTexture, depthTexture, idTexture);\n  }\n  if (tonemappingEnabled && tonemapping.ready) {\n    execute(tonemapping, context, initialTexture, depthTexture, idTexture);\n    initialTexture = getOutputTexture(tonemapping);\n  }\n\n  let lastTexture = initialTexture;\n\n  if (length > 0) {\n    execute(activeStages[0], context, initialTexture, depthTexture, idTexture);\n    for (let i = 1; i < length; ++i) {\n      execute(\n        activeStages[i],\n        context,\n        getOutputTexture(activeStages[i - 1]),\n        depthTexture,\n        idTexture,\n      );\n    }\n    lastTexture = getOutputTexture(activeStages[length - 1]);\n  }\n\n  if (fxaaEnabled && fxaa.ready) {\n    execute(fxaa, context, lastTexture, depthTexture, idTexture);\n  }\n};\n\n/**\n * Copies the output of all executed stages to the color texture of a framebuffer.\n *\n * @param {Context} context The context.\n * @param {Framebuffer} framebuffer The framebuffer to copy to.\n *\n * @private\n */\nPostProcessStageCollection.prototype.copy = function (context, framebuffer) {\n  if (!defined(this._copyColorCommand)) {\n    const that = this;\n    this._copyColorCommand = context.createViewportQuadCommand(PassThrough, {\n      uniformMap: {\n        colorTexture: function () {\n          return that.outputTexture;\n        },\n      },\n      owner: this,\n    });\n  }\n\n  this._copyColorCommand.framebuffer = framebuffer;\n  this._copyColorCommand.execute(context);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStageCollection#destroy\n */\nPostProcessStageCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStageCollection#isDestroyed\n */\nPostProcessStageCollection.prototype.destroy = function () {\n  this._fxaa.destroy();\n  this._ao.destroy();\n  this._bloom.destroy();\n  this._autoExposure.destroy();\n  this._tonemapping.destroy();\n  this.removeAll();\n  this._textureCache = this._textureCache && this._textureCache.destroy();\n  return destroyObject(this);\n};\nexport default PostProcessStageCollection;\n","import Check from \"../Core/Check.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\n\n/**\n * A collection of {@link PostProcessStage}s or other post-process composite stages that execute together logically.\n * <p>\n * All stages are executed in the order of the array. The input texture changes based on the value of <code>inputPreviousStageTexture</code>.\n * If <code>inputPreviousStageTexture</code> is <code>true</code>, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it.\n * If <code>inputPreviousStageTexture</code> is <code>false</code>, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene\n * or the output texture of the previous stage.\n * </p>\n *\n * @alias PostProcessStageComposite\n * @constructor\n *\n * @param {object} options An object with the following properties:\n * @param {Array} options.stages An array of {@link PostProcessStage}s or composites to be executed in order.\n * @param {boolean} [options.inputPreviousStageTexture=true] Whether to execute each post-process stage where the input to one stage is the output of the previous. Otherwise, the input to each contained stage is the output of the stage that executed before the composite.\n * @param {string} [options.name=createGuid()] The unique name of this post-process stage for reference by other composites. If a name is not supplied, a GUID will be generated.\n * @param {object} [options.uniforms] An alias to the uniforms of post-process stages.\n *\n * @exception {DeveloperError} options.stages.length must be greater than 0.0.\n *\n * @see PostProcessStage\n *\n * @example\n * // Example 1: separable blur filter\n * // The input to blurXDirection is the texture rendered to by the scene or the output of the previous stage.\n * // The input to blurYDirection is the texture rendered to by blurXDirection.\n * scene.postProcessStages.add(new Cesium.PostProcessStageComposite({\n *     stages : [blurXDirection, blurYDirection]\n * }));\n *\n * @example\n * // Example 2: referencing the output of another post-process stage\n * scene.postProcessStages.add(new Cesium.PostProcessStageComposite({\n *     inputPreviousStageTexture : false,\n *     stages : [\n *         // The same as Example 1.\n *         new Cesium.PostProcessStageComposite({\n *             inputPreviousStageTexture : true\n *             stages : [blurXDirection, blurYDirection],\n *             name : 'blur'\n *         }),\n *         // The input texture for this stage is the same input texture to blurXDirection since inputPreviousStageTexture is false\n *         new Cesium.PostProcessStage({\n *             fragmentShader : compositeShader,\n *             uniforms : {\n *                 blurTexture : 'blur' // The output of the composite with name 'blur' (the texture that blurYDirection rendered to).\n *             }\n *         })\n *     ]\n * });\n *\n * @example\n * // Example 3: create a uniform alias\n * const uniforms = {};\n * Cesium.defineProperties(uniforms, {\n *     filterSize : {\n *         get : function() {\n *             return blurXDirection.uniforms.filterSize;\n *         },\n *         set : function(value) {\n *             blurXDirection.uniforms.filterSize = blurYDirection.uniforms.filterSize = value;\n *         }\n *     }\n * });\n * scene.postProcessStages.add(new Cesium.PostProcessStageComposite({\n *     stages : [blurXDirection, blurYDirection],\n *     uniforms : uniforms\n * }));\n */\nfunction PostProcessStageComposite(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.stages\", options.stages);\n  Check.typeOf.number.greaterThan(\n    \"options.stages.length\",\n    options.stages.length,\n    0,\n  );\n  //>>includeEnd('debug');\n\n  this._stages = options.stages;\n  this._inputPreviousStageTexture = options.inputPreviousStageTexture ?? true;\n\n  let name = options.name;\n  if (!defined(name)) {\n    name = createGuid();\n  }\n  this._name = name;\n\n  this._uniforms = options.uniforms;\n\n  // used by PostProcessStageCollection\n  this._textureCache = undefined;\n  this._index = undefined;\n\n  this._selected = undefined;\n  this._selectedShadow = undefined;\n  this._parentSelected = undefined;\n  this._parentSelectedShadow = undefined;\n  this._combinedSelected = undefined;\n  this._combinedSelectedShadow = undefined;\n  this._selectedLength = 0;\n  this._parentSelectedLength = 0;\n  this._selectedDirty = true;\n}\n\nObject.defineProperties(PostProcessStageComposite.prototype, {\n  /**\n   * Determines if this post-process stage is ready to be executed.\n   *\n   * @memberof PostProcessStageComposite.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      const stages = this._stages;\n      const length = stages.length;\n      for (let i = 0; i < length; ++i) {\n        if (!stages[i].ready) {\n          return false;\n        }\n      }\n      return true;\n    },\n  },\n  /**\n   * The unique name of this post-process stage for reference by other stages in a PostProcessStageComposite.\n   *\n   * @memberof PostProcessStageComposite.prototype\n   * @type {string}\n   * @readonly\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n  /**\n   * Whether or not to execute this post-process stage when ready.\n   *\n   * @memberof PostProcessStageComposite.prototype\n   * @type {boolean}\n   */\n  enabled: {\n    get: function () {\n      return this._stages[0].enabled;\n    },\n    set: function (value) {\n      const stages = this._stages;\n      const length = stages.length;\n      for (let i = 0; i < length; ++i) {\n        stages[i].enabled = value;\n      }\n    },\n  },\n  /**\n   * An alias to the uniform values of the post-process stages. May be <code>undefined</code>; in which case, get each stage to set uniform values.\n   * @memberof PostProcessStageComposite.prototype\n   * @type {object}\n   */\n  uniforms: {\n    get: function () {\n      return this._uniforms;\n    },\n  },\n  /**\n   * All post-process stages are executed in the order of the array. The input texture changes based on the value of <code>inputPreviousStageTexture</code>.\n   * If <code>inputPreviousStageTexture</code> is <code>true</code>, the input to each stage is the output texture rendered to by the scene or of the stage that executed before it.\n   * If <code>inputPreviousStageTexture</code> is <code>false</code>, the input texture is the same for each stage in the composite. The input texture is the texture rendered to by the scene\n   * or the output texture of the previous stage.\n   *\n   * @memberof PostProcessStageComposite.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  inputPreviousStageTexture: {\n    get: function () {\n      return this._inputPreviousStageTexture;\n    },\n  },\n  /**\n   * The number of post-process stages in this composite.\n   *\n   * @memberof PostProcessStageComposite.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._stages.length;\n    },\n  },\n  /**\n   * The features selected for applying the post-process.\n   *\n   * @memberof PostProcessStageComposite.prototype\n   * @type {Array}\n   */\n  selected: {\n    get: function () {\n      return this._selected;\n    },\n    set: function (value) {\n      this._selected = value;\n    },\n  },\n  /**\n   * @private\n   */\n  parentSelected: {\n    get: function () {\n      return this._parentSelected;\n    },\n    set: function (value) {\n      this._parentSelected = value;\n    },\n  },\n});\n\n/**\n * @private\n */\nPostProcessStageComposite.prototype._isSupported = function (context) {\n  const stages = this._stages;\n  const length = stages.length;\n  for (let i = 0; i < length; ++i) {\n    if (!stages[i]._isSupported(context)) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Gets the post-process stage at <code>index</code>\n *\n * @param {number} index The index of the post-process stage or composite.\n * @return {PostProcessStage|PostProcessStageComposite} The post-process stage or composite at index.\n *\n * @exception {DeveloperError} index must be greater than or equal to 0.\n * @exception {DeveloperError} index must be less than {@link PostProcessStageComposite#length}.\n */\nPostProcessStageComposite.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\n  Check.typeOf.number.lessThan(\"index\", index, this.length);\n  //>>includeEnd('debug');\n  return this._stages[index];\n};\n\nfunction isSelectedTextureDirty(stage) {\n  let length = defined(stage._selected) ? stage._selected.length : 0;\n  const parentLength = defined(stage._parentSelected)\n    ? stage._parentSelected\n    : 0;\n  let dirty =\n    stage._selected !== stage._selectedShadow ||\n    length !== stage._selectedLength;\n  dirty =\n    dirty ||\n    stage._parentSelected !== stage._parentSelectedShadow ||\n    parentLength !== stage._parentSelectedLength;\n\n  if (defined(stage._selected) && defined(stage._parentSelected)) {\n    stage._combinedSelected = stage._selected.concat(stage._parentSelected);\n  } else if (defined(stage._parentSelected)) {\n    stage._combinedSelected = stage._parentSelected;\n  } else {\n    stage._combinedSelected = stage._selected;\n  }\n\n  if (!dirty && defined(stage._combinedSelected)) {\n    if (!defined(stage._combinedSelectedShadow)) {\n      return true;\n    }\n\n    length = stage._combinedSelected.length;\n    for (let i = 0; i < length; ++i) {\n      if (stage._combinedSelected[i] !== stage._combinedSelectedShadow[i]) {\n        return true;\n      }\n    }\n  }\n  return dirty;\n}\n\n/**\n * A function that will be called before execute. Updates each post-process stage in the composite.\n * @param {Context} context The context.\n * @param {boolean} useLogDepth Whether the scene uses a logarithmic depth buffer.\n * @private\n */\nPostProcessStageComposite.prototype.update = function (context, useLogDepth) {\n  this._selectedDirty = isSelectedTextureDirty(this);\n\n  this._selectedShadow = this._selected;\n  this._parentSelectedShadow = this._parentSelected;\n  this._combinedSelectedShadow = this._combinedSelected;\n  this._selectedLength = defined(this._selected) ? this._selected.length : 0;\n  this._parentSelectedLength = defined(this._parentSelected)\n    ? this._parentSelected.length\n    : 0;\n\n  const stages = this._stages;\n  const length = stages.length;\n  for (let i = 0; i < length; ++i) {\n    const stage = stages[i];\n    if (this._selectedDirty) {\n      stage.parentSelected = this._combinedSelected;\n    }\n    stage.update(context, useLogDepth);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStageComposite#destroy\n */\nPostProcessStageComposite.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStageComposite#isDestroyed\n */\nPostProcessStageComposite.prototype.destroy = function () {\n  const stages = this._stages;\n  const length = stages.length;\n  for (let i = 0; i < length; ++i) {\n    stages[i].destroy();\n  }\n  return destroyObject(this);\n};\nexport default PostProcessStageComposite;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport Color from \"../Core/Color.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport AcesTonemapping from \"../Shaders/PostProcessStages/AcesTonemappingStage.js\";\nimport AmbientOcclusionGenerate from \"../Shaders/PostProcessStages/AmbientOcclusionGenerate.js\";\nimport AmbientOcclusionModulate from \"../Shaders/PostProcessStages/AmbientOcclusionModulate.js\";\nimport BlackAndWhite from \"../Shaders/PostProcessStages/BlackAndWhite.js\";\nimport BloomComposite from \"../Shaders/PostProcessStages/BloomComposite.js\";\nimport Brightness from \"../Shaders/PostProcessStages/Brightness.js\";\nimport ContrastBias from \"../Shaders/PostProcessStages/ContrastBias.js\";\nimport DepthOfField from \"../Shaders/PostProcessStages/DepthOfField.js\";\nimport DepthView from \"../Shaders/PostProcessStages/DepthView.js\";\nimport EdgeDetection from \"../Shaders/PostProcessStages/EdgeDetection.js\";\nimport FilmicTonemapping from \"../Shaders/PostProcessStages/FilmicTonemapping.js\";\nimport PbrNeutralTonemapping from \"../Shaders/PostProcessStages/PbrNeutralTonemapping.js\";\nimport FXAA from \"../Shaders/PostProcessStages/FXAA.js\";\nimport GaussianBlur1D from \"../Shaders/PostProcessStages/GaussianBlur1D.js\";\nimport LensFlare from \"../Shaders/PostProcessStages/LensFlare.js\";\nimport ModifiedReinhardTonemapping from \"../Shaders/PostProcessStages/ModifiedReinhardTonemapping.js\";\nimport NightVision from \"../Shaders/PostProcessStages/NightVision.js\";\nimport ReinhardTonemapping from \"../Shaders/PostProcessStages/ReinhardTonemapping.js\";\nimport Silhouette from \"../Shaders/PostProcessStages/Silhouette.js\";\nimport FXAA3_11 from \"../Shaders/FXAA3_11.js\";\nimport AutoExposure from \"./AutoExposure.js\";\nimport PostProcessStage from \"./PostProcessStage.js\";\nimport PostProcessStageComposite from \"./PostProcessStageComposite.js\";\nimport PostProcessStageSampleMode from \"./PostProcessStageSampleMode.js\";\n\n/**\n * Contains functions for creating common post-process stages.\n *\n * @namespace PostProcessStageLibrary\n */\nconst PostProcessStageLibrary = {};\n\nfunction createBlur(name) {\n  const delta = 1.0;\n  const sigma = 2.0;\n  const stepSize = 1.0;\n\n  const blurShader = `#define USE_STEP_SIZE\\n${GaussianBlur1D}`;\n  const blurX = new PostProcessStage({\n    name: `${name}_x_direction`,\n    fragmentShader: blurShader,\n    uniforms: {\n      delta: delta,\n      sigma: sigma,\n      stepSize: stepSize,\n      direction: 0.0,\n    },\n    sampleMode: PostProcessStageSampleMode.LINEAR,\n  });\n  const blurY = new PostProcessStage({\n    name: `${name}_y_direction`,\n    fragmentShader: blurShader,\n    uniforms: {\n      delta: delta,\n      sigma: sigma,\n      stepSize: stepSize,\n      direction: 1.0,\n    },\n    sampleMode: PostProcessStageSampleMode.LINEAR,\n  });\n\n  const uniforms = {};\n  Object.defineProperties(uniforms, {\n    delta: {\n      get: function () {\n        return blurX.uniforms.delta;\n      },\n      set: function (value) {\n        const blurXUniforms = blurX.uniforms;\n        const blurYUniforms = blurY.uniforms;\n        blurXUniforms.delta = blurYUniforms.delta = value;\n      },\n    },\n    sigma: {\n      get: function () {\n        return blurX.uniforms.sigma;\n      },\n      set: function (value) {\n        const blurXUniforms = blurX.uniforms;\n        const blurYUniforms = blurY.uniforms;\n        blurXUniforms.sigma = blurYUniforms.sigma = value;\n      },\n    },\n    stepSize: {\n      get: function () {\n        return blurX.uniforms.stepSize;\n      },\n      set: function (value) {\n        const blurXUniforms = blurX.uniforms;\n        const blurYUniforms = blurY.uniforms;\n        blurXUniforms.stepSize = blurYUniforms.stepSize = value;\n      },\n    },\n  });\n  return new PostProcessStageComposite({\n    name: name,\n    stages: [blurX, blurY],\n    uniforms: uniforms,\n  });\n}\n\n/**\n * Creates a post-process stage that applies a Gaussian blur to the input texture. This stage is usually applied in conjunction with another stage.\n * <p>\n * This stage has the following uniforms: <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n * </p>\n * <p>\n * <code>delta</code> and <code>sigma</code> are used to compute the weights of a Gaussian filter. The equation is <code>exp((-0.5 * delta * delta) / (sigma * sigma))</code>.\n * The default value for <code>delta</code> is <code>1.0</code>. The default value for <code>sigma</code> is <code>2.0</code>.\n * <code>stepSize</code> is the distance to the next texel. The default is <code>1.0</code>.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage that applies a Gaussian blur to the input texture.\n */\nPostProcessStageLibrary.createBlurStage = function () {\n  return createBlur(\"czm_blur\");\n};\n\n/**\n * Creates a post-process stage that applies a depth of field effect.\n * <p>\n * Depth of field simulates camera focus. Objects in the scene that are in focus\n * will be clear whereas objects not in focus will be blurred.\n * </p>\n * <p>\n * This stage has the following uniforms: <code>focalDistance</code>, <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n * </p>\n * <p>\n * <code>focalDistance</code> is the distance in meters from the camera to set the camera focus.\n * </p>\n * <p>\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n * The blur is applied to the areas out of focus.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage that applies a depth of field effect.\n */\nPostProcessStageLibrary.createDepthOfFieldStage = function () {\n  const blur = createBlur(\"czm_depth_of_field_blur\");\n  const dof = new PostProcessStage({\n    name: \"czm_depth_of_field_composite\",\n    fragmentShader: DepthOfField,\n    uniforms: {\n      focalDistance: 5.0,\n      blurTexture: blur.name,\n    },\n  });\n\n  const uniforms = {};\n  Object.defineProperties(uniforms, {\n    focalDistance: {\n      get: function () {\n        return dof.uniforms.focalDistance;\n      },\n      set: function (value) {\n        dof.uniforms.focalDistance = value;\n      },\n    },\n    delta: {\n      get: function () {\n        return blur.uniforms.delta;\n      },\n      set: function (value) {\n        blur.uniforms.delta = value;\n      },\n    },\n    sigma: {\n      get: function () {\n        return blur.uniforms.sigma;\n      },\n      set: function (value) {\n        blur.uniforms.sigma = value;\n      },\n    },\n    stepSize: {\n      get: function () {\n        return blur.uniforms.stepSize;\n      },\n      set: function (value) {\n        blur.uniforms.stepSize = value;\n      },\n    },\n  });\n  return new PostProcessStageComposite({\n    name: \"czm_depth_of_field\",\n    stages: [blur, dof],\n    inputPreviousStageTexture: false,\n    uniforms: uniforms,\n  });\n};\n\n/**\n * Whether or not a depth of field stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isDepthOfFieldSupported = function (scene) {\n  return scene.context.depthTexture;\n};\n\n/**\n * Creates a post-process stage that detects edges.\n * <p>\n * Writes the color to the output texture with alpha set to 1.0 when it is on an edge.\n * </p>\n * <p>\n * This stage has the following uniforms: <code>color</code> and <code>length</code>\n * </p>\n * <ul>\n * <li><code>color</code> is the color of the highlighted edge. The default is {@link Color#BLACK}.</li>\n * <li><code>length</code> is the length of the edges in pixels. The default is <code>0.5</code>.</li>\n * </ul>\n * <p>\n * This stage is not supported in 2D.\n * </p>\n * @return {PostProcessStage} A post-process stage that applies an edge detection effect.\n *\n * @example\n * // multiple silhouette effects\n * const yellowEdge = Cesium.PostProcessStageLibrary.createEdgeDetectionStage();\n * yellowEdge.uniforms.color = Cesium.Color.YELLOW;\n * yellowEdge.selected = [feature0];\n *\n * const greenEdge = Cesium.PostProcessStageLibrary.createEdgeDetectionStage();\n * greenEdge.uniforms.color = Cesium.Color.LIME;\n * greenEdge.selected = [feature1];\n *\n * // draw edges around feature0 and feature1\n * postProcessStages.add(Cesium.PostProcessStageLibrary.createSilhouetteStage([yellowEdge, greenEdge]);\n */\nPostProcessStageLibrary.createEdgeDetectionStage = function () {\n  // unique name generated on call so more than one effect can be added\n  const name = createGuid();\n  return new PostProcessStage({\n    name: `czm_edge_detection_${name}`,\n    fragmentShader: EdgeDetection,\n    uniforms: {\n      length: 0.25,\n      color: Color.clone(Color.BLACK),\n    },\n  });\n};\n\n/**\n * Whether or not an edge detection stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isEdgeDetectionSupported = function (scene) {\n  return scene.context.depthTexture;\n};\n\nfunction getSilhouetteEdgeDetection(edgeDetectionStages) {\n  if (!defined(edgeDetectionStages)) {\n    return PostProcessStageLibrary.createEdgeDetectionStage();\n  }\n\n  const edgeDetection = new PostProcessStageComposite({\n    name: \"czm_edge_detection_multiple\",\n    stages: edgeDetectionStages,\n    inputPreviousStageTexture: false,\n  });\n\n  const compositeUniforms = {};\n  let fsDecl = \"\";\n  let fsLoop = \"\";\n  for (let i = 0; i < edgeDetectionStages.length; ++i) {\n    fsDecl += `uniform sampler2D edgeTexture${i}; \\n`;\n    fsLoop +=\n      `        vec4 edge${i} = texture(edgeTexture${i}, v_textureCoordinates); \\n` +\n      `        if (edge${i}.a > 0.0) \\n` +\n      `        { \\n` +\n      `            color = edge${i}; \\n` +\n      `            break; \\n` +\n      `        } \\n`;\n    compositeUniforms[`edgeTexture${i}`] = edgeDetectionStages[i].name;\n  }\n\n  const fs =\n    `${fsDecl}in vec2 v_textureCoordinates; \\n` +\n    `void main() { \\n` +\n    `    vec4 color = vec4(0.0); \\n` +\n    `    for (int i = 0; i < ${edgeDetectionStages.length}; i++) \\n` +\n    `    { \\n${fsLoop}    } \\n` +\n    `    out_FragColor = color; \\n` +\n    `} \\n`;\n\n  const edgeComposite = new PostProcessStage({\n    name: \"czm_edge_detection_combine\",\n    fragmentShader: fs,\n    uniforms: compositeUniforms,\n  });\n  return new PostProcessStageComposite({\n    name: \"czm_edge_detection_composite\",\n    stages: [edgeDetection, edgeComposite],\n  });\n}\n\n/**\n * Creates a post-process stage that applies a silhouette effect.\n * <p>\n * A silhouette effect composites the color from the edge detection pass with input color texture.\n * </p>\n * <p>\n * This stage has the following uniforms when <code>edgeDetectionStages</code> is <code>undefined</code>: <code>color</code> and <code>length</code>\n * </p>\n * <p>\n * <code>color</code> is the color of the highlighted edge. The default is {@link Color#BLACK}.\n * <code>length</code> is the length of the edges in pixels. The default is <code>0.5</code>.\n * </p>\n * @param {PostProcessStage[]} [edgeDetectionStages] An array of edge detection post process stages.\n * @return {PostProcessStageComposite} A post-process stage that applies a silhouette effect.\n */\nPostProcessStageLibrary.createSilhouetteStage = function (edgeDetectionStages) {\n  const edgeDetection = getSilhouetteEdgeDetection(edgeDetectionStages);\n  const silhouetteProcess = new PostProcessStage({\n    name: \"czm_silhouette_color_edges\",\n    fragmentShader: Silhouette,\n    uniforms: {\n      silhouetteTexture: edgeDetection.name,\n    },\n  });\n\n  return new PostProcessStageComposite({\n    name: \"czm_silhouette\",\n    stages: [edgeDetection, silhouetteProcess],\n    inputPreviousStageTexture: false,\n    uniforms: edgeDetection.uniforms,\n  });\n};\n\n/**\n * Whether or not a silhouette stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isSilhouetteSupported = function (scene) {\n  return scene.context.depthTexture;\n};\n\n/**\n * Creates a post-process stage that applies a bloom effect to the input texture.\n * <p>\n * A bloom effect adds glow effect, makes bright areas brighter, and dark areas darker.\n * </p>\n * <p>\n * This post-process stage has the following uniforms: <code>contrast</code>, <code>brightness</code>, <code>glowOnly</code>,\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code>.\n * </p>\n * <ul>\n * <li><code>contrast</code> is a scalar value in the range [-255.0, 255.0] and affects the contract of the effect. The default value is <code>128.0</code>.</li>\n * <li><code>brightness</code> is a scalar value. The input texture RGB value is converted to hue, saturation, and brightness (HSB) then this value is\n * added to the brightness. The default value is <code>-0.3</code>.</li>\n * <li><code>glowOnly</code> is a boolean value. When <code>true</code>, only the glow effect will be shown. When <code>false</code>, the glow will be added to the input texture.\n * The default value is <code>false</code>. This is a debug option for viewing the effects when changing the other uniform values.</li>\n * </ul>\n * <p>\n * <code>delta</code>, <code>sigma</code>, and <code>stepSize</code> are the same properties as {@link PostProcessStageLibrary#createBlurStage}.\n * </p>\n * @return {PostProcessStageComposite} A post-process stage to applies a bloom effect.\n *\n * @private\n */\nPostProcessStageLibrary.createBloomStage = function () {\n  const contrastBias = new PostProcessStage({\n    name: \"czm_bloom_contrast_bias\",\n    fragmentShader: ContrastBias,\n    uniforms: {\n      contrast: 128.0,\n      brightness: -0.3,\n    },\n  });\n  const blur = createBlur(\"czm_bloom_blur\");\n  const generateComposite = new PostProcessStageComposite({\n    name: \"czm_bloom_contrast_bias_blur\",\n    stages: [contrastBias, blur],\n  });\n\n  const bloomComposite = new PostProcessStage({\n    name: \"czm_bloom_generate_composite\",\n    fragmentShader: BloomComposite,\n    uniforms: {\n      glowOnly: false,\n      bloomTexture: generateComposite.name,\n    },\n  });\n\n  const uniforms = {};\n  Object.defineProperties(uniforms, {\n    glowOnly: {\n      get: function () {\n        return bloomComposite.uniforms.glowOnly;\n      },\n      set: function (value) {\n        bloomComposite.uniforms.glowOnly = value;\n      },\n    },\n    contrast: {\n      get: function () {\n        return contrastBias.uniforms.contrast;\n      },\n      set: function (value) {\n        contrastBias.uniforms.contrast = value;\n      },\n    },\n    brightness: {\n      get: function () {\n        return contrastBias.uniforms.brightness;\n      },\n      set: function (value) {\n        contrastBias.uniforms.brightness = value;\n      },\n    },\n    delta: {\n      get: function () {\n        return blur.uniforms.delta;\n      },\n      set: function (value) {\n        blur.uniforms.delta = value;\n      },\n    },\n    sigma: {\n      get: function () {\n        return blur.uniforms.sigma;\n      },\n      set: function (value) {\n        blur.uniforms.sigma = value;\n      },\n    },\n    stepSize: {\n      get: function () {\n        return blur.uniforms.stepSize;\n      },\n      set: function (value) {\n        blur.uniforms.stepSize = value;\n      },\n    },\n  });\n\n  return new PostProcessStageComposite({\n    name: \"czm_bloom\",\n    stages: [generateComposite, bloomComposite],\n    inputPreviousStageTexture: false,\n    uniforms: uniforms,\n  });\n};\n\n/**\n * Creates a post-process stage that Horizon-based Ambient Occlusion (HBAO) to the input texture.\n * <p>\n * Ambient occlusion simulates shadows from ambient light. These shadows would always be present when the\n * surface receives light and regardless of the light's position.\n * </p>\n * <p>\n * The uniforms have the following properties:\n * <ul>\n * <li><code>intensity</code> is a scalar value used to lighten or darken the shadows exponentially. Higher values make the shadows darker. The default value is <code>3.0</code>.</li>\n * <li><code>bias</code> is a scalar value representing an angle in radians. If the dot product between the normal of the sample and the vector to the camera is less than this value,\n * sampling stops in the current direction. This is used to remove shadows from near planar edges. The default value is <code>0.1</code>.</li>\n * <li><code>lengthCap</code> is a scalar value representing a length in meters. If the distance from the current sample to first sample is greater than this value,\n * sampling stops in the current direction. The default value is <code>0.26</code>.</li>\n * <li><code>directionCount</code> is the number of directions along which the ray marching will search for occluders. The default value is <code>8</code>.</li>\n * <li><code>stepCount</code> is the number of steps the ray marching will take along each direction. The default value is <code>32</code>.</li>\n * <li><code>randomTexture</code> is a texture where the red channel is a random value in [0.0, 1.0]. The default value is <code>undefined</code>. This texture needs to be set.</li>\n * <li><code>ambientOcclusionOnly</code> is a boolean value. When <code>true</code>, only the shadows generated are written to the output. When <code>false</code>, the input texture is modulated\n * with the ambient occlusion. This is a useful debug option for seeing the effects of changing the uniform values. The default value is <code>false</code>.</li>\n * </ul>\n * @return {PostProcessStageComposite} A post-process stage that applies an ambient occlusion effect.\n *\n * @private\n */\nPostProcessStageLibrary.createAmbientOcclusionStage = function () {\n  const generate = new PostProcessStage({\n    name: \"czm_ambient_occlusion_generate\",\n    fragmentShader: AmbientOcclusionGenerate,\n    uniforms: {\n      intensity: 3.0,\n      bias: 0.1,\n      lengthCap: 0.26,\n      directionCount: 8,\n      stepCount: 32,\n      randomTexture: undefined,\n    },\n  });\n\n  const ambientOcclusionModulate = new PostProcessStage({\n    name: \"czm_ambient_occlusion_composite\",\n    fragmentShader: AmbientOcclusionModulate,\n    uniforms: {\n      ambientOcclusionOnly: false,\n      ambientOcclusionTexture: generate.name,\n    },\n  });\n\n  const uniforms = {};\n  Object.defineProperties(uniforms, {\n    intensity: {\n      get: function () {\n        return generate.uniforms.intensity;\n      },\n      set: function (value) {\n        generate.uniforms.intensity = value;\n      },\n    },\n    bias: {\n      get: function () {\n        return generate.uniforms.bias;\n      },\n      set: function (value) {\n        generate.uniforms.bias = value;\n      },\n    },\n    lengthCap: {\n      get: function () {\n        return generate.uniforms.lengthCap;\n      },\n      set: function (value) {\n        generate.uniforms.lengthCap = value;\n      },\n    },\n    directionCount: {\n      get: function () {\n        return generate.uniforms.directionCount;\n      },\n      set: function (value) {\n        generate.uniforms.directionCount = value;\n      },\n    },\n    stepCount: {\n      get: function () {\n        return generate.uniforms.stepCount;\n      },\n      set: function (value) {\n        generate.uniforms.stepCount = value;\n      },\n    },\n    randomTexture: {\n      get: function () {\n        return generate.uniforms.randomTexture;\n      },\n      set: function (value) {\n        generate.uniforms.randomTexture = value;\n      },\n    },\n    ambientOcclusionOnly: {\n      get: function () {\n        return ambientOcclusionModulate.uniforms.ambientOcclusionOnly;\n      },\n      set: function (value) {\n        ambientOcclusionModulate.uniforms.ambientOcclusionOnly = value;\n      },\n    },\n  });\n\n  return new PostProcessStageComposite({\n    name: \"czm_ambient_occlusion\",\n    stages: [generate, ambientOcclusionModulate],\n    inputPreviousStageTexture: false,\n    uniforms: uniforms,\n  });\n};\n\n/**\n * Whether or not an ambient occlusion stage is supported.\n * <p>\n * This stage requires the WEBGL_depth_texture extension.\n * </p>\n *\n * @param {Scene} scene The scene.\n * @return {boolean} Whether this post process stage is supported.\n *\n * @see {Context#depthTexture}\n * @see {@link http://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/|WEBGL_depth_texture}\n */\nPostProcessStageLibrary.isAmbientOcclusionSupported = function (scene) {\n  return scene.context.depthTexture;\n};\n\nconst fxaaFS = `#define FXAA_QUALITY_PRESET 39 \\n${FXAA3_11}\\n${FXAA}`;\n\n/**\n * Creates a post-process stage that applies Fast Approximate Anti-aliasing (FXAA) to the input texture.\n * @return {PostProcessStage} A post-process stage that applies Fast Approximate Anti-aliasing to the input texture.\n *\n * @private\n */\nPostProcessStageLibrary.createFXAAStage = function () {\n  return new PostProcessStage({\n    name: \"czm_FXAA\",\n    fragmentShader: fxaaFS,\n    sampleMode: PostProcessStageSampleMode.LINEAR,\n  });\n};\n\n/**\n * Creates a post-process stage that applies ACES tonemapping operator.\n * @param {boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies ACES tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createAcesTonemappingStage = function (\n  useAutoExposure,\n) {\n  let fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n  fs += AcesTonemapping;\n  return new PostProcessStage({\n    name: \"czm_aces\",\n    fragmentShader: fs,\n    uniforms: {\n      autoExposure: undefined,\n      exposure: 1.0,\n    },\n  });\n};\n\n/**\n * Creates a post-process stage that applies filmic tonemapping operator.\n * @param {boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies filmic tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createFilmicTonemappingStage = function (\n  useAutoExposure,\n) {\n  let fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n  fs += FilmicTonemapping;\n  return new PostProcessStage({\n    name: \"czm_filmic\",\n    fragmentShader: fs,\n    uniforms: {\n      autoExposure: undefined,\n      exposure: 1.0,\n    },\n  });\n};\n\n/**\n * Creates a post-process stage that applies filmic tonemapping operator.\n * @param {boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies filmic tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createPbrNeutralTonemappingStage = function (\n  useAutoExposure,\n) {\n  let fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n  fs += PbrNeutralTonemapping;\n  return new PostProcessStage({\n    name: \"czm_pbr_neutral\",\n    fragmentShader: fs,\n    uniforms: {\n      autoExposure: undefined,\n      exposure: 1.0,\n    },\n  });\n};\n\n/**\n * Creates a post-process stage that applies Reinhard tonemapping operator.\n * @param {boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies Reinhard tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createReinhardTonemappingStage = function (\n  useAutoExposure,\n) {\n  let fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n  fs += ReinhardTonemapping;\n  return new PostProcessStage({\n    name: \"czm_reinhard\",\n    fragmentShader: fs,\n    uniforms: {\n      autoExposure: undefined,\n      exposure: 1.0,\n    },\n  });\n};\n\n/**\n * Creates a post-process stage that applies modified Reinhard tonemapping operator.\n * @param {boolean} useAutoExposure Whether or not to use auto-exposure.\n * @return {PostProcessStage} A post-process stage that applies modified Reinhard tonemapping operator.\n * @private\n */\nPostProcessStageLibrary.createModifiedReinhardTonemappingStage = function (\n  useAutoExposure,\n) {\n  let fs = useAutoExposure ? \"#define AUTO_EXPOSURE\\n\" : \"\";\n  fs += ModifiedReinhardTonemapping;\n  return new PostProcessStage({\n    name: \"czm_modified_reinhard\",\n    fragmentShader: fs,\n    uniforms: {\n      white: Color.WHITE,\n      autoExposure: undefined,\n      exposure: 1.0,\n    },\n  });\n};\n\n/**\n * Creates a post-process stage that finds the average luminance of the input texture.\n * @return {PostProcessStage} A post-process stage that finds the average luminance of the input texture.\n * @private\n */\nPostProcessStageLibrary.createAutoExposureStage = function () {\n  return new AutoExposure();\n};\n\n/**\n * Creates a post-process stage that renders the input texture with black and white gradations.\n * <p>\n * This stage has one uniform value, <code>gradations</code>, which scales the luminance of each pixel.\n * </p>\n * @return {PostProcessStage} A post-process stage that renders the input texture with black and white gradations.\n */\nPostProcessStageLibrary.createBlackAndWhiteStage = function () {\n  return new PostProcessStage({\n    name: \"czm_black_and_white\",\n    fragmentShader: BlackAndWhite,\n    uniforms: {\n      gradations: 5.0,\n    },\n  });\n};\n\n/**\n * Creates a post-process stage that saturates the input texture.\n * <p>\n * This stage has one uniform value, <code>brightness</code>, which scales the saturation of each pixel.\n * </p>\n * @return {PostProcessStage} A post-process stage that saturates the input texture.\n */\nPostProcessStageLibrary.createBrightnessStage = function () {\n  return new PostProcessStage({\n    name: \"czm_brightness\",\n    fragmentShader: Brightness,\n    uniforms: {\n      brightness: 0.5,\n    },\n  });\n};\n\n/**\n * Creates a post-process stage that adds a night vision effect to the input texture.\n * @return {PostProcessStage} A post-process stage that adds a night vision effect to the input texture.\n */\nPostProcessStageLibrary.createNightVisionStage = function () {\n  return new PostProcessStage({\n    name: \"czm_night_vision\",\n    fragmentShader: NightVision,\n  });\n};\n\n/**\n * Creates a post-process stage that replaces the input color texture with a black and white texture representing the fragment depth at each pixel.\n * @return {PostProcessStage} A post-process stage that replaces the input color texture with a black and white texture representing the fragment depth at each pixel.\n *\n * @private\n */\nPostProcessStageLibrary.createDepthViewStage = function () {\n  return new PostProcessStage({\n    name: \"czm_depth_view\",\n    fragmentShader: DepthView,\n  });\n};\n\n/**\n * Creates a post-process stage that applies an effect simulating light flaring a camera lens.\n * <p>\n * This stage has the following uniforms: <code>dirtTexture</code>, <code>starTexture</code>, <code>intensity</code>, <code>distortion</code>, <code>ghostDispersal</code>,\n * <code>haloWidth</code>, <code>dirtAmount</code>, and <code>earthRadius</code>.\n * <ul>\n * <li><code>dirtTexture</code> is a texture sampled to simulate dirt on the lens.</li>\n * <li><code>starTexture</code> is the texture sampled for the star pattern of the flare.</li>\n * <li><code>intensity</code> is a scalar multiplied by the result of the lens flare. The default value is <code>2.0</code>.</li>\n * <li><code>distortion</code> is a scalar value that affects the chromatic effect distortion. The default value is <code>10.0</code>.</li>\n * <li><code>ghostDispersal</code> is a scalar indicating how far the halo effect is from the center of the texture. The default value is <code>0.4</code>.</li>\n * <li><code>haloWidth</code> is a scalar representing the width of the halo  from the ghost dispersal. The default value is <code>0.4</code>.</li>\n * <li><code>dirtAmount</code> is a scalar representing the amount of dirt on the lens. The default value is <code>0.4</code>.</li>\n * <li><code>earthRadius</code> is the maximum radius of the earth. The default value is <code>Ellipsoid.WGS84.maximumRadius</code>.</li>\n * </ul>\n * </p>\n * @return {PostProcessStage} A post-process stage for applying a lens flare effect.\n */\nPostProcessStageLibrary.createLensFlareStage = function () {\n  return new PostProcessStage({\n    name: \"czm_lens_flare\",\n    fragmentShader: LensFlare,\n    uniforms: {\n      dirtTexture: buildModuleUrl(\"Assets/Textures/LensFlare/DirtMask.jpg\"),\n      starTexture: buildModuleUrl(\"Assets/Textures/LensFlare/StarBurst.jpg\"),\n      intensity: 2.0,\n      distortion: 10.0,\n      ghostDispersal: 0.4,\n      haloWidth: 0.4,\n      dirtAmount: 0.4,\n      earthRadius: Ellipsoid.WGS84.maximumRadius,\n    },\n  });\n};\nexport default PostProcessStageLibrary;\n","/**\n * Determines how input texture to a {@link PostProcessStage} is sampled.\n *\n * @enum {number}\n */\nconst PostProcessStageSampleMode = {\n  /**\n   * Samples the texture by returning the closest texel.\n   *\n   * @type {number}\n   * @constant\n   */\n  NEAREST: 0,\n  /**\n   * Samples the texture through bi-linear interpolation of the four nearest texels.\n   *\n   * @type {number}\n   * @constant\n   */\n  LINEAR: 1,\n};\nexport default PostProcessStageSampleMode;\n","import Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\n\n/**\n * Creates a minimal amount of textures and framebuffers.\n *\n * @alias PostProcessStageTextureCache\n * @constructor\n *\n * @param {PostProcessStageCollection} postProcessStageCollection The post process collection.\n *\n * @private\n */\nfunction PostProcessStageTextureCache(postProcessStageCollection) {\n  this._collection = postProcessStageCollection;\n\n  this._framebuffers = [];\n  this._stageNameToFramebuffer = {};\n\n  this._width = undefined;\n  this._height = undefined;\n  this._updateDependencies = false;\n}\n\nfunction getLastStageName(stage) {\n  while (defined(stage.length)) {\n    stage = stage.get(stage.length - 1);\n  }\n  return stage.name;\n}\n\nfunction getStageDependencies(\n  collection,\n  context,\n  dependencies,\n  stage,\n  previousName,\n) {\n  if (!stage.enabled || !stage._isSupported(context)) {\n    return previousName;\n  }\n\n  const stageDependencies = (dependencies[stage.name] = {});\n  if (defined(previousName)) {\n    const previous = collection.getStageByName(previousName);\n    stageDependencies[getLastStageName(previous)] = true;\n  }\n  const uniforms = stage.uniforms;\n  if (defined(uniforms)) {\n    const uniformNames = Object.getOwnPropertyNames(uniforms);\n    const uniformNamesLength = uniformNames.length;\n    for (let i = 0; i < uniformNamesLength; ++i) {\n      const value = uniforms[uniformNames[i]];\n      if (typeof value === \"string\") {\n        const dependent = collection.getStageByName(value);\n        if (defined(dependent)) {\n          stageDependencies[getLastStageName(dependent)] = true;\n        }\n      }\n    }\n  }\n\n  return stage.name;\n}\n\nfunction getCompositeDependencies(\n  collection,\n  context,\n  dependencies,\n  composite,\n  previousName,\n) {\n  if (\n    (defined(composite.enabled) && !composite.enabled) ||\n    (defined(composite._isSupported) && !composite._isSupported(context))\n  ) {\n    return previousName;\n  }\n\n  const originalDependency = previousName;\n\n  const inSeries =\n    !defined(composite.inputPreviousStageTexture) ||\n    composite.inputPreviousStageTexture;\n  let currentName = previousName;\n  const length = composite.length;\n  for (let i = 0; i < length; ++i) {\n    const stage = composite.get(i);\n    if (defined(stage.length)) {\n      currentName = getCompositeDependencies(\n        collection,\n        context,\n        dependencies,\n        stage,\n        previousName,\n      );\n    } else {\n      currentName = getStageDependencies(\n        collection,\n        context,\n        dependencies,\n        stage,\n        previousName,\n      );\n    }\n    // Stages in a series only depend on the previous stage\n    if (inSeries) {\n      previousName = currentName;\n    }\n  }\n\n  // Stages not in a series depend on every stage executed before it since it could reference it as a uniform.\n  // This prevents looking at the dependencies of each stage in the composite, but might create more framebuffers than necessary.\n  // In practice, there are only 2-3 stages in these composites.\n  let j;\n  let name;\n  if (!inSeries) {\n    for (j = 1; j < length; ++j) {\n      name = getLastStageName(composite.get(j));\n      const currentDependencies = dependencies[name];\n      for (let k = 0; k < j; ++k) {\n        currentDependencies[getLastStageName(composite.get(k))] = true;\n      }\n    }\n  } else {\n    for (j = 1; j < length; ++j) {\n      name = getLastStageName(composite.get(j));\n      if (!defined(dependencies[name])) {\n        dependencies[name] = {};\n      }\n      dependencies[name][originalDependency] = true;\n    }\n  }\n\n  return currentName;\n}\n\nfunction getDependencies(collection, context) {\n  const dependencies = {};\n\n  if (defined(collection.ambientOcclusion)) {\n    const ao = collection.ambientOcclusion;\n    const bloom = collection.bloom;\n    const tonemapping = collection._tonemapping;\n    const fxaa = collection.fxaa;\n\n    let previousName = getCompositeDependencies(\n      collection,\n      context,\n      dependencies,\n      ao,\n      undefined,\n    );\n    previousName = getCompositeDependencies(\n      collection,\n      context,\n      dependencies,\n      bloom,\n      previousName,\n    );\n    previousName = getStageDependencies(\n      collection,\n      context,\n      dependencies,\n      tonemapping,\n      previousName,\n    );\n    previousName = getCompositeDependencies(\n      collection,\n      context,\n      dependencies,\n      collection,\n      previousName,\n    );\n    getStageDependencies(collection, context, dependencies, fxaa, previousName);\n  } else {\n    getCompositeDependencies(\n      collection,\n      context,\n      dependencies,\n      collection,\n      undefined,\n    );\n  }\n\n  return dependencies;\n}\n\nfunction getFramebuffer(cache, stageName, dependencies) {\n  const collection = cache._collection;\n  const stage = collection.getStageByName(stageName);\n\n  const textureScale = stage._textureScale;\n  const forcePowerOfTwo = stage._forcePowerOfTwo;\n  const pixelFormat = stage._pixelFormat;\n  const pixelDatatype = stage._pixelDatatype;\n  const clearColor = stage._clearColor;\n\n  let i;\n  let framebuffer;\n  const framebuffers = cache._framebuffers;\n  const length = framebuffers.length;\n  for (i = 0; i < length; ++i) {\n    framebuffer = framebuffers[i];\n\n    if (\n      textureScale !== framebuffer.textureScale ||\n      forcePowerOfTwo !== framebuffer.forcePowerOfTwo ||\n      pixelFormat !== framebuffer.pixelFormat ||\n      pixelDatatype !== framebuffer.pixelDatatype ||\n      !Color.equals(clearColor, framebuffer.clearColor)\n    ) {\n      continue;\n    }\n\n    const stageNames = framebuffer.stages;\n    const stagesLength = stageNames.length;\n    let foundConflict = false;\n    for (let j = 0; j < stagesLength; ++j) {\n      if (dependencies[stageNames[j]]) {\n        foundConflict = true;\n        break;\n      }\n    }\n\n    if (!foundConflict) {\n      break;\n    }\n  }\n\n  if (defined(framebuffer) && i < length) {\n    framebuffer.stages.push(stageName);\n    return framebuffer;\n  }\n\n  framebuffer = {\n    textureScale: textureScale,\n    forcePowerOfTwo: forcePowerOfTwo,\n    pixelFormat: pixelFormat,\n    pixelDatatype: pixelDatatype,\n    clearColor: clearColor,\n    stages: [stageName],\n    buffer: new FramebufferManager({\n      pixelFormat: pixelFormat,\n      pixelDatatype: pixelDatatype,\n    }),\n    clear: undefined,\n  };\n\n  framebuffers.push(framebuffer);\n  return framebuffer;\n}\n\nfunction createFramebuffers(cache, context) {\n  const dependencies = getDependencies(cache._collection, context);\n  for (const stageName in dependencies) {\n    if (dependencies.hasOwnProperty(stageName)) {\n      cache._stageNameToFramebuffer[stageName] = getFramebuffer(\n        cache,\n        stageName,\n        dependencies[stageName],\n      );\n    }\n  }\n}\n\nfunction releaseResources(cache) {\n  const framebuffers = cache._framebuffers;\n  const length = framebuffers.length;\n  for (let i = 0; i < length; ++i) {\n    const framebuffer = framebuffers[i];\n    framebuffer.buffer.destroy();\n  }\n}\n\nfunction updateFramebuffers(cache, context) {\n  const width = cache._width;\n  const height = cache._height;\n\n  const framebuffers = cache._framebuffers;\n  const length = framebuffers.length;\n  for (let i = 0; i < length; ++i) {\n    const framebuffer = framebuffers[i];\n\n    const scale = framebuffer.textureScale;\n    let textureWidth = Math.ceil(width * scale);\n    let textureHeight = Math.ceil(height * scale);\n\n    let size = Math.min(textureWidth, textureHeight);\n    if (framebuffer.forcePowerOfTwo) {\n      if (!CesiumMath.isPowerOfTwo(size)) {\n        size = CesiumMath.nextPowerOfTwo(size);\n      }\n      textureWidth = size;\n      textureHeight = size;\n    }\n\n    framebuffer.buffer.update(context, textureWidth, textureHeight);\n    framebuffer.clear = new ClearCommand({\n      color: framebuffer.clearColor,\n      framebuffer: framebuffer.buffer.framebuffer,\n    });\n  }\n}\n\nPostProcessStageTextureCache.prototype.updateDependencies = function () {\n  this._updateDependencies = true;\n};\n\n/**\n * Called before the stages in the collection are executed. Creates the minimum amount of framebuffers for a post-process collection.\n *\n * @param {Context} context The context.\n */\nPostProcessStageTextureCache.prototype.update = function (context) {\n  const collection = this._collection;\n  const updateDependencies = this._updateDependencies;\n  const aoEnabled =\n    defined(collection.ambientOcclusion) &&\n    collection.ambientOcclusion.enabled &&\n    collection.ambientOcclusion._isSupported(context);\n  const bloomEnabled =\n    defined(collection.bloom) &&\n    collection.bloom.enabled &&\n    collection.bloom._isSupported(context);\n  const tonemappingEnabled =\n    defined(collection._tonemapping) &&\n    collection._tonemapping.enabled &&\n    collection._tonemapping._isSupported(context);\n  const fxaaEnabled =\n    defined(collection.fxaa) &&\n    collection.fxaa.enabled &&\n    collection.fxaa._isSupported(context);\n  const needsCheckDimensionsUpdate =\n    !defined(collection._activeStages) ||\n    collection._activeStages.length > 0 ||\n    aoEnabled ||\n    bloomEnabled ||\n    tonemappingEnabled ||\n    fxaaEnabled;\n  if (\n    updateDependencies ||\n    (!needsCheckDimensionsUpdate && this._framebuffers.length > 0)\n  ) {\n    releaseResources(this);\n    this._framebuffers.length = 0;\n    this._stageNameToFramebuffer = {};\n    this._width = undefined;\n    this._height = undefined;\n  }\n\n  if (!updateDependencies && !needsCheckDimensionsUpdate) {\n    return;\n  }\n\n  if (this._framebuffers.length === 0) {\n    createFramebuffers(this, context);\n  }\n\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight;\n  const dimensionsChanged = this._width !== width || this._height !== height;\n  if (!updateDependencies && !dimensionsChanged) {\n    return;\n  }\n\n  this._width = width;\n  this._height = height;\n  this._updateDependencies = false;\n  releaseResources(this);\n  updateFramebuffers(this, context);\n};\n\n/**\n * Clears all of the framebuffers.\n *\n * @param {Context} context The context.\n */\nPostProcessStageTextureCache.prototype.clear = function (context) {\n  const framebuffers = this._framebuffers;\n  for (let i = 0; i < framebuffers.length; ++i) {\n    framebuffers[i].clear.execute(context);\n  }\n};\n\n/**\n * Gets the stage with the given name.\n * @param {string} name The name of the stage.\n * @return {PostProcessStage|PostProcessStageComposite}\n */\nPostProcessStageTextureCache.prototype.getStageByName = function (name) {\n  return this._collection.getStageByName(name);\n};\n\n/**\n * Gets the output texture for a stage with the given name.\n * @param {string} name The name of the stage.\n * @return {Texture|undefined} The output texture of the stage with the given name.\n */\nPostProcessStageTextureCache.prototype.getOutputTexture = function (name) {\n  return this._collection.getOutputTexture(name);\n};\n\n/**\n * Gets the framebuffer for a stage with the given name.\n *\n * @param {string} name The name of the stage.\n * @return {Framebuffer|undefined} The framebuffer for the stage with the given name.\n */\nPostProcessStageTextureCache.prototype.getFramebuffer = function (name) {\n  const framebuffer = this._stageNameToFramebuffer[name];\n  if (!defined(framebuffer)) {\n    return undefined;\n  }\n  return framebuffer.buffer.framebuffer;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see PostProcessStageTextureCache#destroy\n */\nPostProcessStageTextureCache.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PostProcessStageTextureCache#isDestroyed\n */\nPostProcessStageTextureCache.prototype.destroy = function () {\n  releaseResources(this);\n  return destroyObject(this);\n};\nexport default PostProcessStageTextureCache;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport combine from \"../Core/combine.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport GeometryAttributes from \"../Core/GeometryAttributes.js\";\nimport GeometryOffsetAttribute from \"../Core/GeometryOffsetAttribute.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Plane from \"../Core/Plane.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport subdivideArray from \"../Core/subdivideArray.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport BatchTable from \"./BatchTable.js\";\nimport CullFace from \"./CullFace.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport PrimitivePipeline from \"./PrimitivePipeline.js\";\nimport PrimitiveState from \"./PrimitiveState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\n\n/**\n * A primitive represents geometry in the {@link Scene}.  The geometry can be from a single {@link GeometryInstance}\n * as shown in example 1 below, or from an array of instances, even if the geometry is from different\n * geometry types, e.g., an {@link RectangleGeometry} and an {@link EllipsoidGeometry} as shown in Code Example 2.\n * <p>\n * A primitive combines geometry instances with an {@link Appearance} that describes the full shading, including\n * {@link Material} and {@link RenderState}.  Roughly, the geometry instance defines the structure and placement,\n * and the appearance defines the visual characteristics.  Decoupling geometry and appearance allows us to mix\n * and match most of them and add a new geometry or appearance independently of each other.\n * </p>\n * <p>\n * Combining multiple instances into one primitive is called batching, and significantly improves performance for static data.\n * Instances can be individually picked; {@link Scene#pick} returns their {@link GeometryInstance#id}.  Using\n * per-instance appearances like {@link PerInstanceColorAppearance}, each instance can also have a unique color.\n * </p>\n * <p>\n * {@link Geometry} can either be created and batched on a web worker or the main thread. The first two examples\n * show geometry that will be created on a web worker by using the descriptions of the geometry. The third example\n * shows how to create the geometry on the main thread by explicitly calling the <code>createGeometry</code> method.\n * </p>\n *\n * @alias Primitive\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {GeometryInstance[]|GeometryInstance} [options.geometryInstances] The geometry instances - or a single geometry instance - to render.\n * @param {Appearance} [options.appearance] The appearance used to render the primitive.\n * @param {Appearance} [options.depthFailAppearance] The appearance used to shade this primitive when it fails the depth test.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix that transforms the primitive (all geometry instances) from model to world coordinates.\n * @param {boolean} [options.vertexCacheOptimize=false] When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n * @param {boolean} [options.interleave=false] When <code>true</code>, geometry vertex attributes are interleaved, which can slightly improve rendering performance but increases load time.\n * @param {boolean} [options.compressVertices=true] When <code>true</code>, the geometry vertices are compressed, which will save memory.\n * @param {boolean} [options.releaseGeometryInstances=true] When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n * @param {boolean} [options.allowPicking=true] When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.\n * @param {boolean} [options.cull=true] When <code>true</code>, the renderer frustum culls and horizon culls the primitive's commands based on their bounding volume.  Set this to <code>false</code> for a small performance gain if you are manually culling the primitive.\n * @param {boolean} [options.asynchronous=true] Determines if the primitive will be created asynchronously or block until ready.\n * @param {boolean} [options.debugShowBoundingVolume=false] For debugging only. Determines if this primitive's commands' bounding spheres are shown.\n * @param {ShadowMode} [options.shadows=ShadowMode.DISABLED] Determines whether this primitive casts or receives shadows from light sources.\n *\n * @example\n * // 1. Draw a translucent ellipse on the surface with a checkerboard pattern\n * const instance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.EllipseGeometry({\n *       center : Cesium.Cartesian3.fromDegrees(-100.0, 20.0),\n *       semiMinorAxis : 500000.0,\n *       semiMajorAxis : 1000000.0,\n *       rotation : Cesium.Math.PI_OVER_FOUR,\n *       vertexFormat : Cesium.VertexFormat.POSITION_AND_ST\n *   }),\n *   id : 'object returned when this instance is picked and to get/set per-instance attributes'\n * });\n * scene.primitives.add(new Cesium.Primitive({\n *   geometryInstances : instance,\n *   appearance : new Cesium.EllipsoidSurfaceAppearance({\n *     material : Cesium.Material.fromType('Checkerboard')\n *   })\n * }));\n *\n * @example\n * // 2. Draw different instances each with a unique color\n * const rectangleInstance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.RectangleGeometry({\n *     rectangle : Cesium.Rectangle.fromDegrees(-140.0, 30.0, -100.0, 40.0),\n *     vertexFormat : Cesium.PerInstanceColorAppearance.VERTEX_FORMAT\n *   }),\n *   id : 'rectangle',\n *   attributes : {\n *     color : new Cesium.ColorGeometryInstanceAttribute(0.0, 1.0, 1.0, 0.5)\n *   }\n * });\n * const ellipsoidInstance = new Cesium.GeometryInstance({\n *   geometry : new Cesium.EllipsoidGeometry({\n *     radii : new Cesium.Cartesian3(500000.0, 500000.0, 1000000.0),\n *     vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL\n *   }),\n *   modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *     Cesium.Cartesian3.fromDegrees(-95.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 500000.0), new Cesium.Matrix4()),\n *   id : 'ellipsoid',\n *   attributes : {\n *     color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n *   }\n * });\n * scene.primitives.add(new Cesium.Primitive({\n *   geometryInstances : [rectangleInstance, ellipsoidInstance],\n *   appearance : new Cesium.PerInstanceColorAppearance()\n * }));\n *\n * @example\n * // 3. Create the geometry on the main thread.\n * scene.primitives.add(new Cesium.Primitive({\n *   geometryInstances : new Cesium.GeometryInstance({\n *     geometry : Cesium.EllipsoidGeometry.createGeometry(new Cesium.EllipsoidGeometry({\n *       radii : new Cesium.Cartesian3(500000.0, 500000.0, 1000000.0),\n *       vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL\n *     })),\n *     modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\n *       Cesium.Cartesian3.fromDegrees(-95.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 500000.0), new Cesium.Matrix4()),\n *     id : 'ellipsoid',\n *     attributes : {\n *       color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\n *     }\n *   }),\n *   appearance : new Cesium.PerInstanceColorAppearance(),\n *   asynchronous : false\n * }));\n *\n * @see GeometryInstance\n * @see Appearance\n * @see ClassificationPrimitive\n * @see GroundPrimitive\n */\nfunction Primitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * The geometry instances rendered with this primitive.  This may\n   * be <code>undefined</code> if <code>options.releaseGeometryInstances</code>\n   * is <code>true</code> when the primitive is constructed.\n   * <p>\n   * Changing this property after the primitive is rendered has no effect.\n   * </p>\n   *\n   * @readonly\n   * @type GeometryInstance[]|GeometryInstance\n   *\n   * @default undefined\n   */\n  this.geometryInstances = options.geometryInstances;\n\n  /**\n   * The {@link Appearance} used to shade this primitive. Each geometry\n   * instance is shaded with the same appearance.  Some appearances, like\n   * {@link PerInstanceColorAppearance} allow giving each instance unique\n   * properties.\n   *\n   * @type Appearance\n   *\n   * @default undefined\n   */\n  this.appearance = options.appearance;\n  this._appearance = undefined;\n  this._material = undefined;\n\n  /**\n   * The {@link Appearance} used to shade this primitive when it fails the depth test. Each geometry\n   * instance is shaded with the same appearance.  Some appearances, like\n   * {@link PerInstanceColorAppearance} allow giving each instance unique\n   * properties.\n   *\n   * <p>\n   * When using an appearance that requires a color attribute, like PerInstanceColorAppearance,\n   * add a depthFailColor per-instance attribute instead.\n   * </p>\n   *\n   * <p>\n   * Requires the EXT_frag_depth WebGL extension to render properly. If the extension is not supported,\n   * there may be artifacts.\n   * </p>\n   * @type Appearance\n   *\n   * @default undefined\n   */\n  this.depthFailAppearance = options.depthFailAppearance;\n  this._depthFailAppearance = undefined;\n  this._depthFailMaterial = undefined;\n\n  /**\n   * The 4x4 transformation matrix that transforms the primitive (all geometry instances) from model to world coordinates.\n   * When this is the identity matrix, the primitive is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\n   * Local reference frames can be used by providing a different transformation matrix, like that returned\n   * by {@link Transforms.eastNorthUpToFixedFrame}.\n   *\n   * <p>\n   * This property is only supported in 3D mode.\n   * </p>\n   *\n   * @type Matrix4\n   *\n   * @default Matrix4.IDENTITY\n   *\n   * @example\n   * const origin = Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 200000.0);\n   * p.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(origin);\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  this._modelMatrix = new Matrix4();\n\n  /**\n   * Determines if the primitive will be shown.  This affects all geometry\n   * instances in the primitive.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  this._vertexCacheOptimize = options.vertexCacheOptimize ?? false;\n  this._interleave = options.interleave ?? false;\n  this._releaseGeometryInstances = options.releaseGeometryInstances ?? true;\n  this._allowPicking = options.allowPicking ?? true;\n  this._asynchronous = options.asynchronous ?? true;\n  this._compressVertices = options.compressVertices ?? true;\n\n  /**\n   * When <code>true</code>, the renderer frustum culls and horizon culls the primitive's commands\n   * based on their bounding volume.  Set this to <code>false</code> for a small performance gain\n   * if you are manually culling the primitive.\n   *\n   * @type {boolean}\n   *\n   * @default true\n   */\n  this.cull = options.cull ?? true;\n\n  /**\n   * This property is for debugging only; it is not for production use nor is it optimized.\n   * <p>\n   * Draws the bounding sphere for each draw command in the primitive.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowBoundingVolume = options.debugShowBoundingVolume ?? false;\n\n  /**\n   * @private\n   */\n  this.rtcCenter = options.rtcCenter;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    defined(this.rtcCenter) &&\n    (!defined(this.geometryInstances) ||\n      (Array.isArray(this.geometryInstances) &&\n        this.geometryInstances.length !== 1))\n  ) {\n    throw new DeveloperError(\n      \"Relative-to-center rendering only supports one geometry instance.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * Determines whether this primitive casts or receives shadows from light sources.\n   *\n   * @type {ShadowMode}\n   *\n   * @default ShadowMode.DISABLED\n   */\n  this.shadows = options.shadows ?? ShadowMode.DISABLED;\n\n  this._translucent = undefined;\n\n  this._state = PrimitiveState.READY;\n  this._geometries = [];\n  this._error = undefined;\n  this._numberOfInstances = 0;\n\n  this._boundingSpheres = [];\n  this._boundingSphereWC = [];\n  this._boundingSphereCV = [];\n  this._boundingSphere2D = [];\n  this._boundingSphereMorph = [];\n  this._perInstanceAttributeCache = new Map();\n  this._instanceIds = [];\n  this._lastPerInstanceAttributeIndex = 0;\n\n  this._va = [];\n  this._attributeLocations = undefined;\n  this._primitiveType = undefined;\n\n  this._frontFaceRS = undefined;\n  this._backFaceRS = undefined;\n  this._sp = undefined;\n\n  this._depthFailAppearance = undefined;\n  this._spDepthFail = undefined;\n  this._frontFaceDepthFailRS = undefined;\n  this._backFaceDepthFailRS = undefined;\n\n  this._pickIds = [];\n\n  this._colorCommands = [];\n  this._pickCommands = [];\n\n  this._createBoundingVolumeFunction = options._createBoundingVolumeFunction;\n  this._createRenderStatesFunction = options._createRenderStatesFunction;\n  this._createShaderProgramFunction = options._createShaderProgramFunction;\n  this._createCommandsFunction = options._createCommandsFunction;\n  this._updateAndQueueCommandsFunction =\n    options._updateAndQueueCommandsFunction;\n\n  this._createPickOffsets = options._createPickOffsets;\n  this._pickOffsets = undefined;\n\n  this._createGeometryResults = undefined;\n  this._ready = false;\n\n  this._batchTable = undefined;\n  this._batchTableAttributeIndices = undefined;\n  this._offsetInstanceExtend = undefined;\n  this._batchTableOffsetAttribute2DIndex = undefined;\n  this._batchTableOffsetsUpdated = false;\n  this._instanceBoundingSpheres = undefined;\n  this._instanceBoundingSpheresCV = undefined;\n  this._tempBoundingSpheres = undefined;\n  this._recomputeBoundingSpheres = false;\n  this._batchTableBoundingSpheresUpdated = false;\n  this._batchTableBoundingSphereAttributeIndices = undefined;\n}\n\nObject.defineProperties(Primitive.prototype, {\n  /**\n   * When <code>true</code>, geometry vertices are optimized for the pre and post-vertex-shader caches.\n   *\n   * @memberof Primitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  vertexCacheOptimize: {\n    get: function () {\n      return this._vertexCacheOptimize;\n    },\n  },\n\n  /**\n   * Determines if geometry vertex attributes are interleaved, which can slightly improve rendering performance.\n   *\n   * @memberof Primitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default false\n   */\n  interleave: {\n    get: function () {\n      return this._interleave;\n    },\n  },\n\n  /**\n   * When <code>true</code>, the primitive does not keep a reference to the input <code>geometryInstances</code> to save memory.\n   *\n   * @memberof Primitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  releaseGeometryInstances: {\n    get: function () {\n      return this._releaseGeometryInstances;\n    },\n  },\n\n  /**\n   * When <code>true</code>, each geometry instance will only be pickable with {@link Scene#pick}.  When <code>false</code>, GPU memory is saved.         *\n   *\n   * @memberof Primitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  allowPicking: {\n    get: function () {\n      return this._allowPicking;\n    },\n  },\n\n  /**\n   * Determines if the geometry instances will be created and batched on a web worker.\n   *\n   * @memberof Primitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  asynchronous: {\n    get: function () {\n      return this._asynchronous;\n    },\n  },\n\n  /**\n   * When <code>true</code>, geometry vertices are compressed, which will save memory.\n   *\n   * @memberof Primitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @default true\n   */\n  compressVertices: {\n    get: function () {\n      return this._compressVertices;\n    },\n  },\n\n  /**\n   * Determines if the primitive is complete and ready to render.  If this property is\n   * true, the primitive will be rendered the next time that {@link Primitive#update}\n   * is called.\n   *\n   * @memberof Primitive.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @example\n   * // Wait for a primitive to become ready before accessing attributes\n   * const removeListener = scene.postRender.addEventListener(() => {\n   *   if (!frustumPrimitive.ready) {\n   *     return;\n   *   }\n   *\n   *   const attributes = primitive.getGeometryInstanceAttributes('an id');\n   *   attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n   *\n   *   removeListener();\n   * });\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\nfunction getCommonPerInstanceAttributeNames(instances) {\n  const length = instances.length;\n\n  const attributesInAllInstances = [];\n  const attributes0 = instances[0].attributes;\n  let name;\n\n  for (name in attributes0) {\n    if (attributes0.hasOwnProperty(name) && defined(attributes0[name])) {\n      const attribute = attributes0[name];\n      let inAllInstances = true;\n\n      // Does this same attribute exist in all instances?\n      for (let i = 1; i < length; ++i) {\n        const otherAttribute = instances[i].attributes[name];\n\n        if (\n          !defined(otherAttribute) ||\n          attribute.componentDatatype !== otherAttribute.componentDatatype ||\n          attribute.componentsPerAttribute !==\n            otherAttribute.componentsPerAttribute ||\n          attribute.normalize !== otherAttribute.normalize\n        ) {\n          inAllInstances = false;\n          break;\n        }\n      }\n\n      if (inAllInstances) {\n        attributesInAllInstances.push(name);\n      }\n    }\n  }\n\n  return attributesInAllInstances;\n}\n\nconst scratchGetAttributeCartesian2 = new Cartesian2();\nconst scratchGetAttributeCartesian3 = new Cartesian3();\nconst scratchGetAttributeCartesian4 = new Cartesian4();\n\nfunction getAttributeValue(value) {\n  const componentsPerAttribute = value.length;\n  if (componentsPerAttribute === 1) {\n    return value[0];\n  } else if (componentsPerAttribute === 2) {\n    return Cartesian2.unpack(value, 0, scratchGetAttributeCartesian2);\n  } else if (componentsPerAttribute === 3) {\n    return Cartesian3.unpack(value, 0, scratchGetAttributeCartesian3);\n  } else if (componentsPerAttribute === 4) {\n    return Cartesian4.unpack(value, 0, scratchGetAttributeCartesian4);\n  }\n}\n\nfunction createBatchTable(primitive, context) {\n  const geometryInstances = primitive.geometryInstances;\n  const instances = Array.isArray(geometryInstances)\n    ? geometryInstances\n    : [geometryInstances];\n  const numberOfInstances = instances.length;\n  if (numberOfInstances === 0) {\n    return;\n  }\n\n  const names = getCommonPerInstanceAttributeNames(instances);\n  const length = names.length;\n\n  const attributes = [];\n  const attributeIndices = {};\n  const boundingSphereAttributeIndices = {};\n  let offset2DIndex;\n\n  const firstInstance = instances[0];\n  let instanceAttributes = firstInstance.attributes;\n\n  let i;\n  let name;\n  let attribute;\n\n  for (i = 0; i < length; ++i) {\n    name = names[i];\n    attribute = instanceAttributes[name];\n\n    attributeIndices[name] = i;\n    attributes.push({\n      functionName: `czm_batchTable_${name}`,\n      componentDatatype: attribute.componentDatatype,\n      componentsPerAttribute: attribute.componentsPerAttribute,\n      normalize: attribute.normalize,\n    });\n  }\n\n  if (names.indexOf(\"distanceDisplayCondition\") !== -1) {\n    attributes.push(\n      {\n        functionName: \"czm_batchTable_boundingSphereCenter3DHigh\",\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        functionName: \"czm_batchTable_boundingSphereCenter3DLow\",\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        functionName: \"czm_batchTable_boundingSphereCenter2DHigh\",\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        functionName: \"czm_batchTable_boundingSphereCenter2DLow\",\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        functionName: \"czm_batchTable_boundingSphereRadius\",\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 1,\n      },\n    );\n    boundingSphereAttributeIndices.center3DHigh = attributes.length - 5;\n    boundingSphereAttributeIndices.center3DLow = attributes.length - 4;\n    boundingSphereAttributeIndices.center2DHigh = attributes.length - 3;\n    boundingSphereAttributeIndices.center2DLow = attributes.length - 2;\n    boundingSphereAttributeIndices.radius = attributes.length - 1;\n  }\n\n  if (names.indexOf(\"offset\") !== -1) {\n    attributes.push({\n      functionName: \"czm_batchTable_offset2D\",\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 3,\n    });\n    offset2DIndex = attributes.length - 1;\n  }\n\n  attributes.push({\n    functionName: \"czm_batchTable_pickColor\",\n    componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n    componentsPerAttribute: 4,\n    normalize: true,\n  });\n\n  const attributesLength = attributes.length;\n  const batchTable = new BatchTable(context, attributes, numberOfInstances);\n\n  for (i = 0; i < numberOfInstances; ++i) {\n    const instance = instances[i];\n    instanceAttributes = instance.attributes;\n\n    for (let j = 0; j < length; ++j) {\n      name = names[j];\n      attribute = instanceAttributes[name];\n      const value = getAttributeValue(attribute.value);\n      const attributeIndex = attributeIndices[name];\n      batchTable.setBatchedAttribute(i, attributeIndex, value);\n    }\n\n    const pickObject = {\n      primitive: instance.pickPrimitive ?? primitive,\n    };\n\n    if (defined(instance.id)) {\n      pickObject.id = instance.id;\n    }\n\n    const pickId = context.createPickId(pickObject);\n    primitive._pickIds.push(pickId);\n\n    const pickColor = pickId.color;\n    const color = scratchGetAttributeCartesian4;\n    color.x = Color.floatToByte(pickColor.red);\n    color.y = Color.floatToByte(pickColor.green);\n    color.z = Color.floatToByte(pickColor.blue);\n    color.w = Color.floatToByte(pickColor.alpha);\n\n    batchTable.setBatchedAttribute(i, attributesLength - 1, color);\n  }\n\n  primitive._batchTable = batchTable;\n  primitive._batchTableAttributeIndices = attributeIndices;\n  primitive._batchTableBoundingSphereAttributeIndices =\n    boundingSphereAttributeIndices;\n  primitive._batchTableOffsetAttribute2DIndex = offset2DIndex;\n}\n\nfunction cloneAttribute(attribute) {\n  let clonedValues;\n  if (Array.isArray(attribute.values)) {\n    clonedValues = attribute.values.slice(0);\n  } else {\n    clonedValues = new attribute.values.constructor(attribute.values);\n  }\n  return new GeometryAttribute({\n    componentDatatype: attribute.componentDatatype,\n    componentsPerAttribute: attribute.componentsPerAttribute,\n    normalize: attribute.normalize,\n    values: clonedValues,\n  });\n}\n\nfunction cloneGeometry(geometry) {\n  const attributes = geometry.attributes;\n  const newAttributes = new GeometryAttributes();\n  for (const property in attributes) {\n    if (attributes.hasOwnProperty(property) && defined(attributes[property])) {\n      newAttributes[property] = cloneAttribute(attributes[property]);\n    }\n  }\n\n  let indices;\n  if (defined(geometry.indices)) {\n    const sourceValues = geometry.indices;\n    if (Array.isArray(sourceValues)) {\n      indices = sourceValues.slice(0);\n    } else {\n      indices = new sourceValues.constructor(sourceValues);\n    }\n  }\n\n  return new Geometry({\n    attributes: newAttributes,\n    indices: indices,\n    primitiveType: geometry.primitiveType,\n    boundingSphere: BoundingSphere.clone(geometry.boundingSphere),\n  });\n}\n\nfunction cloneInstance(instance, geometry) {\n  return {\n    geometry: geometry,\n    attributes: instance.attributes,\n    modelMatrix: Matrix4.clone(instance.modelMatrix),\n    pickPrimitive: instance.pickPrimitive,\n    id: instance.id,\n  };\n}\n\nconst positionRegex = /in\\s+vec(?:3|4)\\s+(.*)3DHigh;/g;\n\nPrimitive._modifyShaderPosition = function (\n  primitive,\n  vertexShaderSource,\n  scene3DOnly,\n) {\n  let match;\n\n  let forwardDecl = \"\";\n  let attributes = \"\";\n  let computeFunctions = \"\";\n\n  while ((match = positionRegex.exec(vertexShaderSource)) !== null) {\n    const name = match[1];\n\n    const functionName = `vec4 czm_compute${name[0].toUpperCase()}${name.substr(\n      1,\n    )}()`;\n\n    // Don't forward-declare czm_computePosition because computePosition.glsl already does.\n    if (functionName !== \"vec4 czm_computePosition()\") {\n      forwardDecl += `${functionName};\\n`;\n    }\n\n    if (!defined(primitive.rtcCenter)) {\n      // Use GPU RTE\n      if (!scene3DOnly) {\n        attributes += `in vec3 ${name}2DHigh;\\nin vec3 ${name}2DLow;\\n`;\n\n        computeFunctions +=\n          `${functionName}\\n` +\n          `{\\n` +\n          `    vec4 p;\\n` +\n          `    if (czm_morphTime == 1.0)\\n` +\n          `    {\\n` +\n          `        p = czm_translateRelativeToEye(${name}3DHigh, ${name}3DLow);\\n` +\n          `    }\\n` +\n          `    else if (czm_morphTime == 0.0)\\n` +\n          `    {\\n` +\n          `        p = czm_translateRelativeToEye(${name}2DHigh.zxy, ${name}2DLow.zxy);\\n` +\n          `    }\\n` +\n          `    else\\n` +\n          `    {\\n` +\n          `        p = czm_columbusViewMorph(\\n` +\n          `                czm_translateRelativeToEye(${name}2DHigh.zxy, ${name}2DLow.zxy),\\n` +\n          `                czm_translateRelativeToEye(${name}3DHigh, ${name}3DLow),\\n` +\n          `                czm_morphTime);\\n` +\n          `    }\\n` +\n          `    return p;\\n` +\n          `}\\n\\n`;\n      } else {\n        computeFunctions +=\n          `${functionName}\\n` +\n          `{\\n` +\n          `    return czm_translateRelativeToEye(${name}3DHigh, ${name}3DLow);\\n` +\n          `}\\n\\n`;\n      }\n    } else {\n      // Use RTC\n      vertexShaderSource = vertexShaderSource.replace(\n        /in\\s+vec(?:3|4)\\s+position3DHigh;/g,\n        \"\",\n      );\n      vertexShaderSource = vertexShaderSource.replace(\n        /in\\s+vec(?:3|4)\\s+position3DLow;/g,\n        \"\",\n      );\n\n      forwardDecl += \"uniform mat4 u_modifiedModelView;\\n\";\n      attributes += \"in vec4 position;\\n\";\n\n      computeFunctions +=\n        `${functionName}\\n` +\n        `{\\n` +\n        `    return u_modifiedModelView * position;\\n` +\n        `}\\n\\n`;\n\n      vertexShaderSource = vertexShaderSource.replace(\n        /czm_modelViewRelativeToEye\\s+\\*\\s+/g,\n        \"\",\n      );\n      vertexShaderSource = vertexShaderSource.replace(\n        /czm_modelViewProjectionRelativeToEye/g,\n        \"czm_projection\",\n      );\n    }\n  }\n\n  return [forwardDecl, attributes, vertexShaderSource, computeFunctions].join(\n    \"\\n\",\n  );\n};\n\nPrimitive._appendShowToShader = function (primitive, vertexShaderSource) {\n  if (!defined(primitive._batchTableAttributeIndices.show)) {\n    return vertexShaderSource;\n  }\n\n  const renamedVS = ShaderSource.replaceMain(\n    vertexShaderSource,\n    \"czm_non_show_main\",\n  );\n  const showMain =\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    czm_non_show_main(); \\n\" +\n    \"    gl_Position *= czm_batchTable_show(batchId); \\n\" +\n    \"}\";\n\n  return `${renamedVS}\\n${showMain}`;\n};\n\nPrimitive._updateColorAttribute = function (\n  primitive,\n  vertexShaderSource,\n  isDepthFail,\n) {\n  // some appearances have a color attribute for per vertex color.\n  // only remove if color is a per instance attribute.\n  if (\n    !defined(primitive._batchTableAttributeIndices.color) &&\n    !defined(primitive._batchTableAttributeIndices.depthFailColor)\n  ) {\n    return vertexShaderSource;\n  }\n\n  if (vertexShaderSource.search(/in\\s+vec4\\s+color;/g) === -1) {\n    return vertexShaderSource;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    isDepthFail &&\n    !defined(primitive._batchTableAttributeIndices.depthFailColor)\n  ) {\n    throw new DeveloperError(\n      \"A depthFailColor per-instance attribute is required when using a depth fail appearance that uses a color attribute.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let modifiedVS = vertexShaderSource;\n  modifiedVS = modifiedVS.replace(/in\\s+vec4\\s+color;/g, \"\");\n  if (!isDepthFail) {\n    modifiedVS = modifiedVS.replace(\n      /(\\b)color(\\b)/g,\n      \"$1czm_batchTable_color(batchId)$2\",\n    );\n  } else {\n    modifiedVS = modifiedVS.replace(\n      /(\\b)color(\\b)/g,\n      \"$1czm_batchTable_depthFailColor(batchId)$2\",\n    );\n  }\n  return modifiedVS;\n};\n\nfunction appendPickToVertexShader(source) {\n  const renamedVS = ShaderSource.replaceMain(source, \"czm_non_pick_main\");\n  const pickMain =\n    \"out vec4 v_pickColor; \\n\" +\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    czm_non_pick_main(); \\n\" +\n    \"    v_pickColor = czm_batchTable_pickColor(batchId); \\n\" +\n    \"}\";\n\n  return `${renamedVS}\\n${pickMain}`;\n}\n\nfunction appendPickToFragmentShader(source) {\n  return `in vec4 v_pickColor;\\n${source}`;\n}\n\nPrimitive._updatePickColorAttribute = function (source) {\n  let vsPick = source.replace(/in\\s+vec4\\s+pickColor;/g, \"\");\n  vsPick = vsPick.replace(\n    /(\\b)pickColor(\\b)/g,\n    \"$1czm_batchTable_pickColor(batchId)$2\",\n  );\n  return vsPick;\n};\n\nPrimitive._appendOffsetToShader = function (primitive, vertexShaderSource) {\n  if (!defined(primitive._batchTableAttributeIndices.offset)) {\n    return vertexShaderSource;\n  }\n\n  let attr = \"in float batchId;\\n\";\n  attr += \"in float applyOffset;\";\n  let modifiedShader = vertexShaderSource.replace(\n    /in\\s+float\\s+batchId;/g,\n    attr,\n  );\n\n  let str = \"vec4 $1 = czm_computePosition();\\n\";\n  str += \"    if (czm_sceneMode == czm_sceneMode3D)\\n\";\n  str += \"    {\\n\";\n  str +=\n    \"        $1 = $1 + vec4(czm_batchTable_offset(batchId) * applyOffset, 0.0);\";\n  str += \"    }\\n\";\n  str += \"    else\\n\";\n  str += \"    {\\n\";\n  str +=\n    \"        $1 = $1 + vec4(czm_batchTable_offset2D(batchId) * applyOffset, 0.0);\";\n  str += \"    }\\n\";\n  modifiedShader = modifiedShader.replace(\n    /vec4\\s+([A-Za-z0-9_]+)\\s+=\\s+czm_computePosition\\(\\);/g,\n    str,\n  );\n  return modifiedShader;\n};\n\nPrimitive._appendDistanceDisplayConditionToShader = function (\n  primitive,\n  vertexShaderSource,\n  scene3DOnly,\n) {\n  if (\n    !defined(primitive._batchTableAttributeIndices.distanceDisplayCondition)\n  ) {\n    return vertexShaderSource;\n  }\n\n  const renamedVS = ShaderSource.replaceMain(\n    vertexShaderSource,\n    \"czm_non_distanceDisplayCondition_main\",\n  );\n  let distanceDisplayConditionMain =\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    czm_non_distanceDisplayCondition_main(); \\n\" +\n    \"    vec2 distanceDisplayCondition = czm_batchTable_distanceDisplayCondition(batchId);\\n\" +\n    \"    vec3 boundingSphereCenter3DHigh = czm_batchTable_boundingSphereCenter3DHigh(batchId);\\n\" +\n    \"    vec3 boundingSphereCenter3DLow = czm_batchTable_boundingSphereCenter3DLow(batchId);\\n\" +\n    \"    float boundingSphereRadius = czm_batchTable_boundingSphereRadius(batchId);\\n\";\n\n  if (!scene3DOnly) {\n    distanceDisplayConditionMain +=\n      \"    vec3 boundingSphereCenter2DHigh = czm_batchTable_boundingSphereCenter2DHigh(batchId);\\n\" +\n      \"    vec3 boundingSphereCenter2DLow = czm_batchTable_boundingSphereCenter2DLow(batchId);\\n\" +\n      \"    vec4 centerRTE;\\n\" +\n      \"    if (czm_morphTime == 1.0)\\n\" +\n      \"    {\\n\" +\n      \"        centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);\\n\" +\n      \"    }\\n\" +\n      \"    else if (czm_morphTime == 0.0)\\n\" +\n      \"    {\\n\" +\n      \"        centerRTE = czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy);\\n\" +\n      \"    }\\n\" +\n      \"    else\\n\" +\n      \"    {\\n\" +\n      \"        centerRTE = czm_columbusViewMorph(\\n\" +\n      \"                czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy),\\n\" +\n      \"                czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow),\\n\" +\n      \"                czm_morphTime);\\n\" +\n      \"    }\\n\";\n  } else {\n    distanceDisplayConditionMain +=\n      \"    vec4 centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);\\n\";\n  }\n\n  distanceDisplayConditionMain +=\n    \"    float radiusSq = boundingSphereRadius * boundingSphereRadius; \\n\" +\n    \"    float distanceSq; \\n\" +\n    \"    if (czm_sceneMode == czm_sceneMode2D) \\n\" +\n    \"    { \\n\" +\n    \"        distanceSq = czm_eyeHeight2D.y - radiusSq; \\n\" +\n    \"    } \\n\" +\n    \"    else \\n\" +\n    \"    { \\n\" +\n    \"        distanceSq = dot(centerRTE.xyz, centerRTE.xyz) - radiusSq; \\n\" +\n    \"    } \\n\" +\n    \"    distanceSq = max(distanceSq, 0.0); \\n\" +\n    \"    float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x; \\n\" +\n    \"    float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y; \\n\" +\n    \"    float show = (distanceSq >= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; \\n\" +\n    \"    gl_Position *= show; \\n\" +\n    \"}\";\n  return `${renamedVS}\\n${distanceDisplayConditionMain}`;\n};\n\nfunction modifyForEncodedNormals(primitive, vertexShaderSource) {\n  if (!primitive.compressVertices) {\n    return vertexShaderSource;\n  }\n\n  const containsNormal =\n    vertexShaderSource.search(/in\\s+vec3\\s+normal;/g) !== -1;\n  const containsSt = vertexShaderSource.search(/in\\s+vec2\\s+st;/g) !== -1;\n  if (!containsNormal && !containsSt) {\n    return vertexShaderSource;\n  }\n\n  const containsTangent =\n    vertexShaderSource.search(/in\\s+vec3\\s+tangent;/g) !== -1;\n  const containsBitangent =\n    vertexShaderSource.search(/in\\s+vec3\\s+bitangent;/g) !== -1;\n\n  let numComponents = containsSt && containsNormal ? 2.0 : 1.0;\n  numComponents += containsTangent || containsBitangent ? 1 : 0;\n\n  const type = numComponents > 1 ? `vec${numComponents}` : \"float\";\n\n  const attributeName = \"compressedAttributes\";\n  const attributeDecl = `in ${type} ${attributeName};`;\n\n  let globalDecl = \"\";\n  let decode = \"\";\n\n  if (containsSt) {\n    globalDecl += \"vec2 st;\\n\";\n    const stComponent =\n      numComponents > 1 ? `${attributeName}.x` : attributeName;\n    decode += `    st = czm_decompressTextureCoordinates(${stComponent});\\n`;\n  }\n\n  if (containsNormal && containsTangent && containsBitangent) {\n    globalDecl += \"vec3 normal;\\n\" + \"vec3 tangent;\\n\" + \"vec3 bitangent;\\n\";\n    decode += `    czm_octDecode(${attributeName}.${\n      containsSt ? \"yz\" : \"xy\"\n    }, normal, tangent, bitangent);\\n`;\n  } else {\n    if (containsNormal) {\n      globalDecl += \"vec3 normal;\\n\";\n      decode += `    normal = czm_octDecode(${attributeName}${\n        numComponents > 1 ? `.${containsSt ? \"y\" : \"x\"}` : \"\"\n      });\\n`;\n    }\n\n    if (containsTangent) {\n      globalDecl += \"vec3 tangent;\\n\";\n      decode += `    tangent = czm_octDecode(${attributeName}.${\n        containsSt && containsNormal ? \"z\" : \"y\"\n      });\\n`;\n    }\n\n    if (containsBitangent) {\n      globalDecl += \"vec3 bitangent;\\n\";\n      decode += `    bitangent = czm_octDecode(${attributeName}.${\n        containsSt && containsNormal ? \"z\" : \"y\"\n      });\\n`;\n    }\n  }\n\n  let modifiedVS = vertexShaderSource;\n  modifiedVS = modifiedVS.replace(/in\\s+vec3\\s+normal;/g, \"\");\n  modifiedVS = modifiedVS.replace(/in\\s+vec2\\s+st;/g, \"\");\n  modifiedVS = modifiedVS.replace(/in\\s+vec3\\s+tangent;/g, \"\");\n  modifiedVS = modifiedVS.replace(/in\\s+vec3\\s+bitangent;/g, \"\");\n  modifiedVS = ShaderSource.replaceMain(modifiedVS, \"czm_non_compressed_main\");\n  const compressedMain =\n    `${\"void main() \\n\" + \"{ \\n\"}${decode}    czm_non_compressed_main(); \\n` +\n    `}`;\n\n  return [attributeDecl, globalDecl, modifiedVS, compressedMain].join(\"\\n\");\n}\n\nfunction depthClampVS(vertexShaderSource) {\n  let modifiedVS = ShaderSource.replaceMain(\n    vertexShaderSource,\n    \"czm_non_depth_clamp_main\",\n  );\n  modifiedVS +=\n    \"void main() {\\n\" +\n    \"    czm_non_depth_clamp_main();\\n\" +\n    \"    gl_Position = czm_depthClamp(gl_Position);\" +\n    \"}\\n\";\n  return modifiedVS;\n}\n\nfunction depthClampFS(fragmentShaderSource) {\n  let modifiedFS = ShaderSource.replaceMain(\n    fragmentShaderSource,\n    \"czm_non_depth_clamp_main\",\n  );\n  modifiedFS +=\n    \"void main() {\\n\" +\n    \"    czm_non_depth_clamp_main();\\n\" +\n    \"    #if defined(LOG_DEPTH)\\n\" +\n    \"        czm_writeLogDepth();\\n\" +\n    \"    #else\\n\" +\n    \"        czm_writeDepthClamp();\\n\" +\n    \"    #endif\\n\" +\n    \"}\\n\";\n  return modifiedFS;\n}\n\nfunction validateShaderMatching(shaderProgram, attributeLocations) {\n  // For a VAO and shader program to be compatible, the VAO must have\n  // all active attribute in the shader program.  The VAO may have\n  // extra attributes with the only concern being a potential\n  // performance hit due to extra memory bandwidth and cache pollution.\n  // The shader source could have extra attributes that are not used,\n  // but there is no guarantee they will be optimized out.\n  //\n  // Here, we validate that the VAO has all attributes required\n  // to match the shader program.\n  const shaderAttributes = shaderProgram.vertexAttributes;\n\n  //>>includeStart('debug', pragmas.debug);\n  for (const name in shaderAttributes) {\n    if (shaderAttributes.hasOwnProperty(name)) {\n      if (!defined(attributeLocations[name])) {\n        throw new DeveloperError(\n          `Appearance/Geometry mismatch.  The appearance requires vertex shader attribute input '${name}', which was not computed as part of the Geometry.  Use the appearance's vertexFormat property when constructing the geometry.`,\n        );\n      }\n    }\n  }\n  //>>includeEnd('debug');\n}\n\nfunction getUniformFunction(uniforms, name) {\n  return function () {\n    return uniforms[name];\n  };\n}\n\nconst numberOfCreationWorkers = Math.max(\n  FeatureDetection.hardwareConcurrency - 1,\n  1,\n);\nlet createGeometryTaskProcessors;\nconst combineGeometryTaskProcessor = new TaskProcessor(\"combineGeometry\");\n\nfunction loadAsynchronous(primitive, frameState) {\n  let instances;\n  let geometry;\n  let i;\n  let j;\n\n  const instanceIds = primitive._instanceIds;\n\n  if (primitive._state === PrimitiveState.READY) {\n    instances = Array.isArray(primitive.geometryInstances)\n      ? primitive.geometryInstances\n      : [primitive.geometryInstances];\n    const length = (primitive._numberOfInstances = instances.length);\n\n    const promises = [];\n    let subTasks = [];\n    for (i = 0; i < length; ++i) {\n      geometry = instances[i].geometry;\n      instanceIds.push(instances[i].id);\n\n      //>>includeStart('debug', pragmas.debug);\n      if (\n        (defined(geometry._workerName) && defined(geometry._workerPath)) ||\n        (!defined(geometry._workerName) && !defined(geometry._workerPath))\n      ) {\n        throw new DeveloperError(\n          \"Must define either _workerName or _workerPath for asynchronous geometry.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      subTasks.push({\n        moduleName: geometry._workerName,\n        modulePath: geometry._workerPath,\n        geometry: geometry,\n      });\n    }\n\n    if (!defined(createGeometryTaskProcessors)) {\n      createGeometryTaskProcessors = new Array(numberOfCreationWorkers);\n      for (i = 0; i < numberOfCreationWorkers; i++) {\n        createGeometryTaskProcessors[i] = new TaskProcessor(\"createGeometry\");\n      }\n    }\n\n    let subTask;\n    subTasks = subdivideArray(subTasks, numberOfCreationWorkers);\n\n    for (i = 0; i < subTasks.length; i++) {\n      let packedLength = 0;\n      const workerSubTasks = subTasks[i];\n      const workerSubTasksLength = workerSubTasks.length;\n      for (j = 0; j < workerSubTasksLength; ++j) {\n        subTask = workerSubTasks[j];\n        geometry = subTask.geometry;\n        if (defined(geometry.constructor.pack)) {\n          subTask.offset = packedLength;\n          packedLength +=\n            geometry.constructor.packedLength ?? geometry.packedLength;\n        }\n      }\n\n      let subTaskTransferableObjects;\n\n      if (packedLength > 0) {\n        const array = new Float64Array(packedLength);\n        subTaskTransferableObjects = [array.buffer];\n\n        for (j = 0; j < workerSubTasksLength; ++j) {\n          subTask = workerSubTasks[j];\n          geometry = subTask.geometry;\n          if (defined(geometry.constructor.pack)) {\n            geometry.constructor.pack(geometry, array, subTask.offset);\n            subTask.geometry = array;\n          }\n        }\n      }\n\n      promises.push(\n        createGeometryTaskProcessors[i].scheduleTask(\n          {\n            subTasks: subTasks[i],\n          },\n          subTaskTransferableObjects,\n        ),\n      );\n    }\n\n    primitive._state = PrimitiveState.CREATING;\n\n    Promise.all(promises)\n      .then(function (results) {\n        primitive._createGeometryResults = results;\n        primitive._state = PrimitiveState.CREATED;\n      })\n      .catch(function (error) {\n        setReady(primitive, frameState, PrimitiveState.FAILED, error);\n      });\n  } else if (primitive._state === PrimitiveState.CREATED) {\n    const transferableObjects = [];\n    instances = Array.isArray(primitive.geometryInstances)\n      ? primitive.geometryInstances\n      : [primitive.geometryInstances];\n\n    const scene3DOnly = frameState.scene3DOnly;\n    const projection = frameState.mapProjection;\n\n    const promise = combineGeometryTaskProcessor.scheduleTask(\n      PrimitivePipeline.packCombineGeometryParameters(\n        {\n          createGeometryResults: primitive._createGeometryResults,\n          instances: instances,\n          ellipsoid: projection.ellipsoid,\n          projection: projection,\n          elementIndexUintSupported: frameState.context.elementIndexUint,\n          scene3DOnly: scene3DOnly,\n          vertexCacheOptimize: primitive.vertexCacheOptimize,\n          compressVertices: primitive.compressVertices,\n          modelMatrix: primitive.modelMatrix,\n          createPickOffsets: primitive._createPickOffsets,\n        },\n        transferableObjects,\n      ),\n      transferableObjects,\n    );\n\n    primitive._createGeometryResults = undefined;\n    primitive._state = PrimitiveState.COMBINING;\n\n    Promise.resolve(promise)\n      .then(function (packedResult) {\n        const result =\n          PrimitivePipeline.unpackCombineGeometryResults(packedResult);\n        primitive._geometries = result.geometries;\n        primitive._attributeLocations = result.attributeLocations;\n        primitive.modelMatrix = Matrix4.clone(\n          result.modelMatrix,\n          primitive.modelMatrix,\n        );\n        primitive._pickOffsets = result.pickOffsets;\n        primitive._offsetInstanceExtend = result.offsetInstanceExtend;\n        primitive._instanceBoundingSpheres = result.boundingSpheres;\n        primitive._instanceBoundingSpheresCV = result.boundingSpheresCV;\n\n        if (\n          defined(primitive._geometries) &&\n          primitive._geometries.length > 0\n        ) {\n          primitive._recomputeBoundingSpheres = true;\n          primitive._state = PrimitiveState.COMBINED;\n        } else {\n          setReady(primitive, frameState, PrimitiveState.FAILED, undefined);\n        }\n      })\n      .catch(function (error) {\n        setReady(primitive, frameState, PrimitiveState.FAILED, error);\n      });\n  }\n}\n\nfunction loadSynchronous(primitive, frameState) {\n  const instances = Array.isArray(primitive.geometryInstances)\n    ? primitive.geometryInstances\n    : [primitive.geometryInstances];\n  const length = (primitive._numberOfInstances = instances.length);\n  const clonedInstances = new Array(length);\n  const instanceIds = primitive._instanceIds;\n\n  let instance;\n  let i;\n\n  let geometryIndex = 0;\n  for (i = 0; i < length; i++) {\n    instance = instances[i];\n    const geometry = instance.geometry;\n\n    let createdGeometry;\n    if (defined(geometry.attributes) && defined(geometry.primitiveType)) {\n      createdGeometry = cloneGeometry(geometry);\n    } else {\n      createdGeometry = geometry.constructor.createGeometry(geometry);\n    }\n\n    clonedInstances[geometryIndex++] = cloneInstance(instance, createdGeometry);\n    instanceIds.push(instance.id);\n  }\n\n  clonedInstances.length = geometryIndex;\n\n  const scene3DOnly = frameState.scene3DOnly;\n  const projection = frameState.mapProjection;\n\n  const result = PrimitivePipeline.combineGeometry({\n    instances: clonedInstances,\n    ellipsoid: projection.ellipsoid,\n    projection: projection,\n    elementIndexUintSupported: frameState.context.elementIndexUint,\n    scene3DOnly: scene3DOnly,\n    vertexCacheOptimize: primitive.vertexCacheOptimize,\n    compressVertices: primitive.compressVertices,\n    modelMatrix: primitive.modelMatrix,\n    createPickOffsets: primitive._createPickOffsets,\n  });\n\n  primitive._geometries = result.geometries;\n  primitive._attributeLocations = result.attributeLocations;\n  primitive.modelMatrix = Matrix4.clone(\n    result.modelMatrix,\n    primitive.modelMatrix,\n  );\n  primitive._pickOffsets = result.pickOffsets;\n  primitive._offsetInstanceExtend = result.offsetInstanceExtend;\n  primitive._instanceBoundingSpheres = result.boundingSpheres;\n  primitive._instanceBoundingSpheresCV = result.boundingSpheresCV;\n\n  if (defined(primitive._geometries) && primitive._geometries.length > 0) {\n    primitive._recomputeBoundingSpheres = true;\n    primitive._state = PrimitiveState.COMBINED;\n  } else {\n    setReady(primitive, frameState, PrimitiveState.FAILED, undefined);\n  }\n}\n\nfunction recomputeBoundingSpheres(primitive, frameState) {\n  const offsetIndex = primitive._batchTableAttributeIndices.offset;\n  if (!primitive._recomputeBoundingSpheres || !defined(offsetIndex)) {\n    primitive._recomputeBoundingSpheres = false;\n    return;\n  }\n\n  let i;\n  const offsetInstanceExtend = primitive._offsetInstanceExtend;\n  const boundingSpheres = primitive._instanceBoundingSpheres;\n  const length = boundingSpheres.length;\n  let newBoundingSpheres = primitive._tempBoundingSpheres;\n  if (!defined(newBoundingSpheres)) {\n    newBoundingSpheres = new Array(length);\n    for (i = 0; i < length; i++) {\n      newBoundingSpheres[i] = new BoundingSphere();\n    }\n    primitive._tempBoundingSpheres = newBoundingSpheres;\n  }\n  for (i = 0; i < length; ++i) {\n    let newBS = newBoundingSpheres[i];\n    const offset = primitive._batchTable.getBatchedAttribute(\n      i,\n      offsetIndex,\n      new Cartesian3(),\n    );\n    newBS = boundingSpheres[i].clone(newBS);\n    transformBoundingSphere(newBS, offset, offsetInstanceExtend[i]);\n  }\n  const combinedBS = [];\n  const combinedWestBS = [];\n  const combinedEastBS = [];\n\n  for (i = 0; i < length; ++i) {\n    const bs = newBoundingSpheres[i];\n\n    const minX = bs.center.x - bs.radius;\n    if (\n      minX > 0 ||\n      BoundingSphere.intersectPlane(bs, Plane.ORIGIN_ZX_PLANE) !==\n        Intersect.INTERSECTING\n    ) {\n      combinedBS.push(bs);\n    } else {\n      combinedWestBS.push(bs);\n      combinedEastBS.push(bs);\n    }\n  }\n\n  let resultBS1 = combinedBS[0];\n  let resultBS2 = combinedEastBS[0];\n  let resultBS3 = combinedWestBS[0];\n\n  for (i = 1; i < combinedBS.length; i++) {\n    resultBS1 = BoundingSphere.union(resultBS1, combinedBS[i]);\n  }\n  for (i = 1; i < combinedEastBS.length; i++) {\n    resultBS2 = BoundingSphere.union(resultBS2, combinedEastBS[i]);\n  }\n  for (i = 1; i < combinedWestBS.length; i++) {\n    resultBS3 = BoundingSphere.union(resultBS3, combinedWestBS[i]);\n  }\n  const result = [];\n  if (defined(resultBS1)) {\n    result.push(resultBS1);\n  }\n  if (defined(resultBS2)) {\n    result.push(resultBS2);\n  }\n  if (defined(resultBS3)) {\n    result.push(resultBS3);\n  }\n\n  for (i = 0; i < result.length; i++) {\n    const boundingSphere = result[i].clone(primitive._boundingSpheres[i]);\n    primitive._boundingSpheres[i] = boundingSphere;\n    primitive._boundingSphereCV[i] = BoundingSphere.projectTo2D(\n      boundingSphere,\n      frameState.mapProjection,\n      primitive._boundingSphereCV[i],\n    );\n  }\n\n  Primitive._updateBoundingVolumes(\n    primitive,\n    frameState,\n    primitive.modelMatrix,\n    true,\n  );\n  primitive._recomputeBoundingSpheres = false;\n}\n\nconst scratchBoundingSphereCenterEncoded = new EncodedCartesian3();\nconst scratchBoundingSphereCartographic = new Cartographic();\nconst scratchBoundingSphereCenter2D = new Cartesian3();\nconst scratchBoundingSphere = new BoundingSphere();\n\nfunction updateBatchTableBoundingSpheres(primitive, frameState) {\n  const hasDistanceDisplayCondition = defined(\n    primitive._batchTableAttributeIndices.distanceDisplayCondition,\n  );\n  if (\n    !hasDistanceDisplayCondition ||\n    primitive._batchTableBoundingSpheresUpdated\n  ) {\n    return;\n  }\n\n  const indices = primitive._batchTableBoundingSphereAttributeIndices;\n  const center3DHighIndex = indices.center3DHigh;\n  const center3DLowIndex = indices.center3DLow;\n  const center2DHighIndex = indices.center2DHigh;\n  const center2DLowIndex = indices.center2DLow;\n  const radiusIndex = indices.radius;\n\n  const projection = frameState.mapProjection;\n  const ellipsoid = projection.ellipsoid;\n\n  const batchTable = primitive._batchTable;\n  const boundingSpheres = primitive._instanceBoundingSpheres;\n  const length = boundingSpheres.length;\n\n  for (let i = 0; i < length; ++i) {\n    let boundingSphere = boundingSpheres[i];\n    if (!defined(boundingSphere)) {\n      continue;\n    }\n\n    const modelMatrix = primitive.modelMatrix;\n    if (defined(modelMatrix)) {\n      boundingSphere = BoundingSphere.transform(\n        boundingSphere,\n        modelMatrix,\n        scratchBoundingSphere,\n      );\n    }\n\n    const center = boundingSphere.center;\n    const radius = boundingSphere.radius;\n\n    let encodedCenter = EncodedCartesian3.fromCartesian(\n      center,\n      scratchBoundingSphereCenterEncoded,\n    );\n    batchTable.setBatchedAttribute(i, center3DHighIndex, encodedCenter.high);\n    batchTable.setBatchedAttribute(i, center3DLowIndex, encodedCenter.low);\n\n    if (!frameState.scene3DOnly) {\n      const cartographic = ellipsoid.cartesianToCartographic(\n        center,\n        scratchBoundingSphereCartographic,\n      );\n      const center2D = projection.project(\n        cartographic,\n        scratchBoundingSphereCenter2D,\n      );\n      encodedCenter = EncodedCartesian3.fromCartesian(\n        center2D,\n        scratchBoundingSphereCenterEncoded,\n      );\n      batchTable.setBatchedAttribute(i, center2DHighIndex, encodedCenter.high);\n      batchTable.setBatchedAttribute(i, center2DLowIndex, encodedCenter.low);\n    }\n\n    batchTable.setBatchedAttribute(i, radiusIndex, radius);\n  }\n\n  primitive._batchTableBoundingSpheresUpdated = true;\n}\n\nconst offsetScratchCartesian = new Cartesian3();\nconst offsetCenterScratch = new Cartesian3();\nfunction updateBatchTableOffsets(primitive, frameState) {\n  const hasOffset = defined(primitive._batchTableAttributeIndices.offset);\n  if (\n    !hasOffset ||\n    primitive._batchTableOffsetsUpdated ||\n    frameState.scene3DOnly\n  ) {\n    return;\n  }\n\n  const index2D = primitive._batchTableOffsetAttribute2DIndex;\n\n  const projection = frameState.mapProjection;\n  const ellipsoid = projection.ellipsoid;\n\n  const batchTable = primitive._batchTable;\n  const boundingSpheres = primitive._instanceBoundingSpheres;\n  const length = boundingSpheres.length;\n\n  for (let i = 0; i < length; ++i) {\n    let boundingSphere = boundingSpheres[i];\n    if (!defined(boundingSphere)) {\n      continue;\n    }\n    const offset = batchTable.getBatchedAttribute(\n      i,\n      primitive._batchTableAttributeIndices.offset,\n    );\n    if (Cartesian3.equals(offset, Cartesian3.ZERO)) {\n      batchTable.setBatchedAttribute(i, index2D, Cartesian3.ZERO);\n      continue;\n    }\n\n    const modelMatrix = primitive.modelMatrix;\n    if (defined(modelMatrix)) {\n      boundingSphere = BoundingSphere.transform(\n        boundingSphere,\n        modelMatrix,\n        scratchBoundingSphere,\n      );\n    }\n\n    let center = boundingSphere.center;\n    center = ellipsoid.scaleToGeodeticSurface(center, offsetCenterScratch);\n    let cartographic = ellipsoid.cartesianToCartographic(\n      center,\n      scratchBoundingSphereCartographic,\n    );\n    const center2D = projection.project(\n      cartographic,\n      scratchBoundingSphereCenter2D,\n    );\n\n    const newPoint = Cartesian3.add(offset, center, offsetScratchCartesian);\n    cartographic = ellipsoid.cartesianToCartographic(newPoint, cartographic);\n\n    const newPointProjected = projection.project(\n      cartographic,\n      offsetScratchCartesian,\n    );\n\n    const newVector = Cartesian3.subtract(\n      newPointProjected,\n      center2D,\n      offsetScratchCartesian,\n    );\n\n    const x = newVector.x;\n    newVector.x = newVector.z;\n    newVector.z = newVector.y;\n    newVector.y = x;\n\n    batchTable.setBatchedAttribute(i, index2D, newVector);\n  }\n\n  primitive._batchTableOffsetsUpdated = true;\n}\n\nfunction createVertexArray(primitive, frameState) {\n  const attributeLocations = primitive._attributeLocations;\n  const geometries = primitive._geometries;\n  const scene3DOnly = frameState.scene3DOnly;\n  const context = frameState.context;\n\n  const va = [];\n  const length = geometries.length;\n  for (let i = 0; i < length; ++i) {\n    const geometry = geometries[i];\n\n    va.push(\n      VertexArray.fromGeometry({\n        context: context,\n        geometry: geometry,\n        attributeLocations: attributeLocations,\n        bufferUsage: BufferUsage.STATIC_DRAW,\n        interleave: primitive._interleave,\n      }),\n    );\n\n    if (defined(primitive._createBoundingVolumeFunction)) {\n      primitive._createBoundingVolumeFunction(frameState, geometry);\n    } else {\n      primitive._boundingSpheres.push(\n        BoundingSphere.clone(geometry.boundingSphere),\n      );\n      primitive._boundingSphereWC.push(new BoundingSphere());\n\n      if (!scene3DOnly) {\n        const center = geometry.boundingSphereCV.center;\n        const x = center.x;\n        const y = center.y;\n        const z = center.z;\n        center.x = z;\n        center.y = x;\n        center.z = y;\n\n        primitive._boundingSphereCV.push(\n          BoundingSphere.clone(geometry.boundingSphereCV),\n        );\n        primitive._boundingSphere2D.push(new BoundingSphere());\n        primitive._boundingSphereMorph.push(new BoundingSphere());\n      }\n    }\n  }\n\n  primitive._va = va;\n  primitive._primitiveType = geometries[0].primitiveType;\n\n  if (primitive.releaseGeometryInstances) {\n    primitive.geometryInstances = undefined;\n  }\n\n  primitive._geometries = undefined;\n  setReady(primitive, frameState, PrimitiveState.COMPLETE, undefined);\n}\n\nfunction createRenderStates(primitive, context, appearance, twoPasses) {\n  let renderState = appearance.getRenderState();\n  let rs;\n\n  if (twoPasses) {\n    rs = clone(renderState, false);\n    rs.cull = {\n      enabled: true,\n      face: CullFace.BACK,\n    };\n    primitive._frontFaceRS = RenderState.fromCache(rs);\n\n    rs.cull.face = CullFace.FRONT;\n    primitive._backFaceRS = RenderState.fromCache(rs);\n  } else {\n    primitive._frontFaceRS = RenderState.fromCache(renderState);\n    primitive._backFaceRS = primitive._frontFaceRS;\n  }\n\n  rs = clone(renderState, false);\n  if (defined(primitive._depthFailAppearance)) {\n    rs.depthTest.enabled = false;\n  }\n\n  if (defined(primitive._depthFailAppearance)) {\n    renderState = primitive._depthFailAppearance.getRenderState();\n    rs = clone(renderState, false);\n    rs.depthTest.func = DepthFunction.GREATER;\n    if (twoPasses) {\n      rs.cull = {\n        enabled: true,\n        face: CullFace.BACK,\n      };\n      primitive._frontFaceDepthFailRS = RenderState.fromCache(rs);\n\n      rs.cull.face = CullFace.FRONT;\n      primitive._backFaceDepthFailRS = RenderState.fromCache(rs);\n    } else {\n      primitive._frontFaceDepthFailRS = RenderState.fromCache(rs);\n      primitive._backFaceDepthFailRS = primitive._frontFaceRS;\n    }\n  }\n}\n\nfunction createShaderProgram(primitive, frameState, appearance) {\n  const context = frameState.context;\n\n  const attributeLocations = primitive._attributeLocations;\n\n  let vs = primitive._batchTable.getVertexShaderCallback()(\n    appearance.vertexShaderSource,\n  );\n  vs = Primitive._appendOffsetToShader(primitive, vs);\n  vs = Primitive._appendShowToShader(primitive, vs);\n  vs = Primitive._appendDistanceDisplayConditionToShader(\n    primitive,\n    vs,\n    frameState.scene3DOnly,\n  );\n  vs = appendPickToVertexShader(vs);\n  vs = Primitive._updateColorAttribute(primitive, vs, false);\n  vs = modifyForEncodedNormals(primitive, vs);\n  vs = Primitive._modifyShaderPosition(primitive, vs, frameState.scene3DOnly);\n  let fs = appearance.getFragmentShaderSource();\n  fs = appendPickToFragmentShader(fs);\n\n  primitive._sp = ShaderProgram.replaceCache({\n    context: context,\n    shaderProgram: primitive._sp,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n  validateShaderMatching(primitive._sp, attributeLocations);\n\n  if (defined(primitive._depthFailAppearance)) {\n    vs = primitive._batchTable.getVertexShaderCallback()(\n      primitive._depthFailAppearance.vertexShaderSource,\n    );\n    vs = Primitive._appendShowToShader(primitive, vs);\n    vs = Primitive._appendDistanceDisplayConditionToShader(\n      primitive,\n      vs,\n      frameState.scene3DOnly,\n    );\n    vs = appendPickToVertexShader(vs);\n    vs = Primitive._updateColorAttribute(primitive, vs, true);\n    vs = modifyForEncodedNormals(primitive, vs);\n    vs = Primitive._modifyShaderPosition(primitive, vs, frameState.scene3DOnly);\n    vs = depthClampVS(vs);\n\n    fs = primitive._depthFailAppearance.getFragmentShaderSource();\n    fs = appendPickToFragmentShader(fs);\n    fs = depthClampFS(fs);\n\n    primitive._spDepthFail = ShaderProgram.replaceCache({\n      context: context,\n      shaderProgram: primitive._spDepthFail,\n      vertexShaderSource: vs,\n      fragmentShaderSource: fs,\n      attributeLocations: attributeLocations,\n    });\n    validateShaderMatching(primitive._spDepthFail, attributeLocations);\n  }\n}\n\nconst modifiedModelViewScratch = new Matrix4();\nconst rtcScratch = new Cartesian3();\n\nfunction getUniforms(primitive, appearance, material, frameState) {\n  // Create uniform map by combining uniforms from the appearance and material if either have uniforms.\n  const materialUniformMap = defined(material) ? material._uniforms : undefined;\n  const appearanceUniformMap = {};\n  const appearanceUniforms = appearance.uniforms;\n  if (defined(appearanceUniforms)) {\n    // Convert to uniform map of functions for the renderer\n    for (const name in appearanceUniforms) {\n      if (appearanceUniforms.hasOwnProperty(name)) {\n        //>>includeStart('debug', pragmas.debug);\n        if (defined(materialUniformMap) && defined(materialUniformMap[name])) {\n          // Later, we could rename uniforms behind-the-scenes if needed.\n          throw new DeveloperError(\n            `Appearance and material have a uniform with the same name: ${name}`,\n          );\n        }\n        //>>includeEnd('debug');\n\n        appearanceUniformMap[name] = getUniformFunction(\n          appearanceUniforms,\n          name,\n        );\n      }\n    }\n  }\n  let uniforms = combine(appearanceUniformMap, materialUniformMap);\n  uniforms = primitive._batchTable.getUniformMapCallback()(uniforms);\n\n  if (defined(primitive.rtcCenter)) {\n    uniforms.u_modifiedModelView = function () {\n      const viewMatrix = frameState.context.uniformState.view;\n      Matrix4.multiply(\n        viewMatrix,\n        primitive._modelMatrix,\n        modifiedModelViewScratch,\n      );\n      Matrix4.multiplyByPoint(\n        modifiedModelViewScratch,\n        primitive.rtcCenter,\n        rtcScratch,\n      );\n      Matrix4.setTranslation(\n        modifiedModelViewScratch,\n        rtcScratch,\n        modifiedModelViewScratch,\n      );\n      return modifiedModelViewScratch;\n    };\n  }\n\n  return uniforms;\n}\n\nfunction createCommands(\n  primitive,\n  appearance,\n  material,\n  translucent,\n  twoPasses,\n  colorCommands,\n  pickCommands,\n  frameState,\n) {\n  const uniforms = getUniforms(primitive, appearance, material, frameState);\n\n  let depthFailUniforms;\n  if (defined(primitive._depthFailAppearance)) {\n    depthFailUniforms = getUniforms(\n      primitive,\n      primitive._depthFailAppearance,\n      primitive._depthFailAppearance.material,\n      frameState,\n    );\n  }\n\n  const pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE;\n\n  let multiplier = twoPasses ? 2 : 1;\n  multiplier *= defined(primitive._depthFailAppearance) ? 2 : 1;\n  colorCommands.length = primitive._va.length * multiplier;\n\n  const length = colorCommands.length;\n  let vaIndex = 0;\n  for (let i = 0; i < length; ++i) {\n    let colorCommand;\n\n    if (twoPasses) {\n      colorCommand = colorCommands[i];\n      if (!defined(colorCommand)) {\n        colorCommand = colorCommands[i] = new DrawCommand({\n          owner: primitive,\n          primitiveType: primitive._primitiveType,\n        });\n      }\n      colorCommand.vertexArray = primitive._va[vaIndex];\n      colorCommand.renderState = primitive._backFaceRS;\n      colorCommand.shaderProgram = primitive._sp;\n      colorCommand.uniformMap = uniforms;\n      colorCommand.pass = pass;\n\n      ++i;\n    }\n\n    colorCommand = colorCommands[i];\n    if (!defined(colorCommand)) {\n      colorCommand = colorCommands[i] = new DrawCommand({\n        owner: primitive,\n        primitiveType: primitive._primitiveType,\n      });\n    }\n    colorCommand.vertexArray = primitive._va[vaIndex];\n    colorCommand.renderState = primitive._frontFaceRS;\n    colorCommand.shaderProgram = primitive._sp;\n    colorCommand.uniformMap = uniforms;\n    colorCommand.pass = pass;\n\n    if (defined(primitive._depthFailAppearance)) {\n      if (twoPasses) {\n        ++i;\n\n        colorCommand = colorCommands[i];\n        if (!defined(colorCommand)) {\n          colorCommand = colorCommands[i] = new DrawCommand({\n            owner: primitive,\n            primitiveType: primitive._primitiveType,\n          });\n        }\n        colorCommand.vertexArray = primitive._va[vaIndex];\n        colorCommand.renderState = primitive._backFaceDepthFailRS;\n        colorCommand.shaderProgram = primitive._spDepthFail;\n        colorCommand.uniformMap = depthFailUniforms;\n        colorCommand.pass = pass;\n      }\n\n      ++i;\n\n      colorCommand = colorCommands[i];\n      if (!defined(colorCommand)) {\n        colorCommand = colorCommands[i] = new DrawCommand({\n          owner: primitive,\n          primitiveType: primitive._primitiveType,\n        });\n      }\n      colorCommand.vertexArray = primitive._va[vaIndex];\n      colorCommand.renderState = primitive._frontFaceDepthFailRS;\n      colorCommand.shaderProgram = primitive._spDepthFail;\n      colorCommand.uniformMap = depthFailUniforms;\n      colorCommand.pass = pass;\n    }\n\n    ++vaIndex;\n  }\n}\n\nPrimitive._updateBoundingVolumes = function (\n  primitive,\n  frameState,\n  modelMatrix,\n  forceUpdate,\n) {\n  let i;\n  let length;\n  let boundingSphere;\n\n  if (forceUpdate || !Matrix4.equals(modelMatrix, primitive._modelMatrix)) {\n    Matrix4.clone(modelMatrix, primitive._modelMatrix);\n    length = primitive._boundingSpheres.length;\n    for (i = 0; i < length; ++i) {\n      boundingSphere = primitive._boundingSpheres[i];\n      if (defined(boundingSphere)) {\n        primitive._boundingSphereWC[i] = BoundingSphere.transform(\n          boundingSphere,\n          modelMatrix,\n          primitive._boundingSphereWC[i],\n        );\n        if (!frameState.scene3DOnly) {\n          primitive._boundingSphere2D[i] = BoundingSphere.clone(\n            primitive._boundingSphereCV[i],\n            primitive._boundingSphere2D[i],\n          );\n          primitive._boundingSphereMorph[i] = BoundingSphere.union(\n            primitive._boundingSphereWC[i],\n            primitive._boundingSphereCV[i],\n          );\n        }\n      }\n    }\n  }\n\n  // Update bounding volumes for primitives that are sized in pixels.\n  // The pixel size in meters varies based on the distance from the camera.\n  const pixelSize = primitive.appearance.pixelSize;\n  if (defined(pixelSize)) {\n    length = primitive._boundingSpheres.length;\n    for (i = 0; i < length; ++i) {\n      boundingSphere = primitive._boundingSpheres[i];\n      const boundingSphereWC = primitive._boundingSphereWC[i];\n      const pixelSizeInMeters = frameState.camera.getPixelSize(\n        boundingSphere,\n        frameState.context.drawingBufferWidth,\n        frameState.context.drawingBufferHeight,\n      );\n      const sizeInMeters = pixelSizeInMeters * pixelSize;\n      boundingSphereWC.radius = boundingSphere.radius + sizeInMeters;\n    }\n  }\n};\n\nfunction updateAndQueueCommands(\n  primitive,\n  frameState,\n  colorCommands,\n  pickCommands,\n  modelMatrix,\n  cull,\n  debugShowBoundingVolume,\n  twoPasses,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    frameState.mode !== SceneMode.SCENE3D &&\n    !Matrix4.equals(modelMatrix, Matrix4.IDENTITY)\n  ) {\n    throw new DeveloperError(\n      \"Primitive.modelMatrix is only supported in 3D mode.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  Primitive._updateBoundingVolumes(primitive, frameState, modelMatrix);\n\n  let boundingSpheres;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    boundingSpheres = primitive._boundingSphereWC;\n  } else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {\n    boundingSpheres = primitive._boundingSphereCV;\n  } else if (\n    frameState.mode === SceneMode.SCENE2D &&\n    defined(primitive._boundingSphere2D)\n  ) {\n    boundingSpheres = primitive._boundingSphere2D;\n  } else if (defined(primitive._boundingSphereMorph)) {\n    boundingSpheres = primitive._boundingSphereMorph;\n  }\n\n  const commandList = frameState.commandList;\n  const passes = frameState.passes;\n  if (passes.render || passes.pick) {\n    const allowPicking = primitive.allowPicking;\n    const castShadows = ShadowMode.castShadows(primitive.shadows);\n    const receiveShadows = ShadowMode.receiveShadows(primitive.shadows);\n    const colorLength = colorCommands.length;\n\n    let factor = twoPasses ? 2 : 1;\n    factor *= defined(primitive._depthFailAppearance) ? 2 : 1;\n\n    for (let j = 0; j < colorLength; ++j) {\n      const sphereIndex = Math.floor(j / factor);\n      const colorCommand = colorCommands[j];\n      colorCommand.modelMatrix = modelMatrix;\n      colorCommand.boundingVolume = boundingSpheres[sphereIndex];\n      colorCommand.cull = cull;\n      colorCommand.debugShowBoundingVolume = debugShowBoundingVolume;\n      colorCommand.castShadows = castShadows;\n      colorCommand.receiveShadows = receiveShadows;\n\n      if (allowPicking) {\n        colorCommand.pickId = \"v_pickColor\";\n      } else {\n        colorCommand.pickId = undefined;\n      }\n\n      commandList.push(colorCommand);\n    }\n  }\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n * @exception {DeveloperError} Appearance and material have a uniform with the same name.\n * @exception {DeveloperError} Primitive.modelMatrix is only supported in 3D mode.\n * @exception {RuntimeError} Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.\n */\nPrimitive.prototype.update = function (frameState) {\n  if (\n    (!defined(this.geometryInstances) && this._va.length === 0) ||\n    (defined(this.geometryInstances) &&\n      Array.isArray(this.geometryInstances) &&\n      this.geometryInstances.length === 0) ||\n    !defined(this.appearance) ||\n    (frameState.mode !== SceneMode.SCENE3D && frameState.scene3DOnly) ||\n    (!frameState.passes.render && !frameState.passes.pick)\n  ) {\n    return;\n  }\n\n  if (defined(this._error)) {\n    throw this._error;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(this.rtcCenter) && !frameState.scene3DOnly) {\n    throw new DeveloperError(\n      \"RTC rendering is only available for 3D only scenes.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (this._state === PrimitiveState.FAILED) {\n    return;\n  }\n\n  const context = frameState.context;\n  if (!defined(this._batchTable)) {\n    createBatchTable(this, context);\n  }\n  if (this._batchTable.attributes.length > 0) {\n    if (ContextLimits.maximumVertexTextureImageUnits === 0) {\n      throw new RuntimeError(\n        \"Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.\",\n      );\n    }\n    this._batchTable.update(frameState);\n  }\n\n  if (\n    this._state !== PrimitiveState.COMPLETE &&\n    this._state !== PrimitiveState.COMBINED\n  ) {\n    if (this.asynchronous) {\n      loadAsynchronous(this, frameState);\n    } else {\n      loadSynchronous(this, frameState);\n    }\n  }\n\n  if (this._state === PrimitiveState.COMBINED) {\n    updateBatchTableBoundingSpheres(this, frameState);\n    updateBatchTableOffsets(this, frameState);\n    createVertexArray(this, frameState);\n  }\n\n  if (!this.show || this._state !== PrimitiveState.COMPLETE) {\n    return;\n  }\n\n  if (!this._batchTableOffsetsUpdated) {\n    updateBatchTableOffsets(this, frameState);\n  }\n  if (this._recomputeBoundingSpheres) {\n    recomputeBoundingSpheres(this, frameState);\n  }\n\n  // Create or recreate render state and shader program if appearance/material changed\n  const appearance = this.appearance;\n  const material = appearance.material;\n  let createRS = false;\n  let createSP = false;\n\n  if (this._appearance !== appearance) {\n    this._appearance = appearance;\n    this._material = material;\n    createRS = true;\n    createSP = true;\n  } else if (this._material !== material) {\n    this._material = material;\n    createSP = true;\n  }\n\n  const depthFailAppearance = this.depthFailAppearance;\n  const depthFailMaterial = defined(depthFailAppearance)\n    ? depthFailAppearance.material\n    : undefined;\n\n  if (this._depthFailAppearance !== depthFailAppearance) {\n    this._depthFailAppearance = depthFailAppearance;\n    this._depthFailMaterial = depthFailMaterial;\n    createRS = true;\n    createSP = true;\n  } else if (this._depthFailMaterial !== depthFailMaterial) {\n    this._depthFailMaterial = depthFailMaterial;\n    createSP = true;\n  }\n\n  const translucent = this._appearance.isTranslucent();\n  if (this._translucent !== translucent) {\n    this._translucent = translucent;\n    createRS = true;\n  }\n\n  if (defined(this._material)) {\n    this._material.update(context);\n  }\n\n  const twoPasses = appearance.closed && translucent;\n\n  if (createRS) {\n    const rsFunc = this._createRenderStatesFunction ?? createRenderStates;\n    rsFunc(this, context, appearance, twoPasses);\n  }\n\n  if (createSP) {\n    const spFunc = this._createShaderProgramFunction ?? createShaderProgram;\n    spFunc(this, frameState, appearance);\n  }\n\n  if (createRS || createSP) {\n    const commandFunc = this._createCommandsFunction ?? createCommands;\n    commandFunc(\n      this,\n      appearance,\n      material,\n      translucent,\n      twoPasses,\n      this._colorCommands,\n      this._pickCommands,\n      frameState,\n    );\n  }\n\n  const updateAndQueueCommandsFunc =\n    this._updateAndQueueCommandsFunction ?? updateAndQueueCommands;\n  updateAndQueueCommandsFunc(\n    this,\n    frameState,\n    this._colorCommands,\n    this._pickCommands,\n    this.modelMatrix,\n    this.cull,\n    this.debugShowBoundingVolume,\n    twoPasses,\n  );\n};\n\nconst offsetBoundingSphereScratch1 = new BoundingSphere();\nconst offsetBoundingSphereScratch2 = new BoundingSphere();\nfunction transformBoundingSphere(boundingSphere, offset, offsetAttribute) {\n  if (offsetAttribute === GeometryOffsetAttribute.TOP) {\n    const origBS = BoundingSphere.clone(\n      boundingSphere,\n      offsetBoundingSphereScratch1,\n    );\n    const offsetBS = BoundingSphere.clone(\n      boundingSphere,\n      offsetBoundingSphereScratch2,\n    );\n    offsetBS.center = Cartesian3.add(offsetBS.center, offset, offsetBS.center);\n    boundingSphere = BoundingSphere.union(origBS, offsetBS, boundingSphere);\n  } else if (offsetAttribute === GeometryOffsetAttribute.ALL) {\n    boundingSphere.center = Cartesian3.add(\n      boundingSphere.center,\n      offset,\n      boundingSphere.center,\n    );\n  }\n\n  return boundingSphere;\n}\n\nfunction createGetFunction(batchTable, instanceIndex, attributeIndex) {\n  return function () {\n    const attributeValue = batchTable.getBatchedAttribute(\n      instanceIndex,\n      attributeIndex,\n    );\n    const attribute = batchTable.attributes[attributeIndex];\n    const componentsPerAttribute = attribute.componentsPerAttribute;\n    const value = ComponentDatatype.createTypedArray(\n      attribute.componentDatatype,\n      componentsPerAttribute,\n    );\n    if (defined(attributeValue.constructor.pack)) {\n      attributeValue.constructor.pack(attributeValue, value, 0);\n    } else {\n      value[0] = attributeValue;\n    }\n    return value;\n  };\n}\n\nfunction createSetFunction(\n  batchTable,\n  instanceIndex,\n  attributeIndex,\n  primitive,\n  name,\n) {\n  return function (value) {\n    //>>includeStart('debug', pragmas.debug);\n    if (\n      !defined(value) ||\n      !defined(value.length) ||\n      value.length < 1 ||\n      value.length > 4\n    ) {\n      throw new DeveloperError(\n        \"value must be and array with length between 1 and 4.\",\n      );\n    }\n    //>>includeEnd('debug');\n    const attributeValue = getAttributeValue(value);\n    batchTable.setBatchedAttribute(\n      instanceIndex,\n      attributeIndex,\n      attributeValue,\n    );\n    if (name === \"offset\") {\n      primitive._recomputeBoundingSpheres = true;\n      primitive._batchTableOffsetsUpdated = false;\n    }\n  };\n}\n\nconst offsetScratch = new Cartesian3();\n\nfunction createBoundingSphereProperties(primitive, properties, index) {\n  properties.boundingSphere = {\n    get: function () {\n      let boundingSphere = primitive._instanceBoundingSpheres[index];\n      if (defined(boundingSphere)) {\n        boundingSphere = boundingSphere.clone();\n        const modelMatrix = primitive.modelMatrix;\n        const offset = properties.offset;\n        if (defined(offset)) {\n          transformBoundingSphere(\n            boundingSphere,\n            Cartesian3.fromArray(offset.get(), 0, offsetScratch),\n            primitive._offsetInstanceExtend[index],\n          );\n        }\n        if (defined(modelMatrix)) {\n          boundingSphere = BoundingSphere.transform(\n            boundingSphere,\n            modelMatrix,\n          );\n        }\n      }\n\n      return boundingSphere;\n    },\n  };\n  properties.boundingSphereCV = {\n    get: function () {\n      return primitive._instanceBoundingSpheresCV[index];\n    },\n  };\n}\n\nfunction createPickIdProperty(primitive, properties, index) {\n  properties.pickId = {\n    get: function () {\n      return primitive._pickIds[index];\n    },\n  };\n}\n\n/**\n * Returns the modifiable per-instance attributes for a {@link GeometryInstance}.\n *\n * @param {*} id The id of the {@link GeometryInstance}.\n * @returns {object} The typed array in the attribute's format or undefined if the is no instance with id.\n *\n * @exception {DeveloperError} must call update before calling getGeometryInstanceAttributes.\n *\n * @example\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\n * attributes.color = Cesium.ColorGeometryInstanceAttribute.toValue(Cesium.Color.AQUA);\n * attributes.show = Cesium.ShowGeometryInstanceAttribute.toValue(true);\n * attributes.distanceDisplayCondition = Cesium.DistanceDisplayConditionGeometryInstanceAttribute.toValue(100.0, 10000.0);\n * attributes.offset = Cesium.OffsetGeometryInstanceAttribute.toValue(Cartesian3.IDENTITY);\n */\nPrimitive.prototype.getGeometryInstanceAttributes = function (id) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(id)) {\n    throw new DeveloperError(\"id is required\");\n  }\n  if (!defined(this._batchTable)) {\n    throw new DeveloperError(\n      \"must call update before calling getGeometryInstanceAttributes\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let attributes = this._perInstanceAttributeCache.get(id);\n  if (defined(attributes)) {\n    return attributes;\n  }\n\n  let index = -1;\n  const lastIndex = this._lastPerInstanceAttributeIndex;\n  const ids = this._instanceIds;\n  const length = ids.length;\n  for (let i = 0; i < length; ++i) {\n    const curIndex = (lastIndex + i) % length;\n    if (id === ids[curIndex]) {\n      index = curIndex;\n      break;\n    }\n  }\n\n  if (index === -1) {\n    return undefined;\n  }\n\n  const batchTable = this._batchTable;\n  const perInstanceAttributeIndices = this._batchTableAttributeIndices;\n  attributes = {};\n  const properties = {};\n\n  for (const name in perInstanceAttributeIndices) {\n    if (perInstanceAttributeIndices.hasOwnProperty(name)) {\n      const attributeIndex = perInstanceAttributeIndices[name];\n      properties[name] = {\n        get: createGetFunction(batchTable, index, attributeIndex),\n        set: createSetFunction(batchTable, index, attributeIndex, this, name),\n      };\n    }\n  }\n\n  createBoundingSphereProperties(this, properties, index);\n  createPickIdProperty(this, properties, index);\n  Object.defineProperties(attributes, properties);\n\n  this._lastPerInstanceAttributeIndex = index;\n  this._perInstanceAttributeCache.set(id, attributes);\n  return attributes;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Primitive#destroy\n */\nPrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * e = e && e.destroy();\n *\n * @see Primitive#isDestroyed\n */\nPrimitive.prototype.destroy = function () {\n  let length;\n  let i;\n\n  this._sp = this._sp && this._sp.destroy();\n  this._spDepthFail = this._spDepthFail && this._spDepthFail.destroy();\n\n  const va = this._va;\n  length = va.length;\n  for (i = 0; i < length; ++i) {\n    va[i].destroy();\n  }\n  this._va = undefined;\n\n  const pickIds = this._pickIds;\n  length = pickIds.length;\n  for (i = 0; i < length; ++i) {\n    pickIds[i].destroy();\n  }\n  this._pickIds = undefined;\n\n  this._batchTable = this._batchTable && this._batchTable.destroy();\n\n  //These objects may be fairly large and reference other large objects (like Entities)\n  //We explicitly set them to undefined here so that the memory can be freed\n  //even if a reference to the destroyed Primitive has been kept around.\n  this._instanceIds = undefined;\n  this._perInstanceAttributeCache = undefined;\n  this._attributeLocations = undefined;\n\n  return destroyObject(this);\n};\n\nfunction setReady(primitive, frameState, state, error) {\n  primitive._error = error;\n  primitive._state = state;\n\n  frameState.afterRender.push(function () {\n    primitive._ready =\n      primitive._state === PrimitiveState.COMPLETE ||\n      primitive._state === PrimitiveState.FAILED;\n\n    // Returning 'true' here will ensure that another rendering pass is\n    // triggered after the primitive actually became ready, to make sure\n    // that it is in fact rendered even in \"request render mode\"\n    return true;\n  });\n}\nexport default Primitive;\n","import createGuid from \"../Core/createGuid.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\n\n/**\n * A collection of primitives.  This is most often used with {@link Scene#primitives},\n * but <code>PrimitiveCollection</code> is also a primitive itself so collections can\n * be added to collections forming a hierarchy.\n *\n * @alias PrimitiveCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.show=true] Determines if the primitives in the collection will be shown.\n * @param {boolean} [options.destroyPrimitives=true] Determines if primitives in the collection are destroyed when they are removed.\n * @privateParam {boolean} [options.countReferences=false] Specifies whether adding and removing primitives from this collection alters their reference counts. If so, adding a\n * primitive to this collection increments its reference count. Removing the primitive decrements its reference count and - if the count reaches zero **and** destroyPrimitives is true - destroys the primitive.\n * This permits primitives to be shared between multiple collections.\n *\n * @example\n * const billboards = new Cesium.BillboardCollection();\n * const labels = new Cesium.LabelCollection();\n *\n * const collection = new Cesium.PrimitiveCollection();\n * collection.add(billboards);\n *\n * scene.primitives.add(collection);  // Add collection\n * scene.primitives.add(labels);      // Add regular primitive\n */\nfunction PrimitiveCollection(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._primitives = [];\n  this._guid = createGuid();\n  this._primitiveAdded = new Event();\n  this._primitiveRemoved = new Event();\n\n  // Used by the OrderedGroundPrimitiveCollection\n  this._zIndex = undefined;\n\n  /**\n   * Determines if primitives in this collection will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * Determines if primitives in the collection are destroyed when they are removed by\n   * {@link PrimitiveCollection#destroy} or  {@link PrimitiveCollection#remove} or implicitly\n   * by {@link PrimitiveCollection#removeAll}.\n   *\n   * @type {boolean}\n   * @default true\n   *\n   * @example\n   * // Example 1. Primitives are destroyed by default.\n   * const primitives = new Cesium.PrimitiveCollection();\n   * const labels = primitives.add(new Cesium.LabelCollection());\n   * primitives = primitives.destroy();\n   * const b = labels.isDestroyed(); // true\n   *\n   * @example\n   * // Example 2. Do not destroy primitives in a collection.\n   * const primitives = new Cesium.PrimitiveCollection();\n   * primitives.destroyPrimitives = false;\n   * const labels = primitives.add(new Cesium.LabelCollection());\n   * primitives = primitives.destroy();\n   * const b = labels.isDestroyed(); // false\n   * labels = labels.destroy();    // explicitly destroy\n   */\n  this.destroyPrimitives = options.destroyPrimitives ?? true;\n\n  this._countReferences = options.countReferences ?? false;\n}\n\nObject.defineProperties(PrimitiveCollection.prototype, {\n  /**\n   * Gets the number of primitives in the collection.\n   *\n   * @memberof PrimitiveCollection.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._primitives.length;\n    },\n  },\n\n  /**\n   * An event that is raised when a primitive is added to the collection.\n   * Event handlers are passed the primitive that was added.\n   * @memberof PrimitiveCollection.prototype\n   * @type {Event}\n   * @readonly\n   */\n  primitiveAdded: {\n    get: function () {\n      return this._primitiveAdded;\n    },\n  },\n\n  /**\n   * An event that is raised when a primitive is removed from the collection.\n   * Event handlers are passed the primitive that was removed.\n   * <p>\n   * Note: Depending on the destroyPrimitives constructor option, the primitive may already be destroyed.\n   * </p>\n   * @memberof PrimitiveCollection.prototype\n   * @type {Event}\n   * @readonly\n   */\n  primitiveRemoved: {\n    get: function () {\n      return this._primitiveRemoved;\n    },\n  },\n});\n\n/**\n * Adds a primitive to the collection.\n *\n * @param {object} primitive The primitive to add.\n * @param {number} [index] The index to add the layer at.  If omitted, the primitive will be added at the bottom of all existing primitives.\n * @returns {object} The primitive added to the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * const billboards = scene.primitives.add(new Cesium.BillboardCollection());\n */\nPrimitiveCollection.prototype.add = function (primitive, index) {\n  const hasIndex = defined(index);\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(primitive)) {\n    throw new DeveloperError(\"primitive is required.\");\n  }\n  if (hasIndex) {\n    if (index < 0) {\n      throw new DeveloperError(\"index must be greater than or equal to zero.\");\n    } else if (index > this._primitives.length) {\n      throw new DeveloperError(\n        \"index must be less than or equal to the number of primitives.\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  const external = (primitive._external = primitive._external || {});\n  const composites = (external._composites = external._composites || {});\n  composites[this._guid] = {\n    collection: this,\n  };\n\n  if (!hasIndex) {\n    this._primitives.push(primitive);\n  } else {\n    this._primitives.splice(index, 0, primitive);\n  }\n\n  if (this._countReferences) {\n    if (!defined(external._referenceCount)) {\n      external._referenceCount = 1;\n    } else {\n      ++external._referenceCount;\n    }\n  }\n\n  this._primitiveAdded.raiseEvent(primitive);\n\n  return primitive;\n};\n\n/**\n * Removes a primitive from the collection.\n *\n * @param {object} [primitive] The primitive to remove.\n * @returns {boolean} <code>true</code> if the primitive was removed; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * const billboards = scene.primitives.add(new Cesium.BillboardCollection());\n * scene.primitives.remove(billboards);  // Returns true\n *\n * @see PrimitiveCollection#destroyPrimitives\n */\nPrimitiveCollection.prototype.remove = function (primitive) {\n  // PERFORMANCE_IDEA:  We can obviously make this a lot faster.\n  if (this.contains(primitive)) {\n    const index = this._primitives.indexOf(primitive);\n    if (index !== -1) {\n      this._primitives.splice(index, 1);\n\n      delete primitive._external._composites[this._guid];\n      if (this._countReferences) {\n        primitive._external._referenceCount--;\n      }\n\n      if (\n        this.destroyPrimitives &&\n        (!this._countReferences || primitive._external._referenceCount <= 0)\n      ) {\n        primitive.destroy();\n      }\n\n      this._primitiveRemoved.raiseEvent(primitive);\n\n      return true;\n    }\n    // else ... this is not possible, I swear.\n  }\n\n  return false;\n};\n\n/**\n * Removes and destroys a primitive, regardless of destroyPrimitives or countReferences setting.\n * @private\n */\nPrimitiveCollection.prototype.removeAndDestroy = function (primitive) {\n  const removed = this.remove(primitive);\n  if (removed && !this.destroyPrimitives) {\n    primitive.destroy();\n  }\n  return removed;\n};\n\n/**\n * Removes all primitives in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#destroyPrimitives\n */\nPrimitiveCollection.prototype.removeAll = function () {\n  const primitives = this._primitives;\n  const length = primitives.length;\n  for (let i = 0; i < length; ++i) {\n    const primitive = primitives[i];\n    delete primitive._external._composites[this._guid];\n    if (this._countReferences) {\n      primitive._external._referenceCount--;\n    }\n\n    if (\n      this.destroyPrimitives &&\n      (!this._countReferences || primitive._external._referenceCount <= 0)\n    ) {\n      primitive.destroy();\n    }\n\n    this._primitiveRemoved.raiseEvent(primitive);\n  }\n  this._primitives = [];\n};\n\n/**\n * Determines if this collection contains a primitive.\n *\n * @param {object} [primitive] The primitive to check for.\n * @returns {boolean} <code>true</code> if the primitive is in the collection; <code>false</code> if the primitive is <code>undefined</code> or was not found in the collection.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#get\n */\nPrimitiveCollection.prototype.contains = function (primitive) {\n  return !!(\n    defined(primitive) &&\n    primitive._external &&\n    primitive._external._composites &&\n    primitive._external._composites[this._guid]\n  );\n};\n\nfunction getPrimitiveIndex(compositePrimitive, primitive) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!compositePrimitive.contains(primitive)) {\n    throw new DeveloperError(\"primitive is not in this collection.\");\n  }\n  //>>includeEnd('debug');\n\n  return compositePrimitive._primitives.indexOf(primitive);\n}\n\n/**\n * Raises a primitive \"up one\" in the collection.  If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive up one.\n *\n * @param {object} [primitive] The primitive to raise.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#raiseToTop\n * @see PrimitiveCollection#lower\n * @see PrimitiveCollection#lowerToBottom\n */\nPrimitiveCollection.prototype.raise = function (primitive) {\n  if (defined(primitive)) {\n    const index = getPrimitiveIndex(this, primitive);\n    const primitives = this._primitives;\n\n    if (index !== primitives.length - 1) {\n      const p = primitives[index];\n      primitives[index] = primitives[index + 1];\n      primitives[index + 1] = p;\n    }\n  }\n};\n\n/**\n * Raises a primitive to the \"top\" of the collection.  If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive to the top.\n *\n * @param {object} [primitive] The primitive to raise the top.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#raise\n * @see PrimitiveCollection#lower\n * @see PrimitiveCollection#lowerToBottom\n */\nPrimitiveCollection.prototype.raiseToTop = function (primitive) {\n  if (defined(primitive)) {\n    const index = getPrimitiveIndex(this, primitive);\n    const primitives = this._primitives;\n\n    if (index !== primitives.length - 1) {\n      // PERFORMANCE_IDEA:  Could be faster\n      primitives.splice(index, 1);\n      primitives.push(primitive);\n    }\n  }\n};\n\n/**\n * Lowers a primitive \"down one\" in the collection.  If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive down one.\n *\n * @param {object} [primitive] The primitive to lower.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#lowerToBottom\n * @see PrimitiveCollection#raise\n * @see PrimitiveCollection#raiseToTop\n */\nPrimitiveCollection.prototype.lower = function (primitive) {\n  if (defined(primitive)) {\n    const index = getPrimitiveIndex(this, primitive);\n    const primitives = this._primitives;\n\n    if (index !== 0) {\n      const p = primitives[index];\n      primitives[index] = primitives[index - 1];\n      primitives[index - 1] = p;\n    }\n  }\n};\n\n/**\n * Lowers a primitive to the \"bottom\" of the collection.  If all primitives in the collection are drawn\n * on the globe surface, this visually moves the primitive to the bottom.\n *\n * @param {object} [primitive] The primitive to lower to the bottom.\n *\n * @exception {DeveloperError} primitive is not in this collection.\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see PrimitiveCollection#lower\n * @see PrimitiveCollection#raise\n * @see PrimitiveCollection#raiseToTop\n */\nPrimitiveCollection.prototype.lowerToBottom = function (primitive) {\n  if (defined(primitive)) {\n    const index = getPrimitiveIndex(this, primitive);\n    const primitives = this._primitives;\n\n    if (index !== 0) {\n      // PERFORMANCE_IDEA:  Could be faster\n      primitives.splice(index, 1);\n      primitives.unshift(primitive);\n    }\n  }\n};\n\n/**\n * Returns the primitive in the collection at the specified index.\n *\n * @param {number} index The zero-based index of the primitive to return.\n * @returns {object} The primitive at the <code>index</code>.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * // Toggle the show property of every primitive in the collection.\n * const primitives = scene.primitives;\n * const length = primitives.length;\n * for (let i = 0; i < length; ++i) {\n *   const p = primitives.get(i);\n *   p.show = !p.show;\n * }\n *\n * @see PrimitiveCollection#length\n */\nPrimitiveCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._primitives[index];\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  const primitives = this._primitives;\n  // Using primitives.length in the loop is a temporary workaround\n  // to allow quadtree updates to add and remove primitives in\n  // update().  This will be changed to manage added and removed lists.\n  for (let i = 0; i < primitives.length; ++i) {\n    primitives[i].update(frameState);\n  }\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.prePassesUpdate = function (frameState) {\n  const primitives = this._primitives;\n  // Using primitives.length in the loop is a temporary workaround\n  // to allow quadtree updates to add and remove primitives in\n  // update().  This will be changed to manage added and removed lists.\n  for (let i = 0; i < primitives.length; ++i) {\n    const primitive = primitives[i];\n    if (defined(primitive.prePassesUpdate)) {\n      primitive.prePassesUpdate(frameState);\n    }\n  }\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.updateForPass = function (frameState, passState) {\n  const primitives = this._primitives;\n  // Using primitives.length in the loop is a temporary workaround\n  // to allow quadtree updates to add and remove primitives in\n  // update().  This will be changed to manage added and removed lists.\n  for (let i = 0; i < primitives.length; ++i) {\n    const primitive = primitives[i];\n    if (defined(primitive.updateForPass)) {\n      primitive.updateForPass(frameState, passState);\n    }\n  }\n};\n\n/**\n * @private\n */\nPrimitiveCollection.prototype.postPassesUpdate = function (frameState) {\n  const primitives = this._primitives;\n  // Using primitives.length in the loop is a temporary workaround\n  // to allow quadtree updates to add and remove primitives in\n  // update().  This will be changed to manage added and removed lists.\n  for (let i = 0; i < primitives.length; ++i) {\n    const primitive = primitives[i];\n    if (defined(primitive.postPassesUpdate)) {\n      primitive.postPassesUpdate(frameState);\n    }\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see PrimitiveCollection#destroy\n */\nPrimitiveCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by each primitive in this collection.  Explicitly destroying this\n * collection allows for deterministic release of WebGL resources, instead of relying on the garbage\n * collector to destroy this collection.\n * <br /><br />\n * Since destroying a collection destroys all the contained primitives, only destroy a collection\n * when you are sure no other code is still using any of the contained primitives.\n * <br /><br />\n * Once this collection is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * primitives = primitives && primitives.destroy();\n *\n * @see PrimitiveCollection#isDestroyed\n */\nPrimitiveCollection.prototype.destroy = function () {\n  this.removeAll();\n  return destroyObject(this);\n};\nexport default PrimitiveCollection;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport AttributeType from \"./AttributeType.js\";\nimport ModelComponents from \"./ModelComponents.js\";\nimport PrimitiveOutlineGenerator from \"./Model/PrimitiveOutlineGenerator.js\";\n\n/**\n * Simple struct for tracking whether an attribute will be loaded as a buffer\n * or typed array after post-processing.\n *\n * @alias PrimitiveLoadPlan.AttributeLoadPlan\n * @constructor\n *\n * @param {ModelComponents.Attribute} attribute The attribute to be updated\n *\n * @private\n */\nfunction AttributeLoadPlan(attribute) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"attribute\", attribute);\n  //>>includeEnd('debug');\n\n  /**\n   * The attribute to track.\n   *\n   * @type {ModelComponents.Attribute}\n   * @readonly\n   * @private\n   */\n  this.attribute = attribute;\n\n  /**\n   * Whether the attribute will be loaded as a GPU buffer by the time\n   * {@link PrimitiveLoadPlan#postProcess} is finished.\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.loadBuffer = false;\n\n  /**\n   * Whether the attribute will be loaded as a packed typed array by the time\n   * {@link PrimitiveLoadPlan#postProcess} is finished.\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.loadTypedArray = false;\n}\n\n/**\n * Simple struct for tracking whether an index buffer will be loaded as a buffer\n * or typed array after post-processing.\n *\n * @alias PrimitiveLoadPlan.IndicesLoadPlan\n * @constructor\n *\n * @param {ModelComponents.Indices} indices The indices to be updated\n *\n * @private\n */\nfunction IndicesLoadPlan(indices) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"indices\", indices);\n  //>>includeEnd('debug');\n\n  /**\n   * The indices to track.\n   *\n   * @type {ModelComponents.Indices}\n   * @readonly\n   * @private\n   */\n  this.indices = indices;\n\n  /**\n   * Whether the indices will be loaded as a GPU buffer by the time\n   * {@link PrimitiveLoadPlan#postProcess} is finished.\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.loadBuffer = false;\n\n  /**\n   * Whether the indices will be loaded as a typed array copy of the GPU\n   * buffer by the time {@link PrimitiveLoadPlan#postProcess} is finished.\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.loadTypedArray = false;\n}\n\n/**\n * Primitives may need post-processing steps after their attributes and indices\n * have loaded, such as generating outlines for the CESIUM_primitive_outline glTF\n * extension. This object tracks what indices and attributes need to be\n * post-processed.\n *\n * @alias PrimitiveLoadPlan\n * @constructor\n *\n * @param {ModelComponents.Primitive} primitive The primitive to track\n *\n * @private\n */\nfunction PrimitiveLoadPlan(primitive) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"primitive\", primitive);\n  //>>includeEnd('debug');\n\n  /**\n   * The primitive to track.\n   *\n   * @type {ModelComponents.Primitive}\n   * @readonly\n   * @private\n   */\n  this.primitive = primitive;\n\n  /**\n   * A flat list of attributes that need to be post-processed. This includes\n   * both regular attributes and morph target attributes.\n   *\n   * @type {PrimitiveLoadPlan.AttributeLoadPlan[]}\n   * @private\n   */\n  this.attributePlans = [];\n\n  /**\n   * Information about the triangle indices that need to be post-processed,\n   * if they exist.\n   *\n   * @type {PrimitiveLoadPlan.IndicesLoadPlan}\n   * @private\n   */\n  this.indicesPlan = undefined;\n\n  /**\n   * Set this true to indicate that the primitive has the\n   * CESIUM_primitive_outline extension and needs to be post-processed\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.needsOutlines = false;\n\n  /**\n   * The outline edge indices from the CESIUM_primitive_outline extension\n   *\n   * @type {number[]}\n   * @private\n   */\n  this.outlineIndices = undefined;\n\n  /**\n   * Set this true to indicate that the primitive has the\n   * KHR_gaussian_splatting and KHR_gaussian_splatting_compression_spz_2 extension and needs to be post-processed\n   *\n   * @type {boolean}\n   * @private\n   */\n  this.needsGaussianSplats = false;\n}\n\n/**\n * Apply post-processing steps that may modify geometry such as generating\n * outline coordinates. If no post-processing steps are needed, this function\n * is a no-op.\n *\n * @param {Context} context The context for generating buffers on the GPU\n */\nPrimitiveLoadPlan.prototype.postProcess = function (context) {\n  // Handle CESIUM_primitive_outline. This modifies indices and attributes and\n  // also generates a new attribute for the outline coordinates. These steps\n  // are synchronous.\n  if (this.needsOutlines) {\n    generateOutlines(this);\n    generateBuffers(this, context);\n  }\n\n  if (this.needsGaussianSplats) {\n    setupGaussianSplatBuffers(this, context);\n  }\n};\n\nfunction generateOutlines(loadPlan) {\n  const primitive = loadPlan.primitive;\n  const indices = primitive.indices;\n\n  const vertexCount = primitive.attributes[0].count;\n\n  const generator = new PrimitiveOutlineGenerator({\n    triangleIndices: indices.typedArray,\n    outlineIndices: loadPlan.outlineIndices,\n    originalVertexCount: vertexCount,\n  });\n\n  // The generator modifies/adds indices. In some uncommon cases it may have\n  // to upgrade to 16- or 32-bit indices so the datatype may change.\n  indices.typedArray = generator.updatedTriangleIndices;\n  indices.indexDatatype = IndexDatatype.fromTypedArray(indices.typedArray);\n\n  // The outline generator creates a new attribute for the outline coordinates\n  // that are used with a lookup texture.\n  const outlineCoordinates = makeOutlineCoordinatesAttribute(\n    generator.outlineCoordinates,\n  );\n  const outlineCoordinatesPlan = new AttributeLoadPlan(outlineCoordinates);\n  outlineCoordinatesPlan.loadBuffer = true;\n  outlineCoordinatesPlan.loadTypedArray = false;\n  loadPlan.attributePlans.push(outlineCoordinatesPlan);\n  primitive.outlineCoordinates = outlineCoordinatesPlan.attribute;\n\n  // Some vertices may be copied due to the addition of the new attribute\n  // which may have multiple values at a vertex depending on the face\n  const attributePlans = loadPlan.attributePlans;\n  const attributesLength = loadPlan.attributePlans.length;\n  for (let i = 0; i < attributesLength; i++) {\n    const attribute = attributePlans[i].attribute;\n    attribute.typedArray = generator.updateAttribute(attribute.typedArray);\n  }\n}\n\nfunction makeOutlineCoordinatesAttribute(outlineCoordinatesTypedArray) {\n  const attribute = new ModelComponents.Attribute();\n  attribute.name = \"_OUTLINE_COORDINATES\";\n  attribute.typedArray = outlineCoordinatesTypedArray;\n  attribute.componentDatatype = ComponentDatatype.FLOAT;\n  attribute.type = AttributeType.VEC3;\n  attribute.normalized = false;\n  attribute.count = outlineCoordinatesTypedArray.length / 3;\n\n  return attribute;\n}\n\nfunction setupGaussianSplatBuffers(loadPlan, context) {\n  const attributePlans = loadPlan.attributePlans;\n  const attrLen = attributePlans.length;\n  for (let i = 0; i < attrLen; i++) {\n    const attributePlan = attributePlans[i];\n    attributePlan.loadBuffer = false;\n    attributePlan.loadTypedArray = true;\n  }\n}\n\nfunction generateBuffers(loadPlan, context) {\n  generateAttributeBuffers(loadPlan.attributePlans, context);\n\n  if (defined(loadPlan.indicesPlan)) {\n    generateIndexBuffers(loadPlan.indicesPlan, context);\n  }\n}\n\nfunction generateAttributeBuffers(attributePlans, context) {\n  const attributesLength = attributePlans.length;\n  for (let i = 0; i < attributesLength; i++) {\n    const attributePlan = attributePlans[i];\n    const attribute = attributePlan.attribute;\n    const typedArray = attribute.typedArray;\n\n    if (attributePlan.loadBuffer) {\n      const buffer = Buffer.createVertexBuffer({\n        typedArray: typedArray,\n        context: context,\n        usage: BufferUsage.STATIC_DRAW,\n      });\n      buffer.vertexArrayDestroyable = false;\n      attribute.buffer = buffer;\n    }\n\n    if (!attributePlan.loadTypedArray) {\n      attribute.typedArray = undefined;\n    }\n  }\n}\n\nfunction generateIndexBuffers(indicesPlan, context) {\n  const indices = indicesPlan.indices;\n  if (indicesPlan.loadBuffer) {\n    const buffer = Buffer.createIndexBuffer({\n      typedArray: indices.typedArray,\n      context: context,\n      usage: BufferUsage.STATIC_DRAW,\n      indexDatatype: indices.indexDatatype,\n    });\n    indices.buffer = buffer;\n    buffer.vertexArrayDestroyable = false;\n  }\n\n  if (!indicesPlan.loadTypedArray) {\n    indices.typedArray = undefined;\n  }\n}\n\nPrimitiveLoadPlan.AttributeLoadPlan = AttributeLoadPlan;\nPrimitiveLoadPlan.IndicesLoadPlan = IndicesLoadPlan;\nexport default PrimitiveLoadPlan;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport Geometry from \"../Core/Geometry.js\";\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\nimport GeometryAttributes from \"../Core/GeometryAttributes.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\n\nfunction transformToWorldCoordinates(\n  instances,\n  primitiveModelMatrix,\n  scene3DOnly,\n) {\n  let toWorld = !scene3DOnly;\n  const length = instances.length;\n  let i;\n\n  if (!toWorld && length > 1) {\n    const modelMatrix = instances[0].modelMatrix;\n\n    for (i = 1; i < length; ++i) {\n      if (!Matrix4.equals(modelMatrix, instances[i].modelMatrix)) {\n        toWorld = true;\n        break;\n      }\n    }\n  }\n\n  if (toWorld) {\n    for (i = 0; i < length; ++i) {\n      if (defined(instances[i].geometry)) {\n        GeometryPipeline.transformToWorldCoordinates(instances[i]);\n      }\n    }\n  } else {\n    // Leave geometry in local coordinate system; auto update model-matrix.\n    Matrix4.multiplyTransformation(\n      primitiveModelMatrix,\n      instances[0].modelMatrix,\n      primitiveModelMatrix,\n    );\n  }\n}\n\nfunction addGeometryBatchId(geometry, batchId) {\n  const attributes = geometry.attributes;\n  const positionAttr = attributes.position;\n  const numberOfComponents =\n    positionAttr.values.length / positionAttr.componentsPerAttribute;\n\n  attributes.batchId = new GeometryAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 1,\n    values: new Float32Array(numberOfComponents),\n  });\n\n  const values = attributes.batchId.values;\n  for (let j = 0; j < numberOfComponents; ++j) {\n    values[j] = batchId;\n  }\n}\n\nfunction addBatchIds(instances) {\n  const length = instances.length;\n\n  for (let i = 0; i < length; ++i) {\n    const instance = instances[i];\n    if (defined(instance.geometry)) {\n      addGeometryBatchId(instance.geometry, i);\n    } else if (\n      defined(instance.westHemisphereGeometry) &&\n      defined(instance.eastHemisphereGeometry)\n    ) {\n      addGeometryBatchId(instance.westHemisphereGeometry, i);\n      addGeometryBatchId(instance.eastHemisphereGeometry, i);\n    }\n  }\n}\n\nfunction geometryPipeline(parameters) {\n  const instances = parameters.instances;\n  const projection = parameters.projection;\n  const uintIndexSupport = parameters.elementIndexUintSupported;\n  const scene3DOnly = parameters.scene3DOnly;\n  const vertexCacheOptimize = parameters.vertexCacheOptimize;\n  const compressVertices = parameters.compressVertices;\n  const modelMatrix = parameters.modelMatrix;\n\n  let i;\n  let geometry;\n  let primitiveType;\n  let length = instances.length;\n\n  for (i = 0; i < length; ++i) {\n    if (defined(instances[i].geometry)) {\n      primitiveType = instances[i].geometry.primitiveType;\n      break;\n    }\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  for (i = 1; i < length; ++i) {\n    if (\n      defined(instances[i].geometry) &&\n      instances[i].geometry.primitiveType !== primitiveType\n    ) {\n      throw new DeveloperError(\n        \"All instance geometries must have the same primitiveType.\",\n      );\n    }\n  }\n  //>>includeEnd('debug');\n\n  // Unify to world coordinates before combining.\n  transformToWorldCoordinates(instances, modelMatrix, scene3DOnly);\n\n  // Clip to IDL\n  if (!scene3DOnly) {\n    for (i = 0; i < length; ++i) {\n      if (defined(instances[i].geometry)) {\n        GeometryPipeline.splitLongitude(instances[i]);\n      }\n    }\n  }\n\n  addBatchIds(instances);\n\n  // Optimize for vertex shader caches\n  if (vertexCacheOptimize) {\n    for (i = 0; i < length; ++i) {\n      const instance = instances[i];\n      if (defined(instance.geometry)) {\n        GeometryPipeline.reorderForPostVertexCache(instance.geometry);\n        GeometryPipeline.reorderForPreVertexCache(instance.geometry);\n      } else if (\n        defined(instance.westHemisphereGeometry) &&\n        defined(instance.eastHemisphereGeometry)\n      ) {\n        GeometryPipeline.reorderForPostVertexCache(\n          instance.westHemisphereGeometry,\n        );\n        GeometryPipeline.reorderForPreVertexCache(\n          instance.westHemisphereGeometry,\n        );\n\n        GeometryPipeline.reorderForPostVertexCache(\n          instance.eastHemisphereGeometry,\n        );\n        GeometryPipeline.reorderForPreVertexCache(\n          instance.eastHemisphereGeometry,\n        );\n      }\n    }\n  }\n\n  // Combine into single geometry for better rendering performance.\n  let geometries = GeometryPipeline.combineInstances(instances);\n\n  length = geometries.length;\n  for (i = 0; i < length; ++i) {\n    geometry = geometries[i];\n\n    // Split positions for GPU RTE\n    const attributes = geometry.attributes;\n    if (!scene3DOnly) {\n      for (const name in attributes) {\n        if (\n          attributes.hasOwnProperty(name) &&\n          attributes[name].componentDatatype === ComponentDatatype.DOUBLE\n        ) {\n          const name3D = `${name}3D`;\n          const name2D = `${name}2D`;\n\n          // Compute 2D positions\n          GeometryPipeline.projectTo2D(\n            geometry,\n            name,\n            name3D,\n            name2D,\n            projection,\n          );\n          if (defined(geometry.boundingSphere) && name === \"position\") {\n            geometry.boundingSphereCV = BoundingSphere.fromVertices(\n              geometry.attributes.position2D.values,\n            );\n          }\n\n          GeometryPipeline.encodeAttribute(\n            geometry,\n            name3D,\n            `${name3D}High`,\n            `${name3D}Low`,\n          );\n          GeometryPipeline.encodeAttribute(\n            geometry,\n            name2D,\n            `${name2D}High`,\n            `${name2D}Low`,\n          );\n        }\n      }\n    } else {\n      for (const name in attributes) {\n        if (\n          attributes.hasOwnProperty(name) &&\n          attributes[name].componentDatatype === ComponentDatatype.DOUBLE\n        ) {\n          GeometryPipeline.encodeAttribute(\n            geometry,\n            name,\n            `${name}3DHigh`,\n            `${name}3DLow`,\n          );\n        }\n      }\n    }\n\n    // oct encode and pack normals, compress texture coordinates\n    if (compressVertices) {\n      GeometryPipeline.compressVertices(geometry);\n    }\n  }\n\n  if (!uintIndexSupport) {\n    // Break into multiple geometries to fit within unsigned short indices if needed\n    let splitGeometries = [];\n    length = geometries.length;\n    for (i = 0; i < length; ++i) {\n      geometry = geometries[i];\n      splitGeometries = splitGeometries.concat(\n        GeometryPipeline.fitToUnsignedShortIndices(geometry),\n      );\n    }\n\n    geometries = splitGeometries;\n  }\n\n  return geometries;\n}\n\nfunction createPickOffsets(instances, geometryName, geometries, pickOffsets) {\n  let offset;\n  let indexCount;\n  let geometryIndex;\n\n  const offsetIndex = pickOffsets.length - 1;\n  if (offsetIndex >= 0) {\n    const pickOffset = pickOffsets[offsetIndex];\n    offset = pickOffset.offset + pickOffset.count;\n    geometryIndex = pickOffset.index;\n    indexCount = geometries[geometryIndex].indices.length;\n  } else {\n    offset = 0;\n    geometryIndex = 0;\n    indexCount = geometries[geometryIndex].indices.length;\n  }\n\n  const length = instances.length;\n  for (let i = 0; i < length; ++i) {\n    const instance = instances[i];\n    const geometry = instance[geometryName];\n    if (!defined(geometry)) {\n      continue;\n    }\n\n    const count = geometry.indices.length;\n\n    if (offset + count > indexCount) {\n      offset = 0;\n      indexCount = geometries[++geometryIndex].indices.length;\n    }\n\n    pickOffsets.push({\n      index: geometryIndex,\n      offset: offset,\n      count: count,\n    });\n    offset += count;\n  }\n}\n\nfunction createInstancePickOffsets(instances, geometries) {\n  const pickOffsets = [];\n  createPickOffsets(instances, \"geometry\", geometries, pickOffsets);\n  createPickOffsets(\n    instances,\n    \"westHemisphereGeometry\",\n    geometries,\n    pickOffsets,\n  );\n  createPickOffsets(\n    instances,\n    \"eastHemisphereGeometry\",\n    geometries,\n    pickOffsets,\n  );\n  return pickOffsets;\n}\n\n/**\n * @private\n */\nconst PrimitivePipeline = {};\n\n/**\n * @private\n */\nPrimitivePipeline.combineGeometry = function (parameters) {\n  let geometries;\n  let attributeLocations;\n  const instances = parameters.instances;\n  const length = instances.length;\n  let pickOffsets;\n\n  let offsetInstanceExtend;\n  let hasOffset = false;\n  if (length > 0) {\n    geometries = geometryPipeline(parameters);\n    if (geometries.length > 0) {\n      attributeLocations = GeometryPipeline.createAttributeLocations(\n        geometries[0],\n      );\n      if (parameters.createPickOffsets) {\n        pickOffsets = createInstancePickOffsets(instances, geometries);\n      }\n    }\n    if (\n      defined(instances[0].attributes) &&\n      defined(instances[0].attributes.offset)\n    ) {\n      offsetInstanceExtend = new Array(length);\n      hasOffset = true;\n    }\n  }\n\n  const boundingSpheres = new Array(length);\n  const boundingSpheresCV = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    const instance = instances[i];\n    const geometry = instance.geometry;\n    if (defined(geometry)) {\n      boundingSpheres[i] = geometry.boundingSphere;\n      boundingSpheresCV[i] = geometry.boundingSphereCV;\n      if (hasOffset) {\n        offsetInstanceExtend[i] = instance.geometry.offsetAttribute;\n      }\n    }\n\n    const eastHemisphereGeometry = instance.eastHemisphereGeometry;\n    const westHemisphereGeometry = instance.westHemisphereGeometry;\n    if (defined(eastHemisphereGeometry) && defined(westHemisphereGeometry)) {\n      if (\n        defined(eastHemisphereGeometry.boundingSphere) &&\n        defined(westHemisphereGeometry.boundingSphere)\n      ) {\n        boundingSpheres[i] = BoundingSphere.union(\n          eastHemisphereGeometry.boundingSphere,\n          westHemisphereGeometry.boundingSphere,\n        );\n      }\n      if (\n        defined(eastHemisphereGeometry.boundingSphereCV) &&\n        defined(westHemisphereGeometry.boundingSphereCV)\n      ) {\n        boundingSpheresCV[i] = BoundingSphere.union(\n          eastHemisphereGeometry.boundingSphereCV,\n          westHemisphereGeometry.boundingSphereCV,\n        );\n      }\n    }\n  }\n\n  return {\n    geometries: geometries,\n    modelMatrix: parameters.modelMatrix,\n    attributeLocations: attributeLocations,\n    pickOffsets: pickOffsets,\n    offsetInstanceExtend: offsetInstanceExtend,\n    boundingSpheres: boundingSpheres,\n    boundingSpheresCV: boundingSpheresCV,\n  };\n};\n\nfunction transferGeometry(geometry, transferableObjects) {\n  const attributes = geometry.attributes;\n  for (const name in attributes) {\n    if (attributes.hasOwnProperty(name)) {\n      const attribute = attributes[name];\n\n      if (defined(attribute) && defined(attribute.values)) {\n        transferableObjects.push(attribute.values.buffer);\n      }\n    }\n  }\n\n  if (defined(geometry.indices)) {\n    transferableObjects.push(geometry.indices.buffer);\n  }\n}\n\nfunction transferGeometries(geometries, transferableObjects) {\n  const length = geometries.length;\n  for (let i = 0; i < length; ++i) {\n    transferGeometry(geometries[i], transferableObjects);\n  }\n}\n\n// This function was created by simplifying packCreateGeometryResults into a count-only operation.\nfunction countCreateGeometryResults(items) {\n  let count = 1;\n  const length = items.length;\n  for (let i = 0; i < length; i++) {\n    const geometry = items[i];\n    ++count;\n\n    if (!defined(geometry)) {\n      continue;\n    }\n\n    const attributes = geometry.attributes;\n\n    count +=\n      7 +\n      2 * BoundingSphere.packedLength +\n      (defined(geometry.indices) ? geometry.indices.length : 0);\n\n    for (const property in attributes) {\n      if (\n        attributes.hasOwnProperty(property) &&\n        defined(attributes[property])\n      ) {\n        const attribute = attributes[property];\n        count += 5 + attribute.values.length;\n      }\n    }\n  }\n\n  return count;\n}\n\n/**\n * @private\n */\nPrimitivePipeline.packCreateGeometryResults = function (\n  items,\n  transferableObjects,\n) {\n  const packedData = new Float64Array(countCreateGeometryResults(items));\n  const stringTable = [];\n  const stringHash = {};\n\n  const length = items.length;\n  let count = 0;\n  packedData[count++] = length;\n  for (let i = 0; i < length; i++) {\n    const geometry = items[i];\n\n    const validGeometry = defined(geometry);\n    packedData[count++] = validGeometry ? 1.0 : 0.0;\n\n    if (!validGeometry) {\n      continue;\n    }\n\n    packedData[count++] = geometry.primitiveType;\n    packedData[count++] = geometry.geometryType;\n    packedData[count++] = geometry.offsetAttribute ?? -1;\n\n    const validBoundingSphere = defined(geometry.boundingSphere) ? 1.0 : 0.0;\n    packedData[count++] = validBoundingSphere;\n    if (validBoundingSphere) {\n      BoundingSphere.pack(geometry.boundingSphere, packedData, count);\n    }\n\n    count += BoundingSphere.packedLength;\n\n    const validBoundingSphereCV = defined(geometry.boundingSphereCV)\n      ? 1.0\n      : 0.0;\n    packedData[count++] = validBoundingSphereCV;\n    if (validBoundingSphereCV) {\n      BoundingSphere.pack(geometry.boundingSphereCV, packedData, count);\n    }\n\n    count += BoundingSphere.packedLength;\n\n    const attributes = geometry.attributes;\n    const attributesToWrite = [];\n    for (const property in attributes) {\n      if (\n        attributes.hasOwnProperty(property) &&\n        defined(attributes[property])\n      ) {\n        attributesToWrite.push(property);\n        if (!defined(stringHash[property])) {\n          stringHash[property] = stringTable.length;\n          stringTable.push(property);\n        }\n      }\n    }\n\n    packedData[count++] = attributesToWrite.length;\n    for (let q = 0; q < attributesToWrite.length; q++) {\n      const name = attributesToWrite[q];\n      const attribute = attributes[name];\n      packedData[count++] = stringHash[name];\n      packedData[count++] = attribute.componentDatatype;\n      packedData[count++] = attribute.componentsPerAttribute;\n      packedData[count++] = attribute.normalize ? 1 : 0;\n      packedData[count++] = attribute.values.length;\n      packedData.set(attribute.values, count);\n      count += attribute.values.length;\n    }\n\n    const indicesLength = defined(geometry.indices)\n      ? geometry.indices.length\n      : 0;\n    packedData[count++] = indicesLength;\n\n    if (indicesLength > 0) {\n      packedData.set(geometry.indices, count);\n      count += indicesLength;\n    }\n  }\n\n  transferableObjects.push(packedData.buffer);\n\n  return {\n    stringTable: stringTable,\n    packedData: packedData,\n  };\n};\n\n/**\n * @private\n */\nPrimitivePipeline.unpackCreateGeometryResults = function (\n  createGeometryResult,\n) {\n  const stringTable = createGeometryResult.stringTable;\n  const packedGeometry = createGeometryResult.packedData;\n\n  let i;\n  const result = new Array(packedGeometry[0]);\n  let resultIndex = 0;\n\n  let packedGeometryIndex = 1;\n  while (packedGeometryIndex < packedGeometry.length) {\n    const valid = packedGeometry[packedGeometryIndex++] === 1.0;\n    if (!valid) {\n      result[resultIndex++] = undefined;\n      continue;\n    }\n\n    const primitiveType = packedGeometry[packedGeometryIndex++];\n    const geometryType = packedGeometry[packedGeometryIndex++];\n    let offsetAttribute = packedGeometry[packedGeometryIndex++];\n    if (offsetAttribute === -1) {\n      offsetAttribute = undefined;\n    }\n\n    let boundingSphere;\n    let boundingSphereCV;\n\n    const validBoundingSphere = packedGeometry[packedGeometryIndex++] === 1.0;\n    if (validBoundingSphere) {\n      boundingSphere = BoundingSphere.unpack(\n        packedGeometry,\n        packedGeometryIndex,\n      );\n    }\n\n    packedGeometryIndex += BoundingSphere.packedLength;\n\n    const validBoundingSphereCV = packedGeometry[packedGeometryIndex++] === 1.0;\n    if (validBoundingSphereCV) {\n      boundingSphereCV = BoundingSphere.unpack(\n        packedGeometry,\n        packedGeometryIndex,\n      );\n    }\n\n    packedGeometryIndex += BoundingSphere.packedLength;\n\n    let length;\n    let values;\n    let componentsPerAttribute;\n    const attributes = new GeometryAttributes();\n    const numAttributes = packedGeometry[packedGeometryIndex++];\n    for (i = 0; i < numAttributes; i++) {\n      const name = stringTable[packedGeometry[packedGeometryIndex++]];\n      const componentDatatype = packedGeometry[packedGeometryIndex++];\n      componentsPerAttribute = packedGeometry[packedGeometryIndex++];\n      const normalize = packedGeometry[packedGeometryIndex++] !== 0;\n\n      length = packedGeometry[packedGeometryIndex++];\n      values = ComponentDatatype.createTypedArray(componentDatatype, length);\n      for (let valuesIndex = 0; valuesIndex < length; valuesIndex++) {\n        values[valuesIndex] = packedGeometry[packedGeometryIndex++];\n      }\n\n      attributes[name] = new GeometryAttribute({\n        componentDatatype: componentDatatype,\n        componentsPerAttribute: componentsPerAttribute,\n        normalize: normalize,\n        values: values,\n      });\n    }\n\n    let indices;\n    length = packedGeometry[packedGeometryIndex++];\n\n    if (length > 0) {\n      const numberOfVertices = values.length / componentsPerAttribute;\n      indices = IndexDatatype.createTypedArray(numberOfVertices, length);\n      for (i = 0; i < length; i++) {\n        indices[i] = packedGeometry[packedGeometryIndex++];\n      }\n    }\n\n    result[resultIndex++] = new Geometry({\n      primitiveType: primitiveType,\n      geometryType: geometryType,\n      boundingSphere: boundingSphere,\n      boundingSphereCV: boundingSphereCV,\n      indices: indices,\n      attributes: attributes,\n      offsetAttribute: offsetAttribute,\n    });\n  }\n\n  return result;\n};\n\nfunction packInstancesForCombine(instances, transferableObjects) {\n  const length = instances.length;\n  const packedData = new Float64Array(1 + length * 19);\n  let count = 0;\n  packedData[count++] = length;\n  for (let i = 0; i < length; i++) {\n    const instance = instances[i];\n    Matrix4.pack(instance.modelMatrix, packedData, count);\n    count += Matrix4.packedLength;\n    if (defined(instance.attributes) && defined(instance.attributes.offset)) {\n      const values = instance.attributes.offset.value;\n      packedData[count] = values[0];\n      packedData[count + 1] = values[1];\n      packedData[count + 2] = values[2];\n    }\n    count += 3;\n  }\n  transferableObjects.push(packedData.buffer);\n\n  return packedData;\n}\n\nfunction unpackInstancesForCombine(data) {\n  const packedInstances = data;\n  const result = new Array(packedInstances[0]);\n  let count = 0;\n\n  let i = 1;\n  while (i < packedInstances.length) {\n    const modelMatrix = Matrix4.unpack(packedInstances, i);\n    let attributes;\n    i += Matrix4.packedLength;\n    if (defined(packedInstances[i])) {\n      attributes = {\n        offset: new OffsetGeometryInstanceAttribute(\n          packedInstances[i],\n          packedInstances[i + 1],\n          packedInstances[i + 2],\n        ),\n      };\n    }\n    i += 3;\n\n    result[count++] = {\n      modelMatrix: modelMatrix,\n      attributes: attributes,\n    };\n  }\n\n  return result;\n}\n\n/**\n * @private\n */\nPrimitivePipeline.packCombineGeometryParameters = function (\n  parameters,\n  transferableObjects,\n) {\n  const createGeometryResults = parameters.createGeometryResults;\n  const length = createGeometryResults.length;\n\n  for (let i = 0; i < length; i++) {\n    transferableObjects.push(createGeometryResults[i].packedData.buffer);\n  }\n\n  return {\n    createGeometryResults: parameters.createGeometryResults,\n    packedInstances: packInstancesForCombine(\n      parameters.instances,\n      transferableObjects,\n    ),\n    ellipsoid: parameters.ellipsoid,\n    isGeographic: parameters.projection instanceof GeographicProjection,\n    elementIndexUintSupported: parameters.elementIndexUintSupported,\n    scene3DOnly: parameters.scene3DOnly,\n    vertexCacheOptimize: parameters.vertexCacheOptimize,\n    compressVertices: parameters.compressVertices,\n    modelMatrix: parameters.modelMatrix,\n    createPickOffsets: parameters.createPickOffsets,\n  };\n};\n\n/**\n * @private\n */\nPrimitivePipeline.unpackCombineGeometryParameters = function (\n  packedParameters,\n) {\n  const instances = unpackInstancesForCombine(packedParameters.packedInstances);\n  const createGeometryResults = packedParameters.createGeometryResults;\n  const length = createGeometryResults.length;\n  let instanceIndex = 0;\n\n  for (let resultIndex = 0; resultIndex < length; resultIndex++) {\n    const geometries = PrimitivePipeline.unpackCreateGeometryResults(\n      createGeometryResults[resultIndex],\n    );\n    const geometriesLength = geometries.length;\n    for (\n      let geometryIndex = 0;\n      geometryIndex < geometriesLength;\n      geometryIndex++\n    ) {\n      const geometry = geometries[geometryIndex];\n      const instance = instances[instanceIndex];\n      instance.geometry = geometry;\n      ++instanceIndex;\n    }\n  }\n\n  const ellipsoid = Ellipsoid.clone(packedParameters.ellipsoid);\n  const projection = packedParameters.isGeographic\n    ? new GeographicProjection(ellipsoid)\n    : new WebMercatorProjection(ellipsoid);\n\n  return {\n    instances: instances,\n    ellipsoid: ellipsoid,\n    projection: projection,\n    elementIndexUintSupported: packedParameters.elementIndexUintSupported,\n    scene3DOnly: packedParameters.scene3DOnly,\n    vertexCacheOptimize: packedParameters.vertexCacheOptimize,\n    compressVertices: packedParameters.compressVertices,\n    modelMatrix: Matrix4.clone(packedParameters.modelMatrix),\n    createPickOffsets: packedParameters.createPickOffsets,\n  };\n};\n\nfunction packBoundingSpheres(boundingSpheres) {\n  const length = boundingSpheres.length;\n  const bufferLength = 1 + (BoundingSphere.packedLength + 1) * length;\n  const buffer = new Float32Array(bufferLength);\n\n  let bufferIndex = 0;\n  buffer[bufferIndex++] = length;\n\n  for (let i = 0; i < length; ++i) {\n    const bs = boundingSpheres[i];\n    if (!defined(bs)) {\n      buffer[bufferIndex++] = 0.0;\n    } else {\n      buffer[bufferIndex++] = 1.0;\n      BoundingSphere.pack(boundingSpheres[i], buffer, bufferIndex);\n    }\n    bufferIndex += BoundingSphere.packedLength;\n  }\n\n  return buffer;\n}\n\nfunction unpackBoundingSpheres(buffer) {\n  const result = new Array(buffer[0]);\n  let count = 0;\n\n  let i = 1;\n  while (i < buffer.length) {\n    if (buffer[i++] === 1.0) {\n      result[count] = BoundingSphere.unpack(buffer, i);\n    }\n    ++count;\n    i += BoundingSphere.packedLength;\n  }\n\n  return result;\n}\n\n/**\n * @private\n */\nPrimitivePipeline.packCombineGeometryResults = function (\n  results,\n  transferableObjects,\n) {\n  if (defined(results.geometries)) {\n    transferGeometries(results.geometries, transferableObjects);\n  }\n\n  const packedBoundingSpheres = packBoundingSpheres(results.boundingSpheres);\n  const packedBoundingSpheresCV = packBoundingSpheres(\n    results.boundingSpheresCV,\n  );\n  transferableObjects.push(\n    packedBoundingSpheres.buffer,\n    packedBoundingSpheresCV.buffer,\n  );\n\n  return {\n    geometries: results.geometries,\n    attributeLocations: results.attributeLocations,\n    modelMatrix: results.modelMatrix,\n    pickOffsets: results.pickOffsets,\n    offsetInstanceExtend: results.offsetInstanceExtend,\n    boundingSpheres: packedBoundingSpheres,\n    boundingSpheresCV: packedBoundingSpheresCV,\n  };\n};\n\n/**\n * @private\n */\nPrimitivePipeline.unpackCombineGeometryResults = function (packedResult) {\n  return {\n    geometries: packedResult.geometries,\n    attributeLocations: packedResult.attributeLocations,\n    modelMatrix: packedResult.modelMatrix,\n    pickOffsets: packedResult.pickOffsets,\n    offsetInstanceExtend: packedResult.offsetInstanceExtend,\n    boundingSpheres: unpackBoundingSpheres(packedResult.boundingSpheres),\n    boundingSpheresCV: unpackBoundingSpheres(packedResult.boundingSpheresCV),\n  };\n};\nexport default PrimitivePipeline;\n","/**\n * The states that describe the lifecycle of a <code>Primitive</code>, as\n * represented by the <code>primitive._state</code>.\n *\n * The state transitions are triggered by calls to the <code>update</code>\n * function, but the actual state changes may happen asynchronously if the\n * <code>asynchronous</code> flag of the primitive was set to\n * <code>true</code>.\n *\n * @private\n */\nconst PrimitiveState = {\n  /**\n   * The initial state of a primitive.\n   *\n   * Note that this does NOT mean that the primitive is \"ready\", as indicated\n   * by the <code>_ready</code> property. It means the opposite: Nothing was\n   * done with the primitive at all.\n   *\n   * For primitives that are created with the <code>asynchronous:true</code>\n   * setting and that are in this state, the <code>update</code> call starts\n   * the creation of the geometry using web workers, and the primitive goes\n   * into the <code>CREATING</code> state.\n   *\n   * For synchronously created primitives, this state never matters. They will\n   * go into the COMBINED (or FAILED) state directly due to a call to the\n   * <code>update</code> function, if they are not yet FAILED, COMBINED,\n   * or COMPLETE.\n   */\n  READY: 0,\n\n  /**\n   * The process of creating the primitive geometry is ongoing.\n   *\n   * A primitive can only ever be in this state when it was created\n   * with the <code>asynchronous:true</code> setting.\n   *\n   * It means that web workers are currently creating the geometry\n   * of the primitive.\n   *\n   * When the geometry creation succeeds, then the primitive will go\n   * into the CREATED state. Otherwise, it will go into the FAILED\n   * state. Both will happen asynchronously.\n   *\n   * The <code>update</code> function has to be called regularly\n   * until either of these states is reached.\n   */\n  CREATING: 1,\n\n  /**\n   * The geometry for the primitive has been created.\n   *\n   * A primitive can only ever be in this state when it was created\n   * with the <code>asynchronous:true</code> setting.\n   *\n   * It means that web workers have (asynchronously) finished the\n   * creation of the geometry, but further (asynchronous) processing\n   * is necessary: If a primitive is determined to be in this state\n   * during a call to <code>update</code>, an asynchronous process\n   * is triggered to \"combine\" the geometry, meaning that the primitive\n   * will go into the COMBINING state.\n   */\n  CREATED: 2,\n\n  /**\n   * The asynchronous creation of the geometry has been finished, but the\n   * asynchronous process of combining the geometry has not finished yet.\n   *\n   * A primitive can only ever be in this state when it was created\n   * with the <code>asynchronous:true</code> setting.\n   *\n   * It means that whatever is done with\n   * <code>PrimitivePipeline.packCombineGeometryParameters</code> has\n   * not finished yet. When combining the geometry succeeds, the\n   * primitive will go into the COMBINED state. Otherwise, it will\n   * go into the FAILED state.\n   */\n  COMBINING: 3,\n\n  /**\n   * The geometry data is in a form that can be uploaded to the GPU.\n   *\n   * For <i>synchronous</i> primitives, this means that the geometry\n   * has been created (synchronously) due to the first call to the\n   * <code>update</code> function.\n   *\n   * For <i>asynchronous</i> primitives, this means that the asynchronous\n   * creation of the geometry and the asynchronous combination of the\n   * geometry have both finished.\n   *\n   * The <code>update</code> function has to be called regularly until\n   * this state is reached. When it is reached, the <code>update</code>\n   * call will cause the transition into the COMPLETE state.\n   */\n  COMBINED: 4,\n\n  /**\n   * The geometry has been created and uploaded to the GPU.\n   *\n   * When this state is reached, it eventually causes the <code>_ready</code>\n   * flag of the primitive to become <code>true</code>.\n   *\n   * Note: Setting the <code>ready</code> flag does NOT happen in the\n   * <code>update</code> call: It only happens after rendering the next\n   * frame!\n   *\n   * Note: This state does not mean that nothing has to be done\n   * anymore (so the work is not \"complete\"). When the primitive is in\n   * this state, the <code>update</code> function still has to be\n   * called regularly.\n   */\n  COMPLETE: 5,\n\n  /**\n   * The creation of the primitive failed.\n   *\n   * When this state is reached, it eventually causes the <code>_ready</code>\n   * flag of the primitive to become <code>true</code>.\n   *\n   * Note: Setting the <code>ready</code> flag does NOT happen in the\n   * <code>update</code> call: It only happens after rendering the next\n   * frame!\n   *\n   * This state can be reached when the (synchronous or asynchronous)\n   * creation of the geometry, or the (asynchronous) combination of\n   * the geometry caused any form of error.\n   *\n   * It may or may not imply the presence of the <code>_error</code> property.\n   * When the <code>_error</code> property is present on a FAILED primitive,\n   * this error will be thrown during the <code>update</code> call. When it\n   * is not present for a FAILED primitive, then the <code>update</code> call\n   * will do nothing.\n   */\n  FAILED: 6,\n};\nexport default Object.freeze(PrimitiveState);\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport PropertyAttributeProperty from \"./PropertyAttributeProperty.js\";\n\n/**\n * A property attribute; a collection of per-point properties stored as custom\n * vertex attributes.\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension}\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} [options.name] Optional human-readable name to describe the attribute\n * @param {number} [options.id] A unique id to identify the property attribute, useful for debugging. This is the array index in the property attributes array\n * @param {object} options.propertyAttribute The property attribute JSON, following the EXT_structural_metadata schema.\n * @param {MetadataClass} options.class The class that properties conform to.\n *\n * @alias PropertyAttribute\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction PropertyAttribute(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const propertyAttribute = options.propertyAttribute;\n  const classDefinition = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.propertyAttribute\", propertyAttribute);\n  Check.typeOf.object(\"options.class\", classDefinition);\n  //>>includeEnd('debug');\n\n  const properties = {};\n  if (defined(propertyAttribute.properties)) {\n    for (const propertyId in propertyAttribute.properties) {\n      if (propertyAttribute.properties.hasOwnProperty(propertyId)) {\n        properties[propertyId] = new PropertyAttributeProperty({\n          property: propertyAttribute.properties[propertyId],\n          classProperty: classDefinition.properties[propertyId],\n        });\n      }\n    }\n  }\n\n  this._name = options.name;\n  this._id = options.id;\n  this._class = classDefinition;\n  this._properties = properties;\n  this._extras = propertyAttribute.extras;\n  this._extensions = propertyAttribute.extensions;\n}\n\nObject.defineProperties(PropertyAttribute.prototype, {\n  /**\n   * A human-readable name for this attribute\n   *\n   * @memberof PropertyAttribute.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n  /**\n   * An identifier for this attribute. Useful for debugging.\n   *\n   * @memberof PropertyAttribute.prototype\n   *\n   * @type {string|number}\n   * @readonly\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof PropertyAttribute.prototype\n   *\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * The properties in this property attribute.\n   *\n   * @memberof PropertyAttribute.prototype\n   *\n   * @type {Object<string, PropertyAttributeProperty>}\n   * @readonly\n   * @private\n   */\n  properties: {\n    get: function () {\n      return this._properties;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof PropertyAttribute.prototype\n   *\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof PropertyAttribute.prototype\n   *\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Gets the property with the given property ID.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {PropertyAttributeProperty|undefined} The property, or <code>undefined</code> if the property does not exist.\n * @private\n */\nPropertyAttribute.prototype.getProperty = function (propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  return this._properties[propertyId];\n};\n\nexport default PropertyAttribute;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * A property in a property attribute from EXT_structural_metadata.\n *\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension}\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.property The property JSON object.\n * @param {MetadataClassProperty} options.classProperty The class property.\n *\n * @alias PropertyAttributeProperty\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction PropertyAttributeProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const property = options.property;\n  const classProperty = options.classProperty;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.property\", property);\n  Check.typeOf.object(\"options.classProperty\", classProperty);\n  //>>includeEnd('debug');\n\n  this._attribute = property.attribute;\n  this._classProperty = classProperty;\n  this._min = property.min;\n  this._max = property.max;\n\n  let offset = property.offset;\n  let scale = property.scale;\n\n  // This needs to be set before handling default values\n  const hasValueTransform =\n    classProperty.hasValueTransform || defined(offset) || defined(scale);\n\n  // If the property attribute does not define an offset/scale, it inherits from\n  // the class property. The class property handles setting the default of\n  // identity: (offset 0, scale 1) with the same scalar/vector/matrix types.\n  // array types are disallowed by the spec.\n  offset = offset ?? classProperty.offset;\n  scale = scale ?? classProperty.scale;\n\n  // offset and scale are applied on the GPU, so unpack the values\n  // as math types we can use in uniform callbacks.\n  offset = classProperty.unpackVectorAndMatrixTypes(offset);\n  scale = classProperty.unpackVectorAndMatrixTypes(scale);\n\n  this._offset = offset;\n  this._scale = scale;\n  this._hasValueTransform = hasValueTransform;\n\n  this._extras = property.extras;\n  this._extensions = property.extensions;\n}\n\nObject.defineProperties(PropertyAttributeProperty.prototype, {\n  /**\n   * The attribute semantic\n   *\n   * @memberof PropertyAttributeProperty.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  attribute: {\n    get: function () {\n      return this._attribute;\n    },\n  },\n\n  /**\n   * True if offset/scale should be applied. If both offset/scale were\n   * undefined, they default to identity so this property is set false\n   *\n   * @memberof PropertyAttributeProperty.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  hasValueTransform: {\n    get: function () {\n      return this._hasValueTransform;\n    },\n  },\n\n  /**\n   * The offset to be added to property values as part of the value transform.\n   *\n   * This is always defined, even when `hasValueTransform` is `false`. If\n   * the property JSON itself did not define it, then it will inherit the\n   * value from the `MetadataClassProperty`. There, it also is always\n   * defined, and initialized to the default value if it was not contained\n   * in the class property JSON.\n   *\n   * @memberof PropertyAttributeProperty.prototype\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @readonly\n   * @private\n   */\n  offset: {\n    get: function () {\n      return this._offset;\n    },\n  },\n\n  /**\n   * The scale to be multiplied to property values as part of the value transform.\n   *\n   * This is always defined, even when `hasValueTransform` is `false`. If\n   * the property JSON itself did not define it, then it will inherit the\n   * value from the `MetadataClassProperty`. There, it also is always\n   * defined, and initialized to the default value if it was not contained\n   * in the class property JSON.\n   *\n   * @memberof PropertyAttributeProperty.prototype\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @readonly\n   * @private\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n  },\n\n  /**\n   * The properties inherited from this property's class\n   *\n   * @memberof PropertyAttributeProperty.prototype\n   * @type {MetadataClassProperty}\n   * @readonly\n   * @private\n   */\n  classProperty: {\n    get: function () {\n      return this._classProperty;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof PropertyAttributeProperty.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof PropertyAttributeProperty.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\nexport default PropertyAttributeProperty;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport defined from \"../Core/defined.js\";\nimport JsonMetadataTable from \"./JsonMetadataTable.js\";\nimport addAllToArray from \"../Core/addAllToArray.js\";\nimport { destroyObject } from \"@cesium/engine\";\n\n/**\n * A property table for use with the <code>EXT_structural_metadata</code> extension or\n * legacy <code>EXT_feature_metadata</code> glTF extension. It also includes some\n * options to be compatible with the 3D Tiles 1.0 batch table.\n * <p>\n * For batch tables, properties are resolved in the following order:\n * </p>\n * <ol>\n *   <li>binary properties from options.metadataTable</li>\n *   <li>JSON properties from options.jsonMetadataTable</li>\n *   <li>batch table hierarchy properties from options.batchTableHierarchy</li>\n * </ol>\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension} as well as the\n * previous {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension} for glTF.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} [options.name] Human-readable name to describe the table\n * @param {string|number} [options.id] A unique id to identify the property table, useful for debugging. For <code>EXT_structural_metadata</code>, this is the array index in the property tables array, for <code>EXT_feature_metadata</code> this is the dictionary key in the property tables dictionary.\n * @param {number} options.count The number of features in the table.\n * @param {MetadataTable} [options.metadataTable] A table of binary properties.\n * @param {JsonMetadataTable} [options.jsonMetadataTable] For compatibility with the old batch table, free-form JSON properties can be passed in.\n * @param {BatchTableHierarchy} [options.batchTableHierarchy] For compatibility with the <code>3DTILES_batch_table_hierarchy</code> extension, a hierarchy can be provided.\n * @param {object} [options.extras] Extra user-defined properties\n * @param {object} [options.extensions] An object containing extensions\n *\n * @alias PropertyTable\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction PropertyTable(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"options.count\", options.count);\n  //>>includeEnd('debug');\n\n  this._name = options.name;\n  this._id = options.id;\n  this._count = options.count;\n  this._extras = options.extras;\n  this._extensions = options.extensions;\n  this._metadataTable = options.metadataTable;\n  this._jsonMetadataTable = options.jsonMetadataTable;\n  this._batchTableHierarchy = options.batchTableHierarchy;\n  this._texture = options.texture; // Property table buffer data packed into a GPU texture\n}\n\nObject.defineProperties(PropertyTable.prototype, {\n  /**\n   * A human-readable name for this table\n   *\n   * @memberof PropertyTable.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n  /**\n   * An identifier for this table. Useful for debugging.\n   *\n   * @memberof PropertyTable.prototype\n   * @type {string|number}\n   * @readonly\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * The number of features in the table.\n   *\n   * @memberof PropertyTable.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  count: {\n    get: function () {\n      return this._count;\n    },\n  },\n\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof PropertyTable.prototype\n   * @type {MetadataClass}\n   * @readonly\n   */\n  class: {\n    get: function () {\n      if (defined(this._metadataTable)) {\n        return this._metadataTable.class;\n      }\n\n      return undefined;\n    },\n  },\n\n  /**\n   * The properties stored in this table.\n   *\n   * @memberof PropertyTable.prototype\n   * @type {Object<string, MetadataTableProperty>}\n   * @readonly\n   */\n  properties: {\n    get: function () {\n      if (defined(this._metadataTable)) {\n        return this._metadataTable.properties;\n      }\n\n      return undefined;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof PropertyTable.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof PropertyTable.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n\n  /**\n   * Get the total amount of binary metadata stored in memory. This does\n   * not include JSON metadata\n   *\n   * @memberof PropertyTable.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  byteLength: {\n    get: function () {\n      let totalByteLength = 0;\n      if (defined(this._metadataTable)) {\n        totalByteLength += this._metadataTable.byteLength;\n      }\n\n      if (defined(this._batchTableHierarchy)) {\n        totalByteLength += this._batchTableHierarchy.byteLength;\n      }\n\n      return totalByteLength;\n    },\n  },\n\n  /**\n   * The texture containing the property table data, if any.\n   *\n   * @memberof PropertyTable.prototype\n   * @type {Texture | undefined}\n   * @readonly\n   * @private\n   */\n  texture: {\n    get: function () {\n      return this._texture;\n    },\n  },\n});\n\n/**\n * Returns whether the feature has this property. For compatibility with the <code>3DTILES_batch_table_hierarchy</code> extension, this is computed for a specific feature.\n *\n * @param {number} index The index of the feature.\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the feature has this property.\n * @private\n */\nPropertyTable.prototype.hasProperty = function (index, propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  if (\n    defined(this._metadataTable) &&\n    this._metadataTable.hasProperty(propertyId)\n  ) {\n    return true;\n  }\n\n  if (\n    defined(this._batchTableHierarchy) &&\n    this._batchTableHierarchy.hasProperty(index, propertyId)\n  ) {\n    return true;\n  }\n\n  if (\n    defined(this._jsonMetadataTable) &&\n    this._jsonMetadataTable.hasProperty(propertyId)\n  ) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Returns whether the feature has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the feature has a property with the given semantic.\n * @private\n */\nPropertyTable.prototype.hasPropertyBySemantic = function (index, semantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  if (defined(this._metadataTable)) {\n    return this._metadataTable.hasPropertyBySemantic(semantic);\n  }\n\n  return false;\n};\n\n/**\n * Returns whether any feature has this property.\n * This is mainly useful for checking whether a property exists in the class\n * hierarchy when using the <code>3DTILES_batch_table_hierarchy</code> extension.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether any feature has this property.\n * @private\n */\nPropertyTable.prototype.propertyExists = function (propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  if (\n    defined(this._metadataTable) &&\n    this._metadataTable.hasProperty(propertyId)\n  ) {\n    return true;\n  }\n\n  if (\n    defined(this._batchTableHierarchy) &&\n    this._batchTableHierarchy.propertyExists(propertyId)\n  ) {\n    return true;\n  }\n\n  if (\n    defined(this._jsonMetadataTable) &&\n    this._jsonMetadataTable.hasProperty(propertyId)\n  ) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Returns whether any feature has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether any feature has a property with the given semantic.\n * @private\n */\nPropertyTable.prototype.propertyExistsBySemantic = function (semantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  if (defined(this._metadataTable)) {\n    return this._metadataTable.hasPropertyBySemantic(semantic);\n  }\n\n  return false;\n};\n\nconst scratchResults = [];\n\n/**\n * Returns an array of property IDs. For compatibility with the <code>3DTILES_batch_table_hierarchy</code> extension, this is computed for a specific feature.\n *\n * @param {number} index The index of the feature.\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nPropertyTable.prototype.getPropertyIds = function (index, results) {\n  results = defined(results) ? results : [];\n  results.length = 0;\n\n  if (defined(this._metadataTable)) {\n    // concat in place to avoid unnecessary array allocation\n    const ids = this._metadataTable.getPropertyIds(scratchResults);\n    addAllToArray(results, ids);\n  }\n\n  if (defined(this._batchTableHierarchy)) {\n    const ids = this._batchTableHierarchy.getPropertyIds(index, scratchResults);\n    addAllToArray(results, ids);\n  }\n\n  if (defined(this._jsonMetadataTable)) {\n    const ids = this._jsonMetadataTable.getPropertyIds(scratchResults);\n    addAllToArray(results, ids);\n  }\n\n  return results;\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {number} index The index of the feature.\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n * @private\n */\nPropertyTable.prototype.getProperty = function (index, propertyId) {\n  let result;\n  if (defined(this._metadataTable)) {\n    result = this._metadataTable.getProperty(index, propertyId);\n    if (defined(result)) {\n      return result;\n    }\n  }\n\n  if (defined(this._batchTableHierarchy)) {\n    result = this._batchTableHierarchy.getProperty(index, propertyId);\n    if (defined(result)) {\n      return result;\n    }\n  }\n\n  if (defined(this._jsonMetadataTable)) {\n    result = this._jsonMetadataTable.getProperty(index, propertyId);\n    if (defined(result)) {\n      return result;\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Sets the value of the property with the given ID. If the property did not\n * exist, it will be created as a JSON metadata property\n *\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {number} index The index of the feature.\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @private\n */\nPropertyTable.prototype.setProperty = function (index, propertyId, value) {\n  if (\n    defined(this._metadataTable) &&\n    this._metadataTable.setProperty(index, propertyId, value)\n  ) {\n    return;\n  }\n\n  if (\n    defined(this._batchTableHierarchy) &&\n    this._batchTableHierarchy.setProperty(index, propertyId, value)\n  ) {\n    return;\n  }\n\n  // Ensure we have a table for JSON properties\n  if (!defined(this._jsonMetadataTable)) {\n    this._jsonMetadataTable = new JsonMetadataTable({\n      count: this._count,\n      properties: {},\n    });\n  }\n\n  // JsonMetadataTable will handle creating a new property at runtime.\n  this._jsonMetadataTable.setProperty(index, propertyId, value);\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n * <p>\n * This only operates on the underlying {@link MetadataTable} (if present) as\n * {@link JsonMetadataTable} and {@link BatchTableHierarchy} do not have\n * semantics.\n * </p>\n *\n * @param {number} index The index of the feature.\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this semantic.\n * @private\n */\nPropertyTable.prototype.getPropertyBySemantic = function (index, semantic) {\n  if (defined(this._metadataTable)) {\n    return this._metadataTable.getPropertyBySemantic(index, semantic);\n  }\n\n  return undefined;\n};\n\n/**\n * Sets the value of the property with the given semantic.\n * <p>\n * This only operates on the underlying {@link MetadataTable} (if present) as\n * {@link JsonMetadataTable} and {@link BatchTableHierarchy} do not have\n * semantics.\n * </p>\n *\n * @param {number} index The index of the feature.\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nPropertyTable.prototype.setPropertyBySemantic = function (\n  index,\n  semantic,\n  value,\n) {\n  if (defined(this._metadataTable)) {\n    return this._metadataTable.setPropertyBySemantic(index, semantic, value);\n  }\n\n  return false;\n};\n\n/**\n * Returns a typed array containing the property values for a given propertyId.\n * <p>\n * This only operates on the underlying {@link MetadataTable} (if present) as\n * {@link JsonMetadataTable} and {@link BatchTableHierarchy} do not store\n * values in typed arrays.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The typed array containing the property values or <code>undefined</code> if the property values are not stored in a typed array.\n *\n * @private\n */\nPropertyTable.prototype.getPropertyTypedArray = function (propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  if (defined(this._metadataTable)) {\n    return this._metadataTable.getPropertyTypedArray(propertyId);\n  }\n\n  return undefined;\n};\n\n/**\n * Returns a typed array containing the property values for the property with the given semantic.\n * <p>\n * This only operates on the underlying {@link MetadataTable} (if present) as\n * {@link JsonMetadataTable} and {@link BatchTableHierarchy} do not have\n * semantics.\n * </p>\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The typed array containing the property values or <code>undefined</code> if the property values are not stored in a typed array.\n *\n * @private\n */\nPropertyTable.prototype.getPropertyTypedArrayBySemantic = function (semantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  if (defined(this._metadataTable)) {\n    return this._metadataTable.getPropertyTypedArrayBySemantic(semantic);\n  }\n\n  return undefined;\n};\n\nfunction checkFeatureId(featureId, featuresLength) {\n  if (!defined(featureId) || featureId < 0 || featureId >= featuresLength) {\n    throw new DeveloperError(\n      `featureId is required and must be between zero and featuresLength - 1 (${featuresLength}` -\n        +\").\",\n    );\n  }\n}\n\nPropertyTable.prototype.isClass = function (featureId, className) {\n  //>>includeStart('debug', pragmas.debug);\n  checkFeatureId(featureId, this.count);\n  Check.typeOf.string(\"className\", className);\n  //>>includeEnd('debug');\n\n  const hierarchy = this._batchTableHierarchy;\n  if (!defined(hierarchy)) {\n    return false;\n  }\n\n  return hierarchy.isClass(featureId, className);\n};\n\nPropertyTable.prototype.isExactClass = function (featureId, className) {\n  //>>includeStart('debug', pragmas.debug);\n  checkFeatureId(featureId, this.count);\n  Check.typeOf.string(\"className\", className);\n  //>>includeEnd('debug');\n\n  return this.getExactClassName(featureId) === className;\n};\n\nPropertyTable.prototype.getExactClassName = function (featureId) {\n  //>>includeStart('debug', pragmas.debug);\n  checkFeatureId(featureId, this.count);\n  //>>includeEnd('debug');\n\n  const hierarchy = this._batchTableHierarchy;\n  if (!defined(hierarchy)) {\n    return undefined;\n  }\n\n  return hierarchy.getClassName(featureId);\n};\n\n/**\n * Destroys any resources that need cleaning up in the property table.\n *\n * @private\n */\nPropertyTable.prototype.destroy = function () {\n  this._texture = this._texture && this._texture.destroy();\n  return destroyObject(this);\n};\n\nexport default PropertyTable;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport PropertyTextureProperty from \"./PropertyTextureProperty.js\";\n\n/**\n * A property texture.\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension} as well as the\n * previous {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension} for glTF.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {string} [options.name] Optional human-readable name to describe the texture\n * @param {string|number} [options.id] A unique id to identify the property texture, useful for debugging. For <code>EXT_structural_metadata</code>, this is the array index in the property textures array, for <code>EXT_feature_metadata</code> this is the dictionary key in the property textures dictionary.\n * @param {object} options.propertyTexture The property texture JSON, following the EXT_structural_metadata schema.\n * @param {MetadataClass} options.class The class that properties conform to.\n * @param {Object<string, Texture>} options.textures An object mapping texture IDs to {@link Texture} objects.\n *\n * @alias PropertyTexture\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction PropertyTexture(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const propertyTexture = options.propertyTexture;\n  const classDefinition = options.class;\n  const textures = options.textures;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.propertyTexture\", propertyTexture);\n  Check.typeOf.object(\"options.class\", classDefinition);\n  Check.typeOf.object(\"options.textures\", textures);\n  //>>includeEnd('debug');\n\n  const extensions = propertyTexture.extensions;\n  const extras = propertyTexture.extras;\n\n  const properties = {};\n  if (defined(propertyTexture.properties)) {\n    for (const propertyId in propertyTexture.properties) {\n      if (propertyTexture.properties.hasOwnProperty(propertyId)) {\n        properties[propertyId] = new PropertyTextureProperty({\n          property: propertyTexture.properties[propertyId],\n          classProperty: classDefinition.properties[propertyId],\n          textures: textures,\n        });\n      }\n    }\n  }\n\n  this._name = options.name;\n  this._id = options.id;\n  this._class = classDefinition;\n  this._properties = properties;\n  this._extras = extras;\n  this._extensions = extensions;\n}\n\nObject.defineProperties(PropertyTexture.prototype, {\n  /**\n   * A human-readable name for this texture\n   *\n   * @memberof PropertyTexture.prototype\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  name: {\n    get: function () {\n      return this._name;\n    },\n  },\n  /**\n   * An identifier for this texture. Useful for debugging.\n   *\n   * @memberof PropertyTexture.prototype\n   * @type {string|number}\n   * @readonly\n   * @private\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof PropertyTexture.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * The properties in this property texture.\n   *\n   * @memberof PropertyTexture.prototype\n   *\n   * @type {Object<string, PropertyTextureProperty>}\n   * @readonly\n   * @private\n   */\n  properties: {\n    get: function () {\n      return this._properties;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof PropertyTexture.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof PropertyTexture.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Gets the property with the given property ID.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {PropertyTextureProperty|undefined} The property, or <code>undefined</code> if the property does not exist.\n * @private\n */\nPropertyTexture.prototype.getProperty = function (propertyId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"propertyId\", propertyId);\n  //>>includeEnd('debug');\n\n  return this._properties[propertyId];\n};\n\nexport default PropertyTexture;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport GltfLoaderUtil from \"./GltfLoaderUtil.js\";\n\n/**\n * A property in a property texture.\n *\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension} as well as the\n * previous {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension} for glTF.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.property The property JSON object.\n * @param {MetadataClassProperty} options.classProperty The class property.\n * @param {Object<number, Texture>} options.textures An object mapping texture IDs to {@link Texture} objects.\n *\n * @alias PropertyTextureProperty\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction PropertyTextureProperty(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const property = options.property;\n  const classProperty = options.classProperty;\n  const textures = options.textures;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.property\", property);\n  Check.typeOf.object(\"options.classProperty\", classProperty);\n  Check.typeOf.object(\"options.textures\", textures);\n  //>>includeEnd('debug');\n\n  // in EXT_structural_metadata, the property is a valid glTF textureInfo\n  const channels = defined(property.channels) ? property.channels : [0];\n  const textureInfo = property;\n  const textureReader = GltfLoaderUtil.createModelTextureReader({\n    textureInfo: textureInfo,\n    channels: reformatChannels(channels),\n    texture: textures[textureInfo.index],\n  });\n\n  this._min = property.min;\n  this._max = property.max;\n\n  let offset = property.offset;\n  let scale = property.scale;\n\n  // This needs to be set before handling default values\n  const hasValueTransform =\n    classProperty.hasValueTransform || defined(offset) || defined(scale);\n\n  // If the property attribute does not define an offset/scale, it inherits from\n  // the class property. The class property handles setting the default of\n  // identity: (offset 0, scale 1) with the same scalar/vector/matrix types.\n  // array types are disallowed by the spec.\n  offset = offset ?? classProperty.offset;\n  scale = scale ?? classProperty.scale;\n\n  // offset and scale are applied on the GPU, so unpack the values\n  // as math types we can use in uniform callbacks.\n  offset = classProperty.unpackVectorAndMatrixTypes(offset);\n  scale = classProperty.unpackVectorAndMatrixTypes(scale);\n\n  this._offset = offset;\n  this._scale = scale;\n  this._hasValueTransform = hasValueTransform;\n\n  this._textureReader = textureReader;\n  this._classProperty = classProperty;\n  this._extras = property.extras;\n  this._extensions = property.extensions;\n}\n\nObject.defineProperties(PropertyTextureProperty.prototype, {\n  /**\n   * The texture reader.\n   *\n   * @memberof PropertyTextureProperty.prototype\n   * @type {ModelComponents.TextureReader}\n   * @readonly\n   * @private\n   */\n  textureReader: {\n    get: function () {\n      return this._textureReader;\n    },\n  },\n\n  /**\n   * True if offset/scale should be applied. If both offset/scale were\n   * undefined, they default to identity so this property is set false\n   *\n   * @memberof PropertyTextureProperty.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  hasValueTransform: {\n    get: function () {\n      return this._hasValueTransform;\n    },\n  },\n\n  /**\n   * The offset to be added to property values as part of the value transform.\n   *\n   * This is always defined, even when `hasValueTransform` is `false`. If\n   * the property JSON itself did not define it, then it will inherit the\n   * value from the `MetadataClassProperty`. There, it also is always\n   * defined, and initialized to the default value if it was not contained\n   * in the class property JSON.\n   *\n   * @memberof PropertyTextureProperty.prototype\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @readonly\n   * @private\n   */\n  offset: {\n    get: function () {\n      return this._offset;\n    },\n  },\n\n  /**\n   * The scale to be multiplied to property values as part of the value transform.\n   *\n   * This is always defined, even when `hasValueTransform` is `false`. If\n   * the property JSON itself did not define it, then it will inherit the\n   * value from the `MetadataClassProperty`. There, it also is always\n   * defined, and initialized to the default value if it was not contained\n   * in the class property JSON.\n   *\n   * @memberof PropertyTextureProperty.prototype\n   * @type {number|Cartesian2|Cartesian3|Cartesian4|Matrix2|Matrix3|Matrix4}\n   * @readonly\n   * @private\n   */\n  scale: {\n    get: function () {\n      return this._scale;\n    },\n  },\n\n  /**\n   * The properties inherited from this property's class\n   *\n   * @memberof PropertyTextureProperty.prototype\n   * @type {MetadataClassProperty}\n   * @readonly\n   * @private\n   */\n  classProperty: {\n    get: function () {\n      return this._classProperty;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof PropertyTextureProperty.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof PropertyTextureProperty.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Reformat from an array of channel indices like <code>[0, 1]</code> to a\n * string of channels as would be used in GLSL swizzling (e.g. \"rg\")\n *\n * @param {number[]} channels the channel indices\n * @return {string} The channels as a string of \"r\", \"g\", \"b\" or \"a\" characters.\n * @private\n */\nfunction reformatChannels(channels) {\n  return channels\n    .map(function (channelIndex) {\n      return \"rgba\".charAt(channelIndex);\n    })\n    .join(\"\");\n}\n\nexport default PropertyTextureProperty;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\n\n/**\n * A set of occluders that can be used to test quadtree tiles for occlusion.\n *\n * @alias QuadtreeOccluders\n * @constructor\n * @private\n *\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid that potentially occludes tiles.\n */\nfunction QuadtreeOccluders(options) {\n  this._ellipsoid = new EllipsoidalOccluder(options.ellipsoid, Cartesian3.ZERO);\n}\n\nObject.defineProperties(QuadtreeOccluders.prototype, {\n  /**\n   * Gets the {@link EllipsoidalOccluder} that can be used to determine if a point is\n   * occluded by an {@link Ellipsoid}.\n   * @type {EllipsoidalOccluder}\n   * @memberof QuadtreeOccluders.prototype\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n});\nexport default QuadtreeOccluders;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Visibility from \"../Core/Visibility.js\";\nimport QuadtreeOccluders from \"./QuadtreeOccluders.js\";\nimport QuadtreeTile from \"./QuadtreeTile.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport TileReplacementQueue from \"./TileReplacementQueue.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\n/**\n * Renders massive sets of data by utilizing level-of-detail and culling.  The globe surface is divided into\n * a quadtree of tiles with large, low-detail tiles at the root and small, high-detail tiles at the leaves.\n * The set of tiles to render is selected by projecting an estimate of the geometric error in a tile onto\n * the screen to estimate screen-space error, in pixels, which must be below a user-specified threshold.\n * The actual content of the tiles is arbitrary and is specified using a {@link QuadtreeTileProvider}.\n *\n * @alias QuadtreePrimitive\n * @constructor\n * @private\n *\n * @param {QuadtreeTileProvider} options.tileProvider The tile provider that loads, renders, and estimates\n *        the distance to individual tiles.\n * @param {number} [options.maximumScreenSpaceError=2] The maximum screen-space error, in pixels, that is allowed.\n *        A higher maximum error will render fewer tiles and improve performance, while a lower\n *        value will improve visual quality.\n * @param {number} [options.tileCacheSize=100] The maximum number of tiles that will be retained in the tile cache.\n *        Note that tiles will never be unloaded if they were used for rendering the last\n *        frame, so the actual number of resident tiles may be higher.  The value of\n *        this property will not affect visual quality.\n */\nfunction QuadtreePrimitive(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.tileProvider)) {\n    throw new DeveloperError(\"options.tileProvider is required.\");\n  }\n  if (defined(options.tileProvider.quadtree)) {\n    throw new DeveloperError(\n      \"A QuadtreeTileProvider can only be used with a single QuadtreePrimitive\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._tileProvider = options.tileProvider;\n  this._tileProvider.quadtree = this;\n\n  this._debug = {\n    enableDebugOutput: false,\n\n    maxDepth: 0,\n    maxDepthVisited: 0,\n    tilesVisited: 0,\n    tilesCulled: 0,\n    tilesRendered: 0,\n    tilesWaitingForChildren: 0,\n\n    lastMaxDepth: -1,\n    lastMaxDepthVisited: -1,\n    lastTilesVisited: -1,\n    lastTilesCulled: -1,\n    lastTilesRendered: -1,\n    lastTilesWaitingForChildren: -1,\n\n    suspendLodUpdate: false,\n  };\n\n  const tilingScheme = this._tileProvider.tilingScheme;\n  const ellipsoid = tilingScheme.ellipsoid;\n\n  this._tilesRenderedThisFrame = new Set(); // collect all tiles selected to render (useful when multiple render calls are made in a single frame (as in 2D mode))\n  this._tilesToRender = [];\n  this._tileLoadQueueHigh = []; // high priority tiles are preventing refinement\n  this._tileLoadQueueMedium = []; // medium priority tiles are being rendered\n  this._tileLoadQueueLow = []; // low priority tiles were refined past or are non-visible parts of quads.\n  this._tileReplacementQueue = new TileReplacementQueue();\n  this._levelZeroTiles = undefined;\n  this._loadQueueTimeSlice = 5.0;\n  this._tilesInvalidated = false;\n\n  this._addHeightCallbacks = [];\n  this._removeHeightCallbacks = [];\n\n  this._tileToUpdateHeights = [];\n  this._updateHeightsTimeSlice = 2.0;\n\n  // If a culled tile contains _cameraPositionCartographic or _cameraReferenceFrameOriginCartographic, it will be marked\n  // TileSelectionResult.CULLED_BUT_NEEDED and added to the list of tiles to update heights,\n  // even though it is not rendered.\n  // These are updated each frame in `selectTilesForRendering`.\n  this._cameraPositionCartographic = undefined;\n  this._cameraReferenceFrameOriginCartographic = undefined;\n\n  /**\n   * Gets or sets the maximum screen-space error, in pixels, that is allowed.\n   * A higher maximum error will render fewer tiles and improve performance, while a lower\n   * value will improve visual quality.\n   * @type {number}\n   * @default 2\n   */\n  this.maximumScreenSpaceError = options.maximumScreenSpaceError ?? 2;\n\n  /**\n   * Gets or sets the maximum number of tiles that will be retained in the tile cache.\n   * Note that tiles will never be unloaded if they were used for rendering the last\n   * frame, so the actual number of resident tiles may be higher.  The value of\n   * this property will not affect visual quality.\n   * @type {number}\n   * @default 100\n   */\n  this.tileCacheSize = options.tileCacheSize ?? 100;\n\n  /**\n   * Gets or sets the number of loading descendant tiles that is considered \"too many\".\n   * If a tile has too many loading descendants, that tile will be loaded and rendered before any of\n   * its descendants are loaded and rendered. This means more feedback for the user that something\n   * is happening at the cost of a longer overall load time. Setting this to 0 will cause each\n   * tile level to be loaded successively, significantly increasing load time. Setting it to a large\n   * number (e.g. 1000) will minimize the number of tiles that are loaded but tend to make\n   * detail appear all at once after a long wait.\n   * @type {number}\n   * @default 20\n   */\n  this.loadingDescendantLimit = 20;\n\n  /**\n   * Gets or sets a value indicating whether the ancestors of rendered tiles should be preloaded.\n   * Setting this to true optimizes the zoom-out experience and provides more detail in\n   * newly-exposed areas when panning. The down side is that it requires loading more tiles.\n   * @type {boolean}\n   * @default true\n   */\n  this.preloadAncestors = true;\n\n  /**\n   * Gets or sets a value indicating whether the siblings of rendered tiles should be preloaded.\n   * Setting this to true causes tiles with the same parent as a rendered tile to be loaded, even\n   * if they are culled. Setting this to true may provide a better panning experience at the\n   * cost of loading more tiles.\n   * @type {boolean}\n   * @default false\n   */\n  this.preloadSiblings = false;\n\n  this._occluders = new QuadtreeOccluders({\n    ellipsoid: ellipsoid,\n  });\n\n  this._tileLoadProgressEvent = new Event();\n  this._lastTileLoadQueueLength = 0;\n\n  this._lastSelectionFrameNumber = undefined;\n}\n\nObject.defineProperties(QuadtreePrimitive.prototype, {\n  /**\n   * Gets the provider of {@link QuadtreeTile} instances for this quadtree.\n   * @type {QuadtreeTile}\n   * @memberof QuadtreePrimitive.prototype\n   */\n  tileProvider: {\n    get: function () {\n      return this._tileProvider;\n    },\n  },\n  /**\n   * Gets an event that's raised when the length of the tile load queue has changed since the last render frame.  When the load queue is empty,\n   * all terrain and imagery for the current view have been loaded.  The event passes the new length of the tile load queue.\n   *\n   * @memberof QuadtreePrimitive.prototype\n   * @type {Event}\n   */\n  tileLoadProgressEvent: {\n    get: function () {\n      return this._tileLoadProgressEvent;\n    },\n  },\n\n  occluders: {\n    get: function () {\n      return this._occluders;\n    },\n  },\n});\n\n/**\n * Invalidates and frees all the tiles in the quadtree.  The tiles must be reloaded\n * before they can be displayed.\n *\n * @memberof QuadtreePrimitive\n */\nQuadtreePrimitive.prototype.invalidateAllTiles = function () {\n  this._tilesInvalidated = true;\n};\n\nfunction invalidateAllTiles(primitive) {\n  // Clear the replacement queue\n  const replacementQueue = primitive._tileReplacementQueue;\n  replacementQueue.head = undefined;\n  replacementQueue.tail = undefined;\n  replacementQueue.count = 0;\n\n  clearTileLoadQueue(primitive);\n\n  // Free and recreate the level zero tiles.\n  const levelZeroTiles = primitive._levelZeroTiles;\n  if (defined(levelZeroTiles)) {\n    for (let i = 0; i < levelZeroTiles.length; ++i) {\n      const tile = levelZeroTiles[i];\n      const customData = tile.customData;\n\n      for (const data of customData) {\n        data.level = 0;\n        primitive._addHeightCallbacks.push(data);\n      }\n\n      levelZeroTiles[i].freeResources();\n    }\n  }\n\n  primitive._levelZeroTiles = undefined;\n\n  primitive._tileProvider.cancelReprojections();\n}\n\n/**\n * Invokes a specified function for each {@link QuadtreeTile} that is partially\n * or completely loaded.\n *\n * @param {Function} tileFunction The function to invoke for each loaded tile.  The\n *        function is passed a reference to the tile as its only parameter.\n */\nQuadtreePrimitive.prototype.forEachLoadedTile = function (tileFunction) {\n  let tile = this._tileReplacementQueue.head;\n  while (defined(tile)) {\n    if (tile.state !== QuadtreeTileLoadState.START) {\n      tileFunction(tile);\n    }\n    tile = tile.replacementNext;\n  }\n};\n\n/**\n * Invokes a specified function for each {@link QuadtreeTile} that was rendered\n * in the most recent frame.\n *\n * @param {Function} tileFunction The function to invoke for each rendered tile.  The\n *        function is passed a reference to the tile as its only parameter.\n */\nQuadtreePrimitive.prototype.forEachRenderedTile = function (tileFunction) {\n  const tilesRendered = this._tilesRenderedThisFrame;\n  for (const tile of tilesRendered) {\n    tileFunction(tile);\n  }\n};\n\n/**\n * Calls the callback when a new tile is rendered that contains the given cartographic. The only parameter\n * is the cartesian position on the tile.\n *\n * @param {Cartographic} cartographic The cartographic position.\n * @param {Function} callback The function to be called when a new tile is loaded containing the updated cartographic.\n * @returns {Function} The function to remove this callback from the quadtree.\n */\nQuadtreePrimitive.prototype.updateHeight = function (cartographic, callback) {\n  const primitive = this;\n  const object = {\n    positionOnEllipsoidSurface: undefined,\n    positionCartographic: cartographic,\n    level: -1,\n    callback: callback,\n  };\n\n  object.removeFunc = function () {\n    const addedCallbacks = primitive._addHeightCallbacks;\n    const length = addedCallbacks.length;\n    for (let i = 0; i < length; ++i) {\n      if (addedCallbacks[i] === object) {\n        addedCallbacks.splice(i, 1);\n        break;\n      }\n    }\n    primitive._removeHeightCallbacks.push(object);\n    if (object.callback) {\n      object.callback = undefined;\n    }\n  };\n\n  primitive._addHeightCallbacks.push(object);\n  return object.removeFunc;\n};\n\n/**\n * Updates the tile provider imagery and continues to process the tile load queue.\n * @private\n */\nQuadtreePrimitive.prototype.update = function (frameState) {\n  if (defined(this._tileProvider.update)) {\n    this._tileProvider.update(frameState);\n  }\n};\n\nfunction clearTileLoadQueue(primitive) {\n  const debug = primitive._debug;\n  debug.maxDepth = 0;\n  debug.maxDepthVisited = 0;\n  debug.tilesVisited = 0;\n  debug.tilesCulled = 0;\n  debug.tilesRendered = 0;\n  debug.tilesWaitingForChildren = 0;\n\n  primitive._tileLoadQueueHigh.length = 0;\n  primitive._tileLoadQueueMedium.length = 0;\n  primitive._tileLoadQueueLow.length = 0;\n}\n\n/**\n * Initializes values for a new render frame and prepare the tile load queue.\n * @private\n */\nQuadtreePrimitive.prototype.beginFrame = function (frameState) {\n  const passes = frameState.passes;\n  if (!passes.render) {\n    return;\n  }\n\n  if (this._tilesInvalidated) {\n    invalidateAllTiles(this);\n    this._tilesInvalidated = false;\n  }\n\n  // Gets commands for any texture re-projections\n  this._tileProvider.initialize(frameState);\n\n  clearTileLoadQueue(this);\n\n  if (this._debug.suspendLodUpdate) {\n    return;\n  }\n\n  this._tileReplacementQueue.markStartOfRenderFrame();\n  this._tilesRenderedThisFrame.clear();\n};\n\n/**\n * Selects new tiles to load based on the frame state and creates render commands.\n * @private\n */\nQuadtreePrimitive.prototype.render = function (frameState) {\n  const passes = frameState.passes;\n  const tileProvider = this._tileProvider;\n\n  if (passes.render) {\n    tileProvider.beginUpdate(frameState);\n\n    selectTilesForRendering(this, frameState);\n    createRenderCommandsForSelectedTiles(this, frameState);\n\n    tileProvider.endUpdate(frameState);\n  }\n\n  if (passes.pick && this._tilesToRender.length > 0) {\n    tileProvider.updateForPick(frameState);\n  }\n};\n\n/**\n * Checks if the load queue length has changed since the last time we raised a queue change event - if so, raises\n * a new change event at the end of the render cycle.\n * @private\n */\nfunction updateTileLoadProgress(primitive, frameState) {\n  const currentLoadQueueLength =\n    primitive._tileLoadQueueHigh.length +\n    primitive._tileLoadQueueMedium.length +\n    primitive._tileLoadQueueLow.length;\n\n  if (\n    currentLoadQueueLength !== primitive._lastTileLoadQueueLength ||\n    primitive._tilesInvalidated\n  ) {\n    const raiseEvent = Event.prototype.raiseEvent.bind(\n      primitive._tileLoadProgressEvent,\n      currentLoadQueueLength,\n    );\n    frameState.afterRender.push(() => {\n      raiseEvent();\n      return true;\n    });\n    primitive._lastTileLoadQueueLength = currentLoadQueueLength;\n  }\n\n  const debug = primitive._debug;\n  if (debug.enableDebugOutput && !debug.suspendLodUpdate) {\n    debug.maxDepth = primitive._tilesToRender.reduce(function (max, tile) {\n      return Math.max(max, tile.level);\n    }, -1);\n    debug.tilesRendered = primitive._tilesToRender.length;\n\n    if (\n      debug.tilesVisited !== debug.lastTilesVisited ||\n      debug.tilesRendered !== debug.lastTilesRendered ||\n      debug.tilesCulled !== debug.lastTilesCulled ||\n      debug.maxDepth !== debug.lastMaxDepth ||\n      debug.tilesWaitingForChildren !== debug.lastTilesWaitingForChildren ||\n      debug.maxDepthVisited !== debug.lastMaxDepthVisited\n    ) {\n      console.log(\n        `Visited ${debug.tilesVisited}, Rendered: ${debug.tilesRendered}, Culled: ${debug.tilesCulled}, Max Depth Rendered: ${debug.maxDepth}, Max Depth Visited: ${debug.maxDepthVisited}, Waiting for children: ${debug.tilesWaitingForChildren}`,\n      );\n\n      debug.lastTilesVisited = debug.tilesVisited;\n      debug.lastTilesRendered = debug.tilesRendered;\n      debug.lastTilesCulled = debug.tilesCulled;\n      debug.lastMaxDepth = debug.maxDepth;\n      debug.lastTilesWaitingForChildren = debug.tilesWaitingForChildren;\n      debug.lastMaxDepthVisited = debug.maxDepthVisited;\n    }\n  }\n}\n\n/**\n * Updates terrain heights.\n * @private\n */\nQuadtreePrimitive.prototype.endFrame = function (frameState) {\n  const passes = frameState.passes;\n  if (!passes.render || frameState.mode === SceneMode.MORPHING) {\n    // Only process the load queue for a single pass.\n    // Don't process the load queue or update heights during the morph flights.\n    return;\n  }\n\n  // Load/create resources for terrain and imagery. Prepare texture re-projections for the next frame.\n  processTileLoadQueue(this, frameState);\n  updateHeights(this, frameState);\n  updateTileLoadProgress(this, frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @memberof QuadtreePrimitive\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see QuadtreePrimitive#destroy\n */\nQuadtreePrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @memberof QuadtreePrimitive\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * primitive = primitive && primitive.destroy();\n *\n * @see QuadtreePrimitive#isDestroyed\n */\nQuadtreePrimitive.prototype.destroy = function () {\n  this._tileProvider = this._tileProvider && this._tileProvider.destroy();\n};\n\nlet comparisonPoint;\nconst centerScratch = new Cartographic();\nfunction compareDistanceToPoint(a, b) {\n  let center = Rectangle.center(a.rectangle, centerScratch);\n  const alon = center.longitude - comparisonPoint.longitude;\n  const alat = center.latitude - comparisonPoint.latitude;\n\n  center = Rectangle.center(b.rectangle, centerScratch);\n  const blon = center.longitude - comparisonPoint.longitude;\n  const blat = center.latitude - comparisonPoint.latitude;\n\n  return alon * alon + alat * alat - (blon * blon + blat * blat);\n}\n\nconst cameraOriginScratch = new Cartesian3();\nlet rootTraversalDetails = [];\n\nfunction selectTilesForRendering(primitive, frameState) {\n  const debug = primitive._debug;\n  if (debug.suspendLodUpdate) {\n    return;\n  }\n\n  // Clear the render list.\n  const tilesToRender = primitive._tilesToRender;\n  tilesToRender.length = 0;\n\n  // We can't render anything before the level zero tiles exist.\n  const tileProvider = primitive._tileProvider;\n  if (!defined(primitive._levelZeroTiles)) {\n    const tilingScheme = tileProvider.tilingScheme;\n    if (defined(tilingScheme)) {\n      const tilingScheme = tileProvider.tilingScheme;\n      primitive._levelZeroTiles =\n        QuadtreeTile.createLevelZeroTiles(tilingScheme);\n      const numberOfRootTiles = primitive._levelZeroTiles.length;\n      if (rootTraversalDetails.length < numberOfRootTiles) {\n        rootTraversalDetails = new Array(numberOfRootTiles);\n        for (let i = 0; i < numberOfRootTiles; ++i) {\n          if (rootTraversalDetails[i] === undefined) {\n            rootTraversalDetails[i] = new TraversalDetails();\n          }\n        }\n      }\n    } else {\n      return;\n    }\n  }\n\n  primitive._occluders.ellipsoid.cameraPosition = frameState.camera.positionWC;\n\n  const levelZeroTiles = primitive._levelZeroTiles;\n  const occluders =\n    levelZeroTiles.length > 1 ? primitive._occluders : undefined;\n\n  // Sort the level zero tiles by the distance from the center to the camera.\n  // The level zero tiles aren't necessarily a nice neat quad, so we can't use the\n  // quadtree ordering we use elsewhere in the tree\n  comparisonPoint = frameState.camera.positionCartographic;\n  levelZeroTiles.sort(compareDistanceToPoint);\n\n  const customDataAdded = primitive._addHeightCallbacks;\n  const customDataRemoved = primitive._removeHeightCallbacks;\n\n  customDataAdded.forEach((data) => {\n    const tile = levelZeroTiles.find((tile) =>\n      Rectangle.contains(tile.rectangle, data.positionCartographic),\n    );\n    if (tile) {\n      tile._addedCustomData.push(data);\n    }\n  });\n\n  customDataRemoved.forEach((data) => {\n    const tile = levelZeroTiles.find((tile) =>\n      Rectangle.contains(tile.rectangle, data.positionCartographic),\n    );\n    if (tile) {\n      tile._removedCustomData.push(data);\n    }\n  });\n\n  levelZeroTiles.forEach((tile) => tile.updateCustomData());\n  customDataAdded.length = 0;\n  customDataRemoved.length = 0;\n\n  const camera = frameState.camera;\n\n  primitive._cameraPositionCartographic = camera.positionCartographic;\n  const cameraFrameOrigin = Matrix4.getTranslation(\n    camera.transform,\n    cameraOriginScratch,\n  );\n  primitive._cameraReferenceFrameOriginCartographic =\n    primitive.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(\n      cameraFrameOrigin,\n      primitive._cameraReferenceFrameOriginCartographic,\n    );\n\n  // Traverse in depth-first, near-to-far order.\n  for (let i = 0; i < levelZeroTiles.length; ++i) {\n    const tile = levelZeroTiles[i];\n    primitive._tileReplacementQueue.markTileRendered(tile);\n    if (!tile.renderable) {\n      queueTileLoad(primitive, primitive._tileLoadQueueHigh, tile, frameState);\n      ++debug.tilesWaitingForChildren;\n    } else {\n      visitIfVisible(\n        primitive,\n        tile,\n        tileProvider,\n        frameState,\n        occluders,\n        false,\n        rootTraversalDetails[i],\n      );\n    }\n  }\n\n  primitive._lastSelectionFrameNumber = frameState.frameNumber;\n}\n\nfunction queueTileLoad(primitive, queue, tile, frameState) {\n  if (!tile.needsLoading) {\n    return;\n  }\n\n  if (primitive.tileProvider.computeTileLoadPriority !== undefined) {\n    tile._loadPriority = primitive.tileProvider.computeTileLoadPriority(\n      tile,\n      frameState,\n    );\n  }\n  queue.push(tile);\n}\n\n/**\n * Tracks details of traversing a tile while selecting tiles for rendering.\n * @alias TraversalDetails\n * @constructor\n * @private\n */\nfunction TraversalDetails() {\n  /**\n   * True if all selected (i.e. not culled or refined) tiles in this tile's subtree\n   * are renderable. If the subtree is renderable, we'll render it; no drama.\n   */\n  this.allAreRenderable = true;\n\n  /**\n   * True if any tiles in this tile's subtree were rendered last frame. If any\n   * were, we must render the subtree rather than this tile, because rendering\n   * this tile would cause detail to vanish that was visible last frame, and\n   * that's no good.\n   */\n  this.anyWereRenderedLastFrame = false;\n\n  /**\n   * Counts the number of selected tiles in this tile's subtree that are\n   * not yet ready to be rendered because they need more loading. Note that\n   * this value will _not_ necessarily be zero when\n   * {@link TraversalDetails#allAreRenderable} is true, for subtle reasons.\n   * When {@link TraversalDetails#allAreRenderable} and\n   * {@link TraversalDetails#anyWereRenderedLastFrame} are both false, we\n   * will render this tile instead of any tiles in its subtree and\n   * the `allAreRenderable` value for this tile will reflect only whether _this_\n   * tile is renderable. The `notYetRenderableCount` value, however, will still\n   * reflect the total number of tiles that we are waiting on, including the\n   * ones that we're not rendering. `notYetRenderableCount` is only reset\n   * when a subtree is removed from the render queue because the\n   * `notYetRenderableCount` exceeds the\n   * {@link QuadtreePrimitive#loadingDescendantLimit}.\n   */\n  this.notYetRenderableCount = 0;\n}\n\nfunction TraversalQuadDetails() {\n  this.southwest = new TraversalDetails();\n  this.southeast = new TraversalDetails();\n  this.northwest = new TraversalDetails();\n  this.northeast = new TraversalDetails();\n}\n\nTraversalQuadDetails.prototype.combine = function (result) {\n  const southwest = this.southwest;\n  const southeast = this.southeast;\n  const northwest = this.northwest;\n  const northeast = this.northeast;\n\n  result.allAreRenderable =\n    southwest.allAreRenderable &&\n    southeast.allAreRenderable &&\n    northwest.allAreRenderable &&\n    northeast.allAreRenderable;\n  result.anyWereRenderedLastFrame =\n    southwest.anyWereRenderedLastFrame ||\n    southeast.anyWereRenderedLastFrame ||\n    northwest.anyWereRenderedLastFrame ||\n    northeast.anyWereRenderedLastFrame;\n  result.notYetRenderableCount =\n    southwest.notYetRenderableCount +\n    southeast.notYetRenderableCount +\n    northwest.notYetRenderableCount +\n    northeast.notYetRenderableCount;\n};\n\nconst traversalQuadsByLevel = new Array(31); // level 30 tiles are ~2cm wide at the equator, should be good enough.\nfor (let i = 0; i < traversalQuadsByLevel.length; ++i) {\n  traversalQuadsByLevel[i] = new TraversalQuadDetails();\n}\n\n/**\n * Visits a tile for possible rendering. When we call this function with a tile:\n *\n *    * the tile has been determined to be visible (possibly based on a bounding volume that is not very tight-fitting)\n *    * its parent tile does _not_ meet the SSE (unless ancestorMeetsSse=true, see comments below)\n *    * the tile may or may not be renderable\n *\n * @private\n *\n * @param {Primitive} primitive The QuadtreePrimitive.\n * @param {FrameState} frameState The frame state.\n * @param {QuadtreeTile} tile The tile to visit\n * @param {boolean} ancestorMeetsSse True if a tile higher in the tile tree already met the SSE and we're refining further only\n *                  to maintain detail while that higher tile loads.\n * @param {TraversalDetails} traveralDetails On return, populated with details of how the traversal of this tile went.\n */\nfunction visitTile(\n  primitive,\n  frameState,\n  tile,\n  ancestorMeetsSse,\n  traversalDetails,\n) {\n  const debug = primitive._debug;\n\n  ++debug.tilesVisited;\n\n  primitive._tileReplacementQueue.markTileRendered(tile);\n  tile.updateCustomData();\n\n  if (tile.level > debug.maxDepthVisited) {\n    debug.maxDepthVisited = tile.level;\n  }\n\n  const meetsSse =\n    screenSpaceError(primitive, frameState, tile) <\n    primitive.maximumScreenSpaceError;\n\n  const southwestChild = tile.southwestChild;\n  const southeastChild = tile.southeastChild;\n  const northwestChild = tile.northwestChild;\n  const northeastChild = tile.northeastChild;\n\n  const lastFrame = primitive._lastSelectionFrameNumber;\n  const lastFrameSelectionResult =\n    tile._lastSelectionResultFrame === lastFrame\n      ? tile._lastSelectionResult\n      : TileSelectionResult.NONE;\n\n  const tileProvider = primitive.tileProvider;\n\n  if (meetsSse || ancestorMeetsSse) {\n    // This tile (or an ancestor) is the one we want to render this frame, but we'll do different things depending\n    // on the state of this tile and on what we did _last_ frame.\n\n    // We can render it if _any_ of the following are true:\n    // 1. We rendered it (or kicked it) last frame.\n    // 2. This tile was culled last frame, or it wasn't even visited because an ancestor was culled.\n    // 3. The tile is completely done loading.\n    // 4. a) Terrain is ready, and\n    //    b) All necessary imagery is ready. Necessary imagery is imagery that was rendered with this tile\n    //       or any descendants last frame. Such imagery is required because rendering this tile without\n    //       it would cause detail to disappear.\n    //\n    // Determining condition 4 is more expensive, so we check the others first.\n    //\n    // Note that even if we decide to render a tile here, it may later get \"kicked\" in favor of an ancestor.\n\n    const oneRenderedLastFrame =\n      TileSelectionResult.originalResult(lastFrameSelectionResult) ===\n      TileSelectionResult.RENDERED;\n    const twoCulledOrNotVisited =\n      TileSelectionResult.originalResult(lastFrameSelectionResult) ===\n        TileSelectionResult.CULLED ||\n      lastFrameSelectionResult === TileSelectionResult.NONE;\n    const threeCompletelyLoaded = tile.state === QuadtreeTileLoadState.DONE;\n\n    let renderable =\n      oneRenderedLastFrame || twoCulledOrNotVisited || threeCompletelyLoaded;\n\n    if (!renderable) {\n      // Check the more expensive condition 4 above. This requires details of the thing\n      // we're rendering (e.g. the globe surface), so delegate it to the tile provider.\n      if (defined(tileProvider.canRenderWithoutLosingDetail)) {\n        renderable = tileProvider.canRenderWithoutLosingDetail(tile);\n      }\n    }\n\n    if (renderable) {\n      // Only load this tile if it (not just an ancestor) meets the SSE.\n      if (meetsSse) {\n        queueTileLoad(\n          primitive,\n          primitive._tileLoadQueueMedium,\n          tile,\n          frameState,\n        );\n      }\n      addTileToRenderList(primitive, tile);\n\n      traversalDetails.allAreRenderable = tile.renderable;\n      traversalDetails.anyWereRenderedLastFrame =\n        lastFrameSelectionResult === TileSelectionResult.RENDERED;\n      traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n\n      tile._lastSelectionResultFrame = frameState.frameNumber;\n      tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n      if (!traversalDetails.anyWereRenderedLastFrame) {\n        // Tile is newly-rendered this frame, so update its heights.\n        primitive._tileToUpdateHeights.push(tile);\n      }\n\n      return;\n    }\n\n    // Otherwise, we can't render this tile (or its fill) because doing so would cause detail to disappear\n    // that was visible last frame. Instead, keep rendering any still-visible descendants that were rendered\n    // last frame and render fills for newly-visible descendants. E.g. if we were rendering level 15 last\n    // frame but this frame we want level 14 and the closest renderable level <= 14 is 0, rendering level\n    // zero would be pretty jarring so instead we keep rendering level 15 even though its SSE is better\n    // than required. So fall through to continue traversal...\n    ancestorMeetsSse = true;\n\n    // Load this blocker tile with high priority, but only if this tile (not just an ancestor) meets the SSE.\n    if (meetsSse) {\n      queueTileLoad(primitive, primitive._tileLoadQueueHigh, tile, frameState);\n    }\n  }\n\n  if (tileProvider.canRefine(tile)) {\n    const allAreUpsampled =\n      southwestChild.upsampledFromParent &&\n      southeastChild.upsampledFromParent &&\n      northwestChild.upsampledFromParent &&\n      northeastChild.upsampledFromParent;\n\n    if (allAreUpsampled) {\n      // No point in rendering the children because they're all upsampled.  Render this tile instead.\n      addTileToRenderList(primitive, tile);\n\n      // Rendered tile that's not waiting on children loads with medium priority.\n      queueTileLoad(\n        primitive,\n        primitive._tileLoadQueueMedium,\n        tile,\n        frameState,\n      );\n\n      // Make sure we don't unload the children and forget they're upsampled.\n      primitive._tileReplacementQueue.markTileRendered(southwestChild);\n      primitive._tileReplacementQueue.markTileRendered(southeastChild);\n      primitive._tileReplacementQueue.markTileRendered(northwestChild);\n      primitive._tileReplacementQueue.markTileRendered(northeastChild);\n\n      traversalDetails.allAreRenderable = tile.renderable;\n      traversalDetails.anyWereRenderedLastFrame =\n        lastFrameSelectionResult === TileSelectionResult.RENDERED;\n      traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n\n      tile._lastSelectionResultFrame = frameState.frameNumber;\n      tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n      if (!traversalDetails.anyWereRenderedLastFrame) {\n        // Tile is newly-rendered this frame, so update its heights.\n        primitive._tileToUpdateHeights.push(tile);\n      }\n\n      return;\n    }\n\n    // SSE is not good enough, so refine.\n    tile._lastSelectionResultFrame = frameState.frameNumber;\n    tile._lastSelectionResult = TileSelectionResult.REFINED;\n\n    const firstRenderedDescendantIndex = primitive._tilesToRender.length;\n    const loadIndexLow = primitive._tileLoadQueueLow.length;\n    const loadIndexMedium = primitive._tileLoadQueueMedium.length;\n    const loadIndexHigh = primitive._tileLoadQueueHigh.length;\n    const tilesToUpdateHeightsIndex = primitive._tileToUpdateHeights.length;\n\n    // No need to add the children to the load queue because they'll be added (if necessary) when they're visited.\n    visitVisibleChildrenNearToFar(\n      primitive,\n      southwestChild,\n      southeastChild,\n      northwestChild,\n      northeastChild,\n      frameState,\n      ancestorMeetsSse,\n      traversalDetails,\n    );\n\n    // If no descendant tiles were added to the render list by the function above, it means they were all\n    // culled even though this tile was deemed visible. That's pretty common.\n\n    if (firstRenderedDescendantIndex !== primitive._tilesToRender.length) {\n      // At least one descendant tile was added to the render list.\n      // The traversalDetails tell us what happened while visiting the children.\n\n      const allAreRenderable = traversalDetails.allAreRenderable;\n      const anyWereRenderedLastFrame =\n        traversalDetails.anyWereRenderedLastFrame;\n      const notYetRenderableCount = traversalDetails.notYetRenderableCount;\n      let queuedForLoad = false;\n\n      if (!allAreRenderable && !anyWereRenderedLastFrame) {\n        // Some of our descendants aren't ready to render yet, and none were rendered last frame,\n        // so kick them all out of the render list and render this tile instead. Continue to load them though!\n\n        // Mark the rendered descendants and their ancestors - up to this tile - as kicked.\n        const renderList = primitive._tilesToRender;\n        for (let i = firstRenderedDescendantIndex; i < renderList.length; ++i) {\n          let workTile = renderList[i];\n          while (\n            workTile !== undefined &&\n            workTile._lastSelectionResult !== TileSelectionResult.KICKED &&\n            workTile !== tile\n          ) {\n            workTile._lastSelectionResult = TileSelectionResult.kick(\n              workTile._lastSelectionResult,\n            );\n            workTile = workTile.parent;\n          }\n        }\n\n        // Remove all descendants from the render list and add this tile.\n        primitive._tilesToRender.length = firstRenderedDescendantIndex;\n        primitive._tileToUpdateHeights.length = tilesToUpdateHeightsIndex;\n        addTileToRenderList(primitive, tile);\n\n        tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n        // If we're waiting on heaps of descendants, the above will take too long. So in that case,\n        // load this tile INSTEAD of loading any of the descendants, and tell the up-level we're only waiting\n        // on this tile. Keep doing this until we actually manage to render this tile.\n        const wasRenderedLastFrame =\n          lastFrameSelectionResult === TileSelectionResult.RENDERED;\n        if (\n          !wasRenderedLastFrame &&\n          notYetRenderableCount > primitive.loadingDescendantLimit\n        ) {\n          // Remove all descendants from the load queues.\n          primitive._tileLoadQueueLow.length = loadIndexLow;\n          primitive._tileLoadQueueMedium.length = loadIndexMedium;\n          primitive._tileLoadQueueHigh.length = loadIndexHigh;\n          queueTileLoad(\n            primitive,\n            primitive._tileLoadQueueMedium,\n            tile,\n            frameState,\n          );\n          traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n          queuedForLoad = true;\n        }\n\n        traversalDetails.allAreRenderable = tile.renderable;\n        traversalDetails.anyWereRenderedLastFrame = wasRenderedLastFrame;\n\n        if (!wasRenderedLastFrame) {\n          // Tile is newly-rendered this frame, so update its heights.\n          primitive._tileToUpdateHeights.push(tile);\n        }\n\n        ++debug.tilesWaitingForChildren;\n      }\n\n      if (primitive.preloadAncestors && !queuedForLoad) {\n        queueTileLoad(primitive, primitive._tileLoadQueueLow, tile, frameState);\n      }\n    }\n\n    return;\n  }\n\n  tile._lastSelectionResultFrame = frameState.frameNumber;\n  tile._lastSelectionResult = TileSelectionResult.RENDERED;\n\n  // We'd like to refine but can't because we have no availability data for this tile's children,\n  // so we have no idea if refinining would involve a load or an upsample. We'll have to finish\n  // loading this tile first in order to find that out, so load this refinement blocker with\n  // high priority.\n  addTileToRenderList(primitive, tile);\n  queueTileLoad(primitive, primitive._tileLoadQueueHigh, tile, frameState);\n\n  traversalDetails.allAreRenderable = tile.renderable;\n  traversalDetails.anyWereRenderedLastFrame =\n    lastFrameSelectionResult === TileSelectionResult.RENDERED;\n  traversalDetails.notYetRenderableCount = tile.renderable ? 0 : 1;\n}\n\nfunction visitVisibleChildrenNearToFar(\n  primitive,\n  southwest,\n  southeast,\n  northwest,\n  northeast,\n  frameState,\n  ancestorMeetsSse,\n  traversalDetails,\n) {\n  const cameraPosition = frameState.camera.positionCartographic;\n  const tileProvider = primitive._tileProvider;\n  const occluders = primitive._occluders;\n\n  const quadDetails = traversalQuadsByLevel[southwest.level];\n  const southwestDetails = quadDetails.southwest;\n  const southeastDetails = quadDetails.southeast;\n  const northwestDetails = quadDetails.northwest;\n  const northeastDetails = quadDetails.northeast;\n\n  if (cameraPosition.longitude < southwest.rectangle.east) {\n    if (cameraPosition.latitude < southwest.rectangle.north) {\n      // Camera in southwest quadrant\n      visitIfVisible(\n        primitive,\n        southwest,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        southwestDetails,\n      );\n      visitIfVisible(\n        primitive,\n        southeast,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        southeastDetails,\n      );\n      visitIfVisible(\n        primitive,\n        northwest,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        northwestDetails,\n      );\n      visitIfVisible(\n        primitive,\n        northeast,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        northeastDetails,\n      );\n    } else {\n      // Camera in northwest quadrant\n      visitIfVisible(\n        primitive,\n        northwest,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        northwestDetails,\n      );\n      visitIfVisible(\n        primitive,\n        southwest,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        southwestDetails,\n      );\n      visitIfVisible(\n        primitive,\n        northeast,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        northeastDetails,\n      );\n      visitIfVisible(\n        primitive,\n        southeast,\n        tileProvider,\n        frameState,\n        occluders,\n        ancestorMeetsSse,\n        southeastDetails,\n      );\n    }\n  } else if (cameraPosition.latitude < southwest.rectangle.north) {\n    // Camera southeast quadrant\n    visitIfVisible(\n      primitive,\n      southeast,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      southeastDetails,\n    );\n    visitIfVisible(\n      primitive,\n      southwest,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      southwestDetails,\n    );\n    visitIfVisible(\n      primitive,\n      northeast,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      northeastDetails,\n    );\n    visitIfVisible(\n      primitive,\n      northwest,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      northwestDetails,\n    );\n  } else {\n    // Camera in northeast quadrant\n    visitIfVisible(\n      primitive,\n      northeast,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      northeastDetails,\n    );\n    visitIfVisible(\n      primitive,\n      northwest,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      northwestDetails,\n    );\n    visitIfVisible(\n      primitive,\n      southeast,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      southeastDetails,\n    );\n    visitIfVisible(\n      primitive,\n      southwest,\n      tileProvider,\n      frameState,\n      occluders,\n      ancestorMeetsSse,\n      southwestDetails,\n    );\n  }\n\n  quadDetails.combine(traversalDetails);\n}\n\nfunction containsNeededPosition(primitive, tile) {\n  const rectangle = tile.rectangle;\n  return (\n    (defined(primitive._cameraPositionCartographic) &&\n      Rectangle.contains(rectangle, primitive._cameraPositionCartographic)) ||\n    (defined(primitive._cameraReferenceFrameOriginCartographic) &&\n      Rectangle.contains(\n        rectangle,\n        primitive._cameraReferenceFrameOriginCartographic,\n      ))\n  );\n}\n\nfunction visitIfVisible(\n  primitive,\n  tile,\n  tileProvider,\n  frameState,\n  occluders,\n  ancestorMeetsSse,\n  traversalDetails,\n) {\n  if (\n    tileProvider.computeTileVisibility(tile, frameState, occluders) !==\n    Visibility.NONE\n  ) {\n    return visitTile(\n      primitive,\n      frameState,\n      tile,\n      ancestorMeetsSse,\n      traversalDetails,\n    );\n  }\n\n  ++primitive._debug.tilesCulled;\n  primitive._tileReplacementQueue.markTileRendered(tile);\n\n  traversalDetails.allAreRenderable = true;\n  traversalDetails.anyWereRenderedLastFrame = false;\n  traversalDetails.notYetRenderableCount = 0;\n\n  if (containsNeededPosition(primitive, tile)) {\n    // Load the tile(s) that contains the camera's position and\n    // the origin of its reference frame with medium priority.\n    // But we only need to load until the terrain is available, no need to load imagery.\n    if (!defined(tile.data) || !defined(tile.data.vertexArray)) {\n      queueTileLoad(\n        primitive,\n        primitive._tileLoadQueueMedium,\n        tile,\n        frameState,\n      );\n    }\n\n    const lastFrame = primitive._lastSelectionFrameNumber;\n    const lastFrameSelectionResult =\n      tile._lastSelectionResultFrame === lastFrame\n        ? tile._lastSelectionResult\n        : TileSelectionResult.NONE;\n    if (\n      lastFrameSelectionResult !== TileSelectionResult.CULLED_BUT_NEEDED &&\n      lastFrameSelectionResult !== TileSelectionResult.RENDERED\n    ) {\n      primitive._tileToUpdateHeights.push(tile);\n    }\n\n    tile._lastSelectionResult = TileSelectionResult.CULLED_BUT_NEEDED;\n  } else if (primitive.preloadSiblings || tile.level === 0) {\n    // Load culled level zero tiles with low priority.\n    // For all other levels, only load culled tiles if preloadSiblings is enabled.\n    queueTileLoad(primitive, primitive._tileLoadQueueLow, tile, frameState);\n    tile._lastSelectionResult = TileSelectionResult.CULLED;\n  } else {\n    tile._lastSelectionResult = TileSelectionResult.CULLED;\n  }\n\n  tile._lastSelectionResultFrame = frameState.frameNumber;\n}\n\nfunction screenSpaceError(primitive, frameState, tile) {\n  if (\n    frameState.mode === SceneMode.SCENE2D ||\n    frameState.camera.frustum instanceof OrthographicFrustum ||\n    frameState.camera.frustum instanceof OrthographicOffCenterFrustum\n  ) {\n    return screenSpaceError2D(primitive, frameState, tile);\n  }\n\n  const maxGeometricError =\n    primitive._tileProvider.getLevelMaximumGeometricError(tile.level);\n\n  const distance = tile._distance;\n  const height = frameState.context.drawingBufferHeight;\n  const sseDenominator = frameState.camera.frustum.sseDenominator;\n\n  let error = (maxGeometricError * height) / (distance * sseDenominator);\n\n  if (frameState.fog.enabled) {\n    error -=\n      CesiumMath.fog(distance, frameState.fog.density) * frameState.fog.sse;\n  }\n\n  error /= frameState.pixelRatio;\n\n  return error;\n}\n\nfunction screenSpaceError2D(primitive, frameState, tile) {\n  const camera = frameState.camera;\n  let frustum = camera.frustum;\n  const offCenterFrustum = frustum.offCenterFrustum;\n  if (defined(offCenterFrustum)) {\n    frustum = offCenterFrustum;\n  }\n\n  const context = frameState.context;\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight;\n\n  const maxGeometricError =\n    primitive._tileProvider.getLevelMaximumGeometricError(tile.level);\n  const pixelSize =\n    Math.max(frustum.top - frustum.bottom, frustum.right - frustum.left) /\n    Math.max(width, height);\n  let error = maxGeometricError / pixelSize;\n\n  if (frameState.fog.enabled && frameState.mode !== SceneMode.SCENE2D) {\n    error -=\n      CesiumMath.fog(tile._distance, frameState.fog.density) *\n      frameState.fog.sse;\n  }\n\n  error /= frameState.pixelRatio;\n\n  return error;\n}\n\nfunction addTileToRenderList(primitive, tile) {\n  primitive._tilesToRender.push(tile);\n  primitive._tilesRenderedThisFrame.add(tile);\n}\n\nfunction processTileLoadQueue(primitive, frameState) {\n  const tileLoadQueueHigh = primitive._tileLoadQueueHigh;\n  const tileLoadQueueMedium = primitive._tileLoadQueueMedium;\n  const tileLoadQueueLow = primitive._tileLoadQueueLow;\n\n  if (\n    tileLoadQueueHigh.length === 0 &&\n    tileLoadQueueMedium.length === 0 &&\n    tileLoadQueueLow.length === 0\n  ) {\n    return;\n  }\n\n  // Remove any tiles that were not used this frame beyond the number\n  // we're allowed to keep.\n  primitive._tileReplacementQueue.trimTiles(primitive.tileCacheSize);\n\n  const endTime = getTimestamp() + primitive._loadQueueTimeSlice;\n  const tileProvider = primitive._tileProvider;\n\n  let didSomeLoading = processSinglePriorityLoadQueue(\n    primitive,\n    frameState,\n    tileProvider,\n    endTime,\n    tileLoadQueueHigh,\n    false,\n  );\n  didSomeLoading = processSinglePriorityLoadQueue(\n    primitive,\n    frameState,\n    tileProvider,\n    endTime,\n    tileLoadQueueMedium,\n    didSomeLoading,\n  );\n  processSinglePriorityLoadQueue(\n    primitive,\n    frameState,\n    tileProvider,\n    endTime,\n    tileLoadQueueLow,\n    didSomeLoading,\n  );\n}\n\nfunction sortByLoadPriority(a, b) {\n  return a._loadPriority - b._loadPriority;\n}\n\nfunction processSinglePriorityLoadQueue(\n  primitive,\n  frameState,\n  tileProvider,\n  endTime,\n  loadQueue,\n  didSomeLoading,\n) {\n  if (tileProvider.computeTileLoadPriority !== undefined) {\n    loadQueue.sort(sortByLoadPriority);\n  }\n\n  for (\n    let i = 0, len = loadQueue.length;\n    i < len && (getTimestamp() < endTime || !didSomeLoading);\n    ++i\n  ) {\n    const tile = loadQueue[i];\n    primitive._tileReplacementQueue.markTileRendered(tile);\n    tileProvider.loadTile(frameState, tile);\n    didSomeLoading = true;\n  }\n\n  return didSomeLoading;\n}\n\nconst scratchRay = new Ray();\nconst scratchCartographic = new Cartographic();\nconst scratchPosition = new Cartesian3();\nconst scratchArray = [];\n\nfunction updateHeights(primitive, frameState) {\n  if (!defined(primitive.tileProvider.tilingScheme)) {\n    return;\n  }\n\n  const tryNextFrame = scratchArray;\n  tryNextFrame.length = 0;\n  const tilesToUpdateHeights = primitive._tileToUpdateHeights;\n\n  const startTime = getTimestamp();\n  const timeSlice = primitive._updateHeightsTimeSlice;\n  const endTime = startTime + timeSlice;\n\n  const mode = frameState.mode;\n  const projection = frameState.mapProjection;\n  const ellipsoid = primitive.tileProvider.tilingScheme.ellipsoid;\n  let i;\n\n  while (tilesToUpdateHeights.length > 0) {\n    const tile = tilesToUpdateHeights[0];\n    if (!defined(tile.data) || !defined(tile.data.mesh)) {\n      // Tile isn't loaded enough yet, so try again next frame if this tile is still\n      // being rendered.\n      const selectionResult =\n        tile._lastSelectionResultFrame === primitive._lastSelectionFrameNumber\n          ? tile._lastSelectionResult\n          : TileSelectionResult.NONE;\n      if (\n        selectionResult === TileSelectionResult.RENDERED ||\n        selectionResult === TileSelectionResult.CULLED_BUT_NEEDED\n      ) {\n        tryNextFrame.push(tile);\n      }\n      // Ensure stale position cache is cleared\n      tile.clearPositionCache();\n      tilesToUpdateHeights.shift();\n      continue;\n    }\n    const customData = tile.customData;\n    if (!defined(tile._customDataIterator)) {\n      tile._customDataIterator = customData.values();\n    }\n    const customDataIterator = tile._customDataIterator;\n\n    let timeSliceMax = false;\n    let nextData;\n    while (!(nextData = customDataIterator.next()).done) {\n      const data = nextData.value;\n\n      // No need to run this code when the tile is upsampled, because the height will be the same as its parent.\n      const terrainData = tile.data.terrainData;\n      const upsampledGeometryFromParent =\n        defined(terrainData) && terrainData.wasCreatedByUpsampling();\n\n      if (tile.level > data.level && !upsampledGeometryFromParent) {\n        let position;\n        // find cached entry\n        const cachedData = tile.getPositionCacheEntry(\n          data.positionCartographic,\n          primitive.maximumScreenSpaceError,\n        );\n        if (defined(cachedData)) {\n          // cache hit\n          position = cachedData;\n        } else {\n          if (!defined(data.positionOnEllipsoidSurface)) {\n            // cartesian has to be on the ellipsoid surface for `ellipsoid.geodeticSurfaceNormal`\n            data.positionOnEllipsoidSurface = Cartesian3.fromRadians(\n              data.positionCartographic.longitude,\n              data.positionCartographic.latitude,\n              0.0,\n              ellipsoid,\n            );\n          }\n\n          if (mode === SceneMode.SCENE3D) {\n            const surfaceNormal = ellipsoid.geodeticSurfaceNormal(\n              data.positionOnEllipsoidSurface,\n              scratchRay.direction,\n            );\n\n            // compute origin point\n\n            // Try to find the intersection point between the surface normal and z-axis.\n            // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n            const rayOrigin = ellipsoid.getSurfaceNormalIntersectionWithZAxis(\n              data.positionOnEllipsoidSurface,\n              11500.0,\n              scratchRay.origin,\n            );\n\n            // Theoretically, not with Earth datums, the intersection point can be outside the ellipsoid\n            if (!defined(rayOrigin)) {\n              // intersection point is outside the ellipsoid, try other value\n              // minimum height (-11500.0) for the terrain set, need to get this information from the terrain provider\n              let minimumHeight = 0.0;\n              if (defined(tile.data.tileBoundingRegion)) {\n                minimumHeight = tile.data.tileBoundingRegion.minimumHeight;\n              }\n              const magnitude = Math.min(minimumHeight, -11500.0);\n\n              // multiply by the *positive* value of the magnitude\n              const vectorToMinimumPoint = Cartesian3.multiplyByScalar(\n                surfaceNormal,\n                Math.abs(magnitude) + 1,\n                scratchPosition,\n              );\n              Cartesian3.subtract(\n                data.positionOnEllipsoidSurface,\n                vectorToMinimumPoint,\n                scratchRay.origin,\n              );\n            }\n          } else {\n            Cartographic.clone(data.positionCartographic, scratchCartographic);\n\n            // minimum height for the terrain set, need to get this information from the terrain provider\n            scratchCartographic.height = -11500.0;\n            projection.project(scratchCartographic, scratchPosition);\n            Cartesian3.fromElements(\n              scratchPosition.z,\n              scratchPosition.x,\n              scratchPosition.y,\n              scratchPosition,\n            );\n            Cartesian3.clone(scratchPosition, scratchRay.origin);\n            Cartesian3.clone(Cartesian3.UNIT_X, scratchRay.direction);\n          }\n\n          position = tile.data.pick(\n            scratchRay,\n            mode,\n            projection,\n            false,\n            scratchPosition,\n          );\n\n          if (defined(position)) {\n            // Store the computed position in the cache for future reuse\n            tile.setPositionCacheEntry(\n              data.positionCartographic,\n              primitive.maximumScreenSpaceError,\n              position,\n            );\n          }\n        }\n        if (defined(position)) {\n          if (defined(data.callback)) {\n            const positionCarto = ellipsoid.cartesianToCartographic(\n              position,\n              scratchCartographic,\n            );\n            data.callback(positionCarto);\n          }\n          data.level = tile.level;\n        }\n      }\n\n      if (getTimestamp() >= endTime) {\n        timeSliceMax = true;\n        break;\n      }\n    }\n\n    if (timeSliceMax) {\n      tile._customDataIterator = customDataIterator;\n      break;\n    } else {\n      tile._customDataIterator = undefined;\n      tilesToUpdateHeights.shift();\n    }\n  }\n  for (i = 0; i < tryNextFrame.length; i++) {\n    tilesToUpdateHeights.push(tryNextFrame[i]);\n  }\n}\n\nfunction createRenderCommandsForSelectedTiles(primitive, frameState) {\n  const tileProvider = primitive._tileProvider;\n  const tilesToRender = primitive._tilesToRender;\n\n  for (let i = 0, len = tilesToRender.length; i < len; ++i) {\n    const tile = tilesToRender[i];\n    tileProvider.showTileThisFrame(tile, frameState);\n  }\n}\nexport default QuadtreePrimitive;\n","import defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport QuadtreeTileLoadState from \"./QuadtreeTileLoadState.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\n/**\n * A simple Least Recently Used (LRU) cache implementation.\n */\nclass LRUCache {\n  constructor(maxSize) {\n    this.maxSize = maxSize;\n    this.cache = new Map();\n  }\n\n  get(key) {\n    if (!this.cache.has(key)) {\n      return undefined;\n    }\n    // Move accessed item to the end (most recently used)\n    const value = this.cache.get(key);\n    this.cache.delete(key);\n    this.cache.set(key, value);\n    return value;\n  }\n\n  set(key, value) {\n    if (this.cache.has(key)) {\n      this.cache.delete(key);\n    } else if (this.cache.size >= this.maxSize) {\n      // Remove the least recently used (first entry)\n      const firstKey = this.cache.keys().next().value;\n      this.cache.delete(firstKey);\n    }\n    this.cache.set(key, value);\n  }\n\n  clear() {\n    this.cache.clear();\n  }\n}\n\n// Maximum cache entries per tile\nconst MAX_CACHE_ENTRIES = 1000;\n\n/**\n * A single tile in a {@link QuadtreePrimitive}.\n *\n * @alias QuadtreeTile\n * @constructor\n * @private\n *\n * @param {number} options.level The level of the tile in the quadtree.\n * @param {number} options.x The X coordinate of the tile in the quadtree.  0 is the westernmost tile.\n * @param {number} options.y The Y coordinate of the tile in the quadtree.  0 is the northernmost tile.\n * @param {TilingScheme} options.tilingScheme The tiling scheme in which this tile exists.\n * @param {QuadtreeTile} [options.parent] This tile's parent, or undefined if this is a root tile.\n */\nfunction QuadtreeTile(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options)) {\n    throw new DeveloperError(\"options is required.\");\n  }\n  if (!defined(options.x)) {\n    throw new DeveloperError(\"options.x is required.\");\n  } else if (!defined(options.y)) {\n    throw new DeveloperError(\"options.y is required.\");\n  } else if (options.x < 0 || options.y < 0) {\n    throw new DeveloperError(\n      \"options.x and options.y must be greater than or equal to zero.\",\n    );\n  }\n  if (!defined(options.level)) {\n    throw new DeveloperError(\n      \"options.level is required and must be greater than or equal to zero.\",\n    );\n  }\n  if (!defined(options.tilingScheme)) {\n    throw new DeveloperError(\"options.tilingScheme is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._tilingScheme = options.tilingScheme;\n  this._x = options.x;\n  this._y = options.y;\n  this._level = options.level;\n  this._parent = options.parent;\n  this._rectangle = this._tilingScheme.tileXYToRectangle(\n    this._x,\n    this._y,\n    this._level,\n  );\n\n  this._southwestChild = undefined;\n  this._southeastChild = undefined;\n  this._northwestChild = undefined;\n  this._northeastChild = undefined;\n\n  // TileReplacementQueue gets/sets these private properties.\n  this.replacementPrevious = undefined;\n  this.replacementNext = undefined;\n\n  // The distance from the camera to this tile, updated when the tile is selected\n  // for rendering.  We can get rid of this if we have a better way to sort by\n  // distance - for example, by using the natural ordering of a quadtree.\n  // QuadtreePrimitive gets/sets this private property.\n  this._distance = 0.0;\n  this._loadPriority = 0.0;\n\n  this._customData = new Set();\n  this._customDataIterator = undefined;\n  this._addedCustomData = [];\n  this._removedCustomData = [];\n  this._lastSelectionResult = TileSelectionResult.NONE;\n  this._lastSelectionResultFrame = undefined;\n  this._loadedCallbacks = {};\n\n  // Cache for storing computed position values per tile to avoid redundant calculations\n  this._positionCache = new LRUCache(MAX_CACHE_ENTRIES);\n\n  /**\n   * Gets or sets the current state of the tile in the tile load pipeline.\n   * @type {QuadtreeTileLoadState}\n   * @default {@link QuadtreeTileLoadState.START}\n   */\n  this.state = QuadtreeTileLoadState.START;\n\n  /**\n   * Gets or sets a value indicating whether or not the tile is currently renderable.\n   * @type {boolean}\n   * @default false\n   */\n  this.renderable = false;\n\n  /**\n   * Gets or set a value indicating whether or not the tile was entirely upsampled from its\n   * parent tile.  If all four children of a parent tile were upsampled from the parent,\n   * we will render the parent instead of the children even if the LOD indicates that\n   * the children would be preferable.\n   * @type {boolean}\n   * @default false\n   */\n  this.upsampledFromParent = false;\n\n  /**\n   * Gets or sets the additional data associated with this tile.  The exact content is specific to the\n   * {@link QuadtreeTileProvider}.\n   * @type {object}\n   * @default undefined\n   */\n  this.data = undefined;\n}\n\n/**\n * Creates a rectangular set of tiles for level of detail zero, the coarsest, least detailed level.\n *\n * @memberof QuadtreeTile\n *\n * @param {TilingScheme} tilingScheme The tiling scheme for which the tiles are to be created.\n * @returns {QuadtreeTile[]} An array containing the tiles at level of detail zero, starting with the\n * tile in the northwest corner and followed by the tile (if any) to its east.\n */\nQuadtreeTile.createLevelZeroTiles = function (tilingScheme) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(tilingScheme)) {\n    throw new DeveloperError(\"tilingScheme is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const numberOfLevelZeroTilesX = tilingScheme.getNumberOfXTilesAtLevel(0);\n  const numberOfLevelZeroTilesY = tilingScheme.getNumberOfYTilesAtLevel(0);\n\n  const result = new Array(numberOfLevelZeroTilesX * numberOfLevelZeroTilesY);\n\n  let index = 0;\n  for (let y = 0; y < numberOfLevelZeroTilesY; ++y) {\n    for (let x = 0; x < numberOfLevelZeroTilesX; ++x) {\n      result[index++] = new QuadtreeTile({\n        tilingScheme: tilingScheme,\n        x: x,\n        y: y,\n        level: 0,\n      });\n    }\n  }\n\n  return result;\n};\n\n/**\n * Creates a spatial hash key for the given longitude, latitude, and tile level.\n * The precision is adjusted based on the tile level and extent to achieve finer precision at higher levels.\n *\n * This function calculates the spatial hash key by first determining the precision at the given tile for the current maximum screenspace error (MAX_ERROR_PX),\n * and then rounding the longitude and latitude to that precision for consistency.\n *\n * The steps for computing the level precision are as follows:\n *\n * 1. Compute the resolution (meters per pixel) at the given level:\n *      level_resolution_m = (2 * PI * RADIUS) / (2^level * TILE_SIZE)\n *\n * 2. Compute the target precision in meters:\n *      level_precision_m = level_resolution_m * MAX_ERROR_PX\n *\n * 3. Compute the target precision to radians:\n *      level_precision_rad = level_precision_m / BODY_RADIUS\n *\n * This simplifies to:\n *      level_precision_rad = (2 * PI * MAX_ERROR_PX) / (2^level * TILE_SIZE)\n * which can also be written as:\n *      level_precision_rad = (PI * MAX_ERROR_PX) / (2^(level-1) * TILE_SIZE)\n *\n * The computed level_precision_rad is then used to round the input longitude and latitude,\n * ensuring that positions that fall within the same spatial bin produce the same hash key.\n *\n * The constants below are computed once since they are fixed for the given configuration.\n *\n * @param {number} longitude - The longitude in radians.\n * @param {number} latitude - The latitude in radians.\n * @param {Rectangle} rectangle - The quadtree tile extents.\n * @returns {string} A string representing the spatial hash key.\n */\nconst TILE_SIZE = 256;\n\nfunction createSpatialHashKey(\n  longitude,\n  latitude,\n  rectangle,\n  maximumScreenSpaceError,\n) {\n  // Adjust precision based on quadtree level - higher levels get finer precision\n  const maxError = (rectangle.width / TILE_SIZE) * maximumScreenSpaceError;\n  // Round to the grid precision\n  const lonGrid = Math.floor(longitude / maxError) * maxError;\n  const latGrid = Math.floor(latitude / maxError) * maxError;\n  return `${lonGrid.toFixed(10)},${latGrid.toFixed(10)}`;\n}\n\n/**\n * Generates a unique cache key for a given cartographic position.\n * @memberof QuadtreeTile\n *\n * @param {Cartographic} cartographic The cartographic coordinates.\n * @param {number} maximumScreenSpaceError The maximum screen-space error, in pixels, that is allowed.\n *        A higher maximum error will render fewer tiles and improve performance, while a lower\n *        value will improve visual quality.\n * @returns {string} A string representing the spatial hash key.\n */\nQuadtreeTile.prototype._getCacheKey = function (\n  cartographic,\n  maximumScreenSpaceError,\n) {\n  return createSpatialHashKey(\n    cartographic.longitude,\n    cartographic.latitude,\n    this._rectangle,\n    maximumScreenSpaceError,\n  );\n};\n\n/**\n * Retrieves a cached position for the specified cartographic position.\n *\n * @memberof QuadtreeTile\n *\n * @param {Cartographic} cartographic - The cartographic coordinates.\n * @param {number} maximumScreenSpaceError The maximum screen-space error, in pixels, that is allowed.\n *        A higher maximum error will render fewer tiles and improve performance, while a lower\n *        value will improve visual quality.\n * @returns {object|undefined} The cached position data or undefined if not found.\n */\nQuadtreeTile.prototype.getPositionCacheEntry = function (\n  cartographic,\n  maximumScreenSpaceError,\n) {\n  return this._positionCache.get(\n    this._getCacheKey(cartographic, maximumScreenSpaceError),\n  );\n};\n\n/**\n * Sets a position on the cache for this tile.\n *\n * @memberof QuadtreeTile\n *\n * @param {Cartographic} cartographic - The cartographic coordinates.\n * @param {number} maximumScreenSpaceError The maximum screen-space error, in pixels, that is allowed.\n *        A higher maximum error will render fewer tiles and improve performance, while a lower\n *        value will improve visual quality.\n * @param {object} value - The object to be cached.\n */\nQuadtreeTile.prototype.setPositionCacheEntry = function (\n  cartographic,\n  maximumScreenSpaceError,\n  value,\n) {\n  this._positionCache.set(\n    this._getCacheKey(cartographic, maximumScreenSpaceError),\n    value,\n  );\n};\n\n/**\n * Clears the position cache for this tile.\n * This function removes all cached positions that were previously stored\n * to optimize height computations.\n *\n * @memberof QuadtreeTile\n */\nQuadtreeTile.prototype.clearPositionCache = function () {\n  if (this._positionCache.size > 0) {\n    this._positionCache.clear();\n  }\n};\n\nQuadtreeTile.prototype.updateCustomData = function () {\n  const added = this._addedCustomData;\n  const removed = this._removedCustomData;\n  if (added.length === 0 && removed.length === 0) {\n    return;\n  }\n\n  const customData = this.customData;\n  for (let i = 0; i < added.length; ++i) {\n    const data = added[i];\n    customData.add(data);\n\n    const child = childTileAtPosition(this, data.positionCartographic);\n    child._addedCustomData.push(data);\n  }\n  this._addedCustomData.length = 0;\n\n  for (let i = 0; i < removed.length; ++i) {\n    const data = removed[i];\n    if (customData.has(data)) {\n      customData.delete(data);\n    }\n\n    const child = childTileAtPosition(this, data.positionCartographic);\n    child._removedCustomData.push(data);\n  }\n  this._removedCustomData.length = 0;\n};\n\nconst splitPointScratch = new Cartographic();\n\n/**\n * Determines which child tile that contains the specified position. Assumes the position is within\n * the bounds of the parent tile.\n * @private\n * @param {QuadtreeTile} tile - The parent tile.\n * @param {Cartographic} positionCartographic - The cartographic position.\n * @returns {QuadtreeTile} The child tile that contains the position.\n */\nfunction childTileAtPosition(tile, positionCartographic) {\n  // Can't assume that a given tiling scheme divides a parent into four tiles at its rectangle's center.\n  // But we can safely take any child tile's rectangle and take its center-facing corner as the parent's split point.\n  const nwChildRectangle = tile.northwestChild.rectangle;\n  const tileSplitPoint = Rectangle.southeast(\n    nwChildRectangle,\n    splitPointScratch,\n  );\n\n  const x = positionCartographic.longitude >= tileSplitPoint.longitude ? 1 : 0;\n  const y = positionCartographic.latitude < tileSplitPoint.latitude ? 1 : 0;\n\n  switch (y * 2 + x) {\n    case 0:\n      return tile.northwestChild;\n    case 1:\n      return tile.northeastChild;\n    case 2:\n      return tile.southwestChild;\n    default:\n      return tile.southeastChild;\n  }\n}\n\nObject.defineProperties(QuadtreeTile.prototype, {\n  /**\n   * Gets the tiling scheme used to tile the surface.\n   * @memberof QuadtreeTile.prototype\n   * @type {TilingScheme}\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the tile X coordinate.\n   * @memberof QuadtreeTile.prototype\n   * @type {number}\n   */\n  x: {\n    get: function () {\n      return this._x;\n    },\n  },\n\n  /**\n   * Gets the tile Y coordinate.\n   * @memberof QuadtreeTile.prototype\n   * @type {number}\n   */\n  y: {\n    get: function () {\n      return this._y;\n    },\n  },\n\n  /**\n   * Gets the level-of-detail, where zero is the coarsest, least-detailed.\n   * @memberof QuadtreeTile.prototype\n   * @type {number}\n   */\n  level: {\n    get: function () {\n      return this._level;\n    },\n  },\n\n  /**\n   * Gets the parent tile of this tile.\n   * @memberof QuadtreeTile.prototype\n   * @type {QuadtreeTile}\n   */\n  parent: {\n    get: function () {\n      return this._parent;\n    },\n  },\n\n  /**\n   * Gets the cartographic rectangle of the tile, with north, south, east and\n   * west properties in radians.\n   * @memberof QuadtreeTile.prototype\n   * @type {Rectangle}\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n\n  /**\n   * An array of tiles that is at the next level of the tile tree.\n   * @memberof QuadtreeTile.prototype\n   * @type {QuadtreeTile[]}\n   */\n  children: {\n    get: function () {\n      return [\n        this.northwestChild,\n        this.northeastChild,\n        this.southwestChild,\n        this.southeastChild,\n      ];\n    },\n  },\n\n  /**\n   * Gets the southwest child tile.\n   * @memberof QuadtreeTile.prototype\n   * @type {QuadtreeTile}\n   */\n  southwestChild: {\n    get: function () {\n      if (!defined(this._southwestChild)) {\n        this._southwestChild = new QuadtreeTile({\n          tilingScheme: this.tilingScheme,\n          x: this.x * 2,\n          y: this.y * 2 + 1,\n          level: this.level + 1,\n          parent: this,\n        });\n      }\n      return this._southwestChild;\n    },\n  },\n\n  /**\n   * Gets the southeast child tile.\n   * @memberof QuadtreeTile.prototype\n   * @type {QuadtreeTile}\n   */\n  southeastChild: {\n    get: function () {\n      if (!defined(this._southeastChild)) {\n        this._southeastChild = new QuadtreeTile({\n          tilingScheme: this.tilingScheme,\n          x: this.x * 2 + 1,\n          y: this.y * 2 + 1,\n          level: this.level + 1,\n          parent: this,\n        });\n      }\n      return this._southeastChild;\n    },\n  },\n\n  /**\n   * Gets the northwest child tile.\n   * @memberof QuadtreeTile.prototype\n   * @type {QuadtreeTile}\n   */\n  northwestChild: {\n    get: function () {\n      if (!defined(this._northwestChild)) {\n        this._northwestChild = new QuadtreeTile({\n          tilingScheme: this.tilingScheme,\n          x: this.x * 2,\n          y: this.y * 2,\n          level: this.level + 1,\n          parent: this,\n        });\n      }\n      return this._northwestChild;\n    },\n  },\n\n  /**\n   * Gets the northeast child tile.\n   * @memberof QuadtreeTile.prototype\n   * @type {QuadtreeTile}\n   */\n  northeastChild: {\n    get: function () {\n      if (!defined(this._northeastChild)) {\n        this._northeastChild = new QuadtreeTile({\n          tilingScheme: this.tilingScheme,\n          x: this.x * 2 + 1,\n          y: this.y * 2,\n          level: this.level + 1,\n          parent: this,\n        });\n      }\n      return this._northeastChild;\n    },\n  },\n\n  /**\n   * A set of objects associated with this tile.\n   * @memberof QuadtreeTile.prototype\n   * @type {Set}\n   */\n  customData: {\n    get: function () {\n      return this._customData;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not this tile needs further loading.\n   * This property will return true if the {@link QuadtreeTile#state} is\n   * <code>START</code> or <code>LOADING</code>.\n   * @memberof QuadtreeTile.prototype\n   * @type {boolean}\n   */\n  needsLoading: {\n    get: function () {\n      return this.state < QuadtreeTileLoadState.DONE;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not this tile is eligible to be unloaded.\n   * Typically, a tile is ineligible to be unloaded while an asynchronous operation,\n   * such as a request for data, is in progress on it.  A tile will never be\n   * unloaded while it is needed for rendering, regardless of the value of this\n   * property.  If {@link QuadtreeTile#data} is defined and has an\n   * <code>eligibleForUnloading</code> property, the value of that property is returned.\n   * Otherwise, this property returns true.\n   * @memberof QuadtreeTile.prototype\n   * @type {boolean}\n   */\n  eligibleForUnloading: {\n    get: function () {\n      let result = true;\n\n      if (defined(this.data)) {\n        result = this.data.eligibleForUnloading;\n        if (!defined(result)) {\n          result = true;\n        }\n      }\n\n      return result;\n    },\n  },\n});\n\nQuadtreeTile.prototype.findLevelZeroTile = function (levelZeroTiles, x, y) {\n  const xTiles = this.tilingScheme.getNumberOfXTilesAtLevel(0);\n  if (x < 0) {\n    x += xTiles;\n  } else if (x >= xTiles) {\n    x -= xTiles;\n  }\n\n  if (y < 0 || y >= this.tilingScheme.getNumberOfYTilesAtLevel(0)) {\n    return undefined;\n  }\n\n  return levelZeroTiles.filter(function (tile) {\n    return tile.x === x && tile.y === y;\n  })[0];\n};\n\nQuadtreeTile.prototype.findTileToWest = function (levelZeroTiles) {\n  const parent = this.parent;\n  if (parent === undefined) {\n    return this.findLevelZeroTile(levelZeroTiles, this.x - 1, this.y);\n  }\n\n  if (parent.southeastChild === this) {\n    return parent.southwestChild;\n  } else if (parent.northeastChild === this) {\n    return parent.northwestChild;\n  }\n\n  const westOfParent = parent.findTileToWest(levelZeroTiles);\n  if (westOfParent === undefined) {\n    return undefined;\n  } else if (parent.southwestChild === this) {\n    return westOfParent.southeastChild;\n  }\n  return westOfParent.northeastChild;\n};\n\nQuadtreeTile.prototype.findTileToEast = function (levelZeroTiles) {\n  const parent = this.parent;\n  if (parent === undefined) {\n    return this.findLevelZeroTile(levelZeroTiles, this.x + 1, this.y);\n  }\n\n  if (parent.southwestChild === this) {\n    return parent.southeastChild;\n  } else if (parent.northwestChild === this) {\n    return parent.northeastChild;\n  }\n\n  const eastOfParent = parent.findTileToEast(levelZeroTiles);\n  if (eastOfParent === undefined) {\n    return undefined;\n  } else if (parent.southeastChild === this) {\n    return eastOfParent.southwestChild;\n  }\n  return eastOfParent.northwestChild;\n};\n\nQuadtreeTile.prototype.findTileToSouth = function (levelZeroTiles) {\n  const parent = this.parent;\n  if (parent === undefined) {\n    return this.findLevelZeroTile(levelZeroTiles, this.x, this.y + 1);\n  }\n\n  if (parent.northwestChild === this) {\n    return parent.southwestChild;\n  } else if (parent.northeastChild === this) {\n    return parent.southeastChild;\n  }\n\n  const southOfParent = parent.findTileToSouth(levelZeroTiles);\n  if (southOfParent === undefined) {\n    return undefined;\n  } else if (parent.southwestChild === this) {\n    return southOfParent.northwestChild;\n  }\n  return southOfParent.northeastChild;\n};\n\nQuadtreeTile.prototype.findTileToNorth = function (levelZeroTiles) {\n  const parent = this.parent;\n  if (parent === undefined) {\n    return this.findLevelZeroTile(levelZeroTiles, this.x, this.y - 1);\n  }\n\n  if (parent.southwestChild === this) {\n    return parent.northwestChild;\n  } else if (parent.southeastChild === this) {\n    return parent.northeastChild;\n  }\n\n  const northOfParent = parent.findTileToNorth(levelZeroTiles);\n  if (northOfParent === undefined) {\n    return undefined;\n  } else if (parent.northwestChild === this) {\n    return northOfParent.southwestChild;\n  }\n  return northOfParent.southeastChild;\n};\n\n/**\n * Frees the resources associated with this tile and returns it to the <code>START</code>\n * {@link QuadtreeTileLoadState}.  If the {@link QuadtreeTile#data} property is defined and it\n * has a <code>freeResources</code> method, the method will be invoked.\n *\n * @memberof QuadtreeTile\n */\nQuadtreeTile.prototype.freeResources = function () {\n  // Clears cached heights when the tile is freed\n  this.clearPositionCache();\n  this.state = QuadtreeTileLoadState.START;\n  this.renderable = false;\n  this.upsampledFromParent = false;\n\n  if (defined(this.data) && defined(this.data.freeResources)) {\n    this.data.freeResources();\n  }\n\n  freeTile(this._southwestChild);\n  this._southwestChild = undefined;\n  freeTile(this._southeastChild);\n  this._southeastChild = undefined;\n  freeTile(this._northwestChild);\n  this._northwestChild = undefined;\n  freeTile(this._northeastChild);\n  this._northeastChild = undefined;\n};\n\nfunction freeTile(tile) {\n  if (defined(tile)) {\n    tile.freeResources();\n  }\n}\nexport default QuadtreeTile;\n","/**\n * The state of a {@link QuadtreeTile} in the tile load pipeline.\n * @enum {number}\n * @private\n */\nconst QuadtreeTileLoadState = {\n  /**\n   * The tile is new and loading has not yet begun.\n   * @type QuadtreeTileLoadState\n   * @constant\n   * @default 0\n   */\n  START: 0,\n\n  /**\n   * Loading is in progress.\n   * @type QuadtreeTileLoadState\n   * @constant\n   * @default 1\n   */\n  LOADING: 1,\n\n  /**\n   * Loading is complete.\n   * @type QuadtreeTileLoadState\n   * @constant\n   * @default 2\n   */\n  DONE: 2,\n\n  /**\n   * The tile has failed to load.\n   * @type QuadtreeTileLoadState\n   * @constant\n   * @default 3\n   */\n  FAILED: 3,\n};\nexport default Object.freeze(QuadtreeTileLoadState);\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Provides general quadtree tiles to be displayed on or near the surface of an ellipsoid.  It is intended to be\n * used with the {@link QuadtreePrimitive}.  This type describes an interface and is not intended to be\n * instantiated directly.\n *\n * @alias QuadtreeTileProvider\n * @constructor\n * @private\n */\nfunction QuadtreeTileProvider() {\n  DeveloperError.throwInstantiationError();\n}\n\n/**\n * Computes the default geometric error for level zero of the quadtree.\n *\n * @memberof QuadtreeTileProvider\n *\n * @param {TilingScheme} tilingScheme The tiling scheme for which to compute the geometric error.\n * @returns {number} The maximum geometric error at level zero, in meters.\n */\nQuadtreeTileProvider.computeDefaultLevelZeroMaximumGeometricError = function (\n  tilingScheme,\n) {\n  return (\n    (tilingScheme.ellipsoid.maximumRadius * 2 * Math.PI * 0.25) /\n    (65 * tilingScheme.getNumberOfXTilesAtLevel(0))\n  );\n};\n\nObject.defineProperties(QuadtreeTileProvider.prototype, {\n  /**\n   * Gets or sets the {@link QuadtreePrimitive} for which this provider is\n   * providing tiles.\n   * @memberof QuadtreeTileProvider.prototype\n   * @type {QuadtreePrimitive}\n   */\n  quadtree: {\n    get: DeveloperError.throwInstantiationError,\n    set: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the tiling scheme used by the provider.\n   * @memberof QuadtreeTileProvider.prototype\n   * @type {TilingScheme}\n   */\n  tilingScheme: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets an event that is raised when the geometry provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof QuadtreeTileProvider.prototype\n   * @type {Event}\n   */\n  errorEvent: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Called at the beginning of the update cycle, regardless of id a new frame is being rendered, before {@link QuadtreeTileProvider#beginUpdate}\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n */\nQuadtreeTileProvider.prototype.update = DeveloperError.throwInstantiationError;\n\n/**\n * Called at the beginning of the update cycle for each render frame, before {@link QuadtreeTileProvider#showTileThisFrame}\n * or any other functions.\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} commandList An array of rendering commands.  This method may push\n *        commands into this array.\n */\nQuadtreeTileProvider.prototype.beginUpdate =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Called at the end of the update cycle for each render frame, after {@link QuadtreeTileProvider#showTileThisFrame}\n * and any other functions.\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n * @param {DrawCommand[]} commandList An array of rendering commands.  This method may push\n *        commands into this array.\n */\nQuadtreeTileProvider.prototype.endUpdate =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level, in meters.\n *\n * @see QuadtreeTileProvider#computeDefaultLevelZeroMaximumGeometricError\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {number} level The tile level for which to get the maximum geometric error.\n * @returns {number} The maximum geometric error in meters.\n */\nQuadtreeTileProvider.prototype.getLevelMaximumGeometricError =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Loads, or continues loading, a given tile.  This function will continue to be called\n * until {@link QuadtreeTile#state} is no longer {@link QuadtreeTileLoadState#LOADING}.\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The frame state.\n * @param {QuadtreeTile} tile The tile to load.\n */\nQuadtreeTileProvider.prototype.loadTile =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Determines the visibility of a given tile.  The tile may be fully visible, partially visible, or not\n * visible at all.  Tiles that are renderable and are at least partially visible will be shown by a call\n * to {@link QuadtreeTileProvider#showTileThisFrame}.\n *\n * @memberof QuadtreeTileProvider\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information about the current frame.\n * @param {QuadtreeOccluders} occluders The objects that may occlude this tile.\n *\n * @returns {Visibility} The visibility of the tile.\n */\nQuadtreeTileProvider.prototype.computeTileVisibility =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Shows a specified tile in this frame.  The provider can cause the tile to be shown by adding\n * render commands to the commandList, or use any other method as appropriate.  The tile is not\n * expected to be visible next frame as well, unless this method is call next frame, too.\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {Context} context The rendering context.\n * @param {FrameState} frameState The state information of the current rendering frame.\n * @param {DrawCommand[]} commandList The list of rendering commands.  This method may add additional commands to this list.\n */\nQuadtreeTileProvider.prototype.showTileThisFrame =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Gets the distance from the camera to the closest point on the tile.  This is used for level-of-detail selection.\n *\n * @memberof QuadtreeTileProvider\n * @function\n *\n * @param {QuadtreeTile} tile The tile instance.\n * @param {FrameState} frameState The state information of the current rendering frame.\n *\n * @returns {number} The distance from the camera to the closest point on the tile, in meters.\n */\nQuadtreeTileProvider.prototype.computeDistanceToTile =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @memberof QuadtreeTileProvider\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see QuadtreeTileProvider#destroy\n */\nQuadtreeTileProvider.prototype.isDestroyed =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @memberof QuadtreeTileProvider\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * provider = provider && provider();\n *\n * @see QuadtreeTileProvider#isDestroyed\n */\nQuadtreeTileProvider.prototype.destroy = DeveloperError.throwInstantiationError;\nexport default QuadtreeTileProvider;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport BufferLoader from \"./BufferLoader.js\";\nimport GltfBufferViewLoader from \"./GltfBufferViewLoader.js\";\nimport GltfDracoLoader from \"./GltfDracoLoader.js\";\nimport GltfImageLoader from \"./GltfImageLoader.js\";\nimport GltfIndexBufferLoader from \"./GltfIndexBufferLoader.js\";\nimport GltfJsonLoader from \"./GltfJsonLoader.js\";\nimport GltfTextureLoader from \"./GltfTextureLoader.js\";\nimport GltfVertexBufferLoader from \"./GltfVertexBufferLoader.js\";\nimport GltfSpzLoader from \"./GltfSpzLoader.js\";\nimport MetadataSchemaLoader from \"./MetadataSchemaLoader.js\";\nimport ResourceCacheKey from \"./ResourceCacheKey.js\";\nimport ResourceCacheStatistics from \"./ResourceCacheStatistics.js\";\n\n/**\n * Cache for resources shared across 3D Tiles and glTF.\n *\n * @namespace ResourceCache\n *\n * @private\n */\nfunction ResourceCache() {}\n\nResourceCache.cacheEntries = {};\n\n// Statistics about binary data stored in the resource cache\nResourceCache.statistics = new ResourceCacheStatistics();\n\n/**\n * A reference-counted cache entry.\n *\n * @param {ResourceLoader} resourceLoader The resource.\n *\n * @alias CacheEntry\n * @constructor\n *\n * @private\n */\nfunction CacheEntry(resourceLoader) {\n  this.referenceCount = 1;\n  this.resourceLoader = resourceLoader;\n\n  // For unit testing only\n  this._statisticsPromise = undefined;\n}\n\n/**\n * Gets a resource from the cache. If the resource exists its reference count is\n * incremented. Otherwise, if no resource loader exists, undefined is returned.\n *\n * @param {string} cacheKey The cache key of the resource.\n *\n * @returns {ResourceLoader|undefined} The resource.\n * @private\n */\nResourceCache.get = function (cacheKey) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"cacheKey\", cacheKey);\n  //>>includeEnd('debug');\n\n  const cacheEntry = ResourceCache.cacheEntries[cacheKey];\n  if (defined(cacheEntry)) {\n    ++cacheEntry.referenceCount;\n    return cacheEntry.resourceLoader;\n  }\n  return undefined;\n};\n\n/**\n * Adds it to the cache.\n *\n * @param {ResourceLoader} resourceLoader The resource.\n * @returns {ResourceLoader} The resource.\n *\n * @exception {DeveloperError} Resource with this cacheKey is already in the cache\n * @private\n */\nResourceCache.add = function (resourceLoader) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"resourceLoader\", resourceLoader);\n  //>>includeEnd('debug');\n\n  const cacheKey = resourceLoader.cacheKey;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"options.resourceLoader.cacheKey\", cacheKey);\n\n  if (defined(ResourceCache.cacheEntries[cacheKey])) {\n    throw new DeveloperError(\n      `Resource with this cacheKey is already in the cache: ${cacheKey}`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  ResourceCache.cacheEntries[cacheKey] = new CacheEntry(resourceLoader);\n\n  return resourceLoader;\n};\n\n/**\n * Unloads a resource from the cache. When the reference count hits zero the\n * resource is destroyed.\n *\n * @param {ResourceLoader} resourceLoader The resource.\n *\n * @exception {DeveloperError} Resource is not in the cache.\n * @exception {DeveloperError} Cannot unload resource that has no references.\n * @private\n */\nResourceCache.unload = function (resourceLoader) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"resourceLoader\", resourceLoader);\n  //>>includeEnd('debug');\n\n  const cacheKey = resourceLoader.cacheKey;\n  const cacheEntry = ResourceCache.cacheEntries[cacheKey];\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(cacheEntry)) {\n    throw new DeveloperError(`Resource is not in the cache: ${cacheKey}`);\n  }\n  //>>includeEnd('debug');\n\n  --cacheEntry.referenceCount;\n\n  if (cacheEntry.referenceCount === 0) {\n    ResourceCache.statistics.removeLoader(resourceLoader);\n    resourceLoader.destroy();\n    delete ResourceCache.cacheEntries[cacheKey];\n  }\n};\n\n/**\n * Gets an existing schema loader from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {object} [options.schema] An object that explicitly defines a schema JSON. Mutually exclusive with options.resource.\n * @param {Resource} [options.resource] The {@link Resource} pointing to the schema JSON. Mutually exclusive with options.schema.\n *\n * @returns {MetadataSchemaLoader} The cached schema resource.\n *\n * @exception {DeveloperError} One of options.schema and options.resource must be defined.\n * @private\n */\nResourceCache.getSchemaLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { schema, resource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(schema) === defined(resource)) {\n    throw new DeveloperError(\n      \"One of options.schema and options.resource must be defined.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getSchemaCacheKey({\n    schema: schema,\n    resource: resource,\n  });\n\n  let schemaLoader = ResourceCache.get(cacheKey);\n  if (defined(schemaLoader)) {\n    return schemaLoader;\n  }\n\n  schemaLoader = new MetadataSchemaLoader({\n    schema: schema,\n    resource: resource,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(schemaLoader);\n};\n\n/**\n * Gets an existing embedded buffer loader from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {Resource} options.parentResource The {@link Resource} containing the embedded buffer.\n * @param {number} options.bufferId A unique identifier of the embedded buffer within the parent resource.\n * @param {Uint8Array} [options.typedArray] The typed array containing the embedded buffer contents.\n *\n * @returns {BufferLoader} The cached buffer loader.\n * @private\n */\nResourceCache.getEmbeddedBufferLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { parentResource, bufferId, typedArray } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.parentResource\", parentResource);\n  Check.typeOf.number(\"options.bufferId\", bufferId);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getEmbeddedBufferCacheKey({\n    parentResource: parentResource,\n    bufferId: bufferId,\n  });\n\n  let bufferLoader = ResourceCache.get(cacheKey);\n  if (defined(bufferLoader)) {\n    return bufferLoader;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.typedArray\", typedArray);\n  //>>includeEnd('debug');\n\n  bufferLoader = new BufferLoader({\n    typedArray: typedArray,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(bufferLoader);\n};\n\n/**\n * Gets an existing external buffer from loader the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {Resource} options.resource The {@link Resource} pointing to the external buffer.\n *\n * @returns {BufferLoader} The cached buffer loader.\n * @private\n */\nResourceCache.getExternalBufferLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { resource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.resource\", resource);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getExternalBufferCacheKey({\n    resource: resource,\n  });\n\n  let bufferLoader = ResourceCache.get(cacheKey);\n  if (defined(bufferLoader)) {\n    return bufferLoader;\n  }\n\n  bufferLoader = new BufferLoader({\n    resource: resource,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(bufferLoader);\n};\n\n/**\n * Gets an existing glTF JSON loader from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {Uint8Array} [options.typedArray] The typed array containing the glTF contents.\n * @param {object} [options.gltfJson] The parsed glTF JSON contents.\n *\n * @returns {GltfJsonLoader} The cached glTF JSON loader.\n * @private\n */\nResourceCache.getGltfJsonLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltfResource, baseResource, typedArray, gltfJson } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getGltfCacheKey({\n    gltfResource: gltfResource,\n  });\n\n  let gltfJsonLoader = ResourceCache.get(cacheKey);\n  if (defined(gltfJsonLoader)) {\n    return gltfJsonLoader;\n  }\n\n  gltfJsonLoader = new GltfJsonLoader({\n    resourceCache: ResourceCache,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    typedArray: typedArray,\n    gltfJson: gltfJson,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(gltfJsonLoader);\n};\n\n/**\n * Gets an existing glTF buffer view from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {number} options.bufferViewId The bufferView ID.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n *\n * @returns {GltfBufferViewLoader} The cached buffer view loader.\n * @private\n */\nResourceCache.getBufferViewLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, bufferViewId, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.bufferViewId\", bufferViewId);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getBufferViewCacheKey({\n    gltf: gltf,\n    bufferViewId: bufferViewId,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n  });\n\n  let bufferViewLoader = ResourceCache.get(cacheKey);\n  if (defined(bufferViewLoader)) {\n    return bufferViewLoader;\n  }\n\n  bufferViewLoader = new GltfBufferViewLoader({\n    resourceCache: ResourceCache,\n    gltf: gltf,\n    bufferViewId: bufferViewId,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(bufferViewLoader);\n};\n\n/**\n * Gets an existing Draco data from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {object} options.primitive The primitive containing the Draco extension.\n * @param {object} options.draco The Draco extension object.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n *\n * @returns {GltfDracoLoader} The cached Draco loader.\n * @private\n */\nResourceCache.getDracoLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, primitive, draco, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.primitive\", primitive);\n  Check.typeOf.object(\"options.draco\", draco);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getDracoCacheKey({\n    gltf: gltf,\n    draco: draco,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n  });\n\n  let dracoLoader = ResourceCache.get(cacheKey);\n  if (defined(dracoLoader)) {\n    return dracoLoader;\n  }\n\n  dracoLoader = new GltfDracoLoader({\n    resourceCache: ResourceCache,\n    gltf: gltf,\n    primitive: primitive,\n    draco: draco,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(dracoLoader);\n};\n\n/**\n * Gets an existing SPZ loader from the cache, or creates a new loader if one does not already exist.\n * This loader is used to decode SPZ (Splat Point Cloud) data in glTF.\n * \n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {object} options.primitive The primitive containing the SPZ extension.\n * @param {object} options.spz The SPZ extension object.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n *\n * @return {GltfSpzLoader} The cached SPZ loader.\n @private\n * */\nResourceCache.getSpzLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, primitive, spz, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.primitive\", primitive);\n  Check.typeOf.object(\"options.spz\", spz);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getSpzCacheKey({\n    gltf: gltf,\n    primitive: primitive,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n  });\n\n  let spzLoader = ResourceCache.get(cacheKey);\n  if (defined(spzLoader)) {\n    return spzLoader;\n  }\n\n  spzLoader = new GltfSpzLoader({\n    resourceCache: ResourceCache,\n    gltf: gltf,\n    primitive: primitive,\n    spz: spz,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(spzLoader);\n};\n\n/**\n * Gets an existing glTF vertex buffer from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {FrameState} options.frameState The frame state.\n * @param {number} [options.bufferViewId] The bufferView ID corresponding to the vertex buffer.\n * @param {object} [options.primitive] The primitive containing the Draco extension.\n * @param {object} [options.draco] The Draco extension object.\n * @param {string} [options.attributeSemantic] The attribute semantic, e.g. POSITION or NORMAL.\n * @param {number} [options.accessorId] The accessor ID.\n * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n * @param {boolean} [options.dequantize=false] Determines whether or not the vertex buffer will be dequantized on the CPU.\n * @param {boolean} [options.loadBuffer=false] Load vertex buffer as a GPU vertex buffer.\n * @param {boolean} [options.loadTypedArray=false] Load vertex buffer as a typed array.\n * @exception {DeveloperError} One of options.bufferViewId and options.draco must be defined.\n * @exception {DeveloperError} When options.draco is defined options.attributeSemantic must also be defined.\n * @exception {DeveloperError} When options.draco is defined options.accessorId must also be defined.\n *\n * @returns {GltfVertexBufferLoader} The cached vertex buffer loader.\n * @private\n */\nResourceCache.getVertexBufferLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    gltf,\n    gltfResource,\n    baseResource,\n    frameState,\n    bufferViewId,\n    primitive,\n    draco,\n    spz,\n    attributeSemantic,\n    accessorId,\n    asynchronous = true,\n    dequantize = false,\n    loadBuffer = false,\n    loadTypedArray = false,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  Check.typeOf.object(\"options.frameState\", frameState);\n  if (!loadBuffer && !loadTypedArray) {\n    throw new DeveloperError(\n      \"At least one of loadBuffer and loadTypedArray must be true.\",\n    );\n  }\n\n  const hasBufferViewId = defined(bufferViewId);\n  const hasPrimitive = defined(primitive);\n  const hasDraco = hasDracoCompression(draco, attributeSemantic);\n  const hasAttributeSemantic = defined(attributeSemantic);\n  const hasAccessorId = defined(accessorId);\n  const hasSpz = defined(spz);\n\n  if (hasBufferViewId === (hasDraco !== hasSpz)) {\n    throw new DeveloperError(\n      \"One of options.bufferViewId, options.draco, or options.spz must be defined.\",\n    );\n  }\n\n  if (hasDraco && !hasAttributeSemantic) {\n    throw new DeveloperError(\n      \"When options.draco is defined options.attributeSemantic must also be defined.\",\n    );\n  }\n\n  if (hasDraco && !hasAccessorId) {\n    throw new DeveloperError(\n      \"When options.draco is defined options.hasAccessorId must also be defined.\",\n    );\n  }\n\n  if (hasDraco && !hasPrimitive) {\n    throw new DeveloperError(\n      \"When options.draco is defined options.primitive must also be defined.\",\n    );\n  }\n\n  if (hasDraco) {\n    Check.typeOf.object(\"options.draco\", draco);\n    Check.typeOf.string(\"options.attributeSemantic\", attributeSemantic);\n    Check.typeOf.number(\"options.accessorId\", accessorId);\n  }\n\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getVertexBufferCacheKey({\n    gltf: gltf,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    frameState: frameState,\n    bufferViewId: bufferViewId,\n    draco: draco,\n    spz: spz,\n    attributeSemantic: attributeSemantic,\n    dequantize: dequantize,\n    loadBuffer: loadBuffer,\n    loadTypedArray: loadTypedArray,\n  });\n\n  let vertexBufferLoader = ResourceCache.get(cacheKey);\n  if (defined(vertexBufferLoader)) {\n    return vertexBufferLoader;\n  }\n\n  vertexBufferLoader = new GltfVertexBufferLoader({\n    resourceCache: ResourceCache,\n    gltf: gltf,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    bufferViewId: bufferViewId,\n    primitive: primitive,\n    draco: draco,\n    spz: spz,\n    attributeSemantic: attributeSemantic,\n    accessorId: accessorId,\n    cacheKey: cacheKey,\n    asynchronous: asynchronous,\n    dequantize: dequantize,\n    loadBuffer: loadBuffer,\n    loadTypedArray: loadTypedArray,\n  });\n\n  return ResourceCache.add(vertexBufferLoader);\n};\n\nfunction hasDracoCompression(draco, semantic) {\n  return (\n    defined(draco) &&\n    defined(draco.attributes) &&\n    defined(draco.attributes[semantic])\n  );\n}\n\n/**\n * Gets an existing glTF index buffer from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {number} options.accessorId The accessor ID corresponding to the index buffer.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {FrameState} options.frameState The frame state.\n * @param {object} [options.primitive] The primitive containing the Draco extension.\n * @param {object} [options.draco] The Draco extension object.\n * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n * @param {boolean} [options.loadBuffer=false] Load index buffer as a GPU index buffer.\n * @param {boolean} [options.loadTypedArray=false] Load index buffer as a typed array.\n * @returns {GltfIndexBufferLoader} The cached index buffer loader.\n * @private\n */\nResourceCache.getIndexBufferLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    gltf,\n    accessorId,\n    gltfResource,\n    baseResource,\n    frameState,\n    primitive,\n    draco,\n    asynchronous = true,\n    loadBuffer = false,\n    loadTypedArray = false,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.accessorId\", accessorId);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  Check.typeOf.object(\"options.frameState\", frameState);\n  if (!loadBuffer && !loadTypedArray) {\n    throw new DeveloperError(\n      \"At least one of loadBuffer and loadTypedArray must be true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getIndexBufferCacheKey({\n    gltf: gltf,\n    accessorId: accessorId,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    frameState: frameState,\n    draco: draco,\n    loadBuffer: loadBuffer,\n    loadTypedArray: loadTypedArray,\n  });\n\n  let indexBufferLoader = ResourceCache.get(cacheKey);\n  if (defined(indexBufferLoader)) {\n    return indexBufferLoader;\n  }\n\n  indexBufferLoader = new GltfIndexBufferLoader({\n    resourceCache: ResourceCache,\n    gltf: gltf,\n    accessorId: accessorId,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    primitive: primitive,\n    draco: draco,\n    cacheKey: cacheKey,\n    asynchronous: asynchronous,\n    loadBuffer: loadBuffer,\n    loadTypedArray: loadTypedArray,\n  });\n\n  return ResourceCache.add(indexBufferLoader);\n};\n\n/**\n * Gets an existing glTF image from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {number} options.imageId The image ID.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n *\n * @returns {GltfImageLoader} The cached image loader.\n * @private\n */\nResourceCache.getImageLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, imageId, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.imageId\", imageId);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getImageCacheKey({\n    gltf: gltf,\n    imageId: imageId,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n  });\n\n  let imageLoader = ResourceCache.get(cacheKey);\n  if (defined(imageLoader)) {\n    return imageLoader;\n  }\n\n  imageLoader = new GltfImageLoader({\n    resourceCache: ResourceCache,\n    gltf: gltf,\n    imageId: imageId,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    cacheKey: cacheKey,\n  });\n\n  return ResourceCache.add(imageLoader);\n};\n\n/**\n * Gets an existing glTF texture from the cache, or creates a new loader if one does not already exist.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {object} options.textureInfo The texture info object.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {SupportedImageFormats} options.supportedImageFormats The supported image formats.\n * @param {FrameState} options.frameState The frame state.\n * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.\n *\n * @returns {GltfTextureLoader} The cached texture loader.\n * @private\n */\nResourceCache.getTextureLoader = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    gltf,\n    textureInfo,\n    gltfResource,\n    baseResource,\n    supportedImageFormats,\n    frameState,\n    asynchronous = true,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.textureInfo\", textureInfo);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  Check.typeOf.object(\"options.supportedImageFormats\", supportedImageFormats);\n  Check.typeOf.object(\"options.frameState\", frameState);\n  //>>includeEnd('debug');\n\n  const cacheKey = ResourceCacheKey.getTextureCacheKey({\n    gltf: gltf,\n    textureInfo: textureInfo,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    supportedImageFormats: supportedImageFormats,\n    frameState: frameState,\n  });\n\n  let textureLoader = ResourceCache.get(cacheKey);\n  if (defined(textureLoader)) {\n    return textureLoader;\n  }\n\n  textureLoader = new GltfTextureLoader({\n    resourceCache: ResourceCache,\n    gltf: gltf,\n    textureInfo: textureInfo,\n    gltfResource: gltfResource,\n    baseResource: baseResource,\n    supportedImageFormats: supportedImageFormats,\n    cacheKey: cacheKey,\n    asynchronous: asynchronous,\n  });\n\n  return ResourceCache.add(textureLoader);\n};\n\n/**\n * Unload everything from the cache. This is used for unit testing.\n *\n * @private\n */\nResourceCache.clearForSpecs = function () {\n  // Unload in the order below. This prevents an unload function from unloading\n  // a resource that has already been unloaded.\n  const precedence = [\n    GltfVertexBufferLoader,\n    GltfIndexBufferLoader,\n    GltfDracoLoader,\n    GltfTextureLoader,\n    GltfImageLoader,\n    GltfBufferViewLoader,\n    BufferLoader,\n    MetadataSchemaLoader,\n    GltfJsonLoader,\n  ];\n\n  let cacheKey;\n  const cacheEntries = ResourceCache.cacheEntries;\n\n  const cacheEntriesSorted = [];\n  for (cacheKey in cacheEntries) {\n    if (cacheEntries.hasOwnProperty(cacheKey)) {\n      cacheEntriesSorted.push(cacheEntries[cacheKey]);\n    }\n  }\n\n  cacheEntriesSorted.sort(function (a, b) {\n    const indexA = precedence.indexOf(a.resourceLoader.constructor);\n    const indexB = precedence.indexOf(b.resourceLoader.constructor);\n    return indexA - indexB;\n  });\n\n  const cacheEntriesLength = cacheEntriesSorted.length;\n  for (let i = 0; i < cacheEntriesLength; ++i) {\n    const cacheEntry = cacheEntriesSorted[i];\n    cacheKey = cacheEntry.resourceLoader.cacheKey;\n    if (defined(cacheEntries[cacheKey])) {\n      cacheEntry.resourceLoader.destroy();\n      delete cacheEntries[cacheKey];\n    }\n  }\n\n  ResourceCache.statistics.clear();\n};\n\nexport default ResourceCache;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport getAbsoluteUri from \"../Core/getAbsoluteUri.js\";\nimport GltfLoaderUtil from \"./GltfLoaderUtil.js\";\nimport hasExtension from \"./hasExtension.js\";\n\n/**\n * Compute cache keys for resources in {@link ResourceCache}.\n *\n * @namespace ResourceCacheKey\n *\n * @private\n */\nconst ResourceCacheKey = {};\n\nfunction getExternalResourceCacheKey(resource) {\n  return getAbsoluteUri(resource.url);\n}\n\nfunction getBufferViewCacheKey(bufferView) {\n  let { byteOffset, byteLength } = bufferView;\n\n  if (hasExtension(bufferView, \"EXT_meshopt_compression\")) {\n    const meshopt = bufferView.extensions.EXT_meshopt_compression;\n    byteOffset = meshopt.byteOffset ?? 0;\n    byteLength = meshopt.byteLength;\n  }\n\n  return `${byteOffset}-${byteOffset + byteLength}`;\n}\n\nfunction getAccessorCacheKey(accessor, bufferView) {\n  const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n  const { componentType, type, count } = accessor;\n  return `${byteOffset}-${componentType}-${type}-${count}`;\n}\n\nfunction getEmbeddedBufferCacheKey(parentResource, bufferId) {\n  const parentCacheKey = getExternalResourceCacheKey(parentResource);\n  return `${parentCacheKey}-buffer-id-${bufferId}`;\n}\n\nfunction getBufferCacheKey(buffer, bufferId, gltfResource, baseResource) {\n  if (defined(buffer.uri)) {\n    const resource = baseResource.getDerivedResource({\n      url: buffer.uri,\n    });\n    return getExternalResourceCacheKey(resource);\n  }\n\n  return getEmbeddedBufferCacheKey(gltfResource, bufferId);\n}\n\nfunction getDracoCacheKey(gltf, draco, gltfResource, baseResource) {\n  const bufferViewId = draco.bufferView;\n  const bufferView = gltf.bufferViews[bufferViewId];\n  const bufferId = bufferView.buffer;\n  const buffer = gltf.buffers[bufferId];\n\n  const bufferCacheKey = getBufferCacheKey(\n    buffer,\n    bufferId,\n    gltfResource,\n    baseResource,\n  );\n\n  const bufferViewCacheKey = getBufferViewCacheKey(bufferView);\n\n  return `${bufferCacheKey}-range-${bufferViewCacheKey}`;\n}\n\nfunction getSpzCacheKey(gltf, primitive, gltfResource, baseResource) {\n  const bufferViewId = 0;\n  const bufferView = gltf.bufferViews[bufferViewId];\n  const bufferId = bufferView.buffer;\n  const buffer = gltf.buffers[bufferId];\n\n  const bufferCacheKey = getBufferCacheKey(\n    buffer,\n    bufferId,\n    gltfResource,\n    baseResource,\n  );\n\n  const bufferViewCacheKey = getBufferViewCacheKey(bufferView);\n\n  return `${bufferCacheKey}-range-${bufferViewCacheKey}`;\n}\n\nfunction getImageCacheKey(gltf, imageId, gltfResource, baseResource) {\n  const image = gltf.images[imageId];\n  const bufferViewId = image.bufferView;\n  const uri = image.uri;\n\n  if (defined(uri)) {\n    const resource = baseResource.getDerivedResource({\n      url: uri,\n    });\n    return getExternalResourceCacheKey(resource);\n  }\n\n  const bufferView = gltf.bufferViews[bufferViewId];\n  const bufferId = bufferView.buffer;\n  const buffer = gltf.buffers[bufferId];\n\n  const bufferCacheKey = getBufferCacheKey(\n    buffer,\n    bufferId,\n    gltfResource,\n    baseResource,\n  );\n\n  const bufferViewCacheKey = getBufferViewCacheKey(bufferView);\n\n  return `${bufferCacheKey}-range-${bufferViewCacheKey}`;\n}\n\nfunction getSamplerCacheKey(gltf, textureInfo) {\n  const sampler = GltfLoaderUtil.createSampler({\n    gltf: gltf,\n    textureInfo: textureInfo,\n  });\n\n  return `${sampler.wrapS}-${sampler.wrapT}-${sampler.minificationFilter}-${sampler.magnificationFilter}`;\n}\n\n/**\n * Gets the schema cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {object} [options.schema] An object that explicitly defines a schema JSON. Mutually exclusive with options.resource.\n * @param {Resource} [options.resource] The {@link Resource} pointing to the schema JSON. Mutually exclusive with options.schema.\n *\n * @returns {string} The schema cache key.\n *\n * @exception {DeveloperError} One of options.schema and options.resource must be defined.\n * @private\n */\nResourceCacheKey.getSchemaCacheKey = function (options) {\n  const { schema, resource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (defined(schema) === defined(resource)) {\n    throw new DeveloperError(\n      \"One of options.schema and options.resource must be defined.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (defined(schema)) {\n    return `embedded-schema:${JSON.stringify(schema)}`;\n  }\n\n  return `external-schema:${getExternalResourceCacheKey(resource)}`;\n};\n\n/**\n * Gets the external buffer cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {Resource} options.resource The {@link Resource} pointing to the external buffer.\n *\n * @returns {string} The external buffer cache key.\n * @private\n */\nResourceCacheKey.getExternalBufferCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { resource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.resource\", resource);\n  //>>includeEnd('debug');\n\n  return `external-buffer:${getExternalResourceCacheKey(resource)}`;\n};\n\n/**\n * Gets the embedded buffer cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {Resource} options.parentResource The {@link Resource} containing the embedded buffer.\n * @param {number} options.bufferId A unique identifier of the embedded buffer within the parent resource.\n *\n * @returns {string} The embedded buffer cache key.\n * @private\n */\nResourceCacheKey.getEmbeddedBufferCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { parentResource, bufferId } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.parentResource\", parentResource);\n  Check.typeOf.number(\"options.bufferId\", bufferId);\n  //>>includeEnd('debug');\n\n  return `embedded-buffer:${getEmbeddedBufferCacheKey(\n    parentResource,\n    bufferId,\n  )}`;\n};\n\n/**\n * Gets the glTF cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n *\n * @returns {string} The glTF cache key.\n * @private\n */\nResourceCacheKey.getGltfCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltfResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  //>>includeEnd('debug');\n\n  return `gltf:${getExternalResourceCacheKey(gltfResource)}`;\n};\n\n/**\n * Gets the buffer view cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {number} options.bufferViewId The bufferView ID.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n *\n * @returns {string} The buffer view cache key.\n * @private\n */\nResourceCacheKey.getBufferViewCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, bufferViewId, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.bufferViewId\", bufferViewId);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  const bufferView = gltf.bufferViews[bufferViewId];\n  let bufferId = bufferView.buffer;\n  const buffer = gltf.buffers[bufferId];\n  if (hasExtension(bufferView, \"EXT_meshopt_compression\")) {\n    const meshopt = bufferView.extensions.EXT_meshopt_compression;\n    bufferId = meshopt.buffer;\n  }\n\n  const bufferCacheKey = getBufferCacheKey(\n    buffer,\n    bufferId,\n    gltfResource,\n    baseResource,\n  );\n\n  const bufferViewCacheKey = getBufferViewCacheKey(bufferView);\n\n  return `buffer-view:${bufferCacheKey}-range-${bufferViewCacheKey}`;\n};\n\n/**\n * Gets the Draco cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {object} options.draco The Draco extension object.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n *\n * @returns {string} The Draco cache key.\n * @private\n */\nResourceCacheKey.getDracoCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, draco, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.draco\", draco);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  return `draco:${getDracoCacheKey(gltf, draco, gltfResource, baseResource)}`;\n};\n\nResourceCacheKey.getSpzCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, primitive, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.primitive\", primitive);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  return `spz:${getSpzCacheKey(gltf, primitive, gltfResource, baseResource)}`;\n};\n/**\n * Gets the vertex buffer cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {FrameState} options.frameState The frame state.\n * @param {number} [options.bufferViewId] The bufferView ID corresponding to the vertex buffer.\n * @param {object} [options.draco] The Draco extension object.\n * @param {string} [options.attributeSemantic] The attribute semantic, e.g. POSITION or NORMAL.\n * @param {boolean} [options.dequantize=false] Determines whether or not the vertex buffer will be dequantized on the CPU.\n * @param {boolean} [options.loadBuffer=false] Load vertex buffer as a GPU vertex buffer.\n * @param {boolean} [options.loadTypedArray=false] Load vertex buffer as a typed array.\n * @exception {DeveloperError} One of options.bufferViewId and options.draco must be defined.\n * @exception {DeveloperError} When options.draco is defined options.attributeSemantic must also be defined.\n *\n * @returns {string} The vertex buffer cache key.\n * @private\n */\nResourceCacheKey.getVertexBufferCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    gltf,\n    gltfResource,\n    baseResource,\n    frameState,\n    bufferViewId,\n    draco,\n    spz,\n    attributeSemantic,\n    dequantize = false,\n    loadBuffer = false,\n    loadTypedArray = false,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  Check.typeOf.object(\"options.frameState\", frameState);\n\n  const hasBufferViewId = defined(bufferViewId);\n  const hasDraco = hasDracoCompression(draco, attributeSemantic);\n  const hasAttributeSemantic = defined(attributeSemantic);\n  const hasSpz = defined(spz);\n\n  if (hasBufferViewId === (hasDraco !== hasSpz)) {\n    throw new DeveloperError(\n      \"One of options.bufferViewId and options.draco must be defined.\",\n    );\n  }\n\n  if (hasDraco && !hasAttributeSemantic) {\n    throw new DeveloperError(\n      \"When options.draco is defined options.attributeSemantic must also be defined.\",\n    );\n  }\n\n  if (hasDraco) {\n    Check.typeOf.object(\"options.draco\", draco);\n    Check.typeOf.string(\"options.attributeSemantic\", attributeSemantic);\n  }\n\n  if (!loadBuffer && !loadTypedArray) {\n    throw new DeveloperError(\n      \"At least one of loadBuffer and loadTypedArray must be true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let cacheKeySuffix = \"\";\n  if (dequantize) {\n    cacheKeySuffix += \"-dequantize\";\n  }\n\n  if (loadBuffer) {\n    cacheKeySuffix += \"-buffer\";\n    cacheKeySuffix += `-context-${frameState.context.id}`;\n  }\n\n  if (loadTypedArray) {\n    cacheKeySuffix += \"-typed-array\";\n  }\n\n  if (defined(draco)) {\n    const dracoCacheKey = getDracoCacheKey(\n      gltf,\n      draco,\n      gltfResource,\n      baseResource,\n    );\n    return `vertex-buffer:${dracoCacheKey}-draco-${attributeSemantic}${cacheKeySuffix}`;\n  }\n\n  if (spz) {\n    const spzCacheKey = getSpzCacheKey(gltf, spz, gltfResource, baseResource);\n    return `vertex-buffer:${spzCacheKey}-spz-${attributeSemantic}${cacheKeySuffix}`;\n  }\n\n  const bufferView = gltf.bufferViews[bufferViewId];\n  const bufferId = bufferView.buffer;\n  const buffer = gltf.buffers[bufferId];\n\n  const bufferCacheKey = getBufferCacheKey(\n    buffer,\n    bufferId,\n    gltfResource,\n    baseResource,\n  );\n\n  const bufferViewCacheKey = getBufferViewCacheKey(bufferView);\n\n  return `vertex-buffer:${bufferCacheKey}-range-${bufferViewCacheKey}${cacheKeySuffix}`;\n};\n\nfunction hasDracoCompression(draco, semantic) {\n  return (\n    defined(draco) &&\n    defined(draco.attributes) &&\n    defined(draco.attributes[semantic])\n  );\n}\n\n/**\n * Gets the index buffer cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {number} options.accessorId The accessor ID corresponding to the index buffer.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {FrameState} options.frameState The frame state.\n * @param {object} [options.draco] The Draco extension object.\n * @param {boolean} [options.loadBuffer=false] Load index buffer as a GPU index buffer.\n * @param {boolean} [options.loadTypedArray=false] Load index buffer as a typed array.\n *\n * @returns {string} The index buffer cache key.\n * @private\n */\nResourceCacheKey.getIndexBufferCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    gltf,\n    accessorId,\n    gltfResource,\n    baseResource,\n    frameState,\n    draco,\n    loadBuffer = false,\n    loadTypedArray = false,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.accessorId\", accessorId);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  Check.typeOf.object(\"options.frameState\", frameState);\n\n  if (!loadBuffer && !loadTypedArray) {\n    throw new DeveloperError(\n      \"At least one of loadBuffer and loadTypedArray must be true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let cacheKeySuffix = \"\";\n  if (loadBuffer) {\n    cacheKeySuffix += \"-buffer\";\n    cacheKeySuffix += `-context-${frameState.context.id}`;\n  }\n\n  if (loadTypedArray) {\n    cacheKeySuffix += \"-typed-array\";\n  }\n\n  if (defined(draco)) {\n    const dracoCacheKey = getDracoCacheKey(\n      gltf,\n      draco,\n      gltfResource,\n      baseResource,\n    );\n    return `index-buffer:${dracoCacheKey}-draco${cacheKeySuffix}`;\n  }\n\n  const accessor = gltf.accessors[accessorId];\n  const bufferViewId = accessor.bufferView;\n  const bufferView = gltf.bufferViews[bufferViewId];\n  const bufferId = bufferView.buffer;\n  const buffer = gltf.buffers[bufferId];\n\n  const bufferCacheKey = getBufferCacheKey(\n    buffer,\n    bufferId,\n    gltfResource,\n    baseResource,\n  );\n\n  const accessorCacheKey = getAccessorCacheKey(accessor, bufferView);\n\n  return `index-buffer:${bufferCacheKey}-accessor-${accessorCacheKey}${cacheKeySuffix}`;\n};\n\n/**\n * Gets the image cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {number} options.imageId The image ID.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n *\n * @returns {string} The image cache key.\n * @private\n */\nResourceCacheKey.getImageCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const { gltf, imageId, gltfResource, baseResource } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.number(\"options.imageId\", imageId);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  //>>includeEnd('debug');\n\n  const imageCacheKey = getImageCacheKey(\n    gltf,\n    imageId,\n    gltfResource,\n    baseResource,\n  );\n\n  return `image:${imageCacheKey}`;\n};\n\n/**\n * Gets the texture cache key.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.gltf The glTF JSON.\n * @param {object} options.textureInfo The texture info object.\n * @param {Resource} options.gltfResource The {@link Resource} containing the glTF.\n * @param {Resource} options.baseResource The {@link Resource} that paths in the glTF JSON are relative to.\n * @param {SupportedImageFormats} options.supportedImageFormats The supported image formats.\n * @param {FrameState} options.frameState The frame state.\n *\n * @returns {string} The texture cache key.\n * @private\n */\nResourceCacheKey.getTextureCacheKey = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const {\n    gltf,\n    textureInfo,\n    gltfResource,\n    baseResource,\n    supportedImageFormats,\n    frameState,\n  } = options;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.gltf\", gltf);\n  Check.typeOf.object(\"options.textureInfo\", textureInfo);\n  Check.typeOf.object(\"options.gltfResource\", gltfResource);\n  Check.typeOf.object(\"options.baseResource\", baseResource);\n  Check.typeOf.object(\"options.supportedImageFormats\", supportedImageFormats);\n  Check.typeOf.object(\"options.frameState\", frameState);\n  //>>includeEnd('debug');\n\n  const textureId = textureInfo.index;\n\n  const imageId = GltfLoaderUtil.getImageIdFromTexture({\n    gltf: gltf,\n    textureId: textureId,\n    supportedImageFormats: supportedImageFormats,\n  });\n\n  const imageCacheKey = getImageCacheKey(\n    gltf,\n    imageId,\n    gltfResource,\n    baseResource,\n  );\n\n  // Include the sampler cache key in the texture cache key since textures and\n  // samplers are coupled in WebGL 1. When upgrading to WebGL 2 consider\n  // removing the sampleCacheKey here.\n  const samplerCacheKey = getSamplerCacheKey(gltf, textureInfo);\n\n  return `texture:${imageCacheKey}-sampler-${samplerCacheKey}-context-${frameState.context.id}`;\n};\n\nexport default ResourceCacheKey;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * Statistics for the GPU and CPU memory used by the models loaded through the\n * {@link ResourceCache}.\n *\n * @alias ResourceCacheStatistics\n * @constructor\n *\n * @private\n */\nfunction ResourceCacheStatistics() {\n  /**\n   * The size of vertex buffers and index buffers loaded in the cache in bytes.\n   *\n   * @type {number}\n   * @private\n   */\n  this.geometryByteLength = 0;\n\n  /**\n   * The size of all textures loaded in the cache in bytes\n   *\n   * @type {number}\n   * @private\n   */\n  this.texturesByteLength = 0;\n\n  // Track the sizes of resources by cache key. This is important so\n  // removeLoader() can decrement the counts correctly.\n  this._geometrySizes = {};\n  this._textureSizes = {};\n}\n\n/**\n * Reset the memory counts\n *\n * @private\n */\nResourceCacheStatistics.prototype.clear = function () {\n  this.geometryByteLength = 0;\n  this.texturesByteLength = 0;\n\n  this._geometrySizes = {};\n  this._textureSizes = {};\n};\n\n/**\n * Track the resources for a vertex or index buffer loader. This should be called after a loader is ready; that\n * is it has been loaded and processed.\n * This method handles the following cases gracefully:\n * <ul>\n *   <li>If the loader is added twice, its resources will not be double-counted</li>\n *   <li>If the geometry has a CPU copy of the GPU buffer, it will be added to the count</li>\n * </ul>\n * @param {GltfVertexBufferLoader|GltfIndexBufferLoader} loader The geometry buffer with resources to track\n *\n * @private\n */\nResourceCacheStatistics.prototype.addGeometryLoader = function (loader) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"loader\", loader);\n  //>>includeEnd('debug');\n\n  const cacheKey = loader.cacheKey;\n\n  // Don't double count the same resource.\n  if (this._geometrySizes.hasOwnProperty(cacheKey)) {\n    return;\n  }\n\n  this._geometrySizes[cacheKey] = 0;\n\n  const buffer = loader.buffer;\n  const typedArray = loader.typedArray;\n\n  let totalSize = 0;\n\n  if (defined(buffer)) {\n    totalSize += buffer.sizeInBytes;\n  }\n\n  if (defined(typedArray)) {\n    totalSize += typedArray.byteLength;\n  }\n\n  this.geometryByteLength += totalSize;\n  this._geometrySizes[cacheKey] = totalSize;\n};\n\n/**\n * Track the resources for a texture loader. This should be called after a loader is ready; that\n * is it has been loaded and processed.\n * If the loader is added twice, its resources will not be double-counted.\n *\n * @param {GltfTextureLoader} loader The texture loader with resources to track\n *\n * @private\n */\nResourceCacheStatistics.prototype.addTextureLoader = function (loader) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"loader\", loader);\n  //>>includeEnd('debug');\n\n  const cacheKey = loader.cacheKey;\n\n  // Don't double count the same resource.\n  if (this._textureSizes.hasOwnProperty(cacheKey)) {\n    return;\n  }\n\n  this._textureSizes[cacheKey] = 0;\n  const totalSize = loader.texture.sizeInBytes;\n  this.texturesByteLength += loader.texture.sizeInBytes;\n  this._textureSizes[cacheKey] = totalSize;\n};\n\n/**\n * Remove a loader's resources from the memory count. The loader's cache key\n * is used to determine information about the resource, so this method can\n * be used both for geometry and textures. If the loader does not have any\n * tracked resources, this is a no-op.\n * @param {ResourceLoader} loader The resource loader to remove from the cache\n *\n * @private\n */\nResourceCacheStatistics.prototype.removeLoader = function (loader) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"loader\", loader);\n  //>>includeEnd('debug');\n\n  const cacheKey = loader.cacheKey;\n  const geometrySize = this._geometrySizes[cacheKey];\n  delete this._geometrySizes[cacheKey];\n\n  if (defined(geometrySize)) {\n    this.geometryByteLength -= geometrySize;\n  }\n\n  const textureSize = this._textureSizes[cacheKey];\n  delete this._textureSizes[cacheKey];\n\n  if (defined(textureSize)) {\n    this.texturesByteLength -= textureSize;\n  }\n};\n\nexport default ResourceCacheStatistics;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\n\n/**\n * A cache resource.\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n *\n * @see ResourceCache\n * @private\n */\nclass ResourceLoader {\n  /**\n   * The cache key of the resource.\n   *\n   * @memberof ResourceLoader.prototype\n   *\n   * @type {string}\n   * @readonly\n   * @private\n   */\n  // eslint-disable-next-line getter-return\n  get cacheKey() {\n    DeveloperError.throwInstantiationError();\n  }\n\n  /**\n   * Loads the resource.\n   * @returns {Promise<ResourceLoader>} A promise which resolves to the loader when the resource loading is completed.\n   * @private\n   */\n  load() {\n    DeveloperError.throwInstantiationError();\n  }\n\n  /**\n   * Unloads the resource.\n   * @private\n   */\n  unload() {}\n\n  /**\n   * Processes the resource until it becomes ready.\n   *\n   * @param {FrameState} frameState The frame state.\n   * @returns {boolean} true once all resourced are ready.\n   * @private\n   */\n  process(frameState) {\n    return false;\n  }\n\n  /**\n   * Constructs a {@link RuntimeError} from an errorMessage and an error.\n   *\n   * @param {string} errorMessage The error message.\n   * @param {Error} [error] The error.\n   *\n   * @returns {RuntimeError} The runtime error.\n   * @private\n   */\n  getError(errorMessage, error) {\n    //>>includeStart('debug', pragmas.debug);\n    Check.typeOf.string(\"errorMessage\", errorMessage);\n    //>>includeEnd('debug');\n\n    if (defined(error) && defined(error.message)) {\n      errorMessage += `\\n${error.message}`;\n    }\n\n    const runtimeError = new RuntimeError(errorMessage);\n    if (defined(error)) {\n      runtimeError.stack = `Original stack:\\n${error.stack}\\nHandler stack:\\n${runtimeError.stack}`;\n    }\n\n    return runtimeError;\n  }\n\n  /**\n   * Returns true if this object was destroyed; otherwise, false.\n   * <br /><br />\n   * If this object was destroyed, it should not be used; calling any function other than\n   * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n   *\n   * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n   *\n   * @see ResourceLoader#destroy\n   * @private\n   */\n  isDestroyed() {\n    return false;\n  }\n\n  /**\n   * Destroys the loaded resource.\n   * <br /><br />\n   * Once an object is destroyed, it should not be used; calling any function other than\n   * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n   * assign the return value (<code>undefined</code>) to the object as done in the example.\n   *\n   * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n   *\n   * @example\n   * resourceLoader = resourceLoader && resourceLoader.destroy();\n   *\n   * @see ResourceLoader#isDestroyed\n   * @private\n   */\n  destroy() {\n    this.unload();\n    return destroyObject(this);\n  }\n}\n\nexport default ResourceLoader;\n","/**\n * The {@link ResourceLoader} state.\n *\n * @private\n */\nconst ResourceLoaderState = {\n  /**\n   * The resource has not yet been loaded.\n   *\n   * @type {number}\n   * @constant\n   * @private\n   */\n  UNLOADED: 0,\n  /**\n   * The resource is loading. In this state, external resources are fetched as needed.\n   *\n   * @type {number}\n   * @constant\n   * @private\n   */\n  LOADING: 1,\n  /**\n   * The resource has finished loading, but requires further processing.\n   *\n   * @type {number}\n   * @constant\n   * @private\n   */\n  LOADED: 2,\n  /**\n   * The resource is processing. GPU resources are allocated in this state as needed.\n   *\n   * @type {number}\n   * @constant\n   * @private\n   */\n  PROCESSING: 3,\n  /**\n   * The resource has finished loading and processing; the results are ready to be used.\n   *\n   * @type {number}\n   * @constant\n   * @private\n   */\n  READY: 4,\n  /**\n   * The resource loading or processing has failed due to an error.\n   *\n   * @type {number}\n   * @constant\n   * @private\n   */\n  FAILED: 5,\n};\nexport default Object.freeze(ResourceLoaderState);\n","/**\n * Settings for the generation of signed distance field glyphs\n *\n * @private\n */\nconst SDFSettings = {\n  /**\n   * The font size in pixels\n   *\n   * @type {number}\n   * @constant\n   */\n  FONT_SIZE: 48.0,\n\n  /**\n   * Whitespace padding around glyphs.\n   *\n   * @type {number}\n   * @constant\n   */\n  PADDING: 10.0,\n\n  /**\n   * How many pixels around the glyph shape to use for encoding distance\n   *\n   * @type {number}\n   * @constant\n   */\n  RADIUS: 8.0,\n\n  /**\n   * How much of the radius (relative) is used for the inside part the glyph.\n   *\n   * @type {number}\n   * @constant\n   */\n  CUTOFF: 0.25,\n};\nexport default Object.freeze(SDFSettings);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxGeometry from \"../Core/BoxGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport createGuid from \"../Core/createGuid.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport HeightReference from \"./HeightReference.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport mergeSort from \"../Core/mergeSort.js\";\nimport Occluder from \"../Core/Occluder.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PerspectiveOffCenterFrustum from \"../Core/PerspectiveOffCenterFrustum.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RequestScheduler from \"../Core/RequestScheduler.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport ComputeEngine from \"../Renderer/ComputeEngine.js\";\nimport Context from \"../Renderer/Context.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Atmosphere from \"./Atmosphere.js\";\nimport BrdfLutGenerator from \"./BrdfLutGenerator.js\";\nimport Camera from \"./Camera.js\";\nimport Cesium3DTilePass from \"./Cesium3DTilePass.js\";\nimport Cesium3DTilePassState from \"./Cesium3DTilePassState.js\";\nimport CreditDisplay from \"./CreditDisplay.js\";\nimport DebugCameraPrimitive from \"./DebugCameraPrimitive.js\";\nimport DepthPlane from \"./DepthPlane.js\";\nimport DerivedCommand from \"./DerivedCommand.js\";\nimport DeviceOrientationCameraController from \"./DeviceOrientationCameraController.js\";\nimport DynamicAtmosphereLightingType from \"./DynamicAtmosphereLightingType.js\";\nimport Fog from \"./Fog.js\";\nimport FrameState from \"./FrameState.js\";\nimport GlobeTranslucencyState from \"./GlobeTranslucencyState.js\";\nimport InvertClassification from \"./InvertClassification.js\";\nimport JobScheduler from \"./JobScheduler.js\";\nimport MapMode2D from \"./MapMode2D.js\";\nimport PerformanceDisplay from \"./PerformanceDisplay.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Picking from \"./Picking.js\";\nimport PostProcessStageCollection from \"./PostProcessStageCollection.js\";\nimport Primitive from \"./Primitive.js\";\nimport PrimitiveCollection from \"./PrimitiveCollection.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport SceneTransitioner from \"./SceneTransitioner.js\";\nimport ScreenSpaceCameraController from \"./ScreenSpaceCameraController.js\";\nimport ShadowMap from \"./ShadowMap.js\";\nimport SharedContext from \"../Renderer/SharedContext.js\";\nimport SpecularEnvironmentCubeMap from \"./SpecularEnvironmentCubeMap.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport SunLight from \"./SunLight.js\";\nimport SunPostProcess from \"./SunPostProcess.js\";\nimport TweenCollection from \"./TweenCollection.js\";\nimport View from \"./View.js\";\nimport DebugInspector from \"./DebugInspector.js\";\nimport VoxelCell from \"./VoxelCell.js\";\nimport VoxelPrimitive from \"./VoxelPrimitive.js\";\nimport getMetadataClassProperty from \"./getMetadataClassProperty.js\";\nimport PickedMetadataInfo from \"./PickedMetadataInfo.js\";\nimport getMetadataProperty from \"./getMetadataProperty.js\";\n\nconst requestRenderAfterFrame = function (scene) {\n  return function () {\n    scene.frameState.afterRender.push(function () {\n      scene.requestRender();\n    });\n  };\n};\n\n/**\n * The container for all 3D graphical objects and state in a Cesium virtual scene.  Generally,\n * a scene is not created directly; instead, it is implicitly created by {@link CesiumWidget}.\n *\n * @alias Scene\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {HTMLCanvasElement} options.canvas The HTML canvas element to create the scene for.\n * @param {ContextOptions} [options.contextOptions] Context and WebGL creation properties.\n * @param {Element} [options.creditContainer] The HTML element in which the credits will be displayed. If not specified, a credit container will be created and added as a sibling of the canvas.\n * @param {Element} [options.creditViewport] The HTML element in which to display the credit popup.  If not specified, the viewport will be added as a sibling of the canvas.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The default ellipsoid. If not specified, the default ellipsoid is used.\n * @param {MapProjection} [options.mapProjection=new GeographicProjection(options.ellipsoid)] The map projection to use in 2D and Columbus View modes.\n * @param {boolean} [options.orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency.\n * @param {boolean} [options.scene3DOnly=false] If true, optimizes memory use and performance for 3D mode but disables the ability to use 2D or Columbus View.\n * @param {boolean} [options.shadows=false] Determines if shadows are cast by light sources.\n * @param {MapMode2D} [options.mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n * @param {boolean} [options.requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @param {number} [options.maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @param {number} [options.depthPlaneEllipsoidOffset=0.0] Adjust the DepthPlane to address rendering artefacts below ellipsoid zero elevation.\n * @param {number} [options.msaaSamples=4] If provided, this value controls the rate of multisample antialiasing. Typical multisampling rates are 2, 4, and sometimes 8 samples per pixel. Higher sampling rates of MSAA may impact performance in exchange for improved visual quality. This value only applies to WebGL2 contexts that support multisample render targets. Set to 1 to disable MSAA.\n *\n * @see CesiumWidget\n * @see {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}\n *\n * @exception {DeveloperError} options and options.canvas are required.\n *\n * @example\n * // Create scene without anisotropic texture filtering\n * const scene = new Cesium.Scene({\n *   canvas : canvas,\n *   contextOptions : {\n *     allowTextureFilterAnisotropic : false\n *   }\n * });\n */\nfunction Scene(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const canvas = options.canvas;\n  let creditContainer = options.creditContainer;\n  let creditViewport = options.creditViewport;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(canvas)) {\n    throw new DeveloperError(\"options and options.canvas are required.\");\n  }\n  //>>includeEnd('debug');\n\n  const countReferences = options.contextOptions instanceof SharedContext;\n  if (countReferences) {\n    this._context = options.contextOptions.createSceneContext(canvas);\n  } else {\n    const contextOptions = clone(options.contextOptions);\n    this._context = new Context(canvas, contextOptions);\n  }\n  const context = this._context;\n\n  const hasCreditContainer = defined(creditContainer);\n  if (!hasCreditContainer) {\n    creditContainer = document.createElement(\"div\");\n    creditContainer.style.position = \"absolute\";\n    creditContainer.style.bottom = \"0\";\n    creditContainer.style[\"text-shadow\"] = \"0 0 2px #000000\";\n    creditContainer.style.color = \"#ffffff\";\n    creditContainer.style[\"font-size\"] = \"10px\";\n    creditContainer.style[\"padding-right\"] = \"5px\";\n    canvas.parentNode.appendChild(creditContainer);\n  }\n  if (!defined(creditViewport)) {\n    creditViewport = canvas.parentNode;\n  }\n\n  this._id = createGuid();\n  this._jobScheduler = new JobScheduler();\n  this._frameState = new FrameState(\n    context,\n    new CreditDisplay(creditContainer, \"•\", creditViewport),\n    this._jobScheduler,\n  );\n  this._frameState.scene3DOnly = options.scene3DOnly ?? false;\n  this._removeCreditContainer = !hasCreditContainer;\n  this._creditContainer = creditContainer;\n\n  this._canvas = canvas;\n  this._computeEngine = new ComputeEngine(context);\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n  this._globe = undefined;\n  this._globeTranslucencyState = new GlobeTranslucencyState();\n  this._primitives = new PrimitiveCollection({ countReferences });\n  this._groundPrimitives = new PrimitiveCollection({ countReferences });\n\n  this._globeHeight = undefined;\n  this._globeHeightDirty = true;\n  this._cameraUnderground = false;\n  this._removeUpdateHeightCallback = undefined;\n\n  this._logDepthBuffer = Scene.defaultLogDepthBuffer && context.fragmentDepth;\n  this._logDepthBufferDirty = true;\n\n  this._tweens = new TweenCollection();\n\n  this._shaderFrameCount = 0;\n\n  this._sunPostProcess = undefined;\n\n  this._computeCommandList = [];\n  this._overlayCommandList = [];\n\n  this._useOIT = options.orderIndependentTranslucency ?? true;\n  /**\n   * The function that will be used for executing translucent commands when\n   * useOIT is true. This is created once in\n   * obtainTranslucentCommandExecutionFunction, then cached here.\n   * @private\n   */\n  this._executeOITFunction = undefined;\n\n  this._depthPlane = new DepthPlane(options.depthPlaneEllipsoidOffset);\n\n  this._clearColorCommand = new ClearCommand({\n    color: new Color(),\n    stencil: 0,\n    owner: this,\n  });\n  this._depthClearCommand = new ClearCommand({\n    depth: 1.0,\n    owner: this,\n  });\n  this._stencilClearCommand = new ClearCommand({\n    stencil: 0,\n  });\n  this._classificationStencilClearCommand = new ClearCommand({\n    stencil: 0,\n    renderState: RenderState.fromCache({\n      stencilMask: StencilConstants.CLASSIFICATION_MASK,\n    }),\n  });\n\n  this._depthOnlyRenderStateCache = {};\n\n  this._transitioner = new SceneTransitioner(this);\n\n  this._preUpdate = new Event();\n  this._postUpdate = new Event();\n\n  this._renderError = new Event();\n  this._preRender = new Event();\n  this._postRender = new Event();\n\n  this._minimumDisableDepthTestDistance = 0.0;\n  this._debugInspector = new DebugInspector();\n\n  this._msaaSamples = options.msaaSamples ?? 4;\n\n  /**\n   * Exceptions occurring in <code>render</code> are always caught in order to raise the\n   * <code>renderError</code> event.  If this property is true, the error is rethrown\n   * after the event is raised.  If this property is false, the <code>render</code> function\n   * returns normally after raising the event.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.rethrowRenderErrors = false;\n\n  /**\n   * Determines whether or not to instantly complete the\n   * scene transition animation on user input.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.completeMorphOnUserInput = true;\n\n  /**\n   * The event fired at the beginning of a scene transition.\n   * @type {Event}\n   * @default Event()\n   */\n  this.morphStart = new Event();\n\n  /**\n   * The event fired at the completion of a scene transition.\n   * @type {Event}\n   * @default Event()\n   */\n  this.morphComplete = new Event();\n\n  /**\n   * The {@link SkyBox} used to draw the stars.\n   *\n   * @type {SkyBox | undefined}\n   * @default undefined\n   *\n   * @see Scene#backgroundColor\n   */\n  this.skyBox = undefined;\n\n  /**\n   * The sky atmosphere drawn around the globe.\n   *\n   * @type {SkyAtmosphere | undefined}\n   * @default undefined\n   */\n  this.skyAtmosphere = undefined;\n\n  /**\n   * The {@link Sun}.\n   *\n   * @type {Sun | undefined}\n   * @default undefined\n   */\n  this.sun = undefined;\n\n  /**\n   * Uses a bloom filter on the sun when enabled.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.sunBloom = true;\n  this._sunBloom = undefined;\n\n  /**\n   * The {@link Moon}\n   *\n   * @type {Moon | undefined}\n   * @default undefined\n   */\n  this.moon = undefined;\n\n  /**\n   * The background color, which is only visible if there is no sky box, i.e., {@link Scene#skyBox} is <code>undefined</code>.\n   *\n   * @type {Color}\n   * @default {@link Color.BLACK}\n   *\n   * @see Scene#skyBox\n   */\n  this.backgroundColor = Color.clone(Color.BLACK);\n\n  this._mode = SceneMode.SCENE3D;\n\n  this._mapProjection = defined(options.mapProjection)\n    ? options.mapProjection\n    : new GeographicProjection(this._ellipsoid);\n\n  /**\n   * The current morph transition time between 2D/Columbus View and 3D,\n   * with 0.0 being 2D or Columbus View and 1.0 being 3D.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.morphTime = 1.0;\n\n  /**\n   * The far-to-near ratio of the multi-frustum when using a normal depth buffer.\n   * <p>\n   * This value is used to create the near and far values for each frustum of the multi-frustum. It is only used\n   * when {@link Scene#logarithmicDepthBuffer} is <code>false</code>. When <code>logarithmicDepthBuffer</code> is\n   * <code>true</code>, use {@link Scene#logarithmicDepthFarToNearRatio}.\n   * </p>\n   *\n   * @type {number}\n   * @default 1000.0\n   */\n  this.farToNearRatio = 1000.0;\n\n  /**\n   * The far-to-near ratio of the multi-frustum when using a logarithmic depth buffer.\n   * <p>\n   * This value is used to create the near and far values for each frustum of the multi-frustum. It is only used\n   * when {@link Scene#logarithmicDepthBuffer} is <code>true</code>. When <code>logarithmicDepthBuffer</code> is\n   * <code>false</code>, use {@link Scene#farToNearRatio}.\n   * </p>\n   *\n   * @type {number}\n   * @default 1e9\n   */\n  this.logarithmicDepthFarToNearRatio = 1e9;\n\n  /**\n   * Determines the uniform depth size in meters of each frustum of the multifrustum in 2D. If a primitive or model close\n   * to the surface shows z-fighting, decreasing this will eliminate the artifact, but decrease performance. On the\n   * other hand, increasing this will increase performance but may cause z-fighting among primitives close to the surface.\n   *\n   * @type {number}\n   * @default 1.75e6\n   */\n  this.nearToFarDistance2D = 1.75e6;\n\n  /**\n   * The vertical exaggeration of the scene.\n   * When set to 1.0, no exaggeration is applied.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.verticalExaggeration = 1.0;\n\n  /**\n   * The reference height for vertical exaggeration of the scene.\n   * When set to 0.0, the exaggeration is applied relative to the ellipsoid surface.\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.verticalExaggerationRelativeHeight = 0.0;\n\n  /**\n   * This property is for debugging only; it is not for production use.\n   * <p>\n   * A function that determines what commands are executed.  As shown in the examples below,\n   * the function receives the command's <code>owner</code> as an argument, and returns a boolean indicating if the\n   * command should be executed.\n   * </p>\n   * <p>\n   * The default is <code>undefined</code>, indicating that all commands are executed.\n   * </p>\n   *\n   * @type {Function | undefined}\n   *\n   * @default undefined\n   *\n   * @example\n   * // Do not execute any commands.\n   * scene.debugCommandFilter = function(command) {\n   *     return false;\n   * };\n   *\n   * // Execute only the billboard's commands.  That is, only draw the billboard.\n   * const billboards = new Cesium.BillboardCollection();\n   * scene.debugCommandFilter = function(command) {\n   *     return command.owner === billboards;\n   * };\n   */\n  this.debugCommandFilter = undefined;\n\n  /**\n   * This property is for debugging only; it is not for production use.\n   * <p>\n   * When <code>true</code>, commands are randomly shaded.  This is useful\n   * for performance analysis to see what parts of a scene or model are\n   * command-dense and could benefit from batching.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowCommands = false;\n\n  /**\n   * This property is for debugging only; it is not for production use.\n   * <p>\n   * When <code>true</code>, commands are shaded based on the frustums they\n   * overlap.  Commands in the closest frustum are tinted red, commands in\n   * the next closest are green, and commands in the farthest frustum are\n   * blue.  If a command overlaps more than one frustum, the color components\n   * are combined, e.g., a command overlapping the first two frustums is tinted\n   * yellow.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowFrustums = false;\n\n  /**\n   * This property is for debugging only; it is not for production use.\n   * <p>\n   * Displays frames per second and time between frames.\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowFramesPerSecond = false;\n\n  /**\n   * This property is for debugging only; it is not for production use.\n   * <p>\n   * Indicates which frustum will have depth information displayed.\n   * </p>\n   *\n   * @type {number}\n   *\n   * @default 1\n   */\n  this.debugShowDepthFrustum = 1;\n\n  /**\n   * This property is for debugging only; it is not for production use.\n   * <p>\n   * When <code>true</code>, draws outlines to show the boundaries of the camera frustums\n   * </p>\n   *\n   * @type {boolean}\n   *\n   * @default false\n   */\n  this.debugShowFrustumPlanes = false;\n  this._debugShowFrustumPlanes = false;\n  this._debugFrustumPlanes = undefined;\n\n  /**\n   * When <code>true</code>, enables picking using the depth buffer.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.useDepthPicking = true;\n\n  /**\n   * When <code>true</code>, enables picking translucent geometry using the depth buffer. Note that {@link Scene#useDepthPicking} must also be true for enabling this to work.\n   *\n   * <p>\n   * There is a decrease in performance when enabled. There are extra draw calls to write depth for\n   * translucent geometry.\n   * </p>\n   *\n   * @example\n   * // picking the position of a translucent primitive\n   * viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) {\n   *      const pickedFeature = viewer.scene.pick(movement.position);\n   *      if (!Cesium.defined(pickedFeature)) {\n   *          // nothing picked\n   *          return;\n   *      }\n   *      const worldPosition = viewer.scene.pickPosition(movement.position);\n   * }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.pickTranslucentDepth = false;\n\n  /**\n   * The time in milliseconds to wait before checking if the camera has not moved and fire the cameraMoveEnd event.\n   * @type {number}\n   * @default 500.0\n   * @private\n   */\n  this.cameraEventWaitTime = 500.0;\n\n  /**\n   * Settings for atmosphere lighting effects affecting 3D Tiles and model rendering. This is not to be confused with\n   * {@link Scene#skyAtmosphere} which is responsible for rendering the sky.\n   *\n   * @type {Atmosphere}\n   */\n  this.atmosphere = new Atmosphere();\n\n  /**\n   * Blends the atmosphere to geometry far from the camera for horizon views. Allows for additional\n   * performance improvements by rendering less geometry and dispatching less terrain requests.\n   *\n   * Disbaled by default if an ellipsoid other than WGS84 is used.\n   * @type {Fog}\n   */\n  this.fog = new Fog();\n  this.fog.enabled = Ellipsoid.WGS84.equals(this._ellipsoid);\n\n  if (!Ellipsoid.WGS84.equals(this._ellipsoid)) {\n    Camera.DEFAULT_VIEW_RECTANGLE = Rectangle.fromDegrees(\n      -45.0,\n      -45.0,\n      45.0,\n      45.0,\n    );\n  }\n\n  this._shadowMapCamera = new Camera(this);\n\n  /**\n   * The shadow map for the scene's light source. When enabled, models, primitives, and the globe may cast and receive shadows.\n   * @type {ShadowMap}\n   */\n  this.shadowMap = new ShadowMap({\n    context: context,\n    lightCamera: this._shadowMapCamera,\n    enabled: options.shadows ?? false,\n  });\n\n  /**\n   * When <code>false</code>, 3D Tiles will render normally. When <code>true</code>, classified 3D Tile geometry will render normally and\n   * unclassified 3D Tile geometry will render with the color multiplied by {@link Scene#invertClassificationColor}.\n   * @type {boolean}\n   * @default false\n   */\n  this.invertClassification = false;\n\n  /**\n   * The highlight color of unclassified 3D Tile geometry when {@link Scene#invertClassification} is <code>true</code>.\n   * <p>When the color's alpha is less than 1.0, the unclassified portions of the 3D Tiles will not blend correctly with the classified positions of the 3D Tiles.</p>\n   * <p>Also, when the color's alpha is less than 1.0, the WEBGL_depth_texture and EXT_frag_depth WebGL extensions must be supported.</p>\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  this.invertClassificationColor = Color.clone(Color.WHITE);\n\n  this._actualInvertClassificationColor = Color.clone(\n    this._invertClassificationColor,\n  );\n  this._invertClassification = new InvertClassification();\n\n  /**\n   * The focal length for use when with cardboard or WebVR.\n   * @type {number}\n   */\n  this.focalLength = undefined;\n\n  /**\n   * The eye separation distance in meters for use with cardboard or WebVR.\n   * @type {number}\n   */\n  this.eyeSeparation = undefined;\n\n  /**\n   * Post processing effects applied to the final render.\n   * @type {PostProcessStageCollection}\n   */\n  this.postProcessStages = new PostProcessStageCollection();\n\n  this._brdfLutGenerator = new BrdfLutGenerator();\n\n  this._performanceDisplay = undefined;\n  this._debugVolume = undefined;\n\n  this._screenSpaceCameraController = new ScreenSpaceCameraController(this);\n  this._cameraUnderground = false;\n  this._mapMode2D = options.mapMode2D ?? MapMode2D.INFINITE_SCROLL;\n\n  // Keeps track of the state of a frame. FrameState is the state across\n  // the primitives of the scene. This state is for internally keeping track\n  // of celestial and environment effects that need to be updated/rendered in\n  // a certain order as well as updating/tracking framebuffer usage.\n  this._environmentState = {\n    skyBoxCommand: undefined,\n    skyAtmosphereCommand: undefined,\n    sunDrawCommand: undefined,\n    sunComputeCommand: undefined,\n    moonCommand: undefined,\n\n    isSunVisible: false,\n    isMoonVisible: false,\n    isReadyForAtmosphere: false,\n    isSkyAtmosphereVisible: false,\n\n    clearGlobeDepth: false,\n    useDepthPlane: false,\n    renderTranslucentDepthForPick: false,\n\n    originalFramebuffer: undefined,\n    useGlobeDepthFramebuffer: false,\n    useOIT: false,\n    useInvertClassification: false,\n    usePostProcess: false,\n    usePostProcessSelected: false,\n    useWebVR: false,\n  };\n\n  this._useWebVR = false;\n  this._cameraVR = undefined;\n  this._aspectRatioVR = undefined;\n\n  /**\n   * When <code>true</code>, rendering a frame will only occur when needed as determined by changes within the scene.\n   * Enabling improves performance of the application, but requires using {@link Scene#requestRender}\n   * to render a new frame explicitly in this mode. This will be necessary in many cases after making changes\n   * to the scene in other parts of the API.\n   *\n   * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n   * @see Scene#maximumRenderTimeChange\n   * @see Scene#requestRender\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.requestRenderMode = options.requestRenderMode ?? false;\n  this._renderRequested = true;\n\n  /**\n   * If {@link Scene#requestRenderMode} is <code>true</code>, this value defines the maximum change in\n   * simulation time allowed before a render is requested. Lower values increase the number of frames rendered\n   * and higher values decrease the number of frames rendered. If <code>undefined</code>, changes to\n   * the simulation time will never request a render.\n   * This value impacts the rate of rendering for changes in the scene like lighting, entity property updates,\n   * and animations.\n   *\n   * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n   * @see Scene#requestRenderMode\n   *\n   * @type {number}\n   * @default 0.0\n   */\n  this.maximumRenderTimeChange = options.maximumRenderTimeChange ?? 0.0;\n  this._lastRenderTime = undefined;\n  this._frameRateMonitor = undefined;\n\n  this._removeRequestListenerCallback =\n    RequestScheduler.requestCompletedEvent.addEventListener(\n      requestRenderAfterFrame(this),\n    );\n  this._removeTaskProcessorListenerCallback =\n    TaskProcessor.taskCompletedEvent.addEventListener(\n      requestRenderAfterFrame(this),\n    );\n  this._removeGlobeCallbacks = [];\n  this._removeTerrainProviderReadyListener = undefined;\n\n  const viewport = new BoundingRectangle(\n    0,\n    0,\n    context.drawingBufferWidth,\n    context.drawingBufferHeight,\n  );\n  const camera = new Camera(this);\n\n  if (this._logDepthBuffer) {\n    camera.frustum.near = 0.1;\n    camera.frustum.far = 10000000000.0;\n  }\n\n  /**\n   * The camera view for the scene camera flight destination. Used for preloading flight destination tiles.\n   * @type {Camera}\n   * @private\n   */\n  this.preloadFlightCamera = new Camera(this);\n\n  /**\n   * The culling volume for the scene camera flight destination. Used for preloading flight destination tiles.\n   * @type {CullingVolume}\n   * @private\n   */\n  this.preloadFlightCullingVolume = undefined;\n\n  this._picking = new Picking(this);\n  this._defaultView = new View(this, camera, viewport);\n  this._view = this._defaultView;\n\n  this._hdr = undefined;\n  this._hdrDirty = undefined;\n  this.highDynamicRange = false;\n  this.gamma = 2.2;\n\n  /**\n   * The spherical harmonic coefficients for image-based lighting of PBR models.\n   * @type {Cartesian3[]}\n   */\n  this.sphericalHarmonicCoefficients = undefined;\n\n  /**\n   * The url to the KTX2 file containing the specular environment map and convoluted mipmaps for image-based lighting of PBR models.\n   * @type {string}\n   */\n  this.specularEnvironmentMaps = undefined;\n  this._specularEnvironmentCubeMap = undefined;\n\n  /**\n   * The light source for shading. Defaults to a directional light from the Sun.\n   * @type {Light}\n   */\n  this.light = new SunLight();\n\n  /**\n   * Whether or not to enable edge visibility rendering for 3D tiles.\n   * When enabled, creates a framebuffer with multiple render targets\n   * for advanced edge detection and visibility techniques.\n   * @type {boolean}\n   * @default false\n   */\n  this._enableEdgeVisibility = false;\n\n  // Give frameState, camera, and screen space camera controller initial state before rendering\n  updateFrameNumber(this, 0.0, JulianDate.now());\n  this.updateFrameState();\n  this.initializeFrame();\n}\n\n/**\n * Use this to set the default value for {@link Scene#logarithmicDepthBuffer} in newly constructed Scenes\n * This property relies on fragmentDepth being supported.\n */\nScene.defaultLogDepthBuffer = true;\n\nfunction updateGlobeListeners(scene, globe) {\n  for (let i = 0; i < scene._removeGlobeCallbacks.length; ++i) {\n    scene._removeGlobeCallbacks[i]();\n  }\n  scene._removeGlobeCallbacks.length = 0;\n\n  const removeGlobeCallbacks = [];\n  if (defined(globe)) {\n    removeGlobeCallbacks.push(\n      globe.imageryLayersUpdatedEvent.addEventListener(\n        requestRenderAfterFrame(scene),\n      ),\n    );\n    removeGlobeCallbacks.push(\n      globe.terrainProviderChanged.addEventListener(\n        requestRenderAfterFrame(scene),\n      ),\n    );\n  }\n  scene._removeGlobeCallbacks = removeGlobeCallbacks;\n}\n\nObject.defineProperties(Scene.prototype, {\n  /**\n   * Gets the canvas element to which this scene is bound.\n   * @memberof Scene.prototype\n   *\n   * @type {HTMLCanvasElement}\n   * @readonly\n   */\n  canvas: {\n    get: function () {\n      return this._canvas;\n    },\n  },\n\n  /**\n   * The drawingBufferHeight of the underlying GL context.\n   * @memberof Scene.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferHeight|drawingBufferHeight}\n   */\n  drawingBufferHeight: {\n    get: function () {\n      return this._context.drawingBufferHeight;\n    },\n  },\n\n  /**\n   * The drawingBufferWidth of the underlying GL context.\n   * @memberof Scene.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @see {@link https://www.khronos.org/registry/webgl/specs/1.0/#DOM-WebGLRenderingContext-drawingBufferWidth|drawingBufferWidth}\n   */\n  drawingBufferWidth: {\n    get: function () {\n      return this._context.drawingBufferWidth;\n    },\n  },\n\n  /**\n   * The maximum aliased line width, in pixels, supported by this WebGL implementation.  It will be at least one.\n   * @memberof Scene.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>ALIASED_LINE_WIDTH_RANGE</code>.\n   */\n  maximumAliasedLineWidth: {\n    get: function () {\n      return ContextLimits.maximumAliasedLineWidth;\n    },\n  },\n\n  /**\n   * The maximum length in pixels of one edge of a cube map, supported by this WebGL implementation.  It will be at least 16.\n   * @memberof Scene.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @see {@link https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml|glGet} with <code>GL_MAX_CUBE_MAP_TEXTURE_SIZE</code>.\n   */\n  maximumCubeMapSize: {\n    get: function () {\n      return ContextLimits.maximumCubeMapSize;\n    },\n  },\n\n  /**\n   * Returns <code>true</code> if the {@link Scene#pickPosition} function is supported.\n   * @memberof Scene.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @see Scene#pickPosition\n   */\n  pickPositionSupported: {\n    get: function () {\n      return this._context.depthTexture;\n    },\n  },\n\n  /**\n   * Returns <code>true</code> if the {@link Scene#sampleHeight} and {@link Scene#sampleHeightMostDetailed} functions are supported.\n   * @memberof Scene.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @see Scene#sampleHeight\n   * @see Scene#sampleHeightMostDetailed\n   */\n  sampleHeightSupported: {\n    get: function () {\n      return this._context.depthTexture;\n    },\n  },\n\n  /**\n   * Returns <code>true</code> if the {@link Scene#clampToHeight} and {@link Scene#clampToHeightMostDetailed} functions are supported.\n   * @memberof Scene.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @see Scene#clampToHeight\n   * @see Scene#clampToHeightMostDetailed\n   */\n  clampToHeightSupported: {\n    get: function () {\n      return this._context.depthTexture;\n    },\n  },\n\n  /**\n   * Returns <code>true</code> if the {@link Scene#invertClassification} is supported.\n   * @memberof Scene.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @see Scene#invertClassification\n   */\n  invertClassificationSupported: {\n    get: function () {\n      return this._context.depthTexture;\n    },\n  },\n\n  /**\n   * Returns <code>true</code> if specular environment maps are supported.\n   * @memberof Scene.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   *\n   * @see Scene#specularEnvironmentMaps\n   */\n  specularEnvironmentMapsSupported: {\n    get: function () {\n      return SpecularEnvironmentCubeMap.isSupported(this._context);\n    },\n  },\n\n  /**\n   * The ellipsoid.  If not specified, the default ellipsoid is used.\n   * @memberof Scene.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n\n  /**\n   * Gets or sets the depth-test ellipsoid.\n   * @memberof Scene.prototype\n   *\n   * @type {Globe}\n   */\n  globe: {\n    get: function () {\n      return this._globe;\n    },\n\n    set: function (globe) {\n      this._globe = this._globe && this._globe.destroy();\n      this._globe = globe;\n\n      updateGlobeListeners(this, globe);\n    },\n  },\n\n  /**\n   * Gets the collection of primitives.\n   * @memberof Scene.prototype\n   *\n   * @type {PrimitiveCollection}\n   * @readonly\n   */\n  primitives: {\n    get: function () {\n      return this._primitives;\n    },\n  },\n\n  /**\n   * Gets the collection of ground primitives.\n   * @memberof Scene.prototype\n   *\n   * @type {PrimitiveCollection}\n   * @readonly\n   */\n  groundPrimitives: {\n    get: function () {\n      return this._groundPrimitives;\n    },\n  },\n\n  /**\n   * Gets or sets the camera.\n   * @memberof Scene.prototype\n   *\n   * @type {Camera}\n   * @readonly\n   */\n  camera: {\n    get: function () {\n      return this._view.camera;\n    },\n    set: function (camera) {\n      // For internal use only. Documentation is still @readonly.\n      this._view.camera = camera;\n    },\n  },\n\n  /**\n   * Gets or sets the view.\n   * @memberof Scene.prototype\n   *\n   * @type {View}\n   * @readonly\n   *\n   * @private\n   */\n  view: {\n    get: function () {\n      return this._view;\n    },\n    set: function (view) {\n      // For internal use only. Documentation is still @readonly.\n      this._view = view;\n    },\n  },\n\n  /**\n   * Gets the default view.\n   * @memberof Scene.prototype\n   *\n   * @type {View}\n   * @readonly\n   *\n   * @private\n   */\n  defaultView: {\n    get: function () {\n      return this._defaultView;\n    },\n  },\n\n  /**\n   * Gets picking functions and state\n   * @memberof Scene.prototype\n   *\n   * @type {Picking}\n   * @readonly\n   *\n   * @private\n   */\n  picking: {\n    get: function () {\n      return this._picking;\n    },\n  },\n\n  /**\n   * Gets the controller for camera input handling.\n   * @memberof Scene.prototype\n   *\n   * @type {ScreenSpaceCameraController}\n   * @readonly\n   */\n  screenSpaceCameraController: {\n    get: function () {\n      return this._screenSpaceCameraController;\n    },\n  },\n\n  /**\n   * Get the map projection to use in 2D and Columbus View modes.\n   * @memberof Scene.prototype\n   *\n   * @type {MapProjection}\n   * @readonly\n   *\n   * @default new GeographicProjection()\n   */\n  mapProjection: {\n    get: function () {\n      return this._mapProjection;\n    },\n  },\n\n  /**\n   * Gets the job scheduler\n   * @memberof Scene.prototype\n   * @type {JobScheduler}\n   * @readonly\n   *\n   * @private\n   */\n  jobScheduler: {\n    get: function () {\n      return this._jobScheduler;\n    },\n  },\n\n  /**\n   * Gets state information about the current scene. If called outside of a primitive's <code>update</code>\n   * function, the previous frame's state is returned.\n   * @memberof Scene.prototype\n   *\n   * @type {FrameState}\n   * @readonly\n   *\n   * @private\n   */\n  frameState: {\n    get: function () {\n      return this._frameState;\n    },\n  },\n\n  /**\n   * Gets the environment state.\n   * @memberof Scene.prototype\n   *\n   * @type {EnvironmentState}\n   * @readonly\n   *\n   * @private\n   */\n  environmentState: {\n    get: function () {\n      return this._environmentState;\n    },\n  },\n\n  /**\n   * Gets the collection of tweens taking place in the scene.\n   * @memberof Scene.prototype\n   *\n   * @type {TweenCollection}\n   * @readonly\n   *\n   * @private\n   */\n  tweens: {\n    get: function () {\n      return this._tweens;\n    },\n  },\n\n  /**\n   * Gets the collection of image layers that will be rendered on the globe.\n   * @memberof Scene.prototype\n   *\n   * @type {ImageryLayerCollection}\n   * @readonly\n   */\n  imageryLayers: {\n    get: function () {\n      if (!defined(this.globe)) {\n        return undefined;\n      }\n\n      return this.globe.imageryLayers;\n    },\n  },\n\n  /**\n   * The terrain provider providing surface geometry for the globe.\n   * @memberof Scene.prototype\n   *\n   * @type {TerrainProvider}\n   */\n  terrainProvider: {\n    get: function () {\n      if (!defined(this.globe)) {\n        return undefined;\n      }\n\n      return this.globe.terrainProvider;\n    },\n    set: function (terrainProvider) {\n      // Cancel any in-progress terrain update\n      this._removeTerrainProviderReadyListener =\n        this._removeTerrainProviderReadyListener &&\n        this._removeTerrainProviderReadyListener();\n\n      if (defined(this.globe)) {\n        this.globe.terrainProvider = terrainProvider;\n      }\n    },\n  },\n\n  /**\n   * Gets an event that's raised when the terrain provider is changed\n   * @memberof Scene.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  terrainProviderChanged: {\n    get: function () {\n      if (!defined(this.globe)) {\n        return undefined;\n      }\n\n      return this.globe.terrainProviderChanged;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised before the scene is updated or rendered.  Subscribers to the event\n   * receive the Scene instance as the first parameter and the current time as the second parameter.\n   * @memberof Scene.prototype\n   *\n   * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n   * @see Scene#postUpdate\n   * @see Scene#preRender\n   * @see Scene#postRender\n   *\n   * @type {Event}\n   * @readonly\n   */\n  preUpdate: {\n    get: function () {\n      return this._preUpdate;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised immediately after the scene is updated and before the scene is rendered.\n   * Subscribers to the event receive the Scene instance as the first parameter and the current time as the second\n   * parameter.\n   * @memberof Scene.prototype\n   *\n   * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n   * @see Scene#preUpdate\n   * @see Scene#preRender\n   * @see Scene#postRender\n   *\n   * @type {Event}\n   * @readonly\n   */\n  postUpdate: {\n    get: function () {\n      return this._postUpdate;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised when an error is thrown inside the <code>render</code> function.\n   * The Scene instance and the thrown error are the only two parameters passed to the event handler.\n   * By default, errors are not rethrown after this event is raised, but that can be changed by setting\n   * the <code>rethrowRenderErrors</code> property.\n   * @memberof Scene.prototype\n   *\n   * @type {Event}\n   * @readonly\n   */\n  renderError: {\n    get: function () {\n      return this._renderError;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised after the scene is updated and immediately before the scene is rendered.\n   * Subscribers to the event receive the Scene instance as the first parameter and the current time as the second\n   * parameter.\n   * @memberof Scene.prototype\n   *\n   * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n   * @see Scene#preUpdate\n   * @see Scene#postUpdate\n   * @see Scene#postRender\n   *\n   * @type {Event}\n   * @readonly\n   */\n  preRender: {\n    get: function () {\n      return this._preRender;\n    },\n  },\n\n  /**\n   * Gets the event that will be raised immediately after the scene is rendered.  Subscribers to the event\n   * receive the Scene instance as the first parameter and the current time as the second parameter.\n   * @memberof Scene.prototype\n   *\n   * @see {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}\n   * @see Scene#preUpdate\n   * @see Scene#postUpdate\n   * @see Scene#postRender\n   *\n   * @type {Event}\n   * @readonly\n   */\n  postRender: {\n    get: function () {\n      return this._postRender;\n    },\n  },\n\n  /**\n   * Gets the simulation time when the scene was last rendered. Returns <code>undefined</code>\n   * if the scene has not yet been rendered.\n   * @memberof Scene.prototype\n   *\n   * @type {JulianDate | undefined}\n   * @readonly\n   */\n  lastRenderTime: {\n    get: function () {\n      return this._lastRenderTime;\n    },\n  },\n\n  /**\n   * @memberof Scene.prototype\n   * @private\n   * @readonly\n   */\n  context: {\n    get: function () {\n      return this._context;\n    },\n  },\n\n  /**\n   * This property is for debugging only; it is not for production use.\n   * <p>\n   * When {@link Scene.debugShowFrustums} is <code>true</code>, this contains\n   * properties with statistics about the number of command execute per frustum.\n   * <code>totalCommands</code> is the total number of commands executed, ignoring\n   * overlap. <code>commandsInFrustums</code> is an array with the number of times\n   * commands are executed redundantly, e.g., how many commands overlap two or\n   * three frustums.\n   * </p>\n   *\n   * @memberof Scene.prototype\n   *\n   * @type {object | undefined}\n   * @readonly\n   *\n   * @default undefined\n   */\n  debugFrustumStatistics: {\n    get: function () {\n      return this._view.debugFrustumStatistics;\n    },\n  },\n\n  /**\n   * Gets whether or not the scene is optimized for 3D only viewing.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  scene3DOnly: {\n    get: function () {\n      return this._frameState.scene3DOnly;\n    },\n  },\n\n  /**\n   * Gets whether or not the scene has order independent translucency enabled.\n   * Note that this only reflects the original construction option, and there are\n   * other factors that could prevent OIT from functioning on a given system configuration.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  orderIndependentTranslucency: {\n    get: function () {\n      return this._useOIT;\n    },\n  },\n\n  /**\n   * Gets the unique identifier for this scene.\n   * @memberof Scene.prototype\n   * @type {string}\n   * @readonly\n   */\n  id: {\n    get: function () {\n      return this._id;\n    },\n  },\n\n  /**\n   * Gets or sets the current mode of the scene.\n   * @memberof Scene.prototype\n   * @type {SceneMode}\n   * @default {@link SceneMode.SCENE3D}\n   */\n  mode: {\n    get: function () {\n      return this._mode;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (this.scene3DOnly && value !== SceneMode.SCENE3D) {\n        throw new DeveloperError(\n          \"Only SceneMode.SCENE3D is valid when scene3DOnly is true.\",\n        );\n      }\n      //>>includeEnd('debug');\n      if (value === SceneMode.SCENE2D) {\n        this.morphTo2D(0);\n      } else if (value === SceneMode.SCENE3D) {\n        this.morphTo3D(0);\n      } else if (value === SceneMode.COLUMBUS_VIEW) {\n        this.morphToColumbusView(0);\n        //>>includeStart('debug', pragmas.debug);\n      } else {\n        throw new DeveloperError(\n          \"value must be a valid SceneMode enumeration.\",\n        );\n        //>>includeEnd('debug');\n      }\n      this._mode = value;\n    },\n  },\n\n  /**\n   * Gets the number of frustums used in the last frame.\n   * @memberof Scene.prototype\n   * @type {FrustumCommands[]}\n   *\n   * @private\n   */\n  frustumCommandsList: {\n    get: function () {\n      return this._view.frustumCommandsList;\n    },\n  },\n\n  /**\n   * Gets the number of frustums used in the last frame.\n   * @memberof Scene.prototype\n   * @type {number}\n   *\n   * @private\n   */\n  numberOfFrustums: {\n    get: function () {\n      return this._view.frustumCommandsList.length;\n    },\n  },\n\n  /**\n   * When <code>true</code>, splits the scene into two viewports with steroscopic views for the left and right eyes.\n   * Used for cardboard and WebVR.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   * @default false\n   */\n  useWebVR: {\n    get: function () {\n      return this._useWebVR;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (this.camera.frustum instanceof OrthographicFrustum) {\n        throw new DeveloperError(\n          \"VR is unsupported with an orthographic projection.\",\n        );\n      }\n      //>>includeEnd('debug');\n      this._useWebVR = value;\n      if (this._useWebVR) {\n        this._frameState.creditDisplay.container.style.visibility = \"hidden\";\n        this._cameraVR = new Camera(this);\n        if (!defined(this._deviceOrientationCameraController)) {\n          this._deviceOrientationCameraController =\n            new DeviceOrientationCameraController(this);\n        }\n\n        this._aspectRatioVR = this.camera.frustum.aspectRatio;\n      } else {\n        this._frameState.creditDisplay.container.style.visibility = \"visible\";\n        this._cameraVR = undefined;\n        this._deviceOrientationCameraController =\n          this._deviceOrientationCameraController &&\n          !this._deviceOrientationCameraController.isDestroyed() &&\n          this._deviceOrientationCameraController.destroy();\n\n        this.camera.frustum.aspectRatio = this._aspectRatioVR;\n        this.camera.frustum.xOffset = 0.0;\n      }\n    },\n  },\n\n  /**\n   * Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n   * @memberof Scene.prototype\n   * @type {MapMode2D}\n   * @readonly\n   */\n  mapMode2D: {\n    get: function () {\n      return this._mapMode2D;\n    },\n  },\n\n  /**\n   * Gets or sets the position of the splitter within the viewport.  Valid values are between 0.0 and 1.0.\n   * @memberof Scene.prototype\n   *\n   * @type {number}\n   */\n  splitPosition: {\n    get: function () {\n      return this._frameState.splitPosition;\n    },\n    set: function (value) {\n      this._frameState.splitPosition = value;\n    },\n  },\n\n  /**\n   * The distance from the camera at which to disable the depth test of billboards, labels and points\n   * to, for example, prevent clipping against terrain. When set to zero, the depth test should always\n   * be applied. When less than zero, the depth test should never be applied. Setting the disableDepthTestDistance\n   * property of a billboard, label or point will override this value.\n   * @memberof Scene.prototype\n   * @type {number}\n   * @default 0.0\n   */\n  minimumDisableDepthTestDistance: {\n    get: function () {\n      return this._minimumDisableDepthTestDistance;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value) || value < 0.0) {\n        throw new DeveloperError(\n          \"minimumDisableDepthTestDistance must be greater than or equal to 0.0.\",\n        );\n      }\n      //>>includeEnd('debug');\n      this._minimumDisableDepthTestDistance = value;\n    },\n  },\n\n  /**\n   * Whether or not to use a logarithmic depth buffer. Enabling this option will allow for less frustums in the multi-frustum,\n   * increasing performance. This property relies on fragmentDepth being supported.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   */\n  logarithmicDepthBuffer: {\n    get: function () {\n      return this._logDepthBuffer;\n    },\n    set: function (value) {\n      value = this._context.fragmentDepth && value;\n      if (this._logDepthBuffer !== value) {\n        this._logDepthBuffer = value;\n        this._logDepthBufferDirty = true;\n      }\n    },\n  },\n\n  /**\n   * The value used for gamma correction. This is only used when rendering with high dynamic range.\n   * @memberof Scene.prototype\n   * @type {number}\n   * @default 2.2\n   */\n  gamma: {\n    get: function () {\n      return this._context.uniformState.gamma;\n    },\n    set: function (value) {\n      this._context.uniformState.gamma = value;\n    },\n  },\n\n  /**\n   * Whether or not to use high dynamic range rendering.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   * @default false\n   */\n  highDynamicRange: {\n    get: function () {\n      return this._hdr;\n    },\n    set: function (value) {\n      const context = this._context;\n      const hdr =\n        value &&\n        context.depthTexture &&\n        (context.colorBufferFloat || context.colorBufferHalfFloat);\n      this._hdrDirty = hdr !== this._hdr;\n      this._hdr = hdr;\n    },\n  },\n\n  /**\n   * Whether or not high dynamic range rendering is supported.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   * @readonly\n   * @default true\n   */\n  highDynamicRangeSupported: {\n    get: function () {\n      const context = this._context;\n      return (\n        context.depthTexture &&\n        (context.colorBufferFloat || context.colorBufferHalfFloat)\n      );\n    },\n  },\n\n  /**\n   * Whether or not the camera is underneath the globe.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   * @readonly\n   * @default false\n   */\n  cameraUnderground: {\n    get: function () {\n      return this._cameraUnderground;\n    },\n  },\n\n  /**\n   * The sample rate of multisample antialiasing (values greater than 1 enable MSAA).\n   * @memberof Scene.prototype\n   * @type {number}\n   * @default 4\n   */\n  msaaSamples: {\n    get: function () {\n      return this._msaaSamples;\n    },\n    set: function (value) {\n      value = Math.min(value, ContextLimits.maximumSamples);\n      this._msaaSamples = value;\n    },\n  },\n\n  /**\n   * Returns <code>true</code> if the Scene's context supports MSAA.\n   * @memberof Scene.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  msaaSupported: {\n    get: function () {\n      return this._context.msaa;\n    },\n  },\n\n  /**\n   * Ratio between a pixel and a density-independent pixel. Provides a standard unit of\n   * measure for real pixel measurements appropriate to a particular device.\n   *\n   * @memberof Scene.prototype\n   * @type {number}\n   * @default 1.0\n   * @private\n   */\n  pixelRatio: {\n    get: function () {\n      return this._frameState.pixelRatio;\n    },\n    set: function (value) {\n      this._frameState.pixelRatio = value;\n    },\n  },\n\n  /**\n   * @private\n   */\n  opaqueFrustumNearOffset: {\n    get: function () {\n      return 0.9999;\n    },\n  },\n\n  /**\n   * @private\n   */\n  globeHeight: {\n    get: function () {\n      return this._globeHeight;\n    },\n  },\n});\n\n/**\n * Determines if a compressed texture format is supported.\n * @param {string} format The texture format. May be the name of the format or the WebGL extension name, e.g. s3tc or WEBGL_compressed_texture_s3tc.\n * @return {boolean} Whether or not the format is supported.\n */\nScene.prototype.getCompressedTextureFormatSupported = function (format) {\n  const context = this.context;\n  return (\n    ((format === \"WEBGL_compressed_texture_s3tc\" || format === \"s3tc\") &&\n      context.s3tc) ||\n    ((format === \"WEBGL_compressed_texture_pvrtc\" || format === \"pvrtc\") &&\n      context.pvrtc) ||\n    ((format === \"WEBGL_compressed_texture_etc\" || format === \"etc\") &&\n      context.etc) ||\n    ((format === \"WEBGL_compressed_texture_etc1\" || format === \"etc1\") &&\n      context.etc1) ||\n    ((format === \"WEBGL_compressed_texture_astc\" || format === \"astc\") &&\n      context.astc) ||\n    ((format === \"EXT_texture_compression_bptc\" || format === \"bc7\") &&\n      context.bc7)\n  );\n};\n\nfunction pickedMetadataInfoChanged(command, frameState) {\n  const oldPickedMetadataInfo = command.pickedMetadataInfo;\n  const newPickedMetadataInfo = frameState.pickedMetadataInfo;\n  if (oldPickedMetadataInfo?.schemaId !== newPickedMetadataInfo?.schemaId) {\n    return true;\n  }\n  if (oldPickedMetadataInfo?.className !== newPickedMetadataInfo?.className) {\n    return true;\n  }\n  if (\n    oldPickedMetadataInfo?.propertyName !== newPickedMetadataInfo?.propertyName\n  ) {\n    return true;\n  }\n  return false;\n}\n\nfunction updateDerivedCommands(scene, command, shadowsDirty) {\n  const frameState = scene._frameState;\n  const context = scene._context;\n  const oit = scene._view.oit;\n  const { lightShadowMaps, lightShadowsEnabled } = frameState.shadowState;\n\n  let derivedCommands = command.derivedCommands;\n\n  if (defined(command.pickId)) {\n    derivedCommands.picking = DerivedCommand.createPickDerivedCommand(\n      scene,\n      command,\n      context,\n      derivedCommands.picking,\n    );\n  }\n  if (frameState.pickingMetadata && command.pickMetadataAllowed) {\n    command.pickedMetadataInfo = frameState.pickedMetadataInfo;\n    if (defined(command.pickedMetadataInfo)) {\n      derivedCommands.pickingMetadata =\n        DerivedCommand.createPickMetadataDerivedCommand(\n          scene,\n          command,\n          context,\n          derivedCommands.pickingMetadata,\n        );\n    }\n  }\n  if (!command.pickOnly) {\n    derivedCommands.depth = DerivedCommand.createDepthOnlyDerivedCommand(\n      scene,\n      command,\n      context,\n      derivedCommands.depth,\n    );\n  }\n\n  derivedCommands.originalCommand = command;\n\n  if (scene._hdr) {\n    derivedCommands.hdr = DerivedCommand.createHdrCommand(\n      command,\n      context,\n      derivedCommands.hdr,\n    );\n    command = derivedCommands.hdr.command;\n    derivedCommands = command.derivedCommands;\n  }\n\n  if (lightShadowsEnabled && command.receiveShadows) {\n    derivedCommands.shadows = ShadowMap.createReceiveDerivedCommand(\n      lightShadowMaps,\n      command,\n      shadowsDirty,\n      context,\n      derivedCommands.shadows,\n    );\n  }\n\n  if (command.pass === Pass.TRANSLUCENT && defined(oit) && oit.isSupported()) {\n    if (lightShadowsEnabled && command.receiveShadows) {\n      derivedCommands.oit = defined(derivedCommands.oit)\n        ? derivedCommands.oit\n        : {};\n      derivedCommands.oit.shadows = oit.createDerivedCommands(\n        derivedCommands.shadows.receiveCommand,\n        context,\n        derivedCommands.oit.shadows,\n      );\n    } else {\n      derivedCommands.oit = oit.createDerivedCommands(\n        command,\n        context,\n        derivedCommands.oit,\n      );\n    }\n  }\n}\n\n/**\n * @private\n */\nScene.prototype.updateDerivedCommands = function (command) {\n  const { derivedCommands } = command;\n  if (!defined(derivedCommands)) {\n    // Is not a DrawCommand\n    return;\n  }\n\n  const frameState = this._frameState;\n  const { shadowState, useLogDepth } = this._frameState;\n  const context = this._context;\n\n  // Update derived commands when any shadow maps become dirty\n  let shadowsDirty = false;\n  const lastDirtyTime = shadowState.lastDirtyTime;\n  if (command.lastDirtyTime !== lastDirtyTime) {\n    command.lastDirtyTime = lastDirtyTime;\n    command.dirty = true;\n    shadowsDirty = true;\n  }\n\n  const useHdr = this._hdr;\n  const hasLogDepthDerivedCommands = defined(derivedCommands.logDepth);\n  const hasHdrCommands = defined(derivedCommands.hdr);\n  const hasDerivedCommands = defined(derivedCommands.originalCommand);\n  const needsLogDepthDerivedCommands =\n    useLogDepth && !hasLogDepthDerivedCommands;\n  const needsHdrCommands = useHdr && !hasHdrCommands;\n  const needsDerivedCommands = (!useLogDepth || !useHdr) && !hasDerivedCommands;\n  const needsUpdateForMetadataPicking =\n    frameState.pickingMetadata &&\n    pickedMetadataInfoChanged(command, frameState);\n  command.dirty =\n    command.dirty ||\n    needsLogDepthDerivedCommands ||\n    needsHdrCommands ||\n    needsDerivedCommands ||\n    needsUpdateForMetadataPicking;\n\n  if (!command.dirty) {\n    return;\n  }\n\n  command.dirty = false;\n\n  const { shadowsEnabled, shadowMaps } = shadowState;\n  if (shadowsEnabled && command.castShadows) {\n    derivedCommands.shadows = ShadowMap.createCastDerivedCommand(\n      shadowMaps,\n      command,\n      shadowsDirty,\n      context,\n      derivedCommands.shadows,\n    );\n  }\n\n  if (hasLogDepthDerivedCommands || needsLogDepthDerivedCommands) {\n    derivedCommands.logDepth = DerivedCommand.createLogDepthCommand(\n      command,\n      context,\n      derivedCommands.logDepth,\n    );\n    updateDerivedCommands(this, derivedCommands.logDepth.command, shadowsDirty);\n  }\n  if (hasDerivedCommands || needsDerivedCommands) {\n    updateDerivedCommands(this, command, shadowsDirty);\n  }\n};\n\nconst renderTilesetPassState = new Cesium3DTilePassState({\n  pass: Cesium3DTilePass.RENDER,\n});\n\nconst preloadTilesetPassState = new Cesium3DTilePassState({\n  pass: Cesium3DTilePass.PRELOAD,\n});\n\nconst preloadFlightTilesetPassState = new Cesium3DTilePassState({\n  pass: Cesium3DTilePass.PRELOAD_FLIGHT,\n});\n\nconst requestRenderModeDeferCheckPassState = new Cesium3DTilePassState({\n  pass: Cesium3DTilePass.REQUEST_RENDER_MODE_DEFER_CHECK,\n});\n\nconst scratchOccluderBoundingSphere = new BoundingSphere();\nlet scratchOccluder;\n/**\n * Get the central body occluder for the scene.\n * Assumes only one central body occluder, the top-level globe.\n *\n * @param {Scene} scene\n * @returns {Occluder|undefined}\n *\n * @private\n */\nfunction getOccluder(scene) {\n  if (\n    scene._mode !== SceneMode.SCENE3D ||\n    !scene.globe?.show ||\n    scene._cameraUnderground ||\n    scene._globeTranslucencyState.translucent\n  ) {\n    return undefined;\n  }\n\n  scratchOccluderBoundingSphere.radius =\n    scene.ellipsoid.minimumRadius + scene.frameState.minimumTerrainHeight;\n  scratchOccluder = Occluder.fromBoundingSphere(\n    scratchOccluderBoundingSphere,\n    scene.camera.positionWC,\n    scratchOccluder,\n  );\n\n  return scratchOccluder;\n}\n\n/**\n * @private\n * @param {FrameState.Passes} passes\n */\nScene.prototype.clearPasses = function (passes) {\n  passes.render = false;\n  passes.pick = false;\n  passes.pickVoxel = false;\n  passes.depth = false;\n  passes.postProcess = false;\n  passes.offscreen = false;\n};\n\nfunction updateFrameNumber(scene, frameNumber, time) {\n  const frameState = scene._frameState;\n  frameState.frameNumber = frameNumber;\n  frameState.time = JulianDate.clone(time, frameState.time);\n}\n\n/**\n * @private\n */\nScene.prototype.updateFrameState = function () {\n  const camera = this.camera;\n\n  const frameState = this._frameState;\n  frameState.commandList.length = 0;\n  frameState.shadowMaps.length = 0;\n  frameState.brdfLutGenerator = this._brdfLutGenerator;\n  frameState.environmentMap = this.skyBox && this.skyBox._cubeMap;\n  frameState.mode = this._mode;\n  frameState.morphTime = this.morphTime;\n  frameState.mapProjection = this.mapProjection;\n  frameState.camera = camera;\n  frameState.cullingVolume = camera.frustum.computeCullingVolume(\n    camera.positionWC,\n    camera.directionWC,\n    camera.upWC,\n  );\n  frameState.occluder = getOccluder(this);\n  frameState.minimumTerrainHeight = 0.0;\n  frameState.minimumDisableDepthTestDistance =\n    this._minimumDisableDepthTestDistance;\n  frameState.invertClassification = this.invertClassification;\n  frameState.useLogDepth =\n    this._logDepthBuffer &&\n    !(\n      this.camera.frustum instanceof OrthographicFrustum ||\n      this.camera.frustum instanceof OrthographicOffCenterFrustum\n    );\n  frameState.light = this.light;\n  frameState.cameraUnderground = this._cameraUnderground;\n  frameState.globeTranslucencyState = this._globeTranslucencyState;\n\n  const { globe } = this;\n  if (defined(globe) && globe._terrainExaggerationChanged) {\n    // Honor a user-set value for the old deprecated globe.terrainExaggeration.\n    // This can be removed when Globe.terrainExaggeration is removed.\n    this.verticalExaggeration = globe._terrainExaggeration;\n    this.verticalExaggerationRelativeHeight =\n      globe._terrainExaggerationRelativeHeight;\n    globe._terrainExaggerationChanged = false;\n  }\n  frameState.verticalExaggeration = this.verticalExaggeration;\n  frameState.verticalExaggerationRelativeHeight =\n    this.verticalExaggerationRelativeHeight;\n\n  if (\n    defined(this._specularEnvironmentCubeMap) &&\n    this._specularEnvironmentCubeMap.ready\n  ) {\n    frameState.specularEnvironmentMaps =\n      this._specularEnvironmentCubeMap.texture;\n    frameState.specularEnvironmentMapsMaximumLOD =\n      this._specularEnvironmentCubeMap.maximumMipmapLevel;\n  } else {\n    frameState.specularEnvironmentMaps = undefined;\n    frameState.specularEnvironmentMapsMaximumLOD = undefined;\n  }\n\n  frameState.sphericalHarmonicCoefficients = this.sphericalHarmonicCoefficients;\n\n  this._actualInvertClassificationColor = Color.clone(\n    this.invertClassificationColor,\n    this._actualInvertClassificationColor,\n  );\n  if (!InvertClassification.isTranslucencySupported(this._context)) {\n    this._actualInvertClassificationColor.alpha = 1.0;\n  }\n\n  frameState.invertClassificationColor = this._actualInvertClassificationColor;\n\n  if (defined(this.globe)) {\n    frameState.maximumScreenSpaceError = this.globe.maximumScreenSpaceError;\n  } else {\n    frameState.maximumScreenSpaceError = 2;\n  }\n\n  this.clearPasses(frameState.passes);\n\n  frameState.tilesetPassState = undefined;\n};\n\n/**\n * Check whether a draw command will render anything visible in the current Scene,\n * based on its bounding volume.\n *\n * @param {CullingVolume} cullingVolume The culling volume of the current Scene.\n * @param {DrawCommand} [command] The draw command\n * @param {Occluder} [occluder] An occluder that may be in front of the command's bounding volume.\n * @returns {boolean} <code>true</code> if the command's bounding volume is visible in the scene.\n *\n * @private\n */\nScene.prototype.isVisible = function (cullingVolume, command, occluder) {\n  if (!defined(command)) {\n    return false;\n  }\n  const { boundingVolume } = command;\n  if (!defined(boundingVolume) || !command.cull) {\n    return true;\n  }\n  if (cullingVolume.computeVisibility(boundingVolume) === Intersect.OUTSIDE) {\n    return false;\n  }\n  return (\n    !defined(occluder) ||\n    !command.occlude ||\n    !boundingVolume.isOccluded(occluder)\n  );\n};\n\nlet transformFrom2D = new Matrix4(\n  0.0,\n  0.0,\n  1.0,\n  0.0,\n  1.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  1.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  0.0,\n  1.0,\n);\ntransformFrom2D = Matrix4.inverseTransformation(\n  transformFrom2D,\n  transformFrom2D,\n);\n\n/**\n * Debug code to draw bounding volume for command.  Not optimized!\n * Assumes bounding volume is a bounding sphere or box.\n *\n * @param {DrawCommand} command The draw command for which to render the bounding volume.\n * @param {Scene} scene The scene.\n * @param {PassState} passState The state for the current render pass.\n * @param {Framebuffer} debugFramebuffer The framebuffer where the bounding volume will be rendered.\n *\n * @private\n */\nfunction debugShowBoundingVolume(command, scene, passState, debugFramebuffer) {\n  const frameState = scene._frameState;\n  const context = frameState.context;\n  const boundingVolume = command.boundingVolume;\n\n  if (defined(scene._debugVolume)) {\n    scene._debugVolume.destroy();\n  }\n\n  let center = Cartesian3.clone(boundingVolume.center);\n  if (frameState.mode !== SceneMode.SCENE3D) {\n    center = Matrix4.multiplyByPoint(transformFrom2D, center, center);\n    const projection = frameState.mapProjection;\n    const centerCartographic = projection.unproject(center);\n    center = projection.ellipsoid.cartographicToCartesian(centerCartographic);\n  }\n\n  let geometry;\n  let modelMatrix;\n  const { radius } = boundingVolume;\n  if (defined(radius)) {\n    geometry = EllipsoidGeometry.createGeometry(\n      new EllipsoidGeometry({\n        radii: new Cartesian3(radius, radius, radius),\n        vertexFormat: PerInstanceColorAppearance.FLAT_VERTEX_FORMAT,\n      }),\n    );\n    modelMatrix = Matrix4.fromTranslation(center);\n  } else {\n    geometry = BoxGeometry.createGeometry(\n      BoxGeometry.fromDimensions({\n        dimensions: new Cartesian3(2.0, 2.0, 2.0),\n        vertexFormat: PerInstanceColorAppearance.FLAT_VERTEX_FORMAT,\n      }),\n    );\n    modelMatrix = Matrix4.fromRotationTranslation(\n      boundingVolume.halfAxes,\n      center,\n      new Matrix4(),\n    );\n  }\n  scene._debugVolume = new Primitive({\n    geometryInstances: new GeometryInstance({\n      geometry: GeometryPipeline.toWireframe(geometry),\n      modelMatrix: modelMatrix,\n      attributes: {\n        color: new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0),\n      },\n    }),\n    appearance: new PerInstanceColorAppearance({\n      flat: true,\n      translucent: false,\n    }),\n    asynchronous: false,\n  });\n\n  const savedCommandList = frameState.commandList;\n  const commandList = (frameState.commandList = []);\n  scene._debugVolume.update(frameState);\n\n  command = commandList[0];\n\n  if (frameState.useLogDepth) {\n    const logDepth = DerivedCommand.createLogDepthCommand(command, context);\n    command = logDepth.command;\n  }\n\n  let framebuffer;\n  if (defined(debugFramebuffer)) {\n    framebuffer = passState.framebuffer;\n    passState.framebuffer = debugFramebuffer;\n  }\n\n  command.execute(context, passState);\n\n  if (defined(framebuffer)) {\n    passState.framebuffer = framebuffer;\n  }\n\n  frameState.commandList = savedCommandList;\n}\n\n/**\n * Execute a single draw command, or one of its derived commands if appropriate for the current render state.\n *\n * @param {DrawCommand} command The command to execute.\n * @param {Scene} scene The scene.\n * @param {PassState} passState The state for the current render pass.\n * @param {Framebuffer} debugFramebuffer The framebuffer where debug QCs will be rendered.\n *\n * @private\n */\nfunction executeCommand(command, scene, passState, debugFramebuffer) {\n  const frameState = scene._frameState;\n  const context = scene._context;\n\n  if (defined(scene.debugCommandFilter) && !scene.debugCommandFilter(command)) {\n    return;\n  }\n\n  if (command instanceof ClearCommand) {\n    command.execute(context, passState);\n    return;\n  }\n\n  if (command.debugShowBoundingVolume && defined(command.boundingVolume)) {\n    debugShowBoundingVolume(command, scene, passState, debugFramebuffer);\n  }\n\n  if (frameState.useLogDepth && defined(command.derivedCommands.logDepth)) {\n    command = command.derivedCommands.logDepth.command;\n  }\n\n  const passes = frameState.passes;\n  if (\n    !passes.pick &&\n    !passes.pickVoxel &&\n    !passes.depth &&\n    scene._hdr &&\n    defined(command.derivedCommands) &&\n    defined(command.derivedCommands.hdr)\n  ) {\n    command = command.derivedCommands.hdr.command;\n  }\n\n  if (passes.pick || passes.depth) {\n    if (passes.pick && !passes.depth) {\n      if (\n        frameState.pickingMetadata &&\n        defined(command.derivedCommands.pickingMetadata)\n      ) {\n        command = command.derivedCommands.pickingMetadata.pickMetadataCommand;\n        command.execute(context, passState);\n        return;\n      }\n      if (\n        !frameState.pickingMetadata &&\n        defined(command.derivedCommands.picking)\n      ) {\n        command = command.derivedCommands.picking.pickCommand;\n        command.execute(context, passState);\n        return;\n      }\n    } else if (defined(command.derivedCommands.depth)) {\n      command = command.derivedCommands.depth.depthOnlyCommand;\n      command.execute(context, passState);\n      return;\n    }\n  }\n\n  if (scene.debugShowCommands || scene.debugShowFrustums) {\n    scene._debugInspector.executeDebugShowFrustumsCommand(\n      scene,\n      command,\n      passState,\n    );\n    return;\n  }\n\n  if (\n    frameState.shadowState.lightShadowsEnabled &&\n    command.receiveShadows &&\n    defined(command.derivedCommands.shadows)\n  ) {\n    // If the command receives shadows, execute the derived shadows command.\n    // Some commands, such as OIT derived commands, do not have derived shadow commands themselves\n    // and instead shadowing is built-in. In this case execute the command regularly below.\n    command.derivedCommands.shadows.receiveCommand.execute(context, passState);\n  } else {\n    command.execute(context, passState);\n  }\n}\n\n/**\n * Execute a single ID draw command, used to render information for picking.\n *\n * @param {DrawCommand} command The command to execute.\n * @param {Scene} scene The scene.\n * @param {PassState} passState The state for the current render pass.\n *\n * @private\n */\nfunction executeIdCommand(command, scene, passState) {\n  const { derivedCommands } = command;\n  if (!defined(derivedCommands)) {\n    return;\n  }\n\n  const frameState = scene._frameState;\n  const context = scene._context;\n\n  if (frameState.useLogDepth && defined(derivedCommands.logDepth)) {\n    command = derivedCommands.logDepth.command;\n  }\n\n  const { picking, pickingMetadata, depth } = command.derivedCommands;\n  if (defined(pickingMetadata)) {\n    command = derivedCommands.pickingMetadata.pickMetadataCommand;\n    command.execute(context, passState);\n  }\n  if (defined(picking)) {\n    command = picking.pickCommand;\n    command.execute(context, passState);\n  } else if (defined(depth)) {\n    command = depth.depthOnlyCommand;\n    command.execute(context, passState);\n  }\n}\n\nfunction backToFront(a, b, position) {\n  return (\n    b.boundingVolume.distanceSquaredTo(position) -\n    a.boundingVolume.distanceSquaredTo(position)\n  );\n}\n\nconst scratchCart3 = new Cartesian3();\nfunction distanceSquaredToCenter(center, position) {\n  const diff = Cartesian3.subtract(center, position, scratchCart3);\n  const distance = Math.max(0.0, Cartesian3.magnitude(diff));\n  return distance * distance;\n}\n\nfunction backToFrontSplats(a, b, position) {\n  const boxA = a.boundingVolume;\n  const boxB = b.boundingVolume;\n\n  return (\n    distanceSquaredToCenter(boxB.center, position) -\n    distanceSquaredToCenter(boxA.center, position)\n  );\n}\n\nfunction frontToBack(a, b, position) {\n  // When distances are equal equal favor sorting b before a. This gives render priority to commands later in the list.\n  return (\n    a.boundingVolume.distanceSquaredTo(position) -\n    b.boundingVolume.distanceSquaredTo(position) +\n    CesiumMath.EPSILON12\n  );\n}\n\nfunction executeTranslucentCommandsBackToFront(\n  scene,\n  executeFunction,\n  passState,\n  commands,\n  invertClassification,\n) {\n  mergeSort(commands, backToFront, scene.camera.positionWC);\n\n  if (defined(invertClassification)) {\n    executeFunction(invertClassification.unclassifiedCommand, scene, passState);\n  }\n\n  for (let i = 0; i < commands.length; ++i) {\n    executeFunction(commands[i], scene, passState);\n  }\n}\n\nfunction executeTranslucentCommandsFrontToBack(\n  scene,\n  executeFunction,\n  passState,\n  commands,\n  invertClassification,\n) {\n  mergeSort(commands, frontToBack, scene.camera.positionWC);\n\n  if (defined(invertClassification)) {\n    executeFunction(invertClassification.unclassifiedCommand, scene, passState);\n  }\n\n  for (let i = 0; i < commands.length; ++i) {\n    executeFunction(commands[i], scene, passState);\n  }\n}\n/**\n * Execute commands to render voxels in the scene.\n *\n * @param {Scene} scene The scene.\n * @param {PassState} passState The state for the current render pass.\n * @param {FrustumCommands} frustumCommands The draw commands for the current frustum.\n *\n * @private\n */\nfunction performVoxelsPass(scene, passState, frustumCommands) {\n  scene.context.uniformState.updatePass(Pass.VOXELS);\n\n  const commands = frustumCommands.commands[Pass.VOXELS];\n  commands.length = frustumCommands.indices[Pass.VOXELS];\n\n  mergeSort(commands, backToFront, scene.camera.positionWC);\n\n  for (let i = 0; i < commands.length; ++i) {\n    executeCommand(commands[i], scene, passState);\n  }\n}\n\nfunction performGaussianSplatPass(scene, passState, frustumCommands) {\n  scene.context.uniformState.updatePass(Pass.GAUSSIAN_SPLATS);\n\n  const commands = frustumCommands.commands[Pass.GAUSSIAN_SPLATS];\n  commands.length = frustumCommands.indices[Pass.GAUSSIAN_SPLATS];\n\n  mergeSort(commands, backToFrontSplats, scene.camera.positionWC);\n\n  for (let i = 0; i < commands.length; ++i) {\n    executeCommand(commands[i], scene, passState);\n  }\n}\n\nconst scratchPerspectiveFrustum = new PerspectiveFrustum();\nconst scratchPerspectiveOffCenterFrustum = new PerspectiveOffCenterFrustum();\nconst scratchOrthographicFrustum = new OrthographicFrustum();\nconst scratchOrthographicOffCenterFrustum = new OrthographicOffCenterFrustum();\n/**\n * Create a working frustum from the original camera frustum.\n *\n * @param {Camera} camera The camera\n * @returns {PerspectiveFrustum|PerspectiveOffCenterFrustum|OrthographicFrustum|OrthographicOffCenterFrustum} The working frustum\n *\n * @private\n */\nfunction createWorkingFrustum(camera) {\n  const { frustum } = camera;\n  if (defined(frustum.fov)) {\n    return frustum.clone(scratchPerspectiveFrustum);\n  }\n  if (defined(frustum.infiniteProjectionMatrix)) {\n    return frustum.clone(scratchPerspectiveOffCenterFrustum);\n  }\n  if (defined(frustum.width)) {\n    return frustum.clone(scratchOrthographicFrustum);\n  }\n  return frustum.clone(scratchOrthographicOffCenterFrustum);\n}\n\n/**\n * Determine how translucent surfaces will be handled.\n *\n * When OIT is enabled, then this will delegate to OIT.executeCommands.\n * Otherwise, it will just be executeTranslucentCommandsBackToFront\n * for render passes, or executeTranslucentCommandsFrontToBack for\n * other passes.\n *\n * @param {Scene} scene The scene.\n * @returns {Function} A function to execute translucent commands.\n */\nfunction obtainTranslucentCommandExecutionFunction(scene) {\n  if (scene._environmentState.useOIT) {\n    if (!defined(scene._executeOITFunction)) {\n      const { view, context } = scene;\n      scene._executeOITFunction = function (\n        scene,\n        executeFunction,\n        passState,\n        commands,\n        invertClassification,\n      ) {\n        view.globeDepth.prepareColorTextures(context);\n        view.oit.executeCommands(\n          scene,\n          executeFunction,\n          passState,\n          commands,\n          invertClassification,\n        );\n      };\n    }\n    return scene._executeOITFunction;\n  }\n  if (scene.frameState.passes.render) {\n    return executeTranslucentCommandsBackToFront;\n  }\n  return executeTranslucentCommandsFrontToBack;\n}\n\n/**\n * Execute draw commands to render translucent objects in the scene.\n *\n * @param {Scene} scene The scene.\n * @param {PassState} passState The state for the current render pass.\n * @param {FrustumCommands} frustumCommands The draw commands for the current frustum.\n *\n * @private\n */\nfunction performTranslucentPass(scene, passState, frustumCommands) {\n  const { frameState, context } = scene;\n  const { pick, pickVoxel } = frameState.passes;\n  const picking = pick || pickVoxel;\n\n  let invertClassification;\n  if (\n    !picking &&\n    scene._environmentState.useInvertClassification &&\n    frameState.invertClassificationColor.alpha < 1.0\n  ) {\n    // Fullscreen pass to copy unclassified fragments when alpha < 1.0.\n    // Not executed when undefined.\n    invertClassification = scene._invertClassification;\n  }\n\n  const executeTranslucentCommands =\n    obtainTranslucentCommandExecutionFunction(scene);\n\n  context.uniformState.updatePass(Pass.TRANSLUCENT);\n  const commands = frustumCommands.commands[Pass.TRANSLUCENT];\n  commands.length = frustumCommands.indices[Pass.TRANSLUCENT];\n  executeTranslucentCommands(\n    scene,\n    executeCommand,\n    passState,\n    commands,\n    invertClassification,\n  );\n}\n\n/**\n * Execute commands for classification of translucent 3D Tiles.\n *\n * @param {Scene} scene The scene.\n * @param {PassState} passState The state for the current render pass.\n * @param {FrustumCommands} frustumCommands The draw commands for the current frustum.\n *\n * @private\n */\nfunction performTranslucent3DTilesClassification(\n  scene,\n  passState,\n  frustumCommands,\n) {\n  const { translucentTileClassification, globeDepth } = scene._view;\n  const has3DTilesClassificationCommands =\n    frustumCommands.indices[Pass.CESIUM_3D_TILE_CLASSIFICATION] > 0;\n  if (\n    !has3DTilesClassificationCommands ||\n    !translucentTileClassification.isSupported()\n  ) {\n    return;\n  }\n\n  const commands = frustumCommands.commands[Pass.TRANSLUCENT];\n  translucentTileClassification.executeTranslucentCommands(\n    scene,\n    executeCommand,\n    passState,\n    commands,\n    globeDepth.depthStencilTexture,\n  );\n  translucentTileClassification.executeClassificationCommands(\n    scene,\n    executeCommand,\n    passState,\n    frustumCommands,\n  );\n}\n\nfunction performCesium3DTileEdgesPass(scene, passState, frustumCommands) {\n  scene.context.uniformState.updatePass(Pass.CESIUM_3D_TILE_EDGES);\n\n  const originalFramebuffer = passState.framebuffer;\n\n  scene.context.uniformState.edgeColorTexture = scene.context.defaultTexture;\n  scene.context.uniformState.edgeIdTexture = scene.context.defaultTexture;\n  scene.context.uniformState.edgeDepthTexture = scene.context.defaultTexture;\n\n  // Set edge framebuffer for rendering\n  if (\n    scene._enableEdgeVisibility &&\n    defined(scene._view) &&\n    defined(scene._view.edgeFramebuffer)\n  ) {\n    passState.framebuffer = scene._view.edgeFramebuffer.framebuffer;\n  }\n\n  // performPass\n  const commands = frustumCommands.commands[Pass.CESIUM_3D_TILE_EDGES];\n  const commandCount = frustumCommands.indices[Pass.CESIUM_3D_TILE_EDGES];\n\n  // clear edge framebuffer\n  if (\n    scene._enableEdgeVisibility &&\n    defined(scene._view) &&\n    defined(scene._view.edgeFramebuffer)\n  ) {\n    const clearCommand = scene._view.edgeFramebuffer.getClearCommand(\n      new Color(0.0, 0.0, 0.0, 0.0),\n    );\n    clearCommand.execute(scene.context, passState);\n  }\n\n  // Then execute edge rendering commands\n  for (let j = 0; j < commandCount; ++j) {\n    executeCommand(commands[j], scene, passState);\n  }\n\n  passState.framebuffer = originalFramebuffer;\n}\n\n/**\n * Execute the draw commands for all the render passes.\n *\n * @param {Scene} scene\n * @param {PassState} passState\n *\n * @private\n */\nfunction executeCommands(scene, passState) {\n  const { camera, context, frameState } = scene;\n  const { uniformState } = context;\n\n  uniformState.updateCamera(camera);\n\n  const frustum = createWorkingFrustum(camera);\n  frustum.near = camera.frustum.near;\n  frustum.far = camera.frustum.far;\n\n  const passes = frameState.passes;\n  const picking = passes.pick || passes.pickVoxel;\n\n  // Ideally, we would render the sky box and atmosphere last for\n  // early-z, but we would have to draw it in each frustum.\n  // Do not render environment primitives during a pick pass since they do not generate picking commands.\n  if (!picking) {\n    renderEnvironment(scene, passState);\n  }\n\n  const {\n    clearGlobeDepth,\n    renderTranslucentDepthForPick,\n    useDepthPlane,\n    useGlobeDepthFramebuffer,\n    useInvertClassification,\n    usePostProcessSelected,\n  } = scene._environmentState;\n\n  const {\n    globeDepth,\n    globeTranslucencyFramebuffer,\n    sceneFramebuffer,\n    frustumCommandsList,\n  } = scene._view;\n  const numFrustums = frustumCommandsList.length;\n\n  const globeTranslucencyState = scene._globeTranslucencyState;\n  const clearDepth = scene._depthClearCommand;\n  const clearStencil = scene._stencilClearCommand;\n  const clearClassificationStencil = scene._classificationStencilClearCommand;\n  const depthPlane = scene._depthPlane;\n\n  const height2D = camera.position.z;\n\n  function performPass(frustumCommands, passId) {\n    uniformState.updatePass(passId);\n    const commands = frustumCommands.commands[passId];\n    const commandCount = frustumCommands.indices[passId];\n    for (let j = 0; j < commandCount; ++j) {\n      executeCommand(commands[j], scene, passState);\n    }\n    return commandCount;\n  }\n\n  function performIdPass(frustumCommands, passId) {\n    uniformState.updatePass(passId);\n    const commands = frustumCommands.commands[passId];\n    const commandCount = frustumCommands.indices[passId];\n    for (let j = 0; j < commandCount; ++j) {\n      executeIdCommand(commands[j], scene, passState);\n    }\n  }\n\n  // Execute commands in each frustum in back to front order\n  for (let i = 0; i < numFrustums; ++i) {\n    const index = numFrustums - i - 1;\n    const frustumCommands = frustumCommandsList[index];\n\n    if (scene.mode === SceneMode.SCENE2D) {\n      // To avoid z-fighting in 2D, move the camera to just before the frustum\n      // and scale the frustum depth to be in [1.0, nearToFarDistance2D].\n      camera.position.z = height2D - frustumCommands.near + 1.0;\n      frustum.far = Math.max(1.0, frustumCommands.far - frustumCommands.near);\n      frustum.near = 1.0;\n      uniformState.update(frameState);\n      uniformState.updateFrustum(frustum);\n    } else {\n      // Avoid tearing artifacts between adjacent frustums in the opaque passes\n      frustum.near =\n        index !== 0\n          ? frustumCommands.near * scene.opaqueFrustumNearOffset\n          : frustumCommands.near;\n      frustum.far = frustumCommands.far;\n      uniformState.updateFrustum(frustum);\n    }\n\n    clearDepth.execute(context, passState);\n\n    if (context.stencilBuffer) {\n      clearStencil.execute(context, passState);\n    }\n\n    if (globeTranslucencyState.translucent) {\n      uniformState.updatePass(Pass.GLOBE);\n      globeTranslucencyState.executeGlobeCommands(\n        frustumCommands,\n        executeCommand,\n        globeTranslucencyFramebuffer,\n        scene,\n        passState,\n      );\n    } else {\n      performPass(frustumCommands, Pass.GLOBE);\n    }\n\n    if (useGlobeDepthFramebuffer) {\n      globeDepth.executeCopyDepth(context, passState);\n    }\n\n    // Draw terrain classification\n    if (!renderTranslucentDepthForPick) {\n      if (globeTranslucencyState.translucent) {\n        uniformState.updatePass(Pass.TERRAIN_CLASSIFICATION);\n        globeTranslucencyState.executeGlobeClassificationCommands(\n          frustumCommands,\n          executeCommand,\n          globeTranslucencyFramebuffer,\n          scene,\n          passState,\n        );\n      } else {\n        performPass(frustumCommands, Pass.TERRAIN_CLASSIFICATION);\n      }\n    }\n\n    if (clearGlobeDepth) {\n      clearDepth.execute(context, passState);\n      if (useDepthPlane) {\n        depthPlane.execute(context, passState);\n      }\n    }\n\n    let commandCount;\n\n    // Draw edges FIRST - before binding textures to avoid feedback loop\n    performCesium3DTileEdgesPass(scene, passState, frustumCommands);\n\n    if (\n      scene._enableEdgeVisibility &&\n      defined(scene._view) &&\n      defined(scene._view.edgeFramebuffer)\n    ) {\n      // Get edge color texture (attachment 0)\n      const colorTexture = scene._view.edgeFramebuffer.colorTexture;\n      if (defined(colorTexture)) {\n        scene.context.uniformState.edgeColorTexture = colorTexture;\n      } else {\n        scene.context.uniformState.edgeColorTexture =\n          scene.context.defaultTexture;\n      }\n\n      // Get edge ID texture (attachment 1)\n      const idTexture = scene._view.edgeFramebuffer.idTexture;\n      if (defined(idTexture)) {\n        scene.context.uniformState.edgeIdTexture = idTexture;\n      } else {\n        scene.context.uniformState.edgeIdTexture = scene.context.defaultTexture;\n      }\n\n      // Get edge depth texture (attachment 2)\n      const edgeDepthTexture = scene._view.edgeFramebuffer.depthTexture;\n      if (defined(edgeDepthTexture)) {\n        scene.context.uniformState.edgeDepthTexture = edgeDepthTexture;\n      } else {\n        scene.context.uniformState.edgeDepthTexture =\n          scene.context.defaultTexture;\n      }\n    } else {\n      scene.context.uniformState.edgeColorTexture =\n        scene.context.defaultTexture;\n      scene.context.uniformState.edgeIdTexture = scene.context.defaultTexture;\n      scene.context.uniformState.edgeDepthTexture =\n        scene.context.defaultTexture;\n    }\n\n    if (!useInvertClassification || picking || renderTranslucentDepthForPick) {\n      // Common/fastest path. Draw 3D Tiles and classification normally.\n\n      // Draw 3D Tiles\n      commandCount = performPass(frustumCommands, Pass.CESIUM_3D_TILE);\n\n      if (commandCount > 0) {\n        if (useGlobeDepthFramebuffer) {\n          globeDepth.prepareColorTextures(context, clearGlobeDepth);\n          globeDepth.executeUpdateDepth(\n            context,\n            passState,\n            globeDepth.depthStencilTexture,\n          );\n        }\n\n        // Draw classifications. Modifies 3D Tiles color.\n        if (!renderTranslucentDepthForPick) {\n          commandCount = performPass(\n            frustumCommands,\n            Pass.CESIUM_3D_TILE_CLASSIFICATION,\n          );\n        }\n      }\n    } else {\n      // When the invert classification color is opaque:\n      //    Main FBO (FBO1):                   Main_Color   + Main_DepthStencil\n      //    Invert classification FBO (FBO2) : Invert_Color + Main_DepthStencil\n      //\n      //    1. Clear FBO2 color to vec4(0.0) for each frustum\n      //    2. Draw 3D Tiles to FBO2\n      //    3. Draw classification to FBO2\n      //    4. Fullscreen pass to FBO1, draw Invert_Color when:\n      //           * Main_DepthStencil has the stencil bit set > 0 (classified)\n      //    5. Fullscreen pass to FBO1, draw Invert_Color * czm_invertClassificationColor when:\n      //           * Main_DepthStencil has stencil bit set to 0 (unclassified) and\n      //           * Invert_Color !== vec4(0.0)\n      //\n      // When the invert classification color is translucent:\n      //    Main FBO (FBO1):                  Main_Color         + Main_DepthStencil\n      //    Invert classification FBO (FBO2): Invert_Color       + Invert_DepthStencil\n      //    IsClassified FBO (FBO3):          IsClassified_Color + Invert_DepthStencil\n      //\n      //    1. Clear FBO2 and FBO3 color to vec4(0.0), stencil to 0, and depth to 1.0\n      //    2. Draw 3D Tiles to FBO2\n      //    3. Draw classification to FBO2\n      //    4. Fullscreen pass to FBO3, draw any color when\n      //           * Invert_DepthStencil has the stencil bit set > 0 (classified)\n      //    5. Fullscreen pass to FBO1, draw Invert_Color when:\n      //           * Invert_Color !== vec4(0.0) and\n      //           * IsClassified_Color !== vec4(0.0)\n      //    6. Fullscreen pass to FBO1, draw Invert_Color * czm_invertClassificationColor when:\n      //           * Invert_Color !== vec4(0.0) and\n      //           * IsClassified_Color === vec4(0.0)\n      //\n      // NOTE: Step six when translucent invert color occurs after the TRANSLUCENT pass\n      //\n      scene._invertClassification.clear(context, passState);\n\n      const opaqueClassificationFramebuffer = passState.framebuffer;\n      passState.framebuffer = scene._invertClassification._fbo.framebuffer;\n\n      // Draw normally\n      commandCount = performPass(frustumCommands, Pass.CESIUM_3D_TILE);\n\n      if (useGlobeDepthFramebuffer) {\n        scene._invertClassification.prepareTextures(context);\n        globeDepth.executeUpdateDepth(\n          context,\n          passState,\n          scene._invertClassification._fbo.getDepthStencilTexture(),\n        );\n      }\n\n      // Set stencil\n      commandCount = performPass(\n        frustumCommands,\n        Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,\n      );\n\n      passState.framebuffer = opaqueClassificationFramebuffer;\n\n      // Fullscreen pass to copy classified fragments\n      scene._invertClassification.executeClassified(context, passState);\n      if (frameState.invertClassificationColor.alpha === 1.0) {\n        // Fullscreen pass to copy unclassified fragments when alpha == 1.0\n        scene._invertClassification.executeUnclassified(context, passState);\n      }\n\n      // Clear stencil set by the classification for the next classification pass\n      if (commandCount > 0 && context.stencilBuffer) {\n        clearClassificationStencil.execute(context, passState);\n      }\n\n      // Draw style over classification.\n      commandCount = performPass(\n        frustumCommands,\n        Pass.CESIUM_3D_TILE_CLASSIFICATION,\n      );\n    }\n\n    if (commandCount > 0 && context.stencilBuffer) {\n      clearStencil.execute(context, passState);\n    }\n\n    performVoxelsPass(scene, passState, frustumCommands);\n\n    performPass(frustumCommands, Pass.OPAQUE);\n\n    performGaussianSplatPass(scene, passState, frustumCommands);\n\n    if (index !== 0 && scene.mode !== SceneMode.SCENE2D) {\n      // Do not overlap frustums in the translucent pass to avoid blending artifacts\n      frustum.near = frustumCommands.near;\n      uniformState.updateFrustum(frustum);\n    }\n\n    performTranslucentPass(scene, passState, frustumCommands);\n\n    performTranslucent3DTilesClassification(scene, passState, frustumCommands);\n\n    if (\n      context.depthTexture &&\n      scene.useDepthPicking &&\n      (useGlobeDepthFramebuffer || renderTranslucentDepthForPick)\n    ) {\n      // PERFORMANCE_IDEA: Use MRT to avoid the extra copy.\n      const pickDepth = scene._picking.getPickDepth(scene, index);\n      pickDepth.update(context, globeDepth.depthStencilTexture);\n      pickDepth.executeCopyDepth(context, passState);\n    }\n\n    if (picking || !usePostProcessSelected) {\n      continue;\n    }\n\n    const originalFramebuffer = passState.framebuffer;\n    passState.framebuffer = sceneFramebuffer.getIdFramebuffer();\n\n    // reset frustum\n    frustum.near =\n      index !== 0\n        ? frustumCommands.near * scene.opaqueFrustumNearOffset\n        : frustumCommands.near;\n    frustum.far = frustumCommands.far;\n    uniformState.updateFrustum(frustum);\n\n    if (globeTranslucencyState.translucent) {\n      uniformState.updatePass(Pass.GLOBE);\n      globeTranslucencyState.executeGlobeCommands(\n        frustumCommands,\n        executeIdCommand,\n        globeTranslucencyFramebuffer,\n        scene,\n        passState,\n      );\n    } else {\n      performIdPass(frustumCommands, Pass.GLOBE);\n    }\n\n    if (clearGlobeDepth) {\n      clearDepth.framebuffer = passState.framebuffer;\n      clearDepth.execute(context, passState);\n      clearDepth.framebuffer = undefined;\n    }\n\n    if (clearGlobeDepth && useDepthPlane) {\n      depthPlane.execute(context, passState);\n    }\n\n    performIdPass(frustumCommands, Pass.CESIUM_3D_TILE);\n    performIdPass(frustumCommands, Pass.OPAQUE);\n    performIdPass(frustumCommands, Pass.TRANSLUCENT);\n\n    passState.framebuffer = originalFramebuffer;\n  }\n}\n\n/**\n * Render the sky, atmosphere, sun, and moon\n *\n * @param {Scene} scene The scene.\n * @param {PassState} passState The render state for the pass.\n *\n * @private\n */\nfunction renderEnvironment(scene, passState) {\n  const { context, environmentState, view } = scene;\n\n  context.uniformState.updatePass(Pass.ENVIRONMENT);\n\n  if (defined(environmentState.skyBoxCommand)) {\n    executeCommand(environmentState.skyBoxCommand, scene, passState);\n  }\n\n  if (environmentState.isSkyAtmosphereVisible) {\n    executeCommand(environmentState.skyAtmosphereCommand, scene, passState);\n  }\n\n  if (environmentState.isSunVisible) {\n    environmentState.sunDrawCommand.execute(context, passState);\n    if (scene.sunBloom && !environmentState.useWebVR) {\n      let framebuffer;\n      if (environmentState.useGlobeDepthFramebuffer) {\n        framebuffer = view.globeDepth.framebuffer;\n      } else if (environmentState.usePostProcess) {\n        framebuffer = view.sceneFramebuffer.framebuffer;\n      } else {\n        framebuffer = environmentState.originalFramebuffer;\n      }\n      scene._sunPostProcess.execute(context);\n      scene._sunPostProcess.copy(context, framebuffer);\n      passState.framebuffer = framebuffer;\n    }\n  }\n\n  // Moon can be seen through the atmosphere, since the sun is rendered after the atmosphere.\n  if (environmentState.isMoonVisible) {\n    environmentState.moonCommand.execute(context, passState);\n  }\n\n  // execute panorama commands, drop removed primitives\n  const panoramaCommandList = scene.frameState.panoramaCommandList;\n  for (let i = panoramaCommandList.length - 1; i >= 0; i--) {\n    const panoramaCommand = panoramaCommandList[i];\n    if (defined(panoramaCommand.shaderProgram)) {\n      executeCommand(panoramaCommandList[i], scene, passState);\n    } else {\n      //primitive was removed\n      panoramaCommandList.splice(i, 1);\n    }\n  }\n}\n\n/**\n * Execute compute commands from the scene's environment state and computeCommandList\n *\n * @param {Scene} scene\n *\n * @private\n */\nfunction executeComputeCommands(scene) {\n  scene.context.uniformState.updatePass(Pass.COMPUTE);\n\n  const sunComputeCommand = scene._environmentState.sunComputeCommand;\n  if (defined(sunComputeCommand)) {\n    sunComputeCommand.execute(scene._computeEngine);\n  }\n\n  const commandList = scene._computeCommandList;\n  for (let i = 0; i < commandList.length; ++i) {\n    commandList[i].execute(scene._computeEngine);\n  }\n}\n\n/**\n * Execute the draw commands for overlays\n *\n * @param {Scene} scene\n * @param {PassState} passState\n *\n * @private\n */\nfunction executeOverlayCommands(scene, passState) {\n  scene.context.uniformState.updatePass(Pass.OVERLAY);\n\n  const context = scene.context;\n  const commandList = scene._overlayCommandList;\n  for (let i = 0; i < commandList.length; ++i) {\n    commandList[i].execute(context, passState);\n  }\n}\n\n/**\n * Add the scene's draw commands into the shadow map passes.\n *\n * @param {Scene} scene\n * @param {DrawCommand[]} commandList\n * @param {ShadowMap} shadowMap\n *\n * @private\n */\nfunction insertShadowCastCommands(scene, commandList, shadowMap) {\n  const { shadowMapCullingVolume, isPointLight, passes } = shadowMap;\n  const numberOfPasses = passes.length;\n\n  const shadowedPasses = [\n    Pass.GLOBE,\n    Pass.CESIUM_3D_TILE,\n    Pass.OPAQUE,\n    Pass.TRANSLUCENT,\n  ];\n\n  for (let i = 0; i < commandList.length; ++i) {\n    const command = commandList[i];\n    scene.updateDerivedCommands(command);\n\n    if (\n      !command.castShadows ||\n      shadowedPasses.indexOf(command.pass) < 0 ||\n      !scene.isVisible(shadowMapCullingVolume, command)\n    ) {\n      continue;\n    }\n\n    if (isPointLight) {\n      for (let k = 0; k < numberOfPasses; ++k) {\n        passes[k].commandList.push(command);\n      }\n    } else if (numberOfPasses === 1) {\n      passes[0].commandList.push(command);\n    } else {\n      let wasVisible = false;\n      // Loop over cascades from largest to smallest\n      for (let j = numberOfPasses - 1; j >= 0; --j) {\n        const cascadeVolume = passes[j].cullingVolume;\n        if (scene.isVisible(cascadeVolume, command)) {\n          passes[j].commandList.push(command);\n          wasVisible = true;\n        } else if (wasVisible) {\n          // If it was visible in the previous cascade but now isn't\n          // then there is no need to check any more cascades\n          break;\n        }\n      }\n    }\n  }\n}\n\n/**\n * Execute the draw commands to cast shadows into the shadow maps.\n *\n * @param {Scene} scene\n *\n * @private\n */\nfunction executeShadowMapCastCommands(scene) {\n  const { shadowState, commandList } = scene.frameState;\n  const { shadowsEnabled, shadowMaps } = shadowState;\n\n  if (!shadowsEnabled) {\n    return;\n  }\n\n  const { context } = scene;\n  const { uniformState } = context;\n\n  for (let i = 0; i < shadowMaps.length; ++i) {\n    const shadowMap = shadowMaps[i];\n    if (shadowMap.outOfView) {\n      continue;\n    }\n\n    // Reset the command lists\n    const { passes } = shadowMap;\n    for (let j = 0; j < passes.length; ++j) {\n      passes[j].commandList.length = 0;\n    }\n\n    // Insert the primitive/model commands into the shadow map command lists\n    insertShadowCastCommands(scene, commandList, shadowMap);\n\n    for (let j = 0; j < passes.length; ++j) {\n      const pass = shadowMap.passes[j];\n      const { camera, commandList } = pass;\n      uniformState.updateCamera(camera);\n      shadowMap.updatePass(context, j);\n      for (let k = 0; k < commandList.length; ++k) {\n        const command = commandList[k];\n        // Set the correct pass before rendering into the shadow map because some shaders\n        // conditionally render based on whether the pass is translucent or opaque.\n        uniformState.updatePass(command.pass);\n        const castCommand = command.derivedCommands.shadows.castCommands[i];\n        executeCommand(castCommand, scene, pass.passState);\n      }\n    }\n  }\n}\n\nconst scratchEyeTranslation = new Cartesian3();\n\n/**\n * Update and clear framebuffers, and execute draw commands.\n *\n * @param {PassState} passState State specific to each render pass.\n * @param {Color} backgroundColor\n *\n * @private\n */\nScene.prototype.updateAndExecuteCommands = function (\n  passState,\n  backgroundColor,\n) {\n  updateAndClearFramebuffers(this, passState, backgroundColor);\n\n  if (this._environmentState.useWebVR) {\n    executeWebVRCommands(this, passState, backgroundColor);\n  } else if (\n    this._frameState.mode !== SceneMode.SCENE2D ||\n    this._mapMode2D === MapMode2D.ROTATE\n  ) {\n    executeCommandsInViewport(true, this, passState);\n  } else {\n    execute2DViewportCommands(this, passState);\n  }\n};\n\n/**\n * Execute the draw commands to render the scene into the stereo viewports of a WebVR application.\n *\n * @param {Scene} scene\n * @param {PassState} passState\n *\n * @private\n */\nfunction executeWebVRCommands(scene, passState) {\n  const view = scene._view;\n  const camera = view.camera;\n  const environmentState = scene._environmentState;\n  const renderTranslucentDepthForPick =\n    environmentState.renderTranslucentDepthForPick;\n\n  updateAndRenderPrimitives(scene);\n\n  view.createPotentiallyVisibleSet(scene);\n\n  executeComputeCommands(scene);\n\n  if (!renderTranslucentDepthForPick) {\n    executeShadowMapCastCommands(scene);\n  }\n\n  // Based on Calculating Stereo pairs by Paul Bourke\n  // http://paulbourke.net/stereographics/stereorender/\n  const viewport = passState.viewport;\n  viewport.x = 0;\n  viewport.y = 0;\n  viewport.width = viewport.width * 0.5;\n\n  const savedCamera = Camera.clone(camera, scene._cameraVR);\n  savedCamera.frustum = camera.frustum;\n\n  const near = camera.frustum.near;\n  const fo = near * (scene.focalLength ?? 5.0);\n  const eyeSeparation = scene.eyeSeparation ?? fo / 30.0;\n  const eyeTranslation = Cartesian3.multiplyByScalar(\n    savedCamera.right,\n    eyeSeparation * 0.5,\n    scratchEyeTranslation,\n  );\n\n  camera.frustum.aspectRatio = viewport.width / viewport.height;\n\n  const offset = (0.5 * eyeSeparation * near) / fo;\n\n  Cartesian3.add(savedCamera.position, eyeTranslation, camera.position);\n  camera.frustum.xOffset = offset;\n\n  executeCommands(scene, passState);\n\n  viewport.x = viewport.width;\n\n  Cartesian3.subtract(savedCamera.position, eyeTranslation, camera.position);\n  camera.frustum.xOffset = -offset;\n\n  executeCommands(scene, passState);\n\n  Camera.clone(savedCamera, camera);\n}\n\nconst scratch2DViewportCartographic = new Cartographic(\n  Math.PI,\n  CesiumMath.PI_OVER_TWO,\n);\nconst scratch2DViewportMaxCoord = new Cartesian3();\nconst scratch2DViewportSavedPosition = new Cartesian3();\nconst scratch2DViewportTransform = new Matrix4();\nconst scratch2DViewportCameraTransform = new Matrix4();\nconst scratch2DViewportEyePoint = new Cartesian3();\nconst scratch2DViewportWindowCoords = new Cartesian3();\nconst scratch2DViewport = new BoundingRectangle();\n\n/**\n * Execute the draw commands to render into a 2D viewport.\n *\n * @param {Scene} scene\n * @param {PassState} passState\n *\n * @private\n */\nfunction execute2DViewportCommands(scene, passState) {\n  const { frameState, camera } = scene;\n  const { uniformState } = scene.context;\n\n  const originalViewport = passState.viewport;\n  const viewport = BoundingRectangle.clone(originalViewport, scratch2DViewport);\n  passState.viewport = viewport;\n\n  const maxCartographic = scratch2DViewportCartographic;\n  const maxCoord = scratch2DViewportMaxCoord;\n\n  const projection = scene.mapProjection;\n  projection.project(maxCartographic, maxCoord);\n\n  const position = Cartesian3.clone(\n    camera.position,\n    scratch2DViewportSavedPosition,\n  );\n  const transform = Matrix4.clone(\n    camera.transform,\n    scratch2DViewportCameraTransform,\n  );\n  const frustum = camera.frustum.clone();\n\n  camera._setTransform(Matrix4.IDENTITY);\n\n  const viewportTransformation = Matrix4.computeViewportTransformation(\n    viewport,\n    0.0,\n    1.0,\n    scratch2DViewportTransform,\n  );\n  const projectionMatrix = camera.frustum.projectionMatrix;\n\n  const x = camera.positionWC.y;\n  const eyePoint = Cartesian3.fromElements(\n    CesiumMath.sign(x) * maxCoord.x - x,\n    0.0,\n    -camera.positionWC.x,\n    scratch2DViewportEyePoint,\n  );\n  const windowCoordinates = Transforms.pointToGLWindowCoordinates(\n    projectionMatrix,\n    viewportTransformation,\n    eyePoint,\n    scratch2DViewportWindowCoords,\n  );\n\n  windowCoordinates.x = Math.floor(windowCoordinates.x);\n\n  const viewportX = viewport.x;\n  const viewportWidth = viewport.width;\n\n  if (\n    x === 0.0 ||\n    windowCoordinates.x <= viewportX ||\n    windowCoordinates.x >= viewportX + viewportWidth\n  ) {\n    executeCommandsInViewport(true, scene, passState);\n  } else if (\n    Math.abs(viewportX + viewportWidth * 0.5 - windowCoordinates.x) < 1.0\n  ) {\n    viewport.width = windowCoordinates.x - viewport.x;\n\n    camera.position.x *= CesiumMath.sign(camera.position.x);\n\n    camera.frustum.right = 0.0;\n\n    frameState.cullingVolume = camera.frustum.computeCullingVolume(\n      camera.positionWC,\n      camera.directionWC,\n      camera.upWC,\n    );\n    uniformState.update(frameState);\n\n    executeCommandsInViewport(true, scene, passState);\n\n    viewport.x = windowCoordinates.x;\n\n    camera.position.x = -camera.position.x;\n\n    camera.frustum.right = -camera.frustum.left;\n    camera.frustum.left = 0.0;\n\n    frameState.cullingVolume = camera.frustum.computeCullingVolume(\n      camera.positionWC,\n      camera.directionWC,\n      camera.upWC,\n    );\n    uniformState.update(frameState);\n\n    executeCommandsInViewport(false, scene, passState);\n  } else if (windowCoordinates.x > viewportX + viewportWidth * 0.5) {\n    viewport.width = windowCoordinates.x - viewportX;\n\n    const right = camera.frustum.right;\n    camera.frustum.right = maxCoord.x - x;\n\n    frameState.cullingVolume = camera.frustum.computeCullingVolume(\n      camera.positionWC,\n      camera.directionWC,\n      camera.upWC,\n    );\n    uniformState.update(frameState);\n\n    executeCommandsInViewport(true, scene, passState);\n\n    viewport.x = windowCoordinates.x;\n    viewport.width = viewportX + viewportWidth - windowCoordinates.x;\n\n    camera.position.x = -camera.position.x;\n\n    camera.frustum.left = -camera.frustum.right;\n    camera.frustum.right = right - camera.frustum.right * 2.0;\n\n    frameState.cullingVolume = camera.frustum.computeCullingVolume(\n      camera.positionWC,\n      camera.directionWC,\n      camera.upWC,\n    );\n    uniformState.update(frameState);\n\n    executeCommandsInViewport(false, scene, passState);\n  } else {\n    viewport.x = windowCoordinates.x;\n    viewport.width = viewportX + viewportWidth - windowCoordinates.x;\n\n    const left = camera.frustum.left;\n    camera.frustum.left = -maxCoord.x - x;\n\n    frameState.cullingVolume = camera.frustum.computeCullingVolume(\n      camera.positionWC,\n      camera.directionWC,\n      camera.upWC,\n    );\n    uniformState.update(frameState);\n\n    executeCommandsInViewport(true, scene, passState);\n\n    viewport.x = viewportX;\n    viewport.width = windowCoordinates.x - viewportX;\n\n    camera.position.x = -camera.position.x;\n\n    camera.frustum.right = -camera.frustum.left;\n    camera.frustum.left = left - camera.frustum.left * 2.0;\n\n    frameState.cullingVolume = camera.frustum.computeCullingVolume(\n      camera.positionWC,\n      camera.directionWC,\n      camera.upWC,\n    );\n    uniformState.update(frameState);\n\n    executeCommandsInViewport(false, scene, passState);\n  }\n\n  camera._setTransform(transform);\n  Cartesian3.clone(position, camera.position);\n  camera.frustum = frustum.clone();\n  passState.viewport = originalViewport;\n}\n\n/**\n * Execute the draw commands to render the scene into the viewport.\n * If this is the first viewport rendered, the framebuffers will be cleared to the background color.\n *\n * @param {boolean} firstViewport <code>true</code> if this is the first viewport rendered.\n * @param {Scene} scene\n * @param {PassState} passState\n *\n * @private\n */\nfunction executeCommandsInViewport(firstViewport, scene, passState) {\n  const view = scene._view;\n  const { renderTranslucentDepthForPick } = scene._environmentState;\n\n  if (!firstViewport) {\n    scene.frameState.commandList.length = 0;\n  }\n\n  updateAndRenderPrimitives(scene);\n\n  view.createPotentiallyVisibleSet(scene);\n\n  if (firstViewport) {\n    executeComputeCommands(scene);\n    if (!renderTranslucentDepthForPick) {\n      executeShadowMapCastCommands(scene);\n    }\n  }\n\n  executeCommands(scene, passState);\n}\n\nconst scratchCullingVolume = new CullingVolume();\n\n/**\n * @private\n */\nScene.prototype.updateEnvironment = function () {\n  const frameState = this._frameState;\n  const view = this._view;\n\n  // Update celestial and terrestrial environment effects.\n  const environmentState = this._environmentState;\n  const renderPass = frameState.passes.render;\n  const offscreenPass = frameState.passes.offscreen;\n  const atmosphere = this.atmosphere;\n  const skyAtmosphere = this.skyAtmosphere;\n  const globe = this.globe;\n  const globeTranslucencyState = this._globeTranslucencyState;\n\n  if (\n    !renderPass ||\n    (this._mode !== SceneMode.SCENE2D &&\n      view.camera.frustum instanceof OrthographicFrustum) ||\n    !globeTranslucencyState.environmentVisible\n  ) {\n    environmentState.skyAtmosphereCommand = undefined;\n    environmentState.skyBoxCommand = undefined;\n    environmentState.sunDrawCommand = undefined;\n    environmentState.sunComputeCommand = undefined;\n    environmentState.moonCommand = undefined;\n  } else {\n    if (defined(skyAtmosphere)) {\n      if (defined(globe)) {\n        skyAtmosphere.setDynamicLighting(\n          DynamicAtmosphereLightingType.fromGlobeFlags(globe),\n        );\n        environmentState.isReadyForAtmosphere =\n          environmentState.isReadyForAtmosphere ||\n          !globe.show ||\n          globe._surface._tilesToRender.length > 0;\n      } else {\n        const dynamicLighting = atmosphere.dynamicLighting;\n        skyAtmosphere.setDynamicLighting(dynamicLighting);\n        environmentState.isReadyForAtmosphere = true;\n      }\n\n      environmentState.skyAtmosphereCommand = skyAtmosphere.update(\n        frameState,\n        globe,\n      );\n      if (defined(environmentState.skyAtmosphereCommand)) {\n        this.updateDerivedCommands(environmentState.skyAtmosphereCommand);\n      }\n    } else {\n      environmentState.skyAtmosphereCommand = undefined;\n    }\n\n    environmentState.skyBoxCommand = defined(this.skyBox)\n      ? this.skyBox.update(frameState, this._hdr)\n      : undefined;\n    const sunCommands = defined(this.sun)\n      ? this.sun.update(frameState, view.passState, this._hdr)\n      : undefined;\n    environmentState.sunDrawCommand = defined(sunCommands)\n      ? sunCommands.drawCommand\n      : undefined;\n    environmentState.sunComputeCommand = defined(sunCommands)\n      ? sunCommands.computeCommand\n      : undefined;\n    environmentState.moonCommand = defined(this.moon)\n      ? this.moon.update(frameState)\n      : undefined;\n  }\n\n  const clearGlobeDepth = (environmentState.clearGlobeDepth =\n    defined(globe) &&\n    globe.show &&\n    (!globe.depthTestAgainstTerrain || this.mode === SceneMode.SCENE2D));\n  const useDepthPlane = (environmentState.useDepthPlane =\n    clearGlobeDepth &&\n    this.mode === SceneMode.SCENE3D &&\n    globeTranslucencyState.useDepthPlane);\n  if (useDepthPlane) {\n    // Update the depth plane that is rendered in 3D when the primitives are\n    // not depth tested against terrain so primitives on the backface\n    // of the globe are not picked.\n    this._depthPlane.update(frameState);\n  }\n\n  environmentState.renderTranslucentDepthForPick = false;\n  environmentState.useWebVR =\n    this._useWebVR && this.mode !== SceneMode.SCENE2D && !offscreenPass;\n\n  const occluder =\n    frameState.mode === SceneMode.SCENE3D &&\n    !globeTranslucencyState.sunVisibleThroughGlobe\n      ? frameState.occluder\n      : undefined;\n  let cullingVolume = frameState.cullingVolume;\n\n  // get user culling volume minus the far plane.\n  const planes = scratchCullingVolume.planes;\n  for (let k = 0; k < 5; ++k) {\n    planes[k] = cullingVolume.planes[k];\n  }\n  cullingVolume = scratchCullingVolume;\n\n  // Determine visibility of celestial and terrestrial environment effects.\n  environmentState.isSkyAtmosphereVisible =\n    defined(environmentState.skyAtmosphereCommand) &&\n    environmentState.isReadyForAtmosphere;\n  environmentState.isSunVisible = this.isVisible(\n    cullingVolume,\n    environmentState.sunDrawCommand,\n    occluder,\n  );\n  environmentState.isMoonVisible = this.isVisible(\n    cullingVolume,\n    environmentState.moonCommand,\n    occluder,\n  );\n\n  const envMaps = this.specularEnvironmentMaps;\n  let specularEnvironmentCubeMap = this._specularEnvironmentCubeMap;\n  if (defined(envMaps) && specularEnvironmentCubeMap?.url !== envMaps) {\n    specularEnvironmentCubeMap =\n      specularEnvironmentCubeMap && specularEnvironmentCubeMap.destroy();\n    this._specularEnvironmentCubeMap = new SpecularEnvironmentCubeMap(envMaps);\n  } else if (!defined(envMaps) && defined(specularEnvironmentCubeMap)) {\n    specularEnvironmentCubeMap.destroy();\n    this._specularEnvironmentCubeMap = undefined;\n  }\n\n  if (defined(this._specularEnvironmentCubeMap)) {\n    this._specularEnvironmentCubeMap.update(frameState);\n  }\n};\n\nfunction updateDebugFrustumPlanes(scene) {\n  const frameState = scene._frameState;\n  if (scene.debugShowFrustumPlanes !== scene._debugShowFrustumPlanes) {\n    if (scene.debugShowFrustumPlanes) {\n      scene._debugFrustumPlanes = new DebugCameraPrimitive({\n        camera: scene.camera,\n        updateOnChange: false,\n        frustumSplits: frameState.frustumSplits,\n      });\n    } else {\n      scene._debugFrustumPlanes =\n        scene._debugFrustumPlanes && scene._debugFrustumPlanes.destroy();\n    }\n    scene._debugShowFrustumPlanes = scene.debugShowFrustumPlanes;\n  }\n\n  if (defined(scene._debugFrustumPlanes)) {\n    scene._debugFrustumPlanes.update(frameState);\n  }\n}\n\nfunction updateShadowMaps(scene) {\n  const frameState = scene._frameState;\n  const { passes, shadowState, shadowMaps } = frameState;\n  const length = shadowMaps.length;\n\n  const shadowsEnabled =\n    length > 0 &&\n    !passes.pick &&\n    !passes.pickVoxel &&\n    scene.mode === SceneMode.SCENE3D;\n  if (shadowsEnabled !== shadowState.shadowsEnabled) {\n    // Update derived commands when shadowsEnabled changes\n    ++shadowState.lastDirtyTime;\n    shadowState.shadowsEnabled = shadowsEnabled;\n  }\n\n  shadowState.lightShadowsEnabled = false;\n\n  if (!shadowsEnabled) {\n    return;\n  }\n\n  // Check if the shadow maps are different than the shadow maps last frame.\n  // If so, the derived commands need to be updated.\n  for (let j = 0; j < length; ++j) {\n    if (shadowMaps[j] !== shadowState.shadowMaps[j]) {\n      ++shadowState.lastDirtyTime;\n      break;\n    }\n  }\n\n  shadowState.shadowMaps.length = 0;\n  shadowState.lightShadowMaps.length = 0;\n\n  for (let i = 0; i < length; ++i) {\n    const shadowMap = shadowMaps[i];\n    shadowMap.update(frameState);\n\n    shadowState.shadowMaps.push(shadowMap);\n\n    if (shadowMap.fromLightSource) {\n      shadowState.lightShadowMaps.push(shadowMap);\n      shadowState.lightShadowsEnabled = true;\n    }\n\n    if (shadowMap.dirty) {\n      ++shadowState.lastDirtyTime;\n      shadowMap.dirty = false;\n    }\n  }\n}\n\nfunction updateAndRenderPrimitives(scene) {\n  const frameState = scene._frameState;\n\n  // Reset per-frame edge visibility request flag before primitives update\n  frameState.edgeVisibilityRequested = false;\n\n  scene._groundPrimitives.update(frameState);\n  scene._primitives.update(frameState);\n\n  // If any primitive requested edge visibility this frame, flip the scene flag lazily.\n  if (\n    frameState.edgeVisibilityRequested &&\n    scene._enableEdgeVisibility === false\n  ) {\n    scene._enableEdgeVisibility = true;\n  }\n\n  updateDebugFrustumPlanes(scene);\n  updateShadowMaps(scene);\n\n  if (scene._globe) {\n    scene._globe.render(frameState);\n  }\n}\n\nfunction updateAndClearFramebuffers(scene, passState, clearColor) {\n  const context = scene._context;\n  const frameState = scene._frameState;\n  const environmentState = scene._environmentState;\n  const view = scene._view;\n\n  const passes = frameState.passes;\n  const picking = passes.pick || passes.pickVoxel;\n  if (defined(view.globeDepth)) {\n    view.globeDepth.picking = picking;\n  }\n  const useWebVR = environmentState.useWebVR;\n\n  // Preserve the reference to the original framebuffer.\n  environmentState.originalFramebuffer = passState.framebuffer;\n\n  // Manage sun bloom post-processing effect.\n  if (defined(scene.sun) && scene.sunBloom !== scene._sunBloom) {\n    if (scene.sunBloom && !useWebVR) {\n      scene._sunPostProcess = new SunPostProcess();\n    } else if (defined(scene._sunPostProcess)) {\n      scene._sunPostProcess = scene._sunPostProcess.destroy();\n    }\n\n    scene._sunBloom = scene.sunBloom;\n  } else if (!defined(scene.sun) && defined(scene._sunPostProcess)) {\n    scene._sunPostProcess = scene._sunPostProcess.destroy();\n    scene._sunBloom = false;\n  }\n\n  // Clear the pass state framebuffer.\n  const clear = scene._clearColorCommand;\n  Color.clone(clearColor, clear.color);\n  clear.execute(context, passState);\n\n  // Update globe depth rendering based on the current context and clear the globe depth framebuffer.\n  // Globe depth is copied for the pick pass to support picking batched geometries in GroundPrimitives.\n  const useGlobeDepthFramebuffer = (environmentState.useGlobeDepthFramebuffer =\n    defined(view.globeDepth));\n  if (useGlobeDepthFramebuffer) {\n    view.globeDepth.update(\n      context,\n      passState,\n      view.viewport,\n      scene.msaaSamples,\n      scene._hdr,\n      environmentState.clearGlobeDepth,\n    );\n    view.globeDepth.clear(context, passState, clearColor);\n  }\n\n  // If supported, configure OIT to use the globe depth framebuffer and clear the OIT framebuffer.\n  const oit = view.oit;\n  const useOIT = (environmentState.useOIT =\n    !picking && defined(oit) && oit.isSupported());\n  if (useOIT) {\n    oit.update(\n      context,\n      passState,\n      view.globeDepth.colorFramebufferManager,\n      scene._hdr,\n      scene.msaaSamples,\n    );\n    oit.clear(context, passState, clearColor);\n    environmentState.useOIT = oit.isSupported();\n  }\n\n  const postProcess = scene.postProcessStages;\n  let usePostProcess = (environmentState.usePostProcess =\n    !picking &&\n    (scene._hdr ||\n      postProcess.length > 0 ||\n      postProcess.ambientOcclusion.enabled ||\n      postProcess.fxaa.enabled ||\n      postProcess.bloom.enabled));\n  environmentState.usePostProcessSelected = false;\n  if (usePostProcess) {\n    view.sceneFramebuffer.update(\n      context,\n      view.viewport,\n      scene._hdr,\n      scene.msaaSamples,\n    );\n    view.sceneFramebuffer.clear(context, passState, clearColor);\n\n    postProcess.update(context, frameState.useLogDepth, scene._hdr);\n    postProcess.clear(context);\n\n    usePostProcess = environmentState.usePostProcess = postProcess.ready;\n    environmentState.usePostProcessSelected =\n      usePostProcess && postProcess.hasSelected;\n  }\n\n  if (environmentState.isSunVisible && scene.sunBloom && !useWebVR) {\n    passState.framebuffer = scene._sunPostProcess.update(passState);\n    scene._sunPostProcess.clear(context, passState, clearColor);\n  } else if (useGlobeDepthFramebuffer) {\n    passState.framebuffer = view.globeDepth.framebuffer;\n  } else if (usePostProcess) {\n    passState.framebuffer = view.sceneFramebuffer.framebuffer;\n  }\n\n  if (defined(passState.framebuffer)) {\n    clear.execute(context, passState);\n  }\n\n  const useInvertClassification = (environmentState.useInvertClassification =\n    !picking && defined(passState.framebuffer) && scene.invertClassification);\n\n  // Update edge framebuffer for 3D tile edge rendering\n  const useEdgeFramebuffer = !picking && scene._enableEdgeVisibility;\n  if (useEdgeFramebuffer) {\n    view.edgeFramebuffer.update(context, view.viewport, scene._hdr);\n  }\n\n  if (useInvertClassification) {\n    let depthFramebuffer;\n    if (frameState.invertClassificationColor.alpha === 1.0) {\n      if (useGlobeDepthFramebuffer) {\n        depthFramebuffer = view.globeDepth.framebuffer;\n      }\n    }\n\n    if (defined(depthFramebuffer) || context.depthTexture) {\n      scene._invertClassification.previousFramebuffer = depthFramebuffer;\n      scene._invertClassification.update(\n        context,\n        scene.msaaSamples,\n        view.globeDepth.colorFramebufferManager,\n      );\n      scene._invertClassification.clear(context, passState);\n\n      if (frameState.invertClassificationColor.alpha < 1.0 && useOIT) {\n        const command = scene._invertClassification.unclassifiedCommand;\n        const derivedCommands = command.derivedCommands;\n        derivedCommands.oit = oit.createDerivedCommands(\n          command,\n          context,\n          derivedCommands.oit,\n        );\n      }\n    } else {\n      environmentState.useInvertClassification = false;\n    }\n  }\n\n  if (scene._globeTranslucencyState.translucent) {\n    view.globeTranslucencyFramebuffer.updateAndClear(\n      scene._hdr,\n      view.viewport,\n      context,\n      passState,\n    );\n  }\n}\n\n/**\n * @private\n */\nScene.prototype.resolveFramebuffers = function (passState) {\n  const context = this._context;\n  const environmentState = this._environmentState;\n  const view = this._view;\n  const { globeDepth, translucentTileClassification } = view;\n  if (defined(globeDepth)) {\n    globeDepth.prepareColorTextures(context);\n  }\n\n  const {\n    useOIT,\n    useGlobeDepthFramebuffer,\n    usePostProcess,\n    originalFramebuffer,\n  } = environmentState;\n\n  const globeFramebuffer = useGlobeDepthFramebuffer\n    ? globeDepth.colorFramebufferManager\n    : undefined;\n  const sceneFramebuffer = view.sceneFramebuffer._colorFramebuffer;\n  const idFramebuffer = view.sceneFramebuffer.idFramebuffer;\n\n  if (useOIT) {\n    passState.framebuffer = usePostProcess\n      ? sceneFramebuffer.framebuffer\n      : originalFramebuffer;\n    view.oit.execute(context, passState);\n  }\n\n  if (\n    translucentTileClassification.hasTranslucentDepth &&\n    translucentTileClassification.isSupported()\n  ) {\n    translucentTileClassification.execute(this, passState);\n  }\n\n  if (usePostProcess) {\n    view.sceneFramebuffer.prepareColorTextures(context);\n    let inputFramebuffer = sceneFramebuffer;\n    if (useGlobeDepthFramebuffer && !useOIT) {\n      inputFramebuffer = globeFramebuffer;\n    }\n\n    const postProcess = this.postProcessStages;\n    const colorTexture = inputFramebuffer.getColorTexture(0);\n    const idTexture = idFramebuffer.getColorTexture(0);\n    const depthTexture = (\n      globeFramebuffer ?? sceneFramebuffer\n    ).getDepthStencilTexture();\n    postProcess.execute(context, colorTexture, depthTexture, idTexture);\n    postProcess.copy(context, originalFramebuffer);\n  }\n\n  if (!useOIT && !usePostProcess && useGlobeDepthFramebuffer) {\n    passState.framebuffer = originalFramebuffer;\n    globeDepth.executeCopyColor(context, passState);\n  }\n};\n\nfunction callAfterRenderFunctions(scene) {\n  // Functions are queued up during primitive update and executed here in case\n  // the function modifies scene state that should remain constant over the frame.\n  const functions = scene._frameState.afterRender;\n  const functionsCpy = functions.slice(); // Snapshot before iterate allows callbacks to add functions for next frame\n  functions.length = 0;\n\n  for (let i = 0; i < functionsCpy.length; ++i) {\n    const shouldRequestRender = functionsCpy[i]();\n    if (shouldRequestRender) {\n      scene.requestRender();\n    }\n  }\n}\n\nfunction getGlobeHeight(scene) {\n  if (scene.mode === SceneMode.MORPHING) {\n    return;\n  }\n  const cartographic = scene.camera.positionCartographic;\n  return scene.getHeight(cartographic);\n}\n\nfunction getMaxPrimitiveHeight(primitive, cartographic, scene) {\n  let maxHeight = Number.NEGATIVE_INFINITY;\n\n  if (primitive instanceof PrimitiveCollection) {\n    // If it's a PrimitiveCollection, iterate through its children\n    const length = primitive.length;\n    for (let i = 0; i < length; ++i) {\n      const subPrimitive = primitive.get(i);\n      const subHeight = getMaxPrimitiveHeight(\n        subPrimitive,\n        cartographic,\n        scene,\n      );\n      if (defined(subHeight) && subHeight > maxHeight) {\n        maxHeight = subHeight;\n      }\n    }\n  } else if (\n    primitive.isCesium3DTileset &&\n    primitive.show &&\n    primitive.enableCollision\n  ) {\n    // If it's an individual primitive, check its height\n    const result = primitive.getHeight(cartographic, scene);\n    if (defined(result) && result > maxHeight) {\n      return result;\n    }\n  }\n\n  return maxHeight;\n}\n\n/**\n * Gets the height of the loaded surface at the cartographic position.\n * @param {Cartographic} cartographic The cartographic position.\n * @param {HeightReference} [heightReference=CLAMP_TO_GROUND] Based on the height reference value, determines whether to ignore heights from 3D Tiles or terrain.\n * @private\n */\nScene.prototype.getHeight = function (cartographic, heightReference) {\n  if (!defined(cartographic)) {\n    return undefined;\n  }\n\n  const ignore3dTiles =\n    heightReference === HeightReference.CLAMP_TO_TERRAIN ||\n    heightReference === HeightReference.RELATIVE_TO_TERRAIN;\n\n  const ignoreTerrain =\n    heightReference === HeightReference.CLAMP_TO_3D_TILE ||\n    heightReference === HeightReference.RELATIVE_TO_3D_TILE;\n\n  if (!defined(cartographic)) {\n    return;\n  }\n\n  let maxHeight = Number.NEGATIVE_INFINITY;\n\n  if (!ignore3dTiles) {\n    const maxPrimitiveHeight = getMaxPrimitiveHeight(\n      this.primitives,\n      cartographic,\n      this,\n    );\n    if (defined(maxPrimitiveHeight) && maxPrimitiveHeight > maxHeight) {\n      maxHeight = maxPrimitiveHeight;\n    }\n  }\n\n  const globe = this._globe;\n  if (!ignoreTerrain && defined(globe) && globe.show) {\n    const result = globe.getHeight(cartographic);\n    if (result > maxHeight) {\n      maxHeight = result;\n    }\n  }\n\n  if (maxHeight > Number.NEGATIVE_INFINITY) {\n    return maxHeight;\n  }\n\n  return undefined;\n};\n\nconst updateHeightScratchCartographic = new Cartographic();\n/**\n * Calls the callback when a new tile is rendered that contains the given cartographic. The only parameter\n * is the cartesian position on the tile.\n *\n * @private\n *\n * @param {Cartographic} cartographic The cartographic position.\n * @param {Function} callback The function to be called when a new tile is loaded containing the updated cartographic.\n * @param {HeightReference} [heightReference=CLAMP_TO_GROUND] Based on the height reference value, determines whether to ignore heights from 3D Tiles or terrain.\n * @returns {Function} The function to remove this callback from the quadtree.\n */\nScene.prototype.updateHeight = function (\n  cartographic,\n  callback,\n  heightReference,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.func(\"callback\", callback);\n  //>>includeEnd('debug');\n\n  const ellipsoid = this._ellipsoid;\n  const callbackWrapper = (clampedCartographic) => {\n    Cartographic.clone(cartographic, updateHeightScratchCartographic);\n\n    let height;\n    if (defined(clampedCartographic)) {\n      height = clampedCartographic.height;\n    }\n    if (!defined(height)) {\n      height = this.getHeight(cartographic, heightReference);\n    }\n    if (defined(height)) {\n      updateHeightScratchCartographic.height = height;\n      callback(updateHeightScratchCartographic);\n    }\n  };\n\n  const ignore3dTiles =\n    heightReference === HeightReference.CLAMP_TO_TERRAIN ||\n    heightReference === HeightReference.RELATIVE_TO_TERRAIN;\n\n  const ignoreTerrain =\n    heightReference === HeightReference.CLAMP_TO_3D_TILE ||\n    heightReference === HeightReference.RELATIVE_TO_3D_TILE;\n\n  let terrainRemoveCallback;\n  if (!ignoreTerrain && defined(this.globe)) {\n    terrainRemoveCallback = this.globe._surface.updateHeight(\n      cartographic,\n      callbackWrapper,\n    );\n  }\n\n  let tilesetRemoveCallbacks = {};\n  const createPrimitiveEventListener = (primitive) => {\n    if (\n      ignore3dTiles ||\n      primitive.isDestroyed() ||\n      !primitive.isCesium3DTileset\n    ) {\n      return;\n    }\n\n    const tilesetRemoveCallback = primitive.updateHeight(\n      cartographic,\n      callbackWrapper,\n      ellipsoid,\n    );\n    tilesetRemoveCallbacks[primitive.id] = tilesetRemoveCallback;\n  };\n\n  if (!ignore3dTiles) {\n    const length = this.primitives.length;\n    for (let i = 0; i < length; ++i) {\n      const primitive = this.primitives.get(i);\n      createPrimitiveEventListener(primitive);\n    }\n  }\n\n  const removeAddedListener = this.primitives.primitiveAdded.addEventListener(\n    createPrimitiveEventListener,\n  );\n  const removeRemovedListener =\n    this.primitives.primitiveRemoved.addEventListener((primitive) => {\n      if (primitive.isDestroyed() || !primitive.isCesium3DTileset) {\n        return;\n      }\n      if (defined(tilesetRemoveCallbacks[primitive.id])) {\n        tilesetRemoveCallbacks[primitive.id]();\n      }\n      delete tilesetRemoveCallbacks[primitive.id];\n    });\n\n  const removeCallback = () => {\n    terrainRemoveCallback = terrainRemoveCallback && terrainRemoveCallback();\n    Object.values(tilesetRemoveCallbacks).forEach((tilesetRemoveCallback) =>\n      tilesetRemoveCallback(),\n    );\n    tilesetRemoveCallbacks = {};\n    removeAddedListener();\n    removeRemovedListener();\n  };\n\n  return removeCallback;\n};\n\nfunction isCameraUnderground(scene) {\n  const camera = scene.camera;\n  const mode = scene._mode;\n  const cameraController = scene._screenSpaceCameraController;\n  const cartographic = camera.positionCartographic;\n\n  if (!defined(cartographic)) {\n    return false;\n  }\n\n  if (!cameraController.onMap() && cartographic.height < 0.0) {\n    // The camera can go off the map while in Columbus View.\n    // Make a best guess as to whether it's underground by checking if its height is less than zero.\n    return true;\n  }\n\n  if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n    return false;\n  }\n\n  const globeHeight = scene._globeHeight;\n  return defined(globeHeight) && cartographic.height < globeHeight;\n}\n\n/**\n * @private\n */\nScene.prototype.initializeFrame = function () {\n  // Destroy released shaders and textures once every 120 frames to avoid thrashing the cache\n  if (this._shaderFrameCount++ === 120) {\n    this._shaderFrameCount = 0;\n    this._context.shaderCache.destroyReleasedShaderPrograms();\n    this._context.textureCache.destroyReleasedTextures();\n  }\n\n  this._tweens.update();\n\n  if (this._globeHeightDirty) {\n    if (defined(this._removeUpdateHeightCallback)) {\n      this._removeUpdateHeightCallback();\n      this._removeUpdateHeightCallback = undefined;\n    }\n\n    this._globeHeight = getGlobeHeight(this);\n    this._globeHeightDirty = false;\n\n    const cartographic = this.camera.positionCartographic;\n    this._removeUpdateHeightCallback = this.updateHeight(\n      cartographic,\n      (updatedCartographic) => {\n        if (this.isDestroyed()) {\n          return;\n        }\n\n        this._globeHeight = updatedCartographic.height;\n      },\n    );\n  }\n  this._cameraUnderground = isCameraUnderground(this);\n  this._globeTranslucencyState.update(this);\n\n  this._screenSpaceCameraController.update();\n  if (defined(this._deviceOrientationCameraController)) {\n    this._deviceOrientationCameraController.update();\n  }\n\n  this.camera.update(this._mode);\n  this.camera._updateCameraChanged();\n};\n\nfunction updateDebugShowFramesPerSecond(scene, renderedThisFrame) {\n  if (scene.debugShowFramesPerSecond) {\n    if (!defined(scene._performanceDisplay)) {\n      const performanceContainer = document.createElement(\"div\");\n      performanceContainer.className =\n        \"cesium-performanceDisplay-defaultContainer\";\n      const container = scene._canvas.parentNode;\n      container.appendChild(performanceContainer);\n      const performanceDisplay = new PerformanceDisplay({\n        container: performanceContainer,\n      });\n      scene._performanceDisplay = performanceDisplay;\n      scene._performanceContainer = performanceContainer;\n    }\n\n    scene._performanceDisplay.throttled = scene.requestRenderMode;\n    scene._performanceDisplay.update(renderedThisFrame);\n  } else if (defined(scene._performanceDisplay)) {\n    scene._performanceDisplay =\n      scene._performanceDisplay && scene._performanceDisplay.destroy();\n    scene._performanceContainer.parentNode.removeChild(\n      scene._performanceContainer,\n    );\n  }\n}\n\nfunction prePassesUpdate(scene) {\n  scene._jobScheduler.resetBudgets();\n\n  const frameState = scene._frameState;\n  scene.primitives.prePassesUpdate(frameState);\n\n  if (defined(scene.globe)) {\n    scene.globe.update(frameState);\n  }\n\n  scene._picking.update();\n  frameState.creditDisplay.update();\n}\n\nfunction postPassesUpdate(scene) {\n  scene.primitives.postPassesUpdate(scene._frameState);\n  RequestScheduler.update();\n}\n\nconst scratchBackgroundColor = new Color();\n\n/**\n * Render the scene\n *\n * @param {Scene} scene\n * @private\n */\nfunction render(scene) {\n  const frameState = scene._frameState;\n\n  const context = scene.context;\n  const { uniformState } = context;\n\n  const view = scene._defaultView;\n  scene._view = view;\n\n  scene.updateFrameState();\n  frameState.passes.render = true;\n  frameState.passes.postProcess = scene.postProcessStages.hasSelected;\n  frameState.tilesetPassState = renderTilesetPassState;\n\n  let backgroundColor = scene.backgroundColor ?? Color.BLACK;\n  if (scene._hdr) {\n    backgroundColor = Color.clone(backgroundColor, scratchBackgroundColor);\n    backgroundColor.red = Math.pow(backgroundColor.red, scene.gamma);\n    backgroundColor.green = Math.pow(backgroundColor.green, scene.gamma);\n    backgroundColor.blue = Math.pow(backgroundColor.blue, scene.gamma);\n  }\n  frameState.backgroundColor = backgroundColor;\n\n  frameState.atmosphere = scene.atmosphere;\n  scene.fog.update(frameState);\n\n  uniformState.update(frameState);\n\n  const shadowMap = scene.shadowMap;\n  if (defined(shadowMap) && shadowMap.enabled) {\n    if (!defined(scene.light) || scene.light instanceof SunLight) {\n      // Negate the sun direction so that it is from the Sun, not to the Sun\n      Cartesian3.negate(\n        uniformState.sunDirectionWC,\n        scene._shadowMapCamera.direction,\n      );\n    } else {\n      Cartesian3.clone(scene.light.direction, scene._shadowMapCamera.direction);\n    }\n    frameState.shadowMaps.push(shadowMap);\n  }\n\n  scene._computeCommandList.length = 0;\n  scene._overlayCommandList.length = 0;\n\n  const viewport = view.viewport;\n  viewport.x = 0;\n  viewport.y = 0;\n  viewport.width = context.drawingBufferWidth;\n  viewport.height = context.drawingBufferHeight;\n\n  const passState = view.passState;\n  passState.framebuffer = undefined;\n  passState.blendingEnabled = undefined;\n  passState.scissorTest = undefined;\n  passState.viewport = BoundingRectangle.clone(viewport, passState.viewport);\n\n  context.beginFrame();\n\n  if (defined(scene.globe)) {\n    scene.globe.beginFrame(frameState);\n  }\n\n  scene.updateEnvironment();\n  scene.updateAndExecuteCommands(passState, backgroundColor);\n  scene.resolveFramebuffers(passState);\n\n  passState.framebuffer = undefined;\n  executeOverlayCommands(scene, passState);\n\n  if (defined(scene.globe)) {\n    scene.globe.endFrame(frameState);\n\n    if (!scene.globe.tilesLoaded) {\n      scene._renderRequested = true;\n    }\n  }\n\n  context.endFrame();\n}\n\nfunction tryAndCatchError(scene, functionToExecute) {\n  try {\n    functionToExecute(scene);\n  } catch (error) {\n    scene._renderError.raiseEvent(scene, error);\n\n    if (scene.rethrowRenderErrors) {\n      throw error;\n    }\n  }\n}\n\nfunction updateMostDetailedRayPicks(scene) {\n  return scene._picking.updateMostDetailedRayPicks(scene);\n}\n\n/**\n * Update and render the scene. It is usually not necessary to call this function\n * directly because {@link CesiumWidget} will do it automatically.\n * @param {JulianDate} [time] The simulation time at which to render.\n */\nScene.prototype.render = function (time) {\n  /**\n   *\n   * Pre passes update. Execute any pass invariant code that should run before the passes here.\n   *\n   */\n  this._preUpdate.raiseEvent(this, time);\n\n  const frameState = this._frameState;\n  frameState.newFrame = false;\n\n  if (!defined(time)) {\n    time = JulianDate.now();\n  }\n\n  const cameraChanged = this._view.checkForCameraUpdates(this);\n  if (cameraChanged) {\n    this._globeHeightDirty = true;\n  }\n\n  // Determine if should render a new frame in request render mode\n  let shouldRender =\n    !this.requestRenderMode ||\n    this._renderRequested ||\n    cameraChanged ||\n    this._logDepthBufferDirty ||\n    this._hdrDirty ||\n    this.mode === SceneMode.MORPHING;\n  if (\n    !shouldRender &&\n    defined(this.maximumRenderTimeChange) &&\n    defined(this._lastRenderTime)\n  ) {\n    const difference = Math.abs(\n      JulianDate.secondsDifference(this._lastRenderTime, time),\n    );\n    shouldRender = shouldRender || difference > this.maximumRenderTimeChange;\n  }\n\n  if (shouldRender) {\n    this._lastRenderTime = JulianDate.clone(time, this._lastRenderTime);\n    this._renderRequested = false;\n    this._logDepthBufferDirty = false;\n    this._hdrDirty = false;\n\n    const frameNumber = CesiumMath.incrementWrap(\n      frameState.frameNumber,\n      15000000.0,\n      1.0,\n    );\n    updateFrameNumber(this, frameNumber, time);\n    frameState.newFrame = true;\n  }\n\n  tryAndCatchError(this, prePassesUpdate);\n\n  /**\n   * Passes update. Add any passes here\n   */\n  if (this.primitives.show) {\n    tryAndCatchError(this, updateMostDetailedRayPicks);\n    tryAndCatchError(this, updatePreloadPass);\n    tryAndCatchError(this, updatePreloadFlightPass);\n    if (!shouldRender) {\n      tryAndCatchError(this, updateRequestRenderModeDeferCheckPass);\n    }\n  }\n\n  this._postUpdate.raiseEvent(this, time);\n\n  if (shouldRender) {\n    this._preRender.raiseEvent(this, time);\n    frameState.creditDisplay.beginFrame();\n    tryAndCatchError(this, render);\n  }\n\n  /**\n   * Post passes update. Execute any pass invariant code that should run after the passes here.\n   */\n  updateDebugShowFramesPerSecond(this, shouldRender);\n  tryAndCatchError(this, postPassesUpdate);\n\n  // Often used to trigger events (so don't want in trycatch) that the user\n  // might be subscribed to. Things like the tile load events, promises, etc.\n  // We don't want those events to resolve during the render loop because the events might add new primitives\n  callAfterRenderFunctions(this);\n\n  if (shouldRender) {\n    this._postRender.raiseEvent(this, time);\n    frameState.creditDisplay.endFrame();\n  }\n};\n\n/**\n * Update and render the scene. Always forces a new render frame regardless of whether a render was\n * previously requested.\n * @param {JulianDate} [time] The simulation time at which to render.\n *\n * @private\n */\nScene.prototype.forceRender = function (time) {\n  this._renderRequested = true;\n  this.render(time);\n};\n\n/**\n * Requests a new rendered frame when {@link Scene#requestRenderMode} is set to <code>true</code>.\n * The render rate will not exceed the {@link CesiumWidget#targetFrameRate}.\n *\n * @see Scene#requestRenderMode\n */\nScene.prototype.requestRender = function () {\n  this._renderRequested = true;\n};\n\n/**\n * @private\n */\nScene.prototype.clampLineWidth = function (width) {\n  return Math.max(\n    ContextLimits.minimumAliasedLineWidth,\n    Math.min(width, ContextLimits.maximumAliasedLineWidth),\n  );\n};\n\n/**\n * Returns an object with a <code>primitive</code> property that contains the first (top) primitive in the scene\n * at a particular window coordinate or <code>undefined</code> if nothing is at the location. Other properties may\n * potentially be set depending on the type of primitive and may be used to further identify the picked object.\n * <p>\n * When a feature of a 3D Tiles tileset is picked, <code>pick</code> returns a {@link Cesium3DTileFeature} object.\n * </p>\n *\n * @example\n * // On mouse over, color the feature yellow.\n * handler.setInputAction(function(movement) {\n *     const feature = scene.pick(movement.endPosition);\n *     if (feature instanceof Cesium.Cesium3DTileFeature) {\n *         feature.color = Cesium.Color.YELLOW;\n *     }\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n * @returns {object | undefined} Object containing the picked primitive or <code>undefined</code> if nothing is at the location.\n */\nScene.prototype.pick = function (windowPosition, width, height) {\n  // Picking one object, result is either [object] or []\n  return this._picking.pick(this, windowPosition, width, height, 1)[0];\n};\n\n/**\n * Performs the same operation as Scene.pick but asynchonosly without blocking the main render thread.\n * Requires WebGL2 else using fallback.\n *\n * @example\n * // On mouse over, color the feature yellow.\n * handler.setInputAction(function(movement) {\n *     const feature = scene.pickAsync(movement.endPosition).then(function(feature) {\n *        if (feature instanceof Cesium.Cesium3DTileFeature) {\n *            feature.color = Cesium.Color.YELLOW;\n *        }\n *     });\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n * @returns {Promise<Object | undefined>} Object containing the picked primitive or <code>undefined</code> if nothing is at the location.\n *\n * @see Scene#pick\n */\nScene.prototype.pickAsync = async function (windowPosition, width, height) {\n  const result = await this._picking.pickAsync(\n    this,\n    windowPosition,\n    width,\n    height,\n    1,\n  );\n  return result[0];\n};\n/**\n * Returns a {@link VoxelCell} for the voxel sample rendered at a particular window coordinate,\n * or <code>undefined</code> if no voxel is rendered at that position.\n *\n * @example\n * On left click, report the value of the \"color\" property at that voxel sample.\n * handler.setInputAction(function(movement) {\n *   const voxelCell = scene.pickVoxel(movement.position);\n *   if (defined(voxelCell)) {\n *     console.log(voxelCell.getProperty(\"color\"));\n *   }\n * }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n * @returns {VoxelCell|undefined} Information about the voxel cell rendered at the picked position or <code>undefined</code> if no voxel is rendered at that position.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nScene.prototype.pickVoxel = function (windowPosition, width, height) {\n  const pickedObject = this.pick(windowPosition, width, height);\n  if (!defined(pickedObject)) {\n    return;\n  }\n  const voxelPrimitive = pickedObject.primitive;\n  if (!(voxelPrimitive instanceof VoxelPrimitive)) {\n    return;\n  }\n  const voxelCoordinate = this._picking.pickVoxelCoordinate(\n    this,\n    windowPosition,\n    width,\n    height,\n  );\n  // Look up the keyframeNode containing this picked cell\n  const tileIndex = 255 * voxelCoordinate[0] + voxelCoordinate[1];\n  const keyframeNode = voxelPrimitive._traversal.findKeyframeNode(tileIndex);\n  if (!defined(keyframeNode)) {\n    // The tile rendered at the pick position has since been discarded by\n    // a traversal update\n    return;\n  }\n  // Look up the metadata for the picked cell\n  const sampleIndex = 255 * voxelCoordinate[2] + voxelCoordinate[3];\n  return VoxelCell.fromKeyframeNode(\n    voxelPrimitive,\n    tileIndex,\n    sampleIndex,\n    keyframeNode,\n  );\n};\n\n/**\n * Pick a metadata value at the given window position.\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {string|undefined} schemaId The ID of the metadata schema to pick values\n * from. If this is <code>undefined</code>, then it will pick the values from the object\n * that match the given class- and property name, regardless of the schema ID.\n * @param {string} className The name of the metadata class to pick\n * values from\n * @param {string} propertyName The name of the metadata property to pick\n * values from\n * @returns {MetadataValue|undefined} The metadata value, or <code>undefined</code> when\n * no matching metadata was found at the given position\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nScene.prototype.pickMetadata = function (\n  windowPosition,\n  schemaId,\n  className,\n  propertyName,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"windowPosition\", windowPosition);\n  Check.typeOf.string(\"className\", className);\n  Check.typeOf.string(\"propertyName\", propertyName);\n  //>>includeEnd('debug');\n\n  const pickedObject = this.pick(windowPosition);\n  if (!defined(pickedObject)) {\n    return undefined;\n  }\n\n  // Check if the picked object is a model that has structural\n  // metadata, with a schema that contains the specified\n  // property.\n  const structuralMetadata = pickedObject.detail?.model?.structuralMetadata;\n  if (!defined(structuralMetadata)) {\n    return undefined;\n  }\n  const schema = structuralMetadata.schema;\n  const classProperty = getMetadataClassProperty(\n    schema,\n    schemaId,\n    className,\n    propertyName,\n  );\n  if (!defined(classProperty)) {\n    return undefined;\n  }\n  const metadataProperty = getMetadataProperty(\n    structuralMetadata,\n    className,\n    propertyName,\n  );\n  if (!defined(metadataProperty)) {\n    return undefined;\n  }\n\n  const pickedMetadataInfo = new PickedMetadataInfo(\n    schemaId,\n    className,\n    propertyName,\n    classProperty,\n    metadataProperty,\n  );\n\n  const pickedMetadataValues = this._picking.pickMetadata(\n    this,\n    windowPosition,\n    pickedMetadataInfo,\n  );\n\n  return pickedMetadataValues;\n};\n\n/**\n * Pick the schema of the metadata of the object at the given position\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @returns {MetadataSchema | undefined} The metadata schema, or <code>undefined</code> if there is no object with\n * associated metadata at the given position.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nScene.prototype.pickMetadataSchema = function (windowPosition) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"windowPosition\", windowPosition);\n  //>>includeEnd('debug');\n\n  const pickedObject = this.pick(windowPosition);\n  if (!defined(pickedObject)) {\n    return undefined;\n  }\n  const schema = pickedObject.detail?.model?.structuralMetadata?.schema;\n  return schema;\n};\n\n/**\n * Returns the cartesian position reconstructed from the depth buffer and window position.\n * The returned position is in world coordinates. Used internally by camera functions to\n * prevent conversion to projected 2D coordinates and then back.\n * <p>\n * Set {@link Scene#pickTranslucentDepth} to <code>true</code> to include the depth of\n * translucent primitives; otherwise, this essentially picks through translucent primitives.\n * </p>\n *\n * @private\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {Cartesian3} [result] The object on which to restore the result.\n * @returns {Cartesian3} The cartesian position in world coordinates.\n *\n * @exception {DeveloperError} Picking from the depth buffer is not supported. Check pickPositionSupported.\n */\nScene.prototype.pickPositionWorldCoordinates = function (\n  windowPosition,\n  result,\n) {\n  return this._picking.pickPositionWorldCoordinates(\n    this,\n    windowPosition,\n    result,\n  );\n};\n\n/**\n * Returns the cartesian position reconstructed from the depth buffer and window position.\n * <p>\n * The position reconstructed from the depth buffer in 2D may be slightly different from those\n * reconstructed in 3D and Columbus view. This is caused by the difference in the distribution\n * of depth values of perspective and orthographic projection.\n * </p>\n * <p>\n * Set {@link Scene#pickTranslucentDepth} to <code>true</code> to include the depth of\n * translucent primitives; otherwise, this essentially picks through translucent primitives.\n * </p>\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {Cartesian3} [result] The object on which to restore the result.\n * @returns {Cartesian3} The cartesian position.\n *\n * @exception {DeveloperError} Picking from the depth buffer is not supported. Check pickPositionSupported.\n */\nScene.prototype.pickPosition = function (windowPosition, result) {\n  return this._picking.pickPosition(this, windowPosition, result);\n};\n\n/**\n * Returns a list of objects, each containing a <code>primitive</code> property, for all primitives at\n * a particular window coordinate position. Other properties may also be set depending on the\n * type of primitive and may be used to further identify the picked object. The primitives in\n * the list are ordered by their visual order in the scene (front to back).\n *\n * @param {Cartesian2} windowPosition Window coordinates to perform picking on.\n * @param {number} [limit] If supplied, stop drilling after collecting this many picks.\n * @param {number} [width=3] Width of the pick rectangle.\n * @param {number} [height=3] Height of the pick rectangle.\n * @returns {any[]} Array of objects, each containing 1 picked primitives.\n *\n * @exception {DeveloperError} windowPosition is undefined.\n *\n * @example\n * const pickedObjects = scene.drillPick(new Cesium.Cartesian2(100.0, 200.0));\n *\n * @see Scene#pick\n */\nScene.prototype.drillPick = function (windowPosition, limit, width, height) {\n  return this._picking.drillPick(this, windowPosition, limit, width, height);\n};\n\nfunction updatePreloadPass(scene) {\n  const frameState = scene._frameState;\n  preloadTilesetPassState.camera = frameState.camera;\n  preloadTilesetPassState.cullingVolume = frameState.cullingVolume;\n\n  const primitives = scene.primitives;\n  primitives.updateForPass(frameState, preloadTilesetPassState);\n}\n\nfunction updatePreloadFlightPass(scene) {\n  const frameState = scene._frameState;\n  const camera = frameState.camera;\n  if (!camera.canPreloadFlight()) {\n    return;\n  }\n\n  preloadFlightTilesetPassState.camera = scene.preloadFlightCamera;\n  preloadFlightTilesetPassState.cullingVolume =\n    scene.preloadFlightCullingVolume;\n\n  const primitives = scene.primitives;\n  primitives.updateForPass(frameState, preloadFlightTilesetPassState);\n}\n\nfunction updateRequestRenderModeDeferCheckPass(scene) {\n  // Check if any ignored requests are ready to go (to wake rendering up again)\n  scene.primitives.updateForPass(\n    scene._frameState,\n    requestRenderModeDeferCheckPassState,\n  );\n}\n\n/**\n * Returns an object containing the first object intersected by the ray and the position of intersection,\n * or <code>undefined</code> if there were no intersections. The intersected object has a <code>primitive</code>\n * property that contains the intersected primitive. Other properties may be set depending on the type of primitive\n * and may be used to further identify the picked object. The ray must be given in world coordinates.\n * <p>\n * This function only picks globe tiles and 3D Tiles that are rendered in the current view. Picks all other\n * primitives regardless of their visibility.\n * </p>\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @returns {object | undefined} An object containing the object and position of the first intersection or <code>undefined</code> if there are no intersections.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.pickFromRay = function (ray, objectsToExclude, width) {\n  return this._picking.pickFromRay(this, ray, objectsToExclude, width);\n};\n\n/**\n * Returns a list of objects, each containing the object intersected by the ray and the position of intersection.\n * The intersected object has a <code>primitive</code> property that contains the intersected primitive. Other\n * properties may also be set depending on the type of primitive and may be used to further identify the picked object.\n * The primitives in the list are ordered by first intersection to last intersection. The ray must be given in\n * world coordinates.\n * <p>\n * This function only picks globe tiles and 3D Tiles that are rendered in the current view. Picks all other\n * primitives regardless of their visibility.\n * </p>\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {number} [limit=Number.MAX_VALUE] If supplied, stop finding intersections after this many intersections.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @returns {object[]} List of objects containing the object and position of each intersection.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.drillPickFromRay = function (\n  ray,\n  limit,\n  objectsToExclude,\n  width,\n) {\n  return this._picking.drillPickFromRay(\n    this,\n    ray,\n    limit,\n    objectsToExclude,\n    width,\n  );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#pickFromRay} request using the maximum level of detail for 3D Tilesets\n * regardless of visibility.\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise<object>} A promise that resolves to an object containing the object and position of the first intersection.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.pickFromRayMostDetailed = function (\n  ray,\n  objectsToExclude,\n  width,\n) {\n  return this._picking.pickFromRayMostDetailed(\n    this,\n    ray,\n    objectsToExclude,\n    width,\n  );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#drillPickFromRay} request using the maximum level of detail for 3D Tilesets\n * regardless of visibility.\n *\n * @private\n *\n * @param {Ray} ray The ray.\n * @param {number} [limit=Number.MAX_VALUE] If supplied, stop finding intersections after this many intersections.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to exclude from the ray intersection.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise<Object[]>} A promise that resolves to a list of objects containing the object and position of each intersection.\n *\n * @exception {DeveloperError} Ray intersections are only supported in 3D mode.\n */\nScene.prototype.drillPickFromRayMostDetailed = function (\n  ray,\n  limit,\n  objectsToExclude,\n  width,\n) {\n  return this._picking.drillPickFromRayMostDetailed(\n    this,\n    ray,\n    limit,\n    objectsToExclude,\n    width,\n  );\n};\n\n/**\n * Returns the height of scene geometry at the given cartographic position or <code>undefined</code> if there was no\n * scene geometry to sample height from. The height of the input position is ignored. May be used to clamp objects to\n * the globe, 3D Tiles, or primitives in the scene.\n * <p>\n * This function only samples height from globe tiles and 3D Tiles that are rendered in the current view. Samples height\n * from all other primitives regardless of their visibility.\n * </p>\n *\n * @param {Cartographic} position The cartographic position to sample height from.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not sample height from.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @returns {number | undefined} The height. This may be <code>undefined</code> if there was no scene geometry to sample height from.\n *\n * @example\n * const position = new Cesium.Cartographic(-1.31968, 0.698874);\n * const height = viewer.scene.sampleHeight(position);\n * console.log(height);\n *\n * @see Scene#clampToHeight\n * @see Scene#clampToHeightMostDetailed\n * @see Scene#sampleHeightMostDetailed\n *\n * @exception {DeveloperError} sampleHeight is only supported in 3D mode.\n * @exception {DeveloperError} sampleHeight requires depth texture support. Check sampleHeightSupported.\n */\nScene.prototype.sampleHeight = function (position, objectsToExclude, width) {\n  return this._picking.sampleHeight(this, position, objectsToExclude, width);\n};\n\n/**\n * Clamps the given cartesian position to the scene geometry along the geodetic surface normal. Returns the\n * clamped position or <code>undefined</code> if there was no scene geometry to clamp to. May be used to clamp\n * objects to the globe, 3D Tiles, or primitives in the scene.\n * <p>\n * This function only clamps to globe tiles and 3D Tiles that are rendered in the current view. Clamps to\n * all other primitives regardless of their visibility.\n * </p>\n *\n * @param {Cartesian3} cartesian The cartesian position.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not clamp to.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @param {Cartesian3} [result] An optional object to return the clamped position.\n * @returns {Cartesian3 | undefined} The modified result parameter or a new Cartesian3 instance if one was not provided. This may be <code>undefined</code> if there was no scene geometry to clamp to.\n *\n * @example\n * // Clamp an entity to the underlying scene geometry\n * const position = entity.position.getValue(Cesium.JulianDate.now());\n * entity.position = viewer.scene.clampToHeight(position);\n *\n * @see Scene#sampleHeight\n * @see Scene#sampleHeightMostDetailed\n * @see Scene#clampToHeightMostDetailed\n *\n * @exception {DeveloperError} clampToHeight is only supported in 3D mode.\n * @exception {DeveloperError} clampToHeight requires depth texture support. Check clampToHeightSupported.\n */\nScene.prototype.clampToHeight = function (\n  cartesian,\n  objectsToExclude,\n  width,\n  result,\n) {\n  return this._picking.clampToHeight(\n    this,\n    cartesian,\n    objectsToExclude,\n    width,\n    result,\n  );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#sampleHeight} query for an array of {@link Cartographic} positions\n * using the maximum level of detail for 3D Tilesets in the scene. The height of the input positions is ignored.\n * Returns a promise that is resolved when the query completes. Each point height is modified in place.\n * If a height cannot be determined because no geometry can be sampled at that location, or another error occurs,\n * the height is set to <code>undefined</code>.\n *\n * @param {Cartographic[]} positions The cartographic positions to update with sampled heights.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not sample height from.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise<Array<Cartographic | undefined>>} A promise that resolves to the provided list of positions when the query has completed. Positions may become <code>undefined</code> if the height cannot be determined.\n *\n * @example\n * const positions = [\n *     new Cesium.Cartographic(-1.31968, 0.69887),\n *     new Cesium.Cartographic(-1.10489, 0.83923)\n * ];\n * const promise = viewer.scene.sampleHeightMostDetailed(positions);\n * promise.then(function(updatedPosition) {\n *     // positions[0].height and positions[1].height have been updated.\n *     // updatedPositions is just a reference to positions.\n * }\n *\n * @see Scene#sampleHeight\n *\n * @exception {DeveloperError} sampleHeightMostDetailed is only supported in 3D mode.\n * @exception {DeveloperError} sampleHeightMostDetailed requires depth texture support. Check sampleHeightSupported.\n */\nScene.prototype.sampleHeightMostDetailed = function (\n  positions,\n  objectsToExclude,\n  width,\n) {\n  return this._picking.sampleHeightMostDetailed(\n    this,\n    positions,\n    objectsToExclude,\n    width,\n  );\n};\n\n/**\n * Initiates an asynchronous {@link Scene#clampToHeight} query for an array of {@link Cartesian3} positions\n * using the maximum level of detail for 3D Tilesets in the scene. Returns a promise that is resolved when\n * the query completes. Each position is modified in place. If a position cannot be clamped because no geometry\n * can be sampled at that location, or another error occurs, the element in the array is set to undefined.\n *\n * @param {Cartesian3[]} cartesians The cartesian positions to update with clamped positions.\n * @param {object[]} [objectsToExclude] A list of primitives, entities, or 3D Tiles features to not clamp to.\n * @param {number} [width=0.1] Width of the intersection volume in meters.\n * @returns {Promise<Array<Cartesian3 | undefined>>} A promise that resolves to the provided list of positions when the query has completed. Positions may become <code>undefined</code> if they cannot be clamped.\n *\n * @example\n * const cartesians = [\n *     entities[0].position.getValue(Cesium.JulianDate.now()),\n *     entities[1].position.getValue(Cesium.JulianDate.now())\n * ];\n * const promise = viewer.scene.clampToHeightMostDetailed(cartesians);\n * promise.then(function(updatedCartesians) {\n *     entities[0].position = updatedCartesians[0];\n *     entities[1].position = updatedCartesians[1];\n * }\n *\n * @see Scene#clampToHeight\n *\n * @exception {DeveloperError} clampToHeightMostDetailed is only supported in 3D mode.\n * @exception {DeveloperError} clampToHeightMostDetailed requires depth texture support. Check clampToHeightSupported.\n */\nScene.prototype.clampToHeightMostDetailed = function (\n  cartesians,\n  objectsToExclude,\n  width,\n) {\n  return this._picking.clampToHeightMostDetailed(\n    this,\n    cartesians,\n    objectsToExclude,\n    width,\n  );\n};\n\n/**\n * Transforms a position in cartesian coordinates to canvas coordinates.  This is commonly used to place an\n * HTML element at the same screen position as an object in the scene.\n *\n * @param {Cartesian3} position The position in cartesian coordinates.\n * @param {Cartesian2} [result] An optional object to return the input position transformed to canvas coordinates.\n * @returns {Cartesian2 | undefined} The modified result parameter or a new Cartesian2 instance if one was not provided.  This may be <code>undefined</code> if the input position is near the center of the ellipsoid.\n *\n * @example\n * // Output the canvas position of longitude/latitude (0, 0) every time the mouse moves.\n * const scene = widget.scene;\n * const position = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);\n * handler.setInputAction(function(movement) {\n *     console.log(scene.cartesianToCanvasCoordinates(position));\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nScene.prototype.cartesianToCanvasCoordinates = function (position, result) {\n  return SceneTransforms.worldToWindowCoordinates(this, position, result);\n};\n\n/**\n * Instantly completes an active transition.\n */\nScene.prototype.completeMorph = function () {\n  this._transitioner.completeMorph();\n};\n\n/**\n * Asynchronously transitions the scene to 2D.\n * @param {number} [duration=2.0] The amount of time, in seconds, for transition animations to complete.\n */\nScene.prototype.morphTo2D = function (duration) {\n  duration = duration ?? 2.0;\n  this._transitioner.morphTo2D(duration, this._ellipsoid);\n};\n\n/**\n * Asynchronously transitions the scene to Columbus View.\n * @param {number} [duration=2.0] The amount of time, in seconds, for transition animations to complete.\n */\nScene.prototype.morphToColumbusView = function (duration) {\n  duration = duration ?? 2.0;\n  this._transitioner.morphToColumbusView(duration, this._ellipsoid);\n};\n\n/**\n * Asynchronously transitions the scene to 3D.\n * @param {number} [duration=2.0] The amount of time, in seconds, for transition animations to complete.\n */\nScene.prototype.morphTo3D = function (duration) {\n  duration = duration ?? 2.0;\n  this._transitioner.morphTo3D(duration, this._ellipsoid);\n};\n\nfunction setTerrain(scene, terrain) {\n  // Cancel any in-progress terrain update\n  scene._removeTerrainProviderReadyListener =\n    scene._removeTerrainProviderReadyListener &&\n    scene._removeTerrainProviderReadyListener();\n\n  // If the terrain is already loaded, set it immediately\n  if (terrain.ready) {\n    if (defined(scene.globe)) {\n      scene.globe.terrainProvider = terrain.provider;\n    }\n    return;\n  }\n  // Otherwise, set a placeholder\n  scene.globe.terrainProvider = undefined;\n  scene._removeTerrainProviderReadyListener =\n    terrain.readyEvent.addEventListener((provider) => {\n      if (defined(scene) && defined(scene.globe)) {\n        scene.globe.terrainProvider = provider;\n      }\n\n      scene._removeTerrainProviderReadyListener();\n    });\n}\n\n/**\n * Update the terrain providing surface geometry for the globe.\n *\n * @param {Terrain} terrain The terrain provider async helper\n * @returns {Terrain} terrain The terrain provider async helper\n *\n * @example\n * // Use Cesium World Terrain\n * scene.setTerrain(Cesium.Terrain.fromWorldTerrain());\n *\n * @example\n * // Use a custom terrain provider\n * const terrain = new Cesium.Terrain(Cesium.CesiumTerrainProvider.fromUrl(\"https://myTestTerrain.com\"));\n * scene.setTerrain(terrain);\n *\n * terrain.errorEvent.addEventListener(error => {\n *   alert(`Encountered an error while creating terrain! ${error}`);\n * });\n */\nScene.prototype.setTerrain = function (terrain) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"terrain\", terrain);\n  //>>includeEnd('debug');\n\n  setTerrain(this, terrain);\n\n  return terrain;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Scene#destroy\n */\nScene.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * scene = scene && scene.destroy();\n *\n * @see Scene#isDestroyed\n */\nScene.prototype.destroy = function () {\n  this._tweens.removeAll();\n  this._computeEngine = this._computeEngine && this._computeEngine.destroy();\n  this._screenSpaceCameraController =\n    this._screenSpaceCameraController &&\n    this._screenSpaceCameraController.destroy();\n  this._deviceOrientationCameraController =\n    this._deviceOrientationCameraController &&\n    !this._deviceOrientationCameraController.isDestroyed() &&\n    this._deviceOrientationCameraController.destroy();\n  this._primitives = this._primitives && this._primitives.destroy();\n  this._groundPrimitives =\n    this._groundPrimitives && this._groundPrimitives.destroy();\n  this._globe = this._globe && this._globe.destroy();\n  this._removeTerrainProviderReadyListener =\n    this._removeTerrainProviderReadyListener &&\n    this._removeTerrainProviderReadyListener();\n  this.skyBox = this.skyBox && this.skyBox.destroy();\n  this.skyAtmosphere = this.skyAtmosphere && this.skyAtmosphere.destroy();\n  this._debugSphere = this._debugSphere && this._debugSphere.destroy();\n  this.sun = this.sun && this.sun.destroy();\n  this._sunPostProcess = this._sunPostProcess && this._sunPostProcess.destroy();\n  this._depthPlane = this._depthPlane && this._depthPlane.destroy();\n  this._transitioner = this._transitioner && this._transitioner.destroy();\n  this._debugFrustumPlanes =\n    this._debugFrustumPlanes && this._debugFrustumPlanes.destroy();\n  this._brdfLutGenerator =\n    this._brdfLutGenerator && this._brdfLutGenerator.destroy();\n  this._picking = this._picking && this._picking.destroy();\n\n  this._defaultView = this._defaultView && this._defaultView.destroy();\n  this._view = undefined;\n\n  if (this._removeCreditContainer) {\n    this._canvas.parentNode.removeChild(this._creditContainer);\n  }\n\n  this.postProcessStages =\n    this.postProcessStages && this.postProcessStages.destroy();\n\n  this._context = this._context && this._context.destroy();\n  this._frameState.creditDisplay =\n    this._frameState.creditDisplay && this._frameState.creditDisplay.destroy();\n\n  if (defined(this._performanceDisplay)) {\n    this._performanceDisplay =\n      this._performanceDisplay && this._performanceDisplay.destroy();\n    this._performanceContainer.parentNode.removeChild(\n      this._performanceContainer,\n    );\n  }\n\n  this._removeRequestListenerCallback();\n  this._removeTaskProcessorListenerCallback();\n  for (let i = 0; i < this._removeGlobeCallbacks.length; ++i) {\n    this._removeGlobeCallbacks[i]();\n  }\n  this._removeGlobeCallbacks.length = 0;\n\n  if (defined(this._removeUpdateHeightCallback)) {\n    this._removeUpdateHeightCallback();\n    this._removeUpdateHeightCallback = undefined;\n  }\n\n  return destroyObject(this);\n};\nexport default Scene;\n","import Color from \"../Core/Color.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\n\n/**\n * @private\n */\nfunction SceneFramebuffer() {\n  this._numSamples = 1;\n  this._colorFramebuffer = new FramebufferManager({\n    depthStencil: true,\n    supportsDepthTexture: true,\n  });\n  this._idFramebuffer = new FramebufferManager({\n    depthStencil: true,\n    supportsDepthTexture: true,\n  });\n\n  this._idClearColor = new Color(0.0, 0.0, 0.0, 0.0);\n\n  this._clearCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    depth: 1.0,\n    owner: this,\n  });\n}\n\nfunction destroyResources(post) {\n  post._colorFramebuffer.destroy();\n  post._idFramebuffer.destroy();\n}\n\nObject.defineProperties(SceneFramebuffer.prototype, {\n  framebuffer: {\n    get: function () {\n      return this._colorFramebuffer.framebuffer;\n    },\n  },\n  idFramebuffer: {\n    get: function () {\n      return this._idFramebuffer.framebuffer;\n    },\n  },\n  depthStencilTexture: {\n    get: function () {\n      return this._colorFramebuffer.getDepthStencilTexture();\n    },\n  },\n});\n\nSceneFramebuffer.prototype.update = function (\n  context,\n  viewport,\n  hdr,\n  numSamples,\n) {\n  const width = viewport.width;\n  const height = viewport.height;\n  const pixelDatatype = hdr\n    ? context.halfFloatingPointTexture\n      ? PixelDatatype.HALF_FLOAT\n      : PixelDatatype.FLOAT\n    : PixelDatatype.UNSIGNED_BYTE;\n  this._numSamples = numSamples;\n  this._colorFramebuffer.update(\n    context,\n    width,\n    height,\n    numSamples,\n    pixelDatatype,\n  );\n  this._idFramebuffer.update(context, width, height);\n};\n\nSceneFramebuffer.prototype.clear = function (context, passState, clearColor) {\n  Color.clone(clearColor, this._clearCommand.color);\n  Color.clone(this._idClearColor, this._clearCommand.color);\n  this._colorFramebuffer.clear(context, this._clearCommand, passState);\n  this._idFramebuffer.clear(context, this._clearCommand, passState);\n};\n\nSceneFramebuffer.prototype.getFramebuffer = function () {\n  return this._colorFramebuffer.framebuffer;\n};\n\nSceneFramebuffer.prototype.getIdFramebuffer = function () {\n  return this._idFramebuffer.framebuffer;\n};\n\nSceneFramebuffer.prototype.prepareColorTextures = function (context) {\n  if (this._numSamples > 1) {\n    this._colorFramebuffer.prepareTextures(context);\n  }\n};\n\nSceneFramebuffer.prototype.isDestroyed = function () {\n  return false;\n};\n\nSceneFramebuffer.prototype.destroy = function () {\n  destroyResources(this);\n  return destroyObject(this);\n};\nexport default SceneFramebuffer;\n","/**\n * Indicates if the scene is viewed in 3D, 2D, or 2.5D Columbus view.\n *\n * @enum {number}\n * @see Scene#mode\n */\nconst SceneMode = {\n  /**\n   * Morphing between mode, e.g., 3D to 2D.\n   *\n   * @type {number}\n   * @constant\n   */\n  MORPHING: 0,\n\n  /**\n   * Columbus View mode.  A 2.5D perspective view where the map is laid out\n   * flat and objects with non-zero height are drawn above it.\n   *\n   * @type {number}\n   * @constant\n   */\n  COLUMBUS_VIEW: 1,\n\n  /**\n   * 2D mode.  The map is viewed top-down with an orthographic projection.\n   *\n   * @type {number}\n   * @constant\n   */\n  SCENE2D: 2,\n\n  /**\n   * 3D mode.  A traditional 3D perspective view of the globe.\n   *\n   * @type {number}\n   * @constant\n   */\n  SCENE3D: 3,\n};\n\n/**\n * Returns the morph time for the given scene mode.\n *\n * @param {SceneMode} value The scene mode\n * @returns {number} The morph time\n */\nSceneMode.getMorphTime = function (value) {\n  if (value === SceneMode.SCENE3D) {\n    return 1.0;\n  } else if (value === SceneMode.MORPHING) {\n    return undefined;\n  }\n  return 0.0;\n};\nexport default Object.freeze(SceneMode);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Functions that do scene-dependent transforms between rendering-related coordinate systems.\n *\n * @namespace SceneTransforms\n */\nconst SceneTransforms = {};\n\nconst actualPositionScratch = new Cartesian4(0, 0, 0, 1);\nlet positionCC = new Cartesian4();\nconst scratchViewport = new BoundingRectangle();\n\nconst scratchWindowCoord0 = new Cartesian2();\nconst scratchWindowCoord1 = new Cartesian2();\n\n/**\n * Transforms a position in world (WGS84 or alternative ellipsoid) coordinates to window coordinates.  This is commonly used to place an\n * HTML element at the same screen position as an object in the scene.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian3} position The position in world (WGS84 or alternative ellipsoid) coordinates.\n * @param {Cartesian2} [result] An optional object to return the input position transformed to window coordinates.\n * @returns {Cartesian2|undefined} The modified result parameter or a new Cartesian2 instance if one was not provided.  This may be <code>undefined</code> if the input position is near the center of the ellipsoid.\n *\n * @example\n * // Output the window position of longitude/latitude (0, 0) every time the mouse moves.\n * const position = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);\n * handler.setInputAction(function(movement) {\n *     console.log(Cesium.SceneTransforms.worldToWindowCoordinates(scene, position));\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nSceneTransforms.worldToWindowCoordinates = function (scene, position, result) {\n  return SceneTransforms.worldWithEyeOffsetToWindowCoordinates(\n    scene,\n    position,\n    Cartesian3.ZERO,\n    result,\n  );\n};\n\nconst scratchCartesian4 = new Cartesian4();\nconst scratchEyeOffset = new Cartesian3();\n\nfunction worldToClip(position, eyeOffset, camera, result) {\n  const viewMatrix = camera.viewMatrix;\n\n  const positionEC = Matrix4.multiplyByVector(\n    viewMatrix,\n    Cartesian4.fromElements(\n      position.x,\n      position.y,\n      position.z,\n      1,\n      scratchCartesian4,\n    ),\n    scratchCartesian4,\n  );\n\n  const zEyeOffset = Cartesian3.multiplyComponents(\n    eyeOffset,\n    Cartesian3.normalize(positionEC, scratchEyeOffset),\n    scratchEyeOffset,\n  );\n  positionEC.x += eyeOffset.x + zEyeOffset.x;\n  positionEC.y += eyeOffset.y + zEyeOffset.y;\n  positionEC.z += zEyeOffset.z;\n\n  return Matrix4.multiplyByVector(\n    camera.frustum.projectionMatrix,\n    positionEC,\n    result,\n  );\n}\n\nconst scratchMaxCartographic = new Cartographic(\n  Math.PI,\n  CesiumMath.PI_OVER_TWO,\n);\nconst scratchProjectedCartesian = new Cartesian3();\nconst scratchCameraPosition = new Cartesian3();\n\n/**\n * @private\n */\nSceneTransforms.worldWithEyeOffsetToWindowCoordinates = function (\n  scene,\n  position,\n  eyeOffset,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  if (!defined(position)) {\n    throw new DeveloperError(\"position is required.\");\n  }\n  //>>includeEnd('debug');\n\n  // Transform for 3D, 2D, or Columbus view\n  const frameState = scene.frameState;\n  const actualPosition = SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    position,\n    actualPositionScratch,\n  );\n\n  if (!defined(actualPosition)) {\n    return undefined;\n  }\n\n  // Assuming viewport takes up the entire canvas...\n  const canvas = scene.canvas;\n  const viewport = scratchViewport;\n  viewport.x = 0;\n  viewport.y = 0;\n  viewport.width = canvas.clientWidth;\n  viewport.height = canvas.clientHeight;\n\n  const camera = scene.camera;\n  let cameraCentered = false;\n\n  if (frameState.mode === SceneMode.SCENE2D) {\n    const projection = scene.mapProjection;\n    const maxCartographic = scratchMaxCartographic;\n    const maxCoord = projection.project(\n      maxCartographic,\n      scratchProjectedCartesian,\n    );\n\n    const cameraPosition = Cartesian3.clone(\n      camera.position,\n      scratchCameraPosition,\n    );\n    const frustum = camera.frustum.clone();\n\n    const viewportTransformation = Matrix4.computeViewportTransformation(\n      viewport,\n      0.0,\n      1.0,\n      new Matrix4(),\n    );\n    const projectionMatrix = camera.frustum.projectionMatrix;\n\n    const x = camera.positionWC.y;\n    const eyePoint = Cartesian3.fromElements(\n      CesiumMath.sign(x) * maxCoord.x - x,\n      0.0,\n      -camera.positionWC.x,\n    );\n    const windowCoordinates = Transforms.pointToGLWindowCoordinates(\n      projectionMatrix,\n      viewportTransformation,\n      eyePoint,\n    );\n\n    if (\n      x === 0.0 ||\n      windowCoordinates.x <= 0.0 ||\n      windowCoordinates.x >= canvas.clientWidth\n    ) {\n      cameraCentered = true;\n    } else {\n      if (windowCoordinates.x > canvas.clientWidth * 0.5) {\n        viewport.width = windowCoordinates.x;\n\n        camera.frustum.right = maxCoord.x - x;\n\n        positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n        SceneTransforms.clipToGLWindowCoordinates(\n          viewport,\n          positionCC,\n          scratchWindowCoord0,\n        );\n\n        viewport.x += windowCoordinates.x;\n\n        camera.position.x = -camera.position.x;\n\n        const right = camera.frustum.right;\n        camera.frustum.right = -camera.frustum.left;\n        camera.frustum.left = -right;\n\n        positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n        SceneTransforms.clipToGLWindowCoordinates(\n          viewport,\n          positionCC,\n          scratchWindowCoord1,\n        );\n      } else {\n        viewport.x += windowCoordinates.x;\n        viewport.width -= windowCoordinates.x;\n\n        camera.frustum.left = -maxCoord.x - x;\n\n        positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n        SceneTransforms.clipToGLWindowCoordinates(\n          viewport,\n          positionCC,\n          scratchWindowCoord0,\n        );\n\n        viewport.x = viewport.x - viewport.width;\n\n        camera.position.x = -camera.position.x;\n\n        const left = camera.frustum.left;\n        camera.frustum.left = -camera.frustum.right;\n        camera.frustum.right = -left;\n\n        positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n        SceneTransforms.clipToGLWindowCoordinates(\n          viewport,\n          positionCC,\n          scratchWindowCoord1,\n        );\n      }\n\n      Cartesian3.clone(cameraPosition, camera.position);\n      camera.frustum = frustum.clone();\n\n      result = Cartesian2.clone(scratchWindowCoord0, result);\n      if (result.x < 0.0 || result.x > canvas.clientWidth) {\n        result.x = scratchWindowCoord1.x;\n      }\n    }\n  }\n\n  if (frameState.mode !== SceneMode.SCENE2D || cameraCentered) {\n    // View-projection matrix to transform from world coordinates to clip coordinates\n    positionCC = worldToClip(actualPosition, eyeOffset, camera, positionCC);\n    if (\n      positionCC.z < 0 &&\n      !(camera.frustum instanceof OrthographicFrustum) &&\n      !(camera.frustum instanceof OrthographicOffCenterFrustum)\n    ) {\n      return undefined;\n    }\n\n    result = SceneTransforms.clipToGLWindowCoordinates(\n      viewport,\n      positionCC,\n      result,\n    );\n  }\n\n  result.y = canvas.clientHeight - result.y;\n  return result;\n};\n\n/**\n * Transforms a position in world coordinates to drawing buffer coordinates.  This may produce different\n * results from SceneTransforms.worldToWindowCoordinates when the browser zoom is not 100%, or on high-DPI displays.\n *\n * @param {Scene} scene The scene.\n * @param {Cartesian3} position The position in world (WGS84 or alternative ellipsoid) coordinates.\n * @param {Cartesian2} [result] An optional object to return the input position transformed to window coordinates.\n * @returns {Cartesian2|undefined} The modified result parameter or a new Cartesian2 instance if one was not provided.  This may be <code>undefined</code> if the input position is near the center of the ellipsoid.\n *\n * @example\n * // Output the window position of longitude/latitude (0, 0) every time the mouse moves.\n * const position = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\n * const handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);\n * handler.setInputAction(function(movement) {\n *     console.log(Cesium.SceneTransforms.worldToDrawingBufferCoordinates(scene, position));\n * }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);\n */\nSceneTransforms.worldToDrawingBufferCoordinates = function (\n  scene,\n  position,\n  result,\n) {\n  result = SceneTransforms.worldToWindowCoordinates(scene, position, result);\n  if (!defined(result)) {\n    return undefined;\n  }\n\n  return SceneTransforms.transformWindowToDrawingBuffer(scene, result, result);\n};\n\nconst projectedPosition = new Cartesian3();\nconst positionInCartographic = new Cartographic();\n\n/**\n * @private\n */\nSceneTransforms.computeActualEllipsoidPosition = function (\n  frameState,\n  position,\n  result,\n) {\n  const mode = frameState.mode;\n\n  if (mode === SceneMode.SCENE3D) {\n    return Cartesian3.clone(position, result);\n  }\n\n  const projection = frameState.mapProjection;\n  const cartographic = projection.ellipsoid.cartesianToCartographic(\n    position,\n    positionInCartographic,\n  );\n  if (!defined(cartographic)) {\n    return undefined;\n  }\n\n  projection.project(cartographic, projectedPosition);\n\n  if (mode === SceneMode.COLUMBUS_VIEW) {\n    return Cartesian3.fromElements(\n      projectedPosition.z,\n      projectedPosition.x,\n      projectedPosition.y,\n      result,\n    );\n  }\n\n  if (mode === SceneMode.SCENE2D) {\n    return Cartesian3.fromElements(\n      0.0,\n      projectedPosition.x,\n      projectedPosition.y,\n      result,\n    );\n  }\n\n  // mode === SceneMode.MORPHING\n  const morphTime = frameState.morphTime;\n  return Cartesian3.fromElements(\n    CesiumMath.lerp(projectedPosition.z, position.x, morphTime),\n    CesiumMath.lerp(projectedPosition.x, position.y, morphTime),\n    CesiumMath.lerp(projectedPosition.y, position.z, morphTime),\n    result,\n  );\n};\n\nconst positionNDC = new Cartesian3();\nconst positionWC = new Cartesian3();\nconst viewportTransform = new Matrix4();\n\n/**\n * @private\n */\nSceneTransforms.clipToGLWindowCoordinates = function (\n  viewport,\n  position,\n  result,\n) {\n  // Perspective divide to transform from clip coordinates to normalized device coordinates\n  Cartesian3.divideByScalar(position, position.w, positionNDC);\n\n  // Viewport transform to transform from clip coordinates to window coordinates\n  Matrix4.computeViewportTransformation(viewport, 0.0, 1.0, viewportTransform);\n  Matrix4.multiplyByPoint(viewportTransform, positionNDC, positionWC);\n\n  return Cartesian2.fromCartesian3(positionWC, result);\n};\n\n/**\n * @private\n */\nSceneTransforms.transformWindowToDrawingBuffer = function (\n  scene,\n  windowPosition,\n  result,\n) {\n  const canvas = scene.canvas;\n  const xScale = scene.drawingBufferWidth / canvas.clientWidth;\n  const yScale = scene.drawingBufferHeight / canvas.clientHeight;\n  return Cartesian2.fromElements(\n    windowPosition.x * xScale,\n    windowPosition.y * yScale,\n    result,\n  );\n};\n\nconst scratchNDC = new Cartesian4();\nconst scratchWorldCoords = new Cartesian4();\n\n/**\n * @private\n */\nSceneTransforms.drawingBufferToWorldCoordinates = function (\n  scene,\n  drawingBufferPosition,\n  depth,\n  result,\n) {\n  const context = scene.context;\n  const uniformState = context.uniformState;\n\n  const currentFrustum = uniformState.currentFrustum;\n  const near = currentFrustum.x;\n  const far = currentFrustum.y;\n\n  if (scene.frameState.useLogDepth) {\n    // transforming logarithmic depth of form\n    // log2(z + 1) / log2( far + 1);\n    // to perspective form\n    // (far - far * near / z) / (far - near)\n    const log2Depth = depth * uniformState.log2FarDepthFromNearPlusOne;\n    const depthFromNear = Math.pow(2.0, log2Depth) - 1.0;\n    depth = (far * (1.0 - near / (depthFromNear + near))) / (far - near);\n  }\n\n  const viewport = scene.view.passState.viewport;\n  const ndc = Cartesian4.clone(Cartesian4.UNIT_W, scratchNDC);\n  ndc.x = ((drawingBufferPosition.x - viewport.x) / viewport.width) * 2.0 - 1.0;\n  ndc.y =\n    ((drawingBufferPosition.y - viewport.y) / viewport.height) * 2.0 - 1.0;\n  ndc.z = depth * 2.0 - 1.0;\n  ndc.w = 1.0;\n\n  let worldCoords;\n  let frustum = scene.camera.frustum;\n  if (!defined(frustum.fovy)) {\n    const offCenterFrustum = frustum.offCenterFrustum;\n    if (defined(offCenterFrustum)) {\n      frustum = offCenterFrustum;\n    }\n    worldCoords = scratchWorldCoords;\n    worldCoords.x =\n      (ndc.x * (frustum.right - frustum.left) + frustum.left + frustum.right) *\n      0.5;\n    worldCoords.y =\n      (ndc.y * (frustum.top - frustum.bottom) + frustum.bottom + frustum.top) *\n      0.5;\n    worldCoords.z = (ndc.z * (near - far) - near - far) * 0.5;\n    worldCoords.w = 1.0;\n\n    worldCoords = Matrix4.multiplyByVector(\n      uniformState.inverseView,\n      worldCoords,\n      worldCoords,\n    );\n  } else {\n    worldCoords = Matrix4.multiplyByVector(\n      uniformState.inverseViewProjection,\n      ndc,\n      scratchWorldCoords,\n    );\n\n    // Reverse perspective divide\n    const w = 1.0 / worldCoords.w;\n    Cartesian3.multiplyByScalar(worldCoords, w, worldCoords);\n  }\n  return Cartesian3.fromCartesian4(worldCoords, result);\n};\nexport default SceneTransforms;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport Ray from \"../Core/Ray.js\";\nimport ScreenSpaceEventHandler from \"../Core/ScreenSpaceEventHandler.js\";\nimport ScreenSpaceEventType from \"../Core/ScreenSpaceEventType.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport Camera from \"./Camera.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * @private\n */\nfunction SceneTransitioner(scene) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n  this._currentTweens = [];\n  this._morphHandler = undefined;\n  this._morphCancelled = false;\n  this._completeMorph = undefined;\n  this._morphToOrthographic = false;\n}\n\nSceneTransitioner.prototype.completeMorph = function () {\n  if (defined(this._completeMorph)) {\n    this._completeMorph();\n  }\n};\n\nSceneTransitioner.prototype.morphTo2D = function (duration, ellipsoid) {\n  if (defined(this._completeMorph)) {\n    this._completeMorph();\n  }\n\n  const scene = this._scene;\n  this._previousMode = scene.mode;\n  this._morphToOrthographic =\n    scene.camera.frustum instanceof OrthographicFrustum;\n\n  if (\n    this._previousMode === SceneMode.SCENE2D ||\n    this._previousMode === SceneMode.MORPHING\n  ) {\n    return;\n  }\n  this._scene.morphStart.raiseEvent(\n    this,\n    this._previousMode,\n    SceneMode.SCENE2D,\n    true,\n  );\n\n  scene._mode = SceneMode.MORPHING;\n  scene.camera._setTransform(Matrix4.IDENTITY);\n\n  if (this._previousMode === SceneMode.COLUMBUS_VIEW) {\n    morphFromColumbusViewTo2D(this, duration);\n  } else {\n    morphFrom3DTo2D(this, duration, ellipsoid);\n  }\n\n  if (duration === 0.0 && defined(this._completeMorph)) {\n    this._completeMorph();\n  }\n};\n\nconst scratchToCVPosition = new Cartesian3();\nconst scratchToCVDirection = new Cartesian3();\nconst scratchToCVUp = new Cartesian3();\nconst scratchToCVPosition2D = new Cartesian3();\nconst scratchToCVDirection2D = new Cartesian3();\nconst scratchToCVUp2D = new Cartesian3();\nconst scratchToCVSurfacePosition = new Cartesian3();\nconst scratchToCVCartographic = new Cartographic();\nconst scratchToCVToENU = new Matrix4();\nconst scratchToCVFrustumPerspective = new PerspectiveFrustum();\nconst scratchToCVFrustumOrthographic = new OrthographicFrustum();\nconst scratchToCVCamera = {\n  position: undefined,\n  direction: undefined,\n  up: undefined,\n  position2D: undefined,\n  direction2D: undefined,\n  up2D: undefined,\n  frustum: undefined,\n};\n\nSceneTransitioner.prototype.morphToColumbusView = function (\n  duration,\n  ellipsoid,\n) {\n  if (defined(this._completeMorph)) {\n    this._completeMorph();\n  }\n\n  const scene = this._scene;\n  this._previousMode = scene.mode;\n\n  if (\n    this._previousMode === SceneMode.COLUMBUS_VIEW ||\n    this._previousMode === SceneMode.MORPHING\n  ) {\n    return;\n  }\n  this._scene.morphStart.raiseEvent(\n    this,\n    this._previousMode,\n    SceneMode.COLUMBUS_VIEW,\n    true,\n  );\n\n  scene.camera._setTransform(Matrix4.IDENTITY);\n\n  let position = scratchToCVPosition;\n  const direction = scratchToCVDirection;\n  const up = scratchToCVUp;\n\n  if (duration > 0.0) {\n    position.x = 0.0;\n    position.y = -1.0;\n    position.z = 1.0;\n    position = Cartesian3.multiplyByScalar(\n      Cartesian3.normalize(position, position),\n      5.0 * ellipsoid.maximumRadius,\n      position,\n    );\n\n    Cartesian3.negate(Cartesian3.normalize(position, direction), direction);\n    Cartesian3.cross(Cartesian3.UNIT_X, direction, up);\n  } else {\n    const camera = scene.camera;\n    if (this._previousMode === SceneMode.SCENE2D) {\n      Cartesian3.clone(camera.position, position);\n      position.z = camera.frustum.right - camera.frustum.left;\n      Cartesian3.negate(Cartesian3.UNIT_Z, direction);\n      Cartesian3.clone(Cartesian3.UNIT_Y, up);\n    } else {\n      Cartesian3.clone(camera.positionWC, position);\n      Cartesian3.clone(camera.directionWC, direction);\n      Cartesian3.clone(camera.upWC, up);\n\n      const surfacePoint = ellipsoid.scaleToGeodeticSurface(\n        position,\n        scratchToCVSurfacePosition,\n      );\n      const toENU = Transforms.eastNorthUpToFixedFrame(\n        surfacePoint,\n        ellipsoid,\n        scratchToCVToENU,\n      );\n      Matrix4.inverseTransformation(toENU, toENU);\n\n      scene.mapProjection.project(\n        ellipsoid.cartesianToCartographic(position, scratchToCVCartographic),\n        position,\n      );\n      Matrix4.multiplyByPointAsVector(toENU, direction, direction);\n      Matrix4.multiplyByPointAsVector(toENU, up, up);\n    }\n  }\n\n  let frustum;\n  if (this._morphToOrthographic) {\n    frustum = scratchToCVFrustumOrthographic;\n    frustum.width = scene.camera.frustum.right - scene.camera.frustum.left;\n    frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n  } else {\n    frustum = scratchToCVFrustumPerspective;\n    frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n    frustum.fov = CesiumMath.toRadians(60.0);\n  }\n\n  const cameraCV = scratchToCVCamera;\n  cameraCV.position = position;\n  cameraCV.direction = direction;\n  cameraCV.up = up;\n  cameraCV.frustum = frustum;\n\n  const complete = completeColumbusViewCallback(cameraCV);\n  createMorphHandler(this, complete);\n\n  if (this._previousMode === SceneMode.SCENE2D) {\n    morphFrom2DToColumbusView(this, duration, cameraCV, complete);\n  } else {\n    cameraCV.position2D = Matrix4.multiplyByPoint(\n      Camera.TRANSFORM_2D,\n      position,\n      scratchToCVPosition2D,\n    );\n    cameraCV.direction2D = Matrix4.multiplyByPointAsVector(\n      Camera.TRANSFORM_2D,\n      direction,\n      scratchToCVDirection2D,\n    );\n    cameraCV.up2D = Matrix4.multiplyByPointAsVector(\n      Camera.TRANSFORM_2D,\n      up,\n      scratchToCVUp2D,\n    );\n\n    scene._mode = SceneMode.MORPHING;\n    morphFrom3DToColumbusView(this, duration, cameraCV, complete);\n  }\n\n  if (duration === 0.0 && defined(this._completeMorph)) {\n    this._completeMorph();\n  }\n};\n\nconst scratchCVTo3DCamera = {\n  position: new Cartesian3(),\n  direction: new Cartesian3(),\n  up: new Cartesian3(),\n  frustum: undefined,\n};\nconst scratch2DTo3DFrustumPersp = new PerspectiveFrustum();\n\nSceneTransitioner.prototype.morphTo3D = function (duration, ellipsoid) {\n  if (defined(this._completeMorph)) {\n    this._completeMorph();\n  }\n\n  const scene = this._scene;\n  this._previousMode = scene.mode;\n\n  if (\n    this._previousMode === SceneMode.SCENE3D ||\n    this._previousMode === SceneMode.MORPHING\n  ) {\n    return;\n  }\n  this._scene.morphStart.raiseEvent(\n    this,\n    this._previousMode,\n    SceneMode.SCENE3D,\n    true,\n  );\n\n  scene._mode = SceneMode.MORPHING;\n  scene.camera._setTransform(Matrix4.IDENTITY);\n\n  if (this._previousMode === SceneMode.SCENE2D) {\n    morphFrom2DTo3D(this, duration, ellipsoid);\n  } else {\n    let camera3D;\n    if (duration > 0.0) {\n      camera3D = scratchCVTo3DCamera;\n      Cartesian3.fromDegrees(\n        0.0,\n        0.0,\n        5.0 * ellipsoid.maximumRadius,\n        ellipsoid,\n        camera3D.position,\n      );\n      Cartesian3.negate(camera3D.position, camera3D.direction);\n      Cartesian3.normalize(camera3D.direction, camera3D.direction);\n      Cartesian3.clone(Cartesian3.UNIT_Z, camera3D.up);\n    } else {\n      camera3D = getColumbusViewTo3DCamera(this, ellipsoid);\n    }\n\n    let frustum;\n    const camera = scene.camera;\n    if (camera.frustum instanceof OrthographicFrustum) {\n      frustum = camera.frustum.clone();\n    } else {\n      frustum = scratch2DTo3DFrustumPersp;\n      frustum.aspectRatio =\n        scene.drawingBufferWidth / scene.drawingBufferHeight;\n      frustum.fov = CesiumMath.toRadians(60.0);\n    }\n    camera3D.frustum = frustum;\n\n    const complete = complete3DCallback(camera3D);\n    createMorphHandler(this, complete);\n\n    morphFromColumbusViewTo3D(this, duration, camera3D, complete);\n  }\n\n  if (duration === 0.0 && defined(this._completeMorph)) {\n    this._completeMorph();\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nSceneTransitioner.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * transitioner = transitioner && transitioner.destroy();\n */\nSceneTransitioner.prototype.destroy = function () {\n  destroyMorphHandler(this);\n  return destroyObject(this);\n};\n\nfunction createMorphHandler(transitioner, completeMorphFunction) {\n  if (transitioner._scene.completeMorphOnUserInput) {\n    transitioner._morphHandler = new ScreenSpaceEventHandler(\n      transitioner._scene.canvas,\n    );\n\n    const completeMorph = function () {\n      transitioner._morphCancelled = true;\n      transitioner._scene.camera.cancelFlight();\n      completeMorphFunction(transitioner);\n    };\n    transitioner._completeMorph = completeMorph;\n    transitioner._morphHandler.setInputAction(\n      completeMorph,\n      ScreenSpaceEventType.LEFT_DOWN,\n    );\n    transitioner._morphHandler.setInputAction(\n      completeMorph,\n      ScreenSpaceEventType.MIDDLE_DOWN,\n    );\n    transitioner._morphHandler.setInputAction(\n      completeMorph,\n      ScreenSpaceEventType.RIGHT_DOWN,\n    );\n    transitioner._morphHandler.setInputAction(\n      completeMorph,\n      ScreenSpaceEventType.WHEEL,\n    );\n  }\n}\n\nfunction destroyMorphHandler(transitioner) {\n  const tweens = transitioner._currentTweens;\n  for (let i = 0; i < tweens.length; ++i) {\n    tweens[i].cancelTween();\n  }\n  transitioner._currentTweens.length = 0;\n  transitioner._morphHandler =\n    transitioner._morphHandler && transitioner._morphHandler.destroy();\n}\n\nconst scratchCVTo3DCartographic = new Cartographic();\nconst scratchCVTo3DSurfacePoint = new Cartesian3();\nconst scratchCVTo3DFromENU = new Matrix4();\n\nfunction getColumbusViewTo3DCamera(transitioner, ellipsoid) {\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  const camera3D = scratchCVTo3DCamera;\n  const position = camera3D.position;\n  const direction = camera3D.direction;\n  const up = camera3D.up;\n\n  const positionCarto = scene.mapProjection.unproject(\n    camera.position,\n    scratchCVTo3DCartographic,\n  );\n  ellipsoid.cartographicToCartesian(positionCarto, position);\n  const surfacePoint = ellipsoid.scaleToGeodeticSurface(\n    position,\n    scratchCVTo3DSurfacePoint,\n  );\n\n  const fromENU = Transforms.eastNorthUpToFixedFrame(\n    surfacePoint,\n    ellipsoid,\n    scratchCVTo3DFromENU,\n  );\n\n  Matrix4.multiplyByPointAsVector(fromENU, camera.direction, direction);\n  Matrix4.multiplyByPointAsVector(fromENU, camera.up, up);\n\n  return camera3D;\n}\n\nconst scratchCVTo3DStartPos = new Cartesian3();\nconst scratchCVTo3DStartDir = new Cartesian3();\nconst scratchCVTo3DStartUp = new Cartesian3();\nconst scratchCVTo3DEndPos = new Cartesian3();\nconst scratchCVTo3DEndDir = new Cartesian3();\nconst scratchCVTo3DEndUp = new Cartesian3();\n\nfunction morphFromColumbusViewTo3D(\n  transitioner,\n  duration,\n  endCamera,\n  complete,\n) {\n  duration *= 0.5;\n\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  const startPos = Cartesian3.clone(camera.position, scratchCVTo3DStartPos);\n  const startDir = Cartesian3.clone(camera.direction, scratchCVTo3DStartDir);\n  const startUp = Cartesian3.clone(camera.up, scratchCVTo3DStartUp);\n\n  const endPos = Matrix4.multiplyByPoint(\n    Camera.TRANSFORM_2D_INVERSE,\n    endCamera.position,\n    scratchCVTo3DEndPos,\n  );\n  const endDir = Matrix4.multiplyByPointAsVector(\n    Camera.TRANSFORM_2D_INVERSE,\n    endCamera.direction,\n    scratchCVTo3DEndDir,\n  );\n  const endUp = Matrix4.multiplyByPointAsVector(\n    Camera.TRANSFORM_2D_INVERSE,\n    endCamera.up,\n    scratchCVTo3DEndUp,\n  );\n\n  function update(value) {\n    columbusViewMorph(startPos, endPos, value.time, camera.position);\n    columbusViewMorph(startDir, endDir, value.time, camera.direction);\n    columbusViewMorph(startUp, endUp, value.time, camera.up);\n    Cartesian3.cross(camera.direction, camera.up, camera.right);\n    Cartesian3.normalize(camera.right, camera.right);\n  }\n\n  const tween = scene.tweens.add({\n    duration: duration,\n    easingFunction: EasingFunction.QUARTIC_OUT,\n    startObject: {\n      time: 0.0,\n    },\n    stopObject: {\n      time: 1.0,\n    },\n    update: update,\n    complete: function () {\n      addMorphTimeAnimations(transitioner, scene, 0.0, 1.0, duration, complete);\n    },\n  });\n  transitioner._currentTweens.push(tween);\n}\n\nconst scratch2DTo3DFrustumOrtho = new OrthographicFrustum();\nconst scratch3DToCVStartPos = new Cartesian3();\nconst scratch3DToCVStartDir = new Cartesian3();\nconst scratch3DToCVStartUp = new Cartesian3();\nconst scratch3DToCVEndPos = new Cartesian3();\nconst scratch3DToCVEndDir = new Cartesian3();\nconst scratch3DToCVEndUp = new Cartesian3();\n\nfunction morphFrom2DTo3D(transitioner, duration, ellipsoid) {\n  duration /= 3.0;\n\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  let camera3D;\n  if (duration > 0.0) {\n    camera3D = scratchCVTo3DCamera;\n    Cartesian3.fromDegrees(\n      0.0,\n      0.0,\n      5.0 * ellipsoid.maximumRadius,\n      ellipsoid,\n      camera3D.position,\n    );\n    Cartesian3.negate(camera3D.position, camera3D.direction);\n    Cartesian3.normalize(camera3D.direction, camera3D.direction);\n    Cartesian3.clone(Cartesian3.UNIT_Z, camera3D.up);\n  } else {\n    camera.position.z = camera.frustum.right - camera.frustum.left;\n\n    camera3D = getColumbusViewTo3DCamera(transitioner, ellipsoid);\n  }\n\n  let frustum;\n  if (transitioner._morphToOrthographic) {\n    frustum = scratch2DTo3DFrustumOrtho;\n    frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n    frustum.width = camera.frustum.right - camera.frustum.left;\n  } else {\n    frustum = scratch2DTo3DFrustumPersp;\n    frustum.aspectRatio = scene.drawingBufferWidth / scene.drawingBufferHeight;\n    frustum.fov = CesiumMath.toRadians(60.0);\n  }\n\n  camera3D.frustum = frustum;\n\n  const complete = complete3DCallback(camera3D);\n  createMorphHandler(transitioner, complete);\n\n  let morph;\n  if (transitioner._morphToOrthographic) {\n    morph = function () {\n      morphFromColumbusViewTo3D(transitioner, duration, camera3D, complete);\n    };\n  } else {\n    morph = function () {\n      morphOrthographicToPerspective(\n        transitioner,\n        duration,\n        camera3D,\n        function () {\n          morphFromColumbusViewTo3D(transitioner, duration, camera3D, complete);\n        },\n      );\n    };\n  }\n\n  if (duration > 0.0) {\n    scene._mode = SceneMode.SCENE2D;\n    camera.flyTo({\n      duration: duration,\n      destination: Cartesian3.fromDegrees(\n        0.0,\n        0.0,\n        5.0 * ellipsoid.maximumRadius,\n        ellipsoid,\n        scratch3DToCVEndPos,\n      ),\n      complete: function () {\n        scene._mode = SceneMode.MORPHING;\n        morph();\n      },\n    });\n  } else {\n    morph();\n  }\n}\n\nfunction columbusViewMorph(startPosition, endPosition, time, result) {\n  // Just linear for now.\n  return Cartesian3.lerp(startPosition, endPosition, time, result);\n}\n\nfunction morphPerspectiveToOrthographic(\n  transitioner,\n  duration,\n  endCamera,\n  updateHeight,\n  complete,\n) {\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  if (camera.frustum instanceof OrthographicFrustum) {\n    return;\n  }\n\n  const startFOV = camera.frustum.fov;\n  const endFOV = CesiumMath.RADIANS_PER_DEGREE * 0.5;\n  const d = endCamera.position.z * Math.tan(startFOV * 0.5);\n  camera.frustum.far = d / Math.tan(endFOV * 0.5) + 10000000.0;\n\n  function update(value) {\n    camera.frustum.fov = CesiumMath.lerp(startFOV, endFOV, value.time);\n    const height = d / Math.tan(camera.frustum.fov * 0.5);\n    updateHeight(camera, height);\n  }\n  const tween = scene.tweens.add({\n    duration: duration,\n    easingFunction: EasingFunction.QUARTIC_OUT,\n    startObject: {\n      time: 0.0,\n    },\n    stopObject: {\n      time: 1.0,\n    },\n    update: update,\n    complete: function () {\n      camera.frustum = endCamera.frustum.clone();\n      complete(transitioner);\n    },\n  });\n  transitioner._currentTweens.push(tween);\n}\n\nconst scratchCVTo2DStartPos = new Cartesian3();\nconst scratchCVTo2DStartDir = new Cartesian3();\nconst scratchCVTo2DStartUp = new Cartesian3();\nconst scratchCVTo2DEndPos = new Cartesian3();\nconst scratchCVTo2DEndDir = new Cartesian3();\nconst scratchCVTo2DEndUp = new Cartesian3();\nconst scratchCVTo2DFrustum = new OrthographicOffCenterFrustum();\nconst scratchCVTo2DRay = new Ray();\nconst scratchCVTo2DPickPos = new Cartesian3();\nconst scratchCVTo2DCamera = {\n  position: undefined,\n  direction: undefined,\n  up: undefined,\n  frustum: undefined,\n};\n\nfunction morphFromColumbusViewTo2D(transitioner, duration) {\n  duration *= 0.5;\n\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  const startPos = Cartesian3.clone(camera.position, scratchCVTo2DStartPos);\n  const startDir = Cartesian3.clone(camera.direction, scratchCVTo2DStartDir);\n  const startUp = Cartesian3.clone(camera.up, scratchCVTo2DStartUp);\n\n  const endDir = Cartesian3.negate(Cartesian3.UNIT_Z, scratchCVTo2DEndDir);\n  const endUp = Cartesian3.clone(Cartesian3.UNIT_Y, scratchCVTo2DEndUp);\n\n  const endPos = scratchCVTo2DEndPos;\n\n  if (duration > 0.0) {\n    Cartesian3.clone(Cartesian3.ZERO, scratchCVTo2DEndPos);\n    endPos.z = 5.0 * scene.ellipsoid.maximumRadius;\n  } else {\n    Cartesian3.clone(startPos, scratchCVTo2DEndPos);\n\n    const ray = scratchCVTo2DRay;\n    Matrix4.multiplyByPoint(Camera.TRANSFORM_2D, startPos, ray.origin);\n    Matrix4.multiplyByPointAsVector(\n      Camera.TRANSFORM_2D,\n      startDir,\n      ray.direction,\n    );\n\n    const globe = scene.globe;\n    if (defined(globe)) {\n      const pickPos = globe.pickWorldCoordinates(\n        ray,\n        scene,\n        true,\n        scratchCVTo2DPickPos,\n      );\n      if (defined(pickPos)) {\n        Matrix4.multiplyByPoint(Camera.TRANSFORM_2D_INVERSE, pickPos, endPos);\n        endPos.z += Cartesian3.distance(startPos, endPos);\n      }\n    }\n  }\n\n  const frustum = scratchCVTo2DFrustum;\n  frustum.right = endPos.z * 0.5;\n  frustum.left = -frustum.right;\n  frustum.top =\n    frustum.right * (scene.drawingBufferHeight / scene.drawingBufferWidth);\n  frustum.bottom = -frustum.top;\n\n  const camera2D = scratchCVTo2DCamera;\n  camera2D.position = endPos;\n  camera2D.direction = endDir;\n  camera2D.up = endUp;\n  camera2D.frustum = frustum;\n\n  const complete = complete2DCallback(camera2D);\n  createMorphHandler(transitioner, complete);\n\n  function updateCV(value) {\n    columbusViewMorph(startPos, endPos, value.time, camera.position);\n    columbusViewMorph(startDir, endDir, value.time, camera.direction);\n    columbusViewMorph(startUp, endUp, value.time, camera.up);\n    Cartesian3.cross(camera.direction, camera.up, camera.right);\n    Cartesian3.normalize(camera.right, camera.right);\n    camera._adjustOrthographicFrustum(true);\n  }\n\n  function updateHeight(camera, height) {\n    camera.position.z = height;\n  }\n\n  const tween = scene.tweens.add({\n    duration: duration,\n    easingFunction: EasingFunction.QUARTIC_OUT,\n    startObject: {\n      time: 0.0,\n    },\n    stopObject: {\n      time: 1.0,\n    },\n    update: updateCV,\n    complete: function () {\n      morphPerspectiveToOrthographic(\n        transitioner,\n        duration,\n        camera2D,\n        updateHeight,\n        complete,\n      );\n    },\n  });\n  transitioner._currentTweens.push(tween);\n}\n\nconst scratch3DTo2DCartographic = new Cartographic();\nconst scratch3DTo2DCamera = {\n  position: new Cartesian3(),\n  direction: new Cartesian3(),\n  up: new Cartesian3(),\n  position2D: new Cartesian3(),\n  direction2D: new Cartesian3(),\n  up2D: new Cartesian3(),\n  frustum: new OrthographicOffCenterFrustum(),\n};\nconst scratch3DTo2DEndCamera = {\n  position: new Cartesian3(),\n  direction: new Cartesian3(),\n  up: new Cartesian3(),\n  frustum: undefined,\n};\nconst scratch3DTo2DPickPosition = new Cartesian3();\nconst scratch3DTo2DRay = new Ray();\nconst scratch3DTo2DToENU = new Matrix4();\nconst scratch3DTo2DSurfacePoint = new Cartesian3();\n\nfunction morphFrom3DTo2D(transitioner, duration, ellipsoid) {\n  duration *= 0.5;\n\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n  const camera2D = scratch3DTo2DCamera;\n\n  if (duration > 0.0) {\n    Cartesian3.clone(Cartesian3.ZERO, camera2D.position);\n    camera2D.position.z = 5.0 * ellipsoid.maximumRadius;\n    Cartesian3.negate(Cartesian3.UNIT_Z, camera2D.direction);\n    Cartesian3.clone(Cartesian3.UNIT_Y, camera2D.up);\n  } else {\n    ellipsoid.cartesianToCartographic(\n      camera.positionWC,\n      scratch3DTo2DCartographic,\n    );\n    scene.mapProjection.project(scratch3DTo2DCartographic, camera2D.position);\n\n    Cartesian3.negate(Cartesian3.UNIT_Z, camera2D.direction);\n    Cartesian3.clone(Cartesian3.UNIT_Y, camera2D.up);\n\n    const ray = scratch3DTo2DRay;\n    Cartesian3.clone(camera2D.position2D, ray.origin);\n    const rayDirection = Cartesian3.clone(camera.directionWC, ray.direction);\n    const surfacePoint = ellipsoid.scaleToGeodeticSurface(\n      camera.positionWC,\n      scratch3DTo2DSurfacePoint,\n    );\n    const toENU = Transforms.eastNorthUpToFixedFrame(\n      surfacePoint,\n      ellipsoid,\n      scratch3DTo2DToENU,\n    );\n    Matrix4.inverseTransformation(toENU, toENU);\n    Matrix4.multiplyByPointAsVector(toENU, rayDirection, rayDirection);\n    Matrix4.multiplyByPointAsVector(\n      Camera.TRANSFORM_2D,\n      rayDirection,\n      rayDirection,\n    );\n\n    const globe = scene.globe;\n    if (defined(globe)) {\n      const pickedPos = globe.pickWorldCoordinates(\n        ray,\n        scene,\n        true,\n        scratch3DTo2DPickPosition,\n      );\n      if (defined(pickedPos)) {\n        const height = Cartesian3.distance(camera2D.position2D, pickedPos);\n        pickedPos.x += height;\n        Cartesian3.clone(pickedPos, camera2D.position2D);\n      }\n    }\n  }\n\n  function updateHeight(camera, height) {\n    camera.position.x = height;\n  }\n\n  Matrix4.multiplyByPoint(\n    Camera.TRANSFORM_2D,\n    camera2D.position,\n    camera2D.position2D,\n  );\n  Matrix4.multiplyByPointAsVector(\n    Camera.TRANSFORM_2D,\n    camera2D.direction,\n    camera2D.direction2D,\n  );\n  Matrix4.multiplyByPointAsVector(\n    Camera.TRANSFORM_2D,\n    camera2D.up,\n    camera2D.up2D,\n  );\n\n  const frustum = camera2D.frustum;\n  frustum.right = camera2D.position.z * 0.5;\n  frustum.left = -frustum.right;\n  frustum.top =\n    frustum.right * (scene.drawingBufferHeight / scene.drawingBufferWidth);\n  frustum.bottom = -frustum.top;\n\n  const endCamera = scratch3DTo2DEndCamera;\n  Matrix4.multiplyByPoint(\n    Camera.TRANSFORM_2D_INVERSE,\n    camera2D.position2D,\n    endCamera.position,\n  );\n  Cartesian3.clone(camera2D.direction, endCamera.direction);\n  Cartesian3.clone(camera2D.up, endCamera.up);\n  endCamera.frustum = frustum;\n\n  const complete = complete2DCallback(endCamera);\n  createMorphHandler(transitioner, complete);\n\n  function completeCallback() {\n    morphPerspectiveToOrthographic(\n      transitioner,\n      duration,\n      camera2D,\n      updateHeight,\n      complete,\n    );\n  }\n  morphFrom3DToColumbusView(transitioner, duration, camera2D, completeCallback);\n}\n\nfunction morphOrthographicToPerspective(\n  transitioner,\n  duration,\n  cameraCV,\n  complete,\n) {\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  const height = camera.frustum.right - camera.frustum.left;\n  camera.frustum = cameraCV.frustum.clone();\n\n  const endFOV = camera.frustum.fov;\n  const startFOV = CesiumMath.RADIANS_PER_DEGREE * 0.5;\n  const d = height * Math.tan(endFOV * 0.5);\n  camera.frustum.far = d / Math.tan(startFOV * 0.5) + 10000000.0;\n  camera.frustum.fov = startFOV;\n\n  function update(value) {\n    camera.frustum.fov = CesiumMath.lerp(startFOV, endFOV, value.time);\n    camera.position.z = d / Math.tan(camera.frustum.fov * 0.5);\n  }\n  const tween = scene.tweens.add({\n    duration: duration,\n    easingFunction: EasingFunction.QUARTIC_OUT,\n    startObject: {\n      time: 0.0,\n    },\n    stopObject: {\n      time: 1.0,\n    },\n    update: update,\n    complete: function () {\n      complete(transitioner);\n    },\n  });\n  transitioner._currentTweens.push(tween);\n}\n\nfunction morphFrom2DToColumbusView(transitioner, duration, cameraCV, complete) {\n  duration *= 0.5;\n\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  const endPos = Cartesian3.clone(cameraCV.position, scratch3DToCVEndPos);\n  const endDir = Cartesian3.clone(cameraCV.direction, scratch3DToCVEndDir);\n  const endUp = Cartesian3.clone(cameraCV.up, scratch3DToCVEndUp);\n\n  scene._mode = SceneMode.MORPHING;\n\n  function morph() {\n    camera.frustum = cameraCV.frustum.clone();\n\n    const startPos = Cartesian3.clone(camera.position, scratch3DToCVStartPos);\n    const startDir = Cartesian3.clone(camera.direction, scratch3DToCVStartDir);\n    const startUp = Cartesian3.clone(camera.up, scratch3DToCVStartUp);\n    startPos.z = endPos.z;\n\n    function update(value) {\n      columbusViewMorph(startPos, endPos, value.time, camera.position);\n      columbusViewMorph(startDir, endDir, value.time, camera.direction);\n      columbusViewMorph(startUp, endUp, value.time, camera.up);\n      Cartesian3.cross(camera.direction, camera.up, camera.right);\n      Cartesian3.normalize(camera.right, camera.right);\n    }\n    const tween = scene.tweens.add({\n      duration: duration,\n      easingFunction: EasingFunction.QUARTIC_OUT,\n      startObject: {\n        time: 0.0,\n      },\n      stopObject: {\n        time: 1.0,\n      },\n      update: update,\n      complete: function () {\n        complete(transitioner);\n      },\n    });\n    transitioner._currentTweens.push(tween);\n  }\n\n  if (transitioner._morphToOrthographic) {\n    morph();\n  } else {\n    morphOrthographicToPerspective(transitioner, 0.0, cameraCV, morph);\n  }\n}\n\nfunction morphFrom3DToColumbusView(\n  transitioner,\n  duration,\n  endCamera,\n  complete,\n) {\n  const scene = transitioner._scene;\n  const camera = scene.camera;\n\n  const startPos = Cartesian3.clone(camera.position, scratch3DToCVStartPos);\n  const startDir = Cartesian3.clone(camera.direction, scratch3DToCVStartDir);\n  const startUp = Cartesian3.clone(camera.up, scratch3DToCVStartUp);\n\n  const endPos = Cartesian3.clone(endCamera.position2D, scratch3DToCVEndPos);\n  const endDir = Cartesian3.clone(endCamera.direction2D, scratch3DToCVEndDir);\n  const endUp = Cartesian3.clone(endCamera.up2D, scratch3DToCVEndUp);\n\n  function update(value) {\n    columbusViewMorph(startPos, endPos, value.time, camera.position);\n    columbusViewMorph(startDir, endDir, value.time, camera.direction);\n    columbusViewMorph(startUp, endUp, value.time, camera.up);\n    Cartesian3.cross(camera.direction, camera.up, camera.right);\n    Cartesian3.normalize(camera.right, camera.right);\n    camera._adjustOrthographicFrustum(true);\n  }\n  const tween = scene.tweens.add({\n    duration: duration,\n    easingFunction: EasingFunction.QUARTIC_OUT,\n    startObject: {\n      time: 0.0,\n    },\n    stopObject: {\n      time: 1.0,\n    },\n    update: update,\n    complete: function () {\n      addMorphTimeAnimations(transitioner, scene, 1.0, 0.0, duration, complete);\n    },\n  });\n  transitioner._currentTweens.push(tween);\n}\n\nfunction addMorphTimeAnimations(\n  transitioner,\n  scene,\n  start,\n  stop,\n  duration,\n  complete,\n) {\n  // Later, this will be linear and each object will adjust, if desired, in its vertex shader.\n  const options = {\n    object: scene,\n    property: \"morphTime\",\n    startValue: start,\n    stopValue: stop,\n    duration: duration,\n    easingFunction: EasingFunction.QUARTIC_OUT,\n  };\n\n  if (defined(complete)) {\n    options.complete = function () {\n      complete(transitioner);\n    };\n  }\n\n  const tween = scene.tweens.addProperty(options);\n  transitioner._currentTweens.push(tween);\n}\n\nfunction complete3DCallback(camera3D) {\n  return function (transitioner) {\n    const scene = transitioner._scene;\n    scene._mode = SceneMode.SCENE3D;\n    scene.morphTime = SceneMode.getMorphTime(SceneMode.SCENE3D);\n\n    destroyMorphHandler(transitioner);\n\n    const camera = scene.camera;\n    if (\n      transitioner._previousMode !== SceneMode.MORPHING ||\n      transitioner._morphCancelled\n    ) {\n      transitioner._morphCancelled = false;\n\n      Cartesian3.clone(camera3D.position, camera.position);\n      Cartesian3.clone(camera3D.direction, camera.direction);\n      Cartesian3.clone(camera3D.up, camera.up);\n      Cartesian3.cross(camera.direction, camera.up, camera.right);\n      Cartesian3.normalize(camera.right, camera.right);\n\n      camera.frustum = camera3D.frustum.clone();\n    }\n\n    const frustum = camera.frustum;\n    if (scene.frameState.useLogDepth) {\n      frustum.near = 0.1;\n      frustum.far = 10000000000.0;\n    }\n\n    const wasMorphing = defined(transitioner._completeMorph);\n    transitioner._completeMorph = undefined;\n    scene.camera.update(scene.mode);\n    transitioner._scene.morphComplete.raiseEvent(\n      transitioner,\n      transitioner._previousMode,\n      SceneMode.SCENE3D,\n      wasMorphing,\n    );\n  };\n}\n\nfunction complete2DCallback(camera2D) {\n  return function (transitioner) {\n    const scene = transitioner._scene;\n\n    scene._mode = SceneMode.SCENE2D;\n    scene.morphTime = SceneMode.getMorphTime(SceneMode.SCENE2D);\n\n    destroyMorphHandler(transitioner);\n\n    const camera = scene.camera;\n    Cartesian3.clone(camera2D.position, camera.position);\n    camera.position.z = scene.ellipsoid.maximumRadius * 2.0;\n    Cartesian3.clone(camera2D.direction, camera.direction);\n    Cartesian3.clone(camera2D.up, camera.up);\n    Cartesian3.cross(camera.direction, camera.up, camera.right);\n    Cartesian3.normalize(camera.right, camera.right);\n    camera.frustum = camera2D.frustum.clone();\n\n    const wasMorphing = defined(transitioner._completeMorph);\n    transitioner._completeMorph = undefined;\n    scene.camera.update(scene.mode);\n    transitioner._scene.morphComplete.raiseEvent(\n      transitioner,\n      transitioner._previousMode,\n      SceneMode.SCENE2D,\n      wasMorphing,\n    );\n  };\n}\n\nfunction completeColumbusViewCallback(cameraCV) {\n  return function (transitioner) {\n    const scene = transitioner._scene;\n    scene._mode = SceneMode.COLUMBUS_VIEW;\n    scene.morphTime = SceneMode.getMorphTime(SceneMode.COLUMBUS_VIEW);\n\n    destroyMorphHandler(transitioner);\n\n    const camera = scene.camera;\n    if (\n      transitioner._previousModeMode !== SceneMode.MORPHING ||\n      transitioner._morphCancelled\n    ) {\n      transitioner._morphCancelled = false;\n\n      Cartesian3.clone(cameraCV.position, camera.position);\n      Cartesian3.clone(cameraCV.direction, camera.direction);\n      Cartesian3.clone(cameraCV.up, camera.up);\n      Cartesian3.cross(camera.direction, camera.up, camera.right);\n      Cartesian3.normalize(camera.right, camera.right);\n    }\n\n    const frustum = camera.frustum;\n    if (scene.frameState.useLogDepth) {\n      frustum.near = 0.1;\n      frustum.far = 10000000000.0;\n    }\n\n    const wasMorphing = defined(transitioner._completeMorph);\n    transitioner._completeMorph = undefined;\n    scene.camera.update(scene.mode);\n    transitioner._scene.morphComplete.raiseEvent(\n      transitioner,\n      transitioner._previousMode,\n      SceneMode.COLUMBUS_VIEW,\n      wasMorphing,\n    );\n  };\n}\nexport default SceneTransitioner;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport HeadingPitchRoll from \"../Core/HeadingPitchRoll.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport KeyboardEventModifier from \"../Core/KeyboardEventModifier.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicFrustum from \"../Core/OrthographicFrustum.js\";\nimport Plane from \"../Core/Plane.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport Ray from \"../Core/Ray.js\";\nimport VerticalExaggeration from \"../Core/VerticalExaggeration.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport CameraEventAggregator from \"./CameraEventAggregator.js\";\nimport CameraEventType from \"./CameraEventType.js\";\nimport MapMode2D from \"./MapMode2D.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\nimport TweenCollection from \"./TweenCollection.js\";\n\n/**\n * Modifies the camera position and orientation based on mouse input to a canvas.\n * @alias ScreenSpaceCameraController\n * @constructor\n *\n * @param {Scene} scene The scene.\n */\nfunction ScreenSpaceCameraController(scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  /**\n   * If true, inputs are allowed conditionally with the flags enableTranslate, enableZoom,\n   * enableRotate, enableTilt, and enableLook.  If false, all inputs are disabled.\n   *\n   * NOTE: This setting is for temporary use cases, such as camera flights and\n   * drag-selection of regions (see Picking demo).  It is typically set to false at the\n   * start of such events, and set true on completion.  To keep inputs disabled\n   * past the end of camera flights, you must use the other booleans (enableTranslate,\n   * enableZoom, enableRotate, enableTilt, and enableLook).\n   * @type {boolean}\n   * @default true\n   */\n  this.enableInputs = true;\n  /**\n   * If true, allows the user to pan around the map.  If false, the camera stays locked at the current position.\n   * This flag only applies in 2D and Columbus view modes.\n   * @type {boolean}\n   * @default true\n   */\n  this.enableTranslate = true;\n  /**\n   * If true, allows the user to zoom in and out.  If false, the camera is locked to the current distance from the ellipsoid.\n   * @type {boolean}\n   * @default true\n   */\n  this.enableZoom = true;\n  /**\n   * If true, allows the user to rotate the world which translates the user's position.\n   * This flag only applies in 2D and 3D.\n   * @type {boolean}\n   * @default true\n   */\n  this.enableRotate = true;\n  /**\n   * If true, allows the user to tilt the camera.  If false, the camera is locked to the current heading.\n   * This flag only applies in 3D and Columbus view.\n   * @type {boolean}\n   * @default true\n   */\n  this.enableTilt = true;\n  /**\n   * If true, allows the user to use free-look. If false, the camera view direction can only be changed through translating\n   * or rotating. This flag only applies in 3D and Columbus view modes.\n   * @type {boolean}\n   * @default true\n   */\n  this.enableLook = true;\n  /**\n   * A parameter in the range <code>[0, 1)</code> used to determine how long\n   * the camera will continue to spin because of inertia.\n   * With value of zero, the camera will have no inertia.\n   * @type {number}\n   * @default 0.9\n   */\n  this.inertiaSpin = 0.9;\n  /**\n   * A parameter in the range <code>[0, 1)</code> used to determine how long\n   * the camera will continue to translate because of inertia.\n   * With value of zero, the camera will have no inertia.\n   * @type {number}\n   * @default 0.9\n   */\n  this.inertiaTranslate = 0.9;\n  /**\n   * A parameter in the range <code>[0, 1)</code> used to determine how long\n   * the camera will continue to zoom because of inertia.\n   * With value of zero, the camera will have no inertia.\n   * @type {number}\n   * @default 0.8\n   */\n  this.inertiaZoom = 0.8;\n  /**\n   * A parameter in the range <code>[0, 1)</code> used to limit the range\n   * of various user inputs to a percentage of the window width/height per animation frame.\n   * This helps keep the camera under control in low-frame-rate situations.\n   * @type {number}\n   * @default 0.1\n   */\n  this.maximumMovementRatio = 0.1;\n  /**\n   * Sets the duration, in seconds, of the bounce back animations in 2D and Columbus view.\n   * @type {number}\n   * @default 3.0\n   */\n  this.bounceAnimationTime = 3.0;\n  /**\n   * The minimum magnitude, in meters, of the camera position when zooming. Defaults to 1.0.\n   * @type {number}\n   * @default 1.0\n   */\n  this.minimumZoomDistance = 1.0;\n  /**\n   * The maximum magnitude, in meters, of the camera position when zooming. Defaults to positive infinity.\n   * @type {number}\n   * @default {@link Number.POSITIVE_INFINITY}\n   */\n  this.maximumZoomDistance = Number.POSITIVE_INFINITY;\n\n  /**\n   * A multiplier for the speed at which the camera will zoom.\n   * @type {number}\n   * @default 5.0\n   */\n  this.zoomFactor = 5.0;\n\n  /**\n   * The input that allows the user to pan around the map. This only applies in 2D and Columbus view modes.\n   * <p>\n   * The type can be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n   * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n   * or an array of any of the preceding.\n   * </p>\n   * @type {CameraEventType|Array|undefined}\n   * @default {@link CameraEventType.LEFT_DRAG}\n   */\n  this.translateEventTypes = CameraEventType.LEFT_DRAG;\n  /**\n   * The input that allows the user to zoom in/out.\n   * <p>\n   * The type can be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n   * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n   * or an array of any of the preceding.\n   * </p>\n   * @type {CameraEventType|Array|undefined}\n   * @default [{@link CameraEventType.RIGHT_DRAG}, {@link CameraEventType.WHEEL}, {@link CameraEventType.PINCH}]\n   */\n  this.zoomEventTypes = [\n    CameraEventType.RIGHT_DRAG,\n    CameraEventType.WHEEL,\n    CameraEventType.PINCH,\n  ];\n  /**\n   * The input that allows the user to rotate around the globe or another object. This only applies in 3D and Columbus view modes.\n   * <p>\n   * The type can be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n   * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n   * or an array of any of the preceding.\n   * </p>\n   * @type {CameraEventType|Array|undefined}\n   * @default {@link CameraEventType.LEFT_DRAG}\n   */\n  this.rotateEventTypes = CameraEventType.LEFT_DRAG;\n  /**\n   * The input that allows the user to tilt in 3D and Columbus view or twist in 2D.\n   * <p>\n   * The type can be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n   * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n   * or an array of any of the preceding.\n   * </p>\n   * @type {CameraEventType|Array|undefined}\n   * @default [{@link CameraEventType.MIDDLE_DRAG}, {@link CameraEventType.PINCH}, {\n   *     eventType : {@link CameraEventType.LEFT_DRAG},\n   *     modifier : {@link KeyboardEventModifier.CTRL}\n   * }, {\n   *     eventType : {@link CameraEventType.RIGHT_DRAG},\n   *     modifier : {@link KeyboardEventModifier.CTRL}\n   * }]\n   */\n  this.tiltEventTypes = [\n    CameraEventType.MIDDLE_DRAG,\n    CameraEventType.PINCH,\n    {\n      eventType: CameraEventType.LEFT_DRAG,\n      modifier: KeyboardEventModifier.CTRL,\n    },\n    {\n      eventType: CameraEventType.RIGHT_DRAG,\n      modifier: KeyboardEventModifier.CTRL,\n    },\n  ];\n  /**\n   * The input that allows the user to change the direction the camera is viewing. This only applies in 3D and Columbus view modes.\n   * <p>\n   * The type can be a {@link CameraEventType}, <code>undefined</code>, an object with <code>eventType</code>\n   * and <code>modifier</code> properties with types <code>CameraEventType</code> and {@link KeyboardEventModifier},\n   * or an array of any of the preceding.\n   * </p>\n   * @type {CameraEventType|Array|undefined}\n   * @default { eventType : {@link CameraEventType.LEFT_DRAG}, modifier : {@link KeyboardEventModifier.SHIFT} }\n   */\n  this.lookEventTypes = {\n    eventType: CameraEventType.LEFT_DRAG,\n    modifier: KeyboardEventModifier.SHIFT,\n  };\n\n  const ellipsoid = scene.ellipsoid ?? Ellipsoid.default;\n\n  /**\n   * The minimum height the camera must be before picking the terrain or scene content instead of the ellipsoid. Defaults to scene.ellipsoid.minimumRadius * 0.025 when another ellipsoid than WGS84 is used.\n   * @type {number}\n   * @default 150000.0 or scene.ellipsoid.minimumRadius * 0.025\n   */\n  this.minimumPickingTerrainHeight = Ellipsoid.WGS84.equals(ellipsoid)\n    ? 150000.0\n    : ellipsoid.minimumRadius * 0.025;\n  this._minimumPickingTerrainHeight = this.minimumPickingTerrainHeight;\n  /**\n   * The minimum distance the camera must be before testing for collision with terrain when zoom with inertia. Default to scene.ellipsoid.minimumRadius * 0.00063 when another ellipsoid than WGS84 is used.\n   * @type {number}\n   * @default 4000.0 or scene.ellipsoid.minimumRadius * 0.00063\n   */\n  this.minimumPickingTerrainDistanceWithInertia = Ellipsoid.WGS84.equals(\n    ellipsoid,\n  )\n    ? 4000.0\n    : ellipsoid.minimumRadius * 0.00063;\n  /**\n   * The minimum height the camera must be before testing for collision with terrain. Default to scene.ellipsoid.minimumRadius * 0.0025 when another ellipsoid than WGS84 is used.\n   * @type {number}\n   * @default 15000.0 or scene.ellipsoid.minimumRadius * 0.0025.\n   */\n  this.minimumCollisionTerrainHeight = Ellipsoid.WGS84.equals(ellipsoid)\n    ? 15000.0\n    : ellipsoid.minimumRadius * 0.0025;\n  this._minimumCollisionTerrainHeight = this.minimumCollisionTerrainHeight;\n  /**\n   * The minimum height the camera must be before switching from rotating a track ball to\n   * free look when clicks originate on the sky or in space. Defaults to ellipsoid.minimumRadius * 1.175 when another ellipsoid than WGS84 is used.\n   * @type {number}\n   * @default 7500000.0 or scene.ellipsoid.minimumRadius * 1.175\n   */\n  this.minimumTrackBallHeight = Ellipsoid.WGS84.equals(ellipsoid)\n    ? 7500000.0\n    : ellipsoid.minimumRadius * 1.175;\n  this._minimumTrackBallHeight = this.minimumTrackBallHeight;\n  /**\n   * When disabled, the values of <code>maximumZoomDistance</code> and <code>minimumZoomDistance</code> are ignored.\n   * Also used in conjunction with {@link Cesium3DTileset#enableCollision} to prevent the camera from moving through or below a 3D Tileset surface.\n   * This may also affect clamping behavior when using {@link HeightReference.CLAMP_TO_GROUND} on 3D Tiles.\n   * @type {boolean}\n   * @default true\n   */\n  this.enableCollisionDetection = true;\n  /**\n   * The angle, relative to the ellipsoid normal, restricting the maximum amount that the user can tilt the camera. If <code>undefined</code>, the angle of the camera tilt is unrestricted.\n   * @type {number|undefined}\n   * @default undefined\n   *\n   * @example\n   * // Prevent the camera from tilting below the ellipsoid surface\n   * viewer.scene.screenSpaceCameraController.maximumTiltAngle = Math.PI / 2.0;\n   */\n  this.maximumTiltAngle = undefined;\n\n  this._scene = scene;\n  this._globe = undefined;\n  this._ellipsoid = ellipsoid;\n\n  this._lastGlobeHeight = 0.0;\n\n  this._aggregator = new CameraEventAggregator(scene.canvas);\n\n  this._lastInertiaSpinMovement = undefined;\n  this._lastInertiaZoomMovement = undefined;\n  this._lastInertiaTranslateMovement = undefined;\n  this._lastInertiaTiltMovement = undefined;\n\n  // Zoom disables tilt, spin, and translate inertia\n  // Tilt disables spin and translate inertia\n  this._inertiaDisablers = {\n    _lastInertiaZoomMovement: [\n      \"_lastInertiaSpinMovement\",\n      \"_lastInertiaTranslateMovement\",\n      \"_lastInertiaTiltMovement\",\n    ],\n    _lastInertiaTiltMovement: [\n      \"_lastInertiaSpinMovement\",\n      \"_lastInertiaTranslateMovement\",\n    ],\n  };\n\n  this._tweens = new TweenCollection();\n  this._tween = undefined;\n\n  this._horizontalRotationAxis = undefined;\n\n  this._tiltCenterMousePosition = new Cartesian2(-1.0, -1.0);\n  this._tiltCenter = new Cartesian3();\n  this._rotateMousePosition = new Cartesian2(-1.0, -1.0);\n  this._rotateStartPosition = new Cartesian3();\n  this._strafeStartPosition = new Cartesian3();\n  this._strafeMousePosition = new Cartesian2();\n  this._strafeEndMousePosition = new Cartesian2();\n  this._zoomMouseStart = new Cartesian2(-1.0, -1.0);\n  this._zoomWorldPosition = new Cartesian3();\n  this._useZoomWorldPosition = false;\n  this._panLastMousePosition = new Cartesian2();\n  this._panLastWorldPosition = new Cartesian3();\n  this._tiltCVOffMap = false;\n  this._looking = false;\n  this._rotating = false;\n  this._strafing = false;\n  this._zoomingOnVector = false;\n  this._zoomingUnderground = false;\n  this._rotatingZoom = false;\n  this._adjustedHeightForTerrain = false;\n  this._cameraUnderground = false;\n\n  const projection = scene.mapProjection;\n  this._maxCoord = projection.project(\n    new Cartographic(Math.PI, CesiumMath.PI_OVER_TWO),\n  );\n\n  // Constants, Make any of these public?\n  this._rotateFactor = undefined;\n  this._rotateRateRangeAdjustment = undefined;\n  this._maximumRotateRate = 1.77;\n  this._minimumRotateRate = 1.0 / 5000.0;\n  this._minimumZoomRate = 20.0;\n  this._maximumZoomRate = 5906376272000.0; // distance from the Sun to Pluto in meters.\n  this._minimumUndergroundPickDistance = 2000.0;\n  this._maximumUndergroundPickDistance = 10000.0;\n}\n\nfunction decay(time, coefficient) {\n  if (time < 0) {\n    return 0.0;\n  }\n\n  const tau = (1.0 - coefficient) * 25.0;\n  return Math.exp(-tau * time);\n}\n\nfunction sameMousePosition(movement) {\n  return Cartesian2.equalsEpsilon(\n    movement.startPosition,\n    movement.endPosition,\n    CesiumMath.EPSILON14,\n  );\n}\n\n// If the time between mouse down and mouse up is not between\n// these thresholds, the camera will not move with inertia.\n// This value is probably dependent on the browser and/or the\n// hardware. Should be investigated further.\nconst inertiaMaxClickTimeThreshold = 0.4;\n\nfunction maintainInertia(\n  aggregator,\n  type,\n  modifier,\n  decayCoef,\n  action,\n  object,\n  lastMovementName,\n) {\n  let movementState = object[lastMovementName];\n  if (!defined(movementState)) {\n    movementState = object[lastMovementName] = {\n      startPosition: new Cartesian2(),\n      endPosition: new Cartesian2(),\n      motion: new Cartesian2(),\n      inertiaEnabled: true,\n    };\n  }\n\n  const ts = aggregator.getButtonPressTime(type, modifier);\n  const tr = aggregator.getButtonReleaseTime(type, modifier);\n\n  const threshold = ts && tr && (tr.getTime() - ts.getTime()) / 1000.0;\n  const now = new Date();\n  const fromNow = tr && (now.getTime() - tr.getTime()) / 1000.0;\n\n  if (ts && tr && threshold < inertiaMaxClickTimeThreshold) {\n    const d = decay(fromNow, decayCoef);\n\n    const lastMovement = aggregator.getLastMovement(type, modifier);\n    if (\n      !defined(lastMovement) ||\n      sameMousePosition(lastMovement) ||\n      !movementState.inertiaEnabled\n    ) {\n      return;\n    }\n\n    movementState.motion.x =\n      (lastMovement.endPosition.x - lastMovement.startPosition.x) * 0.5;\n    movementState.motion.y =\n      (lastMovement.endPosition.y - lastMovement.startPosition.y) * 0.5;\n\n    movementState.startPosition = Cartesian2.clone(\n      lastMovement.startPosition,\n      movementState.startPosition,\n    );\n\n    movementState.endPosition = Cartesian2.multiplyByScalar(\n      movementState.motion,\n      d,\n      movementState.endPosition,\n    );\n    movementState.endPosition = Cartesian2.add(\n      movementState.startPosition,\n      movementState.endPosition,\n      movementState.endPosition,\n    );\n\n    // If value from the decreasing exponential function is close to zero,\n    // the end coordinates may be NaN.\n    if (\n      isNaN(movementState.endPosition.x) ||\n      isNaN(movementState.endPosition.y) ||\n      Cartesian2.distance(\n        movementState.startPosition,\n        movementState.endPosition,\n      ) < 0.5\n    ) {\n      return;\n    }\n\n    if (!aggregator.isButtonDown(type, modifier)) {\n      const startPosition = aggregator.getStartMousePosition(type, modifier);\n      action(object, startPosition, movementState);\n    }\n  }\n}\n\nfunction activateInertia(controller, inertiaStateName) {\n  if (defined(inertiaStateName)) {\n    // Re-enable inertia if it was disabled\n    let movementState = controller[inertiaStateName];\n    if (defined(movementState)) {\n      movementState.inertiaEnabled = true;\n    }\n    // Disable inertia on other movements\n    const inertiasToDisable = controller._inertiaDisablers[inertiaStateName];\n    if (defined(inertiasToDisable)) {\n      const length = inertiasToDisable.length;\n      for (let i = 0; i < length; ++i) {\n        movementState = controller[inertiasToDisable[i]];\n        if (defined(movementState)) {\n          movementState.inertiaEnabled = false;\n        }\n      }\n    }\n  }\n}\n\nconst scratchEventTypeArray = [];\n\nfunction reactToInput(\n  controller,\n  enabled,\n  eventTypes,\n  action,\n  inertiaConstant,\n  inertiaStateName,\n) {\n  if (!defined(eventTypes)) {\n    return;\n  }\n\n  const aggregator = controller._aggregator;\n\n  if (!Array.isArray(eventTypes)) {\n    scratchEventTypeArray[0] = eventTypes;\n    eventTypes = scratchEventTypeArray;\n  }\n\n  const length = eventTypes.length;\n  for (let i = 0; i < length; ++i) {\n    const eventType = eventTypes[i];\n    const type = defined(eventType.eventType) ? eventType.eventType : eventType;\n    const modifier = eventType.modifier;\n\n    const movement =\n      aggregator.isMoving(type, modifier) &&\n      aggregator.getMovement(type, modifier);\n    const startPosition = aggregator.getStartMousePosition(type, modifier);\n\n    if (controller.enableInputs && enabled) {\n      if (movement) {\n        action(controller, startPosition, movement);\n        activateInertia(controller, inertiaStateName);\n      } else if (inertiaConstant < 1.0) {\n        maintainInertia(\n          aggregator,\n          type,\n          modifier,\n          inertiaConstant,\n          action,\n          controller,\n          inertiaStateName,\n        );\n      }\n    }\n  }\n}\n\nconst scratchZoomPickRay = new Ray();\nconst scratchPickCartesian = new Cartesian3();\nconst scratchZoomOffset = new Cartesian2();\nconst scratchZoomDirection = new Cartesian3();\nconst scratchCenterPixel = new Cartesian2();\nconst scratchCenterPosition = new Cartesian3();\nconst scratchPositionNormal = new Cartesian3();\nconst scratchPickNormal = new Cartesian3();\nconst scratchZoomAxis = new Cartesian3();\nconst scratchCameraPositionNormal = new Cartesian3();\n\n// Scratch variables used in zooming algorithm\nconst scratchTargetNormal = new Cartesian3();\nconst scratchCameraPosition = new Cartesian3();\nconst scratchCameraUpNormal = new Cartesian3();\nconst scratchCameraRightNormal = new Cartesian3();\nconst scratchForwardNormal = new Cartesian3();\nconst scratchPositionToTarget = new Cartesian3();\nconst scratchPositionToTargetNormal = new Cartesian3();\nconst scratchPan = new Cartesian3();\nconst scratchCenterMovement = new Cartesian3();\nconst scratchCenter = new Cartesian3();\nconst scratchCartesian = new Cartesian3();\nconst scratchCartesianTwo = new Cartesian3();\nconst scratchCartesianThree = new Cartesian3();\nconst scratchZoomViewOptions = {\n  orientation: new HeadingPitchRoll(),\n};\n\nfunction handleZoom(\n  object,\n  startPosition,\n  movement,\n  zoomFactor,\n  distanceMeasure,\n  unitPositionDotDirection,\n) {\n  let percentage = 1.0;\n  if (defined(unitPositionDotDirection)) {\n    percentage = CesiumMath.clamp(\n      Math.abs(unitPositionDotDirection),\n      0.25,\n      1.0,\n    );\n  }\n\n  const diff = movement.endPosition.y - movement.startPosition.y;\n\n  // distanceMeasure should be the height above the ellipsoid.\n  // When approaching the surface, the zoomRate slows and stops minimumZoomDistance above it.\n  const approachingSurface = diff > 0;\n  const minHeight = approachingSurface\n    ? object.minimumZoomDistance * percentage\n    : 0;\n  const maxHeight = object.maximumZoomDistance;\n\n  const minDistance = distanceMeasure - minHeight;\n  let zoomRate = zoomFactor * minDistance;\n  zoomRate = CesiumMath.clamp(\n    zoomRate,\n    object._minimumZoomRate,\n    object._maximumZoomRate,\n  );\n\n  let rangeWindowRatio = diff / object._scene.canvas.clientHeight;\n  rangeWindowRatio = Math.min(rangeWindowRatio, object.maximumMovementRatio);\n  let distance = zoomRate * rangeWindowRatio;\n\n  if (\n    object.enableCollisionDetection ||\n    object.minimumZoomDistance === 0.0 ||\n    !defined(object._globe) // look-at mode\n  ) {\n    if (distance > 0.0 && Math.abs(distanceMeasure - minHeight) < 1.0) {\n      return;\n    }\n\n    if (distance < 0.0 && Math.abs(distanceMeasure - maxHeight) < 1.0) {\n      return;\n    }\n\n    if (distanceMeasure - distance < minHeight) {\n      distance = distanceMeasure - minHeight - 1.0;\n    } else if (distanceMeasure - distance > maxHeight) {\n      distance = distanceMeasure - maxHeight;\n    }\n  }\n\n  const scene = object._scene;\n  const camera = scene.camera;\n  const mode = scene.mode;\n\n  const orientation = scratchZoomViewOptions.orientation;\n  orientation.heading = camera.heading;\n  orientation.pitch = camera.pitch;\n  orientation.roll = camera.roll;\n\n  const sameStartPosition =\n    movement.inertiaEnabled ??\n    Cartesian2.equals(startPosition, object._zoomMouseStart);\n  let zoomingOnVector = object._zoomingOnVector;\n  let rotatingZoom = object._rotatingZoom;\n  let pickedPosition;\n\n  if (!sameStartPosition) {\n    object._zoomMouseStart = Cartesian2.clone(\n      startPosition,\n      object._zoomMouseStart,\n    );\n\n    // When camera transform is set, such as tracking an entity, object._globe will be undefined, and no position should be picked\n    if (defined(object._globe) && mode === SceneMode.SCENE2D) {\n      pickedPosition = camera.getPickRay(\n        startPosition,\n        scratchZoomPickRay,\n      ).origin;\n      pickedPosition = Cartesian3.fromElements(\n        pickedPosition.y,\n        pickedPosition.z,\n        pickedPosition.x,\n      );\n    } else if (defined(object._globe)) {\n      pickedPosition = pickPosition(\n        object,\n        startPosition,\n        scratchPickCartesian,\n      );\n    }\n\n    if (defined(pickedPosition)) {\n      object._useZoomWorldPosition = true;\n      object._zoomWorldPosition = Cartesian3.clone(\n        pickedPosition,\n        object._zoomWorldPosition,\n      );\n    } else {\n      object._useZoomWorldPosition = false;\n    }\n\n    zoomingOnVector = object._zoomingOnVector = false;\n    rotatingZoom = object._rotatingZoom = false;\n    object._zoomingUnderground = object._cameraUnderground;\n  }\n\n  if (!object._useZoomWorldPosition) {\n    camera.zoomIn(distance);\n    return;\n  }\n\n  let zoomOnVector = mode === SceneMode.COLUMBUS_VIEW;\n\n  if (camera.positionCartographic.height < 2000000) {\n    rotatingZoom = true;\n  }\n\n  if (!sameStartPosition || rotatingZoom) {\n    if (mode === SceneMode.SCENE2D) {\n      const worldPosition = object._zoomWorldPosition;\n      const endPosition = camera.position;\n\n      if (\n        !Cartesian3.equals(worldPosition, endPosition) &&\n        camera.positionCartographic.height < object._maxCoord.x * 2.0\n      ) {\n        const savedX = camera.position.x;\n\n        const direction = Cartesian3.subtract(\n          worldPosition,\n          endPosition,\n          scratchZoomDirection,\n        );\n        Cartesian3.normalize(direction, direction);\n\n        const d =\n          (Cartesian3.distance(worldPosition, endPosition) * distance) /\n          (camera.getMagnitude() * 0.5);\n        camera.move(direction, d * 0.5);\n\n        if (\n          (camera.position.x < 0.0 && savedX > 0.0) ||\n          (camera.position.x > 0.0 && savedX < 0.0)\n        ) {\n          pickedPosition = camera.getPickRay(\n            startPosition,\n            scratchZoomPickRay,\n          ).origin;\n          pickedPosition = Cartesian3.fromElements(\n            pickedPosition.y,\n            pickedPosition.z,\n            pickedPosition.x,\n          );\n          object._zoomWorldPosition = Cartesian3.clone(\n            pickedPosition,\n            object._zoomWorldPosition,\n          );\n        }\n      }\n    } else if (mode === SceneMode.SCENE3D) {\n      const cameraPositionNormal = Cartesian3.normalize(\n        camera.position,\n        scratchCameraPositionNormal,\n      );\n      if (\n        object._cameraUnderground ||\n        object._zoomingUnderground ||\n        (camera.positionCartographic.height < 3000.0 &&\n          Math.abs(Cartesian3.dot(camera.direction, cameraPositionNormal)) <\n            0.6)\n      ) {\n        zoomOnVector = true;\n      } else {\n        const canvas = scene.canvas;\n\n        const centerPixel = scratchCenterPixel;\n        centerPixel.x = canvas.clientWidth / 2;\n        centerPixel.y = canvas.clientHeight / 2;\n        const centerPosition = pickPosition(\n          object,\n          centerPixel,\n          scratchCenterPosition,\n        );\n        // If centerPosition is not defined, it means the globe does not cover the center position of screen\n\n        if (!defined(centerPosition)) {\n          zoomOnVector = true;\n        } else if (camera.positionCartographic.height < 1000000) {\n          // The math in the else block assumes the camera\n          // points toward the earth surface, so we check it here.\n          // Theoretically, we should check for 90 degree, but it doesn't behave well when parallel\n          // to the earth surface\n          if (Cartesian3.dot(camera.direction, cameraPositionNormal) >= -0.5) {\n            zoomOnVector = true;\n          } else {\n            const cameraPosition = scratchCameraPosition;\n            Cartesian3.clone(camera.position, cameraPosition);\n            const target = object._zoomWorldPosition;\n\n            let targetNormal = scratchTargetNormal;\n\n            targetNormal = Cartesian3.normalize(target, targetNormal);\n\n            if (Cartesian3.dot(targetNormal, cameraPositionNormal) < 0.0) {\n              return;\n            }\n\n            const center = scratchCenter;\n            const forward = scratchForwardNormal;\n            Cartesian3.clone(camera.direction, forward);\n            Cartesian3.add(\n              cameraPosition,\n              Cartesian3.multiplyByScalar(forward, 1000, scratchCartesian),\n              center,\n            );\n\n            const positionToTarget = scratchPositionToTarget;\n            const positionToTargetNormal = scratchPositionToTargetNormal;\n            Cartesian3.subtract(target, cameraPosition, positionToTarget);\n\n            Cartesian3.normalize(positionToTarget, positionToTargetNormal);\n\n            const alphaDot = Cartesian3.dot(\n              cameraPositionNormal,\n              positionToTargetNormal,\n            );\n            if (alphaDot >= 0.0) {\n              // We zoomed past the target, and this zoom is not valid anymore.\n              // This line causes the next zoom movement to pick a new starting point.\n              object._zoomMouseStart.x = -1;\n              return;\n            }\n            const alpha = Math.acos(-alphaDot);\n            const cameraDistance = Cartesian3.magnitude(cameraPosition);\n            const targetDistance = Cartesian3.magnitude(target);\n            const remainingDistance = cameraDistance - distance;\n            const positionToTargetDistance =\n              Cartesian3.magnitude(positionToTarget);\n\n            const gamma = Math.asin(\n              CesiumMath.clamp(\n                (positionToTargetDistance / targetDistance) * Math.sin(alpha),\n                -1.0,\n                1.0,\n              ),\n            );\n            const delta = Math.asin(\n              CesiumMath.clamp(\n                (remainingDistance / targetDistance) * Math.sin(alpha),\n                -1.0,\n                1.0,\n              ),\n            );\n            const beta = gamma - delta + alpha;\n\n            const up = scratchCameraUpNormal;\n            Cartesian3.normalize(cameraPosition, up);\n            let right = scratchCameraRightNormal;\n            right = Cartesian3.cross(positionToTargetNormal, up, right);\n            right = Cartesian3.normalize(right, right);\n\n            Cartesian3.normalize(\n              Cartesian3.cross(up, right, scratchCartesian),\n              forward,\n            );\n\n            // Calculate new position to move to\n            Cartesian3.multiplyByScalar(\n              Cartesian3.normalize(center, scratchCartesian),\n              Cartesian3.magnitude(center) - distance,\n              center,\n            );\n            Cartesian3.normalize(cameraPosition, cameraPosition);\n            Cartesian3.multiplyByScalar(\n              cameraPosition,\n              remainingDistance,\n              cameraPosition,\n            );\n\n            // Pan\n            const pMid = scratchPan;\n            Cartesian3.multiplyByScalar(\n              Cartesian3.add(\n                Cartesian3.multiplyByScalar(\n                  up,\n                  Math.cos(beta) - 1,\n                  scratchCartesianTwo,\n                ),\n                Cartesian3.multiplyByScalar(\n                  forward,\n                  Math.sin(beta),\n                  scratchCartesianThree,\n                ),\n                scratchCartesian,\n              ),\n              remainingDistance,\n              pMid,\n            );\n            Cartesian3.add(cameraPosition, pMid, cameraPosition);\n\n            Cartesian3.normalize(center, up);\n            Cartesian3.normalize(\n              Cartesian3.cross(up, right, scratchCartesian),\n              forward,\n            );\n\n            const cMid = scratchCenterMovement;\n            Cartesian3.multiplyByScalar(\n              Cartesian3.add(\n                Cartesian3.multiplyByScalar(\n                  up,\n                  Math.cos(beta) - 1,\n                  scratchCartesianTwo,\n                ),\n                Cartesian3.multiplyByScalar(\n                  forward,\n                  Math.sin(beta),\n                  scratchCartesianThree,\n                ),\n                scratchCartesian,\n              ),\n              Cartesian3.magnitude(center),\n              cMid,\n            );\n            Cartesian3.add(center, cMid, center);\n\n            // Update camera\n\n            // Set new position\n            Cartesian3.clone(cameraPosition, camera.position);\n\n            // Set new direction\n            Cartesian3.normalize(\n              Cartesian3.subtract(center, cameraPosition, scratchCartesian),\n              camera.direction,\n            );\n            Cartesian3.clone(camera.direction, camera.direction);\n\n            // Set new right & up vectors\n            Cartesian3.cross(camera.direction, camera.up, camera.right);\n            Cartesian3.cross(camera.right, camera.direction, camera.up);\n\n            camera.setView(scratchZoomViewOptions);\n            return;\n          }\n        } else {\n          const positionNormal = Cartesian3.normalize(\n            centerPosition,\n            scratchPositionNormal,\n          );\n          const pickedNormal = Cartesian3.normalize(\n            object._zoomWorldPosition,\n            scratchPickNormal,\n          );\n          const dotProduct = Cartesian3.dot(pickedNormal, positionNormal);\n\n          if (dotProduct > 0.0 && dotProduct < 1.0) {\n            const angle = CesiumMath.acosClamped(dotProduct);\n            const axis = Cartesian3.cross(\n              pickedNormal,\n              positionNormal,\n              scratchZoomAxis,\n            );\n\n            const denom =\n              Math.abs(angle) > CesiumMath.toRadians(20.0)\n                ? camera.positionCartographic.height * 0.75\n                : camera.positionCartographic.height - distance;\n            const scalar = distance / denom;\n            camera.rotate(axis, angle * scalar);\n          }\n        }\n      }\n    }\n\n    object._rotatingZoom = !zoomOnVector;\n  }\n\n  if ((!sameStartPosition && zoomOnVector) || zoomingOnVector) {\n    let ray;\n    const zoomMouseStart = SceneTransforms.worldToWindowCoordinates(\n      scene,\n      object._zoomWorldPosition,\n      scratchZoomOffset,\n    );\n    if (\n      mode !== SceneMode.COLUMBUS_VIEW &&\n      Cartesian2.equals(startPosition, object._zoomMouseStart) &&\n      defined(zoomMouseStart)\n    ) {\n      ray = camera.getPickRay(zoomMouseStart, scratchZoomPickRay);\n    } else {\n      ray = camera.getPickRay(startPosition, scratchZoomPickRay);\n    }\n\n    const rayDirection = ray.direction;\n    if (mode === SceneMode.COLUMBUS_VIEW || mode === SceneMode.SCENE2D) {\n      Cartesian3.fromElements(\n        rayDirection.y,\n        rayDirection.z,\n        rayDirection.x,\n        rayDirection,\n      );\n    }\n\n    camera.move(rayDirection, distance);\n\n    object._zoomingOnVector = true;\n  } else {\n    camera.zoomIn(distance);\n  }\n\n  if (!object._cameraUnderground) {\n    camera.setView(scratchZoomViewOptions);\n  }\n}\n\nconst translate2DStart = new Ray();\nconst translate2DEnd = new Ray();\nconst scratchTranslateP0 = new Cartesian3();\n\nfunction translate2D(controller, startPosition, movement) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n  let start = camera.getPickRay(\n    movement.startPosition,\n    translate2DStart,\n  ).origin;\n  let end = camera.getPickRay(movement.endPosition, translate2DEnd).origin;\n\n  start = Cartesian3.fromElements(start.y, start.z, start.x, start);\n  end = Cartesian3.fromElements(end.y, end.z, end.x, end);\n\n  const direction = Cartesian3.subtract(start, end, scratchTranslateP0);\n  const distance = Cartesian3.magnitude(direction);\n\n  if (distance > 0.0) {\n    Cartesian3.normalize(direction, direction);\n    camera.move(direction, distance);\n  }\n}\n\nfunction zoom2D(controller, startPosition, movement) {\n  if (defined(movement.distance)) {\n    movement = movement.distance;\n  }\n\n  const scene = controller._scene;\n  const camera = scene.camera;\n\n  handleZoom(\n    controller,\n    startPosition,\n    movement,\n    controller.zoomFactor,\n    camera.getMagnitude(),\n  );\n}\n\nconst twist2DStart = new Cartesian2();\nconst twist2DEnd = new Cartesian2();\n\nfunction twist2D(controller, startPosition, movement) {\n  if (defined(movement.angleAndHeight)) {\n    singleAxisTwist2D(controller, startPosition, movement.angleAndHeight);\n    return;\n  }\n\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const canvas = scene.canvas;\n  const width = canvas.clientWidth;\n  const height = canvas.clientHeight;\n\n  let start = twist2DStart;\n  start.x = (2.0 / width) * movement.startPosition.x - 1.0;\n  start.y = (2.0 / height) * (height - movement.startPosition.y) - 1.0;\n  start = Cartesian2.normalize(start, start);\n\n  let end = twist2DEnd;\n  end.x = (2.0 / width) * movement.endPosition.x - 1.0;\n  end.y = (2.0 / height) * (height - movement.endPosition.y) - 1.0;\n  end = Cartesian2.normalize(end, end);\n\n  let startTheta = CesiumMath.acosClamped(start.x);\n  if (start.y < 0) {\n    startTheta = CesiumMath.TWO_PI - startTheta;\n  }\n  let endTheta = CesiumMath.acosClamped(end.x);\n  if (end.y < 0) {\n    endTheta = CesiumMath.TWO_PI - endTheta;\n  }\n  const theta = endTheta - startTheta;\n\n  camera.twistRight(theta);\n}\n\nfunction singleAxisTwist2D(controller, startPosition, movement) {\n  let rotateRate =\n    controller._rotateFactor * controller._rotateRateRangeAdjustment;\n\n  if (rotateRate > controller._maximumRotateRate) {\n    rotateRate = controller._maximumRotateRate;\n  }\n\n  if (rotateRate < controller._minimumRotateRate) {\n    rotateRate = controller._minimumRotateRate;\n  }\n\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const canvas = scene.canvas;\n\n  let phiWindowRatio =\n    (movement.endPosition.x - movement.startPosition.x) / canvas.clientWidth;\n  phiWindowRatio = Math.min(phiWindowRatio, controller.maximumMovementRatio);\n\n  const deltaPhi = rotateRate * phiWindowRatio * Math.PI * 4.0;\n\n  camera.twistRight(deltaPhi);\n}\n\nfunction update2D(controller) {\n  const rotatable2D = controller._scene.mapMode2D === MapMode2D.ROTATE;\n  if (!Matrix4.equals(Matrix4.IDENTITY, controller._scene.camera.transform)) {\n    reactToInput(\n      controller,\n      controller.enableZoom,\n      controller.zoomEventTypes,\n      zoom2D,\n      controller.inertiaZoom,\n      \"_lastInertiaZoomMovement\",\n    );\n    if (rotatable2D) {\n      reactToInput(\n        controller,\n        controller.enableRotate,\n        controller.translateEventTypes,\n        twist2D,\n        controller.inertiaSpin,\n        \"_lastInertiaSpinMovement\",\n      );\n    }\n  } else {\n    reactToInput(\n      controller,\n      controller.enableTranslate,\n      controller.translateEventTypes,\n      translate2D,\n      controller.inertiaTranslate,\n      \"_lastInertiaTranslateMovement\",\n    );\n    reactToInput(\n      controller,\n      controller.enableZoom,\n      controller.zoomEventTypes,\n      zoom2D,\n      controller.inertiaZoom,\n      \"_lastInertiaZoomMovement\",\n    );\n    if (rotatable2D) {\n      reactToInput(\n        controller,\n        controller.enableRotate,\n        controller.tiltEventTypes,\n        twist2D,\n        controller.inertiaSpin,\n        \"_lastInertiaTiltMovement\",\n      );\n    }\n  }\n}\n\nconst pickGlobeScratchRay = new Ray();\nconst scratchDepthIntersection = new Cartesian3();\nconst scratchRayIntersection = new Cartesian3();\n\nfunction pickPosition(controller, mousePosition, result) {\n  const scene = controller._scene;\n  const globe = controller._globe;\n  const camera = scene.camera;\n\n  let depthIntersection;\n  if (scene.pickPositionSupported) {\n    depthIntersection = scene.pickPositionWorldCoordinates(\n      mousePosition,\n      scratchDepthIntersection,\n    );\n  }\n\n  if (!defined(globe)) {\n    return Cartesian3.clone(depthIntersection, result);\n  }\n\n  const cullBackFaces = !controller._cameraUnderground;\n  const ray = camera.getPickRay(mousePosition, pickGlobeScratchRay);\n  const rayIntersection = globe.pickWorldCoordinates(\n    ray,\n    scene,\n    cullBackFaces,\n    scratchRayIntersection,\n  );\n\n  const pickDistance = defined(depthIntersection)\n    ? Cartesian3.distance(depthIntersection, camera.positionWC)\n    : Number.POSITIVE_INFINITY;\n  const rayDistance = defined(rayIntersection)\n    ? Cartesian3.distance(rayIntersection, camera.positionWC)\n    : Number.POSITIVE_INFINITY;\n\n  if (pickDistance < rayDistance) {\n    return Cartesian3.clone(depthIntersection, result);\n  }\n\n  return Cartesian3.clone(rayIntersection, result);\n}\n\nconst scratchDistanceCartographic = new Cartographic();\n\nfunction getDistanceFromSurface(controller) {\n  const ellipsoid = controller._ellipsoid;\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const mode = scene.mode;\n\n  let height = 0.0;\n  if (mode === SceneMode.SCENE3D) {\n    const cartographic = ellipsoid.cartesianToCartographic(\n      camera.position,\n      scratchDistanceCartographic,\n    );\n    if (defined(cartographic)) {\n      height = cartographic.height;\n    }\n  } else {\n    height = camera.position.z;\n  }\n  const globeHeight = controller._scene.globeHeight ?? 0.0;\n  const distanceFromSurface = Math.abs(globeHeight - height);\n  return distanceFromSurface;\n}\n\nconst scratchSurfaceNormal = new Cartesian3();\n\nfunction getZoomDistanceUnderground(controller, ray) {\n  const origin = ray.origin;\n  const direction = ray.direction;\n  const distanceFromSurface = getDistanceFromSurface(controller);\n\n  // Weight zoom distance based on how strongly the pick ray is pointing inward.\n  // Geocentric normal is accurate enough for these purposes\n  const surfaceNormal = Cartesian3.normalize(origin, scratchSurfaceNormal);\n  let strength = Math.abs(Cartesian3.dot(surfaceNormal, direction));\n  strength = Math.max(strength, 0.5) * 2.0;\n  return distanceFromSurface * strength;\n}\n\nfunction getTiltCenterUnderground(controller, ray, pickedPosition, result) {\n  let distance = Cartesian3.distance(ray.origin, pickedPosition);\n  const distanceFromSurface = getDistanceFromSurface(controller);\n\n  const maximumDistance = CesiumMath.clamp(\n    distanceFromSurface * 5.0,\n    controller._minimumUndergroundPickDistance,\n    controller._maximumUndergroundPickDistance,\n  );\n\n  if (distance > maximumDistance) {\n    // Simulate look-at behavior by tilting around a small invisible sphere\n    distance = Math.min(distance, distanceFromSurface / 5.0);\n    distance = Math.max(distance, 100.0);\n  }\n\n  return Ray.getPoint(ray, distance, result);\n}\n\nfunction getStrafeStartPositionUnderground(\n  controller,\n  ray,\n  pickedPosition,\n  result,\n) {\n  let distance;\n  if (!defined(pickedPosition)) {\n    distance = getDistanceFromSurface(controller);\n  } else {\n    distance = Cartesian3.distance(ray.origin, pickedPosition);\n    if (distance > controller._maximumUndergroundPickDistance) {\n      // If the picked position is too far away set the strafe speed based on the\n      // camera's height from the globe surface\n      distance = getDistanceFromSurface(controller);\n    }\n  }\n\n  return Ray.getPoint(ray, distance, result);\n}\n\nconst scratchInertialDelta = new Cartesian2();\n\nfunction continueStrafing(controller, movement) {\n  // Update the end position continually based on the inertial delta\n  const originalEndPosition = movement.endPosition;\n  const inertialDelta = Cartesian2.subtract(\n    movement.endPosition,\n    movement.startPosition,\n    scratchInertialDelta,\n  );\n  const endPosition = controller._strafeEndMousePosition;\n  Cartesian2.add(endPosition, inertialDelta, endPosition);\n  movement.endPosition = endPosition;\n  strafe(controller, movement, controller._strafeStartPosition);\n  movement.endPosition = originalEndPosition;\n}\n\nconst translateCVStartRay = new Ray();\nconst translateCVEndRay = new Ray();\nconst translateCVStartPos = new Cartesian3();\nconst translateCVEndPos = new Cartesian3();\nconst translateCVDifference = new Cartesian3();\nconst translateCVOrigin = new Cartesian3();\nconst translateCVPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nconst translateCVStartMouse = new Cartesian2();\nconst translateCVEndMouse = new Cartesian2();\n\nfunction translateCV(controller, startPosition, movement) {\n  if (!Cartesian3.equals(startPosition, controller._translateMousePosition)) {\n    controller._looking = false;\n  }\n\n  if (!Cartesian3.equals(startPosition, controller._strafeMousePosition)) {\n    controller._strafing = false;\n  }\n\n  if (controller._looking) {\n    look3D(controller, startPosition, movement);\n    return;\n  }\n\n  if (controller._strafing) {\n    continueStrafing(controller, movement);\n    return;\n  }\n\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const cameraUnderground = controller._cameraUnderground;\n  const startMouse = Cartesian2.clone(\n    movement.startPosition,\n    translateCVStartMouse,\n  );\n  const endMouse = Cartesian2.clone(movement.endPosition, translateCVEndMouse);\n  let startRay = camera.getPickRay(startMouse, translateCVStartRay);\n\n  const origin = Cartesian3.clone(Cartesian3.ZERO, translateCVOrigin);\n  const normal = Cartesian3.UNIT_X;\n\n  let globePos;\n  if (camera.position.z < controller._minimumPickingTerrainHeight) {\n    globePos = pickPosition(controller, startMouse, translateCVStartPos);\n\n    if (defined(globePos)) {\n      origin.x = globePos.x;\n    }\n  }\n\n  if (\n    cameraUnderground ||\n    (origin.x > camera.position.z && defined(globePos))\n  ) {\n    let pickPosition = globePos;\n    if (cameraUnderground) {\n      pickPosition = getStrafeStartPositionUnderground(\n        controller,\n        startRay,\n        globePos,\n        translateCVStartPos,\n      );\n    }\n    Cartesian2.clone(startPosition, controller._strafeMousePosition);\n    Cartesian2.clone(startPosition, controller._strafeEndMousePosition);\n    Cartesian3.clone(pickPosition, controller._strafeStartPosition);\n    controller._strafing = true;\n    strafe(controller, movement, controller._strafeStartPosition);\n    return;\n  }\n\n  const plane = Plane.fromPointNormal(origin, normal, translateCVPlane);\n\n  startRay = camera.getPickRay(startMouse, translateCVStartRay);\n  const startPlanePos = IntersectionTests.rayPlane(\n    startRay,\n    plane,\n    translateCVStartPos,\n  );\n\n  const endRay = camera.getPickRay(endMouse, translateCVEndRay);\n  const endPlanePos = IntersectionTests.rayPlane(\n    endRay,\n    plane,\n    translateCVEndPos,\n  );\n\n  if (!defined(startPlanePos) || !defined(endPlanePos)) {\n    controller._looking = true;\n    look3D(controller, startPosition, movement);\n    Cartesian2.clone(startPosition, controller._translateMousePosition);\n    return;\n  }\n\n  const diff = Cartesian3.subtract(\n    startPlanePos,\n    endPlanePos,\n    translateCVDifference,\n  );\n  const temp = diff.x;\n  diff.x = diff.y;\n  diff.y = diff.z;\n  diff.z = temp;\n  const mag = Cartesian3.magnitude(diff);\n  if (mag > CesiumMath.EPSILON6) {\n    Cartesian3.normalize(diff, diff);\n    camera.move(diff, mag);\n  }\n}\n\nconst rotateCVWindowPos = new Cartesian2();\nconst rotateCVWindowRay = new Ray();\nconst rotateCVCenter = new Cartesian3();\nconst rotateCVVerticalCenter = new Cartesian3();\nconst rotateCVTransform = new Matrix4();\nconst rotateCVVerticalTransform = new Matrix4();\nconst rotateCVOrigin = new Cartesian3();\nconst rotateCVPlane = new Plane(Cartesian3.UNIT_X, 0.0);\nconst rotateCVCartesian3 = new Cartesian3();\nconst rotateCVCart = new Cartographic();\nconst rotateCVOldTransform = new Matrix4();\nconst rotateCVQuaternion = new Quaternion();\nconst rotateCVMatrix = new Matrix3();\nconst tilt3DCartesian3 = new Cartesian3();\n\nfunction rotateCV(controller, startPosition, movement) {\n  if (defined(movement.angleAndHeight)) {\n    movement = movement.angleAndHeight;\n  }\n\n  if (!Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n    controller._tiltCVOffMap = false;\n    controller._looking = false;\n  }\n\n  if (controller._looking) {\n    look3D(controller, startPosition, movement);\n    return;\n  }\n\n  const scene = controller._scene;\n  const camera = scene.camera;\n\n  if (\n    controller._tiltCVOffMap ||\n    !controller.onMap() ||\n    Math.abs(camera.position.z) > controller._minimumPickingTerrainHeight\n  ) {\n    controller._tiltCVOffMap = true;\n    rotateCVOnPlane(controller, startPosition, movement);\n  } else {\n    rotateCVOnTerrain(controller, startPosition, movement);\n  }\n}\n\nfunction rotateCVOnPlane(controller, startPosition, movement) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const canvas = scene.canvas;\n\n  const windowPosition = rotateCVWindowPos;\n  windowPosition.x = canvas.clientWidth / 2;\n  windowPosition.y = canvas.clientHeight / 2;\n  const ray = camera.getPickRay(windowPosition, rotateCVWindowRay);\n  const normal = Cartesian3.UNIT_X;\n\n  const position = ray.origin;\n  const direction = ray.direction;\n  let scalar;\n  const normalDotDirection = Cartesian3.dot(normal, direction);\n  if (Math.abs(normalDotDirection) > CesiumMath.EPSILON6) {\n    scalar = -Cartesian3.dot(normal, position) / normalDotDirection;\n  }\n\n  if (!defined(scalar) || scalar <= 0.0) {\n    controller._looking = true;\n    look3D(controller, startPosition, movement);\n    Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n    return;\n  }\n\n  const center = Cartesian3.multiplyByScalar(direction, scalar, rotateCVCenter);\n  Cartesian3.add(position, center, center);\n\n  const projection = scene.mapProjection;\n  const ellipsoid = projection.ellipsoid;\n\n  Cartesian3.fromElements(center.y, center.z, center.x, center);\n  const cart = projection.unproject(center, rotateCVCart);\n  ellipsoid.cartographicToCartesian(cart, center);\n\n  const transform = Transforms.eastNorthUpToFixedFrame(\n    center,\n    ellipsoid,\n    rotateCVTransform,\n  );\n\n  const oldGlobe = controller._globe;\n  const oldEllipsoid = controller._ellipsoid;\n  controller._globe = undefined;\n  controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n  controller._rotateFactor = 1.0;\n  controller._rotateRateRangeAdjustment = 1.0;\n\n  const oldTransform = Matrix4.clone(camera.transform, rotateCVOldTransform);\n  camera._setTransform(transform);\n\n  rotate3D(controller, startPosition, movement, Cartesian3.UNIT_Z);\n\n  camera._setTransform(oldTransform);\n  controller._globe = oldGlobe;\n  controller._ellipsoid = oldEllipsoid;\n\n  const radius = oldEllipsoid.maximumRadius;\n  controller._rotateFactor = 1.0 / radius;\n  controller._rotateRateRangeAdjustment = radius;\n}\n\nfunction rotateCVOnTerrain(controller, startPosition, movement) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const cameraUnderground = controller._cameraUnderground;\n\n  let center;\n  let ray;\n  const normal = Cartesian3.UNIT_X;\n\n  if (Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n    center = Cartesian3.clone(controller._tiltCenter, rotateCVCenter);\n  } else {\n    if (camera.position.z < controller._minimumPickingTerrainHeight) {\n      center = pickPosition(controller, startPosition, rotateCVCenter);\n    }\n\n    if (!defined(center)) {\n      ray = camera.getPickRay(startPosition, rotateCVWindowRay);\n      const position = ray.origin;\n      const direction = ray.direction;\n\n      let scalar;\n      const normalDotDirection = Cartesian3.dot(normal, direction);\n      if (Math.abs(normalDotDirection) > CesiumMath.EPSILON6) {\n        scalar = -Cartesian3.dot(normal, position) / normalDotDirection;\n      }\n\n      if (!defined(scalar) || scalar <= 0.0) {\n        controller._looking = true;\n        look3D(controller, startPosition, movement);\n        Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n        return;\n      }\n\n      center = Cartesian3.multiplyByScalar(direction, scalar, rotateCVCenter);\n      Cartesian3.add(position, center, center);\n    }\n\n    if (cameraUnderground) {\n      if (!defined(ray)) {\n        ray = camera.getPickRay(startPosition, rotateCVWindowRay);\n      }\n      getTiltCenterUnderground(controller, ray, center, center);\n    }\n\n    Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n    Cartesian3.clone(center, controller._tiltCenter);\n  }\n\n  const canvas = scene.canvas;\n\n  const windowPosition = rotateCVWindowPos;\n  windowPosition.x = canvas.clientWidth / 2;\n  windowPosition.y = controller._tiltCenterMousePosition.y;\n  ray = camera.getPickRay(windowPosition, rotateCVWindowRay);\n\n  const origin = Cartesian3.clone(Cartesian3.ZERO, rotateCVOrigin);\n  origin.x = center.x;\n\n  const plane = Plane.fromPointNormal(origin, normal, rotateCVPlane);\n  const verticalCenter = IntersectionTests.rayPlane(\n    ray,\n    plane,\n    rotateCVVerticalCenter,\n  );\n\n  const projection = camera._projection;\n  const ellipsoid = projection.ellipsoid;\n\n  Cartesian3.fromElements(center.y, center.z, center.x, center);\n  let cart = projection.unproject(center, rotateCVCart);\n  ellipsoid.cartographicToCartesian(cart, center);\n\n  const transform = Transforms.eastNorthUpToFixedFrame(\n    center,\n    ellipsoid,\n    rotateCVTransform,\n  );\n\n  let verticalTransform;\n  if (defined(verticalCenter)) {\n    Cartesian3.fromElements(\n      verticalCenter.y,\n      verticalCenter.z,\n      verticalCenter.x,\n      verticalCenter,\n    );\n    cart = projection.unproject(verticalCenter, rotateCVCart);\n    ellipsoid.cartographicToCartesian(cart, verticalCenter);\n\n    verticalTransform = Transforms.eastNorthUpToFixedFrame(\n      verticalCenter,\n      ellipsoid,\n      rotateCVVerticalTransform,\n    );\n  } else {\n    verticalTransform = transform;\n  }\n\n  const oldGlobe = controller._globe;\n  const oldEllipsoid = controller._ellipsoid;\n  controller._globe = undefined;\n  controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n  controller._rotateFactor = 1.0;\n  controller._rotateRateRangeAdjustment = 1.0;\n\n  let constrainedAxis = Cartesian3.UNIT_Z;\n\n  const oldTransform = Matrix4.clone(camera.transform, rotateCVOldTransform);\n  camera._setTransform(transform);\n\n  const tangent = Cartesian3.cross(\n    Cartesian3.UNIT_Z,\n    Cartesian3.normalize(camera.position, rotateCVCartesian3),\n    rotateCVCartesian3,\n  );\n  const dot = Cartesian3.dot(camera.right, tangent);\n\n  rotate3D(controller, startPosition, movement, constrainedAxis, false, true);\n\n  camera._setTransform(verticalTransform);\n  if (dot < 0.0) {\n    const movementDelta = movement.startPosition.y - movement.endPosition.y;\n    if (\n      (cameraUnderground && movementDelta < 0.0) ||\n      (!cameraUnderground && movementDelta > 0.0)\n    ) {\n      // Prevent camera from flipping past the up axis\n      constrainedAxis = undefined;\n    }\n\n    const oldConstrainedAxis = camera.constrainedAxis;\n    camera.constrainedAxis = undefined;\n\n    rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n\n    camera.constrainedAxis = oldConstrainedAxis;\n  } else {\n    rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n  }\n\n  if (defined(camera.constrainedAxis)) {\n    const right = Cartesian3.cross(\n      camera.direction,\n      camera.constrainedAxis,\n      tilt3DCartesian3,\n    );\n    if (\n      !Cartesian3.equalsEpsilon(right, Cartesian3.ZERO, CesiumMath.EPSILON6)\n    ) {\n      if (Cartesian3.dot(right, camera.right) < 0.0) {\n        Cartesian3.negate(right, right);\n      }\n\n      Cartesian3.cross(right, camera.direction, camera.up);\n      Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n      Cartesian3.normalize(camera.up, camera.up);\n      Cartesian3.normalize(camera.right, camera.right);\n    }\n  }\n\n  camera._setTransform(oldTransform);\n  controller._globe = oldGlobe;\n  controller._ellipsoid = oldEllipsoid;\n\n  const radius = oldEllipsoid.maximumRadius;\n  controller._rotateFactor = 1.0 / radius;\n  controller._rotateRateRangeAdjustment = radius;\n\n  const originalPosition = Cartesian3.clone(\n    camera.positionWC,\n    rotateCVCartesian3,\n  );\n\n  if (controller.enableCollisionDetection) {\n    adjustHeightForTerrain(controller, true);\n  }\n\n  if (!Cartesian3.equals(camera.positionWC, originalPosition)) {\n    camera._setTransform(verticalTransform);\n    camera.worldToCameraCoordinatesPoint(originalPosition, originalPosition);\n\n    const magSqrd = Cartesian3.magnitudeSquared(originalPosition);\n    if (Cartesian3.magnitudeSquared(camera.position) > magSqrd) {\n      Cartesian3.normalize(camera.position, camera.position);\n      Cartesian3.multiplyByScalar(\n        camera.position,\n        Math.sqrt(magSqrd),\n        camera.position,\n      );\n    }\n\n    const angle = Cartesian3.angleBetween(originalPosition, camera.position);\n    const axis = Cartesian3.cross(\n      originalPosition,\n      camera.position,\n      originalPosition,\n    );\n    Cartesian3.normalize(axis, axis);\n\n    const quaternion = Quaternion.fromAxisAngle(\n      axis,\n      angle,\n      rotateCVQuaternion,\n    );\n    const rotation = Matrix3.fromQuaternion(quaternion, rotateCVMatrix);\n    Matrix3.multiplyByVector(rotation, camera.direction, camera.direction);\n    Matrix3.multiplyByVector(rotation, camera.up, camera.up);\n    Cartesian3.cross(camera.direction, camera.up, camera.right);\n    Cartesian3.cross(camera.right, camera.direction, camera.up);\n\n    camera._setTransform(oldTransform);\n  }\n}\n\nconst zoomCVWindowPos = new Cartesian2();\nconst zoomCVWindowRay = new Ray();\nconst zoomCVIntersection = new Cartesian3();\n\nfunction zoomCV(controller, startPosition, movement) {\n  if (defined(movement.distance)) {\n    movement = movement.distance;\n  }\n\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const canvas = scene.canvas;\n\n  const cameraUnderground = controller._cameraUnderground;\n\n  let windowPosition;\n\n  if (cameraUnderground) {\n    windowPosition = startPosition;\n  } else {\n    windowPosition = zoomCVWindowPos;\n    windowPosition.x = canvas.clientWidth / 2;\n    windowPosition.y = canvas.clientHeight / 2;\n  }\n\n  const ray = camera.getPickRay(windowPosition, zoomCVWindowRay);\n  const position = ray.origin;\n  const direction = ray.direction;\n  const height = camera.position.z;\n\n  let intersection;\n  if (height < controller._minimumPickingTerrainHeight) {\n    intersection = pickPosition(controller, windowPosition, zoomCVIntersection);\n  }\n\n  let distance;\n  if (defined(intersection)) {\n    distance = Cartesian3.distance(position, intersection);\n  }\n\n  if (cameraUnderground) {\n    const distanceUnderground = getZoomDistanceUnderground(\n      controller,\n      ray,\n      height,\n    );\n    if (defined(distance)) {\n      distance = Math.min(distance, distanceUnderground);\n    } else {\n      distance = distanceUnderground;\n    }\n  }\n\n  if (!defined(distance)) {\n    const normal = Cartesian3.UNIT_X;\n    distance =\n      -Cartesian3.dot(normal, position) / Cartesian3.dot(normal, direction);\n  }\n\n  handleZoom(\n    controller,\n    startPosition,\n    movement,\n    controller.zoomFactor,\n    distance,\n  );\n}\n\nfunction updateCV(controller) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n\n  if (!Matrix4.equals(Matrix4.IDENTITY, camera.transform)) {\n    reactToInput(\n      controller,\n      controller.enableRotate,\n      controller.rotateEventTypes,\n      rotate3D,\n      controller.inertiaSpin,\n      \"_lastInertiaSpinMovement\",\n    );\n    reactToInput(\n      controller,\n      controller.enableZoom,\n      controller.zoomEventTypes,\n      zoom3D,\n      controller.inertiaZoom,\n      \"_lastInertiaZoomMovement\",\n    );\n  } else {\n    const tweens = controller._tweens;\n\n    if (controller._aggregator.anyButtonDown) {\n      tweens.removeAll();\n    }\n\n    reactToInput(\n      controller,\n      controller.enableTilt,\n      controller.tiltEventTypes,\n      rotateCV,\n      controller.inertiaSpin,\n      \"_lastInertiaTiltMovement\",\n    );\n    reactToInput(\n      controller,\n      controller.enableTranslate,\n      controller.translateEventTypes,\n      translateCV,\n      controller.inertiaTranslate,\n      \"_lastInertiaTranslateMovement\",\n    );\n    reactToInput(\n      controller,\n      controller.enableZoom,\n      controller.zoomEventTypes,\n      zoomCV,\n      controller.inertiaZoom,\n      \"_lastInertiaZoomMovement\",\n    );\n    reactToInput(\n      controller,\n      controller.enableLook,\n      controller.lookEventTypes,\n      look3D,\n    );\n\n    if (\n      !controller._aggregator.anyButtonDown &&\n      !tweens.contains(controller._tween)\n    ) {\n      const tween = camera.createCorrectPositionTween(\n        controller.bounceAnimationTime,\n      );\n      if (defined(tween)) {\n        controller._tween = tweens.add(tween);\n      }\n    }\n\n    tweens.update();\n  }\n}\n\nconst scratchStrafeRay = new Ray();\nconst scratchStrafePlane = new Plane(Cartesian3.UNIT_X, 0.0);\nconst scratchStrafeIntersection = new Cartesian3();\nconst scratchStrafeDirection = new Cartesian3();\n\nfunction strafe(controller, movement, strafeStartPosition) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n\n  const ray = camera.getPickRay(movement.endPosition, scratchStrafeRay);\n\n  let direction = Cartesian3.clone(camera.direction, scratchStrafeDirection);\n  if (scene.mode === SceneMode.COLUMBUS_VIEW) {\n    Cartesian3.fromElements(direction.z, direction.x, direction.y, direction);\n  }\n\n  const plane = Plane.fromPointNormal(\n    strafeStartPosition,\n    direction,\n    scratchStrafePlane,\n  );\n  const intersection = IntersectionTests.rayPlane(\n    ray,\n    plane,\n    scratchStrafeIntersection,\n  );\n  if (!defined(intersection)) {\n    return;\n  }\n\n  direction = Cartesian3.subtract(strafeStartPosition, intersection, direction);\n  if (scene.mode === SceneMode.COLUMBUS_VIEW) {\n    Cartesian3.fromElements(direction.y, direction.z, direction.x, direction);\n  }\n\n  Cartesian3.add(camera.position, direction, camera.position);\n}\n\nconst spin3DPick = new Cartesian3();\nconst scratchCartographic = new Cartographic();\nconst scratchRadii = new Cartesian3();\nconst scratchEllipsoid = new Ellipsoid();\nconst scratchLookUp = new Cartesian3();\nconst scratchNormal = new Cartesian3();\nconst scratchMousePosition = new Cartesian3();\n\nfunction spin3D(controller, startPosition, movement) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const cameraUnderground = controller._cameraUnderground;\n  let ellipsoid = controller._ellipsoid;\n\n  if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n    rotate3D(controller, startPosition, movement);\n    return;\n  }\n\n  let magnitude;\n  let radii;\n\n  const up = ellipsoid.geodeticSurfaceNormal(camera.position, scratchLookUp);\n\n  if (Cartesian2.equals(startPosition, controller._rotateMousePosition)) {\n    if (controller._looking) {\n      look3D(controller, startPosition, movement, up);\n    } else if (controller._rotating) {\n      rotate3D(controller, startPosition, movement);\n    } else if (controller._strafing) {\n      continueStrafing(controller, movement);\n    } else {\n      if (\n        Cartesian3.magnitude(camera.position) <\n        Cartesian3.magnitude(controller._rotateStartPosition)\n      ) {\n        // Pan action is no longer valid if camera moves below the pan ellipsoid\n        return;\n      }\n      magnitude = Cartesian3.magnitude(controller._rotateStartPosition);\n      radii = scratchRadii;\n      radii.x = radii.y = radii.z = magnitude;\n      ellipsoid = Ellipsoid.fromCartesian3(radii, scratchEllipsoid);\n      pan3D(controller, startPosition, movement, ellipsoid);\n    }\n    return;\n  }\n  controller._looking = false;\n  controller._rotating = false;\n  controller._strafing = false;\n\n  const height = ellipsoid.cartesianToCartographic(\n    camera.positionWC,\n    scratchCartographic,\n  ).height;\n  const globe = controller._globe;\n\n  if (defined(globe) && height < controller._minimumPickingTerrainHeight) {\n    const mousePos = pickPosition(\n      controller,\n      movement.startPosition,\n      scratchMousePosition,\n    );\n    if (defined(mousePos)) {\n      let strafing = false;\n      const ray = camera.getPickRay(\n        movement.startPosition,\n        pickGlobeScratchRay,\n      );\n\n      if (cameraUnderground) {\n        strafing = true;\n        getStrafeStartPositionUnderground(controller, ray, mousePos, mousePos);\n      } else {\n        const normal = ellipsoid.geodeticSurfaceNormal(mousePos, scratchNormal);\n        const tangentPick =\n          Math.abs(Cartesian3.dot(ray.direction, normal)) < 0.05;\n\n        if (tangentPick) {\n          strafing = true;\n        } else {\n          strafing =\n            Cartesian3.magnitude(camera.position) <\n            Cartesian3.magnitude(mousePos);\n        }\n      }\n\n      if (strafing) {\n        Cartesian2.clone(startPosition, controller._strafeEndMousePosition);\n        Cartesian3.clone(mousePos, controller._strafeStartPosition);\n        controller._strafing = true;\n        strafe(controller, movement, controller._strafeStartPosition);\n      } else {\n        magnitude = Cartesian3.magnitude(mousePos);\n        radii = scratchRadii;\n        radii.x = radii.y = radii.z = magnitude;\n        ellipsoid = Ellipsoid.fromCartesian3(radii, scratchEllipsoid);\n        pan3D(controller, startPosition, movement, ellipsoid);\n\n        Cartesian3.clone(mousePos, controller._rotateStartPosition);\n      }\n    } else {\n      controller._looking = true;\n      look3D(controller, startPosition, movement, up);\n    }\n  } else if (\n    defined(\n      camera.pickEllipsoid(\n        movement.startPosition,\n        controller._ellipsoid,\n        spin3DPick,\n      ),\n    )\n  ) {\n    pan3D(controller, startPosition, movement, controller._ellipsoid);\n    Cartesian3.clone(spin3DPick, controller._rotateStartPosition);\n  } else if (height > controller._minimumTrackBallHeight) {\n    controller._rotating = true;\n    rotate3D(controller, startPosition, movement);\n  } else {\n    controller._looking = true;\n    look3D(controller, startPosition, movement, up);\n  }\n\n  Cartesian2.clone(startPosition, controller._rotateMousePosition);\n}\n\nfunction rotate3D(\n  controller,\n  startPosition,\n  movement,\n  constrainedAxis,\n  rotateOnlyVertical,\n  rotateOnlyHorizontal,\n) {\n  rotateOnlyVertical = rotateOnlyVertical ?? false;\n  rotateOnlyHorizontal = rotateOnlyHorizontal ?? false;\n\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const canvas = scene.canvas;\n\n  const oldAxis = camera.constrainedAxis;\n  if (defined(constrainedAxis)) {\n    camera.constrainedAxis = constrainedAxis;\n  }\n\n  const rho = Cartesian3.magnitude(camera.position);\n  let rotateRate =\n    controller._rotateFactor * (rho - controller._rotateRateRangeAdjustment);\n\n  if (rotateRate > controller._maximumRotateRate) {\n    rotateRate = controller._maximumRotateRate;\n  }\n\n  if (rotateRate < controller._minimumRotateRate) {\n    rotateRate = controller._minimumRotateRate;\n  }\n\n  let phiWindowRatio =\n    (movement.startPosition.x - movement.endPosition.x) / canvas.clientWidth;\n  let thetaWindowRatio =\n    (movement.startPosition.y - movement.endPosition.y) / canvas.clientHeight;\n  phiWindowRatio = Math.min(phiWindowRatio, controller.maximumMovementRatio);\n  thetaWindowRatio = Math.min(\n    thetaWindowRatio,\n    controller.maximumMovementRatio,\n  );\n\n  const deltaPhi = rotateRate * phiWindowRatio * Math.PI * 2.0;\n  let deltaTheta = rotateRate * thetaWindowRatio * Math.PI;\n\n  if (defined(constrainedAxis) && defined(controller.maximumTiltAngle)) {\n    const maximumTiltAngle = controller.maximumTiltAngle;\n    const dotProduct = Cartesian3.dot(camera.direction, constrainedAxis);\n    const tilt = Math.PI - Math.acos(dotProduct) + deltaTheta;\n    if (tilt > maximumTiltAngle) {\n      deltaTheta -= tilt - maximumTiltAngle;\n    }\n  }\n\n  if (!rotateOnlyVertical) {\n    camera.rotateRight(deltaPhi);\n  }\n\n  if (!rotateOnlyHorizontal) {\n    camera.rotateUp(deltaTheta);\n  }\n\n  camera.constrainedAxis = oldAxis;\n}\n\nconst pan3DP0 = Cartesian4.clone(Cartesian4.UNIT_W);\nconst pan3DP1 = Cartesian4.clone(Cartesian4.UNIT_W);\nconst pan3DTemp0 = new Cartesian3();\nconst pan3DTemp1 = new Cartesian3();\nconst pan3DTemp2 = new Cartesian3();\nconst pan3DTemp3 = new Cartesian3();\nconst pan3DStartMousePosition = new Cartesian2();\nconst pan3DEndMousePosition = new Cartesian2();\nconst pan3DDiffMousePosition = new Cartesian2();\nconst pan3DPixelDimensions = new Cartesian2();\nconst panRay = new Ray();\n\nfunction pan3D(controller, startPosition, movement, ellipsoid) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n\n  const startMousePosition = Cartesian2.clone(\n    movement.startPosition,\n    pan3DStartMousePosition,\n  );\n  const endMousePosition = Cartesian2.clone(\n    movement.endPosition,\n    pan3DEndMousePosition,\n  );\n  const height = ellipsoid.cartesianToCartographic(\n    camera.positionWC,\n    scratchCartographic,\n  ).height;\n\n  let p0, p1;\n\n  if (\n    !movement.inertiaEnabled &&\n    height < controller._minimumPickingTerrainHeight\n  ) {\n    p0 = Cartesian3.clone(controller._panLastWorldPosition, pan3DP0);\n\n    // Use the last picked world position unless we're starting a new drag\n    if (\n      !defined(controller._globe) &&\n      !Cartesian2.equalsEpsilon(\n        startMousePosition,\n        controller._panLastMousePosition,\n      )\n    ) {\n      p0 = pickPosition(controller, startMousePosition, pan3DP0);\n    }\n\n    if (!defined(controller._globe) && defined(p0)) {\n      const toCenter = Cartesian3.subtract(p0, camera.positionWC, pan3DTemp1);\n      const toCenterProj = Cartesian3.multiplyByScalar(\n        camera.directionWC,\n        Cartesian3.dot(camera.directionWC, toCenter),\n        pan3DTemp1,\n      );\n      const distanceToNearPlane = Cartesian3.magnitude(toCenterProj);\n      const pixelDimensions = camera.frustum.getPixelDimensions(\n        scene.drawingBufferWidth,\n        scene.drawingBufferHeight,\n        distanceToNearPlane,\n        scene.pixelRatio,\n        pan3DPixelDimensions,\n      );\n\n      const dragDelta = Cartesian2.subtract(\n        endMousePosition,\n        startMousePosition,\n        pan3DDiffMousePosition,\n      );\n\n      // Move the camera to the the distance the cursor moved in worldspace\n      const right = Cartesian3.multiplyByScalar(\n        camera.rightWC,\n        dragDelta.x * pixelDimensions.x,\n        pan3DTemp1,\n      );\n\n      // Move the camera towards the picked position in worldspace as the camera is pointed towards a horizon view\n      const cameraPositionNormal = Cartesian3.normalize(\n        camera.positionWC,\n        scratchCameraPositionNormal,\n      );\n      const endPickDirection = camera.getPickRay(\n        endMousePosition,\n        panRay,\n      ).direction;\n      const endPickProj = Cartesian3.subtract(\n        endPickDirection,\n        Cartesian3.projectVector(endPickDirection, camera.rightWC, pan3DTemp2),\n        pan3DTemp2,\n      );\n      const angle = Cartesian3.angleBetween(endPickProj, camera.directionWC);\n      let forward = 1.0;\n      if (defined(camera.frustum.fov)) {\n        forward = Math.max(Math.tan(angle), 0.1); // Clamp so we don't make the magnitude infinitely large when the angle is small\n      }\n      let dot = Math.abs(\n        Cartesian3.dot(camera.directionWC, cameraPositionNormal),\n      );\n      const magnitude =\n        ((-dragDelta.y * pixelDimensions.y * 2.0) / Math.sqrt(forward)) *\n        (1.0 - dot);\n      const direction = Cartesian3.multiplyByScalar(\n        endPickDirection,\n        magnitude,\n        pan3DTemp2,\n      );\n\n      // Move the camera up the distance the cursor moved in worldspace as the camera is pointed towards the center\n      dot = Math.abs(Cartesian3.dot(camera.upWC, cameraPositionNormal));\n      const up = Cartesian3.multiplyByScalar(\n        camera.upWC,\n        -dragDelta.y * (1.0 - dot) * pixelDimensions.y,\n        pan3DTemp3,\n      );\n\n      p1 = Cartesian3.add(p0, right, pan3DP1);\n      p1 = Cartesian3.add(p1, direction, p1);\n      p1 = Cartesian3.add(p1, up, p1);\n\n      Cartesian3.clone(p1, controller._panLastWorldPosition);\n      Cartesian2.clone(endMousePosition, controller._panLastMousePosition);\n    }\n  }\n\n  if (!defined(p0) || !defined(p1)) {\n    p0 = camera.pickEllipsoid(startMousePosition, ellipsoid, pan3DP0);\n    p1 = camera.pickEllipsoid(endMousePosition, ellipsoid, pan3DP1);\n  }\n\n  if (!defined(p0) || !defined(p1)) {\n    controller._rotating = true;\n    rotate3D(controller, startPosition, movement);\n    return;\n  }\n\n  p0 = camera.worldToCameraCoordinates(p0, p0);\n  p1 = camera.worldToCameraCoordinates(p1, p1);\n\n  if (!defined(camera.constrainedAxis)) {\n    Cartesian3.normalize(p0, p0);\n    Cartesian3.normalize(p1, p1);\n    const dot = Cartesian3.dot(p0, p1);\n    const axis = Cartesian3.cross(p0, p1, pan3DTemp0);\n\n    if (\n      dot < 1.0 &&\n      !Cartesian3.equalsEpsilon(axis, Cartesian3.ZERO, CesiumMath.EPSILON14)\n    ) {\n      // dot is in [0, 1]\n      const angle = Math.acos(dot);\n      camera.rotate(axis, angle);\n    }\n  } else {\n    const basis0 = camera.constrainedAxis;\n    const basis1 = Cartesian3.mostOrthogonalAxis(basis0, pan3DTemp0);\n    Cartesian3.cross(basis1, basis0, basis1);\n    Cartesian3.normalize(basis1, basis1);\n    const basis2 = Cartesian3.cross(basis0, basis1, pan3DTemp1);\n\n    const startRho = Cartesian3.magnitude(p0);\n    const startDot = Cartesian3.dot(basis0, p0);\n    const startTheta = Math.acos(startDot / startRho);\n    const startRej = Cartesian3.multiplyByScalar(basis0, startDot, pan3DTemp2);\n    Cartesian3.subtract(p0, startRej, startRej);\n    Cartesian3.normalize(startRej, startRej);\n\n    const endRho = Cartesian3.magnitude(p1);\n    const endDot = Cartesian3.dot(basis0, p1);\n    const endTheta = Math.acos(endDot / endRho);\n    const endRej = Cartesian3.multiplyByScalar(basis0, endDot, pan3DTemp3);\n    Cartesian3.subtract(p1, endRej, endRej);\n    Cartesian3.normalize(endRej, endRej);\n\n    let startPhi = Math.acos(Cartesian3.dot(startRej, basis1));\n    if (Cartesian3.dot(startRej, basis2) < 0) {\n      startPhi = CesiumMath.TWO_PI - startPhi;\n    }\n\n    let endPhi = Math.acos(Cartesian3.dot(endRej, basis1));\n    if (Cartesian3.dot(endRej, basis2) < 0) {\n      endPhi = CesiumMath.TWO_PI - endPhi;\n    }\n\n    const deltaPhi = startPhi - endPhi;\n\n    let east;\n    if (\n      Cartesian3.equalsEpsilon(basis0, camera.position, CesiumMath.EPSILON2)\n    ) {\n      east = camera.right;\n    } else {\n      east = Cartesian3.cross(basis0, camera.position, pan3DTemp0);\n    }\n\n    const planeNormal = Cartesian3.cross(basis0, east, pan3DTemp0);\n    const side0 = Cartesian3.dot(\n      planeNormal,\n      Cartesian3.subtract(p0, basis0, pan3DTemp1),\n    );\n    const side1 = Cartesian3.dot(\n      planeNormal,\n      Cartesian3.subtract(p1, basis0, pan3DTemp1),\n    );\n\n    let deltaTheta;\n    if (side0 > 0 && side1 > 0) {\n      deltaTheta = endTheta - startTheta;\n    } else if (side0 > 0 && side1 <= 0) {\n      if (Cartesian3.dot(camera.position, basis0) > 0) {\n        deltaTheta = -startTheta - endTheta;\n      } else {\n        deltaTheta = startTheta + endTheta;\n      }\n    } else {\n      deltaTheta = startTheta - endTheta;\n    }\n\n    camera.rotateRight(deltaPhi);\n    camera.rotateUp(deltaTheta);\n  }\n}\n\nconst zoom3DUnitPosition = new Cartesian3();\nconst zoom3DCartographic = new Cartographic();\n\nlet preIntersectionDistance = 0;\n\nfunction zoom3D(controller, startPosition, movement) {\n  if (defined(movement.distance)) {\n    movement = movement.distance;\n  }\n  const inertiaMovement = movement.inertiaEnabled;\n\n  const ellipsoid = controller._ellipsoid;\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const canvas = scene.canvas;\n\n  const cameraUnderground = controller._cameraUnderground;\n\n  let windowPosition;\n\n  if (cameraUnderground) {\n    windowPosition = startPosition;\n  } else {\n    windowPosition = zoomCVWindowPos;\n    windowPosition.x = canvas.clientWidth / 2;\n    windowPosition.y = canvas.clientHeight / 2;\n  }\n\n  const ray = camera.getPickRay(windowPosition, zoomCVWindowRay);\n\n  let intersection;\n  const height = ellipsoid.cartesianToCartographic(\n    camera.position,\n    zoom3DCartographic,\n  ).height;\n\n  const approachingCollision =\n    Math.abs(preIntersectionDistance) <\n    controller.minimumPickingTerrainDistanceWithInertia;\n\n  const needPickGlobe = inertiaMovement\n    ? approachingCollision\n    : height < controller._minimumPickingTerrainHeight;\n  if (needPickGlobe) {\n    intersection = pickPosition(controller, windowPosition, zoomCVIntersection);\n  }\n\n  let distance;\n  if (defined(intersection)) {\n    distance = Cartesian3.distance(ray.origin, intersection);\n    preIntersectionDistance = distance;\n  }\n\n  if (cameraUnderground) {\n    const distanceUnderground = getZoomDistanceUnderground(\n      controller,\n      ray,\n      height,\n    );\n    if (defined(distance)) {\n      distance = Math.min(distance, distanceUnderground);\n    } else {\n      distance = distanceUnderground;\n    }\n  }\n\n  if (!defined(distance)) {\n    distance = height;\n  }\n\n  const unitPosition = Cartesian3.normalize(\n    camera.position,\n    zoom3DUnitPosition,\n  );\n  handleZoom(\n    controller,\n    startPosition,\n    movement,\n    controller.zoomFactor,\n    distance,\n    Cartesian3.dot(unitPosition, camera.direction),\n  );\n}\n\nconst tilt3DWindowPos = new Cartesian2();\nconst tilt3DRay = new Ray();\nconst tilt3DCenter = new Cartesian3();\nconst tilt3DVerticalCenter = new Cartesian3();\nconst tilt3DTransform = new Matrix4();\nconst tilt3DVerticalTransform = new Matrix4();\nconst tilt3DOldTransform = new Matrix4();\nconst tilt3DQuaternion = new Quaternion();\nconst tilt3DMatrix = new Matrix3();\nconst tilt3DCart = new Cartographic();\nconst tilt3DLookUp = new Cartesian3();\n\nfunction tilt3D(controller, startPosition, movement) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n\n  if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n    return;\n  }\n\n  if (defined(movement.angleAndHeight)) {\n    movement = movement.angleAndHeight;\n  }\n\n  if (!Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n    controller._tiltOnEllipsoid = false;\n    controller._looking = false;\n  }\n\n  if (controller._looking) {\n    const up = controller._ellipsoid.geodeticSurfaceNormal(\n      camera.position,\n      tilt3DLookUp,\n    );\n    look3D(controller, startPosition, movement, up);\n    return;\n  }\n\n  const ellipsoid = controller._ellipsoid;\n  const cartographic = ellipsoid.cartesianToCartographic(\n    camera.position,\n    tilt3DCart,\n  );\n\n  if (\n    controller._tiltOnEllipsoid ||\n    cartographic.height > controller._minimumCollisionTerrainHeight\n  ) {\n    controller._tiltOnEllipsoid = true;\n    tilt3DOnEllipsoid(controller, startPosition, movement);\n  } else {\n    tilt3DOnTerrain(controller, startPosition, movement);\n  }\n}\n\nconst tilt3DOnEllipsoidCartographic = new Cartographic();\n\nfunction tilt3DOnEllipsoid(controller, startPosition, movement) {\n  const ellipsoid = controller._ellipsoid;\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const minHeight = controller.minimumZoomDistance * 0.25;\n  const height = ellipsoid.cartesianToCartographic(\n    camera.positionWC,\n    tilt3DOnEllipsoidCartographic,\n  ).height;\n  if (\n    height - minHeight - 1.0 < CesiumMath.EPSILON3 &&\n    movement.endPosition.y - movement.startPosition.y < 0\n  ) {\n    return;\n  }\n\n  const canvas = scene.canvas;\n\n  const windowPosition = tilt3DWindowPos;\n  windowPosition.x = canvas.clientWidth / 2;\n  windowPosition.y = canvas.clientHeight / 2;\n  const ray = camera.getPickRay(windowPosition, tilt3DRay);\n\n  let center;\n  const intersection = IntersectionTests.rayEllipsoid(ray, ellipsoid);\n  if (defined(intersection)) {\n    center = Ray.getPoint(ray, intersection.start, tilt3DCenter);\n  } else if (height > controller._minimumTrackBallHeight) {\n    const grazingAltitudeLocation = IntersectionTests.grazingAltitudeLocation(\n      ray,\n      ellipsoid,\n    );\n    if (!defined(grazingAltitudeLocation)) {\n      return;\n    }\n    const grazingAltitudeCart = ellipsoid.cartesianToCartographic(\n      grazingAltitudeLocation,\n      tilt3DCart,\n    );\n    grazingAltitudeCart.height = 0.0;\n    center = ellipsoid.cartographicToCartesian(\n      grazingAltitudeCart,\n      tilt3DCenter,\n    );\n  } else {\n    controller._looking = true;\n    const up = controller._ellipsoid.geodeticSurfaceNormal(\n      camera.position,\n      tilt3DLookUp,\n    );\n    look3D(controller, startPosition, movement, up);\n    Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n    return;\n  }\n\n  const transform = Transforms.eastNorthUpToFixedFrame(\n    center,\n    ellipsoid,\n    tilt3DTransform,\n  );\n\n  const oldGlobe = controller._globe;\n  const oldEllipsoid = controller._ellipsoid;\n  controller._globe = undefined;\n  controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n  controller._rotateFactor = 1.0;\n  controller._rotateRateRangeAdjustment = 1.0;\n\n  const oldTransform = Matrix4.clone(camera.transform, tilt3DOldTransform);\n  camera._setTransform(transform);\n\n  rotate3D(controller, startPosition, movement, Cartesian3.UNIT_Z);\n\n  camera._setTransform(oldTransform);\n  controller._globe = oldGlobe;\n  controller._ellipsoid = oldEllipsoid;\n\n  const radius = oldEllipsoid.maximumRadius;\n  controller._rotateFactor = 1.0 / radius;\n  controller._rotateRateRangeAdjustment = radius;\n}\n\nfunction tilt3DOnTerrain(controller, startPosition, movement) {\n  const ellipsoid = controller._ellipsoid;\n  const scene = controller._scene;\n  const camera = scene.camera;\n  const cameraUnderground = controller._cameraUnderground;\n\n  let center;\n  let ray;\n  let intersection;\n\n  if (Cartesian2.equals(startPosition, controller._tiltCenterMousePosition)) {\n    center = Cartesian3.clone(controller._tiltCenter, tilt3DCenter);\n  } else {\n    center = pickPosition(controller, startPosition, tilt3DCenter);\n\n    if (!defined(center)) {\n      ray = camera.getPickRay(startPosition, tilt3DRay);\n      intersection = IntersectionTests.rayEllipsoid(ray, ellipsoid);\n      if (!defined(intersection)) {\n        const cartographic = ellipsoid.cartesianToCartographic(\n          camera.position,\n          tilt3DCart,\n        );\n        if (cartographic.height <= controller._minimumTrackBallHeight) {\n          controller._looking = true;\n          const up = controller._ellipsoid.geodeticSurfaceNormal(\n            camera.position,\n            tilt3DLookUp,\n          );\n          look3D(controller, startPosition, movement, up);\n          Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n        }\n        return;\n      }\n      center = Ray.getPoint(ray, intersection.start, tilt3DCenter);\n    }\n\n    if (cameraUnderground) {\n      if (!defined(ray)) {\n        ray = camera.getPickRay(startPosition, tilt3DRay);\n      }\n      getTiltCenterUnderground(controller, ray, center, center);\n    }\n\n    Cartesian2.clone(startPosition, controller._tiltCenterMousePosition);\n    Cartesian3.clone(center, controller._tiltCenter);\n  }\n\n  const canvas = scene.canvas;\n\n  const windowPosition = tilt3DWindowPos;\n  windowPosition.x = canvas.clientWidth / 2;\n  windowPosition.y = controller._tiltCenterMousePosition.y;\n  ray = camera.getPickRay(windowPosition, tilt3DRay);\n\n  const mag = Cartesian3.magnitude(center);\n  const radii = Cartesian3.fromElements(mag, mag, mag, scratchRadii);\n  const newEllipsoid = Ellipsoid.fromCartesian3(radii, scratchEllipsoid);\n\n  intersection = IntersectionTests.rayEllipsoid(ray, newEllipsoid);\n  if (!defined(intersection)) {\n    return;\n  }\n\n  const t =\n    Cartesian3.magnitude(ray.origin) > mag\n      ? intersection.start\n      : intersection.stop;\n  const verticalCenter = Ray.getPoint(ray, t, tilt3DVerticalCenter);\n\n  const transform = Transforms.eastNorthUpToFixedFrame(\n    center,\n    ellipsoid,\n    tilt3DTransform,\n  );\n  const verticalTransform = Transforms.eastNorthUpToFixedFrame(\n    verticalCenter,\n    newEllipsoid,\n    tilt3DVerticalTransform,\n  );\n\n  const oldGlobe = controller._globe;\n  const oldEllipsoid = controller._ellipsoid;\n  controller._globe = undefined;\n  controller._ellipsoid = Ellipsoid.UNIT_SPHERE;\n  controller._rotateFactor = 1.0;\n  controller._rotateRateRangeAdjustment = 1.0;\n\n  let constrainedAxis = Cartesian3.UNIT_Z;\n\n  const oldTransform = Matrix4.clone(camera.transform, tilt3DOldTransform);\n  camera._setTransform(verticalTransform);\n\n  const tangent = Cartesian3.cross(\n    verticalCenter,\n    camera.positionWC,\n    tilt3DCartesian3,\n  );\n  const dot = Cartesian3.dot(camera.rightWC, tangent);\n\n  if (dot < 0.0) {\n    const movementDelta = movement.startPosition.y - movement.endPosition.y;\n    if (\n      (cameraUnderground && movementDelta < 0.0) ||\n      (!cameraUnderground && movementDelta > 0.0)\n    ) {\n      // Prevent camera from flipping past the up axis\n      constrainedAxis = undefined;\n    }\n\n    const oldConstrainedAxis = camera.constrainedAxis;\n    camera.constrainedAxis = undefined;\n\n    rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n\n    camera.constrainedAxis = oldConstrainedAxis;\n  } else {\n    rotate3D(controller, startPosition, movement, constrainedAxis, true, false);\n  }\n\n  camera._setTransform(transform);\n  rotate3D(controller, startPosition, movement, constrainedAxis, false, true);\n\n  if (defined(camera.constrainedAxis)) {\n    const right = Cartesian3.cross(\n      camera.direction,\n      camera.constrainedAxis,\n      tilt3DCartesian3,\n    );\n    if (\n      !Cartesian3.equalsEpsilon(right, Cartesian3.ZERO, CesiumMath.EPSILON6)\n    ) {\n      if (Cartesian3.dot(right, camera.right) < 0.0) {\n        Cartesian3.negate(right, right);\n      }\n\n      Cartesian3.cross(right, camera.direction, camera.up);\n      Cartesian3.cross(camera.direction, camera.up, camera.right);\n\n      Cartesian3.normalize(camera.up, camera.up);\n      Cartesian3.normalize(camera.right, camera.right);\n    }\n  }\n\n  camera._setTransform(oldTransform);\n  controller._globe = oldGlobe;\n  controller._ellipsoid = oldEllipsoid;\n\n  const radius = oldEllipsoid.maximumRadius;\n  controller._rotateFactor = 1.0 / radius;\n  controller._rotateRateRangeAdjustment = radius;\n\n  const originalPosition = Cartesian3.clone(\n    camera.positionWC,\n    tilt3DCartesian3,\n  );\n\n  if (controller.enableCollisionDetection) {\n    adjustHeightForTerrain(controller, true);\n  }\n\n  if (!Cartesian3.equals(camera.positionWC, originalPosition)) {\n    camera._setTransform(verticalTransform);\n    camera.worldToCameraCoordinatesPoint(originalPosition, originalPosition);\n\n    const magSqrd = Cartesian3.magnitudeSquared(originalPosition);\n    if (Cartesian3.magnitudeSquared(camera.position) > magSqrd) {\n      Cartesian3.normalize(camera.position, camera.position);\n      Cartesian3.multiplyByScalar(\n        camera.position,\n        Math.sqrt(magSqrd),\n        camera.position,\n      );\n    }\n\n    const angle = Cartesian3.angleBetween(originalPosition, camera.position);\n    const axis = Cartesian3.cross(\n      originalPosition,\n      camera.position,\n      originalPosition,\n    );\n    Cartesian3.normalize(axis, axis);\n\n    const quaternion = Quaternion.fromAxisAngle(axis, angle, tilt3DQuaternion);\n    const rotation = Matrix3.fromQuaternion(quaternion, tilt3DMatrix);\n    Matrix3.multiplyByVector(rotation, camera.direction, camera.direction);\n    Matrix3.multiplyByVector(rotation, camera.up, camera.up);\n    Cartesian3.cross(camera.direction, camera.up, camera.right);\n    Cartesian3.cross(camera.right, camera.direction, camera.up);\n\n    camera._setTransform(oldTransform);\n  }\n}\n\nconst look3DStartPos = new Cartesian2();\nconst look3DEndPos = new Cartesian2();\nconst look3DStartRay = new Ray();\nconst look3DEndRay = new Ray();\nconst look3DNegativeRot = new Cartesian3();\nconst look3DTan = new Cartesian3();\n\nfunction look3D(controller, startPosition, movement, rotationAxis) {\n  const scene = controller._scene;\n  const camera = scene.camera;\n\n  const startPos = look3DStartPos;\n  startPos.x = movement.startPosition.x;\n  startPos.y = 0.0;\n  const endPos = look3DEndPos;\n  endPos.x = movement.endPosition.x;\n  endPos.y = 0.0;\n\n  let startRay = camera.getPickRay(startPos, look3DStartRay);\n  let endRay = camera.getPickRay(endPos, look3DEndRay);\n  let angle = 0.0;\n  let start;\n  let end;\n\n  if (camera.frustum instanceof OrthographicFrustum) {\n    start = startRay.origin;\n    end = endRay.origin;\n\n    Cartesian3.add(camera.direction, start, start);\n    Cartesian3.add(camera.direction, end, end);\n\n    Cartesian3.subtract(start, camera.position, start);\n    Cartesian3.subtract(end, camera.position, end);\n\n    Cartesian3.normalize(start, start);\n    Cartesian3.normalize(end, end);\n  } else {\n    start = startRay.direction;\n    end = endRay.direction;\n  }\n\n  let dot = Cartesian3.dot(start, end);\n  if (dot < 1.0) {\n    // dot is in [0, 1]\n    angle = Math.acos(dot);\n  }\n\n  angle = movement.startPosition.x > movement.endPosition.x ? -angle : angle;\n\n  const horizontalRotationAxis = controller._horizontalRotationAxis;\n  if (defined(rotationAxis)) {\n    camera.look(rotationAxis, -angle);\n  } else if (defined(horizontalRotationAxis)) {\n    camera.look(horizontalRotationAxis, -angle);\n  } else {\n    camera.lookLeft(angle);\n  }\n\n  startPos.x = 0.0;\n  startPos.y = movement.startPosition.y;\n  endPos.x = 0.0;\n  endPos.y = movement.endPosition.y;\n\n  startRay = camera.getPickRay(startPos, look3DStartRay);\n  endRay = camera.getPickRay(endPos, look3DEndRay);\n  angle = 0.0;\n\n  if (camera.frustum instanceof OrthographicFrustum) {\n    start = startRay.origin;\n    end = endRay.origin;\n\n    Cartesian3.add(camera.direction, start, start);\n    Cartesian3.add(camera.direction, end, end);\n\n    Cartesian3.subtract(start, camera.position, start);\n    Cartesian3.subtract(end, camera.position, end);\n\n    Cartesian3.normalize(start, start);\n    Cartesian3.normalize(end, end);\n  } else {\n    start = startRay.direction;\n    end = endRay.direction;\n  }\n\n  dot = Cartesian3.dot(start, end);\n  if (dot < 1.0) {\n    // dot is in [0, 1]\n    angle = Math.acos(dot);\n  }\n  angle = movement.startPosition.y > movement.endPosition.y ? -angle : angle;\n\n  rotationAxis = rotationAxis ?? horizontalRotationAxis;\n  if (defined(rotationAxis)) {\n    const direction = camera.direction;\n    const negativeRotationAxis = Cartesian3.negate(\n      rotationAxis,\n      look3DNegativeRot,\n    );\n    const northParallel = Cartesian3.equalsEpsilon(\n      direction,\n      rotationAxis,\n      CesiumMath.EPSILON2,\n    );\n    const southParallel = Cartesian3.equalsEpsilon(\n      direction,\n      negativeRotationAxis,\n      CesiumMath.EPSILON2,\n    );\n    if (!northParallel && !southParallel) {\n      dot = Cartesian3.dot(direction, rotationAxis);\n      let angleToAxis = CesiumMath.acosClamped(dot);\n      if (angle > 0 && angle > angleToAxis) {\n        angle = angleToAxis - CesiumMath.EPSILON4;\n      }\n\n      dot = Cartesian3.dot(direction, negativeRotationAxis);\n      angleToAxis = CesiumMath.acosClamped(dot);\n      if (angle < 0 && -angle > angleToAxis) {\n        angle = -angleToAxis + CesiumMath.EPSILON4;\n      }\n\n      const tangent = Cartesian3.cross(rotationAxis, direction, look3DTan);\n      camera.look(tangent, angle);\n    } else if ((northParallel && angle < 0) || (southParallel && angle > 0)) {\n      camera.look(camera.right, -angle);\n    }\n  } else {\n    camera.lookUp(angle);\n  }\n}\n\nfunction update3D(controller) {\n  reactToInput(\n    controller,\n    controller.enableRotate,\n    controller.rotateEventTypes,\n    spin3D,\n    controller.inertiaSpin,\n    \"_lastInertiaSpinMovement\",\n  );\n  reactToInput(\n    controller,\n    controller.enableZoom,\n    controller.zoomEventTypes,\n    zoom3D,\n    controller.inertiaZoom,\n    \"_lastInertiaZoomMovement\",\n  );\n  reactToInput(\n    controller,\n    controller.enableTilt,\n    controller.tiltEventTypes,\n    tilt3D,\n    controller.inertiaSpin,\n    \"_lastInertiaTiltMovement\",\n  );\n  reactToInput(\n    controller,\n    controller.enableLook,\n    controller.lookEventTypes,\n    look3D,\n  );\n}\n\nconst scratchAdjustHeightTransform = new Matrix4();\nconst scratchAdjustHeightCartographic = new Cartographic();\n\nfunction adjustHeightForTerrain(controller, cameraChanged) {\n  controller._adjustedHeightForTerrain = true;\n\n  const scene = controller._scene;\n  const mode = scene.mode;\n\n  if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n    return;\n  }\n\n  const camera = scene.camera;\n  const ellipsoid = scene.ellipsoid ?? Ellipsoid.WGS84;\n  const projection = scene.mapProjection;\n\n  let transform;\n  let mag;\n  if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n    transform = Matrix4.clone(camera.transform, scratchAdjustHeightTransform);\n    mag = Cartesian3.magnitude(camera.position);\n    camera._setTransform(Matrix4.IDENTITY);\n  }\n\n  const cartographic = scratchAdjustHeightCartographic;\n  if (mode === SceneMode.SCENE3D) {\n    ellipsoid.cartesianToCartographic(camera.position, cartographic);\n  } else {\n    projection.unproject(camera.position, cartographic);\n  }\n\n  let heightUpdated = false;\n  if (cartographic.height < controller._minimumCollisionTerrainHeight) {\n    const globeHeight = controller._scene.globeHeight;\n    if (defined(globeHeight)) {\n      const height = globeHeight + controller.minimumZoomDistance;\n      const difference = globeHeight - controller._lastGlobeHeight;\n      const percentDifference = difference / controller._lastGlobeHeight;\n\n      // Unless the camera has been moved by user input, to avoid big jumps during tile loads\n      // only make height updates when the globe height has been fairly stable across several frames\n      if (\n        cartographic.height < height &&\n        (cameraChanged || Math.abs(percentDifference) <= 0.1)\n      ) {\n        cartographic.height = height;\n        if (mode === SceneMode.SCENE3D) {\n          ellipsoid.cartographicToCartesian(cartographic, camera.position);\n        } else {\n          projection.project(cartographic, camera.position);\n        }\n        heightUpdated = true;\n      }\n\n      if (cameraChanged || Math.abs(percentDifference) <= 0.1) {\n        controller._lastGlobeHeight = globeHeight;\n      } else {\n        controller._lastGlobeHeight += difference * 0.1;\n      }\n    }\n  }\n\n  if (defined(transform)) {\n    camera._setTransform(transform);\n    if (heightUpdated) {\n      Cartesian3.normalize(camera.position, camera.position);\n      Cartesian3.negate(camera.position, camera.direction);\n      Cartesian3.multiplyByScalar(\n        camera.position,\n        Math.max(mag, controller.minimumZoomDistance),\n        camera.position,\n      );\n      Cartesian3.normalize(camera.direction, camera.direction);\n      Cartesian3.cross(camera.direction, camera.up, camera.right);\n      Cartesian3.cross(camera.right, camera.direction, camera.up);\n    }\n  }\n}\n\n/**\n * @private\n */\nScreenSpaceCameraController.prototype.onMap = function () {\n  const scene = this._scene;\n  const mode = scene.mode;\n  const camera = scene.camera;\n\n  if (mode === SceneMode.COLUMBUS_VIEW) {\n    return (\n      Math.abs(camera.position.x) - this._maxCoord.x < 0 &&\n      Math.abs(camera.position.y) - this._maxCoord.y < 0\n    );\n  }\n\n  return true;\n};\n\nconst scratchPreviousPosition = new Cartesian3();\nconst scratchPreviousDirection = new Cartesian3();\n\n/**\n * @private\n */\nScreenSpaceCameraController.prototype.update = function () {\n  const scene = this._scene;\n  const { camera, globe, mode } = scene;\n\n  if (!Matrix4.equals(camera.transform, Matrix4.IDENTITY)) {\n    this._globe = undefined;\n    this._ellipsoid = Ellipsoid.UNIT_SPHERE;\n  } else {\n    this._globe = globe;\n    this._ellipsoid = scene.ellipsoid ?? Ellipsoid.default;\n  }\n\n  const { verticalExaggeration, verticalExaggerationRelativeHeight } = scene;\n  this._minimumCollisionTerrainHeight = VerticalExaggeration.getHeight(\n    this.minimumCollisionTerrainHeight,\n    verticalExaggeration,\n    verticalExaggerationRelativeHeight,\n  );\n  this._minimumPickingTerrainHeight = VerticalExaggeration.getHeight(\n    this.minimumPickingTerrainHeight,\n    verticalExaggeration,\n    verticalExaggerationRelativeHeight,\n  );\n  this._minimumTrackBallHeight = VerticalExaggeration.getHeight(\n    this.minimumTrackBallHeight,\n    verticalExaggeration,\n    verticalExaggerationRelativeHeight,\n  );\n\n  this._cameraUnderground = scene.cameraUnderground && defined(this._globe);\n\n  const radius = this._ellipsoid.maximumRadius;\n  this._rotateFactor = 1.0 / radius;\n  this._rotateRateRangeAdjustment = radius;\n\n  this._adjustedHeightForTerrain = false;\n  const previousPosition = Cartesian3.clone(\n    camera.positionWC,\n    scratchPreviousPosition,\n  );\n  const previousDirection = Cartesian3.clone(\n    camera.directionWC,\n    scratchPreviousDirection,\n  );\n\n  if (mode === SceneMode.SCENE2D) {\n    update2D(this);\n  } else if (mode === SceneMode.COLUMBUS_VIEW) {\n    this._horizontalRotationAxis = Cartesian3.UNIT_Z;\n    updateCV(this);\n  } else if (mode === SceneMode.SCENE3D) {\n    this._horizontalRotationAxis = undefined;\n    update3D(this);\n  }\n\n  if (this.enableCollisionDetection && !this._adjustedHeightForTerrain) {\n    // Adjust the camera height if the camera moved at all (user input or inertia) and an action didn't already adjust the camera height\n    const cameraChanged =\n      !Cartesian3.equals(previousPosition, camera.positionWC) ||\n      !Cartesian3.equals(previousDirection, camera.directionWC);\n    adjustHeightForTerrain(this, cameraChanged);\n  }\n\n  this._aggregator.reset();\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see ScreenSpaceCameraController#destroy\n */\nScreenSpaceCameraController.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Removes mouse listeners held by this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * controller = controller && controller.destroy();\n *\n * @see ScreenSpaceCameraController#isDestroyed\n */\nScreenSpaceCameraController.prototype.destroy = function () {\n  this._tweens.removeAll();\n  this._aggregator = this._aggregator && this._aggregator.destroy();\n  return destroyObject(this);\n};\nexport default ScreenSpaceCameraController;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Constants used to indicated what part of the sensor volume to display.\n *\n * @enum {number}\n */\nconst SensorVolumePortionToDisplay = {\n  /**\n   * 0x0000.  Display the complete sensor volume.\n   *\n   * @type {number}\n   * @constant\n   */\n  COMPLETE: 0x0000,\n  /**\n   * 0x0001.  Display the portion of the sensor volume that lies below the true horizon of the ellipsoid.\n   *\n   * @type {number}\n   * @constant\n   */\n  BELOW_ELLIPSOID_HORIZON: 0x0001,\n  /**\n   * 0x0002.  Display the portion of the sensor volume that lies above the true horizon of the ellipsoid.\n   *\n   * @type {number}\n   * @constant\n   */\n  ABOVE_ELLIPSOID_HORIZON: 0x0002,\n};\n\n/**\n * Validates that the provided value is a valid {@link SensorVolumePortionToDisplay} enumeration value.\n *\n * @param {SensorVolumePortionToDisplay} portionToDisplay The value to validate.\n *\n * @returns {boolean} <code>true</code> if the provided value is a valid enumeration value; otherwise, <code>false</code>.\n */\nSensorVolumePortionToDisplay.validate = function (portionToDisplay) {\n  return (\n    portionToDisplay === SensorVolumePortionToDisplay.COMPLETE ||\n    portionToDisplay === SensorVolumePortionToDisplay.BELOW_ELLIPSOID_HORIZON ||\n    portionToDisplay === SensorVolumePortionToDisplay.ABOVE_ELLIPSOID_HORIZON\n  );\n};\n\n/**\n * Converts the provided value to its corresponding enumeration string.\n *\n * @param {SensorVolumePortionToDisplay} portionToDisplay The value to be converted to its corresponding enumeration string.\n *\n * @returns {string} The enumeration string corresponding to the value.\n */\nSensorVolumePortionToDisplay.toString = function (portionToDisplay) {\n  switch (portionToDisplay) {\n    case SensorVolumePortionToDisplay.COMPLETE:\n      return \"COMPLETE\";\n    case SensorVolumePortionToDisplay.BELOW_ELLIPSOID_HORIZON:\n      return \"BELOW_ELLIPSOID_HORIZON\";\n    case SensorVolumePortionToDisplay.ABOVE_ELLIPSOID_HORIZON:\n      return \"ABOVE_ELLIPSOID_HORIZON\";\n    default:\n      throw new DeveloperError(\n        \"SensorVolumePortionToDisplay value is not valid and cannot be converted to a String.\",\n      );\n  }\n};\n\nexport default SensorVolumePortionToDisplay;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport clone from \"../Core/clone.js\";\nimport Color from \"../Core/Color.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport combine from \"../Core/combine.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrthographicOffCenterFrustum from \"../Core/OrthographicOffCenterFrustum.js\";\nimport PerspectiveFrustum from \"../Core/PerspectiveFrustum.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport Quaternion from \"../Core/Quaternion.js\";\nimport SphereOutlineGeometry from \"../Core/SphereOutlineGeometry.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Framebuffer from \"../Renderer/Framebuffer.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Renderbuffer from \"../Renderer/Renderbuffer.js\";\nimport RenderbufferFormat from \"../Renderer/RenderbufferFormat.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport Camera from \"./Camera.js\";\nimport CullFace from \"./CullFace.js\";\nimport DebugCameraPrimitive from \"./DebugCameraPrimitive.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport ShadowMapShader from \"./ShadowMapShader.js\";\n\n/**\n * <div class=\"notice\">\n * Use {@link Viewer#shadowMap} to get the scene's shadow map. Do not construct this directly.\n * </div>\n *\n * <p>\n * The normalOffset bias pushes the shadows forward slightly, and may be disabled\n * for applications that require ultra precise shadows.\n * </p>\n *\n * @alias ShadowMap\n * @internalConstructor\n * @class\n *\n * @privateParam {object} options An object containing the following properties:\n * @privateParam {Context} options.context The context\n * @privateParam {Camera} options.lightCamera A camera representing the light source.\n * @privateParam {boolean} [options.enabled=true] Whether the shadow map is enabled.\n * @privateParam {boolean} [options.isPointLight=false] Whether the light source is a point light. Point light shadows do not use cascades.\n * @privateParam {number} [options.pointLightRadius=100.0] Radius of the point light.\n * @privateParam {boolean} [options.cascadesEnabled=true] Use multiple shadow maps to cover different partitions of the view frustum.\n * @privateParam {number} [options.numberOfCascades=4] The number of cascades to use for the shadow map. Supported values are one and four.\n * @privateParam {number} [options.maximumDistance=5000.0] The maximum distance used for generating cascaded shadows. Lower values improve shadow quality.\n * @privateParam {number} [options.size=2048] The width and height, in pixels, of each shadow map.\n * @privateParam {boolean} [options.softShadows=false] Whether percentage-closer-filtering is enabled for producing softer shadows.\n * @privateParam {number} [options.darkness=0.3] The shadow darkness.\n * @privateParam {boolean} [options.normalOffset=true] Whether a normal bias is applied to shadows.\n * @privateParam {boolean} [options.fadingEnabled=true] Whether shadows start to fade out once the light gets closer to the horizon.\n *\n * @exception {DeveloperError} Only one or four cascades are supported.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=shadows|Cesium Sandcastle Shadows Demo}\n */\nfunction ShadowMap(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const context = options.context;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(context)) {\n    throw new DeveloperError(\"context is required.\");\n  }\n  if (!defined(options.lightCamera)) {\n    throw new DeveloperError(\"lightCamera is required.\");\n  }\n  if (\n    defined(options.numberOfCascades) &&\n    options.numberOfCascades !== 1 &&\n    options.numberOfCascades !== 4\n  ) {\n    throw new DeveloperError(\"Only one or four cascades are supported.\");\n  }\n  //>>includeEnd('debug');\n\n  this._enabled = options.enabled ?? true;\n  this._softShadows = options.softShadows ?? false;\n  this._normalOffset = options.normalOffset ?? true;\n  this.dirty = true;\n\n  /**\n   * Specifies whether the shadow map originates from a light source. Shadow maps that are used for analytical\n   * purposes should set this to false so as not to affect scene rendering.\n   *\n   * @private\n   */\n  this.fromLightSource = options.fromLightSource ?? true;\n\n  /**\n   * Determines the darkness of the shadows.\n   *\n   * @type {number}\n   * @default 0.3\n   */\n  this.darkness = options.darkness ?? 0.3;\n  this._darkness = this.darkness;\n\n  /**\n   * Determines whether shadows start to fade out once the light gets closer to the horizon.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.fadingEnabled = options.fadingEnabled ?? true;\n\n  /**\n   * Determines the maximum distance of the shadow map. Only applicable for cascaded shadows. Larger distances may result in lower quality shadows.\n   *\n   * @type {number}\n   * @default 5000.0\n   */\n  this.maximumDistance = options.maximumDistance ?? 5000.0;\n\n  this._outOfView = false;\n  this._outOfViewPrevious = false;\n  this._needsUpdate = true;\n\n  // In IE11 and Edge polygon offset is not functional.\n  // TODO : Also disabled for instances of Firefox and Chrome running ANGLE that do not support depth textures.\n  // Re-enable once https://github.com/CesiumGS/cesium/issues/4560 is resolved.\n  let polygonOffsetSupported = true;\n  if (\n    FeatureDetection.isEdge() ||\n    ((FeatureDetection.isChrome() || FeatureDetection.isFirefox()) &&\n      FeatureDetection.isWindows() &&\n      !context.depthTexture)\n  ) {\n    polygonOffsetSupported = false;\n  }\n  this._polygonOffsetSupported = polygonOffsetSupported;\n\n  this._terrainBias = {\n    polygonOffset: polygonOffsetSupported,\n    polygonOffsetFactor: 1.1,\n    polygonOffsetUnits: 4.0,\n    normalOffset: this._normalOffset,\n    normalOffsetScale: 0.5,\n    normalShading: true,\n    normalShadingSmooth: 0.3,\n    depthBias: 0.0001,\n  };\n\n  this._primitiveBias = {\n    polygonOffset: polygonOffsetSupported,\n    polygonOffsetFactor: 1.1,\n    polygonOffsetUnits: 4.0,\n    normalOffset: this._normalOffset,\n    normalOffsetScale: 0.1,\n    normalShading: true,\n    normalShadingSmooth: 0.05,\n    depthBias: 0.00002,\n  };\n\n  this._pointBias = {\n    polygonOffset: false,\n    polygonOffsetFactor: 1.1,\n    polygonOffsetUnits: 4.0,\n    normalOffset: this._normalOffset,\n    normalOffsetScale: 0.0,\n    normalShading: true,\n    normalShadingSmooth: 0.1,\n    depthBias: 0.0005,\n  };\n\n  // Framebuffer resources\n  this._depthAttachment = undefined;\n  this._colorAttachment = undefined;\n\n  // Uniforms\n  this._shadowMapMatrix = new Matrix4();\n  this._shadowMapTexture = undefined;\n  this._lightDirectionEC = new Cartesian3();\n  this._lightPositionEC = new Cartesian4();\n  this._distance = 0.0;\n\n  this._lightCamera = options.lightCamera;\n  this._shadowMapCamera = new ShadowMapCamera();\n  this._shadowMapCullingVolume = undefined;\n  this._sceneCamera = undefined;\n  this._boundingSphere = new BoundingSphere();\n\n  this._isPointLight = options.isPointLight ?? false;\n  this._pointLightRadius = options.pointLightRadius ?? 100.0;\n\n  this._cascadesEnabled = this._isPointLight\n    ? false\n    : (options.cascadesEnabled ?? true);\n  this._numberOfCascades = !this._cascadesEnabled\n    ? 0\n    : (options.numberOfCascades ?? 4);\n  this._fitNearFar = true;\n  this._maximumCascadeDistances = [25.0, 150.0, 700.0, Number.MAX_VALUE];\n\n  this._textureSize = new Cartesian2();\n\n  this._isSpotLight = false;\n  if (this._cascadesEnabled) {\n    // Cascaded shadows are always orthographic. The frustum dimensions are calculated on the fly.\n    this._shadowMapCamera.frustum = new OrthographicOffCenterFrustum();\n  } else if (defined(this._lightCamera.frustum.fov)) {\n    // If the light camera uses a perspective frustum, then the light source is a spot light\n    this._isSpotLight = true;\n  }\n\n  // Uniforms\n  this._cascadeSplits = [new Cartesian4(), new Cartesian4()];\n  this._cascadeMatrices = [\n    new Matrix4(),\n    new Matrix4(),\n    new Matrix4(),\n    new Matrix4(),\n  ];\n  this._cascadeDistances = new Cartesian4();\n\n  let numberOfPasses;\n  if (this._isPointLight) {\n    numberOfPasses = 6; // One shadow map for each direction\n  } else if (!this._cascadesEnabled) {\n    numberOfPasses = 1;\n  } else {\n    numberOfPasses = this._numberOfCascades;\n  }\n\n  this._passes = new Array(numberOfPasses);\n  for (let i = 0; i < numberOfPasses; ++i) {\n    this._passes[i] = new ShadowPass(context);\n  }\n\n  this.debugShow = false;\n  this.debugFreezeFrame = false;\n  this._debugFreezeFrame = false;\n  this._debugCascadeColors = false;\n  this._debugLightFrustum = undefined;\n  this._debugCameraFrustum = undefined;\n  this._debugCascadeFrustums = new Array(this._numberOfCascades);\n  this._debugShadowViewCommand = undefined;\n\n  this._usesDepthTexture = context.depthTexture;\n\n  if (this._isPointLight) {\n    this._usesDepthTexture = false;\n  }\n\n  // Create render states for shadow casters\n  this._primitiveRenderState = undefined;\n  this._terrainRenderState = undefined;\n  this._pointRenderState = undefined;\n  createRenderStates(this);\n\n  // For clearing the shadow map texture every frame\n  this._clearCommand = new ClearCommand({\n    depth: 1.0,\n    color: new Color(),\n  });\n\n  this._clearPassState = new PassState(context);\n\n  this._size = options.size ?? 2048;\n  this.size = this._size;\n}\n\n/**\n * Global maximum shadow distance used to prevent far off receivers from extending\n * the shadow far plane. This helps set a tighter near/far when viewing objects from space.\n *\n * @private\n */\nShadowMap.MAXIMUM_DISTANCE = 20000.0;\n\nfunction ShadowPass(context) {\n  this.camera = new ShadowMapCamera();\n  this.passState = new PassState(context);\n  this.framebuffer = undefined;\n  this.textureOffsets = undefined;\n  this.commandList = [];\n  this.cullingVolume = undefined;\n}\n\nfunction createRenderState(colorMask, bias) {\n  return RenderState.fromCache({\n    cull: {\n      enabled: true,\n      face: CullFace.BACK,\n    },\n    depthTest: {\n      enabled: true,\n    },\n    colorMask: {\n      red: colorMask,\n      green: colorMask,\n      blue: colorMask,\n      alpha: colorMask,\n    },\n    depthMask: true,\n    polygonOffset: {\n      enabled: bias.polygonOffset,\n      factor: bias.polygonOffsetFactor,\n      units: bias.polygonOffsetUnits,\n    },\n  });\n}\n\nfunction createRenderStates(shadowMap) {\n  // Enable the color mask if the shadow map is backed by a color texture, e.g. when depth textures aren't supported\n  const colorMask = !shadowMap._usesDepthTexture;\n  shadowMap._primitiveRenderState = createRenderState(\n    colorMask,\n    shadowMap._primitiveBias,\n  );\n  shadowMap._terrainRenderState = createRenderState(\n    colorMask,\n    shadowMap._terrainBias,\n  );\n  shadowMap._pointRenderState = createRenderState(\n    colorMask,\n    shadowMap._pointBias,\n  );\n}\n\n/**\n * @private\n */\nShadowMap.prototype.debugCreateRenderStates = function () {\n  createRenderStates(this);\n};\n\nObject.defineProperties(ShadowMap.prototype, {\n  /**\n   * Determines if the shadow map will be shown.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {boolean}\n   * @default true\n   */\n  enabled: {\n    get: function () {\n      return this._enabled;\n    },\n    set: function (value) {\n      this.dirty = this._enabled !== value;\n      this._enabled = value;\n    },\n  },\n\n  /**\n   * Determines if a normal bias will be applied to shadows.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {boolean}\n   * @default true\n   */\n  normalOffset: {\n    get: function () {\n      return this._normalOffset;\n    },\n    set: function (value) {\n      this.dirty = this._normalOffset !== value;\n      this._normalOffset = value;\n      this._terrainBias.normalOffset = value;\n      this._primitiveBias.normalOffset = value;\n      this._pointBias.normalOffset = value;\n    },\n  },\n\n  /**\n   * Determines if soft shadows are enabled. Uses pcf filtering which requires more texture reads and may hurt performance.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {boolean}\n   * @default false\n   */\n  softShadows: {\n    get: function () {\n      return this._softShadows;\n    },\n    set: function (value) {\n      this.dirty = this._softShadows !== value;\n      this._softShadows = value;\n    },\n  },\n\n  /**\n   * The width and height, in pixels, of each shadow map.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {number}\n   * @default 2048\n   */\n  size: {\n    get: function () {\n      return this._size;\n    },\n    set: function (value) {\n      resize(this, value);\n    },\n  },\n\n  /**\n   * Whether the shadow map is out of view of the scene camera.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  outOfView: {\n    get: function () {\n      return this._outOfView;\n    },\n  },\n\n  /**\n   * The culling volume of the shadow frustum.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {CullingVolume}\n   * @readonly\n   * @private\n   */\n  shadowMapCullingVolume: {\n    get: function () {\n      return this._shadowMapCullingVolume;\n    },\n  },\n\n  /**\n   * The passes used for rendering shadows. Each face of a point light or each cascade for a cascaded shadow map is a separate pass.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {ShadowPass[]}\n   * @readonly\n   * @private\n   */\n  passes: {\n    get: function () {\n      return this._passes;\n    },\n  },\n\n  /**\n   * Whether the light source is a point light.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  isPointLight: {\n    get: function () {\n      return this._isPointLight;\n    },\n  },\n\n  /**\n   * Debug option for visualizing the cascades by color.\n   *\n   * @memberof ShadowMap.prototype\n   * @type {boolean}\n   * @default false\n   * @private\n   */\n  debugCascadeColors: {\n    get: function () {\n      return this._debugCascadeColors;\n    },\n    set: function (value) {\n      this.dirty = this._debugCascadeColors !== value;\n      this._debugCascadeColors = value;\n    },\n  },\n});\n\nfunction destroyFramebuffer(shadowMap) {\n  const length = shadowMap._passes.length;\n  for (let i = 0; i < length; ++i) {\n    const pass = shadowMap._passes[i];\n    const framebuffer = pass.framebuffer;\n    if (defined(framebuffer) && !framebuffer.isDestroyed()) {\n      framebuffer.destroy();\n    }\n    pass.framebuffer = undefined;\n  }\n\n  // Destroy the framebuffer attachments\n  shadowMap._depthAttachment =\n    shadowMap._depthAttachment && shadowMap._depthAttachment.destroy();\n  shadowMap._colorAttachment =\n    shadowMap._colorAttachment && shadowMap._colorAttachment.destroy();\n}\n\nfunction createFramebufferColor(shadowMap, context) {\n  const depthRenderbuffer = new Renderbuffer({\n    context: context,\n    width: shadowMap._textureSize.x,\n    height: shadowMap._textureSize.y,\n    format: RenderbufferFormat.DEPTH_COMPONENT16,\n  });\n\n  const colorTexture = new Texture({\n    context: context,\n    width: shadowMap._textureSize.x,\n    height: shadowMap._textureSize.y,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    sampler: Sampler.NEAREST,\n  });\n\n  const framebuffer = new Framebuffer({\n    context: context,\n    depthRenderbuffer: depthRenderbuffer,\n    colorTextures: [colorTexture],\n    destroyAttachments: false,\n  });\n\n  const length = shadowMap._passes.length;\n  for (let i = 0; i < length; ++i) {\n    const pass = shadowMap._passes[i];\n    pass.framebuffer = framebuffer;\n    pass.passState.framebuffer = framebuffer;\n  }\n\n  shadowMap._shadowMapTexture = colorTexture;\n  shadowMap._depthAttachment = depthRenderbuffer;\n  shadowMap._colorAttachment = colorTexture;\n}\n\nfunction createFramebufferDepth(shadowMap, context) {\n  const depthStencilTexture = new Texture({\n    context: context,\n    width: shadowMap._textureSize.x,\n    height: shadowMap._textureSize.y,\n    pixelFormat: PixelFormat.DEPTH_STENCIL,\n    pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n    sampler: Sampler.NEAREST,\n  });\n\n  const framebuffer = new Framebuffer({\n    context: context,\n    depthStencilTexture: depthStencilTexture,\n    destroyAttachments: false,\n  });\n\n  const length = shadowMap._passes.length;\n  for (let i = 0; i < length; ++i) {\n    const pass = shadowMap._passes[i];\n    pass.framebuffer = framebuffer;\n    pass.passState.framebuffer = framebuffer;\n  }\n\n  shadowMap._shadowMapTexture = depthStencilTexture;\n  shadowMap._depthAttachment = depthStencilTexture;\n}\n\nfunction createFramebufferCube(shadowMap, context) {\n  const depthRenderbuffer = new Renderbuffer({\n    context: context,\n    width: shadowMap._textureSize.x,\n    height: shadowMap._textureSize.y,\n    format: RenderbufferFormat.DEPTH_COMPONENT16,\n  });\n\n  const cubeMap = new CubeMap({\n    context: context,\n    width: shadowMap._textureSize.x,\n    height: shadowMap._textureSize.y,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    sampler: Sampler.NEAREST,\n  });\n\n  const faces = [\n    cubeMap.negativeX,\n    cubeMap.negativeY,\n    cubeMap.negativeZ,\n    cubeMap.positiveX,\n    cubeMap.positiveY,\n    cubeMap.positiveZ,\n  ];\n\n  for (let i = 0; i < 6; ++i) {\n    const framebuffer = new Framebuffer({\n      context: context,\n      depthRenderbuffer: depthRenderbuffer,\n      colorTextures: [faces[i]],\n      destroyAttachments: false,\n    });\n    const pass = shadowMap._passes[i];\n    pass.framebuffer = framebuffer;\n    pass.passState.framebuffer = framebuffer;\n  }\n\n  shadowMap._shadowMapTexture = cubeMap;\n  shadowMap._depthAttachment = depthRenderbuffer;\n  shadowMap._colorAttachment = cubeMap;\n}\n\nfunction createFramebuffer(shadowMap, context) {\n  if (shadowMap._isPointLight) {\n    createFramebufferCube(shadowMap, context);\n  } else if (shadowMap._usesDepthTexture) {\n    createFramebufferDepth(shadowMap, context);\n  } else {\n    createFramebufferColor(shadowMap, context);\n  }\n}\n\nfunction checkFramebuffer(shadowMap, context) {\n  // Attempt to make an FBO with only a depth texture. If it fails, fallback to a color texture.\n  if (\n    shadowMap._usesDepthTexture &&\n    shadowMap._passes[0].framebuffer.status !==\n      WebGLConstants.FRAMEBUFFER_COMPLETE\n  ) {\n    shadowMap._usesDepthTexture = false;\n    createRenderStates(shadowMap);\n    destroyFramebuffer(shadowMap);\n    createFramebuffer(shadowMap, context);\n  }\n}\n\nfunction updateFramebuffer(shadowMap, context) {\n  if (\n    !defined(shadowMap._passes[0].framebuffer) ||\n    shadowMap._shadowMapTexture.width !== shadowMap._textureSize.x\n  ) {\n    destroyFramebuffer(shadowMap);\n    createFramebuffer(shadowMap, context);\n    checkFramebuffer(shadowMap, context);\n    clearFramebuffer(shadowMap, context);\n  }\n}\n\nfunction clearFramebuffer(shadowMap, context, shadowPass) {\n  shadowPass = shadowPass ?? 0;\n  if (shadowMap._isPointLight || shadowPass === 0) {\n    shadowMap._clearCommand.framebuffer =\n      shadowMap._passes[shadowPass].framebuffer;\n    shadowMap._clearCommand.execute(context, shadowMap._clearPassState);\n  }\n}\n\nfunction resize(shadowMap, size) {\n  shadowMap._size = size;\n  const passes = shadowMap._passes;\n  const numberOfPasses = passes.length;\n  const textureSize = shadowMap._textureSize;\n\n  if (shadowMap._isPointLight) {\n    size =\n      ContextLimits.maximumCubeMapSize >= size\n        ? size\n        : ContextLimits.maximumCubeMapSize;\n    textureSize.x = size;\n    textureSize.y = size;\n    const faceViewport = new BoundingRectangle(0, 0, size, size);\n    passes[0].passState.viewport = faceViewport;\n    passes[1].passState.viewport = faceViewport;\n    passes[2].passState.viewport = faceViewport;\n    passes[3].passState.viewport = faceViewport;\n    passes[4].passState.viewport = faceViewport;\n    passes[5].passState.viewport = faceViewport;\n  } else if (numberOfPasses === 1) {\n    // +----+\n    // |  1 |\n    // +----+\n    size =\n      ContextLimits.maximumTextureSize >= size\n        ? size\n        : ContextLimits.maximumTextureSize;\n    textureSize.x = size;\n    textureSize.y = size;\n    passes[0].passState.viewport = new BoundingRectangle(0, 0, size, size);\n  } else if (numberOfPasses === 4) {\n    // +----+----+\n    // |  3 |  4 |\n    // +----+----+\n    // |  1 |  2 |\n    // +----+----+\n    size =\n      ContextLimits.maximumTextureSize >= size * 2\n        ? size\n        : ContextLimits.maximumTextureSize / 2;\n    textureSize.x = size * 2;\n    textureSize.y = size * 2;\n    passes[0].passState.viewport = new BoundingRectangle(0, 0, size, size);\n    passes[1].passState.viewport = new BoundingRectangle(size, 0, size, size);\n    passes[2].passState.viewport = new BoundingRectangle(0, size, size, size);\n    passes[3].passState.viewport = new BoundingRectangle(\n      size,\n      size,\n      size,\n      size,\n    );\n  }\n\n  // Update clear pass state\n  shadowMap._clearPassState.viewport = new BoundingRectangle(\n    0,\n    0,\n    textureSize.x,\n    textureSize.y,\n  );\n\n  // Transforms shadow coordinates [0, 1] into the pass's region of the texture\n  for (let i = 0; i < numberOfPasses; ++i) {\n    const pass = passes[i];\n    const viewport = pass.passState.viewport;\n    const biasX = viewport.x / textureSize.x;\n    const biasY = viewport.y / textureSize.y;\n    const scaleX = viewport.width / textureSize.x;\n    const scaleY = viewport.height / textureSize.y;\n    pass.textureOffsets = new Matrix4(\n      scaleX,\n      0.0,\n      0.0,\n      biasX,\n      0.0,\n      scaleY,\n      0.0,\n      biasY,\n      0.0,\n      0.0,\n      1.0,\n      0.0,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    );\n  }\n}\n\nconst scratchViewport = new BoundingRectangle();\n\nfunction createDebugShadowViewCommand(shadowMap, context) {\n  let fs;\n  if (shadowMap._isPointLight) {\n    fs =\n      \"uniform samplerCube shadowMap_textureCube; \\n\" +\n      \"in vec2 v_textureCoordinates; \\n\" +\n      \"void main() \\n\" +\n      \"{ \\n\" +\n      \"    vec2 uv = v_textureCoordinates; \\n\" +\n      \"    vec3 dir; \\n\" +\n      \" \\n\" +\n      \"    if (uv.y < 0.5) \\n\" +\n      \"    { \\n\" +\n      \"        if (uv.x < 0.333) \\n\" +\n      \"        { \\n\" +\n      \"            dir.x = -1.0; \\n\" +\n      \"            dir.y = uv.x * 6.0 - 1.0; \\n\" +\n      \"            dir.z = uv.y * 4.0 - 1.0; \\n\" +\n      \"        } \\n\" +\n      \"        else if (uv.x < 0.666) \\n\" +\n      \"        { \\n\" +\n      \"            dir.y = -1.0; \\n\" +\n      \"            dir.x = uv.x * 6.0 - 3.0; \\n\" +\n      \"            dir.z = uv.y * 4.0 - 1.0; \\n\" +\n      \"        } \\n\" +\n      \"        else \\n\" +\n      \"        { \\n\" +\n      \"            dir.z = -1.0; \\n\" +\n      \"            dir.x = uv.x * 6.0 - 5.0; \\n\" +\n      \"            dir.y = uv.y * 4.0 - 1.0; \\n\" +\n      \"        } \\n\" +\n      \"    } \\n\" +\n      \"    else \\n\" +\n      \"    { \\n\" +\n      \"        if (uv.x < 0.333) \\n\" +\n      \"        { \\n\" +\n      \"            dir.x = 1.0; \\n\" +\n      \"            dir.y = uv.x * 6.0 - 1.0; \\n\" +\n      \"            dir.z = uv.y * 4.0 - 3.0; \\n\" +\n      \"        } \\n\" +\n      \"        else if (uv.x < 0.666) \\n\" +\n      \"        { \\n\" +\n      \"            dir.y = 1.0; \\n\" +\n      \"            dir.x = uv.x * 6.0 - 3.0; \\n\" +\n      \"            dir.z = uv.y * 4.0 - 3.0; \\n\" +\n      \"        } \\n\" +\n      \"        else \\n\" +\n      \"        { \\n\" +\n      \"            dir.z = 1.0; \\n\" +\n      \"            dir.x = uv.x * 6.0 - 5.0; \\n\" +\n      \"            dir.y = uv.y * 4.0 - 3.0; \\n\" +\n      \"        } \\n\" +\n      \"    } \\n\" +\n      \" \\n\" +\n      \"    float shadow = czm_unpackDepth(czm_textureCube(shadowMap_textureCube, dir)); \\n\" +\n      \"    out_FragColor = vec4(vec3(shadow), 1.0); \\n\" +\n      \"} \\n\";\n  } else {\n    fs =\n      `${\n        \"uniform sampler2D shadowMap_texture; \\n\" +\n        \"in vec2 v_textureCoordinates; \\n\" +\n        \"void main() \\n\" +\n        \"{ \\n\"\n      }${\n        shadowMap._usesDepthTexture\n          ? \"    float shadow = texture(shadowMap_texture, v_textureCoordinates).r; \\n\"\n          : \"    float shadow = czm_unpackDepth(texture(shadowMap_texture, v_textureCoordinates)); \\n\"\n      }    out_FragColor = vec4(vec3(shadow), 1.0); \\n` + `} \\n`;\n  }\n\n  const drawCommand = context.createViewportQuadCommand(fs, {\n    uniformMap: {\n      shadowMap_texture: function () {\n        return shadowMap._shadowMapTexture;\n      },\n      shadowMap_textureCube: function () {\n        return shadowMap._shadowMapTexture;\n      },\n    },\n  });\n  drawCommand.pass = Pass.OVERLAY;\n  return drawCommand;\n}\n\nfunction updateDebugShadowViewCommand(shadowMap, frameState) {\n  // Draws the shadow map on the bottom-right corner of the screen\n  const context = frameState.context;\n  const screenWidth = frameState.context.drawingBufferWidth;\n  const screenHeight = frameState.context.drawingBufferHeight;\n  const size = Math.min(screenWidth, screenHeight) * 0.3;\n\n  const viewport = scratchViewport;\n  viewport.x = screenWidth - size;\n  viewport.y = 0;\n  viewport.width = size;\n  viewport.height = size;\n\n  let debugCommand = shadowMap._debugShadowViewCommand;\n  if (!defined(debugCommand)) {\n    debugCommand = createDebugShadowViewCommand(shadowMap, context);\n    shadowMap._debugShadowViewCommand = debugCommand;\n  }\n\n  // Get a new RenderState for the updated viewport size\n  if (\n    !defined(debugCommand.renderState) ||\n    !BoundingRectangle.equals(debugCommand.renderState.viewport, viewport)\n  ) {\n    debugCommand.renderState = RenderState.fromCache({\n      viewport: BoundingRectangle.clone(viewport),\n    });\n  }\n\n  frameState.commandList.push(shadowMap._debugShadowViewCommand);\n}\n\nconst frustumCornersNDC = new Array(8);\nfrustumCornersNDC[0] = new Cartesian4(-1.0, -1.0, -1.0, 1.0);\nfrustumCornersNDC[1] = new Cartesian4(1.0, -1.0, -1.0, 1.0);\nfrustumCornersNDC[2] = new Cartesian4(1.0, 1.0, -1.0, 1.0);\nfrustumCornersNDC[3] = new Cartesian4(-1.0, 1.0, -1.0, 1.0);\nfrustumCornersNDC[4] = new Cartesian4(-1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[5] = new Cartesian4(1.0, -1.0, 1.0, 1.0);\nfrustumCornersNDC[6] = new Cartesian4(1.0, 1.0, 1.0, 1.0);\nfrustumCornersNDC[7] = new Cartesian4(-1.0, 1.0, 1.0, 1.0);\n\nconst scratchMatrix = new Matrix4();\nconst scratchFrustumCorners = new Array(8);\nfor (let i = 0; i < 8; ++i) {\n  scratchFrustumCorners[i] = new Cartesian4();\n}\n\nfunction createDebugPointLight(modelMatrix, color) {\n  const box = new GeometryInstance({\n    geometry: new BoxOutlineGeometry({\n      minimum: new Cartesian3(-0.5, -0.5, -0.5),\n      maximum: new Cartesian3(0.5, 0.5, 0.5),\n    }),\n    attributes: {\n      color: ColorGeometryInstanceAttribute.fromColor(color),\n    },\n  });\n\n  const sphere = new GeometryInstance({\n    geometry: new SphereOutlineGeometry({\n      radius: 0.5,\n    }),\n    attributes: {\n      color: ColorGeometryInstanceAttribute.fromColor(color),\n    },\n  });\n\n  return new Primitive({\n    geometryInstances: [box, sphere],\n    appearance: new PerInstanceColorAppearance({\n      translucent: false,\n      flat: true,\n    }),\n    asynchronous: false,\n    modelMatrix: modelMatrix,\n  });\n}\n\nconst debugOutlineColors = [Color.RED, Color.GREEN, Color.BLUE, Color.MAGENTA];\nconst scratchScale = new Cartesian3();\n\nfunction applyDebugSettings(shadowMap, frameState) {\n  updateDebugShadowViewCommand(shadowMap, frameState);\n\n  const enterFreezeFrame =\n    shadowMap.debugFreezeFrame && !shadowMap._debugFreezeFrame;\n  shadowMap._debugFreezeFrame = shadowMap.debugFreezeFrame;\n\n  // Draw scene camera in freeze frame mode\n  if (shadowMap.debugFreezeFrame) {\n    if (enterFreezeFrame) {\n      // Recreate debug camera when entering freeze frame mode\n      shadowMap._debugCameraFrustum =\n        shadowMap._debugCameraFrustum &&\n        shadowMap._debugCameraFrustum.destroy();\n      shadowMap._debugCameraFrustum = new DebugCameraPrimitive({\n        camera: shadowMap._sceneCamera,\n        color: Color.CYAN,\n        updateOnChange: false,\n      });\n    }\n    shadowMap._debugCameraFrustum.update(frameState);\n  }\n\n  if (shadowMap._cascadesEnabled) {\n    // Draw cascades only in freeze frame mode\n    if (shadowMap.debugFreezeFrame) {\n      if (enterFreezeFrame) {\n        // Recreate debug frustum when entering freeze frame mode\n        shadowMap._debugLightFrustum =\n          shadowMap._debugLightFrustum &&\n          shadowMap._debugLightFrustum.destroy();\n        shadowMap._debugLightFrustum = new DebugCameraPrimitive({\n          camera: shadowMap._shadowMapCamera,\n          color: Color.YELLOW,\n          updateOnChange: false,\n        });\n      }\n      shadowMap._debugLightFrustum.update(frameState);\n\n      for (let i = 0; i < shadowMap._numberOfCascades; ++i) {\n        if (enterFreezeFrame) {\n          // Recreate debug frustum when entering freeze frame mode\n          shadowMap._debugCascadeFrustums[i] =\n            shadowMap._debugCascadeFrustums[i] &&\n            shadowMap._debugCascadeFrustums[i].destroy();\n          shadowMap._debugCascadeFrustums[i] = new DebugCameraPrimitive({\n            camera: shadowMap._passes[i].camera,\n            color: debugOutlineColors[i],\n            updateOnChange: false,\n          });\n        }\n        shadowMap._debugCascadeFrustums[i].update(frameState);\n      }\n    }\n  } else if (shadowMap._isPointLight) {\n    if (!defined(shadowMap._debugLightFrustum) || shadowMap._needsUpdate) {\n      const translation = shadowMap._shadowMapCamera.positionWC;\n      const rotation = Quaternion.IDENTITY;\n      const uniformScale = shadowMap._pointLightRadius * 2.0;\n      const scale = Cartesian3.fromElements(\n        uniformScale,\n        uniformScale,\n        uniformScale,\n        scratchScale,\n      );\n      const modelMatrix = Matrix4.fromTranslationQuaternionRotationScale(\n        translation,\n        rotation,\n        scale,\n        scratchMatrix,\n      );\n\n      shadowMap._debugLightFrustum =\n        shadowMap._debugLightFrustum && shadowMap._debugLightFrustum.destroy();\n      shadowMap._debugLightFrustum = createDebugPointLight(\n        modelMatrix,\n        Color.YELLOW,\n      );\n    }\n    shadowMap._debugLightFrustum.update(frameState);\n  } else {\n    if (!defined(shadowMap._debugLightFrustum) || shadowMap._needsUpdate) {\n      shadowMap._debugLightFrustum = new DebugCameraPrimitive({\n        camera: shadowMap._shadowMapCamera,\n        color: Color.YELLOW,\n        updateOnChange: false,\n      });\n    }\n    shadowMap._debugLightFrustum.update(frameState);\n  }\n}\n\nfunction ShadowMapCamera() {\n  this.viewMatrix = new Matrix4();\n  this.inverseViewMatrix = new Matrix4();\n  this.frustum = undefined;\n  this.positionCartographic = new Cartographic();\n  this.positionWC = new Cartesian3();\n  this.directionWC = Cartesian3.clone(Cartesian3.UNIT_Z);\n  this.upWC = Cartesian3.clone(Cartesian3.UNIT_Y);\n  this.rightWC = Cartesian3.clone(Cartesian3.UNIT_X);\n  this.viewProjectionMatrix = new Matrix4();\n}\n\nShadowMapCamera.prototype.clone = function (camera) {\n  Matrix4.clone(camera.viewMatrix, this.viewMatrix);\n  Matrix4.clone(camera.inverseViewMatrix, this.inverseViewMatrix);\n  this.frustum = camera.frustum.clone(this.frustum);\n  Cartographic.clone(camera.positionCartographic, this.positionCartographic);\n  Cartesian3.clone(camera.positionWC, this.positionWC);\n  Cartesian3.clone(camera.directionWC, this.directionWC);\n  Cartesian3.clone(camera.upWC, this.upWC);\n  Cartesian3.clone(camera.rightWC, this.rightWC);\n};\n\n// Converts from NDC space to texture space\nconst scaleBiasMatrix = new Matrix4(\n  0.5,\n  0.0,\n  0.0,\n  0.5,\n  0.0,\n  0.5,\n  0.0,\n  0.5,\n  0.0,\n  0.0,\n  0.5,\n  0.5,\n  0.0,\n  0.0,\n  0.0,\n  1.0,\n);\n\nShadowMapCamera.prototype.getViewProjection = function () {\n  const view = this.viewMatrix;\n  const projection = this.frustum.projectionMatrix;\n  Matrix4.multiply(projection, view, this.viewProjectionMatrix);\n  Matrix4.multiply(\n    scaleBiasMatrix,\n    this.viewProjectionMatrix,\n    this.viewProjectionMatrix,\n  );\n  return this.viewProjectionMatrix;\n};\n\nconst scratchSplits = new Array(5);\nconst scratchFrustum = new PerspectiveFrustum();\nconst scratchCascadeDistances = new Array(4);\nconst scratchMin = new Cartesian3();\nconst scratchMax = new Cartesian3();\n\nfunction computeCascades(shadowMap, frameState) {\n  const shadowMapCamera = shadowMap._shadowMapCamera;\n  const sceneCamera = shadowMap._sceneCamera;\n  const cameraNear = sceneCamera.frustum.near;\n  const cameraFar = sceneCamera.frustum.far;\n  const numberOfCascades = shadowMap._numberOfCascades;\n\n  // Split cascades. Use a mix of linear and log splits.\n  let i;\n  const range = cameraFar - cameraNear;\n  const ratio = cameraFar / cameraNear;\n\n  let lambda = 0.9;\n  let clampCascadeDistances = false;\n\n  // When the camera is close to a relatively small model, provide more detail in the closer cascades.\n  // If the camera is near or inside a large model, such as the root tile of a city, then use the default values.\n  // To get the most accurate cascade splits we would need to find the min and max values from the depth texture.\n  if (frameState.shadowState.closestObjectSize < 200.0) {\n    clampCascadeDistances = true;\n    lambda = 0.9;\n  }\n\n  const cascadeDistances = scratchCascadeDistances;\n  const splits = scratchSplits;\n  splits[0] = cameraNear;\n  splits[numberOfCascades] = cameraFar;\n\n  // Find initial splits\n  for (i = 0; i < numberOfCascades; ++i) {\n    const p = (i + 1) / numberOfCascades;\n    const logScale = cameraNear * Math.pow(ratio, p);\n    const uniformScale = cameraNear + range * p;\n    const split = CesiumMath.lerp(uniformScale, logScale, lambda);\n    splits[i + 1] = split;\n    cascadeDistances[i] = split - splits[i];\n  }\n\n  if (clampCascadeDistances) {\n    // Clamp each cascade to its maximum distance\n    for (i = 0; i < numberOfCascades; ++i) {\n      cascadeDistances[i] = Math.min(\n        cascadeDistances[i],\n        shadowMap._maximumCascadeDistances[i],\n      );\n    }\n\n    // Recompute splits\n    let distance = splits[0];\n    for (i = 0; i < numberOfCascades - 1; ++i) {\n      distance += cascadeDistances[i];\n      splits[i + 1] = distance;\n    }\n  }\n\n  Cartesian4.unpack(splits, 0, shadowMap._cascadeSplits[0]);\n  Cartesian4.unpack(splits, 1, shadowMap._cascadeSplits[1]);\n  Cartesian4.unpack(cascadeDistances, 0, shadowMap._cascadeDistances);\n\n  const shadowFrustum = shadowMapCamera.frustum;\n  const left = shadowFrustum.left;\n  const right = shadowFrustum.right;\n  const bottom = shadowFrustum.bottom;\n  const top = shadowFrustum.top;\n  const near = shadowFrustum.near;\n  const far = shadowFrustum.far;\n\n  const position = shadowMapCamera.positionWC;\n  const direction = shadowMapCamera.directionWC;\n  const up = shadowMapCamera.upWC;\n\n  const cascadeSubFrustum = sceneCamera.frustum.clone(scratchFrustum);\n  const shadowViewProjection = shadowMapCamera.getViewProjection();\n\n  for (i = 0; i < numberOfCascades; ++i) {\n    // Find the bounding box of the camera sub-frustum in shadow map texture space\n    cascadeSubFrustum.near = splits[i];\n    cascadeSubFrustum.far = splits[i + 1];\n    const viewProjection = Matrix4.multiply(\n      cascadeSubFrustum.projectionMatrix,\n      sceneCamera.viewMatrix,\n      scratchMatrix,\n    );\n    const inverseViewProjection = Matrix4.inverse(\n      viewProjection,\n      scratchMatrix,\n    );\n    const shadowMapMatrix = Matrix4.multiply(\n      shadowViewProjection,\n      inverseViewProjection,\n      scratchMatrix,\n    );\n\n    // Project each corner from camera NDC space to shadow map texture space. Min and max will be from 0 to 1.\n    const min = Cartesian3.fromElements(\n      Number.MAX_VALUE,\n      Number.MAX_VALUE,\n      Number.MAX_VALUE,\n      scratchMin,\n    );\n    const max = Cartesian3.fromElements(\n      -Number.MAX_VALUE,\n      -Number.MAX_VALUE,\n      -Number.MAX_VALUE,\n      scratchMax,\n    );\n\n    for (let k = 0; k < 8; ++k) {\n      const corner = Cartesian4.clone(\n        frustumCornersNDC[k],\n        scratchFrustumCorners[k],\n      );\n      Matrix4.multiplyByVector(shadowMapMatrix, corner, corner);\n      Cartesian3.divideByScalar(corner, corner.w, corner); // Handle the perspective divide\n      Cartesian3.minimumByComponent(corner, min, min);\n      Cartesian3.maximumByComponent(corner, max, max);\n    }\n\n    // Limit light-space coordinates to the [0, 1] range\n    min.x = Math.max(min.x, 0.0);\n    min.y = Math.max(min.y, 0.0);\n    min.z = 0.0; // Always start cascade frustum at the top of the light frustum to capture objects in the light's path\n    max.x = Math.min(max.x, 1.0);\n    max.y = Math.min(max.y, 1.0);\n    max.z = Math.min(max.z, 1.0);\n\n    const pass = shadowMap._passes[i];\n    const cascadeCamera = pass.camera;\n    cascadeCamera.clone(shadowMapCamera); // PERFORMANCE_IDEA : could do a shallow clone for all properties except the frustum\n\n    const frustum = cascadeCamera.frustum;\n    frustum.left = left + min.x * (right - left);\n    frustum.right = left + max.x * (right - left);\n    frustum.bottom = bottom + min.y * (top - bottom);\n    frustum.top = bottom + max.y * (top - bottom);\n    frustum.near = near + min.z * (far - near);\n    frustum.far = near + max.z * (far - near);\n\n    pass.cullingVolume = cascadeCamera.frustum.computeCullingVolume(\n      position,\n      direction,\n      up,\n    );\n\n    // Transforms from eye space to the cascade's texture space\n    const cascadeMatrix = shadowMap._cascadeMatrices[i];\n    Matrix4.multiply(\n      cascadeCamera.getViewProjection(),\n      sceneCamera.inverseViewMatrix,\n      cascadeMatrix,\n    );\n    Matrix4.multiply(pass.textureOffsets, cascadeMatrix, cascadeMatrix);\n  }\n}\n\nconst scratchLightView = new Matrix4();\nconst scratchRight = new Cartesian3();\nconst scratchUp = new Cartesian3();\nconst scratchTranslation = new Cartesian3();\n\nfunction fitShadowMapToScene(shadowMap, frameState) {\n  const shadowMapCamera = shadowMap._shadowMapCamera;\n  const sceneCamera = shadowMap._sceneCamera;\n\n  // 1. First find a tight bounding box in light space that contains the entire camera frustum.\n  const viewProjection = Matrix4.multiply(\n    sceneCamera.frustum.projectionMatrix,\n    sceneCamera.viewMatrix,\n    scratchMatrix,\n  );\n  const inverseViewProjection = Matrix4.inverse(viewProjection, scratchMatrix);\n\n  // Start to construct the light view matrix. Set translation later once the bounding box is found.\n  const lightDir = shadowMapCamera.directionWC;\n  let lightUp = sceneCamera.directionWC; // Align shadows to the camera view.\n  if (Cartesian3.equalsEpsilon(lightDir, lightUp, CesiumMath.EPSILON10)) {\n    lightUp = sceneCamera.upWC;\n  }\n  const lightRight = Cartesian3.cross(lightDir, lightUp, scratchRight);\n  lightUp = Cartesian3.cross(lightRight, lightDir, scratchUp); // Recalculate up now that right is derived\n  Cartesian3.normalize(lightUp, lightUp);\n  Cartesian3.normalize(lightRight, lightRight);\n  const lightPosition = Cartesian3.fromElements(\n    0.0,\n    0.0,\n    0.0,\n    scratchTranslation,\n  );\n\n  let lightView = Matrix4.computeView(\n    lightPosition,\n    lightDir,\n    lightUp,\n    lightRight,\n    scratchLightView,\n  );\n  const cameraToLight = Matrix4.multiply(\n    lightView,\n    inverseViewProjection,\n    scratchMatrix,\n  );\n\n  // Project each corner from NDC space to light view space, and calculate a min and max in light view space\n  const min = Cartesian3.fromElements(\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n    Number.MAX_VALUE,\n    scratchMin,\n  );\n  const max = Cartesian3.fromElements(\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n    -Number.MAX_VALUE,\n    scratchMax,\n  );\n\n  for (let i = 0; i < 8; ++i) {\n    const corner = Cartesian4.clone(\n      frustumCornersNDC[i],\n      scratchFrustumCorners[i],\n    );\n    Matrix4.multiplyByVector(cameraToLight, corner, corner);\n    Cartesian3.divideByScalar(corner, corner.w, corner); // Handle the perspective divide\n    Cartesian3.minimumByComponent(corner, min, min);\n    Cartesian3.maximumByComponent(corner, max, max);\n  }\n\n  // 2. Set bounding box back to include objects in the light's view\n  max.z += 1000.0; // Note: in light space, a positive number is behind the camera\n  min.z -= 10.0; // Extend the shadow volume forward slightly to avoid problems right at the edge\n\n  // 3. Adjust light view matrix so that it is centered on the bounding volume\n  const translation = scratchTranslation;\n  translation.x = -(0.5 * (min.x + max.x));\n  translation.y = -(0.5 * (min.y + max.y));\n  translation.z = -max.z;\n\n  const translationMatrix = Matrix4.fromTranslation(translation, scratchMatrix);\n  lightView = Matrix4.multiply(translationMatrix, lightView, lightView);\n\n  // 4. Create an orthographic frustum that covers the bounding box extents\n  const halfWidth = 0.5 * (max.x - min.x);\n  const halfHeight = 0.5 * (max.y - min.y);\n  const depth = max.z - min.z;\n\n  const frustum = shadowMapCamera.frustum;\n  frustum.left = -halfWidth;\n  frustum.right = halfWidth;\n  frustum.bottom = -halfHeight;\n  frustum.top = halfHeight;\n  frustum.near = 0.01;\n  frustum.far = depth;\n\n  // 5. Update the shadow map camera\n  Matrix4.clone(lightView, shadowMapCamera.viewMatrix);\n  Matrix4.inverse(lightView, shadowMapCamera.inverseViewMatrix);\n  Matrix4.getTranslation(\n    shadowMapCamera.inverseViewMatrix,\n    shadowMapCamera.positionWC,\n  );\n  frameState.mapProjection.ellipsoid.cartesianToCartographic(\n    shadowMapCamera.positionWC,\n    shadowMapCamera.positionCartographic,\n  );\n  Cartesian3.clone(lightDir, shadowMapCamera.directionWC);\n  Cartesian3.clone(lightUp, shadowMapCamera.upWC);\n  Cartesian3.clone(lightRight, shadowMapCamera.rightWC);\n}\n\nconst directions = [\n  new Cartesian3(-1.0, 0.0, 0.0),\n  new Cartesian3(0.0, -1.0, 0.0),\n  new Cartesian3(0.0, 0.0, -1.0),\n  new Cartesian3(1.0, 0.0, 0.0),\n  new Cartesian3(0.0, 1.0, 0.0),\n  new Cartesian3(0.0, 0.0, 1.0),\n];\n\nconst ups = [\n  new Cartesian3(0.0, -1.0, 0.0),\n  new Cartesian3(0.0, 0.0, -1.0),\n  new Cartesian3(0.0, -1.0, 0.0),\n  new Cartesian3(0.0, -1.0, 0.0),\n  new Cartesian3(0.0, 0.0, 1.0),\n  new Cartesian3(0.0, -1.0, 0.0),\n];\n\nconst rights = [\n  new Cartesian3(0.0, 0.0, 1.0),\n  new Cartesian3(1.0, 0.0, 0.0),\n  new Cartesian3(-1.0, 0.0, 0.0),\n  new Cartesian3(0.0, 0.0, -1.0),\n  new Cartesian3(1.0, 0.0, 0.0),\n  new Cartesian3(1.0, 0.0, 0.0),\n];\n\nfunction computeOmnidirectional(shadowMap, frameState) {\n  // All sides share the same frustum\n  const frustum = new PerspectiveFrustum();\n  frustum.fov = CesiumMath.PI_OVER_TWO;\n  frustum.near = 1.0;\n  frustum.far = shadowMap._pointLightRadius;\n  frustum.aspectRatio = 1.0;\n\n  for (let i = 0; i < 6; ++i) {\n    const camera = shadowMap._passes[i].camera;\n    camera.positionWC = shadowMap._shadowMapCamera.positionWC;\n    camera.positionCartographic =\n      frameState.mapProjection.ellipsoid.cartesianToCartographic(\n        camera.positionWC,\n        camera.positionCartographic,\n      );\n    camera.directionWC = directions[i];\n    camera.upWC = ups[i];\n    camera.rightWC = rights[i];\n\n    Matrix4.computeView(\n      camera.positionWC,\n      camera.directionWC,\n      camera.upWC,\n      camera.rightWC,\n      camera.viewMatrix,\n    );\n    Matrix4.inverse(camera.viewMatrix, camera.inverseViewMatrix);\n\n    camera.frustum = frustum;\n  }\n}\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchBoundingSphere = new BoundingSphere();\nconst scratchCenter = scratchBoundingSphere.center;\n\nfunction checkVisibility(shadowMap, frameState) {\n  const sceneCamera = shadowMap._sceneCamera;\n  const shadowMapCamera = shadowMap._shadowMapCamera;\n\n  const boundingSphere = scratchBoundingSphere;\n\n  // Check whether the shadow map is in view and needs to be updated\n  if (shadowMap._cascadesEnabled) {\n    // If the nearest shadow receiver is further than the shadow map's maximum distance then the shadow map is out of view.\n    if (sceneCamera.frustum.near >= shadowMap.maximumDistance) {\n      shadowMap._outOfView = true;\n      shadowMap._needsUpdate = false;\n      return;\n    }\n\n    // If the light source is below the horizon then the shadow map is out of view\n    const surfaceNormal =\n      frameState.mapProjection.ellipsoid.geodeticSurfaceNormal(\n        sceneCamera.positionWC,\n        scratchCartesian1,\n      );\n    const lightDirection = Cartesian3.negate(\n      shadowMapCamera.directionWC,\n      scratchCartesian2,\n    );\n    const dot = Cartesian3.dot(surfaceNormal, lightDirection);\n    if (shadowMap.fadingEnabled) {\n      // Shadows start to fade out once the light gets closer to the horizon.\n      // At this point the globe uses vertex lighting alone to darken the surface.\n      const darknessAmount = CesiumMath.clamp(dot / 0.1, 0.0, 1.0);\n      shadowMap._darkness = CesiumMath.lerp(\n        1.0,\n        shadowMap.darkness,\n        darknessAmount,\n      );\n    } else {\n      shadowMap._darkness = shadowMap.darkness;\n    }\n\n    if (dot < 0.0) {\n      shadowMap._outOfView = true;\n      shadowMap._needsUpdate = false;\n      return;\n    }\n\n    // By default cascaded shadows need to update and are always in view\n    shadowMap._needsUpdate = true;\n    shadowMap._outOfView = false;\n  } else if (shadowMap._isPointLight) {\n    // Sphere-frustum intersection test\n    boundingSphere.center = shadowMapCamera.positionWC;\n    boundingSphere.radius = shadowMap._pointLightRadius;\n    shadowMap._outOfView =\n      frameState.cullingVolume.computeVisibility(boundingSphere) ===\n      Intersect.OUTSIDE;\n    shadowMap._needsUpdate =\n      !shadowMap._outOfView &&\n      !shadowMap._boundingSphere.equals(boundingSphere);\n    BoundingSphere.clone(boundingSphere, shadowMap._boundingSphere);\n  } else {\n    // Simplify frustum-frustum intersection test as a sphere-frustum test\n    const frustumRadius = shadowMapCamera.frustum.far / 2.0;\n    const frustumCenter = Cartesian3.add(\n      shadowMapCamera.positionWC,\n      Cartesian3.multiplyByScalar(\n        shadowMapCamera.directionWC,\n        frustumRadius,\n        scratchCenter,\n      ),\n      scratchCenter,\n    );\n    boundingSphere.center = frustumCenter;\n    boundingSphere.radius = frustumRadius;\n    shadowMap._outOfView =\n      frameState.cullingVolume.computeVisibility(boundingSphere) ===\n      Intersect.OUTSIDE;\n    shadowMap._needsUpdate =\n      !shadowMap._outOfView &&\n      !shadowMap._boundingSphere.equals(boundingSphere);\n    BoundingSphere.clone(boundingSphere, shadowMap._boundingSphere);\n  }\n}\n\nfunction updateCameras(shadowMap, frameState) {\n  const camera = frameState.camera; // The actual camera in the scene\n  const lightCamera = shadowMap._lightCamera; // The external camera representing the light source\n  const sceneCamera = shadowMap._sceneCamera; // Clone of camera, with clamped near and far planes\n  const shadowMapCamera = shadowMap._shadowMapCamera; // Camera representing the shadow volume, initially cloned from lightCamera\n\n  // Clone light camera into the shadow map camera\n  if (shadowMap._cascadesEnabled) {\n    Cartesian3.clone(lightCamera.directionWC, shadowMapCamera.directionWC);\n  } else if (shadowMap._isPointLight) {\n    Cartesian3.clone(lightCamera.positionWC, shadowMapCamera.positionWC);\n  } else {\n    shadowMapCamera.clone(lightCamera);\n  }\n\n  // Get the light direction in eye coordinates\n  const lightDirection = shadowMap._lightDirectionEC;\n  Matrix4.multiplyByPointAsVector(\n    camera.viewMatrix,\n    shadowMapCamera.directionWC,\n    lightDirection,\n  );\n  Cartesian3.normalize(lightDirection, lightDirection);\n  Cartesian3.negate(lightDirection, lightDirection);\n\n  // Get the light position in eye coordinates\n  Matrix4.multiplyByPoint(\n    camera.viewMatrix,\n    shadowMapCamera.positionWC,\n    shadowMap._lightPositionEC,\n  );\n  shadowMap._lightPositionEC.w = shadowMap._pointLightRadius;\n\n  // Get the near and far of the scene camera\n  let near;\n  let far;\n  if (shadowMap._fitNearFar) {\n    // shadowFar can be very large, so limit to shadowMap.maximumDistance\n    // Push the far plane slightly further than the near plane to avoid degenerate frustum\n    near = Math.min(\n      frameState.shadowState.nearPlane,\n      shadowMap.maximumDistance,\n    );\n    far = Math.min(frameState.shadowState.farPlane, shadowMap.maximumDistance);\n    far = Math.max(far, near + 1.0);\n  } else {\n    near = camera.frustum.near;\n    far = shadowMap.maximumDistance;\n  }\n\n  shadowMap._sceneCamera = Camera.clone(camera, sceneCamera);\n  camera.frustum.clone(shadowMap._sceneCamera.frustum);\n  shadowMap._sceneCamera.frustum.near = near;\n  shadowMap._sceneCamera.frustum.far = far;\n  shadowMap._distance = far - near;\n\n  checkVisibility(shadowMap, frameState);\n\n  if (!shadowMap._outOfViewPrevious && shadowMap._outOfView) {\n    shadowMap._needsUpdate = true;\n  }\n  shadowMap._outOfViewPrevious = shadowMap._outOfView;\n}\n\n/**\n * @private\n */\nShadowMap.prototype.update = function (frameState) {\n  updateCameras(this, frameState);\n\n  if (this._needsUpdate) {\n    updateFramebuffer(this, frameState.context);\n\n    if (this._isPointLight) {\n      computeOmnidirectional(this, frameState);\n    }\n\n    if (this._cascadesEnabled) {\n      fitShadowMapToScene(this, frameState);\n\n      if (this._numberOfCascades > 1) {\n        computeCascades(this, frameState);\n      }\n    }\n\n    if (!this._isPointLight) {\n      // Compute the culling volume\n      const shadowMapCamera = this._shadowMapCamera;\n      const position = shadowMapCamera.positionWC;\n      const direction = shadowMapCamera.directionWC;\n      const up = shadowMapCamera.upWC;\n      this._shadowMapCullingVolume =\n        shadowMapCamera.frustum.computeCullingVolume(position, direction, up);\n\n      if (this._passes.length === 1) {\n        // Since there is only one pass, use the shadow map camera as the pass camera.\n        this._passes[0].camera.clone(shadowMapCamera);\n      }\n    } else {\n      this._shadowMapCullingVolume = CullingVolume.fromBoundingSphere(\n        this._boundingSphere,\n      );\n    }\n  }\n\n  if (this._passes.length === 1) {\n    // Transforms from eye space to shadow texture space.\n    // Always requires an update since the scene camera constantly changes.\n    const inverseView = this._sceneCamera.inverseViewMatrix;\n    Matrix4.multiply(\n      this._shadowMapCamera.getViewProjection(),\n      inverseView,\n      this._shadowMapMatrix,\n    );\n  }\n\n  if (this.debugShow) {\n    applyDebugSettings(this, frameState);\n  }\n};\n\n/**\n * @private\n */\nShadowMap.prototype.updatePass = function (context, shadowPass) {\n  clearFramebuffer(this, context, shadowPass);\n};\n\nconst scratchTexelStepSize = new Cartesian2();\n\nfunction combineUniforms(shadowMap, uniforms, isTerrain) {\n  const bias = shadowMap._isPointLight\n    ? shadowMap._pointBias\n    : isTerrain\n      ? shadowMap._terrainBias\n      : shadowMap._primitiveBias;\n\n  const mapUniforms = {\n    shadowMap_texture: function () {\n      return shadowMap._shadowMapTexture;\n    },\n    shadowMap_textureCube: function () {\n      return shadowMap._shadowMapTexture;\n    },\n    shadowMap_matrix: function () {\n      return shadowMap._shadowMapMatrix;\n    },\n    shadowMap_cascadeSplits: function () {\n      return shadowMap._cascadeSplits;\n    },\n    shadowMap_cascadeMatrices: function () {\n      return shadowMap._cascadeMatrices;\n    },\n    shadowMap_lightDirectionEC: function () {\n      return shadowMap._lightDirectionEC;\n    },\n    shadowMap_lightPositionEC: function () {\n      return shadowMap._lightPositionEC;\n    },\n    shadowMap_cascadeDistances: function () {\n      return shadowMap._cascadeDistances;\n    },\n    shadowMap_texelSizeDepthBiasAndNormalShadingSmooth: function () {\n      const texelStepSize = scratchTexelStepSize;\n      texelStepSize.x = 1.0 / shadowMap._textureSize.x;\n      texelStepSize.y = 1.0 / shadowMap._textureSize.y;\n\n      return Cartesian4.fromElements(\n        texelStepSize.x,\n        texelStepSize.y,\n        bias.depthBias,\n        bias.normalShadingSmooth,\n        this.combinedUniforms1,\n      );\n    },\n    shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness: function () {\n      return Cartesian4.fromElements(\n        bias.normalOffsetScale,\n        shadowMap._distance,\n        shadowMap.maximumDistance,\n        shadowMap._darkness,\n        this.combinedUniforms2,\n      );\n    },\n\n    combinedUniforms1: new Cartesian4(),\n    combinedUniforms2: new Cartesian4(),\n  };\n\n  return combine(uniforms, mapUniforms, false);\n}\n\nfunction createCastDerivedCommand(\n  shadowMap,\n  shadowsDirty,\n  command,\n  context,\n  oldShaderId,\n  result,\n) {\n  let castShader;\n  let castRenderState;\n  let castUniformMap;\n  if (defined(result)) {\n    castShader = result.shaderProgram;\n    castRenderState = result.renderState;\n    castUniformMap = result.uniformMap;\n  }\n\n  result = DrawCommand.shallowClone(command, result);\n  result.castShadows = true;\n  result.receiveShadows = false;\n\n  if (\n    !defined(castShader) ||\n    oldShaderId !== command.shaderProgram.id ||\n    shadowsDirty\n  ) {\n    const shaderProgram = command.shaderProgram;\n\n    const isTerrain = command.pass === Pass.GLOBE;\n    const isOpaque = command.pass !== Pass.TRANSLUCENT;\n    const isPointLight = shadowMap._isPointLight;\n    const usesDepthTexture = shadowMap._usesDepthTexture;\n\n    const keyword = ShadowMapShader.getShadowCastShaderKeyword(\n      isPointLight,\n      isTerrain,\n      usesDepthTexture,\n      isOpaque,\n    );\n    castShader = context.shaderCache.getDerivedShaderProgram(\n      shaderProgram,\n      keyword,\n    );\n    if (!defined(castShader)) {\n      const vertexShaderSource = shaderProgram.vertexShaderSource;\n      const fragmentShaderSource = shaderProgram.fragmentShaderSource;\n\n      const castVS = ShadowMapShader.createShadowCastVertexShader(\n        vertexShaderSource,\n        isPointLight,\n        isTerrain,\n      );\n      const castFS = ShadowMapShader.createShadowCastFragmentShader(\n        fragmentShaderSource,\n        isPointLight,\n        usesDepthTexture,\n        isOpaque,\n      );\n\n      castShader = context.shaderCache.createDerivedShaderProgram(\n        shaderProgram,\n        keyword,\n        {\n          vertexShaderSource: castVS,\n          fragmentShaderSource: castFS,\n          attributeLocations: shaderProgram._attributeLocations,\n        },\n      );\n    }\n\n    castRenderState = shadowMap._primitiveRenderState;\n    if (isPointLight) {\n      castRenderState = shadowMap._pointRenderState;\n    } else if (isTerrain) {\n      castRenderState = shadowMap._terrainRenderState;\n    }\n\n    // Modify the render state for commands that do not use back-face culling, e.g. flat textured walls\n    const cullEnabled = command.renderState.cull.enabled;\n    if (!cullEnabled) {\n      castRenderState = clone(castRenderState, false);\n      castRenderState.cull = clone(castRenderState.cull, false);\n      castRenderState.cull.enabled = false;\n      castRenderState = RenderState.fromCache(castRenderState);\n    }\n\n    castUniformMap = combineUniforms(shadowMap, command.uniformMap, isTerrain);\n  }\n\n  result.shaderProgram = castShader;\n  result.renderState = castRenderState;\n  result.uniformMap = castUniformMap;\n\n  return result;\n}\n\nShadowMap.createReceiveDerivedCommand = function (\n  lightShadowMaps,\n  command,\n  shadowsDirty,\n  context,\n  result,\n) {\n  if (!defined(result)) {\n    result = {};\n  }\n\n  const lightShadowMapsEnabled = lightShadowMaps.length > 0;\n  const shaderProgram = command.shaderProgram;\n  const vertexShaderSource = shaderProgram.vertexShaderSource;\n  const fragmentShaderSource = shaderProgram.fragmentShaderSource;\n  const isTerrain = command.pass === Pass.GLOBE;\n\n  let hasTerrainNormal = false;\n  if (isTerrain) {\n    hasTerrainNormal =\n      command.owner.data.renderedMesh.encoding.hasVertexNormals;\n  }\n\n  if (command.receiveShadows && lightShadowMapsEnabled) {\n    // Only generate a receiveCommand if there is a shadow map originating from a light source.\n    let receiveShader;\n    let receiveUniformMap;\n    if (defined(result.receiveCommand)) {\n      receiveShader = result.receiveCommand.shaderProgram;\n      receiveUniformMap = result.receiveCommand.uniformMap;\n    }\n\n    result.receiveCommand = DrawCommand.shallowClone(\n      command,\n      result.receiveCommand,\n    );\n    result.castShadows = false;\n    result.receiveShadows = true;\n\n    // If castShadows changed, recompile the receive shadows shader. The normal shading technique simulates\n    // self-shadowing so it should be turned off if castShadows is false.\n    const castShadowsDirty =\n      result.receiveShaderCastShadows !== command.castShadows;\n    const shaderDirty =\n      result.receiveShaderProgramId !== command.shaderProgram.id;\n\n    if (\n      !defined(receiveShader) ||\n      shaderDirty ||\n      shadowsDirty ||\n      castShadowsDirty\n    ) {\n      const keyword = ShadowMapShader.getShadowReceiveShaderKeyword(\n        lightShadowMaps[0],\n        command.castShadows,\n        isTerrain,\n        hasTerrainNormal,\n      );\n      receiveShader = context.shaderCache.getDerivedShaderProgram(\n        shaderProgram,\n        keyword,\n      );\n      if (!defined(receiveShader)) {\n        const receiveVS = ShadowMapShader.createShadowReceiveVertexShader(\n          vertexShaderSource,\n          isTerrain,\n          hasTerrainNormal,\n        );\n        const receiveFS = ShadowMapShader.createShadowReceiveFragmentShader(\n          fragmentShaderSource,\n          lightShadowMaps[0],\n          command.castShadows,\n          isTerrain,\n          hasTerrainNormal,\n        );\n\n        receiveShader = context.shaderCache.createDerivedShaderProgram(\n          shaderProgram,\n          keyword,\n          {\n            vertexShaderSource: receiveVS,\n            fragmentShaderSource: receiveFS,\n            attributeLocations: shaderProgram._attributeLocations,\n          },\n        );\n      }\n\n      receiveUniformMap = combineUniforms(\n        lightShadowMaps[0],\n        command.uniformMap,\n        isTerrain,\n      );\n    }\n\n    result.receiveCommand.shaderProgram = receiveShader;\n    result.receiveCommand.uniformMap = receiveUniformMap;\n    result.receiveShaderProgramId = command.shaderProgram.id;\n    result.receiveShaderCastShadows = command.castShadows;\n  }\n\n  return result;\n};\n\nShadowMap.createCastDerivedCommand = function (\n  shadowMaps,\n  command,\n  shadowsDirty,\n  context,\n  result,\n) {\n  if (!defined(result)) {\n    result = {};\n  }\n\n  if (command.castShadows) {\n    let castCommands = result.castCommands;\n    if (!defined(castCommands)) {\n      castCommands = result.castCommands = [];\n    }\n\n    const oldShaderId = result.castShaderProgramId;\n\n    const shadowMapLength = shadowMaps.length;\n    castCommands.length = shadowMapLength;\n\n    for (let i = 0; i < shadowMapLength; ++i) {\n      castCommands[i] = createCastDerivedCommand(\n        shadowMaps[i],\n        shadowsDirty,\n        command,\n        context,\n        oldShaderId,\n        castCommands[i],\n      );\n    }\n\n    result.castShaderProgramId = command.shaderProgram.id;\n  }\n\n  return result;\n};\n\n/**\n * @private\n */\nShadowMap.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * @private\n */\nShadowMap.prototype.destroy = function () {\n  destroyFramebuffer(this);\n\n  this._debugLightFrustum =\n    this._debugLightFrustum && this._debugLightFrustum.destroy();\n  this._debugCameraFrustum =\n    this._debugCameraFrustum && this._debugCameraFrustum.destroy();\n  this._debugShadowViewCommand =\n    this._debugShadowViewCommand &&\n    this._debugShadowViewCommand.shaderProgram &&\n    this._debugShadowViewCommand.shaderProgram.destroy();\n\n  for (let i = 0; i < this._numberOfCascades; ++i) {\n    this._debugCascadeFrustums[i] =\n      this._debugCascadeFrustums[i] && this._debugCascadeFrustums[i].destroy();\n  }\n\n  return destroyObject(this);\n};\nexport default ShadowMap;\n","import defined from \"../Core/defined.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\n\n/**\n * @private\n */\nfunction ShadowMapShader() {}\n\nShadowMapShader.getShadowCastShaderKeyword = function (\n  isPointLight,\n  isTerrain,\n  usesDepthTexture,\n  isOpaque,\n) {\n  return `castShadow ${isPointLight} ${isTerrain} ${usesDepthTexture} ${isOpaque}`;\n};\n\nShadowMapShader.createShadowCastVertexShader = function (\n  vs,\n  isPointLight,\n  isTerrain,\n) {\n  const defines = vs.defines.slice(0);\n  const sources = vs.sources.slice(0);\n\n  defines.push(\"SHADOW_MAP\");\n\n  if (isTerrain) {\n    defines.push(\"GENERATE_POSITION\");\n  }\n\n  const positionVaryingName = ShaderSource.findPositionVarying(vs);\n  const hasPositionVarying = defined(positionVaryingName);\n\n  if (isPointLight && !hasPositionVarying) {\n    const length = sources.length;\n    for (let j = 0; j < length; ++j) {\n      sources[j] = ShaderSource.replaceMain(sources[j], \"czm_shadow_cast_main\");\n    }\n\n    const shadowVS =\n      \"out vec3 v_positionEC; \\n\" +\n      \"void main() \\n\" +\n      \"{ \\n\" +\n      \"    czm_shadow_cast_main(); \\n\" +\n      \"    v_positionEC = (czm_inverseProjection * gl_Position).xyz; \\n\" +\n      \"}\";\n    sources.push(shadowVS);\n  }\n\n  return new ShaderSource({\n    defines: defines,\n    sources: sources,\n  });\n};\n\nShadowMapShader.createShadowCastFragmentShader = function (\n  fs,\n  isPointLight,\n  usesDepthTexture,\n  opaque,\n) {\n  const defines = fs.defines.slice(0);\n  const sources = fs.sources.slice(0);\n\n  defines.push(\"SHADOW_MAP\");\n\n  let positionVaryingName = ShaderSource.findPositionVarying(fs);\n  const hasPositionVarying = defined(positionVaryingName);\n  if (!hasPositionVarying) {\n    positionVaryingName = \"v_positionEC\";\n  }\n\n  const length = sources.length;\n  for (let i = 0; i < length; ++i) {\n    sources[i] = ShaderSource.replaceMain(sources[i], \"czm_shadow_cast_main\");\n  }\n\n  let fsSource = \"\";\n\n  if (isPointLight) {\n    if (!hasPositionVarying) {\n      fsSource += \"in vec3 v_positionEC; \\n\";\n    }\n    fsSource += \"uniform vec4 shadowMap_lightPositionEC; \\n\";\n  }\n\n  if (opaque) {\n    fsSource += \"void main() \\n\" + \"{ \\n\";\n  } else {\n    fsSource +=\n      \"void main() \\n\" +\n      \"{ \\n\" +\n      \"    czm_shadow_cast_main(); \\n\" +\n      \"    if (out_FragColor.a == 0.0) \\n\" +\n      \"    { \\n\" +\n      \"       discard; \\n\" +\n      \"    } \\n\";\n  }\n\n  if (isPointLight) {\n    fsSource +=\n      `    float distance = length(${positionVaryingName}); \\n` +\n      `    if (distance >= shadowMap_lightPositionEC.w) \\n` +\n      `    { \\n` +\n      `        discard; \\n` +\n      `    } \\n` +\n      `    distance /= shadowMap_lightPositionEC.w; // radius \\n` +\n      `    out_FragColor = czm_packDepth(distance); \\n`;\n  } else if (usesDepthTexture) {\n    fsSource += \"    out_FragColor = vec4(1.0); \\n\";\n  } else {\n    fsSource += \"    out_FragColor = czm_packDepth(gl_FragCoord.z); \\n\";\n  }\n\n  fsSource += \"} \\n\";\n\n  sources.push(fsSource);\n\n  return new ShaderSource({\n    defines: defines,\n    sources: sources,\n  });\n};\n\nShadowMapShader.getShadowReceiveShaderKeyword = function (\n  shadowMap,\n  castShadows,\n  isTerrain,\n  hasTerrainNormal,\n) {\n  const usesDepthTexture = shadowMap._usesDepthTexture;\n  const polygonOffsetSupported = shadowMap._polygonOffsetSupported;\n  const isPointLight = shadowMap._isPointLight;\n  const isSpotLight = shadowMap._isSpotLight;\n  const hasCascades = shadowMap._numberOfCascades > 1;\n  const debugCascadeColors = shadowMap.debugCascadeColors;\n  const softShadows = shadowMap.softShadows;\n\n  return `receiveShadow ${usesDepthTexture}${polygonOffsetSupported}${isPointLight}${isSpotLight}${hasCascades}${debugCascadeColors}${softShadows}${castShadows}${isTerrain}${hasTerrainNormal}`;\n};\n\nShadowMapShader.createShadowReceiveVertexShader = function (\n  vs,\n  isTerrain,\n  hasTerrainNormal,\n) {\n  const defines = vs.defines.slice(0);\n  const sources = vs.sources.slice(0);\n\n  defines.push(\"SHADOW_MAP\");\n\n  if (isTerrain) {\n    if (hasTerrainNormal) {\n      defines.push(\"GENERATE_POSITION_AND_NORMAL\");\n    } else {\n      defines.push(\"GENERATE_POSITION\");\n    }\n  }\n\n  return new ShaderSource({\n    defines: defines,\n    sources: sources,\n  });\n};\n\nShadowMapShader.createShadowReceiveFragmentShader = function (\n  fs,\n  shadowMap,\n  castShadows,\n  isTerrain,\n  hasTerrainNormal,\n) {\n  const normalVaryingName = ShaderSource.findNormalVarying(fs);\n  const hasNormalVarying =\n    (!isTerrain && defined(normalVaryingName)) ||\n    (isTerrain && hasTerrainNormal);\n\n  const positionVaryingName = ShaderSource.findPositionVarying(fs);\n  const hasPositionVarying = defined(positionVaryingName);\n\n  const usesDepthTexture = shadowMap._usesDepthTexture;\n  const polygonOffsetSupported = shadowMap._polygonOffsetSupported;\n  const isPointLight = shadowMap._isPointLight;\n  const isSpotLight = shadowMap._isSpotLight;\n  const hasCascades = shadowMap._numberOfCascades > 1;\n  const debugCascadeColors = shadowMap.debugCascadeColors;\n  const softShadows = shadowMap.softShadows;\n  const bias = isPointLight\n    ? shadowMap._pointBias\n    : isTerrain\n      ? shadowMap._terrainBias\n      : shadowMap._primitiveBias;\n\n  const defines = fs.defines.slice(0);\n  const sources = fs.sources.slice(0);\n\n  const length = sources.length;\n  for (let i = 0; i < length; ++i) {\n    sources[i] = ShaderSource.replaceMain(\n      sources[i],\n      \"czm_shadow_receive_main\",\n    );\n  }\n\n  if (isPointLight) {\n    defines.push(\"USE_CUBE_MAP_SHADOW\");\n  } else if (usesDepthTexture) {\n    defines.push(\"USE_SHADOW_DEPTH_TEXTURE\");\n  }\n\n  if (softShadows && !isPointLight) {\n    defines.push(\"USE_SOFT_SHADOWS\");\n  }\n\n  // Enable day-night shading so that the globe is dark when the light is below the horizon\n  if (hasCascades && castShadows && isTerrain) {\n    if (hasNormalVarying) {\n      defines.push(\"ENABLE_VERTEX_LIGHTING\");\n    } else {\n      defines.push(\"ENABLE_DAYNIGHT_SHADING\");\n    }\n  }\n\n  if (castShadows && bias.normalShading && hasNormalVarying) {\n    defines.push(\"USE_NORMAL_SHADING\");\n    if (bias.normalShadingSmooth > 0.0) {\n      defines.push(\"USE_NORMAL_SHADING_SMOOTH\");\n    }\n  }\n\n  let fsSource = \"\";\n\n  if (isPointLight) {\n    fsSource += \"uniform samplerCube shadowMap_textureCube; \\n\";\n  } else {\n    fsSource += \"uniform sampler2D shadowMap_texture; \\n\";\n  }\n\n  let returnPositionEC;\n  if (hasPositionVarying) {\n    returnPositionEC = `    return vec4(${positionVaryingName}, 1.0); \\n`;\n  } else {\n    returnPositionEC =\n      \"#ifndef LOG_DEPTH \\n\" +\n      \"    return czm_windowToEyeCoordinates(gl_FragCoord); \\n\" +\n      \"#else \\n\" +\n      \"    return vec4(v_logPositionEC, 1.0); \\n\" +\n      \"#endif \\n\";\n  }\n\n  fsSource +=\n    `${\n      \"uniform mat4 shadowMap_matrix; \\n\" +\n      \"uniform vec3 shadowMap_lightDirectionEC; \\n\" +\n      \"uniform vec4 shadowMap_lightPositionEC; \\n\" +\n      \"uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness; \\n\" +\n      \"uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth; \\n\" +\n      \"#ifdef LOG_DEPTH \\n\" +\n      \"in vec3 v_logPositionEC; \\n\" +\n      \"#endif \\n\" +\n      \"vec4 getPositionEC() \\n\" +\n      \"{ \\n\"\n    }${returnPositionEC}} \\n` +\n    `vec3 getNormalEC() \\n` +\n    `{ \\n${\n      hasNormalVarying\n        ? `    return normalize(${normalVaryingName}); \\n`\n        : \"    return vec3(1.0); \\n\"\n    }} \\n` +\n    // Offset the shadow position in the direction of the normal for perpendicular and back faces\n    `void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) \\n` +\n    `{ \\n${\n      bias.normalOffset && hasNormalVarying\n        ? \"    float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; \\n\" +\n          \"    float normalOffsetScale = 1.0 - nDotL; \\n\" +\n          \"    vec3 offset = normalOffset * normalOffsetScale * normalEC; \\n\" +\n          \"    positionEC.xyz += offset; \\n\"\n        : \"\"\n    }} \\n`;\n\n  fsSource +=\n    \"void main() \\n\" +\n    \"{ \\n\" +\n    \"    czm_shadow_receive_main(); \\n\" +\n    \"    vec4 positionEC = getPositionEC(); \\n\" +\n    \"    vec3 normalEC = getNormalEC(); \\n\" +\n    \"    float depth = -positionEC.z; \\n\";\n\n  fsSource +=\n    \"    czm_shadowParameters shadowParameters; \\n\" +\n    \"    shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; \\n\" +\n    \"    shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; \\n\" +\n    \"    shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; \\n\" +\n    \"    shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; \\n\";\n\n  if (isTerrain) {\n    // Scale depth bias based on view distance to reduce z-fighting in distant terrain\n    fsSource += \"    shadowParameters.depthBias *= max(depth * 0.01, 1.0); \\n\";\n  } else if (!polygonOffsetSupported) {\n    // If polygon offset isn't supported push the depth back based on view, however this\n    // causes light leaking at further away views\n    fsSource +=\n      \"    shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); \\n\";\n  }\n\n  if (isPointLight) {\n    fsSource +=\n      \"    vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz; \\n\" +\n      \"    float distance = length(directionEC); \\n\" +\n      \"    directionEC = normalize(directionEC); \\n\" +\n      \"    float radius = shadowMap_lightPositionEC.w; \\n\" +\n      \"    // Stop early if the fragment is beyond the point light radius \\n\" +\n      \"    if (distance > radius) \\n\" +\n      \"    { \\n\" +\n      \"        return; \\n\" +\n      \"    } \\n\" +\n      \"    vec3 directionWC  = czm_inverseViewRotation * directionEC; \\n\" +\n      \"    shadowParameters.depth = distance / radius; \\n\" +\n      \"    shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \\n\" +\n      \"    shadowParameters.texCoords = directionWC; \\n\" +\n      \"    float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters); \\n\";\n  } else if (isSpotLight) {\n    fsSource +=\n      \"    vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz); \\n\" +\n      \"    float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); \\n\" +\n      \"    applyNormalOffset(positionEC, normalEC, nDotL); \\n\" +\n      \"    vec4 shadowPosition = shadowMap_matrix * positionEC; \\n\" +\n      \"    // Spot light uses a perspective projection, so perform the perspective divide \\n\" +\n      \"    shadowPosition /= shadowPosition.w; \\n\" +\n      \"    // Stop early if the fragment is not in the shadow bounds \\n\" +\n      \"    if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \\n\" +\n      \"    { \\n\" +\n      \"        return; \\n\" +\n      \"    } \\n\" +\n      \"    shadowParameters.texCoords = shadowPosition.xy; \\n\" +\n      \"    shadowParameters.depth = shadowPosition.z; \\n\" +\n      \"    shadowParameters.nDotL = nDotL; \\n\" +\n      \"    float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \\n\";\n  } else if (hasCascades) {\n    fsSource += `${\n      \"    float maxDepth = shadowMap_cascadeSplits[1].w; \\n\" +\n      \"    // Stop early if the eye depth exceeds the last cascade \\n\" +\n      \"    if (depth > maxDepth) \\n\" +\n      \"    { \\n\" +\n      \"        return; \\n\" +\n      \"    } \\n\" +\n      \"    // Get the cascade based on the eye-space depth \\n\" +\n      \"    vec4 weights = czm_cascadeWeights(depth); \\n\" +\n      \"    // Apply normal offset \\n\" +\n      \"    float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \\n\" +\n      \"    applyNormalOffset(positionEC, normalEC, nDotL); \\n\" +\n      \"    // Transform position into the cascade \\n\" +\n      \"    vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC; \\n\" +\n      \"    // Get visibility \\n\" +\n      \"    shadowParameters.texCoords = shadowPosition.xy; \\n\" +\n      \"    shadowParameters.depth = shadowPosition.z; \\n\" +\n      \"    shadowParameters.nDotL = nDotL; \\n\" +\n      \"    float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \\n\" +\n      \"    // Fade out shadows that are far away \\n\" +\n      \"    float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z; \\n\" +\n      \"    float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0); \\n\" +\n      \"    visibility = mix(visibility, 1.0, fade); \\n\"\n    }${\n      debugCascadeColors\n        ? \"    // Draw cascade colors for debugging \\n\" +\n          \"    out_FragColor *= czm_cascadeColor(weights); \\n\"\n        : \"\"\n    }`;\n  } else {\n    fsSource +=\n      \"    float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); \\n\" +\n      \"    applyNormalOffset(positionEC, normalEC, nDotL); \\n\" +\n      \"    vec4 shadowPosition = shadowMap_matrix * positionEC; \\n\" +\n      \"    // Stop early if the fragment is not in the shadow bounds \\n\" +\n      \"    if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) \\n\" +\n      \"    { \\n\" +\n      \"        return; \\n\" +\n      \"    } \\n\" +\n      \"    shadowParameters.texCoords = shadowPosition.xy; \\n\" +\n      \"    shadowParameters.depth = shadowPosition.z; \\n\" +\n      \"    shadowParameters.nDotL = nDotL; \\n\" +\n      \"    float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); \\n\";\n  }\n\n  fsSource += \"    out_FragColor.rgb *= visibility; \\n\" + \"} \\n\";\n\n  sources.push(fsSource);\n\n  return new ShaderSource({\n    defines: defines,\n    sources: sources,\n  });\n};\nexport default ShadowMapShader;\n","/**\n * Specifies whether the object casts or receives shadows from light sources when\n * shadows are enabled.\n *\n * @enum {number}\n */\nconst ShadowMode = {\n  /**\n   * The object does not cast or receive shadows.\n   *\n   * @type {number}\n   * @constant\n   */\n  DISABLED: 0,\n\n  /**\n   * The object casts and receives shadows.\n   *\n   * @type {number}\n   * @constant\n   */\n  ENABLED: 1,\n\n  /**\n   * The object casts shadows only.\n   *\n   * @type {number}\n   * @constant\n   */\n  CAST_ONLY: 2,\n\n  /**\n   * The object receives shadows only.\n   *\n   * @type {number}\n   * @constant\n   */\n  RECEIVE_ONLY: 3,\n};\n\n/**\n * @private\n */\nShadowMode.NUMBER_OF_SHADOW_MODES = 4;\n\n/**\n * @private\n */\nShadowMode.castShadows = function (shadowMode) {\n  return (\n    shadowMode === ShadowMode.ENABLED || shadowMode === ShadowMode.CAST_ONLY\n  );\n};\n\n/**\n * @private\n */\nShadowMode.receiveShadows = function (shadowMode) {\n  return (\n    shadowMode === ShadowMode.ENABLED || shadowMode === ShadowMode.RECEIVE_ONLY\n  );\n};\n\n/**\n * @private\n */\nShadowMode.fromCastReceive = function (castShadows, receiveShadows) {\n  if (castShadows && receiveShadows) {\n    return ShadowMode.ENABLED;\n  } else if (castShadows) {\n    return ShadowMode.CAST_ONLY;\n  } else if (receiveShadows) {\n    return ShadowMode.RECEIVE_ONLY;\n  }\n  return ShadowMode.DISABLED;\n};\n\nexport default Object.freeze(ShadowMode);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport EncodedCartesian3 from \"../Core/EncodedCartesian3.js\";\nimport GeometryInstanceAttribute from \"../Core/GeometryInstanceAttribute.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport PerInstanceColorAppearance from \"../Scene/PerInstanceColorAppearance.js\";\nimport ShadowVolumeAppearanceFS from \"../Shaders/ShadowVolumeAppearanceFS.js\";\n\n/**\n * Creates shaders for a ClassificationPrimitive to use a given Appearance, as well as for picking.\n *\n * @param {boolean} extentsCulling Discard fragments outside the instance's texture coordinate extents.\n * @param {boolean} planarExtents If true, texture coordinates will be computed using planes instead of spherical coordinates.\n * @param {Appearance} appearance An Appearance to be used with a ClassificationPrimitive via GroundPrimitive.\n * @private\n */\nfunction ShadowVolumeAppearance(extentsCulling, planarExtents, appearance) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bool(\"extentsCulling\", extentsCulling);\n  Check.typeOf.bool(\"planarExtents\", planarExtents);\n  Check.typeOf.object(\"appearance\", appearance);\n  //>>includeEnd('debug');\n\n  this._projectionExtentDefines = {\n    eastMostYhighDefine: \"\",\n    eastMostYlowDefine: \"\",\n    westMostYhighDefine: \"\",\n    westMostYlowDefine: \"\",\n  };\n\n  // Compute shader dependencies\n  const colorShaderDependencies = new ShaderDependencies();\n  colorShaderDependencies.requiresTextureCoordinates = extentsCulling;\n  colorShaderDependencies.requiresEC = !appearance.flat;\n\n  const pickShaderDependencies = new ShaderDependencies();\n  pickShaderDependencies.requiresTextureCoordinates = extentsCulling;\n\n  if (appearance instanceof PerInstanceColorAppearance) {\n    // PerInstanceColorAppearance doesn't have material.shaderSource, instead it has its own vertex and fragment shaders\n    colorShaderDependencies.requiresNormalEC = !appearance.flat;\n  } else {\n    // Scan material source for what hookups are needed. Assume czm_materialInput materialInput.\n    const materialShaderSource = `${appearance.material.shaderSource}\\n${appearance.fragmentShaderSource}`;\n\n    colorShaderDependencies.normalEC =\n      materialShaderSource.indexOf(\"materialInput.normalEC\") !== -1 ||\n      materialShaderSource.indexOf(\"czm_getDefaultMaterial\") !== -1;\n    colorShaderDependencies.positionToEyeEC =\n      materialShaderSource.indexOf(\"materialInput.positionToEyeEC\") !== -1;\n    colorShaderDependencies.tangentToEyeMatrix =\n      materialShaderSource.indexOf(\"materialInput.tangentToEyeMatrix\") !== -1;\n    colorShaderDependencies.st =\n      materialShaderSource.indexOf(\"materialInput.st\") !== -1;\n  }\n\n  this._colorShaderDependencies = colorShaderDependencies;\n  this._pickShaderDependencies = pickShaderDependencies;\n  this._appearance = appearance;\n  this._extentsCulling = extentsCulling;\n  this._planarExtents = planarExtents;\n}\n\n/**\n * Create the fragment shader for a ClassificationPrimitive's color pass when rendering for color.\n *\n * @param {boolean} columbusView2D Whether the shader will be used for Columbus View or 2D.\n * @returns {ShaderSource} Shader source for the fragment shader.\n */\nShadowVolumeAppearance.prototype.createFragmentShader = function (\n  columbusView2D,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n  //>>includeEnd('debug');\n\n  const appearance = this._appearance;\n  const dependencies = this._colorShaderDependencies;\n\n  const defines = [];\n  if (!columbusView2D && !this._planarExtents) {\n    defines.push(\"SPHERICAL\");\n  }\n  if (dependencies.requiresEC) {\n    defines.push(\"REQUIRES_EC\");\n  }\n  if (dependencies.requiresWC) {\n    defines.push(\"REQUIRES_WC\");\n  }\n  if (dependencies.requiresTextureCoordinates) {\n    defines.push(\"TEXTURE_COORDINATES\");\n  }\n  if (this._extentsCulling) {\n    defines.push(\"CULL_FRAGMENTS\");\n  }\n  if (dependencies.requiresNormalEC) {\n    defines.push(\"NORMAL_EC\");\n  }\n  if (appearance instanceof PerInstanceColorAppearance) {\n    defines.push(\"PER_INSTANCE_COLOR\");\n  }\n\n  // Material inputs. Use of parameters in the material is different\n  // from requirement of the parameters in the overall shader, for example,\n  // texture coordinates may be used for fragment culling but not for the material itself.\n  if (dependencies.normalEC) {\n    defines.push(\"USES_NORMAL_EC\");\n  }\n  if (dependencies.positionToEyeEC) {\n    defines.push(\"USES_POSITION_TO_EYE_EC\");\n  }\n  if (dependencies.tangentToEyeMatrix) {\n    defines.push(\"USES_TANGENT_TO_EYE\");\n  }\n  if (dependencies.st) {\n    defines.push(\"USES_ST\");\n  }\n\n  if (appearance.flat) {\n    defines.push(\"FLAT\");\n  }\n\n  let materialSource = \"\";\n  if (!(appearance instanceof PerInstanceColorAppearance)) {\n    materialSource = appearance.material.shaderSource;\n  }\n\n  return new ShaderSource({\n    defines: defines,\n    sources: [materialSource, ShadowVolumeAppearanceFS],\n  });\n};\n\nShadowVolumeAppearance.prototype.createPickFragmentShader = function (\n  columbusView2D,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n  //>>includeEnd('debug');\n\n  const dependencies = this._pickShaderDependencies;\n\n  const defines = [\"PICK\"];\n  if (!columbusView2D && !this._planarExtents) {\n    defines.push(\"SPHERICAL\");\n  }\n  if (dependencies.requiresEC) {\n    defines.push(\"REQUIRES_EC\");\n  }\n  if (dependencies.requiresWC) {\n    defines.push(\"REQUIRES_WC\");\n  }\n  if (dependencies.requiresTextureCoordinates) {\n    defines.push(\"TEXTURE_COORDINATES\");\n  }\n  if (this._extentsCulling) {\n    defines.push(\"CULL_FRAGMENTS\");\n  }\n  return new ShaderSource({\n    defines: defines,\n    sources: [ShadowVolumeAppearanceFS],\n    pickColorQualifier: \"in\",\n  });\n};\n\n/**\n * Create the vertex shader for a ClassificationPrimitive's color pass on the final of 3 shadow volume passes\n *\n * @param {string[]} defines External defines to pass to the vertex shader.\n * @param {string} vertexShaderSource ShadowVolumeAppearanceVS with any required modifications for computing position.\n * @param {boolean} columbusView2D Whether the shader will be used for Columbus View or 2D.\n * @param {MapProjection} mapProjection Current scene's map projection.\n * @returns {string} Shader source for the vertex shader.\n */\nShadowVolumeAppearance.prototype.createVertexShader = function (\n  defines,\n  vertexShaderSource,\n  columbusView2D,\n  mapProjection,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"defines\", defines);\n  Check.typeOf.string(\"vertexShaderSource\", vertexShaderSource);\n  Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n  Check.defined(\"mapProjection\", mapProjection);\n  //>>includeEnd('debug');\n  return createShadowVolumeAppearanceVS(\n    this._colorShaderDependencies,\n    this._planarExtents,\n    columbusView2D,\n    defines,\n    vertexShaderSource,\n    this._appearance,\n    mapProjection,\n    this._projectionExtentDefines,\n  );\n};\n\n/**\n * Create the vertex shader for a ClassificationPrimitive's pick pass on the final of 3 shadow volume passes\n *\n * @param {string[]} defines External defines to pass to the vertex shader.\n * @param {string} vertexShaderSource ShadowVolumeAppearanceVS with any required modifications for computing position and picking.\n * @param {boolean} columbusView2D Whether the shader will be used for Columbus View or 2D.\n * @param {MapProjection} mapProjection Current scene's map projection.\n * @returns {string} Shader source for the vertex shader.\n */\nShadowVolumeAppearance.prototype.createPickVertexShader = function (\n  defines,\n  vertexShaderSource,\n  columbusView2D,\n  mapProjection,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"defines\", defines);\n  Check.typeOf.string(\"vertexShaderSource\", vertexShaderSource);\n  Check.typeOf.bool(\"columbusView2D\", columbusView2D);\n  Check.defined(\"mapProjection\", mapProjection);\n  //>>includeEnd('debug');\n  return createShadowVolumeAppearanceVS(\n    this._pickShaderDependencies,\n    this._planarExtents,\n    columbusView2D,\n    defines,\n    vertexShaderSource,\n    undefined,\n    mapProjection,\n    this._projectionExtentDefines,\n  );\n};\n\nconst longitudeExtentsCartesianScratch = new Cartesian3();\nconst longitudeExtentsCartographicScratch = new Cartographic();\nconst longitudeExtentsEncodeScratch = {\n  high: 0.0,\n  low: 0.0,\n};\nfunction createShadowVolumeAppearanceVS(\n  shaderDependencies,\n  planarExtents,\n  columbusView2D,\n  defines,\n  vertexShaderSource,\n  appearance,\n  mapProjection,\n  projectionExtentDefines,\n) {\n  const allDefines = defines.slice();\n\n  if (projectionExtentDefines.eastMostYhighDefine === \"\") {\n    const eastMostCartographic = longitudeExtentsCartographicScratch;\n    eastMostCartographic.longitude = CesiumMath.PI;\n    eastMostCartographic.latitude = 0.0;\n    eastMostCartographic.height = 0.0;\n    const eastMostCartesian = mapProjection.project(\n      eastMostCartographic,\n      longitudeExtentsCartesianScratch,\n    );\n    let encoded = EncodedCartesian3.encode(\n      eastMostCartesian.x,\n      longitudeExtentsEncodeScratch,\n    );\n    projectionExtentDefines.eastMostYhighDefine = `EAST_MOST_X_HIGH ${encoded.high.toFixed(\n      `${encoded.high}`.length + 1,\n    )}`;\n    projectionExtentDefines.eastMostYlowDefine = `EAST_MOST_X_LOW ${encoded.low.toFixed(\n      `${encoded.low}`.length + 1,\n    )}`;\n\n    const westMostCartographic = longitudeExtentsCartographicScratch;\n    westMostCartographic.longitude = -CesiumMath.PI;\n    westMostCartographic.latitude = 0.0;\n    westMostCartographic.height = 0.0;\n    const westMostCartesian = mapProjection.project(\n      westMostCartographic,\n      longitudeExtentsCartesianScratch,\n    );\n    encoded = EncodedCartesian3.encode(\n      westMostCartesian.x,\n      longitudeExtentsEncodeScratch,\n    );\n    projectionExtentDefines.westMostYhighDefine = `WEST_MOST_X_HIGH ${encoded.high.toFixed(\n      `${encoded.high}`.length + 1,\n    )}`;\n    projectionExtentDefines.westMostYlowDefine = `WEST_MOST_X_LOW ${encoded.low.toFixed(\n      `${encoded.low}`.length + 1,\n    )}`;\n  }\n\n  if (columbusView2D) {\n    allDefines.push(projectionExtentDefines.eastMostYhighDefine);\n    allDefines.push(projectionExtentDefines.eastMostYlowDefine);\n    allDefines.push(projectionExtentDefines.westMostYhighDefine);\n    allDefines.push(projectionExtentDefines.westMostYlowDefine);\n  }\n\n  if (defined(appearance) && appearance instanceof PerInstanceColorAppearance) {\n    allDefines.push(\"PER_INSTANCE_COLOR\");\n  }\n  if (shaderDependencies.requiresTextureCoordinates) {\n    allDefines.push(\"TEXTURE_COORDINATES\");\n    if (!(planarExtents || columbusView2D)) {\n      allDefines.push(\"SPHERICAL\");\n    }\n    if (columbusView2D) {\n      allDefines.push(\"COLUMBUS_VIEW_2D\");\n    }\n  }\n\n  return new ShaderSource({\n    defines: allDefines,\n    sources: [vertexShaderSource],\n  });\n}\n\n/**\n * Tracks shader dependencies.\n * @private\n */\nfunction ShaderDependencies() {\n  this._requiresEC = false;\n  this._requiresWC = false; // depends on eye coordinates, needed for material and for phong\n  this._requiresNormalEC = false; // depends on eye coordinates, needed for material\n  this._requiresTextureCoordinates = false; // depends on world coordinates, needed for material and for culling\n\n  this._usesNormalEC = false;\n  this._usesPositionToEyeEC = false;\n  this._usesTangentToEyeMat = false;\n  this._usesSt = false;\n}\n\nObject.defineProperties(ShaderDependencies.prototype, {\n  // Set when assessing final shading (flat vs. phong) and culling using computed texture coordinates\n  requiresEC: {\n    get: function () {\n      return this._requiresEC;\n    },\n    set: function (value) {\n      this._requiresEC = value || this._requiresEC;\n    },\n  },\n  requiresWC: {\n    get: function () {\n      return this._requiresWC;\n    },\n    set: function (value) {\n      this._requiresWC = value || this._requiresWC;\n      this.requiresEC = this._requiresWC;\n    },\n  },\n  requiresNormalEC: {\n    get: function () {\n      return this._requiresNormalEC;\n    },\n    set: function (value) {\n      this._requiresNormalEC = value || this._requiresNormalEC;\n      this.requiresEC = this._requiresNormalEC;\n    },\n  },\n  requiresTextureCoordinates: {\n    get: function () {\n      return this._requiresTextureCoordinates;\n    },\n    set: function (value) {\n      this._requiresTextureCoordinates =\n        value || this._requiresTextureCoordinates;\n      this.requiresWC = this._requiresTextureCoordinates;\n    },\n  },\n  // Get/Set when assessing material hookups\n  normalEC: {\n    set: function (value) {\n      this.requiresNormalEC = value;\n      this._usesNormalEC = value;\n    },\n    get: function () {\n      return this._usesNormalEC;\n    },\n  },\n  tangentToEyeMatrix: {\n    set: function (value) {\n      this.requiresWC = value;\n      this.requiresNormalEC = value;\n      this._usesTangentToEyeMat = value;\n    },\n    get: function () {\n      return this._usesTangentToEyeMat;\n    },\n  },\n  positionToEyeEC: {\n    set: function (value) {\n      this.requiresEC = value;\n      this._usesPositionToEyeEC = value;\n    },\n    get: function () {\n      return this._usesPositionToEyeEC;\n    },\n  },\n  st: {\n    set: function (value) {\n      this.requiresTextureCoordinates = value;\n      this._usesSt = value;\n    },\n    get: function () {\n      return this._usesSt;\n    },\n  },\n});\n\nfunction pointLineDistance(point1, point2, point) {\n  return (\n    Math.abs(\n      (point2.y - point1.y) * point.x -\n        (point2.x - point1.x) * point.y +\n        point2.x * point1.y -\n        point2.y * point1.x,\n    ) / Cartesian2.distance(point2, point1)\n  );\n}\n\nconst points2DScratch = [\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n  new Cartesian2(),\n];\n\n// textureCoordinateRotationPoints form 2 lines in the computed UV space that remap to desired texture coordinates.\n// This allows simulation of baked texture coordinates for EllipseGeometry, RectangleGeometry, and PolygonGeometry.\nfunction addTextureCoordinateRotationAttributes(\n  attributes,\n  textureCoordinateRotationPoints,\n) {\n  const points2D = points2DScratch;\n\n  const minXYCorner = Cartesian2.unpack(\n    textureCoordinateRotationPoints,\n    0,\n    points2D[0],\n  );\n  const maxYCorner = Cartesian2.unpack(\n    textureCoordinateRotationPoints,\n    2,\n    points2D[1],\n  );\n  const maxXCorner = Cartesian2.unpack(\n    textureCoordinateRotationPoints,\n    4,\n    points2D[2],\n  );\n\n  attributes.uMaxVmax = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 4,\n    normalize: false,\n    value: [maxYCorner.x, maxYCorner.y, maxXCorner.x, maxXCorner.y],\n  });\n\n  const inverseExtentX =\n    1.0 / pointLineDistance(minXYCorner, maxYCorner, maxXCorner);\n  const inverseExtentY =\n    1.0 / pointLineDistance(minXYCorner, maxXCorner, maxYCorner);\n\n  attributes.uvMinAndExtents = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 4,\n    normalize: false,\n    value: [minXYCorner.x, minXYCorner.y, inverseExtentX, inverseExtentY],\n  });\n}\n\nconst cartographicScratch = new Cartographic();\nconst cornerScratch = new Cartesian3();\nconst northWestScratch = new Cartesian3();\nconst southEastScratch = new Cartesian3();\nconst highLowScratch = { high: 0.0, low: 0.0 };\nfunction add2DTextureCoordinateAttributes(rectangle, projection, attributes) {\n  // Compute corner positions in double precision\n  const carto = cartographicScratch;\n  carto.height = 0.0;\n\n  carto.longitude = rectangle.west;\n  carto.latitude = rectangle.south;\n\n  const southWestCorner = projection.project(carto, cornerScratch);\n\n  carto.latitude = rectangle.north;\n  const northWest = projection.project(carto, northWestScratch);\n\n  carto.longitude = rectangle.east;\n  carto.latitude = rectangle.south;\n  const southEast = projection.project(carto, southEastScratch);\n\n  // Since these positions are all in the 2D plane, there's a lot of zeros\n  // and a lot of repetition. So we only need to encode 4 values.\n  // Encode:\n  // x: x value for southWestCorner\n  // y: y value for southWestCorner\n  // z: y value for northWest\n  // w: x value for southEast\n\n  const valuesHigh = [0, 0, 0, 0];\n  const valuesLow = [0, 0, 0, 0];\n  let encoded = EncodedCartesian3.encode(southWestCorner.x, highLowScratch);\n  valuesHigh[0] = encoded.high;\n  valuesLow[0] = encoded.low;\n\n  encoded = EncodedCartesian3.encode(southWestCorner.y, highLowScratch);\n  valuesHigh[1] = encoded.high;\n  valuesLow[1] = encoded.low;\n\n  encoded = EncodedCartesian3.encode(northWest.y, highLowScratch);\n  valuesHigh[2] = encoded.high;\n  valuesLow[2] = encoded.low;\n\n  encoded = EncodedCartesian3.encode(southEast.x, highLowScratch);\n  valuesHigh[3] = encoded.high;\n  valuesLow[3] = encoded.low;\n\n  attributes.planes2D_HIGH = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 4,\n    normalize: false,\n    value: valuesHigh,\n  });\n\n  attributes.planes2D_LOW = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 4,\n    normalize: false,\n    value: valuesLow,\n  });\n}\n\nconst enuMatrixScratch = new Matrix4();\nconst inverseEnuScratch = new Matrix4();\nconst rectanglePointCartesianScratch = new Cartesian3();\nconst rectangleCenterScratch = new Cartographic();\nconst pointsCartographicScratch = [\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n  new Cartographic(),\n];\n/**\n * When computing planes to bound the rectangle,\n * need to factor in \"bulge\" and other distortion.\n * Flatten the ellipsoid-centered corners and edge-centers of the rectangle\n * into the plane of the local ENU system, compute bounds in 2D, and\n * project back to ellipsoid-centered.\n *\n * @private\n */\nfunction computeRectangleBounds(\n  rectangle,\n  ellipsoid,\n  height,\n  southWestCornerResult,\n  eastVectorResult,\n  northVectorResult,\n) {\n  // Compute center of rectangle\n  const centerCartographic = Rectangle.center(\n    rectangle,\n    rectangleCenterScratch,\n  );\n  centerCartographic.height = height;\n  const centerCartesian = Cartographic.toCartesian(\n    centerCartographic,\n    ellipsoid,\n    rectanglePointCartesianScratch,\n  );\n  const enuMatrix = Transforms.eastNorthUpToFixedFrame(\n    centerCartesian,\n    ellipsoid,\n    enuMatrixScratch,\n  );\n  const inverseEnu = Matrix4.inverse(enuMatrix, inverseEnuScratch);\n\n  const west = rectangle.west;\n  const east = rectangle.east;\n  const north = rectangle.north;\n  const south = rectangle.south;\n\n  const cartographics = pointsCartographicScratch;\n  cartographics[0].latitude = south;\n  cartographics[0].longitude = west;\n  cartographics[1].latitude = north;\n  cartographics[1].longitude = west;\n  cartographics[2].latitude = north;\n  cartographics[2].longitude = east;\n  cartographics[3].latitude = south;\n  cartographics[3].longitude = east;\n\n  const longitudeCenter = (west + east) * 0.5;\n  const latitudeCenter = (north + south) * 0.5;\n\n  cartographics[4].latitude = south;\n  cartographics[4].longitude = longitudeCenter;\n  cartographics[5].latitude = north;\n  cartographics[5].longitude = longitudeCenter;\n  cartographics[6].latitude = latitudeCenter;\n  cartographics[6].longitude = west;\n  cartographics[7].latitude = latitudeCenter;\n  cartographics[7].longitude = east;\n\n  let minX = Number.POSITIVE_INFINITY;\n  let maxX = Number.NEGATIVE_INFINITY;\n  let minY = Number.POSITIVE_INFINITY;\n  let maxY = Number.NEGATIVE_INFINITY;\n  for (let i = 0; i < 8; i++) {\n    cartographics[i].height = height;\n    const pointCartesian = Cartographic.toCartesian(\n      cartographics[i],\n      ellipsoid,\n      rectanglePointCartesianScratch,\n    );\n    Matrix4.multiplyByPoint(inverseEnu, pointCartesian, pointCartesian);\n    pointCartesian.z = 0.0; // flatten into XY plane of ENU coordinate system\n    minX = Math.min(minX, pointCartesian.x);\n    maxX = Math.max(maxX, pointCartesian.x);\n    minY = Math.min(minY, pointCartesian.y);\n    maxY = Math.max(maxY, pointCartesian.y);\n  }\n\n  const southWestCorner = southWestCornerResult;\n  southWestCorner.x = minX;\n  southWestCorner.y = minY;\n  southWestCorner.z = 0.0;\n  Matrix4.multiplyByPoint(enuMatrix, southWestCorner, southWestCorner);\n\n  const southEastCorner = eastVectorResult;\n  southEastCorner.x = maxX;\n  southEastCorner.y = minY;\n  southEastCorner.z = 0.0;\n  Matrix4.multiplyByPoint(enuMatrix, southEastCorner, southEastCorner);\n  // make eastward vector\n  Cartesian3.subtract(southEastCorner, southWestCorner, eastVectorResult);\n\n  const northWestCorner = northVectorResult;\n  northWestCorner.x = minX;\n  northWestCorner.y = maxY;\n  northWestCorner.z = 0.0;\n  Matrix4.multiplyByPoint(enuMatrix, northWestCorner, northWestCorner);\n  // make eastward vector\n  Cartesian3.subtract(northWestCorner, southWestCorner, northVectorResult);\n}\n\nconst eastwardScratch = new Cartesian3();\nconst northwardScratch = new Cartesian3();\nconst encodeScratch = new EncodedCartesian3();\n/**\n * Gets an attributes object containing:\n * - 3 high-precision points as 6 GeometryInstanceAttributes. These points are used to compute eye-space planes.\n * - 1 texture coordinate rotation GeometryInstanceAttributes\n * - 2 GeometryInstanceAttributes used to compute high-precision points in 2D and Columbus View.\n *   These points are used to compute eye-space planes like above.\n *\n * Used to compute texture coordinates for small-area ClassificationPrimitives with materials or multiple non-overlapping instances.\n *\n * @see ShadowVolumeAppearance\n * @private\n *\n * @param {Rectangle} boundingRectangle Rectangle object that the points will approximately bound\n * @param {number[]} textureCoordinateRotationPoints Points in the computed texture coordinate system for remapping texture coordinates\n * @param {Ellipsoid} ellipsoid Ellipsoid for converting Rectangle points to world coordinates\n * @param {MapProjection} projection The MapProjection used for 2D and Columbus View.\n * @param {number} [height=0] The maximum height for the shadow volume.\n * @returns {object} An attributes dictionary containing planar texture coordinate attributes.\n */\nShadowVolumeAppearance.getPlanarTextureCoordinateAttributes = function (\n  boundingRectangle,\n  textureCoordinateRotationPoints,\n  ellipsoid,\n  projection,\n  height,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"boundingRectangle\", boundingRectangle);\n  Check.defined(\n    \"textureCoordinateRotationPoints\",\n    textureCoordinateRotationPoints,\n  );\n  Check.typeOf.object(\"ellipsoid\", ellipsoid);\n  Check.typeOf.object(\"projection\", projection);\n  //>>includeEnd('debug');\n\n  const corner = cornerScratch;\n  const eastward = eastwardScratch;\n  const northward = northwardScratch;\n  computeRectangleBounds(\n    boundingRectangle,\n    ellipsoid,\n    height ?? 0.0,\n    corner,\n    eastward,\n    northward,\n  );\n\n  const attributes = {};\n  addTextureCoordinateRotationAttributes(\n    attributes,\n    textureCoordinateRotationPoints,\n  );\n\n  const encoded = EncodedCartesian3.fromCartesian(corner, encodeScratch);\n\n  attributes.southWest_HIGH = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 3,\n    normalize: false,\n    value: Cartesian3.pack(encoded.high, [0, 0, 0]),\n  });\n  attributes.southWest_LOW = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 3,\n    normalize: false,\n    value: Cartesian3.pack(encoded.low, [0, 0, 0]),\n  });\n  attributes.eastward = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 3,\n    normalize: false,\n    value: Cartesian3.pack(eastward, [0, 0, 0]),\n  });\n  attributes.northward = new GeometryInstanceAttribute({\n    componentDatatype: ComponentDatatype.FLOAT,\n    componentsPerAttribute: 3,\n    normalize: false,\n    value: Cartesian3.pack(northward, [0, 0, 0]),\n  });\n\n  add2DTextureCoordinateAttributes(boundingRectangle, projection, attributes);\n  return attributes;\n};\n\nconst spherePointScratch = new Cartesian3();\nfunction latLongToSpherical(latitude, longitude, ellipsoid, result) {\n  const cartographic = cartographicScratch;\n  cartographic.latitude = latitude;\n  cartographic.longitude = longitude;\n  cartographic.height = 0.0;\n\n  const spherePoint = Cartographic.toCartesian(\n    cartographic,\n    ellipsoid,\n    spherePointScratch,\n  );\n\n  // Project into plane with vertical for latitude\n  const magXY = Math.sqrt(\n    spherePoint.x * spherePoint.x + spherePoint.y * spherePoint.y,\n  );\n\n  // Use fastApproximateAtan2 for alignment with shader\n  const sphereLatitude = CesiumMath.fastApproximateAtan2(magXY, spherePoint.z);\n  const sphereLongitude = CesiumMath.fastApproximateAtan2(\n    spherePoint.x,\n    spherePoint.y,\n  );\n\n  result.x = sphereLatitude;\n  result.y = sphereLongitude;\n\n  return result;\n}\n\nconst sphericalScratch = new Cartesian2();\n/**\n * Gets an attributes object containing:\n * - the southwest corner of a rectangular area in spherical coordinates, as well as the inverse of the latitude/longitude range.\n *   These are computed using the same atan2 approximation used in the shader.\n * - 1 texture coordinate rotation GeometryInstanceAttributes\n * - 2 GeometryInstanceAttributes used to compute high-precision points in 2D and Columbus View.\n *   These points are used to compute eye-space planes like above.\n *\n * Used when computing texture coordinates for large-area ClassificationPrimitives with materials or\n * multiple non-overlapping instances.\n * @see ShadowVolumeAppearance\n * @private\n *\n * @param {Rectangle} boundingRectangle Rectangle object that the spherical extents will approximately bound\n * @param {number[]} textureCoordinateRotationPoints Points in the computed texture coordinate system for remapping texture coordinates\n * @param {Ellipsoid} ellipsoid Ellipsoid for converting Rectangle points to world coordinates\n * @param {MapProjection} projection The MapProjection used for 2D and Columbus View.\n * @returns {object} An attributes dictionary containing spherical texture coordinate attributes.\n */\nShadowVolumeAppearance.getSphericalExtentGeometryInstanceAttributes = function (\n  boundingRectangle,\n  textureCoordinateRotationPoints,\n  ellipsoid,\n  projection,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"boundingRectangle\", boundingRectangle);\n  Check.defined(\n    \"textureCoordinateRotationPoints\",\n    textureCoordinateRotationPoints,\n  );\n  Check.typeOf.object(\"ellipsoid\", ellipsoid);\n  Check.typeOf.object(\"projection\", projection);\n  //>>includeEnd('debug');\n\n  // rectangle cartographic coords !== spherical because it's on an ellipsoid\n  const southWestExtents = latLongToSpherical(\n    boundingRectangle.south,\n    boundingRectangle.west,\n    ellipsoid,\n    sphericalScratch,\n  );\n\n  let south = southWestExtents.x;\n  let west = southWestExtents.y;\n\n  const northEastExtents = latLongToSpherical(\n    boundingRectangle.north,\n    boundingRectangle.east,\n    ellipsoid,\n    sphericalScratch,\n  );\n  let north = northEastExtents.x;\n  let east = northEastExtents.y;\n\n  // If the bounding rectangle crosses the IDL, rotate the spherical extents so the cross no longer happens.\n  // This rotation must happen in the shader too.\n  let rotationRadians = 0.0;\n  if (west > east) {\n    rotationRadians = CesiumMath.PI - west;\n    west = -CesiumMath.PI;\n    east += rotationRadians;\n  }\n\n  // Slightly pad extents to avoid floating point error when fragment culling at edges.\n  south -= CesiumMath.EPSILON5;\n  west -= CesiumMath.EPSILON5;\n  north += CesiumMath.EPSILON5;\n  east += CesiumMath.EPSILON5;\n\n  const longitudeRangeInverse = 1.0 / (east - west);\n  const latitudeRangeInverse = 1.0 / (north - south);\n\n  const attributes = {\n    sphericalExtents: new GeometryInstanceAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 4,\n      normalize: false,\n      value: [south, west, latitudeRangeInverse, longitudeRangeInverse],\n    }),\n    longitudeRotation: new GeometryInstanceAttribute({\n      componentDatatype: ComponentDatatype.FLOAT,\n      componentsPerAttribute: 1,\n      normalize: false,\n      value: [rotationRadians],\n    }),\n  };\n\n  addTextureCoordinateRotationAttributes(\n    attributes,\n    textureCoordinateRotationPoints,\n  );\n  add2DTextureCoordinateAttributes(boundingRectangle, projection, attributes);\n  return attributes;\n};\n\nShadowVolumeAppearance.hasAttributesForTextureCoordinatePlanes = function (\n  attributes,\n) {\n  return (\n    defined(attributes.southWest_HIGH) &&\n    defined(attributes.southWest_LOW) &&\n    defined(attributes.northward) &&\n    defined(attributes.eastward) &&\n    defined(attributes.planes2D_HIGH) &&\n    defined(attributes.planes2D_LOW) &&\n    defined(attributes.uMaxVmax) &&\n    defined(attributes.uvMinAndExtents)\n  );\n};\n\nShadowVolumeAppearance.hasAttributesForSphericalExtents = function (\n  attributes,\n) {\n  return (\n    defined(attributes.sphericalExtents) &&\n    defined(attributes.longitudeRotation) &&\n    defined(attributes.planes2D_HIGH) &&\n    defined(attributes.planes2D_LOW) &&\n    defined(attributes.uMaxVmax) &&\n    defined(attributes.uvMinAndExtents)\n  );\n};\n\nfunction shouldUseSpherical(rectangle) {\n  return (\n    Math.max(rectangle.width, rectangle.height) >\n    ShadowVolumeAppearance.MAX_WIDTH_FOR_PLANAR_EXTENTS\n  );\n}\n\n/**\n * Computes whether the given rectangle is wide enough that texture coordinates\n * over its area should be computed using spherical extents instead of distance to planes.\n *\n * @param {Rectangle} rectangle A rectangle\n * @private\n */\nShadowVolumeAppearance.shouldUseSphericalCoordinates = function (rectangle) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"rectangle\", rectangle);\n  //>>includeEnd('debug');\n\n  return shouldUseSpherical(rectangle);\n};\n\n/**\n * Texture coordinates for ground primitives are computed either using spherical coordinates for large areas or\n * using distance from planes for small areas.\n *\n * @type {number}\n * @constant\n * @private\n */\nShadowVolumeAppearance.MAX_WIDTH_FOR_PLANAR_EXTENTS = CesiumMath.toRadians(1.0);\nexport default ShadowVolumeAppearance;\n","import Check from \"../Core/Check.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\n/**\n * @typedef {object} SingleTileImageryProvider.ConstructorOptions\n *\n * Initialization options for the SingleTileImageryProvider constructor\n *\n * @property {Resource|string} url The url for the tile.\n * @property {number} [tileWidth] The width of the tile, in pixels.\n * @property {number} [tileHeight] The height of the tile, in pixels.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If not specified, the WGS84 ellipsoid is used.\n */\n\n/**\n * Provides a single, top-level imagery tile.  The single image is assumed to be in\n * the Geographic projection (i.e. WGS84 / EPSG:4326),\n * and will be rendered using a {@link GeographicTilingScheme}.\n *\n * @alias SingleTileImageryProvider\n * @constructor\n *\n * @param {SingleTileImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n */\nfunction SingleTileImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  const rectangle = options.rectangle ?? Rectangle.MAX_VALUE;\n  const tilingScheme = new GeographicTilingScheme({\n    rectangle: rectangle,\n    numberOfLevelZeroTilesX: 1,\n    numberOfLevelZeroTilesY: 1,\n    ellipsoid: options.ellipsoid,\n  });\n  this._tilingScheme = tilingScheme;\n  this._image = undefined;\n  this._texture = undefined;\n\n  this._hasError = false;\n  this._errorEvent = new Event();\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.url\", options.url);\n  //>>includeEnd('debug');\n\n  const resource = Resource.createIfNeeded(options.url);\n  this._resource = resource;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"options.tileWidth\", options.tileWidth);\n  Check.typeOf.number(\"options.tileHeight\", options.tileHeight);\n  //>>includeEnd('debug');\n\n  this._tileWidth = options.tileWidth;\n  this._tileHeight = options.tileHeight;\n}\n\nObject.defineProperties(SingleTileImageryProvider.prototype, {\n  /**\n   * Gets the URL of the single, top-level imagery tile.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource.url;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._tilingScheme.rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof SingleTileImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return true;\n    },\n  },\n});\n\nfunction failure(resource, error, provider, previousError) {\n  let message = `Failed to load image ${resource.url}`;\n  if (defined(error) && defined(error.message)) {\n    message += `: ${error.message}`;\n  }\n\n  const reportedError = TileProviderError.reportError(\n    previousError,\n    provider,\n    defined(provider) ? provider._errorEvent : undefined,\n    message,\n    0,\n    0,\n    0,\n    error,\n  );\n  if (reportedError.retry) {\n    return doRequest(resource, provider, reportedError);\n  }\n\n  if (defined(provider)) {\n    provider._hasError = true;\n  }\n  throw new RuntimeError(message);\n}\n\nasync function doRequest(resource, provider, previousError) {\n  try {\n    const image = await ImageryProvider.loadImage(null, resource);\n    return image;\n  } catch (error) {\n    return failure(resource, error, provider, previousError);\n  }\n}\n\n/**\n * @typedef {object} SingleTileImageryProvider.fromUrlOptions\n *\n * Initialization options for the SingleTileImageryProvider constructor when using SingleTileImageryProvider.fromUrl\n *\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If not specified, the WGS84 ellipsoid is used.\n */\n\n/**\n * Creates a provider for a single, top-level imagery tile.  The single image is assumed to use a\n * @param {Resource|string} url The url for the tile\n * @param {SingleTileImageryProvider.fromUrlOptions} [options] Object describing initialization options.\n * @returns {Promise.<SingleTileImageryProvider>} The resolved SingleTileImageryProvider.\n *\n * @example\n * const provider = await SingleTileImageryProvider.fromUrl(\"https://yoururl.com/image.png\");\n */\nSingleTileImageryProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  const resource = Resource.createIfNeeded(url);\n  const image = await doRequest(resource);\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const provider = new SingleTileImageryProvider({\n    ...options,\n    url: url,\n    tileWidth: image.width,\n    tileHeight: image.height,\n  });\n  provider._image = image;\n  return provider;\n};\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nSingleTileImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise.<ImageryTypes>|undefined} The resolved image\n */\nSingleTileImageryProvider.prototype.requestImage = async function (\n  x,\n  y,\n  level,\n  request,\n) {\n  if (!this._hasError && !defined(this._image)) {\n    const image = await doRequest(this._resource, this);\n    this._image = image;\n    TileProviderError.reportSuccess(this._errorEvent);\n    return image;\n  }\n\n  return this._image;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nSingleTileImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\nexport default SingleTileImageryProvider;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport VertexFormat from \"../Core/VertexFormat.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport AtmosphereCommon from \"../Shaders/AtmosphereCommon.js\";\nimport SkyAtmosphereCommon from \"../Shaders/SkyAtmosphereCommon.js\";\nimport SkyAtmosphereFS from \"../Shaders/SkyAtmosphereFS.js\";\nimport SkyAtmosphereVS from \"../Shaders/SkyAtmosphereVS.js\";\nimport Axis from \"./Axis.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport CullFace from \"./CullFace.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * An atmosphere drawn around the limb of the provided ellipsoid. Based on\n * {@link http://nishitalab.org/user/nis/cdrom/sig93_nis.pdf|Display of The Earth Taking Into Account Atmospheric Scattering}.\n * <p>\n * This is only supported in 3D. Atmosphere is faded out when morphing to 2D or Columbus view.\n * </p>\n *\n * @alias SkyAtmosphere\n * @constructor\n *\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid that the atmosphere is drawn around.\n *\n * @example\n * scene.skyAtmosphere = new Cesium.SkyAtmosphere();\n *\n * @see Scene.skyAtmosphere\n */\nfunction SkyAtmosphere(ellipsoid) {\n  ellipsoid = ellipsoid ?? Ellipsoid.WGS84;\n\n  /**\n   * Determines if the atmosphere is shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = true;\n\n  /**\n   * Compute atmosphere per-fragment instead of per-vertex.\n   * This produces better looking atmosphere with a slight performance penalty.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.perFragmentAtmosphere = false;\n\n  this._ellipsoid = ellipsoid;\n\n  const outerEllipsoidScale = 1.025;\n  const scaleVector = Cartesian3.multiplyByScalar(\n    ellipsoid.radii,\n    outerEllipsoidScale,\n    new Cartesian3(),\n  );\n  this._scaleMatrix = Matrix4.fromScale(scaleVector);\n  this._modelMatrix = new Matrix4();\n\n  this._command = new DrawCommand({\n    owner: this,\n    modelMatrix: this._modelMatrix,\n  });\n  this._spSkyFromSpace = undefined;\n  this._spSkyFromAtmosphere = undefined;\n\n  this._flags = undefined;\n\n  /**\n   * The intensity of the light that is used for computing the sky atmosphere color.\n   *\n   * @type {number}\n   * @default 50.0\n   */\n  this.atmosphereLightIntensity = 50.0;\n\n  /**\n   * The Rayleigh scattering coefficient used in the atmospheric scattering equations for the sky atmosphere.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3(5.5e-6, 13.0e-6, 28.4e-6)\n   */\n  this.atmosphereRayleighCoefficient = new Cartesian3(5.5e-6, 13.0e-6, 28.4e-6);\n\n  /**\n   * The Mie scattering coefficient used in the atmospheric scattering equations for the sky atmosphere.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3(21e-6, 21e-6, 21e-6)\n   */\n  this.atmosphereMieCoefficient = new Cartesian3(21e-6, 21e-6, 21e-6);\n\n  /**\n   * The Rayleigh scale height used in the atmospheric scattering equations for the sky atmosphere, in meters.\n   *\n   * @type {number}\n   * @default 10000.0\n   */\n  this.atmosphereRayleighScaleHeight = 10000.0;\n\n  /**\n   * The Mie scale height used in the atmospheric scattering equations for the sky atmosphere, in meters.\n   *\n   * @type {number}\n   * @default 3200.0\n   */\n  this.atmosphereMieScaleHeight = 3200.0;\n\n  /**\n   * The anisotropy of the medium to consider for Mie scattering.\n   * <p>\n   * Valid values are between -1.0 and 1.0.\n   * </p>\n   * @type {number}\n   * @default 0.9\n   */\n  this.atmosphereMieAnisotropy = 0.9;\n\n  /**\n   * The hue shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A hue shift of 1.0 indicates a complete rotation of the hues available.\n   * @type {number}\n   * @default 0.0\n   */\n  this.hueShift = 0.0;\n\n  /**\n   * The saturation shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A saturation shift of -1.0 is monochrome.\n   * @type {number}\n   * @default 0.0\n   */\n  this.saturationShift = 0.0;\n\n  /**\n   * The brightness shift to apply to the atmosphere. Defaults to 0.0 (no shift).\n   * A brightness shift of -1.0 is complete darkness, which will let space show through.\n   * @type {number}\n   * @default 0.0\n   */\n  this.brightnessShift = 0.0;\n\n  this._hueSaturationBrightness = new Cartesian3();\n\n  // outer radius, inner radius, dynamic atmosphere color flag\n  const radiiAndDynamicAtmosphereColor = new Cartesian3();\n\n  radiiAndDynamicAtmosphereColor.x =\n    ellipsoid.maximumRadius * outerEllipsoidScale;\n  radiiAndDynamicAtmosphereColor.y = ellipsoid.maximumRadius;\n\n  // Toggles whether the sun position is used. 0 treats the sun as always directly overhead.\n  radiiAndDynamicAtmosphereColor.z = 0;\n\n  this._radiiAndDynamicAtmosphereColor = radiiAndDynamicAtmosphereColor;\n\n  const that = this;\n\n  this._command.uniformMap = {\n    u_radiiAndDynamicAtmosphereColor: function () {\n      return that._radiiAndDynamicAtmosphereColor;\n    },\n    u_hsbShift: function () {\n      that._hueSaturationBrightness.x = that.hueShift;\n      that._hueSaturationBrightness.y = that.saturationShift;\n      that._hueSaturationBrightness.z = that.brightnessShift;\n      return that._hueSaturationBrightness;\n    },\n    u_atmosphereLightIntensity: function () {\n      return that.atmosphereLightIntensity;\n    },\n    u_atmosphereRayleighCoefficient: function () {\n      return that.atmosphereRayleighCoefficient;\n    },\n    u_atmosphereMieCoefficient: function () {\n      return that.atmosphereMieCoefficient;\n    },\n    u_atmosphereRayleighScaleHeight: function () {\n      return that.atmosphereRayleighScaleHeight;\n    },\n    u_atmosphereMieScaleHeight: function () {\n      return that.atmosphereMieScaleHeight;\n    },\n    u_atmosphereMieAnisotropy: function () {\n      return that.atmosphereMieAnisotropy;\n    },\n  };\n}\n\nObject.defineProperties(SkyAtmosphere.prototype, {\n  /**\n   * Gets the ellipsoid the atmosphere is drawn around.\n   * @memberof SkyAtmosphere.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._ellipsoid;\n    },\n  },\n});\n\n/**\n * Set the dynamic lighting enum value for the shader\n * @param {DynamicAtmosphereLightingType} lightingEnum The enum that determines the dynamic atmosphere light source\n *\n * @private\n */\nSkyAtmosphere.prototype.setDynamicLighting = function (lightingEnum) {\n  this._radiiAndDynamicAtmosphereColor.z = lightingEnum;\n};\n\nconst scratchModelMatrix = new Matrix4();\n\n/**\n * @private\n */\nSkyAtmosphere.prototype.update = function (frameState, globe) {\n  if (!this.show) {\n    return undefined;\n  }\n\n  const mode = frameState.mode;\n  if (mode !== SceneMode.SCENE3D && mode !== SceneMode.MORPHING) {\n    return undefined;\n  }\n\n  // The atmosphere is only rendered during the render pass; it is not pickable, it doesn't cast shadows, etc.\n  if (!frameState.passes.render) {\n    return undefined;\n  }\n\n  // Align the ellipsoid geometry so it always faces the same direction as the\n  // camera to reduce artifacts when rendering atmosphere per-vertex\n  const rotationMatrix = Matrix4.fromRotationTranslation(\n    frameState.context.uniformState.inverseViewRotation,\n    Cartesian3.ZERO,\n    scratchModelMatrix,\n  );\n  const rotationOffsetMatrix = Matrix4.multiplyTransformation(\n    rotationMatrix,\n    Axis.Y_UP_TO_Z_UP,\n    scratchModelMatrix,\n  );\n  const modelMatrix = Matrix4.multiply(\n    this._scaleMatrix,\n    rotationOffsetMatrix,\n    scratchModelMatrix,\n  );\n  Matrix4.clone(modelMatrix, this._modelMatrix);\n\n  const context = frameState.context;\n\n  const colorCorrect = hasColorCorrection(this);\n  const translucent = frameState.globeTranslucencyState.translucent;\n  const perFragmentAtmosphere =\n    this.perFragmentAtmosphere || translucent || !defined(globe) || !globe.show;\n\n  const command = this._command;\n\n  if (!defined(command.vertexArray)) {\n    const geometry = EllipsoidGeometry.createGeometry(\n      new EllipsoidGeometry({\n        radii: new Cartesian3(1.0, 1.0, 1.0),\n        slicePartitions: 256,\n        stackPartitions: 256,\n        vertexFormat: VertexFormat.POSITION_ONLY,\n      }),\n    );\n    command.vertexArray = VertexArray.fromGeometry({\n      context: context,\n      geometry: geometry,\n      attributeLocations: GeometryPipeline.createAttributeLocations(geometry),\n      bufferUsage: BufferUsage.STATIC_DRAW,\n    });\n    command.renderState = RenderState.fromCache({\n      cull: {\n        enabled: true,\n        face: CullFace.FRONT,\n      },\n      blending: BlendingState.ALPHA_BLEND,\n      depthMask: false,\n    });\n  }\n\n  const flags =\n    colorCorrect | (perFragmentAtmosphere << 2) | (translucent << 3);\n\n  if (flags !== this._flags) {\n    this._flags = flags;\n\n    const defines = [];\n\n    if (colorCorrect) {\n      defines.push(\"COLOR_CORRECT\");\n    }\n\n    if (perFragmentAtmosphere) {\n      defines.push(\"PER_FRAGMENT_ATMOSPHERE\");\n    }\n\n    if (translucent) {\n      defines.push(\"GLOBE_TRANSLUCENT\");\n    }\n\n    const vs = new ShaderSource({\n      defines: defines,\n      sources: [AtmosphereCommon, SkyAtmosphereCommon, SkyAtmosphereVS],\n    });\n\n    const fs = new ShaderSource({\n      defines: defines,\n      sources: [AtmosphereCommon, SkyAtmosphereCommon, SkyAtmosphereFS],\n    });\n\n    this._spSkyAtmosphere = ShaderProgram.fromCache({\n      context: context,\n      vertexShaderSource: vs,\n      fragmentShaderSource: fs,\n    });\n\n    command.shaderProgram = this._spSkyAtmosphere;\n  }\n\n  return command;\n};\n\nfunction hasColorCorrection(skyAtmosphere) {\n  return !(\n    CesiumMath.equalsEpsilon(\n      skyAtmosphere.hueShift,\n      0.0,\n      CesiumMath.EPSILON7,\n    ) &&\n    CesiumMath.equalsEpsilon(\n      skyAtmosphere.saturationShift,\n      0.0,\n      CesiumMath.EPSILON7,\n    ) &&\n    CesiumMath.equalsEpsilon(\n      skyAtmosphere.brightnessShift,\n      0.0,\n      CesiumMath.EPSILON7,\n    )\n  );\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see SkyAtmosphere#destroy\n */\nSkyAtmosphere.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * skyAtmosphere = skyAtmosphere && skyAtmosphere.destroy();\n *\n * @see SkyAtmosphere#isDestroyed\n */\nSkyAtmosphere.prototype.destroy = function () {\n  const command = this._command;\n  command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n  this._spSkyAtmosphere =\n    this._spSkyAtmosphere && this._spSkyAtmosphere.destroy();\n  return destroyObject(this);\n};\nexport default SkyAtmosphere;\n","import buildModuleUrl from \"../Core/buildModuleUrl.js\";\nimport CubeMapPanorama from \"./CubeMapPanorama.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\n\n/**\n * A sky box around the scene to draw stars.  The sky box is defined using the True Equator Mean Equinox (TEME) axes.\n * <p>\n * This is only supported in 3D.  The sky box is faded out when morphing to 2D or Columbus view.  The size of\n * the sky box must not exceed {@link Scene#maximumCubeMapSize}.\n * </p>\n *\n * @alias SkyBox\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {object} [options.sources] The source URL or <code>Image</code> object for each of the six cube map faces.  See the example below.\n * @param {boolean} [options.show=true] Determines if this primitive will be shown.\n *\n *\n * @example\n * scene.skyBox = new Cesium.SkyBox({\n *   sources : {\n *     positiveX : 'skybox_px.png',\n *     negativeX : 'skybox_nx.png',\n *     positiveY : 'skybox_py.png',\n *     negativeY : 'skybox_ny.png',\n *     positiveZ : 'skybox_pz.png',\n *     negativeZ : 'skybox_nz.png'\n *   }\n * });\n *\n * @see Scene#skyBox\n * @see Transforms.computeTemeToPseudoFixedMatrix\n */\nfunction SkyBox(options) {\n  this._sources = options.sources;\n\n  /**\n   * Determines if the sky box will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n  this._panorama = new CubeMapPanorama({\n    sources: this._sources,\n    show: this._show,\n    returnCommand: true,\n  });\n}\n\nObject.defineProperties(SkyBox.prototype, {\n  /**\n   * Gets or sets the the primitive object.\n   * @memberof SkyBox.prototype\n   * @type {object}\n   */\n  sources: {\n    get: function () {\n      return this._panorama.sources;\n    },\n    set: function (value) {\n      this._panorama.sources = value;\n    },\n  },\n});\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.\n * @exception {DeveloperError} this.sources properties must all be the same type.\n */\nSkyBox.prototype.update = function (frameState, useHdr) {\n  const { mode, passes } = frameState;\n\n  if (mode !== SceneMode.SCENE3D && mode !== SceneMode.MORPHING) {\n    return;\n  }\n\n  if (!passes.render) {\n    return;\n  }\n\n  // Delegate completely\n  return this._panorama.update(frameState, useHdr);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see SkyBox#destroy\n */\nSkyBox.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * skyBox = skyBox && skyBox.destroy();\n *\n * @see SkyBox#isDestroyed\n */\nSkyBox.prototype.destroy = function () {\n  this._panorama = this._panorama && this._panorama.destroy();\n  return destroyObject(this);\n};\n\nfunction getDefaultSkyBoxUrl(suffix) {\n  return buildModuleUrl(`Assets/Textures/SkyBox/tycho2t3_80_${suffix}.jpg`);\n}\n\n/**\n * Creates a skybox instance with the default starmap for the Earth.\n * @return {SkyBox} The default skybox for the Earth\n *\n * @example\n * viewer.scene.skyBox = Cesium.SkyBox.createEarthSkyBox();\n */\nSkyBox.createEarthSkyBox = function () {\n  return new SkyBox({\n    sources: {\n      positiveX: getDefaultSkyBoxUrl(\"px\"),\n      negativeX: getDefaultSkyBoxUrl(\"mx\"),\n      positiveY: getDefaultSkyBoxUrl(\"py\"),\n      negativeY: getDefaultSkyBoxUrl(\"my\"),\n      positiveZ: getDefaultSkyBoxUrl(\"pz\"),\n      negativeZ: getDefaultSkyBoxUrl(\"mz\"),\n    },\n  });\n};\n\nexport default SkyBox;\n","import binarySearch from \"../Core/binarySearch.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport KeyframeNode from \"./KeyframeNode.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\n\n/**\n * @alias SpatialNode\n * @constructor\n *\n * @param {number} level\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {SpatialNode} parent\n * @param {VoxelShape} shape\n * @param {Cartesian3} voxelDimensions\n *\n * @private\n */\nfunction SpatialNode(level, x, y, z, parent, shape, voxelDimensions) {\n  /**\n   * @type {SpatialNode[]}\n   */\n  this.children = undefined;\n  this.parent = parent;\n\n  this.level = level;\n  this.x = x;\n  this.y = y;\n  this.z = z;\n\n  /**\n   * @type {Cartesian3}\n   */\n  this.dimensions = Cartesian3.clone(voxelDimensions);\n  /**\n   * @type {KeyframeNode[]}\n   */\n  this.keyframeNodes = [];\n  /**\n   * @type {KeyframeNode[]}\n   */\n  this.renderableKeyframeNodes = [];\n\n  this.renderableKeyframeNodeLerp = 0.0;\n  /**\n   * @type {KeyframeNode}\n   */\n  this.renderableKeyframeNodePrevious = undefined;\n  /**\n   * @type {KeyframeNode}\n   */\n  this.renderableKeyframeNodeNext = undefined;\n\n  this.orientedBoundingBox = new OrientedBoundingBox();\n  this.approximateVoxelSize = 0.0;\n  this.screenSpaceError = 0.0;\n  this.visitedFrameNumber = -1;\n\n  this.computeBoundingVolumes(shape);\n}\n\nconst scratchObbHalfScale = new Cartesian3();\n\n/**\n * @param {VoxelShape} shape\n */\nSpatialNode.prototype.computeBoundingVolumes = function (shape) {\n  this.orientedBoundingBox = shape.computeOrientedBoundingBoxForTile(\n    this.level,\n    this.x,\n    this.y,\n    this.z,\n    this.orientedBoundingBox,\n  );\n\n  const halfScale = Matrix3.getScale(\n    this.orientedBoundingBox.halfAxes,\n    scratchObbHalfScale,\n  );\n  const maximumScale = 2.0 * Cartesian3.maximumComponent(halfScale);\n  this.approximateVoxelSize =\n    maximumScale / Cartesian3.minimumComponent(this.dimensions);\n};\n\n/**\n * @param {VoxelShape} shape The shape of the parent VoxelPrimitive\n * @private\n */\nSpatialNode.prototype.constructChildNodes = function (shape) {\n  const { level, x, y, z } = this;\n  const xMin = x * 2;\n  const yMin = y * 2;\n  const zMin = z * 2;\n  const yMax = yMin + 1;\n  const xMax = xMin + 1;\n  const zMax = zMin + 1;\n  const childLevel = level + 1;\n\n  const childCoords = [\n    [childLevel, xMin, yMin, zMin],\n    [childLevel, xMax, yMin, zMin],\n    [childLevel, xMin, yMax, zMin],\n    [childLevel, xMax, yMax, zMin],\n    [childLevel, xMin, yMin, zMax],\n    [childLevel, xMax, yMin, zMax],\n    [childLevel, xMin, yMax, zMax],\n    [childLevel, xMax, yMax, zMax],\n  ];\n\n  this.children = childCoords.map(([level, x, y, z]) => {\n    return new SpatialNode(level, x, y, z, this, shape, this.dimensions);\n  });\n};\n\n/**\n * @param {FrameState} frameState\n * @param {number} visibilityPlaneMask\n * @returns {number} A plane mask as described in {@link CullingVolume#computeVisibilityWithPlaneMask}.\n */\nSpatialNode.prototype.visibility = function (frameState, visibilityPlaneMask) {\n  const obb = this.orientedBoundingBox;\n  const cullingVolume = frameState.cullingVolume;\n  return cullingVolume.computeVisibilityWithPlaneMask(obb, visibilityPlaneMask);\n};\n\n/**\n * @param {Cartesian3} cameraPosition\n * @param {number} screenSpaceErrorMultiplier\n */\nSpatialNode.prototype.computeScreenSpaceError = function (\n  cameraPosition,\n  screenSpaceErrorMultiplier,\n) {\n  const obb = this.orientedBoundingBox;\n\n  let distance = Math.sqrt(obb.distanceSquaredTo(cameraPosition));\n  // Avoid divide-by-zero when viewer is inside the tile.\n  distance = Math.max(distance, CesiumMath.EPSILON7);\n  const approximateVoxelSize = this.approximateVoxelSize;\n  const error = screenSpaceErrorMultiplier * (approximateVoxelSize / distance);\n  this.screenSpaceError = error;\n};\n\n// This object imitates a KeyframeNode. Only used for binary search function.\nconst scratchBinarySearchKeyframeNode = {\n  keyframe: 0,\n};\n\n/**\n * Find the index of a given key frame position within an array of KeyframeNodes,\n * or the complement (~) of the index where it would be in the sorted array.\n * @param {number} keyframe\n * @param {KeyframeNode[]} keyframeNodes\n * @returns {number}\n * @private\n */\nfunction findKeyframeIndex(keyframe, keyframeNodes) {\n  scratchBinarySearchKeyframeNode.keyframe = keyframe;\n  return binarySearch(\n    keyframeNodes,\n    scratchBinarySearchKeyframeNode,\n    KeyframeNode.searchComparator,\n  );\n}\n\n/**\n * Computes the most suitable keyframes for rendering, balancing between temporal and visual quality.\n *\n * @param {number} keyframeLocation\n */\nSpatialNode.prototype.computeSurroundingRenderableKeyframeNodes = function (\n  keyframeLocation,\n) {\n  let spatialNode = this;\n  const startLevel = spatialNode.level;\n\n  const targetKeyframePrev = Math.floor(keyframeLocation);\n  const targetKeyframeNext = Math.ceil(keyframeLocation);\n\n  let bestKeyframeNodePrev;\n  let bestKeyframeNodeNext;\n  let minimumDistancePrev = +Number.MAX_VALUE;\n  let minimumDistanceNext = +Number.MAX_VALUE;\n\n  while (defined(spatialNode)) {\n    const { renderableKeyframeNodes } = spatialNode;\n\n    if (renderableKeyframeNodes.length >= 1) {\n      const indexPrev = getKeyframeIndexPrev(\n        targetKeyframePrev,\n        renderableKeyframeNodes,\n      );\n      const keyframeNodePrev = renderableKeyframeNodes[indexPrev];\n\n      const indexNext =\n        targetKeyframeNext === targetKeyframePrev ||\n        targetKeyframePrev < keyframeNodePrev.keyframe\n          ? indexPrev\n          : Math.min(indexPrev + 1, renderableKeyframeNodes.length - 1);\n      const keyframeNodeNext = renderableKeyframeNodes[indexNext];\n\n      const distancePrev = targetKeyframePrev - keyframeNodePrev.keyframe;\n      const weightedDistancePrev = getWeightedKeyframeDistance(\n        startLevel - spatialNode.level,\n        distancePrev,\n      );\n      if (weightedDistancePrev < minimumDistancePrev) {\n        minimumDistancePrev = weightedDistancePrev;\n        bestKeyframeNodePrev = keyframeNodePrev;\n      }\n\n      const distanceNext = keyframeNodeNext.keyframe - targetKeyframeNext;\n      const weightedDistanceNext = getWeightedKeyframeDistance(\n        startLevel - spatialNode.level,\n        distanceNext,\n      );\n      if (weightedDistanceNext < minimumDistanceNext) {\n        minimumDistanceNext = weightedDistanceNext;\n        bestKeyframeNodeNext = keyframeNodeNext;\n      }\n\n      if (distancePrev === 0 && distanceNext === 0) {\n        // Nothing higher up will be better, so break early.\n        break;\n      }\n    }\n\n    spatialNode = spatialNode.parent;\n  }\n\n  this.renderableKeyframeNodePrevious = bestKeyframeNodePrev;\n  this.renderableKeyframeNodeNext = bestKeyframeNodeNext;\n\n  if (!defined(bestKeyframeNodePrev) || !defined(bestKeyframeNodeNext)) {\n    return;\n  }\n\n  const bestKeyframePrev = bestKeyframeNodePrev.keyframe;\n  const bestKeyframeNext = bestKeyframeNodeNext.keyframe;\n  this.renderableKeyframeNodeLerp =\n    bestKeyframePrev === bestKeyframeNext\n      ? 0.0\n      : CesiumMath.clamp(\n          (keyframeLocation - bestKeyframePrev) /\n            (bestKeyframeNext - bestKeyframePrev),\n          0.0,\n          1.0,\n        );\n};\n\nfunction getKeyframeIndexPrev(targetKeyframe, keyframeNodes) {\n  const keyframeIndex = findKeyframeIndex(targetKeyframe, keyframeNodes);\n  return keyframeIndex < 0\n    ? CesiumMath.clamp(~keyframeIndex - 1, 0, keyframeNodes.length - 1)\n    : keyframeIndex;\n}\n\nfunction getWeightedKeyframeDistance(levelDistance, keyframeDistance) {\n  // Balance quality between visual (levelDistance) and temporal (keyframeDistance)\n  const levelWeight = Math.exp(levelDistance * 4.0);\n  // Keyframes on the opposite of the desired direction are deprioritized.\n  const keyframeWeight = keyframeDistance >= 0 ? 1.0 : -200.0;\n  return levelDistance * levelWeight + keyframeDistance * keyframeWeight;\n}\n\n/**\n * @param {number} frameNumber\n * @returns {boolean}\n */\nSpatialNode.prototype.isVisited = function (frameNumber) {\n  return this.visitedFrameNumber === frameNumber;\n};\n\n/**\n * @param {number} keyframe\n */\nSpatialNode.prototype.createKeyframeNode = function (keyframe) {\n  let index = findKeyframeIndex(keyframe, this.keyframeNodes);\n  if (index < 0) {\n    index = ~index; // convert to insertion index\n    const keyframeNode = new KeyframeNode(this, keyframe);\n    this.keyframeNodes.splice(index, 0, keyframeNode);\n  }\n};\n\n/**\n * @param {KeyframeNode} keyframeNode\n * @param {Megatexture[]} megatextures\n */\nSpatialNode.prototype.destroyKeyframeNode = function (\n  keyframeNode,\n  megatextures,\n) {\n  const keyframe = keyframeNode.keyframe;\n  const keyframeIndex = findKeyframeIndex(keyframe, this.keyframeNodes);\n  if (keyframeIndex < 0) {\n    throw new DeveloperError(\"Keyframe node does not exist.\");\n  }\n\n  this.keyframeNodes.splice(keyframeIndex, 1);\n\n  if (keyframeNode.megatextureIndex !== -1) {\n    for (let i = 0; i < megatextures.length; i++) {\n      megatextures[i].remove(keyframeNode.megatextureIndex);\n    }\n\n    const renderableKeyframeNodeIndex = findKeyframeIndex(\n      keyframe,\n      this.renderableKeyframeNodes,\n    );\n    if (renderableKeyframeNodeIndex < 0) {\n      throw new DeveloperError(\"Renderable keyframe node does not exist.\");\n    }\n\n    this.renderableKeyframeNodes.splice(renderableKeyframeNodeIndex, 1);\n  }\n\n  keyframeNode.unload();\n};\n\n/**\n * @param {KeyframeNode} keyframeNode\n * @param {Megatexture[]} megatextures\n */\nSpatialNode.prototype.addKeyframeNodeToMegatextures = function (\n  keyframeNode,\n  megatextures,\n) {\n  if (\n    keyframeNode.megatextureIndex !== -1 ||\n    keyframeNode.content.metadata.length !== megatextures.length\n  ) {\n    throw new DeveloperError(\"Keyframe node cannot be added to megatexture\");\n  }\n\n  const { metadata } = keyframeNode.content;\n  for (let i = 0; i < megatextures.length; i++) {\n    const megatexture = megatextures[i];\n    keyframeNode.megatextureIndex = megatexture.add(metadata[i]);\n  }\n\n  const renderableKeyframeNodes = this.renderableKeyframeNodes;\n  let renderableKeyframeNodeIndex = findKeyframeIndex(\n    keyframeNode.keyframe,\n    renderableKeyframeNodes,\n  );\n  if (renderableKeyframeNodeIndex >= 0) {\n    throw new DeveloperError(\"Keyframe already renderable\");\n  }\n  renderableKeyframeNodeIndex = ~renderableKeyframeNodeIndex;\n  renderableKeyframeNodes.splice(renderableKeyframeNodeIndex, 0, keyframeNode);\n};\n\n/**\n * @param {number} frameNumber\n * @returns {boolean}\n */\nSpatialNode.prototype.isRenderable = function (frameNumber) {\n  const previousNode = this.renderableKeyframeNodePrevious;\n  const nextNode = this.renderableKeyframeNodeNext;\n  const level = this.level;\n\n  return (\n    defined(previousNode) &&\n    defined(nextNode) &&\n    (previousNode.spatialNode.level === level ||\n      nextNode.spatialNode.level === level) &&\n    this.visitedFrameNumber === frameNumber\n  );\n};\n\nexport default SpatialNode;\n","import defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport loadKTX2 from \"../Core/loadKTX2.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport CubeMap from \"../Renderer/CubeMap.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\n\n/**\n * Manages a cube map for use as a specular environment map.\n *\n * @alias SpecularEnvironmentCubeMap\n * @constructor\n *\n * @param {string} url The url to the KTX2 file containing the specular environment map and convoluted mipmaps.\n * @private\n */\nfunction SpecularEnvironmentCubeMap(url) {\n  this._url = url;\n\n  this._cubeMapBuffers = undefined;\n  this._texture = undefined;\n\n  this._maximumMipmapLevel = undefined;\n\n  this._loading = false;\n  this._ready = false;\n\n  this._errorEvent = new Event();\n}\n\nObject.defineProperties(SpecularEnvironmentCubeMap.prototype, {\n  /**\n   * The url to the KTX2 file containing the specular environment map and convoluted mipmaps.\n   * @memberof SpecularEnvironmentCubeMap.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._url;\n    },\n  },\n  /**\n   * Gets an event that is raised when encountering an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.\n   * @memberof SpecularEnvironmentCubeMap.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n  /**\n   * A texture containing all the packed convolutions.\n   * @memberof SpecularEnvironmentCubeMap.prototype\n   * @type {Texture}\n   * @readonly\n   */\n  texture: {\n    get: function () {\n      return this._texture;\n    },\n  },\n  /**\n   * The maximum number of mip levels with valid environment map data.\n   * This may differ from the number of mips in the WebGL cubemap.\n   * The data loaded at <code>maximumMipmapLevel</code> is suitable for\n   * PBR rendering of a material with maximum roughness (1.0).\n   * @memberOf SpecularEnvironmentCubeMap.prototype\n   * @type {number}\n   * @readonly\n   */\n  maximumMipmapLevel: {\n    get: function () {\n      return this._maximumMipmapLevel;\n    },\n  },\n  /**\n   * Determines if the cube map is complete and ready to use.\n   * @memberof SpecularEnvironmentCubeMap.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\nSpecularEnvironmentCubeMap.isSupported = function (context) {\n  const supportsFloatBuffersAndTextures =\n    (context.colorBufferHalfFloat && context.halfFloatingPointTexture) ||\n    (context.floatingPointTexture && context.colorBufferFloat);\n  return supportsFloatBuffersAndTextures && context.supportsTextureLod;\n};\n\nfunction cleanupResources(map) {\n  map._cubeMapBuffers = undefined;\n}\n\n/**\n * Loads the environment map image and constructs the cube map for specular radiance calculations.\n * <p>\n * Once the image is loaded, the next call cleans up unused resources. Every call after that is a no-op.\n * </p>\n * @param {FrameState} frameState The frame state.\n *\n * @private\n */\nSpecularEnvironmentCubeMap.prototype.update = function (frameState) {\n  const { context } = frameState;\n\n  if (!SpecularEnvironmentCubeMap.isSupported(context)) {\n    return;\n  }\n\n  if (defined(this._texture)) {\n    cleanupResources(this);\n    return;\n  }\n\n  if (!defined(this._texture) && !this._loading) {\n    const cachedTexture = context.textureCache.getTexture(this._url);\n    if (defined(cachedTexture)) {\n      cleanupResources(this);\n      this._texture = cachedTexture;\n      this._maximumMipmapLevel = this._texture.maximumMipmapLevel;\n      this._ready = true;\n    }\n  }\n\n  const cubeMapBuffers = this._cubeMapBuffers;\n  if (!defined(cubeMapBuffers) && !this._loading) {\n    const that = this;\n    loadKTX2(this._url)\n      .then(function (buffers) {\n        that._cubeMapBuffers = buffers;\n        that._loading = false;\n      })\n      .catch(function (error) {\n        if (that.isDestroyed()) {\n          return;\n        }\n        that._errorEvent.raiseEvent(error);\n      });\n    this._loading = true;\n  }\n\n  if (!defined(this._cubeMapBuffers)) {\n    return;\n  }\n\n  // Datatype is defined if it is a normalized type (i.e. ..._UNORM, ..._SFLOAT)\n  let { pixelDatatype } = cubeMapBuffers[0].positiveX;\n  if (!defined(pixelDatatype)) {\n    pixelDatatype = context.halfFloatingPointTexture\n      ? PixelDatatype.HALF_FLOAT\n      : PixelDatatype.FLOAT;\n  }\n  const pixelFormat = PixelFormat.RGBA;\n\n  const mipLevels = cubeMapBuffers.length;\n  this._maximumMipmapLevel = mipLevels - 1;\n\n  const faceSize = cubeMapBuffers[0].positiveX.width;\n  const expectedMipLevels = Math.log2(faceSize) + 1;\n  if (mipLevels !== expectedMipLevels) {\n    // We assume the last supplied mip level was computed as the specular radiance\n    // for roughness 1.0.\n    // Fill the remaining levels with null values, to avoid WebGL errors.\n    const dummyMipLevel = {};\n    Object.values(CubeMap.FaceName).forEach((faceName) => {\n      dummyMipLevel[faceName] = undefined;\n    });\n    for (let mipLevel = mipLevels; mipLevel < expectedMipLevels; mipLevel++) {\n      cubeMapBuffers.push(dummyMipLevel);\n    }\n  }\n\n  const sampler = new Sampler({\n    minificationFilter: TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,\n  });\n\n  const cubeMap = new CubeMap({\n    context: context,\n    source: cubeMapBuffers[0],\n    flipY: false,\n    pixelDatatype: pixelDatatype,\n    pixelFormat: pixelFormat,\n    sampler: sampler,\n  });\n  cubeMap.loadMipmaps(cubeMapBuffers.slice(1));\n  this._texture = cubeMap;\n\n  this._texture.maximumMipmapLevel = this._maximumMipmapLevel;\n  context.textureCache.addTexture(this._url, this._texture);\n\n  this._ready = true;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see SpecularEnvironmentCubeMap#destroy\n */\nSpecularEnvironmentCubeMap.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see SpecularEnvironmentCubeMap#isDestroyed\n */\nSpecularEnvironmentCubeMap.prototype.destroy = function () {\n  cleanupResources(this);\n  this._texture = this._texture && this._texture.destroy();\n  return destroyObject(this);\n};\nexport default SpecularEnvironmentCubeMap;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport CesiumMath from \"../Core/Math.js\";\n\n/**\n * A ParticleEmitter that emits particles within a sphere.\n * Particles will be positioned randomly within the sphere and have initial velocities emanating from the center of the sphere.\n *\n * @alias SphereEmitter\n * @constructor\n *\n * @param {number} [radius=1.0] The radius of the sphere in meters.\n */\nfunction SphereEmitter(radius) {\n  radius = radius ?? 1.0;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number.greaterThan(\"radius\", radius, 0.0);\n  //>>includeEnd('debug');\n\n  this._radius = radius ?? 1.0;\n}\n\nObject.defineProperties(SphereEmitter.prototype, {\n  /**\n   * The radius of the sphere in meters.\n   * @memberof SphereEmitter.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  radius: {\n    get: function () {\n      return this._radius;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number.greaterThan(\"value\", value, 0.0);\n      //>>includeEnd('debug');\n      this._radius = value;\n    },\n  },\n});\n\n/**\n * Initializes the given {Particle} by setting it's position and velocity.\n *\n * @private\n * @param {Particle} particle The particle to initialize\n */\nSphereEmitter.prototype.emit = function (particle) {\n  const theta = CesiumMath.randomBetween(0.0, CesiumMath.TWO_PI);\n  const phi = CesiumMath.randomBetween(0.0, CesiumMath.PI);\n  const rad = CesiumMath.randomBetween(0.0, this._radius);\n\n  const x = rad * Math.cos(theta) * Math.sin(phi);\n  const y = rad * Math.sin(theta) * Math.sin(phi);\n  const z = rad * Math.cos(phi);\n\n  particle.position = Cartesian3.fromElements(x, y, z, particle.position);\n  particle.velocity = Cartesian3.normalize(\n    particle.position,\n    particle.velocity,\n  );\n};\nexport default SphereEmitter;\n","/**\n * The direction to display a primitive or ImageryLayer relative to the {@link Scene#splitPosition}.\n *\n * @enum {number}\n *\n * @see ImageryLayer#splitDirection\n * @see Cesium3DTileset#splitDirection\n */\nconst SplitDirection = {\n  /**\n   * Display the primitive or ImageryLayer to the left of the {@link Scene#splitPosition}.\n   *\n   * @type {number}\n   * @constant\n   */\n  LEFT: -1.0,\n\n  /**\n   *  Always display the primitive or ImageryLayer.\n   *\n   * @type {number}\n   * @constant\n   */\n  NONE: 0.0,\n\n  /**\n   * Display the primitive or ImageryLayer to the right of the {@link Scene#splitPosition}.\n   *\n   * @type {number}\n   * @constant\n   */\n  RIGHT: 1.0,\n};\nexport default Object.freeze(SplitDirection);\n","import ShaderSource from \"../Renderer/ShaderSource.js\";\n\n/**\n * Support for rendering things on only one side of the screen.\n *\n * @private\n */\nconst Splitter = {\n  /**\n   * Given a fragment shader string, returns a modified version of it that\n   * only renders on one side of the screen or the other. Fragments on the\n   * other side are discarded. The screen side is given by a uniform called\n   * `czm_splitDirection`, which can be added by calling\n   * {@link Splitter#addUniforms}, and the split position is given by an\n   * automatic uniform called `czm_splitPosition`.\n   */\n  modifyFragmentShader: function modifyFragmentShader(shader) {\n    shader = ShaderSource.replaceMain(shader, \"czm_splitter_main\");\n    shader +=\n      // czm_splitPosition is not declared because it is an automatic uniform.\n      \"uniform float czm_splitDirection; \\n\" +\n      \"void main() \\n\" +\n      \"{ \\n\" +\n      // Don't split when rendering the shadow map, because it is rendered from\n      // the perspective of a totally different camera.\n      \"#ifndef SHADOW_MAP\\n\" +\n      \"    if (czm_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; \\n\" +\n      \"    if (czm_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; \\n\" +\n      \"#endif\\n\" +\n      \"    czm_splitter_main(); \\n\" +\n      \"} \\n\";\n\n    return shader;\n  },\n\n  /**\n   * Add `czm_splitDirection` to the given uniform map.\n   *\n   * @param {object} object The object on which the `splitDirection` property may be found.\n   * @param {object} uniformMap The uniform map.\n   */\n  addUniforms: function addUniforms(object, uniformMap) {\n    uniformMap.czm_splitDirection = function () {\n      return object.splitDirection;\n    };\n  },\n};\n\nexport default Splitter;\n","import StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\n\n/**\n * The most significant bit is used to identify whether the pixel is 3D Tiles.\n * The next three bits store selection depth for the skip LODs optimization.\n * The last four bits are for increment/decrement shadow volume operations for classification.\n *\n * @private\n */\nconst StencilConstants = {\n  CESIUM_3D_TILE_MASK: 0x80,\n  SKIP_LOD_MASK: 0x70,\n  SKIP_LOD_BIT_SHIFT: 4,\n  CLASSIFICATION_MASK: 0x0f,\n};\n\nStencilConstants.setCesium3DTileBit = function () {\n  return {\n    enabled: true,\n    frontFunction: StencilFunction.ALWAYS,\n    frontOperation: {\n      fail: StencilOperation.KEEP,\n      zFail: StencilOperation.KEEP,\n      zPass: StencilOperation.REPLACE,\n    },\n    backFunction: StencilFunction.ALWAYS,\n    backOperation: {\n      fail: StencilOperation.KEEP,\n      zFail: StencilOperation.KEEP,\n      zPass: StencilOperation.REPLACE,\n    },\n    reference: StencilConstants.CESIUM_3D_TILE_MASK,\n    mask: StencilConstants.CESIUM_3D_TILE_MASK,\n  };\n};\nexport default Object.freeze(StencilConstants);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines the function used to compare stencil values for the stencil test.\n *\n * @enum {number}\n */\nconst StencilFunction = {\n  /**\n   * The stencil test never passes.\n   *\n   * @type {number}\n   * @constant\n   */\n  NEVER: WebGLConstants.NEVER,\n\n  /**\n   * The stencil test passes when the masked reference value is less than the masked stencil value.\n   *\n   * @type {number}\n   * @constant\n   */\n  LESS: WebGLConstants.LESS,\n\n  /**\n   * The stencil test passes when the masked reference value is equal to the masked stencil value.\n   *\n   * @type {number}\n   * @constant\n   */\n  EQUAL: WebGLConstants.EQUAL,\n\n  /**\n   * The stencil test passes when the masked reference value is less than or equal to the masked stencil value.\n   *\n   * @type {number}\n   * @constant\n   */\n  LESS_OR_EQUAL: WebGLConstants.LEQUAL,\n\n  /**\n   * The stencil test passes when the masked reference value is greater than the masked stencil value.\n   *\n   * @type {number}\n   * @constant\n   */\n  GREATER: WebGLConstants.GREATER,\n\n  /**\n   * The stencil test passes when the masked reference value is not equal to the masked stencil value.\n   *\n   * @type {number}\n   * @constant\n   */\n  NOT_EQUAL: WebGLConstants.NOTEQUAL,\n\n  /**\n   * The stencil test passes when the masked reference value is greater than or equal to the masked stencil value.\n   *\n   * @type {number}\n   * @constant\n   */\n  GREATER_OR_EQUAL: WebGLConstants.GEQUAL,\n\n  /**\n   * The stencil test always passes.\n   *\n   * @type {number}\n   * @constant\n   */\n  ALWAYS: WebGLConstants.ALWAYS,\n};\nexport default Object.freeze(StencilFunction);\n","import WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Determines the action taken based on the result of the stencil test.\n *\n * @enum {number}\n */\nconst StencilOperation = {\n  /**\n   * Sets the stencil buffer value to zero.\n   *\n   * @type {number}\n   * @constant\n   */\n  ZERO: WebGLConstants.ZERO,\n\n  /**\n   * Does not change the stencil buffer.\n   *\n   * @type {number}\n   * @constant\n   */\n  KEEP: WebGLConstants.KEEP,\n\n  /**\n   * Replaces the stencil buffer value with the reference value.\n   *\n   * @type {number}\n   * @constant\n   */\n  REPLACE: WebGLConstants.REPLACE,\n\n  /**\n   * Increments the stencil buffer value, clamping to unsigned byte.\n   *\n   * @type {number}\n   * @constant\n   */\n  INCREMENT: WebGLConstants.INCR,\n\n  /**\n   * Decrements the stencil buffer value, clamping to zero.\n   *\n   * @type {number}\n   * @constant\n   */\n  DECREMENT: WebGLConstants.DECR,\n\n  /**\n   * Bitwise inverts the existing stencil buffer value.\n   *\n   * @type {number}\n   * @constant\n   */\n  INVERT: WebGLConstants.INVERT,\n\n  /**\n   * Increments the stencil buffer value, wrapping to zero when exceeding the unsigned byte range.\n   *\n   * @type {number}\n   * @constant\n   */\n  INCREMENT_WRAP: WebGLConstants.INCR_WRAP,\n\n  /**\n   * Decrements the stencil buffer value, wrapping to the maximum unsigned byte instead of going below zero.\n   *\n   * @type {number}\n   * @constant\n   */\n  DECREMENT_WRAP: WebGLConstants.DECR_WRAP,\n};\nexport default Object.freeze(StencilOperation);\n","import { destroyObject } from \"@cesium/engine\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\n\n/**\n * An object containing structural metadata.\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension} as well as the\n * previous {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata|EXT_feature_metadata Extension} for glTF.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {MetadataSchema} options.schema The parsed schema.\n * @param {PropertyTable[]} [options.propertyTables] An array of property table objects. For the legacy <code>EXT_feature_metadata</code> extension, this is sorted by the key in the propertyTables dictionary\n * @param {PropertyTexture[]} [options.propertyTextures] An array of property texture objects. For the legacy <code>EXT_feature_metadata</code> extension, this is sorted by the key in the propertyTextures dictionary\n * @param {PropertyAttribute[]} [options.propertyAttributes] An array of property attribute objects. This is new in <code>EXT_structural_metadata</code>\n * @param {object} [options.statistics] Statistics about metadata\n * @param {object} [options.extras] Extra user-defined properties\n * @param {object} [options.extensions] An object containing extensions\n *\n * @alias StructuralMetadata\n * @constructor\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction StructuralMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.schema\", options.schema);\n  //>>includeEnd('debug');\n\n  this._schema = options.schema;\n  const propertyTables = options.propertyTables;\n  this._propertyTableCount = defined(propertyTables)\n    ? propertyTables.length\n    : 0;\n  this._propertyTables = propertyTables ?? [];\n  this._propertyTextures = options.propertyTextures ?? [];\n  this._propertyAttributes = options.propertyAttributes ?? [];\n  this._statistics = options.statistics;\n  this._extras = options.extras;\n  this._extensions = options.extensions;\n}\n\nObject.defineProperties(StructuralMetadata.prototype, {\n  /**\n   * Schema containing classes and enums.\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {MetadataSchema}\n   * @readonly\n   * @private\n   */\n  schema: {\n    get: function () {\n      return this._schema;\n    },\n  },\n\n  /**\n   * Statistics about the metadata.\n   * <p>\n   * See the {@link https://github.com/CesiumGS/glTF/blob/3d-tiles-next/extensions/2.0/Vendor/EXT_feature_metadata/schema/statistics.schema.json|statistics schema reference} for the full set of properties.\n   * </p>\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  statistics: {\n    get: function () {\n      return this._statistics;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n\n  /**\n   * Number of property tables in the metadata.\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  propertyTableCount: {\n    get: function () {\n      return this._propertyTableCount;\n    },\n  },\n\n  /**\n   * The property tables in the metadata.\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {PropertyTable[]}\n   * @readonly\n   * @private\n   */\n  propertyTables: {\n    get: function () {\n      return this._propertyTables;\n    },\n  },\n\n  /**\n   * The property textures in the metadata.\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {PropertyTexture[]}\n   * @readonly\n   * @private\n   */\n  propertyTextures: {\n    get: function () {\n      return this._propertyTextures;\n    },\n  },\n\n  /**\n   * The property attributes from the structural metadata extension\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {PropertyAttribute[]}\n   * @readonly\n   * @private\n   */\n  propertyAttributes: {\n    get: function () {\n      return this._propertyAttributes;\n    },\n  },\n\n  /**\n   * Total size in bytes across all property tables\n   *\n   * @memberof StructuralMetadata.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  propertyTablesByteLength: {\n    get: function () {\n      if (!defined(this._propertyTables)) {\n        return 0;\n      }\n\n      let totalByteLength = 0;\n      const length = this._propertyTables.length;\n      for (let i = 0; i < length; i++) {\n        totalByteLength += this._propertyTables[i].byteLength;\n      }\n\n      return totalByteLength;\n    },\n  },\n});\n\n/**\n * Gets the property table with the given ID.\n * <p>\n * For the legacy <code>EXT_feature_metadata</code>, textures are stored in an array sorted\n * by the key in the propertyTables dictionary.\n * </p>\n *\n * @param {number} propertyTableId The property table ID.\n * @returns {PropertyTable} The property table.\n * @private\n */\nStructuralMetadata.prototype.getPropertyTable = function (propertyTableId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"propertyTableId\", propertyTableId);\n  //>>includeEnd('debug');\n\n  return this._propertyTables[propertyTableId];\n};\n\n/**\n * Gets the property texture with the given ID.\n * <p>\n * For the legacy <code>EXT_feature_metadata</code>, textures are stored in an array sorted\n * by the key in the propertyTextures dictionary.\n * </p>\n *\n * @param {number} propertyTextureId The index into the property textures array.\n * @returns {PropertyTexture} The property texture\n * @private\n */\nStructuralMetadata.prototype.getPropertyTexture = function (propertyTextureId) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"propertyTextureId\", propertyTextureId);\n  //>>includeEnd('debug');\n\n  return this._propertyTextures[propertyTextureId];\n};\n\n/**\n * Gets the property attribute with the given ID. This concept is new in\n * EXT_structural_metadata\n *\n * @param {number} propertyAttributeId The index into the property attributes array.\n * @returns {PropertyAttribute} The property attribute\n * @private\n */\nStructuralMetadata.prototype.getPropertyAttribute = function (\n  propertyAttributeId,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"propertyAttributeId\", propertyAttributeId);\n  //>>includeEnd('debug');\n\n  return this._propertyAttributes[propertyAttributeId];\n};\n\n/**\n * Destroys any resources that need cleaning up in the structural metadata.\n *\n * @private\n */\nStructuralMetadata.prototype.destroy = function () {\n  const propertyTables = this._propertyTables;\n  for (let i = 0; i < propertyTables.length; i++) {\n    propertyTables[i] = propertyTables[i] && propertyTables[i].destroy();\n  }\n\n  return destroyObject(this);\n};\n\nexport default StructuralMetadata;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * An expression for a style applied to a {@link Cesium3DTileset}.\n * <p>\n * Derived classes of this interface evaluate expressions in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}.\n * </p>\n * <p>\n * This type describes an interface and is not intended to be instantiated directly.\n * </p>\n *\n * @alias StyleExpression\n * @constructor\n *\n * @see Expression\n * @see ConditionsExpression\n */\nfunction StyleExpression() {}\n\n/**\n * Evaluates the result of an expression, optionally using the provided feature's properties. If the result of\n * the expression in the\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}\n * is of type <code>Boolean</code>, <code>Number</code>, or <code>String</code>, the corresponding JavaScript\n * primitive type will be returned. If the result is a <code>RegExp</code>, a Javascript <code>RegExp</code>\n * object will be returned. If the result is a <code>Cartesian2</code>, <code>Cartesian3</code>, or <code>Cartesian4</code>,\n * a {@link Cartesian2}, {@link Cartesian3}, or {@link Cartesian4} object will be returned. If the <code>result</code> argument is\n * a {@link Color}, the {@link Cartesian4} value is converted to a {@link Color} and then returned.\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {object} [result] The object onto which to store the result.\n * @returns {boolean|number|string|RegExp|Cartesian2|Cartesian3|Cartesian4|Color} The result of evaluating the expression.\n */\nStyleExpression.prototype.evaluate = function (feature, result) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Evaluates the result of a Color expression, optionally using the provided feature's properties.\n * <p>\n * This is equivalent to {@link StyleExpression#evaluate} but always returns a {@link Color} object.\n * </p>\n *\n * @param {Cesium3DTileFeature} feature The feature whose properties may be used as variables in the expression.\n * @param {Color} [result] The object in which to store the result.\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\n */\nStyleExpression.prototype.evaluateColor = function (feature, result) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Gets the shader function for this expression.\n * Returns undefined if the shader function can't be generated from this expression.\n *\n * @param {string} functionSignature Signature of the generated function.\n * @param {object} variableSubstitutionMap Maps variable names to shader variable names.\n * @param {object} shaderState Stores information about the generated shader function, including whether it is translucent.\n * @param {string} returnType The return type of the generated function.\n *\n * @returns {string} The shader function.\n *\n * @private\n */\nStyleExpression.prototype.getShaderFunction = function (\n  functionSignature,\n  variableSubstitutionMap,\n  shaderState,\n  returnType,\n) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Gets the variables used by the expression.\n *\n * @returns {string[]} The variables used by the expression.\n *\n * @private\n */\nStyleExpression.prototype.getVariables = function () {\n  DeveloperError.throwInstantiationError();\n};\n\nexport default StyleExpression;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport ComputeCommand from \"../Renderer/ComputeCommand.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport SunFS from \"../Shaders/SunFS.js\";\nimport SunTextureFS from \"../Shaders/SunTextureFS.js\";\nimport SunVS from \"../Shaders/SunVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport SceneTransforms from \"./SceneTransforms.js\";\n\n/**\n * Draws a sun billboard.\n * <p>This is only supported in 3D and Columbus view.</p>\n *\n * @alias Sun\n * @constructor\n *\n *\n * @example\n * scene.sun = new Cesium.Sun();\n *\n * @see Scene#sun\n */\nfunction Sun() {\n  /**\n   * Determines if the sun will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = true;\n\n  this._drawCommand = new DrawCommand({\n    primitiveType: PrimitiveType.TRIANGLES,\n    boundingVolume: new BoundingSphere(),\n    owner: this,\n  });\n  this._commands = {\n    drawCommand: this._drawCommand,\n    computeCommand: undefined,\n  };\n  this._boundingVolume = new BoundingSphere();\n  this._boundingVolume2D = new BoundingSphere();\n\n  this._texture = undefined;\n  this._drawingBufferWidth = undefined;\n  this._drawingBufferHeight = undefined;\n  this._radiusTS = undefined;\n  this._size = undefined;\n\n  this.glowFactor = 1.0;\n  this._glowFactorDirty = false;\n\n  this._useHdr = undefined;\n\n  const that = this;\n  this._uniformMap = {\n    u_texture: function () {\n      return that._texture;\n    },\n    u_size: function () {\n      return that._size;\n    },\n  };\n}\n\nObject.defineProperties(Sun.prototype, {\n  /**\n   * Gets or sets a number that controls how \"bright\" the Sun's lens flare appears\n   * to be.  Zero shows just the Sun's disc without any flare.\n   * Use larger values for a more pronounced flare around the Sun.\n   *\n   * @memberof Sun.prototype\n   * @type {number}\n   * @default 1.0\n   */\n  glowFactor: {\n    get: function () {\n      return this._glowFactor;\n    },\n    set: function (glowFactor) {\n      glowFactor = Math.max(glowFactor, 0.0);\n      this._glowFactor = glowFactor;\n      this._glowFactorDirty = true;\n    },\n  },\n});\n\nconst scratchPositionWC = new Cartesian2();\nconst scratchLimbWC = new Cartesian2();\nconst scratchPositionEC = new Cartesian4();\nconst scratchCartesian4 = new Cartesian4();\n\n/**\n * @private\n */\nSun.prototype.update = function (frameState, passState, useHdr) {\n  if (!this.show) {\n    return undefined;\n  }\n\n  const mode = frameState.mode;\n  if (mode === SceneMode.SCENE2D || mode === SceneMode.MORPHING) {\n    return undefined;\n  }\n\n  if (!frameState.passes.render) {\n    return undefined;\n  }\n\n  const context = frameState.context;\n  const drawingBufferWidth = passState.viewport.width;\n  const drawingBufferHeight = passState.viewport.height;\n\n  if (\n    !defined(this._texture) ||\n    drawingBufferWidth !== this._drawingBufferWidth ||\n    drawingBufferHeight !== this._drawingBufferHeight ||\n    this._glowFactorDirty ||\n    useHdr !== this._useHdr\n  ) {\n    this._texture = this._texture && this._texture.destroy();\n    this._drawingBufferWidth = drawingBufferWidth;\n    this._drawingBufferHeight = drawingBufferHeight;\n    this._glowFactorDirty = false;\n    this._useHdr = useHdr;\n\n    let size = Math.max(drawingBufferWidth, drawingBufferHeight);\n    size = Math.pow(2.0, Math.ceil(Math.log(size) / Math.log(2.0)) - 2.0);\n\n    // The size computed above can be less than 1.0 if size < 4.0. This will probably\n    // never happen in practice, but does in the tests. Clamp to 1.0 to prevent WebGL\n    // errors in the tests.\n    size = Math.max(1.0, size);\n\n    const pixelDatatype = useHdr\n      ? context.halfFloatingPointTexture\n        ? PixelDatatype.HALF_FLOAT\n        : PixelDatatype.FLOAT\n      : PixelDatatype.UNSIGNED_BYTE;\n    this._texture = new Texture({\n      context: context,\n      width: size,\n      height: size,\n      pixelFormat: PixelFormat.RGBA,\n      pixelDatatype: pixelDatatype,\n    });\n\n    this._glowLengthTS = this._glowFactor * 5.0;\n    this._radiusTS = (1.0 / (1.0 + 2.0 * this._glowLengthTS)) * 0.5;\n\n    const that = this;\n    const uniformMap = {\n      u_radiusTS: function () {\n        return that._radiusTS;\n      },\n    };\n\n    this._commands.computeCommand = new ComputeCommand({\n      fragmentShaderSource: SunTextureFS,\n      outputTexture: this._texture,\n      uniformMap: uniformMap,\n      persists: false,\n      owner: this,\n      postExecute: function () {\n        that._commands.computeCommand = undefined;\n      },\n    });\n  }\n\n  const drawCommand = this._drawCommand;\n\n  if (!defined(drawCommand.vertexArray)) {\n    const attributeLocations = {\n      direction: 0,\n    };\n\n    const directions = new Uint8Array(4 * 2);\n    directions[0] = 0;\n    directions[1] = 0;\n\n    directions[2] = 255;\n    directions[3] = 0.0;\n\n    directions[4] = 255;\n    directions[5] = 255;\n\n    directions[6] = 0.0;\n    directions[7] = 255;\n\n    const vertexBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: directions,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const attributes = [\n      {\n        index: attributeLocations.direction,\n        vertexBuffer: vertexBuffer,\n        componentsPerAttribute: 2,\n        normalize: true,\n        componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\n      },\n    ];\n    // Workaround Internet Explorer 11.0.8 lack of TRIANGLE_FAN\n    const indexBuffer = Buffer.createIndexBuffer({\n      context: context,\n      typedArray: new Uint16Array([0, 1, 2, 0, 2, 3]),\n      usage: BufferUsage.STATIC_DRAW,\n      indexDatatype: IndexDatatype.UNSIGNED_SHORT,\n    });\n    drawCommand.vertexArray = new VertexArray({\n      context: context,\n      attributes: attributes,\n      indexBuffer: indexBuffer,\n    });\n\n    drawCommand.shaderProgram = ShaderProgram.fromCache({\n      context: context,\n      vertexShaderSource: SunVS,\n      fragmentShaderSource: SunFS,\n      attributeLocations: attributeLocations,\n    });\n\n    drawCommand.renderState = RenderState.fromCache({\n      blending: BlendingState.ALPHA_BLEND,\n    });\n    drawCommand.uniformMap = this._uniformMap;\n  }\n\n  const sunPosition = context.uniformState.sunPositionWC;\n  const sunPositionCV = context.uniformState.sunPositionColumbusView;\n\n  const boundingVolume = this._boundingVolume;\n  const boundingVolume2D = this._boundingVolume2D;\n\n  Cartesian3.clone(sunPosition, boundingVolume.center);\n  boundingVolume2D.center.x = sunPositionCV.z;\n  boundingVolume2D.center.y = sunPositionCV.x;\n  boundingVolume2D.center.z = sunPositionCV.y;\n\n  boundingVolume.radius =\n    CesiumMath.SOLAR_RADIUS + CesiumMath.SOLAR_RADIUS * this._glowLengthTS;\n  boundingVolume2D.radius = boundingVolume.radius;\n\n  if (mode === SceneMode.SCENE3D) {\n    BoundingSphere.clone(boundingVolume, drawCommand.boundingVolume);\n  } else if (mode === SceneMode.COLUMBUS_VIEW) {\n    BoundingSphere.clone(boundingVolume2D, drawCommand.boundingVolume);\n  }\n\n  const position = SceneTransforms.computeActualEllipsoidPosition(\n    frameState,\n    sunPosition,\n    scratchCartesian4,\n  );\n\n  const dist = Cartesian3.magnitude(\n    Cartesian3.subtract(\n      position,\n      frameState.camera.position,\n      scratchCartesian4,\n    ),\n  );\n  const projMatrix = context.uniformState.projection;\n\n  const positionEC = scratchPositionEC;\n  positionEC.x = 0;\n  positionEC.y = 0;\n  positionEC.z = -dist;\n  positionEC.w = 1;\n\n  const positionCC = Matrix4.multiplyByVector(\n    projMatrix,\n    positionEC,\n    scratchCartesian4,\n  );\n  const positionWC = SceneTransforms.clipToGLWindowCoordinates(\n    passState.viewport,\n    positionCC,\n    scratchPositionWC,\n  );\n\n  positionEC.x = CesiumMath.SOLAR_RADIUS;\n  const limbCC = Matrix4.multiplyByVector(\n    projMatrix,\n    positionEC,\n    scratchCartesian4,\n  );\n  const limbWC = SceneTransforms.clipToGLWindowCoordinates(\n    passState.viewport,\n    limbCC,\n    scratchLimbWC,\n  );\n\n  this._size = Cartesian2.magnitude(\n    Cartesian2.subtract(limbWC, positionWC, scratchCartesian4),\n  );\n  this._size = 2.0 * this._size * (1.0 + 2.0 * this._glowLengthTS);\n  this._size = Math.ceil(this._size);\n\n  return this._commands;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see Sun#destroy\n */\nSun.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * sun = sun && sun.destroy();\n *\n *  @see Sun#isDestroyed\n */\nSun.prototype.destroy = function () {\n  const command = this._drawCommand;\n  command.vertexArray = command.vertexArray && command.vertexArray.destroy();\n  command.shaderProgram =\n    command.shaderProgram && command.shaderProgram.destroy();\n\n  this._texture = this._texture && this._texture.destroy();\n\n  return destroyObject(this);\n};\nexport default Sun;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\n\n/**\n * A directional light source that originates from the Sun.\n *\n * @param {object} [options] Object with the following properties:\n * @param {Color} [options.color=Color.WHITE] The light's color.\n * @param {number} [options.intensity=2.0] The light's intensity.\n *\n * @alias SunLight\n * @constructor\n */\nfunction SunLight(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  /**\n   * The color of the light.\n   * @type {Color}\n   * @default Color.WHITE\n   */\n  this.color = Color.clone(options.color ?? Color.WHITE);\n\n  /**\n   * The intensity of the light.\n   * @type {number}\n   * @default 2.0\n   */\n  this.intensity = options.intensity ?? 2.0;\n}\n\nexport default SunLight;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport AdditiveBlend from \"../Shaders/PostProcessStages/AdditiveBlend.js\";\nimport BrightPass from \"../Shaders/PostProcessStages/BrightPass.js\";\nimport GaussianBlur1D from \"../Shaders/PostProcessStages/GaussianBlur1D.js\";\nimport PassThrough from \"../Shaders/PostProcessStages/PassThrough.js\";\nimport PostProcessStage from \"./PostProcessStage.js\";\nimport PostProcessStageComposite from \"./PostProcessStageComposite.js\";\nimport PostProcessStageSampleMode from \"./PostProcessStageSampleMode.js\";\nimport PostProcessStageTextureCache from \"./PostProcessStageTextureCache.js\";\nimport SceneFramebuffer from \"./SceneFramebuffer.js\";\n\nfunction SunPostProcess() {\n  this._sceneFramebuffer = new SceneFramebuffer();\n\n  const scale = 0.125;\n  const stages = new Array(6);\n\n  stages[0] = new PostProcessStage({\n    fragmentShader: PassThrough,\n    textureScale: scale,\n    forcePowerOfTwo: true,\n    sampleMode: PostProcessStageSampleMode.LINEAR,\n  });\n\n  const brightPass = (stages[1] = new PostProcessStage({\n    fragmentShader: BrightPass,\n    uniforms: {\n      avgLuminance: 0.5, // A guess at the average luminance across the entire scene\n      threshold: 0.25,\n      offset: 0.1,\n    },\n    textureScale: scale,\n    forcePowerOfTwo: true,\n  }));\n\n  const that = this;\n  this._delta = 1.0;\n  this._sigma = 2.0;\n  this._blurStep = new Cartesian2();\n\n  stages[2] = new PostProcessStage({\n    fragmentShader: GaussianBlur1D,\n    uniforms: {\n      step: function () {\n        that._blurStep.x = that._blurStep.y =\n          1.0 / brightPass.outputTexture.width;\n        return that._blurStep;\n      },\n      delta: function () {\n        return that._delta;\n      },\n      sigma: function () {\n        return that._sigma;\n      },\n      direction: 0.0,\n    },\n    textureScale: scale,\n    forcePowerOfTwo: true,\n  });\n\n  stages[3] = new PostProcessStage({\n    fragmentShader: GaussianBlur1D,\n    uniforms: {\n      step: function () {\n        that._blurStep.x = that._blurStep.y =\n          1.0 / brightPass.outputTexture.width;\n        return that._blurStep;\n      },\n      delta: function () {\n        return that._delta;\n      },\n      sigma: function () {\n        return that._sigma;\n      },\n      direction: 1.0,\n    },\n    textureScale: scale,\n    forcePowerOfTwo: true,\n  });\n\n  stages[4] = new PostProcessStage({\n    fragmentShader: PassThrough,\n    sampleMode: PostProcessStageSampleMode.LINEAR,\n  });\n\n  this._uCenter = new Cartesian2();\n  this._uRadius = undefined;\n\n  stages[5] = new PostProcessStage({\n    fragmentShader: AdditiveBlend,\n    uniforms: {\n      center: function () {\n        return that._uCenter;\n      },\n      radius: function () {\n        return that._uRadius;\n      },\n      colorTexture2: function () {\n        return that._sceneFramebuffer.framebuffer.getColorTexture(0);\n      },\n    },\n  });\n\n  this._stages = new PostProcessStageComposite({\n    stages: stages,\n  });\n\n  const textureCache = new PostProcessStageTextureCache(this);\n  const length = stages.length;\n  for (let i = 0; i < length; ++i) {\n    stages[i]._textureCache = textureCache;\n  }\n\n  this._textureCache = textureCache;\n  this.length = stages.length;\n}\n\nSunPostProcess.prototype.get = function (index) {\n  return this._stages.get(index);\n};\n\nSunPostProcess.prototype.getStageByName = function (name) {\n  const length = this._stages.length;\n  for (let i = 0; i < length; ++i) {\n    const stage = this._stages.get(i);\n    if (stage.name === name) {\n      return stage;\n    }\n  }\n  return undefined;\n};\n\nconst sunPositionECScratch = new Cartesian4();\nconst sunPositionWCScratch = new Cartesian2();\nconst sizeScratch = new Cartesian2();\nconst postProcessMatrix4Scratch = new Matrix4();\n\nfunction updateSunPosition(postProcess, context, viewport) {\n  const us = context.uniformState;\n  const sunPosition = us.sunPositionWC;\n  const viewMatrix = us.view;\n  const viewProjectionMatrix = us.viewProjection;\n  const projectionMatrix = us.projection;\n\n  // create up sampled render state\n  let viewportTransformation = Matrix4.computeViewportTransformation(\n    viewport,\n    0.0,\n    1.0,\n    postProcessMatrix4Scratch,\n  );\n  const sunPositionEC = Matrix4.multiplyByPoint(\n    viewMatrix,\n    sunPosition,\n    sunPositionECScratch,\n  );\n  let sunPositionWC = Transforms.pointToGLWindowCoordinates(\n    viewProjectionMatrix,\n    viewportTransformation,\n    sunPosition,\n    sunPositionWCScratch,\n  );\n\n  sunPositionEC.x += CesiumMath.SOLAR_RADIUS;\n  const limbWC = Transforms.pointToGLWindowCoordinates(\n    projectionMatrix,\n    viewportTransformation,\n    sunPositionEC,\n    sunPositionEC,\n  );\n  const sunSize =\n    Cartesian2.magnitude(Cartesian2.subtract(limbWC, sunPositionWC, limbWC)) *\n    30.0 *\n    2.0;\n\n  const size = sizeScratch;\n  size.x = sunSize;\n  size.y = sunSize;\n\n  postProcess._uCenter = Cartesian2.clone(sunPositionWC, postProcess._uCenter);\n  postProcess._uRadius = Math.max(size.x, size.y) * 0.15;\n\n  const width = context.drawingBufferWidth;\n  const height = context.drawingBufferHeight;\n\n  const stages = postProcess._stages;\n  const firstStage = stages.get(0);\n\n  const downSampleWidth = firstStage.outputTexture.width;\n  const downSampleHeight = firstStage.outputTexture.height;\n\n  const downSampleViewport = new BoundingRectangle();\n  downSampleViewport.width = downSampleWidth;\n  downSampleViewport.height = downSampleHeight;\n\n  // create down sampled render state\n  viewportTransformation = Matrix4.computeViewportTransformation(\n    downSampleViewport,\n    0.0,\n    1.0,\n    postProcessMatrix4Scratch,\n  );\n  sunPositionWC = Transforms.pointToGLWindowCoordinates(\n    viewProjectionMatrix,\n    viewportTransformation,\n    sunPosition,\n    sunPositionWCScratch,\n  );\n\n  size.x *= downSampleWidth / width;\n  size.y *= downSampleHeight / height;\n\n  const scissorRectangle = firstStage.scissorRectangle;\n  scissorRectangle.x = Math.max(sunPositionWC.x - size.x * 0.5, 0.0);\n  scissorRectangle.y = Math.max(sunPositionWC.y - size.y * 0.5, 0.0);\n  scissorRectangle.width = Math.min(size.x, width);\n  scissorRectangle.height = Math.min(size.y, height);\n\n  for (let i = 1; i < 4; ++i) {\n    BoundingRectangle.clone(scissorRectangle, stages.get(i).scissorRectangle);\n  }\n}\n\nSunPostProcess.prototype.clear = function (context, passState, clearColor) {\n  this._sceneFramebuffer.clear(context, passState, clearColor);\n  this._textureCache.clear(context);\n};\n\nSunPostProcess.prototype.update = function (passState) {\n  const context = passState.context;\n  const viewport = passState.viewport;\n\n  const sceneFramebuffer = this._sceneFramebuffer;\n  sceneFramebuffer.update(context, viewport);\n  const framebuffer = sceneFramebuffer.framebuffer;\n\n  this._textureCache.update(context);\n  this._stages.update(context, false);\n\n  updateSunPosition(this, context, viewport);\n\n  return framebuffer;\n};\n\nSunPostProcess.prototype.execute = function (context) {\n  const colorTexture = this._sceneFramebuffer.framebuffer.getColorTexture(0);\n  const stages = this._stages;\n  const length = stages.length;\n  stages.get(0).execute(context, colorTexture);\n  for (let i = 1; i < length; ++i) {\n    stages.get(i).execute(context, stages.get(i - 1).outputTexture);\n  }\n};\n\nSunPostProcess.prototype.copy = function (context, framebuffer) {\n  if (!defined(this._copyColorCommand)) {\n    const that = this;\n    this._copyColorCommand = context.createViewportQuadCommand(PassThrough, {\n      uniformMap: {\n        colorTexture: function () {\n          return that._stages.get(that._stages.length - 1).outputTexture;\n        },\n      },\n      owner: this,\n    });\n  }\n\n  this._copyColorCommand.framebuffer = framebuffer;\n  this._copyColorCommand.execute(context);\n};\n\nSunPostProcess.prototype.isDestroyed = function () {\n  return false;\n};\n\nSunPostProcess.prototype.destroy = function () {\n  this._textureCache.destroy();\n  this._stages.destroy();\n  return destroyObject(this);\n};\nexport default SunPostProcess;\n","import Frozen from \"../Core/Frozen.js\";\n\n/**\n * Image formats supported by the browser.\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.webp=false] Whether the browser supports WebP images.\n * @param {boolean} [options.basis=false] Whether the browser supports compressed textures required to view KTX2 + Basis Universal images.\n *\n * @private\n */\nfunction SupportedImageFormats(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  this.webp = options.webp ?? false;\n  this.basis = options.basis ?? false;\n}\n\nexport default SupportedImageFormats;\n","import Check from \"../Core/Check.js\";\nimport Event from \"../Core/Event.js\";\nimport createWorldBathymetryAsync from \"../Core/createWorldBathymetryAsync.js\";\nimport createWorldTerrainAsync from \"../Core/createWorldTerrainAsync.js\";\n\n/**\n * A helper to manage async operations of a terrain provider.\n *\n * @alias Terrain\n * @constructor\n *\n * @see Terrain.fromWorldTerrain\n * @see CesiumTerrainProvider\n * @see VRTheWorldTerrainProvider\n * @see GoogleEarthEnterpriseTerrainProvider\n *\n * @example\n * // Create\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   terrain: new Cesium.Terrain(Cesium.CesiumTerrainProvider.fromUrl(\"https://myTestTerrain.com\"));\n * });\n *\n * @example\n * // Handle loading events\n * const terrain = new Cesium.Terrain(Cesium.CesiumTerrainProvider.fromUrl(\"https://myTestTerrain.com\"));\n *\n * scene.setTerrain(terrain);\n *\n * terrain.readyEvent.addEventListener(provider => {\n *   scene.globe.enableLighting = true;\n *\n *   terrain.provider.errorEvent.addEventListener(error => {\n *     alert(`Encountered an error while loading terrain tiles! ${error}`);\n *   });\n * });\n *\n * terrain.errorEvent.addEventListener(error => {\n *   alert(`Encountered an error while creating terrain! ${error}`);\n * });\n *\n * @param {Promise<TerrainProvider>} terrainProviderPromise A promise which resolves to a terrain provider\n */\nfunction Terrain(terrainProviderPromise) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"terrainProviderPromise\", terrainProviderPromise);\n  //>>includeEnd('debug');\n\n  this._ready = false;\n  this._provider = undefined;\n  this._errorEvent = new Event();\n  this._readyEvent = new Event();\n\n  handlePromise(this, terrainProviderPromise);\n}\n\nObject.defineProperties(Terrain.prototype, {\n  /**\n   * Gets an event that is raised when the terrain provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of the thrown error.\n   * @memberof Terrain.prototype\n   * @type {Event<Terrain.ErrorEventCallback>}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the terrain provider has been successfully created. Event listeners\n   * are passed the created instance of {@link TerrainProvider}.\n   * @memberof Terrain.prototype\n   * @type {Event<Terrain.ReadyEventCallback>}\n   * @readonly\n   */\n  readyEvent: {\n    get: function () {\n      return this._readyEvent;\n    },\n  },\n\n  /**\n   * Returns true when the terrain provider has been successfully created. Otherwise, returns false.\n   * @memberof Terrain.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * The terrain provider providing surface geometry to a globe. Do not use until {@link Terrain.readyEvent} is raised.\n   * @memberof Terrain.prototype\n   *\n   * @type {TerrainProvider}\n   * @readonly\n   */\n  provider: {\n    get: function () {\n      return this._provider;\n    },\n  },\n});\n/**\n * Creates a {@link Terrain} instance for {@link https://cesium.com/content/#cesium-world-terrain|Cesium World Terrain}.\n *\n * @function\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server if available.\n * @param {boolean} [options.requestWaterMask=false] Flag that indicates if the client should request per tile water masks from the server if available.\n * @returns {Terrain} An asynchronous helper object for a CesiumTerrainProvider\n *\n * @see Ion\n * @see createWorldTerrainAsync\n *\n * @example\n * // Create Cesium World Terrain with default settings\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   terrain: Cesium.Terrain.fromWorldTerrain()\n * });\n *\n * @example\n * // Create Cesium World Terrain with water and normals.\n * const viewer1 = new Cesium.Viewer(\"cesiumContainer\", {\n *   terrain: Cesium.Terrain.fromWorldTerrain({\n *      requestWaterMask: true,\n *      requestVertexNormals: true\n *    });\n * });\n *\n * @example\n * // Handle loading events\n * const terrain = Cesium.Terrain.fromWorldTerrain();\n *\n * scene.setTerrain(terrain);\n *\n * terrain.readyEvent.addEventListener(provider => {\n *   scene.globe.enableLighting = true;\n *\n *   terrain.provider.errorEvent.addEventListener(error => {\n *     alert(`Encountered an error while loading terrain tiles! ${error}`);\n *   });\n * });\n *\n * terrain.errorEvent.addEventListener(error => {\n *   alert(`Encountered an error while creating terrain! ${error}`);\n * });\n */\nTerrain.fromWorldTerrain = function (options) {\n  return new Terrain(createWorldTerrainAsync(options));\n};\n\n/**\n * Creates a {@link Terrain} instance for {@link https://cesium.com/content/#cesium-world-bathymetry|Cesium World Bathymetry}.\n *\n * @function\n *\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server if available.\n * @returns {Terrain} An asynchronous helper object for a CesiumTerrainProvider\n *\n * @see Ion\n * @see createWorldBathymetryAsync\n *\n * @example\n * // Create Cesium World Bathymetry with default settings\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   terrain: Cesium.Terrain.fromWorldBathymetry)\n * });\n *\n * @example\n * // Create Cesium World Terrain with normals.\n * const viewer1 = new Cesium.Viewer(\"cesiumContainer\", {\n *   terrain: Cesium.Terrain.fromWorldBathymetry({\n *      requestVertexNormals: true\n *    });\n * });\n *\n * @example\n * // Handle loading events\n * const bathymetry = Cesium.Terrain.fromWorldBathymetry();\n *\n * scene.setTerrain(bathymetry);\n *\n * bathymetry.readyEvent.addEventListener(provider => {\n *   scene.globe.enableLighting = true;\n *\n *   bathymetry.provider.errorEvent.addEventListener(error => {\n *     alert(`Encountered an error while loading bathymetric terrain tiles! ${error}`);\n *   });\n * });\n *\n * bathymetry.errorEvent.addEventListener(error => {\n *   alert(`Encountered an error while creating bathymetric terrain! ${error}`);\n * });\n */\nTerrain.fromWorldBathymetry = function (options) {\n  return new Terrain(createWorldBathymetryAsync(options));\n};\n\nfunction handleError(errorEvent, error) {\n  if (errorEvent.numberOfListeners > 0) {\n    errorEvent.raiseEvent(error);\n  } else {\n    // Default handler is to log to the console\n    console.error(error);\n  }\n}\n\nasync function handlePromise(instance, promise) {\n  let provider;\n  try {\n    provider = await Promise.resolve(promise);\n    instance._provider = provider;\n    instance._ready = true;\n    instance._readyEvent.raiseEvent(provider);\n  } catch (error) {\n    handleError(instance._errorEvent, error);\n  }\n}\n\nexport default Terrain;\n\n/**\n * A function that is called when an error occurs.\n * @callback Terrain.ErrorEventCallback\n *\n * @this Terrain\n * @param {Error} err An object holding details about the error that occurred.\n */\n\n/**\n * A function that is called when the provider has been created\n * @callback Terrain.ReadyEventCallback\n *\n * @this Terrain\n * @param {TerrainProvider} provider The created terrain provider.\n */\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\nimport binarySearch from \"../Core/binarySearch.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport HeightmapTerrainData from \"../Core/HeightmapTerrainData.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Queue from \"../Core/Queue.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\nimport TerrainMesh from \"../Core/TerrainMesh.js\";\nimport TileEdge from \"../Core/TileEdge.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport GlobeSurfaceTile from \"./GlobeSurfaceTile.js\";\nimport TileSelectionResult from \"./TileSelectionResult.js\";\n\nfunction TerrainFillMesh(tile) {\n  this.tile = tile;\n  this.frameLastUpdated = undefined;\n  this.westMeshes = []; // north to south (CCW)\n  this.westTiles = [];\n  this.southMeshes = []; // west to east (CCW)\n  this.southTiles = [];\n  this.eastMeshes = []; // south to north (CCW)\n  this.eastTiles = [];\n  this.northMeshes = []; // east to west (CCW)\n  this.northTiles = [];\n  this.southwestMesh = undefined;\n  this.southwestTile = undefined;\n  this.southeastMesh = undefined;\n  this.southeastTile = undefined;\n  this.northwestMesh = undefined;\n  this.northwestTile = undefined;\n  this.northeastMesh = undefined;\n  this.northeastTile = undefined;\n  this.changedThisFrame = true;\n  this.visitedFrame = undefined;\n  this.enqueuedFrame = undefined;\n  this.mesh = undefined;\n  this.vertexArray = undefined;\n  this.waterMaskTexture = undefined;\n  this.waterMaskTranslationAndScale = new Cartesian4();\n}\n\nTerrainFillMesh.prototype.update = function (\n  tileProvider,\n  frameState,\n  vertexArraysToDestroy,\n) {\n  if (this.changedThisFrame) {\n    createFillMesh(tileProvider, frameState, this.tile, vertexArraysToDestroy);\n    this.changedThisFrame = false;\n  }\n};\n\nTerrainFillMesh.prototype.destroy = function (vertexArraysToDestroy) {\n  this._destroyVertexArray(vertexArraysToDestroy);\n\n  if (defined(this.waterMaskTexture)) {\n    --this.waterMaskTexture.referenceCount;\n    if (this.waterMaskTexture.referenceCount === 0) {\n      this.waterMaskTexture.destroy();\n    }\n    this.waterMaskTexture = undefined;\n  }\n\n  return undefined;\n};\n\nTerrainFillMesh.prototype._destroyVertexArray = function (\n  vertexArraysToDestroy,\n) {\n  if (defined(this.vertexArray)) {\n    if (defined(vertexArraysToDestroy)) {\n      vertexArraysToDestroy.push(this.vertexArray);\n    } else {\n      GlobeSurfaceTile._freeVertexArray(this.vertexArray);\n    }\n    this.vertexArray = undefined;\n  }\n};\n\nconst traversalQueueScratch = new Queue();\n\nTerrainFillMesh.updateFillTiles = function (\n  tileProvider,\n  renderedTiles,\n  frameState,\n  vertexArraysToDestroy,\n) {\n  // We want our fill tiles to look natural, which means they should align perfectly with\n  // adjacent loaded tiles, and their edges that are not adjacent to loaded tiles should have\n  // sensible heights (e.g. the average of the heights of loaded edges). Some fill tiles may\n  // be adjacent only to other fill tiles, and in that case heights should be assigned fanning\n  // outward from the loaded tiles so that there are no sudden changes in height.\n\n  // We do this with a breadth-first traversal of the rendered tiles, starting with the loaded\n  // ones. Graph nodes are tiles and graph edges connect to other rendered tiles that are spatially adjacent\n  // to those tiles. As we visit each node, we propagate tile edges to adjacent tiles. If there's no data\n  // for a tile edge,  we create an edge with an average height and then propagate it. If an edge is partially defined\n  // (e.g. an edge is adjacent to multiple more-detailed tiles and only some of them are loaded), we\n  // fill in the rest of the edge with the same height.\n  const quadtree = tileProvider._quadtree;\n  const levelZeroTiles = quadtree._levelZeroTiles;\n  const lastSelectionFrameNumber = quadtree._lastSelectionFrameNumber;\n\n  const traversalQueue = traversalQueueScratch;\n  traversalQueue.clear();\n\n  // Add the tiles with real geometry to the traversal queue.\n  for (let i = 0; i < renderedTiles.length; ++i) {\n    const renderedTile = renderedTiles[i];\n    if (defined(renderedTile.data.vertexArray)) {\n      traversalQueue.enqueue(renderedTiles[i]);\n    }\n  }\n\n  let tile = traversalQueue.dequeue();\n\n  while (tile !== undefined) {\n    const tileToWest = tile.findTileToWest(levelZeroTiles);\n    const tileToSouth = tile.findTileToSouth(levelZeroTiles);\n    const tileToEast = tile.findTileToEast(levelZeroTiles);\n    const tileToNorth = tile.findTileToNorth(levelZeroTiles);\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToWest,\n      lastSelectionFrameNumber,\n      TileEdge.EAST,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToSouth,\n      lastSelectionFrameNumber,\n      TileEdge.NORTH,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToEast,\n      lastSelectionFrameNumber,\n      TileEdge.WEST,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToNorth,\n      lastSelectionFrameNumber,\n      TileEdge.SOUTH,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n\n    const tileToNorthwest = tileToWest.findTileToNorth(levelZeroTiles);\n    const tileToSouthwest = tileToWest.findTileToSouth(levelZeroTiles);\n    const tileToNortheast = tileToEast.findTileToNorth(levelZeroTiles);\n    const tileToSoutheast = tileToEast.findTileToSouth(levelZeroTiles);\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToNorthwest,\n      lastSelectionFrameNumber,\n      TileEdge.SOUTHEAST,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToNortheast,\n      lastSelectionFrameNumber,\n      TileEdge.SOUTHWEST,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToSouthwest,\n      lastSelectionFrameNumber,\n      TileEdge.NORTHEAST,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n    visitRenderedTiles(\n      tileProvider,\n      frameState,\n      tile,\n      tileToSoutheast,\n      lastSelectionFrameNumber,\n      TileEdge.NORTHWEST,\n      false,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n\n    tile = traversalQueue.dequeue();\n  }\n};\n\nfunction visitRenderedTiles(\n  tileProvider,\n  frameState,\n  sourceTile,\n  startTile,\n  currentFrameNumber,\n  tileEdge,\n  downOnly,\n  traversalQueue,\n  vertexArraysToDestroy,\n) {\n  if (startTile === undefined) {\n    // There are no tiles North or South of the poles.\n    return;\n  }\n\n  let tile = startTile;\n  while (\n    tile &&\n    (tile._lastSelectionResultFrame !== currentFrameNumber ||\n      TileSelectionResult.wasKicked(tile._lastSelectionResult) ||\n      TileSelectionResult.originalResult(tile._lastSelectionResult) ===\n        TileSelectionResult.CULLED)\n  ) {\n    // This tile wasn't visited or it was visited and then kicked, so walk up to find the closest ancestor that was rendered.\n    // We also walk up if the tile was culled, because if siblings were kicked an ancestor may have been rendered.\n    if (downOnly) {\n      return;\n    }\n\n    const parent = tile.parent;\n    if (tileEdge >= TileEdge.NORTHWEST && parent !== undefined) {\n      // When we're looking for a corner, verify that the parent tile is still relevant.\n      // That is, the parent and child must share the corner in question.\n      switch (tileEdge) {\n        case TileEdge.NORTHWEST:\n          tile = tile === parent.northwestChild ? parent : undefined;\n          break;\n        case TileEdge.NORTHEAST:\n          tile = tile === parent.northeastChild ? parent : undefined;\n          break;\n        case TileEdge.SOUTHWEST:\n          tile = tile === parent.southwestChild ? parent : undefined;\n          break;\n        case TileEdge.SOUTHEAST:\n          tile = tile === parent.southeastChild ? parent : undefined;\n          break;\n      }\n    } else {\n      tile = parent;\n    }\n  }\n\n  if (tile === undefined) {\n    return;\n  }\n\n  if (tile._lastSelectionResult === TileSelectionResult.RENDERED) {\n    if (defined(tile.data.vertexArray)) {\n      // No further processing necessary for renderable tiles.\n      return;\n    }\n    visitTile(\n      tileProvider,\n      frameState,\n      sourceTile,\n      tile,\n      tileEdge,\n      currentFrameNumber,\n      traversalQueue,\n      vertexArraysToDestroy,\n    );\n    return;\n  }\n\n  if (\n    TileSelectionResult.originalResult(startTile._lastSelectionResult) ===\n    TileSelectionResult.CULLED\n  ) {\n    return;\n  }\n\n  // This tile was refined, so find rendered children, if any.\n  // Visit the tiles in counter-clockwise order.\n  switch (tileEdge) {\n    case TileEdge.WEST:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.northwestChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.southwestChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    case TileEdge.EAST:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.southeastChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.northeastChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    case TileEdge.SOUTH:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.southwestChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.southeastChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    case TileEdge.NORTH:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.northeastChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.northwestChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    case TileEdge.NORTHWEST:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.northwestChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    case TileEdge.NORTHEAST:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.northeastChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    case TileEdge.SOUTHWEST:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.southwestChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    case TileEdge.SOUTHEAST:\n      visitRenderedTiles(\n        tileProvider,\n        frameState,\n        sourceTile,\n        startTile.southeastChild,\n        currentFrameNumber,\n        tileEdge,\n        true,\n        traversalQueue,\n        vertexArraysToDestroy,\n      );\n      break;\n    default:\n      throw new DeveloperError(\"Invalid edge\");\n  }\n}\n\nfunction visitTile(\n  tileProvider,\n  frameState,\n  sourceTile,\n  destinationTile,\n  tileEdge,\n  frameNumber,\n  traversalQueue,\n  vertexArraysToDestroy,\n) {\n  const destinationSurfaceTile = destinationTile.data;\n\n  if (destinationSurfaceTile.fill === undefined) {\n    destinationSurfaceTile.fill = new TerrainFillMesh(destinationTile);\n  } else if (destinationSurfaceTile.fill.visitedFrame === frameNumber) {\n    // Don't propagate edges to tiles that have already been visited this frame.\n    return;\n  }\n\n  if (destinationSurfaceTile.fill.enqueuedFrame !== frameNumber) {\n    // First time visiting this tile this frame, add it to the traversal queue.\n    destinationSurfaceTile.fill.enqueuedFrame = frameNumber;\n    destinationSurfaceTile.fill.changedThisFrame = false;\n    traversalQueue.enqueue(destinationTile);\n  }\n\n  propagateEdge(\n    tileProvider,\n    frameState,\n    sourceTile,\n    destinationTile,\n    tileEdge,\n    vertexArraysToDestroy,\n  );\n}\n\nfunction propagateEdge(\n  tileProvider,\n  frameState,\n  sourceTile,\n  destinationTile,\n  tileEdge,\n  vertexArraysToDestroy,\n) {\n  const destinationFill = destinationTile.data.fill;\n\n  let sourceMesh;\n  const sourceFill = sourceTile.data.fill;\n  if (defined(sourceFill)) {\n    sourceFill.visitedFrame = frameState.frameNumber;\n\n    // Source is a fill, create/update it if necessary.\n    if (sourceFill.changedThisFrame) {\n      createFillMesh(\n        tileProvider,\n        frameState,\n        sourceTile,\n        vertexArraysToDestroy,\n      );\n      sourceFill.changedThisFrame = false;\n    }\n    sourceMesh = sourceTile.data.fill.mesh;\n  } else {\n    sourceMesh = sourceTile.data.mesh;\n  }\n\n  let edgeMeshes;\n  let edgeTiles;\n\n  switch (tileEdge) {\n    case TileEdge.WEST:\n      edgeMeshes = destinationFill.westMeshes;\n      edgeTiles = destinationFill.westTiles;\n      break;\n    case TileEdge.SOUTH:\n      edgeMeshes = destinationFill.southMeshes;\n      edgeTiles = destinationFill.southTiles;\n      break;\n    case TileEdge.EAST:\n      edgeMeshes = destinationFill.eastMeshes;\n      edgeTiles = destinationFill.eastTiles;\n      break;\n    case TileEdge.NORTH:\n      edgeMeshes = destinationFill.northMeshes;\n      edgeTiles = destinationFill.northTiles;\n      break;\n    // Corners are simpler.\n    case TileEdge.NORTHWEST:\n      destinationFill.changedThisFrame =\n        destinationFill.changedThisFrame ||\n        destinationFill.northwestMesh !== sourceMesh;\n      destinationFill.northwestMesh = sourceMesh;\n      destinationFill.northwestTile = sourceTile;\n      return;\n    case TileEdge.NORTHEAST:\n      destinationFill.changedThisFrame =\n        destinationFill.changedThisFrame ||\n        destinationFill.northeastMesh !== sourceMesh;\n      destinationFill.northeastMesh = sourceMesh;\n      destinationFill.northeastTile = sourceTile;\n      return;\n    case TileEdge.SOUTHWEST:\n      destinationFill.changedThisFrame =\n        destinationFill.changedThisFrame ||\n        destinationFill.southwestMesh !== sourceMesh;\n      destinationFill.southwestMesh = sourceMesh;\n      destinationFill.southwestTile = sourceTile;\n      return;\n    case TileEdge.SOUTHEAST:\n      destinationFill.changedThisFrame =\n        destinationFill.changedThisFrame ||\n        destinationFill.southeastMesh !== sourceMesh;\n      destinationFill.southeastMesh = sourceMesh;\n      destinationFill.southeastTile = sourceTile;\n      return;\n  }\n\n  if (sourceTile.level <= destinationTile.level) {\n    // Source edge completely spans the destination edge.\n    destinationFill.changedThisFrame =\n      destinationFill.changedThisFrame ||\n      edgeMeshes[0] !== sourceMesh ||\n      edgeMeshes.length !== 1;\n    edgeMeshes[0] = sourceMesh;\n    edgeTiles[0] = sourceTile;\n    edgeMeshes.length = 1;\n    edgeTiles.length = 1;\n    return;\n  }\n\n  // Source edge is a subset of the destination edge.\n  // Figure out the range of meshes we're replacing.\n  let startIndex, endIndex, existingTile, existingRectangle;\n  const sourceRectangle = sourceTile.rectangle;\n\n  let epsilon;\n  const destinationRectangle = destinationTile.rectangle;\n\n  switch (tileEdge) {\n    case TileEdge.WEST:\n      epsilon =\n        (destinationRectangle.north - destinationRectangle.south) *\n        CesiumMath.EPSILON5;\n\n      for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n        existingTile = edgeTiles[startIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.greaterThan(\n            sourceRectangle.north,\n            existingRectangle.south,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n        existingTile = edgeTiles[endIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.greaterThanOrEquals(\n            sourceRectangle.south,\n            existingRectangle.north,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      break;\n    case TileEdge.SOUTH:\n      epsilon =\n        (destinationRectangle.east - destinationRectangle.west) *\n        CesiumMath.EPSILON5;\n\n      for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n        existingTile = edgeTiles[startIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.lessThan(\n            sourceRectangle.west,\n            existingRectangle.east,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n        existingTile = edgeTiles[endIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.lessThanOrEquals(\n            sourceRectangle.east,\n            existingRectangle.west,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      break;\n    case TileEdge.EAST:\n      epsilon =\n        (destinationRectangle.north - destinationRectangle.south) *\n        CesiumMath.EPSILON5;\n\n      for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n        existingTile = edgeTiles[startIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.lessThan(\n            sourceRectangle.south,\n            existingRectangle.north,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n        existingTile = edgeTiles[endIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.lessThanOrEquals(\n            sourceRectangle.north,\n            existingRectangle.south,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      break;\n    case TileEdge.NORTH:\n      epsilon =\n        (destinationRectangle.east - destinationRectangle.west) *\n        CesiumMath.EPSILON5;\n\n      for (startIndex = 0; startIndex < edgeTiles.length; ++startIndex) {\n        existingTile = edgeTiles[startIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.greaterThan(\n            sourceRectangle.east,\n            existingRectangle.west,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      for (endIndex = startIndex; endIndex < edgeTiles.length; ++endIndex) {\n        existingTile = edgeTiles[endIndex];\n        existingRectangle = existingTile.rectangle;\n        if (\n          CesiumMath.greaterThanOrEquals(\n            sourceRectangle.west,\n            existingRectangle.east,\n            epsilon,\n          )\n        ) {\n          break;\n        }\n      }\n      break;\n  }\n\n  if (endIndex - startIndex === 1) {\n    destinationFill.changedThisFrame =\n      destinationFill.changedThisFrame || edgeMeshes[startIndex] !== sourceMesh;\n    edgeMeshes[startIndex] = sourceMesh;\n    edgeTiles[startIndex] = sourceTile;\n  } else {\n    destinationFill.changedThisFrame = true;\n    edgeMeshes.splice(startIndex, endIndex - startIndex, sourceMesh);\n    edgeTiles.splice(startIndex, endIndex - startIndex, sourceTile);\n  }\n}\n\nconst cartographicScratch = new Cartographic();\nconst centerCartographicScratch = new Cartographic();\nconst cartesianScratch = new Cartesian3();\nconst normalScratch = new Cartesian3();\nconst octEncodedNormalScratch = new Cartesian2();\nconst uvScratch2 = new Cartesian2();\nconst uvScratch = new Cartesian2();\n\nfunction HeightAndNormal() {\n  this.height = 0.0;\n  this.encodedNormal = new Cartesian2();\n}\n\nfunction fillMissingCorner(\n  fill,\n  ellipsoid,\n  u,\n  v,\n  corner,\n  adjacentCorner1,\n  adjacentCorner2,\n  oppositeCorner,\n  vertex,\n) {\n  if (defined(corner)) {\n    return corner;\n  }\n\n  let height;\n\n  if (defined(adjacentCorner1) && defined(adjacentCorner2)) {\n    height = (adjacentCorner1.height + adjacentCorner2.height) * 0.5;\n  } else if (defined(adjacentCorner1)) {\n    height = adjacentCorner1.height;\n  } else if (defined(adjacentCorner2)) {\n    height = adjacentCorner2.height;\n  } else if (defined(oppositeCorner)) {\n    height = oppositeCorner.height;\n  } else {\n    const surfaceTile = fill.tile.data;\n    const tileBoundingRegion = surfaceTile.tileBoundingRegion;\n    let minimumHeight = 0.0;\n    let maximumHeight = 0.0;\n    if (defined(tileBoundingRegion)) {\n      minimumHeight = tileBoundingRegion.minimumHeight;\n      maximumHeight = tileBoundingRegion.maximumHeight;\n    }\n    height = (minimumHeight + maximumHeight) * 0.5;\n  }\n\n  getVertexWithHeightAtCorner(fill, ellipsoid, u, v, height, vertex);\n  return vertex;\n}\n\nconst heightRangeScratch = {\n  minimumHeight: 0.0,\n  maximumHeight: 0.0,\n};\n\nconst scratchCenter = new Cartesian3();\nconst swVertexScratch = new HeightAndNormal();\nconst seVertexScratch = new HeightAndNormal();\nconst nwVertexScratch = new HeightAndNormal();\nconst neVertexScratch = new HeightAndNormal();\nconst heightmapBuffer =\n  typeof Uint8Array !== \"undefined\" ? new Uint8Array(9 * 9) : undefined;\n\nconst scratchCreateMeshSyncOptions = {\n  tilingScheme: undefined,\n  x: 0,\n  y: 0,\n  level: 0,\n  exaggeration: 1.0,\n  exaggerationRelativeHeight: 0.0,\n};\nfunction createFillMesh(tileProvider, frameState, tile, vertexArraysToDestroy) {\n  GlobeSurfaceTile.initialize(\n    tile,\n    tileProvider.terrainProvider,\n    tileProvider._imageryLayers,\n  );\n\n  const surfaceTile = tile.data;\n  const fill = surfaceTile.fill;\n  const rectangle = tile.rectangle;\n\n  const exaggeration = frameState.verticalExaggeration;\n  const exaggerationRelativeHeight =\n    frameState.verticalExaggerationRelativeHeight;\n  const hasExaggeration = exaggeration !== 1.0;\n\n  const ellipsoid = tile.tilingScheme.ellipsoid;\n\n  let nwCorner = getCorner(\n    fill,\n    ellipsoid,\n    0.0,\n    1.0,\n    fill.northwestTile,\n    fill.northwestMesh,\n    fill.northTiles,\n    fill.northMeshes,\n    fill.westTiles,\n    fill.westMeshes,\n    nwVertexScratch,\n  );\n  let swCorner = getCorner(\n    fill,\n    ellipsoid,\n    0.0,\n    0.0,\n    fill.southwestTile,\n    fill.southwestMesh,\n    fill.westTiles,\n    fill.westMeshes,\n    fill.southTiles,\n    fill.southMeshes,\n    swVertexScratch,\n  );\n  let seCorner = getCorner(\n    fill,\n    ellipsoid,\n    1.0,\n    0.0,\n    fill.southeastTile,\n    fill.southeastMesh,\n    fill.southTiles,\n    fill.southMeshes,\n    fill.eastTiles,\n    fill.eastMeshes,\n    seVertexScratch,\n  );\n  let neCorner = getCorner(\n    fill,\n    ellipsoid,\n    1.0,\n    1.0,\n    fill.northeastTile,\n    fill.northeastMesh,\n    fill.eastTiles,\n    fill.eastMeshes,\n    fill.northTiles,\n    fill.northMeshes,\n    neVertexScratch,\n  );\n\n  nwCorner = fillMissingCorner(\n    fill,\n    ellipsoid,\n    0.0,\n    1.0,\n    nwCorner,\n    swCorner,\n    neCorner,\n    seCorner,\n    nwVertexScratch,\n  );\n  swCorner = fillMissingCorner(\n    fill,\n    ellipsoid,\n    0.0,\n    0.0,\n    swCorner,\n    nwCorner,\n    seCorner,\n    neCorner,\n    swVertexScratch,\n  );\n  seCorner = fillMissingCorner(\n    fill,\n    ellipsoid,\n    1.0,\n    1.0,\n    seCorner,\n    swCorner,\n    neCorner,\n    nwCorner,\n    seVertexScratch,\n  );\n  neCorner = fillMissingCorner(\n    fill,\n    ellipsoid,\n    1.0,\n    1.0,\n    neCorner,\n    seCorner,\n    nwCorner,\n    swCorner,\n    neVertexScratch,\n  );\n\n  const southwestHeight = swCorner.height;\n  const southeastHeight = seCorner.height;\n  const northwestHeight = nwCorner.height;\n  const northeastHeight = neCorner.height;\n\n  let minimumHeight = Math.min(\n    southwestHeight,\n    southeastHeight,\n    northwestHeight,\n    northeastHeight,\n  );\n  let maximumHeight = Math.max(\n    southwestHeight,\n    southeastHeight,\n    northwestHeight,\n    northeastHeight,\n  );\n\n  const middleHeight = (minimumHeight + maximumHeight) * 0.5;\n\n  let i;\n  let len;\n\n  // For low-detail tiles, our usual fill tile approach will create tiles that\n  // look really blocky because they don't have enough vertices to account for the\n  // Earth's curvature. But the height range will also typically be well within\n  // the allowed geometric error for those levels. So fill such tiles with a\n  // constant-height heightmap.\n  const geometricError = tileProvider.getLevelMaximumGeometricError(tile.level);\n  const minCutThroughRadius = ellipsoid.maximumRadius - geometricError;\n  let maxTileWidth =\n    Math.acos(minCutThroughRadius / ellipsoid.maximumRadius) * 4.0;\n\n  // When the tile width is greater than maxTileWidth as computed above, the error\n  // of a normal fill tile from globe curvature alone will exceed the allowed geometric\n  // error. Terrain won't change that much. However, we can allow more error than that.\n  // A little blockiness during load is acceptable. For the WGS84 ellipsoid and\n  // standard geometric error setup, the value here will have us use a heightmap\n  // at levels 1, 2, and 3.\n  maxTileWidth *= 1.5;\n\n  if (\n    rectangle.width > maxTileWidth &&\n    maximumHeight - minimumHeight <= geometricError\n  ) {\n    const terrainData = new HeightmapTerrainData({\n      width: 9,\n      height: 9,\n      buffer: heightmapBuffer,\n      structure: {\n        // Use the maximum as the constant height so that this tile's skirt\n        // covers any cracks with adjacent tiles.\n        heightOffset: maximumHeight,\n      },\n    });\n\n    const createMeshSyncOptions = scratchCreateMeshSyncOptions;\n    createMeshSyncOptions.tilingScheme = tile.tilingScheme;\n    createMeshSyncOptions.x = tile.x;\n    createMeshSyncOptions.y = tile.y;\n    createMeshSyncOptions.level = tile.level;\n    createMeshSyncOptions.exaggeration = exaggeration;\n    createMeshSyncOptions.exaggerationRelativeHeight =\n      exaggerationRelativeHeight;\n\n    fill.mesh = terrainData._createMeshSync(createMeshSyncOptions);\n  } else {\n    const hasGeodeticSurfaceNormals = hasExaggeration;\n    const centerCartographic = Rectangle.center(\n      rectangle,\n      centerCartographicScratch,\n    );\n    centerCartographic.height = middleHeight;\n    const center = ellipsoid.cartographicToCartesian(\n      centerCartographic,\n      scratchCenter,\n    );\n    const encoding = new TerrainEncoding(\n      center,\n      undefined,\n      undefined,\n      undefined,\n      undefined,\n      true,\n      true,\n      hasGeodeticSurfaceNormals,\n      exaggeration,\n      exaggerationRelativeHeight,\n    );\n\n    // At _most_, we have vertices for the 4 corners, plus 1 center, plus every adjacent edge vertex.\n    // In reality there will be less most of the time, but close enough; better\n    // to overestimate than to re-allocate/copy/traverse the vertices twice.\n    // Also, we'll often be able to squeeze the index data into the extra space in the buffer.\n    let maxVertexCount = 5;\n    let meshes;\n\n    meshes = fill.westMeshes;\n    for (i = 0, len = meshes.length; i < len; ++i) {\n      maxVertexCount += meshes[i].eastIndicesNorthToSouth.length;\n    }\n\n    meshes = fill.southMeshes;\n    for (i = 0, len = meshes.length; i < len; ++i) {\n      maxVertexCount += meshes[i].northIndicesWestToEast.length;\n    }\n\n    meshes = fill.eastMeshes;\n    for (i = 0, len = meshes.length; i < len; ++i) {\n      maxVertexCount += meshes[i].westIndicesSouthToNorth.length;\n    }\n\n    meshes = fill.northMeshes;\n    for (i = 0, len = meshes.length; i < len; ++i) {\n      maxVertexCount += meshes[i].southIndicesEastToWest.length;\n    }\n\n    const heightRange = heightRangeScratch;\n    heightRange.minimumHeight = minimumHeight;\n    heightRange.maximumHeight = maximumHeight;\n\n    const stride = encoding.stride;\n    let typedArray = new Float32Array(maxVertexCount * stride);\n\n    let nextIndex = 0;\n    const northwestIndex = nextIndex;\n    nextIndex = addVertexWithComputedPosition(\n      ellipsoid,\n      rectangle,\n      encoding,\n      typedArray,\n      nextIndex,\n      0.0,\n      1.0,\n      nwCorner.height,\n      nwCorner.encodedNormal,\n      1.0,\n      heightRange,\n    );\n    nextIndex = addEdge(\n      fill,\n      ellipsoid,\n      encoding,\n      typedArray,\n      nextIndex,\n      fill.westTiles,\n      fill.westMeshes,\n      TileEdge.EAST,\n      heightRange,\n    );\n    const southwestIndex = nextIndex;\n    nextIndex = addVertexWithComputedPosition(\n      ellipsoid,\n      rectangle,\n      encoding,\n      typedArray,\n      nextIndex,\n      0.0,\n      0.0,\n      swCorner.height,\n      swCorner.encodedNormal,\n      0.0,\n      heightRange,\n    );\n    nextIndex = addEdge(\n      fill,\n      ellipsoid,\n      encoding,\n      typedArray,\n      nextIndex,\n      fill.southTiles,\n      fill.southMeshes,\n      TileEdge.NORTH,\n      heightRange,\n    );\n    const southeastIndex = nextIndex;\n    nextIndex = addVertexWithComputedPosition(\n      ellipsoid,\n      rectangle,\n      encoding,\n      typedArray,\n      nextIndex,\n      1.0,\n      0.0,\n      seCorner.height,\n      seCorner.encodedNormal,\n      0.0,\n      heightRange,\n    );\n    nextIndex = addEdge(\n      fill,\n      ellipsoid,\n      encoding,\n      typedArray,\n      nextIndex,\n      fill.eastTiles,\n      fill.eastMeshes,\n      TileEdge.WEST,\n      heightRange,\n    );\n    const northeastIndex = nextIndex;\n    nextIndex = addVertexWithComputedPosition(\n      ellipsoid,\n      rectangle,\n      encoding,\n      typedArray,\n      nextIndex,\n      1.0,\n      1.0,\n      neCorner.height,\n      neCorner.encodedNormal,\n      1.0,\n      heightRange,\n    );\n    nextIndex = addEdge(\n      fill,\n      ellipsoid,\n      encoding,\n      typedArray,\n      nextIndex,\n      fill.northTiles,\n      fill.northMeshes,\n      TileEdge.SOUTH,\n      heightRange,\n    );\n\n    minimumHeight = heightRange.minimumHeight;\n    maximumHeight = heightRange.maximumHeight;\n\n    const obb = OrientedBoundingBox.fromRectangle(\n      rectangle,\n      minimumHeight,\n      maximumHeight,\n      tile.tilingScheme.ellipsoid,\n    );\n\n    // Add a single vertex at the center of the tile.\n    const southMercatorY =\n      WebMercatorProjection.geodeticLatitudeToMercatorAngle(rectangle.south);\n    const oneOverMercatorHeight =\n      1.0 /\n      (WebMercatorProjection.geodeticLatitudeToMercatorAngle(rectangle.north) -\n        southMercatorY);\n    const centerWebMercatorT =\n      (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n        centerCartographic.latitude,\n      ) -\n        southMercatorY) *\n      oneOverMercatorHeight;\n\n    const geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormalCartographic(\n      cartographicScratch,\n      normalScratch,\n    );\n    const centerEncodedNormal = AttributeCompression.octEncode(\n      geodeticSurfaceNormal,\n      octEncodedNormalScratch,\n    );\n\n    const centerIndex = nextIndex;\n    encoding.encode(\n      typedArray,\n      nextIndex * stride,\n      obb.center,\n      Cartesian2.fromElements(0.5, 0.5, uvScratch),\n      middleHeight,\n      centerEncodedNormal,\n      centerWebMercatorT,\n      geodeticSurfaceNormal,\n    );\n    ++nextIndex;\n\n    const vertexCount = nextIndex;\n\n    const bytesPerIndex = vertexCount < 256 ? 1 : 2;\n    const indexCount = (vertexCount - 1) * 3; // one triangle per edge vertex\n    const indexDataBytes = indexCount * bytesPerIndex;\n    const availableBytesInBuffer =\n      (typedArray.length - vertexCount * stride) *\n      Float32Array.BYTES_PER_ELEMENT;\n\n    let indices;\n    if (availableBytesInBuffer >= indexDataBytes) {\n      // Store the index data in the same buffer as the vertex data.\n      const startIndex = vertexCount * stride * Float32Array.BYTES_PER_ELEMENT;\n      indices =\n        vertexCount < 256\n          ? new Uint8Array(typedArray.buffer, startIndex, indexCount)\n          : new Uint16Array(typedArray.buffer, startIndex, indexCount);\n    } else {\n      // Allocate a new buffer for the index data.\n      indices =\n        vertexCount < 256\n          ? new Uint8Array(indexCount)\n          : new Uint16Array(indexCount);\n    }\n\n    typedArray = new Float32Array(typedArray.buffer, 0, vertexCount * stride);\n\n    let indexOut = 0;\n    for (i = 0; i < vertexCount - 2; ++i) {\n      indices[indexOut++] = centerIndex;\n      indices[indexOut++] = i;\n      indices[indexOut++] = i + 1;\n    }\n\n    indices[indexOut++] = centerIndex;\n    indices[indexOut++] = i;\n    indices[indexOut++] = 0;\n\n    const westIndicesSouthToNorth = [];\n    for (i = southwestIndex; i >= northwestIndex; --i) {\n      westIndicesSouthToNorth.push(i);\n    }\n\n    const southIndicesEastToWest = [];\n    for (i = southeastIndex; i >= southwestIndex; --i) {\n      southIndicesEastToWest.push(i);\n    }\n\n    const eastIndicesNorthToSouth = [];\n    for (i = northeastIndex; i >= southeastIndex; --i) {\n      eastIndicesNorthToSouth.push(i);\n    }\n\n    const northIndicesWestToEast = [];\n    northIndicesWestToEast.push(0);\n    for (i = centerIndex - 1; i >= northeastIndex; --i) {\n      northIndicesWestToEast.push(i);\n    }\n\n    fill.mesh = new TerrainMesh(\n      encoding.center,\n      typedArray,\n      indices,\n      indexCount,\n      vertexCount,\n      minimumHeight,\n      maximumHeight,\n      rectangle,\n      BoundingSphere.fromOrientedBoundingBox(obb),\n      computeOccludeePoint(\n        tileProvider,\n        obb.center,\n        rectangle,\n        minimumHeight,\n        maximumHeight,\n      ),\n      encoding.stride,\n      obb,\n      encoding,\n      westIndicesSouthToNorth,\n      southIndicesEastToWest,\n      eastIndicesNorthToSouth,\n      northIndicesWestToEast,\n    );\n  }\n\n  const context = frameState.context;\n\n  fill._destroyVertexArray(vertexArraysToDestroy);\n\n  fill.vertexArray = GlobeSurfaceTile._createVertexArrayForMesh(\n    context,\n    fill.mesh,\n  );\n  surfaceTile.processImagery(\n    tile,\n    tileProvider.terrainProvider,\n    frameState,\n    true,\n  );\n\n  const oldTexture = fill.waterMaskTexture;\n  fill.waterMaskTexture = undefined;\n\n  if (tileProvider.terrainProvider.hasWaterMask) {\n    const waterSourceTile = surfaceTile._findAncestorTileWithTerrainData(tile);\n    if (\n      defined(waterSourceTile) &&\n      defined(waterSourceTile.data.waterMaskTexture)\n    ) {\n      fill.waterMaskTexture = waterSourceTile.data.waterMaskTexture;\n      ++fill.waterMaskTexture.referenceCount;\n      surfaceTile._computeWaterMaskTranslationAndScale(\n        tile,\n        waterSourceTile,\n        fill.waterMaskTranslationAndScale,\n      );\n    }\n  }\n\n  if (defined(oldTexture)) {\n    --oldTexture.referenceCount;\n    if (oldTexture.referenceCount === 0) {\n      oldTexture.destroy();\n    }\n  }\n}\n\nfunction addVertexWithComputedPosition(\n  ellipsoid,\n  rectangle,\n  encoding,\n  buffer,\n  index,\n  u,\n  v,\n  height,\n  encodedNormal,\n  webMercatorT,\n  heightRange,\n) {\n  const cartographic = cartographicScratch;\n  cartographic.longitude = CesiumMath.lerp(rectangle.west, rectangle.east, u);\n  cartographic.latitude = CesiumMath.lerp(rectangle.south, rectangle.north, v);\n  cartographic.height = height;\n  const position = ellipsoid.cartographicToCartesian(\n    cartographic,\n    cartesianScratch,\n  );\n\n  let geodeticSurfaceNormal;\n  if (encoding.hasGeodeticSurfaceNormals) {\n    geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n      position,\n      normalScratch,\n    );\n  }\n\n  const uv = uvScratch2;\n  uv.x = u;\n  uv.y = v;\n\n  encoding.encode(\n    buffer,\n    index * encoding.stride,\n    position,\n    uv,\n    height,\n    encodedNormal,\n    webMercatorT,\n    geodeticSurfaceNormal,\n  );\n\n  heightRange.minimumHeight = Math.min(heightRange.minimumHeight, height);\n  heightRange.maximumHeight = Math.max(heightRange.maximumHeight, height);\n\n  return index + 1;\n}\n\nconst sourceRectangleScratch = new Rectangle();\n\nfunction transformTextureCoordinates(\n  sourceTile,\n  targetTile,\n  coordinates,\n  result,\n) {\n  let sourceRectangle = sourceTile.rectangle;\n  const targetRectangle = targetTile.rectangle;\n\n  // Handle transforming across the anti-meridian.\n  if (\n    targetTile.x === 0 &&\n    coordinates.x === 1.0 &&\n    sourceTile.x ===\n      sourceTile.tilingScheme.getNumberOfXTilesAtLevel(sourceTile.level) - 1\n  ) {\n    sourceRectangle = Rectangle.clone(\n      sourceTile.rectangle,\n      sourceRectangleScratch,\n    );\n    sourceRectangle.west -= CesiumMath.TWO_PI;\n    sourceRectangle.east -= CesiumMath.TWO_PI;\n  } else if (\n    sourceTile.x === 0 &&\n    coordinates.x === 0.0 &&\n    targetTile.x ===\n      targetTile.tilingScheme.getNumberOfXTilesAtLevel(targetTile.level) - 1\n  ) {\n    sourceRectangle = Rectangle.clone(\n      sourceTile.rectangle,\n      sourceRectangleScratch,\n    );\n    sourceRectangle.west += CesiumMath.TWO_PI;\n    sourceRectangle.east += CesiumMath.TWO_PI;\n  }\n\n  const sourceWidth = sourceRectangle.east - sourceRectangle.west;\n  const umin = (targetRectangle.west - sourceRectangle.west) / sourceWidth;\n  const umax = (targetRectangle.east - sourceRectangle.west) / sourceWidth;\n\n  const sourceHeight = sourceRectangle.north - sourceRectangle.south;\n  const vmin = (targetRectangle.south - sourceRectangle.south) / sourceHeight;\n  const vmax = (targetRectangle.north - sourceRectangle.south) / sourceHeight;\n\n  let u = (coordinates.x - umin) / (umax - umin);\n  let v = (coordinates.y - vmin) / (vmax - vmin);\n\n  // Ensure that coordinates very near the corners are at the corners.\n  if (Math.abs(u) < Math.EPSILON5) {\n    u = 0.0;\n  } else if (Math.abs(u - 1.0) < Math.EPSILON5) {\n    u = 1.0;\n  }\n\n  if (Math.abs(v) < Math.EPSILON5) {\n    v = 0.0;\n  } else if (Math.abs(v - 1.0) < Math.EPSILON5) {\n    v = 1.0;\n  }\n\n  result.x = u;\n  result.y = v;\n  return result;\n}\n\nconst encodedNormalScratch = new Cartesian2();\n\nfunction getVertexFromTileAtCorner(sourceMesh, sourceIndex, u, v, vertex) {\n  const sourceEncoding = sourceMesh.encoding;\n  const sourceVertices = sourceMesh.vertices;\n\n  vertex.height = sourceEncoding.decodeHeight(sourceVertices, sourceIndex);\n\n  if (sourceEncoding.hasVertexNormals) {\n    sourceEncoding.getOctEncodedNormal(\n      sourceVertices,\n      sourceIndex,\n      vertex.encodedNormal,\n    );\n  } else {\n    const normal = vertex.encodedNormal;\n    normal.x = 0.0;\n    normal.y = 0.0;\n  }\n}\n\nconst encodedNormalScratch2 = new Cartesian2();\nconst cartesianScratch2 = new Cartesian3();\n\nfunction getInterpolatedVertexAtCorner(\n  ellipsoid,\n  sourceTile,\n  targetTile,\n  sourceMesh,\n  previousIndex,\n  nextIndex,\n  u,\n  v,\n  interpolateU,\n  vertex,\n) {\n  const sourceEncoding = sourceMesh.encoding;\n  const sourceVertices = sourceMesh.vertices;\n\n  const previousUv = transformTextureCoordinates(\n    sourceTile,\n    targetTile,\n    sourceEncoding.decodeTextureCoordinates(\n      sourceVertices,\n      previousIndex,\n      uvScratch,\n    ),\n    uvScratch,\n  );\n  const nextUv = transformTextureCoordinates(\n    sourceTile,\n    targetTile,\n    sourceEncoding.decodeTextureCoordinates(\n      sourceVertices,\n      nextIndex,\n      uvScratch2,\n    ),\n    uvScratch2,\n  );\n\n  let ratio;\n  if (interpolateU) {\n    ratio = (u - previousUv.x) / (nextUv.x - previousUv.x);\n  } else {\n    ratio = (v - previousUv.y) / (nextUv.y - previousUv.y);\n  }\n\n  const height1 = sourceEncoding.decodeHeight(sourceVertices, previousIndex);\n  const height2 = sourceEncoding.decodeHeight(sourceVertices, nextIndex);\n\n  const targetRectangle = targetTile.rectangle;\n  cartographicScratch.longitude = CesiumMath.lerp(\n    targetRectangle.west,\n    targetRectangle.east,\n    u,\n  );\n  cartographicScratch.latitude = CesiumMath.lerp(\n    targetRectangle.south,\n    targetRectangle.north,\n    v,\n  );\n  vertex.height = cartographicScratch.height = CesiumMath.lerp(\n    height1,\n    height2,\n    ratio,\n  );\n\n  let normal;\n  if (sourceEncoding.hasVertexNormals) {\n    const encodedNormal1 = sourceEncoding.getOctEncodedNormal(\n      sourceVertices,\n      previousIndex,\n      encodedNormalScratch,\n    );\n    const encodedNormal2 = sourceEncoding.getOctEncodedNormal(\n      sourceVertices,\n      nextIndex,\n      encodedNormalScratch2,\n    );\n    const normal1 = AttributeCompression.octDecode(\n      encodedNormal1.x,\n      encodedNormal1.y,\n      cartesianScratch,\n    );\n    const normal2 = AttributeCompression.octDecode(\n      encodedNormal2.x,\n      encodedNormal2.y,\n      cartesianScratch2,\n    );\n    normal = Cartesian3.lerp(normal1, normal2, ratio, cartesianScratch);\n    Cartesian3.normalize(normal, normal);\n    AttributeCompression.octEncode(normal, vertex.encodedNormal);\n  } else {\n    normal = ellipsoid.geodeticSurfaceNormalCartographic(\n      cartographicScratch,\n      cartesianScratch,\n    );\n    AttributeCompression.octEncode(normal, vertex.encodedNormal);\n  }\n}\n\nfunction getVertexWithHeightAtCorner(\n  terrainFillMesh,\n  ellipsoid,\n  u,\n  v,\n  height,\n  vertex,\n) {\n  vertex.height = height;\n  const normal = ellipsoid.geodeticSurfaceNormalCartographic(\n    cartographicScratch,\n    cartesianScratch,\n  );\n  AttributeCompression.octEncode(normal, vertex.encodedNormal);\n}\n\nfunction getCorner(\n  terrainFillMesh,\n  ellipsoid,\n  u,\n  v,\n  cornerTile,\n  cornerMesh,\n  previousEdgeTiles,\n  previousEdgeMeshes,\n  nextEdgeTiles,\n  nextEdgeMeshes,\n  vertex,\n) {\n  const gotCorner =\n    getCornerFromEdge(\n      terrainFillMesh,\n      ellipsoid,\n      previousEdgeMeshes,\n      previousEdgeTiles,\n      false,\n      u,\n      v,\n      vertex,\n    ) ||\n    getCornerFromEdge(\n      terrainFillMesh,\n      ellipsoid,\n      nextEdgeMeshes,\n      nextEdgeTiles,\n      true,\n      u,\n      v,\n      vertex,\n    );\n  if (gotCorner) {\n    return vertex;\n  }\n\n  let vertexIndex;\n\n  if (meshIsUsable(cornerTile, cornerMesh)) {\n    // Corner mesh is valid, copy its corner vertex to this mesh.\n    if (u === 0.0) {\n      if (v === 0.0) {\n        // southwest destination, northeast source\n        vertexIndex = cornerMesh.eastIndicesNorthToSouth[0];\n      } else {\n        // northwest destination, southeast source\n        vertexIndex = cornerMesh.southIndicesEastToWest[0];\n      }\n    } else if (v === 0.0) {\n      // southeast destination, northwest source\n      vertexIndex = cornerMesh.northIndicesWestToEast[0];\n    } else {\n      // northeast destination, southwest source\n      vertexIndex = cornerMesh.westIndicesSouthToNorth[0];\n    }\n    getVertexFromTileAtCorner(cornerMesh, vertexIndex, u, v, vertex);\n    return vertex;\n  }\n\n  // There is no precise vertex available from the corner or from either adjacent edge.\n  // This is either because there are no tiles at all at the edges and corner, or\n  // because the tiles at the edge are higher-level-number and don't extend all the way\n  // to the corner.\n  // Try to grab a height from the adjacent edges.\n  let height;\n  if (u === 0.0) {\n    if (v === 0.0) {\n      // southwest\n      height = getClosestHeightToCorner(\n        terrainFillMesh.westMeshes,\n        terrainFillMesh.westTiles,\n        TileEdge.EAST,\n        terrainFillMesh.southMeshes,\n        terrainFillMesh.southTiles,\n        TileEdge.NORTH,\n        u,\n        v,\n      );\n    } else {\n      // northwest\n      height = getClosestHeightToCorner(\n        terrainFillMesh.northMeshes,\n        terrainFillMesh.northTiles,\n        TileEdge.SOUTH,\n        terrainFillMesh.westMeshes,\n        terrainFillMesh.westTiles,\n        TileEdge.EAST,\n        u,\n        v,\n      );\n    }\n  } else if (v === 0.0) {\n    // southeast\n    height = getClosestHeightToCorner(\n      terrainFillMesh.southMeshes,\n      terrainFillMesh.southTiles,\n      TileEdge.NORTH,\n      terrainFillMesh.eastMeshes,\n      terrainFillMesh.eastTiles,\n      TileEdge.WEST,\n      u,\n      v,\n    );\n  } else {\n    // northeast\n    height = getClosestHeightToCorner(\n      terrainFillMesh.eastMeshes,\n      terrainFillMesh.eastTiles,\n      TileEdge.WEST,\n      terrainFillMesh.northMeshes,\n      terrainFillMesh.northTiles,\n      TileEdge.SOUTH,\n      u,\n      v,\n    );\n  }\n\n  if (defined(height)) {\n    getVertexWithHeightAtCorner(\n      terrainFillMesh,\n      ellipsoid,\n      u,\n      v,\n      height,\n      vertex,\n    );\n    return vertex;\n  }\n\n  // No heights available that are closer than the adjacent corners.\n  return undefined;\n}\n\nfunction getClosestHeightToCorner(\n  previousMeshes,\n  previousTiles,\n  previousEdge,\n  nextMeshes,\n  nextTiles,\n  nextEdge,\n  u,\n  v,\n) {\n  const height1 = getNearestHeightOnEdge(\n    previousMeshes,\n    previousTiles,\n    false,\n    previousEdge,\n    u,\n    v,\n  );\n  const height2 = getNearestHeightOnEdge(\n    nextMeshes,\n    nextTiles,\n    true,\n    nextEdge,\n    u,\n    v,\n  );\n  if (defined(height1) && defined(height2)) {\n    // It would be slightly better to do a weighted average of the two heights\n    // based on their distance from the corner, but it shouldn't matter much in practice.\n    return (height1 + height2) * 0.5;\n  } else if (defined(height1)) {\n    return height1;\n  }\n  return height2;\n}\n\nfunction addEdge(\n  terrainFillMesh,\n  ellipsoid,\n  encoding,\n  typedArray,\n  nextIndex,\n  edgeTiles,\n  edgeMeshes,\n  tileEdge,\n  heightRange,\n) {\n  for (let i = 0; i < edgeTiles.length; ++i) {\n    nextIndex = addEdgeMesh(\n      terrainFillMesh,\n      ellipsoid,\n      encoding,\n      typedArray,\n      nextIndex,\n      edgeTiles[i],\n      edgeMeshes[i],\n      tileEdge,\n      heightRange,\n    );\n  }\n  return nextIndex;\n}\n\nfunction addEdgeMesh(\n  terrainFillMesh,\n  ellipsoid,\n  encoding,\n  typedArray,\n  nextIndex,\n  edgeTile,\n  edgeMesh,\n  tileEdge,\n  heightRange,\n) {\n  // Handle copying edges across the anti-meridian.\n  let sourceRectangle = edgeTile.rectangle;\n  if (tileEdge === TileEdge.EAST && terrainFillMesh.tile.x === 0) {\n    sourceRectangle = Rectangle.clone(\n      edgeTile.rectangle,\n      sourceRectangleScratch,\n    );\n    sourceRectangle.west -= CesiumMath.TWO_PI;\n    sourceRectangle.east -= CesiumMath.TWO_PI;\n  } else if (tileEdge === TileEdge.WEST && edgeTile.x === 0) {\n    sourceRectangle = Rectangle.clone(\n      edgeTile.rectangle,\n      sourceRectangleScratch,\n    );\n    sourceRectangle.west += CesiumMath.TWO_PI;\n    sourceRectangle.east += CesiumMath.TWO_PI;\n  }\n\n  const targetRectangle = terrainFillMesh.tile.rectangle;\n\n  let lastU;\n  let lastV;\n\n  if (nextIndex > 0) {\n    encoding.decodeTextureCoordinates(typedArray, nextIndex - 1, uvScratch);\n    lastU = uvScratch.x;\n    lastV = uvScratch.y;\n  }\n\n  let indices;\n  let compareU;\n\n  switch (tileEdge) {\n    case TileEdge.WEST:\n      indices = edgeMesh.westIndicesSouthToNorth;\n      compareU = false;\n      break;\n    case TileEdge.NORTH:\n      indices = edgeMesh.northIndicesWestToEast;\n      compareU = true;\n      break;\n    case TileEdge.EAST:\n      indices = edgeMesh.eastIndicesNorthToSouth;\n      compareU = false;\n      break;\n    case TileEdge.SOUTH:\n      indices = edgeMesh.southIndicesEastToWest;\n      compareU = true;\n      break;\n  }\n\n  const sourceTile = edgeTile;\n  const targetTile = terrainFillMesh.tile;\n  const sourceEncoding = edgeMesh.encoding;\n  const sourceVertices = edgeMesh.vertices;\n  const targetStride = encoding.stride;\n\n  let southMercatorY;\n  let oneOverMercatorHeight;\n  if (sourceEncoding.hasWebMercatorT) {\n    southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n      targetRectangle.south,\n    );\n    oneOverMercatorHeight =\n      1.0 /\n      (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n        targetRectangle.north,\n      ) -\n        southMercatorY);\n  }\n\n  for (let i = 0; i < indices.length; ++i) {\n    const index = indices[i];\n\n    const uv = sourceEncoding.decodeTextureCoordinates(\n      sourceVertices,\n      index,\n      uvScratch,\n    );\n    transformTextureCoordinates(sourceTile, targetTile, uv, uv);\n    const u = uv.x;\n    const v = uv.y;\n    const uOrV = compareU ? u : v;\n\n    if (uOrV < 0.0 || uOrV > 1.0) {\n      // Vertex is outside the target tile - skip it.\n      continue;\n    }\n\n    if (\n      Math.abs(u - lastU) < CesiumMath.EPSILON5 &&\n      Math.abs(v - lastV) < CesiumMath.EPSILON5\n    ) {\n      // Vertex is very close to the previous one - skip it.\n      continue;\n    }\n\n    const nearlyEdgeU =\n      Math.abs(u) < CesiumMath.EPSILON5 ||\n      Math.abs(u - 1.0) < CesiumMath.EPSILON5;\n    const nearlyEdgeV =\n      Math.abs(v) < CesiumMath.EPSILON5 ||\n      Math.abs(v - 1.0) < CesiumMath.EPSILON5;\n\n    if (nearlyEdgeU && nearlyEdgeV) {\n      // Corner vertex - skip it.\n      continue;\n    }\n\n    const position = sourceEncoding.decodePosition(\n      sourceVertices,\n      index,\n      cartesianScratch,\n    );\n    const height = sourceEncoding.decodeHeight(sourceVertices, index);\n\n    let normal;\n    if (sourceEncoding.hasVertexNormals) {\n      normal = sourceEncoding.getOctEncodedNormal(\n        sourceVertices,\n        index,\n        octEncodedNormalScratch,\n      );\n    } else {\n      normal = octEncodedNormalScratch;\n      normal.x = 0.0;\n      normal.y = 0.0;\n    }\n\n    let webMercatorT = v;\n    if (sourceEncoding.hasWebMercatorT) {\n      const latitude = CesiumMath.lerp(\n        targetRectangle.south,\n        targetRectangle.north,\n        v,\n      );\n      webMercatorT =\n        (WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) -\n          southMercatorY) *\n        oneOverMercatorHeight;\n    }\n\n    let geodeticSurfaceNormal;\n    if (encoding.hasGeodeticSurfaceNormals) {\n      geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n        position,\n        normalScratch,\n      );\n    }\n\n    encoding.encode(\n      typedArray,\n      nextIndex * targetStride,\n      position,\n      uv,\n      height,\n      normal,\n      webMercatorT,\n      geodeticSurfaceNormal,\n    );\n\n    heightRange.minimumHeight = Math.min(heightRange.minimumHeight, height);\n    heightRange.maximumHeight = Math.max(heightRange.maximumHeight, height);\n\n    ++nextIndex;\n  }\n\n  return nextIndex;\n}\n\nfunction getNearestHeightOnEdge(meshes, tiles, isNext, edge, u, v) {\n  let meshStart;\n  let meshEnd;\n  let meshStep;\n\n  if (isNext) {\n    meshStart = 0;\n    meshEnd = meshes.length;\n    meshStep = 1;\n  } else {\n    meshStart = meshes.length - 1;\n    meshEnd = -1;\n    meshStep = -1;\n  }\n\n  for (\n    let meshIndex = meshStart;\n    meshIndex !== meshEnd;\n    meshIndex += meshStep\n  ) {\n    const mesh = meshes[meshIndex];\n    const tile = tiles[meshIndex];\n    if (!meshIsUsable(tile, mesh)) {\n      continue;\n    }\n\n    let indices;\n    switch (edge) {\n      case TileEdge.WEST:\n        indices = mesh.westIndicesSouthToNorth;\n        break;\n      case TileEdge.SOUTH:\n        indices = mesh.southIndicesEastToWest;\n        break;\n      case TileEdge.EAST:\n        indices = mesh.eastIndicesNorthToSouth;\n        break;\n      case TileEdge.NORTH:\n        indices = mesh.northIndicesWestToEast;\n        break;\n    }\n\n    const index = indices[isNext ? 0 : indices.length - 1];\n    if (defined(index)) {\n      return mesh.encoding.decodeHeight(mesh.vertices, index);\n    }\n  }\n\n  return undefined;\n}\n\nfunction meshIsUsable(tile, mesh) {\n  return (\n    defined(mesh) &&\n    (!defined(tile.data.fill) || !tile.data.fill.changedThisFrame)\n  );\n}\n\nfunction getCornerFromEdge(\n  terrainFillMesh,\n  ellipsoid,\n  edgeMeshes,\n  edgeTiles,\n  isNext,\n  u,\n  v,\n  vertex,\n) {\n  let edgeVertices;\n  let compareU;\n  let increasing;\n  let vertexIndexIndex;\n  let vertexIndex;\n  const sourceTile = edgeTiles[isNext ? 0 : edgeMeshes.length - 1];\n  const sourceMesh = edgeMeshes[isNext ? 0 : edgeMeshes.length - 1];\n\n  if (meshIsUsable(sourceTile, sourceMesh)) {\n    // Previous mesh is valid, but we don't know yet if it covers this corner.\n    if (u === 0.0) {\n      if (v === 0.0) {\n        // southwest\n        edgeVertices = isNext\n          ? sourceMesh.northIndicesWestToEast\n          : sourceMesh.eastIndicesNorthToSouth;\n        compareU = isNext;\n        increasing = isNext;\n      } else {\n        // northwest\n        edgeVertices = isNext\n          ? sourceMesh.eastIndicesNorthToSouth\n          : sourceMesh.southIndicesEastToWest;\n        compareU = !isNext;\n        increasing = false;\n      }\n    } else if (v === 0.0) {\n      // southeast\n      edgeVertices = isNext\n        ? sourceMesh.westIndicesSouthToNorth\n        : sourceMesh.northIndicesWestToEast;\n      compareU = !isNext;\n      increasing = true;\n    } else {\n      // northeast\n      edgeVertices = isNext\n        ? sourceMesh.southIndicesEastToWest\n        : sourceMesh.westIndicesSouthToNorth;\n      compareU = isNext;\n      increasing = !isNext;\n    }\n\n    if (edgeVertices.length > 0) {\n      // The vertex we want will very often be the first/last vertex so check that first.\n      vertexIndexIndex = isNext ? 0 : edgeVertices.length - 1;\n      vertexIndex = edgeVertices[vertexIndexIndex];\n      sourceMesh.encoding.decodeTextureCoordinates(\n        sourceMesh.vertices,\n        vertexIndex,\n        uvScratch,\n      );\n      const targetUv = transformTextureCoordinates(\n        sourceTile,\n        terrainFillMesh.tile,\n        uvScratch,\n        uvScratch,\n      );\n      if (targetUv.x === u && targetUv.y === v) {\n        // Vertex is good!\n        getVertexFromTileAtCorner(sourceMesh, vertexIndex, u, v, vertex);\n        return true;\n      }\n\n      // The last vertex is not the one we need, try binary searching for the right one.\n      vertexIndexIndex = binarySearch(\n        edgeVertices,\n        compareU ? u : v,\n        function (vertexIndex, textureCoordinate) {\n          sourceMesh.encoding.decodeTextureCoordinates(\n            sourceMesh.vertices,\n            vertexIndex,\n            uvScratch,\n          );\n          const targetUv = transformTextureCoordinates(\n            sourceTile,\n            terrainFillMesh.tile,\n            uvScratch,\n            uvScratch,\n          );\n          if (increasing) {\n            if (compareU) {\n              return targetUv.x - u;\n            }\n            return targetUv.y - v;\n          } else if (compareU) {\n            return u - targetUv.x;\n          }\n          return v - targetUv.y;\n        },\n      );\n\n      if (vertexIndexIndex < 0) {\n        vertexIndexIndex = ~vertexIndexIndex;\n\n        if (vertexIndexIndex > 0 && vertexIndexIndex < edgeVertices.length) {\n          // The corner falls between two vertices, so interpolate between them.\n          getInterpolatedVertexAtCorner(\n            ellipsoid,\n            sourceTile,\n            terrainFillMesh.tile,\n            sourceMesh,\n            edgeVertices[vertexIndexIndex - 1],\n            edgeVertices[vertexIndexIndex],\n            u,\n            v,\n            compareU,\n            vertex,\n          );\n          return true;\n        }\n      } else {\n        // Found a vertex that fits in the corner exactly.\n        getVertexFromTileAtCorner(\n          sourceMesh,\n          edgeVertices[vertexIndexIndex],\n          u,\n          v,\n          vertex,\n        );\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nconst cornerPositionsScratch = [\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n  new Cartesian3(),\n];\n\nfunction computeOccludeePoint(\n  tileProvider,\n  center,\n  rectangle,\n  minimumHeight,\n  maximumHeight,\n  result,\n) {\n  const ellipsoidalOccluder = tileProvider.quadtree._occluders.ellipsoid;\n  const ellipsoid = ellipsoidalOccluder.ellipsoid;\n\n  const cornerPositions = cornerPositionsScratch;\n  Cartesian3.fromRadians(\n    rectangle.west,\n    rectangle.south,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[0],\n  );\n  Cartesian3.fromRadians(\n    rectangle.east,\n    rectangle.south,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[1],\n  );\n  Cartesian3.fromRadians(\n    rectangle.west,\n    rectangle.north,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[2],\n  );\n  Cartesian3.fromRadians(\n    rectangle.east,\n    rectangle.north,\n    maximumHeight,\n    ellipsoid,\n    cornerPositions[3],\n  );\n\n  return ellipsoidalOccluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n    center,\n    cornerPositions,\n    minimumHeight,\n    result,\n  );\n}\nexport default TerrainFillMesh;\n","/**\n * @private\n */\nconst TerrainState = {\n  FAILED: 0,\n  UNLOADED: 1,\n  RECEIVING: 2,\n  RECEIVED: 3,\n  TRANSFORMING: 4,\n  TRANSFORMED: 5,\n  READY: 6,\n};\nexport default Object.freeze(TerrainState);\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport IntersectionTests from \"../Core/IntersectionTests.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Plane from \"../Core/Plane.js\";\nimport Ray from \"../Core/Ray.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RectangleOutlineGeometry from \"../Core/RectangleOutlineGeometry.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * A tile bounding volume specified as a longitude/latitude/height region.\n * @alias TileBoundingRegion\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Rectangle} options.rectangle The rectangle specifying the longitude and latitude range of the region.\n * @param {number} [options.minimumHeight=0.0] The minimum height of the region.\n * @param {number} [options.maximumHeight=0.0] The maximum height of the region.\n * @param {Ellipsoid} [options.ellipsoid=Cesium.Ellipsoid.WGS84] The ellipsoid.\n * @param {boolean} [options.computeBoundingVolumes=true] True to compute the {@link TileBoundingRegion#boundingVolume} and\n *                  {@link TileBoundingVolume#boundingSphere}. If false, these properties will be undefined.\n *\n * @private\n */\nfunction TileBoundingRegion(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.object(\"options.rectangle\", options.rectangle);\n  //>>includeEnd('debug');\n\n  this.rectangle = Rectangle.clone(options.rectangle);\n  this.minimumHeight = options.minimumHeight ?? 0.0;\n  this.maximumHeight = options.maximumHeight ?? 0.0;\n\n  /**\n   * The world coordinates of the southwest corner of the tile's rectangle.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3()\n   */\n  this.southwestCornerCartesian = new Cartesian3();\n\n  /**\n   * The world coordinates of the northeast corner of the tile's rectangle.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3()\n   */\n  this.northeastCornerCartesian = new Cartesian3();\n\n  /**\n   * A normal that, along with southwestCornerCartesian, defines a plane at the western edge of\n   * the tile.  Any position above (in the direction of the normal) this plane is outside the tile.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3()\n   */\n  this.westNormal = new Cartesian3();\n\n  /**\n   * A normal that, along with southwestCornerCartesian, defines a plane at the southern edge of\n   * the tile.  Any position above (in the direction of the normal) this plane is outside the tile.\n   * Because points of constant latitude do not necessary lie in a plane, positions below this\n   * plane are not necessarily inside the tile, but they are close.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3()\n   */\n  this.southNormal = new Cartesian3();\n\n  /**\n   * A normal that, along with northeastCornerCartesian, defines a plane at the eastern edge of\n   * the tile.  Any position above (in the direction of the normal) this plane is outside the tile.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3()\n   */\n  this.eastNormal = new Cartesian3();\n\n  /**\n   * A normal that, along with northeastCornerCartesian, defines a plane at the eastern edge of\n   * the tile.  Any position above (in the direction of the normal) this plane is outside the tile.\n   * Because points of constant latitude do not necessary lie in a plane, positions below this\n   * plane are not necessarily inside the tile, but they are close.\n   *\n   * @type {Cartesian3}\n   * @default Cartesian3()\n   */\n  this.northNormal = new Cartesian3();\n\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.WGS84;\n  computeBox(this, options.rectangle, ellipsoid);\n\n  this._orientedBoundingBox = undefined;\n  this._boundingSphere = undefined;\n\n  if (options.computeBoundingVolumes ?? true) {\n    this.computeBoundingVolumes(ellipsoid);\n  }\n}\n\nObject.defineProperties(TileBoundingRegion.prototype, {\n  /**\n   * The underlying bounding volume\n   *\n   * @memberof TileBoundingRegion.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  boundingVolume: {\n    get: function () {\n      return this._orientedBoundingBox;\n    },\n  },\n  /**\n   * The underlying bounding sphere\n   *\n   * @memberof TileBoundingRegion.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n});\n\nTileBoundingRegion.prototype.computeBoundingVolumes = function (ellipsoid) {\n  // An oriented bounding box that encloses this tile's region.  This is used to calculate tile visibility.\n  this._orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n    this.rectangle,\n    this.minimumHeight,\n    this.maximumHeight,\n    ellipsoid,\n  );\n\n  this._boundingSphere = BoundingSphere.fromOrientedBoundingBox(\n    this._orientedBoundingBox,\n  );\n};\n\nconst cartesian3Scratch = new Cartesian3();\nconst cartesian3Scratch2 = new Cartesian3();\nconst cartesian3Scratch3 = new Cartesian3();\nconst westNormalScratch = new Cartesian3();\nconst eastWestNormalScratch = new Cartesian3();\nconst westernMidpointScratch = new Cartesian3();\nconst easternMidpointScratch = new Cartesian3();\nconst cartographicScratch = new Cartographic();\nconst planeScratch = new Plane(Cartesian3.UNIT_X, 0.0);\nconst rayScratch = new Ray();\n\nfunction computeBox(tileBB, rectangle, ellipsoid) {\n  ellipsoid.cartographicToCartesian(\n    Rectangle.southwest(rectangle),\n    tileBB.southwestCornerCartesian,\n  );\n  ellipsoid.cartographicToCartesian(\n    Rectangle.northeast(rectangle),\n    tileBB.northeastCornerCartesian,\n  );\n\n  // The middle latitude on the western edge.\n  cartographicScratch.longitude = rectangle.west;\n  cartographicScratch.latitude = (rectangle.south + rectangle.north) * 0.5;\n  cartographicScratch.height = 0.0;\n  const westernMidpointCartesian = ellipsoid.cartographicToCartesian(\n    cartographicScratch,\n    westernMidpointScratch,\n  );\n\n  // Compute the normal of the plane on the western edge of the tile.\n  const westNormal = Cartesian3.cross(\n    westernMidpointCartesian,\n    Cartesian3.UNIT_Z,\n    westNormalScratch,\n  );\n  Cartesian3.normalize(westNormal, tileBB.westNormal);\n\n  // The middle latitude on the eastern edge.\n  cartographicScratch.longitude = rectangle.east;\n  const easternMidpointCartesian = ellipsoid.cartographicToCartesian(\n    cartographicScratch,\n    easternMidpointScratch,\n  );\n\n  // Compute the normal of the plane on the eastern edge of the tile.\n  const eastNormal = Cartesian3.cross(\n    Cartesian3.UNIT_Z,\n    easternMidpointCartesian,\n    cartesian3Scratch,\n  );\n  Cartesian3.normalize(eastNormal, tileBB.eastNormal);\n\n  let westVector = Cartesian3.subtract(\n    westernMidpointCartesian,\n    easternMidpointCartesian,\n    cartesian3Scratch,\n  );\n\n  if (Cartesian3.magnitude(westVector) === 0.0) {\n    westVector = Cartesian3.clone(westNormal, westVector);\n  }\n\n  const eastWestNormal = Cartesian3.normalize(\n    westVector,\n    eastWestNormalScratch,\n  );\n\n  // Compute the normal of the plane bounding the southern edge of the tile.\n  const south = rectangle.south;\n  let southSurfaceNormal;\n\n  if (south > 0.0) {\n    // Compute a plane that doesn't cut through the tile.\n    cartographicScratch.longitude = (rectangle.west + rectangle.east) * 0.5;\n    cartographicScratch.latitude = south;\n    const southCenterCartesian = ellipsoid.cartographicToCartesian(\n      cartographicScratch,\n      rayScratch.origin,\n    );\n    Cartesian3.clone(eastWestNormal, rayScratch.direction);\n    const westPlane = Plane.fromPointNormal(\n      tileBB.southwestCornerCartesian,\n      tileBB.westNormal,\n      planeScratch,\n    );\n    // Find a point that is on the west and the south planes\n    IntersectionTests.rayPlane(\n      rayScratch,\n      westPlane,\n      tileBB.southwestCornerCartesian,\n    );\n    southSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n      southCenterCartesian,\n      cartesian3Scratch2,\n    );\n  } else {\n    southSurfaceNormal = ellipsoid.geodeticSurfaceNormalCartographic(\n      Rectangle.southeast(rectangle),\n      cartesian3Scratch2,\n    );\n  }\n  const southNormal = Cartesian3.cross(\n    southSurfaceNormal,\n    westVector,\n    cartesian3Scratch3,\n  );\n  Cartesian3.normalize(southNormal, tileBB.southNormal);\n\n  // Compute the normal of the plane bounding the northern edge of the tile.\n  const north = rectangle.north;\n  let northSurfaceNormal;\n\n  if (north < 0.0) {\n    // Compute a plane that doesn't cut through the tile.\n    cartographicScratch.longitude = (rectangle.west + rectangle.east) * 0.5;\n    cartographicScratch.latitude = north;\n    const northCenterCartesian = ellipsoid.cartographicToCartesian(\n      cartographicScratch,\n      rayScratch.origin,\n    );\n    Cartesian3.negate(eastWestNormal, rayScratch.direction);\n    const eastPlane = Plane.fromPointNormal(\n      tileBB.northeastCornerCartesian,\n      tileBB.eastNormal,\n      planeScratch,\n    );\n    // Find a point that is on the east and the north planes\n    IntersectionTests.rayPlane(\n      rayScratch,\n      eastPlane,\n      tileBB.northeastCornerCartesian,\n    );\n    northSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n      northCenterCartesian,\n      cartesian3Scratch2,\n    );\n  } else {\n    northSurfaceNormal = ellipsoid.geodeticSurfaceNormalCartographic(\n      Rectangle.northwest(rectangle),\n      cartesian3Scratch2,\n    );\n  }\n  const northNormal = Cartesian3.cross(\n    westVector,\n    northSurfaceNormal,\n    cartesian3Scratch3,\n  );\n  Cartesian3.normalize(northNormal, tileBB.northNormal);\n}\n\nconst southwestCornerScratch = new Cartesian3();\nconst northeastCornerScratch = new Cartesian3();\nconst negativeUnitY = new Cartesian3(0.0, -1.0, 0.0);\nconst negativeUnitZ = new Cartesian3(0.0, 0.0, -1.0);\nconst vectorScratch = new Cartesian3();\n\nfunction distanceToCameraRegion(tileBB, frameState) {\n  const camera = frameState.camera;\n  const cameraCartesianPosition = camera.positionWC;\n  const cameraCartographicPosition = camera.positionCartographic;\n\n  let result = 0.0;\n  if (!Rectangle.contains(tileBB.rectangle, cameraCartographicPosition)) {\n    let southwestCornerCartesian = tileBB.southwestCornerCartesian;\n    let northeastCornerCartesian = tileBB.northeastCornerCartesian;\n    let westNormal = tileBB.westNormal;\n    let southNormal = tileBB.southNormal;\n    let eastNormal = tileBB.eastNormal;\n    let northNormal = tileBB.northNormal;\n\n    if (frameState.mode !== SceneMode.SCENE3D) {\n      southwestCornerCartesian = frameState.mapProjection.project(\n        Rectangle.southwest(tileBB.rectangle),\n        southwestCornerScratch,\n      );\n      southwestCornerCartesian.z = southwestCornerCartesian.y;\n      southwestCornerCartesian.y = southwestCornerCartesian.x;\n      southwestCornerCartesian.x = 0.0;\n      northeastCornerCartesian = frameState.mapProjection.project(\n        Rectangle.northeast(tileBB.rectangle),\n        northeastCornerScratch,\n      );\n      northeastCornerCartesian.z = northeastCornerCartesian.y;\n      northeastCornerCartesian.y = northeastCornerCartesian.x;\n      northeastCornerCartesian.x = 0.0;\n      westNormal = negativeUnitY;\n      eastNormal = Cartesian3.UNIT_Y;\n      southNormal = negativeUnitZ;\n      northNormal = Cartesian3.UNIT_Z;\n    }\n\n    const vectorFromSouthwestCorner = Cartesian3.subtract(\n      cameraCartesianPosition,\n      southwestCornerCartesian,\n      vectorScratch,\n    );\n    const distanceToWestPlane = Cartesian3.dot(\n      vectorFromSouthwestCorner,\n      westNormal,\n    );\n    const distanceToSouthPlane = Cartesian3.dot(\n      vectorFromSouthwestCorner,\n      southNormal,\n    );\n\n    const vectorFromNortheastCorner = Cartesian3.subtract(\n      cameraCartesianPosition,\n      northeastCornerCartesian,\n      vectorScratch,\n    );\n    const distanceToEastPlane = Cartesian3.dot(\n      vectorFromNortheastCorner,\n      eastNormal,\n    );\n    const distanceToNorthPlane = Cartesian3.dot(\n      vectorFromNortheastCorner,\n      northNormal,\n    );\n\n    if (distanceToWestPlane > 0.0) {\n      result += distanceToWestPlane * distanceToWestPlane;\n    } else if (distanceToEastPlane > 0.0) {\n      result += distanceToEastPlane * distanceToEastPlane;\n    }\n\n    if (distanceToSouthPlane > 0.0) {\n      result += distanceToSouthPlane * distanceToSouthPlane;\n    } else if (distanceToNorthPlane > 0.0) {\n      result += distanceToNorthPlane * distanceToNorthPlane;\n    }\n  }\n\n  let cameraHeight;\n  let minimumHeight;\n  let maximumHeight;\n  if (frameState.mode === SceneMode.SCENE3D) {\n    cameraHeight = cameraCartographicPosition.height;\n    minimumHeight = tileBB.minimumHeight;\n    maximumHeight = tileBB.maximumHeight;\n  } else {\n    cameraHeight = cameraCartesianPosition.x;\n    minimumHeight = 0.0;\n    maximumHeight = 0.0;\n  }\n\n  if (cameraHeight > maximumHeight) {\n    const distanceAboveTop = cameraHeight - maximumHeight;\n    result += distanceAboveTop * distanceAboveTop;\n  } else if (cameraHeight < minimumHeight) {\n    const distanceBelowBottom = minimumHeight - cameraHeight;\n    result += distanceBelowBottom * distanceBelowBottom;\n  }\n\n  return Math.sqrt(result);\n}\n\n/**\n * Gets the distance from the camera to the closest point on the tile.  This is used for level of detail selection.\n *\n * @param {FrameState} frameState The state information of the current rendering frame.\n * @returns {number} The distance from the camera to the closest point on the tile, in meters.\n */\nTileBoundingRegion.prototype.distanceToCamera = function (frameState) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"frameState\", frameState);\n  //>>includeEnd('debug');\n\n  const regionResult = distanceToCameraRegion(this, frameState);\n  if (\n    frameState.mode === SceneMode.SCENE3D &&\n    defined(this._orientedBoundingBox)\n  ) {\n    const obbResult = Math.sqrt(\n      this._orientedBoundingBox.distanceSquaredTo(frameState.camera.positionWC),\n    );\n    return Math.max(regionResult, obbResult);\n  }\n  return regionResult;\n};\n\n/**\n * Determines which side of a plane this box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the box\n *                      intersects the plane.\n */\nTileBoundingRegion.prototype.intersectPlane = function (plane) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"plane\", plane);\n  //>>includeEnd('debug');\n  return this._orientedBoundingBox.intersectPlane(plane);\n};\n\n/**\n * Creates a debug primitive that shows the outline of the tile bounding region.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n *\n * @private\n */\nTileBoundingRegion.prototype.createDebugVolume = function (color) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"color\", color);\n  //>>includeEnd('debug');\n\n  const modelMatrix = new Matrix4.clone(Matrix4.IDENTITY);\n  const geometry = new RectangleOutlineGeometry({\n    rectangle: this.rectangle,\n    height: this.minimumHeight,\n    extrudedHeight: this.maximumHeight,\n  });\n  const instance = new GeometryInstance({\n    geometry: geometry,\n    id: \"outline\",\n    modelMatrix: modelMatrix,\n    attributes: {\n      color: ColorGeometryInstanceAttribute.fromColor(color),\n    },\n  });\n\n  return new Primitive({\n    geometryInstances: instance,\n    appearance: new PerInstanceColorAppearance({\n      translucent: false,\n      flat: true,\n    }),\n    asynchronous: false,\n  });\n};\nexport default TileBoundingRegion;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Plane from \"../Core/Plane.js\";\nimport CoplanarPolygonOutlineGeometry from \"../Core/CoplanarPolygonOutlineGeometry.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Check from \"../Core/Check.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\nimport S2Cell from \"../Core/S2Cell.js\";\nlet centerCartographicScratch = new Cartographic();\n/**\n * A tile bounding volume specified as an S2 cell token with minimum and maximum heights.\n * The bounding volume is a k DOP. A k-DOP is the Boolean intersection of extents along k directions.\n *\n * @alias TileBoundingS2Cell\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {string} options.token The token of the S2 cell.\n * @param {number} [options.minimumHeight=0.0] The minimum height of the bounding volume.\n * @param {number} [options.maximumHeight=0.0] The maximum height of the bounding volume.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n * @param {boolean} [options.computeBoundingVolumes=true] True to compute the {@link TileBoundingS2Cell#boundingVolume} and\n *                  {@link TileBoundingS2Cell#boundingSphere}. If false, these properties will be undefined.\n *\n * @private\n */\nfunction TileBoundingS2Cell(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  Check.typeOf.string(\"options.token\", options.token);\n  //>>includeEnd('debug');\n\n  const s2Cell = S2Cell.fromToken(options.token);\n  const minimumHeight = options.minimumHeight ?? 0.0;\n  const maximumHeight = options.maximumHeight ?? 0.0;\n  const ellipsoid = options.ellipsoid ?? Ellipsoid.WGS84;\n\n  this.s2Cell = s2Cell;\n  this.minimumHeight = minimumHeight;\n  this.maximumHeight = maximumHeight;\n  this.ellipsoid = ellipsoid;\n\n  const boundingPlanes = computeBoundingPlanes(\n    s2Cell,\n    minimumHeight,\n    maximumHeight,\n    ellipsoid,\n  );\n  this._boundingPlanes = boundingPlanes;\n\n  // Pre-compute vertices to speed up the plane intersection test.\n  const vertices = computeVertices(boundingPlanes);\n  this._vertices = vertices;\n\n  // Pre-compute edge normals to speed up the point-polygon distance check in distanceToCamera.\n  this._edgeNormals = new Array(6);\n\n  this._edgeNormals[0] = computeEdgeNormals(\n    boundingPlanes[0],\n    vertices.slice(0, 4),\n  );\n  let i;\n  // Based on the way the edge normals are computed, the edge normals all point away from the \"face\"\n  // of the polyhedron they surround, except the plane for the top plane. Therefore, we negate the normals\n  // for the top plane.\n  for (i = 0; i < 4; i++) {\n    this._edgeNormals[0][i] = Cartesian3.negate(\n      this._edgeNormals[0][i],\n      this._edgeNormals[0][i],\n    );\n  }\n\n  this._edgeNormals[1] = computeEdgeNormals(\n    boundingPlanes[1],\n    vertices.slice(4, 8),\n  );\n  for (i = 0; i < 4; i++) {\n    // For each plane, iterate through the vertices in CCW order.\n    this._edgeNormals[2 + i] = computeEdgeNormals(boundingPlanes[2 + i], [\n      vertices[i % 4],\n      vertices[(i + 1) % 4],\n      vertices[4 + ((i + 1) % 4)],\n      vertices[4 + i],\n    ]);\n  }\n\n  this._planeVertices = [\n    this._vertices.slice(0, 4),\n    this._vertices.slice(4, 8),\n  ];\n  for (i = 0; i < 4; i++) {\n    this._planeVertices.push([\n      this._vertices[i % 4],\n      this._vertices[(i + 1) % 4],\n      this._vertices[4 + ((i + 1) % 4)],\n      this._vertices[4 + i],\n    ]);\n  }\n\n  const center = s2Cell.getCenter();\n  centerCartographicScratch = ellipsoid.cartesianToCartographic(\n    center,\n    centerCartographicScratch,\n  );\n  centerCartographicScratch.height = (maximumHeight + minimumHeight) / 2;\n  this.center = ellipsoid.cartographicToCartesian(\n    centerCartographicScratch,\n    center,\n  );\n\n  this._boundingSphere = BoundingSphere.fromPoints(vertices);\n}\n\nconst centerGeodeticNormalScratch = new Cartesian3();\nconst topCartographicScratch = new Cartographic();\nconst topScratch = new Cartesian3();\nconst vertexCartographicScratch = new Cartographic();\nconst vertexScratch = new Cartesian3();\nconst vertexGeodeticNormalScratch = new Cartesian3();\nconst sideNormalScratch = new Cartesian3();\nconst sideScratch = new Cartesian3();\n/**\n * Computes bounding planes of the kDOP.\n * @private\n */\nfunction computeBoundingPlanes(\n  s2Cell,\n  minimumHeight,\n  maximumHeight,\n  ellipsoid,\n) {\n  const planes = new Array(6);\n  const centerPoint = s2Cell.getCenter();\n\n  // Compute top plane.\n  // - Get geodetic surface normal at the center of the S2 cell.\n  // - Get center point at maximum height of bounding volume.\n  // - Create top plane from surface normal and top point.\n  const centerSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\n    centerPoint,\n    centerGeodeticNormalScratch,\n  );\n  const topCartographic = ellipsoid.cartesianToCartographic(\n    centerPoint,\n    topCartographicScratch,\n  );\n  topCartographic.height = maximumHeight;\n  const top = ellipsoid.cartographicToCartesian(topCartographic, topScratch);\n  const topPlane = Plane.fromPointNormal(top, centerSurfaceNormal);\n  planes[0] = topPlane;\n\n  // Compute bottom plane.\n  // - Iterate through bottom vertices\n  //   - Get distance from vertex to top plane\n  // - Find longest distance from vertex to top plane\n  // - Translate top plane by the distance\n  let maxDistance = 0;\n  let i;\n  const vertices = [];\n  let vertex, vertexCartographic;\n  for (i = 0; i < 4; i++) {\n    vertex = s2Cell.getVertex(i);\n    vertices[i] = vertex;\n    vertexCartographic = ellipsoid.cartesianToCartographic(\n      vertex,\n      vertexCartographicScratch,\n    );\n    vertexCartographic.height = minimumHeight;\n    const distance = Plane.getPointDistance(\n      topPlane,\n      ellipsoid.cartographicToCartesian(vertexCartographic, vertexScratch),\n    );\n    if (distance < maxDistance) {\n      maxDistance = distance;\n    }\n  }\n  const bottomPlane = Plane.clone(topPlane);\n  // Negate the normal of the bottom plane since we want all normals to point \"outwards\".\n  bottomPlane.normal = Cartesian3.negate(\n    bottomPlane.normal,\n    bottomPlane.normal,\n  );\n  bottomPlane.distance = bottomPlane.distance * -1 + maxDistance;\n  planes[1] = bottomPlane;\n\n  // Compute side planes.\n  // - Iterate through vertices (in CCW order, by default)\n  //   - Get a vertex and another vertex adjacent to it.\n  //   - Compute geodetic surface normal at one vertex.\n  //   - Compute vector between vertices.\n  //   - Compute normal of side plane. (cross product of top dir and side dir)\n  for (i = 0; i < 4; i++) {\n    vertex = vertices[i];\n    const adjacentVertex = vertices[(i + 1) % 4];\n    const geodeticNormal = ellipsoid.geodeticSurfaceNormal(\n      vertex,\n      vertexGeodeticNormalScratch,\n    );\n    const side = Cartesian3.subtract(adjacentVertex, vertex, sideScratch);\n    let sideNormal = Cartesian3.cross(side, geodeticNormal, sideNormalScratch);\n    sideNormal = Cartesian3.normalize(sideNormal, sideNormal);\n    planes[2 + i] = Plane.fromPointNormal(vertex, sideNormal);\n  }\n\n  return planes;\n}\n\nlet n0Scratch = new Cartesian3();\nlet n1Scratch = new Cartesian3();\nlet n2Scratch = new Cartesian3();\nlet x0Scratch = new Cartesian3();\nlet x1Scratch = new Cartesian3();\nlet x2Scratch = new Cartesian3();\nconst t0Scratch = new Cartesian3();\nconst t1Scratch = new Cartesian3();\nconst t2Scratch = new Cartesian3();\nlet f0Scratch = new Cartesian3();\nlet f1Scratch = new Cartesian3();\nlet f2Scratch = new Cartesian3();\nlet sScratch = new Cartesian3();\nconst matrixScratch = new Matrix3();\n/**\n * Computes intersection of 3 planes.\n * @private\n */\nfunction computeIntersection(p0, p1, p2) {\n  n0Scratch = p0.normal;\n  n1Scratch = p1.normal;\n  n2Scratch = p2.normal;\n\n  x0Scratch = Cartesian3.multiplyByScalar(p0.normal, -p0.distance, x0Scratch);\n  x1Scratch = Cartesian3.multiplyByScalar(p1.normal, -p1.distance, x1Scratch);\n  x2Scratch = Cartesian3.multiplyByScalar(p2.normal, -p2.distance, x2Scratch);\n\n  f0Scratch = Cartesian3.multiplyByScalar(\n    Cartesian3.cross(n1Scratch, n2Scratch, t0Scratch),\n    Cartesian3.dot(x0Scratch, n0Scratch),\n    f0Scratch,\n  );\n  f1Scratch = Cartesian3.multiplyByScalar(\n    Cartesian3.cross(n2Scratch, n0Scratch, t1Scratch),\n    Cartesian3.dot(x1Scratch, n1Scratch),\n    f1Scratch,\n  );\n  f2Scratch = Cartesian3.multiplyByScalar(\n    Cartesian3.cross(n0Scratch, n1Scratch, t2Scratch),\n    Cartesian3.dot(x2Scratch, n2Scratch),\n    f2Scratch,\n  );\n\n  matrixScratch[0] = n0Scratch.x;\n  matrixScratch[1] = n1Scratch.x;\n  matrixScratch[2] = n2Scratch.x;\n  matrixScratch[3] = n0Scratch.y;\n  matrixScratch[4] = n1Scratch.y;\n  matrixScratch[5] = n2Scratch.y;\n  matrixScratch[6] = n0Scratch.z;\n  matrixScratch[7] = n1Scratch.z;\n  matrixScratch[8] = n2Scratch.z;\n  const determinant = Matrix3.determinant(matrixScratch);\n  sScratch = Cartesian3.add(f0Scratch, f1Scratch, sScratch);\n  sScratch = Cartesian3.add(sScratch, f2Scratch, sScratch);\n  return new Cartesian3(\n    sScratch.x / determinant,\n    sScratch.y / determinant,\n    sScratch.z / determinant,\n  );\n}\n/**\n * Compute the vertices of the kDOP.\n * @private\n */\nfunction computeVertices(boundingPlanes) {\n  const vertices = new Array(8);\n  for (let i = 0; i < 4; i++) {\n    // Vertices on the top plane.\n    vertices[i] = computeIntersection(\n      boundingPlanes[0],\n      boundingPlanes[2 + ((i + 3) % 4)],\n      boundingPlanes[2 + (i % 4)],\n    );\n    // Vertices on the bottom plane.\n    vertices[i + 4] = computeIntersection(\n      boundingPlanes[1],\n      boundingPlanes[2 + ((i + 3) % 4)],\n      boundingPlanes[2 + (i % 4)],\n    );\n  }\n  return vertices;\n}\n\nlet edgeScratch = new Cartesian3();\nlet edgeNormalScratch = new Cartesian3();\n/**\n * Compute edge normals on a plane.\n * @private\n */\nfunction computeEdgeNormals(plane, vertices) {\n  const edgeNormals = [];\n  for (let i = 0; i < 4; i++) {\n    edgeScratch = Cartesian3.subtract(\n      vertices[(i + 1) % 4],\n      vertices[i],\n      edgeScratch,\n    );\n    edgeNormalScratch = Cartesian3.cross(\n      plane.normal,\n      edgeScratch,\n      edgeNormalScratch,\n    );\n    edgeNormalScratch = Cartesian3.normalize(\n      edgeNormalScratch,\n      edgeNormalScratch,\n    );\n    edgeNormals[i] = Cartesian3.clone(edgeNormalScratch);\n  }\n  return edgeNormals;\n}\n\nObject.defineProperties(TileBoundingS2Cell.prototype, {\n  /**\n   * The underlying bounding volume.\n   *\n   * @memberof TileBoundingS2Cell.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  boundingVolume: {\n    get: function () {\n      return this;\n    },\n  },\n  /**\n   * The underlying bounding sphere.\n   *\n   * @memberof TileBoundingS2Cell.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n});\n\nconst facePointScratch = new Cartesian3();\n/**\n * The distance to point check for this kDOP involves checking the signed distance of the point to each bounding\n * plane. A plane qualifies for a distance check if the point being tested against is in the half-space in the direction\n * of the normal i.e. if the signed distance of the point from the plane is greater than 0.\n *\n * There are 4 possible cases for a point if it is outside the polyhedron:\n *\n *   \\     X     /     X \\           /       \\           /       \\           /\n * ---\\---------/---   ---\\---------/---   ---X---------/---   ---\\---------/---\n *     \\       /           \\       /           \\       /           \\       /\n *   ---\\-----/---       ---\\-----/---       ---\\-----/---       ---\\-----/---\n *       \\   /               \\   /               \\   /               \\   /\n *                                                                    \\ /\n *                                                                     \\\n *                                                                    / \\\n *                                                                   / X \\\n *\n *         I                  II                  III                 IV\n *\n * Case I: There is only one plane selected.\n * In this case, we project the point onto the plane and do a point polygon distance check to find the closest point on the polygon.\n * The point may lie inside the \"face\" of the polygon or outside. If it is outside, we need to determine which edges to test against.\n *\n * Case II: There are two planes selected.\n * In this case, the point will lie somewhere on the line created at the intersection of the selected planes or one of the planes.\n *\n * Case III: There are three planes selected.\n * In this case, the point will lie on the vertex, at the intersection of the selected planes.\n *\n * Case IV: There are more than three planes selected.\n * Since we are on an ellipsoid, this will only happen in the bottom plane, which is what we will use for the distance test.\n */\nTileBoundingS2Cell.prototype.distanceToCamera = function (frameState) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"frameState\", frameState);\n  //>>includeEnd('debug');\n\n  const point = frameState.camera.positionWC;\n\n  const selectedPlaneIndices = [];\n  const vertices = [];\n  let edgeNormals;\n\n  if (Plane.getPointDistance(this._boundingPlanes[0], point) > 0) {\n    selectedPlaneIndices.push(0);\n    vertices.push(this._planeVertices[0]);\n    edgeNormals = this._edgeNormals[0];\n  } else if (Plane.getPointDistance(this._boundingPlanes[1], point) > 0) {\n    selectedPlaneIndices.push(1);\n    vertices.push(this._planeVertices[1]);\n    edgeNormals = this._edgeNormals[1];\n  }\n\n  let i;\n  let sidePlaneIndex;\n  for (i = 0; i < 4; i++) {\n    sidePlaneIndex = 2 + i;\n    if (\n      Plane.getPointDistance(this._boundingPlanes[sidePlaneIndex], point) > 0\n    ) {\n      selectedPlaneIndices.push(sidePlaneIndex);\n      // Store vertices in CCW order.\n      vertices.push(this._planeVertices[sidePlaneIndex]);\n      edgeNormals = this._edgeNormals[sidePlaneIndex];\n    }\n  }\n\n  // Check if inside all planes.\n  if (selectedPlaneIndices.length === 0) {\n    return 0.0;\n  }\n\n  // We use the skip variable when the side plane indices are non-consecutive.\n  let facePoint;\n  let selectedPlane;\n  if (selectedPlaneIndices.length === 1) {\n    // Handles Case I\n    selectedPlane = this._boundingPlanes[selectedPlaneIndices[0]];\n    facePoint = closestPointPolygon(\n      Plane.projectPointOntoPlane(selectedPlane, point, facePointScratch),\n      vertices[0],\n      selectedPlane,\n      edgeNormals,\n    );\n\n    return Cartesian3.distance(facePoint, point);\n  } else if (selectedPlaneIndices.length === 2) {\n    // Handles Case II\n    // Since we are on the ellipsoid, the dihedral angle between a top plane and a side plane\n    // will always be acute, so we can do a faster check there.\n    if (selectedPlaneIndices[0] === 0) {\n      const edge = [\n        this._vertices[\n          4 * selectedPlaneIndices[0] + (selectedPlaneIndices[1] - 2)\n        ],\n        this._vertices[\n          4 * selectedPlaneIndices[0] + ((selectedPlaneIndices[1] - 2 + 1) % 4)\n        ],\n      ];\n      facePoint = closestPointLineSegment(point, edge[0], edge[1]);\n      return Cartesian3.distance(facePoint, point);\n    }\n    let minimumDistance = Number.MAX_VALUE;\n    let distance;\n    for (i = 0; i < 2; i++) {\n      selectedPlane = this._boundingPlanes[selectedPlaneIndices[i]];\n      facePoint = closestPointPolygon(\n        Plane.projectPointOntoPlane(selectedPlane, point, facePointScratch),\n        vertices[i],\n        selectedPlane,\n        this._edgeNormals[selectedPlaneIndices[i]],\n      );\n\n      distance = Cartesian3.distanceSquared(facePoint, point);\n      if (distance < minimumDistance) {\n        minimumDistance = distance;\n      }\n    }\n    return Math.sqrt(minimumDistance);\n  } else if (selectedPlaneIndices.length > 3) {\n    // Handles Case IV\n    facePoint = closestPointPolygon(\n      Plane.projectPointOntoPlane(\n        this._boundingPlanes[1],\n        point,\n        facePointScratch,\n      ),\n      this._planeVertices[1],\n      this._boundingPlanes[1],\n      this._edgeNormals[1],\n    );\n    return Cartesian3.distance(facePoint, point);\n  }\n\n  // Handles Case III\n  const skip =\n    selectedPlaneIndices[1] === 2 && selectedPlaneIndices[2] === 5 ? 0 : 1;\n\n  // Vertex is on top plane.\n  if (selectedPlaneIndices[0] === 0) {\n    return Cartesian3.distance(\n      point,\n      this._vertices[(selectedPlaneIndices[1] - 2 + skip) % 4],\n    );\n  }\n\n  // Vertex is on bottom plane.\n  return Cartesian3.distance(\n    point,\n    this._vertices[4 + ((selectedPlaneIndices[1] - 2 + skip) % 4)],\n  );\n};\n\nconst dScratch = new Cartesian3();\nconst pL0Scratch = new Cartesian3();\n/**\n * Finds point on a line segment closest to a given point.\n * @private\n */\nfunction closestPointLineSegment(p, l0, l1) {\n  const d = Cartesian3.subtract(l1, l0, dScratch);\n  const pL0 = Cartesian3.subtract(p, l0, pL0Scratch);\n  let t = Cartesian3.dot(d, pL0);\n\n  if (t <= 0) {\n    return l0;\n  }\n\n  const dMag = Cartesian3.dot(d, d);\n  if (t >= dMag) {\n    return l1;\n  }\n\n  t = t / dMag;\n  return new Cartesian3(\n    (1 - t) * l0.x + t * l1.x,\n    (1 - t) * l0.y + t * l1.y,\n    (1 - t) * l0.z + t * l1.z,\n  );\n}\n\nconst edgePlaneScratch = new Plane(Cartesian3.UNIT_X, 0.0);\n/**\n * Finds closes point on the polygon, created by the given vertices, from\n * a point. The test point and the polygon are all on the same plane.\n * @private\n */\nfunction closestPointPolygon(p, vertices, plane, edgeNormals) {\n  let minDistance = Number.MAX_VALUE;\n  let distance;\n  let closestPoint;\n  let closestPointOnEdge;\n\n  for (let i = 0; i < vertices.length; i++) {\n    const edgePlane = Plane.fromPointNormal(\n      vertices[i],\n      edgeNormals[i],\n      edgePlaneScratch,\n    );\n    const edgePlaneDistance = Plane.getPointDistance(edgePlane, p);\n\n    // Skip checking against the edge if the point is not in the half-space that the\n    // edgePlane's normal points towards i.e. if the edgePlane is facing away from the point.\n    if (edgePlaneDistance < 0) {\n      continue;\n    }\n\n    closestPointOnEdge = closestPointLineSegment(\n      p,\n      vertices[i],\n      vertices[(i + 1) % 4],\n    );\n\n    distance = Cartesian3.distance(p, closestPointOnEdge);\n    if (distance < minDistance) {\n      minDistance = distance;\n      closestPoint = closestPointOnEdge;\n    }\n  }\n\n  if (!defined(closestPoint)) {\n    return p;\n  }\n  return closestPoint;\n}\n\n/**\n * Determines which side of a plane this volume is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire volume is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire volume is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the volume\n *                      intersects the plane.\n */\nTileBoundingS2Cell.prototype.intersectPlane = function (plane) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"plane\", plane);\n  //>>includeEnd('debug');\n\n  let plusCount = 0;\n  let negCount = 0;\n  for (let i = 0; i < this._vertices.length; i++) {\n    const distanceToPlane =\n      Cartesian3.dot(plane.normal, this._vertices[i]) + plane.distance;\n    if (distanceToPlane < 0) {\n      negCount++;\n    } else {\n      plusCount++;\n    }\n  }\n\n  if (plusCount === this._vertices.length) {\n    return Intersect.INSIDE;\n  } else if (negCount === this._vertices.length) {\n    return Intersect.OUTSIDE;\n  }\n  return Intersect.INTERSECTING;\n};\n\n/**\n * Creates a debug primitive that shows the outline of the tile bounding\n * volume.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n */\nTileBoundingS2Cell.prototype.createDebugVolume = function (color) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"color\", color);\n  //>>includeEnd('debug');\n\n  const modelMatrix = new Matrix4.clone(Matrix4.IDENTITY);\n  const topPlanePolygon = new CoplanarPolygonOutlineGeometry({\n    polygonHierarchy: {\n      positions: this._planeVertices[0],\n    },\n  });\n  const topPlaneGeometry =\n    CoplanarPolygonOutlineGeometry.createGeometry(topPlanePolygon);\n  const topPlaneInstance = new GeometryInstance({\n    geometry: topPlaneGeometry,\n    id: \"outline\",\n    modelMatrix: modelMatrix,\n    attributes: {\n      color: ColorGeometryInstanceAttribute.fromColor(color),\n    },\n  });\n\n  const bottomPlanePolygon = new CoplanarPolygonOutlineGeometry({\n    polygonHierarchy: {\n      positions: this._planeVertices[1],\n    },\n  });\n  const bottomPlaneGeometry =\n    CoplanarPolygonOutlineGeometry.createGeometry(bottomPlanePolygon);\n  const bottomPlaneInstance = new GeometryInstance({\n    geometry: bottomPlaneGeometry,\n    id: \"outline\",\n    modelMatrix: modelMatrix,\n    attributes: {\n      color: ColorGeometryInstanceAttribute.fromColor(color),\n    },\n  });\n\n  const sideInstances = [];\n  for (let i = 0; i < 4; i++) {\n    const sidePlanePolygon = new CoplanarPolygonOutlineGeometry({\n      polygonHierarchy: {\n        positions: this._planeVertices[2 + i],\n      },\n    });\n    const sidePlaneGeometry =\n      CoplanarPolygonOutlineGeometry.createGeometry(sidePlanePolygon);\n    sideInstances[i] = new GeometryInstance({\n      geometry: sidePlaneGeometry,\n      id: \"outline\",\n      modelMatrix: modelMatrix,\n      attributes: {\n        color: ColorGeometryInstanceAttribute.fromColor(color),\n      },\n    });\n  }\n\n  return new Primitive({\n    geometryInstances: [\n      sideInstances[0],\n      sideInstances[1],\n      sideInstances[2],\n      sideInstances[3],\n      bottomPlaneInstance,\n      topPlaneInstance,\n    ],\n    appearance: new PerInstanceColorAppearance({\n      translucent: false,\n      flat: true,\n    }),\n    asynchronous: false,\n  });\n};\n\nexport default TileBoundingS2Cell;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport SphereOutlineGeometry from \"../Core/SphereOutlineGeometry.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * A tile bounding volume specified as a sphere.\n * @alias TileBoundingSphere\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere.\n * @param {number} [radius=0.0] The radius of the bounding sphere.\n *\n * @private\n */\nfunction TileBoundingSphere(center, radius) {\n  if (radius === 0) {\n    radius = CesiumMath.EPSILON7;\n  }\n  this._boundingSphere = new BoundingSphere(center, radius);\n}\n\nObject.defineProperties(TileBoundingSphere.prototype, {\n  /**\n   * The center of the bounding sphere\n   *\n   * @memberof TileBoundingSphere.prototype\n   *\n   * @type {Cartesian3}\n   * @readonly\n   */\n  center: {\n    get: function () {\n      return this._boundingSphere.center;\n    },\n  },\n\n  /**\n   * The radius of the bounding sphere\n   *\n   * @memberof TileBoundingSphere.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  radius: {\n    get: function () {\n      return this._boundingSphere.radius;\n    },\n  },\n\n  /**\n   * The underlying bounding volume\n   *\n   * @memberof TileBoundingSphere.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  boundingVolume: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n  /**\n   * The underlying bounding sphere\n   *\n   * @memberof TileBoundingSphere.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n});\n\n/**\n * Computes the distance between this bounding sphere and the camera attached to frameState.\n *\n * @param {FrameState} frameState The frameState to which the camera is attached.\n * @returns {number} The distance between the camera and the bounding sphere in meters. Returns 0 if the camera is inside the bounding volume.\n *\n */\nTileBoundingSphere.prototype.distanceToCamera = function (frameState) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"frameState\", frameState);\n  //>>includeEnd('debug');\n  const boundingSphere = this._boundingSphere;\n  return Math.max(\n    0.0,\n    Cartesian3.distance(boundingSphere.center, frameState.camera.positionWC) -\n      boundingSphere.radius,\n  );\n};\n\n/**\n * Determines which side of a plane this sphere is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\n *                      intersects the plane.\n */\nTileBoundingSphere.prototype.intersectPlane = function (plane) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"plane\", plane);\n  //>>includeEnd('debug');\n  return BoundingSphere.intersectPlane(this._boundingSphere, plane);\n};\n\n/**\n * Update the bounding sphere after the tile is transformed.\n *\n * @param {Cartesian3} center The center of the bounding sphere.\n * @param {number} radius The radius of the bounding sphere.\n */\nTileBoundingSphere.prototype.update = function (center, radius) {\n  Cartesian3.clone(center, this._boundingSphere.center);\n  this._boundingSphere.radius = radius;\n};\n\n/**\n * Creates a debug primitive that shows the outline of the sphere.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n */\nTileBoundingSphere.prototype.createDebugVolume = function (color) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"color\", color);\n  //>>includeEnd('debug');\n  const geometry = new SphereOutlineGeometry({\n    radius: this.radius,\n  });\n  const modelMatrix = Matrix4.fromTranslation(\n    this.center,\n    new Matrix4.clone(Matrix4.IDENTITY),\n  );\n  const instance = new GeometryInstance({\n    geometry: geometry,\n    id: \"outline\",\n    modelMatrix: modelMatrix,\n    attributes: {\n      color: ColorGeometryInstanceAttribute.fromColor(color),\n    },\n  });\n\n  return new Primitive({\n    geometryInstances: instance,\n    appearance: new PerInstanceColorAppearance({\n      translucent: false,\n      flat: true,\n    }),\n    asynchronous: false,\n  });\n};\nexport default TileBoundingSphere;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Defines a bounding volume for a tile. This type describes an interface\n * and is not intended to be instantiated directly.\n *\n * @alias TileBoundingVolume\n * @constructor\n *\n * @see TileBoundingRegion\n * @see TileBoundingSphere\n * @see TileOrientedBoundingBox\n *\n * @private\n */\nfunction TileBoundingVolume() {}\n\n/**\n * The underlying bounding volume.\n *\n * @type {object}\n * @readonly\n */\nTileBoundingVolume.prototype.boundingVolume = undefined;\n\n/**\n * The underlying bounding sphere.\n *\n * @type {BoundingSphere}\n * @readonly\n */\nTileBoundingVolume.prototype.boundingSphere = undefined;\n\n/**\n * Calculates the distance between the tile and the camera.\n *\n * @param {FrameState} frameState The frame state.\n * @return {number} The distance between the tile and the camera, in meters.\n *                  Returns 0.0 if the camera is inside the tile.\n */\nTileBoundingVolume.prototype.distanceToCamera = function (frameState) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Determines which side of a plane this volume is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire volume is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire volume is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the volume\n *                      intersects the plane.\n */\nTileBoundingVolume.prototype.intersectPlane = function (plane) {\n  DeveloperError.throwInstantiationError();\n};\n\n/**\n * Creates a debug primitive that shows the outline of the tile bounding\n * volume.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n */\nTileBoundingVolume.prototype.createDebugVolume = function (color) {\n  DeveloperError.throwInstantiationError();\n};\nexport default TileBoundingVolume;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\n\n/**\n * @typedef {object} TileCoordinatesImageryProvider.ConstructorOptions\n *\n * Initialization options for the TileCoordinatesImageryProvider constructor\n *\n * @property {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme for which to draw tiles.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If the tilingScheme is specified,\n *                    this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n *                    parameter is specified, the WGS84 ellipsoid is used.\n * @property {Color} [color=Color.YELLOW] The color to draw the tile box and label.\n * @property {number} [tileWidth=256] The width of the tile for level-of-detail selection purposes.\n * @property {number} [tileHeight=256] The height of the tile for level-of-detail selection purposes.\n */\n\n/**\n * An {@link ImageryProvider} that draws a box around every rendered tile in the tiling scheme, and draws\n * a label inside it indicating the X, Y, Level coordinates of the tile.  This is mostly useful for\n * debugging terrain and imagery rendering problems.\n *\n * @alias TileCoordinatesImageryProvider\n * @constructor\n *\n * @param {TileCoordinatesImageryProvider.ConstructorOptions} [options] Object describing initialization options\n */\nfunction TileCoordinatesImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._tilingScheme = defined(options.tilingScheme)\n    ? options.tilingScheme\n    : new GeographicTilingScheme({ ellipsoid: options.ellipsoid });\n  this._color = options.color ?? Color.YELLOW;\n  this._errorEvent = new Event();\n  this._tileWidth = options.tileWidth ?? 256;\n  this._tileHeight = options.tileHeight ?? 256;\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n}\n\nObject.defineProperties(TileCoordinatesImageryProvider.prototype, {\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._tilingScheme.rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  Setting this property to false reduces memory usage\n   * and texture upload time.\n   * @memberof TileCoordinatesImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return true;\n    },\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nTileCoordinatesImageryProvider.prototype.getTileCredits = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<HTMLCanvasElement>} The resolved image as a Canvas DOM object.\n */\nTileCoordinatesImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = 256;\n  canvas.height = 256;\n  const context = canvas.getContext(\"2d\");\n\n  const cssColor = this._color.toCssColorString();\n\n  context.strokeStyle = cssColor;\n  context.lineWidth = 2;\n  context.strokeRect(1, 1, 255, 255);\n\n  context.font = \"bold 25px Arial\";\n  context.textAlign = \"center\";\n  context.fillStyle = cssColor;\n  context.fillText(`L: ${level}`, 124, 86);\n  context.fillText(`X: ${x}`, 124, 136);\n  context.fillText(`Y: ${y}`, 124, 186);\n\n  return Promise.resolve(canvas);\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nTileCoordinatesImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\nexport default TileCoordinatesImageryProvider;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * A policy for discarding tile images according to some criteria.  This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias TileDiscardPolicy\n * @constructor\n *\n * @see DiscardMissingTileImagePolicy\n * @see NeverTileDiscardPolicy\n */\nfunction TileDiscardPolicy(options) {\n  DeveloperError.throwInstantiationError();\n}\n\n/**\n * Determines if the discard policy is ready to process images.\n * @function\n *\n * @returns {boolean} True if the discard policy is ready to process images; otherwise, false.\n */\nTileDiscardPolicy.prototype.isReady = DeveloperError.throwInstantiationError;\n\n/**\n * Given a tile image, decide whether to discard that image.\n * @function\n *\n * @param {HTMLImageElement} image An image to test.\n * @returns {boolean} True if the image should be discarded; otherwise, false.\n */\nTileDiscardPolicy.prototype.shouldDiscardImage =\n  DeveloperError.throwInstantiationError;\nexport default TileDiscardPolicy;\n","import defined from \"../Core/defined.js\";\nimport ImageryState from \"./ImageryState.js\";\n\n/**\n * The assocation between a terrain tile and an imagery tile.\n *\n * @alias TileImagery\n * @private\n *\n * @param {Imagery} imagery The imagery tile.\n * @param {Cartesian4} textureCoordinateRectangle The texture rectangle of the tile that is covered\n *        by the imagery, where X=west, Y=south, Z=east, W=north.\n * @param {boolean} useWebMercatorT true to use the Web Mercator texture coordinates for this imagery tile.\n */\nfunction TileImagery(imagery, textureCoordinateRectangle, useWebMercatorT) {\n  this.readyImagery = undefined;\n  this.loadingImagery = imagery;\n  this.textureCoordinateRectangle = textureCoordinateRectangle;\n  this.textureTranslationAndScale = undefined;\n  this.useWebMercatorT = useWebMercatorT;\n}\n\n/**\n * Frees the resources held by this instance.\n */\nTileImagery.prototype.freeResources = function () {\n  if (defined(this.readyImagery)) {\n    this.readyImagery.releaseReference();\n  }\n\n  if (defined(this.loadingImagery)) {\n    this.loadingImagery.releaseReference();\n  }\n};\n\n/**\n * Processes the load state machine for this instance.\n *\n * @param {Tile} tile The tile to which this instance belongs.\n * @param {FrameState} frameState The frameState.\n * @param {boolean} skipLoading True to skip loading, e.g. new requests, creating textures. This function will\n *                  still synchronously process imagery that's already mostly ready to go, e.g. use textures\n *                  already loaded on ancestor tiles.\n * @returns {boolean} True if this instance is done loading; otherwise, false.\n */\nTileImagery.prototype.processStateMachine = function (\n  tile,\n  frameState,\n  skipLoading,\n) {\n  const loadingImagery = this.loadingImagery;\n  const imageryLayer = loadingImagery.imageryLayer;\n\n  loadingImagery.processStateMachine(\n    frameState,\n    !this.useWebMercatorT,\n    skipLoading,\n  );\n\n  if (loadingImagery.state === ImageryState.READY) {\n    if (defined(this.readyImagery)) {\n      this.readyImagery.releaseReference();\n    }\n    this.readyImagery = this.loadingImagery;\n    this.loadingImagery = undefined;\n    this.textureTranslationAndScale =\n      imageryLayer._calculateTextureTranslationAndScale(tile, this);\n    return true; // done loading\n  }\n\n  // Find some ancestor imagery we can use while this imagery is still loading.\n  let ancestor = loadingImagery.parent;\n  let closestAncestorThatNeedsLoading;\n  while (\n    defined(ancestor) &&\n    (ancestor.state !== ImageryState.READY ||\n      (!this.useWebMercatorT && !defined(ancestor.texture)))\n  ) {\n    if (\n      ancestor.state !== ImageryState.FAILED &&\n      ancestor.state !== ImageryState.INVALID\n    ) {\n      // ancestor is still loading\n      closestAncestorThatNeedsLoading =\n        closestAncestorThatNeedsLoading || ancestor;\n    }\n    ancestor = ancestor.parent;\n  }\n\n  if (this.readyImagery !== ancestor) {\n    if (defined(this.readyImagery)) {\n      this.readyImagery.releaseReference();\n    }\n\n    this.readyImagery = ancestor;\n\n    if (defined(ancestor)) {\n      ancestor.addReference();\n      this.textureTranslationAndScale =\n        imageryLayer._calculateTextureTranslationAndScale(tile, this);\n    }\n  }\n\n  if (\n    loadingImagery.state === ImageryState.FAILED ||\n    loadingImagery.state === ImageryState.INVALID\n  ) {\n    // The imagery tile is failed or invalid, so we'd like to use an ancestor instead.\n    if (defined(closestAncestorThatNeedsLoading)) {\n      // Push the ancestor's load process along a bit.  This is necessary because some ancestor imagery\n      // tiles may not be attached directly to a terrain tile.  Such tiles will never load if\n      // we don't do it here.\n      closestAncestorThatNeedsLoading.processStateMachine(\n        frameState,\n        !this.useWebMercatorT,\n        skipLoading,\n      );\n      return false; // not done loading\n    }\n    // This imagery tile is failed or invalid, and we have the \"best available\" substitute.\n    return true; // done loading\n  }\n\n  return false; // not done loading\n};\nexport default TileImagery;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RequestErrorEvent from \"../Core/RequestErrorEvent.js\";\nimport Resource from \"../Core/Resource.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport TileProviderError from \"../Core/TileProviderError.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\n/**\n * @typedef {object} TileMapServiceImageryProvider.ConstructorOptions\n *\n * Initialization options for the TileMapServiceImageryProvider constructor\n *\n * @property {string} [fileExtension='png'] The file extension for images on the server.\n * @property {Credit|string} [credit=''] A credit for the data source, which is displayed on the canvas.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {TilingScheme} [tilingScheme] The tiling scheme specifying how the ellipsoidal\n * surface is broken into tiles.  If this parameter is not provided, a {@link WebMercatorTilingScheme}\n * is used.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If the tilingScheme is specified,\n *                    this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n *                    parameter is specified, the WGS84 ellipsoid is used.\n * @property {number} [tileWidth=256] Pixel width of image tiles.\n * @property {number} [tileHeight=256] Pixel height of image tiles.\n * @property {boolean} [flipXY] Older versions of gdal2tiles.py flipped X and Y values in tilemapresource.xml.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] A policy for discarding tile images according to some criteria\n * Specifying this option will do the same, allowing for loading of these incorrect tilesets.\n */\n\n/**\n * <div class=\"notice\">\n * To construct a TileMapServiceImageryProvider, call {@link TileMapServiceImageryProvider.fromUrl}. Do not call the constructor directly.\n * </div>\n *\n * An imagery provider that provides tiled imagery as generated by\n * {@link http://www.maptiler.org/|MapTiler}, {@link http://www.klokan.cz/projects/gdal2tiles/|GDAL2Tiles}, etc.\n *\n * @alias TileMapServiceImageryProvider\n * @constructor\n * @extends UrlTemplateImageryProvider\n *\n * @param {TileMapServiceImageryProvider.ConstructorOptions} [options] Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n * @example\n * const tms = await Cesium.TileMapServiceImageryProvider.fromUrl(\n *    \"../images/cesium_maptiler/Cesium_Logo_Color\", {\n *      fileExtension: 'png',\n *      maximumLevel: 4,\n *      rectangle: new Cesium.Rectangle(\n *        Cesium.Math.toRadians(-120.0),\n *        Cesium.Math.toRadians(20.0),\n *        Cesium.Math.toRadians(-60.0),\n *        Cesium.Math.toRadians(40.0))\n * });\n */\nfunction TileMapServiceImageryProvider(options) {\n  UrlTemplateImageryProvider.call(this, options);\n}\n\nTileMapServiceImageryProvider._requestMetadata = async function (\n  options,\n  tmsResource,\n  xmlResource,\n  provider,\n) {\n  // Try to load remaining parameters from XML\n  try {\n    const xml = await xmlResource.fetchXML();\n    return TileMapServiceImageryProvider._metadataSuccess(\n      xml,\n      options,\n      tmsResource,\n      xmlResource,\n      provider,\n    );\n  } catch (e) {\n    if (e instanceof RequestErrorEvent) {\n      return TileMapServiceImageryProvider._metadataFailure(\n        options,\n        tmsResource,\n      );\n    }\n\n    throw e;\n  }\n};\n/**\n * Creates a TileMapServiceImageryProvider from the specified url.\n *\n * @param {Resource|string} url Path to image tiles on server.\n * @param {TileMapServiceImageryProvider.ConstructorOptions} [options] Object describing initialization options.\n * @returns {Promise<TileMapServiceImageryProvider>} A promise that resolves to the created TileMapServiceImageryProvider.\n *\n * @example\n * const tms = await Cesium.TileMapServiceImageryProvider.fromUrl(\n *    '../images/cesium_maptiler/Cesium_Logo_Color', {\n *      fileExtension: 'png',\n *      maximumLevel: 4,\n *      rectangle: new Cesium.Rectangle(\n *        Cesium.Math.toRadians(-120.0),\n *        Cesium.Math.toRadians(20.0),\n *        Cesium.Math.toRadians(-60.0),\n *        Cesium.Math.toRadians(40.0))\n * });\n *\n * @exception {RuntimeError} Unable to find expected tilesets or bbox attributes in tilemapresource.xml\n * @exception {RuntimeError} tilemapresource.xml specifies an unsupported profile attribute\n */\nTileMapServiceImageryProvider.fromUrl = async function (url, options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"url\", url);\n  //>>includeEnd('debug');\n\n  const resource = Resource.createIfNeeded(url);\n  resource.appendForwardSlash();\n\n  const tmsResource = resource;\n  const xmlResource = resource.getDerivedResource({\n    url: \"tilemapresource.xml\",\n  });\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const metadata = await TileMapServiceImageryProvider._requestMetadata(\n    options,\n    tmsResource,\n    xmlResource,\n  );\n\n  return new TileMapServiceImageryProvider(metadata);\n};\n\nif (defined(Object.create)) {\n  TileMapServiceImageryProvider.prototype = Object.create(\n    UrlTemplateImageryProvider.prototype,\n  );\n  TileMapServiceImageryProvider.prototype.constructor =\n    TileMapServiceImageryProvider;\n}\n\n/**\n * Mutates the properties of a given rectangle so it does not extend outside of the given tiling scheme's rectangle\n * @private\n */\nfunction confineRectangleToTilingScheme(rectangle, tilingScheme) {\n  if (rectangle.west < tilingScheme.rectangle.west) {\n    rectangle.west = tilingScheme.rectangle.west;\n  }\n  if (rectangle.east > tilingScheme.rectangle.east) {\n    rectangle.east = tilingScheme.rectangle.east;\n  }\n  if (rectangle.south < tilingScheme.rectangle.south) {\n    rectangle.south = tilingScheme.rectangle.south;\n  }\n  if (rectangle.north > tilingScheme.rectangle.north) {\n    rectangle.north = tilingScheme.rectangle.north;\n  }\n  return rectangle;\n}\n\nfunction calculateSafeMinimumDetailLevel(\n  tilingScheme,\n  rectangle,\n  minimumLevel,\n) {\n  // Check the number of tiles at the minimum level.  If it's more than four,\n  // try requesting the lower levels anyway, because starting at the higher minimum\n  // level will cause too many tiles to be downloaded and rendered.\n  const swTile = tilingScheme.positionToTileXY(\n    Rectangle.southwest(rectangle),\n    minimumLevel,\n  );\n  const neTile = tilingScheme.positionToTileXY(\n    Rectangle.northeast(rectangle),\n    minimumLevel,\n  );\n  const tileCount =\n    (Math.abs(neTile.x - swTile.x) + 1) * (Math.abs(neTile.y - swTile.y) + 1);\n  if (tileCount > 4) {\n    return 0;\n  }\n  return minimumLevel;\n}\n\n/**\n * Parses the results of a successful xml request\n * @private\n *\n * @param {object} xml\n * @param {TileMapServiceImageryProvider.ConstructorOptions} options\n * @param {Resource} tmsResource\n * @param {Resource} xmlResource\n * @returns {UrlTemplateImageryProvider.ConstructorOptions}\n */\nTileMapServiceImageryProvider._metadataSuccess = function (\n  xml,\n  options,\n  tmsResource,\n  xmlResource,\n  provider,\n) {\n  const tileFormatRegex = /tileformat/i;\n  const tileSetRegex = /tileset/i;\n  const tileSetsRegex = /tilesets/i;\n  const bboxRegex = /boundingbox/i;\n  let format, bbox, tilesets;\n  const tilesetsList = []; //list of TileSets\n\n  // Allowing options properties (already copied to that) to override XML values\n\n  // Iterate XML Document nodes for properties\n  const nodeList = xml.childNodes[0].childNodes;\n  for (let i = 0; i < nodeList.length; i++) {\n    if (tileFormatRegex.test(nodeList.item(i).nodeName)) {\n      format = nodeList.item(i);\n    } else if (tileSetsRegex.test(nodeList.item(i).nodeName)) {\n      tilesets = nodeList.item(i); // Node list of TileSets\n      const tileSetNodes = nodeList.item(i).childNodes;\n      // Iterate the nodes to find all TileSets\n      for (let j = 0; j < tileSetNodes.length; j++) {\n        if (tileSetRegex.test(tileSetNodes.item(j).nodeName)) {\n          // Add them to tilesets list\n          tilesetsList.push(tileSetNodes.item(j));\n        }\n      }\n    } else if (bboxRegex.test(nodeList.item(i).nodeName)) {\n      bbox = nodeList.item(i);\n    }\n  }\n\n  let message;\n  if (!defined(tilesets) || !defined(bbox)) {\n    message = `Unable to find expected tilesets or bbox attributes in ${xmlResource.url}.`;\n    if (defined(provider)) {\n      TileProviderError.reportError(\n        undefined,\n        provider,\n        provider.errorEvent,\n        message,\n      );\n    }\n\n    throw new RuntimeError(message);\n  }\n\n  const fileExtension =\n    options.fileExtension ?? format.getAttribute(\"extension\");\n  const tileWidth =\n    options.tileWidth ?? parseInt(format.getAttribute(\"width\"), 10);\n  const tileHeight =\n    options.tileHeight ?? parseInt(format.getAttribute(\"height\"), 10);\n  let minimumLevel =\n    options.minimumLevel ?? parseInt(tilesetsList[0].getAttribute(\"order\"), 10);\n  const maximumLevel =\n    options.maximumLevel ??\n    parseInt(tilesetsList[tilesetsList.length - 1].getAttribute(\"order\"), 10);\n  const tilingSchemeName = tilesets.getAttribute(\"profile\");\n  let tilingScheme = options.tilingScheme;\n\n  if (!defined(tilingScheme)) {\n    if (\n      tilingSchemeName === \"geodetic\" ||\n      tilingSchemeName === \"global-geodetic\"\n    ) {\n      tilingScheme = new GeographicTilingScheme({\n        ellipsoid: options.ellipsoid,\n      });\n    } else if (\n      tilingSchemeName === \"mercator\" ||\n      tilingSchemeName === \"global-mercator\"\n    ) {\n      tilingScheme = new WebMercatorTilingScheme({\n        ellipsoid: options.ellipsoid,\n      });\n    } else {\n      message = `${xmlResource.url} specifies an unsupported profile attribute, ${tilingSchemeName}.`;\n      if (defined(provider)) {\n        TileProviderError.reportError(\n          undefined,\n          provider,\n          provider.errorEvent,\n          message,\n        );\n      }\n\n      throw new RuntimeError(message);\n    }\n  }\n\n  // rectangle handling\n  let rectangle = Rectangle.clone(options.rectangle);\n\n  if (!defined(rectangle)) {\n    let sw;\n    let ne;\n    let swXY;\n    let neXY;\n\n    // In older versions of gdal x and y values were flipped, which is why we check for an option to flip\n    // the values here as well. Unfortunately there is no way to autodetect whether flipping is needed.\n    const flipXY = options.flipXY ?? false;\n    if (flipXY) {\n      swXY = new Cartesian2(\n        parseFloat(bbox.getAttribute(\"miny\")),\n        parseFloat(bbox.getAttribute(\"minx\")),\n      );\n      neXY = new Cartesian2(\n        parseFloat(bbox.getAttribute(\"maxy\")),\n        parseFloat(bbox.getAttribute(\"maxx\")),\n      );\n    } else {\n      swXY = new Cartesian2(\n        parseFloat(bbox.getAttribute(\"minx\")),\n        parseFloat(bbox.getAttribute(\"miny\")),\n      );\n      neXY = new Cartesian2(\n        parseFloat(bbox.getAttribute(\"maxx\")),\n        parseFloat(bbox.getAttribute(\"maxy\")),\n      );\n    }\n\n    // Determine based on the profile attribute if this tileset was generated by gdal2tiles.py, which\n    // uses 'mercator' and 'geodetic' profiles, or by a tool compliant with the TMS standard, which is\n    // 'global-mercator' and 'global-geodetic' profiles. In the gdal2Tiles case, X and Y are always in\n    // geodetic degrees.\n    const isGdal2tiles =\n      tilingSchemeName === \"geodetic\" || tilingSchemeName === \"mercator\";\n    if (\n      tilingScheme.projection instanceof GeographicProjection ||\n      isGdal2tiles\n    ) {\n      sw = Cartographic.fromDegrees(swXY.x, swXY.y);\n      ne = Cartographic.fromDegrees(neXY.x, neXY.y);\n    } else {\n      const projection = tilingScheme.projection;\n      sw = projection.unproject(swXY);\n      ne = projection.unproject(neXY);\n    }\n\n    rectangle = new Rectangle(\n      sw.longitude,\n      sw.latitude,\n      ne.longitude,\n      ne.latitude,\n    );\n  }\n\n  // The rectangle must not be outside the bounds allowed by the tiling scheme.\n  rectangle = confineRectangleToTilingScheme(rectangle, tilingScheme);\n  // clamp our minimum detail level to something that isn't going to request a ridiculous number of tiles\n  minimumLevel = calculateSafeMinimumDetailLevel(\n    tilingScheme,\n    rectangle,\n    minimumLevel,\n  );\n\n  const templateResource = tmsResource.getDerivedResource({\n    url: `{z}/{x}/{reverseY}.${fileExtension}`,\n  });\n\n  return {\n    url: templateResource,\n    tilingScheme: tilingScheme,\n    rectangle: rectangle,\n    tileWidth: tileWidth,\n    tileHeight: tileHeight,\n    minimumLevel: minimumLevel,\n    maximumLevel: maximumLevel,\n    tileDiscardPolicy: options.tileDiscardPolicy,\n    credit: options.credit,\n  };\n};\n\n/**\n * Handle xml request failure by providing the default values\n * @private\n *\n * @param {TileMapServiceImageryProvider.ConstructorOptions} options\n * @param {Resource} tmsResource\n * @returns {UrlTemplateImageryProvider.ConstructorOptions}\n */\nTileMapServiceImageryProvider._metadataFailure = function (\n  options,\n  tmsResource,\n) {\n  // Can't load XML, still allow options and defaults\n  const fileExtension = options.fileExtension ?? \"png\";\n  const tileWidth = options.tileWidth ?? 256;\n  const tileHeight = options.tileHeight ?? 256;\n  const maximumLevel = options.maximumLevel;\n  const tilingScheme = defined(options.tilingScheme)\n    ? options.tilingScheme\n    : new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid });\n\n  let rectangle = options.rectangle ?? tilingScheme.rectangle;\n  // The rectangle must not be outside the bounds allowed by the tiling scheme.\n  rectangle = confineRectangleToTilingScheme(rectangle, tilingScheme);\n\n  // make sure we use a safe minimum detail level, so we don't request a ridiculous number of tiles\n  const minimumLevel = calculateSafeMinimumDetailLevel(\n    tilingScheme,\n    rectangle,\n    options.minimumLevel,\n  );\n\n  const templateResource = tmsResource.getDerivedResource({\n    url: `{z}/{x}/{reverseY}.${fileExtension}`,\n  });\n\n  return {\n    url: templateResource,\n    tilingScheme: tilingScheme,\n    rectangle: rectangle,\n    tileWidth: tileWidth,\n    tileHeight: tileHeight,\n    minimumLevel: minimumLevel,\n    maximumLevel: maximumLevel,\n    tileDiscardPolicy: options.tileDiscardPolicy,\n    credit: options.credit,\n  };\n};\n\nexport default TileMapServiceImageryProvider;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport MetadataEntity from \"./MetadataEntity.js\";\n\n/**\n * Metadata about a 3D Tile. This represents the tile metadata JSON (3D Tiles 1.1)\n * or the <code>3DTILES_metadata</code> extension on a single {@link Cesium3DTile}\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.tile Either the tile metadata JSON (3D Tiles 1.1), or the extension JSON attached to the tile.\n * @param {MetadataClass} options.class The class that the tile metadata conforms to.\n *\n * @alias TileMetadata\n * @constructor\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction TileMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const tile = options.tile;\n  const metadataClass = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.tile\", tile);\n  Check.typeOf.object(\"options.class\", metadataClass);\n  //>>includeEnd('debug');\n\n  this._class = metadataClass;\n  this._properties = tile.properties;\n  this._extensions = tile.extensions;\n  this._extras = tile.extras;\n}\n\nObject.defineProperties(TileMetadata.prototype, {\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof TileMetadata.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof TileMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof TileMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Returns whether the tile has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the tile has this property.\n * @private\n */\nTileMetadata.prototype.hasProperty = function (propertyId) {\n  return MetadataEntity.hasProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Returns whether the tile has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the tile has a property with the given semantic.\n * @private\n */\nTileMetadata.prototype.hasPropertyBySemantic = function (semantic) {\n  return MetadataEntity.hasPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nTileMetadata.prototype.getPropertyIds = function (results) {\n  return MetadataEntity.getPropertyIds(this._properties, this._class, results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the tile does not have this property.\n * @private\n */\nTileMetadata.prototype.getProperty = function (propertyId) {\n  return MetadataEntity.getProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nTileMetadata.prototype.setProperty = function (propertyId, value) {\n  return MetadataEntity.setProperty(\n    propertyId,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the tile does not have this semantic.\n * @private\n */\nTileMetadata.prototype.getPropertyBySemantic = function (semantic) {\n  return MetadataEntity.getPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nTileMetadata.prototype.setPropertyBySemantic = function (semantic, value) {\n  return MetadataEntity.setPropertyBySemantic(\n    semantic,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\nexport default TileMetadata;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\nconst scratchU = new Cartesian3();\nconst scratchV = new Cartesian3();\nconst scratchW = new Cartesian3();\nconst scratchCartesian = new Cartesian3();\n\nfunction computeMissingVector(a, b, result) {\n  result = Cartesian3.cross(a, b, result);\n  const magnitude = Cartesian3.magnitude(result);\n  return Cartesian3.multiplyByScalar(\n    result,\n    CesiumMath.EPSILON7 / magnitude,\n    result,\n  );\n}\n\nfunction findOrthogonalVector(a, result) {\n  const temp = Cartesian3.normalize(a, scratchCartesian);\n  const b = Cartesian3.equalsEpsilon(\n    temp,\n    Cartesian3.UNIT_X,\n    CesiumMath.EPSILON6,\n  )\n    ? Cartesian3.UNIT_Y\n    : Cartesian3.UNIT_X;\n  return computeMissingVector(a, b, result);\n}\n\nfunction checkHalfAxes(halfAxes) {\n  let u = Matrix3.getColumn(halfAxes, 0, scratchU);\n  let v = Matrix3.getColumn(halfAxes, 1, scratchV);\n  let w = Matrix3.getColumn(halfAxes, 2, scratchW);\n\n  const uZero = Cartesian3.equals(u, Cartesian3.ZERO);\n  const vZero = Cartesian3.equals(v, Cartesian3.ZERO);\n  const wZero = Cartesian3.equals(w, Cartesian3.ZERO);\n\n  if (!uZero && !vZero && !wZero) {\n    return halfAxes;\n  }\n  if (uZero && vZero && wZero) {\n    halfAxes[0] = CesiumMath.EPSILON7;\n    halfAxes[4] = CesiumMath.EPSILON7;\n    halfAxes[8] = CesiumMath.EPSILON7;\n    return halfAxes;\n  }\n  if (uZero && !vZero && !wZero) {\n    u = computeMissingVector(v, w, u);\n  } else if (!uZero && vZero && !wZero) {\n    v = computeMissingVector(u, w, v);\n  } else if (!uZero && !vZero && wZero) {\n    w = computeMissingVector(v, u, w);\n  } else if (!uZero) {\n    v = findOrthogonalVector(u, v);\n    w = computeMissingVector(v, u, w);\n  } else if (!vZero) {\n    u = findOrthogonalVector(v, u);\n    w = computeMissingVector(v, u, w);\n  } else if (!wZero) {\n    u = findOrthogonalVector(w, u);\n    v = computeMissingVector(w, u, v);\n  }\n\n  Matrix3.setColumn(halfAxes, 0, u, halfAxes);\n  Matrix3.setColumn(halfAxes, 1, v, halfAxes);\n  Matrix3.setColumn(halfAxes, 2, w, halfAxes);\n\n  return halfAxes;\n}\n\n/**\n * A tile bounding volume specified as an oriented bounding box.\n * @alias TileOrientedBoundingBox\n * @constructor\n *\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the box.\n * @param {Matrix3} [halfAxes=Matrix3.ZERO] The three orthogonal half-axes of the bounding box.\n *                                          Equivalently, the transformation matrix, to rotate and scale a 2x2x2\n *                                          cube centered at the origin.\n *\n * @private\n */\nfunction TileOrientedBoundingBox(center, halfAxes) {\n  halfAxes = checkHalfAxes(halfAxes);\n  this._orientedBoundingBox = new OrientedBoundingBox(center, halfAxes);\n  this._boundingSphere = BoundingSphere.fromOrientedBoundingBox(\n    this._orientedBoundingBox,\n  );\n}\n\nObject.defineProperties(TileOrientedBoundingBox.prototype, {\n  /**\n   * The underlying bounding volume.\n   *\n   * @memberof TileOrientedBoundingBox.prototype\n   *\n   * @type {OrientedBoundingBox}\n   * @readonly\n   */\n  boundingVolume: {\n    get: function () {\n      return this._orientedBoundingBox;\n    },\n  },\n  /**\n   * The underlying bounding sphere.\n   *\n   * @memberof TileOrientedBoundingBox.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n});\n\n/**\n * Computes the distance between this bounding box and the camera attached to frameState.\n *\n * @param {FrameState} frameState The frameState to which the camera is attached.\n * @returns {number} The distance between the camera and the bounding box in meters. Returns 0 if the camera is inside the bounding volume.\n */\nTileOrientedBoundingBox.prototype.distanceToCamera = function (frameState) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"frameState\", frameState);\n  //>>includeEnd('debug');\n  return Math.sqrt(\n    this._orientedBoundingBox.distanceSquaredTo(frameState.camera.positionWC),\n  );\n};\n\n/**\n * Determines which side of a plane this box is located.\n *\n * @param {Plane} plane The plane to test against.\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\n *                      the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\n *                      on the opposite side, and {@link Intersect.INTERSECTING} if the box\n *                      intersects the plane.\n */\nTileOrientedBoundingBox.prototype.intersectPlane = function (plane) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"plane\", plane);\n  //>>includeEnd('debug');\n  return this._orientedBoundingBox.intersectPlane(plane);\n};\n\n/**\n * Update the bounding box after the tile is transformed.\n *\n * @param {Cartesian3} center The center of the box.\n * @param {Matrix3} halfAxes The three orthogonal half-axes of the bounding box.\n *                           Equivalently, the transformation matrix, to rotate and scale a 2x2x2\n *                           cube centered at the origin.\n */\nTileOrientedBoundingBox.prototype.update = function (center, halfAxes) {\n  Cartesian3.clone(center, this._orientedBoundingBox.center);\n  halfAxes = checkHalfAxes(halfAxes);\n  Matrix3.clone(halfAxes, this._orientedBoundingBox.halfAxes);\n  BoundingSphere.fromOrientedBoundingBox(\n    this._orientedBoundingBox,\n    this._boundingSphere,\n  );\n};\n\n/**\n * Creates a debug primitive that shows the outline of the box.\n *\n * @param {Color} color The desired color of the primitive's mesh\n * @return {Primitive}\n */\nTileOrientedBoundingBox.prototype.createDebugVolume = function (color) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"color\", color);\n  //>>includeEnd('debug');\n\n  const geometry = new BoxOutlineGeometry({\n    // Make a 2x2x2 cube\n    minimum: new Cartesian3(-1.0, -1.0, -1.0),\n    maximum: new Cartesian3(1.0, 1.0, 1.0),\n  });\n  const modelMatrix = Matrix4.fromRotationTranslation(\n    this.boundingVolume.halfAxes,\n    this.boundingVolume.center,\n  );\n  const instance = new GeometryInstance({\n    geometry: geometry,\n    id: \"outline\",\n    modelMatrix: modelMatrix,\n    attributes: {\n      color: ColorGeometryInstanceAttribute.fromColor(color),\n    },\n  });\n\n  return new Primitive({\n    geometryInstances: instance,\n    appearance: new PerInstanceColorAppearance({\n      translucent: false,\n      flat: true,\n    }),\n    asynchronous: false,\n  });\n};\nexport default TileOrientedBoundingBox;\n","import defined from \"../Core/defined.js\";\n\n/**\n * A priority queue of tiles to be replaced, if necessary, to make room for new tiles.  The queue\n * is implemented as a linked list.\n *\n * @alias TileReplacementQueue\n * @private\n */\nfunction TileReplacementQueue() {\n  this.head = undefined;\n  this.tail = undefined;\n  this.count = 0;\n  this._lastBeforeStartOfFrame = undefined;\n}\n\n/**\n * Marks the start of the render frame.  Tiles before (closer to the head) this tile in the\n * list were used last frame and must not be unloaded.\n */\nTileReplacementQueue.prototype.markStartOfRenderFrame = function () {\n  this._lastBeforeStartOfFrame = this.head;\n};\n\n/**\n * Reduces the size of the queue to a specified size by unloading the least-recently used\n * tiles.  Tiles that were used last frame will not be unloaded, even if that puts the number\n * of tiles above the specified maximum.\n *\n * @param {number} maximumTiles The maximum number of tiles in the queue.\n */\nTileReplacementQueue.prototype.trimTiles = function (maximumTiles) {\n  let tileToTrim = this.tail;\n  let keepTrimming = true;\n  while (\n    keepTrimming &&\n    defined(this._lastBeforeStartOfFrame) &&\n    this.count > maximumTiles &&\n    defined(tileToTrim)\n  ) {\n    // Stop trimming after we process the last tile not used in the\n    // current frame.\n    keepTrimming = tileToTrim !== this._lastBeforeStartOfFrame;\n\n    const previous = tileToTrim.replacementPrevious;\n\n    if (tileToTrim.eligibleForUnloading) {\n      tileToTrim.freeResources();\n      remove(this, tileToTrim);\n    }\n\n    tileToTrim = previous;\n  }\n};\n\nfunction remove(tileReplacementQueue, item) {\n  const previous = item.replacementPrevious;\n  const next = item.replacementNext;\n\n  if (item === tileReplacementQueue._lastBeforeStartOfFrame) {\n    tileReplacementQueue._lastBeforeStartOfFrame = next;\n  }\n\n  if (item === tileReplacementQueue.head) {\n    tileReplacementQueue.head = next;\n  } else {\n    previous.replacementNext = next;\n  }\n\n  if (item === tileReplacementQueue.tail) {\n    tileReplacementQueue.tail = previous;\n  } else {\n    next.replacementPrevious = previous;\n  }\n\n  item.replacementPrevious = undefined;\n  item.replacementNext = undefined;\n\n  --tileReplacementQueue.count;\n}\n\n/**\n * Marks a tile as rendered this frame and moves it before the first tile that was not rendered\n * this frame.\n *\n * @param {TileReplacementQueue} item The tile that was rendered.\n */\nTileReplacementQueue.prototype.markTileRendered = function (item) {\n  const head = this.head;\n  if (head === item) {\n    if (item === this._lastBeforeStartOfFrame) {\n      this._lastBeforeStartOfFrame = item.replacementNext;\n    }\n    return;\n  }\n\n  ++this.count;\n\n  if (!defined(head)) {\n    // no other tiles in the list\n    item.replacementPrevious = undefined;\n    item.replacementNext = undefined;\n    this.head = item;\n    this.tail = item;\n    return;\n  }\n\n  if (defined(item.replacementPrevious) || defined(item.replacementNext)) {\n    // tile already in the list, remove from its current location\n    remove(this, item);\n  }\n\n  item.replacementPrevious = undefined;\n  item.replacementNext = head;\n  head.replacementPrevious = item;\n\n  this.head = item;\n};\nexport default TileReplacementQueue;\n","/**\n * Indicates what happened the last time this tile was visited for selection.\n * @private\n */\nconst TileSelectionResult = {\n  /**\n   * There was no selection result, perhaps because the tile wasn't visited\n   * last frame.\n   */\n  NONE: 0,\n\n  /**\n   * This tile was deemed not visible and culled.\n   */\n  CULLED: 1,\n\n  /**\n   * The tile was selected for rendering.\n   */\n  RENDERED: 2,\n\n  /**\n   * This tile did not meet the required screen-space error and was refined.\n   */\n  REFINED: 3,\n\n  /**\n   * This tile was originally rendered, but it got kicked out of the render list\n   * in favor of an ancestor because it is not yet renderable.\n   */\n  RENDERED_AND_KICKED: 2 | 4,\n\n  /**\n   * This tile was originally refined, but its rendered descendants got kicked out of the\n   * render list in favor of an ancestor because it is not yet renderable.\n   */\n  REFINED_AND_KICKED: 3 | 4,\n\n  /**\n   * This tile was culled because it was not visible, but it still needs to be loaded\n   * and any heights on it need to be updated because the camera's position or the\n   * camera's reference frame's origin falls inside this tile. Loading this tile\n   * could affect the position of the camera if the camera is currently below\n   * terrain or if it is tracking an object whose height is referenced to terrain.\n   * And a change in the camera position may, in turn, affect what is culled.\n   */\n  CULLED_BUT_NEEDED: 1 | 8,\n\n  /**\n   * Determines if a selection result indicates that this tile or its descendants were\n   * kicked from the render list. In other words, if it is <code>RENDERED_AND_KICKED</code>\n   * or <code>REFINED_AND_KICKED</code>.\n   *\n   * @param {TileSelectionResult} value The selection result to test.\n   * @returns {boolean} true if the tile was kicked, no matter if it was originally rendered or refined.\n   */\n  wasKicked: function (value) {\n    return value >= TileSelectionResult.RENDERED_AND_KICKED;\n  },\n\n  /**\n   * Determines the original selection result prior to being kicked or CULLED_BUT_NEEDED.\n   * If the tile wasn't kicked or CULLED_BUT_NEEDED, the original value is returned.\n   * @param {TileSelectionResult} value The selection result.\n   * @returns {TileSelectionResult} The original selection result prior to kicking.\n   */\n  originalResult: function (value) {\n    return value & 3;\n  },\n\n  /**\n   * Converts this selection result to a kick.\n   * @param {TileSelectionResult} value The original selection result.\n   * @returns {TileSelectionResult} The kicked form of the selection result.\n   */\n  kick: function (value) {\n    return value | 4;\n  },\n};\nexport default TileSelectionResult;\n","/**\n * @private\n */\nconst TileState = {\n  START: 0,\n  LOADING: 1,\n  READY: 2,\n  UPSAMPLED_ONLY: 3,\n};\nexport default Object.freeze(TileState);\n","import destroyObject from \"../Core/destroyObject.js\";\n\n/**\n * Represents content for a tile in a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles} tileset whose\n * content points to another 3D Tiles tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Tileset3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Tileset3DTileContent(tileset, tile, resource) {\n  this._tileset = tileset;\n  this._tile = tile;\n  this._resource = resource;\n\n  this.featurePropertiesDirty = false;\n\n  this._metadata = undefined;\n  this._group = undefined;\n\n  this._ready = false;\n}\n\nObject.defineProperties(Tileset3DTileContent.prototype, {\n  featuresLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  pointsLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  trianglesLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  geometryByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  texturesByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  batchTableByteLength: {\n    get: function () {\n      return 0;\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Tileset3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  url: {\n    get: function () {\n      return this._resource.getUrlComponent(true);\n    },\n  },\n\n  batchTable: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n    set: function (value) {\n      this._metadata = value;\n    },\n  },\n\n  group: {\n    get: function () {\n      return this._group;\n    },\n    set: function (value) {\n      this._group = value;\n    },\n  },\n});\n\n/**\n * Creates an instance of Tileset3DTileContent from a parsed JSON object\n * @param {Cesium3DTileset} tileset\n * @param {Cesium3DTile} tile\n * @param {Resource} resource\n * @param {object} json\n * @returns {Tileset3DTileContent}\n */\nTileset3DTileContent.fromJson = function (tileset, tile, resource, json) {\n  const content = new Tileset3DTileContent(tileset, tile, resource);\n  content._tileset.loadTileset(content._resource, json, content._tile);\n  content._ready = true;\n\n  return content;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Tileset3DTileContent</code>\n * always returns <code>false</code> since a tile of this type does not have any features.\n */\nTileset3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return false;\n};\n\n/**\n * Part of the {@link Cesium3DTileContent} interface.  <code>Tileset3DTileContent</code>\n * always returns <code>undefined</code> since a tile of this type does not have any features.\n */\nTileset3DTileContent.prototype.getFeature = function (batchId) {\n  return undefined;\n};\n\nTileset3DTileContent.prototype.applyDebugSettings = function (\n  enabled,\n  color,\n) {};\n\nTileset3DTileContent.prototype.applyStyle = function (style) {};\n\nTileset3DTileContent.prototype.update = function (tileset, frameState) {};\n\nTileset3DTileContent.prototype.pick = function (ray, frameState, result) {\n  return undefined;\n};\n\nTileset3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nTileset3DTileContent.prototype.destroy = function () {\n  return destroyObject(this);\n};\nexport default Tileset3DTileContent;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport MetadataEntity from \"./MetadataEntity.js\";\n\n/**\n * Metadata about the tileset.\n * <p>\n * See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_metadata|3DTILES_metadata Extension} for 3D Tiles\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.tileset The tileset metadata JSON object.\n * @param {MetadataClass} options.class The class that tileset metadata conforms to.\n *\n * @alias TilesetMetadata\n * @constructor\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction TilesetMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const tileset = options.tileset;\n  const metadataClass = options.class;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.tileset\", tileset);\n  Check.typeOf.object(\"options.class\", metadataClass);\n  //>>includeEnd('debug');\n\n  const properties = defined(tileset.properties) ? tileset.properties : {};\n\n  this._class = metadataClass;\n  this._properties = properties;\n  this._extras = tileset.extras;\n  this._extensions = tileset.extensions;\n}\n\nObject.defineProperties(TilesetMetadata.prototype, {\n  /**\n   * The class that properties conform to.\n   *\n   * @memberof TilesetMetadata.prototype\n   * @type {MetadataClass}\n   * @readonly\n   * @private\n   */\n  class: {\n    get: function () {\n      return this._class;\n    },\n  },\n\n  /**\n   * Extra user-defined properties.\n   *\n   * @memberof TilesetMetadata.prototype\n   * @type {*}\n   * @readonly\n   * @private\n   */\n  extras: {\n    get: function () {\n      return this._extras;\n    },\n  },\n\n  /**\n   * An object containing extensions.\n   *\n   * @memberof TilesetMetadata.prototype\n   * @type {object}\n   * @readonly\n   * @private\n   */\n  extensions: {\n    get: function () {\n      return this._extensions;\n    },\n  },\n});\n\n/**\n * Returns whether the tileset has this property.\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {boolean} Whether the tileset has this property.\n * @private\n */\nTilesetMetadata.prototype.hasProperty = function (propertyId) {\n  return MetadataEntity.hasProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Returns whether the tileset has a property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {boolean} Whether the tileset has a property with the given semantic.\n * @private\n */\nTilesetMetadata.prototype.hasPropertyBySemantic = function (semantic) {\n  return MetadataEntity.hasPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns an array of property IDs.\n *\n * @param {string[]} [results] An array into which to store the results.\n * @returns {string[]} The property IDs.\n * @private\n */\nTilesetMetadata.prototype.getPropertyIds = function (results) {\n  return MetadataEntity.getPropertyIds(this._properties, this._class, results);\n};\n\n/**\n * Returns a copy of the value of the property with the given ID.\n * <p>\n * If the property is normalized the normalized value is returned.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the tileset does not have this property.\n * @private\n */\nTilesetMetadata.prototype.getProperty = function (propertyId) {\n  return MetadataEntity.getProperty(propertyId, this._properties, this._class);\n};\n\n/**\n * Sets the value of the property with the given ID.\n * <p>\n * If the property is normalized a normalized value must be provided to this function.\n * </p>\n *\n * @param {string} propertyId The case-sensitive ID of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nTilesetMetadata.prototype.setProperty = function (propertyId, value) {\n  return MetadataEntity.setProperty(\n    propertyId,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Returns a copy of the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the tileset does not have this semantic.\n * @private\n */\nTilesetMetadata.prototype.getPropertyBySemantic = function (semantic) {\n  return MetadataEntity.getPropertyBySemantic(\n    semantic,\n    this._properties,\n    this._class,\n  );\n};\n\n/**\n * Sets the value of the property with the given semantic.\n *\n * @param {string} semantic The case-sensitive semantic of the property.\n * @param {*} value The value of the property that will be copied.\n * @returns {boolean} <code>true</code> if the property was set, <code>false</code> otherwise.\n * @private\n */\nTilesetMetadata.prototype.setPropertyBySemantic = function (semantic, value) {\n  return MetadataEntity.setPropertyBySemantic(\n    semantic,\n    value,\n    this._properties,\n    this._class,\n  );\n};\n\nexport default TilesetMetadata;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Request from \"../Core/Request.js\";\nimport RequestType from \"../Core/RequestType.js\";\n\n/**\n * Provides functionality for ImageryProviders that have time dynamic imagery\n *\n * @alias TimeDynamicImagery\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Clock} options.clock A Clock instance that is used when determining the value for the time dimension. Required when <code>options.times</code> is specified.\n * @param {TimeIntervalCollection} options.times TimeIntervalCollection with its <code>data</code> property being an object containing time dynamic dimension and their values.\n * @param {Function} options.requestImageFunction A function that will request imagery tiles.\n * @param {Function} options.reloadFunction A function that will be called when all imagery tiles need to be reloaded.\n */\nfunction TimeDynamicImagery(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.clock\", options.clock);\n  Check.typeOf.object(\"options.times\", options.times);\n  Check.typeOf.func(\n    \"options.requestImageFunction\",\n    options.requestImageFunction,\n  );\n  Check.typeOf.func(\"options.reloadFunction\", options.reloadFunction);\n  //>>includeEnd('debug');\n\n  this._tileCache = {};\n  this._tilesRequestedForInterval = [];\n\n  const clock = (this._clock = options.clock);\n  this._times = options.times;\n  this._requestImageFunction = options.requestImageFunction;\n  this._reloadFunction = options.reloadFunction;\n  this._currentIntervalIndex = -1;\n\n  clock.onTick.addEventListener(this._clockOnTick, this);\n  this._clockOnTick(clock);\n}\n\nObject.defineProperties(TimeDynamicImagery.prototype, {\n  /**\n   * Gets or sets a clock that is used to get keep the time used for time dynamic parameters.\n   * @memberof TimeDynamicImagery.prototype\n   * @type {Clock}\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._clock !== value) {\n        this._clock = value;\n        this._clockOnTick(value);\n        this._reloadFunction();\n      }\n    },\n  },\n  /**\n   * Gets or sets a time interval collection.\n   * @memberof TimeDynamicImagery.prototype\n   * @type {TimeIntervalCollection}\n   */\n  times: {\n    get: function () {\n      return this._times;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(value)) {\n        throw new DeveloperError(\"value is required.\");\n      }\n      //>>includeEnd('debug');\n\n      if (this._times !== value) {\n        this._times = value;\n        this._clockOnTick(this._clock);\n        this._reloadFunction();\n      }\n    },\n  },\n  /**\n   * Gets the current interval.\n   * @memberof TimeDynamicImagery.prototype\n   * @type {TimeInterval}\n   */\n  currentInterval: {\n    get: function () {\n      return this._times.get(this._currentIntervalIndex);\n    },\n  },\n});\n\n/**\n * Gets the tile from the cache if its available.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise<HTMLImageElement>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if the tile is not in the cache.\n */\nTimeDynamicImagery.prototype.getFromCache = function (x, y, level, request) {\n  const key = getKey(x, y, level);\n  let result;\n  const cache = this._tileCache[this._currentIntervalIndex];\n  if (defined(cache) && defined(cache[key])) {\n    const item = cache[key];\n    result = item.promise.catch(function (e) {\n      // Set the correct state in case it was cancelled\n      request.state = item.request.state;\n      throw e;\n    });\n    delete cache[key];\n  }\n\n  return result;\n};\n\n/**\n * Checks if the next interval is approaching and will start preload the tile if necessary. Otherwise it will\n * just add the tile to a list to preload when we approach the next interval.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n */\nTimeDynamicImagery.prototype.checkApproachingInterval = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  const key = getKey(x, y, level);\n  const tilesRequestedForInterval = this._tilesRequestedForInterval;\n\n  // If we are approaching an interval, preload this tile in the next interval\n  const approachingInterval = getApproachingInterval(this);\n  const tile = {\n    key: key,\n    // Determines priority based on camera distance to the tile.\n    // Since the imagery regardless of time will be attached to the same tile we can just steal it.\n    priorityFunction: request.priorityFunction,\n  };\n  if (\n    !defined(approachingInterval) ||\n    !addToCache(this, tile, approachingInterval)\n  ) {\n    // Add to recent request list if we aren't approaching and interval or the request was throttled\n    tilesRequestedForInterval.push(tile);\n  }\n\n  // Don't let the tile list get out of hand\n  if (tilesRequestedForInterval.length >= 512) {\n    tilesRequestedForInterval.splice(0, 256);\n  }\n};\n\nTimeDynamicImagery.prototype._clockOnTick = function (clock) {\n  const time = clock.currentTime;\n  const times = this._times;\n  const index = times.indexOf(time);\n  const currentIntervalIndex = this._currentIntervalIndex;\n\n  if (index !== currentIntervalIndex) {\n    // Cancel all outstanding requests and clear out caches not from current time interval\n    const currentCache = this._tileCache[currentIntervalIndex];\n    for (const t in currentCache) {\n      if (currentCache.hasOwnProperty(t)) {\n        currentCache[t].request.cancel();\n      }\n    }\n    delete this._tileCache[currentIntervalIndex];\n    this._tilesRequestedForInterval = [];\n\n    this._currentIntervalIndex = index;\n    this._reloadFunction();\n\n    return;\n  }\n\n  const approachingInterval = getApproachingInterval(this);\n  if (defined(approachingInterval)) {\n    // Start loading recent tiles from end of this._tilesRequestedForInterval\n    //  We keep preloading until we hit a throttling limit.\n    const tilesRequested = this._tilesRequestedForInterval;\n    let success = true;\n    while (success) {\n      if (tilesRequested.length === 0) {\n        break;\n      }\n\n      const tile = tilesRequested.pop();\n      success = addToCache(this, tile, approachingInterval);\n      if (!success) {\n        tilesRequested.push(tile);\n      }\n    }\n  }\n};\n\nfunction getKey(x, y, level) {\n  return `${x}-${y}-${level}`;\n}\n\nfunction getKeyElements(key) {\n  const s = key.split(\"-\");\n  if (s.length !== 3) {\n    return undefined;\n  }\n\n  return {\n    x: Number(s[0]),\n    y: Number(s[1]),\n    level: Number(s[2]),\n  };\n}\n\nfunction getApproachingInterval(that) {\n  const times = that._times;\n  if (!defined(times)) {\n    return undefined;\n  }\n  const clock = that._clock;\n  const time = clock.currentTime;\n  const isAnimating = clock.canAnimate && clock.shouldAnimate;\n  const multiplier = clock.multiplier;\n\n  if (!isAnimating && multiplier !== 0) {\n    return undefined;\n  }\n\n  let seconds;\n  let index = times.indexOf(time);\n  if (index < 0) {\n    return undefined;\n  }\n\n  const interval = times.get(index);\n  if (multiplier > 0) {\n    // animating forward\n    seconds = JulianDate.secondsDifference(interval.stop, time);\n    ++index;\n  } else {\n    //backwards\n    seconds = JulianDate.secondsDifference(interval.start, time); // Will be negative\n    --index;\n  }\n  seconds /= multiplier; // Will always be positive\n\n  // Less than 5 wall time seconds\n  return index >= 0 && seconds <= 5.0 ? times.get(index) : undefined;\n}\n\nfunction addToCache(that, tile, interval) {\n  const index = that._times.indexOf(interval.start);\n  const tileCache = that._tileCache;\n  let intervalTileCache = tileCache[index];\n  if (!defined(intervalTileCache)) {\n    intervalTileCache = tileCache[index] = {};\n  }\n\n  const key = tile.key;\n  if (defined(intervalTileCache[key])) {\n    return true; // Already in the cache\n  }\n\n  const keyElements = getKeyElements(key);\n  const request = new Request({\n    throttle: false,\n    throttleByServer: true,\n    type: RequestType.IMAGERY,\n    priorityFunction: tile.priorityFunction,\n  });\n  const promise = that._requestImageFunction(\n    keyElements.x,\n    keyElements.y,\n    keyElements.level,\n    request,\n    interval,\n  );\n  if (!defined(promise)) {\n    return false;\n  }\n\n  intervalTileCache[key] = {\n    promise: promise,\n    request: request,\n  };\n\n  return true;\n}\nexport default TimeDynamicImagery;\n","import Check from \"../Core/Check.js\";\nimport combine from \"../Core/combine.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Resource from \"../Core/Resource.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport PointCloud from \"./PointCloud.js\";\nimport PointCloudEyeDomeLighting from \"./PointCloudEyeDomeLighting.js\";\nimport PointCloudShading from \"./PointCloudShading.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMode from \"./ShadowMode.js\";\n\n/**\n * Provides playback of time-dynamic point cloud data.\n * <p>\n * Point cloud frames are prefetched in intervals determined by the average frame load time and the current clock speed.\n * If intermediate frames cannot be loaded in time to meet playback speed, they will be skipped. If frames are sufficiently\n * small or the clock is sufficiently slow then no frames will be skipped.\n * </p>\n *\n * @alias TimeDynamicPointCloud\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Clock} options.clock A {@link Clock} instance that is used when determining the value for the time dimension.\n * @param {TimeIntervalCollection} options.intervals A {@link TimeIntervalCollection} with its data property being an object containing a <code>uri</code> to a 3D Tiles Point Cloud tile and an optional <code>transform</code>.\n * @param {boolean} [options.show=true] Determines if the point cloud will be shown.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] A 4x4 transformation matrix that transforms the point cloud.\n * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the point cloud casts or receives shadows from light sources.\n * @param {number} [options.maximumMemoryUsage=256] The maximum amount of memory in MB that can be used by the point cloud.\n * @param {object} [options.shading] Options for constructing a {@link PointCloudShading} object to control point attenuation and eye dome lighting.\n * @param {Cesium3DTileStyle} [options.style] The style, defined using the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}, applied to each point in the point cloud.\n * @param {ClippingPlaneCollection} [options.clippingPlanes] The {@link ClippingPlaneCollection} used to selectively disable rendering the point cloud.\n */\nfunction TimeDynamicPointCloud(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.clock\", options.clock);\n  Check.typeOf.object(\"options.intervals\", options.intervals);\n  //>>includeEnd('debug');\n\n  /**\n   * Determines if the point cloud will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = options.show ?? true;\n\n  /**\n   * A 4x4 transformation matrix that transforms the point cloud.\n   *\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   */\n  this.modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n\n  /**\n   * Determines whether the point cloud casts or receives shadows from light sources.\n   * <p>\n   * Enabling shadows has a performance impact. A point cloud that casts shadows must be rendered twice, once from the camera and again from the light's point of view.\n   * </p>\n   * <p>\n   * Shadows are rendered only when {@link Viewer#shadows} is <code>true</code>.\n   * </p>\n   *\n   * @type {ShadowMode}\n   * @default ShadowMode.ENABLED\n   */\n  this.shadows = options.shadows ?? ShadowMode.ENABLED;\n\n  /**\n   * The maximum amount of GPU memory (in MB) that may be used to cache point cloud frames.\n   * <p>\n   * Frames that are not being loaded or rendered are unloaded to enforce this.\n   * </p>\n   * <p>\n   * If decreasing this value results in unloading tiles, the tiles are unloaded the next frame.\n   * </p>\n   *\n   * @type {number}\n   * @default 256\n   *\n   * @see TimeDynamicPointCloud#totalMemoryUsageInBytes\n   */\n  this.maximumMemoryUsage = options.maximumMemoryUsage ?? 256;\n\n  /**\n   * Options for controlling point size based on geometric error and eye dome lighting.\n   * @type {PointCloudShading}\n   */\n  this.shading = new PointCloudShading(options.shading);\n\n  /**\n   * The style, defined using the\n   * {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language},\n   * applied to each point in the point cloud.\n   * <p>\n   * Assign <code>undefined</code> to remove the style, which will restore the visual\n   * appearance of the point cloud to its default when no style was applied.\n   * </p>\n   *\n   * @type {Cesium3DTileStyle}\n   *\n   * @example\n   * pointCloud.style = new Cesium.Cesium3DTileStyle({\n   *    color : {\n   *        conditions : [\n   *            ['${Classification} === 0', 'color(\"purple\", 0.5)'],\n   *            ['${Classification} === 1', 'color(\"red\")'],\n   *            ['true', '${COLOR}']\n   *        ]\n   *    },\n   *    show : '${Classification} !== 2'\n   * });\n   *\n   * @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}\n   */\n  this.style = options.style;\n\n  /**\n   * The event fired to indicate that a frame failed to load. A frame may fail to load if the\n   * request for its uri fails or processing fails due to invalid content.\n   * <p>\n   * If there are no event listeners, error messages will be logged to the console.\n   * </p>\n   * <p>\n   * The error object passed to the listener contains two properties:\n   * <ul>\n   * <li><code>uri</code>: the uri of the failed frame.</li>\n   * <li><code>message</code>: the error message.</li>\n   * </ul>\n   *\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * pointCloud.frameFailed.addEventListener(function(error) {\n   *     console.log(`An error occurred loading frame: ${error.uri}`);\n   *     console.log(`Error: ${error.message}`);\n   * });\n   */\n  this.frameFailed = new Event();\n\n  /**\n   * The event fired to indicate that a new frame was rendered.\n   * <p>\n   * The time dynamic point cloud {@link TimeDynamicPointCloud} is passed to the event listener.\n   * </p>\n   * @type {Event}\n   * @default new Event()\n   *\n   * @example\n   * pointCloud.frameChanged.addEventListener(function(timeDynamicPointCloud) {\n   *     viewer.camera.viewBoundingSphere(timeDynamicPointCloud.boundingSphere);\n   * });\n   */\n  this.frameChanged = new Event();\n\n  this._clock = options.clock;\n  this._intervals = options.intervals;\n  this._clippingPlanes = undefined;\n  this.clippingPlanes = options.clippingPlanes; // Call setter\n  this._pointCloudEyeDomeLighting = new PointCloudEyeDomeLighting();\n  this._loadTimestamp = undefined;\n  this._clippingPlanesState = 0;\n  this._styleDirty = false;\n  this._pickId = undefined;\n  this._totalMemoryUsageInBytes = 0;\n  this._frames = [];\n  this._previousInterval = undefined;\n  this._nextInterval = undefined;\n  this._lastRenderedFrame = undefined;\n  this._clockMultiplier = 0.0;\n\n  // For calculating average load time of the last N frames\n  this._runningSum = 0.0;\n  this._runningLength = 0;\n  this._runningIndex = 0;\n  this._runningSamples = new Array(5).fill(0.0);\n  this._runningAverage = 0.0;\n}\n\nObject.defineProperties(TimeDynamicPointCloud.prototype, {\n  /**\n   * The {@link ClippingPlaneCollection} used to selectively disable rendering the point cloud.\n   *\n   * @memberof TimeDynamicPointCloud.prototype\n   *\n   * @type {ClippingPlaneCollection}\n   */\n  clippingPlanes: {\n    get: function () {\n      return this._clippingPlanes;\n    },\n    set: function (value) {\n      ClippingPlaneCollection.setOwner(value, this, \"_clippingPlanes\");\n    },\n  },\n\n  /**\n   * The total amount of GPU memory in bytes used by the point cloud.\n   *\n   * @memberof TimeDynamicPointCloud.prototype\n   *\n   * @type {number}\n   * @readonly\n   *\n   * @see TimeDynamicPointCloud#maximumMemoryUsage\n   */\n  totalMemoryUsageInBytes: {\n    get: function () {\n      return this._totalMemoryUsageInBytes;\n    },\n  },\n\n  /**\n   * The bounding sphere of the frame being rendered. Returns <code>undefined</code> if no frame is being rendered.\n   *\n   * @memberof TimeDynamicPointCloud.prototype\n   *\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      if (defined(this._lastRenderedFrame)) {\n        return this._lastRenderedFrame.pointCloud.boundingSphere;\n      }\n      return undefined;\n    },\n  },\n});\n\nfunction getFragmentShaderLoaded(fs) {\n  return `uniform vec4 czm_pickColor;\\n${fs}`;\n}\n\nfunction getUniformMapLoaded(stream) {\n  return function (uniformMap) {\n    return combine(uniformMap, {\n      czm_pickColor: function () {\n        return stream._pickId.color;\n      },\n    });\n  };\n}\n\nfunction getPickIdLoaded() {\n  return \"czm_pickColor\";\n}\n\n/**\n * Marks the point cloud's {@link TimeDynamicPointCloud#style} as dirty, which forces all\n * points to re-evaluate the style in the next frame.\n */\nTimeDynamicPointCloud.prototype.makeStyleDirty = function () {\n  this._styleDirty = true;\n};\n\n/**\n * Exposed for testing.\n *\n * @private\n */\nTimeDynamicPointCloud.prototype._getAverageLoadTime = function () {\n  if (this._runningLength === 0) {\n    // Before any frames have loaded make a best guess about the average load time\n    return 0.05;\n  }\n  return this._runningAverage;\n};\n\nconst scratchDate = new JulianDate();\n\nfunction getClockMultiplier(that) {\n  const clock = that._clock;\n  const isAnimating = clock.canAnimate && clock.shouldAnimate;\n  const multiplier = clock.multiplier;\n  return isAnimating ? multiplier : 0.0;\n}\n\nfunction getIntervalIndex(that, interval) {\n  return that._intervals.indexOf(interval.start);\n}\n\nfunction getNextInterval(that, currentInterval) {\n  const intervals = that._intervals;\n  const clock = that._clock;\n  const multiplier = getClockMultiplier(that);\n\n  if (multiplier === 0.0) {\n    return undefined;\n  }\n\n  const averageLoadTime = that._getAverageLoadTime();\n  const time = JulianDate.addSeconds(\n    clock.currentTime,\n    averageLoadTime * multiplier,\n    scratchDate,\n  );\n  let index = intervals.indexOf(time);\n\n  const currentIndex = getIntervalIndex(that, currentInterval);\n  if (index === currentIndex) {\n    if (multiplier >= 0) {\n      ++index;\n    } else {\n      --index;\n    }\n  }\n\n  // Returns undefined if not in range\n  return intervals.get(index);\n}\n\nfunction getCurrentInterval(that) {\n  const intervals = that._intervals;\n  const clock = that._clock;\n  const time = clock.currentTime;\n  const index = intervals.indexOf(time);\n\n  // Returns undefined if not in range\n  return intervals.get(index);\n}\n\nfunction reachedInterval(that, currentInterval, nextInterval) {\n  const multiplier = getClockMultiplier(that);\n  const currentIndex = getIntervalIndex(that, currentInterval);\n  const nextIndex = getIntervalIndex(that, nextInterval);\n\n  if (multiplier >= 0) {\n    return currentIndex >= nextIndex;\n  }\n  return currentIndex <= nextIndex;\n}\n\nfunction handleFrameFailure(that, uri) {\n  return function (error) {\n    const message = defined(error.message) ? error.message : error.toString();\n    if (that.frameFailed.numberOfListeners > 0) {\n      that.frameFailed.raiseEvent({\n        uri: uri,\n        message: message,\n      });\n    } else {\n      console.log(`A frame failed to load: ${uri}`);\n      console.log(`Error: ${message}`);\n    }\n  };\n}\n\nfunction requestFrame(that, interval, frameState) {\n  const index = getIntervalIndex(that, interval);\n  const frames = that._frames;\n  let frame = frames[index];\n  if (!defined(frame)) {\n    const transformArray = interval.data.transform;\n    const transform = defined(transformArray)\n      ? Matrix4.fromArray(transformArray)\n      : undefined;\n    const uri = interval.data.uri;\n    frame = {\n      pointCloud: undefined,\n      transform: transform,\n      timestamp: getTimestamp(),\n      sequential: true,\n      ready: false,\n      touchedFrameNumber: frameState.frameNumber,\n      uri: uri,\n    };\n    frames[index] = frame;\n    Resource.fetchArrayBuffer({\n      url: uri,\n    })\n      .then(function (arrayBuffer) {\n        // PERFORMANCE_IDEA: share a memory pool, render states, shaders, and other resources among all\n        // frames. Each frame just needs an index/offset into the pool.\n        frame.pointCloud = new PointCloud({\n          arrayBuffer: arrayBuffer,\n          cull: true,\n          fragmentShaderLoaded: getFragmentShaderLoaded,\n          uniformMapLoaded: getUniformMapLoaded(that),\n          pickIdLoaded: getPickIdLoaded,\n        });\n      })\n      .catch(handleFrameFailure(that, uri));\n  }\n  return frame;\n}\n\nfunction updateAverageLoadTime(that, loadTime) {\n  that._runningSum += loadTime;\n  that._runningSum -= that._runningSamples[that._runningIndex];\n  that._runningSamples[that._runningIndex] = loadTime;\n  that._runningLength = Math.min(\n    that._runningLength + 1,\n    that._runningSamples.length,\n  );\n  that._runningIndex = (that._runningIndex + 1) % that._runningSamples.length;\n  that._runningAverage = that._runningSum / that._runningLength;\n}\n\nfunction prepareFrame(that, frame, updateState, frameState) {\n  if (frame.touchedFrameNumber < frameState.frameNumber - 1) {\n    // If this frame was not loaded in sequential updates then it can't be used it for calculating the average load time.\n    // For example: selecting a frame on the timeline, selecting another frame before the request finishes, then selecting this frame later.\n    frame.sequential = false;\n  }\n\n  const pointCloud = frame.pointCloud;\n\n  if (defined(pointCloud) && !frame.ready) {\n    // Call update to prepare renderer resources. Don't render anything yet.\n    const commandList = frameState.commandList;\n    const lengthBeforeUpdate = commandList.length;\n    renderFrame(that, frame, updateState, frameState);\n\n    if (pointCloud.ready) {\n      // Point cloud became ready this update\n      frame.ready = true;\n      that._totalMemoryUsageInBytes += pointCloud.geometryByteLength;\n      commandList.length = lengthBeforeUpdate; // Don't allow preparing frame to insert commands.\n      if (frame.sequential) {\n        // Update the values used to calculate average load time\n        const loadTime = (getTimestamp() - frame.timestamp) / 1000.0;\n        updateAverageLoadTime(that, loadTime);\n      }\n    }\n  }\n\n  frame.touchedFrameNumber = frameState.frameNumber;\n}\n\nconst scratchModelMatrix = new Matrix4();\n\nfunction getGeometricError(that, pointCloud) {\n  const shading = that.shading;\n  if (defined(shading) && defined(shading.baseResolution)) {\n    return shading.baseResolution;\n  } else if (defined(pointCloud.boundingSphere)) {\n    return CesiumMath.cbrt(\n      pointCloud.boundingSphere.volume() / pointCloud.pointsLength,\n    );\n  }\n  return 0.0;\n}\n\nfunction getMaximumAttenuation(that) {\n  const shading = that.shading;\n  if (defined(shading) && defined(shading.maximumAttenuation)) {\n    return shading.maximumAttenuation;\n  }\n\n  // Return a hardcoded maximum attenuation. For a tileset this would instead be the maximum screen space error.\n  return 10.0;\n}\n\nconst defaultShading = new PointCloudShading();\n\nfunction renderFrame(that, frame, updateState, frameState) {\n  const shading = that.shading ?? defaultShading;\n  const pointCloud = frame.pointCloud;\n  const transform = frame.transform ?? Matrix4.IDENTITY;\n  pointCloud.modelMatrix = Matrix4.multiplyTransformation(\n    that.modelMatrix,\n    transform,\n    scratchModelMatrix,\n  );\n  pointCloud.style = that.style;\n  pointCloud.time = updateState.timeSinceLoad;\n  pointCloud.shadows = that.shadows;\n  pointCloud.clippingPlanes = that._clippingPlanes;\n  pointCloud.isClipped = updateState.isClipped;\n  pointCloud.attenuation = shading.attenuation;\n  pointCloud.backFaceCulling = shading.backFaceCulling;\n  pointCloud.normalShading = shading.normalShading;\n  pointCloud.geometricError = getGeometricError(that, pointCloud);\n  pointCloud.geometricErrorScale = shading.geometricErrorScale;\n  pointCloud.maximumAttenuation = getMaximumAttenuation(that);\n\n  try {\n    pointCloud.update(frameState);\n  } catch (error) {\n    handleFrameFailure(that, frame.uri)(error);\n  }\n\n  frame.touchedFrameNumber = frameState.frameNumber;\n}\n\nfunction loadFrame(that, interval, updateState, frameState) {\n  const frame = requestFrame(that, interval, frameState);\n  prepareFrame(that, frame, updateState, frameState);\n}\n\nfunction getUnloadCondition(frameState) {\n  return function (frame) {\n    // Unload all frames that aren't currently being loaded or rendered\n    return frame.touchedFrameNumber < frameState.frameNumber;\n  };\n}\n\nfunction unloadFrames(that, unloadCondition) {\n  const frames = that._frames;\n  const length = frames.length;\n  for (let i = 0; i < length; ++i) {\n    const frame = frames[i];\n    if (defined(frame)) {\n      if (!defined(unloadCondition) || unloadCondition(frame)) {\n        const pointCloud = frame.pointCloud;\n        if (frame.ready) {\n          that._totalMemoryUsageInBytes -= pointCloud.geometryByteLength;\n        }\n        if (defined(pointCloud)) {\n          pointCloud.destroy();\n        }\n        if (frame === that._lastRenderedFrame) {\n          that._lastRenderedFrame = undefined;\n        }\n        frames[i] = undefined;\n      }\n    }\n  }\n}\n\nfunction getFrame(that, interval) {\n  const index = getIntervalIndex(that, interval);\n  const frame = that._frames[index];\n  if (defined(frame) && frame.ready) {\n    return frame;\n  }\n}\n\nfunction updateInterval(that, interval, frame, updateState, frameState) {\n  if (defined(frame)) {\n    if (frame.ready) {\n      return true;\n    }\n    loadFrame(that, interval, updateState, frameState);\n    return frame.ready;\n  }\n  return false;\n}\n\nfunction getNearestReadyInterval(\n  that,\n  previousInterval,\n  currentInterval,\n  updateState,\n  frameState,\n) {\n  let i;\n  let interval;\n  let frame;\n  const intervals = that._intervals;\n  const frames = that._frames;\n  const currentIndex = getIntervalIndex(that, currentInterval);\n  const previousIndex = getIntervalIndex(that, previousInterval);\n\n  if (currentIndex >= previousIndex) {\n    // look backwards\n    for (i = currentIndex; i >= previousIndex; --i) {\n      interval = intervals.get(i);\n      frame = frames[i];\n      if (updateInterval(that, interval, frame, updateState, frameState)) {\n        return interval;\n      }\n    }\n  } else {\n    // look forwards\n    for (i = currentIndex; i <= previousIndex; ++i) {\n      interval = intervals.get(i);\n      frame = frames[i];\n      if (updateInterval(that, interval, frame, updateState, frameState)) {\n        return interval;\n      }\n    }\n  }\n\n  // If no intervals are ready return the previous interval\n  return previousInterval;\n}\n\nfunction setFramesDirty(that, clippingPlanesDirty, styleDirty) {\n  const frames = that._frames;\n  const framesLength = frames.length;\n  for (let i = 0; i < framesLength; ++i) {\n    const frame = frames[i];\n    if (defined(frame) && defined(frame.pointCloud)) {\n      frame.pointCloud.clippingPlanesDirty = clippingPlanesDirty;\n      frame.pointCloud.styleDirty = styleDirty;\n    }\n  }\n}\n\nconst updateState = {\n  timeSinceLoad: 0,\n  isClipped: false,\n  clippingPlanesDirty: false,\n};\n\n/**\n * @private\n */\nTimeDynamicPointCloud.prototype.update = function (frameState) {\n  if (frameState.mode === SceneMode.MORPHING) {\n    return;\n  }\n\n  if (!this.show) {\n    return;\n  }\n\n  if (!defined(this._pickId)) {\n    this._pickId = frameState.context.createPickId({\n      primitive: this,\n    });\n  }\n\n  if (!defined(this._loadTimestamp)) {\n    this._loadTimestamp = JulianDate.clone(frameState.time);\n  }\n\n  // For styling\n  const timeSinceLoad = Math.max(\n    JulianDate.secondsDifference(frameState.time, this._loadTimestamp) * 1000,\n    0.0,\n  );\n\n  // Update clipping planes\n  const clippingPlanes = this._clippingPlanes;\n  let clippingPlanesState = 0;\n  let clippingPlanesDirty = false;\n  const isClipped = defined(clippingPlanes) && clippingPlanes.enabled;\n\n  if (isClipped) {\n    clippingPlanes.update(frameState);\n    clippingPlanesState = clippingPlanes.clippingPlanesState;\n  }\n\n  if (this._clippingPlanesState !== clippingPlanesState) {\n    this._clippingPlanesState = clippingPlanesState;\n    clippingPlanesDirty = true;\n  }\n\n  const styleDirty = this._styleDirty;\n  this._styleDirty = false;\n\n  if (clippingPlanesDirty || styleDirty) {\n    setFramesDirty(this, clippingPlanesDirty, styleDirty);\n  }\n\n  updateState.timeSinceLoad = timeSinceLoad;\n  updateState.isClipped = isClipped;\n\n  const shading = this.shading;\n  const eyeDomeLighting = this._pointCloudEyeDomeLighting;\n\n  const commandList = frameState.commandList;\n  const lengthBeforeUpdate = commandList.length;\n\n  let previousInterval = this._previousInterval;\n  let nextInterval = this._nextInterval;\n  const currentInterval = getCurrentInterval(this);\n\n  if (!defined(currentInterval)) {\n    return;\n  }\n\n  let clockMultiplierChanged = false;\n  const clockMultiplier = getClockMultiplier(this);\n  const clockPaused = clockMultiplier === 0;\n  if (clockMultiplier !== this._clockMultiplier) {\n    clockMultiplierChanged = true;\n    this._clockMultiplier = clockMultiplier;\n  }\n\n  if (!defined(previousInterval) || clockPaused) {\n    previousInterval = currentInterval;\n  }\n\n  if (\n    !defined(nextInterval) ||\n    clockMultiplierChanged ||\n    reachedInterval(this, currentInterval, nextInterval)\n  ) {\n    nextInterval = getNextInterval(this, currentInterval);\n  }\n\n  previousInterval = getNearestReadyInterval(\n    this,\n    previousInterval,\n    currentInterval,\n    updateState,\n    frameState,\n  );\n  let frame = getFrame(this, previousInterval);\n\n  if (!defined(frame)) {\n    // The frame is not ready to render. This can happen when the simulation starts or when scrubbing the timeline\n    // to a frame that hasn't loaded yet. Just render the last rendered frame in its place until it finishes loading.\n    loadFrame(this, previousInterval, updateState, frameState);\n    frame = this._lastRenderedFrame;\n  }\n\n  if (defined(frame)) {\n    renderFrame(this, frame, updateState, frameState);\n  }\n\n  if (defined(nextInterval)) {\n    // Start loading the next frame\n    loadFrame(this, nextInterval, updateState, frameState);\n  }\n\n  const that = this;\n  if (defined(frame) && !defined(this._lastRenderedFrame)) {\n    frameState.afterRender.push(function () {\n      return true;\n    });\n  }\n\n  if (defined(frame) && frame !== this._lastRenderedFrame) {\n    if (that.frameChanged.numberOfListeners > 0) {\n      frameState.afterRender.push(function () {\n        that.frameChanged.raiseEvent(that);\n        return true;\n      });\n    }\n  }\n\n  this._previousInterval = previousInterval;\n  this._nextInterval = nextInterval;\n  this._lastRenderedFrame = frame;\n\n  const totalMemoryUsageInBytes = this._totalMemoryUsageInBytes;\n  const maximumMemoryUsageInBytes = this.maximumMemoryUsage * 1024 * 1024;\n\n  if (totalMemoryUsageInBytes > maximumMemoryUsageInBytes) {\n    unloadFrames(this, getUnloadCondition(frameState));\n  }\n\n  const lengthAfterUpdate = commandList.length;\n  const addedCommandsLength = lengthAfterUpdate - lengthBeforeUpdate;\n\n  if (\n    defined(shading) &&\n    shading.attenuation &&\n    shading.eyeDomeLighting &&\n    addedCommandsLength > 0\n  ) {\n    eyeDomeLighting.update(\n      frameState,\n      lengthBeforeUpdate,\n      shading,\n      this.boundingSphere,\n    );\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see TimeDynamicPointCloud#destroy\n */\nTimeDynamicPointCloud.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * pointCloud = pointCloud && pointCloud.destroy();\n *\n * @see TimeDynamicPointCloud#isDestroyed\n */\nTimeDynamicPointCloud.prototype.destroy = function () {\n  unloadFrames(this);\n  this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();\n  this._pickId = this._pickId && this._pickId.destroy();\n  return destroyObject(this);\n};\nexport default TimeDynamicPointCloud;\n","/**\n * A tonemapping algorithm when rendering with high dynamic range.\n *\n * @enum {string}\n */\nconst Tonemapper = {\n  /**\n   * Use the Reinhard tonemapping.\n   *\n   * @type {string}\n   * @constant\n   */\n  REINHARD: \"REINHARD\",\n\n  /**\n   * Use the modified Reinhard tonemapping.\n   *\n   * @type {string}\n   * @constant\n   */\n  MODIFIED_REINHARD: \"MODIFIED_REINHARD\",\n\n  /**\n   * Use the Filmic tonemapping.\n   *\n   * @type {string}\n   * @constant\n   */\n  FILMIC: \"FILMIC\",\n\n  /**\n   * Use the ACES tonemapping.\n   *\n   * @type {string}\n   * @constant\n   */\n  ACES: \"ACES\",\n\n  /**\n   * Use the PBR Neutral tonemapping {@link https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral|from Khronos}.\n   *\n   * @type {string}\n   * @constant\n   */\n  PBR_NEUTRAL: \"PBR_NEUTRAL\",\n};\n\n/**\n * Validate whether the provided value is a known Tonemapper type\n * @private\n *\n * @param {string} tonemapper\n */\nexport function validateTonemapper(tonemapper) {\n  return (\n    tonemapper === Tonemapper.REINHARD ||\n    tonemapper === Tonemapper.MODIFIED_REINHARD ||\n    tonemapper === Tonemapper.FILMIC ||\n    tonemapper === Tonemapper.ACES ||\n    tonemapper === Tonemapper.PBR_NEUTRAL\n  );\n}\n\nexport default Object.freeze(Tonemapper);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport FramebufferManager from \"../Renderer/FramebufferManager.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport CompareAndPackTranslucentDepth from \"../Shaders/CompareAndPackTranslucentDepth.js\";\nimport CompositeTranslucentClassification from \"../Shaders/PostProcessStages/CompositeTranslucentClassification.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\n\nconst debugShowPackedDepth = false;\n\n/**\n * Handles buffers, drawing, and deriving commands needed for classifying translucent 3D Tiles.\n * Uses a depth texture, so classification on translucent 3D Tiles is not available in Internet Explorer.\n *\n * @private\n */\nfunction TranslucentTileClassification(context) {\n  this._drawClassificationFBO = new FramebufferManager({\n    createDepthAttachments: false,\n  });\n  this._accumulationFBO = new FramebufferManager({\n    createDepthAttachments: false,\n  });\n  this._packFBO = new FramebufferManager();\n\n  this._opaqueDepthStencilTexture = undefined;\n\n  // Reference to either colorTexture or accumulationTexture\n  this._textureToComposite = undefined;\n\n  this._translucentDepthStencilTexture = undefined;\n\n  this._packDepthCommand = undefined;\n  this._accumulateCommand = undefined;\n  this._compositeCommand = undefined;\n  this._copyCommand = undefined;\n\n  this._clearColorCommand = new ClearCommand({\n    color: new Color(0.0, 0.0, 0.0, 0.0),\n    owner: this,\n  });\n\n  this._clearDepthStencilCommand = new ClearCommand({\n    depth: 1.0,\n    stencil: 0,\n    owner: this,\n  });\n\n  this._supported = context.depthTexture;\n\n  this._viewport = new BoundingRectangle();\n  this._rsDepth = undefined;\n  this._rsAccumulate = undefined;\n  this._rsComp = undefined;\n  this._useScissorTest = undefined;\n  this._scissorRectangle = undefined;\n\n  this._hasTranslucentDepth = false;\n  this._frustumsDrawn = 0;\n}\n\nObject.defineProperties(TranslucentTileClassification.prototype, {\n  /**\n   * Gets whether or not translucent depth was rendered.\n   * @memberof TranslucentTileClassification.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   */\n  hasTranslucentDepth: {\n    get: function () {\n      return this._hasTranslucentDepth;\n    },\n  },\n});\n\nfunction destroyTextures(transpClass) {\n  transpClass._textureToComposite = undefined;\n\n  transpClass._translucentDepthStencilTexture =\n    transpClass._translucentDepthStencilTexture &&\n    !transpClass._translucentDepthStencilTexture.isDestroyed() &&\n    transpClass._translucentDepthStencilTexture.destroy();\n}\n\nfunction destroyFramebuffers(transpClass) {\n  transpClass._drawClassificationFBO.destroy();\n  transpClass._accumulationFBO.destroy();\n  transpClass._packFBO.destroy();\n}\n\nfunction updateTextures(transpClass, context, width, height) {\n  destroyTextures(transpClass);\n\n  transpClass._translucentDepthStencilTexture = new Texture({\n    context: context,\n    width: width,\n    height: height,\n    pixelFormat: PixelFormat.DEPTH_STENCIL,\n    pixelDatatype: PixelDatatype.UNSIGNED_INT_24_8,\n    sampler: Sampler.NEAREST,\n  });\n}\n\nfunction updateFramebuffers(transpClass, context, width, height) {\n  destroyFramebuffers(transpClass);\n  transpClass._drawClassificationFBO.setDepthStencilTexture(\n    transpClass._translucentDepthStencilTexture,\n  );\n  transpClass._drawClassificationFBO.update(context, width, height);\n\n  transpClass._accumulationFBO.setDepthStencilTexture(\n    transpClass._translucentDepthStencilTexture,\n  );\n  transpClass._accumulationFBO.update(context, width, height);\n\n  transpClass._packFBO.update(context, width, height);\n}\n\nfunction updateResources(\n  transpClass,\n  context,\n  passState,\n  globeDepthStencilTexture,\n) {\n  if (!transpClass.isSupported()) {\n    return;\n  }\n\n  transpClass._opaqueDepthStencilTexture = globeDepthStencilTexture;\n\n  const width = transpClass._opaqueDepthStencilTexture.width;\n  const height = transpClass._opaqueDepthStencilTexture.height;\n  if (transpClass._drawClassificationFBO.isDirty(width, height)) {\n    updateTextures(transpClass, context, width, height);\n    updateFramebuffers(transpClass, context, width, height);\n  }\n\n  let fs;\n  let uniformMap;\n\n  if (!defined(transpClass._packDepthCommand)) {\n    fs = new ShaderSource({\n      sources: [CompareAndPackTranslucentDepth],\n    });\n\n    uniformMap = {\n      u_opaqueDepthTexture: function () {\n        return transpClass._opaqueDepthStencilTexture;\n      },\n      u_translucentDepthTexture: function () {\n        return transpClass._translucentDepthStencilTexture;\n      },\n    };\n\n    transpClass._packDepthCommand = context.createViewportQuadCommand(fs, {\n      uniformMap: uniformMap,\n      owner: transpClass,\n    });\n  }\n\n  if (!defined(transpClass._compositeCommand)) {\n    fs = new ShaderSource({\n      sources: [CompositeTranslucentClassification],\n    });\n\n    uniformMap = {\n      colorTexture: function () {\n        return transpClass._textureToComposite;\n      },\n    };\n\n    if (debugShowPackedDepth) {\n      fs.defines = [\"DEBUG_SHOW_DEPTH\"];\n      uniformMap.u_packedTranslucentDepth = function () {\n        return transpClass._packFBO.getColorTexture();\n      };\n    }\n\n    transpClass._compositeCommand = context.createViewportQuadCommand(fs, {\n      uniformMap: uniformMap,\n      owner: transpClass,\n    });\n\n    const compositeCommand = transpClass._compositeCommand;\n    const compositeProgram = compositeCommand.shaderProgram;\n    const compositePickProgram = context.shaderCache.createDerivedShaderProgram(\n      compositeProgram,\n      \"pick\",\n      {\n        vertexShaderSource: compositeProgram.vertexShaderSource,\n        fragmentShaderSource: new ShaderSource({\n          sources: fs.sources,\n          defines: [\"PICK\"],\n        }),\n        attributeLocations: compositeProgram._attributeLocations,\n      },\n    );\n    const compositePickCommand = DrawCommand.shallowClone(compositeCommand);\n    compositePickCommand.shaderProgram = compositePickProgram;\n    compositeCommand.derivedCommands.pick = compositePickCommand;\n  }\n\n  if (!defined(transpClass._copyCommand)) {\n    fs = new ShaderSource({\n      sources: [CompositeTranslucentClassification],\n    });\n\n    uniformMap = {\n      colorTexture: function () {\n        return transpClass._drawClassificationFBO.getColorTexture();\n      },\n    };\n\n    transpClass._copyCommand = context.createViewportQuadCommand(fs, {\n      uniformMap: uniformMap,\n      owner: transpClass,\n    });\n  }\n\n  if (!defined(transpClass._accumulateCommand)) {\n    fs = new ShaderSource({\n      sources: [CompositeTranslucentClassification],\n    });\n\n    uniformMap = {\n      colorTexture: function () {\n        return transpClass._drawClassificationFBO.getColorTexture();\n      },\n    };\n\n    transpClass._accumulateCommand = context.createViewportQuadCommand(fs, {\n      uniformMap: uniformMap,\n      owner: transpClass,\n    });\n  }\n\n  transpClass._viewport.width = width;\n  transpClass._viewport.height = height;\n\n  const useScissorTest = !BoundingRectangle.equals(\n    transpClass._viewport,\n    passState.viewport,\n  );\n  let updateScissor = useScissorTest !== transpClass._useScissorTest;\n  transpClass._useScissorTest = useScissorTest;\n\n  if (\n    !BoundingRectangle.equals(transpClass._scissorRectangle, passState.viewport)\n  ) {\n    transpClass._scissorRectangle = BoundingRectangle.clone(\n      passState.viewport,\n      transpClass._scissorRectangle,\n    );\n    updateScissor = true;\n  }\n\n  if (\n    !defined(transpClass._rsDepth) ||\n    !BoundingRectangle.equals(\n      transpClass._viewport,\n      transpClass._rsDepth.viewport,\n    ) ||\n    updateScissor\n  ) {\n    transpClass._rsDepth = RenderState.fromCache({\n      viewport: transpClass._viewport,\n      scissorTest: {\n        enabled: transpClass._useScissorTest,\n        rectangle: transpClass._scissorRectangle,\n      },\n    });\n  }\n\n  if (defined(transpClass._packDepthCommand)) {\n    transpClass._packDepthCommand.renderState = transpClass._rsDepth;\n  }\n\n  if (\n    !defined(transpClass._rsAccumulate) ||\n    !BoundingRectangle.equals(\n      transpClass._viewport,\n      transpClass._rsAccumulate.viewport,\n    ) ||\n    updateScissor\n  ) {\n    transpClass._rsAccumulate = RenderState.fromCache({\n      viewport: transpClass._viewport,\n      scissorTest: {\n        enabled: transpClass._useScissorTest,\n        rectangle: transpClass._scissorRectangle,\n      },\n      stencilTest: {\n        enabled: true,\n        frontFunction: StencilFunction.EQUAL,\n        reference: StencilConstants.CESIUM_3D_TILE_MASK,\n      },\n    });\n  }\n\n  if (defined(transpClass._accumulateCommand)) {\n    transpClass._accumulateCommand.renderState = transpClass._rsAccumulate;\n  }\n\n  if (\n    !defined(transpClass._rsComp) ||\n    !BoundingRectangle.equals(\n      transpClass._viewport,\n      transpClass._rsComp.viewport,\n    ) ||\n    updateScissor\n  ) {\n    transpClass._rsComp = RenderState.fromCache({\n      viewport: transpClass._viewport,\n      scissorTest: {\n        enabled: transpClass._useScissorTest,\n        rectangle: transpClass._scissorRectangle,\n      },\n      blending: BlendingState.ALPHA_BLEND,\n    });\n  }\n\n  if (defined(transpClass._compositeCommand)) {\n    transpClass._compositeCommand.renderState = transpClass._rsComp;\n    transpClass._compositeCommand.derivedCommands.pick.renderState =\n      transpClass._rsComp;\n  }\n}\n\nTranslucentTileClassification.prototype.executeTranslucentCommands = function (\n  scene,\n  executeCommand,\n  passState,\n  commands,\n  globeDepthStencilTexture,\n) {\n  // Check for translucent commands that should be classified\n  const useLogDepth = scene.frameState.useLogDepth;\n  const context = scene.context;\n  const framebuffer = passState.framebuffer;\n\n  for (let i = 0; i < commands.length; ++i) {\n    let command = commands[i];\n    command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n\n    if (command.depthForTranslucentClassification) {\n      this._hasTranslucentDepth = true;\n      break;\n    }\n  }\n\n  if (!this._hasTranslucentDepth) {\n    return;\n  }\n\n  updateResources(this, context, passState, globeDepthStencilTexture);\n\n  // Get translucent depth\n  passState.framebuffer = this._drawClassificationFBO.framebuffer;\n\n  // Clear depth for multifrustum\n  this._clearDepthStencilCommand.execute(context, passState);\n\n  for (let i = 0; i < commands.length; ++i) {\n    let command = commands[i];\n    command = useLogDepth ? command.derivedCommands.logDepth.command : command;\n\n    if (!command.depthForTranslucentClassification) {\n      continue;\n    }\n\n    // Depth-only commands are created for all translucent 3D Tiles commands\n    const depthOnlyCommand = command.derivedCommands.depth.depthOnlyCommand;\n    executeCommand(depthOnlyCommand, scene, passState);\n  }\n\n  this._frustumsDrawn += this._hasTranslucentDepth ? 1 : 0;\n\n  // Pack depth if any translucent depth commands were performed\n  if (this._hasTranslucentDepth) {\n    passState.framebuffer = this._packFBO.framebuffer;\n    this._packDepthCommand.execute(context, passState);\n  }\n\n  passState.framebuffer = framebuffer;\n};\n\nTranslucentTileClassification.prototype.executeClassificationCommands =\n  function (scene, executeCommand, passState, frustumCommands) {\n    if (!this._hasTranslucentDepth) {\n      return;\n    }\n\n    const context = scene.context;\n    const uniformState = context.uniformState;\n    const framebuffer = passState.framebuffer;\n\n    passState.framebuffer = this._accumulationFBO.framebuffer;\n    this._accumulateCommand.execute(context, passState);\n\n    passState.framebuffer = this._drawClassificationFBO.framebuffer;\n    if (this._frustumsDrawn > 1) {\n      this._clearColorCommand.execute(context, passState);\n    }\n\n    uniformState.updatePass(Pass.CESIUM_3D_TILE_CLASSIFICATION);\n    const swapGlobeDepth = uniformState.globeDepthTexture;\n    uniformState.globeDepthTexture = this._packFBO.getColorTexture();\n    const commands =\n      frustumCommands.commands[Pass.CESIUM_3D_TILE_CLASSIFICATION];\n    const length = frustumCommands.indices[Pass.CESIUM_3D_TILE_CLASSIFICATION];\n    for (let i = 0; i < length; ++i) {\n      executeCommand(commands[i], scene, passState);\n    }\n\n    uniformState.globeDepthTexture = swapGlobeDepth;\n    passState.framebuffer = framebuffer;\n\n    if (this._frustumsDrawn === 1) {\n      return;\n    }\n\n    passState.framebuffer = this._accumulationFBO.framebuffer;\n    this._accumulateCommand.execute(context, passState);\n\n    passState.framebuffer = framebuffer;\n  };\n\nTranslucentTileClassification.prototype.execute = function (scene, passState) {\n  if (!this._hasTranslucentDepth) {\n    return;\n  }\n  if (this._frustumsDrawn === 1) {\n    this._textureToComposite = this._drawClassificationFBO.getColorTexture();\n  } else {\n    this._textureToComposite = this._accumulationFBO.getColorTexture();\n  }\n\n  const command = scene.frameState.passes.pick\n    ? this._compositeCommand.derivedCommands.pick\n    : this._compositeCommand;\n  command.execute(scene.context, passState);\n\n  clear(this, scene, passState);\n};\n\nfunction clear(translucentTileClassification, scene, passState) {\n  if (!translucentTileClassification._hasTranslucentDepth) {\n    return;\n  }\n\n  const framebuffer = passState.framebuffer;\n\n  passState.framebuffer =\n    translucentTileClassification._drawClassificationFBO.framebuffer;\n  translucentTileClassification._clearColorCommand.execute(\n    scene._context,\n    passState,\n  );\n\n  passState.framebuffer = framebuffer;\n\n  if (translucentTileClassification._frustumsDrawn > 1) {\n    passState.framebuffer =\n      translucentTileClassification._accumulationFBO.framebuffer;\n    translucentTileClassification._clearColorCommand.execute(\n      scene._context,\n      passState,\n    );\n  }\n\n  translucentTileClassification._hasTranslucentDepth = false;\n  translucentTileClassification._frustumsDrawn = 0;\n}\n\nTranslucentTileClassification.prototype.isSupported = function () {\n  return this._supported;\n};\n\nTranslucentTileClassification.prototype.isDestroyed = function () {\n  return false;\n};\n\nTranslucentTileClassification.prototype.destroy = function () {\n  destroyTextures(this);\n  destroyFramebuffers(this);\n\n  if (defined(this._compositeCommand)) {\n    this._compositeCommand.shaderProgram =\n      this._compositeCommand.shaderProgram &&\n      this._compositeCommand.shaderProgram.destroy();\n  }\n\n  if (defined(this._packDepthCommand)) {\n    this._packDepthCommand.shaderProgram =\n      this._packDepthCommand.shaderProgram &&\n      this._packDepthCommand.shaderProgram.destroy();\n  }\n  return destroyObject(this);\n};\n\nexport default TranslucentTileClassification;\n","import clone from \"../Core/clone.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport EasingFunction from \"../Core/EasingFunction.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport TimeConstants from \"../Core/TimeConstants.js\";\nimport { Tween as TweenJS } from \"@tweenjs/tween.js\";\n\n/**\n * A tween is an animation that interpolates the properties of two objects using an {@link EasingFunction}.  Create\n * one using {@link Scene#tweens} and {@link TweenCollection#add} and related add functions.\n *\n * @alias Tween\n * @constructor\n *\n * @private\n */\nfunction Tween(\n  tweens,\n  tweenjs,\n  startObject,\n  stopObject,\n  duration,\n  delay,\n  easingFunction,\n  update,\n  complete,\n  cancel,\n) {\n  this._tweens = tweens;\n  this._tweenjs = tweenjs;\n\n  this._startObject = clone(startObject);\n  this._stopObject = clone(stopObject);\n\n  this._duration = duration;\n  this._delay = delay;\n  this._easingFunction = easingFunction;\n\n  this._update = update;\n  this._complete = complete;\n\n  /**\n   * The callback to call if the tween is canceled either because {@link Tween#cancelTween}\n   * was called or because the tween was removed from the collection.\n   *\n   * @type {TweenCollection.TweenCancelledCallback}\n   */\n  this.cancel = cancel;\n\n  /**\n   * @private\n   */\n  this.needsStart = true;\n}\n\nObject.defineProperties(Tween.prototype, {\n  /**\n   * An object with properties for initial values of the tween.  The properties of this object are changed during the tween's animation.\n   * @memberof Tween.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  startObject: {\n    get: function () {\n      return this._startObject;\n    },\n  },\n\n  /**\n   * An object with properties for the final values of the tween.\n   * @memberof Tween.prototype\n   *\n   * @type {object}\n   * @readonly\n   */\n  stopObject: {\n    get: function () {\n      return this._stopObject;\n    },\n  },\n\n  /**\n   * The duration, in seconds, for the tween.  The tween is automatically removed from the collection when it stops.\n   * @memberof Tween.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  duration: {\n    get: function () {\n      return this._duration;\n    },\n  },\n\n  /**\n   * The delay, in seconds, before the tween starts animating.\n   * @memberof Tween.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  delay: {\n    get: function () {\n      return this._delay;\n    },\n  },\n\n  /**\n   * Determines the curve for animtion.\n   * @memberof Tween.prototype\n   *\n   * @type {EasingFunction}\n   * @readonly\n   */\n  easingFunction: {\n    get: function () {\n      return this._easingFunction;\n    },\n  },\n\n  /**\n   * The callback to call at each animation update (usually tied to the a rendered frame).\n   * @memberof Tween.prototype\n   *\n   * @type {TweenCollection.TweenUpdateCallback}\n   * @readonly\n   */\n  update: {\n    get: function () {\n      return this._update;\n    },\n  },\n\n  /**\n   * The callback to call when the tween finishes animating.\n   * @memberof Tween.prototype\n   *\n   * @type {TweenCollection.TweenCompleteCallback}\n   * @readonly\n   */\n  complete: {\n    get: function () {\n      return this._complete;\n    },\n  },\n\n  /**\n   * @memberof Tween.prototype\n   *\n   * @private\n   */\n  tweenjs: {\n    get: function () {\n      return this._tweenjs;\n    },\n  },\n});\n\n/**\n * Cancels the tween calling the {@link Tween#cancel} callback if one exists.  This\n * has no effect if the tween finished or was already canceled.\n */\nTween.prototype.cancelTween = function () {\n  this._tweens.remove(this);\n};\n\n/**\n * A collection of tweens for animating properties.  Commonly accessed using {@link Scene#tweens}.\n *\n * @alias TweenCollection\n * @constructor\n *\n * @private\n */\nfunction TweenCollection() {\n  this._tweens = [];\n}\n\nObject.defineProperties(TweenCollection.prototype, {\n  /**\n   * The number of tweens in the collection.\n   * @memberof TweenCollection.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._tweens.length;\n    },\n  },\n});\n\n/**\n * Creates a tween for animating between two sets of properties.  The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {object} [options] Object with the following properties:\n * @param {object} options.startObject An object with properties for initial values of the tween.  The properties of this object are changed during the tween's animation.\n * @param {object} options.stopObject An object with properties for the final values of the tween.\n * @param {number} options.duration The duration, in seconds, for the tween.  The tween is automatically removed from the collection when it stops.\n * @param {number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCompleteCallback} [options.complete] The callback to call when the tween finishes animating.\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.add = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.startObject) || !defined(options.stopObject)) {\n    throw new DeveloperError(\n      \"options.startObject and options.stopObject are required.\",\n    );\n  }\n\n  if (!defined(options.duration) || options.duration < 0.0) {\n    throw new DeveloperError(\n      \"options.duration is required and must be positive.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (options.duration === 0.0) {\n    if (defined(options.complete)) {\n      options.complete();\n    }\n    return new Tween(this);\n  }\n\n  const duration = options.duration / TimeConstants.SECONDS_PER_MILLISECOND;\n  const delayInSeconds = options.delay ?? 0.0;\n  const delay = delayInSeconds / TimeConstants.SECONDS_PER_MILLISECOND;\n  const easingFunction = options.easingFunction ?? EasingFunction.LINEAR_NONE;\n\n  const value = options.startObject;\n  const tweenjs = new TweenJS(value);\n  tweenjs.to(clone(options.stopObject), duration);\n  tweenjs.delay(delay);\n  tweenjs.easing(easingFunction);\n  if (defined(options.update)) {\n    tweenjs.onUpdate(function () {\n      options.update(value);\n    });\n  }\n  tweenjs.onComplete(options.complete ?? null);\n  tweenjs.repeat(options._repeat ?? 0.0);\n\n  const tween = new Tween(\n    this,\n    tweenjs,\n    options.startObject,\n    options.stopObject,\n    options.duration,\n    delayInSeconds,\n    easingFunction,\n    options.update,\n    options.complete,\n    options.cancel,\n  );\n  this._tweens.push(tween);\n  return tween;\n};\n\n/**\n * Creates a tween for animating a scalar property on the given object.  The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {object} [options] Object with the following properties:\n * @param {object} options.object The object containing the property to animate.\n * @param {string} options.property The name of the property to animate.\n * @param {number} options.startValue The initial value.\n * @param {number} options.stopValue The final value.\n * @param {number} [options.duration=3.0] The duration, in seconds, for the tween.  The tween is automatically removed from the collection when it stops.\n * @param {number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCompleteCallback} [options.complete] The callback to call when the tween finishes animating.\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} options.object must have the specified property.\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.addProperty = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const object = options.object;\n  const property = options.property;\n  const startValue = options.startValue;\n  const stopValue = options.stopValue;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(object) || !defined(options.property)) {\n    throw new DeveloperError(\n      \"options.object and options.property are required.\",\n    );\n  }\n  if (!defined(object[property])) {\n    throw new DeveloperError(\n      \"options.object must have the specified property.\",\n    );\n  }\n  if (!defined(startValue) || !defined(stopValue)) {\n    throw new DeveloperError(\n      \"options.startValue and options.stopValue are required.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  function update(value) {\n    object[property] = value.value;\n  }\n\n  return this.add({\n    startObject: {\n      value: startValue,\n    },\n    stopObject: {\n      value: stopValue,\n    },\n    duration: options.duration ?? 3.0,\n    delay: options.delay,\n    easingFunction: options.easingFunction,\n    update: update,\n    complete: options.complete,\n    cancel: options.cancel,\n    _repeat: options._repeat,\n  });\n};\n\n/**\n * Creates a tween for animating the alpha of all color uniforms on a {@link Material}.  The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {object} [options] Object with the following properties:\n * @param {Material} options.material The material to animate.\n * @param {number} [options.startValue=0.0] The initial alpha value.\n * @param {number} [options.stopValue=1.0] The final alpha value.\n * @param {number} [options.duration=3.0] The duration, in seconds, for the tween.  The tween is automatically removed from the collection when it stops.\n * @param {number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCompleteCallback} [options.complete] The callback to call when the tween finishes animating.\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} material has no properties with alpha components.\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.addAlpha = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const material = options.material;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(material)) {\n    throw new DeveloperError(\"options.material is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const properties = [];\n\n  for (const property in material.uniforms) {\n    if (\n      material.uniforms.hasOwnProperty(property) &&\n      defined(material.uniforms[property]) &&\n      defined(material.uniforms[property].alpha)\n    ) {\n      properties.push(property);\n    }\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (properties.length === 0) {\n    throw new DeveloperError(\n      \"material has no properties with alpha components.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  function update(value) {\n    const length = properties.length;\n    for (let i = 0; i < length; ++i) {\n      material.uniforms[properties[i]].alpha = value.alpha;\n    }\n  }\n\n  return this.add({\n    startObject: {\n      alpha: options.startValue ?? 0.0, // Default to fade in\n    },\n    stopObject: {\n      alpha: options.stopValue ?? 1.0,\n    },\n    duration: options.duration ?? 3.0,\n    delay: options.delay,\n    easingFunction: options.easingFunction,\n    update: update,\n    complete: options.complete,\n    cancel: options.cancel,\n  });\n};\n\n/**\n * Creates a tween for animating the offset uniform of a {@link Material}.  The tween starts animating at the next call to {@link TweenCollection#update}, which\n * is implicit when {@link Viewer} or {@link CesiumWidget} render the scene.\n *\n * @param {object} [options] Object with the following properties:\n * @param {Material} options.material The material to animate.\n * @param {number} options.startValue The initial alpha value.\n * @param {number} options.stopValue The final alpha value.\n * @param {number} [options.duration=3.0] The duration, in seconds, for the tween.  The tween is automatically removed from the collection when it stops.\n * @param {number} [options.delay=0.0] The delay, in seconds, before the tween starts animating.\n * @param {EasingFunction} [options.easingFunction=EasingFunction.LINEAR_NONE] Determines the curve for animtion.\n * @param {TweenCollection.TweenUpdateCallback} [options.update] The callback to call at each animation update (usually tied to the a rendered frame).\n * @param {TweenCollection.TweenCancelledCallback} [options.cancel] The callback to call if the tween is canceled either because {@link Tween#cancelTween} was called or because the tween was removed from the collection.\n * @returns {Tween} The tween.\n *\n * @exception {DeveloperError} material.uniforms must have an offset property.\n * @exception {DeveloperError} options.duration must be positive.\n */\nTweenCollection.prototype.addOffsetIncrement = function (options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const material = options.material;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(material)) {\n    throw new DeveloperError(\"material is required.\");\n  }\n  if (!defined(material.uniforms.offset)) {\n    throw new DeveloperError(\"material.uniforms must have an offset property.\");\n  }\n  //>>includeEnd('debug');\n\n  const uniforms = material.uniforms;\n  return this.addProperty({\n    object: uniforms,\n    property: \"offset\",\n    startValue: uniforms.offset,\n    stopValue: uniforms.offset + 1,\n    duration: options.duration,\n    delay: options.delay,\n    easingFunction: options.easingFunction,\n    update: options.update,\n    cancel: options.cancel,\n    _repeat: Infinity,\n  });\n};\n\n/**\n * Removes a tween from the collection.\n * <p>\n * This calls the {@link Tween#cancel} callback if the tween has one.\n * </p>\n *\n * @param {Tween} tween The tween to remove.\n * @returns {boolean} <code>true</code> if the tween was removed; <code>false</code> if the tween was not found in the collection.\n */\nTweenCollection.prototype.remove = function (tween) {\n  if (!defined(tween)) {\n    return false;\n  }\n\n  const index = this._tweens.indexOf(tween);\n  if (index !== -1) {\n    tween.tweenjs.stop();\n    if (defined(tween.cancel)) {\n      tween.cancel();\n    }\n    this._tweens.splice(index, 1);\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Removes all tweens from the collection.\n * <p>\n * This calls the {@link Tween#cancel} callback for each tween that has one.\n * </p>\n */\nTweenCollection.prototype.removeAll = function () {\n  const tweens = this._tweens;\n\n  for (let i = 0; i < tweens.length; ++i) {\n    const tween = tweens[i];\n    tween.tweenjs.stop();\n    if (defined(tween.cancel)) {\n      tween.cancel();\n    }\n  }\n  tweens.length = 0;\n};\n\n/**\n * Determines whether this collection contains a given tween.\n *\n * @param {Tween} tween The tween to check for.\n * @returns {boolean} <code>true</code> if this collection contains the tween, <code>false</code> otherwise.\n */\nTweenCollection.prototype.contains = function (tween) {\n  return defined(tween) && this._tweens.indexOf(tween) !== -1;\n};\n\n/**\n * Returns the tween in the collection at the specified index.  Indices are zero-based\n * and increase as tweens are added.  Removing a tween shifts all tweens after\n * it to the left, changing their indices.  This function is commonly used to iterate over\n * all the tween in the collection.\n *\n * @param {number} index The zero-based index of the tween.\n * @returns {Tween} The tween at the specified index.\n *\n * @example\n * // Output the duration of all the tweens in the collection.\n * const tweens = scene.tweens;\n * const length = tweens.length;\n * for (let i = 0; i < length; ++i) {\n *   console.log(tweens.get(i).duration);\n * }\n */\nTweenCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(index)) {\n    throw new DeveloperError(\"index is required.\");\n  }\n  //>>includeEnd('debug');\n\n  return this._tweens[index];\n};\n\n/**\n * Updates the tweens in the collection to be at the provide time.  When a tween finishes, it is removed\n * from the collection.\n *\n * @param {number} [time=getTimestamp()] The time in seconds.  By default tweens are synced to the system clock.\n */\nTweenCollection.prototype.update = function (time) {\n  const tweens = this._tweens;\n\n  let i = 0;\n  time = defined(time)\n    ? time / TimeConstants.SECONDS_PER_MILLISECOND\n    : getTimestamp();\n  while (i < tweens.length) {\n    const tween = tweens[i];\n    const tweenjs = tween.tweenjs;\n\n    if (tween.needsStart) {\n      tween.needsStart = false;\n      tweenjs.start(time);\n    } else if (tweenjs.update(time)) {\n      i++;\n    } else {\n      tweenjs.stop();\n      tweens.splice(i, 1);\n    }\n  }\n};\n\n/**\n * A function that will execute when a tween completes.\n * @callback TweenCollection.TweenCompleteCallback\n */\n\n/**\n * A function that will execute when a tween updates.\n * @callback TweenCollection.TweenUpdateCallback\n */\n\n/**\n * A function that will execute when a tween is cancelled.\n * @callback TweenCollection.TweenCancelledCallback\n */\nexport default TweenCollection;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport combine from \"../Core/combine.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Event from \"../Core/Event.js\";\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\n\nconst templateRegex = /{[^}]+}/g;\n\nconst tags = {\n  x: xTag,\n  y: yTag,\n  z: zTag,\n  s: sTag,\n  reverseX: reverseXTag,\n  reverseY: reverseYTag,\n  reverseZ: reverseZTag,\n  westDegrees: westDegreesTag,\n  southDegrees: southDegreesTag,\n  eastDegrees: eastDegreesTag,\n  northDegrees: northDegreesTag,\n  westProjected: westProjectedTag,\n  southProjected: southProjectedTag,\n  eastProjected: eastProjectedTag,\n  northProjected: northProjectedTag,\n  width: widthTag,\n  height: heightTag,\n};\n\nconst pickFeaturesTags = combine(tags, {\n  i: iTag,\n  j: jTag,\n  reverseI: reverseITag,\n  reverseJ: reverseJTag,\n  longitudeDegrees: longitudeDegreesTag,\n  latitudeDegrees: latitudeDegreesTag,\n  longitudeProjected: longitudeProjectedTag,\n  latitudeProjected: latitudeProjectedTag,\n  format: formatTag,\n});\n\n/**\n * @typedef {object} UrlTemplateImageryProvider.ConstructorOptions\n *\n * Initialization options for the UrlTemplateImageryProvider constructor\n *\n * @property {Resource|string} url  The URL template to use to request tiles.  It has the following keywords:\n * <ul>\n *     <li><code>{z}</code>: The level of the tile in the tiling scheme.  Level zero is the root of the quadtree pyramid.</li>\n *     <li><code>{x}</code>: The tile X coordinate in the tiling scheme, where 0 is the Westernmost tile.</li>\n *     <li><code>{y}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Northernmost tile.</li>\n *     <li><code>{s}</code>: One of the available subdomains, used to overcome browser limits on the number of simultaneous requests per host.</li>\n *     <li><code>{reverseX}</code>: The tile X coordinate in the tiling scheme, where 0 is the Easternmost tile.</li>\n *     <li><code>{reverseY}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Southernmost tile.</li>\n *     <li><code>{reverseZ}</code>: The level of the tile in the tiling scheme, where level zero is the maximum level of the quadtree pyramid.  In order to use reverseZ, maximumLevel must be defined.</li>\n *     <li><code>{westDegrees}</code>: The Western edge of the tile in geodetic degrees.</li>\n *     <li><code>{southDegrees}</code>: The Southern edge of the tile in geodetic degrees.</li>\n *     <li><code>{eastDegrees}</code>: The Eastern edge of the tile in geodetic degrees.</li>\n *     <li><code>{northDegrees}</code>: The Northern edge of the tile in geodetic degrees.</li>\n *     <li><code>{westProjected}</code>: The Western edge of the tile in projected coordinates of the tiling scheme.</li>\n *     <li><code>{southProjected}</code>: The Southern edge of the tile in projected coordinates of the tiling scheme.</li>\n *     <li><code>{eastProjected}</code>: The Eastern edge of the tile in projected coordinates of the tiling scheme.</li>\n *     <li><code>{northProjected}</code>: The Northern edge of the tile in projected coordinates of the tiling scheme.</li>\n *     <li><code>{width}</code>: The width of each tile in pixels.</li>\n *     <li><code>{height}</code>: The height of each tile in pixels.</li>\n * </ul>\n * @property {Resource|string} [pickFeaturesUrl] The URL template to use to pick features.  If this property is not specified,\n *                 {@link UrlTemplateImageryProvider#pickFeatures} will immediately returned undefined, indicating no\n *                 features picked.  The URL template supports all of the keywords supported by the <code>url</code>\n *                 parameter, plus the following:\n * <ul>\n *     <li><code>{i}</code>: The pixel column (horizontal coordinate) of the picked position, where the Westernmost pixel is 0.</li>\n *     <li><code>{j}</code>: The pixel row (vertical coordinate) of the picked position, where the Northernmost pixel is 0.</li>\n *     <li><code>{reverseI}</code>: The pixel column (horizontal coordinate) of the picked position, where the Easternmost pixel is 0.</li>\n *     <li><code>{reverseJ}</code>: The pixel row (vertical coordinate) of the picked position, where the Southernmost pixel is 0.</li>\n *     <li><code>{longitudeDegrees}</code>: The longitude of the picked position in degrees.</li>\n *     <li><code>{latitudeDegrees}</code>: The latitude of the picked position in degrees.</li>\n *     <li><code>{longitudeProjected}</code>: The longitude of the picked position in the projected coordinates of the tiling scheme.</li>\n *     <li><code>{latitudeProjected}</code>: The latitude of the picked position in the projected coordinates of the tiling scheme.</li>\n *     <li><code>{format}</code>: The format in which to get feature information, as specified in the {@link GetFeatureInfoFormat}.</li>\n * </ul>\n * @property {object} [urlSchemeZeroPadding] Gets the URL scheme zero padding for each tile coordinate. The format is '000' where\n * each coordinate will be padded on the left with zeros to match the width of the passed string of zeros. e.g. Setting:\n * urlSchemeZeroPadding : { '{x}' : '0000'}\n * will cause an 'x' value of 12 to return the string '0012' for {x} in the generated URL.\n * It the passed object has the following keywords:\n * <ul>\n *  <li> <code>{z}</code>: The zero padding for the level of the tile in the tiling scheme.</li>\n *  <li> <code>{x}</code>: The zero padding for the tile X coordinate in the tiling scheme.</li>\n *  <li> <code>{y}</code>: The zero padding for the the tile Y coordinate in the tiling scheme.</li>\n *  <li> <code>{reverseX}</code>: The zero padding for the tile reverseX coordinate in the tiling scheme.</li>\n *  <li> <code>{reverseY}</code>: The zero padding for the tile reverseY coordinate in the tiling scheme.</li>\n *  <li> <code>{reverseZ}</code>: The zero padding for the reverseZ coordinate of the tile in the tiling scheme.</li>\n * </ul>\n * @property {string|string[]} [subdomains='abc'] The subdomains to use for the <code>{s}</code> placeholder in the URL template.\n *                          If this parameter is a single string, each character in the string is a subdomain.  If it is\n *                          an array, each element in the array is a subdomain.\n * @property {Credit|string} [credit=''] A credit for the data source, which is displayed on the canvas.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when specifying\n *                 this that the number of tiles at the minimum level is small, such as four or less.  A larger number is likely\n *                 to result in rendering problems.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the image.\n * @property {TilingScheme} [tilingScheme=WebMercatorTilingScheme] The tiling scheme specifying how the ellipsoidal\n * surface is broken into tiles.  If this parameter is not provided, a {@link WebMercatorTilingScheme}\n * is used.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If the tilingScheme is specified,\n *                    this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n *                    parameter is specified, the WGS84 ellipsoid is used.\n * @property {number} [tileWidth=256] Pixel width of image tiles.\n * @property {number} [tileHeight=256] Pixel height of image tiles.\n * @property {boolean} [hasAlphaChannel=true] true if the images provided by this imagery provider\n *                  include an alpha channel; otherwise, false.  If this property is false, an alpha channel, if\n *                  present, will be ignored.  If this property is true, any images without an alpha channel will\n *                  be treated as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n *                  and texture upload time are potentially reduced.\n * @property {GetFeatureInfoFormat[]} [getFeatureInfoFormats] The formats in which to get feature information at a\n *                                 specific location when {@link UrlTemplateImageryProvider#pickFeatures} is invoked.  If this\n *                                 parameter is not specified, feature picking is disabled.\n * @property {boolean} [enablePickFeatures=true] If true, {@link UrlTemplateImageryProvider#pickFeatures} will\n *        request the <code>pickFeaturesUrl</code> and attempt to interpret the features included in the response.  If false,\n *        {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable\n *        features) without communicating with the server.  Set this property to false if you know your data\n *        source does not support picking features or if you don't want this provider's features to be pickable. Note\n *        that this can be dynamically overridden by modifying the {@link UriTemplateImageryProvider#enablePickFeatures}\n *        property.\n * @property {TileDiscardPolicy} [tileDiscardPolicy] A policy for discarding tile images according to some criteria\n * @property {object} [customTags] Allow to replace custom keywords in the URL template. The object must have strings as keys and functions as values.\n */\n\n/**\n * Provides imagery by requesting tiles using a specified URL template.\n *\n * @alias UrlTemplateImageryProvider\n * @constructor\n *\n * @param {UrlTemplateImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @example\n * // Access Natural Earth II imagery, which uses a TMS tiling scheme and Geographic (EPSG:4326) project\n * const tms = new Cesium.UrlTemplateImageryProvider({\n *     url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII') + '/{z}/{x}/{reverseY}.jpg',\n *     tilingScheme : new Cesium.GeographicTilingScheme(),\n *     maximumLevel : 5\n * });\n * // Access the CartoDB Positron basemap, which uses an OpenStreetMap-like tiling scheme.\n * const positron = new Cesium.UrlTemplateImageryProvider({\n *     url : 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',\n *     credit : 'Map tiles by CartoDB, under CC BY 3.0. Data by OpenStreetMap, under ODbL.'\n * });\n * // Access a Web Map Service (WMS) server.\n * const wms = new Cesium.UrlTemplateImageryProvider({\n *    url : 'https://services.ga.gov.au/gis/services/NM_Hydrology_and_Marine_Points/MapServer/WMSServer?' +\n *          'tiled=true&transparent=true&format=image%2Fpng&exceptions=application%2Fvnd.ogc.se_xml&' +\n *          'styles=&service=WMS&version=1.3.0&request=GetMap&' +\n *          'layers=Bores&crs=EPSG%3A3857&' +\n *          'bbox={westProjected}%2C{southProjected}%2C{eastProjected}%2C{northProjected}&' +\n *          'width=256&height=256',\n *    rectangle : Cesium.Rectangle.fromDegrees(95.0, -55.0, 170.0, -1.0)  // From GetCapabilities EX_GeographicBoundingBox\n * });\n * // Using custom tags in your template url.\n * const custom = new Cesium.UrlTemplateImageryProvider({\n *    url : 'https://yoururl/{Time}/{z}/{y}/{x}.png',\n *    customTags : {\n *        Time: function(imageryProvider, x, y, level) {\n *            return '20171231'\n *        }\n *    }\n * });\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n */\nfunction UrlTemplateImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._errorEvent = new Event();\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"options.url\", options.url);\n  //>>includeEnd('debug');\n\n  const resource = Resource.createIfNeeded(options.url);\n  const pickFeaturesResource = Resource.createIfNeeded(options.pickFeaturesUrl);\n\n  this._resource = resource;\n  this._urlSchemeZeroPadding = options.urlSchemeZeroPadding;\n  this._getFeatureInfoFormats = options.getFeatureInfoFormats;\n  this._pickFeaturesResource = pickFeaturesResource;\n\n  let subdomains = options.subdomains;\n  if (Array.isArray(subdomains)) {\n    subdomains = subdomains.slice();\n  } else if (defined(subdomains) && subdomains.length > 0) {\n    subdomains = subdomains.split(\"\");\n  } else {\n    subdomains = [\"a\", \"b\", \"c\"];\n  }\n  this._subdomains = subdomains;\n\n  this._tileWidth = options.tileWidth ?? 256;\n  this._tileHeight = options.tileHeight ?? 256;\n  this._minimumLevel = options.minimumLevel ?? 0;\n  this._maximumLevel = options.maximumLevel;\n  this._tilingScheme =\n    options.tilingScheme ??\n    new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid });\n\n  this._rectangle = options.rectangle ?? this._tilingScheme.rectangle;\n  this._rectangle = Rectangle.intersection(\n    this._rectangle,\n    this._tilingScheme.rectangle,\n  );\n\n  this._tileDiscardPolicy = options.tileDiscardPolicy;\n\n  let credit = options.credit;\n  if (typeof credit === \"string\") {\n    credit = new Credit(credit);\n  }\n  this._credit = credit;\n  this._hasAlphaChannel = options.hasAlphaChannel ?? true;\n\n  const customTags = options.customTags;\n  const allTags = combine(tags, customTags);\n  const allPickFeaturesTags = combine(pickFeaturesTags, customTags);\n  this._tags = allTags;\n  this._pickFeaturesTags = allPickFeaturesTags;\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  /**\n   * Gets or sets a value indicating whether feature picking is enabled.  If true, {@link UrlTemplateImageryProvider#pickFeatures} will\n   * request the <code>options.pickFeaturesUrl</code> and attempt to interpret the features included in the response.  If false,\n   * {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable\n   * features) without communicating with the server.  Set this property to false if you know your data\n   * source does not support picking features or if you don't want this provider's features to be pickable.\n   * @type {boolean}\n   * @default true\n   */\n  this.enablePickFeatures = options.enablePickFeatures ?? true;\n}\n\nObject.defineProperties(UrlTemplateImageryProvider.prototype, {\n  /**\n   * Gets the URL template to use to request tiles.  It has the following keywords:\n   * <ul>\n   *  <li> <code>{z}</code>: The level of the tile in the tiling scheme.  Level zero is the root of the quadtree pyramid.</li>\n   *  <li> <code>{x}</code>: The tile X coordinate in the tiling scheme, where 0 is the Westernmost tile.</li>\n   *  <li> <code>{y}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Northernmost tile.</li>\n   *  <li> <code>{s}</code>: One of the available subdomains, used to overcome browser limits on the number of simultaneous requests per host.</li>\n   *  <li> <code>{reverseX}</code>: The tile X coordinate in the tiling scheme, where 0 is the Easternmost tile.</li>\n   *  <li> <code>{reverseY}</code>: The tile Y coordinate in the tiling scheme, where 0 is the Southernmost tile.</li>\n   *  <li> <code>{reverseZ}</code>: The level of the tile in the tiling scheme, where level zero is the maximum level of the quadtree pyramid.  In order to use reverseZ, maximumLevel must be defined.</li>\n   *  <li> <code>{westDegrees}</code>: The Western edge of the tile in geodetic degrees.</li>\n   *  <li> <code>{southDegrees}</code>: The Southern edge of the tile in geodetic degrees.</li>\n   *  <li> <code>{eastDegrees}</code>: The Eastern edge of the tile in geodetic degrees.</li>\n   *  <li> <code>{northDegrees}</code>: The Northern edge of the tile in geodetic degrees.</li>\n   *  <li> <code>{westProjected}</code>: The Western edge of the tile in projected coordinates of the tiling scheme.</li>\n   *  <li> <code>{southProjected}</code>: The Southern edge of the tile in projected coordinates of the tiling scheme.</li>\n   *  <li> <code>{eastProjected}</code>: The Eastern edge of the tile in projected coordinates of the tiling scheme.</li>\n   *  <li> <code>{northProjected}</code>: The Northern edge of the tile in projected coordinates of the tiling scheme.</li>\n   *  <li> <code>{width}</code>: The width of each tile in pixels.</li>\n   *  <li> <code>{height}</code>: The height of each tile in pixels.</li>\n   * </ul>\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource.url;\n    },\n  },\n\n  /**\n   * Gets the URL scheme zero padding for each tile coordinate. The format is '000' where each coordinate will be padded on\n   * the left with zeros to match the width of the passed string of zeros. e.g. Setting:\n   * urlSchemeZeroPadding : { '{x}' : '0000'}\n   * will cause an 'x' value of 12 to return the string '0012' for {x} in the generated URL.\n   * It has the following keywords:\n   * <ul>\n   *  <li> <code>{z}</code>: The zero padding for the level of the tile in the tiling scheme.</li>\n   *  <li> <code>{x}</code>: The zero padding for the tile X coordinate in the tiling scheme.</li>\n   *  <li> <code>{y}</code>: The zero padding for the the tile Y coordinate in the tiling scheme.</li>\n   *  <li> <code>{reverseX}</code>: The zero padding for the tile reverseX coordinate in the tiling scheme.</li>\n   *  <li> <code>{reverseY}</code>: The zero padding for the tile reverseY coordinate in the tiling scheme.</li>\n   *  <li> <code>{reverseZ}</code>: The zero padding for the reverseZ coordinate of the tile in the tiling scheme.</li>\n   * </ul>\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {object}\n   * @readonly\n   */\n  urlSchemeZeroPadding: {\n    get: function () {\n      return this._urlSchemeZeroPadding;\n    },\n  },\n\n  /**\n   * Gets the URL template to use to use to pick features.  If this property is not specified,\n   * {@link UrlTemplateImageryProvider#pickFeatures} will immediately return undefined, indicating no\n   * features picked.  The URL template supports all of the keywords supported by the\n   * {@link UrlTemplateImageryProvider#url} property, plus the following:\n   * <ul>\n   *     <li><code>{i}</code>: The pixel column (horizontal coordinate) of the picked position, where the Westernmost pixel is 0.</li>\n   *     <li><code>{j}</code>: The pixel row (vertical coordinate) of the picked position, where the Northernmost pixel is 0.</li>\n   *     <li><code>{reverseI}</code>: The pixel column (horizontal coordinate) of the picked position, where the Easternmost pixel is 0.</li>\n   *     <li><code>{reverseJ}</code>: The pixel row (vertical coordinate) of the picked position, where the Southernmost pixel is 0.</li>\n   *     <li><code>{longitudeDegrees}</code>: The longitude of the picked position in degrees.</li>\n   *     <li><code>{latitudeDegrees}</code>: The latitude of the picked position in degrees.</li>\n   *     <li><code>{longitudeProjected}</code>: The longitude of the picked position in the projected coordinates of the tiling scheme.</li>\n   *     <li><code>{latitudeProjected}</code>: The latitude of the picked position in the projected coordinates of the tiling scheme.</li>\n   *     <li><code>{format}</code>: The format in which to get feature information, as specified in the {@link GetFeatureInfoFormat}.</li>\n   * </ul>\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  pickFeaturesUrl: {\n    get: function () {\n      return this._pickFeaturesResource.url;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   * @default undefined\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   * @default 256\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   * @default 256\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested, or undefined if there is no limit.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   * @default undefined\n   */\n  maximumLevel: {\n    get: function () {\n      return this._maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   * @default 0\n   */\n  minimumLevel: {\n    get: function () {\n      return this._minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   * @default new WebMercatorTilingScheme()\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   * @default tilingScheme.rectangle\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   * @default undefined\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   * @default undefined\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof UrlTemplateImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   * @default true\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return this._hasAlphaChannel;\n    },\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nUrlTemplateImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  return undefined;\n};\n\n/**\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nUrlTemplateImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  return ImageryProvider.loadImage(\n    this,\n    buildImageResource(this, x, y, level, request),\n  );\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n *                   instances.  The array may be empty if no features are found at the given location.\n *                   It may also be undefined if picking is not supported.\n */\nUrlTemplateImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  if (\n    !this.enablePickFeatures ||\n    !defined(this._pickFeaturesResource) ||\n    this._getFeatureInfoFormats.length === 0\n  ) {\n    return undefined;\n  }\n\n  let formatIndex = 0;\n\n  const that = this;\n\n  function handleResponse(format, data) {\n    return format.callback(data);\n  }\n\n  function doRequest() {\n    if (formatIndex >= that._getFeatureInfoFormats.length) {\n      // No valid formats, so no features picked.\n      return Promise.resolve([]);\n    }\n\n    const format = that._getFeatureInfoFormats[formatIndex];\n    const resource = buildPickFeaturesResource(\n      that,\n      x,\n      y,\n      level,\n      longitude,\n      latitude,\n      format.format,\n    );\n\n    ++formatIndex;\n\n    if (format.type === \"json\") {\n      return resource.fetchJson().then(format.callback).catch(doRequest);\n    } else if (format.type === \"xml\") {\n      return resource.fetchXML().then(format.callback).catch(doRequest);\n    } else if (format.type === \"text\" || format.type === \"html\") {\n      return resource.fetchText().then(format.callback).catch(doRequest);\n    }\n    return resource\n      .fetch({\n        responseType: format.format,\n      })\n      .then(handleResponse.bind(undefined, format))\n      .catch(doRequest);\n  }\n\n  return doRequest();\n};\n\nlet degreesScratchComputed = false;\nconst degreesScratch = new Rectangle();\nlet projectedScratchComputed = false;\nconst projectedScratch = new Rectangle();\n\nfunction buildImageResource(imageryProvider, x, y, level, request) {\n  degreesScratchComputed = false;\n  projectedScratchComputed = false;\n\n  const resource = imageryProvider._resource;\n  const url = resource.getUrlComponent(true);\n  const allTags = imageryProvider._tags;\n  const templateValues = {};\n\n  const match = url.match(templateRegex);\n  if (defined(match)) {\n    match.forEach(function (tag) {\n      const key = tag.substring(1, tag.length - 1); //strip {}\n      if (defined(allTags[key])) {\n        templateValues[key] = allTags[key](imageryProvider, x, y, level);\n      }\n    });\n  }\n\n  return resource.getDerivedResource({\n    request: request,\n    templateValues: templateValues,\n  });\n}\n\nlet ijScratchComputed = false;\nconst ijScratch = new Cartesian2();\nlet longitudeLatitudeProjectedScratchComputed = false;\n\nfunction buildPickFeaturesResource(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  degreesScratchComputed = false;\n  projectedScratchComputed = false;\n  ijScratchComputed = false;\n  longitudeLatitudeProjectedScratchComputed = false;\n\n  const resource = imageryProvider._pickFeaturesResource;\n  const url = resource.getUrlComponent(true);\n  const allTags = imageryProvider._pickFeaturesTags;\n  const templateValues = {};\n  const match = url.match(templateRegex);\n  if (defined(match)) {\n    match.forEach(function (tag) {\n      const key = tag.substring(1, tag.length - 1); //strip {}\n      if (defined(allTags[key])) {\n        templateValues[key] = allTags[key](\n          imageryProvider,\n          x,\n          y,\n          level,\n          longitude,\n          latitude,\n          format,\n        );\n      }\n    });\n  }\n\n  return resource.getDerivedResource({\n    templateValues: templateValues,\n  });\n}\n\nfunction padWithZerosIfNecessary(imageryProvider, key, value) {\n  if (\n    imageryProvider &&\n    imageryProvider.urlSchemeZeroPadding &&\n    imageryProvider.urlSchemeZeroPadding.hasOwnProperty(key)\n  ) {\n    const paddingTemplate = imageryProvider.urlSchemeZeroPadding[key];\n    if (typeof paddingTemplate === \"string\") {\n      const paddingTemplateWidth = paddingTemplate.length;\n      if (paddingTemplateWidth > 1) {\n        value =\n          value.length >= paddingTemplateWidth\n            ? value\n            : new Array(\n                paddingTemplateWidth - value.toString().length + 1,\n              ).join(\"0\") + value;\n      }\n    }\n  }\n  return value;\n}\n\nfunction xTag(imageryProvider, x, y, level) {\n  return padWithZerosIfNecessary(imageryProvider, \"{x}\", x);\n}\n\nfunction reverseXTag(imageryProvider, x, y, level) {\n  const reverseX =\n    imageryProvider.tilingScheme.getNumberOfXTilesAtLevel(level) - x - 1;\n  return padWithZerosIfNecessary(imageryProvider, \"{reverseX}\", reverseX);\n}\n\nfunction yTag(imageryProvider, x, y, level) {\n  return padWithZerosIfNecessary(imageryProvider, \"{y}\", y);\n}\n\nfunction reverseYTag(imageryProvider, x, y, level) {\n  const reverseY =\n    imageryProvider.tilingScheme.getNumberOfYTilesAtLevel(level) - y - 1;\n  return padWithZerosIfNecessary(imageryProvider, \"{reverseY}\", reverseY);\n}\n\nfunction reverseZTag(imageryProvider, x, y, level) {\n  const maximumLevel = imageryProvider.maximumLevel;\n  const reverseZ =\n    defined(maximumLevel) && level < maximumLevel\n      ? maximumLevel - level - 1\n      : level;\n  return padWithZerosIfNecessary(imageryProvider, \"{reverseZ}\", reverseZ);\n}\n\nfunction zTag(imageryProvider, x, y, level) {\n  return padWithZerosIfNecessary(imageryProvider, \"{z}\", level);\n}\n\nfunction sTag(imageryProvider, x, y, level) {\n  const index = (x + y + level) % imageryProvider._subdomains.length;\n  return imageryProvider._subdomains[index];\n}\n\nfunction computeDegrees(imageryProvider, x, y, level) {\n  if (degreesScratchComputed) {\n    return;\n  }\n\n  imageryProvider.tilingScheme.tileXYToRectangle(x, y, level, degreesScratch);\n  degreesScratch.west = CesiumMath.toDegrees(degreesScratch.west);\n  degreesScratch.south = CesiumMath.toDegrees(degreesScratch.south);\n  degreesScratch.east = CesiumMath.toDegrees(degreesScratch.east);\n  degreesScratch.north = CesiumMath.toDegrees(degreesScratch.north);\n\n  degreesScratchComputed = true;\n}\n\nfunction westDegreesTag(imageryProvider, x, y, level) {\n  computeDegrees(imageryProvider, x, y, level);\n  return degreesScratch.west;\n}\n\nfunction southDegreesTag(imageryProvider, x, y, level) {\n  computeDegrees(imageryProvider, x, y, level);\n  return degreesScratch.south;\n}\n\nfunction eastDegreesTag(imageryProvider, x, y, level) {\n  computeDegrees(imageryProvider, x, y, level);\n  return degreesScratch.east;\n}\n\nfunction northDegreesTag(imageryProvider, x, y, level) {\n  computeDegrees(imageryProvider, x, y, level);\n  return degreesScratch.north;\n}\n\nfunction computeProjected(imageryProvider, x, y, level) {\n  if (projectedScratchComputed) {\n    return;\n  }\n\n  imageryProvider.tilingScheme.tileXYToNativeRectangle(\n    x,\n    y,\n    level,\n    projectedScratch,\n  );\n\n  projectedScratchComputed = true;\n}\n\nfunction westProjectedTag(imageryProvider, x, y, level) {\n  computeProjected(imageryProvider, x, y, level);\n  return projectedScratch.west;\n}\n\nfunction southProjectedTag(imageryProvider, x, y, level) {\n  computeProjected(imageryProvider, x, y, level);\n  return projectedScratch.south;\n}\n\nfunction eastProjectedTag(imageryProvider, x, y, level) {\n  computeProjected(imageryProvider, x, y, level);\n  return projectedScratch.east;\n}\n\nfunction northProjectedTag(imageryProvider, x, y, level) {\n  computeProjected(imageryProvider, x, y, level);\n  return projectedScratch.north;\n}\n\nfunction widthTag(imageryProvider, x, y, level) {\n  return imageryProvider.tileWidth;\n}\n\nfunction heightTag(imageryProvider, x, y, level) {\n  return imageryProvider.tileHeight;\n}\n\nfunction iTag(imageryProvider, x, y, level, longitude, latitude, format) {\n  computeIJ(imageryProvider, x, y, level, longitude, latitude);\n  return ijScratch.x;\n}\n\nfunction jTag(imageryProvider, x, y, level, longitude, latitude, format) {\n  computeIJ(imageryProvider, x, y, level, longitude, latitude);\n  return ijScratch.y;\n}\n\nfunction reverseITag(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  computeIJ(imageryProvider, x, y, level, longitude, latitude);\n  return imageryProvider.tileWidth - ijScratch.x - 1;\n}\n\nfunction reverseJTag(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  computeIJ(imageryProvider, x, y, level, longitude, latitude);\n  return imageryProvider.tileHeight - ijScratch.y - 1;\n}\n\nconst rectangleScratch = new Rectangle();\nconst longitudeLatitudeProjectedScratch = new Cartesian3();\n\nfunction computeIJ(imageryProvider, x, y, level, longitude, latitude, format) {\n  if (ijScratchComputed) {\n    return;\n  }\n\n  computeLongitudeLatitudeProjected(\n    imageryProvider,\n    x,\n    y,\n    level,\n    longitude,\n    latitude,\n  );\n  const projected = longitudeLatitudeProjectedScratch;\n\n  const rectangle = imageryProvider.tilingScheme.tileXYToNativeRectangle(\n    x,\n    y,\n    level,\n    rectangleScratch,\n  );\n  ijScratch.x =\n    ((imageryProvider.tileWidth * (projected.x - rectangle.west)) /\n      rectangle.width) |\n    0;\n  ijScratch.y =\n    ((imageryProvider.tileHeight * (rectangle.north - projected.y)) /\n      rectangle.height) |\n    0;\n  ijScratchComputed = true;\n}\n\nfunction longitudeDegreesTag(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  return CesiumMath.toDegrees(longitude);\n}\n\nfunction latitudeDegreesTag(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  return CesiumMath.toDegrees(latitude);\n}\n\nfunction longitudeProjectedTag(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  computeLongitudeLatitudeProjected(\n    imageryProvider,\n    x,\n    y,\n    level,\n    longitude,\n    latitude,\n  );\n  return longitudeLatitudeProjectedScratch.x;\n}\n\nfunction latitudeProjectedTag(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  computeLongitudeLatitudeProjected(\n    imageryProvider,\n    x,\n    y,\n    level,\n    longitude,\n    latitude,\n  );\n  return longitudeLatitudeProjectedScratch.y;\n}\n\nconst cartographicScratch = new Cartographic();\n\nfunction computeLongitudeLatitudeProjected(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  format,\n) {\n  if (longitudeLatitudeProjectedScratchComputed) {\n    return;\n  }\n\n  if (imageryProvider.tilingScheme.projection instanceof GeographicProjection) {\n    longitudeLatitudeProjectedScratch.x = CesiumMath.toDegrees(longitude);\n    longitudeLatitudeProjectedScratch.y = CesiumMath.toDegrees(latitude);\n  } else {\n    const cartographic = cartographicScratch;\n    cartographic.longitude = longitude;\n    cartographic.latitude = latitude;\n    imageryProvider.tilingScheme.projection.project(\n      cartographic,\n      longitudeLatitudeProjectedScratch,\n    );\n  }\n\n  longitudeLatitudeProjectedScratchComputed = true;\n}\n\nfunction formatTag(imageryProvider, x, y, level, longitude, latitude, format) {\n  return format;\n}\nexport default UrlTemplateImageryProvider;\n","/**\n * Describes a renderable batch of geometry.\n *\n * @alias Vector3DTileBatch\n * @constructor\n *\n * @param {object} options An object with the following properties:\n * @param {number} options.offset The offset of the batch into the indices buffer.\n * @param {number} options.count The number of indices in the batch.\n * @param {Color} options.color The color of the geometry in the batch.\n * @param {number[]} options.batchIds An array where each element is the batch id of the geometry in the batch.\n *\n * @private\n */\nfunction Vector3DTileBatch(options) {\n  /**\n   * The offset of the batch into the indices buffer.\n   * @type {number}\n   */\n  this.offset = options.offset;\n  /**\n   * The number of indices in the batch.\n   * @type {number}\n   */\n  this.count = options.count;\n  /**\n   * The color of the geometry in the batch.\n   * @type {Color}\n   */\n  this.color = options.color;\n  /**\n   * An array where each element is the batch id of the geometry in the batch.\n   * @type {number[]}\n   */\n  this.batchIds = options.batchIds;\n}\nexport default Vector3DTileBatch;\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport Vector3DTileClampedPolylinesVS from \"../Shaders/Vector3DTileClampedPolylinesVS.js\";\nimport Vector3DTileClampedPolylinesFS from \"../Shaders/Vector3DTileClampedPolylinesFS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport CullFace from \"./CullFace.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\nimport Vector3DTilePolylines from \"./Vector3DTilePolylines.js\";\n\n/**\n * Creates a batch of polylines as volumes with shader-adjustable width.\n *\n * @alias Vector3DTileClampedPolylines\n * @constructor\n *\n * @param {object} options An object with following properties:\n * @param {Uint16Array} options.positions The positions of the polylines\n * @param {Uint32Array} options.counts The number or positions in the each polyline.\n * @param {Uint16Array} options.widths The width of each polyline.\n * @param {number} options.minimumHeight The minimum height of the tile's region.\n * @param {number} options.maximumHeight The maximum height of the tile's region.\n * @param {Rectangle} options.rectangle The rectangle containing the tile.\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The RTC center.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched polylines.\n * @param {Uint16Array} options.batchIds The batch ids for each polyline.\n * @param {ClassificationType} options.classificationType The classification type.\n * @param {boolean} options.keepDecodedPositions Whether to keep decoded positions in memory.\n *\n * @private\n */\nfunction Vector3DTileClampedPolylines(options) {\n  // these arrays hold data from the tile payload\n  // and are all released after the first update.\n  this._positions = options.positions;\n  this._widths = options.widths;\n  this._counts = options.counts;\n  this._batchIds = options.batchIds;\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.WGS84;\n  this._minimumHeight = options.minimumHeight;\n  this._maximumHeight = options.maximumHeight;\n  this._center = options.center;\n  this._rectangle = options.rectangle;\n\n  this._batchTable = options.batchTable;\n\n  this._va = undefined;\n  this._sp = undefined;\n  this._rs = undefined;\n  this._uniformMap = undefined;\n  this._command = undefined;\n\n  this._transferrableBatchIds = undefined;\n  this._packedBuffer = undefined;\n  this._minimumMaximumVectorHeights = new Cartesian2(\n    ApproximateTerrainHeights._defaultMinTerrainHeight,\n    ApproximateTerrainHeights._defaultMaxTerrainHeight,\n  );\n  this._boundingVolume = OrientedBoundingBox.fromRectangle(\n    options.rectangle,\n    ApproximateTerrainHeights._defaultMinTerrainHeight,\n    ApproximateTerrainHeights._defaultMaxTerrainHeight,\n    this._ellipsoid,\n  );\n  this._classificationType = options.classificationType;\n\n  this._keepDecodedPositions = options.keepDecodedPositions;\n  this._decodedPositions = undefined;\n  this._decodedPositionOffsets = undefined;\n\n  // Fat vertices - all information for each volume packed to a vec3 and 5 vec4s\n  this._startEllipsoidNormals = undefined;\n  this._endEllipsoidNormals = undefined;\n  this._startPositionAndHeights = undefined;\n  this._startFaceNormalAndVertexCornerIds = undefined;\n  this._endPositionAndHeights = undefined;\n  this._endFaceNormalAndHalfWidths = undefined;\n  this._vertexBatchIds = undefined;\n\n  this._indices = undefined;\n\n  this._constantColor = Color.clone(Color.WHITE);\n  this._highlightColor = this._constantColor;\n\n  this._trianglesLength = 0;\n  this._geometryByteLength = 0;\n\n  this._ready = false;\n  this._promise = undefined;\n  this._error = undefined;\n}\n\nObject.defineProperties(Vector3DTileClampedPolylines.prototype, {\n  /**\n   * Gets the number of triangles.\n   *\n   * @memberof Vector3DTileClampedPolylines.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  trianglesLength: {\n    get: function () {\n      return this._trianglesLength;\n    },\n  },\n\n  /**\n   * Gets the geometry memory in bytes.\n   *\n   * @memberof Vector3DTileClampedPolylines.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  geometryByteLength: {\n    get: function () {\n      return this._geometryByteLength;\n    },\n  },\n\n  /**\n   * Returns true when the primitive is ready to render.\n   * @memberof Vector3DTileClampedPolylines.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\nfunction updateMinimumMaximumHeights(polylines, rectangle, ellipsoid) {\n  const result = ApproximateTerrainHeights.getMinimumMaximumHeights(\n    rectangle,\n    ellipsoid,\n  );\n  const min = result.minimumTerrainHeight;\n  const max = result.maximumTerrainHeight;\n  const minimumMaximumVectorHeights = polylines._minimumMaximumVectorHeights;\n  minimumMaximumVectorHeights.x = min;\n  minimumMaximumVectorHeights.y = max;\n\n  const obb = polylines._boundingVolume;\n  const rect = polylines._rectangle;\n  OrientedBoundingBox.fromRectangle(rect, min, max, ellipsoid, obb);\n}\n\nfunction packBuffer(polylines) {\n  const rectangle = polylines._rectangle;\n  const minimumHeight = polylines._minimumHeight;\n  const maximumHeight = polylines._maximumHeight;\n  const ellipsoid = polylines._ellipsoid;\n  const center = polylines._center;\n\n  const packedLength =\n    2 +\n    Rectangle.packedLength +\n    Ellipsoid.packedLength +\n    Cartesian3.packedLength;\n  const packedBuffer = new Float64Array(packedLength);\n\n  let offset = 0;\n  packedBuffer[offset++] = minimumHeight;\n  packedBuffer[offset++] = maximumHeight;\n\n  Rectangle.pack(rectangle, packedBuffer, offset);\n  offset += Rectangle.packedLength;\n\n  Ellipsoid.pack(ellipsoid, packedBuffer, offset);\n  offset += Ellipsoid.packedLength;\n\n  Cartesian3.pack(center, packedBuffer, offset);\n\n  return packedBuffer;\n}\n\nconst createVerticesTaskProcessor = new TaskProcessor(\n  \"createVectorTileClampedPolylines\",\n);\nconst attributeLocations = {\n  startEllipsoidNormal: 0,\n  endEllipsoidNormal: 1,\n  startPositionAndHeight: 2,\n  endPositionAndHeight: 3,\n  startFaceNormalAndVertexCorner: 4,\n  endFaceNormalAndHalfWidth: 5,\n  a_batchId: 6,\n};\n\nfunction createVertexArray(polylines, context) {\n  if (defined(polylines._va)) {\n    return;\n  }\n\n  let positions = polylines._positions;\n  let widths = polylines._widths;\n  let counts = polylines._counts;\n  let batchIds = polylines._transferrableBatchIds;\n\n  let packedBuffer = polylines._packedBuffer;\n\n  if (!defined(packedBuffer)) {\n    // Copy because they may be the views on the same buffer.\n    positions = polylines._positions = positions.slice();\n    widths = polylines._widths = widths.slice();\n    counts = polylines._counts = counts.slice();\n\n    batchIds = polylines._transferrableBatchIds = polylines._batchIds.slice();\n\n    packedBuffer = polylines._packedBuffer = packBuffer(polylines);\n  }\n\n  const transferrableObjects = [\n    positions.buffer,\n    widths.buffer,\n    counts.buffer,\n    batchIds.buffer,\n    packedBuffer.buffer,\n  ];\n  const parameters = {\n    positions: positions.buffer,\n    widths: widths.buffer,\n    counts: counts.buffer,\n    batchIds: batchIds.buffer,\n    packedBuffer: packedBuffer.buffer,\n    keepDecodedPositions: polylines._keepDecodedPositions,\n  };\n\n  const verticesPromise = createVerticesTaskProcessor.scheduleTask(\n    parameters,\n    transferrableObjects,\n  );\n  if (!defined(verticesPromise)) {\n    // Postponed\n    return;\n  }\n\n  return verticesPromise\n    .then(function (result) {\n      if (polylines.isDestroyed()) {\n        return;\n      }\n\n      if (polylines._keepDecodedPositions) {\n        polylines._decodedPositions = new Float64Array(result.decodedPositions);\n        polylines._decodedPositionOffsets = new Uint32Array(\n          result.decodedPositionOffsets,\n        );\n      }\n\n      polylines._startEllipsoidNormals = new Float32Array(\n        result.startEllipsoidNormals,\n      );\n      polylines._endEllipsoidNormals = new Float32Array(\n        result.endEllipsoidNormals,\n      );\n      polylines._startPositionAndHeights = new Float32Array(\n        result.startPositionAndHeights,\n      );\n      polylines._startFaceNormalAndVertexCornerIds = new Float32Array(\n        result.startFaceNormalAndVertexCornerIds,\n      );\n      polylines._endPositionAndHeights = new Float32Array(\n        result.endPositionAndHeights,\n      );\n      polylines._endFaceNormalAndHalfWidths = new Float32Array(\n        result.endFaceNormalAndHalfWidths,\n      );\n      polylines._vertexBatchIds = new Uint16Array(result.vertexBatchIds);\n\n      const indexDatatype = result.indexDatatype;\n      polylines._indices =\n        indexDatatype === IndexDatatype.UNSIGNED_SHORT\n          ? new Uint16Array(result.indices)\n          : new Uint32Array(result.indices);\n\n      finishVertexArray(polylines, context);\n      polylines._ready = true;\n    })\n    .catch((error) => {\n      if (polylines.isDestroyed()) {\n        return;\n      }\n\n      // Throw the error next frame\n      polylines._error = error;\n    });\n}\n\nfunction finishVertexArray(polylines, context) {\n  if (!defined(polylines._va)) {\n    const startEllipsoidNormals = polylines._startEllipsoidNormals;\n    const endEllipsoidNormals = polylines._endEllipsoidNormals;\n    const startPositionAndHeights = polylines._startPositionAndHeights;\n    const endPositionAndHeights = polylines._endPositionAndHeights;\n    const startFaceNormalAndVertexCornerIds =\n      polylines._startFaceNormalAndVertexCornerIds;\n    const endFaceNormalAndHalfWidths = polylines._endFaceNormalAndHalfWidths;\n    const batchIdAttribute = polylines._vertexBatchIds;\n\n    const indices = polylines._indices;\n\n    let byteLength =\n      startEllipsoidNormals.byteLength + endEllipsoidNormals.byteLength;\n    byteLength +=\n      startPositionAndHeights.byteLength + endPositionAndHeights.byteLength;\n    byteLength +=\n      startFaceNormalAndVertexCornerIds.byteLength +\n      endFaceNormalAndHalfWidths.byteLength;\n    byteLength += batchIdAttribute.byteLength + indices.byteLength;\n\n    polylines._trianglesLength = indices.length / 3;\n    polylines._geometryByteLength = byteLength;\n\n    const startEllipsoidNormalsBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: startEllipsoidNormals,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const endEllipsoidNormalsBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: endEllipsoidNormals,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const startPositionAndHeightsBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: startPositionAndHeights,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const endPositionAndHeightsBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: endPositionAndHeights,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const startFaceNormalAndVertexCornerIdsBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: startFaceNormalAndVertexCornerIds,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const endFaceNormalAndHalfWidthsBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: endFaceNormalAndHalfWidths,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const batchIdAttributeBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: batchIdAttribute,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n\n    const indexBuffer = Buffer.createIndexBuffer({\n      context: context,\n      typedArray: indices,\n      usage: BufferUsage.STATIC_DRAW,\n      indexDatatype:\n        indices.BYTES_PER_ELEMENT === 2\n          ? IndexDatatype.UNSIGNED_SHORT\n          : IndexDatatype.UNSIGNED_INT,\n    });\n\n    const vertexAttributes = [\n      {\n        index: attributeLocations.startEllipsoidNormal,\n        vertexBuffer: startEllipsoidNormalsBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        index: attributeLocations.endEllipsoidNormal,\n        vertexBuffer: endEllipsoidNormalsBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        index: attributeLocations.startPositionAndHeight,\n        vertexBuffer: startPositionAndHeightsBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 4,\n      },\n      {\n        index: attributeLocations.endPositionAndHeight,\n        vertexBuffer: endPositionAndHeightsBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 4,\n      },\n      {\n        index: attributeLocations.startFaceNormalAndVertexCorner,\n        vertexBuffer: startFaceNormalAndVertexCornerIdsBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 4,\n      },\n      {\n        index: attributeLocations.endFaceNormalAndHalfWidth,\n        vertexBuffer: endFaceNormalAndHalfWidthsBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 4,\n      },\n      {\n        index: attributeLocations.a_batchId,\n        vertexBuffer: batchIdAttributeBuffer,\n        componentDatatype: ComponentDatatype.UNSIGNED_SHORT,\n        componentsPerAttribute: 1,\n      },\n    ];\n\n    polylines._va = new VertexArray({\n      context: context,\n      attributes: vertexAttributes,\n      indexBuffer: indexBuffer,\n    });\n\n    polylines._positions = undefined;\n    polylines._widths = undefined;\n    polylines._counts = undefined;\n\n    polylines._ellipsoid = undefined;\n    polylines._minimumHeight = undefined;\n    polylines._maximumHeight = undefined;\n    polylines._rectangle = undefined;\n\n    polylines._transferrableBatchIds = undefined;\n    polylines._packedBuffer = undefined;\n\n    polylines._startEllipsoidNormals = undefined;\n    polylines._endEllipsoidNormals = undefined;\n    polylines._startPositionAndHeights = undefined;\n    polylines._startFaceNormalAndVertexCornerIds = undefined;\n    polylines._endPositionAndHeights = undefined;\n    polylines._endFaceNormalAndHalfWidths = undefined;\n    polylines._vertexBatchIds = undefined;\n\n    polylines._indices = undefined;\n  }\n}\n\nconst modifiedModelViewScratch = new Matrix4();\nconst rtcScratch = new Cartesian3();\n\nfunction createUniformMap(primitive, context) {\n  if (defined(primitive._uniformMap)) {\n    return;\n  }\n\n  primitive._uniformMap = {\n    u_modifiedModelView: function () {\n      const viewMatrix = context.uniformState.view;\n      Matrix4.clone(viewMatrix, modifiedModelViewScratch);\n      Matrix4.multiplyByPoint(\n        modifiedModelViewScratch,\n        primitive._center,\n        rtcScratch,\n      );\n      Matrix4.setTranslation(\n        modifiedModelViewScratch,\n        rtcScratch,\n        modifiedModelViewScratch,\n      );\n      return modifiedModelViewScratch;\n    },\n    u_highlightColor: function () {\n      return primitive._highlightColor;\n    },\n    u_minimumMaximumVectorHeights: function () {\n      return primitive._minimumMaximumVectorHeights;\n    },\n  };\n}\n\nfunction getRenderState(mask3DTiles) {\n  /**\n   * Cull front faces of each volume (relative to camera) to prevent\n   * classification drawing from both the front and back faces, double-draw.\n   * The geometry is \"inverted\" (inside-out winding order for the indices) but\n   * the vertex shader seems to re-invert so that the triangles face \"out\" again.\n   * So cull FRONT faces.\n   */\n  return RenderState.fromCache({\n    cull: {\n      enabled: true,\n      face: CullFace.FRONT,\n    },\n    blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n    depthMask: false,\n    stencilTest: {\n      enabled: mask3DTiles,\n      frontFunction: StencilFunction.EQUAL,\n      frontOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.KEEP,\n        zPass: StencilOperation.KEEP,\n      },\n      backFunction: StencilFunction.EQUAL,\n      backOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.KEEP,\n        zPass: StencilOperation.KEEP,\n      },\n      reference: StencilConstants.CESIUM_3D_TILE_MASK,\n      mask: StencilConstants.CESIUM_3D_TILE_MASK,\n    },\n  });\n}\n\nfunction createRenderStates(primitive) {\n  if (defined(primitive._rs)) {\n    return;\n  }\n\n  primitive._rs = getRenderState(false);\n  primitive._rs3DTiles = getRenderState(true);\n}\n\nfunction createShaders(primitive, context) {\n  if (defined(primitive._sp)) {\n    return;\n  }\n\n  const batchTable = primitive._batchTable;\n\n  const vsSource = batchTable.getVertexShaderCallback(\n    false,\n    \"a_batchId\",\n    undefined,\n  )(Vector3DTileClampedPolylinesVS);\n  const fsSource = batchTable.getFragmentShaderCallback(\n    false,\n    undefined,\n    true,\n  )(Vector3DTileClampedPolylinesFS);\n\n  const vs = new ShaderSource({\n    defines: [\"VECTOR_TILE\", \"CLIP_POLYLINE\"],\n    sources: [PolylineCommon, vsSource],\n  });\n  const fs = new ShaderSource({\n    defines: [\"VECTOR_TILE\"],\n    sources: [fsSource],\n  });\n\n  primitive._sp = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n}\n\nfunction queueCommands(primitive, frameState) {\n  let command = primitive._command;\n  if (!defined(primitive._command)) {\n    const uniformMap = primitive._batchTable.getUniformMapCallback()(\n      primitive._uniformMap,\n    );\n    command = primitive._command = new DrawCommand({\n      owner: primitive,\n      vertexArray: primitive._va,\n      renderState: primitive._rs,\n      shaderProgram: primitive._sp,\n      uniformMap: uniformMap,\n      boundingVolume: primitive._boundingVolume,\n      pass: Pass.TERRAIN_CLASSIFICATION,\n      pickId: primitive._batchTable.getPickId(),\n    });\n\n    const derivedTilesetCommand = DrawCommand.shallowClone(\n      command,\n      command.derivedCommands.tileset,\n    );\n    derivedTilesetCommand.renderState = primitive._rs3DTiles;\n    derivedTilesetCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    command.derivedCommands.tileset = derivedTilesetCommand;\n  }\n\n  const classificationType = primitive._classificationType;\n  if (\n    classificationType === ClassificationType.TERRAIN ||\n    classificationType === ClassificationType.BOTH\n  ) {\n    frameState.commandList.push(command);\n  }\n  if (\n    classificationType === ClassificationType.CESIUM_3D_TILE ||\n    classificationType === ClassificationType.BOTH\n  ) {\n    frameState.commandList.push(command.derivedCommands.tileset);\n  }\n}\n\n/**\n * Get the polyline positions for the given feature.\n *\n * @param {number} batchId The batch ID of the feature.\n */\nVector3DTileClampedPolylines.prototype.getPositions = function (batchId) {\n  return Vector3DTilePolylines.getPolylinePositions(this, batchId);\n};\n\n/**\n * Creates features for each polyline and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTileClampedPolylines.prototype.createFeatures = function (\n  content,\n  features,\n) {\n  const batchIds = this._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    features[batchId] = new Cesium3DTileFeature(content, batchId);\n  }\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (polyline batch table color * color).\n *\n * @param {boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTileClampedPolylines.prototype.applyDebugSettings = function (\n  enabled,\n  color,\n) {\n  this._highlightColor = enabled ? color : this._constantColor;\n};\n\nfunction clearStyle(polygons, features) {\n  const batchIds = polygons._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    feature.show = true;\n    feature.color = Color.WHITE;\n  }\n}\n\nconst scratchColor = new Color();\n\nconst DEFAULT_COLOR_VALUE = Color.WHITE;\nconst DEFAULT_SHOW_VALUE = true;\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The dictionary of features.\n */\nVector3DTileClampedPolylines.prototype.applyStyle = function (style, features) {\n  if (!defined(style)) {\n    clearStyle(this, features);\n    return;\n  }\n\n  const batchIds = this._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    feature.color = defined(style.color)\n      ? style.color.evaluateColor(feature, scratchColor)\n      : DEFAULT_COLOR_VALUE;\n    feature.show = defined(style.show)\n      ? style.show.evaluate(feature)\n      : DEFAULT_SHOW_VALUE;\n  }\n};\n\nfunction initialize(polylines) {\n  return ApproximateTerrainHeights.initialize()\n    .then(function () {\n      updateMinimumMaximumHeights(\n        polylines,\n        polylines._rectangle,\n        polylines._ellipsoid,\n      );\n    })\n    .catch((error) => {\n      if (polylines.isDestroyed()) {\n        return;\n      }\n\n      // Throw the error next frame\n      polylines._error = error;\n    });\n}\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTileClampedPolylines.prototype.update = function (frameState) {\n  const context = frameState.context;\n  if (!this._ready) {\n    if (!defined(this._promise)) {\n      this._promise = initialize(this).then(createVertexArray(this, context));\n    }\n\n    if (defined(this._error)) {\n      const error = this._error;\n      this._error = undefined;\n      throw error;\n    }\n\n    return;\n  }\n\n  createUniformMap(this, context);\n  createShaders(this, context);\n  createRenderStates(this);\n\n  const passes = frameState.passes;\n  if (passes.render || passes.pick) {\n    queueCommands(this, frameState);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTileClampedPolylines.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTileClampedPolylines.prototype.destroy = function () {\n  this._va = this._va && this._va.destroy();\n  this._sp = this._sp && this._sp.destroy();\n  return destroyObject(this);\n};\nexport default Vector3DTileClampedPolylines;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Cesium3DTileBatchTable from \"./Cesium3DTileBatchTable.js\";\nimport Cesium3DTileFeatureTable from \"./Cesium3DTileFeatureTable.js\";\nimport Vector3DTilePoints from \"./Vector3DTilePoints.js\";\nimport Vector3DTilePolygons from \"./Vector3DTilePolygons.js\";\nimport Vector3DTilePolylines from \"./Vector3DTilePolylines.js\";\nimport Vector3DTileClampedPolylines from \"./Vector3DTileClampedPolylines.js\";\nimport decodeVectorPolylinePositions from \"../Core/decodeVectorPolylinePositions.js\";\n\n/**\n * Represents the contents of a\n * {@link https://github.com/CesiumGS/3d-tiles/tree/vctr/TileFormats/VectorData|Vector}\n * tile in a {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification|3D Tiles} tileset.\n * <p>\n * Implements the {@link Cesium3DTileContent} interface.\n * </p>\n *\n * @alias Vector3DTileContent\n * @constructor\n *\n * @private\n */\nfunction Vector3DTileContent(tileset, tile, resource, arrayBuffer, byteOffset) {\n  this._tileset = tileset;\n  this._tile = tile;\n  this._resource = resource;\n\n  this._polygons = undefined;\n  this._polylines = undefined;\n  this._points = undefined;\n\n  this._metadata = undefined;\n\n  this._batchTable = undefined;\n  this._features = undefined;\n\n  /**\n   * Part of the {@link Cesium3DTileContent} interface.\n   */\n  this.featurePropertiesDirty = false;\n  this._group = undefined;\n\n  this._ready = false;\n\n  initialize(this, arrayBuffer, byteOffset);\n}\n\nObject.defineProperties(Vector3DTileContent.prototype, {\n  featuresLength: {\n    get: function () {\n      return defined(this._batchTable) ? this._batchTable.featuresLength : 0;\n    },\n  },\n\n  pointsLength: {\n    get: function () {\n      if (defined(this._points)) {\n        return this._points.pointsLength;\n      }\n      return 0;\n    },\n  },\n\n  trianglesLength: {\n    get: function () {\n      let trianglesLength = 0;\n      if (defined(this._polygons)) {\n        trianglesLength += this._polygons.trianglesLength;\n      }\n      if (defined(this._polylines)) {\n        trianglesLength += this._polylines.trianglesLength;\n      }\n      return trianglesLength;\n    },\n  },\n\n  geometryByteLength: {\n    get: function () {\n      let geometryByteLength = 0;\n      if (defined(this._polygons)) {\n        geometryByteLength += this._polygons.geometryByteLength;\n      }\n      if (defined(this._polylines)) {\n        geometryByteLength += this._polylines.geometryByteLength;\n      }\n      return geometryByteLength;\n    },\n  },\n\n  texturesByteLength: {\n    get: function () {\n      if (defined(this._points)) {\n        return this._points.texturesByteLength;\n      }\n      return 0;\n    },\n  },\n\n  batchTableByteLength: {\n    get: function () {\n      return defined(this._batchTable)\n        ? this._batchTable.batchTableByteLength\n        : 0;\n    },\n  },\n\n  innerContents: {\n    get: function () {\n      return undefined;\n    },\n  },\n\n  /**\n   * Returns true when the tile's content is ready to render; otherwise false\n   *\n   * @memberof Vector3DTileContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n  },\n\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n  },\n\n  url: {\n    get: function () {\n      return this._resource.getUrlComponent(true);\n    },\n  },\n\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n    set: function (value) {\n      this._metadata = value;\n    },\n  },\n\n  batchTable: {\n    get: function () {\n      return this._batchTable;\n    },\n  },\n\n  group: {\n    get: function () {\n      return this._group;\n    },\n    set: function (value) {\n      this._group = value;\n    },\n  },\n});\n\nfunction createColorChangedCallback(content) {\n  return function (batchId, color) {\n    if (defined(content._polygons)) {\n      content._polygons.updateCommands(batchId, color);\n    }\n  };\n}\n\nfunction getBatchIds(featureTableJson, featureTableBinary) {\n  let polygonBatchIds;\n  let polylineBatchIds;\n  let pointBatchIds;\n  let i;\n\n  const numberOfPolygons = featureTableJson.POLYGONS_LENGTH ?? 0;\n  const numberOfPolylines = featureTableJson.POLYLINES_LENGTH ?? 0;\n  const numberOfPoints = featureTableJson.POINTS_LENGTH ?? 0;\n\n  if (numberOfPolygons > 0 && defined(featureTableJson.POLYGON_BATCH_IDS)) {\n    const polygonBatchIdsByteOffset =\n      featureTableBinary.byteOffset +\n      featureTableJson.POLYGON_BATCH_IDS.byteOffset;\n    polygonBatchIds = new Uint16Array(\n      featureTableBinary.buffer,\n      polygonBatchIdsByteOffset,\n      numberOfPolygons,\n    );\n  }\n\n  if (numberOfPolylines > 0 && defined(featureTableJson.POLYLINE_BATCH_IDS)) {\n    const polylineBatchIdsByteOffset =\n      featureTableBinary.byteOffset +\n      featureTableJson.POLYLINE_BATCH_IDS.byteOffset;\n    polylineBatchIds = new Uint16Array(\n      featureTableBinary.buffer,\n      polylineBatchIdsByteOffset,\n      numberOfPolylines,\n    );\n  }\n\n  if (numberOfPoints > 0 && defined(featureTableJson.POINT_BATCH_IDS)) {\n    const pointBatchIdsByteOffset =\n      featureTableBinary.byteOffset +\n      featureTableJson.POINT_BATCH_IDS.byteOffset;\n    pointBatchIds = new Uint16Array(\n      featureTableBinary.buffer,\n      pointBatchIdsByteOffset,\n      numberOfPoints,\n    );\n  }\n\n  const atLeastOneDefined =\n    defined(polygonBatchIds) ||\n    defined(polylineBatchIds) ||\n    defined(pointBatchIds);\n  const atLeastOneUndefined =\n    (numberOfPolygons > 0 && !defined(polygonBatchIds)) ||\n    (numberOfPolylines > 0 && !defined(polylineBatchIds)) ||\n    (numberOfPoints > 0 && !defined(pointBatchIds));\n\n  if (atLeastOneDefined && atLeastOneUndefined) {\n    throw new RuntimeError(\n      \"If one group of batch ids is defined, then all batch ids must be defined\",\n    );\n  }\n\n  const allUndefinedBatchIds =\n    !defined(polygonBatchIds) &&\n    !defined(polylineBatchIds) &&\n    !defined(pointBatchIds);\n  if (allUndefinedBatchIds) {\n    let id = 0;\n    if (!defined(polygonBatchIds) && numberOfPolygons > 0) {\n      polygonBatchIds = new Uint16Array(numberOfPolygons);\n      for (i = 0; i < numberOfPolygons; ++i) {\n        polygonBatchIds[i] = id++;\n      }\n    }\n    if (!defined(polylineBatchIds) && numberOfPolylines > 0) {\n      polylineBatchIds = new Uint16Array(numberOfPolylines);\n      for (i = 0; i < numberOfPolylines; ++i) {\n        polylineBatchIds[i] = id++;\n      }\n    }\n    if (!defined(pointBatchIds) && numberOfPoints > 0) {\n      pointBatchIds = new Uint16Array(numberOfPoints);\n      for (i = 0; i < numberOfPoints; ++i) {\n        pointBatchIds[i] = id++;\n      }\n    }\n  }\n\n  return {\n    polygons: polygonBatchIds,\n    polylines: polylineBatchIds,\n    points: pointBatchIds,\n  };\n}\n\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\n\nfunction createFloatingPolylines(options) {\n  return new Vector3DTilePolylines(options);\n}\n\nfunction createClampedPolylines(options) {\n  return new Vector3DTileClampedPolylines(options);\n}\n\nfunction initialize(content, arrayBuffer, byteOffset) {\n  byteOffset = byteOffset ?? 0;\n\n  const uint8Array = new Uint8Array(arrayBuffer);\n  const view = new DataView(arrayBuffer);\n  byteOffset += sizeOfUint32; // Skip magic number\n\n  const version = view.getUint32(byteOffset, true);\n  if (version !== 1) {\n    throw new RuntimeError(\n      `Only Vector tile version 1 is supported.  Version ${version} is not.`,\n    );\n  }\n  byteOffset += sizeOfUint32;\n\n  const byteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  if (byteLength === 0) {\n    content._ready = true;\n    return;\n  }\n\n  const featureTableJSONByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  if (featureTableJSONByteLength === 0) {\n    throw new RuntimeError(\n      \"Feature table must have a byte length greater than zero\",\n    );\n  }\n\n  const featureTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const batchTableJSONByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const batchTableBinaryByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const indicesByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const positionByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const polylinePositionByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n  const pointsPositionByteLength = view.getUint32(byteOffset, true);\n  byteOffset += sizeOfUint32;\n\n  const featureTableJson = getJsonFromTypedArray(\n    uint8Array,\n    byteOffset,\n    featureTableJSONByteLength,\n  );\n  byteOffset += featureTableJSONByteLength;\n\n  const featureTableBinary = new Uint8Array(\n    arrayBuffer,\n    byteOffset,\n    featureTableBinaryByteLength,\n  );\n  byteOffset += featureTableBinaryByteLength;\n\n  let batchTableJson;\n  let batchTableBinary;\n  if (batchTableJSONByteLength > 0) {\n    // PERFORMANCE_IDEA: is it possible to allocate this on-demand?  Perhaps keep the\n    // arraybuffer/string compressed in memory and then decompress it when it is first accessed.\n    //\n    // We could also make another request for it, but that would make the property set/get\n    // API async, and would double the number of numbers in some cases.\n    batchTableJson = getJsonFromTypedArray(\n      uint8Array,\n      byteOffset,\n      batchTableJSONByteLength,\n    );\n    byteOffset += batchTableJSONByteLength;\n\n    if (batchTableBinaryByteLength > 0) {\n      // Has a batch table binary\n      batchTableBinary = new Uint8Array(\n        arrayBuffer,\n        byteOffset,\n        batchTableBinaryByteLength,\n      );\n      // Copy the batchTableBinary section and let the underlying ArrayBuffer be freed\n      batchTableBinary = new Uint8Array(batchTableBinary);\n      byteOffset += batchTableBinaryByteLength;\n    }\n  }\n\n  const numberOfPolygons = featureTableJson.POLYGONS_LENGTH ?? 0;\n  const numberOfPolylines = featureTableJson.POLYLINES_LENGTH ?? 0;\n  const numberOfPoints = featureTableJson.POINTS_LENGTH ?? 0;\n  const totalPrimitives = numberOfPolygons + numberOfPolylines + numberOfPoints;\n\n  const batchTable = new Cesium3DTileBatchTable(\n    content,\n    totalPrimitives,\n    batchTableJson,\n    batchTableBinary,\n    createColorChangedCallback(content),\n  );\n  content._batchTable = batchTable;\n\n  if (totalPrimitives === 0) {\n    return;\n  }\n\n  const featureTable = new Cesium3DTileFeatureTable(\n    featureTableJson,\n    featureTableBinary,\n  );\n  const region = featureTable.getGlobalProperty(\"REGION\");\n  if (!defined(region)) {\n    throw new RuntimeError(\n      \"Feature table global property: REGION must be defined\",\n    );\n  }\n  const rectangle = Rectangle.unpack(region);\n  const minHeight = region[4];\n  const maxHeight = region[5];\n\n  const modelMatrix = content._tile.computedTransform;\n\n  let center = featureTable.getGlobalProperty(\n    \"RTC_CENTER\",\n    ComponentDatatype.FLOAT,\n    3,\n  );\n  if (defined(center)) {\n    center = Cartesian3.unpack(center);\n    Matrix4.multiplyByPoint(modelMatrix, center, center);\n  } else {\n    center = Rectangle.center(rectangle);\n    center.height = CesiumMath.lerp(minHeight, maxHeight, 0.5);\n    center = Ellipsoid.WGS84.cartographicToCartesian(center);\n  }\n\n  const batchIds = getBatchIds(featureTableJson, featureTableBinary);\n  byteOffset += (4 - (byteOffset % 4)) % 4;\n\n  if (numberOfPolygons > 0) {\n    featureTable.featuresLength = numberOfPolygons;\n\n    const polygonCounts =\n      featureTable.getPropertyArray(\n        \"POLYGON_COUNTS\",\n        ComponentDatatype.UNSIGNED_INT,\n        1,\n      ) ??\n      featureTable.getPropertyArray(\n        \"POLYGON_COUNT\",\n        ComponentDatatype.UNSIGNED_INT,\n        1,\n      ); // Workaround for old vector tilesets using the non-plural name;\n\n    if (!defined(polygonCounts)) {\n      throw new RuntimeError(\n        \"Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0\",\n      );\n    }\n\n    const polygonIndexCounts =\n      featureTable.getPropertyArray(\n        \"POLYGON_INDEX_COUNTS\",\n        ComponentDatatype.UNSIGNED_INT,\n        1,\n      ) ??\n      featureTable.getPropertyArray(\n        \"POLYGON_INDEX_COUNT\",\n        ComponentDatatype.UNSIGNED_INT,\n        1,\n      ); // Workaround for old vector tilesets using the non-plural name;\n\n    if (!defined(polygonIndexCounts)) {\n      throw new RuntimeError(\n        \"Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0\",\n      );\n    }\n\n    // Use the counts array to determine how many position values we want. If we used the byte length then\n    // zero padding values would be included and cause the delta zig-zag decoding to fail\n    const numPolygonPositions = polygonCounts.reduce(function (total, count) {\n      return total + count * 2;\n    }, 0);\n\n    const numPolygonIndices = polygonIndexCounts.reduce(function (\n      total,\n      count,\n    ) {\n      return total + count;\n    }, 0);\n\n    const indices = new Uint32Array(arrayBuffer, byteOffset, numPolygonIndices);\n    byteOffset += indicesByteLength;\n\n    const polygonPositions = new Uint16Array(\n      arrayBuffer,\n      byteOffset,\n      numPolygonPositions,\n    );\n    byteOffset += positionByteLength;\n\n    let polygonMinimumHeights;\n    let polygonMaximumHeights;\n    if (\n      defined(featureTableJson.POLYGON_MINIMUM_HEIGHTS) &&\n      defined(featureTableJson.POLYGON_MAXIMUM_HEIGHTS)\n    ) {\n      polygonMinimumHeights = featureTable.getPropertyArray(\n        \"POLYGON_MINIMUM_HEIGHTS\",\n        ComponentDatatype.FLOAT,\n        1,\n      );\n      polygonMaximumHeights = featureTable.getPropertyArray(\n        \"POLYGON_MAXIMUM_HEIGHTS\",\n        ComponentDatatype.FLOAT,\n        1,\n      );\n    }\n\n    content._polygons = new Vector3DTilePolygons({\n      positions: polygonPositions,\n      counts: polygonCounts,\n      indexCounts: polygonIndexCounts,\n      indices: indices,\n      minimumHeight: minHeight,\n      maximumHeight: maxHeight,\n      polygonMinimumHeights: polygonMinimumHeights,\n      polygonMaximumHeights: polygonMaximumHeights,\n      center: center,\n      rectangle: rectangle,\n      boundingVolume: content.tile.boundingVolume.boundingVolume,\n      batchTable: batchTable,\n      batchIds: batchIds.polygons,\n      modelMatrix: modelMatrix,\n    });\n  }\n  const tileset = content._tileset;\n  if (numberOfPolylines > 0) {\n    featureTable.featuresLength = numberOfPolylines;\n\n    const polylineCounts =\n      featureTable.getPropertyArray(\n        \"POLYLINE_COUNTS\",\n        ComponentDatatype.UNSIGNED_INT,\n        1,\n      ) ??\n      featureTable.getPropertyArray(\n        \"POLYLINE_COUNT\",\n        ComponentDatatype.UNSIGNED_INT,\n        1,\n      ); // Workaround for old vector tilesets using the non-plural name;\n\n    if (!defined(polylineCounts)) {\n      throw new RuntimeError(\n        \"Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0\",\n      );\n    }\n\n    let widths = featureTable.getPropertyArray(\n      \"POLYLINE_WIDTHS\",\n      ComponentDatatype.UNSIGNED_SHORT,\n      1,\n    );\n    if (!defined(widths)) {\n      widths = new Uint16Array(numberOfPolylines);\n      for (let i = 0; i < numberOfPolylines; ++i) {\n        widths[i] = 2.0;\n      }\n    }\n\n    // Use the counts array to determine how many position values we want. If we used the byte length then\n    // zero padding values would be included and cause the delta zig-zag decoding to fail\n    const numPolylinePositions = polylineCounts.reduce(function (total, count) {\n      return total + count * 3;\n    }, 0);\n    const polylinePositions = new Uint16Array(\n      arrayBuffer,\n      byteOffset,\n      numPolylinePositions,\n    );\n    byteOffset += polylinePositionByteLength;\n\n    const examineVectorLinesFunction = tileset.examineVectorLinesFunction;\n    if (defined(examineVectorLinesFunction)) {\n      const decodedPositions = decodeVectorPolylinePositions(\n        new Uint16Array(polylinePositions),\n        rectangle,\n        minHeight,\n        maxHeight,\n        Ellipsoid.WGS84,\n      );\n      examineVectorLines(\n        decodedPositions,\n        polylineCounts,\n        batchIds.polylines,\n        batchTable,\n        content.url,\n        examineVectorLinesFunction,\n      );\n    }\n\n    let createPolylines = createFloatingPolylines;\n    if (defined(tileset.classificationType)) {\n      createPolylines = createClampedPolylines;\n    }\n\n    content._polylines = createPolylines({\n      positions: polylinePositions,\n      widths: widths,\n      counts: polylineCounts,\n      batchIds: batchIds.polylines,\n      minimumHeight: minHeight,\n      maximumHeight: maxHeight,\n      center: center,\n      rectangle: rectangle,\n      boundingVolume: content.tile.boundingVolume.boundingVolume,\n      batchTable: batchTable,\n      classificationType: tileset.classificationType,\n      keepDecodedPositions: tileset.vectorKeepDecodedPositions,\n    });\n  }\n\n  if (numberOfPoints > 0) {\n    const pointPositions = new Uint16Array(\n      arrayBuffer,\n      byteOffset,\n      numberOfPoints * 3,\n    );\n    byteOffset += pointsPositionByteLength;\n    content._points = new Vector3DTilePoints({\n      positions: pointPositions,\n      batchIds: batchIds.points,\n      minimumHeight: minHeight,\n      maximumHeight: maxHeight,\n      rectangle: rectangle,\n      batchTable: batchTable,\n      heightReference: tileset.heightReference,\n      scene: tileset.scene,\n    });\n  }\n}\n\nfunction createFeatures(content) {\n  const featuresLength = content.featuresLength;\n  if (!defined(content._features) && featuresLength > 0) {\n    const features = new Array(featuresLength);\n\n    if (defined(content._polygons)) {\n      content._polygons.createFeatures(content, features);\n    }\n    if (defined(content._polylines)) {\n      content._polylines.createFeatures(content, features);\n    }\n    if (defined(content._points)) {\n      content._points.createFeatures(content, features);\n    }\n    content._features = features;\n  }\n}\n\nVector3DTileContent.prototype.hasProperty = function (batchId, name) {\n  return this._batchTable.hasProperty(batchId, name);\n};\n\nVector3DTileContent.prototype.getFeature = function (batchId) {\n  //>>includeStart('debug', pragmas.debug);\n  const featuresLength = this.featuresLength;\n  if (!defined(batchId) || batchId < 0 || batchId >= featuresLength) {\n    throw new DeveloperError(\n      `batchId is required and between zero and featuresLength - 1 (${\n        featuresLength - 1\n      }).`,\n    );\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(this._features)) {\n    createFeatures(this);\n  }\n\n  return this._features[batchId];\n};\n\nVector3DTileContent.prototype.applyDebugSettings = function (enabled, color) {\n  if (defined(this._polygons)) {\n    this._polygons.applyDebugSettings(enabled, color);\n  }\n  if (defined(this._polylines)) {\n    this._polylines.applyDebugSettings(enabled, color);\n  }\n  if (defined(this._points)) {\n    this._points.applyDebugSettings(enabled, color);\n  }\n};\n\nVector3DTileContent.prototype.applyStyle = function (style) {\n  if (!defined(this._features)) {\n    createFeatures(this);\n  }\n  if (defined(this._polygons)) {\n    this._polygons.applyStyle(style, this._features);\n  }\n  if (defined(this._polylines)) {\n    this._polylines.applyStyle(style, this._features);\n  }\n  if (defined(this._points)) {\n    this._points.applyStyle(style, this._features);\n  }\n};\n\nVector3DTileContent.prototype.update = function (tileset, frameState) {\n  let ready = true;\n  if (defined(this._polygons)) {\n    this._polygons.classificationType = this._tileset.classificationType;\n    this._polygons.debugWireframe = this._tileset.debugWireframe;\n    this._polygons.update(frameState);\n    ready = ready && this._polygons.ready;\n  }\n  if (defined(this._polylines)) {\n    this._polylines.update(frameState);\n    ready = ready && this._polylines.ready;\n  }\n  if (defined(this._points)) {\n    this._points.update(frameState);\n    ready = ready && this._points.ready;\n  }\n  if (defined(this._batchTable) && ready) {\n    if (!defined(this._features)) {\n      createFeatures(this);\n    }\n    this._batchTable.update(tileset, frameState);\n    this._ready = true;\n  }\n};\n\nVector3DTileContent.prototype.pick = function (ray, frameState, result) {\n  return undefined;\n};\n\nVector3DTileContent.prototype.getPolylinePositions = function (batchId) {\n  const polylines = this._polylines;\n  if (!defined(polylines)) {\n    return undefined;\n  }\n\n  return polylines.getPositions(batchId);\n};\n\nVector3DTileContent.prototype.isDestroyed = function () {\n  return false;\n};\n\nVector3DTileContent.prototype.destroy = function () {\n  this._polygons = this._polygons && this._polygons.destroy();\n  this._polylines = this._polylines && this._polylines.destroy();\n  this._points = this._points && this._points.destroy();\n  this._batchTable = this._batchTable && this._batchTable.destroy();\n  return destroyObject(this);\n};\n\nfunction examineVectorLines(\n  positions,\n  counts,\n  batchIds,\n  batchTable,\n  url,\n  callback,\n) {\n  const countsLength = counts.length;\n  let polylineStart = 0;\n  for (let i = 0; i < countsLength; i++) {\n    const count = counts[i] * 3;\n    const linePositions = positions.slice(polylineStart, polylineStart + count);\n    polylineStart += count;\n\n    callback(linePositions, batchIds[i], url, batchTable);\n  }\n}\n\nexport default Vector3DTileContent;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport Vector3DTileBatch from \"./Vector3DTileBatch.js\";\nimport Vector3DTilePrimitive from \"./Vector3DTilePrimitive.js\";\n\n/**\n * Creates a batch of box, cylinder, ellipsoid and/or sphere geometries intersecting terrain or 3D Tiles.\n *\n * @alias Vector3DTileGeometry\n * @constructor\n *\n * @param {object} options An object with following properties:\n * @param {Float32Array} [options.boxes] The boxes in the tile.\n * @param {Uint16Array} [options.boxBatchIds] The batch ids for each box.\n * @param {Float32Array} [options.cylinders] The cylinders in the tile.\n * @param {Uint16Array} [options.cylinderBatchIds] The batch ids for each cylinder.\n * @param {Float32Array} [options.ellipsoids] The ellipsoids in the tile.\n * @param {Uint16Array} [options.ellipsoidBatchIds] The batch ids for each ellipsoid.\n * @param {Float32Array} [options.spheres] The spheres in the tile.\n * @param {Uint16Array} [options.sphereBatchIds] The batch ids for each sphere.\n * @param {Cartesian3} options.center The RTC center of all geometries.\n * @param {Matrix4} options.modelMatrix The model matrix of all geometries. Applied after the individual geometry model matrices.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table.\n * @param {BoundingSphere} options.boundingVolume The bounding volume containing all of the geometry in the tile.\n *\n * @private\n */\nfunction Vector3DTileGeometry(options) {\n  // these will all be released after the primitive is created\n  this._boxes = options.boxes;\n  this._boxBatchIds = options.boxBatchIds;\n  this._cylinders = options.cylinders;\n  this._cylinderBatchIds = options.cylinderBatchIds;\n  this._ellipsoids = options.ellipsoids;\n  this._ellipsoidBatchIds = options.ellipsoidBatchIds;\n  this._spheres = options.spheres;\n  this._sphereBatchIds = options.sphereBatchIds;\n  this._modelMatrix = options.modelMatrix;\n  this._batchTable = options.batchTable;\n  this._boundingVolume = options.boundingVolume;\n\n  this._center = options.center;\n  if (!defined(this._center)) {\n    if (defined(this._boundingVolume)) {\n      this._center = Cartesian3.clone(this._boundingVolume.center);\n    } else {\n      this._center = Cartesian3.clone(Cartesian3.ZERO);\n    }\n  }\n\n  this._boundingVolumes = undefined;\n  this._batchedIndices = undefined;\n\n  this._indices = undefined;\n  this._indexOffsets = undefined;\n  this._indexCounts = undefined;\n\n  this._positions = undefined;\n  this._vertexBatchIds = undefined;\n\n  this._batchIds = undefined;\n\n  this._batchTableColors = undefined;\n  this._packedBuffer = undefined;\n\n  this._ready = false;\n  this._promise = undefined;\n  this._error = undefined;\n\n  this._verticesPromise = undefined;\n\n  this._primitive = undefined;\n\n  /**\n   * Draws the wireframe of the classification geometries.\n   * @type {boolean}\n   * @default false\n   */\n  this.debugWireframe = false;\n\n  /**\n   * Forces a re-batch instead of waiting after a number of frames have been rendered. For testing only.\n   * @type {boolean}\n   * @default false\n   */\n  this.forceRebatch = false;\n\n  /**\n   * What this tile will classify.\n   * @type {ClassificationType}\n   * @default ClassificationType.BOTH\n   */\n  this.classificationType = ClassificationType.BOTH;\n}\n\nObject.defineProperties(Vector3DTileGeometry.prototype, {\n  /**\n   * Gets the number of triangles.\n   *\n   * @memberof Vector3DTileGeometry.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  trianglesLength: {\n    get: function () {\n      if (defined(this._primitive)) {\n        return this._primitive.trianglesLength;\n      }\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the geometry memory in bytes.\n   *\n   * @memberof Vector3DTileGeometry.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  geometryByteLength: {\n    get: function () {\n      if (defined(this._primitive)) {\n        return this._primitive.geometryByteLength;\n      }\n      return 0;\n    },\n  },\n\n  /**\n   * Return true when the primitive is ready to render.\n   * @memberof Vector3DTileGeometry.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\nVector3DTileGeometry.packedBoxLength =\n  Matrix4.packedLength + Cartesian3.packedLength;\nVector3DTileGeometry.packedCylinderLength = Matrix4.packedLength + 2;\nVector3DTileGeometry.packedEllipsoidLength =\n  Matrix4.packedLength + Cartesian3.packedLength;\nVector3DTileGeometry.packedSphereLength = Cartesian3.packedLength + 1;\n\nfunction packBuffer(geometries) {\n  const packedBuffer = new Float64Array(\n    Matrix4.packedLength + Cartesian3.packedLength,\n  );\n\n  let offset = 0;\n  Cartesian3.pack(geometries._center, packedBuffer, offset);\n  offset += Cartesian3.packedLength;\n  Matrix4.pack(geometries._modelMatrix, packedBuffer, offset);\n\n  return packedBuffer;\n}\n\nfunction unpackBuffer(geometries, packedBuffer) {\n  let offset = 0;\n\n  const indicesBytesPerElement = packedBuffer[offset++];\n  const numBVS = packedBuffer[offset++];\n  const bvs = (geometries._boundingVolumes = new Array(numBVS));\n\n  for (let i = 0; i < numBVS; ++i) {\n    bvs[i] = BoundingSphere.unpack(packedBuffer, offset);\n    offset += BoundingSphere.packedLength;\n  }\n\n  const numBatchedIndices = packedBuffer[offset++];\n  const bis = (geometries._batchedIndices = new Array(numBatchedIndices));\n\n  for (let j = 0; j < numBatchedIndices; ++j) {\n    const color = Color.unpack(packedBuffer, offset);\n    offset += Color.packedLength;\n\n    const indexOffset = packedBuffer[offset++];\n    const count = packedBuffer[offset++];\n\n    const length = packedBuffer[offset++];\n    const batchIds = new Array(length);\n\n    for (let k = 0; k < length; ++k) {\n      batchIds[k] = packedBuffer[offset++];\n    }\n\n    bis[j] = new Vector3DTileBatch({\n      color: color,\n      offset: indexOffset,\n      count: count,\n      batchIds: batchIds,\n    });\n  }\n\n  return indicesBytesPerElement;\n}\n\nconst createVerticesTaskProcessor = new TaskProcessor(\n  \"createVectorTileGeometries\",\n  5,\n);\nconst scratchColor = new Color();\n\nfunction createPrimitive(geometries) {\n  if (defined(geometries._primitive)) {\n    return;\n  }\n\n  if (!defined(geometries._verticesPromise)) {\n    let boxes = geometries._boxes;\n    let boxBatchIds = geometries._boxBatchIds;\n    let cylinders = geometries._cylinders;\n    let cylinderBatchIds = geometries._cylinderBatchIds;\n    let ellipsoids = geometries._ellipsoids;\n    let ellipsoidBatchIds = geometries._ellipsoidBatchIds;\n    let spheres = geometries._spheres;\n    let sphereBatchIds = geometries._sphereBatchIds;\n\n    let batchTableColors = geometries._batchTableColors;\n    let packedBuffer = geometries._packedBuffer;\n\n    if (!defined(batchTableColors)) {\n      // Copy because they may be the views on the same buffer.\n      let length = 0;\n      if (defined(geometries._boxes)) {\n        boxes = geometries._boxes = boxes.slice();\n        boxBatchIds = geometries._boxBatchIds = boxBatchIds.slice();\n        length += boxBatchIds.length;\n      }\n      if (defined(geometries._cylinders)) {\n        cylinders = geometries._cylinders = cylinders.slice();\n        cylinderBatchIds = geometries._cylinderBatchIds =\n          cylinderBatchIds.slice();\n        length += cylinderBatchIds.length;\n      }\n      if (defined(geometries._ellipsoids)) {\n        ellipsoids = geometries._ellipsoids = ellipsoids.slice();\n        ellipsoidBatchIds = geometries._ellipsoidBatchIds =\n          ellipsoidBatchIds.slice();\n        length += ellipsoidBatchIds.length;\n      }\n      if (defined(geometries._spheres)) {\n        spheres = geometries._sphere = spheres.slice();\n        sphereBatchIds = geometries._sphereBatchIds = sphereBatchIds.slice();\n        length += sphereBatchIds.length;\n      }\n\n      batchTableColors = geometries._batchTableColors = new Uint32Array(length);\n      const batchTable = geometries._batchTable;\n\n      for (let i = 0; i < length; ++i) {\n        const color = batchTable.getColor(i, scratchColor);\n        batchTableColors[i] = color.toRgba();\n      }\n\n      packedBuffer = geometries._packedBuffer = packBuffer(geometries);\n    }\n\n    const transferrableObjects = [];\n    if (defined(boxes)) {\n      transferrableObjects.push(boxes.buffer, boxBatchIds.buffer);\n    }\n    if (defined(cylinders)) {\n      transferrableObjects.push(cylinders.buffer, cylinderBatchIds.buffer);\n    }\n    if (defined(ellipsoids)) {\n      transferrableObjects.push(ellipsoids.buffer, ellipsoidBatchIds.buffer);\n    }\n    if (defined(spheres)) {\n      transferrableObjects.push(spheres.buffer, sphereBatchIds.buffer);\n    }\n    transferrableObjects.push(batchTableColors.buffer, packedBuffer.buffer);\n\n    const parameters = {\n      boxes: defined(boxes) ? boxes.buffer : undefined,\n      boxBatchIds: defined(boxes) ? boxBatchIds.buffer : undefined,\n      cylinders: defined(cylinders) ? cylinders.buffer : undefined,\n      cylinderBatchIds: defined(cylinders)\n        ? cylinderBatchIds.buffer\n        : undefined,\n      ellipsoids: defined(ellipsoids) ? ellipsoids.buffer : undefined,\n      ellipsoidBatchIds: defined(ellipsoids)\n        ? ellipsoidBatchIds.buffer\n        : undefined,\n      spheres: defined(spheres) ? spheres.buffer : undefined,\n      sphereBatchIds: defined(spheres) ? sphereBatchIds.buffer : undefined,\n      batchTableColors: batchTableColors.buffer,\n      packedBuffer: packedBuffer.buffer,\n    };\n\n    const verticesPromise = (geometries._verticesPromise =\n      createVerticesTaskProcessor.scheduleTask(\n        parameters,\n        transferrableObjects,\n      ));\n    if (!defined(verticesPromise)) {\n      // Postponed\n      return;\n    }\n\n    return verticesPromise\n      .then(function (result) {\n        if (geometries.isDestroyed()) {\n          return;\n        }\n\n        const packedBuffer = new Float64Array(result.packedBuffer);\n        const indicesBytesPerElement = unpackBuffer(geometries, packedBuffer);\n\n        if (indicesBytesPerElement === 2) {\n          geometries._indices = new Uint16Array(result.indices);\n        } else {\n          geometries._indices = new Uint32Array(result.indices);\n        }\n\n        geometries._indexOffsets = new Uint32Array(result.indexOffsets);\n        geometries._indexCounts = new Uint32Array(result.indexCounts);\n\n        geometries._positions = new Float32Array(result.positions);\n        geometries._vertexBatchIds = new Uint16Array(result.vertexBatchIds);\n\n        geometries._batchIds = new Uint16Array(result.batchIds);\n\n        finishPrimitive(geometries);\n\n        geometries._ready = true;\n      })\n      .catch((error) => {\n        if (geometries.isDestroyed()) {\n          return;\n        }\n\n        geometries._error = error;\n      });\n  }\n}\n\nfunction finishPrimitive(geometries) {\n  if (!defined(geometries._primitive)) {\n    geometries._primitive = new Vector3DTilePrimitive({\n      batchTable: geometries._batchTable,\n      positions: geometries._positions,\n      batchIds: geometries._batchIds,\n      vertexBatchIds: geometries._vertexBatchIds,\n      indices: geometries._indices,\n      indexOffsets: geometries._indexOffsets,\n      indexCounts: geometries._indexCounts,\n      batchedIndices: geometries._batchedIndices,\n      boundingVolume: geometries._boundingVolume,\n      boundingVolumes: geometries._boundingVolumes,\n      center: geometries._center,\n      pickObject: geometries._pickObject ?? geometries,\n    });\n\n    geometries._boxes = undefined;\n    geometries._boxBatchIds = undefined;\n    geometries._cylinders = undefined;\n    geometries._cylinderBatchIds = undefined;\n    geometries._ellipsoids = undefined;\n    geometries._ellipsoidBatchIds = undefined;\n    geometries._spheres = undefined;\n    geometries._sphereBatchIds = undefined;\n    geometries._center = undefined;\n    geometries._modelMatrix = undefined;\n    geometries._batchTable = undefined;\n    geometries._boundingVolume = undefined;\n\n    geometries._boundingVolumes = undefined;\n    geometries._batchedIndices = undefined;\n\n    geometries._indices = undefined;\n    geometries._indexOffsets = undefined;\n    geometries._indexCounts = undefined;\n\n    geometries._positions = undefined;\n    geometries._vertexBatchIds = undefined;\n\n    geometries._batchIds = undefined;\n\n    geometries._batchTableColors = undefined;\n    geometries._packedBuffer = undefined;\n\n    geometries._verticesPromise = undefined;\n  }\n}\n\n/**\n * Creates features for each geometry and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTileGeometry.prototype.createFeatures = function (content, features) {\n  this._primitive.createFeatures(content, features);\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (geometry batch table color * color).\n *\n * @param {boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTileGeometry.prototype.applyDebugSettings = function (enabled, color) {\n  this._primitive.applyDebugSettings(enabled, color);\n};\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTileGeometry.prototype.applyStyle = function (style, features) {\n  this._primitive.applyStyle(style, features);\n};\n\n/**\n * Call when updating the color of a geometry with batchId changes color. The geometries will need to be re-batched\n * on the next update.\n *\n * @param {number} batchId The batch id of the geometries whose color has changed.\n * @param {Color} color The new polygon color.\n */\nVector3DTileGeometry.prototype.updateCommands = function (batchId, color) {\n  this._primitive.updateCommands(batchId, color);\n};\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTileGeometry.prototype.update = function (frameState) {\n  if (!this._ready) {\n    if (!defined(this._promise)) {\n      this._promise = createPrimitive(this);\n    }\n\n    if (defined(this._error)) {\n      const error = this._error;\n      this._error = undefined;\n      throw error;\n    }\n\n    return;\n  }\n\n  this._primitive.debugWireframe = this.debugWireframe;\n  this._primitive.forceRebatch = this.forceRebatch;\n  this._primitive.classificationType = this.classificationType;\n  this._primitive.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTileGeometry.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTileGeometry.prototype.destroy = function () {\n  this._primitive = this._primitive && this._primitive.destroy();\n  return destroyObject(this);\n};\nexport default Vector3DTileGeometry;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DistanceDisplayCondition from \"../Core/DistanceDisplayCondition.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport NearFarScalar from \"../Core/NearFarScalar.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport BillboardCollection from \"./BillboardCollection.js\";\nimport Cesium3DTilePointFeature from \"./Cesium3DTilePointFeature.js\";\nimport HorizontalOrigin from \"./HorizontalOrigin.js\";\nimport LabelCollection from \"./LabelCollection.js\";\nimport LabelStyle from \"./LabelStyle.js\";\nimport PolylineCollection from \"./PolylineCollection.js\";\nimport VerticalOrigin from \"./VerticalOrigin.js\";\nimport HeightReference from \"./HeightReference.js\";\n\n/**\n * Creates a batch of points or billboards and labels.\n *\n * @alias Vector3DTilePoints\n * @constructor\n *\n * @param {object} options An object with following properties:\n * @param {Uint16Array} options.positions The positions of the polygons.\n * @param {number} options.minimumHeight The minimum height of the terrain covered by the tile.\n * @param {number} options.maximumHeight The maximum height of the terrain covered by the tile.\n * @param {Rectangle} options.rectangle The rectangle containing the tile.\n * @param {HeightReference} options.heightReference Determines how billboard and label features are positioned relative to terrain or 3d tiles.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched polygons.\n * @param {Uint16Array} options.batchIds The batch ids for each polygon.\n * @param {Scene} options.scene  The Cesium Viewer {@link Scene}. This is required for clamping billboards and labels with {@link HeightReference}\n *\n * @private\n */\nfunction Vector3DTilePoints(options) {\n  // released after the first update\n  this._positions = options.positions;\n\n  this._batchTable = options.batchTable;\n  this._batchIds = options.batchIds;\n\n  this._rectangle = options.rectangle;\n  this._minHeight = options.minimumHeight;\n  this._maxHeight = options.maximumHeight;\n  this._heightReference = options.heightReference;\n\n  this._billboardCollection = new BillboardCollection({\n    batchTable: options.batchTable,\n    scene: options.scene,\n  });\n  this._labelCollection = new LabelCollection({\n    batchTable: options.batchTable,\n    scene: options.scene,\n  });\n  this._polylineCollection = new PolylineCollection();\n  this._polylineCollection._useHighlightColor = true;\n\n  this._packedBuffer = undefined;\n\n  this._ready = false;\n  this._promise = undefined;\n  this._error = undefined;\n}\n\nObject.defineProperties(Vector3DTilePoints.prototype, {\n  /**\n   * Returns true if the points are ready to render\n   *\n   * @memberof Vector3DTilePoints.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * Gets the number of points.\n   *\n   * @memberof Vector3DTilePoints.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  pointsLength: {\n    get: function () {\n      return this._billboardCollection.length;\n    },\n  },\n\n  /**\n   * Gets the texture atlas memory in bytes.\n   *\n   * @memberof Vector3DTilePoints.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  texturesByteLength: {\n    get: function () {\n      const billboardSize = this._billboardCollection.sizeInBytes;\n      const labelSize = this._labelCollection.sizeInBytes;\n      return billboardSize + labelSize;\n    },\n  },\n});\n\nfunction packBuffer(points, ellipsoid) {\n  const rectangle = points._rectangle;\n  const minimumHeight = points._minHeight;\n  const maximumHeight = points._maxHeight;\n\n  const packedLength = 2 + Rectangle.packedLength + Ellipsoid.packedLength;\n  const packedBuffer = new Float64Array(packedLength);\n\n  let offset = 0;\n  packedBuffer[offset++] = minimumHeight;\n  packedBuffer[offset++] = maximumHeight;\n\n  Rectangle.pack(rectangle, packedBuffer, offset);\n  offset += Rectangle.packedLength;\n\n  Ellipsoid.pack(ellipsoid, packedBuffer, offset);\n\n  return packedBuffer;\n}\n\nconst createVerticesTaskProcessor = new TaskProcessor(\n  \"createVectorTilePoints\",\n  5,\n);\nconst scratchPosition = new Cartesian3();\n\nfunction createPoints(points, ellipsoid) {\n  let positions = points._positions;\n  let packedBuffer = points._packedBuffer;\n\n  if (!defined(packedBuffer)) {\n    // Copy because they may be the views on the same buffer.\n    positions = points._positions = positions.slice();\n    points._batchIds = points._batchIds.slice();\n\n    packedBuffer = points._packedBuffer = packBuffer(points, ellipsoid);\n  }\n\n  const transferrableObjects = [positions.buffer, packedBuffer.buffer];\n  const parameters = {\n    positions: positions.buffer,\n    packedBuffer: packedBuffer.buffer,\n  };\n\n  const verticesPromise = createVerticesTaskProcessor.scheduleTask(\n    parameters,\n    transferrableObjects,\n  );\n  if (!defined(verticesPromise)) {\n    // Postponed\n    return;\n  }\n\n  return verticesPromise\n    .then((result) => {\n      if (points.isDestroyed()) {\n        return;\n      }\n\n      points._positions = new Float64Array(result.positions);\n      const billboardCollection = points._billboardCollection;\n      const labelCollection = points._labelCollection;\n      const polylineCollection = points._polylineCollection;\n      positions = points._positions;\n      const batchIds = points._batchIds;\n      const numberOfPoints = positions.length / 3;\n\n      const heightReference = points._heightReference ?? HeightReference.NONE;\n\n      for (let i = 0; i < numberOfPoints; ++i) {\n        const id = batchIds[i];\n\n        const position = Cartesian3.unpack(positions, i * 3, scratchPosition);\n\n        const b = billboardCollection.add();\n        b.position = position;\n        b._batchIndex = id;\n        b.heightReference = heightReference;\n\n        const l = labelCollection.add();\n        l.text = \" \";\n        l.position = position;\n        l._batchIndex = id;\n        l.heightReference = heightReference;\n\n        const p = polylineCollection.add();\n        p.positions = [Cartesian3.clone(position), Cartesian3.clone(position)];\n      }\n\n      points._positions = undefined;\n      points._packedBuffer = undefined;\n      points._ready = true;\n    })\n    .catch((error) => {\n      if (points.isDestroyed()) {\n        return;\n      }\n\n      // Throw the error next frame\n      points._error = error;\n    });\n}\n\n/**\n * Creates features for each point and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the point features will be placed.\n */\nVector3DTilePoints.prototype.createFeatures = function (content, features) {\n  const billboardCollection = this._billboardCollection;\n  const labelCollection = this._labelCollection;\n  const polylineCollection = this._polylineCollection;\n\n  const batchIds = this._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n\n    const billboard = billboardCollection.get(i);\n    const label = labelCollection.get(i);\n    const polyline = polylineCollection.get(i);\n\n    features[batchId] = new Cesium3DTilePointFeature(\n      content,\n      batchId,\n      billboard,\n      label,\n      polyline,\n    );\n  }\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (batch table color * color).\n *\n * @param {boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePoints.prototype.applyDebugSettings = function (enabled, color) {\n  if (enabled) {\n    Color.clone(color, this._billboardCollection._highlightColor);\n    Color.clone(color, this._labelCollection._highlightColor);\n    Color.clone(color, this._polylineCollection._highlightColor);\n  } else {\n    Color.clone(Color.WHITE, this._billboardCollection._highlightColor);\n    Color.clone(Color.WHITE, this._labelCollection._highlightColor);\n    Color.clone(Color.WHITE, this._polylineCollection._highlightColor);\n  }\n};\n\nfunction clearStyle(polygons, features) {\n  const batchIds = polygons._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    feature.show = true;\n    feature.pointSize = Cesium3DTilePointFeature.defaultPointSize;\n    feature.color = Cesium3DTilePointFeature.defaultColor;\n    feature.pointOutlineColor =\n      Cesium3DTilePointFeature.defaultPointOutlineColor;\n    feature.pointOutlineWidth =\n      Cesium3DTilePointFeature.defaultPointOutlineWidth;\n    feature.labelColor = Color.WHITE;\n    feature.labelOutlineColor = Color.WHITE;\n    feature.labelOutlineWidth = 1.0;\n    feature.font = \"30px sans-serif\";\n    feature.labelStyle = LabelStyle.FILL;\n    feature.labelText = undefined;\n    feature.backgroundColor = new Color(0.165, 0.165, 0.165, 0.8);\n    feature.backgroundPadding = new Cartesian2(7, 5);\n    feature.backgroundEnabled = false;\n    feature.scaleByDistance = undefined;\n    feature.translucencyByDistance = undefined;\n    feature.distanceDisplayCondition = undefined;\n    feature.heightOffset = 0.0;\n    feature.anchorLineEnabled = false;\n    feature.anchorLineColor = Color.WHITE;\n    feature.image = undefined;\n    feature.disableDepthTestDistance = 0.0;\n    feature.horizontalOrigin = HorizontalOrigin.CENTER;\n    feature.verticalOrigin = VerticalOrigin.CENTER;\n    feature.labelHorizontalOrigin = HorizontalOrigin.RIGHT;\n    feature.labelVerticalOrigin = VerticalOrigin.BASELINE;\n  }\n}\n\nconst scratchColor = new Color();\nconst scratchColor2 = new Color();\nconst scratchColor3 = new Color();\nconst scratchColor4 = new Color();\nconst scratchColor5 = new Color();\nconst scratchColor6 = new Color();\nconst scratchScaleByDistance = new NearFarScalar();\nconst scratchTranslucencyByDistance = new NearFarScalar();\nconst scratchDistanceDisplayCondition = new DistanceDisplayCondition();\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePoints.prototype.applyStyle = function (style, features) {\n  if (!defined(style)) {\n    clearStyle(this, features);\n    return;\n  }\n\n  const batchIds = this._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    if (defined(style.show)) {\n      feature.show = style.show.evaluate(feature);\n    }\n\n    if (defined(style.pointSize)) {\n      feature.pointSize = style.pointSize.evaluate(feature);\n    }\n\n    if (defined(style.color)) {\n      feature.color = style.color.evaluateColor(feature, scratchColor);\n    }\n\n    if (defined(style.pointOutlineColor)) {\n      feature.pointOutlineColor = style.pointOutlineColor.evaluateColor(\n        feature,\n        scratchColor2,\n      );\n    }\n\n    if (defined(style.pointOutlineWidth)) {\n      feature.pointOutlineWidth = style.pointOutlineWidth.evaluate(feature);\n    }\n\n    if (defined(style.labelColor)) {\n      feature.labelColor = style.labelColor.evaluateColor(\n        feature,\n        scratchColor3,\n      );\n    }\n\n    if (defined(style.labelOutlineColor)) {\n      feature.labelOutlineColor = style.labelOutlineColor.evaluateColor(\n        feature,\n        scratchColor4,\n      );\n    }\n\n    if (defined(style.labelOutlineWidth)) {\n      feature.labelOutlineWidth = style.labelOutlineWidth.evaluate(feature);\n    }\n\n    if (defined(style.font)) {\n      feature.font = style.font.evaluate(feature);\n    }\n\n    if (defined(style.labelStyle)) {\n      feature.labelStyle = style.labelStyle.evaluate(feature);\n    }\n\n    if (defined(style.labelText)) {\n      feature.labelText = style.labelText.evaluate(feature);\n    } else {\n      feature.labelText = undefined;\n    }\n\n    if (defined(style.backgroundColor)) {\n      feature.backgroundColor = style.backgroundColor.evaluateColor(\n        feature,\n        scratchColor5,\n      );\n    }\n\n    if (defined(style.backgroundPadding)) {\n      feature.backgroundPadding = style.backgroundPadding.evaluate(feature);\n    }\n\n    if (defined(style.backgroundEnabled)) {\n      feature.backgroundEnabled = style.backgroundEnabled.evaluate(feature);\n    }\n\n    if (defined(style.scaleByDistance)) {\n      const scaleByDistanceCart4 = style.scaleByDistance.evaluate(feature);\n      if (defined(scaleByDistanceCart4)) {\n        scratchScaleByDistance.near = scaleByDistanceCart4.x;\n        scratchScaleByDistance.nearValue = scaleByDistanceCart4.y;\n        scratchScaleByDistance.far = scaleByDistanceCart4.z;\n        scratchScaleByDistance.farValue = scaleByDistanceCart4.w;\n        feature.scaleByDistance = scratchScaleByDistance;\n      } else {\n        feature.scaleByDistance = undefined;\n      }\n    } else {\n      feature.scaleByDistance = undefined;\n    }\n\n    if (defined(style.translucencyByDistance)) {\n      const translucencyByDistanceCart4 =\n        style.translucencyByDistance.evaluate(feature);\n      if (defined(translucencyByDistanceCart4)) {\n        scratchTranslucencyByDistance.near = translucencyByDistanceCart4.x;\n        scratchTranslucencyByDistance.nearValue = translucencyByDistanceCart4.y;\n        scratchTranslucencyByDistance.far = translucencyByDistanceCart4.z;\n        scratchTranslucencyByDistance.farValue = translucencyByDistanceCart4.w;\n        feature.translucencyByDistance = scratchTranslucencyByDistance;\n      } else {\n        feature.translucencyByDistance = undefined;\n      }\n    } else {\n      feature.translucencyByDistance = undefined;\n    }\n\n    if (defined(style.distanceDisplayCondition)) {\n      const distanceDisplayConditionCart2 =\n        style.distanceDisplayCondition.evaluate(feature);\n      if (defined(distanceDisplayConditionCart2)) {\n        scratchDistanceDisplayCondition.near = distanceDisplayConditionCart2.x;\n        scratchDistanceDisplayCondition.far = distanceDisplayConditionCart2.y;\n        feature.distanceDisplayCondition = scratchDistanceDisplayCondition;\n      } else {\n        feature.distanceDisplayCondition = undefined;\n      }\n    } else {\n      feature.distanceDisplayCondition = undefined;\n    }\n\n    if (defined(style.heightOffset)) {\n      feature.heightOffset = style.heightOffset.evaluate(feature);\n    }\n\n    if (defined(style.anchorLineEnabled)) {\n      feature.anchorLineEnabled = style.anchorLineEnabled.evaluate(feature);\n    }\n\n    if (defined(style.anchorLineColor)) {\n      feature.anchorLineColor = style.anchorLineColor.evaluateColor(\n        feature,\n        scratchColor6,\n      );\n    }\n\n    if (defined(style.image)) {\n      feature.image = style.image.evaluate(feature);\n    } else {\n      feature.image = undefined;\n    }\n\n    if (defined(style.disableDepthTestDistance)) {\n      feature.disableDepthTestDistance =\n        style.disableDepthTestDistance.evaluate(feature);\n    }\n\n    if (defined(style.horizontalOrigin)) {\n      feature.horizontalOrigin = style.horizontalOrigin.evaluate(feature);\n    }\n\n    if (defined(style.verticalOrigin)) {\n      feature.verticalOrigin = style.verticalOrigin.evaluate(feature);\n    }\n\n    if (defined(style.labelHorizontalOrigin)) {\n      feature.labelHorizontalOrigin =\n        style.labelHorizontalOrigin.evaluate(feature);\n    }\n\n    if (defined(style.labelVerticalOrigin)) {\n      feature.labelVerticalOrigin = style.labelVerticalOrigin.evaluate(feature);\n    }\n  }\n};\n\n/**\n * @private\n */\nVector3DTilePoints.prototype.update = function (frameState) {\n  if (!this._ready) {\n    if (!defined(this._promise)) {\n      this._promise = createPoints(this, frameState.mapProjection.ellipsoid);\n    }\n\n    if (defined(this._error)) {\n      const error = this._error;\n      this._error = undefined;\n      throw error;\n    }\n  }\n\n  this._polylineCollection.update(frameState);\n  this._billboardCollection.update(frameState);\n  this._labelCollection.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePoints.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePoints.prototype.destroy = function () {\n  this._billboardCollection =\n    this._billboardCollection && this._billboardCollection.destroy();\n  this._labelCollection =\n    this._labelCollection && this._labelCollection.destroy();\n  this._polylineCollection =\n    this._polylineCollection && this._polylineCollection.destroy();\n  return destroyObject(this);\n};\nexport default Vector3DTilePoints;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport Vector3DTileBatch from \"./Vector3DTileBatch.js\";\nimport Vector3DTilePrimitive from \"./Vector3DTilePrimitive.js\";\n\n/**\n * Creates a batch of pre-triangulated polygons draped on terrain and/or 3D Tiles.\n *\n * @alias Vector3DTilePolygons\n * @constructor\n *\n * @param {object} options An object with following properties:\n * @param {Float32Array|Uint16Array} options.positions The positions of the polygons. The positions must be contiguous\n * so that the positions for polygon n are in [c, c + counts[n]] where c = sum{counts[0], counts[n - 1]} and they are the outer ring of\n * the polygon in counter-clockwise order.\n * @param {Uint32Array} options.counts The number of positions in the each polygon.\n * @param {Uint32Array} options.indices The indices of the triangulated polygons. The indices must be contiguous so that\n * the indices for polygon n are in [i, i + indexCounts[n]] where i = sum{indexCounts[0], indexCounts[n - 1]}.\n * @param {Uint32Array} options.indexCounts The number of indices for each polygon.\n * @param {number} options.minimumHeight The minimum height of the terrain covered by the tile.\n * @param {number} options.maximumHeight The maximum height of the terrain covered by the tile.\n * @param {Float32Array} [options.polygonMinimumHeights] An array containing the minimum heights for each polygon.\n * @param {Float32Array} [options.polygonMaximumHeights] An array containing the maximum heights for each polygon.\n * @param {Rectangle} options.rectangle The rectangle containing the tile.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid.\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The RTC center.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched polygons.\n * @param {Uint16Array} options.batchIds The batch ids for each polygon.\n * @param {BoundingSphere} options.boundingVolume The bounding volume for the entire batch of polygons.\n *\n * @private\n */\nfunction Vector3DTilePolygons(options) {\n  // All of the private properties will be released except _primitive after the Vector3DTilePrimitive is created.\n  this._batchTable = options.batchTable;\n\n  this._batchIds = options.batchIds;\n  this._positions = options.positions;\n  this._counts = options.counts;\n\n  this._indices = options.indices;\n  this._indexCounts = options.indexCounts;\n  this._indexOffsets = undefined;\n\n  this._batchTableColors = undefined;\n  this._packedBuffer = undefined;\n\n  this._batchedPositions = undefined;\n  this._transferrableBatchIds = undefined;\n  this._vertexBatchIds = undefined;\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.WGS84;\n  this._minimumHeight = options.minimumHeight;\n  this._maximumHeight = options.maximumHeight;\n  this._polygonMinimumHeights = options.polygonMinimumHeights;\n  this._polygonMaximumHeights = options.polygonMaximumHeights;\n  this._center = options.center ?? Cartesian3.ZERO;\n  this._rectangle = options.rectangle;\n\n  this._center = undefined;\n\n  this._boundingVolume = options.boundingVolume;\n  this._boundingVolumes = undefined;\n\n  this._batchedIndices = undefined;\n\n  this._ready = false;\n  this._promise = undefined;\n  this._error = undefined;\n  this._primitive = undefined;\n\n  /**\n   * Draws the wireframe of the classification meshes.\n   * @type {boolean}\n   * @default false\n   */\n  this.debugWireframe = false;\n\n  /**\n   * Forces a re-batch instead of waiting after a number of frames have been rendered. For testing only.\n   * @type {boolean}\n   * @default false\n   */\n  this.forceRebatch = false;\n\n  /**\n   * What this tile will classify.\n   * @type {ClassificationType}\n   * @default ClassificationType.BOTH\n   */\n  this.classificationType = ClassificationType.BOTH;\n}\n\nObject.defineProperties(Vector3DTilePolygons.prototype, {\n  /**\n   * Gets the number of triangles.\n   *\n   * @memberof Vector3DTilePolygons.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  trianglesLength: {\n    get: function () {\n      if (defined(this._primitive)) {\n        return this._primitive.trianglesLength;\n      }\n      return 0;\n    },\n  },\n\n  /**\n   * Gets the geometry memory in bytes.\n   *\n   * @memberof Vector3DTilePolygons.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  geometryByteLength: {\n    get: function () {\n      if (defined(this._primitive)) {\n        return this._primitive.geometryByteLength;\n      }\n      return 0;\n    },\n  },\n\n  /**\n   * Returns true when the primitive is ready to render.\n   * @memberof Vector3DTilePolygons.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\nfunction packBuffer(polygons) {\n  const packedBuffer = new Float64Array(\n    3 +\n      Cartesian3.packedLength +\n      Ellipsoid.packedLength +\n      Rectangle.packedLength,\n  );\n\n  let offset = 0;\n  packedBuffer[offset++] = polygons._indices.BYTES_PER_ELEMENT;\n\n  packedBuffer[offset++] = polygons._minimumHeight;\n  packedBuffer[offset++] = polygons._maximumHeight;\n\n  Cartesian3.pack(polygons._center, packedBuffer, offset);\n  offset += Cartesian3.packedLength;\n\n  Ellipsoid.pack(polygons._ellipsoid, packedBuffer, offset);\n  offset += Ellipsoid.packedLength;\n\n  Rectangle.pack(polygons._rectangle, packedBuffer, offset);\n\n  return packedBuffer;\n}\n\nfunction unpackBuffer(polygons, packedBuffer) {\n  let offset = 1;\n\n  const numBVS = packedBuffer[offset++];\n  const bvs = (polygons._boundingVolumes = new Array(numBVS));\n\n  for (let i = 0; i < numBVS; ++i) {\n    bvs[i] = OrientedBoundingBox.unpack(packedBuffer, offset);\n    offset += OrientedBoundingBox.packedLength;\n  }\n\n  const numBatchedIndices = packedBuffer[offset++];\n  const bis = (polygons._batchedIndices = new Array(numBatchedIndices));\n\n  for (let j = 0; j < numBatchedIndices; ++j) {\n    const color = Color.unpack(packedBuffer, offset);\n    offset += Color.packedLength;\n\n    const indexOffset = packedBuffer[offset++];\n    const count = packedBuffer[offset++];\n\n    const length = packedBuffer[offset++];\n    const batchIds = new Array(length);\n\n    for (let k = 0; k < length; ++k) {\n      batchIds[k] = packedBuffer[offset++];\n    }\n\n    bis[j] = new Vector3DTileBatch({\n      color: color,\n      offset: indexOffset,\n      count: count,\n      batchIds: batchIds,\n    });\n  }\n}\n\nconst createVerticesTaskProcessor = new TaskProcessor(\n  \"createVectorTilePolygons\",\n  5,\n);\nconst scratchColor = new Color();\n\nfunction createPrimitive(polygons) {\n  if (defined(polygons._primitive)) {\n    return;\n  }\n\n  let positions = polygons._positions;\n  let counts = polygons._counts;\n  let indexCounts = polygons._indexCounts;\n  let indices = polygons._indices;\n\n  let batchIds = polygons._transferrableBatchIds;\n  let batchTableColors = polygons._batchTableColors;\n\n  let packedBuffer = polygons._packedBuffer;\n\n  if (!defined(batchTableColors)) {\n    // Copy because they may be the views on the same buffer.\n    positions = polygons._positions = polygons._positions.slice();\n    counts = polygons._counts = polygons._counts.slice();\n    indexCounts = polygons._indexCounts = polygons._indexCounts.slice();\n    indices = polygons._indices = polygons._indices.slice();\n\n    polygons._center = polygons._ellipsoid.cartographicToCartesian(\n      Rectangle.center(polygons._rectangle),\n    );\n\n    batchIds = polygons._transferrableBatchIds = new Uint32Array(\n      polygons._batchIds,\n    );\n    batchTableColors = polygons._batchTableColors = new Uint32Array(\n      batchIds.length,\n    );\n    const batchTable = polygons._batchTable;\n\n    const length = batchTableColors.length;\n    for (let i = 0; i < length; ++i) {\n      const color = batchTable.getColor(i, scratchColor);\n      batchTableColors[i] = color.toRgba();\n    }\n\n    packedBuffer = polygons._packedBuffer = packBuffer(polygons);\n  }\n\n  const transferrableObjects = [\n    positions.buffer,\n    counts.buffer,\n    indexCounts.buffer,\n    indices.buffer,\n    batchIds.buffer,\n    batchTableColors.buffer,\n    packedBuffer.buffer,\n  ];\n  const parameters = {\n    packedBuffer: packedBuffer.buffer,\n    positions: positions.buffer,\n    counts: counts.buffer,\n    indexCounts: indexCounts.buffer,\n    indices: indices.buffer,\n    batchIds: batchIds.buffer,\n    batchTableColors: batchTableColors.buffer,\n  };\n\n  let minimumHeights = polygons._polygonMinimumHeights;\n  let maximumHeights = polygons._polygonMaximumHeights;\n  if (defined(minimumHeights) && defined(maximumHeights)) {\n    minimumHeights = minimumHeights.slice();\n    maximumHeights = maximumHeights.slice();\n\n    transferrableObjects.push(minimumHeights.buffer, maximumHeights.buffer);\n    parameters.minimumHeights = minimumHeights;\n    parameters.maximumHeights = maximumHeights;\n  }\n\n  const verticesPromise = createVerticesTaskProcessor.scheduleTask(\n    parameters,\n    transferrableObjects,\n  );\n  if (!defined(verticesPromise)) {\n    // Postponed\n    return;\n  }\n\n  return verticesPromise\n    .then((result) => {\n      if (polygons.isDestroyed()) {\n        return;\n      }\n\n      polygons._positions = undefined;\n      polygons._counts = undefined;\n      polygons._polygonMinimumHeights = undefined;\n      polygons._polygonMaximumHeights = undefined;\n\n      const packedBuffer = new Float64Array(result.packedBuffer);\n      const indexDatatype = packedBuffer[0];\n      unpackBuffer(polygons, packedBuffer);\n\n      polygons._indices =\n        IndexDatatype.getSizeInBytes(indexDatatype) === 2\n          ? new Uint16Array(result.indices)\n          : new Uint32Array(result.indices);\n      polygons._indexOffsets = new Uint32Array(result.indexOffsets);\n      polygons._indexCounts = new Uint32Array(result.indexCounts);\n\n      // will be released\n      polygons._batchedPositions = new Float32Array(result.positions);\n      polygons._vertexBatchIds = new Uint16Array(result.batchIds);\n\n      finishPrimitive(polygons);\n\n      polygons._ready = true;\n    })\n    .catch((error) => {\n      if (polygons.isDestroyed()) {\n        return;\n      }\n\n      // Throw the error next frame\n      polygons._error = error;\n    });\n}\n\nfunction finishPrimitive(polygons) {\n  if (!defined(polygons._primitive)) {\n    polygons._primitive = new Vector3DTilePrimitive({\n      batchTable: polygons._batchTable,\n      positions: polygons._batchedPositions,\n      batchIds: polygons._batchIds,\n      vertexBatchIds: polygons._vertexBatchIds,\n      indices: polygons._indices,\n      indexOffsets: polygons._indexOffsets,\n      indexCounts: polygons._indexCounts,\n      batchedIndices: polygons._batchedIndices,\n      boundingVolume: polygons._boundingVolume,\n      boundingVolumes: polygons._boundingVolumes,\n      center: polygons._center,\n    });\n\n    polygons._batchTable = undefined;\n    polygons._batchIds = undefined;\n    polygons._positions = undefined;\n    polygons._counts = undefined;\n    polygons._indices = undefined;\n    polygons._indexCounts = undefined;\n    polygons._indexOffsets = undefined;\n    polygons._batchTableColors = undefined;\n    polygons._packedBuffer = undefined;\n    polygons._batchedPositions = undefined;\n    polygons._transferrableBatchIds = undefined;\n    polygons._vertexBatchIds = undefined;\n    polygons._ellipsoid = undefined;\n    polygons._minimumHeight = undefined;\n    polygons._maximumHeight = undefined;\n    polygons._polygonMinimumHeights = undefined;\n    polygons._polygonMaximumHeights = undefined;\n    polygons._center = undefined;\n    polygons._rectangle = undefined;\n    polygons._boundingVolume = undefined;\n    polygons._boundingVolumes = undefined;\n    polygons._batchedIndices = undefined;\n  }\n}\n\n/**\n * Creates features for each polygon and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTilePolygons.prototype.createFeatures = function (content, features) {\n  this._primitive.createFeatures(content, features);\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (polygon batch table color * color).\n *\n * @param {boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePolygons.prototype.applyDebugSettings = function (enabled, color) {\n  this._primitive.applyDebugSettings(enabled, color);\n};\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePolygons.prototype.applyStyle = function (style, features) {\n  this._primitive.applyStyle(style, features);\n};\n\n/**\n * Call when updating the color of a polygon with batchId changes color. The polygons will need to be re-batched\n * on the next update.\n *\n * @param {number} batchId The batch id of the polygon whose color has changed.\n * @param {Color} color The new polygon color.\n */\nVector3DTilePolygons.prototype.updateCommands = function (batchId, color) {\n  this._primitive.updateCommands(batchId, color);\n};\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTilePolygons.prototype.update = function (frameState) {\n  if (!this._ready) {\n    if (!defined(this._promise)) {\n      this._promise = createPrimitive(this);\n    }\n\n    if (defined(this._error)) {\n      const error = this._error;\n      this._error = undefined;\n      throw error;\n    }\n\n    return;\n  }\n\n  this._primitive.debugWireframe = this.debugWireframe;\n  this._primitive.forceRebatch = this.forceRebatch;\n  this._primitive.classificationType = this.classificationType;\n  this._primitive.update(frameState);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePolygons.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePolygons.prototype.destroy = function () {\n  this._primitive = this._primitive && this._primitive.destroy();\n  return destroyObject(this);\n};\nexport default Vector3DTilePolygons;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TaskProcessor from \"../Core/TaskProcessor.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport PolylineCommon from \"../Shaders/PolylineCommon.js\";\nimport Vector3DTilePolylinesVS from \"../Shaders/Vector3DTilePolylinesVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\n\n/**\n * Creates a batch of polylines that have been subdivided to be draped on terrain.\n *\n * @alias Vector3DTilePolylines\n * @constructor\n *\n * @param {object} options An object with following properties:\n * @param {Uint16Array} options.positions The positions of the polylines\n * @param {Uint32Array} options.counts The number or positions in the each polyline.\n * @param {Uint16Array} options.widths The width of each polyline.\n * @param {number} options.minimumHeight The minimum height of the terrain covered by the tile.\n * @param {number} options.maximumHeight The maximum height of the terrain covered by the tile.\n * @param {Rectangle} options.rectangle The rectangle containing the tile.\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The RTC center.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched polylines.\n * @param {Uint16Array} options.batchIds The batch ids for each polyline.\n * @param {BoundingSphere} options.boundingVolume The bounding volume for the entire batch of polylines.\n * @param {boolean} options.keepDecodedPositions Whether to keep decoded positions in memory.\n *\n * @private\n */\nfunction Vector3DTilePolylines(options) {\n  // these arrays are all released after the first update.\n  this._positions = options.positions;\n  this._widths = options.widths;\n  this._counts = options.counts;\n  this._batchIds = options.batchIds;\n\n  this._ellipsoid = options.ellipsoid ?? Ellipsoid.WGS84;\n  this._minimumHeight = options.minimumHeight;\n  this._maximumHeight = options.maximumHeight;\n  this._center = options.center;\n  this._rectangle = options.rectangle;\n\n  this._boundingVolume = options.boundingVolume;\n  this._batchTable = options.batchTable;\n\n  this._va = undefined;\n  this._sp = undefined;\n  this._rs = undefined;\n  this._uniformMap = undefined;\n  this._command = undefined;\n\n  this._transferrableBatchIds = undefined;\n  this._packedBuffer = undefined;\n\n  this._keepDecodedPositions = options.keepDecodedPositions;\n  this._decodedPositions = undefined;\n  this._decodedPositionOffsets = undefined;\n\n  this._currentPositions = undefined;\n  this._previousPositions = undefined;\n  this._nextPositions = undefined;\n  this._expandAndWidth = undefined;\n  this._vertexBatchIds = undefined;\n  this._indices = undefined;\n\n  this._constantColor = Color.clone(Color.WHITE);\n  this._highlightColor = this._constantColor;\n\n  this._trianglesLength = 0;\n  this._geometryByteLength = 0;\n\n  this._ready = false;\n  this._promise = undefined;\n  this._error = undefined;\n}\n\nObject.defineProperties(Vector3DTilePolylines.prototype, {\n  /**\n   * Gets the number of triangles.\n   *\n   * @memberof Vector3DTilePolylines.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  trianglesLength: {\n    get: function () {\n      return this._trianglesLength;\n    },\n  },\n\n  /**\n   * Gets the geometry memory in bytes.\n   *\n   * @memberof Vector3DTilePolylines.prototype\n   *\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  geometryByteLength: {\n    get: function () {\n      return this._geometryByteLength;\n    },\n  },\n\n  /**\n   * Returns true when the primitive is ready to render.\n   * @memberof Vector3DTilePolylines.prototype\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n});\n\nfunction packBuffer(polylines) {\n  const rectangle = polylines._rectangle;\n  const minimumHeight = polylines._minimumHeight;\n  const maximumHeight = polylines._maximumHeight;\n  const ellipsoid = polylines._ellipsoid;\n  const center = polylines._center;\n\n  const packedLength =\n    2 +\n    Rectangle.packedLength +\n    Ellipsoid.packedLength +\n    Cartesian3.packedLength;\n  const packedBuffer = new Float64Array(packedLength);\n\n  let offset = 0;\n  packedBuffer[offset++] = minimumHeight;\n  packedBuffer[offset++] = maximumHeight;\n\n  Rectangle.pack(rectangle, packedBuffer, offset);\n  offset += Rectangle.packedLength;\n\n  Ellipsoid.pack(ellipsoid, packedBuffer, offset);\n  offset += Ellipsoid.packedLength;\n\n  Cartesian3.pack(center, packedBuffer, offset);\n\n  return packedBuffer;\n}\n\nconst createVerticesTaskProcessor = new TaskProcessor(\n  \"createVectorTilePolylines\",\n  5,\n);\nconst attributeLocations = {\n  previousPosition: 0,\n  currentPosition: 1,\n  nextPosition: 2,\n  expandAndWidth: 3,\n  a_batchId: 4,\n};\n\nfunction createVertexArray(polylines, context) {\n  if (defined(polylines._va)) {\n    return;\n  }\n\n  let positions = polylines._positions;\n  let widths = polylines._widths;\n  let counts = polylines._counts;\n  let batchIds = polylines._transferrableBatchIds;\n\n  let packedBuffer = polylines._packedBuffer;\n\n  if (!defined(packedBuffer)) {\n    // Copy because they may be the views on the same buffer.\n    positions = polylines._positions = positions.slice();\n    widths = polylines._widths = widths.slice();\n    counts = polylines._counts = counts.slice();\n\n    batchIds = polylines._transferrableBatchIds = polylines._batchIds.slice();\n\n    packedBuffer = polylines._packedBuffer = packBuffer(polylines);\n  }\n\n  const transferrableObjects = [\n    positions.buffer,\n    widths.buffer,\n    counts.buffer,\n    batchIds.buffer,\n    packedBuffer.buffer,\n  ];\n  const parameters = {\n    positions: positions.buffer,\n    widths: widths.buffer,\n    counts: counts.buffer,\n    batchIds: batchIds.buffer,\n    packedBuffer: packedBuffer.buffer,\n    keepDecodedPositions: polylines._keepDecodedPositions,\n  };\n\n  const verticesPromise = createVerticesTaskProcessor.scheduleTask(\n    parameters,\n    transferrableObjects,\n  );\n  if (!defined(verticesPromise)) {\n    // Postponed\n    return;\n  }\n\n  return verticesPromise\n    .then(function (result) {\n      if (polylines.isDestroyed()) {\n        return;\n      }\n\n      if (polylines._keepDecodedPositions) {\n        polylines._decodedPositions = new Float64Array(result.decodedPositions);\n        polylines._decodedPositionOffsets = new Uint32Array(\n          result.decodedPositionOffsets,\n        );\n      }\n\n      polylines._currentPositions = new Float32Array(result.currentPositions);\n      polylines._previousPositions = new Float32Array(result.previousPositions);\n      polylines._nextPositions = new Float32Array(result.nextPositions);\n      polylines._expandAndWidth = new Float32Array(result.expandAndWidth);\n      polylines._vertexBatchIds = new Uint16Array(result.batchIds);\n\n      const indexDatatype = result.indexDatatype;\n      polylines._indices =\n        indexDatatype === IndexDatatype.UNSIGNED_SHORT\n          ? new Uint16Array(result.indices)\n          : new Uint32Array(result.indices);\n\n      finishVertexArray(polylines, context);\n\n      polylines._ready = true;\n    })\n    .catch((error) => {\n      if (polylines.isDestroyed()) {\n        return;\n      }\n\n      // Throw the error next frame\n      polylines._error = error;\n    });\n}\n\nfunction finishVertexArray(polylines, context) {\n  if (!defined(polylines._va)) {\n    const curPositions = polylines._currentPositions;\n    const prevPositions = polylines._previousPositions;\n    const nextPositions = polylines._nextPositions;\n    const expandAndWidth = polylines._expandAndWidth;\n    const vertexBatchIds = polylines._vertexBatchIds;\n    const indices = polylines._indices;\n\n    let byteLength =\n      prevPositions.byteLength +\n      curPositions.byteLength +\n      nextPositions.byteLength;\n    byteLength +=\n      expandAndWidth.byteLength +\n      vertexBatchIds.byteLength +\n      indices.byteLength;\n    polylines._trianglesLength = indices.length / 3;\n    polylines._geometryByteLength = byteLength;\n\n    const prevPositionBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: prevPositions,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const curPositionBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: curPositions,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const nextPositionBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: nextPositions,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const expandAndWidthBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: expandAndWidth,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n    const idBuffer = Buffer.createVertexBuffer({\n      context: context,\n      typedArray: vertexBatchIds,\n      usage: BufferUsage.STATIC_DRAW,\n    });\n\n    const indexBuffer = Buffer.createIndexBuffer({\n      context: context,\n      typedArray: indices,\n      usage: BufferUsage.STATIC_DRAW,\n      indexDatatype:\n        indices.BYTES_PER_ELEMENT === 2\n          ? IndexDatatype.UNSIGNED_SHORT\n          : IndexDatatype.UNSIGNED_INT,\n    });\n\n    const vertexAttributes = [\n      {\n        index: attributeLocations.previousPosition,\n        vertexBuffer: prevPositionBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        index: attributeLocations.currentPosition,\n        vertexBuffer: curPositionBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        index: attributeLocations.nextPosition,\n        vertexBuffer: nextPositionBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 3,\n      },\n      {\n        index: attributeLocations.expandAndWidth,\n        vertexBuffer: expandAndWidthBuffer,\n        componentDatatype: ComponentDatatype.FLOAT,\n        componentsPerAttribute: 2,\n      },\n      {\n        index: attributeLocations.a_batchId,\n        vertexBuffer: idBuffer,\n        componentDatatype: ComponentDatatype.UNSIGNED_SHORT,\n        componentsPerAttribute: 1,\n      },\n    ];\n\n    polylines._va = new VertexArray({\n      context: context,\n      attributes: vertexAttributes,\n      indexBuffer: indexBuffer,\n    });\n\n    polylines._positions = undefined;\n    polylines._widths = undefined;\n    polylines._counts = undefined;\n\n    polylines._ellipsoid = undefined;\n    polylines._minimumHeight = undefined;\n    polylines._maximumHeight = undefined;\n    polylines._rectangle = undefined;\n\n    polylines._transferrableBatchIds = undefined;\n    polylines._packedBuffer = undefined;\n\n    polylines._currentPositions = undefined;\n    polylines._previousPositions = undefined;\n    polylines._nextPositions = undefined;\n    polylines._expandAndWidth = undefined;\n    polylines._vertexBatchIds = undefined;\n    polylines._indices = undefined;\n  }\n}\n\nconst modifiedModelViewScratch = new Matrix4();\nconst rtcScratch = new Cartesian3();\n\nfunction createUniformMap(primitive, context) {\n  if (defined(primitive._uniformMap)) {\n    return;\n  }\n\n  primitive._uniformMap = {\n    u_modifiedModelView: function () {\n      const viewMatrix = context.uniformState.view;\n      Matrix4.clone(viewMatrix, modifiedModelViewScratch);\n      Matrix4.multiplyByPoint(\n        modifiedModelViewScratch,\n        primitive._center,\n        rtcScratch,\n      );\n      Matrix4.setTranslation(\n        modifiedModelViewScratch,\n        rtcScratch,\n        modifiedModelViewScratch,\n      );\n      return modifiedModelViewScratch;\n    },\n    u_highlightColor: function () {\n      return primitive._highlightColor;\n    },\n  };\n}\n\nfunction createRenderStates(primitive) {\n  if (defined(primitive._rs)) {\n    return;\n  }\n\n  const polygonOffset = {\n    enabled: true,\n    factor: -5.0,\n    units: -5.0,\n  };\n\n  primitive._rs = RenderState.fromCache({\n    blending: BlendingState.ALPHA_BLEND,\n    depthMask: false,\n    depthTest: {\n      enabled: true,\n    },\n    polygonOffset: polygonOffset,\n  });\n}\n\nconst PolylineFS =\n  \"uniform vec4 u_highlightColor; \\n\" +\n  \"void main()\\n\" +\n  \"{\\n\" +\n  \"    out_FragColor = u_highlightColor;\\n\" +\n  \"}\\n\";\n\nfunction createShaders(primitive, context) {\n  if (defined(primitive._sp)) {\n    return;\n  }\n\n  const batchTable = primitive._batchTable;\n\n  const vsSource = batchTable.getVertexShaderCallback(\n    false,\n    \"a_batchId\",\n    undefined,\n  )(Vector3DTilePolylinesVS);\n  const fsSource = batchTable.getFragmentShaderCallback(\n    false,\n    undefined,\n    false,\n  )(PolylineFS);\n\n  const vs = new ShaderSource({\n    defines: [\"VECTOR_TILE\", \"CLIP_POLYLINE\"],\n    sources: [PolylineCommon, vsSource],\n  });\n  const fs = new ShaderSource({\n    defines: [\"VECTOR_TILE\"],\n    sources: [fsSource],\n  });\n\n  primitive._sp = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n}\n\nfunction queueCommands(primitive, frameState) {\n  if (!defined(primitive._command)) {\n    const uniformMap = primitive._batchTable.getUniformMapCallback()(\n      primitive._uniformMap,\n    );\n    primitive._command = new DrawCommand({\n      owner: primitive,\n      vertexArray: primitive._va,\n      renderState: primitive._rs,\n      shaderProgram: primitive._sp,\n      uniformMap: uniformMap,\n      boundingVolume: primitive._boundingVolume,\n      pass: Pass.TRANSLUCENT,\n      pickId: primitive._batchTable.getPickId(),\n    });\n  }\n\n  frameState.commandList.push(primitive._command);\n}\n\nVector3DTilePolylines.getPolylinePositions = function (polylines, batchId) {\n  const batchIds = polylines._batchIds;\n  const positions = polylines._decodedPositions;\n  const offsets = polylines._decodedPositionOffsets;\n\n  if (!defined(batchIds) || !defined(positions)) {\n    return undefined;\n  }\n\n  let i;\n  let j;\n  const polylinesLength = batchIds.length;\n  let positionsLength = 0;\n  let resultCounter = 0;\n\n  for (i = 0; i < polylinesLength; ++i) {\n    if (batchIds[i] === batchId) {\n      positionsLength += offsets[i + 1] - offsets[i];\n    }\n  }\n\n  if (positionsLength === 0) {\n    return undefined;\n  }\n\n  const results = new Float64Array(positionsLength * 3);\n\n  for (i = 0; i < polylinesLength; ++i) {\n    if (batchIds[i] === batchId) {\n      const offset = offsets[i];\n      const count = offsets[i + 1] - offset;\n      for (j = 0; j < count; ++j) {\n        const decodedOffset = (offset + j) * 3;\n        results[resultCounter++] = positions[decodedOffset];\n        results[resultCounter++] = positions[decodedOffset + 1];\n        results[resultCounter++] = positions[decodedOffset + 2];\n      }\n    }\n  }\n\n  return results;\n};\n\n/**\n * Get the polyline positions for the given feature.\n *\n * @param {number} batchId The batch ID of the feature.\n */\nVector3DTilePolylines.prototype.getPositions = function (batchId) {\n  return Vector3DTilePolylines.getPolylinePositions(this, batchId);\n};\n\n/**\n * Creates features for each polyline and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTilePolylines.prototype.createFeatures = function (content, features) {\n  const batchIds = this._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    features[batchId] = new Cesium3DTileFeature(content, batchId);\n  }\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (polyline batch table color * color).\n *\n * @param {boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePolylines.prototype.applyDebugSettings = function (enabled, color) {\n  this._highlightColor = enabled ? color : this._constantColor;\n};\n\nfunction clearStyle(polygons, features) {\n  const batchIds = polygons._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    feature.show = true;\n    feature.color = Color.WHITE;\n  }\n}\n\nconst scratchColor = new Color();\n\nconst DEFAULT_COLOR_VALUE = Color.WHITE;\nconst DEFAULT_SHOW_VALUE = true;\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePolylines.prototype.applyStyle = function (style, features) {\n  if (!defined(style)) {\n    clearStyle(this, features);\n    return;\n  }\n\n  const batchIds = this._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    feature.color = defined(style.color)\n      ? style.color.evaluateColor(feature, scratchColor)\n      : DEFAULT_COLOR_VALUE;\n    feature.show = defined(style.show)\n      ? style.show.evaluate(feature)\n      : DEFAULT_SHOW_VALUE;\n  }\n};\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTilePolylines.prototype.update = function (frameState) {\n  const context = frameState.context;\n  if (!this._ready) {\n    if (!defined(this._promise)) {\n      this._promise = createVertexArray(this, context);\n    }\n\n    if (defined(this._error)) {\n      const error = this._error;\n      this._error = undefined;\n      throw error;\n    }\n\n    return;\n  }\n\n  createUniformMap(this, context);\n  createShaders(this, context);\n  createRenderStates(this);\n\n  const passes = frameState.passes;\n  if (passes.render || passes.pick) {\n    queueCommands(this, frameState);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePolylines.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePolylines.prototype.destroy = function () {\n  this._va = this._va && this._va.destroy();\n  this._sp = this._sp && this._sp.destroy();\n  return destroyObject(this);\n};\nexport default Vector3DTilePolylines;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Color from \"../Core/Color.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport Buffer from \"../Renderer/Buffer.js\";\nimport BufferUsage from \"../Renderer/BufferUsage.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderProgram from \"../Renderer/ShaderProgram.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport VertexArray from \"../Renderer/VertexArray.js\";\nimport ShadowVolumeFS from \"../Shaders/ShadowVolumeFS.js\";\nimport VectorTileVS from \"../Shaders/VectorTileVS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Cesium3DTileFeature from \"./Cesium3DTileFeature.js\";\nimport ClassificationType from \"./ClassificationType.js\";\nimport DepthFunction from \"./DepthFunction.js\";\nimport Expression from \"./Expression.js\";\nimport StencilConstants from \"./StencilConstants.js\";\nimport StencilFunction from \"./StencilFunction.js\";\nimport StencilOperation from \"./StencilOperation.js\";\nimport Vector3DTileBatch from \"./Vector3DTileBatch.js\";\n\n/**\n * Creates a batch of classification meshes.\n *\n * @alias Vector3DTilePrimitive\n * @constructor\n *\n * @param {object} options An object with following properties:\n * @param {Float32Array} options.positions The positions of the meshes.\n * @param {Uint16Array|Uint32Array} options.indices The indices of the triangulated meshes. The indices must be contiguous so that\n * the indices for mesh n are in [i, i + indexCounts[n]] where i = sum{indexCounts[0], indexCounts[n - 1]}.\n * @param {Uint32Array} options.indexCounts The number of indices for each mesh.\n * @param {Uint32Array} options.indexOffsets The offset into the index buffer for each mesh.\n * @param {Vector3DTileBatch[]} options.batchedIndices The index offset and count for each batch with the same color.\n * @param {Cartesian3} [options.center=Cartesian3.ZERO] The RTC center.\n * @param {Cesium3DTileBatchTable} options.batchTable The batch table for the tile containing the batched meshes.\n * @param {Uint16Array} options.batchIds The batch ids for each mesh.\n * @param {Uint16Array} options.vertexBatchIds The batch id for each vertex.\n * @param {BoundingSphere} options.boundingVolume The bounding volume for the entire batch of meshes.\n * @param {BoundingSphere[]} options.boundingVolumes The bounding volume for each mesh.\n * @param {ClassificationType} [options.classificationType] What this tile will classify.\n *\n * @private\n */\nfunction Vector3DTilePrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  this._batchTable = options.batchTable;\n  this._batchIds = options.batchIds;\n\n  // These arrays are released after VAO creation.\n  this._positions = options.positions;\n  this._vertexBatchIds = options.vertexBatchIds;\n\n  // These arrays are kept for re-batching indices based on colors.\n  // If WebGL 2 is supported, indices will be released and re-batching uses buffer-to-buffer copies.\n  this._indices = options.indices;\n  this._indexCounts = options.indexCounts;\n  this._indexOffsets = options.indexOffsets;\n  this._batchedIndices = options.batchedIndices;\n\n  this._boundingVolume = options.boundingVolume;\n  this._boundingVolumes = options.boundingVolumes;\n\n  this._center = options.center ?? Cartesian3.ZERO;\n\n  this._va = undefined;\n  this._sp = undefined;\n  this._spStencil = undefined;\n  this._spPick = undefined;\n  this._uniformMap = undefined;\n\n  // Only used with WebGL 2 to ping-pong ibos after copy.\n  this._vaSwap = undefined;\n\n  this._rsStencilDepthPass = undefined;\n  this._rsStencilDepthPass3DTiles = undefined;\n  this._rsColorPass = undefined;\n  this._rsPickPass = undefined;\n  this._rsWireframe = undefined;\n\n  this._commands = [];\n  this._commandsIgnoreShow = [];\n  this._pickCommands = [];\n\n  this._constantColor = Color.clone(Color.WHITE);\n  this._highlightColor = this._constantColor;\n\n  this._batchDirty = true;\n  this._pickCommandsDirty = true;\n  this._framesSinceLastRebatch = 0;\n\n  this._updatingAllCommands = false;\n\n  this._trianglesLength = this._indices.length / 3;\n  this._geometryByteLength =\n    this._indices.byteLength +\n    this._positions.byteLength +\n    this._vertexBatchIds.byteLength;\n\n  /**\n   * Draw the wireframe of the classification meshes.\n   * @type {boolean}\n   * @default false\n   */\n  this.debugWireframe = false;\n  this._debugWireframe = this.debugWireframe;\n  this._wireframeDirty = false;\n\n  /**\n   * Forces a re-batch instead of waiting after a number of frames have been rendered. For testing only.\n   * @type {boolean}\n   * @default false\n   */\n  this.forceRebatch = false;\n\n  /**\n   * What this tile will classify.\n   * @type {ClassificationType}\n   * @default ClassificationType.BOTH\n   */\n  this.classificationType =\n    options.classificationType ?? ClassificationType.BOTH;\n\n  // Hidden options\n  this._vertexShaderSource = options._vertexShaderSource;\n  this._fragmentShaderSource = options._fragmentShaderSource;\n  this._attributeLocations = options._attributeLocations;\n  this._uniformMap = options._uniformMap;\n  this._pickId = options._pickId;\n  this._modelMatrix = options._modelMatrix;\n  this._boundingSphere = options._boundingSphere;\n\n  this._batchIdLookUp = {};\n\n  const length = this._batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = this._batchIds[i];\n    this._batchIdLookUp[batchId] = i;\n  }\n}\n\nObject.defineProperties(Vector3DTilePrimitive.prototype, {\n  /**\n   * Gets the number of triangles.\n   *\n   * @memberof Vector3DTilePrimitive.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  trianglesLength: {\n    get: function () {\n      return this._trianglesLength;\n    },\n  },\n\n  /**\n   * Gets the geometry memory in bytes.\n   *\n   * @memberof Vector3DTilePrimitive.prototype\n   *\n   * @type {number}\n   * @readonly\n   */\n  geometryByteLength: {\n    get: function () {\n      return this._geometryByteLength;\n    },\n  },\n});\n\nconst defaultAttributeLocations = {\n  position: 0,\n  a_batchId: 1,\n};\n\nfunction createVertexArray(primitive, context) {\n  if (defined(primitive._va)) {\n    return;\n  }\n\n  const positionBuffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: primitive._positions,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const idBuffer = Buffer.createVertexBuffer({\n    context: context,\n    typedArray: primitive._vertexBatchIds,\n    usage: BufferUsage.STATIC_DRAW,\n  });\n  const indexBuffer = Buffer.createIndexBuffer({\n    context: context,\n    typedArray: primitive._indices,\n    usage: BufferUsage.DYNAMIC_DRAW,\n    indexDatatype:\n      primitive._indices.BYTES_PER_ELEMENT === 2\n        ? IndexDatatype.UNSIGNED_SHORT\n        : IndexDatatype.UNSIGNED_INT,\n  });\n\n  const vertexAttributes = [\n    {\n      index: 0,\n      vertexBuffer: positionBuffer,\n      componentDatatype: ComponentDatatype.fromTypedArray(primitive._positions),\n      componentsPerAttribute: 3,\n    },\n    {\n      index: 1,\n      vertexBuffer: idBuffer,\n      componentDatatype: ComponentDatatype.fromTypedArray(\n        primitive._vertexBatchIds,\n      ),\n      componentsPerAttribute: 1,\n    },\n  ];\n\n  primitive._va = new VertexArray({\n    context: context,\n    attributes: vertexAttributes,\n    indexBuffer: indexBuffer,\n  });\n\n  if (context.webgl2) {\n    primitive._vaSwap = new VertexArray({\n      context: context,\n      attributes: vertexAttributes,\n      indexBuffer: Buffer.createIndexBuffer({\n        context: context,\n        sizeInBytes: indexBuffer.sizeInBytes,\n        usage: BufferUsage.DYNAMIC_DRAW,\n        indexDatatype: indexBuffer.indexDatatype,\n      }),\n    });\n  }\n\n  primitive._batchedPositions = undefined;\n  primitive._transferrableBatchIds = undefined;\n  primitive._vertexBatchIds = undefined;\n}\n\nfunction createShaders(primitive, context) {\n  if (defined(primitive._sp)) {\n    return;\n  }\n\n  const batchTable = primitive._batchTable;\n  const attributeLocations =\n    primitive._attributeLocations ?? defaultAttributeLocations;\n\n  let pickId = primitive._pickId;\n  const vertexShaderSource = primitive._vertexShaderSource;\n  let fragmentShaderSource = primitive._fragmentShaderSource;\n  if (defined(vertexShaderSource)) {\n    primitive._sp = ShaderProgram.fromCache({\n      context: context,\n      vertexShaderSource: vertexShaderSource,\n      fragmentShaderSource: fragmentShaderSource,\n      attributeLocations: attributeLocations,\n    });\n    primitive._spStencil = primitive._sp;\n\n    fragmentShaderSource = ShaderSource.replaceMain(\n      fragmentShaderSource,\n      \"czm_non_pick_main\",\n    );\n    fragmentShaderSource =\n      `${fragmentShaderSource}void main() \\n` +\n      `{ \\n` +\n      `    czm_non_pick_main(); \\n` +\n      `    out_FragColor = ${pickId}; \\n` +\n      `} \\n`;\n    primitive._spPick = ShaderProgram.fromCache({\n      context: context,\n      vertexShaderSource: vertexShaderSource,\n      fragmentShaderSource: fragmentShaderSource,\n      attributeLocations: attributeLocations,\n    });\n    return;\n  }\n\n  const vsSource = batchTable.getVertexShaderCallback(\n    false,\n    \"a_batchId\",\n    undefined,\n  )(VectorTileVS);\n  let fsSource = batchTable.getFragmentShaderCallback(\n    false,\n    undefined,\n    true,\n  )(ShadowVolumeFS);\n\n  pickId = batchTable.getPickId();\n\n  let vs = new ShaderSource({\n    sources: [vsSource],\n  });\n  let fs = new ShaderSource({\n    defines: [\"VECTOR_TILE\"],\n    sources: [fsSource],\n  });\n\n  primitive._sp = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n\n  vs = new ShaderSource({\n    sources: [VectorTileVS],\n  });\n  fs = new ShaderSource({\n    defines: [\"VECTOR_TILE\"],\n    sources: [ShadowVolumeFS],\n  });\n\n  primitive._spStencil = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: vs,\n    fragmentShaderSource: fs,\n    attributeLocations: attributeLocations,\n  });\n\n  fsSource = ShaderSource.replaceMain(fsSource, \"czm_non_pick_main\");\n  fsSource =\n    `${fsSource}\\n` +\n    `void main() \\n` +\n    `{ \\n` +\n    `    czm_non_pick_main(); \\n` +\n    `    out_FragColor = ${pickId}; \\n` +\n    `} \\n`;\n\n  const pickVS = new ShaderSource({\n    sources: [vsSource],\n  });\n  const pickFS = new ShaderSource({\n    defines: [\"VECTOR_TILE\"],\n    sources: [fsSource],\n  });\n  primitive._spPick = ShaderProgram.fromCache({\n    context: context,\n    vertexShaderSource: pickVS,\n    fragmentShaderSource: pickFS,\n    attributeLocations: attributeLocations,\n  });\n}\n\nfunction getStencilDepthRenderState(mask3DTiles) {\n  const stencilFunction = mask3DTiles\n    ? StencilFunction.EQUAL\n    : StencilFunction.ALWAYS;\n  return {\n    colorMask: {\n      red: false,\n      green: false,\n      blue: false,\n      alpha: false,\n    },\n    stencilTest: {\n      enabled: true,\n      frontFunction: stencilFunction,\n      frontOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.DECREMENT_WRAP,\n        zPass: StencilOperation.KEEP,\n      },\n      backFunction: stencilFunction,\n      backOperation: {\n        fail: StencilOperation.KEEP,\n        zFail: StencilOperation.INCREMENT_WRAP,\n        zPass: StencilOperation.KEEP,\n      },\n      reference: StencilConstants.CESIUM_3D_TILE_MASK,\n      mask: StencilConstants.CESIUM_3D_TILE_MASK,\n    },\n    stencilMask: StencilConstants.CLASSIFICATION_MASK,\n    depthTest: {\n      enabled: true,\n      func: DepthFunction.LESS_OR_EQUAL,\n    },\n    depthMask: false,\n  };\n}\n\nconst colorRenderState = {\n  stencilTest: {\n    enabled: true,\n    frontFunction: StencilFunction.NOT_EQUAL,\n    frontOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    backFunction: StencilFunction.NOT_EQUAL,\n    backOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    reference: 0,\n    mask: StencilConstants.CLASSIFICATION_MASK,\n  },\n  stencilMask: StencilConstants.CLASSIFICATION_MASK,\n  depthTest: {\n    enabled: false,\n  },\n  depthMask: false,\n  blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n};\n\nconst pickRenderState = {\n  stencilTest: {\n    enabled: true,\n    frontFunction: StencilFunction.NOT_EQUAL,\n    frontOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    backFunction: StencilFunction.NOT_EQUAL,\n    backOperation: {\n      fail: StencilOperation.ZERO,\n      zFail: StencilOperation.ZERO,\n      zPass: StencilOperation.ZERO,\n    },\n    reference: 0,\n    mask: StencilConstants.CLASSIFICATION_MASK,\n  },\n  stencilMask: StencilConstants.CLASSIFICATION_MASK,\n  depthTest: {\n    enabled: false,\n  },\n  depthMask: false,\n};\n\nfunction createRenderStates(primitive) {\n  if (defined(primitive._rsStencilDepthPass)) {\n    return;\n  }\n\n  primitive._rsStencilDepthPass = RenderState.fromCache(\n    getStencilDepthRenderState(false),\n  );\n  primitive._rsStencilDepthPass3DTiles = RenderState.fromCache(\n    getStencilDepthRenderState(true),\n  );\n  primitive._rsColorPass = RenderState.fromCache(colorRenderState);\n  primitive._rsPickPass = RenderState.fromCache(pickRenderState);\n}\n\nconst modifiedModelViewScratch = new Matrix4();\nconst rtcScratch = new Cartesian3();\n\nfunction createUniformMap(primitive, context) {\n  if (defined(primitive._uniformMap)) {\n    return;\n  }\n\n  const uniformMap = {\n    u_modifiedModelViewProjection: function () {\n      const viewMatrix = context.uniformState.view;\n      const projectionMatrix = context.uniformState.projection;\n      Matrix4.clone(viewMatrix, modifiedModelViewScratch);\n      Matrix4.multiplyByPoint(\n        modifiedModelViewScratch,\n        primitive._center,\n        rtcScratch,\n      );\n      Matrix4.setTranslation(\n        modifiedModelViewScratch,\n        rtcScratch,\n        modifiedModelViewScratch,\n      );\n      Matrix4.multiply(\n        projectionMatrix,\n        modifiedModelViewScratch,\n        modifiedModelViewScratch,\n      );\n      return modifiedModelViewScratch;\n    },\n    u_highlightColor: function () {\n      return primitive._highlightColor;\n    },\n  };\n\n  primitive._uniformMap =\n    primitive._batchTable.getUniformMapCallback()(uniformMap);\n}\n\nfunction copyIndicesCPU(\n  indices,\n  newIndices,\n  currentOffset,\n  offsets,\n  counts,\n  batchIds,\n  batchIdLookUp,\n) {\n  const sizeInBytes = indices.constructor.BYTES_PER_ELEMENT;\n\n  const batchedIdsLength = batchIds.length;\n  for (let j = 0; j < batchedIdsLength; ++j) {\n    const batchedId = batchIds[j];\n    const index = batchIdLookUp[batchedId];\n    const offset = offsets[index];\n    const count = counts[index];\n\n    const subarray = new indices.constructor(\n      indices.buffer,\n      sizeInBytes * offset,\n      count,\n    );\n    newIndices.set(subarray, currentOffset);\n\n    offsets[index] = currentOffset;\n    currentOffset += count;\n  }\n\n  return currentOffset;\n}\n\nfunction rebatchCPU(primitive, batchedIndices) {\n  const indices = primitive._indices;\n  const indexOffsets = primitive._indexOffsets;\n  const indexCounts = primitive._indexCounts;\n  const batchIdLookUp = primitive._batchIdLookUp;\n\n  const newIndices = new indices.constructor(indices.length);\n\n  let current = batchedIndices.pop();\n  const newBatchedIndices = [current];\n\n  let currentOffset = copyIndicesCPU(\n    indices,\n    newIndices,\n    0,\n    indexOffsets,\n    indexCounts,\n    current.batchIds,\n    batchIdLookUp,\n  );\n\n  current.offset = 0;\n  current.count = currentOffset;\n\n  while (batchedIndices.length > 0) {\n    const next = batchedIndices.pop();\n    if (Color.equals(next.color, current.color)) {\n      currentOffset = copyIndicesCPU(\n        indices,\n        newIndices,\n        currentOffset,\n        indexOffsets,\n        indexCounts,\n        next.batchIds,\n        batchIdLookUp,\n      );\n      current.batchIds = current.batchIds.concat(next.batchIds);\n      current.count = currentOffset - current.offset;\n    } else {\n      const offset = currentOffset;\n      currentOffset = copyIndicesCPU(\n        indices,\n        newIndices,\n        currentOffset,\n        indexOffsets,\n        indexCounts,\n        next.batchIds,\n        batchIdLookUp,\n      );\n\n      next.offset = offset;\n      next.count = currentOffset - offset;\n      newBatchedIndices.push(next);\n      current = next;\n    }\n  }\n\n  primitive._va.indexBuffer.copyFromArrayView(newIndices);\n\n  primitive._indices = newIndices;\n  primitive._batchedIndices = newBatchedIndices;\n}\n\nfunction copyIndicesGPU(\n  readBuffer,\n  writeBuffer,\n  currentOffset,\n  offsets,\n  counts,\n  batchIds,\n  batchIdLookUp,\n) {\n  const sizeInBytes = readBuffer.bytesPerIndex;\n\n  const batchedIdsLength = batchIds.length;\n  for (let j = 0; j < batchedIdsLength; ++j) {\n    const batchedId = batchIds[j];\n    const index = batchIdLookUp[batchedId];\n    const offset = offsets[index];\n    const count = counts[index];\n\n    writeBuffer.copyFromBuffer(\n      readBuffer,\n      offset * sizeInBytes,\n      currentOffset * sizeInBytes,\n      count * sizeInBytes,\n    );\n\n    offsets[index] = currentOffset;\n    currentOffset += count;\n  }\n\n  return currentOffset;\n}\n\nfunction rebatchGPU(primitive, batchedIndices) {\n  const indexOffsets = primitive._indexOffsets;\n  const indexCounts = primitive._indexCounts;\n  const batchIdLookUp = primitive._batchIdLookUp;\n\n  let current = batchedIndices.pop();\n  const newBatchedIndices = [current];\n\n  const readBuffer = primitive._va.indexBuffer;\n  const writeBuffer = primitive._vaSwap.indexBuffer;\n\n  let currentOffset = copyIndicesGPU(\n    readBuffer,\n    writeBuffer,\n    0,\n    indexOffsets,\n    indexCounts,\n    current.batchIds,\n    batchIdLookUp,\n  );\n\n  current.offset = 0;\n  current.count = currentOffset;\n\n  while (batchedIndices.length > 0) {\n    const next = batchedIndices.pop();\n    if (Color.equals(next.color, current.color)) {\n      currentOffset = copyIndicesGPU(\n        readBuffer,\n        writeBuffer,\n        currentOffset,\n        indexOffsets,\n        indexCounts,\n        next.batchIds,\n        batchIdLookUp,\n      );\n      current.batchIds = current.batchIds.concat(next.batchIds);\n      current.count = currentOffset - current.offset;\n    } else {\n      const offset = currentOffset;\n      currentOffset = copyIndicesGPU(\n        readBuffer,\n        writeBuffer,\n        currentOffset,\n        indexOffsets,\n        indexCounts,\n        next.batchIds,\n        batchIdLookUp,\n      );\n      next.offset = offset;\n      next.count = currentOffset - offset;\n      newBatchedIndices.push(next);\n      current = next;\n    }\n  }\n\n  const temp = primitive._va;\n  primitive._va = primitive._vaSwap;\n  primitive._vaSwap = temp;\n\n  primitive._batchedIndices = newBatchedIndices;\n}\n\nfunction compareColors(a, b) {\n  return b.color.toRgba() - a.color.toRgba();\n}\n\n// PERFORMANCE_IDEA: For WebGL 2, we can use copyBufferSubData for buffer-to-buffer copies.\n// PERFORMANCE_IDEA: Not supported, but we could use glMultiDrawElements here.\nfunction rebatchCommands(primitive, context) {\n  if (!primitive._batchDirty) {\n    return false;\n  }\n\n  const batchedIndices = primitive._batchedIndices;\n  const length = batchedIndices.length;\n\n  let needToRebatch = false;\n  const colorCounts = {};\n\n  for (let i = 0; i < length; ++i) {\n    const color = batchedIndices[i].color;\n    const rgba = color.toRgba();\n    if (defined(colorCounts[rgba])) {\n      needToRebatch = true;\n      break;\n    } else {\n      colorCounts[rgba] = true;\n    }\n  }\n\n  if (!needToRebatch) {\n    primitive._batchDirty = false;\n    return false;\n  }\n\n  if (\n    needToRebatch &&\n    !primitive.forceRebatch &&\n    primitive._framesSinceLastRebatch < 120\n  ) {\n    ++primitive._framesSinceLastRebatch;\n    return;\n  }\n\n  batchedIndices.sort(compareColors);\n\n  if (context.webgl2) {\n    rebatchGPU(primitive, batchedIndices);\n  } else {\n    rebatchCPU(primitive, batchedIndices);\n  }\n\n  primitive._framesSinceLastRebatch = 0;\n  primitive._batchDirty = false;\n  primitive._pickCommandsDirty = true;\n  primitive._wireframeDirty = true;\n  return true;\n}\n\nfunction createColorCommands(primitive, context) {\n  const needsRebatch = rebatchCommands(primitive, context);\n\n  const commands = primitive._commands;\n  const batchedIndices = primitive._batchedIndices;\n  const length = batchedIndices.length;\n  const commandsLength = length * 2;\n\n  if (\n    defined(commands) &&\n    !needsRebatch &&\n    commands.length === commandsLength\n  ) {\n    return;\n  }\n\n  commands.length = commandsLength;\n\n  const vertexArray = primitive._va;\n  const sp = primitive._sp;\n  const modelMatrix = primitive._modelMatrix ?? Matrix4.IDENTITY;\n  const uniformMap = primitive._uniformMap;\n  const bv = primitive._boundingVolume;\n\n  for (let j = 0; j < length; ++j) {\n    const offset = batchedIndices[j].offset;\n    const count = batchedIndices[j].count;\n\n    let stencilDepthCommand = commands[j * 2];\n    if (!defined(stencilDepthCommand)) {\n      stencilDepthCommand = commands[j * 2] = new DrawCommand({\n        owner: primitive,\n      });\n    }\n\n    stencilDepthCommand.vertexArray = vertexArray;\n    stencilDepthCommand.modelMatrix = modelMatrix;\n    stencilDepthCommand.offset = offset;\n    stencilDepthCommand.count = count;\n    stencilDepthCommand.renderState = primitive._rsStencilDepthPass;\n    stencilDepthCommand.shaderProgram = sp;\n    stencilDepthCommand.uniformMap = uniformMap;\n    stencilDepthCommand.boundingVolume = bv;\n    stencilDepthCommand.cull = false;\n    stencilDepthCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n    const stencilDepthDerivedCommand = DrawCommand.shallowClone(\n      stencilDepthCommand,\n      stencilDepthCommand.derivedCommands.tileset,\n    );\n    stencilDepthDerivedCommand.renderState =\n      primitive._rsStencilDepthPass3DTiles;\n    stencilDepthDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    stencilDepthCommand.derivedCommands.tileset = stencilDepthDerivedCommand;\n\n    let colorCommand = commands[j * 2 + 1];\n    if (!defined(colorCommand)) {\n      colorCommand = commands[j * 2 + 1] = new DrawCommand({\n        owner: primitive,\n      });\n    }\n\n    colorCommand.vertexArray = vertexArray;\n    colorCommand.modelMatrix = modelMatrix;\n    colorCommand.offset = offset;\n    colorCommand.count = count;\n    colorCommand.renderState = primitive._rsColorPass;\n    colorCommand.shaderProgram = sp;\n    colorCommand.uniformMap = uniformMap;\n    colorCommand.boundingVolume = bv;\n    colorCommand.cull = false;\n    colorCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n    const colorDerivedCommand = DrawCommand.shallowClone(\n      colorCommand,\n      colorCommand.derivedCommands.tileset,\n    );\n    colorDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    colorCommand.derivedCommands.tileset = colorDerivedCommand;\n  }\n\n  primitive._commandsDirty = true;\n}\n\nfunction createColorCommandsIgnoreShow(primitive, frameState) {\n  if (\n    primitive.classificationType === ClassificationType.TERRAIN ||\n    !frameState.invertClassification ||\n    (defined(primitive._commandsIgnoreShow) && !primitive._commandsDirty)\n  ) {\n    return;\n  }\n\n  const commands = primitive._commands;\n  const commandsIgnoreShow = primitive._commandsIgnoreShow;\n  const spStencil = primitive._spStencil;\n\n  const commandsLength = commands.length;\n  const length = (commandsIgnoreShow.length = commandsLength / 2);\n\n  let commandIndex = 0;\n  for (let j = 0; j < length; ++j) {\n    const commandIgnoreShow = (commandsIgnoreShow[j] = DrawCommand.shallowClone(\n      commands[commandIndex],\n      commandsIgnoreShow[j],\n    ));\n    commandIgnoreShow.shaderProgram = spStencil;\n    commandIgnoreShow.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW;\n\n    commandIndex += 2;\n  }\n\n  primitive._commandsDirty = false;\n}\n\nfunction createPickCommands(primitive) {\n  if (!primitive._pickCommandsDirty) {\n    return;\n  }\n\n  const length = primitive._indexOffsets.length;\n  const pickCommands = primitive._pickCommands;\n  pickCommands.length = length * 2;\n\n  const vertexArray = primitive._va;\n  const spStencil = primitive._spStencil;\n  const spPick = primitive._spPick;\n  const modelMatrix = primitive._modelMatrix ?? Matrix4.IDENTITY;\n  const uniformMap = primitive._uniformMap;\n\n  for (let j = 0; j < length; ++j) {\n    const offset = primitive._indexOffsets[j];\n    const count = primitive._indexCounts[j];\n    const bv = defined(primitive._boundingVolumes)\n      ? primitive._boundingVolumes[j]\n      : primitive.boundingVolume;\n\n    let stencilDepthCommand = pickCommands[j * 2];\n    if (!defined(stencilDepthCommand)) {\n      stencilDepthCommand = pickCommands[j * 2] = new DrawCommand({\n        owner: primitive,\n        pickOnly: true,\n      });\n    }\n\n    stencilDepthCommand.vertexArray = vertexArray;\n    stencilDepthCommand.modelMatrix = modelMatrix;\n    stencilDepthCommand.offset = offset;\n    stencilDepthCommand.count = count;\n    stencilDepthCommand.renderState = primitive._rsStencilDepthPass;\n    stencilDepthCommand.shaderProgram = spStencil;\n    stencilDepthCommand.uniformMap = uniformMap;\n    stencilDepthCommand.boundingVolume = bv;\n    stencilDepthCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n    const stencilDepthDerivedCommand = DrawCommand.shallowClone(\n      stencilDepthCommand,\n      stencilDepthCommand.derivedCommands.tileset,\n    );\n    stencilDepthDerivedCommand.renderState =\n      primitive._rsStencilDepthPass3DTiles;\n    stencilDepthDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    stencilDepthCommand.derivedCommands.tileset = stencilDepthDerivedCommand;\n\n    let colorCommand = pickCommands[j * 2 + 1];\n    if (!defined(colorCommand)) {\n      colorCommand = pickCommands[j * 2 + 1] = new DrawCommand({\n        owner: primitive,\n        pickOnly: true,\n      });\n    }\n\n    colorCommand.vertexArray = vertexArray;\n    colorCommand.modelMatrix = modelMatrix;\n    colorCommand.offset = offset;\n    colorCommand.count = count;\n    colorCommand.renderState = primitive._rsPickPass;\n    colorCommand.shaderProgram = spPick;\n    colorCommand.uniformMap = uniformMap;\n    colorCommand.boundingVolume = bv;\n    colorCommand.pass = Pass.TERRAIN_CLASSIFICATION;\n\n    const colorDerivedCommand = DrawCommand.shallowClone(\n      colorCommand,\n      colorCommand.derivedCommands.tileset,\n    );\n    colorDerivedCommand.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n    colorCommand.derivedCommands.tileset = colorDerivedCommand;\n  }\n\n  primitive._pickCommandsDirty = false;\n}\n\n/**\n * Creates features for each mesh and places it at the batch id index of features.\n *\n * @param {Vector3DTileContent} content The vector tile content.\n * @param {Cesium3DTileFeature[]} features An array of features where the polygon features will be placed.\n */\nVector3DTilePrimitive.prototype.createFeatures = function (content, features) {\n  const batchIds = this._batchIds;\n  const length = batchIds.length;\n  for (let i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    features[batchId] = new Cesium3DTileFeature(content, batchId);\n  }\n};\n\n/**\n * Colors the entire tile when enabled is true. The resulting color will be (mesh batch table color * color).\n *\n * @param {boolean} enabled Whether to enable debug coloring.\n * @param {Color} color The debug color.\n */\nVector3DTilePrimitive.prototype.applyDebugSettings = function (enabled, color) {\n  this._highlightColor = enabled ? color : this._constantColor;\n};\n\nfunction clearStyle(polygons, features) {\n  polygons._updatingAllCommands = true;\n\n  const batchIds = polygons._batchIds;\n  let length = batchIds.length;\n  let i;\n\n  for (i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    feature.show = true;\n    feature.color = Color.WHITE;\n  }\n\n  const batchedIndices = polygons._batchedIndices;\n  length = batchedIndices.length;\n\n  for (i = 0; i < length; ++i) {\n    batchedIndices[i].color = Color.clone(Color.WHITE);\n  }\n\n  polygons._updatingAllCommands = false;\n  polygons._batchDirty = true;\n}\n\nconst scratchColor = new Color();\n\nconst DEFAULT_COLOR_VALUE = Color.WHITE;\nconst DEFAULT_SHOW_VALUE = true;\n\nconst complexExpressionReg = /\\$/;\n\n/**\n * Apply a style to the content.\n *\n * @param {Cesium3DTileStyle} style The style.\n * @param {Cesium3DTileFeature[]} features The array of features.\n */\nVector3DTilePrimitive.prototype.applyStyle = function (style, features) {\n  if (!defined(style)) {\n    clearStyle(this, features);\n    return;\n  }\n\n  const colorExpression = style.color;\n  const isSimpleStyle =\n    colorExpression instanceof Expression &&\n    !complexExpressionReg.test(colorExpression.expression);\n  this._updatingAllCommands = isSimpleStyle;\n\n  const batchIds = this._batchIds;\n  let length = batchIds.length;\n  let i;\n\n  for (i = 0; i < length; ++i) {\n    const batchId = batchIds[i];\n    const feature = features[batchId];\n\n    feature.color = defined(style.color)\n      ? style.color.evaluateColor(feature, scratchColor)\n      : DEFAULT_COLOR_VALUE;\n    feature.show = defined(style.show)\n      ? style.show.evaluate(feature)\n      : DEFAULT_SHOW_VALUE;\n  }\n\n  if (isSimpleStyle) {\n    const batchedIndices = this._batchedIndices;\n    length = batchedIndices.length;\n\n    for (i = 0; i < length; ++i) {\n      batchedIndices[i].color = Color.clone(Color.WHITE);\n    }\n\n    this._updatingAllCommands = false;\n    this._batchDirty = true;\n  }\n};\n\n/**\n * Call when updating the color of a mesh with batchId changes color. The meshes will need to be re-batched\n * on the next update.\n *\n * @param {number} batchId The batch id of the meshes whose color has changed.\n * @param {Color} color The new polygon color.\n */\nVector3DTilePrimitive.prototype.updateCommands = function (batchId, color) {\n  if (this._updatingAllCommands) {\n    return;\n  }\n\n  const batchIdLookUp = this._batchIdLookUp;\n  const index = batchIdLookUp[batchId];\n  if (!defined(index)) {\n    return;\n  }\n\n  const indexOffsets = this._indexOffsets;\n  const indexCounts = this._indexCounts;\n\n  const offset = indexOffsets[index];\n  const count = indexCounts[index];\n\n  const batchedIndices = this._batchedIndices;\n  const length = batchedIndices.length;\n\n  let i;\n  for (i = 0; i < length; ++i) {\n    const batchedOffset = batchedIndices[i].offset;\n    const batchedCount = batchedIndices[i].count;\n\n    if (offset >= batchedOffset && offset < batchedOffset + batchedCount) {\n      break;\n    }\n  }\n\n  batchedIndices.push(\n    new Vector3DTileBatch({\n      color: Color.clone(color),\n      offset: offset,\n      count: count,\n      batchIds: [batchId],\n    }),\n  );\n\n  const startIds = [];\n  const endIds = [];\n\n  const batchIds = batchedIndices[i].batchIds;\n  const batchIdsLength = batchIds.length;\n\n  for (let j = 0; j < batchIdsLength; ++j) {\n    const id = batchIds[j];\n    if (id === batchId) {\n      continue;\n    }\n\n    const offsetIndex = batchIdLookUp[id];\n    if (indexOffsets[offsetIndex] < offset) {\n      startIds.push(id);\n    } else {\n      endIds.push(id);\n    }\n  }\n\n  if (endIds.length !== 0) {\n    batchedIndices.push(\n      new Vector3DTileBatch({\n        color: Color.clone(batchedIndices[i].color),\n        offset: offset + count,\n        count:\n          batchedIndices[i].offset + batchedIndices[i].count - (offset + count),\n        batchIds: endIds,\n      }),\n    );\n  }\n\n  if (startIds.length !== 0) {\n    batchedIndices[i].count = offset - batchedIndices[i].offset;\n    batchedIndices[i].batchIds = startIds;\n  } else {\n    batchedIndices.splice(i, 1);\n  }\n\n  this._batchDirty = true;\n};\n\nfunction queueCommands(primitive, frameState, commands, commandsIgnoreShow) {\n  const classificationType = primitive.classificationType;\n  const queueTerrainCommands =\n    classificationType !== ClassificationType.CESIUM_3D_TILE;\n  const queue3DTilesCommands =\n    classificationType !== ClassificationType.TERRAIN;\n\n  const commandList = frameState.commandList;\n  let commandLength = commands.length;\n  let command;\n  let i;\n  for (i = 0; i < commandLength; ++i) {\n    if (queueTerrainCommands) {\n      command = commands[i];\n      command.pass = Pass.TERRAIN_CLASSIFICATION;\n      commandList.push(command);\n    }\n    if (queue3DTilesCommands) {\n      command = commands[i].derivedCommands.tileset;\n      command.pass = Pass.CESIUM_3D_TILE_CLASSIFICATION;\n      commandList.push(command);\n    }\n  }\n\n  if (!frameState.invertClassification || !defined(commandsIgnoreShow)) {\n    return;\n  }\n\n  commandLength = commandsIgnoreShow.length;\n  for (i = 0; i < commandLength; ++i) {\n    commandList.push(commandsIgnoreShow[i]);\n  }\n}\n\nfunction queueWireframeCommands(frameState, commands) {\n  const commandList = frameState.commandList;\n  const commandLength = commands.length;\n  for (let i = 0; i < commandLength; i += 2) {\n    const command = commands[i + 1];\n    command.pass = Pass.OPAQUE;\n    commandList.push(command);\n  }\n}\n\nfunction updateWireframe(primitive) {\n  let earlyExit = primitive.debugWireframe === primitive._debugWireframe;\n  earlyExit =\n    earlyExit && !(primitive.debugWireframe && primitive._wireframeDirty);\n  if (earlyExit) {\n    return;\n  }\n\n  if (!defined(primitive._rsWireframe)) {\n    primitive._rsWireframe = RenderState.fromCache({});\n  }\n\n  let rs;\n  let type;\n\n  if (primitive.debugWireframe) {\n    rs = primitive._rsWireframe;\n    type = PrimitiveType.LINES;\n  } else {\n    rs = primitive._rsColorPass;\n    type = PrimitiveType.TRIANGLES;\n  }\n\n  const commands = primitive._commands;\n  const commandLength = commands.length;\n  for (let i = 0; i < commandLength; i += 2) {\n    const command = commands[i + 1];\n    command.renderState = rs;\n    command.primitiveType = type;\n  }\n\n  primitive._debugWireframe = primitive.debugWireframe;\n  primitive._wireframeDirty = false;\n}\n\n/**\n * Updates the batches and queues the commands for rendering.\n *\n * @param {FrameState} frameState The current frame state.\n */\nVector3DTilePrimitive.prototype.update = function (frameState) {\n  const context = frameState.context;\n\n  createVertexArray(this, context);\n  createShaders(this, context);\n  createRenderStates(this);\n  createUniformMap(this, context);\n\n  const passes = frameState.passes;\n  if (passes.render) {\n    createColorCommands(this, context);\n    createColorCommandsIgnoreShow(this, frameState);\n    updateWireframe(this);\n\n    if (this._debugWireframe) {\n      queueWireframeCommands(frameState, this._commands);\n    } else {\n      queueCommands(this, frameState, this._commands, this._commandsIgnoreShow);\n    }\n  }\n\n  if (passes.pick) {\n    createPickCommands(this);\n    queueCommands(this, frameState, this._pickCommands);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <p>\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n * </p>\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n */\nVector3DTilePrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <p>\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n * </p>\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n */\nVector3DTilePrimitive.prototype.destroy = function () {\n  this._va = this._va && this._va.destroy();\n  this._sp = this._sp && this._sp.destroy();\n  this._spPick = this._spPick && this._spPick.destroy();\n  this._vaSwap = this._vaSwap && this._vaSwap.destroy();\n  return destroyObject(this);\n};\nexport default Vector3DTilePrimitive;\n","import Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * An enum describing the built-in vertex attribute semantics.\n *\n * @enum {string}\n *\n * @private\n */\nconst VertexAttributeSemantic = {\n  /**\n   * Per-vertex position.\n   *\n   * @type {string}\n   * @constant\n   */\n  POSITION: \"POSITION\",\n\n  /**\n   * Per-vertex normal.\n   *\n   * @type {string}\n   * @constant\n   */\n  NORMAL: \"NORMAL\",\n\n  /**\n   * Per-vertex tangent.\n   *\n   * @type {string}\n   * @constant\n   */\n  TANGENT: \"TANGENT\",\n\n  /**\n   * Per-vertex texture coordinates.\n   *\n   * @type {string}\n   * @constant\n   */\n  TEXCOORD: \"TEXCOORD\",\n\n  /**\n   * Per-vertex color.\n   *\n   * @type {string}\n   * @constant\n   */\n  COLOR: \"COLOR\",\n\n  /**\n   * Per-vertex joint IDs for skinning.\n   *\n   * @type {string}\n   * @constant\n   */\n  JOINTS: \"JOINTS\",\n\n  /**\n   * Per-vertex joint weights for skinning.\n   *\n   * @type {string}\n   * @constant\n   */\n  WEIGHTS: \"WEIGHTS\",\n\n  /**\n   * Per-vertex feature ID.\n   *\n   * @type {string}\n   * @constant\n   */\n  FEATURE_ID: \"_FEATURE_ID\",\n  /**\n   * Gaussian Splat Scale\n   *\n   * @type {string}\n   * @constant\n   */\n  SCALE: \"KHR_gaussian_splatting:SCALE\",\n  /**\n   * Gaussian Splat Rotation\n   *\n   * @type {string}\n   * @constant\n   */\n  ROTATION: \"KHR_gaussian_splatting:ROTATION\",\n};\n\nfunction semanticToVariableName(semantic) {\n  switch (semantic) {\n    case VertexAttributeSemantic.POSITION:\n      return \"positionMC\";\n    case VertexAttributeSemantic.NORMAL:\n      return \"normalMC\";\n    case VertexAttributeSemantic.TANGENT:\n      return \"tangentMC\";\n    case VertexAttributeSemantic.TEXCOORD:\n      return \"texCoord\";\n    case VertexAttributeSemantic.COLOR:\n      return \"color\";\n    case VertexAttributeSemantic.JOINTS:\n      return \"joints\";\n    case VertexAttributeSemantic.WEIGHTS:\n      return \"weights\";\n    case VertexAttributeSemantic.FEATURE_ID:\n      return \"featureId\";\n    case VertexAttributeSemantic.SCALE:\n      return \"scale\";\n    case VertexAttributeSemantic.ROTATION:\n      return \"rotation\";\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"semantic is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n}\n\n/**\n * Returns whether the vertex attribute semantic can have a set index.\n *\n * @param {VertexAttributeSemantic} semantic The semantic.\n *\n * @returns {boolean} Whether the semantic can have a set index.\n *\n * @private\n */\nVertexAttributeSemantic.hasSetIndex = function (semantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  switch (semantic) {\n    case VertexAttributeSemantic.POSITION:\n    case VertexAttributeSemantic.NORMAL:\n    case VertexAttributeSemantic.TANGENT:\n      return false;\n    case VertexAttributeSemantic.TEXCOORD:\n    case VertexAttributeSemantic.COLOR:\n    case VertexAttributeSemantic.JOINTS:\n    case VertexAttributeSemantic.WEIGHTS:\n    case VertexAttributeSemantic.FEATURE_ID:\n    case VertexAttributeSemantic.SCALE:\n    case VertexAttributeSemantic.ROTATION:\n      return true;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"semantic is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Gets the vertex attribute semantic matching the glTF semantic.\n *\n * @param {string} gltfSemantic The glTF semantic.\n *\n * @returns {VertexAttributeSemantic|undefined} The vertex attribute semantic, or undefined if there is no match.\n *\n * @private\n */\nVertexAttributeSemantic.fromGltfSemantic = function (gltfSemantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"gltfSemantic\", gltfSemantic);\n  //>>includeEnd('debug');\n\n  let semantic = gltfSemantic;\n\n  // Strip the set index from the semantic\n  const setIndexRegex = /^(\\w+)_\\d+$/;\n  const setIndexMatch = setIndexRegex.exec(gltfSemantic);\n  if (setIndexMatch !== null) {\n    semantic = setIndexMatch[1];\n  }\n\n  switch (semantic) {\n    case \"POSITION\":\n      return VertexAttributeSemantic.POSITION;\n    case \"NORMAL\":\n      return VertexAttributeSemantic.NORMAL;\n    case \"TANGENT\":\n      return VertexAttributeSemantic.TANGENT;\n    case \"TEXCOORD\":\n      return VertexAttributeSemantic.TEXCOORD;\n    case \"COLOR\":\n      return VertexAttributeSemantic.COLOR;\n    case \"JOINTS\":\n      return VertexAttributeSemantic.JOINTS;\n    case \"WEIGHTS\":\n      return VertexAttributeSemantic.WEIGHTS;\n    case \"_FEATURE_ID\":\n      return VertexAttributeSemantic.FEATURE_ID;\n    case \"KHR_gaussian_splatting:SCALE\":\n    case \"_SCALE\":\n      return VertexAttributeSemantic.SCALE;\n    case \"KHR_gaussian_splatting:ROTATION\":\n    case \"_ROTATION\":\n      return VertexAttributeSemantic.ROTATION;\n  }\n\n  return undefined;\n};\n\n/**\n * Gets the vertex attribute semantic matching the pnts semantic.\n *\n * @param {string} pntsSemantic The pnts semantic.\n *\n * @returns {VertexAttributeSemantic|undefined} The vertex attribute semantic, or undefined if there is no match.\n *\n * @private\n */\nVertexAttributeSemantic.fromPntsSemantic = function (pntsSemantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"pntsSemantic\", pntsSemantic);\n  //>>includeEnd('debug');\n\n  switch (pntsSemantic) {\n    case \"POSITION\":\n    case \"POSITION_QUANTIZED\":\n      return VertexAttributeSemantic.POSITION;\n    case \"RGBA\":\n    case \"RGB\":\n    case \"RGB565\":\n      return VertexAttributeSemantic.COLOR;\n    case \"NORMAL\":\n    case \"NORMAL_OCT16P\":\n      return VertexAttributeSemantic.NORMAL;\n    case \"BATCH_ID\":\n      return VertexAttributeSemantic.FEATURE_ID;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"pntsSemantic is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Gets the GLSL type (such as <code>vec3</code> or <code>int</code>) for the\n * given vertex attribute.\n *\n * @param {VertexAttributeSemantic} semantic The semantic.\n *\n * @returns {string} The shader type.\n *\n * @private\n */\nVertexAttributeSemantic.getGlslType = function (semantic) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  switch (semantic) {\n    case VertexAttributeSemantic.POSITION:\n    case VertexAttributeSemantic.NORMAL:\n    case VertexAttributeSemantic.TANGENT:\n      return \"vec3\";\n    case VertexAttributeSemantic.TEXCOORD:\n      return \"vec2\";\n    case VertexAttributeSemantic.COLOR:\n      return \"vec4\";\n    case VertexAttributeSemantic.JOINTS:\n      return \"ivec4\";\n    case VertexAttributeSemantic.WEIGHTS:\n      return \"vec4\";\n    case VertexAttributeSemantic.FEATURE_ID:\n      return \"int\";\n    case VertexAttributeSemantic.SCALE:\n      return \"vec3\";\n    case VertexAttributeSemantic.ROTATION:\n      return \"vec4\";\n    case VertexAttributeSemantic.OPACITY:\n      return \"float\";\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(\"semantic is not a valid value.\");\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Gets the variable name for the given semantic and set index.\n *\n * @param {VertexAttributeSemantic} semantic The semantic.\n * @param {number} [setIndex] The set index.\n *\n * @returns {string} The variable name.\n *\n * @private\n */\nVertexAttributeSemantic.getVariableName = function (semantic, setIndex) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"semantic\", semantic);\n  //>>includeEnd('debug');\n\n  let variableName = semanticToVariableName(semantic);\n  if (defined(setIndex)) {\n    variableName += `_${setIndex}`;\n  }\n  return variableName;\n};\n\nexport default Object.freeze(VertexAttributeSemantic);\n","/**\n * The vertical location of an origin relative to an object, e.g., a {@link Billboard}\n * or {@link Label}.  For example, setting the vertical origin to <code>TOP</code>\n * or <code>BOTTOM</code> will display a billboard above or below (in screen space)\n * the anchor position.\n * <br /><br />\n * <div align='center'>\n * <img src='Images/Billboard.setVerticalOrigin.png' width='695' height='175' /><br />\n * </div>\n *\n * @enum {number}\n *\n * @see Billboard#verticalOrigin\n * @see Label#verticalOrigin\n */\nconst VerticalOrigin = {\n  /**\n   * The origin is at the vertical center between <code>BASELINE</code> and <code>TOP</code>.\n   *\n   * @type {number}\n   * @constant\n   */\n  CENTER: 0,\n\n  /**\n   * The origin is at the bottom of the object.\n   *\n   * @type {number}\n   * @constant\n   */\n  BOTTOM: 1,\n\n  /**\n   * If the object contains text, the origin is at the baseline of the text, else the origin is at the bottom of the object.\n   *\n   * @type {number}\n   * @constant\n   */\n  BASELINE: 2,\n\n  /**\n   * The origin is at the top of the object.\n   *\n   * @type {number}\n   * @constant\n   */\n  TOP: -1,\n};\nexport default Object.freeze(VerticalOrigin);\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport defined from \"../Core/defined.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport Interval from \"../Core/Interval.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport ClearCommand from \"../Renderer/ClearCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PassState from \"../Renderer/PassState.js\";\nimport Camera from \"./Camera.js\";\nimport EdgeFramebuffer from \"./EdgeFramebuffer.js\";\nimport FrustumCommands from \"./FrustumCommands.js\";\nimport GlobeDepth from \"./GlobeDepth.js\";\nimport GlobeTranslucencyFramebuffer from \"./GlobeTranslucencyFramebuffer.js\";\nimport OIT from \"./OIT.js\";\nimport PickDepthFramebuffer from \"./PickDepthFramebuffer.js\";\nimport PickFramebuffer from \"./PickFramebuffer.js\";\nimport SceneFramebuffer from \"./SceneFramebuffer.js\";\nimport SceneMode from \"./SceneMode.js\";\nimport ShadowMap from \"./ShadowMap.js\";\nimport TranslucentTileClassification from \"./TranslucentTileClassification.js\";\n\nfunction CommandExtent() {\n  this.command = undefined;\n  this.near = undefined;\n  this.far = undefined;\n}\n\n/**\n * @alias View\n * @constructor\n *\n * @param {Scene} scene\n * @param {Camera} camera\n * @param {BoundingRectangle} viewport\n *\n * @private\n */\nfunction View(scene, camera, viewport) {\n  const context = scene.context;\n\n  let globeDepth;\n  if (context.depthTexture) {\n    globeDepth = new GlobeDepth();\n  }\n\n  let oit;\n  if (scene._useOIT && context.depthTexture) {\n    oit = new OIT(context);\n  }\n\n  const passState = new PassState(context);\n  passState.viewport = BoundingRectangle.clone(viewport);\n\n  this.camera = camera;\n  this._cameraClone = Camera.clone(camera);\n  this._cameraStartFired = false;\n  this._cameraMovedTime = undefined;\n\n  this.viewport = viewport;\n  this.passState = passState;\n  this.pickFramebuffer = new PickFramebuffer(context);\n  this.pickDepthFramebuffer = new PickDepthFramebuffer();\n  this.sceneFramebuffer = new SceneFramebuffer();\n  this.edgeFramebuffer = new EdgeFramebuffer();\n  this.globeDepth = globeDepth;\n  this.globeTranslucencyFramebuffer = new GlobeTranslucencyFramebuffer();\n  this.oit = oit;\n  this.translucentTileClassification = new TranslucentTileClassification(\n    context,\n  );\n  /**\n   * @type {PickDepth[]}\n   */\n  this.pickDepths = [];\n  this.frustumCommandsList = [];\n  this.debugFrustumStatistics = undefined;\n\n  // Array of all commands that get rendered into frustums along with their near / far values.\n  // Acts similar to a ManagedArray.\n  this._commandExtents = [];\n}\n\nconst scratchPosition0 = new Cartesian3();\nconst scratchPosition1 = new Cartesian3();\n/**\n * Check if two cameras have the same view.\n *\n * @param {Camera} camera0 The first camera for comparison.\n * @param {Camera} camera1 The second camera for comparison.\n * @param {number} epsilon The epsilon tolerance to use for equality testing.\n * @returns {boolean} <code>true</code> if the cameras are equal.\n *\n * @private\n */\nfunction cameraEqual(camera0, camera1, epsilon) {\n  const maximumPositionComponent = Math.max(\n    Cartesian3.maximumComponent(\n      Cartesian3.abs(camera0.position, scratchPosition0),\n    ),\n    Cartesian3.maximumComponent(\n      Cartesian3.abs(camera1.position, scratchPosition1),\n    ),\n  );\n  const scalar = 1 / Math.max(1, maximumPositionComponent);\n  Cartesian3.multiplyByScalar(camera0.position, scalar, scratchPosition0);\n  Cartesian3.multiplyByScalar(camera1.position, scalar, scratchPosition1);\n  return (\n    Cartesian3.equalsEpsilon(scratchPosition0, scratchPosition1, epsilon) &&\n    Cartesian3.equalsEpsilon(camera0.direction, camera1.direction, epsilon) &&\n    Cartesian3.equalsEpsilon(camera0.up, camera1.up, epsilon) &&\n    Cartesian3.equalsEpsilon(camera0.right, camera1.right, epsilon) &&\n    Matrix4.equalsEpsilon(camera0.transform, camera1.transform, epsilon) &&\n    camera0.frustum.equalsEpsilon(camera1.frustum, epsilon)\n  );\n}\n\n/**\n * Check if the camera position or direction has changed.\n *\n * @param {Scene} scene\n * @returns {boolean} <code>true</code> if the camera has been updated\n *\n * @private\n */\nView.prototype.checkForCameraUpdates = function (scene) {\n  const camera = this.camera;\n  const cameraClone = this._cameraClone;\n  if (!cameraEqual(camera, cameraClone, CesiumMath.EPSILON15)) {\n    if (!this._cameraStartFired) {\n      camera.moveStart.raiseEvent();\n      this._cameraStartFired = true;\n    }\n    this._cameraMovedTime = getTimestamp();\n    Camera.clone(camera, cameraClone);\n\n    return true;\n  }\n\n  if (\n    this._cameraStartFired &&\n    getTimestamp() - this._cameraMovedTime > scene.cameraEventWaitTime\n  ) {\n    camera.moveEnd.raiseEvent();\n    this._cameraStartFired = false;\n  }\n\n  return false;\n};\n\n/**\n * Split the depth range of the scene into multiple frustums, and initialize\n * a list of {@link FrustumCommands} with the distances to the near and far\n * planes for each frustum.\n *\n * @param {View} view The view to which the frustum commands list is attached.\n * @param {Scene} scene The scene to be rendered.\n * @param {number} near The distance to the nearest object in the scene.\n * @param {number} far The distance to the farthest object in the scene.\n *\n * @private\n */\nfunction updateFrustums(view, scene, near, far) {\n  const { frameState } = scene;\n  const { camera, useLogDepth } = frameState;\n  const farToNearRatio = useLogDepth\n    ? scene.logarithmicDepthFarToNearRatio\n    : scene.farToNearRatio;\n  const is2D = scene.mode === SceneMode.SCENE2D;\n  const nearToFarDistance2D = scene.nearToFarDistance2D;\n\n  // Extend the far plane slightly further to prevent geometry clipping against the far plane.\n  far *= 1.0 + CesiumMath.EPSILON2;\n\n  // The computed near plane must be between the user defined near and far planes.\n  // The computed far plane must between the user defined far and computed near.\n  // This will handle the case where the computed near plane is further than the user defined far plane.\n  near = Math.min(Math.max(near, camera.frustum.near), camera.frustum.far);\n  far = Math.max(Math.min(far, camera.frustum.far), near);\n\n  let numFrustums;\n  if (is2D) {\n    // The multifrustum for 2D is uniformly distributed. To avoid z-fighting in 2D,\n    // the camera is moved to just before the frustum and the frustum depth is scaled\n    // to be in [1.0, nearToFarDistance2D].\n    far = Math.min(far, camera.position.z + scene.nearToFarDistance2D);\n    near = Math.min(near, far);\n    numFrustums = Math.ceil(\n      Math.max(1.0, far - near) / scene.nearToFarDistance2D,\n    );\n  } else {\n    // The multifrustum for 3D/CV is non-uniformly distributed.\n    numFrustums = Math.ceil(Math.log(far / near) / Math.log(farToNearRatio));\n  }\n\n  const { frustumCommandsList } = view;\n  frustumCommandsList.length = numFrustums;\n  for (let m = 0; m < numFrustums; ++m) {\n    let curNear;\n    let curFar;\n\n    if (is2D) {\n      curNear = Math.min(\n        far - nearToFarDistance2D,\n        near + m * nearToFarDistance2D,\n      );\n      curFar = Math.min(far, curNear + nearToFarDistance2D);\n    } else {\n      curNear = Math.max(near, Math.pow(farToNearRatio, m) * near);\n      curFar = Math.min(far, farToNearRatio * curNear);\n    }\n    let frustumCommands = frustumCommandsList[m];\n    if (!defined(frustumCommands)) {\n      frustumCommands = frustumCommandsList[m] = new FrustumCommands(\n        curNear,\n        curFar,\n      );\n    } else {\n      frustumCommands.near = curNear;\n      frustumCommands.far = curFar;\n    }\n  }\n}\n\n/**\n * Insert a command into the appropriate {@link FrustumCommands} based on the\n * range of depths covered by its bounding volume.\n *\n * @param {View} view\n * @param {Scene} scene\n * @param {CommandExtent} commandExtent\n *\n * @private\n */\nfunction insertIntoBin(view, scene, commandExtent) {\n  const { command, near, far } = commandExtent;\n\n  if (scene.debugShowFrustums) {\n    command.debugOverlappingFrustums = 0;\n  }\n\n  const { frustumCommandsList } = view;\n\n  for (let i = 0; i < frustumCommandsList.length; ++i) {\n    const frustumCommands = frustumCommandsList[i];\n\n    if (near > frustumCommands.far) {\n      continue;\n    }\n\n    if (far < frustumCommands.near) {\n      break;\n    }\n\n    const pass = command.pass;\n    const index = frustumCommands.indices[pass]++;\n    frustumCommands.commands[pass][index] = command;\n\n    if (scene.debugShowFrustums) {\n      command.debugOverlappingFrustums |= 1 << i;\n    }\n\n    if (command.executeInClosestFrustum) {\n      break;\n    }\n  }\n\n  if (scene.debugShowFrustums) {\n    const { debugFrustumStatistics } = view;\n    const { debugOverlappingFrustums } = command;\n    const cf = debugFrustumStatistics.commandsInFrustums;\n    cf[debugOverlappingFrustums] = defined(cf[debugOverlappingFrustums])\n      ? cf[debugOverlappingFrustums] + 1\n      : 1;\n    ++debugFrustumStatistics.totalCommands;\n  }\n\n  scene.updateDerivedCommands(command);\n}\n\nconst scratchCullingVolume = new CullingVolume();\nconst scratchNearFarInterval = new Interval();\n\nView.prototype.createPotentiallyVisibleSet = function (scene) {\n  const { frameState } = scene;\n  const { camera, commandList, shadowState } = frameState;\n  const { positionWC, directionWC, frustum } = camera;\n\n  const computeList = scene._computeCommandList;\n  const overlayList = scene._overlayCommandList;\n\n  if (scene.debugShowFrustums) {\n    this.debugFrustumStatistics = {\n      totalCommands: 0,\n      commandsInFrustums: {},\n    };\n  }\n\n  const frustumCommandsList = this.frustumCommandsList;\n  for (let n = 0; n < frustumCommandsList.length; ++n) {\n    for (let p = 0; p < Pass.NUMBER_OF_PASSES; ++p) {\n      frustumCommandsList[n].indices[p] = 0;\n    }\n  }\n\n  computeList.length = 0;\n  overlayList.length = 0;\n\n  const commandExtents = this._commandExtents;\n  const commandExtentCapacity = commandExtents.length;\n  let commandExtentCount = 0;\n\n  let near = +Number.MAX_VALUE;\n  let far = -Number.MAX_VALUE;\n\n  const { shadowsEnabled } = shadowState;\n  let shadowNear = +Number.MAX_VALUE;\n  let shadowFar = -Number.MAX_VALUE;\n  let shadowClosestObjectSize = Number.MAX_VALUE;\n\n  const occluder =\n    frameState.mode === SceneMode.SCENE3D ? frameState.occluder : undefined;\n\n  // get user culling volume minus the far plane.\n  let { cullingVolume } = frameState;\n  const planes = scratchCullingVolume.planes;\n  for (let k = 0; k < 5; ++k) {\n    planes[k] = cullingVolume.planes[k];\n  }\n  cullingVolume = scratchCullingVolume;\n\n  for (let i = 0; i < commandList.length; ++i) {\n    const command = commandList[i];\n    const { pass, boundingVolume } = command;\n\n    if (pass === Pass.COMPUTE) {\n      computeList.push(command);\n    } else if (pass === Pass.OVERLAY) {\n      overlayList.push(command);\n    } else {\n      let commandNear;\n      let commandFar;\n\n      if (defined(boundingVolume)) {\n        if (!scene.isVisible(cullingVolume, command, occluder)) {\n          continue;\n        }\n\n        const nearFarInterval = boundingVolume.computePlaneDistances(\n          positionWC,\n          directionWC,\n          scratchNearFarInterval,\n        );\n        commandNear = nearFarInterval.start;\n        commandFar = nearFarInterval.stop;\n        near = Math.min(near, commandNear);\n        far = Math.max(far, commandFar);\n\n        // Compute a tight near and far plane for commands that receive shadows. This helps compute\n        // good splits for cascaded shadow maps. Ignore commands that exceed the maximum distance.\n        // When moving the camera low LOD globe tiles begin to load, whose bounding volumes\n        // throw off the near/far fitting for the shadow map. Only update for globe tiles that the\n        // camera isn't inside.\n        if (\n          shadowsEnabled &&\n          command.receiveShadows &&\n          commandNear < ShadowMap.MAXIMUM_DISTANCE &&\n          !(pass === Pass.GLOBE && commandNear < -100.0 && commandFar > 100.0)\n        ) {\n          // Get the smallest bounding volume the camera is near. This is used to place more shadow detail near the object.\n          const size = commandFar - commandNear;\n          if (pass !== Pass.GLOBE && commandNear < 100.0) {\n            shadowClosestObjectSize = Math.min(shadowClosestObjectSize, size);\n          }\n          shadowNear = Math.min(shadowNear, commandNear);\n          shadowFar = Math.max(shadowFar, commandFar);\n        }\n      } else if (command instanceof ClearCommand) {\n        // Clear commands don't need a bounding volume - just add the clear to all frustums.\n        commandNear = frustum.near;\n        commandFar = frustum.far;\n      } else {\n        // If command has no bounding volume we need to use the camera's\n        // worst-case near and far planes to avoid clipping something important.\n        commandNear = frustum.near;\n        commandFar = frustum.far;\n        near = Math.min(near, commandNear);\n        far = Math.max(far, commandFar);\n      }\n\n      let extent = commandExtents[commandExtentCount];\n      if (!defined(extent)) {\n        extent = commandExtents[commandExtentCount] = new CommandExtent();\n      }\n      extent.command = command;\n      extent.near = commandNear;\n      extent.far = commandFar;\n      commandExtentCount++;\n    }\n  }\n\n  if (shadowsEnabled) {\n    shadowNear = Math.min(Math.max(shadowNear, frustum.near), frustum.far);\n    shadowFar = Math.max(Math.min(shadowFar, frustum.far), shadowNear);\n    // Use the computed near and far for shadows\n    shadowState.nearPlane = shadowNear;\n    shadowState.farPlane = shadowFar;\n    shadowState.closestObjectSize = shadowClosestObjectSize;\n  }\n\n  updateFrustums(this, scene, near, far);\n\n  for (let c = 0; c < commandExtentCount; c++) {\n    insertIntoBin(this, scene, commandExtents[c]);\n  }\n\n  // Dereference old commands\n  if (commandExtentCount < commandExtentCapacity) {\n    for (let c = commandExtentCount; c < commandExtentCapacity; c++) {\n      const commandExtent = commandExtents[c];\n      if (!defined(commandExtent.command)) {\n        // If the command is undefined, it's assumed that all\n        // subsequent commmands were set to undefined as well,\n        // so no need to loop over them all\n        break;\n      }\n      commandExtent.command = undefined;\n    }\n  }\n\n  const numFrustums = frustumCommandsList.length;\n  const { frustumSplits } = frameState;\n  frustumSplits.length = numFrustums + 1;\n  for (let j = 0; j < numFrustums; ++j) {\n    frustumSplits[j] = frustumCommandsList[j].near;\n    if (j === numFrustums - 1) {\n      frustumSplits[j + 1] = frustumCommandsList[j].far;\n    }\n  }\n};\n\nView.prototype.destroy = function () {\n  this.pickFramebuffer = this.pickFramebuffer && this.pickFramebuffer.destroy();\n  this.pickDepthFramebuffer =\n    this.pickDepthFramebuffer && this.pickDepthFramebuffer.destroy();\n  this.sceneFramebuffer =\n    this.sceneFramebuffer && this.sceneFramebuffer.destroy();\n  this.edgeFramebuffer = this.edgeFramebuffer && this.edgeFramebuffer.destroy();\n  this.globeDepth = this.globeDepth && this.globeDepth.destroy();\n  this.oit = this.oit && this.oit.destroy();\n  this.translucentTileClassification =\n    this.translucentTileClassification &&\n    this.translucentTileClassification.destroy();\n  this.globeTranslucencyFramebuffer =\n    this.globeTranslucencyFramebuffer &&\n    this.globeTranslucencyFramebuffer.destroy();\n\n  const pickDepths = this.pickDepths;\n  for (let i = 0; i < pickDepths.length; ++i) {\n    pickDepths[i].destroy();\n  }\n};\nexport default View;\n","import BoundingRectangle from \"../Core/BoundingRectangle.js\";\nimport Color from \"../Core/Color.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderSource from \"../Renderer/ShaderSource.js\";\nimport ViewportQuadFS from \"../Shaders/ViewportQuadFS.js\";\nimport BlendingState from \"./BlendingState.js\";\nimport Material from \"./Material.js\";\n\n/**\n * A viewport aligned quad.\n *\n * @alias ViewportQuad\n * @constructor\n *\n * @param {BoundingRectangle} [rectangle] The {@link BoundingRectangle} defining the quad's position within the viewport.\n * @param {Material} [material] The {@link Material} defining the surface appearance of the viewport quad.\n *\n * @example\n * const viewportQuad = new Cesium.ViewportQuad(new Cesium.BoundingRectangle(0, 0, 80, 40));\n * viewportQuad.material.uniforms.color = new Cesium.Color(1.0, 0.0, 0.0, 1.0);\n */\nfunction ViewportQuad(rectangle, material) {\n  /**\n   * Determines if the viewport quad primitive will be shown.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.show = true;\n\n  if (!defined(rectangle)) {\n    rectangle = new BoundingRectangle();\n  }\n\n  /**\n   * The BoundingRectangle defining the quad's position within the viewport.\n   *\n   * @type {BoundingRectangle}\n   *\n   * @example\n   * viewportQuad.rectangle = new Cesium.BoundingRectangle(0, 0, 80, 40);\n   */\n  this.rectangle = BoundingRectangle.clone(rectangle);\n\n  if (!defined(material)) {\n    material = Material.fromType(Material.ColorType, {\n      color: new Color(1.0, 1.0, 1.0, 1.0),\n    });\n  }\n\n  /**\n   * The surface appearance of the viewport quad.  This can be one of several built-in {@link Material} objects or a custom material, scripted with\n   * {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}.\n   * <p>\n   * The default material is <code>Material.ColorType</code>.\n   * </p>\n   *\n   * @type Material\n   *\n   * @example\n   * // 1. Change the color of the default material to yellow\n   * viewportQuad.material.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);\n   *\n   * // 2. Change material to horizontal stripes\n   * viewportQuad.material = Cesium.Material.fromType(Cesium.Material.StripeType);\n   *\n   * @see {@link https://github.com/CesiumGS/cesium/wiki/Fabric|Fabric}\n   */\n  this.material = material;\n  this._material = undefined;\n\n  this._overlayCommand = undefined;\n  this._rs = undefined;\n}\n\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * get the draw commands needed to render this primitive.\n * <p>\n * Do not call this function directly.  This is documented just to\n * list the exceptions that may be propagated when the scene is rendered:\n * </p>\n *\n * @exception {DeveloperError} this.material must be defined.\n * @exception {DeveloperError} this.rectangle must be defined.\n */\nViewportQuad.prototype.update = function (frameState) {\n  if (!this.show) {\n    return;\n  }\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(this.material)) {\n    throw new DeveloperError(\"this.material must be defined.\");\n  }\n  if (!defined(this.rectangle)) {\n    throw new DeveloperError(\"this.rectangle must be defined.\");\n  }\n  //>>includeEnd('debug');\n\n  const rs = this._rs;\n  if (!defined(rs) || !BoundingRectangle.equals(rs.viewport, this.rectangle)) {\n    this._rs = RenderState.fromCache({\n      blending: BlendingState.ALPHA_BLEND,\n      viewport: this.rectangle,\n    });\n  }\n\n  const pass = frameState.passes;\n  if (pass.render) {\n    const context = frameState.context;\n\n    if (this._material !== this.material || !defined(this._overlayCommand)) {\n      // Recompile shader when material changes\n      this._material = this.material;\n\n      if (defined(this._overlayCommand)) {\n        this._overlayCommand.shaderProgram.destroy();\n      }\n\n      const fs = new ShaderSource({\n        sources: [this._material.shaderSource, ViewportQuadFS],\n      });\n      this._overlayCommand = context.createViewportQuadCommand(fs, {\n        renderState: this._rs,\n        uniformMap: this._material._uniforms,\n        owner: this,\n      });\n      this._overlayCommand.pass = Pass.OVERLAY;\n    }\n\n    this._material.update(context);\n\n    this._overlayCommand.renderState = this._rs;\n    this._overlayCommand.uniformMap = this._material._uniforms;\n    frameState.commandList.push(this._overlayCommand);\n  }\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} True if this object was destroyed; otherwise, false.\n *\n * @see ViewportQuad#destroy\n */\nViewportQuad.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n *\n * @example\n * quad = quad && quad.destroy();\n *\n * @see ViewportQuad#isDestroyed\n */\nViewportQuad.prototype.destroy = function () {\n  if (defined(this._overlayCommand)) {\n    this._overlayCommand.shaderProgram =\n      this._overlayCommand.shaderProgram &&\n      this._overlayCommand.shaderProgram.destroy();\n  }\n  return destroyObject(this);\n};\nexport default ViewportQuad;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Check from \"../Core/Check.js\";\nimport ClippingPlane from \"./ClippingPlane.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Event from \"../Core/Event.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport Intersect from \"../Core/Intersect.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Plane from \"../Core/Plane.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\n\n/**\n * Specifies a set of clipping planes defining rendering bounds for a {@link VoxelPrimitive}.\n *\n * @alias VoxelBoundsCollection\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {ClippingPlane[]} [options.planes=[]] An array of {@link ClippingPlane} objects used to selectively disable rendering on the outside of each plane.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The 4x4 transformation matrix specifying an additional transform relative to the clipping planes original coordinate system.\n * @param {boolean} [options.unionClippingRegions=false] If true, a region will be clipped if it is on the outside of any plane in the collection. Otherwise, a region will only be clipped if it is on the outside of every plane.\n *\n * @private\n */\nfunction VoxelBoundsCollection(options) {\n  const {\n    planes,\n    modelMatrix = Matrix4.IDENTITY,\n    unionClippingRegions = false,\n  } = options ?? Frozen.EMPTY_OBJECT;\n\n  this._planes = [];\n\n  /**\n   * The 4x4 transformation matrix specifying an additional transform relative to the clipping planes\n   * original coordinate system.\n   *\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   */\n  this.modelMatrix = Matrix4.clone(modelMatrix);\n\n  /**\n   * An event triggered when a new clipping plane is added to the collection.  Event handlers\n   * are passed the new plane and the index at which it was added.\n   * @type {Event}\n   * @readonly\n   */\n  this.planeAdded = new Event();\n\n  /**\n   * An event triggered when a new clipping plane is removed from the collection.  Event handlers\n   * are passed the new plane and the index from which it was removed.\n   * @type {Event}\n   * @readonly\n   */\n  this.planeRemoved = new Event();\n\n  this._unionClippingRegions = unionClippingRegions;\n  this._testIntersection = unionClippingRegions\n    ? unionIntersectFunction\n    : defaultIntersectFunction;\n\n  this._float32View = undefined;\n\n  this._clippingPlanesTexture = undefined;\n\n  // Add each ClippingPlane object.\n  if (defined(planes)) {\n    for (let i = 0; i < planes.length; ++i) {\n      this.add(planes[i]);\n    }\n  }\n}\n\nfunction unionIntersectFunction(value) {\n  return value === Intersect.OUTSIDE;\n}\n\nfunction defaultIntersectFunction(value) {\n  return value === Intersect.INSIDE;\n}\n\nObject.defineProperties(VoxelBoundsCollection.prototype, {\n  /**\n   * Returns the number of planes in this collection.  This is commonly used with\n   * {@link VoxelBoundsCollection#get} to iterate over all the planes\n   * in the collection.\n   *\n   * @memberof VoxelBoundsCollection.prototype\n   * @type {number}\n   * @readonly\n   */\n  length: {\n    get: function () {\n      return this._planes.length;\n    },\n  },\n\n  /**\n   * If true, a region will be clipped if it is on the outside of any plane in the\n   * collection. Otherwise, a region will only be clipped if it is on the\n   * outside of every plane.\n   *\n   * @memberof VoxelBoundsCollection.prototype\n   * @type {boolean}\n   * @default false\n   */\n  unionClippingRegions: {\n    get: function () {\n      return this._unionClippingRegions;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"value\", value);\n      //>>includeEnd('debug');\n      if (this._unionClippingRegions === value) {\n        return;\n      }\n      this._unionClippingRegions = value;\n      this._testIntersection = value\n        ? unionIntersectFunction\n        : defaultIntersectFunction;\n    },\n  },\n\n  /**\n   * Returns a texture containing packed, untransformed clipping planes.\n   *\n   * @memberof VoxelBoundsCollection.prototype\n   * @type {Texture}\n   * @readonly\n   * @private\n   */\n  texture: {\n    get: function () {\n      return this._clippingPlanesTexture;\n    },\n  },\n\n  /**\n   * Returns a Number encapsulating the state for this VoxelBoundsCollection.\n   *\n   * Clipping mode is encoded in the sign of the number, which is just the plane count.\n   * If this value changes, then shader regeneration is necessary.\n   *\n   * @memberof VoxelBoundsCollection.prototype\n   * @returns {number} A Number that describes the VoxelBoundsCollection's state.\n   * @readonly\n   * @private\n   */\n  clippingPlanesState: {\n    get: function () {\n      return this._unionClippingRegions\n        ? this._planes.length\n        : -this._planes.length;\n    },\n  },\n});\n\n/**\n * Adds the specified {@link ClippingPlane} to the collection to be used to selectively disable rendering\n * on the outside of each plane. Use {@link VoxelBoundsCollection#unionClippingRegions} to modify\n * how modify the clipping behavior of multiple planes.\n *\n * @param {ClippingPlane} plane The ClippingPlane to add to the collection.\n *\n * @see VoxelBoundsCollection#unionClippingRegions\n * @see VoxelBoundsCollection#remove\n * @see VoxelBoundsCollection#removeAll\n */\nVoxelBoundsCollection.prototype.add = function (plane) {\n  const newPlaneIndex = this._planes.length;\n  plane.index = newPlaneIndex;\n  this._planes.push(plane);\n  this.planeAdded.raiseEvent(plane, newPlaneIndex);\n};\n\n/**\n * Returns the plane in the collection at the specified index.  Indices are zero-based\n * and increase as planes are added.  Removing a plane shifts all planes after\n * it to the left, changing their indices.  This function is commonly used with\n * {@link VoxelBoundsCollection#length} to iterate over all the planes\n * in the collection.\n *\n * @param {number} index The zero-based index of the plane.\n * @returns {ClippingPlane} The ClippingPlane at the specified index.\n *\n * @see VoxelBoundsCollection#length\n */\nVoxelBoundsCollection.prototype.get = function (index) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"index\", index);\n  //>>includeEnd('debug');\n\n  return this._planes[index];\n};\n\nfunction indexOf(planes, plane) {\n  for (let i = 0; i < planes.length; ++i) {\n    if (Plane.equals(planes[i], plane)) {\n      return i;\n    }\n  }\n  return -1;\n}\n\n/**\n * Checks whether this collection contains a ClippingPlane equal to the given ClippingPlane.\n *\n * @param {ClippingPlane} [clippingPlane] The ClippingPlane to check for.\n * @returns {boolean} true if this collection contains the ClippingPlane, false otherwise.\n *\n * @see VoxelBoundsCollection#get\n */\nVoxelBoundsCollection.prototype.contains = function (clippingPlane) {\n  return indexOf(this._planes, clippingPlane) !== -1;\n};\n\n/**\n * Removes the first occurrence of the given ClippingPlane from the collection.\n *\n * @param {ClippingPlane} clippingPlane\n * @returns {boolean} <code>true</code> if the plane was removed; <code>false</code> if the plane was not found in the collection.\n *\n * @see VoxelBoundsCollection#add\n * @see VoxelBoundsCollection#contains\n * @see VoxelBoundsCollection#removeAll\n */\nVoxelBoundsCollection.prototype.remove = function (clippingPlane) {\n  const planes = this._planes;\n  const index = indexOf(planes, clippingPlane);\n\n  if (index === -1) {\n    return false;\n  }\n\n  // Unlink this VoxelBoundsCollection from the ClippingPlane\n  if (clippingPlane instanceof ClippingPlane) {\n    clippingPlane.onChangeCallback = undefined;\n    clippingPlane.index = -1;\n  }\n\n  // Shift and update indices\n  const length = planes.length - 1;\n  for (let i = index; i < length; ++i) {\n    const planeToKeep = planes[i + 1];\n    planes[i] = planeToKeep;\n    if (planeToKeep instanceof ClippingPlane) {\n      planeToKeep.index = i;\n    }\n  }\n\n  planes.length = length;\n\n  this.planeRemoved.raiseEvent(clippingPlane, index);\n\n  return true;\n};\n\n/**\n * Removes all planes from the collection.\n *\n * @see VoxelBoundsCollection#add\n * @see VoxelBoundsCollection#remove\n */\nVoxelBoundsCollection.prototype.removeAll = function () {\n  // Dereference this VoxelBoundsCollection from all ClippingPlanes\n  const planes = this._planes;\n  for (let i = 0; i < planes.length; ++i) {\n    const plane = planes[i];\n    if (plane instanceof ClippingPlane) {\n      plane.onChangeCallback = undefined;\n      plane.index = -1;\n    }\n    this.planeRemoved.raiseEvent(plane, i);\n  }\n  this._planes = [];\n};\n\nconst scratchPlane = new Plane(Cartesian3.fromElements(1.0, 0.0, 0.0), 0.0);\n\n// Pack starting at the beginning of the buffer to allow partial update\nfunction transformAndPackPlanes(clippingPlaneCollection, transform) {\n  const float32View = clippingPlaneCollection._float32View;\n  const planes = clippingPlaneCollection._planes;\n\n  let floatIndex = 0;\n  for (let i = 0; i < planes.length; ++i) {\n    const { normal, distance } = transformPlane(\n      planes[i],\n      transform,\n      scratchPlane,\n    );\n\n    float32View[floatIndex] = normal.x;\n    float32View[floatIndex + 1] = normal.y;\n    float32View[floatIndex + 2] = normal.z;\n    float32View[floatIndex + 3] = distance;\n\n    floatIndex += 4; // each plane is 4 floats\n  }\n}\n\nconst scratchPlaneCartesian4 = new Cartesian4();\nconst scratchTransformedNormal = new Cartesian3();\n\nfunction transformPlane(plane, transform, result) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"plane\", plane);\n  Check.typeOf.object(\"transform\", transform);\n  //>>includeEnd('debug');\n\n  const { normal, distance } = plane;\n  const planeAsCartesian4 = Cartesian4.fromElements(\n    normal.x,\n    normal.y,\n    normal.z,\n    distance,\n    scratchPlaneCartesian4,\n  );\n  let transformedPlane = Matrix4.multiplyByVector(\n    transform,\n    planeAsCartesian4,\n    scratchPlaneCartesian4,\n  );\n\n  // Convert the transformed plane to Hessian Normal Form\n  const transformedNormal = Cartesian3.fromCartesian4(\n    transformedPlane,\n    scratchTransformedNormal,\n  );\n  transformedPlane = Cartesian4.divideByScalar(\n    transformedPlane,\n    Cartesian3.magnitude(transformedNormal),\n    scratchPlaneCartesian4,\n  );\n\n  return Plane.fromCartesian4(transformedPlane, result);\n}\n\nfunction computeTextureResolution(pixelsNeeded, result) {\n  result.x = Math.min(pixelsNeeded, ContextLimits.maximumTextureSize);\n  result.y = Math.ceil(pixelsNeeded / result.x);\n  return result;\n}\n\nconst textureResolutionScratch = new Cartesian2();\n/**\n * Called when {@link Viewer} or {@link CesiumWidget} render the scene to\n * build the resources for clipping planes.\n * <p>\n * Do not call this function directly.\n * </p>\n */\nVoxelBoundsCollection.prototype.update = function (frameState, transform) {\n  let clippingPlanesTexture = this._clippingPlanesTexture;\n\n  // Compute texture requirements for current planes\n  // In RGBA FLOAT, a plane is 4 floats packed to a single RGBA pixel.\n  const pixelsNeeded = this.length;\n\n  if (defined(clippingPlanesTexture)) {\n    const currentPixelCount =\n      clippingPlanesTexture.width * clippingPlanesTexture.height;\n    // Recreate the texture to double current requirement if it isn't big enough or is 4 times larger than it needs to be.\n    // Optimization note: this isn't exactly the classic resizeable array algorithm\n    // * not necessarily checking for resize after each add/remove operation\n    // * random-access deletes instead of just pops\n    // * alloc ops likely more expensive than demonstrable via big-O analysis\n    if (\n      currentPixelCount < pixelsNeeded ||\n      pixelsNeeded < 0.25 * currentPixelCount\n    ) {\n      clippingPlanesTexture.destroy();\n      clippingPlanesTexture = undefined;\n      this._clippingPlanesTexture = undefined;\n    }\n  }\n\n  // If there are no bound planes, there's nothing to update.\n  if (this.length === 0) {\n    return;\n  }\n\n  if (!defined(clippingPlanesTexture)) {\n    const requiredResolution = computeTextureResolution(\n      pixelsNeeded,\n      textureResolutionScratch,\n    );\n    // Allocate twice as much space as needed to avoid frequent texture reallocation.\n    // Allocate in the Y direction, since texture may be as wide as context texture support.\n    requiredResolution.y *= 2;\n\n    clippingPlanesTexture = new Texture({\n      context: frameState.context,\n      width: requiredResolution.x,\n      height: requiredResolution.y,\n      pixelFormat: PixelFormat.RGBA,\n      pixelDatatype: PixelDatatype.FLOAT,\n      sampler: Sampler.NEAREST,\n      flipY: false,\n    });\n    this._float32View = new Float32Array(\n      requiredResolution.x * requiredResolution.y * 4,\n    );\n\n    this._clippingPlanesTexture = clippingPlanesTexture;\n  }\n\n  const { width, height } = clippingPlanesTexture;\n  transformAndPackPlanes(this, transform);\n  clippingPlanesTexture.copyFrom({\n    source: {\n      width: width,\n      height: height,\n      arrayBufferView: this._float32View,\n    },\n  });\n};\n\n/**\n * Function for getting the clipping plane collection's texture resolution.\n * If the VoxelBoundsCollection hasn't been updated, returns the resolution that will be\n * allocated based on the current plane count.\n *\n * @param {VoxelBoundsCollection} clippingPlaneCollection The clipping plane collection\n * @param {Context} context The rendering context\n * @param {Cartesian2} result A Cartesian2 for the result.\n * @returns {Cartesian2} The required resolution.\n * @private\n */\nVoxelBoundsCollection.getTextureResolution = function (\n  clippingPlaneCollection,\n  context,\n  result,\n) {\n  const texture = clippingPlaneCollection.texture;\n  if (defined(texture)) {\n    result.x = texture.width;\n    result.y = texture.height;\n    return result;\n  }\n\n  const pixelsNeeded = clippingPlaneCollection.length;\n  const requiredResolution = computeTextureResolution(pixelsNeeded, result);\n\n  // Allocate twice as much space as needed to avoid frequent texture reallocation.\n  requiredResolution.y *= 2;\n  return requiredResolution;\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see VoxelBoundsCollection#destroy\n */\nVoxelBoundsCollection.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @example\n * voxelBounds = voxelBounds && voxelBounds.destroy();\n *\n * @see VoxelBoundsCollection#isDestroyed\n */\nVoxelBoundsCollection.prototype.destroy = function () {\n  this._clippingPlanesTexture =\n    this._clippingPlanesTexture && this._clippingPlanesTexture.destroy();\n  return destroyObject(this);\n};\nexport default VoxelBoundsCollection;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Check from \"../Core/Check.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport VoxelBoundsCollection from \"./VoxelBoundsCollection.js\";\nimport ClippingPlane from \"./ClippingPlane.js\";\n\n/**\n * A box {@link VoxelShape}.\n *\n * @alias VoxelBoxShape\n * @constructor\n *\n * @see VoxelShape\n * @see VoxelEllipsoidShape\n * @see VoxelCylinderShape\n * @see VoxelShapeType\n *\n * @private\n */\nfunction VoxelBoxShape() {\n  this._orientedBoundingBox = new OrientedBoundingBox();\n  this._boundingSphere = new BoundingSphere();\n  this._boundTransform = new Matrix4();\n  this._shapeTransform = new Matrix4();\n\n  /**\n   * The minimum bounds of the shape.\n   * @type {Cartesian3}\n   * @private\n   */\n  this._minBounds = VoxelBoxShape.DefaultMinBounds.clone();\n\n  /**\n   * The maximum bounds of the shape.\n   * @type {Cartesian3}\n   * @private\n   */\n  this._maxBounds = VoxelBoxShape.DefaultMaxBounds.clone();\n\n  /**\n   * The minimum render bounds of the shape.\n   * @type {Cartesian3}\n   * @private\n   */\n  this._renderMinBounds = VoxelBoxShape.DefaultMinBounds.clone();\n\n  /**\n   * The maximum render bounds of the shape.\n   * @type {Cartesian3}\n   * @private\n   */\n  this._renderMaxBounds = VoxelBoxShape.DefaultMaxBounds.clone();\n\n  const { DefaultMinBounds, DefaultMaxBounds } = VoxelBoxShape;\n  const boundPlanes = [\n    new ClippingPlane(\n      Cartesian3.negate(Cartesian3.UNIT_X, new Cartesian3()),\n      DefaultMinBounds.x,\n    ),\n    new ClippingPlane(\n      Cartesian3.negate(Cartesian3.UNIT_Y, new Cartesian3()),\n      DefaultMinBounds.y,\n    ),\n    new ClippingPlane(\n      Cartesian3.negate(Cartesian3.UNIT_Z, new Cartesian3()),\n      DefaultMinBounds.z,\n    ),\n    new ClippingPlane(Cartesian3.UNIT_X, -DefaultMaxBounds.x),\n    new ClippingPlane(Cartesian3.UNIT_Y, -DefaultMaxBounds.y),\n    new ClippingPlane(Cartesian3.UNIT_Z, -DefaultMaxBounds.z),\n  ];\n\n  this._renderBoundPlanes = new VoxelBoundsCollection({ planes: boundPlanes });\n\n  this._shaderUniforms = {\n    boxEcToXyz: new Matrix3(),\n    boxLocalToShapeUvScale: new Cartesian3(),\n    boxLocalToShapeUvTranslate: new Cartesian3(),\n  };\n\n  this._shaderDefines = {\n    BOX_INTERSECTION_INDEX: undefined,\n  };\n\n  this._shaderMaximumIntersectionsLength = 0; // not known until update\n}\n\nObject.defineProperties(VoxelBoxShape.prototype, {\n  /**\n   * An oriented bounding box containing the bounded shape.\n   *\n   * @memberof VoxelBoxShape.prototype\n   * @type {OrientedBoundingBox}\n   * @readonly\n   * @private\n   */\n  orientedBoundingBox: {\n    get: function () {\n      return this._orientedBoundingBox;\n    },\n  },\n\n  /**\n   * A collection of planes used for the render bounds\n   * @memberof VoxelBoxShape.prototype\n   * @type {VoxelBoundsCollection}\n   * @readonly\n   * @private\n   */\n  renderBoundPlanes: {\n    get: function () {\n      return this._renderBoundPlanes;\n    },\n  },\n\n  /**\n   * A bounding sphere containing the bounded shape.\n   *\n   * @memberof VoxelBoxShape.prototype\n   * @type {BoundingSphere}\n   * @readonly\n   * @private\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n\n  /**\n   * A transformation matrix containing the bounded shape.\n   *\n   * @memberof VoxelBoxShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  boundTransform: {\n    get: function () {\n      return this._boundTransform;\n    },\n  },\n\n  /**\n   * A transformation matrix containing the shape, ignoring the bounds.\n   *\n   * @memberof VoxelBoxShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  shapeTransform: {\n    get: function () {\n      return this._shapeTransform;\n    },\n  },\n\n  /**\n   * @memberof VoxelBoxShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderUniforms: {\n    get: function () {\n      return this._shaderUniforms;\n    },\n  },\n\n  /**\n   * @memberof VoxelBoxShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderDefines: {\n    get: function () {\n      return this._shaderDefines;\n    },\n  },\n\n  /**\n   * The maximum number of intersections against the shape for any ray direction.\n   * @memberof VoxelBoxShape.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  shaderMaximumIntersectionsLength: {\n    get: function () {\n      return this._shaderMaximumIntersectionsLength;\n    },\n  },\n});\n\nconst scratchCenter = new Cartesian3();\nconst scratchScale = new Cartesian3();\nconst scratchRotation = new Matrix3();\nconst scratchClipMinBounds = new Cartesian3();\nconst scratchClipMaxBounds = new Cartesian3();\n\n/**\n * Update the shape's state.\n * @private\n * @param {Matrix4} modelMatrix The model matrix.\n * @param {Cartesian3} minBounds The minimum bounds.\n * @param {Cartesian3} maxBounds The maximum bounds.\n * @param {Cartesian3} [clipMinBounds] The minimum clip bounds.\n * @param {Cartesian3} [clipMaxBounds] The maximum clip bounds.\n * @returns {boolean} Whether the shape is visible.\n */\nVoxelBoxShape.prototype.update = function (\n  modelMatrix,\n  minBounds,\n  maxBounds,\n  clipMinBounds,\n  clipMaxBounds,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"modelMatrix\", modelMatrix);\n  Check.typeOf.object(\"minBounds\", minBounds);\n  Check.typeOf.object(\"maxBounds\", maxBounds);\n  //>>includeEnd('debug');\n\n  clipMinBounds = clipMinBounds ?? minBounds.clone(scratchClipMinBounds);\n  clipMaxBounds = clipMaxBounds ?? maxBounds.clone(scratchClipMaxBounds);\n\n  minBounds = Cartesian3.clone(minBounds, this._minBounds);\n  maxBounds = Cartesian3.clone(maxBounds, this._maxBounds);\n\n  const renderMinBounds = Cartesian3.clamp(\n    minBounds,\n    clipMinBounds,\n    clipMaxBounds,\n    this._renderMinBounds,\n  );\n  const renderMaxBounds = Cartesian3.clamp(\n    maxBounds,\n    clipMinBounds,\n    clipMaxBounds,\n    this._renderMaxBounds,\n  );\n\n  // Box is not visible if:\n  // - any of the min render bounds exceed the max render bounds\n  // - two or more of the min bounds equal the max bounds (line / point)\n  // - scale is 0 for any component (too annoying to reconstruct rotation matrix)\n  const scale = Matrix4.getScale(modelMatrix, scratchScale);\n  if (\n    renderMinBounds.x > renderMaxBounds.x ||\n    renderMinBounds.y > renderMaxBounds.y ||\n    renderMinBounds.z > renderMaxBounds.z ||\n    (renderMinBounds.x === renderMaxBounds.x) +\n      (renderMinBounds.y === renderMaxBounds.y) +\n      (renderMinBounds.z === renderMaxBounds.z) >=\n      2 ||\n    scale.x === 0.0 ||\n    scale.y === 0.0 ||\n    scale.z === 0.0\n  ) {\n    return false;\n  }\n\n  // Update the render bounds planes\n  const renderBoundPlanes = this._renderBoundPlanes;\n  renderBoundPlanes.get(0).distance = renderMinBounds.x;\n  renderBoundPlanes.get(1).distance = renderMinBounds.y;\n  renderBoundPlanes.get(2).distance = renderMinBounds.z;\n  renderBoundPlanes.get(3).distance = -renderMaxBounds.x;\n  renderBoundPlanes.get(4).distance = -renderMaxBounds.y;\n  renderBoundPlanes.get(5).distance = -renderMaxBounds.z;\n\n  this._shapeTransform = Matrix4.clone(modelMatrix, this._shapeTransform);\n\n  this._orientedBoundingBox = getBoxChunkObb(\n    renderMinBounds,\n    renderMaxBounds,\n    this._shapeTransform,\n    this._orientedBoundingBox,\n  );\n\n  // All of the box bounds go from -1 to +1, so the model matrix scale can be\n  // used as the oriented bounding box half axes.\n  this._boundTransform = Matrix4.fromRotationTranslation(\n    this._orientedBoundingBox.halfAxes,\n    this._orientedBoundingBox.center,\n    this._boundTransform,\n  );\n\n  this._boundingSphere = BoundingSphere.fromOrientedBoundingBox(\n    this._orientedBoundingBox,\n    this._boundingSphere,\n  );\n\n  const shaderUniforms = this._shaderUniforms;\n  const shaderDefines = this._shaderDefines;\n\n  // To keep things simple, clear the defines every time\n  for (const key in shaderDefines) {\n    if (shaderDefines.hasOwnProperty(key)) {\n      shaderDefines[key] = undefined;\n    }\n  }\n\n  // Keep track of how many intersections there are going to be.\n  let intersectionCount = 0;\n\n  shaderDefines[\"BOX_INTERSECTION_INDEX\"] = intersectionCount;\n  intersectionCount += 1;\n\n  // Compute scale and translation to transform from UV space to bounded UV space\n  const min = minBounds;\n  const max = maxBounds;\n  const boxLocalToShapeUvScale = Cartesian3.fromElements(\n    boundScale(min.x, max.x),\n    boundScale(min.y, max.y),\n    boundScale(min.z, max.z),\n    shaderUniforms.boxLocalToShapeUvScale,\n  );\n  shaderUniforms.boxLocalToShapeUvTranslate = Cartesian3.negate(\n    Cartesian3.multiplyComponents(\n      boxLocalToShapeUvScale,\n      min,\n      shaderUniforms.boxLocalToShapeUvTranslate,\n    ),\n    shaderUniforms.boxLocalToShapeUvTranslate,\n  );\n\n  this._shaderMaximumIntersectionsLength = intersectionCount;\n\n  return true;\n};\n\nfunction boundScale(minBound, maxBound) {\n  return CesiumMath.equalsEpsilon(minBound, maxBound, CesiumMath.EPSILON7)\n    ? 1.0\n    : 1.0 / (maxBound - minBound);\n}\n\nconst scratchTransformPositionWorldToLocal = new Matrix4();\n/**\n * Update any view-dependent transforms.\n * @private\n * @param {FrameState} frameState The frame state.\n */\nVoxelBoxShape.prototype.updateViewTransforms = function (frameState) {\n  const shaderUniforms = this._shaderUniforms;\n  const transformPositionWorldToLocal = Matrix4.inverse(\n    this._shapeTransform,\n    scratchTransformPositionWorldToLocal,\n  );\n  const transformDirectionWorldToLocal = Matrix4.getMatrix3(\n    transformPositionWorldToLocal,\n    shaderUniforms.boxEcToXyz,\n  );\n  const rotateViewToWorld = frameState.context.uniformState.inverseViewRotation;\n  Matrix3.multiply(\n    transformDirectionWorldToLocal,\n    rotateViewToWorld,\n    shaderUniforms.boxEcToXyz,\n  );\n};\n\n/**\n * Convert a local coordinate to the shape's UV space.\n * @private\n * @param {Cartesian3} positionLocal The local coordinate to convert.\n * @param {Cartesian3} result The Cartesian3 to store the result in.\n * @returns {Cartesian3} The converted UV coordinate.\n */\nVoxelBoxShape.prototype.convertLocalToShapeUvSpace = function (\n  positionLocal,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"positionLocal\", positionLocal);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const { boxLocalToShapeUvScale, boxLocalToShapeUvTranslate } =\n    this._shaderUniforms;\n\n  return Cartesian3.add(\n    Cartesian3.multiplyComponents(\n      positionLocal,\n      boxLocalToShapeUvScale,\n      result,\n    ),\n    boxLocalToShapeUvTranslate,\n    result,\n  );\n};\n\nconst scratchTileMinBounds = new Cartesian3();\nconst scratchTileMaxBounds = new Cartesian3();\n\n/**\n * Computes an oriented bounding box for a specified tile.\n * @private\n * @param {number} tileLevel The tile's level.\n * @param {number} tileX The tile's x coordinate.\n * @param {number} tileY The tile's y coordinate.\n * @param {number} tileZ The tile's z coordinate.\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified tile\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelBoxShape.prototype.computeOrientedBoundingBoxForTile = function (\n  tileLevel,\n  tileX,\n  tileY,\n  tileZ,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"tileLevel\", tileLevel);\n  Check.typeOf.number(\"tileX\", tileX);\n  Check.typeOf.number(\"tileY\", tileY);\n  Check.typeOf.number(\"tileZ\", tileZ);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const minBounds = this._minBounds;\n  const maxBounds = this._maxBounds;\n  const sizeAtLevel = 1.0 / Math.pow(2, tileLevel);\n\n  const tileMinBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, sizeAtLevel * tileX),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, sizeAtLevel * tileY),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, sizeAtLevel * tileZ),\n    scratchTileMinBounds,\n  );\n\n  const tileMaxBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, sizeAtLevel * (tileX + 1)),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, sizeAtLevel * (tileY + 1)),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, sizeAtLevel * (tileZ + 1)),\n    scratchTileMaxBounds,\n  );\n\n  return getBoxChunkObb(\n    tileMinBounds,\n    tileMaxBounds,\n    this._shapeTransform,\n    result,\n  );\n};\n\nconst sampleSizeScratch = new Cartesian3();\n\n/**\n * Computes an oriented bounding box for a specified sample within a specified tile.\n * @private\n * @param {SpatialNode} spatialNode The spatial node containing the sample\n * @param {Cartesian3} tileDimensions The size of the tile in number of samples, before padding\n * @param {Cartesian3} tileUv The sample coordinate within the tile\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified sample\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelBoxShape.prototype.computeOrientedBoundingBoxForSample = function (\n  spatialNode,\n  tileDimensions,\n  tileUv,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"spatialNode\", spatialNode);\n  Check.typeOf.object(\"tileDimensions\", tileDimensions);\n  Check.typeOf.object(\"tileUv\", tileUv);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const tileSizeAtLevel = 1.0 / Math.pow(2, spatialNode.level);\n  const sampleSize = Cartesian3.divideComponents(\n    Cartesian3.ONE,\n    tileDimensions,\n    sampleSizeScratch,\n  );\n  const sampleSizeAtLevel = Cartesian3.multiplyByScalar(\n    sampleSize,\n    tileSizeAtLevel,\n    sampleSizeScratch,\n  );\n\n  const minLerp = Cartesian3.multiplyByScalar(\n    Cartesian3.fromElements(\n      spatialNode.x + tileUv.x,\n      spatialNode.y + tileUv.y,\n      spatialNode.z + tileUv.z,\n      scratchTileMinBounds,\n    ),\n    tileSizeAtLevel,\n    scratchTileMinBounds,\n  );\n  const maxLerp = Cartesian3.add(\n    minLerp,\n    sampleSizeAtLevel,\n    scratchTileMaxBounds,\n  );\n\n  const minBounds = this._minBounds;\n  const maxBounds = this._maxBounds;\n  const sampleMinBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, minLerp.x),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, minLerp.y),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, minLerp.z),\n    scratchTileMinBounds,\n  );\n  const sampleMaxBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, maxLerp.x),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, maxLerp.y),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, maxLerp.z),\n    scratchTileMaxBounds,\n  );\n\n  return getBoxChunkObb(\n    sampleMinBounds,\n    sampleMaxBounds,\n    this._shapeTransform,\n    result,\n  );\n};\n\n/**\n * Defines the minimum bounds of the shape. Corresponds to minimum X, Y, Z.\n * @private\n * @type {Cartesian3}\n * @constant\n * @readonly\n */\nVoxelBoxShape.DefaultMinBounds = Object.freeze(\n  new Cartesian3(-1.0, -1.0, -1.0),\n);\n\n/**\n * Defines the maximum bounds of the shape. Corresponds to maximum X, Y, Z.\n * @private\n * @type {Cartesian3}\n * @constant\n * @readonly\n */\nVoxelBoxShape.DefaultMaxBounds = Object.freeze(\n  new Cartesian3(+1.0, +1.0, +1.0),\n);\n\nconst scratchBoxScale = new Cartesian3();\n/**\n * Computes an {@link OrientedBoundingBox} for a subregion of the shape.\n *\n * @function\n *\n * @param {Cartesian3} minimumBounds The minimum bounds, in the local coordinates of the shape.\n * @param {Cartesian3} maximumBounds The maximum bounds, in the local coordinates of the shape.\n * @param {Matrix4} matrix The matrix to transform the points.\n * @param {OrientedBoundingBox} result The object onto which to store the result.\n * @returns {OrientedBoundingBox} The oriented bounding box that contains this subregion.\n *\n * @private\n */\nfunction getBoxChunkObb(minimumBounds, maximumBounds, matrix, result) {\n  const defaultMinBounds = VoxelBoxShape.DefaultMinBounds;\n  const defaultMaxBounds = VoxelBoxShape.DefaultMaxBounds;\n\n  const isDefaultBounds =\n    Cartesian3.equals(minimumBounds, defaultMinBounds) &&\n    Cartesian3.equals(maximumBounds, defaultMaxBounds);\n\n  if (isDefaultBounds) {\n    result.center = Matrix4.getTranslation(matrix, result.center);\n    result.halfAxes = Matrix4.getMatrix3(matrix, result.halfAxes);\n  } else {\n    let scale = Matrix4.getScale(matrix, scratchBoxScale);\n    const localCenter = Cartesian3.midpoint(\n      minimumBounds,\n      maximumBounds,\n      scratchCenter,\n    );\n    result.center = Matrix4.multiplyByPoint(matrix, localCenter, result.center);\n    scale = Cartesian3.fromElements(\n      scale.x * 0.5 * (maximumBounds.x - minimumBounds.x),\n      scale.y * 0.5 * (maximumBounds.y - minimumBounds.y),\n      scale.z * 0.5 * (maximumBounds.z - minimumBounds.z),\n      scratchBoxScale,\n    );\n    const rotation = Matrix4.getRotation(matrix, scratchRotation);\n    result.halfAxes = Matrix3.setScale(rotation, scale, result.halfAxes);\n  }\n\n  return result;\n}\n\nexport default VoxelBoxShape;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport Check from \"../Core/Check.js\";\nimport defined from \"../Core/defined.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\n\n/**\n * A cell from a {@link VoxelPrimitive}.\n * <p>\n * Provides access to properties associated with one cell of a voxel primitive.\n * </p>\n * <p>\n * Do not construct this directly.  Access it through picking using {@link Scene#pickVoxel}.\n * </p>\n *\n * @alias VoxelCell\n * @constructor\n *\n * @param {VoxelPrimitive} primitive The voxel primitive containing the cell\n * @param {number} tileIndex The index of the tile\n * @param {number} sampleIndex The index of the sample within the tile, containing metadata for this cell\n *\n * @example\n * // On left click, display all the properties for a voxel cell in the console log.\n * handler.setInputAction(function(movement) {\n *   const voxelCell = scene.pickVoxel(movement.position);\n *   if (voxelCell instanceof Cesium.VoxelCell) {\n *     const propertyIds = voxelCell.getPropertyIds();\n *     const length = propertyIds.length;\n *     for (let i = 0; i < length; ++i) {\n *       const propertyId = propertyIds[i];\n *       console.log(`{propertyId}: ${voxelCell.getProperty(propertyId)}`);\n *     }\n *   }\n * }, Cesium.ScreenSpaceEventType.LEFT_CLICK);\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction VoxelCell(primitive, tileIndex, sampleIndex) {\n  this._primitive = primitive;\n  this._tileIndex = tileIndex;\n  this._sampleIndex = sampleIndex;\n  this._metadata = {};\n  this._orientedBoundingBox = new OrientedBoundingBox();\n}\n\n/**\n * Construct a VoxelCell, and update the metadata and bounding box using the properties\n * of a supplied keyframe node.\n *\n * @private\n * @param {VoxelPrimitive} primitive The voxel primitive containing the cell.\n * @param {number} tileIndex The index of the tile.\n * @param {number} sampleIndex The index of the sample within the tile, containing metadata for this cell.\n * @param {KeyframeNode} keyframeNode The keyframe node containing information about the tile.\n * @returns {VoxelCell}\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nVoxelCell.fromKeyframeNode = function (\n  primitive,\n  tileIndex,\n  sampleIndex,\n  keyframeNode,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"primitive\", primitive);\n  Check.typeOf.number(\"tileIndex\", tileIndex);\n  Check.typeOf.number(\"sampleIndex\", sampleIndex);\n  Check.typeOf.object(\"keyframeNode\", keyframeNode);\n  //>>includeEnd('debug');\n\n  const voxelCell = new VoxelCell(primitive, tileIndex, sampleIndex);\n  const { spatialNode, content } = keyframeNode;\n  voxelCell._metadata = getMetadataForSample(primitive, content, sampleIndex);\n  voxelCell._orientedBoundingBox = getOrientedBoundingBox(\n    primitive,\n    spatialNode,\n    sampleIndex,\n    voxelCell._orientedBoundingBox,\n  );\n  return voxelCell;\n};\n\n/**\n * @private\n * @param {VoxelPrimitive} primitive\n * @param {VoxelContent} content\n * @param {number} sampleIndex\n * @returns {object}\n */\nfunction getMetadataForSample(primitive, content, sampleIndex) {\n  if (!defined(content) || !defined(content.metadata)) {\n    return undefined;\n  }\n  const { names, types } = primitive.provider;\n  const { metadata } = content;\n  const metadataMap = {};\n  for (let i = 0; i < names.length; i++) {\n    const name = names[i];\n    const componentCount = MetadataType.getComponentCount(types[i]);\n    const samples = metadata[i].slice(\n      sampleIndex * componentCount,\n      (sampleIndex + 1) * componentCount,\n    );\n    metadataMap[name] = samples;\n  }\n  return metadataMap;\n}\n\nconst tileCoordinateScratch = new Cartesian3();\nconst tileUvScratch = new Cartesian3();\n\n/**\n * @private\n * @param {VoxelPrimitive} primitive\n * @param {SpatialNode} spatialNode\n * @param {OrientedBoundingBox} result\n * @returns {OrientedBoundingBox}\n */\nfunction getOrientedBoundingBox(primitive, spatialNode, sampleIndex, result) {\n  // Convert the sample index into a 3D tile coordinate\n  // Note: dimensions from the spatialNode include padding\n  const paddedDimensions = spatialNode.dimensions;\n  const sliceSize = paddedDimensions.x * paddedDimensions.y;\n  const zIndex = Math.floor(sampleIndex / sliceSize);\n  const indexInSlice = sampleIndex - zIndex * sliceSize;\n  const yIndex = Math.floor(indexInSlice / paddedDimensions.x);\n  const xIndex = indexInSlice - yIndex * paddedDimensions.x;\n  const tileCoordinate = Cartesian3.fromElements(\n    xIndex,\n    yIndex,\n    zIndex,\n    tileCoordinateScratch,\n  );\n\n  // Remove padding, and convert to a fraction in [0, 1], where the limits are\n  // the unpadded bounds of the tile\n  const tileUv = Cartesian3.divideComponents(\n    Cartesian3.subtract(\n      tileCoordinate,\n      primitive._paddingBefore,\n      tileCoordinateScratch,\n    ),\n    primitive.dimensions,\n    tileUvScratch,\n  );\n\n  const shape = primitive._shape;\n  return shape.computeOrientedBoundingBoxForSample(\n    spatialNode,\n    primitive.dimensions,\n    tileUv,\n    result,\n  );\n}\n\nObject.defineProperties(VoxelCell.prototype, {\n  /**\n   * Gets an object of the metadata values for this cell. The object's keys are the metadata names.\n   *\n   * @memberof VoxelCell.prototype\n   *\n   * @type {object}\n   *\n   * @readonly\n   * @private\n   */\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n  },\n\n  /**\n   * All objects returned by {@link Scene#pick} have a <code>primitive</code> property. This returns\n   * the VoxelPrimitive containing the cell.\n   *\n   * @memberof VoxelCell.prototype\n   *\n   * @type {VoxelPrimitive}\n   *\n   * @readonly\n   */\n  primitive: {\n    get: function () {\n      return this._primitive;\n    },\n  },\n\n  /**\n   * Get the sample index of the cell.\n   *\n   * @memberof VoxelCell.prototype\n   *\n   * @type {number}\n   *\n   * @readonly\n   */\n  sampleIndex: {\n    get: function () {\n      return this._sampleIndex;\n    },\n  },\n\n  /**\n   * Get the index of the tile containing the cell.\n   *\n   * @memberof VoxelCell.prototype\n   *\n   * @type {number}\n   *\n   * @readonly\n   */\n  tileIndex: {\n    get: function () {\n      return this._tileIndex;\n    },\n  },\n\n  /**\n   * Get a copy of the oriented bounding box containing the cell.\n   *\n   * @memberof VoxelCell.prototype\n   *\n   * @type {OrientedBoundingBox}\n   *\n   * @readonly\n   */\n  orientedBoundingBox: {\n    get: function () {\n      return this._orientedBoundingBox.clone();\n    },\n  },\n});\n\n/**\n * Returns <code>true</code> if the feature contains this property.\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {boolean} Whether the feature contains this property.\n */\nVoxelCell.prototype.hasProperty = function (name) {\n  return defined(this._metadata[name]);\n};\n\n/**\n * Returns an array of metadata property names for the feature.\n *\n * @returns {string[]} The IDs of the feature's properties.\n */\nVoxelCell.prototype.getNames = function () {\n  return Object.keys(this._metadata);\n};\n\n/**\n * Returns a copy of the value of the metadata in the cell with the given name.\n *\n * @param {string} name The case-sensitive name of the property.\n * @returns {*} The value of the property or <code>undefined</code> if the feature does not have this property.\n *\n * @example\n * // Display all the properties for a voxel cell in the console log.\n * const names = voxelCell.getNames();\n * for (let i = 0; i < names.length; ++i) {\n *   const name = names[i];\n *   console.log(`{name}: ${voxelCell.getProperty(name)}`);\n * }\n */\nVoxelCell.prototype.getProperty = function (name) {\n  return this._metadata[name];\n};\n\nexport default VoxelCell;\n","import { destroyObject } from \"@cesium/engine\";\nimport Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport defined from \"../Core/defined.js\";\nimport GltfLoader from \"./GltfLoader.js\";\nimport MetadataComponentType from \"./MetadataComponentType.js\";\nimport MetadataType from \"./MetadataType.js\";\n\n/**\n * <div class=\"notice\">\n * To construct a VoxelContent, call {@link VoxelContent.fromMetadataArray} or {@link VoxelContent.fromGltf}. Do not call the constructor directly.\n * </div>\n * An object representing voxel content for a {@link Cesium3DTilesVoxelProvider}.\n *\n * @alias VoxelContent\n * @internalConstructor\n *\n * @privateParam {object} options An object with the following properties:\n * @privateParam {ResourceLoader} [options.loader] The loader used to load the voxel content.\n * @privateParam {Int8Array[]|Uint8Array[]|Int16Array[]|Uint16Array[]|Int32Array[]|Uint32Array[]|Float32Array[]|Float64Array[]} [options.metadata] The metadata for this voxel content.\n *\n * @exception {DeveloperError} One of loader and metadata must be defined.\n * @exception {DeveloperError} metadata must be an array of TypedArrays.\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction VoxelContent(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options\", options);\n  if (!defined(options.loader)) {\n    if (!defined(options.metadata)) {\n      throw new DeveloperError(\"One of loader and metadata must be defined.\");\n    }\n    if (!Array.isArray(options.metadata)) {\n      throw new DeveloperError(\"metadata must be an array of TypedArrays.\");\n    }\n  }\n  //>>includeEnd('debug');\n\n  const { loader, metadata } = options;\n\n  this._loader = loader;\n  this._metadata = metadata;\n  this._resourcesLoaded = false;\n  this._ready = false;\n}\n\nObject.defineProperties(VoxelContent.prototype, {\n  /**\n   * Returns true when the content is ready to render; otherwise false\n   *\n   * @memberof VoxelContent.prototype\n   *\n   * @type {boolean}\n   * @readonly\n   * @private\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * The metadata for this voxel content.\n   * The metadata is an array of typed arrays, one for each field.\n   * The data for one field is a flattened 3D array ordered by X, then Y, then Z.\n   * @type {Int8Array[]|Uint8Array[]|Int16Array[]|Uint16Array[]|Int32Array[]|Uint32Array[]|Float32Array[]|Float64Array[]}\n   * @readonly\n   */\n  metadata: {\n    get: function () {\n      return this._metadata;\n    },\n  },\n});\n\n/**\n * Constructs a VoxelContent from an array of metadata.\n *\n * @param {Int8Array[]|Uint8Array[]|Int16Array[]|Uint16Array[]|Int32Array[]|Uint32Array[]|Float32Array[]|Float64Array[]} metadata The metadata to use for this voxel content.\n * @returns {VoxelContent} A VoxelContent containing the specified metadata.\n */\nVoxelContent.fromMetadataArray = function (metadata) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"metadata\", metadata);\n  if (!Array.isArray(metadata)) {\n    throw new DeveloperError(\"metadata must be an array of TypedArrays.\");\n  }\n  //>>includeEnd('debug');\n\n  return new VoxelContent({ metadata });\n};\n\n/**\n * Constructs a VoxelContent from a glTF resource.\n *\n * @param {Resource} resource A Resource pointing to a glTF containing voxel content.\n * @returns {Promise<VoxelContent>} A promise that resolves to the voxel content.\n *\n * @private\n */\nVoxelContent.fromGltf = async function (resource) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"resource\", resource);\n  //>>includeEnd('debug');\n\n  // Construct the glTF loader\n  const loader = new GltfLoader({\n    gltfResource: resource,\n    releaseGltfJson: false,\n    loadAttributesAsTypedArray: true,\n  });\n\n  try {\n    // This loads the gltf JSON and ensures the gltf is valid\n    // Further resource loading is handled synchronously in loader.process()\n    // via voxelContent.update() as the frameState is needed\n    await loader.load();\n  } catch (error) {\n    loader.destroy();\n    throw error;\n  }\n\n  return new VoxelContent({ loader });\n};\n\n/**\n * Updates the content until all resources are ready for rendering.\n * @param {FrameState} frameState The frame state\n * @private\n */\nVoxelContent.prototype.update = function (primitive, frameState) {\n  const loader = this._loader;\n\n  if (this._ready) {\n    // Nothing to do\n    return;\n  }\n\n  // Ensures frames continue to render in requestRender mode while resources are processing\n  frameState.afterRender.push(() => true);\n\n  if (!defined(loader)) {\n    this._ready = true;\n    return;\n  }\n\n  if (this._resourcesLoaded) {\n    const { structuralMetadata, scene } = loader.components;\n    const { attributes } = scene.nodes[0].primitives[0];\n    this._metadata = processAttributes(\n      attributes,\n      structuralMetadata,\n      primitive,\n    );\n    this._ready = true;\n    return;\n  }\n\n  this._resourcesLoaded = loader.process(frameState);\n};\n\n/**\n * Processes the attributes from the glTF loader, reordering them into the order expected by the primitive.\n *\n * @param {ModelComponents.Attribute[]} attributes The attributes to process\n * @param {StructuralMetadata} structuralMetadata Information from the glTF EXT_structural_metadata extension\n * @param {VoxelPrimitive} primitive The primitive for which this voxel content will be used.\n * @returns {Int8Array[]|Uint8Array[]|Int16Array[]|Uint16Array[]|Int32Array[]|Uint32Array[]|Float32Array[]|Float64Array[]} An array of typed arrays containing the attribute values\n * @private\n */\nfunction processAttributes(attributes, structuralMetadata, primitive) {\n  const { className, names, types, componentTypes } = primitive.provider;\n  const propertyAttribute = structuralMetadata.propertyAttributes.find(\n    (p) => p.class.id === className,\n  );\n  const { properties } = propertyAttribute;\n  const data = new Array(names.length);\n\n  for (let i = 0; i < attributes.length; i++) {\n    // Find the appropriate glTF attribute based on its name.\n    const name = properties[names[i]].attribute;\n    const attribute = attributes.find((a) => a.name === name);\n    if (!defined(attribute)) {\n      continue;\n    }\n\n    const componentDatatype = MetadataComponentType.toComponentDatatype(\n      componentTypes[i],\n    );\n    const componentCount = MetadataType.getComponentCount(types[i]);\n    const totalCount = attribute.count * componentCount;\n    data[i] = ComponentDatatype.createArrayBufferView(\n      componentDatatype,\n      attribute.typedArray.buffer,\n      attribute.typedArray.byteOffset + attribute.byteOffset,\n      totalCount,\n    );\n  }\n\n  return data;\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see VoxelContent#destroy\n *\n * @private\n */\nVoxelContent.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Frees the resources used by this object.\n * @private\n */\nVoxelContent.prototype.destroy = function () {\n  this._loader = this._loader && this._loader.destroy();\n  return destroyObject(this);\n};\n\nexport default VoxelContent;\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Check from \"../Core/Check.js\";\nimport ClippingPlane from \"./ClippingPlane.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport VoxelBoundsCollection from \"./VoxelBoundsCollection.js\";\n\n/**\n * A cylinder {@link VoxelShape}.\n *\n * @alias VoxelCylinderShape\n * @constructor\n *\n * @see VoxelShape\n * @see VoxelBoxShape\n * @see VoxelEllipsoidShape\n * @see VoxelShapeType\n *\n * @private\n */\nfunction VoxelCylinderShape() {\n  this._orientedBoundingBox = new OrientedBoundingBox();\n  this._boundingSphere = new BoundingSphere();\n  this._boundTransform = new Matrix4();\n  this._shapeTransform = new Matrix4();\n\n  /**\n   * The minimum bounds of the shape, corresponding to minimum radius, angle, and height.\n   * @type {Cartesian3}\n   * @private\n   */\n  this._minBounds = VoxelCylinderShape.DefaultMinBounds.clone();\n\n  /**\n   * The maximum bounds of the shape, corresponding to maximum radius, angle, and height.\n   * @type {Cartesian3}\n   * @private\n   */\n  this._maxBounds = VoxelCylinderShape.DefaultMaxBounds.clone();\n\n  const { DefaultMinBounds, DefaultMaxBounds } = VoxelCylinderShape;\n  const boundPlanes = [\n    new ClippingPlane(\n      Cartesian3.negate(Cartesian3.UNIT_Z, new Cartesian3()),\n      DefaultMinBounds.z,\n    ),\n    new ClippingPlane(Cartesian3.UNIT_Z, -DefaultMaxBounds.z),\n  ];\n\n  this._renderBoundPlanes = new VoxelBoundsCollection({ planes: boundPlanes });\n\n  this._shaderUniforms = {\n    cameraShapePosition: new Cartesian3(),\n    cylinderEcToRadialTangentUp: new Matrix3(),\n    cylinderRenderRadiusMinMax: new Cartesian2(),\n    cylinderRenderAngleMinMax: new Cartesian2(),\n    cylinderLocalToShapeUvRadius: new Cartesian2(),\n    cylinderLocalToShapeUvAngle: new Cartesian2(),\n    cylinderLocalToShapeUvHeight: new Cartesian2(),\n    cylinderShapeUvAngleRangeOrigin: 0.0,\n  };\n\n  this._shaderDefines = {\n    CYLINDER_HAS_SHAPE_BOUNDS_ANGLE: undefined,\n    CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN: undefined,\n    CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT: undefined,\n    CYLINDER_HAS_RENDER_BOUNDS_ANGLE: undefined,\n    CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO: undefined,\n    CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF: undefined,\n    CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF: undefined,\n    CYLINDER_INTERSECTION_INDEX_RADIUS_MAX: undefined,\n    CYLINDER_INTERSECTION_INDEX_RADIUS_MIN: undefined,\n    CYLINDER_INTERSECTION_INDEX_ANGLE: undefined,\n  };\n\n  this._shaderMaximumIntersectionsLength = 0; // not known until update\n}\n\nObject.defineProperties(VoxelCylinderShape.prototype, {\n  /**\n   * An oriented bounding box containing the bounded shape.\n   *\n   * @memberof VoxelCylinderShape.prototype\n   * @type {OrientedBoundingBox}\n   * @readonly\n   * @private\n   */\n  orientedBoundingBox: {\n    get: function () {\n      return this._orientedBoundingBox;\n    },\n  },\n\n  /**\n   * A collection of planes used for the render bounds\n   * @memberof VoxelCylinderShape.prototype\n   * @type {VoxelBoundsCollection}\n   * @readonly\n   * @private\n   */\n  renderBoundPlanes: {\n    get: function () {\n      return this._renderBoundPlanes;\n    },\n  },\n\n  /**\n   * A bounding sphere containing the bounded shape.\n   *\n   * @memberof VoxelCylinderShape.prototype\n   * @type {BoundingSphere}\n   * @readonly\n   * @private\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n\n  /**\n   * A transformation matrix containing the bounded shape.\n   *\n   * @memberof VoxelCylinderShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  boundTransform: {\n    get: function () {\n      return this._boundTransform;\n    },\n  },\n\n  /**\n   * A transformation matrix containing the shape, ignoring the bounds.\n   *\n   * @memberof VoxelCylinderShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  shapeTransform: {\n    get: function () {\n      return this._shapeTransform;\n    },\n  },\n\n  /**\n   * @memberof VoxelCylinderShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderUniforms: {\n    get: function () {\n      return this._shaderUniforms;\n    },\n  },\n\n  /**\n   * @memberof VoxelCylinderShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderDefines: {\n    get: function () {\n      return this._shaderDefines;\n    },\n  },\n\n  /**\n   * The maximum number of intersections against the shape for any ray direction.\n   * @memberof VoxelCylinderShape.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  shaderMaximumIntersectionsLength: {\n    get: function () {\n      return this._shaderMaximumIntersectionsLength;\n    },\n  },\n});\n\nconst scratchScale = new Cartesian3();\nconst scratchClipMinBounds = new Cartesian3();\nconst scratchClipMaxBounds = new Cartesian3();\nconst scratchRenderMinBounds = new Cartesian3();\nconst scratchRenderMaxBounds = new Cartesian3();\nconst scratchTransformPositionWorldToLocal = new Matrix4();\nconst scratchCameraPositionLocal = new Cartesian3();\nconst scratchCameraRadialPosition = new Cartesian2();\n\n/**\n * Update the shape's state.\n * @private\n * @param {Matrix4} modelMatrix The model matrix.\n * @param {Cartesian3} minBounds The minimum bounds.\n * @param {Cartesian3} maxBounds The maximum bounds.\n * @param {Cartesian3} [clipMinBounds] The minimum clip bounds.\n * @param {Cartesian3} [clipMaxBounds] The maximum clip bounds.\n * @returns {boolean} Whether the shape is visible.\n */\nVoxelCylinderShape.prototype.update = function (\n  modelMatrix,\n  minBounds,\n  maxBounds,\n  clipMinBounds,\n  clipMaxBounds,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"modelMatrix\", modelMatrix);\n  Check.typeOf.object(\"minBounds\", minBounds);\n  Check.typeOf.object(\"maxBounds\", maxBounds);\n  //>>includeEnd('debug');\n\n  clipMinBounds = clipMinBounds ?? minBounds.clone(scratchClipMinBounds);\n  clipMaxBounds = clipMaxBounds ?? maxBounds.clone(scratchClipMaxBounds);\n\n  minBounds = Cartesian3.clone(minBounds, this._minBounds);\n  maxBounds = Cartesian3.clone(maxBounds, this._maxBounds);\n\n  const { DefaultMinBounds, DefaultMaxBounds } = VoxelCylinderShape;\n  const defaultAngleRange = DefaultMaxBounds.y - DefaultMinBounds.y; // == 2 * PI\n  const defaultAngleRangeHalf = 0.5 * defaultAngleRange; // == PI\n\n  const epsilonZeroScale = CesiumMath.EPSILON10;\n  const epsilonAngle = CesiumMath.EPSILON10;\n\n  // Clamp the bounds to the valid range\n  minBounds.x = Math.max(0.0, minBounds.x);\n  // TODO: require maxBounds.x >= minBounds.x ?\n  maxBounds.x = Math.max(0.0, maxBounds.x);\n  minBounds.y = CesiumMath.negativePiToPi(minBounds.y);\n  maxBounds.y = CesiumMath.negativePiToPi(maxBounds.y);\n\n  clipMinBounds.y = CesiumMath.negativePiToPi(clipMinBounds.y);\n  clipMaxBounds.y = CesiumMath.negativePiToPi(clipMaxBounds.y);\n\n  // TODO: what does this do with partial volumes crossing the antimeridian?\n  // We could have minBounds.y = +PI/2 and maxBounds.y = -PI/2.\n  // Then clipMinBounds.y = +PI/4 and clipMaxBounds.y = -PI/4.\n  // This maximumByComponent would cancel the clipping.\n  const renderMinBounds = Cartesian3.maximumByComponent(\n    minBounds,\n    clipMinBounds,\n    scratchRenderMinBounds,\n  );\n  const renderMaxBounds = Cartesian3.minimumByComponent(\n    maxBounds,\n    clipMaxBounds,\n    scratchRenderMaxBounds,\n  );\n\n  // Exit early if the shape is not visible.\n  // Note that minAngle may be greater than maxAngle when crossing the 180th meridian.\n\n  // Cylinder is not visible if:\n  // - maxRadius is zero (line)\n  // - minRadius is greater than maxRadius\n  // - minHeight is greater than maxHeight\n  // - scale is 0 for any component (too annoying to reconstruct rotation matrix)\n  const scale = Matrix4.getScale(modelMatrix, scratchScale);\n  if (\n    renderMaxBounds.x === 0.0 ||\n    renderMinBounds.x > renderMaxBounds.x ||\n    renderMinBounds.z > renderMaxBounds.z ||\n    CesiumMath.equalsEpsilon(scale.x, 0.0, undefined, epsilonZeroScale) ||\n    CesiumMath.equalsEpsilon(scale.y, 0.0, undefined, epsilonZeroScale) ||\n    CesiumMath.equalsEpsilon(scale.z, 0.0, undefined, epsilonZeroScale)\n  ) {\n    return false;\n  }\n\n  // Update the render bounds planes\n  const renderBoundPlanes = this._renderBoundPlanes;\n  renderBoundPlanes.get(0).distance = renderMinBounds.z;\n  renderBoundPlanes.get(1).distance = -renderMaxBounds.z;\n\n  this._shapeTransform = Matrix4.clone(modelMatrix, this._shapeTransform);\n\n  this._orientedBoundingBox = getCylinderChunkObb(\n    renderMinBounds,\n    renderMaxBounds,\n    this._shapeTransform,\n    this._orientedBoundingBox,\n  );\n\n  this._boundTransform = Matrix4.fromRotationTranslation(\n    this._orientedBoundingBox.halfAxes,\n    this._orientedBoundingBox.center,\n    this._boundTransform,\n  );\n\n  this._boundingSphere = BoundingSphere.fromOrientedBoundingBox(\n    this._orientedBoundingBox,\n    this._boundingSphere,\n  );\n\n  const shapeIsAngleReversed = maxBounds.y < minBounds.y;\n  const shapeAngleRange =\n    maxBounds.y - minBounds.y + shapeIsAngleReversed * defaultAngleRange;\n\n  const renderIsAngleReversed = renderMaxBounds.y < renderMinBounds.y;\n  const renderAngleRange =\n    renderMaxBounds.y -\n    renderMinBounds.y +\n    renderIsAngleReversed * defaultAngleRange;\n  const renderIsAngleRegular =\n    renderAngleRange >= defaultAngleRangeHalf - epsilonAngle &&\n    renderAngleRange < defaultAngleRange - epsilonAngle;\n  const renderIsAngleFlipped =\n    renderAngleRange > epsilonAngle &&\n    renderAngleRange < defaultAngleRangeHalf - epsilonAngle;\n  const renderIsAngleRangeZero = renderAngleRange <= epsilonAngle;\n  const renderHasAngle =\n    renderIsAngleRegular || renderIsAngleFlipped || renderIsAngleRangeZero;\n\n  const shaderUniforms = this._shaderUniforms;\n  const shaderDefines = this._shaderDefines;\n\n  // To keep things simple, clear the defines every time\n  for (const key in shaderDefines) {\n    if (shaderDefines.hasOwnProperty(key)) {\n      shaderDefines[key] = undefined;\n    }\n  }\n\n  // Keep track of how many intersections there are going to be.\n  let intersectionCount = 0;\n\n  shaderDefines[\"CYLINDER_INTERSECTION_INDEX_RADIUS_MAX\"] = intersectionCount;\n  intersectionCount += 1;\n\n  if (shapeAngleRange < defaultAngleRange - epsilonAngle) {\n    shaderDefines[\"CYLINDER_HAS_SHAPE_BOUNDS_ANGLE\"] = true;\n  }\n\n  if (renderMinBounds.x !== DefaultMinBounds.x) {\n    shaderDefines[\"CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN\"] = true;\n    shaderDefines[\"CYLINDER_INTERSECTION_INDEX_RADIUS_MIN\"] = intersectionCount;\n    intersectionCount += 1;\n  }\n  shaderUniforms.cylinderRenderRadiusMinMax = Cartesian2.fromElements(\n    renderMinBounds.x,\n    renderMaxBounds.x,\n    shaderUniforms.cylinderRenderRadiusMinMax,\n  );\n\n  if (renderMinBounds.x === renderMaxBounds.x) {\n    shaderDefines[\"CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT\"] = true;\n  }\n\n  const radiusRange = maxBounds.x - minBounds.x;\n  let radialScale = 0.0;\n  let radialOffset = 1.0;\n  if (radiusRange !== 0.0) {\n    radialScale = 1.0 / radiusRange;\n    radialOffset = -minBounds.x * radialScale;\n  }\n  shaderUniforms.cylinderLocalToShapeUvRadius = Cartesian2.fromElements(\n    radialScale,\n    radialOffset,\n    shaderUniforms.cylinderLocalToShapeUvRadius,\n  );\n\n  const heightRange = maxBounds.z - minBounds.z; // Default 2.0\n  let heightScale = 0.0;\n  let heightOffset = 1.0;\n  if (heightRange !== 0.0) {\n    heightScale = 1.0 / heightRange;\n    heightOffset = -minBounds.z * heightScale;\n  }\n  shaderUniforms.cylinderLocalToShapeUvHeight = Cartesian2.fromElements(\n    heightScale,\n    heightOffset,\n    shaderUniforms.cylinderLocalToShapeUvHeight,\n  );\n\n  if (renderHasAngle) {\n    shaderDefines[\"CYLINDER_HAS_RENDER_BOUNDS_ANGLE\"] = true;\n    shaderDefines[\"CYLINDER_INTERSECTION_INDEX_ANGLE\"] = intersectionCount;\n\n    if (renderIsAngleRegular) {\n      shaderDefines[\"CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF\"] = true;\n      intersectionCount += 1;\n    } else if (renderIsAngleFlipped) {\n      shaderDefines[\"CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF\"] = true;\n      intersectionCount += 2;\n    } else if (renderIsAngleRangeZero) {\n      shaderDefines[\"CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\"] = true;\n      intersectionCount += 2;\n    }\n\n    shaderUniforms.cylinderRenderAngleMinMax = Cartesian2.fromElements(\n      renderMinBounds.y,\n      renderMaxBounds.y,\n      shaderUniforms.cylinderRenderAngleMinMax,\n    );\n  }\n\n  const uvMinAngle = (minBounds.y - DefaultMinBounds.y) / defaultAngleRange;\n  const uvMaxAngle = (maxBounds.y - DefaultMinBounds.y) / defaultAngleRange;\n  const uvAngleRangeZero = 1.0 - shapeAngleRange / defaultAngleRange;\n\n  // Translate the origin of UV angles (in [0,1]) to the center of the unoccupied space\n  const uvAngleRangeOrigin = (uvMaxAngle + 0.5 * uvAngleRangeZero) % 1.0;\n  shaderUniforms.cylinderShapeUvAngleRangeOrigin = uvAngleRangeOrigin;\n\n  if (shapeAngleRange <= epsilonAngle) {\n    shaderUniforms.cylinderLocalToShapeUvAngle = Cartesian2.fromElements(\n      0.0,\n      1.0,\n      shaderUniforms.cylinderLocalToShapeUvAngle,\n    );\n  } else {\n    const scale = defaultAngleRange / shapeAngleRange;\n    const shiftedMinAngle = uvMinAngle - uvAngleRangeOrigin;\n    const offset = -scale * (shiftedMinAngle - Math.floor(shiftedMinAngle));\n    shaderUniforms.cylinderLocalToShapeUvAngle = Cartesian2.fromElements(\n      scale,\n      offset,\n      shaderUniforms.cylinderLocalToShapeUvAngle,\n    );\n  }\n\n  this._shaderMaximumIntersectionsLength = intersectionCount;\n\n  return true;\n};\n\nconst scratchRotateRtuToLocal = new Matrix3();\nconst scratchRtuRotation = new Matrix3();\nconst scratchTransformPositionViewToLocal = new Matrix4();\n\n/**\n * Update any view-dependent transforms.\n * @private\n * @param {FrameState} frameState The frame state.\n */\nVoxelCylinderShape.prototype.updateViewTransforms = function (frameState) {\n  const shaderUniforms = this._shaderUniforms;\n  // 1. Update camera position in cylindrical coordinates\n  const transformPositionWorldToLocal = Matrix4.inverse(\n    this._shapeTransform,\n    scratchTransformPositionWorldToLocal,\n  );\n  const cameraPositionLocal = Matrix4.multiplyByPoint(\n    transformPositionWorldToLocal,\n    frameState.camera.positionWC,\n    scratchCameraPositionLocal,\n  );\n  shaderUniforms.cameraShapePosition = Cartesian3.fromElements(\n    Cartesian2.magnitude(cameraPositionLocal),\n    Math.atan2(cameraPositionLocal.y, cameraPositionLocal.x),\n    cameraPositionLocal.z,\n    shaderUniforms.cameraShapePosition,\n  );\n  // 2. Find radial, tangent, and up components at camera position\n  const cameraRadialDirection = Cartesian2.normalize(\n    Cartesian2.fromCartesian3(cameraPositionLocal, scratchCameraRadialPosition),\n    scratchCameraRadialPosition,\n  );\n  // As row vectors, the radial, tangent, and up vectors constitute a rotation matrix from local to RTU.\n  const rotateLocalToRtu = Matrix3.fromRowMajorArray(\n    [\n      cameraRadialDirection.x,\n      cameraRadialDirection.y,\n      0.0,\n      -cameraRadialDirection.y,\n      cameraRadialDirection.x,\n      0.0,\n      0.0,\n      0.0,\n      1.0,\n    ],\n    scratchRotateRtuToLocal,\n  );\n  // 3. Get rotation from eye to local coordinates\n  const transformPositionViewToWorld =\n    frameState.context.uniformState.inverseView;\n  const transformPositionViewToLocal = Matrix4.multiplyTransformation(\n    transformPositionWorldToLocal,\n    transformPositionViewToWorld,\n    scratchTransformPositionViewToLocal,\n  );\n  const transformDirectionViewToLocal = Matrix4.getMatrix3(\n    transformPositionViewToLocal,\n    scratchRtuRotation,\n  );\n  // 4. Multiply to get rotation from eye to RTU coordinates\n  shaderUniforms.cylinderEcToRadialTangentUp = Matrix3.multiply(\n    rotateLocalToRtu,\n    transformDirectionViewToLocal,\n    shaderUniforms.cylinderEcToRadialTangentUp,\n  );\n};\n\n/**\n * Convert a UV coordinate to the shape's UV space.\n * @private\n * @param {Cartesian3} positionLocal The local coordinate to convert.\n * @param {Cartesian3} result The Cartesian3 to store the result in.\n * @returns {Cartesian3} The converted UV coordinate.\n */\nVoxelCylinderShape.prototype.convertLocalToShapeUvSpace = function (\n  positionLocal,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"positionLocal\", positionLocal);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  let radius = Math.hypot(positionLocal.x, positionLocal.y);\n  let angle = Math.atan2(positionLocal.y, positionLocal.x);\n  let height = positionLocal.z;\n\n  const {\n    cylinderLocalToShapeUvRadius,\n    cylinderLocalToShapeUvAngle,\n    cylinderShapeUvAngleRangeOrigin,\n    cylinderLocalToShapeUvHeight,\n  } = this._shaderUniforms;\n\n  radius =\n    radius * cylinderLocalToShapeUvRadius.x + cylinderLocalToShapeUvRadius.y;\n\n  // Convert angle to a \"UV\" in [0,1] with 0 defined at the center of the unoccupied space.\n  angle = (angle + Math.PI) / (2.0 * Math.PI);\n  angle -= cylinderShapeUvAngleRangeOrigin;\n  angle = angle - Math.floor(angle);\n  // Scale and shift so [0,1] covers the occupied space.\n  angle = angle * cylinderLocalToShapeUvAngle.x + cylinderLocalToShapeUvAngle.y;\n\n  height =\n    height * cylinderLocalToShapeUvHeight.x + cylinderLocalToShapeUvHeight.y;\n\n  return Cartesian3.fromElements(radius, angle, height, result);\n};\n\nconst scratchMinBounds = new Cartesian3();\nconst scratchMaxBounds = new Cartesian3();\n\n/**\n * Computes an oriented bounding box for a specified tile.\n * @private\n * @param {number} tileLevel The tile's level.\n * @param {number} tileX The tile's x coordinate.\n * @param {number} tileY The tile's y coordinate.\n * @param {number} tileZ The tile's z coordinate.\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified tile\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelCylinderShape.prototype.computeOrientedBoundingBoxForTile = function (\n  tileLevel,\n  tileX,\n  tileY,\n  tileZ,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"tileLevel\", tileLevel);\n  Check.typeOf.number(\"tileX\", tileX);\n  Check.typeOf.number(\"tileY\", tileY);\n  Check.typeOf.number(\"tileZ\", tileZ);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const minBounds = this._minBounds;\n  const maxBounds = this._maxBounds;\n\n  const sizeAtLevel = 1.0 / Math.pow(2.0, tileLevel);\n\n  const tileMinBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, tileX * sizeAtLevel),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, tileY * sizeAtLevel),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, tileZ * sizeAtLevel),\n    scratchMinBounds,\n  );\n  const tileMaxBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, (tileX + 1) * sizeAtLevel),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, (tileY + 1) * sizeAtLevel),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, (tileZ + 1) * sizeAtLevel),\n    scratchMaxBounds,\n  );\n\n  return getCylinderChunkObb(\n    tileMinBounds,\n    tileMaxBounds,\n    this._shapeTransform,\n    result,\n  );\n};\n\nconst sampleSizeScratch = new Cartesian3();\n\n/**\n * Computes an oriented bounding box for a specified sample within a specified tile.\n * @private\n * @param {SpatialNode} spatialNode The spatial node containing the sample\n * @param {Cartesian3} tileDimensions The size of the tile in number of samples, before padding\n * @param {Cartesian3} tileUv The sample coordinate within the tile\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified sample\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelCylinderShape.prototype.computeOrientedBoundingBoxForSample = function (\n  spatialNode,\n  tileDimensions,\n  tileUv,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"spatialNode\", spatialNode);\n  Check.typeOf.object(\"tileDimensions\", tileDimensions);\n  Check.typeOf.object(\"tileUv\", tileUv);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const tileSizeAtLevel = 1.0 / Math.pow(2.0, spatialNode.level);\n  const sampleSize = Cartesian3.divideComponents(\n    Cartesian3.ONE,\n    tileDimensions,\n    sampleSizeScratch,\n  );\n  const sampleSizeAtLevel = Cartesian3.multiplyByScalar(\n    sampleSize,\n    tileSizeAtLevel,\n    sampleSizeScratch,\n  );\n\n  const minLerp = Cartesian3.multiplyByScalar(\n    Cartesian3.fromElements(\n      spatialNode.x + tileUv.x,\n      spatialNode.y + tileUv.y,\n      spatialNode.z + tileUv.z,\n      scratchMinBounds,\n    ),\n    tileSizeAtLevel,\n    scratchMinBounds,\n  );\n  const maxLerp = Cartesian3.add(minLerp, sampleSizeAtLevel, scratchMaxBounds);\n\n  const minBounds = this._minBounds;\n  const maxBounds = this._maxBounds;\n\n  const sampleMinBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, minLerp.x),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, minLerp.y),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, minLerp.z),\n    scratchMinBounds,\n  );\n  const sampleMaxBounds = Cartesian3.fromElements(\n    CesiumMath.lerp(minBounds.x, maxBounds.x, maxLerp.x),\n    CesiumMath.lerp(minBounds.y, maxBounds.y, maxLerp.y),\n    CesiumMath.lerp(minBounds.z, maxBounds.z, maxLerp.z),\n    scratchMaxBounds,\n  );\n\n  return getCylinderChunkObb(\n    sampleMinBounds,\n    sampleMaxBounds,\n    this._shapeTransform,\n    result,\n  );\n};\n\n/**\n * Defines the minimum bounds of the shape. Corresponds to minimum radius, angle, and height.\n *\n * @type {Cartesian3}\n * @constant\n * @readonly\n *\n * @private\n */\nVoxelCylinderShape.DefaultMinBounds = Object.freeze(\n  new Cartesian3(0.0, -CesiumMath.PI, -1.0),\n);\n\n/**\n * Defines the maximum bounds of the shape. Corresponds to maximum radius, angle, height.\n *\n * @type {Cartesian3}\n * @constant\n * @readonly\n *\n * @private\n */\nVoxelCylinderShape.DefaultMaxBounds = Object.freeze(\n  new Cartesian3(1.0, +CesiumMath.PI, +1.0),\n);\n\nconst maxTestAngles = 5;\nconst scratchTestAngles = new Array(maxTestAngles);\nconst scratchTranslation = new Cartesian3();\nconst scratchRotation = new Matrix3();\nconst scratchTranslationMatrix = new Matrix4();\nconst scratchRotationMatrix = new Matrix4();\nconst scratchScaleMatrix = new Matrix4();\nconst scratchMatrix = new Matrix4();\nconst scratchColumn0 = new Cartesian3();\nconst scratchColumn1 = new Cartesian3();\nconst scratchColumn2 = new Cartesian3();\nconst scratchCorners = new Array(8);\nfor (let i = 0; i < 8; i++) {\n  scratchCorners[i] = new Cartesian3();\n}\n\nfunction orthogonal(a, b, epsilon) {\n  return Math.abs(Cartesian4.dot(a, b)) < epsilon;\n}\n\nfunction isValidOrientedBoundingBoxTransformation(matrix) {\n  const column0 = Matrix4.getColumn(matrix, 0, scratchColumn0);\n  const column1 = Matrix4.getColumn(matrix, 1, scratchColumn1);\n  const column2 = Matrix4.getColumn(matrix, 2, scratchColumn2);\n\n  const epsilon = CesiumMath.EPSILON4;\n\n  return (\n    orthogonal(column0, column1, epsilon) &&\n    orthogonal(column1, column2, epsilon)\n  );\n}\n\nfunction computeLooseOrientedBoundingBox(matrix, result) {\n  const corners = scratchCorners;\n  Cartesian3.fromElements(-0.5, -0.5, -0.5, corners[0]);\n  Cartesian3.fromElements(-0.5, -0.5, 0.5, corners[1]);\n  Cartesian3.fromElements(-0.5, 0.5, -0.5, corners[2]);\n  Cartesian3.fromElements(-0.5, 0.5, 0.5, corners[3]);\n  Cartesian3.fromElements(0.5, -0.5, -0.5, corners[4]);\n  Cartesian3.fromElements(0.5, -0.5, 0.5, corners[5]);\n  Cartesian3.fromElements(0.5, 0.5, -0.5, corners[6]);\n  Cartesian3.fromElements(0.5, 0.5, 0.5, corners[7]);\n\n  for (let i = 0; i < 8; ++i) {\n    Matrix4.multiplyByPoint(matrix, corners[i], corners[i]);\n  }\n\n  return OrientedBoundingBox.fromPoints(corners, result);\n}\n\nconst scratchBoxScale = new Cartesian3();\n/**\n * Computes an {@link OrientedBoundingBox} for a subregion of the shape.\n *\n * @function\n *\n * @param {Cartesian3} chunkMinBounds The minimum bounds of the subregion.\n * @param {Cartesian3} chunkMaxBounds The maximum bounds of the subregion.\n * @param {Matrix4} matrix The matrix to transform the points.\n * @param {OrientedBoundingBox} result The object onto which to store the result.\n * @returns {OrientedBoundingBox} The oriented bounding box that contains this subregion.\n *\n * @private\n */\nfunction getCylinderChunkObb(chunkMinBounds, chunkMaxBounds, matrix, result) {\n  const radiusStart = chunkMinBounds.x;\n  const radiusEnd = chunkMaxBounds.x;\n  const angleStart = chunkMinBounds.y;\n  const angleEnd =\n    chunkMaxBounds.y < angleStart\n      ? chunkMaxBounds.y + CesiumMath.TWO_PI\n      : chunkMaxBounds.y;\n  const heightStart = chunkMinBounds.z;\n  const heightEnd = chunkMaxBounds.z;\n\n  const angleRange = angleEnd - angleStart;\n  const angleMid = angleStart + angleRange * 0.5;\n\n  const testAngles = scratchTestAngles;\n  let testAngleCount = 0;\n\n  testAngles[testAngleCount++] = angleStart;\n  testAngles[testAngleCount++] = angleEnd;\n  testAngles[testAngleCount++] = angleMid;\n\n  if (angleRange > CesiumMath.PI) {\n    testAngles[testAngleCount++] = angleMid - CesiumMath.PI_OVER_TWO;\n    testAngles[testAngleCount++] = angleMid + CesiumMath.PI_OVER_TWO;\n  }\n\n  // Find bounding box in shape space relative to angleMid\n  let minX = Number.POSITIVE_INFINITY;\n  let minY = Number.POSITIVE_INFINITY;\n  let maxX = Number.NEGATIVE_INFINITY;\n  let maxY = Number.NEGATIVE_INFINITY;\n\n  for (let i = 0; i < testAngleCount; ++i) {\n    const angle = testAngles[i] - angleMid;\n    const cosAngle = Math.cos(angle);\n    const sinAngle = Math.sin(angle);\n    const x1 = cosAngle * radiusStart;\n    const y1 = sinAngle * radiusStart;\n    const x2 = cosAngle * radiusEnd;\n    const y2 = sinAngle * radiusEnd;\n\n    minX = Math.min(minX, x1, x2);\n    minY = Math.min(minY, y1, y2);\n    maxX = Math.max(maxX, x1, x2);\n    maxY = Math.max(maxY, y1, y2);\n  }\n\n  const extentX = maxX - minX;\n  const extentY = maxY - minY;\n  const extentZ = heightEnd - heightStart;\n\n  const centerX = (minX + maxX) * 0.5;\n  const centerY = (minY + maxY) * 0.5;\n  const centerZ = (heightStart + heightEnd) * 0.5;\n\n  const translation = Cartesian3.fromElements(\n    centerX,\n    centerY,\n    centerZ,\n    scratchTranslation,\n  );\n\n  const rotation = Matrix3.fromRotationZ(angleMid, scratchRotation);\n\n  const scale = Cartesian3.fromElements(\n    extentX,\n    extentY,\n    extentZ,\n    scratchBoxScale,\n  );\n\n  const scaleMatrix = Matrix4.fromScale(scale, scratchScaleMatrix);\n  const rotationMatrix = Matrix4.fromRotation(rotation, scratchRotationMatrix);\n  const translationMatrix = Matrix4.fromTranslation(\n    translation,\n    scratchTranslationMatrix,\n  );\n\n  // Shape space matrix = R * T * S\n  const localMatrix = Matrix4.multiplyTransformation(\n    rotationMatrix,\n    Matrix4.multiplyTransformation(\n      translationMatrix,\n      scaleMatrix,\n      scratchMatrix,\n    ),\n    scratchMatrix,\n  );\n\n  const globalMatrix = Matrix4.multiplyTransformation(\n    matrix,\n    localMatrix,\n    scratchMatrix,\n  );\n\n  if (!isValidOrientedBoundingBoxTransformation(globalMatrix)) {\n    return computeLooseOrientedBoundingBox(globalMatrix, result);\n  }\n\n  return OrientedBoundingBox.fromTransformation(globalMatrix, result);\n}\n\nexport default VoxelCylinderShape;\n","import defined from \"../Core/defined.js\";\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Check from \"../Core/Check.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport Transforms from \"../Core/Transforms.js\";\n\n/**\n * An ellipsoid {@link VoxelShape}.\n *\n * @alias VoxelEllipsoidShape\n * @constructor\n *\n * @see VoxelShape\n * @see VoxelBoxShape\n * @see VoxelCylinderShape\n * @see VoxelShapeType\n *\n * @private\n */\nfunction VoxelEllipsoidShape() {\n  this._orientedBoundingBox = new OrientedBoundingBox();\n  this._boundingSphere = new BoundingSphere();\n  this._boundTransform = new Matrix4();\n  this._shapeTransform = new Matrix4();\n\n  /**\n   * @type {Rectangle}\n   * @private\n   */\n  this._rectangle = new Rectangle();\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._minimumHeight = VoxelEllipsoidShape.DefaultMinBounds.z;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._maximumHeight = VoxelEllipsoidShape.DefaultMaxBounds.z;\n\n  /**\n   * @type {Ellipsoid}\n   * @private\n   */\n  this._ellipsoid = new Ellipsoid();\n\n  /**\n   * @type {Cartesian3}\n   * @private\n   */\n  this._translation = new Cartesian3();\n\n  /**\n   * @type {Matrix3}\n   * @private\n   */\n  this._rotation = new Matrix3();\n\n  this._shaderUniforms = {\n    cameraPositionCartographic: new Cartesian3(),\n    ellipsoidEcToEastNorthUp: new Matrix3(),\n    ellipsoidRadii: new Cartesian3(),\n    eccentricitySquared: 0.0,\n    evoluteScale: new Cartesian2(),\n    ellipsoidCurvatureAtLatitude: new Cartesian2(),\n    ellipsoidInverseRadiiSquared: new Cartesian3(),\n    ellipsoidRenderLongitudeMinMax: new Cartesian2(),\n    ellipsoidShapeUvLongitudeRangeOrigin: 0.0,\n    ellipsoidShapeUvLongitudeMinMaxMid: new Cartesian3(),\n    ellipsoidLocalToShapeUvLongitude: new Cartesian2(),\n    ellipsoidLocalToShapeUvLatitude: new Cartesian2(),\n    ellipsoidRenderLatitudeSinMinMax: new Cartesian2(),\n    ellipsoidInverseHeightDifference: 0.0,\n    clipMinMaxHeight: new Cartesian2(),\n  };\n\n  this._shaderDefines = {\n    ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY: undefined,\n    ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE: undefined,\n    ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF: undefined,\n    ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF: undefined,\n    ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE: undefined,\n    ELLIPSOID_INTERSECTION_INDEX_LONGITUDE: undefined,\n    ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX: undefined,\n    ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN: undefined,\n    ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX: undefined,\n    ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN: undefined,\n  };\n\n  this._shaderMaximumIntersectionsLength = 0; // not known until update\n}\n\nObject.defineProperties(VoxelEllipsoidShape.prototype, {\n  /**\n   * An oriented bounding box containing the bounded shape.\n   *\n   * @memberof VoxelEllipsoidShape.prototype\n   * @type {OrientedBoundingBox}\n   * @readonly\n   * @private\n   */\n  orientedBoundingBox: {\n    get: function () {\n      return this._orientedBoundingBox;\n    },\n  },\n\n  /**\n   * A bounding sphere containing the bounded shape.\n   *\n   * @memberof VoxelEllipsoidShape.prototype\n   * @type {BoundingSphere}\n   * @readonly\n   * @private\n   */\n  boundingSphere: {\n    get: function () {\n      return this._boundingSphere;\n    },\n  },\n\n  /**\n   * A transformation matrix containing the bounded shape.\n   *\n   * @memberof VoxelEllipsoidShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  boundTransform: {\n    get: function () {\n      return this._boundTransform;\n    },\n  },\n\n  /**\n   * A transformation matrix containing the shape, ignoring the bounds.\n   *\n   * @memberof VoxelEllipsoidShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  shapeTransform: {\n    get: function () {\n      return this._shapeTransform;\n    },\n  },\n\n  /**\n   * @memberof VoxelEllipsoidShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderUniforms: {\n    get: function () {\n      return this._shaderUniforms;\n    },\n  },\n\n  /**\n   * @memberof VoxelEllipsoidShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderDefines: {\n    get: function () {\n      return this._shaderDefines;\n    },\n  },\n\n  /**\n   * The maximum number of intersections against the shape for any ray direction.\n   * @memberof VoxelEllipsoidShape.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  shaderMaximumIntersectionsLength: {\n    get: function () {\n      return this._shaderMaximumIntersectionsLength;\n    },\n  },\n});\n\nconst scratchActualMinBounds = new Cartesian3();\nconst scratchShapeMinBounds = new Cartesian3();\nconst scratchShapeMaxBounds = new Cartesian3();\nconst scratchClipMinBounds = new Cartesian3();\nconst scratchClipMaxBounds = new Cartesian3();\nconst scratchRenderMinBounds = new Cartesian3();\nconst scratchRenderMaxBounds = new Cartesian3();\nconst scratchScale = new Cartesian3();\nconst scratchShapeOuterExtent = new Cartesian3();\nconst scratchRenderOuterExtent = new Cartesian3();\nconst scratchRenderRectangle = new Rectangle();\n\n/**\n * Update the shape's state.\n * @private\n * @param {Matrix4} modelMatrix The model matrix.\n * @param {Cartesian3} minBounds The minimum bounds.\n * @param {Cartesian3} maxBounds The maximum bounds.\n * @param {Cartesian3} [clipMinBounds=VoxelEllipsoidShape.DefaultMinBounds] The minimum clip bounds.\n * @param {Cartesian3} [clipMaxBounds=VoxelEllipsoidShape.DefaultMaxBounds] The maximum clip bounds.\n * @returns {boolean} Whether the shape is visible.\n */\nVoxelEllipsoidShape.prototype.update = function (\n  modelMatrix,\n  minBounds,\n  maxBounds,\n  clipMinBounds,\n  clipMaxBounds,\n) {\n  const { DefaultMinBounds, DefaultMaxBounds } = VoxelEllipsoidShape;\n  clipMinBounds = clipMinBounds ?? DefaultMinBounds;\n  clipMaxBounds = clipMaxBounds ?? DefaultMaxBounds;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"modelMatrix\", modelMatrix);\n  Check.typeOf.object(\"minBounds\", minBounds);\n  Check.typeOf.object(\"maxBounds\", maxBounds);\n  //>>includeEnd('debug');\n\n  const epsilonZeroScale = CesiumMath.EPSILON10;\n  const epsilonLongitudeDiscontinuity = CesiumMath.EPSILON3; // 0.001 radians = 0.05729578 degrees\n  const epsilonLongitude = CesiumMath.EPSILON10;\n  const epsilonLatitude = CesiumMath.EPSILON10;\n  const epsilonLatitudeFlat = CesiumMath.EPSILON3; // 0.001 radians = 0.05729578 degrees\n\n  // Don't let the height go below the center of the ellipsoid.\n  const radii = Matrix4.getScale(modelMatrix, scratchScale);\n  const actualMinBounds = Cartesian3.clone(\n    DefaultMinBounds,\n    scratchActualMinBounds,\n  );\n  actualMinBounds.z = -Cartesian3.minimumComponent(radii);\n\n  const shapeMinBounds = Cartesian3.clamp(\n    minBounds,\n    actualMinBounds,\n    DefaultMaxBounds,\n    scratchShapeMinBounds,\n  );\n  const shapeMaxBounds = Cartesian3.clamp(\n    maxBounds,\n    actualMinBounds,\n    DefaultMaxBounds,\n    scratchShapeMaxBounds,\n  );\n  const clampedClipMinBounds = Cartesian3.clamp(\n    clipMinBounds,\n    actualMinBounds,\n    DefaultMaxBounds,\n    scratchClipMinBounds,\n  );\n  const clampedClipMaxBounds = Cartesian3.clamp(\n    clipMaxBounds,\n    actualMinBounds,\n    DefaultMaxBounds,\n    scratchClipMaxBounds,\n  );\n  const renderMinBounds = Cartesian3.maximumByComponent(\n    shapeMinBounds,\n    clampedClipMinBounds,\n    scratchRenderMinBounds,\n  );\n  const renderMaxBounds = Cartesian3.minimumByComponent(\n    shapeMaxBounds,\n    clampedClipMaxBounds,\n    scratchRenderMaxBounds,\n  );\n\n  // Compute the farthest a point can be from the center of the ellipsoid.\n  const shapeOuterExtent = Cartesian3.add(\n    radii,\n    Cartesian3.fromElements(\n      shapeMaxBounds.z,\n      shapeMaxBounds.z,\n      shapeMaxBounds.z,\n      scratchShapeOuterExtent,\n    ),\n    scratchShapeOuterExtent,\n  );\n\n  const renderOuterExtent = Cartesian3.add(\n    radii,\n    Cartesian3.fromElements(\n      renderMaxBounds.z,\n      renderMaxBounds.z,\n      renderMaxBounds.z,\n      scratchRenderOuterExtent,\n    ),\n    scratchRenderOuterExtent,\n  );\n\n  // Exit early if the shape is not visible.\n  // Note that minLongitude may be greater than maxLongitude when crossing the 180th meridian.\n  if (\n    renderMinBounds.y > renderMaxBounds.y ||\n    renderMinBounds.y === DefaultMaxBounds.y ||\n    renderMaxBounds.y === DefaultMinBounds.y ||\n    renderMinBounds.z > renderMaxBounds.z ||\n    CesiumMath.equalsEpsilon(\n      renderOuterExtent,\n      Cartesian3.ZERO,\n      undefined,\n      epsilonZeroScale,\n    )\n  ) {\n    return false;\n  }\n\n  this._rectangle = Rectangle.fromRadians(\n    shapeMinBounds.x,\n    shapeMinBounds.y,\n    shapeMaxBounds.x,\n    shapeMaxBounds.y,\n  );\n  this._translation = Matrix4.getTranslation(modelMatrix, this._translation);\n  this._rotation = Matrix4.getRotation(modelMatrix, this._rotation);\n  this._ellipsoid = Ellipsoid.fromCartesian3(radii, this._ellipsoid);\n  this._minimumHeight = shapeMinBounds.z;\n  this._maximumHeight = shapeMaxBounds.z;\n\n  const renderRectangle = Rectangle.fromRadians(\n    renderMinBounds.x,\n    renderMinBounds.y,\n    renderMaxBounds.x,\n    renderMaxBounds.y,\n    scratchRenderRectangle,\n  );\n\n  this._orientedBoundingBox = getEllipsoidChunkObb(\n    renderRectangle,\n    renderMinBounds.z,\n    renderMaxBounds.z,\n    this._ellipsoid,\n    this._translation,\n    this._rotation,\n    this._orientedBoundingBox,\n  );\n\n  this._shapeTransform = Matrix4.fromRotationTranslation(\n    this._rotation,\n    this._translation,\n    this._shapeTransform,\n  );\n\n  this._boundTransform = Matrix4.fromRotationTranslation(\n    this._orientedBoundingBox.halfAxes,\n    this._orientedBoundingBox.center,\n    this._boundTransform,\n  );\n\n  this._boundingSphere = BoundingSphere.fromOrientedBoundingBox(\n    this._orientedBoundingBox,\n    this._boundingSphere,\n  );\n\n  // Longitude\n  const defaultLongitudeRange = DefaultMaxBounds.x - DefaultMinBounds.x;\n  const defaultLongitudeRangeHalf = 0.5 * defaultLongitudeRange;\n  const renderIsLongitudeReversed = renderMaxBounds.x < renderMinBounds.x;\n  const renderLongitudeRange =\n    renderMaxBounds.x -\n    renderMinBounds.x +\n    renderIsLongitudeReversed * defaultLongitudeRange;\n  const renderIsLongitudeRangeZero = renderLongitudeRange <= epsilonLongitude;\n  const renderIsLongitudeRangeUnderHalf =\n    renderLongitudeRange >= defaultLongitudeRangeHalf - epsilonLongitude &&\n    renderLongitudeRange < defaultLongitudeRange - epsilonLongitude;\n  const renderIsLongitudeRangeOverHalf =\n    renderLongitudeRange > epsilonLongitude &&\n    renderLongitudeRange < defaultLongitudeRangeHalf - epsilonLongitude;\n  const renderHasLongitude =\n    renderIsLongitudeRangeZero ||\n    renderIsLongitudeRangeUnderHalf ||\n    renderIsLongitudeRangeOverHalf;\n\n  const shapeIsLongitudeReversed = shapeMaxBounds.x < shapeMinBounds.x;\n  const shapeLongitudeRange =\n    shapeMaxBounds.x -\n    shapeMinBounds.x +\n    shapeIsLongitudeReversed * defaultLongitudeRange;\n  const shapeIsLongitudeRangeUnderHalf =\n    shapeLongitudeRange > defaultLongitudeRangeHalf + epsilonLongitude &&\n    shapeLongitudeRange < defaultLongitudeRange - epsilonLongitude;\n  const shapeIsLongitudeRangeHalf =\n    shapeLongitudeRange >= defaultLongitudeRangeHalf - epsilonLongitude &&\n    shapeLongitudeRange <= defaultLongitudeRangeHalf + epsilonLongitude;\n  const shapeIsLongitudeRangeOverHalf =\n    shapeLongitudeRange < defaultLongitudeRangeHalf - epsilonLongitude;\n  const shapeHasLongitude =\n    shapeIsLongitudeRangeUnderHalf ||\n    shapeIsLongitudeRangeHalf ||\n    shapeIsLongitudeRangeOverHalf;\n\n  // Latitude\n  const renderIsLatitudeMaxUnderHalf = renderMaxBounds.y < -epsilonLatitudeFlat;\n  const renderIsLatitudeMaxHalf =\n    renderMaxBounds.y >= -epsilonLatitudeFlat &&\n    renderMaxBounds.y <= +epsilonLatitudeFlat;\n  const renderIsLatitudeMaxOverHalf =\n    renderMaxBounds.y > +epsilonLatitudeFlat &&\n    renderMaxBounds.y < DefaultMaxBounds.y - epsilonLatitude;\n  const renderHasLatitudeMax =\n    renderIsLatitudeMaxUnderHalf ||\n    renderIsLatitudeMaxHalf ||\n    renderIsLatitudeMaxOverHalf;\n  const renderIsLatitudeMinUnderHalf =\n    renderMinBounds.y > DefaultMinBounds.y + epsilonLatitude &&\n    renderMinBounds.y < -epsilonLatitudeFlat;\n  const renderIsLatitudeMinHalf =\n    renderMinBounds.y >= -epsilonLatitudeFlat &&\n    renderMinBounds.y <= +epsilonLatitudeFlat;\n  const renderIsLatitudeMinOverHalf = renderMinBounds.y > +epsilonLatitudeFlat;\n  const renderHasLatitudeMin =\n    renderIsLatitudeMinUnderHalf ||\n    renderIsLatitudeMinHalf ||\n    renderIsLatitudeMinOverHalf;\n  const renderHasLatitude = renderHasLatitudeMax || renderHasLatitudeMin;\n\n  const shapeLatitudeRange = shapeMaxBounds.y - shapeMinBounds.y;\n  const shapeIsLatitudeMaxUnderHalf = shapeMaxBounds.y < -epsilonLatitudeFlat;\n  const shapeIsLatitudeMaxHalf =\n    shapeMaxBounds.y >= -epsilonLatitudeFlat &&\n    shapeMaxBounds.y <= +epsilonLatitudeFlat;\n  const shapeIsLatitudeMaxOverHalf =\n    shapeMaxBounds.y > +epsilonLatitudeFlat &&\n    shapeMaxBounds.y < DefaultMaxBounds.y - epsilonLatitude;\n  const shapeHasLatitudeMax =\n    shapeIsLatitudeMaxUnderHalf ||\n    shapeIsLatitudeMaxHalf ||\n    shapeIsLatitudeMaxOverHalf;\n  const shapeIsLatitudeMinUnderHalf =\n    shapeMinBounds.y > DefaultMinBounds.y + epsilonLatitude &&\n    shapeMinBounds.y < -epsilonLatitudeFlat;\n  const shapeIsLatitudeMinHalf =\n    shapeMinBounds.y >= -epsilonLatitudeFlat &&\n    shapeMinBounds.y <= +epsilonLatitudeFlat;\n  const shapeIsLatitudeMinOverHalf = shapeMinBounds.y > +epsilonLatitudeFlat;\n  const shapeHasLatitudeMin =\n    shapeIsLatitudeMinUnderHalf ||\n    shapeIsLatitudeMinHalf ||\n    shapeIsLatitudeMinOverHalf;\n  const shapeHasLatitude = shapeHasLatitudeMax || shapeHasLatitudeMin;\n\n  const shaderUniforms = this._shaderUniforms;\n  const shaderDefines = this._shaderDefines;\n\n  // To keep things simple, clear the defines every time\n  for (const key in shaderDefines) {\n    if (shaderDefines.hasOwnProperty(key)) {\n      shaderDefines[key] = undefined;\n    }\n  }\n\n  shaderUniforms.ellipsoidRadii = Cartesian3.clone(\n    shapeOuterExtent,\n    shaderUniforms.ellipsoidRadii,\n  );\n  const { x: radiiX, z: radiiZ } = shaderUniforms.ellipsoidRadii;\n  const axisRatio = radiiZ / radiiX;\n  shaderUniforms.eccentricitySquared = 1.0 - axisRatio * axisRatio;\n  shaderUniforms.evoluteScale = Cartesian2.fromElements(\n    (radiiX * radiiX - radiiZ * radiiZ) / radiiX,\n    (radiiZ * radiiZ - radiiX * radiiX) / radiiZ,\n    shaderUniforms.evoluteScale,\n  );\n\n  // Used to compute geodetic surface normal.\n  shaderUniforms.ellipsoidInverseRadiiSquared = Cartesian3.divideComponents(\n    Cartesian3.ONE,\n    Cartesian3.multiplyComponents(\n      shaderUniforms.ellipsoidRadii,\n      shaderUniforms.ellipsoidRadii,\n      shaderUniforms.ellipsoidInverseRadiiSquared,\n    ),\n    shaderUniforms.ellipsoidInverseRadiiSquared,\n  );\n\n  // Keep track of how many intersections there are going to be.\n  let intersectionCount = 0;\n\n  // Intersects outer and inner ellipsoid for the max and min height.\n  shaderDefines[\"ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX\"] = intersectionCount;\n  intersectionCount += 1;\n  shaderDefines[\"ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN\"] = intersectionCount;\n  intersectionCount += 1;\n\n  shaderUniforms.clipMinMaxHeight = Cartesian2.fromElements(\n    renderMinBounds.z - shapeMaxBounds.z,\n    renderMaxBounds.z - shapeMaxBounds.z,\n    shaderUniforms.clipMinMaxHeight,\n  );\n\n  // The percent of space that is between the inner and outer ellipsoid.\n  const thickness = shapeMaxBounds.z - shapeMinBounds.z;\n  shaderUniforms.ellipsoidInverseHeightDifference = 1.0 / thickness;\n  if (shapeMinBounds.z === shapeMaxBounds.z) {\n    shaderUniforms.ellipsoidInverseHeightDifference = 0.0;\n  }\n\n  // Intersects a wedge for the min and max longitude.\n  if (renderHasLongitude) {\n    shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE\"] = true;\n    shaderDefines[\"ELLIPSOID_INTERSECTION_INDEX_LONGITUDE\"] = intersectionCount;\n\n    if (renderIsLongitudeRangeUnderHalf) {\n      shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF\"] =\n        true;\n      intersectionCount += 1;\n    } else if (renderIsLongitudeRangeOverHalf) {\n      shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF\"] =\n        true;\n      intersectionCount += 2;\n    } else if (renderIsLongitudeRangeZero) {\n      shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO\"] =\n        true;\n      intersectionCount += 2;\n    }\n\n    shaderUniforms.ellipsoidRenderLongitudeMinMax = Cartesian2.fromElements(\n      renderMinBounds.x,\n      renderMaxBounds.x,\n      shaderUniforms.ellipsoidRenderLongitudeMinMax,\n    );\n  }\n\n  if (shapeHasLongitude) {\n    shaderDefines[\"ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE\"] = true;\n\n    const uvShapeMinLongitude =\n      (shapeMinBounds.x - DefaultMinBounds.x) / defaultLongitudeRange;\n    const uvShapeMaxLongitude =\n      (shapeMaxBounds.x - DefaultMinBounds.x) / defaultLongitudeRange;\n    const uvLongitudeRangeZero =\n      1.0 - shapeLongitudeRange / defaultLongitudeRange;\n    // Translate the origin of UV angles (in [0,1]) to the center of the unoccupied space\n    const uvLongitudeRangeOrigin =\n      (uvShapeMaxLongitude + 0.5 * uvLongitudeRangeZero) % 1.0;\n    shaderUniforms.ellipsoidShapeUvLongitudeRangeOrigin =\n      uvLongitudeRangeOrigin;\n\n    const shapeIsLongitudeReversed = shapeMaxBounds.x < shapeMinBounds.x;\n    if (shapeIsLongitudeReversed) {\n      shaderDefines[\"ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED\"] =\n        true;\n    }\n\n    if (shapeLongitudeRange <= epsilonLongitude) {\n      shaderUniforms.ellipsoidLocalToShapeUvLongitude = Cartesian2.fromElements(\n        0.0,\n        1.0,\n        shaderUniforms.ellipsoidLocalToShapeUvLongitude,\n      );\n    } else {\n      const scale = defaultLongitudeRange / shapeLongitudeRange;\n      const shiftedMinLongitude = uvShapeMinLongitude - uvLongitudeRangeOrigin;\n      const offset =\n        -scale * (shiftedMinLongitude - Math.floor(shiftedMinLongitude));\n      shaderUniforms.ellipsoidLocalToShapeUvLongitude = Cartesian2.fromElements(\n        scale,\n        offset,\n        shaderUniforms.ellipsoidLocalToShapeUvLongitude,\n      );\n    }\n  }\n\n  if (renderHasLongitude) {\n    const renderIsMinLongitudeDiscontinuity = CesiumMath.equalsEpsilon(\n      renderMinBounds.x,\n      DefaultMinBounds.x,\n      undefined,\n      epsilonLongitudeDiscontinuity,\n    );\n    const renderIsMaxLongitudeDiscontinuity = CesiumMath.equalsEpsilon(\n      renderMaxBounds.x,\n      DefaultMaxBounds.x,\n      undefined,\n      epsilonLongitudeDiscontinuity,\n    );\n\n    if (renderIsMinLongitudeDiscontinuity) {\n      shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY\"] =\n        true;\n    }\n    if (renderIsMaxLongitudeDiscontinuity) {\n      shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY\"] =\n        true;\n    }\n    const uvShapeMinLongitude =\n      (shapeMinBounds.x - DefaultMinBounds.x) / defaultLongitudeRange;\n    const uvShapeMaxLongitude =\n      (shapeMaxBounds.x - DefaultMinBounds.x) / defaultLongitudeRange;\n\n    const uvRenderMaxLongitude =\n      (renderMaxBounds.x - DefaultMinBounds.x) / defaultLongitudeRange;\n    const uvRenderLongitudeRangeZero =\n      1.0 - renderLongitudeRange / defaultLongitudeRange;\n    const uvRenderLongitudeRangeZeroMid =\n      (uvRenderMaxLongitude + 0.5 * uvRenderLongitudeRangeZero) % 1.0;\n\n    shaderUniforms.ellipsoidShapeUvLongitudeMinMaxMid = Cartesian3.fromElements(\n      uvShapeMinLongitude,\n      uvShapeMaxLongitude,\n      uvRenderLongitudeRangeZeroMid,\n      shaderUniforms.ellipsoidShapeUvLongitudeMinMaxMid,\n    );\n  }\n\n  if (renderHasLatitude) {\n    // Intersects a cone for min latitude\n    if (renderHasLatitudeMin) {\n      shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN\"] = true;\n      shaderDefines[\"ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN\"] =\n        intersectionCount;\n\n      if (renderIsLatitudeMinUnderHalf) {\n        shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF\"] =\n          true;\n        intersectionCount += 1;\n      } else if (renderIsLatitudeMinHalf) {\n        shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF\"] =\n          true;\n        intersectionCount += 1;\n      } else if (renderIsLatitudeMinOverHalf) {\n        shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF\"] =\n          true;\n        intersectionCount += 2;\n      }\n    }\n\n    // Intersects a cone for max latitude\n    if (renderHasLatitudeMax) {\n      shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX\"] = true;\n      shaderDefines[\"ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX\"] =\n        intersectionCount;\n\n      if (renderIsLatitudeMaxUnderHalf) {\n        shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF\"] =\n          true;\n        intersectionCount += 2;\n      } else if (renderIsLatitudeMaxHalf) {\n        shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF\"] =\n          true;\n        intersectionCount += 1;\n      } else if (renderIsLatitudeMaxOverHalf) {\n        shaderDefines[\"ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF\"] =\n          true;\n        intersectionCount += 1;\n      }\n    }\n\n    shaderUniforms.ellipsoidRenderLatitudeSinMinMax = Cartesian2.fromElements(\n      Math.sin(renderMinBounds.y),\n      Math.sin(renderMaxBounds.y),\n      shaderUniforms.ellipsoidRenderLatitudeSinMinMax,\n    );\n  }\n\n  if (shapeHasLatitude) {\n    shaderDefines[\"ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE\"] = true;\n\n    if (shapeLatitudeRange < epsilonLatitude) {\n      shaderUniforms.ellipsoidLocalToShapeUvLatitude = Cartesian2.fromElements(\n        0.0,\n        1.0,\n        shaderUniforms.ellipsoidLocalToShapeUvLatitude,\n      );\n    } else {\n      const defaultLatitudeRange = DefaultMaxBounds.y - DefaultMinBounds.y;\n      const scale = defaultLatitudeRange / shapeLatitudeRange;\n      const offset =\n        (DefaultMinBounds.y - shapeMinBounds.y) / shapeLatitudeRange;\n      shaderUniforms.ellipsoidLocalToShapeUvLatitude = Cartesian2.fromElements(\n        scale,\n        offset,\n        shaderUniforms.ellipsoidLocalToShapeUvLatitude,\n      );\n    }\n  }\n\n  this._shaderMaximumIntersectionsLength = intersectionCount;\n\n  return true;\n};\n\nconst scratchCameraPositionCartographic = new Cartographic();\nconst surfacePositionScratch = new Cartesian3();\nconst enuTransformScratch = new Matrix4();\nconst enuRotationScratch = new Matrix3();\n/**\n * Update any view-dependent transforms.\n * @private\n * @param {FrameState} frameState The frame state.\n */\nVoxelEllipsoidShape.prototype.updateViewTransforms = function (frameState) {\n  const shaderUniforms = this._shaderUniforms;\n  const ellipsoid = this._ellipsoid;\n  // TODO: incorporate modelMatrix or shapeTransform here?\n  const cameraWC = frameState.camera.positionWC;\n  const cameraPositionCartographic = ellipsoid.cartesianToCartographic(\n    cameraWC,\n    scratchCameraPositionCartographic,\n  );\n  Cartesian3.fromElements(\n    cameraPositionCartographic.longitude,\n    cameraPositionCartographic.latitude,\n    cameraPositionCartographic.height,\n    shaderUniforms.cameraPositionCartographic,\n  );\n\n  // TODO: incorporate modelMatrix here?\n  const surfacePosition = Cartesian3.fromRadians(\n    cameraPositionCartographic.longitude,\n    cameraPositionCartographic.latitude,\n    0.0,\n    ellipsoid,\n    surfacePositionScratch,\n  );\n\n  shaderUniforms.ellipsoidCurvatureAtLatitude = ellipsoid.getLocalCurvature(\n    surfacePosition,\n    shaderUniforms.ellipsoidCurvatureAtLatitude,\n  );\n\n  const enuToWorld = Transforms.eastNorthUpToFixedFrame(\n    surfacePosition,\n    ellipsoid,\n    enuTransformScratch,\n  );\n  const rotateEnuToWorld = Matrix4.getRotation(enuToWorld, enuRotationScratch);\n  const rotateWorldToView = frameState.context.uniformState.viewRotation;\n  const rotateEnuToView = Matrix3.multiply(\n    rotateWorldToView,\n    rotateEnuToWorld,\n    enuRotationScratch,\n  );\n  // Inverse is the transpose since it's a pure rotation.\n  shaderUniforms.ellipsoidEcToEastNorthUp = Matrix3.transpose(\n    rotateEnuToView,\n    shaderUniforms.ellipsoidEcToEastNorthUp,\n  );\n};\n\nconst scratchRectangle = new Rectangle();\n\n/**\n * Computes an oriented bounding box for a specified tile.\n * @private\n * @param {number} tileLevel The tile's level.\n * @param {number} tileX The tile's x coordinate.\n * @param {number} tileY The tile's y coordinate.\n * @param {number} tileZ The tile's z coordinate.\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified tile\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelEllipsoidShape.prototype.computeOrientedBoundingBoxForTile = function (\n  tileLevel,\n  tileX,\n  tileY,\n  tileZ,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"tileLevel\", tileLevel);\n  Check.typeOf.number(\"tileX\", tileX);\n  Check.typeOf.number(\"tileY\", tileY);\n  Check.typeOf.number(\"tileZ\", tileZ);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const sizeAtLevel = 1.0 / Math.pow(2.0, tileLevel);\n  const minLongitudeLerp = tileX * sizeAtLevel;\n  const maxLongitudeLerp = (tileX + 1) * sizeAtLevel;\n  const minLatitudeLerp = tileY * sizeAtLevel;\n  const maxLatitudeLerp = (tileY + 1) * sizeAtLevel;\n  const minHeightLerp = tileZ * sizeAtLevel;\n  const maxHeightLerp = (tileZ + 1) * sizeAtLevel;\n\n  const rectangle = Rectangle.subsection(\n    this._rectangle,\n    minLongitudeLerp,\n    minLatitudeLerp,\n    maxLongitudeLerp,\n    maxLatitudeLerp,\n    scratchRectangle,\n  );\n\n  const minHeight = CesiumMath.lerp(\n    this._minimumHeight,\n    this._maximumHeight,\n    minHeightLerp,\n  );\n\n  const maxHeight = CesiumMath.lerp(\n    this._minimumHeight,\n    this._maximumHeight,\n    maxHeightLerp,\n  );\n\n  return getEllipsoidChunkObb(\n    rectangle,\n    minHeight,\n    maxHeight,\n    this._ellipsoid,\n    this._translation,\n    this._rotation,\n    result,\n  );\n};\n\nconst scratchQuadrantPosition = new Cartesian2();\nconst scratchInverseRadii = new Cartesian2();\nconst scratchEllipseTrigs = new Cartesian2();\nconst scratchEllipseGuess = new Cartesian2();\nconst scratchEvolute = new Cartesian2();\nconst scratchQ = new Cartesian2();\n\n/**\n * Find the nearest point on an ellipse and its radius.\n * @param {Cartesian2} position\n * @param {Cartesian2} radii\n * @param {Cartesian2} evoluteScale\n * @param {Cartesian3} result The Cartesian3 to store the result in. .x and .y components contain the nearest point on the ellipse, .z contains the local radius of curvature.\n * @returns {Cartesian3} The nearest point on the ellipse and its radius.\n * @private\n */\nfunction nearestPointAndRadiusOnEllipse(position, radii, evoluteScale, result) {\n  // Map to the first quadrant\n  const p = Cartesian2.abs(position, scratchQuadrantPosition);\n  const inverseRadii = Cartesian2.fromElements(\n    1.0 / radii.x,\n    1.0 / radii.y,\n    scratchInverseRadii,\n  );\n  // We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t))\n  // but store the cos and sin of t in a vec2 for efficiency.\n  // Initial guess: t = pi/4\n  let tTrigs = Cartesian2.fromElements(\n    Math.SQRT1_2,\n    Math.SQRT1_2,\n    scratchEllipseTrigs,\n  );\n  // TODO: too much duplication. Move v and evolute declarations inside loop?\n  // Initial guess of point on ellipsoid\n  let v = Cartesian2.multiplyComponents(radii, tTrigs, scratchEllipseGuess);\n  // Center of curvature of the ellipse at v\n  let evolute = Cartesian2.fromElements(\n    evoluteScale.x * tTrigs.x * tTrigs.x * tTrigs.x,\n    evoluteScale.y * tTrigs.y * tTrigs.y * tTrigs.y,\n    scratchEvolute,\n  );\n  for (let i = 0; i < 3; ++i) {\n    // Find the (approximate) intersection of p - evolute with the ellipsoid.\n    const distance = Cartesian2.magnitude(\n      Cartesian2.subtract(v, evolute, scratchQ),\n    );\n    const direction = Cartesian2.normalize(\n      Cartesian2.subtract(p, evolute, scratchQ),\n      scratchQ,\n    );\n    const q = Cartesian2.multiplyByScalar(direction, distance, scratchQ);\n    // Update the estimate of t\n    tTrigs = Cartesian2.multiplyComponents(\n      Cartesian2.add(q, evolute, scratchEllipseTrigs),\n      inverseRadii,\n      scratchEllipseTrigs,\n    );\n    tTrigs = Cartesian2.normalize(\n      Cartesian2.clamp(\n        tTrigs,\n        Cartesian2.ZERO,\n        Cartesian2.ONE,\n        scratchEllipseTrigs,\n      ),\n      scratchEllipseTrigs,\n    );\n    v = Cartesian2.multiplyComponents(radii, tTrigs, scratchEllipseGuess);\n    evolute = Cartesian2.fromElements(\n      evoluteScale.x * tTrigs.x * tTrigs.x * tTrigs.x,\n      evoluteScale.y * tTrigs.y * tTrigs.y * tTrigs.y,\n      scratchEvolute,\n    );\n  }\n\n  // Map back to the original quadrant\n  return Cartesian3.fromElements(\n    Math.sign(position.x) * v.x,\n    Math.sign(position.y) * v.y,\n    Cartesian2.magnitude(Cartesian2.subtract(v, evolute, scratchQ)),\n    result,\n  );\n}\n\nconst scratchEllipseRadii = new Cartesian2();\nconst scratchEllipsePosition = new Cartesian2();\nconst scratchSurfacePointAndRadius = new Cartesian3();\nconst scratchNormal2d = new Cartesian2();\n/**\n * Convert a UV coordinate to the shape's UV space.\n * @private\n * @param {Cartesian3} positionLocal The local position to convert.\n * @param {Cartesian3} result The Cartesian3 to store the result in.\n * @returns {Cartesian3} The converted UV coordinate.\n */\nVoxelEllipsoidShape.prototype.convertLocalToShapeUvSpace = function (\n  positionLocal,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"positionLocal\", positionLocal);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  let longitude = Math.atan2(positionLocal.y, positionLocal.x);\n\n  const {\n    ellipsoidRadii,\n    evoluteScale,\n    ellipsoidInverseRadiiSquared,\n    ellipsoidInverseHeightDifference,\n    ellipsoidShapeUvLongitudeRangeOrigin,\n    ellipsoidLocalToShapeUvLongitude,\n    ellipsoidLocalToShapeUvLatitude,\n  } = this._shaderUniforms;\n\n  const distanceFromZAxis = Math.hypot(positionLocal.x, positionLocal.y);\n  const posEllipse = Cartesian2.fromElements(\n    distanceFromZAxis,\n    positionLocal.z,\n    scratchEllipsePosition,\n  );\n  const surfacePointAndRadius = nearestPointAndRadiusOnEllipse(\n    posEllipse,\n    Cartesian2.fromElements(\n      ellipsoidRadii.x,\n      ellipsoidRadii.z,\n      scratchEllipseRadii,\n    ),\n    evoluteScale,\n    scratchSurfacePointAndRadius,\n  );\n\n  const normal2d = Cartesian2.normalize(\n    Cartesian2.fromElements(\n      surfacePointAndRadius.x * ellipsoidInverseRadiiSquared.x,\n      surfacePointAndRadius.y * ellipsoidInverseRadiiSquared.z,\n      scratchNormal2d,\n    ),\n    scratchNormal2d,\n  );\n  let latitude = Math.atan2(normal2d.y, normal2d.x);\n\n  const heightSign =\n    Cartesian2.magnitude(posEllipse) <\n    Cartesian2.magnitude(surfacePointAndRadius)\n      ? -1.0\n      : 1.0;\n  const heightVector = Cartesian2.subtract(\n    posEllipse,\n    surfacePointAndRadius,\n    scratchEllipsePosition,\n  );\n  let height = heightSign * Cartesian2.magnitude(heightVector);\n\n  const {\n    ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE,\n    ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE,\n  } = this._shaderDefines;\n\n  longitude = (longitude + Math.PI) / (2.0 * Math.PI);\n  if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)) {\n    longitude -= ellipsoidShapeUvLongitudeRangeOrigin;\n    longitude = longitude - Math.floor(longitude);\n    // Scale and shift so [0, 1] covers the occupied space.\n    longitude =\n      longitude * ellipsoidLocalToShapeUvLongitude.x +\n      ellipsoidLocalToShapeUvLongitude.y;\n  }\n\n  latitude = (latitude + Math.PI / 2.0) / Math.PI;\n  if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)) {\n    // Scale and shift so [0, 1] covers the occupied space.\n    latitude =\n      latitude * ellipsoidLocalToShapeUvLatitude.x +\n      ellipsoidLocalToShapeUvLatitude.y;\n  }\n\n  height = 1.0 + height * ellipsoidInverseHeightDifference;\n\n  return Cartesian3.fromElements(longitude, latitude, height, result);\n};\n\nconst sampleSizeScratch = new Cartesian3();\nconst scratchTileMinBounds = new Cartesian3();\nconst scratchTileMaxBounds = new Cartesian3();\n\n/**\n * Computes an oriented bounding box for a specified sample within a specified tile.\n * @private\n * @param {SpatialNode} spatialNode The spatial node containing the sample\n * @param {Cartesian3} tileDimensions The size of the tile in number of samples, before padding\n * @param {Cartesian3} tileUv The sample coordinate within the tile\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified sample\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelEllipsoidShape.prototype.computeOrientedBoundingBoxForSample = function (\n  spatialNode,\n  tileDimensions,\n  tileUv,\n  result,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"spatialNode\", spatialNode);\n  Check.typeOf.object(\"tileDimensions\", tileDimensions);\n  Check.typeOf.object(\"tileUv\", tileUv);\n  Check.typeOf.object(\"result\", result);\n  //>>includeEnd('debug');\n\n  const tileSizeAtLevel = 1.0 / Math.pow(2.0, spatialNode.level);\n  const sampleSize = Cartesian3.divideComponents(\n    Cartesian3.ONE,\n    tileDimensions,\n    sampleSizeScratch,\n  );\n  const sampleSizeAtLevel = Cartesian3.multiplyByScalar(\n    sampleSize,\n    tileSizeAtLevel,\n    sampleSizeScratch,\n  );\n\n  const minLerp = Cartesian3.multiplyByScalar(\n    Cartesian3.fromElements(\n      spatialNode.x + tileUv.x,\n      spatialNode.y + tileUv.y,\n      spatialNode.z + tileUv.z,\n      scratchTileMinBounds,\n    ),\n    tileSizeAtLevel,\n    scratchTileMinBounds,\n  );\n  const maxLerp = Cartesian3.add(\n    minLerp,\n    sampleSizeAtLevel,\n    scratchTileMaxBounds,\n  );\n\n  const rectangle = Rectangle.subsection(\n    this._rectangle,\n    minLerp.x,\n    minLerp.y,\n    maxLerp.x,\n    maxLerp.y,\n    scratchRectangle,\n  );\n  const minHeight = CesiumMath.lerp(\n    this._minimumHeight,\n    this._maximumHeight,\n    minLerp.z,\n  );\n  const maxHeight = CesiumMath.lerp(\n    this._minimumHeight,\n    this._maximumHeight,\n    maxLerp.z,\n  );\n\n  return getEllipsoidChunkObb(\n    rectangle,\n    minHeight,\n    maxHeight,\n    this._ellipsoid,\n    this._translation,\n    this._rotation,\n    result,\n  );\n};\n\n/**\n * Computes an {@link OrientedBoundingBox} for a subregion of the shape.\n *\n * @function\n *\n * @param {Rectangle} rectangle The rectangle.\n * @param {number} minHeight The minimumZ.\n * @param {number} maxHeight The maximumZ.\n * @param {Ellipsoid} ellipsoid The ellipsoid.\n * @param {Cartesian3} translation The translation applied to the shape\n * @param {Matrix3} rotation The rotation applied to the shape\n * @param {OrientedBoundingBox} result The object onto which to store the result.\n * @returns {OrientedBoundingBox} The oriented bounding box that contains this subregion.\n *\n * @private\n */\nfunction getEllipsoidChunkObb(\n  rectangle,\n  minHeight,\n  maxHeight,\n  ellipsoid,\n  translation,\n  rotation,\n  result,\n) {\n  result = OrientedBoundingBox.fromRectangle(\n    rectangle,\n    minHeight,\n    maxHeight,\n    ellipsoid,\n    result,\n  );\n  result.center = Cartesian3.add(result.center, translation, result.center);\n  result.halfAxes = Matrix3.multiply(\n    result.halfAxes,\n    rotation,\n    result.halfAxes,\n  );\n  return result;\n}\n\n/**\n * Defines the minimum bounds of the shape. Corresponds to minimum longitude, latitude, height.\n * @private\n * @type {Cartesian3}\n * @constant\n * @readonly\n */\nVoxelEllipsoidShape.DefaultMinBounds = Object.freeze(\n  new Cartesian3(\n    -CesiumMath.PI,\n    -CesiumMath.PI_OVER_TWO,\n    -Ellipsoid.WGS84.minimumRadius,\n  ),\n);\n\n/**\n * Defines the maximum bounds of the shape. Corresponds to maximum longitude, latitude, height.\n * @private\n * @type {Cartesian3}\n * @constant\n * @readonly\n */\nVoxelEllipsoidShape.DefaultMaxBounds = Object.freeze(\n  new Cartesian3(\n    CesiumMath.PI,\n    CesiumMath.PI_OVER_TWO,\n    10.0 * Ellipsoid.WGS84.maximumRadius,\n  ),\n);\n\nexport default VoxelEllipsoidShape;\n","/**\n * Metadata ordering for voxel content.\n * In all cases, x data is contiguous in strides along the y axis,\n * and each group of y strides represents a z slice.\n * However, the orientation of the axes follows different conventions.\n *\n * @enum {number}\n * @private\n */\nconst VoxelMetadataOrder = {\n  /**\n   * The default ordering following the 3D Tiles convention. Z-axis points upward.\n   * @type {number}\n   * @constant\n   */\n  Z_UP: 0,\n  /**\n   * The ordering following the glTF convention. Y-axis points upward.\n   * @type {number}\n   * @constant\n   */\n  Y_UP: 1,\n};\nexport default Object.freeze(VoxelMetadataOrder);\n","import buildVoxelDrawCommands from \"./buildVoxelDrawCommands.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Cesium3DTilesetStatistics from \"./Cesium3DTilesetStatistics.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport clone from \"../Core/clone.js\";\nimport CustomShader from \"./Model/CustomShader.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport JulianDate from \"../Core/JulianDate.js\";\nimport Material from \"./Material.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport MetadataComponentType from \"./MetadataComponentType.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport PolylineCollection from \"./PolylineCollection.js\";\nimport VerticalExaggeration from \"../Core/VerticalExaggeration.js\";\nimport VoxelContent from \"./VoxelContent.js\";\nimport VoxelShapeType from \"./VoxelShapeType.js\";\nimport VoxelTraversal from \"./VoxelTraversal.js\";\nimport VoxelMetadataOrder from \"./VoxelMetadataOrder.js\";\n\n/**\n * A primitive that renders voxel data from a {@link VoxelProvider}.\n *\n * @alias VoxelPrimitive\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {VoxelProvider} [options.provider] The voxel provider that supplies the primitive with tile data.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The model matrix used to transform the primitive.\n * @param {CustomShader} [options.customShader] The custom shader used to style the primitive.\n * @param {Clock} [options.clock] The clock used to control time dynamic behavior.\n * @param {boolean} [options.calculateStatistics] Generate statistics for performance profile.\n *\n * @see VoxelProvider\n * @see Cesium3DTilesVoxelProvider\n * @see VoxelShapeType\n * @see {@link https://github.com/CesiumGS/cesium/tree/main/Documentation/CustomShaderGuide|Custom Shader Guide}\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction VoxelPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._ready = false;\n\n  /**\n   * @type {VoxelProvider}\n   * @private\n   */\n  this._provider = options.provider ?? VoxelPrimitive.DefaultProvider;\n\n  /**\n   * This member is not created until the provider and shape are ready.\n   *\n   * @type {VoxelTraversal}\n   * @private\n   */\n  this._traversal = undefined;\n\n  /**\n   * @type {Cesium3DTilesetStatistics}\n   * @private\n   */\n  this._statistics = new Cesium3DTilesetStatistics();\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._calculateStatistics = options.calculateStatistics ?? false;\n\n  /**\n   * This member is not created until the provider is ready.\n   *\n   * @type {VoxelShape}\n   * @private\n   */\n  this._shape = undefined;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._shapeVisible = false;\n\n  /**\n   * This member is not created until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._dimensions = new Cartesian3();\n\n  /**\n   * This member is not created until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._inputDimensions = new Cartesian3();\n\n  /**\n   * This member is not created until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._paddingBefore = new Cartesian3();\n\n  /**\n   * This member is not created until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._paddingAfter = new Cartesian3();\n\n  /**\n   * This member is not known until the provider is ready.\n   *\n   * @type {number}\n   * @private\n   */\n  this._availableLevels = 1;\n\n  /**\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._minBounds = new Cartesian3();\n\n  /**\n   * Used to detect if the shape is dirty.\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._minBoundsOld = new Cartesian3();\n\n  /**\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._maxBounds = new Cartesian3();\n\n  /**\n   * Used to detect if the shape is dirty.\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._maxBoundsOld = new Cartesian3();\n\n  /**\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._minClippingBounds = new Cartesian3();\n\n  /**\n   * Used to detect if the clipping is dirty.\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._minClippingBoundsOld = new Cartesian3();\n\n  /**\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._maxClippingBounds = new Cartesian3();\n\n  /**\n   * Used to detect if the clipping is dirty.\n   * This member is not known until the provider is ready.\n   *\n   * @type {Cartesian3}\n   * @private\n   */\n  this._maxClippingBoundsOld = new Cartesian3();\n\n  /**\n   * Vertical exaggeration applied to the voxel shape\n   *\n   * @type {number}\n   * @private\n   */\n  this._verticalExaggeration = 1.0;\n\n  /**\n   * The height relative to which the shape is exaggerated.\n   *\n   * @type {number}\n   * @private\n   */\n  this._verticalExaggerationRelativeHeight = 0.0;\n\n  /**\n   * Clipping planes on the primitive\n   *\n   * @type {ClippingPlaneCollection}\n   * @private\n   */\n  this._clippingPlanes = undefined;\n\n  /**\n   * Keeps track of when the clipping planes change\n   *\n   * @type {number}\n   * @private\n   */\n  this._clippingPlanesState = 0;\n\n  /**\n   * Keeps track of when the clipping planes are enabled / disabled\n   *\n   * @type {boolean}\n   * @private\n   */\n  this._clippingPlanesEnabled = false;\n\n  /**\n   * The primitive's model matrix.\n   *\n   * @type {Matrix4}\n   * @private\n   */\n  this._modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n\n  /**\n   * Used to detect if the model matrix is dirty.\n   *\n   * @type {Matrix4}\n   * @private\n   */\n  this._modelMatrixOld = Matrix4.clone(this._modelMatrix);\n\n  /**\n   * @type {CustomShader}\n   * @private\n   */\n  this._customShader =\n    options.customShader ?? VoxelPrimitive.DefaultCustomShader;\n\n  /**\n   * @type {Event}\n   * @private\n   */\n  this._customShaderCompilationEvent = new Event();\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._shaderDirty = true;\n\n  /**\n   * @type {DrawCommand}\n   * @private\n   */\n  this._drawCommand = undefined;\n\n  /**\n   * @type {DrawCommand}\n   * @private\n   */\n  this._drawCommandPick = undefined;\n\n  /**\n   * @type {object}\n   * @private\n   */\n  this._pickId = undefined;\n\n  /**\n   * @type {Clock}\n   * @private\n   */\n  this._clock = options.clock;\n\n  // Transforms and other values that are computed when the shape changes\n  /**\n   * @type {Matrix4}\n   * @private\n   */\n  this._transformPositionLocalToWorld = new Matrix4();\n\n  /**\n   * @type {Matrix4}\n   * @private\n   */\n  this._transformPositionWorldToLocal = new Matrix4();\n\n  /**\n   * Transforms a plane in Hessian normal form from local space to view space.\n   * @type {Matrix4}\n   * @private\n   */\n  this._transformPlaneLocalToView = new Matrix4();\n\n  /**\n   * @type {Matrix3}\n   * @private\n   */\n  this._transformDirectionWorldToLocal = new Matrix3();\n\n  // Rendering\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._nearestSampling = false;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._levelBlendFactor = 0.0;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._stepSizeMultiplier = 1.0;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._depthTest = true;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._useLogDepth = undefined;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._screenSpaceError = 4.0; // in pixels\n\n  // Debug / statistics\n  /**\n   * @type {PolylineCollection}\n   * @private\n   */\n  this._debugPolylines = new PolylineCollection();\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._debugDraw = false;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._disableRender = false;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._disableUpdate = false;\n\n  /**\n   * @type {Object<string, any>}\n   * @private\n   */\n  this._uniforms = {\n    octreeInternalNodeTexture: undefined,\n    octreeInternalNodeTilesPerRow: 0,\n    octreeInternalNodeTexelSizeUv: new Cartesian2(),\n    octreeLeafNodeTexture: undefined,\n    octreeLeafNodeTilesPerRow: 0,\n    octreeLeafNodeTexelSizeUv: new Cartesian2(),\n    megatextureTextures: [],\n    megatextureTileCounts: new Cartesian3(),\n    dimensions: new Cartesian3(),\n    inputDimensions: new Cartesian3(),\n    paddingBefore: new Cartesian3(),\n    paddingAfter: new Cartesian3(),\n    transformPositionViewToLocal: new Matrix4(),\n    transformDirectionViewToLocal: new Matrix3(),\n    cameraPositionLocal: new Cartesian3(),\n    cameraDirectionLocal: new Cartesian3(),\n    cameraTileCoordinates: new Cartesian4(),\n    cameraTileUv: new Cartesian3(),\n    ndcSpaceAxisAlignedBoundingBox: new Cartesian4(),\n    clippingPlanesTexture: undefined,\n    clippingPlanesMatrix: new Matrix4(),\n    renderBoundPlanesTexture: undefined,\n    stepSize: 0,\n    pickColor: new Color(),\n  };\n\n  /**\n   * Shape specific shader defines from the previous shape update. Used to detect if the shader needs to be rebuilt.\n   * @type {Object<string, any>}\n   * @private\n   */\n  this._shapeDefinesOld = {};\n\n  /**\n   * Map uniform names to functions that return the uniform values.\n   * @type {Object<string, function():any>}\n   * @private\n   */\n  this._uniformMap = {};\n\n  const uniforms = this._uniforms;\n  const uniformMap = this._uniformMap;\n  for (const key in uniforms) {\n    if (uniforms.hasOwnProperty(key)) {\n      const name = `u_${key}`;\n      uniformMap[name] = function () {\n        return uniforms[key];\n      };\n    }\n  }\n\n  /**\n   * The event fired to indicate that a tile's content was loaded.\n   * <p>\n   * This event is fired during the tileset traversal while the frame is being rendered\n   * so that updates to the tile take effect in the same frame.  Do not create or modify\n   * Cesium entities or primitives during the event listener.\n   * </p>\n   *\n   * @type {Event}\n   *\n   * @example\n   * voxelPrimitive.tileLoad.addEventListener(function() {\n   *     console.log('A tile was loaded.');\n   * });\n   */\n  this.tileLoad = new Event();\n\n  /**\n   * This event fires once for each visible tile in a frame.\n   * <p>\n   * This event is fired during the traversal while the frame is being rendered.\n   *\n   * @type {Event}\n   *\n   * @example\n   * voxelPrimitive.tileVisible.addEventListener(function() {\n   *     console.log('A tile is visible.');\n   * });\n   *\n   */\n  this.tileVisible = new Event();\n\n  /**\n   * The event fired to indicate that a tile's content failed to load.\n   *\n   * @type {Event}\n   *\n   * @example\n   * voxelPrimitive.tileFailed.addEventListener(function() {\n   *     console.log('An error occurred loading tile.');\n   * });\n   */\n  this.tileFailed = new Event();\n\n  /**\n   * The event fired to indicate that a tile's content was unloaded.\n   *\n   * @type {Event}\n   *\n   * @example\n   * voxelPrimitive.tileUnload.addEventListener(function() {\n   *     console.log('A tile was unloaded from the cache.');\n   * });\n   *\n   */\n  this.tileUnload = new Event();\n\n  /**\n   * The event fired to indicate progress of loading new tiles. This event is fired when a new tile\n   * is requested, when a requested tile is finished downloading, and when a downloaded tile has been\n   * processed and is ready to render.\n   * <p>\n   * The number of pending tile requests, <code>numberOfPendingRequests</code>, and number of tiles\n   * processing, <code>numberOfTilesProcessing</code> are passed to the event listener.\n   * </p>\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   *\n   * @example\n   * voxelPrimitive.loadProgress.addEventListener(function(numberOfPendingRequests, numberOfTilesProcessing) {\n   *     if ((numberOfPendingRequests === 0) && (numberOfTilesProcessing === 0)) {\n   *         console.log('Finished loading');\n   *         return;\n   *     }\n   *\n   *     console.log(`Loading: requests: ${numberOfPendingRequests}, processing: ${numberOfTilesProcessing}`);\n   * });\n   */\n  this.loadProgress = new Event();\n\n  /**\n   * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. The voxel\n   * primitive is completely loaded for this view.\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   *\n   * @example\n   * voxelPrimitive.allTilesLoaded.addEventListener(function() {\n   *     console.log('All tiles are loaded');\n   * });\n   */\n  this.allTilesLoaded = new Event();\n\n  /**\n   * The event fired to indicate that all tiles that meet the screen space error this frame are loaded. This event\n   * is fired once when all tiles in the initial view are loaded.\n   * <p>\n   * This event is fired at the end of the frame after the scene is rendered.\n   * </p>\n   *\n   * @type {Event}\n   *\n   * @example\n   * voxelPrimitive.initialTilesLoaded.addEventListener(function() {\n   *     console.log('Initial tiles are loaded');\n   * });\n   *\n   * @see Cesium3DTileset#allTilesLoaded\n   */\n  this.initialTilesLoaded = new Event();\n\n  // If the provider fails to initialize the primitive will fail too.\n  const provider = this._provider;\n  initialize(this, provider);\n}\n\nfunction initialize(primitive, provider) {\n  // Set the bounds\n  const {\n    shape: shapeType,\n    minBounds = VoxelShapeType.getMinBounds(shapeType),\n    maxBounds = VoxelShapeType.getMaxBounds(shapeType),\n  } = provider;\n\n  primitive.minBounds = minBounds;\n  primitive.maxBounds = maxBounds;\n  primitive.minClippingBounds = minBounds.clone();\n  primitive.maxClippingBounds = maxBounds.clone();\n\n  checkTransformAndBounds(primitive);\n\n  // Create the shape object, and update it so it is valid for VoxelTraversal\n  const ShapeConstructor = VoxelShapeType.getShapeConstructor(shapeType);\n  primitive._shape = new ShapeConstructor();\n  primitive._shapeVisible = updateShapeAndTransforms(primitive);\n}\n\nObject.defineProperties(VoxelPrimitive.prototype, {\n  /**\n   * Gets a value indicating whether or not the primitive is ready for use.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  ready: {\n    get: function () {\n      return this._ready;\n    },\n  },\n\n  /**\n   * Gets the {@link VoxelProvider} associated with this primitive.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {VoxelProvider}\n   * @readonly\n   */\n  provider: {\n    get: function () {\n      return this._provider;\n    },\n  },\n\n  /**\n   * Gets the bounding sphere.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {BoundingSphere}\n   * @readonly\n   */\n  boundingSphere: {\n    get: function () {\n      return this._shape.boundingSphere;\n    },\n  },\n\n  /**\n   * Gets the oriented bounding box.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {OrientedBoundingBox}\n   * @readonly\n   */\n  orientedBoundingBox: {\n    get: function () {\n      return this._shape.orientedBoundingBox;\n    },\n  },\n\n  /**\n   * Gets the model matrix.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Matrix4}\n   * @readonly\n   */\n  modelMatrix: {\n    get: function () {\n      return this._modelMatrix;\n    },\n    set: function (modelMatrix) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.object(\"modelMatrix\", modelMatrix);\n      //>>includeEnd('debug');\n\n      this._modelMatrix = Matrix4.clone(modelMatrix, this._modelMatrix);\n    },\n  },\n\n  /**\n   * Gets the shape type.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {VoxelShapeType}\n   * @readonly\n   */\n  shape: {\n    get: function () {\n      return this._provider.shape;\n    },\n  },\n\n  /**\n   * Gets the dimensions of each voxel tile, in z-up orientation.\n   * Does not include padding.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  dimensions: {\n    get: function () {\n      return this._dimensions;\n    },\n  },\n\n  /**\n   * Gets the dimensions of one tile of the input voxel data, in the input orientation.\n   * Includes padding.\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  inputDimensions: {\n    get: function () {\n      return this._inputDimensions;\n    },\n  },\n\n  /**\n   * Gets the padding before the voxel data.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  paddingBefore: {\n    get: function () {\n      return this._paddingBefore;\n    },\n  },\n\n  /**\n   * Gets the padding after the voxel data.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  paddingAfter: {\n    get: function () {\n      return this._paddingAfter;\n    },\n  },\n\n  /**\n   * Gets the minimum value per channel of the voxel data.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {number[][]}\n   * @readonly\n   */\n  minimumValues: {\n    get: function () {\n      return this._provider.minimumValues;\n    },\n  },\n\n  /**\n   * Gets the maximum value per channel of the voxel data.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {number[][]}\n   * @readonly\n   */\n  maximumValues: {\n    get: function () {\n      return this._provider.maximumValues;\n    },\n  },\n\n  /**\n   * Gets or sets whether or not this primitive should be displayed.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {boolean}\n   */\n  show: {\n    get: function () {\n      return !this._disableRender;\n    },\n    set: function (show) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"show\", show);\n      //>>includeEnd('debug');\n\n      this._disableRender = !show;\n    },\n  },\n\n  /**\n   * Gets or sets whether or not the primitive should update when the view changes.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {boolean}\n   */\n  disableUpdate: {\n    get: function () {\n      return this._disableUpdate;\n    },\n    set: function (disableUpdate) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"disableUpdate\", disableUpdate);\n      //>>includeEnd('debug');\n\n      this._disableUpdate = disableUpdate;\n    },\n  },\n\n  /**\n   * Gets or sets whether or not to render debug visualizations.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {boolean}\n   */\n  debugDraw: {\n    get: function () {\n      return this._debugDraw;\n    },\n    set: function (debugDraw) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"debugDraw\", debugDraw);\n      //>>includeEnd('debug');\n\n      this._debugDraw = debugDraw;\n    },\n  },\n\n  /**\n   * Gets or sets whether or not to test against depth when rendering.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {boolean}\n   */\n  depthTest: {\n    get: function () {\n      return this._depthTest;\n    },\n    set: function (depthTest) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"depthTest\", depthTest);\n      //>>includeEnd('debug');\n\n      if (this._depthTest !== depthTest) {\n        this._depthTest = depthTest;\n        this._shaderDirty = true;\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the nearest sampling.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {boolean}\n   */\n  nearestSampling: {\n    get: function () {\n      return this._nearestSampling;\n    },\n    set: function (nearestSampling) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.bool(\"nearestSampling\", nearestSampling);\n      //>>includeEnd('debug');\n\n      this._nearestSampling = nearestSampling;\n    },\n  },\n\n  /**\n   * Controls how quickly to blend between different levels of the tree.\n   * 0.0 means an instantaneous pop.\n   * 1.0 means a full linear blend.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {number}\n   * @private\n   */\n  levelBlendFactor: {\n    get: function () {\n      return this._levelBlendFactor;\n    },\n    set: function (levelBlendFactor) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"levelBlendFactor\", levelBlendFactor);\n      //>>includeEnd('debug');\n\n      this._levelBlendFactor = CesiumMath.clamp(levelBlendFactor, 0.0, 1.0);\n    },\n  },\n\n  /**\n   * Gets or sets the screen space error in pixels. If the screen space size\n   * of a voxel is greater than the screen space error, the tile is subdivided.\n   * Lower screen space error corresponds with higher detail rendering, but could\n   * result in worse performance and higher memory consumption.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {number}\n   */\n  screenSpaceError: {\n    get: function () {\n      return this._screenSpaceError;\n    },\n    set: function (screenSpaceError) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"screenSpaceError\", screenSpaceError);\n      //>>includeEnd('debug');\n\n      this._screenSpaceError = screenSpaceError;\n    },\n  },\n\n  /**\n   * Gets or sets the step size multiplier used during raymarching.\n   * The lower the value, the higher the rendering quality, but\n   * also the worse the performance.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {number}\n   */\n  stepSize: {\n    get: function () {\n      return this._stepSizeMultiplier;\n    },\n    set: function (stepSize) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.typeOf.number(\"stepSize\", stepSize);\n      //>>includeEnd('debug');\n\n      this._stepSizeMultiplier = stepSize;\n    },\n  },\n\n  /**\n   * Gets or sets the minimum bounds in the shape's local coordinate system.\n   * Voxel data is stretched or squashed to fit the bounds.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   */\n  minBounds: {\n    get: function () {\n      return this._minBounds;\n    },\n    set: function (minBounds) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"minBounds\", minBounds);\n      //>>includeEnd('debug');\n\n      this._minBounds = Cartesian3.clone(minBounds, this._minBounds);\n    },\n  },\n\n  /**\n   * Gets or sets the maximum bounds in the shape's local coordinate system.\n   * Voxel data is stretched or squashed to fit the bounds.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   */\n  maxBounds: {\n    get: function () {\n      return this._maxBounds;\n    },\n    set: function (maxBounds) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"maxBounds\", maxBounds);\n      //>>includeEnd('debug');\n\n      this._maxBounds = Cartesian3.clone(maxBounds, this._maxBounds);\n    },\n  },\n\n  /**\n   * Gets or sets the minimum clipping location in the shape's local coordinate system.\n   * Any voxel content outside the range is clipped.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   */\n  minClippingBounds: {\n    get: function () {\n      return this._minClippingBounds;\n    },\n    set: function (minClippingBounds) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"minClippingBounds\", minClippingBounds);\n      //>>includeEnd('debug');\n\n      this._minClippingBounds = Cartesian3.clone(\n        minClippingBounds,\n        this._minClippingBounds,\n      );\n    },\n  },\n\n  /**\n   * Gets or sets the maximum clipping location in the shape's local coordinate system.\n   * Any voxel content outside the range is clipped.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Cartesian3}\n   */\n  maxClippingBounds: {\n    get: function () {\n      return this._maxClippingBounds;\n    },\n    set: function (maxClippingBounds) {\n      //>>includeStart('debug', pragmas.debug);\n      Check.defined(\"maxClippingBounds\", maxClippingBounds);\n      //>>includeEnd('debug');\n\n      this._maxClippingBounds = Cartesian3.clone(\n        maxClippingBounds,\n        this._maxClippingBounds,\n      );\n    },\n  },\n\n  /**\n   * The {@link ClippingPlaneCollection} used to selectively disable rendering the primitive.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {ClippingPlaneCollection}\n   */\n  clippingPlanes: {\n    get: function () {\n      return this._clippingPlanes;\n    },\n    set: function (clippingPlanes) {\n      // Don't need to check if undefined, it's handled in the setOwner function\n      ClippingPlaneCollection.setOwner(clippingPlanes, this, \"_clippingPlanes\");\n    },\n  },\n\n  /**\n   * Gets or sets the custom shader. If undefined, {@link VoxelPrimitive.DefaultCustomShader} is set.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {CustomShader}\n   * @see {@link https://github.com/CesiumGS/cesium/tree/main/Documentation/CustomShaderGuide|Custom Shader Guide}\n   */\n  customShader: {\n    get: function () {\n      return this._customShader;\n    },\n    set: function (customShader) {\n      if (this._customShader !== customShader) {\n        // Delete old custom shader entries from the uniform map\n        const uniformMap = this._uniformMap;\n        const oldCustomShader = this._customShader;\n        const oldCustomShaderUniformMap = oldCustomShader.uniformMap;\n        for (const uniformName in oldCustomShaderUniformMap) {\n          if (oldCustomShaderUniformMap.hasOwnProperty(uniformName)) {\n            // If the custom shader was set but the voxel shader was never\n            // built, the custom shader uniforms wouldn't have been added to\n            // the uniform map. But it doesn't matter because the delete\n            // operator ignores if the key doesn't exist.\n            delete uniformMap[uniformName];\n          }\n        }\n\n        if (!defined(customShader)) {\n          this._customShader = VoxelPrimitive.DefaultCustomShader;\n        } else {\n          this._customShader = customShader;\n        }\n        this._shaderDirty = true;\n      }\n    },\n  },\n\n  /**\n   * Gets an event that is raised whenever a custom shader is compiled.\n   *\n   * @memberof VoxelPrimitive.prototype\n   * @type {Event}\n   * @readonly\n   */\n  customShaderCompilationEvent: {\n    get: function () {\n      return this._customShaderCompilationEvent;\n    },\n  },\n\n  /**\n   *  Loading and rendering information for requested content\n   * To use `visited` and `numberOfTilesWithContentReady` statistics, set options._calculateStatistics` to `true` in the constructor.\n   * @type {Cesium3DTilesetStatistics}\n   * @readonly\n   * @private\n   */\n  statistics: {\n    get: function () {\n      return this._statistics;\n    },\n  },\n});\n\nconst scratchIntersect = new Cartesian4();\nconst scratchNdcAabb = new Cartesian4();\nconst scratchTransformPositionLocalToWorld = new Matrix4();\nconst scratchTransformPositionLocalToProjection = new Matrix4();\nconst scratchCameraPositionShapeUv = new Cartesian3();\nconst scratchCameraTileCoordinates = new Cartesian4();\n\n/**\n * Updates the voxel primitive.\n *\n * @param {FrameState} frameState\n * @private\n */\nVoxelPrimitive.prototype.update = function (frameState) {\n  const provider = this._provider;\n  const uniforms = this._uniforms;\n\n  // Update the custom shader in case it has texture uniforms.\n  this._customShader.update(frameState);\n\n  // Initialize from the ready provider. This only happens once.\n  const context = frameState.context;\n  if (!this._ready) {\n    initFromProvider(this, provider, context);\n    // Set the primitive as ready after the first frame render since the user might set up events subscribed to\n    // the post render event, and the primitive may not be ready for those past the first frame.\n    frameState.afterRender.push(() => {\n      this._ready = true;\n      return true;\n    });\n\n    // Don't render until the next frame after ready is set to true\n    return;\n  }\n\n  // Check if the shape is dirty before updating it. This needs to happen every\n  // frame because the member variables can be modified externally via the\n  // getters.\n  const shapeDirty = checkTransformAndBounds(this);\n  const exaggerationChanged = updateVerticalExaggeration(this, frameState);\n  if (shapeDirty || exaggerationChanged) {\n    this._shapeVisible = updateShapeAndTransforms(this);\n    if (checkShapeDefines(this)) {\n      this._shaderDirty = true;\n    }\n  }\n  if (!this._shapeVisible) {\n    return;\n  }\n\n  this._shape.updateViewTransforms(frameState);\n\n  // Update the traversal and prepare for rendering.\n  const keyframeLocation = getKeyframeLocation(\n    provider.timeIntervalCollection,\n    this._clock,\n  );\n\n  const traversal = this._traversal;\n  const sampleCountOld = traversal._sampleCount;\n\n  traversal.update(\n    frameState,\n    keyframeLocation,\n    shapeDirty, // recomputeBoundingVolumes\n    this._disableUpdate, // pauseUpdate\n  );\n\n  if (sampleCountOld !== traversal._sampleCount) {\n    this._shaderDirty = true;\n  }\n\n  if (!traversal.isRenderable(traversal.rootNode)) {\n    return;\n  }\n\n  if (this._debugDraw) {\n    // Debug draw bounding boxes and other things. Must go after traversal update\n    // because that's what updates the tile bounding boxes.\n    debugDraw(this, frameState);\n  }\n\n  if (this._disableRender) {\n    return;\n  }\n\n  // Check if log depth changed\n  if (this._useLogDepth !== frameState.useLogDepth) {\n    this._useLogDepth = frameState.useLogDepth;\n    this._shaderDirty = true;\n  }\n\n  // Check if clipping planes changed\n  const clippingPlanesChanged = updateClippingPlanes(this, frameState);\n  if (clippingPlanesChanged) {\n    this._shaderDirty = true;\n  }\n\n  const leafNodeTexture = traversal.leafNodeTexture;\n  if (defined(leafNodeTexture)) {\n    uniforms.octreeLeafNodeTexture = traversal.leafNodeTexture;\n    uniforms.octreeLeafNodeTexelSizeUv = Cartesian2.clone(\n      traversal.leafNodeTexelSizeUv,\n      uniforms.octreeLeafNodeTexelSizeUv,\n    );\n    uniforms.octreeLeafNodeTilesPerRow = traversal.leafNodeTilesPerRow;\n  }\n\n  // Rebuild shaders\n  if (this._shaderDirty) {\n    buildVoxelDrawCommands(this, context);\n    this._shaderDirty = false;\n  }\n\n  // Calculate the NDC-space AABB to \"scissor\" the fullscreen quad\n  const transformPositionWorldToProjection =\n    context.uniformState.viewProjection;\n  const { orientedBoundingBox } = this._shape;\n  const ndcAabb = orientedBoundingBoxToNdcAabb(\n    orientedBoundingBox,\n    transformPositionWorldToProjection,\n    scratchNdcAabb,\n  );\n\n  // If the object is offscreen, don't render it.\n  const offscreen =\n    ndcAabb.x === +1.0 ||\n    ndcAabb.y === +1.0 ||\n    ndcAabb.z === -1.0 ||\n    ndcAabb.w === -1.0;\n  if (offscreen) {\n    return;\n  }\n\n  // Prepare to render: update uniforms that can change every frame\n  // Using a uniform instead of going through RenderState's scissor because the viewport is not accessible here, and the scissor command needs pixel coordinates.\n  uniforms.ndcSpaceAxisAlignedBoundingBox = Cartesian4.clone(\n    ndcAabb,\n    uniforms.ndcSpaceAxisAlignedBoundingBox,\n  );\n  const transformPositionViewToWorld = context.uniformState.inverseView;\n  const transformPositionViewToLocal = Matrix4.multiplyTransformation(\n    this._transformPositionWorldToLocal,\n    transformPositionViewToWorld,\n    uniforms.transformPositionViewToLocal,\n  );\n\n  this._transformPlaneLocalToView = Matrix4.transpose(\n    transformPositionViewToLocal,\n    this._transformPlaneLocalToView,\n  );\n\n  const transformDirectionViewToWorld =\n    context.uniformState.inverseViewRotation;\n  uniforms.transformDirectionViewToLocal = Matrix3.multiply(\n    this._transformDirectionWorldToLocal,\n    transformDirectionViewToWorld,\n    uniforms.transformDirectionViewToLocal,\n  );\n  uniforms.cameraPositionLocal = Matrix4.multiplyByPoint(\n    this._transformPositionWorldToLocal,\n    frameState.camera.positionWC,\n    uniforms.cameraPositionLocal,\n  );\n  uniforms.cameraDirectionLocal = Matrix3.multiplyByVector(\n    this._transformDirectionWorldToLocal,\n    frameState.camera.directionWC,\n    uniforms.cameraDirectionLocal,\n  );\n  const cameraTileCoordinates = getTileCoordinates(\n    this,\n    uniforms.cameraPositionLocal,\n    scratchCameraTileCoordinates,\n  );\n  uniforms.cameraTileCoordinates = Cartesian4.fromElements(\n    Math.floor(cameraTileCoordinates.x),\n    Math.floor(cameraTileCoordinates.y),\n    Math.floor(cameraTileCoordinates.z),\n    cameraTileCoordinates.w,\n    uniforms.cameraTileCoordinates,\n  );\n  uniforms.cameraTileUv = Cartesian3.fromElements(\n    cameraTileCoordinates.x - Math.floor(cameraTileCoordinates.x),\n    cameraTileCoordinates.y - Math.floor(cameraTileCoordinates.y),\n    cameraTileCoordinates.z - Math.floor(cameraTileCoordinates.z),\n    uniforms.cameraTileUv,\n  );\n  uniforms.stepSize = this._stepSizeMultiplier;\n\n  updateNearestSampling(this);\n  updateRenderBoundPlanes(this, frameState);\n\n  // Render the primitive\n  const command = frameState.passes.pick\n    ? this._drawCommandPick\n    : frameState.passes.pickVoxel\n      ? this._drawCommandPickVoxel\n      : this._drawCommand;\n  command.boundingVolume = this._shape.boundingSphere;\n  frameState.commandList.push(command);\n};\n\nfunction updateNearestSampling(primitive) {\n  const { megatextures } = primitive._traversal;\n  for (let i = 0; i < megatextures.length; ++i) {\n    megatextures[i].nearestSampling = primitive._nearestSampling;\n  }\n}\n\nfunction updateRenderBoundPlanes(primitive, frameState) {\n  const uniforms = primitive._uniforms;\n  const { renderBoundPlanes } = primitive._shape;\n  if (!defined(renderBoundPlanes)) {\n    return;\n  }\n  renderBoundPlanes.update(frameState, primitive._transformPlaneLocalToView);\n  uniforms.renderBoundPlanesTexture = renderBoundPlanes.texture;\n}\n\n/**\n * Converts a position in local space to tile coordinates.\n *\n * @param {VoxelPrimitive} primitive The primitive to get the tile coordinates for.\n * @param {Cartesian3} positionLocal The position in local space to convert to tile coordinates.\n * @param {Cartesian4} result The result object to store the tile coordinates.\n * @returns {Cartesian4} The tile coordinates of the supplied position.\n * @private\n */\nfunction getTileCoordinates(primitive, positionLocal, result) {\n  const shapeUv = primitive._shape.convertLocalToShapeUvSpace(\n    positionLocal,\n    scratchCameraPositionShapeUv,\n  );\n\n  const availableLevels = primitive._availableLevels;\n  const numTiles = 2 ** (availableLevels - 1);\n\n  return Cartesian4.fromElements(\n    shapeUv.x * numTiles,\n    shapeUv.y * numTiles,\n    shapeUv.z * numTiles,\n    availableLevels - 1,\n    result,\n  );\n}\n\nconst scratchExaggerationScale = new Cartesian3();\nconst scratchExaggerationCenter = new Cartesian3();\nconst scratchCartographicCenter = new Cartographic();\n\n/**\n * Check for changes in the vertical exaggeration of the primitive\n * @param {VoxelPrimitive} primitive The primitive to update\n * @param {FrameState} frameState The current frame state\n * @returns {boolean} <code>true</code> if the exaggeration was changed\n * @private\n */\nfunction updateVerticalExaggeration(primitive, frameState) {\n  const { verticalExaggeration, verticalExaggerationRelativeHeight } =\n    frameState;\n\n  if (\n    primitive._verticalExaggeration === verticalExaggeration &&\n    primitive._verticalExaggerationRelativeHeight ===\n      verticalExaggerationRelativeHeight\n  ) {\n    return false;\n  }\n\n  primitive._verticalExaggeration = verticalExaggeration;\n  primitive._verticalExaggerationRelativeHeight =\n    verticalExaggerationRelativeHeight;\n  return true;\n}\n\n/**\n * Initialize primitive properties that are derived from the voxel provider\n * @param {VoxelPrimitive} primitive\n * @param {VoxelProvider} provider\n * @param {Context} context\n * @private\n */\nfunction initFromProvider(primitive, provider, context) {\n  const uniforms = primitive._uniforms;\n\n  primitive._pickId = context.createPickId({ primitive });\n  uniforms.pickColor = Color.clone(primitive._pickId.color, uniforms.pickColor);\n\n  const { shaderDefines, shaderUniforms: shapeUniforms } = primitive._shape;\n  primitive._shapeDefinesOld = clone(shaderDefines, true);\n\n  // Add shape uniforms to the uniform map\n  const uniformMap = primitive._uniformMap;\n  for (const key in shapeUniforms) {\n    if (shapeUniforms.hasOwnProperty(key)) {\n      const name = `u_${key}`;\n\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(uniformMap[name])) {\n        oneTimeWarning(\n          `VoxelPrimitive: Uniform name \"${name}\" is already defined`,\n        );\n      }\n      //>>includeEnd('debug');\n\n      uniformMap[name] = function () {\n        return shapeUniforms[key];\n      };\n    }\n  }\n\n  // Set uniforms that come from the provider.\n  // Note that minBounds and maxBounds can be set dynamically, so their uniforms aren't set here.\n  primitive._dimensions = Cartesian3.clone(\n    provider.dimensions,\n    primitive._dimensions,\n  );\n  uniforms.dimensions = Cartesian3.clone(\n    primitive._dimensions,\n    uniforms.dimensions,\n  );\n  primitive._paddingBefore = Cartesian3.clone(\n    provider.paddingBefore ?? Cartesian3.ZERO,\n    primitive._paddingBefore,\n  );\n  uniforms.paddingBefore = Cartesian3.clone(\n    primitive._paddingBefore,\n    uniforms.paddingBefore,\n  );\n  primitive._paddingAfter = Cartesian3.clone(\n    provider.paddingAfter ?? Cartesian3.ZERO,\n    primitive._paddingAfter,\n  );\n  uniforms.paddingAfter = Cartesian3.clone(\n    primitive._paddingAfter,\n    uniforms.paddingAfter,\n  );\n  primitive._inputDimensions = Cartesian3.add(\n    primitive._dimensions,\n    primitive._paddingBefore,\n    primitive._inputDimensions,\n  );\n  primitive._inputDimensions = Cartesian3.add(\n    primitive._inputDimensions,\n    primitive._paddingAfter,\n    primitive._inputDimensions,\n  );\n  if (provider.metadataOrder === VoxelMetadataOrder.Y_UP) {\n    const inputDimensionsY = primitive._inputDimensions.y;\n    primitive._inputDimensions.y = primitive._inputDimensions.z;\n    primitive._inputDimensions.z = inputDimensionsY;\n  }\n  uniforms.inputDimensions = Cartesian3.clone(\n    primitive._inputDimensions,\n    uniforms.inputDimensions,\n  );\n  primitive._availableLevels = provider.availableLevels ?? 1;\n\n  // Create the VoxelTraversal, and set related uniforms\n  const keyframeCount = provider.keyframeCount ?? 1;\n  primitive._traversal = new VoxelTraversal(primitive, context, keyframeCount);\n  primitive.statistics.texturesByteLength =\n    primitive._traversal.textureMemoryByteLength;\n  setTraversalUniforms(primitive._traversal, uniforms);\n}\n\n/**\n * Track changes in provider transform and primitive bounds\n * @param {VoxelPrimitive} primitive\n * @returns {boolean} Whether any of the transform or bounds changed\n * @private\n */\nfunction checkTransformAndBounds(primitive) {\n  const numChanges =\n    updateBound(primitive, \"_modelMatrix\", \"_modelMatrixOld\") +\n    updateBound(primitive, \"_minBounds\", \"_minBoundsOld\") +\n    updateBound(primitive, \"_maxBounds\", \"_maxBoundsOld\") +\n    updateBound(primitive, \"_minClippingBounds\", \"_minClippingBoundsOld\") +\n    updateBound(primitive, \"_maxClippingBounds\", \"_maxClippingBoundsOld\");\n  return numChanges > 0;\n}\n\n/**\n * Compare old and new values of a bound and update the old if it is different.\n * @param {VoxelPrimitive} primitive The primitive with bounds properties\n * @param {string} newBoundKey A key pointing to a bounds property of type Cartesian3 or Matrix4\n * @param {string} oldBoundKey A key pointing to a bounds property of the same type as the property at newBoundKey\n * @returns {number} 1 if the bound value changed, 0 otherwise\n *\n * @private\n */\nfunction updateBound(primitive, newBoundKey, oldBoundKey) {\n  const newBound = primitive[newBoundKey];\n  const oldBound = primitive[oldBoundKey];\n\n  const changed = !newBound.equals(oldBound);\n  if (changed) {\n    newBound.clone(oldBound);\n  }\n  return changed ? 1 : 0;\n}\n\nconst scratchExaggeratedMinBounds = new Cartesian3();\nconst scratchExaggeratedMaxBounds = new Cartesian3();\nconst scratchExaggeratedMinClippingBounds = new Cartesian3();\nconst scratchExaggeratedMaxClippingBounds = new Cartesian3();\nconst scratchExaggeratedModelMatrix = new Matrix4();\nconst scratchCompoundModelMatrix = new Matrix4();\n\n/**\n * Update the shape and related transforms\n * @param {VoxelPrimitive} primitive\n * @returns {boolean} True if the shape is visible\n * @private\n */\nfunction updateShapeAndTransforms(primitive) {\n  const verticalExaggeration = primitive._verticalExaggeration;\n  const verticalExaggerationRelativeHeight =\n    primitive._verticalExaggerationRelativeHeight;\n  const exaggeratedMinBounds = Cartesian3.clone(\n    primitive._minBounds,\n    scratchExaggeratedMinBounds,\n  );\n  const exaggeratedMaxBounds = Cartesian3.clone(\n    primitive._maxBounds,\n    scratchExaggeratedMaxBounds,\n  );\n  const exaggeratedMinClippingBounds = Cartesian3.clone(\n    primitive._minClippingBounds,\n    scratchExaggeratedMinClippingBounds,\n  );\n  const exaggeratedMaxClippingBounds = Cartesian3.clone(\n    primitive._maxClippingBounds,\n    scratchExaggeratedMaxClippingBounds,\n  );\n  const exaggeratedModelMatrix = Matrix4.clone(\n    primitive._modelMatrix,\n    scratchExaggeratedModelMatrix,\n  );\n\n  if (primitive.shape === VoxelShapeType.ELLIPSOID) {\n    // Apply the exaggeration by stretching the height bounds\n    exaggeratedMinBounds.z = VerticalExaggeration.getHeight(\n      primitive._minBounds.z,\n      verticalExaggeration,\n      verticalExaggerationRelativeHeight,\n    );\n    exaggeratedMaxBounds.z = VerticalExaggeration.getHeight(\n      primitive._maxBounds.z,\n      verticalExaggeration,\n      verticalExaggerationRelativeHeight,\n    );\n    exaggeratedMinClippingBounds.z = VerticalExaggeration.getHeight(\n      primitive._minClippingBounds.z,\n      verticalExaggeration,\n      verticalExaggerationRelativeHeight,\n    );\n    exaggeratedMaxClippingBounds.z = VerticalExaggeration.getHeight(\n      primitive._maxClippingBounds.z,\n      verticalExaggeration,\n      verticalExaggerationRelativeHeight,\n    );\n  } else {\n    // Apply the exaggeration via the model matrix\n    const exaggerationScale = Cartesian3.fromElements(\n      1.0,\n      1.0,\n      verticalExaggeration,\n      scratchExaggerationScale,\n    );\n    Matrix4.multiplyByScale(\n      exaggeratedModelMatrix,\n      exaggerationScale,\n      exaggeratedModelMatrix,\n    );\n    Matrix4.multiplyByTranslation(\n      exaggeratedModelMatrix,\n      computeBoxExaggerationTranslation(primitive),\n      exaggeratedModelMatrix,\n    );\n  }\n\n  const provider = primitive._provider;\n  const shapeTransform = provider.shapeTransform ?? Matrix4.IDENTITY;\n  const globalTransform = provider.globalTransform ?? Matrix4.IDENTITY;\n\n  // Compound model matrix = global transform * model matrix * shape transform\n  const compoundModelMatrix = Matrix4.multiplyTransformation(\n    globalTransform,\n    exaggeratedModelMatrix,\n    scratchCompoundModelMatrix,\n  );\n  Matrix4.multiplyTransformation(\n    compoundModelMatrix,\n    shapeTransform,\n    compoundModelMatrix,\n  );\n\n  const shape = primitive._shape;\n  const visible = shape.update(\n    compoundModelMatrix,\n    exaggeratedMinBounds,\n    exaggeratedMaxBounds,\n    exaggeratedMinClippingBounds,\n    exaggeratedMaxClippingBounds,\n  );\n  if (!visible) {\n    return false;\n  }\n\n  primitive._transformPositionLocalToWorld = Matrix4.clone(\n    shape.shapeTransform,\n    primitive._transformPositionLocalToWorld,\n  );\n  primitive._transformPositionWorldToLocal = Matrix4.inverse(\n    primitive._transformPositionLocalToWorld,\n    primitive._transformPositionWorldToLocal,\n  );\n  primitive._transformDirectionWorldToLocal = Matrix4.getMatrix3(\n    primitive._transformPositionWorldToLocal,\n    primitive._transformDirectionWorldToLocal,\n  );\n\n  return true;\n}\n\nconst scratchExaggerationTranslation = new Cartesian3();\n\n/**\n * Compute the translation to apply to box shapes to account for vertical exaggeration\n *\n * @param {VoxelPrimitive} primitive\n * @returns {Cartesian3} The translation to apply to the box to account for vertical exaggeration\n * @private\n */\nfunction computeBoxExaggerationTranslation(primitive) {\n  const verticalExaggeration = primitive._verticalExaggeration;\n  const verticalExaggerationRelativeHeight =\n    primitive._verticalExaggerationRelativeHeight;\n\n  // Compute translation based on box center, relative height, and exaggeration\n  const {\n    shapeTransform = Matrix4.IDENTITY,\n    globalTransform = Matrix4.IDENTITY,\n  } = primitive._provider;\n\n  // Find the Cartesian position of the center of the OBB\n  const initialCenter = Matrix4.getTranslation(\n    shapeTransform,\n    scratchExaggerationCenter,\n  );\n  const intermediateCenter = Matrix4.multiplyByPoint(\n    primitive._modelMatrix,\n    initialCenter,\n    scratchExaggerationCenter,\n  );\n  const transformedCenter = Matrix4.multiplyByPoint(\n    globalTransform,\n    intermediateCenter,\n    scratchExaggerationCenter,\n  );\n\n  // Find the cartographic height\n  const ellipsoid = Ellipsoid.WGS84;\n  const centerCartographic = ellipsoid.cartesianToCartographic(\n    transformedCenter,\n    scratchCartographicCenter,\n  );\n\n  let centerHeight = 0.0;\n  if (defined(centerCartographic)) {\n    centerHeight = centerCartographic.height;\n  }\n\n  // Find the shift that will put the center in the right position relative\n  // to relativeHeight, after it is scaled by verticalExaggeration\n  const exaggeratedHeight = VerticalExaggeration.getHeight(\n    centerHeight,\n    verticalExaggeration,\n    verticalExaggerationRelativeHeight,\n  );\n\n  return Cartesian3.fromElements(\n    0.0,\n    0.0,\n    (exaggeratedHeight - centerHeight) / verticalExaggeration,\n    scratchExaggerationTranslation,\n  );\n}\n\n/**\n * Set uniforms that come from the traversal.\n * @param {VoxelTraversal} traversal\n * @param {object} uniforms\n * @private\n */\nfunction setTraversalUniforms(traversal, uniforms) {\n  uniforms.octreeInternalNodeTexture = traversal.internalNodeTexture;\n  uniforms.octreeInternalNodeTexelSizeUv = Cartesian2.clone(\n    traversal.internalNodeTexelSizeUv,\n    uniforms.octreeInternalNodeTexelSizeUv,\n  );\n  uniforms.octreeInternalNodeTilesPerRow = traversal.internalNodeTilesPerRow;\n\n  const { megatextures } = traversal;\n  const megatexture = megatextures[0];\n  uniforms.megatextureTextures = new Array(megatextures.length);\n  for (let i = 0; i < megatextures.length; i++) {\n    uniforms.megatextureTextures[i] = megatextures[i].texture;\n  }\n  uniforms.megatextureTileCounts = Cartesian3.clone(\n    megatexture.tileCounts,\n    uniforms.megatextureTileCounts,\n  );\n}\n\n/**\n * Track changes in shape-related shader defines\n * @param {VoxelPrimitive} primitive\n * @returns {boolean} True if any of the shape defines changed, requiring a shader rebuild\n * @private\n */\nfunction checkShapeDefines(primitive) {\n  const { shaderDefines } = primitive._shape;\n  const shapeDefinesChanged = Object.keys(shaderDefines).some(\n    (key) => shaderDefines[key] !== primitive._shapeDefinesOld[key],\n  );\n  if (shapeDefinesChanged) {\n    primitive._shapeDefinesOld = clone(shaderDefines, true);\n  }\n  return shapeDefinesChanged;\n}\n\n/**\n * Find the keyframe location to render at. Doesn't need to be a whole number.\n * @param {TimeIntervalCollection} timeIntervalCollection\n * @param {Clock} clock\n * @returns {number}\n *\n * @private\n */\nfunction getKeyframeLocation(timeIntervalCollection, clock) {\n  if (!defined(timeIntervalCollection) || !defined(clock)) {\n    return 0.0;\n  }\n  let date = clock.currentTime;\n  let timeInterval;\n  let timeIntervalIndex = timeIntervalCollection.indexOf(date);\n  if (timeIntervalIndex >= 0) {\n    timeInterval = timeIntervalCollection.get(timeIntervalIndex);\n  } else {\n    // Date fell outside the range\n    timeIntervalIndex = ~timeIntervalIndex;\n    if (timeIntervalIndex === timeIntervalCollection.length) {\n      // Date past range\n      timeIntervalIndex = timeIntervalCollection.length - 1;\n      timeInterval = timeIntervalCollection.get(timeIntervalIndex);\n      date = timeInterval.stop;\n    } else {\n      // Date before range\n      timeInterval = timeIntervalCollection.get(timeIntervalIndex);\n      date = timeInterval.start;\n    }\n  }\n  // De-lerp between the start and end of the interval\n  const totalSeconds = JulianDate.secondsDifference(\n    timeInterval.stop,\n    timeInterval.start,\n  );\n  const secondsDifferenceStart = JulianDate.secondsDifference(\n    date,\n    timeInterval.start,\n  );\n  const t = secondsDifferenceStart / totalSeconds;\n\n  return timeIntervalIndex + t;\n}\n\n/**\n * Update the clipping planes state and associated uniforms\n *\n * @param {VoxelPrimitive} primitive\n * @param {FrameState} frameState\n * @returns {boolean} Whether the clipping planes changed, requiring a shader rebuild\n * @private\n */\nfunction updateClippingPlanes(primitive, frameState) {\n  const clippingPlanes = primitive.clippingPlanes;\n  if (!defined(clippingPlanes)) {\n    return false;\n  }\n\n  clippingPlanes.update(frameState);\n\n  const { clippingPlanesState, enabled } = clippingPlanes;\n\n  if (enabled) {\n    const uniforms = primitive._uniforms;\n    uniforms.clippingPlanesTexture = clippingPlanes.texture;\n\n    // Compute the clipping plane's transformation to local space and then take the inverse\n    // transpose to properly transform the hessian normal form of the plane.\n\n    // transpose(inverse(worldToLocal * clippingPlaneLocalToWorld))\n    // transpose(inverse(clippingPlaneLocalToWorld) * inverse(worldToLocal))\n    // transpose(inverse(clippingPlaneLocalToWorld) * localToWorld)\n\n    uniforms.clippingPlanesMatrix = Matrix4.transpose(\n      Matrix4.multiplyTransformation(\n        Matrix4.inverse(\n          clippingPlanes.modelMatrix,\n          uniforms.clippingPlanesMatrix,\n        ),\n        primitive._transformPositionLocalToWorld,\n        uniforms.clippingPlanesMatrix,\n      ),\n      uniforms.clippingPlanesMatrix,\n    );\n  }\n\n  if (\n    primitive._clippingPlanesState === clippingPlanesState &&\n    primitive._clippingPlanesEnabled === enabled\n  ) {\n    return false;\n  }\n  primitive._clippingPlanesState = clippingPlanesState;\n  primitive._clippingPlanesEnabled = enabled;\n\n  return true;\n}\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see VoxelPrimitive#destroy\n */\nVoxelPrimitive.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see VoxelPrimitive#isDestroyed\n *\n * @example\n * voxelPrimitive = voxelPrimitive && voxelPrimitive.destroy();\n */\nVoxelPrimitive.prototype.destroy = function () {\n  const drawCommand = this._drawCommand;\n  if (defined(drawCommand)) {\n    drawCommand.shaderProgram =\n      drawCommand.shaderProgram && drawCommand.shaderProgram.destroy();\n  }\n  const drawCommandPick = this._drawCommandPick;\n  if (defined(drawCommandPick)) {\n    drawCommandPick.shaderProgram =\n      drawCommandPick.shaderProgram && drawCommandPick.shaderProgram.destroy();\n  }\n\n  this._pickId = this._pickId && this._pickId.destroy();\n  this._traversal = this._traversal && this._traversal.destroy();\n  this.statistics.texturesByteLength = 0;\n  this._clippingPlanes = this._clippingPlanes && this._clippingPlanes.destroy();\n\n  return destroyObject(this);\n};\n\nconst corners = new Array(\n  new Cartesian4(-1.0, -1.0, -1.0, 1.0),\n  new Cartesian4(+1.0, -1.0, -1.0, 1.0),\n  new Cartesian4(-1.0, +1.0, -1.0, 1.0),\n  new Cartesian4(+1.0, +1.0, -1.0, 1.0),\n  new Cartesian4(-1.0, -1.0, +1.0, 1.0),\n  new Cartesian4(+1.0, -1.0, +1.0, 1.0),\n  new Cartesian4(-1.0, +1.0, +1.0, 1.0),\n  new Cartesian4(+1.0, +1.0, +1.0, 1.0),\n);\nconst vertexNeighborIndices = new Array(\n  1,\n  2,\n  4,\n  0,\n  3,\n  5,\n  0,\n  3,\n  6,\n  1,\n  2,\n  7,\n  0,\n  5,\n  6,\n  1,\n  4,\n  7,\n  2,\n  4,\n  7,\n  3,\n  5,\n  6,\n);\n\nconst scratchCornersClipSpace = new Array(\n  new Cartesian4(),\n  new Cartesian4(),\n  new Cartesian4(),\n  new Cartesian4(),\n  new Cartesian4(),\n  new Cartesian4(),\n  new Cartesian4(),\n  new Cartesian4(),\n);\n\n/**\n * Projects all 8 corners of the oriented bounding box to NDC space and finds the\n * resulting NDC axis aligned bounding box. To avoid projecting a vertex that is\n * behind the near plane, it uses the intersection point of each of the vertex's\n * edges against the near plane as part of the AABB calculation. This is done in\n * clip space prior to perspective division.\n *\n * @function\n *\n * @param {OrientedBoundingBox} orientedBoundingBox\n * @param {Matrix4} worldToProjection\n * @param {Cartesian4} result\n * @returns {Cartesian4}\n *\n * @private\n */\nfunction orientedBoundingBoxToNdcAabb(\n  orientedBoundingBox,\n  worldToProjection,\n  result,\n) {\n  const transformPositionLocalToWorld = Matrix4.fromRotationTranslation(\n    orientedBoundingBox.halfAxes,\n    orientedBoundingBox.center,\n    scratchTransformPositionLocalToWorld,\n  );\n  const transformPositionLocalToProjection = Matrix4.multiply(\n    worldToProjection,\n    transformPositionLocalToWorld,\n    scratchTransformPositionLocalToProjection,\n  );\n\n  let ndcMinX = +Number.MAX_VALUE;\n  let ndcMaxX = -Number.MAX_VALUE;\n  let ndcMinY = +Number.MAX_VALUE;\n  let ndcMaxY = -Number.MAX_VALUE;\n  let cornerIndex;\n\n  // Convert all points to clip space\n  const cornersClipSpace = scratchCornersClipSpace;\n  const cornersLength = corners.length;\n  for (cornerIndex = 0; cornerIndex < cornersLength; cornerIndex++) {\n    Matrix4.multiplyByVector(\n      transformPositionLocalToProjection,\n      corners[cornerIndex],\n      cornersClipSpace[cornerIndex],\n    );\n  }\n\n  for (cornerIndex = 0; cornerIndex < cornersLength; cornerIndex++) {\n    const position = cornersClipSpace[cornerIndex];\n    if (position.z >= -position.w) {\n      // Position is past near plane, so there's no need to clip.\n      const ndcX = position.x / position.w;\n      const ndcY = position.y / position.w;\n      ndcMinX = Math.min(ndcMinX, ndcX);\n      ndcMaxX = Math.max(ndcMaxX, ndcX);\n      ndcMinY = Math.min(ndcMinY, ndcY);\n      ndcMaxY = Math.max(ndcMaxY, ndcY);\n    } else {\n      for (let neighborIndex = 0; neighborIndex < 3; neighborIndex++) {\n        const neighborVertexIndex =\n          vertexNeighborIndices[cornerIndex * 3 + neighborIndex];\n        const neighborPosition = cornersClipSpace[neighborVertexIndex];\n        if (neighborPosition.z >= -neighborPosition.w) {\n          // Position is behind the near plane and neighbor is after, so get intersection point on the near plane.\n          const distanceToPlaneFromPosition = position.z + position.w;\n          const distanceToPlaneFromNeighbor =\n            neighborPosition.z + neighborPosition.w;\n          const t =\n            distanceToPlaneFromPosition /\n            (distanceToPlaneFromPosition - distanceToPlaneFromNeighbor);\n\n          const intersect = Cartesian4.lerp(\n            position,\n            neighborPosition,\n            t,\n            scratchIntersect,\n          );\n          const intersectNdcX = intersect.x / intersect.w;\n          const intersectNdcY = intersect.y / intersect.w;\n          ndcMinX = Math.min(ndcMinX, intersectNdcX);\n          ndcMaxX = Math.max(ndcMaxX, intersectNdcX);\n          ndcMinY = Math.min(ndcMinY, intersectNdcY);\n          ndcMaxY = Math.max(ndcMaxY, intersectNdcY);\n        }\n      }\n    }\n  }\n\n  // Clamp the NDC values to -1 to +1 range even if they extend much further.\n  ndcMinX = CesiumMath.clamp(ndcMinX, -1.0, +1.0);\n  ndcMinY = CesiumMath.clamp(ndcMinY, -1.0, +1.0);\n  ndcMaxX = CesiumMath.clamp(ndcMaxX, -1.0, +1.0);\n  ndcMaxY = CesiumMath.clamp(ndcMaxY, -1.0, +1.0);\n  result = Cartesian4.fromElements(ndcMinX, ndcMinY, ndcMaxX, ndcMaxY, result);\n\n  return result;\n}\n\nconst polylineAxisDistance = 30000000.0;\nconst polylineXAxis = new Cartesian3(polylineAxisDistance, 0.0, 0.0);\nconst polylineYAxis = new Cartesian3(0.0, polylineAxisDistance, 0.0);\nconst polylineZAxis = new Cartesian3(0.0, 0.0, polylineAxisDistance);\n\n/**\n * Draws the tile bounding boxes and axes.\n *\n * @function\n *\n * @param {VoxelPrimitive} that\n * @param {FrameState} frameState\n *\n * @private\n */\nfunction debugDraw(that, frameState) {\n  const traversal = that._traversal;\n  const polylines = that._debugPolylines;\n  polylines.removeAll();\n\n  function makePolylineLineSegment(startPos, endPos, color, thickness) {\n    polylines.add({\n      positions: [startPos, endPos],\n      width: thickness,\n      material: Material.fromType(\"Color\", {\n        color: color,\n      }),\n    });\n  }\n\n  function makePolylineBox(orientedBoundingBox, color, thickness) {\n    // Normally would want to use a scratch variable to store the corners, but\n    // polylines don't clone the positions.\n    const corners = orientedBoundingBox.computeCorners();\n    makePolylineLineSegment(corners[0], corners[1], color, thickness);\n    makePolylineLineSegment(corners[2], corners[3], color, thickness);\n    makePolylineLineSegment(corners[4], corners[5], color, thickness);\n    makePolylineLineSegment(corners[6], corners[7], color, thickness);\n    makePolylineLineSegment(corners[0], corners[2], color, thickness);\n    makePolylineLineSegment(corners[4], corners[6], color, thickness);\n    makePolylineLineSegment(corners[1], corners[3], color, thickness);\n    makePolylineLineSegment(corners[5], corners[7], color, thickness);\n    makePolylineLineSegment(corners[0], corners[4], color, thickness);\n    makePolylineLineSegment(corners[2], corners[6], color, thickness);\n    makePolylineLineSegment(corners[1], corners[5], color, thickness);\n    makePolylineLineSegment(corners[3], corners[7], color, thickness);\n  }\n\n  function drawTile(tile) {\n    if (!traversal.isRenderable(tile)) {\n      return;\n    }\n\n    const level = tile.level;\n    const startThickness = 5.0;\n    const thickness = Math.max(1.0, startThickness / Math.pow(2.0, level));\n    const colors = [Color.RED, Color.LIME, Color.BLUE];\n    const color = colors[level % 3];\n\n    makePolylineBox(tile.orientedBoundingBox, color, thickness);\n\n    if (defined(tile.children)) {\n      for (let i = 0; i < 8; i++) {\n        drawTile(tile.children[i]);\n      }\n    }\n  }\n\n  makePolylineBox(that._shape.orientedBoundingBox, Color.WHITE, 5.0);\n\n  drawTile(traversal.rootNode);\n\n  const axisThickness = 10.0;\n  makePolylineLineSegment(\n    Cartesian3.ZERO,\n    polylineXAxis,\n    Color.RED,\n    axisThickness,\n  );\n  makePolylineLineSegment(\n    Cartesian3.ZERO,\n    polylineYAxis,\n    Color.LIME,\n    axisThickness,\n  );\n  makePolylineLineSegment(\n    Cartesian3.ZERO,\n    polylineZAxis,\n    Color.BLUE,\n    axisThickness,\n  );\n\n  polylines.update(frameState);\n}\n\n/**\n * The default custom shader used by the primitive.\n *\n * @type {CustomShader}\n * @constant\n * @readonly\n *\n * @private\n */\nVoxelPrimitive.DefaultCustomShader = new CustomShader({\n  fragmentShaderText: `void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)\n{\n    material.diffuse = vec3(1.0);\n    material.alpha = 1.0;\n}`,\n});\n\nfunction DefaultVoxelProvider() {\n  this.ready = true;\n  this.shape = VoxelShapeType.BOX;\n  this.dimensions = new Cartesian3(1, 1, 1);\n  this.names = [\"data\"];\n  this.types = [MetadataType.SCALAR];\n  this.componentTypes = [MetadataComponentType.FLOAT32];\n  this.maximumTileCount = 1;\n}\n\nDefaultVoxelProvider.prototype.requestData = function (options) {\n  const tileLevel = defined(options) ? (options.tileLevel ?? 0) : 0;\n  if (tileLevel >= 1) {\n    return undefined;\n  }\n\n  const content = new VoxelContent({ metadata: [new Float32Array(1)] });\n  return Promise.resolve(content);\n};\n\nVoxelPrimitive.DefaultProvider = new DefaultVoxelProvider();\n\nexport default VoxelPrimitive;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Provides voxel data. Intended to be used with {@link VoxelPrimitive}.\n * This type describes an interface and is not intended to be instantiated directly.\n *\n * @alias VoxelProvider\n * @constructor\n *\n * @see Cesium3DTilesVoxelProvider\n * @see VoxelPrimitive\n * @see VoxelShapeType\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction VoxelProvider() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(VoxelProvider.prototype, {\n  /**\n   * A transform from local space to global space.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   * @readonly\n   */\n  globalTransform: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * A transform from shape space to local space.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {Matrix4}\n   * @default Matrix4.IDENTITY\n   * @readonly\n   */\n  shapeTransform: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the {@link VoxelShapeType}\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {VoxelShapeType}\n   * @readonly\n   */\n  shape: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the minimum bounds.\n   * If undefined, the shape's default minimum bounds will be used instead.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {Cartesian3|undefined}\n   * @readonly\n   */\n  minBounds: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the maximum bounds.\n   * If undefined, the shape's default maximum bounds will be used instead.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {Cartesian3|undefined}\n   * @readonly\n   */\n  maxBounds: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the number of voxels per dimension of a tile. This is the same for all tiles in the dataset.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {Cartesian3}\n   * @readonly\n   */\n  dimensions: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the number of padding voxels before the tile. This improves rendering quality when sampling the edge of a tile, but it increases memory usage.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   * @readonly\n   */\n  paddingBefore: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the number of padding voxels after the tile. This improves rendering quality when sampling the edge of a tile, but it increases memory usage.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {Cartesian3}\n   * @default Cartesian3.ZERO\n   * @readonly\n   */\n  paddingAfter: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the metadata names.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {string[]}\n   * @readonly\n   */\n  names: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the metadata types.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {MetadataType[]}\n   * @readonly\n   */\n  types: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the metadata component types.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {MetadataComponentType[]}\n   * @readonly\n   */\n  componentTypes: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the metadata minimum values.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {number[][]|undefined}\n   * @readonly\n   */\n  minimumValues: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the metadata maximum values.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {number[][]|undefined}\n   * @readonly\n   */\n  maximumValues: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * The maximum number of tiles that exist for this provider.\n   * This value is used as a hint to the voxel renderer to allocate an appropriate amount of GPU memory.\n   * If this value is not known it can be undefined.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumTileCount: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * The number of levels of detail containing available tiles in the tileset.\n   *\n   * @type {number|undefined}\n   * @readonly\n   */\n  availableLevels: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the number of keyframes in the dataset.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   * @private\n   */\n  keyframeCount: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * Gets the {@link TimeIntervalCollection} for the dataset,\n   * or undefined if it doesn't have timestamps.\n   *\n   * @memberof VoxelProvider.prototype\n   * @type {TimeIntervalCollection|undefined}\n   * @readonly\n   * @private\n   */\n  timeIntervalCollection: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Requests the data for a given tile.\n *\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.tileLevel=0] The tile's level.\n * @param {number} [options.tileX=0] The tile's X coordinate.\n * @param {number} [options.tileY=0] The tile's Y coordinate.\n * @param {number} [options.tileZ=0] The tile's Z coordinate.\n * @privateparam {number} [options.keyframe=0] The requested keyframe.\n * @returns {Promise<VoxelContent>|undefined} A promise resolving to a VoxelContent containing the data for the tile, or undefined if the request could not be scheduled this frame.\n */\nVoxelProvider.prototype.requestData = function (options) {\n  DeveloperError.throwInstantiationError();\n};\n\nexport default VoxelProvider;\n","import Cartesian3 from \"../Core/Cartesian3.js\";\nimport combine from \"../Core/combine.js\";\nimport defined from \"../Core/defined.js\";\nimport ShaderBuilder from \"../Renderer/ShaderBuilder.js\";\nimport ShaderDestination from \"../Renderer/ShaderDestination.js\";\nimport VoxelUtils from \"../Shaders/Voxels/VoxelUtils.js\";\nimport VoxelFS from \"../Shaders/Voxels/VoxelFS.js\";\nimport VoxelVS from \"../Shaders/Voxels/VoxelVS.js\";\nimport IntersectionUtils from \"../Shaders/Voxels/IntersectionUtils.js\";\nimport IntersectDepth from \"../Shaders/Voxels/IntersectDepth.js\";\nimport IntersectPlane from \"../Shaders/Voxels/IntersectPlane.js\";\nimport IntersectLongitude from \"../Shaders/Voxels/IntersectLongitude.js\";\nimport IntersectBox from \"../Shaders/Voxels/IntersectBox.js\";\nimport IntersectCylinder from \"../Shaders/Voxels/IntersectCylinder.js\";\nimport IntersectEllipsoid from \"../Shaders/Voxels/IntersectEllipsoid.js\";\nimport Intersection from \"../Shaders/Voxels/Intersection.js\";\nimport convertLocalToBoxUv from \"../Shaders/Voxels/convertLocalToBoxUv.js\";\nimport convertLocalToCylinderUv from \"../Shaders/Voxels/convertLocalToCylinderUv.js\";\nimport convertLocalToEllipsoidUv from \"../Shaders/Voxels/convertLocalToEllipsoidUv.js\";\nimport Octree from \"../Shaders/Voxels/Octree.js\";\nimport Megatexture from \"../Shaders/Voxels/Megatexture.js\";\nimport VoxelMetadataOrder from \"./VoxelMetadataOrder.js\";\n\n/**\n * Set up render resources, including basic shader code, for rendering\n * a Voxel primitive.\n * The shader code generated by this function may be modified in later stages.\n * @constructor\n * @param {VoxelPrimitive} primitive\n *\n * @private\n */\nfunction VoxelRenderResources(primitive) {\n  const shaderBuilder = new ShaderBuilder();\n  /**\n   * An object used to build a shader incrementally. Each pipeline stage\n   * may add lines of shader code to this object.\n   *\n   * @type {ShaderBuilder}\n   * @readonly\n   *\n   * @private\n   */\n  this.shaderBuilder = shaderBuilder;\n\n  // Custom shader uniforms\n  const customShader = primitive._customShader;\n  const uniformMap = combine(primitive._uniformMap, customShader.uniformMap);\n  primitive._uniformMap = uniformMap;\n\n  const customShaderUniforms = customShader.uniforms;\n  for (const uniformName in customShaderUniforms) {\n    if (customShaderUniforms.hasOwnProperty(uniformName)) {\n      const uniform = customShaderUniforms[uniformName];\n      shaderBuilder.addUniform(\n        uniform.type,\n        uniformName,\n        ShaderDestination.FRAGMENT,\n      );\n    }\n  }\n  // The reason this uniform is added by shader builder is because some of the\n  // dynamically generated shader code reads from it.\n  shaderBuilder.addUniform(\n    \"sampler3D\",\n    \"u_megatextureTextures[METADATA_COUNT]\",\n    ShaderDestination.FRAGMENT,\n  );\n\n  /**\n   * A dictionary mapping uniform name to functions that return the uniform\n   * values.\n   * @private\n   * @type {Object<string, Function>}\n   */\n  this.uniformMap = uniformMap;\n\n  const clippingPlanes = primitive._clippingPlanes;\n  const clippingPlanesLength =\n    defined(clippingPlanes) && clippingPlanes.enabled\n      ? clippingPlanes.length\n      : 0;\n\n  this.clippingPlanes = clippingPlanes;\n  this.clippingPlanesLength = clippingPlanesLength;\n\n  const renderBoundPlanes = primitive._shape.renderBoundPlanes;\n  const renderBoundPlanesLength = renderBoundPlanes?.length ?? 0;\n\n  this.renderBoundPlanes = renderBoundPlanes;\n  this.renderBoundPlanesLength = renderBoundPlanesLength;\n\n  // Build shader\n  shaderBuilder.addVertexLines([VoxelVS]);\n\n  if (primitive.provider.metadataOrder === VoxelMetadataOrder.Y_UP) {\n    shaderBuilder.addDefine(\n      \"Y_UP_METADATA_ORDER\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n  const shapeType = primitive._provider.shape;\n  if (shapeType === \"BOX\") {\n    shaderBuilder.addDefine(\"SHAPE_BOX\", undefined, ShaderDestination.FRAGMENT);\n  } else if (shapeType === \"CYLINDER\") {\n    shaderBuilder.addDefine(\n      \"SHAPE_CYLINDER\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  } else if (shapeType === \"ELLIPSOID\") {\n    shaderBuilder.addDefine(\n      \"SHAPE_ELLIPSOID\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  shaderBuilder.addFragmentLines([\n    customShader.fragmentShaderText,\n    \"#line 0\",\n    Octree,\n    VoxelUtils,\n    Megatexture,\n    IntersectionUtils,\n    IntersectPlane,\n    IntersectDepth,\n  ]);\n\n  if (clippingPlanesLength > 0) {\n    shaderBuilder.addDefine(\n      \"CLIPPING_PLANES\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addDefine(\n      \"CLIPPING_PLANES_COUNT\",\n      clippingPlanesLength,\n      ShaderDestination.FRAGMENT,\n    );\n    if (clippingPlanes.unionClippingRegions) {\n      shaderBuilder.addDefine(\n        \"CLIPPING_PLANES_UNION\",\n        undefined,\n        ShaderDestination.FRAGMENT,\n      );\n    }\n  }\n\n  if (primitive._depthTest) {\n    shaderBuilder.addDefine(\n      \"DEPTH_TEST\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  if (shapeType === \"BOX\") {\n    shaderBuilder.addFragmentLines([\n      convertLocalToBoxUv,\n      IntersectBox,\n      Intersection,\n    ]);\n  } else if (shapeType === \"CYLINDER\") {\n    shaderBuilder.addFragmentLines([\n      convertLocalToCylinderUv,\n      IntersectLongitude,\n      IntersectCylinder,\n      Intersection,\n    ]);\n  } else if (shapeType === \"ELLIPSOID\") {\n    shaderBuilder.addFragmentLines([\n      convertLocalToEllipsoidUv,\n      IntersectLongitude,\n      IntersectEllipsoid,\n      Intersection,\n    ]);\n  }\n\n  shaderBuilder.addFragmentLines([VoxelFS]);\n\n  const shape = primitive._shape;\n  const shapeDefines = shape.shaderDefines;\n  for (const key in shapeDefines) {\n    if (shapeDefines.hasOwnProperty(key)) {\n      let value = shapeDefines[key];\n      // if value is undefined, don't define it\n      // if value is true, define it to nothing\n      if (defined(value)) {\n        value = value === true ? undefined : value;\n        shaderBuilder.addDefine(key, value, ShaderDestination.FRAGMENT);\n      }\n    }\n  }\n\n  // Count how many intersections the shader will do.\n  let intersectionCount = shape.shaderMaximumIntersectionsLength;\n  if (clippingPlanesLength > 0) {\n    shaderBuilder.addDefine(\n      \"CLIPPING_PLANES_INTERSECTION_INDEX\",\n      intersectionCount,\n      ShaderDestination.FRAGMENT,\n    );\n    if (clippingPlanesLength === 1) {\n      intersectionCount += 1;\n    } else if (clippingPlanes.unionClippingRegions) {\n      intersectionCount += 2;\n    } else {\n      intersectionCount += 1;\n    }\n  }\n  if (primitive._depthTest) {\n    shaderBuilder.addDefine(\n      \"DEPTH_INTERSECTION_INDEX\",\n      intersectionCount,\n      ShaderDestination.FRAGMENT,\n    );\n    intersectionCount += 1;\n  }\n  shaderBuilder.addDefine(\n    \"INTERSECTION_COUNT\",\n    intersectionCount,\n    ShaderDestination.FRAGMENT,\n  );\n\n  // Additional fragment shader defines\n  if (\n    !Cartesian3.equals(primitive.paddingBefore, Cartesian3.ZERO) ||\n    !Cartesian3.equals(primitive.paddingAfter, Cartesian3.ZERO)\n  ) {\n    shaderBuilder.addDefine(\"PADDING\", undefined, ShaderDestination.FRAGMENT);\n  }\n  // Allow reading from log depth texture, but don't write log depth anywhere.\n  // Note: This needs to be set even if depthTest is off because it affects the\n  // derived command system.\n  if (primitive._useLogDepth) {\n    shaderBuilder.addDefine(\n      \"LOG_DEPTH_READ_ONLY\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n  const traversal = primitive._traversal;\n  shaderBuilder.addDefine(\n    \"SAMPLE_COUNT\",\n    `${traversal._sampleCount}`,\n    ShaderDestination.FRAGMENT,\n  );\n}\n\nexport default VoxelRenderResources;\n","import DeveloperError from \"../Core/DeveloperError.js\";\n\n/**\n * Controls per-shape behavior for culling and rendering voxel grids.\n * This type describes an interface and is not intended to be instantiated directly.\n *\n * @alias VoxelShape\n * @constructor\n *\n * @see VoxelBoxShape\n * @see VoxelEllipsoidShape\n * @see VoxelCylinderShape\n * @see VoxelShapeType\n *\n * @private\n */\nfunction VoxelShape() {\n  DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(VoxelShape.prototype, {\n  /**\n   * An oriented bounding box containing the bounded shape.\n   *\n   * @memberof VoxelShape.prototype\n   * @type {OrientedBoundingBox}\n   * @readonly\n   * @private\n   */\n  orientedBoundingBox: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * A bounding sphere containing the bounded shape.\n   *\n   * @memberof VoxelShape.prototype\n   * @type {BoundingSphere}\n   * @readonly\n   * @private\n   */\n  boundingSphere: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * A transformation matrix containing the bounded shape.\n   *\n   * @memberof VoxelShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  boundTransform: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * A transformation matrix containing the shape, ignoring the bounds.\n   *\n   * @memberof VoxelShape.prototype\n   * @type {Matrix4}\n   * @readonly\n   * @private\n   */\n  shapeTransform: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * @memberof VoxelShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderUniforms: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * @memberof VoxelShape.prototype\n   * @type {Object<string, any>}\n   * @readonly\n   * @private\n   */\n  shaderDefines: {\n    get: DeveloperError.throwInstantiationError,\n  },\n\n  /**\n   * The maximum number of intersections against the shape for any ray direction.\n   * @memberof VoxelShape.prototype\n   * @type {number}\n   * @readonly\n   * @private\n   */\n  shaderMaximumIntersectionsLength: {\n    get: DeveloperError.throwInstantiationError,\n  },\n});\n\n/**\n * Update the shape's state.\n * @private\n * @param {Matrix4} modelMatrix The model matrix.\n * @param {Cartesian3} minBounds The minimum bounds.\n * @param {Cartesian3} maxBounds The maximum bounds.\n * @param {Cartesian3} [clipMinBounds] The minimum clip bounds.\n * @param {Cartesian3} [clipMaxBounds] The maximum clip bounds.\n * @returns {boolean} Whether the shape is visible.\n */\nVoxelShape.prototype.update = DeveloperError.throwInstantiationError;\n\n/**\n * Update any view-dependent transforms.\n * @private\n * @param {FrameState} frameState The frame state.\n */\nVoxelShape.prototype.updateViewTransforms =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Converts a local coordinate to the shape's UV space.\n * @private\n * @param {Cartesian3} positionLocal The local coordinate to convert.\n * @param {Cartesian3} result The Cartesian3 to store the result in.\n * @returns {Cartesian3} The converted UV coordinate.\n */\nVoxelShape.prototype.convertLocalToShapeUvSpace =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Computes an oriented bounding box for a specified tile.\n * @private\n * @param {number} tileLevel The tile's level.\n * @param {number} tileX The tile's x coordinate.\n * @param {number} tileY The tile's y coordinate.\n * @param {number} tileZ The tile's z coordinate.\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified tile.\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelShape.prototype.computeOrientedBoundingBoxForTile =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Computes an oriented bounding box for a specified sample within a specified tile.\n * @private\n * @param {SpatialNode} spatialNode The spatial node containing the sample\n * @param {Cartesian3} tileDimensions The size of the tile in number of samples, before padding\n * @param {Cartesian3} tileUv The sample coordinate within the tile\n * @param {OrientedBoundingBox} result The oriented bounding box that will be set to enclose the specified sample\n * @returns {OrientedBoundingBox} The oriented bounding box.\n */\nVoxelShape.prototype.computeOrientedBoundingBoxForSample =\n  DeveloperError.throwInstantiationError;\n\n/**\n * Defines the minimum bounds of the shape. The meaning can vary per-shape.\n *\n * @type {Cartesian3}\n * @constant\n * @readonly\n *\n * @private\n */\nVoxelShape.DefaultMinBounds = DeveloperError.throwInstantiationError;\n\n/**\n * Defines the maximum bounds of the shape. The meaning can vary per-shape.\n *\n * @type {Cartesian3}\n * @constant\n * @readonly\n *\n * @private\n */\nVoxelShape.DefaultMaxBounds = DeveloperError.throwInstantiationError;\n\nexport default VoxelShape;\n","import DeveloperError from \"../Core/DeveloperError.js\";\nimport VoxelBoxShape from \"./VoxelBoxShape.js\";\nimport VoxelCylinderShape from \"./VoxelCylinderShape.js\";\nimport VoxelEllipsoidShape from \"./VoxelEllipsoidShape.js\";\n\n/**\n * An enum of voxel shapes. The shape controls how the voxel grid is mapped to 3D space.\n *\n * @enum {string}\n *\n * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.\n */\nconst VoxelShapeType = {\n  /**\n   * A box shape.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  BOX: \"BOX\",\n  /**\n   * An ellipsoid shape.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  ELLIPSOID: \"ELLIPSOID\",\n  /**\n   * A cylinder shape.\n   *\n   * @type {string}\n   * @constant\n   * @private\n   */\n  CYLINDER: \"CYLINDER\",\n};\n\n/**\n * Gets the minimum bounds.\n * @param {VoxelShapeType} shapeType The voxel shape type.\n * @returns {Cartesian3} The minimum bounds.\n */\nVoxelShapeType.getMinBounds = function (shapeType) {\n  switch (shapeType) {\n    case VoxelShapeType.BOX:\n      return VoxelBoxShape.DefaultMinBounds;\n    case VoxelShapeType.ELLIPSOID:\n      return VoxelEllipsoidShape.DefaultMinBounds;\n    case VoxelShapeType.CYLINDER:\n      return VoxelCylinderShape.DefaultMinBounds;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(`Invalid shape type ${shapeType}`);\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Gets the maximum bounds.\n * @param {VoxelShapeType} shapeType The voxel shape type.\n * @returns {Cartesian3} The maximum bounds.\n */\nVoxelShapeType.getMaxBounds = function (shapeType) {\n  switch (shapeType) {\n    case VoxelShapeType.BOX:\n      return VoxelBoxShape.DefaultMaxBounds;\n    case VoxelShapeType.ELLIPSOID:\n      return VoxelEllipsoidShape.DefaultMaxBounds;\n    case VoxelShapeType.CYLINDER:\n      return VoxelCylinderShape.DefaultMaxBounds;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(`Invalid shape type ${shapeType}`);\n    //>>includeEnd('debug');\n  }\n};\n\n/**\n * Converts a shape type to a constructor that can be used to create a shape\n * object or get per-shape properties like DefaultMinBounds and\n * DefaultMaxBounds.\n *\n * @param {VoxelShapeType} shapeType The shape type.\n * @returns {Function} The shape's constructor.\n *\n * @private\n */\nVoxelShapeType.getShapeConstructor = function (shapeType) {\n  switch (shapeType) {\n    case VoxelShapeType.BOX:\n      return VoxelBoxShape;\n    case VoxelShapeType.ELLIPSOID:\n      return VoxelEllipsoidShape;\n    case VoxelShapeType.CYLINDER:\n      return VoxelCylinderShape;\n    //>>includeStart('debug', pragmas.debug);\n    default:\n      throw new DeveloperError(`Invalid shape type ${shapeType}`);\n    //>>includeEnd('debug');\n  }\n};\n\nexport default Object.freeze(VoxelShapeType);\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport CullingVolume from \"../Core/CullingVolume.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DoubleEndedPriorityQueue from \"../Core/DoubleEndedPriorityQueue.js\";\nimport getTimestamp from \"../Core/getTimestamp.js\";\nimport KeyframeNode from \"./KeyframeNode.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport Megatexture from \"./Megatexture.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport SpatialNode from \"./SpatialNode.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\n\n/**\n * Handles tileset traversal, tile requests, and GPU resources. Intended to be\n * private and paired with a {@link VoxelPrimitive}, which has a user-facing API.\n *\n * @alias VoxelTraversal\n * @constructor\n *\n * @param {VoxelPrimitive} primitive The voxel primitive for which this traversal will be used.\n * @param {Context} context The context in which to create GPU resources.\n * @param {number} keyframeCount The number of keyframes in the tileset.\n * @param {number} [maximumTextureMemoryByteLength=536870912] The maximum amount of memory to use for textures.\n *\n * @private\n */\nfunction VoxelTraversal(\n  primitive,\n  context,\n  keyframeCount,\n  maximumTextureMemoryByteLength,\n) {\n  const { provider, dimensions, inputDimensions } = primitive;\n  const { types, componentTypes } = provider;\n\n  if (defined(maximumTextureMemoryByteLength)) {\n    maximumTextureMemoryByteLength = Math.min(\n      Math.max(0, maximumTextureMemoryByteLength),\n      512 * 1024 * 1024,\n    );\n  } else {\n    maximumTextureMemoryByteLength = 128 * 1024 * 1024;\n  }\n\n  /**\n   * @type {VoxelPrimitive}\n   * @private\n   */\n  this._primitive = primitive;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this.textureMemoryByteLength = 0;\n\n  /**\n   * @type {Megatexture[]}\n   * @readonly\n   */\n  this.megatextures = new Array(types.length);\n\n  const providerTileCount = defined(provider.maximumTileCount)\n    ? provider.maximumTileCount\n    : defined(provider.availableLevels)\n      ? (8 ** provider.availableLevels - 1) / 7\n      : undefined;\n\n  for (let i = 0; i < types.length; i++) {\n    const type = types[i];\n    const componentCount = MetadataType.getComponentCount(type);\n    const componentType = componentTypes[i];\n\n    this.megatextures[i] = new Megatexture(\n      context,\n      inputDimensions,\n      componentCount,\n      componentType,\n      maximumTextureMemoryByteLength,\n      providerTileCount,\n    );\n\n    this.textureMemoryByteLength +=\n      this.megatextures[i].textureMemoryByteLength;\n  }\n\n  const maximumTileCount = this.megatextures[0].maximumTileCount;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._simultaneousRequestCount = 0;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._debugPrint = false;\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._calculateStatistics = this._primitive._calculateStatistics ?? false;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._frameNumber = 0;\n\n  const shape = primitive._shape;\n\n  /**\n   * @type {SpatialNode}\n   * @readonly\n   */\n  this.rootNode = new SpatialNode(0, 0, 0, 0, undefined, shape, dimensions);\n\n  /**\n   * @type {DoubleEndedPriorityQueue}\n   * @private\n   */\n  this._priorityQueue = new DoubleEndedPriorityQueue({\n    maximumLength: maximumTileCount,\n    comparator: KeyframeNode.priorityComparator,\n  });\n\n  /**\n   * @type {KeyframeNode[]}\n   * @private\n   */\n  this._highPriorityKeyframeNodes = new Array(maximumTileCount);\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._highPriorityKeyframeNodeCount = 0;\n\n  /**\n   * @type {KeyframeNode[]}\n   * @private\n   */\n  this._keyframeNodesInMegatexture = new Array(maximumTileCount);\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._keyframeCount = keyframeCount;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._sampleCount = undefined;\n\n  /**\n   * @type {number}\n   * @private\n   */\n  this._keyframeLocation = 0;\n\n  /**\n   * @type {number[]}\n   * @private\n   */\n  this._binaryTreeKeyframeWeighting = new Array(keyframeCount);\n\n  /**\n   * @type {boolean}\n   * @private\n   */\n  this._initialTilesLoaded = false;\n\n  const binaryTreeKeyframeWeighting = this._binaryTreeKeyframeWeighting;\n  binaryTreeKeyframeWeighting[0] = 0;\n  binaryTreeKeyframeWeighting[keyframeCount - 1] = 0;\n  binaryTreeWeightingRecursive(\n    binaryTreeKeyframeWeighting,\n    1,\n    keyframeCount - 2,\n    0,\n  );\n\n  const internalNodeTexelCount = 9;\n  const internalNodeTextureDimensionX = 2048;\n  const internalNodeTilesPerRow = Math.floor(\n    internalNodeTextureDimensionX / internalNodeTexelCount,\n  );\n  const internalNodeTextureDimensionY = Math.ceil(\n    maximumTileCount / internalNodeTilesPerRow,\n  );\n\n  /**\n   * @type {Texture}\n   * @readonly\n   */\n  this.internalNodeTexture = new Texture({\n    context: context,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    flipY: false,\n    width: internalNodeTextureDimensionX,\n    height: internalNodeTextureDimensionY,\n    sampler: new Sampler({\n      minificationFilter: TextureMinificationFilter.NEAREST,\n      magnificationFilter: TextureMagnificationFilter.NEAREST,\n    }),\n  });\n\n  /**\n   * @type {number}\n   * @readonly\n   */\n  this.internalNodeTilesPerRow = internalNodeTilesPerRow;\n\n  /**\n   * @type {Cartesian2}\n   * @readonly\n   */\n  this.internalNodeTexelSizeUv = new Cartesian2(\n    1.0 / internalNodeTextureDimensionX,\n    1.0 / internalNodeTextureDimensionY,\n  );\n\n  /**\n   * Only generated when there are two or more samples.\n   * @type {Texture}\n   * @readonly\n   */\n  this.leafNodeTexture = undefined;\n\n  /**\n   * Only generated when there are two or more samples.\n   * @type {number}\n   * @readonly\n   */\n  this.leafNodeTilesPerRow = undefined;\n\n  /**\n   * Only generated when there are two or more samples.\n   * @type {Cartesian2}\n   * @readonly\n   */\n  this.leafNodeTexelSizeUv = new Cartesian2();\n}\n\n/**\n * Finds a keyframe node in the traversal\n *\n * @param {number} megatextureIndex\n * @returns {KeyframeNode}\n */\nVoxelTraversal.prototype.findKeyframeNode = function (megatextureIndex) {\n  return this._keyframeNodesInMegatexture.find(function (keyframeNode) {\n    return keyframeNode.megatextureIndex === megatextureIndex;\n  });\n};\n\nfunction binaryTreeWeightingRecursive(arr, start, end, depth) {\n  if (start > end) {\n    return;\n  }\n  const mid = Math.floor((start + end) / 2);\n  arr[mid] = depth;\n  binaryTreeWeightingRecursive(arr, start, mid - 1, depth + 1);\n  binaryTreeWeightingRecursive(arr, mid + 1, end, depth + 1);\n}\n\nVoxelTraversal.simultaneousRequestCountMaximum = 50;\n\n/**\n * @param {FrameState} frameState\n * @param {number} keyframeLocation\n * @param {boolean} recomputeBoundingVolumes\n * @param {boolean} pauseUpdate\n */\nVoxelTraversal.prototype.update = function (\n  frameState,\n  keyframeLocation,\n  recomputeBoundingVolumes,\n  pauseUpdate,\n) {\n  const primitive = this._primitive;\n  const context = frameState.context;\n  const maximumTileCount = this.megatextures[0].maximumTileCount;\n  const keyframeCount = this._keyframeCount;\n\n  const levelBlendFactor = primitive._levelBlendFactor;\n  const hasLevelBlendFactor = levelBlendFactor > 0.0;\n  const hasKeyframes = keyframeCount > 1;\n  const sampleCount = (hasLevelBlendFactor ? 2 : 1) * (hasKeyframes ? 2 : 1);\n  this._sampleCount = sampleCount;\n\n  const useLeafNodes = sampleCount >= 2;\n  if (useLeafNodes && !defined(this.leafNodeTexture)) {\n    const leafNodeTexelCount = 2;\n    const leafNodeTextureDimensionX = 1024;\n    const leafNodeTilesPerRow = Math.floor(\n      leafNodeTextureDimensionX / leafNodeTexelCount,\n    );\n    const leafNodeTextureDimensionY = Math.ceil(\n      maximumTileCount / leafNodeTilesPerRow,\n    );\n\n    this.leafNodeTexture = new Texture({\n      context: context,\n      pixelFormat: PixelFormat.RGBA,\n      pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n      flipY: false,\n      width: leafNodeTextureDimensionX,\n      height: leafNodeTextureDimensionY,\n      sampler: new Sampler({\n        minificationFilter: TextureMinificationFilter.NEAREST,\n        magnificationFilter: TextureMagnificationFilter.NEAREST,\n      }),\n    });\n    this.leafNodeTexelSizeUv = Cartesian2.fromElements(\n      1.0 / leafNodeTextureDimensionX,\n      1.0 / leafNodeTextureDimensionY,\n      this.leafNodeTexelSizeUv,\n    );\n    this.leafNodeTilesPerRow = leafNodeTilesPerRow;\n  } else if (!useLeafNodes && defined(this.leafNodeTexture)) {\n    this.leafNodeTexture = this.leafNodeTexture.destroy();\n  }\n\n  this._keyframeLocation = CesiumMath.clamp(\n    keyframeLocation,\n    0.0,\n    keyframeCount - 1,\n  );\n\n  if (recomputeBoundingVolumes) {\n    recomputeBoundingVolumesRecursive(this, this.rootNode);\n  }\n\n  if (pauseUpdate) {\n    return;\n  }\n\n  this._frameNumber = frameState.frameNumber;\n  const timestamp0 = getTimestamp();\n  selectKeyframeNodes(this, frameState);\n  updateKeyframeNodes(this, frameState);\n  const timestamp1 = getTimestamp();\n  generateOctree(this, sampleCount, levelBlendFactor);\n  const timestamp2 = getTimestamp();\n\n  const checkEventListeners =\n    primitive.loadProgress.numberOfListeners > 0 ||\n    primitive.allTilesLoaded.numberOfListeners > 0 ||\n    primitive.initialTilesLoaded.numberOfListeners > 0;\n\n  if (this._debugPrint || this._calculateStatistics || checkEventListeners) {\n    const loadAndUnloadTimeMs = timestamp1 - timestamp0;\n    const generateOctreeTimeMs = timestamp2 - timestamp1;\n    const totalTimeMs = timestamp2 - timestamp0;\n    postPassesUpdate(\n      this,\n      frameState,\n      loadAndUnloadTimeMs,\n      generateOctreeTimeMs,\n      totalTimeMs,\n    );\n  }\n};\n\n/**\n * Check if a node is renderable.\n * @param {SpatialNode} tile\n * @returns {boolean}\n */\nVoxelTraversal.prototype.isRenderable = function (tile) {\n  return tile.isRenderable(this._frameNumber);\n};\n\n/**\n * Returns true if this object was destroyed; otherwise, false.\n * <br /><br />\n * If this object was destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.\n *\n * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.\n *\n * @see VoxelTraversal#destroy\n */\nVoxelTraversal.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the WebGL resources held by this object.  Destroying an object allows for deterministic\n * release of WebGL resources, instead of relying on the garbage collector to destroy this object.\n * <br /><br />\n * Once an object is destroyed, it should not be used; calling any function other than\n * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.  Therefore,\n * assign the return value (<code>undefined</code>) to the object as done in the example.\n *\n * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.\n *\n * @see VoxelTraversal#isDestroyed\n *\n * @example\n * voxelTraversal = voxelTraversal && voxelTraversal.destroy();\n */\nVoxelTraversal.prototype.destroy = function () {\n  const megatextures = this.megatextures;\n  const megatextureLength = megatextures.length;\n  for (let i = 0; i < megatextureLength; i++) {\n    megatextures[i] = megatextures[i] && megatextures[i].destroy();\n  }\n  this.textureMemoryByteLength = 0;\n\n  this.internalNodeTexture =\n    this.internalNodeTexture && this.internalNodeTexture.destroy();\n\n  this.leafNodeTexture = this.leafNodeTexture && this.leafNodeTexture.destroy();\n\n  return destroyObject(this);\n};\n\n/**\n * @function\n *\n * @param {VoxelTraversal} that\n * @param {SpatialNode} node\n *\n * @private\n */\nfunction recomputeBoundingVolumesRecursive(that, node) {\n  node.computeBoundingVolumes(that._primitive._shape);\n  if (defined(node.children)) {\n    for (let i = 0; i < 8; i++) {\n      const child = node.children[i];\n      recomputeBoundingVolumesRecursive(that, child);\n    }\n  }\n}\n\n/**\n * @function\n *\n * @param {VoxelTraversal} that\n * @param {KeyframeNode} keyframeNode\n *\n * @private\n */\nfunction requestData(that, keyframeNode) {\n  if (\n    that._simultaneousRequestCount >=\n    VoxelTraversal.simultaneousRequestCountMaximum\n  ) {\n    return;\n  }\n\n  const primitive = that._primitive;\n  const provider = primitive.provider;\n  const { keyframe, spatialNode } = keyframeNode;\n  if (\n    defined(provider.availableLevels) &&\n    spatialNode.level >= provider.availableLevels\n  ) {\n    return;\n  }\n\n  function postRequestSuccess(result) {\n    that._simultaneousRequestCount--;\n    keyframeNode.content = result;\n    keyframeNode.state = defined(result)\n      ? KeyframeNode.LoadState.PROCESSING\n      : KeyframeNode.LoadState.UNAVAILABLE;\n  }\n\n  function postRequestFailure(error) {\n    that._simultaneousRequestCount--;\n    keyframeNode.state = KeyframeNode.LoadState.FAILED;\n    that._primitive.tileFailed.raiseEvent();\n  }\n\n  const requestParameters = {\n    tileLevel: spatialNode.level,\n    tileX: spatialNode.x,\n    tileY: spatialNode.y,\n    tileZ: spatialNode.z,\n    keyframe: keyframe,\n  };\n  const promise = provider.requestData(requestParameters);\n  if (!defined(promise)) {\n    return;\n  }\n  that._simultaneousRequestCount++;\n  keyframeNode.state = KeyframeNode.LoadState.RECEIVING;\n  promise.then(postRequestSuccess).catch(postRequestFailure);\n}\n\n/**\n * @function\n *\n * @param {number} x\n * @returns {number}\n *\n * @private\n */\nfunction mapInfiniteRangeToZeroOne(x) {\n  return x / (1.0 + x);\n}\n\n/**\n * @param {VoxelTraversal} that\n * @param {FrameState} frameState\n *\n * @private\n */\nfunction selectKeyframeNodes(that, frameState) {\n  const frameNumber = that._frameNumber;\n  const priorityQueue = that._priorityQueue;\n\n  // Add all the nodes to the queue, to sort them by priority.\n  priorityQueue.reset();\n  addToQueueRecursive(\n    that.rootNode,\n    CullingVolume.MASK_INDETERMINATE,\n    that,\n    frameState,\n  );\n\n  // Move the nodes from the queue to array of high priority nodes.\n  const highPriorityKeyframeNodes = that._highPriorityKeyframeNodes;\n  let highPriorityKeyframeNodeCount = 0;\n  let highPriorityKeyframeNode;\n  while (priorityQueue.length > 0) {\n    highPriorityKeyframeNode = priorityQueue.removeMaximum();\n    highPriorityKeyframeNode.highPriorityFrameNumber = frameNumber;\n    highPriorityKeyframeNodes[highPriorityKeyframeNodeCount] =\n      highPriorityKeyframeNode;\n    highPriorityKeyframeNodeCount++;\n  }\n  that._highPriorityKeyframeNodeCount = highPriorityKeyframeNodeCount;\n}\n\n/**\n * @param {VoxelTraversal} that\n * @param {FrameState} frameState\n *\n * @private\n */\nfunction updateKeyframeNodes(that, frameState) {\n  const megatexture = that.megatextures[0];\n  const keyframeNodesInMegatextureCount = megatexture.occupiedCount;\n\n  // Sort the list of keyframe nodes in the megatexture by priority, so\n  // we can remove the lowest priority nodes if we need space.\n  const keyframeNodesInMegatexture = that._keyframeNodesInMegatexture;\n  keyframeNodesInMegatexture.length = keyframeNodesInMegatextureCount;\n  keyframeNodesInMegatexture.sort(keyframeNodeSort);\n\n  // Add the high priority nodes to the megatexture,\n  // removing existing lower-priority nodes if necessary.\n  const highPriorityKeyframeNodes = that._highPriorityKeyframeNodes;\n  const highPriorityKeyframeNodeCount = that._highPriorityKeyframeNodeCount;\n  let destroyedCount = 0;\n  let addedCount = 0;\n\n  for (\n    let highPriorityKeyframeNodeIndex = 0;\n    highPriorityKeyframeNodeIndex < highPriorityKeyframeNodeCount;\n    highPriorityKeyframeNodeIndex++\n  ) {\n    const highPriorityKeyframeNode =\n      highPriorityKeyframeNodes[highPriorityKeyframeNodeIndex];\n\n    if (\n      highPriorityKeyframeNode.state === KeyframeNode.LoadState.LOADED ||\n      highPriorityKeyframeNode.spatialNode === undefined\n    ) {\n      // Already loaded, so nothing to do.\n      // Or destroyed when adding a higher priority node\n      continue;\n    }\n    if (highPriorityKeyframeNode.state === KeyframeNode.LoadState.UNLOADED) {\n      requestData(that, highPriorityKeyframeNode);\n    }\n    if (highPriorityKeyframeNode.state === KeyframeNode.LoadState.PROCESSING) {\n      const { content } = highPriorityKeyframeNode;\n      content.update(that._primitive, frameState);\n      if (!content.ready) {\n        continue;\n      }\n      if (!validateMetadata(content.metadata, that)) {\n        highPriorityKeyframeNode.content = undefined;\n        highPriorityKeyframeNode.state = KeyframeNode.LoadState.FAILED;\n        that._primitive.tileFailed.raiseEvent();\n        continue;\n      }\n      let addNodeIndex = 0;\n      if (megatexture.isFull()) {\n        // If the megatexture is full, try removing a discardable node with the lowest priority.\n        addNodeIndex = keyframeNodesInMegatextureCount - 1 - destroyedCount;\n        destroyedCount++;\n\n        const discardNode = keyframeNodesInMegatexture[addNodeIndex];\n        that._primitive.tileUnload.raiseEvent();\n        discardNode.spatialNode.destroyKeyframeNode(\n          discardNode,\n          that.megatextures,\n        );\n      } else {\n        addNodeIndex = keyframeNodesInMegatextureCount + addedCount;\n        addedCount++;\n      }\n      highPriorityKeyframeNode.spatialNode.addKeyframeNodeToMegatextures(\n        highPriorityKeyframeNode,\n        that.megatextures,\n      );\n      highPriorityKeyframeNode.state = KeyframeNode.LoadState.LOADED;\n      keyframeNodesInMegatexture[addNodeIndex] = highPriorityKeyframeNode;\n      that._primitive.tileLoad.raiseEvent();\n    }\n  }\n}\n\nfunction keyframeNodeSort(a, b) {\n  if (a.highPriorityFrameNumber === b.highPriorityFrameNumber) {\n    return b.priority - a.priority;\n  }\n  return b.highPriorityFrameNumber - a.highPriorityFrameNumber;\n}\n\n/**\n * Check if an array of metadata is of the expected type and size\n *\n * @param {TypedArray[]} metadata The metadata to validate\n * @param {VoxelTraversal} traversal The traversal to validate against\n * @returns {boolean} <code>true</code> if the metadata is valid, <code>false</code> otherwise\n *\n * @private\n */\nfunction validateMetadata(metadata, traversal) {\n  const length = traversal._primitive.provider.types.length;\n  if (!Array.isArray(metadata) || metadata.length !== length) {\n    return false;\n  }\n  const { megatextures } = traversal;\n  for (let i = 0; i < length; i++) {\n    const { voxelCountPerTile, channelCount } = megatextures[i];\n    const { x, y, z } = voxelCountPerTile;\n    const tileVoxelCount = x * y * z;\n\n    const data = metadata[i];\n    const expectedLength = tileVoxelCount * channelCount;\n    if (data.length !== expectedLength) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * @param {SpatialNode} spatialNode\n * @param {number} visibilityPlaneMask\n * @param {VoxelTraversal} that\n * @param {FrameState} frameState\n *\n * @private\n */\nfunction addToQueueRecursive(\n  spatialNode,\n  visibilityPlaneMask,\n  that,\n  frameState,\n) {\n  const { camera, context, pixelRatio, frameNumber } = frameState;\n  const { positionWC, frustum } = camera;\n  const screenHeight = context.drawingBufferHeight / pixelRatio;\n  const screenSpaceErrorMultiplier = screenHeight / frustum.sseDenominator;\n\n  spatialNode.computeScreenSpaceError(positionWC, screenSpaceErrorMultiplier);\n\n  visibilityPlaneMask = spatialNode.visibility(frameState, visibilityPlaneMask);\n  if (visibilityPlaneMask === CullingVolume.MASK_OUTSIDE) {\n    return;\n  }\n  spatialNode.visitedFrameNumber = frameNumber;\n\n  const primitive = that._primitive;\n  const shape = primitive._shape;\n  const targetScreenSpaceError = primitive.screenSpaceError;\n  const priorityQueue = that._priorityQueue;\n  const keyframeCount = that._keyframeCount;\n  const previousKeyframe = CesiumMath.clamp(\n    Math.floor(that._keyframeLocation),\n    0,\n    keyframeCount - 2,\n  );\n  const nextKeyframe = previousKeyframe + 1;\n\n  // Create keyframe nodes at the playhead.\n  // If they already exist, nothing will be created.\n  if (keyframeCount === 1) {\n    spatialNode.createKeyframeNode(0);\n  } else if (spatialNode.keyframeNodes.length !== keyframeCount) {\n    for (let k = 0; k < keyframeCount; k++) {\n      spatialNode.createKeyframeNode(k);\n    }\n  }\n  const { screenSpaceError, keyframeNodes } = spatialNode;\n  const ssePriority = mapInfiniteRangeToZeroOne(screenSpaceError);\n\n  let hasLoadedKeyframe = false;\n  for (let i = 0; i < keyframeNodes.length; i++) {\n    const keyframeNode = keyframeNodes[i];\n\n    keyframeNode.priority =\n      10.0 * ssePriority +\n      keyframePriority(\n        previousKeyframe,\n        keyframeNode.keyframe,\n        nextKeyframe,\n        that,\n      );\n\n    if (\n      keyframeNode.state !== KeyframeNode.LoadState.UNAVAILABLE &&\n      keyframeNode.state !== KeyframeNode.LoadState.FAILED &&\n      keyframeNode.priority !== -Number.MAX_VALUE\n    ) {\n      priorityQueue.insert(keyframeNode);\n    }\n    if (keyframeNode.state === KeyframeNode.LoadState.LOADED) {\n      hasLoadedKeyframe = true;\n    }\n  }\n\n  if (screenSpaceError < targetScreenSpaceError || !hasLoadedKeyframe) {\n    // Free up memory\n    spatialNode.children = undefined;\n    return;\n  }\n\n  if (!defined(spatialNode.children)) {\n    spatialNode.constructChildNodes(shape);\n  }\n  for (let childIndex = 0; childIndex < 8; childIndex++) {\n    const child = spatialNode.children[childIndex];\n    addToQueueRecursive(child, visibilityPlaneMask, that, frameState);\n  }\n}\n\n/**\n * Compute a priority for a keyframe node.\n *\n * @private\n * @param {number} previousKeyframe\n * @param {number} keyframe\n * @param {number} nextKeyframe\n * @param {VoxelTraversal} traversal\n * @returns {number} The computed priority\n */\nfunction keyframePriority(previousKeyframe, keyframe, nextKeyframe, traversal) {\n  const keyframeDifference = Math.min(\n    Math.abs(keyframe - previousKeyframe),\n    Math.abs(keyframe - nextKeyframe),\n  );\n  const maxKeyframeDifference = Math.max(\n    previousKeyframe,\n    traversal._keyframeCount - nextKeyframe - 1,\n    1,\n  );\n  const keyframeFactor = Math.pow(\n    1.0 - keyframeDifference / maxKeyframeDifference,\n    4.0,\n  );\n  const binaryTreeFactor = Math.exp(\n    -traversal._binaryTreeKeyframeWeighting[keyframe],\n  );\n  return CesiumMath.lerp(\n    binaryTreeFactor,\n    keyframeFactor,\n    0.15 + 0.85 * keyframeFactor,\n  );\n}\n\n/**\n * @function\n *\n * @param {VoxelTraversal} that\n *\n * @private\n */\nfunction postPassesUpdate(\n  that,\n  frameState,\n  loadAndUnloadTimeMs,\n  generateOctreeTimeMs,\n  totalTimeMs,\n) {\n  const keyframeCount = that._keyframeCount;\n  const rootNode = that.rootNode;\n\n  const loadStateCount = Object.keys(KeyframeNode.LoadState).length;\n  const loadStatesByKeyframe = new Array(loadStateCount);\n  const loadStateByCount = new Array(loadStateCount);\n  let nodeCountTotal = 0;\n\n  for (\n    let loadStateIndex = 0;\n    loadStateIndex < loadStateCount;\n    loadStateIndex++\n  ) {\n    const keyframeArray = new Array(keyframeCount).fill(0);\n    loadStatesByKeyframe[loadStateIndex] = keyframeArray;\n    loadStateByCount[loadStateIndex] = 0;\n  }\n\n  /**\n   * @param {SpatialNode} node\n   */\n  function traverseRecursive(node) {\n    const keyframeNodes = node.keyframeNodes;\n    for (\n      let keyframeIndex = 0;\n      keyframeIndex < keyframeNodes.length;\n      keyframeIndex++\n    ) {\n      const keyframeNode = keyframeNodes[keyframeIndex];\n      const keyframe = keyframeNode.keyframe;\n      const state = keyframeNode.state;\n      loadStatesByKeyframe[state][keyframe] += 1;\n      loadStateByCount[state] += 1;\n      nodeCountTotal++;\n    }\n\n    if (defined(node.children)) {\n      for (let childIndex = 0; childIndex < 8; childIndex++) {\n        const child = node.children[childIndex];\n        traverseRecursive(child);\n      }\n    }\n  }\n  traverseRecursive(rootNode);\n\n  that._primitive.statistics.numberOfTilesWithContentReady =\n    loadStateByCount[KeyframeNode.LoadState.LOADED];\n  that._primitive.statistics.visited = nodeCountTotal;\n\n  const numberOfPendingRequests =\n    loadStateByCount[KeyframeNode.LoadState.RECEIVING];\n  const numberOfTilesProcessing =\n    loadStateByCount[KeyframeNode.LoadState.PROCESSING];\n\n  const progressChanged =\n    numberOfPendingRequests !==\n      that._primitive.statistics.numberOfPendingRequests ||\n    numberOfTilesProcessing !==\n      that._primitive.statistics.numberOfTilesProcessing;\n\n  if (progressChanged) {\n    frameState.afterRender.push(function () {\n      that._primitive.loadProgress.raiseEvent(\n        numberOfPendingRequests,\n        numberOfTilesProcessing,\n      );\n\n      return true;\n    });\n  }\n\n  that._primitive.statistics.numberOfPendingRequests = numberOfPendingRequests;\n  that._primitive.statistics.numberOfTilesProcessing = numberOfTilesProcessing;\n\n  const tilesLoaded =\n    numberOfPendingRequests === 0 && numberOfTilesProcessing === 0;\n\n  // Events are raised (added to the afterRender queue) here since promises\n  // may resolve outside of the update loop that then raise events, e.g.,\n  // model's readyEvent\n  if (progressChanged && tilesLoaded) {\n    frameState.afterRender.push(function () {\n      that._primitive.allTilesLoaded.raiseEvent();\n      return true;\n    });\n    if (!that._initialTilesLoaded) {\n      that._initialTilesLoaded = true;\n      frameState.afterRender.push(function () {\n        that._primitive.initialTilesLoaded.raiseEvent();\n        return true;\n      });\n    }\n  }\n\n  if (!that._debugPrint) {\n    return;\n  }\n\n  const loadedKeyframeStatistics = `KEYFRAMES: ${\n    loadStatesByKeyframe[KeyframeNode.LoadState.LOADED]\n  }`;\n  const loadStateStatistics =\n    `UNLOADED: ${loadStateByCount[KeyframeNode.LoadState.UNLOADED]} | ` +\n    `RECEIVING: ${loadStateByCount[KeyframeNode.LoadState.RECEIVING]} | ` +\n    `PROCESSING: ${loadStateByCount[KeyframeNode.LoadState.PROCESSING]} | ` +\n    `LOADED: ${loadStateByCount[KeyframeNode.LoadState.LOADED]} | ` +\n    `FAILED: ${loadStateByCount[KeyframeNode.LoadState.FAILED]} | ` +\n    `UNAVAILABLE: ${loadStateByCount[KeyframeNode.LoadState.UNAVAILABLE]} | ` +\n    `TOTAL: ${nodeCountTotal}`;\n\n  const loadAndUnloadTimeMsRounded =\n    Math.round(loadAndUnloadTimeMs * 100) / 100;\n  const generateOctreeTimeMsRounded =\n    Math.round(generateOctreeTimeMs * 100) / 100;\n  const totalTimeMsRounded = Math.round(totalTimeMs * 100) / 100;\n\n  const timerStatistics =\n    `LOAD: ${loadAndUnloadTimeMsRounded} | ` +\n    `OCT: ${generateOctreeTimeMsRounded} | ` +\n    `ALL: ${totalTimeMsRounded}`;\n\n  console.log(\n    `${loadedKeyframeStatistics} || ${loadStateStatistics} || ${timerStatistics}`,\n  );\n}\n\n// GPU Octree Layout\n// (shown as binary tree instead of octree for demonstration purposes)\n//\n// Tree representation:\n//           0\n//          / \\\n//         /   \\\n//        /     \\\n//       1       3\n//      / \\     / \\\n//     L0  2   L3 L4\n//        / \\\n//       L1 L2\n//\n//\n// Array representation:\n// L = leaf index\n// * = index to parent node\n// index:   0_______  1________  2________  3_________\n// array:  [*0, 1, 3, *0, L0, 2, *1 L1, L2, *0, L3, L4]\n//\n// The array is generated from a depth-first traversal. The end result could be an unbalanced tree,\n// so the parent index is stored at each node to make it possible to traverse upwards.\n\nconst GpuOctreeFlag = {\n  // Data is an octree index.\n  INTERNAL: 0,\n  // Data is a leaf node.\n  LEAF: 1,\n  // When leaf data is packed in the octree and there's a node that is forced to\n  // render but has no data of its own (such as when its siblings are renderable but it\n  // is not), signal that it's using its parent's data.\n  PACKED_LEAF_FROM_PARENT: 2,\n};\n\n/**\n * @function\n *\n * @param {VoxelTraversal} that\n * @param {number} sampleCount\n * @param {number} levelBlendFactor\n * @private\n */\nfunction generateOctree(that, sampleCount, levelBlendFactor) {\n  const targetSse = that._primitive._screenSpaceError;\n  const keyframeLocation = that._keyframeLocation;\n  const frameNumber = that._frameNumber;\n  const useLeafNodes = sampleCount >= 2;\n\n  let internalNodeCount = 0;\n  let leafNodeCount = 0;\n  const internalNodeOctreeData = [];\n  const leafNodeOctreeData = [];\n\n  /**\n   * @param {SpatialNode} node\n   * @param {number} childOctreeIndex\n   * @param {number} childEntryIndex\n   * @param {number} parentOctreeIndex\n   * @param {number} parentEntryIndex\n   */\n  function buildOctree(\n    node,\n    childOctreeIndex,\n    childEntryIndex,\n    parentOctreeIndex,\n    parentEntryIndex,\n  ) {\n    let hasRenderableChildren = false;\n    if (defined(node.children)) {\n      for (let c = 0; c < 8; c++) {\n        const childNode = node.children[c];\n        childNode.computeSurroundingRenderableKeyframeNodes(keyframeLocation);\n        if (childNode.isRenderable(frameNumber)) {\n          hasRenderableChildren = true;\n        }\n      }\n    }\n\n    if (hasRenderableChildren) {\n      // Point the parent and child octree indexes at each other\n      internalNodeOctreeData[parentEntryIndex] =\n        (GpuOctreeFlag.INTERNAL << 16) | childOctreeIndex;\n      internalNodeOctreeData[childEntryIndex] = parentOctreeIndex;\n      internalNodeCount++;\n\n      // Recurse over children\n      parentOctreeIndex = childOctreeIndex;\n      parentEntryIndex = parentOctreeIndex * 9 + 1;\n      for (let cc = 0; cc < 8; cc++) {\n        const child = node.children[cc];\n        childOctreeIndex = internalNodeCount;\n        childEntryIndex = childOctreeIndex * 9 + 0;\n        buildOctree(\n          child,\n          childOctreeIndex,\n          childEntryIndex,\n          parentOctreeIndex,\n          parentEntryIndex + cc,\n        );\n      }\n    } else {\n      // Store the leaf node information instead\n      // Recursion stops here because there are no renderable children\n      that._primitive.tileVisible.raiseEvent();\n      if (useLeafNodes) {\n        const baseIdx = leafNodeCount * 5;\n        const keyframeNode = node.renderableKeyframeNodePrevious;\n        const levelDifference = node.level - keyframeNode.spatialNode.level;\n\n        const parentNode = keyframeNode.spatialNode.parent;\n        const parentKeyframeNode = defined(parentNode)\n          ? parentNode.renderableKeyframeNodePrevious\n          : keyframeNode;\n\n        const lodLerp = getLodLerp(node, targetSse, levelBlendFactor);\n        const levelDifferenceChild = levelDifference;\n        const levelDifferenceParent = 1;\n        const megatextureIndexChild = keyframeNode.megatextureIndex;\n        const megatextureIndexParent = parentKeyframeNode.megatextureIndex;\n\n        leafNodeOctreeData[baseIdx + 0] = lodLerp;\n        leafNodeOctreeData[baseIdx + 1] = levelDifferenceChild;\n        leafNodeOctreeData[baseIdx + 2] = levelDifferenceParent;\n        leafNodeOctreeData[baseIdx + 3] = megatextureIndexChild;\n        leafNodeOctreeData[baseIdx + 4] = megatextureIndexParent;\n\n        internalNodeOctreeData[parentEntryIndex] =\n          (GpuOctreeFlag.LEAF << 16) | leafNodeCount;\n      } else {\n        const keyframeNode = node.renderableKeyframeNodePrevious;\n        const levelDifference = node.level - keyframeNode.spatialNode.level;\n        const flag =\n          levelDifference === 0\n            ? GpuOctreeFlag.LEAF\n            : GpuOctreeFlag.PACKED_LEAF_FROM_PARENT;\n        internalNodeOctreeData[parentEntryIndex] =\n          (flag << 16) | keyframeNode.megatextureIndex;\n      }\n      leafNodeCount++;\n    }\n  }\n\n  const rootNode = that.rootNode;\n  rootNode.computeSurroundingRenderableKeyframeNodes(keyframeLocation);\n  if (rootNode.isRenderable(frameNumber)) {\n    buildOctree(rootNode, 0, 0, 0, 0);\n  }\n\n  copyToInternalNodeTexture(\n    internalNodeOctreeData,\n    9,\n    that.internalNodeTilesPerRow,\n    that.internalNodeTexture,\n  );\n  if (useLeafNodes) {\n    copyToLeafNodeTexture(\n      leafNodeOctreeData,\n      2,\n      that.leafNodeTilesPerRow,\n      that.leafNodeTexture,\n    );\n  }\n}\n\n/**\n * Compute an interpolation factor between a node and its parent\n * @param {SpatialNode} node\n * @param {number} targetSse\n * @param {number} levelBlendFactor\n * @returns {number}\n * @private\n */\nfunction getLodLerp(node, targetSse, levelBlendFactor) {\n  if (node.parent === undefined) {\n    return 0.0;\n  }\n  const sse = node.screenSpaceError;\n  const parentSse = node.parent.screenSpaceError;\n  const lodLerp = (targetSse - sse) / (parentSse - sse);\n  const blended = (lodLerp + levelBlendFactor - 1.0) / levelBlendFactor;\n\n  return CesiumMath.clamp(blended, 0.0, 1.0);\n}\n\n/**\n *\n * @param {number[]} data\n * @param {number} texelsPerTile\n * @param {number} tilesPerRow\n * @param {Texture} texture\n * @private\n */\nfunction copyToInternalNodeTexture(data, texelsPerTile, tilesPerRow, texture) {\n  const channelCount = PixelFormat.componentsLength(texture.pixelFormat);\n  const tileCount = Math.ceil(data.length / texelsPerTile);\n  const copyWidth = Math.max(\n    1,\n    texelsPerTile * Math.min(tileCount, tilesPerRow),\n  );\n  const copyHeight = Math.max(1, Math.ceil(tileCount / tilesPerRow));\n\n  const textureData = new Uint8Array(copyWidth * copyHeight * channelCount);\n  for (let i = 0; i < data.length; i++) {\n    const val = data[i];\n    const startIndex = i * channelCount;\n    for (let j = 0; j < channelCount; j++) {\n      textureData[startIndex + j] = (val >>> (j * 8)) & 0xff;\n    }\n  }\n\n  const source = {\n    arrayBufferView: textureData,\n    width: copyWidth,\n    height: copyHeight,\n  };\n\n  const copyOptions = {\n    source: source,\n    xOffset: 0,\n    yOffset: 0,\n  };\n\n  texture.copyFrom(copyOptions);\n}\n\n/**\n *\n * @param {number[]} data\n * @param {number} texelsPerTile\n * @param {number} tilesPerRow\n * @param {Texture} texture\n * @private\n */\nfunction copyToLeafNodeTexture(data, texelsPerTile, tilesPerRow, texture) {\n  const channelCount = PixelFormat.componentsLength(texture.pixelFormat);\n  const datasPerTile = 5;\n  const tileCount = Math.ceil(data.length / datasPerTile);\n  const copyWidth = Math.max(\n    1,\n    texelsPerTile * Math.min(tileCount, tilesPerRow),\n  );\n  const copyHeight = Math.max(1, Math.ceil(tileCount / tilesPerRow));\n\n  const textureData = new Uint8Array(copyWidth * copyHeight * channelCount);\n  for (let tileIndex = 0; tileIndex < tileCount; tileIndex++) {\n    const timeLerp = data[tileIndex * datasPerTile + 0];\n    const previousKeyframeLevelsAbove = data[tileIndex * datasPerTile + 1];\n    const nextKeyframeLevelsAbove = data[tileIndex * datasPerTile + 2];\n    const previousKeyframeMegatextureIndex = data[tileIndex * datasPerTile + 3];\n    const nextKeyframeMegatextureIndex = data[tileIndex * datasPerTile + 4];\n\n    const timeLerpCompressed = CesiumMath.clamp(\n      Math.floor(65536 * timeLerp),\n      0,\n      65535,\n    );\n    textureData[tileIndex * 8 + 0] = (timeLerpCompressed >>> 0) & 0xff;\n    textureData[tileIndex * 8 + 1] = (timeLerpCompressed >>> 8) & 0xff;\n    textureData[tileIndex * 8 + 2] = previousKeyframeLevelsAbove & 0xff;\n    textureData[tileIndex * 8 + 3] = nextKeyframeLevelsAbove & 0xff;\n    textureData[tileIndex * 8 + 4] =\n      (previousKeyframeMegatextureIndex >>> 0) & 0xff;\n    textureData[tileIndex * 8 + 5] =\n      (previousKeyframeMegatextureIndex >>> 8) & 0xff;\n    textureData[tileIndex * 8 + 6] =\n      (nextKeyframeMegatextureIndex >>> 0) & 0xff;\n    textureData[tileIndex * 8 + 7] =\n      (nextKeyframeMegatextureIndex >>> 8) & 0xff;\n  }\n\n  const source = {\n    arrayBufferView: textureData,\n    width: copyWidth,\n    height: copyHeight,\n  };\n\n  const copyOptions = {\n    source: source,\n    xOffset: 0,\n    yOffset: 0,\n  };\n\n  texture.copyFrom(copyOptions);\n}\n\nexport default VoxelTraversal;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeographicTilingScheme from \"../Core/GeographicTilingScheme.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport GetFeatureInfoFormat from \"./GetFeatureInfoFormat.js\";\nimport TimeDynamicImagery from \"./TimeDynamicImagery.js\";\nimport UrlTemplateImageryProvider from \"./UrlTemplateImageryProvider.js\";\n\n/**\n * EPSG codes known to include reverse axis orders, but are not within 4000-5000.\n *\n * @type {number[]}\n */\nconst includesReverseAxis = [\n  3034, // ETRS89-extended / LCC Europe\n  3035, // ETRS89-extended / LAEA Europe\n  3042, // ETRS89 / UTM zone 30N (N-E)\n  3043, // ETRS89 / UTM zone 31N (N-E)\n  3044, // ETRS89 / UTM zone 32N (N-E)\n];\n\n/**\n * EPSG codes known to not include reverse axis orders, and are within 4000-5000.\n *\n * @type {number[]}\n */\nconst excludesReverseAxis = [\n  4471, // Mayotte\n  4559, // French Antilles\n];\n\n/**\n * @typedef {object} WebMapServiceImageryProvider.ConstructorOptions\n *\n * Initialization options for the WebMapServiceImageryProvider constructor\n *\n * @property {Resource|string} url The URL of the WMS service. The URL supports the same keywords as the {@link UrlTemplateImageryProvider}.\n * @property {string} layers The layers to include, separated by commas.\n * @property {object} [parameters=WebMapServiceImageryProvider.DefaultParameters] Additional parameters to pass to the WMS server in the GetMap URL.\n * @property {object} [getFeatureInfoParameters=WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters] Additional parameters to pass to the WMS server in the GetFeatureInfo URL.\n * @property {boolean} [enablePickFeatures=true] If true, {@link WebMapServiceImageryProvider#pickFeatures} will invoke\n *        the GetFeatureInfo operation on the WMS server and return the features included in the response.  If false,\n *        {@link WebMapServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable features)\n *        without communicating with the server.  Set this property to false if you know your WMS server does not support\n *        GetFeatureInfo or if you don't want this provider's features to be pickable. Note that this can be dynamically\n *        overridden by modifying the WebMapServiceImageryProvider#enablePickFeatures property.\n * @property {GetFeatureInfoFormat[]} [getFeatureInfoFormats=WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats] The formats\n *        in which to try WMS GetFeatureInfo requests.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle of the layer.\n * @property {TilingScheme} [tilingScheme=new GeographicTilingScheme()] The tiling scheme to use to divide the world into tiles.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If the tilingScheme is specified,\n *        this parameter is ignored and the tiling scheme's ellipsoid is used instead. If neither\n *        parameter is specified, the WGS84 ellipsoid is used.\n * @property {number} [tileWidth=256] The width of each tile in pixels.\n * @property {number} [tileHeight=256] The height of each tile in pixels.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.  Take care when\n *        specifying this that the number of tiles at the minimum level is small, such as four or less.  A larger number is\n *        likely to result in rendering problems.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n *        If not specified, there is no limit.\n * @property {string} [crs] CRS specification, for use with WMS specification >= 1.3.0.\n * @property {string} [srs] SRS specification, for use with WMS specification 1.1.0 or 1.1.1\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n * @property {string|string[]} [subdomains='abc'] The subdomains to use for the <code>{s}</code> placeholder in the URL template.\n *                          If this parameter is a single string, each character in the string is a subdomain.  If it is\n *                          an array, each element in the array is a subdomain.\n * @property {Clock} [clock] A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified.\n * @property {TimeIntervalCollection} [times] TimeIntervalCollection with its data property being an object containing time dynamic dimension and their values.\n * @property {Resource|string} [getFeatureInfoUrl] The getFeatureInfo URL of the WMS service. If the property is not defined then we use the property value of url.\n */\n\n/**\n * Provides tiled imagery hosted by a Web Map Service (WMS) server.\n *\n * @alias WebMapServiceImageryProvider\n * @constructor\n *\n * @param {WebMapServiceImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapTileServiceImageryProvider\n * @see UrlTemplateImageryProvider\n *\n * @see {@link https://enterprise.arcgis.com/en/server/latest/publish-services/linux/wms-services.htm|ArcGIS Server WMS Services}\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\n *\n * @example\n * // WMS servers operated by the US government https://apps.nationalmap.gov/services/\n * const provider = new Cesium.WebMapServiceImageryProvider({\n *     url : 'https://basemap.nationalmap.gov:443/arcgis/services/USGSHydroCached/MapServer/WMSServer',\n *     layers : '0',\n *     proxy: new Cesium.DefaultProxy('/proxy/')\n * });\n * const imageryLayer = new Cesium.ImageryLayer(provider);\n * viewer.imageryLayers.add(imageryLayer);\n */\nfunction WebMapServiceImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.url)) {\n    throw new DeveloperError(\"options.url is required.\");\n  }\n  if (!defined(options.layers)) {\n    throw new DeveloperError(\"options.layers is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (defined(options.times) && !defined(options.clock)) {\n    throw new DeveloperError(\n      \"options.times was specified, so options.clock is required.\",\n    );\n  }\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  this._getFeatureInfoUrl = options.getFeatureInfoUrl ?? options.url;\n\n  const resource = Resource.createIfNeeded(options.url);\n  const pickFeatureResource = Resource.createIfNeeded(this._getFeatureInfoUrl);\n\n  resource.setQueryParameters(\n    WebMapServiceImageryProvider.DefaultParameters,\n    true,\n  );\n  pickFeatureResource.setQueryParameters(\n    WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters,\n    true,\n  );\n\n  if (defined(options.parameters)) {\n    resource.setQueryParameters(objectToLowercase(options.parameters));\n  }\n\n  if (defined(options.getFeatureInfoParameters)) {\n    pickFeatureResource.setQueryParameters(\n      objectToLowercase(options.getFeatureInfoParameters),\n    );\n  }\n\n  const that = this;\n  this._reload = undefined;\n  if (defined(options.times)) {\n    this._timeDynamicImagery = new TimeDynamicImagery({\n      clock: options.clock,\n      times: options.times,\n      requestImageFunction: function (x, y, level, request, interval) {\n        return requestImage(that, x, y, level, request, interval);\n      },\n      reloadFunction: function () {\n        if (defined(that._reload)) {\n          that._reload();\n        }\n      },\n    });\n  }\n\n  const parameters = {};\n  parameters.layers = options.layers;\n  parameters.bbox =\n    \"{westProjected},{southProjected},{eastProjected},{northProjected}\";\n  parameters.width = \"{width}\";\n  parameters.height = \"{height}\";\n\n  // Use SRS or CRS based on the WMS version.\n  if (parseFloat(resource.queryParameters.version) >= 1.3) {\n    // Use CRS with 1.3.0 and going forward.\n    // For GeographicTilingScheme, use CRS:84 vice EPSG:4326 to specify lon, lat (x, y) ordering for\n    // bbox requests.\n    parameters.crs =\n      options.crs ??\n      (options.tilingScheme &&\n      options.tilingScheme.projection instanceof WebMercatorProjection\n        ? \"EPSG:3857\"\n        : \"CRS:84\");\n\n    // The axis order in previous versions of the WMS specifications was to always use easting (x or lon ) and northing (y or\n    // lat). WMS 1.3.0 specifies that, depending on the particular CRS, the x axis may or may not be oriented West-to-East,\n    // and the y axis may or may not be oriented South-to-North. The WMS portrayal operation shall account for axis order.\n    // This affects some of the EPSG codes that were commonly used such as ESPG:4326. The current implementation\n    // makes sure that coordinates passed to the server (as part of the GetMap BBOX parameter) as well as those advertised\n    // in the capabilities document reflect the inverse axe orders for EPSG codes between 4000 and 5000.\n    //  - Taken from Section 9.1.3 of https://download.osgeo.org/mapserver/docs/MapServer-56.pdf\n    const parts = parameters.crs.split(\":\");\n    if (parts[0] === \"EPSG\" && parts.length === 2) {\n      const code = Number(parts[1]);\n      if (\n        (code >= 4000 && code < 5000 && !excludesReverseAxis.includes(code)) ||\n        includesReverseAxis.includes(code)\n      ) {\n        parameters.bbox =\n          \"{southProjected},{westProjected},{northProjected},{eastProjected}\";\n      }\n    }\n  } else {\n    // SRS for WMS 1.1.0 or 1.1.1.\n    parameters.srs =\n      options.srs ??\n      (options.tilingScheme &&\n      options.tilingScheme.projection instanceof WebMercatorProjection\n        ? \"EPSG:3857\"\n        : \"EPSG:4326\");\n  }\n\n  resource.setQueryParameters(parameters, true);\n  pickFeatureResource.setQueryParameters(parameters, true);\n\n  const pickFeatureParams = {\n    query_layers: options.layers,\n    info_format: \"{format}\",\n  };\n  // use correct pixel coordinate identifier based on version\n  if (parseFloat(pickFeatureResource.queryParameters.version) >= 1.3) {\n    pickFeatureParams.i = \"{i}\";\n    pickFeatureParams.j = \"{j}\";\n  } else {\n    pickFeatureParams.x = \"{i}\";\n    pickFeatureParams.y = \"{j}\";\n  }\n  pickFeatureResource.setQueryParameters(pickFeatureParams, true);\n\n  this._resource = resource;\n  this._pickFeaturesResource = pickFeatureResource;\n  this._layers = options.layers;\n\n  // Let UrlTemplateImageryProvider do the actual URL building.\n  this._tileProvider = new UrlTemplateImageryProvider({\n    url: resource,\n    pickFeaturesUrl: pickFeatureResource,\n    tilingScheme:\n      options.tilingScheme ??\n      new GeographicTilingScheme({ ellipsoid: options.ellipsoid }),\n    rectangle: options.rectangle,\n    tileWidth: options.tileWidth,\n    tileHeight: options.tileHeight,\n    minimumLevel: options.minimumLevel,\n    maximumLevel: options.maximumLevel,\n    subdomains: options.subdomains,\n    tileDiscardPolicy: options.tileDiscardPolicy,\n    credit: options.credit,\n    getFeatureInfoFormats:\n      options.getFeatureInfoFormats ??\n      WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats,\n    enablePickFeatures: options.enablePickFeatures,\n  });\n}\n\nfunction requestImage(imageryProvider, col, row, level, request, interval) {\n  const dynamicIntervalData = defined(interval) ? interval.data : undefined;\n  const tileProvider = imageryProvider._tileProvider;\n\n  if (defined(dynamicIntervalData)) {\n    // We set the query parameters within the tile provider, because it is managing the query.\n    tileProvider._resource.setQueryParameters(dynamicIntervalData);\n  }\n  return tileProvider.requestImage(col, row, level, request);\n}\n\nfunction pickFeatures(\n  imageryProvider,\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n  interval,\n) {\n  const dynamicIntervalData = defined(interval) ? interval.data : undefined;\n  const tileProvider = imageryProvider._tileProvider;\n\n  if (defined(dynamicIntervalData)) {\n    // We set the query parameters within the tile provider, because it is managing the query.\n    tileProvider._pickFeaturesResource.setQueryParameters(dynamicIntervalData);\n  }\n  return tileProvider.pickFeatures(x, y, level, longitude, latitude);\n}\n\nObject.defineProperties(WebMapServiceImageryProvider.prototype, {\n  /**\n   * Gets the URL of the WMS server.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource._url;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the names of the WMS layers, separated by commas.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  layers: {\n    get: function () {\n      return this._layers;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileProvider.tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileProvider.tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._tileProvider.maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return this._tileProvider.minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tileProvider.tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._tileProvider.rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._tileProvider.tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._tileProvider.errorEvent;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._tileProvider.credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return this._tileProvider.hasAlphaChannel;\n    },\n  },\n\n  /**\n   * Gets or sets a value indicating whether feature picking is enabled.  If true, {@link WebMapServiceImageryProvider#pickFeatures} will\n   * invoke the <code>GetFeatureInfo</code> service on the WMS server and attempt to interpret the features included in the response.  If false,\n   * {@link WebMapServiceImageryProvider#pickFeatures} will immediately return undefined (indicating no pickable\n   * features) without communicating with the server.  Set this property to false if you know your data\n   * source does not support picking features or if you don't want this provider's features to be pickable.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {boolean}\n   * @default true\n   */\n  enablePickFeatures: {\n    get: function () {\n      return this._tileProvider.enablePickFeatures;\n    },\n    set: function (enablePickFeatures) {\n      this._tileProvider.enablePickFeatures = enablePickFeatures;\n    },\n  },\n\n  /**\n   * Gets or sets a clock that is used to get keep the time used for time dynamic parameters.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {Clock}\n   */\n  clock: {\n    get: function () {\n      return this._timeDynamicImagery.clock;\n    },\n    set: function (value) {\n      this._timeDynamicImagery.clock = value;\n    },\n  },\n  /**\n   * Gets or sets a time interval collection that is used to get time dynamic parameters. The data of each\n   * TimeInterval is an object containing the keys and values of the properties that are used during\n   * tile requests.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {TimeIntervalCollection}\n   */\n  times: {\n    get: function () {\n      return this._timeDynamicImagery.times;\n    },\n    set: function (value) {\n      this._timeDynamicImagery.times = value;\n    },\n  },\n\n  /**\n   * Gets the getFeatureInfo URL of the WMS server.\n   * @memberof WebMapServiceImageryProvider.prototype\n   * @type {Resource|string}\n   * @readonly\n   */\n  getFeatureInfoUrl: {\n    get: function () {\n      return this._getFeatureInfoUrl;\n    },\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nWebMapServiceImageryProvider.prototype.getTileCredits = function (x, y, level) {\n  return this._tileProvider.getTileCredits(x, y, level);\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nWebMapServiceImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  let result;\n  const timeDynamicImagery = this._timeDynamicImagery;\n  let currentInterval;\n\n  // Try and load from cache\n  if (defined(timeDynamicImagery)) {\n    currentInterval = timeDynamicImagery.currentInterval;\n    result = timeDynamicImagery.getFromCache(x, y, level, request);\n  }\n\n  // Couldn't load from cache\n  if (!defined(result)) {\n    result = requestImage(this, x, y, level, request, currentInterval);\n  }\n\n  // If we are approaching an interval, preload this tile in the next interval\n  if (defined(result) && defined(timeDynamicImagery)) {\n    timeDynamicImagery.checkApproachingInterval(x, y, level, request);\n  }\n\n  return result;\n};\n\n/**\n * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n * a tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous\n *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n *                   instances.  The array may be empty if no features are found at the given location.\n */\nWebMapServiceImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  const timeDynamicImagery = this._timeDynamicImagery;\n  const currentInterval = defined(timeDynamicImagery)\n    ? timeDynamicImagery.currentInterval\n    : undefined;\n\n  return pickFeatures(this, x, y, level, longitude, latitude, currentInterval);\n};\n\n/**\n * The default parameters to include in the WMS URL to obtain images.  The values are as follows:\n *    service=WMS\n *    version=1.1.1\n *    request=GetMap\n *    styles=\n *    format=image/jpeg\n *\n * @constant\n * @type {object}\n */\nWebMapServiceImageryProvider.DefaultParameters = Object.freeze({\n  service: \"WMS\",\n  version: \"1.1.1\",\n  request: \"GetMap\",\n  styles: \"\",\n  format: \"image/jpeg\",\n});\n\n/**\n * The default parameters to include in the WMS URL to get feature information.  The values are as follows:\n *     service=WMS\n *     version=1.1.1\n *     request=GetFeatureInfo\n *\n * @constant\n * @type {object}\n */\nWebMapServiceImageryProvider.GetFeatureInfoDefaultParameters = Object.freeze({\n  service: \"WMS\",\n  version: \"1.1.1\",\n  request: \"GetFeatureInfo\",\n});\n\nWebMapServiceImageryProvider.DefaultGetFeatureInfoFormats = Object.freeze([\n  Object.freeze(new GetFeatureInfoFormat(\"json\", \"application/json\")),\n  Object.freeze(new GetFeatureInfoFormat(\"xml\", \"text/xml\")),\n  Object.freeze(new GetFeatureInfoFormat(\"text\", \"text/html\")),\n]);\n\nfunction objectToLowercase(obj) {\n  const result = {};\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      result[key.toLowerCase()] = obj[key];\n    }\n  }\n  return result;\n}\nexport default WebMapServiceImageryProvider;\n","import combine from \"../Core/combine.js\";\nimport Credit from \"../Core/Credit.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Event from \"../Core/Event.js\";\nimport Resource from \"../Core/Resource.js\";\nimport WebMercatorTilingScheme from \"../Core/WebMercatorTilingScheme.js\";\nimport ImageryProvider from \"./ImageryProvider.js\";\nimport TimeDynamicImagery from \"./TimeDynamicImagery.js\";\n\nconst defaultParameters = Object.freeze({\n  service: \"WMTS\",\n  version: \"1.0.0\",\n  request: \"GetTile\",\n});\n\n/**\n * @typedef {object} WebMapTileServiceImageryProvider.ConstructorOptions\n *\n * Initialization options for the WebMapTileServiceImageryProvider constructor\n *\n * @property {Resource|string} url The base URL for the WMTS GetTile operation (for KVP-encoded requests) or the tile-URL template (for RESTful requests). The tile-URL template should contain the following variables: &#123;style&#125;, &#123;TileMatrixSet&#125;, &#123;TileMatrix&#125;, &#123;TileRow&#125;, &#123;TileCol&#125;. The first two are optional if actual values are hardcoded or not required by the server. The &#123;s&#125; keyword may be used to specify subdomains.\n * @property {string} [format='image/jpeg'] The MIME type for images to retrieve from the server.\n * @property {string} layer The layer name for WMTS requests.\n * @property {string} style The style name for WMTS requests.\n * @property {string} tileMatrixSetID The identifier of the TileMatrixSet to use for WMTS requests.\n * @property {Array} [tileMatrixLabels] A list of identifiers in the TileMatrix to use for WMTS requests, one per TileMatrix level.\n * @property {Clock} [clock] A Clock instance that is used when determining the value for the time dimension. Required when `times` is specified.\n * @property {TimeIntervalCollection} [times] TimeIntervalCollection with its <code>data</code> property being an object containing time dynamic dimension and their values.\n * @property {object} [dimensions] A object containing static dimensions and their values.\n * @property {number} [tileWidth=256] The tile width in pixels.\n * @property {number} [tileHeight=256] The tile height in pixels.\n * @property {TilingScheme} [tilingScheme] The tiling scheme corresponding to the organization of the tiles in the TileMatrixSet.\n * @property {Rectangle} [rectangle=Rectangle.MAX_VALUE] The rectangle covered by the layer.\n * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider.\n * @property {number} [maximumLevel] The maximum level-of-detail supported by the imagery provider, or undefined if there is no limit.\n * @property {Ellipsoid} [ellipsoid] The ellipsoid.  If not specified, the WGS84 ellipsoid is used.\n * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.\n * @property {string|string[]} [subdomains='abc'] The subdomains to use for the <code>{s}</code> placeholder in the URL template.\n *                          If this parameter is a single string, each character in the string is a subdomain.  If it is\n *                          an array, each element in the array is a subdomain.\n */\n\n/**\n * Provides tiled imagery served by {@link http://www.opengeospatial.org/standards/wmts|WMTS 1.0.0} compliant servers.\n * This provider supports HTTP KVP-encoded and RESTful GetTile requests, but does not yet support the SOAP encoding.\n *\n * @alias WebMapTileServiceImageryProvider\n * @constructor\n *\n * @param {WebMapTileServiceImageryProvider.ConstructorOptions} options Object describing initialization options\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=web-map-tile-service-with-time|Cesium Sandcastle Web Map Tile Service with Time Demo}\n *\n * @example\n * // Example 1. USGS shaded relief tiles (KVP)\n * const shadedRelief1 = new Cesium.WebMapTileServiceImageryProvider({\n *     url : 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS',\n *     layer : 'USGSShadedReliefOnly',\n *     style : 'default',\n *     format : 'image/jpeg',\n *     tileMatrixSetID : 'default028mm',\n *     // tileMatrixLabels : ['default028mm:0', 'default028mm:1', 'default028mm:2' ...],\n *     maximumLevel: 19,\n *     credit : new Cesium.Credit('U. S. Geological Survey')\n * });\n * viewer.imageryLayers.addImageryProvider(shadedRelief1);\n *\n * @example\n * // Example 2. USGS shaded relief tiles (RESTful)\n * const shadedRelief2 = new Cesium.WebMapTileServiceImageryProvider({\n *     url : 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS/tile/1.0.0/USGSShadedReliefOnly/{Style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.jpg',\n *     layer : 'USGSShadedReliefOnly',\n *     style : 'default',\n *     format : 'image/jpeg',\n *     tileMatrixSetID : 'default028mm',\n *     maximumLevel: 19,\n *     credit : new Cesium.Credit('U. S. Geological Survey')\n * });\n * viewer.imageryLayers.addImageryProvider(shadedRelief2);\n *\n * @example\n * // Example 3. NASA time dynamic weather data (RESTful)\n * const times = Cesium.TimeIntervalCollection.fromIso8601({\n *     iso8601: '2015-07-30/2017-06-16/P1D',\n *     dataCallback: function dataCallback(interval, index) {\n *         return {\n *             Time: Cesium.JulianDate.toIso8601(interval.start)\n *         };\n *     }\n * });\n * const weather = new Cesium.WebMapTileServiceImageryProvider({\n *     url : 'https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/AMSR2_Snow_Water_Equivalent/default/{Time}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}.png',\n *     layer : 'AMSR2_Snow_Water_Equivalent',\n *     style : 'default',\n *     tileMatrixSetID : '2km',\n *     maximumLevel : 5,\n *     format : 'image/png',\n *     clock: clock,\n *     times: times,\n *     credit : new Cesium.Credit('NASA Global Imagery Browse Services for EOSDIS')\n * });\n * viewer.imageryLayers.addImageryProvider(weather);\n *\n * @see ArcGisMapServerImageryProvider\n * @see BingMapsImageryProvider\n * @see GoogleEarthEnterpriseMapsProvider\n * @see OpenStreetMapImageryProvider\n * @see SingleTileImageryProvider\n * @see TileMapServiceImageryProvider\n * @see WebMapServiceImageryProvider\n * @see UrlTemplateImageryProvider\n */\nfunction WebMapTileServiceImageryProvider(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.url)) {\n    throw new DeveloperError(\"options.url is required.\");\n  }\n  if (!defined(options.layer)) {\n    throw new DeveloperError(\"options.layer is required.\");\n  }\n  if (!defined(options.style)) {\n    throw new DeveloperError(\"options.style is required.\");\n  }\n  if (!defined(options.tileMatrixSetID)) {\n    throw new DeveloperError(\"options.tileMatrixSetID is required.\");\n  }\n  if (defined(options.times) && !defined(options.clock)) {\n    throw new DeveloperError(\n      \"options.times was specified, so options.clock is required.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  this._defaultAlpha = undefined;\n  this._defaultNightAlpha = undefined;\n  this._defaultDayAlpha = undefined;\n  this._defaultBrightness = undefined;\n  this._defaultContrast = undefined;\n  this._defaultHue = undefined;\n  this._defaultSaturation = undefined;\n  this._defaultGamma = undefined;\n  this._defaultMinificationFilter = undefined;\n  this._defaultMagnificationFilter = undefined;\n\n  const resource = Resource.createIfNeeded(options.url);\n\n  const style = options.style;\n  const tileMatrixSetID = options.tileMatrixSetID;\n  const url = resource.url;\n\n  const bracketMatch = url.match(/{/g);\n  if (\n    !defined(bracketMatch) ||\n    (bracketMatch.length === 1 && /{s}/.test(url))\n  ) {\n    resource.setQueryParameters(defaultParameters);\n    this._useKvp = true;\n  } else {\n    const templateValues = {\n      style: style,\n      Style: style,\n      TileMatrixSet: tileMatrixSetID,\n    };\n\n    resource.setTemplateValues(templateValues);\n    this._useKvp = false;\n  }\n\n  this._resource = resource;\n  this._layer = options.layer;\n  this._style = style;\n  this._tileMatrixSetID = tileMatrixSetID;\n  this._tileMatrixLabels = options.tileMatrixLabels;\n  this._format = options.format ?? \"image/jpeg\";\n  this._tileDiscardPolicy = options.tileDiscardPolicy;\n\n  this._tilingScheme = defined(options.tilingScheme)\n    ? options.tilingScheme\n    : new WebMercatorTilingScheme({ ellipsoid: options.ellipsoid });\n  this._tileWidth = options.tileWidth ?? 256;\n  this._tileHeight = options.tileHeight ?? 256;\n\n  this._minimumLevel = options.minimumLevel ?? 0;\n  this._maximumLevel = options.maximumLevel;\n\n  this._rectangle = options.rectangle ?? this._tilingScheme.rectangle;\n  this._dimensions = options.dimensions;\n\n  const that = this;\n  this._reload = undefined;\n  if (defined(options.times)) {\n    this._timeDynamicImagery = new TimeDynamicImagery({\n      clock: options.clock,\n      times: options.times,\n      requestImageFunction: function (x, y, level, request, interval) {\n        return requestImage(that, x, y, level, request, interval);\n      },\n      reloadFunction: function () {\n        if (defined(that._reload)) {\n          that._reload();\n        }\n      },\n    });\n  }\n\n  this._errorEvent = new Event();\n\n  const credit = options.credit;\n  this._credit = typeof credit === \"string\" ? new Credit(credit) : credit;\n\n  this._subdomains = options.subdomains;\n  if (Array.isArray(this._subdomains)) {\n    this._subdomains = this._subdomains.slice();\n  } else if (defined(this._subdomains) && this._subdomains.length > 0) {\n    this._subdomains = this._subdomains.split(\"\");\n  } else {\n    this._subdomains = [\"a\", \"b\", \"c\"];\n  }\n}\n\nfunction requestImage(imageryProvider, col, row, level, request, interval) {\n  const labels = imageryProvider._tileMatrixLabels;\n  const tileMatrix = defined(labels) ? labels[level] : level.toString();\n  const subdomains = imageryProvider._subdomains;\n  const staticDimensions = imageryProvider._dimensions;\n  const dynamicIntervalData = defined(interval) ? interval.data : undefined;\n\n  let resource;\n  let templateValues;\n  if (!imageryProvider._useKvp) {\n    templateValues = {\n      TileMatrix: tileMatrix,\n      TileRow: row.toString(),\n      TileCol: col.toString(),\n      s: subdomains[(col + row + level) % subdomains.length],\n    };\n\n    resource = imageryProvider._resource.getDerivedResource({\n      request: request,\n    });\n    resource.setTemplateValues(templateValues);\n\n    if (defined(staticDimensions)) {\n      resource.setTemplateValues(staticDimensions);\n    }\n\n    if (defined(dynamicIntervalData)) {\n      resource.setTemplateValues(dynamicIntervalData);\n    }\n  } else {\n    // build KVP request\n    let query = {};\n    query.tilematrix = tileMatrix;\n    query.layer = imageryProvider._layer;\n    query.style = imageryProvider._style;\n    query.tilerow = row;\n    query.tilecol = col;\n    query.tilematrixset = imageryProvider._tileMatrixSetID;\n    query.format = imageryProvider._format;\n\n    if (defined(staticDimensions)) {\n      query = combine(query, staticDimensions);\n    }\n\n    if (defined(dynamicIntervalData)) {\n      query = combine(query, dynamicIntervalData);\n    }\n\n    templateValues = {\n      s: subdomains[(col + row + level) % subdomains.length],\n    };\n\n    resource = imageryProvider._resource.getDerivedResource({\n      queryParameters: query,\n      request: request,\n    });\n    resource.setTemplateValues(templateValues);\n  }\n\n  return ImageryProvider.loadImage(imageryProvider, resource);\n}\n\nObject.defineProperties(WebMapTileServiceImageryProvider.prototype, {\n  /**\n   * Gets the URL of the service hosting the imagery.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  url: {\n    get: function () {\n      return this._resource.url;\n    },\n  },\n\n  /**\n   * Gets the proxy used by this provider.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {Proxy}\n   * @readonly\n   */\n  proxy: {\n    get: function () {\n      return this._resource.proxy;\n    },\n  },\n\n  /**\n   * Gets the width of each tile, in pixels.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileWidth: {\n    get: function () {\n      return this._tileWidth;\n    },\n  },\n\n  /**\n   * Gets the height of each tile, in pixels.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  tileHeight: {\n    get: function () {\n      return this._tileHeight;\n    },\n  },\n\n  /**\n   * Gets the maximum level-of-detail that can be requested.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {number|undefined}\n   * @readonly\n   */\n  maximumLevel: {\n    get: function () {\n      return this._maximumLevel;\n    },\n  },\n\n  /**\n   * Gets the minimum level-of-detail that can be requested.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {number}\n   * @readonly\n   */\n  minimumLevel: {\n    get: function () {\n      return this._minimumLevel;\n    },\n  },\n\n  /**\n   * Gets the tiling scheme used by this provider.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {TilingScheme}\n   * @readonly\n   */\n  tilingScheme: {\n    get: function () {\n      return this._tilingScheme;\n    },\n  },\n\n  /**\n   * Gets the rectangle, in radians, of the imagery provided by this instance.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {Rectangle}\n   * @readonly\n   */\n  rectangle: {\n    get: function () {\n      return this._rectangle;\n    },\n  },\n\n  /**\n   * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n   * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n   * returns undefined, no tiles are filtered.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {TileDiscardPolicy}\n   * @readonly\n   */\n  tileDiscardPolicy: {\n    get: function () {\n      return this._tileDiscardPolicy;\n    },\n  },\n\n  /**\n   * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n   * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n   * are passed an instance of {@link TileProviderError}.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {Event}\n   * @readonly\n   */\n  errorEvent: {\n    get: function () {\n      return this._errorEvent;\n    },\n  },\n\n  /**\n   * Gets the mime type of images returned by this imagery provider.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {string}\n   * @readonly\n   */\n  format: {\n    get: function () {\n      return this._format;\n    },\n  },\n\n  /**\n   * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n   * the source of the imagery.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {Credit}\n   * @readonly\n   */\n  credit: {\n    get: function () {\n      return this._credit;\n    },\n  },\n\n  /**\n   * Gets a value indicating whether or not the images provided by this imagery provider\n   * include an alpha channel.  If this property is false, an alpha channel, if present, will\n   * be ignored.  If this property is true, any images without an alpha channel will be treated\n   * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n   * and texture upload time are reduced.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {boolean}\n   * @readonly\n   */\n  hasAlphaChannel: {\n    get: function () {\n      return true;\n    },\n  },\n  /**\n   * Gets or sets a clock that is used to get keep the time used for time dynamic parameters.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {Clock}\n   */\n  clock: {\n    get: function () {\n      return this._timeDynamicImagery.clock;\n    },\n    set: function (value) {\n      this._timeDynamicImagery.clock = value;\n    },\n  },\n  /**\n   * Gets or sets a time interval collection that is used to get time dynamic parameters. The data of each\n   * TimeInterval is an object containing the keys and values of the properties that are used during\n   * tile requests.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {TimeIntervalCollection}\n   */\n  times: {\n    get: function () {\n      return this._timeDynamicImagery.times;\n    },\n    set: function (value) {\n      this._timeDynamicImagery.times = value;\n    },\n  },\n  /**\n   * Gets or sets an object that contains static dimensions and their values.\n   * @memberof WebMapTileServiceImageryProvider.prototype\n   * @type {object}\n   */\n  dimensions: {\n    get: function () {\n      return this._dimensions;\n    },\n    set: function (value) {\n      if (this._dimensions !== value) {\n        this._dimensions = value;\n        if (defined(this._reload)) {\n          this._reload();\n        }\n      }\n    },\n  },\n});\n\n/**\n * Gets the credits to be displayed when a given tile is displayed.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level;\n * @returns {Credit[]} The credits to be displayed when the tile is displayed.\n */\nWebMapTileServiceImageryProvider.prototype.getTileCredits = function (\n  x,\n  y,\n  level,\n) {\n  return undefined;\n};\n\n/**\n * Requests the image for a given tile.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {Request} [request] The request object. Intended for internal use only.\n * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or\n *          undefined if there are too many active requests to the server, and the request should be retried later.\n */\nWebMapTileServiceImageryProvider.prototype.requestImage = function (\n  x,\n  y,\n  level,\n  request,\n) {\n  let result;\n  const timeDynamicImagery = this._timeDynamicImagery;\n  let currentInterval;\n\n  // Try and load from cache\n  if (defined(timeDynamicImagery)) {\n    currentInterval = timeDynamicImagery.currentInterval;\n    result = timeDynamicImagery.getFromCache(x, y, level, request);\n  }\n\n  // Couldn't load from cache\n  if (!defined(result)) {\n    result = requestImage(this, x, y, level, request, currentInterval);\n  }\n\n  // If we are approaching an interval, preload this tile in the next interval\n  if (defined(result) && defined(timeDynamicImagery)) {\n    timeDynamicImagery.checkApproachingInterval(x, y, level, request);\n  }\n\n  return result;\n};\n\n/**\n * Picking features is not currently supported by this imagery provider, so this function simply returns\n * undefined.\n *\n * @param {number} x The tile X coordinate.\n * @param {number} y The tile Y coordinate.\n * @param {number} level The tile level.\n * @param {number} longitude The longitude at which to pick features.\n * @param {number} latitude  The latitude at which to pick features.\n * @return {undefined} Undefined since picking is not supported.\n */\nWebMapTileServiceImageryProvider.prototype.pickFeatures = function (\n  x,\n  y,\n  level,\n  longitude,\n  latitude,\n) {\n  return undefined;\n};\nexport default WebMapTileServiceImageryProvider;\n","import BlendingState from \"./BlendingState.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\nimport CullFace from \"./CullFace.js\";\nimport defined from \"../Core/defined.js\";\nimport DrawCommand from \"../Renderer/DrawCommand.js\";\nimport Pass from \"../Renderer/Pass.js\";\nimport PrimitiveType from \"../Core/PrimitiveType.js\";\nimport processVoxelProperties from \"./processVoxelProperties.js\";\nimport RenderState from \"../Renderer/RenderState.js\";\nimport ShaderDestination from \"../Renderer/ShaderDestination.js\";\nimport VoxelBoundsCollection from \"./VoxelBoundsCollection.js\";\nimport VoxelRenderResources from \"./VoxelRenderResources.js\";\n\nconst textureResolutionScratch = new Cartesian2();\n\n/**\n * @function\n *\n * @param {VoxelPrimitive} primitive\n * @param {Context} context\n *\n * @private\n */\nfunction buildVoxelDrawCommands(primitive, context) {\n  const renderResources = new VoxelRenderResources(primitive);\n\n  processVoxelProperties(renderResources, primitive);\n\n  const {\n    shaderBuilder,\n    clippingPlanes,\n    clippingPlanesLength,\n    renderBoundPlanes,\n    renderBoundPlanesLength,\n  } = renderResources;\n\n  if (clippingPlanesLength > 0) {\n    const functionId = \"getClippingPlane\";\n    const functionSignature = `vec4 ${functionId}(highp sampler2D packedPlanes, int planeNumber)`;\n    const textureResolution = ClippingPlaneCollection.getTextureResolution(\n      clippingPlanes,\n      context,\n      textureResolutionScratch,\n    );\n    const functionBody = getPlaneFunctionBody(textureResolution);\n    shaderBuilder.addFunction(\n      functionId,\n      functionSignature,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [functionBody]);\n  }\n\n  if (renderBoundPlanesLength > 0) {\n    const functionId = \"getBoundPlane\";\n    const functionSignature = `vec4 ${functionId}(highp sampler2D packedPlanes, int planeNumber)`;\n    const textureResolution = VoxelBoundsCollection.getTextureResolution(\n      renderBoundPlanes,\n      context,\n      textureResolutionScratch,\n    );\n    const functionBody = getPlaneFunctionBody(textureResolution);\n    shaderBuilder.addFunction(\n      functionId,\n      functionSignature,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [functionBody]);\n  }\n\n  // Compile shaders\n  const shaderBuilderPick = shaderBuilder.clone();\n  shaderBuilderPick.addDefine(\"PICKING\", undefined, ShaderDestination.FRAGMENT);\n  const shaderBuilderPickVoxel = shaderBuilder.clone();\n  shaderBuilderPickVoxel.addDefine(\n    \"PICKING_VOXEL\",\n    undefined,\n    ShaderDestination.FRAGMENT,\n  );\n  const shaderProgram = shaderBuilder.buildShaderProgram(context);\n  const shaderProgramPick = shaderBuilderPick.buildShaderProgram(context);\n  const shaderProgramPickVoxel =\n    shaderBuilderPickVoxel.buildShaderProgram(context);\n  const renderState = RenderState.fromCache({\n    cull: {\n      enabled: true,\n      face: CullFace.BACK,\n    },\n    depthTest: {\n      enabled: false,\n    },\n    depthMask: false,\n    // internally the shader does premultiplied alpha, so it makes sense to blend that way too\n    blending: BlendingState.PRE_MULTIPLIED_ALPHA_BLEND,\n  });\n\n  // Create the draw commands\n  const viewportQuadVertexArray = context.getViewportQuadVertexArray();\n  const depthTest = primitive._depthTest;\n  const drawCommand = new DrawCommand({\n    vertexArray: viewportQuadVertexArray,\n    primitiveType: PrimitiveType.TRIANGLES,\n    renderState: renderState,\n    shaderProgram: shaderProgram,\n    uniformMap: renderResources.uniformMap,\n    modelMatrix: primitive._compoundModelMatrix,\n    pass: Pass.VOXELS,\n    executeInClosestFrustum: true,\n    owner: this,\n    cull: depthTest, // don't cull or occlude if depth testing is off\n    occlude: depthTest, // don't cull or occlude if depth testing is off\n  });\n\n  // Create the pick draw command\n  const drawCommandPick = DrawCommand.shallowClone(\n    drawCommand,\n    new DrawCommand(),\n  );\n  drawCommandPick.shaderProgram = shaderProgramPick;\n  drawCommandPick.pickOnly = true;\n\n  // Create the pick voxels draw command\n  const drawCommandPickVoxel = DrawCommand.shallowClone(\n    drawCommand,\n    new DrawCommand(),\n  );\n  drawCommandPickVoxel.shaderProgram = shaderProgramPickVoxel;\n  drawCommandPickVoxel.pickOnly = true;\n\n  // Delete the old shader programs\n  if (defined(primitive._drawCommand)) {\n    const command = primitive._drawCommand;\n    command.shaderProgram =\n      command.shaderProgram && command.shaderProgram.destroy();\n  }\n  if (defined(primitive._drawCommandPick)) {\n    const command = primitive._drawCommandPick;\n    command.shaderProgram =\n      command.shaderProgram && command.shaderProgram.destroy();\n  }\n  if (defined(primitive._drawCommandPickVoxel)) {\n    const command = primitive._drawCommandPickVoxel;\n    command.shaderProgram =\n      command.shaderProgram && command.shaderProgram.destroy();\n  }\n\n  primitive._drawCommand = drawCommand;\n  primitive._drawCommandPick = drawCommandPick;\n  primitive._drawCommandPickVoxel = drawCommandPickVoxel;\n}\n\nfunction getPlaneFunctionBody(textureResolution) {\n  const width = textureResolution.x;\n  const height = textureResolution.y;\n\n  const pixelWidth = 1.0 / width;\n  const pixelHeight = 1.0 / height;\n\n  let pixelWidthString = `${pixelWidth}`;\n  if (pixelWidthString.indexOf(\".\") === -1) {\n    pixelWidthString += \".0\";\n  }\n  let pixelHeightString = `${pixelHeight}`;\n  if (pixelHeightString.indexOf(\".\") === -1) {\n    pixelHeightString += \".0\";\n  }\n\n  return `int pixY = planeNumber / ${width};\n    int pixX = planeNumber - (pixY * ${width});\n    // Sample from center of pixel\n    float u = (float(pixX) + 0.5) * ${pixelWidthString};\n    float v = (float(pixY) + 0.5) * ${pixelHeightString};\n    return texture(packedPlanes, vec2(u, v));`;\n}\n\nexport default buildVoxelDrawCommands;\n","import defined from \"../Core/defined.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport sampleTerrainMostDetailed from \"../Core/sampleTerrainMostDetailed.js\";\nimport SceneMode from \"./SceneMode.js\";\n\n/**\n * Computes the final camera location to view a rectangle adjusted for the current terrain.\n * If the terrain does not support availability, the height above the ellipsoid is used.\n *\n * @param {Rectangle} rectangle The rectangle being zoomed to.\n * @param {Scene} scene The scene being used.\n *\n * @returns {Promise<Cartographic>} The optimal location to place the camera so that the entire rectangle is in view.\n *\n * @private\n */\nasync function computeFlyToLocationForRectangle(rectangle, scene) {\n  const terrainProvider = scene.terrainProvider;\n  const mapProjection = scene.mapProjection;\n  const ellipsoid = mapProjection.ellipsoid;\n\n  let positionWithoutTerrain;\n  const tmp = scene.camera.getRectangleCameraCoordinates(rectangle);\n  if (scene.mode === SceneMode.SCENE3D) {\n    positionWithoutTerrain = ellipsoid.cartesianToCartographic(tmp);\n  } else {\n    positionWithoutTerrain = mapProjection.unproject(tmp);\n  }\n\n  if (!defined(terrainProvider)) {\n    return positionWithoutTerrain;\n  }\n\n  const availability = terrainProvider.availability;\n\n  if (!defined(availability) || scene.mode === SceneMode.SCENE2D) {\n    return positionWithoutTerrain;\n  }\n\n  const cartographics = [\n    Rectangle.center(rectangle),\n    Rectangle.southeast(rectangle),\n    Rectangle.southwest(rectangle),\n    Rectangle.northeast(rectangle),\n    Rectangle.northwest(rectangle),\n  ];\n\n  const positionsOnTerrain =\n    await computeFlyToLocationForRectangle._sampleTerrainMostDetailed(\n      terrainProvider,\n      cartographics,\n    );\n\n  let heightFound = false;\n  const maxHeight = positionsOnTerrain.reduce(function (currentMax, item) {\n    if (!defined(item.height)) {\n      return currentMax;\n    }\n    heightFound = true;\n    return Math.max(item.height, currentMax);\n  }, -Number.MAX_VALUE);\n\n  const finalPosition = positionWithoutTerrain;\n  if (heightFound) {\n    finalPosition.height += maxHeight;\n  }\n\n  return finalPosition;\n}\n\n//Exposed for testing.\ncomputeFlyToLocationForRectangle._sampleTerrainMostDetailed =\n  sampleTerrainMostDetailed;\nexport default computeFlyToLocationForRectangle;\n","/**\n * Creates a {@link createBillboardPointCallback.CanvasFunction} that will create a canvas with a point.\n *\n * @param {number} centerAlpha The alpha of the center of the point. The value must be in the range [0.0, 1.0].\n * @param {string} cssColor The CSS color string.\n * @param {string} cssOutlineColor The CSS color of the point outline.\n * @param {number} cssOutlineWidth The width of the outline in pixels.\n * @param {number} pixelSize The size of the point in pixels.\n * @return {createBillboardPointCallback.CanvasFunction} The function that will return a canvas with the point drawn on it.\n *\n * @private\n */\nfunction createBillboardPointCallback(\n  centerAlpha,\n  cssColor,\n  cssOutlineColor,\n  cssOutlineWidth,\n  pixelSize,\n) {\n  return function () {\n    const canvas = document.createElement(\"canvas\");\n\n    const length = pixelSize + 2 * cssOutlineWidth;\n    canvas.height = canvas.width = length;\n\n    const context2D = canvas.getContext(\"2d\");\n    context2D.clearRect(0, 0, length, length);\n\n    if (cssOutlineWidth !== 0) {\n      context2D.beginPath();\n      context2D.arc(length / 2, length / 2, length / 2, 0, 2 * Math.PI, true);\n      context2D.closePath();\n      context2D.fillStyle = cssOutlineColor;\n      context2D.fill();\n      // Punch a hole in the center if needed.\n      if (centerAlpha < 1.0) {\n        context2D.save();\n        context2D.globalCompositeOperation = \"destination-out\";\n        context2D.beginPath();\n        context2D.arc(\n          length / 2,\n          length / 2,\n          pixelSize / 2,\n          0,\n          2 * Math.PI,\n          true,\n        );\n        context2D.closePath();\n        context2D.fillStyle = \"black\";\n        context2D.fill();\n        context2D.restore();\n      }\n    }\n\n    context2D.beginPath();\n    context2D.arc(length / 2, length / 2, pixelSize / 2, 0, 2 * Math.PI, true);\n    context2D.closePath();\n    context2D.fillStyle = cssColor;\n    context2D.fill();\n\n    return canvas;\n  };\n}\n\n/**\n * A function that returns a canvas containing an image of a point.\n * @callback createBillboardPointCallback.CanvasFunction\n * @returns {HTMLCanvasElement} The result of the calculation.\n */\nexport default createBillboardPointCallback;\n","import Cartesian4 from \"../Core/Cartesian4.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Check from \"../Core/Check.js\";\nimport Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport mergeSort from \"../Core/mergeSort.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport Material from \"./Material.js\";\n\nconst scratchColor = new Color();\nconst scratchColorAbove = new Color();\nconst scratchColorBelow = new Color();\nconst scratchColorBlend = new Color();\nconst scratchPackedFloat = new Cartesian4();\nconst scratchColorBytes = new Uint8Array(4);\n\nfunction lerpEntryColor(height, entryBefore, entryAfter, result) {\n  const lerpFactor =\n    entryBefore.height === entryAfter.height\n      ? 0.0\n      : (height - entryBefore.height) /\n        (entryAfter.height - entryBefore.height);\n  return Color.lerp(entryBefore.color, entryAfter.color, lerpFactor, result);\n}\n\nfunction createNewEntry(height, color) {\n  return {\n    height: height,\n    color: Color.clone(color),\n  };\n}\n\nfunction removeDuplicates(entries) {\n  // This function expects entries to be sorted from lowest to highest.\n\n  // Remove entries that have the same height as before and after.\n  entries = entries.filter(function (entry, index, array) {\n    const hasPrev = index > 0;\n    const hasNext = index < array.length - 1;\n\n    const sameHeightAsPrev = hasPrev\n      ? entry.height === array[index - 1].height\n      : true;\n    const sameHeightAsNext = hasNext\n      ? entry.height === array[index + 1].height\n      : true;\n\n    const keep = !sameHeightAsPrev || !sameHeightAsNext;\n    return keep;\n  });\n\n  // Remove entries that have the same color as before and after.\n  entries = entries.filter(function (entry, index, array) {\n    const hasPrev = index > 0;\n    const hasNext = index < array.length - 1;\n\n    const sameColorAsPrev = hasPrev\n      ? Color.equals(entry.color, array[index - 1].color)\n      : false;\n    const sameColorAsNext = hasNext\n      ? Color.equals(entry.color, array[index + 1].color)\n      : false;\n\n    const keep = !sameColorAsPrev || !sameColorAsNext;\n    return keep;\n  });\n\n  // Also remove entries that have the same height AND color as the entry before.\n  entries = entries.filter(function (entry, index, array) {\n    const hasPrev = index > 0;\n\n    const sameColorAsPrev = hasPrev\n      ? Color.equals(entry.color, array[index - 1].color)\n      : false;\n\n    const sameHeightAsPrev = hasPrev\n      ? entry.height === array[index - 1].height\n      : true;\n\n    const keep = !sameColorAsPrev || !sameHeightAsPrev;\n    return keep;\n  });\n\n  return entries;\n}\n\nfunction preprocess(layers) {\n  let i, j;\n\n  const layeredEntries = [];\n\n  const layersLength = layers.length;\n  for (i = 0; i < layersLength; i++) {\n    const layer = layers[i];\n    const entriesOrig = layer.entries;\n    const entriesLength = entriesOrig.length;\n\n    //>>includeStart('debug', pragmas.debug);\n    if (!Array.isArray(entriesOrig) || entriesLength === 0) {\n      throw new DeveloperError(\"entries must be an array with size > 0.\");\n    }\n    //>>includeEnd('debug');\n\n    let entries = [];\n\n    for (j = 0; j < entriesLength; j++) {\n      const entryOrig = entriesOrig[j];\n\n      //>>includeStart('debug', pragmas.debug);\n      if (!defined(entryOrig.height)) {\n        throw new DeveloperError(\"entry requires a height.\");\n      }\n      if (!defined(entryOrig.color)) {\n        throw new DeveloperError(\"entry requires a color.\");\n      }\n      //>>includeEnd('debug');\n\n      const height = CesiumMath.clamp(\n        entryOrig.height,\n        createElevationBandMaterial._minimumHeight,\n        createElevationBandMaterial._maximumHeight,\n      );\n\n      // premultiplied alpha\n      const color = Color.clone(entryOrig.color, scratchColor);\n      color.red *= color.alpha;\n      color.green *= color.alpha;\n      color.blue *= color.alpha;\n\n      entries.push(createNewEntry(height, color));\n    }\n\n    let sortedAscending = true;\n    let sortedDescending = true;\n    for (j = 0; j < entriesLength - 1; j++) {\n      const currEntry = entries[j + 0];\n      const nextEntry = entries[j + 1];\n\n      sortedAscending = sortedAscending && currEntry.height <= nextEntry.height;\n      sortedDescending =\n        sortedDescending && currEntry.height >= nextEntry.height;\n    }\n\n    // When the array is fully descending, reverse it.\n    if (sortedDescending) {\n      entries = entries.reverse();\n    } else if (!sortedAscending) {\n      // Stable sort from lowest to greatest height.\n      mergeSort(entries, function (a, b) {\n        return CesiumMath.sign(a.height - b.height);\n      });\n    }\n\n    let extendDownwards = layer.extendDownwards ?? false;\n    let extendUpwards = layer.extendUpwards ?? false;\n\n    // Interpret a single entry to extend all the way up and down.\n    if (entries.length === 1 && !extendDownwards && !extendUpwards) {\n      extendDownwards = true;\n      extendUpwards = true;\n    }\n\n    if (extendDownwards) {\n      entries.splice(\n        0,\n        0,\n        createNewEntry(\n          createElevationBandMaterial._minimumHeight,\n          entries[0].color,\n        ),\n      );\n    }\n    if (extendUpwards) {\n      entries.splice(\n        entries.length,\n        0,\n        createNewEntry(\n          createElevationBandMaterial._maximumHeight,\n          entries[entries.length - 1].color,\n        ),\n      );\n    }\n\n    entries = removeDuplicates(entries);\n\n    layeredEntries.push(entries);\n  }\n\n  return layeredEntries;\n}\n\nfunction createLayeredEntries(layers) {\n  // clean up the input data and check for errors\n  const layeredEntries = preprocess(layers);\n\n  let entriesAccumNext = [];\n  let entriesAccumCurr = [];\n  let i;\n\n  function addEntry(height, color) {\n    entriesAccumNext.push(createNewEntry(height, color));\n  }\n  function addBlendEntry(height, a, b) {\n    let result = Color.multiplyByScalar(b, 1.0 - a.alpha, scratchColorBlend);\n    result = Color.add(result, a, result);\n    addEntry(height, result);\n  }\n\n  // alpha blend new layers on top of old ones\n  const layerLength = layeredEntries.length;\n  for (i = 0; i < layerLength; i++) {\n    const entries = layeredEntries[i];\n    let idx = 0;\n    let accumIdx = 0;\n\n    // swap the arrays\n    entriesAccumCurr = entriesAccumNext;\n    entriesAccumNext = [];\n\n    const entriesLength = entries.length;\n    const entriesAccumLength = entriesAccumCurr.length;\n    while (idx < entriesLength || accumIdx < entriesAccumLength) {\n      const entry = idx < entriesLength ? entries[idx] : undefined;\n      const prevEntry = idx > 0 ? entries[idx - 1] : undefined;\n      const nextEntry = idx < entriesLength - 1 ? entries[idx + 1] : undefined;\n\n      const entryAccum =\n        accumIdx < entriesAccumLength ? entriesAccumCurr[accumIdx] : undefined;\n      const prevEntryAccum =\n        accumIdx > 0 ? entriesAccumCurr[accumIdx - 1] : undefined;\n      const nextEntryAccum =\n        accumIdx < entriesAccumLength - 1\n          ? entriesAccumCurr[accumIdx + 1]\n          : undefined;\n\n      if (\n        defined(entry) &&\n        defined(entryAccum) &&\n        entry.height === entryAccum.height\n      ) {\n        // New entry directly on top of accum entry\n        const isSplitAccum =\n          defined(nextEntryAccum) &&\n          entryAccum.height === nextEntryAccum.height;\n        const isStartAccum = !defined(prevEntryAccum);\n        const isEndAccum = !defined(nextEntryAccum);\n\n        const isSplit = defined(nextEntry) && entry.height === nextEntry.height;\n        const isStart = !defined(prevEntry);\n        const isEnd = !defined(nextEntry);\n\n        if (isSplitAccum) {\n          if (isSplit) {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n            addBlendEntry(entry.height, nextEntry.color, nextEntryAccum.color);\n          } else if (isStart) {\n            addEntry(entry.height, entryAccum.color);\n            addBlendEntry(entry.height, entry.color, nextEntryAccum.color);\n          } else if (isEnd) {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n            addEntry(entry.height, nextEntryAccum.color);\n          } else {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n            addBlendEntry(entry.height, entry.color, nextEntryAccum.color);\n          }\n        } else if (isStartAccum) {\n          if (isSplit) {\n            addEntry(entry.height, entry.color);\n            addBlendEntry(entry.height, nextEntry.color, entryAccum.color);\n          } else if (isEnd) {\n            addEntry(entry.height, entry.color);\n            addEntry(entry.height, entryAccum.color);\n          } else if (isStart) {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n          } else {\n            addEntry(entry.height, entry.color);\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n          }\n        } else if (isEndAccum) {\n          if (isSplit) {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n            addEntry(entry.height, nextEntry.color);\n          } else if (isStart) {\n            addEntry(entry.height, entryAccum.color);\n            addEntry(entry.height, entry.color);\n          } else if (isEnd) {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n          } else {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n            addEntry(entry.height, entry.color);\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (isSplit) {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n            addBlendEntry(entry.height, nextEntry.color, entryAccum.color);\n          } else if (isStart) {\n            addEntry(entry.height, entryAccum.color);\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n          } else if (isEnd) {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n            addEntry(entry.height, entryAccum.color);\n          } else {\n            addBlendEntry(entry.height, entry.color, entryAccum.color);\n          }\n        }\n        idx += isSplit ? 2 : 1;\n        accumIdx += isSplitAccum ? 2 : 1;\n      } else if (\n        defined(entry) &&\n        defined(entryAccum) &&\n        defined(prevEntryAccum) &&\n        entry.height < entryAccum.height\n      ) {\n        // New entry between two accum entries\n        const colorBelow = lerpEntryColor(\n          entry.height,\n          prevEntryAccum,\n          entryAccum,\n          scratchColorBelow,\n        );\n\n        if (!defined(prevEntry)) {\n          addEntry(entry.height, colorBelow);\n          addBlendEntry(entry.height, entry.color, colorBelow);\n        } else if (!defined(nextEntry)) {\n          addBlendEntry(entry.height, entry.color, colorBelow);\n          addEntry(entry.height, colorBelow);\n        } else {\n          addBlendEntry(entry.height, entry.color, colorBelow);\n        }\n        idx++;\n      } else if (\n        defined(entryAccum) &&\n        defined(entry) &&\n        defined(prevEntry) &&\n        entryAccum.height < entry.height\n      ) {\n        // Accum entry between two new entries\n        const colorAbove = lerpEntryColor(\n          entryAccum.height,\n          prevEntry,\n          entry,\n          scratchColorAbove,\n        );\n\n        if (!defined(prevEntryAccum)) {\n          addEntry(entryAccum.height, colorAbove);\n          addBlendEntry(entryAccum.height, colorAbove, entryAccum.color);\n        } else if (!defined(nextEntryAccum)) {\n          addBlendEntry(entryAccum.height, colorAbove, entryAccum.color);\n          addEntry(entryAccum.height, colorAbove);\n        } else {\n          addBlendEntry(entryAccum.height, colorAbove, entryAccum.color);\n        }\n        accumIdx++;\n      } else if (\n        defined(entry) &&\n        (!defined(entryAccum) || entry.height < entryAccum.height)\n      ) {\n        // New entry completely before or completely after accum entries\n        if (\n          defined(entryAccum) &&\n          !defined(prevEntryAccum) &&\n          !defined(nextEntry)\n        ) {\n          // Insert blank gap between last entry and first accum entry\n          addEntry(entry.height, entry.color);\n          addEntry(entry.height, createElevationBandMaterial._emptyColor);\n          addEntry(entryAccum.height, createElevationBandMaterial._emptyColor);\n        } else if (\n          !defined(entryAccum) &&\n          defined(prevEntryAccum) &&\n          !defined(prevEntry)\n        ) {\n          // Insert blank gap between last accum entry and first entry\n          addEntry(\n            prevEntryAccum.height,\n            createElevationBandMaterial._emptyColor,\n          );\n          addEntry(entry.height, createElevationBandMaterial._emptyColor);\n          addEntry(entry.height, entry.color);\n        } else {\n          addEntry(entry.height, entry.color);\n        }\n        idx++;\n      } else if (\n        defined(entryAccum) &&\n        (!defined(entry) || entryAccum.height < entry.height)\n      ) {\n        // Accum entry completely before or completely after new entries\n        addEntry(entryAccum.height, entryAccum.color);\n        accumIdx++;\n      }\n    }\n  }\n\n  // one final cleanup pass in case duplicate colors show up in the final result\n  const allEntries = removeDuplicates(entriesAccumNext);\n  return allEntries;\n}\n\n/**\n * @typedef createElevationBandMaterialEntry\n *\n * @property {number} height The height.\n * @property {Color} color The color at this height.\n */\n/**\n * @typedef createElevationBandMaterialBand\n *\n * @property {createElevationBandMaterialEntry[]} entries A list of elevation entries. They will automatically be sorted from lowest to highest. If there is only one entry and <code>extendsDownards</code> and <code>extendUpwards</code> are both <code>false</code>, they will both be set to <code>true</code>.\n * @property {boolean} [extendDownwards=false] If <code>true</code>, the band's minimum elevation color will extend infinitely downwards.\n * @property {boolean} [extendUpwards=false] If <code>true</code>, the band's maximum elevation color will extend infinitely upwards.\n */\n\n/**\n * Creates a {@link Material} that combines multiple layers of color/gradient bands and maps them to terrain heights.\n *\n * The shader does a binary search over all the heights to find out which colors are above and below a given height, and\n * interpolates between them for the final color. This material supports hundreds of entries relatively cheaply.\n *\n * @function createElevationBandMaterial\n *\n * @param {object} options Object with the following properties:\n * @param {Scene} options.scene The scene where the visualization is taking place.\n * @param {createElevationBandMaterialBand[]} options.layers A list of bands ordered from lowest to highest precedence.\n * @returns {Material} A new {@link Material} instance.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=elevation-band-material|Cesium Sandcastle Elevation Band Demo}\n *\n * @example\n * scene.globe.material = Cesium.createElevationBandMaterial({\n *     scene : scene,\n *     layers : [{\n *         entries : [{\n *             height : 4200.0,\n *             color : new Cesium.Color(0.0, 0.0, 0.0, 1.0)\n *         }, {\n *             height : 8848.0,\n *             color : new Cesium.Color(1.0, 1.0, 1.0, 1.0)\n *         }],\n *         extendDownwards : true,\n *         extendUpwards : true,\n *     }, {\n *         entries : [{\n *             height : 7000.0,\n *             color : new Cesium.Color(1.0, 0.0, 0.0, 0.5)\n *         }, {\n *             height : 7100.0,\n *             color : new Cesium.Color(1.0, 0.0, 0.0, 0.5)\n *         }]\n *     }]\n * });\n */\nfunction createElevationBandMaterial(options) {\n  const { scene, layers } = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.scene\", scene);\n  Check.defined(\"options.layers\", layers);\n  Check.typeOf.number.greaterThan(\"options.layers.length\", layers.length, 0);\n  //>>includeEnd('debug');\n\n  const { context } = scene;\n  const entries = createLayeredEntries(layers);\n  const entriesLength = entries.length;\n\n  let heightTexBuffer;\n  let heightTexDatatype;\n  let heightTexFormat;\n\n  const isPackedHeight = !createElevationBandMaterial._useFloatTexture(context);\n  if (isPackedHeight) {\n    heightTexDatatype = PixelDatatype.UNSIGNED_BYTE;\n    heightTexFormat = PixelFormat.RGBA;\n    heightTexBuffer = new Uint8Array(entriesLength * 4);\n    for (let i = 0; i < entriesLength; i++) {\n      Cartesian4.packFloat(entries[i].height, scratchPackedFloat);\n      Cartesian4.pack(scratchPackedFloat, heightTexBuffer, i * 4);\n    }\n  } else {\n    heightTexDatatype = PixelDatatype.FLOAT;\n    heightTexFormat = context.webgl2 ? PixelFormat.RED : PixelFormat.LUMINANCE;\n    heightTexBuffer = new Float32Array(entriesLength);\n    for (let i = 0; i < entriesLength; i++) {\n      heightTexBuffer[i] = entries[i].height;\n    }\n  }\n\n  const heightsTex = Texture.create({\n    context: context,\n    pixelFormat: heightTexFormat,\n    pixelDatatype: heightTexDatatype,\n    source: {\n      arrayBufferView: heightTexBuffer,\n      width: entriesLength,\n      height: 1,\n    },\n    sampler: new Sampler({\n      wrapS: TextureWrap.CLAMP_TO_EDGE,\n      wrapT: TextureWrap.CLAMP_TO_EDGE,\n      minificationFilter: TextureMinificationFilter.NEAREST,\n      magnificationFilter: TextureMagnificationFilter.NEAREST,\n    }),\n  });\n\n  const colorsArray = new Uint8Array(entriesLength * 4);\n  for (let i = 0; i < entriesLength; i++) {\n    const color = entries[i].color;\n    color.toBytes(scratchColorBytes);\n    colorsArray[i * 4 + 0] = scratchColorBytes[0];\n    colorsArray[i * 4 + 1] = scratchColorBytes[1];\n    colorsArray[i * 4 + 2] = scratchColorBytes[2];\n    colorsArray[i * 4 + 3] = scratchColorBytes[3];\n  }\n\n  const colorsTex = Texture.create({\n    context: context,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    source: {\n      arrayBufferView: colorsArray,\n      width: entriesLength,\n      height: 1,\n    },\n    sampler: new Sampler({\n      wrapS: TextureWrap.CLAMP_TO_EDGE,\n      wrapT: TextureWrap.CLAMP_TO_EDGE,\n      minificationFilter: TextureMinificationFilter.LINEAR,\n      magnificationFilter: TextureMagnificationFilter.LINEAR,\n    }),\n  });\n\n  return Material.fromType(\"ElevationBand\", {\n    heights: heightsTex,\n    colors: colorsTex,\n  });\n}\n\n/**\n * Function for checking if the context will allow floating point textures for heights.\n *\n * @param {Context} context The {@link Context}.\n * @returns {boolean} <code>true</code> if floating point textures can be used for heights.\n * @private\n */\ncreateElevationBandMaterial._useFloatTexture = function (context) {\n  return context.floatingPointTexture;\n};\n\n/**\n * This is the height that gets stored in the texture when using extendUpwards.\n * There's nothing special about it, it's just a really big number.\n * @private\n */\ncreateElevationBandMaterial._maximumHeight = +5906376425472;\n\n/**\n * This is the height that gets stored in the texture when using extendDownwards.\n * There's nothing special about it, it's just a really big number.\n * @private\n */\ncreateElevationBandMaterial._minimumHeight = -5906376425472;\n\n/**\n * Color used to create empty space in the color texture\n * @private\n */\ncreateElevationBandMaterial._emptyColor = new Color(0.0, 0.0, 0.0, 0.0);\n\nexport default createElevationBandMaterial;\n","import Cesium3DTileset from \"./Cesium3DTileset.js\";\nimport Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport IonResource from \"../Core/IonResource.js\";\nimport GoogleMaps from \"../Core/GoogleMaps.js\";\nimport Resource from \"../Core/Resource.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\n\n/**\n * Creates a {@link Cesium3DTileset} instance for the Google Photorealistic 3D\n * Tiles tileset.\n *\n * Google Photorealistic 3D Tiles can only be used with the Google geocoder.  To\n * confirm that you are aware of this restriction pass\n * `usingOnlyWithGoogleGeocoder: true` to the apiOptions.  Otherwise a one time\n * warning will be displayed when this function is called.\n *\n * @function\n *\n * @param {object} [apiOptions]\n * @param {string} [apiOptions.key=GoogleMaps.defaultApiKey] Your API key to access Google Photorealistic 3D Tiles. See {@link https://developers.google.com/maps/documentation/javascript/get-api-key} for instructions on how to create your own key.\n * @param {true} [apiOptions.onlyUsingWithGoogleGeocoder] Confirmation that this tileset will only be used with the Google geocoder.\n * @param {Cesium3DTileset.ConstructorOptions} [tilesetOptions] An object describing initialization options.\n * @returns {Promise<Cesium3DTileset>}\n *\n * @see GoogleMaps\n *\n * @example\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *   geocoder: Cesium.IonGeocodeProviderType.GOOGLE\n * });\n *\n * try {\n *   const tileset = await Cesium.createGooglePhotorealistic3DTileset({\n *      onlyUsingWithGoogleGeocoder: true,\n *   });\n *   viewer.scene.primitives.add(tileset));\n * } catch (error) {\n *   console.log(`Error creating tileset: ${error}`);\n * }\n *\n * @example\n * // Use your own Google Maps API key\n * Cesium.GoogleMaps.defaultApiKey = \"your-api-key\";\n *\n * const viewer = new Cesium.Viewer(\"cesiumContainer\". {\n *   geocoder: Cesium.IonGeocodeProviderType.GOOGLE\n * });\n *\n * try {\n *   const tileset = await Cesium.createGooglePhotorealistic3DTileset({\n *      onlyUsingWithGoogleGeocoder: true,\n *   });\n *   viewer.scene.primitives.add(tileset));\n * } catch (error) {\n *   console.log(`Error creating tileset: ${error}`);\n * }\n */\nasync function createGooglePhotorealistic3DTileset(apiOptions, tilesetOptions) {\n  tilesetOptions = tilesetOptions ?? {};\n  tilesetOptions.cacheBytes = tilesetOptions.cacheBytes ?? 1536 * 1024 * 1024;\n  tilesetOptions.maximumCacheOverflowBytes =\n    tilesetOptions.maximumCacheOverflowBytes ?? 1024 * 1024 * 1024;\n  tilesetOptions.enableCollision = tilesetOptions.enableCollision ?? true;\n\n  apiOptions = apiOptions ?? Frozen.EMPTY_OBJECT;\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"apiOptions\", apiOptions);\n  //>>includeEnd('debug');\n\n  if (!apiOptions.onlyUsingWithGoogleGeocoder) {\n    oneTimeWarning(\n      \"google-tiles-with-google-geocoder\",\n      \"Only the Google geocoder can be used with Google Photorealistic 3D Tiles.  Set the `geocode` property of Viewer constructor options.  You can set additionalOptions.onlyUsingWithGoogleGeocoder to hide this warning once you have configured the geocoder.\",\n    );\n  }\n\n  const key = apiOptions.key ?? GoogleMaps.defaultApiKey;\n  if (!defined(key)) {\n    return requestCachedIonTileset(tilesetOptions);\n  }\n\n  let credits;\n  const credit = GoogleMaps.getDefaultCredit();\n  if (defined(credit)) {\n    credits = [credit];\n  }\n\n  const resource = new Resource({\n    url: `${GoogleMaps.mapTilesApiEndpoint}v1/3dtiles/root.json`,\n    queryParameters: {\n      key: key,\n    },\n    credits: credits,\n  });\n\n  return Cesium3DTileset.fromUrl(resource, tilesetOptions);\n}\n\nconst metadataCache = {};\nasync function requestCachedIonTileset(options) {\n  const ionAssetId = 2275207;\n  const cacheKey = ionAssetId;\n\n  let promise = metadataCache[cacheKey];\n  if (!defined(promise)) {\n    promise = IonResource.fromAssetId(ionAssetId);\n    metadataCache[cacheKey] = promise;\n  }\n\n  const resource = await promise;\n  return Cesium3DTileset.fromUrl(resource, options);\n}\n\nexport default createGooglePhotorealistic3DTileset;\n","import Color from \"../Core/Color.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport Cesium3DTileset from \"./Cesium3DTileset.js\";\nimport Cesium3DTileStyle from \"./Cesium3DTileStyle.js\";\n\n/**\n * Creates a {@link Cesium3DTileset} instance for the\n * {@link https://cesium.com/content/cesium-osm-buildings/|Cesium OSM Buildings}\n * tileset.\n *\n * @function\n *\n * @param {object} [options] Construction options. Any options allowed by the {@link Cesium3DTileset} constructor\n *        may be specified here. In addition to those, the following properties are supported:\n * @param {Color} [options.defaultColor=Color.WHITE] The default color to use for buildings\n *        that do not have a color. This parameter is ignored if <code>options.style</code> is specified.\n * @param {Cesium3DTileStyle} [options.style] The style to use with the tileset. If not\n *        specified, a default style is used which gives each building or building part a\n *        color inferred from its OpenStreetMap <code>tags</code>. If no color can be inferred,\n *        <code>options.defaultColor</code> is used.\n * @param {boolean} [options.enableShowOutline=true] If true, enable rendering outlines. This can be set to false to avoid the additional processing of geometry at load time.\n * @param {boolean} [options.showOutline=true] Whether to show outlines around buildings. When true,\n *        outlines are displayed. When false, outlines are not displayed.\n * @returns {Promise<Cesium3DTileset>}\n *\n * @see Ion\n *\n * @example\n * // Create Cesium OSM Buildings with default styling\n * const viewer = new Cesium.Viewer(\"cesiumContainer\");\n * try {\n *   const tileset = await Cesium.createOsmBuildingsAsync();\n *   viewer.scene.primitives.add(tileset));\n * } catch (error) {\n *   console.log(`Error creating tileset: ${error}`);\n * }\n *\n * @example\n * // Create Cesium OSM Buildings with a custom style highlighting\n * // schools and hospitals.\n * const viewer = new Cesium.Viewer(\"cesiumContainer\");\n * try {\n *   const tileset = await Cesium.createOsmBuildingsAsync({\n *     style: new Cesium.Cesium3DTileStyle({\n *       color: {\n *         conditions: [\n *           [\"${feature['building']} === 'hospital'\", \"color('#0000FF')\"],\n *           [\"${feature['building']} === 'school'\", \"color('#00FF00')\"],\n *           [true, \"color('#ffffff')\"]\n *         ]\n *       }\n *     })\n *   });\n *   viewer.scene.primitives.add(tileset));\n * } catch (error) {\n *   console.log(`Error creating tileset: ${error}`);\n * }\n */\nasync function createOsmBuildingsAsync(options) {\n  const tileset = await Cesium3DTileset.fromIonAssetId(96188, options);\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  let style = options.style;\n\n  if (!defined(style)) {\n    const color = (options.defaultColor ?? Color.WHITE).toCssColorString();\n    style = new Cesium3DTileStyle({\n      color: `Boolean(\\${feature['cesium#color']}) ? color(\\${feature['cesium#color']}) : ${color}`,\n    });\n  }\n\n  tileset.style = style;\n\n  return tileset;\n}\n\nexport default createOsmBuildingsAsync;\n","import ColorGeometryInstanceAttribute from \"../Core/ColorGeometryInstanceAttribute.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport GeometryInstance from \"../Core/GeometryInstance.js\";\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport PerInstanceColorAppearance from \"./PerInstanceColorAppearance.js\";\nimport Primitive from \"./Primitive.js\";\n\n/**\n * Creates a {@link Primitive} to visualize well-known vector vertex attributes:\n * <code>normal</code>, <code>tangent</code>, and <code>bitangent</code>.  Normal\n * is red; tangent is green; and bitangent is blue.  If an attribute is not\n * present, it is not drawn.\n *\n * @function\n *\n * @param {object} options Object with the following properties:\n * @param {Geometry} options.geometry The <code>Geometry</code> instance with the attribute.\n * @param {number} [options.length=10000.0] The length of each line segment in meters.  This can be negative to point the vector in the opposite direction.\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The model matrix that transforms to transform the geometry from model to world coordinates.\n * @returns {Primitive} A new <code>Primitive</code> instance with geometry for the vectors.\n *\n * @example\n * scene.primitives.add(Cesium.createTangentSpaceDebugPrimitive({\n *    geometry : instance.geometry,\n *    length : 100000.0,\n *    modelMatrix : instance.modelMatrix\n * }));\n */\nfunction createTangentSpaceDebugPrimitive(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const instances = [];\n  let geometry = options.geometry;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(geometry)) {\n    throw new DeveloperError(\"options.geometry is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (!defined(geometry.attributes) || !defined(geometry.primitiveType)) {\n    // to create the debug lines, we need the computed attributes.\n    // compute them if they are undefined.\n    geometry = geometry.constructor.createGeometry(geometry);\n  }\n\n  const attributes = geometry.attributes;\n  const modelMatrix = Matrix4.clone(options.modelMatrix ?? Matrix4.IDENTITY);\n  const length = options.length ?? 10000.0;\n\n  if (defined(attributes.normal)) {\n    instances.push(\n      new GeometryInstance({\n        geometry: GeometryPipeline.createLineSegmentsForVectors(\n          geometry,\n          \"normal\",\n          length,\n        ),\n        attributes: {\n          color: new ColorGeometryInstanceAttribute(1.0, 0.0, 0.0, 1.0),\n        },\n        modelMatrix: modelMatrix,\n      }),\n    );\n  }\n\n  if (defined(attributes.tangent)) {\n    instances.push(\n      new GeometryInstance({\n        geometry: GeometryPipeline.createLineSegmentsForVectors(\n          geometry,\n          \"tangent\",\n          length,\n        ),\n        attributes: {\n          color: new ColorGeometryInstanceAttribute(0.0, 1.0, 0.0, 1.0),\n        },\n        modelMatrix: modelMatrix,\n      }),\n    );\n  }\n\n  if (defined(attributes.bitangent)) {\n    instances.push(\n      new GeometryInstance({\n        geometry: GeometryPipeline.createLineSegmentsForVectors(\n          geometry,\n          \"bitangent\",\n          length,\n        ),\n        attributes: {\n          color: new ColorGeometryInstanceAttribute(0.0, 0.0, 1.0, 1.0),\n        },\n        modelMatrix: modelMatrix,\n      }),\n    );\n  }\n\n  if (instances.length > 0) {\n    return new Primitive({\n      asynchronous: false,\n      geometryInstances: instances,\n      appearance: new PerInstanceColorAppearance({\n        flat: true,\n        translucent: false,\n      }),\n    });\n  }\n\n  return undefined;\n}\nexport default createTangentSpaceDebugPrimitive;\n","import Frozen from \"../Core/Frozen.js\";\nimport IonImageryProvider from \"./IonImageryProvider.js\";\nimport IonWorldImageryStyle from \"./IonWorldImageryStyle.js\";\n\n/**\n * Creates an {@link IonImageryProvider} instance for ion's default global base imagery layer, currently Bing Maps.\n *\n * @function\n *\n * @param {object} [options] Object with the following properties:\n * @param {IonWorldImageryStyle} [options.style=IonWorldImageryStyle] The style of base imagery, only AERIAL, AERIAL_WITH_LABELS, and ROAD are currently supported.\n * @returns {Promise<IonImageryProvider>}\n *\n * @see Ion\n *\n * @example\n * // Create a Cesium World Imagery base layer with default settings\n * try {\n *   const imageryProvider = await Cesium.createWorldImageryAsync();\n * } catch (error) {\n *   console.log(`There was an error creating world imagery: ${error}`);\n * }\n *\n * @example\n * // Create Cesium World Imagery with different style\n * try {\n *   const imageryProvider = await Cesium.createWorldImageryAsync({\n *         style: Cesium.IonWorldImageryStyle.AERIAL_WITH_LABELS\n *   });\n * } catch (error) {\n *   console.log(`There was an error creating world imagery: ${error}`);\n * }\n */\nfunction createWorldImageryAsync(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const style = options.style ?? IonWorldImageryStyle.AERIAL;\n  return IonImageryProvider.fromAssetId(style);\n}\nexport default createWorldImageryAsync;\n","import ContentMetadata from \"./ContentMetadata.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\n\n/**\n * Check if a content has metadata, either defined in its metadata field (3D Tiles 1.1) or in\n * the <code>3DTILES_metadata</code> extension. If defined, get the content metadata\n * with the corresponding class.\n *\n * @function\n *\n * @param {Cesium3DTileset} tileset The tileset to query for content metadata\n * @param {object} contentHeader the JSON header for a {@link Cesium3DTileContent}\n * @return {ContentMetadata} the content metadata, or <code>undefined</code> if not found\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction findContentMetadata(tileset, contentHeader) {\n  const metadataJson = hasExtension(contentHeader, \"3DTILES_metadata\")\n    ? contentHeader.extensions[\"3DTILES_metadata\"]\n    : contentHeader.metadata;\n\n  if (!defined(metadataJson)) {\n    return undefined;\n  }\n\n  if (!defined(tileset.schema)) {\n    findContentMetadata._oneTimeWarning(\n      \"findContentMetadata-missing-root-schema\",\n      \"Could not find a metadata schema for content metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.\",\n    );\n    return undefined;\n  }\n\n  const classes = tileset.schema.classes ?? Frozen.EMPTY_OBJECT;\n  if (defined(metadataJson.class)) {\n    const contentClass = classes[metadataJson.class];\n    return new ContentMetadata({\n      content: metadataJson,\n      class: contentClass,\n    });\n  }\n\n  return undefined;\n}\n\n// Exposed for testing\nfindContentMetadata._oneTimeWarning = oneTimeWarning;\nexport default findContentMetadata;\n","import defined from \"../Core/defined.js\";\nimport hasExtension from \"./hasExtension.js\";\n\n/**\n * Check if a content has metadata, either defined in its metadata field (3D Tiles 1.1)\n * or in the <code>3DTILES_metadata</code> extension. If so, look up the group with the\n * corresponding ID.\n *\n * @function\n *\n * @param {Cesium3DTileset} tileset The tileset to query for group metadata\n * @param {object} contentHeader the JSON header for a {@link Cesium3DTileContent}\n * @return {GroupMetadata} the group metadata, or <code>undefined</code> if not found\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction findGroupMetadata(tileset, contentHeader) {\n  const metadataExtension = tileset.metadataExtension;\n  if (!defined(metadataExtension)) {\n    return undefined;\n  }\n  const groups = metadataExtension.groups;\n\n  const group = hasExtension(contentHeader, \"3DTILES_metadata\")\n    ? contentHeader.extensions[\"3DTILES_metadata\"].group\n    : contentHeader.group;\n\n  if (typeof group === \"number\") {\n    return groups[group];\n  }\n\n  const index = metadataExtension.groupIds.findIndex(function (id) {\n    return id === group;\n  });\n\n  return index >= 0 ? groups[index] : undefined;\n}\n\nexport default findGroupMetadata;\n","import Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport hasExtension from \"./hasExtension.js\";\nimport TileMetadata from \"./TileMetadata.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\n\n/**\n * Check if a tile has metadata, either defined in its metadata field (3D Tiles 1.1)\n * or in the <code>3DTILES_metadata</code> extension. If defined, get the tile metadata\n * with the corresponding class.\n * <p>\n * This assumes that tileset.metadata has been created before any tiles are constructed.\n * </p>\n * @function\n *\n * @param {Cesium3DTileset} tileset The tileset to query for tile metadata\n * @param {object} tileHeader the JSON header for a {@link Cesium3DTile}\n * @return {TileMetadata} the tile metadata, or <code>undefined</code> if not found\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction findTileMetadata(tileset, tileHeader) {\n  const metadataJson = hasExtension(tileHeader, \"3DTILES_metadata\")\n    ? tileHeader.extensions[\"3DTILES_metadata\"]\n    : tileHeader.metadata;\n\n  if (!defined(metadataJson)) {\n    return undefined;\n  }\n\n  if (!defined(tileset.schema)) {\n    findTileMetadata._oneTimeWarning(\n      \"findTileMetadata-missing-root-schema\",\n      \"Could not find a metadata schema for tile metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.\",\n    );\n    return undefined;\n  }\n\n  const classes = tileset.schema.classes ?? Frozen.EMPTY_OBJECT;\n  if (defined(metadataJson.class)) {\n    const tileClass = classes[metadataJson.class];\n    return new TileMetadata({\n      tile: metadataJson,\n      class: tileClass,\n    });\n  }\n\n  return undefined;\n}\n\n// Exposed for testing\nfindTileMetadata._oneTimeWarning = oneTimeWarning;\nexport default findTileMetadata;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartesian4 from \"../Core/Cartesian4.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport Matrix2 from \"../Core/Matrix2.js\";\nimport Matrix3 from \"../Core/Matrix3.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\n\nconst ComponentsPerAttribute = {\n  SCALAR: 1,\n  VEC2: 2,\n  VEC3: 3,\n  VEC4: 4,\n  MAT2: 4,\n  MAT3: 9,\n  MAT4: 16,\n};\n\nconst ClassPerType = {\n  SCALAR: undefined,\n  VEC2: Cartesian2,\n  VEC3: Cartesian3,\n  VEC4: Cartesian4,\n  MAT2: Matrix2,\n  MAT3: Matrix3,\n  MAT4: Matrix4,\n};\n\n/**\n * @private\n */\nfunction getBinaryAccessor(accessor) {\n  const componentType = accessor.componentType;\n  let componentDatatype;\n  if (typeof componentType === \"string\") {\n    componentDatatype = ComponentDatatype.fromName(componentType);\n  } else {\n    componentDatatype = componentType;\n  }\n\n  const componentsPerAttribute = ComponentsPerAttribute[accessor.type];\n  const classType = ClassPerType[accessor.type];\n  return {\n    componentsPerAttribute: componentsPerAttribute,\n    classType: classType,\n    createArrayBufferView: function (buffer, byteOffset, length) {\n      return ComponentDatatype.createArrayBufferView(\n        componentDatatype,\n        buffer,\n        byteOffset,\n        componentsPerAttribute * length,\n      );\n    },\n  };\n}\nexport default getBinaryAccessor;\n","import Check from \"../Core/Check.js\";\n\n/**\n * Gets a GLSL snippet that clips a fragment using the `clip` function from {@link getClippingFunction} and styles it.\n *\n * @param {string} samplerUniformName Name of the uniform for the clipping planes texture sampler.\n * @param {string} matrixUniformName Name of the uniform for the clipping planes matrix.\n * @param {string} styleUniformName Name of the uniform for the clipping planes style, a vec4.\n * @returns {string} A string containing GLSL that clips and styles the current fragment.\n * @private\n */\nfunction getClipAndStyleCode(\n  samplerUniformName,\n  matrixUniformName,\n  styleUniformName,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"samplerUniformName\", samplerUniformName);\n  Check.typeOf.string(\"matrixUniformName\", matrixUniformName);\n  Check.typeOf.string(\"styleUniformName\", styleUniformName);\n  //>>includeEnd('debug');\n\n  const shaderCode =\n    `    float clipDistance = clip(gl_FragCoord, ${samplerUniformName}, ${matrixUniformName}); \\n` +\n    `    vec4 clippingPlanesEdgeColor = vec4(1.0); \\n` +\n    `    clippingPlanesEdgeColor.rgb = ${styleUniformName}.rgb; \\n` +\n    `    float clippingPlanesEdgeWidth = ${styleUniformName}.a; \\n` +\n    `    if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) \\n` +\n    `    { \\n` +\n    `        out_FragColor = clippingPlanesEdgeColor;\\n` +\n    `    } \\n`;\n  return shaderCode;\n}\nexport default getClipAndStyleCode;\n","import Cartesian2 from \"../Core/Cartesian2.js\";\nimport Check from \"../Core/Check.js\";\nimport ClippingPlaneCollection from \"./ClippingPlaneCollection.js\";\n\nconst textureResolutionScratch = new Cartesian2();\n/**\n * Gets the GLSL functions needed to retrieve clipping planes from a ClippingPlaneCollection's texture.\n *\n * @param {ClippingPlaneCollection} clippingPlaneCollection ClippingPlaneCollection with a defined texture.\n * @param {Context} context The current rendering context.\n * @returns {string} A string containing GLSL functions for retrieving clipping planes.\n * @private\n */\nfunction getClippingFunction(clippingPlaneCollection, context) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"clippingPlaneCollection\", clippingPlaneCollection);\n  Check.typeOf.object(\"context\", context);\n  //>>includeEnd('debug');\n  const unionClippingRegions = clippingPlaneCollection.unionClippingRegions;\n  const clippingPlanesLength = clippingPlaneCollection.length;\n  const usingFloatTexture = ClippingPlaneCollection.useFloatTexture(context);\n  const textureResolution = ClippingPlaneCollection.getTextureResolution(\n    clippingPlaneCollection,\n    context,\n    textureResolutionScratch,\n  );\n  const width = textureResolution.x;\n  const height = textureResolution.y;\n\n  let functions = usingFloatTexture\n    ? getClippingPlaneFloat(width, height)\n    : getClippingPlaneUint8(width, height);\n  functions += \"\\n\";\n  functions += unionClippingRegions\n    ? clippingFunctionUnion(clippingPlanesLength)\n    : clippingFunctionIntersect(clippingPlanesLength);\n  return functions;\n}\n\nfunction clippingFunctionUnion(clippingPlanesLength) {\n  return `float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\n{\n    vec4 position = czm_windowToEyeCoordinates(fragCoord);\n    vec3 clipNormal = vec3(0.0);\n    vec3 clipPosition = vec3(0.0);\n    float clipAmount;\n    float pixelWidth = czm_metersPerPixel(position);\n    bool breakAndDiscard = false;\n    for (int i = 0; i < ${clippingPlanesLength}; ++i)\n    {\n        vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\n        clipNormal = clippingPlane.xyz;\n        clipPosition = -clippingPlane.w * clipNormal;\n        float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\n        clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));\n        if (amount <= 0.0)\n        {\n            breakAndDiscard = true;\n            // HLSL compiler bug if we discard here: https://bugs.chromium.org/p/angleproject/issues/detail?id=1945#c6\n            break;\n         }\n    }\n    if (breakAndDiscard) {\n        discard;\n    }\n    return clipAmount;\n}\n`;\n}\n\nfunction clippingFunctionIntersect(clippingPlanesLength) {\n  return `float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)\n{\n    bool clipped = true;\n    vec4 position = czm_windowToEyeCoordinates(fragCoord);\n    vec3 clipNormal = vec3(0.0);\n    vec3 clipPosition = vec3(0.0);\n    float clipAmount = 0.0;\n    float pixelWidth = czm_metersPerPixel(position);\n    for (int i = 0; i < ${clippingPlanesLength}; ++i)\n    {\n        vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\n        clipNormal = clippingPlane.xyz;\n        clipPosition = -clippingPlane.w * clipNormal;\n        float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\n        clipAmount = max(amount, clipAmount);\n        clipped = clipped && (amount <= 0.0);\n    }\n    if (clipped)\n    {\n        discard;\n    }\n    return clipAmount;\n }\n`;\n}\n\nfunction getClippingPlaneFloat(width, height) {\n  const pixelWidth = 1.0 / width;\n  const pixelHeight = 1.0 / height;\n\n  let pixelWidthString = `${pixelWidth}`;\n  if (pixelWidthString.indexOf(\".\") === -1) {\n    pixelWidthString += \".0\";\n  }\n  let pixelHeightString = `${pixelHeight}`;\n  if (pixelHeightString.indexOf(\".\") === -1) {\n    pixelHeightString += \".0\";\n  }\n\n  return `vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\n{\n    int pixY = clippingPlaneNumber / ${width};\n    int pixX = clippingPlaneNumber - (pixY * ${width});\n    // Sample from center of pixel\n    float u = (float(pixX) + 0.5) * ${pixelWidthString};\n    float v = (float(pixY) + 0.5) * ${pixelHeightString};\n    vec4 plane = texture(packedClippingPlanes, vec2(u, v));\n    return czm_transformPlane(plane, transform);\n}\n`;\n}\n\nfunction getClippingPlaneUint8(width, height) {\n  const pixelWidth = 1.0 / width;\n  const pixelHeight = 1.0 / height;\n\n  let pixelWidthString = `${pixelWidth}`;\n  if (pixelWidthString.indexOf(\".\") === -1) {\n    pixelWidthString += \".0\";\n  }\n  let pixelHeightString = `${pixelHeight}`;\n  if (pixelHeightString.indexOf(\".\") === -1) {\n    pixelHeightString += \".0\";\n  }\n\n  return `vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)\n{\n    int clippingPlaneStartIndex = clippingPlaneNumber * 2;\n    int pixY = clippingPlaneStartIndex / ${width};\n    int pixX = clippingPlaneStartIndex - (pixY * ${width});\n    // Sample from center of pixel\n    float u = (float(pixX) + 0.5) * ${pixelWidthString};\n    float v = (float(pixY) + 0.5) * ${pixelHeightString};\n    vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0;\n    vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);\n    vec4 plane;\n    plane.xyz = czm_octDecode(oct, 65535.0);\n    plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + ${pixelWidthString}, v)));\n    return czm_transformPlane(plane, transform);\n}\n`;\n}\nexport default getClippingFunction;\n","import addAllToArray from \"../Core/addAllToArray.js\";\nimport defined from \"../Core/defined.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport WebGLConstants from \"../Core/WebGLConstants.js\";\n\n/**\n * Get an array of primitives for a given mesh. If the EXT_mesh_primitive_restart extension is present, use it to combine groups of primitives.\n * If the extension is not present or its spec is violated, return the original mesh.primitives.\n * @param {object} mesh A mesh from the glTF meshes array\n * @returns {object[]} An array of mesh primitives\n * @private\n */\nfunction getMeshPrimitives(mesh) {\n  const meshExtensions = mesh.extensions ?? Frozen.EMPTY_OBJECT;\n  const primitiveRestartExtension = meshExtensions.EXT_mesh_primitive_restart;\n  const meshPrimitives = mesh.primitives;\n\n  if (!defined(primitiveRestartExtension)) {\n    return meshPrimitives;\n  }\n\n  // Note: per the spec, any violation of the extension's specification should cause us to fall back to mesh.primitives, if detecting the violation is feasible.\n\n  // Start with a copy of mesh.primitives. For each group, replace the first primitive in the group with a primitive representing the entire group,\n  // and set the rest of the primitives in the group to `undefined`.\n  // This allows us to identify which remaining primitives do not use primitive restart, and any errors involving a primitive appearing in more than one group.\n  const primitives = [];\n  addAllToArray(primitives, meshPrimitives);\n  for (const group of primitiveRestartExtension.primitiveGroups) {\n    // Spec: the group must not be empty and all indices must be valid array indices into mesh.primitives.\n    const firstPrimitiveIndex = group.primitives[0];\n    if (!defined(firstPrimitiveIndex) || !meshPrimitives[firstPrimitiveIndex]) {\n      return meshPrimitives;\n    }\n\n    const primitive = {\n      ...meshPrimitives[firstPrimitiveIndex],\n      indices: group.indices,\n    };\n\n    // Spec: primitive restart only supported for these topologies.\n    switch (primitive.mode) {\n      case WebGLConstants.TRIANGLE_FAN:\n      case WebGLConstants.TRIANGLE_STRIP:\n      case WebGLConstants.LINE_STRIP:\n      case WebGLConstants.LINE_LOOP:\n        break;\n      default:\n        return meshPrimitives;\n    }\n\n    for (const primitiveIndex of group.primitives) {\n      const thisPrimitive = primitives[primitiveIndex];\n\n      // Spec: all primitives must use indexed geometry and a given primitive may appear in at most one group.\n      // Spec: all primitives must have same topology.\n      if (\n        !defined(thisPrimitive?.indices) ||\n        thisPrimitive.mode !== primitive.mode\n      ) {\n        return meshPrimitives;\n      }\n\n      primitives[primitiveIndex] = undefined;\n    }\n\n    primitives[firstPrimitiveIndex] = primitive;\n  }\n\n  return primitives.filter(defined);\n}\nexport default getMeshPrimitives;\n","import defined from \"../Core/defined.js\";\n\n/**\n * Return the `MetadataClassProperty` from the given schema that\n * matches the given description.\n *\n * If the given schema is `undefined`, then `undefined` is returned.\n * If the given `schemaId` is defined but does not match the ID\n * of the given schema, then `undefined` is returned.\n * If the given schema does not have a class with the given name,\n * or the class does not have a property with the given name,\n * then `undefined` is returned.\n *\n * Otherwise, the `MetadataClassProperty` is returned.\n *\n * @param {object} schema The schema object\n * @param {string|undefined} schemaId The ID of the metadata schema\n * @param {string} className The name of the metadata class\n * @param {string} propertyName The name of the metadata property\n * @returns {MetadataClassProperty|undefined}\n * @private\n */\nfunction getMetadataClassProperty(schema, schemaId, className, propertyName) {\n  if (!defined(schema)) {\n    return undefined;\n  }\n  if (defined(schemaId) && schema.id !== schemaId) {\n    return undefined;\n  }\n  const classes = schema.classes || {};\n  const metadataClass = classes[className];\n  if (!defined(metadataClass)) {\n    return undefined;\n  }\n  const properties = metadataClass.properties || {};\n  const metadataProperty = properties[propertyName];\n  if (!defined(metadataProperty)) {\n    return undefined;\n  }\n  return metadataProperty;\n}\n\nexport default getMetadataClassProperty;\n","import defined from \"../Core/defined.js\";\n\n/**\n * Return the `PropertyTextureProperty` from the given `StructuralMetadata`\n * that matches the given description.\n *\n * If the given structural metadata is `undefined`, then `undefined` is returned.\n *\n * Otherwise, this method will check all the property textures in the given\n * structural metadata.\n *\n * If it finds a property texture that has a class with an `_id` that matches\n * the given name, and that contains a property for the given property name, then\n * this property is returned.\n *\n * Otherwise, `undefined` is returned\n *\n * @param {StructuralMetadata} structuralMetadata The structural metadata\n * @param {string} className The name of the metadata class\n * @param {string} propertyName The name of the metadata property\n * @returns {PropertyTextureProperty|undefined}\n * @private\n */\nfunction getMetadataProperty(structuralMetadata, className, propertyName) {\n  if (!defined(structuralMetadata)) {\n    return undefined;\n  }\n  const propertyTextures = structuralMetadata.propertyTextures;\n  for (const propertyTexture of propertyTextures) {\n    const metadataClass = propertyTexture.class;\n    if (metadataClass.id === className) {\n      const properties = propertyTexture.properties;\n      const property = properties[propertyName];\n      if (defined(property)) {\n        return property;\n      }\n    }\n  }\n  // Note: This could check for property attributes in a similar\n  // way. But since picking arbitrary property attributes via the\n  // frame buffer is not supported yet, returning \"undefined\" here\n  // causes the picking to bail out early and safely when no\n  // property texture was found.\n  // See https://github.com/CesiumGS/cesium/issues/12225\n  return undefined;\n}\n\nexport default getMetadataProperty;\n","import defined from \"../Core/defined.js\";\n\n/**\n * Check if a specific extension is present on a JSON object. This can be used\n * for either 3D Tiles extensions or glTF extensions\n * @param {object} json The JSON object\n * @param {string} extensionName The name of the extension, e.g. '3DTILES_implicit_tiling'\n * @returns {boolean} True if the extension is present\n * @private\n */\nfunction hasExtension(json, extensionName) {\n  return (\n    defined(json) &&\n    defined(json.extensions) &&\n    defined(json.extensions[extensionName])\n  );\n}\n\nexport default hasExtension;\n","import Check from \"../Core/Check.js\";\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\nimport defined from \"../Core/defined.js\";\nimport deprecationWarning from \"../Core/deprecationWarning.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport BatchTableHierarchy from \"./BatchTableHierarchy.js\";\nimport StructuralMetadata from \"./StructuralMetadata.js\";\nimport PropertyAttribute from \"./PropertyAttribute.js\";\nimport PropertyTable from \"./PropertyTable.js\";\nimport getBinaryAccessor from \"./getBinaryAccessor.js\";\nimport JsonMetadataTable from \"./JsonMetadataTable.js\";\nimport MetadataClass from \"./MetadataClass.js\";\nimport MetadataSchema from \"./MetadataSchema.js\";\nimport MetadataTable from \"./MetadataTable.js\";\nimport ModelComponents from \"./ModelComponents.js\";\nimport ModelUtility from \"./Model/ModelUtility.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\n\n/**\n * An object that parses the the 3D Tiles 1.0 batch table and transcodes it to\n * be compatible with structural metadata from the <code>EXT_structural_metadata</code> glTF extension\n * <p>\n * See the {@link https://github.com/CesiumGS/glTF/tree/3d-tiles-next/extensions/2.0/Vendor/EXT_structural_metadata|EXT_structural_metadata Extension} for glTF.\n * </p>\n *\n * @param {object} options Object with the following properties:\n * @param {number} options.count The number of features in the batch table.\n * @param {object} options.batchTable The batch table JSON\n * @param {Uint8Array} [options.binaryBody] The batch table binary body\n * @param {boolean} [options.parseAsPropertyAttributes=false] If true, binary properties are parsed as property attributes instead of a property table. This is used for .pnts models for GPU styling.\n * @param {ModelComponents.Attribute[]} [options.customAttributeOutput] Pass in an empty array here and this method will populate it with a list of custom attributes that will store the values of the property attributes. The attributes will be created with typed arrays, the caller is responsible for uploading them to the GPU. This option is required when options.parseAsPropertyAttributes is true.\n * @return {StructuralMetadata} A transcoded structural metadata object\n *\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction parseBatchTable(options) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.number(\"options.count\", options.count);\n  Check.typeOf.object(\"options.batchTable\", options.batchTable);\n  //>>includeEnd('debug');\n\n  const featureCount = options.count;\n  const batchTable = options.batchTable;\n  const binaryBody = options.binaryBody;\n  const parseAsPropertyAttributes = options.parseAsPropertyAttributes ?? false;\n  const customAttributeOutput = options.customAttributeOutput;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (parseAsPropertyAttributes && !defined(customAttributeOutput)) {\n    throw new DeveloperError(\n      \"customAttributeOutput is required when parsing batch table as property attributes\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  // divide properties into binary, json and hierarchy\n  const partitionResults = partitionProperties(batchTable);\n\n  let jsonMetadataTable;\n  if (defined(partitionResults.jsonProperties)) {\n    jsonMetadataTable = new JsonMetadataTable({\n      count: featureCount,\n      properties: partitionResults.jsonProperties,\n    });\n  }\n\n  let hierarchy;\n  if (defined(partitionResults.hierarchy)) {\n    hierarchy = new BatchTableHierarchy({\n      extension: partitionResults.hierarchy,\n      binaryBody: binaryBody,\n    });\n  }\n\n  const className = MetadataClass.BATCH_TABLE_CLASS_NAME;\n  const binaryProperties = partitionResults.binaryProperties;\n\n  let metadataTable;\n  let propertyAttributes;\n  let transcodedSchema;\n  if (parseAsPropertyAttributes) {\n    const attributeResults = transcodeBinaryPropertiesAsPropertyAttributes(\n      featureCount,\n      className,\n      binaryProperties,\n      binaryBody,\n      customAttributeOutput,\n    );\n    transcodedSchema = attributeResults.transcodedSchema;\n    const propertyAttribute = new PropertyAttribute({\n      propertyAttribute: attributeResults.propertyAttributeJson,\n      class: attributeResults.transcodedClass,\n    });\n\n    propertyAttributes = [propertyAttribute];\n  } else {\n    const binaryResults = transcodeBinaryProperties(\n      featureCount,\n      className,\n      binaryProperties,\n      binaryBody,\n    );\n    transcodedSchema = binaryResults.transcodedSchema;\n    const featureTableJson = binaryResults.featureTableJson;\n    metadataTable = new MetadataTable({\n      count: featureTableJson.count,\n      properties: featureTableJson.properties,\n      class: binaryResults.transcodedClass,\n      bufferViews: binaryResults.bufferViewsTypedArrays,\n    });\n    propertyAttributes = [];\n  }\n\n  const propertyTables = [];\n  if (\n    defined(metadataTable) ||\n    defined(jsonMetadataTable) ||\n    defined(hierarchy)\n  ) {\n    const propertyTable = new PropertyTable({\n      id: 0,\n      name: \"Batch Table\",\n      count: featureCount,\n      metadataTable: metadataTable,\n      jsonMetadataTable: jsonMetadataTable,\n      batchTableHierarchy: hierarchy,\n    });\n    propertyTables.push(propertyTable);\n  }\n\n  const metadataOptions = {\n    schema: transcodedSchema,\n    propertyTables: propertyTables,\n    propertyAttributes: propertyAttributes,\n    extensions: partitionResults.extensions,\n    extras: partitionResults.extras,\n  };\n\n  return new StructuralMetadata(metadataOptions);\n}\n\n/**\n * Divide the batch table's properties into binary, JSON and hierarchy\n * extension as each is handled separately\n *\n * @param {object} batchTable The batch table JSON\n * @returns {object} The batch table divided into binary, JSON and hierarchy portions. Extras and extensions are also divided out for ease of processing.\n *\n * @private\n */\nfunction partitionProperties(batchTable) {\n  const legacyHierarchy = batchTable.HIERARCHY;\n  const extras = batchTable.extras;\n  const extensions = batchTable.extensions;\n\n  let hierarchyExtension;\n  if (defined(legacyHierarchy)) {\n    parseBatchTable._deprecationWarning(\n      \"batchTableHierarchyExtension\",\n      \"The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead.\",\n    );\n    hierarchyExtension = legacyHierarchy;\n  } else if (defined(extensions)) {\n    hierarchyExtension = extensions[\"3DTILES_batch_table_hierarchy\"];\n  }\n\n  // A JsonMetadataTable is only allocated as needed.\n  let jsonProperties;\n  // A MetadataTable or PropertyAttribute will always be created, even if\n  // there are no properties.\n  const binaryProperties = {};\n  for (const propertyId in batchTable) {\n    if (\n      !batchTable.hasOwnProperty(propertyId) ||\n      // these cases were handled above;\n      propertyId === \"HIERARCHY\" ||\n      propertyId === \"extensions\" ||\n      propertyId === \"extras\"\n    ) {\n      continue;\n    }\n\n    const property = batchTable[propertyId];\n    if (Array.isArray(property)) {\n      jsonProperties = defined(jsonProperties) ? jsonProperties : {};\n      jsonProperties[propertyId] = property;\n    } else {\n      binaryProperties[propertyId] = property;\n    }\n  }\n\n  return {\n    binaryProperties: binaryProperties,\n    jsonProperties: jsonProperties,\n    hierarchy: hierarchyExtension,\n    extras: extras,\n    extensions: extensions,\n  };\n}\n\n/**\n * Transcode the binary properties of the batch table to be compatible with\n * <code>EXT_structural_metadata</code>\n *\n * @param {number} featureCount The number of features in the batch table\n * @param {string} className The name of the metadata class to be created.\n * @param {Object<string, Object>} binaryProperties A dictionary of property ID to property definition\n * @param {Uint8Array} [binaryBody] The binary body of the batch table\n * @return {object} Transcoded data needed for constructing a {@link StructuralMetadata} object.\n *\n * @private\n */\nfunction transcodeBinaryProperties(\n  featureCount,\n  className,\n  binaryProperties,\n  binaryBody,\n) {\n  const classProperties = {};\n  const featureTableProperties = {};\n  const bufferViewsTypedArrays = {};\n  let bufferViewCount = 0;\n  for (const propertyId in binaryProperties) {\n    if (!binaryProperties.hasOwnProperty(propertyId)) {\n      continue;\n    }\n\n    if (!defined(binaryBody)) {\n      throw new RuntimeError(\n        `Property ${propertyId} requires a batch table binary.`,\n      );\n    }\n\n    const property = binaryProperties[propertyId];\n    const binaryAccessor = getBinaryAccessor(property);\n\n    featureTableProperties[propertyId] = {\n      bufferView: bufferViewCount,\n    };\n\n    classProperties[propertyId] = transcodePropertyType(property);\n\n    bufferViewsTypedArrays[bufferViewCount] =\n      binaryAccessor.createArrayBufferView(\n        binaryBody.buffer,\n        binaryBody.byteOffset + property.byteOffset,\n        featureCount,\n      );\n\n    bufferViewCount++;\n  }\n\n  const schemaJson = {\n    classes: {},\n  };\n  schemaJson.classes[className] = {\n    properties: classProperties,\n  };\n\n  const transcodedSchema = MetadataSchema.fromJson(schemaJson);\n\n  const featureTableJson = {\n    class: className,\n    count: featureCount,\n    properties: featureTableProperties,\n  };\n\n  return {\n    featureTableJson: featureTableJson,\n    bufferViewsTypedArrays: bufferViewsTypedArrays,\n    transcodedSchema: transcodedSchema,\n    transcodedClass: transcodedSchema.classes[className],\n  };\n}\n\nfunction transcodeBinaryPropertiesAsPropertyAttributes(\n  featureCount,\n  className,\n  binaryProperties,\n  binaryBody,\n  customAttributeOutput,\n) {\n  const classProperties = {};\n  const propertyAttributeProperties = {};\n  let nextPlaceholderId = 0;\n\n  for (const propertyId in binaryProperties) {\n    if (!binaryProperties.hasOwnProperty(propertyId)) {\n      continue;\n    }\n\n    // For draco-compressed attributes from .pnts files, the results will be\n    // stored in separate typed arrays. These will be used in place of the\n    // binary body\n    const property = binaryProperties[propertyId];\n    if (!defined(binaryBody) && !defined(property.typedArray)) {\n      throw new RuntimeError(\n        `Property ${propertyId} requires a batch table binary.`,\n      );\n    }\n\n    let sanitizedPropertyId = ModelUtility.sanitizeGlslIdentifier(propertyId);\n\n    // If the sanitized string is empty or a duplicate, use a placeholder\n    // name instead. This will work for styling, but it may lead to undefined\n    // behavior in CustomShader, since\n    // - different tiles may pick a different placeholder ID due to the\n    //    collection being unordered\n    // - different tiles may have different number of properties.\n    if (\n      sanitizedPropertyId === \"\" ||\n      classProperties.hasOwnProperty(sanitizedPropertyId)\n    ) {\n      sanitizedPropertyId = `property_${nextPlaceholderId}`;\n      nextPlaceholderId++;\n    }\n\n    const classProperty = transcodePropertyType(property);\n    classProperty.name = propertyId;\n    classProperties[sanitizedPropertyId] = classProperty;\n\n    // Extract the typed array and create a custom attribute as a typed array.\n    // The caller must add the results to the ModelComponents, and upload the\n    // typed array to the GPU. The attribute name is converted to all capitals\n    // and underscores, like a glTF custom attribute.\n    //\n    // For example, if the original property ID was 'Temperature ℃', the result\n    // is _TEMPERATURE\n    let customAttributeName = sanitizedPropertyId.toUpperCase();\n    if (!customAttributeName.startsWith(\"_\")) {\n      customAttributeName = `_${customAttributeName}`;\n    }\n\n    // for .pnts with draco compression, property.typedArray is used\n    // instead of the binary body.\n    let attributeTypedArray = property.typedArray;\n    if (!defined(attributeTypedArray)) {\n      const binaryAccessor = getBinaryAccessor(property);\n      attributeTypedArray = binaryAccessor.createArrayBufferView(\n        binaryBody.buffer,\n        binaryBody.byteOffset + property.byteOffset,\n        featureCount,\n      );\n    }\n\n    const attribute = new ModelComponents.Attribute();\n    attribute.name = customAttributeName;\n    attribute.count = featureCount;\n    attribute.type = property.type;\n    const componentDatatype =\n      ComponentDatatype.fromTypedArray(attributeTypedArray);\n    if (\n      componentDatatype === ComponentDatatype.INT ||\n      componentDatatype === ComponentDatatype.UNSIGNED_INT ||\n      componentDatatype === ComponentDatatype.DOUBLE\n    ) {\n      parseBatchTable._oneTimeWarning(\n        \"Cast pnts property to floats\",\n        `Point cloud property \"${customAttributeName}\" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`,\n      );\n      attributeTypedArray = new Float32Array(attributeTypedArray);\n    }\n    attribute.componentDatatype =\n      ComponentDatatype.fromTypedArray(attributeTypedArray);\n    attribute.typedArray = attributeTypedArray;\n    customAttributeOutput.push(attribute);\n\n    // Refer to the custom attribute name from the property attribute\n    propertyAttributeProperties[sanitizedPropertyId] = {\n      attribute: customAttributeName,\n    };\n  }\n\n  const schemaJson = {\n    classes: {},\n  };\n  schemaJson.classes[className] = {\n    properties: classProperties,\n  };\n\n  const transcodedSchema = MetadataSchema.fromJson(schemaJson);\n\n  const propertyAttributeJson = {\n    properties: propertyAttributeProperties,\n  };\n\n  return {\n    class: className,\n    propertyAttributeJson: propertyAttributeJson,\n    transcodedSchema: transcodedSchema,\n    transcodedClass: transcodedSchema.classes[className],\n  };\n}\n\n/**\n * Given a property definition from the batch table, compute the equivalent\n * <code>EXT_structural_metadata</code> type definition\n *\n * @param {object} property The batch table property definition\n * @return {object} The corresponding structural metadata property definition\n * @private\n */\nfunction transcodePropertyType(property) {\n  const componentType = transcodeComponentType(property.componentType);\n\n  return {\n    type: property.type,\n    componentType: componentType,\n  };\n}\n\n/**\n * Convert the component type of a batch table property to the corresponding\n * type used with structural metadata\n *\n * @property {string} componentType the batch table's component type\n * @return {string} The corresponding structural metadata data type\n *\n * @private\n */\nfunction transcodeComponentType(componentType) {\n  switch (componentType) {\n    case \"BYTE\":\n      return \"INT8\";\n    case \"UNSIGNED_BYTE\":\n      return \"UINT8\";\n    case \"SHORT\":\n      return \"INT16\";\n    case \"UNSIGNED_SHORT\":\n      return \"UINT16\";\n    case \"INT\":\n      return \"INT32\";\n    case \"UNSIGNED_INT\":\n      return \"UINT32\";\n    case \"FLOAT\":\n      return \"FLOAT32\";\n    case \"DOUBLE\":\n      return \"FLOAT64\";\n  }\n}\n\n// exposed for testing\nparseBatchTable._deprecationWarning = deprecationWarning;\nparseBatchTable._oneTimeWarning = oneTimeWarning;\n\nexport default parseBatchTable;\n","import Check from \"../Core/Check.js\";\nimport combine from \"../Core/combine.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport PropertyTable from \"./PropertyTable.js\";\nimport PropertyTexture from \"./PropertyTexture.js\";\nimport StructuralMetadata from \"./StructuralMetadata.js\";\nimport MetadataTable from \"./MetadataTable.js\";\n\n/**\n * Parse the <code>EXT_feature_metadata</code> glTF extension to create a\n * structural metadata object.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.extension The extension JSON object.\n * @param {MetadataSchema} options.schema The parsed schema.\n * @param {Object<string, Uint8Array>} [options.bufferViews] An object mapping bufferView IDs to Uint8Array objects.\n * @param {Object<string, Texture>} [options.textures] An object mapping texture IDs to {@link Texture} objects.\n * @return {StructuralMetadata} A structural metadata object\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction parseFeatureMetadataLegacy(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const extension = options.extension;\n\n  // The calling code is responsible for loading the schema.\n  // This keeps metadata parsing synchronous.\n  const schema = options.schema;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.extension\", extension);\n  Check.typeOf.object(\"options.schema\", schema);\n  //>>includeEnd('debug');\n\n  let i;\n  const propertyTables = [];\n  let sortedIds;\n  if (defined(extension.featureTables)) {\n    // Store textures in an array sorted by the dictionary keys. This\n    // allows compatibility with the newer EXT_structural_metadata extension\n    // which is array-based.\n    sortedIds = Object.keys(extension.featureTables).sort();\n    for (i = 0; i < sortedIds.length; i++) {\n      const featureTableId = sortedIds[i];\n      const featureTable = extension.featureTables[featureTableId];\n      const classDefinition = schema.classes[featureTable.class];\n\n      const metadataTable = new MetadataTable({\n        count: featureTable.count,\n        properties: featureTable.properties,\n        class: classDefinition,\n        bufferViews: options.bufferViews,\n      });\n\n      propertyTables.push(\n        new PropertyTable({\n          id: featureTableId,\n          count: featureTable.count,\n          metadataTable: metadataTable,\n          extras: featureTable.extras,\n          extensions: featureTable.extensions,\n        }),\n      );\n    }\n  }\n\n  const propertyTextures = [];\n  if (defined(extension.featureTextures)) {\n    // Store textures in an array sorted by the dictionary keys. This\n    // allows compatibility with the newer EXT_structural_metadata extension\n    // which is array-based.\n    sortedIds = Object.keys(extension.featureTextures).sort();\n    for (i = 0; i < sortedIds.length; i++) {\n      const featureTextureId = sortedIds[i];\n      const featureTexture = extension.featureTextures[featureTextureId];\n      propertyTextures.push(\n        new PropertyTexture({\n          id: featureTextureId,\n          propertyTexture: transcodeToPropertyTexture(featureTexture),\n          class: schema.classes[featureTexture.class],\n          textures: options.textures,\n        }),\n      );\n    }\n  }\n\n  return new StructuralMetadata({\n    schema: schema,\n    propertyTables: propertyTables,\n    propertyTextures: propertyTextures,\n    statistics: extension.statistics,\n    extras: extension.extras,\n    extensions: extension.extensions,\n  });\n}\n\nfunction transcodeToPropertyTexture(featureTexture) {\n  const propertyTexture = {\n    class: featureTexture.class,\n    properties: {},\n  };\n\n  const properties = featureTexture.properties;\n  for (const propertyId in properties) {\n    if (properties.hasOwnProperty(propertyId)) {\n      const oldProperty = properties[propertyId];\n      const property = {\n        // EXT_structural_metadata uses numeric channel indices instead of\n        // a string of channel letters like \"rgba\".\n        channels: reformatChannels(oldProperty.channels),\n        extras: oldProperty.extras,\n        extensions: oldProperty.extensions,\n      };\n\n      // EXT_feature_metadata puts the textureInfo in property.texture.\n      // EXT_structural_metadata flattens this structure; essentially a\n      // textureInfo + channels\n      propertyTexture.properties[propertyId] = combine(\n        oldProperty.texture,\n        property,\n        true,\n      );\n    }\n  }\n\n  return propertyTexture;\n}\n\nfunction reformatChannels(channelsString) {\n  const length = channelsString.length;\n  const result = new Array(length);\n  for (let i = 0; i < length; i++) {\n    result[i] = \"rgba\".indexOf(channelsString[i]);\n  }\n  return result;\n}\n\nexport default parseFeatureMetadataLegacy;\n","import Check from \"../Core/Check.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport PropertyTable from \"./PropertyTable.js\";\nimport PropertyTexture from \"./PropertyTexture.js\";\nimport PropertyAttribute from \"./PropertyAttribute.js\";\nimport StructuralMetadata from \"./StructuralMetadata.js\";\nimport MetadataTable from \"./MetadataTable.js\";\nimport Sampler from \"../Renderer/Sampler.js\";\nimport Texture from \"../Renderer/Texture.js\";\nimport PixelFormat from \"../Core/PixelFormat.js\";\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\nimport TextureWrap from \"../Renderer/TextureWrap.js\";\nimport TextureMagnificationFilter from \"../Renderer/TextureMagnificationFilter.js\";\nimport TextureMinificationFilter from \"../Renderer/TextureMinificationFilter.js\";\nimport ContextLimits from \"../Renderer/ContextLimits.js\";\nimport MetadataComponentType from \"./MetadataComponentType.js\";\nimport MetadataType from \"./MetadataType.js\";\n\n/**\n * Parse the <code>EXT_structural_metadata</code> glTF extension to create a\n * structural metadata object.\n *\n * @param {object} options Object with the following properties:\n * @param {object} options.extension The extension JSON object.\n * @param {MetadataSchema} options.schema The parsed schema.\n * @param {Object<string, Uint8Array>} [options.bufferViews] An object mapping bufferView IDs to Uint8Array objects.\n * @param {Object<string, Texture>} [options.textures] An object mapping texture IDs to {@link Texture} objects.\n * @param {Context} [options.context] The current rendering context.\n * @return {StructuralMetadata} A structural metadata object\n * @private\n * @experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.\n */\nfunction parseStructuralMetadata(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n  const extension = options.extension;\n\n  // The calling code is responsible for loading the schema.\n  // This keeps metadata parsing synchronous.\n  const schema = options.schema;\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"options.extension\", extension);\n  Check.typeOf.object(\"options.schema\", schema);\n  //>>includeEnd('debug');\n\n  const propertyTables = [];\n  if (defined(extension.propertyTables)) {\n    for (let i = 0; i < extension.propertyTables.length; i++) {\n      const propertyTable = extension.propertyTables[i];\n      const classDefinition = schema.classes[propertyTable.class];\n      const propertyTableTexture = createTextureForPropertyTable(\n        propertyTable,\n        options.bufferViews,\n        classDefinition,\n        options.context,\n      );\n\n      const metadataTable = new MetadataTable({\n        count: propertyTable.count,\n        properties: propertyTable.properties,\n        class: classDefinition,\n        bufferViews: options.bufferViews,\n      });\n\n      propertyTables.push(\n        new PropertyTable({\n          id: i,\n          name: propertyTable.name,\n          count: propertyTable.count,\n          metadataTable: metadataTable,\n          extras: propertyTable.extras,\n          extensions: propertyTable.extensions,\n          texture: propertyTableTexture,\n        }),\n      );\n    }\n  }\n\n  const propertyTextures = [];\n  if (defined(extension.propertyTextures)) {\n    for (let i = 0; i < extension.propertyTextures.length; i++) {\n      const propertyTexture = extension.propertyTextures[i];\n      propertyTextures.push(\n        new PropertyTexture({\n          id: i,\n          name: propertyTexture.name,\n          propertyTexture: propertyTexture,\n          class: schema.classes[propertyTexture.class],\n          textures: options.textures,\n        }),\n      );\n    }\n  }\n\n  const propertyAttributes = [];\n  if (defined(extension.propertyAttributes)) {\n    for (let i = 0; i < extension.propertyAttributes.length; i++) {\n      const propertyAttribute = extension.propertyAttributes[i];\n      propertyAttributes.push(\n        new PropertyAttribute({\n          id: i,\n          name: propertyAttribute.name,\n          class: schema.classes[propertyAttribute.class],\n          propertyAttribute: propertyAttribute,\n        }),\n      );\n    }\n  }\n\n  return new StructuralMetadata({\n    schema: schema,\n    propertyTables: propertyTables,\n    propertyTextures: propertyTextures,\n    propertyAttributes: propertyAttributes,\n    statistics: extension.statistics,\n    extras: extension.extras,\n    extensions: extension.extensions,\n  });\n}\n\n// Always use four channels for property table textures.\nconst NUM_CHANNELS = 4;\n\n/**\n * Creates a texture from a set of property table properties (those which are GPU compatible).\n * Each row of the texture is a property, with each column corresponding to a given feature.\n *\n * @param {PropertyTable} propertyTable The property table.\n * @param {Object<string, Uint8Array>} bufferViews An object mapping bufferView IDs to Uint8Array objects for the given property table.\n * @param {MetadataClass} classDefinition Class defined in the schema\n * @param {Context} context The rendering context.\n * @returns {Texture|undefined} The created texture, or <code>undefined</code> if no properties are GPU compatible.\n *\n * @private\n */\nfunction createTextureForPropertyTable(\n  propertyTable,\n  bufferViews,\n  classDefinition,\n  context,\n) {\n  const properties = propertyTable.properties;\n  if (!defined(properties)) {\n    return undefined;\n  }\n\n  const numFeatures = propertyTable.count;\n\n  let gpuCompatiblePropertyBufferViews;\n  try {\n    gpuCompatiblePropertyBufferViews = collectGpuCompatiblePropertyBufferViews(\n      properties,\n      bufferViews,\n      classDefinition,\n      numFeatures,\n    );\n  } catch (error) {\n    console.warn(\n      `Failed to create texture for property table \"${propertyTable.name}\": ${error.message}`,\n    );\n    return undefined;\n  }\n\n  const numGpuCompatibleProperties = gpuCompatiblePropertyBufferViews.length;\n\n  if (numGpuCompatibleProperties === 0) {\n    return undefined;\n  }\n\n  // In the future, we could use multiple textures if we would exceed the maximum texture size.\n  if (\n    numFeatures > ContextLimits.maximumTextureSize ||\n    numGpuCompatibleProperties > ContextLimits.maximumTextureSize\n  ) {\n    oneTimeWarning(\n      \"PropertyTableTextureExceedsMaximumSize\",\n      `Cannot create a texture for the property table \"${propertyTable.name}\" because it exceeds the maximum texture size of ${ContextLimits.maximumTextureSize}.`,\n    );\n    return undefined;\n  }\n\n  const packedBufferView = packPropertyTablePropertiesIntoRGBA8(\n    gpuCompatiblePropertyBufferViews,\n    numFeatures,\n  );\n\n  // Create a sampler fit for sampling raw data without mipmapping / filtering etc.\n  const sampler = new Sampler({\n    wrapS: TextureWrap.CLAMP_TO_EDGE,\n    wrapT: TextureWrap.CLAMP_TO_EDGE,\n    minificationFilter: TextureMinificationFilter.NEAREST,\n    magnificationFilter: TextureMagnificationFilter.NEAREST,\n  });\n\n  return Texture.create({\n    context: context,\n    pixelFormat: PixelFormat.RGBA,\n    pixelDatatype: PixelDatatype.UNSIGNED_BYTE,\n    sampler: sampler,\n    flipY: false,\n    source: {\n      width: numFeatures,\n      height: numGpuCompatibleProperties,\n      arrayBufferView: packedBufferView,\n    },\n  });\n}\n\nfunction collectGpuCompatiblePropertyBufferViews(\n  properties,\n  bufferViews,\n  classDefinition,\n  numFeatures,\n) {\n  const bufferViewsForThisTable = [];\n  const classProperties = classDefinition.properties;\n\n  // It's possible for a primitive in a tileset to only use a subset of the class properties defined in the schema.\n  // For instance, the Design Tiler merges classes together by default, and omits properties in primitives that aren't used.\n  // To make the default values available to the GPU, and to avoid compiling different versions of the shader for each primitive,\n  // we iterate over _all_ class properties here - not just the properties in the property table.\n  for (const [propertyId, classProperty] of Object.entries(classProperties)) {\n    // Certain properties like strings, dynamic-sized arrays, and 64-bit types cannot be represented natively on the GPU.\n    if (!classProperty.isGpuCompatible(NUM_CHANNELS)) {\n      continue;\n    }\n\n    const property = properties[propertyId];\n    const bufferView = defined(property)\n      ? bufferViews[property.values]\n      : createNoDataBufferView(classProperty, numFeatures);\n\n    const bufferViewLength = bufferView.length;\n    const bytesPerElement = classProperty.bytesPerElement();\n    const numBufferElements = bufferViewLength / bytesPerElement;\n    if (numBufferElements !== numFeatures) {\n      throw new RuntimeError(\n        `Property with ID: \"${propertyId}\" has (${numBufferElements}), which does not match number of features in the property table: (${numFeatures}).`,\n      );\n    }\n\n    bufferViewsForThisTable.push({\n      view: bufferView,\n      bytesPerElement: bytesPerElement,\n    });\n  }\n\n  return bufferViewsForThisTable;\n}\n\n/**\n * When a property is part of a tileset class schema but not used in a property table,\n * we create a buffer view filled with the property's noData value.\n *\n * @param {MetadataClassProperty} classProperty The class property definition.\n * @param {number} numFeatures The number of features in the property table.\n *\n * @returns {Uint8Array} A buffer view filled with the property's noData value.\n *\n * @private\n */\nfunction createNoDataBufferView(classProperty, numFeatures) {\n  // noData can be a number, an array of numbers (e.g. for vecN types), or a nested array of numbers (e.g. for arrays of vecN types).\n  let noData = classProperty.noData;\n  const metadataComponentCount = MetadataType.getComponentCount(\n    classProperty.type,\n  );\n  const metadataArrayLength = classProperty.isArray\n    ? classProperty.arrayLength\n    : 1;\n\n  // Special case: noData enum values are specified as strings, so we need to convert them to numbers here.\n  if (classProperty.type === MetadataType.ENUM) {\n    const enumDefinition = classProperty.enumType;\n    noData = enumDefinition.valuesByName[noData];\n  }\n\n  // Wrap noData in an array (up to two times) so we can treat it uniformly in the loop below.\n  if (metadataComponentCount === 1) {\n    noData = [noData];\n  }\n\n  if (metadataArrayLength === 1) {\n    noData = [noData];\n  }\n\n  const bytesPerElement = classProperty.bytesPerElement();\n  const buffer = new ArrayBuffer(bytesPerElement * numFeatures);\n  const view = new DataView(buffer);\n  const setter = MetadataComponentType.getDataViewSetter(\n    view,\n    classProperty.componentType,\n  );\n\n  for (let i = 0; i < numFeatures; i++) {\n    for (let j = 0; j < metadataArrayLength; j++) {\n      for (let k = 0; k < metadataComponentCount; k++) {\n        setter(bytesPerElement * i + j + k, noData[j][k]);\n      }\n    }\n  }\n\n  return new Uint8Array(buffer);\n}\n\n// Make one big buffer view to load into the texture\n// Since each texel is always 4 bytes (RGBA8 format), elements less than 4 bytes need to be padded (respecting little-endian order).\nfunction packPropertyTablePropertiesIntoRGBA8(\n  bufferViewsForThisTable,\n  numFeatures,\n) {\n  const numGpuCompatibleProperties = bufferViewsForThisTable.length;\n  const packedBufferView = new Uint8Array(\n    numGpuCompatibleProperties * numFeatures * NUM_CHANNELS,\n  );\n\n  for (let i = 0, offset = 0; i < bufferViewsForThisTable.length; i++) {\n    const bufferView = bufferViewsForThisTable[i].view;\n    const bytesPerElement = bufferViewsForThisTable[i].bytesPerElement;\n    const numElements = bufferView.length / bytesPerElement;\n\n    for (let j = 0; j < numElements; j++) {\n      const sourceOffset = j * bytesPerElement;\n      const destOffset = offset + j * NUM_CHANNELS;\n\n      packedBufferView.set(\n        bufferView.subarray(sourceOffset, sourceOffset + bytesPerElement),\n        destOffset,\n      );\n\n      // Pad remaining channels with 0\n      for (let k = bytesPerElement; k < NUM_CHANNELS; k++) {\n        packedBufferView[destOffset + k] = 0;\n      }\n    }\n\n    offset += numElements * NUM_CHANNELS;\n  }\n\n  return packedBufferView;\n}\n\nexport default parseStructuralMetadata;\n","import defined from \"../Core/defined.js\";\nimport getJsonFromTypedArray from \"../Core/getJsonFromTypedArray.js\";\nimport getMagic from \"../Core/getMagic.js\";\nimport RuntimeError from \"../Core/RuntimeError.js\";\nimport Cesium3DTileContentType from \"./Cesium3DTileContentType.js\";\n\n/**\n * Results of the preprocess3DTileContent() function. This includes the\n * {@link Cesium3DTileContentType} and the payload. The payload is either\n * binary or JSON depending on the content type.\n *\n * @typedef {object} PreprocessedContent\n * @property {Cesium3DTileContentType} contentType The type of the content\n * @property {Uint8Array} [binaryPayload] For binary files, the payload is returned as a typed array with byteOffset of 0\n * @property {object} [jsonPayload] For JSON files, the results are returned as a JSON object.\n * @private\n */\n\n/**\n * Preprocess a {@link Cesium3DTileContent}, to determine the type of content\n * and to parse JSON files into objects.\n *\n * @param {ArrayBuffer} arrayBuffer The raw binary payload\n * @return {PreprocessedContent}\n * @private\n */\nfunction preprocess3DTileContent(arrayBuffer) {\n  const uint8Array = new Uint8Array(arrayBuffer);\n  let contentType = getMagic(uint8Array);\n\n  // We use glTF for JSON glTF files. For binary glTF, we rename this\n  // to glb to disambiguate\n  if (contentType === \"glTF\") {\n    contentType = \"glb\";\n  }\n\n  if (Cesium3DTileContentType.isBinaryFormat(contentType)) {\n    return {\n      // For binary files, the enum value is the magic number\n      contentType: contentType,\n      binaryPayload: uint8Array,\n    };\n  }\n\n  const json = getJsonContent(uint8Array);\n  if (defined(json.root)) {\n    // Most likely a tileset JSON\n    return {\n      contentType: Cesium3DTileContentType.EXTERNAL_TILESET,\n      jsonPayload: json,\n    };\n  }\n\n  if (defined(json.asset)) {\n    // Most likely a glTF. Tileset JSON also has an \"asset\" property\n    // so this check needs to happen second\n    return {\n      contentType: Cesium3DTileContentType.GLTF,\n      jsonPayload: json,\n    };\n  }\n\n  if (defined(json.tileAvailability)) {\n    // Most likely a subtree JSON.\n    return {\n      contentType: Cesium3DTileContentType.IMPLICIT_SUBTREE_JSON,\n      jsonPayload: json,\n    };\n  }\n\n  if (defined(json.type)) {\n    // Most likely a GeoJSON\n    return {\n      contentType: Cesium3DTileContentType.GEOJSON,\n      jsonPayload: json,\n    };\n  }\n\n  if (defined(json.voxelTable)) {\n    // Most likely a voxel JSON\n    return {\n      contentType: Cesium3DTileContentType.VOXEL_JSON,\n      jsonPayload: json,\n    };\n  }\n\n  throw new RuntimeError(\"Invalid tile content.\");\n}\n\nfunction getJsonContent(uint8Array) {\n  let json;\n\n  try {\n    json = getJsonFromTypedArray(uint8Array);\n  } catch (error) {\n    throw new RuntimeError(\"Invalid tile content.\");\n  }\n\n  return json;\n}\n\nexport default preprocess3DTileContent;\n","import defined from \"../Core/defined.js\";\nimport MetadataType from \"./MetadataType.js\";\nimport ShaderDestination from \"../Renderer/ShaderDestination.js\";\n\n/**\n * Update the shader with defines, structs, and functions to handle\n * voxel properties and statistics\n * @function\n *\n * @param {VoxelRenderResources} renderResources\n * @param {VoxelPrimitive} primitive\n *\n * @private\n */\nfunction processVoxelProperties(renderResources, primitive) {\n  const { shaderBuilder } = renderResources;\n\n  const { names, types, componentTypes, minimumValues, maximumValues } =\n    primitive._provider;\n\n  const attributeLength = types.length;\n  const hasStatistics = defined(minimumValues) && defined(maximumValues);\n\n  shaderBuilder.addDefine(\n    \"METADATA_COUNT\",\n    attributeLength,\n    ShaderDestination.FRAGMENT,\n  );\n\n  if (hasStatistics) {\n    shaderBuilder.addDefine(\n      \"STATISTICS\",\n      undefined,\n      ShaderDestination.FRAGMENT,\n    );\n  }\n\n  // PropertyStatistics structs\n  for (let i = 0; i < attributeLength; i++) {\n    const name = names[i];\n    const glslType = getGlslType(types[i]);\n    const propertyStatisticsStructId = `PropertyStatistics_${name}`;\n    const propertyStatisticsStructName = `PropertyStatistics_${name}`;\n    shaderBuilder.addStruct(\n      propertyStatisticsStructId,\n      propertyStatisticsStructName,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addStructField(propertyStatisticsStructId, glslType, \"min\");\n    shaderBuilder.addStructField(propertyStatisticsStructId, glslType, \"max\");\n  }\n\n  // MetadataStatistics struct\n  const metadataStatisticsStructId = \"MetadataStatistics\";\n  const metadataStatisticsStructName = \"MetadataStatistics\";\n  const metadataStatisticsFieldName = \"metadataStatistics\";\n  shaderBuilder.addStruct(\n    metadataStatisticsStructId,\n    metadataStatisticsStructName,\n    ShaderDestination.FRAGMENT,\n  );\n  for (let i = 0; i < attributeLength; i++) {\n    const name = names[i];\n    const propertyStructName = `PropertyStatistics_${name}`;\n    const propertyFieldName = name;\n    shaderBuilder.addStructField(\n      metadataStatisticsStructId,\n      propertyStructName,\n      propertyFieldName,\n    );\n  }\n\n  // Metadata struct\n  const metadataStructId = \"Metadata\";\n  const metadataStructName = \"Metadata\";\n  const metadataFieldName = \"metadata\";\n  shaderBuilder.addStruct(\n    metadataStructId,\n    metadataStructName,\n    ShaderDestination.FRAGMENT,\n  );\n  for (let i = 0; i < attributeLength; i++) {\n    const glslType = getGlslType(types[i]);\n    shaderBuilder.addStructField(metadataStructId, glslType, names[i]);\n  }\n\n  // Attributes struct\n  const attributesStructId = \"Attributes\";\n  const attributesStructName = \"Attributes\";\n  const attributesFieldName = \"attributes\";\n  shaderBuilder.addStruct(\n    attributesStructId,\n    attributesStructName,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addStructField(attributesStructId, \"vec3\", \"positionEC\");\n  shaderBuilder.addStructField(attributesStructId, \"vec3\", \"normalEC\");\n\n  // Voxel struct\n  const voxelStructId = \"Voxel\";\n  const voxelStructName = \"Voxel\";\n  const voxelFieldName = \"voxel\";\n  shaderBuilder.addStruct(\n    voxelStructId,\n    voxelStructName,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addStructField(voxelStructId, \"vec3\", \"viewDirUv\");\n  shaderBuilder.addStructField(voxelStructId, \"float\", \"travelDistance\");\n  shaderBuilder.addStructField(voxelStructId, \"int\", \"stepCount\");\n  shaderBuilder.addStructField(voxelStructId, \"int\", \"tileIndex\");\n  shaderBuilder.addStructField(voxelStructId, \"int\", \"sampleIndex\");\n  shaderBuilder.addStructField(voxelStructId, \"float\", \"distanceToDepthBuffer\");\n\n  // FragmentInput struct\n  const fragmentInputStructId = \"FragmentInput\";\n  const fragmentInputStructName = \"FragmentInput\";\n  shaderBuilder.addStruct(\n    fragmentInputStructId,\n    fragmentInputStructName,\n    ShaderDestination.FRAGMENT,\n  );\n  shaderBuilder.addStructField(\n    fragmentInputStructId,\n    metadataStatisticsStructName,\n    metadataStatisticsFieldName,\n  );\n  shaderBuilder.addStructField(\n    fragmentInputStructId,\n    metadataStructName,\n    metadataFieldName,\n  );\n  shaderBuilder.addStructField(\n    fragmentInputStructId,\n    attributesStructName,\n    attributesFieldName,\n  );\n  shaderBuilder.addStructField(\n    fragmentInputStructId,\n    voxelStructName,\n    voxelFieldName,\n  );\n\n  // Properties struct\n  const propertiesStructId = \"Properties\";\n  const propertiesStructName = \"Properties\";\n  const propertiesFieldName = \"properties\";\n  shaderBuilder.addStruct(\n    propertiesStructId,\n    propertiesStructName,\n    ShaderDestination.FRAGMENT,\n  );\n  for (let i = 0; i < attributeLength; i++) {\n    const glslType = getGlslType(types[i]);\n    shaderBuilder.addStructField(propertiesStructId, glslType, names[i]);\n  }\n\n  // Fragment shader functions\n\n  // clearProperties function\n  {\n    const functionId = \"clearProperties\";\n    shaderBuilder.addFunction(\n      functionId,\n      `${propertiesStructName} clearProperties()`,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [\n      `${propertiesStructName} ${propertiesFieldName};`,\n    ]);\n    for (let i = 0; i < attributeLength; i++) {\n      const glslType = getGlslType(types[i], componentTypes[i]);\n      shaderBuilder.addFunctionLines(functionId, [\n        `${propertiesFieldName}.${names[i]} = ${glslType}(0.0);`,\n      ]);\n    }\n    shaderBuilder.addFunctionLines(functionId, [\n      `return ${propertiesFieldName};`,\n    ]);\n  }\n\n  // sumProperties function\n  {\n    const functionId = \"sumProperties\";\n    shaderBuilder.addFunction(\n      functionId,\n      `${propertiesStructName} sumProperties(${propertiesStructName} propertiesA, ${propertiesStructName} propertiesB)`,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [\n      `${propertiesStructName} ${propertiesFieldName};`,\n    ]);\n    for (let i = 0; i < attributeLength; i++) {\n      const name = names[i];\n      shaderBuilder.addFunctionLines(functionId, [\n        `${propertiesFieldName}.${name} = propertiesA.${name} + propertiesB.${name};`,\n      ]);\n    }\n    shaderBuilder.addFunctionLines(functionId, [\n      `return ${propertiesFieldName};`,\n    ]);\n  }\n\n  // scaleProperties function\n  {\n    const functionId = \"scaleProperties\";\n    shaderBuilder.addFunction(\n      functionId,\n      `${propertiesStructName} scaleProperties(${propertiesStructName} ${propertiesFieldName}, float scale)`,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [\n      `${propertiesStructName} scaledProperties = ${propertiesFieldName};`,\n    ]);\n    for (let i = 0; i < attributeLength; i++) {\n      shaderBuilder.addFunctionLines(functionId, [\n        `scaledProperties.${names[i]} *= scale;`,\n      ]);\n    }\n    shaderBuilder.addFunctionLines(functionId, [`return scaledProperties;`]);\n  }\n\n  // mixProperties\n  {\n    const functionId = \"mixProperties\";\n    shaderBuilder.addFunction(\n      functionId,\n      `${propertiesStructName} mixProperties(${propertiesStructName} propertiesA, ${propertiesStructName} propertiesB, float mixFactor)`,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [\n      `${propertiesStructName} ${propertiesFieldName};`,\n    ]);\n    for (let i = 0; i < attributeLength; i++) {\n      const name = names[i];\n      shaderBuilder.addFunctionLines(functionId, [\n        `${propertiesFieldName}.${name} = mix(propertiesA.${name}, propertiesB.${name}, mixFactor);`,\n      ]);\n    }\n    shaderBuilder.addFunctionLines(functionId, [\n      `return ${propertiesFieldName};`,\n    ]);\n  }\n\n  // copyPropertiesToMetadata\n  {\n    const functionId = \"copyPropertiesToMetadata\";\n    shaderBuilder.addFunction(\n      functionId,\n      `void copyPropertiesToMetadata(in ${propertiesStructName} ${propertiesFieldName}, inout ${metadataStructName} ${metadataFieldName})`,\n      ShaderDestination.FRAGMENT,\n    );\n    for (let i = 0; i < attributeLength; i++) {\n      const name = names[i];\n      shaderBuilder.addFunctionLines(functionId, [\n        `${metadataFieldName}.${name} = ${propertiesFieldName}.${name};`,\n      ]);\n    }\n  }\n\n  // setStatistics function\n  if (hasStatistics) {\n    const functionId = \"setStatistics\";\n    shaderBuilder.addFunction(\n      functionId,\n      `void setStatistics(inout ${metadataStatisticsStructName} ${metadataStatisticsFieldName})`,\n      ShaderDestination.FRAGMENT,\n    );\n    for (let i = 0; i < attributeLength; i++) {\n      const name = names[i];\n      const type = types[i];\n      const componentCount = MetadataType.getComponentCount(type);\n      for (let j = 0; j < componentCount; j++) {\n        const glslField = getGlslField(type, j);\n        const minimumValue = minimumValues[i][j];\n        const maximumValue = maximumValues[i][j];\n        if (!defined(minimumValue) || !defined(maximumValue)) {\n          continue;\n        }\n        shaderBuilder.addFunctionLines(functionId, [\n          `${metadataStatisticsFieldName}.${name}.min${glslField} = ${getGlslNumberAsFloat(\n            minimumValue,\n          )};`,\n          `${metadataStatisticsFieldName}.${name}.max${glslField} = ${getGlslNumberAsFloat(\n            maximumValue,\n          )};`,\n        ]);\n      }\n    }\n  }\n\n  // getPropertiesFromMegatextureAtUv\n  {\n    const functionId = \"getPropertiesFromMegatextureAtUv\";\n    shaderBuilder.addFunction(\n      functionId,\n      `${propertiesStructName} getPropertiesFromMegatextureAtUv(vec3 texcoord)`,\n      ShaderDestination.FRAGMENT,\n    );\n    shaderBuilder.addFunctionLines(functionId, [\n      `${propertiesStructName} ${propertiesFieldName};`,\n    ]);\n    for (let i = 0; i < attributeLength; i++) {\n      const type = types[i];\n      const componentType = componentTypes[i];\n      const glslTextureSwizzle = getGlslTextureSwizzle(type, componentType);\n      shaderBuilder.addFunctionLines(functionId, [\n        `properties.${names[i]} = texture(u_megatextureTextures[${i}], texcoord)${glslTextureSwizzle};`,\n      ]);\n    }\n    shaderBuilder.addFunctionLines(functionId, [\n      `return ${propertiesFieldName};`,\n    ]);\n  }\n}\n\n/**\n * Converts a {@link MetadataType} to a GLSL type.\n *\n * @function\n *\n * @param {MetadataType} type The {@link MetadataType}.\n * @returns {string} The GLSL type.\n *\n * @private\n */\nfunction getGlslType(type) {\n  if (type === MetadataType.SCALAR) {\n    return \"float\";\n  } else if (type === MetadataType.VEC2) {\n    return \"vec2\";\n  } else if (type === MetadataType.VEC3) {\n    return \"vec3\";\n  } else if (type === MetadataType.VEC4) {\n    return \"vec4\";\n  }\n}\n\n/**\n * Gets the GLSL swizzle when reading data from a texture.\n *\n * @function\n *\n * @param {MetadataType} type The {@link MetadataType}.\n * @returns {string} The GLSL swizzle.\n *\n * @private\n */\nfunction getGlslTextureSwizzle(type) {\n  if (type === MetadataType.SCALAR) {\n    return \".r\";\n  } else if (type === MetadataType.VEC2) {\n    return \".ra\";\n  } else if (type === MetadataType.VEC3) {\n    return \".rgb\";\n  } else if (type === MetadataType.VEC4) {\n    return \"\";\n  }\n}\n\n/**\n * GLSL needs to have `.0` at the end of whole number floats or else it's\n * treated like an integer.\n *\n * @function\n *\n * @param {number} number The number to convert.\n * @returns {string} The number as floating point in GLSL.\n *\n * @private\n */\nfunction getGlslNumberAsFloat(number) {\n  let numberString = number.toString();\n  if (numberString.indexOf(\".\") === -1) {\n    numberString = `${number}.0`;\n  }\n  return numberString;\n}\n\n/**\n * Gets the GLSL field\n *\n * @function\n *\n * @param {MetadataType} type\n * @param {number} index\n * @returns {string}\n *\n * @private\n */\nfunction getGlslField(type, index) {\n  if (type === MetadataType.SCALAR) {\n    return \"\";\n  }\n  return `[${index}]`;\n}\n\nexport default processVoxelProperties;\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef MRT\\n\\\nlayout (location = 0) out vec4 out_FragData_0;\\n\\\nlayout (location = 1) out vec4 out_FragData_1;\\n\\\n#else\\n\\\nlayout (location = 0) out vec4 out_FragColor;\\n\\\n#endif\\n\\\n\\n\\\nuniform vec4 u_bgColor;\\n\\\nuniform sampler2D u_depthTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    if (texture(u_depthTexture, v_textureCoordinates).r < 1.0)\\n\\\n    {\\n\\\n#ifdef MRT\\n\\\n        out_FragData_0 = u_bgColor;\\n\\\n        out_FragData_1 = vec4(u_bgColor.a);\\n\\\n#else\\n\\\n        out_FragColor = u_bgColor;\\n\\\n#endif\\n\\\n        return;\\n\\\n    }\\n\\\n    \\n\\\n    discard;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 v_positionEC;\\n\\\nin vec3 v_normalEC;\\n\\\nin vec3 v_tangentEC;\\n\\\nin vec3 v_bitangentEC;\\n\\\nin vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec3 positionToEyeEC = -v_positionEC;\\n\\\n    mat3 tangentToEyeMatrix = czm_tangentToEyeSpaceMatrix(v_normalEC, v_tangentEC, v_bitangentEC);\\n\\\n\\n\\\n    vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n    normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n    materialInput.tangentToEyeMatrix = tangentToEyeMatrix;\\n\\\n    materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n    materialInput.st = v_st;\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n    out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec3 normal;\\n\\\nin vec3 tangent;\\n\\\nin vec3 bitangent;\\n\\\nin vec2 st;\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec3 v_positionEC;\\n\\\nout vec3 v_normalEC;\\n\\\nout vec3 v_tangentEC;\\n\\\nout vec3 v_bitangentEC;\\n\\\nout vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 p = czm_computePosition();\\n\\\n\\n\\\n    v_positionEC = (czm_modelViewRelativeToEye * p).xyz;      // position in eye coordinates\\n\\\n    v_normalEC = czm_normal * normal;                         // normal in eye coordinates\\n\\\n    v_tangentEC = czm_normal * tangent;                       // tangent in eye coordinates\\n\\\n    v_bitangentEC = czm_normal * bitangent;                   // bitangent in eye coordinates\\n\\\n    v_st = st;\\n\\\n\\n\\\n    gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 v_positionEC;\\n\\\nin vec3 v_normalEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec3 positionToEyeEC = -v_positionEC;\\n\\\n\\n\\\n    vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n    normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n    materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n    out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec3 normal;\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec3 v_positionEC;\\n\\\nout vec3 v_normalEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 p = czm_computePosition();\\n\\\n\\n\\\n    v_positionEC = (czm_modelViewRelativeToEye * p).xyz;      // position in eye coordinates\\n\\\n    v_normalEC = czm_normal * normal;                         // normal in eye coordinates\\n\\\n\\n\\\n    gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 v_positionMC;\\n\\\nin vec3 v_positionEC;\\n\\\nin vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    czm_materialInput materialInput;\\n\\\n\\n\\\n    vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));\\n\\\n#ifdef FACE_FORWARD\\n\\\n    normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n    materialInput.s = v_st.s;\\n\\\n    materialInput.st = v_st;\\n\\\n    materialInput.str = vec3(v_st, 0.0);\\n\\\n\\n\\\n    // Convert tangent space material normal to eye space\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n    materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);\\n\\\n\\n\\\n    // Convert view vector to world space\\n\\\n    vec3 positionToEyeEC = -v_positionEC;\\n\\\n    materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n    out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec2 st;\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec3 v_positionMC;\\n\\\nout vec3 v_positionEC;\\n\\\nout vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 p = czm_computePosition();\\n\\\n\\n\\\n    v_positionMC = position3DHigh + position3DLow;           // position in model coordinates\\n\\\n    v_positionEC = (czm_modelViewRelativeToEye * p).xyz;     // position in eye coordinates\\n\\\n    v_st = st;\\n\\\n\\n\\\n    gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 v_positionEC;\\n\\\nin vec3 v_normalEC;\\n\\\nin vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec3 positionToEyeEC = -v_positionEC;\\n\\\n\\n\\\n    vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n    normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n    vec4 color = czm_gammaCorrect(v_color);\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n    materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n    material.diffuse = color.rgb;\\n\\\n    material.alpha = color.a;\\n\\\n\\n\\\n    out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec3 normal;\\n\\\nin vec4 color;\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec3 v_positionEC;\\n\\\nout vec3 v_normalEC;\\n\\\nout vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 p = czm_computePosition();\\n\\\n\\n\\\n    v_positionEC = (czm_modelViewRelativeToEye * p).xyz;      // position in eye coordinates\\n\\\n    v_normalEC = czm_normal * normal;                         // normal in eye coordinates\\n\\\n    v_color = color;\\n\\\n\\n\\\n    gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    out_FragColor = czm_gammaCorrect(v_color);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec4 color;\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 p = czm_computePosition();\\n\\\n\\n\\\n    v_color = color;\\n\\\n\\n\\\n    gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec3 prevPosition3DHigh;\\n\\\nin vec3 prevPosition3DLow;\\n\\\nin vec3 nextPosition3DHigh;\\n\\\nin vec3 nextPosition3DLow;\\n\\\nin vec2 expandAndWidth;\\n\\\nin vec4 color;\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec4 v_color;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float expandDir = expandAndWidth.x;\\n\\\n    float width = abs(expandAndWidth.y) + 0.5;\\n\\\n    bool usePrev = expandAndWidth.y < 0.0;\\n\\\n\\n\\\n    vec4 p = czm_computePosition();\\n\\\n    vec4 prev = czm_computePrevPosition();\\n\\\n    vec4 next = czm_computeNextPosition();\\n\\\n\\n\\\n    float angle;\\n\\\n    vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);\\n\\\n    gl_Position = czm_viewportOrthographic * positionWC;\\n\\\n\\n\\\n    v_color = color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec3 prevPosition3DHigh;\\n\\\nin vec3 prevPosition3DLow;\\n\\\nin vec3 nextPosition3DHigh;\\n\\\nin vec3 nextPosition3DLow;\\n\\\nin vec2 expandAndWidth;\\n\\\nin vec2 st;\\n\\\nin float batchId;\\n\\\n\\n\\\nout float v_width;\\n\\\nout vec2 v_st;\\n\\\nout float v_polylineAngle;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float expandDir = expandAndWidth.x;\\n\\\n    float width = abs(expandAndWidth.y) + 0.5;\\n\\\n    bool usePrev = expandAndWidth.y < 0.0;\\n\\\n\\n\\\n    vec4 p = czm_computePosition();\\n\\\n    vec4 prev = czm_computePrevPosition();\\n\\\n    vec4 next = czm_computeNextPosition();\\n\\\n\\n\\\n    float angle;\\n\\\n    vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);\\n\\\n    gl_Position = czm_viewportOrthographic * positionWC;\\n\\\n\\n\\\n    v_width = width;\\n\\\n    v_st.s = st.s;\\n\\\n    v_st.t = czm_writeNonPerspective(st.t, gl_Position.w);\\n\\\n    v_polylineAngle = angle;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 v_positionEC;\\n\\\nin vec3 v_normalEC;\\n\\\nin vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec3 positionToEyeEC = -v_positionEC;\\n\\\n\\n\\\n    vec3 normalEC = normalize(v_normalEC);\\n\\\n#ifdef FACE_FORWARD\\n\\\n    normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);\\n\\\n#endif\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n    materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n    materialInput.st = v_st;\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else\\n\\\n    out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec3 normal;\\n\\\nin vec2 st;\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec3 v_positionEC;\\n\\\nout vec3 v_normalEC;\\n\\\nout vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 p = czm_computePosition();\\n\\\n\\n\\\n    v_positionEC = (czm_modelViewRelativeToEye * p).xyz;      // position in eye coordinates\\n\\\n    v_normalEC = czm_normal * normal;                         // normal in eye coordinates\\n\\\n    v_st = st;\\n\\\n\\n\\\n    gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec3 u_radiiAndDynamicAtmosphereColor;\\n\\\n\\n\\\nuniform float u_atmosphereLightIntensity;\\n\\\nuniform float u_atmosphereRayleighScaleHeight;\\n\\\nuniform float u_atmosphereMieScaleHeight;\\n\\\nuniform float u_atmosphereMieAnisotropy;\\n\\\nuniform vec3 u_atmosphereRayleighCoefficient;\\n\\\nuniform vec3 u_atmosphereMieCoefficient;\\n\\\n\\n\\\nconst float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters.\\n\\\nconst int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled.\\n\\\nconst int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.\\n\\\n\\n\\\n/**\\n\\\n * This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as\\n\\\n * the transmittance value for the ray.\\n\\\n *\\n\\\n * @param {czm_ray} primaryRay The ray from the camera to the position.\\n\\\n * @param {float} primaryRayLength The length of the primary ray.\\n\\\n * @param {vec3} lightDirection The direction of the light to calculate the scattering from.\\n\\\n * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to.\\n\\\n * @param {vec3} mieColor The variable the Mie scattering will be written to.\\n\\\n * @param {float} opacity The variable the transmittance will be written to.\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvoid computeScattering(\\n\\\n    czm_ray primaryRay,\\n\\\n    float primaryRayLength,\\n\\\n    vec3 lightDirection,\\n\\\n    float atmosphereInnerRadius,\\n\\\n    out vec3 rayleighColor,\\n\\\n    out vec3 mieColor,\\n\\\n    out float opacity\\n\\\n) {\\n\\\n\\n\\\n    // Initialize the default scattering amounts to 0.\\n\\\n    rayleighColor = vec3(0.0);\\n\\\n    mieColor = vec3(0.0);\\n\\\n    opacity = 0.0;\\n\\\n\\n\\\n    float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;\\n\\\n\\n\\\n    vec3 origin = vec3(0.0);\\n\\\n\\n\\\n    // Calculate intersection from the camera to the outer ring of the atmosphere.\\n\\\n    czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius);\\n\\\n\\n\\\n    // Return empty colors if no intersection with the atmosphere geometry.\\n\\\n    if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) {\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    // To deal with smaller values of PRIMARY_STEPS (e.g. 4)\\n\\\n    // we implement a split strategy: sky or horizon.\\n\\\n    // For performance reasons, instead of a if/else branch\\n\\\n    // a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0\\n\\\n    float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength);\\n\\\n    // Value close to 0.0: close to the horizon\\n\\\n    // Value close to 1.0: above in the sky\\n\\\n    float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x));\\n\\\n\\n\\\n    // The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere.\\n\\\n    float start_0 = primaryRayAtmosphereIntersect.start;\\n\\\n    primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0);\\n\\\n    // The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller.\\n\\\n    primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength));\\n\\\n\\n\\\n    // For the number of ray steps, distinguish inside or outside atmosphere (outer space)\\n\\\n    // (1) from outer space we have to use more ray steps to get a realistic rendering\\n\\\n    // (2) within atmosphere we need fewer steps for faster rendering\\n\\\n    float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters\\n\\\n    float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a));\\n\\\n    int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled.\\n\\\n    int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.\\n\\\n\\n\\\n    // Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere.\\n\\\n    float rayPositionLength = primaryRayAtmosphereIntersect.start;\\n\\\n    // (1) Outside the atmosphere: constant rayStepLength\\n\\\n    // (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps\\n\\\n    float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength;\\n\\\n    float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0));\\n\\\n    float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS));\\n\\\n\\n\\\n    vec3 rayleighAccumulation = vec3(0.0);\\n\\\n    vec3 mieAccumulation = vec3(0.0);\\n\\\n    vec2 opticalDepth = vec2(0.0);\\n\\\n    vec2 heightScale = vec2(u_atmosphereRayleighScaleHeight, u_atmosphereMieScaleHeight);\\n\\\n\\n\\\n    // Sample positions on the primary ray.\\n\\\n    for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) {\\n\\\n\\n\\\n        // The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot\\n\\\n        // loop with non-constant condition, so it has to break early instead\\n\\\n        if (i >= PRIMARY_STEPS) {\\n\\\n            break;\\n\\\n        }\\n\\\n\\n\\\n        // Calculate sample position along viewpoint ray.\\n\\\n        vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength);\\n\\\n\\n\\\n        // Calculate height of sample position above ellipsoid.\\n\\\n        float sampleHeight = length(samplePosition) - atmosphereInnerRadius;\\n\\\n\\n\\\n        // Calculate and accumulate density of particles at the sample position.\\n\\\n        vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength;\\n\\\n        opticalDepth += sampleDensity;\\n\\\n\\n\\\n        // Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere.\\n\\\n        czm_ray lightRay = czm_ray(samplePosition, lightDirection);\\n\\\n        czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius);\\n\\\n\\n\\\n        float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS);\\n\\\n        float lightPositionLength = 0.0;\\n\\\n\\n\\\n        vec2 lightOpticalDepth = vec2(0.0);\\n\\\n\\n\\\n        // Sample positions along the light ray, to accumulate incidence of light on the latest sample segment.\\n\\\n        for (int j = 0; j < LIGHT_STEPS_MAX; ++j) {\\n\\\n\\n\\\n            // The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot\\n\\\n            // loop with non-constant condition, so it has to break early instead\\n\\\n            if (j >= LIGHT_STEPS) {\\n\\\n                break;\\n\\\n            }\\n\\\n\\n\\\n            // Calculate sample position along light ray.\\n\\\n            vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5);\\n\\\n\\n\\\n            // Calculate height of the light sample position above ellipsoid.\\n\\\n            float lightHeight = length(lightPosition) - atmosphereInnerRadius;\\n\\\n\\n\\\n            // Calculate density of photons at the light sample position.\\n\\\n            lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength;\\n\\\n\\n\\\n            // Increment distance on light ray.\\n\\\n            lightPositionLength += lightStepLength;\\n\\\n        }\\n\\\n\\n\\\n        // Compute attenuation via the primary ray and the light ray.\\n\\\n        vec3 attenuation = exp(-((u_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (u_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x))));\\n\\\n\\n\\\n        // Accumulate the scattering.\\n\\\n        rayleighAccumulation += sampleDensity.x * attenuation;\\n\\\n        mieAccumulation += sampleDensity.y * attenuation;\\n\\\n\\n\\\n        // Increment distance on primary ray.\\n\\\n        rayPositionLength += (rayStepLength += rayStepLengthIncrease);\\n\\\n    }\\n\\\n\\n\\\n    // Compute the scattering amount.\\n\\\n    rayleighColor = u_atmosphereRayleighCoefficient * rayleighAccumulation;\\n\\\n    mieColor = u_atmosphereMieCoefficient * mieAccumulation;\\n\\\n\\n\\\n    // Compute the transmittance i.e. how much light is passing through the atmosphere.\\n\\\n    opacity = length(exp(-((u_atmosphereMieCoefficient * opticalDepth.y) + (u_atmosphereRayleighCoefficient * opticalDepth.x))));\\n\\\n}\\n\\\n\\n\\\nvec4 computeAtmosphereColor(\\n\\\n    vec3 positionWC,\\n\\\n    vec3 lightDirection,\\n\\\n    vec3 rayleighColor,\\n\\\n    vec3 mieColor,\\n\\\n    float opacity\\n\\\n) {\\n\\\n    // Setup the primary ray: from the camera position to the vertex position.\\n\\\n    vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;\\n\\\n    vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);\\n\\\n\\n\\\n    float cosAngle = dot(cameraToPositionWCDirection, lightDirection);\\n\\\n    float cosAngleSq = cosAngle * cosAngle;\\n\\\n\\n\\\n    float G = u_atmosphereMieAnisotropy;\\n\\\n    float GSq = G * G;\\n\\\n\\n\\\n    // The Rayleigh phase function.\\n\\\n    float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq);\\n\\\n    // The Mie phase function.\\n\\\n    float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq));\\n\\\n\\n\\\n    // The final color is generated by combining the effects of the Rayleigh and Mie scattering.\\n\\\n    vec3 rayleigh = rayleighPhase * rayleighColor;\\n\\\n    vec3 mie = miePhase * mieColor;\\n\\\n\\n\\\n    vec3 color = (rayleigh + mie) * u_atmosphereLightIntensity;\\n\\\n\\n\\\n    return vec4(color, opacity);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_atlas;\\n\\\nuniform float u_coarseDepthTestDistance;\\n\\\nuniform float u_threePointDepthTestDistance;\\n\\\n\\n\\\n#ifdef VECTOR_TILE\\n\\\nuniform vec4 u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\nin vec4 v_pickColor;\\n\\\nin vec4 v_color;\\n\\\nflat in vec2 v_splitDirectionAndEllipsoidDepthEC;\\n\\\n\\n\\\n#ifdef SDF\\n\\\nin vec4 v_outlineColor;\\n\\\nin float v_outlineWidth;\\n\\\n#endif\\n\\\n\\n\\\nin vec4 v_compressed;                               // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize\\n\\\nconst float SHIFT_LEFT1 = 2.0;\\n\\\nconst float SHIFT_RIGHT1 = 1.0 / 2.0;\\n\\\n\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\nin vec4 v_textureCoordinateBounds;                  // the min and max x and y values for the texture coordinates\\n\\\nin vec4 v_originTextureCoordinateAndTranslate;      // texture coordinate at the origin, billboard translate (used for label glyphs)\\n\\\nin mat2 v_rotationMatrix;\\n\\\n\\n\\\nconst float SHIFT_LEFT12 = 4096.0;\\n\\\n\\n\\\nconst float SHIFT_RIGHT12 = 1.0 / 4096.0;\\n\\\n#endif\\n\\\n\\n\\\nfloat getGlobeDepthAtCoords(vec2 st)\\n\\\n{\\n\\\n    float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st));\\n\\\n    if (logDepthOrDepth == 0.0)\\n\\\n    {\\n\\\n        return 0.0; // not on the globe\\n\\\n    }\\n\\\n\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\\n\\\n    return eyeCoordinate.z / eyeCoordinate.w;\\n\\\n}\\n\\\n\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\nfloat getGlobeDepth(vec2 adjustedST, vec2 depthLookupST, bool applyTranslate, vec2 dimensions, vec2 imageSize)\\n\\\n{\\n\\\n    vec2 lookupVector = imageSize * (depthLookupST - adjustedST);\\n\\\n    lookupVector = v_rotationMatrix * lookupVector;\\n\\\n    vec2 labelOffset = (dimensions - imageSize) * (depthLookupST - vec2(0.0, v_originTextureCoordinateAndTranslate.y)); // aligns label glyph with bounding rectangle.  Will be zero for billboards because dimensions and imageSize will be equal\\n\\\n\\n\\\n    vec2 translation = v_originTextureCoordinateAndTranslate.zw;\\n\\\n\\n\\\n    if (applyTranslate)\\n\\\n    {\\n\\\n        // this is only needed for labels where the horizontal origin is not LEFT\\n\\\n        // it moves the label back to where the \\\"origin\\\" should be since all label glyphs are set to HorizontalOrigin.LEFT\\n\\\n        translation += (dimensions * v_originTextureCoordinateAndTranslate.xy * vec2(1.0, 0.0));\\n\\\n    }\\n\\\n\\n\\\n    vec2 st = ((lookupVector - translation + labelOffset) + gl_FragCoord.xy) / czm_viewport.zw;\\n\\\n    return getGlobeDepthAtCoords(st);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SDF\\n\\\n\\n\\\n// Get the distance from the edge of a glyph at a given position sampling an SDF texture.\\n\\\nfloat getDistance(vec2 position)\\n\\\n{\\n\\\n    return texture(u_atlas, position).r;\\n\\\n}\\n\\\n\\n\\\n// Samples the sdf texture at the given position and produces a color based on the fill color and the outline.\\n\\\nvec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing)\\n\\\n{\\n\\\n    float distance = getDistance(position);\\n\\\n\\n\\\n    if (outlineWidth > 0.0)\\n\\\n    {\\n\\\n        // Don't get the outline edge exceed the SDF_EDGE\\n\\\n        float outlineEdge = clamp(SDF_EDGE - outlineWidth, 0.0, SDF_EDGE);\\n\\\n        float outlineFactor = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);\\n\\\n        vec4 sdfColor = mix(outlineColor, v_color, outlineFactor);\\n\\\n        float alpha = smoothstep(outlineEdge - smoothing, outlineEdge + smoothing, distance);\\n\\\n        return vec4(sdfColor.rgb, sdfColor.a * alpha);\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        float alpha = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);\\n\\\n        return vec4(v_color.rgb, v_color.a * alpha);\\n\\\n    }\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\nvoid doThreePointDepthTest(float eyeDepth, bool applyTranslate) {\\n\\\n\\n\\\n    if (eyeDepth < -u_threePointDepthTestDistance) return;\\n\\\n    float temp = v_compressed.z;\\n\\\n    temp = temp * SHIFT_RIGHT12;\\n\\\n\\n\\\n    vec2 dimensions;\\n\\\n    dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;\\n\\\n    dimensions.x = floor(temp);\\n\\\n\\n\\\n    temp = v_compressed.w;\\n\\\n    temp = temp * SHIFT_RIGHT12;\\n\\\n\\n\\\n    vec2 imageSize;\\n\\\n    imageSize.y = (temp - floor(temp)) * SHIFT_LEFT12;\\n\\\n    imageSize.x = floor(temp);\\n\\\n\\n\\\n    vec2 adjustedST = v_textureCoordinates - v_textureCoordinateBounds.xy;\\n\\\n    adjustedST = adjustedST / vec2(v_textureCoordinateBounds.z - v_textureCoordinateBounds.x, v_textureCoordinateBounds.w - v_textureCoordinateBounds.y);\\n\\\n\\n\\\n    float epsilonEyeDepth = v_compressed.x + czm_epsilon1;\\n\\\n    float globeDepth1 = getGlobeDepth(adjustedST, v_originTextureCoordinateAndTranslate.xy, applyTranslate, dimensions, imageSize);\\n\\\n\\n\\\n    // negative values go into the screen\\n\\\n    if (globeDepth1 == 0.0 || globeDepth1 < epsilonEyeDepth) return;\\n\\\n\\n\\\n    float globeDepth2 = getGlobeDepth(adjustedST, vec2(0.0, 1.0), applyTranslate, dimensions, imageSize); // top left corner\\n\\\n    if (globeDepth2 == 0.0 || globeDepth2 < epsilonEyeDepth) return;\\n\\\n\\n\\\n    float globeDepth3 = getGlobeDepth(adjustedST, vec2(1.0, 1.0), applyTranslate, dimensions, imageSize); // top right corner\\n\\\n    if (globeDepth3 == 0.0 || globeDepth3 < epsilonEyeDepth) return;\\n\\\n\\n\\\n    // All three key points are occluded, discard the fragment (and by extension the entire billboard)\\n\\\n    discard;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\nbool getDepthTestEnabled() {\\n\\\n    float temp = v_compressed.y;\\n\\\n    temp = temp * SHIFT_RIGHT1;\\n\\\n    float temp2 = (temp - floor(temp)) * SHIFT_LEFT1;\\n\\\n    return temp2 != 0.0;\\n\\\n}\\n\\\n\\n\\\nfloat getRelativeEyeDepth(float eyeDepth, float distanceToEllipsoid, float epsilon) {\\n\\\n    float depthDifferential = eyeDepth - distanceToEllipsoid;\\n\\\n    float depthRatio = abs(depthDifferential / distanceToEllipsoid);\\n\\\n    if (depthRatio < epsilon) {\\n\\\n        // The approximations are imprecise, so use an epsilon check for small value differences and assume a value of 0.0\\n\\\n        return 0.0;\\n\\\n    }\\n\\\n\\n\\\n    return depthDifferential;\\n\\\n}\\n\\\n\\n\\\n// Extra manual depth testing is done to allow more control over how a billboard is occluded\\n\\\n// by the globe when near and far from the camera.\\n\\\nvoid doDepthTest(float eyeDepth, float globeDepth) {\\n\\\n\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\n    // If the billboard is clamped to the ground and within a given distance, we do a 3-point depth test. This test is performed in the vertex shader, unless\\n\\\n    // vertex texture sampling is not supported, in which case we do it here.\\n\\\n    bool applyTranslate = floor(temp) != 0.0;\\n\\\n    doThreePointDepthTest(eyeDepth, applyTranslate);\\n\\\n\\n\\\n#elif defined(VS_THREE_POINT_DEPTH_CHECK)\\n\\\n    // Since discarding vertices is not possible, the vertex shader sets eyeDepth to 0 to indicate the depth test failed. Apply the discard here.\\n\\\n    if (eyeDepth > -u_threePointDepthTestDistance) {\\n\\\n        if (eyeDepth == 0.0) {\\n\\\n            discard;\\n\\\n        }\\n\\\n        return;\\n\\\n    }\\n\\\n#endif\\n\\\n    bool useGlobeDepth = eyeDepth > -u_coarseDepthTestDistance;\\n\\\n    if (useGlobeDepth && globeDepth == 0.0) {\\n\\\n        // Pixel is not on the globe, so there is no distance to compare against. Pass.\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    // If the camera is close, compare against the globe depth texture that includes depth from the 3D tile pass.\\n\\\n    if (useGlobeDepth && getRelativeEyeDepth(eyeDepth, globeDepth, czm_epsilon1) < 0.0) {\\n\\\n        discard;\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\n#ifdef LOG_DEPTH\\n\\\nvoid writeDepth(float eyeDepth, float globeDepth, float distanceToEllipsoid) {\\n\\\n    // If we've made it here, the manual depth test above determined that this fragment should be visible.\\n\\\n    // But the automatic depth test must still run in order to write the result to the depth buffer, and its results may\\n\\\n    // disagree with our manual depth test's results. To prefer our manual results when in front of the globe, apply an offset towards the camera.\\n\\\n\\n\\\n    float depthArg = v_depthFromNearPlusOne;\\n\\\n\\n\\\n    if (globeDepth != 0.0 && getRelativeEyeDepth(eyeDepth, distanceToEllipsoid, czm_epsilon3) > 0.0) { \\n\\\n        float globeDepthFromNearPlusOne = (-globeDepth - czm_currentFrustum.x) + 1.0;\\n\\\n        float nudge = max(globeDepthFromNearPlusOne * 5e-6, czm_epsilon7);\\n\\\n        float globeOnTop = max(1.0, globeDepthFromNearPlusOne - nudge);\\n\\\n        depthArg = min(depthArg, globeOnTop);\\n\\\n    }\\n\\\n\\n\\\n    czm_writeLogDepth(depthArg);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    if (v_splitDirectionAndEllipsoidDepthEC.x < 0.0 && gl_FragCoord.x > czm_splitPosition) {\\n\\\n        discard;\\n\\\n    }\\n\\\n    if (v_splitDirectionAndEllipsoidDepthEC.x > 0.0 && gl_FragCoord.x < czm_splitPosition) {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    if (getDepthTestEnabled()) {\\n\\\n        vec2 fragSt = gl_FragCoord.xy / czm_viewport.zw;\\n\\\n        float eyeDepth = v_compressed.x;\\n\\\n        float globeDepth = getGlobeDepthAtCoords(fragSt);\\n\\\n        float distanceToEllipsoid = -v_splitDirectionAndEllipsoidDepthEC.y;\\n\\\n        doDepthTest(eyeDepth, globeDepth);\\n\\\n\\n\\\n        #ifdef LOG_DEPTH\\n\\\n        writeDepth(eyeDepth, globeDepth, distanceToEllipsoid);\\n\\\n        #endif\\n\\\n    }\\n\\\n\\n\\\n    vec4 color = texture(u_atlas, v_textureCoordinates);\\n\\\n\\n\\\n#ifdef SDF\\n\\\n    float outlineWidth = v_outlineWidth;\\n\\\n    vec4 outlineColor = v_outlineColor;\\n\\\n\\n\\\n    // Get the current distance\\n\\\n    float distance = getDistance(v_textureCoordinates);\\n\\\n\\n\\\n#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\\n\\\n    float smoothing = fwidth(distance);\\n\\\n    // Get an offset that is approximately half the distance to the neighbor pixels\\n\\\n    // 0.354 is approximately half of 1/sqrt(2)\\n\\\n    vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates));\\n\\\n\\n\\\n    // Sample the center point\\n\\\n    vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);\\n\\\n\\n\\\n    // Sample the 4 neighbors\\n\\\n    vec4 color1 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n    vec4 color2 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n    vec4 color3 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n    vec4 color4 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);\\n\\\n\\n\\\n    // Equally weight the center sample and the 4 neighboring samples\\n\\\n    color = (center + color1 + color2 + color3 + color4)/5.0;\\n\\\n#else\\n\\\n    // If no derivatives available (IE 10?), just do a single sample\\n\\\n    float smoothing = 1.0/32.0;\\n\\\n    color = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);\\n\\\n#endif\\n\\\n\\n\\\n    color = czm_gammaCorrect(color);\\n\\\n#else\\n\\\n    color = czm_gammaCorrect(color);\\n\\\n    color *= czm_gammaCorrect(v_color);\\n\\\n#endif\\n\\\n\\n\\\n// Fully transparent parts of the billboard are not pickable.\\n\\\n#if !defined(OPAQUE) && !defined(TRANSLUCENT)\\n\\\n    if (color.a < 0.005)   // matches 0/255 and 1/255\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n#else\\n\\\n// The billboard is rendered twice. The opaque pass discards translucent fragments\\n\\\n// and the translucent pass discards opaque fragments.\\n\\\n#ifdef OPAQUE\\n\\\n    if (color.a < 0.995)   // matches < 254/255\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n#else\\n\\\n    if (color.a >= 0.995)  // matches 254/255 and 255/255\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\n#ifdef VECTOR_TILE\\n\\\n    color *= u_highlightColor;\\n\\\n#endif\\n\\\n    out_FragColor = color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform float u_threePointDepthTestDistance;\\n\\\n#ifdef INSTANCED\\n\\\nin vec2 direction;\\n\\\n#endif\\n\\\nin vec4 positionHighAndScale;\\n\\\nin vec4 positionLowAndRotation;\\n\\\nin vec4 compressedAttribute0;                       // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates (texture offset)\\n\\\nin vec4 compressedAttribute1;                       // aligned axis, translucency by distance, image width\\n\\\nin vec4 compressedAttribute2;                       // label horizontal origin, image height, color, pick color, size in meters, valid aligned axis, 13 bits free\\n\\\nin vec4 eyeOffset;                                  // eye offset in meters, 4 bytes free (texture range)\\n\\\nin vec4 scaleByDistance;                            // near, nearScale, far, farScale\\n\\\nin vec4 pixelOffsetScaleByDistance;                 // near, nearScale, far, farScale\\n\\\nin vec4 compressedAttribute3;                       // distance display condition near, far, disableDepthTestDistanceSq, dimensions\\n\\\nin vec2 sdf;                                        // sdf outline color (rgb) and width (w)\\n\\\nin float splitDirection;                            // splitDirection\\n\\\n#if defined(VS_THREE_POINT_DEPTH_CHECK) || defined(FS_THREE_POINT_DEPTH_CHECK)\\n\\\nin vec4 textureCoordinateBoundsOrLabelTranslate;    // the min and max x and y values for the texture coordinates\\n\\\n#endif\\n\\\n#ifdef VECTOR_TILE\\n\\\nin float a_batchId;\\n\\\n#endif\\n\\\n\\n\\\nout vec2 v_textureCoordinates;\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\nout vec4 v_textureCoordinateBounds;\\n\\\nout vec4 v_originTextureCoordinateAndTranslate;\\n\\\nout mat2 v_rotationMatrix;\\n\\\n#endif\\n\\\nout vec4 v_compressed;             // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize\\n\\\n\\n\\\nout vec4 v_pickColor;\\n\\\nout vec4 v_color;\\n\\\nflat out vec2 v_splitDirectionAndEllipsoidDepthEC;  // x: splitDirection, y: ellipsoid depth in eye coordinates\\n\\\n#ifdef SDF\\n\\\nout vec4 v_outlineColor;\\n\\\nout float v_outlineWidth;\\n\\\n#endif\\n\\\n\\n\\\nconst float UPPER_BOUND = 32768.0;\\n\\\n\\n\\\nconst float SHIFT_LEFT16 = 65536.0;\\n\\\nconst float SHIFT_LEFT12 = 4096.0;\\n\\\nconst float SHIFT_LEFT8 = 256.0;\\n\\\nconst float SHIFT_LEFT7 = 128.0;\\n\\\nconst float SHIFT_LEFT5 = 32.0;\\n\\\nconst float SHIFT_LEFT3 = 8.0;\\n\\\nconst float SHIFT_LEFT2 = 4.0;\\n\\\nconst float SHIFT_LEFT1 = 2.0;\\n\\\n\\n\\\nconst float SHIFT_RIGHT12 = 1.0 / 4096.0;\\n\\\nconst float SHIFT_RIGHT8 = 1.0 / 256.0;\\n\\\nconst float SHIFT_RIGHT7 = 1.0 / 128.0;\\n\\\nconst float SHIFT_RIGHT5 = 1.0 / 32.0;\\n\\\nconst float SHIFT_RIGHT3 = 1.0 / 8.0;\\n\\\nconst float SHIFT_RIGHT2 = 1.0 / 4.0;\\n\\\nconst float SHIFT_RIGHT1 = 1.0 / 2.0;\\n\\\n\\n\\\nvec4 addScreenSpaceOffset(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters, out mat2 rotationMatrix, out float mpp)\\n\\\n{\\n\\\n    // Note the halfSize cannot be computed in JavaScript because it is sent via\\n\\\n    // compressed vertex attributes that coerce it to an integer.\\n\\\n    vec2 halfSize = imageSize * scale * 0.5;\\n\\\n    halfSize *= ((direction * 2.0) - 1.0);\\n\\\n\\n\\\n    vec2 originTranslate = origin * abs(halfSize);\\n\\\n\\n\\\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\\n\\\n    if (validAlignedAxis || rotation != 0.0)\\n\\\n    {\\n\\\n        float angle = rotation;\\n\\\n        if (validAlignedAxis)\\n\\\n        {\\n\\\n            vec4 projectedAlignedAxis = czm_modelView3D * vec4(alignedAxis, 0.0);\\n\\\n            angle += sign(-projectedAlignedAxis.x) * acos(sign(projectedAlignedAxis.y) * (projectedAlignedAxis.y * projectedAlignedAxis.y) /\\n\\\n                    (projectedAlignedAxis.x * projectedAlignedAxis.x + projectedAlignedAxis.y * projectedAlignedAxis.y));\\n\\\n        }\\n\\\n\\n\\\n        float cosTheta = cos(angle);\\n\\\n        float sinTheta = sin(angle);\\n\\\n        rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta);\\n\\\n        halfSize = rotationMatrix * halfSize;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    mpp = czm_metersPerPixel(positionEC);\\n\\\n    positionEC.xy += (originTranslate + halfSize) * czm_branchFreeTernary(sizeInMeters, 1.0, mpp);\\n\\\n    positionEC.xy += (translate + pixelOffset) * mpp;\\n\\\n\\n\\\n    return positionEC;\\n\\\n}\\n\\\n\\n\\\n#ifdef VS_THREE_POINT_DEPTH_CHECK\\n\\\nfloat getGlobeDepth(vec4 positionEC)\\n\\\n{\\n\\\n    vec4 posWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n\\n\\\n    float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, posWC.xy / czm_viewport.zw));\\n\\\n\\n\\\n    if (globeDepth == 0.0)\\n\\\n    {\\n\\\n        return 0.0; // not on the globe\\n\\\n    }\\n\\\n\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth);\\n\\\n    return eyeCoordinate.z / eyeCoordinate.w;\\n\\\n}\\n\\\n#endif\\n\\\nvoid main()\\n\\\n{\\n\\\n    // Modifying this shader may also require modifications to Billboard._computeScreenSpacePosition\\n\\\n\\n\\\n    // unpack attributes\\n\\\n    vec3 positionHigh = positionHighAndScale.xyz;\\n\\\n    vec3 positionLow = positionLowAndRotation.xyz;\\n\\\n    float scale = positionHighAndScale.w;\\n\\\n\\n\\\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\\n\\\n    float rotation = positionLowAndRotation.w;\\n\\\n#else\\n\\\n    float rotation = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n    float compressed = compressedAttribute0.x;\\n\\\n\\n\\\n    vec2 pixelOffset;\\n\\\n    pixelOffset.x = floor(compressed * SHIFT_RIGHT7);\\n\\\n    compressed -= pixelOffset.x * SHIFT_LEFT7;\\n\\\n    pixelOffset.x -= UPPER_BOUND;\\n\\\n\\n\\\n    vec2 origin;\\n\\\n    origin.x = floor(compressed * SHIFT_RIGHT5);\\n\\\n    compressed -= origin.x * SHIFT_LEFT5;\\n\\\n\\n\\\n    origin.y = floor(compressed * SHIFT_RIGHT3);\\n\\\n    compressed -= origin.y * SHIFT_LEFT3;\\n\\\n\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\n    vec2 depthOrigin = origin.xy;\\n\\\n#endif\\n\\\n    origin -= vec2(1.0);\\n\\\n\\n\\\n    float show = floor(compressed * SHIFT_RIGHT2);\\n\\\n    compressed -= show * SHIFT_LEFT2;\\n\\\n\\n\\\n#ifdef INSTANCED\\n\\\n    vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w);\\n\\\n    vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w);\\n\\\n    vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange;\\n\\\n#else\\n\\\n    vec2 direction;\\n\\\n    direction.x = floor(compressed * SHIFT_RIGHT1);\\n\\\n    direction.y = compressed - direction.x * SHIFT_LEFT1;\\n\\\n\\n\\\n    vec2 textureCoordinates = czm_decompressTextureCoordinates(compressedAttribute0.w);\\n\\\n#endif\\n\\\n\\n\\\n    float temp = compressedAttribute0.y  * SHIFT_RIGHT8;\\n\\\n    pixelOffset.y = -(floor(temp) - UPPER_BOUND);\\n\\\n\\n\\\n    vec2 translate;\\n\\\n    translate.y = (temp - floor(temp)) * SHIFT_LEFT16;\\n\\\n\\n\\\n    temp = compressedAttribute0.z * SHIFT_RIGHT8;\\n\\\n    translate.x = floor(temp) - UPPER_BOUND;\\n\\\n    translate.x *= SHIFT_RIGHT2; // undo translateX scaling (helps preserve subpixel precision, see BillboardCollection.js attribute writer for more info)\\n\\\n\\n\\\n    translate.y += (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n    translate.y -= UPPER_BOUND;\\n\\\n    translate.y *= SHIFT_RIGHT2;\\n\\\n\\n\\\n    temp = compressedAttribute1.x * SHIFT_RIGHT8;\\n\\\n    float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2);\\n\\\n\\n\\\n    vec2 imageSize = vec2(floor(temp), temp2);\\n\\\n\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\n    float labelHorizontalOrigin = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2));\\n\\\n    float applyTranslate = 0.0;\\n\\\n    if (labelHorizontalOrigin != 0.0) // is a label, so set apply translate to true\\n\\\n    {\\n\\\n        applyTranslate = 1.0;\\n\\\n        labelHorizontalOrigin -= 2.0;\\n\\\n        depthOrigin.x = labelHorizontalOrigin + 1.0;\\n\\\n    }\\n\\\n\\n\\\n    depthOrigin = vec2(1.0) - (depthOrigin * 0.5);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n    vec4 translucencyByDistance;\\n\\\n    translucencyByDistance.x = compressedAttribute1.z;\\n\\\n    translucencyByDistance.z = compressedAttribute1.w;\\n\\\n\\n\\\n    translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n\\n\\\n    temp = compressedAttribute1.y * SHIFT_RIGHT8;\\n\\\n    translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(VS_THREE_POINT_DEPTH_CHECK) || defined(FS_THREE_POINT_DEPTH_CHECK)\\n\\\n    temp = compressedAttribute3.w;\\n\\\n    temp = temp * SHIFT_RIGHT12;\\n\\\n\\n\\\n    vec2 dimensions;\\n\\\n    dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;\\n\\\n    dimensions.x = floor(temp);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ALIGNED_AXIS\\n\\\n    vec3 alignedAxis = czm_octDecode(floor(compressedAttribute1.y * SHIFT_RIGHT8));\\n\\\n    temp = compressedAttribute2.z * SHIFT_RIGHT5;\\n\\\n    bool validAlignedAxis = (temp - floor(temp)) * SHIFT_LEFT1 > 0.0;\\n\\\n#else\\n\\\n    vec3 alignedAxis = vec3(0.0);\\n\\\n    bool validAlignedAxis = false;\\n\\\n#endif\\n\\\n\\n\\\n    vec4 color = czm_decodeRGB8(compressedAttribute2.x);\\n\\\n    vec4 pickColor = czm_decodeRGB8(compressedAttribute2.y);\\n\\\n\\n\\\n    temp = compressedAttribute2.z * SHIFT_RIGHT8;\\n\\\n    bool sizeInMeters = floor((temp - floor(temp)) * SHIFT_LEFT7) > 0.0;\\n\\\n    temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n\\n\\\n    pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n    pickColor.a /= 255.0;\\n\\\n\\n\\\n    color.a = floor(temp);\\n\\\n    color.a /= 255.0;\\n\\\n\\n\\\n    ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n    vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\\n\\\n    vec4 positionEC = czm_modelViewRelativeToEye * p;\\n\\\n\\n\\\n    positionEC = czm_eyeOffset(positionEC, eyeOffset.xyz);\\n\\\n    positionEC.xyz *= show;\\n\\\n\\n\\\n    ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(EYE_DISTANCE_PIXEL_OFFSET) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)\\n\\\n    float lengthSq;\\n\\\n    if (czm_sceneMode == czm_sceneMode2D)\\n\\\n    {\\n\\\n        // 2D camera distance is a special case\\n\\\n        // treat all billboards as flattened to the z=0.0 plane\\n\\\n        lengthSq = czm_eyeHeight2D.y;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        lengthSq = dot(positionEC.xyz, positionEC.xyz);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_SCALING\\n\\\n    float distanceScale = czm_nearFarScalar(scaleByDistance, lengthSq);\\n\\\n    scale *= distanceScale;\\n\\\n    translate *= distanceScale;\\n\\\n    // push vertex behind near plane for clipping\\n\\\n    if (scale == 0.0)\\n\\\n    {\\n\\\n        positionEC.xyz = vec3(0.0);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    float translucency = 1.0;\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n    translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);\\n\\\n    // push vertex behind near plane for clipping\\n\\\n    if (translucency == 0.0)\\n\\\n    {\\n\\\n        positionEC.xyz = vec3(0.0);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_PIXEL_OFFSET\\n\\\n    float pixelOffsetScale = czm_nearFarScalar(pixelOffsetScaleByDistance, lengthSq);\\n\\\n    pixelOffset *= pixelOffsetScale;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef DISTANCE_DISPLAY_CONDITION\\n\\\n    float nearSq = compressedAttribute3.x;\\n\\\n    float farSq = compressedAttribute3.y;\\n\\\n    if (lengthSq < nearSq || lengthSq > farSq)\\n\\\n    {\\n\\\n        positionEC.xyz = vec3(0.0);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    mat2 rotationMatrix;\\n\\\n    float mpp;\\n\\\n\\n\\\n    float enableDepthCheck = 1.0;\\n\\\n#ifdef DISABLE_DEPTH_DISTANCE\\n\\\n    float disableDepthTestDistanceSq = compressedAttribute3.z;\\n\\\n    if (disableDepthTestDistanceSq == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)\\n\\\n    {\\n\\\n        disableDepthTestDistanceSq = czm_minimumDisableDepthTestDistance;\\n\\\n    }\\n\\\n\\n\\\n    if (lengthSq < disableDepthTestDistanceSq || disableDepthTestDistanceSq < 0.0)\\n\\\n    {\\n\\\n        enableDepthCheck = 0.0;\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    v_splitDirectionAndEllipsoidDepthEC.y = czm_infinity;\\n\\\n    vec3 ellipsoidCenter = czm_view[3].xyz;\\n\\\n    vec3 rayDirection = normalize(positionEC.xyz);\\n\\\n    czm_ray ray = czm_ray(vec3(0.0), rayDirection);\\n\\\n    vec3 ellipsoid_inverseRadii = czm_ellipsoidInverseRadii;\\n\\\n    czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);\\n\\\n\\n\\\n    if (!czm_isEmpty(intersection))\\n\\\n    {\\n\\\n        v_splitDirectionAndEllipsoidDepthEC.y = intersection.start;\\n\\\n    }\\n\\\n\\n\\\n    v_compressed.y = enableDepthCheck;\\n\\\n\\n\\\n#ifdef VS_THREE_POINT_DEPTH_CHECK\\n\\\nif (lengthSq < (u_threePointDepthTestDistance * u_threePointDepthTestDistance) && (enableDepthCheck == 1.0)) {\\n\\\n    float depthsilon = 10.0;\\n\\\n    vec2 depthOrigin;\\n\\\n    // Horizontal origin for labels comes from a special attribute. If that value is 0, this is a billboard - use the regular origin.\\n\\\n    // Otherwise, transform the label origin to -1, 0, 1 (right, center, left).\\n\\\n    depthOrigin.x = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2));\\n\\\n    depthOrigin.x = czm_branchFreeTernary(depthOrigin.x == 0.0, origin.x, depthOrigin.x - 2.0);\\n\\\n    depthOrigin.y = origin.y;\\n\\\n\\n\\\n    vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n    float globeDepth1 = getGlobeDepth(pEC1);\\n\\\n\\n\\\n    if (globeDepth1 != 0.0 && pEC1.z + depthsilon < globeDepth1)\\n\\\n    {\\n\\\n        vec4 pEC2 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0, 1.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n        float globeDepth2 = getGlobeDepth(pEC2);\\n\\\n\\n\\\n        if (globeDepth2 != 0.0 && pEC2.z + depthsilon < globeDepth2)\\n\\\n        {\\n\\\n            vec4 pEC3 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(1.0), depthOrigin, vec2(0.0), pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n            float globeDepth3 = getGlobeDepth(pEC3);\\n\\\n            if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3)\\n\\\n            {\\n\\\n                // \\\"Discard\\\" this vertex, as three key points fail depth test.\\n\\\n                positionEC.xyz = vec3(0.0);\\n\\\n            }\\n\\\n        }\\n\\\n    }\\n\\\n}\\n\\\n#endif\\n\\\n    // Write out the eyespace depth before applying the screen space offset, but after potentially \\\"discarding\\\" the vertex\\n\\\n    // by setting its eyespace position to zero, via the three-point depth test above.\\n\\\n    v_compressed.x = positionEC.z;\\n\\\n\\n\\\n    positionEC = addScreenSpaceOffset(positionEC, imageSize, scale, direction, origin, translate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);\\n\\\n    gl_Position = czm_projection * positionEC;\\n\\\n    v_textureCoordinates = textureCoordinates;\\n\\\n\\n\\\n#ifdef LOG_DEPTH\\n\\\n    czm_vertexLogDepth();\\n\\\n#endif\\n\\\n\\n\\\n#ifdef DISABLE_DEPTH_DISTANCE\\n\\\n\\n\\\n    if (disableDepthTestDistanceSq != 0.0)\\n\\\n    {\\n\\\n        // Don't try to \\\"multiply both sides\\\" by w.  Greater/less-than comparisons won't work for negative values of w.\\n\\\n        float zclip = gl_Position.z / gl_Position.w;\\n\\\n        bool clipped = (zclip < -1.0 || zclip > 1.0);\\n\\\n        // disableDepthTestDistanceSq can be less than zero if it's explicitly set to -1 in JS (as a sentinel value equivalent to infinity)\\n\\\n        if (!clipped && (disableDepthTestDistanceSq < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistanceSq)))\\n\\\n        {\\n\\\n            // Position z on the near plane.\\n\\\n            gl_Position.z = -gl_Position.w;\\n\\\n#ifdef LOG_DEPTH\\n\\\n            v_depthFromNearPlusOne = 1.0;\\n\\\n#endif\\n\\\n        }\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef FS_THREE_POINT_DEPTH_CHECK\\n\\\n    if (sizeInMeters) {\\n\\\n        translate /= mpp;\\n\\\n        dimensions /= mpp;\\n\\\n        imageSize /= mpp;\\n\\\n    }\\n\\\n\\n\\\n#if defined(ROTATION) || defined(ALIGNED_AXIS)\\n\\\n    v_rotationMatrix = rotationMatrix;\\n\\\n#else\\n\\\n    v_rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);\\n\\\n#endif\\n\\\n    float dw = floor(clamp(dimensions.x, 0.0, SHIFT_LEFT12));\\n\\\n    float dh = floor(clamp(dimensions.y, 0.0, SHIFT_LEFT12));\\n\\\n\\n\\\n    float iw = floor(clamp(imageSize.x, 0.0, SHIFT_LEFT12));\\n\\\n    float ih = floor(clamp(imageSize.y, 0.0, SHIFT_LEFT12));\\n\\\n\\n\\\n    v_compressed.y += applyTranslate * SHIFT_LEFT1;\\n\\\n    v_compressed.z = dw * SHIFT_LEFT12 + dh;\\n\\\n    v_compressed.w = iw * SHIFT_LEFT12 + ih;\\n\\\n    v_originTextureCoordinateAndTranslate.xy = depthOrigin;\\n\\\n    v_originTextureCoordinateAndTranslate.zw = translate;\\n\\\n    v_textureCoordinateBounds = textureCoordinateBoundsOrLabelTranslate;\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SDF\\n\\\n    vec4 outlineColor = czm_decodeRGB8(sdf.x);\\n\\\n    float outlineWidth;\\n\\\n\\n\\\n    temp = sdf.y;\\n\\\n    temp = temp * SHIFT_RIGHT8;\\n\\\n    float temp3 = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n    temp = floor(temp) * SHIFT_RIGHT8;\\n\\\n    outlineWidth = (temp - floor(temp)) * SHIFT_LEFT8;\\n\\\n    outlineColor.a = floor(temp);\\n\\\n    outlineColor.a /= 255.0;\\n\\\n\\n\\\n    v_outlineWidth = outlineWidth / 255.0;\\n\\\n    v_outlineColor = outlineColor;\\n\\\n    v_outlineColor.a *= translucency;\\n\\\n#endif\\n\\\n\\n\\\n    v_pickColor = pickColor;\\n\\\n\\n\\\n    v_color = color;\\n\\\n    v_color.a *= translucency;\\n\\\n    v_splitDirectionAndEllipsoidDepthEC.x = splitDirection;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec2 v_textureCoordinates;\\n\\\nconst float M_PI = 3.141592653589793;\\n\\\n\\n\\\nfloat vdcRadicalInverse(int i)\\n\\\n{\\n\\\n    float r;\\n\\\n    float base = 2.0;\\n\\\n    float value = 0.0;\\n\\\n    float invBase = 1.0 / base;\\n\\\n    float invBi = invBase;\\n\\\n    for (int x = 0; x < 100; x++)\\n\\\n    {\\n\\\n        if (i <= 0)\\n\\\n        {\\n\\\n            break;\\n\\\n        }\\n\\\n        r = mod(float(i), base);\\n\\\n        value += r * invBi;\\n\\\n        invBi *= invBase;\\n\\\n        i = int(float(i) * invBase);\\n\\\n    }\\n\\\n    return value;\\n\\\n}\\n\\\n\\n\\\nvec2 hammersley2D(int i, int N)\\n\\\n{\\n\\\n    return vec2(float(i) / float(N), vdcRadicalInverse(i));\\n\\\n}\\n\\\n\\n\\\nvec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N)\\n\\\n{\\n\\\n    float alphaRoughnessSquared = alphaRoughness * alphaRoughness;\\n\\\n    float phi = 2.0 * M_PI * xi.x;\\n\\\n    float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y));\\n\\\n    float sinTheta = sqrt(1.0 - cosTheta * cosTheta);\\n\\\n    vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);\\n\\\n    vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\\n\\\n    vec3 tangentX = normalize(cross(upVector, N));\\n\\\n    vec3 tangentY = cross(N, tangentX);\\n\\\n    return tangentX * H.x + tangentY * H.y + N * H.z;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Estimate the geometric self-shadowing of the microfacets in a surface,\\n\\\n * using the Smith Joint GGX visibility function.\\n\\\n * Note: Vis = G / (4 * NdotL * NdotV)\\n\\\n * see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3\\n\\\n * see Real-Time Rendering. Page 331 to 336.\\n\\\n * see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg)\\n\\\n *\\n\\\n * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.\\n\\\n * @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source.\\n\\\n * @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera.\\n\\\n */\\n\\\nfloat smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV)\\n\\\n{\\n\\\n    float alphaRoughnessSq = alphaRoughness * alphaRoughness;\\n\\\n\\n\\\n    float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);\\n\\\n    float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);\\n\\\n\\n\\\n    float GGX = GGXV + GGXL; // 2.0 if NdotL = NdotV = 1.0\\n\\\n    if (GGX > 0.0)\\n\\\n    {\\n\\\n        return 0.5 / GGX; // 1/4 if NdotL = NdotV = 1.0\\n\\\n    }\\n\\\n    return 0.0;\\n\\\n}\\n\\\n\\n\\\nvec2 integrateBrdf(float roughness, float NdotV)\\n\\\n{\\n\\\n    vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);\\n\\\n    float A = 0.0;\\n\\\n    float B = 0.0;\\n\\\n    const int NumSamples = 1024;\\n\\\n    float alphaRoughness = roughness * roughness;\\n\\\n    for (int i = 0; i < NumSamples; i++)\\n\\\n    {\\n\\\n        vec2 xi = hammersley2D(i, NumSamples);\\n\\\n        vec3 H = importanceSampleGGX(xi, alphaRoughness, vec3(0.0, 0.0, 1.0));\\n\\\n        vec3 L = 2.0 * dot(V, H) * H - V;\\n\\\n        float NdotL = clamp(L.z, 0.0, 1.0);\\n\\\n        float NdotH = clamp(H.z, 0.0, 1.0);\\n\\\n        float VdotH = clamp(dot(V, H), 0.0, 1.0);\\n\\\n        if (NdotL > 0.0)\\n\\\n        {\\n\\\n            float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);\\n\\\n            float G_Vis = 4.0 * G * VdotH * NdotL / NdotH;\\n\\\n            float Fc = pow(1.0 - VdotH, 5.0);\\n\\\n            A += (1.0 - Fc) * G_Vis;\\n\\\n            B += Fc * G_Vis;\\n\\\n        }\\n\\\n    }\\n\\\n    return vec2(A, B) / float(NumSamples);\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    out_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for converting radians to degrees.\\n\\\n *\\n\\\n * @alias czm_degreesPerRadian\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.DEGREES_PER_RADIAN\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_degreesPerRadian = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float deg = czm_degreesPerRadian * rad;\\n\\\n */\\n\\\nconst float czm_degreesPerRadian = 57.29577951308232;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL vec2 constant for defining the depth range.\\n\\\n * This is a workaround to a bug where IE11 does not implement gl_DepthRange.\\n\\\n *\\n\\\n * @alias czm_depthRange\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * float depthRangeNear = czm_depthRange.near;\\n\\\n * float depthRangeFar = czm_depthRange.far;\\n\\\n *\\n\\\n */\\n\\\nconst czm_depthRangeStruct czm_depthRange = czm_depthRangeStruct(0.0, 1.0);\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.1\\n\\\n *\\n\\\n * @name czm_epsilon1\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon1 = 0.1;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.01\\n\\\n *\\n\\\n * @name czm_epsilon2\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon2 = 0.01;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.001\\n\\\n *\\n\\\n * @name czm_epsilon3\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon3 = 0.001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.0001\\n\\\n *\\n\\\n * @name czm_epsilon4\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon4 = 0.0001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.00001\\n\\\n *\\n\\\n * @name czm_epsilon5\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon5 = 0.00001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.000001\\n\\\n *\\n\\\n * @name czm_epsilon6\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon6 = 0.000001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * 0.0000001\\n\\\n *\\n\\\n * @name czm_epsilon7\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_epsilon7 = 0.0000001;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_infinity\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_infinity = 5906376272000.0;  // Distance from the Sun to Pluto in meters.  TODO: What is best given lowp, mediump, and highp?\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>1/pi</code>.\\n\\\n *\\n\\\n * @alias czm_oneOverPi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.ONE_OVER_PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_oneOverPi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 1.0 / czm_oneOverPi;\\n\\\n */\\n\\\nconst float czm_oneOverPi = 0.3183098861837907;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>1/2pi</code>.\\n\\\n *\\n\\\n * @alias czm_oneOverTwoPi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.ONE_OVER_TWO_PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_oneOverTwoPi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 2.0 * czm_oneOverTwoPi;\\n\\\n */\\n\\\nconst float czm_oneOverTwoPi = 0.15915494309189535;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE}\\n\\\n *\\n\\\n * @name czm_passCesium3DTile\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCesium3DTile = 5.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION}\\n\\\n *\\n\\\n * @name czm_passCesium3DTileClassification\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCesium3DTileClassification = 6.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW}\\n\\\n *\\n\\\n * @name czm_passCesium3DTileClassificationIgnoreShow\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCesium3DTileClassificationIgnoreShow = 7.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_EDGES}\\n\\\n *\\n\\\n * @name czm_passCesium3DTileEdges\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCesium3DTileEdges = 4.0;\\n\\\n\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#CLASSIFICATION}\\n\\\n *\\n\\\n * @name czm_passClassification\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passClassification = 7.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#COMPUTE}\\n\\\n *\\n\\\n * @name czm_passCompute\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passCompute = 1.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#ENVIRONMENT}\\n\\\n *\\n\\\n * @name czm_passEnvironment\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passEnvironment = 0.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#GAUSSIAN_SPLATS}\\n\\\n *\\n\\\n * @name czm_passGaussianSplats\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passGaussianSplats = 11.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#GLOBE}\\n\\\n *\\n\\\n * @name czm_passGlobe\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passGlobe = 2.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#OPAQUE}\\n\\\n *\\n\\\n * @name czm_passOpaque\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passOpaque = 8.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#OVERLAY}\\n\\\n *\\n\\\n * @name czm_passOverlay\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passOverlay = 12.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION}\\n\\\n *\\n\\\n * @name czm_passTerrainClassification\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passTerrainClassification = 3.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#TRANSLUCENT}\\n\\\n *\\n\\\n * @name czm_passTranslucent\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passTranslucent = 9.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The automatic GLSL constant for {@link Pass#VOXELS}\\n\\\n *\\n\\\n * @name czm_passVoxels\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see czm_pass\\n\\\n */\\n\\\nconst float czm_passVoxels = 10.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>Math.PI</code>.\\n\\\n *\\n\\\n * @alias czm_pi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_pi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float twoPi = 2.0 * czm_pi;\\n\\\n */\\n\\\nconst float czm_pi = 3.141592653589793;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/4</code>.\\n\\\n *\\n\\\n * @alias czm_piOverFour\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_FOUR\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverFour = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 4.0 * czm_piOverFour;\\n\\\n */\\n\\\nconst float czm_piOverFour = 0.7853981633974483;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/6</code>.\\n\\\n *\\n\\\n * @alias czm_piOverSix\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_SIX\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverSix = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 6.0 * czm_piOverSix;\\n\\\n */\\n\\\nconst float czm_piOverSix = 0.5235987755982988;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/3</code>.\\n\\\n *\\n\\\n * @alias czm_piOverThree\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_THREE\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverThree = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 3.0 * czm_piOverThree;\\n\\\n */\\n\\\nconst float czm_piOverThree = 1.0471975511965976;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>pi/2</code>.\\n\\\n *\\n\\\n * @alias czm_piOverTwo\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.PI_OVER_TWO\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_piOverTwo = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = 2.0 * czm_piOverTwo;\\n\\\n */\\n\\\nconst float czm_piOverTwo = 1.5707963267948966;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for converting degrees to radians.\\n\\\n *\\n\\\n * @alias czm_radiansPerDegree\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.RADIANS_PER_DEGREE\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_radiansPerDegree = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float rad = czm_radiansPerDegree * deg;\\n\\\n */\\n\\\nconst float czm_radiansPerDegree = 0.017453292519943295;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the 2D {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneMode2D\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneModeColumbusView\\n\\\n * @see czm_sceneMode3D\\n\\\n * @see czm_sceneModeMorphing\\n\\\n */\\n\\\nconst float czm_sceneMode2D = 2.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the 3D {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneMode3D\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneMode2D\\n\\\n * @see czm_sceneModeColumbusView\\n\\\n * @see czm_sceneModeMorphing\\n\\\n */\\n\\\nconst float czm_sceneMode3D = 3.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the Columbus View {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneModeColumbusView\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneMode2D\\n\\\n * @see czm_sceneMode3D\\n\\\n * @see czm_sceneModeMorphing\\n\\\n */\\n\\\nconst float czm_sceneModeColumbusView = 1.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The constant identifier for the Morphing {@link SceneMode}\\n\\\n *\\n\\\n * @name czm_sceneModeMorphing\\n\\\n * @glslConstant\\n\\\n * @see czm_sceneMode\\n\\\n * @see czm_sceneMode2D\\n\\\n * @see czm_sceneModeColumbusView\\n\\\n * @see czm_sceneMode3D\\n\\\n */\\n\\\nconst float czm_sceneModeMorphing = 0.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for one solar radius.\\n\\\n *\\n\\\n * @alias czm_solarRadius\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.SOLAR_RADIUS\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_solarRadius = ...;\\n\\\n */\\n\\\nconst float czm_solarRadius = 695500000.0;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>3pi/2</code>.\\n\\\n *\\n\\\n * @alias czm_threePiOver2\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.THREE_PI_OVER_TWO\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_threePiOver2 = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = (2.0 / 3.0) * czm_threePiOver2;\\n\\\n */\\n\\\nconst float czm_threePiOver2 = 4.71238898038469;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A built-in GLSL floating-point constant for <code>2pi</code>.\\n\\\n *\\n\\\n * @alias czm_twoPi\\n\\\n * @glslConstant\\n\\\n *\\n\\\n * @see CesiumMath.TWO_PI\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declaration\\n\\\n * const float czm_twoPi = ...;\\n\\\n *\\n\\\n * // Example\\n\\\n * float pi = czm_twoPi / 2.0;\\n\\\n */\\n\\\nconst float czm_twoPi = 6.283185307179586;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * The maximum latitude, in radians, both North and South, supported by a Web Mercator\\n\\\n * (EPSG:3857) projection.  Technically, the Mercator projection is defined\\n\\\n * for any latitude up to (but not including) 90 degrees, but it makes sense\\n\\\n * to cut it off sooner because it grows exponentially with increasing latitude.\\n\\\n * The logic behind this particular cutoff value, which is the one used by\\n\\\n * Google Maps, Bing Maps, and Esri, is that it makes the projection\\n\\\n * square.  That is, the rectangle is equal in the X and Y directions.\\n\\\n *\\n\\\n * The constant value is computed as follows:\\n\\\n *   czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi)))\\n\\\n *\\n\\\n * @name czm_webMercatorMaxLatitude\\n\\\n * @glslConstant\\n\\\n */\\n\\\nconst float czm_webMercatorMaxLatitude = 1.4844222297453324;\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nimport czm_degreesPerRadian from './Constants/degreesPerRadian.js'\nimport czm_depthRange from './Constants/depthRange.js'\nimport czm_epsilon1 from './Constants/epsilon1.js'\nimport czm_epsilon2 from './Constants/epsilon2.js'\nimport czm_epsilon3 from './Constants/epsilon3.js'\nimport czm_epsilon4 from './Constants/epsilon4.js'\nimport czm_epsilon5 from './Constants/epsilon5.js'\nimport czm_epsilon6 from './Constants/epsilon6.js'\nimport czm_epsilon7 from './Constants/epsilon7.js'\nimport czm_infinity from './Constants/infinity.js'\nimport czm_oneOverPi from './Constants/oneOverPi.js'\nimport czm_oneOverTwoPi from './Constants/oneOverTwoPi.js'\nimport czm_passCesium3DTile from './Constants/passCesium3DTile.js'\nimport czm_passCesium3DTileClassification from './Constants/passCesium3DTileClassification.js'\nimport czm_passCesium3DTileClassificationIgnoreShow from './Constants/passCesium3DTileClassificationIgnoreShow.js'\nimport czm_passCesium3DTileEdges from './Constants/passCesium3DTileEdges.js'\nimport czm_passClassification from './Constants/passClassification.js'\nimport czm_passCompute from './Constants/passCompute.js'\nimport czm_passEnvironment from './Constants/passEnvironment.js'\nimport czm_passGaussianSplats from './Constants/passGaussianSplats.js'\nimport czm_passGlobe from './Constants/passGlobe.js'\nimport czm_passOpaque from './Constants/passOpaque.js'\nimport czm_passOverlay from './Constants/passOverlay.js'\nimport czm_passTerrainClassification from './Constants/passTerrainClassification.js'\nimport czm_passTranslucent from './Constants/passTranslucent.js'\nimport czm_passVoxels from './Constants/passVoxels.js'\nimport czm_pi from './Constants/pi.js'\nimport czm_piOverFour from './Constants/piOverFour.js'\nimport czm_piOverSix from './Constants/piOverSix.js'\nimport czm_piOverThree from './Constants/piOverThree.js'\nimport czm_piOverTwo from './Constants/piOverTwo.js'\nimport czm_radiansPerDegree from './Constants/radiansPerDegree.js'\nimport czm_sceneMode2D from './Constants/sceneMode2D.js'\nimport czm_sceneMode3D from './Constants/sceneMode3D.js'\nimport czm_sceneModeColumbusView from './Constants/sceneModeColumbusView.js'\nimport czm_sceneModeMorphing from './Constants/sceneModeMorphing.js'\nimport czm_solarRadius from './Constants/solarRadius.js'\nimport czm_threePiOver2 from './Constants/threePiOver2.js'\nimport czm_twoPi from './Constants/twoPi.js'\nimport czm_webMercatorMaxLatitude from './Constants/webMercatorMaxLatitude.js'\nimport czm_depthRangeStruct from './Structs/depthRangeStruct.js'\nimport czm_material from './Structs/material.js'\nimport czm_materialInput from './Structs/materialInput.js'\nimport czm_modelMaterial from './Structs/modelMaterial.js'\nimport czm_modelVertexOutput from './Structs/modelVertexOutput.js'\nimport czm_ray from './Structs/ray.js'\nimport czm_raySegment from './Structs/raySegment.js'\nimport czm_shadowParameters from './Structs/shadowParameters.js'\nimport czm_HSBToRGB from './Functions/HSBToRGB.js'\nimport czm_HSLToRGB from './Functions/HSLToRGB.js'\nimport czm_RGBToHSB from './Functions/RGBToHSB.js'\nimport czm_RGBToHSL from './Functions/RGBToHSL.js'\nimport czm_RGBToXYZ from './Functions/RGBToXYZ.js'\nimport czm_XYZToRGB from './Functions/XYZToRGB.js'\nimport czm_acesTonemapping from './Functions/acesTonemapping.js'\nimport czm_alphaWeight from './Functions/alphaWeight.js'\nimport czm_antialias from './Functions/antialias.js'\nimport czm_applyHSBShift from './Functions/applyHSBShift.js'\nimport czm_approximateSphericalCoordinates from './Functions/approximateSphericalCoordinates.js'\nimport czm_approximateTanh from './Functions/approximateTanh.js'\nimport czm_backFacing from './Functions/backFacing.js'\nimport czm_branchFreeTernary from './Functions/branchFreeTernary.js'\nimport czm_cascadeColor from './Functions/cascadeColor.js'\nimport czm_cascadeDistance from './Functions/cascadeDistance.js'\nimport czm_cascadeMatrix from './Functions/cascadeMatrix.js'\nimport czm_cascadeWeights from './Functions/cascadeWeights.js'\nimport czm_clipPolygons from './Functions/clipPolygons.js'\nimport czm_columbusViewMorph from './Functions/columbusViewMorph.js'\nimport czm_computeAtmosphereColor from './Functions/computeAtmosphereColor.js'\nimport czm_computeGroundAtmosphereScattering from './Functions/computeGroundAtmosphereScattering.js'\nimport czm_computePosition from './Functions/computePosition.js'\nimport czm_computeScattering from './Functions/computeScattering.js'\nimport czm_cosineAndSine from './Functions/cosineAndSine.js'\nimport czm_decodeRGB8 from './Functions/decodeRGB8.js'\nimport czm_decompressTextureCoordinates from './Functions/decompressTextureCoordinates.js'\nimport czm_depthClamp from './Functions/depthClamp.js'\nimport czm_eastNorthUpToEyeCoordinates from './Functions/eastNorthUpToEyeCoordinates.js'\nimport czm_ellipsoidContainsPoint from './Functions/ellipsoidContainsPoint.js'\nimport czm_ellipsoidTextureCoordinates from './Functions/ellipsoidTextureCoordinates.js'\nimport czm_equalsEpsilon from './Functions/equalsEpsilon.js'\nimport czm_eyeOffset from './Functions/eyeOffset.js'\nimport czm_eyeToWindowCoordinates from './Functions/eyeToWindowCoordinates.js'\nimport czm_fastApproximateAtan from './Functions/fastApproximateAtan.js'\nimport czm_fog from './Functions/fog.js'\nimport czm_gammaCorrect from './Functions/gammaCorrect.js'\nimport czm_geodeticSurfaceNormal from './Functions/geodeticSurfaceNormal.js'\nimport czm_getDefaultMaterial from './Functions/getDefaultMaterial.js'\nimport czm_getDynamicAtmosphereLightDirection from './Functions/getDynamicAtmosphereLightDirection.js'\nimport czm_getLambertDiffuse from './Functions/getLambertDiffuse.js'\nimport czm_getSpecular from './Functions/getSpecular.js'\nimport czm_getWaterNoise from './Functions/getWaterNoise.js'\nimport czm_hue from './Functions/hue.js'\nimport czm_inverseGamma from './Functions/inverseGamma.js'\nimport czm_isEmpty from './Functions/isEmpty.js'\nimport czm_isFull from './Functions/isFull.js'\nimport czm_latitudeToWebMercatorFraction from './Functions/latitudeToWebMercatorFraction.js'\nimport czm_lineDistance from './Functions/lineDistance.js'\nimport czm_linearToSrgb from './Functions/linearToSrgb.js'\nimport czm_luminance from './Functions/luminance.js'\nimport czm_maximumComponent from './Functions/maximumComponent.js'\nimport czm_metersPerPixel from './Functions/metersPerPixel.js'\nimport czm_modelToWindowCoordinates from './Functions/modelToWindowCoordinates.js'\nimport czm_multiplyWithColorBalance from './Functions/multiplyWithColorBalance.js'\nimport czm_nearFarScalar from './Functions/nearFarScalar.js'\nimport czm_octDecode from './Functions/octDecode.js'\nimport czm_packDepth from './Functions/packDepth.js'\nimport czm_pbrLighting from './Functions/pbrLighting.js'\nimport czm_pbrNeutralTonemapping from './Functions/pbrNeutralTonemapping.js'\nimport czm_phong from './Functions/phong.js'\nimport czm_planeDistance from './Functions/planeDistance.js'\nimport czm_pointAlongRay from './Functions/pointAlongRay.js'\nimport czm_rayEllipsoidIntersectionInterval from './Functions/rayEllipsoidIntersectionInterval.js'\nimport czm_raySphereIntersectionInterval from './Functions/raySphereIntersectionInterval.js'\nimport czm_readDepth from './Functions/readDepth.js'\nimport czm_readNonPerspective from './Functions/readNonPerspective.js'\nimport czm_reverseLogDepth from './Functions/reverseLogDepth.js'\nimport czm_round from './Functions/round.js'\nimport czm_saturation from './Functions/saturation.js'\nimport czm_shadowDepthCompare from './Functions/shadowDepthCompare.js'\nimport czm_shadowVisibility from './Functions/shadowVisibility.js'\nimport czm_signNotZero from './Functions/signNotZero.js'\nimport czm_sphericalHarmonics from './Functions/sphericalHarmonics.js'\nimport czm_srgbToLinear from './Functions/srgbToLinear.js'\nimport czm_tangentToEyeSpaceMatrix from './Functions/tangentToEyeSpaceMatrix.js'\nimport czm_textureCube from './Functions/textureCube.js'\nimport czm_transformPlane from './Functions/transformPlane.js'\nimport czm_translateRelativeToEye from './Functions/translateRelativeToEye.js'\nimport czm_translucentPhong from './Functions/translucentPhong.js'\nimport czm_transpose from './Functions/transpose.js'\nimport czm_unpackClippingExtents from './Functions/unpackClippingExtents.js'\nimport czm_unpackDepth from './Functions/unpackDepth.js'\nimport czm_unpackFloat from './Functions/unpackFloat.js'\nimport czm_unpackTexture from './Functions/unpackTexture.js'\nimport czm_unpackUint from './Functions/unpackUint.js'\nimport czm_valueTransform from './Functions/valueTransform.js'\nimport czm_vertexLogDepth from './Functions/vertexLogDepth.js'\nimport czm_windowToEyeCoordinates from './Functions/windowToEyeCoordinates.js'\nimport czm_writeDepthClamp from './Functions/writeDepthClamp.js'\nimport czm_writeLogDepth from './Functions/writeLogDepth.js'\nimport czm_writeNonPerspective from './Functions/writeNonPerspective.js'\n\nexport default {\n    czm_degreesPerRadian : czm_degreesPerRadian,\n    czm_depthRange : czm_depthRange,\n    czm_epsilon1 : czm_epsilon1,\n    czm_epsilon2 : czm_epsilon2,\n    czm_epsilon3 : czm_epsilon3,\n    czm_epsilon4 : czm_epsilon4,\n    czm_epsilon5 : czm_epsilon5,\n    czm_epsilon6 : czm_epsilon6,\n    czm_epsilon7 : czm_epsilon7,\n    czm_infinity : czm_infinity,\n    czm_oneOverPi : czm_oneOverPi,\n    czm_oneOverTwoPi : czm_oneOverTwoPi,\n    czm_passCesium3DTile : czm_passCesium3DTile,\n    czm_passCesium3DTileClassification : czm_passCesium3DTileClassification,\n    czm_passCesium3DTileClassificationIgnoreShow : czm_passCesium3DTileClassificationIgnoreShow,\n    czm_passCesium3DTileEdges : czm_passCesium3DTileEdges,\n    czm_passClassification : czm_passClassification,\n    czm_passCompute : czm_passCompute,\n    czm_passEnvironment : czm_passEnvironment,\n    czm_passGaussianSplats : czm_passGaussianSplats,\n    czm_passGlobe : czm_passGlobe,\n    czm_passOpaque : czm_passOpaque,\n    czm_passOverlay : czm_passOverlay,\n    czm_passTerrainClassification : czm_passTerrainClassification,\n    czm_passTranslucent : czm_passTranslucent,\n    czm_passVoxels : czm_passVoxels,\n    czm_pi : czm_pi,\n    czm_piOverFour : czm_piOverFour,\n    czm_piOverSix : czm_piOverSix,\n    czm_piOverThree : czm_piOverThree,\n    czm_piOverTwo : czm_piOverTwo,\n    czm_radiansPerDegree : czm_radiansPerDegree,\n    czm_sceneMode2D : czm_sceneMode2D,\n    czm_sceneMode3D : czm_sceneMode3D,\n    czm_sceneModeColumbusView : czm_sceneModeColumbusView,\n    czm_sceneModeMorphing : czm_sceneModeMorphing,\n    czm_solarRadius : czm_solarRadius,\n    czm_threePiOver2 : czm_threePiOver2,\n    czm_twoPi : czm_twoPi,\n    czm_webMercatorMaxLatitude : czm_webMercatorMaxLatitude,\n    czm_depthRangeStruct : czm_depthRangeStruct,\n    czm_material : czm_material,\n    czm_materialInput : czm_materialInput,\n    czm_modelMaterial : czm_modelMaterial,\n    czm_modelVertexOutput : czm_modelVertexOutput,\n    czm_ray : czm_ray,\n    czm_raySegment : czm_raySegment,\n    czm_shadowParameters : czm_shadowParameters,\n    czm_HSBToRGB : czm_HSBToRGB,\n    czm_HSLToRGB : czm_HSLToRGB,\n    czm_RGBToHSB : czm_RGBToHSB,\n    czm_RGBToHSL : czm_RGBToHSL,\n    czm_RGBToXYZ : czm_RGBToXYZ,\n    czm_XYZToRGB : czm_XYZToRGB,\n    czm_acesTonemapping : czm_acesTonemapping,\n    czm_alphaWeight : czm_alphaWeight,\n    czm_antialias : czm_antialias,\n    czm_applyHSBShift : czm_applyHSBShift,\n    czm_approximateSphericalCoordinates : czm_approximateSphericalCoordinates,\n    czm_approximateTanh : czm_approximateTanh,\n    czm_backFacing : czm_backFacing,\n    czm_branchFreeTernary : czm_branchFreeTernary,\n    czm_cascadeColor : czm_cascadeColor,\n    czm_cascadeDistance : czm_cascadeDistance,\n    czm_cascadeMatrix : czm_cascadeMatrix,\n    czm_cascadeWeights : czm_cascadeWeights,\n    czm_clipPolygons : czm_clipPolygons,\n    czm_columbusViewMorph : czm_columbusViewMorph,\n    czm_computeAtmosphereColor : czm_computeAtmosphereColor,\n    czm_computeGroundAtmosphereScattering : czm_computeGroundAtmosphereScattering,\n    czm_computePosition : czm_computePosition,\n    czm_computeScattering : czm_computeScattering,\n    czm_cosineAndSine : czm_cosineAndSine,\n    czm_decodeRGB8 : czm_decodeRGB8,\n    czm_decompressTextureCoordinates : czm_decompressTextureCoordinates,\n    czm_depthClamp : czm_depthClamp,\n    czm_eastNorthUpToEyeCoordinates : czm_eastNorthUpToEyeCoordinates,\n    czm_ellipsoidContainsPoint : czm_ellipsoidContainsPoint,\n    czm_ellipsoidTextureCoordinates : czm_ellipsoidTextureCoordinates,\n    czm_equalsEpsilon : czm_equalsEpsilon,\n    czm_eyeOffset : czm_eyeOffset,\n    czm_eyeToWindowCoordinates : czm_eyeToWindowCoordinates,\n    czm_fastApproximateAtan : czm_fastApproximateAtan,\n    czm_fog : czm_fog,\n    czm_gammaCorrect : czm_gammaCorrect,\n    czm_geodeticSurfaceNormal : czm_geodeticSurfaceNormal,\n    czm_getDefaultMaterial : czm_getDefaultMaterial,\n    czm_getDynamicAtmosphereLightDirection : czm_getDynamicAtmosphereLightDirection,\n    czm_getLambertDiffuse : czm_getLambertDiffuse,\n    czm_getSpecular : czm_getSpecular,\n    czm_getWaterNoise : czm_getWaterNoise,\n    czm_hue : czm_hue,\n    czm_inverseGamma : czm_inverseGamma,\n    czm_isEmpty : czm_isEmpty,\n    czm_isFull : czm_isFull,\n    czm_latitudeToWebMercatorFraction : czm_latitudeToWebMercatorFraction,\n    czm_lineDistance : czm_lineDistance,\n    czm_linearToSrgb : czm_linearToSrgb,\n    czm_luminance : czm_luminance,\n    czm_maximumComponent : czm_maximumComponent,\n    czm_metersPerPixel : czm_metersPerPixel,\n    czm_modelToWindowCoordinates : czm_modelToWindowCoordinates,\n    czm_multiplyWithColorBalance : czm_multiplyWithColorBalance,\n    czm_nearFarScalar : czm_nearFarScalar,\n    czm_octDecode : czm_octDecode,\n    czm_packDepth : czm_packDepth,\n    czm_pbrLighting : czm_pbrLighting,\n    czm_pbrNeutralTonemapping : czm_pbrNeutralTonemapping,\n    czm_phong : czm_phong,\n    czm_planeDistance : czm_planeDistance,\n    czm_pointAlongRay : czm_pointAlongRay,\n    czm_rayEllipsoidIntersectionInterval : czm_rayEllipsoidIntersectionInterval,\n    czm_raySphereIntersectionInterval : czm_raySphereIntersectionInterval,\n    czm_readDepth : czm_readDepth,\n    czm_readNonPerspective : czm_readNonPerspective,\n    czm_reverseLogDepth : czm_reverseLogDepth,\n    czm_round : czm_round,\n    czm_saturation : czm_saturation,\n    czm_shadowDepthCompare : czm_shadowDepthCompare,\n    czm_shadowVisibility : czm_shadowVisibility,\n    czm_signNotZero : czm_signNotZero,\n    czm_sphericalHarmonics : czm_sphericalHarmonics,\n    czm_srgbToLinear : czm_srgbToLinear,\n    czm_tangentToEyeSpaceMatrix : czm_tangentToEyeSpaceMatrix,\n    czm_textureCube : czm_textureCube,\n    czm_transformPlane : czm_transformPlane,\n    czm_translateRelativeToEye : czm_translateRelativeToEye,\n    czm_translucentPhong : czm_translucentPhong,\n    czm_transpose : czm_transpose,\n    czm_unpackClippingExtents : czm_unpackClippingExtents,\n    czm_unpackDepth : czm_unpackDepth,\n    czm_unpackFloat : czm_unpackFloat,\n    czm_unpackTexture : czm_unpackTexture,\n    czm_unpackUint : czm_unpackUint,\n    czm_valueTransform : czm_valueTransform,\n    czm_vertexLogDepth : czm_vertexLogDepth,\n    czm_windowToEyeCoordinates : czm_windowToEyeCoordinates,\n    czm_writeDepthClamp : czm_writeDepthClamp,\n    czm_writeLogDepth : czm_writeLogDepth,\n    czm_writeNonPerspective : czm_writeNonPerspective\n};\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an HSB color (hue, saturation, brightness) to RGB\\n\\\n * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}\\n\\\n *\\n\\\n * @name czm_HSBToRGB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} hsb The color in HSB.\\n\\\n *\\n\\\n * @returns {vec3} The color in RGB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsb = czm_RGBToHSB(rgb);\\n\\\n * hsb.z *= 0.1;\\n\\\n * rgb = czm_HSBToRGB(hsb);\\n\\\n */\\n\\\n\\n\\\nconst vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\\n\\\n\\n\\\nvec3 czm_HSBToRGB(vec3 hsb)\\n\\\n{\\n\\\n    vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www);\\n\\\n    return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an HSL color (hue, saturation, lightness) to RGB\\n\\\n * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}\\n\\\n *\\n\\\n * @name czm_HSLToRGB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in HSL.\\n\\\n *\\n\\\n * @returns {vec3} The color in RGB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsl = czm_RGBToHSL(rgb);\\n\\\n * hsl.z *= 0.1;\\n\\\n * rgb = czm_HSLToRGB(hsl);\\n\\\n */\\n\\\n\\n\\\nvec3 hueToRGB(float hue)\\n\\\n{\\n\\\n    float r = abs(hue * 6.0 - 3.0) - 1.0;\\n\\\n    float g = 2.0 - abs(hue * 6.0 - 2.0);\\n\\\n    float b = 2.0 - abs(hue * 6.0 - 4.0);\\n\\\n    return clamp(vec3(r, g, b), 0.0, 1.0);\\n\\\n}\\n\\\n\\n\\\nvec3 czm_HSLToRGB(vec3 hsl)\\n\\\n{\\n\\\n    vec3 rgb = hueToRGB(hsl.x);\\n\\\n    float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;\\n\\\n    return (rgb - 0.5) * c + hsl.z;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an RGB color to HSB (hue, saturation, brightness)\\n\\\n * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}\\n\\\n *\\n\\\n * @name czm_RGBToHSB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in RGB.\\n\\\n *\\n\\\n * @returns {vec3} The color in HSB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsb = czm_RGBToHSB(rgb);\\n\\\n * hsb.z *= 0.1;\\n\\\n * rgb = czm_HSBToRGB(hsb);\\n\\\n */\\n\\\n\\n\\\nconst vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\\n\\\n\\n\\\nvec3 czm_RGBToHSB(vec3 rgb)\\n\\\n{\\n\\\n    vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g));\\n\\\n    vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\\n\\\n\\n\\\n    float d = q.x - min(q.w, q.y);\\n\\\n    return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an RGB color to HSL (hue, saturation, lightness)\\n\\\n * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}\\n\\\n *\\n\\\n * @name czm_RGBToHSL\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in RGB.\\n\\\n *\\n\\\n * @returns {vec3} The color in HSL.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 hsl = czm_RGBToHSL(rgb);\\n\\\n * hsl.z *= 0.1;\\n\\\n * rgb = czm_HSLToRGB(hsl);\\n\\\n */\\n\\\n \\n\\\nvec3 RGBtoHCV(vec3 rgb)\\n\\\n{\\n\\\n    // Based on work by Sam Hocevar and Emil Persson\\n\\\n    vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0);\\n\\\n    vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);\\n\\\n    float c = q.x - min(q.w, q.y);\\n\\\n    float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z);\\n\\\n    return vec3(h, c, q.x);\\n\\\n}\\n\\\n\\n\\\nvec3 czm_RGBToHSL(vec3 rgb)\\n\\\n{\\n\\\n    vec3 hcv = RGBtoHCV(rgb);\\n\\\n    float l = hcv.z - hcv.y * 0.5;\\n\\\n    float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7);\\n\\\n    return vec3(hcv.x, s, l);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an RGB color to CIE Yxy.\\n\\\n * <p>The conversion is described in\\n\\\n * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}\\n\\\n * </p>\\n\\\n * \\n\\\n * @name czm_RGBToXYZ\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color in RGB.\\n\\\n *\\n\\\n * @returns {vec3} The color in CIE Yxy.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 xyz = czm_RGBToXYZ(rgb);\\n\\\n * xyz.x = max(xyz.x - luminanceThreshold, 0.0);\\n\\\n * rgb = czm_XYZToRGB(xyz);\\n\\\n */\\n\\\nvec3 czm_RGBToXYZ(vec3 rgb)\\n\\\n{\\n\\\n    const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193,\\n\\\n                              0.3576, 0.7152, 0.1192,\\n\\\n                              0.1805, 0.0722, 0.9505);\\n\\\n    vec3 xyz = RGB2XYZ * rgb;\\n\\\n    vec3 Yxy;\\n\\\n    Yxy.r = xyz.g;\\n\\\n    float temp = dot(vec3(1.0), xyz);\\n\\\n    Yxy.gb = xyz.rg / temp;\\n\\\n    return Yxy;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts a CIE Yxy color to RGB.\\n\\\n * <p>The conversion is described in\\n\\\n * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}\\n\\\n * </p>\\n\\\n * \\n\\\n * @name czm_XYZToRGB\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} Yxy The color in CIE Yxy.\\n\\\n *\\n\\\n * @returns {vec3} The color in RGB.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 xyz = czm_RGBToXYZ(rgb);\\n\\\n * xyz.x = max(xyz.x - luminanceThreshold, 0.0);\\n\\\n * rgb = czm_XYZToRGB(xyz);\\n\\\n */\\n\\\nvec3 czm_XYZToRGB(vec3 Yxy)\\n\\\n{\\n\\\n    const mat3 XYZ2RGB = mat3( 3.2405, -0.9693,  0.0556,\\n\\\n                              -1.5371,  1.8760, -0.2040,\\n\\\n                              -0.4985,  0.0416,  1.0572);\\n\\\n    vec3 xyz;\\n\\\n    xyz.r = Yxy.r * Yxy.g / Yxy.b;\\n\\\n    xyz.g = Yxy.r;\\n\\\n    xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b;\\n\\\n    \\n\\\n    return XYZ2RGB * xyz;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See:\\n\\\n//    https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/\\n\\\n\\n\\\nvec3 czm_acesTonemapping(vec3 color) {\\n\\\n    float g = 0.985;\\n\\\n    float a = 0.065;\\n\\\n    float b = 0.0001;\\n\\\n    float c = 0.433;\\n\\\n    float d = 0.238;\\n\\\n\\n\\\n    color = (color * (color + a) - b) / (color * (g * color + c) + d);\\n\\\n\\n\\\n    color = clamp(color, 0.0, 1.0);\\n\\\n\\n\\\n    return color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nfloat czm_alphaWeight(float a)\\n\\\n{\\n\\\n    float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];\\n\\\n\\n\\\n    // See Weighted Blended Order-Independent Transparency for examples of different weighting functions:\\n\\\n    // http://jcgt.org/published/0002/02/09/\\n\\\n    return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0))));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Procedural anti-aliasing by blurring two colors that meet at a sharp edge.\\n\\\n *\\n\\\n * @name czm_antialias\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} color1 The color on one side of the edge.\\n\\\n * @param {vec4} color2 The color on the other side of the edge.\\n\\\n * @param {vec4} currentcolor The current color, either <code>color1</code> or <code>color2</code>.\\n\\\n * @param {float} dist The distance to the edge in texture coordinates.\\n\\\n * @param {float} [fuzzFactor=0.1] Controls the blurriness between the two colors.\\n\\\n * @returns {vec4} The anti-aliased color.\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declarations\\n\\\n * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor);\\n\\\n * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist);\\n\\\n *\\n\\\n * // get the color for a material that has a sharp edge at the line y = 0.5 in texture space\\n\\\n * float dist = abs(textureCoordinates.t - 0.5);\\n\\\n * vec4 currentColor = mix(bottomColor, topColor, step(0.5, textureCoordinates.t));\\n\\\n * vec4 color = czm_antialias(bottomColor, topColor, currentColor, dist, 0.1);\\n\\\n */\\n\\\nvec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor)\\n\\\n{\\n\\\n    float val1 = clamp(dist / fuzzFactor, 0.0, 1.0);\\n\\\n    float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0);\\n\\\n    val1 = val1 * (1.0 - val2);\\n\\\n    val1 = val1 * val1 * (3.0 - (2.0 * val1));\\n\\\n    val1 = pow(val1, 0.5); //makes the transition nicer\\n\\\n    \\n\\\n    vec4 midColor = (color1 + color2) * 0.5;\\n\\\n    return mix(midColor, currentColor, val1);\\n\\\n}\\n\\\n\\n\\\nvec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist)\\n\\\n{\\n\\\n    return czm_antialias(color1, color2, currentColor, dist, 0.1);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Apply a HSB color shift to an RGB color.\\n\\\n *\\n\\\n * @param {vec3} rgb The color in RGB space.\\n\\\n * @param {vec3} hsbShift The amount to shift each component. The xyz components correspond to hue, saturation, and brightness. Shifting the hue by +/- 1.0 corresponds to shifting the hue by a full cycle. Saturation and brightness are clamped between 0 and 1 after the adjustment\\n\\\n * @param {bool} ignoreBlackPixels If true, black pixels will be unchanged. This is necessary in some shaders such as atmosphere-related effects.\\n\\\n *\\n\\\n * @return {vec3} The RGB color after shifting in HSB space and clamping saturation and brightness to a valid range.\\n\\\n */\\n\\\nvec3 czm_applyHSBShift(vec3 rgb, vec3 hsbShift, bool ignoreBlackPixels) {\\n\\\n    // Convert rgb color to hsb\\n\\\n    vec3 hsb = czm_RGBToHSB(rgb);\\n\\\n\\n\\\n    // Perform hsb shift\\n\\\n    // Hue cycles around so no clamp is needed.\\n\\\n    hsb.x += hsbShift.x; // hue\\n\\\n    hsb.y = clamp(hsb.y + hsbShift.y, 0.0, 1.0); // saturation\\n\\\n\\n\\\n    // brightness\\n\\\n    //\\n\\\n    // Some shaders such as atmosphere-related effects need to leave black\\n\\\n    // pixels unchanged\\n\\\n    if (ignoreBlackPixels) {\\n\\\n        hsb.z = hsb.z > czm_epsilon7 ? hsb.z + hsbShift.z : 0.0;\\n\\\n    } else {\\n\\\n        hsb.z = hsb.z + hsbShift.z;\\n\\\n    }\\n\\\n    hsb.z = clamp(hsb.z, 0.0, 1.0);\\n\\\n\\n\\\n    // Convert shifted hsb back to rgb\\n\\\n    return czm_HSBToRGB(hsb);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Approximately computes spherical coordinates given a normal.\\n\\\n * Uses approximate inverse trigonometry for speed and consistency,\\n\\\n * since inverse trigonometry can differ from vendor-to-vendor and when compared with the CPU.\\n\\\n *\\n\\\n * @name czm_approximateSphericalCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} normal arbitrary-length normal.\\n\\\n *\\n\\\n * @returns {vec2} Approximate latitude and longitude spherical coordinates.\\n\\\n */\\n\\\nvec2 czm_approximateSphericalCoordinates(vec3 normal) {\\n\\\n    // Project into plane with vertical for latitude\\n\\\n    float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z);\\n\\\n    float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y);\\n\\\n    return vec2(latitudeApproximation, longitudeApproximation);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compute a rational approximation to tanh(x)\\n\\\n *\\n\\\n * @param {float} x A real number input\\n\\\n * @returns {float} An approximation for tanh(x)\\n\\\n*/\\n\\\nfloat czm_approximateTanh(float x) {\\n\\\n    float x2 = x * x;\\n\\\n    return max(-1.0, min(1.0, x * (27.0 + x2) / (27.0 + 9.0 * x2)));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Determines if the fragment is back facing\\n\\\n *\\n\\\n * @name czm_backFacing\\n\\\n * @glslFunction \\n\\\n * \\n\\\n * @returns {bool} <code>true</code> if the fragment is back facing; otherwise, <code>false</code>.\\n\\\n */\\n\\\nbool czm_backFacing()\\n\\\n{\\n\\\n    // !gl_FrontFacing doesn't work as expected on Mac/Intel so use the more verbose form instead. See https://github.com/CesiumGS/cesium/pull/8494.\\n\\\n    return gl_FrontFacing == false;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a float expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {float} a Value to return if the comparison is true.\\n\\\n * @param {float} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {float} equivalent of comparison ? a : b\\n\\\n */\\n\\\nfloat czm_branchFreeTernary(bool comparison, float a, float b) {\\n\\\n    float useA = float(comparison);\\n\\\n    return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a vec2 expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {vec2} a Value to return if the comparison is true.\\n\\\n * @param {vec2} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {vec2} equivalent of comparison ? a : b\\n\\\n */\\n\\\nvec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) {\\n\\\n    float useA = float(comparison);\\n\\\n    return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a vec3 expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {vec3} a Value to return if the comparison is true.\\n\\\n * @param {vec3} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {vec3} equivalent of comparison ? a : b\\n\\\n */\\n\\\nvec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) {\\n\\\n    float useA = float(comparison);\\n\\\n    return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Branchless ternary operator to be used when it's inexpensive to explicitly\\n\\\n * evaluate both possibilities for a vec4 expression.\\n\\\n *\\n\\\n * @name czm_branchFreeTernary\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {bool} comparison A comparison statement\\n\\\n * @param {vec3} a Value to return if the comparison is true.\\n\\\n * @param {vec3} b Value to return if the comparison is false.\\n\\\n *\\n\\\n * @returns {vec3} equivalent of comparison ? a : b\\n\\\n */\\n\\\nvec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) {\\n\\\n    float useA = float(comparison);\\n\\\n    return a * useA + b * (1.0 - useA);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nvec4 czm_cascadeColor(vec4 weights)\\n\\\n{\\n\\\n    return vec4(1.0, 0.0, 0.0, 1.0) * weights.x +\\n\\\n           vec4(0.0, 1.0, 0.0, 1.0) * weights.y +\\n\\\n           vec4(0.0, 0.0, 1.0, 1.0) * weights.z +\\n\\\n           vec4(1.0, 0.0, 1.0, 1.0) * weights.w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nuniform vec4 shadowMap_cascadeDistances;\\n\\\n\\n\\\nfloat czm_cascadeDistance(vec4 weights)\\n\\\n{\\n\\\n    return dot(shadowMap_cascadeDistances, weights);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nuniform mat4 shadowMap_cascadeMatrices[4];\\n\\\n\\n\\\nmat4 czm_cascadeMatrix(vec4 weights)\\n\\\n{\\n\\\n    return shadowMap_cascadeMatrices[0] * weights.x +\\n\\\n           shadowMap_cascadeMatrices[1] * weights.y +\\n\\\n           shadowMap_cascadeMatrices[2] * weights.z +\\n\\\n           shadowMap_cascadeMatrices[3] * weights.w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nuniform vec4 shadowMap_cascadeSplits[2];\\n\\\n\\n\\\nvec4 czm_cascadeWeights(float depthEye)\\n\\\n{\\n\\\n    // One component is set to 1.0 and all others set to 0.0.\\n\\\n    vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye));\\n\\\n    vec4 far = step(depthEye, shadowMap_cascadeSplits[1]);\\n\\\n    return near * far;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float getSignedDistance(vec2 uv, highp sampler2D clippingDistance) {\\n\\\n    float signedDistance = texture(clippingDistance, uv).r;\\n\\\n    return (signedDistance - 0.5) * 2.0;\\n\\\n}\\n\\\n\\n\\\nvoid czm_clipPolygons(highp sampler2D clippingDistance, int extentsLength, vec2 clippingPosition, int regionIndex) {\\n\\\n    // Position is completely outside of polygons bounds\\n\\\n    vec2 rectUv = clippingPosition;\\n\\\n    if (regionIndex < 0 || rectUv.x <= 0.0 || rectUv.y <= 0.0 || rectUv.x >= 1.0 || rectUv.y >= 1.0) {\\n\\\n        #ifdef CLIPPING_INVERSE \\n\\\n            discard;\\n\\\n        #endif\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    vec2 clippingDistanceTextureDimensions = vec2(textureSize(clippingDistance, 0));\\n\\\n    vec2 sampleOffset = max(1.0 / clippingDistanceTextureDimensions, vec2(0.005));\\n\\\n    float dimension = float(extentsLength);\\n\\\n    if (extentsLength > 2) {\\n\\\n       dimension = ceil(log2(float(extentsLength)));\\n\\\n    }\\n\\\n\\n\\\n    vec2 textureOffset = vec2(mod(float(regionIndex), dimension), floor(float(regionIndex) / dimension)) / dimension;\\n\\\n    vec2 uv = textureOffset + rectUv / dimension;\\n\\\n\\n\\\n    float signedDistance = getSignedDistance(uv, clippingDistance);\\n\\\n\\n\\\n    #ifdef CLIPPING_INVERSE\\n\\\n    if (signedDistance > 0.0)  {\\n\\\n        discard;\\n\\\n    }\\n\\\n    #else\\n\\\n    if (signedDistance < 0.0)  {\\n\\\n        discard;\\n\\\n    }\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_columbusViewMorph\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time)\\n\\\n{\\n\\\n    // Just linear for now.\\n\\\n    // We're manually doing the equivalent of a `mix` here because, some GPUs\\n\\\n    // (NVidia GeForce 3070 Ti and Intel Arc A750, to name two), `mix` seems to\\n\\\n    // use an alternate formulation that introduces jitter even when `time` is\\n\\\n    // 0.0 or 1.0. That is, the value of `p` won't be exactly `position2D.xyz`\\n\\\n    // when `time` is 0.0 and it won't be exactly `position3D.xyz` when `time` is\\n\\\n    // 1.0. The \\\"textbook\\\" formulation here, while probably a bit slower,\\n\\\n    // does not have this problem.\\n\\\n    vec3 p = position2D.xyz * (1.0 - time) + position3D.xyz * time;\\n\\\n    return vec4(p, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compute the atmosphere color, applying Rayleigh and Mie scattering. This\\n\\\n * builtin uses automatic uniforms so the atmophere settings are synced with the\\n\\\n * state of the Scene, even in other contexts like Model.\\n\\\n *\\n\\\n * @name czm_computeAtmosphereColor\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionWC Position of the fragment in world coords (low precision)\\n\\\n * @param {vec3} lightDirection Light direction from the sun or other light source.\\n\\\n * @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function\\n\\\n * @param {vec3} mieColor The Mie scattering color computed by a scattering function\\n\\\n * @param {float} opacity The opacity computed by a scattering function.\\n\\\n */\\n\\\nvec4 czm_computeAtmosphereColor(\\n\\\n    vec3 positionWC,\\n\\\n    vec3 lightDirection,\\n\\\n    vec3 rayleighColor,\\n\\\n    vec3 mieColor,\\n\\\n    float opacity\\n\\\n) {\\n\\\n    // Setup the primary ray: from the camera position to the vertex position.\\n\\\n    vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;\\n\\\n    vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);\\n\\\n\\n\\\n    float cosAngle = dot(cameraToPositionWCDirection, lightDirection);\\n\\\n    float cosAngleSq = cosAngle * cosAngle;\\n\\\n\\n\\\n    float G = czm_atmosphereMieAnisotropy;\\n\\\n    float GSq = G * G;\\n\\\n\\n\\\n    // The Rayleigh phase function.\\n\\\n    float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq);\\n\\\n    // The Mie phase function.\\n\\\n    float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq));\\n\\\n\\n\\\n    // The final color is generated by combining the effects of the Rayleigh and Mie scattering.\\n\\\n    vec3 rayleigh = rayleighPhase * rayleighColor;\\n\\\n    vec3 mie = miePhase * mieColor;\\n\\\n\\n\\\n    vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity;\\n\\\n\\n\\\n    return vec4(color, opacity);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Compute the atmosphere color, applying Rayleigh and Mie scattering. This\\n\\\n * builtin uses automatic uniforms so the atmophere settings are synced with the\\n\\\n * state of the Scene, even in other contexts like Model.\\n\\\n *\\n\\\n * @name czm_computeAtmosphereColor\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {czm_ray} primaryRay Ray from the origin to sky fragment to in world coords (low precision)\\n\\\n * @param {vec3} lightDirection Light direction from the sun or other light source.\\n\\\n * @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function\\n\\\n * @param {vec3} mieColor The Mie scattering color computed by a scattering function\\n\\\n * @param {float} opacity The opacity computed by a scattering function.\\n\\\n */\\n\\\nvec4 czm_computeAtmosphereColor(\\n\\\n    czm_ray primaryRay,\\n\\\n    vec3 lightDirection,\\n\\\n    vec3 rayleighColor,\\n\\\n    vec3 mieColor,\\n\\\n    float opacity\\n\\\n) {\\n\\\n    vec3 direction = normalize(primaryRay.direction);\\n\\\n\\n\\\n    float cosAngle = dot(direction, lightDirection);\\n\\\n    float cosAngleSq = cosAngle * cosAngle;\\n\\\n\\n\\\n    float G = czm_atmosphereMieAnisotropy;\\n\\\n    float GSq = G * G;\\n\\\n\\n\\\n    // The Rayleigh phase function.\\n\\\n    float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq);\\n\\\n    // The Mie phase function.\\n\\\n    float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq));\\n\\\n\\n\\\n    // The final color is generated by combining the effects of the Rayleigh and Mie scattering.\\n\\\n    vec3 rayleigh = rayleighPhase * rayleighColor;\\n\\\n    vec3 mie = miePhase * mieColor;\\n\\\n\\n\\\n    vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity;\\n\\\n\\n\\\n    return vec4(color, opacity);\\n\\\n}\\n\\\n\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compute atmosphere scattering for the ground atmosphere and fog. This method\\n\\\n * uses automatic uniforms so it is always synced with the scene settings.\\n\\\n *\\n\\\n * @name czm_computeGroundAtmosphereScattering\\n\\\n * @glslfunction\\n\\\n *\\n\\\n * @param {vec3} positionWC The position of the fragment in world coordinates.\\n\\\n * @param {vec3} lightDirection The direction of the light to calculate the scattering from.\\n\\\n * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to.\\n\\\n * @param {vec3} mieColor The variable the Mie scattering will be written to.\\n\\\n * @param {float} opacity The variable the transmittance will be written to.\\n\\\n */\\n\\\nvoid czm_computeGroundAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) {\\n\\\n    vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;\\n\\\n    vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);\\n\\\n    czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);\\n\\\n\\n\\\n    float atmosphereInnerRadius = length(positionWC);\\n\\\n\\n\\\n    czm_computeScattering(\\n\\\n        primaryRay,\\n\\\n        length(cameraToPositionWC),\\n\\\n        lightDirection,\\n\\\n        atmosphereInnerRadius,\\n\\\n        rayleighColor,\\n\\\n        mieColor,\\n\\\n        opacity\\n\\\n    );\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Returns a position in model coordinates relative to eye taking into\\n\\\n * account the current scene mode: 3D, 2D, or Columbus view.\\n\\\n * <p>\\n\\\n * This uses standard position attributes, <code>position3DHigh</code>, \\n\\\n * <code>position3DLow</code>, <code>position2DHigh</code>, and <code>position2DLow</code>, \\n\\\n * and should be used when writing a vertex shader for an {@link Appearance}.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_computePosition\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @returns {vec4} The position relative to eye.\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 p = czm_computePosition();\\n\\\n * v_positionEC = (czm_modelViewRelativeToEye * p).xyz;\\n\\\n * gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n *\\n\\\n * @see czm_translateRelativeToEye\\n\\\n */\\n\\\nvec4 czm_computePosition();\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as\\n\\\n * the transmittance value for the ray. This function uses automatic uniforms\\n\\\n * so the atmosphere settings are always synced with the current scene.\\n\\\n *\\n\\\n * @name czm_computeScattering\\n\\\n * @glslfunction\\n\\\n *\\n\\\n * @param {czm_ray} primaryRay The ray from the camera to the position.\\n\\\n * @param {float} primaryRayLength The length of the primary ray.\\n\\\n * @param {vec3} lightDirection The direction of the light to calculate the scattering from.\\n\\\n * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to.\\n\\\n * @param {vec3} mieColor The variable the Mie scattering will be written to.\\n\\\n * @param {float} opacity The variable the transmittance will be written to.\\n\\\n */\\n\\\nvoid czm_computeScattering(\\n\\\n    czm_ray primaryRay,\\n\\\n    float primaryRayLength,\\n\\\n    vec3 lightDirection,\\n\\\n    float atmosphereInnerRadius,\\n\\\n    out vec3 rayleighColor,\\n\\\n    out vec3 mieColor,\\n\\\n    out float opacity\\n\\\n) {\\n\\\n    const float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters.\\n\\\n    const int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled.\\n\\\n    const int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.\\n\\\n\\n\\\n    // Initialize the default scattering amounts to 0.\\n\\\n    rayleighColor = vec3(0.0);\\n\\\n    mieColor = vec3(0.0);\\n\\\n    opacity = 0.0;\\n\\\n\\n\\\n    float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;\\n\\\n\\n\\\n    vec3 origin = vec3(0.0);\\n\\\n\\n\\\n    // Calculate intersection from the camera to the outer ring of the atmosphere.\\n\\\n    czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius);\\n\\\n\\n\\\n    // Return empty colors if no intersection with the atmosphere geometry.\\n\\\n    if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) {\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    // To deal with smaller values of PRIMARY_STEPS (e.g. 4)\\n\\\n    // we implement a split strategy: sky or horizon.\\n\\\n    // For performance reasons, instead of a if/else branch\\n\\\n    // a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0\\n\\\n    float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength);\\n\\\n    // Value close to 0.0: close to the horizon\\n\\\n    // Value close to 1.0: above in the sky\\n\\\n    float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x));\\n\\\n\\n\\\n    // The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere.\\n\\\n    float start_0 = primaryRayAtmosphereIntersect.start;\\n\\\n    primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0);\\n\\\n    // The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller.\\n\\\n    primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength));\\n\\\n\\n\\\n    // For the number of ray steps, distinguish inside or outside atmosphere (outer space)\\n\\\n    // (1) from outer space we have to use more ray steps to get a realistic rendering\\n\\\n    // (2) within atmosphere we need fewer steps for faster rendering\\n\\\n    float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters\\n\\\n    float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a));\\n\\\n    int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled.\\n\\\n    int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.\\n\\\n\\n\\\n    // Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere.\\n\\\n    float rayPositionLength = primaryRayAtmosphereIntersect.start;\\n\\\n    // (1) Outside the atmosphere: constant rayStepLength\\n\\\n    // (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps\\n\\\n    float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength;\\n\\\n    float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0));\\n\\\n    float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS));\\n\\\n\\n\\\n    vec3 rayleighAccumulation = vec3(0.0);\\n\\\n    vec3 mieAccumulation = vec3(0.0);\\n\\\n    vec2 opticalDepth = vec2(0.0);\\n\\\n    vec2 heightScale = vec2(czm_atmosphereRayleighScaleHeight, czm_atmosphereMieScaleHeight);\\n\\\n\\n\\\n    // Sample positions on the primary ray.\\n\\\n    for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) {\\n\\\n\\n\\\n        // The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot\\n\\\n        // loop with non-constant condition, so it has to break early instead\\n\\\n        if (i >= PRIMARY_STEPS) {\\n\\\n            break;\\n\\\n        }\\n\\\n\\n\\\n        // Calculate sample position along viewpoint ray.\\n\\\n        vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength);\\n\\\n\\n\\\n        // Calculate height of sample position above ellipsoid.\\n\\\n        float sampleHeight = length(samplePosition) - atmosphereInnerRadius;\\n\\\n\\n\\\n        // Calculate and accumulate density of particles at the sample position.\\n\\\n        vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength;\\n\\\n        opticalDepth += sampleDensity;\\n\\\n\\n\\\n        // Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere.\\n\\\n        czm_ray lightRay = czm_ray(samplePosition, lightDirection);\\n\\\n        czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius);\\n\\\n\\n\\\n        float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS);\\n\\\n        float lightPositionLength = 0.0;\\n\\\n\\n\\\n        vec2 lightOpticalDepth = vec2(0.0);\\n\\\n\\n\\\n        // Sample positions along the light ray, to accumulate incidence of light on the latest sample segment.\\n\\\n        for (int j = 0; j < LIGHT_STEPS_MAX; ++j) {\\n\\\n\\n\\\n            // The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot\\n\\\n            // loop with non-constant condition, so it has to break early instead\\n\\\n            if (j >= LIGHT_STEPS) {\\n\\\n                break;\\n\\\n            }\\n\\\n\\n\\\n            // Calculate sample position along light ray.\\n\\\n            vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5);\\n\\\n\\n\\\n            // Calculate height of the light sample position above ellipsoid.\\n\\\n            float lightHeight = length(lightPosition) - atmosphereInnerRadius;\\n\\\n\\n\\\n            // Calculate density of photons at the light sample position.\\n\\\n            lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength;\\n\\\n\\n\\\n            // Increment distance on light ray.\\n\\\n            lightPositionLength += lightStepLength;\\n\\\n        }\\n\\\n\\n\\\n        // Compute attenuation via the primary ray and the light ray.\\n\\\n        vec3 attenuation = exp(-((czm_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (czm_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x))));\\n\\\n\\n\\\n        // Accumulate the scattering.\\n\\\n        rayleighAccumulation += sampleDensity.x * attenuation;\\n\\\n        mieAccumulation += sampleDensity.y * attenuation;\\n\\\n\\n\\\n        // Increment distance on primary ray.\\n\\\n        rayPositionLength += (rayStepLength += rayStepLengthIncrease);\\n\\\n    }\\n\\\n\\n\\\n    // Compute the scattering amount.\\n\\\n    rayleighColor = czm_atmosphereRayleighCoefficient * rayleighAccumulation;\\n\\\n    mieColor = czm_atmosphereMieCoefficient * mieAccumulation;\\n\\\n\\n\\\n    // Compute the transmittance i.e. how much light is passing through the atmosphere.\\n\\\n    opacity = length(exp(-((czm_atmosphereMieCoefficient * opticalDepth.y) + (czm_atmosphereRayleighCoefficient * opticalDepth.x))));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nvec2 cordic(float angle)\\n\\\n{\\n\\\n// Scale the vector by the appropriate factor for the 24 iterations to follow.\\n\\\n    vec2 vector = vec2(6.0725293500888267e-1, 0.0);\\n\\\n// Iteration 1\\n\\\n    float sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n //   float factor = sense * 1.0;  // 2^-0\\n\\\n    mat2 rotation = mat2(1.0, sense, -sense, 1.0);\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 7.8539816339744828e-1;  // atan(2^-0)\\n\\\n// Iteration 2\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    float factor = sense * 5.0e-1;  // 2^-1\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 4.6364760900080609e-1;  // atan(2^-1)\\n\\\n// Iteration 3\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 2.5e-1;  // 2^-2\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 2.4497866312686414e-1;  // atan(2^-2)\\n\\\n// Iteration 4\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 1.25e-1;  // 2^-3\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 1.2435499454676144e-1;  // atan(2^-3)\\n\\\n// Iteration 5\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 6.25e-2;  // 2^-4\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 6.2418809995957350e-2;  // atan(2^-4)\\n\\\n// Iteration 6\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 3.125e-2;  // 2^-5\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 3.1239833430268277e-2;  // atan(2^-5)\\n\\\n// Iteration 7\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 1.5625e-2;  // 2^-6\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 1.5623728620476831e-2;  // atan(2^-6)\\n\\\n// Iteration 8\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 7.8125e-3;  // 2^-7\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 7.8123410601011111e-3;  // atan(2^-7)\\n\\\n// Iteration 9\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 3.90625e-3;  // 2^-8\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 3.9062301319669718e-3;  // atan(2^-8)\\n\\\n// Iteration 10\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 1.953125e-3;  // 2^-9\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 1.9531225164788188e-3;  // atan(2^-9)\\n\\\n// Iteration 11\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 9.765625e-4;  // 2^-10\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 9.7656218955931946e-4;  // atan(2^-10)\\n\\\n// Iteration 12\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 4.8828125e-4;  // 2^-11\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 4.8828121119489829e-4;  // atan(2^-11)\\n\\\n// Iteration 13\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 2.44140625e-4;  // 2^-12\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 2.4414062014936177e-4;  // atan(2^-12)\\n\\\n// Iteration 14\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 1.220703125e-4;  // 2^-13\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 1.2207031189367021e-4;  // atan(2^-13)\\n\\\n// Iteration 15\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 6.103515625e-5;  // 2^-14\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 6.1035156174208773e-5;  // atan(2^-14)\\n\\\n// Iteration 16\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 3.0517578125e-5;  // 2^-15\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 3.0517578115526096e-5;  // atan(2^-15)\\n\\\n// Iteration 17\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 1.52587890625e-5;  // 2^-16\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 1.5258789061315762e-5;  // atan(2^-16)\\n\\\n// Iteration 18\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 7.62939453125e-6;  // 2^-17\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 7.6293945311019700e-6;  // atan(2^-17)\\n\\\n// Iteration 19\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 3.814697265625e-6;  // 2^-18\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 3.8146972656064961e-6;  // atan(2^-18)\\n\\\n// Iteration 20\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 1.9073486328125e-6;  // 2^-19\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 1.9073486328101870e-6;  // atan(2^-19)\\n\\\n// Iteration 21\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 9.5367431640625e-7;  // 2^-20\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 9.5367431640596084e-7;  // atan(2^-20)\\n\\\n// Iteration 22\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 4.76837158203125e-7;  // 2^-21\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 4.7683715820308884e-7;  // atan(2^-21)\\n\\\n// Iteration 23\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 2.384185791015625e-7;  // 2^-22\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n    angle -= sense * 2.3841857910155797e-7;  // atan(2^-22)\\n\\\n// Iteration 24\\n\\\n    sense = (angle < 0.0) ? -1.0 : 1.0;\\n\\\n    factor = sense * 1.1920928955078125e-7;  // 2^-23\\n\\\n    rotation[0][1] = factor;\\n\\\n    rotation[1][0] = -factor;\\n\\\n    vector = rotation * vector;\\n\\\n//    angle -= sense * 1.1920928955078068e-7;  // atan(2^-23)\\n\\\n\\n\\\n    return vector;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes the cosine and sine of the provided angle using the CORDIC algorithm.\\n\\\n *\\n\\\n * @name czm_cosineAndSine\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} angle The angle in radians.\\n\\\n *\\n\\\n * @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate).\\n\\\n *\\n\\\n * @example\\n\\\n * vec2 v = czm_cosineAndSine(czm_piOverSix);\\n\\\n * float cosine = v.x;\\n\\\n * float sine = v.y;\\n\\\n */\\n\\\nvec2 czm_cosineAndSine(float angle)\\n\\\n{\\n\\\n    if (angle < -czm_piOverTwo || angle > czm_piOverTwo)\\n\\\n    {\\n\\\n        if (angle < 0.0)\\n\\\n        {\\n\\\n            return -cordic(angle + czm_pi);\\n\\\n        }\\n\\\n        else\\n\\\n        {\\n\\\n            return -cordic(angle - czm_pi);\\n\\\n        }\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        return cordic(angle);\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Decodes RGB values packed into a single float at 8-bit precision. Encoded\\n\\\n * representation is equivalent to 0xFFFFFF in JavaScript.\\n\\\n *\\n\\\n * @name czm_decodeRGB8\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} encoded Float-encoded RGB values.\\n\\\n * @returns {vec4} Decoded RGB values.\\n\\\n */\\n\\\nvec4 czm_decodeRGB8(float encoded) {\\n\\\n    const float SHIFT_RIGHT16 = 1.0 / 65536.0;\\n\\\n    const float SHIFT_RIGHT8 = 1.0 / 256.0;\\n\\\n    const float SHIFT_LEFT16 = 65536.0;\\n\\\n    const float SHIFT_LEFT8 = 256.0;\\n\\\n\\n\\\n    vec4 color = vec4(255.0);\\n\\\n    color.r = floor(encoded * SHIFT_RIGHT16);\\n\\\n    color.g = floor((encoded - color.r * SHIFT_LEFT16) * SHIFT_RIGHT8);\\n\\\n    color.b = floor(encoded - color.r * SHIFT_LEFT16 - color.g * SHIFT_LEFT8);\\n\\\n    return color / 255.0;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Decompresses texture coordinates that were packed into a single float.\\n\\\n *\\n\\\n * @name czm_decompressTextureCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} encoded The compressed texture coordinates.\\n\\\n * @returns {vec2} The decompressed texture coordinates.\\n\\\n */\\n\\\n vec2 czm_decompressTextureCoordinates(float encoded)\\n\\\n {\\n\\\n    float temp = encoded / 4096.0;\\n\\\n    float xZeroTo4095 = floor(temp);\\n\\\n    float stx = xZeroTo4095 / 4095.0;\\n\\\n    float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0;\\n\\\n    return vec2(stx, sty);\\n\\\n }\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// emulated noperspective\\n\\\n#if (__VERSION__ == 300 || defined(GL_EXT_frag_depth)) && !defined(LOG_DEPTH)\\n\\\nout float v_WindowZ;\\n\\\n#endif\\n\\\n\\n\\\n/**\\n\\\n * Emulates GL_DEPTH_CLAMP, which is not available in WebGL 1 or 2.\\n\\\n * GL_DEPTH_CLAMP clamps geometry that is outside the near and far planes, \\n\\\n * capping the shadow volume. More information here: \\n\\\n * https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_depth_clamp.txt.\\n\\\n *\\n\\\n * When GL_EXT_frag_depth is available we emulate GL_DEPTH_CLAMP by ensuring \\n\\\n * no geometry gets clipped by setting the clip space z value to 0.0 and then\\n\\\n * sending the unaltered screen space z value (using emulated noperspective\\n\\\n * interpolation) to the frag shader where it is clamped to [0,1] and then\\n\\\n * written with gl_FragDepth (see czm_writeDepthClamp). This technique is based on:\\n\\\n * https://stackoverflow.com/questions/5960757/how-to-emulate-gl-depth-clamp-nv.\\n\\\n *\\n\\\n * When GL_EXT_frag_depth is not available, which is the case on some mobile \\n\\\n * devices, we must attempt to fix this only in the vertex shader. \\n\\\n * The approach is to clamp the z value to the far plane, which closes the \\n\\\n * shadow volume but also distorts the geometry, so there can still be artifacts\\n\\\n * on frustum seams.\\n\\\n *\\n\\\n * @name czm_depthClamp\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} coords The vertex in clip coordinates.\\n\\\n * @returns {vec4} The modified vertex.\\n\\\n *\\n\\\n * @example\\n\\\n * gl_Position = czm_depthClamp(czm_modelViewProjection * vec4(position, 1.0));\\n\\\n *\\n\\\n * @see czm_writeDepthClamp\\n\\\n */\\n\\\nvec4 czm_depthClamp(vec4 coords)\\n\\\n{\\n\\\n#ifndef LOG_DEPTH\\n\\\n#if __VERSION__ == 300 || defined(GL_EXT_frag_depth)\\n\\\n    v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w;\\n\\\n    coords.z = 0.0;\\n\\\n#else\\n\\\n    coords.z = min(coords.z, coords.w);\\n\\\n#endif\\n\\\n#endif\\n\\\n    return coords;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system \\n\\\n * to eye coordinates.  In east-north-up coordinates, x points east, y points north, and z points along the \\n\\\n * surface normal.  East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping.\\n\\\n * <br /><br />\\n\\\n * The ellipsoid is assumed to be centered at the model coordinate's origin.\\n\\\n *\\n\\\n * @name czm_eastNorthUpToEyeCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionMC The position on the ellipsoid in model coordinates.\\n\\\n * @param {vec3} normalEC The normalized ellipsoid surface normal, at <code>positionMC</code>, in eye coordinates.\\n\\\n *\\n\\\n * @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates.\\n\\\n *\\n\\\n * @example\\n\\\n * // Transform a vector defined in the east-north-up coordinate \\n\\\n * // system, (0, 0, 1) which is the surface normal, to eye \\n\\\n * // coordinates.\\n\\\n * mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\\n\\\n * vec3 normalEC = m * vec3(0.0, 0.0, 1.0);\\n\\\n */\\n\\\nmat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC)\\n\\\n{\\n\\\n    vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0));  // normalized surface tangent in model coordinates\\n\\\n    vec3 tangentEC = normalize(czm_normal3D * tangentMC);                // normalized surface tangent in eye coordinates\\n\\\n    vec3 bitangentEC = normalize(cross(normalEC, tangentEC));            // normalized surface bitangent in eye coordinates\\n\\\n\\n\\\n    return mat3(\\n\\\n        tangentEC.x,   tangentEC.y,   tangentEC.z,\\n\\\n        bitangentEC.x, bitangentEC.y, bitangentEC.z,\\n\\\n        normalEC.x,    normalEC.y,    normalEC.z);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_ellipsoidContainsPoint\\n\\\n * @glslFunction\\n\\\n *\\n\\\n */\\n\\\nbool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point)\\n\\\n{\\n\\\n    vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz;\\n\\\n    return (dot(scaled, scaled) <= 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Approximate uv coordinates based on the ellipsoid normal.\\n\\\n *\\n\\\n * @name czm_ellipsoidTextureCoordinates\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvec2 czm_ellipsoidTextureCoordinates(vec3 normal)\\n\\\n{\\n\\\n    return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compares <code>left</code> and <code>right</code> componentwise. Returns <code>true</code>\\n\\\n * if they are within <code>epsilon</code> and <code>false</code> otherwise. The inputs\\n\\\n * <code>left</code> and <code>right</code> can be <code>float</code>s, <code>vec2</code>s,\\n\\\n * <code>vec3</code>s, or <code>vec4</code>s.\\n\\\n *\\n\\\n * @name czm_equalsEpsilon\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {} left The first vector.\\n\\\n * @param {} right The second vector.\\n\\\n * @param {float} epsilon The epsilon to use for equality testing.\\n\\\n * @returns {bool} <code>true</code> if the components are within <code>epsilon</code> and <code>false</code> otherwise.\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declarations\\n\\\n * bool czm_equalsEpsilon(float left, float right, float epsilon);\\n\\\n * bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon);\\n\\\n * bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon);\\n\\\n * bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon);\\n\\\n */\\n\\\nbool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) {\\n\\\n    return all(lessThanEqual(abs(left - right), vec4(epsilon)));\\n\\\n}\\n\\\n\\n\\\nbool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) {\\n\\\n    return all(lessThanEqual(abs(left - right), vec3(epsilon)));\\n\\\n}\\n\\\n\\n\\\nbool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) {\\n\\\n    return all(lessThanEqual(abs(left - right), vec2(epsilon)));\\n\\\n}\\n\\\n\\n\\\nbool czm_equalsEpsilon(float left, float right, float epsilon) {\\n\\\n    return (abs(left - right) <= epsilon);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_eyeOffset\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} positionEC DOC_TBA.\\n\\\n * @param {vec3} eyeOffset DOC_TBA.\\n\\\n *\\n\\\n * @returns {vec4} DOC_TBA.\\n\\\n */\\n\\\nvec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset)\\n\\\n{\\n\\\n    // This equation is approximate in x and y.\\n\\\n    vec4 p = positionEC;\\n\\\n    vec4 zEyeOffset = normalize(p) * eyeOffset.z;\\n\\\n    p.xy += eyeOffset.xy + zEyeOffset.xy;\\n\\\n    p.z += zEyeOffset.z;\\n\\\n    return p;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a position from eye to window coordinates.  The transformation\\n\\\n * from eye to clip coordinates is done using {@link czm_projection}.\\n\\\n * The transform from normalized device coordinates to window coordinates is\\n\\\n * done using {@link czm_viewportTransformation}, which assumes a depth range\\n\\\n * of <code>near = 0</code> and <code>far = 1</code>.\\n\\\n * <br /><br />\\n\\\n * This transform is useful when there is a need to manipulate window coordinates\\n\\\n * in a vertex shader as done by {@link BillboardCollection}.\\n\\\n *\\n\\\n * @name czm_eyeToWindowCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} position The position in eye coordinates to transform.\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in window coordinates.\\n\\\n *\\n\\\n * @see czm_modelToWindowCoordinates\\n\\\n * @see czm_projection\\n\\\n * @see czm_viewportTransformation\\n\\\n * @see BillboardCollection\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n */\\n\\\nvec4 czm_eyeToWindowCoordinates(vec4 positionEC)\\n\\\n{\\n\\\n    vec4 q = czm_projection * positionEC;                        // clip coordinates\\n\\\n    q.xyz /= q.w;                                                // normalized device coordinates\\n\\\n    q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates\\n\\\n    return q;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Approxiamtes atan over the range [0, 1]. Safe to flip output for negative input.\\n\\\n *\\n\\\n * Based on Michal Drobot's approximation from ShaderFastLibs, which in turn is based on\\n\\\n * \\\"Efficient approximations for the arctangent function,\\\" Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.\\n\\\n * Adapted from ShaderFastLibs under MIT License.\\n\\\n *\\n\\\n * Chosen for the following characteristics over range [0, 1]:\\n\\\n * - basically no error at 0 and 1, important for getting around range limit (naive atan2 via atan requires infinite range atan)\\n\\\n * - no visible artifacts from first-derivative discontinuities, unlike latitude via range-reduced sqrt asin approximations (at equator)\\n\\\n *\\n\\\n * The original code is x * (-0.1784 * abs(x) - 0.0663 * x * x + 1.0301);\\n\\\n * Removed the abs() in here because it isn't needed, the input range is guaranteed as [0, 1] by how we're approximating atan2.\\n\\\n *\\n\\\n * @name czm_fastApproximateAtan\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} x Value between 0 and 1 inclusive.\\n\\\n *\\n\\\n * @returns {float} Approximation of atan(x)\\n\\\n */\\n\\\nfloat czm_fastApproximateAtan(float x) {\\n\\\n    return x * (-0.1784 * x - 0.0663 * x * x + 1.0301);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Approximation of atan2.\\n\\\n *\\n\\\n * Range reduction math based on nvidia's cg reference implementation for atan2: http://developer.download.nvidia.com/cg/atan2.html\\n\\\n * However, we replaced their atan curve with Michael Drobot's (see above).\\n\\\n *\\n\\\n * @name czm_fastApproximateAtan\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} x Value between -1 and 1 inclusive.\\n\\\n * @param {float} y Value between -1 and 1 inclusive.\\n\\\n *\\n\\\n * @returns {float} Approximation of atan2(x, y)\\n\\\n */\\n\\\nfloat czm_fastApproximateAtan(float x, float y) {\\n\\\n    // atan approximations are usually only reliable over [-1, 1], or, in our case, [0, 1] due to modifications.\\n\\\n    // So range-reduce using abs and by flipping whether x or y is on top.\\n\\\n    float t = abs(x); // t used as swap and atan result.\\n\\\n    float opposite = abs(y);\\n\\\n    float adjacent = max(t, opposite);\\n\\\n    opposite = min(t, opposite);\\n\\\n\\n\\\n    t = czm_fastApproximateAtan(opposite / adjacent);\\n\\\n\\n\\\n    // Undo range reduction\\n\\\n    t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t);\\n\\\n    t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t);\\n\\\n    t = czm_branchFreeTernary(y < 0.0, -t, t);\\n\\\n    return t;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Gets the color with fog at a distance from the camera.\\n\\\n *\\n\\\n * @name czm_fog\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} distanceToCamera The distance to the camera in meters.\\n\\\n * @param {vec3} color The original color.\\n\\\n * @param {vec3} fogColor The color of the fog.\\n\\\n *\\n\\\n * @returns {vec3} The color adjusted for fog at the distance from the camera.\\n\\\n */\\n\\\nvec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor)\\n\\\n{\\n\\\n    float scalar = distanceToCamera * czm_fogDensity;\\n\\\n    float fog = 1.0 - exp(-(scalar * scalar));\\n\\\n    return mix(color, fogColor, fog);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Gets the color with fog at a distance from the camera.\\n\\\n *\\n\\\n * @name czm_fog\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} distanceToCamera The distance to the camera in meters.\\n\\\n * @param {vec3} color The original color.\\n\\\n * @param {vec3} fogColor The color of the fog.\\n\\\n * @param {float} fogModifierConstant A constant to modify the appearance of fog.\\n\\\n *\\n\\\n * @returns {vec3} The color adjusted for fog at the distance from the camera.\\n\\\n */\\n\\\nvec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor, float fogModifierConstant)\\n\\\n{\\n\\\n    float scalar = distanceToCamera * czm_fogDensity;\\n\\\n    float fog = 1.0 - exp(-((fogModifierConstant * scalar + fogModifierConstant) * (scalar * (1.0 + fogModifierConstant))));\\n\\\n    return mix(color, fogColor, fog);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts a color from RGB space to linear space.\\n\\\n *\\n\\\n * @name czm_gammaCorrect\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} color The color in RGB space.\\n\\\n * @returns {vec3} The color in linear space.\\n\\\n */\\n\\\nvec3 czm_gammaCorrect(vec3 color) {\\n\\\n#ifdef HDR\\n\\\n    color = pow(color, vec3(czm_gamma));\\n\\\n#endif\\n\\\n    return color;\\n\\\n}\\n\\\n\\n\\\nvec4 czm_gammaCorrect(vec4 color) {\\n\\\n#ifdef HDR\\n\\\n    color.rgb = pow(color.rgb, vec3(czm_gamma));\\n\\\n#endif\\n\\\n    return color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_geodeticSurfaceNormal\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionOnEllipsoid DOC_TBA\\n\\\n * @param {vec3} ellipsoidCenter DOC_TBA\\n\\\n * @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA\\n\\\n * \\n\\\n * @returns {vec3} DOC_TBA.\\n\\\n */\\n\\\nvec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared)\\n\\\n{\\n\\\n    return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * An czm_material with default values. Every material's czm_getMaterial\\n\\\n * should use this default material as a base for the material it returns.\\n\\\n * The default normal value is given by materialInput.normalEC.\\n\\\n *\\n\\\n * @name czm_getDefaultMaterial\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {czm_materialInput} input The input used to construct the default material.\\n\\\n *\\n\\\n * @returns {czm_material} The default material.\\n\\\n *\\n\\\n * @see czm_materialInput\\n\\\n * @see czm_material\\n\\\n * @see czm_getMaterial\\n\\\n */\\n\\\nczm_material czm_getDefaultMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material;\\n\\\n    material.diffuse = vec3(0.0);\\n\\\n    material.specular = 0.0;\\n\\\n    material.shininess = 1.0;\\n\\\n    material.normal = materialInput.normalEC;\\n\\\n    material.emission = vec3(0.0);\\n\\\n    material.alpha = 1.0;\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Select which direction vector to use for dynamic atmosphere lighting based on an enum value\\n\\\n *\\n\\\n * @name czm_getDynamicAtmosphereLightDirection\\n\\\n * @glslfunction\\n\\\n * @see DynamicAtmosphereLightingType.js\\n\\\n *\\n\\\n * @param {vec3} positionWC the position of the vertex/fragment in world coordinates. This is normalized and returned when dynamic lighting is turned off.\\n\\\n * @param {float} lightEnum The enum value for selecting between light sources.\\n\\\n * @return {vec3} The normalized light direction vector. Depending on the enum value, it is either positionWC, czm_lightDirectionWC or czm_sunDirectionWC\\n\\\n */\\n\\\nvec3 czm_getDynamicAtmosphereLightDirection(vec3 positionWC, float lightEnum) {\\n\\\n    const float NONE = 0.0;\\n\\\n    const float SCENE_LIGHT = 1.0;\\n\\\n    const float SUNLIGHT = 2.0;\\n\\\n\\n\\\n    vec3 lightDirection =\\n\\\n        positionWC * float(lightEnum == NONE) +\\n\\\n        czm_lightDirectionWC * float(lightEnum == SCENE_LIGHT) +\\n\\\n        czm_sunDirectionWC * float(lightEnum == SUNLIGHT);\\n\\\n    return normalize(lightDirection);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Calculates the intensity of diffusely reflected light.\\n\\\n *\\n\\\n * @name czm_getLambertDiffuse\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.\\n\\\n * @param {vec3} normalEC The surface normal in eye coordinates.\\n\\\n *\\n\\\n * @returns {float} The intensity of the diffuse reflection.\\n\\\n *\\n\\\n * @see czm_phong\\n\\\n *\\n\\\n * @example\\n\\\n * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);\\n\\\n * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);\\n\\\n * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);\\n\\\n */\\n\\\nfloat czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC)\\n\\\n{\\n\\\n    return max(dot(lightDirectionEC, normalEC), 0.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Calculates the specular intensity of reflected light.\\n\\\n *\\n\\\n * @name czm_getSpecular\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.\\n\\\n * @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates.\\n\\\n * @param {vec3} normalEC The surface normal in eye coordinates.\\n\\\n * @param {float} shininess The sharpness of the specular reflection.  Higher values create a smaller, more focused specular highlight.\\n\\\n *\\n\\\n * @returns {float} The intensity of the specular highlight.\\n\\\n *\\n\\\n * @see czm_phong\\n\\\n *\\n\\\n * @example\\n\\\n * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);\\n\\\n * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);\\n\\\n * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);\\n\\\n */\\n\\\nfloat czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess)\\n\\\n{\\n\\\n    vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC);\\n\\\n    float specular = max(dot(toReflectedLight, toEyeEC), 0.0);\\n\\\n\\n\\\n    // pow has undefined behavior if both parameters <= 0.\\n\\\n    // Prevent this by making sure shininess is at least czm_epsilon2.\\n\\\n    return pow(specular, max(shininess, czm_epsilon2));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nvec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians)\\n\\\n{\\n\\\n    float cosAngle = cos(angleInRadians);\\n\\\n    float sinAngle = sin(angleInRadians);\\n\\\n\\n\\\n    // time dependent sampling directions\\n\\\n    vec2 s0 = vec2(1.0/17.0, 0.0);\\n\\\n    vec2 s1 = vec2(-1.0/29.0, 0.0);\\n\\\n    vec2 s2 = vec2(1.0/101.0, 1.0/59.0);\\n\\\n    vec2 s3 = vec2(-1.0/109.0, -1.0/57.0);\\n\\\n\\n\\\n    // rotate sampling direction by specified angle\\n\\\n    s0 = vec2((cosAngle * s0.x) - (sinAngle * s0.y), (sinAngle * s0.x) + (cosAngle * s0.y));\\n\\\n    s1 = vec2((cosAngle * s1.x) - (sinAngle * s1.y), (sinAngle * s1.x) + (cosAngle * s1.y));\\n\\\n    s2 = vec2((cosAngle * s2.x) - (sinAngle * s2.y), (sinAngle * s2.x) + (cosAngle * s2.y));\\n\\\n    s3 = vec2((cosAngle * s3.x) - (sinAngle * s3.y), (sinAngle * s3.x) + (cosAngle * s3.y));\\n\\\n\\n\\\n    vec2 uv0 = (uv/103.0) + (time * s0);\\n\\\n    vec2 uv1 = uv/107.0 + (time * s1) + vec2(0.23);\\n\\\n    vec2 uv2 = uv/vec2(897.0, 983.0) + (time * s2) + vec2(0.51);\\n\\\n    vec2 uv3 = uv/vec2(991.0, 877.0) + (time * s3) + vec2(0.71);\\n\\\n\\n\\\n    uv0 = fract(uv0);\\n\\\n    uv1 = fract(uv1);\\n\\\n    uv2 = fract(uv2);\\n\\\n    uv3 = fract(uv3);\\n\\\n    vec4 noise = (texture(normalMap, uv0)) +\\n\\\n                 (texture(normalMap, uv1)) +\\n\\\n                 (texture(normalMap, uv2)) +\\n\\\n                 (texture(normalMap, uv3));\\n\\\n\\n\\\n    // average and scale to between -1 and 1\\n\\\n    return ((noise / 4.0) - 0.5) * 2.0;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Adjusts the hue of a color.\\n\\\n * \\n\\\n * @name czm_hue\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color.\\n\\\n * @param {float} adjustment The amount to adjust the hue of the color in radians.\\n\\\n *\\n\\\n * @returns {float} The color with the hue adjusted.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi)\\n\\\n */\\n\\\nvec3 czm_hue(vec3 rgb, float adjustment)\\n\\\n{\\n\\\n    const mat3 toYIQ = mat3(0.299,     0.587,     0.114,\\n\\\n                            0.595716, -0.274453, -0.321263,\\n\\\n                            0.211456, -0.522591,  0.311135);\\n\\\n    const mat3 toRGB = mat3(1.0,  0.9563,  0.6210,\\n\\\n                            1.0, -0.2721, -0.6474,\\n\\\n                            1.0, -1.107,   1.7046);\\n\\\n    \\n\\\n    vec3 yiq = toYIQ * rgb;\\n\\\n    float hue = atan(yiq.z, yiq.y) + adjustment;\\n\\\n    float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);\\n\\\n    \\n\\\n    vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));\\n\\\n    return toRGB * color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts a color in linear space to RGB space.\\n\\\n *\\n\\\n * @name czm_inverseGamma\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} color The color in linear space.\\n\\\n * @returns {vec3} The color in RGB space.\\n\\\n */\\n\\\nvec3 czm_inverseGamma(vec3 color) {\\n\\\n    return pow(color, vec3(1.0 / czm_gamma));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Determines if a time interval is empty.\\n\\\n *\\n\\\n * @name czm_isEmpty\\n\\\n * @glslFunction \\n\\\n * \\n\\\n * @param {czm_raySegment} interval The interval to test.\\n\\\n * \\n\\\n * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.\\n\\\n *\\n\\\n * @example\\n\\\n * bool b0 = czm_isEmpty(czm_emptyRaySegment);      // true\\n\\\n * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false\\n\\\n * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.\\n\\\n */\\n\\\nbool czm_isEmpty(czm_raySegment interval)\\n\\\n{\\n\\\n    return (interval.stop < 0.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Determines if a time interval is empty.\\n\\\n *\\n\\\n * @name czm_isFull\\n\\\n * @glslFunction \\n\\\n * \\n\\\n * @param {czm_raySegment} interval The interval to test.\\n\\\n * \\n\\\n * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.\\n\\\n *\\n\\\n * @example\\n\\\n * bool b0 = czm_isEmpty(czm_emptyRaySegment);      // true\\n\\\n * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false\\n\\\n * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.\\n\\\n */\\n\\\nbool czm_isFull(czm_raySegment interval)\\n\\\n{\\n\\\n    return (interval.start == 0.0 && interval.stop == czm_infinity);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the fraction of a Web Wercator rectangle at which a given geodetic latitude is located.\\n\\\n *\\n\\\n * @name czm_latitudeToWebMercatorFraction\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} latitude The geodetic latitude, in radians.\\n\\\n * @param {float} southMercatorY The Web Mercator coordinate of the southern boundary of the rectangle.\\n\\\n * @param {float} oneOverMercatorHeight The total height of the rectangle in Web Mercator coordinates.\\n\\\n *\\n\\\n * @returns {float} The fraction of the rectangle at which the latitude occurs.  If the latitude is the southern\\n\\\n *          boundary of the rectangle, the return value will be zero.  If it is the northern boundary, the return\\n\\\n *          value will be 1.0.  Latitudes in between are mapped according to the Web Mercator projection.\\n\\\n */ \\n\\\nfloat czm_latitudeToWebMercatorFraction(float latitude, float southMercatorY, float oneOverMercatorHeight)\\n\\\n{\\n\\\n    float sinLatitude = sin(latitude);\\n\\\n    float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude));\\n\\\n    \\n\\\n    return (mercatorY - southMercatorY) * oneOverMercatorHeight;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes distance from an point in 2D to a line in 2D.\\n\\\n *\\n\\\n * @name czm_lineDistance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * param {vec2} point1 A point along the line.\\n\\\n * param {vec2} point2 A point along the line.\\n\\\n * param {vec2} point A point that may or may not be on the line.\\n\\\n * returns {float} The distance from the point to the line.\\n\\\n */\\n\\\nfloat czm_lineDistance(vec2 point1, vec2 point2, vec2 point) {\\n\\\n    return abs((point2.y - point1.y) * point.x - (point2.x - point1.x) * point.y + point2.x * point1.y - point2.y * point1.x) / distance(point2, point1);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts a linear RGB color to an sRGB color.\\n\\\n *\\n\\\n * @param {vec3|vec4} linearIn The color in linear color space.\\n\\\n * @returns {vec3|vec4} The color in sRGB color space. The vector type matches the input.\\n\\\n */\\n\\\nvec3 czm_linearToSrgb(vec3 linearIn) \\n\\\n{\\n\\\n    return pow(linearIn, vec3(1.0/2.2));\\n\\\n}\\n\\\n\\n\\\nvec4 czm_linearToSrgb(vec4 linearIn) \\n\\\n{\\n\\\n    vec3 srgbOut = pow(linearIn.rgb, vec3(1.0/2.2));\\n\\\n    return vec4(srgbOut, linearIn.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the luminance of a color. \\n\\\n *\\n\\\n * @name czm_luminance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} rgb The color.\\n\\\n * \\n\\\n * @returns {float} The luminance.\\n\\\n *\\n\\\n * @example\\n\\\n * float light = czm_luminance(vec3(0.0)); // 0.0\\n\\\n * float dark = czm_luminance(vec3(1.0));  // ~1.0 \\n\\\n */\\n\\\nfloat czm_luminance(vec3 rgb)\\n\\\n{\\n\\\n    // Algorithm from Chapter 10 of Graphics Shaders.\\n\\\n    const vec3 W = vec3(0.2125, 0.7154, 0.0721);\\n\\\n    return dot(rgb, W);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Find the maximum component of a vector.\\n\\\n *\\n\\\n * @name czm_maximumComponent\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec2|vec3|vec4} v The input vector.\\n\\\n * @returns {float} The value of the largest component.\\n\\\n */\\n\\\nfloat czm_maximumComponent(vec2 v)\\n\\\n{\\n\\\n    return max(v.x, v.y);\\n\\\n}\\n\\\nfloat czm_maximumComponent(vec3 v)\\n\\\n{\\n\\\n    return max(max(v.x, v.y), v.z);\\n\\\n}\\n\\\nfloat czm_maximumComponent(vec4 v)\\n\\\n{\\n\\\n    return max(max(max(v.x, v.y), v.z), v.w);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the size of a pixel in meters at a distance from the eye.\\n\\\n * <p>\\n\\\n * Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel.\\n\\\n * </p>\\n\\\n * @name czm_metersPerPixel\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.\\n\\\n * @param {float} pixelRatio The scaling factor from pixel space to coordinate space\\n\\\n *\\n\\\n * @returns {float} The meters per pixel at positionEC.\\n\\\n */\\n\\\nfloat czm_metersPerPixel(vec4 positionEC, float pixelRatio)\\n\\\n{\\n\\\n    float width = czm_viewport.z;\\n\\\n    float height = czm_viewport.w;\\n\\\n    float pixelWidth;\\n\\\n    float pixelHeight;\\n\\\n\\n\\\n    float top = czm_frustumPlanes.x;\\n\\\n    float bottom = czm_frustumPlanes.y;\\n\\\n    float left = czm_frustumPlanes.z;\\n\\\n    float right = czm_frustumPlanes.w;\\n\\\n\\n\\\n    if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0)\\n\\\n    {\\n\\\n        float frustumWidth = right - left;\\n\\\n        float frustumHeight = top - bottom;\\n\\\n        pixelWidth = frustumWidth / width;\\n\\\n        pixelHeight = frustumHeight / height;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        float distanceToPixel = -positionEC.z;\\n\\\n        float inverseNear = 1.0 / czm_currentFrustum.x;\\n\\\n        float tanTheta = top * inverseNear;\\n\\\n        pixelHeight = 2.0 * distanceToPixel * tanTheta / height;\\n\\\n        tanTheta = right * inverseNear;\\n\\\n        pixelWidth = 2.0 * distanceToPixel * tanTheta / width;\\n\\\n    }\\n\\\n\\n\\\n    return max(pixelWidth, pixelHeight) * pixelRatio;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes the size of a pixel in meters at a distance from the eye.\\n\\\n * <p>\\n\\\n * Use this version when scaling by pixel ratio.\\n\\\n * </p>\\n\\\n * @name czm_metersPerPixel\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.\\n\\\n *\\n\\\n * @returns {float} The meters per pixel at positionEC.\\n\\\n */\\n\\\nfloat czm_metersPerPixel(vec4 positionEC)\\n\\\n{\\n\\\n    return czm_metersPerPixel(positionEC, czm_pixelRatio);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a position from model to window coordinates.  The transformation\\n\\\n * from model to clip coordinates is done using {@link czm_modelViewProjection}.\\n\\\n * The transform from normalized device coordinates to window coordinates is\\n\\\n * done using {@link czm_viewportTransformation}, which assumes a depth range\\n\\\n * of <code>near = 0</code> and <code>far = 1</code>.\\n\\\n * <br /><br />\\n\\\n * This transform is useful when there is a need to manipulate window coordinates\\n\\\n * in a vertex shader as done by {@link BillboardCollection}.\\n\\\n * <br /><br />\\n\\\n * This function should not be confused with {@link czm_viewportOrthographic},\\n\\\n * which is an orthographic projection matrix that transforms from window \\n\\\n * coordinates to clip coordinates.\\n\\\n *\\n\\\n * @name czm_modelToWindowCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} position The position in model coordinates to transform.\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in window coordinates.\\n\\\n *\\n\\\n * @see czm_eyeToWindowCoordinates\\n\\\n * @see czm_modelViewProjection\\n\\\n * @see czm_viewportTransformation\\n\\\n * @see czm_viewportOrthographic\\n\\\n * @see BillboardCollection\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 positionWC = czm_modelToWindowCoordinates(positionMC);\\n\\\n */\\n\\\nvec4 czm_modelToWindowCoordinates(vec4 position)\\n\\\n{\\n\\\n    vec4 positionEC = czm_modelView * position;\\n\\\n    vec4 q = czm_projection * positionEC;\\n\\\n    q.xyz /= q.w;                                                // normalized device coordinates\\n\\\n    q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates\\n\\\n    return q;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_multiplyWithColorBalance\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvec3 czm_multiplyWithColorBalance(vec3 left, vec3 right)\\n\\\n{\\n\\\n    // Algorithm from Chapter 10 of Graphics Shaders.\\n\\\n    const vec3 W = vec3(0.2125, 0.7154, 0.0721);\\n\\\n    \\n\\\n    vec3 target = left * right;\\n\\\n    float leftLuminance = dot(left, W);\\n\\\n    float rightLuminance = dot(right, W);\\n\\\n    float targetLuminance = dot(target, W);\\n\\\n    \\n\\\n    return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes a value that scales with distance.  The scaling is clamped at the near and\\n\\\n * far distances, and does not extrapolate.  This function works with the\\n\\\n * {@link NearFarScalar} JavaScript class.\\n\\\n *\\n\\\n * @name czm_nearFarScalar\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} nearFarScalar A vector with 4 components: Near distance (x), Near value (y), Far distance (z), Far value (w).\\n\\\n * @param {float} cameraDistSq The square of the current distance from the camera.\\n\\\n *\\n\\\n * @returns {float} The value at this distance.\\n\\\n */\\n\\\nfloat czm_nearFarScalar(vec4 nearFarScalar, float cameraDistSq)\\n\\\n{\\n\\\n    float valueAtMin = nearFarScalar.y;\\n\\\n    float valueAtMax = nearFarScalar.w;\\n\\\n    float nearDistanceSq = nearFarScalar.x * nearFarScalar.x;\\n\\\n    float farDistanceSq = nearFarScalar.z * nearFarScalar.z;\\n\\\n\\n\\\n    float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);\\n\\\n\\n\\\n    t = pow(clamp(t, 0.0, 1.0), 0.2);\\n\\\n\\n\\\n    return mix(valueAtMin, valueAtMax, t);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \" /**\\n\\\n  * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.\\n\\\n  * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n  * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n  *\\n\\\n  * @name czm_octDecode\\n\\\n  * @param {vec2} encoded The oct-encoded, unit-length vector\\n\\\n  * @param {float} range The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\\n\\\n  * @returns {vec3} The decoded and normalized vector\\n\\\n  */\\n\\\n  vec3 czm_octDecode(vec2 encoded, float range)\\n\\\n  {\\n\\\n      if (encoded.x == 0.0 && encoded.y == 0.0) {\\n\\\n          return vec3(0.0, 0.0, 0.0);\\n\\\n      }\\n\\\n\\n\\\n     encoded = encoded / range * 2.0 - 1.0;\\n\\\n     vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y));\\n\\\n     if (v.z < 0.0)\\n\\\n     {\\n\\\n         v.xy = (1.0 - abs(v.yx)) * czm_signNotZero(v.xy);\\n\\\n     }\\n\\\n\\n\\\n     return normalize(v);\\n\\\n  }\\n\\\n\\n\\\n/**\\n\\\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.\\n\\\n * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n *\\n\\\n * @name czm_octDecode\\n\\\n * @param {vec2} encoded The oct-encoded, unit-length vector\\n\\\n * @returns {vec3} The decoded and normalized vector\\n\\\n */\\n\\\n vec3 czm_octDecode(vec2 encoded)\\n\\\n {\\n\\\n    return czm_octDecode(encoded, 255.0);\\n\\\n }\\n\\\n\\n\\\n /**\\n\\\n * Decodes a unit-length vector in 'oct' encoding packed into a floating-point number to a normalized 3-component Cartesian vector.\\n\\\n * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n *\\n\\\n * @name czm_octDecode\\n\\\n * @param {float} encoded The oct-encoded, unit-length vector\\n\\\n * @returns {vec3} The decoded and normalized vector\\n\\\n */\\n\\\n vec3 czm_octDecode(float encoded)\\n\\\n {\\n\\\n    float temp = encoded / 256.0;\\n\\\n    float x = floor(temp);\\n\\\n    float y = (temp - x) * 256.0;\\n\\\n    return czm_octDecode(vec2(x, y));\\n\\\n }\\n\\\n\\n\\\n/**\\n\\\n * Decodes three unit-length vectors in 'oct' encoding packed into two floating-point numbers to normalized 3-component Cartesian vectors.\\n\\\n * The 'oct' encoding is described in \\\"A Survey of Efficient Representations of Independent Unit Vectors\\\",\\n\\\n * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/\\n\\\n *\\n\\\n * @name czm_octDecode\\n\\\n * @param {vec2} encoded The packed oct-encoded, unit-length vectors.\\n\\\n * @param {vec3} vector1 One decoded and normalized vector.\\n\\\n * @param {vec3} vector2 One decoded and normalized vector.\\n\\\n * @param {vec3} vector3 One decoded and normalized vector.\\n\\\n */\\n\\\n  void czm_octDecode(vec2 encoded, out vec3 vector1, out vec3 vector2, out vec3 vector3)\\n\\\n {\\n\\\n    float temp = encoded.x / 65536.0;\\n\\\n    float x = floor(temp);\\n\\\n    float encodedFloat1 = (temp - x) * 65536.0;\\n\\\n\\n\\\n    temp = encoded.y / 65536.0;\\n\\\n    float y = floor(temp);\\n\\\n    float encodedFloat2 = (temp - y) * 65536.0;\\n\\\n\\n\\\n    vector1 = czm_octDecode(encodedFloat1);\\n\\\n    vector2 = czm_octDecode(encodedFloat2);\\n\\\n    vector3 = czm_octDecode(vec2(x, y));\\n\\\n }\\n\\\n\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Packs a depth value into a vec4 that can be represented by unsigned bytes.\\n\\\n *\\n\\\n * @name czm_packDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} depth The floating-point depth.\\n\\\n * @returns {vec4} The packed depth.\\n\\\n */\\n\\\nvec4 czm_packDepth(float depth)\\n\\\n{\\n\\\n    // See Aras Pranckevičius' post Encoding Floats to RGBA\\n\\\n    // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/\\n\\\n    vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;\\n\\\n    enc = fract(enc);\\n\\\n    enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\\n\\\n    return enc;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"vec3 lambertianDiffuse(vec3 diffuseColor)\\n\\\n{\\n\\\n    return diffuseColor / czm_pi;\\n\\\n}\\n\\\n\\n\\\nvec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH)\\n\\\n{\\n\\\n    float versine = 1.0 - VdotH;\\n\\\n    // pow(versine, 5.0) is slow. See https://stackoverflow.com/a/68793086/10082269\\n\\\n    float versineSquared = versine * versine;\\n\\\n    return f0 + (f90 - f0) * versineSquared * versineSquared * versine;\\n\\\n}\\n\\\n\\n\\\n#ifdef USE_ANISOTROPY\\n\\\n/**\\n\\\n * @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent)\\n\\\n * @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent)\\n\\\n * @param {vec3} lightDirection The direction from the fragment to the light source, transformed to tangent-bitangent-normal coordinates\\n\\\n * @param {vec3} viewDirection The direction from the fragment to the camera, transformed to tangent-bitangent-normal coordinates\\n\\\n */\\n\\\nfloat smithVisibilityGGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 lightDirection, vec3 viewDirection)\\n\\\n{\\n\\\n    vec3 roughnessScale = vec3(tangentialRoughness, bitangentRoughness, 1.0);\\n\\\n    float GGXV = lightDirection.z * length(roughnessScale * viewDirection);\\n\\\n    float GGXL = viewDirection.z * length(roughnessScale * lightDirection);\\n\\\n    float v = 0.5 / (GGXV + GGXL);\\n\\\n    return clamp(v, 0.0, 1.0);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent)\\n\\\n * @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent)\\n\\\n * @param {vec3} halfwayDirection The unit vector halfway between light and view directions, transformed to tangent-bitangent-normal coordinates\\n\\\n */\\n\\\nfloat GGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 halfwayDirection)\\n\\\n{\\n\\\n    float roughnessSquared = bitangentRoughness * tangentialRoughness;\\n\\\n    vec3 f = halfwayDirection * vec3(bitangentRoughness, tangentialRoughness, roughnessSquared);\\n\\\n    float w2 = roughnessSquared / dot(f, f);\\n\\\n    return roughnessSquared * w2 * w2 / czm_pi;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n/**\\n\\\n * Estimate the geometric self-shadowing of the microfacets in a surface,\\n\\\n * using the Smith Joint GGX visibility function.\\n\\\n * Note: Vis = G / (4 * NdotL * NdotV)\\n\\\n * see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3\\n\\\n * see Real-Time Rendering. Page 331 to 336.\\n\\\n * see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg)\\n\\\n *\\n\\\n * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.\\n\\\n * @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source.\\n\\\n * @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera.\\n\\\n */\\n\\\nfloat smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV)\\n\\\n{\\n\\\n    float alphaRoughnessSq = alphaRoughness * alphaRoughness;\\n\\\n\\n\\\n    float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);\\n\\\n    float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq);\\n\\\n\\n\\\n    float GGX = GGXV + GGXL;\\n\\\n    if (GGX > 0.0)\\n\\\n    {\\n\\\n        return 0.5 / GGX;\\n\\\n    }\\n\\\n    return 0.0;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Estimate the fraction of the microfacets in a surface that are aligned with \\n\\\n * the halfway vector, which is aligned halfway between the directions from\\n\\\n * the fragment to the camera and from the fragment to the light source.\\n\\\n *\\n\\\n * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.\\n\\\n * @param {float} NdotH The cosine of the angle between the surface normal and the halfway vector.\\n\\\n * @return {float} The fraction of microfacets aligned to the halfway vector.\\n\\\n */\\n\\\nfloat GGX(float alphaRoughness, float NdotH)\\n\\\n{\\n\\\n    float alphaRoughnessSquared = alphaRoughness * alphaRoughness;\\n\\\n    float f = (NdotH * alphaRoughnessSquared - NdotH) * NdotH + 1.0;\\n\\\n    return alphaRoughnessSquared / (czm_pi * f * f);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Compute the strength of the specular reflection due to direct lighting.\\n\\\n *\\n\\\n * @param {vec3} normal The surface normal.\\n\\\n * @param {vec3} lightDirection The unit vector pointing from the fragment to the light source.\\n\\\n * @param {vec3} viewDirection The unit vector pointing from the fragment to the camera.\\n\\\n * @param {vec3} halfwayDirection The unit vector pointing from the fragment to halfway between the light source and the camera.\\n\\\n * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness.\\n\\\n * @return {float} The strength of the specular reflection.\\n\\\n */\\n\\\nfloat computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness)\\n\\\n{\\n\\\n    float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0);\\n\\\n    float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);\\n\\\n    float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);\\n\\\n    float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0);\\n\\\n    float D = GGX(alphaRoughness, NdotH);\\n\\\n    return G * D;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Compute the diffuse and specular contributions using physically based\\n\\\n * rendering. This function only handles direct lighting.\\n\\\n * <p>\\n\\\n * This function only handles the lighting calculations. Metallic/roughness\\n\\\n * and specular/glossy must be handled separately. See {@MaterialStageFS}\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_pbrLighting\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position\\n\\\n * @param {vec3} normalEC The surface normal in eye coordinates\\n\\\n * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.\\n\\\n * @param {czm_modelMaterial} The material properties.\\n\\\n * @return {vec3} The computed HDR color\\n\\\n */\\n\\\nvec3 czm_pbrLighting(vec3 viewDirectionEC, vec3 normalEC, vec3 lightDirectionEC, czm_modelMaterial material)\\n\\\n{\\n\\\n    vec3 halfwayDirectionEC = normalize(viewDirectionEC + lightDirectionEC);\\n\\\n    float VdotH = clamp(dot(viewDirectionEC, halfwayDirectionEC), 0.0, 1.0);\\n\\\n    float NdotL = clamp(dot(normalEC, lightDirectionEC), 0.001, 1.0);\\n\\\n\\n\\\n    vec3 f0 = material.specular;\\n\\\n    float reflectance = czm_maximumComponent(f0);\\n\\\n    // Typical dielectrics will have reflectance 0.04, so f90 will be 1.0.\\n\\\n    // In this case, at grazing angle, all incident energy is reflected.\\n\\\n    vec3 f90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0));\\n\\\n    vec3 F = fresnelSchlick2(f0, f90, VdotH);\\n\\\n\\n\\\n    #if defined(USE_SPECULAR)\\n\\\n        F *= material.specularWeight;\\n\\\n    #endif\\n\\\n\\n\\\n    float alphaRoughness = material.roughness * material.roughness;\\n\\\n    #ifdef USE_ANISOTROPY\\n\\\n        mat3 tbn = mat3(material.anisotropicT, material.anisotropicB, normalEC);\\n\\\n        vec3 lightDirection = lightDirectionEC * tbn;\\n\\\n        vec3 viewDirection = viewDirectionEC * tbn;\\n\\\n        vec3 halfwayDirection = halfwayDirectionEC * tbn;\\n\\\n        float anisotropyStrength = material.anisotropyStrength;\\n\\\n        float tangentialRoughness = mix(alphaRoughness, 1.0, anisotropyStrength * anisotropyStrength);\\n\\\n        float bitangentRoughness = clamp(alphaRoughness, 0.001, 1.0);\\n\\\n        float G = smithVisibilityGGX_anisotropic(bitangentRoughness, tangentialRoughness, lightDirection, viewDirection);\\n\\\n        float D = GGX_anisotropic(bitangentRoughness, tangentialRoughness, halfwayDirection);\\n\\\n        vec3 specularContribution = F * G * D;\\n\\\n    #else\\n\\\n        float specularStrength = computeDirectSpecularStrength(normalEC, lightDirectionEC, viewDirectionEC, halfwayDirectionEC, alphaRoughness);\\n\\\n        vec3 specularContribution = F * specularStrength;\\n\\\n    #endif\\n\\\n\\n\\\n    vec3 diffuseColor = material.diffuse;\\n\\\n    // F here represents the specular contribution\\n\\\n    vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor);\\n\\\n\\n\\\n    // Lo = (diffuse + specular) * Li * NdotL\\n\\\n    return (diffuseContribution + specularContribution) * NdotL;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral\\n\\\n\\n\\\n// Input color is non-negative and resides in the Linear Rec. 709 color space.\\n\\\n// Output color is also Linear Rec. 709, but in the [0, 1] range.\\n\\\n\\n\\\nvec3 czm_pbrNeutralTonemapping(vec3 color) {\\n\\\n    const float startCompression = 0.8 - 0.04;\\n\\\n    const float desaturation = 0.15;\\n\\\n\\n\\\n    float x = min(color.r, min(color.g, color.b));\\n\\\n    float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04);\\n\\\n    color -= offset;\\n\\\n\\n\\\n    float peak = max(color.r, max(color.g, color.b));\\n\\\n    if (peak < startCompression) return color;\\n\\\n\\n\\\n    const float d = 1.0 - startCompression;\\n\\\n    float newPeak = 1.0 - d * d / (peak + d - startCompression);\\n\\\n    color *= newPeak / peak;\\n\\\n\\n\\\n    float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\\n\\\n    return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float czm_private_getLambertDiffuseOfMaterial(vec3 lightDirectionEC, czm_material material)\\n\\\n{\\n\\\n    return czm_getLambertDiffuse(lightDirectionEC, material.normal);\\n\\\n}\\n\\\n\\n\\\nfloat czm_private_getSpecularOfMaterial(vec3 lightDirectionEC, vec3 toEyeEC, czm_material material)\\n\\\n{\\n\\\n    return czm_getSpecular(lightDirectionEC, toEyeEC, material.normal, material.shininess);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes a color using the Phong lighting model.\\n\\\n *\\n\\\n * @name czm_phong\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates.\\n\\\n * @param {czm_material} material The fragment's material.\\n\\\n *\\n\\\n * @returns {vec4} The computed color.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 positionToEyeEC = // ...\\n\\\n * czm_material material = // ...\\n\\\n * vec3 lightDirectionEC = // ...\\n\\\n * out_FragColor = czm_phong(normalize(positionToEyeEC), material, lightDirectionEC);\\n\\\n *\\n\\\n * @see czm_getMaterial\\n\\\n */\\n\\\nvec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\\n\\\n{\\n\\\n    // Diffuse from directional light sources at eye (for top-down)\\n\\\n    float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material);\\n\\\n    if (czm_sceneMode == czm_sceneMode3D) {\\n\\\n        // (and horizon views in 3D)\\n\\\n        diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material);\\n\\\n    }\\n\\\n\\n\\\n    float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);\\n\\\n\\n\\\n    // Temporary workaround for adding ambient.\\n\\\n    vec3 materialDiffuse = material.diffuse * 0.5;\\n\\\n\\n\\\n    vec3 ambient = materialDiffuse;\\n\\\n    vec3 color = ambient + material.emission;\\n\\\n    color += materialDiffuse * diffuse * czm_lightColor;\\n\\\n    color += material.specular * specular * czm_lightColor;\\n\\\n\\n\\\n    return vec4(color, material.alpha);\\n\\\n}\\n\\\n\\n\\\nvec4 czm_private_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\\n\\\n{\\n\\\n    float diffuse = czm_private_getLambertDiffuseOfMaterial(lightDirectionEC, material);\\n\\\n    float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);\\n\\\n\\n\\\n    vec3 ambient = vec3(0.0);\\n\\\n    vec3 color = ambient + material.emission;\\n\\\n    color += material.diffuse * diffuse * czm_lightColor;\\n\\\n    color += material.specular * specular * czm_lightColor;\\n\\\n\\n\\\n    return vec4(color, material.alpha);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes distance from a point to a plane.\\n\\\n *\\n\\\n * @name czm_planeDistance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * param {vec4} plane A Plane in Hessian Normal Form. See Plane.js\\n\\\n * param {vec3} point A point in the same space as the plane.\\n\\\n * returns {float} The distance from the point to the plane.\\n\\\n */\\n\\\nfloat czm_planeDistance(vec4 plane, vec3 point) {\\n\\\n    return (dot(plane.xyz, point) + plane.w);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes distance from a point to a plane.\\n\\\n *\\n\\\n * @name czm_planeDistance\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * param {vec3} planeNormal Normal for a plane in Hessian Normal Form. See Plane.js\\n\\\n * param {float} planeDistance Distance for a plane in Hessian Normal form. See Plane.js\\n\\\n * param {vec3} point A point in the same space as the plane.\\n\\\n * returns {float} The distance from the point to the plane.\\n\\\n */\\n\\\nfloat czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) {\\n\\\n    return (dot(planeNormal, point) + planeDistance);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes the point along a ray at the given time.  <code>time</code> can be positive, negative, or zero.\\n\\\n *\\n\\\n * @name czm_pointAlongRay\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {czm_ray} ray The ray to compute the point along.\\n\\\n * @param {float} time The time along the ray.\\n\\\n * \\n\\\n * @returns {vec3} The point along the ray at the given time.\\n\\\n * \\n\\\n * @example\\n\\\n * czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction\\n\\\n * vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0)\\n\\\n */\\n\\\nvec3 czm_pointAlongRay(czm_ray ray, float time)\\n\\\n{\\n\\\n    return ray.origin + (time * ray.direction);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_rayEllipsoidIntersectionInterval\\n\\\n * @glslFunction\\n\\\n */\\n\\\nczm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii)\\n\\\n{\\n\\\n   // ray and ellipsoid center in eye coordinates.  radii in model coordinates.\\n\\\n    vec3 q = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;\\n\\\n    vec3 w = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;\\n\\\n\\n\\\n    q = q - ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ellipsoid_center, 1.0)).xyz;\\n\\\n\\n\\\n    float q2 = dot(q, q);\\n\\\n    float qw = dot(q, w);\\n\\\n\\n\\\n    if (q2 > 1.0) // Outside ellipsoid.\\n\\\n    {\\n\\\n        if (qw >= 0.0) // Looking outward or tangent (0 intersections).\\n\\\n        {\\n\\\n            return czm_emptyRaySegment;\\n\\\n        }\\n\\\n        else // qw < 0.0.\\n\\\n        {\\n\\\n            float qw2 = qw * qw;\\n\\\n            float difference = q2 - 1.0; // Positively valued.\\n\\\n            float w2 = dot(w, w);\\n\\\n            float product = w2 * difference;\\n\\\n\\n\\\n            if (qw2 < product) // Imaginary roots (0 intersections).\\n\\\n            {\\n\\\n                return czm_emptyRaySegment;\\n\\\n            }\\n\\\n            else if (qw2 > product) // Distinct roots (2 intersections).\\n\\\n            {\\n\\\n                float discriminant = qw * qw - product;\\n\\\n                float temp = -qw + sqrt(discriminant); // Avoid cancellation.\\n\\\n                float root0 = temp / w2;\\n\\\n                float root1 = difference / temp;\\n\\\n                if (root0 < root1)\\n\\\n                {\\n\\\n                    czm_raySegment i = czm_raySegment(root0, root1);\\n\\\n                    return i;\\n\\\n                }\\n\\\n                else\\n\\\n                {\\n\\\n                    czm_raySegment i = czm_raySegment(root1, root0);\\n\\\n                    return i;\\n\\\n                }\\n\\\n            }\\n\\\n            else // qw2 == product.  Repeated roots (2 intersections).\\n\\\n            {\\n\\\n                float root = sqrt(difference / w2);\\n\\\n                czm_raySegment i = czm_raySegment(root, root);\\n\\\n                return i;\\n\\\n            }\\n\\\n        }\\n\\\n    }\\n\\\n    else if (q2 < 1.0) // Inside ellipsoid (2 intersections).\\n\\\n    {\\n\\\n        float difference = q2 - 1.0; // Negatively valued.\\n\\\n        float w2 = dot(w, w);\\n\\\n        float product = w2 * difference; // Negatively valued.\\n\\\n        float discriminant = qw * qw - product;\\n\\\n        float temp = -qw + sqrt(discriminant); // Positively valued.\\n\\\n        czm_raySegment i = czm_raySegment(0.0, temp / w2);\\n\\\n        return i;\\n\\\n    }\\n\\\n    else // q2 == 1.0. On ellipsoid.\\n\\\n    {\\n\\\n        if (qw < 0.0) // Looking inward.\\n\\\n        {\\n\\\n            float w2 = dot(w, w);\\n\\\n            czm_raySegment i = czm_raySegment(0.0, -qw / w2);\\n\\\n            return i;\\n\\\n        }\\n\\\n        else // qw >= 0.0.  Looking outward or tangent.\\n\\\n        {\\n\\\n            return czm_emptyRaySegment;\\n\\\n        }\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compute the intersection interval of a ray with a sphere.\\n\\\n *\\n\\\n * @name czm_raySphereIntersectionInterval\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {czm_ray} ray The ray.\\n\\\n * @param {vec3} center The center of the sphere.\\n\\\n * @param {float} radius The radius of the sphere.\\n\\\n * @return {czm_raySegment} The intersection interval of the ray with the sphere.\\n\\\n */\\n\\\nczm_raySegment czm_raySphereIntersectionInterval(czm_ray ray, vec3 center, float radius)\\n\\\n{\\n\\\n    vec3 o = ray.origin;\\n\\\n    vec3 d = ray.direction;\\n\\\n\\n\\\n    vec3 oc = o - center;\\n\\\n\\n\\\n    float a = dot(d, d);\\n\\\n    float b = 2.0 * dot(d, oc);\\n\\\n    float c = dot(oc, oc) - (radius * radius);\\n\\\n\\n\\\n    float det = (b * b) - (4.0 * a * c);\\n\\\n\\n\\\n    if (det < 0.0) {\\n\\\n        return czm_emptyRaySegment;\\n\\\n    }\\n\\\n\\n\\\n    float sqrtDet = sqrt(det);\\n\\\n\\n\\\n    float t0 = (-b - sqrtDet) / (2.0 * a);\\n\\\n    float t1 = (-b + sqrtDet) / (2.0 * a);\\n\\\n\\n\\\n    czm_raySegment result = czm_raySegment(t0, t1);\\n\\\n    return result;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float czm_readDepth(sampler2D depthTexture, vec2 texCoords)\\n\\\n{\\n\\\n    return czm_reverseLogDepth(texture(depthTexture, texCoords).r);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Reads a value previously transformed with {@link czm_writeNonPerspective}\\n\\\n * by dividing it by `w`, the value used in the perspective divide.\\n\\\n * This function is intended to be called in a fragment shader to access a\\n\\\n * `varying` that should not be subject to perspective interpolation.\\n\\\n * For example, screen-space texture coordinates. The value should have been\\n\\\n * previously written in the vertex shader with a call to\\n\\\n * {@link czm_writeNonPerspective}.\\n\\\n *\\n\\\n * @name czm_readNonPerspective\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float|vec2|vec3|vec4} value The non-perspective value to be read.\\n\\\n * @param {float} oneOverW One over the perspective divide value, `w`. Usually this is simply `gl_FragCoord.w`.\\n\\\n * @returns {float|vec2|vec3|vec4} The usable value.\\n\\\n */\\n\\\nfloat czm_readNonPerspective(float value, float oneOverW) {\\n\\\n    return value * oneOverW;\\n\\\n}\\n\\\n\\n\\\nvec2 czm_readNonPerspective(vec2 value, float oneOverW) {\\n\\\n    return value * oneOverW;\\n\\\n}\\n\\\n\\n\\\nvec3 czm_readNonPerspective(vec3 value, float oneOverW) {\\n\\\n    return value * oneOverW;\\n\\\n}\\n\\\n\\n\\\nvec4 czm_readNonPerspective(vec4 value, float oneOverW) {\\n\\\n    return value * oneOverW;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float czm_reverseLogDepth(float logZ)\\n\\\n{\\n\\\n#ifdef LOG_DEPTH\\n\\\n    float near = czm_currentFrustum.x;\\n\\\n    float far = czm_currentFrustum.y;\\n\\\n    float log2Depth = logZ * czm_log2FarDepthFromNearPlusOne;\\n\\\n    float depthFromNear = exp2(log2Depth) - 1.0;\\n\\\n    return far * (1.0 - near / (depthFromNear + near)) / (far - near);\\n\\\n#endif\\n\\\n    return logZ;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Round a floating point value. This function exists because round() doesn't\\n\\\n * exist in GLSL 1.00. \\n\\\n *\\n\\\n * @param {float|vec2|vec3|vec4} value The value to round\\n\\\n * @param {float|vec2|vec3|vec3} The rounded value. The type matches the input.\\n\\\n */\\n\\\nfloat czm_round(float value) {\\n\\\n  return floor(value + 0.5);\\n\\\n}\\n\\\n\\n\\\nvec2 czm_round(vec2 value) {\\n\\\n  return floor(value + 0.5);\\n\\\n}\\n\\\n\\n\\\nvec3 czm_round(vec3 value) {\\n\\\n  return floor(value + 0.5);\\n\\\n}\\n\\\n\\n\\\nvec4 czm_round(vec4 value) {\\n\\\n  return floor(value + 0.5);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Adjusts the saturation of a color.\\n\\\n * \\n\\\n * @name czm_saturation\\n\\\n * @glslFunction\\n\\\n * \\n\\\n * @param {vec3} rgb The color.\\n\\\n * @param {float} adjustment The amount to adjust the saturation of the color.\\n\\\n *\\n\\\n * @returns {float} The color with the saturation adjusted.\\n\\\n *\\n\\\n * @example\\n\\\n * vec3 greyScale = czm_saturation(color, 0.0);\\n\\\n * vec3 doubleSaturation = czm_saturation(color, 2.0);\\n\\\n */\\n\\\nvec3 czm_saturation(vec3 rgb, float adjustment)\\n\\\n{\\n\\\n    // Algorithm from Chapter 16 of OpenGL Shading Language\\n\\\n    const vec3 W = vec3(0.2125, 0.7154, 0.0721);\\n\\\n    vec3 intensity = vec3(dot(rgb, W));\\n\\\n    return mix(intensity, rgb, adjustment);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nfloat czm_sampleShadowMap(highp samplerCube shadowMap, vec3 d)\\n\\\n{\\n\\\n    return czm_unpackDepth(czm_textureCube(shadowMap, d));\\n\\\n}\\n\\\n\\n\\\nfloat czm_sampleShadowMap(highp sampler2D shadowMap, vec2 uv)\\n\\\n{\\n\\\n#ifdef USE_SHADOW_DEPTH_TEXTURE\\n\\\n    return texture(shadowMap, uv).r;\\n\\\n#else\\n\\\n    return czm_unpackDepth(texture(shadowMap, uv));\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\nfloat czm_shadowDepthCompare(samplerCube shadowMap, vec3 uv, float depth)\\n\\\n{\\n\\\n    return step(depth, czm_sampleShadowMap(shadowMap, uv));\\n\\\n}\\n\\\n\\n\\\nfloat czm_shadowDepthCompare(sampler2D shadowMap, vec2 uv, float depth)\\n\\\n{\\n\\\n    return step(depth, czm_sampleShadowMap(shadowMap, uv));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nfloat czm_private_shadowVisibility(float visibility, float nDotL, float normalShadingSmooth, float darkness)\\n\\\n{\\n\\\n#ifdef USE_NORMAL_SHADING\\n\\\n#ifdef USE_NORMAL_SHADING_SMOOTH\\n\\\n    float strength = clamp(nDotL / normalShadingSmooth, 0.0, 1.0);\\n\\\n#else\\n\\\n    float strength = step(0.0, nDotL);\\n\\\n#endif\\n\\\n    visibility *= strength;\\n\\\n#endif\\n\\\n\\n\\\n    visibility = max(visibility, darkness);\\n\\\n    return visibility;\\n\\\n}\\n\\\n\\n\\\n#ifdef USE_CUBE_MAP_SHADOW\\n\\\nfloat czm_shadowVisibility(samplerCube shadowMap, czm_shadowParameters shadowParameters)\\n\\\n{\\n\\\n    float depthBias = shadowParameters.depthBias;\\n\\\n    float depth = shadowParameters.depth;\\n\\\n    float nDotL = shadowParameters.nDotL;\\n\\\n    float normalShadingSmooth = shadowParameters.normalShadingSmooth;\\n\\\n    float darkness = shadowParameters.darkness;\\n\\\n    vec3 uvw = shadowParameters.texCoords;\\n\\\n\\n\\\n    depth -= depthBias;\\n\\\n    float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth);\\n\\\n    return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\\n\\\n}\\n\\\n#else\\n\\\nfloat czm_shadowVisibility(sampler2D shadowMap, czm_shadowParameters shadowParameters)\\n\\\n{\\n\\\n    float depthBias = shadowParameters.depthBias;\\n\\\n    float depth = shadowParameters.depth;\\n\\\n    float nDotL = shadowParameters.nDotL;\\n\\\n    float normalShadingSmooth = shadowParameters.normalShadingSmooth;\\n\\\n    float darkness = shadowParameters.darkness;\\n\\\n    vec2 uv = shadowParameters.texCoords;\\n\\\n\\n\\\n    depth -= depthBias;\\n\\\n#ifdef USE_SOFT_SHADOWS\\n\\\n    vec2 texelStepSize = shadowParameters.texelStepSize;\\n\\\n    float radius = 1.0;\\n\\\n    float dx0 = -texelStepSize.x * radius;\\n\\\n    float dy0 = -texelStepSize.y * radius;\\n\\\n    float dx1 = texelStepSize.x * radius;\\n\\\n    float dy1 = texelStepSize.y * radius;\\n\\\n    float visibility = (\\n\\\n        czm_shadowDepthCompare(shadowMap, uv, depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy0), depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy0), depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy0), depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, 0.0), depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, 0.0), depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy1), depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy1), depth) +\\n\\\n        czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy1), depth)\\n\\\n    ) * (1.0 / 9.0);\\n\\\n#else\\n\\\n    float visibility = czm_shadowDepthCompare(shadowMap, uv, depth);\\n\\\n#endif\\n\\\n\\n\\\n    return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);\\n\\\n}\\n\\\n#endif\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative.  This is similar to the GLSL\\n\\\n * built-in function <code>sign</code> except that returns 1.0 instead of 0.0 when the input value is 0.0.\\n\\\n * \\n\\\n * @name czm_signNotZero\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {} value The value for which to determine the sign.\\n\\\n * @returns {} 1.0 if the value is positive or zero, -1.0 if the value is negative.\\n\\\n */\\n\\\nfloat czm_signNotZero(float value)\\n\\\n{\\n\\\n    return value >= 0.0 ? 1.0 : -1.0;\\n\\\n}\\n\\\n\\n\\\nvec2 czm_signNotZero(vec2 value)\\n\\\n{\\n\\\n    return vec2(czm_signNotZero(value.x), czm_signNotZero(value.y));\\n\\\n}\\n\\\n\\n\\\nvec3 czm_signNotZero(vec3 value)\\n\\\n{\\n\\\n    return vec3(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z));\\n\\\n}\\n\\\n\\n\\\nvec4 czm_signNotZero(vec4 value)\\n\\\n{\\n\\\n    return vec4(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z), czm_signNotZero(value.w));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Computes a color from the third order spherical harmonic coefficients and a normalized direction vector.\\n\\\n * <p>\\n\\\n * The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22].\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_sphericalHarmonics\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} normal The normalized direction.\\n\\\n * @param {vec3[9]} coefficients The third order spherical harmonic coefficients.\\n\\\n * @returns {vec3} The color at the direction.\\n\\\n *\\n\\\n * @see https://graphics.stanford.edu/papers/envmap/envmap.pdf\\n\\\n */\\n\\\nvec3 czm_sphericalHarmonics(vec3 normal, vec3 coefficients[9])\\n\\\n{\\n\\\n    vec3 L00 = coefficients[0];\\n\\\n    vec3 L1_1 = coefficients[1];\\n\\\n    vec3 L10 = coefficients[2];\\n\\\n    vec3 L11 = coefficients[3];\\n\\\n    vec3 L2_2 = coefficients[4];\\n\\\n    vec3 L2_1 = coefficients[5];\\n\\\n    vec3 L20 = coefficients[6];\\n\\\n    vec3 L21 = coefficients[7];\\n\\\n    vec3 L22 = coefficients[8];\\n\\\n\\n\\\n    float x = normal.x;\\n\\\n    float y = normal.y;\\n\\\n    float z = normal.z;\\n\\\n\\n\\\n    vec3 L =\\n\\\n          L00\\n\\\n        + L1_1 * y\\n\\\n        + L10 * z\\n\\\n        + L11 * x\\n\\\n        + L2_2 * (y * x)\\n\\\n        + L2_1 * (y * z)\\n\\\n        + L20 * (3.0 * z * z - 1.0)\\n\\\n        + L21 * (z * x)\\n\\\n        + L22 * (x * x - y * y);\\n\\\n        \\n\\\n    return max(L, vec3(0.0));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Converts an sRGB color to a linear RGB color.\\n\\\n *\\n\\\n * @param {vec3|vec4} srgbIn The color in sRGB space\\n\\\n * @returns {vec3|vec4} The color in linear color space. The vector type matches the input.\\n\\\n */\\n\\\nvec3 czm_srgbToLinear(vec3 srgbIn)\\n\\\n{\\n\\\n    return pow(srgbIn, vec3(2.2));\\n\\\n}\\n\\\n\\n\\\nvec4 czm_srgbToLinear(vec4 srgbIn) \\n\\\n{\\n\\\n    vec3 linearOut = pow(srgbIn.rgb, vec3(2.2));\\n\\\n    return vec4(linearOut, srgbIn.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Creates a matrix that transforms vectors from tangent space to eye space.\\n\\\n *\\n\\\n * @name czm_tangentToEyeSpaceMatrix\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} normalEC The normal vector in eye coordinates.\\n\\\n * @param {vec3} tangentEC The tangent vector in eye coordinates.\\n\\\n * @param {vec3} bitangentEC The bitangent vector in eye coordinates.\\n\\\n *\\n\\\n * @returns {mat3} The matrix that transforms from tangent space to eye space.\\n\\\n *\\n\\\n * @example\\n\\\n * mat3 tangentToEye = czm_tangentToEyeSpaceMatrix(normalEC, tangentEC, bitangentEC);\\n\\\n * vec3 normal = tangentToEye * texture(normalMap, st).xyz;\\n\\\n */\\n\\\nmat3 czm_tangentToEyeSpaceMatrix(vec3 normalEC, vec3 tangentEC, vec3 bitangentEC)\\n\\\n{\\n\\\n    vec3 normal = normalize(normalEC);\\n\\\n    vec3 tangent = normalize(tangentEC);\\n\\\n    vec3 bitangent = normalize(bitangentEC);\\n\\\n    return mat3(tangent.x  , tangent.y  , tangent.z,\\n\\\n                bitangent.x, bitangent.y, bitangent.z,\\n\\\n                normal.x   , normal.y   , normal.z);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * A wrapper around the texture (WebGL2) / textureCube (WebGL1)\\n\\\n * function to allow for WebGL 1 support.\\n\\\n * \\n\\\n * @name czm_textureCube\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {samplerCube} sampler The sampler.\\n\\\n * @param {vec3} p The coordinate at which to sample the texture.\\n\\\n */\\n\\\nvec4 czm_textureCube(samplerCube sampler, vec3 p) {\\n\\\n#if __VERSION__ == 300\\n\\\n    return texture(sampler, p);\\n\\\n#else\\n\\\n    return textureCube(sampler, p);\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * A wrapper around the textureLod (WebGL2) / textureCube (WebGL1)\\n\\\n * function to allow for WebGL 1 support in fragment shaders.\\n\\\n *\\n\\\n * @name czm_textureCubeLod\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {samplerCube} sampler The sampler.\\n\\\n * @param {vec3} p The coordinate at which to sample the texture.\\n\\\n * @param {float} lod The mipmap level from which to sample.\\n\\\n */\\n\\\nvec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) {\\n\\\n#if __VERSION__ == 300\\n\\\n    return textureLod(sampler, p, lod);\\n\\\n#elif defined(GL_EXT_shader_texture_lod)\\n\\\n    return textureCubeLodEXT(sampler, p, lod);\\n\\\n#endif\\n\\\n}\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a plane.\\n\\\n * \\n\\\n * @name czm_transformPlane\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} plane The plane in Hessian Normal Form.\\n\\\n * @param {mat4} transform The inverse-transpose of a transformation matrix.\\n\\\n */\\n\\\nvec4 czm_transformPlane(vec4 plane, mat4 transform) {\\n\\\n    vec4 transformedPlane = transform * plane;\\n\\\n    // Convert the transformed plane to Hessian Normal Form\\n\\\n    float normalMagnitude = length(transformedPlane.xyz);\\n\\\n    return transformedPlane / normalMagnitude;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Translates a position (or any <code>vec3</code>) that was encoded with {@link EncodedCartesian3},\\n\\\n * and then provided to the shader as separate <code>high</code> and <code>low</code> bits to\\n\\\n * be relative to the eye.  As shown in the example, the position can then be transformed in eye\\n\\\n * or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye},\\n\\\n * respectively.\\n\\\n * <p>\\n\\\n * This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as\\n\\\n * described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_translateRelativeToEye\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec3} high The position's high bits.\\n\\\n * @param {vec3} low The position's low bits.\\n\\\n * @returns {vec3} The position translated to be relative to the camera's position.\\n\\\n *\\n\\\n * @example\\n\\\n * in vec3 positionHigh;\\n\\\n * in vec3 positionLow;\\n\\\n *\\n\\\n * void main()\\n\\\n * {\\n\\\n *   vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\\n\\\n *   gl_Position = czm_modelViewProjectionRelativeToEye * p;\\n\\\n * }\\n\\\n *\\n\\\n * @see czm_modelViewRelativeToEye\\n\\\n * @see czm_modelViewProjectionRelativeToEye\\n\\\n * @see czm_computePosition\\n\\\n * @see EncodedCartesian3\\n\\\n */\\n\\\nvec4 czm_translateRelativeToEye(vec3 high, vec3 low)\\n\\\n{\\n\\\n    vec3 highDifference = high - czm_encodedCameraPositionMCHigh;\\n\\\n    // This check handles the case when NaN values have gotten into `highDifference`.\\n\\\n    // Such a thing could happen on devices running iOS.\\n\\\n    if (length(highDifference) == 0.0) {  \\n\\\n        highDifference = vec3(0);  \\n\\\n    }\\n\\\n    vec3 lowDifference = low - czm_encodedCameraPositionMCLow;\\n\\\n\\n\\\n    return vec4(highDifference + lowDifference, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @private\\n\\\n */\\n\\\nvec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC)\\n\\\n{\\n\\\n    // Diffuse from directional light sources at eye (for top-down and horizon views)\\n\\\n    float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal);\\n\\\n\\n\\\n    if (czm_sceneMode == czm_sceneMode3D) {\\n\\\n        // (and horizon views in 3D)\\n\\\n        diffuse += czm_getLambertDiffuse(vec3(0.0, 1.0, 0.0), material.normal);\\n\\\n    }\\n\\\n\\n\\\n    diffuse = clamp(diffuse, 0.0, 1.0);\\n\\\n\\n\\\n    float specular = czm_getSpecular(lightDirectionEC, toEye, material.normal, material.shininess);\\n\\\n\\n\\\n    // Temporary workaround for adding ambient.\\n\\\n    vec3 materialDiffuse = material.diffuse * 0.5;\\n\\\n\\n\\\n    vec3 ambient = materialDiffuse;\\n\\\n    vec3 color = ambient + material.emission;\\n\\\n    color += materialDiffuse * diffuse * czm_lightColor;\\n\\\n    color += material.specular * specular * czm_lightColor;\\n\\\n\\n\\\n    return vec4(color, material.alpha);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Returns the transpose of the matrix.  The input <code>matrix</code> can be\\n\\\n * a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>.\\n\\\n *\\n\\\n * @name czm_transpose\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {} matrix The matrix to transpose.\\n\\\n *\\n\\\n * @returns {} The transposed matrix.\\n\\\n *\\n\\\n * @example\\n\\\n * // GLSL declarations\\n\\\n * mat2 czm_transpose(mat2 matrix);\\n\\\n * mat3 czm_transpose(mat3 matrix);\\n\\\n * mat4 czm_transpose(mat4 matrix);\\n\\\n *\\n\\\n * // Transpose a 3x3 rotation matrix to find its inverse.\\n\\\n * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates(\\n\\\n *     positionMC, normalEC);\\n\\\n * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye);\\n\\\n */\\n\\\nmat2 czm_transpose(mat2 matrix)\\n\\\n{\\n\\\n    return mat2(\\n\\\n        matrix[0][0], matrix[1][0],\\n\\\n        matrix[0][1], matrix[1][1]);\\n\\\n}\\n\\\n\\n\\\nmat3 czm_transpose(mat3 matrix)\\n\\\n{\\n\\\n    return mat3(\\n\\\n        matrix[0][0], matrix[1][0], matrix[2][0],\\n\\\n        matrix[0][1], matrix[1][1], matrix[2][1],\\n\\\n        matrix[0][2], matrix[1][2], matrix[2][2]);\\n\\\n}\\n\\\n\\n\\\nmat4 czm_transpose(mat4 matrix)\\n\\\n{\\n\\\n    return mat4(\\n\\\n        matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],\\n\\\n        matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],\\n\\\n        matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],\\n\\\n        matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"vec2 getLookupUv(vec2 dimensions, int i) {\\n\\\n    int pixY = i / int(dimensions.x);\\n\\\n    int pixX = i - (pixY * int(dimensions.x));\\n\\\n    float pixelWidth = 1.0 / dimensions.x;\\n\\\n    float pixelHeight = 1.0 / dimensions.y;\\n\\\n    float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel\\n\\\n    float v = (float(pixY) + 0.5) * pixelHeight;\\n\\\n    return vec2(u, v);\\n\\\n}\\n\\\n\\n\\\nvec4 czm_unpackClippingExtents(highp sampler2D extentsTexture, int index) {\\n\\\n    vec2 textureDimensions = vec2(textureSize(extentsTexture, 0));\\n\\\n    return texture(extentsTexture, getLookupUv(textureDimensions, index));\\n\\\n}\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Unpacks a vec4 depth value to a float in [0, 1) range.\\n\\\n *\\n\\\n * @name czm_unpackDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} packedDepth The packed depth.\\n\\\n *\\n\\\n * @returns {float} The floating-point depth in [0, 1) range.\\n\\\n */\\n\\\nfloat czm_unpackDepth(vec4 packedDepth)\\n\\\n{\\n\\\n    // See Aras Pranckevičius' post Encoding Floats to RGBA\\n\\\n    // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/\\n\\\n    return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Unpack an IEEE 754 single-precision float that is packed as a little-endian unsigned normalized vec4.\\n\\\n *\\n\\\n * @name czm_unpackFloat\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} packedFloat The packed float.\\n\\\n *\\n\\\n * @returns {float} The floating-point depth in arbitrary range.\\n\\\n */\\n\\\nfloat czm_unpackFloat(vec4 packedFloat)\\n\\\n{\\n\\\n    // Convert to [0.0, 255.0] and round to integer\\n\\\n    packedFloat = floor(packedFloat * 255.0 + 0.5);\\n\\\n    float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;\\n\\\n    float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0;    \\n\\\n    if (exponent == -127.0)\\n\\\n    {\\n\\\n        return 0.0;\\n\\\n    }\\n\\\n    float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);\\n\\\n    float result = sign * exp2(exponent - 23.0) * mantissa;\\n\\\n    return result;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Useful for reinterpreting texture data as higher-precision values.\\n\\\n * Only works correctly in WebGL 2, which supports the uint type and bitwise operations.\\n\\\n *\\n\\\n * @param {float|vec2|vec3|vec4} 1-4 values from a texture lookup (RGBA channels), normalized to [0.0, 1.0].\\n\\\n * @return {uint} Raw bits as an unsigned integer.\\n\\\n*/\\n\\\nuint czm_unpackTexture(float packedValue) {\\n\\\n    float rounded = czm_round(packedValue * 255.0);\\n\\\n    return uint(rounded);\\n\\\n}\\n\\\n\\n\\\nuint czm_unpackTexture(vec2 packedValue) {\\n\\\n    vec2 rounded = czm_round(packedValue * 255.0);\\n\\\n    uint byte0 = uint(rounded.x);\\n\\\n    uint byte1 = uint(rounded.y);\\n\\\n    return byte0 | (byte1 << 8);\\n\\\n}\\n\\\n\\n\\\nuint czm_unpackTexture(vec3 packedValue) {\\n\\\n    vec3 rounded = czm_round(packedValue * 255.0);\\n\\\n    uint byte0 = uint(rounded.x);\\n\\\n    uint byte1 = uint(rounded.y);\\n\\\n    uint byte2 = uint(rounded.z);\\n\\\n    return byte0 | (byte1 << 8) | (byte2 << 16);\\n\\\n}\\n\\\n\\n\\\nuint czm_unpackTexture(vec4 packedValue) {\\n\\\n    vec4 rounded = czm_round(packedValue * 255.0);\\n\\\n    uint byte0 = uint(rounded.x);\\n\\\n    uint byte1 = uint(rounded.y);\\n\\\n    uint byte2 = uint(rounded.z);\\n\\\n    uint byte3 = uint(rounded.w);\\n\\\n    return byte0 | (byte1 << 8) | (byte2 << 16) | (byte3 << 24);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Unpack unsigned integers of 1-4 bytes. in WebGL 1, there is no uint type,\\n\\\n * so the return value is an int.\\n\\\n * <p>\\n\\\n * There are also precision limitations in WebGL 1. highp int is still limited\\n\\\n * to 24 bits. Above the value of 2^24 = 16777216, precision loss may occur.\\n\\\n * </p>\\n\\\n *\\n\\\n * @param {float|vec2|vec3|vec4} packed The packed value. For vectors, the components are listed in little-endian order.\\n\\\n *\\n\\\n * @return {int} The unpacked value.\\n\\\n */\\n\\\n int czm_unpackUint(float packedValue) {\\n\\\n   float rounded = czm_round(packedValue * 255.0);\\n\\\n   return int(rounded);\\n\\\n }\\n\\\n\\n\\\n int czm_unpackUint(vec2 packedValue) {\\n\\\n   vec2 rounded = czm_round(packedValue * 255.0);\\n\\\n   return int(dot(rounded, vec2(1.0, 256.0)));\\n\\\n }\\n\\\n\\n\\\n int czm_unpackUint(vec3 packedValue) {\\n\\\n   vec3 rounded = czm_round(packedValue * 255.0);\\n\\\n   return int(dot(rounded, vec3(1.0, 256.0, 65536.0)));\\n\\\n }\\n\\\n\\n\\\n int czm_unpackUint(vec4 packedValue) {\\n\\\n   vec4 rounded = czm_round(packedValue * 255.0);\\n\\\n   return int(dot(rounded, vec4(1.0, 256.0, 65536.0, 16777216.0)));\\n\\\n }\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transform metadata values following the EXT_structural_metadata spec\\n\\\n * by multiplying by scale and adding the offset. Operations are always\\n\\\n * performed component-wise, even for matrices.\\n\\\n * \\n\\\n * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} offset The offset to add\\n\\\n * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} scale The scale factor to multiply\\n\\\n * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} value The original value.\\n\\\n *\\n\\\n * @return {float|vec2|vec3|vec4|mat2|mat3|mat4} The transformed value of the same scalar/vector/matrix type as the input.\\n\\\n */\\n\\\nfloat czm_valueTransform(float offset, float scale, float value) {\\n\\\n  return scale * value + offset;\\n\\\n}\\n\\\n\\n\\\nvec2 czm_valueTransform(vec2 offset, vec2 scale, vec2 value) {\\n\\\n  return scale * value + offset;\\n\\\n}\\n\\\n\\n\\\nvec3 czm_valueTransform(vec3 offset, vec3 scale, vec3 value) {\\n\\\n  return scale * value + offset;\\n\\\n}\\n\\\n\\n\\\nvec4 czm_valueTransform(vec4 offset, vec4 scale, vec4 value) {\\n\\\n  return scale * value + offset;\\n\\\n}\\n\\\n\\n\\\nmat2 czm_valueTransform(mat2 offset, mat2 scale, mat2 value) {\\n\\\n  return matrixCompMult(scale, value) + offset;\\n\\\n}\\n\\\n\\n\\\nmat3 czm_valueTransform(mat3 offset, mat3 scale, mat3 value) {\\n\\\n  return matrixCompMult(scale, value) + offset;\\n\\\n}\\n\\\n\\n\\\nmat4 czm_valueTransform(mat4 offset, mat4 scale, mat4 value) {\\n\\\n  return matrixCompMult(scale, value) + offset;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef LOG_DEPTH\\n\\\n// 1.0 at the near plane, increasing linearly from there.\\n\\\nout float v_depthFromNearPlusOne;\\n\\\n#ifdef SHADOW_MAP\\n\\\nout vec3 v_logPositionEC;\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\nvec4 czm_updatePositionDepth(vec4 coords) {\\n\\\n#if defined(LOG_DEPTH)\\n\\\n\\n\\\n#ifdef SHADOW_MAP\\n\\\n    vec3 logPositionEC = (czm_inverseProjection * coords).xyz;\\n\\\n    v_logPositionEC = logPositionEC;\\n\\\n#endif\\n\\\n\\n\\\n    // With the very high far/near ratios used with the logarithmic depth\\n\\\n    // buffer, floating point rounding errors can cause linear depth values\\n\\\n    // to end up on the wrong side of the far plane, even for vertices that\\n\\\n    // are really nowhere near it. Since we always write a correct logarithmic\\n\\\n    // depth value in the fragment shader anyway, we just need to make sure\\n\\\n    // such errors don't cause the primitive to be clipped entirely before\\n\\\n    // we even get to the fragment shader.\\n\\\n    coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w;\\n\\\n#endif\\n\\\n\\n\\\n    return coords;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Writes the logarithmic depth to gl_Position using the already computed gl_Position.\\n\\\n *\\n\\\n * @name czm_vertexLogDepth\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvoid czm_vertexLogDepth()\\n\\\n{\\n\\\n#ifdef LOG_DEPTH\\n\\\n    v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0;\\n\\\n    gl_Position = czm_updatePositionDepth(gl_Position);\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Writes the logarithmic depth to gl_Position using the provided clip coordinates.\\n\\\n * <p>\\n\\\n * An example use case for this function would be moving the vertex in window coordinates\\n\\\n * before converting back to clip coordinates. Use the original vertex clip coordinates.\\n\\\n * </p>\\n\\\n * @name czm_vertexLogDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} clipCoords The vertex in clip coordinates.\\n\\\n *\\n\\\n * @example\\n\\\n * czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0));\\n\\\n */\\n\\\nvoid czm_vertexLogDepth(vec4 clipCoords)\\n\\\n{\\n\\\n#ifdef LOG_DEPTH\\n\\\n    v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0;\\n\\\n    czm_updatePositionDepth(clipCoords);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"vec4 czm_screenToEyeCoordinates(vec4 screenCoordinate)\\n\\\n{\\n\\\n    // Reconstruct NDC coordinates\\n\\\n    float x = 2.0 * screenCoordinate.x - 1.0;\\n\\\n    float y = 2.0 * screenCoordinate.y - 1.0;\\n\\\n    float z = (screenCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];\\n\\\n    vec4 q = vec4(x, y, z, 1.0);\\n\\\n\\n\\\n    // Reverse the perspective division to obtain clip coordinates.\\n\\\n    q /= screenCoordinate.w;\\n\\\n\\n\\\n    // Reverse the projection transformation to obtain eye coordinates.\\n\\\n    if (!(czm_inverseProjection == mat4(0.0))) // IE and Edge sometimes do something weird with != between mat4s\\n\\\n    {\\n\\\n        q = czm_inverseProjection * q;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        float top = czm_frustumPlanes.x;\\n\\\n        float bottom = czm_frustumPlanes.y;\\n\\\n        float left = czm_frustumPlanes.z;\\n\\\n        float right = czm_frustumPlanes.w;\\n\\\n\\n\\\n        float near = czm_currentFrustum.x;\\n\\\n        float far = czm_currentFrustum.y;\\n\\\n\\n\\\n        q.x = (q.x * (right - left) + left + right) * 0.5;\\n\\\n        q.y = (q.y * (top - bottom) + bottom + top) * 0.5;\\n\\\n        q.z = (q.z * (near - far) - near - far) * 0.5;\\n\\\n        q.w = 1.0;\\n\\\n    }\\n\\\n\\n\\\n    return q;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Transforms a position from window to eye coordinates.\\n\\\n * The transform from window to normalized device coordinates is done using components\\n\\\n * of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating\\n\\\n * the inverse of <code>czm_viewportTransformation</code>. The transformation from\\n\\\n * normalized device coordinates to clip coordinates is done using <code>fragmentCoordinate.w</code>,\\n\\\n * which is expected to be the scalar used in the perspective divide. The transformation\\n\\\n * from clip to eye coordinates is done using {@link czm_inverseProjection}.\\n\\\n *\\n\\\n * @name czm_windowToEyeCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec4} fragmentCoordinate The position in window coordinates to transform.\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in eye coordinates.\\n\\\n *\\n\\\n * @see czm_modelToWindowCoordinates\\n\\\n * @see czm_eyeToWindowCoordinates\\n\\\n * @see czm_inverseProjection\\n\\\n * @see czm_viewport\\n\\\n * @see czm_viewportTransformation\\n\\\n *\\n\\\n * @example\\n\\\n * vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord);\\n\\\n */\\n\\\nvec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate)\\n\\\n{\\n\\\n    vec2 screenCoordXY = (fragmentCoordinate.xy - czm_viewport.xy) / czm_viewport.zw;\\n\\\n    return czm_screenToEyeCoordinates(vec4(screenCoordXY, fragmentCoordinate.zw));\\n\\\n}\\n\\\n\\n\\\nvec4 czm_screenToEyeCoordinates(vec2 screenCoordinateXY, float depthOrLogDepth)\\n\\\n{\\n\\\n    // See reverseLogDepth.glsl. This is separate to re-use the pow.\\n\\\n#if defined(LOG_DEPTH) || defined(LOG_DEPTH_READ_ONLY)\\n\\\n    float near = czm_currentFrustum.x;\\n\\\n    float far = czm_currentFrustum.y;\\n\\\n    float log2Depth = depthOrLogDepth * czm_log2FarDepthFromNearPlusOne;\\n\\\n    float depthFromNear = exp2(log2Depth) - 1.0;\\n\\\n    float depthFromCamera = depthFromNear + near;\\n\\\n    vec4 screenCoord = vec4(screenCoordinateXY, far * (1.0 - near / depthFromCamera) / (far - near), 1.0);\\n\\\n    vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord);\\n\\\n    eyeCoordinate.w = 1.0 / depthFromCamera; // Better precision\\n\\\n#else\\n\\\n    vec4 screenCoord = vec4(screenCoordinateXY, depthOrLogDepth, 1.0);\\n\\\n    vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord);\\n\\\n#endif\\n\\\n    return eyeCoordinate;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Transforms a position given as window x/y and a depth or a log depth from window to eye coordinates.\\n\\\n * This function produces more accurate results for window positions with log depth than\\n\\\n * conventionally unpacking the log depth using czm_reverseLogDepth and using the standard version\\n\\\n * of czm_windowToEyeCoordinates.\\n\\\n *\\n\\\n * @name czm_windowToEyeCoordinates\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {vec2} fragmentCoordinateXY The XY position in window coordinates to transform.\\n\\\n * @param {float} depthOrLogDepth A depth or log depth for the fragment.\\n\\\n *\\n\\\n * @see czm_modelToWindowCoordinates\\n\\\n * @see czm_eyeToWindowCoordinates\\n\\\n * @see czm_inverseProjection\\n\\\n * @see czm_viewport\\n\\\n * @see czm_viewportTransformation\\n\\\n *\\n\\\n * @returns {vec4} The transformed position in eye coordinates.\\n\\\n */\\n\\\nvec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth)\\n\\\n{\\n\\\n    vec2 screenCoordXY = (fragmentCoordinateXY.xy - czm_viewport.xy) / czm_viewport.zw;\\n\\\n    return czm_screenToEyeCoordinates(screenCoordXY, depthOrLogDepth);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// emulated noperspective\\n\\\n#if !defined(LOG_DEPTH)\\n\\\nin float v_WindowZ;\\n\\\n#endif\\n\\\n\\n\\\n/**\\n\\\n * Emulates GL_DEPTH_CLAMP. Clamps a fragment to the near and far plane\\n\\\n * by writing the fragment's depth. See czm_depthClamp for more details.\\n\\\n *\\n\\\n * @name czm_writeDepthClamp\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @example\\n\\\n * out_FragColor = color;\\n\\\n * czm_writeDepthClamp();\\n\\\n *\\n\\\n * @see czm_depthClamp\\n\\\n */\\n\\\nvoid czm_writeDepthClamp()\\n\\\n{\\n\\\n#if (!defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))\\n\\\n    gl_FragDepth = clamp(v_WindowZ * gl_FragCoord.w, 0.0, 1.0);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef LOG_DEPTH\\n\\\nin float v_depthFromNearPlusOne;\\n\\\n\\n\\\n#ifdef POLYGON_OFFSET\\n\\\nuniform vec2 u_polygonOffset;\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n/**\\n\\\n * Writes the fragment depth to the logarithmic depth buffer.\\n\\\n * <p>\\n\\\n * Use this when the vertex shader does not call {@link czm_vertexLogDepth}, for example, when\\n\\\n * ray-casting geometry using a full screen quad.\\n\\\n * </p>\\n\\\n * @name czm_writeLogDepth\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float} depth The depth coordinate, where 1.0 is on the near plane and\\n\\\n *                      depth increases in eye-space units from there\\n\\\n *\\n\\\n * @example\\n\\\n * czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0);\\n\\\n */\\n\\\nvoid czm_writeLogDepth(float depth)\\n\\\n{\\n\\\n#if (defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))\\n\\\n    // Discard the vertex if it's not between the near and far planes.\\n\\\n    // We allow a bit of epsilon on the near plane comparison because a 1.0\\n\\\n    // from the vertex shader (indicating the vertex should be _on_ the near\\n\\\n    // plane) will not necessarily come here as exactly 1.0.\\n\\\n    if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n#ifdef POLYGON_OFFSET\\n\\\n    // Polygon offset: m * factor + r * units\\n\\\n    float factor = u_polygonOffset[0];\\n\\\n    float units = u_polygonOffset[1];\\n\\\n\\n\\\n#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\\n\\\n    // This factor doesn't work in IE 10\\n\\\n    if (factor != 0.0) {\\n\\\n        // m = sqrt(dZdX^2 + dZdY^2);\\n\\\n        float x = dFdx(depth);\\n\\\n        float y = dFdy(depth);\\n\\\n        float m = sqrt(x * x + y * y);\\n\\\n\\n\\\n        // Apply the factor before computing the log depth.\\n\\\n        depth += m * factor;\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n    gl_FragDepth = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne;\\n\\\n\\n\\\n#ifdef POLYGON_OFFSET\\n\\\n    // Apply the units after the log depth.\\n\\\n    gl_FragDepth += czm_epsilon7 * units;\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Writes the fragment depth to the logarithmic depth buffer.\\n\\\n * <p>\\n\\\n * Use this when the vertex shader calls {@link czm_vertexLogDepth}.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_writeLogDepth\\n\\\n * @glslFunction\\n\\\n */\\n\\\nvoid czm_writeLogDepth() {\\n\\\n#ifdef LOG_DEPTH\\n\\\n    czm_writeLogDepth(v_depthFromNearPlusOne);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Transforms a value for non-perspective interpolation by multiplying\\n\\\n * it by w, the value used in the perspective divide. This function is\\n\\\n * intended to be called in a vertex shader to compute the value of a\\n\\\n * `varying` that should not be subject to perspective interpolation.\\n\\\n * For example, screen-space texture coordinates. The fragment shader\\n\\\n * must call {@link czm_readNonPerspective} to retrieve the final\\n\\\n * non-perspective value.\\n\\\n *\\n\\\n * @name czm_writeNonPerspective\\n\\\n * @glslFunction\\n\\\n *\\n\\\n * @param {float|vec2|vec3|vec4} value The value to be interpolated without accounting for perspective.\\n\\\n * @param {float} w The perspective divide value. Usually this is the computed `gl_Position.w`.\\n\\\n * @returns {float|vec2|vec3|vec4} The transformed value, intended to be stored in a `varying` and read in the\\n\\\n *          fragment shader with {@link czm_readNonPerspective}.\\n\\\n */\\n\\\nfloat czm_writeNonPerspective(float value, float w) {\\n\\\n    return value * w;\\n\\\n}\\n\\\n\\n\\\nvec2 czm_writeNonPerspective(vec2 value, float w) {\\n\\\n    return value * w;\\n\\\n}\\n\\\n\\n\\\nvec3 czm_writeNonPerspective(vec3 value, float w) {\\n\\\n    return value * w;\\n\\\n}\\n\\\n\\n\\\nvec4 czm_writeNonPerspective(vec4 value, float w) {\\n\\\n    return value * w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @name czm_depthRangeStruct\\n\\\n * @glslStruct\\n\\\n */\\n\\\nstruct czm_depthRangeStruct\\n\\\n{\\n\\\n    float near;\\n\\\n    float far;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Holds material information that can be used for lighting. Returned by all czm_getMaterial functions.\\n\\\n *\\n\\\n * @name czm_material\\n\\\n * @glslStruct\\n\\\n *\\n\\\n * @property {vec3} diffuse Incoming light that scatters evenly in all directions.\\n\\\n * @property {float} specular Intensity of incoming light reflecting in a single direction.\\n\\\n * @property {float} shininess The sharpness of the specular reflection.  Higher values create a smaller, more focused specular highlight.\\n\\\n * @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.\\n\\\n * @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.\\n\\\n * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque.\\n\\\n */\\n\\\nstruct czm_material\\n\\\n{\\n\\\n    vec3 diffuse;\\n\\\n    float specular;\\n\\\n    float shininess;\\n\\\n    vec3 normal;\\n\\\n    vec3 emission;\\n\\\n    float alpha;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Used as input to every material's czm_getMaterial function.\\n\\\n *\\n\\\n * @name czm_materialInput\\n\\\n * @glslStruct\\n\\\n *\\n\\\n * @property {float} s 1D texture coordinates.\\n\\\n * @property {vec2} st 2D texture coordinates.\\n\\\n * @property {vec3} str 3D texture coordinates.\\n\\\n * @property {vec3} normalEC Unperturbed surface normal in eye coordinates.\\n\\\n * @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space.\\n\\\n * @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates.  The magnitude is the distance in meters from the fragment to the eye.\\n\\\n * @property {float} height The height of the terrain in meters above or below the ellipsoid.  Only available for globe materials.\\n\\\n * @property {float} slope The slope of the terrain in radians.  0 is flat; pi/2 is vertical.  Only available for globe materials.\\n\\\n * @property {float} aspect The aspect of the terrain in radians.  0 is East, pi/2 is North, pi is West, 3pi/2 is South.  Only available for globe materials.\\n\\\n* @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials.\\n\\\n */\\n\\\nstruct czm_materialInput\\n\\\n{\\n\\\n    float s;\\n\\\n    vec2 st;\\n\\\n    vec3 str;\\n\\\n    vec3 normalEC;\\n\\\n    mat3 tangentToEyeMatrix;\\n\\\n    vec3 positionToEyeEC;\\n\\\n    float height;\\n\\\n    float slope;\\n\\\n    float aspect;\\n\\\n    float waterMask;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Struct for representing a material for a {@link Model}. The model\\n\\\n * rendering pipeline will pass this struct between material, custom shaders,\\n\\\n * and lighting stages. This is not to be confused with {@link czm_material}\\n\\\n * which is used by the older Fabric materials system, although they are similar.\\n\\\n * <p>\\n\\\n * All color values (diffuse, specular, emissive) are in linear color space.\\n\\\n * </p>\\n\\\n *\\n\\\n * @name czm_modelMaterial\\n\\\n * @glslStruct\\n\\\n *\\n\\\n * @property {vec4} baseColor The base color of the material.\\n\\\n * @property {vec3} diffuse Incoming light that scatters evenly in all directions.\\n\\\n * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque.\\n\\\n * @property {vec3} specular Color of reflected light at normal incidence in PBR materials. This is sometimes referred to as f0 in the literature.\\n\\\n * @property {float} roughness A number from 0.0 to 1.0 representing how rough the surface is. Values near 0.0 produce glossy surfaces, while values near 1.0 produce rough surfaces.\\n\\\n * @property {vec3} normalEC Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.\\n\\\n * @property {float} occlusion Ambient occlusion recieved at this point on the material. 1.0 means fully lit, 0.0 means fully occluded.\\n\\\n * @property {vec3} emissive Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.\\n\\\n */\\n\\\nstruct czm_modelMaterial {\\n\\\n    vec4 baseColor;\\n\\\n    vec3 diffuse;\\n\\\n    float alpha;\\n\\\n    vec3 specular;\\n\\\n    float roughness;\\n\\\n    vec3 normalEC;\\n\\\n    float occlusion;\\n\\\n    vec3 emissive;\\n\\\n#ifdef USE_SPECULAR\\n\\\n    float specularWeight;\\n\\\n#endif\\n\\\n#ifdef USE_ANISOTROPY\\n\\\n    vec3 anisotropicT;\\n\\\n    vec3 anisotropicB;\\n\\\n    float anisotropyStrength;\\n\\\n#endif\\n\\\n#ifdef USE_CLEARCOAT\\n\\\n    float clearcoatFactor;\\n\\\n    float clearcoatRoughness;\\n\\\n    vec3 clearcoatNormal;\\n\\\n    // Add clearcoatF0 when KHR_materials_ior is implemented\\n\\\n#endif\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Struct for representing the output of a custom vertex shader.\\n\\\n * \\n\\\n * @name czm_modelVertexOutput\\n\\\n * @glslStruct\\n\\\n *\\n\\\n * @see {@link CustomShader}\\n\\\n * @see {@link Model}\\n\\\n *\\n\\\n * @property {vec3} positionMC The position of the vertex in model coordinates\\n\\\n * @property {float} pointSize A custom value for gl_PointSize. This is only used for point primitives. \\n\\\n */\\n\\\nstruct czm_modelVertexOutput {\\n\\\n  vec3 positionMC;\\n\\\n  float pointSize;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_ray\\n\\\n * @glslStruct\\n\\\n */\\n\\\nstruct czm_ray\\n\\\n{\\n\\\n    vec3 origin;\\n\\\n    vec3 direction;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_raySegment\\n\\\n * @glslStruct\\n\\\n */\\n\\\nstruct czm_raySegment\\n\\\n{\\n\\\n    float start;\\n\\\n    float stop;\\n\\\n};\\n\\\n\\n\\\n/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_emptyRaySegment\\n\\\n * @glslConstant \\n\\\n */\\n\\\nconst czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity);\\n\\\n\\n\\\n/**\\n\\\n * DOC_TBA\\n\\\n *\\n\\\n * @name czm_fullRaySegment\\n\\\n * @glslConstant \\n\\\n */\\n\\\nconst czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity);\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"struct czm_shadowParameters\\n\\\n{\\n\\\n#ifdef USE_CUBE_MAP_SHADOW\\n\\\n    vec3 texCoords;\\n\\\n#else\\n\\\n    vec2 texCoords;\\n\\\n#endif\\n\\\n\\n\\\n    float depthBias;\\n\\\n    float depth;\\n\\\n    float nDotL;\\n\\\n    vec2 texelStepSize;\\n\\\n    float normalShadingSmooth;\\n\\\n    float darkness;\\n\\\n};\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_noiseTexture;\\n\\\nuniform vec3 u_noiseTextureDimensions;\\n\\\nuniform float u_noiseDetail;\\n\\\nin vec2 v_offset;\\n\\\nin vec3 v_maximumSize;\\n\\\nin vec4 v_color;\\n\\\nin float v_slice;\\n\\\nin float v_brightness;\\n\\\n\\n\\\nfloat wrap(float value, float rangeLength) {\\n\\\n    if(value < 0.0) {\\n\\\n        float absValue = abs(value);\\n\\\n        float modValue = mod(absValue, rangeLength);\\n\\\n        return mod(rangeLength - modValue, rangeLength);\\n\\\n    }\\n\\\n    return mod(value, rangeLength);\\n\\\n}\\n\\\n\\n\\\nvec3 wrapVec(vec3 value, float rangeLength) {\\n\\\n    return vec3(wrap(value.x, rangeLength),\\n\\\n                wrap(value.y, rangeLength),\\n\\\n                wrap(value.z, rangeLength));\\n\\\n}\\n\\\n\\n\\\nvec2 voxelToUV(vec3 voxelIndex) {\\n\\\n    float textureSliceWidth = u_noiseTextureDimensions.x;\\n\\\n    float noiseTextureRows = u_noiseTextureDimensions.y;\\n\\\n    float inverseNoiseTextureRows = u_noiseTextureDimensions.z;\\n\\\n\\n\\\n    float textureSliceWidthSquared = textureSliceWidth * textureSliceWidth;\\n\\\n    vec2 inverseNoiseTextureDimensions = vec2(noiseTextureRows / textureSliceWidthSquared,\\n\\\n                                            inverseNoiseTextureRows / textureSliceWidth);\\n\\\n    vec3 wrappedIndex = wrapVec(voxelIndex, textureSliceWidth);\\n\\\n    float column = mod(wrappedIndex.z, textureSliceWidth * inverseNoiseTextureRows);\\n\\\n    float row = floor(wrappedIndex.z / textureSliceWidth * noiseTextureRows);\\n\\\n\\n\\\n    float xPixelCoord = wrappedIndex.x + column * textureSliceWidth;\\n\\\n    float yPixelCoord = wrappedIndex.y + row * textureSliceWidth;\\n\\\n    return vec2(xPixelCoord, yPixelCoord) * inverseNoiseTextureDimensions;\\n\\\n}\\n\\\n\\n\\\n// Interpolate a voxel with its neighbor (along the positive X-axis)\\n\\\nvec4 lerpSamplesX(vec3 voxelIndex, float x) {\\n\\\n    vec2 uv0 = voxelToUV(voxelIndex);\\n\\\n    vec2 uv1 = voxelToUV(voxelIndex + vec3(1.0, 0.0, 0.0));\\n\\\n    vec4 sample0 = texture(u_noiseTexture, uv0);\\n\\\n    vec4 sample1 = texture(u_noiseTexture, uv1);\\n\\\n    return mix(sample0, sample1, x);\\n\\\n}\\n\\\n\\n\\\nvec4 sampleNoiseTexture(vec3 position) {\\n\\\n    float textureSliceWidth = u_noiseTextureDimensions.x;\\n\\\n    vec3 recenteredPos = position + vec3(textureSliceWidth / 2.0);\\n\\\n    vec3 lerpValue = fract(recenteredPos);\\n\\\n    vec3 voxelIndex = floor(recenteredPos);\\n\\\n\\n\\\n    vec4 xLerp00 = lerpSamplesX(voxelIndex, lerpValue.x);\\n\\\n    vec4 xLerp01 = lerpSamplesX(voxelIndex + vec3(0.0, 0.0, 1.0), lerpValue.x);\\n\\\n    vec4 xLerp10 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 0.0), lerpValue.x);\\n\\\n    vec4 xLerp11 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 1.0), lerpValue.x);\\n\\\n\\n\\\n    vec4 yLerp0 = mix(xLerp00, xLerp10, lerpValue.y);\\n\\\n    vec4 yLerp1 = mix(xLerp01, xLerp11, lerpValue.y);\\n\\\n    return mix(yLerp0, yLerp1, lerpValue.z);\\n\\\n}\\n\\\n\\n\\\n// Intersection with a unit sphere with radius 0.5 at center (0, 0, 0).\\n\\\nbool intersectSphere(vec3 origin, vec3 dir, float slice,\\n\\\n                     out vec3 point, out vec3 normal) {\\n\\\n    float A = dot(dir, dir);\\n\\\n    float B = dot(origin, dir);\\n\\\n    float C = dot(origin, origin) - 0.25;\\n\\\n    float discriminant = (B * B) - (A * C);\\n\\\n    if(discriminant < 0.0) {\\n\\\n        return false;\\n\\\n    }\\n\\\n    float root = sqrt(discriminant);\\n\\\n    float t = (-B - root) / A;\\n\\\n    if(t < 0.0) {\\n\\\n        t = (-B + root) / A;\\n\\\n    }\\n\\\n    point = origin + t * dir;\\n\\\n\\n\\\n    if(slice >= 0.0) {\\n\\\n        point.z = (slice / 2.0) - 0.5;\\n\\\n        if(length(point) > 0.5) {\\n\\\n            return false;\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    normal = normalize(point);\\n\\\n    point -= czm_epsilon2 * normal;\\n\\\n    return true;\\n\\\n}\\n\\\n\\n\\\n// Transforms the ray origin and direction into unit sphere space,\\n\\\n// then transforms the result back into the ellipsoid's space.\\n\\\nbool intersectEllipsoid(vec3 origin, vec3 dir, vec3 center, vec3 scale, float slice,\\n\\\n                        out vec3 point, out vec3 normal) {\\n\\\n    if(scale.x <= 0.01 || scale.y < 0.01 || scale.z < 0.01) {\\n\\\n        return false;\\n\\\n    }\\n\\\n\\n\\\n    vec3 o = (origin - center) / scale;\\n\\\n    vec3 d = dir / scale;\\n\\\n    vec3 p, n;\\n\\\n    bool intersected = intersectSphere(o, d, slice, p, n);\\n\\\n    if(intersected) {\\n\\\n        point = (p * scale) + center;\\n\\\n        normal = n;\\n\\\n    }\\n\\\n    return intersected;\\n\\\n}\\n\\\n\\n\\\n// Assume that if phase shift is being called for octave i,\\n\\\n// the frequency is of i - 1. This saves us from doing extra\\n\\\n// division / multiplication operations.\\n\\\nvec2 phaseShift2D(vec2 p, vec2 freq) {\\n\\\n    return (czm_pi / 2.0) * sin(freq.yx * p.yx);\\n\\\n}\\n\\\n\\n\\\nvec2 phaseShift3D(vec3 p, vec2 freq) {\\n\\\n    return phaseShift2D(p.xy, freq) + czm_pi * vec2(sin(freq.x * p.z));\\n\\\n}\\n\\\n\\n\\\n// The cloud texture function derived from Gardner's 1985 paper,\\n\\\n// \\\"Visual Simulation of Clouds.\\\"\\n\\\n// https://www.cs.drexel.edu/~david/Classes/Papers/p297-gardner.pdf\\n\\\nconst float T0    = 0.6;  // contrast of the texture pattern\\n\\\nconst float k     = 0.1;  // computed to produce a maximum value of 1\\n\\\nconst float C0    = 0.8;  // coefficient\\n\\\nconst float FX0   = 0.6;  // frequency X\\n\\\nconst float FY0   = 0.6;  // frequency Y\\n\\\nconst int octaves = 5;\\n\\\n\\n\\\nfloat T(vec3 point) {\\n\\\n    vec2 sum = vec2(0.0);\\n\\\n    float Ci = C0;\\n\\\n    vec2 FXY = vec2(FX0, FY0);\\n\\\n    vec2 PXY = vec2(0.0);\\n\\\n    for(int i = 1; i <= octaves; i++) {\\n\\\n        PXY = phaseShift3D(point, FXY);\\n\\\n        Ci *= 0.707;\\n\\\n        FXY *= 2.0;\\n\\\n        vec2 sinTerm = sin(FXY * point.xy + PXY);\\n\\\n        sum += Ci * sinTerm + vec2(T0);\\n\\\n    }\\n\\\n    return k * sum.x * sum.y;\\n\\\n}\\n\\\n\\n\\\nconst float a = 0.5;  // fraction of surface reflection due to ambient or scattered light,\\n\\\nconst float t = 0.4;  // fraction of texture shading\\n\\\nconst float s = 0.25; // fraction of specular reflection\\n\\\n\\n\\\nfloat I(float Id, float Is, float It) {\\n\\\n    return (1.0 - a) * ((1.0 - t) * ((1.0 - s) * Id + s * Is) + t * It) + a;\\n\\\n}\\n\\\n\\n\\\nconst vec3 lightDir = normalize(vec3(0.2, -1.0, 0.7));\\n\\\n\\n\\\nvec4 drawCloud(vec3 rayOrigin, vec3 rayDir, vec3 cloudCenter, vec3 cloudScale, float cloudSlice,\\n\\\n               float brightness) {\\n\\\n    vec3 cloudPoint, cloudNormal;\\n\\\n    if(!intersectEllipsoid(rayOrigin, rayDir, cloudCenter, cloudScale, cloudSlice,\\n\\\n                            cloudPoint, cloudNormal)) {\\n\\\n        return vec4(0.0);\\n\\\n    }\\n\\\n\\n\\\n    float Id = clamp(dot(cloudNormal, -lightDir), 0.0, 1.0);  // diffuse reflection\\n\\\n    float Is = max(pow(dot(-lightDir, -rayDir), 2.0), 0.0);   // specular reflection\\n\\\n    float It = T(cloudPoint);                                 // texture function\\n\\\n    float intensity = I(Id, Is, It);\\n\\\n    vec3 color = vec3(intensity * clamp(brightness, 0.1, 1.0));\\n\\\n\\n\\\n    vec4 noise = sampleNoiseTexture(u_noiseDetail * cloudPoint);\\n\\\n    float W = noise.x;\\n\\\n    float W2 = noise.y;\\n\\\n    float W3 = noise.z;\\n\\\n\\n\\\n    // The dot product between the cloud's normal and the ray's direction is greatest\\n\\\n    // in the center of the ellipsoid's surface. It decreases towards the edge.\\n\\\n    // Thus, it is used to blur the areas leading to the edges of the ellipsoid,\\n\\\n    // so that no harsh lines appear.\\n\\\n\\n\\\n    // The first (and biggest) layer of worley noise is then subtracted from this.\\n\\\n    // The final result is scaled up so that the base cloud is not too translucent.\\n\\\n    float ndDot = clamp(dot(cloudNormal, -rayDir), 0.0, 1.0);\\n\\\n    float TR = pow(ndDot, 3.0) - W; // translucency\\n\\\n    TR *= 1.3;\\n\\\n\\n\\\n    // Subtracting the second and third layers of worley noise is more complicated.\\n\\\n    // If these layers of noise were simply subtracted from the current translucency,\\n\\\n    // the shape derived from the first layer of noise would be completely deleted.\\n\\\n    // The erosion of this noise should thus be constricted to the edges of the cloud.\\n\\\n    // However, because the edges of the ellipsoid were already blurred away, mapping\\n\\\n    // the noise to (1.0 - ndDot) will have no impact on most of the cloud's appearance.\\n\\\n    // The value of (0.5 - ndDot) provides the best compromise.\\n\\\n    float minusDot = 0.5 - ndDot;\\n\\\n\\n\\\n    // Even with the previous calculation, subtracting the second layer of wnoise\\n\\\n    // erode too much of the cloud. The addition of it, however, will detailed\\n\\\n    // volume to the cloud. As long as the noise is only added and not subtracted,\\n\\\n    // the results are aesthetically pleasing.\\n\\\n\\n\\\n    // The minusDot product is mapped in a way that it is larger at the edges of\\n\\\n    // the ellipsoid, so a subtraction and min operation are used instead of\\n\\\n    // an addition and max one.\\n\\\n    TR -= min(minusDot * W2, 0.0);\\n\\\n\\n\\\n    // The third level of worley noise is subtracted from the result, with some\\n\\\n    // modifications. First, a scalar is added to minusDot so that the noise\\n\\\n    // starts affecting the shape farther away from the center of the ellipsoid's\\n\\\n    // surface. Then, it is scaled down so its impact is not too intense.\\n\\\n    TR -= 0.8 * (minusDot + 0.25) * W3;\\n\\\n\\n\\\n    // The texture function's shading does not correlate with the shape of the cloud\\n\\\n    // produced by the layers of noise, so an extra shading scalar is calculated.\\n\\\n    // The darkest areas of the cloud are assigned to be where the noise erodes\\n\\\n    // the cloud the most. This is then interpolated based on the translucency\\n\\\n    // and the diffuse shading term of that point in the cloud.\\n\\\n    float shading = mix(1.0 - 0.8 * W * W, 1.0, Id * TR);\\n\\\n\\n\\\n    // To avoid values that are too dark, this scalar is increased by a small amount\\n\\\n    // and clamped so it never goes to zero.\\n\\\n    shading = clamp(shading + 0.2, 0.3, 1.0);\\n\\\n\\n\\\n    // Finally, the contrast of the cloud's color is increased.\\n\\\n    vec3 finalColor = mix(vec3(0.5), shading * color, 1.15);\\n\\\n    return vec4(finalColor, clamp(TR, 0.0, 1.0)) * v_color;\\n\\\n}\\n\\\n\\n\\\nvoid main() {\\n\\\n#ifdef DEBUG_BILLBOARDS\\n\\\n    out_FragColor = vec4(0.0, 0.5, 0.5, 1.0);\\n\\\n#endif\\n\\\n    // To avoid calculations with high values,\\n\\\n    // we raycast from an arbitrarily smaller space.\\n\\\n    vec2 coordinate = v_maximumSize.xy * v_offset;\\n\\\n\\n\\\n    vec3 ellipsoidScale = 0.82 * v_maximumSize;\\n\\\n    vec3 ellipsoidCenter = vec3(0.0);\\n\\\n\\n\\\n    float zOffset = max(ellipsoidScale.z - 10.0, 0.0);\\n\\\n    vec3 eye = vec3(0, 0, -10.0 - zOffset);\\n\\\n    vec3 rayDir = normalize(vec3(coordinate, 1.0) - eye);\\n\\\n    vec3 rayOrigin = eye;\\n\\\n#ifdef DEBUG_ELLIPSOIDS\\n\\\n    vec3 point, normal;\\n\\\n    if(intersectEllipsoid(rayOrigin, rayDir, ellipsoidCenter, ellipsoidScale, v_slice,\\n\\\n                          point, normal)) {\\n\\\n        out_FragColor = v_brightness * v_color;\\n\\\n    }\\n\\\n#else\\n\\\n#ifndef DEBUG_BILLBOARDS\\n\\\n    vec4 cloud = drawCloud(rayOrigin, rayDir,\\n\\\n                           ellipsoidCenter, ellipsoidScale, v_slice, v_brightness);\\n\\\n    if(cloud.w < 0.01) {\\n\\\n        discard;\\n\\\n    }\\n\\\n    out_FragColor = cloud;\\n\\\n#endif\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef INSTANCED\\n\\\nin vec2 direction;\\n\\\n#endif\\n\\\nin vec4 positionHighAndScaleX;\\n\\\nin vec4 positionLowAndScaleY;\\n\\\nin vec4 packedAttribute0;\\n\\\nin vec4 packedAttribute1;\\n\\\nin vec4 color;\\n\\\n\\n\\\nout vec2 v_offset;\\n\\\nout vec3 v_maximumSize;\\n\\\nout vec4 v_color;\\n\\\nout float v_slice;\\n\\\nout float v_brightness;\\n\\\n\\n\\\nvoid main() {\\n\\\n    // Unpack attributes.\\n\\\n    vec3 positionHigh = positionHighAndScaleX.xyz;\\n\\\n    vec3 positionLow = positionLowAndScaleY.xyz;\\n\\\n    vec2 scale = vec2(positionHighAndScaleX.w, positionLowAndScaleY.w);\\n\\\n\\n\\\n    float show = packedAttribute0.x;\\n\\\n    float brightness = packedAttribute0.y;\\n\\\n    vec2 coordinates = packedAttribute0.wz;\\n\\\n    vec3 maximumSize = packedAttribute1.xyz;\\n\\\n    float slice = packedAttribute1.w;\\n\\\n\\n\\\n#ifdef INSTANCED\\n\\\n    vec2 dir = direction;\\n\\\n#else\\n\\\n    vec2 dir = coordinates;\\n\\\n#endif\\n\\\n\\n\\\n    vec2 offset = dir - vec2(0.5, 0.5);\\n\\\n    vec2 scaledOffset = scale * offset;\\n\\\n    vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\\n\\\n    vec4 positionEC = czm_modelViewRelativeToEye * p;\\n\\\n    positionEC.xy += scaledOffset;\\n\\\n    \\n\\\n    positionEC.xyz *= show;\\n\\\n    gl_Position = czm_projection * positionEC;\\n\\\n\\n\\\n    v_offset = offset;\\n\\\n    v_maximumSize = maximumSize;\\n\\\n    v_color = color;\\n\\\n    v_slice = slice;\\n\\\n    v_brightness = brightness;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec3 u_noiseTextureDimensions;\\n\\\nuniform float u_noiseDetail;\\n\\\nuniform vec3 u_noiseOffset;\\n\\\nin vec2 v_position;\\n\\\n\\n\\\nfloat wrap(float value, float rangeLength) {\\n\\\n    if(value < 0.0) {\\n\\\n        float absValue = abs(value);\\n\\\n        float modValue = mod(absValue, rangeLength);\\n\\\n        return mod(rangeLength - modValue, rangeLength);\\n\\\n    }\\n\\\n    return mod(value, rangeLength);\\n\\\n}\\n\\\n\\n\\\nvec3 wrapVec(vec3 value, float rangeLength) {\\n\\\n    return vec3(wrap(value.x, rangeLength),\\n\\\n                wrap(value.y, rangeLength),\\n\\\n                wrap(value.z, rangeLength));\\n\\\n}\\n\\\n\\n\\\nvec3 random3(vec3 p) {\\n\\\n    float dot1 = dot(p, vec3(127.1, 311.7, 932.8));\\n\\\n    float dot2 = dot(p, vec3(269.5, 183.3, 421.4));\\n\\\n    return fract(vec3(sin(dot1 - dot2), cos(dot1 * dot2), dot1 * dot2));\\n\\\n}\\n\\\n\\n\\\n// Frequency corresponds to cell size.\\n\\\n// The higher the frequency, the smaller the cell size.\\n\\\nvec3 getWorleyCellPoint(vec3 centerCell, vec3 offset, float freq) {\\n\\\n    float textureSliceWidth = u_noiseTextureDimensions.x;\\n\\\n    vec3 cell = centerCell + offset;\\n\\\n    cell = wrapVec(cell, textureSliceWidth / u_noiseDetail);\\n\\\n    cell += floor(u_noiseOffset / u_noiseDetail);\\n\\\n    vec3 p = offset + random3(cell);\\n\\\n    return p;\\n\\\n}\\n\\\n\\n\\\nfloat worleyNoise(vec3 p, float freq) {\\n\\\n    vec3 centerCell = floor(p * freq);\\n\\\n    vec3 pointInCell = fract(p * freq);\\n\\\n    float shortestDistance = 1000.0;\\n\\\n\\n\\\n    for(float z = -1.0; z <= 1.0; z++) {\\n\\\n        for(float y = -1.0; y <= 1.0; y++) {\\n\\\n            for(float x = -1.0; x <= 1.0; x++) {\\n\\\n                vec3 offset = vec3(x, y, z);\\n\\\n                vec3 point = getWorleyCellPoint(centerCell, offset, freq);\\n\\\n\\n\\\n                float distance = length(pointInCell - point);\\n\\\n                if(distance < shortestDistance) {\\n\\\n                    shortestDistance = distance;\\n\\\n                }\\n\\\n            }\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    return shortestDistance;\\n\\\n}\\n\\\n\\n\\\nconst float MAX_FBM_ITERATIONS = 10.0;\\n\\\n\\n\\\nfloat worleyFBMNoise(vec3 p, float octaves, float scale) {\\n\\\n    float noise = 0.0;\\n\\\n    float freq = 1.0;\\n\\\n    float persistence = 0.625;\\n\\\n    for(float i = 0.0; i < MAX_FBM_ITERATIONS; i++) {\\n\\\n        if(i >= octaves) {\\n\\\n            break;\\n\\\n        }\\n\\\n\\n\\\n        noise += worleyNoise(p * scale, freq * scale) * persistence;\\n\\\n        persistence *= 0.5;\\n\\\n        freq *= 2.0;\\n\\\n    }\\n\\\n    return noise;\\n\\\n}\\n\\\n\\n\\\nvoid main() {\\n\\\n    float textureSliceWidth = u_noiseTextureDimensions.x;\\n\\\n    float inverseNoiseTextureRows = u_noiseTextureDimensions.z;\\n\\\n    float x = mod(v_position.x, textureSliceWidth);\\n\\\n    float y = mod(v_position.y, textureSliceWidth);\\n\\\n    float sliceRow = floor(v_position.y / textureSliceWidth);\\n\\\n    float z = floor(v_position.x / textureSliceWidth) + sliceRow * inverseNoiseTextureRows * textureSliceWidth;\\n\\\n\\n\\\n    vec3 position = vec3(x, y, z);\\n\\\n    position /= u_noiseDetail;\\n\\\n    float worley0 = clamp(worleyFBMNoise(position, 3.0, 1.0), 0.0, 1.0);\\n\\\n    float worley1 = clamp(worleyFBMNoise(position, 3.0, 2.0), 0.0, 1.0);\\n\\\n    float worley2 = clamp(worleyFBMNoise(position, 3.0, 3.0), 0.0, 1.0);\\n\\\n    out_FragColor = vec4(worley0, worley1, worley2, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec3 u_noiseTextureDimensions;\\n\\\nin vec2 position;\\n\\\n\\n\\\nout vec2 v_position;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    gl_Position = vec4(position, 0.1, 1.0);\\n\\\n\\n\\\n    float textureSliceWidth = u_noiseTextureDimensions.x;\\n\\\n    float noiseTextureRows = u_noiseTextureDimensions.y;\\n\\\n    float inverseNoiseTextureRows = u_noiseTextureDimensions.z;\\n\\\n    vec2 transformedPos = (position * 0.5) + vec2(0.5);\\n\\\n    transformedPos *= textureSliceWidth;\\n\\\n    transformedPos.x *= textureSliceWidth * inverseNoiseTextureRows;\\n\\\n    transformedPos.y *= noiseTextureRows;\\n\\\n    v_position = transformedPos;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_opaqueDepthTexture;\\n\\\nuniform sampler2D u_translucentDepthTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float opaqueDepth = texture(u_opaqueDepthTexture, v_textureCoordinates).r;\\n\\\n    float translucentDepth = texture(u_translucentDepthTexture, v_textureCoordinates).r;\\n\\\n    translucentDepth = czm_branchFreeTernary(translucentDepth > opaqueDepth, 1.0, translucentDepth);\\n\\\n    out_FragColor = czm_packDepth(translucentDepth);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * Compositing for Weighted Blended Order-Independent Transparency. See:\\n\\\n * - http://jcgt.org/published/0002/02/09/\\n\\\n * - http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html\\n\\\n */\\n\\\n\\n\\\nuniform sampler2D u_opaque;\\n\\\nuniform sampler2D u_accumulation;\\n\\\nuniform sampler2D u_revealage;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 opaque = texture(u_opaque, v_textureCoordinates);\\n\\\n    vec4 accum = texture(u_accumulation, v_textureCoordinates);\\n\\\n    float r = texture(u_revealage, v_textureCoordinates).r;\\n\\\n\\n\\\n#ifdef MRT\\n\\\n    vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);\\n\\\n#else\\n\\\n    vec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r);\\n\\\n#endif\\n\\\n\\n\\\n    out_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque;\\n\\\n\\n\\\n    if (opaque != czm_backgroundColor)\\n\\\n    {\\n\\\n        out_FragColor.a = 1.0;\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform samplerCube u_radianceMap;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n\\n\\\nconst float twoSqrtPi = 2.0 * sqrt(czm_pi);\\n\\\n\\n\\\n// Coutesy of https://www.ppsloan.org/publications/StupidSH36.pdf\\n\\\nfloat computeShBasis(int index, vec3 s) {\\n\\\n    if (index == 0) { // l = 0, m = 0\\n\\\n        return 1.0 / twoSqrtPi;\\n\\\n    }\\n\\\n    \\n\\\n    if (index == 1) { // l = 1, m = -1\\n\\\n        return -sqrt(3.0) * s.y / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    if (index == 2) { // l = 1, m = 0\\n\\\n        return sqrt(3.0) * s.z / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    if (index == 3) { // l = 1, m = 1\\n\\\n        return -sqrt(3.0) * s.x / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    if (index == 4) { // l = 2, m = -2\\n\\\n        return sqrt(15.0) * s.y * s.x / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    if (index == 5) { // l = 2, m = -1\\n\\\n        return -sqrt(15.0) * s.y * s.z / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    if (index == 6) { // l = 2, m = 0\\n\\\n        return sqrt(5.0) * (3.0 * s.z * s.z - 1.0) / 2.0 / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    if (index == 7) { // l = 2, m = 1\\n\\\n        return -sqrt(15.0) * s.x * s.z / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    if (index == 8) { // l = 2, m = 2\\n\\\n        return sqrt(15.0) * (s.x * s.x - s.y * s.y) / 2.0 / twoSqrtPi;\\n\\\n    }\\n\\\n\\n\\\n    return 0.0;\\n\\\n}\\n\\\n\\n\\\nfloat vdcRadicalInverse(int i)\\n\\\n{\\n\\\n    float r;\\n\\\n    float base = 2.0;\\n\\\n    float value = 0.0;\\n\\\n    float invBase = 1.0 / base;\\n\\\n    float invBi = invBase;\\n\\\n    for (int x = 0; x < 100; x++)\\n\\\n    {\\n\\\n        if (i <= 0)\\n\\\n        {\\n\\\n            break;\\n\\\n        }\\n\\\n        r = mod(float(i), base);\\n\\\n        value += r * invBi;\\n\\\n        invBi *= invBase;\\n\\\n        i = int(float(i) * invBase);\\n\\\n    }\\n\\\n    return value;\\n\\\n}\\n\\\n\\n\\\nvec2 hammersley2D(int i, int N)\\n\\\n{\\n\\\n    return vec2(float(i) / float(N), vdcRadicalInverse(i));\\n\\\n}\\n\\\n\\n\\\n// Sample count is relatively low for the sake of performance, but should still be enough to capture directionality needed for third-order harmonics\\n\\\nconst int samples = 256; \\n\\\nconst float solidAngle = 1.0 / float(samples);\\n\\\n\\n\\\nvoid main() {\\n\\\n    // Get the current coefficient based on the uv\\n\\\n   vec2 uv = v_textureCoordinates.xy * 3.0;\\n\\\n   int coefficientIndex = int(floor(uv.y) * 3.0 + floor(uv.x));\\n\\\n\\n\\\n    for (int i = 0; i < samples; ++i) {\\n\\\n        vec2 xi = hammersley2D(i, samples);\\n\\\n        float phi = czm_twoPi * xi.x;\\n\\\n        float cosTheta = 1.0 - 2.0 * sqrt(1.0 - xi.y * xi.y);\\n\\\n        float sinTheta = sqrt(1.0 - cosTheta * cosTheta);\\n\\\n        vec3 direction = normalize(vec3(sinTheta * cos(phi), cosTheta, sinTheta * sin(phi)));\\n\\\n\\n\\\n        // Generate the spherical harmonics basis from the direction\\n\\\n        float Ylm = computeShBasis(coefficientIndex, direction);\\n\\\n\\n\\\n        vec3 lookupDirection = -direction.xyz;\\n\\\n        lookupDirection.z = -lookupDirection.z;\\n\\\n\\n\\\n        vec4 color = czm_textureCube(u_radianceMap, lookupDirection, 0.0);\\n\\\n\\n\\\n        // Use the relevant function for this coefficient\\n\\\n        out_FragColor += Ylm * color * solidAngle * sinTheta;\\n\\\n    }\\n\\\n    \\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"precision highp float;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nuniform vec3 u_faceDirection; // Current cubemap face\\n\\\nuniform vec3 u_positionWC;\\n\\\nuniform mat4 u_enuToFixedFrame;\\n\\\nuniform vec4 u_brightnessSaturationGammaIntensity;\\n\\\nuniform vec4 u_groundColor; // alpha component represent albedo\\n\\\n\\n\\\nvec4 getCubeMapDirection(vec2 uv, vec3 faceDir) {\\n\\\n    vec2 scaledUV = uv * 2.0 - 1.0;\\n\\\n\\n\\\n    if (faceDir.x != 0.0) {\\n\\\n        return vec4(faceDir.x,  scaledUV.x * faceDir.x, -scaledUV.y, 0.0);\\n\\\n    } else if (faceDir.y != 0.0) {\\n\\\n        return vec4(scaledUV.x, -scaledUV.y * faceDir.y, faceDir.y, 0.0);\\n\\\n    } else {\\n\\\n        return vec4(scaledUV.x * faceDir.z, -faceDir.z, -scaledUV.y, 0.0); \\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nvoid main() {    \\n\\\n    float height = length(u_positionWC);\\n\\\n    float atmosphereInnerRadius = u_radiiAndDynamicAtmosphereColor.y;\\n\\\n    float ellipsoidHeight = max(height - atmosphereInnerRadius, 0.0);\\n\\\n\\n\\\n    // Scale the position to ensure the sky color is present, even when underground.\\n\\\n    vec3 positionWC = u_positionWC / height * (ellipsoidHeight + atmosphereInnerRadius);\\n\\\n\\n\\\n    float atmosphereOuterRadius = u_radiiAndDynamicAtmosphereColor.x;\\n\\\n    float atmosphereHeight = atmosphereOuterRadius - atmosphereInnerRadius;\\n\\\n\\n\\\n    vec3 direction = (u_enuToFixedFrame * getCubeMapDirection(v_textureCoordinates, u_faceDirection)).xyz;\\n\\\n    vec3 normalizedDirection = normalize(direction);\\n\\\n\\n\\\n    czm_ray ray = czm_ray(positionWC, normalizedDirection);\\n\\\n    czm_raySegment intersection = czm_raySphereIntersectionInterval(ray, vec3(0.0), atmosphereInnerRadius);\\n\\\n    if (!czm_isEmpty(intersection)) {\\n\\\n        intersection = czm_rayEllipsoidIntersectionInterval(ray, vec3(0.0), czm_ellipsoidInverseRadii);\\n\\\n    }\\n\\\n\\n\\\n    bool onEllipsoid = intersection.start >= 0.0;\\n\\\n    float rayLength = czm_branchFreeTernary(onEllipsoid, intersection.start, atmosphereOuterRadius);\\n\\\n\\n\\\n    // Compute sky color for each position on a sphere at radius centered around the provided position's origin\\n\\\n    vec3 skyPositionWC = positionWC + normalizedDirection * rayLength;\\n\\\n\\n\\\n    float lightEnum = u_radiiAndDynamicAtmosphereColor.z;\\n\\\n    vec3 lightDirectionWC = normalize(czm_getDynamicAtmosphereLightDirection(skyPositionWC, lightEnum));\\n\\\n    vec3 mieColor;\\n\\\n    vec3 rayleighColor;\\n\\\n    float opacity;\\n\\\n    czm_computeScattering(\\n\\\n        ray,\\n\\\n        rayLength,\\n\\\n        lightDirectionWC,\\n\\\n        atmosphereInnerRadius, \\n\\\n        rayleighColor,\\n\\\n        mieColor,\\n\\\n        opacity\\n\\\n    );\\n\\\n\\n\\\n    vec4 atmopshereColor = czm_computeAtmosphereColor(ray, lightDirectionWC, rayleighColor, mieColor, opacity);\\n\\\n\\n\\\n#ifdef ATMOSPHERE_COLOR_CORRECT\\n\\\n    const bool ignoreBlackPixels = true;\\n\\\n    atmopshereColor.rgb = czm_applyHSBShift(atmopshereColor.rgb, czm_atmosphereHsbShift, ignoreBlackPixels);\\n\\\n#endif\\n\\\n\\n\\\n    vec3 lookupDirection = -normalizedDirection;\\n\\\n     // Flipping the X vector is a cheap way to get the inverse of czm_temeToPseudoFixed, since that's a rotation about Z.\\n\\\n    lookupDirection.x = -lookupDirection.x;\\n\\\n    lookupDirection = -normalize(czm_temeToPseudoFixed * lookupDirection);\\n\\\n    lookupDirection.x = -lookupDirection.x;\\n\\\n\\n\\\n    // Values outside the atmopshere are rendered as black, when they should be treated as transparent\\n\\\n    float skyAlpha = clamp((1.0 - ellipsoidHeight / atmosphereHeight) * atmopshereColor.a, 0.0, 1.0);\\n\\\n    skyAlpha = czm_branchFreeTernary(length(atmopshereColor.rgb) <= czm_epsilon7, 0.0, skyAlpha); // Treat black as transparent\\n\\\n\\n\\\n    // Blend starmap with atmopshere scattering\\n\\\n    float intensity = u_brightnessSaturationGammaIntensity.w;\\n\\\n    vec4 sceneSkyBoxColor = czm_textureCube(czm_environmentMap, lookupDirection);\\n\\\n    vec3 skyBackgroundColor = mix(czm_backgroundColor.rgb, sceneSkyBoxColor.rgb, sceneSkyBoxColor.a);\\n\\\n    vec4 combinedSkyColor = vec4(mix(skyBackgroundColor, atmopshereColor.rgb * intensity, skyAlpha), 1.0);\\n\\\n\\n\\\n    // Compute ground color based on amount of reflected light, then blend it with ground atmosphere based on height\\n\\\n    vec3 up = normalize(positionWC);\\n\\\n    float occlusion = max(dot(lightDirectionWC, up), 0.05);\\n\\\n    vec4 groundColor = vec4(u_groundColor.rgb * u_groundColor.a * (vec3(intensity * occlusion) + atmopshereColor.rgb), 1.0);\\n\\\n    vec4 blendedGroundColor = mix(groundColor, atmopshereColor, clamp(ellipsoidHeight / atmosphereHeight, 0.0, 1.0));\\n\\\n\\n\\\n    vec4 color = czm_branchFreeTernary(onEllipsoid, blendedGroundColor, combinedSkyColor);\\n\\\n\\n\\\n    float brightness = u_brightnessSaturationGammaIntensity.x;\\n\\\n    float saturation = u_brightnessSaturationGammaIntensity.y;\\n\\\n    float gamma = u_brightnessSaturationGammaIntensity.z;\\n\\\n\\n\\\n#ifdef ENVIRONMENT_COLOR_CORRECT\\n\\\n    color.rgb = mix(vec3(0.0), color.rgb, brightness);\\n\\\n    color.rgb = czm_saturation(color.rgb, saturation);\\n\\\n#endif\\n\\\n    color.rgb = pow(color.rgb, vec3(gamma)); // Normally this would be in the ifdef above, but there is a precision issue with the atmopshere scattering transmittance (alpha). Having this line is a workaround for that issue, even when gamma is 1.0.\\n\\\n    color.rgb = czm_gammaCorrect(color.rgb);\\n\\\n\\n\\\n    out_FragColor = color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"precision highp float;\\n\\\n\\n\\\nin vec3 v_textureCoordinates;\\n\\\n\\n\\\nuniform float u_roughness;\\n\\\nuniform samplerCube u_radianceTexture;\\n\\\nuniform vec3 u_faceDirection;\\n\\\n\\n\\\nfloat vdcRadicalInverse(int i)\\n\\\n{\\n\\\n    float r;\\n\\\n    float base = 2.0;\\n\\\n    float value = 0.0;\\n\\\n    float invBase = 1.0 / base;\\n\\\n    float invBi = invBase;\\n\\\n    for (int x = 0; x < 100; x++)\\n\\\n    {\\n\\\n        if (i <= 0)\\n\\\n        {\\n\\\n            break;\\n\\\n        }\\n\\\n        r = mod(float(i), base);\\n\\\n        value += r * invBi;\\n\\\n        invBi *= invBase;\\n\\\n        i = int(float(i) * invBase);\\n\\\n    }\\n\\\n    return value;\\n\\\n}\\n\\\n\\n\\\nvec2 hammersley2D(int i, int N)\\n\\\n{\\n\\\n    return vec2(float(i) / float(N), vdcRadicalInverse(i));\\n\\\n}\\n\\\n\\n\\\nvec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N)\\n\\\n{\\n\\\n    float alphaRoughnessSquared = alphaRoughness * alphaRoughness;\\n\\\n    float phi = czm_twoPi * xi.x;\\n\\\n    float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y));\\n\\\n    float sinTheta = sqrt(1.0 - cosTheta * cosTheta);\\n\\\n    vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);\\n\\\n    vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);\\n\\\n    vec3 tangentX = normalize(cross(upVector, N));\\n\\\n    vec3 tangentY = cross(N, tangentX);\\n\\\n    return tangentX * H.x + tangentY * H.y + N * H.z;\\n\\\n}\\n\\\n\\n\\\n// Sample count is relatively low for the sake of performance, but should still be enough to prevent artifacting in lower roughnesses\\n\\\nconst int samples = 128;\\n\\\n\\n\\\nvoid main() {\\n\\\n    vec3 normal = u_faceDirection;\\n\\\n    vec3 V = normalize(v_textureCoordinates);\\n\\\n    float roughness = u_roughness;\\n\\\n\\n\\\n    vec4 color = vec4(0.0);\\n\\\n    float weight = 0.0;\\n\\\n    for (int i = 0; i < samples; ++i) {\\n\\\n            vec2 xi = hammersley2D(i, samples);\\n\\\n            vec3 H = importanceSampleGGX(xi, roughness, V);\\n\\\n            vec3 L = 2.0 * dot(V, H) * H - V; // reflected vector\\n\\\n\\n\\\n            float NdotL = max(dot(V, L), 0.0);\\n\\\n            if (NdotL > 0.0) {\\n\\\n                color += vec4(czm_textureCube(u_radianceTexture, L).rgb, 1.0) * NdotL;\\n\\\n                weight += NdotL;\\n\\\n            }\\n\\\n        }\\n\\\n    out_FragColor = color / weight;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position;\\n\\\nout vec3 v_textureCoordinates;\\n\\\n\\n\\\nuniform vec3 u_faceDirection;\\n\\\n\\n\\\nvec3 getCubeMapDirection(vec2 uv, vec3 faceDir) {\\n\\\n    vec2 scaledUV = uv;\\n\\\n\\n\\\n    if (faceDir.x != 0.0) {\\n\\\n        return vec3(faceDir.x, scaledUV.y, scaledUV.x * faceDir.x);\\n\\\n    } else if (faceDir.y != 0.0) {\\n\\\n        return vec3(scaledUV.x, -faceDir.y, -scaledUV.y * faceDir.y);\\n\\\n    } else {\\n\\\n        return vec3(scaledUV.x * faceDir.z, scaledUV.y, -faceDir.z); \\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nvoid main() \\n\\\n{\\n\\\n    v_textureCoordinates = getCubeMapDirection(position.xy, u_faceDirection);\\n\\\n    v_textureCoordinates.y = -v_textureCoordinates.y;\\n\\\n    v_textureCoordinates.z = -v_textureCoordinates.z;\\n\\\n    gl_Position = vec4(position, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform mat3 u_cubeMapPanoramaTransform;\\n\\\n\\n\\\nin vec3 position;\\n\\\nout vec3 v_texCoord;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec3 p = czm_viewRotation * (u_cubeMapPanoramaTransform * (czm_entireFrustum.y * position));\\n\\\n    gl_Position = czm_projection * vec4(p, 1.0);\\n\\\n    v_texCoord = position.xyz;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 positionEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec3 position;\\n\\\n    vec3 direction;\\n\\\n    if (czm_orthographicIn3D == 1.0)\\n\\\n    {\\n\\\n        vec2 uv = (gl_FragCoord.xy -  czm_viewport.xy) / czm_viewport.zw;\\n\\\n        vec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y); // left, bottom\\n\\\n        vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); // right, top\\n\\\n        position = vec3(mix(minPlane, maxPlane, uv), 0.0);\\n\\\n        direction = vec3(0.0, 0.0, -1.0);\\n\\\n    } \\n\\\n    else \\n\\\n    {\\n\\\n        position = vec3(0.0);\\n\\\n        direction = normalize(positionEC.xyz);\\n\\\n    }\\n\\\n\\n\\\n    czm_ray ray = czm_ray(position, direction);\\n\\\n\\n\\\n    vec3 ellipsoid_center = czm_view[3].xyz;\\n\\\n\\n\\\n    czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\\n\\\n    if (!czm_isEmpty(intersection))\\n\\\n    {\\n\\\n        out_FragColor = vec4(1.0, 1.0, 0.0, 1.0);\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    czm_writeLogDepth();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 position;\\n\\\n\\n\\\nout vec4 positionEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    positionEC = czm_modelView * position;\\n\\\n    gl_Position = czm_projection * positionEC;\\n\\\n\\n\\\n    czm_vertexLogDepth();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec3 u_radii;\\n\\\nuniform vec3 u_oneOverEllipsoidRadiiSquared;\\n\\\n\\n\\\nin vec3 v_positionEC;\\n\\\n\\n\\\nvec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)\\n\\\n{\\n\\\n    vec3 positionEC = czm_pointAlongRay(ray, intersection);\\n\\\n    vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;\\n\\\n    vec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared));\\n\\\n    vec3 sphericalNormal = normalize(positionMC / u_radii);\\n\\\n    vec3 normalMC = geodeticNormal * side;              // normalized surface normal (always facing the viewer) in model coordinates\\n\\\n    vec3 normalEC = normalize(czm_normal * normalMC);   // normalized surface normal in eye coordinates\\n\\\n\\n\\\n    vec2 st = czm_ellipsoidTextureCoordinates(sphericalNormal);\\n\\\n    vec3 positionToEyeEC = -positionEC;\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n    materialInput.s = st.s;\\n\\\n    materialInput.st = st;\\n\\\n    materialInput.str = (positionMC + u_radii) / u_radii;\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n    materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\\n\\\n    materialInput.positionToEyeEC = positionToEyeEC;\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef ONLY_SUN_LIGHTING\\n\\\n    return czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC);\\n\\\n#else\\n\\\n    return czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    // PERFORMANCE_TODO: When dynamic branching is available, compute ratio of maximum and minimum radii\\n\\\n    // in the vertex shader. Only when it is larger than some constant, march along the ray.\\n\\\n    // Otherwise perform one intersection test which will be the common case.\\n\\\n\\n\\\n    // Test if the ray intersects a sphere with the ellipsoid's maximum radius.\\n\\\n    // For very oblate ellipsoids, using the ellipsoid's radii for an intersection test\\n\\\n    // may cause false negatives. This will discard fragments before marching the ray forward.\\n\\\n    float maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5;\\n\\\n    vec3 direction = normalize(v_positionEC);\\n\\\n    vec3 ellipsoidCenter = czm_modelView[3].xyz;\\n\\\n\\n\\\n    float t1 = -1.0;\\n\\\n    float t2 = -1.0;\\n\\\n\\n\\\n    float b = -2.0 * dot(direction, ellipsoidCenter);\\n\\\n    float c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius;\\n\\\n\\n\\\n    float discriminant = b * b - 4.0 * c;\\n\\\n    if (discriminant >= 0.0) {\\n\\\n        t1 = (-b - sqrt(discriminant)) * 0.5;\\n\\\n        t2 = (-b + sqrt(discriminant)) * 0.5;\\n\\\n    }\\n\\\n\\n\\\n    if (t1 < 0.0 && t2 < 0.0) {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    float t = min(t1, t2);\\n\\\n    if (t < 0.0) {\\n\\\n        t = 0.0;\\n\\\n    }\\n\\\n\\n\\\n    // March ray forward to intersection with larger sphere and find\\n\\\n    czm_ray ray = czm_ray(t * direction, direction);\\n\\\n\\n\\\n    vec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z);\\n\\\n\\n\\\n    czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);\\n\\\n\\n\\\n    if (czm_isEmpty(intersection))\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    // If the viewer is outside, compute outsideFaceColor, with normals facing outward.\\n\\\n    vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0);\\n\\\n\\n\\\n    // If the viewer either is inside or can see inside, compute insideFaceColor, with normals facing inward.\\n\\\n    vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0);\\n\\\n\\n\\\n    out_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);\\n\\\n    out_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);\\n\\\n\\n\\\n#if (defined(WRITE_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))\\n\\\n    t = (intersection.start != 0.0) ? intersection.start : intersection.stop;\\n\\\n    vec3 positionEC = czm_pointAlongRay(ray, t);\\n\\\n    vec4 positionCC = czm_projection * vec4(positionEC, 1.0);\\n\\\n#ifdef LOG_DEPTH\\n\\\n    czm_writeLogDepth(1.0 + positionCC.w);\\n\\\n#else\\n\\\n    float z = positionCC.z / positionCC.w;\\n\\\n\\n\\\n    float n = czm_depthRange.near;\\n\\\n    float f = czm_depthRange.far;\\n\\\n\\n\\\n    gl_FragDepth = (z * (f - n) + f + n) * 0.5;\\n\\\n#endif\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position;\\n\\\n\\n\\\nuniform vec3 u_radii;\\n\\\n\\n\\\nout vec3 v_positionEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    // In the vertex data, the cube goes from (-1.0, -1.0, -1.0) to (1.0, 1.0, 1.0) in model coordinates.\\n\\\n    // Scale to consider the radii.  We could also do this once on the CPU when using the BoxGeometry,\\n\\\n    // but doing it here allows us to change the radii without rewriting the vertex data, and\\n\\\n    // allows all ellipsoids to reuse the same vertex data.\\n\\\n    vec4 p = vec4(u_radii * position, 1.0);\\n\\\n    \\n\\\n    vec4 pEC = czm_modelView * p;\\n\\\n    v_positionEC = pEC.xyz;     // position in eye coordinates\\n\\\n    gl_Position = czm_projection * pEC;\\n\\\n    // With multi-frustum, when the ellipsoid primitive is positioned on the intersection of two frustums\\n\\\n    // and close to terrain, the terrain (writes depth) in the closest frustum can overwrite part of the\\n\\\n    // ellipsoid (does not write depth) that was rendered in the farther frustum.\\n\\\n    //\\n\\\n    // Here, we clamp the depth in the vertex shader to avoid being overwritten; however, this creates\\n\\\n    // artifacts since some fragments can be alpha blended twice.  This is solved by only rendering\\n\\\n    // the ellipsoid in the closest frustum to the viewer.\\n\\\n    gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far);\\n\\\n\\n\\\n    czm_vertexLogDepth();\\n\\\n}\\n\\\n\";\n","/**\n * @license\n * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *  * Neither the name of NVIDIA CORPORATION nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n//This file is automatically rebuilt by the Cesium build process.\nexport default \"/**\\n\\\n * @license\\n\\\n * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\\n\\\n *\\n\\\n * Redistribution and use in source and binary forms, with or without\\n\\\n * modification, are permitted provided that the following conditions\\n\\\n * are met:\\n\\\n *  * Redistributions of source code must retain the above copyright\\n\\\n *    notice, this list of conditions and the following disclaimer.\\n\\\n *  * Redistributions in binary form must reproduce the above copyright\\n\\\n *    notice, this list of conditions and the following disclaimer in the\\n\\\n *    documentation and/or other materials provided with the distribution.\\n\\\n *  * Neither the name of NVIDIA CORPORATION nor the names of its\\n\\\n *    contributors may be used to endorse or promote products derived\\n\\\n *    from this software without specific prior written permission.\\n\\\n *\\n\\\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\\n\\\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\n\\\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\\n\\\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\\n\\\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\\n\\\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\\n\\\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\\n\\\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\\n\\\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\\n\\\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\\n\\\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\\n */\\n\\\n\\n\\\n// NVIDIA GameWorks Graphics Samples GitHub link: https://github.com/NVIDIAGameWorks/GraphicsSamples\\n\\\n// Original source (archived): https://archive.org/details/nvidiagame-works-graphics-samples-master\\n\\\n// Original FXAA 3.11 shader link: https://github.com/NVIDIAGameWorks/GraphicsSamples/blob/master/samples/es3-kepler/FXAA/FXAA3_11.h\\n\\\n// Shader link in fork: https://github.com/lyntel/GraphicsSamples/blob/3d30817ebeeade64fe6a4fc3aa1fe4265c29b6fd/samples/es3-kepler/FXAA/FXAA3_11.h\\n\\\n\\n\\\n// Steps used to integrate into Cesium:\\n\\\n// * The following defines are set:\\n\\\n//       #define FXAA_PC 1\\n\\\n//       #define FXAA_WEBGL_1 1\\n\\\n//       #define FXAA_GREEN_AS_LUMA 1\\n\\\n//       #define FXAA_EARLY_EXIT 1\\n\\\n//       #define FXAA_GLSL_120 1\\n\\\n// * All other preprocessor directives besides the FXAA_QUALITY__P* directives were removed.\\n\\\n// * Double underscores are invalid for preprocessor directives so replace them with a single underscore. Replace\\n\\\n//   /FXAA_QUALITY__P(.*)/g with /FXAA_QUALITY__P$1/.\\n\\\n// * There are no implicit conversions from ivec* to vec* so replace:\\n\\\n//       #define FxaaInt2 ivec2\\n\\\n//           with\\n\\\n//       #define FxaaInt2 vec2\\n\\\n// * The texture2DLod function is only available in vertex shaders so replace:\\n\\\n//       #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\\n\\\n//       #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\\n\\\n//           with\\n\\\n//       #define FxaaTexTop(t, p) texture(t, p)\\n\\\n//       #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r))\\n\\\n// * FXAA_QUALITY_PRESET is prepended in the javascript code. We may want to expose that setting in the future.\\n\\\n// * The following parameters to FxaaPixelShader are unused and can be removed:\\n\\\n//       fxaaConsolePosPos\\n\\\n//       fxaaConsoleRcpFrameOpt\\n\\\n//       fxaaConsoleRcpFrameOpt2\\n\\\n//       fxaaConsole360RcpFrameOpt2\\n\\\n//       fxaaConsoleEdgeSharpness\\n\\\n//       fxaaConsoleEdgeThreshold\\n\\\n//       fxaaConsoleEdgeThresholdMi\\n\\\n//       fxaaConsole360ConstDir\\n\\\n\\n\\\n//\\n\\\n// Choose the quality preset.\\n\\\n// This needs to be compiled into the shader as it effects code.\\n\\\n// Best option to include multiple presets is to\\n\\\n// in each shader define the preset, then include this file.\\n\\\n//\\n\\\n// OPTIONS\\n\\\n// -----------------------------------------------------------------------\\n\\\n// 10 to 15 - default medium dither (10=fastest, 15=highest quality)\\n\\\n// 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\\n\\\n// 39       - no dither, very expensive\\n\\\n//\\n\\\n// NOTES\\n\\\n// -----------------------------------------------------------------------\\n\\\n// 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\\n\\\n// 13 = about same speed as FXAA 3.9 and better than 12\\n\\\n// 23 = closest to FXAA 3.9 visually and performance wise\\n\\\n//  _ = the lowest digit is directly related to performance\\n\\\n// _  = the highest digit is directly related to style\\n\\\n//\\n\\\n//#define FXAA_QUALITY_PRESET 12\\n\\\n\\n\\\n\\n\\\n#if (FXAA_QUALITY_PRESET == 10)\\n\\\n    #define FXAA_QUALITY_PS 3\\n\\\n    #define FXAA_QUALITY_P0 1.5\\n\\\n    #define FXAA_QUALITY_P1 3.0\\n\\\n    #define FXAA_QUALITY_P2 12.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 11)\\n\\\n    #define FXAA_QUALITY_PS 4\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 3.0\\n\\\n    #define FXAA_QUALITY_P3 12.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 12)\\n\\\n    #define FXAA_QUALITY_PS 5\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 4.0\\n\\\n    #define FXAA_QUALITY_P4 12.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 13)\\n\\\n    #define FXAA_QUALITY_PS 6\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 4.0\\n\\\n    #define FXAA_QUALITY_P5 12.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 14)\\n\\\n    #define FXAA_QUALITY_PS 7\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 4.0\\n\\\n    #define FXAA_QUALITY_P6 12.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 15)\\n\\\n    #define FXAA_QUALITY_PS 8\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 2.0\\n\\\n    #define FXAA_QUALITY_P6 4.0\\n\\\n    #define FXAA_QUALITY_P7 12.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 20)\\n\\\n    #define FXAA_QUALITY_PS 3\\n\\\n    #define FXAA_QUALITY_P0 1.5\\n\\\n    #define FXAA_QUALITY_P1 2.0\\n\\\n    #define FXAA_QUALITY_P2 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 21)\\n\\\n    #define FXAA_QUALITY_PS 4\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 22)\\n\\\n    #define FXAA_QUALITY_PS 5\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 23)\\n\\\n    #define FXAA_QUALITY_PS 6\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 24)\\n\\\n    #define FXAA_QUALITY_PS 7\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 3.0\\n\\\n    #define FXAA_QUALITY_P6 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 25)\\n\\\n    #define FXAA_QUALITY_PS 8\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 2.0\\n\\\n    #define FXAA_QUALITY_P6 4.0\\n\\\n    #define FXAA_QUALITY_P7 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 26)\\n\\\n    #define FXAA_QUALITY_PS 9\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 2.0\\n\\\n    #define FXAA_QUALITY_P6 2.0\\n\\\n    #define FXAA_QUALITY_P7 4.0\\n\\\n    #define FXAA_QUALITY_P8 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 27)\\n\\\n    #define FXAA_QUALITY_PS 10\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 2.0\\n\\\n    #define FXAA_QUALITY_P6 2.0\\n\\\n    #define FXAA_QUALITY_P7 2.0\\n\\\n    #define FXAA_QUALITY_P8 4.0\\n\\\n    #define FXAA_QUALITY_P9 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 28)\\n\\\n    #define FXAA_QUALITY_PS 11\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 2.0\\n\\\n    #define FXAA_QUALITY_P6 2.0\\n\\\n    #define FXAA_QUALITY_P7 2.0\\n\\\n    #define FXAA_QUALITY_P8 2.0\\n\\\n    #define FXAA_QUALITY_P9 4.0\\n\\\n    #define FXAA_QUALITY_P10 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 29)\\n\\\n    #define FXAA_QUALITY_PS 12\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.5\\n\\\n    #define FXAA_QUALITY_P2 2.0\\n\\\n    #define FXAA_QUALITY_P3 2.0\\n\\\n    #define FXAA_QUALITY_P4 2.0\\n\\\n    #define FXAA_QUALITY_P5 2.0\\n\\\n    #define FXAA_QUALITY_P6 2.0\\n\\\n    #define FXAA_QUALITY_P7 2.0\\n\\\n    #define FXAA_QUALITY_P8 2.0\\n\\\n    #define FXAA_QUALITY_P9 2.0\\n\\\n    #define FXAA_QUALITY_P10 4.0\\n\\\n    #define FXAA_QUALITY_P11 8.0\\n\\\n#endif\\n\\\n#if (FXAA_QUALITY_PRESET == 39)\\n\\\n    #define FXAA_QUALITY_PS 12\\n\\\n    #define FXAA_QUALITY_P0 1.0\\n\\\n    #define FXAA_QUALITY_P1 1.0\\n\\\n    #define FXAA_QUALITY_P2 1.0\\n\\\n    #define FXAA_QUALITY_P3 1.0\\n\\\n    #define FXAA_QUALITY_P4 1.0\\n\\\n    #define FXAA_QUALITY_P5 1.5\\n\\\n    #define FXAA_QUALITY_P6 2.0\\n\\\n    #define FXAA_QUALITY_P7 2.0\\n\\\n    #define FXAA_QUALITY_P8 2.0\\n\\\n    #define FXAA_QUALITY_P9 2.0\\n\\\n    #define FXAA_QUALITY_P10 4.0\\n\\\n    #define FXAA_QUALITY_P11 8.0\\n\\\n#endif\\n\\\n\\n\\\n#define FxaaBool bool\\n\\\n#define FxaaFloat float\\n\\\n#define FxaaFloat2 vec2\\n\\\n#define FxaaFloat3 vec3\\n\\\n#define FxaaFloat4 vec4\\n\\\n#define FxaaHalf float\\n\\\n#define FxaaHalf2 vec2\\n\\\n#define FxaaHalf3 vec3\\n\\\n#define FxaaHalf4 vec4\\n\\\n#define FxaaInt2 vec2\\n\\\n#define FxaaTex sampler2D\\n\\\n\\n\\\n#define FxaaSat(x) clamp(x, 0.0, 1.0)\\n\\\n#define FxaaTexTop(t, p) texture(t, p)\\n\\\n#define FxaaTexOff(t, p, o, r) texture(t, p + (o * r))\\n\\\n\\n\\\nFxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\\n\\\n\\n\\\nFxaaFloat4 FxaaPixelShader(\\n\\\n    //\\n\\\n    // Use noperspective interpolation here (turn off perspective interpolation).\\n\\\n    // {xy} = center of pixel\\n\\\n    FxaaFloat2 pos,\\n\\\n    //\\n\\\n    // Input color texture.\\n\\\n    // {rgb_} = color in linear or perceptual color space\\n\\\n    // if (FXAA_GREEN_AS_LUMA == 0)\\n\\\n    //     {___a} = luma in perceptual color space (not linear)\\n\\\n    FxaaTex tex,\\n\\\n    //\\n\\\n    // Only used on FXAA Quality.\\n\\\n    // This must be from a constant/uniform.\\n\\\n    // {x_} = 1.0/screenWidthInPixels\\n\\\n    // {_y} = 1.0/screenHeightInPixels\\n\\\n    FxaaFloat2 fxaaQualityRcpFrame,\\n\\\n    //\\n\\\n    // Only used on FXAA Quality.\\n\\\n    // This used to be the FXAA_QUALITY_SUBPIX define.\\n\\\n    // It is here now to allow easier tuning.\\n\\\n    // Choose the amount of sub-pixel aliasing removal.\\n\\\n    // This can effect sharpness.\\n\\\n    //   1.00 - upper limit (softer)\\n\\\n    //   0.75 - default amount of filtering\\n\\\n    //   0.50 - lower limit (sharper, less sub-pixel aliasing removal)\\n\\\n    //   0.25 - almost off\\n\\\n    //   0.00 - completely off\\n\\\n    FxaaFloat fxaaQualitySubpix,\\n\\\n    //\\n\\\n    // Only used on FXAA Quality.\\n\\\n    // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\\n\\\n    // It is here now to allow easier tuning.\\n\\\n    // The minimum amount of local contrast required to apply algorithm.\\n\\\n    //   0.333 - too little (faster)\\n\\\n    //   0.250 - low quality\\n\\\n    //   0.166 - default\\n\\\n    //   0.125 - high quality\\n\\\n    //   0.063 - overkill (slower)\\n\\\n    FxaaFloat fxaaQualityEdgeThreshold,\\n\\\n    //\\n\\\n    // Only used on FXAA Quality.\\n\\\n    // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\\n\\\n    // It is here now to allow easier tuning.\\n\\\n    // Trims the algorithm from processing darks.\\n\\\n    //   0.0833 - upper limit (default, the start of visible unfiltered edges)\\n\\\n    //   0.0625 - high quality (faster)\\n\\\n    //   0.0312 - visible limit (slower)\\n\\\n    // Special notes when using FXAA_GREEN_AS_LUMA,\\n\\\n    //   Likely want to set this to zero.\\n\\\n    //   As colors that are mostly not-green\\n\\\n    //   will appear very dark in the green channel!\\n\\\n    //   Tune by looking at mostly non-green content,\\n\\\n    //   then start at zero and increase until aliasing is a problem.\\n\\\n    FxaaFloat fxaaQualityEdgeThresholdMin\\n\\\n) {\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat2 posM;\\n\\\n    posM.x = pos.x;\\n\\\n    posM.y = pos.y;\\n\\\n    FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\\n\\\n    #define lumaM rgbyM.y\\n\\\n    FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\\n\\\n    FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\\n\\\n    FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\\n\\\n    FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat maxSM = max(lumaS, lumaM);\\n\\\n    FxaaFloat minSM = min(lumaS, lumaM);\\n\\\n    FxaaFloat maxESM = max(lumaE, maxSM);\\n\\\n    FxaaFloat minESM = min(lumaE, minSM);\\n\\\n    FxaaFloat maxWN = max(lumaN, lumaW);\\n\\\n    FxaaFloat minWN = min(lumaN, lumaW);\\n\\\n    FxaaFloat rangeMax = max(maxWN, maxESM);\\n\\\n    FxaaFloat rangeMin = min(minWN, minESM);\\n\\\n    FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\\n\\\n    FxaaFloat range = rangeMax - rangeMin;\\n\\\n    FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\\n\\\n    FxaaBool earlyExit = range < rangeMaxClamped;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    if(earlyExit)\\n\\\n        return rgbyM;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\\n\\\n    FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\\n\\\n    FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\\n\\\n    FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat lumaNS = lumaN + lumaS;\\n\\\n    FxaaFloat lumaWE = lumaW + lumaE;\\n\\\n    FxaaFloat subpixRcpRange = 1.0/range;\\n\\\n    FxaaFloat subpixNSWE = lumaNS + lumaWE;\\n\\\n    FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\\n\\\n    FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat lumaNESE = lumaNE + lumaSE;\\n\\\n    FxaaFloat lumaNWNE = lumaNW + lumaNE;\\n\\\n    FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\\n\\\n    FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat lumaNWSW = lumaNW + lumaSW;\\n\\\n    FxaaFloat lumaSWSE = lumaSW + lumaSE;\\n\\\n    FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\\n\\\n    FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\\n\\\n    FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\\n\\\n    FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\\n\\\n    FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\\n\\\n    FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\\n\\\n    FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\\n\\\n    FxaaBool horzSpan = edgeHorz >= edgeVert;\\n\\\n    FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    if(!horzSpan) lumaN = lumaW;\\n\\\n    if(!horzSpan) lumaS = lumaE;\\n\\\n    if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\\n\\\n    FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat gradientN = lumaN - lumaM;\\n\\\n    FxaaFloat gradientS = lumaS - lumaM;\\n\\\n    FxaaFloat lumaNN = lumaN + lumaM;\\n\\\n    FxaaFloat lumaSS = lumaS + lumaM;\\n\\\n    FxaaBool pairN = abs(gradientN) >= abs(gradientS);\\n\\\n    FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\\n\\\n    if(pairN) lengthSign = -lengthSign;\\n\\\n    FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat2 posB;\\n\\\n    posB.x = posM.x;\\n\\\n    posB.y = posM.y;\\n\\\n    FxaaFloat2 offNP;\\n\\\n    offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\\n\\\n    offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\\n\\\n    if(!horzSpan) posB.x += lengthSign * 0.5;\\n\\\n    if( horzSpan) posB.y += lengthSign * 0.5;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat2 posN;\\n\\\n    posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\\n\\\n    posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\\n\\\n    FxaaFloat2 posP;\\n\\\n    posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\\n\\\n    posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\\n\\\n    FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\\n\\\n    FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\\n\\\n    FxaaFloat subpixE = subpixC * subpixC;\\n\\\n    FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    if(!pairN) lumaNN = lumaSS;\\n\\\n    FxaaFloat gradientScaled = gradient * 1.0/4.0;\\n\\\n    FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\\n\\\n    FxaaFloat subpixF = subpixD * subpixE;\\n\\\n    FxaaBool lumaMLTZero = lumaMM < 0.0;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    lumaEndN -= lumaNN * 0.5;\\n\\\n    lumaEndP -= lumaNN * 0.5;\\n\\\n    FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n    FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\\n\\\n    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\\n\\\n    FxaaBool doneNP = (!doneN) || (!doneP);\\n\\\n    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\\n\\\n    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    if(doneNP) {\\n\\\n        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n        doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n        doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\\n\\\n        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\\n\\\n        doneNP = (!doneN) || (!doneP);\\n\\\n        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\\n\\\n        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n        #if (FXAA_QUALITY_PS > 3)\\n\\\n        if(doneNP) {\\n\\\n            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n            doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n            doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\\n\\\n            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\\n\\\n            doneNP = (!doneN) || (!doneP);\\n\\\n            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\\n\\\n            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n            #if (FXAA_QUALITY_PS > 4)\\n\\\n            if(doneNP) {\\n\\\n                if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n                if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n                if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n                if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n                doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n                doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n                if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\\n\\\n                if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\\n\\\n                doneNP = (!doneN) || (!doneP);\\n\\\n                if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\\n\\\n                if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                #if (FXAA_QUALITY_PS > 5)\\n\\\n                if(doneNP) {\\n\\\n                    if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n                    if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n                    if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n                    if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n                    doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n                    doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n                    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\\n\\\n                    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\\n\\\n                    doneNP = (!doneN) || (!doneP);\\n\\\n                    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\\n\\\n                    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                    #if (FXAA_QUALITY_PS > 6)\\n\\\n                    if(doneNP) {\\n\\\n                        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n                        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n                        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n                        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n                        doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n                        doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n                        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\\n\\\n                        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\\n\\\n                        doneNP = (!doneN) || (!doneP);\\n\\\n                        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\\n\\\n                        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                        #if (FXAA_QUALITY_PS > 7)\\n\\\n                        if(doneNP) {\\n\\\n                            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n                            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n                            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n                            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n                            doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n                            doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n                            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\\n\\\n                            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\\n\\\n                            doneNP = (!doneN) || (!doneP);\\n\\\n                            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\\n\\\n                            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    #if (FXAA_QUALITY_PS > 8)\\n\\\n    if(doneNP) {\\n\\\n        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n        doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n        doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\\n\\\n        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\\n\\\n        doneNP = (!doneN) || (!doneP);\\n\\\n        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\\n\\\n        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n        #if (FXAA_QUALITY_PS > 9)\\n\\\n        if(doneNP) {\\n\\\n            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n            doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n            doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\\n\\\n            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\\n\\\n            doneNP = (!doneN) || (!doneP);\\n\\\n            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\\n\\\n            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n            #if (FXAA_QUALITY_PS > 10)\\n\\\n            if(doneNP) {\\n\\\n                if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n                if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n                if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n                if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n                doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n                doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n                if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\\n\\\n                if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\\n\\\n                doneNP = (!doneN) || (!doneP);\\n\\\n                if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\\n\\\n                if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                #if (FXAA_QUALITY_PS > 11)\\n\\\n                if(doneNP) {\\n\\\n                    if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n                    if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n                    if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n                    if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n                    doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n                    doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n                    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\\n\\\n                    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\\n\\\n                    doneNP = (!doneN) || (!doneP);\\n\\\n                    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\\n\\\n                    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                    #if (FXAA_QUALITY_PS > 12)\\n\\\n                    if(doneNP) {\\n\\\n                        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\n\\\n                        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\n\\\n                        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\n\\\n                        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\n\\\n                        doneN = abs(lumaEndN) >= gradientScaled;\\n\\\n                        doneP = abs(lumaEndP) >= gradientScaled;\\n\\\n                        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\\n\\\n                        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\\n\\\n                        doneNP = (!doneN) || (!doneP);\\n\\\n                        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\\n\\\n                        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                    }\\n\\\n                    #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                }\\n\\\n                #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n            }\\n\\\n            #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n        }\\n\\\n        #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    }\\n\\\n    #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                        }\\n\\\n                        #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                    }\\n\\\n                    #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n                }\\n\\\n                #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n            }\\n\\\n            #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n        }\\n\\\n        #endif\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    }\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat dstN = posM.x - posN.x;\\n\\\n    FxaaFloat dstP = posP.x - posM.x;\\n\\\n    if(!horzSpan) dstN = posM.y - posN.y;\\n\\\n    if(!horzSpan) dstP = posP.y - posM.y;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\\n\\\n    FxaaFloat spanLength = (dstP + dstN);\\n\\\n    FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\\n\\\n    FxaaFloat spanLengthRcp = 1.0/spanLength;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaBool directionN = dstN < dstP;\\n\\\n    FxaaFloat dst = min(dstN, dstP);\\n\\\n    FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\\n\\\n    FxaaFloat subpixG = subpixF * subpixF;\\n\\\n    FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\\n\\\n    FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\\n\\\n/*--------------------------------------------------------------------------*/\\n\\\n    FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\\n\\\n    FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\\n\\\n    if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\\n\\\n    if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\\n\\\n    return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 u_initialColor;\\n\\\n\\n\\\n#if TEXTURE_UNITS > 0\\n\\\nuniform sampler2D u_dayTextures[TEXTURE_UNITS];\\n\\\nuniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS];\\n\\\nuniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS];\\n\\\n\\n\\\n#ifdef APPLY_ALPHA\\n\\\nuniform float u_dayTextureAlpha[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_DAY_NIGHT_ALPHA\\n\\\nuniform float u_dayTextureNightAlpha[TEXTURE_UNITS];\\n\\\nuniform float u_dayTextureDayAlpha[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SPLIT\\n\\\nuniform float u_dayTextureSplit[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_BRIGHTNESS\\n\\\nuniform float u_dayTextureBrightness[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_CONTRAST\\n\\\nuniform float u_dayTextureContrast[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_HUE\\n\\\nuniform float u_dayTextureHue[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SATURATION\\n\\\nuniform float u_dayTextureSaturation[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_GAMMA\\n\\\nuniform float u_dayTextureOneOverGamma[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_IMAGERY_CUTOUT\\n\\\nuniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_COLOR_TO_ALPHA\\n\\\nuniform vec4 u_colorsToAlpha[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\nuniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];\\n\\\n#endif\\n\\\n\\n\\\n#if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))\\n\\\nuniform sampler2D u_waterMask;\\n\\\nuniform vec4 u_waterMaskTranslationAndScale;\\n\\\nuniform float u_zoomedOutOceanSpecularIntensity;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SHOW_OCEAN_WAVES\\n\\\nuniform sampler2D u_oceanNormalMap;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\\n\\\nuniform vec2 u_lightingFadeDistance;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TILE_LIMIT_RECTANGLE\\n\\\nuniform vec4 u_cartographicLimitRectangle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef GROUND_ATMOSPHERE\\n\\\nuniform vec2 u_nightFadeDistance;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_PLANES\\n\\\nuniform highp sampler2D u_clippingPlanes;\\n\\\nuniform mat4 u_clippingPlanesMatrix;\\n\\\nuniform vec4 u_clippingPlanesEdgeStyle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_POLYGONS\\n\\\nuniform highp sampler2D u_clippingDistance;\\n\\\nin vec2 v_clippingPosition;\\n\\\nflat in int v_regionIndex;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(GROUND_ATMOSPHERE) || defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\\n\\\nuniform float u_minimumBrightness;\\n\\\n#endif\\n\\\n\\n\\\n// Based on colorCorrect\\n\\\n// The colorCorrect flag can only be true when tileProvider.hue/saturation/brightnessShift \\n\\\n// are nonzero AND when (applyFog || showGroundAtmosphere) in the tile provider\\n\\\n// - The tileProvider.hue/saturation/brightnessShift are just passed through\\n\\\n//   from the Globe hue/saturation/brightness, like atmosphereBrightnessShift\\n\\\n// - The applyFog depends on enableFog, and some tile distance from the viewer\\n\\\n// - The showGroundAtmosphere is a flag that is passed through from the Globe,\\n\\\n//   and is true by default when the ellipsoid is WGS84\\n\\\n#ifdef COLOR_CORRECT\\n\\\nuniform vec3 u_hsbShift; // Hue, saturation, brightness\\n\\\n#endif\\n\\\n\\n\\\n// Based on highlightFillTile\\n\\\n// This is set for terrain tiles when they are \\\"fill\\\" tiles, and\\n\\\n// the terrainProvider.fillHighlightColor was set to a value with\\n\\\n// nonzero alpha\\n\\\n#ifdef HIGHLIGHT_FILL_TILE\\n\\\nuniform vec4 u_fillHighlightColor;\\n\\\n#endif\\n\\\n\\n\\\n// Based on translucent\\n\\\n// This is set depending on the GlobeTranslucencyState\\n\\\n#ifdef TRANSLUCENT\\n\\\nuniform vec4 u_frontFaceAlphaByDistance;\\n\\\nuniform vec4 u_backFaceAlphaByDistance;\\n\\\nuniform vec4 u_translucencyRectangle;\\n\\\n#endif\\n\\\n\\n\\\n// Based on showUndergroundColor\\n\\\n// This is set when GlobeSurfaceTileProvider.isUndergroundVisible \\n\\\n// returns true, AND the tileProvider.undergroundColor had a value with \\n\\\n// nonzero alpha, and the tileProvider.undergroundColorAlphaByDistance\\n\\\n// was in the right range\\n\\\n#ifdef UNDERGROUND_COLOR\\n\\\nuniform vec4 u_undergroundColor;\\n\\\nuniform vec4 u_undergroundColorAlphaByDistance;\\n\\\n#endif\\n\\\n\\n\\\n// Based on enableLighting && hasVertexNormals\\n\\\n// The enableLighting flag is passed in directly from the Globe.\\n\\\n// The hasVertexNormals flag is from the tileProvider\\n\\\n#ifdef ENABLE_VERTEX_LIGHTING\\n\\\nuniform float u_lambertDiffuseMultiplier;\\n\\\nuniform float u_vertexShadowDarkness;\\n\\\n#endif\\n\\\n\\n\\\nin vec3 v_positionMC;\\n\\\nin vec3 v_positionEC;\\n\\\nin vec3 v_textureCoordinates;\\n\\\nin vec3 v_normalMC;\\n\\\nin vec3 v_normalEC;\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\nin float v_height;\\n\\\nin float v_slope;\\n\\\nin float v_aspect;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\nin float v_distance;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(GROUND_ATMOSPHERE) || defined(FOG)\\n\\\nin vec3 v_atmosphereRayleighColor;\\n\\\nin vec3 v_atmosphereMieColor;\\n\\\nin float v_atmosphereOpacity;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\nfloat interpolateByDistance(vec4 nearFarScalar, float distance)\\n\\\n{\\n\\\n    float startDistance = nearFarScalar.x;\\n\\\n    float startValue = nearFarScalar.y;\\n\\\n    float endDistance = nearFarScalar.z;\\n\\\n    float endValue = nearFarScalar.w;\\n\\\n    float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);\\n\\\n    return mix(startValue, endValue, t);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL)\\n\\\nvec4 alphaBlend(vec4 sourceColor, vec4 destinationColor)\\n\\\n{\\n\\\n    return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TRANSLUCENT\\n\\\nbool inTranslucencyRectangle()\\n\\\n{\\n\\\n    return\\n\\\n        v_textureCoordinates.x > u_translucencyRectangle.x &&\\n\\\n        v_textureCoordinates.x < u_translucencyRectangle.z &&\\n\\\n        v_textureCoordinates.y > u_translucencyRectangle.y &&\\n\\\n        v_textureCoordinates.y < u_translucencyRectangle.w;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\nvec4 sampleAndBlend(\\n\\\n    vec4 previousColor,\\n\\\n    sampler2D textureToSample,\\n\\\n    vec2 tileTextureCoordinates,\\n\\\n    vec4 textureCoordinateRectangle,\\n\\\n    vec4 textureCoordinateTranslationAndScale,\\n\\\n    float textureAlpha,\\n\\\n    float textureNightAlpha,\\n\\\n    float textureDayAlpha,\\n\\\n    float textureBrightness,\\n\\\n    float textureContrast,\\n\\\n    float textureHue,\\n\\\n    float textureSaturation,\\n\\\n    float textureOneOverGamma,\\n\\\n    float split,\\n\\\n    vec4 colorToAlpha,\\n\\\n    float nightBlend)\\n\\\n{\\n\\\n    // This crazy step stuff sets the alpha to 0.0 if this following condition is true:\\n\\\n    //    tileTextureCoordinates.s < textureCoordinateRectangle.s ||\\n\\\n    //    tileTextureCoordinates.s > textureCoordinateRectangle.p ||\\n\\\n    //    tileTextureCoordinates.t < textureCoordinateRectangle.t ||\\n\\\n    //    tileTextureCoordinates.t > textureCoordinateRectangle.q\\n\\\n    // In other words, the alpha is zero if the fragment is outside the rectangle\\n\\\n    // covered by this texture.  Would an actual 'if' yield better performance?\\n\\\n    vec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates);\\n\\\n    textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\\n\\\n\\n\\\n    alphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates);\\n\\\n    textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;\\n\\\n\\n\\\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\\n\\\n    textureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend);\\n\\\n#endif\\n\\\n\\n\\\n    vec2 translation = textureCoordinateTranslationAndScale.xy;\\n\\\n    vec2 scale = textureCoordinateTranslationAndScale.zw;\\n\\\n    vec2 textureCoordinates = tileTextureCoordinates * scale + translation;\\n\\\n    vec4 value = texture(textureToSample, textureCoordinates);\\n\\\n    vec3 color = value.rgb;\\n\\\n    float alpha = value.a;\\n\\\n\\n\\\n#ifdef APPLY_COLOR_TO_ALPHA\\n\\\n    vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);\\n\\\n    colorDiff.r = czm_maximumComponent(colorDiff);\\n\\\n    alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);\\n\\\n#endif\\n\\\n\\n\\\n#if !defined(APPLY_GAMMA)\\n\\\n    vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));\\n\\\n    color = tempColor.rgb;\\n\\\n    alpha = tempColor.a;\\n\\\n#else\\n\\\n    color = pow(color, vec3(textureOneOverGamma));\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SPLIT\\n\\\n    float splitPosition = czm_splitPosition;\\n\\\n    // Split to the left\\n\\\n    if (split < 0.0 && gl_FragCoord.x > splitPosition) {\\n\\\n       alpha = 0.0;\\n\\\n    }\\n\\\n    // Split to the right\\n\\\n    else if (split > 0.0 && gl_FragCoord.x < splitPosition) {\\n\\\n       alpha = 0.0;\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_BRIGHTNESS\\n\\\n    color = mix(vec3(0.0), color, textureBrightness);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_CONTRAST\\n\\\n    color = mix(vec3(0.5), color, textureContrast);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_HUE\\n\\\n    color = czm_hue(color, textureHue);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_SATURATION\\n\\\n    color = czm_saturation(color, textureSaturation);\\n\\\n#endif\\n\\\n\\n\\\n    float sourceAlpha = alpha * textureAlpha;\\n\\\n    float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);\\n\\\n    outAlpha += sign(outAlpha) - 1.0;\\n\\\n\\n\\\n    vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;\\n\\\n\\n\\\n    // When rendering imagery for a tile in multiple passes,\\n\\\n    // some GPU/WebGL implementation combinations will not blend fragments in\\n\\\n    // additional passes correctly if their computation includes an unmasked\\n\\\n    // divide-by-zero operation,\\n\\\n    // even if it's not in the output or if the output has alpha zero.\\n\\\n    //\\n\\\n    // For example, without sanitization for outAlpha,\\n\\\n    // this renders without artifacts:\\n\\\n    //   if (outAlpha == 0.0) { outColor = vec3(0.0); }\\n\\\n    //\\n\\\n    // but using czm_branchFreeTernary will cause portions of the tile that are\\n\\\n    // alpha-zero in the additional pass to render as black instead of blending\\n\\\n    // with the previous pass:\\n\\\n    //   outColor = czm_branchFreeTernary(outAlpha == 0.0, vec3(0.0), outColor);\\n\\\n    //\\n\\\n    // So instead, sanitize against divide-by-zero,\\n\\\n    // store this state on the sign of outAlpha, and correct on return.\\n\\\n\\n\\\n    return vec4(outColor, max(outAlpha, 0.0));\\n\\\n}\\n\\\n\\n\\\nvec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend);\\n\\\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade);\\n\\\n\\n\\\nconst float fExposure = 2.0;\\n\\\n\\n\\\nvec3 computeEllipsoidPosition()\\n\\\n{\\n\\\n    float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0);\\n\\\n    vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0);\\n\\\n    xy *= czm_viewport.zw * mpp * 0.5;\\n\\\n\\n\\\n    vec3 direction;\\n\\\n    if (czm_orthographicIn3D == 1.0)\\n\\\n    {\\n\\\n        direction = vec3(0.0, 0.0, -1.0);\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        direction = normalize(vec3(xy, -czm_currentFrustum.x));\\n\\\n    }\\n\\\n\\n\\\n    czm_ray ray = czm_ray(vec3(0.0), direction);\\n\\\n\\n\\\n    vec3 ellipsoid_center = czm_view[3].xyz;\\n\\\n\\n\\\n    czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);\\n\\\n\\n\\\n    vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start);\\n\\\n    return (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz;\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n#ifdef TILE_LIMIT_RECTANGLE\\n\\\n    if (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x ||\\n\\\n        v_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y)\\n\\\n        {\\n\\\n            discard;\\n\\\n        }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_PLANES\\n\\\n    float clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix);\\n\\\n#endif\\n\\\n\\n\\\n#if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR)\\n\\\n    vec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0));   // normalized surface normal in model coordinates\\n\\\n    vec3 normalEC = czm_normal3D * normalMC;                                         // normalized surface normal in eye coordinates\\n\\\n#endif\\n\\\n\\n\\\n#if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)\\n\\\n    float nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0);\\n\\\n#else\\n\\\n    float nightBlend = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n    // The clamp below works around an apparent bug in Chrome Canary v23.0.1241.0\\n\\\n    // where the fragment shader sees textures coordinates < 0.0 and > 1.0 for the\\n\\\n    // fragments on the edges of tiles even though the vertex shader is outputting\\n\\\n    // coordinates strictly in the 0-1 range.\\n\\\n    vec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend);\\n\\\n\\n\\\n#ifdef SHOW_TILE_BOUNDARIES\\n\\\n    if (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) ||\\n\\\n        v_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0))\\n\\\n    {\\n\\\n        color = vec4(1.0, 0.0, 0.0, 1.0);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)\\n\\\n    float cameraDist;\\n\\\n    if (czm_sceneMode == czm_sceneMode2D)\\n\\\n    {\\n\\\n        cameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5;\\n\\\n    }\\n\\\n    else if (czm_sceneMode == czm_sceneModeColumbusView)\\n\\\n    {\\n\\\n        cameraDist = -czm_view[3].z;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        cameraDist = length(czm_view[3]);\\n\\\n    }\\n\\\n    float fadeOutDist = u_lightingFadeDistance.x;\\n\\\n    float fadeInDist = u_lightingFadeDistance.y;\\n\\\n    if (czm_sceneMode != czm_sceneMode3D) {\\n\\\n        vec3 radii = czm_ellipsoidRadii;\\n\\\n        float maxRadii = max(radii.x, max(radii.y, radii.z));\\n\\\n        fadeOutDist -= maxRadii;\\n\\\n        fadeInDist -= maxRadii;\\n\\\n    }\\n\\\n    float fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);\\n\\\n#else\\n\\\n    float fade = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))\\n\\\n    vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;\\n\\\n    vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;\\n\\\n    vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;\\n\\\n    waterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y;\\n\\\n\\n\\\n    float mask = texture(u_waterMask, waterMaskTextureCoordinates).r;\\n\\\n\\n\\\n    #ifdef SHOW_REFLECTIVE_OCEAN\\n\\\n    if (mask > 0.0)\\n\\\n    {\\n\\\n        mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);\\n\\\n\\n\\\n        vec2 ellipsoidTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC);\\n\\\n        vec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC.zyx);\\n\\\n\\n\\\n        vec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z));\\n\\\n\\n\\\n        color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);\\n\\\n    }\\n\\\n    #endif\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\n    czm_materialInput materialInput;\\n\\\n    materialInput.st = v_textureCoordinates.st;\\n\\\n    materialInput.normalEC = normalize(v_normalEC);\\n\\\n    materialInput.positionToEyeEC = -v_positionEC;\\n\\\n    materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalize(v_normalEC));\\n\\\n    materialInput.slope = v_slope;\\n\\\n    materialInput.height = v_height;\\n\\\n    materialInput.aspect = v_aspect;\\n\\\n    #ifdef HAS_WATER_MASK\\n\\\n        materialInput.waterMask = mask;\\n\\\n    #endif\\n\\\n\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n    vec4 materialColor = vec4(material.diffuse, material.alpha);\\n\\\n    color = alphaBlend(materialColor, color);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_VERTEX_LIGHTING\\n\\\n    float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * u_lambertDiffuseMultiplier + u_vertexShadowDarkness, 0.0, 1.0);\\n\\\n    vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\\n\\\n#elif defined(ENABLE_DAYNIGHT_SHADING)\\n\\\n    float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0);\\n\\\n    diffuseIntensity = mix(1.0, diffuseIntensity, fade);\\n\\\n    vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);\\n\\\n#else\\n\\\n    vec4 finalColor = color;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_PLANES\\n\\\n    vec4 clippingPlanesEdgeColor = vec4(1.0);\\n\\\n    clippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb;\\n\\\n    float clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a;\\n\\\n\\n\\\n    if (clipDistance < clippingPlanesEdgeWidth)\\n\\\n    {\\n\\\n        finalColor = clippingPlanesEdgeColor;\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_POLYGONS\\n\\\n    vec2 clippingPosition = v_clippingPosition;\\n\\\n    int regionIndex = v_regionIndex;\\n\\\n    clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HIGHLIGHT_FILL_TILE\\n\\\n    finalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a);\\n\\\n#endif\\n\\\n\\n\\\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)\\n\\\n    vec3 atmosphereLightDirection = czm_sunDirectionWC;\\n\\\n#else\\n\\\n    vec3 atmosphereLightDirection = czm_lightDirectionWC;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(GROUND_ATMOSPHERE) || defined(FOG)\\n\\\n    if (!czm_backFacing())\\n\\\n    {\\n\\\n        bool dynamicLighting = false;\\n\\\n        #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))\\n\\\n            dynamicLighting = true;\\n\\\n        #endif\\n\\\n\\n\\\n        vec3 rayleighColor;\\n\\\n        vec3 mieColor;\\n\\\n        float opacity;\\n\\\n\\n\\\n        vec3 positionWC;\\n\\\n        vec3 lightDirection;\\n\\\n\\n\\\n        // When the camera is far away (camera distance > nightFadeOutDistance), the scattering is computed in the fragment shader.\\n\\\n        // Otherwise, the scattering is computed in the vertex shader.\\n\\\n        #ifdef PER_FRAGMENT_GROUND_ATMOSPHERE\\n\\\n            positionWC = computeEllipsoidPosition();\\n\\\n            lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC));\\n\\\n            computeAtmosphereScattering(\\n\\\n                positionWC,\\n\\\n                lightDirection,\\n\\\n                rayleighColor,\\n\\\n                mieColor,\\n\\\n                opacity\\n\\\n            );\\n\\\n        #else\\n\\\n            positionWC = v_positionMC;\\n\\\n            lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC));\\n\\\n            rayleighColor = v_atmosphereRayleighColor;\\n\\\n            mieColor = v_atmosphereMieColor;\\n\\\n            opacity = v_atmosphereOpacity;\\n\\\n        #endif\\n\\\n\\n\\\n        #ifdef COLOR_CORRECT\\n\\\n            const bool ignoreBlackPixels = true;\\n\\\n            rayleighColor = czm_applyHSBShift(rayleighColor, u_hsbShift, ignoreBlackPixels);\\n\\\n            mieColor = czm_applyHSBShift(mieColor, u_hsbShift, ignoreBlackPixels);\\n\\\n        #endif\\n\\\n\\n\\\n        vec4 groundAtmosphereColor = computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity);\\n\\\n\\n\\\n        // Fog is applied to tiles selected for fog, close to the Earth.\\n\\\n        #ifdef FOG\\n\\\n            vec3 fogColor = groundAtmosphereColor.rgb;\\n\\\n\\n\\\n            // If there is lighting, apply that to the fog.\\n\\\n            #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\\n\\\n                float darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0);\\n\\\n                fogColor *= darken;\\n\\\n            #endif\\n\\\n\\n\\\n            #ifndef HDR\\n\\\n                fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb);\\n\\\n                fogColor.rgb = czm_inverseGamma(fogColor.rgb);\\n\\\n            #endif\\n\\\n\\n\\\n            finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor.rgb, czm_fogVisualDensityScalar), finalColor.a);\\n\\\n\\n\\\n        #else\\n\\\n            // Apply ground atmosphere. This happens when the camera is far away from the earth.\\n\\\n\\n\\\n            // The transmittance is based on optical depth i.e. the length of segment of the ray inside the atmosphere.\\n\\\n            // This value is larger near the \\\"circumference\\\", as it is further away from the camera. We use it to\\n\\\n            // brighten up that area of the ground atmosphere.\\n\\\n            const float transmittanceModifier = 0.5;\\n\\\n            float transmittance = transmittanceModifier + clamp(1.0 - groundAtmosphereColor.a, 0.0, 1.0);\\n\\\n\\n\\\n            vec3 finalAtmosphereColor = finalColor.rgb + groundAtmosphereColor.rgb * transmittance;\\n\\\n\\n\\\n            #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))\\n\\\n                float fadeInDist = u_nightFadeDistance.x;\\n\\\n                float fadeOutDist = u_nightFadeDistance.y;\\n\\\n\\n\\\n                float sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.05, 1.0);\\n\\\n                float darken = clamp(dot(normalize(positionWC), atmosphereLightDirection), 0.0, 1.0);\\n\\\n                vec3 darkenendGroundAtmosphereColor = mix(groundAtmosphereColor.rgb, finalAtmosphereColor.rgb, darken);\\n\\\n\\n\\\n                finalAtmosphereColor = mix(darkenendGroundAtmosphereColor, finalAtmosphereColor, sunlitAtmosphereIntensity);\\n\\\n            #endif\\n\\\n\\n\\\n            #ifndef HDR\\n\\\n                finalAtmosphereColor.rgb = vec3(1.0) - exp(-fExposure * finalAtmosphereColor.rgb);\\n\\\n            #else\\n\\\n                finalAtmosphereColor.rgb = czm_saturation(finalAtmosphereColor.rgb, 1.6);\\n\\\n            #endif\\n\\\n\\n\\\n            finalColor.rgb = mix(finalColor.rgb, finalAtmosphereColor.rgb, fade);\\n\\\n        #endif\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef UNDERGROUND_COLOR\\n\\\n    if (czm_backFacing())\\n\\\n    {\\n\\\n        float distanceFromEllipsoid = max(czm_eyeHeight, 0.0);\\n\\\n        float distance = max(v_distance - distanceFromEllipsoid, 0.0);\\n\\\n        float blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance);\\n\\\n        vec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount);\\n\\\n        finalColor = alphaBlend(undergroundColor, finalColor);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TRANSLUCENT\\n\\\n    if (inTranslucencyRectangle())\\n\\\n    {\\n\\\n      vec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance;\\n\\\n      finalColor.a *= interpolateByDistance(alphaByDistance, v_distance);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    out_FragColor =  finalColor;\\n\\\n}\\n\\\n\\n\\\n\\n\\\n#ifdef SHOW_REFLECTIVE_OCEAN\\n\\\n\\n\\\nfloat waveFade(float edge0, float edge1, float x)\\n\\\n{\\n\\\n    float y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\n\\\n    return pow(1.0 - y, 5.0);\\n\\\n}\\n\\\n\\n\\\nfloat linearFade(float edge0, float edge1, float x)\\n\\\n{\\n\\\n    return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\n\\\n}\\n\\\n\\n\\\n// Based on water rendering by Jonas Wagner:\\n\\\n// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog\\n\\\n\\n\\\n// low altitude wave settings\\n\\\nconst float oceanFrequencyLowAltitude = 825000.0;\\n\\\nconst float oceanAnimationSpeedLowAltitude = 0.004;\\n\\\nconst float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0;\\n\\\nconst float oceanSpecularIntensity = 0.5;\\n\\\n\\n\\\n// high altitude wave settings\\n\\\nconst float oceanFrequencyHighAltitude = 125000.0;\\n\\\nconst float oceanAnimationSpeedHighAltitude = 0.008;\\n\\\nconst float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0;\\n\\\n\\n\\\nvec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade)\\n\\\n{\\n\\\n    vec3 positionToEyeEC = -positionEyeCoordinates;\\n\\\n    float positionToEyeECLength = length(positionToEyeEC);\\n\\\n\\n\\\n    // The double normalize below works around a bug in Firefox on Android devices.\\n\\\n    vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC));\\n\\\n\\n\\\n    // Fade out the waves as the camera moves far from the surface.\\n\\\n    float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength);\\n\\\n\\n\\\n#ifdef SHOW_OCEAN_WAVES\\n\\\n    // high altitude waves\\n\\\n    float time = czm_frameNumber * oceanAnimationSpeedHighAltitude;\\n\\\n    vec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0);\\n\\\n    vec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude);\\n\\\n\\n\\\n    // low altitude waves\\n\\\n    time = czm_frameNumber * oceanAnimationSpeedLowAltitude;\\n\\\n    noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0);\\n\\\n    vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude);\\n\\\n\\n\\\n    // blend the 2 wave layers based on distance to surface\\n\\\n    float highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength);\\n\\\n    float lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength);\\n\\\n    vec3 normalTangentSpace =\\n\\\n        (highAltitudeFade * normalTangentSpaceHighAltitude) +\\n\\\n        (lowAltitudeFade * normalTangentSpaceLowAltitude);\\n\\\n    normalTangentSpace = normalize(normalTangentSpace);\\n\\\n\\n\\\n    // fade out the normal perturbation as we move farther from the water surface\\n\\\n    normalTangentSpace.xy *= waveIntensity;\\n\\\n    normalTangentSpace = normalize(normalTangentSpace);\\n\\\n#else\\n\\\n    vec3 normalTangentSpace = vec3(0.0, 0.0, 1.0);\\n\\\n#endif\\n\\\n\\n\\\n    vec3 normalEC = enuToEye * normalTangentSpace;\\n\\\n\\n\\\n    const vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6);\\n\\\n\\n\\\n    // Use diffuse light to highlight the waves\\n\\\n    float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue;\\n\\\n    vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade);\\n\\\n\\n\\\n#ifdef SHOW_OCEAN_WAVES\\n\\\n    // Where diffuse light is low or non-existent, use wave highlights based solely on\\n\\\n    // the wave bumpiness and no particular light direction.\\n\\\n    float tsPerturbationRatio = normalTangentSpace.z;\\n\\\n    vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity);\\n\\\n#else\\n\\\n    vec3 nonDiffuseHighlight = vec3(0.0);\\n\\\n#endif\\n\\\n\\n\\\n    // Add specular highlights in 3D, and in all modes when zoomed in.\\n\\\n    float specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0);\\n\\\n    float surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue);\\n\\\n    float specular = specularIntensity * surfaceReflectance;\\n\\\n\\n\\\n#ifdef HDR\\n\\\n    specular *= 1.4;\\n\\\n\\n\\\n    float e = 0.2;\\n\\\n    float d = 3.3;\\n\\\n    float c = 1.7;\\n\\\n\\n\\\n    vec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular));\\n\\\n#else\\n\\\n    vec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular;\\n\\\n#endif\\n\\\n\\n\\\n    return vec4(color, imageryColor.a);\\n\\\n}\\n\\\n\\n\\\n#endif // #ifdef SHOW_REFLECTIVE_OCEAN\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef QUANTIZATION_BITS12\\n\\\nin vec4 compressed0;\\n\\\nin float compressed1;\\n\\\n#else\\n\\\nin vec4 position3DAndHeight;\\n\\\nin vec4 textureCoordAndEncodedNormals;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef GEODETIC_SURFACE_NORMALS\\n\\\nin vec3 geodeticSurfaceNormal;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EXAGGERATION\\n\\\nuniform vec2 u_verticalExaggerationAndRelativeHeight;\\n\\\n#endif\\n\\\n\\n\\\nuniform vec3 u_center3D;\\n\\\nuniform mat4 u_modifiedModelView;\\n\\\nuniform mat4 u_modifiedModelViewProjection;\\n\\\nuniform vec4 u_tileRectangle;\\n\\\n\\n\\\n// Uniforms for 2D Mercator projection\\n\\\nuniform vec2 u_southAndNorthLatitude;\\n\\\nuniform vec2 u_southMercatorYAndOneOverHeight;\\n\\\n\\n\\\nout vec3 v_positionMC;\\n\\\nout vec3 v_positionEC;\\n\\\n\\n\\\nout vec3 v_textureCoordinates;\\n\\\nout vec3 v_normalMC;\\n\\\nout vec3 v_normalEC;\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\nout float v_slope;\\n\\\nout float v_aspect;\\n\\\nout float v_height;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\nout float v_distance;\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE)\\n\\\nout vec3 v_atmosphereRayleighColor;\\n\\\nout vec3 v_atmosphereMieColor;\\n\\\nout float v_atmosphereOpacity;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_POLYGONS\\n\\\nuniform highp sampler2D u_clippingExtents;\\n\\\nout vec2 v_clippingPosition;\\n\\\nflat out int v_regionIndex;\\n\\\n#endif\\n\\\n\\n\\\n// These functions are generated at runtime.\\n\\\nvec4 getPosition(vec3 position, float height, vec2 textureCoordinates);\\n\\\nfloat get2DYPositionFraction(vec2 textureCoordinates);\\n\\\n\\n\\\nvec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n    return u_modifiedModelViewProjection * vec4(position, 1.0);\\n\\\n}\\n\\\n\\n\\\nfloat get2DMercatorYPositionFraction(vec2 textureCoordinates)\\n\\\n{\\n\\\n    // The width of a tile at level 11, in radians and assuming a single root tile, is\\n\\\n    //   2.0 * czm_pi / pow(2.0, 11.0)\\n\\\n    // We want to just linearly interpolate the 2D position from the texture coordinates\\n\\\n    // when we're at this level or higher.  The constant below is the expression\\n\\\n    // above evaluated and then rounded up at the 4th significant digit.\\n\\\n    const float maxTileWidth = 0.003068;\\n\\\n    float positionFraction = textureCoordinates.y;\\n\\\n    float southLatitude = u_southAndNorthLatitude.x;\\n\\\n    float northLatitude = u_southAndNorthLatitude.y;\\n\\\n    if (northLatitude - southLatitude > maxTileWidth)\\n\\\n    {\\n\\\n        float southMercatorY = u_southMercatorYAndOneOverHeight.x;\\n\\\n        float oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y;\\n\\\n\\n\\\n        float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);\\n\\\n        currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);\\n\\\n        positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight);\\n\\\n    }\\n\\\n    return positionFraction;\\n\\\n}\\n\\\n\\n\\\nfloat get2DGeographicYPositionFraction(vec2 textureCoordinates)\\n\\\n{\\n\\\n    return textureCoordinates.y;\\n\\\n}\\n\\\n\\n\\\nvec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n    float yPositionFraction = get2DYPositionFraction(textureCoordinates);\\n\\\n    vec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\\n\\\n    return u_modifiedModelViewProjection * rtcPosition2D;\\n\\\n}\\n\\\n\\n\\\nvec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n    return getPositionPlanarEarth(position, 0.0, textureCoordinates);\\n\\\n}\\n\\\n\\n\\\nvec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n    return getPositionPlanarEarth(position, height, textureCoordinates);\\n\\\n}\\n\\\n\\n\\\nvec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates)\\n\\\n{\\n\\\n    // We do not do RTC while morphing, so there is potential for jitter.\\n\\\n    // This is unlikely to be noticeable, though.\\n\\\n    vec3 position3DWC = position + u_center3D;\\n\\\n    float yPositionFraction = get2DYPositionFraction(textureCoordinates);\\n\\\n    vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);\\n\\\n    vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime);\\n\\\n    vec4 morphPositionEC = czm_modelView * morphPosition;\\n\\\n    return czm_projection * morphPositionEC;\\n\\\n}\\n\\\n\\n\\\n#ifdef QUANTIZATION_BITS12\\n\\\nuniform vec2 u_minMaxHeight;\\n\\\nuniform mat4 u_scaleAndBias;\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n#ifdef QUANTIZATION_BITS12\\n\\\n    vec2 xy = czm_decompressTextureCoordinates(compressed0.x);\\n\\\n    vec2 zh = czm_decompressTextureCoordinates(compressed0.y);\\n\\\n    vec3 position = vec3(xy, zh.x);\\n\\\n    float height = zh.y;\\n\\\n    vec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z);\\n\\\n\\n\\\n    height = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x;\\n\\\n    position = (u_scaleAndBias * vec4(position, 1.0)).xyz;\\n\\\n\\n\\\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y) || defined(APPLY_MATERIAL)\\n\\\n    float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\\n\\\n    float encodedNormal = compressed1;\\n\\\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\\n\\\n    float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;\\n\\\n    float encodedNormal = 0.0;\\n\\\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\\n\\\n    float webMercatorT = textureCoordinates.y;\\n\\\n    float encodedNormal = compressed0.w;\\n\\\n#else\\n\\\n    float webMercatorT = textureCoordinates.y;\\n\\\n    float encodedNormal = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n#else\\n\\\n    // A single float per element\\n\\\n    vec3 position = position3DAndHeight.xyz;\\n\\\n    float height = position3DAndHeight.w;\\n\\\n    vec2 textureCoordinates = textureCoordAndEncodedNormals.xy;\\n\\\n\\n\\\n#if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y)\\n\\\n    float webMercatorT = textureCoordAndEncodedNormals.z;\\n\\\n    float encodedNormal = textureCoordAndEncodedNormals.w;\\n\\\n#elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\\n\\\n    float webMercatorT = textureCoordinates.y;\\n\\\n    float encodedNormal = textureCoordAndEncodedNormals.z;\\n\\\n#elif defined(INCLUDE_WEB_MERCATOR_Y)\\n\\\n    float webMercatorT = textureCoordAndEncodedNormals.z;\\n\\\n    float encodedNormal = 0.0;\\n\\\n#else\\n\\\n    float webMercatorT = textureCoordinates.y;\\n\\\n    float encodedNormal = 0.0;\\n\\\n#endif\\n\\\n\\n\\\n#endif\\n\\\n\\n\\\n    vec3 position3DWC = position + u_center3D;\\n\\\n\\n\\\n#ifdef GEODETIC_SURFACE_NORMALS\\n\\\n    vec3 ellipsoidNormal = geodeticSurfaceNormal;\\n\\\n#else\\n\\\n    vec3 ellipsoidNormal = normalize(position3DWC);\\n\\\n#endif\\n\\\n\\n\\\n#if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS)\\n\\\n    float exaggeration = u_verticalExaggerationAndRelativeHeight.x;\\n\\\n    float relativeHeight = u_verticalExaggerationAndRelativeHeight.y;\\n\\\n    float newHeight = (height - relativeHeight) * exaggeration + relativeHeight;\\n\\\n\\n\\\n    // stop from going through center of earth\\n\\\n    float minRadius = min(min(czm_ellipsoidRadii.x, czm_ellipsoidRadii.y), czm_ellipsoidRadii.z);\\n\\\n    newHeight = max(newHeight, -minRadius);\\n\\\n\\n\\\n    vec3 offset = ellipsoidNormal * (newHeight - height);\\n\\\n    position += offset;\\n\\\n    position3DWC += offset;\\n\\\n    height = newHeight;\\n\\\n#endif\\n\\\n\\n\\\n    gl_Position = getPosition(position, height, textureCoordinates);\\n\\\n\\n\\\n    v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;\\n\\\n    v_positionMC = position3DWC;  // position in model coordinates\\n\\\n\\n\\\n    v_textureCoordinates = vec3(textureCoordinates, webMercatorT);\\n\\\n\\n\\\n#if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)\\n\\\n    vec3 normalMC = czm_octDecode(encodedNormal);\\n\\\n\\n\\\n#if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS)\\n\\\n    vec3 projection = dot(normalMC, ellipsoidNormal) * ellipsoidNormal;\\n\\\n    vec3 rejection = normalMC - projection;\\n\\\n    normalMC = normalize(projection + rejection * exaggeration);\\n\\\n#endif\\n\\\n\\n\\\n    v_normalMC = normalMC;\\n\\\n    v_normalEC = czm_normal3D * v_normalMC;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef ENABLE_CLIPPING_POLYGONS\\n\\\n    vec2 sphericalLatLong = czm_approximateSphericalCoordinates(position3DWC);\\n\\\n    sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);\\n\\\n    \\n\\\n    vec2 minDistance = vec2(czm_infinity);\\n\\\n    v_clippingPosition = vec2(czm_infinity);\\n\\\n    v_regionIndex = -1;\\n\\\n\\n\\\n    for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) {\\n\\\n        vec4 extents = unpackClippingExtents(u_clippingExtents, regionIndex);\\n\\\n        vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz;\\n\\\n\\n\\\n        vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0));\\n\\\n        vec2 distance = abs(rectUv - clamped) * extents.wz;\\n\\\n\\n\\\n        float threshold = 0.01;\\n\\\n        if (minDistance.x > distance.x || minDistance.y > distance.y) {\\n\\\n            minDistance = distance;\\n\\\n            v_clippingPosition = rectUv;\\n\\\n            if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) {\\n\\\n                v_regionIndex = regionIndex;\\n\\\n            }\\n\\\n        }\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || (defined(GROUND_ATMOSPHERE) && !defined(PER_FRAGMENT_GROUND_ATMOSPHERE))\\n\\\n\\n\\\n    bool dynamicLighting = false;\\n\\\n\\n\\\n    #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))\\n\\\n        dynamicLighting = true;\\n\\\n    #endif\\n\\\n\\n\\\n#if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)\\n\\\n    vec3 atmosphereLightDirection = czm_sunDirectionWC;\\n\\\n#else\\n\\\n    vec3 atmosphereLightDirection = czm_lightDirectionWC;\\n\\\n#endif\\n\\\n\\n\\\n    vec3 lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(position3DWC));\\n\\\n\\n\\\n    computeAtmosphereScattering(\\n\\\n        position3DWC,\\n\\\n        lightDirection,\\n\\\n        v_atmosphereRayleighColor,\\n\\\n        v_atmosphereMieColor,\\n\\\n        v_atmosphereOpacity\\n\\\n    );\\n\\\n#endif\\n\\\n\\n\\\n#if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)\\n\\\n    v_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef APPLY_MATERIAL\\n\\\n    float northPoleZ = czm_ellipsoidRadii.z;\\n\\\n    vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ);\\n\\\n    vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal));\\n\\\n    float dotProd = abs(dot(ellipsoidNormal, v_normalMC));\\n\\\n    v_slope = acos(dotProd);\\n\\\n    vec3 normalRejected = ellipsoidNormal * dotProd;\\n\\\n    vec3 normalProjected = v_normalMC - normalRejected;\\n\\\n    vec3 aspectVector = normalize(normalProjected);\\n\\\n    v_aspect = acos(dot(aspectVector, vectorEastMC));\\n\\\n    float determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal);\\n\\\n    v_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect);\\n\\\n    v_height = height;\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) {\\n\\\n\\n\\\n    vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;\\n\\\n    vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);\\n\\\n    czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);\\n\\\n    \\n\\\n    float atmosphereInnerRadius = length(positionWC);\\n\\\n\\n\\\n    computeScattering(\\n\\\n        primaryRay,\\n\\\n        length(cameraToPositionWC),\\n\\\n        lightDirection,\\n\\\n        atmosphereInnerRadius,\\n\\\n        rayleighColor,\\n\\\n        mieColor,\\n\\\n        opacity\\n\\\n    );\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n    vec4 rampColor = texture(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5));\\n\\\n    rampColor = czm_gammaCorrect(rampColor);\\n\\\n    material.diffuse = rampColor.rgb;\\n\\\n    material.alpha = rampColor.a;\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\nuniform float strength;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 st = materialInput.st;\\n\\\n\\n\\\n    vec2 centerPixel = fract(repeat * st);\\n\\\n    float centerBump = texture(image, centerPixel).channel;\\n\\\n\\n\\\n    float imageWidth = float(imageDimensions.x);\\n\\\n    vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0)));\\n\\\n    float rightBump = texture(image, rightPixel).channel;\\n\\\n\\n\\\n    float imageHeight = float(imageDimensions.y);\\n\\\n    vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight)));\\n\\\n    float topBump = texture(image, leftPixel).channel;\\n\\\n\\n\\\n    vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0)));\\n\\\n    vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;\\n\\\n\\n\\\n    material.normal = normalEC;\\n\\\n    material.diffuse = vec3(0.01);\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 lightColor;\\n\\\nuniform vec4 darkColor;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 st = materialInput.st;\\n\\\n\\n\\\n    // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights\\n\\\n    float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0);  // 0.0 or 1.0\\n\\\n\\n\\\n    // Find the distance from the closest separator (region between two colors)\\n\\\n    float scaledWidth = fract(repeat.s * st.s);\\n\\\n    scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));\\n\\\n    float scaledHeight = fract(repeat.t * st.t);\\n\\\n    scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));\\n\\\n    float value = min(scaledWidth, scaledHeight);\\n\\\n\\n\\\n    vec4 currentColor = mix(lightColor, darkColor, b);\\n\\\n    vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03);\\n\\\n\\n\\\n    color = czm_gammaCorrect(color);\\n\\\n    material.diffuse = color.rgb;\\n\\\n    material.alpha = color.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 lightColor;\\n\\\nuniform vec4 darkColor;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights\\n\\\n    float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5));  // 0.0 or 1.0\\n\\\n\\n\\\n    vec4 color = mix(lightColor, darkColor, b);\\n\\\n    color = czm_gammaCorrect(color);\\n\\\n    material.diffuse = color.rgb;\\n\\\n    material.alpha = color.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D heights;\\n\\\nuniform sampler2D colors;\\n\\\n\\n\\\n// This material expects heights to be sorted from lowest to highest.\\n\\\n\\n\\\nfloat getHeight(int idx, float invTexSize)\\n\\\n{\\n\\\n    vec2 uv = vec2((float(idx) + 0.5) * invTexSize, 0.5);\\n\\\n#ifdef OES_texture_float\\n\\\n    return texture(heights, uv).x;\\n\\\n#else\\n\\\n    return czm_unpackFloat(texture(heights, uv));\\n\\\n#endif\\n\\\n}\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    float height = materialInput.height;\\n\\\n    float invTexSize = 1.0 / float(heightsDimensions.x);\\n\\\n\\n\\\n    float minHeight = getHeight(0, invTexSize);\\n\\\n    float maxHeight = getHeight(heightsDimensions.x - 1, invTexSize);\\n\\\n\\n\\\n    // early-out when outside the height range\\n\\\n    if (height < minHeight || height > maxHeight) {\\n\\\n        material.diffuse = vec3(0.0);\\n\\\n        material.alpha = 0.0;\\n\\\n        return material;\\n\\\n    }\\n\\\n\\n\\\n    // Binary search to find heights above and below.\\n\\\n    int idxBelow = 0;\\n\\\n    int idxAbove = heightsDimensions.x;\\n\\\n    float heightBelow = minHeight;\\n\\\n    float heightAbove = maxHeight;\\n\\\n\\n\\\n    // while loop not allowed, so use for loop with max iterations.\\n\\\n    // maxIterations of 16 supports a texture size up to 65536 (2^16).\\n\\\n    const int maxIterations = 16;\\n\\\n    for (int i = 0; i < maxIterations; i++) {\\n\\\n        if (idxBelow >= idxAbove - 1) {\\n\\\n            break;\\n\\\n        }\\n\\\n\\n\\\n        int idxMid = (idxBelow + idxAbove) / 2;\\n\\\n        float heightTex = getHeight(idxMid, invTexSize);\\n\\\n\\n\\\n        if (height > heightTex) {\\n\\\n            idxBelow = idxMid;\\n\\\n            heightBelow = heightTex;\\n\\\n        } else {\\n\\\n            idxAbove = idxMid;\\n\\\n            heightAbove = heightTex;\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    float lerper = heightBelow == heightAbove ? 1.0 : (height - heightBelow) / (heightAbove - heightBelow);\\n\\\n    vec2 colorUv = vec2(invTexSize * (float(idxBelow) + 0.5 + lerper), 0.5);\\n\\\n    vec4 color = texture(colors, colorUv);\\n\\\n\\n\\\n    // undo preumultiplied alpha\\n\\\n    if (color.a > 0.0) \\n\\\n    {\\n\\\n        color.rgb /= color.a;\\n\\\n    }\\n\\\n    \\n\\\n    color.rgb = czm_gammaCorrect(color.rgb);\\n\\\n\\n\\\n    material.diffuse = color.rgb;\\n\\\n    material.alpha = color.a;\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform float spacing;\\n\\\nuniform float width;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    float distanceToContour = mod(materialInput.height, spacing);\\n\\\n\\n\\\n#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\\n\\\n    float dxc = abs(dFdx(materialInput.height));\\n\\\n    float dyc = abs(dFdy(materialInput.height));\\n\\\n    float dF = max(dxc, dyc) * czm_pixelRatio * width;\\n\\\n    float alpha = (distanceToContour < dF) ? 1.0 : 0.0;\\n\\\n#else\\n\\\n    // If no derivatives available (IE 10?), use pixel ratio\\n\\\n    float alpha = (distanceToContour < (czm_pixelRatio * width)) ? 1.0 : 0.0;\\n\\\n#endif\\n\\\n\\n\\\n    vec4 outColor = czm_gammaCorrect(vec4(color.rgb, alpha * color.a));\\n\\\n    material.diffuse = outColor.rgb;\\n\\\n    material.alpha = outColor.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\nuniform float minimumHeight;\\n\\\nuniform float maximumHeight;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n    float scaledHeight = clamp((materialInput.height - minimumHeight) / (maximumHeight - minimumHeight), 0.0, 1.0);\\n\\\n    vec4 rampColor = texture(image, vec2(scaledHeight, 0.5));\\n\\\n    rampColor = czm_gammaCorrect(rampColor);\\n\\\n    material.diffuse = rampColor.rgb;\\n\\\n    material.alpha = rampColor.a;\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 fadeInColor;\\n\\\nuniform vec4 fadeOutColor;\\n\\\nuniform float maximumDistance;\\n\\\nuniform bool repeat;\\n\\\nuniform vec2 fadeDirection;\\n\\\nuniform vec2 time;\\n\\\n\\n\\\nfloat getTime(float t, float coord)\\n\\\n{\\n\\\n    float scalar = 1.0 / maximumDistance;\\n\\\n    float q  = distance(t, coord) * scalar;\\n\\\n    if (repeat)\\n\\\n    {\\n\\\n        float r = distance(t, coord + 1.0) * scalar;\\n\\\n        float s = distance(t, coord - 1.0) * scalar;\\n\\\n        q = min(min(r, s), q);\\n\\\n    }\\n\\\n    return clamp(q, 0.0, 1.0);\\n\\\n}\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 st = materialInput.st;\\n\\\n    float s = getTime(time.x, st.s) * fadeDirection.s;\\n\\\n    float t = getTime(time.y, st.t) * fadeDirection.t;\\n\\\n\\n\\\n    float u = length(vec2(s, t));\\n\\\n    vec4 color = mix(fadeInColor, fadeOutColor, u);\\n\\\n\\n\\\n    color = czm_gammaCorrect(color);\\n\\\n    material.emission = color.rgb;\\n\\\n    material.alpha = color.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform float cellAlpha;\\n\\\nuniform vec2 lineCount;\\n\\\nuniform vec2 lineThickness;\\n\\\nuniform vec2 lineOffset;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 st = materialInput.st;\\n\\\n\\n\\\n    float scaledWidth = fract(lineCount.s * st.s - lineOffset.s);\\n\\\n    scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));\\n\\\n    float scaledHeight = fract(lineCount.t * st.t - lineOffset.t);\\n\\\n    scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));\\n\\\n\\n\\\n    float value;\\n\\\n\\n\\\n    // Fuzz Factor - Controls blurriness of lines\\n\\\n#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\\n\\\n    const float fuzz = 1.2;\\n\\\n    vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0;\\n\\\n\\n\\\n    // From \\\"3D Engine Design for Virtual Globes\\\" by Cozzi and Ring, Listing 4.13.\\n\\\n    vec2 dx = abs(dFdx(st));\\n\\\n    vec2 dy = abs(dFdy(st));\\n\\\n    vec2 dF = vec2(max(dx.s, dy.s), max(dx.t, dy.t)) * lineCount;\\n\\\n    value = min(\\n\\\n        smoothstep(dF.s * thickness.s, dF.s * (fuzz + thickness.s), scaledWidth),\\n\\\n        smoothstep(dF.t * thickness.t, dF.t * (fuzz + thickness.t), scaledHeight));\\n\\\n#else\\n\\\n    // If no derivatives available (IE 10?), revert to view-dependent fuzz\\n\\\n    const float fuzz = 0.05;\\n\\\n\\n\\\n    vec2 range = 0.5 - (lineThickness * 0.05);\\n\\\n    value = min(\\n\\\n        1.0 - smoothstep(range.s, range.s + fuzz, scaledWidth),\\n\\\n        1.0 - smoothstep(range.t, range.t + fuzz, scaledHeight));\\n\\\n#endif\\n\\\n\\n\\\n    // Edges taken from RimLightingMaterial.glsl\\n\\\n    // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html\\n\\\n    float dRim = 1.0 - abs(dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC)));\\n\\\n    float sRim = smoothstep(0.8, 1.0, dRim);\\n\\\n    value *= (1.0 - sRim);\\n\\\n\\n\\\n    vec4 halfColor;\\n\\\n    halfColor.rgb = color.rgb * 0.5;\\n\\\n    halfColor.a = color.a * (1.0 - ((1.0 - cellAlpha) * value));\\n\\\n    halfColor = czm_gammaCorrect(halfColor);\\n\\\n    material.diffuse = halfColor.rgb;\\n\\\n    material.emission = halfColor.rgb;\\n\\\n    material.alpha = halfColor.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\nuniform float strength;\\n\\\nuniform vec2 repeat;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n    \\n\\\n    vec4 textureValue = texture(image, fract(repeat * materialInput.st));\\n\\\n    vec3 normalTangentSpace = textureValue.channels;\\n\\\n    normalTangentSpace.xy = normalTangentSpace.xy * 2.0 - 1.0;\\n\\\n    normalTangentSpace.z = clamp(1.0 - strength, 0.1, 1.0);\\n\\\n    normalTangentSpace = normalize(normalTangentSpace);\\n\\\n    vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;\\n\\\n    \\n\\\n    material.normal = normalEC;\\n\\\n    \\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\n\\n\\\nfloat getPointOnLine(vec2 p0, vec2 p1, float x)\\n\\\n{\\n\\\n    float slope = (p0.y - p1.y) / (p0.x - p1.x);\\n\\\n    return slope * (x - p0.x) + p0.y;\\n\\\n}\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 st = materialInput.st;\\n\\\n\\n\\\n#if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\\n\\\n    float base = 1.0 - abs(fwidth(st.s)) * 10.0 * czm_pixelRatio;\\n\\\n#else\\n\\\n     // If no derivatives available (IE 10?), 2.5% of the line will be the arrow head\\n\\\n    float base = 0.975;\\n\\\n#endif\\n\\\n\\n\\\n    vec2 center = vec2(1.0, 0.5);\\n\\\n    float ptOnUpperLine = getPointOnLine(vec2(base, 1.0), center, st.s);\\n\\\n    float ptOnLowerLine = getPointOnLine(vec2(base, 0.0), center, st.s);\\n\\\n\\n\\\n    float halfWidth = 0.15;\\n\\\n    float s = step(0.5 - halfWidth, st.t);\\n\\\n    s *= 1.0 - step(0.5 + halfWidth, st.t);\\n\\\n    s *= 1.0 - step(base, st.s);\\n\\\n\\n\\\n    float t = step(base, materialInput.st.s);\\n\\\n    t *= 1.0 - step(ptOnUpperLine, st.t);\\n\\\n    t *= step(ptOnLowerLine, st.t);\\n\\\n\\n\\\n    // Find the distance from the closest separator (region between two colors)\\n\\\n    float dist;\\n\\\n    if (st.s < base)\\n\\\n    {\\n\\\n        float d1 = abs(st.t - (0.5 - halfWidth));\\n\\\n        float d2 = abs(st.t - (0.5 + halfWidth));\\n\\\n        dist = min(d1, d2);\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        float d1 = czm_infinity;\\n\\\n        if (st.t < 0.5 - halfWidth && st.t > 0.5 + halfWidth)\\n\\\n        {\\n\\\n            d1 = abs(st.s - base);\\n\\\n        }\\n\\\n        float d2 = abs(st.t - ptOnUpperLine);\\n\\\n        float d3 = abs(st.t - ptOnLowerLine);\\n\\\n        dist = min(min(d1, d2), d3);\\n\\\n    }\\n\\\n\\n\\\n    vec4 outsideColor = vec4(0.0);\\n\\\n    vec4 currentColor = mix(outsideColor, color, clamp(s + t, 0.0, 1.0));\\n\\\n    vec4 outColor = czm_antialias(outsideColor, color, currentColor, dist);\\n\\\n\\n\\\n    outColor = czm_gammaCorrect(outColor);\\n\\\n    material.diffuse = outColor.rgb;\\n\\\n    material.alpha = outColor.a;\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform vec4 gapColor;\\n\\\nuniform float dashLength;\\n\\\nuniform float dashPattern;\\n\\\nin float v_polylineAngle;\\n\\\n\\n\\\nconst float maskLength = 16.0;\\n\\\n\\n\\\nmat2 rotate(float rad) {\\n\\\n    float c = cos(rad);\\n\\\n    float s = sin(rad);\\n\\\n    return mat2(\\n\\\n        c, s,\\n\\\n        -s, c\\n\\\n    );\\n\\\n}\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy;\\n\\\n\\n\\\n    // Get the relative position within the dash from 0 to 1\\n\\\n    float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio));\\n\\\n    // Figure out the mask index.\\n\\\n    float maskIndex = floor(dashPosition * maskLength);\\n\\\n    // Test the bit mask.\\n\\\n    float maskTest = floor(dashPattern / pow(2.0, maskIndex));\\n\\\n    vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color;\\n\\\n    if (fragColor.a < 0.005) {   // matches 0/255 and 1/255\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    fragColor = czm_gammaCorrect(fragColor);\\n\\\n    material.emission = fragColor.rgb;\\n\\\n    material.alpha = fragColor.a;\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform float glowPower;\\n\\\nuniform float taperPower;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 st = materialInput.st;\\n\\\n    float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5);\\n\\\n\\n\\\n    if (taperPower <= 0.99999) {\\n\\\n        glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5));\\n\\\n    }\\n\\\n\\n\\\n    vec4 fragColor;\\n\\\n    fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb);\\n\\\n    fragColor.a = clamp(0.0, 1.0, glow) * color.a;\\n\\\n    fragColor = czm_gammaCorrect(fragColor);\\n\\\n\\n\\\n    material.emission = fragColor.rgb;\\n\\\n    material.alpha = fragColor.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform vec4 outlineColor;\\n\\\nuniform float outlineWidth;\\n\\\n\\n\\\nin float v_width;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec2 st = materialInput.st;\\n\\\n    float halfInteriorWidth =  0.5 * (v_width - outlineWidth) / v_width;\\n\\\n    float b = step(0.5 - halfInteriorWidth, st.t);\\n\\\n    b *= 1.0 - step(0.5 + halfInteriorWidth, st.t);\\n\\\n\\n\\\n    // Find the distance from the closest separator (region between two colors)\\n\\\n    float d1 = abs(st.t - (0.5 - halfInteriorWidth));\\n\\\n    float d2 = abs(st.t - (0.5 + halfInteriorWidth));\\n\\\n    float dist = min(d1, d2);\\n\\\n\\n\\\n    vec4 currentColor = mix(outlineColor, color, b);\\n\\\n    vec4 outColor = czm_antialias(outlineColor, color, currentColor, dist);\\n\\\n    outColor = czm_gammaCorrect(outColor);\\n\\\n\\n\\\n    material.diffuse = outColor.rgb;\\n\\\n    material.alpha = outColor.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 color;\\n\\\nuniform vec4 rimColor;\\n\\\nuniform float width;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html\\n\\\n    float d = 1.0 - dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC));\\n\\\n    float s = smoothstep(1.0 - width, 1.0, d);\\n\\\n\\n\\\n    vec4 outColor = czm_gammaCorrect(color);\\n\\\n    vec4 outRimColor = czm_gammaCorrect(rimColor);\\n\\\n\\n\\\n    material.diffuse = outColor.rgb;\\n\\\n    material.emission = outRimColor.rgb * s;\\n\\\n    material.alpha = mix(outColor.a, outRimColor.a, s);\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D image;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n    vec4 rampColor = texture(image, vec2(materialInput.slope / (czm_pi / 2.0), 0.5));\\n\\\n    rampColor = czm_gammaCorrect(rampColor);\\n\\\n    material.diffuse = rampColor.rgb;\\n\\\n    material.alpha = rampColor.a;\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 evenColor;\\n\\\nuniform vec4 oddColor;\\n\\\nuniform float offset;\\n\\\nuniform float repeat;\\n\\\nuniform bool horizontal;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    // Based on the Stripes Fragment Shader in the Orange Book (11.1.2)\\n\\\n    float coord = mix(materialInput.st.s, materialInput.st.t, float(horizontal));\\n\\\n    float value = fract((coord - offset) * (repeat * 0.5));\\n\\\n    float dist = min(value, min(abs(value - 0.5), 1.0 - value));\\n\\\n\\n\\\n    vec4 currentColor = mix(evenColor, oddColor, step(0.5, value));\\n\\\n    vec4 color = czm_antialias(evenColor, oddColor, currentColor, dist);\\n\\\n    color = czm_gammaCorrect(color);\\n\\\n\\n\\\n    material.diffuse = color.rgb;\\n\\\n    material.alpha = color.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// Thanks for the contribution Jonas\\n\\\n// http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog\\n\\\n\\n\\\nuniform sampler2D specularMap;\\n\\\nuniform sampler2D normalMap;\\n\\\nuniform vec4 baseWaterColor;\\n\\\nuniform vec4 blendColor;\\n\\\nuniform float frequency;\\n\\\nuniform float animationSpeed;\\n\\\nuniform float amplitude;\\n\\\nuniform float specularIntensity;\\n\\\nuniform float fadeFactor;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    float time = czm_frameNumber * animationSpeed;\\n\\\n\\n\\\n    // fade is a function of the distance from the fragment and the frequency of the waves\\n\\\n    float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor);\\n\\\n\\n\\\n    float specularMapValue = texture(specularMap, materialInput.st).r;\\n\\\n\\n\\\n    // note: not using directional motion at this time, just set the angle to 0.0;\\n\\\n    vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0);\\n\\\n    vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude));\\n\\\n\\n\\\n    // fade out the normal perturbation as we move further from the water surface\\n\\\n    normalTangentSpace.xy /= fade;\\n\\\n\\n\\\n    // attempt to fade out the normal perturbation as we approach non water areas (low specular map value)\\n\\\n    normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue);\\n\\\n\\n\\\n    normalTangentSpace = normalize(normalTangentSpace);\\n\\\n\\n\\\n    // get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane\\n\\\n    float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0);\\n\\\n\\n\\\n    // fade out water effect as specular map value decreases\\n\\\n    material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue;\\n\\\n\\n\\\n    // base color is a blend of the water and non-water color based on the value from the specular map\\n\\\n    // may need a uniform blend factor to better control this\\n\\\n    material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue);\\n\\\n\\n\\\n    // diffuse highlights are based on how perturbed the normal is\\n\\\n    material.diffuse += (0.1 * tsPerturbationRatio);\\n\\\n\\n\\\n    material.diffuse = material.diffuse;\\n\\\n\\n\\\n    material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace);\\n\\\n\\n\\\n    material.specular = specularIntensity;\\n\\\n    material.shininess = 10.0;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec4 waterColor;\\n\\\nuniform vec4 landColor;\\n\\\n\\n\\\nczm_material czm_getMaterial(czm_materialInput materialInput)\\n\\\n{\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n\\n\\\n    vec4 outColor = mix(landColor, waterColor, materialInput.waterMask);\\n\\\n    outColor = czm_gammaCorrect(outColor);\\n\\\n\\n\\\n    material.diffuse = outColor.rgb;\\n\\\n    material.alpha = outColor.a;\\n\\\n\\n\\\n    return material;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// robust iterative solution without trig functions\\n\\\n// https://github.com/0xfaded/ellipse_demo/issues/1\\n\\\n// https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse\\n\\\n//\\n\\\n// This version uses only a single iteration for best performance. For fog\\n\\\n// rendering, the difference is negligible.\\n\\\nvec2 nearestPointOnEllipseFast(vec2 pos, vec2 radii) {\\n\\\n    vec2 p = abs(pos);\\n\\\n    vec2 inverseRadii = 1.0 / radii;\\n\\\n    vec2 evoluteScale = (radii.x * radii.x - radii.y * radii.y) * vec2(1.0, -1.0) * inverseRadii;\\n\\\n\\n\\\n    // We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t))\\n\\\n    // but store the cos and sin of t in a vec2 for efficiency.\\n\\\n    // Initial guess: t = cos(pi/4)\\n\\\n    vec2 tTrigs = vec2(0.70710678118);\\n\\\n    vec2 v = radii * tTrigs;\\n\\\n\\n\\\n    // Find the evolute of the ellipse (center of curvature) at v.\\n\\\n    vec2 evolute = evoluteScale * tTrigs * tTrigs * tTrigs;\\n\\\n    // Find the (approximate) intersection of p - evolute with the ellipsoid.\\n\\\n    vec2 q = normalize(p - evolute) * length(v - evolute);\\n\\\n    // Update the estimate of t.\\n\\\n    tTrigs = (q + evolute) * inverseRadii;\\n\\\n    tTrigs = normalize(clamp(tTrigs, 0.0, 1.0));\\n\\\n    v = radii * tTrigs;\\n\\\n\\n\\\n    return v * sign(pos);\\n\\\n}\\n\\\n\\n\\\nvec3 computeEllipsoidPositionWC(vec3 positionMC) {\\n\\\n    // Get the world-space position and project onto a meridian plane of\\n\\\n    // the ellipsoid\\n\\\n    vec3 positionWC = (czm_model * vec4(positionMC, 1.0)).xyz;\\n\\\n\\n\\\n    vec2 positionEllipse = vec2(length(positionWC.xy), positionWC.z);\\n\\\n    vec2 nearestPoint = nearestPointOnEllipseFast(positionEllipse, czm_ellipsoidRadii.xz);\\n\\\n\\n\\\n    // Reconstruct a 3D point in world space\\n\\\n    return vec3(nearestPoint.x * normalize(positionWC.xy), nearestPoint.y);\\n\\\n}\\n\\\n\\n\\\nvoid applyFog(inout vec4 color, vec4 groundAtmosphereColor, vec3 lightDirection, float distanceToCamera) {\\n\\\n\\n\\\n    vec3 fogColor = groundAtmosphereColor.rgb;\\n\\\n\\n\\\n    // If there is dynamic lighting, apply that to the fog.\\n\\\n    const float NONE = 0.0;\\n\\\n    if (czm_atmosphereDynamicLighting != NONE) {\\n\\\n        float darken = clamp(dot(normalize(czm_viewerPositionWC), lightDirection), czm_fogMinimumBrightness, 1.0);\\n\\\n        fogColor *= darken;\\n\\\n    }\\n\\\n\\n\\\n    // Tonemap if HDR rendering is disabled\\n\\\n    #ifndef HDR\\n\\\n        fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb);\\n\\\n        fogColor.rgb = czm_inverseGamma(fogColor.rgb);\\n\\\n    #endif\\n\\\n\\n\\\n    vec3 withFog = czm_fog(distanceToCamera, color.rgb, fogColor, czm_fogVisualDensityScalar);\\n\\\n    color = vec4(withFog, color.a);\\n\\\n}\\n\\\n\\n\\\nvoid atmosphereStage(inout vec4 color, in ProcessedAttributes attributes) {\\n\\\n    vec3 rayleighColor;\\n\\\n    vec3 mieColor;\\n\\\n    float opacity;\\n\\\n\\n\\\n    vec3 positionWC;\\n\\\n    vec3 lightDirection;\\n\\\n\\n\\\n    // When the camera is in space, compute the position per-fragment for\\n\\\n    // more accurate ground atmosphere. All other cases will use\\n\\\n    //\\n\\\n    // The if condition will be added in https://github.com/CesiumGS/cesium/issues/11717\\n\\\n    if (false) {\\n\\\n        positionWC = computeEllipsoidPositionWC(attributes.positionMC);\\n\\\n        lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC, czm_atmosphereDynamicLighting);\\n\\\n\\n\\\n        // The fog color is derived from the ground atmosphere color\\n\\\n        czm_computeGroundAtmosphereScattering(\\n\\\n            positionWC,\\n\\\n            lightDirection,\\n\\\n            rayleighColor,\\n\\\n            mieColor,\\n\\\n            opacity\\n\\\n        );\\n\\\n    } else {\\n\\\n        positionWC = attributes.positionWC;\\n\\\n        lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC, czm_atmosphereDynamicLighting);\\n\\\n        rayleighColor = v_atmosphereRayleighColor;\\n\\\n        mieColor = v_atmosphereMieColor;\\n\\\n        opacity = v_atmosphereOpacity;\\n\\\n    }\\n\\\n\\n\\\n    //color correct rayleigh and mie colors\\n\\\n    const bool ignoreBlackPixels = true;\\n\\\n    rayleighColor = czm_applyHSBShift(rayleighColor, czm_atmosphereHsbShift, ignoreBlackPixels);\\n\\\n    mieColor = czm_applyHSBShift(mieColor, czm_atmosphereHsbShift, ignoreBlackPixels);\\n\\\n\\n\\\n    vec4 groundAtmosphereColor = czm_computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity);\\n\\\n\\n\\\n    if (u_isInFog) {\\n\\\n        float distanceToCamera = length(attributes.positionEC);\\n\\\n        applyFog(color, groundAtmosphereColor, lightDirection, distanceToCamera);\\n\\\n    } else {\\n\\\n        // Ground atmosphere\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void atmosphereStage(ProcessedAttributes attributes) {\\n\\\n    vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(v_positionWC, czm_atmosphereDynamicLighting);\\n\\\n\\n\\\n    czm_computeGroundAtmosphereScattering(\\n\\\n        // This assumes the geometry stage came before this.\\n\\\n        v_positionWC,\\n\\\n        lightDirection,\\n\\\n        v_atmosphereRayleighColor,\\n\\\n        v_atmosphereMieColor,\\n\\\n        v_atmosphereOpacity\\n\\\n    );\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void filterByPassType(vec4 featureColor)\\n\\\n{\\n\\\n    bool styleTranslucent = (featureColor.a != 1.0);\\n\\\n    // Only render translucent features in the translucent pass (if the style or the original command has translucency).\\n\\\n    if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent)\\n\\\n    {   \\n\\\n        // If the model has a translucent silhouette, it needs to render during the silhouette color command,\\n\\\n        // (i.e. the command where model_silhouettePass = true), even if the model isn't translucent.\\n\\\n        #ifdef HAS_SILHOUETTE\\n\\\n        if(!model_silhouettePass) {\\n\\\n            discard;\\n\\\n        }\\n\\\n        #else\\n\\\n        discard;\\n\\\n        #endif\\n\\\n    }\\n\\\n    // If the current pass is not the translucent pass and the style is not translucent, don't render the feature.\\n\\\n    else if (czm_pass != czm_passTranslucent && styleTranslucent)\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nvoid cpuStylingStage(inout czm_modelMaterial material, SelectedFeature feature)\\n\\\n{\\n\\\n    vec4 featureColor = feature.color;\\n\\\n    if (featureColor.a == 0.0)\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    // If a feature ID vertex attribute is used, the pass type filter is applied in the vertex shader.\\n\\\n    // So, we only apply in in the fragment shader if the feature ID texture is used.\\n\\\n    #if defined(HAS_SELECTED_FEATURE_ID_TEXTURE) && !defined(HAS_CLASSIFICATION)\\n\\\n    filterByPassType(featureColor);\\n\\\n    #endif\\n\\\n\\n\\\n    featureColor = czm_gammaCorrect(featureColor);\\n\\\n\\n\\\n    // Classification models compute the diffuse differently.\\n\\\n    #ifdef HAS_CLASSIFICATION\\n\\\n    material.diffuse = featureColor.rgb * featureColor.a;\\n\\\n    #else\\n\\\n    float highlight = ceil(model_colorBlend);\\n\\\n    material.diffuse *= mix(featureColor.rgb, vec3(1.0), highlight);\\n\\\n    #endif\\n\\\n    \\n\\\n    material.alpha *= featureColor.a;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void filterByPassType(inout vec3 positionMC, vec4 featureColor)\\n\\\n{\\n\\\n    bool styleTranslucent = (featureColor.a != 1.0);\\n\\\n    // Only render translucent features in the translucent pass (if the style or the original command has translucency).\\n\\\n    if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent)\\n\\\n    {\\n\\\n        // If the model has a translucent silhouette, it needs to render during the silhouette color command,\\n\\\n        // (i.e. the command where model_silhouettePass = true), even if the model isn't translucent.\\n\\\n        #ifdef HAS_SILHOUETTE\\n\\\n        positionMC *= float(model_silhouettePass);\\n\\\n        #else\\n\\\n        positionMC *= 0.0;\\n\\\n        #endif\\n\\\n    }\\n\\\n    // If the current pass is not the translucent pass and the style is not translucent, don't render the feature.\\n\\\n    else if (czm_pass != czm_passTranslucent && styleTranslucent)\\n\\\n    {\\n\\\n        positionMC *= 0.0;\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nvoid cpuStylingStage(inout vec3 positionMC, inout SelectedFeature feature)\\n\\\n{\\n\\\n    float show = ceil(feature.color.a);\\n\\\n    positionMC *= show;\\n\\\n\\n\\\n    #if defined(HAS_SELECTED_FEATURE_ID_ATTRIBUTE) && !defined(HAS_CLASSIFICATION)\\n\\\n    filterByPassType(positionMC, feature.color);\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void customShaderStage(\\n\\\n    inout czm_modelMaterial material,\\n\\\n    ProcessedAttributes attributes,\\n\\\n    FeatureIds featureIds,\\n\\\n    Metadata metadata,\\n\\\n    MetadataClass metadataClass,\\n\\\n    MetadataStatistics metadataStatistics\\n\\\n) {\\n\\\n    // FragmentInput and initializeInputStruct() are dynamically generated in JS, \\n\\\n    // see CustomShaderPipelineStage.js\\n\\\n    FragmentInput fsInput;\\n\\\n    initializeInputStruct(fsInput, attributes);\\n\\\n    fsInput.featureIds = featureIds;\\n\\\n    fsInput.metadata = metadata;\\n\\\n    fsInput.metadataClass = metadataClass;\\n\\\n    fsInput.metadataStatistics = metadataStatistics;\\n\\\n    fragmentMain(fsInput, material);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void customShaderStage(\\n\\\n    inout czm_modelVertexOutput vsOutput, \\n\\\n    inout ProcessedAttributes attributes, \\n\\\n    FeatureIds featureIds,\\n\\\n    Metadata metadata,\\n\\\n    MetadataClass metadataClass,\\n\\\n    MetadataStatistics metadataStatistics\\n\\\n) {\\n\\\n    // VertexInput and initializeInputStruct() are dynamically generated in JS, \\n\\\n    // see CustomShaderPipelineStage.js\\n\\\n    VertexInput vsInput;\\n\\\n    initializeInputStruct(vsInput, attributes);\\n\\\n    vsInput.featureIds = featureIds;\\n\\\n    vsInput.metadata = metadata;\\n\\\n    vsInput.metadataClass = metadataClass;\\n\\\n    vsInput.metadataStatistics = metadataStatistics;\\n\\\n    vertexMain(vsInput, vsOutput);\\n\\\n    attributes.positionMC = vsOutput.positionMC;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void edgeDetectionStage(inout vec4 color, inout FeatureIds featureIds) {\\n\\\n    if (u_isEdgePass) {\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    vec2 screenCoord = gl_FragCoord.xy / czm_viewport.zw;\\n\\\n\\n\\\n    vec4 edgeColor = texture(czm_edgeColorTexture, screenCoord);\\n\\\n    vec4 edgeId = texture(czm_edgeIdTexture, screenCoord);\\n\\\n\\n\\\n    // Packed window-space depth from edge pass (0..1)\\n\\\n    float edgeDepthWin = czm_unpackDepth(texture(czm_edgeDepthTexture, screenCoord));\\n\\\n\\n\\\n    // Near / far for current frustum\\n\\\n    float n = czm_currentFrustum.x;\\n\\\n    float f = czm_currentFrustum.y;\\n\\\n\\n\\\n    // geometry depth in eye coordinate\\n\\\n    vec4 geomEC = czm_windowToEyeCoordinates(gl_FragCoord);\\n\\\n    float geomDepthLinear = -geomEC.z;\\n\\\n\\n\\\n    // Convert edge depth to linear depth\\n\\\n    float z_ndc_edge = edgeDepthWin * 2.0 - 1.0;\\n\\\n    float edgeDepthLinear = (2.0 * n * f) / (f + n - z_ndc_edge * (f - n));\\n\\\n\\n\\\n    float d = abs(edgeDepthLinear - geomDepthLinear);\\n\\\n\\n\\\n    // Adaptive epsilon using linear depth fwidth for robustness\\n\\\n    float pixelStepLinear = fwidth(geomDepthLinear);\\n\\\n    float rel = geomDepthLinear * 0.0005;\\n\\\n    float eps = max(n * 1e-4, max(pixelStepLinear * 1.5, rel));\\n\\\n\\n\\\n    // If Edge isn't behind any geometry and the pixel has edge data\\n\\\n    if (d < eps && edgeId.r > 0.0) {\\n\\\n#ifdef HAS_EDGE_FEATURE_ID\\n\\\n        float edgeFeatureId    = edgeId.g;\\n\\\n        float currentFeatureId = float(featureIds.featureId_0);\\n\\\n#endif\\n\\\n        float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord));\\n\\\n        // Background / sky / globe: always show edge\\n\\\n        bool isBackground = geomDepthLinear > globeDepth;\\n\\\n        bool drawEdge = isBackground;\\n\\\n\\n\\\n#ifdef HAS_EDGE_FEATURE_ID\\n\\\n        bool hasEdgeFeature = edgeFeatureId > 0.0;\\n\\\n        bool hasCurrentFeature = currentFeatureId > 0.0;\\n\\\n        bool featuresMatch = edgeFeatureId == currentFeatureId;\\n\\\n\\n\\\n        drawEdge = drawEdge || !hasEdgeFeature || !hasCurrentFeature || featuresMatch;\\n\\\n#else\\n\\\n        drawEdge = true;\\n\\\n#endif\\n\\\n\\n\\\n        if (drawEdge) {\\n\\\n            color = edgeColor;\\n\\\n        }\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// CESIUM_REDIRECTED_COLOR_OUTPUT flag is used to avoid color attachment conflicts\\n\\\n// when shaders are processed by different rendering pipelines (e.g., OIT).\\n\\\n// Only declare MRT outputs when not in a derived shader context.\\n\\\n#if defined(HAS_EDGE_VISIBILITY_MRT) && !defined(CESIUM_REDIRECTED_COLOR_OUTPUT)\\n\\\nlayout(location = 1) out vec4 out_id;        // edge id / metadata\\n\\\nlayout(location = 2) out vec4 out_edgeDepth; // packed depth\\n\\\n#endif\\n\\\n\\n\\\nvoid edgeVisibilityStage(inout vec4 color, inout FeatureIds featureIds)\\n\\\n{\\n\\\n#ifdef HAS_EDGE_VISIBILITY\\n\\\n\\n\\\n    if (!u_isEdgePass) {\\n\\\n        return;\\n\\\n    }\\n\\\n    \\n\\\n    float edgeTypeInt = v_edgeType * 255.0;\\n\\\n    \\n\\\n    // Color code different edge types\\n\\\n    vec4 edgeColor = vec4(0.0);\\n\\\n    \\n\\\n    if (edgeTypeInt < 0.5) { // HIDDEN (0)\\n\\\n        edgeColor = vec4(0.0, 0.0, 0.0, 0.0); // Transparent for hidden edges\\n\\\n    }\\n\\\n    else if (edgeTypeInt > 0.5 && edgeTypeInt < 1.5) { // SILHOUETTE (1) - Conditional visibility\\n\\\n        // Proper silhouette detection using face normals\\n\\\n        vec3 normalA = normalize(v_faceNormalAView);\\n\\\n        vec3 normalB = normalize(v_faceNormalBView);\\n\\\n        \\n\\\n        // Calculate view direction using existing eye-space position varying (v_positionEC)\\n\\\n        vec3 viewDir = -normalize(v_positionEC);\\n\\\n        \\n\\\n        // Calculate dot products to determine triangle facing\\n\\\n        float dotA = dot(normalA, viewDir);\\n\\\n        float dotB = dot(normalB, viewDir);\\n\\\n        \\n\\\n        const float eps = 1e-3;\\n\\\n        bool frontA = dotA > eps;\\n\\\n        bool backA  = dotA < -eps;\\n\\\n        bool frontB = dotB > eps;\\n\\\n        bool backB  = dotB < -eps;\\n\\\n        \\n\\\n        // True silhouette: one triangle front-facing, other back-facing\\n\\\n        bool oppositeFacing = (frontA && backB) || (backA && frontB);\\n\\\n        \\n\\\n        // Exclude edges where both triangles are nearly grazing (perpendicular to view)\\n\\\n        // This handles the top-view cylinder case where both normals are ~horizontal\\n\\\n        bool bothNearGrazing = (abs(dotA) <= eps && abs(dotB) <= eps);\\n\\\n        \\n\\\n        if (!(oppositeFacing && !bothNearGrazing)) {\\n\\\n            discard; // Not a true silhouette edge\\n\\\n        } else {\\n\\\n            // True silhouette\\n\\\n            edgeColor = vec4(1.0, 0.0, 0.0, 1.0);\\n\\\n        }\\n\\\n    }\\n\\\n    else if (edgeTypeInt > 1.5 && edgeTypeInt < 2.5) { // HARD (2) - BRIGHT GREEN\\n\\\n        edgeColor = vec4(0.0, 1.0, 0.0, 1.0); // Extra bright green\\n\\\n    }\\n\\\n    else if (edgeTypeInt > 2.5 && edgeTypeInt < 3.5) { // REPEATED (3)\\n\\\n        edgeColor = vec4(0.0, 0.0, 1.0, 1.0);\\n\\\n    } else {\\n\\\n        edgeColor = vec4(0.0, 0.0, 0.0, 0.0);\\n\\\n    }\\n\\\n\\n\\\n    // Temporary color: white\\n\\\n    edgeColor = vec4(1.0, 1.0, 1.0, 1.0);\\n\\\n    color = edgeColor;\\n\\\n    \\n\\\n    #if defined(HAS_EDGE_VISIBILITY_MRT) && !defined(CESIUM_REDIRECTED_COLOR_OUTPUT)\\n\\\n        // Write edge metadata\\n\\\n        out_id = vec4(0.0);\\n\\\n        out_id.r = edgeTypeInt;                    // Edge type (0-3)\\n\\\n#ifdef HAS_EDGE_FEATURE_ID\\n\\\n        out_id.g = float(featureIds.featureId_0); // Feature ID if available\\n\\\n#else\\n\\\n        out_id.g = 0.0;\\n\\\n#endif\\n\\\n        // Pack depth into separate MRT attachment\\n\\\n        out_edgeDepth = czm_packDepth(gl_FragCoord.z);\\n\\\n    #endif\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes) {\\n\\\n  initializeFeatureIds(featureIds, attributes);\\n\\\n  initializeFeatureIdAliases(featureIds);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes) \\n\\\n{\\n\\\n  initializeFeatureIds(featureIds, attributes);\\n\\\n  initializeFeatureIdAliases(featureIds);\\n\\\n  setFeatureIdVaryings();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void geometryStage(out ProcessedAttributes attributes)\\n\\\n{\\n\\\n  attributes.positionMC = v_positionMC;\\n\\\n  attributes.positionEC = v_positionEC;\\n\\\n\\n\\\n  #if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE)\\n\\\n  attributes.positionWC = v_positionWC;\\n\\\n  #endif\\n\\\n\\n\\\n  #ifdef HAS_NORMALS\\n\\\n  // renormalize after interpolation\\n\\\n  attributes.normalEC = normalize(v_normalEC);\\n\\\n  #endif\\n\\\n\\n\\\n  #ifdef HAS_TANGENTS\\n\\\n  attributes.tangentEC = normalize(v_tangentEC);\\n\\\n  #endif\\n\\\n\\n\\\n  #ifdef HAS_BITANGENTS\\n\\\n  attributes.bitangentEC = normalize(v_bitangentEC);\\n\\\n  #endif\\n\\\n\\n\\\n  // Everything else is dynamically generated in GeometryPipelineStage\\n\\\n  setDynamicVaryings(attributes);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"vec4 geometryStage(inout ProcessedAttributes attributes, mat4 modelView, mat3 normal)\\n\\\n{\\n\\\n    vec4 computedPosition;\\n\\\n\\n\\\n    // Compute positions in different coordinate systems\\n\\\n    vec3 positionMC = attributes.positionMC;\\n\\\n    v_positionMC = positionMC;\\n\\\n    v_positionEC = (modelView * vec4(positionMC, 1.0)).xyz;\\n\\\n\\n\\\n    #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING)\\n\\\n    vec3 position2D = attributes.position2D;\\n\\\n    vec3 positionEC = (u_modelView2D * vec4(position2D, 1.0)).xyz;\\n\\\n    computedPosition = czm_projection * vec4(positionEC, 1.0);\\n\\\n    #else\\n\\\n    computedPosition = czm_projection * vec4(v_positionEC, 1.0);\\n\\\n    #endif\\n\\\n\\n\\\n    // Sometimes the custom shader and/or style needs this\\n\\\n    #if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE) || defined(ENABLE_CLIPPING_POLYGONS)\\n\\\n    // Note that this is a 32-bit position which may result in jitter on small\\n\\\n    // scales.\\n\\\n    v_positionWC = (czm_model * vec4(positionMC, 1.0)).xyz;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_NORMALS\\n\\\n    v_normalEC = normalize(normal * attributes.normalMC);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_TANGENTS\\n\\\n    v_tangentEC = normalize(normal * attributes.tangentMC);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_BITANGENTS\\n\\\n    v_bitangentEC = normalize(normal * attributes.bitangentMC);\\n\\\n    #endif\\n\\\n\\n\\\n    // All other varyings need to be dynamically generated in\\n\\\n    // GeometryPipelineStage\\n\\\n    setDynamicVaryings(attributes);\\n\\\n\\n\\\n    return computedPosition;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef DIFFUSE_IBL\\n\\\nvec3 sampleDiffuseEnvironment(vec3 cubeDir)\\n\\\n{\\n\\\n    #ifdef CUSTOM_SPHERICAL_HARMONICS\\n\\\n        return czm_sphericalHarmonics(cubeDir, model_sphericalHarmonicCoefficients); \\n\\\n    #else\\n\\\n        return czm_sphericalHarmonics(cubeDir, czm_sphericalHarmonicCoefficients); \\n\\\n    #endif\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef SPECULAR_IBL\\n\\\nvec3 sampleSpecularEnvironment(vec3 cubeDir, float roughness)\\n\\\n{\\n\\\n    #ifdef CUSTOM_SPECULAR_IBL\\n\\\n        float lod = roughness * model_specularEnvironmentMapsMaximumLOD;\\n\\\n        return czm_textureCube(model_specularEnvironmentMaps, cubeDir, lod).rgb;\\n\\\n    #else\\n\\\n        float lod = roughness * czm_specularEnvironmentMapsMaximumLOD;\\n\\\n        return czm_textureCube(czm_specularEnvironmentMaps, cubeDir, lod).rgb;\\n\\\n    #endif\\n\\\n}\\n\\\nvec3 computeSpecularIBL(vec3 cubeDir, float NdotV, vec3 f0, float roughness)\\n\\\n{\\n\\\n    // see https://bruop.github.io/ibl/ at Single Scattering Results\\n\\\n    // Roughness dependent fresnel, from Fdez-Aguera\\n\\\n    vec3 f90 = max(vec3(1.0 - roughness), f0);\\n\\\n    vec3 F = fresnelSchlick2(f0, f90, NdotV);\\n\\\n\\n\\\n    vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg;\\n\\\n    vec3 specularSample = sampleSpecularEnvironment(cubeDir, roughness);\\n\\\n\\n\\\n    return specularSample * (F * brdfLut.x + brdfLut.y);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL)\\n\\\n/**\\n\\\n * Compute the light contributions from environment maps and spherical harmonic coefficients.\\n\\\n * See Fdez-Aguera, https://www.jcgt.org/published/0008/01/03/paper.pdf, for explanation\\n\\\n * of the single- and multi-scattering terms.\\n\\\n *\\n\\\n * @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position.\\n\\\n * @param {vec3} normalEC The surface normal in eye coordinates.\\n\\\n * @param {czm_modelMaterial} The material properties.\\n\\\n * @return {vec3} The computed HDR color.\\n\\\n */\\n\\\nvec3 textureIBL(vec3 viewDirectionEC, vec3 normalEC, czm_modelMaterial material) {\\n\\\n    vec3 f0 = material.specular;\\n\\\n    float roughness = material.roughness;\\n\\\n    float specularWeight = 1.0;\\n\\\n    #ifdef USE_SPECULAR\\n\\\n        specularWeight = material.specularWeight;\\n\\\n    #endif\\n\\\n    float NdotV = clamp(dot(normalEC, viewDirectionEC), 0.0, 1.0);\\n\\\n\\n\\\n    // see https://bruop.github.io/ibl/ at Single Scattering Results\\n\\\n    // Roughness dependent fresnel, from Fdez-Aguera\\n\\\n    vec3 f90 = max(vec3(1.0 - roughness), f0);\\n\\\n    vec3 singleScatterFresnel = fresnelSchlick2(f0, f90, NdotV);\\n\\\n\\n\\\n    vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg;\\n\\\n    vec3 FssEss = specularWeight * (singleScatterFresnel * brdfLut.x + brdfLut.y);\\n\\\n\\n\\\n    #ifdef DIFFUSE_IBL\\n\\\n        vec3 normalMC = normalize(model_iblReferenceFrameMatrix * normalEC);\\n\\\n        vec3 irradiance = sampleDiffuseEnvironment(normalMC);\\n\\\n\\n\\\n        vec3 averageFresnel = f0 + (1.0 - f0) / 21.0;\\n\\\n        float Ems = specularWeight * (1.0 - brdfLut.x - brdfLut.y);\\n\\\n        vec3 FmsEms = FssEss * averageFresnel * Ems / (1.0 - averageFresnel * Ems);\\n\\\n        vec3 dielectricScattering = (1.0 - FssEss - FmsEms) * material.diffuse;\\n\\\n        vec3 diffuseContribution = irradiance * (FmsEms + dielectricScattering) * model_iblFactor.x;\\n\\\n    #else\\n\\\n        vec3 diffuseContribution = vec3(0.0);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef USE_ANISOTROPY\\n\\\n        // Bend normal to account for anisotropic distortion of specular reflection\\n\\\n        vec3 anisotropyDirection = material.anisotropicB;\\n\\\n        vec3 anisotropicTangent = cross(anisotropyDirection, viewDirectionEC);\\n\\\n        vec3 anisotropicNormal = cross(anisotropicTangent, anisotropyDirection);\\n\\\n        float bendFactor = 1.0 - material.anisotropyStrength * (1.0 - roughness);\\n\\\n        float bendFactorPow4 = bendFactor * bendFactor * bendFactor * bendFactor;\\n\\\n        vec3 bentNormal = normalize(mix(anisotropicNormal, normalEC, bendFactorPow4));\\n\\\n        vec3 reflectEC = reflect(-viewDirectionEC, bentNormal);\\n\\\n    #else\\n\\\n        vec3 reflectEC = reflect(-viewDirectionEC, normalEC);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef SPECULAR_IBL\\n\\\n        vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflectEC);\\n\\\n        vec3 radiance = sampleSpecularEnvironment(reflectMC, roughness);\\n\\\n        vec3 specularContribution = radiance * FssEss * model_iblFactor.y;\\n\\\n    #else\\n\\\n        vec3 specularContribution = vec3(0.0);\\n\\\n    #endif\\n\\\n\\n\\\n    return diffuseContribution + specularContribution;\\n\\\n}\\n\\\n#endif\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"mat4 getInstancingTransform()\\n\\\n{\\n\\\n    mat4 instancingTransform;\\n\\\n\\n\\\n    #ifdef HAS_INSTANCE_MATRICES\\n\\\n    instancingTransform = mat4(\\n\\\n        a_instancingTransformRow0.x, a_instancingTransformRow1.x, a_instancingTransformRow2.x, 0.0, // Column 1\\n\\\n        a_instancingTransformRow0.y, a_instancingTransformRow1.y, a_instancingTransformRow2.y, 0.0, // Column 2\\n\\\n        a_instancingTransformRow0.z, a_instancingTransformRow1.z, a_instancingTransformRow2.z, 0.0, // Column 3\\n\\\n        a_instancingTransformRow0.w, a_instancingTransformRow1.w, a_instancingTransformRow2.w, 1.0  // Column 4\\n\\\n    );\\n\\\n    #else\\n\\\n    vec3 translation = vec3(0.0, 0.0, 0.0);\\n\\\n    vec3 scale = vec3(1.0, 1.0, 1.0);\\n\\\n    \\n\\\n        #ifdef HAS_INSTANCE_TRANSLATION\\n\\\n        translation = a_instanceTranslation;\\n\\\n        #endif\\n\\\n        #ifdef HAS_INSTANCE_SCALE\\n\\\n        scale = a_instanceScale;\\n\\\n        #endif\\n\\\n\\n\\\n    instancingTransform = mat4(\\n\\\n        scale.x, 0.0, 0.0, 0.0,\\n\\\n        0.0, scale.y, 0.0, 0.0,\\n\\\n        0.0, 0.0, scale.z, 0.0,\\n\\\n        translation.x, translation.y, translation.z, 1.0\\n\\\n    ); \\n\\\n    #endif\\n\\\n\\n\\\n    return instancingTransform;\\n\\\n}\\n\\\n\\n\\\n#ifdef USE_2D_INSTANCING\\n\\\nmat4 getInstancingTransform2D()\\n\\\n{\\n\\\n    mat4 instancingTransform2D;\\n\\\n\\n\\\n    #ifdef HAS_INSTANCE_MATRICES\\n\\\n    instancingTransform2D = mat4(\\n\\\n        a_instancingTransform2DRow0.x, a_instancingTransform2DRow1.x, a_instancingTransform2DRow2.x, 0.0, // Column 1\\n\\\n        a_instancingTransform2DRow0.y, a_instancingTransform2DRow1.y, a_instancingTransform2DRow2.y, 0.0, // Column 2\\n\\\n        a_instancingTransform2DRow0.z, a_instancingTransform2DRow1.z, a_instancingTransform2DRow2.z, 0.0, // Column 3\\n\\\n        a_instancingTransform2DRow0.w, a_instancingTransform2DRow1.w, a_instancingTransform2DRow2.w, 1.0  // Column 4\\n\\\n    );\\n\\\n    #else\\n\\\n    vec3 translation2D = vec3(0.0, 0.0, 0.0);\\n\\\n    vec3 scale = vec3(1.0, 1.0, 1.0);\\n\\\n    \\n\\\n        #ifdef HAS_INSTANCE_TRANSLATION\\n\\\n        translation2D = a_instanceTranslation2D;\\n\\\n        #endif\\n\\\n        #ifdef HAS_INSTANCE_SCALE\\n\\\n        scale = a_instanceScale;\\n\\\n        #endif\\n\\\n\\n\\\n    instancingTransform2D = mat4(\\n\\\n        scale.x, 0.0, 0.0, 0.0,\\n\\\n        0.0, scale.y, 0.0, 0.0,\\n\\\n        0.0, 0.0, scale.z, 0.0,\\n\\\n        translation2D.x, translation2D.y, translation2D.z, 1.0\\n\\\n    ); \\n\\\n    #endif\\n\\\n\\n\\\n    return instancingTransform2D;\\n\\\n}\\n\\\n#endif\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void instancingStage(inout ProcessedAttributes attributes) \\n\\\n{\\n\\\n    vec3 positionMC = attributes.positionMC;\\n\\\n    \\n\\\n    mat4 instancingTransform = getInstancingTransform();\\n\\\n    \\n\\\n    attributes.positionMC = (instancingTransform * vec4(positionMC, 1.0)).xyz;\\n\\\n\\n\\\n    #ifdef HAS_NORMALS\\n\\\n    vec3 normalMC = attributes.normalMC;\\n\\\n    attributes.normalMC = (instancingTransform * vec4(normalMC, 0.0)).xyz;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef USE_2D_INSTANCING\\n\\\n    mat4 instancingTransform2D = getInstancingTransform2D();\\n\\\n    attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz;\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void legacyInstancingStage(\\n\\\n    inout ProcessedAttributes attributes,\\n\\\n    out mat4 instanceModelView,\\n\\\n    out mat3 instanceModelViewInverseTranspose)\\n\\\n{\\n\\\n    vec3 positionMC = attributes.positionMC;\\n\\\n\\n\\\n    mat4 instancingTransform = getInstancingTransform();\\n\\\n \\n\\\n    mat4 instanceModel = instancingTransform * u_instance_nodeTransform;\\n\\\n    instanceModelView = u_instance_modifiedModelView;\\n\\\n    instanceModelViewInverseTranspose = mat3(u_instance_modifiedModelView * instanceModel);\\n\\\n\\n\\\n    attributes.positionMC = (instanceModel * vec4(positionMC, 1.0)).xyz;\\n\\\n    \\n\\\n    #ifdef USE_2D_INSTANCING\\n\\\n    mat4 instancingTransform2D = getInstancingTransform2D();\\n\\\n    attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz;\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef USE_IBL_LIGHTING\\n\\\nvec3 computeIBL(vec3 position, vec3 normal, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material)\\n\\\n{\\n\\\n    #if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL)\\n\\\n        // Environment maps were provided, use them for IBL\\n\\\n        vec3 viewDirection = -normalize(position);\\n\\\n        vec3 iblColor = textureIBL(viewDirection, normal, material);\\n\\\n        return iblColor;\\n\\\n    #endif\\n\\\n    \\n\\\n    return vec3(0.0);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USE_CLEARCOAT\\n\\\nvec3 addClearcoatReflection(vec3 baseLayerColor, vec3 position, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material)\\n\\\n{\\n\\\n    vec3 viewDirection = -normalize(position);\\n\\\n    vec3 halfwayDirection = normalize(viewDirection + lightDirection);\\n\\\n    vec3 normal = material.clearcoatNormal;\\n\\\n    float NdotL = clamp(dot(normal, lightDirection), 0.001, 1.0);\\n\\\n\\n\\\n    // clearcoatF0 = vec3(pow((ior - 1.0) / (ior + 1.0), 2.0)), but without KHR_materials_ior, ior is a constant 1.5.\\n\\\n    vec3 f0 = vec3(0.04);\\n\\\n    vec3 f90 = vec3(1.0);\\n\\\n    // Note: clearcoat Fresnel computed with dot(n, v) instead of dot(v, h).\\n\\\n    // This is to make it energy conserving with a simple layering function.\\n\\\n    float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);\\n\\\n    vec3 F = fresnelSchlick2(f0, f90, NdotV);\\n\\\n\\n\\\n    // compute specular reflection from direct lighting\\n\\\n    float roughness = material.clearcoatRoughness;\\n\\\n    float alphaRoughness = roughness * roughness;\\n\\\n    float directStrength = computeDirectSpecularStrength(normal, lightDirection, viewDirection, halfwayDirection, alphaRoughness);\\n\\\n    vec3 directReflection = F * directStrength * NdotL;\\n\\\n    vec3 color = lightColorHdr * directReflection;\\n\\\n\\n\\\n    #ifdef SPECULAR_IBL\\n\\\n        // Find the direction in which to sample the environment map\\n\\\n        vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflect(-viewDirection, normal));\\n\\\n        vec3 iblColor = computeSpecularIBL(reflectMC, NdotV, f0, roughness);\\n\\\n        color += iblColor * material.occlusion;\\n\\\n    #endif\\n\\\n\\n\\\n    float clearcoatFactor = material.clearcoatFactor;\\n\\\n    vec3 clearcoatColor = color * clearcoatFactor;\\n\\\n\\n\\\n    // Dim base layer based on transmission loss through clearcoat\\n\\\n    return baseLayerColor * (1.0 - clearcoatFactor * F) + clearcoatColor;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if defined(LIGHTING_PBR) && defined(HAS_NORMALS)\\n\\\nvec3 computePbrLighting(in czm_modelMaterial material, in vec3 position)\\n\\\n{\\n\\\n    #ifdef USE_CUSTOM_LIGHT_COLOR\\n\\\n        vec3 lightColorHdr = model_lightColorHdr;\\n\\\n    #else\\n\\\n        vec3 lightColorHdr = czm_lightColorHdr;\\n\\\n    #endif\\n\\\n\\n\\\n    vec3 viewDirection = -normalize(position);\\n\\\n    vec3 normal = material.normalEC;\\n\\\n    vec3 lightDirection = normalize(czm_lightDirectionEC);\\n\\\n\\n\\\n    vec3 directLighting = czm_pbrLighting(viewDirection, normal, lightDirection, material);\\n\\\n    vec3 directColor = lightColorHdr * directLighting;\\n\\\n\\n\\\n    // Accumulate colors from base layer\\n\\\n    vec3 color = directColor + material.emissive;\\n\\\n    #ifdef USE_IBL_LIGHTING\\n\\\n        color += computeIBL(position, normal, lightDirection, lightColorHdr, material);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef USE_CLEARCOAT\\n\\\n        color = addClearcoatReflection(color, position, lightDirection, lightColorHdr, material);\\n\\\n    #endif\\n\\\n\\n\\\n    return color;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n/**\\n\\\n * Compute the material color under the current lighting conditions.\\n\\\n * All other material properties are passed through so further stages\\n\\\n * have access to them.\\n\\\n *\\n\\\n * @param {czm_modelMaterial} material The material properties from {@MaterialStageFS}\\n\\\n * @param {ProcessedAttributes} attributes\\n\\\n */\\n\\\nvoid lightingStage(inout czm_modelMaterial material, ProcessedAttributes attributes)\\n\\\n{\\n\\\n    #ifdef LIGHTING_PBR\\n\\\n        #ifdef HAS_NORMALS\\n\\\n            vec3 color = computePbrLighting(material, attributes.positionEC);\\n\\\n        #else\\n\\\n            vec3 color = material.diffuse * material.occlusion + material.emissive;\\n\\\n        #endif\\n\\\n        // In HDR mode, the frame buffer is in linear color space. The\\n\\\n        // post-processing stages (see PostProcessStageCollection) will handle\\n\\\n        // tonemapping. However, if HDR is not enabled, we must tonemap else large\\n\\\n        // values may be clamped to 1.0\\n\\\n        #ifndef HDR\\n\\\n            color = czm_pbrNeutralTonemapping(color);\\n\\\n        #endif\\n\\\n    #else // unlit\\n\\\n        vec3 color = material.diffuse;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_POINT_CLOUD_COLOR_STYLE\\n\\\n        // The colors resulting from point cloud styles are adjusted differently.\\n\\\n        color = czm_gammaCorrect(color);\\n\\\n    #elif !defined(HDR)\\n\\\n        // If HDR is not enabled, the frame buffer stores sRGB colors rather than\\n\\\n        // linear colors so the linear value must be converted.\\n\\\n        color = czm_linearToSrgb(color);\\n\\\n    #endif\\n\\\n\\n\\\n    material.diffuse = color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// If the style color is white, it implies the feature has not been styled.\\n\\\nbool isDefaultStyleColor(vec3 color)\\n\\\n{\\n\\\n    return all(greaterThan(color, vec3(1.0 - czm_epsilon3)));\\n\\\n}\\n\\\n\\n\\\nvec3 blend(vec3 sourceColor, vec3 styleColor, float styleColorBlend)\\n\\\n{\\n\\\n    vec3 blendColor = mix(sourceColor, styleColor, styleColorBlend);\\n\\\n    vec3 color = isDefaultStyleColor(styleColor.rgb) ? sourceColor : blendColor;\\n\\\n    return color;\\n\\\n}\\n\\\n\\n\\\nvec2 computeTextureTransform(vec2 texCoord, mat3 textureTransform)\\n\\\n{\\n\\\n    return vec2(textureTransform * vec3(texCoord, 1.0));\\n\\\n}\\n\\\n\\n\\\n#ifdef HAS_NORMAL_TEXTURE\\n\\\nvec2 getNormalTexCoords()\\n\\\n{\\n\\\n    vec2 texCoord = TEXCOORD_NORMAL;\\n\\\n    #ifdef HAS_NORMAL_TEXTURE_TRANSFORM\\n\\\n        texCoord = vec2(u_normalTextureTransform * vec3(texCoord, 1.0));\\n\\\n    #endif\\n\\\n    return texCoord;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if defined(HAS_NORMAL_TEXTURE) || defined(HAS_CLEARCOAT_NORMAL_TEXTURE)\\n\\\nvec3 computeTangent(in vec3 position, in vec2 normalTexCoords)\\n\\\n{\\n\\\n    vec2 tex_dx = dFdx(normalTexCoords);\\n\\\n    vec2 tex_dy = dFdy(normalTexCoords);\\n\\\n    float determinant = tex_dx.x * tex_dy.y - tex_dy.x * tex_dx.y;\\n\\\n    vec3 tangent = tex_dy.t * dFdx(position) - tex_dx.t * dFdy(position);\\n\\\n    return tangent / determinant;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USE_ANISOTROPY\\n\\\nstruct NormalInfo {\\n\\\n    vec3 tangent;\\n\\\n    vec3 bitangent;\\n\\\n    vec3 normal;\\n\\\n    vec3 geometryNormal;\\n\\\n};\\n\\\n\\n\\\nNormalInfo getNormalInfo(ProcessedAttributes attributes)\\n\\\n{\\n\\\n    vec3 geometryNormal = attributes.normalEC;\\n\\\n    #ifdef HAS_NORMAL_TEXTURE\\n\\\n        vec2 normalTexCoords = getNormalTexCoords();\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_BITANGENTS\\n\\\n        vec3 tangent = attributes.tangentEC;\\n\\\n        vec3 bitangent = attributes.bitangentEC;\\n\\\n    #else // Assume HAS_NORMAL_TEXTURE\\n\\\n        vec3 tangent = computeTangent(attributes.positionEC, normalTexCoords);\\n\\\n        tangent = normalize(tangent - geometryNormal * dot(geometryNormal, tangent));\\n\\\n        vec3 bitangent = normalize(cross(geometryNormal, tangent));\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_NORMAL_TEXTURE\\n\\\n        mat3 tbn = mat3(tangent, bitangent, geometryNormal);\\n\\\n        vec3 normalSample = texture(u_normalTexture, normalTexCoords).rgb;\\n\\\n        normalSample = 2.0 * normalSample - 1.0;\\n\\\n        #ifdef HAS_NORMAL_TEXTURE_SCALE\\n\\\n            normalSample.xy *= u_normalTextureScale;\\n\\\n        #endif\\n\\\n        vec3 normal = normalize(tbn * normalSample);\\n\\\n    #else\\n\\\n        vec3 normal = geometryNormal;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_DOUBLE_SIDED_MATERIAL\\n\\\n        if (czm_backFacing()) {\\n\\\n            tangent *= -1.0;\\n\\\n            bitangent *= -1.0;\\n\\\n            normal *= -1.0;\\n\\\n            geometryNormal *= -1.0;\\n\\\n        }\\n\\\n    #endif\\n\\\n\\n\\\n    NormalInfo normalInfo;\\n\\\n    normalInfo.tangent = tangent;\\n\\\n    normalInfo.bitangent = bitangent;\\n\\\n    normalInfo.normal = normal;\\n\\\n    normalInfo.geometryNormal = geometryNormal;\\n\\\n\\n\\\n    return normalInfo;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)\\n\\\nvec3 getNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal)\\n\\\n{\\n\\\n    vec2 normalTexCoords = getNormalTexCoords();\\n\\\n\\n\\\n    // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set\\n\\\n    #ifdef HAS_BITANGENTS\\n\\\n        vec3 t = attributes.tangentEC;\\n\\\n        vec3 b = attributes.bitangentEC;\\n\\\n    #else\\n\\\n        vec3 t = computeTangent(attributes.positionEC, normalTexCoords);\\n\\\n        t = normalize(t - geometryNormal * dot(geometryNormal, t));\\n\\\n        vec3 b = normalize(cross(geometryNormal, t));\\n\\\n    #endif\\n\\\n\\n\\\n    mat3 tbn = mat3(t, b, geometryNormal);\\n\\\n    vec3 normalSample = texture(u_normalTexture, normalTexCoords).rgb;\\n\\\n    normalSample = 2.0 * normalSample - 1.0;\\n\\\n    #ifdef HAS_NORMAL_TEXTURE_SCALE\\n\\\n        normalSample.xy *= u_normalTextureScale;\\n\\\n    #endif\\n\\\n    return normalize(tbn * normalSample);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HAS_CLEARCOAT_NORMAL_TEXTURE\\n\\\nvec3 getClearcoatNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal)\\n\\\n{\\n\\\n    vec2 normalTexCoords = TEXCOORD_CLEARCOAT_NORMAL;\\n\\\n    #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_TRANSFORM\\n\\\n        normalTexCoords = vec2(u_clearcoatNormalTextureTransform * vec3(normalTexCoords, 1.0));\\n\\\n    #endif\\n\\\n\\n\\\n    // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set\\n\\\n    #ifdef HAS_BITANGENTS\\n\\\n        vec3 t = attributes.tangentEC;\\n\\\n        vec3 b = attributes.bitangentEC;\\n\\\n    #else\\n\\\n        vec3 t = computeTangent(attributes.positionEC, normalTexCoords);\\n\\\n        t = normalize(t - geometryNormal * dot(geometryNormal, t));\\n\\\n        vec3 b = normalize(cross(geometryNormal, t));\\n\\\n    #endif\\n\\\n\\n\\\n    mat3 tbn = mat3(t, b, geometryNormal);\\n\\\n    vec3 normalSample = texture(u_clearcoatNormalTexture, normalTexCoords).rgb;\\n\\\n    normalSample = 2.0 * normalSample - 1.0;\\n\\\n    #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_SCALE\\n\\\n        normalSample.xy *= u_clearcoatNormalTextureScale;\\n\\\n    #endif\\n\\\n    return normalize(tbn * normalSample);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HAS_NORMALS\\n\\\nvec3 computeNormal(ProcessedAttributes attributes)\\n\\\n{\\n\\\n    // Geometry normal. This is already normalized \\n\\\n    vec3 normal = attributes.normalEC;\\n\\\n\\n\\\n    #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)\\n\\\n        normal = getNormalFromTexture(attributes, normal);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_DOUBLE_SIDED_MATERIAL\\n\\\n        if (czm_backFacing()) {\\n\\\n            normal = -normal;\\n\\\n        }\\n\\\n    #endif\\n\\\n\\n\\\n    return normal;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HAS_BASE_COLOR_TEXTURE\\n\\\nvec4 getBaseColorFromTexture()\\n\\\n{\\n\\\n    vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR;\\n\\\n    #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM\\n\\\n        baseColorTexCoords = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform);\\n\\\n    #endif\\n\\\n\\n\\\n    vec4 baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords));\\n\\\n\\n\\\n    #ifdef HAS_BASE_COLOR_FACTOR\\n\\\n        baseColorWithAlpha *= u_baseColorFactor;\\n\\\n    #endif\\n\\\n\\n\\\n    return baseColorWithAlpha;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HAS_EMISSIVE_TEXTURE\\n\\\nvec3 getEmissiveFromTexture()\\n\\\n{\\n\\\n    vec2 emissiveTexCoords = TEXCOORD_EMISSIVE;\\n\\\n    #ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM\\n\\\n        emissiveTexCoords = computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform);\\n\\\n    #endif\\n\\\n\\n\\\n    vec3 emissive = czm_srgbToLinear(texture(u_emissiveTexture, emissiveTexCoords).rgb);\\n\\\n    #ifdef HAS_EMISSIVE_FACTOR\\n\\\n        emissive *= u_emissiveFactor;\\n\\\n    #endif\\n\\\n\\n\\\n    return emissive;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)\\n\\\nvoid setSpecularGlossiness(inout czm_modelMaterial material)\\n\\\n{\\n\\\n    #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE\\n\\\n        vec2 specularGlossinessTexCoords = TEXCOORD_SPECULAR_GLOSSINESS;\\n\\\n        #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM\\n\\\n            specularGlossinessTexCoords = computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform);\\n\\\n        #endif\\n\\\n\\n\\\n        vec4 specularGlossiness = czm_srgbToLinear(texture(u_specularGlossinessTexture, specularGlossinessTexCoords));\\n\\\n        vec3 specular = specularGlossiness.rgb;\\n\\\n        float glossiness = specularGlossiness.a;\\n\\\n        #ifdef HAS_LEGACY_SPECULAR_FACTOR\\n\\\n            specular *= u_legacySpecularFactor;\\n\\\n        #endif\\n\\\n\\n\\\n        #ifdef HAS_GLOSSINESS_FACTOR\\n\\\n            glossiness *= u_glossinessFactor;\\n\\\n        #endif\\n\\\n    #else\\n\\\n        #ifdef HAS_LEGACY_SPECULAR_FACTOR\\n\\\n            vec3 specular = clamp(u_legacySpecularFactor, vec3(0.0), vec3(1.0));\\n\\\n        #else\\n\\\n            vec3 specular = vec3(1.0);\\n\\\n        #endif\\n\\\n\\n\\\n        #ifdef HAS_GLOSSINESS_FACTOR\\n\\\n            float glossiness = clamp(u_glossinessFactor, 0.0, 1.0);\\n\\\n        #else\\n\\\n            float glossiness = 1.0;\\n\\\n        #endif\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_DIFFUSE_TEXTURE\\n\\\n        vec2 diffuseTexCoords = TEXCOORD_DIFFUSE;\\n\\\n        #ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM\\n\\\n            diffuseTexCoords = computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform);\\n\\\n        #endif\\n\\\n\\n\\\n        vec4 diffuse = czm_srgbToLinear(texture(u_diffuseTexture, diffuseTexCoords));\\n\\\n        #ifdef HAS_DIFFUSE_FACTOR\\n\\\n            diffuse *= u_diffuseFactor;\\n\\\n        #endif\\n\\\n    #elif defined(HAS_DIFFUSE_FACTOR)\\n\\\n        vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0));\\n\\\n    #else\\n\\\n        vec4 diffuse = vec4(1.0);\\n\\\n    #endif\\n\\\n\\n\\\n    material.diffuse = diffuse.rgb * (1.0 - czm_maximumComponent(specular));\\n\\\n    // the specular glossiness extension's alpha overrides anything set\\n\\\n    // by the base material.\\n\\\n    material.alpha = diffuse.a;\\n\\\n\\n\\\n    material.specular = specular;\\n\\\n\\n\\\n    // glossiness is the opposite of roughness, but easier for artists to use.\\n\\\n    material.roughness = 1.0 - glossiness;\\n\\\n}\\n\\\n#elif defined(LIGHTING_PBR)\\n\\\nfloat setMetallicRoughness(inout czm_modelMaterial material)\\n\\\n{\\n\\\n    #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE\\n\\\n        vec2 metallicRoughnessTexCoords = TEXCOORD_METALLIC_ROUGHNESS;\\n\\\n        #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM\\n\\\n            metallicRoughnessTexCoords = computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform);\\n\\\n        #endif\\n\\\n\\n\\\n        vec3 metallicRoughness = texture(u_metallicRoughnessTexture, metallicRoughnessTexCoords).rgb;\\n\\\n        float metalness = clamp(metallicRoughness.b, 0.0, 1.0);\\n\\\n        float roughness = clamp(metallicRoughness.g, 0.0, 1.0);\\n\\\n        #ifdef HAS_METALLIC_FACTOR\\n\\\n            metalness = clamp(metalness * u_metallicFactor, 0.0, 1.0);\\n\\\n        #endif\\n\\\n\\n\\\n        #ifdef HAS_ROUGHNESS_FACTOR\\n\\\n            roughness = clamp(roughness * u_roughnessFactor, 0.0, 1.0);\\n\\\n        #endif\\n\\\n    #else\\n\\\n        #ifdef HAS_METALLIC_FACTOR\\n\\\n            float metalness = clamp(u_metallicFactor, 0.0, 1.0);\\n\\\n        #else\\n\\\n            float metalness = 1.0;\\n\\\n        #endif\\n\\\n\\n\\\n        #ifdef HAS_ROUGHNESS_FACTOR\\n\\\n            float roughness = clamp(u_roughnessFactor, 0.0, 1.0);\\n\\\n        #else\\n\\\n            float roughness = 1.0;\\n\\\n        #endif\\n\\\n    #endif\\n\\\n\\n\\\n    // dielectrics use f0 = 0.04, metals use albedo as f0\\n\\\n    const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04);\\n\\\n    vec3 f0 = mix(REFLECTANCE_DIELECTRIC, material.baseColor.rgb, metalness);\\n\\\n\\n\\\n    material.specular = f0;\\n\\\n\\n\\\n    // diffuse only applies to dielectrics.\\n\\\n    material.diffuse = mix(material.baseColor.rgb, vec3(0.0), metalness);\\n\\\n\\n\\\n    // This is perceptual roughness. The square of this value is used for direct lighting\\n\\\n    material.roughness = roughness;\\n\\\n\\n\\\n    return metalness;\\n\\\n}\\n\\\n#ifdef USE_SPECULAR\\n\\\nvoid setSpecular(inout czm_modelMaterial material, in float metalness)\\n\\\n{\\n\\\n    #ifdef HAS_SPECULAR_TEXTURE\\n\\\n        vec2 specularTexCoords = TEXCOORD_SPECULAR;\\n\\\n        #ifdef HAS_SPECULAR_TEXTURE_TRANSFORM\\n\\\n            specularTexCoords = computeTextureTransform(specularTexCoords, u_specularTextureTransform);\\n\\\n        #endif\\n\\\n        float specularWeight = texture(u_specularTexture, specularTexCoords).a;\\n\\\n        #ifdef HAS_SPECULAR_FACTOR\\n\\\n            specularWeight *= u_specularFactor;\\n\\\n        #endif\\n\\\n    #else\\n\\\n        #ifdef HAS_SPECULAR_FACTOR\\n\\\n            float specularWeight = u_specularFactor;\\n\\\n        #else\\n\\\n            float specularWeight = 1.0;\\n\\\n        #endif\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_SPECULAR_COLOR_TEXTURE\\n\\\n        vec2 specularColorTexCoords = TEXCOORD_SPECULAR_COLOR;\\n\\\n        #ifdef HAS_SPECULAR_COLOR_TEXTURE_TRANSFORM\\n\\\n            specularColorTexCoords = computeTextureTransform(specularColorTexCoords, u_specularColorTextureTransform);\\n\\\n        #endif\\n\\\n        vec3 specularColorSample = texture(u_specularColorTexture, specularColorTexCoords).rgb;\\n\\\n        vec3 specularColorFactor = czm_srgbToLinear(specularColorSample);\\n\\\n        #ifdef HAS_SPECULAR_COLOR_FACTOR\\n\\\n            specularColorFactor *= u_specularColorFactor;\\n\\\n        #endif\\n\\\n    #else\\n\\\n        #ifdef HAS_SPECULAR_COLOR_FACTOR\\n\\\n            vec3 specularColorFactor = u_specularColorFactor;\\n\\\n        #else\\n\\\n            vec3 specularColorFactor = vec3(1.0);\\n\\\n        #endif\\n\\\n    #endif\\n\\\n    material.specularWeight = specularWeight;\\n\\\n    vec3 f0 = material.specular;\\n\\\n    vec3 dielectricSpecularF0 = min(f0 * specularColorFactor, vec3(1.0));\\n\\\n    material.specular = mix(dielectricSpecularF0, material.baseColor.rgb, metalness);\\n\\\n}\\n\\\n#endif\\n\\\n#ifdef USE_ANISOTROPY\\n\\\nvoid setAnisotropy(inout czm_modelMaterial material, in NormalInfo normalInfo)\\n\\\n{\\n\\\n    mat2 rotation = mat2(u_anisotropy.xy, -u_anisotropy.y, u_anisotropy.x);\\n\\\n    float anisotropyStrength = u_anisotropy.z;\\n\\\n\\n\\\n    vec2 direction = vec2(1.0, 0.0);\\n\\\n    #ifdef HAS_ANISOTROPY_TEXTURE\\n\\\n        vec2 anisotropyTexCoords = TEXCOORD_ANISOTROPY;\\n\\\n        #ifdef HAS_ANISOTROPY_TEXTURE_TRANSFORM\\n\\\n            anisotropyTexCoords = computeTextureTransform(anisotropyTexCoords, u_anisotropyTextureTransform);\\n\\\n        #endif\\n\\\n        vec3 anisotropySample = texture(u_anisotropyTexture, anisotropyTexCoords).rgb;\\n\\\n        direction = anisotropySample.rg * 2.0 - vec2(1.0);\\n\\\n        anisotropyStrength *= anisotropySample.b;\\n\\\n    #endif\\n\\\n\\n\\\n    direction = rotation * direction;\\n\\\n    mat3 tbn = mat3(normalInfo.tangent, normalInfo.bitangent, normalInfo.normal);\\n\\\n    vec3 anisotropicT = tbn * normalize(vec3(direction, 0.0));\\n\\\n    vec3 anisotropicB = cross(normalInfo.geometryNormal, anisotropicT);\\n\\\n\\n\\\n    material.anisotropicT = anisotropicT;\\n\\\n    material.anisotropicB = anisotropicB;\\n\\\n    material.anisotropyStrength = anisotropyStrength;\\n\\\n}\\n\\\n#endif\\n\\\n#ifdef USE_CLEARCOAT\\n\\\nvoid setClearcoat(inout czm_modelMaterial material, in ProcessedAttributes attributes)\\n\\\n{\\n\\\n    #ifdef HAS_CLEARCOAT_TEXTURE\\n\\\n        vec2 clearcoatTexCoords = TEXCOORD_CLEARCOAT;\\n\\\n        #ifdef HAS_CLEARCOAT_TEXTURE_TRANSFORM\\n\\\n            clearcoatTexCoords = computeTextureTransform(clearcoatTexCoords, u_clearcoatTextureTransform);\\n\\\n        #endif\\n\\\n        float clearcoatFactor = texture(u_clearcoatTexture, clearcoatTexCoords).r;\\n\\\n        #ifdef HAS_CLEARCOAT_FACTOR\\n\\\n            clearcoatFactor *= u_clearcoatFactor;\\n\\\n        #endif\\n\\\n    #else\\n\\\n        #ifdef HAS_CLEARCOAT_FACTOR\\n\\\n            float clearcoatFactor = u_clearcoatFactor;\\n\\\n        #else\\n\\\n            // PERFORMANCE_IDEA: this case should turn the whole extension off\\n\\\n            float clearcoatFactor = 0.0;\\n\\\n        #endif\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE\\n\\\n        vec2 clearcoatRoughnessTexCoords = TEXCOORD_CLEARCOAT_ROUGHNESS;\\n\\\n        #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE_TRANSFORM\\n\\\n            clearcoatRoughnessTexCoords = computeTextureTransform(clearcoatRoughnessTexCoords, u_clearcoatRoughnessTextureTransform);\\n\\\n        #endif\\n\\\n        float clearcoatRoughness = texture(u_clearcoatRoughnessTexture, clearcoatRoughnessTexCoords).g;\\n\\\n        #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR\\n\\\n            clearcoatRoughness *= u_clearcoatRoughnessFactor;\\n\\\n        #endif\\n\\\n    #else\\n\\\n        #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR\\n\\\n            float clearcoatRoughness = u_clearcoatRoughnessFactor;\\n\\\n        #else\\n\\\n            float clearcoatRoughness = 0.0;\\n\\\n        #endif\\n\\\n    #endif\\n\\\n\\n\\\n    material.clearcoatFactor = clearcoatFactor;\\n\\\n    // This is perceptual roughness. The square of this value is used for direct lighting\\n\\\n    material.clearcoatRoughness = clearcoatRoughness;\\n\\\n    #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE\\n\\\n        material.clearcoatNormal = getClearcoatNormalFromTexture(attributes, attributes.normalEC);\\n\\\n    #else\\n\\\n        material.clearcoatNormal = attributes.normalEC;\\n\\\n    #endif\\n\\\n}\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\nvoid materialStage(inout czm_modelMaterial material, ProcessedAttributes attributes, SelectedFeature feature)\\n\\\n{\\n\\\n    #ifdef USE_ANISOTROPY\\n\\\n        NormalInfo normalInfo = getNormalInfo(attributes);\\n\\\n        material.normalEC = normalInfo.normal;\\n\\\n    #elif defined(HAS_NORMALS)\\n\\\n        material.normalEC = computeNormal(attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    vec4 baseColorWithAlpha = vec4(1.0);\\n\\\n    // Regardless of whether we use PBR, set a base color\\n\\\n    #ifdef HAS_BASE_COLOR_TEXTURE\\n\\\n        baseColorWithAlpha = getBaseColorFromTexture();\\n\\\n    #elif defined(HAS_BASE_COLOR_FACTOR)\\n\\\n        baseColorWithAlpha = u_baseColorFactor;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_IMAGERY\\n\\\n    baseColorWithAlpha = blendBaseColorWithImagery(baseColorWithAlpha);\\n\\\n    #endif // HAS_IMAGERY\\n\\\n\\n\\\n    #ifdef HAS_POINT_CLOUD_COLOR_STYLE\\n\\\n        baseColorWithAlpha = v_pointCloudColor;\\n\\\n    #elif defined(HAS_COLOR_0)\\n\\\n        vec4 color = attributes.color_0;\\n\\\n        // .pnts files store colors in the sRGB color space\\n\\\n        #ifdef HAS_SRGB_COLOR\\n\\\n            color = czm_srgbToLinear(color);\\n\\\n        #endif\\n\\\n        baseColorWithAlpha *= color;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef USE_CPU_STYLING\\n\\\n        baseColorWithAlpha.rgb = blend(baseColorWithAlpha.rgb, feature.color.rgb, model_colorBlend);\\n\\\n    #endif\\n\\\n    material.baseColor = baseColorWithAlpha;\\n\\\n    material.diffuse = baseColorWithAlpha.rgb;\\n\\\n    material.alpha = baseColorWithAlpha.a;\\n\\\n\\n\\\n    #ifdef HAS_OCCLUSION_TEXTURE\\n\\\n        vec2 occlusionTexCoords = TEXCOORD_OCCLUSION;\\n\\\n        #ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM\\n\\\n            occlusionTexCoords = computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform);\\n\\\n        #endif\\n\\\n        material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_EMISSIVE_TEXTURE\\n\\\n        material.emissive = getEmissiveFromTexture();\\n\\\n    #elif defined(HAS_EMISSIVE_FACTOR)\\n\\\n        material.emissive = u_emissiveFactor;\\n\\\n    #endif\\n\\\n\\n\\\n    #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)\\n\\\n        setSpecularGlossiness(material);\\n\\\n    #elif defined(LIGHTING_PBR)\\n\\\n        float metalness = setMetallicRoughness(material);\\n\\\n        #ifdef USE_SPECULAR\\n\\\n            setSpecular(material, metalness);\\n\\\n        #endif\\n\\\n        #ifdef USE_ANISOTROPY\\n\\\n            setAnisotropy(material, normalInfo);\\n\\\n        #endif\\n\\\n        #ifdef USE_CLEARCOAT\\n\\\n            setClearcoat(material, attributes);\\n\\\n        #endif\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void metadataStage(\\n\\\n  FeatureIds featureIds,\\n\\\n  out Metadata metadata,\\n\\\n  out MetadataClass metadataClass,\\n\\\n  out MetadataStatistics metadataStatistics,\\n\\\n  ProcessedAttributes attributes\\n\\\n  )\\n\\\n{\\n\\\n  initializeMetadata(featureIds, metadata, metadataClass, metadataStatistics, attributes);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void metadataStage(\\n\\\n  FeatureIds featureIds,\\n\\\n  out Metadata metadata,\\n\\\n  out MetadataClass metadataClass,\\n\\\n  out MetadataStatistics metadataStatistics,\\n\\\n  ProcessedAttributes attributes\\n\\\n  )\\n\\\n{\\n\\\n  initializeMetadata(featureIds, metadata, metadataClass, metadataStatistics, attributes);\\n\\\n  setMetadataVaryings();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef USE_CLIPPING_PLANES_FLOAT_TEXTURE\\n\\\nvec4 getClippingPlane(\\n\\\n    highp sampler2D packedClippingPlanes,\\n\\\n    int clippingPlaneNumber,\\n\\\n    mat4 transform\\n\\\n) {\\n\\\n    int pixY = clippingPlaneNumber / CLIPPING_PLANES_TEXTURE_WIDTH;\\n\\\n    int pixX = clippingPlaneNumber - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH);\\n\\\n    float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH);\\n\\\n    float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT);\\n\\\n    float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel\\n\\\n    float v = (float(pixY) + 0.5) * pixelHeight;\\n\\\n    vec4 plane = texture(packedClippingPlanes, vec2(u, v));\\n\\\n    return czm_transformPlane(plane, transform);\\n\\\n}\\n\\\n#else\\n\\\n// Handle uint8 clipping texture instead\\n\\\nvec4 getClippingPlane(\\n\\\n    highp sampler2D packedClippingPlanes,\\n\\\n    int clippingPlaneNumber,\\n\\\n    mat4 transform\\n\\\n) {\\n\\\n    int clippingPlaneStartIndex = clippingPlaneNumber * 2; // clipping planes are two pixels each\\n\\\n    int pixY = clippingPlaneStartIndex / CLIPPING_PLANES_TEXTURE_WIDTH;\\n\\\n    int pixX = clippingPlaneStartIndex - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH);\\n\\\n    float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH);\\n\\\n    float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT);\\n\\\n    float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel\\n\\\n    float v = (float(pixY) + 0.5) * pixelHeight;\\n\\\n    vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0;\\n\\\n    vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);\\n\\\n    vec4 plane;\\n\\\n    plane.xyz = czm_octDecode(oct, 65535.0);\\n\\\n    plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + pixelWidth, v)));\\n\\\n    return czm_transformPlane(plane, transform);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\nfloat clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) {\\n\\\n    vec4 position = czm_windowToEyeCoordinates(fragCoord);\\n\\\n    vec3 clipNormal = vec3(0.0);\\n\\\n    vec3 clipPosition = vec3(0.0);\\n\\\n    float pixelWidth = czm_metersPerPixel(position);\\n\\\n    \\n\\\n    #ifdef UNION_CLIPPING_REGIONS\\n\\\n    float clipAmount; // For union planes, we want to get the min distance. So we set the initial value to the first plane distance in the loop below.\\n\\\n    #else\\n\\\n    float clipAmount = 0.0;\\n\\\n    bool clipped = true;\\n\\\n    #endif\\n\\\n\\n\\\n    for (int i = 0; i < CLIPPING_PLANES_LENGTH; ++i) {\\n\\\n        vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);\\n\\\n        clipNormal = clippingPlane.xyz;\\n\\\n        clipPosition = -clippingPlane.w * clipNormal;\\n\\\n        float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;\\n\\\n        \\n\\\n        #ifdef UNION_CLIPPING_REGIONS\\n\\\n        clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));\\n\\\n        if (amount <= 0.0) {\\n\\\n            discard;\\n\\\n        }\\n\\\n        #else\\n\\\n        clipAmount = max(amount, clipAmount);\\n\\\n        clipped = clipped && (amount <= 0.0);\\n\\\n        #endif\\n\\\n    }\\n\\\n\\n\\\n    #ifndef UNION_CLIPPING_REGIONS\\n\\\n    if (clipped) {\\n\\\n        discard;\\n\\\n    }\\n\\\n    #endif\\n\\\n    \\n\\\n    return clipAmount;\\n\\\n}\\n\\\n\\n\\\nvoid modelClippingPlanesStage(inout vec4 color)\\n\\\n{\\n\\\n    float clipDistance = clip(gl_FragCoord, model_clippingPlanes, model_clippingPlanesMatrix);\\n\\\n    vec4 clippingPlanesEdgeColor = vec4(1.0);\\n\\\n    clippingPlanesEdgeColor.rgb = model_clippingPlanesEdgeStyle.rgb;\\n\\\n    float clippingPlanesEdgeWidth = model_clippingPlanesEdgeStyle.a;\\n\\\n    \\n\\\n    if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) {\\n\\\n        color = clippingPlanesEdgeColor;\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void modelClippingPolygonsStage()\\n\\\n{\\n\\\n    vec2 clippingPosition = v_clippingPosition;\\n\\\n    int regionIndex = v_regionIndex;\\n\\\n    czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void modelClippingPolygonsStage(ProcessedAttributes attributes)\\n\\\n{\\n\\\n    vec2 sphericalLatLong = czm_approximateSphericalCoordinates(v_positionWC);\\n\\\n    sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);\\n\\\n\\n\\\n    vec2 minDistance = vec2(czm_infinity);\\n\\\n    v_regionIndex = -1;\\n\\\n    v_clippingPosition = vec2(czm_infinity);\\n\\\n\\n\\\n    for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) {\\n\\\n        vec4 extents = czm_unpackClippingExtents(model_clippingExtents, regionIndex);\\n\\\n        vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz;\\n\\\n\\n\\\n        vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0));\\n\\\n        vec2 distance = abs(rectUv - clamped) * extents.wz;\\n\\\n        \\n\\\n        if (minDistance.x > distance.x || minDistance.y > distance.y) {\\n\\\n            minDistance = distance;\\n\\\n            v_clippingPosition = rectUv;\\n\\\n        }\\n\\\n\\n\\\n        float threshold = 0.01;\\n\\\n        if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) {\\n\\\n            v_regionIndex = regionIndex;\\n\\\n        }\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void modelColorStage(inout czm_modelMaterial material)\\n\\\n{\\n\\\n    material.diffuse = mix(material.diffuse, model_color.rgb, model_colorBlend);\\n\\\n    float highlight = ceil(model_colorBlend);\\n\\\n    material.diffuse *= mix(model_color.rgb, vec3(1.0), highlight);\\n\\\n    material.alpha *= model_color.a;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nprecision highp float;\\n\\\n\\n\\\nczm_modelMaterial defaultModelMaterial()\\n\\\n{\\n\\\n    czm_modelMaterial material;\\n\\\n    material.diffuse = vec3(0.0);\\n\\\n    material.specular = vec3(1.0);\\n\\\n    material.roughness = 1.0;\\n\\\n    material.occlusion = 1.0;\\n\\\n    material.normalEC = vec3(0.0, 0.0, 1.0);\\n\\\n    material.emissive = vec3(0.0);\\n\\\n    material.alpha = 1.0;\\n\\\n    return material;\\n\\\n}\\n\\\n\\n\\\nvec4 handleAlpha(vec3 color, float alpha)\\n\\\n{\\n\\\n    #ifdef ALPHA_MODE_MASK\\n\\\n    if (alpha < u_alphaCutoff) {\\n\\\n        discard;\\n\\\n    }\\n\\\n    #endif\\n\\\n\\n\\\n    return vec4(color, alpha);\\n\\\n}\\n\\\n\\n\\\nSelectedFeature selectedFeature;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    #if defined(PRIMITIVE_TYPE_POINTS) && defined(HAS_POINT_DIAMETER)\\n\\\n    // Render points as circles\\n\\\n    float distanceToCenter = length(gl_PointCoord - vec2(0.5));\\n\\\n    if (distanceToCenter > 0.5) {\\n\\\n        discard;\\n\\\n    }\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_POINT_CLOUD_SHOW_STYLE\\n\\\n        if (v_pointCloudShow == 0.0)\\n\\\n        {\\n\\\n            discard;\\n\\\n        }\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_MODEL_SPLITTER\\n\\\n    modelSplitterStage();\\n\\\n    #endif\\n\\\n\\n\\\n    czm_modelMaterial material = defaultModelMaterial();\\n\\\n\\n\\\n    ProcessedAttributes attributes;\\n\\\n    geometryStage(attributes);\\n\\\n\\n\\\n    FeatureIds featureIds;\\n\\\n    featureIdStage(featureIds, attributes);\\n\\\n\\n\\\n    Metadata metadata;\\n\\\n    MetadataClass metadataClass;\\n\\\n    MetadataStatistics metadataStatistics;\\n\\\n    metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes);\\n\\\n\\n\\\n    //========================================================================\\n\\\n    // When not picking metadata START\\n\\\n    #ifndef METADATA_PICKING_ENABLED\\n\\\n\\n\\\n    #ifdef HAS_SELECTED_FEATURE_ID\\n\\\n    selectedFeatureIdStage(selectedFeature, featureIds);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifndef CUSTOM_SHADER_REPLACE_MATERIAL\\n\\\n    materialStage(material, attributes, selectedFeature);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_CUSTOM_FRAGMENT_SHADER\\n\\\n    customShaderStage(material, attributes, featureIds, metadata, metadataClass, metadataStatistics);\\n\\\n    #endif\\n\\\n\\n\\\n    lightingStage(material, attributes);\\n\\\n\\n\\\n    #ifdef HAS_SELECTED_FEATURE_ID\\n\\\n    cpuStylingStage(material, selectedFeature);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_MODEL_COLOR\\n\\\n    modelColorStage(material);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_PRIMITIVE_OUTLINE\\n\\\n    primitiveOutlineStage(material);\\n\\\n    #endif\\n\\\n\\n\\\n    vec4 color = handleAlpha(material.diffuse, material.alpha);\\n\\\n\\n\\\n    // When not picking metadata END\\n\\\n    //========================================================================\\n\\\n    #else\\n\\\n    //========================================================================\\n\\\n    // When picking metadata START\\n\\\n\\n\\\n    vec4 metadataValues = vec4(0.0, 0.0, 0.0, 0.0);\\n\\\n    metadataPickingStage(metadata, metadataClass, metadataValues);\\n\\\n    vec4 color = metadataValues;\\n\\\n\\n\\\n    #endif\\n\\\n    // When picking metadata END\\n\\\n    //========================================================================\\n\\\n\\n\\\n    #ifdef HAS_CLIPPING_PLANES\\n\\\n    modelClippingPlanesStage(color);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef ENABLE_CLIPPING_POLYGONS\\n\\\n    modelClippingPolygonsStage();\\n\\\n    #endif\\n\\\n\\n\\\n    //========================================================================\\n\\\n    // When not picking metadata START\\n\\\n    #ifndef METADATA_PICKING_ENABLED\\n\\\n\\n\\\n    #if defined(HAS_SILHOUETTE) && defined(HAS_NORMALS)\\n\\\n    silhouetteStage(color);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_ATMOSPHERE\\n\\\n    atmosphereStage(color, attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_EDGE_VISIBILITY\\n\\\n    edgeVisibilityStage(color, featureIds);\\n\\\n    edgeDetectionStage(color, featureIds);\\n\\\n    #endif\\n\\\n\\n\\\n    #endif\\n\\\n    // When not picking metadata END\\n\\\n    //========================================================================\\n\\\n\\n\\\n    out_FragColor = color;\\n\\\n}\\n\\\n\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void silhouetteStage(inout vec4 color) {\\n\\\n    if(model_silhouettePass) {\\n\\\n        color = czm_gammaCorrect(model_silhouetteColor);\\n\\\n    }\\n\\\n}\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void silhouetteStage(in ProcessedAttributes attributes, inout vec4 positionClip) {\\n\\\n     #ifdef HAS_NORMALS\\n\\\n     if(model_silhouettePass) {\\n\\\n          vec3 normal = normalize(czm_normal3D * attributes.normalMC);\\n\\\n          normal.x *= czm_projection[0][0];\\n\\\n          normal.y *= czm_projection[1][1];\\n\\\n          positionClip.xy += normal.xy * positionClip.w * model_silhouetteSize * czm_pixelRatio / czm_viewport.z;\\n\\\n    }\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void modelSplitterStage()\\n\\\n{\\n\\\n    // Don't split when rendering the shadow map, because it is rendered from\\n\\\n    // the perspective of a totally different camera.\\n\\\n#ifndef SHADOW_MAP\\n\\\n    if (model_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;\\n\\\n    if (model_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"precision highp float;\\n\\\n\\n\\\nczm_modelVertexOutput defaultVertexOutput(vec3 positionMC) {\\n\\\n    czm_modelVertexOutput vsOutput;\\n\\\n    vsOutput.positionMC = positionMC;\\n\\\n    vsOutput.pointSize = 1.0;\\n\\\n    return vsOutput;\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    // Initialize the attributes struct with all\\n\\\n    // attributes except quantized ones.\\n\\\n    ProcessedAttributes attributes;\\n\\\n    initializeAttributes(attributes);\\n\\\n\\n\\\n    #ifdef HAS_IMAGERY\\n\\\n    initializeImageryAttributes();\\n\\\n    #endif\\n\\\n\\n\\\n    // Dequantize the quantized ones and add them to the\\n\\\n    // attributes struct.\\n\\\n    #ifdef USE_DEQUANTIZATION\\n\\\n    dequantizationStage(attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_MORPH_TARGETS\\n\\\n    morphTargetsStage(attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_SKINNING\\n\\\n    skinningStage(attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_PRIMITIVE_OUTLINE\\n\\\n    primitiveOutlineStage();\\n\\\n    #endif\\n\\\n\\n\\\n    // Compute the bitangent according to the formula in the glTF spec.\\n\\\n    // Normal and tangents can be affected by morphing and skinning, so\\n\\\n    // the bitangent should not be computed until their values are finalized.\\n\\\n    #ifdef HAS_BITANGENTS\\n\\\n    attributes.bitangentMC = normalize(cross(attributes.normalMC, attributes.tangentMC) * attributes.tangentSignMC);\\n\\\n    #endif\\n\\\n\\n\\\n    FeatureIds featureIds;\\n\\\n    featureIdStage(featureIds, attributes);\\n\\\n\\n\\\n    #ifdef HAS_SELECTED_FEATURE_ID\\n\\\n    SelectedFeature feature;\\n\\\n    selectedFeatureIdStage(feature, featureIds);\\n\\\n    // Handle any show properties that come from the style.\\n\\\n    cpuStylingStage(attributes.positionMC, feature);\\n\\\n    #endif\\n\\\n\\n\\\n    #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING)\\n\\\n    // The scene mode 2D pipeline stage and instancing stage add a different\\n\\\n    // model view matrix to accurately project the model to 2D. However, the\\n\\\n    // output positions and normals should be transformed by the 3D matrices\\n\\\n    // to keep the data the same for the fragment shader.\\n\\\n    mat4 modelView = czm_modelView3D;\\n\\\n    mat3 normal = czm_normal3D;\\n\\\n    #else\\n\\\n    // These are used for individual model projection because they will\\n\\\n    // automatically change based on the scene mode.\\n\\\n    mat4 modelView = czm_modelView;\\n\\\n    mat3 normal = czm_normal;\\n\\\n    #endif\\n\\\n\\n\\\n    // Update the position for this instance in place\\n\\\n    #ifdef HAS_INSTANCING\\n\\\n\\n\\\n        // The legacy instance stage is used when rendering i3dm models that\\n\\\n        // encode instances transforms in world space, as opposed to glTF models\\n\\\n        // that use EXT_mesh_gpu_instancing, where instance transforms are encoded\\n\\\n        // in object space.\\n\\\n        #ifdef USE_LEGACY_INSTANCING\\n\\\n        mat4 instanceModelView;\\n\\\n        mat3 instanceModelViewInverseTranspose;\\n\\\n\\n\\\n        legacyInstancingStage(attributes, instanceModelView, instanceModelViewInverseTranspose);\\n\\\n\\n\\\n        modelView = instanceModelView;\\n\\\n        normal = instanceModelViewInverseTranspose;\\n\\\n        #else\\n\\\n        instancingStage(attributes);\\n\\\n        #endif\\n\\\n\\n\\\n        #ifdef USE_PICKING\\n\\\n        v_pickColor = a_pickColor;\\n\\\n        #endif\\n\\\n\\n\\\n    #endif\\n\\\n\\n\\\n    Metadata metadata;\\n\\\n    MetadataClass metadataClass;\\n\\\n    MetadataStatistics metadataStatistics;\\n\\\n    metadataStage(featureIds, metadata, metadataClass, metadataStatistics, attributes);\\n\\\n\\n\\\n    #ifdef HAS_VERTICAL_EXAGGERATION\\n\\\n    verticalExaggerationStage(attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_CUSTOM_VERTEX_SHADER\\n\\\n    czm_modelVertexOutput vsOutput = defaultVertexOutput(attributes.positionMC);\\n\\\n    customShaderStage(vsOutput, attributes, featureIds, metadata, metadataClass, metadataStatistics);\\n\\\n    #endif\\n\\\n\\n\\\n    // Compute the final position in each coordinate system needed.\\n\\\n    // This returns the value that will be assigned to gl_Position.\\n\\\n    vec4 positionClip = geometryStage(attributes, modelView, normal);\\n\\\n\\n\\\n    // This must go after the geometry stage as it needs v_positionWC\\n\\\n    #ifdef HAS_ATMOSPHERE\\n\\\n    atmosphereStage(attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef ENABLE_CLIPPING_POLYGONS\\n\\\n    modelClippingPolygonsStage(attributes);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_SILHOUETTE\\n\\\n    silhouetteStage(attributes, positionClip);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_POINT_CLOUD_SHOW_STYLE\\n\\\n    float show = pointCloudShowStylingStage(attributes, metadata);\\n\\\n    #else\\n\\\n    float show = 1.0;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING\\n\\\n    show *= pointCloudBackFaceCullingStage();\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_POINT_CLOUD_COLOR_STYLE\\n\\\n    v_pointCloudColor = pointCloudColorStylingStage(attributes, metadata);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef PRIMITIVE_TYPE_POINTS\\n\\\n        #ifdef HAS_CUSTOM_VERTEX_SHADER\\n\\\n        gl_PointSize = vsOutput.pointSize;\\n\\\n        #elif defined(HAS_POINT_CLOUD_POINT_SIZE_STYLE) || defined(HAS_POINT_CLOUD_ATTENUATION)\\n\\\n        gl_PointSize = pointCloudPointSizeStylingStage(attributes, metadata);\\n\\\n        #elif defined(HAS_POINT_DIAMETER)\\n\\\n        gl_PointSize = u_pointDiameter;\\n\\\n        #else\\n\\\n        gl_PointSize = 1.0;\\n\\\n        #endif\\n\\\n\\n\\\n        gl_PointSize *= show;\\n\\\n    #endif\\n\\\n\\n\\\n    // Important NOT to compute gl_Position = show * positionClip or we hit:\\n\\\n    // https://github.com/CesiumGS/cesium/issues/11270\\n\\\n    //\\n\\\n    // We will discard points with v_pointCloudShow == 0 in the fragment shader.\\n\\\n    gl_Position = positionClip;\\n\\\n\\n\\\n    #ifdef HAS_POINT_CLOUD_SHOW_STYLE\\n\\\n    v_pointCloudShow = show;\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void morphTargetsStage(inout ProcessedAttributes attributes) \\n\\\n{\\n\\\n    vec3 positionMC = attributes.positionMC;\\n\\\n    attributes.positionMC = getMorphedPosition(positionMC);\\n\\\n\\n\\\n    #ifdef HAS_NORMALS\\n\\\n    vec3 normalMC = attributes.normalMC;\\n\\\n    attributes.normalMC = getMorphedNormal(normalMC);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_TANGENTS\\n\\\n    vec3 tangentMC = attributes.tangentMC;\\n\\\n    attributes.tangentMC = getMorphedTangent(tangentMC);\\n\\\n    #endif\\n\\\n}\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float getPointSizeFromAttenuation(vec3 positionEC) {\\n\\\n  // Variables are packed into a single vector to minimize gl.uniformXXX() calls\\n\\\n  float pointSize = model_pointCloudParameters.x;\\n\\\n  float geometricError = model_pointCloudParameters.y;\\n\\\n  float depthMultiplier = model_pointCloudParameters.z;\\n\\\n\\n\\\n  float depth = -positionEC.z;\\n\\\n  return min((geometricError / depth) * depthMultiplier, pointSize);\\n\\\n}\\n\\\n\\n\\\n#ifdef HAS_POINT_CLOUD_SHOW_STYLE\\n\\\nfloat pointCloudShowStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {\\n\\\n  float tiles3d_tileset_time = model_pointCloudParameters.w;\\n\\\n  return float(getShowFromStyle(attributes, metadata, tiles3d_tileset_time));\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HAS_POINT_CLOUD_COLOR_STYLE\\n\\\nvec4 pointCloudColorStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {\\n\\\n  float tiles3d_tileset_time = model_pointCloudParameters.w;\\n\\\n  return getColorFromStyle(attributes, metadata, tiles3d_tileset_time);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HAS_POINT_CLOUD_POINT_SIZE_STYLE\\n\\\nfloat pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {\\n\\\n  float tiles3d_tileset_time = model_pointCloudParameters.w;\\n\\\n  return float(getPointSizeFromStyle(attributes, metadata, tiles3d_tileset_time));\\n\\\n}\\n\\\n#elif defined(HAS_POINT_CLOUD_ATTENUATION)\\n\\\nfloat pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {\\n\\\n  return getPointSizeFromAttenuation(v_positionEC);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING\\n\\\nfloat pointCloudBackFaceCullingStage() {\\n\\\n  #if defined(HAS_NORMALS) && !defined(HAS_DOUBLE_SIDED_MATERIAL)\\n\\\n  // This needs to be computed in eye coordinates so we can't use attributes.normalMC\\n\\\n  return step(-v_normalEC.z, 0.0);\\n\\\n  #else\\n\\\n  return 1.0;\\n\\\n  #endif\\n\\\n}\\n\\\n#endif\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void primitiveOutlineStage(inout czm_modelMaterial material) {\\n\\\n    if (!model_showOutline) {\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    float outlineX = \\n\\\n        texture(model_outlineTexture, vec2(v_outlineCoordinates.x, 0.5)).r;\\n\\\n    float outlineY = \\n\\\n        texture(model_outlineTexture, vec2(v_outlineCoordinates.y, 0.5)).r;\\n\\\n    float outlineZ = \\n\\\n        texture(model_outlineTexture, vec2(v_outlineCoordinates.z, 0.5)).r;\\n\\\n    float outlineness = max(outlineX, max(outlineY, outlineZ));\\n\\\n\\n\\\n    material.diffuse = mix(material.diffuse, model_outlineColor.rgb, model_outlineColor.a * outlineness);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void primitiveOutlineStage() {\\n\\\n    v_outlineCoordinates = a_outlineCoordinates;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"vec2 computeSt(float featureId)\\n\\\n{\\n\\\n    float stepX = model_textureStep.x;\\n\\\n    float centerX = model_textureStep.y;\\n\\\n\\n\\\n    #ifdef MULTILINE_BATCH_TEXTURE\\n\\\n    float stepY = model_textureStep.z;\\n\\\n    float centerY = model_textureStep.w;\\n\\\n\\n\\\n    float xId = mod(featureId, model_textureDimensions.x); \\n\\\n    float yId = floor(featureId / model_textureDimensions.x);\\n\\\n    \\n\\\n    return vec2(centerX + (xId * stepX), centerY + (yId * stepY));\\n\\\n    #else\\n\\\n    return vec2(centerX + (featureId * stepX), 0.5);\\n\\\n    #endif\\n\\\n}\\n\\\n\\n\\\nvoid selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds)\\n\\\n{   \\n\\\n    int featureId = featureIds.SELECTED_FEATURE_ID;\\n\\\n\\n\\\n\\n\\\n    if (featureId < model_featuresLength)\\n\\\n    {\\n\\\n        vec2 featureSt = computeSt(float(featureId));\\n\\\n\\n\\\n        feature.id = featureId;\\n\\\n        feature.st = featureSt;\\n\\\n        feature.color = texture(model_batchTexture, featureSt);\\n\\\n    }\\n\\\n    // Floating point comparisons can be unreliable in GLSL, so we\\n\\\n    // increment the feature ID to make sure it's always greater\\n\\\n    // then the model_featuresLength - a condition we check for in the\\n\\\n    // pick ID, to avoid sampling the pick texture if the feature ID is\\n\\\n    // greater than the number of features.\\n\\\n    else\\n\\\n    {\\n\\\n        feature.id = model_featuresLength + 1;\\n\\\n        feature.st = vec2(0.0);\\n\\\n        feature.color = vec4(1.0);\\n\\\n    }\\n\\\n\\n\\\n    #ifdef HAS_NULL_FEATURE_ID\\n\\\n    if (featureId == model_nullFeatureId) {\\n\\\n        feature.id = featureId;\\n\\\n        feature.st = vec2(0.0);\\n\\\n        feature.color = vec4(1.0);\\n\\\n    }\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void skinningStage(inout ProcessedAttributes attributes) \\n\\\n{\\n\\\n    mat4 skinningMatrix = getSkinningMatrix();\\n\\\n    mat3 skinningMatrixMat3 = mat3(skinningMatrix);\\n\\\n\\n\\\n    vec4 positionMC = vec4(attributes.positionMC, 1.0);\\n\\\n    attributes.positionMC = vec3(skinningMatrix * positionMC);\\n\\\n\\n\\\n    #ifdef HAS_NORMALS\\n\\\n    vec3 normalMC = attributes.normalMC;\\n\\\n    attributes.normalMC = skinningMatrixMat3 * normalMC;\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef HAS_TANGENTS\\n\\\n    vec3 tangentMC = attributes.tangentMC;\\n\\\n    attributes.tangentMC = skinningMatrixMat3 * tangentMC;\\n\\\n    #endif\\n\\\n}\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void verticalExaggerationStage(\\n\\\n  inout ProcessedAttributes attributes\\n\\\n) {\\n\\\n  // Compute the distance from the camera to the local center of curvature.\\n\\\n  vec4 vertexPositionENU = czm_modelToEnu * vec4(attributes.positionMC, 1.0);\\n\\\n  vec2 vertexAzimuth = normalize(vertexPositionENU.xy);\\n\\\n  // Curvature = 1 / radius of curvature.\\n\\\n  float azimuthalCurvature = dot(vertexAzimuth * vertexAzimuth, czm_eyeEllipsoidCurvature);\\n\\\n  float eyeToCenter = 1.0 / azimuthalCurvature + czm_eyeHeight;\\n\\\n\\n\\\n  // Compute the approximate ellipsoid normal at the vertex position.\\n\\\n  // Uses a circular approximation for the Earth curvature along the geodesic.\\n\\\n  vec3 vertexPositionEC = (czm_modelView * vec4(attributes.positionMC, 1.0)).xyz;\\n\\\n  vec3 centerToVertex = eyeToCenter * czm_eyeEllipsoidNormalEC + vertexPositionEC;\\n\\\n  vec3 vertexNormal = normalize(centerToVertex);\\n\\\n\\n\\\n  // Estimate the (sine of the) angle between the camera direction and the vertex normal\\n\\\n  float verticalDistance = dot(vertexPositionEC, czm_eyeEllipsoidNormalEC);\\n\\\n  float horizontalDistance = length(vertexPositionEC - verticalDistance * czm_eyeEllipsoidNormalEC);\\n\\\n  float sinTheta = horizontalDistance / (eyeToCenter + verticalDistance);\\n\\\n  bool isSmallAngle = clamp(sinTheta, 0.0, 0.05) == sinTheta;\\n\\\n\\n\\\n  // Approximate the change in height above the ellipsoid, from camera to vertex position.\\n\\\n  float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexNormal);\\n\\\n  float smallAngleVersine = 0.5 * sinTheta * sinTheta;\\n\\\n  float versine = isSmallAngle ? smallAngleVersine : exactVersine;\\n\\\n  float dHeight = dot(vertexPositionEC, vertexNormal) - eyeToCenter * versine;\\n\\\n  float vertexHeight = czm_eyeHeight + dHeight;\\n\\\n\\n\\\n  // Transform the approximate vertex normal to model coordinates.\\n\\\n  vec3 vertexNormalMC = (czm_inverseModelView * vec4(vertexNormal, 0.0)).xyz;\\n\\\n  vertexNormalMC = normalize(vertexNormalMC);\\n\\\n\\n\\\n  // Compute the exaggeration and apply it along the approximate vertex normal.\\n\\\n  float stretch = u_verticalExaggerationAndRelativeHeight.x;\\n\\\n  float shift = u_verticalExaggerationAndRelativeHeight.y;\\n\\\n  float exaggeration = (vertexHeight - shift) * (stretch - 1.0);\\n\\\n  attributes.positionMC += exaggeration * vertexNormalMC;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 v_color;\\n\\\nin vec4 v_outlineColor;\\n\\\nin float v_innerPercent;\\n\\\nin float v_pixelDistance;\\n\\\nin vec4 v_pickColor;\\n\\\nin float v_splitDirection;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;\\n\\\n    if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;\\n\\\n\\n\\\n    // The distance in UV space from this fragment to the center of the point, at most 0.5.\\n\\\n    float distanceToCenter = length(gl_PointCoord - vec2(0.5));\\n\\\n    // The max distance stops one pixel shy of the edge to leave space for anti-aliasing.\\n\\\n    float maxDistance = max(0.0, 0.5 - v_pixelDistance);\\n\\\n    float wholeAlpha = 1.0 - smoothstep(maxDistance, 0.5, distanceToCenter);\\n\\\n    float innerAlpha = 1.0 - smoothstep(maxDistance * v_innerPercent, 0.5 * v_innerPercent, distanceToCenter);\\n\\\n\\n\\\n    vec4 color = mix(v_outlineColor, v_color, innerAlpha);\\n\\\n    color.a *= wholeAlpha;\\n\\\n\\n\\\n// Fully transparent parts of the billboard are not pickable.\\n\\\n#if !defined(OPAQUE) && !defined(TRANSLUCENT)\\n\\\n    if (color.a < 0.005)   // matches 0/255 and 1/255\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n#else\\n\\\n// The billboard is rendered twice. The opaque pass discards translucent fragments\\n\\\n// and the translucent pass discards opaque fragments.\\n\\\n#ifdef OPAQUE\\n\\\n    if (color.a < 0.995)   // matches < 254/255\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n#else\\n\\\n    if (color.a >= 0.995)  // matches 254/255 and 255/255\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\n    out_FragColor = czm_gammaCorrect(color);\\n\\\n    czm_writeLogDepth();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform float u_maxTotalPointSize;\\n\\\n\\n\\\nin vec4 positionHighAndSize;\\n\\\nin vec4 positionLowAndOutline;\\n\\\nin vec4 compressedAttribute0;                                        // color, outlineColor, pick color\\n\\\nin vec4 compressedAttribute1;                                        // show, translucency by distance, some free space\\n\\\nin vec4 scaleByDistance;                                             // near, nearScale, far, farScale\\n\\\nin vec4 distanceDisplayConditionAndDisableDepthAndSplitDirection;    // near, far, disableDepthTestDistance, splitDirection\\n\\\n\\n\\\nout vec4 v_color;\\n\\\nout vec4 v_outlineColor;\\n\\\nout float v_innerPercent;\\n\\\nout float v_pixelDistance;\\n\\\nout vec4 v_pickColor;\\n\\\nout float v_splitDirection;\\n\\\n\\n\\\nconst float SHIFT_LEFT8 = 256.0;\\n\\\nconst float SHIFT_RIGHT8 = 1.0 / 256.0;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    // Modifying this shader may also require modifications to PointPrimitive._computeScreenSpacePosition\\n\\\n\\n\\\n    // unpack attributes\\n\\\n    vec3 positionHigh = positionHighAndSize.xyz;\\n\\\n    vec3 positionLow = positionLowAndOutline.xyz;\\n\\\n    float outlineWidthBothSides = 2.0 * positionLowAndOutline.w;\\n\\\n    float totalSize = positionHighAndSize.w + outlineWidthBothSides;\\n\\\n    float outlinePercent = outlineWidthBothSides / totalSize;\\n\\\n    // Scale in response to browser-zoom.\\n\\\n    totalSize *= czm_pixelRatio;\\n\\\n\\n\\\n    float temp = compressedAttribute1.x * SHIFT_RIGHT8;\\n\\\n    float show = floor(temp);\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n    vec4 translucencyByDistance;\\n\\\n    translucencyByDistance.x = compressedAttribute1.z;\\n\\\n    translucencyByDistance.z = compressedAttribute1.w;\\n\\\n\\n\\\n    translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n\\n\\\n    temp = compressedAttribute1.y * SHIFT_RIGHT8;\\n\\\n    translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;\\n\\\n#endif\\n\\\n\\n\\\n    ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n    vec4 color = czm_decodeRGB8(compressedAttribute0.x);\\n\\\n    vec4 outlineColor = czm_decodeRGB8(compressedAttribute0.y);\\n\\\n    vec4 pickColor = czm_decodeRGB8(compressedAttribute0.z);\\n\\\n    vec4 alphaPacked = czm_decodeRGB8(compressedAttribute0.w);\\n\\\n\\n\\\n    color.a = alphaPacked.x;\\n\\\n    outlineColor.a = alphaPacked.y;\\n\\\n    pickColor.a = alphaPacked.z;\\n\\\n\\n\\\n    ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n    vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\\n\\\n    vec4 positionEC = czm_modelViewRelativeToEye * p;\\n\\\n\\n\\\n    ///////////////////////////////////////////////////////////////////////////\\n\\\n\\n\\\n#if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)\\n\\\n    float lengthSq;\\n\\\n    if (czm_sceneMode == czm_sceneMode2D)\\n\\\n    {\\n\\\n        // 2D camera distance is a special case\\n\\\n        // treat all billboards as flattened to the z=0.0 plane\\n\\\n        lengthSq = czm_eyeHeight2D.y;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        lengthSq = dot(positionEC.xyz, positionEC.xyz);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef EYE_DISTANCE_SCALING\\n\\\n    totalSize *= czm_nearFarScalar(scaleByDistance, lengthSq);\\n\\\n#endif\\n\\\n    if (totalSize > 0.0) {\\n\\\n        // Add padding for anti-aliasing on both sides.\\n\\\n        totalSize += 3.0;\\n\\\n    }\\n\\\n\\n\\\n    // Clamp to max point size.\\n\\\n    totalSize = min(totalSize, u_maxTotalPointSize);\\n\\\n    // If size is too small, push vertex behind near plane for clipping.\\n\\\n    // Note that context.minimumAliasedPointSize \\\"will be at most 1.0\\\".\\n\\\n    if (totalSize < 1.0)\\n\\\n    {\\n\\\n        positionEC.xyz = vec3(0.0);\\n\\\n        totalSize = 1.0;\\n\\\n    }\\n\\\n\\n\\\n    float translucency = 1.0;\\n\\\n#ifdef EYE_DISTANCE_TRANSLUCENCY\\n\\\n    translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);\\n\\\n    // push vertex behind near plane for clipping\\n\\\n    if (translucency < 0.004)\\n\\\n    {\\n\\\n        positionEC.xyz = vec3(0.0);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef DISTANCE_DISPLAY_CONDITION\\n\\\n    float nearSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.x;\\n\\\n    float farSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.y;\\n\\\n    if (lengthSq < nearSq || lengthSq > farSq) {\\n\\\n        // push vertex behind camera to force it to be clipped\\n\\\n        positionEC.xyz = vec3(0.0, 0.0, 1.0);\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    gl_Position = czm_projection * positionEC;\\n\\\n    czm_vertexLogDepth();\\n\\\n\\n\\\n#ifdef DISABLE_DEPTH_DISTANCE\\n\\\n    float disableDepthTestDistance = distanceDisplayConditionAndDisableDepthAndSplitDirection.z;\\n\\\n    if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)\\n\\\n    {\\n\\\n        disableDepthTestDistance = czm_minimumDisableDepthTestDistance;\\n\\\n    }\\n\\\n\\n\\\n    if (disableDepthTestDistance != 0.0)\\n\\\n    {\\n\\\n        // Don't try to \\\"multiply both sides\\\" by w.  Greater/less-than comparisons won't work for negative values of w.\\n\\\n        float zclip = gl_Position.z / gl_Position.w;\\n\\\n        bool clipped = (zclip < -1.0 || zclip > 1.0);\\n\\\n        if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))\\n\\\n        {\\n\\\n            // Position z on the near plane.\\n\\\n            gl_Position.z = -gl_Position.w;\\n\\\n#ifdef LOG_DEPTH\\n\\\n            czm_vertexLogDepth(vec4(czm_currentFrustum.x));\\n\\\n#endif\\n\\\n        }\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    v_color = color;\\n\\\n    v_color.a *= translucency * show;\\n\\\n    v_outlineColor = outlineColor;\\n\\\n    v_outlineColor.a *= translucency * show;\\n\\\n\\n\\\n    v_innerPercent = 1.0 - outlinePercent;\\n\\\n    v_pixelDistance = 2.0 / totalSize;\\n\\\n    gl_PointSize = totalSize * show;\\n\\\n    gl_Position *= show;\\n\\\n\\n\\\n    v_pickColor = pickColor;\\n\\\n    v_splitDirection = distanceDisplayConditionAndDisableDepthAndSplitDirection.w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec2 v_textureCoordinates;\\n\\\n\\n\\\nuniform int u_polygonsLength;\\n\\\nuniform int u_extentsLength;\\n\\\nuniform highp sampler2D u_polygonTexture;\\n\\\nuniform highp sampler2D u_extentsTexture;\\n\\\n\\n\\\nint getPolygonIndex(float dimension, vec2 coord) {\\n\\\n   vec2 uv = coord.xy * dimension;\\n\\\n   return int(floor(uv.y) * dimension + floor(uv.x));\\n\\\n}\\n\\\n\\n\\\nvec2 getLookupUv(ivec2 dimensions, int i) {\\n\\\n    int pixY = i / dimensions.x;\\n\\\n    int pixX = i - (pixY * dimensions.x);\\n\\\n    float pixelWidth = 1.0 / float(dimensions.x);\\n\\\n    float pixelHeight = 1.0 / float(dimensions.y);\\n\\\n    float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel\\n\\\n    float v = (float(pixY) + 0.5) * pixelHeight;\\n\\\n    return vec2(u, v);\\n\\\n}\\n\\\n\\n\\\nvec4 getExtents(int i) {\\n\\\n    return texture(u_extentsTexture, getLookupUv(textureSize(u_extentsTexture, 0), i));\\n\\\n}\\n\\\n\\n\\\nivec2 getPositionsLengthAndExtentsIndex(int i) {\\n\\\n    vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);\\n\\\n    vec4 value = texture(u_polygonTexture, uv);\\n\\\n    return ivec2(int(value.x), int(value.y));\\n\\\n}\\n\\\n\\n\\\nvec2 getPolygonPosition(int i) {\\n\\\n    vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i);\\n\\\n    return texture(u_polygonTexture, uv).xy;\\n\\\n}\\n\\\n\\n\\\nvec2 getCoordinates(vec2 textureCoordinates, vec4 extents) {\\n\\\n    float latitude = mix(extents.x, extents.x + 1.0 / extents.z, textureCoordinates.y);\\n\\\n    float longitude = mix(extents.y, extents.y + 1.0 / extents.w, textureCoordinates.x);\\n\\\n    return vec2(latitude, longitude);\\n\\\n}\\n\\\n\\n\\\nvoid main() {\\n\\\n    int lastPolygonIndex = 0;\\n\\\n    out_FragColor = vec4(1.0);\\n\\\n\\n\\\n    // Get the relevant region of the texture\\n\\\n    float dimension = float(u_extentsLength);\\n\\\n    if (u_extentsLength > 2) {\\n\\\n        dimension = ceil(log2(float(u_extentsLength)));\\n\\\n    }\\n\\\n    int regionIndex = getPolygonIndex(dimension, v_textureCoordinates);\\n\\\n\\n\\\n    for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) {\\n\\\n        ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex);\\n\\\n        int positionsLength = positionsLengthAndExtents.x;\\n\\\n        int polygonExtentsIndex = positionsLengthAndExtents.y;\\n\\\n        lastPolygonIndex += 1;\\n\\\n\\n\\\n         // Only compute signed distance for the relevant part of the atlas\\n\\\n         if (polygonExtentsIndex == regionIndex) {\\n\\\n            float clipAmount = czm_infinity;\\n\\\n            vec4 extents = getExtents(polygonExtentsIndex);\\n\\\n            vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension;\\n\\\n            vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents);\\n\\\n            float s = 1.0;\\n\\\n\\n\\\n            // Check each edge for absolute distance\\n\\\n            for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) {\\n\\\n                vec2 a = getPolygonPosition(lastPolygonIndex + i);\\n\\\n                vec2 b = getPolygonPosition(lastPolygonIndex + j);\\n\\\n \\n\\\n                vec2 ab = b - a;\\n\\\n                vec2 pa = p - a;\\n\\\n                float t = dot(pa, ab) / dot(ab, ab);\\n\\\n                t = clamp(t, 0.0, 1.0);\\n\\\n\\n\\\n                vec2 pq = pa - t * ab;\\n\\\n                float d = length(pq);\\n\\\n\\n\\\n                // Inside / outside computation to determine sign\\n\\\n                bvec3 cond = bvec3(p.y >= a.y, \\n\\\n                            p.y < b.y, \\n\\\n                            ab.x * pa.y > ab.y * pa.x);\\n\\\n                if (all(cond) || all(not(cond))) s = -s;\\n\\\n                if (abs(d) < abs(clipAmount)) {\\n\\\n                    clipAmount = d;\\n\\\n                }\\n\\\n            }\\n\\\n\\n\\\n            // Normalize the range to [0,1]\\n\\\n            vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5;\\n\\\n            // In the case where we've iterated through multiple polygons, take the minimum\\n\\\n            out_FragColor = min(out_FragColor, result);\\n\\\n         }\\n\\\n\\n\\\n        lastPolygonIndex += positionsLength;\\n\\\n    }\\n\\\n}\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"void clipLineSegmentToNearPlane(\\n\\\n    vec3 p0,\\n\\\n    vec3 p1,\\n\\\n    out vec4 positionWC,\\n\\\n    out bool clipped,\\n\\\n    out bool culledByNearPlane,\\n\\\n    out vec4 clippedPositionEC)\\n\\\n{\\n\\\n    culledByNearPlane = false;\\n\\\n    clipped = false;\\n\\\n\\n\\\n    vec3 p0ToP1 = p1 - p0;\\n\\\n    float magnitude = length(p0ToP1);\\n\\\n    vec3 direction = normalize(p0ToP1);\\n\\\n\\n\\\n    // Distance that p0 is behind the near plane. Negative means p0 is\\n\\\n    // in front of the near plane.\\n\\\n    float endPoint0Distance =  czm_currentFrustum.x + p0.z;\\n\\\n\\n\\\n    // Camera looks down -Z.\\n\\\n    // When moving a point along +Z: LESS VISIBLE\\n\\\n    //   * Points in front of the camera move closer to the camera.\\n\\\n    //   * Points behind the camrea move farther away from the camera.\\n\\\n    // When moving a point along -Z: MORE VISIBLE\\n\\\n    //   * Points in front of the camera move farther away from the camera.\\n\\\n    //   * Points behind the camera move closer to the camera.\\n\\\n\\n\\\n    // Positive denominator: -Z, becoming more visible\\n\\\n    // Negative denominator: +Z, becoming less visible\\n\\\n    // Nearly zero: parallel to near plane\\n\\\n    float denominator = -direction.z;\\n\\\n\\n\\\n    if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7)\\n\\\n    {\\n\\\n        // p0 is behind the near plane and the line to p1 is nearly parallel to\\n\\\n        // the near plane, so cull the segment completely.\\n\\\n        culledByNearPlane = true;\\n\\\n    }\\n\\\n    else if (endPoint0Distance > 0.0)\\n\\\n    {\\n\\\n        // p0 is behind the near plane, and the line to p1 is moving distinctly\\n\\\n        // toward or away from it.\\n\\\n\\n\\\n        // t = (-plane distance - dot(plane normal, ray origin)) / dot(plane normal, ray direction)\\n\\\n        float t = endPoint0Distance / denominator;\\n\\\n        if (t < 0.0 || t > magnitude)\\n\\\n        {\\n\\\n            // Near plane intersection is not between the two points.\\n\\\n            // We already confirmed p0 is behind the naer plane, so now\\n\\\n            // we know the entire segment is behind it.\\n\\\n            culledByNearPlane = true;\\n\\\n        }\\n\\\n        else\\n\\\n        {\\n\\\n            // Segment crosses the near plane, update p0 to lie exactly on it.\\n\\\n            p0 = p0 + t * direction;\\n\\\n\\n\\\n            // Numerical noise might put us a bit on the wrong side of the near plane.\\n\\\n            // Don't let that happen.\\n\\\n            p0.z = min(p0.z, -czm_currentFrustum.x);\\n\\\n\\n\\\n            clipped = true;\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    clippedPositionEC = vec4(p0, 1.0);\\n\\\n    positionWC = czm_eyeToWindowCoordinates(clippedPositionEC);\\n\\\n}\\n\\\n\\n\\\nvec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle)\\n\\\n{\\n\\\n    // expandDirection +1 is to the _left_ when looking from positionEC toward nextEC.\\n\\\n\\n\\\n#ifdef POLYLINE_DASH\\n\\\n    // Compute the window coordinates of the points.\\n\\\n    vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC);\\n\\\n    vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC);\\n\\\n    vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC);\\n\\\n\\n\\\n    // Determine the relative screen space direction of the line.\\n\\\n    vec2 lineDir;\\n\\\n    if (usePrevious) {\\n\\\n        lineDir = normalize(positionWindow.xy - previousWindow.xy);\\n\\\n    }\\n\\\n    else {\\n\\\n        lineDir = normalize(nextWindow.xy - positionWindow.xy);\\n\\\n    }\\n\\\n    angle = atan(lineDir.x, lineDir.y) - 1.570796327; // precomputed atan(1,0)\\n\\\n\\n\\\n    // Quantize the angle so it doesn't change rapidly between segments.\\n\\\n    angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour;\\n\\\n#endif\\n\\\n\\n\\\n    vec4 clippedPrevWC, clippedPrevEC;\\n\\\n    bool prevSegmentClipped, prevSegmentCulled;\\n\\\n    clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC);\\n\\\n\\n\\\n    vec4 clippedNextWC, clippedNextEC;\\n\\\n    bool nextSegmentClipped, nextSegmentCulled;\\n\\\n    clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC);\\n\\\n\\n\\\n    bool segmentClipped, segmentCulled;\\n\\\n    vec4 clippedPositionWC, clippedPositionEC;\\n\\\n    clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC);\\n\\\n\\n\\\n    if (segmentCulled)\\n\\\n    {\\n\\\n        return vec4(0.0, 0.0, 0.0, 1.0);\\n\\\n    }\\n\\\n\\n\\\n    vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy);\\n\\\n    vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy);\\n\\\n\\n\\\n    // If a segment was culled, we can't use the corresponding direction\\n\\\n    // computed above. We should never see both of these be true without\\n\\\n    // `segmentCulled` above also being true.\\n\\\n    if (prevSegmentCulled)\\n\\\n    {\\n\\\n        directionToPrevWC = -directionToNextWC;\\n\\\n    }\\n\\\n    else if (nextSegmentCulled)\\n\\\n    {\\n\\\n        directionToNextWC = -directionToPrevWC;\\n\\\n    }\\n\\\n\\n\\\n    vec2 thisSegmentForwardWC, otherSegmentForwardWC;\\n\\\n    if (usePrevious)\\n\\\n    {\\n\\\n        thisSegmentForwardWC = -directionToPrevWC;\\n\\\n        otherSegmentForwardWC = directionToNextWC;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        thisSegmentForwardWC = directionToNextWC;\\n\\\n        otherSegmentForwardWC =  -directionToPrevWC;\\n\\\n    }\\n\\\n\\n\\\n    vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x);\\n\\\n\\n\\\n    vec2 leftWC = thisSegmentLeftWC;\\n\\\n    float expandWidth = width * 0.5;\\n\\\n\\n\\\n    // When lines are split at the anti-meridian, the position may be at the\\n\\\n    // same location as the next or previous position, and we need to handle\\n\\\n    // that to avoid producing NaNs.\\n\\\n    if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1))\\n\\\n    {\\n\\\n        vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x);\\n\\\n\\n\\\n        vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC;\\n\\\n        float leftSumLength = length(leftSumWC);\\n\\\n        leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength);\\n\\\n\\n\\\n        // The sine of the angle between the two vectors is given by the formula\\n\\\n        //         |a x b| = |a||b|sin(theta)\\n\\\n        // which is\\n\\\n        //     float sinAngle = length(cross(vec3(leftWC, 0.0), vec3(-thisSegmentForwardWC, 0.0)));\\n\\\n        // Because the z components of both vectors are zero, the x and y coordinate will be zero.\\n\\\n        // Therefore, the sine of the angle is just the z component of the cross product.\\n\\\n        vec2 u = -thisSegmentForwardWC;\\n\\\n        vec2 v = leftWC;\\n\\\n        float sinAngle = abs(u.x * v.y - u.y * v.x);\\n\\\n        expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);\\n\\\n    }\\n\\\n\\n\\\n    vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;\\n\\\n    return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w;\\n\\\n}\\n\\\n\\n\\\nvec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle)\\n\\\n{\\n\\\n    vec4 positionEC = czm_modelViewRelativeToEye * position;\\n\\\n    vec4 prevEC = czm_modelViewRelativeToEye * previous;\\n\\\n    vec4 nextEC = czm_modelViewRelativeToEye * next;\\n\\\n    return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef VECTOR_TILE\\n\\\nuniform vec4 u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\nin vec2 v_st;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    czm_materialInput materialInput;\\n\\\n\\n\\\n    vec2 st = v_st;\\n\\\n    st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);\\n\\\n\\n\\\n    materialInput.s = st.s;\\n\\\n    materialInput.st = st;\\n\\\n    materialInput.str = vec3(st, 0.0);\\n\\\n\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#ifdef VECTOR_TILE\\n\\\n    out_FragColor *= u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\n    czm_writeLogDepth();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 v_startPlaneNormalEcAndHalfWidth;\\n\\\nin vec4 v_endPlaneNormalEcAndBatchId;\\n\\\nin vec4 v_rightPlaneEC; // Technically can compute distance for this here\\n\\\nin vec4 v_endEcAndStartEcX;\\n\\\nin vec4 v_texcoordNormalizationAndStartEcYZ;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nin vec4 v_color;\\n\\\n#endif\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));\\n\\\n    vec3 ecStart = vec3(v_endEcAndStartEcX.w, v_texcoordNormalizationAndStartEcYZ.zw);\\n\\\n\\n\\\n    // Discard for sky\\n\\\n    if (logDepthOrDepth == 0.0) {\\n\\\n#ifdef DEBUG_SHOW_VOLUME\\n\\\n        out_FragColor = vec4(1.0, 0.0, 0.0, 0.5);\\n\\\n        return;\\n\\\n#else // DEBUG_SHOW_VOLUME\\n\\\n        discard;\\n\\\n#endif // DEBUG_SHOW_VOLUME\\n\\\n    }\\n\\\n\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\\n\\\n    eyeCoordinate /= eyeCoordinate.w;\\n\\\n\\n\\\n    float halfMaxWidth = v_startPlaneNormalEcAndHalfWidth.w * czm_metersPerPixel(eyeCoordinate);\\n\\\n    // Check distance of the eye coordinate against the right-facing plane\\n\\\n    float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);\\n\\\n\\n\\\n    // Check eye coordinate against the mitering planes\\n\\\n    float distanceFromStart = czm_planeDistance(v_startPlaneNormalEcAndHalfWidth.xyz, -dot(ecStart, v_startPlaneNormalEcAndHalfWidth.xyz), eyeCoordinate.xyz);\\n\\\n    float distanceFromEnd = czm_planeDistance(v_endPlaneNormalEcAndBatchId.xyz, -dot(v_endEcAndStartEcX.xyz, v_endPlaneNormalEcAndBatchId.xyz), eyeCoordinate.xyz);\\n\\\n\\n\\\n    if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {\\n\\\n#ifdef DEBUG_SHOW_VOLUME\\n\\\n        out_FragColor = vec4(1.0, 0.0, 0.0, 0.5);\\n\\\n        return;\\n\\\n#else // DEBUG_SHOW_VOLUME\\n\\\n        discard;\\n\\\n#endif // DEBUG_SHOW_VOLUME\\n\\\n    }\\n\\\n\\n\\\n    // Check distance of the eye coordinate against start and end planes with normals in the right plane.\\n\\\n    // For computing unskewed lengthwise texture coordinate.\\n\\\n    // Can also be used for clipping extremely pointy miters, but in practice unnecessary because of miter breaking.\\n\\\n\\n\\\n    // aligned plane: cross the right plane normal with miter plane normal, then cross the result with right again to point it more \\\"forward\\\"\\n\\\n    vec3 alignedPlaneNormal;\\n\\\n\\n\\\n    // start aligned plane\\n\\\n    alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz);\\n\\\n    alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));\\n\\\n    distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz);\\n\\\n\\n\\\n    // end aligned plane\\n\\\n    alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_endPlaneNormalEcAndBatchId.xyz);\\n\\\n    alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));\\n\\\n    distanceFromEnd = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, v_endEcAndStartEcX.xyz), eyeCoordinate.xyz);\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n    out_FragColor = czm_gammaCorrect(v_color);\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n    // Clamp - distance to aligned planes may be negative due to mitering,\\n\\\n    // so fragment texture coordinate might be out-of-bounds.\\n\\\n    float s = clamp(distanceFromStart / (distanceFromStart + distanceFromEnd), 0.0, 1.0);\\n\\\n    s = (s * v_texcoordNormalizationAndStartEcYZ.x) + v_texcoordNormalizationAndStartEcYZ.y;\\n\\\n    float t = (widthwiseDistance + halfMaxWidth) / (2.0 * halfMaxWidth);\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n\\n\\\n    materialInput.s = s;\\n\\\n    materialInput.st = vec2(s, t);\\n\\\n    materialInput.str = vec3(s, t, 0.0);\\n\\\n\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n    // Premultiply alpha. Required for classification primitives on translucent globe.\\n\\\n    out_FragColor.rgb *= out_FragColor.a;\\n\\\n\\n\\\n    czm_writeDepthClamp();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 v_forwardDirectionEC;\\n\\\nin vec3 v_texcoordNormalizationAndHalfWidth;\\n\\\nin float v_batchId;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nin vec4 v_color;\\n\\\n#else\\n\\\nin vec2 v_alignedPlaneDistances;\\n\\\nin float v_texcoordT;\\n\\\n#endif\\n\\\n\\n\\\nfloat rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) {\\n\\\n    // We don't expect the ray to ever be parallel to the plane\\n\\\n    return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec4 eyeCoordinate = gl_FragCoord;\\n\\\n    eyeCoordinate /= eyeCoordinate.w;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n    out_FragColor = czm_gammaCorrect(v_color);\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n    // Use distances for planes aligned with segment to prevent skew in dashing\\n\\\n    float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x);\\n\\\n    float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y);\\n\\\n\\n\\\n    // Clamp - distance to aligned planes may be negative due to mitering\\n\\\n    distanceFromStart = max(0.0, distanceFromStart);\\n\\\n    distanceFromEnd = max(0.0, distanceFromEnd);\\n\\\n\\n\\\n    float s = distanceFromStart / (distanceFromStart + distanceFromEnd);\\n\\\n    s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y;\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n\\n\\\n    materialInput.s = s;\\n\\\n    materialInput.st = vec2(s, v_texcoordT);\\n\\\n    materialInput.str = vec3(s, v_texcoordT, 0.0);\\n\\\n\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\n\\n\\\nin vec4 startHiAndForwardOffsetX;\\n\\\nin vec4 startLoAndForwardOffsetY;\\n\\\nin vec4 startNormalAndForwardOffsetZ;\\n\\\nin vec4 endNormalAndTextureCoordinateNormalizationX;\\n\\\nin vec4 rightNormalAndTextureCoordinateNormalizationY;\\n\\\nin vec4 startHiLo2D;\\n\\\nin vec4 offsetAndRight2D;\\n\\\nin vec4 startEndNormals2D;\\n\\\nin vec2 texcoordNormalization2D;\\n\\\n\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec3 v_forwardDirectionEC;\\n\\\nout vec3 v_texcoordNormalizationAndHalfWidth;\\n\\\nout float v_batchId;\\n\\\n\\n\\\n// For materials\\n\\\n#ifdef WIDTH_VARYING\\n\\\nout float v_width;\\n\\\n#endif\\n\\\n#ifdef ANGLE_VARYING\\n\\\nout float v_polylineAngle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nout vec4 v_color;\\n\\\n#else\\n\\\nout vec2 v_alignedPlaneDistances;\\n\\\nout float v_texcoordT;\\n\\\n#endif\\n\\\n\\n\\\n// Morphing planes using SLERP or NLERP doesn't seem to work, so instead draw the material directly on the shadow volume.\\n\\\n// Morph views are from very far away and aren't meant to be used precisely, so this should be sufficient.\\n\\\nvoid main()\\n\\\n{\\n\\\n    v_batchId = batchId;\\n\\\n\\n\\\n    // Start position\\n\\\n    vec4 posRelativeToEye2D = czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw));\\n\\\n    vec4 posRelativeToEye3D = czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz);\\n\\\n    vec4 posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);\\n\\\n    vec3 posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;\\n\\\n    vec3 posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;\\n\\\n    vec3 startEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;\\n\\\n\\n\\\n    // Start plane\\n\\\n    vec4 startPlane2D;\\n\\\n    vec4 startPlane3D;\\n\\\n    startPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);\\n\\\n    startPlane3D.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;\\n\\\n    startPlane2D.w = -dot(startPlane2D.xyz, posEc2D);\\n\\\n    startPlane3D.w = -dot(startPlane3D.xyz, posEc3D);\\n\\\n\\n\\\n    // Right plane\\n\\\n    vec4 rightPlane2D;\\n\\\n    vec4 rightPlane3D;\\n\\\n    rightPlane2D.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);\\n\\\n    rightPlane3D.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;\\n\\\n    rightPlane2D.w = -dot(rightPlane2D.xyz, posEc2D);\\n\\\n    rightPlane3D.w = -dot(rightPlane3D.xyz, posEc3D);\\n\\\n\\n\\\n    // End position\\n\\\n    posRelativeToEye2D = posRelativeToEye2D + vec4(0.0, offsetAndRight2D.xy, 0.0);\\n\\\n    posRelativeToEye3D = posRelativeToEye3D + vec4(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w, 0.0);\\n\\\n    posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);\\n\\\n    posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;\\n\\\n    posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;\\n\\\n    vec3 endEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;\\n\\\n    vec3 forwardEc3D = czm_normal * normalize(vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w));\\n\\\n    vec3 forwardEc2D = czm_normal * normalize(vec3(0.0, offsetAndRight2D.xy));\\n\\\n\\n\\\n    // End plane\\n\\\n    vec4 endPlane2D;\\n\\\n    vec4 endPlane3D;\\n\\\n    endPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);\\n\\\n    endPlane3D.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;\\n\\\n    endPlane2D.w = -dot(endPlane2D.xyz, posEc2D);\\n\\\n    endPlane3D.w = -dot(endPlane3D.xyz, posEc3D);\\n\\\n\\n\\\n    // Forward direction\\n\\\n    v_forwardDirectionEC = normalize(endEC - startEC);\\n\\\n\\n\\\n    vec2 cleanTexcoordNormalization2D;\\n\\\n    cleanTexcoordNormalization2D.x = abs(texcoordNormalization2D.x);\\n\\\n    cleanTexcoordNormalization2D.y = czm_branchFreeTernary(texcoordNormalization2D.y > 1.0, 0.0, abs(texcoordNormalization2D.y));\\n\\\n    vec2 cleanTexcoordNormalization3D;\\n\\\n    cleanTexcoordNormalization3D.x = abs(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n    cleanTexcoordNormalization3D.y = rightNormalAndTextureCoordinateNormalizationY.w;\\n\\\n    cleanTexcoordNormalization3D.y = czm_branchFreeTernary(cleanTexcoordNormalization3D.y > 1.0, 0.0, abs(cleanTexcoordNormalization3D.y));\\n\\\n\\n\\\n    v_texcoordNormalizationAndHalfWidth.xy = mix(cleanTexcoordNormalization2D, cleanTexcoordNormalization3D, czm_morphTime);\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n    v_color = czm_batchTable_color(batchId);\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n    // For computing texture coordinates\\n\\\n\\n\\\n    v_alignedPlaneDistances.x = -dot(v_forwardDirectionEC, startEC);\\n\\\n    v_alignedPlaneDistances.y = -dot(-v_forwardDirectionEC, endEC);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n#ifdef WIDTH_VARYING\\n\\\n    float width = czm_batchTable_width(batchId);\\n\\\n    float halfWidth = width * 0.5;\\n\\\n    v_width = width;\\n\\\n    v_texcoordNormalizationAndHalfWidth.z = halfWidth;\\n\\\n#else\\n\\\n    float halfWidth = 0.5 * czm_batchTable_width(batchId);\\n\\\n    v_texcoordNormalizationAndHalfWidth.z = halfWidth;\\n\\\n#endif\\n\\\n\\n\\\n    // Compute a normal along which to \\\"push\\\" the position out, extending the miter depending on view distance.\\n\\\n    // Position has already been \\\"pushed\\\" by unit length along miter normal, and miter normals are encoded in the planes.\\n\\\n    // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.\\n\\\n    // Since this is morphing, compute both 3D and 2D positions and then blend.\\n\\\n\\n\\\n    // ****** 3D ******\\n\\\n    // Check distance to the end plane and start plane, pick the plane that is closer\\n\\\n    vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); // w = 1.0, see czm_computePosition\\n\\\n    float absStartPlaneDistance = abs(czm_planeDistance(startPlane3D, positionEc3D.xyz));\\n\\\n    float absEndPlaneDistance = abs(czm_planeDistance(endPlane3D, positionEc3D.xyz));\\n\\\n    vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane3D.xyz, endPlane3D.xyz);\\n\\\n    vec3 upOrDown = normalize(cross(rightPlane3D.xyz, planeDirection)); // Points \\\"up\\\" for start plane, \\\"down\\\" at end plane.\\n\\\n    vec3 normalEC = normalize(cross(planeDirection, upOrDown));         // In practice, the opposite seems to work too.\\n\\\n\\n\\\n    // Nudge the top vertex upwards to prevent flickering\\n\\\n    vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D));\\n\\\n    geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0);\\n\\\n    geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;\\n\\\n    positionEc3D.xyz += geodeticSurfaceNormal;\\n\\\n\\n\\\n    // Determine if this vertex is on the \\\"left\\\" or \\\"right\\\"\\n\\\n    normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n\\n\\\n    // A \\\"perfect\\\" implementation would push along normals according to the angle against forward.\\n\\\n    // In practice, just pushing the normal out by halfWidth is sufficient for morph views.\\n\\\n    positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)\\n\\\n\\n\\\n    // ****** 2D ******\\n\\\n    // Check distance to the end plane and start plane, pick the plane that is closer\\n\\\n    vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); // w = 1.0, see czm_computePosition\\n\\\n    absStartPlaneDistance = abs(czm_planeDistance(startPlane2D, positionEc2D.xyz));\\n\\\n    absEndPlaneDistance = abs(czm_planeDistance(endPlane2D, positionEc2D.xyz));\\n\\\n    planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane2D.xyz, endPlane2D.xyz);\\n\\\n    upOrDown = normalize(cross(rightPlane2D.xyz, planeDirection)); // Points \\\"up\\\" for start plane, \\\"down\\\" at end plane.\\n\\\n    normalEC = normalize(cross(planeDirection, upOrDown));         // In practice, the opposite seems to work too.\\n\\\n\\n\\\n    // Nudge the top vertex upwards to prevent flickering\\n\\\n    geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D));\\n\\\n    geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0);\\n\\\n    geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;\\n\\\n    positionEc2D.xyz += geodeticSurfaceNormal;\\n\\\n\\n\\\n    // Determine if this vertex is on the \\\"left\\\" or \\\"right\\\"\\n\\\n    normalEC *= sign(texcoordNormalization2D.x);\\n\\\n#ifndef PER_INSTANCE_COLOR\\n\\\n    // Use vertex's sidedness to compute its texture coordinate.\\n\\\n    v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0);\\n\\\n#endif\\n\\\n\\n\\\n    // A \\\"perfect\\\" implementation would push along normals according to the angle against forward.\\n\\\n    // In practice, just pushing the normal out by halfWidth is sufficient for morph views.\\n\\\n    positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)\\n\\\n\\n\\\n    // Blend for actual position\\n\\\n    gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime);\\n\\\n\\n\\\n#ifdef ANGLE_VARYING\\n\\\n    // Approximate relative screen space direction of the line.\\n\\\n    vec2 approxLineDirection = normalize(vec2(v_forwardDirectionEC.x, -v_forwardDirectionEC.y));\\n\\\n    approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);\\n\\\n    v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\n\\n\\\n// In 2D and in 3D, texture coordinate normalization component signs encodes:\\n\\\n// * X sign - sidedness relative to right plane\\n\\\n// * Y sign - is negative OR magnitude is greater than 1.0 if vertex is on bottom of volume\\n\\\n#ifndef COLUMBUS_VIEW_2D\\n\\\nin vec4 startHiAndForwardOffsetX;\\n\\\nin vec4 startLoAndForwardOffsetY;\\n\\\nin vec4 startNormalAndForwardOffsetZ;\\n\\\nin vec4 endNormalAndTextureCoordinateNormalizationX;\\n\\\nin vec4 rightNormalAndTextureCoordinateNormalizationY;\\n\\\n#else\\n\\\nin vec4 startHiLo2D;\\n\\\nin vec4 offsetAndRight2D;\\n\\\nin vec4 startEndNormals2D;\\n\\\nin vec2 texcoordNormalization2D;\\n\\\n#endif\\n\\\n\\n\\\nin float batchId;\\n\\\n\\n\\\nout vec4 v_startPlaneNormalEcAndHalfWidth;\\n\\\nout vec4 v_endPlaneNormalEcAndBatchId;\\n\\\nout vec4 v_rightPlaneEC;\\n\\\nout vec4 v_endEcAndStartEcX;\\n\\\nout vec4 v_texcoordNormalizationAndStartEcYZ;\\n\\\n\\n\\\n// For materials\\n\\\n#ifdef WIDTH_VARYING\\n\\\nout float v_width;\\n\\\n#endif\\n\\\n#ifdef ANGLE_VARYING\\n\\\nout float v_polylineAngle;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nout vec4 v_color;\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n#ifdef COLUMBUS_VIEW_2D\\n\\\n    vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw))).xyz;\\n\\\n\\n\\\n    vec3 forwardDirectionEC = czm_normal * vec3(0.0, offsetAndRight2D.xy);\\n\\\n    vec3 ecEnd = forwardDirectionEC + ecStart;\\n\\\n    forwardDirectionEC = normalize(forwardDirectionEC);\\n\\\n\\n\\\n    // Right plane\\n\\\n    v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);\\n\\\n    v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n    // start plane\\n\\\n    vec4 startPlaneEC;\\n\\\n    startPlaneEC.xyz =  czm_normal * vec3(0.0, startEndNormals2D.xy);\\n\\\n    startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n    // end plane\\n\\\n    vec4 endPlaneEC;\\n\\\n    endPlaneEC.xyz =  czm_normal * vec3(0.0, startEndNormals2D.zw);\\n\\\n    endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);\\n\\\n\\n\\\n    v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization2D.x);\\n\\\n    v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization2D.y;\\n\\\n\\n\\\n#else // COLUMBUS_VIEW_2D\\n\\\n    vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz)).xyz;\\n\\\n    vec3 offset = czm_normal * vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w);\\n\\\n    vec3 ecEnd = ecStart + offset;\\n\\\n\\n\\\n    vec3 forwardDirectionEC = normalize(offset);\\n\\\n\\n\\\n    // start plane\\n\\\n    vec4 startPlaneEC;\\n\\\n    startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;\\n\\\n    startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n    // end plane\\n\\\n    vec4 endPlaneEC;\\n\\\n    endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;\\n\\\n    endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);\\n\\\n\\n\\\n    // Right plane\\n\\\n    v_rightPlaneEC.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;\\n\\\n    v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);\\n\\\n\\n\\\n    v_texcoordNormalizationAndStartEcYZ.x = abs(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n    v_texcoordNormalizationAndStartEcYZ.y = rightNormalAndTextureCoordinateNormalizationY.w;\\n\\\n\\n\\\n#endif // COLUMBUS_VIEW_2D\\n\\\n\\n\\\n    v_endEcAndStartEcX.xyz = ecEnd;\\n\\\n    v_endEcAndStartEcX.w = ecStart.x;\\n\\\n    v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz;\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n    v_color = czm_batchTable_color(batchId);\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n    // Compute a normal along which to \\\"push\\\" the position out, extending the miter depending on view distance.\\n\\\n    // Position has already been \\\"pushed\\\" by unit length along miter normal, and miter normals are encoded in the planes.\\n\\\n    // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.\\n\\\n    vec4 positionRelativeToEye = czm_computePosition();\\n\\\n\\n\\\n    // Check distance to the end plane and start plane, pick the plane that is closer\\n\\\n    vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; // w = 1.0, see czm_computePosition\\n\\\n    float absStartPlaneDistance = abs(czm_planeDistance(startPlaneEC, positionEC.xyz));\\n\\\n    float absEndPlaneDistance = abs(czm_planeDistance(endPlaneEC, positionEC.xyz));\\n\\\n    vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz);\\n\\\n    vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection)); // Points \\\"up\\\" for start plane, \\\"down\\\" at end plane.\\n\\\n    vec3 normalEC = normalize(cross(planeDirection, upOrDown));           // In practice, the opposite seems to work too.\\n\\\n\\n\\\n    // Extrude bottom vertices downward for far view distances, like for GroundPrimitives\\n\\\n    upOrDown = cross(forwardDirectionEC, normalEC);\\n\\\n    upOrDown = float(czm_sceneMode == czm_sceneMode3D) * upOrDown;\\n\\\n    upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown;\\n\\\n    upOrDown = min(GLOBE_MINIMUM_ALTITUDE, czm_geometricToleranceOverMeter * length(positionRelativeToEye.xyz)) * upOrDown;\\n\\\n    positionEC.xyz += upOrDown;\\n\\\n\\n\\\n    v_texcoordNormalizationAndStartEcYZ.y = czm_branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y));\\n\\\n\\n\\\n    // Determine distance along normalEC to push for a volume of appropriate width.\\n\\\n    // Make volumes about double pixel width for a conservative fit - in practice the\\n\\\n    // extra cost here is minimal compared to the loose volume heights.\\n\\\n    //\\n\\\n    // N = normalEC (guaranteed \\\"right-facing\\\")\\n\\\n    // R = rightEC\\n\\\n    // p = angle between N and R\\n\\\n    // w = distance to push along R if R == N\\n\\\n    // d = distance to push along N\\n\\\n    //\\n\\\n    //   N   R\\n\\\n    //  { \\ p| }      * cos(p) = dot(N, R) = w / d\\n\\\n    //  d\\ \\ |  |w    * d = w / dot(N, R)\\n\\\n    //    { \\| }\\n\\\n    //       o---------- polyline segment ---->\\n\\\n    //\\n\\\n    float width = czm_batchTable_width(batchId);\\n\\\n#ifdef WIDTH_VARYING\\n\\\n    v_width = width;\\n\\\n#endif\\n\\\n\\n\\\n    v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz;\\n\\\n    v_startPlaneNormalEcAndHalfWidth.w = width * 0.5;\\n\\\n\\n\\\n    v_endPlaneNormalEcAndBatchId.xyz = endPlaneEC.xyz;\\n\\\n    v_endPlaneNormalEcAndBatchId.w = batchId;\\n\\\n\\n\\\n    width = width * max(0.0, czm_metersPerPixel(positionEC)); // width = distance to push along R\\n\\\n    width = width / dot(normalEC, v_rightPlaneEC.xyz); // width = distance to push along N\\n\\\n\\n\\\n    // Determine if this vertex is on the \\\"left\\\" or \\\"right\\\"\\n\\\n#ifdef COLUMBUS_VIEW_2D\\n\\\n        normalEC *= sign(texcoordNormalization2D.x);\\n\\\n#else\\n\\\n        normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);\\n\\\n#endif\\n\\\n\\n\\\n    positionEC.xyz += width * normalEC;\\n\\\n    gl_Position = czm_depthClamp(czm_projection * positionEC);\\n\\\n\\n\\\n#ifdef ANGLE_VARYING\\n\\\n    // Approximate relative screen space direction of the line.\\n\\\n    vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y));\\n\\\n    approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);\\n\\\n    v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin vec3 position2DHigh;\\n\\\nin vec3 position2DLow;\\n\\\nin vec3 prevPosition3DHigh;\\n\\\nin vec3 prevPosition3DLow;\\n\\\nin vec3 prevPosition2DHigh;\\n\\\nin vec3 prevPosition2DLow;\\n\\\nin vec3 nextPosition3DHigh;\\n\\\nin vec3 nextPosition3DLow;\\n\\\nin vec3 nextPosition2DHigh;\\n\\\nin vec3 nextPosition2DLow;\\n\\\nin vec4 texCoordExpandAndBatchIndex;\\n\\\n\\n\\\nout vec2  v_st;\\n\\\nout float v_width;\\n\\\nout vec4 v_pickColor;\\n\\\nout float v_polylineAngle;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float texCoord = texCoordExpandAndBatchIndex.x;\\n\\\n    float expandDir = texCoordExpandAndBatchIndex.y;\\n\\\n    bool usePrev = texCoordExpandAndBatchIndex.z < 0.0;\\n\\\n    float batchTableIndex = texCoordExpandAndBatchIndex.w;\\n\\\n\\n\\\n    vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex);\\n\\\n    float width = widthAndShow.x + 0.5;\\n\\\n    float show = widthAndShow.y;\\n\\\n\\n\\\n    if (width < 1.0)\\n\\\n    {\\n\\\n        show = 0.0;\\n\\\n    }\\n\\\n\\n\\\n    vec4 pickColor = batchTable_getPickColor(batchTableIndex);\\n\\\n\\n\\\n    vec4 p, prev, next;\\n\\\n    if (czm_morphTime == 1.0)\\n\\\n    {\\n\\\n        p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz);\\n\\\n        prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz);\\n\\\n        next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz);\\n\\\n    }\\n\\\n    else if (czm_morphTime == 0.0)\\n\\\n    {\\n\\\n        p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy);\\n\\\n        prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy);\\n\\\n        next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy);\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        p = czm_columbusViewMorph(\\n\\\n                czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy),\\n\\\n                czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz),\\n\\\n                czm_morphTime);\\n\\\n        prev = czm_columbusViewMorph(\\n\\\n                czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy),\\n\\\n                czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz),\\n\\\n                czm_morphTime);\\n\\\n        next = czm_columbusViewMorph(\\n\\\n                czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy),\\n\\\n                czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz),\\n\\\n                czm_morphTime);\\n\\\n    }\\n\\\n\\n\\\n    #ifdef DISTANCE_DISPLAY_CONDITION\\n\\\n        vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex);\\n\\\n        vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex);\\n\\\n        vec3 centerLow = centerLowAndRadius.xyz;\\n\\\n        float radius = centerLowAndRadius.w;\\n\\\n        vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex);\\n\\\n\\n\\\n        float lengthSq;\\n\\\n        if (czm_sceneMode == czm_sceneMode2D)\\n\\\n        {\\n\\\n            lengthSq = czm_eyeHeight2D.y;\\n\\\n        }\\n\\\n        else\\n\\\n        {\\n\\\n            vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz);\\n\\\n            lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius);\\n\\\n        }\\n\\\n\\n\\\n        float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;\\n\\\n        float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;\\n\\\n        if (lengthSq < nearSq || lengthSq > farSq)\\n\\\n        {\\n\\\n            show = 0.0;\\n\\\n        }\\n\\\n    #endif\\n\\\n\\n\\\n    float polylineAngle;\\n\\\n    vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle);\\n\\\n    gl_Position = czm_viewportOrthographic * positionWC * show;\\n\\\n\\n\\\n    v_st.s = texCoord;\\n\\\n    v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w);\\n\\\n\\n\\\n    v_width = width;\\n\\\n    v_pickColor = pickColor;\\n\\\n    v_polylineAngle = polylineAngle;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#else\\n\\\nuniform float exposure;\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec3 color = fragmentColor.rgb;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n    color /= texture(autoExposure, vec2(0.5)).r;\\n\\\n#else\\n\\\n    color *= vec3(exposure);\\n\\\n#endif\\n\\\n    color = czm_acesTonemapping(color);\\n\\\n    color = czm_inverseGamma(color);\\n\\\n\\n\\\n    out_FragColor = vec4(color, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D colorTexture2;\\n\\\n\\n\\\nuniform vec2 center;\\n\\\nuniform float radius;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 color0 = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec4 color1 = texture(colorTexture2, v_textureCoordinates);\\n\\\n\\n\\\n    float x = length(gl_FragCoord.xy - center) / radius;\\n\\\n    float t = smoothstep(0.5, 0.8, x);\\n\\\n    out_FragColor = mix(color0 + color1, color1, t);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"precision highp float;\\n\\\n\\n\\\nuniform sampler2D randomTexture;\\n\\\nuniform sampler2D depthTexture;\\n\\\nuniform float intensity;\\n\\\nuniform float bias;\\n\\\nuniform float lengthCap;\\n\\\nuniform int stepCount;\\n\\\nuniform int directionCount;\\n\\\n\\n\\\nvec4 pixelToEye(vec2 screenCoordinate)\\n\\\n{\\n\\\n    vec2 uv = screenCoordinate / czm_viewport.zw;\\n\\\n    float depth = czm_readDepth(depthTexture, uv);\\n\\\n    vec2 xy = 2.0 * uv - vec2(1.0);\\n\\\n    vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0);\\n\\\n    posEC = posEC / posEC.w;\\n\\\n    // Avoid numerical error at far plane\\n\\\n    if (depth >= 1.0) {\\n\\\n        posEC.z = czm_currentFrustum.y;\\n\\\n    }\\n\\\n    return posEC;\\n\\\n}\\n\\\n\\n\\\n// Reconstruct surface normal in eye coordinates, avoiding edges\\n\\\nvec3 getNormalXEdge(vec3 positionEC)\\n\\\n{\\n\\\n    // Find the 3D surface positions at adjacent screen pixels\\n\\\n    vec2 centerCoord = gl_FragCoord.xy;\\n\\\n    vec3 positionLeft = pixelToEye(centerCoord + vec2(-1.0, 0.0)).xyz;\\n\\\n    vec3 positionRight = pixelToEye(centerCoord + vec2(1.0, 0.0)).xyz;\\n\\\n    vec3 positionUp = pixelToEye(centerCoord + vec2(0.0, 1.0)).xyz;\\n\\\n    vec3 positionDown = pixelToEye(centerCoord + vec2(0.0, -1.0)).xyz;\\n\\\n\\n\\\n    // Compute potential tangent vectors\\n\\\n    vec3 dx0 = positionEC - positionLeft;\\n\\\n    vec3 dx1 = positionRight - positionEC;\\n\\\n    vec3 dy0 = positionEC - positionDown;\\n\\\n    vec3 dy1 = positionUp - positionEC;\\n\\\n\\n\\\n    // The shorter tangent is more likely to be on the same surface\\n\\\n    vec3 dx = length(dx0) < length(dx1) ? dx0 : dx1;\\n\\\n    vec3 dy = length(dy0) < length(dy1) ? dy0 : dy1;\\n\\\n\\n\\\n    return normalize(cross(dx, dy));\\n\\\n}\\n\\\n\\n\\\nconst float sqrtTwoPi = sqrt(czm_twoPi);\\n\\\n\\n\\\nfloat gaussian(float x, float standardDeviation) {\\n\\\n    float argument = x / standardDeviation;\\n\\\n    return exp(-0.5 * argument * argument) / (sqrtTwoPi * standardDeviation);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec4 positionEC = pixelToEye(gl_FragCoord.xy);\\n\\\n\\n\\\n    // Exit if we are too close to the back of the frustum, where the depth value is invalid.\\n\\\n    float maxValidDepth = czm_currentFrustum.y - lengthCap;\\n\\\n    if (-positionEC.z > maxValidDepth)\\n\\\n    {\\n\\\n        out_FragColor = vec4(1.0);\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    vec3 normalEC = getNormalXEdge(positionEC.xyz);\\n\\\n    float gaussianVariance = lengthCap * sqrt(-positionEC.z);\\n\\\n    // Choose a step length such that the marching stops just before 3 * variance.\\n\\\n    float stepLength = 3.0 * gaussianVariance / (float(stepCount) + 1.0);\\n\\\n    float metersPerPixel = czm_metersPerPixel(positionEC, 1.0);\\n\\\n    // Minimum step is 1 pixel to avoid double sampling\\n\\\n    float pixelsPerStep = max(stepLength / metersPerPixel, 1.0);\\n\\\n    stepLength = pixelsPerStep * metersPerPixel;\\n\\\n\\n\\\n    float angleStepScale = 1.0 / float(directionCount);\\n\\\n    float angleStep = angleStepScale * czm_twoPi;\\n\\\n    float cosStep = cos(angleStep);\\n\\\n    float sinStep = sin(angleStep);\\n\\\n    mat2 rotateStep = mat2(cosStep, sinStep, -sinStep, cosStep);\\n\\\n\\n\\\n    // Initial sampling direction (different for each pixel)\\n\\\n    const float randomTextureSize = 255.0;\\n\\\n    vec2 randomTexCoord = fract(gl_FragCoord.xy / randomTextureSize);\\n\\\n    float randomVal = texture(randomTexture, randomTexCoord).x;\\n\\\n    vec2 sampleDirection = vec2(cos(angleStep * randomVal), sin(angleStep * randomVal));\\n\\\n\\n\\\n    float ao = 0.0;\\n\\\n    // Loop over sampling directions\\n\\\n#if __VERSION__ == 300\\n\\\n    for (int i = 0; i < directionCount; i++)\\n\\\n    {\\n\\\n#else\\n\\\n    for (int i = 0; i < 16; i++)\\n\\\n    {\\n\\\n        if (i >= directionCount) {\\n\\\n            break;\\n\\\n        }\\n\\\n#endif\\n\\\n        sampleDirection = rotateStep * sampleDirection;\\n\\\n\\n\\\n        float localAO = 0.0;\\n\\\n        vec2 radialStep = pixelsPerStep * sampleDirection;\\n\\\n\\n\\\n#if __VERSION__ == 300\\n\\\n        for (int j = 0; j < stepCount; j++)\\n\\\n        {\\n\\\n#else\\n\\\n        for (int j = 0; j < 64; j++)\\n\\\n        {\\n\\\n            if (j >= stepCount) {\\n\\\n                break;\\n\\\n            }\\n\\\n#endif\\n\\\n            // Step along sampling direction, away from output pixel\\n\\\n            vec2 samplePixel = floor(gl_FragCoord.xy + float(j + 1) * radialStep) + vec2(0.5);\\n\\\n\\n\\\n            // Exit if we stepped off the screen\\n\\\n            if (clamp(samplePixel, vec2(0.0), czm_viewport.zw) != samplePixel) {\\n\\\n                break;\\n\\\n            }\\n\\\n\\n\\\n            // Compute step vector from output point to sampled point\\n\\\n            vec4 samplePositionEC = pixelToEye(samplePixel);\\n\\\n            vec3 stepVector = samplePositionEC.xyz - positionEC.xyz;\\n\\\n\\n\\\n            // Estimate the angle from the surface normal.\\n\\\n            float dotVal = clamp(dot(normalEC, normalize(stepVector)), 0.0, 1.0);\\n\\\n            dotVal = czm_branchFreeTernary(dotVal > bias, dotVal, 0.0);\\n\\\n            dotVal = czm_branchFreeTernary(-samplePositionEC.z <= maxValidDepth, dotVal, 0.0);\\n\\\n\\n\\\n            // Weight contribution based on the distance from the output point\\n\\\n            float sampleDistance = length(stepVector);\\n\\\n            float weight = gaussian(sampleDistance, gaussianVariance);\\n\\\n            localAO += weight * dotVal;\\n\\\n        }\\n\\\n        ao += localAO;\\n\\\n    }\\n\\\n\\n\\\n    ao *= angleStepScale * stepLength;\\n\\\n    ao = 1.0 - clamp(ao, 0.0, 1.0);\\n\\\n    ao = pow(ao, intensity);\\n\\\n    out_FragColor = vec4(vec3(ao), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D ambientOcclusionTexture;\\n\\\nuniform bool ambientOcclusionOnly;\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec4 color = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec4 ao = texture(ambientOcclusionTexture, v_textureCoordinates);\\n\\\n    out_FragColor = ambientOcclusionOnly ? ao : ao * color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform float gradations;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;\\n\\\n#ifdef CZM_SELECTED_FEATURE\\n\\\n    if (czm_selected()) {\\n\\\n        out_FragColor = vec4(rgb, 1.0);\\n\\\n        return;\\n\\\n    }\\n\\\n#endif\\n\\\n    float luminance = czm_luminance(rgb);\\n\\\n    float darkness = luminance * gradations;\\n\\\n    darkness = (darkness - fract(darkness)) / gradations;\\n\\\n    out_FragColor = vec4(vec3(darkness), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D bloomTexture;\\n\\\nuniform bool glowOnly;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec4 color = texture(colorTexture, v_textureCoordinates);\\n\\\n\\n\\\n#ifdef CZM_SELECTED_FEATURE\\n\\\n    if (czm_selected()) {\\n\\\n        out_FragColor = color;\\n\\\n        return;\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    vec4 bloom = texture(bloomTexture, v_textureCoordinates);\\n\\\n    out_FragColor = glowOnly ? bloom : bloom + color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nuniform float avgLuminance;\\n\\\nuniform float threshold;\\n\\\nuniform float offset;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nfloat key(float avg)\\n\\\n{\\n\\\n    float guess = 1.5 - (1.5 / (avg * 0.1 + 1.0));\\n\\\n    return max(0.0, guess) + 0.1;\\n\\\n}\\n\\\n\\n\\\n// See section 9. \\\"The bright-pass filter\\\" of Realtime HDR Rendering\\n\\\n// http://www.cg.tuwien.ac.at/research/publications/2007/Luksch_2007_RHR/Luksch_2007_RHR-RealtimeHDR%20.pdf\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 color = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec3 xyz = czm_RGBToXYZ(color.rgb);\\n\\\n    float luminance = xyz.r;\\n\\\n\\n\\\n    float scaledLum = key(avgLuminance) * luminance / avgLuminance;\\n\\\n    float brightLum = max(scaledLum - threshold, 0.0);\\n\\\n    float brightness = brightLum / (offset + brightLum);\\n\\\n\\n\\\n    xyz.r = brightness;\\n\\\n    out_FragColor = vec4(czm_XYZToRGB(xyz), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform float brightness;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;\\n\\\n    vec3 target = vec3(0.0);\\n\\\n    out_FragColor = vec4(mix(target, rgb, brightness), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\n#ifdef DEBUG_SHOW_DEPTH\\n\\\nuniform sampler2D u_packedTranslucentDepth;\\n\\\n#endif\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n#ifdef DEBUG_SHOW_DEPTH\\n\\\n    if (v_textureCoordinates.x < 0.5)\\n\\\n    {\\n\\\n        out_FragColor.rgb = vec3(czm_unpackDepth(texture(u_packedTranslucentDepth, v_textureCoordinates)));\\n\\\n        out_FragColor.a = 1.0;\\n\\\n    }\\n\\\n#else\\n\\\n    vec4 color = texture(colorTexture, v_textureCoordinates);\\n\\\n\\n\\\n#ifdef PICK\\n\\\n    if (color == vec4(0.0))\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n#else\\n\\\n    // Reverse premultiplication process to get the correct composited result of the classification primitives\\n\\\n    color.rgb /= color.a;\\n\\\n#endif\\n\\\n    out_FragColor = color;\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform float contrast;\\n\\\nuniform float brightness;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec3 sceneColor = texture(colorTexture, v_textureCoordinates).xyz;\\n\\\n    sceneColor = czm_RGBToHSB(sceneColor);\\n\\\n    sceneColor.z += brightness;\\n\\\n    sceneColor = czm_HSBToRGB(sceneColor);\\n\\\n\\n\\\n    float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));\\n\\\n    sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5);\\n\\\n    out_FragColor = vec4(sceneColor, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D blurTexture;\\n\\\nuniform sampler2D depthTexture;\\n\\\nuniform float focalDistance;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvec4 toEye(vec2 uv, float depth)\\n\\\n{\\n\\\n   vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));\\n\\\n   vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0);\\n\\\n   posInCamera = posInCamera / posInCamera.w;\\n\\\n   return posInCamera;\\n\\\n}\\n\\\n\\n\\\nfloat computeDepthBlur(float depth)\\n\\\n{\\n\\\n    float f;\\n\\\n    if (depth < focalDistance)\\n\\\n    {\\n\\\n        f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x);\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance);\\n\\\n        f = pow(f, 0.1);\\n\\\n    }\\n\\\n    f *= f;\\n\\\n    f = clamp(f, 0.0, 1.0);\\n\\\n    return pow(f, 0.5);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    float depth = czm_readDepth(depthTexture, v_textureCoordinates);\\n\\\n    vec4 posInCamera = toEye(v_textureCoordinates, depth);\\n\\\n    float d = computeDepthBlur(-posInCamera.z);\\n\\\n    out_FragColor = mix(texture(colorTexture, v_textureCoordinates), texture(blurTexture, v_textureCoordinates), d);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D depthTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    float depth = czm_readDepth(depthTexture, v_textureCoordinates);\\n\\\n    out_FragColor = vec4(vec3(depth), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_depthTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float z_window = czm_unpackDepth(texture(u_depthTexture, v_textureCoordinates));\\n\\\n    z_window = czm_reverseLogDepth(z_window);\\n\\\n    float n_range = czm_depthRange.near;\\n\\\n    float f_range = czm_depthRange.far;\\n\\\n    float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);\\n\\\n    float scale = pow(z_ndc * 0.5 + 0.5, 8.0);\\n\\\n    out_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D depthTexture;\\n\\\nuniform float length;\\n\\\nuniform vec4 color;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    float directions[3];\\n\\\n    directions[0] = -1.0;\\n\\\n    directions[1] = 0.0;\\n\\\n    directions[2] = 1.0;\\n\\\n\\n\\\n    float scalars[3];\\n\\\n    scalars[0] = 3.0;\\n\\\n    scalars[1] = 10.0;\\n\\\n    scalars[2] = 3.0;\\n\\\n\\n\\\n    float padx = czm_pixelRatio / czm_viewport.z;\\n\\\n    float pady = czm_pixelRatio / czm_viewport.w;\\n\\\n\\n\\\n#ifdef CZM_SELECTED_FEATURE\\n\\\n    bool selected = false;\\n\\\n    for (int i = 0; i < 3; ++i)\\n\\\n    {\\n\\\n        float dir = directions[i];\\n\\\n        selected = selected || czm_selected(vec2(-padx, dir * pady));\\n\\\n        selected = selected || czm_selected(vec2(padx, dir * pady));\\n\\\n        selected = selected || czm_selected(vec2(dir * padx, -pady));\\n\\\n        selected = selected || czm_selected(vec2(dir * padx, pady));\\n\\\n        if (selected)\\n\\\n        {\\n\\\n            break;\\n\\\n        }\\n\\\n    }\\n\\\n    if (!selected)\\n\\\n    {\\n\\\n        out_FragColor = vec4(color.rgb, 0.0);\\n\\\n        return;\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n    float horizEdge = 0.0;\\n\\\n    float vertEdge = 0.0;\\n\\\n\\n\\\n    for (int i = 0; i < 3; ++i)\\n\\\n    {\\n\\\n        float dir = directions[i];\\n\\\n        float scale = scalars[i];\\n\\\n\\n\\\n        horizEdge -= texture(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale;\\n\\\n        horizEdge += texture(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale;\\n\\\n\\n\\\n        vertEdge -= texture(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale;\\n\\\n        vertEdge += texture(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale;\\n\\\n    }\\n\\\n\\n\\\n    float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\\n\\\n    out_FragColor = vec4(color.rgb, len > length ? color.a : 0.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec2 v_textureCoordinates;\\n\\\n\\n\\\nuniform sampler2D colorTexture;\\n\\\n\\n\\\nconst float fxaaQualitySubpix = 0.5;\\n\\\nconst float fxaaQualityEdgeThreshold = 0.125;\\n\\\nconst float fxaaQualityEdgeThresholdMin = 0.0833;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw;\\n\\\n    vec4 color = FxaaPixelShader(\\n\\\n        v_textureCoordinates,\\n\\\n        colorTexture,\\n\\\n        fxaaQualityRcpFrame,\\n\\\n        fxaaQualitySubpix,\\n\\\n        fxaaQualityEdgeThreshold,\\n\\\n        fxaaQualityEdgeThresholdMin);\\n\\\n    float alpha = texture(colorTexture, v_textureCoordinates).a;\\n\\\n    out_FragColor = vec4(color.rgb, alpha);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#else\\n\\\nuniform float exposure;\\n\\\n#endif\\n\\\n\\n\\\n// See slides 142 and 143:\\n\\\n//     http://www.gdcvault.com/play/1012459/Uncharted_2__HDR_Lighting\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec3 color = fragmentColor.rgb;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n    float exposure = texture(autoExposure, vec2(0.5)).r;\\n\\\n    color /= exposure;\\n\\\n#else\\n\\\n    color *= vec3(exposure);\\n\\\n#endif\\n\\\n\\n\\\n\tconst float A = 0.22; // shoulder strength\\n\\\n\tconst float B = 0.30; // linear strength\\n\\\n\tconst float C = 0.10; // linear angle\\n\\\n\tconst float D = 0.20; // toe strength\\n\\\n\tconst float E = 0.01; // toe numerator\\n\\\n\tconst float F = 0.30; // toe denominator\\n\\\n\\n\\\n\tconst float white = 11.2; // linear white point value\\n\\\n\\n\\\n\tvec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F;\\n\\\n\tfloat w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F;\\n\\\n\\n\\\n\tc = czm_inverseGamma(c / w);\\n\\\n\tout_FragColor = vec4(c, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#define SAMPLES 8\\n\\\n\\n\\\nuniform float delta;\\n\\\nuniform float sigma;\\n\\\nuniform float direction; // 0.0 for x direction, 1.0 for y direction\\n\\\n\\n\\\nuniform sampler2D colorTexture;\\n\\\n\\n\\\n#ifdef USE_STEP_SIZE\\n\\\nuniform float stepSize;\\n\\\n#else\\n\\\nuniform vec2 step;\\n\\\n#endif\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n//  Incremental Computation of the Gaussian:\\n\\\n//  https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec2 st = v_textureCoordinates;\\n\\\n    vec2 dir = vec2(1.0 - direction, direction);\\n\\\n\\n\\\n#ifdef USE_STEP_SIZE\\n\\\n    vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw));\\n\\\n#else\\n\\\n    vec2 step = step;\\n\\\n#endif\\n\\\n\\n\\\n    vec3 g;\\n\\\n    g.x = 1.0 / (sqrt(czm_twoPi) * sigma);\\n\\\n    g.y = exp((-0.5 * delta * delta) / (sigma * sigma));\\n\\\n    g.z = g.y * g.y;\\n\\\n\\n\\\n    vec4 result = texture(colorTexture, st) * g.x;\\n\\\n    for (int i = 1; i < SAMPLES; ++i)\\n\\\n    {\\n\\\n        g.xy *= g.yz;\\n\\\n\\n\\\n        vec2 offset = float(i) * dir * step;\\n\\\n        result += texture(colorTexture, st - offset) * g.x;\\n\\\n        result += texture(colorTexture, st + offset) * g.x;\\n\\\n    }\\n\\\n\\n\\\n    out_FragColor = result;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D dirtTexture;\\n\\\nuniform sampler2D starTexture;\\n\\\nuniform vec2 dirtTextureDimensions;\\n\\\nuniform float distortion;\\n\\\nuniform float ghostDispersal;\\n\\\nuniform float haloWidth;\\n\\\nuniform float dirtAmount;\\n\\\nuniform float earthRadius;\\n\\\nuniform float intensity;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n// whether it is in space or not\\n\\\n// 6500000.0 is empirical value\\n\\\n#define DISTANCE_TO_SPACE 6500000.0\\n\\\n\\n\\\n// return ndc from world coordinate biased earthRadius\\n\\\nvec4 getNDCFromWC(vec3 WC, float earthRadius)\\n\\\n{\\n\\\n    vec4 positionEC = czm_view * vec4(WC, 1.0);\\n\\\n    positionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0);\\n\\\n    vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n    return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);\\n\\\n}\\n\\\n\\n\\\n// Check if current pixel is included Earth\\n\\\n// if then mask it gradually\\n\\\nfloat isInEarth(vec2 texcoord, vec2 sceneSize)\\n\\\n{\\n\\\n    vec2 NDC = texcoord * 2.0 - 1.0;\\n\\\n    vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0);\\n\\\n    vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5);\\n\\\n    NDC.xy -= earthPosSC.xy;\\n\\\n\\n\\\n    float X = abs(NDC.x) * sceneSize.x;\\n\\\n    float Y = abs(NDC.y) * sceneSize.y;\\n\\\n\\n\\\n    return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0));\\n\\\n}\\n\\\n\\n\\\n// For Chromatic effect\\n\\\nvec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace)\\n\\\n{\\n\\\n    vec2 sceneSize = czm_viewport.zw;\\n\\\n    vec3 color;\\n\\\n    if(isSpace)\\n\\\n    {\\n\\\n        color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture(tex, texcoord + direction * distortion.r).r;\\n\\\n        color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture(tex, texcoord + direction * distortion.g).g;\\n\\\n        color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture(tex, texcoord + direction * distortion.b).b;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        color.r = texture(tex, texcoord + direction * distortion.r).r;\\n\\\n        color.g = texture(tex, texcoord + direction * distortion.g).g;\\n\\\n        color.b = texture(tex, texcoord + direction * distortion.b).b;\\n\\\n    }\\n\\\n    return vec4(clamp(color, 0.0, 1.0), 0.0);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec4 originalColor = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec3 rgb = originalColor.rgb;\\n\\\n    bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE;\\n\\\n\\n\\\n    // Sun position\\n\\\n    vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0);\\n\\\n    vec4 sunPositionEC = czm_view * sunPos;\\n\\\n    vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC);\\n\\\n    sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0);\\n\\\n\\n\\\n    // If sun is not in the screen space, use original color.\\n\\\n    if(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1)))\\n\\\n    {\\n\\\n        // Lens flare is disabled when not in space until #5932 is fixed.\\n\\\n        //    https://github.com/CesiumGS/cesium/issues/5932\\n\\\n        out_FragColor = originalColor;\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    vec2 texcoord = vec2(1.0) - v_textureCoordinates;\\n\\\n    vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;\\n\\\n    vec2 invPixelSize = 1.0 / pixelSize;\\n\\\n    vec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion);\\n\\\n\\n\\\n    // ghost vector to image centre:\\n\\\n    vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal;\\n\\\n    vec3 direction = normalize(vec3(ghostVec, 0.0));\\n\\\n\\n\\\n    // sample ghosts:\\n\\\n    vec4 result = vec4(0.0);\\n\\\n    vec4 ghost = vec4(0.0);\\n\\\n    for (int i = 0; i < 4; ++i)\\n\\\n    {\\n\\\n        vec2 offset = fract(texcoord + ghostVec * float(i));\\n\\\n        // Only bright spots from the centre of the source image\\n\\\n        ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace);\\n\\\n    }\\n\\\n    result += ghost;\\n\\\n\\n\\\n    // sample halo\\n\\\n    vec2 haloVec = normalize(ghostVec) * haloWidth;\\n\\\n    float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\\n\\\n    weightForHalo = pow(1.0 - weightForHalo, 5.0);\\n\\\n\\n\\\n    result += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5;\\n\\\n\\n\\\n    // dirt on lens\\n\\\n    vec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions;\\n\\\n    if (dirtTexCoords.x > 1.0)\\n\\\n    {\\n\\\n        dirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) :  fract(dirtTexCoords.x);\\n\\\n    }\\n\\\n    if (dirtTexCoords.y > 1.0)\\n\\\n    {\\n\\\n        dirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) :  fract(dirtTexCoords.y);\\n\\\n    }\\n\\\n    result += dirtAmount * texture(dirtTexture, dirtTexCoords);\\n\\\n\\n\\\n    // Rotating starburst texture's coordinate\\n\\\n    // dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0))\\n\\\n    float camrot = czm_view[0].z + czm_view[1].y;\\n\\\n    float cosValue = cos(camrot);\\n\\\n    float sinValue = sin(camrot);\\n\\\n    mat3 rotation = mat3(\\n\\\n        cosValue, -sinValue, 0.0,\\n\\\n        sinValue, cosValue, 0.0,\\n\\\n        0.0, 0.0, 1.0\\n\\\n    );\\n\\\n\\n\\\n    vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0);\\n\\\n    vec3 st2 = vec3((rotation * st1).xy, 1.0);\\n\\\n    vec3 st3 = st2 * 0.5 + vec3(0.5);\\n\\\n    vec2 lensStarTexcoord = st3.xy;\\n\\\n    float weightForLensFlare = length(vec3(sunPos.xy, 0.0));\\n\\\n    float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0);\\n\\\n\\n\\\n    if (!isSpace)\\n\\\n    {\\n\\\n        result *= oneMinusWeightForLensFlare * intensity * 0.2;\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        result *= oneMinusWeightForLensFlare * intensity;\\n\\\n        result *= texture(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0;\\n\\\n    }\\n\\\n\\n\\\n    result += texture(colorTexture, v_textureCoordinates);\\n\\\n\\n\\\n    out_FragColor = result;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform vec3 white;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#else\\n\\\nuniform float exposure;\\n\\\n#endif\\n\\\n\\n\\\n// See equation 4:\\n\\\n//    http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec3 color = fragmentColor.rgb;\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n    float exposure = texture(autoExposure, vec2(0.5)).r;\\n\\\n    color /= exposure;\\n\\\n#else\\n\\\n    color *= vec3(exposure);\\n\\\n#endif\\n\\\n    color = (color * (1.0 + color / white)) / (1.0 + color);\\n\\\n    color = czm_inverseGamma(color);\\n\\\n    out_FragColor = vec4(color, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nfloat rand(vec2 co)\\n\\\n{\\n\\\n    return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453);\\n\\\n}\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1;\\n\\\n    vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;\\n\\\n    vec3 green = vec3(0.0, 1.0, 0.0);\\n\\\n    out_FragColor = vec4((noiseValue + rgb) * green, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    out_FragColor = texture(colorTexture, v_textureCoordinates);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform highp sampler2D u_depthTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#else\\n\\\nuniform float exposure;\\n\\\n#endif\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec3 color = fragmentColor.rgb;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n    color /= texture(autoExposure, vec2(0.5)).r;\\n\\\n#else\\n\\\n    color *= vec3(exposure);\\n\\\n#endif\\n\\\n    color = czm_pbrNeutralTonemapping(color);\\n\\\n    color = czm_inverseGamma(color);\\n\\\n\\n\\\n    out_FragColor = vec4(color, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_pointCloud_colorGBuffer;\\n\\\nuniform sampler2D u_pointCloud_depthGBuffer;\\n\\\nuniform vec2 u_distanceAndEdlStrength;\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvec2 neighborContribution(float log2Depth, vec2 offset)\\n\\\n{\\n\\\n    float dist = u_distanceAndEdlStrength.x;\\n\\\n    vec2 texCoordOrig = v_textureCoordinates + offset * dist;\\n\\\n    vec2 texCoord0 = v_textureCoordinates + offset * floor(dist);\\n\\\n    vec2 texCoord1 = v_textureCoordinates + offset * ceil(dist);\\n\\\n\\n\\\n    float depthOrLogDepth0 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord0));\\n\\\n    float depthOrLogDepth1 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord1));\\n\\\n\\n\\\n    // ignore depth values that are the clear depth\\n\\\n    if (depthOrLogDepth0 == 0.0 || depthOrLogDepth1 == 0.0) {\\n\\\n        return vec2(0.0);\\n\\\n    }\\n\\\n\\n\\\n    // interpolate the two adjacent depth values\\n\\\n    float depthMix = mix(depthOrLogDepth0, depthOrLogDepth1, fract(dist));\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(texCoordOrig, depthMix);\\n\\\n    return vec2(max(0.0, log2Depth - log2(-eyeCoordinate.z / eyeCoordinate.w)), 1.0);\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float depthOrLogDepth = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, v_textureCoordinates));\\n\\\n\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depthOrLogDepth);\\n\\\n    eyeCoordinate /= eyeCoordinate.w;\\n\\\n\\n\\\n    float log2Depth = log2(-eyeCoordinate.z);\\n\\\n\\n\\\n    if (depthOrLogDepth == 0.0) // 0.0 is the clear value for the gbuffer\\n\\\n    {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    vec4 color = texture(u_pointCloud_colorGBuffer, v_textureCoordinates);\\n\\\n\\n\\\n    // sample from neighbors left, right, down, up\\n\\\n    vec2 texelSize = 1.0 / czm_viewport.zw;\\n\\\n\\n\\\n    vec2 responseAndCount = vec2(0.0);\\n\\\n\\n\\\n    responseAndCount += neighborContribution(log2Depth, vec2(-texelSize.x, 0.0));\\n\\\n    responseAndCount += neighborContribution(log2Depth, vec2(+texelSize.x, 0.0));\\n\\\n    responseAndCount += neighborContribution(log2Depth, vec2(0.0, -texelSize.y));\\n\\\n    responseAndCount += neighborContribution(log2Depth, vec2(0.0, +texelSize.y));\\n\\\n\\n\\\n    float response = responseAndCount.x / responseAndCount.y;\\n\\\n    float strength = u_distanceAndEdlStrength.y;\\n\\\n    float shade = exp(-response * 300.0 * strength);\\n\\\n    color.rgb *= shade;\\n\\\n    out_FragColor = vec4(color);\\n\\\n\\n\\\n    // Input and output depth are the same.\\n\\\n    gl_FragDepth = depthOrLogDepth;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\nuniform sampler2D autoExposure;\\n\\\n#else\\n\\\nuniform float exposure;\\n\\\n#endif\\n\\\n\\n\\\n// See equation 3:\\n\\\n//    http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);\\n\\\n    vec3 color = fragmentColor.rgb;\\n\\\n#ifdef AUTO_EXPOSURE\\n\\\n    float exposure = texture(autoExposure, vec2(0.5)).r;\\n\\\n    color /= exposure;\\n\\\n#else\\n\\\n    color *= vec3(exposure);\\n\\\n#endif\\n\\\n    color = color / (1.0 + color);\\n\\\n    color = czm_inverseGamma(color);\\n\\\n    out_FragColor = vec4(color, fragmentColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D colorTexture;\\n\\\nuniform sampler2D silhouetteTexture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec4 silhouetteColor = texture(silhouetteTexture, v_textureCoordinates);\\n\\\n    vec4 color = texture(colorTexture, v_textureCoordinates);\\n\\\n    out_FragColor = mix(color, silhouetteColor, silhouetteColor.a);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"//\\n\\\n// Fragment shader for Gaussian splats.\\n\\\n// Renders a Gaussian splat within a quad, discarding fragments outside the unit circle.\\n\\\n// Applies an approximate Gaussian falloff based on distance from the center and outputs\\n\\\n// a color modulated by the alpha and Gaussian weight.\\n\\\n//\\n\\\nvoid main() {\\n\\\n    if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;\\n\\\n    if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;\\n\\\n\\n\\\n    float A = -dot(v_vertPos, v_vertPos);\\n\\\n    if (A < -4.) {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    float B = exp(A * 4.) * v_splatColor.a ;\\n\\\n    out_FragColor = vec4(v_splatColor.rgb * B , B);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"//\\n\\\n// Vertex shader for Gaussian splats.\\n\\\n\\n\\\n// The splats are rendered as quads in view space. Splat attributes are loaded from a texture with precomputed 3D covariance.\\n\\\n\\n\\\n// Passes local quad coordinates and color to the fragment shader for Gaussian evaluation. \\n\\\n//\\n\\\n// Discards splats outside the view frustum or with negligible screen size.\\n\\\n//\\n\\\n#if defined(HAS_SPHERICAL_HARMONICS)\\n\\\nconst uint coefficientCount[3] = uint[3](3u,8u,15u);\\n\\\nconst float SH_C1 = 0.48860251;\\n\\\nconst float SH_C2[5] = float[5](\\n\\\n         1.092548430,\\n\\\n        -1.09254843,\\n\\\n        0.315391565,\\n\\\n        -1.09254843,\\n\\\n        0.546274215\\n\\\n);\\n\\\n\\n\\\nconst float SH_C3[7] = float[7](\\n\\\n         -0.59004358,\\n\\\n        2.890611442,\\n\\\n        -0.45704579,\\n\\\n        0.373176332,\\n\\\n        -0.45704579,\\n\\\n        1.445305721,\\n\\\n        -0.59004358\\n\\\n);\\n\\\n\\n\\\n//Retrieve SH coefficient. Currently RG32UI format\\n\\\nuvec2 loadSHCoeff(uint splatID, int index) {\\n\\\n    ivec2 shTexSize = textureSize(u_sphericalHarmonicsTexture, 0);\\n\\\n    uint dims = coefficientCount[uint(u_sphericalHarmonicsDegree)-1u];\\n\\\n    uint splatsPerRow = uint(shTexSize.x) / dims;\\n\\\n    uint shIndex = (splatID%splatsPerRow) * dims + uint(index);\\n\\\n    ivec2 shPosCoord = ivec2(shIndex, splatID / splatsPerRow);\\n\\\n    return texelFetch(u_sphericalHarmonicsTexture, shPosCoord, 0).rg;\\n\\\n}\\n\\\n\\n\\\n//Unpack RG32UI half float coefficients to vec3\\n\\\nvec3 halfToVec3(uvec2 packed) {\\n\\\n    return vec3(unpackHalf2x16(packed.x), unpackHalf2x16(packed.y).x);\\n\\\n}\\n\\\n\\n\\\nvec3 loadAndExpandSHCoeff(uint splatID, int index) {\\n\\\n    uvec2 coeff = loadSHCoeff(splatID, index);\\n\\\n    return halfToVec3(coeff);\\n\\\n}\\n\\\n\\n\\\nvec3 evaluateSH(uint splatID, vec3 viewDir) {\\n\\\n    vec3 result = vec3(0.0);\\n\\\n    int coeffIndex = 0;\\n\\\n    float x = viewDir.x, y = viewDir.y, z = viewDir.z;\\n\\\n\\n\\\n    if (u_sphericalHarmonicsDegree >= 1.) {\\n\\\n        vec3 sh1 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n        vec3 sh2 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n        vec3 sh3 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n        result += -SH_C1 * y * sh1 + SH_C1 * z * sh2 - SH_C1 * x * sh3;\\n\\\n\\n\\\n        if (u_sphericalHarmonicsDegree >= 2.) {\\n\\\n            float xx = x * x;\\n\\\n            float yy = y * y;\\n\\\n            float zz = z * z;\\n\\\n            float xy = x * y;\\n\\\n            float yz = y * z;\\n\\\n            float xz = x * z;\\n\\\n\\n\\\n            vec3 sh4 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n            vec3 sh5 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n            vec3 sh6 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n            vec3 sh7 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n            vec3 sh8 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n            result += SH_C2[0] * xy * sh4 +\\n\\\n                    SH_C2[1] * yz * sh5 +\\n\\\n                    SH_C2[2] * (2.0f * zz - xx - yy) * sh6 +\\n\\\n                    SH_C2[3] * xz * sh7 +\\n\\\n                    SH_C2[4] * (xx - yy) * sh8;\\n\\\n\\n\\\n            if (u_sphericalHarmonicsDegree >= 3.) {\\n\\\n                vec3 sh9 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n                vec3 sh10 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n                vec3 sh11 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n                vec3 sh12 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n                vec3 sh13 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n                vec3 sh14 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n                vec3 sh15 = loadAndExpandSHCoeff(splatID, coeffIndex++);\\n\\\n                result += SH_C3[0] * y * (3.0f * xx - yy) * sh9 +\\n\\\n                        SH_C3[1] * xy * z * sh10 +\\n\\\n                        SH_C3[2] * y * (4.0f * zz - xx - yy) * sh11 +\\n\\\n                        SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh12 +\\n\\\n                        SH_C3[4] * x * (4.0f * zz - xx - yy) * sh13 +\\n\\\n                        SH_C3[5] * z * (xx - yy) * sh14 +\\n\\\n                        SH_C3[6] * x * (xx - 3.0f * yy) * sh15;\\n\\\n            }\\n\\\n        }\\n\\\n    }\\n\\\n    return result;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n// Transforms and projects splat covariance into screen space and extracts the major and minor axes of the Gaussian ellipsoid\\n\\\n// which is used to calculate the vertex position in clip space.\\n\\\nvec4 calcCovVectors(vec3 viewPos, mat3 Vrk) {\\n\\\n    vec4 t = vec4(viewPos, 1.0);\\n\\\n    vec2 focal = vec2(czm_projection[0][0] * czm_viewport.z, czm_projection[1][1] * czm_viewport.w);\\n\\\n\\n\\\n    vec2 J1 = focal / t.z;\\n\\\n    vec2 J2 = -focal * vec2(t.x, t.y) / (t.z * t.z);\\n\\\n    mat3 J = mat3(\\n\\\n        J1.x, 0.0, J2.x,\\n\\\n        0.0, J1.y, J2.y,\\n\\\n        0.0, 0.0, 0.0\\n\\\n    );\\n\\\n\\n\\\n    mat3 R = mat3(czm_modelView);\\n\\\n\\n\\\n    //transform our covariance into view space\\n\\\n    //ensures orientation is correct\\n\\\n    mat3 Vrk_view = R * Vrk * transpose(R);\\n\\\n    mat3 cov = transpose(J) * Vrk_view * J;\\n\\\n\\n\\\n    float diagonal1 = cov[0][0] + .3;\\n\\\n    float offDiagonal = cov[0][1];\\n\\\n    float diagonal2 = cov[1][1] + .3;\\n\\\n\\n\\\n    float mid = 0.5 * (diagonal1 + diagonal2);\\n\\\n    float radius = length(vec2((diagonal1 - diagonal2) * 0.5, offDiagonal));\\n\\\n    float lambda1 = mid + radius;\\n\\\n    float lambda2 = max(mid - radius, 0.1);\\n\\\n\\n\\\n    vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));\\n\\\n\\n\\\n    return vec4(\\n\\\n        min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector,\\n\\\n        min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x)\\n\\\n    );\\n\\\n}\\n\\\n\\n\\\nhighp vec4 discardVec = vec4(0.0, 0.0, 2.0, 1.0);\\n\\\n\\n\\\nvoid main() {\\n\\\n    uint texIdx = uint(a_splatIndex);\\n\\\n    ivec2 posCoord = ivec2((texIdx & 0x3ffu) << 1, texIdx >> 10);\\n\\\n    vec4 splatPosition = vec4( uintBitsToFloat(uvec4(texelFetch(u_splatAttributeTexture, posCoord, 0))) );\\n\\\n\\n\\\n    vec4 splatViewPos = czm_modelView * vec4(splatPosition.xyz, 1.0);\\n\\\n    vec4 clipPosition = czm_projection * splatViewPos;\\n\\\n\\n\\\n    float clip = 1.2 * clipPosition.w;\\n\\\n    if (clipPosition.z < -clip || clipPosition.x < -clip || clipPosition.x > clip ||\\n\\\n        clipPosition.y < -clip || clipPosition.y > clip) {\\n\\\n        gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    ivec2 covCoord = ivec2(((texIdx & 0x3ffu) << 1) | 1u, texIdx >> 10);\\n\\\n    uvec4 covariance = uvec4(texelFetch(u_splatAttributeTexture, covCoord, 0));\\n\\\n\\n\\\n    gl_Position = clipPosition;\\n\\\n\\n\\\n    vec2 u1 = unpackHalf2x16(covariance.x) ;\\n\\\n    vec2 u2 = unpackHalf2x16(covariance.y);\\n\\\n    vec2 u3 = unpackHalf2x16(covariance.z);\\n\\\n    mat3 Vrk = mat3(u1.x, u1.y, u2.x, u1.y, u2.y, u3.x, u2.x, u3.x, u3.y);\\n\\\n\\n\\\n    vec4 covVectors = calcCovVectors(splatViewPos.xyz, Vrk);\\n\\\n\\n\\\n    if (dot(covVectors.xy, covVectors.xy) < 4.0 && dot(covVectors.zw, covVectors.zw) < 4.0) {\\n\\\n        gl_Position = discardVec;\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    vec2 corner = vec2((gl_VertexID << 1) & 2, gl_VertexID & 2) - 1.;\\n\\\n\\n\\\n    gl_Position += vec4((corner.x * covVectors.xy + corner.y * covVectors.zw) / czm_viewport.zw * gl_Position.w, 0, 0);\\n\\\n    gl_Position.z = clamp(gl_Position.z, -abs(gl_Position.w), abs(gl_Position.w));\\n\\\n\\n\\\n    v_vertPos = corner ;\\n\\\n    v_splatColor = vec4(covariance.w & 0xffu, (covariance.w >> 8) & 0xffu, (covariance.w >> 16) & 0xffu, (covariance.w >> 24) & 0xffu) / 255.0;\\n\\\n#if defined(HAS_SPHERICAL_HARMONICS)\\n\\\n    vec4 splatWC = czm_inverseView * splatViewPos;\\n\\\n    vec3 viewDirModel = normalize(u_inverseModelRotation * (splatWC.xyz - u_cameraPositionWC.xyz));\\n\\\n\\n\\\n    v_splatColor.rgb += evaluateSH(texIdx, viewDirModel).rgb;\\n\\\n#endif\\n\\\n    v_splitDirection = u_splitDirection;\\n\\\n}\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_texture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    out_FragColor = texture(u_texture, v_textureCoordinates);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 position;\\n\\\nin float webMercatorT;\\n\\\n\\n\\\nuniform vec2 u_textureDimensions;\\n\\\n\\n\\\nout vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    v_textureCoordinates = vec2(position.x, webMercatorT);\\n\\\n    gl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef TEXTURE_COORDINATES\\n\\\n#ifdef SPHERICAL\\n\\\nin vec4 v_sphericalExtents;\\n\\\n#else // SPHERICAL\\n\\\nin vec2 v_inversePlaneExtents;\\n\\\nin vec4 v_westPlane;\\n\\\nin vec4 v_southPlane;\\n\\\n#endif // SPHERICAL\\n\\\nin vec3 v_uvMinAndSphericalLongitudeRotation;\\n\\\nin vec3 v_uMaxAndInverseDistance;\\n\\\nin vec3 v_vMaxAndInverseDistance;\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nin vec4 v_color;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef NORMAL_EC\\n\\\nvec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) {\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth);\\n\\\n    return eyeCoordinate.xyz / eyeCoordinate.w;\\n\\\n}\\n\\\n\\n\\\nvec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) {\\n\\\n    vec2 glFragCoordXY = gl_FragCoord.xy;\\n\\\n    // Sample depths at both offset and negative offset\\n\\\n    float upOrRightLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw));\\n\\\n    float downOrLeftLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw));\\n\\\n    // Explicitly evaluate both paths\\n\\\n    // Necessary for multifrustum and for edges of the screen\\n\\\n    bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw);\\n\\\n    float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y);\\n\\\n    float useDownOrLeft = float(useUpOrRight == 0.0);\\n\\\n    vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth);\\n\\\n    vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth);\\n\\\n    return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft;\\n\\\n}\\n\\\n#endif // NORMAL_EC\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n#ifdef REQUIRES_EC\\n\\\n    float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw));\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef REQUIRES_WC\\n\\\n    vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate;\\n\\\n    vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TEXTURE_COORDINATES\\n\\\n    vec2 uv;\\n\\\n#ifdef SPHERICAL\\n\\\n    // Treat world coords as a sphere normal for spherical coordinates\\n\\\n    vec2 sphericalLatLong = czm_approximateSphericalCoordinates(worldCoordinate);\\n\\\n    sphericalLatLong.y += v_uvMinAndSphericalLongitudeRotation.z;\\n\\\n    sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);\\n\\\n    uv.x = (sphericalLatLong.y - v_sphericalExtents.y) * v_sphericalExtents.w;\\n\\\n    uv.y = (sphericalLatLong.x - v_sphericalExtents.x) * v_sphericalExtents.z;\\n\\\n#else // SPHERICAL\\n\\\n    // Unpack planes and transform to eye space\\n\\\n    uv.x = czm_planeDistance(v_westPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.x;\\n\\\n    uv.y = czm_planeDistance(v_southPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.y;\\n\\\n#endif // SPHERICAL\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\n#ifdef CULL_FRAGMENTS\\n\\\n    // When classifying translucent geometry, logDepthOrDepth == 0.0\\n\\\n    // indicates a region that should not be classified, possibly due to there\\n\\\n    // being opaque pixels there in another buffer.\\n\\\n    if (uv.x <= 0.0 || 1.0 <= uv.x || uv.y <= 0.0 || 1.0 <= uv.y || logDepthOrDepth == 0.0) {\\n\\\n        discard;\\n\\\n    }\\n\\\n#endif\\n\\\n\\n\\\n#ifdef PICK\\n\\\n    out_FragColor.a = 1.0; // Explicitly set the alpha, otherwise this may be discarded by ShaderSource.createPickFragmentShaderSource\\n\\\n#ifdef CULL_FRAGMENTS\\n\\\n    czm_writeDepthClamp();\\n\\\n#endif // CULL_FRAGMENTS\\n\\\n#else // PICK\\n\\\n\\n\\\n#ifdef NORMAL_EC\\n\\\n    // Compute normal by sampling adjacent pixels in 2x2 block in screen space\\n\\\n    vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0));\\n\\\n    vec3 leftRight = vectorFromOffset(eyeCoordinate, vec2(1.0, 0.0));\\n\\\n    vec3 normalEC = normalize(cross(leftRight, downUp));\\n\\\n#endif\\n\\\n\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n\\n\\\n    vec4 color = czm_gammaCorrect(v_color);\\n\\\n#ifdef FLAT\\n\\\n    out_FragColor = color;\\n\\\n#else // FLAT\\n\\\n    czm_materialInput materialInput;\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n    materialInput.positionToEyeEC = -eyeCoordinate.xyz;\\n\\\n    czm_material material = czm_getDefaultMaterial(materialInput);\\n\\\n    material.diffuse = color.rgb;\\n\\\n    material.alpha = color.a;\\n\\\n\\n\\\n    out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);\\n\\\n#endif // FLAT\\n\\\n\\n\\\n    // Premultiply alpha. Required for classification primitives on translucent globe.\\n\\\n    out_FragColor.rgb *= out_FragColor.a;\\n\\\n\\n\\\n#else // PER_INSTANCE_COLOR\\n\\\n\\n\\\n    // Material support.\\n\\\n    // USES_ is distinct from REQUIRES_, because some things are dependencies of each other or\\n\\\n    // dependencies for culling but might not actually be used by the material.\\n\\\n\\n\\\n    czm_materialInput materialInput;\\n\\\n\\n\\\n#ifdef USES_NORMAL_EC\\n\\\n    materialInput.normalEC = normalEC;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USES_POSITION_TO_EYE_EC\\n\\\n    materialInput.positionToEyeEC = -eyeCoordinate.xyz;\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USES_TANGENT_TO_EYE\\n\\\n    materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(worldCoordinate, normalEC);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef USES_ST\\n\\\n    // Remap texture coordinates from computed (approximately aligned with cartographic space) to the desired\\n\\\n    // texture coordinate system, which typically forms a tight oriented bounding box around the geometry.\\n\\\n    // Shader is provided a set of reference points for remapping.\\n\\\n    materialInput.st.x = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_uMaxAndInverseDistance.xy, uv) * v_uMaxAndInverseDistance.z;\\n\\\n    materialInput.st.y = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_vMaxAndInverseDistance.xy, uv) * v_vMaxAndInverseDistance.z;\\n\\\n#endif\\n\\\n\\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n#ifdef FLAT\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n#else // FLAT\\n\\\n    out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);\\n\\\n#endif // FLAT\\n\\\n\\n\\\n    // Premultiply alpha. Required for classification primitives on translucent globe.\\n\\\n    out_FragColor.rgb *= out_FragColor.a;\\n\\\n\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n    czm_writeDepthClamp();\\n\\\n#endif // PICK\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position3DHigh;\\n\\\nin vec3 position3DLow;\\n\\\nin float batchId;\\n\\\n\\n\\\n#ifdef EXTRUDED_GEOMETRY\\n\\\nin vec3 extrudeDirection;\\n\\\n\\n\\\nuniform float u_globeMinimumAltitude;\\n\\\n#endif // EXTRUDED_GEOMETRY\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\nout vec4 v_color;\\n\\\n#endif // PER_INSTANCE_COLOR\\n\\\n\\n\\\n#ifdef TEXTURE_COORDINATES\\n\\\n#ifdef SPHERICAL\\n\\\nout vec4 v_sphericalExtents;\\n\\\n#else // SPHERICAL\\n\\\nout vec2 v_inversePlaneExtents;\\n\\\nout vec4 v_westPlane;\\n\\\nout vec4 v_southPlane;\\n\\\n#endif // SPHERICAL\\n\\\nout vec3 v_uvMinAndSphericalLongitudeRotation;\\n\\\nout vec3 v_uMaxAndInverseDistance;\\n\\\nout vec3 v_vMaxAndInverseDistance;\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 position = czm_computePosition();\\n\\\n\\n\\\n#ifdef EXTRUDED_GEOMETRY\\n\\\n    float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz));\\n\\\n    delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0;\\n\\\n\\n\\\n    //extrudeDirection is zero for the top layer\\n\\\n    position = position + vec4(extrudeDirection * delta, 0.0);\\n\\\n#endif\\n\\\n\\n\\\n#ifdef TEXTURE_COORDINATES\\n\\\n#ifdef SPHERICAL\\n\\\n    v_sphericalExtents = czm_batchTable_sphericalExtents(batchId);\\n\\\n    v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId);\\n\\\n#else // SPHERICAL\\n\\\n#ifdef COLUMBUS_VIEW_2D\\n\\\n    vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId);\\n\\\n    vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId);\\n\\\n\\n\\\n    // If the primitive is split across the IDL (planes2D_high.x > planes2D_high.w):\\n\\\n    // - If this vertex is on the east side of the IDL (position3DLow.y > 0.0, comparison with position3DHigh may produce artifacts)\\n\\\n    // - existing \\\"east\\\" is on the wrong side of the world, far away (planes2D_high/low.w)\\n\\\n    // - so set \\\"east\\\" as beyond the eastmost extent of the projection (idlSplitNewPlaneHiLow)\\n\\\n    vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w));\\n\\\n    bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0;\\n\\\n    planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w);\\n\\\n    planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w);\\n\\\n\\n\\\n    // - else, if this vertex is on the west side of the IDL (position3DLow.y < 0.0)\\n\\\n    // - existing \\\"west\\\" is on the wrong side of the world, far away (planes2D_high/low.x)\\n\\\n    // - so set \\\"west\\\" as beyond the westmost extent of the projection (idlSplitNewPlaneHiLow)\\n\\\n    idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0;\\n\\\n    idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x));\\n\\\n    planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x);\\n\\\n    planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x);\\n\\\n\\n\\\n    vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz;\\n\\\n    vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz;\\n\\\n    vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz;\\n\\\n#else // COLUMBUS_VIEW_2D\\n\\\n    // 3D case has smaller \\\"plane extents,\\\" so planes encoded as a 64 bit position and 2 vec3s for distances/direction\\n\\\n    vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz;\\n\\\n    vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner;\\n\\\n    vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner;\\n\\\n#endif // COLUMBUS_VIEW_2D\\n\\\n\\n\\\n    vec3 eastWard = southEastCorner - southWestCorner;\\n\\\n    float eastExtent = length(eastWard);\\n\\\n    eastWard /= eastExtent;\\n\\\n\\n\\\n    vec3 northWard = northWestCorner - southWestCorner;\\n\\\n    float northExtent = length(northWard);\\n\\\n    northWard /= northExtent;\\n\\\n\\n\\\n    v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner));\\n\\\n    v_southPlane = vec4(northWard, -dot(northWard, southWestCorner));\\n\\\n    v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent);\\n\\\n#endif // SPHERICAL\\n\\\n    vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId);\\n\\\n    vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId);\\n\\\n\\n\\\n    v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z);\\n\\\n    v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w);\\n\\\n    v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy;\\n\\\n#endif // TEXTURE_COORDINATES\\n\\\n\\n\\\n#ifdef PER_INSTANCE_COLOR\\n\\\n    v_color = czm_batchTable_color(batchId);\\n\\\n#endif\\n\\\n\\n\\\n    gl_Position = czm_depthClamp(czm_modelViewProjectionRelativeToEye * position);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"#ifdef VECTOR_TILE\\n\\\nuniform vec4 u_highlightColor;\\n\\\n#endif\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n#ifdef VECTOR_TILE\\n\\\n    out_FragColor = czm_gammaCorrect(u_highlightColor);\\n\\\n#else\\n\\\n    out_FragColor = vec4(1.0);\\n\\\n#endif\\n\\\n    czm_writeDepthClamp();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"float interpolateByDistance(vec4 nearFarScalar, float distance)\\n\\\n{\\n\\\n    float startDistance = nearFarScalar.x;\\n\\\n    float startValue = nearFarScalar.y;\\n\\\n    float endDistance = nearFarScalar.z;\\n\\\n    float endValue = nearFarScalar.w;\\n\\\n    float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);\\n\\\n    return mix(startValue, endValue, t);\\n\\\n}\\n\\\n\\n\\\nvoid computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity, out float underTranslucentGlobe)\\n\\\n{\\n\\\n    float ellipsoidRadiiDifference = czm_ellipsoidRadii.x - czm_ellipsoidRadii.z;\\n\\\n\\n\\\n    // Adjustment to the atmosphere radius applied based on the camera height.\\n\\\n    float distanceAdjustMin = czm_ellipsoidRadii.x / 4.0;\\n\\\n    float distanceAdjustMax = czm_ellipsoidRadii.x;\\n\\\n    float distanceAdjustModifier = ellipsoidRadiiDifference / 2.0;\\n\\\n    float distanceAdjust = distanceAdjustModifier * clamp((czm_eyeHeight - distanceAdjustMin) / (distanceAdjustMax - distanceAdjustMin), 0.0, 1.0);\\n\\\n\\n\\\n    // Since atmosphere scattering assumes the atmosphere is a spherical shell, we compute an inner radius of the atmosphere best fit\\n\\\n    // for the position on the ellipsoid.\\n\\\n    float radiusAdjust = (ellipsoidRadiiDifference / 4.0) + distanceAdjust;\\n\\\n    float atmosphereInnerRadius = (length(czm_viewerPositionWC) - czm_eyeHeight) - radiusAdjust;\\n\\\n\\n\\\n    // Setup the primary ray: from the camera position to the vertex position.\\n\\\n    vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;\\n\\\n    vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);\\n\\\n    czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);\\n\\\n\\n\\\n    underTranslucentGlobe = 0.0;\\n\\\n\\n\\\n    // Brighten the sky atmosphere under the Earth's atmosphere when translucency is enabled.\\n\\\n    #if defined(GLOBE_TRANSLUCENT)\\n\\\n\\n\\\n        // Check for intersection with the inner radius of the atmopshere.\\n\\\n        czm_raySegment primaryRayEarthIntersect = czm_raySphereIntersectionInterval(primaryRay, vec3(0.0), atmosphereInnerRadius + radiusAdjust);\\n\\\n        if (primaryRayEarthIntersect.start > 0.0 && primaryRayEarthIntersect.stop > 0.0) {\\n\\\n\\n\\\n            // Compute position on globe.\\n\\\n            vec3 direction = normalize(positionWC);\\n\\\n            czm_ray ellipsoidRay = czm_ray(positionWC, -direction);\\n\\\n            czm_raySegment ellipsoidIntersection = czm_rayEllipsoidIntersectionInterval(ellipsoidRay, vec3(0.0), czm_ellipsoidInverseRadii);\\n\\\n            vec3 onEarth = positionWC - (direction * ellipsoidIntersection.start);\\n\\\n\\n\\\n            // Control the color using the camera angle.\\n\\\n            float angle = dot(normalize(czm_viewerPositionWC), normalize(onEarth));\\n\\\n\\n\\\n            // Control the opacity using the distance from Earth.\\n\\\n            opacity = interpolateByDistance(vec4(0.0, 1.0, czm_ellipsoidRadii.x, 0.0), length(czm_viewerPositionWC - onEarth));\\n\\\n            vec3 horizonColor = vec3(0.1, 0.2, 0.3);\\n\\\n            vec3 nearColor = vec3(0.0);\\n\\\n\\n\\\n            rayleighColor = mix(nearColor, horizonColor, exp(-angle) * opacity);\\n\\\n\\n\\\n            // Set the traslucent flag to avoid alpha adjustment in computeFinalColor funciton.\\n\\\n            underTranslucentGlobe = 1.0;\\n\\\n            return;\\n\\\n        }\\n\\\n    #endif\\n\\\n\\n\\\n    computeScattering(\\n\\\n        primaryRay,\\n\\\n        length(cameraToPositionWC),\\n\\\n        lightDirection,\\n\\\n        atmosphereInnerRadius,\\n\\\n        rayleighColor,\\n\\\n        mieColor,\\n\\\n        opacity\\n\\\n    );\\n\\\n\\n\\\n    // Alter the opacity based on how close the viewer is to the ground.\\n\\\n    // (0.0 = At edge of atmosphere, 1.0 = On ground)\\n\\\n    float cameraHeight = czm_eyeHeight + atmosphereInnerRadius;\\n\\\n    float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;\\n\\\n    opacity = clamp((atmosphereOuterRadius - cameraHeight) / (atmosphereOuterRadius - atmosphereInnerRadius), 0.0, 1.0);\\n\\\n\\n\\\n    // Alter alpha based on time of day (0.0 = night , 1.0 = day)\\n\\\n    float nightAlpha = (u_radiiAndDynamicAtmosphereColor.z != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0;\\n\\\n    opacity *= pow(nightAlpha, 0.5);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 v_outerPositionWC;\\n\\\n\\n\\\nuniform vec3 u_hsbShift;\\n\\\n\\n\\\n#ifndef PER_FRAGMENT_ATMOSPHERE\\n\\\nin vec3 v_mieColor;\\n\\\nin vec3 v_rayleighColor;\\n\\\nin float v_opacity;\\n\\\nin float v_translucent;\\n\\\n#endif\\n\\\n\\n\\\nvoid main (void)\\n\\\n{\\n\\\n    float lightEnum = u_radiiAndDynamicAtmosphereColor.z;\\n\\\n    vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(v_outerPositionWC, lightEnum);\\n\\\n\\n\\\n    vec3 mieColor;\\n\\\n    vec3 rayleighColor;\\n\\\n    float opacity;\\n\\\n    float translucent;\\n\\\n\\n\\\n    #ifdef PER_FRAGMENT_ATMOSPHERE\\n\\\n        computeAtmosphereScattering(\\n\\\n            v_outerPositionWC,\\n\\\n            lightDirection,\\n\\\n            rayleighColor,\\n\\\n            mieColor,\\n\\\n            opacity,\\n\\\n            translucent\\n\\\n        );\\n\\\n    #else\\n\\\n        mieColor = v_mieColor;\\n\\\n        rayleighColor = v_rayleighColor;\\n\\\n        opacity = v_opacity;\\n\\\n        translucent = v_translucent;\\n\\\n    #endif\\n\\\n\\n\\\n    vec4 color = computeAtmosphereColor(v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity);\\n\\\n\\n\\\n    #ifndef HDR\\n\\\n        color.rgb = czm_pbrNeutralTonemapping(color.rgb);\\n\\\n        color.rgb = czm_inverseGamma(color.rgb);\\n\\\n    #endif\\n\\\n\\n\\\n    #ifdef COLOR_CORRECT\\n\\\n        const bool ignoreBlackPixels = true;\\n\\\n        color.rgb = czm_applyHSBShift(color.rgb, u_hsbShift, ignoreBlackPixels);\\n\\\n    #endif\\n\\\n\\n\\\n    // For the parts of the sky atmosphere that are not behind a translucent globe,\\n\\\n    // we mix in the default opacity so that the sky atmosphere still appears at distance.\\n\\\n    // This is needed because the opacity in the sky atmosphere is initially adjusted based\\n\\\n    // on the camera height.\\n\\\n    if (translucent == 0.0) {\\n\\\n        color.a = mix(color.b, 1.0, color.a) * smoothstep(0.0, 1.0, czm_morphTime);\\n\\\n    }\\n\\\n\\n\\\n    out_FragColor = color;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 position;\\n\\\n\\n\\\nout vec3 v_outerPositionWC;\\n\\\n\\n\\\n#ifndef PER_FRAGMENT_ATMOSPHERE\\n\\\nout vec3 v_mieColor;\\n\\\nout vec3 v_rayleighColor;\\n\\\nout float v_opacity;\\n\\\nout float v_translucent;\\n\\\n#endif\\n\\\n\\n\\\nvoid main(void)\\n\\\n{\\n\\\n    vec4 positionWC = czm_model * position;\\n\\\n    float lightEnum = u_radiiAndDynamicAtmosphereColor.z;\\n\\\n    vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC.xyz, lightEnum);\\n\\\n\\n\\\n    #ifndef PER_FRAGMENT_ATMOSPHERE\\n\\\n        computeAtmosphereScattering(\\n\\\n            positionWC.xyz,\\n\\\n            lightDirection,\\n\\\n            v_rayleighColor,\\n\\\n            v_mieColor,\\n\\\n            v_opacity,\\n\\\n            v_translucent\\n\\\n        );\\n\\\n    #endif\\n\\\n\\n\\\n    v_outerPositionWC = positionWC.xyz;\\n\\\n    vec4 positionEC = czm_modelView * position;\\n\\\n    gl_Position = czm_projection * positionEC;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform samplerCube u_cubeMap;\\n\\\n\\n\\\nin vec3 v_texCoord;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 color = czm_textureCube(u_cubeMap, normalize(v_texCoord));\\n\\\n    out_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position;\\n\\\nout vec3 v_texCoord;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec3 p = czm_viewRotation * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));\\n\\\n    gl_Position = czm_projection * vec4(p, 1.0);\\n\\\n    v_texCoord = position.xyz;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform sampler2D u_texture;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    vec4 color = texture(u_texture, v_textureCoordinates);\\n\\\n    out_FragColor = czm_gammaCorrect(color);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform float u_radiusTS;\\n\\\n\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvec2 rotate(vec2 p, vec2 direction)\\n\\\n{\\n\\\n    return vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x);\\n\\\n}\\n\\\n\\n\\\nvec4 addBurst(vec2 position, vec2 direction, float lengthScalar)\\n\\\n{\\n\\\n    vec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75);\\n\\\n    float radius = length(rotatedPosition) * lengthScalar;\\n\\\n    float burst = 1.0 - smoothstep(0.0, 0.55, radius);\\n\\\n    return vec4(burst);\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float lengthScalar = 2.0 / sqrt(2.0);\\n\\\n    vec2 position = v_textureCoordinates - vec2(0.5);\\n\\\n    float radius = length(position) * lengthScalar;\\n\\\n    float surface = step(radius, u_radiusTS);\\n\\\n    vec4 color = vec4(vec2(1.0), surface + 0.2, surface);\\n\\\n\\n\\\n    float glow = 1.0 - smoothstep(0.0, 0.55, radius);\\n\\\n    color.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75;\\n\\\n\\n\\\n    vec4 burst = vec4(0.0);\\n\\\n\\n\\\n    // The following loop has been manually unrolled for speed, to\\n\\\n    // avoid sin() and cos().\\n\\\n    //\\n\\\n    //for (float i = 0.4; i < 3.2; i += 1.047) {\\n\\\n    //    vec2 direction = vec2(sin(i), cos(i));\\n\\\n    //    burst += 0.4 * addBurst(position, direction, lengthScalar);\\n\\\n    //\\n\\\n    //    direction = vec2(sin(i - 0.08), cos(i - 0.08));\\n\\\n    //    burst += 0.3 * addBurst(position, direction, lengthScalar);\\n\\\n    //}\\n\\\n\\n\\\n    burst += 0.4 * addBurst(position, vec2(0.38942,  0.92106), lengthScalar);  // angle == 0.4\\n\\\n    burst += 0.4 * addBurst(position, vec2(0.99235,  0.12348), lengthScalar);  // angle == 0.4 + 1.047\\n\\\n    burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar);  // angle == 0.4 + 1.047 * 2.0\\n\\\n\\n\\\n    burst += 0.3 * addBurst(position, vec2(0.31457,  0.94924), lengthScalar);  // angle == 0.4 - 0.08\\n\\\n    burst += 0.3 * addBurst(position, vec2(0.97931,  0.20239), lengthScalar);  // angle == 0.4 + 1.047 - 0.08\\n\\\n    burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar);  // angle == 0.4 + 1.047 * 2.0 - 0.08\\n\\\n\\n\\\n    // End of manual loop unrolling.\\n\\\n\\n\\\n    color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15;\\n\\\n\\n\\\n    out_FragColor = clamp(color, vec4(0.0), vec4(1.0));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec2 direction;\\n\\\n\\n\\\nuniform float u_size;\\n\\\n\\n\\\nout vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main() \\n\\\n{\\n\\\n    vec4 position;\\n\\\n    if (czm_morphTime == 1.0)\\n\\\n    {\\n\\\n        position = vec4(czm_sunPositionWC, 1.0);\\n\\\n    }\\n\\\n    else\\n\\\n    {\\n\\\n        position = vec4(czm_sunPositionColumbusView.zxy, 1.0);\\n\\\n    }\\n\\\n    \\n\\\n    vec4 positionEC = czm_view * position;\\n\\\n    vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\\n\\\n    \\n\\\n    vec2 halfSize = vec2(u_size * 0.5);\\n\\\n    halfSize *= ((direction * 2.0) - 1.0);\\n\\\n    \\n\\\n    gl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0);\\n\\\n    \\n\\\n    v_textureCoordinates = direction;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 v_startPlaneEC;\\n\\\nin vec4 v_endPlaneEC;\\n\\\nin vec4 v_rightPlaneEC;\\n\\\nin float v_halfWidth;\\n\\\nin vec3 v_volumeUpEC;\\n\\\n\\n\\\nuniform vec4 u_highlightColor;\\n\\\nvoid main()\\n\\\n{\\n\\\n    float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));\\n\\\n\\n\\\n    // Discard for sky\\n\\\n    if (logDepthOrDepth == 0.0) {\\n\\\n#ifdef DEBUG_SHOW_VOLUME\\n\\\n        out_FragColor = vec4(0.0, 0.0, 1.0, 0.5);\\n\\\n        return;\\n\\\n#else // DEBUG_SHOW_VOLUME\\n\\\n        discard;\\n\\\n#endif // DEBUG_SHOW_VOLUME\\n\\\n    }\\n\\\n\\n\\\n    vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);\\n\\\n    eyeCoordinate /= eyeCoordinate.w;\\n\\\n\\n\\\n    float halfMaxWidth = v_halfWidth * czm_metersPerPixel(eyeCoordinate);\\n\\\n\\n\\\n    // Expand halfMaxWidth if direction to camera is almost perpendicular with the volume's up direction\\n\\\n    halfMaxWidth += halfMaxWidth * (1.0 - dot(-normalize(eyeCoordinate.xyz), v_volumeUpEC));\\n\\\n\\n\\\n    // Check distance of the eye coordinate against the right-facing plane\\n\\\n    float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);\\n\\\n\\n\\\n    // Check eye coordinate against the mitering planes\\n\\\n    float distanceFromStart = czm_planeDistance(v_startPlaneEC, eyeCoordinate.xyz);\\n\\\n    float distanceFromEnd = czm_planeDistance(v_endPlaneEC, eyeCoordinate.xyz);\\n\\\n\\n\\\n    if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {\\n\\\n#ifdef DEBUG_SHOW_VOLUME\\n\\\n        out_FragColor = vec4(logDepthOrDepth, 0.0, 0.0, 0.5);\\n\\\n        return;\\n\\\n#else // DEBUG_SHOW_VOLUME\\n\\\n        discard;\\n\\\n#endif // DEBUG_SHOW_VOLUME\\n\\\n    }\\n\\\n    out_FragColor = u_highlightColor;\\n\\\n\\n\\\n    czm_writeDepthClamp();\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 startEllipsoidNormal;\\n\\\nin vec3 endEllipsoidNormal;\\n\\\nin vec4 startPositionAndHeight;\\n\\\nin vec4 endPositionAndHeight;\\n\\\nin vec4 startFaceNormalAndVertexCorner;\\n\\\nin vec4 endFaceNormalAndHalfWidth;\\n\\\nin float a_batchId;\\n\\\n\\n\\\nuniform mat4 u_modifiedModelView;\\n\\\nuniform vec2 u_minimumMaximumVectorHeights;\\n\\\n\\n\\\nout vec4 v_startPlaneEC;\\n\\\nout vec4 v_endPlaneEC;\\n\\\nout vec4 v_rightPlaneEC;\\n\\\nout float v_halfWidth;\\n\\\nout vec3 v_volumeUpEC;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    // vertex corner IDs\\n\\\n    //          3-----------7\\n\\\n    //         /|   left   /|\\n\\\n    //        / | 1       / |\\n\\\n    //       2-----------6  5  end\\n\\\n    //       | /         | /\\n\\\n    // start |/  right   |/\\n\\\n    //       0-----------4\\n\\\n    //\\n\\\n    float isEnd = floor(startFaceNormalAndVertexCorner.w * 0.251); // 0 for front, 1 for end\\n\\\n    float isTop = floor(startFaceNormalAndVertexCorner.w * mix(0.51, 0.19, isEnd)); // 0 for bottom, 1 for top\\n\\\n\\n\\\n    vec3 forward = endPositionAndHeight.xyz - startPositionAndHeight.xyz;\\n\\\n    vec3 right = normalize(cross(forward, startEllipsoidNormal));\\n\\\n\\n\\\n    vec4 position = vec4(startPositionAndHeight.xyz, 1.0);\\n\\\n    position.xyz += forward * isEnd;\\n\\\n\\n\\\n    v_volumeUpEC = czm_normal * normalize(cross(right, forward));\\n\\\n\\n\\\n    // Push for volume height\\n\\\n    float offset;\\n\\\n    vec3 ellipsoidNormal = mix(startEllipsoidNormal, endEllipsoidNormal, isEnd);\\n\\\n\\n\\\n    // offset height to create volume\\n\\\n    offset = mix(startPositionAndHeight.w, endPositionAndHeight.w, isEnd);\\n\\\n    offset = mix(u_minimumMaximumVectorHeights.y, u_minimumMaximumVectorHeights.x, isTop) - offset;\\n\\\n    position.xyz += offset * ellipsoidNormal;\\n\\\n\\n\\\n    // move from RTC to EC\\n\\\n    position = u_modifiedModelView * position;\\n\\\n    right = czm_normal * right;\\n\\\n\\n\\\n    // Push for width in a direction that is in the start or end plane and in a plane with right\\n\\\n    // N = normalEC (\\\"right-facing\\\" direction for push)\\n\\\n    // R = right\\n\\\n    // p = angle between N and R\\n\\\n    // w = distance to push along R if R == N\\n\\\n    // d = distance to push along N\\n\\\n    //\\n\\\n    //   N   R\\n\\\n    //  { \\ p| }      * cos(p) = dot(N, R) = w / d\\n\\\n    //  d\\ \\ |  |w    * d = w / dot(N, R)\\n\\\n    //    { \\| }\\n\\\n    //       o---------- polyline segment ---->\\n\\\n    //\\n\\\n    vec3 scratchNormal = mix(-startFaceNormalAndVertexCorner.xyz, endFaceNormalAndHalfWidth.xyz, isEnd);\\n\\\n    scratchNormal = cross(scratchNormal, mix(startEllipsoidNormal, endEllipsoidNormal, isEnd));\\n\\\n    vec3 miterPushNormal = czm_normal * normalize(scratchNormal);\\n\\\n\\n\\\n    offset = 2.0 * endFaceNormalAndHalfWidth.w * max(0.0, czm_metersPerPixel(position)); // offset = widthEC\\n\\\n    offset = offset / dot(miterPushNormal, right);\\n\\\n    position.xyz += miterPushNormal * (offset * sign(0.5 - mod(startFaceNormalAndVertexCorner.w, 2.0)));\\n\\\n\\n\\\n    gl_Position = czm_depthClamp(czm_projection * position);\\n\\\n\\n\\\n    position = u_modifiedModelView * vec4(startPositionAndHeight.xyz, 1.0);\\n\\\n    vec3 startNormalEC = czm_normal * startFaceNormalAndVertexCorner.xyz;\\n\\\n    v_startPlaneEC = vec4(startNormalEC, -dot(startNormalEC, position.xyz));\\n\\\n    v_rightPlaneEC = vec4(right, -dot(right, position.xyz));\\n\\\n\\n\\\n    position = u_modifiedModelView * vec4(endPositionAndHeight.xyz, 1.0);\\n\\\n    vec3 endNormalEC = czm_normal * endFaceNormalAndHalfWidth.xyz;\\n\\\n    v_endPlaneEC = vec4(endNormalEC, -dot(endNormalEC, position.xyz));\\n\\\n    v_halfWidth = endFaceNormalAndHalfWidth.w;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 currentPosition;\\n\\\nin vec4 previousPosition;\\n\\\nin vec4 nextPosition;\\n\\\nin vec2 expandAndWidth;\\n\\\nin float a_batchId;\\n\\\n\\n\\\nuniform mat4 u_modifiedModelView;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    float expandDir = expandAndWidth.x;\\n\\\n    float width = abs(expandAndWidth.y) + 0.5;\\n\\\n    bool usePrev = expandAndWidth.y < 0.0;\\n\\\n\\n\\\n    vec4 p = u_modifiedModelView * currentPosition;\\n\\\n    vec4 prev = u_modifiedModelView * previousPosition;\\n\\\n    vec4 next = u_modifiedModelView * nextPosition;\\n\\\n\\n\\\n    float angle;\\n\\\n    vec4 positionWC = getPolylineWindowCoordinatesEC(p, prev, next, expandDir, width, usePrev, angle);\\n\\\n    gl_Position = czm_viewportOrthographic * positionWC;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec3 position;\\n\\\nin float a_batchId;\\n\\\n\\n\\\nuniform mat4 u_modifiedModelViewProjection;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0));\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"\\n\\\nin vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    czm_materialInput materialInput;\\n\\\n    \\n\\\n    materialInput.s = v_textureCoordinates.s;\\n\\\n    materialInput.st = v_textureCoordinates;\\n\\\n    materialInput.str = vec3(v_textureCoordinates, 0.0);\\n\\\n    materialInput.normalEC = vec3(0.0, 0.0, -1.0);\\n\\\n    \\n\\\n    czm_material material = czm_getMaterial(materialInput);\\n\\\n\\n\\\n    out_FragColor = vec4(material.diffuse + material.emission, material.alpha);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec4 position;\\n\\\nin vec2 textureCoordinates;\\n\\\n\\n\\\nout vec2 v_textureCoordinates;\\n\\\n\\n\\\nvoid main() \\n\\\n{\\n\\\n    gl_Position = position;\\n\\\n    v_textureCoordinates = textureCoordinates;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See IntersectionUtils.glsl for the definitions of Ray, RayShapeIntersection,\\n\\\n// NO_HIT, Intersections\\n\\\n\\n\\\n/* Box defines (set in Scene/VoxelBoxShape.js)\\n\\\n#define BOX_INTERSECTION_INDEX ### // always 0\\n\\\n*/\\n\\\n\\n\\\nuniform sampler2D u_renderBoundPlanesTexture;\\n\\\n\\n\\\nRayShapeIntersection intersectBoundPlanes(in Ray ray) {\\n\\\n    vec4 lastEntry = vec4(ray.dir, -INF_HIT);\\n\\\n    vec4 firstExit = vec4(-ray.dir, +INF_HIT);\\n\\\n    for (int i = 0; i < 6; i++) {\\n\\\n        vec4 boundPlane = getBoundPlane(u_renderBoundPlanesTexture, i);\\n\\\n        vec4 intersection = intersectPlane(ray, boundPlane);\\n\\\n        if (dot(ray.dir, boundPlane.xyz) < 0.0) {\\n\\\n            lastEntry = intersection.w > lastEntry.w ? intersection : lastEntry;\\n\\\n        } else {\\n\\\n            firstExit = intersection.w < firstExit.w ? intersection: firstExit;\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    if (lastEntry.w < firstExit.w) {\\n\\\n        return RayShapeIntersection(lastEntry, firstExit);\\n\\\n    } else {\\n\\\n        return RayShapeIntersection(vec4(-ray.dir, NO_HIT), vec4(ray.dir, NO_HIT));\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nvoid intersectShape(in Ray rayUV, in  Ray rayEC, inout Intersections ix)\\n\\\n{\\n\\\n    RayShapeIntersection intersection = intersectBoundPlanes(rayEC);\\n\\\n    setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, Intersections,\\n\\\n// RayShapeIntersection, setSurfaceIntersection, setShapeIntersection,\\n\\\n// intersectIntersections\\n\\\n// See IntersectLongitude.glsl for the definitions of intersectHalfPlane,\\n\\\n// intersectFlippedWedge, intersectRegularWedge\\n\\\n\\n\\\n/* Cylinder defines (set in Scene/VoxelCylinderShape.js)\\n\\\n#define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN\\n\\\n#define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT\\n\\\n#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE\\n\\\n#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF\\n\\\n#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF\\n\\\n#define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\\n\\\n\\n\\\n#define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX\\n\\\n#define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN\\n\\\n#define CYLINDER_INTERSECTION_INDEX_ANGLE\\n\\\n*/\\n\\\n\\n\\\n// Cylinder uniforms\\n\\\nuniform vec2 u_cylinderRenderRadiusMinMax;\\n\\\n#if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE)\\n\\\n    uniform vec2 u_cylinderRenderAngleMinMax;\\n\\\n#endif\\n\\\n\\n\\\nuniform sampler2D u_renderBoundPlanesTexture;\\n\\\n\\n\\\nRayShapeIntersection intersectBoundPlanes(in Ray ray) {\\n\\\n    vec4 lastEntry = vec4(ray.dir, -INF_HIT);\\n\\\n    vec4 firstExit = vec4(-ray.dir, +INF_HIT);\\n\\\n    for (int i = 0; i < 2; i++) {\\n\\\n        vec4 boundPlane = getBoundPlane(u_renderBoundPlanesTexture, i);\\n\\\n        vec4 intersection = intersectPlane(ray, boundPlane);\\n\\\n        if (dot(ray.dir, boundPlane.xyz) < 0.0) {\\n\\\n            lastEntry = intersection.w > lastEntry.w ? intersection : lastEntry;\\n\\\n        } else {\\n\\\n            firstExit = intersection.w < firstExit.w ? intersection: firstExit;\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    if (lastEntry.w < firstExit.w) {\\n\\\n        return RayShapeIntersection(lastEntry, firstExit);\\n\\\n    } else {\\n\\\n        return RayShapeIntersection(vec4(-ray.dir, NO_HIT), vec4(ray.dir, NO_HIT));\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Find the intersection of a ray with a right cylindrical surface of a given radius\\n\\\n * about the z-axis.\\n\\\n */\\n\\\nRayShapeIntersection intersectCylinder(in Ray ray, in float radius, in bool convex)\\n\\\n{\\n\\\n    vec2 position = ray.pos.xy;\\n\\\n    vec2 direction = ray.dir.xy;\\n\\\n\\n\\\n    float a = dot(direction, direction);\\n\\\n    float b = dot(position, direction);\\n\\\n    float c = dot(position, position) - radius * radius;\\n\\\n    float determinant = b * b - a * c;\\n\\\n\\n\\\n    if (determinant < 0.0) {\\n\\\n        vec4 miss = vec4(normalize(ray.dir), NO_HIT);\\n\\\n        return RayShapeIntersection(miss, miss);\\n\\\n    }\\n\\\n\\n\\\n    determinant = sqrt(determinant);\\n\\\n    float t1 = (-b - determinant) / a;\\n\\\n    float t2 = (-b + determinant) / a;\\n\\\n    float signFlip = convex ? 1.0 : -1.0;\\n\\\n    vec3 normal1 = vec3((position + t1 * direction) * signFlip, 0.0);\\n\\\n    vec3 normal2 = vec3((position + t2 * direction) * signFlip, 0.0);\\n\\\n    // Return normals in eye coordinates\\n\\\n    vec4 intersect1 = vec4(normalize(czm_normal * normal1), t1);\\n\\\n    vec4 intersect2 = vec4(normalize(czm_normal * normal2), t2);\\n\\\n\\n\\\n    return RayShapeIntersection(intersect1, intersect2);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Find the intersection of a ray with a right cylindrical solid of given\\n\\\n * radius and height bounds. NOTE: The shape is assumed to be convex.\\n\\\n */\\n\\\nRayShapeIntersection intersectBoundedCylinder(in Ray ray, in Ray rayEC, in float radius)\\n\\\n{\\n\\\n    RayShapeIntersection cylinderIntersection = intersectCylinder(ray, radius, true);\\n\\\n    RayShapeIntersection heightBoundsIntersection = intersectBoundPlanes(rayEC);\\n\\\n    return intersectIntersections(ray, cylinderIntersection, heightBoundsIntersection);\\n\\\n}\\n\\\n\\n\\\nvoid intersectShape(in Ray ray, in Ray rayEC, inout Intersections ix)\\n\\\n{\\n\\\n    RayShapeIntersection outerIntersect = intersectBoundedCylinder(ray, rayEC, u_cylinderRenderRadiusMinMax.y);\\n\\\n\\n\\\n    setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MAX, outerIntersect);\\n\\\n\\n\\\n    if (outerIntersect.entry.w == NO_HIT) {\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)\\n\\\n        // When the cylinder is perfectly thin it's necessary to sandwich the\\n\\\n        // inner cylinder intersection inside the outer cylinder intersection.\\n\\\n\\n\\\n        // Without this special case,\\n\\\n        // [outerMin, outerMax, innerMin, innerMax] will bubble sort to\\n\\\n        // [outerMin, innerMin, outerMax, innerMax] which will cause the back\\n\\\n        // side of the cylinder to be invisible because it will think the ray\\n\\\n        // is still inside the inner (negative) cylinder after exiting the\\n\\\n        // outer (positive) cylinder.\\n\\\n\\n\\\n        // With this special case,\\n\\\n        // [outerMin, innerMin, innerMax, outerMax] will bubble sort to\\n\\\n        // [outerMin, innerMin, innerMax, outerMax] which will work correctly.\\n\\\n\\n\\\n        // Note: If initializeIntersections() changes its sorting function\\n\\\n        // from bubble sort to something else, this code may need to change.\\n\\\n        RayShapeIntersection innerIntersect = intersectCylinder(ray, 1.0, false);\\n\\\n        setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true);  // positive, enter\\n\\\n        setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter\\n\\\n        setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit\\n\\\n        setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false);  // positive, exit\\n\\\n    #elif defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN)\\n\\\n        RayShapeIntersection innerIntersect = intersectCylinder(ray, u_cylinderRenderRadiusMinMax.x, false);\\n\\\n        setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MIN, innerIntersect);\\n\\\n    #endif\\n\\\n\\n\\\n    #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF)\\n\\\n        RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax);\\n\\\n        setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);\\n\\\n    #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF)\\n\\\n        RayShapeIntersection wedgeIntersects[2];\\n\\\n        intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax, wedgeIntersects);\\n\\\n        setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);\\n\\\n        setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);\\n\\\n    #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)\\n\\\n        RayShapeIntersection wedgeIntersects[2];\\n\\\n        intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x, wedgeIntersects);\\n\\\n        setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]);\\n\\\n        setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]);\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See IntersectionUtils.glsl for the definitions of Ray, Intersections,\\n\\\n// setIntersectionPair, INF_HIT, NO_HIT\\n\\\n\\n\\\n/* intersectDepth defines (set in Scene/VoxelRenderResources.js)\\n\\\n#define DEPTH_INTERSECTION_INDEX ###\\n\\\n*/\\n\\\n\\n\\\nvoid intersectDepth(in vec2 screenCoord, in Ray ray, inout Intersections ix) {\\n\\\n    float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord));\\n\\\n    float entry;\\n\\\n    float exit;\\n\\\n    if (logDepthOrDepth != 0.0) {\\n\\\n        // Calculate how far the ray must travel before it hits the depth buffer.\\n\\\n        vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth);\\n\\\n        eyeCoordinateDepth /= eyeCoordinateDepth.w;\\n\\\n        entry = dot(eyeCoordinateDepth.xyz - ray.pos, ray.dir);\\n\\\n        exit = +INF_HIT;\\n\\\n    } else {\\n\\\n        // There's no depth at this location.\\n\\\n        entry = NO_HIT;\\n\\\n        exit = NO_HIT;\\n\\\n    }\\n\\\n    ix.distanceToDepthBuffer = entry;\\n\\\n#if defined(DEPTH_TEST)\\n\\\n    setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(entry, exit));\\n\\\n#endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT, Intersections,\\n\\\n// RayShapeIntersection, setSurfaceIntersection, setShapeIntersection\\n\\\n// See IntersectLongitude.glsl for the definitions of intersectHalfPlane,\\n\\\n// intersectFlippedWedge, intersectRegularWedge\\n\\\n\\n\\\n/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF\\n\\\n#define ELLIPSOID_INTERSECTION_INDEX_LONGITUDE\\n\\\n#define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX\\n\\\n#define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN\\n\\\n#define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX\\n\\\n#define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN\\n\\\n*/\\n\\\n\\n\\\n#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE)\\n\\\n    uniform vec2 u_ellipsoidRenderLongitudeMinMax;\\n\\\n#endif\\n\\\nuniform float u_eccentricitySquared;\\n\\\nuniform vec2 u_ellipsoidRenderLatitudeSinMinMax;\\n\\\nuniform vec2 u_clipMinMaxHeight; // Values are negative: clipHeight - maxShapeHeight\\n\\\n\\n\\\nRayShapeIntersection intersectZPlane(in Ray ray, in float z) {\\n\\\n    float t = -ray.pos.z / ray.dir.z;\\n\\\n\\n\\\n    bool startsOutside = sign(ray.pos.z) == sign(z);\\n\\\n    bool entry = (t >= 0.0) != startsOutside;\\n\\\n\\n\\\n    vec4 intersect = vec4(0.0, 0.0, z, t);\\n\\\n    vec4 farSide = vec4(normalize(ray.dir), INF_HIT);\\n\\\n\\n\\\n    if (entry) {\\n\\\n        return RayShapeIntersection(intersect, farSide);\\n\\\n    } else {\\n\\\n        return RayShapeIntersection(-1.0 * farSide, intersect);\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nRayShapeIntersection intersectHeight(in Ray ray, in float height, in bool convex)\\n\\\n{\\n\\\n    // Scale the ray by the ellipsoid axes to make it a unit sphere\\n\\\n    // Note: approximating ellipsoid + height as an ellipsoid\\n\\\n    vec3 radiiCorrection = vec3(1.0) / (u_ellipsoidRadii + height);\\n\\\n    vec3 position = ray.pos * radiiCorrection;\\n\\\n    vec3 direction = ray.dir * radiiCorrection;\\n\\\n\\n\\\n    float a = dot(direction, direction); // ~ 1.0 (or maybe 4.0 if ray is scaled)\\n\\\n    float b = dot(direction, position); // roughly inside [-1.0, 1.0] when zoomed in\\n\\\n    float c = dot(position, position) - 1.0; // ~ 0.0 when zoomed in.\\n\\\n    float determinant = b * b - a * c; // ~ b * b when zoomed in\\n\\\n\\n\\\n    if (determinant < 0.0) {\\n\\\n        vec4 miss = vec4(normalize(direction), NO_HIT);\\n\\\n        return RayShapeIntersection(miss, miss);\\n\\\n    }\\n\\\n\\n\\\n    determinant = sqrt(determinant);\\n\\\n\\n\\\n    // Compute larger root using standard formula\\n\\\n    float signB = b < 0.0 ? -1.0 : 1.0;\\n\\\n    // The other root may suffer from subtractive cancellation in the standard formula.\\n\\\n    // Compute it from the first root instead.\\n\\\n    float t1 = (-b - signB * determinant) / a;\\n\\\n    float t2 = c / (a * t1);\\n\\\n    float tmin = min(t1, t2);\\n\\\n    float tmax = max(t1, t2);\\n\\\n\\n\\\n    float directionScale = convex ? 1.0 : -1.0;\\n\\\n    vec3 d1 = directionScale * (position + tmin * direction);\\n\\\n    vec3 d2 = directionScale * (position + tmax * direction);\\n\\\n\\n\\\n    // Return normals in eye coordinates. Use spherical approximation for the normal.\\n\\\n    vec3 normal1 = normalize(czm_normal * d1);\\n\\\n    vec3 normal2 = normalize(czm_normal * d2);\\n\\\n\\n\\\n    return RayShapeIntersection(vec4(normal1, tmin), vec4(normal2, tmax));\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Given a circular cone around the z-axis, with apex at the origin,\\n\\\n * find the parametric distance(s) along a ray where that ray intersects\\n\\\n * the cone.\\n\\\n * The cone opening angle is described by the squared cosine of\\n\\\n * its half-angle (the angle between the Z-axis and the surface)\\n\\\n */\\n\\\nvec2 intersectDoubleEndedCone(in Ray ray, in float cosSqrHalfAngle)\\n\\\n{\\n\\\n    vec3 o = ray.pos;\\n\\\n    vec3 d = ray.dir;\\n\\\n    float sinSqrHalfAngle = 1.0 - cosSqrHalfAngle;\\n\\\n\\n\\\n    float aSin = d.z * d.z * sinSqrHalfAngle;\\n\\\n    float aCos = -dot(d.xy, d.xy) * cosSqrHalfAngle;\\n\\\n    float a = aSin + aCos;\\n\\\n\\n\\\n    float bSin = d.z * o.z * sinSqrHalfAngle;\\n\\\n    float bCos = -dot(o.xy, d.xy) * cosSqrHalfAngle;\\n\\\n    float b = bSin + bCos;\\n\\\n\\n\\\n    float cSin = o.z * o.z * sinSqrHalfAngle;\\n\\\n    float cCos = -dot(o.xy, o.xy) * cosSqrHalfAngle;\\n\\\n    float c = cSin + cCos;\\n\\\n    // determinant = b * b - a * c. But bSin * bSin = aSin * cSin.\\n\\\n    // Avoid subtractive cancellation by expanding to eliminate these terms\\n\\\n    float determinant = 2.0 * bSin * bCos + bCos * bCos - aSin * cCos - aCos * cSin - aCos * cCos;\\n\\\n\\n\\\n    if (determinant < 0.0) {\\n\\\n        return vec2(NO_HIT);\\n\\\n    } else if (a == 0.0) {\\n\\\n        // Ray is parallel to cone surface\\n\\\n        return (b == 0.0)\\n\\\n            ? vec2(NO_HIT) // Ray is on cone surface\\n\\\n            : vec2(-0.5 * c / b, NO_HIT);\\n\\\n    }\\n\\\n\\n\\\n    determinant = sqrt(determinant);\\n\\\n\\n\\\n    // Compute larger root using standard formula\\n\\\n    float signB = b < 0.0 ? -1.0 : 1.0;\\n\\\n    float t1 = (-b - signB * determinant) / a;\\n\\\n    // The other root may suffer from subtractive cancellation in the standard formula.\\n\\\n    // Compute it from the first root instead.\\n\\\n    float t2 = c / (a * t1);\\n\\\n    float tmin = min(t1, t2);\\n\\\n    float tmax = max(t1, t2);\\n\\\n    return vec2(tmin, tmax);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Given a point on a conical surface, find the surface normal at that point.\\n\\\n */\\n\\\nvec3 getConeNormal(in vec3 p, in bool convex) {\\n\\\n    // Start with radial component pointing toward z-axis\\n\\\n    vec2 radial = -abs(p.z) * normalize(p.xy);\\n\\\n    // Z component points toward opening of cone\\n\\\n    float zSign = (p.z < 0.0) ? -1.0 : 1.0;\\n\\\n    float z = length(p.xy) * zSign;\\n\\\n    // Flip normal if shape is convex\\n\\\n    float flip = (convex) ? -1.0 : 1.0;\\n\\\n    return normalize(vec3(radial, z) * flip);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Compute the shift between the ellipsoid origin and the apex of a cone of latitude\\n\\\n */\\n\\\nfloat getLatitudeConeShift(in float sinLatitude) {\\n\\\n    // Find prime vertical radius of curvature: \\n\\\n    // the distance along the ellipsoid normal to the intersection with the z-axis\\n\\\n    float x2 = u_eccentricitySquared * sinLatitude * sinLatitude;\\n\\\n    float primeVerticalRadius = u_ellipsoidRadii.x * inversesqrt(1.0 - x2);\\n\\\n\\n\\\n    // Compute a shift from the origin to the intersection of the cone with the z-axis\\n\\\n    return primeVerticalRadius * u_eccentricitySquared * sinLatitude;\\n\\\n}\\n\\\n\\n\\\nvoid intersectFlippedCone(in Ray ray, in float cosHalfAngle, out RayShapeIntersection intersections[2]) {\\n\\\n    // Shift the ray to account for the latitude cone not being centered at the Earth center\\n\\\n    ray.pos.z += getLatitudeConeShift(cosHalfAngle);\\n\\\n\\n\\\n    float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle;\\n\\\n    vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle);\\n\\\n\\n\\\n    vec4 miss = vec4(normalize(ray.dir), NO_HIT);\\n\\\n    vec4 farSide = vec4(normalize(ray.dir), INF_HIT);\\n\\\n\\n\\\n    // Initialize output with no intersections\\n\\\n    intersections[0].entry = -1.0 * farSide;\\n\\\n    intersections[0].exit = farSide;\\n\\\n    intersections[1].entry = miss;\\n\\\n    intersections[1].exit = miss;\\n\\\n\\n\\\n    if (intersect.x == NO_HIT) {\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    // Find the points of intersection\\n\\\n    float tmin = intersect.x;\\n\\\n    float tmax = intersect.y;\\n\\\n    vec3 p0 = ray.pos + tmin * ray.dir;\\n\\\n    vec3 p1 = ray.pos + tmax * ray.dir;\\n\\\n\\n\\\n    vec4 intersect0 = vec4(getConeNormal(p0, true), tmin);\\n\\\n    vec4 intersect1 = vec4(getConeNormal(p1, true), tmax);\\n\\\n\\n\\\n    bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle);\\n\\\n    bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle);\\n\\\n\\n\\\n    if (p0InShadowCone && p1InShadowCone) {\\n\\\n        // no valid intersections\\n\\\n    } else if (p0InShadowCone) {\\n\\\n        intersections[0].exit = intersect1;\\n\\\n    } else if (p1InShadowCone) {\\n\\\n        intersections[0].entry = intersect0;\\n\\\n    } else {\\n\\\n        intersections[0].exit = intersect0;\\n\\\n        intersections[1].entry = intersect1;\\n\\\n        intersections[1].exit = farSide;\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nRayShapeIntersection intersectRegularCone(in Ray ray, in float cosHalfAngle, in bool convex) {\\n\\\n    // Shift the ray to account for the latitude cone not being centered at the Earth center\\n\\\n    ray.pos.z += getLatitudeConeShift(cosHalfAngle);\\n\\\n\\n\\\n    float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle;\\n\\\n    vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle);\\n\\\n\\n\\\n    vec4 miss = vec4(normalize(ray.dir), NO_HIT);\\n\\\n    vec4 farSide = vec4(normalize(ray.dir), INF_HIT);\\n\\\n\\n\\\n    if (intersect.x == NO_HIT) {\\n\\\n        return RayShapeIntersection(miss, miss);\\n\\\n    }\\n\\\n\\n\\\n    // Find the points of intersection\\n\\\n    float tmin = intersect.x;\\n\\\n    float tmax = intersect.y;\\n\\\n    vec3 p0 = ray.pos + tmin * ray.dir;\\n\\\n    vec3 p1 = ray.pos + tmax * ray.dir;\\n\\\n\\n\\\n    vec4 intersect0 = vec4(getConeNormal(p0, convex), tmin);\\n\\\n    vec4 intersect1 = vec4(getConeNormal(p1, convex), tmax);\\n\\\n\\n\\\n    bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle);\\n\\\n    bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle);\\n\\\n\\n\\\n    if (p0InShadowCone && p1InShadowCone) {\\n\\\n        return RayShapeIntersection(miss, miss);\\n\\\n    } else if (p0InShadowCone) {\\n\\\n        return RayShapeIntersection(intersect1, farSide);\\n\\\n    } else if (p1InShadowCone) {\\n\\\n        return RayShapeIntersection(-1.0 * farSide, intersect0);\\n\\\n    } else {\\n\\\n        return RayShapeIntersection(intersect0, intersect1);\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nvoid intersectShape(in Ray ray, in Ray rayEC, inout Intersections ix) {    // Outer ellipsoid\\n\\\n    RayShapeIntersection outerIntersect = intersectHeight(ray, u_clipMinMaxHeight.y, true);\\n\\\n    setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX, outerIntersect);\\n\\\n\\n\\\n    // Exit early if the outer ellipsoid was missed.\\n\\\n    if (outerIntersect.entry.w == NO_HIT) {\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    // Inner ellipsoid\\n\\\n    RayShapeIntersection innerIntersect = intersectHeight(ray, u_clipMinMaxHeight.x, false);\\n\\\n\\n\\\n    if (innerIntersect.entry.w == NO_HIT) {\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN, innerIntersect);\\n\\\n    } else {\\n\\\n        // When the ellipsoid is large and thin it's possible for floating point math\\n\\\n        // to cause the ray to intersect the inner ellipsoid before the outer ellipsoid. \\n\\\n        // To prevent this from happening, clamp innerIntersect to outerIntersect and\\n\\\n        // sandwich the inner ellipsoid intersection inside the outer ellipsoid intersection.\\n\\\n\\n\\\n        // Without this special case,\\n\\\n        // [outerMin, outerMax, innerMin, innerMax] will bubble sort to\\n\\\n        // [outerMin, innerMin, outerMax, innerMax] which will cause the back\\n\\\n        // side of the ellipsoid to be invisible because it will think the ray\\n\\\n        // is still inside the inner (negative) ellipsoid after exiting the\\n\\\n        // outer (positive) ellipsoid.\\n\\\n\\n\\\n        // With this special case,\\n\\\n        // [outerMin, innerMin, innerMax, outerMax] will bubble sort to\\n\\\n        // [outerMin, innerMin, innerMax, outerMax] which will work correctly.\\n\\\n\\n\\\n        // Note: If initializeIntersections() changes its sorting function\\n\\\n        // from bubble sort to something else, this code may need to change.\\n\\\n        innerIntersect.entry.w = max(innerIntersect.entry.w, outerIntersect.entry.w);\\n\\\n        innerIntersect.exit.w = min(innerIntersect.exit.w, outerIntersect.exit.w);\\n\\\n        setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true);  // positive, enter\\n\\\n        setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter\\n\\\n        setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit\\n\\\n        setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false);  // positive, exit\\n\\\n    }\\n\\\n\\n\\\n    // Bottom cone\\n\\\n    #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF)\\n\\\n        RayShapeIntersection bottomConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, false);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection);\\n\\\n    #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF)\\n\\\n        RayShapeIntersection bottomConeIntersection = intersectZPlane(ray, -1.0);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection);\\n\\\n    #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF)\\n\\\n        RayShapeIntersection bottomConeIntersections[2];\\n\\\n        intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, bottomConeIntersections);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 0, bottomConeIntersections[0]);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 1, bottomConeIntersections[1]);\\n\\\n    #endif\\n\\\n\\n\\\n    // Top cone\\n\\\n    #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF)\\n\\\n        RayShapeIntersection topConeIntersections[2];\\n\\\n        intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, topConeIntersections);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 0, topConeIntersections[0]);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 1, topConeIntersections[1]);\\n\\\n    #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF)\\n\\\n        RayShapeIntersection topConeIntersection = intersectZPlane(ray, 1.0);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection);\\n\\\n    #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF)\\n\\\n        RayShapeIntersection topConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, false);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection);\\n\\\n    #endif\\n\\\n\\n\\\n    // Wedge\\n\\\n    #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO)\\n\\\n        RayShapeIntersection wedgeIntersects[2];\\n\\\n        intersectHalfPlane(ray, u_ellipsoidRenderLongitudeMinMax.x, wedgeIntersects);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]);\\n\\\n    #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF)\\n\\\n        RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_ellipsoidRenderLongitudeMinMax);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect);\\n\\\n    #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF)\\n\\\n        RayShapeIntersection wedgeIntersects[2];\\n\\\n        intersectFlippedWedge(ray, u_ellipsoidRenderLongitudeMinMax, wedgeIntersects);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]);\\n\\\n        setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]);\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT,\\n\\\n// RayShapeIntersection\\n\\\n\\n\\\nvec4 transformNormalToEC(in vec4 intersection) {\\n\\\n    return vec4(normalize(czm_normal * intersection.xyz), intersection.w);\\n\\\n}\\n\\\n\\n\\\nRayShapeIntersection transformNormalsToEC(in RayShapeIntersection ix) {\\n\\\n    return RayShapeIntersection(transformNormalToEC(ix.entry), transformNormalToEC(ix.exit));\\n\\\n}\\n\\\n\\n\\\nvec4 intersectLongitude(in Ray ray, in float angle, in bool positiveNormal) {\\n\\\n    float normalSign = positiveNormal ? 1.0 : -1.0;\\n\\\n    vec2 planeNormal = vec2(-sin(angle), cos(angle)) * normalSign;\\n\\\n\\n\\\n    vec2 position = ray.pos.xy;\\n\\\n    vec2 direction = ray.dir.xy;\\n\\\n    float approachRate = dot(direction, planeNormal);\\n\\\n    float distance = -dot(position, planeNormal);\\n\\\n\\n\\\n    float t = (approachRate == 0.0)\\n\\\n        ? NO_HIT\\n\\\n        : distance / approachRate;\\n\\\n\\n\\\n    return vec4(planeNormal, 0.0, t);\\n\\\n}\\n\\\n\\n\\\nRayShapeIntersection intersectHalfSpace(in Ray ray, in float angle, in bool positiveNormal)\\n\\\n{\\n\\\n    vec4 intersection = intersectLongitude(ray, angle, positiveNormal);\\n\\\n    vec4 farSide = vec4(normalize(ray.dir), INF_HIT);\\n\\\n\\n\\\n    bool hitFront = (intersection.w > 0.0) == (dot(ray.pos.xy, intersection.xy) > 0.0);\\n\\\n    if (!hitFront) {\\n\\\n        return RayShapeIntersection(intersection, farSide);\\n\\\n    } else {\\n\\\n        return RayShapeIntersection(-1.0 * farSide, intersection);\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nvoid intersectFlippedWedge(in Ray ray, in vec2 minMaxAngle, out RayShapeIntersection intersections[2])\\n\\\n{\\n\\\n    intersections[0] = transformNormalsToEC(intersectHalfSpace(ray, minMaxAngle.x, false));\\n\\\n    intersections[1] = transformNormalsToEC(intersectHalfSpace(ray, minMaxAngle.y, true));\\n\\\n}\\n\\\n\\n\\\nbool hitPositiveHalfPlane(in Ray ray, in vec4 intersection, in bool positiveNormal) {\\n\\\n    float normalSign = positiveNormal ? 1.0 : -1.0;\\n\\\n    vec2 planeDirection = vec2(intersection.y, -intersection.x) * normalSign;\\n\\\n    vec2 hit = ray.pos.xy + intersection.w * ray.dir.xy;\\n\\\n    return dot(hit, planeDirection) > 0.0;\\n\\\n}\\n\\\n\\n\\\nvoid intersectHalfPlane(in Ray ray, in float angle, out RayShapeIntersection intersections[2]) {\\n\\\n    vec4 intersection = intersectLongitude(ray, angle, true);\\n\\\n    vec4 farSide = vec4(normalize(ray.dir), INF_HIT);\\n\\\n    bool hitPositiveSide = hitPositiveHalfPlane(ray, intersection, true);\\n\\\n\\n\\\n    farSide = transformNormalToEC(farSide);\\n\\\n\\n\\\n    if (hitPositiveSide) {\\n\\\n        intersection = transformNormalToEC(intersection);\\n\\\n        intersections[0].entry = -1.0 * farSide;\\n\\\n        intersections[0].exit = vec4(-1.0 * intersection.xyz, intersection.w);\\n\\\n        intersections[1].entry = intersection;\\n\\\n        intersections[1].exit = farSide;\\n\\\n    } else {\\n\\\n        vec4 miss = vec4(normalize(czm_normal * ray.dir), NO_HIT);\\n\\\n        intersections[0].entry = -1.0 * farSide;\\n\\\n        intersections[0].exit = farSide;\\n\\\n        intersections[1].entry = miss;\\n\\\n        intersections[1].exit = miss;\\n\\\n    }\\n\\\n}\\n\\\n\\n\\\nRayShapeIntersection intersectRegularWedge(in Ray ray, in vec2 minMaxAngle)\\n\\\n{\\n\\\n    // Note: works for maxAngle > minAngle + pi, where the \\\"regular wedge\\\"\\n\\\n    // is actually a negative volume.\\n\\\n    // Compute intersections with the two planes.\\n\\\n    // Normals will point toward the \\\"outside\\\" (negative space)\\n\\\n    vec4 intersect1 = intersectLongitude(ray, minMaxAngle.x, false);\\n\\\n    vec4 intersect2 = intersectLongitude(ray, minMaxAngle.y, true);\\n\\\n\\n\\\n    // Choose intersection with smallest T as the \\\"first\\\", the other as \\\"last\\\"\\n\\\n    // Note: first or last could be in the \\\"shadow\\\" wedge, beyond the tip\\n\\\n    bool inOrder = intersect1.w <= intersect2.w;\\n\\\n    vec4 first = inOrder ? intersect1 : intersect2;\\n\\\n    vec4 last = inOrder ? intersect2 : intersect1;\\n\\\n\\n\\\n    bool firstIsAhead = first.w >= 0.0;\\n\\\n    bool startedInsideFirst = dot(ray.pos.xy, first.xy) < 0.0;\\n\\\n    bool exitFromInside = firstIsAhead == startedInsideFirst;\\n\\\n    bool lastIsAhead = last.w > 0.0;\\n\\\n    bool startedOutsideLast = dot(ray.pos.xy, last.xy) >= 0.0;\\n\\\n    bool enterFromOutside = lastIsAhead == startedOutsideLast;\\n\\\n\\n\\\n    vec4 farSide = vec4(normalize(ray.dir), INF_HIT);\\n\\\n    vec4 miss = vec4(normalize(ray.dir), NO_HIT);\\n\\\n\\n\\\n    if (exitFromInside && enterFromOutside) {\\n\\\n        // Ray crosses both faces of negative wedge, exiting then entering the positive shape\\n\\\n        return transformNormalsToEC(RayShapeIntersection(first, last));\\n\\\n    } else if (!exitFromInside && enterFromOutside) {\\n\\\n        // Ray starts inside wedge. last is in shadow wedge, and first is actually the entry\\n\\\n        return transformNormalsToEC(RayShapeIntersection(-1.0 * farSide, first));\\n\\\n    } else if (exitFromInside && !enterFromOutside) {\\n\\\n        // First intersection was in the shadow wedge, so last is actually the exit\\n\\\n        return transformNormalsToEC(RayShapeIntersection(last, farSide));\\n\\\n    } else { // !exitFromInside && !enterFromOutside\\n\\\n        // Both intersections were in the shadow wedge\\n\\\n        return transformNormalsToEC(RayShapeIntersection(miss, miss));\\n\\\n    }\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See IntersectionUtils.glsl for the definitions of Ray, Intersections, INF_HIT,\\n\\\n// NO_HIT, setShapeIntersection\\n\\\n\\n\\\n/* Clipping plane defines (set in Scene/VoxelRenderResources.js)\\n\\\n#define CLIPPING_PLANES_UNION\\n\\\n#define CLIPPING_PLANES_COUNT\\n\\\n#define CLIPPING_PLANES_INTERSECTION_INDEX\\n\\\n*/\\n\\\n\\n\\\nuniform sampler2D u_clippingPlanesTexture;\\n\\\nuniform mat4 u_clippingPlanesMatrix;\\n\\\n\\n\\\n// Plane is in Hessian Normal Form\\n\\\nvec4 intersectPlane(in Ray ray, in vec4 plane) {\\n\\\n    vec3 n = plane.xyz; // normal\\n\\\n    float w = plane.w; // -dot(pointOnPlane, normal)\\n\\\n\\n\\\n    float a = dot(ray.pos, n);\\n\\\n    float b = dot(ray.dir, n);\\n\\\n    float t = -(w + a) / b;\\n\\\n\\n\\\n    return vec4(n, t);\\n\\\n}\\n\\\n\\n\\\n#ifdef CLIPPING_PLANES\\n\\\nvoid intersectClippingPlanes(in Ray ray, inout Intersections ix) {\\n\\\n    vec4 backSide = vec4(-ray.dir, -INF_HIT);\\n\\\n    vec4 farSide = vec4(ray.dir, +INF_HIT);\\n\\\n    RayShapeIntersection clippingVolume;\\n\\\n\\n\\\n    #if (CLIPPING_PLANES_COUNT == 1)\\n\\\n        // Union and intersection are the same when there's one clipping plane, and the code\\n\\\n        // is more simplified.\\n\\\n        vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, 0);\\n\\\n        vec4 intersection = intersectPlane(ray, planeUv);\\n\\\n        bool reflects = dot(ray.dir, intersection.xyz) < 0.0;\\n\\\n        clippingVolume.entry = reflects ? backSide : intersection;\\n\\\n        clippingVolume.exit = reflects ? intersection : farSide;\\n\\\n        setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume);\\n\\\n    #elif defined(CLIPPING_PLANES_UNION)\\n\\\n        vec4 firstTransmission = vec4(ray.dir, +INF_HIT);\\n\\\n        vec4 lastReflection = vec4(-ray.dir, -INF_HIT);\\n\\\n        for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) {\\n\\\n            vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i);\\n\\\n            vec4 intersection = intersectPlane(ray, planeUv);\\n\\\n            if (dot(ray.dir, planeUv.xyz) > 0.0) {\\n\\\n                firstTransmission = intersection.w <= firstTransmission.w ? intersection : firstTransmission;\\n\\\n            } else {\\n\\\n                lastReflection = intersection.w >= lastReflection.w ? intersection : lastReflection;\\n\\\n            }\\n\\\n        }\\n\\\n        clippingVolume.entry = backSide;\\n\\\n        clippingVolume.exit = lastReflection;\\n\\\n        setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 0, clippingVolume);\\n\\\n        clippingVolume.entry = firstTransmission;\\n\\\n        clippingVolume.exit = farSide;\\n\\\n        setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 1, clippingVolume);\\n\\\n    #else // intersection\\n\\\n        vec4 lastTransmission = vec4(ray.dir, -INF_HIT);\\n\\\n        vec4 firstReflection = vec4(-ray.dir, +INF_HIT);\\n\\\n        for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) {\\n\\\n            vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i);\\n\\\n            vec4 intersection = intersectPlane(ray, planeUv);\\n\\\n            if (dot(ray.dir, planeUv.xyz) > 0.0) {\\n\\\n                lastTransmission = intersection.w > lastTransmission.w ? intersection : lastTransmission;\\n\\\n            } else {\\n\\\n                firstReflection = intersection.w < firstReflection.w ? intersection: firstReflection;\\n\\\n            }\\n\\\n        }\\n\\\n        if (lastTransmission.w < firstReflection.w) {\\n\\\n            clippingVolume.entry = lastTransmission;\\n\\\n            clippingVolume.exit = firstReflection;\\n\\\n        } else {\\n\\\n            clippingVolume.entry = vec4(-ray.dir, NO_HIT);\\n\\\n            clippingVolume.exit = vec4(ray.dir, NO_HIT);\\n\\\n        }\\n\\\n        setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume);\\n\\\n    #endif\\n\\\n}\\n\\\n#endif\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// Main intersection function for Voxel scenes.\\n\\\n// See IntersectBox.glsl, IntersectCylinder.glsl, or IntersectEllipsoid.glsl\\n\\\n// for the definition of intersectShape. The appropriate function is selected\\n\\\n// based on the VoxelPrimitive shape type, and added to the shader in\\n\\\n// Scene/VoxelRenderResources.js.\\n\\\n// See also IntersectClippingPlane.glsl and IntersectDepth.glsl.\\n\\\n// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT,\\n\\\n// getFirstIntersection, initializeIntersections, nextIntersection.\\n\\\n\\n\\\n/* Intersection defines (set in Scene/VoxelRenderResources.js)\\n\\\n#define INTERSECTION_COUNT ###\\n\\\n*/\\n\\\n\\n\\\nRayShapeIntersection intersectScene(in vec2 screenCoord, in Ray ray, in Ray rayEC, out Intersections ix) {\\n\\\n    // Do a ray-shape intersection to find the exact starting and ending points.\\n\\\n    intersectShape(ray, rayEC, ix);\\n\\\n\\n\\\n    // Exit early if the positive shape was completely missed or behind the ray.\\n\\\n    RayShapeIntersection intersection = getFirstIntersection(ix);\\n\\\n    if (intersection.entry.w == NO_HIT) {\\n\\\n        // Positive shape was completely missed - so exit early.\\n\\\n        return intersection;\\n\\\n    }\\n\\\n\\n\\\n    // Clipping planes\\n\\\n    #if defined(CLIPPING_PLANES)\\n\\\n        intersectClippingPlanes(ray, ix);\\n\\\n    #endif\\n\\\n\\n\\\n    // Depth\\n\\\n    intersectDepth(screenCoord, rayEC, ix);\\n\\\n\\n\\\n    // Find the first intersection that's in front of the ray\\n\\\n    #if (INTERSECTION_COUNT > 1)\\n\\\n        initializeIntersections(ix);\\n\\\n        for (int i = 0; i < INTERSECTION_COUNT; ++i) {\\n\\\n            intersection = nextIntersection(ix);\\n\\\n            if (intersection.exit.w > 0.0) {\\n\\\n                // Set start to 0.0 when ray is inside the shape.\\n\\\n                intersection.entry.w = max(intersection.entry.w, 0.0);\\n\\\n                break;\\n\\\n            }\\n\\\n        }\\n\\\n    #else\\n\\\n        // Set start to 0.0 when ray is inside the shape.\\n\\\n        intersection.entry.w = max(intersection.entry.w, 0.0);\\n\\\n    #endif\\n\\\n\\n\\\n    return intersection;\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/* Intersection defines\\n\\\n#define INTERSECTION_COUNT ###\\n\\\n*/\\n\\\n\\n\\\n#define NO_HIT (-czm_infinity)\\n\\\n#define INF_HIT (czm_infinity * 0.5)\\n\\\n\\n\\\nstruct RayShapeIntersection {\\n\\\n    vec4 entry;\\n\\\n    vec4 exit;\\n\\\n};\\n\\\n\\n\\\nvec4 intersectionMin(in vec4 intersect0, in vec4 intersect1)\\n\\\n{\\n\\\n    if (intersect0.w == NO_HIT) {\\n\\\n        return intersect1;\\n\\\n    } else if (intersect1.w == NO_HIT) {\\n\\\n        return intersect0;\\n\\\n    }\\n\\\n    return (intersect0.w <= intersect1.w) ? intersect0 : intersect1;\\n\\\n}\\n\\\n\\n\\\nvec4 intersectionMax(in vec4 intersect0, in vec4 intersect1)\\n\\\n{\\n\\\n    return (intersect0.w >= intersect1.w) ? intersect0 : intersect1;\\n\\\n}\\n\\\n\\n\\\nRayShapeIntersection intersectIntersections(in Ray ray, in RayShapeIntersection intersect0, in RayShapeIntersection intersect1)\\n\\\n{\\n\\\n    bool missed = (intersect0.entry.w == NO_HIT) ||\\n\\\n        (intersect1.entry.w == NO_HIT) ||\\n\\\n        (intersect0.exit.w < intersect1.entry.w) ||\\n\\\n        (intersect0.entry.w > intersect1.exit.w);\\n\\\n    if (missed) {\\n\\\n        vec4 miss = vec4(normalize(ray.dir), NO_HIT);\\n\\\n        return RayShapeIntersection(miss, miss);\\n\\\n    }\\n\\\n\\n\\\n    vec4 entry = intersectionMax(intersect0.entry, intersect1.entry);\\n\\\n    vec4 exit = intersectionMin(intersect0.exit, intersect1.exit);\\n\\\n\\n\\\n    return RayShapeIntersection(entry, exit);\\n\\\n}\\n\\\n\\n\\\nstruct Intersections {\\n\\\n    // Don't access these member variables directly - call the functions instead.\\n\\\n\\n\\\n    // Store an array of ray-surface intersections. Each intersection is composed of:\\n\\\n    //  .xyz for the surface normal at the intersection point\\n\\\n    //  .w for the T value\\n\\\n    // The scale of the normal encodes the shape intersection type:\\n\\\n    //  length(intersection.xyz) = 1: positive shape entry\\n\\\n    //  length(intersection.xyz) = 2: positive shape exit\\n\\\n    //  length(intersection.xyz) = 3: negative shape entry\\n\\\n    //  length(intersection.xyz) = 4: negative shape exit\\n\\\n    // INTERSECTION_COUNT is the number of ray-*shape* (volume) intersections,\\n\\\n    // so we need twice as many to track ray-*surface* intersections\\n\\\n    vec4 intersections[INTERSECTION_COUNT * 2];\\n\\\n    float distanceToDepthBuffer;\\n\\\n\\n\\\n    #if (INTERSECTION_COUNT > 1)\\n\\\n        // Maintain state for future nextIntersection calls\\n\\\n        int index;\\n\\\n        int surroundCount;\\n\\\n        bool surroundIsPositive;\\n\\\n    #endif\\n\\\n};\\n\\\n\\n\\\nRayShapeIntersection getFirstIntersection(in Intersections ix) \\n\\\n{\\n\\\n    return RayShapeIntersection(ix.intersections[0], ix.intersections[1]);\\n\\\n}\\n\\\n\\n\\\nvec4 encodeIntersectionType(vec4 intersection, int index, bool entry)\\n\\\n{\\n\\\n    float scale = float(index > 0) * 2.0 + float(!entry) + 1.0;\\n\\\n    return vec4(intersection.xyz * scale, intersection.w);\\n\\\n}\\n\\\n\\n\\\n// Use defines instead of real functions because WebGL1 cannot access array with non-constant index.\\n\\\n#define setIntersection(/*inout Intersections*/ ix, /*int*/ index, /*float*/ t, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = vec4(0.0, float(!positive) * 2.0 + float(!enter) + 1.0, 0.0, (t))\\n\\\n#define setIntersectionPair(/*inout Intersections*/ ix, /*int*/ index, /*vec2*/ entryExit) (ix).intersections[(index) * 2 + 0] = vec4(0.0, float((index) > 0) * 2.0 + 1.0, 0.0, (entryExit).x); (ix).intersections[(index) * 2 + 1] = vec4(0.0, float((index) > 0) * 2.0 + 2.0, 0.0, (entryExit).y)\\n\\\n#define setSurfaceIntersection(/*inout Intersections*/ ix, /*int*/ index, /*vec4*/ intersection, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = encodeIntersectionType((intersection), int(!positive), (enter))\\n\\\n#define setShapeIntersection(/*inout Intersections*/ ix, /*int*/ index, /*RayShapeIntersection*/ intersection) (ix).intersections[(index) * 2 + 0] = encodeIntersectionType((intersection).entry, (index), true); (ix).intersections[(index) * 2 + 1] = encodeIntersectionType((intersection).exit, (index), false)\\n\\\n\\n\\\n#if (INTERSECTION_COUNT > 1)\\n\\\nvoid initializeIntersections(inout Intersections ix) {\\n\\\n    // Sort the intersections from min T to max T with bubble sort.\\n\\\n    // Note: If this sorting function changes, some of the intersection test may\\n\\\n    // need to be updated. Search for \\\"bubble sort\\\" to find those areas.\\n\\\n    const int sortPasses = INTERSECTION_COUNT * 2 - 1;\\n\\\n    for (int n = sortPasses; n > 0; --n) {\\n\\\n        for (int i = 0; i < sortPasses; ++i) {\\n\\\n            // The loop should be: for (i = 0; i < n; ++i) {...} but WebGL1 cannot\\n\\\n            // loop with non-constant condition, so it has to break early instead\\n\\\n            if (i >= n) { break; }\\n\\\n\\n\\\n            vec4 intersect0 = ix.intersections[i + 0];\\n\\\n            vec4 intersect1 = ix.intersections[i + 1];\\n\\\n\\n\\\n            bool inOrder = intersect0.w <= intersect1.w;\\n\\\n\\n\\\n            ix.intersections[i + 0] = inOrder ? intersect0 : intersect1;\\n\\\n            ix.intersections[i + 1] = inOrder ? intersect1 : intersect0;\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    // Prepare initial state for nextIntersection\\n\\\n    ix.index = 0;\\n\\\n    ix.surroundCount = 0;\\n\\\n    ix.surroundIsPositive = false;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n#if (INTERSECTION_COUNT > 1)\\n\\\nRayShapeIntersection nextIntersection(inout Intersections ix) {\\n\\\n    vec4 surfaceIntersection = vec4(0.0, 0.0, 0.0, NO_HIT);\\n\\\n    RayShapeIntersection shapeIntersection = RayShapeIntersection(surfaceIntersection, surfaceIntersection);\\n\\\n\\n\\\n    const int passCount = INTERSECTION_COUNT * 2;\\n\\\n\\n\\\n    if (ix.index == passCount) {\\n\\\n        return shapeIntersection;\\n\\\n    }\\n\\\n\\n\\\n    for (int i = 0; i < passCount; ++i) {\\n\\\n        // The loop should be: for (i = ix.index; i < passCount; ++i) {...} but WebGL1 cannot\\n\\\n        // loop with non-constant condition, so it has to continue instead.\\n\\\n        if (i < ix.index) {\\n\\\n            continue;\\n\\\n        }\\n\\\n\\n\\\n        ix.index = i + 1;\\n\\\n\\n\\\n        surfaceIntersection = ix.intersections[i];\\n\\\n        int intersectionType = int(length(surfaceIntersection.xyz) - 0.5);\\n\\\n        bool currShapeIsPositive = intersectionType < 2;\\n\\\n        bool enter = intersectionType % 2 == 0;\\n\\\n\\n\\\n        ix.surroundCount += enter ? +1 : -1;\\n\\\n        ix.surroundIsPositive = currShapeIsPositive ? enter : ix.surroundIsPositive;\\n\\\n\\n\\\n        // entering positive or exiting negative\\n\\\n        if (ix.surroundCount == 1 && ix.surroundIsPositive && enter == currShapeIsPositive) {\\n\\\n            shapeIntersection.entry = surfaceIntersection;\\n\\\n        }\\n\\\n\\n\\\n        // exiting positive or entering negative after being inside positive\\n\\\n        bool exitPositive = !enter && currShapeIsPositive && ix.surroundCount == 0;\\n\\\n        bool enterNegativeFromPositive = enter && !currShapeIsPositive && ix.surroundCount == 2 && ix.surroundIsPositive;\\n\\\n        if (exitPositive || enterNegativeFromPositive) {\\n\\\n            shapeIntersection.exit = surfaceIntersection;\\n\\\n\\n\\\n            // entry and exit have been found, so the loop can stop\\n\\\n            if (exitPositive) {\\n\\\n                // After exiting positive shape there is nothing left to intersect, so jump to the end index.\\n\\\n                ix.index = passCount;\\n\\\n            }\\n\\\n            break;\\n\\\n        }\\n\\\n    }\\n\\\n\\n\\\n    return shapeIntersection;\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\n// NOTE: initializeIntersections, nextIntersection aren't even declared unless INTERSECTION_COUNT > 1\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See Octree.glsl for the definitions of SampleData\\n\\\n\\n\\\n/* Megatexture defines (set in Scene/VoxelRenderResources.js)\\n\\\n#define SAMPLE_COUNT ###\\n\\\n#define PADDING\\n\\\n*/\\n\\\n\\n\\\nuniform ivec3 u_megatextureTileCounts; // number of tiles in the megatexture, along each axis\\n\\\n\\n\\\nvec3 index1DTo3DTexCoord(int index)\\n\\\n{\\n\\\n    int tilesPerZ = u_megatextureTileCounts.x * u_megatextureTileCounts.y;\\n\\\n    int iz = index / tilesPerZ;\\n\\\n    int remainder = index - iz * tilesPerZ;\\n\\\n    int iy = remainder / u_megatextureTileCounts.x;\\n\\\n    int ix = remainder - iy * u_megatextureTileCounts.x;\\n\\\n    return vec3(ix, iy, iz) / vec3(u_megatextureTileCounts);\\n\\\n}\\n\\\n\\n\\\nProperties getPropertiesFromMegatexture(in SampleData sampleData) {\\n\\\n    int tileIndex = sampleData.megatextureIndex;\\n\\\n\\n\\\n    vec3 voxelCoord = sampleData.inputCoordinate;\\n\\\n\\n\\\n    // UV coordinate of the lower corner of the tile in the megatexture\\n\\\n    vec3 tileUvOffset = index1DTo3DTexCoord(tileIndex);\\n\\\n\\n\\\n    // Voxel location\\n\\\n    vec3 tileDimensions = vec3(u_inputDimensions);\\n\\\n    vec3 clampedVoxelCoord = clamp(voxelCoord, vec3(0.5), tileDimensions - vec3(0.5));\\n\\\n    vec3 voxelUv = clampedVoxelCoord / tileDimensions / vec3(u_megatextureTileCounts);\\n\\\n\\n\\\n    return getPropertiesFromMegatextureAtUv(tileUvOffset + voxelUv);\\n\\\n}\\n\\\n\\n\\\n// Convert an array of sample datas to a final weighted properties.\\n\\\nProperties accumulatePropertiesFromMegatexture(in SampleData sampleDatas[SAMPLE_COUNT]) {\\n\\\n    #if (SAMPLE_COUNT == 1)\\n\\\n        return getPropertiesFromMegatexture(sampleDatas[0]);\\n\\\n    #else\\n\\\n        // When more than one sample is taken the accumulator needs to start at 0\\n\\\n        Properties properties = clearProperties();\\n\\\n        for (int i = 0; i < SAMPLE_COUNT; ++i) {\\n\\\n            float weight = sampleDatas[i].weight;\\n\\\n\\n\\\n            // Avoid reading the megatexture when the weight is 0 as it can be costly.\\n\\\n            if (weight > 0.0) {\\n\\\n                Properties tempProperties = getPropertiesFromMegatexture(sampleDatas[i]);\\n\\\n                tempProperties = scaleProperties(tempProperties, weight);\\n\\\n                properties = sumProperties(properties, tempProperties);\\n\\\n            }\\n\\\n        }\\n\\\n        return properties;\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// These octree flags must be in sync with GpuOctreeFlag in VoxelTraversal.js\\n\\\n#define OCTREE_FLAG_INTERNAL 0\\n\\\n#define OCTREE_FLAG_LEAF 1\\n\\\n#define OCTREE_FLAG_PACKED_LEAF_FROM_PARENT 2\\n\\\n\\n\\\n#define OCTREE_MAX_LEVELS 32 // Harcoded value because GLSL doesn't like variable length loops\\n\\\n\\n\\\nuniform sampler2D u_octreeInternalNodeTexture;\\n\\\nuniform vec2 u_octreeInternalNodeTexelSizeUv;\\n\\\nuniform int u_octreeInternalNodeTilesPerRow;\\n\\\n#if (SAMPLE_COUNT > 1)\\n\\\nuniform sampler2D u_octreeLeafNodeTexture;\\n\\\nuniform vec2 u_octreeLeafNodeTexelSizeUv;\\n\\\nuniform int u_octreeLeafNodeTilesPerRow;\\n\\\n#endif\\n\\\nuniform ivec3 u_dimensions; // does not include padding, and is in the z-up orientation\\n\\\nuniform ivec3 u_inputDimensions; // includes padding, and is in the orientation of the input data\\n\\\n#if defined(PADDING)\\n\\\n    uniform ivec3 u_paddingBefore;\\n\\\n#endif\\n\\\n\\n\\\nstruct OctreeNodeData {\\n\\\n    int data;\\n\\\n    int flag;\\n\\\n};\\n\\\n\\n\\\nstruct TraversalData {\\n\\\n    ivec4 octreeCoords;\\n\\\n    int parentOctreeIndex;\\n\\\n};\\n\\\n\\n\\\nstruct TileAndUvCoordinate {\\n\\\n    ivec4 tileCoords;\\n\\\n    vec3 tileUv;\\n\\\n};\\n\\\n\\n\\\nstruct SampleData {\\n\\\n    int megatextureIndex;\\n\\\n    ivec4 tileCoords;\\n\\\n    vec3 tileUv;\\n\\\n    vec3 inputCoordinate;\\n\\\n    #if (SAMPLE_COUNT > 1)\\n\\\n        float weight;\\n\\\n    #endif\\n\\\n};\\n\\\n\\n\\\nint normU8_toInt(in float value) {\\n\\\n    return int(value * 255.0);\\n\\\n}\\n\\\nint normU8x2_toInt(in vec2 value) {\\n\\\n    return int(value.x * 255.0) + 256 * int(value.y * 255.0);\\n\\\n}\\n\\\nfloat normU8x2_toFloat(in vec2 value) {\\n\\\n    return float(normU8x2_toInt(value)) / 65535.0;\\n\\\n}\\n\\\n\\n\\\nOctreeNodeData getOctreeNodeData(in vec2 octreeUv) {\\n\\\n    vec4 texData = texture(u_octreeInternalNodeTexture, octreeUv);\\n\\\n\\n\\\n    OctreeNodeData data;\\n\\\n    data.data = normU8x2_toInt(texData.xy);\\n\\\n    data.flag = normU8x2_toInt(texData.zw);\\n\\\n    return data;\\n\\\n}\\n\\\n\\n\\\nOctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) {\\n\\\n    int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x;\\n\\\n    int octreeCoordX = (parentOctreeIndex % u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;\\n\\\n    int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow;\\n\\\n    vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\\n\\\n    return getOctreeNodeData(octreeUv);\\n\\\n}\\n\\\n\\n\\\nint getOctreeParentIndex(in int octreeIndex) {\\n\\\n    int octreeCoordX = (octreeIndex % u_octreeInternalNodeTilesPerRow) * 9;\\n\\\n    int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow;\\n\\\n    vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\\n\\\n    vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv);\\n\\\n    int parentOctreeIndex = normU8x2_toInt(parentData.xy);\\n\\\n    return parentOctreeIndex;\\n\\\n}\\n\\\n\\n\\\nvec3 getTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {\\n\\\n    int levelDifference = tileAndUv.tileCoords.w - octreeCoords.w;\\n\\\n    float scalar = exp2(-1.0 * float(levelDifference));\\n\\\n    vec3 originShift = vec3(tileAndUv.tileCoords.xyz - (octreeCoords.xyz << levelDifference)) * scalar;\\n\\\n    return tileAndUv.tileUv * scalar + originShift;\\n\\\n}\\n\\\n\\n\\\nvec3 getClampedTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {\\n\\\n    vec3 tileUv = getTileUv(tileAndUv, octreeCoords);\\n\\\n    return clamp(tileUv, vec3(0.0), vec3(1.0));\\n\\\n}\\n\\\n\\n\\\nvoid addSampleCoordinates(in TileAndUvCoordinate tileAndUv, inout SampleData sampleData) {\\n\\\n    vec3 tileUv = getClampedTileUv(tileAndUv, sampleData.tileCoords);\\n\\\n\\n\\\n    vec3 inputCoordinate = tileUv * vec3(u_dimensions);\\n\\\n#if defined(PADDING)\\n\\\n    inputCoordinate += vec3(u_paddingBefore);\\n\\\n#endif\\n\\\n#if defined(Y_UP_METADATA_ORDER)\\n\\\n#if defined(SHAPE_BOX)\\n\\\n    float inputY = inputCoordinate.y;\\n\\\n    inputCoordinate.y = inputCoordinate.z;\\n\\\n    // u_inputDimensions.z is the y-up dimension along the 3D Tiles y-axis.\\n\\\n    inputCoordinate.z = float(u_inputDimensions.z) - inputY;\\n\\\n#elif defined(SHAPE_CYLINDER)\\n\\\n    float angle = inputCoordinate.y;\\n\\\n    float height = inputCoordinate.z;\\n\\\n    #if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE))\\n\\\n    // Account for the different 0-angle convention in glTF vs 3DTiles\\n\\\n    if (sampleData.tileCoords.w == 0) {\\n\\\n        float angleCount = float(u_inputDimensions.z);\\n\\\n        angle = mod(angle + angleCount / 2.0, angleCount);\\n\\\n    }\\n\\\n    #endif\\n\\\n    inputCoordinate.y = height;\\n\\\n    inputCoordinate.z = angle;\\n\\\n#endif\\n\\\n#endif\\n\\\n\\n\\\n    sampleData.tileUv = tileUv;\\n\\\n    sampleData.inputCoordinate = inputCoordinate;\\n\\\n}\\n\\\n\\n\\\nvoid getOctreeLeafSampleData(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleData) {\\n\\\n    sampleData.megatextureIndex = data.data;\\n\\\n    sampleData.tileCoords = (data.flag == OCTREE_FLAG_PACKED_LEAF_FROM_PARENT)\\n\\\n        ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)\\n\\\n        : octreeCoords;\\n\\\n}\\n\\\n\\n\\\n#if (SAMPLE_COUNT > 1)\\n\\\nvoid getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleDatas[SAMPLE_COUNT]) {\\n\\\n    int leafIndex = data.data;\\n\\\n    int leafNodeTexelCount = 2;\\n\\\n    // Adding 0.5 moves to the center of the texel\\n\\\n    float leafCoordXStart = float((leafIndex % u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;\\n\\\n    float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5;\\n\\\n\\n\\\n    // Get an interpolation weight and a flag to determine whether to read the parent texture\\n\\\n    vec2 leafUv0 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 0.0, leafCoordY);\\n\\\n    vec4 leafData0 = texture(u_octreeLeafNodeTexture, leafUv0);\\n\\\n    float lerp = normU8x2_toFloat(leafData0.xy);\\n\\\n    sampleDatas[0].weight = 1.0 - lerp;\\n\\\n    sampleDatas[1].weight = lerp;\\n\\\n    // TODO: this looks wrong? Should be comparing to OCTREE_FLAG_PACKED_LEAF_FROM_PARENT\\n\\\n    sampleDatas[0].tileCoords = (normU8_toInt(leafData0.z) == 1)\\n\\\n        ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)\\n\\\n        : octreeCoords;\\n\\\n    sampleDatas[1].tileCoords = (normU8_toInt(leafData0.w) == 1)\\n\\\n        ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)\\n\\\n        : octreeCoords;\\n\\\n\\n\\\n    // Get megatexture indices for both samples\\n\\\n    vec2 leafUv1 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 1.0, leafCoordY);\\n\\\n    vec4 leafData1 = texture(u_octreeLeafNodeTexture, leafUv1);\\n\\\n    sampleDatas[0].megatextureIndex = normU8x2_toInt(leafData1.xy);\\n\\\n    sampleDatas[1].megatextureIndex = normU8x2_toInt(leafData1.zw);\\n\\\n}\\n\\\n#endif\\n\\\n\\n\\\nOctreeNodeData traverseOctreeDownwards(in ivec4 tileCoordinate, inout TraversalData traversalData) {\\n\\\n    OctreeNodeData childData;\\n\\\n\\n\\\n    for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {\\n\\\n        // tileCoordinate.xyz is defined at the level of detail tileCoordinate.w.\\n\\\n        // Find the corresponding coordinate at the level traversalData.octreeCoords.w\\n\\\n        int level = traversalData.octreeCoords.w + 1;\\n\\\n        int levelDifference = tileCoordinate.w - level;\\n\\\n        ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;\\n\\\n        traversalData.octreeCoords = ivec4(coordinateAtLevel, level);\\n\\\n\\n\\\n        ivec3 childCoordinate = coordinateAtLevel & 1;\\n\\\n        childData = getOctreeChildData(traversalData.parentOctreeIndex, childCoordinate);\\n\\\n\\n\\\n        if (childData.flag != OCTREE_FLAG_INTERNAL) {\\n\\\n            // leaf tile - stop traversing\\n\\\n            break;\\n\\\n        }\\n\\\n\\n\\\n        traversalData.parentOctreeIndex = childData.data;\\n\\\n    }\\n\\\n\\n\\\n    return childData;\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n* Transform a given position to an octree tile coordinate and a position within that tile,\\n\\\n* and find the corresponding megatexture index and texture coordinates\\n\\\n*/\\n\\\nvoid traverseOctreeFromBeginning(in TileAndUvCoordinate tileAndUv, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) {\\n\\\n    traversalData.octreeCoords = ivec4(0);\\n\\\n    traversalData.parentOctreeIndex = 0;\\n\\\n\\n\\\n    OctreeNodeData nodeData = getOctreeNodeData(vec2(0.0));\\n\\\n    if (nodeData.flag != OCTREE_FLAG_LEAF) {\\n\\\n        nodeData = traverseOctreeDownwards(tileAndUv.tileCoords, traversalData);\\n\\\n    }\\n\\\n\\n\\\n    #if (SAMPLE_COUNT == 1)\\n\\\n        getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);\\n\\\n        addSampleCoordinates(tileAndUv, sampleDatas[0]);\\n\\\n    #else\\n\\\n        getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);\\n\\\n        addSampleCoordinates(tileAndUv, sampleDatas[0]);\\n\\\n        addSampleCoordinates(tileAndUv, sampleDatas[1]);\\n\\\n    #endif\\n\\\n}\\n\\\n\\n\\\nbool insideTile(in ivec4 tileCoordinate, in ivec4 octreeCoords) {\\n\\\n    int levelDifference = tileCoordinate.w - octreeCoords.w;\\n\\\n    if (levelDifference < 0) {\\n\\\n        return false;\\n\\\n    }\\n\\\n    ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;\\n\\\n    return coordinateAtLevel == octreeCoords.xyz;\\n\\\n}\\n\\\n\\n\\\nvoid traverseOctreeFromExisting(in TileAndUvCoordinate tileAndUv, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) {\\n\\\n    ivec4 tileCoords = tileAndUv.tileCoords;\\n\\\n    if (insideTile(tileCoords, traversalData.octreeCoords)) {\\n\\\n        for (int i = 0; i < SAMPLE_COUNT; i++) {\\n\\\n            addSampleCoordinates(tileAndUv, sampleDatas[i]);\\n\\\n        }\\n\\\n        return;\\n\\\n    }\\n\\\n\\n\\\n    // Go up tree until we find a parent tile containing tileCoords.\\n\\\n    // Assumes all parents are available all they way up to the root.\\n\\\n    for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {\\n\\\n        traversalData.octreeCoords.xyz /= 2;\\n\\\n        traversalData.octreeCoords.w -= 1;\\n\\\n\\n\\\n        if (insideTile(tileCoords, traversalData.octreeCoords)) {\\n\\\n            break;\\n\\\n        }\\n\\\n\\n\\\n        traversalData.parentOctreeIndex = getOctreeParentIndex(traversalData.parentOctreeIndex);\\n\\\n    }\\n\\\n\\n\\\n    // Go down tree\\n\\\n    OctreeNodeData nodeData = traverseOctreeDownwards(tileCoords, traversalData);\\n\\\n\\n\\\n    #if (SAMPLE_COUNT == 1)\\n\\\n        getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);\\n\\\n        addSampleCoordinates(tileAndUv, sampleDatas[0]);\\n\\\n    #else\\n\\\n        getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);\\n\\\n        addSampleCoordinates(tileAndUv, sampleDatas[0]);\\n\\\n        addSampleCoordinates(tileAndUv, sampleDatas[1]);\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"// See Intersection.glsl for the definition of intersectScene\\n\\\n// See IntersectionUtils.glsl for the definition of nextIntersection\\n\\\n// See convertLocalToBoxUv.glsl, convertLocalToCylinderUv.glsl, or convertLocalToEllipsoidUv.glsl\\n\\\n// for the definitions of convertLocalToShapeSpaceDerivative and getTileAndUvCoordinate. \\n\\\n// The appropriate functions are selected based on the VoxelPrimitive shape type, \\n\\\n// and added to the shader in Scene/VoxelRenderResources.js.\\n\\\n// See Octree.glsl for the definitions of TraversalData, SampleData,\\n\\\n// traverseOctreeFromBeginning, and traverseOctreeFromExisting\\n\\\n// See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture\\n\\\n\\n\\\n#define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops\\n\\\n#if defined(PICKING_VOXEL)\\n\\\n    #define ALPHA_ACCUM_MAX 0.1\\n\\\n#else\\n\\\n    #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0\\n\\\n#endif\\n\\\n\\n\\\nuniform mat4 u_transformPositionViewToLocal;\\n\\\nuniform mat3 u_transformDirectionViewToLocal;\\n\\\nuniform vec3 u_cameraPositionLocal;\\n\\\nuniform vec3 u_cameraDirectionLocal;\\n\\\nuniform float u_stepSize;\\n\\\n\\n\\\n#if defined(PICKING)\\n\\\n    uniform vec4 u_pickColor;\\n\\\n#endif\\n\\\n\\n\\\nvec3 getSampleSize(in int level) {\\n\\\n    vec3 sampleCount = exp2(float(level)) * vec3(u_dimensions);\\n\\\n    vec3 sampleSizeUv = 1.0 / sampleCount;\\n\\\n    return scaleShapeUvToShapeSpace(sampleSizeUv);\\n\\\n}\\n\\\n\\n\\\n#define MINIMUM_STEP_SCALAR (0.02)\\n\\\n#define SHIFT_FRACTION (0.001)\\n\\\n\\n\\\n/**\\n\\\n * Given a coordinate within a tile, and sample spacings along a ray through\\n\\\n * the coordinate, find the distance to the points where the ray entered and\\n\\\n * exited the voxel cell, along with the surface normals at those points.\\n\\\n * The surface normals are returned in shape space coordinates.\\n\\\n */\\n\\\nRayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlongRay) {\\n\\\n    vec3 voxelCoord = tileUv * vec3(u_dimensions);\\n\\\n    vec3 directions = sign(sampleSizeAlongRay);\\n\\\n    vec3 positiveDirections = max(directions, 0.0);\\n\\\n    vec3 entryCoord = mix(ceil(voxelCoord), floor(voxelCoord), positiveDirections);\\n\\\n    vec3 exitCoord = entryCoord + directions;\\n\\\n\\n\\\n    vec3 distanceFromEntry = -abs((entryCoord - voxelCoord) * sampleSizeAlongRay);\\n\\\n    float lastEntry = maxComponent(distanceFromEntry);\\n\\\n    bvec3 isLastEntry = equal(distanceFromEntry, vec3(lastEntry));\\n\\\n    vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions;\\n\\\n    vec4 entry = vec4(entryNormal, lastEntry);\\n\\\n\\n\\\n    vec3 distanceToExit = abs((exitCoord - voxelCoord) * sampleSizeAlongRay);\\n\\\n    float firstExit = minComponent(distanceToExit);\\n\\\n    bvec3 isFirstExit = equal(distanceToExit, vec3(firstExit));\\n\\\n    vec3 exitNormal = vec3(isFirstExit) * directions;\\n\\\n    vec4 exit = vec4(exitNormal, firstExit);\\n\\\n\\n\\\n    return RayShapeIntersection(entry, exit);\\n\\\n}\\n\\\n\\n\\\nvec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) {\\n\\\n    vec3 gradient = viewRay.dir * jacobianT;\\n\\\n    vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient;\\n\\\n\\n\\\n    RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay);\\n\\\n\\n\\\n    // Transform normal from shape space to Cartesian space to eye space\\n\\\n    vec3 voxelNormal = jacobianT * voxelIntersection.entry.xyz;\\n\\\n    voxelNormal = normalize(czm_normal * voxelNormal);\\n\\\n\\n\\\n    // Compare with the shape intersection, to choose the appropriate normal\\n\\\n    vec4 voxelEntry = vec4(voxelNormal, currentT + voxelIntersection.entry.w);\\n\\\n    vec4 entry = intersectionMax(shapeIntersection.entry, voxelEntry);\\n\\\n\\n\\\n    float fixedStep = minComponent(abs(sampleSizeAlongRay)) * u_stepSize;\\n\\\n    float shift = fixedStep * SHIFT_FRACTION;\\n\\\n    float dt = voxelIntersection.exit.w + shift;\\n\\\n    if ((currentT + dt) > shapeIntersection.exit.w) {\\n\\\n        // Stop at end of shape\\n\\\n        dt = shapeIntersection.exit.w - currentT + shift;\\n\\\n    }\\n\\\n    float stepSize = clamp(dt, fixedStep * MINIMUM_STEP_SCALAR, fixedStep + shift);\\n\\\n\\n\\\n    return vec4(entry.xyz, stepSize);\\n\\\n}\\n\\\n\\n\\\nvec2 packIntToVec2(int value) {\\n\\\n    float shifted = float(value) / 255.0;\\n\\\n    float lowBits = fract(shifted);\\n\\\n    float highBits = floor(shifted) / 255.0;\\n\\\n    return vec2(highBits, lowBits);\\n\\\n}\\n\\\n\\n\\\nvec2 packFloatToVec2(float value) {\\n\\\n    float lowBits = fract(value);\\n\\\n    float highBits = floor(value) / 255.0;\\n\\\n    return vec2(highBits, lowBits);\\n\\\n}\\n\\\n\\n\\\nint getSampleIndex(in SampleData sampleData) {\\n\\\n    // tileUv = 1.0 is a valid coordinate but sampleIndex = u_inputDimensions is not.\\n\\\n    // (tileUv = 1.0 corresponds to the far edge of the last sample, at index = u_inputDimensions - 1).\\n\\\n    // Clamp to [0, voxelDimensions - 0.5) to avoid numerical error before flooring\\n\\\n    vec3 maxCoordinate = vec3(u_inputDimensions) - vec3(0.5);\\n\\\n    vec3 inputCoordinate = clamp(sampleData.inputCoordinate, vec3(0.0), maxCoordinate);\\n\\\n    ivec3 sampleIndex = ivec3(floor(inputCoordinate));\\n\\\n    // Convert to a 1D index for lookup in a 1D data array\\n\\\n    return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Compute the view ray at the current fragment, in the local coordinates of the shape.\\n\\\n */\\n\\\nRay getViewRayLocal() {\\n\\\n    vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);\\n\\\n    vec3 origin;\\n\\\n    vec3 direction;\\n\\\n    if (czm_orthographicIn3D == 1.0) {\\n\\\n        eyeCoordinates.z = 0.0;\\n\\\n        origin = (u_transformPositionViewToLocal * eyeCoordinates).xyz;\\n\\\n        direction = u_cameraDirectionLocal;\\n\\\n    } else {\\n\\\n        origin = u_cameraPositionLocal;\\n\\\n        direction = u_transformDirectionViewToLocal * normalize(eyeCoordinates.xyz);\\n\\\n    }\\n\\\n    return Ray(origin, direction);\\n\\\n}\\n\\\n\\n\\\nRay getViewRayEC() {\\n\\\n    vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);\\n\\\n    vec3 viewPosEC = (czm_orthographicIn3D == 1.0)\\n\\\n        ? vec3(eyeCoordinates.xy, 0.0)\\n\\\n        : vec3(0.0);\\n\\\n    vec3 viewDirEC = normalize(eyeCoordinates.xyz);\\n\\\n    return Ray(viewPosEC, viewDirEC);\\n\\\n}\\n\\\n\\n\\\nvoid main()\\n\\\n{\\n\\\n    Ray viewRayLocal = getViewRayLocal();\\n\\\n    Ray viewRayEC = getViewRayEC();\\n\\\n\\n\\\n    Intersections ix;\\n\\\n    vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]\\n\\\n    RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayLocal, viewRayEC, ix);\\n\\\n    // Exit early if the scene was completely missed.\\n\\\n    if (shapeIntersection.entry.w == NO_HIT) {\\n\\\n        discard;\\n\\\n    }\\n\\\n\\n\\\n    float currentT = shapeIntersection.entry.w;\\n\\\n    float endT = shapeIntersection.exit.w;\\n\\\n\\n\\\n    vec3 positionEC = viewRayEC.pos + currentT * viewRayEC.dir;\\n\\\n    TileAndUvCoordinate tileAndUv = getTileAndUvCoordinate(positionEC);\\n\\\n    vec3 positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;\\n\\\n    mat3 jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);\\n\\\n\\n\\\n    // Traverse the tree from the start position\\n\\\n    TraversalData traversalData;\\n\\\n    SampleData sampleDatas[SAMPLE_COUNT];\\n\\\n    traverseOctreeFromBeginning(tileAndUv, traversalData, sampleDatas);\\n\\\n    vec4 step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);\\n\\\n\\n\\\n    FragmentInput fragmentInput;\\n\\\n    #if defined(STATISTICS)\\n\\\n        setStatistics(fragmentInput.metadataStatistics);\\n\\\n    #endif\\n\\\n\\n\\\n    czm_modelMaterial materialOutput;\\n\\\n    vec4 colorAccum = vec4(0.0);\\n\\\n\\n\\\n    for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {\\n\\\n        // Read properties from the megatexture based on the traversal state\\n\\\n        Properties properties = accumulatePropertiesFromMegatexture(sampleDatas);\\n\\\n\\n\\\n        // Prepare the custom shader inputs\\n\\\n        copyPropertiesToMetadata(properties, fragmentInput.metadata);\\n\\\n\\n\\\n        fragmentInput.attributes.positionEC = positionEC;\\n\\\n        // Re-normalize normals: some shape intersections may have been scaled to encode positive/negative shapes\\n\\\n        fragmentInput.attributes.normalEC = normalize(step.xyz);\\n\\\n\\n\\\n        fragmentInput.voxel.viewDirUv = viewRayLocal.dir;\\n\\\n\\n\\\n        fragmentInput.voxel.travelDistance = step.w;\\n\\\n        fragmentInput.voxel.stepCount = stepCount;\\n\\\n        fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex;\\n\\\n        fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]);\\n\\\n        fragmentInput.voxel.distanceToDepthBuffer = ix.distanceToDepthBuffer - currentT;\\n\\\n\\n\\\n        // Run the custom shader\\n\\\n        fragmentMain(fragmentInput, materialOutput);\\n\\\n\\n\\\n        // Sanitize the custom shader output\\n\\\n        vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha);\\n\\\n        color.rgb = max(color.rgb, vec3(0.0));\\n\\\n        color.a = clamp(color.a, 0.0, 1.0);\\n\\\n\\n\\\n        // Pre-multiplied alpha blend\\n\\\n        colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a);\\n\\\n\\n\\\n        // Stop traversing if the alpha has been fully saturated\\n\\\n        if (colorAccum.a > ALPHA_ACCUM_MAX) {\\n\\\n            colorAccum.a = ALPHA_ACCUM_MAX;\\n\\\n            break;\\n\\\n        }\\n\\\n\\n\\\n        if (step.w == 0.0) {\\n\\\n            // Shape is infinitely thin. The ray may have hit the edge of a\\n\\\n            // foreground voxel. Step ahead slightly to check for more voxels\\n\\\n            step.w == 0.00001;\\n\\\n        }\\n\\\n\\n\\\n        // Keep raymarching\\n\\\n        currentT += step.w;\\n\\\n        // Check if there's more intersections.\\n\\\n        if (currentT > endT) {\\n\\\n            #if (INTERSECTION_COUNT == 1)\\n\\\n                break;\\n\\\n            #else\\n\\\n                shapeIntersection = nextIntersection(ix);\\n\\\n                if (shapeIntersection.entry.w == NO_HIT) {\\n\\\n                    break;\\n\\\n                } else {\\n\\\n                    // Found another intersection. Resume raymarching there\\n\\\n                    currentT = shapeIntersection.entry.w;\\n\\\n                    endT = shapeIntersection.exit.w;\\n\\\n                }\\n\\\n            #endif\\n\\\n        }\\n\\\n        positionEC = viewRayEC.pos + currentT * viewRayEC.dir;\\n\\\n        tileAndUv = getTileAndUvCoordinate(positionEC);\\n\\\n        positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;\\n\\\n        jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);\\n\\\n\\n\\\n        // Traverse the tree from the current ray position.\\n\\\n        // This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.\\n\\\n        traverseOctreeFromExisting(tileAndUv, traversalData, sampleDatas);\\n\\\n        step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);\\n\\\n    }\\n\\\n\\n\\\n    // Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]\\n\\\n    colorAccum.a /= ALPHA_ACCUM_MAX;\\n\\\n\\n\\\n    #if defined(PICKING)\\n\\\n        // If alpha is 0.0 there is nothing to pick\\n\\\n        if (colorAccum.a == 0.0) {\\n\\\n            discard;\\n\\\n        }\\n\\\n        out_FragColor = u_pickColor;\\n\\\n    #elif defined(PICKING_VOXEL)\\n\\\n        // If alpha is 0.0 there is nothing to pick\\n\\\n        if (colorAccum.a == 0.0) {\\n\\\n            discard;\\n\\\n        }\\n\\\n        vec2 megatextureId = packIntToVec2(sampleDatas[0].megatextureIndex);\\n\\\n        vec2 sampleIndex = packIntToVec2(getSampleIndex(sampleDatas[0]));\\n\\\n        out_FragColor = vec4(megatextureId, sampleIndex);\\n\\\n    #else\\n\\\n        out_FragColor = colorAccum;\\n\\\n    #endif\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"struct Ray {\\n\\\n    vec3 pos;\\n\\\n    vec3 dir;\\n\\\n};\\n\\\n\\n\\\nfloat minComponent(in vec3 v) {\\n\\\n    return min(min(v.x, v.y), v.z);\\n\\\n}\\n\\\n\\n\\\nfloat maxComponent(in vec3 v) {\\n\\\n    return max(max(v.x, v.y), v.z);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"in vec2 position;\\n\\\n\\n\\\nuniform vec4 u_ndcSpaceAxisAlignedBoundingBox;\\n\\\n\\n\\\nvoid main() {\\n\\\n    vec2 aabbMin = u_ndcSpaceAxisAlignedBoundingBox.xy;\\n\\\n    vec2 aabbMax = u_ndcSpaceAxisAlignedBoundingBox.zw;\\n\\\n    vec2 translation = 0.5 * (aabbMax + aabbMin);\\n\\\n    vec2 scale = 0.5 * (aabbMax - aabbMin);\\n\\\n    gl_Position = vec4(position * scale + translation, 0.0, 1.0);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec3 u_boxLocalToShapeUvScale;\\n\\\nuniform vec3 u_boxLocalToShapeUvTranslate;\\n\\\n\\n\\\nuniform ivec4 u_cameraTileCoordinates;\\n\\\nuniform vec3 u_cameraTileUv;\\n\\\nuniform mat3 u_boxEcToXyz;\\n\\\n\\n\\\nmat3 convertLocalToShapeSpaceDerivative(in vec3 positionLocal) {\\n\\\n    // For BOX, local space = shape space, so the Jacobian is the identity matrix.\\n\\\n    return mat3(1.0);\\n\\\n}\\n\\\n\\n\\\nvec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {\\n\\\n    return shapeUv / u_boxLocalToShapeUvScale;\\n\\\n}\\n\\\n\\n\\\nvec3 convertEcToDeltaTile(in vec3 positionEC) {\\n\\\n    vec3 dPosition = u_boxEcToXyz * positionEC;\\n\\\n    return u_boxLocalToShapeUvScale * dPosition * float(1 << u_cameraTileCoordinates.w);\\n\\\n}\\n\\\n\\n\\\nTileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {\\n\\\n    vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);\\n\\\n    vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;\\n\\\n    ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));\\n\\\n    tileCoordinate = min(max(ivec3(0), tileCoordinate), ivec3((1 << u_cameraTileCoordinates.w) - 1));\\n\\\n    ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;\\n\\\n    vec3 tileUv = clamp(tileUvSum - vec3(tileCoordinateChange), 0.0, 1.0);\\n\\\n    return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"uniform vec2 u_cylinderLocalToShapeUvRadius; // x = scale, y = offset\\n\\\nuniform vec2 u_cylinderLocalToShapeUvHeight; // x = scale, y = offset\\n\\\nuniform vec2 u_cylinderLocalToShapeUvAngle; // x = scale, y = offset\\n\\\nuniform float u_cylinderShapeUvAngleRangeOrigin;\\n\\\nuniform mat3 u_cylinderEcToRadialTangentUp;\\n\\\nuniform ivec4 u_cameraTileCoordinates;\\n\\\nuniform vec3 u_cameraTileUv;\\n\\\nuniform vec3 u_cameraShapePosition; // (radial distance, angle, height) of camera in shape space\\n\\\n\\n\\\nmat3 convertLocalToShapeSpaceDerivative(in vec3 position) {\\n\\\n    vec3 radial = normalize(vec3(position.xy, 0.0));\\n\\\n    vec3 z = vec3(0.0, 0.0, 1.0);\\n\\\n    vec3 east = normalize(vec3(-position.y, position.x, 0.0));\\n\\\n    return mat3(radial, east / length(position.xy), z);\\n\\\n}\\n\\\n\\n\\\nvec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {\\n\\\n    float radius = shapeUv.x / u_cylinderLocalToShapeUvRadius.x;\\n\\\n    float angle = shapeUv.y * czm_twoPi / u_cylinderLocalToShapeUvAngle.x;\\n\\\n    float height = shapeUv.z / u_cylinderLocalToShapeUvHeight.x;\\n\\\n\\n\\\n    return vec3(radius, angle, height);\\n\\\n}\\n\\\n\\n\\\n/**\\n\\\n * Computes the change in polar coordinates given a change in position.\\n\\\n * @param {vec2} dPosition The change in position in Cartesian coordinates.\\n\\\n * @param {float} cameraRadialDistance The radial distance of the camera from the origin.\\n\\\n * @return {vec2} The change in polar coordinates (radial distance, angle).\\n\\\n */\\n\\\nvec2 computePolarChange(in vec2 dPosition, in float cameraRadialDistance) {\\n\\\n    float dAngle = atan(dPosition.y, cameraRadialDistance + dPosition.x);\\n\\\n    // Find the direction of the radial axis at the output angle, in Cartesian coordinates\\n\\\n    vec2 outputRadialAxis = vec2(cos(dAngle), sin(dAngle));\\n\\\n    float sinHalfAngle = sin(dAngle / 2.0);\\n\\\n    float versine = 2.0 * sinHalfAngle * sinHalfAngle;\\n\\\n    float dRadial = dot(dPosition, outputRadialAxis) - cameraRadialDistance * versine;\\n\\\n    return vec2(dRadial, dAngle);\\n\\\n}\\n\\\n\\n\\\nvec3 convertEcToDeltaShape(in vec3 positionEC) {\\n\\\n    // 1. Rotate to radial, tangent, and up coordinates\\n\\\n    vec3 rtu = u_cylinderEcToRadialTangentUp * positionEC;\\n\\\n    // 2. Compute change in angular and radial coordinates.\\n\\\n    vec2 dPolar = computePolarChange(rtu.xy, u_cameraShapePosition.x);\\n\\\n    return vec3(dPolar.xy, rtu.z);\\n\\\n}\\n\\\n\\n\\\nvec3 convertEcToDeltaTile(in vec3 positionEC) {\\n\\\n    vec3 deltaShape = convertEcToDeltaShape(positionEC);\\n\\\n    // Convert to tileset coordinates in [0, 1]\\n\\\n    float dx = u_cylinderLocalToShapeUvRadius.x * deltaShape.x;\\n\\\n    float dy = deltaShape.y / czm_twoPi;\\n\\\n#if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)\\n\\\n    // Wrap to ensure dy is not crossing through the unoccupied angle range, where\\n\\\n    // angle to tile coordinate conversions would be more complicated\\n\\\n    float cameraUvAngle = (u_cameraShapePosition.y + czm_pi) / czm_twoPi;\\n\\\n    float cameraUvAngleShift = fract(cameraUvAngle - u_cylinderShapeUvAngleRangeOrigin);\\n\\\n    float rawOutputUvAngle = cameraUvAngleShift + dy;\\n\\\n    float rotation = floor(rawOutputUvAngle);\\n\\\n    dy -= rotation;\\n\\\n#endif\\n\\\n    dy *= u_cylinderLocalToShapeUvAngle.x;\\n\\\n    float dz = u_cylinderLocalToShapeUvHeight.x * deltaShape.z;\\n\\\n    // Convert to tile coordinate changes\\n\\\n    return vec3(dx, dy, dz) * float(1 << u_cameraTileCoordinates.w);\\n\\\n}\\n\\\n\\n\\\nTileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {\\n\\\n    vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);\\n\\\n    vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;\\n\\\n    ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));\\n\\\n    int maxTileCoordinate = (1 << u_cameraTileCoordinates.w) - 1;\\n\\\n    tileCoordinate.x = min(max(0, tileCoordinate.x), maxTileCoordinate);\\n\\\n    tileCoordinate.z = min(max(0, tileCoordinate.z), maxTileCoordinate);\\n\\\n#if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE))\\n\\\n    ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;\\n\\\n    if (tileCoordinate.y < 0) {\\n\\\n        tileCoordinate.y += (maxTileCoordinate + 1);\\n\\\n    } else if (tileCoordinate.y > maxTileCoordinate) {\\n\\\n        tileCoordinate.y -= (maxTileCoordinate + 1);\\n\\\n    }\\n\\\n#else\\n\\\n    tileCoordinate.y = min(max(0, tileCoordinate.y), maxTileCoordinate);\\n\\\n    ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;\\n\\\n#endif\\n\\\n    vec3 tileUv = tileUvSum - vec3(tileCoordinateChange);\\n\\\n    tileUv.x = clamp(tileUv.x, 0.0, 1.0);\\n\\\n#if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE))\\n\\\n    // If there is only one tile spanning 2*PI angle, the coordinate wraps around\\n\\\n    tileUv.y = (u_cameraTileCoordinates.w == 0) ? fract(tileUv.y) : clamp(tileUv.y, 0.0, 1.0);\\n\\\n#else\\n\\\n    tileUv.y = clamp(tileUv.y, 0.0, 1.0);\\n\\\n#endif\\n\\\n    tileUv.z = clamp(tileUv.z, 0.0, 1.0);\\n\\\n    return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);\\n\\\n}\\n\\\n\";\n","//This file is automatically rebuilt by the Cesium build process.\nexport default \"/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY\\n\\\n#define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY\\n\\\n#define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE\\n\\\n#define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED\\n\\\n#define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE\\n\\\n*/\\n\\\n\\n\\\nuniform vec3 u_cameraPositionCartographic; // (longitude, latitude, height) in radians and meters\\n\\\nuniform vec2 u_ellipsoidCurvatureAtLatitude;\\n\\\nuniform mat3 u_ellipsoidEcToEastNorthUp;\\n\\\nuniform vec3 u_ellipsoidRadii;\\n\\\nuniform vec2 u_evoluteScale; // (radii.x ^ 2 - radii.z ^ 2) * vec2(1.0, -1.0) / radii;\\n\\\nuniform vec3 u_ellipsoidInverseRadiiSquared;\\n\\\n#if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) || defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)\\n\\\n    uniform vec3 u_ellipsoidShapeUvLongitudeMinMaxMid;\\n\\\n#endif\\n\\\n#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)\\n\\\n    uniform vec2 u_ellipsoidLocalToShapeUvLongitude; // x = scale, y = offset\\n\\\n    uniform float u_ellipsoidShapeUvLongitudeRangeOrigin;\\n\\\n#endif\\n\\\n#if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)\\n\\\n    uniform vec2 u_ellipsoidLocalToShapeUvLatitude; // x = scale, y = offset\\n\\\n#endif\\n\\\nuniform float u_ellipsoidInverseHeightDifference;\\n\\\n\\n\\\nuniform ivec4 u_cameraTileCoordinates;\\n\\\nuniform vec3 u_cameraTileUv;\\n\\\n\\n\\\n// robust iterative solution without trig functions\\n\\\n// https://github.com/0xfaded/ellipse_demo/issues/1\\n\\\n// https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse\\n\\\n// Extended to return radius of curvature along with the point\\n\\\nvec3 nearestPointAndRadiusOnEllipse(vec2 pos, vec2 radii) {\\n\\\n    vec2 p = abs(pos);\\n\\\n    vec2 inverseRadii = 1.0 / radii;\\n\\\n\\n\\\n    // We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t))\\n\\\n    // but store the cos and sin of t in a vec2 for efficiency.\\n\\\n    // Initial guess: t = pi/4\\n\\\n    vec2 tTrigs = vec2(0.7071067811865476);\\n\\\n    // Initial guess of point on ellipsoid\\n\\\n    vec2 v = radii * tTrigs;\\n\\\n    // Center of curvature of the ellipse at v\\n\\\n    vec2 evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs;\\n\\\n\\n\\\n    const int iterations = 3;\\n\\\n    for (int i = 0; i < iterations; ++i) {\\n\\\n        // Find the (approximate) intersection of p - evolute with the ellipsoid.\\n\\\n        vec2 q = normalize(p - evolute) * length(v - evolute);\\n\\\n        // Update the estimate of t.\\n\\\n        tTrigs = (q + evolute) * inverseRadii;\\n\\\n        tTrigs = normalize(clamp(tTrigs, 0.0, 1.0));\\n\\\n        v = radii * tTrigs;\\n\\\n        evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs;\\n\\\n    }\\n\\\n\\n\\\n    return vec3(v * sign(pos), length(v - evolute));\\n\\\n}\\n\\\n\\n\\\nmat3 convertLocalToShapeSpaceDerivative(in vec3 position) {\\n\\\n    vec3 east = normalize(vec3(-position.y, position.x, 0.0));\\n\\\n\\n\\\n    // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z)\\n\\\n    // (assume radii.y == radii.x) and find the nearest point on the ellipse and its normal\\n\\\n    float distanceFromZAxis = length(position.xy);\\n\\\n    vec2 posEllipse = vec2(distanceFromZAxis, position.z);\\n\\\n    vec3 surfacePointAndRadius = nearestPointAndRadiusOnEllipse(posEllipse, u_ellipsoidRadii.xz);\\n\\\n    vec2 surfacePoint = surfacePointAndRadius.xy;\\n\\\n\\n\\\n    vec2 normal2d = normalize(surfacePoint * u_ellipsoidInverseRadiiSquared.xz);\\n\\\n    vec3 north = vec3(-normal2d.y * normalize(position.xy), abs(normal2d.x));\\n\\\n\\n\\\n    float heightSign = length(posEllipse) < length(surfacePoint) ? -1.0 : 1.0;\\n\\\n    float height = heightSign * length(posEllipse - surfacePoint);\\n\\\n    vec3 up = normalize(cross(east, north));\\n\\\n\\n\\\n    return mat3(east / distanceFromZAxis, north / (surfacePointAndRadius.z + height), up);\\n\\\n}\\n\\\n\\n\\\nvec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {\\n\\\n    // Convert from [0, 1] to radians [-pi, pi]\\n\\\n    float longitude = shapeUv.x * czm_twoPi;\\n\\\n    #if defined (ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)\\n\\\n        longitude /= u_ellipsoidLocalToShapeUvLongitude.x;\\n\\\n    #endif\\n\\\n\\n\\\n    // Convert from [0, 1] to radians [-pi/2, pi/2]\\n\\\n    float latitude = shapeUv.y * czm_pi;\\n\\\n    #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)\\n\\\n        latitude /= u_ellipsoidLocalToShapeUvLatitude.x;\\n\\\n    #endif\\n\\\n\\n\\\n    float height = shapeUv.z / u_ellipsoidInverseHeightDifference;\\n\\\n\\n\\\n    return vec3(longitude, latitude, height);\\n\\\n}\\n\\\n\\n\\\nvec3 convertEcToDeltaShape(in vec3 positionEC) {\\n\\\n    vec3 enu = u_ellipsoidEcToEastNorthUp * positionEC;\\n\\\n\\n\\\n    // 1. Compute the change in longitude from the camera to the ENU point\\n\\\n    // First project the camera and ENU positions to the equatorial XY plane,\\n\\\n    // positioning the camera on the +x axis, so that enu.x projects along the +y axis\\n\\\n    float cosLatitude = cos(u_cameraPositionCartographic.y);\\n\\\n    float sinLatitude = sin(u_cameraPositionCartographic.y);\\n\\\n    float primeVerticalRadius = 1.0 / u_ellipsoidCurvatureAtLatitude.x;\\n\\\n    vec2 cameraXY = vec2((primeVerticalRadius + u_cameraPositionCartographic.z) * cosLatitude, 0.0);\\n\\\n    // Note precision loss in positionXY.x if length(enu) << length(cameraXY)\\n\\\n    vec2 positionXY = cameraXY + vec2(-enu.y * sinLatitude + enu.z * cosLatitude, enu.x);\\n\\\n    float dLongitude = atan(positionXY.y, positionXY.x);\\n\\\n\\n\\\n    // 2. Find the longitude component of positionXY, by rotating about Z until the y component is zero.\\n\\\n    // Use the versine  to compute the change in x directly from the change in angle:\\n\\\n    //   versine(angle) = 2 * sin^2(angle/2)\\n\\\n    float sinHalfLongitude = sin(dLongitude / 2.0);\\n\\\n    float dx = length(positionXY) * 2.0 * sinHalfLongitude * sinHalfLongitude;\\n\\\n    // Rotate longitude component back to ENU North and Up, and remove from enu\\n\\\n    enu += vec3(-enu.x, -dx * sinLatitude, dx * cosLatitude);\\n\\\n\\n\\\n    // 3. Compute the change in latitude from the camera to the ENU point.\\n\\\n    // First project the camera and ENU positions to the meridional ZX plane,\\n\\\n    // positioning the camera on the +Z axis, so that enu.y maps to the +X axis.\\n\\\n    float meridionalRadius = 1.0 / u_ellipsoidCurvatureAtLatitude.y;\\n\\\n    vec2 cameraZX = vec2(meridionalRadius + u_cameraPositionCartographic.z, 0.0);\\n\\\n    vec2 positionZX = cameraZX + vec2(enu.z, enu.y);\\n\\\n    float dLatitude = atan(positionZX.y, positionZX.x);\\n\\\n\\n\\\n    // 4. Compute the change in height above the ellipsoid\\n\\\n    // Find the change in enu.z associated with rotating the point to the latitude of the camera\\n\\\n    float sinHalfLatitude = sin(dLatitude / 2.0);\\n\\\n    float dz = length(positionZX) * 2.0 * sinHalfLatitude * sinHalfLatitude;\\n\\\n    // The remaining change in enu.z is the change in height above the ellipsoid\\n\\\n    float dHeight = enu.z + dz;\\n\\\n\\n\\\n    return vec3(dLongitude, dLatitude, dHeight);\\n\\\n}\\n\\\n\\n\\\nvec3 convertEcToDeltaTile(in vec3 positionEC) {\\n\\\n    vec3 deltaShape = convertEcToDeltaShape(positionEC);\\n\\\n    // Convert to tileset coordinates in [0, 1]\\n\\\n    float dx = deltaShape.x / czm_twoPi;\\n\\\n\\n\\\n#if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE))\\n\\\n    // Wrap to ensure dx is not crossing through the unoccupied angle range, where\\n\\\n    // angle to tile coordinate conversions would be more complicated\\n\\\n    float cameraUvLongitude = (u_cameraPositionCartographic.x + czm_pi) / czm_twoPi;\\n\\\n    float cameraUvLongitudeShift = fract(cameraUvLongitude - u_ellipsoidShapeUvLongitudeRangeOrigin);\\n\\\n    float rawOutputUvLongitude = cameraUvLongitudeShift + dx;\\n\\\n    float rotation = floor(rawOutputUvLongitude);\\n\\\n    dx -= rotation;\\n\\\n    dx *= u_ellipsoidLocalToShapeUvLongitude.x;\\n\\\n#endif\\n\\\n\\n\\\n    float dy = deltaShape.y / czm_pi;\\n\\\n#if (defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE))\\n\\\n    dy *= u_ellipsoidLocalToShapeUvLatitude.x;\\n\\\n#endif\\n\\\n\\n\\\n    float dz = u_ellipsoidInverseHeightDifference * deltaShape.z;\\n\\\n    // Convert to tile coordinate changes\\n\\\n    return vec3(dx, dy, dz) * float(1 << u_cameraTileCoordinates.w);\\n\\\n}\\n\\\n\\n\\\nTileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {\\n\\\n    vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);\\n\\\n    vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;\\n\\\n    ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));\\n\\\n    int maxTileCoordinate = (1 << u_cameraTileCoordinates.w) - 1;\\n\\\n    tileCoordinate.y = min(max(0, tileCoordinate.y), maxTileCoordinate);\\n\\\n    tileCoordinate.z = min(max(0, tileCoordinate.z), maxTileCoordinate);\\n\\\n#if (!defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE))\\n\\\n    ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;\\n\\\n    if (tileCoordinate.x < 0) {\\n\\\n        tileCoordinate.x += (maxTileCoordinate + 1);\\n\\\n    } else if (tileCoordinate.x > maxTileCoordinate) {\\n\\\n        tileCoordinate.x -= (maxTileCoordinate + 1);\\n\\\n    }\\n\\\n#else\\n\\\n    tileCoordinate.x = min(max(0, tileCoordinate.x), maxTileCoordinate);\\n\\\n    ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;\\n\\\n#endif\\n\\\n    vec3 tileUv = tileUvSum - vec3(tileCoordinateChange);\\n\\\n#if (!defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE))\\n\\\n    // If there is only one tile spanning 2*PI angle, the coordinate wraps around\\n\\\n    tileUv.x = (u_cameraTileCoordinates.w == 0) ? fract(tileUv.x) : clamp(tileUv.x, 0.0, 1.0);\\n\\\n#else\\n\\\n    tileUv.x = clamp(tileUv.x, 0.0, 1.0);\\n\\\n#endif\\n\\\n    tileUv.y = clamp(tileUv.y, 0.0, 1.0);\\n\\\n    tileUv.z = clamp(tileUv.z, 0.0, 1.0);\\n\\\n    return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);\\n\\\n}\\n\\\n\";\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport Clock from \"../Core/Clock.js\";\nimport Frozen from \"../Core/Frozen.js\";\nimport defined from \"../Core/defined.js\";\nimport destroyObject from \"../Core/destroyObject.js\";\nimport DeveloperError from \"../Core/DeveloperError.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport Event from \"../Core/Event.js\";\nimport EventHelper from \"../Core/EventHelper.js\";\nimport FeatureDetection from \"../Core/FeatureDetection.js\";\nimport formatError from \"../Core/formatError.js\";\nimport HeadingPitchRange from \"../Core/HeadingPitchRange.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport BoundingSphereState from \"../DataSources/BoundingSphereState.js\";\nimport DataSourceCollection from \"../DataSources/DataSourceCollection.js\";\nimport DataSourceDisplay from \"../DataSources/DataSourceDisplay.js\";\nimport EntityView from \"../DataSources/EntityView.js\";\nimport getElement from \"../DataSources/getElement.js\";\nimport Property from \"../DataSources/Property.js\";\nimport Cesium3DTileset from \"../Scene/Cesium3DTileset.js\";\nimport computeFlyToLocationForRectangle from \"../Scene/computeFlyToLocationForRectangle.js\";\nimport Globe from \"../Scene/Globe.js\";\nimport ImageryLayer from \"../Scene/ImageryLayer.js\";\nimport Moon from \"../Scene/Moon.js\";\nimport Scene from \"../Scene/Scene.js\";\nimport SceneMode from \"../Scene/SceneMode.js\";\nimport ScreenSpaceEventHandler from \"../Core/ScreenSpaceEventHandler.js\";\nimport ShadowMode from \"../Scene/ShadowMode.js\";\nimport SkyAtmosphere from \"../Scene/SkyAtmosphere.js\";\nimport SkyBox from \"../Scene/SkyBox.js\";\nimport Sun from \"../Scene/Sun.js\";\nimport TimeDynamicPointCloud from \"../Scene/TimeDynamicPointCloud.js\";\nimport VoxelPrimitive from \"../Scene/VoxelPrimitive.js\";\n\nfunction trackDataSourceClock(clock, dataSource) {\n  if (defined(dataSource)) {\n    const dataSourceClock = dataSource.clock;\n    if (defined(dataSourceClock)) {\n      dataSourceClock.getValue(clock);\n    }\n  }\n}\n\nfunction startRenderLoop(widget) {\n  widget._renderLoopRunning = true;\n\n  let lastFrameTime = 0;\n  function render(frameTime) {\n    if (widget.isDestroyed()) {\n      return;\n    }\n\n    if (widget._useDefaultRenderLoop) {\n      try {\n        const targetFrameRate = widget._targetFrameRate;\n        if (!defined(targetFrameRate)) {\n          widget.resize();\n          widget.render();\n          requestAnimationFrame(render);\n        } else {\n          const interval = 1000.0 / targetFrameRate;\n          const delta = frameTime - lastFrameTime;\n\n          if (delta > interval) {\n            widget.resize();\n            widget.render();\n            lastFrameTime = frameTime - (delta % interval);\n          }\n          requestAnimationFrame(render);\n        }\n      } catch (error) {\n        widget._useDefaultRenderLoop = false;\n        widget._renderLoopRunning = false;\n        if (widget._showRenderLoopErrors) {\n          const title =\n            \"An error occurred while rendering.  Rendering has stopped.\";\n          widget.showErrorPanel(title, undefined, error);\n        }\n      }\n    } else {\n      widget._renderLoopRunning = false;\n    }\n  }\n\n  requestAnimationFrame(render);\n}\n\nfunction configurePixelRatio(widget) {\n  let pixelRatio = widget._useBrowserRecommendedResolution\n    ? 1.0\n    : window.devicePixelRatio;\n  pixelRatio *= widget._resolutionScale;\n  if (defined(widget._scene)) {\n    widget._scene.pixelRatio = pixelRatio;\n  }\n\n  return pixelRatio;\n}\n\nfunction configureCanvasSize(widget) {\n  const canvas = widget._canvas;\n  let width = canvas.clientWidth;\n  let height = canvas.clientHeight;\n  const pixelRatio = configurePixelRatio(widget);\n\n  widget._canvasClientWidth = width;\n  widget._canvasClientHeight = height;\n\n  width *= pixelRatio;\n  height *= pixelRatio;\n\n  canvas.width = width;\n  canvas.height = height;\n\n  widget._canRender = width !== 0 && height !== 0;\n  widget._lastDevicePixelRatio = window.devicePixelRatio;\n}\n\nfunction configureCameraFrustum(widget) {\n  const canvas = widget._canvas;\n  const width = canvas.width;\n  const height = canvas.height;\n  if (width !== 0 && height !== 0) {\n    const frustum = widget._scene.camera.frustum;\n    if (defined(frustum.aspectRatio)) {\n      frustum.aspectRatio = width / height;\n    } else {\n      frustum.top = frustum.right * (height / width);\n      frustum.bottom = -frustum.top;\n    }\n  }\n}\n\n/**\n * A widget containing a Cesium scene.\n *\n * @alias CesiumWidget\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {object} [options] Object with the following properties:\n * @param {Clock} [options.clock=new Clock()] The clock to use to control current time.\n * @param {boolean} [options.shouldAnimate=false] <code>true</code> if the clock should attempt to advance simulation time by default, <code>false</code> otherwise.\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The default ellipsoid.\n * @param {ImageryLayer|false} [options.baseLayer=ImageryLayer.fromWorldImagery()] The bottommost imagery layer applied to the globe. If set to <code>false</code>, no imagery provider will be added.\n * @param {TerrainProvider} [options.terrainProvider=new EllipsoidTerrainProvider(options.ellipsoid)] The terrain provider.\n * @param {Terrain} [options.terrain] A terrain object which handles asynchronous terrain provider. Can only specify if options.terrainProvider is undefined.\n * @param {SkyBox| false} [options.skyBox] The skybox used to render the stars. When <code>undefined</code> and the WGS84 ellipsoid used, the default stars are used. If set to <code>false</code>, no skyBox, Sun, or Moon will be added.\n * @param {SkyAtmosphere | false} [options.skyAtmosphere] Blue sky, and the glow around the Earth's limb. Enabled when the default ellipsoid used. Set to <code>false</code> to turn it off.\n * @param {SceneMode} [options.sceneMode=SceneMode.SCENE3D] The initial scene mode.\n * @param {boolean} [options.scene3DOnly=false] When <code>true</code>, each geometry instance will only be rendered in 3D to save GPU memory.\n * @param {boolean} [options.orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency.\n * @param {MapProjection} [options.mapProjection=new GeographicProjection(options.ellipsoid)] The map projection to use in 2D and Columbus View modes.\n * @param {Globe | false} [options.globe=new Globe(options.ellipsoid)] The globe to use in the scene.  If set to <code>false</code>, no globe will be added and the sky atmosphere will be hidden by default.\n * @param {boolean} [options.useDefaultRenderLoop=true] True if this widget should control the render loop, false otherwise.\n * @param {boolean} [options.useBrowserRecommendedResolution=true] If true, render at the browser's recommended resolution and ignore <code>window.devicePixelRatio</code>.\n * @param {number} [options.targetFrameRate] The target frame rate when using the default render loop.\n * @param {boolean} [options.showRenderLoopErrors=true] If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs.\n * @param {boolean} [options.automaticallyTrackDataSourceClocks=true] If true, this widget will automatically track the clock settings of newly added DataSources, updating if the DataSource's clock changes.  Set this to false if you want to configure the clock independently.\n * @param {ContextOptions} [options.contextOptions] Context and WebGL creation properties passed to {@link Scene}.\n * @param {Element|string} [options.creditContainer] The DOM element or ID that will contain the {@link CreditDisplay}.  If not specified, the credits are added\n *        to the bottom of the widget itself.\n * @param {Element|string} [options.creditViewport] The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}.  If not specified, it will appear over the widget itself.\n * @param {DataSourceCollection} [options.dataSources=new DataSourceCollection()] The collection of data sources visualized by the widget.  If this parameter is provided,\n *                               the instance is assumed to be owned by the caller and will not be destroyed when the widget is destroyed.\n * @param {boolean} [options.shadows=false] Determines if shadows are cast by light sources.\n * @param {ShadowMode} [options.terrainShadows=ShadowMode.RECEIVE_ONLY] Determines if the terrain casts or receives shadows from light sources.\n * @param {MapMode2D} [options.mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n * @param {boolean} [options.blurActiveElementOnCanvasFocus=true] If true, the active element will blur when the widget's canvas is clicked. Setting this to false is useful for cases when the canvas is clicked only for retrieving position or an entity data without actually meaning to set the canvas to be the active element.\n * @param {boolean} [options.requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling improves performance of the application, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @param {number} [options.maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @param {number} [options.msaaSamples=4] If provided, this value controls the rate of multisample antialiasing. Typical multisampling rates are 2, 4, and sometimes 8 samples per pixel. Higher sampling rates of MSAA may impact performance in exchange for improved visual quality. This value only applies to WebGL2 contexts that support multisample render targets. Set to 1 to disable MSAA.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=cesium-widget|Cesium Sandcastle Cesium Widget Demo}\n *\n * @example\n * // For each example, include a link to CesiumWidget.css stylesheet in HTML head,\n * // and in the body, include: <div id=\"cesiumContainer\"></div>\n *\n * // Widget with no terrain and default Bing Maps imagery provider.\n * const widget = new Cesium.CesiumWidget(\"cesiumContainer\");\n *\n * // Widget with ion imagery and Cesium World Terrain.\n * const widget2 = new Cesium.CesiumWidget(\"cesiumContainer\", {\n *     baseLayer: Cesium.ImageryLayer.fromWorldTerrain(),\n *     terrain: Cesium.Terrain.fromWorldTerrain()\n *     skyBox: new Cesium.SkyBox({\n *       sources: {\n *         positiveX: \"stars/TychoSkymapII.t3_08192x04096_80_px.jpg\",\n *         negativeX: \"stars/TychoSkymapII.t3_08192x04096_80_mx.jpg\",\n *         positiveY: \"stars/TychoSkymapII.t3_08192x04096_80_py.jpg\",\n *         negativeY: \"stars/TychoSkymapII.t3_08192x04096_80_my.jpg\",\n *         positiveZ: \"stars/TychoSkymapII.t3_08192x04096_80_pz.jpg\",\n *         negativeZ: \"stars/TychoSkymapII.t3_08192x04096_80_mz.jpg\"\n *       }\n *     }),\n *     // Show Columbus View map with Web Mercator projection\n *     sceneMode: Cesium.SceneMode.COLUMBUS_VIEW,\n *     mapProjection: new Cesium.WebMercatorProjection()\n * });\n */\nfunction CesiumWidget(container, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //Configure the widget DOM elements\n  const element = document.createElement(\"div\");\n  element.className = \"cesium-widget\";\n  container.appendChild(element);\n\n  const canvas = document.createElement(\"canvas\");\n  const supportsImageRenderingPixelated =\n    FeatureDetection.supportsImageRenderingPixelated();\n  this._supportsImageRenderingPixelated = supportsImageRenderingPixelated;\n  if (supportsImageRenderingPixelated) {\n    canvas.style.imageRendering = FeatureDetection.imageRenderingValue();\n  }\n\n  canvas.oncontextmenu = function () {\n    return false;\n  };\n  canvas.onselectstart = function () {\n    return false;\n  };\n\n  // Interacting with a canvas does not automatically blur the previously focused element.\n  // This leads to unexpected interaction if the last element was an input field.\n  // For example, clicking the mouse wheel could lead to the value in  the field changing\n  // unexpectedly. The solution is to blur whatever has focus as soon as canvas interaction begins.\n  // Although in some cases the active element needs to stay active even after interacting with the canvas,\n  // for example when clicking on it only for getting the data of a clicked position or an entity.\n  // For this case, the `blurActiveElementOnCanvasFocus` can be passed with false to avoid blurring\n  // the active element after interacting with the canvas.\n  function blurActiveElement() {\n    if (canvas !== canvas.ownerDocument.activeElement) {\n      canvas.ownerDocument.activeElement.blur();\n    }\n  }\n\n  const blurActiveElementOnCanvasFocus =\n    options.blurActiveElementOnCanvasFocus ?? true;\n\n  if (blurActiveElementOnCanvasFocus) {\n    canvas.addEventListener(\"mousedown\", blurActiveElement);\n    canvas.addEventListener(\"pointerdown\", blurActiveElement);\n  }\n\n  element.appendChild(canvas);\n\n  const innerCreditContainer = document.createElement(\"div\");\n  innerCreditContainer.className = \"cesium-widget-credits\";\n\n  const creditContainer = defined(options.creditContainer)\n    ? getElement(options.creditContainer)\n    : element;\n  creditContainer.appendChild(innerCreditContainer);\n\n  const creditViewport = defined(options.creditViewport)\n    ? getElement(options.creditViewport)\n    : element;\n\n  const showRenderLoopErrors = options.showRenderLoopErrors ?? true;\n\n  const useBrowserRecommendedResolution =\n    options.useBrowserRecommendedResolution ?? true;\n\n  this._element = element;\n  this._container = container;\n  this._canvas = canvas;\n  this._canvasClientWidth = 0;\n  this._canvasClientHeight = 0;\n  this._lastDevicePixelRatio = 0;\n  this._creditViewport = creditViewport;\n  this._creditContainer = creditContainer;\n  this._innerCreditContainer = innerCreditContainer;\n  this._canRender = false;\n  this._renderLoopRunning = false;\n  this._showRenderLoopErrors = showRenderLoopErrors;\n  this._resolutionScale = 1.0;\n  this._useBrowserRecommendedResolution = useBrowserRecommendedResolution;\n  this._forceResize = false;\n  this._entityView = undefined;\n  this._clockTrackedDataSource = undefined;\n  this._trackedEntity = undefined;\n  this._needTrackedEntityUpdate = false;\n  this._zoomIsFlight = false;\n  this._zoomTarget = undefined;\n  this._zoomPromise = undefined;\n  this._zoomOptions = undefined;\n  this._trackedEntityChanged = new Event();\n  this._allowDataSourcesToSuspendAnimation = true;\n\n  this._clock = defined(options.clock) ? options.clock : new Clock();\n\n  if (defined(options.shouldAnimate)) {\n    this._clock.shouldAnimate = options.shouldAnimate;\n  }\n\n  configureCanvasSize(this);\n\n  try {\n    const ellipsoid = options.ellipsoid ?? Ellipsoid.default;\n\n    const scene = new Scene({\n      canvas: canvas,\n      contextOptions: options.contextOptions,\n      creditContainer: innerCreditContainer,\n      creditViewport: creditViewport,\n      ellipsoid: ellipsoid,\n      mapProjection: options.mapProjection,\n      orderIndependentTranslucency: options.orderIndependentTranslucency,\n      scene3DOnly: options.scene3DOnly ?? false,\n      shadows: options.shadows,\n      mapMode2D: options.mapMode2D,\n      requestRenderMode: options.requestRenderMode,\n      maximumRenderTimeChange: options.maximumRenderTimeChange,\n      depthPlaneEllipsoidOffset: options.depthPlaneEllipsoidOffset,\n      msaaSamples: options.msaaSamples,\n    });\n    this._scene = scene;\n\n    scene.camera.constrainedAxis = Cartesian3.UNIT_Z;\n\n    configurePixelRatio(this);\n    configureCameraFrustum(this);\n\n    let globe = options.globe;\n    if (!defined(globe)) {\n      globe = new Globe(ellipsoid);\n    }\n    if (globe !== false) {\n      scene.globe = globe;\n      scene.globe.shadows = options.terrainShadows ?? ShadowMode.RECEIVE_ONLY;\n    }\n\n    let skyBox = options.skyBox;\n    if (!defined(skyBox) && Ellipsoid.WGS84.equals(ellipsoid)) {\n      skyBox = SkyBox.createEarthSkyBox();\n    }\n    if (skyBox !== false) {\n      scene.skyBox = skyBox;\n      scene.sun = new Sun();\n\n      if (Ellipsoid.WGS84.equals(ellipsoid)) {\n        scene.moon = new Moon();\n      }\n    }\n\n    // Blue sky, and the glow around the Earth's limb.\n    let skyAtmosphere = options.skyAtmosphere;\n    if (!defined(skyAtmosphere) && Ellipsoid.WGS84.equals(ellipsoid)) {\n      skyAtmosphere = new SkyAtmosphere(ellipsoid);\n      skyAtmosphere.show = options.globe !== false && globe.show;\n    }\n    if (skyAtmosphere !== false) {\n      scene.skyAtmosphere = skyAtmosphere;\n    }\n\n    // Set the base imagery layer\n    let baseLayer = options.baseLayer;\n    if (options.globe !== false && baseLayer !== false) {\n      if (!defined(baseLayer)) {\n        baseLayer = ImageryLayer.fromWorldImagery();\n      }\n      scene.imageryLayers.add(baseLayer);\n    }\n\n    // Set the terrain provider if one is provided.\n    if (defined(options.terrainProvider) && options.globe !== false) {\n      scene.terrainProvider = options.terrainProvider;\n    }\n\n    if (defined(options.terrain) && options.globe !== false) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(options.terrainProvider)) {\n        throw new DeveloperError(\n          \"Specify either options.terrainProvider or options.terrain.\",\n        );\n      }\n      //>>includeEnd('debug');\n\n      scene.setTerrain(options.terrain);\n    }\n\n    this._screenSpaceEventHandler = new ScreenSpaceEventHandler(canvas);\n\n    if (defined(options.sceneMode)) {\n      if (options.sceneMode === SceneMode.SCENE2D) {\n        this._scene.morphTo2D(0);\n      }\n      if (options.sceneMode === SceneMode.COLUMBUS_VIEW) {\n        this._scene.morphToColumbusView(0);\n      }\n    }\n\n    this._useDefaultRenderLoop = undefined;\n    this.useDefaultRenderLoop = options.useDefaultRenderLoop ?? true;\n\n    this._targetFrameRate = undefined;\n    this.targetFrameRate = options.targetFrameRate;\n\n    const that = this;\n    this._onRenderError = function (scene, error) {\n      that._useDefaultRenderLoop = false;\n      that._renderLoopRunning = false;\n      if (that._showRenderLoopErrors) {\n        const title =\n          \"An error occurred while rendering.  Rendering has stopped.\";\n        that.showErrorPanel(title, undefined, error);\n      }\n    };\n    scene.renderError.addEventListener(this._onRenderError);\n\n    let dataSourceCollection = options.dataSources;\n    let destroyDataSourceCollection = false;\n    if (!defined(dataSourceCollection)) {\n      dataSourceCollection = new DataSourceCollection();\n      destroyDataSourceCollection = true;\n    }\n\n    const dataSourceDisplay = new DataSourceDisplay({\n      scene: scene,\n      dataSourceCollection: dataSourceCollection,\n    });\n\n    const eventHelper = new EventHelper();\n    this._dataSourceChangedListeners = {};\n    this._automaticallyTrackDataSourceClocks =\n      options.automaticallyTrackDataSourceClocks ?? true;\n\n    this._dataSourceCollection = dataSourceCollection;\n    this._destroyDataSourceCollection = destroyDataSourceCollection;\n    this._dataSourceDisplay = dataSourceDisplay;\n    this._eventHelper = eventHelper;\n    this._canAnimateUpdateCallback = this._updateCanAnimate;\n\n    eventHelper.add(this._clock.onTick, CesiumWidget.prototype._onTick, this);\n    eventHelper.add(\n      scene.morphStart,\n      CesiumWidget.prototype._clearTrackedObject,\n      this,\n    );\n\n    //Listen to data source events in order to track clock changes.\n    eventHelper.add(\n      dataSourceCollection.dataSourceAdded,\n      CesiumWidget.prototype._onDataSourceAdded,\n      this,\n    );\n    eventHelper.add(\n      dataSourceCollection.dataSourceRemoved,\n      CesiumWidget.prototype._onDataSourceRemoved,\n      this,\n    );\n\n    eventHelper.add(scene.postRender, CesiumWidget.prototype._postRender, this);\n\n    // We need to subscribe to the data sources and collections so that we can clear the\n    // tracked object when it is removed from the scene.\n    // Subscribe to current data sources\n    const dataSourceLength = dataSourceCollection.length;\n    for (let i = 0; i < dataSourceLength; i++) {\n      this._dataSourceAdded(dataSourceCollection, dataSourceCollection.get(i));\n    }\n    this._dataSourceAdded(undefined, dataSourceDisplay.defaultDataSource);\n\n    // Hook up events so that we can subscribe to future sources.\n    eventHelper.add(\n      dataSourceCollection.dataSourceAdded,\n      CesiumWidget.prototype._dataSourceAdded,\n      this,\n    );\n    eventHelper.add(\n      dataSourceCollection.dataSourceRemoved,\n      CesiumWidget.prototype._dataSourceRemoved,\n      this,\n    );\n  } catch (error) {\n    if (showRenderLoopErrors) {\n      const title = \"Error constructing CesiumWidget.\";\n      const message =\n        'Visit <a href=\"http://get.webgl.org\">http://get.webgl.org</a> to verify that your web browser and hardware support WebGL.  Consider trying a different web browser or updating your video drivers.  Detailed error information is below:';\n      this.showErrorPanel(title, message, error);\n    }\n    throw error;\n  }\n}\n\nObject.defineProperties(CesiumWidget.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {Element}\n   * @readonly\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the canvas.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {HTMLCanvasElement}\n   * @readonly\n   */\n  canvas: {\n    get: function () {\n      return this._canvas;\n    },\n  },\n\n  /**\n   * Gets the credit container.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {Element}\n   * @readonly\n   */\n  creditContainer: {\n    get: function () {\n      return this._creditContainer;\n    },\n  },\n\n  /**\n   * Gets the credit viewport\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {Element}\n   * @readonly\n   */\n  creditViewport: {\n    get: function () {\n      return this._creditViewport;\n    },\n  },\n\n  /**\n   * Gets the scene.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {Scene}\n   * @readonly\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets the collection of image layers that will be rendered on the globe.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {ImageryLayerCollection}\n   * @readonly\n   */\n  imageryLayers: {\n    get: function () {\n      return this._scene.imageryLayers;\n    },\n  },\n\n  /**\n   * The terrain provider providing surface geometry for the globe.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {TerrainProvider}\n   */\n  terrainProvider: {\n    get: function () {\n      return this._scene.terrainProvider;\n    },\n    set: function (terrainProvider) {\n      this._scene.terrainProvider = terrainProvider;\n    },\n  },\n\n  /**\n   * Manages the list of credits to display on screen and in the lightbox.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {CreditDisplay}\n   */\n  creditDisplay: {\n    get: function () {\n      return this._scene.frameState.creditDisplay;\n    },\n  },\n\n  /**\n   * Gets the display used for {@link DataSource} visualization.\n   * @memberof CesiumWidget.prototype\n   * @type {DataSourceDisplay}\n   * @readonly\n   */\n  dataSourceDisplay: {\n    get: function () {\n      return this._dataSourceDisplay;\n    },\n  },\n\n  /**\n   * Gets the collection of entities not tied to a particular data source.\n   * This is a shortcut to [dataSourceDisplay.defaultDataSource.entities]{@link CesiumWidget#dataSourceDisplay}.\n   * @memberof CesiumWidget.prototype\n   * @type {EntityCollection}\n   * @readonly\n   */\n  entities: {\n    get: function () {\n      return this._dataSourceDisplay.defaultDataSource.entities;\n    },\n  },\n\n  /**\n   * Gets the set of {@link DataSource} instances to be visualized.\n   * @memberof CesiumWidget.prototype\n   * @type {DataSourceCollection}\n   * @readonly\n   */\n  dataSources: {\n    get: function () {\n      return this._dataSourceCollection;\n    },\n  },\n\n  /**\n   * Gets the camera.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {Camera}\n   * @readonly\n   */\n  camera: {\n    get: function () {\n      return this._scene.camera;\n    },\n  },\n\n  /**\n   * Gets the default ellipsoid for the scene.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {Ellipsoid}\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this._scene.ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the clock.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {Clock}\n   * @readonly\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n  },\n\n  /**\n   * Gets the screen space event handler.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {ScreenSpaceEventHandler}\n   * @readonly\n   */\n  screenSpaceEventHandler: {\n    get: function () {\n      return this._screenSpaceEventHandler;\n    },\n  },\n\n  /**\n   * Gets or sets the target frame rate of the widget when <code>useDefaultRenderLoop</code>\n   * is true. If undefined, the browser's requestAnimationFrame implementation\n   * determines the frame rate.  If defined, this value must be greater than 0.  A value higher\n   * than the underlying requestAnimationFrame implementation will have no effect.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {number}\n   */\n  targetFrameRate: {\n    get: function () {\n      return this._targetFrameRate;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (value <= 0) {\n        throw new DeveloperError(\n          \"targetFrameRate must be greater than 0, or undefined.\",\n        );\n      }\n      //>>includeEnd('debug');\n      this._targetFrameRate = value;\n    },\n  },\n\n  /**\n   * Gets or sets whether or not this widget should control the render loop.\n   * If true the widget will use requestAnimationFrame to\n   * perform rendering and resizing of the widget, as well as drive the\n   * simulation clock. If set to false, you must manually call the\n   * <code>resize</code>, <code>render</code> methods as part of a custom\n   * render loop.  If an error occurs during rendering, {@link Scene}'s\n   * <code>renderError</code> event will be raised and this property\n   * will be set to false.  It must be set back to true to continue rendering\n   * after the error.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {boolean}\n   */\n  useDefaultRenderLoop: {\n    get: function () {\n      return this._useDefaultRenderLoop;\n    },\n    set: function (value) {\n      if (this._useDefaultRenderLoop !== value) {\n        this._useDefaultRenderLoop = value;\n        if (value && !this._renderLoopRunning) {\n          startRenderLoop(this);\n        }\n      }\n    },\n  },\n\n  /**\n   * Gets or sets a scaling factor for rendering resolution.  Values less than 1.0 can improve\n   * performance on less powerful devices while values greater than 1.0 will render at a higher\n   * resolution and then scale down, resulting in improved visual fidelity.\n   * For example, if the widget is laid out at a size of 640x480, setting this value to 0.5\n   * will cause the scene to be rendered at 320x240 and then scaled up while setting\n   * it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  resolutionScale: {\n    get: function () {\n      return this._resolutionScale;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (value <= 0) {\n        throw new DeveloperError(\"resolutionScale must be greater than 0.\");\n      }\n      //>>includeEnd('debug');\n      if (this._resolutionScale !== value) {\n        this._resolutionScale = value;\n        this._forceResize = true;\n      }\n    },\n  },\n\n  /**\n   * Boolean flag indicating if the browser's recommended resolution is used.\n   * If true, the browser's device pixel ratio is ignored and 1.0 is used instead,\n   * effectively rendering based on CSS pixels instead of device pixels. This can improve\n   * performance on less powerful devices that have high pixel density. When false, rendering\n   * will be in device pixels. {@link CesiumWidget#resolutionScale} will still take effect whether\n   * this flag is true or false.\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {boolean}\n   * @default true\n   */\n  useBrowserRecommendedResolution: {\n    get: function () {\n      return this._useBrowserRecommendedResolution;\n    },\n    set: function (value) {\n      if (this._useBrowserRecommendedResolution !== value) {\n        this._useBrowserRecommendedResolution = value;\n        this._forceResize = true;\n      }\n    },\n  },\n\n  /**\n   * Gets or sets whether or not data sources can temporarily pause\n   * animation in order to avoid showing an incomplete picture to the user.\n   * For example, if asynchronous primitives are being processed in the\n   * background, the clock will not advance until the geometry is ready.\n   *\n   * @memberof CesiumWidget.prototype\n   *\n   * @type {boolean}\n   */\n  allowDataSourcesToSuspendAnimation: {\n    get: function () {\n      return this._allowDataSourcesToSuspendAnimation;\n    },\n    set: function (value) {\n      this._allowDataSourcesToSuspendAnimation = value;\n    },\n  },\n\n  /**\n   * Gets or sets the Entity instance currently being tracked by the camera.\n   * @memberof CesiumWidget.prototype\n   * @type {Entity | undefined}\n   */\n  trackedEntity: {\n    get: function () {\n      return this._trackedEntity;\n    },\n    set: function (value) {\n      if (this._trackedEntity !== value) {\n        this._trackedEntity = value;\n\n        //Cancel any pending zoom\n        cancelZoom(this);\n\n        const scene = this.scene;\n        const sceneMode = scene.mode;\n\n        //Stop tracking\n        if (!defined(value) || !defined(value.position)) {\n          this._needTrackedEntityUpdate = false;\n          if (\n            sceneMode === SceneMode.COLUMBUS_VIEW ||\n            sceneMode === SceneMode.SCENE2D\n          ) {\n            scene.screenSpaceCameraController.enableTranslate = true;\n          }\n\n          if (\n            sceneMode === SceneMode.COLUMBUS_VIEW ||\n            sceneMode === SceneMode.SCENE3D\n          ) {\n            scene.screenSpaceCameraController.enableTilt = true;\n          }\n\n          this._entityView = undefined;\n          this.camera.lookAtTransform(Matrix4.IDENTITY);\n        } else {\n          //We can't start tracking immediately, so we set a flag and start tracking\n          //when the bounding sphere is ready (most likely next frame).\n          this._needTrackedEntityUpdate = true;\n        }\n\n        this._trackedEntityChanged.raiseEvent(value);\n        this.scene.requestRender();\n      }\n    },\n  },\n\n  /**\n   * Gets the event that is raised when the tracked entity changes.\n   * @memberof CesiumWidget.prototype\n   * @type {Event}\n   * @readonly\n   */\n  trackedEntityChanged: {\n    get: function () {\n      return this._trackedEntityChanged;\n    },\n  },\n\n  /**\n   * Gets or sets the data source to track with the widget's clock.\n   * @memberof CesiumWidget.prototype\n   * @type {DataSource}\n   */\n  clockTrackedDataSource: {\n    get: function () {\n      return this._clockTrackedDataSource;\n    },\n    set: function (value) {\n      if (this._clockTrackedDataSource !== value) {\n        this._clockTrackedDataSource = value;\n        trackDataSourceClock(this.clock, value);\n      }\n    },\n  },\n});\n\n/**\n * Show an error panel to the user containing a title and a longer error message,\n * which can be dismissed using an OK button.  This panel is displayed automatically\n * when a render loop error occurs, if showRenderLoopErrors was not false when the\n * widget was constructed.\n *\n * @param {string} title The title to be displayed on the error panel.  This string is interpreted as text.\n * @param {string} [message] A helpful, user-facing message to display prior to the detailed error information.  This string is interpreted as HTML.\n * @param {string} [error] The error to be displayed on the error panel.  This string is formatted using {@link formatError} and then displayed as text.\n */\nCesiumWidget.prototype.showErrorPanel = function (title, message, error) {\n  const element = this._element;\n  const overlay = document.createElement(\"div\");\n  overlay.className = \"cesium-widget-errorPanel\";\n\n  const content = document.createElement(\"div\");\n  content.className = \"cesium-widget-errorPanel-content\";\n  overlay.appendChild(content);\n\n  const errorHeader = document.createElement(\"div\");\n  errorHeader.className = \"cesium-widget-errorPanel-header\";\n  errorHeader.appendChild(document.createTextNode(title));\n  content.appendChild(errorHeader);\n\n  const errorPanelScroller = document.createElement(\"div\");\n  errorPanelScroller.className = \"cesium-widget-errorPanel-scroll\";\n  content.appendChild(errorPanelScroller);\n  function resizeCallback() {\n    errorPanelScroller.style.maxHeight = `${Math.max(\n      Math.round(element.clientHeight * 0.9 - 100),\n      30,\n    )}px`;\n  }\n  resizeCallback();\n  if (defined(window.addEventListener)) {\n    window.addEventListener(\"resize\", resizeCallback, false);\n  }\n\n  const hasMessage = defined(message);\n  const hasError = defined(error);\n\n  if (hasMessage || hasError) {\n    const errorMessage = document.createElement(\"div\");\n    errorMessage.className = \"cesium-widget-errorPanel-message\";\n    errorPanelScroller.appendChild(errorMessage);\n\n    if (hasError) {\n      let errorDetails = formatError(error);\n      if (!hasMessage) {\n        if (typeof error === \"string\") {\n          error = new Error(error);\n        }\n\n        message = formatError({\n          name: error.name,\n          message: error.message,\n        });\n        errorDetails = error.stack;\n      }\n\n      //IE8 does not have a console object unless the dev tools are open.\n      if (typeof console !== \"undefined\") {\n        console.error(`${title}\\n${message}\\n${errorDetails}`);\n      }\n\n      const errorMessageDetails = document.createElement(\"div\");\n      errorMessageDetails.className =\n        \"cesium-widget-errorPanel-message-details collapsed\";\n\n      const moreDetails = document.createElement(\"span\");\n      moreDetails.className = \"cesium-widget-errorPanel-more-details\";\n      moreDetails.appendChild(document.createTextNode(\"See more...\"));\n      errorMessageDetails.appendChild(moreDetails);\n\n      errorMessageDetails.onclick = function (e) {\n        errorMessageDetails.removeChild(moreDetails);\n        errorMessageDetails.appendChild(document.createTextNode(errorDetails));\n        errorMessageDetails.className =\n          \"cesium-widget-errorPanel-message-details\";\n        content.className = \"cesium-widget-errorPanel-content expanded\";\n        errorMessageDetails.onclick = undefined;\n      };\n\n      errorPanelScroller.appendChild(errorMessageDetails);\n    }\n\n    errorMessage.innerHTML = `<p>${message}</p>`;\n  }\n\n  const buttonPanel = document.createElement(\"div\");\n  buttonPanel.className = \"cesium-widget-errorPanel-buttonPanel\";\n  content.appendChild(buttonPanel);\n\n  const okButton = document.createElement(\"button\");\n  okButton.setAttribute(\"type\", \"button\");\n  okButton.className = \"cesium-button\";\n  okButton.appendChild(document.createTextNode(\"OK\"));\n  okButton.onclick = function () {\n    if (defined(resizeCallback) && defined(window.removeEventListener)) {\n      window.removeEventListener(\"resize\", resizeCallback, false);\n    }\n    element.removeChild(overlay);\n  };\n\n  buttonPanel.appendChild(okButton);\n\n  element.appendChild(overlay);\n};\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nCesiumWidget.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nCesiumWidget.prototype.destroy = function () {\n  // Unsubscribe from data sources\n  const dataSources = this.dataSources;\n  const dataSourceLength = dataSources.length;\n  for (let i = 0; i < dataSourceLength; i++) {\n    this._dataSourceRemoved(dataSources, dataSources.get(i));\n  }\n  this._dataSourceRemoved(undefined, this._dataSourceDisplay.defaultDataSource);\n\n  this._dataSourceDisplay = this._dataSourceDisplay.destroy();\n\n  if (defined(this._scene)) {\n    this._scene.renderError.removeEventListener(this._onRenderError);\n    this._scene = this._scene.destroy();\n  }\n  this._container.removeChild(this._element);\n  this._creditContainer.removeChild(this._innerCreditContainer);\n\n  this._eventHelper.removeAll();\n\n  if (this._destroyDataSourceCollection) {\n    this._dataSourceCollection = this._dataSourceCollection.destroy();\n  }\n\n  destroyObject(this);\n};\n\n/**\n * Updates the canvas size, camera aspect ratio, and viewport size.\n * This function is called automatically as needed unless\n * <code>useDefaultRenderLoop</code> is set to false.\n */\nCesiumWidget.prototype.resize = function () {\n  const canvas = this._canvas;\n  if (\n    !this._forceResize &&\n    this._canvasClientWidth === canvas.clientWidth &&\n    this._canvasClientHeight === canvas.clientHeight &&\n    this._lastDevicePixelRatio === window.devicePixelRatio\n  ) {\n    return;\n  }\n  this._forceResize = false;\n\n  configureCanvasSize(this);\n  configureCameraFrustum(this);\n\n  this._scene.requestRender();\n};\n\n/**\n * Renders the scene.  This function is called automatically\n * unless <code>useDefaultRenderLoop</code> is set to false;\n */\nCesiumWidget.prototype.render = function () {\n  if (this._canRender) {\n    this._scene.initializeFrame();\n    const currentTime = this._clock.tick();\n    this._scene.render(currentTime);\n  } else {\n    this._clock.tick();\n  }\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._dataSourceAdded = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const entityCollection = dataSource.entities;\n  entityCollection.collectionChanged.addEventListener(\n    CesiumWidget.prototype._onEntityCollectionChanged,\n    this,\n  );\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._dataSourceRemoved = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const entityCollection = dataSource.entities;\n  entityCollection.collectionChanged.removeEventListener(\n    CesiumWidget.prototype._onEntityCollectionChanged,\n    this,\n  );\n\n  if (defined(this.trackedEntity)) {\n    if (\n      entityCollection.getById(this.trackedEntity.id) === this.trackedEntity\n    ) {\n      this.trackedEntity = undefined;\n    }\n  }\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._updateCanAnimate = function (isUpdated) {\n  this._clock.canAnimate = isUpdated;\n};\n\nconst boundingSphereScratch = new BoundingSphere();\n\n/**\n * @private\n */\nCesiumWidget.prototype._onTick = function (clock) {\n  const time = clock.currentTime;\n\n  const isUpdated = this._dataSourceDisplay.update(time);\n  if (this._allowDataSourcesToSuspendAnimation) {\n    this._canAnimateUpdateCallback(isUpdated);\n  }\n\n  const entityView = this._entityView;\n  if (defined(entityView)) {\n    const trackedEntity = this._trackedEntity;\n    const trackedState = this._dataSourceDisplay.getBoundingSphere(\n      trackedEntity,\n      false,\n      entityView.boundingSphere ?? boundingSphereScratch,\n    );\n    if (trackedState === BoundingSphereState.DONE) {\n      entityView.update(time);\n    }\n  }\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._onEntityCollectionChanged = function (\n  collection,\n  added,\n  removed,\n) {\n  const length = removed.length;\n  for (let i = 0; i < length; i++) {\n    const removedObject = removed[i];\n    if (this.trackedEntity === removedObject) {\n      this.trackedEntity = undefined;\n    }\n  }\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._clearTrackedObject = function () {\n  this.trackedEntity = undefined;\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._onDataSourceChanged = function (dataSource) {\n  if (this.clockTrackedDataSource === dataSource) {\n    trackDataSourceClock(this.clock, dataSource);\n  }\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._onDataSourceAdded = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  if (this._automaticallyTrackDataSourceClocks) {\n    this.clockTrackedDataSource = dataSource;\n  }\n  const id = dataSource.entities.id;\n  const removalFunc = this._eventHelper.add(\n    dataSource.changedEvent,\n    CesiumWidget.prototype._onDataSourceChanged,\n    this,\n  );\n  this._dataSourceChangedListeners[id] = removalFunc;\n};\n\n/**\n * @private\n */\nCesiumWidget.prototype._onDataSourceRemoved = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const resetClock = this.clockTrackedDataSource === dataSource;\n  const id = dataSource.entities.id;\n  this._dataSourceChangedListeners[id]();\n  this._dataSourceChangedListeners[id] = undefined;\n  if (resetClock) {\n    const numDataSources = dataSourceCollection.length;\n    if (this._automaticallyTrackDataSourceClocks && numDataSources > 0) {\n      this.clockTrackedDataSource = dataSourceCollection.get(\n        numDataSources - 1,\n      );\n    } else {\n      this.clockTrackedDataSource = undefined;\n    }\n  }\n};\n\n/**\n * Asynchronously sets the camera to view the provided entity, entities, or data source.\n * If the data source is still in the process of loading or the visualization is otherwise still loading,\n * this method waits for the data to be ready before performing the zoom.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise<Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|VoxelPrimitive>} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types.\n * @param {HeadingPitchRange} [offset] The offset from the center of the entity in the local east-north-up reference frame.\n * @returns {Promise<boolean>} A Promise that resolves to true if the zoom was successful or false if the target is not currently visualized in the scene or the zoom was cancelled.\n */\nCesiumWidget.prototype.zoomTo = function (target, offset) {\n  const options = {\n    offset: offset,\n  };\n  return zoomToOrFly(this, target, options, false);\n};\n\n/**\n * Flies the camera to the provided entity, entities, or data source.\n * If the data source is still in the process of loading or the visualization is otherwise still loading,\n * this method waits for the data to be ready before performing the flight.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise<Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|VoxelPrimitive>} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types.\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.duration=3.0] The duration of the flight in seconds.\n * @param {number} [options.maximumHeight] The maximum height at the peak of the flight.\n * @param {HeadingPitchRange} [options.offset] The offset from the target in the local east-north-up reference frame centered at the target.\n * @returns {Promise<boolean>} A Promise that resolves to true if the flight was successful or false if the target is not currently visualized in the scene or the flight was cancelled. //TODO: Cleanup entity mentions\n */\nCesiumWidget.prototype.flyTo = function (target, options) {\n  return zoomToOrFly(this, target, options, true);\n};\n\nfunction zoomToOrFly(that, zoomTarget, options, isFlight) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(zoomTarget)) {\n    throw new DeveloperError(\"zoomTarget is required.\");\n  }\n  //>>includeEnd('debug');\n\n  cancelZoom(that);\n\n  //We can't actually perform the zoom until all visualization is ready and\n  //bounding spheres have been computed.  Therefore we create and return\n  //a deferred which will be resolved as part of the post-render step in the\n  //frame that actually performs the zoom.\n  const zoomPromise = new Promise((resolve) => {\n    that._completeZoom = function (value) {\n      resolve(value);\n    };\n  });\n  that._zoomPromise = zoomPromise;\n  that._zoomIsFlight = isFlight;\n  that._zoomOptions = options;\n\n  Promise.resolve(zoomTarget).then(function (zoomTarget) {\n    //Only perform the zoom if it wasn't cancelled before the promise resolved.\n    if (that._zoomPromise !== zoomPromise) {\n      return;\n    }\n\n    //If the zoom target is a rectangular imagery in an ImageLayer\n    if (zoomTarget instanceof ImageryLayer) {\n      let rectanglePromise;\n\n      if (defined(zoomTarget.imageryProvider)) {\n        rectanglePromise = Promise.resolve(zoomTarget.getImageryRectangle());\n      } else {\n        rectanglePromise = new Promise((resolve) => {\n          const removeListener = zoomTarget.readyEvent.addEventListener(() => {\n            removeListener();\n            resolve(zoomTarget.getImageryRectangle());\n          });\n        });\n      }\n      rectanglePromise\n        .then(function (rectangle) {\n          return computeFlyToLocationForRectangle(rectangle, that.scene);\n        })\n        .then(function (position) {\n          //Only perform the zoom if it wasn't cancelled before the promise was resolved\n          if (that._zoomPromise === zoomPromise) {\n            that._zoomTarget = position;\n          }\n        });\n      return;\n    }\n\n    if (\n      zoomTarget instanceof Cesium3DTileset ||\n      zoomTarget instanceof TimeDynamicPointCloud ||\n      zoomTarget instanceof VoxelPrimitive\n    ) {\n      that._zoomTarget = zoomTarget;\n      return;\n    }\n\n    //If the zoom target is a data source, and it's in the middle of loading, wait for it to finish loading.\n    if (zoomTarget.isLoading && defined(zoomTarget.loadingEvent)) {\n      const removeEvent = zoomTarget.loadingEvent.addEventListener(function () {\n        removeEvent();\n\n        //Only perform the zoom if it wasn't cancelled before the data source finished.\n        if (that._zoomPromise === zoomPromise) {\n          that._zoomTarget = zoomTarget.entities.values.slice(0);\n        }\n      });\n      return;\n    }\n\n    //Zoom target is already an array, just copy it and return.\n    if (Array.isArray(zoomTarget)) {\n      that._zoomTarget = zoomTarget.slice(0);\n      return;\n    }\n\n    //If zoomTarget is an EntityCollection, this will retrieve the array\n    zoomTarget = zoomTarget.values ?? zoomTarget;\n\n    //If zoomTarget is a DataSource, this will retrieve the array.\n    if (defined(zoomTarget.entities)) {\n      zoomTarget = zoomTarget.entities.values;\n    }\n\n    //Zoom target is already an array, just copy it and return.\n    if (Array.isArray(zoomTarget)) {\n      that._zoomTarget = zoomTarget.slice(0);\n    } else {\n      //Single entity\n      that._zoomTarget = [zoomTarget];\n    }\n  });\n\n  that.scene.requestRender();\n  return zoomPromise;\n}\n\nfunction clearZoom(widget) {\n  widget._zoomPromise = undefined;\n  widget._zoomTarget = undefined;\n  widget._zoomOptions = undefined;\n}\n\nfunction cancelZoom(widget) {\n  const zoomPromise = widget._zoomPromise;\n  if (defined(zoomPromise)) {\n    clearZoom(widget);\n    widget._completeZoom(false);\n  }\n}\n\n/**\n * @private\n */\nCesiumWidget.prototype._postRender = function () {\n  updateZoomTarget(this);\n  updateTrackedEntity(this);\n};\n\nconst zoomTargetBoundingSphereScratch = new BoundingSphere();\n\nfunction updateZoomTarget(widget) {\n  const target = widget._zoomTarget;\n  if (!defined(target) || widget.scene.mode === SceneMode.MORPHING) {\n    return;\n  }\n\n  const scene = widget.scene;\n  const camera = scene.camera;\n  const zoomOptions = widget._zoomOptions ?? {};\n  let options;\n  function zoomToBoundingSphere(boundingSphere) {\n    // If offset was originally undefined then give it base value instead of empty object\n    if (!defined(zoomOptions.offset)) {\n      zoomOptions.offset = new HeadingPitchRange(\n        0.0,\n        -0.5,\n        boundingSphere.radius,\n      );\n    }\n\n    options = {\n      offset: zoomOptions.offset,\n      duration: zoomOptions.duration,\n      maximumHeight: zoomOptions.maximumHeight,\n      complete: function () {\n        widget._completeZoom(true);\n      },\n      cancel: function () {\n        widget._completeZoom(false);\n      },\n    };\n\n    if (widget._zoomIsFlight) {\n      camera.flyToBoundingSphere(target.boundingSphere, options);\n    } else {\n      camera.viewBoundingSphere(boundingSphere, zoomOptions.offset);\n      camera.lookAtTransform(Matrix4.IDENTITY);\n\n      // Finish the promise\n      widget._completeZoom(true);\n    }\n\n    clearZoom(widget);\n  }\n\n  if (target instanceof TimeDynamicPointCloud) {\n    if (defined(target.boundingSphere)) {\n      zoomToBoundingSphere(target.boundingSphere);\n      return;\n    }\n\n    // Otherwise, the first \"frame\" needs to have been rendered\n    const removeEventListener = target.frameChanged.addEventListener(\n      function (timeDynamicPointCloud) {\n        zoomToBoundingSphere(timeDynamicPointCloud.boundingSphere);\n        removeEventListener();\n      },\n    );\n    return;\n  }\n\n  if (target instanceof Cesium3DTileset || target instanceof VoxelPrimitive) {\n    zoomToBoundingSphere(target.boundingSphere);\n    return;\n  }\n\n  // If zoomTarget was an ImageryLayer\n  if (target instanceof Cartographic) {\n    options = {\n      destination: scene.ellipsoid.cartographicToCartesian(target),\n      duration: zoomOptions.duration,\n      maximumHeight: zoomOptions.maximumHeight,\n      complete: function () {\n        widget._completeZoom(true);\n      },\n      cancel: function () {\n        widget._completeZoom(false);\n      },\n    };\n\n    if (widget._zoomIsFlight) {\n      camera.flyTo(options);\n    } else {\n      camera.setView(options);\n      widget._completeZoom(true);\n    }\n    clearZoom(widget);\n    return;\n  }\n\n  const entities = target;\n\n  const boundingSpheres = [];\n  for (let i = 0, len = entities.length; i < len; i++) {\n    const state = widget._dataSourceDisplay.getBoundingSphere(\n      entities[i],\n      false,\n      zoomTargetBoundingSphereScratch,\n    );\n\n    if (state === BoundingSphereState.PENDING) {\n      return;\n    } else if (state !== BoundingSphereState.FAILED) {\n      boundingSpheres.push(\n        BoundingSphere.clone(zoomTargetBoundingSphereScratch),\n      );\n    }\n  }\n\n  if (boundingSpheres.length === 0) {\n    cancelZoom(widget);\n    return;\n  }\n\n  // Stop tracking the current entity.\n  widget.trackedEntity = undefined;\n\n  const boundingSphere = BoundingSphere.fromBoundingSpheres(boundingSpheres);\n\n  if (!widget._zoomIsFlight) {\n    camera.viewBoundingSphere(boundingSphere, zoomOptions.offset);\n    camera.lookAtTransform(Matrix4.IDENTITY);\n    clearZoom(widget);\n    widget._completeZoom(true);\n  } else {\n    clearZoom(widget);\n    camera.flyToBoundingSphere(boundingSphere, {\n      duration: zoomOptions.duration,\n      maximumHeight: zoomOptions.maximumHeight,\n      complete: function () {\n        widget._completeZoom(true);\n      },\n      cancel: function () {\n        widget._completeZoom(false);\n      },\n      offset: zoomOptions.offset,\n    });\n  }\n}\n\nconst trackedEntityBoundingSphereScratch = new BoundingSphere();\n\nfunction updateTrackedEntity(widget) {\n  if (!widget._needTrackedEntityUpdate) {\n    return;\n  }\n\n  const trackedEntity = widget._trackedEntity;\n  const currentTime = widget.clock.currentTime;\n\n  //Verify we have a current position at this time. This is only triggered if a position\n  //has become undefined after trackedEntity is set but before the boundingSphere has been\n  //computed. In this case, we will track the entity once it comes back into existence.\n  const currentPosition = Property.getValueOrUndefined(\n    trackedEntity.position,\n    currentTime,\n  );\n\n  if (!defined(currentPosition)) {\n    return;\n  }\n\n  const scene = widget.scene;\n\n  const state = widget._dataSourceDisplay.getBoundingSphere(\n    trackedEntity,\n    false,\n    trackedEntityBoundingSphereScratch,\n  );\n  if (state === BoundingSphereState.PENDING) {\n    return;\n  }\n\n  const sceneMode = scene.mode;\n  if (\n    sceneMode === SceneMode.COLUMBUS_VIEW ||\n    sceneMode === SceneMode.SCENE2D\n  ) {\n    scene.screenSpaceCameraController.enableTranslate = false;\n  }\n\n  if (\n    sceneMode === SceneMode.COLUMBUS_VIEW ||\n    sceneMode === SceneMode.SCENE3D\n  ) {\n    scene.screenSpaceCameraController.enableTilt = false;\n  }\n\n  const bs =\n    state !== BoundingSphereState.FAILED\n      ? trackedEntityBoundingSphereScratch\n      : undefined;\n  widget._entityView = new EntityView(trackedEntity, scene, scene.ellipsoid);\n  widget._entityView.update(currentTime, bs);\n  widget._needTrackedEntityUpdate = false;\n}\n\nexport default CesiumWidget;\n","import formatError from \"../Core/formatError.js\";\n\n/**\n * Creates an adapter function to allow a calculation function to operate as a Web Worker,\n * paired with TaskProcessor, to receive tasks and return results.\n *\n * @function createTaskProcessorWorker\n *\n * @param {createTaskProcessorWorker.WorkerFunction} workerFunction The calculation function,\n *        which takes parameters and returns a result.\n * @returns {createTaskProcessorWorker.TaskProcessorWorkerFunction} A function that adapts the\n *          calculation function to work as a Web Worker onmessage listener with TaskProcessor.\n *\n *\n * @example\n * function doCalculation(parameters, transferableObjects) {\n *   // calculate some result using the inputs in parameters\n *   return result;\n * }\n *\n * return Cesium.createTaskProcessorWorker(doCalculation);\n * // the resulting function is compatible with TaskProcessor\n *\n * @see TaskProcessor\n * @see {@link http://www.w3.org/TR/workers/|Web Workers}\n * @see {@link http://www.w3.org/TR/html5/common-dom-interfaces.html#transferable-objects|Transferable objects}\n */\nfunction createTaskProcessorWorker(workerFunction) {\n  async function onMessageHandler({ data }) {\n    const transferableObjects = [];\n    const responseMessage = {\n      id: data.id,\n      result: undefined,\n      error: undefined,\n    };\n\n    self.CESIUM_BASE_URL = data.baseUrl;\n\n    try {\n      const result = await workerFunction(data.parameters, transferableObjects);\n      responseMessage.result = result;\n    } catch (error) {\n      if (error instanceof Error) {\n        responseMessage.error = {\n          name: error.name,\n          message: error.message,\n          stack: error.stack,\n        };\n      } else {\n        responseMessage.error = error;\n      }\n    }\n\n    if (!data.canTransferArrayBuffer) {\n      transferableObjects.length = 0;\n    }\n\n    try {\n      postMessage(responseMessage, transferableObjects);\n    } catch (error) {\n      // something went wrong trying to post the message, post a simpler\n      // error that we can be sure will be cloneable\n      responseMessage.result = undefined;\n      responseMessage.error = `postMessage failed with error: ${formatError(\n        error,\n      )}\\n  with responseMessage: ${JSON.stringify(responseMessage)}`;\n      postMessage(responseMessage);\n    }\n  }\n\n  function onMessageErrorHandler(event) {\n    postMessage({\n      id: event.data?.id,\n      error: `postMessage failed with error: ${JSON.stringify(event)}`,\n    });\n  }\n\n  self.onmessage = onMessageHandler;\n  self.onmessageerror = onMessageErrorHandler;\n  return self;\n}\n\n/**\n * A function that performs a calculation in a Web Worker.\n * @callback createTaskProcessorWorker.WorkerFunction\n *\n * @param {object} parameters Parameters to the calculation.\n * @param {Array} transferableObjects An array that should be filled with references to objects inside\n *        the result that should be transferred back to the main document instead of copied.\n * @returns {object} The result of the calculation.\n *\n * @example\n * function calculate(parameters, transferableObjects) {\n *   // perform whatever calculation is necessary.\n *   const typedArray = new Float32Array(0);\n *\n *   // typed arrays are transferable\n *   transferableObjects.push(typedArray)\n *\n *   return {\n *      typedArray : typedArray\n *   };\n * }\n */\n\n/**\n * A Web Worker message event handler function that handles the interaction with TaskProcessor,\n * specifically, task ID management and posting a response message containing the result.\n * @callback createTaskProcessorWorker.TaskProcessorWorkerFunction\n *\n * @param {object} event The onmessage event object.\n */\nexport default createTaskProcessorWorker;\n","import {\n  Color,\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n} from \"@cesium/engine\";\nimport subscribeAndEvaluate from \"../subscribeAndEvaluate.js\";\n\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\n\nlet widgetForDrag;\n\nconst gradientEnabledColor0 = Color.fromCssColorString(\n  \"rgba(247,250,255,0.384)\",\n);\nconst gradientEnabledColor1 = Color.fromCssColorString(\n  \"rgba(143,191,255,0.216)\",\n);\nconst gradientEnabledColor2 = Color.fromCssColorString(\n  \"rgba(153,197,255,0.098)\",\n);\nconst gradientEnabledColor3 = Color.fromCssColorString(\n  \"rgba(255,255,255,0.086)\",\n);\n\nconst gradientDisabledColor0 = Color.fromCssColorString(\n  \"rgba(255,255,255,0.267)\",\n);\nconst gradientDisabledColor1 = Color.fromCssColorString(\"rgba(255,255,255,0)\");\n\nconst gradientKnobColor = Color.fromCssColorString(\"rgba(66,67,68,0.3)\");\nconst gradientPointerColor = Color.fromCssColorString(\"rgba(0,0,0,0.5)\");\n\nfunction getElementColor(element) {\n  return Color.fromCssColorString(\n    window.getComputedStyle(element).getPropertyValue(\"color\"),\n  );\n}\n\nconst svgIconsById = {\n  animation_pathReset: {\n    tagName: \"path\",\n    transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n    d: \"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z\",\n  },\n  animation_pathPause: {\n    tagName: \"path\",\n    transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n    d: \"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z\",\n  },\n  animation_pathPlay: {\n    tagName: \"path\",\n    transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n    d: \"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z\",\n  },\n  animation_pathPlayReverse: {\n    tagName: \"path\",\n    transform: \"translate(16,16) scale(-0.85,0.85) translate(-16,-16)\",\n    d: \"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z\",\n  },\n  animation_pathLoop: {\n    tagName: \"path\",\n    transform: \"translate(16,16) scale(0.85) translate(-16,-16)\",\n    d: \"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z\",\n  },\n  animation_pathClock: {\n    tagName: \"path\",\n    transform: \"translate(16,16) scale(0.85) translate(-16,-15.5)\",\n    d: \"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z\",\n  },\n  animation_pathWingButton: {\n    tagName: \"path\",\n    d: \"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z\",\n  },\n  animation_pathPointer: {\n    tagName: \"path\",\n    d: \"M-15,-65,-15,-55,15,-55,15,-65,0,-95z\",\n  },\n  animation_pathSwooshFX: {\n    tagName: \"path\",\n    d: \"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z\",\n  },\n};\n\n//Dynamically builds an SVG element from a JSON object.\nfunction svgFromObject(obj) {\n  const ele = document.createElementNS(svgNS, obj.tagName);\n  for (const field in obj) {\n    if (obj.hasOwnProperty(field) && field !== \"tagName\") {\n      if (field === \"children\") {\n        const len = obj.children.length;\n        for (let i = 0; i < len; ++i) {\n          ele.appendChild(svgFromObject(obj.children[i]));\n        }\n      } else if (field.indexOf(\"xlink:\") === 0) {\n        ele.setAttributeNS(xlinkNS, field.substring(6), obj[field]);\n      } else if (field === \"textContent\") {\n        ele.textContent = obj[field];\n      } else {\n        ele.setAttribute(field, obj[field]);\n      }\n    }\n  }\n  return ele;\n}\n\nfunction svgText(x, y, msg) {\n  const text = document.createElementNS(svgNS, \"text\");\n  text.setAttribute(\"x\", x);\n  text.setAttribute(\"y\", y);\n  text.setAttribute(\"class\", \"cesium-animation-svgText\");\n\n  const tspan = document.createElementNS(svgNS, \"tspan\");\n  tspan.textContent = msg;\n  text.appendChild(tspan);\n  return text;\n}\n\nfunction setShuttleRingPointer(shuttleRingPointer, knobOuter, angle) {\n  shuttleRingPointer.setAttribute(\n    \"transform\",\n    `translate(100,100) rotate(${angle})`,\n  );\n  knobOuter.setAttribute(\"transform\", `rotate(${angle})`);\n}\n\nconst makeColorStringScratch = new Color();\nfunction makeColorString(background, gradient) {\n  const gradientAlpha = gradient.alpha;\n  const backgroundAlpha = 1.0 - gradientAlpha;\n  makeColorStringScratch.red =\n    background.red * backgroundAlpha + gradient.red * gradientAlpha;\n  makeColorStringScratch.green =\n    background.green * backgroundAlpha + gradient.green * gradientAlpha;\n  makeColorStringScratch.blue =\n    background.blue * backgroundAlpha + gradient.blue * gradientAlpha;\n  return makeColorStringScratch.toCssColorString();\n}\n\nfunction rectButton(x, y, path) {\n  const iconInfo = svgIconsById[path];\n\n  const button = {\n    tagName: \"g\",\n    class: \"cesium-animation-rectButton\",\n    transform: `translate(${x},${y})`,\n    children: [\n      {\n        tagName: \"rect\",\n        class: \"cesium-animation-buttonGlow\",\n        width: 32,\n        height: 32,\n        rx: 2,\n        ry: 2,\n      },\n      {\n        tagName: \"rect\",\n        class: \"cesium-animation-buttonMain\",\n        width: 32,\n        height: 32,\n        rx: 4,\n        ry: 4,\n      },\n      {\n        class: \"cesium-animation-buttonPath\",\n        id: path,\n        tagName: iconInfo.tagName,\n        transform: iconInfo.transform,\n        d: iconInfo.d,\n      },\n      {\n        tagName: \"title\",\n        textContent: \"\",\n      },\n    ],\n  };\n  return svgFromObject(button);\n}\n\nfunction wingButton(x, y, path) {\n  const buttonIconInfo = svgIconsById[path];\n  const wingIconInfo = svgIconsById[\"animation_pathWingButton\"];\n\n  const button = {\n    tagName: \"g\",\n    class: \"cesium-animation-rectButton\",\n    transform: `translate(${x},${y})`,\n    children: [\n      {\n        class: \"cesium-animation-buttonGlow\",\n        id: \"animation_pathWingButton\",\n        tagName: wingIconInfo.tagName,\n        d: wingIconInfo.d,\n      },\n      {\n        class: \"cesium-animation-buttonMain\",\n        id: \"animation_pathWingButton\",\n        tagName: wingIconInfo.tagName,\n        d: wingIconInfo.d,\n      },\n      {\n        class: \"cesium-animation-buttonPath\",\n        id: path,\n        tagName: buttonIconInfo.tagName,\n        transform: buttonIconInfo.transform,\n        d: buttonIconInfo.d,\n      },\n      {\n        tagName: \"title\",\n        textContent: \"\",\n      },\n    ],\n  };\n  return svgFromObject(button);\n}\n\nfunction setShuttleRingFromMouseOrTouch(widget, e) {\n  const viewModel = widget._viewModel;\n  const shuttleRingDragging = viewModel.shuttleRingDragging;\n\n  if (shuttleRingDragging && widgetForDrag !== widget) {\n    return;\n  }\n\n  if (\n    e.type === \"mousedown\" ||\n    (shuttleRingDragging && e.type === \"mousemove\") ||\n    (e.type === \"touchstart\" && e.touches.length === 1) ||\n    (shuttleRingDragging && e.type === \"touchmove\" && e.touches.length === 1)\n  ) {\n    const centerX = widget._centerX;\n    const centerY = widget._centerY;\n    const svg = widget._svgNode;\n    const rect = svg.getBoundingClientRect();\n    let clientX;\n    let clientY;\n    if (e.type === \"touchstart\" || e.type === \"touchmove\") {\n      clientX = e.touches[0].clientX;\n      clientY = e.touches[0].clientY;\n    } else {\n      clientX = e.clientX;\n      clientY = e.clientY;\n    }\n\n    if (\n      !shuttleRingDragging &&\n      (clientX > rect.right ||\n        clientX < rect.left ||\n        clientY < rect.top ||\n        clientY > rect.bottom)\n    ) {\n      return;\n    }\n\n    const pointerRect = widget._shuttleRingPointer.getBoundingClientRect();\n\n    const x = clientX - centerX - rect.left;\n    const y = clientY - centerY - rect.top;\n\n    let angle = (Math.atan2(y, x) * 180) / Math.PI + 90;\n    if (angle > 180) {\n      angle -= 360;\n    }\n    const shuttleRingAngle = viewModel.shuttleRingAngle;\n    if (\n      shuttleRingDragging ||\n      (clientX < pointerRect.right &&\n        clientX > pointerRect.left &&\n        clientY > pointerRect.top &&\n        clientY < pointerRect.bottom)\n    ) {\n      widgetForDrag = widget;\n      viewModel.shuttleRingDragging = true;\n      viewModel.shuttleRingAngle = angle;\n    } else if (angle < shuttleRingAngle) {\n      viewModel.slower();\n    } else if (angle > shuttleRingAngle) {\n      viewModel.faster();\n    }\n    e.preventDefault();\n  } else {\n    if (widget === widgetForDrag) {\n      widgetForDrag = undefined;\n    }\n    viewModel.shuttleRingDragging = false;\n  }\n}\n\n//This is a private class for treating an SVG element like a button.\n//If we ever need a general purpose SVG button, we can make this generic.\nfunction SvgButton(svgElement, viewModel) {\n  this._viewModel = viewModel;\n  this.svgElement = svgElement;\n  this._enabled = undefined;\n  this._toggled = undefined;\n\n  const that = this;\n  this._clickFunction = function () {\n    const command = that._viewModel.command;\n    if (command.canExecute) {\n      command();\n    }\n  };\n\n  svgElement.addEventListener(\"click\", this._clickFunction, true);\n\n  //TODO: Since the animation widget uses SVG and has no HTML backing,\n  //we need to wire everything up manually.  Knockout can supposedly\n  //bind to SVG, so we we figure that out we can modify our SVG\n  //to include the binding information directly.\n\n  this._subscriptions = [\n    //\n    subscribeAndEvaluate(viewModel, \"toggled\", this.setToggled, this), //\n    subscribeAndEvaluate(viewModel, \"tooltip\", this.setTooltip, this), //\n    subscribeAndEvaluate(\n      viewModel.command,\n      \"canExecute\",\n      this.setEnabled,\n      this,\n    ),\n  ];\n}\n\nSvgButton.prototype.destroy = function () {\n  this.svgElement.removeEventListener(\"click\", this._clickFunction, true);\n  const subscriptions = this._subscriptions;\n  for (let i = 0, len = subscriptions.length; i < len; i++) {\n    subscriptions[i].dispose();\n  }\n  destroyObject(this);\n};\n\nSvgButton.prototype.isDestroyed = function () {\n  return false;\n};\n\nSvgButton.prototype.setEnabled = function (enabled) {\n  if (this._enabled !== enabled) {\n    this._enabled = enabled;\n\n    if (!enabled) {\n      this.svgElement.setAttribute(\"class\", \"cesium-animation-buttonDisabled\");\n      return;\n    }\n\n    if (this._toggled) {\n      this.svgElement.setAttribute(\n        \"class\",\n        \"cesium-animation-rectButton cesium-animation-buttonToggled\",\n      );\n      return;\n    }\n\n    this.svgElement.setAttribute(\"class\", \"cesium-animation-rectButton\");\n  }\n};\n\nSvgButton.prototype.setToggled = function (toggled) {\n  if (this._toggled !== toggled) {\n    this._toggled = toggled;\n\n    if (this._enabled) {\n      if (toggled) {\n        this.svgElement.setAttribute(\n          \"class\",\n          \"cesium-animation-rectButton cesium-animation-buttonToggled\",\n        );\n      } else {\n        this.svgElement.setAttribute(\"class\", \"cesium-animation-rectButton\");\n      }\n    }\n  }\n};\n\nSvgButton.prototype.setTooltip = function (tooltip) {\n  this.svgElement.getElementsByTagName(\"title\")[0].textContent = tooltip;\n};\n\n/**\n * <span style=\"display: block; text-align: center;\">\n * <img src=\"Images/AnimationWidget.png\" width=\"211\" height=\"142\" alt=\"\" />\n * <br />Animation widget\n * </span>\n * <br /><br />\n * The Animation widget provides buttons for play, pause, and reverse, along with the\n * current time and date, surrounded by a \"shuttle ring\" for controlling the speed of animation.\n * <br /><br />\n * The \"shuttle ring\" concept is borrowed from video editing, where typically a\n * \"jog wheel\" can be rotated to move past individual animation frames very slowly, and\n * a surrounding shuttle ring can be twisted to control direction and speed of fast playback.\n * Cesium typically treats time as continuous (not broken into pre-defined animation frames),\n * so this widget offers no jog wheel.  Instead, the shuttle ring is capable of both fast and\n * very slow playback.  Click and drag the shuttle ring pointer itself (shown above in green),\n * or click in the rest of the ring area to nudge the pointer to the next preset speed in that direction.\n * <br /><br />\n * The Animation widget also provides a \"realtime\" button (in the upper-left) that keeps\n * animation time in sync with the end user's system clock, typically displaying\n * \"today\" or \"right now.\"  This mode is not available in {@link ClockRange.CLAMPED} or\n * {@link ClockRange.LOOP_STOP} mode if the current time is outside of {@link Clock}'s startTime and endTime.\n *\n * @alias Animation\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {AnimationViewModel} viewModel The view model used by this widget.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n *\n * @example\n * // In HTML head, include a link to Animation.css stylesheet,\n * // and in the body, include: <div id=\"animationContainer\"></div>\n *\n * const clock = new Cesium.Clock();\n * const clockViewModel = new Cesium.ClockViewModel(clock);\n * const viewModel = new Cesium.AnimationViewModel(clockViewModel);\n * const widget = new Cesium.Animation('animationContainer', viewModel);\n *\n * function tick() {\n *     clock.tick();\n *     requestAnimationFrame(tick);\n * }\n * requestAnimationFrame(tick);\n *\n * @see AnimationViewModel\n * @see Clock\n */\nfunction Animation(container, viewModel) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  if (!defined(viewModel)) {\n    throw new DeveloperError(\"viewModel is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n  this._viewModel = viewModel;\n  this._container = container;\n  this._centerX = 0;\n  this._centerY = 0;\n  this._defsElement = undefined;\n  this._svgNode = undefined;\n  this._topG = undefined;\n  this._lastHeight = undefined;\n  this._lastWidth = undefined;\n\n  const ownerDocument = container.ownerDocument;\n\n  // Firefox requires SVG references to be included directly, not imported from external CSS.\n  // Also, CSS minifiers get confused by this being in an external CSS file.\n  const cssStyle = document.createElement(\"style\");\n  cssStyle.textContent =\n    \".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }\\\n.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }\\\n.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }\\\n.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }\\\n.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }\\\n.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }\\\n.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }\\\n.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }\\\n.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }\\\n.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }\\\n.cesium-animation-knobInner { fill: url(#animation_knobInner); }\";\n\n  ownerDocument.head.insertBefore(cssStyle, ownerDocument.head.childNodes[0]);\n\n  const themeEle = document.createElement(\"div\");\n  themeEle.className = \"cesium-animation-theme\";\n  themeEle.innerHTML =\n    '<div class=\"cesium-animation-themeNormal\"></div>\\\n<div class=\"cesium-animation-themeHover\"></div>\\\n<div class=\"cesium-animation-themeSelect\"></div>\\\n<div class=\"cesium-animation-themeDisabled\"></div>\\\n<div class=\"cesium-animation-themeKnob\"></div>\\\n<div class=\"cesium-animation-themePointer\"></div>\\\n<div class=\"cesium-animation-themeSwoosh\"></div>\\\n<div class=\"cesium-animation-themeSwooshHover\"></div>';\n\n  this._theme = themeEle;\n  this._themeNormal = themeEle.childNodes[0];\n  this._themeHover = themeEle.childNodes[1];\n  this._themeSelect = themeEle.childNodes[2];\n  this._themeDisabled = themeEle.childNodes[3];\n  this._themeKnob = themeEle.childNodes[4];\n  this._themePointer = themeEle.childNodes[5];\n  this._themeSwoosh = themeEle.childNodes[6];\n  this._themeSwooshHover = themeEle.childNodes[7];\n\n  const svg = document.createElementNS(svgNS, \"svg:svg\");\n  this._svgNode = svg;\n\n  // Define the XLink namespace that SVG uses\n  svg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\", \"xmlns:xlink\", xlinkNS);\n\n  const topG = document.createElementNS(svgNS, \"g\");\n  this._topG = topG;\n\n  this._realtimeSVG = new SvgButton(\n    wingButton(3, 4, \"animation_pathClock\"),\n    viewModel.playRealtimeViewModel,\n  );\n  this._playReverseSVG = new SvgButton(\n    rectButton(44, 99, \"animation_pathPlayReverse\"),\n    viewModel.playReverseViewModel,\n  );\n  this._playForwardSVG = new SvgButton(\n    rectButton(124, 99, \"animation_pathPlay\"),\n    viewModel.playForwardViewModel,\n  );\n  this._pauseSVG = new SvgButton(\n    rectButton(84, 99, \"animation_pathPause\"),\n    viewModel.pauseViewModel,\n  );\n\n  const buttonsG = document.createElementNS(svgNS, \"g\");\n  buttonsG.appendChild(this._realtimeSVG.svgElement);\n  buttonsG.appendChild(this._playReverseSVG.svgElement);\n  buttonsG.appendChild(this._playForwardSVG.svgElement);\n  buttonsG.appendChild(this._pauseSVG.svgElement);\n\n  const shuttleRingBackPanel = svgFromObject({\n    tagName: \"circle\",\n    class: \"cesium-animation-shuttleRingBack\",\n    cx: 100,\n    cy: 100,\n    r: 99,\n  });\n  this._shuttleRingBackPanel = shuttleRingBackPanel;\n\n  const swooshIconInfo = svgIconsById[\"animation_pathSwooshFX\"];\n  const shuttleRingPointerIconInfo = svgIconsById[\"animation_pathPointer\"];\n\n  const shuttleRingSwooshG = svgFromObject({\n    tagName: \"g\",\n    class: \"cesium-animation-shuttleRingSwoosh\",\n    children: [\n      {\n        tagName: swooshIconInfo.tagName,\n        transform: \"translate(100,97) scale(-1,1)\",\n        id: \"animation_pathSwooshFX\",\n        d: swooshIconInfo.d,\n      },\n      {\n        tagName: swooshIconInfo.tagName,\n        transform: \"translate(100,97)\",\n        id: \"animation_pathSwooshFX\",\n        d: swooshIconInfo.d,\n      },\n      {\n        tagName: \"line\",\n        x1: 100,\n        y1: 8,\n        x2: 100,\n        y2: 22,\n      },\n    ],\n  });\n  this._shuttleRingSwooshG = shuttleRingSwooshG;\n\n  this._shuttleRingPointer = svgFromObject({\n    class: \"cesium-animation-shuttleRingPointer\",\n    id: \"animation_pathPointer\",\n    tagName: shuttleRingPointerIconInfo.tagName,\n    d: shuttleRingPointerIconInfo.d,\n  });\n\n  const knobG = svgFromObject({\n    tagName: \"g\",\n    transform: \"translate(100,100)\",\n  });\n\n  this._knobOuter = svgFromObject({\n    tagName: \"circle\",\n    class: \"cesium-animation-knobOuter\",\n    cx: 0,\n    cy: 0,\n    r: 71,\n  });\n\n  const knobInnerAndShieldSize = 61;\n\n  const knobInner = svgFromObject({\n    tagName: \"circle\",\n    class: \"cesium-animation-knobInner\",\n    cx: 0,\n    cy: 0,\n    r: knobInnerAndShieldSize,\n  });\n\n  this._knobDate = svgText(0, -24, \"\");\n  this._knobTime = svgText(0, -7, \"\");\n  this._knobStatus = svgText(0, -41, \"\");\n\n  // widget shield catches clicks on the knob itself (even while DOM elements underneath are changing).\n  const knobShield = svgFromObject({\n    tagName: \"circle\",\n    class: \"cesium-animation-blank\",\n    cx: 0,\n    cy: 0,\n    r: knobInnerAndShieldSize,\n  });\n\n  const shuttleRingBackG = document.createElementNS(svgNS, \"g\");\n  shuttleRingBackG.setAttribute(\"class\", \"cesium-animation-shuttleRingG\");\n\n  container.appendChild(themeEle);\n  topG.appendChild(shuttleRingBackG);\n  topG.appendChild(knobG);\n  topG.appendChild(buttonsG);\n\n  shuttleRingBackG.appendChild(shuttleRingBackPanel);\n  shuttleRingBackG.appendChild(shuttleRingSwooshG);\n  shuttleRingBackG.appendChild(this._shuttleRingPointer);\n\n  knobG.appendChild(this._knobOuter);\n  knobG.appendChild(knobInner);\n  knobG.appendChild(this._knobDate);\n  knobG.appendChild(this._knobTime);\n  knobG.appendChild(this._knobStatus);\n  knobG.appendChild(knobShield);\n\n  svg.appendChild(topG);\n  container.appendChild(svg);\n\n  const that = this;\n  function mouseCallback(e) {\n    setShuttleRingFromMouseOrTouch(that, e);\n  }\n  this._mouseCallback = mouseCallback;\n\n  shuttleRingBackPanel.addEventListener(\"mousedown\", mouseCallback, true);\n  shuttleRingBackPanel.addEventListener(\"touchstart\", mouseCallback, true);\n  shuttleRingSwooshG.addEventListener(\"mousedown\", mouseCallback, true);\n  shuttleRingSwooshG.addEventListener(\"touchstart\", mouseCallback, true);\n  ownerDocument.addEventListener(\"mousemove\", mouseCallback, true);\n  ownerDocument.addEventListener(\"touchmove\", mouseCallback, true);\n  ownerDocument.addEventListener(\"mouseup\", mouseCallback, true);\n  ownerDocument.addEventListener(\"touchend\", mouseCallback, true);\n  ownerDocument.addEventListener(\"touchcancel\", mouseCallback, true);\n  this._shuttleRingPointer.addEventListener(\"mousedown\", mouseCallback, true);\n  this._shuttleRingPointer.addEventListener(\"touchstart\", mouseCallback, true);\n  this._knobOuter.addEventListener(\"mousedown\", mouseCallback, true);\n  this._knobOuter.addEventListener(\"touchstart\", mouseCallback, true);\n\n  //TODO: Since the animation widget uses SVG and has no HTML backing,\n  //we need to wire everything up manually.  Knockout can supposedly\n  //bind to SVG, so we we figure that out we can modify our SVG\n  //to include the binding information directly.\n\n  const timeNode = this._knobTime.childNodes[0];\n  const dateNode = this._knobDate.childNodes[0];\n  const statusNode = this._knobStatus.childNodes[0];\n  let isPaused;\n  this._subscriptions = [\n    //\n    subscribeAndEvaluate(viewModel.pauseViewModel, \"toggled\", function (value) {\n      if (isPaused !== value) {\n        isPaused = value;\n        if (isPaused) {\n          that._shuttleRingPointer.setAttribute(\n            \"class\",\n            \"cesium-animation-shuttleRingPausePointer\",\n          );\n        } else {\n          that._shuttleRingPointer.setAttribute(\n            \"class\",\n            \"cesium-animation-shuttleRingPointer\",\n          );\n        }\n      }\n    }),\n\n    subscribeAndEvaluate(viewModel, \"shuttleRingAngle\", function (value) {\n      setShuttleRingPointer(that._shuttleRingPointer, that._knobOuter, value);\n    }),\n\n    subscribeAndEvaluate(viewModel, \"dateLabel\", function (value) {\n      if (dateNode.textContent !== value) {\n        dateNode.textContent = value;\n      }\n    }),\n\n    subscribeAndEvaluate(viewModel, \"timeLabel\", function (value) {\n      if (timeNode.textContent !== value) {\n        timeNode.textContent = value;\n      }\n    }),\n\n    subscribeAndEvaluate(viewModel, \"multiplierLabel\", function (value) {\n      if (statusNode.textContent !== value) {\n        statusNode.textContent = value;\n      }\n    }),\n  ];\n\n  this.applyThemeChanges();\n  this.resize();\n}\n\nObject.defineProperties(Animation.prototype, {\n  /**\n   * Gets the parent container.\n   *\n   * @memberof Animation.prototype\n   * @type {Element}\n   * @readonly\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   *\n   * @memberof Animation.prototype\n   * @type {AnimationViewModel}\n   * @readonly\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nAnimation.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the animation widget.  Should be called if permanently\n * removing the widget from layout.\n */\nAnimation.prototype.destroy = function () {\n  if (defined(this._observer)) {\n    this._observer.disconnect();\n    this._observer = undefined;\n  }\n\n  const doc = this._container.ownerDocument;\n\n  const mouseCallback = this._mouseCallback;\n  this._shuttleRingBackPanel.removeEventListener(\n    \"mousedown\",\n    mouseCallback,\n    true,\n  );\n  this._shuttleRingBackPanel.removeEventListener(\n    \"touchstart\",\n    mouseCallback,\n    true,\n  );\n  this._shuttleRingSwooshG.removeEventListener(\n    \"mousedown\",\n    mouseCallback,\n    true,\n  );\n  this._shuttleRingSwooshG.removeEventListener(\n    \"touchstart\",\n    mouseCallback,\n    true,\n  );\n  doc.removeEventListener(\"mousemove\", mouseCallback, true);\n  doc.removeEventListener(\"touchmove\", mouseCallback, true);\n  doc.removeEventListener(\"mouseup\", mouseCallback, true);\n  doc.removeEventListener(\"touchend\", mouseCallback, true);\n  doc.removeEventListener(\"touchcancel\", mouseCallback, true);\n  this._shuttleRingPointer.removeEventListener(\n    \"mousedown\",\n    mouseCallback,\n    true,\n  );\n  this._shuttleRingPointer.removeEventListener(\n    \"touchstart\",\n    mouseCallback,\n    true,\n  );\n  this._knobOuter.removeEventListener(\"mousedown\", mouseCallback, true);\n  this._knobOuter.removeEventListener(\"touchstart\", mouseCallback, true);\n\n  this._container.removeChild(this._svgNode);\n  this._container.removeChild(this._theme);\n  this._realtimeSVG.destroy();\n  this._playReverseSVG.destroy();\n  this._playForwardSVG.destroy();\n  this._pauseSVG.destroy();\n\n  const subscriptions = this._subscriptions;\n  for (let i = 0, len = subscriptions.length; i < len; i++) {\n    subscriptions[i].dispose();\n  }\n\n  return destroyObject(this);\n};\n\n/**\n * Resizes the widget to match the container size.\n * This function should be called whenever the container size is changed.\n */\nAnimation.prototype.resize = function () {\n  const parentWidth = this._container.clientWidth;\n  const parentHeight = this._container.clientHeight;\n  if (parentWidth === this._lastWidth && parentHeight === this._lastHeight) {\n    return;\n  }\n\n  const svg = this._svgNode;\n\n  //The width and height as the SVG was originally drawn.\n  const baseWidth = 200;\n  const baseHeight = 132;\n\n  let width = parentWidth;\n  let height = parentHeight;\n\n  if (parentWidth === 0 && parentHeight === 0) {\n    width = baseWidth;\n    height = baseHeight;\n  } else if (parentWidth === 0) {\n    height = parentHeight;\n    width = baseWidth * (parentHeight / baseHeight);\n  } else if (parentHeight === 0) {\n    width = parentWidth;\n    height = baseHeight * (parentWidth / baseWidth);\n  }\n\n  const scaleX = width / baseWidth;\n  const scaleY = height / baseHeight;\n\n  svg.style.cssText = `width: ${width}px; height: ${height}px; position: absolute; bottom: 0; left: 0; overflow: hidden;`;\n  svg.setAttribute(\"width\", width);\n  svg.setAttribute(\"height\", height);\n  svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n\n  this._topG.setAttribute(\"transform\", `scale(${scaleX},${scaleY})`);\n\n  this._centerX = Math.max(1, 100.0 * scaleX);\n  this._centerY = Math.max(1, 100.0 * scaleY);\n\n  this._lastHeight = parentWidth;\n  this._lastWidth = parentHeight;\n};\n\n/**\n * Updates the widget to reflect any modified CSS rules for theming.\n *\n * @example\n * //Switch to the cesium-lighter theme.\n * document.body.className = 'cesium-lighter';\n * animation.applyThemeChanges();\n */\nAnimation.prototype.applyThemeChanges = function () {\n  // Since we rely on computed styles for themeing, we can't actually\n  // do anything if the container has not yet been added to the DOM.\n  // Set up an observer to be notified when it is added and apply\n  // the changes at that time.\n\n  const doc = this._container.ownerDocument;\n\n  if (!doc.body.contains(this._container)) {\n    if (defined(this._observer)) {\n      //Already listening.\n      return;\n    }\n    const that = this;\n    that._observer = new MutationObserver(function () {\n      if (doc.body.contains(that._container)) {\n        that._observer.disconnect();\n        that._observer = undefined;\n        that.applyThemeChanges();\n      }\n    });\n    that._observer.observe(doc, { childList: true, subtree: true });\n    return;\n  }\n\n  const buttonNormalBackColor = getElementColor(this._themeNormal);\n  const buttonHoverBackColor = getElementColor(this._themeHover);\n  const buttonToggledBackColor = getElementColor(this._themeSelect);\n  const buttonDisabledBackColor = getElementColor(this._themeDisabled);\n  const knobBackColor = getElementColor(this._themeKnob);\n  const pointerColor = getElementColor(this._themePointer);\n  const swooshColor = getElementColor(this._themeSwoosh);\n  const swooshHoverColor = getElementColor(this._themeSwooshHover);\n\n  const defsElement = svgFromObject({\n    tagName: \"defs\",\n    children: [\n      {\n        id: \"animation_buttonNormal\",\n        tagName: \"linearGradient\",\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        children: [\n          //add a 'stop-opacity' field to make translucent.\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-color\": makeColorString(\n              buttonNormalBackColor,\n              gradientEnabledColor0,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"12%\",\n            \"stop-color\": makeColorString(\n              buttonNormalBackColor,\n              gradientEnabledColor1,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"46%\",\n            \"stop-color\": makeColorString(\n              buttonNormalBackColor,\n              gradientEnabledColor2,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"81%\",\n            \"stop-color\": makeColorString(\n              buttonNormalBackColor,\n              gradientEnabledColor3,\n            ),\n          },\n        ],\n      },\n      {\n        id: \"animation_buttonHovered\",\n        tagName: \"linearGradient\",\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-color\": makeColorString(\n              buttonHoverBackColor,\n              gradientEnabledColor0,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"12%\",\n            \"stop-color\": makeColorString(\n              buttonHoverBackColor,\n              gradientEnabledColor1,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"46%\",\n            \"stop-color\": makeColorString(\n              buttonHoverBackColor,\n              gradientEnabledColor2,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"81%\",\n            \"stop-color\": makeColorString(\n              buttonHoverBackColor,\n              gradientEnabledColor3,\n            ),\n          },\n        ],\n      },\n      {\n        id: \"animation_buttonToggled\",\n        tagName: \"linearGradient\",\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-color\": makeColorString(\n              buttonToggledBackColor,\n              gradientEnabledColor0,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"12%\",\n            \"stop-color\": makeColorString(\n              buttonToggledBackColor,\n              gradientEnabledColor1,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"46%\",\n            \"stop-color\": makeColorString(\n              buttonToggledBackColor,\n              gradientEnabledColor2,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"81%\",\n            \"stop-color\": makeColorString(\n              buttonToggledBackColor,\n              gradientEnabledColor3,\n            ),\n          },\n        ],\n      },\n      {\n        id: \"animation_buttonDisabled\",\n        tagName: \"linearGradient\",\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-color\": makeColorString(\n              buttonDisabledBackColor,\n              gradientDisabledColor0,\n            ),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"75%\",\n            \"stop-color\": makeColorString(\n              buttonDisabledBackColor,\n              gradientDisabledColor1,\n            ),\n          },\n        ],\n      },\n      {\n        id: \"animation_blurred\",\n        tagName: \"filter\",\n        width: \"200%\",\n        height: \"200%\",\n        x: \"-50%\",\n        y: \"-50%\",\n        children: [\n          {\n            tagName: \"feGaussianBlur\",\n            stdDeviation: 4,\n            in: \"SourceGraphic\",\n          },\n        ],\n      },\n      {\n        id: \"animation_shuttleRingSwooshGradient\",\n        tagName: \"linearGradient\",\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-opacity\": 0.2,\n            \"stop-color\": swooshColor.toCssColorString(),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"85%\",\n            \"stop-opacity\": 0.85,\n            \"stop-color\": swooshColor.toCssColorString(),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"95%\",\n            \"stop-opacity\": 0.05,\n            \"stop-color\": swooshColor.toCssColorString(),\n          },\n        ],\n      },\n      {\n        id: \"animation_shuttleRingSwooshHovered\",\n        tagName: \"linearGradient\",\n        x1: \"50%\",\n        y1: \"0%\",\n        x2: \"50%\",\n        y2: \"100%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-opacity\": 0.2,\n            \"stop-color\": swooshHoverColor.toCssColorString(),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"85%\",\n            \"stop-opacity\": 0.85,\n            \"stop-color\": swooshHoverColor.toCssColorString(),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"95%\",\n            \"stop-opacity\": 0.05,\n            \"stop-color\": swooshHoverColor.toCssColorString(),\n          },\n        ],\n      },\n      {\n        id: \"animation_shuttleRingPointerGradient\",\n        tagName: \"linearGradient\",\n        x1: \"0%\",\n        y1: \"50%\",\n        x2: \"100%\",\n        y2: \"50%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-color\": pointerColor.toCssColorString(),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"40%\",\n            \"stop-color\": pointerColor.toCssColorString(),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"60%\",\n            \"stop-color\": makeColorString(pointerColor, gradientPointerColor),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"100%\",\n            \"stop-color\": makeColorString(pointerColor, gradientPointerColor),\n          },\n        ],\n      },\n      {\n        id: \"animation_shuttleRingPointerPaused\",\n        tagName: \"linearGradient\",\n        x1: \"0%\",\n        y1: \"50%\",\n        x2: \"100%\",\n        y2: \"50%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"0%\",\n            \"stop-color\": \"#CCC\",\n          },\n          {\n            tagName: \"stop\",\n            offset: \"40%\",\n            \"stop-color\": \"#CCC\",\n          },\n          {\n            tagName: \"stop\",\n            offset: \"60%\",\n            \"stop-color\": \"#555\",\n          },\n          {\n            tagName: \"stop\",\n            offset: \"100%\",\n            \"stop-color\": \"#555\",\n          },\n        ],\n      },\n      {\n        id: \"animation_knobOuter\",\n        tagName: \"linearGradient\",\n        x1: \"20%\",\n        y1: \"0%\",\n        x2: \"90%\",\n        y2: \"100%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"5%\",\n            \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor0),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"60%\",\n            \"stop-color\": makeColorString(knobBackColor, gradientKnobColor),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"85%\",\n            \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor1),\n          },\n        ],\n      },\n      {\n        id: \"animation_knobInner\",\n        tagName: \"linearGradient\",\n        x1: \"20%\",\n        y1: \"0%\",\n        x2: \"90%\",\n        y2: \"100%\",\n        children: [\n          {\n            tagName: \"stop\",\n            offset: \"5%\",\n            \"stop-color\": makeColorString(knobBackColor, gradientKnobColor),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"60%\",\n            \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor0),\n          },\n          {\n            tagName: \"stop\",\n            offset: \"85%\",\n            \"stop-color\": makeColorString(knobBackColor, gradientEnabledColor3),\n          },\n        ],\n      },\n    ],\n  });\n\n  if (!defined(this._defsElement)) {\n    this._svgNode.appendChild(defsElement);\n  } else {\n    this._svgNode.replaceChild(defsElement, this._defsElement);\n  }\n  this._defsElement = defsElement;\n};\nexport default Animation;\n","import {\n  addAllToArray,\n  binarySearch,\n  ClockRange,\n  ClockStep,\n  defined,\n  DeveloperError,\n  JulianDate,\n} from \"@cesium/engine\";\n\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\nimport ToggleButtonViewModel from \"../ToggleButtonViewModel.js\";\n\nconst monthNames = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\",\n];\nconst realtimeShuttleRingAngle = 15;\nconst maxShuttleRingAngle = 105;\n\nfunction numberComparator(left, right) {\n  return left - right;\n}\n\nfunction getTypicalMultiplierIndex(multiplier, shuttleRingTicks) {\n  const index = binarySearch(shuttleRingTicks, multiplier, numberComparator);\n  return index < 0 ? ~index : index;\n}\n\nfunction angleToMultiplier(angle, shuttleRingTicks) {\n  //Use a linear scale for -1 to 1 between -15 < angle < 15 degrees\n  if (Math.abs(angle) <= realtimeShuttleRingAngle) {\n    return angle / realtimeShuttleRingAngle;\n  }\n\n  const minp = realtimeShuttleRingAngle;\n  const maxp = maxShuttleRingAngle;\n  let maxv;\n  const minv = 0;\n  let scale;\n  if (angle > 0) {\n    maxv = Math.log(shuttleRingTicks[shuttleRingTicks.length - 1]);\n    scale = (maxv - minv) / (maxp - minp);\n    return Math.exp(minv + scale * (angle - minp));\n  }\n\n  maxv = Math.log(-shuttleRingTicks[0]);\n  scale = (maxv - minv) / (maxp - minp);\n  return -Math.exp(minv + scale * (Math.abs(angle) - minp));\n}\n\nfunction multiplierToAngle(multiplier, shuttleRingTicks, clockViewModel) {\n  if (clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK) {\n    return realtimeShuttleRingAngle;\n  }\n\n  if (Math.abs(multiplier) <= 1) {\n    return multiplier * realtimeShuttleRingAngle;\n  }\n\n  const fastedMultipler = shuttleRingTicks[shuttleRingTicks.length - 1];\n  if (multiplier > fastedMultipler) {\n    multiplier = fastedMultipler;\n  } else if (multiplier < -fastedMultipler) {\n    multiplier = -fastedMultipler;\n  }\n\n  const minp = realtimeShuttleRingAngle;\n  const maxp = maxShuttleRingAngle;\n  let maxv;\n  const minv = 0;\n  let scale;\n\n  if (multiplier > 0) {\n    maxv = Math.log(fastedMultipler);\n    scale = (maxv - minv) / (maxp - minp);\n    return (Math.log(multiplier) - minv) / scale + minp;\n  }\n\n  maxv = Math.log(-shuttleRingTicks[0]);\n  scale = (maxv - minv) / (maxp - minp);\n  return -((Math.log(Math.abs(multiplier)) - minv) / scale + minp);\n}\n\n/**\n * The view model for the {@link Animation} widget.\n * @alias AnimationViewModel\n * @constructor\n *\n * @param {ClockViewModel} clockViewModel The ClockViewModel instance to use.\n *\n * @see Animation\n */\nfunction AnimationViewModel(clockViewModel) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(clockViewModel)) {\n    throw new DeveloperError(\"clockViewModel is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const that = this;\n  this._clockViewModel = clockViewModel;\n  this._allShuttleRingTicks = [];\n  this._dateFormatter = AnimationViewModel.defaultDateFormatter;\n  this._timeFormatter = AnimationViewModel.defaultTimeFormatter;\n\n  /**\n   * Gets or sets whether the shuttle ring is currently being dragged.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.shuttleRingDragging = false;\n\n  /**\n   * Gets or sets whether dragging the shuttle ring should cause the multiplier\n   * to snap to the defined tick values rather than interpolating between them.\n   * This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.snapToTicks = false;\n\n  knockout.track(this, [\n    \"_allShuttleRingTicks\",\n    \"_dateFormatter\",\n    \"_timeFormatter\",\n    \"shuttleRingDragging\",\n    \"snapToTicks\",\n  ]);\n\n  this._sortedFilteredPositiveTicks = [];\n\n  this.setShuttleRingTicks(AnimationViewModel.defaultTicks);\n\n  /**\n   * Gets the string representation of the current time.  This property is observable.\n   * @type {string}\n   */\n  this.timeLabel = undefined;\n  knockout.defineProperty(this, \"timeLabel\", function () {\n    return that._timeFormatter(that._clockViewModel.currentTime, that);\n  });\n\n  /**\n   * Gets the string representation of the current date.  This property is observable.\n   * @type {string}\n   */\n  this.dateLabel = undefined;\n  knockout.defineProperty(this, \"dateLabel\", function () {\n    return that._dateFormatter(that._clockViewModel.currentTime, that);\n  });\n\n  /**\n   * Gets the string representation of the current multiplier.  This property is observable.\n   * @type {string}\n   */\n  this.multiplierLabel = undefined;\n  knockout.defineProperty(this, \"multiplierLabel\", function () {\n    const clockViewModel = that._clockViewModel;\n    if (clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK) {\n      return \"Today\";\n    }\n\n    const multiplier = clockViewModel.multiplier;\n\n    //If it's a whole number, just return it.\n    if (multiplier % 1 === 0) {\n      return `${multiplier.toFixed(0)}x`;\n    }\n\n    //Convert to decimal string and remove any trailing zeroes\n    return `${multiplier.toFixed(3).replace(/0{0,3}$/, \"\")}x`;\n  });\n\n  /**\n   * Gets or sets the current shuttle ring angle.  This property is observable.\n   * @type {number}\n   */\n  this.shuttleRingAngle = undefined;\n  knockout.defineProperty(this, \"shuttleRingAngle\", {\n    get: function () {\n      return multiplierToAngle(\n        clockViewModel.multiplier,\n        that._allShuttleRingTicks,\n        clockViewModel,\n      );\n    },\n    set: function (angle) {\n      angle = Math.max(\n        Math.min(angle, maxShuttleRingAngle),\n        -maxShuttleRingAngle,\n      );\n      const ticks = that._allShuttleRingTicks;\n\n      const clockViewModel = that._clockViewModel;\n      clockViewModel.clockStep = ClockStep.SYSTEM_CLOCK_MULTIPLIER;\n\n      //If we are at the max angle, simply return the max value in either direction.\n      if (Math.abs(angle) === maxShuttleRingAngle) {\n        clockViewModel.multiplier =\n          angle > 0 ? ticks[ticks.length - 1] : ticks[0];\n        return;\n      }\n\n      let multiplier = angleToMultiplier(angle, ticks);\n      if (that.snapToTicks) {\n        multiplier = ticks[getTypicalMultiplierIndex(multiplier, ticks)];\n      } else if (multiplier !== 0) {\n        const positiveMultiplier = Math.abs(multiplier);\n\n        if (positiveMultiplier > 100) {\n          const numDigits = positiveMultiplier.toFixed(0).length - 2;\n          const divisor = Math.pow(10, numDigits);\n          multiplier = (Math.round(multiplier / divisor) * divisor) | 0;\n        } else if (positiveMultiplier > realtimeShuttleRingAngle) {\n          multiplier = Math.round(multiplier);\n        } else if (positiveMultiplier > 1) {\n          multiplier = +multiplier.toFixed(1);\n        } else if (positiveMultiplier > 0) {\n          multiplier = +multiplier.toFixed(2);\n        }\n      }\n      clockViewModel.multiplier = multiplier;\n    },\n  });\n\n  this._canAnimate = undefined;\n  knockout.defineProperty(this, \"_canAnimate\", function () {\n    const clockViewModel = that._clockViewModel;\n    const clockRange = clockViewModel.clockRange;\n\n    if (that.shuttleRingDragging || clockRange === ClockRange.UNBOUNDED) {\n      return true;\n    }\n\n    const multiplier = clockViewModel.multiplier;\n    const currentTime = clockViewModel.currentTime;\n    const startTime = clockViewModel.startTime;\n\n    let result = false;\n    if (clockRange === ClockRange.LOOP_STOP) {\n      result =\n        JulianDate.greaterThan(currentTime, startTime) ||\n        (currentTime.equals(startTime) && multiplier > 0);\n    } else {\n      const stopTime = clockViewModel.stopTime;\n      result =\n        (JulianDate.greaterThan(currentTime, startTime) &&\n          JulianDate.lessThan(currentTime, stopTime)) || //\n        (currentTime.equals(startTime) && multiplier > 0) || //\n        (currentTime.equals(stopTime) && multiplier < 0);\n    }\n\n    if (!result) {\n      clockViewModel.shouldAnimate = false;\n    }\n    return result;\n  });\n\n  this._isSystemTimeAvailable = undefined;\n  knockout.defineProperty(this, \"_isSystemTimeAvailable\", function () {\n    const clockViewModel = that._clockViewModel;\n    const clockRange = clockViewModel.clockRange;\n    if (clockRange === ClockRange.UNBOUNDED) {\n      return true;\n    }\n\n    const systemTime = clockViewModel.systemTime;\n    return (\n      JulianDate.greaterThanOrEquals(systemTime, clockViewModel.startTime) &&\n      JulianDate.lessThanOrEquals(systemTime, clockViewModel.stopTime)\n    );\n  });\n\n  this._isAnimating = undefined;\n  knockout.defineProperty(this, \"_isAnimating\", function () {\n    return (\n      that._clockViewModel.shouldAnimate &&\n      (that._canAnimate || that.shuttleRingDragging)\n    );\n  });\n\n  const pauseCommand = createCommand(function () {\n    const clockViewModel = that._clockViewModel;\n    if (clockViewModel.shouldAnimate) {\n      clockViewModel.shouldAnimate = false;\n    } else if (that._canAnimate) {\n      clockViewModel.shouldAnimate = true;\n    }\n  });\n\n  this._pauseViewModel = new ToggleButtonViewModel(pauseCommand, {\n    toggled: knockout.computed(function () {\n      return !that._isAnimating;\n    }),\n    tooltip: \"Pause\",\n  });\n\n  const playReverseCommand = createCommand(function () {\n    const clockViewModel = that._clockViewModel;\n    const multiplier = clockViewModel.multiplier;\n    if (multiplier > 0) {\n      clockViewModel.multiplier = -multiplier;\n    }\n    clockViewModel.shouldAnimate = true;\n  });\n\n  this._playReverseViewModel = new ToggleButtonViewModel(playReverseCommand, {\n    toggled: knockout.computed(function () {\n      return that._isAnimating && clockViewModel.multiplier < 0;\n    }),\n    tooltip: \"Play Reverse\",\n  });\n\n  const playForwardCommand = createCommand(function () {\n    const clockViewModel = that._clockViewModel;\n    const multiplier = clockViewModel.multiplier;\n    if (multiplier < 0) {\n      clockViewModel.multiplier = -multiplier;\n    }\n    clockViewModel.shouldAnimate = true;\n  });\n\n  this._playForwardViewModel = new ToggleButtonViewModel(playForwardCommand, {\n    toggled: knockout.computed(function () {\n      return (\n        that._isAnimating &&\n        clockViewModel.multiplier > 0 &&\n        clockViewModel.clockStep !== ClockStep.SYSTEM_CLOCK\n      );\n    }),\n    tooltip: \"Play Forward\",\n  });\n\n  const playRealtimeCommand = createCommand(\n    function () {\n      that._clockViewModel.clockStep = ClockStep.SYSTEM_CLOCK;\n    },\n    knockout.getObservable(this, \"_isSystemTimeAvailable\"),\n  );\n\n  this._playRealtimeViewModel = new ToggleButtonViewModel(playRealtimeCommand, {\n    toggled: knockout.computed(function () {\n      return clockViewModel.clockStep === ClockStep.SYSTEM_CLOCK;\n    }),\n    tooltip: knockout.computed(function () {\n      return that._isSystemTimeAvailable\n        ? \"Today (real-time)\"\n        : \"Current time not in range\";\n    }),\n  });\n\n  this._slower = createCommand(function () {\n    const clockViewModel = that._clockViewModel;\n    const shuttleRingTicks = that._allShuttleRingTicks;\n    const multiplier = clockViewModel.multiplier;\n    const index = getTypicalMultiplierIndex(multiplier, shuttleRingTicks) - 1;\n    if (index >= 0) {\n      clockViewModel.multiplier = shuttleRingTicks[index];\n    }\n  });\n\n  this._faster = createCommand(function () {\n    const clockViewModel = that._clockViewModel;\n    const shuttleRingTicks = that._allShuttleRingTicks;\n    const multiplier = clockViewModel.multiplier;\n    const index = getTypicalMultiplierIndex(multiplier, shuttleRingTicks) + 1;\n    if (index < shuttleRingTicks.length) {\n      clockViewModel.multiplier = shuttleRingTicks[index];\n    }\n  });\n}\n\n/**\n * Gets or sets the default date formatter used by new instances.\n *\n * @member\n * @type {AnimationViewModel.DateFormatter}\n */\nAnimationViewModel.defaultDateFormatter = function (date, viewModel) {\n  const gregorianDate = JulianDate.toGregorianDate(date);\n  return `${monthNames[gregorianDate.month - 1]} ${gregorianDate.day} ${\n    gregorianDate.year\n  }`;\n};\n\n/**\n * Gets or sets the default array of known clock multipliers associated with new instances of the shuttle ring.\n * @type {number[]}\n */\nAnimationViewModel.defaultTicks = [\n  //\n  0.001,\n  0.002,\n  0.005,\n  0.01,\n  0.02,\n  0.05,\n  0.1,\n  0.25,\n  0.5,\n  1.0,\n  2.0,\n  5.0,\n  10.0, //\n  15.0,\n  30.0,\n  60.0,\n  120.0,\n  300.0,\n  600.0,\n  900.0,\n  1800.0,\n  3600.0,\n  7200.0,\n  14400.0, //\n  21600.0,\n  43200.0,\n  86400.0,\n  172800.0,\n  345600.0,\n  604800.0,\n];\n\n/**\n * Gets or sets the default time formatter used by new instances.\n *\n * @member\n * @type {AnimationViewModel.TimeFormatter}\n */\nAnimationViewModel.defaultTimeFormatter = function (date, viewModel) {\n  const gregorianDate = JulianDate.toGregorianDate(date);\n  const millisecond = Math.round(gregorianDate.millisecond);\n  if (Math.abs(viewModel._clockViewModel.multiplier) < 1) {\n    return `${gregorianDate.hour\n      .toString()\n      .padStart(2, \"0\")}:${gregorianDate.minute\n      .toString()\n      .padStart(2, \"0\")}:${gregorianDate.second\n      .toString()\n      .padStart(2, \"0\")}.${millisecond.toString().padStart(3, \"0\")}`;\n  }\n  return `${gregorianDate.hour\n    .toString()\n    .padStart(2, \"0\")}:${gregorianDate.minute\n    .toString()\n    .padStart(2, \"0\")}:${gregorianDate.second.toString().padStart(2, \"0\")} UTC`;\n};\n\n/**\n * Gets a copy of the array of positive known clock multipliers to associate with the shuttle ring.\n *\n * @returns {number[]} The array of known clock multipliers associated with the shuttle ring.\n */\nAnimationViewModel.prototype.getShuttleRingTicks = function () {\n  return this._sortedFilteredPositiveTicks.slice(0);\n};\n\n/**\n * Sets the array of positive known clock multipliers to associate with the shuttle ring.\n * These values will have negative equivalents created for them and sets both the minimum\n * and maximum range of values for the shuttle ring as well as the values that are snapped\n * to when a single click is made.  The values need not be in order, as they will be sorted\n * automatically, and duplicate values will be removed.\n *\n * @param {number[]} positiveTicks The list of known positive clock multipliers to associate with the shuttle ring.\n */\nAnimationViewModel.prototype.setShuttleRingTicks = function (positiveTicks) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(positiveTicks)) {\n    throw new DeveloperError(\"positiveTicks is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let i;\n  let len;\n  let tick;\n\n  const hash = {};\n  const sortedFilteredPositiveTicks = this._sortedFilteredPositiveTicks;\n  sortedFilteredPositiveTicks.length = 0;\n  for (i = 0, len = positiveTicks.length; i < len; ++i) {\n    tick = positiveTicks[i];\n    //filter duplicates\n    if (!hash.hasOwnProperty(tick)) {\n      hash[tick] = true;\n      sortedFilteredPositiveTicks.push(tick);\n    }\n  }\n  sortedFilteredPositiveTicks.sort(numberComparator);\n\n  const allTicks = [];\n  for (len = sortedFilteredPositiveTicks.length, i = len - 1; i >= 0; --i) {\n    tick = sortedFilteredPositiveTicks[i];\n    if (tick !== 0) {\n      allTicks.push(-tick);\n    }\n  }\n  addAllToArray(allTicks, sortedFilteredPositiveTicks);\n\n  this._allShuttleRingTicks = allTicks;\n};\n\nObject.defineProperties(AnimationViewModel.prototype, {\n  /**\n   * Gets a command that decreases the speed of animation.\n   * @memberof AnimationViewModel.prototype\n   * @type {Command}\n   */\n  slower: {\n    get: function () {\n      return this._slower;\n    },\n  },\n\n  /**\n   * Gets a command that increases the speed of animation.\n   * @memberof AnimationViewModel.prototype\n   * @type {Command}\n   */\n  faster: {\n    get: function () {\n      return this._faster;\n    },\n  },\n\n  /**\n   * Gets the clock view model.\n   * @memberof AnimationViewModel.prototype\n   *\n   * @type {ClockViewModel}\n   */\n  clockViewModel: {\n    get: function () {\n      return this._clockViewModel;\n    },\n  },\n\n  /**\n   * Gets the pause toggle button view model.\n   * @memberof AnimationViewModel.prototype\n   *\n   * @type {ToggleButtonViewModel}\n   */\n  pauseViewModel: {\n    get: function () {\n      return this._pauseViewModel;\n    },\n  },\n\n  /**\n   * Gets the reverse toggle button view model.\n   * @memberof AnimationViewModel.prototype\n   *\n   * @type {ToggleButtonViewModel}\n   */\n  playReverseViewModel: {\n    get: function () {\n      return this._playReverseViewModel;\n    },\n  },\n\n  /**\n   * Gets the play toggle button view model.\n   * @memberof AnimationViewModel.prototype\n   *\n   * @type {ToggleButtonViewModel}\n   */\n  playForwardViewModel: {\n    get: function () {\n      return this._playForwardViewModel;\n    },\n  },\n\n  /**\n   * Gets the realtime toggle button view model.\n   * @memberof AnimationViewModel.prototype\n   *\n   * @type {ToggleButtonViewModel}\n   */\n  playRealtimeViewModel: {\n    get: function () {\n      return this._playRealtimeViewModel;\n    },\n  },\n\n  /**\n   * Gets or sets the function which formats a date for display.\n   * @memberof AnimationViewModel.prototype\n   *\n   * @type {AnimationViewModel.DateFormatter}\n   * @default AnimationViewModel.defaultDateFormatter\n   */\n  dateFormatter: {\n    //TODO:@exception {DeveloperError} dateFormatter must be a function.\n    get: function () {\n      return this._dateFormatter;\n    },\n    set: function (dateFormatter) {\n      //>>includeStart('debug', pragmas.debug);\n      if (typeof dateFormatter !== \"function\") {\n        throw new DeveloperError(\"dateFormatter must be a function\");\n      }\n      //>>includeEnd('debug');\n\n      this._dateFormatter = dateFormatter;\n    },\n  },\n\n  /**\n   * Gets or sets the function which formats a time for display.\n   * @memberof AnimationViewModel.prototype\n   *\n   * @type {AnimationViewModel.TimeFormatter}\n   * @default AnimationViewModel.defaultTimeFormatter\n   */\n  timeFormatter: {\n    //TODO:@exception {DeveloperError} timeFormatter must be a function.\n    get: function () {\n      return this._timeFormatter;\n    },\n    set: function (timeFormatter) {\n      //>>includeStart('debug', pragmas.debug);\n      if (typeof timeFormatter !== \"function\") {\n        throw new DeveloperError(\"timeFormatter must be a function\");\n      }\n      //>>includeEnd('debug');\n\n      this._timeFormatter = timeFormatter;\n    },\n  },\n});\n\n//Currently exposed for tests.\nAnimationViewModel._maxShuttleRingAngle = maxShuttleRingAngle;\nAnimationViewModel._realtimeShuttleRingAngle = realtimeShuttleRingAngle;\n\n/**\n * A function that formats a date for display.\n * @callback AnimationViewModel.DateFormatter\n *\n * @param {JulianDate} date The date to be formatted\n * @param {AnimationViewModel} viewModel The AnimationViewModel instance requesting formatting.\n * @returns {string} The string representation of the calendar date portion of the provided date.\n */\n\n/**\n * A function that formats a time for display.\n * @callback AnimationViewModel.TimeFormatter\n *\n * @param {JulianDate} date The date to be formatted\n * @param {AnimationViewModel} viewModel The AnimationViewModel instance requesting formatting.\n * @returns {string} The string representation of the time portion of the provided date.\n */\nexport default AnimationViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  FeatureDetection,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport BaseLayerPickerViewModel from \"./BaseLayerPickerViewModel.js\";\n\n/**\n * <span style=\"display: block; text-align: center;\">\n * <img src=\"Images/BaseLayerPicker.png\" width=\"264\" alt=\"BaseLayerPicker\" />\n * <br />BaseLayerPicker with its drop-panel open.\n * </span>\n * <br /><br />\n * The BaseLayerPicker is a single button widget that displays a panel of available imagery and\n * terrain providers.  When imagery is selected, the corresponding imagery layer is created and inserted\n * as the base layer of the imagery collection; removing the existing base.  When terrain is selected,\n * it replaces the current terrain provider.  Each item in the available providers list contains a name,\n * a representative icon, and a tooltip to display more information when hovered. The list is initially\n * empty, and must be configured before use, as illustrated in the below example.\n * <br /><br />\n * By default, the BaseLayerPicker uses a default list of example providers for demonstration purposes.\n * Notably some of these providers, such as <a href=\"https://developers.arcgis.com\" target=\"_blank\">Esri ArcGIS</a> and <a href=\"https://docs.stadiamaps.com/ target=\"_blank\">Stadia Maps</a>, have seperate terms of service and require authentication for production use.\n *\n * @alias BaseLayerPicker\n * @constructor\n *\n * @param {Element|string} container The parent HTML container node or ID for this widget.\n * @param {object} options Object with the following properties:\n * @param {Globe} options.globe The Globe to use.\n * @param {ProviderViewModel[]} [options.imageryProviderViewModels=[]] The array of ProviderViewModel instances to use for imagery.\n * @param {ProviderViewModel} [options.selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available imagery layer is used.\n * @param {ProviderViewModel[]} [options.terrainProviderViewModels=[]] The array of ProviderViewModel instances to use for terrain.\n * @param {ProviderViewModel} [options.selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available terrain layer is used.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n *\n * @example\n * // In HTML head, include a link to the BaseLayerPicker.css stylesheet,\n * // and in the body, include: <div id=\"baseLayerPickerContainer\"\n * //   style=\"position:absolute;top:24px;right:24px;width:38px;height:38px;\"></div>\n *\n * //Create the list of available providers we would like the user to select from.\n * //This example uses 3, OpenStreetMap, The Black Marble, and a single, non-streaming world image.\n * const imageryViewModels = [];\n * imageryViewModels.push(new Cesium.ProviderViewModel({\n *      name: \"Open\\u00adStreet\\u00adMap\",\n *      iconUrl: Cesium.buildModuleUrl(\"Widgets/Images/ImageryProviders/openStreetMap.png\"),\n *      tooltip: \"OpenStreetMap (OSM) is a collaborative project to create a free editable \\\n * map of the world.\\nhttp://www.openstreetmap.org\",\n *      creationFunction: function() {\n *          return new Cesium.OpenStreetMapImageryProvider({\n *              url: \"https://tile.openstreetmap.org/\"\n *          });\n *      }\n *  }));\n *\n *  imageryViewModels.push(new Cesium.ProviderViewModel({\n *      name: \"Earth at Night\",\n *      iconUrl: Cesium.buildModuleUrl(\"Widgets/Images/ImageryProviders/blackMarble.png\"),\n *      tooltip: \"The lights of cities and villages trace the outlines of civilization \\\n * in this global view of the Earth at night as seen by NASA/NOAA's Suomi NPP satellite.\",\n *      creationFunction: function() {\n *          return Cesium.IonImageryProvider.fromAssetId(3812);\n *      }\n *  }));\n *\n *  imageryViewModels.push(new Cesium.ProviderViewModel({\n *      name: \"Natural Earth\\u00a0II\",\n *      iconUrl: Cesium.buildModuleUrl(\"Widgets/Images/ImageryProviders/naturalEarthII.png\"),\n *      tooltip: \"Natural Earth II, darkened for contrast.\\nhttp://www.naturalearthdata.com/\",\n *      creationFunction: function() {\n *          return Cesium.TileMapServiceImageryProvider.fromUrl(\n *              Cesium.buildModuleUrl(\"Assets/Textures/NaturalEarthII\")\n *          );\n *      }\n *  }));\n *\n * //Create a CesiumWidget without imagery, if you haven't already done so.\n * const cesiumWidget = new Cesium.CesiumWidget(\"cesiumContainer\", { baseLayer: false });\n *\n * //Finally, create the baseLayerPicker widget using our view models.\n * const layers = cesiumWidget.imageryLayers;\n * const baseLayerPicker = new Cesium.BaseLayerPicker(\"baseLayerPickerContainer\", {\n *     globe: cesiumWidget.scene.globe,\n *     imageryProviderViewModels: imageryViewModels\n * });\n *\n * @see TerrainProvider\n * @see ImageryProvider\n * @see ImageryLayerCollection\n */\nfunction BaseLayerPicker(container, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const viewModel = new BaseLayerPickerViewModel(options);\n\n  const element = document.createElement(\"button\");\n  element.type = \"button\";\n  element.className = \"cesium-button cesium-toolbar-button\";\n  element.setAttribute(\n    \"data-bind\",\n    \"\\\nattr: { title: buttonTooltip },\\\nclick: toggleDropDown\",\n  );\n  container.appendChild(element);\n\n  const imgElement = document.createElement(\"img\");\n  imgElement.setAttribute(\"draggable\", \"false\");\n  imgElement.className = \"cesium-baseLayerPicker-selected\";\n  imgElement.setAttribute(\n    \"data-bind\",\n    \"\\\nattr: { src: buttonImageUrl }, visible: !!buttonImageUrl\",\n  );\n  element.appendChild(imgElement);\n\n  const dropPanel = document.createElement(\"div\");\n  dropPanel.className = \"cesium-baseLayerPicker-dropDown\";\n  dropPanel.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-baseLayerPicker-dropDown-visible\" : dropDownVisible }',\n  );\n  container.appendChild(dropPanel);\n\n  const imageryTitle = document.createElement(\"div\");\n  imageryTitle.className = \"cesium-baseLayerPicker-sectionTitle\";\n  imageryTitle.setAttribute(\n    \"data-bind\",\n    \"visible: imageryProviderViewModels.length > 0\",\n  );\n  imageryTitle.innerHTML = \"Imagery\";\n  dropPanel.appendChild(imageryTitle);\n\n  const imagerySection = document.createElement(\"div\");\n  imagerySection.className = \"cesium-baseLayerPicker-section\";\n  imagerySection.setAttribute(\"data-bind\", \"foreach: _imageryProviders\");\n  dropPanel.appendChild(imagerySection);\n\n  const imageryCategories = document.createElement(\"div\");\n  imageryCategories.className = \"cesium-baseLayerPicker-category\";\n  imagerySection.appendChild(imageryCategories);\n\n  const categoryTitle = document.createElement(\"div\");\n  categoryTitle.className = \"cesium-baseLayerPicker-categoryTitle\";\n  categoryTitle.setAttribute(\"data-bind\", \"text: name\");\n  imageryCategories.appendChild(categoryTitle);\n\n  const imageryChoices = document.createElement(\"div\");\n  imageryChoices.className = \"cesium-baseLayerPicker-choices\";\n  imageryChoices.setAttribute(\"data-bind\", \"foreach: providers\");\n  imageryCategories.appendChild(imageryChoices);\n\n  const imageryProvider = document.createElement(\"div\");\n  imageryProvider.className = \"cesium-baseLayerPicker-item\";\n  imageryProvider.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-baseLayerPicker-selectedItem\" : $data === $parents[1].selectedImagery },\\\nattr: { title: tooltip },\\\nvisible: creationCommand.canExecute,\\\nclick: function($data) { $parents[1].selectedImagery = $data; }',\n  );\n  imageryChoices.appendChild(imageryProvider);\n\n  const providerIcon = document.createElement(\"img\");\n  providerIcon.className = \"cesium-baseLayerPicker-itemIcon\";\n  providerIcon.setAttribute(\"data-bind\", \"attr: { src: iconUrl }\");\n  providerIcon.setAttribute(\"draggable\", \"false\");\n  imageryProvider.appendChild(providerIcon);\n\n  const providerLabel = document.createElement(\"div\");\n  providerLabel.className = \"cesium-baseLayerPicker-itemLabel\";\n  providerLabel.setAttribute(\"data-bind\", \"text: name\");\n  imageryProvider.appendChild(providerLabel);\n\n  const terrainTitle = document.createElement(\"div\");\n  terrainTitle.className = \"cesium-baseLayerPicker-sectionTitle\";\n  terrainTitle.setAttribute(\n    \"data-bind\",\n    \"visible: terrainProviderViewModels.length > 0\",\n  );\n  terrainTitle.innerHTML = \"Terrain\";\n  dropPanel.appendChild(terrainTitle);\n\n  const terrainSection = document.createElement(\"div\");\n  terrainSection.className = \"cesium-baseLayerPicker-section\";\n  terrainSection.setAttribute(\"data-bind\", \"foreach: _terrainProviders\");\n  dropPanel.appendChild(terrainSection);\n\n  const terrainCategories = document.createElement(\"div\");\n  terrainCategories.className = \"cesium-baseLayerPicker-category\";\n  terrainSection.appendChild(terrainCategories);\n\n  const terrainCategoryTitle = document.createElement(\"div\");\n  terrainCategoryTitle.className = \"cesium-baseLayerPicker-categoryTitle\";\n  terrainCategoryTitle.setAttribute(\"data-bind\", \"text: name\");\n  terrainCategories.appendChild(terrainCategoryTitle);\n\n  const terrainChoices = document.createElement(\"div\");\n  terrainChoices.className = \"cesium-baseLayerPicker-choices\";\n  terrainChoices.setAttribute(\"data-bind\", \"foreach: providers\");\n  terrainCategories.appendChild(terrainChoices);\n\n  const terrainProvider = document.createElement(\"div\");\n  terrainProvider.className = \"cesium-baseLayerPicker-item\";\n  terrainProvider.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-baseLayerPicker-selectedItem\" : $data === $parents[1].selectedTerrain },\\\nattr: { title: tooltip },\\\nvisible: creationCommand.canExecute,\\\nclick: function($data) { $parents[1].selectedTerrain = $data; }',\n  );\n  terrainChoices.appendChild(terrainProvider);\n\n  const terrainProviderIcon = document.createElement(\"img\");\n  terrainProviderIcon.className = \"cesium-baseLayerPicker-itemIcon\";\n  terrainProviderIcon.setAttribute(\"data-bind\", \"attr: { src: iconUrl }\");\n  terrainProviderIcon.setAttribute(\"draggable\", \"false\");\n  terrainProvider.appendChild(terrainProviderIcon);\n\n  const terrainProviderLabel = document.createElement(\"div\");\n  terrainProviderLabel.className = \"cesium-baseLayerPicker-itemLabel\";\n  terrainProviderLabel.setAttribute(\"data-bind\", \"text: name\");\n  terrainProvider.appendChild(terrainProviderLabel);\n\n  knockout.applyBindings(viewModel, element);\n  knockout.applyBindings(viewModel, dropPanel);\n\n  this._viewModel = viewModel;\n  this._container = container;\n  this._element = element;\n  this._dropPanel = dropPanel;\n\n  this._closeDropDown = function (e) {\n    if (!(element.contains(e.target) || dropPanel.contains(e.target))) {\n      viewModel.dropDownVisible = false;\n    }\n  };\n\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.addEventListener(\"pointerdown\", this._closeDropDown, true);\n  } else {\n    document.addEventListener(\"mousedown\", this._closeDropDown, true);\n    document.addEventListener(\"touchstart\", this._closeDropDown, true);\n  }\n}\n\nObject.defineProperties(BaseLayerPicker.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof BaseLayerPicker.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof BaseLayerPicker.prototype\n   *\n   * @type {BaseLayerPickerViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nBaseLayerPicker.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nBaseLayerPicker.prototype.destroy = function () {\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.removeEventListener(\"pointerdown\", this._closeDropDown, true);\n  } else {\n    document.removeEventListener(\"mousedown\", this._closeDropDown, true);\n    document.removeEventListener(\"touchstart\", this._closeDropDown, true);\n  }\n\n  knockout.cleanNode(this._element);\n  knockout.cleanNode(this._dropPanel);\n  this._container.removeChild(this._element);\n  this._container.removeChild(this._dropPanel);\n  return destroyObject(this);\n};\nexport default BaseLayerPicker;\n","import {\n  Frozen,\n  defined,\n  DeveloperError,\n  EllipsoidTerrainProvider,\n  ImageryLayer,\n  Terrain,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link BaseLayerPicker}.\n * @alias BaseLayerPickerViewModel\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Globe} options.globe The Globe to use.\n * @param {ProviderViewModel[]} [options.imageryProviderViewModels=[]] The array of ProviderViewModel instances to use for imagery.\n * @param {ProviderViewModel} [options.selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available imagery layer is used.\n * @param {ProviderViewModel[]} [options.terrainProviderViewModels=[]] The array of ProviderViewModel instances to use for terrain.\n * @param {ProviderViewModel} [options.selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available terrain layer is used.\n *\n * @exception {DeveloperError} imageryProviderViewModels must be an array.\n * @exception {DeveloperError} terrainProviderViewModels must be an array.\n */\nfunction BaseLayerPickerViewModel(options) {\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const globe = options.globe;\n  const imageryProviderViewModels =\n    options.imageryProviderViewModels ?? Frozen.EMPTY_ARRAY;\n  const terrainProviderViewModels =\n    options.terrainProviderViewModels ?? Frozen.EMPTY_ARRAY;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(globe)) {\n    throw new DeveloperError(\"globe is required\");\n  }\n  //>>includeEnd('debug');\n\n  this._globe = globe;\n\n  /**\n   * Gets or sets an array of ProviderViewModel instances available for imagery selection.\n   * This property is observable.\n   * @type {ProviderViewModel[]}\n   */\n  this.imageryProviderViewModels = imageryProviderViewModels.slice(0);\n\n  /**\n   * Gets or sets an array of ProviderViewModel instances available for terrain selection.\n   * This property is observable.\n   * @type {ProviderViewModel[]}\n   */\n  this.terrainProviderViewModels = terrainProviderViewModels.slice(0);\n\n  /**\n   * Gets or sets whether the imagery selection drop-down is currently visible.\n   * @type {boolean}\n   * @default false\n   */\n  this.dropDownVisible = false;\n\n  knockout.track(this, [\n    \"imageryProviderViewModels\",\n    \"terrainProviderViewModels\",\n    \"dropDownVisible\",\n  ]);\n\n  const imageryObservable = knockout.getObservable(\n    this,\n    \"imageryProviderViewModels\",\n  );\n  const imageryProviders = knockout.pureComputed(function () {\n    const providers = imageryObservable();\n    const categories = {};\n    let i;\n    for (i = 0; i < providers.length; i++) {\n      const provider = providers[i];\n      const category = provider.category;\n      if (defined(categories[category])) {\n        categories[category].push(provider);\n      } else {\n        categories[category] = [provider];\n      }\n    }\n    const allCategoryNames = Object.keys(categories);\n\n    const result = [];\n    for (i = 0; i < allCategoryNames.length; i++) {\n      const name = allCategoryNames[i];\n      result.push({\n        name: name,\n        providers: categories[name],\n      });\n    }\n    return result;\n  });\n  this._imageryProviders = imageryProviders;\n\n  const terrainObservable = knockout.getObservable(\n    this,\n    \"terrainProviderViewModels\",\n  );\n  const terrainProviders = knockout.pureComputed(function () {\n    const providers = terrainObservable();\n    const categories = {};\n    let i;\n    for (i = 0; i < providers.length; i++) {\n      const provider = providers[i];\n      const category = provider.category;\n      if (defined(categories[category])) {\n        categories[category].push(provider);\n      } else {\n        categories[category] = [provider];\n      }\n    }\n    const allCategoryNames = Object.keys(categories);\n\n    const result = [];\n    for (i = 0; i < allCategoryNames.length; i++) {\n      const name = allCategoryNames[i];\n      result.push({\n        name: name,\n        providers: categories[name],\n      });\n    }\n    return result;\n  });\n  this._terrainProviders = terrainProviders;\n\n  /**\n   * Gets the button tooltip.  This property is observable.\n   * @type {string}\n   */\n  this.buttonTooltip = undefined;\n  knockout.defineProperty(this, \"buttonTooltip\", function () {\n    const selectedImagery = this.selectedImagery;\n    const selectedTerrain = this.selectedTerrain;\n\n    const imageryTip = defined(selectedImagery)\n      ? selectedImagery.name\n      : undefined;\n    const terrainTip = defined(selectedTerrain)\n      ? selectedTerrain.name\n      : undefined;\n\n    if (defined(imageryTip) && defined(terrainTip)) {\n      return `${imageryTip}\\n${terrainTip}`;\n    } else if (defined(imageryTip)) {\n      return imageryTip;\n    }\n    return terrainTip;\n  });\n\n  /**\n   * Gets the button background image.  This property is observable.\n   * @type {string}\n   */\n  this.buttonImageUrl = undefined;\n  knockout.defineProperty(this, \"buttonImageUrl\", function () {\n    const selectedImagery = this.selectedImagery;\n    if (defined(selectedImagery)) {\n      return selectedImagery.iconUrl;\n    }\n  });\n\n  /**\n   * Gets or sets the currently selected imagery.  This property is observable.\n   * @type {ProviderViewModel}\n   * @default undefined\n   */\n  this.selectedImagery = undefined;\n  const selectedImageryViewModel = knockout.observable();\n\n  this._currentImageryLayers = [];\n  knockout.defineProperty(this, \"selectedImagery\", {\n    get: function () {\n      return selectedImageryViewModel();\n    },\n    set: function (value) {\n      if (selectedImageryViewModel() === value) {\n        this.dropDownVisible = false;\n        return;\n      }\n\n      let i;\n      const currentImageryLayers = this._currentImageryLayers;\n      const currentImageryLayersLength = currentImageryLayers.length;\n      const imageryLayers = this._globe.imageryLayers;\n      let hadExistingBaseLayer = false;\n      for (i = 0; i < currentImageryLayersLength; i++) {\n        const layersLength = imageryLayers.length;\n        for (let x = 0; x < layersLength; x++) {\n          const layer = imageryLayers.get(x);\n          if (layer === currentImageryLayers[i]) {\n            imageryLayers.remove(layer);\n            hadExistingBaseLayer = true;\n            break;\n          }\n        }\n      }\n\n      if (defined(value)) {\n        const newProviders = value.creationCommand();\n        if (Array.isArray(newProviders)) {\n          const newProvidersLength = newProviders.length;\n          this._currentImageryLayers = [];\n          for (i = newProvidersLength - 1; i >= 0; i--) {\n            const layer = ImageryLayer.fromProviderAsync(newProviders[i]);\n            imageryLayers.add(layer, 0);\n            this._currentImageryLayers.push(layer);\n          }\n        } else {\n          this._currentImageryLayers = [];\n          const layer = ImageryLayer.fromProviderAsync(newProviders);\n          layer.name = value.name;\n          if (hadExistingBaseLayer) {\n            imageryLayers.add(layer, 0);\n          } else {\n            const baseLayer = imageryLayers.get(0);\n            if (defined(baseLayer)) {\n              imageryLayers.remove(baseLayer);\n            }\n            imageryLayers.add(layer, 0);\n          }\n          this._currentImageryLayers.push(layer);\n        }\n      }\n      selectedImageryViewModel(value);\n      this.dropDownVisible = false;\n    },\n  });\n\n  /**\n   * Gets or sets the currently selected terrain.  This property is observable.\n   * @type {ProviderViewModel}\n   * @default undefined\n   */\n  this.selectedTerrain = undefined;\n  const selectedTerrainViewModel = knockout.observable();\n\n  knockout.defineProperty(this, \"selectedTerrain\", {\n    get: function () {\n      return selectedTerrainViewModel();\n    },\n    set: function (value) {\n      if (selectedTerrainViewModel() === value) {\n        this.dropDownVisible = false;\n        return;\n      }\n\n      let newProvider;\n      if (defined(value)) {\n        newProvider = value.creationCommand();\n      }\n\n      // If this is not a promise, we must set this synchronously to avoid overriding depthTestAgainstTerrain\n      // See https://github.com/CesiumGS/cesium/issues/6991\n      if (defined(newProvider) && !defined(newProvider.then)) {\n        this._globe.depthTestAgainstTerrain = !(\n          newProvider instanceof EllipsoidTerrainProvider\n        );\n        this._globe.terrainProvider = newProvider;\n      } else if (defined(newProvider)) {\n        let cancelUpdate = false;\n        const removeCancelListener =\n          this._globe.terrainProviderChanged.addEventListener(() => {\n            cancelUpdate = true;\n            removeCancelListener();\n          });\n\n        const terrain = new Terrain(newProvider);\n        const removeEventListener = terrain.readyEvent.addEventListener(\n          (terrainProvider) => {\n            if (cancelUpdate) {\n              // Early return in case something has changed outside of the picker.\n              return;\n            }\n\n            this._globe.depthTestAgainstTerrain = !(\n              terrainProvider instanceof EllipsoidTerrainProvider\n            );\n            this._globe.terrainProvider = terrainProvider;\n            removeEventListener();\n          },\n        );\n      }\n\n      selectedTerrainViewModel(value);\n      this.dropDownVisible = false;\n    },\n  });\n\n  const that = this;\n  this._toggleDropDown = createCommand(function () {\n    that.dropDownVisible = !that.dropDownVisible;\n  });\n\n  this.selectedImagery =\n    options.selectedImageryProviderViewModel ?? imageryProviderViewModels[0];\n  this.selectedTerrain = options.selectedTerrainProviderViewModel;\n}\n\nObject.defineProperties(BaseLayerPickerViewModel.prototype, {\n  /**\n   * Gets the command to toggle the visibility of the drop down.\n   * @memberof BaseLayerPickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  toggleDropDown: {\n    get: function () {\n      return this._toggleDropDown;\n    },\n  },\n\n  /**\n   * Gets the globe.\n   * @memberof BaseLayerPickerViewModel.prototype\n   *\n   * @type {Globe}\n   */\n  globe: {\n    get: function () {\n      return this._globe;\n    },\n  },\n});\nexport default BaseLayerPickerViewModel;\n","import { defined, DeveloperError } from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * A view model that represents each item in the {@link BaseLayerPicker}.\n *\n * @alias ProviderViewModel\n * @constructor\n *\n * @param {object} options The object containing all parameters.\n * @param {string} options.name The name of the layer.\n * @param {string} options.tooltip The tooltip to show when the item is moused over.\n * @param {string} options.iconUrl An icon representing the layer.\n * @param {string} [options.category] A category for the layer.\n * @param {ProviderViewModel.CreationFunction|Command} options.creationFunction A function or Command\n *        that creates one or more providers which will be added to the globe when this item is selected.\n *\n * @see BaseLayerPicker\n * @see ImageryProvider\n * @see TerrainProvider\n */\nfunction ProviderViewModel(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options.name)) {\n    throw new DeveloperError(\"options.name is required.\");\n  }\n  if (!defined(options.tooltip)) {\n    throw new DeveloperError(\"options.tooltip is required.\");\n  }\n  if (!defined(options.iconUrl)) {\n    throw new DeveloperError(\"options.iconUrl is required.\");\n  }\n  if (typeof options.creationFunction !== \"function\") {\n    throw new DeveloperError(\"options.creationFunction is required.\");\n  }\n  //>>includeEnd('debug');\n\n  let creationCommand = options.creationFunction;\n  if (!defined(creationCommand.canExecute)) {\n    creationCommand = createCommand(creationCommand);\n  }\n\n  this._creationCommand = creationCommand;\n\n  /**\n   * Gets the display name.  This property is observable.\n   * @type {string}\n   */\n  this.name = options.name;\n\n  /**\n   * Gets the tooltip.  This property is observable.\n   * @type {string}\n   */\n  this.tooltip = options.tooltip;\n\n  /**\n   * Gets the icon.  This property is observable.\n   * @type {string}\n   */\n  this.iconUrl = options.iconUrl;\n\n  this._category = options.category ?? \"\";\n\n  knockout.track(this, [\"name\", \"tooltip\", \"iconUrl\"]);\n}\n\nObject.defineProperties(ProviderViewModel.prototype, {\n  /**\n   * Gets the Command that creates one or more providers which will be added to\n   * the globe when this item is selected.\n   * @memberof ProviderViewModel.prototype\n   * @memberof ProviderViewModel.prototype\n   * @type {Command}\n   * @readonly\n   */\n  creationCommand: {\n    get: function () {\n      return this._creationCommand;\n    },\n  },\n\n  /**\n   * Gets the category\n   * @type {string}\n   * @memberof ProviderViewModel.prototype\n   * @readonly\n   */\n  category: {\n    get: function () {\n      return this._category;\n    },\n  },\n});\n\n/**\n * A function which creates one or more providers.\n * @callback ProviderViewModel.CreationFunction\n * @returns {ImageryProvider|TerrainProvider|ImageryProvider[]|TerrainProvider[]|Promise<TerrainProvider>|Promise<ImageryProvider>|Promise<TerrainProvider[]>|Promise<ImageryProvider[]>}\n *          The ImageryProvider or TerrainProvider, or array of providers, to be added\n *          to the globe.\n */\nexport default ProviderViewModel;\n","import {\n  ArcGisMapServerImageryProvider,\n  buildModuleUrl,\n  createWorldImageryAsync,\n  IonImageryProvider,\n  IonWorldImageryStyle,\n  OpenStreetMapImageryProvider,\n  TileMapServiceImageryProvider,\n  ArcGisBaseMapType,\n} from \"@cesium/engine\";\nimport ProviderViewModel from \"./ProviderViewModel.js\";\n\n/**\n * @private\n */\nfunction createDefaultImageryProviderViewModels() {\n  const providerViewModels = [];\n  const useRetinaTiles = devicePixelRatio >= 2.0;\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Bing Maps Aerial\",\n      iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/bingAerial.png\"),\n      tooltip: \"Bing Maps aerial imagery, provided by Cesium ion\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return createWorldImageryAsync({\n          style: IonWorldImageryStyle.AERIAL,\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Bing Maps Aerial with Labels\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/bingAerialLabels.png\",\n      ),\n      tooltip: \"Bing Maps aerial imagery with labels, provided by Cesium ion\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return createWorldImageryAsync({\n          style: IonWorldImageryStyle.AERIAL_WITH_LABELS,\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Bing Maps Roads\",\n      iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/bingRoads.png\"),\n      tooltip: \"Bing Maps standard road maps, provided by Cesium ion\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return createWorldImageryAsync({\n          style: IonWorldImageryStyle.ROAD,\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"ArcGIS World Imagery\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png\",\n      ),\n      tooltip:\n        \"\\\nArcGIS World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower \\\nresolution satellite imagery worldwide. The map includes 15m TerraColor imagery at small and mid-scales (~1:591M down to ~1:288k) \\\nfor the world. The map features Maxar imagery at 0.3m resolution for select metropolitan areas around the world, 0.5m \\\nresolution across the United States and parts of Western Europe, and 1m resolution imagery across the rest of the world. \\\nIn addition to commercial sources, the World Imagery map features high-resolution aerial photography contributed by the \\\nGIS User Community. This imagery ranges from 0.3m to 0.03m resolution (down to ~1:280 nin select communities). \\\nFor more information on this map, including the terms of use, visit us online at \\n\\\nhttps://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9\",\n      category: \"Other\",\n      creationFunction: function () {\n        return ArcGisMapServerImageryProvider.fromBasemapType(\n          ArcGisBaseMapType.SATELLITE,\n          {\n            enablePickFeatures: false,\n          },\n        );\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"ArcGIS World Hillshade\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png\",\n      ),\n      tooltip:\n        \"\\\nArcGIS World Hillshade map portrays elevation as an artistic hillshade. This map is designed to be used as a backdrop for topographical, soil, hydro, \\\nlandcover or other outdoor recreational maps. The map was compiled from a variety of sources from several data providers. \\\nThe basemap has global coverage down to a scale of ~1:72k. In select areas of the United States and Europe, coverage is available \\\ndown to ~1:9k. For more information on this map, including the terms of use, visit us online at \\n\\\nhttps://www.arcgis.com/home/item.html?id=1b243539f4514b6ba35e7d995890db1d\",\n      category: \"Other\",\n      creationFunction: function () {\n        return ArcGisMapServerImageryProvider.fromBasemapType(\n          ArcGisBaseMapType.HILLSHADE,\n          {\n            enablePickFeatures: false,\n          },\n        );\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Esri World Ocean\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png\",\n      ),\n      tooltip:\n        \"\\\nArcGIS World Ocean map is designed to be used as a base map by marine GIS professionals and as a reference map by anyone interested in ocean data.  \\\nThe base map features marine bathymetry. Land features include inland waters and roads overlaid on land cover and shaded relief imagery. \\\nThe map was compiled from a variety of best available sources from several data providers, including General Bathymetric Chart of the Oceans GEBCO_08 Grid, \\\nNational Oceanic and Atmospheric Administration (NOAA), and National Geographic, Garmin, HERE, Geonames.org, and Esri, and various other contributors. \\\nThe base map currently provides coverage for the world down to a scale of ~1:577k, and coverage down to 1:72k in US coastal areas, and various other areas. \\\nCoverage down to ~ 1:9k is available limited areas based on regional hydrographic survey data. The base map was designed and developed by Esri. \\\nFor more information on this map, including our terms of use, visit us online at \\n\\\nhttps://www.arcgis.com/home/item.html?id=1e126e7520f9466c9ca28b8f28b5e500\",\n      category: \"Other\",\n      creationFunction: function () {\n        return ArcGisMapServerImageryProvider.fromBasemapType(\n          ArcGisBaseMapType.OCEANS,\n          {\n            enablePickFeatures: false,\n          },\n        );\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Open\\u00adStreet\\u00adMap\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/openStreetMap.png\",\n      ),\n      tooltip:\n        \"OpenStreetMap (OSM) is a collaborative project to create a free editable map \\\nof the world.\\nhttp://www.openstreetmap.org\",\n      category: \"Other\",\n      creationFunction: function () {\n        return new OpenStreetMapImageryProvider({\n          url: \"https://tile.openstreetmap.org/\",\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Stadia x Stamen Watercolor\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/stamenWatercolor.png\",\n      ),\n      tooltip:\n        \"Based on the original basemaps created for the Knight Foundation and reminiscent of hand drawn maps, the watercolor maps from Stamen Design apply raster effect area washes and organic edges over a paper texture to add warm pop to any map.\\nhttps://docs.stadiamaps.com/map-styles/stamen-watercolor/\",\n      category: \"Other\",\n      creationFunction: function () {\n        return new OpenStreetMapImageryProvider({\n          url: \"https://tiles.stadiamaps.com/tiles/stamen_watercolor/\",\n          fileExtension: \"jpg\",\n          credit: `&copy; <a href=\"https://stamen.com/\" target=\"_blank\">Stamen Design</a>\n           &copy; <a href=\"https://www.stadiamaps.com/\" target=\"_blank\">Stadia Maps</a>\n           &copy; <a href=\"https://openmaptiles.org/\" target=\"_blank\">OpenMapTiles</a>\n           &copy; <a href=\"https://www.openstreetmap.org/about/\" target=\"_blank\">OpenStreetMap contributors</a>`,\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Stadia x Stamen Toner\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/stamenToner.png\",\n      ),\n      tooltip:\n        \"Based on the original basemaps created for the Knight Foundation and the most popular of the excellent styles from Stamen Design, these high-contrast B+W (black and white) maps are the perfect backdrop for your colorful and eye-catching overlays.\\nhttps://docs.stadiamaps.com/map-styles/stamen-toner/\",\n      category: \"Other\",\n      creationFunction: function () {\n        return new OpenStreetMapImageryProvider({\n          url: \"https://tiles.stadiamaps.com/tiles/stamen_toner/\",\n          retinaTiles: useRetinaTiles,\n          credit: `&copy; <a href=\"https://stamen.com/\" target=\"_blank\">Stamen Design</a>\n            &copy; <a href=\"https://www.stadiamaps.com/\" target=\"_blank\">Stadia Maps</a>\n            &copy; <a href=\"https://openmaptiles.org/\" target=\"_blank\">OpenMapTiles</a>\n            &copy; <a href=\"https://www.openstreetmap.org/about/\" target=\"_blank\">OpenStreetMap contributors</a>`,\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Stadia Alidade Smooth\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png\",\n      ),\n      tooltip:\n        \"Stadia's custom Alidade Smooth style is designed for maps that use a lot of markers or overlays. It features a muted color scheme and fewer points of interest to allow your added data to shine.\\nhttps://docs.stadiamaps.com/map-styles/alidade-smooth/\",\n      category: \"Other\",\n      creationFunction: function () {\n        return new OpenStreetMapImageryProvider({\n          url: \"https://tiles.stadiamaps.com/tiles/alidade_smooth/\",\n          retinaTiles: useRetinaTiles,\n          credit: `&copy; <a href=\"https://www.stadiamaps.com/\" target=\"_blank\">Stadia Maps</a>\n            &copy; <a href=\"https://openmaptiles.org/\" target=\"_blank\">OpenMapTiles</a>\n            &copy; <a href=\"https://www.openstreetmap.org/about/\" target=\"_blank\">OpenStreetMap contributors</a>`,\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Stadia Alidade Smooth Dark\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png\",\n      ),\n      tooltip:\n        \"Stadia Alidade Smooth Dark, like its lighter cousin, is also designed to stay out of the way. It just flips the dark mode switch on the color scheme. With the lights out, your data can now literally shine.\\nhttps://docs.stadiamaps.com/map-styles/alidade-smooth-dark/\",\n      category: \"Other\",\n      creationFunction: function () {\n        return new OpenStreetMapImageryProvider({\n          url: \"https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/\",\n          retinaTiles: useRetinaTiles,\n          credit: `&copy; <a href=\"https://www.stadiamaps.com/\" target=\"_blank\">Stadia Maps</a>\n            &copy; <a href=\"https://openmaptiles.org/\" target=\"_blank\">OpenMapTiles</a>\n            &copy; <a href=\"https://www.openstreetmap.org/about/\" target=\"_blank\">OpenStreetMap contributors</a>`,\n        });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Sentinel-2\",\n      iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/sentinel-2.png\"),\n      tooltip:\n        \"Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3954);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Blue Marble\",\n      iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/blueMarble.png\"),\n      tooltip: \"Blue Marble Next Generation July, 2004 imagery from NASA.\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3845);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Earth at night\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/earthAtNight.png\",\n      ),\n      tooltip:\n        \"The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3812);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Natural Earth\\u00a0II\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/naturalEarthII.png\",\n      ),\n      tooltip:\n        \"Natural Earth II, darkened for contrast.\\nhttp://www.naturalearthdata.com/\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return TileMapServiceImageryProvider.fromUrl(\n          buildModuleUrl(\"Assets/Textures/NaturalEarthII\"),\n        );\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Google Maps Satellite\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/googleSatellite.png\",\n      ),\n      tooltip: \"Imagery from Google Maps\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3830182);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Google Maps Satellite with Labels\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/googleSatelliteLabels.png\",\n      ),\n      tooltip: \"Imagery with place labels from Google Maps\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3830183);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Google Maps Roadmap\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/googleRoadmap.png\",\n      ),\n      tooltip:\n        \"Labeled roads and other features on a base landscape from Google Maps\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3830184);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Google Maps Contour\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/googleContour.png\",\n      ),\n      tooltip:\n        \"Hillshade mapping, contour lines, natural features (roadmap features hidden) from Google Maps\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3830186);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Azure Maps Aerial\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/ImageryProviders/azureAerial.png\",\n      ),\n      tooltip: \"Imagery from Azure Maps\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3891168);\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Azure Maps Roads\",\n      iconUrl: buildModuleUrl(\"Widgets/Images/ImageryProviders/azureRoads.png\"),\n      tooltip:\n        \"Labeled roads and other features on a base landscape from Azure Maps\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return IonImageryProvider.fromAssetId(3891169);\n      },\n    }),\n  );\n\n  return providerViewModels;\n}\nexport default createDefaultImageryProviderViewModels;\n","import {\n  buildModuleUrl,\n  createWorldTerrainAsync,\n  Ellipsoid,\n  EllipsoidTerrainProvider,\n} from \"@cesium/engine\";\nimport ProviderViewModel from \"./ProviderViewModel.js\";\n\n/**\n * @private\n */\nfunction createDefaultTerrainProviderViewModels() {\n  const providerViewModels = [];\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"WGS84 Ellipsoid\",\n      iconUrl: buildModuleUrl(\"Widgets/Images/TerrainProviders/Ellipsoid.png\"),\n      tooltip: \"WGS84 standard ellipsoid, also known as EPSG:4326\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return new EllipsoidTerrainProvider({ ellipsoid: Ellipsoid.WGS84 });\n      },\n    }),\n  );\n\n  providerViewModels.push(\n    new ProviderViewModel({\n      name: \"Cesium World Terrain\",\n      iconUrl: buildModuleUrl(\n        \"Widgets/Images/TerrainProviders/CesiumWorldTerrain.png\",\n      ),\n      tooltip:\n        \"High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion\",\n      category: \"Cesium ion\",\n      creationFunction: function () {\n        return createWorldTerrainAsync({\n          requestWaterMask: true,\n          requestVertexNormals: true,\n        });\n      },\n    }),\n  );\n\n  return providerViewModels;\n}\nexport default createDefaultTerrainProviderViewModels;\n","import { Check, destroyObject, getElement } from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport InspectorShared from \"../InspectorShared.js\";\nimport Cesium3DTilesInspectorViewModel from \"./Cesium3DTilesInspectorViewModel.js\";\n\n/**\n * Inspector widget to aid in debugging 3D Tiles\n *\n * @alias Cesium3DTilesInspector\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene the Scene instance to use.\n */\nfunction Cesium3DTilesInspector(container, scene) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"container\", container);\n  Check.typeOf.object(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n  const element = document.createElement(\"div\");\n  const performanceContainer = document.createElement(\"div\");\n  performanceContainer.setAttribute(\"data-bind\", \"visible: performance\");\n  const viewModel = new Cesium3DTilesInspectorViewModel(\n    scene,\n    performanceContainer,\n  );\n\n  this._viewModel = viewModel;\n  this._container = container;\n  this._element = element;\n\n  const text = document.createElement(\"div\");\n  text.textContent = \"3D Tiles Inspector\";\n  text.className = \"cesium-cesiumInspector-button\";\n  text.setAttribute(\"data-bind\", \"click: toggleInspector\");\n  element.appendChild(text);\n  element.className = \"cesium-cesiumInspector cesium-3DTilesInspector\";\n  element.setAttribute(\n    \"data-bind\",\n    'css: { \"cesium-cesiumInspector-visible\" : inspectorVisible, \"cesium-cesiumInspector-hidden\" : !inspectorVisible}',\n  );\n  container.appendChild(element);\n\n  const panel = document.createElement(\"div\");\n  panel.className = \"cesium-cesiumInspector-dropDown\";\n  element.appendChild(panel);\n\n  const createSection = InspectorShared.createSection;\n  const createCheckbox = InspectorShared.createCheckbox;\n  const createRangeInput = InspectorShared.createRangeInput;\n  const createButton = InspectorShared.createButton;\n\n  const tilesetPanelContents = createSection(\n    panel,\n    \"Tileset\",\n    \"tilesetVisible\",\n    \"toggleTileset\",\n  );\n  const displayPanelContents = createSection(\n    panel,\n    \"Display\",\n    \"displayVisible\",\n    \"toggleDisplay\",\n  );\n  const updatePanelContents = createSection(\n    panel,\n    \"Update\",\n    \"updateVisible\",\n    \"toggleUpdate\",\n  );\n  const loggingPanelContents = createSection(\n    panel,\n    \"Logging\",\n    \"loggingVisible\",\n    \"toggleLogging\",\n  );\n  const tileDebugLabelsPanelContents = createSection(\n    panel,\n    \"Tile Debug Labels\",\n    \"tileDebugLabelsVisible\",\n    \"toggleTileDebugLabels\",\n  );\n  const stylePanelContents = createSection(\n    panel,\n    \"Style\",\n    \"styleVisible\",\n    \"toggleStyle\",\n  );\n  const optimizationPanelContents = createSection(\n    panel,\n    \"Optimization\",\n    \"optimizationVisible\",\n    \"toggleOptimization\",\n  );\n\n  const properties = document.createElement(\"div\");\n  properties.className = \"field-group\";\n  const propertiesLabel = document.createElement(\"label\");\n  propertiesLabel.className = \"field-label\";\n  propertiesLabel.appendChild(document.createTextNode(\"Properties: \"));\n  const propertiesField = document.createElement(\"div\");\n  propertiesField.setAttribute(\"data-bind\", \"text: properties\");\n  properties.appendChild(propertiesLabel);\n  properties.appendChild(propertiesField);\n  tilesetPanelContents.appendChild(properties);\n  tilesetPanelContents.appendChild(\n    createButton(\"Pick Tileset\", \"togglePickTileset\", \"pickActive\"),\n  );\n  tilesetPanelContents.appendChild(\n    createButton(\"Trim Tiles Cache\", \"trimTilesCache\"),\n  );\n  tilesetPanelContents.appendChild(createCheckbox(\"Enable Picking\", \"picking\"));\n\n  displayPanelContents.appendChild(createCheckbox(\"Colorize\", \"colorize\"));\n  const wireframeCheckbox = displayPanelContents.appendChild(\n    createCheckbox(\n      \"Wireframe\",\n      \"wireframe\",\n      \"_tileset === undefined || hasEnabledWireframe\",\n    ),\n  );\n\n  // Create warning text when the Wireframe checkbox is disabled\n  const warningText = document.createElement(\"p\");\n  warningText.setAttribute(\n    \"data-bind\",\n    \"visible: _tileset !== undefined && !hasEnabledWireframe\",\n  );\n  warningText.setAttribute(\n    \"class\",\n    \"cesium-3DTilesInspector-disabledElementsInfo\",\n  );\n  warningText.innerText =\n    \"Set enableDebugWireframe to true in the tileset constructor to enable this option.\";\n  wireframeCheckbox.appendChild(warningText);\n\n  displayPanelContents.appendChild(\n    createCheckbox(\"Bounding Volumes\", \"showBoundingVolumes\"),\n  );\n  displayPanelContents.appendChild(\n    createCheckbox(\"Content Volumes\", \"showContentBoundingVolumes\"),\n  );\n  displayPanelContents.appendChild(\n    createCheckbox(\"Request Volumes\", \"showRequestVolumes\"),\n  );\n\n  displayPanelContents.appendChild(\n    createCheckbox(\"Point Cloud Shading\", \"pointCloudShading\"),\n  );\n  const pointCloudShadingContainer = document.createElement(\"div\");\n  pointCloudShadingContainer.setAttribute(\n    \"data-bind\",\n    \"visible: pointCloudShading\",\n  );\n  pointCloudShadingContainer.appendChild(\n    createRangeInput(\n      \"Geometric Error Scale\",\n      \"geometricErrorScale\",\n      0,\n      2,\n      0.01,\n    ),\n  );\n  pointCloudShadingContainer.appendChild(\n    createRangeInput(\"Maximum Attenuation\", \"maximumAttenuation\", 0, 32, 1),\n  );\n  pointCloudShadingContainer.appendChild(\n    createRangeInput(\"Base Resolution\", \"baseResolution\", 0, 1, 0.01),\n  );\n  pointCloudShadingContainer.appendChild(\n    createCheckbox(\"Eye Dome Lighting (EDL)\", \"eyeDomeLighting\"),\n  );\n  displayPanelContents.appendChild(pointCloudShadingContainer);\n\n  const edlContainer = document.createElement(\"div\");\n  edlContainer.setAttribute(\"data-bind\", \"visible: eyeDomeLighting\");\n  edlContainer.appendChild(\n    createRangeInput(\"EDL Strength\", \"eyeDomeLightingStrength\", 0, 2.0, 0.1),\n  );\n  edlContainer.appendChild(\n    createRangeInput(\"EDL Radius\", \"eyeDomeLightingRadius\", 0, 4.0, 0.1),\n  );\n  pointCloudShadingContainer.appendChild(edlContainer);\n\n  updatePanelContents.appendChild(\n    createCheckbox(\"Freeze Frame\", \"freezeFrame\"),\n  );\n  updatePanelContents.appendChild(\n    createCheckbox(\"Dynamic Screen Space Error\", \"dynamicScreenSpaceError\"),\n  );\n  const sseContainer = document.createElement(\"div\");\n  sseContainer.appendChild(\n    createRangeInput(\n      \"Maximum Screen Space Error\",\n      \"maximumScreenSpaceError\",\n      0,\n      128,\n      1,\n    ),\n  );\n  updatePanelContents.appendChild(sseContainer);\n  const dynamicScreenSpaceErrorContainer = document.createElement(\"div\");\n  dynamicScreenSpaceErrorContainer.setAttribute(\n    \"data-bind\",\n    \"visible: dynamicScreenSpaceError\",\n  );\n  dynamicScreenSpaceErrorContainer.appendChild(\n    createRangeInput(\n      \"Screen Space Error Density\",\n      \"dynamicScreenSpaceErrorDensitySliderValue\",\n      0,\n      1,\n      0.005,\n      \"dynamicScreenSpaceErrorDensity\",\n    ),\n  );\n  dynamicScreenSpaceErrorContainer.appendChild(\n    createRangeInput(\n      \"Screen Space Error Factor\",\n      \"dynamicScreenSpaceErrorFactor\",\n      1,\n      32,\n      0.1,\n    ),\n  );\n  updatePanelContents.appendChild(dynamicScreenSpaceErrorContainer);\n\n  loggingPanelContents.appendChild(\n    createCheckbox(\"Performance\", \"performance\"),\n  );\n  loggingPanelContents.appendChild(performanceContainer);\n  loggingPanelContents.appendChild(\n    createCheckbox(\"Statistics\", \"showStatistics\"),\n  );\n  const statistics = document.createElement(\"div\");\n  statistics.className = \"cesium-3dTilesInspector-statistics\";\n  statistics.setAttribute(\n    \"data-bind\",\n    \"html: statisticsText, visible: showStatistics\",\n  );\n  loggingPanelContents.appendChild(statistics);\n  loggingPanelContents.appendChild(\n    createCheckbox(\"Pick Statistics\", \"showPickStatistics\"),\n  );\n  const pickStatistics = document.createElement(\"div\");\n  pickStatistics.className = \"cesium-3dTilesInspector-statistics\";\n  pickStatistics.setAttribute(\n    \"data-bind\",\n    \"html: pickStatisticsText, visible: showPickStatistics\",\n  );\n  loggingPanelContents.appendChild(pickStatistics);\n  loggingPanelContents.appendChild(\n    createCheckbox(\"Resource Cache Statistics\", \"showResourceCacheStatistics\"),\n  );\n  const resourceCacheStatistics = document.createElement(\"div\");\n  resourceCacheStatistics.className = \"cesium-3dTilesInspector-statistics\";\n  resourceCacheStatistics.setAttribute(\n    \"data-bind\",\n    \"html: resourceCacheStatisticsText, visible: showResourceCacheStatistics\",\n  );\n  loggingPanelContents.appendChild(resourceCacheStatistics);\n\n  const stylePanelEditor = document.createElement(\"div\");\n  stylePanelContents.appendChild(stylePanelEditor);\n  stylePanelEditor.appendChild(document.createTextNode(\"Color Blend Mode: \"));\n  const blendDropdown = document.createElement(\"select\");\n  blendDropdown.setAttribute(\n    \"data-bind\",\n    \"options: colorBlendModes, \" +\n      'optionsText: \"text\", ' +\n      'optionsValue: \"value\", ' +\n      \"value: colorBlendMode\",\n  );\n  stylePanelEditor.appendChild(blendDropdown);\n  const styleEditor = document.createElement(\"textarea\");\n  styleEditor.setAttribute(\n    \"data-bind\",\n    \"textInput: styleString, event: { keydown: styleEditorKeyPress }\",\n  );\n  stylePanelEditor.className = \"cesium-cesiumInspector-styleEditor\";\n  stylePanelEditor.appendChild(styleEditor);\n  const closeStylesBtn = createButton(\"Compile (Ctrl+Enter)\", \"compileStyle\");\n  stylePanelEditor.appendChild(closeStylesBtn);\n  const errorBox = document.createElement(\"div\");\n  errorBox.className = \"cesium-cesiumInspector-error\";\n  errorBox.setAttribute(\"data-bind\", \"text: editorError\");\n  stylePanelEditor.appendChild(errorBox);\n\n  tileDebugLabelsPanelContents.appendChild(\n    createCheckbox(\"Show Picked Only\", \"showOnlyPickedTileDebugLabel\"),\n  );\n  tileDebugLabelsPanelContents.appendChild(\n    createCheckbox(\"Geometric Error\", \"showGeometricError\"),\n  );\n  tileDebugLabelsPanelContents.appendChild(\n    createCheckbox(\"Rendering Statistics\", \"showRenderingStatistics\"),\n  );\n  tileDebugLabelsPanelContents.appendChild(\n    createCheckbox(\"Memory Usage (MB)\", \"showMemoryUsage\"),\n  );\n  tileDebugLabelsPanelContents.appendChild(createCheckbox(\"Url\", \"showUrl\"));\n\n  optimizationPanelContents.appendChild(\n    createCheckbox(\"Skip Tile LODs\", \"skipLevelOfDetail\"),\n  );\n  const skipScreenSpaceErrorFactorContainer = document.createElement(\"div\");\n  skipScreenSpaceErrorFactorContainer.appendChild(\n    createRangeInput(\"Skip SSE Factor\", \"skipScreenSpaceErrorFactor\", 1, 50, 1),\n  );\n  optimizationPanelContents.appendChild(skipScreenSpaceErrorFactorContainer);\n  const baseScreenSpaceError = document.createElement(\"div\");\n  baseScreenSpaceError.appendChild(\n    createRangeInput(\n      \"SSE before skipping LOD\",\n      \"baseScreenSpaceError\",\n      0,\n      4096,\n      1,\n    ),\n  );\n  optimizationPanelContents.appendChild(baseScreenSpaceError);\n  const skipLevelsContainer = document.createElement(\"div\");\n  skipLevelsContainer.appendChild(\n    createRangeInput(\"Min. levels to skip\", \"skipLevels\", 0, 10, 1),\n  );\n  optimizationPanelContents.appendChild(skipLevelsContainer);\n  optimizationPanelContents.appendChild(\n    createCheckbox(\n      \"Load only tiles that meet the max SSE.\",\n      \"immediatelyLoadDesiredLevelOfDetail\",\n    ),\n  );\n  optimizationPanelContents.appendChild(\n    createCheckbox(\"Load siblings of visible tiles\", \"loadSiblings\"),\n  );\n\n  knockout.applyBindings(viewModel, element);\n}\n\nObject.defineProperties(Cesium3DTilesInspector.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof Cesium3DTilesInspector.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof Cesium3DTilesInspector.prototype\n   *\n   * @type {Cesium3DTilesInspectorViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nCesium3DTilesInspector.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nCesium3DTilesInspector.prototype.destroy = function () {\n  knockout.cleanNode(this._element);\n  this._container.removeChild(this._element);\n  this.viewModel.destroy();\n\n  return destroyObject(this);\n};\n\nexport default Cesium3DTilesInspector;\n","import {\n  Check,\n  Color,\n  defined,\n  destroyObject,\n  Cesium3DTileColorBlendMode,\n  Cesium3DTileFeature,\n  Cesium3DTilePass,\n  Cesium3DTileset,\n  Cesium3DTileStyle,\n  PerformanceDisplay,\n  ResourceCache,\n  ScreenSpaceEventHandler,\n  ScreenSpaceEventType,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\nfunction getPickTileset(viewModel) {\n  return function (e) {\n    const pick = viewModel._scene.pick(e.position);\n    if (defined(pick) && pick.primitive instanceof Cesium3DTileset) {\n      viewModel.tileset = pick.primitive;\n    }\n    viewModel.pickActive = false;\n  };\n}\n\nfunction selectTilesetOnHover(viewModel, value) {\n  if (value) {\n    viewModel._eventHandler.setInputAction(function (e) {\n      const pick = viewModel._scene.pick(e.endPosition);\n      if (defined(pick) && pick.primitive instanceof Cesium3DTileset) {\n        viewModel.tileset = pick.primitive;\n      }\n    }, ScreenSpaceEventType.MOUSE_MOVE);\n  } else {\n    viewModel._eventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE);\n\n    // Restore hover-over selection to its current value\n    // eslint-disable-next-line no-self-assign\n    viewModel.picking = viewModel.picking;\n  }\n}\n\nconst stringOptions = {\n  maximumFractionDigits: 3,\n};\n\nfunction formatMemoryString(memorySizeInBytes) {\n  const memoryInMegabytes = memorySizeInBytes / 1048576;\n  if (memoryInMegabytes < 1.0) {\n    return memoryInMegabytes.toLocaleString(undefined, stringOptions);\n  }\n  return Math.round(memoryInMegabytes).toLocaleString();\n}\n\nfunction getStatistics(tileset, isPick) {\n  if (!defined(tileset)) {\n    return \"\";\n  }\n\n  const statistics = isPick\n    ? tileset._statisticsPerPass[Cesium3DTilePass.PICK]\n    : tileset._statisticsPerPass[Cesium3DTilePass.RENDER];\n\n  // Since the pick pass uses a smaller frustum around the pixel of interest,\n  // the statistics will be different than the normal render pass.\n  let s = '<ul class=\"cesium-cesiumInspector-statistics\">';\n  s +=\n    // --- Rendering statistics\n    `<li><strong>Visited: </strong>${statistics.visited.toLocaleString()}</li>` +\n    // Number of commands returned is likely to be higher than the number of tiles selected\n    // because of tiles that create multiple commands.\n    `<li><strong>Selected: </strong>${statistics.selected.toLocaleString()}</li>` +\n    // Number of commands executed is likely to be higher because of commands overlapping\n    // multiple frustums.\n    `<li><strong>Commands: </strong>${statistics.numberOfCommands.toLocaleString()}</li>`;\n  s += \"</ul>\";\n  if (!isPick) {\n    s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n    s +=\n      // --- Cache/loading statistics\n      `<li><strong>Requests: </strong>${statistics.numberOfPendingRequests.toLocaleString()}</li>` +\n      `<li><strong>Attempted: </strong>${statistics.numberOfAttemptedRequests.toLocaleString()}</li>` +\n      `<li><strong>Processing: </strong>${statistics.numberOfTilesProcessing.toLocaleString()}</li>` +\n      `<li><strong>Content Ready: </strong>${statistics.numberOfTilesWithContentReady.toLocaleString()}</li>` +\n      // Total number of tiles includes tiles without content, so \"Ready\" may never reach\n      // \"Total.\"  Total also will increase when a tile with a tileset JSON content is loaded.\n      `<li><strong>Total: </strong>${statistics.numberOfTilesTotal.toLocaleString()}</li>`;\n    s += \"</ul>\";\n    s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n    s +=\n      // --- Features statistics\n      `<li><strong>Features Selected: </strong>${statistics.numberOfFeaturesSelected.toLocaleString()}</li>` +\n      `<li><strong>Features Loaded: </strong>${statistics.numberOfFeaturesLoaded.toLocaleString()}</li>` +\n      `<li><strong>Points Selected: </strong>${statistics.numberOfPointsSelected.toLocaleString()}</li>` +\n      `<li><strong>Points Loaded: </strong>${statistics.numberOfPointsLoaded.toLocaleString()}</li>` +\n      `<li><strong>Triangles Selected: </strong>${statistics.numberOfTrianglesSelected.toLocaleString()}</li>`;\n    s += \"</ul>\";\n    s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n    s +=\n      // --- Styling statistics\n      `<li><strong>Tiles styled: </strong>${statistics.numberOfTilesStyled.toLocaleString()}</li>` +\n      `<li><strong>Features styled: </strong>${statistics.numberOfFeaturesStyled.toLocaleString()}</li>`;\n    s += \"</ul>\";\n    s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n    s +=\n      // --- Optimization statistics\n      `<li><strong>Children Union Culled: </strong>${statistics.numberOfTilesCulledWithChildrenUnion.toLocaleString()}</li>`;\n    s += \"</ul>\";\n    s += '<ul class=\"cesium-cesiumInspector-statistics\">';\n    s +=\n      // --- Memory statistics\n      `<li><strong>Geometry Memory (MB): </strong>${formatMemoryString(\n        statistics.geometryByteLength,\n      )}</li>` +\n      `<li><strong>Texture Memory (MB): </strong>${formatMemoryString(\n        statistics.texturesByteLength,\n      )}</li>` +\n      `<li><strong>Batch Table Memory (MB): </strong>${formatMemoryString(\n        statistics.batchTableByteLength,\n      )}</li>`;\n    s += \"</ul>\";\n  }\n  return s;\n}\n\nfunction getResourceCacheStatistics() {\n  const statistics = ResourceCache.statistics;\n\n  return `\n  <ul class=\"cesium-cesiumInspector-statistics\">\n    <li><strong>Geometry Memory (MB): </strong>${formatMemoryString(\n      statistics.geometryByteLength,\n    )}</li>\n    <li><strong>Texture Memory (MB): </strong>${formatMemoryString(\n      statistics.texturesByteLength,\n    )}</li>\n  </ul>\n  `;\n}\n\nconst colorBlendModes = [\n  {\n    text: \"Highlight\",\n    value: Cesium3DTileColorBlendMode.HIGHLIGHT,\n  },\n  {\n    text: \"Replace\",\n    value: Cesium3DTileColorBlendMode.REPLACE,\n  },\n  {\n    text: \"Mix\",\n    value: Cesium3DTileColorBlendMode.MIX,\n  },\n];\n\nconst highlightColor = new Color(1.0, 1.0, 0.0, 0.4);\nconst scratchColor = new Color();\nconst oldColor = new Color();\n\n/**\n * The view model for {@link Cesium3DTilesInspector}.\n * @alias Cesium3DTilesInspectorViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use.\n * @param {HTMLElement} performanceContainer The container for the performance display\n */\nfunction Cesium3DTilesInspectorViewModel(scene, performanceContainer) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scene\", scene);\n  Check.typeOf.object(\"performanceContainer\", performanceContainer);\n  //>>includeEnd('debug');\n\n  const that = this;\n  const canvas = scene.canvas;\n  this._eventHandler = new ScreenSpaceEventHandler(canvas);\n  this._scene = scene;\n  this._performanceContainer = performanceContainer;\n  this._canvas = canvas;\n\n  this._performanceDisplay = new PerformanceDisplay({\n    container: performanceContainer,\n  });\n\n  this._statisticsText = \"\";\n  this._pickStatisticsText = \"\";\n  this._resourceCacheStatisticsText = \"\";\n  this._editorError = \"\";\n\n  /**\n   * Gets or sets the flag to enable performance display.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.performance = false;\n\n  /**\n   * Gets or sets the flag to show statistics.  This property is observable.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.showStatistics = true;\n\n  /**\n   * Gets or sets the flag to show pick statistics.  This property is observable.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.showPickStatistics = true;\n\n  /**\n   * Gets or sets the flag to show resource cache statistics. This property is\n   * observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showResourceCacheStatistics = false;\n\n  /**\n   * Gets or sets the flag to show the inspector.  This property is observable.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.inspectorVisible = true;\n\n  /**\n   * Gets or sets the flag to show the tileset section.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.tilesetVisible = false;\n\n  /**\n   * Gets or sets the flag to show the display section.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.displayVisible = false;\n\n  /**\n   * Gets or sets the flag to show the update section.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.updateVisible = false;\n\n  /**\n   * Gets or sets the flag to show the logging section.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.loggingVisible = false;\n\n  /**\n   * Gets or sets the flag to show the style section.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.styleVisible = false;\n\n  /**\n   * Gets or sets the flag to show the tile info section.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.tileDebugLabelsVisible = false;\n\n  /**\n   * Gets or sets the flag to show the optimization info section. This property is observable.\n   *\n   * @type {boolean}\n   * @default false;\n   */\n  this.optimizationVisible = false;\n\n  /**\n   * Gets or sets the JSON for the tileset style.  This property is observable.\n   *\n   * @type {string}\n   * @default '{}'\n   */\n  this.styleString = \"{}\";\n\n  /**\n   * Gets or sets the JSON for the tileset enableDebugWireframe attribute.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.hasEnabledWireframe = false;\n\n  this._tileset = undefined;\n  this._feature = undefined;\n  this._tile = undefined;\n\n  knockout.track(this, [\n    \"performance\",\n    \"inspectorVisible\",\n    \"_statisticsText\",\n    \"_pickStatisticsText\",\n    \"_resourceCacheStatisticsText\",\n    \"_editorError\",\n    \"showPickStatistics\",\n    \"showStatistics\",\n    \"showResourceCacheStatistics\",\n    \"tilesetVisible\",\n    \"displayVisible\",\n    \"updateVisible\",\n    \"loggingVisible\",\n    \"styleVisible\",\n    \"optimizationVisible\",\n    \"tileDebugLabelsVisible\",\n    \"styleString\",\n    \"_feature\",\n    \"_tile\",\n    \"_tileset\",\n    \"hasEnabledWireframe\",\n  ]);\n\n  this._properties = knockout.observable({});\n  /**\n   * Gets the names of the properties in the tileset.  This property is observable.\n   * @type {string[]}\n   * @readonly\n   */\n  this.properties = [];\n  knockout.defineProperty(this, \"properties\", function () {\n    const names = [];\n    const properties = that._properties();\n    for (const prop in properties) {\n      if (properties.hasOwnProperty(prop)) {\n        names.push(prop);\n      }\n    }\n    return names;\n  });\n\n  const dynamicScreenSpaceError = knockout.observable();\n  knockout.defineProperty(this, \"dynamicScreenSpaceError\", {\n    get: function () {\n      return dynamicScreenSpaceError();\n    },\n    set: function (value) {\n      dynamicScreenSpaceError(value);\n      if (defined(that._tileset)) {\n        that._tileset.dynamicScreenSpaceError = value;\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to enable dynamic screen space error.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.dynamicScreenSpaceError = false;\n\n  const colorBlendMode = knockout.observable();\n  knockout.defineProperty(this, \"colorBlendMode\", {\n    get: function () {\n      return colorBlendMode();\n    },\n    set: function (value) {\n      colorBlendMode(value);\n      if (defined(that._tileset)) {\n        that._tileset.colorBlendMode = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the color blend mode.  This property is observable.\n   *\n   * @type {Cesium3DTileColorBlendMode}\n   * @default Cesium3DTileColorBlendMode.HIGHLIGHT\n   */\n  this.colorBlendMode = Cesium3DTileColorBlendMode.HIGHLIGHT;\n\n  const showOnlyPickedTileDebugLabel = knockout.observable();\n  const picking = knockout.observable();\n  knockout.defineProperty(this, \"picking\", {\n    get: function () {\n      return picking();\n    },\n    set: function (value) {\n      picking(value);\n      if (value) {\n        that._eventHandler.setInputAction(function (e) {\n          const picked = scene.pick(e.endPosition);\n          if (picked instanceof Cesium3DTileFeature) {\n            // Picked a feature\n            that.feature = picked;\n            that.tile = picked.content.tile;\n          } else if (defined(picked) && defined(picked.content)) {\n            // Picked a tile\n            that.feature = undefined;\n            that.tile = picked.content.tile;\n          } else {\n            // Picked nothing\n            that.feature = undefined;\n            that.tile = undefined;\n          }\n          if (!defined(that._tileset)) {\n            return;\n          }\n          if (\n            showOnlyPickedTileDebugLabel &&\n            defined(picked) &&\n            defined(picked.content)\n          ) {\n            let position;\n            if (scene.pickPositionSupported) {\n              position = scene.pickPosition(e.endPosition);\n              if (defined(position)) {\n                that._tileset.debugPickPosition = position;\n              }\n            }\n            that._tileset.debugPickedTile = picked.content.tile;\n          } else {\n            that._tileset.debugPickedTile = undefined;\n          }\n          that._scene.requestRender();\n        }, ScreenSpaceEventType.MOUSE_MOVE);\n      } else {\n        that.feature = undefined;\n        that.tile = undefined;\n        that._eventHandler.removeInputAction(ScreenSpaceEventType.MOUSE_MOVE);\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to enable picking.  This property is observable.\n   *\n   * @type {boolean}\n   * @default true\n   */\n  this.picking = true;\n\n  const colorize = knockout.observable();\n  knockout.defineProperty(this, \"colorize\", {\n    get: function () {\n      return colorize();\n    },\n    set: function (value) {\n      colorize(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugColorizeTiles = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to colorize tiles.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.colorize = false;\n\n  const wireframe = knockout.observable();\n  knockout.defineProperty(this, \"wireframe\", {\n    get: function () {\n      return wireframe();\n    },\n    set: function (value) {\n      wireframe(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugWireframe = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to draw with wireframe.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.wireframe = false;\n\n  const showBoundingVolumes = knockout.observable();\n  knockout.defineProperty(this, \"showBoundingVolumes\", {\n    get: function () {\n      return showBoundingVolumes();\n    },\n    set: function (value) {\n      showBoundingVolumes(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugShowBoundingVolume = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to show bounding volumes.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showBoundingVolumes = false;\n\n  const showContentBoundingVolumes = knockout.observable();\n  knockout.defineProperty(this, \"showContentBoundingVolumes\", {\n    get: function () {\n      return showContentBoundingVolumes();\n    },\n    set: function (value) {\n      showContentBoundingVolumes(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugShowContentBoundingVolume = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to show content volumes.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showContentBoundingVolumes = false;\n\n  const showRequestVolumes = knockout.observable();\n  knockout.defineProperty(this, \"showRequestVolumes\", {\n    get: function () {\n      return showRequestVolumes();\n    },\n    set: function (value) {\n      showRequestVolumes(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugShowViewerRequestVolume = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to show request volumes.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showRequestVolumes = false;\n\n  const freezeFrame = knockout.observable();\n  knockout.defineProperty(this, \"freezeFrame\", {\n    get: function () {\n      return freezeFrame();\n    },\n    set: function (value) {\n      freezeFrame(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugFreezeFrame = value;\n        that._scene.debugShowFrustumPlanes = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to suspend updates.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.freezeFrame = false;\n\n  knockout.defineProperty(this, \"showOnlyPickedTileDebugLabel\", {\n    get: function () {\n      return showOnlyPickedTileDebugLabel();\n    },\n    set: function (value) {\n      showOnlyPickedTileDebugLabel(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugPickedTileLabelOnly = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to show debug labels only for the currently picked tile.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showOnlyPickedTileDebugLabel = false;\n\n  const showGeometricError = knockout.observable();\n  knockout.defineProperty(this, \"showGeometricError\", {\n    get: function () {\n      return showGeometricError();\n    },\n    set: function (value) {\n      showGeometricError(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugShowGeometricError = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to show tile geometric error.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showGeometricError = false;\n\n  const showRenderingStatistics = knockout.observable();\n  knockout.defineProperty(this, \"showRenderingStatistics\", {\n    get: function () {\n      return showRenderingStatistics();\n    },\n    set: function (value) {\n      showRenderingStatistics(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugShowRenderingStatistics = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Displays the number of commands, points, triangles and features used per tile.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showRenderingStatistics = false;\n\n  const showMemoryUsage = knockout.observable();\n  knockout.defineProperty(this, \"showMemoryUsage\", {\n    get: function () {\n      return showMemoryUsage();\n    },\n    set: function (value) {\n      showMemoryUsage(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugShowMemoryUsage = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Displays the memory used per tile.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showMemoryUsage = false;\n\n  const showUrl = knockout.observable();\n  knockout.defineProperty(this, \"showUrl\", {\n    get: function () {\n      return showUrl();\n    },\n    set: function (value) {\n      showUrl(value);\n      if (defined(that._tileset)) {\n        that._tileset.debugShowUrl = value;\n        that._scene.requestRender();\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to show the tile url.  This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.showUrl = false;\n\n  const maximumScreenSpaceError = knockout.observable();\n  knockout.defineProperty(this, \"maximumScreenSpaceError\", {\n    get: function () {\n      return maximumScreenSpaceError();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        maximumScreenSpaceError(value);\n        if (defined(that._tileset)) {\n          that._tileset.maximumScreenSpaceError = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the maximum screen space error.  This property is observable.\n   *\n   * @type {number}\n   * @default 16\n   */\n  this.maximumScreenSpaceError = 16;\n\n  const dynamicScreenSpaceErrorDensity = knockout.observable();\n  knockout.defineProperty(this, \"dynamicScreenSpaceErrorDensity\", {\n    get: function () {\n      return dynamicScreenSpaceErrorDensity();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        dynamicScreenSpaceErrorDensity(value);\n        if (defined(that._tileset)) {\n          that._tileset.dynamicScreenSpaceErrorDensity = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the dynamic screen space error density.  This property is observable.\n   *\n   * @type {number}\n   * @default 2.0e-4\n   */\n  this.dynamicScreenSpaceErrorDensity = 2.0e-4;\n\n  /**\n   * Gets or sets the dynamic screen space error density slider value.\n   * This allows the slider to be exponential because values tend to be closer to 0 than 1.\n   * This property is observable.\n   *\n   * @type {number}\n   * @default 2.0e-4\n   */\n  this.dynamicScreenSpaceErrorDensitySliderValue = undefined;\n  knockout.defineProperty(this, \"dynamicScreenSpaceErrorDensitySliderValue\", {\n    get: function () {\n      return Math.pow(dynamicScreenSpaceErrorDensity(), 1 / 6);\n    },\n    set: function (value) {\n      const scaledValue = Math.pow(value, 6);\n      dynamicScreenSpaceErrorDensity(scaledValue);\n      if (defined(that._tileset)) {\n        that._tileset.dynamicScreenSpaceErrorDensity = scaledValue;\n      }\n    },\n  });\n\n  const dynamicScreenSpaceErrorFactor = knockout.observable();\n  knockout.defineProperty(this, \"dynamicScreenSpaceErrorFactor\", {\n    get: function () {\n      return dynamicScreenSpaceErrorFactor();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        dynamicScreenSpaceErrorFactor(value);\n        if (defined(that._tileset)) {\n          that._tileset.dynamicScreenSpaceErrorFactor = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the dynamic screen space error factor.  This property is observable.\n   *\n   * @type {number}\n   * @default 24.0\n   */\n  this.dynamicScreenSpaceErrorFactor = 24.0;\n\n  const pickTileset = getPickTileset(this);\n  const pickActive = knockout.observable();\n  knockout.defineProperty(this, \"pickActive\", {\n    get: function () {\n      return pickActive();\n    },\n    set: function (value) {\n      pickActive(value);\n      if (value) {\n        that._eventHandler.setInputAction(\n          pickTileset,\n          ScreenSpaceEventType.LEFT_CLICK,\n        );\n      } else {\n        that._eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK);\n      }\n    },\n  });\n\n  const pointCloudShading = knockout.observable();\n  knockout.defineProperty(this, \"pointCloudShading\", {\n    get: function () {\n      return pointCloudShading();\n    },\n    set: function (value) {\n      pointCloudShading(value);\n      if (defined(that._tileset)) {\n        that._tileset.pointCloudShading.attenuation = value;\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to enable point cloud shading. This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.pointCloudShading = false;\n\n  const geometricErrorScale = knockout.observable();\n  knockout.defineProperty(this, \"geometricErrorScale\", {\n    get: function () {\n      return geometricErrorScale();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        geometricErrorScale(value);\n        if (defined(that._tileset)) {\n          that._tileset.pointCloudShading.geometricErrorScale = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the geometric error scale.  This property is observable.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.geometricErrorScale = 1.0;\n\n  const maximumAttenuation = knockout.observable();\n  knockout.defineProperty(this, \"maximumAttenuation\", {\n    get: function () {\n      return maximumAttenuation();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        maximumAttenuation(value);\n        if (defined(that._tileset)) {\n          that._tileset.pointCloudShading.maximumAttenuation =\n            value === 0 ? undefined : value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the maximum attenuation.  This property is observable.\n   *\n   * @type {number}\n   * @default 0\n   */\n  this.maximumAttenuation = 0;\n\n  const baseResolution = knockout.observable();\n  knockout.defineProperty(this, \"baseResolution\", {\n    get: function () {\n      return baseResolution();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        baseResolution(value);\n        if (defined(that._tileset)) {\n          that._tileset.pointCloudShading.baseResolution =\n            value === 0 ? undefined : value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the base resolution.  This property is observable.\n   *\n   * @type {number}\n   * @default 0\n   */\n  this.baseResolution = 0;\n\n  const eyeDomeLighting = knockout.observable();\n  knockout.defineProperty(this, \"eyeDomeLighting\", {\n    get: function () {\n      return eyeDomeLighting();\n    },\n    set: function (value) {\n      eyeDomeLighting(value);\n      if (defined(that._tileset)) {\n        that._tileset.pointCloudShading.eyeDomeLighting = value;\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to enable eye dome lighting. This property is observable.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.eyeDomeLighting = false;\n\n  const eyeDomeLightingStrength = knockout.observable();\n  knockout.defineProperty(this, \"eyeDomeLightingStrength\", {\n    get: function () {\n      return eyeDomeLightingStrength();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        eyeDomeLightingStrength(value);\n        if (defined(that._tileset)) {\n          that._tileset.pointCloudShading.eyeDomeLightingStrength = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the eye dome lighting strength.  This property is observable.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.eyeDomeLightingStrength = 1.0;\n\n  const eyeDomeLightingRadius = knockout.observable();\n  knockout.defineProperty(this, \"eyeDomeLightingRadius\", {\n    get: function () {\n      return eyeDomeLightingRadius();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        eyeDomeLightingRadius(value);\n        if (defined(that._tileset)) {\n          that._tileset.pointCloudShading.eyeDomeLightingRadius = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the eye dome lighting radius.  This property is observable.\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  this.eyeDomeLightingRadius = 1.0;\n\n  /**\n   * Gets or sets the pick state\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.pickActive = false;\n\n  const skipLevelOfDetail = knockout.observable();\n  knockout.defineProperty(this, \"skipLevelOfDetail\", {\n    get: function () {\n      return skipLevelOfDetail();\n    },\n    set: function (value) {\n      skipLevelOfDetail(value);\n      if (defined(that._tileset)) {\n        that._tileset.skipLevelOfDetail = value;\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag to determine if level of detail skipping should be applied during the traversal.\n   * This property is observable.\n   * @type {boolean}\n   * @default true\n   */\n  this.skipLevelOfDetail = true;\n\n  const skipScreenSpaceErrorFactor = knockout.observable();\n  knockout.defineProperty(this, \"skipScreenSpaceErrorFactor\", {\n    get: function () {\n      return skipScreenSpaceErrorFactor();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        skipScreenSpaceErrorFactor(value);\n        if (defined(that._tileset)) {\n          that._tileset.skipScreenSpaceErrorFactor = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the multiplier defining the minimum screen space error to skip. This property is observable.\n   * @type {number}\n   * @default 16\n   */\n  this.skipScreenSpaceErrorFactor = 16;\n\n  const baseScreenSpaceError = knockout.observable();\n  knockout.defineProperty(this, \"baseScreenSpaceError\", {\n    get: function () {\n      return baseScreenSpaceError();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        baseScreenSpaceError(value);\n        if (defined(that._tileset)) {\n          that._tileset.baseScreenSpaceError = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the screen space error that must be reached before skipping levels of detail. This property is observable.\n   * @type {number}\n   * @default 1024\n   */\n  this.baseScreenSpaceError = 1024;\n\n  const skipLevels = knockout.observable();\n  knockout.defineProperty(this, \"skipLevels\", {\n    get: function () {\n      return skipLevels();\n    },\n    set: function (value) {\n      value = Number(value);\n      if (!isNaN(value)) {\n        skipLevels(value);\n        if (defined(that._tileset)) {\n          that._tileset.skipLevels = value;\n        }\n      }\n    },\n  });\n  /**\n   * Gets or sets the constant defining the minimum number of levels to skip when loading tiles. This property is observable.\n   * @type {number}\n   * @default 1\n   */\n  this.skipLevels = 1;\n\n  const immediatelyLoadDesiredLevelOfDetail = knockout.observable();\n  knockout.defineProperty(this, \"immediatelyLoadDesiredLevelOfDetail\", {\n    get: function () {\n      return immediatelyLoadDesiredLevelOfDetail();\n    },\n    set: function (value) {\n      immediatelyLoadDesiredLevelOfDetail(value);\n      if (defined(that._tileset)) {\n        that._tileset.immediatelyLoadDesiredLevelOfDetail = value;\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag which, when true, only tiles that meet the maximum screen space error will ever be downloaded.\n   * This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.immediatelyLoadDesiredLevelOfDetail = false;\n\n  const loadSiblings = knockout.observable();\n  knockout.defineProperty(this, \"loadSiblings\", {\n    get: function () {\n      return loadSiblings();\n    },\n    set: function (value) {\n      loadSiblings(value);\n      if (defined(that._tileset)) {\n        that._tileset.loadSiblings = value;\n      }\n    },\n  });\n  /**\n   * Gets or sets the flag which determines whether siblings of visible tiles are always downloaded during traversal.\n   * This property is observable\n   * @type {boolean}\n   * @default false\n   */\n  this.loadSiblings = false;\n\n  this._style = undefined;\n  this._shouldStyle = false;\n  this._definedProperties = [\n    \"properties\",\n    \"dynamicScreenSpaceError\",\n    \"colorBlendMode\",\n    \"picking\",\n    \"colorize\",\n    \"wireframe\",\n    \"showBoundingVolumes\",\n    \"showContentBoundingVolumes\",\n    \"showRequestVolumes\",\n    \"freezeFrame\",\n    \"maximumScreenSpaceError\",\n    \"dynamicScreenSpaceErrorDensity\",\n    \"baseScreenSpaceError\",\n    \"skipScreenSpaceErrorFactor\",\n    \"skipLevelOfDetail\",\n    \"skipLevels\",\n    \"immediatelyLoadDesiredLevelOfDetail\",\n    \"loadSiblings\",\n    \"dynamicScreenSpaceErrorDensitySliderValue\",\n    \"dynamicScreenSpaceErrorFactor\",\n    \"pickActive\",\n    \"showOnlyPickedTileDebugLabel\",\n    \"showGeometricError\",\n    \"showRenderingStatistics\",\n    \"showMemoryUsage\",\n    \"showUrl\",\n    \"pointCloudShading\",\n    \"geometricErrorScale\",\n    \"maximumAttenuation\",\n    \"baseResolution\",\n    \"eyeDomeLighting\",\n    \"eyeDomeLightingStrength\",\n    \"eyeDomeLightingRadius\",\n  ];\n  this._removePostRenderEvent = scene.postRender.addEventListener(function () {\n    that._update();\n  });\n\n  if (!defined(this._tileset)) {\n    selectTilesetOnHover(this, true);\n  }\n}\n\nObject.defineProperties(Cesium3DTilesInspectorViewModel.prototype, {\n  /**\n   * Gets the scene\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {Scene}\n   * @readonly\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n  /**\n   * Gets the performance container\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {HTMLElement}\n   * @readonly\n   */\n  performanceContainer: {\n    get: function () {\n      return this._performanceContainer;\n    },\n  },\n\n  /**\n   * Gets the statistics text.  This property is observable.\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {string}\n   * @readonly\n   */\n  statisticsText: {\n    get: function () {\n      return this._statisticsText;\n    },\n  },\n  /**\n   * Gets the pick statistics text.  This property is observable.\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {string}\n   * @readonly\n   */\n  pickStatisticsText: {\n    get: function () {\n      return this._pickStatisticsText;\n    },\n  },\n\n  /**\n   * Gets the resource cache statistics text. This property is observable.\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {string}\n   * @readonly\n   */\n  resourceCacheStatisticsText: {\n    get: function () {\n      return this._resourceCacheStatisticsText;\n    },\n  },\n\n  /**\n   * Gets the available blend modes\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {object[]}\n   * @readonly\n   */\n  colorBlendModes: {\n    get: function () {\n      return colorBlendModes;\n    },\n  },\n\n  /**\n   * Gets the editor error message\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {string}\n   * @readonly\n   */\n  editorError: {\n    get: function () {\n      return this._editorError;\n    },\n  },\n\n  /**\n   * Gets or sets the tileset of the view model.\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {Cesium3DTileset}\n   */\n  tileset: {\n    get: function () {\n      return this._tileset;\n    },\n    set: function (tileset) {\n      this._tileset = tileset;\n      this._style = undefined;\n      this.styleString = \"{}\";\n      this.feature = undefined;\n      this.tile = undefined;\n\n      if (defined(tileset)) {\n        this._properties(tileset.properties);\n\n        // update tileset with existing settings\n        const settings = [\n          \"colorize\",\n          \"wireframe\",\n          \"showBoundingVolumes\",\n          \"showContentBoundingVolumes\",\n          \"showRequestVolumes\",\n          \"freezeFrame\",\n          \"showOnlyPickedTileDebugLabel\",\n          \"showGeometricError\",\n          \"showRenderingStatistics\",\n          \"showMemoryUsage\",\n          \"showUrl\",\n        ];\n        const length = settings.length;\n        for (let i = 0; i < length; ++i) {\n          const setting = settings[i];\n          //eslint-disable-next-line no-self-assign\n          this[setting] = this[setting];\n        }\n\n        // update view model with existing tileset settings\n        this.maximumScreenSpaceError = tileset.maximumScreenSpaceError;\n        this.dynamicScreenSpaceError = tileset.dynamicScreenSpaceError;\n        this.dynamicScreenSpaceErrorDensity =\n          tileset.dynamicScreenSpaceErrorDensity;\n        this.dynamicScreenSpaceErrorFactor =\n          tileset.dynamicScreenSpaceErrorFactor;\n        this.colorBlendMode = tileset.colorBlendMode;\n        this.skipLevelOfDetail = tileset.skipLevelOfDetail;\n        this.skipScreenSpaceErrorFactor = tileset.skipScreenSpaceErrorFactor;\n        this.baseScreenSpaceError = tileset.baseScreenSpaceError;\n        this.skipLevels = tileset.skipLevels;\n        this.immediatelyLoadDesiredLevelOfDetail =\n          tileset.immediatelyLoadDesiredLevelOfDetail;\n        this.loadSiblings = tileset.loadSiblings;\n        this.hasEnabledWireframe = tileset._enableDebugWireframe;\n\n        const pointCloudShading = tileset.pointCloudShading;\n        this.pointCloudShading = pointCloudShading.attenuation;\n        this.geometricErrorScale = pointCloudShading.geometricErrorScale;\n        this.maximumAttenuation = pointCloudShading.maximumAttenuation\n          ? pointCloudShading.maximumAttenuation\n          : 0.0;\n        this.baseResolution = pointCloudShading.baseResolution\n          ? pointCloudShading.baseResolution\n          : 0.0;\n        this.eyeDomeLighting = pointCloudShading.eyeDomeLighting;\n        this.eyeDomeLightingStrength =\n          pointCloudShading.eyeDomeLightingStrength;\n        this.eyeDomeLightingRadius = pointCloudShading.eyeDomeLightingRadius;\n\n        this._scene.requestRender();\n      } else {\n        this._properties({});\n      }\n\n      this._statisticsText = getStatistics(tileset, false);\n      this._pickStatisticsText = getStatistics(tileset, true);\n      this._resourceCacheStatisticsText = getResourceCacheStatistics();\n      selectTilesetOnHover(this, false);\n    },\n  },\n\n  /**\n   * Gets the current feature of the view model.\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {Cesium3DTileFeature}\n   */\n  feature: {\n    get: function () {\n      return this._feature;\n    },\n    set: function (feature) {\n      if (this._feature === feature) {\n        return;\n      }\n      const currentFeature = this._feature;\n      if (defined(currentFeature) && !currentFeature.content.isDestroyed()) {\n        // Restore original color to feature that is no longer selected\n        if (!this.colorize && defined(this._style)) {\n          currentFeature.color = defined(this._style.color)\n            ? this._style.color.evaluateColor(currentFeature, scratchColor)\n            : Color.WHITE;\n        } else {\n          currentFeature.color = oldColor;\n        }\n        this._scene.requestRender();\n      }\n      if (defined(feature)) {\n        // Highlight new feature\n        Color.clone(feature.color, oldColor);\n        feature.color = highlightColor;\n        this._scene.requestRender();\n      }\n      this._feature = feature;\n    },\n  },\n\n  /**\n   * Gets the current tile of the view model\n   * @memberof Cesium3DTilesInspectorViewModel.prototype\n   * @type {Cesium3DTile}\n   */\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n    set: function (tile) {\n      if (this._tile === tile) {\n        return;\n      }\n      const currentTile = this._tile;\n\n      if (\n        defined(currentTile) &&\n        !currentTile.isDestroyed() &&\n        !hasFeatures(currentTile.content)\n      ) {\n        // Restore original color to tile that is no longer selected\n        currentTile.color = oldColor;\n        this._scene.requestRender();\n      }\n\n      if (defined(tile) && !hasFeatures(tile.content)) {\n        // Highlight new tile\n        Color.clone(tile.color, oldColor);\n        tile.color = highlightColor;\n        this._scene.requestRender();\n      }\n      this._tile = tile;\n    },\n  },\n});\n\nfunction hasFeatures(content) {\n  if (!defined(content)) {\n    return false;\n  }\n\n  if (content.featuresLength > 0) {\n    return true;\n  }\n  const innerContents = content.innerContents;\n  if (defined(innerContents)) {\n    const length = innerContents.length;\n    for (let i = 0; i < length; ++i) {\n      if (!hasFeatures(innerContents[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return false;\n}\n\n/**\n * Toggles the pick tileset mode\n */\nCesium3DTilesInspectorViewModel.prototype.togglePickTileset = function () {\n  this.pickActive = !this.pickActive;\n};\n\n/**\n * Toggles the inspector visibility\n */\nCesium3DTilesInspectorViewModel.prototype.toggleInspector = function () {\n  this.inspectorVisible = !this.inspectorVisible;\n};\n\n/**\n * Toggles the visibility of the tileset section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleTileset = function () {\n  this.tilesetVisible = !this.tilesetVisible;\n};\n\n/**\n * Toggles the visibility of the display section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleDisplay = function () {\n  this.displayVisible = !this.displayVisible;\n};\n\n/**\n * Toggles the visibility of the update section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleUpdate = function () {\n  this.updateVisible = !this.updateVisible;\n};\n\n/**\n * Toggles the visibility of the logging section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleLogging = function () {\n  this.loggingVisible = !this.loggingVisible;\n};\n\n/**\n * Toggles the visibility of the style section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleStyle = function () {\n  this.styleVisible = !this.styleVisible;\n};\n\n/**\n * Toggles the visibility of the tile Debug Info section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleTileDebugLabels = function () {\n  this.tileDebugLabelsVisible = !this.tileDebugLabelsVisible;\n};\n\n/**\n * Toggles the visibility of the optimization section\n */\nCesium3DTilesInspectorViewModel.prototype.toggleOptimization = function () {\n  this.optimizationVisible = !this.optimizationVisible;\n};\n\n/**\n * Trims tile cache\n */\nCesium3DTilesInspectorViewModel.prototype.trimTilesCache = function () {\n  if (defined(this._tileset)) {\n    this._tileset.trimLoadedTiles();\n  }\n};\n\n/**\n * Compiles the style in the style editor.\n */\nCesium3DTilesInspectorViewModel.prototype.compileStyle = function () {\n  const tileset = this._tileset;\n  if (!defined(tileset) || this.styleString === JSON.stringify(tileset.style)) {\n    return;\n  }\n  this._editorError = \"\";\n  try {\n    if (this.styleString.length === 0) {\n      this.styleString = \"{}\";\n    }\n    this._style = new Cesium3DTileStyle(JSON.parse(this.styleString));\n    this._shouldStyle = true;\n    this._scene.requestRender();\n  } catch (err) {\n    this._editorError = err.toString();\n  }\n\n  // set feature again so pick coloring is set\n  this.feature = this._feature;\n  this.tile = this._tile;\n};\n\n/**\n * Handles key press events on the style editor.\n */\nCesium3DTilesInspectorViewModel.prototype.styleEditorKeyPress = function (\n  sender,\n  event,\n) {\n  if (event.keyCode === 9) {\n    //tab\n    event.preventDefault();\n    const textArea = event.target;\n    const start = textArea.selectionStart;\n    const end = textArea.selectionEnd;\n    let newEnd = end;\n    const selected = textArea.value.slice(start, end);\n    const lines = selected.split(\"\\n\");\n    const length = lines.length;\n    let i;\n    if (!event.shiftKey) {\n      for (i = 0; i < length; ++i) {\n        lines[i] = `  ${lines[i]}`;\n        newEnd += 2;\n      }\n    } else {\n      for (i = 0; i < length; ++i) {\n        if (lines[i][0] === \" \") {\n          if (lines[i][1] === \" \") {\n            lines[i] = lines[i].substr(2);\n            newEnd -= 2;\n          } else {\n            lines[i] = lines[i].substr(1);\n            newEnd -= 1;\n          }\n        }\n      }\n    }\n    const newText = lines.join(\"\\n\");\n    textArea.value =\n      textArea.value.slice(0, start) + newText + textArea.value.slice(end);\n    textArea.selectionStart = start !== end ? start : newEnd;\n    textArea.selectionEnd = newEnd;\n  } else if (event.ctrlKey && (event.keyCode === 10 || event.keyCode === 13)) {\n    //ctrl + enter\n    this.compileStyle();\n  }\n  return true;\n};\n\n/**\n * Updates the values of view model\n * @private\n */\nCesium3DTilesInspectorViewModel.prototype._update = function () {\n  const tileset = this._tileset;\n\n  if (this.performance) {\n    this._performanceDisplay.update();\n  }\n\n  if (defined(tileset)) {\n    if (tileset.isDestroyed()) {\n      this.tile = undefined;\n      this.feature = undefined;\n      this.tileset = undefined;\n      return;\n    }\n\n    const style = tileset.style;\n    if (this._style !== tileset.style) {\n      if (this._shouldStyle) {\n        tileset.style = this._style;\n        this._shouldStyle = false;\n      } else {\n        this._style = style;\n        this.styleString = JSON.stringify(style.style, null, \"  \");\n      }\n    }\n  }\n  if (this.showStatistics) {\n    this._statisticsText = getStatistics(tileset, false);\n    this._pickStatisticsText = getStatistics(tileset, true);\n    this._resourceCacheStatisticsText = getResourceCacheStatistics();\n  }\n};\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nCesium3DTilesInspectorViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nCesium3DTilesInspectorViewModel.prototype.destroy = function () {\n  this._eventHandler.destroy();\n  this._removePostRenderEvent();\n\n  const that = this;\n  this._definedProperties.forEach(function (property) {\n    knockout.getObservable(that, property).dispose();\n  });\n\n  return destroyObject(this);\n};\n\n/**\n * Generates an HTML string of the statistics\n *\n * @function\n * @param {Cesium3DTileset} tileset The tileset\n * @param {boolean} isPick Whether this is getting the statistics for the pick pass\n * @returns {string} The formatted statistics\n */\nCesium3DTilesInspectorViewModel.getStatistics = getStatistics;\nexport default Cesium3DTilesInspectorViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport InspectorShared from \"../InspectorShared.js\";\nimport CesiumInspectorViewModel from \"./CesiumInspectorViewModel.js\";\n\n/**\n * Inspector widget to aid in debugging\n *\n * @alias CesiumInspector\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=cesium-inspector|Cesium Sandcastle Cesium Inspector Demo}\n */\nfunction CesiumInspector(container, scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const performanceContainer = document.createElement(\"div\");\n\n  const viewModel = new CesiumInspectorViewModel(scene, performanceContainer);\n  this._viewModel = viewModel;\n  this._container = container;\n\n  const element = document.createElement(\"div\");\n  this._element = element;\n  const text = document.createElement(\"div\");\n  text.textContent = \"Cesium Inspector\";\n  text.className = \"cesium-cesiumInspector-button\";\n  text.setAttribute(\"data-bind\", \"click: toggleDropDown\");\n  element.appendChild(text);\n  element.className = \"cesium-cesiumInspector\";\n  element.setAttribute(\n    \"data-bind\",\n    'css: { \"cesium-cesiumInspector-visible\" : dropDownVisible, \"cesium-cesiumInspector-hidden\" : !dropDownVisible }',\n  );\n  container.appendChild(this._element);\n\n  const panel = document.createElement(\"div\");\n  panel.className = \"cesium-cesiumInspector-dropDown\";\n  element.appendChild(panel);\n\n  const createSection = InspectorShared.createSection;\n  const createCheckbox = InspectorShared.createCheckbox;\n\n  // General\n  const generalSection = createSection(\n    panel,\n    \"General\",\n    \"generalVisible\",\n    \"toggleGeneral\",\n  );\n\n  const debugShowFrustums = createCheckbox(\"Show Frustums\", \"frustums\");\n  const frustumStatistics = document.createElement(\"div\");\n  frustumStatistics.className = \"cesium-cesiumInspector-frustumStatistics\";\n  frustumStatistics.setAttribute(\n    \"data-bind\",\n    \"visible: frustums, html: frustumStatisticText\",\n  );\n  debugShowFrustums.appendChild(frustumStatistics);\n  generalSection.appendChild(debugShowFrustums);\n\n  generalSection.appendChild(\n    createCheckbox(\"Show Frustum Planes\", \"frustumPlanes\"),\n  );\n  generalSection.appendChild(\n    createCheckbox(\"Performance Display\", \"performance\"),\n  );\n\n  performanceContainer.className = \"cesium-cesiumInspector-performanceDisplay\";\n  generalSection.appendChild(performanceContainer);\n\n  const shaderCacheDisplay = document.createElement(\"div\");\n  shaderCacheDisplay.className = \"cesium-cesiumInspector-shaderCache\";\n  shaderCacheDisplay.setAttribute(\"data-bind\", \"html: shaderCacheText\");\n  generalSection.appendChild(shaderCacheDisplay);\n\n  const depthFrustum = document.createElement(\"div\");\n  generalSection.appendChild(depthFrustum);\n\n  // Use a span with HTML binding so that we can indent with non-breaking spaces.\n  const gLabel = document.createElement(\"span\");\n  gLabel.setAttribute(\n    \"data-bind\",\n    'html: \"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frustum:\"',\n  );\n  depthFrustum.appendChild(gLabel);\n\n  const gText = document.createElement(\"span\");\n  gText.setAttribute(\"data-bind\", \"text: depthFrustumText\");\n  depthFrustum.appendChild(gText);\n\n  const gMinusButton = document.createElement(\"input\");\n  gMinusButton.type = \"button\";\n  gMinusButton.value = \"-\";\n  gMinusButton.className = \"cesium-cesiumInspector-pickButton\";\n  gMinusButton.setAttribute(\"data-bind\", \"click: decrementDepthFrustum\");\n  depthFrustum.appendChild(gMinusButton);\n\n  const gPlusButton = document.createElement(\"input\");\n  gPlusButton.type = \"button\";\n  gPlusButton.value = \"+\";\n  gPlusButton.className = \"cesium-cesiumInspector-pickButton\";\n  gPlusButton.setAttribute(\"data-bind\", \"click: incrementDepthFrustum\");\n  depthFrustum.appendChild(gPlusButton);\n\n  // Primitives\n  const primSection = createSection(\n    panel,\n    \"Primitives\",\n    \"primitivesVisible\",\n    \"togglePrimitives\",\n  );\n  const pickPrimRequired = document.createElement(\"div\");\n  pickPrimRequired.className = \"cesium-cesiumInspector-pickSection\";\n  primSection.appendChild(pickPrimRequired);\n\n  const pickPrimitiveButton = document.createElement(\"input\");\n  pickPrimitiveButton.type = \"button\";\n  pickPrimitiveButton.value = \"Pick a primitive\";\n  pickPrimitiveButton.className = \"cesium-cesiumInspector-pickButton\";\n  pickPrimitiveButton.setAttribute(\n    \"data-bind\",\n    'css: {\"cesium-cesiumInspector-pickButtonHighlight\" : pickPrimitiveActive}, click: pickPrimitive',\n  );\n  let buttonWrap = document.createElement(\"div\");\n  buttonWrap.className = \"cesium-cesiumInspector-center\";\n  buttonWrap.appendChild(pickPrimitiveButton);\n  pickPrimRequired.appendChild(buttonWrap);\n\n  pickPrimRequired.appendChild(\n    createCheckbox(\n      \"Show bounding sphere\",\n      \"primitiveBoundingSphere\",\n      \"hasPickedPrimitive\",\n    ),\n  );\n  pickPrimRequired.appendChild(\n    createCheckbox(\n      \"Show reference frame\",\n      \"primitiveReferenceFrame\",\n      \"hasPickedPrimitive\",\n    ),\n  );\n\n  this._primitiveOnly = createCheckbox(\n    \"Show only selected\",\n    \"filterPrimitive\",\n    \"hasPickedPrimitive\",\n  );\n  pickPrimRequired.appendChild(this._primitiveOnly);\n\n  // Terrain\n  const terrainSection = createSection(\n    panel,\n    \"Terrain\",\n    \"terrainVisible\",\n    \"toggleTerrain\",\n  );\n  const pickTileRequired = document.createElement(\"div\");\n  pickTileRequired.className = \"cesium-cesiumInspector-pickSection\";\n  terrainSection.appendChild(pickTileRequired);\n  const pickTileButton = document.createElement(\"input\");\n  pickTileButton.type = \"button\";\n  pickTileButton.value = \"Pick a tile\";\n  pickTileButton.className = \"cesium-cesiumInspector-pickButton\";\n  pickTileButton.setAttribute(\n    \"data-bind\",\n    'css: {\"cesium-cesiumInspector-pickButtonHighlight\" : pickTileActive}, click: pickTile',\n  );\n  buttonWrap = document.createElement(\"div\");\n  buttonWrap.appendChild(pickTileButton);\n  buttonWrap.className = \"cesium-cesiumInspector-center\";\n  pickTileRequired.appendChild(buttonWrap);\n  const tileInfo = document.createElement(\"div\");\n  pickTileRequired.appendChild(tileInfo);\n  const parentTile = document.createElement(\"input\");\n  parentTile.type = \"button\";\n  parentTile.value = \"Parent\";\n  parentTile.className = \"cesium-cesiumInspector-pickButton\";\n  parentTile.setAttribute(\"data-bind\", \"click: selectParent\");\n  const nwTile = document.createElement(\"input\");\n  nwTile.type = \"button\";\n  nwTile.value = \"NW\";\n  nwTile.className = \"cesium-cesiumInspector-pickButton\";\n  nwTile.setAttribute(\"data-bind\", \"click: selectNW\");\n  const neTile = document.createElement(\"input\");\n  neTile.type = \"button\";\n  neTile.value = \"NE\";\n  neTile.className = \"cesium-cesiumInspector-pickButton\";\n  neTile.setAttribute(\"data-bind\", \"click: selectNE\");\n  const swTile = document.createElement(\"input\");\n  swTile.type = \"button\";\n  swTile.value = \"SW\";\n  swTile.className = \"cesium-cesiumInspector-pickButton\";\n  swTile.setAttribute(\"data-bind\", \"click: selectSW\");\n  const seTile = document.createElement(\"input\");\n  seTile.type = \"button\";\n  seTile.value = \"SE\";\n  seTile.className = \"cesium-cesiumInspector-pickButton\";\n  seTile.setAttribute(\"data-bind\", \"click: selectSE\");\n\n  const tileText = document.createElement(\"div\");\n  tileText.className = \"cesium-cesiumInspector-tileText\";\n  tileInfo.className = \"cesium-cesiumInspector-frustumStatistics\";\n  tileInfo.appendChild(tileText);\n  tileInfo.setAttribute(\"data-bind\", \"visible: hasPickedTile\");\n  tileText.setAttribute(\"data-bind\", \"html: tileText\");\n\n  const relativeText = document.createElement(\"div\");\n  relativeText.className = \"cesium-cesiumInspector-relativeText\";\n  relativeText.textContent = \"Select relative:\";\n  tileInfo.appendChild(relativeText);\n\n  const table = document.createElement(\"table\");\n  const tr1 = document.createElement(\"tr\");\n  const tr2 = document.createElement(\"tr\");\n  const td1 = document.createElement(\"td\");\n  td1.appendChild(parentTile);\n  const td2 = document.createElement(\"td\");\n  td2.appendChild(nwTile);\n  const td3 = document.createElement(\"td\");\n  td3.appendChild(neTile);\n  tr1.appendChild(td1);\n  tr1.appendChild(td2);\n  tr1.appendChild(td3);\n  const td4 = document.createElement(\"td\");\n  const td5 = document.createElement(\"td\");\n  td5.appendChild(swTile);\n  const td6 = document.createElement(\"td\");\n  td6.appendChild(seTile);\n  tr2.appendChild(td4);\n  tr2.appendChild(td5);\n  tr2.appendChild(td6);\n  table.appendChild(tr1);\n  table.appendChild(tr2);\n\n  tileInfo.appendChild(table);\n\n  pickTileRequired.appendChild(\n    createCheckbox(\n      \"Show bounding volume\",\n      \"tileBoundingSphere\",\n      \"hasPickedTile\",\n    ),\n  );\n  pickTileRequired.appendChild(\n    createCheckbox(\"Show only selected\", \"filterTile\", \"hasPickedTile\"),\n  );\n\n  terrainSection.appendChild(createCheckbox(\"Wireframe\", \"wireframe\"));\n  terrainSection.appendChild(\n    createCheckbox(\"Suspend LOD update\", \"suspendUpdates\"),\n  );\n  terrainSection.appendChild(\n    createCheckbox(\"Show tile coordinates\", \"tileCoordinates\"),\n  );\n\n  knockout.applyBindings(viewModel, this._element);\n}\n\nObject.defineProperties(CesiumInspector.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof CesiumInspector.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof CesiumInspector.prototype\n   *\n   * @type {CesiumInspectorViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nCesiumInspector.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nCesiumInspector.prototype.destroy = function () {\n  knockout.cleanNode(this._element);\n  this._container.removeChild(this._element);\n  this.viewModel.destroy();\n\n  return destroyObject(this);\n};\nexport default CesiumInspector;\n","import {\n  Cartesian3,\n  defined,\n  destroyObject,\n  DebugModelMatrixPrimitive,\n  DeveloperError,\n  PerformanceDisplay,\n  Ray,\n  Rectangle,\n  ScreenSpaceEventHandler,\n  ScreenSpaceEventType,\n  TileCoordinatesImageryProvider,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\nfunction frustumStatisticsToString(statistics) {\n  let str;\n  if (defined(statistics)) {\n    str = \"Command Statistics\";\n    const com = statistics.commandsInFrustums;\n    for (const n in com) {\n      if (com.hasOwnProperty(n)) {\n        let num = parseInt(n, 10);\n        let s;\n        if (num === 7) {\n          s = \"1, 2 and 3\";\n        } else {\n          const f = [];\n          for (let i = 2; i >= 0; i--) {\n            const p = Math.pow(2, i);\n            if (num >= p) {\n              f.push(i + 1);\n              num -= p;\n            }\n          }\n          s = f.reverse().join(\" and \");\n        }\n        str += `<br>&nbsp;&nbsp;&nbsp;&nbsp;${com[n]} in frustum ${s}`;\n      }\n    }\n    str += `<br>Total: ${statistics.totalCommands}`;\n  }\n\n  return str;\n}\n\nfunction boundDepthFrustum(lower, upper, proposed) {\n  let bounded = Math.min(proposed, upper);\n  bounded = Math.max(bounded, lower);\n  return bounded;\n}\n\nconst scratchPickRay = new Ray();\nconst scratchPickCartesian = new Cartesian3();\n\n/**\n * The view model for {@link CesiumInspector}.\n * @alias CesiumInspectorViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use.\n * @param {Element} performanceContainer The instance to use for performance container.\n */\nfunction CesiumInspectorViewModel(scene, performanceContainer) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required\");\n  }\n\n  if (!defined(performanceContainer)) {\n    throw new DeveloperError(\"performanceContainer is required\");\n  }\n  //>>includeEnd('debug');\n\n  const that = this;\n  const canvas = scene.canvas;\n  const eventHandler = new ScreenSpaceEventHandler(canvas);\n  this._eventHandler = eventHandler;\n  this._scene = scene;\n  this._canvas = canvas;\n  this._primitive = undefined;\n  this._tile = undefined;\n  this._modelMatrixPrimitive = undefined;\n  this._performanceDisplay = undefined;\n  this._performanceContainer = performanceContainer;\n\n  const globe = this._scene.globe;\n  globe.depthTestAgainstTerrain = true;\n\n  /**\n   * Gets or sets the show frustums state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.frustums = false;\n\n  /**\n   * Gets or sets the show frustum planes state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.frustumPlanes = false;\n\n  /**\n   * Gets or sets the show performance display state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.performance = false;\n\n  /**\n   * Gets or sets the shader cache text.  This property is observable.\n   * @type {string}\n   * @default ''\n   */\n  this.shaderCacheText = \"\";\n\n  /**\n   * Gets or sets the show primitive bounding sphere state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.primitiveBoundingSphere = false;\n\n  /**\n   * Gets or sets the show primitive reference frame state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.primitiveReferenceFrame = false;\n\n  /**\n   * Gets or sets the filter primitive state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.filterPrimitive = false;\n\n  /**\n   * Gets or sets the show tile bounding sphere state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.tileBoundingSphere = false;\n\n  /**\n   * Gets or sets the filter tile state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.filterTile = false;\n\n  /**\n   * Gets or sets the show wireframe state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.wireframe = false;\n\n  /**\n   * Gets or sets the index of the depth frustum to display.  This property is observable.\n   * @type {number}\n   * @default 1\n   */\n  this.depthFrustum = 1;\n  this._numberOfFrustums = 1;\n\n  /**\n   * Gets or sets the suspend updates state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.suspendUpdates = false;\n\n  /**\n   * Gets or sets the show tile coordinates state.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.tileCoordinates = false;\n\n  /**\n   * Gets or sets the frustum statistic text.  This property is observable.\n   * @type {string}\n   * @default ''\n   */\n  this.frustumStatisticText = false;\n\n  /**\n   * Gets or sets the selected tile information text.  This property is observable.\n   * @type {string}\n   * @default ''\n   */\n  this.tileText = \"\";\n\n  /**\n   * Gets if a primitive has been selected.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.hasPickedPrimitive = false;\n\n  /**\n   * Gets if a tile has been selected.  This property is observable\n   * @type {boolean}\n   * @default false\n   */\n  this.hasPickedTile = false;\n\n  /**\n   * Gets if the picking primitive command is active.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.pickPrimitiveActive = false;\n\n  /**\n   * Gets if the picking tile command is active.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.pickTileActive = false;\n\n  /**\n   * Gets or sets if the cesium inspector drop down is visible.  This property is observable.\n   * @type {boolean}\n   * @default true\n   */\n  this.dropDownVisible = true;\n\n  /**\n   * Gets or sets if the general section is visible.  This property is observable.\n   * @type {boolean}\n   * @default true\n   */\n  this.generalVisible = true;\n\n  /**\n   * Gets or sets if the primitive section is visible.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.primitivesVisible = false;\n\n  /**\n   * Gets or sets if the terrain section is visible.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.terrainVisible = false;\n\n  /**\n   * Gets or sets the index of the depth frustum text.  This property is observable.\n   * @type {string}\n   * @default ''\n   */\n  this.depthFrustumText = \"\";\n\n  knockout.track(this, [\n    \"frustums\",\n    \"frustumPlanes\",\n    \"performance\",\n    \"shaderCacheText\",\n    \"primitiveBoundingSphere\",\n    \"primitiveReferenceFrame\",\n    \"filterPrimitive\",\n    \"tileBoundingSphere\",\n    \"filterTile\",\n    \"wireframe\",\n    \"depthFrustum\",\n    \"suspendUpdates\",\n    \"tileCoordinates\",\n    \"frustumStatisticText\",\n    \"tileText\",\n    \"hasPickedPrimitive\",\n    \"hasPickedTile\",\n    \"pickPrimitiveActive\",\n    \"pickTileActive\",\n    \"dropDownVisible\",\n    \"generalVisible\",\n    \"primitivesVisible\",\n    \"terrainVisible\",\n    \"depthFrustumText\",\n  ]);\n\n  this._toggleDropDown = createCommand(function () {\n    that.dropDownVisible = !that.dropDownVisible;\n  });\n\n  this._toggleGeneral = createCommand(function () {\n    that.generalVisible = !that.generalVisible;\n  });\n\n  this._togglePrimitives = createCommand(function () {\n    that.primitivesVisible = !that.primitivesVisible;\n  });\n\n  this._toggleTerrain = createCommand(function () {\n    that.terrainVisible = !that.terrainVisible;\n  });\n\n  this._frustumsSubscription = knockout\n    .getObservable(this, \"frustums\")\n    .subscribe(function (val) {\n      that._scene.debugShowFrustums = val;\n      that._scene.requestRender();\n    });\n\n  this._frustumPlanesSubscription = knockout\n    .getObservable(this, \"frustumPlanes\")\n    .subscribe(function (val) {\n      that._scene.debugShowFrustumPlanes = val;\n      that._scene.requestRender();\n    });\n\n  this._performanceSubscription = knockout\n    .getObservable(this, \"performance\")\n    .subscribe(function (val) {\n      if (val) {\n        that._performanceDisplay = new PerformanceDisplay({\n          container: that._performanceContainer,\n        });\n      } else {\n        that._performanceContainer.innerHTML = \"\";\n      }\n    });\n\n  this._showPrimitiveBoundingSphere = createCommand(function () {\n    that._primitive.debugShowBoundingVolume = that.primitiveBoundingSphere;\n    that._scene.requestRender();\n    return true;\n  });\n\n  this._primitiveBoundingSphereSubscription = knockout\n    .getObservable(this, \"primitiveBoundingSphere\")\n    .subscribe(function () {\n      that._showPrimitiveBoundingSphere();\n    });\n\n  this._showPrimitiveReferenceFrame = createCommand(function () {\n    if (that.primitiveReferenceFrame) {\n      const modelMatrix = that._primitive.modelMatrix;\n      that._modelMatrixPrimitive = new DebugModelMatrixPrimitive({\n        modelMatrix: modelMatrix,\n      });\n      that._scene.primitives.add(that._modelMatrixPrimitive);\n    } else if (defined(that._modelMatrixPrimitive)) {\n      that._scene.primitives.remove(that._modelMatrixPrimitive);\n      that._modelMatrixPrimitive = undefined;\n    }\n    that._scene.requestRender();\n    return true;\n  });\n\n  this._primitiveReferenceFrameSubscription = knockout\n    .getObservable(this, \"primitiveReferenceFrame\")\n    .subscribe(function () {\n      that._showPrimitiveReferenceFrame();\n    });\n\n  this._doFilterPrimitive = createCommand(function () {\n    if (that.filterPrimitive) {\n      that._scene.debugCommandFilter = function (command) {\n        if (\n          defined(that._modelMatrixPrimitive) &&\n          command.owner === that._modelMatrixPrimitive._primitive\n        ) {\n          return true;\n        } else if (defined(that._primitive)) {\n          return (\n            command.owner === that._primitive ||\n            command.owner === that._primitive._billboardCollection ||\n            command.owner.primitive === that._primitive\n          );\n        }\n        return false;\n      };\n    } else {\n      that._scene.debugCommandFilter = undefined;\n    }\n    return true;\n  });\n\n  this._filterPrimitiveSubscription = knockout\n    .getObservable(this, \"filterPrimitive\")\n    .subscribe(function () {\n      that._doFilterPrimitive();\n      that._scene.requestRender();\n    });\n\n  this._wireframeSubscription = knockout\n    .getObservable(this, \"wireframe\")\n    .subscribe(function (val) {\n      globe._surface.tileProvider._debug.wireframe = val;\n      that._scene.requestRender();\n    });\n\n  this._depthFrustumSubscription = knockout\n    .getObservable(this, \"depthFrustum\")\n    .subscribe(function (val) {\n      that._scene.debugShowDepthFrustum = val;\n      that._scene.requestRender();\n    });\n\n  this._incrementDepthFrustum = createCommand(function () {\n    const next = that.depthFrustum + 1;\n    that.depthFrustum = boundDepthFrustum(1, that._numberOfFrustums, next);\n    that._scene.requestRender();\n    return true;\n  });\n\n  this._decrementDepthFrustum = createCommand(function () {\n    const next = that.depthFrustum - 1;\n    that.depthFrustum = boundDepthFrustum(1, that._numberOfFrustums, next);\n    that._scene.requestRender();\n    return true;\n  });\n\n  this._suspendUpdatesSubscription = knockout\n    .getObservable(this, \"suspendUpdates\")\n    .subscribe(function (val) {\n      globe._surface._debug.suspendLodUpdate = val;\n      if (!val) {\n        that.filterTile = false;\n      }\n    });\n\n  let tileBoundariesLayer;\n  this._showTileCoordinates = createCommand(function () {\n    if (that.tileCoordinates && !defined(tileBoundariesLayer)) {\n      tileBoundariesLayer = scene.imageryLayers.addImageryProvider(\n        new TileCoordinatesImageryProvider({\n          tilingScheme: scene.terrainProvider.tilingScheme,\n        }),\n      );\n    } else if (!that.tileCoordinates && defined(tileBoundariesLayer)) {\n      scene.imageryLayers.remove(tileBoundariesLayer);\n      tileBoundariesLayer = undefined;\n    }\n    return true;\n  });\n\n  this._tileCoordinatesSubscription = knockout\n    .getObservable(this, \"tileCoordinates\")\n    .subscribe(function () {\n      that._showTileCoordinates();\n      that._scene.requestRender();\n    });\n\n  this._tileBoundingSphereSubscription = knockout\n    .getObservable(this, \"tileBoundingSphere\")\n    .subscribe(function () {\n      that._showTileBoundingSphere();\n      that._scene.requestRender();\n    });\n\n  this._showTileBoundingSphere = createCommand(function () {\n    if (that.tileBoundingSphere) {\n      globe._surface.tileProvider._debug.boundingSphereTile = that._tile;\n    } else {\n      globe._surface.tileProvider._debug.boundingSphereTile = undefined;\n    }\n    that._scene.requestRender();\n    return true;\n  });\n\n  this._doFilterTile = createCommand(function () {\n    if (!that.filterTile) {\n      that.suspendUpdates = false;\n    } else {\n      that.suspendUpdates = true;\n\n      globe._surface._tilesToRender = [];\n\n      if (defined(that._tile) && that._tile.renderable) {\n        globe._surface._tilesToRender.push(that._tile);\n      }\n    }\n    return true;\n  });\n\n  this._filterTileSubscription = knockout\n    .getObservable(this, \"filterTile\")\n    .subscribe(function () {\n      that.doFilterTile();\n      that._scene.requestRender();\n    });\n\n  function pickPrimitive(e) {\n    const newPick = that._scene.pick({\n      x: e.position.x,\n      y: e.position.y,\n    });\n    if (defined(newPick)) {\n      that.primitive = defined(newPick.collection)\n        ? newPick.collection\n        : newPick.primitive;\n    }\n\n    that._scene.requestRender();\n    that.pickPrimitiveActive = false;\n  }\n\n  this._pickPrimitive = createCommand(function () {\n    that.pickPrimitiveActive = !that.pickPrimitiveActive;\n  });\n\n  this._pickPrimitiveActiveSubscription = knockout\n    .getObservable(this, \"pickPrimitiveActive\")\n    .subscribe(function (val) {\n      if (val) {\n        eventHandler.setInputAction(\n          pickPrimitive,\n          ScreenSpaceEventType.LEFT_CLICK,\n        );\n      } else {\n        eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK);\n      }\n    });\n\n  function selectTile(e) {\n    let selectedTile;\n    const ellipsoid = globe.ellipsoid;\n\n    const ray = that._scene.camera.getPickRay(e.position, scratchPickRay);\n    const cartesian = globe.pick(ray, that._scene, scratchPickCartesian);\n\n    if (defined(cartesian)) {\n      const cartographic = ellipsoid.cartesianToCartographic(cartesian);\n      const tilesRendered =\n        globe._surface.tileProvider._tilesToRenderByTextureCount;\n      for (\n        let textureCount = 0;\n        !selectedTile && textureCount < tilesRendered.length;\n        ++textureCount\n      ) {\n        const tilesRenderedByTextureCount = tilesRendered[textureCount];\n        if (!defined(tilesRenderedByTextureCount)) {\n          continue;\n        }\n\n        for (\n          let tileIndex = 0;\n          !selectedTile && tileIndex < tilesRenderedByTextureCount.length;\n          ++tileIndex\n        ) {\n          const tile = tilesRenderedByTextureCount[tileIndex];\n          if (Rectangle.contains(tile.rectangle, cartographic)) {\n            selectedTile = tile;\n          }\n        }\n      }\n    }\n\n    that.tile = selectedTile;\n\n    that.pickTileActive = false;\n  }\n\n  this._pickTile = createCommand(function () {\n    that.pickTileActive = !that.pickTileActive;\n  });\n\n  this._pickTileActiveSubscription = knockout\n    .getObservable(this, \"pickTileActive\")\n    .subscribe(function (val) {\n      if (val) {\n        eventHandler.setInputAction(\n          selectTile,\n          ScreenSpaceEventType.LEFT_CLICK,\n        );\n      } else {\n        eventHandler.removeInputAction(ScreenSpaceEventType.LEFT_CLICK);\n      }\n    });\n\n  this._removePostRenderEvent = scene.postRender.addEventListener(function () {\n    that._update();\n  });\n}\n\nObject.defineProperties(CesiumInspectorViewModel.prototype, {\n  /**\n   * Gets the scene to control.\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets the container of the PerformanceDisplay\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Element}\n   */\n  performanceContainer: {\n    get: function () {\n      return this._performanceContainer;\n    },\n  },\n\n  /**\n   * Gets the command to toggle the visibility of the drop down.\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  toggleDropDown: {\n    get: function () {\n      return this._toggleDropDown;\n    },\n  },\n\n  /**\n   * Gets the command to toggle the visibility of a BoundingSphere for a primitive\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  showPrimitiveBoundingSphere: {\n    get: function () {\n      return this._showPrimitiveBoundingSphere;\n    },\n  },\n\n  /**\n   * Gets the command to toggle the visibility of a {@link DebugModelMatrixPrimitive} for the model matrix of a primitive\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  showPrimitiveReferenceFrame: {\n    get: function () {\n      return this._showPrimitiveReferenceFrame;\n    },\n  },\n\n  /**\n   * Gets the command to toggle a filter that renders only a selected primitive\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  doFilterPrimitive: {\n    get: function () {\n      return this._doFilterPrimitive;\n    },\n  },\n\n  /**\n   * Gets the command to increment the depth frustum index to be shown\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  incrementDepthFrustum: {\n    get: function () {\n      return this._incrementDepthFrustum;\n    },\n  },\n\n  /**\n   * Gets the command to decrement the depth frustum index to be shown\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  decrementDepthFrustum: {\n    get: function () {\n      return this._decrementDepthFrustum;\n    },\n  },\n\n  /**\n   * Gets the command to toggle the visibility of tile coordinates\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  showTileCoordinates: {\n    get: function () {\n      return this._showTileCoordinates;\n    },\n  },\n\n  /**\n   * Gets the command to toggle the visibility of a BoundingSphere for a selected tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  showTileBoundingSphere: {\n    get: function () {\n      return this._showTileBoundingSphere;\n    },\n  },\n\n  /**\n   * Gets the command to toggle a filter that renders only a selected tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  doFilterTile: {\n    get: function () {\n      return this._doFilterTile;\n    },\n  },\n\n  /**\n   * Gets the command to expand and collapse the general section\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  toggleGeneral: {\n    get: function () {\n      return this._toggleGeneral;\n    },\n  },\n\n  /**\n   * Gets the command to expand and collapse the primitives section\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  togglePrimitives: {\n    get: function () {\n      return this._togglePrimitives;\n    },\n  },\n\n  /**\n   * Gets the command to expand and collapse the terrain section\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  toggleTerrain: {\n    get: function () {\n      return this._toggleTerrain;\n    },\n  },\n\n  /**\n   * Gets the command to pick a primitive\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  pickPrimitive: {\n    get: function () {\n      return this._pickPrimitive;\n    },\n  },\n\n  /**\n   * Gets the command to pick a tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  pickTile: {\n    get: function () {\n      return this._pickTile;\n    },\n  },\n\n  /**\n   * Gets the command to pick a tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  selectParent: {\n    get: function () {\n      const that = this;\n      return createCommand(function () {\n        that.tile = that.tile.parent;\n      });\n    },\n  },\n\n  /**\n   * Gets the command to pick a tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  selectNW: {\n    get: function () {\n      const that = this;\n      return createCommand(function () {\n        that.tile = that.tile.northwestChild;\n      });\n    },\n  },\n\n  /**\n   * Gets the command to pick a tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  selectNE: {\n    get: function () {\n      const that = this;\n      return createCommand(function () {\n        that.tile = that.tile.northeastChild;\n      });\n    },\n  },\n\n  /**\n   * Gets the command to pick a tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  selectSW: {\n    get: function () {\n      const that = this;\n      return createCommand(function () {\n        that.tile = that.tile.southwestChild;\n      });\n    },\n  },\n\n  /**\n   * Gets the command to pick a tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  selectSE: {\n    get: function () {\n      const that = this;\n      return createCommand(function () {\n        that.tile = that.tile.southeastChild;\n      });\n    },\n  },\n\n  /**\n   * Gets or sets the current selected primitive\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  primitive: {\n    get: function () {\n      return this._primitive;\n    },\n    set: function (newPrimitive) {\n      const oldPrimitive = this._primitive;\n      if (newPrimitive !== oldPrimitive) {\n        this.hasPickedPrimitive = true;\n        if (defined(oldPrimitive)) {\n          oldPrimitive.debugShowBoundingVolume = false;\n        }\n        this._scene.debugCommandFilter = undefined;\n        if (defined(this._modelMatrixPrimitive)) {\n          this._scene.primitives.remove(this._modelMatrixPrimitive);\n          this._modelMatrixPrimitive = undefined;\n        }\n        this._primitive = newPrimitive;\n        newPrimitive.show = false;\n        setTimeout(function () {\n          newPrimitive.show = true;\n        }, 50);\n        this.showPrimitiveBoundingSphere();\n        this.showPrimitiveReferenceFrame();\n        this.doFilterPrimitive();\n      }\n    },\n  },\n\n  /**\n   * Gets or sets the current selected tile\n   * @memberof CesiumInspectorViewModel.prototype\n   *\n   * @type {Command}\n   */\n  tile: {\n    get: function () {\n      return this._tile;\n    },\n    set: function (newTile) {\n      if (defined(newTile)) {\n        this.hasPickedTile = true;\n        const oldTile = this._tile;\n        if (newTile !== oldTile) {\n          this.tileText = `L: ${newTile.level} X: ${newTile.x} Y: ${newTile.y}`;\n          this.tileText += `<br>SW corner: ${newTile.rectangle.west}, ${newTile.rectangle.south}`;\n          this.tileText += `<br>NE corner: ${newTile.rectangle.east}, ${newTile.rectangle.north}`;\n          const data = newTile.data;\n          if (defined(data) && defined(data.tileBoundingRegion)) {\n            this.tileText += `<br>Min: ${data.tileBoundingRegion.minimumHeight} Max: ${data.tileBoundingRegion.maximumHeight}`;\n          } else {\n            this.tileText += \"<br>(Tile is not loaded)\";\n          }\n        }\n        this._tile = newTile;\n        this.showTileBoundingSphere();\n        this.doFilterTile();\n      } else {\n        this.hasPickedTile = false;\n        this._tile = undefined;\n      }\n    },\n  },\n});\n\n/**\n * Updates the view model\n * @private\n */\nCesiumInspectorViewModel.prototype._update = function () {\n  if (this.frustums) {\n    this.frustumStatisticText = frustumStatisticsToString(\n      this._scene.debugFrustumStatistics,\n    );\n  }\n\n  // Determine the number of frustums being used.\n  const numberOfFrustums = this._scene.numberOfFrustums;\n  this._numberOfFrustums = numberOfFrustums;\n  // Bound the frustum to be displayed.\n  this.depthFrustum = boundDepthFrustum(1, numberOfFrustums, this.depthFrustum);\n  // Update the displayed text.\n  this.depthFrustumText = `${this.depthFrustum} of ${numberOfFrustums}`;\n\n  if (this.performance) {\n    this._performanceDisplay.update();\n  }\n  if (this.primitiveReferenceFrame) {\n    this._modelMatrixPrimitive.modelMatrix = this._primitive.modelMatrix;\n  }\n\n  this.shaderCacheText = `Cached shaders: ${this._scene.context.shaderCache.numberOfShaders}`;\n};\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nCesiumInspectorViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nCesiumInspectorViewModel.prototype.destroy = function () {\n  this._eventHandler.destroy();\n  this._removePostRenderEvent();\n  this._frustumsSubscription.dispose();\n  this._frustumPlanesSubscription.dispose();\n  this._performanceSubscription.dispose();\n  this._primitiveBoundingSphereSubscription.dispose();\n  this._primitiveReferenceFrameSubscription.dispose();\n  this._filterPrimitiveSubscription.dispose();\n  this._wireframeSubscription.dispose();\n  this._depthFrustumSubscription.dispose();\n  this._suspendUpdatesSubscription.dispose();\n  this._tileCoordinatesSubscription.dispose();\n  this._tileBoundingSphereSubscription.dispose();\n  this._filterTileSubscription.dispose();\n  this._pickPrimitiveActiveSubscription.dispose();\n  this._pickTileActiveSubscription.dispose();\n  return destroyObject(this);\n};\nexport default CesiumInspectorViewModel;\n","import {\n  Clock,\n  defined,\n  destroyObject,\n  EventHelper,\n  JulianDate,\n} from \"@cesium/engine\";\nimport knockout from \"./ThirdParty/knockout.js\";\n\n/**\n * A view model which exposes a {@link Clock} for user interfaces.\n * @alias ClockViewModel\n * @constructor\n *\n * @param {Clock} [clock] The clock object wrapped by this view model, if undefined a new instance will be created.\n *\n * @see Clock\n */\nfunction ClockViewModel(clock) {\n  if (!defined(clock)) {\n    clock = new Clock();\n  }\n  this._clock = clock;\n\n  this._eventHelper = new EventHelper();\n  this._eventHelper.add(clock.onTick, this.synchronize, this);\n\n  /**\n   * Gets the current system time.\n   * This property is observable.\n   * @type {JulianDate}\n   */\n  this.systemTime = knockout.observable(JulianDate.now());\n  this.systemTime.equalityComparer = JulianDate.equals;\n\n  /**\n   * Gets or sets the start time of the clock.\n   * See {@link Clock#startTime}.\n   * This property is observable.\n   * @type {JulianDate}\n   */\n  this.startTime = knockout.observable(clock.startTime);\n  this.startTime.equalityComparer = JulianDate.equals;\n  this.startTime.subscribe(function (value) {\n    clock.startTime = value;\n    this.synchronize();\n  }, this);\n\n  /**\n   * Gets or sets the stop time of the clock.\n   * See {@link Clock#stopTime}.\n   * This property is observable.\n   * @type {JulianDate}\n   */\n  this.stopTime = knockout.observable(clock.stopTime);\n  this.stopTime.equalityComparer = JulianDate.equals;\n  this.stopTime.subscribe(function (value) {\n    clock.stopTime = value;\n    this.synchronize();\n  }, this);\n\n  /**\n   * Gets or sets the current time.\n   * See {@link Clock#currentTime}.\n   * This property is observable.\n   * @type {JulianDate}\n   */\n  this.currentTime = knockout.observable(clock.currentTime);\n  this.currentTime.equalityComparer = JulianDate.equals;\n  this.currentTime.subscribe(function (value) {\n    clock.currentTime = value;\n    this.synchronize();\n  }, this);\n\n  /**\n   * Gets or sets the clock multiplier.\n   * See {@link Clock#multiplier}.\n   * This property is observable.\n   * @type {number}\n   */\n  this.multiplier = knockout.observable(clock.multiplier);\n  this.multiplier.subscribe(function (value) {\n    clock.multiplier = value;\n    this.synchronize();\n  }, this);\n\n  /**\n   * Gets or sets the clock step setting.\n   * See {@link Clock#clockStep}.\n   * This property is observable.\n   * @type {ClockStep}\n   */\n  this.clockStep = knockout.observable(clock.clockStep);\n  this.clockStep.subscribe(function (value) {\n    clock.clockStep = value;\n    this.synchronize();\n  }, this);\n\n  /**\n   * Gets or sets the clock range setting.\n   * See {@link Clock#clockRange}.\n   * This property is observable.\n   * @type {ClockRange}\n   */\n  this.clockRange = knockout.observable(clock.clockRange);\n  this.clockRange.subscribe(function (value) {\n    clock.clockRange = value;\n    this.synchronize();\n  }, this);\n\n  /**\n   * Gets or sets whether the clock can animate.\n   * See {@link Clock#canAnimate}.\n   * This property is observable.\n   * @type {boolean}\n   */\n  this.canAnimate = knockout.observable(clock.canAnimate);\n  this.canAnimate.subscribe(function (value) {\n    clock.canAnimate = value;\n    this.synchronize();\n  }, this);\n\n  /**\n   * Gets or sets whether the clock should animate.\n   * See {@link Clock#shouldAnimate}.\n   * This property is observable.\n   * @type {boolean}\n   */\n  this.shouldAnimate = knockout.observable(clock.shouldAnimate);\n  this.shouldAnimate.subscribe(function (value) {\n    clock.shouldAnimate = value;\n    this.synchronize();\n  }, this);\n\n  knockout.track(this, [\n    \"systemTime\",\n    \"startTime\",\n    \"stopTime\",\n    \"currentTime\",\n    \"multiplier\",\n    \"clockStep\",\n    \"clockRange\",\n    \"canAnimate\",\n    \"shouldAnimate\",\n  ]);\n}\n\nObject.defineProperties(ClockViewModel.prototype, {\n  /**\n   * Gets the underlying Clock.\n   * @memberof ClockViewModel.prototype\n   * @type {Clock}\n   */\n  clock: {\n    get: function () {\n      return this._clock;\n    },\n  },\n});\n\n/**\n * Updates the view model with the contents of the underlying clock.\n * Can be called to force an update of the viewModel if the underlying\n * clock has changed and <code>Clock.tick</code> has not yet been called.\n */\nClockViewModel.prototype.synchronize = function () {\n  const clock = this._clock;\n\n  this.systemTime = JulianDate.now();\n  this.startTime = clock.startTime;\n  this.stopTime = clock.stopTime;\n  this.currentTime = clock.currentTime;\n  this.multiplier = clock.multiplier;\n  this.clockStep = clock.clockStep;\n  this.clockRange = clock.clockRange;\n  this.canAnimate = clock.canAnimate;\n  this.shouldAnimate = clock.shouldAnimate;\n};\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nClockViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the view model.  Should be called to\n * properly clean up the view model when it is no longer needed.\n */\nClockViewModel.prototype.destroy = function () {\n  this._eventHelper.removeAll();\n\n  destroyObject(this);\n};\nexport default ClockViewModel;\n","import { DeveloperError } from \"@cesium/engine\";\n\n/**\n * A Command is a function with an extra <code>canExecute</code> observable property to determine\n * whether the command can be executed.  When executed, a Command function will check the\n * value of <code>canExecute</code> and throw if false.\n *\n * This type describes an interface and is not intended to be instantiated directly.\n * See {@link createCommand} to create a command from a function.\n *\n * @alias Command\n * @constructor\n */\nfunction Command() {\n  /**\n   * Gets whether this command can currently be executed.  This property is observable.\n   * @type {boolean}\n   * @default undefined\n   */\n  this.canExecute = undefined;\n\n  /**\n   * Gets an event which is raised before the command executes, the event\n   * is raised with an object containing two properties: a <code>cancel</code> property,\n   * which if set to false by the listener will prevent the command from being executed, and\n   * an <code>args</code> property, which is the array of arguments being passed to the command.\n   * @type {Event}\n   * @default undefined\n   */\n  this.beforeExecute = undefined;\n\n  /**\n   * Gets an event which is raised after the command executes, the event\n   * is raised with the return value of the command as its only parameter.\n   * @type {Event}\n   * @default undefined\n   */\n  this.afterExecute = undefined;\n\n  DeveloperError.throwInstantiationError();\n}\nexport default Command;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport FullscreenButtonViewModel from \"./FullscreenButtonViewModel.js\";\n\nconst enterFullScreenPath =\n  \"M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z\";\nconst exitFullScreenPath =\n  \"M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z\";\n\n/**\n * A single button widget for toggling fullscreen mode.\n *\n * @alias FullscreenButton\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Element|string} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @see Fullscreen\n */\nfunction FullscreenButton(container, fullscreenElement) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const viewModel = new FullscreenButtonViewModel(fullscreenElement, container);\n\n  viewModel._exitFullScreenPath = exitFullScreenPath;\n  viewModel._enterFullScreenPath = enterFullScreenPath;\n\n  const element = document.createElement(\"button\");\n  element.type = \"button\";\n  element.className = \"cesium-button cesium-fullscreenButton\";\n  element.setAttribute(\n    \"data-bind\",\n    \"\\\nattr: { title: tooltip },\\\nclick: command,\\\nenable: isFullscreenEnabled,\\\ncesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }\",\n  );\n\n  container.appendChild(element);\n\n  knockout.applyBindings(viewModel, element);\n\n  this._container = container;\n  this._viewModel = viewModel;\n  this._element = element;\n}\n\nObject.defineProperties(FullscreenButton.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof FullscreenButton.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof FullscreenButton.prototype\n   *\n   * @type {FullscreenButtonViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nFullscreenButton.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nFullscreenButton.prototype.destroy = function () {\n  this._viewModel.destroy();\n\n  knockout.cleanNode(this._element);\n  this._container.removeChild(this._element);\n\n  return destroyObject(this);\n};\nexport default FullscreenButton;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  Fullscreen,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link FullscreenButton}.\n * @alias FullscreenButtonViewModel\n * @constructor\n *\n * @param {Element|string} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode.\n * @param {Element|string} [container] The DOM element or ID that will contain the widget.\n */\nfunction FullscreenButtonViewModel(fullscreenElement, container) {\n  if (!defined(container)) {\n    container = document.body;\n  }\n\n  container = getElement(container);\n\n  const that = this;\n\n  const tmpIsFullscreen = knockout.observable(Fullscreen.fullscreen);\n  const tmpIsEnabled = knockout.observable(Fullscreen.enabled);\n  const ownerDocument = container.ownerDocument;\n\n  /**\n   * Gets whether or not fullscreen mode is active.  This property is observable.\n   *\n   * @type {boolean}\n   */\n  this.isFullscreen = undefined;\n  knockout.defineProperty(this, \"isFullscreen\", {\n    get: function () {\n      return tmpIsFullscreen();\n    },\n  });\n\n  /**\n   * Gets or sets whether or not fullscreen functionality should be enabled.  This property is observable.\n   *\n   * @type {boolean}\n   * @see Fullscreen.enabled\n   */\n  this.isFullscreenEnabled = undefined;\n  knockout.defineProperty(this, \"isFullscreenEnabled\", {\n    get: function () {\n      return tmpIsEnabled();\n    },\n    set: function (value) {\n      tmpIsEnabled(value && Fullscreen.enabled);\n    },\n  });\n\n  /**\n   * Gets the tooltip.  This property is observable.\n   *\n   * @type {string}\n   */\n  this.tooltip = undefined;\n  knockout.defineProperty(this, \"tooltip\", function () {\n    if (!this.isFullscreenEnabled) {\n      return \"Full screen unavailable\";\n    }\n    return tmpIsFullscreen() ? \"Exit full screen\" : \"Full screen\";\n  });\n\n  this._command = createCommand(\n    function () {\n      if (Fullscreen.fullscreen) {\n        Fullscreen.exitFullscreen();\n      } else {\n        Fullscreen.requestFullscreen(that._fullscreenElement);\n      }\n    },\n    knockout.getObservable(this, \"isFullscreenEnabled\"),\n  );\n\n  this._fullscreenElement = getElement(fullscreenElement) ?? ownerDocument.body;\n\n  this._callback = function () {\n    tmpIsFullscreen(Fullscreen.fullscreen);\n  };\n  ownerDocument.addEventListener(Fullscreen.changeEventName, this._callback);\n}\n\nObject.defineProperties(FullscreenButtonViewModel.prototype, {\n  /**\n   * Gets or sets the HTML element to place into fullscreen mode when the\n   * corresponding button is pressed.\n   * @memberof FullscreenButtonViewModel.prototype\n   *\n   * @type {Element}\n   */\n  fullscreenElement: {\n    //TODO:@exception {DeveloperError} value must be a valid HTML Element.\n    get: function () {\n      return this._fullscreenElement;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!(value instanceof Element)) {\n        throw new DeveloperError(\"value must be a valid Element.\");\n      }\n      //>>includeEnd('debug');\n\n      this._fullscreenElement = value;\n    },\n  },\n\n  /**\n   * Gets the Command to toggle fullscreen mode.\n   * @memberof FullscreenButtonViewModel.prototype\n   *\n   * @type {Command}\n   */\n  command: {\n    get: function () {\n      return this._command;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nFullscreenButtonViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the view model.  Should be called to\n * properly clean up the view model when it is no longer needed.\n */\nFullscreenButtonViewModel.prototype.destroy = function () {\n  document.removeEventListener(Fullscreen.changeEventName, this._callback);\n  destroyObject(this);\n};\nexport default FullscreenButtonViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  FeatureDetection,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport GeocoderViewModel from \"./GeocoderViewModel.js\";\n\nconst startSearchPath =\n  \"M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z\";\nconst stopSearchPath =\n  \"M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z\";\n\n/**\n * A widget for finding addresses and landmarks, and flying the camera to them.  Geocoding is\n * performed using {@link https://cesium.com/cesium-ion/|Cesium ion}.\n *\n * @alias Geocoder\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Element|string} options.container The DOM element or ID that will contain the widget.\n * @param {Scene} options.scene The Scene instance to use.\n * @param {GeocoderService[]} [options.geocoderServices] The geocoder services to be used\n * @param {boolean} [options.autoComplete = true] True if the geocoder should query as the user types to autocomplete\n * @param {number} [options.flightDuration=1.5] The duration of the camera flight to an entered location, in seconds.\n * @param {Geocoder.DestinationFoundFunction} [options.destinationFound=GeocoderViewModel.flyToDestination] A callback function that is called after a successful geocode.  If not supplied, the default behavior is to fly the camera to the result destination.\n */\nfunction Geocoder(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.container)) {\n    throw new DeveloperError(\"options.container is required.\");\n  }\n  if (!defined(options.scene)) {\n    throw new DeveloperError(\"options.scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const container = getElement(options.container);\n  const viewModel = new GeocoderViewModel(options);\n\n  viewModel._startSearchPath = startSearchPath;\n  viewModel._stopSearchPath = stopSearchPath;\n\n  const form = document.createElement(\"form\");\n  form.setAttribute(\"data-bind\", \"submit: search\");\n\n  const textBox = document.createElement(\"input\");\n  textBox.type = \"search\";\n  textBox.className = \"cesium-geocoder-input\";\n  textBox.setAttribute(\"placeholder\", \"Enter an address or landmark...\");\n  textBox.setAttribute(\n    \"data-bind\",\n    '\\\ntextInput: searchText,\\\ndisable: isSearchInProgress,\\\nevent: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },\\\ncss: { \"cesium-geocoder-input-wide\" : keepExpanded || searchText.length > 0 },\\\nhasFocus: _focusTextbox',\n  );\n\n  this._onTextBoxFocus = function () {\n    // as of 2016-10-19, setTimeout is required to ensure that the\n    // text is focused on Safari 10\n    setTimeout(function () {\n      textBox.select();\n    }, 0);\n  };\n\n  textBox.addEventListener(\"focus\", this._onTextBoxFocus, false);\n  form.appendChild(textBox);\n  this._textBox = textBox;\n\n  const searchButton = document.createElement(\"span\");\n  searchButton.className = \"cesium-geocoder-searchButton\";\n  searchButton.setAttribute(\n    \"data-bind\",\n    \"\\\nclick: search,\\\ncesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }\",\n  );\n  form.appendChild(searchButton);\n\n  container.appendChild(form);\n\n  const searchSuggestionsContainer = document.createElement(\"div\");\n  searchSuggestionsContainer.className = \"search-results\";\n  searchSuggestionsContainer.setAttribute(\n    \"data-bind\",\n    \"visible: _suggestionsVisible\",\n  );\n\n  const suggestionsList = document.createElement(\"ul\");\n  suggestionsList.setAttribute(\"data-bind\", \"foreach: _suggestions\");\n  const suggestions = document.createElement(\"li\");\n  suggestionsList.appendChild(suggestions);\n  suggestions.setAttribute(\n    \"data-bind\",\n    \"text: $data.displayName, \\\nclick: $parent.activateSuggestion, \\\nevent: { mouseover: $parent.handleMouseover}, \\\ncss: { active: $data === $parent._selectedSuggestion }\",\n  );\n\n  searchSuggestionsContainer.appendChild(suggestionsList);\n  container.appendChild(searchSuggestionsContainer);\n\n  knockout.applyBindings(viewModel, form);\n  knockout.applyBindings(viewModel, searchSuggestionsContainer);\n\n  this._container = container;\n  this._searchSuggestionsContainer = searchSuggestionsContainer;\n  this._viewModel = viewModel;\n  this._form = form;\n\n  this._onInputBegin = function (e) {\n    // e.target will not be correct if we are inside of the Shadow DOM\n    // and contains will always fail. To retrieve the correct target,\n    // we need to access the first element of the composedPath.\n    // This allows us to use shadow DOM if it exists and fall\n    // back to legacy behavior if its not being used.\n\n    let target = e.target;\n    if (typeof e.composedPath === \"function\") {\n      target = e.composedPath()[0];\n    }\n\n    if (!container.contains(target)) {\n      viewModel._focusTextbox = false;\n      viewModel.hideSuggestions();\n    }\n  };\n\n  this._onInputEnd = function (e) {\n    viewModel._focusTextbox = true;\n    viewModel.showSuggestions();\n  };\n\n  //We subscribe to both begin and end events in order to give the text box\n  //focus no matter where on the widget is clicked.\n\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.addEventListener(\"pointerdown\", this._onInputBegin, true);\n    container.addEventListener(\"pointerup\", this._onInputEnd, true);\n    container.addEventListener(\"pointercancel\", this._onInputEnd, true);\n  } else {\n    document.addEventListener(\"mousedown\", this._onInputBegin, true);\n    container.addEventListener(\"mouseup\", this._onInputEnd, true);\n    document.addEventListener(\"touchstart\", this._onInputBegin, true);\n    container.addEventListener(\"touchend\", this._onInputEnd, true);\n    container.addEventListener(\"touchcancel\", this._onInputEnd, true);\n  }\n}\n\nObject.defineProperties(Geocoder.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof Geocoder.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the parent container.\n   * @memberof Geocoder.prototype\n   *\n   * @type {Element}\n   */\n  searchSuggestionsContainer: {\n    get: function () {\n      return this._searchSuggestionsContainer;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof Geocoder.prototype\n   *\n   * @type {GeocoderViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nGeocoder.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nGeocoder.prototype.destroy = function () {\n  const container = this._container;\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.removeEventListener(\"pointerdown\", this._onInputBegin, true);\n    container.removeEventListener(\"pointerup\", this._onInputEnd, true);\n  } else {\n    document.removeEventListener(\"mousedown\", this._onInputBegin, true);\n    container.removeEventListener(\"mouseup\", this._onInputEnd, true);\n    document.removeEventListener(\"touchstart\", this._onInputBegin, true);\n    container.removeEventListener(\"touchend\", this._onInputEnd, true);\n  }\n  this._viewModel.destroy();\n  knockout.cleanNode(this._form);\n  knockout.cleanNode(this._searchSuggestionsContainer);\n  container.removeChild(this._form);\n  container.removeChild(this._searchSuggestionsContainer);\n  this._textBox.removeEventListener(\"focus\", this._onTextBoxFocus, false);\n\n  return destroyObject(this);\n};\n\n/**\n * A function that handles the result of a successful geocode.\n * @callback Geocoder.DestinationFoundFunction\n * @param {GeocoderViewModel} viewModel The view model.\n * @param {Cartesian3|Rectangle} destination The destination result of the geocode.\n */\nexport default Geocoder;\n","import {\n  computeFlyToLocationForRectangle,\n  defined,\n  DeveloperError,\n  destroyObject,\n  Event,\n  GeocoderService,\n  GeocodeType,\n  getElement,\n  IonGeocoderService,\n  Math as CesiumMath,\n  Matrix4,\n  Rectangle,\n  sampleTerrainMostDetailed,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n// The height we use if geocoding to a specific point instead of an rectangle.\nconst DEFAULT_HEIGHT = 1000;\n\n/**\n * The view model for the {@link Geocoder} widget.\n * @alias GeocoderViewModel\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Scene} options.scene The Scene instance to use.\n * @param {GeocoderService[]} [options.geocoderServices] Geocoder services to use for geocoding queries.\n *        If more than one are supplied, suggestions will be gathered for the geocoders that support it,\n *        and if no suggestion is selected the result from the first geocoder service wil be used.\n * @param {number} [options.flightDuration] The duration of the camera flight to an entered location, in seconds.\n * @param {Geocoder.DestinationFoundFunction} [options.destinationFound=GeocoderViewModel.flyToDestination] A callback function that is called after a successful geocode.  If not supplied, the default behavior is to fly the camera to the result destination.\n */\nfunction GeocoderViewModel(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.scene)) {\n    throw new DeveloperError(\"options.scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  if (defined(options.geocoderServices)) {\n    this._geocoderServices = options.geocoderServices;\n  } else {\n    this._geocoderServices = [new IonGeocoderService({ scene: options.scene })];\n  }\n\n  this._viewContainer = options.container;\n  this._scene = options.scene;\n  this._flightDuration = options.flightDuration;\n  this._searchText = \"\";\n  this._isSearchInProgress = false;\n  this._wasGeocodeCancelled = false;\n  this._previousCredits = [];\n  this._complete = new Event();\n  this._suggestions = [];\n  this._selectedSuggestion = undefined;\n  this._showSuggestions = true;\n\n  this._handleArrowDown = handleArrowDown;\n  this._handleArrowUp = handleArrowUp;\n\n  const that = this;\n\n  this._suggestionsVisible = knockout.pureComputed(function () {\n    const suggestions = knockout.getObservable(that, \"_suggestions\");\n    const suggestionsNotEmpty = suggestions().length > 0;\n    const showSuggestions = knockout.getObservable(that, \"_showSuggestions\")();\n    return suggestionsNotEmpty && showSuggestions;\n  });\n\n  this._searchCommand = createCommand(function (geocodeType) {\n    geocodeType = geocodeType ?? GeocodeType.SEARCH;\n    that._focusTextbox = false;\n    if (defined(that._selectedSuggestion)) {\n      that.activateSuggestion(that._selectedSuggestion);\n      return false;\n    }\n    that.hideSuggestions();\n    if (that.isSearchInProgress) {\n      cancelGeocode(that);\n    } else {\n      return geocode(that, that._geocoderServices, geocodeType);\n    }\n  });\n\n  this.deselectSuggestion = function () {\n    that._selectedSuggestion = undefined;\n  };\n\n  this.handleKeyDown = function (data, event) {\n    const downKey =\n      event.key === \"ArrowDown\" || event.key === \"Down\" || event.keyCode === 40;\n    const upKey =\n      event.key === \"ArrowUp\" || event.key === \"Up\" || event.keyCode === 38;\n    if (downKey || upKey) {\n      event.preventDefault();\n    }\n\n    return true;\n  };\n\n  this.handleKeyUp = function (data, event) {\n    const downKey =\n      event.key === \"ArrowDown\" || event.key === \"Down\" || event.keyCode === 40;\n    const upKey =\n      event.key === \"ArrowUp\" || event.key === \"Up\" || event.keyCode === 38;\n    const enterKey = event.key === \"Enter\" || event.keyCode === 13;\n    if (upKey) {\n      handleArrowUp(that);\n    } else if (downKey) {\n      handleArrowDown(that);\n    } else if (enterKey) {\n      that._searchCommand();\n    }\n    return true;\n  };\n\n  this.activateSuggestion = function (data) {\n    that.hideSuggestions();\n    that._searchText = data.displayName;\n    const destination = data.destination;\n    clearSuggestions(that);\n    that.destinationFound(that, destination);\n  };\n\n  this.hideSuggestions = function () {\n    that._showSuggestions = false;\n    that._selectedSuggestion = undefined;\n  };\n\n  this.showSuggestions = function () {\n    that._showSuggestions = true;\n  };\n\n  this.handleMouseover = function (data, event) {\n    if (data !== that._selectedSuggestion) {\n      that._selectedSuggestion = data;\n    }\n  };\n\n  /**\n   * Gets or sets a value indicating if this instance should always show its text input field.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  this.keepExpanded = false;\n\n  /**\n   * True if the geocoder should query as the user types to autocomplete\n   * @type {boolean}\n   * @default true\n   */\n  this.autoComplete = options.autocomplete ?? true;\n\n  /**\n   * Gets and sets the command called when a geocode destination is found\n   * @type {Geocoder.DestinationFoundFunction}\n   */\n  this.destinationFound =\n    options.destinationFound ?? GeocoderViewModel.flyToDestination;\n\n  this._focusTextbox = false;\n\n  knockout.track(this, [\n    \"_searchText\",\n    \"_isSearchInProgress\",\n    \"keepExpanded\",\n    \"_suggestions\",\n    \"_selectedSuggestion\",\n    \"_showSuggestions\",\n    \"_focusTextbox\",\n  ]);\n\n  const searchTextObservable = knockout.getObservable(this, \"_searchText\");\n  searchTextObservable.extend({ rateLimit: { timeout: 500 } });\n  this._suggestionSubscription = searchTextObservable.subscribe(function () {\n    GeocoderViewModel._updateSearchSuggestions(that);\n  });\n  /**\n   * Gets a value indicating whether a search is currently in progress.  This property is observable.\n   *\n   * @type {boolean}\n   */\n  this.isSearchInProgress = undefined;\n  knockout.defineProperty(this, \"isSearchInProgress\", {\n    get: function () {\n      return this._isSearchInProgress;\n    },\n  });\n\n  /**\n   * Gets or sets the text to search for.  The text can be an address, or longitude, latitude,\n   * and optional height, where longitude and latitude are in degrees and height is in meters.\n   *\n   * @type {string}\n   */\n  this.searchText = undefined;\n  knockout.defineProperty(this, \"searchText\", {\n    get: function () {\n      if (this.isSearchInProgress) {\n        return \"Searching...\";\n      }\n\n      return this._searchText;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (typeof value !== \"string\") {\n        throw new DeveloperError(\"value must be a valid string.\");\n      }\n      //>>includeEnd('debug');\n      this._searchText = value;\n    },\n  });\n\n  /**\n   * Gets or sets the the duration of the camera flight in seconds.\n   * A value of zero causes the camera to instantly switch to the geocoding location.\n   * The duration will be computed based on the distance when undefined.\n   *\n   * @type {number|undefined}\n   * @default undefined\n   */\n  this.flightDuration = undefined;\n  knockout.defineProperty(this, \"flightDuration\", {\n    get: function () {\n      return this._flightDuration;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value < 0) {\n        throw new DeveloperError(\"value must be positive.\");\n      }\n      //>>includeEnd('debug');\n\n      this._flightDuration = value;\n    },\n  });\n}\n\nObject.defineProperties(GeocoderViewModel.prototype, {\n  /**\n   * Gets the event triggered on flight completion.\n   * @memberof GeocoderViewModel.prototype\n   *\n   * @type {Event}\n   */\n  complete: {\n    get: function () {\n      return this._complete;\n    },\n  },\n\n  /**\n   * Gets the scene to control.\n   * @memberof GeocoderViewModel.prototype\n   *\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets the Command that is executed when the button is clicked.\n   * @memberof GeocoderViewModel.prototype\n   *\n   * @type {Command}\n   */\n  search: {\n    get: function () {\n      return this._searchCommand;\n    },\n  },\n\n  /**\n   * Gets the currently selected geocoder search suggestion\n   * @memberof GeocoderViewModel.prototype\n   *\n   * @type {object}\n   */\n  selectedSuggestion: {\n    get: function () {\n      return this._selectedSuggestion;\n    },\n  },\n\n  /**\n   * Gets the list of geocoder search suggestions\n   * @memberof GeocoderViewModel.prototype\n   *\n   * @type {object[]}\n   */\n  suggestions: {\n    get: function () {\n      return this._suggestions;\n    },\n  },\n});\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nGeocoderViewModel.prototype.destroy = function () {\n  this._suggestionSubscription.dispose();\n};\n\nfunction handleArrowUp(viewModel) {\n  if (viewModel._suggestions.length === 0) {\n    return;\n  }\n  const currentIndex = viewModel._suggestions.indexOf(\n    viewModel._selectedSuggestion,\n  );\n  if (currentIndex === -1 || currentIndex === 0) {\n    viewModel._selectedSuggestion = undefined;\n    return;\n  }\n  const next = currentIndex - 1;\n  viewModel._selectedSuggestion = viewModel._suggestions[next];\n  GeocoderViewModel._adjustSuggestionsScroll(viewModel, next);\n}\n\nfunction handleArrowDown(viewModel) {\n  if (viewModel._suggestions.length === 0) {\n    return;\n  }\n  const numberOfSuggestions = viewModel._suggestions.length;\n  const currentIndex = viewModel._suggestions.indexOf(\n    viewModel._selectedSuggestion,\n  );\n  const next = (currentIndex + 1) % numberOfSuggestions;\n  viewModel._selectedSuggestion = viewModel._suggestions[next];\n\n  GeocoderViewModel._adjustSuggestionsScroll(viewModel, next);\n}\n\nfunction computeFlyToLocationForCartographic(cartographic, terrainProvider) {\n  const availability = defined(terrainProvider)\n    ? terrainProvider.availability\n    : undefined;\n\n  if (!defined(availability)) {\n    cartographic.height += DEFAULT_HEIGHT;\n    return Promise.resolve(cartographic);\n  }\n\n  return sampleTerrainMostDetailed(terrainProvider, [cartographic]).then(\n    function (positionOnTerrain) {\n      cartographic = positionOnTerrain[0];\n      cartographic.height += DEFAULT_HEIGHT;\n      return cartographic;\n    },\n  );\n}\n\nfunction flyToDestination(viewModel, destination) {\n  const scene = viewModel._scene;\n  const ellipsoid = scene.ellipsoid;\n\n  const camera = scene.camera;\n  const terrainProvider = scene.terrainProvider;\n  let finalDestination = destination;\n\n  let promise;\n  if (destination instanceof Rectangle) {\n    // Some geocoders return a Rectangle of zero width/height, treat it like a point instead.\n    if (\n      CesiumMath.equalsEpsilon(\n        destination.south,\n        destination.north,\n        CesiumMath.EPSILON7,\n      ) &&\n      CesiumMath.equalsEpsilon(\n        destination.east,\n        destination.west,\n        CesiumMath.EPSILON7,\n      )\n    ) {\n      // destination is now a Cartographic\n      destination = Rectangle.center(destination);\n    } else {\n      promise = computeFlyToLocationForRectangle(destination, scene);\n    }\n  } else {\n    // destination is a Cartesian3\n    destination = ellipsoid.cartesianToCartographic(destination);\n  }\n\n  if (!defined(promise)) {\n    promise = computeFlyToLocationForCartographic(destination, terrainProvider);\n  }\n\n  return promise\n    .then(function (result) {\n      finalDestination = ellipsoid.cartographicToCartesian(result);\n    })\n    .finally(function () {\n      // Whether terrain querying succeeded or not, fly to the destination.\n      camera.flyTo({\n        destination: finalDestination,\n        complete: function () {\n          viewModel._complete.raiseEvent();\n        },\n        duration: viewModel._flightDuration,\n        endTransform: Matrix4.IDENTITY,\n      });\n    });\n}\n\nasync function attemptGeocode(geocoderService, query, geocodeType) {\n  try {\n    const result = await geocoderService.geocode(query, geocodeType);\n    return {\n      state: \"fulfilled\",\n      value: result,\n      credits: geocoderService.credit,\n    };\n  } catch (error) {\n    return { state: \"rejected\", reason: error };\n  }\n}\n\nasync function geocode(viewModel, geocoderServices, geocodeType) {\n  const query = viewModel._searchText;\n\n  if (hasOnlyWhitespace(query)) {\n    viewModel.showSuggestions();\n    return;\n  }\n\n  viewModel._isSearchInProgress = true;\n  viewModel._wasGeocodeCancelled = false;\n\n  let i;\n  let result;\n  for (i = 0; i < geocoderServices.length; i++) {\n    if (viewModel._wasGeocodeCancelled) {\n      return;\n    }\n\n    result = await attemptGeocode(geocoderServices[i], query, geocodeType);\n    if (\n      defined(result) &&\n      result.state === \"fulfilled\" &&\n      result.value.length > 0\n    ) {\n      break;\n    }\n  }\n\n  if (viewModel._wasGeocodeCancelled) {\n    return;\n  }\n\n  viewModel._isSearchInProgress = false;\n  clearCredits(viewModel);\n\n  const geocoderResults = result.value;\n  if (\n    result.state === \"fulfilled\" &&\n    defined(geocoderResults) &&\n    geocoderResults.length > 0\n  ) {\n    viewModel._searchText = geocoderResults[0].displayName;\n    viewModel.destinationFound(viewModel, geocoderResults[0].destination);\n    const credits = updateCredits(\n      viewModel,\n      GeocoderService.getCreditsFromResult(geocoderResults[0]),\n    );\n    // If the result does not contain any credits, default to the service credit.\n    if (!defined(credits)) {\n      updateCredit(viewModel, geocoderServices[i].credit);\n    }\n    return;\n  }\n\n  viewModel._searchText = `${query} (not found)`;\n}\n\nfunction updateCredit(viewModel, credit) {\n  if (\n    defined(credit) &&\n    !viewModel._scene.isDestroyed() &&\n    !viewModel._scene.frameState.creditDisplay.isDestroyed()\n  ) {\n    viewModel._scene.frameState.creditDisplay.addStaticCredit(credit);\n    viewModel._previousCredits.push(credit);\n  }\n}\n\nfunction updateCredits(viewModel, credits) {\n  if (defined(credits)) {\n    credits.forEach((credit) => updateCredit(viewModel, credit));\n  }\n\n  return credits;\n}\n\nfunction clearCredits(viewModel) {\n  if (\n    !viewModel._scene.isDestroyed() &&\n    !viewModel._scene.frameState.creditDisplay.isDestroyed()\n  ) {\n    viewModel._previousCredits.forEach((credit) => {\n      viewModel._scene.frameState.creditDisplay.removeStaticCredit(credit);\n    });\n  }\n\n  viewModel._previousCredits.length = 0;\n}\n\nfunction adjustSuggestionsScroll(viewModel, focusedItemIndex) {\n  const container = getElement(viewModel._viewContainer);\n  const searchResults = container.getElementsByClassName(\"search-results\")[0];\n  const listItems = container.getElementsByTagName(\"li\");\n  const element = listItems[focusedItemIndex];\n\n  if (focusedItemIndex === 0) {\n    searchResults.scrollTop = 0;\n    return;\n  }\n\n  const offsetTop = element.offsetTop;\n  if (offsetTop + element.clientHeight > searchResults.clientHeight) {\n    searchResults.scrollTop = offsetTop + element.clientHeight;\n  } else if (offsetTop < searchResults.scrollTop) {\n    searchResults.scrollTop = offsetTop;\n  }\n}\n\nfunction cancelGeocode(viewModel) {\n  if (viewModel._isSearchInProgress) {\n    viewModel._isSearchInProgress = false;\n    viewModel._wasGeocodeCancelled = true;\n  }\n}\n\nfunction hasOnlyWhitespace(string) {\n  return /^\\s*$/.test(string);\n}\n\nfunction clearSuggestions(viewModel) {\n  knockout.getObservable(viewModel, \"_suggestions\").removeAll();\n}\n\nasync function updateSearchSuggestions(viewModel) {\n  if (!viewModel.autoComplete) {\n    return;\n  }\n\n  const query = viewModel._searchText;\n\n  clearSuggestions(viewModel);\n  clearCredits(viewModel);\n\n  if (hasOnlyWhitespace(query)) {\n    return;\n  }\n\n  for (const service of viewModel._geocoderServices) {\n    const newResults = await service.geocode(query, GeocodeType.AUTOCOMPLETE);\n    viewModel._suggestions = viewModel._suggestions.concat(newResults);\n    if (newResults.length > 0) {\n      let useDefaultCredit = true;\n      newResults.forEach((result) => {\n        const credits = GeocoderService.getCreditsFromResult(result);\n        useDefaultCredit = useDefaultCredit && !defined(credits);\n        updateCredits(viewModel, credits);\n      });\n\n      // Use the service credit if there were no attributions in the results\n      if (useDefaultCredit) {\n        updateCredit(viewModel, service.credit);\n      }\n    }\n\n    if (viewModel._suggestions.length >= 5) {\n      return;\n    }\n  }\n}\n\n/**\n * A function to fly to the destination found by a successful geocode.\n * @type {Geocoder.DestinationFoundFunction}\n */\nGeocoderViewModel.flyToDestination = flyToDestination;\n\n//exposed for testing\nGeocoderViewModel._updateSearchSuggestions = updateSearchSuggestions;\nGeocoderViewModel._adjustSuggestionsScroll = adjustSuggestionsScroll;\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nGeocoderViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nGeocoderViewModel.prototype.destroy = function () {\n  clearCredits(this);\n  return destroyObject(this);\n};\nexport default GeocoderViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport HomeButtonViewModel from \"./HomeButtonViewModel.js\";\n\n/**\n * A single button widget for returning to the default camera view of the current scene.\n *\n * @alias HomeButton\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n * @param {number} [duration] The time, in seconds, it takes to complete the camera flight home.\n */\nfunction HomeButton(container, scene, duration) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const viewModel = new HomeButtonViewModel(scene, duration);\n\n  viewModel._svgPath =\n    \"M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z\";\n\n  const element = document.createElement(\"button\");\n  element.type = \"button\";\n  element.className = \"cesium-button cesium-toolbar-button cesium-home-button\";\n  element.setAttribute(\n    \"data-bind\",\n    \"\\\nattr: { title: tooltip },\\\nclick: command,\\\ncesiumSvgPath: { path: _svgPath, width: 28, height: 28 }\",\n  );\n\n  container.appendChild(element);\n\n  knockout.applyBindings(viewModel, element);\n\n  this._container = container;\n  this._viewModel = viewModel;\n  this._element = element;\n}\n\nObject.defineProperties(HomeButton.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof HomeButton.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof HomeButton.prototype\n   *\n   * @type {HomeButtonViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nHomeButton.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nHomeButton.prototype.destroy = function () {\n  knockout.cleanNode(this._element);\n  this._container.removeChild(this._element);\n\n  return destroyObject(this);\n};\nexport default HomeButton;\n","import { defined, DeveloperError } from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link HomeButton}.\n * @alias HomeButtonViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use.\n * @param {number} [duration] The duration of the camera flight in seconds.\n */\nfunction HomeButtonViewModel(scene, duration) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n  this._duration = duration;\n\n  const that = this;\n  this._command = createCommand(function () {\n    that._scene.camera.flyHome(that._duration);\n  });\n\n  /**\n   * Gets or sets the tooltip.  This property is observable.\n   *\n   * @type {string}\n   */\n  this.tooltip = \"View Home\";\n\n  knockout.track(this, [\"tooltip\"]);\n}\n\nObject.defineProperties(HomeButtonViewModel.prototype, {\n  /**\n   * Gets the scene to control.\n   * @memberof HomeButtonViewModel.prototype\n   *\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets the Command that is executed when the button is clicked.\n   * @memberof HomeButtonViewModel.prototype\n   *\n   * @type {Command}\n   */\n  command: {\n    get: function () {\n      return this._command;\n    },\n  },\n\n  /**\n   * Gets or sets the the duration of the camera flight in seconds.\n   * A value of zero causes the camera to instantly switch to home view.\n   * The duration will be computed based on the distance when undefined.\n   * @memberof HomeButtonViewModel.prototype\n   *\n   * @type {number|undefined}\n   */\n  duration: {\n    get: function () {\n      return this._duration;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (defined(value) && value < 0) {\n        throw new DeveloperError(\"value must be positive.\");\n      }\n      //>>includeEnd('debug');\n\n      this._duration = value;\n    },\n  },\n});\nexport default HomeButtonViewModel;\n","import { Check, defined } from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport I3SBuildingSceneLayerExplorerViewModel from \"./I3SBuildingSceneLayerExplorerViewModel.js\";\n\n/**\n * I3S Building Scene Layer widget\n *\n * @alias I3SBuildingSceneLayerExplorer\n * @constructor\n *\n * @param {string} containerId The DOM element ID that will contain the widget.\n * @param {I3SDataProvider} i3sProvider I3S Data provider instance.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=i3s-building-scene-layer|I3S Building Scene Layer}\n */\nfunction I3SBuildingSceneLayerExplorer(containerId, i3sProvider) {\n  const container = document.getElementById(containerId);\n\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"container\", container);\n  Check.defined(\"i3sProvider\", i3sProvider);\n  //>>includeEnd('debug');\n\n  const htmlWrapper = document.createElement(\"div\");\n  htmlWrapper.classList.add(\"cesium-viewer-i3s-explorer\");\n  htmlWrapper.innerHTML = `\n        <h3>Building explorer</h3>\n        <select\n          data-bind=\"options: topLayers, optionsText: 'name', optionsAfterRender: setOptionDisable, value: currentLayer\"\n        ></select>\n        <div id=\"bsl-wrapper\">\n          <h3>Select Level</h3>\n          <select data-bind=\"options: levels, value: currentLevel\"></select>\n          <h3>Disciplines & Categories</h3>\n          <ul class=\"layersList\" data-bind=\"foreach: sublayers\">\n            <ul class=\"layersList\" data-bind=\"foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })\">\n              <li>\n                <div class=\"li-wrapper\">\n                  <span\n                    class=\"expandItem\"\n                    data-bind=\"click: $root.expandClickHandler\"\n                    >+</span\n                  >\n                  <input\n                    type=\"checkbox\"\n                    data-bind=\"checked: visibility, valueUpdate: 'input', attr: { id: name}\"\n                  />\n                  <label data-bind=\"attr: { for: name}\">\n                    <span data-bind=\"text: name\"></span>\n                  </label>\n                </div>\n                <ul class=\"nested\" data-bind=\"attr: { id: name + '-expander'}\">\n                  <li data-bind=\"foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })\">\n                    <div class=\"li-wrapper\">\n                      <input\n                        type=\"checkbox\"\n                        data-bind=\"checked: visibility, valueUpdate: 'input', attr: { id: name}\"\n                      />\n                      <label data-bind=\"attr: { for: name}\">\n                        <span data-bind=\"text: name\"></span>\n                      </label>\n                    </div>\n                  </li>\n                </ul>\n              </li>\n            </ul>\n          </ul>\n        </div>`;\n  container.appendChild(htmlWrapper);\n\n  const viewModel = new I3SBuildingSceneLayerExplorerViewModel(i3sProvider);\n\n  knockout.track(viewModel);\n  knockout.applyBindings(viewModel, container);\n\n  if (defined(viewModel.defaultLayer)) {\n    // Select a model by default\n    viewModel.currentLayer = viewModel.defaultLayer;\n  }\n}\nexport default I3SBuildingSceneLayerExplorer;\n","import { defined } from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\nfunction expandItemsHandler(data, event) {\n  const nestedList =\n    event.currentTarget.parentElement.parentElement.querySelector(\n      `#${data.name}-expander`,\n    );\n  nestedList.classList.toggle(\"active\");\n  event.currentTarget.textContent =\n    event.currentTarget.textContent === \"+\" ? \"-\" : \"+\";\n}\n\nfunction trackSublayer(sublayer, viewModel) {\n  knockout.track(sublayer);\n\n  for (let i = 0; i < sublayer.sublayers.length; i++) {\n    trackSublayer(sublayer.sublayers[i], viewModel);\n  }\n}\n\nfunction isFullModel(layer) {\n  return layer.modelName === \"FullModel\";\n}\n\nfunction isOverview(layer) {\n  return layer.modelName === \"Overview\";\n}\n\nfunction isTopLayer(layer) {\n  return isOverview(layer) || isFullModel(layer);\n}\n\nfunction addTopLayer(layer, viewModel) {\n  if (isTopLayer(layer)) {\n    layer.visibility = false;\n    for (let i = 0; i < layer.sublayers.length; i++) {\n      layer.sublayers[i].visibility = true;\n    }\n\n    const topLayer = {\n      name: layer.name,\n      modelName: layer.modelName,\n      disable: knockout.observable(false),\n      index: viewModel.sublayers.length,\n    };\n    viewModel.topLayers.push(topLayer);\n    viewModel.sublayers.push(layer);\n    return topLayer;\n  }\n}\n\nfunction handleTopLayerSelector(layer, viewModel) {\n  if (isTopLayer(layer)) {\n    viewModel.sublayers.forEach((elem) => (elem.visibility = false));\n    viewModel.sublayers[layer.index].visibility = true;\n    const bsl = document.getElementById(\"bsl-wrapper\");\n    if (isFullModel(layer)) {\n      viewModel.currentLevel = viewModel.selectedLevel;\n      bsl.style.display = \"block\";\n    } else {\n      viewModel.selectedLevel = viewModel.currentLevel;\n      viewModel.currentLevel = \"All\";\n      bsl.style.display = \"none\";\n    }\n  }\n}\n\nasync function setLevels(i3sProvider, levels) {\n  try {\n    const attributes = i3sProvider.getAttributeNames();\n    for (let index = 0; index < attributes.length; index++) {\n      if (attributes[index] === \"BldgLevel\") {\n        const values = i3sProvider.getAttributeValues(attributes[index]);\n        for (let i = 0; i < values.length; i++) {\n          levels.push(values[i]);\n        }\n      }\n    }\n\n    levels.sort((a, b) => a - b);\n    levels.unshift(\"All\");\n  } catch (error) {\n    console.log(`There was an error getting attributes: ${error}`);\n  }\n}\n\n/**\n * The view model for {@link I3SBuildingSceneLayerExplorer}.\n * @alias I3sBslExplorerViewModel\n * @constructor\n *\n * @param {I3SDataProvider} i3sProvider I3S Data provider instance.\n */\nfunction I3SBuildingSceneLayerExplorerViewModel(i3sProvider) {\n  const that = this;\n  this.levels = [];\n  this.viewModel = {\n    sublayers: [],\n    levels: this.levels,\n    currentLevel: knockout.observable(),\n    selectedLevel: \"All\",\n    topLayers: [\n      {\n        name: \"Select a layer to explore...\",\n        disable: knockout.observable(true),\n        index: -1,\n      },\n    ],\n    currentLayer: knockout.observable(),\n    expandClickHandler: expandItemsHandler,\n    setOptionDisable: function (option, item) {\n      knockout.applyBindingsToNode(option, { disable: item.disable }, item);\n    },\n    defaultLayer: undefined,\n  };\n\n  // Handling change of a layer for exploring\n  this.viewModel.currentLayer.subscribe(function (layer) {\n    handleTopLayerSelector(layer, that.viewModel);\n  });\n\n  // Setting a sublayers tree to the viewModel\n  const sublayers = i3sProvider.sublayers;\n  for (let i = 0; i < sublayers.length; i++) {\n    trackSublayer(sublayers[i], this.viewModel);\n    const topLayer = addTopLayer(sublayers[i], this.viewModel);\n    if (\n      defined(topLayer) &&\n      (isOverview(topLayer) ||\n        (!defined(this.viewModel.defaultLayer) && isFullModel(topLayer)))\n    ) {\n      this.viewModel.defaultLayer = topLayer;\n    }\n  }\n  // There is no Full Model and/or Overview\n  if (this.viewModel.topLayers.length === 1 && sublayers.length > 0) {\n    i3sProvider.show = false;\n    const fullModel = {\n      name: \"Full Model\",\n      modelName: \"FullModel\",\n      visibility: i3sProvider.show,\n      sublayers: i3sProvider.sublayers,\n    };\n    this.viewModel.defaultLayer = addTopLayer(fullModel, this.viewModel);\n    this.viewModel.currentLayer.subscribe(function (layer) {\n      i3sProvider.show = isFullModel(layer);\n    });\n  } else if (this.viewModel.topLayers.length === 1) {\n    this.viewModel.topLayers[0].name = \"Building layers not found\";\n  }\n\n  // Setting levels to the viewModel\n  setLevels(i3sProvider, this.levels);\n\n  // Filtering by levels\n  this.viewModel.currentLevel.subscribe(function (newValue) {\n    if (newValue !== \"All\") {\n      i3sProvider.filterByAttributes([\n        {\n          name: \"BldgLevel\",\n          values: [newValue],\n        },\n      ]);\n    } else {\n      i3sProvider.filterByAttributes();\n    }\n  });\n\n  return this.viewModel;\n}\n\nexport default I3SBuildingSceneLayerExplorerViewModel;\n","import {\n  buildModuleUrl,\n  Check,\n  Color,\n  defined,\n  destroyObject,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport subscribeAndEvaluate from \"../subscribeAndEvaluate.js\";\nimport InfoBoxViewModel from \"./InfoBoxViewModel.js\";\n\n/**\n * A widget for displaying information or a description.\n *\n * @alias InfoBox\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n */\nfunction InfoBox(container) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"container\", container);\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const infoElement = document.createElement(\"div\");\n  infoElement.className = \"cesium-infoBox\";\n  infoElement.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-infoBox-visible\" : showInfo, \"cesium-infoBox-bodyless\" : _bodyless }',\n  );\n  container.appendChild(infoElement);\n\n  const titleElement = document.createElement(\"div\");\n  titleElement.className = \"cesium-infoBox-title\";\n  titleElement.setAttribute(\"data-bind\", \"text: titleText\");\n  infoElement.appendChild(titleElement);\n\n  const cameraElement = document.createElement(\"button\");\n  cameraElement.type = \"button\";\n  cameraElement.className = \"cesium-button cesium-infoBox-camera\";\n  cameraElement.setAttribute(\n    \"data-bind\",\n    '\\\nattr: { title: \"Focus camera on object\" },\\\nclick: function () { cameraClicked.raiseEvent(this); },\\\nenable: enableCamera,\\\ncesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }',\n  );\n  infoElement.appendChild(cameraElement);\n\n  const closeElement = document.createElement(\"button\");\n  closeElement.type = \"button\";\n  closeElement.className = \"cesium-infoBox-close\";\n  closeElement.setAttribute(\n    \"data-bind\",\n    \"\\\nclick: function () { closeClicked.raiseEvent(this); }\",\n  );\n  closeElement.innerHTML = \"&times;\";\n  infoElement.appendChild(closeElement);\n\n  const frame = document.createElement(\"iframe\");\n  frame.className = \"cesium-infoBox-iframe\";\n  frame.setAttribute(\"sandbox\", \"allow-same-origin allow-popups allow-forms\"); //allow-pointer-lock allow-scripts allow-top-navigation\n  frame.setAttribute(\n    \"data-bind\",\n    \"style : { maxHeight : maxHeightOffset(40) }\",\n  );\n  frame.setAttribute(\"allowfullscreen\", true);\n  infoElement.appendChild(frame);\n\n  const viewModel = new InfoBoxViewModel();\n  knockout.applyBindings(viewModel, infoElement);\n\n  this._container = container;\n  this._element = infoElement;\n  this._frame = frame;\n  this._viewModel = viewModel;\n  this._descriptionSubscription = undefined;\n\n  const that = this;\n  //We can't actually add anything into the frame until the load event is fired\n  frame.addEventListener(\"load\", function () {\n    const frameDocument = frame.contentDocument;\n\n    //We inject default css into the content iframe,\n    //end users can remove it or add their own via the exposed frame property.\n    const cssLink = frameDocument.createElement(\"link\");\n    cssLink.href = buildModuleUrl(\"Widgets/InfoBox/InfoBoxDescription.css\");\n    cssLink.rel = \"stylesheet\";\n    cssLink.type = \"text/css\";\n\n    //div to use for description content.\n    const frameContent = frameDocument.createElement(\"div\");\n    frameContent.className = \"cesium-infoBox-description\";\n\n    frameDocument.head.appendChild(cssLink);\n    frameDocument.body.appendChild(frameContent);\n\n    //We manually subscribe to the description event rather than through a binding for two reasons.\n    //1. It's an easy way to ensure order of operation so that we can adjust the height.\n    //2. Knockout does not bind to elements inside of an iFrame, so we would have to apply a second binding\n    //   model anyway.\n    that._descriptionSubscription = subscribeAndEvaluate(\n      viewModel,\n      \"description\",\n      function (value) {\n        // Set the frame to small height, force vertical scroll bar to appear, and text to wrap accordingly.\n        frame.style.height = \"5px\";\n        frameContent.innerHTML = value;\n\n        //If the snippet is a single element, then use its background\n        //color for the body of the InfoBox. This makes the padding match\n        //the content and produces much nicer results.\n        let background = null;\n        const firstElementChild = frameContent.firstElementChild;\n        if (\n          firstElementChild !== null &&\n          frameContent.childNodes.length === 1\n        ) {\n          const style = window.getComputedStyle(firstElementChild);\n          if (style !== null) {\n            const backgroundColor = style[\"background-color\"];\n            const color = Color.fromCssColorString(backgroundColor);\n            if (defined(color) && color.alpha !== 0) {\n              background = style[\"background-color\"];\n            }\n          }\n        }\n        infoElement.style[\"background-color\"] = background;\n\n        // Measure and set the new custom height, based on text wrapped above.\n        const height = frameContent.getBoundingClientRect().height;\n        frame.style.height = `${height}px`;\n      },\n    );\n  });\n\n  //Chrome does not send the load event unless we explicitly set a src\n  frame.setAttribute(\"src\", \"about:blank\");\n}\n\nObject.defineProperties(InfoBox.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof InfoBox.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof InfoBox.prototype\n   *\n   * @type {InfoBoxViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n\n  /**\n   * Gets the iframe used to display the description.\n   * @memberof InfoBox.prototype\n   *\n   * @type {HTMLIFrameElement}\n   */\n  frame: {\n    get: function () {\n      return this._frame;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nInfoBox.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nInfoBox.prototype.destroy = function () {\n  const container = this._container;\n  knockout.cleanNode(this._element);\n  container.removeChild(this._element);\n\n  if (defined(this._descriptionSubscription)) {\n    this._descriptionSubscription.dispose();\n  }\n\n  return destroyObject(this);\n};\nexport default InfoBox;\n","import { defined, Event } from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\nconst cameraEnabledPath =\n  \"M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z\";\nconst cameraDisabledPath =\n  \"M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z\";\n\n/**\n * The view model for {@link InfoBox}.\n * @alias InfoBoxViewModel\n * @constructor\n */\nfunction InfoBoxViewModel() {\n  this._cameraClicked = new Event();\n  this._closeClicked = new Event();\n\n  /**\n   * Gets or sets the maximum height of the info box in pixels.  This property is observable.\n   * @type {number}\n   */\n  this.maxHeight = 500;\n\n  /**\n   * Gets or sets whether the camera tracking icon is enabled.\n   * @type {boolean}\n   */\n  this.enableCamera = false;\n\n  /**\n   * Gets or sets the status of current camera tracking of the selected object.\n   * @type {boolean}\n   */\n  this.isCameraTracking = false;\n\n  /**\n   * Gets or sets the visibility of the info box.\n   * @type {boolean}\n   */\n  this.showInfo = false;\n\n  /**\n   * Gets or sets the title text in the info box.\n   * @type {string}\n   */\n  this.titleText = \"\";\n\n  /**\n   * Gets or sets the description HTML for the info box.\n   * @type {string}\n   */\n  this.description = \"\";\n\n  knockout.track(this, [\n    \"showInfo\",\n    \"titleText\",\n    \"description\",\n    \"maxHeight\",\n    \"enableCamera\",\n    \"isCameraTracking\",\n  ]);\n\n  this._loadingIndicatorHtml =\n    '<div class=\"cesium-infoBox-loadingContainer\"><span class=\"cesium-infoBox-loading\"></span></div>';\n\n  /**\n   * Gets the SVG path of the camera icon, which can change to be \"crossed out\" or not.\n   * @type {string}\n   */\n  this.cameraIconPath = undefined;\n  knockout.defineProperty(this, \"cameraIconPath\", {\n    get: function () {\n      return !this.enableCamera || this.isCameraTracking\n        ? cameraDisabledPath\n        : cameraEnabledPath;\n    },\n  });\n\n  knockout.defineProperty(this, \"_bodyless\", {\n    get: function () {\n      return !defined(this.description) || this.description.length === 0;\n    },\n  });\n}\n\n/**\n * Gets the maximum height of sections within the info box, minus an offset, in CSS-ready form.\n * @param {number} offset The offset in pixels.\n * @returns {string}\n */\nInfoBoxViewModel.prototype.maxHeightOffset = function (offset) {\n  return `${this.maxHeight - offset}px`;\n};\n\nObject.defineProperties(InfoBoxViewModel.prototype, {\n  /**\n   * Gets an {@link Event} that is fired when the user clicks the camera icon.\n   * @memberof InfoBoxViewModel.prototype\n   * @type {Event}\n   */\n  cameraClicked: {\n    get: function () {\n      return this._cameraClicked;\n    },\n  },\n  /**\n   * Gets an {@link Event} that is fired when the user closes the info box.\n   * @memberof InfoBoxViewModel.prototype\n   * @type {Event}\n   */\n  closeClicked: {\n    get: function () {\n      return this._closeClicked;\n    },\n  },\n});\nexport default InfoBoxViewModel;\n","import { Check, defined } from \"@cesium/engine\";\n\n/**\n * A static class with helper functions used by CesiumInspector, Cesium3DTilesInspector, and VoxelInspector\n * @private\n */\nconst InspectorShared = {};\n\n/**\n * Creates a checkbox component\n * @param {string} labelText The text to display in the checkbox label\n * @param {string} checkedBinding The name of the variable used for checked binding\n * @param {string} [enableBinding] The name of the variable used for enable binding\n * @return {Element}\n */\nInspectorShared.createCheckbox = function (\n  labelText,\n  checkedBinding,\n  enableBinding,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"labelText\", labelText);\n  Check.typeOf.string(\"checkedBinding\", checkedBinding);\n  //>>includeEnd('debug');\n  const checkboxContainer = document.createElement(\"div\");\n  const checkboxLabel = document.createElement(\"label\");\n  const checkboxInput = document.createElement(\"input\");\n  checkboxInput.type = \"checkbox\";\n\n  let binding = `checked: ${checkedBinding}`;\n  if (defined(enableBinding)) {\n    binding += `, enable: ${enableBinding}`;\n  }\n  checkboxInput.setAttribute(\"data-bind\", binding);\n  checkboxLabel.appendChild(checkboxInput);\n  checkboxLabel.appendChild(document.createTextNode(labelText));\n  checkboxContainer.appendChild(checkboxLabel);\n  return checkboxContainer;\n};\n\n/**\n * Creates a section element\n * @param {Element} panel The parent element\n * @param {string} headerText The text to display at the top of the section\n * @param {string} sectionVisibleBinding The name of the variable used for visible binding\n * @param {string} toggleSectionVisibilityBinding The name of the function used to toggle visibility\n * @return {Element}\n */\nInspectorShared.createSection = function (\n  panel,\n  headerText,\n  sectionVisibleBinding,\n  toggleSectionVisibilityBinding,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"panel\", panel);\n  Check.typeOf.string(\"headerText\", headerText);\n  Check.typeOf.string(\"sectionVisibleBinding\", sectionVisibleBinding);\n  Check.typeOf.string(\n    \"toggleSectionVisibilityBinding\",\n    toggleSectionVisibilityBinding,\n  );\n  //>>includeEnd('debug');\n  const section = document.createElement(\"div\");\n  section.className = \"cesium-cesiumInspector-section\";\n  section.setAttribute(\n    \"data-bind\",\n    `css: { \"cesium-cesiumInspector-section-collapsed\": !${sectionVisibleBinding} }`,\n  );\n  panel.appendChild(section);\n\n  const sectionHeader = document.createElement(\"h3\");\n  sectionHeader.className = \"cesium-cesiumInspector-sectionHeader\";\n  sectionHeader.appendChild(document.createTextNode(headerText));\n  sectionHeader.setAttribute(\n    \"data-bind\",\n    `click: ${toggleSectionVisibilityBinding}`,\n  );\n  section.appendChild(sectionHeader);\n\n  const sectionContent = document.createElement(\"div\");\n  sectionContent.className = \"cesium-cesiumInspector-sectionContent\";\n  section.appendChild(sectionContent);\n  return sectionContent;\n};\n\n/**\n * Creates a range input\n * @param {string} rangeText The text to display\n * @param {string} sliderValueBinding The name of the variable used for slider value binding\n * @param {number} min The minimum value\n * @param {number} max The maximum value\n * @param {number} [step] The step size. Defaults to \"any\".\n * @param {string} [inputValueBinding] The name of the variable used for input value binding\n * @return {Element}\n */\nInspectorShared.createRangeInput = function (\n  rangeText,\n  sliderValueBinding,\n  min,\n  max,\n  step,\n  inputValueBinding,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"rangeText\", rangeText);\n  Check.typeOf.string(\"sliderValueBinding\", sliderValueBinding);\n  Check.typeOf.number(\"min\", min);\n  Check.typeOf.number(\"max\", max);\n  //>>includeEnd('debug');\n\n  inputValueBinding = inputValueBinding ?? sliderValueBinding;\n  const input = document.createElement(\"input\");\n  input.setAttribute(\"data-bind\", `value: ${inputValueBinding}`);\n  input.type = \"number\";\n\n  const slider = document.createElement(\"input\");\n  slider.type = \"range\";\n  slider.min = min;\n  slider.max = max;\n  slider.step = step ?? \"any\";\n  slider.setAttribute(\n    \"data-bind\",\n    `valueUpdate: \"input\", value: ${sliderValueBinding}`,\n  );\n\n  const wrapper = document.createElement(\"div\");\n  wrapper.appendChild(slider);\n\n  const container = document.createElement(\"div\");\n  container.className = \"cesium-cesiumInspector-slider\";\n  container.appendChild(document.createTextNode(rangeText));\n  container.appendChild(input);\n  container.appendChild(wrapper);\n\n  return container;\n};\n\n/**\n * Creates a range input\n * @param {string} rangeText The text to display\n * @param {string} sliderValueBinding The name of the variable used for slider value binding\n * @param {number} [step] The step size. Defaults to \"any\".\n * @param {string} [inputValueBinding] The name of the variable used for input value binding\n * @return {Element}\n */\nInspectorShared.createRangeInputWithDynamicMinMax = function (\n  rangeText,\n  sliderValueBinding,\n  step,\n  inputValueBinding,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"rangeText\", rangeText);\n  Check.typeOf.string(\"sliderValueBinding\", sliderValueBinding);\n  //>>includeEnd('debug');\n\n  inputValueBinding = inputValueBinding ?? sliderValueBinding;\n  const input = document.createElement(\"input\");\n  input.setAttribute(\"data-bind\", `value: ${inputValueBinding}`);\n  input.type = \"number\";\n\n  const slider = document.createElement(\"input\");\n  slider.type = \"range\";\n  slider.step = step ?? \"any\";\n  slider.setAttribute(\n    \"data-bind\",\n    `valueUpdate: \"input\", value: ${sliderValueBinding}, attr: { min: ${sliderValueBinding}Min, max: ${sliderValueBinding}Max }`,\n  );\n\n  const wrapper = document.createElement(\"div\");\n  wrapper.appendChild(slider);\n\n  const container = document.createElement(\"div\");\n  container.className = \"cesium-cesiumInspector-slider\";\n  container.appendChild(document.createTextNode(rangeText));\n  container.appendChild(input);\n  container.appendChild(wrapper);\n\n  return container;\n};\n\n/**\n * Creates a button component\n * @param {string} buttonText The button text\n * @param {string} clickedBinding The name of the variable used for clicked binding\n * @param {string} [activeBinding] The name of the variable used for active binding\n * @return {Element}\n */\nInspectorShared.createButton = function (\n  buttonText,\n  clickedBinding,\n  activeBinding,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.string(\"buttonText\", buttonText);\n  Check.typeOf.string(\"clickedBinding\", clickedBinding);\n  //>>includeEnd('debug');\n\n  const button = document.createElement(\"button\");\n  button.type = \"button\";\n  button.textContent = buttonText;\n  button.className = \"cesium-cesiumInspector-pickButton\";\n  let binding = `click: ${clickedBinding}`;\n  if (defined(activeBinding)) {\n    binding += `, css: {\"cesium-cesiumInspector-pickButtonHighlight\" : ${activeBinding}}`;\n  }\n  button.setAttribute(\"data-bind\", binding);\n\n  return button;\n};\n\nexport default InspectorShared;\n","import {\n  buildModuleUrl,\n  defined,\n  destroyObject,\n  DeveloperError,\n  FeatureDetection,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport NavigationHelpButtonViewModel from \"./NavigationHelpButtonViewModel.js\";\n\n/**\n * <p>The NavigationHelpButton is a single button widget for displaying instructions for\n * navigating the globe with the mouse.</p><p style=\"clear: both;\"></p><br/>\n *\n * @alias NavigationHelpButton\n * @constructor\n *\n * @param {object} options Object with the following properties:\n * @param {Element|string} options.container The DOM element or ID that will contain the widget.\n * @param {boolean} [options.instructionsInitiallyVisible=false] True if the navigation instructions should initially be visible; otherwise, false.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @example\n * // In HTML head, include a link to the NavigationHelpButton.css stylesheet,\n * // and in the body, include: <div id=\"navigationHelpButtonContainer\"></div>\n *\n * const navigationHelpButton = new Cesium.NavigationHelpButton({\n *     container : 'navigationHelpButtonContainer'\n * });\n */\nfunction NavigationHelpButton(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.container)) {\n    throw new DeveloperError(\"options.container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const container = getElement(options.container);\n\n  const viewModel = new NavigationHelpButtonViewModel();\n\n  const showInsructionsDefault = options.instructionsInitiallyVisible ?? false;\n  viewModel.showInstructions = showInsructionsDefault;\n\n  viewModel._svgPath =\n    \"M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z\";\n\n  const wrapper = document.createElement(\"span\");\n  wrapper.className = \"cesium-navigationHelpButton-wrapper\";\n  container.appendChild(wrapper);\n\n  const button = document.createElement(\"button\");\n  button.type = \"button\";\n  button.className =\n    \"cesium-button cesium-toolbar-button cesium-navigation-help-button\";\n  button.setAttribute(\n    \"data-bind\",\n    \"\\\nattr: { title: tooltip },\\\nclick: command,\\\ncesiumSvgPath: { path: _svgPath, width: 32, height: 32 }\",\n  );\n  wrapper.appendChild(button);\n\n  const instructionContainer = document.createElement(\"div\");\n  instructionContainer.className = \"cesium-navigation-help\";\n  instructionContainer.setAttribute(\n    \"data-bind\",\n    'css: { \"cesium-navigation-help-visible\" : showInstructions}',\n  );\n  wrapper.appendChild(instructionContainer);\n\n  const mouseButton = document.createElement(\"button\");\n  mouseButton.type = \"button\";\n  mouseButton.className =\n    \"cesium-navigation-button cesium-navigation-button-left\";\n  mouseButton.setAttribute(\n    \"data-bind\",\n    'click: showClick, css: {\"cesium-navigation-button-selected\": !_touch, \"cesium-navigation-button-unselected\": _touch}',\n  );\n  const mouseIcon = document.createElement(\"img\");\n  mouseIcon.src = buildModuleUrl(\"Widgets/Images/NavigationHelp/Mouse.svg\");\n  mouseIcon.className = \"cesium-navigation-button-icon\";\n  mouseIcon.style.width = \"25px\";\n  mouseIcon.style.height = \"25px\";\n  mouseButton.appendChild(mouseIcon);\n  mouseButton.appendChild(document.createTextNode(\"Mouse\"));\n\n  const touchButton = document.createElement(\"button\");\n  touchButton.type = \"button\";\n  touchButton.className =\n    \"cesium-navigation-button cesium-navigation-button-right\";\n  touchButton.setAttribute(\n    \"data-bind\",\n    'click: showTouch, css: {\"cesium-navigation-button-selected\": _touch, \"cesium-navigation-button-unselected\": !_touch}',\n  );\n  const touchIcon = document.createElement(\"img\");\n  touchIcon.src = buildModuleUrl(\"Widgets/Images/NavigationHelp/Touch.svg\");\n  touchIcon.className = \"cesium-navigation-button-icon\";\n  touchIcon.style.width = \"25px\";\n  touchIcon.style.height = \"25px\";\n  touchButton.appendChild(touchIcon);\n  touchButton.appendChild(document.createTextNode(\"Touch\"));\n\n  instructionContainer.appendChild(mouseButton);\n  instructionContainer.appendChild(touchButton);\n\n  const clickInstructions = document.createElement(\"div\");\n  clickInstructions.className =\n    \"cesium-click-navigation-help cesium-navigation-help-instructions\";\n  clickInstructions.setAttribute(\n    \"data-bind\",\n    'css: { \"cesium-click-navigation-help-visible\" : !_touch}',\n  );\n  clickInstructions.innerHTML = `\\\n            <table>\\\n                <tr>\\\n                    <td><img src=\"${buildModuleUrl(\n                      \"Widgets/Images/NavigationHelp/MouseLeft.svg\",\n                    )}\" width=\"48\" height=\"48\" /></td>\\\n                    <td>\\\n                        <div class=\"cesium-navigation-help-pan\">Pan view</div>\\\n                        <div class=\"cesium-navigation-help-details\">Left click + drag</div>\\\n                    </td>\\\n                </tr>\\\n                <tr>\\\n                    <td><img src=\"${buildModuleUrl(\n                      \"Widgets/Images/NavigationHelp/MouseRight.svg\",\n                    )}\" width=\"48\" height=\"48\" /></td>\\\n                    <td>\\\n                        <div class=\"cesium-navigation-help-zoom\">Zoom view</div>\\\n                        <div class=\"cesium-navigation-help-details\">Right click + drag, or</div>\\\n                        <div class=\"cesium-navigation-help-details\">Mouse wheel scroll</div>\\\n                    </td>\\\n                </tr>\\\n                <tr>\\\n                    <td><img src=\"${buildModuleUrl(\n                      \"Widgets/Images/NavigationHelp/MouseMiddle.svg\",\n                    )}\" width=\"48\" height=\"48\" /></td>\\\n                    <td>\\\n                        <div class=\"cesium-navigation-help-rotate\">Rotate view</div>\\\n                        <div class=\"cesium-navigation-help-details\">Middle click + drag, or</div>\\\n                        <div class=\"cesium-navigation-help-details\">CTRL + Left/Right click + drag</div>\\\n                    </td>\\\n                </tr>\\\n            </table>`;\n\n  instructionContainer.appendChild(clickInstructions);\n\n  const touchInstructions = document.createElement(\"div\");\n  touchInstructions.className =\n    \"cesium-touch-navigation-help cesium-navigation-help-instructions\";\n  touchInstructions.setAttribute(\n    \"data-bind\",\n    'css: { \"cesium-touch-navigation-help-visible\" : _touch}',\n  );\n  touchInstructions.innerHTML = `\\\n            <table>\\\n                <tr>\\\n                    <td><img src=\"${buildModuleUrl(\n                      \"Widgets/Images/NavigationHelp/TouchDrag.svg\",\n                    )}\" width=\"70\" height=\"48\" /></td>\\\n                    <td>\\\n                        <div class=\"cesium-navigation-help-pan\">Pan view</div>\\\n                        <div class=\"cesium-navigation-help-details\">One finger drag</div>\\\n                    </td>\\\n                </tr>\\\n                <tr>\\\n                    <td><img src=\"${buildModuleUrl(\n                      \"Widgets/Images/NavigationHelp/TouchZoom.svg\",\n                    )}\" width=\"70\" height=\"48\" /></td>\\\n                    <td>\\\n                        <div class=\"cesium-navigation-help-zoom\">Zoom view</div>\\\n                        <div class=\"cesium-navigation-help-details\">Two finger pinch</div>\\\n                    </td>\\\n                </tr>\\\n                <tr>\\\n                    <td><img src=\"${buildModuleUrl(\n                      \"Widgets/Images/NavigationHelp/TouchTilt.svg\",\n                    )}\" width=\"70\" height=\"48\" /></td>\\\n                    <td>\\\n                        <div class=\"cesium-navigation-help-rotate\">Tilt view</div>\\\n                        <div class=\"cesium-navigation-help-details\">Two finger drag, same direction</div>\\\n                    </td>\\\n                </tr>\\\n                <tr>\\\n                    <td><img src=\"${buildModuleUrl(\n                      \"Widgets/Images/NavigationHelp/TouchRotate.svg\",\n                    )}\" width=\"70\" height=\"48\" /></td>\\\n                    <td>\\\n                        <div class=\"cesium-navigation-help-tilt\">Rotate view</div>\\\n                        <div class=\"cesium-navigation-help-details\">Two finger drag, opposite direction</div>\\\n                    </td>\\\n                </tr>\\\n            </table>`;\n\n  instructionContainer.appendChild(touchInstructions);\n\n  knockout.applyBindings(viewModel, wrapper);\n\n  this._container = container;\n  this._viewModel = viewModel;\n  this._wrapper = wrapper;\n\n  this._closeInstructions = function (e) {\n    if (!wrapper.contains(e.target)) {\n      viewModel.showInstructions = false;\n    }\n  };\n\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.addEventListener(\"pointerdown\", this._closeInstructions, true);\n  } else {\n    document.addEventListener(\"mousedown\", this._closeInstructions, true);\n    document.addEventListener(\"touchstart\", this._closeInstructions, true);\n  }\n}\n\nObject.defineProperties(NavigationHelpButton.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof NavigationHelpButton.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof NavigationHelpButton.prototype\n   *\n   * @type {NavigationHelpButtonViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nNavigationHelpButton.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nNavigationHelpButton.prototype.destroy = function () {\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.removeEventListener(\"pointerdown\", this._closeInstructions, true);\n  } else {\n    document.removeEventListener(\"mousedown\", this._closeInstructions, true);\n    document.removeEventListener(\"touchstart\", this._closeInstructions, true);\n  }\n\n  knockout.cleanNode(this._wrapper);\n  this._container.removeChild(this._wrapper);\n\n  return destroyObject(this);\n};\nexport default NavigationHelpButton;\n","import knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link NavigationHelpButton}.\n * @alias NavigationHelpButtonViewModel\n * @constructor\n */\nfunction NavigationHelpButtonViewModel() {\n  /**\n   * Gets or sets whether the instructions are currently shown.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.showInstructions = false;\n\n  const that = this;\n  this._command = createCommand(function () {\n    that.showInstructions = !that.showInstructions;\n  });\n  this._showClick = createCommand(function () {\n    that._touch = false;\n  });\n  this._showTouch = createCommand(function () {\n    that._touch = true;\n  });\n\n  this._touch = false;\n\n  /**\n   * Gets or sets the tooltip.  This property is observable.\n   *\n   * @type {string}\n   */\n  this.tooltip = \"Navigation Instructions\";\n\n  knockout.track(this, [\"tooltip\", \"showInstructions\", \"_touch\"]);\n}\n\nObject.defineProperties(NavigationHelpButtonViewModel.prototype, {\n  /**\n   * Gets the Command that is executed when the button is clicked.\n   * @memberof NavigationHelpButtonViewModel.prototype\n   *\n   * @type {Command}\n   */\n  command: {\n    get: function () {\n      return this._command;\n    },\n  },\n\n  /**\n   * Gets the Command that is executed when the mouse instructions should be shown.\n   * @memberof NavigationHelpButtonViewModel.prototype\n   *\n   * @type {Command}\n   */\n  showClick: {\n    get: function () {\n      return this._showClick;\n    },\n  },\n\n  /**\n   * Gets the Command that is executed when the touch instructions should be shown.\n   * @memberof NavigationHelpButtonViewModel.prototype\n   *\n   * @type {Command}\n   */\n  showTouch: {\n    get: function () {\n      return this._showTouch;\n    },\n  },\n});\nexport default NavigationHelpButtonViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport PerformanceWatchdogViewModel from \"./PerformanceWatchdogViewModel.js\";\n\n/**\n * Monitors performance of the application and displays a message if poor performance is detected.\n *\n * @alias PerformanceWatchdog\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Element|string} options.container The DOM element or ID that will contain the widget.\n * @param {Scene} options.scene The {@link Scene} for which to monitor performance.\n * @param {string} [options.lowFrameRateMessage='This application appears to be performing poorly on your system.  Please try using a different web browser or updating your video drivers.'] The\n *        message to display when a low frame rate is detected.  The message is interpeted as HTML, so make sure\n *        it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks.\n */\nfunction PerformanceWatchdog(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.container)) {\n    throw new DeveloperError(\"options.container is required.\");\n  }\n  if (!defined(options.scene)) {\n    throw new DeveloperError(\"options.scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const container = getElement(options.container);\n\n  const viewModel = new PerformanceWatchdogViewModel(options);\n\n  const element = document.createElement(\"div\");\n  element.className = \"cesium-performance-watchdog-message-area\";\n  element.setAttribute(\"data-bind\", \"visible: showingLowFrameRateMessage\");\n\n  const dismissButton = document.createElement(\"button\");\n  dismissButton.setAttribute(\"type\", \"button\");\n  dismissButton.className = \"cesium-performance-watchdog-message-dismiss\";\n  dismissButton.innerHTML = \"&times;\";\n  dismissButton.setAttribute(\"data-bind\", \"click: dismissMessage\");\n  element.appendChild(dismissButton);\n\n  const message = document.createElement(\"div\");\n  message.className = \"cesium-performance-watchdog-message\";\n  message.setAttribute(\"data-bind\", \"html: lowFrameRateMessage\");\n  element.appendChild(message);\n\n  container.appendChild(element);\n\n  knockout.applyBindings(viewModel, element);\n\n  this._container = container;\n  this._viewModel = viewModel;\n  this._element = element;\n}\n\nObject.defineProperties(PerformanceWatchdog.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof PerformanceWatchdog.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof PerformanceWatchdog.prototype\n   *\n   * @type {PerformanceWatchdogViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @memberof PerformanceWatchdog\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nPerformanceWatchdog.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n * @memberof PerformanceWatchdog\n */\nPerformanceWatchdog.prototype.destroy = function () {\n  this._viewModel.destroy();\n  knockout.cleanNode(this._element);\n  this._container.removeChild(this._element);\n\n  return destroyObject(this);\n};\nexport default PerformanceWatchdog;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  FrameRateMonitor,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link PerformanceWatchdog}.\n *\n * @alias PerformanceWatchdogViewModel\n * @constructor\n *\n * @param {object} [options] Object with the following properties:\n * @param {Scene} options.scene The Scene instance for which to monitor performance.\n * @param {string} [options.lowFrameRateMessage='This application appears to be performing poorly on your system.  Please try using a different web browser or updating your video drivers.'] The\n *        message to display when a low frame rate is detected.  The message is interpeted as HTML, so make sure\n *        it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks.\n */\nfunction PerformanceWatchdogViewModel(options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(options) || !defined(options.scene)) {\n    throw new DeveloperError(\"options.scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._scene = options.scene;\n\n  /**\n   * Gets or sets the message to display when a low frame rate is detected.  This string will be interpreted as HTML.\n   * @type {string}\n   */\n  this.lowFrameRateMessage =\n    options.lowFrameRateMessage ??\n    \"This application appears to be performing poorly on your system.  Please try using a different web browser or updating your video drivers.\";\n\n  /**\n   * Gets or sets a value indicating whether the low frame rate message has previously been dismissed by the user.  If it has\n   * been dismissed, the message will not be redisplayed, no matter the frame rate.\n   * @type {boolean}\n   */\n  this.lowFrameRateMessageDismissed = false;\n\n  /**\n   * Gets or sets a value indicating whether the low frame rate message is currently being displayed.\n   * @type {boolean}\n   */\n  this.showingLowFrameRateMessage = false;\n\n  knockout.track(this, [\n    \"lowFrameRateMessage\",\n    \"lowFrameRateMessageDismissed\",\n    \"showingLowFrameRateMessage\",\n  ]);\n\n  const that = this;\n  this._dismissMessage = createCommand(function () {\n    that.showingLowFrameRateMessage = false;\n    that.lowFrameRateMessageDismissed = true;\n  });\n\n  const monitor = FrameRateMonitor.fromScene(options.scene);\n\n  this._unsubscribeLowFrameRate = monitor.lowFrameRate.addEventListener(\n    function () {\n      if (!that.lowFrameRateMessageDismissed) {\n        that.showingLowFrameRateMessage = true;\n      }\n    },\n  );\n\n  this._unsubscribeNominalFrameRate = monitor.nominalFrameRate.addEventListener(\n    function () {\n      that.showingLowFrameRateMessage = false;\n    },\n  );\n}\n\nObject.defineProperties(PerformanceWatchdogViewModel.prototype, {\n  /**\n   * Gets the {@link Scene} instance for which to monitor performance.\n   * @memberof PerformanceWatchdogViewModel.prototype\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets a command that dismisses the low frame rate message.  Once it is dismissed, the message\n   * will not be redisplayed.\n   * @memberof PerformanceWatchdogViewModel.prototype\n   * @type {Command}\n   */\n  dismissMessage: {\n    get: function () {\n      return this._dismissMessage;\n    },\n  },\n});\n\nPerformanceWatchdogViewModel.prototype.destroy = function () {\n  this._unsubscribeLowFrameRate();\n  this._unsubscribeNominalFrameRate();\n\n  return destroyObject(this);\n};\nexport default PerformanceWatchdogViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  FeatureDetection,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport ProjectionPickerViewModel from \"./ProjectionPickerViewModel.js\";\n\nconst perspectivePath =\n  \"M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z\";\nconst orthographicPath =\n  \"m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z\";\n\n/**\n * The ProjectionPicker is a single button widget for switching between perspective and orthographic projections.\n *\n * @alias ProjectionPicker\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @example\n * // In HTML head, include a link to the ProjectionPicker.css stylesheet,\n * // and in the body, include: <div id=\"projectionPickerContainer\"></div>\n * // Note: This code assumes you already have a Scene instance.\n *\n * const projectionPicker = new Cesium.ProjectionPicker('projectionPickerContainer', scene);\n */\nfunction ProjectionPicker(container, scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const viewModel = new ProjectionPickerViewModel(scene);\n\n  viewModel._perspectivePath = perspectivePath;\n  viewModel._orthographicPath = orthographicPath;\n\n  const wrapper = document.createElement(\"span\");\n  wrapper.className = \"cesium-projectionPicker-wrapper cesium-toolbar-button\";\n  container.appendChild(wrapper);\n\n  const button = document.createElement(\"button\");\n  button.type = \"button\";\n  button.className = \"cesium-button cesium-toolbar-button\";\n  button.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-projectionPicker-buttonPerspective\": !_orthographic,\\\n       \"cesium-projectionPicker-buttonOrthographic\": _orthographic,\\\n       \"cesium-button-disabled\" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, \\\n       \"cesium-projectionPicker-selected\": dropDownVisible },\\\nattr: { title: selectedTooltip },\\\nclick: toggleDropDown',\n  );\n  button.innerHTML =\n    '\\\n<!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: \"cesium-projectionPicker-iconPerspective\" } --><!-- /ko -->\\\n<!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: \"cesium-projectionPicker-iconOrthographic\" } --><!-- /ko -->';\n  wrapper.appendChild(button);\n\n  const perspectiveButton = document.createElement(\"button\");\n  perspectiveButton.type = \"button\";\n  perspectiveButton.className =\n    \"cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon\";\n  perspectiveButton.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-projectionPicker-visible\" : (dropDownVisible && _orthographic),\\\n       \"cesium-projectionPicker-none\" : !_orthographic,\\\n       \"cesium-projectionPicker-hidden\" : !dropDownVisible },\\\nattr: { title: tooltipPerspective },\\\nclick: switchToPerspective,\\\ncesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }',\n  );\n  wrapper.appendChild(perspectiveButton);\n\n  const orthographicButton = document.createElement(\"button\");\n  orthographicButton.type = \"button\";\n  orthographicButton.className =\n    \"cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon\";\n  orthographicButton.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-projectionPicker-visible\" : (dropDownVisible && !_orthographic),\\\n       \"cesium-projectionPicker-none\" : _orthographic,\\\n       \"cesium-projectionPicker-hidden\" : !dropDownVisible},\\\nattr: { title: tooltipOrthographic },\\\nclick: switchToOrthographic,\\\ncesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }',\n  );\n  wrapper.appendChild(orthographicButton);\n\n  knockout.applyBindings(viewModel, wrapper);\n\n  this._viewModel = viewModel;\n  this._container = container;\n  this._wrapper = wrapper;\n\n  this._closeDropDown = function (e) {\n    if (!wrapper.contains(e.target)) {\n      viewModel.dropDownVisible = false;\n    }\n  };\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.addEventListener(\"pointerdown\", this._closeDropDown, true);\n  } else {\n    document.addEventListener(\"mousedown\", this._closeDropDown, true);\n    document.addEventListener(\"touchstart\", this._closeDropDown, true);\n  }\n}\n\nObject.defineProperties(ProjectionPicker.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof ProjectionPicker.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof ProjectionPicker.prototype\n   *\n   * @type {ProjectionPickerViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nProjectionPicker.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nProjectionPicker.prototype.destroy = function () {\n  this._viewModel.destroy();\n\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.removeEventListener(\"pointerdown\", this._closeDropDown, true);\n  } else {\n    document.removeEventListener(\"mousedown\", this._closeDropDown, true);\n    document.removeEventListener(\"touchstart\", this._closeDropDown, true);\n  }\n\n  knockout.cleanNode(this._wrapper);\n  this._container.removeChild(this._wrapper);\n\n  return destroyObject(this);\n};\nexport default ProjectionPicker;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  EventHelper,\n  OrthographicFrustum,\n  SceneMode,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link ProjectionPicker}.\n * @alias ProjectionPickerViewModel\n * @constructor\n *\n * @param {Scene} scene The Scene to switch projections.\n */\nfunction ProjectionPickerViewModel(scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n  this._orthographic = scene.camera.frustum instanceof OrthographicFrustum;\n  this._flightInProgress = false;\n\n  /**\n   * Gets or sets whether the button drop-down is currently visible.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.dropDownVisible = false;\n\n  /**\n   * Gets or sets the perspective projection tooltip.  This property is observable.\n   * @type {string}\n   * @default 'Perspective Projection'\n   */\n  this.tooltipPerspective = \"Perspective Projection\";\n\n  /**\n   * Gets or sets the orthographic projection tooltip.  This property is observable.\n   * @type {string}\n   * @default 'Orthographic Projection'\n   */\n  this.tooltipOrthographic = \"Orthographic Projection\";\n\n  /**\n   * Gets the currently active tooltip.  This property is observable.\n   * @type {string}\n   */\n  this.selectedTooltip = undefined;\n\n  /**\n   * Gets or sets the current SceneMode.  This property is observable.\n   * @type {SceneMode}\n   */\n  this.sceneMode = scene.mode;\n\n  knockout.track(this, [\n    \"_orthographic\",\n    \"_flightInProgress\",\n    \"sceneMode\",\n    \"dropDownVisible\",\n    \"tooltipPerspective\",\n    \"tooltipOrthographic\",\n  ]);\n\n  const that = this;\n  knockout.defineProperty(this, \"selectedTooltip\", function () {\n    if (that._orthographic) {\n      return that.tooltipOrthographic;\n    }\n    return that.tooltipPerspective;\n  });\n\n  this._toggleDropDown = createCommand(function () {\n    if (that.sceneMode === SceneMode.SCENE2D || that._flightInProgress) {\n      return;\n    }\n\n    that.dropDownVisible = !that.dropDownVisible;\n  });\n\n  this._eventHelper = new EventHelper();\n  this._eventHelper.add(\n    scene.morphComplete,\n    function (transitioner, oldMode, newMode, isMorphing) {\n      that.sceneMode = newMode;\n      that._orthographic =\n        newMode === SceneMode.SCENE2D ||\n        that._scene.camera.frustum instanceof OrthographicFrustum;\n    },\n  );\n  this._eventHelper.add(scene.preRender, function () {\n    that._flightInProgress = defined(scene.camera._currentFlight);\n  });\n\n  this._switchToPerspective = createCommand(function () {\n    if (that.sceneMode === SceneMode.SCENE2D) {\n      return;\n    }\n\n    that._scene.camera.switchToPerspectiveFrustum();\n    that._orthographic = false;\n    that.dropDownVisible = false;\n  });\n\n  this._switchToOrthographic = createCommand(function () {\n    if (that.sceneMode === SceneMode.SCENE2D) {\n      return;\n    }\n\n    that._scene.camera.switchToOrthographicFrustum();\n    that._orthographic = true;\n    that.dropDownVisible = false;\n  });\n\n  //Used by knockout\n  this._sceneMode = SceneMode;\n}\n\nObject.defineProperties(ProjectionPickerViewModel.prototype, {\n  /**\n   * Gets the scene\n   * @memberof ProjectionPickerViewModel.prototype\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets the command to toggle the drop down box.\n   * @memberof ProjectionPickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  toggleDropDown: {\n    get: function () {\n      return this._toggleDropDown;\n    },\n  },\n\n  /**\n   * Gets the command to switch to a perspective projection.\n   * @memberof ProjectionPickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  switchToPerspective: {\n    get: function () {\n      return this._switchToPerspective;\n    },\n  },\n\n  /**\n   * Gets the command to switch to orthographic projection.\n   * @memberof ProjectionPickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  switchToOrthographic: {\n    get: function () {\n      return this._switchToOrthographic;\n    },\n  },\n\n  /**\n   * Gets whether the scene is currently using an orthographic projection.\n   * @memberof ProjectionPickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  isOrthographicProjection: {\n    get: function () {\n      return this._orthographic;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nProjectionPickerViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the view model.\n */\nProjectionPickerViewModel.prototype.destroy = function () {\n  this._eventHelper.removeAll();\n  destroyObject(this);\n};\nexport default ProjectionPickerViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  FeatureDetection,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport SceneModePickerViewModel from \"./SceneModePickerViewModel.js\";\n\nconst globePath =\n  \"m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 \\\n        -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 \\\n        -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 \\\n        11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z \\\n        M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 \\\n        5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 \\\n        -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z\";\nconst flatMapPath =\n  \"m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z\";\nconst columbusViewPath =\n  \"m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z\";\n\n/**\n * <img src=\"Images/sceneModePicker.png\" style=\"float: left; margin-right: 10px;\" width=\"44\" height=\"116\" />\n * <p>The SceneModePicker is a single button widget for switching between scene modes;\n * shown to the left in its expanded state. Programatic switching of scene modes will\n * be automatically reflected in the widget as long as the specified Scene\n * is used to perform the change.</p><p style=\"clear: both;\"></p><br/>\n *\n * @alias SceneModePicker\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n * @param {number} [duration=2.0] The time, in seconds, it takes for the scene to transition.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n *\n * @example\n * // In HTML head, include a link to the SceneModePicker.css stylesheet,\n * // and in the body, include: <div id=\"sceneModePickerContainer\"></div>\n * // Note: This code assumes you already have a Scene instance.\n *\n * const sceneModePicker = new Cesium.SceneModePicker('sceneModePickerContainer', scene);\n */\nfunction SceneModePicker(container, scene, duration) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const viewModel = new SceneModePickerViewModel(scene, duration);\n\n  viewModel._globePath = globePath;\n  viewModel._flatMapPath = flatMapPath;\n  viewModel._columbusViewPath = columbusViewPath;\n\n  const wrapper = document.createElement(\"span\");\n  wrapper.className = \"cesium-sceneModePicker-wrapper cesium-toolbar-button\";\n  container.appendChild(wrapper);\n\n  const button = document.createElement(\"button\");\n  button.type = \"button\";\n  button.className = \"cesium-button cesium-toolbar-button\";\n  button.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-sceneModePicker-button2D\": sceneMode === _sceneMode.SCENE2D,\\\n       \"cesium-sceneModePicker-button3D\": sceneMode === _sceneMode.SCENE3D,\\\n       \"cesium-sceneModePicker-buttonColumbusView\": sceneMode === _sceneMode.COLUMBUS_VIEW,\\\n       \"cesium-sceneModePicker-selected\": dropDownVisible },\\\nattr: { title: selectedTooltip },\\\nclick: toggleDropDown',\n  );\n  button.innerHTML =\n    '\\\n<!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: \"cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D\" } --><!-- /ko -->\\\n<!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: \"cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D\" } --><!-- /ko -->\\\n<!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: \"cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView\" } --><!-- /ko -->';\n  wrapper.appendChild(button);\n\n  const morphTo3DButton = document.createElement(\"button\");\n  morphTo3DButton.type = \"button\";\n  morphTo3DButton.className =\n    \"cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon\";\n  morphTo3DButton.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-sceneModePicker-visible\" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)),\\\n       \"cesium-sceneModePicker-none\" : sceneMode === _sceneMode.SCENE3D,\\\n       \"cesium-sceneModePicker-hidden\" : !dropDownVisible },\\\nattr: { title: tooltip3D },\\\nclick: morphTo3D,\\\ncesiumSvgPath: { path: _globePath, width: 64, height: 64 }',\n  );\n  wrapper.appendChild(morphTo3DButton);\n\n  const morphTo2DButton = document.createElement(\"button\");\n  morphTo2DButton.type = \"button\";\n  morphTo2DButton.className =\n    \"cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon\";\n  morphTo2DButton.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-sceneModePicker-visible\" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)),\\\n       \"cesium-sceneModePicker-none\" : sceneMode === _sceneMode.SCENE2D,\\\n       \"cesium-sceneModePicker-hidden\" : !dropDownVisible },\\\nattr: { title: tooltip2D },\\\nclick: morphTo2D,\\\ncesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }',\n  );\n  wrapper.appendChild(morphTo2DButton);\n\n  const morphToCVButton = document.createElement(\"button\");\n  morphToCVButton.type = \"button\";\n  morphToCVButton.className =\n    \"cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon\";\n  morphToCVButton.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-sceneModePicker-visible\" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)),\\\n       \"cesium-sceneModePicker-none\" : sceneMode === _sceneMode.COLUMBUS_VIEW,\\\n       \"cesium-sceneModePicker-hidden\" : !dropDownVisible},\\\nattr: { title: tooltipColumbusView },\\\nclick: morphToColumbusView,\\\ncesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }',\n  );\n  wrapper.appendChild(morphToCVButton);\n\n  knockout.applyBindings(viewModel, wrapper);\n\n  this._viewModel = viewModel;\n  this._container = container;\n  this._wrapper = wrapper;\n\n  this._closeDropDown = function (e) {\n    if (!wrapper.contains(e.target)) {\n      viewModel.dropDownVisible = false;\n    }\n  };\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.addEventListener(\"pointerdown\", this._closeDropDown, true);\n  } else {\n    document.addEventListener(\"mousedown\", this._closeDropDown, true);\n    document.addEventListener(\"touchstart\", this._closeDropDown, true);\n  }\n}\n\nObject.defineProperties(SceneModePicker.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof SceneModePicker.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof SceneModePicker.prototype\n   *\n   * @type {SceneModePickerViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nSceneModePicker.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nSceneModePicker.prototype.destroy = function () {\n  this._viewModel.destroy();\n\n  if (FeatureDetection.supportsPointerEvents()) {\n    document.removeEventListener(\"pointerdown\", this._closeDropDown, true);\n  } else {\n    document.removeEventListener(\"mousedown\", this._closeDropDown, true);\n    document.removeEventListener(\"touchstart\", this._closeDropDown, true);\n  }\n\n  knockout.cleanNode(this._wrapper);\n  this._container.removeChild(this._wrapper);\n\n  return destroyObject(this);\n};\nexport default SceneModePicker;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  EventHelper,\n  SceneMode,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport createCommand from \"../createCommand.js\";\n\n/**\n * The view model for {@link SceneModePicker}.\n * @alias SceneModePickerViewModel\n * @constructor\n *\n * @param {Scene} scene The Scene to morph\n * @param {number} [duration=2.0] The duration of scene morph animations, in seconds\n */\nfunction SceneModePickerViewModel(scene, duration) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n\n  const that = this;\n\n  const morphStart = function (transitioner, oldMode, newMode, isMorphing) {\n    that.sceneMode = newMode;\n    that.dropDownVisible = false;\n  };\n\n  this._eventHelper = new EventHelper();\n  this._eventHelper.add(scene.morphStart, morphStart);\n\n  this._duration = duration ?? 2.0;\n\n  /**\n   * Gets or sets the current SceneMode.  This property is observable.\n   * @type {SceneMode}\n   */\n  this.sceneMode = scene.mode;\n\n  /**\n   * Gets or sets whether the button drop-down is currently visible.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.dropDownVisible = false;\n\n  /**\n   * Gets or sets the 2D tooltip.  This property is observable.\n   * @type {string}\n   * @default '2D'\n   */\n  this.tooltip2D = \"2D\";\n\n  /**\n   * Gets or sets the 3D tooltip.  This property is observable.\n   * @type {string}\n   * @default '3D'\n   */\n  this.tooltip3D = \"3D\";\n\n  /**\n   * Gets or sets the Columbus View tooltip.  This property is observable.\n   * @type {string}\n   * @default 'Columbus View'\n   */\n  this.tooltipColumbusView = \"Columbus View\";\n\n  knockout.track(this, [\n    \"sceneMode\",\n    \"dropDownVisible\",\n    \"tooltip2D\",\n    \"tooltip3D\",\n    \"tooltipColumbusView\",\n  ]);\n\n  /**\n   * Gets the currently active tooltip.  This property is observable.\n   * @type {string}\n   */\n  this.selectedTooltip = undefined;\n  knockout.defineProperty(this, \"selectedTooltip\", function () {\n    const mode = that.sceneMode;\n    if (mode === SceneMode.SCENE2D) {\n      return that.tooltip2D;\n    }\n    if (mode === SceneMode.SCENE3D) {\n      return that.tooltip3D;\n    }\n    return that.tooltipColumbusView;\n  });\n\n  this._toggleDropDown = createCommand(function () {\n    that.dropDownVisible = !that.dropDownVisible;\n  });\n\n  this._morphTo2D = createCommand(function () {\n    scene.morphTo2D(that._duration);\n  });\n\n  this._morphTo3D = createCommand(function () {\n    scene.morphTo3D(that._duration);\n  });\n\n  this._morphToColumbusView = createCommand(function () {\n    scene.morphToColumbusView(that._duration);\n  });\n\n  //Used by knockout\n  this._sceneMode = SceneMode;\n}\n\nObject.defineProperties(SceneModePickerViewModel.prototype, {\n  /**\n   * Gets the scene\n   * @memberof SceneModePickerViewModel.prototype\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets or sets the the duration of scene mode transition animations in seconds.\n   * A value of zero causes the scene to instantly change modes.\n   * @memberof SceneModePickerViewModel.prototype\n   * @type {number}\n   */\n  duration: {\n    get: function () {\n      return this._duration;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (value < 0.0) {\n        throw new DeveloperError(\"duration value must be positive.\");\n      }\n      //>>includeEnd('debug');\n\n      this._duration = value;\n    },\n  },\n\n  /**\n   * Gets the command to toggle the drop down box.\n   * @memberof SceneModePickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  toggleDropDown: {\n    get: function () {\n      return this._toggleDropDown;\n    },\n  },\n\n  /**\n   * Gets the command to morph to 2D.\n   * @memberof SceneModePickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  morphTo2D: {\n    get: function () {\n      return this._morphTo2D;\n    },\n  },\n\n  /**\n   * Gets the command to morph to 3D.\n   * @memberof SceneModePickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  morphTo3D: {\n    get: function () {\n      return this._morphTo3D;\n    },\n  },\n\n  /**\n   * Gets the command to morph to Columbus View.\n   * @memberof SceneModePickerViewModel.prototype\n   *\n   * @type {Command}\n   */\n  morphToColumbusView: {\n    get: function () {\n      return this._morphToColumbusView;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nSceneModePickerViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the view model.\n */\nSceneModePickerViewModel.prototype.destroy = function () {\n  this._eventHelper.removeAll();\n\n  destroyObject(this);\n};\nexport default SceneModePickerViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport SelectionIndicatorViewModel from \"./SelectionIndicatorViewModel.js\";\n\n/**\n * A widget for displaying an indicator on a selected object.\n *\n * @alias SelectionIndicator\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The Scene instance to use.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n */\nfunction SelectionIndicator(container, scene) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  this._container = container;\n\n  const el = document.createElement(\"div\");\n  el.className = \"cesium-selection-wrapper\";\n  el.setAttribute(\n    \"data-bind\",\n    '\\\nstyle: { \"top\" : _screenPositionY, \"left\" : _screenPositionX },\\\ncss: { \"cesium-selection-wrapper-visible\" : isVisible }',\n  );\n  container.appendChild(el);\n  this._element = el;\n\n  const svgNS = \"http://www.w3.org/2000/svg\";\n  const path =\n    \"M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z\";\n\n  const svg = document.createElementNS(svgNS, \"svg:svg\");\n  svg.setAttribute(\"width\", 160);\n  svg.setAttribute(\"height\", 160);\n  svg.setAttribute(\"viewBox\", \"0 0 160 160\");\n\n  const group = document.createElementNS(svgNS, \"g\");\n  group.setAttribute(\"transform\", \"translate(80,80)\");\n  svg.appendChild(group);\n\n  const pathElement = document.createElementNS(svgNS, \"path\");\n  pathElement.setAttribute(\"data-bind\", \"attr: { transform: _transform }\");\n  pathElement.setAttribute(\"d\", path);\n  group.appendChild(pathElement);\n\n  el.appendChild(svg);\n\n  const viewModel = new SelectionIndicatorViewModel(\n    scene,\n    this._element,\n    this._container,\n  );\n  this._viewModel = viewModel;\n\n  knockout.applyBindings(this._viewModel, this._element);\n}\n\nObject.defineProperties(SelectionIndicator.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof SelectionIndicator.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof SelectionIndicator.prototype\n   *\n   * @type {SelectionIndicatorViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nSelectionIndicator.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nSelectionIndicator.prototype.destroy = function () {\n  const container = this._container;\n  knockout.cleanNode(this._element);\n  container.removeChild(this._element);\n  return destroyObject(this);\n};\nexport default SelectionIndicator;\n","import {\n  Cartesian2,\n  defined,\n  DeveloperError,\n  EasingFunction,\n  SceneTransforms,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\nconst screenSpacePos = new Cartesian2();\nconst offScreen = \"-1000px\";\n\n/**\n * The view model for {@link SelectionIndicator}.\n * @alias SelectionIndicatorViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use for screen-space coordinate conversion.\n * @param {Element} selectionIndicatorElement The element containing all elements that make up the selection indicator.\n * @param {Element} container The DOM element that contains the widget.\n */\nfunction SelectionIndicatorViewModel(\n  scene,\n  selectionIndicatorElement,\n  container,\n) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n\n  if (!defined(selectionIndicatorElement)) {\n    throw new DeveloperError(\"selectionIndicatorElement is required.\");\n  }\n\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n  this._screenPositionX = offScreen;\n  this._screenPositionY = offScreen;\n  this._tweens = scene.tweens;\n  this._container = container ?? document.body;\n  this._selectionIndicatorElement = selectionIndicatorElement;\n  this._scale = 1;\n\n  /**\n   * Gets or sets the world position of the object for which to display the selection indicator.\n   * @type {Cartesian3}\n   */\n  this.position = undefined;\n\n  /**\n   * Gets or sets the visibility of the selection indicator.\n   * @type {boolean}\n   */\n  this.showSelection = false;\n\n  knockout.track(this, [\n    \"position\",\n    \"_screenPositionX\",\n    \"_screenPositionY\",\n    \"_scale\",\n    \"showSelection\",\n  ]);\n\n  /**\n   * Gets the visibility of the position indicator.  This can be false even if an\n   * object is selected, when the selected object has no position.\n   * @type {boolean}\n   */\n  this.isVisible = undefined;\n  knockout.defineProperty(this, \"isVisible\", {\n    get: function () {\n      return this.showSelection && defined(this.position);\n    },\n  });\n\n  knockout.defineProperty(this, \"_transform\", {\n    get: function () {\n      return `scale(${this._scale})`;\n    },\n  });\n\n  /**\n   * Gets or sets the function for converting the world position of the object to the screen space position.\n   *\n   * @member\n   * @type {SelectionIndicatorViewModel.ComputeScreenSpacePosition}\n   * @default SceneTransforms.worldToWindowCoordinates\n   *\n   * @example\n   * selectionIndicatorViewModel.computeScreenSpacePosition = function(position, result) {\n   *     return Cesium.SceneTransforms.worldToWindowCoordinates(scene, position, result);\n   * };\n   */\n  this.computeScreenSpacePosition = function (position, result) {\n    return SceneTransforms.worldToWindowCoordinates(scene, position, result);\n  };\n}\n\n/**\n * Updates the view of the selection indicator to match the position and content properties of the view model.\n * This function should be called as part of the render loop.\n */\nSelectionIndicatorViewModel.prototype.update = function () {\n  if (this.showSelection && defined(this.position)) {\n    const screenPosition = this.computeScreenSpacePosition(\n      this.position,\n      screenSpacePos,\n    );\n    if (!defined(screenPosition)) {\n      this._screenPositionX = offScreen;\n      this._screenPositionY = offScreen;\n    } else {\n      const container = this._container;\n      const containerWidth = container.parentNode.clientWidth;\n      const containerHeight = container.parentNode.clientHeight;\n      const indicatorSize = this._selectionIndicatorElement.clientWidth;\n      const halfSize = indicatorSize * 0.5;\n\n      screenPosition.x =\n        Math.min(\n          Math.max(screenPosition.x, -indicatorSize),\n          containerWidth + indicatorSize,\n        ) - halfSize;\n      screenPosition.y =\n        Math.min(\n          Math.max(screenPosition.y, -indicatorSize),\n          containerHeight + indicatorSize,\n        ) - halfSize;\n\n      this._screenPositionX = `${Math.floor(screenPosition.x + 0.25)}px`;\n      this._screenPositionY = `${Math.floor(screenPosition.y + 0.25)}px`;\n    }\n  }\n};\n\n/**\n * Animate the indicator to draw attention to the selection.\n */\nSelectionIndicatorViewModel.prototype.animateAppear = function () {\n  this._tweens.addProperty({\n    object: this,\n    property: \"_scale\",\n    startValue: 2,\n    stopValue: 1,\n    duration: 0.8,\n    easingFunction: EasingFunction.EXPONENTIAL_OUT,\n  });\n};\n\n/**\n * Animate the indicator to release the selection.\n */\nSelectionIndicatorViewModel.prototype.animateDepart = function () {\n  this._tweens.addProperty({\n    object: this,\n    property: \"_scale\",\n    startValue: this._scale,\n    stopValue: 1.5,\n    duration: 0.8,\n    easingFunction: EasingFunction.EXPONENTIAL_OUT,\n  });\n};\n\nObject.defineProperties(SelectionIndicatorViewModel.prototype, {\n  /**\n   * Gets the HTML element containing the selection indicator.\n   * @memberof SelectionIndicatorViewModel.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the HTML element that holds the selection indicator.\n   * @memberof SelectionIndicatorViewModel.prototype\n   *\n   * @type {Element}\n   */\n  selectionIndicatorElement: {\n    get: function () {\n      return this._selectionIndicatorElement;\n    },\n  },\n\n  /**\n   * Gets the scene being used.\n   * @memberof SelectionIndicatorViewModel.prototype\n   *\n   * @type {Scene}\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n});\n\n/**\n * A function that converts the world position of an object to a screen space position.\n * @callback SelectionIndicatorViewModel.ComputeScreenSpacePosition\n * @param {Cartesian3} position The position in WGS84 (world) coordinates.\n * @param {Cartesian2} result An object to return the input position transformed to window coordinates.\n * @returns {Cartesian2} The modified result parameter.\n */\nexport default SelectionIndicatorViewModel;\n","const svgNS = \"http://www.w3.org/2000/svg\";\nconst svgClassName = \"cesium-svgPath-svg\";\n\n/**\n * A Knockout binding handler that creates a DOM element for a single SVG path.\n * This binding handler will be registered as cesiumSvgPath.\n *\n * <p>\n * The parameter to this binding is an object with the following properties:\n * </p>\n *\n * <ul>\n * <li>path: The SVG path as a string.</li>\n * <li>width: The width of the SVG path with no transformations applied.</li>\n * <li>height: The height of the SVG path with no transformations applied.</li>\n * <li>css: Optional. A string containing additional CSS classes to apply to the SVG. 'cesium-svgPath-svg' is always applied.</li>\n * </ul>\n *\n * @namespace SvgPathBindingHandler\n *\n * @example\n * // Create an SVG as a child of a div\n * <div data-bind=\"cesiumSvgPath: { path: 'M 100 100 L 300 100 L 200 300 z', width: 28, height: 28 }\"></div>\n *\n * // parameters can be observable from the view model\n * <div data-bind=\"cesiumSvgPath: { path: currentPath, width: currentWidth, height: currentHeight }\"></div>\n *\n * // or the whole object can be observable from the view model\n * <div data-bind=\"cesiumSvgPath: svgPathOptions\"></div>\n */\nconst SvgPathBindingHandler = {\n  /**\n   * @function\n   */\n  register: function (knockout) {\n    knockout.bindingHandlers.cesiumSvgPath = {\n      init: function (element, valueAccessor) {\n        const svg = document.createElementNS(svgNS, \"svg:svg\");\n        svg.setAttribute(\"class\", svgClassName);\n\n        const pathElement = document.createElementNS(svgNS, \"path\");\n        svg.appendChild(pathElement);\n\n        knockout.virtualElements.setDomNodeChildren(element, [svg]);\n\n        knockout.computed({\n          read: function () {\n            const value = knockout.unwrap(valueAccessor());\n\n            pathElement.setAttribute(\"d\", knockout.unwrap(value.path));\n\n            const pathWidth = knockout.unwrap(value.width);\n            const pathHeight = knockout.unwrap(value.height);\n\n            svg.setAttribute(\"width\", pathWidth);\n            svg.setAttribute(\"height\", pathHeight);\n            svg.setAttribute(\"viewBox\", `0 0 ${pathWidth} ${pathHeight}`);\n\n            if (value.css) {\n              svg.setAttribute(\n                \"class\",\n                `${svgClassName} ${knockout.unwrap(value.css)}`,\n              );\n            }\n          },\n          disposeWhenNodeIsRemoved: element,\n        });\n\n        return {\n          controlsDescendantBindings: true,\n        };\n      },\n    };\n\n    knockout.virtualElements.allowedBindings.cesiumSvgPath = true;\n  },\n};\nexport default SvgPathBindingHandler;\n","var oldValue;\nif (typeof ko !== 'undefined') {\n    oldValue = ko;\n}\n\n(function(){\n/*!\n * Knockout JavaScript library v3.5.1\n * (c) The Knockout.js team - http://knockoutjs.com/\n * License: MIT (http://www.opensource.org/licenses/mit-license.php)\n */\n\n(function() {(function(n){var A=this||(0,eval)(\"this\"),w=A.document,R=A.navigator,v=A.jQuery,H=A.JSON;v||\"undefined\"===typeof jQuery||(v=jQuery);(function(n){n(A.ko={})})(function(S,T){function K(a,c){return null===a||typeof a in W?a===c:!1}function X(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function Y(b,c){var d;return function(){clearTimeout(d);\nd=a.a.setTimeout(b,c)}}function Z(a,c){c&&\"change\"!==c?\"beforeChange\"===c?this.pc(a):this.gb(a,c):this.qc(a)}function aa(a,c){null!==c&&c.s&&c.s()}function ba(a,c){var d=this.qd,e=d[r];e.ra||(this.Qb&&this.mb[c]?(d.uc(c,a,this.mb[c]),this.mb[c]=null,--this.Qb):e.I[c]||d.uc(c,a,e.J?{da:a}:d.$c(a)),a.Ja&&a.gd())}var a=\"undefined\"!==typeof S?S:{};a.b=function(b,c){for(var d=b.split(\".\"),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.L=function(a,c,d){a[c]=d};a.version=\"3.5.1\";a.b(\"version\",\na.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1};a.a=function(){function b(a,b){for(var c in a)f.call(a,c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)f.call(b,c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var l=b[c].match(q)||[];a.a.D(d.match(q),function(b){a.a.Na(l,b,e)});b[c]=l.join(\" \")}var f=Object.prototype.hasOwnProperty,g={__proto__:[]}instanceof Array,h=\"function\"===typeof Symbol,m={},k={};m[R&&/Firefox\\/2/i.test(R.userAgent)?\n\"KeyboardEvent\":\"UIEvents\"]=[\"keyup\",\"keydown\",\"keypress\"];m.MouseEvents=\"click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave\".split(\" \");b(m,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)k[b[c]]=a});var l={propertychange:!0},p=w&&function(){for(var a=3,b=w.createElement(\"div\"),c=b.getElementsByTagName(\"i\");b.innerHTML=\"\\x3c!--[if gt IE \"+ ++a+\"]><i></i><![endif]--\\x3e\",c[0];);return 4<a?a:n}(),q=/\\S+/g,t;return{Jc:[\"authenticity_token\",/^__RequestVerificationToken(_.*)?$/],\nD:function(a,b,c){for(var d=0,e=a.length;d<e;d++)b.call(c,a[d],d,a)},A:\"function\"==typeof Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b)}:function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Lb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return a[d];return n},Pa:function(b,c){var d=a.a.A(b,c);0<d?b.splice(d,1):0===d&&b.shift()},wc:function(b){var c=[];b&&a.a.D(b,function(b){0>a.a.A(c,b)&&c.push(b)});return c},Mb:function(a,\nb,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)d.push(b.call(c,a[e],e));return d},jb:function(a,b,c){var d=[];if(a)for(var e=0,l=a.length;e<l;e++)b.call(c,a[e],e)&&d.push(a[e]);return d},Nb:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},Na:function(b,c,d){var e=a.a.A(a.a.bc(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},Ba:g,extend:c,setPrototypeOf:d,Ab:g?d:c,P:b,Ga:function(a,b,c){if(!a)return a;var d={},e;for(e in a)f.call(a,e)&&(d[e]=\nb.call(c,a[e],e,a));return d},Tb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Yb:function(b){b=a.a.la(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement(\"div\"),d=0,e=b.length;d<e;d++)c.appendChild(a.oa(b[d]));return c},Ca:function(b,c){for(var d=0,e=b.length,l=[];d<e;d++){var k=b[d].cloneNode(!0);l.push(c?a.oa(k):k)}return l},va:function(b,c){a.a.Tb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},Xc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],\nl=e.parentNode,k=0,f=c.length;k<f;k++)l.insertBefore(c[k],e);k=0;for(f=d.length;k<f;k++)a.removeNode(d[k])}},Ua:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},Zc:function(a,b){7>p?a.setAttribute(\"selected\",b):a.selected=b},Db:function(a){return null===a||a===n?\"\":a.trim?\na.trim():a.toString().replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")},Ud:function(a,b){a=a||\"\";return b.length>a.length?!1:a.substring(0,b.length)===b},vd:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(1!==a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Sb:function(b){return a.a.vd(b,b.ownerDocument.documentElement)},kd:function(b){return!!a.a.Lb(b,a.a.Sb)},R:function(a){return a&&\na.tagName&&a.tagName.toLowerCase()},Ac:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Ac(b),c)},Gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,c,d){var e=a.a.Ac(d);d=l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||\"function\"!=typeof b.addEventListener)if(\"undefined\"!=typeof b.attachEvent){var k=function(a){e.call(b,a)},f=\"on\"+c;b.attachEvent(f,\nk);a.a.K.za(b,function(){b.detachEvent(f,k)})}else throw Error(\"Browser doesn't support addEventListener or attachEvent\");else b.addEventListener(c,e,!1);else t||(t=\"function\"==typeof v(b).on?\"on\":\"bind\"),v(b)[t](c,e)},Fb:function(b,c){if(!b||!b.nodeType)throw Error(\"element must be a DOM node when calling triggerEvent\");var d;\"input\"===a.a.R(b)&&b.type&&\"click\"==c.toLowerCase()?(d=b.type,d=\"checkbox\"==d||\"radio\"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if(\"function\"==typeof w.createEvent)if(\"function\"==\ntypeof b.dispatchEvent)d=w.createEvent(k[c]||\"HTMLEvents\"),d.initEvent(c,!0,!0,A,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error(\"The supplied element doesn't support dispatchEvent\");else if(d&&b.click)b.click();else if(\"undefined\"!=typeof b.fireEvent)b.fireEvent(\"on\"+c);else throw Error(\"Browser doesn't support triggering events\");else v(b).trigger(c)},f:function(b){return a.O(b)?b():b},bc:function(b){return a.O(b)?b.v():b},Eb:function(b,c,d){var l;c&&(\"object\"===typeof b.classList?\n(l=b.classList[d?\"add\":\"remove\"],a.a.D(c.match(q),function(a){l.call(b.classList,a)})):\"string\"===typeof b.className.baseVal?e(b.className,\"baseVal\",c,d):e(b,\"className\",c,d))},Bb:function(b,c){var d=a.a.f(c);if(null===d||d===n)d=\"\";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.va(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Ad(b)},Yc:function(a,b){a.name=b;if(7>=p)try{var c=a.name.replace(/[&<>'\"]/g,function(a){return\"&#\"+a.charCodeAt(0)+\";\"});a.mergeAttributes(w.createElement(\"<input name='\"+\nc+\"'/>\"),!1)}catch(d){}},Ad:function(a){9<=p&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},wd:function(a){if(p){var b=a.style.width;a.style.width=0;a.style.width=b}},Pd:function(b,c){b=a.a.f(b);c=a.a.f(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},la:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Da:function(a){return h?Symbol(a):a},Zd:6===p,$d:7===p,W:p,Lc:function(b,c){for(var d=a.a.la(b.getElementsByTagName(\"input\")).concat(a.a.la(b.getElementsByTagName(\"textarea\"))),\ne=\"string\"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},l=[],k=d.length-1;0<=k;k--)e(d[k])&&l.push(d[k]);return l},Nd:function(b){return\"string\"==typeof b&&(b=a.a.Db(b))?H&&H.parse?H.parse(b):(new Function(\"return \"+b))():null},hc:function(b,c,d){if(!H||!H.stringify)throw Error(\"Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js\");\nreturn H.stringify(a.a.f(b),c,d)},Od:function(c,d,e){e=e||{};var l=e.params||{},k=e.includeFields||this.Jc,f=c;if(\"object\"==typeof c&&\"form\"===a.a.R(c))for(var f=c.action,h=k.length-1;0<=h;h--)for(var g=a.a.Lc(c,k[h]),m=g.length-1;0<=m;m--)l[g[m].name]=g[m].value;d=a.a.f(d);var p=w.createElement(\"form\");p.style.display=\"none\";p.action=f;p.method=\"post\";for(var q in d)c=w.createElement(\"input\"),c.type=\"hidden\",c.name=q,c.value=a.a.hc(a.a.f(d[q])),p.appendChild(c);b(l,function(a,b){var c=w.createElement(\"input\");\nc.type=\"hidden\";c.name=a;c.value=b;p.appendChild(c)});w.body.appendChild(p);e.submitter?e.submitter(p):p.submit();setTimeout(function(){p.parentNode.removeChild(p)},0)}}}();a.b(\"utils\",a.a);a.b(\"utils.arrayForEach\",a.a.D);a.b(\"utils.arrayFirst\",a.a.Lb);a.b(\"utils.arrayFilter\",a.a.jb);a.b(\"utils.arrayGetDistinctValues\",a.a.wc);a.b(\"utils.arrayIndexOf\",a.a.A);a.b(\"utils.arrayMap\",a.a.Mb);a.b(\"utils.arrayPushAll\",a.a.Nb);a.b(\"utils.arrayRemoveItem\",a.a.Pa);a.b(\"utils.cloneNodes\",a.a.Ca);a.b(\"utils.createSymbolOrString\",\na.a.Da);a.b(\"utils.extend\",a.a.extend);a.b(\"utils.fieldsIncludedWithJsonPost\",a.a.Jc);a.b(\"utils.getFormFields\",a.a.Lc);a.b(\"utils.objectMap\",a.a.Ga);a.b(\"utils.peekObservable\",a.a.bc);a.b(\"utils.postJson\",a.a.Od);a.b(\"utils.parseJson\",a.a.Nd);a.b(\"utils.registerEventHandler\",a.a.B);a.b(\"utils.stringifyJson\",a.a.hc);a.b(\"utils.range\",a.a.Pd);a.b(\"utils.toggleDomNodeCssClass\",a.a.Eb);a.b(\"utils.triggerEvent\",a.a.Fb);a.b(\"utils.unwrapObservable\",a.a.f);a.b(\"utils.objectForEach\",a.a.P);a.b(\"utils.addOrRemoveItem\",\na.a.Na);a.b(\"utils.setTextContent\",a.a.Bb);a.b(\"unwrap\",a.a.f);Function.prototype.bind||(Function.prototype.bind=function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.g=new function(){var b=0,c=\"__ko__\"+(new Date).getTime(),d={},e,f;a.a.W?(e=function(a,e){var f=a[c];if(!f||\"null\"===f||!d[f]){if(!e)return n;f=a[c]=\"ko\"+b++;d[f]=\n{}}return d[f]},f=function(a){var b=a[c];return b?(delete d[b],a[c]=null,!0):!1}):(e=function(a,b){var d=a[c];!d&&b&&(d=a[c]={});return d},f=function(a){return a[c]?(delete a[c],!0):!1});return{get:function(a,b){var c=e(a,!1);return c&&c[b]},set:function(a,b,c){(a=e(a,c!==n))&&(a[b]=c)},Ub:function(a,b,c){a=e(a,!0);return a[b]||(a[b]=c)},clear:f,Z:function(){return b++ +c}}};a.b(\"utils.domData\",a.a.g);a.b(\"utils.domData.clear\",a.a.g.clear);a.a.K=new function(){function b(b,c){var d=a.a.g.get(b,e);\nd===n&&c&&(d=[],a.a.g.set(b,e,d));return d}function c(c){var e=b(c,!1);if(e)for(var e=e.slice(0),k=0;k<e.length;k++)e[k](c);a.a.g.clear(c);a.a.K.cleanExternalData(c);g[c.nodeType]&&d(c.childNodes,!0)}function d(b,d){for(var e=[],l,f=0;f<b.length;f++)if(!d||8===b[f].nodeType)if(c(e[e.length]=l=b[f]),b[f]!==l)for(;f--&&-1==a.a.A(e,b[f]););}var e=a.a.g.Z(),f={1:!0,8:!0,9:!0},g={1:!0,9:!0};return{za:function(a,c){if(\"function\"!=typeof c)throw Error(\"Callback must be a function\");b(a,!0).push(c)},yb:function(c,\nd){var f=b(c,!1);f&&(a.a.Pa(f,d),0==f.length&&a.a.g.set(c,e,n))},oa:function(b){a.u.G(function(){f[b.nodeType]&&(c(b),g[b.nodeType]&&d(b.getElementsByTagName(\"*\")))});return b},removeNode:function(b){a.oa(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&\"function\"==typeof v.cleanData&&v.cleanData([a])}}};a.oa=a.a.K.oa;a.removeNode=a.a.K.removeNode;a.b(\"cleanNode\",a.oa);a.b(\"removeNode\",a.removeNode);a.b(\"utils.domNodeDisposal\",a.a.K);a.b(\"utils.domNodeDisposal.addDisposeCallback\",\na.a.K.za);a.b(\"utils.domNodeDisposal.removeDisposeCallback\",a.a.K.yb);(function(){var b=[0,\"\",\"\"],c=[1,\"<table>\",\"</table>\"],d=[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],e=[1,\"<select multiple='multiple'>\",\"</select>\"],f={thead:c,tbody:c,tfoot:c,tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:d,th:d,option:e,optgroup:e},g=8>=a.a.W;a.a.ua=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var l=e[0];l.parentNode&&11!==l.parentNode.nodeType;)l=l.parentNode;\nl.parentNode&&l.parentNode.removeChild(l)}}else{(e=d)||(e=w);var l=e.parentWindow||e.defaultView||A,p=a.a.Db(c).toLowerCase(),q=e.createElement(\"div\"),t;t=(p=p.match(/^(?:\\x3c!--.*?--\\x3e\\s*?)*?<([a-z]+)[\\s>]/))&&f[p[1]]||b;p=t[0];t=\"ignored<div>\"+t[1]+c+t[2]+\"</div>\";\"function\"==typeof l.innerShiv?q.appendChild(l.innerShiv(t)):(g&&e.body.appendChild(q),q.innerHTML=t,g&&q.parentNode.removeChild(q));for(;p--;)q=q.lastChild;e=a.a.la(q.lastChild.childNodes)}return e};a.a.Md=function(b,c){var d=a.a.ua(b,\nc);return d.length&&d[0].parentElement||a.a.Yb(d)};a.a.fc=function(b,c){a.a.Tb(b);c=a.a.f(c);if(null!==c&&c!==n)if(\"string\"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ua(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b(\"utils.parseHtmlFragment\",a.a.ua);a.b(\"utils.setHtml\",a.a.fc);a.aa=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.aa.Uc(c.nodeValue);null!=f&&e.push({ud:c,Kd:f})}else if(1==c.nodeType)for(var f=0,g=c.childNodes,h=g.length;f<h;f++)b(g[f],\ne)}var c={};return{Xb:function(a){if(\"function\"!=typeof a)throw Error(\"You can only pass a function to ko.memoization.memoize()\");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return\"\\x3c!--[ko_memo:\"+b+\"]--\\x3e\"},bd:function(a,b){var f=c[a];if(f===n)throw Error(\"Couldn't find any memo with ID \"+a+\". Perhaps it's already been unmemoized.\");try{return f.apply(null,b||[]),!0}finally{delete c[a]}},cd:function(c,e){var f=\n[];b(c,f);for(var g=0,h=f.length;g<h;g++){var m=f[g].ud,k=[m];e&&a.a.Nb(k,e);a.aa.bd(f[g].Kd,k);m.nodeValue=\"\";m.parentNode&&m.parentNode.removeChild(m)}},Uc:function(a){return(a=a.match(/^\\[ko_memo\\:(.*?)\\]$/))?a[1]:null}}}();a.b(\"memoization\",a.aa);a.b(\"memoization.memoize\",a.aa.Xb);a.b(\"memoization.unmemoize\",a.aa.bd);a.b(\"memoization.parseMemoText\",a.aa.Uc);a.b(\"memoization.unmemoizeDomNodeAndDescendants\",a.aa.cd);a.na=function(){function b(){if(f)for(var b=f,c=0,d;h<f;)if(d=e[h++]){if(h>b){if(5E3<=\n++c){h=f;a.a.Gc(Error(\"'Too much recursion' after processing \"+c+\" task groups.\"));break}b=f}try{d()}catch(p){a.a.Gc(p)}}}function c(){b();h=f=e.length=0}var d,e=[],f=0,g=1,h=0;A.MutationObserver?d=function(a){var b=w.createElement(\"div\");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle(\"foo\")}}(c):d=w&&\"onreadystatechange\"in w.createElement(\"script\")?function(a){var b=w.createElement(\"script\");b.onreadystatechange=function(){b.onreadystatechange=null;w.documentElement.removeChild(b);\nb=null;a()};w.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,zb:function(b){f||a.na.scheduler(c);e[f++]=b;return g++},cancel:function(a){a=a-(g-f);a>=h&&a<f&&(e[a]=null)},resetForTesting:function(){var a=f-h;h=f=e.length=0;return a},Sd:b}}();a.b(\"tasks\",a.na);a.b(\"tasks.schedule\",a.na.zb);a.b(\"tasks.runEarly\",a.na.Sd);a.Ta={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.$({read:b,write:function(e){clearTimeout(d);d=a.a.setTimeout(function(){b(e)},\nc)}})},rateLimit:function(a,c){var d,e,f;\"number\"==typeof c?d=c:(d=c.timeout,e=c.method);a.Hb=!1;f=\"function\"==typeof e?e:\"notifyWhenChangesStop\"==e?Y:X;a.ub(function(a){return f(a,d,c)})},deferred:function(b,c){if(!0!==c)throw Error(\"The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.\");b.Hb||(b.Hb=!0,b.ub(function(c){var e,f=!1;return function(){if(!f){a.na.cancel(e);e=a.na.zb(c);try{f=!0,b.notifySubscribers(n,\"dirty\")}finally{f=\n!1}}}}))},notify:function(a,c){a.equalityComparer=\"always\"==c?null:K}};var W={undefined:1,\"boolean\":1,number:1,string:1};a.b(\"extenders\",a.Ta);a.ic=function(b,c,d){this.da=b;this.lc=c;this.mc=d;this.Ib=!1;this.fb=this.Jb=null;a.L(this,\"dispose\",this.s);a.L(this,\"disposeWhenNodeIsRemoved\",this.l)};a.ic.prototype.s=function(){this.Ib||(this.fb&&a.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)};a.ic.prototype.l=function(b){this.Jb=b;a.a.K.za(b,this.fb=this.s.bind(this))};\na.T=function(){a.a.Ab(this,D);D.qb(this)};var D={qb:function(a){a.U={change:[]};a.sc=1},subscribe:function(b,c,d){var e=this;d=d||\"change\";var f=new a.ic(e,c?b.bind(c):b,function(){a.a.Pa(e.U[d],f);e.hb&&e.hb(d)});e.Qa&&e.Qa(d);e.U[d]||(e.U[d]=[]);e.U[d].push(f);return f},notifySubscribers:function(b,c){c=c||\"change\";\"change\"===c&&this.Gb();if(this.Wa(c)){var d=\"change\"===c&&this.ed||this.U[c].slice(0);try{a.u.xc();for(var e=0,f;f=d[e];++e)f.Ib||f.lc(b)}finally{a.u.end()}}},ob:function(){return this.sc},\nDd:function(a){return this.ob()!==a},Gb:function(){++this.sc},ub:function(b){var c=this,d=a.O(c),e,f,g,h,m;c.gb||(c.gb=c.notifySubscribers,c.notifySubscribers=Z);var k=b(function(){c.Ja=!1;d&&h===c&&(h=c.nc?c.nc():c());var a=f||m&&c.sb(g,h);m=f=e=!1;a&&c.gb(g=h)});c.qc=function(a,b){b&&c.Ja||(m=!b);c.ed=c.U.change.slice(0);c.Ja=e=!0;h=a;k()};c.pc=function(a){e||(g=a,c.gb(a,\"beforeChange\"))};c.rc=function(){m=!0};c.gd=function(){c.sb(g,c.v(!0))&&(f=!0)}},Wa:function(a){return this.U[a]&&this.U[a].length},\nBd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var c=0;a.a.P(this.U,function(a,b){\"dirty\"!==a&&(c+=b.length)});return c},sb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},toString:function(){return\"[object Object]\"},extend:function(b){var c=this;b&&a.a.P(b,function(b,e){var f=a.Ta[b];\"function\"==typeof f&&(c=f(c,e)||c)});return c}};a.L(D,\"init\",D.qb);a.L(D,\"subscribe\",D.subscribe);a.L(D,\"extend\",D.extend);a.L(D,\"getSubscriptionsCount\",D.Bd);a.a.Ba&&a.a.setPrototypeOf(D,\nFunction.prototype);a.T.fn=D;a.Qc=function(a){return null!=a&&\"function\"==typeof a.subscribe&&\"function\"==typeof a.notifySubscribers};a.b(\"subscribable\",a.T);a.b(\"isSubscribable\",a.Qc);a.S=a.u=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{xc:b,end:c,cc:function(b){if(e){if(!a.Qc(b))throw Error(\"Only subscribable things can act as dependencies\");e.od.call(e.pd,b,b.fd||(b.fd=++f))}},G:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},qa:function(){if(e)return e.o.qa()},\nVa:function(){if(e)return e.o.Va()},Ya:function(){if(e)return e.Ya},o:function(){if(e)return e.o}}}();a.b(\"computedContext\",a.S);a.b(\"computedContext.getDependenciesCount\",a.S.qa);a.b(\"computedContext.getDependencies\",a.S.Va);a.b(\"computedContext.isInitial\",a.S.Ya);a.b(\"computedContext.registerDependency\",a.S.cc);a.b(\"ignoreDependencies\",a.Yd=a.u.G);var I=a.a.Da(\"_latestValue\");a.ta=function(b){function c(){if(0<arguments.length)return c.sb(c[I],arguments[0])&&(c.ya(),c[I]=arguments[0],c.xa()),this;\na.u.cc(c);return c[I]}c[I]=b;a.a.Ba||a.a.extend(c,a.T.fn);a.T.fn.qb(c);a.a.Ab(c,F);a.options.deferUpdates&&a.Ta.deferred(c,!0);return c};var F={equalityComparer:K,v:function(){return this[I]},xa:function(){this.notifySubscribers(this[I],\"spectate\");this.notifySubscribers(this[I])},ya:function(){this.notifySubscribers(this[I],\"beforeChange\")}};a.a.Ba&&a.a.setPrototypeOf(F,a.T.fn);var G=a.ta.Ma=\"__ko_proto__\";F[G]=a.ta;a.O=function(b){if((b=\"function\"==typeof b&&b[G])&&b!==F[G]&&b!==a.o.fn[G])throw Error(\"Invalid object that looks like an observable; possibly from another Knockout instance\");\nreturn!!b};a.Za=function(b){return\"function\"==typeof b&&(b[G]===F[G]||b[G]===a.o.fn[G]&&b.Nc)};a.b(\"observable\",a.ta);a.b(\"isObservable\",a.O);a.b(\"isWriteableObservable\",a.Za);a.b(\"isWritableObservable\",a.Za);a.b(\"observable.fn\",F);a.L(F,\"peek\",F.v);a.L(F,\"valueHasMutated\",F.xa);a.L(F,\"valueWillMutate\",F.ya);a.Ha=function(b){b=b||[];if(\"object\"!=typeof b||!(\"length\"in b))throw Error(\"The argument passed when initializing an observable array must be an array, or null, or undefined.\");b=a.ta(b);a.a.Ab(b,\na.Ha.fn);return b.extend({trackArrayChanges:!0})};a.Ha.fn={remove:function(b){for(var c=this.v(),d=[],e=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];if(e(g)){0===d.length&&this.ya();if(c[f]!==g)throw Error(\"Array modified during remove; cannot remove item\");d.push(g);c.splice(f,1);f--}}d.length&&this.xa();return d},removeAll:function(b){if(b===n){var c=this.v(),d=c.slice(0);this.ya();c.splice(0,c.length);this.xa();return d}return b?this.remove(function(c){return 0<=\na.a.A(b,c)}):[]},destroy:function(b){var c=this.v(),d=\"function\"!=typeof b||a.O(b)?function(a){return a===b}:b;this.ya();for(var e=c.length-1;0<=e;e--){var f=c[e];d(f)&&(f._destroy=!0)}this.xa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.A(b,c)}):[]},indexOf:function(b){var c=this();return a.a.A(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ya(),this.v()[d]=c,this.xa())},sorted:function(a){var c=this().slice(0);\nreturn a?c.sort(a):c.sort()},reversed:function(){return this().slice(0).reverse()}};a.a.Ba&&a.a.setPrototypeOf(a.Ha.fn,a.ta.fn);a.a.D(\"pop push reverse shift sort splice unshift\".split(\" \"),function(b){a.Ha.fn[b]=function(){var a=this.v();this.ya();this.zc(a,b,arguments);var d=a[b].apply(a,arguments);this.xa();return d===a?this:d}});a.a.D([\"slice\"],function(b){a.Ha.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.Pc=function(b){return a.O(b)&&\"function\"==typeof b.remove&&\"function\"==\ntypeof b.push};a.b(\"observableArray\",a.Ha);a.b(\"isObservableArray\",a.Pc);a.Ta.trackArrayChanges=function(b,c){function d(){function c(){if(m){var d=[].concat(b.v()||[]),e;if(b.Wa(\"arrayChange\")){if(!f||1<m)f=a.a.Pb(k,d,b.Ob);e=f}k=d;f=null;m=0;e&&e.length&&b.notifySubscribers(e,\"arrayChange\")}}e?c():(e=!0,h=b.subscribe(function(){++m},null,\"spectate\"),k=[].concat(b.v()||[]),f=null,g=b.subscribe(c))}b.Ob={};c&&\"object\"==typeof c&&a.a.extend(b.Ob,c);b.Ob.sparse=!0;if(!b.zc){var e=!1,f=null,g,h,m=0,\nk,l=b.Qa,p=b.hb;b.Qa=function(a){l&&l.call(b,a);\"arrayChange\"===a&&d()};b.hb=function(a){p&&p.call(b,a);\"arrayChange\"!==a||b.Wa(\"arrayChange\")||(g&&g.s(),h&&h.s(),h=g=null,e=!1,k=n)};b.zc=function(b,c,d){function l(a,b,c){return k[k.length]={status:a,value:b,index:c}}if(e&&!m){var k=[],p=b.length,g=d.length,h=0;switch(c){case \"push\":h=p;case \"unshift\":for(c=0;c<g;c++)l(\"added\",d[c],h+c);break;case \"pop\":h=p-1;case \"shift\":p&&l(\"deleted\",b[h],h);break;case \"splice\":c=Math.min(Math.max(0,0>d[0]?p+d[0]:\nd[0]),p);for(var p=1===g?p:Math.min(c+(d[1]||0),p),g=c+g-2,h=Math.max(p,g),U=[],L=[],n=2;c<h;++c,++n)c<p&&L.push(l(\"deleted\",b[c],c)),c<g&&U.push(l(\"added\",d[n],c));a.a.Kc(L,U);break;default:return}f=k}}}};var r=a.a.Da(\"_state\");a.o=a.$=function(b,c,d){function e(){if(0<arguments.length){if(\"function\"===typeof f)f.apply(g.nb,arguments);else throw Error(\"Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.\");return this}g.ra||\na.u.cc(e);(g.ka||g.J&&e.Xa())&&e.ha();return g.X}\"object\"===typeof b?d=b:(d=d||{},b&&(d.read=b));if(\"function\"!=typeof d.read)throw Error(\"Pass a function that returns the value of the ko.computed\");var f=d.write,g={X:n,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:d.read,nb:c||d.owner,l:d.disposeWhenNodeIsRemoved||d.l||null,Sa:d.disposeWhen||d.Sa,Rb:null,I:{},V:0,Ic:null};e[r]=g;e.Nc=\"function\"===typeof f;a.a.Ba||a.a.extend(e,a.T.fn);a.T.fn.qb(e);a.a.Ab(e,C);d.pure?(g.wb=!0,g.J=!0,a.a.extend(e,da)):\nd.deferEvaluation&&a.a.extend(e,ea);a.options.deferUpdates&&a.Ta.deferred(e,!0);g.l&&(g.jc=!0,g.l.nodeType||(g.l=null));g.J||d.deferEvaluation||e.ha();g.l&&e.ja()&&a.a.K.za(g.l,g.Rb=function(){e.s()});return e};var C={equalityComparer:K,qa:function(){return this[r].V},Va:function(){var b=[];a.a.P(this[r].I,function(a,d){b[d.Ka]=d.da});return b},Vb:function(b){if(!this[r].V)return!1;var c=this.Va();return-1!==a.a.A(c,b)?!0:!!a.a.Lb(c,function(a){return a.Vb&&a.Vb(b)})},uc:function(a,c,d){if(this[r].wb&&\nc===this)throw Error(\"A 'pure' computed must not be called recursively\");this[r].I[a]=d;d.Ka=this[r].V++;d.La=c.ob()},Xa:function(){var a,c,d=this[r].I;for(a in d)if(Object.prototype.hasOwnProperty.call(d,a)&&(c=d[a],this.Ia&&c.da.Ja||c.da.Dd(c.La)))return!0},Jd:function(){this.Ia&&!this[r].rb&&this.Ia(!1)},ja:function(){var a=this[r];return a.ka||0<a.V},Rd:function(){this.Ja?this[r].ka&&(this[r].sa=!0):this.Hc()},$c:function(a){if(a.Hb){var c=a.subscribe(this.Jd,this,\"dirty\"),d=a.subscribe(this.Rd,\nthis);return{da:a,s:function(){c.s();d.s()}}}return a.subscribe(this.Hc,this)},Hc:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[r].Ic),this[r].Ic=a.a.setTimeout(function(){b.ha(!0)},c)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var c=this[r],d=c.Sa,e=!1;if(!c.rb&&!c.ra){if(c.l&&!a.a.Sb(c.l)||d&&d()){if(!c.jc){this.s();return}}else c.jc=!1;c.rb=!0;try{e=this.zd(b)}finally{c.rb=!1}return e}},zd:function(b){var c=this[r],d=!1,e=c.wb?n:!c.V,d={qd:this,mb:c.I,Qb:c.V};a.u.xc({pd:d,\nod:ba,o:this,Ya:e});c.I={};c.V=0;var f=this.yd(c,d);c.V?d=this.sb(c.X,f):(this.s(),d=!0);d&&(c.J?this.Gb():this.notifySubscribers(c.X,\"beforeChange\"),c.X=f,this.notifySubscribers(c.X,\"spectate\"),!c.J&&b&&this.notifySubscribers(c.X),this.rc&&this.rc());e&&this.notifySubscribers(c.X,\"awake\");return d},yd:function(b,c){try{var d=b.Wc;return b.nb?d.call(b.nb):d()}finally{a.u.end(),c.Qb&&!b.J&&a.a.P(c.mb,aa),b.sa=b.ka=!1}},v:function(a){var c=this[r];(c.ka&&(a||!c.V)||c.J&&this.Xa())&&this.ha();return c.X},\nub:function(b){a.T.fn.ub.call(this,b);this.nc=function(){this[r].J||(this[r].sa?this.ha():this[r].ka=!1);return this[r].X};this.Ia=function(a){this.pc(this[r].X);this[r].ka=!0;a&&(this[r].sa=!0);this.qc(this,!a)}},s:function(){var b=this[r];!b.J&&b.I&&a.a.P(b.I,function(a,b){b.s&&b.s()});b.l&&b.Rb&&a.a.K.yb(b.l,b.Rb);b.I=n;b.V=0;b.ra=!0;b.sa=!1;b.ka=!1;b.J=!1;b.l=n;b.Sa=n;b.Wc=n;this.Nc||(b.nb=n)}},da={Qa:function(b){var c=this,d=c[r];if(!d.ra&&d.J&&\"change\"==b){d.J=!1;if(d.sa||c.Xa())d.I=null,d.V=\n0,c.ha()&&c.Gb();else{var e=[];a.a.P(d.I,function(a,b){e[b.Ka]=a});a.a.D(e,function(a,b){var e=d.I[a],m=c.$c(e.da);m.Ka=b;m.La=e.La;d.I[a]=m});c.Xa()&&c.ha()&&c.Gb()}d.ra||c.notifySubscribers(d.X,\"awake\")}},hb:function(b){var c=this[r];c.ra||\"change\"!=b||this.Wa(\"change\")||(a.a.P(c.I,function(a,b){b.s&&(c.I[a]={da:b.da,Ka:b.Ka,La:b.La},b.s())}),c.J=!0,this.notifySubscribers(n,\"asleep\"))},ob:function(){var b=this[r];b.J&&(b.sa||this.Xa())&&this.ha();return a.T.fn.ob.call(this)}},ea={Qa:function(a){\"change\"!=\na&&\"beforeChange\"!=a||this.v()}};a.a.Ba&&a.a.setPrototypeOf(C,a.T.fn);var N=a.ta.Ma;C[N]=a.o;a.Oc=function(a){return\"function\"==typeof a&&a[N]===C[N]};a.Fd=function(b){return a.Oc(b)&&b[r]&&b[r].wb};a.b(\"computed\",a.o);a.b(\"dependentObservable\",a.o);a.b(\"isComputed\",a.Oc);a.b(\"isPureComputed\",a.Fd);a.b(\"computed.fn\",C);a.L(C,\"peek\",C.v);a.L(C,\"dispose\",C.s);a.L(C,\"isActive\",C.ja);a.L(C,\"getDependenciesCount\",C.qa);a.L(C,\"getDependencies\",C.Va);a.xb=function(b,c){if(\"function\"===typeof b)return a.o(b,\nc,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.o(b,c)};a.b(\"pureComputed\",a.xb);(function(){function b(a,f,g){g=g||new d;a=f(a);if(\"object\"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};g.save(a,h);c(a,function(c){var d=f(a[c]);switch(typeof d){case \"boolean\":case \"number\":case \"string\":case \"function\":h[c]=d;break;case \"object\":case \"undefined\":var l=g.get(d);h[c]=l!==\nn?l:b(d,f,g)}});return h}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);\"function\"==typeof a.toJSON&&b(\"toJSON\")}else for(c in a)b(c)}function d(){this.keys=[];this.values=[]}a.ad=function(c){if(0==arguments.length)throw Error(\"When calling ko.toJS, pass the object you want to convert.\");return b(c,function(b){for(var c=0;a.O(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.ad(b);return a.a.hc(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys,\nb);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b(\"toJS\",a.ad);a.b(\"toJSON\",a.toJSON);a.Wd=function(b,c,d){function e(c){var e=a.xb(b,d).extend({ma:\"always\"}),h=e.subscribe(function(a){a&&(h.s(),c(a))});e.notifySubscribers(e.v());return h}return\"function\"!==typeof Promise||c?e(c.bind(d)):new Promise(e)};a.b(\"when\",a.Wd);(function(){a.w={M:function(b){switch(a.a.R(b)){case \"option\":return!0===b.__ko__hasDomDataOptionValue__?\na.a.g.get(b,a.c.options.$b):7>=a.a.W?b.getAttributeNode(\"value\")&&b.getAttributeNode(\"value\").specified?b.value:b.text:b.value;case \"select\":return 0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex]):n;default:return b.value}},cb:function(b,c,d){switch(a.a.R(b)){case \"option\":\"string\"===typeof c?(a.a.g.set(b,a.c.options.$b,n),\"__ko__hasDomDataOptionValue__\"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=c):(a.a.g.set(b,a.c.options.$b,c),b.__ko__hasDomDataOptionValue__=!0,b.value=\"number\"===\ntypeof c?c:\"\");break;case \"select\":if(\"\"===c||null===c)c=n;for(var e=-1,f=0,g=b.options.length,h;f<g;++f)if(h=a.w.M(b.options[f]),h==c||\"\"===h&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e,6===a.a.W&&a.a.setTimeout(function(){b.selectedIndex=e},0);break;default:if(null===c||c===n)c=\"\";b.value=c}}}})();a.b(\"selectExtensions\",a.w);a.b(\"selectExtensions.readValue\",a.w.M);a.b(\"selectExtensions.writeValue\",a.w.cb);a.m=function(){function b(b){b=a.a.Db(b);123===b.charCodeAt(0)&&(b=b.slice(1,\n-1));b+=\"\\n,\";var c=[],d=b.match(e),p,q=[],h=0;if(1<d.length){for(var x=0,B;B=d[x];++x){var u=B.charCodeAt(0);if(44===u){if(0>=h){c.push(p&&q.length?{key:p,value:q.join(\"\")}:{unknown:p||q.join(\"\")});p=h=0;q=[];continue}}else if(58===u){if(!h&&!p&&1===q.length){p=q.pop();continue}}else if(47===u&&1<B.length&&(47===B.charCodeAt(1)||42===B.charCodeAt(1)))continue;else 47===u&&x&&1<B.length?(u=d[x-1].match(f))&&!g[u[0]]&&(b=b.substr(b.indexOf(B)+1),d=b.match(e),x=-1,B=\"/\"):40===u||123===u||91===u?++h:\n41===u||125===u||93===u?--h:p||q.length||34!==u&&39!==u||(B=B.slice(1,-1));q.push(B)}if(0<h)throw Error(\"Unbalanced parentheses, braces, or brackets\");}return c}var c=[\"true\",\"false\",\"null\",\"undefined\"],d=/^(?:[$_a-z][$\\w]*|(.+)(\\.\\s*[$_a-z][$\\w]*|\\[.+\\]))$/i,e=RegExp(\"\\\"(?:\\\\\\\\.|[^\\\"])*\\\"|'(?:\\\\\\\\.|[^'])*'|`(?:\\\\\\\\.|[^`])*`|/\\\\*(?:[^*]|\\\\*+[^*/])*\\\\*+/|//.*\\n|/(?:\\\\\\\\.|[^/])+/w*|[^\\\\s:,/][^,\\\"'`{}()/:[\\\\]]*[^\\\\s,\\\"'`{}()/:[\\\\]]|[^\\\\s]\",\"g\"),f=/[\\])\"'A-Za-z0-9_$]+$/,g={\"in\":1,\"return\":1,\"typeof\":1},\nh={};return{Ra:[],wa:h,ac:b,vb:function(e,f){function l(b,e){var f;if(!x){var k=a.getBindingHandler(b);if(k&&k.preprocess&&!(e=k.preprocess(e,b,l)))return;if(k=h[b])f=e,0<=a.a.A(c,f)?f=!1:(k=f.match(d),f=null===k?!1:k[1]?\"Object(\"+k[1]+\")\"+k[2]:f),k=f;k&&q.push(\"'\"+(\"string\"==typeof h[b]?h[b]:b)+\"':function(_z){\"+f+\"=_z}\")}g&&(e=\"function(){return \"+e+\" }\");p.push(\"'\"+b+\"':\"+e)}f=f||{};var p=[],q=[],g=f.valueAccessors,x=f.bindingParams,B=\"string\"===typeof e?b(e):e;a.a.D(B,function(a){l(a.key||a.unknown,\na.value)});q.length&&l(\"_ko_property_writers\",\"{\"+q.join(\",\")+\" }\");return p.join(\",\")},Id:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},eb:function(b,c,d,e,f){if(b&&a.O(b))!a.Za(b)||f&&b.v()===e||b(e);else if((b=c.get(\"_ko_property_writers\"))&&b[d])b[d](e)}}}();a.b(\"expressionRewriting\",a.m);a.b(\"expressionRewriting.bindingRewriteValidators\",a.m.Ra);a.b(\"expressionRewriting.parseObjectLiteral\",a.m.ac);a.b(\"expressionRewriting.preProcessBindings\",a.m.vb);a.b(\"expressionRewriting._twoWayBindings\",\na.m.wa);a.b(\"jsonExpressionRewriting\",a.m);a.b(\"jsonExpressionRewriting.insertPropertyAccessorsIntoJson\",a.m.vb);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function d(d,e){for(var f=d,h=1,g=[];f=f.nextSibling;){if(c(f)&&(a.a.g.set(f,k,!0),h--,0===h))return g;g.push(f);b(f)&&h++}if(!e)throw Error(\"Cannot find closing comment tag to match: \"+d.nodeValue);return null}function e(a,b){var c=d(a,b);return c?\n0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=w&&\"\\x3c!--test--\\x3e\"===w.createComment(\"test\").text,g=f?/^\\x3c!--\\s*ko(?:\\s+([\\s\\S]+))?\\s*--\\x3e$/:/^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/,h=f?/^\\x3c!--\\s*\\/ko\\s*--\\x3e$/:/^\\s*\\/ko\\s*$/,m={ul:!0,ol:!0},k=\"__ko_matchedEndComment__\";a.h={ea:{},childNodes:function(a){return b(a)?d(a):a.childNodes},Ea:function(c){if(b(c)){c=a.h.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Tb(c)},va:function(c,d){if(b(c)){a.h.Ea(c);for(var e=\nc.nextSibling,f=0,k=d.length;f<k;f++)e.parentNode.insertBefore(d[f],e)}else a.a.va(c,d)},Vc:function(a,c){var d;b(a)?(d=a.nextSibling,a=a.parentNode):d=a.firstChild;d?c!==d&&a.insertBefore(c,d):a.appendChild(c)},Wb:function(c,d,e){e?(e=e.nextSibling,b(c)&&(c=c.parentNode),e?d!==e&&c.insertBefore(d,e):c.appendChild(d)):a.h.Vc(c,d)},firstChild:function(a){if(b(a))return!a.nextSibling||c(a.nextSibling)?null:a.nextSibling;if(a.firstChild&&c(a.firstChild))throw Error(\"Found invalid end comment, as the first child of \"+\na);return a.firstChild},nextSibling:function(d){b(d)&&(d=e(d));if(d.nextSibling&&c(d.nextSibling)){var f=d.nextSibling;if(c(f)&&!a.a.g.get(f,k))throw Error(\"Found end comment without a matching opening comment, as child of \"+d);return null}return d.nextSibling},Cd:b,Vd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},Sc:function(d){if(m[a.a.R(d)]){var f=d.firstChild;if(f){do if(1===f.nodeType){var k;k=f.firstChild;var h=null;if(k){do if(h)h.push(k);else if(b(k)){var g=e(k,!0);g?k=\ng:h=[k]}else c(k)&&(h=[k]);while(k=k.nextSibling)}if(k=h)for(h=f.nextSibling,g=0;g<k.length;g++)h?d.insertBefore(k[g],h):d.appendChild(k[g])}while(f=f.nextSibling)}}}}})();a.b(\"virtualElements\",a.h);a.b(\"virtualElements.allowedBindings\",a.h.ea);a.b(\"virtualElements.emptyNode\",a.h.Ea);a.b(\"virtualElements.insertAfter\",a.h.Wb);a.b(\"virtualElements.prepend\",a.h.Vc);a.b(\"virtualElements.setDomNodeChildren\",a.h.va);(function(){a.ga=function(){this.nd={}};a.a.extend(a.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=\nb.getAttribute(\"data-bind\")||a.j.getComponentNameForNode(b);case 8:return a.h.Cd(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.j.tc(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.j.tc(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute(\"data-bind\");case 8:return a.h.Vd(b);default:return null}},\nparseBindingsString:function(b,c,d,e){try{var f=this.nd,g=b+(e&&e.valueAccessors||\"\"),h;if(!(h=f[g])){var m,k=\"with($context){with($data||{}){return{\"+a.m.vb(b,e)+\"}}}\";m=new Function(\"$context\",\"$element\",k);h=f[g]=m}return h(c,d)}catch(l){throw l.message=\"Unable to parse bindings.\\nBindings value: \"+b+\"\\nMessage: \"+l.message,l;}}});a.ga.instance=new a.ga})();a.b(\"bindingProvider\",a.ga);(function(){function b(b){var c=(b=a.a.g.get(b,z))&&b.N;c&&(b.N=null,c.Tc())}function c(c,d,e){this.node=c;this.yc=\nd;this.kb=[];this.H=!1;d.N||a.a.K.za(c,b);e&&e.N&&(e.N.kb.push(c),this.Kb=e)}function d(a){return function(){return a}}function e(a){return a()}function f(b){return a.a.Ga(a.u.G(b),function(a,c){return function(){return b()[c]}})}function g(b,c,e){return\"function\"===typeof b?f(b.bind(null,c,e)):a.a.Ga(b,d)}function h(a,b){return f(this.getBindings.bind(this,a,b))}function m(b,c){var d=a.h.firstChild(c);if(d){var e,f=a.ga.instance,l=f.preprocessNode;if(l){for(;e=d;)d=a.h.nextSibling(e),l.call(f,e);\nd=a.h.firstChild(c)}for(;e=d;)d=a.h.nextSibling(e),k(b,e)}a.i.ma(c,a.i.H)}function k(b,c){var d=b,e=1===c.nodeType;e&&a.h.Sc(c);if(e||a.ga.instance.nodeHasBindings(c))d=p(c,null,b).bindingContextForDescendants;d&&!u[a.a.R(c)]&&m(d,c)}function l(b){var c=[],d={},e=[];a.a.P(b,function ca(f){if(!d[f]){var k=a.getBindingHandler(f);k&&(k.after&&(e.push(f),a.a.D(k.after,function(c){if(b[c]){if(-1!==a.a.A(e,c))throw Error(\"Cannot combine the following bindings, because they have a cyclic dependency: \"+e.join(\", \"));\nca(c)}}),e.length--),c.push({key:f,Mc:k}));d[f]=!0}});return c}function p(b,c,d){var f=a.a.g.Ub(b,z,{}),k=f.hd;if(!c){if(k)throw Error(\"You cannot apply bindings multiple times to the same element.\");f.hd=!0}k||(f.context=d);f.Zb||(f.Zb={});var g;if(c&&\"function\"!==typeof c)g=c;else{var p=a.ga.instance,q=p.getBindingAccessors||h,m=a.$(function(){if(g=c?c(d,b):q.call(p,b,d)){if(d[t])d[t]();if(d[B])d[B]()}return g},null,{l:b});g&&m.ja()||(m=null)}var x=d,u;if(g){var J=function(){return a.a.Ga(m?m():\ng,e)},r=m?function(a){return function(){return e(m()[a])}}:function(a){return g[a]};J.get=function(a){return g[a]&&e(r(a))};J.has=function(a){return a in g};a.i.H in g&&a.i.subscribe(b,a.i.H,function(){var c=(0,g[a.i.H])();if(c){var d=a.h.childNodes(b);d.length&&c(d,a.Ec(d[0]))}});a.i.pa in g&&(x=a.i.Cb(b,d),a.i.subscribe(b,a.i.pa,function(){var c=(0,g[a.i.pa])();c&&a.h.firstChild(b)&&c(b)}));f=l(g);a.a.D(f,function(c){var d=c.Mc.init,e=c.Mc.update,f=c.key;if(8===b.nodeType&&!a.h.ea[f])throw Error(\"The binding '\"+\nf+\"' cannot be used with virtual elements\");try{\"function\"==typeof d&&a.u.G(function(){var a=d(b,r(f),J,x.$data,x);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error(\"Multiple bindings (\"+u+\" and \"+f+\") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.\");u=f}}),\"function\"==typeof e&&a.$(function(){e(b,r(f),J,x.$data,x)},null,{l:b})}catch(k){throw k.message='Unable to process binding \"'+f+\": \"+g[f]+'\"\\nMessage: '+k.message,\nk;}})}f=u===n;return{shouldBindDescendants:f,bindingContextForDescendants:f&&x}}function q(b,c){return b&&b instanceof a.fa?b:new a.fa(b,n,n,c)}var t=a.a.Da(\"_subscribable\"),x=a.a.Da(\"_ancestorBindingInfo\"),B=a.a.Da(\"_dataDependency\");a.c={};var u={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.c[b]};var J={};a.fa=function(b,c,d,e,f){function k(){var b=p?h():h,f=a.a.f(b);c?(a.a.extend(l,c),x in c&&(l[x]=c[x])):(l.$parents=[],l.$root=f,l.ko=a);l[t]=q;g?f=l.$data:(l.$rawData=\nb,l.$data=f);d&&(l[d]=f);e&&e(l,c,f);if(c&&c[t]&&!a.S.o().Vb(c[t]))c[t]();m&&(l[B]=m);return l.$data}var l=this,g=b===J,h=g?n:b,p=\"function\"==typeof h&&!a.O(h),q,m=f&&f.dataDependency;f&&f.exportDependencies?k():(q=a.xb(k),q.v(),q.ja()?q.equalityComparer=null:l[t]=n)};a.fa.prototype.createChildContext=function(b,c,d,e){!e&&c&&\"object\"==typeof c&&(e=c,c=e.as,d=e.extend);if(c&&e&&e.noChildContext){var f=\"function\"==typeof b&&!a.O(b);return new a.fa(J,this,null,function(a){d&&d(a);a[c]=f?b():b},e)}return new a.fa(b,\nthis,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)},e)};a.fa.prototype.extend=function(b,c){return new a.fa(J,this,null,function(c){a.a.extend(c,\"function\"==typeof b?b(c):b)},c)};var z=a.a.g.Z();c.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)};c.prototype.sd=function(b){a.a.Pa(this.kb,b);!this.kb.length&&this.H&&this.Cc()};c.prototype.Cc=function(){this.H=!0;this.yc.N&&!this.kb.length&&(this.yc.N=\nnull,a.a.K.yb(this.node,b),a.i.ma(this.node,a.i.pa),this.Tc())};a.i={H:\"childrenComplete\",pa:\"descendantsComplete\",subscribe:function(b,c,d,e,f){var k=a.a.g.Ub(b,z,{});k.Fa||(k.Fa=new a.T);f&&f.notifyImmediately&&k.Zb[c]&&a.u.G(d,e,[b]);return k.Fa.subscribe(d,e,c)},ma:function(b,c){var d=a.a.g.get(b,z);if(d&&(d.Zb[c]=!0,d.Fa&&d.Fa.notifySubscribers(b,c),c==a.i.H))if(d.N)d.N.Cc();else if(d.N===n&&d.Fa&&d.Fa.Wa(a.i.pa))throw Error(\"descendantsComplete event not supported for bindings on this node\");\n},Cb:function(b,d){var e=a.a.g.Ub(b,z,{});e.N||(e.N=new c(b,e,d[x]));return d[x]==e?d:d.extend(function(a){a[x]=e})}};a.Td=function(b){return(b=a.a.g.get(b,z))&&b.context};a.ib=function(b,c,d){1===b.nodeType&&a.h.Sc(b);return p(b,c,q(d))};a.ld=function(b,c,d){d=q(d);return a.ib(b,g(c,d,b),d)};a.Oa=function(a,b){1!==b.nodeType&&8!==b.nodeType||m(q(a),b)};a.vc=function(a,b,c){!v&&A.jQuery&&(v=A.jQuery);if(2>arguments.length){if(b=w.body,!b)throw Error(\"ko.applyBindings: could not find document.body; has the document been loaded?\");\n}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error(\"ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node\");k(q(a,c),b)};a.Dc=function(b){return!b||1!==b.nodeType&&8!==b.nodeType?n:a.Td(b)};a.Ec=function(b){return(b=a.Dc(b))?b.$data:n};a.b(\"bindingHandlers\",a.c);a.b(\"bindingEvent\",a.i);a.b(\"bindingEvent.subscribe\",a.i.subscribe);a.b(\"bindingEvent.startPossiblyAsyncContentBinding\",a.i.Cb);a.b(\"applyBindings\",a.vc);a.b(\"applyBindingsToDescendants\",a.Oa);\na.b(\"applyBindingAccessorsToNode\",a.ib);a.b(\"applyBindingsToNode\",a.ld);a.b(\"contextFor\",a.Dc);a.b(\"dataFor\",a.Ec)})();(function(b){function c(c,e){var k=Object.prototype.hasOwnProperty.call(f,c)?f[c]:b,l;k?k.subscribe(e):(k=f[c]=new a.T,k.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Gd:e};delete f[c];l||e?k.notifySubscribers(b):a.na.zb(function(){k.notifySubscribers(b)})}),l=!0)}function d(a,b){e(\"getConfig\",[a],function(c){c?e(\"loadComponent\",[a,c],function(a){b(a,\nc)}):b(null,null)})}function e(c,d,f,l){l||(l=a.j.loaders.slice(0));var g=l.shift();if(g){var q=g[c];if(q){var t=!1;if(q.apply(g,d.concat(function(a){t?f(null):null!==a?f(a):e(c,d,f,l)}))!==b&&(t=!0,!g.suppressLoaderExceptions))throw Error(\"Component loaders must supply values by invoking the callback, not by returning values synchronously.\");}else e(c,d,f,l)}else f(null)}var f={},g={};a.j={get:function(d,e){var f=Object.prototype.hasOwnProperty.call(g,d)?g[d]:b;f?f.Gd?a.u.G(function(){e(f.definition)}):\na.na.zb(function(){e(f.definition)}):c(d,e)},Bc:function(a){delete g[a]},oc:e};a.j.loaders=[];a.b(\"components\",a.j);a.b(\"components.get\",a.j.get);a.b(\"components.clearCachedDefinition\",a.j.Bc)})();(function(){function b(b,c,d,e){function g(){0===--B&&e(h)}var h={},B=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.j.oc(\"loadTemplate\",[b,c],function(a){h.template=a;g()})}):g();d?f(c,d,function(c){a.j.oc(\"loadViewModel\",[b,c],function(a){h[m]=a;g()})}):g()}function c(a,b,d){if(\"function\"===typeof b)d(function(a){return new b(a)});\nelse if(\"function\"===typeof b[m])d(b[m]);else if(\"instance\"in b){var e=b.instance;d(function(){return e})}else\"viewModel\"in b?c(a,b.viewModel,d):a(\"Unknown viewModel value: \"+b)}function d(b){switch(a.a.R(b)){case \"script\":return a.a.ua(b.text);case \"textarea\":return a.a.ua(b.value);case \"template\":if(e(b.content))return a.a.Ca(b.content.childNodes)}return a.a.Ca(b.childNodes)}function e(a){return A.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){\"string\"===typeof b.require?\nT||A.require?(T||A.require)([b.require],function(a){a&&\"object\"===typeof a&&a.Xd&&a[\"default\"]&&(a=a[\"default\"]);c(a)}):a(\"Uses require, but no AMD loader is present\"):c(b)}function g(a){return function(b){throw Error(\"Component '\"+a+\"': \"+b);}}var h={};a.j.register=function(b,c){if(!c)throw Error(\"Invalid configuration for \"+b);if(a.j.tb(b))throw Error(\"Component \"+b+\" is already registered\");h[b]=c};a.j.tb=function(a){return Object.prototype.hasOwnProperty.call(h,a)};a.j.unregister=function(b){delete h[b];\na.j.Bc(b)};a.j.Fc={getConfig:function(b,c){c(a.j.tb(b)?h[b]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if(\"string\"===typeof c)f(a.a.ua(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.la(c.childNodes));else if(c.element)if(c=c.element,A.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if(\"string\"===typeof c){var h=w.getElementById(c);h?f(d(h)):b(\"Cannot find element with ID \"+c)}else b(\"Unknown element type: \"+\nc);else b(\"Unknown template value: \"+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var m=\"createViewModel\";a.b(\"components.register\",a.j.register);a.b(\"components.isRegistered\",a.j.tb);a.b(\"components.unregister\",a.j.unregister);a.b(\"components.defaultLoader\",a.j.Fc);a.j.loaders.push(a.j.Fc);a.j.dd=h})();(function(){function b(b,e){var f=b.getAttribute(\"params\");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ga(f,function(c){return a.o(c,null,{l:b})}),g=a.a.Ga(f,\nfunction(c){var e=c.v();return c.ja()?a.o({read:function(){return a.a.f(c())},write:a.Za(e)&&function(a){c()(a)},l:b}):e});Object.prototype.hasOwnProperty.call(g,\"$raw\")||(g.$raw=f);return g}return{$raw:{}}}a.j.getComponentNameForNode=function(b){var c=a.a.R(b);if(a.j.tb(c)&&(-1!=c.indexOf(\"-\")||\"[object HTMLUnknownElement]\"==\"\"+b||8>=a.a.W&&b.tagName===c))return c};a.j.tc=function(c,e,f,g){if(1===e.nodeType){var h=a.j.getComponentNameForNode(e);if(h){c=c||{};if(c.component)throw Error('Cannot use the \"component\" binding on a custom element matching a component');\nvar m={name:h,params:b(e,f)};c.component=g?function(){return m}:m}}return c};var c=new a.ga;9>a.a.W&&(a.j.register=function(a){return function(b){return a.apply(this,arguments)}}(a.j.register),w.createDocumentFragment=function(b){return function(){var c=b(),f=a.j.dd,g;for(g in f);return c}}(w.createDocumentFragment))})();(function(){function b(b,c,d){c=c.template;if(!c)throw Error(\"Component '\"+b+\"' has no template\");b=a.a.Ca(c);a.h.va(d,b)}function c(a,b,c){var d=a.createViewModel;return d?d.call(a,\nb,c):b}var d=0;a.c.component={init:function(e,f,g,h,m){function k(){var a=l&&l.dispose;\"function\"===typeof a&&a.call(l);q&&q.s();p=l=q=null}var l,p,q,t=a.a.la(a.h.childNodes(e));a.h.Ea(e);a.a.K.za(e,k);a.o(function(){var g=a.a.f(f()),h,u;\"string\"===typeof g?h=g:(h=a.a.f(g.name),u=a.a.f(g.params));if(!h)throw Error(\"No component name specified\");var n=a.i.Cb(e,m),z=p=++d;a.j.get(h,function(d){if(p===z){k();if(!d)throw Error(\"Unknown component '\"+h+\"'\");b(h,d,e);var f=c(d,u,{element:e,templateNodes:t});\nd=n.createChildContext(f,{extend:function(a){a.$component=f;a.$componentTemplateNodes=t}});f&&f.koDescendantsComplete&&(q=a.i.subscribe(e,a.i.pa,f.koDescendantsComplete,f));l=f;a.Oa(d,e)}})},null,{l:e});return{controlsDescendantBindings:!0}}};a.h.ea.component=!0})();var V={\"class\":\"className\",\"for\":\"htmlFor\"};a.c.attr={update:function(b,c){var d=a.a.f(c())||{};a.a.P(d,function(c,d){d=a.a.f(d);var g=c.indexOf(\":\"),g=\"lookupNamespaceURI\"in b&&0<g&&b.lookupNamespaceURI(c.substr(0,g)),h=!1===d||null===\nd||d===n;h?g?b.removeAttributeNS(g,c):b.removeAttribute(c):d=d.toString();8>=a.a.W&&c in V?(c=V[c],h?b.removeAttribute(c):b[c]=d):h||(g?b.setAttributeNS(g,c,d):b.setAttribute(c,d));\"name\"===c&&a.a.Yc(b,h?\"\":d)})}};(function(){a.c.checked={after:[\"value\",\"attr\"],init:function(b,c,d){function e(){var e=b.checked,f=g();if(!a.S.Ya()&&(e||!m&&!a.S.qa())){var k=a.u.G(c);if(l){var q=p?k.v():k,z=t;t=f;z!==f?e&&(a.a.Na(q,f,!0),a.a.Na(q,z,!1)):a.a.Na(q,f,e);p&&a.Za(k)&&k(q)}else h&&(f===n?f=e:e||(f=n)),a.m.eb(k,\nd,\"checked\",f,!0)}}function f(){var d=a.a.f(c()),e=g();l?(b.checked=0<=a.a.A(d,e),t=e):b.checked=h&&e===n?!!d:g()===d}var g=a.xb(function(){if(d.has(\"checkedValue\"))return a.a.f(d.get(\"checkedValue\"));if(q)return d.has(\"value\")?a.a.f(d.get(\"value\")):b.value}),h=\"checkbox\"==b.type,m=\"radio\"==b.type;if(h||m){var k=c(),l=h&&a.a.f(k)instanceof Array,p=!(l&&k.push&&k.splice),q=m||l,t=l?g():n;m&&!b.name&&a.c.uniqueName.init(b,function(){return!0});a.o(e,null,{l:b});a.a.B(b,\"click\",e);a.o(f,null,{l:b});\nk=n}}};a.m.wa.checked=!0;a.c.checkedValue={update:function(b,c){b.value=a.a.f(c())}}})();a.c[\"class\"]={update:function(b,c){var d=a.a.Db(a.a.f(c()));a.a.Eb(b,b.__ko__cssValue,!1);b.__ko__cssValue=d;a.a.Eb(b,d,!0)}};a.c.css={update:function(b,c){var d=a.a.f(c());null!==d&&\"object\"==typeof d?a.a.P(d,function(c,d){d=a.a.f(d);a.a.Eb(b,c,d)}):a.c[\"class\"].update(b,c)}};a.c.enable={update:function(b,c){var d=a.a.f(c());d&&b.disabled?b.removeAttribute(\"disabled\"):d||b.disabled||(b.disabled=!0)}};a.c.disable=\n{update:function(b,c){a.c.enable.update(b,function(){return!a.a.f(c())})}};a.c.event={init:function(b,c,d,e,f){var g=c()||{};a.a.P(g,function(g){\"string\"==typeof g&&a.a.B(b,g,function(b){var k,l=c()[g];if(l){try{var p=a.a.la(arguments);e=f.$data;p.unshift(e);k=l.apply(e,p)}finally{!0!==k&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+\"Bubble\")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.c.foreach={Rc:function(b){return function(){var c=b(),d=a.a.bc(c);\nif(!d||\"number\"==typeof d.length)return{foreach:c,templateEngine:a.ba.Ma};a.a.f(c);return{foreach:d.data,as:d.as,noChildContext:d.noChildContext,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.ba.Ma}}},init:function(b,c){return a.c.template.init(b,a.c.foreach.Rc(c))},update:function(b,c,d,e,f){return a.c.template.update(b,a.c.foreach.Rc(c),d,e,f)}};a.m.Ra.foreach=!1;a.h.ea.foreach=\n!0;a.c.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if(\"activeElement\"in f){var g;try{g=f.activeElement}catch(l){g=f.body}e=g===b}f=c();a.m.eb(f,d,\"hasfocus\",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.B(b,\"focus\",f);a.a.B(b,\"focusin\",f);a.a.B(b,\"blur\",g);a.a.B(b,\"focusout\",g);b.__ko_hasfocusLastValue=!1},update:function(b,c){var d=!!a.a.f(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===\nd||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.u.G(a.a.Fb,null,[b,d?\"focusin\":\"focusout\"]))}};a.m.wa.hasfocus=!0;a.c.hasFocus=a.c.hasfocus;a.m.wa.hasFocus=\"hasfocus\";a.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.fc(b,c())}};(function(){function b(b,d,e){a.c[b]={init:function(b,c,h,m,k){var l,p,q={},t,x,n;if(d){m=h.get(\"as\");var u=h.get(\"noChildContext\");n=!(m&&u);q={as:m,noChildContext:u,exportDependencies:n}}x=(t=\n\"render\"==h.get(\"completeOn\"))||h.has(a.i.pa);a.o(function(){var h=a.a.f(c()),m=!e!==!h,u=!p,r;if(n||m!==l){x&&(k=a.i.Cb(b,k));if(m){if(!d||n)q.dataDependency=a.S.o();r=d?k.createChildContext(\"function\"==typeof h?h:c,q):a.S.qa()?k.extend(null,q):k}u&&a.S.qa()&&(p=a.a.Ca(a.h.childNodes(b),!0));m?(u||a.h.va(b,a.a.Ca(p)),a.Oa(r,b)):(a.h.Ea(b),t||a.i.ma(b,a.i.H));l=m}},null,{l:b});return{controlsDescendantBindings:!0}}};a.m.Ra[b]=!1;a.h.ea[b]=!0}b(\"if\");b(\"ifnot\",!1,!0);b(\"with\",!0)})();a.c.let={init:function(b,\nc,d,e,f){c=f.extend(c);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.let=!0;var Q={};a.c.options={init:function(b){if(\"select\"!==a.a.R(b))throw Error(\"options binding applies only to SELECT elements\");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.jb(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return\"function\"==d?b(a):\"string\"==d?a[b]:c}function g(c,d){if(x&&l)a.i.ma(b,a.i.H);else if(t.length){var e=\n0<=a.a.A(t,a.w.M(d[0]));a.a.Zc(d[0],e);x&&!e&&a.u.G(a.a.Fb,null,[b,\"change\"])}}var h=b.multiple,m=0!=b.length&&h?b.scrollTop:null,k=a.a.f(c()),l=d.get(\"valueAllowUnset\")&&d.has(\"value\"),p=d.get(\"optionsIncludeDestroyed\");c={};var q,t=[];l||(h?t=a.a.Mb(e(),a.w.M):0<=b.selectedIndex&&t.push(a.w.M(b.options[b.selectedIndex])));k&&(\"undefined\"==typeof k.length&&(k=[k]),q=a.a.jb(k,function(b){return p||b===n||null===b||!a.a.f(b._destroy)}),d.has(\"optionsCaption\")&&(k=a.a.f(d.get(\"optionsCaption\")),null!==\nk&&k!==n&&q.unshift(Q)));var x=!1;c.beforeRemove=function(a){b.removeChild(a)};k=g;d.has(\"optionsAfterRender\")&&\"function\"==typeof d.get(\"optionsAfterRender\")&&(k=function(b,c){g(0,c);a.u.G(d.get(\"optionsAfterRender\"),null,[c[0],b!==Q?b:n])});a.a.ec(b,q,function(c,e,g){g.length&&(t=!l&&g[0].selected?[a.w.M(g[0])]:[],x=!0);e=b.ownerDocument.createElement(\"option\");c===Q?(a.a.Bb(e,d.get(\"optionsCaption\")),a.w.cb(e,n)):(g=f(c,d.get(\"optionsValue\"),c),a.w.cb(e,a.a.f(g)),c=f(c,d.get(\"optionsText\"),g),\na.a.Bb(e,c));return[e]},c,k);if(!l){var B;h?B=t.length&&e().length<t.length:B=t.length&&0<=b.selectedIndex?a.w.M(b.options[b.selectedIndex])!==t[0]:t.length||0<=b.selectedIndex;B&&a.u.G(a.a.Fb,null,[b,\"change\"])}(l||a.S.Ya())&&a.i.ma(b,a.i.H);a.a.wd(b);m&&20<Math.abs(m-b.scrollTop)&&(b.scrollTop=m)}};a.c.options.$b=a.a.g.Z();a.c.selectedOptions={init:function(b,c,d){function e(){var e=c(),f=[];a.a.D(b.getElementsByTagName(\"option\"),function(b){b.selected&&f.push(a.w.M(b))});a.m.eb(e,d,\"selectedOptions\",\nf)}function f(){var d=a.a.f(c()),e=b.scrollTop;d&&\"number\"==typeof d.length&&a.a.D(b.getElementsByTagName(\"option\"),function(b){var c=0<=a.a.A(d,a.w.M(b));b.selected!=c&&a.a.Zc(b,c)});b.scrollTop=e}if(\"select\"!=a.a.R(b))throw Error(\"selectedOptions binding applies only to SELECT elements\");var g;a.i.subscribe(b,a.i.H,function(){g?e():(a.a.B(b,\"change\",e),g=a.o(f,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}};a.m.wa.selectedOptions=!0;a.c.style={update:function(b,c){var d=a.a.f(c()||\n{});a.a.P(d,function(c,d){d=a.a.f(d);if(null===d||d===n||!1===d)d=\"\";if(v)v(b).css(c,d);else if(/^--/.test(c))b.style.setProperty(c,d);else{c=c.replace(/-(\\w)/g,function(a,b){return b.toUpperCase()});var g=b.style[c];b.style[c]=d;d===g||b.style[c]!=g||isNaN(d)||(b.style[c]=d+\"px\")}})}};a.c.submit={init:function(b,c,d,e,f){if(\"function\"!=typeof c())throw Error(\"The value for a submit binding must be a function\");a.a.B(b,\"submit\",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?\na.preventDefault():a.returnValue=!1)}})}};a.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Bb(b,c())}};a.h.ea.text=!0;(function(){if(A&&A.navigator){var b=function(a){if(a)return parseFloat(a[1])},c=A.navigator.userAgent,d,e,f,g,h;(d=A.opera&&A.opera.version&&parseInt(A.opera.version()))||(h=b(c.match(/Edge\\/([^ ]+)$/)))||b(c.match(/Chrome\\/([^ ]+)/))||(e=b(c.match(/Version\\/([^ ]+) Safari/)))||(f=b(c.match(/Firefox\\/([^ ]+)/)))||(g=a.a.W||b(c.match(/MSIE ([^ ]+)/)))||\n(g=b(c.match(/rv:([^ )]+)/)))}if(8<=g&&10>g)var m=a.a.g.Z(),k=a.a.g.Z(),l=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,k))&&c(b)},p=function(b,c){var d=b.ownerDocument;a.a.g.get(d,m)||(a.a.g.set(d,m,!0),a.a.B(d,\"selectionchange\",l));a.a.g.set(b,k,c)};a.c.textInput={init:function(b,c,k){function l(c,d){a.a.B(b,c,d)}function m(){var d=a.a.f(c());if(null===d||d===n)d=\"\";L!==n&&d===L?a.a.setTimeout(m,4):b.value!==d&&(y=!0,b.value=d,y=!1,v=b.value)}function r(){w||(L=b.value,w=a.a.setTimeout(z,\n4))}function z(){clearTimeout(w);L=w=n;var d=b.value;v!==d&&(v=d,a.m.eb(c(),k,\"textInput\",d))}var v=b.value,w,L,A=9==a.a.W?r:z,y=!1;g&&l(\"keypress\",z);11>g&&l(\"propertychange\",function(a){y||\"value\"!==a.propertyName||A(a)});8==g&&(l(\"keyup\",z),l(\"keydown\",z));p&&(p(b,A),l(\"dragend\",r));(!g||9<=g)&&l(\"input\",A);5>e&&\"textarea\"===a.a.R(b)?(l(\"keydown\",r),l(\"paste\",r),l(\"cut\",r)):11>d?l(\"keydown\",r):4>f?(l(\"DOMAutoComplete\",z),l(\"dragdrop\",z),l(\"drop\",z)):h&&\"number\"===b.type&&l(\"keydown\",r);l(\"change\",\nz);l(\"blur\",z);a.o(m,null,{l:b})}};a.m.wa.textInput=!0;a.c.textinput={preprocess:function(a,b,c){c(\"textInput\",a)}}})();a.c.uniqueName={init:function(b,c){if(c()){var d=\"ko_unique_\"+ ++a.c.uniqueName.rd;a.a.Yc(b,d)}}};a.c.uniqueName.rd=0;a.c.using={init:function(b,c,d,e,f){var g;d.has(\"as\")&&(g={as:d.get(\"as\"),noChildContext:d.get(\"noChildContext\")});c=f.createChildContext(c,g);a.Oa(c,b);return{controlsDescendantBindings:!0}}};a.h.ea.using=!0;a.c.value={init:function(b,c,d){var e=a.a.R(b),f=\"input\"==\ne;if(!f||\"checkbox\"!=b.type&&\"radio\"!=b.type){var g=[],h=d.get(\"valueUpdate\"),m=!1,k=null;h&&(\"string\"==typeof h?g=[h]:g=a.a.wc(h),a.a.Pa(g,\"change\"));var l=function(){k=null;m=!1;var e=c(),f=a.w.M(b);a.m.eb(e,d,\"value\",f)};!a.a.W||!f||\"text\"!=b.type||\"off\"==b.autocomplete||b.form&&\"off\"==b.form.autocomplete||-1!=a.a.A(g,\"propertychange\")||(a.a.B(b,\"propertychange\",function(){m=!0}),a.a.B(b,\"focus\",function(){m=!1}),a.a.B(b,\"blur\",function(){m&&l()}));a.a.D(g,function(c){var d=l;a.a.Ud(c,\"after\")&&\n(d=function(){k=a.w.M(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.B(b,c,d)});var p;p=f&&\"file\"==b.type?function(){var d=a.a.f(c());null===d||d===n||\"\"===d?b.value=\"\":a.u.G(l)}:function(){var f=a.a.f(c()),g=a.w.M(b);if(null!==k&&f===k)a.a.setTimeout(p,0);else if(f!==g||g===n)\"select\"===e?(g=d.get(\"valueAllowUnset\"),a.w.cb(b,f,g),g||f===a.w.M(b)||a.u.G(l)):a.w.cb(b,f)};if(\"select\"===e){var q;a.i.subscribe(b,a.i.H,function(){q?d.get(\"valueAllowUnset\")?p():l():(a.a.B(b,\"change\",l),q=a.o(p,null,{l:b}))},\nnull,{notifyImmediately:!0})}else a.a.B(b,\"change\",l),a.o(p,null,{l:b})}else a.ib(b,{checkedValue:c})},update:function(){}};a.m.wa.value=!0;a.c.visible={update:function(b,c){var d=a.a.f(c()),e=\"none\"!=b.style.display;d&&!e?b.style.display=\"\":!d&&e&&(b.style.display=\"none\")}};a.c.hidden={update:function(b,c){a.c.visible.update(b,function(){return!a.a.f(c())})}};(function(b){a.c[b]={init:function(c,d,e,f,g){return a.c.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})(\"click\");\na.ca=function(){};a.ca.prototype.renderTemplateSource=function(){throw Error(\"Override renderTemplateSource\");};a.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error(\"Override createJavaScriptEvaluatorBlock\");};a.ca.prototype.makeTemplateSource=function(b,c){if(\"string\"==typeof b){c=c||w;var d=c.getElementById(b);if(!d)throw Error(\"Cannot find template with ID \"+b);return new a.C.F(d)}if(1==b.nodeType||8==b.nodeType)return new a.C.ia(b);throw Error(\"Unknown template type: \"+b);};a.ca.prototype.renderTemplate=\nfunction(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.ca.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data(\"isRewritten\")};a.ca.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data(\"isRewritten\",!0)};a.b(\"templateEngine\",a.ca);a.kc=function(){function b(b,c,d,h){b=a.m.ac(b);for(var m=a.m.Ra,k=0;k<b.length;k++){var l=b[k].key;if(Object.prototype.hasOwnProperty.call(m,\nl)){var p=m[l];if(\"function\"===typeof p){if(l=p(b[k].value))throw Error(l);}else if(!p)throw Error(\"This template engine does not support the '\"+l+\"' binding within its templates\");}}d=\"ko.__tr_ambtns(function($context,$element){return(function(){return{ \"+a.m.vb(b,{valueAccessors:!0})+\" } })()},'\"+d.toLowerCase()+\"')\";return h.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\\d*)(?:\\s+(?!data-bind\\s*=\\s*)[a-z0-9\\-]+(?:=(?:\\\"[^\\\"]*\\\"|\\'[^\\']*\\'|[^>]*))?)*\\s+)data-bind\\s*=\\s*([\"'])([\\s\\S]*?)\\3/gi,\nd=/\\x3c!--\\s*ko\\b\\s*([\\s\\S]*?)\\s*--\\x3e/g;return{xd:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kc.Ld(b,c)},d)},Ld:function(a,f){return a.replace(c,function(a,c,d,e,l){return b(l,c,d,f)}).replace(d,function(a,c){return b(c,\"\\x3c!-- ko --\\x3e\",\"#comment\",f)})},md:function(b,c){return a.aa.Xb(function(d,h){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.ib(m,b,h)})}}}();a.b(\"__tr_ambtns\",a.kc.md);(function(){a.C={};a.C.F=function(b){if(this.F=b){var c=\na.a.R(b);this.ab=\"script\"===c?1:\"textarea\"===c?2:\"template\"==c&&b.content&&11===b.content.nodeType?3:4}};a.C.F.prototype.text=function(){var b=1===this.ab?\"text\":2===this.ab?\"value\":\"innerHTML\";if(0==arguments.length)return this.F[b];var c=arguments[0];\"innerHTML\"===b?a.a.fc(this.F,c):this.F[b]=c};var b=a.a.g.Z()+\"_\";a.C.F.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.F,b+c);a.a.g.set(this.F,b+c,arguments[1])};var c=a.a.g.Z();a.C.F.prototype.nodes=function(){var b=this.F;\nif(0==arguments.length){var e=a.a.g.get(b,c)||{},f=e.lb||(3===this.ab?b.content:4===this.ab?b:n);if(!f||e.jd){var g=this.text();g&&g!==e.bb&&(f=a.a.Md(g,b.ownerDocument),a.a.g.set(b,c,{lb:f,bb:g,jd:!0}))}return f}e=arguments[0];this.ab!==n&&this.text(\"\");a.a.g.set(b,c,{lb:e})};a.C.ia=function(a){this.F=a};a.C.ia.prototype=new a.C.F;a.C.ia.prototype.constructor=a.C.ia;a.C.ia.prototype.text=function(){if(0==arguments.length){var b=a.a.g.get(this.F,c)||{};b.bb===n&&b.lb&&(b.bb=b.lb.innerHTML);return b.bb}a.a.g.set(this.F,\nc,{bb:arguments[0]})};a.b(\"templateSources\",a.C);a.b(\"templateSources.domElement\",a.C.F);a.b(\"templateSources.anonymousTemplate\",a.C.ia)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.ga.instance,m=h.preprocessNode;if(m){b(e,f,function(a,b){var c=a.previousSibling,d=m.call(h,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):\n(c.push(e,f),a.a.Ua(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.vc(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.aa.cd(b,[d])});a.a.Ua(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,m){m=m||{};var n=(b&&d(b)||f||{}).ownerDocument,B=m.templateEngine||g;a.kc.xd(f,B,n);f=B.renderTemplate(f,h,m,n);if(\"number\"!=typeof f.length||0<f.length&&\"number\"!=typeof f[0].nodeType)throw Error(\"Template engine must return an array of DOM nodes\");n=!1;switch(e){case \"replaceChildren\":a.h.va(b,\nf);n=!0;break;case \"replaceNode\":a.a.Xc(b,f);n=!0;break;case \"ignoreTargetNode\":break;default:throw Error(\"Unknown renderMode: \"+e);}n&&(c(f,h),m.afterRender&&a.u.G(m.afterRender,null,[f,h[m.as||\"$data\"]]),\"replaceChildren\"==e&&a.i.ma(b,a.i.H));return f}function f(b,c,d){return a.O(b)?b():\"function\"===typeof b?b(c,d):b}var g;a.gc=function(b){if(b!=n&&!(b instanceof a.ca))throw Error(\"templateEngine must inherit from ko.templateEngine\");g=b};a.dc=function(b,c,h,m,t){h=h||{};if((h.templateEngine||g)==\nn)throw Error(\"Set a template engine before calling renderTemplate\");t=t||\"replaceChildren\";if(m){var x=d(m);return a.$(function(){var g=c&&c instanceof a.fa?c:new a.fa(c,null,null,null,{exportDependencies:!0}),n=f(b,g.$data,g),g=e(m,t,n,g,h);\"replaceNode\"==t&&(m=g,x=d(m))},null,{Sa:function(){return!x||!a.a.Sb(x)},l:x&&\"replaceNode\"==t?x.parentNode:x})}return a.aa.Xb(function(d){a.dc(b,c,h,d,\"replaceNode\")})};a.Qd=function(b,d,g,h,m){function x(b,c){a.u.G(a.a.ec,null,[h,b,u,g,r,c]);a.i.ma(h,a.i.H)}\nfunction r(a,b){c(b,v);g.afterRender&&g.afterRender(b,a);v=null}function u(a,c){v=m.createChildContext(a,{as:z,noChildContext:g.noChildContext,extend:function(a){a.$index=c;z&&(a[z+\"Index\"]=c)}});var d=f(b,a,v);return e(h,\"ignoreTargetNode\",d,v,g)}var v,z=g.as,w=!1===g.includeDestroyed||a.options.foreachHidesDestroyed&&!g.includeDestroyed;if(w||g.beforeRemove||!a.Pc(d))return a.$(function(){var b=a.a.f(d)||[];\"undefined\"==typeof b.length&&(b=[b]);w&&(b=a.a.jb(b,function(b){return b===n||null===b||\n!a.a.f(b._destroy)}));x(b)},null,{l:h});x(d.v());var A=d.subscribe(function(a){x(d(),a)},null,\"arrayChange\");A.l(h);return A};var h=a.a.g.Z(),m=a.a.g.Z();a.c.template={init:function(b,c){var d=a.a.f(c());if(\"string\"==typeof d||\"name\"in d)a.h.Ea(b);else if(\"nodes\"in d){d=d.nodes||[];if(a.O(d))throw Error('The \"nodes\" option must be a plain, non-observable array.');var e=d[0]&&d[0].parentNode;e&&a.a.g.get(e,m)||(e=a.a.Yb(d),a.a.g.set(e,m,!0));(new a.C.ia(b)).nodes(e)}else if(d=a.h.childNodes(b),0<d.length)e=\na.a.Yb(d),(new a.C.ia(b)).nodes(e);else throw Error(\"Anonymous template defined, but no template content was provided\");return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c();c=a.a.f(g);d=!0;e=null;\"string\"==typeof c?c={}:(g=\"name\"in c?c.name:b,\"if\"in c&&(d=a.a.f(c[\"if\"])),d&&\"ifnot\"in c&&(d=!a.a.f(c.ifnot)),d&&!g&&(d=!1));\"foreach\"in c?e=a.Qd(g,d&&c.foreach||[],c,b,f):d?(d=f,\"data\"in c&&(d=f.createChildContext(c.data,{as:c.as,noChildContext:c.noChildContext,exportDependencies:!0})),\ne=a.dc(g,d,c,b)):a.h.Ea(b);f=e;(c=a.a.g.get(b,h))&&\"function\"==typeof c.s&&c.s();a.a.g.set(b,h,!f||f.ja&&!f.ja()?n:f)}};a.m.Ra.template=function(b){b=a.m.ac(b);return 1==b.length&&b[0].unknown||a.m.Id(b,\"name\")?null:\"This template engine does not support anonymous templates nested within its templates\"};a.h.ea.template=!0})();a.b(\"setTemplateEngine\",a.gc);a.b(\"renderTemplate\",a.dc);a.a.Kc=function(a,c,d){if(a.length&&c.length){var e,f,g,h,m;for(e=f=0;(!d||e<d)&&(h=a[f]);++f){for(g=0;m=c[g];++g)if(h.value===\nm.value){h.moved=m.index;m.moved=h.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.Pb=function(){function b(b,d,e,f,g){var h=Math.min,m=Math.max,k=[],l,p=b.length,q,n=d.length,r=n-p||1,v=p+n+1,u,w,z;for(l=0;l<=p;l++)for(w=u,k.push(u=[]),z=h(n,l+r),q=m(0,l-1);q<=z;q++)u[q]=q?l?b[l-1]===d[q-1]?w[q-1]:h(w[q]||v,u[q-1]||v)+1:q+1:l+1;h=[];m=[];r=[];l=p;for(q=n;l||q;)n=k[l][q]-1,q&&n===k[l][q-1]?m.push(h[h.length]={status:e,value:d[--q],index:q}):l&&n===k[l-1][q]?r.push(h[h.length]={status:f,value:b[--l],index:l}):\n(--q,--l,g.sparse||h.push({status:\"retained\",value:d[q]}));a.a.Kc(r,m,!g.dontLimitMoves&&10*p);return h.reverse()}return function(a,d,e){e=\"boolean\"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,\"added\",\"deleted\",e):b(d,a,\"deleted\",\"added\",e)}}();a.b(\"utils.compareArrays\",a.a.Pb);(function(){function b(b,c,d,h,m){var k=[],l=a.$(function(){var l=c(d,m,a.a.Ua(k,b))||[];0<k.length&&(a.a.Xc(k,l),h&&a.u.G(h,null,[d,l,m]));k.length=0;a.a.Nb(k,l)},null,{l:b,Sa:function(){return!a.a.kd(k)}});\nreturn{Y:k,$:l.ja()?l:n}}var c=a.a.g.Z(),d=a.a.g.Z();a.a.ec=function(e,f,g,h,m,k){function l(b){y={Aa:b,pb:a.ta(w++)};v.push(y);r||F.push(y)}function p(b){y=t[b];w!==y.pb.v()&&D.push(y);y.pb(w++);a.a.Ua(y.Y,e);v.push(y)}function q(b,c){if(b)for(var d=0,e=c.length;d<e;d++)a.a.D(c[d].Y,function(a){b(a,d,c[d].Aa)})}f=f||[];\"undefined\"==typeof f.length&&(f=[f]);h=h||{};var t=a.a.g.get(e,c),r=!t,v=[],u=0,w=0,z=[],A=[],C=[],D=[],F=[],y,I=0;if(r)a.a.D(f,l);else{if(!k||t&&t._countWaitingForRemove){var E=\na.a.Mb(t,function(a){return a.Aa});k=a.a.Pb(E,f,{dontLimitMoves:h.dontLimitMoves,sparse:!0})}for(var E=0,G,H,K;G=k[E];E++)switch(H=G.moved,K=G.index,G.status){case \"deleted\":for(;u<K;)p(u++);H===n&&(y=t[u],y.$&&(y.$.s(),y.$=n),a.a.Ua(y.Y,e).length&&(h.beforeRemove&&(v.push(y),I++,y.Aa===d?y=null:C.push(y)),y&&z.push.apply(z,y.Y)));u++;break;case \"added\":for(;w<K;)p(u++);H!==n?(A.push(v.length),p(H)):l(G.value)}for(;w<f.length;)p(u++);v._countWaitingForRemove=I}a.a.g.set(e,c,v);q(h.beforeMove,D);a.a.D(z,\nh.beforeRemove?a.oa:a.removeNode);var M,O,P;try{P=e.ownerDocument.activeElement}catch(N){}if(A.length)for(;(E=A.shift())!=n;){y=v[E];for(M=n;E;)if((O=v[--E].Y)&&O.length){M=O[O.length-1];break}for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M)}for(E=0;y=v[E];E++){y.Y||a.a.extend(y,b(e,g,y.Aa,m,y.pb));for(f=0;u=y.Y[f];M=u,f++)a.h.Wb(e,u,M);!y.Ed&&m&&(m(y.Aa,y.Y,y.pb),y.Ed=!0,M=y.Y[y.Y.length-1])}P&&e.ownerDocument.activeElement!=P&&P.focus();q(h.beforeRemove,C);for(E=0;E<C.length;++E)C[E].Aa=d;q(h.afterMove,D);\nq(h.afterAdd,F)}})();a.b(\"utils.setDomNodeChildrenFromArrayMapping\",a.a.ec);a.ba=function(){this.allowTemplateRewriting=!1};a.ba.prototype=new a.ca;a.ba.prototype.constructor=a.ba;a.ba.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.W?0:b.nodes)?b.nodes():null)return a.a.la(c.cloneNode(!0).childNodes);b=b.text();return a.a.ua(b,e)};a.ba.Ma=new a.ba;a.gc(a.ba.Ma);a.b(\"nativeTemplateEngine\",a.ba);(function(){a.$a=function(){var a=this.Hd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf(\"__\"))return 2}catch(a){}return 1}();\nthis.renderTemplateSource=function(b,e,f,g){g=g||w;f=f||{};if(2>a)throw Error(\"Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.\");var h=b.data(\"precompiled\");h||(h=b.text()||\"\",h=v.template(null,\"{{ko_with $item.koBindingContext}}\"+h+\"{{/ko_with}}\"),b.data(\"precompiled\",h));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(h,b,e);e.appendTo(g.createElement(\"div\"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return\"{{ko_code ((function() { return \"+\na+\" })()) }}\"};this.addTemplate=function(a,b){w.write(\"<script type='text/html' id='\"+a+\"'>\"+b+\"\\x3c/script>\")};0<a&&(v.tmpl.tag.ko_code={open:\"__.push($1 || '');\"},v.tmpl.tag.ko_with={open:\"with($1) {\",close:\"} \"})};a.$a.prototype=new a.ca;a.$a.prototype.constructor=a.$a;var b=new a.$a;0<b.Hd&&a.gc(b);a.b(\"jqueryTmplTemplateEngine\",a.$a)})()})})();})();\n\n})();\n\n// Avoid polluting the global scope.\nvar knockout = ko;\nif (typeof window !== 'undefined') {\n    ko = window.ko;\n    if (typeof oldValue !== 'undefined') {\n        window.ko = oldValue;\n    } else {\n        delete window.ko;\n    }\n} else {\n    ko = global.ko;\n    if (typeof oldValue !== 'undefined') {\n        global.ko = oldValue;\n    } else {\n        delete global.ko;\n    }\n}\n\nexport default knockout;\n","/**\n * @license\n * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5\n * Copyright (c) Steve Sanderson\n * MIT license\n */\n\n    var OBSERVABLES_PROPERTY = '__knockoutObservables';\n    var SUBSCRIBABLE_PROPERTY = '__knockoutSubscribable';\n\n    // Model tracking\n    // --------------\n    //\n    // This is the central feature of Knockout-ES5. We augment model objects by converting properties\n    // into ES5 getter/setter pairs that read/write an underlying Knockout observable. This means you can\n    // use plain JavaScript syntax to read/write the property while still getting the full benefits of\n    // Knockout's automatic dependency detection and notification triggering.\n    //\n    // For comparison, here's Knockout ES3-compatible syntax:\n    //\n    //     var firstNameLength = myModel.user().firstName().length; // Read\n    //     myModel.user().firstName('Bert'); // Write\n    //\n    // ... versus Knockout-ES5 syntax:\n    //\n    //     var firstNameLength = myModel.user.firstName.length; // Read\n    //     myModel.user.firstName = 'Bert'; // Write\n\n    // `ko.track(model)` converts each property on the given model object into a getter/setter pair that\n    // wraps a Knockout observable. Optionally specify an array of property names to wrap; otherwise we\n    // wrap all properties. If any of the properties are already observables, we replace them with\n    // ES5 getter/setter pairs that wrap your original observable instances. In the case of readonly\n    // ko.computed properties, we simply do not define a setter (so attempted writes will be ignored,\n    // which is how ES5 readonly properties normally behave).\n    //\n    // By design, this does *not* recursively walk child object properties, because making literally\n    // everything everywhere independently observable is usually unhelpful. When you do want to track\n    // child object properties independently, define your own class for those child objects and put\n    // a separate ko.track call into its constructor --- this gives you far more control.\n    function track(obj, propertyNames) {\n        if (!obj /*|| typeof obj !== 'object'*/) {\n            throw new Error('When calling ko.track, you must pass an object as the first parameter.');\n        }\n\n        var ko = this,\n            allObservablesForObject = getAllObservablesForObject(obj, true);\n        propertyNames = propertyNames || Object.getOwnPropertyNames(obj);\n\n        propertyNames.forEach(function(propertyName) {\n            // Skip storage properties\n            if (propertyName === OBSERVABLES_PROPERTY || propertyName === SUBSCRIBABLE_PROPERTY) {\n                return;\n            }\n            // Skip properties that are already tracked\n            if (propertyName in allObservablesForObject) {\n                return;\n            }\n\n            var origValue = obj[propertyName],\n                isArray = origValue instanceof Array,\n                observable = ko.isObservable(origValue) ? origValue\n                                              : isArray ? ko.observableArray(origValue)\n                                                        : ko.observable(origValue);\n\n            Object.defineProperty(obj, propertyName, {\n                configurable: true,\n                enumerable: true,\n                get: observable,\n                set: ko.isWriteableObservable(observable) ? observable : undefined\n            });\n\n            allObservablesForObject[propertyName] = observable;\n\n            if (isArray) {\n                notifyWhenPresentOrFutureArrayValuesMutate(ko, observable);\n            }\n        });\n\n        return obj;\n    }\n\n    // Gets or creates the hidden internal key-value collection of observables corresponding to\n    // properties on the model object.\n    function getAllObservablesForObject(obj, createIfNotDefined) {\n        var result = obj[OBSERVABLES_PROPERTY];\n        if (!result && createIfNotDefined) {\n            result = {};\n            Object.defineProperty(obj, OBSERVABLES_PROPERTY, {\n                value : result\n            });\n        }\n        return result;\n    }\n\n    // Computed properties\n    // -------------------\n    //\n    // The preceding code is already sufficient to upgrade ko.computed model properties to ES5\n    // getter/setter pairs (or in the case of readonly ko.computed properties, just a getter).\n    // These then behave like a regular property with a getter function, except they are smarter:\n    // your evaluator is only invoked when one of its dependencies changes. The result is cached\n    // and used for all evaluations until the next time a dependency changes).\n    //\n    // However, instead of forcing developers to declare a ko.computed property explicitly, it's\n    // nice to offer a utility function that declares a computed getter directly.\n\n    // Implements `ko.defineProperty`\n    function defineComputedProperty(obj, propertyName, evaluatorOrOptions) {\n        var ko = this,\n            computedOptions = { owner: obj, deferEvaluation: true };\n\n        if (typeof evaluatorOrOptions === 'function') {\n            computedOptions.read = evaluatorOrOptions;\n        } else {\n            if ('value' in evaluatorOrOptions) {\n                throw new Error('For ko.defineProperty, you must not specify a \"value\" for the property. You must provide a \"get\" function.');\n            }\n\n            if (typeof evaluatorOrOptions.get !== 'function') {\n                throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called \"get\".');\n            }\n\n            computedOptions.read = evaluatorOrOptions.get;\n            computedOptions.write = evaluatorOrOptions.set;\n        }\n\n        obj[propertyName] = ko.computed(computedOptions);\n        track.call(ko, obj, [propertyName]);\n        return obj;\n    }\n\n    // Array handling\n    // --------------\n    //\n    // Arrays are special, because unlike other property types, they have standard mutator functions\n    // (`push`/`pop`/`splice`/etc.) and it's desirable to trigger a change notification whenever one of\n    // those mutator functions is invoked.\n    //\n    // Traditionally, Knockout handles this by putting special versions of `push`/`pop`/etc. on observable\n    // arrays that mutate the underlying array and then trigger a notification. That approach doesn't\n    // work for Knockout-ES5 because properties now return the underlying arrays, so the mutator runs\n    // in the context of the underlying array, not any particular observable:\n    //\n    //     // Operates on the underlying array value\n    //     myModel.someCollection.push('New value');\n    //\n    // To solve this, Knockout-ES5 detects array values, and modifies them as follows:\n    //  1. Associates a hidden subscribable with each array instance that it encounters\n    //  2. Intercepts standard mutators (`push`/`pop`/etc.) and makes them trigger the subscribable\n    // Then, for model properties whose values are arrays, the property's underlying observable\n    // subscribes to the array subscribable, so it can trigger a change notification after mutation.\n\n    // Given an observable that underlies a model property, watch for any array value that might\n    // be assigned as the property value, and hook into its change events\n    function notifyWhenPresentOrFutureArrayValuesMutate(ko, observable) {\n        var watchingArraySubscription = null;\n        ko.computed(function () {\n            // Unsubscribe to any earlier array instance\n            if (watchingArraySubscription) {\n                watchingArraySubscription.dispose();\n                watchingArraySubscription = null;\n            }\n\n            // Subscribe to the new array instance\n            var newArrayInstance = observable();\n            if (newArrayInstance instanceof Array) {\n                watchingArraySubscription = startWatchingArrayInstance(ko, observable, newArrayInstance);\n            }\n        });\n    }\n\n    // Listens for array mutations, and when they happen, cause the observable to fire notifications.\n    // This is used to make model properties of type array fire notifications when the array changes.\n    // Returns a subscribable that can later be disposed.\n    function startWatchingArrayInstance(ko, observable, arrayInstance) {\n        var subscribable = getSubscribableForArray(ko, arrayInstance);\n        return subscribable.subscribe(observable);\n    }\n\n    // Gets or creates a subscribable that fires after each array mutation\n    function getSubscribableForArray(ko, arrayInstance) {\n        var subscribable = arrayInstance[SUBSCRIBABLE_PROPERTY];\n        if (!subscribable) {\n            subscribable = new ko.subscribable();\n            Object.defineProperty(arrayInstance, SUBSCRIBABLE_PROPERTY, {\n                value : subscribable\n            });\n\n            var notificationPauseSignal = {};\n            wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal);\n            addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal);\n        }\n\n        return subscribable;\n    }\n\n    // After each array mutation, fires a notification on the given subscribable\n    function wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal) {\n        ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'].forEach(function(fnName) {\n            var origMutator = arrayInstance[fnName];\n            arrayInstance[fnName] = function() {\n                var result = origMutator.apply(this, arguments);\n                if (notificationPauseSignal.pause !== true) {\n                    subscribable.notifySubscribers(this);\n                }\n                return result;\n            };\n        });\n    }\n\n    // Adds Knockout's additional array mutation functions to the array\n    function addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal) {\n        ['remove', 'removeAll', 'destroy', 'destroyAll', 'replace'].forEach(function(fnName) {\n            // Make it a non-enumerable property for consistency with standard Array functions\n            Object.defineProperty(arrayInstance, fnName, {\n                enumerable: false,\n                value: function() {\n                    var result;\n\n                    // These additional array mutators are built using the underlying push/pop/etc.\n                    // mutators, which are wrapped to trigger notifications. But we don't want to\n                    // trigger multiple notifications, so pause the push/pop/etc. wrappers and\n                    // delivery only one notification at the end of the process.\n                    notificationPauseSignal.pause = true;\n                    try {\n                        // Creates a temporary observableArray that can perform the operation.\n                        result = ko.observableArray.fn[fnName].apply(ko.observableArray(arrayInstance), arguments);\n                    }\n                    finally {\n                        notificationPauseSignal.pause = false;\n                    }\n                    subscribable.notifySubscribers(arrayInstance);\n                    return result;\n                }\n            });\n        });\n    }\n\n    // Static utility functions\n    // ------------------------\n    //\n    // Since Knockout-ES5 sets up properties that return values, not observables, you can't\n    // trivially subscribe to the underlying observables (e.g., `someProperty.subscribe(...)`),\n    // or tell them that object values have mutated, etc. To handle this, we set up some\n    // extra utility functions that can return or work with the underlying observables.\n\n    // Returns the underlying observable associated with a model property (or `null` if the\n    // model or property doesn't exist, or isn't associated with an observable). This means\n    // you can subscribe to the property, e.g.:\n    //\n    //     ko.getObservable(model, 'propertyName')\n    //       .subscribe(function(newValue) { ... });\n    function getObservable(obj, propertyName) {\n        if (!obj /*|| typeof obj !== 'object'*/) {\n            return null;\n        }\n\n        var allObservablesForObject = getAllObservablesForObject(obj, false);\n        return (allObservablesForObject && allObservablesForObject[propertyName]) || null;\n    }\n\n    // Causes a property's associated observable to fire a change notification. Useful when\n    // the property value is a complex object and you've modified a child property.\n    function valueHasMutated(obj, propertyName) {\n        var observable = getObservable(obj, propertyName);\n\n        if (observable) {\n            observable.valueHasMutated();\n        }\n    }\n\n    // Extends a Knockout instance with Knockout-ES5 functionality\n    function attachToKo(ko) {\n        ko.track = track;\n        ko.getObservable = getObservable;\n        ko.valueHasMutated = valueHasMutated;\n        ko.defineProperty = defineComputedProperty;\n    }\n\n    export default {\n        attachToKo : attachToKo\n    };\n","import knockout from './knockout-3.5.1.js';\nimport knockout_es5 from './knockout-es5.js';\nimport SvgPathBindingHandler from '../SvgPathBindingHandler.js';\n\n// install the Knockout-ES5 plugin\nknockout_es5.attachToKo(knockout);\n\n// Register all Cesium binding handlers\nSvgPathBindingHandler.register(knockout);\n\nexport default knockout;\n","import {\n  ClockRange,\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n  JulianDate,\n} from \"@cesium/engine\";\nimport TimelineHighlightRange from \"./TimelineHighlightRange.js\";\nimport TimelineTrack from \"./TimelineTrack.js\";\n\nlet timelineWheelDelta = 1e12;\n\nconst timelineMouseMode = {\n  none: 0,\n  scrub: 1,\n  slide: 2,\n  zoom: 3,\n  touchOnly: 4,\n};\nconst timelineTouchMode = {\n  none: 0,\n  scrub: 1,\n  slideZoom: 2,\n  singleTap: 3,\n  ignore: 4,\n};\n\nconst timelineTicScales = [\n  0.001,\n  0.002,\n  0.005,\n  0.01,\n  0.02,\n  0.05,\n  0.1,\n  0.25,\n  0.5,\n  1.0,\n  2.0,\n  5.0,\n  10.0,\n  15.0,\n  30.0,\n  60.0, // 1min\n  120.0, // 2min\n  300.0, // 5min\n  600.0, // 10min\n  900.0, // 15min\n  1800.0, // 30min\n  3600.0, // 1hr\n  7200.0, // 2hr\n  14400.0, // 4hr\n  21600.0, // 6hr\n  43200.0, // 12hr\n  86400.0, // 24hr\n  172800.0, // 2days\n  345600.0, // 4days\n  604800.0, // 7days\n  1296000.0, // 15days\n  2592000.0, // 30days\n  5184000.0, // 60days\n  7776000.0, // 90days\n  15552000.0, // 180days\n  31536000.0, // 365days\n  63072000.0, // 2years\n  126144000.0, // 4years\n  157680000.0, // 5years\n  315360000.0, // 10years\n  630720000.0, // 20years\n  1261440000.0, // 40years\n  1576800000.0, // 50years\n  3153600000.0, // 100years\n  6307200000.0, // 200years\n  12614400000.0, // 400years\n  15768000000.0, // 500years\n  31536000000.0, // 1000years\n];\n\nconst timelineMonthNames = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\",\n];\n\n/**\n * The Timeline is a widget for displaying and controlling the current scene time.\n * @alias Timeline\n * @constructor\n *\n * @param {Element} container The parent HTML container node for this widget.\n * @param {Clock} clock The clock to use.\n */\nfunction Timeline(container, clock) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  if (!defined(clock)) {\n    throw new DeveloperError(\"clock is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const ownerDocument = container.ownerDocument;\n\n  /**\n   * Gets the parent container.\n   * @type {Element}\n   */\n  this.container = container;\n\n  const topDiv = ownerDocument.createElement(\"div\");\n  topDiv.className = \"cesium-timeline-main\";\n  container.appendChild(topDiv);\n  this._topDiv = topDiv;\n\n  this._endJulian = undefined;\n  this._epochJulian = undefined;\n  this._lastXPos = undefined;\n  this._scrubElement = undefined;\n  this._startJulian = undefined;\n  this._timeBarSecondsSpan = undefined;\n  this._clock = clock;\n  this._scrubJulian = clock.currentTime;\n  this._mainTicSpan = -1;\n  this._mouseMode = timelineMouseMode.none;\n  this._touchMode = timelineTouchMode.none;\n  this._touchState = {\n    centerX: 0,\n    spanX: 0,\n  };\n  this._mouseX = 0;\n  this._timelineDrag = 0;\n  this._timelineDragLocation = undefined;\n  this._lastHeight = undefined;\n  this._lastWidth = undefined;\n\n  this._topDiv.innerHTML =\n    '<div class=\"cesium-timeline-bar\"></div><div class=\"cesium-timeline-trackContainer\">' +\n    '<canvas class=\"cesium-timeline-tracks\" width=\"10\" height=\"1\">' +\n    '</canvas></div><div class=\"cesium-timeline-needle\"></div><span class=\"cesium-timeline-ruler\"></span>';\n  this._timeBarEle = this._topDiv.childNodes[0];\n  this._trackContainer = this._topDiv.childNodes[1];\n  this._trackListEle = this._topDiv.childNodes[1].childNodes[0];\n  this._needleEle = this._topDiv.childNodes[2];\n  this._rulerEle = this._topDiv.childNodes[3];\n  this._context = this._trackListEle.getContext(\"2d\");\n\n  this._trackList = [];\n  this._highlightRanges = [];\n\n  this.zoomTo(clock.startTime, clock.stopTime);\n\n  this._onMouseDown = createMouseDownCallback(this);\n  this._onMouseUp = createMouseUpCallback(this);\n  this._onMouseMove = createMouseMoveCallback(this);\n  this._onMouseWheel = createMouseWheelCallback(this);\n  this._onTouchStart = createTouchStartCallback(this);\n  this._onTouchMove = createTouchMoveCallback(this);\n  this._onTouchEnd = createTouchEndCallback(this);\n\n  const timeBarEle = this._timeBarEle;\n  ownerDocument.addEventListener(\"mouseup\", this._onMouseUp, false);\n  ownerDocument.addEventListener(\"mousemove\", this._onMouseMove, false);\n  timeBarEle.addEventListener(\"mousedown\", this._onMouseDown, false);\n  timeBarEle.addEventListener(\"DOMMouseScroll\", this._onMouseWheel, false); // Mozilla mouse wheel\n  timeBarEle.addEventListener(\"mousewheel\", this._onMouseWheel, false);\n  timeBarEle.addEventListener(\"touchstart\", this._onTouchStart, false);\n  timeBarEle.addEventListener(\"touchmove\", this._onTouchMove, false);\n  timeBarEle.addEventListener(\"touchend\", this._onTouchEnd, false);\n  timeBarEle.addEventListener(\"touchcancel\", this._onTouchEnd, false);\n\n  this._topDiv.oncontextmenu = function () {\n    return false;\n  };\n\n  clock.onTick.addEventListener(this.updateFromClock, this);\n  this.updateFromClock();\n}\n\n/**\n * @private\n */\nTimeline.prototype.addEventListener = function (type, listener, useCapture) {\n  this._topDiv.addEventListener(type, listener, useCapture);\n};\n\n/**\n * @private\n */\nTimeline.prototype.removeEventListener = function (type, listener, useCapture) {\n  this._topDiv.removeEventListener(type, listener, useCapture);\n};\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nTimeline.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nTimeline.prototype.destroy = function () {\n  this._clock.onTick.removeEventListener(this.updateFromClock, this);\n\n  const doc = this.container.ownerDocument;\n  doc.removeEventListener(\"mouseup\", this._onMouseUp, false);\n  doc.removeEventListener(\"mousemove\", this._onMouseMove, false);\n\n  const timeBarEle = this._timeBarEle;\n  timeBarEle.removeEventListener(\"mousedown\", this._onMouseDown, false);\n  timeBarEle.removeEventListener(\"DOMMouseScroll\", this._onMouseWheel, false); // Mozilla mouse wheel\n  timeBarEle.removeEventListener(\"mousewheel\", this._onMouseWheel, false);\n  timeBarEle.removeEventListener(\"touchstart\", this._onTouchStart, false);\n  timeBarEle.removeEventListener(\"touchmove\", this._onTouchMove, false);\n  timeBarEle.removeEventListener(\"touchend\", this._onTouchEnd, false);\n  timeBarEle.removeEventListener(\"touchcancel\", this._onTouchEnd, false);\n  this.container.removeChild(this._topDiv);\n  destroyObject(this);\n};\n\n/**\n * @private\n */\nTimeline.prototype.addHighlightRange = function (color, heightInPx, base) {\n  const newHighlightRange = new TimelineHighlightRange(color, heightInPx, base);\n  this._highlightRanges.push(newHighlightRange);\n  this.resize();\n  return newHighlightRange;\n};\n\n/**\n * @private\n */\nTimeline.prototype.addTrack = function (\n  interval,\n  heightInPx,\n  color,\n  backgroundColor,\n) {\n  const newTrack = new TimelineTrack(\n    interval,\n    heightInPx,\n    color,\n    backgroundColor,\n  );\n  this._trackList.push(newTrack);\n  this._lastHeight = undefined;\n  this.resize();\n  return newTrack;\n};\n\n/**\n * Sets the view to the provided times.\n *\n * @param {JulianDate} startTime The start time.\n * @param {JulianDate} stopTime The stop time.\n */\nTimeline.prototype.zoomTo = function (startTime, stopTime) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(startTime)) {\n    throw new DeveloperError(\"startTime is required.\");\n  }\n  if (!defined(stopTime)) {\n    throw new DeveloperError(\"stopTime is required\");\n  }\n  if (JulianDate.lessThanOrEquals(stopTime, startTime)) {\n    throw new DeveloperError(\"Start time must come before end time.\");\n  }\n  //>>includeEnd('debug');\n\n  this._startJulian = startTime;\n  this._endJulian = stopTime;\n  this._timeBarSecondsSpan = JulianDate.secondsDifference(stopTime, startTime);\n\n  // If clock is not unbounded, clamp timeline range to clock.\n  if (this._clock && this._clock.clockRange !== ClockRange.UNBOUNDED) {\n    const clockStart = this._clock.startTime;\n    const clockEnd = this._clock.stopTime;\n    const clockSpan = JulianDate.secondsDifference(clockEnd, clockStart);\n    const startOffset = JulianDate.secondsDifference(\n      clockStart,\n      this._startJulian,\n    );\n    const endOffset = JulianDate.secondsDifference(clockEnd, this._endJulian);\n\n    if (this._timeBarSecondsSpan >= clockSpan) {\n      // if new duration longer than clock range duration, clamp to full range.\n      this._timeBarSecondsSpan = clockSpan;\n      this._startJulian = this._clock.startTime;\n      this._endJulian = this._clock.stopTime;\n    } else if (startOffset > 0) {\n      // if timeline start is before clock start, shift right\n      this._endJulian = JulianDate.addSeconds(\n        this._endJulian,\n        startOffset,\n        new JulianDate(),\n      );\n      this._startJulian = clockStart;\n      this._timeBarSecondsSpan = JulianDate.secondsDifference(\n        this._endJulian,\n        this._startJulian,\n      );\n    } else if (endOffset < 0) {\n      // if timeline end is after clock end, shift left\n      this._startJulian = JulianDate.addSeconds(\n        this._startJulian,\n        endOffset,\n        new JulianDate(),\n      );\n      this._endJulian = clockEnd;\n      this._timeBarSecondsSpan = JulianDate.secondsDifference(\n        this._endJulian,\n        this._startJulian,\n      );\n    }\n  }\n\n  this._makeTics();\n\n  const evt = document.createEvent(\"Event\");\n  evt.initEvent(\"setzoom\", true, true);\n  evt.startJulian = this._startJulian;\n  evt.endJulian = this._endJulian;\n  evt.epochJulian = this._epochJulian;\n  evt.totalSpan = this._timeBarSecondsSpan;\n  evt.mainTicSpan = this._mainTicSpan;\n  this._topDiv.dispatchEvent(evt);\n};\n\n/**\n * @private\n */\nTimeline.prototype.zoomFrom = function (amount) {\n  let centerSec = JulianDate.secondsDifference(\n    this._scrubJulian,\n    this._startJulian,\n  );\n  if (amount > 1 || centerSec < 0 || centerSec > this._timeBarSecondsSpan) {\n    centerSec = this._timeBarSecondsSpan * 0.5;\n  } else {\n    centerSec += centerSec - this._timeBarSecondsSpan * 0.5;\n  }\n  const centerSecFlip = this._timeBarSecondsSpan - centerSec;\n  this.zoomTo(\n    JulianDate.addSeconds(\n      this._startJulian,\n      centerSec - centerSec * amount,\n      new JulianDate(),\n    ),\n    JulianDate.addSeconds(\n      this._endJulian,\n      centerSecFlip * amount - centerSecFlip,\n      new JulianDate(),\n    ),\n  );\n};\n\nfunction twoDigits(num) {\n  return num < 10 ? `0${num.toString()}` : num.toString();\n}\n\n/**\n * @private\n */\nTimeline.prototype.makeLabel = function (time) {\n  const gregorian = JulianDate.toGregorianDate(time);\n  const millisecond = gregorian.millisecond;\n  let millisecondString = \" UTC\";\n  if (millisecond > 0 && this._timeBarSecondsSpan < 3600) {\n    millisecondString = Math.floor(millisecond).toString();\n    while (millisecondString.length < 3) {\n      millisecondString = `0${millisecondString}`;\n    }\n    millisecondString = `.${millisecondString}`;\n  }\n\n  return `${timelineMonthNames[gregorian.month - 1]} ${gregorian.day} ${\n    gregorian.year\n  } ${twoDigits(gregorian.hour)}:${twoDigits(gregorian.minute)}:${twoDigits(\n    gregorian.second,\n  )}${millisecondString}`;\n};\n\n/**\n * @private\n */\nTimeline.prototype.smallestTicInPixels = 7.0;\n\n/**\n * @private\n */\nTimeline.prototype._makeTics = function () {\n  const timeBar = this._timeBarEle;\n\n  const seconds = JulianDate.secondsDifference(\n    this._scrubJulian,\n    this._startJulian,\n  );\n  const xPos = Math.round(\n    (seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan,\n  );\n  const scrubX = xPos - 8;\n  let tic;\n  const widget = this;\n\n  this._needleEle.style.left = `${xPos.toString()}px`;\n\n  let tics = \"\";\n\n  const minimumDuration = 0.01;\n  const maximumDuration = 31536000000.0; // ~1000 years\n  const epsilon = 1e-10;\n\n  // If time step size is known, enter it here...\n  let minSize = 0;\n\n  let duration = this._timeBarSecondsSpan;\n  if (duration < minimumDuration) {\n    duration = minimumDuration;\n    this._timeBarSecondsSpan = minimumDuration;\n    this._endJulian = JulianDate.addSeconds(\n      this._startJulian,\n      minimumDuration,\n      new JulianDate(),\n    );\n  } else if (duration > maximumDuration) {\n    duration = maximumDuration;\n    this._timeBarSecondsSpan = maximumDuration;\n    this._endJulian = JulianDate.addSeconds(\n      this._startJulian,\n      maximumDuration,\n      new JulianDate(),\n    );\n  }\n\n  let timeBarWidth = this._timeBarEle.clientWidth;\n  if (timeBarWidth < 10) {\n    timeBarWidth = 10;\n  }\n  const startJulian = this._startJulian;\n\n  // epsilonTime: a small fraction of one pixel width of the timeline, measured in seconds.\n  const epsilonTime = Math.min((duration / timeBarWidth) * 1e-5, 0.4);\n\n  // epochJulian: a nearby time to be considered \"zero seconds\", should be a round-ish number by human standards.\n  let epochJulian;\n  const gregorianDate = JulianDate.toGregorianDate(startJulian);\n  if (duration > 315360000) {\n    // 3650+ days visible, epoch is start of the first visible century.\n    epochJulian = JulianDate.fromDate(\n      new Date(Date.UTC(Math.floor(gregorianDate.year / 100) * 100, 0)),\n    );\n  } else if (duration > 31536000) {\n    // 365+ days visible, epoch is start of the first visible decade.\n    epochJulian = JulianDate.fromDate(\n      new Date(Date.UTC(Math.floor(gregorianDate.year / 10) * 10, 0)),\n    );\n  } else if (duration > 86400) {\n    // 1+ day(s) visible, epoch is start of the year.\n    epochJulian = JulianDate.fromDate(\n      new Date(Date.UTC(gregorianDate.year, 0)),\n    );\n  } else {\n    // Less than a day on timeline, epoch is midnight of the visible day.\n    epochJulian = JulianDate.fromDate(\n      new Date(\n        Date.UTC(gregorianDate.year, gregorianDate.month, gregorianDate.day),\n      ),\n    );\n  }\n\n  // startTime: Seconds offset of the left side of the timeline from epochJulian.\n  const startTime = JulianDate.secondsDifference(\n    this._startJulian,\n    JulianDate.addSeconds(epochJulian, epsilonTime, new JulianDate()),\n  );\n  // endTime: Seconds offset of the right side of the timeline from epochJulian.\n  let endTime = startTime + duration;\n  this._epochJulian = epochJulian;\n\n  function getStartTic(ticScale) {\n    return Math.floor(startTime / ticScale) * ticScale;\n  }\n\n  function getNextTic(tic, ticScale) {\n    return Math.ceil(tic / ticScale + 0.5) * ticScale;\n  }\n\n  function getAlpha(time) {\n    return (time - startTime) / duration;\n  }\n\n  function remainder(x, y) {\n    //return x % y;\n    return x - y * Math.round(x / y);\n  }\n\n  // Width in pixels of a typical label, plus padding\n  this._rulerEle.innerHTML = this.makeLabel(\n    JulianDate.addSeconds(this._endJulian, -minimumDuration, new JulianDate()),\n  );\n  let sampleWidth = this._rulerEle.offsetWidth + 20;\n  if (sampleWidth < 30) {\n    // Workaround an apparent IE bug with measuring the width after going full-screen from inside an iframe.\n    sampleWidth = 180;\n  }\n\n  const origMinSize = minSize;\n  minSize -= epsilon;\n\n  const renderState = {\n    startTime: startTime,\n    startJulian: startJulian,\n    epochJulian: epochJulian,\n    duration: duration,\n    timeBarWidth: timeBarWidth,\n    getAlpha: getAlpha,\n  };\n  this._highlightRanges.forEach(function (highlightRange) {\n    tics += highlightRange.render(renderState);\n  });\n\n  // Calculate tic mark label spacing in the TimeBar.\n  let mainTic = 0.0,\n    subTic = 0.0,\n    tinyTic = 0.0;\n  // Ideal labeled tic as percentage of zoom interval\n  let idealTic = sampleWidth / timeBarWidth;\n  if (idealTic > 1.0) {\n    // Clamp to width of window, for thin windows.\n    idealTic = 1.0;\n  }\n  // Ideal labeled tic size in seconds\n  idealTic *= this._timeBarSecondsSpan;\n  let ticIndex = -1,\n    smallestIndex = -1;\n\n  const ticScaleLen = timelineTicScales.length;\n  let i;\n  for (i = 0; i < ticScaleLen; ++i) {\n    const sc = timelineTicScales[i];\n    ++ticIndex;\n    mainTic = sc;\n    // Find acceptable main tic size not smaller than ideal size.\n    if (sc > idealTic && sc > minSize) {\n      break;\n    }\n    if (\n      smallestIndex < 0 &&\n      timeBarWidth * (sc / this._timeBarSecondsSpan) >= this.smallestTicInPixels\n    ) {\n      smallestIndex = ticIndex;\n    }\n  }\n  if (ticIndex > 0) {\n    while (ticIndex > 0) {\n      // Compute sub-tic size that evenly divides main tic.\n      --ticIndex;\n      if (Math.abs(remainder(mainTic, timelineTicScales[ticIndex])) < 0.00001) {\n        if (timelineTicScales[ticIndex] >= minSize) {\n          subTic = timelineTicScales[ticIndex];\n        }\n        break;\n      }\n    }\n\n    if (smallestIndex >= 0) {\n      while (smallestIndex < ticIndex) {\n        // Compute tiny tic size that evenly divides sub-tic.\n        if (\n          Math.abs(remainder(subTic, timelineTicScales[smallestIndex])) <\n            0.00001 &&\n          timelineTicScales[smallestIndex] >= minSize\n        ) {\n          tinyTic = timelineTicScales[smallestIndex];\n          break;\n        }\n        ++smallestIndex;\n      }\n    }\n  }\n\n  minSize = origMinSize;\n  if (\n    minSize > epsilon &&\n    tinyTic < 0.00001 &&\n    Math.abs(minSize - mainTic) > epsilon\n  ) {\n    tinyTic = minSize;\n    if (minSize <= mainTic + epsilon) {\n      subTic = 0.0;\n    }\n  }\n\n  let lastTextLeft = -999999,\n    textWidth;\n  if (timeBarWidth * (tinyTic / this._timeBarSecondsSpan) >= 3.0) {\n    for (\n      tic = getStartTic(tinyTic);\n      tic <= endTime;\n      tic = getNextTic(tic, tinyTic)\n    ) {\n      tics += `<span class=\"cesium-timeline-ticTiny\" style=\"left: ${Math.round(\n        timeBarWidth * getAlpha(tic),\n      ).toString()}px;\"></span>`;\n    }\n  }\n  if (timeBarWidth * (subTic / this._timeBarSecondsSpan) >= 3.0) {\n    for (\n      tic = getStartTic(subTic);\n      tic <= endTime;\n      tic = getNextTic(tic, subTic)\n    ) {\n      tics += `<span class=\"cesium-timeline-ticSub\" style=\"left: ${Math.round(\n        timeBarWidth * getAlpha(tic),\n      ).toString()}px;\"></span>`;\n    }\n  }\n  if (timeBarWidth * (mainTic / this._timeBarSecondsSpan) >= 2.0) {\n    this._mainTicSpan = mainTic;\n    endTime += mainTic;\n    tic = getStartTic(mainTic);\n    const leapSecond = JulianDate.computeTaiMinusUtc(epochJulian);\n    while (tic <= endTime) {\n      let ticTime = JulianDate.addSeconds(\n        startJulian,\n        tic - startTime,\n        new JulianDate(),\n      );\n      if (mainTic > 2.1) {\n        const ticLeap = JulianDate.computeTaiMinusUtc(ticTime);\n        if (Math.abs(ticLeap - leapSecond) > 0.1) {\n          tic += ticLeap - leapSecond;\n          ticTime = JulianDate.addSeconds(\n            startJulian,\n            tic - startTime,\n            new JulianDate(),\n          );\n        }\n      }\n      const ticLeft = Math.round(timeBarWidth * getAlpha(tic));\n      const ticLabel = this.makeLabel(ticTime);\n      this._rulerEle.innerHTML = ticLabel;\n      textWidth = this._rulerEle.offsetWidth;\n      if (textWidth < 10) {\n        // IE iframe fullscreen sampleWidth workaround, continued.\n        textWidth = sampleWidth;\n      }\n      const labelLeft = ticLeft - (textWidth / 2 - 1);\n      if (labelLeft > lastTextLeft) {\n        lastTextLeft = labelLeft + textWidth + 5;\n        tics +=\n          `<span class=\"cesium-timeline-ticMain\" style=\"left: ${ticLeft.toString()}px;\"></span>` +\n          `<span class=\"cesium-timeline-ticLabel\" style=\"left: ${labelLeft.toString()}px;\">${ticLabel}</span>`;\n      } else {\n        tics += `<span class=\"cesium-timeline-ticSub\" style=\"left: ${ticLeft.toString()}px;\"></span>`;\n      }\n      tic = getNextTic(tic, mainTic);\n    }\n  } else {\n    this._mainTicSpan = -1;\n  }\n\n  tics += `<span class=\"cesium-timeline-icon16\" style=\"left:${scrubX}px;bottom:0;background-position: 0 0;\"></span>`;\n  timeBar.innerHTML = tics;\n  this._scrubElement = timeBar.lastChild;\n\n  // Clear track canvas.\n  this._context.clearRect(\n    0,\n    0,\n    this._trackListEle.width,\n    this._trackListEle.height,\n  );\n\n  renderState.y = 0;\n  this._trackList.forEach(function (track) {\n    track.render(widget._context, renderState);\n    renderState.y += track.height;\n  });\n};\n\n/**\n * @private\n */\nTimeline.prototype.updateFromClock = function () {\n  this._scrubJulian = this._clock.currentTime;\n  const scrubElement = this._scrubElement;\n  if (defined(this._scrubElement)) {\n    const seconds = JulianDate.secondsDifference(\n      this._scrubJulian,\n      this._startJulian,\n    );\n    const xPos = Math.round(\n      (seconds * this._topDiv.clientWidth) / this._timeBarSecondsSpan,\n    );\n\n    if (this._lastXPos !== xPos) {\n      this._lastXPos = xPos;\n\n      scrubElement.style.left = `${xPos - 8}px`;\n      this._needleEle.style.left = `${xPos}px`;\n    }\n  }\n  if (defined(this._timelineDragLocation)) {\n    this._setTimeBarTime(\n      this._timelineDragLocation,\n      (this._timelineDragLocation * this._timeBarSecondsSpan) /\n        this._topDiv.clientWidth,\n    );\n    this.zoomTo(\n      JulianDate.addSeconds(\n        this._startJulian,\n        this._timelineDrag,\n        new JulianDate(),\n      ),\n      JulianDate.addSeconds(\n        this._endJulian,\n        this._timelineDrag,\n        new JulianDate(),\n      ),\n    );\n  }\n};\n\n/**\n * @private\n */\nTimeline.prototype._setTimeBarTime = function (xPos, seconds) {\n  xPos = Math.round(xPos);\n  this._scrubJulian = JulianDate.addSeconds(\n    this._startJulian,\n    seconds,\n    new JulianDate(),\n  );\n  if (this._scrubElement) {\n    const scrubX = xPos - 8;\n    this._scrubElement.style.left = `${scrubX.toString()}px`;\n    this._needleEle.style.left = `${xPos.toString()}px`;\n  }\n\n  const evt = document.createEvent(\"Event\");\n  evt.initEvent(\"settime\", true, true);\n  evt.clientX = xPos;\n  evt.timeSeconds = seconds;\n  evt.timeJulian = this._scrubJulian;\n  evt.clock = this._clock;\n  this._topDiv.dispatchEvent(evt);\n};\n\nfunction createMouseDownCallback(timeline) {\n  return function (e) {\n    if (timeline._mouseMode !== timelineMouseMode.touchOnly) {\n      if (e.button === 0) {\n        timeline._mouseMode = timelineMouseMode.scrub;\n        if (timeline._scrubElement) {\n          timeline._scrubElement.style.backgroundPosition = \"-16px 0\";\n        }\n        timeline._onMouseMove(e);\n      } else {\n        timeline._mouseX = e.clientX;\n        if (e.button === 2) {\n          timeline._mouseMode = timelineMouseMode.zoom;\n        } else {\n          timeline._mouseMode = timelineMouseMode.slide;\n        }\n      }\n    }\n    e.preventDefault();\n  };\n}\n\nfunction createMouseUpCallback(timeline) {\n  return function (e) {\n    timeline._mouseMode = timelineMouseMode.none;\n    if (timeline._scrubElement) {\n      timeline._scrubElement.style.backgroundPosition = \"0 0\";\n    }\n    timeline._timelineDrag = 0;\n    timeline._timelineDragLocation = undefined;\n  };\n}\n\nfunction createMouseMoveCallback(timeline) {\n  return function (e) {\n    let dx;\n    if (timeline._mouseMode === timelineMouseMode.scrub) {\n      e.preventDefault();\n      const x = e.clientX - timeline._topDiv.getBoundingClientRect().left;\n\n      if (x < 0) {\n        timeline._timelineDragLocation = 0;\n        timeline._timelineDrag = -0.01 * timeline._timeBarSecondsSpan;\n      } else if (x > timeline._topDiv.clientWidth) {\n        timeline._timelineDragLocation = timeline._topDiv.clientWidth;\n        timeline._timelineDrag = 0.01 * timeline._timeBarSecondsSpan;\n      } else {\n        timeline._timelineDragLocation = undefined;\n        timeline._setTimeBarTime(\n          x,\n          (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth,\n        );\n      }\n    } else if (timeline._mouseMode === timelineMouseMode.slide) {\n      dx = timeline._mouseX - e.clientX;\n      timeline._mouseX = e.clientX;\n      if (dx !== 0) {\n        const dsec =\n          (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth;\n        timeline.zoomTo(\n          JulianDate.addSeconds(timeline._startJulian, dsec, new JulianDate()),\n          JulianDate.addSeconds(timeline._endJulian, dsec, new JulianDate()),\n        );\n      }\n    } else if (timeline._mouseMode === timelineMouseMode.zoom) {\n      dx = timeline._mouseX - e.clientX;\n      timeline._mouseX = e.clientX;\n      if (dx !== 0) {\n        timeline.zoomFrom(Math.pow(1.01, dx));\n      }\n    }\n  };\n}\n\nfunction createMouseWheelCallback(timeline) {\n  return function (e) {\n    let dy = e.wheelDeltaY || e.wheelDelta || -e.detail;\n    timelineWheelDelta = Math.max(\n      Math.min(Math.abs(dy), timelineWheelDelta),\n      1,\n    );\n    dy /= timelineWheelDelta;\n    timeline.zoomFrom(Math.pow(1.05, -dy));\n  };\n}\n\nfunction createTouchStartCallback(timeline) {\n  return function (e) {\n    const len = e.touches.length;\n    let seconds, xPos;\n    const leftX = timeline._topDiv.getBoundingClientRect().left;\n    e.preventDefault();\n    timeline._mouseMode = timelineMouseMode.touchOnly;\n    if (len === 1) {\n      seconds = JulianDate.secondsDifference(\n        timeline._scrubJulian,\n        timeline._startJulian,\n      );\n      xPos = Math.round(\n        (seconds * timeline._topDiv.clientWidth) /\n          timeline._timeBarSecondsSpan +\n          leftX,\n      );\n      if (Math.abs(e.touches[0].clientX - xPos) < 50) {\n        timeline._touchMode = timelineTouchMode.scrub;\n        if (timeline._scrubElement) {\n          timeline._scrubElement.style.backgroundPosition =\n            len === 1 ? \"-16px 0\" : \"0 0\";\n        }\n      } else {\n        timeline._touchMode = timelineTouchMode.singleTap;\n        timeline._touchState.centerX = e.touches[0].clientX - leftX;\n      }\n    } else if (len === 2) {\n      timeline._touchMode = timelineTouchMode.slideZoom;\n      timeline._touchState.centerX =\n        (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX;\n      timeline._touchState.spanX = Math.abs(\n        e.touches[0].clientX - e.touches[1].clientX,\n      );\n    } else {\n      timeline._touchMode = timelineTouchMode.ignore;\n    }\n  };\n}\n\nfunction createTouchEndCallback(timeline) {\n  return function (e) {\n    const len = e.touches.length,\n      leftX = timeline._topDiv.getBoundingClientRect().left;\n    if (timeline._touchMode === timelineTouchMode.singleTap) {\n      timeline._touchMode = timelineTouchMode.scrub;\n      timeline._onTouchMove(e);\n    } else if (timeline._touchMode === timelineTouchMode.scrub) {\n      timeline._onTouchMove(e);\n    }\n    timeline._mouseMode = timelineMouseMode.touchOnly;\n    if (len !== 1) {\n      timeline._touchMode =\n        len > 0 ? timelineTouchMode.ignore : timelineTouchMode.none;\n    } else if (timeline._touchMode === timelineTouchMode.slideZoom) {\n      timeline._touchState.centerX = e.touches[0].clientX - leftX;\n    }\n    if (timeline._scrubElement) {\n      timeline._scrubElement.style.backgroundPosition = \"0 0\";\n    }\n  };\n}\n\nfunction createTouchMoveCallback(timeline) {\n  return function (e) {\n    let dx,\n      x,\n      len,\n      newCenter,\n      newSpan,\n      newStartTime,\n      zoom = 1;\n    const leftX = timeline._topDiv.getBoundingClientRect().left;\n    if (timeline._touchMode === timelineTouchMode.singleTap) {\n      timeline._touchMode = timelineTouchMode.slideZoom;\n    }\n    timeline._mouseMode = timelineMouseMode.touchOnly;\n    if (timeline._touchMode === timelineTouchMode.scrub) {\n      e.preventDefault();\n      if (e.changedTouches.length === 1) {\n        x = e.changedTouches[0].clientX - leftX;\n        if (x >= 0 && x <= timeline._topDiv.clientWidth) {\n          timeline._setTimeBarTime(\n            x,\n            (x * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth,\n          );\n        }\n      }\n    } else if (timeline._touchMode === timelineTouchMode.slideZoom) {\n      len = e.touches.length;\n      if (len === 2) {\n        newCenter = (e.touches[0].clientX + e.touches[1].clientX) * 0.5 - leftX;\n        newSpan = Math.abs(e.touches[0].clientX - e.touches[1].clientX);\n      } else if (len === 1) {\n        newCenter = e.touches[0].clientX - leftX;\n        newSpan = 0;\n      }\n\n      if (defined(newCenter)) {\n        if (newSpan > 0 && timeline._touchState.spanX > 0) {\n          // Zoom and slide\n          zoom = timeline._touchState.spanX / newSpan;\n          newStartTime = JulianDate.addSeconds(\n            timeline._startJulian,\n            (timeline._touchState.centerX * timeline._timeBarSecondsSpan -\n              newCenter * timeline._timeBarSecondsSpan * zoom) /\n              timeline._topDiv.clientWidth,\n            new JulianDate(),\n          );\n        } else {\n          // Slide to newCenter\n          dx = timeline._touchState.centerX - newCenter;\n          newStartTime = JulianDate.addSeconds(\n            timeline._startJulian,\n            (dx * timeline._timeBarSecondsSpan) / timeline._topDiv.clientWidth,\n            new JulianDate(),\n          );\n        }\n\n        timeline.zoomTo(\n          newStartTime,\n          JulianDate.addSeconds(\n            newStartTime,\n            timeline._timeBarSecondsSpan * zoom,\n            new JulianDate(),\n          ),\n        );\n        timeline._touchState.centerX = newCenter;\n        timeline._touchState.spanX = newSpan;\n      }\n    }\n  };\n}\n\n/**\n * Resizes the widget to match the container size.\n */\nTimeline.prototype.resize = function () {\n  const width = this.container.clientWidth;\n  const height = this.container.clientHeight;\n\n  if (width === this._lastWidth && height === this._lastHeight) {\n    return;\n  }\n\n  this._trackContainer.style.height = `${height}px`;\n\n  let trackListHeight = 1;\n  this._trackList.forEach(function (track) {\n    trackListHeight += track.height;\n  });\n  this._trackListEle.style.height = `${trackListHeight.toString()}px`;\n  this._trackListEle.width = this._trackListEle.clientWidth;\n  this._trackListEle.height = trackListHeight;\n  this._makeTics();\n\n  this._lastXPos = undefined;\n  this._lastWidth = width;\n  this._lastHeight = height;\n};\nexport default Timeline;\n","import { JulianDate } from \"@cesium/engine\";\n\n/**\n * @private\n */\nfunction TimelineHighlightRange(color, heightInPx, base) {\n  this._color = color;\n  this._height = heightInPx;\n  this._base = base ?? 0;\n}\n\nTimelineHighlightRange.prototype.getHeight = function () {\n  return this._height;\n};\n\nTimelineHighlightRange.prototype.getBase = function () {\n  return this._base;\n};\n\nTimelineHighlightRange.prototype.getStartTime = function () {\n  return this._start;\n};\n\nTimelineHighlightRange.prototype.getStopTime = function () {\n  return this._stop;\n};\n\nTimelineHighlightRange.prototype.setRange = function (start, stop) {\n  this._start = start;\n  this._stop = stop;\n};\n\nTimelineHighlightRange.prototype.render = function (renderState) {\n  let range = \"\";\n  if (this._start && this._stop && this._color) {\n    const highlightStart = JulianDate.secondsDifference(\n      this._start,\n      renderState.epochJulian,\n    );\n    let highlightLeft = Math.round(\n      renderState.timeBarWidth * renderState.getAlpha(highlightStart),\n    );\n    const highlightStop = JulianDate.secondsDifference(\n      this._stop,\n      renderState.epochJulian,\n    );\n    let highlightWidth =\n      Math.round(\n        renderState.timeBarWidth * renderState.getAlpha(highlightStop),\n      ) - highlightLeft;\n    if (highlightLeft < 0) {\n      highlightWidth += highlightLeft;\n      highlightLeft = 0;\n    }\n    if (highlightLeft + highlightWidth > renderState.timeBarWidth) {\n      highlightWidth = renderState.timeBarWidth - highlightLeft;\n    }\n    if (highlightWidth > 0) {\n      range = `<span class=\"cesium-timeline-highlight\" style=\"left: ${highlightLeft.toString()}px; width: ${highlightWidth.toString()}px; bottom: ${this._base.toString()}px; height: ${\n        this._height\n      }px; background-color: ${this._color};\"></span>`;\n    }\n  }\n  return range;\n};\nexport default TimelineHighlightRange;\n","import { Color, defined, JulianDate } from \"@cesium/engine\";\n\n/**\n * @private\n */\nfunction TimelineTrack(interval, pixelHeight, color, backgroundColor) {\n  this.interval = interval;\n  this.height = pixelHeight;\n  this.color = color || new Color(0.5, 0.5, 0.5, 1.0);\n  this.backgroundColor = backgroundColor || new Color(0.0, 0.0, 0.0, 0.0);\n}\n\nTimelineTrack.prototype.render = function (context, renderState) {\n  const startInterval = this.interval.start;\n  const stopInterval = this.interval.stop;\n\n  const spanStart = renderState.startJulian;\n  const spanStop = JulianDate.addSeconds(\n    renderState.startJulian,\n    renderState.duration,\n    new JulianDate(),\n  );\n\n  if (\n    JulianDate.lessThan(startInterval, spanStart) &&\n    JulianDate.greaterThan(stopInterval, spanStop)\n  ) {\n    //The track takes up the entire visible span.\n    context.fillStyle = this.color.toCssColorString();\n    context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);\n  } else if (\n    JulianDate.lessThanOrEquals(startInterval, spanStop) &&\n    JulianDate.greaterThanOrEquals(stopInterval, spanStart)\n  ) {\n    //The track only takes up some of the visible span, compute that span.\n    let x;\n    let start, stop;\n    for (x = 0; x < renderState.timeBarWidth; ++x) {\n      const currentTime = JulianDate.addSeconds(\n        renderState.startJulian,\n        (x / renderState.timeBarWidth) * renderState.duration,\n        new JulianDate(),\n      );\n      if (\n        !defined(start) &&\n        JulianDate.greaterThanOrEquals(currentTime, startInterval)\n      ) {\n        start = x;\n      } else if (\n        !defined(stop) &&\n        JulianDate.greaterThanOrEquals(currentTime, stopInterval)\n      ) {\n        stop = x;\n      }\n    }\n\n    context.fillStyle = this.backgroundColor.toCssColorString();\n    context.fillRect(0, renderState.y, renderState.timeBarWidth, this.height);\n\n    if (defined(start)) {\n      if (!defined(stop)) {\n        stop = renderState.timeBarWidth;\n      }\n      context.fillStyle = this.color.toCssColorString();\n      context.fillRect(\n        start,\n        renderState.y,\n        Math.max(stop - start, 1),\n        this.height,\n      );\n    }\n  }\n};\nexport default TimelineTrack;\n","import { Frozen, defined, DeveloperError } from \"@cesium/engine\";\nimport knockout from \"./ThirdParty/knockout.js\";\n\n/**\n * A view model which exposes the properties of a toggle button.\n * @alias ToggleButtonViewModel\n * @constructor\n *\n * @param {Command} command The command which will be executed when the button is toggled.\n * @param {object} [options] Object with the following properties:\n * @param {boolean} [options.toggled=false] A boolean indicating whether the button should be initially toggled.\n * @param {string} [options.tooltip=''] A string containing the button's tooltip.\n */\nfunction ToggleButtonViewModel(command, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(command)) {\n    throw new DeveloperError(\"command is required.\");\n  }\n  //>>includeEnd('debug');\n\n  this._command = command;\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  /**\n   * Gets or sets whether the button is currently toggled.  This property is observable.\n   * @type {boolean}\n   * @default false\n   */\n  this.toggled = options.toggled ?? false;\n\n  /**\n   * Gets or sets the button's tooltip.  This property is observable.\n   * @type {string}\n   * @default ''\n   */\n  this.tooltip = options.tooltip ?? \"\";\n\n  knockout.track(this, [\"toggled\", \"tooltip\"]);\n}\n\nObject.defineProperties(ToggleButtonViewModel.prototype, {\n  /**\n   * Gets the command which will be executed when the button is toggled.\n   * @memberof ToggleButtonViewModel.prototype\n   * @type {Command}\n   */\n  command: {\n    get: function () {\n      return this._command;\n    },\n  },\n});\nexport default ToggleButtonViewModel;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport VRButtonViewModel from \"./VRButtonViewModel.js\";\n\nconst enterVRPath =\n  \"M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z\";\nconst exitVRPath =\n  \"M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z\";\n\n/**\n * A single button widget for toggling vr mode.\n *\n * @alias VRButton\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene The scene.\n * @param {Element|string} [vrElement=document.body] The element or id to be placed into vr mode.\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n */\nfunction VRButton(container, scene, vrElement) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n\n  const viewModel = new VRButtonViewModel(scene, vrElement);\n\n  viewModel._exitVRPath = exitVRPath;\n  viewModel._enterVRPath = enterVRPath;\n\n  const element = document.createElement(\"button\");\n  element.type = \"button\";\n  element.className = \"cesium-button cesium-vrButton\";\n  element.setAttribute(\n    \"data-bind\",\n    '\\\ncss: { \"cesium-button-disabled\" : _isOrthographic }, \\\nattr: { title: tooltip },\\\nclick: command,\\\nenable: isVREnabled,\\\ncesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }',\n  );\n\n  container.appendChild(element);\n\n  knockout.applyBindings(viewModel, element);\n\n  this._container = container;\n  this._viewModel = viewModel;\n  this._element = element;\n}\n\nObject.defineProperties(VRButton.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof VRButton.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof VRButton.prototype\n   *\n   * @type {VRButtonViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nVRButton.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nVRButton.prototype.destroy = function () {\n  this._viewModel.destroy();\n\n  knockout.cleanNode(this._element);\n  this._container.removeChild(this._element);\n\n  return destroyObject(this);\n};\nexport default VRButton;\n","import {\n  defined,\n  destroyObject,\n  DeveloperError,\n  EventHelper,\n  Fullscreen,\n  getElement,\n  OrthographicFrustum,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport NoSleep from \"nosleep.js\";\nimport createCommand from \"../createCommand.js\";\n\nfunction lockScreen(orientation) {\n  let locked = false;\n  const screen = window.screen;\n  if (defined(screen)) {\n    if (defined(screen.lockOrientation)) {\n      locked = screen.lockOrientation(orientation);\n    } else if (defined(screen.mozLockOrientation)) {\n      locked = screen.mozLockOrientation(orientation);\n    } else if (defined(screen.msLockOrientation)) {\n      locked = screen.msLockOrientation(orientation);\n    } else if (defined(screen.orientation && screen.orientation.lock)) {\n      locked = screen.orientation.lock(orientation);\n    }\n  }\n  return locked;\n}\n\nfunction unlockScreen() {\n  const screen = window.screen;\n  if (defined(screen)) {\n    if (defined(screen.unlockOrientation)) {\n      screen.unlockOrientation();\n    } else if (defined(screen.mozUnlockOrientation)) {\n      screen.mozUnlockOrientation();\n    } else if (defined(screen.msUnlockOrientation)) {\n      screen.msUnlockOrientation();\n    } else if (defined(screen.orientation && screen.orientation.unlock)) {\n      screen.orientation.unlock();\n    }\n  }\n}\n\nfunction toggleVR(viewModel, scene, isVRMode, isOrthographic) {\n  if (isOrthographic()) {\n    return;\n  }\n\n  if (isVRMode()) {\n    scene.useWebVR = false;\n    if (viewModel._locked) {\n      unlockScreen();\n      viewModel._locked = false;\n    }\n    viewModel._noSleep.disable();\n    Fullscreen.exitFullscreen();\n    isVRMode(false);\n  } else {\n    if (!Fullscreen.fullscreen) {\n      Fullscreen.requestFullscreen(viewModel._vrElement);\n    }\n    viewModel._noSleep.enable();\n    if (!viewModel._locked) {\n      viewModel._locked = lockScreen(\"landscape\");\n    }\n    scene.useWebVR = true;\n    isVRMode(true);\n  }\n}\n\n/**\n * The view model for {@link VRButton}.\n * @alias VRButtonViewModel\n * @constructor\n *\n * @param {Scene} scene The scene.\n * @param {Element|string} [vrElement=document.body] The element or id to be placed into VR mode.\n */\nfunction VRButtonViewModel(scene, vrElement) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(scene)) {\n    throw new DeveloperError(\"scene is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const that = this;\n\n  const isEnabled = knockout.observable(Fullscreen.enabled);\n  const isVRMode = knockout.observable(false);\n\n  /**\n   * Gets whether or not VR mode is active.\n   *\n   * @type {boolean}\n   */\n  this.isVRMode = undefined;\n  knockout.defineProperty(this, \"isVRMode\", {\n    get: function () {\n      return isVRMode();\n    },\n  });\n\n  /**\n   * Gets or sets whether or not VR functionality should be enabled.\n   *\n   * @type {boolean}\n   * @see Fullscreen.enabled\n   */\n  this.isVREnabled = undefined;\n  knockout.defineProperty(this, \"isVREnabled\", {\n    get: function () {\n      return isEnabled();\n    },\n    set: function (value) {\n      isEnabled(value && Fullscreen.enabled);\n    },\n  });\n\n  /**\n   * Gets the tooltip.  This property is observable.\n   *\n   * @type {string}\n   */\n  this.tooltip = undefined;\n  knockout.defineProperty(this, \"tooltip\", function () {\n    if (!isEnabled()) {\n      return \"VR mode is unavailable\";\n    }\n    return isVRMode() ? \"Exit VR mode\" : \"Enter VR mode\";\n  });\n\n  const isOrthographic = knockout.observable(false);\n\n  this._isOrthographic = undefined;\n  knockout.defineProperty(this, \"_isOrthographic\", {\n    get: function () {\n      return isOrthographic();\n    },\n  });\n\n  this._eventHelper = new EventHelper();\n  this._eventHelper.add(scene.preRender, function () {\n    isOrthographic(scene.camera.frustum instanceof OrthographicFrustum);\n  });\n\n  this._locked = false;\n  this._noSleep = new NoSleep();\n\n  this._command = createCommand(\n    function () {\n      toggleVR(that, scene, isVRMode, isOrthographic);\n    },\n    knockout.getObservable(this, \"isVREnabled\"),\n  );\n\n  this._vrElement = getElement(vrElement) ?? document.body;\n\n  this._callback = function () {\n    if (!Fullscreen.fullscreen && isVRMode()) {\n      scene.useWebVR = false;\n      if (that._locked) {\n        unlockScreen();\n        that._locked = false;\n      }\n      that._noSleep.disable();\n      isVRMode(false);\n    }\n  };\n  document.addEventListener(Fullscreen.changeEventName, this._callback);\n}\n\nObject.defineProperties(VRButtonViewModel.prototype, {\n  /**\n   * Gets or sets the HTML element to place into VR mode when the\n   * corresponding button is pressed.\n   * @memberof VRButtonViewModel.prototype\n   *\n   * @type {Element}\n   */\n  vrElement: {\n    //TODO:@exception {DeveloperError} value must be a valid HTML Element.\n    get: function () {\n      return this._vrElement;\n    },\n    set: function (value) {\n      //>>includeStart('debug', pragmas.debug);\n      if (!(value instanceof Element)) {\n        throw new DeveloperError(\"value must be a valid Element.\");\n      }\n      //>>includeEnd('debug');\n\n      this._vrElement = value;\n    },\n  },\n\n  /**\n   * Gets the Command to toggle VR mode.\n   * @memberof VRButtonViewModel.prototype\n   *\n   * @type {Command}\n   */\n  command: {\n    get: function () {\n      return this._command;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nVRButtonViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the view model.  Should be called to\n * properly clean up the view model when it is no longer needed.\n */\nVRButtonViewModel.prototype.destroy = function () {\n  this._eventHelper.removeAll();\n  document.removeEventListener(Fullscreen.changeEventName, this._callback);\n  destroyObject(this);\n};\nexport default VRButtonViewModel;\n","import {\n  BoundingSphere,\n  BoundingSphereState,\n  Cartesian3,\n  CesiumWidget,\n  Cesium3DTileFeature,\n  Clock,\n  ConstantPositionProperty,\n  Frozen,\n  defined,\n  destroyObject,\n  DeveloperError,\n  Entity,\n  Event,\n  EventHelper,\n  getElement,\n  JulianDate,\n  Math as CesiumMath,\n  Property,\n  ScreenSpaceEventType,\n  IonGeocoderService,\n} from \"@cesium/engine\";\nimport Animation from \"../Animation/Animation.js\";\nimport AnimationViewModel from \"../Animation/AnimationViewModel.js\";\nimport BaseLayerPicker from \"../BaseLayerPicker/BaseLayerPicker.js\";\nimport createDefaultImageryProviderViewModels from \"../BaseLayerPicker/createDefaultImageryProviderViewModels.js\";\nimport createDefaultTerrainProviderViewModels from \"../BaseLayerPicker/createDefaultTerrainProviderViewModels.js\";\nimport ClockViewModel from \"../ClockViewModel.js\";\nimport FullscreenButton from \"../FullscreenButton/FullscreenButton.js\";\nimport Geocoder from \"../Geocoder/Geocoder.js\";\nimport HomeButton from \"../HomeButton/HomeButton.js\";\nimport InfoBox from \"../InfoBox/InfoBox.js\";\nimport NavigationHelpButton from \"../NavigationHelpButton/NavigationHelpButton.js\";\nimport ProjectionPicker from \"../ProjectionPicker/ProjectionPicker.js\";\nimport SceneModePicker from \"../SceneModePicker/SceneModePicker.js\";\nimport SelectionIndicator from \"../SelectionIndicator/SelectionIndicator.js\";\nimport subscribeAndEvaluate from \"../subscribeAndEvaluate.js\";\nimport Timeline from \"../Timeline/Timeline.js\";\nimport VRButton from \"../VRButton/VRButton.js\";\n\nconst boundingSphereScratch = new BoundingSphere();\n\nfunction onTimelineScrubfunction(e) {\n  const clock = e.clock;\n  clock.currentTime = e.timeJulian;\n  clock.shouldAnimate = false;\n}\n\nfunction getCesium3DTileFeatureDescription(feature) {\n  const propertyIds = feature.getPropertyIds();\n\n  let html = \"\";\n  propertyIds.forEach(function (propertyId) {\n    const value = feature.getProperty(propertyId);\n    if (defined(value)) {\n      html += `<tr><th>${propertyId}</th><td>${value}</td></tr>`;\n    }\n  });\n\n  if (html.length > 0) {\n    html = `<table class=\"cesium-infoBox-defaultTable\"><tbody>${html}</tbody></table>`;\n  }\n\n  return html;\n}\n\nfunction getCesium3DTileFeatureName(feature) {\n  // We need to iterate all property IDs to find potential\n  // candidates, but since we prefer some property IDs\n  // over others, we store them in an indexed array\n  // and then use the first defined element in the array\n  // as the preferred choice.\n\n  let i;\n  const possibleIds = [];\n  const propertyIds = feature.getPropertyIds();\n  for (i = 0; i < propertyIds.length; i++) {\n    const propertyId = propertyIds[i];\n    if (/^name$/i.test(propertyId)) {\n      possibleIds[0] = feature.getProperty(propertyId);\n    } else if (/name/i.test(propertyId)) {\n      possibleIds[1] = feature.getProperty(propertyId);\n    } else if (/^title$/i.test(propertyId)) {\n      possibleIds[2] = feature.getProperty(propertyId);\n    } else if (/^(id|identifier)$/i.test(propertyId)) {\n      possibleIds[3] = feature.getProperty(propertyId);\n    } else if (/element/i.test(propertyId)) {\n      possibleIds[4] = feature.getProperty(propertyId);\n    } else if (/(id|identifier)$/i.test(propertyId)) {\n      possibleIds[5] = feature.getProperty(propertyId);\n    }\n  }\n\n  const length = possibleIds.length;\n  for (i = 0; i < length; i++) {\n    const item = possibleIds[i];\n    if (defined(item) && item !== \"\") {\n      return item;\n    }\n  }\n  return \"Unnamed Feature\";\n}\n\nfunction pickEntity(viewer, e) {\n  const picked = viewer.scene.pick(e.position);\n  if (defined(picked)) {\n    const id = picked.id ?? picked.primitive.id;\n    if (id instanceof Entity) {\n      return id;\n    }\n\n    if (picked instanceof Cesium3DTileFeature) {\n      return new Entity({\n        name: getCesium3DTileFeatureName(picked),\n        description: getCesium3DTileFeatureDescription(picked),\n        feature: picked,\n      });\n    }\n  }\n\n  // No regular entity picked.  Try picking features from imagery layers.\n  if (defined(viewer.scene.globe)) {\n    return pickImageryLayerFeature(viewer, e.position);\n  }\n}\n\nconst scratchStopTime = new JulianDate();\n\nfunction linkTimelineToDataSourceClock(timeline, dataSource) {\n  if (defined(dataSource)) {\n    const dataSourceClock = dataSource.clock;\n    if (defined(dataSourceClock) && defined(timeline)) {\n      const startTime = dataSourceClock.startTime;\n      let stopTime = dataSourceClock.stopTime;\n      // When the start and stop times are equal, set the timeline to the shortest interval\n      // starting at the start time. This prevents an invalid timeline configuration.\n      if (JulianDate.equals(startTime, stopTime)) {\n        stopTime = JulianDate.addSeconds(\n          startTime,\n          CesiumMath.EPSILON2,\n          scratchStopTime,\n        );\n      }\n      timeline.updateFromClock();\n      timeline.zoomTo(startTime, stopTime);\n    }\n  }\n}\n\nconst cartesian3Scratch = new Cartesian3();\n\nfunction pickImageryLayerFeature(viewer, windowPosition) {\n  const scene = viewer.scene;\n  const pickRay = scene.camera.getPickRay(windowPosition);\n  const imageryLayerFeaturePromise =\n    scene.imageryLayers.pickImageryLayerFeatures(pickRay, scene);\n  if (!defined(imageryLayerFeaturePromise)) {\n    return;\n  }\n\n  // Imagery layer feature picking is asynchronous, so put up a message while loading.\n  const loadingMessage = new Entity({\n    id: \"Loading...\",\n    description: \"Loading feature information...\",\n  });\n\n  imageryLayerFeaturePromise.then(\n    function (features) {\n      // Has this async pick been superseded by a later one?\n      if (viewer.selectedEntity !== loadingMessage) {\n        return;\n      }\n\n      if (!defined(features) || features.length === 0) {\n        viewer.selectedEntity = createNoFeaturesEntity();\n        return;\n      }\n\n      // Select the first feature.\n      const feature = features[0];\n\n      const entity = new Entity({\n        id: feature.name,\n        description: feature.description,\n      });\n\n      if (defined(feature.position)) {\n        const ecfPosition = viewer.scene.ellipsoid.cartographicToCartesian(\n          feature.position,\n          cartesian3Scratch,\n        );\n        entity.position = new ConstantPositionProperty(ecfPosition);\n      }\n\n      viewer.selectedEntity = entity;\n    },\n    function () {\n      // Has this async pick been superseded by a later one?\n      if (viewer.selectedEntity !== loadingMessage) {\n        return;\n      }\n      viewer.selectedEntity = createNoFeaturesEntity();\n    },\n  );\n\n  return loadingMessage;\n}\n\nfunction createNoFeaturesEntity() {\n  return new Entity({\n    id: \"None\",\n    description: \"No features found.\",\n  });\n}\n\nfunction enableVRUI(viewer, enabled) {\n  const geocoder = viewer._geocoder;\n  const homeButton = viewer._homeButton;\n  const sceneModePicker = viewer._sceneModePicker;\n  const projectionPicker = viewer._projectionPicker;\n  const baseLayerPicker = viewer._baseLayerPicker;\n  const animation = viewer._animation;\n  const timeline = viewer._timeline;\n  const fullscreenButton = viewer._fullscreenButton;\n  const infoBox = viewer._infoBox;\n  const selectionIndicator = viewer._selectionIndicator;\n\n  const visibility = enabled ? \"hidden\" : \"visible\";\n\n  if (defined(geocoder)) {\n    geocoder.container.style.visibility = visibility;\n  }\n  if (defined(homeButton)) {\n    homeButton.container.style.visibility = visibility;\n  }\n  if (defined(sceneModePicker)) {\n    sceneModePicker.container.style.visibility = visibility;\n  }\n  if (defined(projectionPicker)) {\n    projectionPicker.container.style.visibility = visibility;\n  }\n  if (defined(baseLayerPicker)) {\n    baseLayerPicker.container.style.visibility = visibility;\n  }\n  if (defined(animation)) {\n    animation.container.style.visibility = visibility;\n  }\n  if (defined(timeline)) {\n    timeline.container.style.visibility = visibility;\n  }\n  if (\n    defined(fullscreenButton) &&\n    fullscreenButton.viewModel.isFullscreenEnabled\n  ) {\n    fullscreenButton.container.style.visibility = visibility;\n  }\n  if (defined(infoBox)) {\n    infoBox.container.style.visibility = visibility;\n  }\n  if (defined(selectionIndicator)) {\n    selectionIndicator.container.style.visibility = visibility;\n  }\n\n  if (viewer._container) {\n    const right =\n      enabled || !defined(fullscreenButton)\n        ? 0\n        : fullscreenButton.container.clientWidth;\n    viewer._vrButton.container.style.right = `${right}px`;\n\n    viewer.forceResize();\n  }\n}\n\n/**\n * @typedef {object} Viewer.ConstructorOptions\n *\n * Initialization options for the Viewer constructor\n *\n * @property {boolean} [animation=true] If set to false, the Animation widget will not be created.\n * @property {boolean} [baseLayerPicker=true] If set to false, the BaseLayerPicker widget will not be created.\n * @property {boolean} [fullscreenButton=true] If set to false, the FullscreenButton widget will not be created.\n * @property {boolean} [vrButton=false] If set to true, the VRButton widget will be created.\n * @property {boolean|IonGeocodeProviderType|GeocoderService[]} [geocoder=IonGeocodeProviderType.DEFAULT] The geocoding service or services to use when searching with the Geocoder widget. If set to false, the Geocoder widget will not be created.\n * @property {boolean} [homeButton=true] If set to false, the HomeButton widget will not be created.\n * @property {boolean} [infoBox=true] If set to false, the InfoBox widget will not be created.\n * @property {boolean} [sceneModePicker=true] If set to false, the SceneModePicker widget will not be created.\n * @property {boolean} [selectionIndicator=true] If set to false, the SelectionIndicator widget will not be created.\n * @property {boolean} [timeline=true] If set to false, the Timeline widget will not be created.\n * @property {boolean} [navigationHelpButton=true] If set to false, the navigation help button will not be created.\n * @property {boolean} [navigationInstructionsInitiallyVisible=true] True if the navigation instructions should initially be visible, or false if the should not be shown until the user explicitly clicks the button.\n * @property {boolean} [scene3DOnly=false] When <code>true</code>, each geometry instance will only be rendered in 3D to save GPU memory.\n * @property {boolean} [shouldAnimate=false] <code>true</code> if the clock should attempt to advance simulation time by default, <code>false</code> otherwise.  This option takes precedence over setting {@link Viewer#clockViewModel}.\n * @property {ClockViewModel} [clockViewModel=new ClockViewModel(clock)] The clock view model to use to control current time.\n * @property {ProviderViewModel} [selectedImageryProviderViewModel] The view model for the current base imagery layer, if not supplied the first available base layer is used.  This value is only valid if `baseLayerPicker` is set to true.\n * @property {ProviderViewModel[]} [imageryProviderViewModels=createDefaultImageryProviderViewModels()] The array of ProviderViewModels to be selectable from the BaseLayerPicker.  This value is only valid if `baseLayerPicker` is set to true.\n * @property {ProviderViewModel} [selectedTerrainProviderViewModel] The view model for the current base terrain layer, if not supplied the first available base layer is used.  This value is only valid if `baseLayerPicker` is set to true.\n * @property {ProviderViewModel[]} [terrainProviderViewModels=createDefaultTerrainProviderViewModels()] The array of ProviderViewModels to be selectable from the BaseLayerPicker.  This value is only valid if `baseLayerPicker` is set to true.\n * @property {ImageryLayer|false} [baseLayer=ImageryLayer.fromWorldImagery()] The bottommost imagery layer applied to the globe. If set to <code>false</code>, no imagery provider will be added. This value is only valid if `baseLayerPicker` is set to false. Cannot be used when `globe` is set to false.\n * @property {Ellipsoid} [ellipsoid = Ellipsoid.default] The default ellipsoid.\n * @property {TerrainProvider} [terrainProvider=new EllipsoidTerrainProvider()] The terrain provider to use\n * @property {Terrain} [terrain] A terrain object which handles asynchronous terrain provider. Can only specify if options.terrainProvider is undefined.\n * @property {SkyBox|false} [skyBox] The skybox used to render the stars. When <code>undefined</code> and the WGS84 ellipsoid used, the default stars are used. If set to <code>false</code>, no skyBox, Sun, or Moon will be added.\n * @property {SkyAtmosphere|false} [skyAtmosphere] Blue sky, and the glow around the Earth's limb. Enabled when the WGS84 ellipsoid used. Set to <code>false</code> to turn it off.\n * @property {Element|string} [fullscreenElement=document.body] The element or id to be placed into fullscreen mode when the full screen button is pressed.\n * @property {boolean} [useDefaultRenderLoop=true] True if this widget should control the render loop, false otherwise.\n * @property {number} [targetFrameRate] The target frame rate when using the default render loop.\n * @property {boolean} [showRenderLoopErrors=true] If true, this widget will automatically display an HTML panel to the user containing the error, if a render loop error occurs.\n * @property {boolean} [useBrowserRecommendedResolution=true] If true, render at the browser's recommended resolution and ignore <code>window.devicePixelRatio</code>.\n * @property {boolean} [automaticallyTrackDataSourceClocks=true] If true, this widget will automatically track the clock settings of newly added DataSources, updating if the DataSource's clock changes.  Set this to false if you want to configure the clock independently.\n * @property {ContextOptions} [contextOptions] Context and WebGL creation properties passed to {@link Scene}.\n * @property {SceneMode} [sceneMode=SceneMode.SCENE3D] The initial scene mode.\n * @property {MapProjection} [mapProjection=new GeographicProjection(options.ellipsoid)] The map projection to use in 2D and Columbus View modes.\n * @property {Globe|false} [globe=new Globe(options.ellipsoid)] The globe to use in the scene.  If set to <code>false</code>, no globe will be added and the sky atmosphere will be hidden by default.\n * @property {boolean} [orderIndependentTranslucency=true] If true and the configuration supports it, use order independent translucency.\n * @property {Element|string} [creditContainer] The DOM element or ID that will contain the {@link CreditDisplay}.  If not specified, the credits are added to the bottom of the widget itself.\n * @property {Element|string} [creditViewport] The DOM element or ID that will contain the credit pop up created by the {@link CreditDisplay}.  If not specified, it will appear over the widget itself.\n * @property {DataSourceCollection} [dataSources=new DataSourceCollection()] The collection of data sources visualized by the widget.  If this parameter is provided,\n *                               the instance is assumed to be owned by the caller and will not be destroyed when the viewer is destroyed.\n * @property {boolean} [shadows=false] Determines if shadows are cast by light sources.\n * @property {ShadowMode} [terrainShadows=ShadowMode.RECEIVE_ONLY] Determines if the terrain casts or receives shadows from light sources.\n * @property {MapMode2D} [mapMode2D=MapMode2D.INFINITE_SCROLL] Determines if the 2D map is rotatable or can be scrolled infinitely in the horizontal direction.\n * @property {boolean} [projectionPicker=false] If set to true, the ProjectionPicker widget will be created.\n * @property {boolean} [blurActiveElementOnCanvasFocus=true] If true, the active element will blur when the viewer's canvas is clicked. Setting this to false is useful for cases when the canvas is clicked only for retrieving position or an entity data without actually meaning to set the canvas to be the active element.\n * @property {boolean} [requestRenderMode=false] If true, rendering a frame will only occur when needed as determined by changes within the scene. Enabling reduces the CPU/GPU usage of your application and uses less battery on mobile, but requires using {@link Scene#requestRender} to render a new frame explicitly in this mode. This will be necessary in many cases after making changes to the scene in other parts of the API. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @property {number} [maximumRenderTimeChange=0.0] If requestRenderMode is true, this value defines the maximum change in simulation time allowed before a render is requested. See {@link https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/|Improving Performance with Explicit Rendering}.\n * @property {number} [depthPlaneEllipsoidOffset=0.0] Adjust the DepthPlane to address rendering artefacts below ellipsoid zero elevation.\n * @property {number} [msaaSamples=4] If provided, this value controls the rate of multisample antialiasing. Typical multisampling rates are 2, 4, and sometimes 8 samples per pixel. Higher sampling rates of MSAA may impact performance in exchange for improved visual quality. This value only applies to WebGL2 contexts that support multisample render targets. Set to 1 to disable MSAA.\n */\n\n/**\n * A base widget for building applications.  It composites all of the standard Cesium widgets into one reusable package.\n * The widget can always be extended by using mixins, which add functionality useful for a variety of applications.\n *\n * @alias Viewer\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Viewer.ConstructorOptions} [options] Object describing initialization options\n *\n * @exception {DeveloperError} Element with id \"container\" does not exist in the document.\n * @exception {DeveloperError} options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget, specify options.baseLayer instead.\n * @exception {DeveloperError} options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget, specify options.terrainProvider instead.\n *\n * @see Animation\n * @see BaseLayerPicker\n * @see CesiumWidget\n * @see FullscreenButton\n * @see HomeButton\n * @see SceneModePicker\n * @see Timeline\n * @see viewerDragDropMixin\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=hello-world|Cesium Sandcastle Hello World Demo}\n *\n * @example\n * // Initialize the viewer widget with several custom options and mixins.\n * try {\n *   const viewer = new Cesium.Viewer(\"cesiumContainer\", {\n *     // Start in Columbus Viewer\n *     sceneMode: Cesium.SceneMode.COLUMBUS_VIEW,\n *     // Use Cesium World Terrain\n *     terrain: Cesium.Terrain.fromWorldTerrain(),\n *     // Hide the base layer picker\n *     baseLayerPicker: false,\n *     // Use OpenStreetMaps\n *     baseLayer: new Cesium.ImageryLayer(new Cesium.OpenStreetMapImageryProvider({\n *       url: \"https://tile.openstreetmap.org/\"\n *     })),\n *     skyBox: new Cesium.SkyBox({\n *       sources: {\n *         positiveX: \"stars/TychoSkymapII.t3_08192x04096_80_px.jpg\",\n *         negativeX: \"stars/TychoSkymapII.t3_08192x04096_80_mx.jpg\",\n *         positiveY: \"stars/TychoSkymapII.t3_08192x04096_80_py.jpg\",\n *         negativeY: \"stars/TychoSkymapII.t3_08192x04096_80_my.jpg\",\n *         positiveZ: \"stars/TychoSkymapII.t3_08192x04096_80_pz.jpg\",\n *         negativeZ: \"stars/TychoSkymapII.t3_08192x04096_80_mz.jpg\"\n *       }\n *     }),\n *     // Show Columbus View map with Web Mercator projection\n *     mapProjection: new Cesium.WebMercatorProjection()\n *   });\n * } catch (error) {\n *   console.log(error);\n * }\n *\n * // Add basic drag and drop functionality\n * viewer.extend(Cesium.viewerDragDropMixin);\n *\n * // Show a pop-up alert if we encounter an error when processing a dropped file\n * viewer.dropError.addEventListener(function(dropHandler, name, error) {\n *   console.log(error);\n *   window.alert(error);\n * });\n */\nfunction Viewer(container, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(container)) {\n    throw new DeveloperError(\"container is required.\");\n  }\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //>>includeStart('debug', pragmas.debug);\n  if (\n    options.globe === false &&\n    defined(options.baseLayer) &&\n    options.baseLayer !== false\n  ) {\n    throw new DeveloperError(\"Cannot use baseLayer when globe is disabled.\");\n  }\n  //>>includeEnd('debug');\n\n  const createBaseLayerPicker =\n    (!defined(options.globe) || options.globe !== false) &&\n    (!defined(options.baseLayerPicker) || options.baseLayerPicker !== false);\n\n  //>>includeStart('debug', pragmas.debug);\n  // If not using BaseLayerPicker, selectedImageryProviderViewModel is an invalid option\n  if (\n    !createBaseLayerPicker &&\n    defined(options.selectedImageryProviderViewModel)\n  ) {\n    throw new DeveloperError(\n      \"options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget. \\\nEither specify options.baseLayer instead or set options.baseLayerPicker to true.\",\n    );\n  }\n\n  // If not using BaseLayerPicker, selectedTerrainProviderViewModel is an invalid option\n  if (\n    !createBaseLayerPicker &&\n    defined(options.selectedTerrainProviderViewModel)\n  ) {\n    throw new DeveloperError(\n      \"options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget. \\\nEither specify options.terrainProvider instead or set options.baseLayerPicker to true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  const that = this;\n\n  const viewerContainer = document.createElement(\"div\");\n  viewerContainer.className = \"cesium-viewer\";\n  container.appendChild(viewerContainer);\n\n  // Cesium widget container\n  const cesiumWidgetContainer = document.createElement(\"div\");\n  cesiumWidgetContainer.className = \"cesium-viewer-cesiumWidgetContainer\";\n  viewerContainer.appendChild(cesiumWidgetContainer);\n\n  // Bottom container\n  const bottomContainer = document.createElement(\"div\");\n  bottomContainer.className = \"cesium-viewer-bottom\";\n\n  viewerContainer.appendChild(bottomContainer);\n\n  const scene3DOnly = options.scene3DOnly ?? false;\n\n  let clock;\n  let clockViewModel;\n  let destroyClockViewModel = false;\n  if (defined(options.clockViewModel)) {\n    clockViewModel = options.clockViewModel;\n    clock = clockViewModel.clock;\n  } else {\n    clock = new Clock();\n    clockViewModel = new ClockViewModel(clock);\n    destroyClockViewModel = true;\n  }\n\n  // Cesium widget\n  const cesiumWidget = new CesiumWidget(cesiumWidgetContainer, {\n    baseLayer:\n      (createBaseLayerPicker &&\n        defined(options.selectedImageryProviderViewModel)) ||\n      defined(options.baseLayer) ||\n      defined(options.imageryProvider)\n        ? false\n        : undefined,\n    clock: clock,\n    shouldAnimate: options.shouldAnimate,\n    skyBox: options.skyBox,\n    skyAtmosphere: options.skyAtmosphere,\n    sceneMode: options.sceneMode,\n    ellipsoid: options.ellipsoid,\n    mapProjection: options.mapProjection,\n    globe: options.globe,\n    orderIndependentTranslucency: options.orderIndependentTranslucency,\n    automaticallyTrackDataSourceClocks:\n      options.automaticallyTrackDataSourceClocks,\n    contextOptions: options.contextOptions,\n    useDefaultRenderLoop: options.useDefaultRenderLoop,\n    targetFrameRate: options.targetFrameRate,\n    showRenderLoopErrors: options.showRenderLoopErrors,\n    useBrowserRecommendedResolution: options.useBrowserRecommendedResolution,\n    creditContainer: defined(options.creditContainer)\n      ? options.creditContainer\n      : bottomContainer,\n    creditViewport: options.creditViewport,\n    dataSources: options.dataSources,\n    scene3DOnly: scene3DOnly,\n    shadows: options.shadows,\n    terrainShadows: options.terrainShadows,\n    mapMode2D: options.mapMode2D,\n    blurActiveElementOnCanvasFocus: options.blurActiveElementOnCanvasFocus,\n    requestRenderMode: options.requestRenderMode,\n    maximumRenderTimeChange: options.maximumRenderTimeChange,\n    depthPlaneEllipsoidOffset: options.depthPlaneEllipsoidOffset,\n    msaaSamples: options.msaaSamples,\n  });\n\n  const scene = cesiumWidget.scene;\n\n  const eventHelper = new EventHelper();\n\n  eventHelper.add(clock.onTick, Viewer.prototype._onTick, this);\n\n  // Selection Indicator\n  let selectionIndicator;\n  if (\n    !defined(options.selectionIndicator) ||\n    options.selectionIndicator !== false\n  ) {\n    const selectionIndicatorContainer = document.createElement(\"div\");\n    selectionIndicatorContainer.className =\n      \"cesium-viewer-selectionIndicatorContainer\";\n    viewerContainer.appendChild(selectionIndicatorContainer);\n    selectionIndicator = new SelectionIndicator(\n      selectionIndicatorContainer,\n      scene,\n    );\n  }\n\n  // Info Box\n  let infoBox;\n  if (!defined(options.infoBox) || options.infoBox !== false) {\n    const infoBoxContainer = document.createElement(\"div\");\n    infoBoxContainer.className = \"cesium-viewer-infoBoxContainer\";\n    viewerContainer.appendChild(infoBoxContainer);\n    infoBox = new InfoBox(infoBoxContainer);\n\n    const infoBoxViewModel = infoBox.viewModel;\n    eventHelper.add(\n      infoBoxViewModel.cameraClicked,\n      Viewer.prototype._onInfoBoxCameraClicked,\n      this,\n    );\n    eventHelper.add(\n      infoBoxViewModel.closeClicked,\n      Viewer.prototype._onInfoBoxClockClicked,\n      this,\n    );\n  }\n\n  // Main Toolbar\n  const toolbar = document.createElement(\"div\");\n  toolbar.className = \"cesium-viewer-toolbar\";\n  viewerContainer.appendChild(toolbar);\n\n  // Geocoder\n  let geocoder;\n  if (!defined(options.geocoder) || options.geocoder !== false) {\n    const geocoderContainer = document.createElement(\"div\");\n    geocoderContainer.className = \"cesium-viewer-geocoderContainer\";\n    toolbar.appendChild(geocoderContainer);\n    let geocoderService;\n    if (typeof options.geocoder === \"string\") {\n      geocoderService = [\n        new IonGeocoderService({\n          scene,\n          geocodeProviderType: options.geocoder,\n        }),\n      ];\n    } else if (\n      defined(options.geocoder) &&\n      typeof options.geocoder !== \"boolean\"\n    ) {\n      geocoderService = Array.isArray(options.geocoder)\n        ? options.geocoder\n        : [options.geocoder];\n    }\n    geocoder = new Geocoder({\n      container: geocoderContainer,\n      geocoderServices: geocoderService,\n      scene: scene,\n    });\n    // Subscribe to search so that we can clear the trackedEntity when it is clicked.\n    eventHelper.add(\n      geocoder.viewModel.search.beforeExecute,\n      Viewer.prototype._clearObjects,\n      this,\n    );\n  }\n\n  // HomeButton\n  let homeButton;\n  if (!defined(options.homeButton) || options.homeButton !== false) {\n    homeButton = new HomeButton(toolbar, scene);\n    if (defined(geocoder)) {\n      eventHelper.add(homeButton.viewModel.command.afterExecute, function () {\n        const viewModel = geocoder.viewModel;\n        viewModel.searchText = \"\";\n        if (viewModel.isSearchInProgress) {\n          viewModel.search();\n        }\n      });\n    }\n    // Subscribe to the home button beforeExecute event so that we can clear the trackedEntity.\n    eventHelper.add(\n      homeButton.viewModel.command.beforeExecute,\n      Viewer.prototype._clearTrackedObject,\n      this,\n    );\n  }\n\n  // SceneModePicker\n  // By default, we silently disable the scene mode picker if scene3DOnly is true,\n  // but if sceneModePicker is explicitly set to true, throw an error.\n  //>>includeStart('debug', pragmas.debug);\n  if (options.sceneModePicker === true && scene3DOnly) {\n    throw new DeveloperError(\n      \"options.sceneModePicker is not available when options.scene3DOnly is set to true.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  let sceneModePicker;\n  if (\n    !scene3DOnly &&\n    (!defined(options.sceneModePicker) || options.sceneModePicker !== false)\n  ) {\n    sceneModePicker = new SceneModePicker(toolbar, scene);\n  }\n\n  let projectionPicker;\n  if (options.projectionPicker) {\n    projectionPicker = new ProjectionPicker(toolbar, scene);\n  }\n\n  // BaseLayerPicker\n  let baseLayerPicker;\n  let baseLayerPickerDropDown;\n  if (createBaseLayerPicker) {\n    const imageryProviderViewModels =\n      options.imageryProviderViewModels ??\n      createDefaultImageryProviderViewModels();\n    const terrainProviderViewModels =\n      options.terrainProviderViewModels ??\n      createDefaultTerrainProviderViewModels();\n\n    baseLayerPicker = new BaseLayerPicker(toolbar, {\n      globe: scene.globe,\n      imageryProviderViewModels: imageryProviderViewModels,\n      selectedImageryProviderViewModel:\n        options.selectedImageryProviderViewModel,\n      terrainProviderViewModels: terrainProviderViewModels,\n      selectedTerrainProviderViewModel:\n        options.selectedTerrainProviderViewModel,\n    });\n\n    //Grab the dropdown for resize code.\n    const elements = toolbar.getElementsByClassName(\n      \"cesium-baseLayerPicker-dropDown\",\n    );\n    baseLayerPickerDropDown = elements[0];\n  }\n\n  // These need to be set after the BaseLayerPicker is created in order to take effect\n  if (defined(options.baseLayer) && options.baseLayer !== false) {\n    if (createBaseLayerPicker) {\n      baseLayerPicker.viewModel.selectedImagery = undefined;\n    }\n    scene.imageryLayers.removeAll();\n    scene.imageryLayers.add(options.baseLayer);\n  }\n\n  if (defined(options.terrainProvider)) {\n    if (createBaseLayerPicker) {\n      baseLayerPicker.viewModel.selectedTerrain = undefined;\n    }\n    scene.terrainProvider = options.terrainProvider;\n  }\n\n  if (defined(options.terrain)) {\n    //>>includeStart('debug', pragmas.debug);\n    if (defined(options.terrainProvider)) {\n      throw new DeveloperError(\n        \"Specify either options.terrainProvider or options.terrain.\",\n      );\n    }\n    //>>includeEnd('debug');\n\n    if (createBaseLayerPicker) {\n      // Required as this is otherwise set by the baseLayerPicker\n      scene.globe.depthTestAgainstTerrain = true;\n    }\n\n    scene.setTerrain(options.terrain);\n  }\n\n  // Navigation Help Button\n  let navigationHelpButton;\n  if (\n    !defined(options.navigationHelpButton) ||\n    options.navigationHelpButton !== false\n  ) {\n    let showNavHelp = true;\n    try {\n      //window.localStorage is null if disabled in Firefox or undefined in browsers with implementation\n      if (defined(window.localStorage)) {\n        const hasSeenNavHelp = window.localStorage.getItem(\n          \"cesium-hasSeenNavHelp\",\n        );\n        if (defined(hasSeenNavHelp) && Boolean(hasSeenNavHelp)) {\n          showNavHelp = false;\n        } else {\n          window.localStorage.setItem(\"cesium-hasSeenNavHelp\", \"true\");\n        }\n      }\n    } catch (e) {\n      //Accessing window.localStorage throws if disabled in Chrome\n      //window.localStorage.setItem throws if in Safari private browsing mode or in any browser if we are over quota.\n    }\n    navigationHelpButton = new NavigationHelpButton({\n      container: toolbar,\n      instructionsInitiallyVisible:\n        options.navigationInstructionsInitiallyVisible ?? showNavHelp,\n    });\n  }\n\n  // Animation\n  let animation;\n  if (!defined(options.animation) || options.animation !== false) {\n    const animationContainer = document.createElement(\"div\");\n    animationContainer.className = \"cesium-viewer-animationContainer\";\n    viewerContainer.appendChild(animationContainer);\n    animation = new Animation(\n      animationContainer,\n      new AnimationViewModel(clockViewModel),\n    );\n  }\n\n  // Timeline\n  let timeline;\n  if (!defined(options.timeline) || options.timeline !== false) {\n    const timelineContainer = document.createElement(\"div\");\n    timelineContainer.className = \"cesium-viewer-timelineContainer\";\n    viewerContainer.appendChild(timelineContainer);\n    timeline = new Timeline(timelineContainer, clock);\n    timeline.addEventListener(\"settime\", onTimelineScrubfunction, false);\n    timeline.zoomTo(clock.startTime, clock.stopTime);\n  }\n\n  // Fullscreen\n  let fullscreenButton;\n  let fullscreenSubscription;\n  let fullscreenContainer;\n  if (\n    !defined(options.fullscreenButton) ||\n    options.fullscreenButton !== false\n  ) {\n    fullscreenContainer = document.createElement(\"div\");\n    fullscreenContainer.className = \"cesium-viewer-fullscreenContainer\";\n    viewerContainer.appendChild(fullscreenContainer);\n    fullscreenButton = new FullscreenButton(\n      fullscreenContainer,\n      options.fullscreenElement,\n    );\n\n    //Subscribe to fullscreenButton.viewModel.isFullscreenEnabled so\n    //that we can hide/show the button as well as size the timeline.\n    fullscreenSubscription = subscribeAndEvaluate(\n      fullscreenButton.viewModel,\n      \"isFullscreenEnabled\",\n      function (isFullscreenEnabled) {\n        fullscreenContainer.style.display = isFullscreenEnabled\n          ? \"block\"\n          : \"none\";\n        if (defined(timeline)) {\n          timeline.container.style.right = `${fullscreenContainer.clientWidth}px`;\n          timeline.resize();\n        }\n      },\n    );\n  }\n\n  // VR\n  let vrButton;\n  let vrSubscription;\n  let vrModeSubscription;\n  if (options.vrButton) {\n    const vrContainer = document.createElement(\"div\");\n    vrContainer.className = \"cesium-viewer-vrContainer\";\n    viewerContainer.appendChild(vrContainer);\n    vrButton = new VRButton(vrContainer, scene, options.fullScreenElement);\n\n    vrSubscription = subscribeAndEvaluate(\n      vrButton.viewModel,\n      \"isVREnabled\",\n      function (isVREnabled) {\n        vrContainer.style.display = isVREnabled ? \"block\" : \"none\";\n        if (defined(fullscreenButton)) {\n          vrContainer.style.right = `${fullscreenContainer.clientWidth}px`;\n        }\n        if (defined(timeline)) {\n          timeline.container.style.right = `${vrContainer.clientWidth}px`;\n          timeline.resize();\n        }\n      },\n    );\n\n    vrModeSubscription = subscribeAndEvaluate(\n      vrButton.viewModel,\n      \"isVRMode\",\n      function (isVRMode) {\n        enableVRUI(that, isVRMode);\n      },\n    );\n  }\n\n  //Assign all properties to this instance.  No \"this\" assignments should\n  //take place above this line.\n  this._baseLayerPickerDropDown = baseLayerPickerDropDown;\n  this._fullscreenSubscription = fullscreenSubscription;\n  this._vrSubscription = vrSubscription;\n  this._vrModeSubscription = vrModeSubscription;\n  this._dataSourceChangedListeners = {};\n  this._container = container;\n  this._bottomContainer = bottomContainer;\n  this._element = viewerContainer;\n  this._cesiumWidget = cesiumWidget;\n  this._selectionIndicator = selectionIndicator;\n  this._infoBox = infoBox;\n  this._clockViewModel = clockViewModel;\n  this._destroyClockViewModel = destroyClockViewModel;\n  this._toolbar = toolbar;\n  this._homeButton = homeButton;\n  this._sceneModePicker = sceneModePicker;\n  this._projectionPicker = projectionPicker;\n  this._baseLayerPicker = baseLayerPicker;\n  this._navigationHelpButton = navigationHelpButton;\n  this._animation = animation;\n  this._timeline = timeline;\n  this._fullscreenButton = fullscreenButton;\n  this._vrButton = vrButton;\n  this._geocoder = geocoder;\n  this._eventHelper = eventHelper;\n  this._lastWidth = 0;\n  this._lastHeight = 0;\n  this._enableInfoOrSelection = defined(infoBox) || defined(selectionIndicator);\n  this._selectedEntity = undefined;\n  this._selectedEntityChanged = new Event();\n\n  const dataSourceCollection = this._cesiumWidget.dataSources;\n  const dataSourceDisplay = this._cesiumWidget.dataSourceDisplay;\n\n  //Listen to data source events in order to track clock changes.\n  eventHelper.add(\n    dataSourceCollection.dataSourceAdded,\n    Viewer.prototype._onDataSourceAdded,\n    this,\n  );\n  eventHelper.add(\n    dataSourceCollection.dataSourceRemoved,\n    Viewer.prototype._onDataSourceRemoved,\n    this,\n  );\n\n  // Prior to each render, check if anything needs to be resized.\n  eventHelper.add(scene.postUpdate, Viewer.prototype.resize, this);\n\n  // We need to subscribe to the data sources and collections so that we can clear the\n  // tracked object when it is removed from the scene.\n  // Subscribe to current data sources\n  const dataSourceLength = dataSourceCollection.length;\n  for (let i = 0; i < dataSourceLength; i++) {\n    this._dataSourceAdded(dataSourceCollection, dataSourceCollection.get(i));\n  }\n  this._dataSourceAdded(undefined, dataSourceDisplay.defaultDataSource);\n\n  // Hook up events so that we can subscribe to future sources.\n  eventHelper.add(\n    dataSourceCollection.dataSourceAdded,\n    Viewer.prototype._dataSourceAdded,\n    this,\n  );\n  eventHelper.add(\n    dataSourceCollection.dataSourceRemoved,\n    Viewer.prototype._dataSourceRemoved,\n    this,\n  );\n\n  // Subscribe to left clicks and zoom to the picked object.\n  function pickAndTrackObject(e) {\n    const entity = pickEntity(that, e);\n    if (defined(entity)) {\n      //Only track the entity if it has a valid position at the current time.\n      if (\n        Property.getValueOrUndefined(entity.position, that.clock.currentTime)\n      ) {\n        that.trackedEntity = entity;\n      } else {\n        that.zoomTo(entity);\n      }\n    } else if (defined(that.trackedEntity)) {\n      that.trackedEntity = undefined;\n    }\n  }\n\n  function pickAndSelectObject(e) {\n    that.selectedEntity = pickEntity(that, e);\n  }\n\n  cesiumWidget.screenSpaceEventHandler.setInputAction(\n    pickAndSelectObject,\n    ScreenSpaceEventType.LEFT_CLICK,\n  );\n  cesiumWidget.screenSpaceEventHandler.setInputAction(\n    pickAndTrackObject,\n    ScreenSpaceEventType.LEFT_DOUBLE_CLICK,\n  );\n\n  // This allows to update the Viewer's _clockViewModel instead of the CesiumWidget's _clock\n  // when CesiumWidget is created from the Viewer.\n  cesiumWidget._canAnimateUpdateCallback = this._updateCanAnimate(this);\n}\n\nObject.defineProperties(Viewer.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof Viewer.prototype\n   * @type {Element}\n   * @readonly\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Manages the list of credits to display on screen and in the lightbox.\n   * @memberof Viewer.prototype\n   *\n   * @type {CreditDisplay}\n   */\n  creditDisplay: {\n    get: function () {\n      return this._cesiumWidget.creditDisplay;\n    },\n  },\n\n  /**\n   * Gets the DOM element for the area at the bottom of the window containing the\n   * {@link CreditDisplay} and potentially other things.\n   * @memberof Viewer.prototype\n   * @type {Element}\n   * @readonly\n   */\n  bottomContainer: {\n    get: function () {\n      return this._bottomContainer;\n    },\n  },\n\n  /**\n   * Gets the CesiumWidget.\n   * @memberof Viewer.prototype\n   * @type {CesiumWidget}\n   * @readonly\n   */\n  cesiumWidget: {\n    get: function () {\n      return this._cesiumWidget;\n    },\n  },\n\n  /**\n   * Gets the selection indicator.\n   * @memberof Viewer.prototype\n   * @type {SelectionIndicator}\n   * @readonly\n   */\n  selectionIndicator: {\n    get: function () {\n      return this._selectionIndicator;\n    },\n  },\n\n  /**\n   * Gets the info box.\n   * @memberof Viewer.prototype\n   * @type {InfoBox}\n   * @readonly\n   */\n  infoBox: {\n    get: function () {\n      return this._infoBox;\n    },\n  },\n\n  /**\n   * Gets the Geocoder.\n   * @memberof Viewer.prototype\n   * @type {Geocoder}\n   * @readonly\n   */\n  geocoder: {\n    get: function () {\n      return this._geocoder;\n    },\n  },\n\n  /**\n   * Gets the HomeButton.\n   * @memberof Viewer.prototype\n   * @type {HomeButton}\n   * @readonly\n   */\n  homeButton: {\n    get: function () {\n      return this._homeButton;\n    },\n  },\n\n  /**\n   * Gets the SceneModePicker.\n   * @memberof Viewer.prototype\n   * @type {SceneModePicker}\n   * @readonly\n   */\n  sceneModePicker: {\n    get: function () {\n      return this._sceneModePicker;\n    },\n  },\n\n  /**\n   * Gets the ProjectionPicker.\n   * @memberof Viewer.prototype\n   * @type {ProjectionPicker}\n   * @readonly\n   */\n  projectionPicker: {\n    get: function () {\n      return this._projectionPicker;\n    },\n  },\n\n  /**\n   * Gets the BaseLayerPicker.\n   * @memberof Viewer.prototype\n   * @type {BaseLayerPicker}\n   * @readonly\n   */\n  baseLayerPicker: {\n    get: function () {\n      return this._baseLayerPicker;\n    },\n  },\n\n  /**\n   * Gets the NavigationHelpButton.\n   * @memberof Viewer.prototype\n   * @type {NavigationHelpButton}\n   * @readonly\n   */\n  navigationHelpButton: {\n    get: function () {\n      return this._navigationHelpButton;\n    },\n  },\n\n  /**\n   * Gets the Animation widget.\n   * @memberof Viewer.prototype\n   * @type {Animation}\n   * @readonly\n   */\n  animation: {\n    get: function () {\n      return this._animation;\n    },\n  },\n\n  /**\n   * Gets the Timeline widget.\n   * @memberof Viewer.prototype\n   * @type {Timeline}\n   * @readonly\n   */\n  timeline: {\n    get: function () {\n      return this._timeline;\n    },\n  },\n\n  /**\n   * Gets the FullscreenButton.\n   * @memberof Viewer.prototype\n   * @type {FullscreenButton}\n   * @readonly\n   */\n  fullscreenButton: {\n    get: function () {\n      return this._fullscreenButton;\n    },\n  },\n\n  /**\n   * Gets the VRButton.\n   * @memberof Viewer.prototype\n   * @type {VRButton}\n   * @readonly\n   */\n  vrButton: {\n    get: function () {\n      return this._vrButton;\n    },\n  },\n\n  /**\n   * Gets the display used for {@link DataSource} visualization.\n   * @memberof Viewer.prototype\n   * @type {DataSourceDisplay}\n   * @readonly\n   */\n  dataSourceDisplay: {\n    get: function () {\n      return this._cesiumWidget.dataSourceDisplay;\n    },\n  },\n\n  /**\n   * Gets the collection of entities not tied to a particular data source.\n   * This is a shortcut to [dataSourceDisplay.defaultDataSource.entities]{@link Viewer#dataSourceDisplay}.\n   * @memberof Viewer.prototype\n   * @type {EntityCollection}\n   * @readonly\n   */\n  entities: {\n    get: function () {\n      return this._cesiumWidget.entities;\n    },\n  },\n\n  /**\n   * Gets the set of {@link DataSource} instances to be visualized.\n   * @memberof Viewer.prototype\n   * @type {DataSourceCollection}\n   * @readonly\n   */\n  dataSources: {\n    get: function () {\n      return this._cesiumWidget.dataSources;\n    },\n  },\n\n  /**\n   * Gets the canvas.\n   * @memberof Viewer.prototype\n   * @type {HTMLCanvasElement}\n   * @readonly\n   */\n  canvas: {\n    get: function () {\n      return this._cesiumWidget.canvas;\n    },\n  },\n\n  /**\n   * Gets the scene.\n   * @memberof Viewer.prototype\n   * @type {Scene}\n   * @readonly\n   */\n  scene: {\n    get: function () {\n      return this._cesiumWidget.scene;\n    },\n  },\n\n  /**\n   * Determines if shadows are cast by light sources.\n   * @memberof Viewer.prototype\n   * @type {boolean}\n   */\n  shadows: {\n    get: function () {\n      return this.scene.shadowMap.enabled;\n    },\n    set: function (value) {\n      this.scene.shadowMap.enabled = value;\n    },\n  },\n\n  /**\n   * Determines if the terrain casts or shadows from light sources.\n   * @memberof Viewer.prototype\n   * @type {ShadowMode}\n   */\n  terrainShadows: {\n    get: function () {\n      return this.scene.globe.shadows;\n    },\n    set: function (value) {\n      this.scene.globe.shadows = value;\n    },\n  },\n\n  /**\n   * Get the scene's shadow map\n   * @memberof Viewer.prototype\n   * @type {ShadowMap}\n   * @readonly\n   */\n  shadowMap: {\n    get: function () {\n      return this.scene.shadowMap;\n    },\n  },\n\n  /**\n   * Gets the collection of image layers that will be rendered on the globe.\n   * @memberof Viewer.prototype\n   *\n   * @type {ImageryLayerCollection}\n   * @readonly\n   */\n  imageryLayers: {\n    get: function () {\n      return this.scene.imageryLayers;\n    },\n  },\n\n  /**\n   * The terrain provider providing surface geometry for the globe.\n   * @memberof Viewer.prototype\n   *\n   * @type {TerrainProvider}\n   */\n  terrainProvider: {\n    get: function () {\n      return this.scene.terrainProvider;\n    },\n    set: function (terrainProvider) {\n      this.scene.terrainProvider = terrainProvider;\n    },\n  },\n\n  /**\n   * Gets the camera.\n   * @memberof Viewer.prototype\n   *\n   * @type {Camera}\n   * @readonly\n   */\n  camera: {\n    get: function () {\n      return this.scene.camera;\n    },\n  },\n\n  /**\n   * Gets the default ellipsoid for the scene.\n   * @memberof Viewer.prototype\n   *\n   * @type {Ellipsoid}\n   * @default Ellipsoid.default\n   * @readonly\n   */\n  ellipsoid: {\n    get: function () {\n      return this.scene.ellipsoid;\n    },\n  },\n\n  /**\n   * Gets the post-process stages.\n   * @memberof Viewer.prototype\n   *\n   * @type {PostProcessStageCollection}\n   * @readonly\n   */\n  postProcessStages: {\n    get: function () {\n      return this.scene.postProcessStages;\n    },\n  },\n\n  /**\n   * Gets the clock.\n   * @memberof Viewer.prototype\n   * @type {Clock}\n   * @readonly\n   */\n  clock: {\n    get: function () {\n      return this._clockViewModel.clock;\n    },\n  },\n\n  /**\n   * Gets the clock view model.\n   * @memberof Viewer.prototype\n   * @type {ClockViewModel}\n   * @readonly\n   */\n  clockViewModel: {\n    get: function () {\n      return this._clockViewModel;\n    },\n  },\n\n  /**\n   * Gets the screen space event handler.\n   * @memberof Viewer.prototype\n   * @type {ScreenSpaceEventHandler}\n   * @readonly\n   */\n  screenSpaceEventHandler: {\n    get: function () {\n      return this._cesiumWidget.screenSpaceEventHandler;\n    },\n  },\n\n  /**\n   * Gets or sets the target frame rate of the widget when <code>useDefaultRenderLoop</code>\n   * is true. If undefined, the browser's requestAnimationFrame implementation\n   * determines the frame rate.  If defined, this value must be greater than 0.  A value higher\n   * than the underlying requestAnimationFrame implementation will have no effect.\n   * @memberof Viewer.prototype\n   *\n   * @type {number}\n   */\n  targetFrameRate: {\n    get: function () {\n      return this._cesiumWidget.targetFrameRate;\n    },\n    set: function (value) {\n      this._cesiumWidget.targetFrameRate = value;\n    },\n  },\n\n  /**\n   * Gets or sets whether or not this widget should control the render loop.\n   * If true the widget will use requestAnimationFrame to\n   * perform rendering and resizing of the widget, as well as drive the\n   * simulation clock. If set to false, you must manually call the\n   * <code>resize</code>, <code>render</code> methods\n   * as part of a custom render loop.  If an error occurs during rendering, {@link Scene}'s\n   * <code>renderError</code> event will be raised and this property\n   * will be set to false.  It must be set back to true to continue rendering\n   * after the error.\n   * @memberof Viewer.prototype\n   *\n   * @type {boolean}\n   */\n  useDefaultRenderLoop: {\n    get: function () {\n      return this._cesiumWidget.useDefaultRenderLoop;\n    },\n    set: function (value) {\n      this._cesiumWidget.useDefaultRenderLoop = value;\n    },\n  },\n\n  /**\n   * Gets or sets a scaling factor for rendering resolution.  Values less than 1.0 can improve\n   * performance on less powerful devices while values greater than 1.0 will render at a higher\n   * resolution and then scale down, resulting in improved visual fidelity.\n   * For example, if the widget is laid out at a size of 640x480, setting this value to 0.5\n   * will cause the scene to be rendered at 320x240 and then scaled up while setting\n   * it to 2.0 will cause the scene to be rendered at 1280x960 and then scaled down.\n   * @memberof Viewer.prototype\n   *\n   * @type {number}\n   * @default 1.0\n   */\n  resolutionScale: {\n    get: function () {\n      return this._cesiumWidget.resolutionScale;\n    },\n    set: function (value) {\n      this._cesiumWidget.resolutionScale = value;\n    },\n  },\n\n  /**\n   * Boolean flag indicating if the browser's recommended resolution is used.\n   * If true, the browser's device pixel ratio is ignored and 1.0 is used instead,\n   * effectively rendering based on CSS pixels instead of device pixels. This can improve\n   * performance on less powerful devices that have high pixel density. When false, rendering\n   * will be in device pixels. {@link Viewer#resolutionScale} will still take effect whether\n   * this flag is true or false.\n   * @memberof Viewer.prototype\n   *\n   * @type {boolean}\n   * @default true\n   */\n  useBrowserRecommendedResolution: {\n    get: function () {\n      return this._cesiumWidget.useBrowserRecommendedResolution;\n    },\n    set: function (value) {\n      this._cesiumWidget.useBrowserRecommendedResolution = value;\n    },\n  },\n\n  /**\n   * Gets or sets whether or not data sources can temporarily pause\n   * animation in order to avoid showing an incomplete picture to the user.\n   * For example, if asynchronous primitives are being processed in the\n   * background, the clock will not advance until the geometry is ready.\n   *\n   * @memberof Viewer.prototype\n   *\n   * @type {boolean}\n   */\n  allowDataSourcesToSuspendAnimation: {\n    get: function () {\n      return this._cesiumWidget.allowDataSourcesToSuspendAnimation;\n    },\n    set: function (value) {\n      this._cesiumWidget.allowDataSourcesToSuspendAnimation = value;\n    },\n  },\n\n  /**\n   * Gets or sets the Entity instance currently being tracked by the camera.\n   * @memberof Viewer.prototype\n   * @type {Entity | undefined}\n   */\n  trackedEntity: {\n    get: function () {\n      return this._cesiumWidget.trackedEntity;\n    },\n    set: function (value) {\n      this._cesiumWidget.trackedEntity = value;\n    },\n  },\n  /**\n   * Gets or sets the object instance for which to display a selection indicator.\n   *\n   * If a user interactively picks a Cesium3DTilesFeature instance, then this property\n   * will contain a transient Entity instance with a property named \"feature\" that is\n   * the instance that was picked.\n   * @memberof Viewer.prototype\n   * @type {Entity | undefined}\n   */\n  selectedEntity: {\n    get: function () {\n      return this._selectedEntity;\n    },\n    set: function (value) {\n      if (this._selectedEntity !== value) {\n        this._selectedEntity = value;\n        const selectionIndicatorViewModel = defined(this._selectionIndicator)\n          ? this._selectionIndicator.viewModel\n          : undefined;\n        if (defined(value)) {\n          if (defined(selectionIndicatorViewModel)) {\n            selectionIndicatorViewModel.animateAppear();\n          }\n        } else if (defined(selectionIndicatorViewModel)) {\n          // Leave the info text in place here, it is needed during the exit animation.\n          selectionIndicatorViewModel.animateDepart();\n        }\n        this._selectedEntityChanged.raiseEvent(value);\n      }\n    },\n  },\n  /**\n   * Gets the event that is raised when the selected entity changes.\n   * @memberof Viewer.prototype\n   * @type {Event}\n   * @readonly\n   */\n  selectedEntityChanged: {\n    get: function () {\n      return this._selectedEntityChanged;\n    },\n  },\n  /**\n   * Gets the event that is raised when the tracked entity changes.\n   * @memberof Viewer.prototype\n   * @type {Event}\n   * @readonly\n   */\n  trackedEntityChanged: {\n    get: function () {\n      return this._cesiumWidget.trackedEntityChanged;\n    },\n  },\n  /**\n   * Gets or sets the data source to track with the viewer's clock.\n   * @memberof Viewer.prototype\n   * @type {DataSource}\n   */\n  clockTrackedDataSource: {\n    get: function () {\n      return this._cesiumWidget.clockTrackedDataSource;\n    },\n    set: function (value) {\n      if (this._cesiumWidget.clockTrackedDataSource !== value) {\n        this._cesiumWidget.clockTrackedDataSource = value;\n        linkTimelineToDataSourceClock(this._timeline, value);\n      }\n    },\n  },\n});\n\n/**\n * Extends the base viewer functionality with the provided mixin.\n * A mixin may add additional properties, functions, or other behavior\n * to the provided viewer instance.\n *\n * @param {Viewer.ViewerMixin} mixin The Viewer mixin to add to this instance.\n * @param {object} [options] The options object to be passed to the mixin function.\n *\n * @see viewerDragDropMixin\n */\nViewer.prototype.extend = function (mixin, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(mixin)) {\n    throw new DeveloperError(\"mixin is required.\");\n  }\n  //>>includeEnd('debug');\n\n  mixin(this, options);\n};\n\n/**\n * Resizes the widget to match the container size.\n * This function is called automatically as needed unless\n * <code>useDefaultRenderLoop</code> is set to false.\n */\nViewer.prototype.resize = function () {\n  const cesiumWidget = this._cesiumWidget;\n  const container = this._container;\n  const width = container.clientWidth;\n  const height = container.clientHeight;\n  const animationExists = defined(this._animation);\n  const timelineExists = defined(this._timeline);\n\n  cesiumWidget.resize();\n\n  if (width === this._lastWidth && height === this._lastHeight) {\n    return;\n  }\n\n  const panelMaxHeight = height - 125;\n  const baseLayerPickerDropDown = this._baseLayerPickerDropDown;\n\n  if (defined(baseLayerPickerDropDown)) {\n    baseLayerPickerDropDown.style.maxHeight = `${panelMaxHeight}px`;\n  }\n\n  if (defined(this._geocoder)) {\n    const geocoderSuggestions = this._geocoder.searchSuggestionsContainer;\n    geocoderSuggestions.style.maxHeight = `${panelMaxHeight}px`;\n  }\n\n  if (defined(this._infoBox)) {\n    this._infoBox.viewModel.maxHeight = panelMaxHeight;\n  }\n\n  const timeline = this._timeline;\n  let animationContainer;\n  let animationWidth = 0;\n  let creditLeft = 5;\n  let creditBottom = 3;\n  let creditRight = 0;\n\n  if (\n    animationExists &&\n    window.getComputedStyle(this._animation.container).visibility !== \"hidden\"\n  ) {\n    const lastWidth = this._lastWidth;\n    animationContainer = this._animation.container;\n    if (width > 900) {\n      animationWidth = 169;\n      if (lastWidth <= 900) {\n        animationContainer.style.width = \"169px\";\n        animationContainer.style.height = \"112px\";\n        this._animation.resize();\n      }\n    } else if (width >= 600) {\n      animationWidth = 136;\n      if (lastWidth < 600 || lastWidth > 900) {\n        animationContainer.style.width = \"136px\";\n        animationContainer.style.height = \"90px\";\n        this._animation.resize();\n      }\n    } else {\n      animationWidth = 106;\n      if (lastWidth > 600 || lastWidth === 0) {\n        animationContainer.style.width = \"106px\";\n        animationContainer.style.height = \"70px\";\n        this._animation.resize();\n      }\n    }\n    creditLeft = animationWidth + 5;\n  }\n\n  if (\n    timelineExists &&\n    window.getComputedStyle(this._timeline.container).visibility !== \"hidden\"\n  ) {\n    const fullscreenButton = this._fullscreenButton;\n    const vrButton = this._vrButton;\n    const timelineContainer = timeline.container;\n    const timelineStyle = timelineContainer.style;\n\n    creditBottom = timelineContainer.clientHeight + 3;\n    timelineStyle.left = `${animationWidth}px`;\n\n    let pixels = 0;\n    if (defined(fullscreenButton)) {\n      pixels += fullscreenButton.container.clientWidth;\n    }\n    if (defined(vrButton)) {\n      pixels += vrButton.container.clientWidth;\n    }\n\n    timelineStyle.right = `${pixels}px`;\n    timeline.resize();\n  }\n\n  if (!timelineExists && defined(this._fullscreenButton)) {\n    // don't let long credits (like the default ion token) go behind the fullscreen button\n    creditRight = this._fullscreenButton.container.clientWidth;\n  }\n\n  this._bottomContainer.style.left = `${creditLeft}px`;\n  this._bottomContainer.style.bottom = `${creditBottom}px`;\n  this._bottomContainer.style.right = `${creditRight}px`;\n\n  this._lastWidth = width;\n  this._lastHeight = height;\n};\n\n/**\n * This forces the widget to re-think its layout, including\n * widget sizes and credit placement.\n */\nViewer.prototype.forceResize = function () {\n  this._lastWidth = 0;\n  this.resize();\n};\n\n/**\n * Renders the scene.  This function is called automatically\n * unless <code>useDefaultRenderLoop</code> is set to false;\n */\nViewer.prototype.render = function () {\n  this._cesiumWidget.render();\n};\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nViewer.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nViewer.prototype.destroy = function () {\n  if (\n    defined(this.screenSpaceEventHandler) &&\n    !this.screenSpaceEventHandler.isDestroyed()\n  ) {\n    this.screenSpaceEventHandler.removeInputAction(\n      ScreenSpaceEventType.LEFT_CLICK,\n    );\n    this.screenSpaceEventHandler.removeInputAction(\n      ScreenSpaceEventType.LEFT_DOUBLE_CLICK,\n    );\n  }\n\n  this._container.removeChild(this._element);\n  this._element.removeChild(this._toolbar);\n\n  this._eventHelper.removeAll();\n\n  if (defined(this._geocoder)) {\n    this._geocoder = this._geocoder.destroy();\n  }\n\n  if (defined(this._homeButton)) {\n    this._homeButton = this._homeButton.destroy();\n  }\n\n  if (defined(this._sceneModePicker)) {\n    this._sceneModePicker = this._sceneModePicker.destroy();\n  }\n\n  if (defined(this._projectionPicker)) {\n    this._projectionPicker = this._projectionPicker.destroy();\n  }\n\n  if (defined(this._baseLayerPicker)) {\n    this._baseLayerPicker = this._baseLayerPicker.destroy();\n  }\n\n  if (defined(this._animation)) {\n    this._element.removeChild(this._animation.container);\n    this._animation = this._animation.destroy();\n  }\n\n  if (defined(this._timeline)) {\n    this._timeline.removeEventListener(\n      \"settime\",\n      onTimelineScrubfunction,\n      false,\n    );\n    this._element.removeChild(this._timeline.container);\n    this._timeline = this._timeline.destroy();\n  }\n\n  if (defined(this._fullscreenButton)) {\n    this._fullscreenSubscription.dispose();\n    this._element.removeChild(this._fullscreenButton.container);\n    this._fullscreenButton = this._fullscreenButton.destroy();\n  }\n\n  if (defined(this._vrButton)) {\n    this._vrSubscription.dispose();\n    this._vrModeSubscription.dispose();\n    this._element.removeChild(this._vrButton.container);\n    this._vrButton = this._vrButton.destroy();\n  }\n\n  if (defined(this._infoBox)) {\n    this._element.removeChild(this._infoBox.container);\n    this._infoBox = this._infoBox.destroy();\n  }\n\n  if (defined(this._selectionIndicator)) {\n    this._element.removeChild(this._selectionIndicator.container);\n    this._selectionIndicator = this._selectionIndicator.destroy();\n  }\n\n  if (this._destroyClockViewModel) {\n    this._clockViewModel = this._clockViewModel.destroy();\n  }\n  this._cesiumWidget = this._cesiumWidget.destroy();\n\n  return destroyObject(this);\n};\n\n/**\n * @private\n */\nViewer.prototype._dataSourceAdded = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const entityCollection = dataSource.entities;\n  entityCollection.collectionChanged.addEventListener(\n    Viewer.prototype._onEntityCollectionChanged,\n    this,\n  );\n};\n\n/**\n * @private\n */\nViewer.prototype._dataSourceRemoved = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const entityCollection = dataSource.entities;\n  entityCollection.collectionChanged.removeEventListener(\n    Viewer.prototype._onEntityCollectionChanged,\n    this,\n  );\n\n  if (defined(this.selectedEntity)) {\n    if (\n      entityCollection.getById(this.selectedEntity.id) === this.selectedEntity\n    ) {\n      this.selectedEntity = undefined;\n    }\n  }\n};\n\n/**\n * @private\n */\nViewer.prototype._updateCanAnimate = function (that) {\n  return function (isUpdated) {\n    that._clockViewModel.canAnimate = isUpdated;\n  };\n};\n\n/**\n * @private\n */\nViewer.prototype._onTick = function (clock) {\n  const time = clock.currentTime;\n\n  let position;\n  let enableCamera = false;\n  const selectedEntity = this.selectedEntity;\n  const showSelection = defined(selectedEntity) && this._enableInfoOrSelection;\n\n  if (\n    showSelection &&\n    selectedEntity.isShowing &&\n    selectedEntity.isAvailable(time)\n  ) {\n    const state = this._cesiumWidget.dataSourceDisplay.getBoundingSphere(\n      selectedEntity,\n      true,\n      boundingSphereScratch,\n    );\n    if (state !== BoundingSphereState.FAILED) {\n      position = boundingSphereScratch.center;\n    } else if (defined(selectedEntity.position)) {\n      position = selectedEntity.position.getValue(time, position);\n    }\n    enableCamera = defined(position);\n  }\n\n  const selectionIndicatorViewModel = defined(this._selectionIndicator)\n    ? this._selectionIndicator.viewModel\n    : undefined;\n  if (defined(selectionIndicatorViewModel)) {\n    selectionIndicatorViewModel.position = Cartesian3.clone(\n      position,\n      selectionIndicatorViewModel.position,\n    );\n    selectionIndicatorViewModel.showSelection = showSelection && enableCamera;\n    selectionIndicatorViewModel.update();\n  }\n\n  const infoBoxViewModel = defined(this._infoBox)\n    ? this._infoBox.viewModel\n    : undefined;\n  if (defined(infoBoxViewModel)) {\n    infoBoxViewModel.showInfo = showSelection;\n    infoBoxViewModel.enableCamera = enableCamera;\n    infoBoxViewModel.isCameraTracking =\n      this.trackedEntity === this.selectedEntity;\n\n    if (showSelection) {\n      infoBoxViewModel.titleText = selectedEntity.name ?? selectedEntity.id;\n      infoBoxViewModel.description = Property.getValueOrDefault(\n        selectedEntity.description,\n        time,\n        \"\",\n      );\n    } else {\n      infoBoxViewModel.titleText = \"\";\n      infoBoxViewModel.description = \"\";\n    }\n  }\n};\n\n/**\n * @private\n */\nViewer.prototype._onEntityCollectionChanged = function (\n  collection,\n  added,\n  removed,\n) {\n  const length = removed.length;\n  for (let i = 0; i < length; i++) {\n    const removedObject = removed[i];\n    if (this.selectedEntity === removedObject) {\n      this.selectedEntity = undefined;\n    }\n  }\n};\n\n/**\n * @private\n */\nViewer.prototype._onInfoBoxCameraClicked = function (infoBoxViewModel) {\n  if (\n    infoBoxViewModel.isCameraTracking &&\n    this.trackedEntity === this.selectedEntity\n  ) {\n    this.trackedEntity = undefined;\n  } else {\n    const selectedEntity = this.selectedEntity;\n    const position = selectedEntity.position;\n    if (defined(position)) {\n      this.trackedEntity = this.selectedEntity;\n    } else {\n      this.zoomTo(this.selectedEntity);\n    }\n  }\n};\n\n/**\n * @private\n */\nViewer.prototype._clearTrackedObject = function () {\n  this.trackedEntity = undefined;\n};\n\n/**\n * @private\n */\nViewer.prototype._onInfoBoxClockClicked = function (infoBoxViewModel) {\n  this.selectedEntity = undefined;\n};\n\n/**\n * @private\n */\nViewer.prototype._clearObjects = function () {\n  this.trackedEntity = undefined;\n  this.selectedEntity = undefined;\n};\n\n/**\n * @private\n */\nViewer.prototype._onDataSourceChanged = function (dataSource) {\n  if (this.clockTrackedDataSource === dataSource) {\n    linkTimelineToDataSourceClock(this.timeline, dataSource);\n  }\n};\n\n/**\n * @private\n */\nViewer.prototype._onDataSourceAdded = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  if (\n    this._cesiumWidget._automaticallyTrackDataSourceClocks &&\n    dataSource === this.clockTrackedDataSource\n  ) {\n    // When data sources are added to the CesiumWidget they may be automatically\n    // tracked in that class but we also need to update the timeline in this class\n    linkTimelineToDataSourceClock(this._timeline, dataSource);\n  }\n  const id = dataSource.entities.id;\n  const removalFunc = this._eventHelper.add(\n    dataSource.changedEvent,\n    Viewer.prototype._onDataSourceChanged,\n    this,\n  );\n  this._dataSourceChangedListeners[id] = removalFunc;\n};\n\n/**\n * @private\n */\nViewer.prototype._onDataSourceRemoved = function (\n  dataSourceCollection,\n  dataSource,\n) {\n  const id = dataSource.entities.id;\n  this._dataSourceChangedListeners[id]();\n  this._dataSourceChangedListeners[id] = undefined;\n};\n\n/**\n * Asynchronously sets the camera to view the provided entity, entities, or data source.\n * If the data source is still in the process of loading or the visualization is otherwise still loading,\n * this method waits for the data to be ready before performing the zoom.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise<Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|VoxelPrimitive>} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types.\n * @param {HeadingPitchRange} [offset] The offset from the center of the entity in the local east-north-up reference frame.\n * @returns {Promise<boolean>} A Promise that resolves to true if the zoom was successful or false if the target is not currently visualized in the scene or the zoom was cancelled.\n */\nViewer.prototype.zoomTo = function (target, offset) {\n  return this._cesiumWidget.zoomTo(target, offset);\n};\n\n/**\n * Flies the camera to the provided entity, entities, or data source.\n * If the data source is still in the process of loading or the visualization is otherwise still loading,\n * this method waits for the data to be ready before performing the flight.\n *\n * <p>The offset is heading/pitch/range in the local east-north-up reference frame centered at the center of the bounding sphere.\n * The heading and the pitch angles are defined in the local east-north-up reference frame.\n * The heading is the angle from y axis and increasing towards the x axis. Pitch is the rotation from the xy-plane. Positive pitch\n * angles are above the plane. Negative pitch angles are below the plane. The range is the distance from the center. If the range is\n * zero, a range will be computed such that the whole bounding sphere is visible.</p>\n *\n * <p>In 2D, there must be a top down view. The camera will be placed above the target looking down. The height above the\n * target will be the range. The heading will be determined from the offset. If the heading cannot be\n * determined from the offset, the heading will be north.</p>\n *\n * @param {Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|Promise<Entity|Entity[]|EntityCollection|DataSource|ImageryLayer|Cesium3DTileset|TimeDynamicPointCloud|VoxelPrimitive>} target The entity, array of entities, entity collection, data source, Cesium3DTileset, point cloud, or imagery layer to view. You can also pass a promise that resolves to one of the previously mentioned types.\n * @param {object} [options] Object with the following properties:\n * @param {number} [options.duration=3.0] The duration of the flight in seconds.\n * @param {number} [options.maximumHeight] The maximum height at the peak of the flight.\n * @param {HeadingPitchRange} [options.offset] The offset from the target in the local east-north-up reference frame centered at the target.\n * @returns {Promise<boolean>} A Promise that resolves to true if the flight was successful or false if the target is not currently visualized in the scene or the flight was cancelled. //TODO: Cleanup entity mentions\n */\nViewer.prototype.flyTo = function (target, options) {\n  return this._cesiumWidget.flyTo(target, options);\n};\n\n/**\n * A function that augments a Viewer instance with additional functionality.\n * @callback Viewer.ViewerMixin\n * @param {Viewer} viewer The viewer instance.\n * @param {object} options Options object to be passed to the mixin function.\n *\n * @see Viewer#extend\n */\nexport default Viewer;\n","import { Check } from \"@cesium/engine\";\nimport Cesium3DTilesInspector from \"../Cesium3DTilesInspector/Cesium3DTilesInspector.js\";\n\n/**\n * A mixin which adds the {@link Cesium3DTilesInspector} widget to the {@link Viewer} widget.\n * Rather than being called directly, this function is normally passed as\n * a parameter to {@link Viewer#extend}, as shown in the example below.\n * @function\n *\n * @param {Viewer} viewer The viewer instance.\n *\n * @example\n * const viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin);\n */\nfunction viewerCesium3DTilesInspectorMixin(viewer) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"viewer\", viewer);\n  //>>includeEnd('debug');\n\n  const container = document.createElement(\"div\");\n  container.className = \"cesium-viewer-cesium3DTilesInspectorContainer\";\n  viewer.container.appendChild(container);\n  const cesium3DTilesInspector = new Cesium3DTilesInspector(\n    container,\n    viewer.scene,\n  );\n\n  Object.defineProperties(viewer, {\n    cesium3DTilesInspector: {\n      get: function () {\n        return cesium3DTilesInspector;\n      },\n    },\n  });\n}\nexport default viewerCesium3DTilesInspectorMixin;\n","import { defined, DeveloperError } from \"@cesium/engine\";\nimport CesiumInspector from \"../CesiumInspector/CesiumInspector.js\";\n\n/**\n * A mixin which adds the CesiumInspector widget to the Viewer widget.\n * Rather than being called directly, this function is normally passed as\n * a parameter to {@link Viewer#extend}, as shown in the example below.\n * @function\n *\n * @param {Viewer} viewer The viewer instance.\n *\n * @exception {DeveloperError} viewer is required.\n *\n * @demo {@link https://sandcastle.cesium.com/index.html?id=cesium-inspector|Cesium Sandcastle Cesium Inspector Demo}\n *\n * @example\n * const viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.extend(Cesium.viewerCesiumInspectorMixin);\n */\nfunction viewerCesiumInspectorMixin(viewer) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(viewer)) {\n    throw new DeveloperError(\"viewer is required.\");\n  }\n  //>>includeEnd('debug');\n\n  const cesiumInspectorContainer = document.createElement(\"div\");\n  cesiumInspectorContainer.className = \"cesium-viewer-cesiumInspectorContainer\";\n  viewer.container.appendChild(cesiumInspectorContainer);\n  const cesiumInspector = new CesiumInspector(\n    cesiumInspectorContainer,\n    viewer.scene,\n  );\n\n  Object.defineProperties(viewer, {\n    cesiumInspector: {\n      get: function () {\n        return cesiumInspector;\n      },\n    },\n  });\n}\nexport default viewerCesiumInspectorMixin;\n","import {\n  CzmlDataSource,\n  Frozen,\n  defined,\n  DeveloperError,\n  Event,\n  GeoJsonDataSource,\n  getElement,\n  GpxDataSource,\n  KmlDataSource,\n  wrapFunction,\n} from \"@cesium/engine\";\n/**\n * A mixin which adds default drag and drop support for CZML files to the Viewer widget.\n * Rather than being called directly, this function is normally passed as\n * a parameter to {@link Viewer#extend}, as shown in the example below.\n * @function viewerDragDropMixin\n\n * @param {Viewer} viewer The viewer instance.\n * @param {object} [options] Object with the following properties:\n * @param {Element|string} [options.dropTarget=viewer.container] The DOM element which will serve as the drop target.\n * @param {boolean} [options.clearOnDrop=true] When true, dropping files will clear all existing data sources first, when false, new data sources will be loaded after the existing ones.\n * @param {boolean} [options.flyToOnDrop=true] When true, dropping files will fly to the data source once it is loaded.\n * @param {boolean} [options.clampToGround=true] When true, datasources are clamped to the ground.\n * @param {Proxy} [options.proxy] The proxy to be used for KML network links.\n *\n * @exception {DeveloperError} Element with id <options.dropTarget> does not exist in the document.\n * @exception {DeveloperError} dropTarget is already defined by another mixin.\n * @exception {DeveloperError} dropEnabled is already defined by another mixin.\n * @exception {DeveloperError} dropError is already defined by another mixin.\n * @exception {DeveloperError} clearOnDrop is already defined by another mixin.\n *\n * @example\n * // Add basic drag and drop support and pop up an alert window on error.\n * const viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.extend(Cesium.viewerDragDropMixin);\n * viewer.dropError.addEventListener(function(viewerArg, source, error) {\n *     window.alert('Error processing ' + source + ':' + error);\n * });\n */\nfunction viewerDragDropMixin(viewer, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(viewer)) {\n    throw new DeveloperError(\"viewer is required.\");\n  }\n  if (viewer.hasOwnProperty(\"dropTarget\")) {\n    throw new DeveloperError(\"dropTarget is already defined by another mixin.\");\n  }\n  if (viewer.hasOwnProperty(\"dropEnabled\")) {\n    throw new DeveloperError(\n      \"dropEnabled is already defined by another mixin.\",\n    );\n  }\n  if (viewer.hasOwnProperty(\"dropError\")) {\n    throw new DeveloperError(\"dropError is already defined by another mixin.\");\n  }\n  if (viewer.hasOwnProperty(\"clearOnDrop\")) {\n    throw new DeveloperError(\n      \"clearOnDrop is already defined by another mixin.\",\n    );\n  }\n  if (viewer.hasOwnProperty(\"flyToOnDrop\")) {\n    throw new DeveloperError(\n      \"flyToOnDrop is already defined by another mixin.\",\n    );\n  }\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  //Local variables to be closed over by defineProperties.\n  let dropEnabled = true;\n  let flyToOnDrop = options.flyToOnDrop ?? true;\n  const dropError = new Event();\n  let clearOnDrop = options.clearOnDrop ?? true;\n  let dropTarget = options.dropTarget ?? viewer.container;\n  let clampToGround = options.clampToGround ?? true;\n  let proxy = options.proxy;\n\n  dropTarget = getElement(dropTarget);\n\n  Object.defineProperties(viewer, {\n    /**\n     * Gets or sets the element to serve as the drop target.\n     * @memberof viewerDragDropMixin.prototype\n     * @type {Element}\n     */\n    dropTarget: {\n      //TODO See https://github.com/CesiumGS/cesium/issues/832\n      get: function () {\n        return dropTarget;\n      },\n      set: function (value) {\n        //>>includeStart('debug', pragmas.debug);\n        if (!defined(value)) {\n          throw new DeveloperError(\"value is required.\");\n        }\n        //>>includeEnd('debug');\n\n        unsubscribe(dropTarget, handleDrop);\n        dropTarget = value;\n        subscribe(dropTarget, handleDrop);\n      },\n    },\n\n    /**\n     * Gets or sets a value indicating if drag and drop support is enabled.\n     * @memberof viewerDragDropMixin.prototype\n     * @type {Element}\n     */\n    dropEnabled: {\n      get: function () {\n        return dropEnabled;\n      },\n      set: function (value) {\n        if (value !== dropEnabled) {\n          if (value) {\n            subscribe(dropTarget, handleDrop);\n          } else {\n            unsubscribe(dropTarget, handleDrop);\n          }\n          dropEnabled = value;\n        }\n      },\n    },\n\n    /**\n     * Gets the event that will be raised when an error is encountered during drop processing.\n     * @memberof viewerDragDropMixin.prototype\n     * @type {Event}\n     */\n    dropError: {\n      get: function () {\n        return dropError;\n      },\n    },\n\n    /**\n     * Gets or sets a value indicating if existing data sources should be cleared before adding the newly dropped sources.\n     * @memberof viewerDragDropMixin.prototype\n     * @type {boolean}\n     */\n    clearOnDrop: {\n      get: function () {\n        return clearOnDrop;\n      },\n      set: function (value) {\n        clearOnDrop = value;\n      },\n    },\n\n    /**\n     * Gets or sets a value indicating if the camera should fly to the data source after it is loaded.\n     * @memberof viewerDragDropMixin.prototype\n     * @type {boolean}\n     */\n    flyToOnDrop: {\n      get: function () {\n        return flyToOnDrop;\n      },\n      set: function (value) {\n        flyToOnDrop = value;\n      },\n    },\n\n    /**\n     * Gets or sets the proxy to be used for KML.\n     * @memberof viewerDragDropMixin.prototype\n     * @type {Proxy}\n     */\n    proxy: {\n      get: function () {\n        return proxy;\n      },\n      set: function (value) {\n        proxy = value;\n      },\n    },\n\n    /**\n     * Gets or sets a value indicating if the datasources should be clamped to the ground\n     * @memberof viewerDragDropMixin.prototype\n     * @type {boolean}\n     */\n    clampToGround: {\n      get: function () {\n        return clampToGround;\n      },\n      set: function (value) {\n        clampToGround = value;\n      },\n    },\n  });\n\n  function handleDrop(event) {\n    stop(event);\n\n    if (clearOnDrop) {\n      viewer.entities.removeAll();\n      viewer.dataSources.removeAll();\n    }\n\n    const files = event.dataTransfer.files;\n    const length = files.length;\n    for (let i = 0; i < length; i++) {\n      const file = files[i];\n      const reader = new FileReader();\n      reader.onload = createOnLoadCallback(viewer, file, proxy, clampToGround);\n      reader.onerror = createDropErrorCallback(viewer, file);\n      reader.readAsText(file);\n    }\n  }\n\n  //Enable drop by default;\n  subscribe(dropTarget, handleDrop);\n\n  //Wrap the destroy function to make sure all events are unsubscribed from\n  viewer.destroy = wrapFunction(viewer, viewer.destroy, function () {\n    viewer.dropEnabled = false;\n  });\n\n  //Specs need access to handleDrop\n  viewer._handleDrop = handleDrop;\n}\n\nfunction stop(event) {\n  event.stopPropagation();\n  event.preventDefault();\n}\n\nfunction unsubscribe(dropTarget, handleDrop) {\n  const currentTarget = dropTarget;\n  if (defined(currentTarget)) {\n    currentTarget.removeEventListener(\"drop\", handleDrop, false);\n    currentTarget.removeEventListener(\"dragenter\", stop, false);\n    currentTarget.removeEventListener(\"dragover\", stop, false);\n    currentTarget.removeEventListener(\"dragexit\", stop, false);\n  }\n}\n\nfunction subscribe(dropTarget, handleDrop) {\n  dropTarget.addEventListener(\"drop\", handleDrop, false);\n  dropTarget.addEventListener(\"dragenter\", stop, false);\n  dropTarget.addEventListener(\"dragover\", stop, false);\n  dropTarget.addEventListener(\"dragexit\", stop, false);\n}\n\nfunction createOnLoadCallback(viewer, file, proxy, clampToGround) {\n  const scene = viewer.scene;\n  return function (evt) {\n    const fileName = file.name;\n    try {\n      let loadPromise;\n\n      if (/\\.czml$/i.test(fileName)) {\n        loadPromise = CzmlDataSource.load(JSON.parse(evt.target.result), {\n          sourceUri: fileName,\n        });\n      } else if (\n        /\\.geojson$/i.test(fileName) ||\n        /\\.json$/i.test(fileName) ||\n        /\\.topojson$/i.test(fileName)\n      ) {\n        loadPromise = GeoJsonDataSource.load(JSON.parse(evt.target.result), {\n          sourceUri: fileName,\n          clampToGround: clampToGround,\n        });\n      } else if (/\\.(kml|kmz)$/i.test(fileName)) {\n        loadPromise = KmlDataSource.load(file, {\n          sourceUri: fileName,\n          proxy: proxy,\n          camera: scene.camera,\n          canvas: scene.canvas,\n          clampToGround: clampToGround,\n          screenOverlayContainer: viewer.container,\n        });\n      } else if (/\\.gpx$/i.test(fileName)) {\n        loadPromise = GpxDataSource.load(file, {\n          sourceUri: fileName,\n          proxy: proxy,\n        });\n      } else {\n        viewer.dropError.raiseEvent(\n          viewer,\n          fileName,\n          `Unrecognized file: ${fileName}`,\n        );\n        return;\n      }\n\n      if (defined(loadPromise)) {\n        viewer.dataSources\n          .add(loadPromise)\n          .then(function (dataSource) {\n            if (viewer.flyToOnDrop) {\n              viewer.flyTo(dataSource);\n            }\n          })\n          .catch(function (error) {\n            viewer.dropError.raiseEvent(viewer, fileName, error);\n          });\n      }\n    } catch (error) {\n      viewer.dropError.raiseEvent(viewer, fileName, error);\n    }\n  };\n}\n\nfunction createDropErrorCallback(viewer, file) {\n  return function (evt) {\n    viewer.dropError.raiseEvent(viewer, file.name, evt.target.error);\n  };\n}\nexport default viewerDragDropMixin;\n","import { Frozen, defined, DeveloperError } from \"@cesium/engine\";\nimport PerformanceWatchdog from \"../PerformanceWatchdog/PerformanceWatchdog.js\";\n\n/**\n * A mixin which adds the {@link PerformanceWatchdog} widget to the {@link Viewer} widget.\n * Rather than being called directly, this function is normally passed as\n * a parameter to {@link Viewer#extend}, as shown in the example below.\n * @function\n *\n * @param {Viewer} viewer The viewer instance.\n * @param {object} [options] An object with properties.\n * @param {string} [options.lowFrameRateMessage='This application appears to be performing poorly on your system.  Please try using a different web browser or updating your video drivers.'] The\n *        message to display when a low frame rate is detected.  The message is interpeted as HTML, so make sure\n *        it comes from a trusted source so that your application is not vulnerable to cross-site scripting attacks.\n *\n * @exception {DeveloperError} viewer is required.\n *\n * @example\n * const viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.extend(Cesium.viewerPerformanceWatchdogMixin, {\n *     lowFrameRateMessage : 'Why is this going so <em>slowly</em>?'\n * });\n */\nfunction viewerPerformanceWatchdogMixin(viewer, options) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(viewer)) {\n    throw new DeveloperError(\"viewer is required.\");\n  }\n  //>>includeEnd('debug');\n\n  options = options ?? Frozen.EMPTY_OBJECT;\n\n  const performanceWatchdog = new PerformanceWatchdog({\n    scene: viewer.scene,\n    container: viewer.bottomContainer,\n    lowFrameRateMessage: options.lowFrameRateMessage,\n  });\n\n  Object.defineProperties(viewer, {\n    performanceWatchdog: {\n      get: function () {\n        return performanceWatchdog;\n      },\n    },\n  });\n}\nexport default viewerPerformanceWatchdogMixin;\n","import { Check } from \"@cesium/engine\";\nimport VoxelInspector from \"../VoxelInspector/VoxelInspector.js\";\n\n/**\n * A mixin which adds the {@link VoxelInspector} widget to the {@link Viewer} widget.\n * Rather than being called directly, this function is normally passed as\n * a parameter to {@link Viewer#extend}, as shown in the example below.\n * @function\n *\n * @param {Viewer} viewer The viewer instance.\n *\n * @example\n * var viewer = new Cesium.Viewer('cesiumContainer');\n * viewer.extend(Cesium.viewerVoxelInspectorMixin);\n */\nfunction viewerVoxelInspectorMixin(viewer) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"viewer\", viewer);\n  //>>includeEnd('debug');\n\n  const container = document.createElement(\"div\");\n  container.className = \"cesium-viewer-voxelInspectorContainer\";\n  viewer.container.appendChild(container);\n  const voxelInspector = new VoxelInspector(container, viewer.scene);\n\n  Object.defineProperties(viewer, {\n    voxelInspector: {\n      get: function () {\n        return voxelInspector;\n      },\n    },\n  });\n}\nexport default viewerVoxelInspectorMixin;\n","import {\n  Math as CesiumMath,\n  Check,\n  destroyObject,\n  getElement,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\nimport InspectorShared from \"../InspectorShared.js\";\nimport VoxelInspectorViewModel from \"./VoxelInspectorViewModel.js\";\n\n/**\n * Inspector widget to aid in debugging voxels\n *\n * @alias VoxelInspector\n * @constructor\n *\n * @param {Element|string} container The DOM element or ID that will contain the widget.\n * @param {Scene} scene the Scene instance to use.\n */\nfunction VoxelInspector(container, scene) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.defined(\"container\", container);\n  Check.typeOf.object(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  container = getElement(container);\n  const element = document.createElement(\"div\");\n  const viewModel = new VoxelInspectorViewModel(scene);\n\n  this._viewModel = viewModel;\n  this._container = container;\n  this._element = element;\n\n  const text = document.createElement(\"div\");\n  text.textContent = \"Voxel Inspector\";\n  text.className = \"cesium-cesiumInspector-button\";\n  text.setAttribute(\"data-bind\", \"click: toggleInspector\");\n  element.appendChild(text);\n  element.className = \"cesium-cesiumInspector cesium-VoxelInspector\";\n  element.setAttribute(\n    \"data-bind\",\n    'css: { \"cesium-cesiumInspector-visible\" : inspectorVisible, \"cesium-cesiumInspector-hidden\" : !inspectorVisible}',\n  );\n  container.appendChild(element);\n\n  const panel = document.createElement(\"div\");\n  panel.className = \"cesium-cesiumInspector-dropDown\";\n  element.appendChild(panel);\n\n  const { createSection, createCheckbox, createRangeInput, createButton } =\n    InspectorShared;\n\n  const displayPanelContents = createSection(\n    panel,\n    \"Display\",\n    \"displayVisible\",\n    \"toggleDisplay\",\n  );\n\n  const transformPanelContents = createSection(\n    panel,\n    \"Transform\",\n    \"transformVisible\",\n    \"toggleTransform\",\n  );\n\n  const clippingPanelContents = createSection(\n    panel,\n    \"Clipping\",\n    \"clippingVisible\",\n    \"toggleClipping\",\n  );\n\n  const shaderPanelContents = createSection(\n    panel,\n    \"Shader\",\n    \"shaderVisible\",\n    \"toggleShader\",\n  );\n\n  // Display\n  displayPanelContents.appendChild(createCheckbox(\"Depth Test\", \"depthTest\"));\n  displayPanelContents.appendChild(createCheckbox(\"Show\", \"show\"));\n  displayPanelContents.appendChild(\n    createCheckbox(\"Disable Update\", \"disableUpdate\"),\n  );\n  displayPanelContents.appendChild(createCheckbox(\"Debug Draw\", \"debugDraw\"));\n  displayPanelContents.appendChild(createCheckbox(\"Jitter\", \"jitter\"));\n  displayPanelContents.appendChild(\n    createCheckbox(\"Nearest Sampling\", \"nearestSampling\"),\n  );\n\n  displayPanelContents.appendChild(\n    createRangeInput(\"Screen Space Error\", \"screenSpaceError\", 0, 128),\n  );\n\n  displayPanelContents.appendChild(\n    createRangeInput(\"Step Size\", \"stepSize\", 0.0, 2.0),\n  );\n\n  // Transform\n  const maxTrans = 10.0;\n  const maxScale = 10.0;\n  const maxAngle = CesiumMath.PI;\n\n  transformPanelContents.appendChild(\n    createRangeInput(\"Translation X\", \"translationX\", -maxTrans, +maxTrans),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Translation Y\", \"translationY\", -maxTrans, +maxTrans),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Translation Z\", \"translationZ\", -maxTrans, +maxTrans),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Scale X\", \"scaleX\", 0, +maxScale),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Scale Y\", \"scaleY\", 0, +maxScale),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Scale Z\", \"scaleZ\", 0, +maxScale),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Heading\", \"angleX\", -maxAngle, +maxAngle),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Pitch\", \"angleY\", -maxAngle, +maxAngle),\n  );\n  transformPanelContents.appendChild(\n    createRangeInput(\"Roll\", \"angleZ\", -maxAngle, +maxAngle),\n  );\n\n  // Clipping\n  makeCoordinateRangeWithDynamicMinMax(\n    \"Max X\",\n    \"Min X\",\n    \"Max Y\",\n    \"Min Y\",\n    \"Max Z\",\n    \"Min Z\",\n    \"clippingBoxMaxX\",\n    \"clippingBoxMinX\",\n    \"clippingBoxMaxY\",\n    \"clippingBoxMinY\",\n    \"clippingBoxMaxZ\",\n    \"clippingBoxMinZ\",\n    \"shapeIsBox\",\n    clippingPanelContents,\n  );\n\n  makeCoordinateRangeWithDynamicMinMax(\n    \"Max Longitude\",\n    \"Min Longitude\",\n    \"Max Latitude\",\n    \"Min Latitude\",\n    \"Max Height\",\n    \"Min Height\",\n    \"clippingEllipsoidMaxLongitude\",\n    \"clippingEllipsoidMinLongitude\",\n    \"clippingEllipsoidMaxLatitude\",\n    \"clippingEllipsoidMinLatitude\",\n    \"clippingEllipsoidMaxHeight\",\n    \"clippingEllipsoidMinHeight\",\n    \"shapeIsEllipsoid\",\n    clippingPanelContents,\n  );\n\n  makeCoordinateRangeWithDynamicMinMax(\n    \"Max Radius\",\n    \"Min Radius\",\n    \"Max Angle\",\n    \"Min Angle\",\n    \"Max Height\",\n    \"Min Height\",\n    \"clippingCylinderMaxRadius\",\n    \"clippingCylinderMinRadius\",\n    \"clippingCylinderMaxAngle\",\n    \"clippingCylinderMinAngle\",\n    \"clippingCylinderMaxHeight\",\n    \"clippingCylinderMinHeight\",\n    \"shapeIsCylinder\",\n    clippingPanelContents,\n  );\n\n  // Shader\n  const shaderPanelEditor = document.createElement(\"div\");\n  shaderPanelContents.appendChild(shaderPanelEditor);\n\n  const shaderEditor = document.createElement(\"textarea\");\n  shaderEditor.setAttribute(\n    \"data-bind\",\n    \"textInput: shaderString, event: { keydown: shaderEditorKeyPress }\",\n  );\n  shaderPanelEditor.className = \"cesium-cesiumInspector-styleEditor\";\n  shaderPanelEditor.appendChild(shaderEditor);\n  const compileShaderButton = createButton(\n    \"Compile (Ctrl+Enter)\",\n    \"compileShader\",\n  );\n  shaderPanelEditor.appendChild(compileShaderButton);\n\n  const compilationText = document.createElement(\"label\");\n  compilationText.style.display = \"block\";\n  compilationText.setAttribute(\n    \"data-bind\",\n    \"text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}\",\n  );\n  shaderPanelEditor.appendChild(compilationText);\n\n  knockout.applyBindings(viewModel, element);\n}\n\nObject.defineProperties(VoxelInspector.prototype, {\n  /**\n   * Gets the parent container.\n   * @memberof VoxelInspector.prototype\n   *\n   * @type {Element}\n   */\n  container: {\n    get: function () {\n      return this._container;\n    },\n  },\n\n  /**\n   * Gets the view model.\n   * @memberof VoxelInspector.prototype\n   *\n   * @type {VoxelInspectorViewModel}\n   */\n  viewModel: {\n    get: function () {\n      return this._viewModel;\n    },\n  },\n});\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nVoxelInspector.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nVoxelInspector.prototype.destroy = function () {\n  knockout.cleanNode(this._element);\n  this._container.removeChild(this._element);\n  this.viewModel.destroy();\n\n  return destroyObject(this);\n};\n\nfunction makeCoordinateRangeWithDynamicMinMax(\n  maxXTitle,\n  minXTitle,\n  maxYTitle,\n  minYTitle,\n  maxZTitle,\n  minZTitle,\n  maxXVar,\n  minXVar,\n  maxYVar,\n  minYVar,\n  maxZVar,\n  minZVar,\n  allowedShape,\n  parentContainer,\n) {\n  const createRangeInput = InspectorShared.createRangeInputWithDynamicMinMax;\n\n  const boundsElement = parentContainer.appendChild(\n    document.createElement(\"div\"),\n  );\n  boundsElement.setAttribute(\"data-bind\", `if: ${allowedShape}`);\n  boundsElement.appendChild(createRangeInput(maxXTitle, maxXVar));\n  boundsElement.appendChild(createRangeInput(minXTitle, minXVar));\n  boundsElement.appendChild(createRangeInput(maxYTitle, maxYVar));\n  boundsElement.appendChild(createRangeInput(minYTitle, minYVar));\n  boundsElement.appendChild(createRangeInput(maxZTitle, maxZVar));\n  boundsElement.appendChild(createRangeInput(minZTitle, minZVar));\n}\n\nexport default VoxelInspector;\n","import {\n  Cartesian3,\n  Check,\n  defined,\n  destroyObject,\n  HeadingPitchRoll,\n  Math as CesiumMath,\n  Matrix3,\n  Matrix4,\n  CustomShader,\n  VoxelShapeType,\n} from \"@cesium/engine\";\nimport knockout from \"../ThirdParty/knockout.js\";\n\nfunction formatShaderString(str) {\n  // This function:\n  // A) removes whitespace lines at the beginning of the string\n  // B) removes unnecessary spaces from the beginning of each line\n\n  const lines = str.split(\"\\n\");\n  let firstLineIdx;\n  for (firstLineIdx = 0; firstLineIdx < lines.length; firstLineIdx++) {\n    if (lines[firstLineIdx].match(/\\S/)) {\n      // Found the first line that's not entirely whitespace\n      break;\n    }\n  }\n  if (firstLineIdx === lines.length) {\n    // All lines are empty\n    return \"\";\n  }\n\n  let finalStr = \"\";\n  const pattern = /^\\s*/;\n  const firstLine = lines[firstLineIdx];\n  const spacesInFrontOfFirstLine = firstLine.match(pattern)[0].length;\n  for (let i = firstLineIdx; i < lines.length; i++) {\n    let line = lines[i];\n    const spacesInFront = line.match(pattern)[0].length;\n    if (spacesInFront >= spacesInFrontOfFirstLine) {\n      line = line.slice(spacesInFrontOfFirstLine);\n    }\n    finalStr += `${line}\\n`;\n  }\n  return finalStr;\n}\n\n/**\n * The view model for {@link VoxelInspector}.\n * @alias VoxelInspectorViewModel\n * @constructor\n *\n * @param {Scene} scene The scene instance to use.\n */\nfunction VoxelInspectorViewModel(scene) {\n  //>>includeStart('debug', pragmas.debug);\n  Check.typeOf.object(\"scene\", scene);\n  //>>includeEnd('debug');\n\n  this._scene = scene;\n  this._voxelPrimitive = undefined;\n  this._customShaderCompilationRemoveCallback = undefined;\n\n  this._definedProperties = [];\n  this._getPrimitiveFunctions = [];\n  this._modelMatrixReady = false;\n\n  const that = this;\n  function addProperty(options) {\n    const { name, initialValue } = options;\n\n    that._definedProperties.push(name);\n\n    let setPrimitiveFunction = options.setPrimitiveFunction;\n    if (setPrimitiveFunction === true) {\n      setPrimitiveFunction = function (value) {\n        that._voxelPrimitive[name] = value;\n      };\n    }\n\n    let getPrimitiveFunction = options.getPrimitiveFunction;\n    if (getPrimitiveFunction === true) {\n      getPrimitiveFunction = function () {\n        that[name] = that._voxelPrimitive[name];\n      };\n    }\n    if (defined(getPrimitiveFunction)) {\n      that._getPrimitiveFunctions.push(getPrimitiveFunction);\n    }\n\n    const knock = knockout.observable();\n    knockout.defineProperty(that, name, {\n      get: function () {\n        return knock();\n      },\n      set: function (value) {\n        // Convert input values to the correct type\n        if (typeof initialValue === \"number\" && typeof value === \"string\") {\n          value = Number(value);\n          if (isNaN(value)) {\n            value = initialValue;\n          }\n        }\n        if (typeof initialValue === \"boolean\" && typeof value === \"number\") {\n          value = value === 1 ? true : false;\n        }\n        knock(value);\n        if (defined(setPrimitiveFunction) && defined(that._voxelPrimitive)) {\n          setPrimitiveFunction(value);\n          scene.requestRender();\n        }\n      },\n    });\n\n    that[name] = initialValue;\n\n    return knock;\n  }\n\n  function getBoundSetter(boundKey, component) {\n    return function (value) {\n      const bound = that._voxelPrimitive[boundKey].clone();\n      bound[component] = value;\n      that._voxelPrimitive[boundKey] = bound;\n    };\n  }\n\n  addProperty({\n    name: \"inspectorVisible\",\n    initialValue: true,\n  });\n\n  addProperty({\n    name: \"displayVisible\",\n    initialValue: false,\n  });\n\n  addProperty({\n    name: \"transformVisible\",\n    initialValue: false,\n  });\n\n  addProperty({\n    name: \"boundsVisible\",\n    initialValue: false,\n  });\n\n  addProperty({\n    name: \"clippingVisible\",\n    initialValue: false,\n  });\n\n  addProperty({\n    name: \"shaderVisible\",\n    initialValue: false,\n  });\n\n  addProperty({\n    name: \"shaderString\",\n    initialValue: \"\",\n    getPrimitiveFunction: function () {\n      const shaderString = that._voxelPrimitive.customShader.fragmentShaderText;\n      that.shaderString = formatShaderString(shaderString);\n    },\n  });\n  addProperty({\n    name: \"shaderCompilationMessage\",\n    initialValue: \"\",\n  });\n  addProperty({\n    name: \"shaderCompilationSuccess\",\n    initialValue: true,\n  });\n  addProperty({\n    name: \"depthTest\",\n    initialValue: false,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"show\",\n    initialValue: true,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"disableUpdate\",\n    initialValue: false,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"debugDraw\",\n    initialValue: false,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"jitter\",\n    initialValue: true,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"nearestSampling\",\n    initialValue: true,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"screenSpaceError\",\n    initialValue: 4.0,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"stepSize\",\n    initialValue: 1.0,\n    setPrimitiveFunction: true,\n    getPrimitiveFunction: true,\n  });\n  addProperty({\n    name: \"shapeIsBox\",\n    getPrimitiveFunction: function () {\n      const shapeType = that._voxelPrimitive.shape;\n      that.shapeIsBox = shapeType === VoxelShapeType.BOX;\n    },\n  });\n  addProperty({\n    name: \"shapeIsEllipsoid\",\n    getPrimitiveFunction: function () {\n      const shapeType = that._voxelPrimitive.shape;\n      that.shapeIsEllipsoid = shapeType === VoxelShapeType.ELLIPSOID;\n    },\n  });\n  addProperty({\n    name: \"shapeIsCylinder\",\n    getPrimitiveFunction: function () {\n      const shapeType = that._voxelPrimitive.shape;\n      that.shapeIsCylinder = shapeType === VoxelShapeType.CYLINDER;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxXMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxXMin = that._voxelPrimitive.minBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxXMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxXMax = that._voxelPrimitive.maxBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxX\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"x\"),\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxX = that._voxelPrimitive.maxClippingBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinXMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinXMin = that._voxelPrimitive.minBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinXMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinXMax = that._voxelPrimitive.maxBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinX\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"x\"),\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinX = that._voxelPrimitive.minClippingBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxYMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxYMin = that._voxelPrimitive.minBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxYMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxYMax = that._voxelPrimitive.maxBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxY\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"y\"),\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxY = that._voxelPrimitive.maxClippingBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinYMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinYMin = that._voxelPrimitive.minBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinYMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinYMax = that._voxelPrimitive.maxBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinY\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"y\"),\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinY = that._voxelPrimitive.minClippingBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxZMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxZMin = that._voxelPrimitive.minBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxZMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxZMax = that._voxelPrimitive.maxBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMaxZ\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"z\"),\n    getPrimitiveFunction: function () {\n      that.clippingBoxMaxZ = that._voxelPrimitive.maxClippingBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinZMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinZMin = that._voxelPrimitive.minBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinZMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinZMax = that._voxelPrimitive.maxBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingBoxMinZ\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"z\"),\n    getPrimitiveFunction: function () {\n      that.clippingBoxMinZ = that._voxelPrimitive.minClippingBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxLongitudeMin\",\n    initialValue: -CesiumMath.PI,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxLongitudeMin = that._voxelPrimitive.minBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxLongitudeMax\",\n    initialValue: CesiumMath.PI,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxLongitudeMax = that._voxelPrimitive.maxBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxLongitude\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"x\"),\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxLongitude =\n        that._voxelPrimitive.maxClippingBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinLongitudeMin\",\n    initialValue: -CesiumMath.PI,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinLongitudeMin = that._voxelPrimitive.minBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinLongitudeMax\",\n    initialValue: CesiumMath.PI,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinLongitudeMax = that._voxelPrimitive.maxBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinLongitude\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"x\"),\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinLongitude =\n        that._voxelPrimitive.minClippingBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxLatitudeMin\",\n    initialValue: -CesiumMath.PI_OVER_TWO,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxLatitudeMin = that._voxelPrimitive.minBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxLatitudeMax\",\n    initialValue: CesiumMath.PI_OVER_TWO,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxLatitudeMax = that._voxelPrimitive.maxBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxLatitude\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"y\"),\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxLatitude =\n        that._voxelPrimitive.maxClippingBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinLatitudeMin\",\n    initialValue: -CesiumMath.PI_OVER_TWO,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinLatitudeMin = that._voxelPrimitive.minBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinLatitudeMax\",\n    initialValue: CesiumMath.PI_OVER_TWO,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinLatitudeMax = that._voxelPrimitive.maxBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinLatitude\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"y\"),\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinLatitude =\n        that._voxelPrimitive.minClippingBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxHeightMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxHeightMin = that._voxelPrimitive.minBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxHeightMax\",\n    initialValue: 100000.0,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxHeightMax = that._voxelPrimitive.maxBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMaxHeight\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"z\"),\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMaxHeight =\n        that._voxelPrimitive.maxClippingBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinHeightMin\",\n    initialValue: -100000.0,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinHeightMin = that._voxelPrimitive.minBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinHeightMax\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinHeightMax = that._voxelPrimitive.maxBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingEllipsoidMinHeight\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"z\"),\n    getPrimitiveFunction: function () {\n      that.clippingEllipsoidMinHeight =\n        that._voxelPrimitive.minClippingBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxRadiusMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxRadiusMin = that._voxelPrimitive.minBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxRadiusMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxRadiusMax = that._voxelPrimitive.maxBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxRadius\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"x\"),\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxRadius = that._voxelPrimitive.maxClippingBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMinRadiusMin\",\n    initialValue: 0.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMinRadiusMin = that._voxelPrimitive.minBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMinRadiusMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMinRadiusMax = that._voxelPrimitive.maxBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMinRadius\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"x\"),\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMinRadius = that._voxelPrimitive.minClippingBounds.x;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxAngleMin\",\n    initialValue: -CesiumMath.PI,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxAngleMin = that._voxelPrimitive.minBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxAngleMax\",\n    initialValue: CesiumMath.PI,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxAngleMax = that._voxelPrimitive.maxBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxAngle\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"y\"),\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxAngle = that._voxelPrimitive.maxClippingBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMinAngleMin\",\n    initialValue: -CesiumMath.PI,\n  });\n  addProperty({\n    name: \"clippingCylinderMinAngleMax\",\n    initialValue: CesiumMath.PI,\n  });\n  addProperty({\n    name: \"clippingCylinderMinAngle\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"y\"),\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMinAngle = that._voxelPrimitive.minClippingBounds.y;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxHeightMin\",\n    initialValue: -1.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxHeightMin = that._voxelPrimitive.minBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxHeightMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxHeightMax = that._voxelPrimitive.maxBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMaxHeight\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"maxClippingBounds\", \"z\"),\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMaxHeight = that._voxelPrimitive.maxClippingBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMinHeightMin\",\n    initialValue: -1.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMinHeightMin = that._voxelPrimitive.minBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMinHeightMax\",\n    initialValue: 1.0,\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMinHeightMax = that._voxelPrimitive.maxBounds.z;\n    },\n  });\n  addProperty({\n    name: \"clippingCylinderMinHeight\",\n    initialValue: 0.0,\n    setPrimitiveFunction: getBoundSetter(\"minClippingBounds\", \"z\"),\n    getPrimitiveFunction: function () {\n      that.clippingCylinderMinHeight = that._voxelPrimitive.minClippingBounds.z;\n    },\n  });\n\n  addProperty({\n    name: \"translationX\",\n    initialValue: 0.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n    getPrimitiveFunction: function () {\n      that.translationX = Matrix4.getTranslation(\n        that._voxelPrimitive.modelMatrix,\n        new Cartesian3(),\n      ).x;\n    },\n  });\n  addProperty({\n    name: \"translationY\",\n    initialValue: 0.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n    getPrimitiveFunction: function () {\n      that.translationY = Matrix4.getTranslation(\n        that._voxelPrimitive.modelMatrix,\n        new Cartesian3(),\n      ).y;\n    },\n  });\n  addProperty({\n    name: \"translationZ\",\n    initialValue: 0.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n    getPrimitiveFunction: function () {\n      that.translationZ = Matrix4.getTranslation(\n        that._voxelPrimitive.modelMatrix,\n        new Cartesian3(),\n      ).z;\n    },\n  });\n\n  addProperty({\n    name: \"scaleX\",\n    initialValue: 1.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n    getPrimitiveFunction: function () {\n      that.scaleX = Matrix4.getScale(\n        that._voxelPrimitive.modelMatrix,\n        new Cartesian3(),\n      ).x;\n    },\n  });\n  addProperty({\n    name: \"scaleY\",\n    initialValue: 1.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n    getPrimitiveFunction: function () {\n      that.scaleY = Matrix4.getScale(\n        that._voxelPrimitive.modelMatrix,\n        new Cartesian3(),\n      ).y;\n    },\n  });\n  addProperty({\n    name: \"scaleZ\",\n    initialValue: 1.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n    getPrimitiveFunction: function () {\n      that.scaleZ = Matrix4.getScale(\n        that._voxelPrimitive.modelMatrix,\n        new Cartesian3(),\n      ).z;\n    },\n  });\n\n  addProperty({\n    name: \"angleX\",\n    initialValue: 0.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n  });\n\n  addProperty({\n    name: \"angleY\",\n    initialValue: 0.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n  });\n\n  addProperty({\n    name: \"angleZ\",\n    initialValue: 0.0,\n    setPrimitiveFunction: function () {\n      if (that._modelMatrixReady) {\n        setModelMatrix(that);\n      }\n    },\n  });\n}\n\nconst scratchTranslation = new Cartesian3();\nconst scratchScale = new Cartesian3();\nconst scratchHeadingPitchRoll = new HeadingPitchRoll();\nconst scratchRotation = new Matrix3();\n\nfunction setModelMatrix(viewModel) {\n  const translation = Cartesian3.fromElements(\n    viewModel.translationX,\n    viewModel.translationY,\n    viewModel.translationZ,\n    scratchTranslation,\n  );\n  const scale = Cartesian3.fromElements(\n    viewModel.scaleX,\n    viewModel.scaleY,\n    viewModel.scaleZ,\n    scratchScale,\n  );\n  const hpr = scratchHeadingPitchRoll;\n  hpr.heading = viewModel.angleX;\n  hpr.pitch = viewModel.angleY;\n  hpr.roll = viewModel.angleZ;\n  const rotation = Matrix3.fromHeadingPitchRoll(hpr, scratchRotation);\n  const rotationScale = Matrix3.multiplyByScale(rotation, scale, rotation);\n  viewModel._voxelPrimitive.modelMatrix = Matrix4.fromRotationTranslation(\n    rotationScale,\n    translation,\n    viewModel._voxelPrimitive.modelMatrix,\n  );\n}\n\nObject.defineProperties(VoxelInspectorViewModel.prototype, {\n  /**\n   * Gets the scene\n   * @memberof VoxelInspectorViewModel.prototype\n   * @type {Scene}\n   * @readonly\n   */\n  scene: {\n    get: function () {\n      return this._scene;\n    },\n  },\n\n  /**\n   * Gets or sets the primitive of the view model.\n   * @memberof VoxelInspectorViewModel.prototype\n   * @type {VoxelPrimitive}\n   */\n  voxelPrimitive: {\n    get: function () {\n      return this._voxelPrimitive;\n    },\n    set: function (voxelPrimitive) {\n      if (defined(this._customShaderCompilationRemoveCallback)) {\n        this._customShaderCompilationRemoveCallback();\n      }\n\n      // Update properties from the new primitive\n      if (!defined(voxelPrimitive)) {\n        return;\n      }\n      this._voxelPrimitive = voxelPrimitive;\n\n      const that = this;\n      that._customShaderCompilationRemoveCallback =\n        that._voxelPrimitive.customShaderCompilationEvent.addEventListener(\n          function (error) {\n            const shaderString =\n              that._voxelPrimitive.customShader.fragmentShaderText;\n            that.shaderString = formatShaderString(shaderString);\n\n            if (!defined(error)) {\n              that.shaderCompilationMessage = \"Shader compiled successfully!\";\n              that.shaderCompilationSuccess = true;\n            } else {\n              that.shaderCompilationMessage = error.message;\n              that.shaderCompilationSuccess = false;\n            }\n          },\n        );\n      that._modelMatrixReady = false;\n      for (let i = 0; i < that._getPrimitiveFunctions.length; i++) {\n        that._getPrimitiveFunctions[i]();\n      }\n      that._modelMatrixReady = true;\n      setModelMatrix(that);\n    },\n  },\n});\n\n/**\n * Toggles the inspector visibility\n */\nVoxelInspectorViewModel.prototype.toggleInspector = function () {\n  this.inspectorVisible = !this.inspectorVisible;\n};\n\n/**\n * Toggles the visibility of the display section\n */\nVoxelInspectorViewModel.prototype.toggleDisplay = function () {\n  this.displayVisible = !this.displayVisible;\n};\n\n/**\n * Toggles the visibility of the transform section\n */\nVoxelInspectorViewModel.prototype.toggleTransform = function () {\n  this.transformVisible = !this.transformVisible;\n};\n\n/**\n * Toggles the visibility of the bounds section\n */\nVoxelInspectorViewModel.prototype.toggleBounds = function () {\n  this.boundsVisible = !this.boundsVisible;\n};\n\n/**\n * Toggles the visibility of the clipping section\n */\nVoxelInspectorViewModel.prototype.toggleClipping = function () {\n  this.clippingVisible = !this.clippingVisible;\n};\n\n/**\n * Toggles the visibility of the shader section\n */\nVoxelInspectorViewModel.prototype.toggleShader = function () {\n  this.shaderVisible = !this.shaderVisible;\n};\n\n/**\n * Compiles the shader in the shader editor.\n */\nVoxelInspectorViewModel.prototype.compileShader = function () {\n  if (defined(this._voxelPrimitive)) {\n    // It's assumed that the same uniforms are going to be used regardless of edits.\n    this._voxelPrimitive.customShader = new CustomShader({\n      fragmentShaderText: this.shaderString,\n      uniforms: this._voxelPrimitive.customShader.uniforms,\n    });\n  }\n};\n\n/**\n * Handles key press events on the shader editor.\n */\nVoxelInspectorViewModel.prototype.shaderEditorKeyPress = function (\n  sender,\n  event,\n) {\n  if (event.keyCode === 9) {\n    //tab\n    event.preventDefault();\n    const textArea = event.target;\n    const start = textArea.selectionStart;\n    const end = textArea.selectionEnd;\n    let newEnd = end;\n    const selected = textArea.value.slice(start, end);\n    const lines = selected.split(\"\\n\");\n    const length = lines.length;\n    let i;\n    if (!event.shiftKey) {\n      for (i = 0; i < length; ++i) {\n        lines[i] = `  ${lines[i]}`;\n        newEnd += 2;\n      }\n    } else {\n      for (i = 0; i < length; ++i) {\n        if (lines[i][0] === \" \") {\n          if (lines[i][1] === \" \") {\n            lines[i] = lines[i].substr(2);\n            newEnd -= 2;\n          } else {\n            lines[i] = lines[i].substr(1);\n            newEnd -= 1;\n          }\n        }\n      }\n    }\n    const newText = lines.join(\"\\n\");\n    textArea.value =\n      textArea.value.slice(0, start) + newText + textArea.value.slice(end);\n    textArea.selectionStart = start !== end ? start : newEnd;\n    textArea.selectionEnd = newEnd;\n  } else if (event.ctrlKey && (event.keyCode === 10 || event.keyCode === 13)) {\n    //ctrl + enter\n    this.compileShader();\n  }\n  return true;\n};\n\n/**\n * @returns {boolean} true if the object has been destroyed, false otherwise.\n */\nVoxelInspectorViewModel.prototype.isDestroyed = function () {\n  return false;\n};\n\n/**\n * Destroys the widget.  Should be called if permanently\n * removing the widget from layout.\n */\nVoxelInspectorViewModel.prototype.destroy = function () {\n  const that = this;\n  this._definedProperties.forEach(function (property) {\n    knockout.getObservable(that, property).dispose();\n  });\n\n  return destroyObject(this);\n};\n\nexport default VoxelInspectorViewModel;\n","import { defined, DeveloperError, Event } from \"@cesium/engine\";\nimport knockout from \"./ThirdParty/knockout.js\";\n\n/**\n * Create a Command from a given function, for use with ViewModels.\n *\n * A Command is a function with an extra <code>canExecute</code> observable property to determine\n * whether the command can be executed.  When executed, a Command function will check the\n * value of <code>canExecute</code> and throw if false.  It also provides events for when\n * a command has been or is about to be executed.\n *\n * @function\n *\n * @param {Function} func The function to execute.\n * @param {boolean} [canExecute=true] A boolean indicating whether the function can currently be executed.\n */\nfunction createCommand(func, canExecute) {\n  //>>includeStart('debug', pragmas.debug);\n  if (!defined(func)) {\n    throw new DeveloperError(\"func is required.\");\n  }\n  //>>includeEnd('debug');\n\n  canExecute = canExecute ?? true;\n\n  const beforeExecute = new Event();\n  const afterExecute = new Event();\n\n  function command() {\n    //>>includeStart('debug', pragmas.debug);\n    if (!command.canExecute) {\n      throw new DeveloperError(\"Cannot execute command, canExecute is false.\");\n    }\n    //>>includeEnd('debug');\n\n    const commandInfo = {\n      args: arguments,\n      cancel: false,\n    };\n\n    let result;\n    beforeExecute.raiseEvent(commandInfo);\n    if (!commandInfo.cancel) {\n      result = func.apply(null, arguments);\n      afterExecute.raiseEvent(result);\n    }\n    return result;\n  }\n\n  command.canExecute = canExecute;\n  knockout.track(command, [\"canExecute\"]);\n\n  Object.defineProperties(command, {\n    beforeExecute: {\n      value: beforeExecute,\n    },\n    afterExecute: {\n      value: afterExecute,\n    },\n  });\n\n  return command;\n}\nexport default createCommand;\n","import knockout from \"./ThirdParty/knockout.js\";\n\n/**\n * Subscribe to a Knockout observable ES5 property, and immediately fire\n * the callback with the current value of the property.\n *\n * @private\n *\n * @function subscribeAndEvaluate\n *\n * @param {object} owner The object containing the observable property.\n * @param {string} observablePropertyName The name of the observable property.\n * @param {Function} callback The callback function.\n * @param {object} [target] The value of this in the callback function.\n * @param {string} [event='change'] The name of the event to receive notification for.\n * @returns The subscription object from Knockout which can be used to dispose the subscription later.\n */\nfunction subscribeAndEvaluate(\n  owner,\n  observablePropertyName,\n  callback,\n  target,\n  event,\n) {\n  callback.call(target, owner[observablePropertyName]);\n  return knockout\n    .getObservable(owner, observablePropertyName)\n    .subscribe(callback, target, event);\n}\nexport default subscribeAndEvaluate;\n","/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = Object.freeze({\n    Linear: Object.freeze({\n        None: function (amount) {\n            return amount;\n        },\n        In: function (amount) {\n            return amount;\n        },\n        Out: function (amount) {\n            return amount;\n        },\n        InOut: function (amount) {\n            return amount;\n        },\n    }),\n    Quadratic: Object.freeze({\n        In: function (amount) {\n            return amount * amount;\n        },\n        Out: function (amount) {\n            return amount * (2 - amount);\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount;\n            }\n            return -0.5 * (--amount * (amount - 2) - 1);\n        },\n    }),\n    Cubic: Object.freeze({\n        In: function (amount) {\n            return amount * amount * amount;\n        },\n        Out: function (amount) {\n            return --amount * amount * amount + 1;\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount * amount;\n            }\n            return 0.5 * ((amount -= 2) * amount * amount + 2);\n        },\n    }),\n    Quartic: Object.freeze({\n        In: function (amount) {\n            return amount * amount * amount * amount;\n        },\n        Out: function (amount) {\n            return 1 - --amount * amount * amount * amount;\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount * amount * amount;\n            }\n            return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n        },\n    }),\n    Quintic: Object.freeze({\n        In: function (amount) {\n            return amount * amount * amount * amount * amount;\n        },\n        Out: function (amount) {\n            return --amount * amount * amount * amount * amount + 1;\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return 0.5 * amount * amount * amount * amount * amount;\n            }\n            return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n        },\n    }),\n    Sinusoidal: Object.freeze({\n        In: function (amount) {\n            return 1 - Math.sin(((1.0 - amount) * Math.PI) / 2);\n        },\n        Out: function (amount) {\n            return Math.sin((amount * Math.PI) / 2);\n        },\n        InOut: function (amount) {\n            return 0.5 * (1 - Math.sin(Math.PI * (0.5 - amount)));\n        },\n    }),\n    Exponential: Object.freeze({\n        In: function (amount) {\n            return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n        },\n        Out: function (amount) {\n            return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n        },\n        InOut: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            if ((amount *= 2) < 1) {\n                return 0.5 * Math.pow(1024, amount - 1);\n            }\n            return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n        },\n    }),\n    Circular: Object.freeze({\n        In: function (amount) {\n            return 1 - Math.sqrt(1 - amount * amount);\n        },\n        Out: function (amount) {\n            return Math.sqrt(1 - --amount * amount);\n        },\n        InOut: function (amount) {\n            if ((amount *= 2) < 1) {\n                return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n            }\n            return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n        },\n    }),\n    Elastic: Object.freeze({\n        In: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n        },\n        Out: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n        },\n        InOut: function (amount) {\n            if (amount === 0) {\n                return 0;\n            }\n            if (amount === 1) {\n                return 1;\n            }\n            amount *= 2;\n            if (amount < 1) {\n                return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n            }\n            return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n        },\n    }),\n    Back: Object.freeze({\n        In: function (amount) {\n            var s = 1.70158;\n            return amount === 1 ? 1 : amount * amount * ((s + 1) * amount - s);\n        },\n        Out: function (amount) {\n            var s = 1.70158;\n            return amount === 0 ? 0 : --amount * amount * ((s + 1) * amount + s) + 1;\n        },\n        InOut: function (amount) {\n            var s = 1.70158 * 1.525;\n            if ((amount *= 2) < 1) {\n                return 0.5 * (amount * amount * ((s + 1) * amount - s));\n            }\n            return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n        },\n    }),\n    Bounce: Object.freeze({\n        In: function (amount) {\n            return 1 - Easing.Bounce.Out(1 - amount);\n        },\n        Out: function (amount) {\n            if (amount < 1 / 2.75) {\n                return 7.5625 * amount * amount;\n            }\n            else if (amount < 2 / 2.75) {\n                return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n            }\n            else if (amount < 2.5 / 2.75) {\n                return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n            }\n            else {\n                return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n            }\n        },\n        InOut: function (amount) {\n            if (amount < 0.5) {\n                return Easing.Bounce.In(amount * 2) * 0.5;\n            }\n            return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n        },\n    }),\n    generatePow: function (power) {\n        if (power === void 0) { power = 4; }\n        power = power < Number.EPSILON ? Number.EPSILON : power;\n        power = power > 10000 ? 10000 : power;\n        return {\n            In: function (amount) {\n                return Math.pow(amount, power);\n            },\n            Out: function (amount) {\n                return 1 - Math.pow((1 - amount), power);\n            },\n            InOut: function (amount) {\n                if (amount < 0.5) {\n                    return Math.pow((amount * 2), power) / 2;\n                }\n                return (1 - Math.pow((2 - amount * 2), power)) / 2 + 0.5;\n            },\n        };\n    },\n});\n\nvar now = function () { return performance.now(); };\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */ (function () {\n    function Group() {\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        this._tweens = {};\n        this._tweensAddedDuringUpdate = {};\n        this.add.apply(this, tweens);\n    }\n    Group.prototype.getAll = function () {\n        var _this = this;\n        return Object.keys(this._tweens).map(function (tweenId) { return _this._tweens[tweenId]; });\n    };\n    Group.prototype.removeAll = function () {\n        this._tweens = {};\n    };\n    Group.prototype.add = function () {\n        var _a;\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        for (var _b = 0, tweens_1 = tweens; _b < tweens_1.length; _b++) {\n            var tween = tweens_1[_b];\n            // Remove from any other group first, a tween can only be in one group at a time.\n            // @ts-expect-error library internal access\n            (_a = tween._group) === null || _a === void 0 ? void 0 : _a.remove(tween);\n            // @ts-expect-error library internal access\n            tween._group = this;\n            this._tweens[tween.getId()] = tween;\n            this._tweensAddedDuringUpdate[tween.getId()] = tween;\n        }\n    };\n    Group.prototype.remove = function () {\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        for (var _a = 0, tweens_2 = tweens; _a < tweens_2.length; _a++) {\n            var tween = tweens_2[_a];\n            // @ts-expect-error library internal access\n            tween._group = undefined;\n            delete this._tweens[tween.getId()];\n            delete this._tweensAddedDuringUpdate[tween.getId()];\n        }\n    };\n    /** Return true if all tweens in the group are not paused or playing. */\n    Group.prototype.allStopped = function () {\n        return this.getAll().every(function (tween) { return !tween.isPlaying(); });\n    };\n    Group.prototype.update = function (time, preserve) {\n        if (time === void 0) { time = now(); }\n        if (preserve === void 0) { preserve = true; }\n        var tweenIds = Object.keys(this._tweens);\n        if (tweenIds.length === 0)\n            return;\n        // Tweens are updated in \"batches\". If you add a new tween during an\n        // update, then the new tween will be updated in the next batch.\n        // If you remove a tween during an update, it may or may not be updated.\n        // However, if the removed tween was added during the current batch,\n        // then it will not be updated.\n        while (tweenIds.length > 0) {\n            this._tweensAddedDuringUpdate = {};\n            for (var i = 0; i < tweenIds.length; i++) {\n                var tween = this._tweens[tweenIds[i]];\n                var autoStart = !preserve;\n                if (tween && tween.update(time, autoStart) === false && !preserve)\n                    this.remove(tween);\n            }\n            tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n        }\n    };\n    return Group;\n}());\n\n/**\n *\n */\nvar Interpolation = {\n    Linear: function (v, k) {\n        var m = v.length - 1;\n        var f = m * k;\n        var i = Math.floor(f);\n        var fn = Interpolation.Utils.Linear;\n        if (k < 0) {\n            return fn(v[0], v[1], f);\n        }\n        if (k > 1) {\n            return fn(v[m], v[m - 1], m - f);\n        }\n        return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n    },\n    Bezier: function (v, k) {\n        var b = 0;\n        var n = v.length - 1;\n        var pw = Math.pow;\n        var bn = Interpolation.Utils.Bernstein;\n        for (var i = 0; i <= n; i++) {\n            b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n        }\n        return b;\n    },\n    CatmullRom: function (v, k) {\n        var m = v.length - 1;\n        var f = m * k;\n        var i = Math.floor(f);\n        var fn = Interpolation.Utils.CatmullRom;\n        if (v[0] === v[m]) {\n            if (k < 0) {\n                i = Math.floor((f = m * (1 + k)));\n            }\n            return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n        }\n        else {\n            if (k < 0) {\n                return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n            }\n            if (k > 1) {\n                return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n            }\n            return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n        }\n    },\n    Utils: {\n        Linear: function (p0, p1, t) {\n            return (p1 - p0) * t + p0;\n        },\n        Bernstein: function (n, i) {\n            var fc = Interpolation.Utils.Factorial;\n            return fc(n) / fc(i) / fc(n - i);\n        },\n        Factorial: (function () {\n            var a = [1];\n            return function (n) {\n                var s = 1;\n                if (a[n]) {\n                    return a[n];\n                }\n                for (var i = n; i > 1; i--) {\n                    s *= i;\n                }\n                a[n] = s;\n                return s;\n            };\n        })(),\n        CatmullRom: function (p0, p1, p2, p3, t) {\n            var v0 = (p2 - p0) * 0.5;\n            var v1 = (p3 - p1) * 0.5;\n            var t2 = t * t;\n            var t3 = t * t2;\n            return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n        },\n    },\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */ (function () {\n    function Sequence() {\n    }\n    Sequence.nextId = function () {\n        return Sequence._nextId++;\n    };\n    Sequence._nextId = 0;\n    return Sequence;\n}());\n\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */ (function () {\n    function Tween(object, group) {\n        this._isPaused = false;\n        this._pauseStart = 0;\n        this._valuesStart = {};\n        this._valuesEnd = {};\n        this._valuesStartRepeat = {};\n        this._duration = 1000;\n        this._isDynamic = false;\n        this._initialRepeat = 0;\n        this._repeat = 0;\n        this._yoyo = false;\n        this._isPlaying = false;\n        this._reversed = false;\n        this._delayTime = 0;\n        this._startTime = 0;\n        this._easingFunction = Easing.Linear.None;\n        this._interpolationFunction = Interpolation.Linear;\n        // eslint-disable-next-line\n        this._chainedTweens = [];\n        this._onStartCallbackFired = false;\n        this._onEveryStartCallbackFired = false;\n        this._id = Sequence.nextId();\n        this._isChainStopped = false;\n        this._propertiesAreSetUp = false;\n        this._goToEnd = false;\n        this._object = object;\n        if (typeof group === 'object') {\n            this._group = group;\n            group.add(this);\n        }\n        // Use \"true\" to restore old behavior (will be removed in future release).\n        else if (group === true) {\n            this._group = mainGroup;\n            mainGroup.add(this);\n        }\n    }\n    Tween.prototype.getId = function () {\n        return this._id;\n    };\n    Tween.prototype.isPlaying = function () {\n        return this._isPlaying;\n    };\n    Tween.prototype.isPaused = function () {\n        return this._isPaused;\n    };\n    Tween.prototype.getDuration = function () {\n        return this._duration;\n    };\n    Tween.prototype.to = function (target, duration) {\n        if (duration === void 0) { duration = 1000; }\n        if (this._isPlaying)\n            throw new Error('Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.');\n        this._valuesEnd = target;\n        this._propertiesAreSetUp = false;\n        this._duration = duration < 0 ? 0 : duration;\n        return this;\n    };\n    Tween.prototype.duration = function (duration) {\n        if (duration === void 0) { duration = 1000; }\n        this._duration = duration < 0 ? 0 : duration;\n        return this;\n    };\n    Tween.prototype.dynamic = function (dynamic) {\n        if (dynamic === void 0) { dynamic = false; }\n        this._isDynamic = dynamic;\n        return this;\n    };\n    Tween.prototype.start = function (time, overrideStartingValues) {\n        if (time === void 0) { time = now(); }\n        if (overrideStartingValues === void 0) { overrideStartingValues = false; }\n        if (this._isPlaying) {\n            return this;\n        }\n        this._repeat = this._initialRepeat;\n        if (this._reversed) {\n            // If we were reversed (f.e. using the yoyo feature) then we need to\n            // flip the tween direction back to forward.\n            this._reversed = false;\n            for (var property in this._valuesStartRepeat) {\n                this._swapEndStartRepeatValues(property);\n                this._valuesStart[property] = this._valuesStartRepeat[property];\n            }\n        }\n        this._isPlaying = true;\n        this._isPaused = false;\n        this._onStartCallbackFired = false;\n        this._onEveryStartCallbackFired = false;\n        this._isChainStopped = false;\n        this._startTime = time;\n        this._startTime += this._delayTime;\n        if (!this._propertiesAreSetUp || overrideStartingValues) {\n            this._propertiesAreSetUp = true;\n            // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n            if (!this._isDynamic) {\n                var tmp = {};\n                for (var prop in this._valuesEnd)\n                    tmp[prop] = this._valuesEnd[prop];\n                this._valuesEnd = tmp;\n            }\n            this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat, overrideStartingValues);\n        }\n        return this;\n    };\n    Tween.prototype.startFromCurrentValues = function (time) {\n        return this.start(time, true);\n    };\n    Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat, overrideStartingValues) {\n        for (var property in _valuesEnd) {\n            var startValue = _object[property];\n            var startValueIsArray = Array.isArray(startValue);\n            var propType = startValueIsArray ? 'array' : typeof startValue;\n            var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n            // If `to()` specifies a property that doesn't exist in the source object,\n            // we should not set that property in the object\n            if (propType === 'undefined' || propType === 'function') {\n                continue;\n            }\n            // Check if an Array was provided as property value\n            if (isInterpolationList) {\n                var endValues = _valuesEnd[property];\n                if (endValues.length === 0) {\n                    continue;\n                }\n                // Handle an array of relative values.\n                // Creates a local copy of the Array with the start value at the front\n                var temp = [startValue];\n                for (var i = 0, l = endValues.length; i < l; i += 1) {\n                    var value = this._handleRelativeValue(startValue, endValues[i]);\n                    if (isNaN(value)) {\n                        isInterpolationList = false;\n                        console.warn('Found invalid interpolation list. Skipping.');\n                        break;\n                    }\n                    temp.push(value);\n                }\n                if (isInterpolationList) {\n                    // if (_valuesStart[property] === undefined) { // handle end values only the first time. NOT NEEDED? setupProperties is now guarded by _propertiesAreSetUp.\n                    _valuesEnd[property] = temp;\n                    // }\n                }\n            }\n            // handle the deepness of the values\n            if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n                _valuesStart[property] = startValueIsArray ? [] : {};\n                var nestedObject = startValue;\n                for (var prop in nestedObject) {\n                    _valuesStart[property][prop] = nestedObject[prop];\n                }\n                // TODO? repeat nested values? And yoyo? And array values?\n                _valuesStartRepeat[property] = startValueIsArray ? [] : {};\n                var endValues = _valuesEnd[property];\n                // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n                if (!this._isDynamic) {\n                    var tmp = {};\n                    for (var prop in endValues)\n                        tmp[prop] = endValues[prop];\n                    _valuesEnd[property] = endValues = tmp;\n                }\n                this._setupProperties(nestedObject, _valuesStart[property], endValues, _valuesStartRepeat[property], overrideStartingValues);\n            }\n            else {\n                // Save the starting value, but only once unless override is requested.\n                if (typeof _valuesStart[property] === 'undefined' || overrideStartingValues) {\n                    _valuesStart[property] = startValue;\n                }\n                if (!startValueIsArray) {\n                    // eslint-disable-next-line\n                    // @ts-ignore FIXME?\n                    _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n                }\n                if (isInterpolationList) {\n                    // eslint-disable-next-line\n                    // @ts-ignore FIXME?\n                    _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n                }\n                else {\n                    _valuesStartRepeat[property] = _valuesStart[property] || 0;\n                }\n            }\n        }\n    };\n    Tween.prototype.stop = function () {\n        if (!this._isChainStopped) {\n            this._isChainStopped = true;\n            this.stopChainedTweens();\n        }\n        if (!this._isPlaying) {\n            return this;\n        }\n        this._isPlaying = false;\n        this._isPaused = false;\n        if (this._onStopCallback) {\n            this._onStopCallback(this._object);\n        }\n        return this;\n    };\n    Tween.prototype.end = function () {\n        this._goToEnd = true;\n        this.update(this._startTime + this._duration);\n        return this;\n    };\n    Tween.prototype.pause = function (time) {\n        if (time === void 0) { time = now(); }\n        if (this._isPaused || !this._isPlaying) {\n            return this;\n        }\n        this._isPaused = true;\n        this._pauseStart = time;\n        return this;\n    };\n    Tween.prototype.resume = function (time) {\n        if (time === void 0) { time = now(); }\n        if (!this._isPaused || !this._isPlaying) {\n            return this;\n        }\n        this._isPaused = false;\n        this._startTime += time - this._pauseStart;\n        this._pauseStart = 0;\n        return this;\n    };\n    Tween.prototype.stopChainedTweens = function () {\n        for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n            this._chainedTweens[i].stop();\n        }\n        return this;\n    };\n    Tween.prototype.group = function (group) {\n        if (!group) {\n            console.warn('tween.group() without args has been removed, use group.add(tween) instead.');\n            return this;\n        }\n        group.add(this);\n        return this;\n    };\n    /**\n     * Removes the tween from whichever group it is in.\n     */\n    Tween.prototype.remove = function () {\n        var _a;\n        (_a = this._group) === null || _a === void 0 ? void 0 : _a.remove(this);\n        return this;\n    };\n    Tween.prototype.delay = function (amount) {\n        if (amount === void 0) { amount = 0; }\n        this._delayTime = amount;\n        return this;\n    };\n    Tween.prototype.repeat = function (times) {\n        if (times === void 0) { times = 0; }\n        this._initialRepeat = times;\n        this._repeat = times;\n        return this;\n    };\n    Tween.prototype.repeatDelay = function (amount) {\n        this._repeatDelayTime = amount;\n        return this;\n    };\n    Tween.prototype.yoyo = function (yoyo) {\n        if (yoyo === void 0) { yoyo = false; }\n        this._yoyo = yoyo;\n        return this;\n    };\n    Tween.prototype.easing = function (easingFunction) {\n        if (easingFunction === void 0) { easingFunction = Easing.Linear.None; }\n        this._easingFunction = easingFunction;\n        return this;\n    };\n    Tween.prototype.interpolation = function (interpolationFunction) {\n        if (interpolationFunction === void 0) { interpolationFunction = Interpolation.Linear; }\n        this._interpolationFunction = interpolationFunction;\n        return this;\n    };\n    // eslint-disable-next-line\n    Tween.prototype.chain = function () {\n        var tweens = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            tweens[_i] = arguments[_i];\n        }\n        this._chainedTweens = tweens;\n        return this;\n    };\n    Tween.prototype.onStart = function (callback) {\n        this._onStartCallback = callback;\n        return this;\n    };\n    Tween.prototype.onEveryStart = function (callback) {\n        this._onEveryStartCallback = callback;\n        return this;\n    };\n    Tween.prototype.onUpdate = function (callback) {\n        this._onUpdateCallback = callback;\n        return this;\n    };\n    Tween.prototype.onRepeat = function (callback) {\n        this._onRepeatCallback = callback;\n        return this;\n    };\n    Tween.prototype.onComplete = function (callback) {\n        this._onCompleteCallback = callback;\n        return this;\n    };\n    Tween.prototype.onStop = function (callback) {\n        this._onStopCallback = callback;\n        return this;\n    };\n    /**\n     * @returns true if the tween is still playing after the update, false\n     * otherwise (calling update on a paused tween still returns true because\n     * it is still playing, just paused).\n     *\n     * @param autoStart - When true, calling update will implicitly call start()\n     * as well. Note, if you stop() or end() the tween, but are still calling\n     * update(), it will start again!\n     */\n    Tween.prototype.update = function (time, autoStart) {\n        var _this = this;\n        var _a;\n        if (time === void 0) { time = now(); }\n        if (autoStart === void 0) { autoStart = Tween.autoStartOnUpdate; }\n        if (this._isPaused)\n            return true;\n        var property;\n        if (!this._goToEnd && !this._isPlaying) {\n            if (autoStart)\n                this.start(time, true);\n            else\n                return false;\n        }\n        this._goToEnd = false;\n        if (time < this._startTime) {\n            return true;\n        }\n        if (this._onStartCallbackFired === false) {\n            if (this._onStartCallback) {\n                this._onStartCallback(this._object);\n            }\n            this._onStartCallbackFired = true;\n        }\n        if (this._onEveryStartCallbackFired === false) {\n            if (this._onEveryStartCallback) {\n                this._onEveryStartCallback(this._object);\n            }\n            this._onEveryStartCallbackFired = true;\n        }\n        var elapsedTime = time - this._startTime;\n        var durationAndDelay = this._duration + ((_a = this._repeatDelayTime) !== null && _a !== void 0 ? _a : this._delayTime);\n        var totalTime = this._duration + this._repeat * durationAndDelay;\n        var calculateElapsedPortion = function () {\n            if (_this._duration === 0)\n                return 1;\n            if (elapsedTime > totalTime) {\n                return 1;\n            }\n            var timesRepeated = Math.trunc(elapsedTime / durationAndDelay);\n            var timeIntoCurrentRepeat = elapsedTime - timesRepeated * durationAndDelay;\n            // TODO use %?\n            // const timeIntoCurrentRepeat = elapsedTime % durationAndDelay\n            var portion = Math.min(timeIntoCurrentRepeat / _this._duration, 1);\n            if (portion === 0 && elapsedTime === _this._duration) {\n                return 1;\n            }\n            return portion;\n        };\n        var elapsed = calculateElapsedPortion();\n        var value = this._easingFunction(elapsed);\n        // properties transformations\n        this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n        if (this._onUpdateCallback) {\n            this._onUpdateCallback(this._object, elapsed);\n        }\n        if (this._duration === 0 || elapsedTime >= this._duration) {\n            if (this._repeat > 0) {\n                var completeCount = Math.min(Math.trunc((elapsedTime - this._duration) / durationAndDelay) + 1, this._repeat);\n                if (isFinite(this._repeat)) {\n                    this._repeat -= completeCount;\n                }\n                // Reassign starting values, restart by making startTime = now\n                for (property in this._valuesStartRepeat) {\n                    if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n                        this._valuesStartRepeat[property] =\n                            // eslint-disable-next-line\n                            // @ts-ignore FIXME?\n                            this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n                    }\n                    if (this._yoyo) {\n                        this._swapEndStartRepeatValues(property);\n                    }\n                    this._valuesStart[property] = this._valuesStartRepeat[property];\n                }\n                if (this._yoyo) {\n                    this._reversed = !this._reversed;\n                }\n                this._startTime += durationAndDelay * completeCount;\n                if (this._onRepeatCallback) {\n                    this._onRepeatCallback(this._object);\n                }\n                this._onEveryStartCallbackFired = false;\n                return true;\n            }\n            else {\n                if (this._onCompleteCallback) {\n                    this._onCompleteCallback(this._object);\n                }\n                for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n                    // Make the chained tweens start exactly at the time they should,\n                    // even if the `update()` method was called way past the duration of the tween\n                    this._chainedTweens[i].start(this._startTime + this._duration, false);\n                }\n                this._isPlaying = false;\n                return false;\n            }\n        }\n        return true;\n    };\n    Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n        for (var property in _valuesEnd) {\n            // Don't update properties that do not exist in the source object\n            if (_valuesStart[property] === undefined) {\n                continue;\n            }\n            var start = _valuesStart[property] || 0;\n            var end = _valuesEnd[property];\n            var startIsArray = Array.isArray(_object[property]);\n            var endIsArray = Array.isArray(end);\n            var isInterpolationList = !startIsArray && endIsArray;\n            if (isInterpolationList) {\n                _object[property] = this._interpolationFunction(end, value);\n            }\n            else if (typeof end === 'object' && end) {\n                // eslint-disable-next-line\n                // @ts-ignore FIXME?\n                this._updateProperties(_object[property], start, end, value);\n            }\n            else {\n                // Parses relative end values with start as base (e.g.: +10, -3)\n                end = this._handleRelativeValue(start, end);\n                // Protect against non numeric properties.\n                if (typeof end === 'number') {\n                    // eslint-disable-next-line\n                    // @ts-ignore FIXME?\n                    _object[property] = start + (end - start) * value;\n                }\n            }\n        }\n    };\n    Tween.prototype._handleRelativeValue = function (start, end) {\n        if (typeof end !== 'string') {\n            return end;\n        }\n        if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n            return start + parseFloat(end);\n        }\n        return parseFloat(end);\n    };\n    Tween.prototype._swapEndStartRepeatValues = function (property) {\n        var tmp = this._valuesStartRepeat[property];\n        var endValue = this._valuesEnd[property];\n        if (typeof endValue === 'string') {\n            this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n        }\n        else {\n            this._valuesStartRepeat[property] = this._valuesEnd[property];\n        }\n        this._valuesEnd[property] = tmp;\n    };\n    Tween.autoStartOnUpdate = false;\n    return Tween;\n}());\n\nvar VERSION = '25.0.0';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar getAll = TWEEN.getAll.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar add = TWEEN.add.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar remove = TWEEN.remove.bind(TWEEN);\n/**\n * @deprecated The global TWEEN Group will be removed in a following major\n * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n * group.\n *\n * Old code:\n *\n * ```js\n * import * as TWEEN from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new TWEEN.Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   TWEEN.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n *\n * New code:\n *\n * ```js\n * import {Tween, Group} from '@tweenjs/tween.js'\n *\n * //...\n *\n * const tween = new Tween(obj)\n * const tween2 = new TWEEN.Tween(obj2)\n *\n * //...\n *\n * const group = new Group()\n * group.add(tween)\n * group.add(tween2)\n *\n * //...\n *\n * requestAnimationFrame(function loop(time) {\n *   group.update(time)\n *   requestAnimationFrame(loop)\n * })\n * ```\n */\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n    Easing: Easing,\n    Group: Group,\n    Interpolation: Interpolation,\n    now: now,\n    Sequence: Sequence,\n    nextId: nextId,\n    Tween: Tween,\n    VERSION: VERSION,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    getAll: getAll,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    removeAll: removeAll,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    add: add,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    remove: remove,\n    /**\n     * @deprecated The global TWEEN Group will be removed in a following major\n     * release. To migrate, create a `new Group()` instead of using `TWEEN` as a\n     * group.\n     *\n     * Old code:\n     *\n     * ```js\n     * import * as TWEEN from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new TWEEN.Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   TWEEN.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     *\n     * New code:\n     *\n     * ```js\n     * import {Tween, Group} from '@tweenjs/tween.js'\n     *\n     * //...\n     *\n     * const tween = new Tween(obj)\n     * const tween2 = new TWEEN.Tween(obj2)\n     *\n     * //...\n     *\n     * const group = new Group()\n     * group.add(tween)\n     * group.add(tween2)\n     *\n     * //...\n     *\n     * requestAnimationFrame(function loop(time) {\n     *   group.update(time)\n     *   requestAnimationFrame(loop)\n     * })\n     * ```\n     */\n    update: update,\n};\n\nexport { Easing, Group, Interpolation, Sequence, Tween, VERSION, add, exports as default, getAll, nextId, now, remove, removeAll, update };\n","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst OPTION_FILENAME_ENCODING = \"filenameEncoding\";\nconst OPTION_COMMENT_ENCODING = \"commentEncoding\";\nconst OPTION_DECODE_TEXT = \"decodeText\";\nconst OPTION_EXTRACT_PREPENDED_DATA = \"extractPrependedData\";\nconst OPTION_EXTRACT_APPENDED_DATA = \"extractAppendedData\";\nconst OPTION_PASSWORD = \"password\";\nconst OPTION_RAW_PASSWORD = \"rawPassword\";\nconst OPTION_PASS_THROUGH = \"passThrough\";\nconst OPTION_SIGNAL = \"signal\";\nconst OPTION_CHECK_PASSWORD_ONLY = \"checkPasswordOnly\";\nconst OPTION_CHECK_OVERLAPPING_ENTRY_ONLY = \"checkOverlappingEntryOnly\";\nconst OPTION_CHECK_OVERLAPPING_ENTRY = \"checkOverlappingEntry\";\nconst OPTION_CHECK_SIGNATURE = \"checkSignature\";\nconst OPTION_USE_WEB_WORKERS = \"useWebWorkers\";\nconst OPTION_USE_COMPRESSION_STREAM = \"useCompressionStream\";\nconst OPTION_TRANSFER_STREAMS = \"transferStreams\";\nconst OPTION_PREVENT_CLOSE = \"preventClose\";\nconst OPTION_ENCRYPTION_STRENGTH = \"encryptionStrength\";\nconst OPTION_EXTENDED_TIMESTAMP = \"extendedTimestamp\";\nconst OPTION_KEEP_ORDER = \"keepOrder\";\nconst OPTION_LEVEL = \"level\";\nconst OPTION_BUFFERED_WRITE = \"bufferedWrite\";\nconst OPTION_CREATE_TEMP_STREAM = \"createTempStream\";\nconst OPTION_DATA_DESCRIPTOR_SIGNATURE = \"dataDescriptorSignature\";\nconst OPTION_USE_UNICODE_FILE_NAMES = \"useUnicodeFileNames\";\nconst OPTION_DATA_DESCRIPTOR = \"dataDescriptor\";\nconst OPTION_SUPPORT_ZIP64_SPLIT_FILE = \"supportZip64SplitFile\";\nconst OPTION_ENCODE_TEXT = \"encodeText\";\nconst OPTION_OFFSET = \"offset\";\nconst OPTION_USDZ = \"usdz\";\nconst OPTION_UNIX_EXTRA_FIELD_TYPE = \"unixExtraFieldType\";\n\nexport {\n\tOPTION_FILENAME_ENCODING,\n\tOPTION_COMMENT_ENCODING,\n\tOPTION_DECODE_TEXT,\n\tOPTION_EXTRACT_PREPENDED_DATA,\n\tOPTION_EXTRACT_APPENDED_DATA,\n\tOPTION_PASSWORD,\n\tOPTION_RAW_PASSWORD,\n\tOPTION_PASS_THROUGH,\n\tOPTION_SIGNAL,\n\tOPTION_CHECK_PASSWORD_ONLY,\n\tOPTION_CHECK_OVERLAPPING_ENTRY_ONLY,\n\tOPTION_CHECK_OVERLAPPING_ENTRY,\n\tOPTION_CHECK_SIGNATURE,\n\tOPTION_USE_WEB_WORKERS,\n\tOPTION_USE_COMPRESSION_STREAM,\n\tOPTION_TRANSFER_STREAMS,\n\tOPTION_PREVENT_CLOSE,\n\tOPTION_ENCRYPTION_STRENGTH,\n\tOPTION_EXTENDED_TIMESTAMP,\n\tOPTION_KEEP_ORDER,\n\tOPTION_LEVEL,\n\tOPTION_BUFFERED_WRITE,\n\tOPTION_CREATE_TEMP_STREAM,\n\tOPTION_DATA_DESCRIPTOR_SIGNATURE,\n\tOPTION_USE_UNICODE_FILE_NAMES,\n\tOPTION_DATA_DESCRIPTOR,\n\tOPTION_SUPPORT_ZIP64_SPLIT_FILE,\n\tOPTION_ENCODE_TEXT,\n\tOPTION_OFFSET,\n\tOPTION_USDZ,\n\tOPTION_UNIX_EXTRA_FIELD_TYPE\n};","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TransformStream */\n\nlet wasm, malloc, free, memory;\n\nexport function setWasmExports(wasmAPI) {\n\twasm = wasmAPI;\n\t({ malloc, free, memory } = wasm);\n\tif (typeof malloc !== \"function\" || typeof free !== \"function\" || !memory) {\n\t\twasm = malloc = free = memory = null;\n\t\tthrow new Error(\"Invalid WASM module\");\n\t}\n}\n\nfunction _make(isCompress, type, options = {}) {\n\tconst level = (typeof options.level === \"number\") ? options.level : -1;\n\tconst outBufferSize = (typeof options.outBuffer === \"number\") ? options.outBuffer : 64 * 1024;\n\tconst inBufferSize = (typeof options.inBufferSize === \"number\") ? options.inBufferSize : 64 * 1024;\n\n\treturn new TransformStream({\n\t\tstart() {\n\t\t\tlet result;\n\t\t\tthis.out = malloc(outBufferSize);\n\t\t\tthis.in = malloc(inBufferSize);\n\t\t\tthis.inBufferSize = inBufferSize;\n\t\t\tthis._scratch = new Uint8Array(outBufferSize);\n\t\t\tif (isCompress) {\n\t\t\t\tthis._process = wasm.deflate_process;\n\t\t\t\tthis._last_consumed = wasm.deflate_last_consumed;\n\t\t\t\tthis._end = wasm.deflate_end;\n\t\t\t\tthis.streamHandle = wasm.deflate_new();\n\t\t\t\tif (type === \"gzip\") {\n\t\t\t\t\tresult = wasm.deflate_init_gzip(this.streamHandle, level);\n\t\t\t\t} else if (type === \"deflate-raw\") {\n\t\t\t\t\tresult = wasm.deflate_init_raw(this.streamHandle, level);\n\t\t\t\t} else {\n\t\t\t\t\tresult = wasm.deflate_init(this.streamHandle, level);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (type === \"deflate64-raw\") {\n\t\t\t\t\tthis._process = wasm.inflate9_process;\n\t\t\t\t\tthis._last_consumed = wasm.inflate9_last_consumed;\n\t\t\t\t\tthis._end = wasm.inflate9_end;\n\t\t\t\t\tthis.streamHandle = wasm.inflate9_new();\n\t\t\t\t\tresult = wasm.inflate9_init_raw(this.streamHandle);\n\t\t\t\t} else {\n\t\t\t\t\tthis._process = wasm.inflate_process;\n\t\t\t\t\tthis._last_consumed = wasm.inflate_last_consumed;\n\t\t\t\t\tthis._end = wasm.inflate_end;\n\t\t\t\t\tthis.streamHandle = wasm.inflate_new();\n\t\t\t\t\tif (type === \"deflate-raw\") {\n\t\t\t\t\t\tresult = wasm.inflate_init_raw(this.streamHandle);\n\t\t\t\t\t} else if (type === \"gzip\") {\n\t\t\t\t\t\tresult = wasm.inflate_init_gzip(this.streamHandle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = wasm.inflate_init(this.streamHandle);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result !== 0) {\n\t\t\t\tthrow new Error(\"init failed:\" + result);\n\t\t\t}\n\t\t},\n\t\ttransform(chunk, controller) {\n\t\t\ttry {\n\t\t\t\tconst buffer = chunk;\n\t\t\t\tconst heap = new Uint8Array(memory.buffer);\n\t\t\t\tconst process = this._process;\n\t\t\t\tconst last_consumed = this._last_consumed;\n\t\t\t\tconst out = this.out;\n\t\t\t\tconst scratch = this._scratch;\n\t\t\t\tlet offset = 0;\n\t\t\t\twhile (offset < buffer.length) {\n\t\t\t\t\tconst toRead = Math.min(buffer.length - offset, 32 * 1024);\n\t\t\t\t\tif (!this.in || this.inBufferSize < toRead) {\n\t\t\t\t\t\tif (this.in && free) {\n\t\t\t\t\t\t\tfree(this.in);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.in = malloc(toRead);\n\t\t\t\t\t\tthis.inBufferSize = toRead;\n\t\t\t\t\t}\n\t\t\t\t\theap.set(buffer.subarray(offset, offset + toRead), this.in);\n\t\t\t\t\tconst result = process(this.streamHandle, this.in, toRead, out, outBufferSize, 0);\n\t\t\t\t\tconst prod = result & 0x00ffffff;\n\t\t\t\t\tif (prod) {\n\t\t\t\t\t\tscratch.set(heap.subarray(out, out + prod), 0);\n\t\t\t\t\t\tcontroller.enqueue(scratch.slice(0, prod));\n\t\t\t\t\t}\n\t\t\t\t\tif (!isCompress) {\n\t\t\t\t\t\tconst code = (result >> 24) & 0xff;\n\t\t\t\t\t\tconst signedCode = (code & 0x80) ? code - 256 : code;\n\t\t\t\t\t\tif (signedCode < 0) {\n\t\t\t\t\t\t\tthrow new Error(\"process error:\" + signedCode);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst consumed = last_consumed(this.streamHandle);\n\t\t\t\t\tif (consumed === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\toffset += consumed;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (this._end && this.streamHandle) {\n\t\t\t\t\tthis._end(this.streamHandle);\n\t\t\t\t}\n\t\t\t\tif (this.in && free) {\n\t\t\t\t\tfree(this.in);\n\t\t\t\t}\n\t\t\t\tif (this.out && free) {\n\t\t\t\t\tfree(this.out);\n\t\t\t\t}\n\t\t\t\tcontroller.error(error);\n\t\t\t}\n\t\t},\n\t\tflush(controller) {\n\t\t\ttry {\n\t\t\t\tconst heap = new Uint8Array(memory.buffer);\n\t\t\t\tconst process = this._process;\n\t\t\t\tconst out = this.out;\n\t\t\t\tconst scratch = this._scratch;\n\t\t\t\twhile (true) {\n\t\t\t\t\tconst result = process(this.streamHandle, 0, 0, out, outBufferSize, 4);\n\t\t\t\t\tconst produced = result & 0x00ffffff;\n\t\t\t\t\tconst code = (result >> 24) & 0xff;\n\t\t\t\t\tif (!isCompress) {\n\t\t\t\t\t\tconst signedCode = (code & 0x80) ? code - 256 : code;\n\t\t\t\t\t\tif (signedCode < 0) {\n\t\t\t\t\t\t\tthrow new Error(\"process error:\" + signedCode);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (produced) {\n\t\t\t\t\t\tscratch.set(heap.subarray(out, out + produced), 0);\n\t\t\t\t\t\tcontroller.enqueue(scratch.slice(0, produced));\n\t\t\t\t\t}\n\t\t\t\t\tif (code === 1 || produced === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tcontroller.error(error);\n\t\t\t} finally {\n\t\t\t\tif (this._end && this.streamHandle) {\n\t\t\t\t\tconst result = this._end(this.streamHandle);\n\t\t\t\t\tif (result !== 0) {\n\t\t\t\t\t\tcontroller.error(new Error(\"end error:\" + result));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.in && free) {\n\t\t\t\t\tfree(this.in);\n\t\t\t\t}\n\t\t\t\tif (this.out && free) {\n\t\t\t\t\tfree(this.out);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport class CompressionStreamZlib {\n\tconstructor(type = \"deflate\", options) {\n\t\treturn _make(true, type, options);\n\t}\n}\nexport class DecompressionStreamZlib {\n\tconstructor(type = \"deflate\", options) {\n\t\treturn _make(false, type, options);\n\t}\n}","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst MAX_32_BITS = 0xffffffff;\nconst MAX_16_BITS = 0xffff;\nconst MAX_8_BITS = 0xff;\nconst COMPRESSION_METHOD_DEFLATE = 0x08;\nconst COMPRESSION_METHOD_DEFLATE_64 = 0x09;\nconst COMPRESSION_METHOD_STORE = 0x00;\nconst COMPRESSION_METHOD_AES = 0x63;\n\nconst LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;\nconst SPLIT_ZIP_FILE_SIGNATURE = 0x08074b50;\nconst DATA_DESCRIPTOR_RECORD_SIGNATURE = SPLIT_ZIP_FILE_SIGNATURE;\nconst CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;\nconst END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;\nconst ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;\nconst ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE = 0x07064b50;\nconst END_OF_CENTRAL_DIR_LENGTH = 22;\nconst ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH = 20;\nconst ZIP64_END_OF_CENTRAL_DIR_LENGTH = 56;\nconst ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH = END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LENGTH;\n\nconst DATA_DESCRIPTOR_RECORD_LENGTH = 12;\nconst DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH = 20;\nconst DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH = 4;\n\nconst EXTRAFIELD_TYPE_ZIP64 = 0x0001;\nconst EXTRAFIELD_TYPE_AES = 0x9901;\nconst EXTRAFIELD_TYPE_NTFS = 0x000a;\nconst EXTRAFIELD_TYPE_NTFS_TAG1 = 0x0001;\nconst EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP = 0x5455;\nconst EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;\nconst EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;\nconst EXTRAFIELD_TYPE_USDZ = 0x1986;\nconst EXTRAFIELD_TYPE_INFOZIP = 0x7875;\nconst EXTRAFIELD_TYPE_UNIX = 0x7855;\n\nconst BITFLAG_ENCRYPTED = 0b1;\nconst BITFLAG_LEVEL = 0b0110;\nconst BITFLAG_LEVEL_MAX_MASK = 0b010;\nconst BITFLAG_LEVEL_FAST_MASK = 0b100;\nconst BITFLAG_LEVEL_SUPER_FAST_MASK = 0b110;\nconst BITFLAG_DATA_DESCRIPTOR = 0b1000;\nconst BITFLAG_LANG_ENCODING_FLAG = 0b100000000000;\nconst FILE_ATTR_MSDOS_DIR_MASK = 0b10000;\nconst FILE_ATTR_MSDOS_READONLY_MASK = 0x01;\nconst FILE_ATTR_MSDOS_HIDDEN_MASK = 0x02;\nconst FILE_ATTR_MSDOS_SYSTEM_MASK = 0x04;\nconst FILE_ATTR_MSDOS_ARCHIVE_MASK = 0x20;\nconst FILE_ATTR_UNIX_TYPE_MASK = 0o170000;\nconst FILE_ATTR_UNIX_TYPE_DIR = 0o040000;\nconst FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;\nconst FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;\nconst FILE_ATTR_UNIX_SETUID_MASK = 0o4000;\nconst FILE_ATTR_UNIX_SETGID_MASK = 0o2000;\nconst FILE_ATTR_UNIX_STICKY_MASK = 0o1000;\n\nconst VERSION_DEFLATE = 0x14;\nconst VERSION_ZIP64 = 0x2D;\nconst VERSION_AES = 0x33;\n\nconst DIRECTORY_SIGNATURE = \"/\";\n\nconst HEADER_SIZE = 30;\nconst HEADER_OFFSET_SIGNATURE = 10;\nconst HEADER_OFFSET_COMPRESSED_SIZE = 14;\nconst HEADER_OFFSET_UNCOMPRESSED_SIZE = 18;\n\nconst MAX_DATE = new Date(2107, 11, 31);\nconst MIN_DATE = new Date(1980, 0, 1);\n\nconst UNDEFINED_VALUE = undefined;\nconst INFINITY_VALUE = Infinity;\nconst UNDEFINED_TYPE = \"undefined\";\nconst FUNCTION_TYPE = \"function\";\nconst OBJECT_TYPE = \"object\";\n\nexport {\n\tMAX_32_BITS,\n\tMAX_16_BITS,\n\tMAX_8_BITS,\n\tCOMPRESSION_METHOD_DEFLATE,\n\tCOMPRESSION_METHOD_DEFLATE_64,\n\tCOMPRESSION_METHOD_STORE,\n\tCOMPRESSION_METHOD_AES,\n\tSPLIT_ZIP_FILE_SIGNATURE,\n\tLOCAL_FILE_HEADER_SIGNATURE,\n\tDATA_DESCRIPTOR_RECORD_SIGNATURE,\n\tCENTRAL_FILE_HEADER_SIGNATURE,\n\tEND_OF_CENTRAL_DIR_SIGNATURE,\n\tZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE,\n\tZIP64_END_OF_CENTRAL_DIR_SIGNATURE,\n\tDATA_DESCRIPTOR_RECORD_LENGTH,\n\tDATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH,\n\tDATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH,\n\tEXTRAFIELD_TYPE_ZIP64,\n\tEXTRAFIELD_TYPE_AES,\n\tEXTRAFIELD_TYPE_NTFS,\n\tEXTRAFIELD_TYPE_NTFS_TAG1,\n\tEXTRAFIELD_TYPE_EXTENDED_TIMESTAMP,\n\tEXTRAFIELD_TYPE_UNICODE_PATH,\n\tEXTRAFIELD_TYPE_UNICODE_COMMENT,\n\tEXTRAFIELD_TYPE_USDZ,\n\tEXTRAFIELD_TYPE_INFOZIP,\n\tEXTRAFIELD_TYPE_UNIX,\n\tEND_OF_CENTRAL_DIR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH,\n\tBITFLAG_ENCRYPTED,\n\tBITFLAG_LEVEL,\n\tBITFLAG_LEVEL_MAX_MASK,\n\tBITFLAG_LEVEL_FAST_MASK,\n\tBITFLAG_LEVEL_SUPER_FAST_MASK,\n\tBITFLAG_DATA_DESCRIPTOR,\n\tBITFLAG_LANG_ENCODING_FLAG,\n\tFILE_ATTR_MSDOS_DIR_MASK,\n\tFILE_ATTR_MSDOS_READONLY_MASK,\n\tFILE_ATTR_MSDOS_HIDDEN_MASK,\n\tFILE_ATTR_MSDOS_SYSTEM_MASK,\n\tFILE_ATTR_MSDOS_ARCHIVE_MASK,\n\tFILE_ATTR_UNIX_TYPE_MASK,\n\tFILE_ATTR_UNIX_TYPE_DIR,\n\tFILE_ATTR_UNIX_EXECUTABLE_MASK,\n\tFILE_ATTR_UNIX_DEFAULT_MASK,\n\tFILE_ATTR_UNIX_SETUID_MASK,\n\tFILE_ATTR_UNIX_SETGID_MASK,\n\tFILE_ATTR_UNIX_STICKY_MASK,\n\tVERSION_DEFLATE,\n\tVERSION_ZIP64,\n\tVERSION_AES,\n\tHEADER_SIZE,\n\tHEADER_OFFSET_SIGNATURE,\n\tHEADER_OFFSET_COMPRESSED_SIZE,\n\tHEADER_OFFSET_UNCOMPRESSED_SIZE,\n\tDIRECTORY_SIGNATURE,\n\tMIN_DATE,\n\tMAX_DATE,\n\tUNDEFINED_VALUE,\n\tINFINITY_VALUE,\n\tUNDEFINED_TYPE,\n\tFUNCTION_TYPE,\n\tOBJECT_TYPE\n};","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global navigator, CompressionStream, DecompressionStream */\n\nimport {\n\tUNDEFINED_VALUE,\n\tUNDEFINED_TYPE\n} from \"./constants.js\";\n\nconst MINIMUM_CHUNK_SIZE = 64;\nlet maxWorkers = 2;\ntry {\n\tif (typeof navigator != UNDEFINED_TYPE && navigator.hardwareConcurrency) {\n\t\tmaxWorkers = navigator.hardwareConcurrency;\n\t}\n} catch {\n\t// ignored\n}\nconst DEFAULT_CONFIGURATION = {\n\tworkerURI: \"./core/web-worker-wasm.js\",\n\twasmURI: \"./core/streams/zlib-wasm/zlib-streams.wasm\",\n\tchunkSize: 64 * 1024,\n\tmaxWorkers,\n\tterminateWorkerTimeout: 5000,\n\tuseWebWorkers: true,\n\tuseCompressionStream: true,\n\tCompressionStream: typeof CompressionStream != UNDEFINED_TYPE && CompressionStream,\n\tDecompressionStream: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream\n};\n\nconst config = Object.assign({}, DEFAULT_CONFIGURATION);\n\nexport {\n\tconfigure,\n\tgetConfiguration,\n\tgetChunkSize\n};\n\nfunction getConfiguration() {\n\treturn config;\n}\n\nfunction getChunkSize(config) {\n\treturn Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);\n}\n\nfunction configure(configuration) {\n\tconst {\n\t\tbaseURI,\n\t\tchunkSize,\n\t\tmaxWorkers,\n\t\tterminateWorkerTimeout,\n\t\tuseCompressionStream,\n\t\tuseWebWorkers,\n\t\tCompressionStream,\n\t\tDecompressionStream,\n\t\tCompressionStreamZlib,\n\t\tDecompressionStreamZlib,\n\t\tworkerURI,\n\t\twasmURI\n\t} = configuration;\n\tsetIfDefined(\"baseURI\", baseURI);\n\tsetIfDefined(\"wasmURI\", wasmURI);\n\tsetIfDefined(\"workerURI\", workerURI);\n\tsetIfDefined(\"chunkSize\", chunkSize);\n\tsetIfDefined(\"maxWorkers\", maxWorkers);\n\tsetIfDefined(\"terminateWorkerTimeout\", terminateWorkerTimeout);\n\tsetIfDefined(\"useCompressionStream\", useCompressionStream);\n\tsetIfDefined(\"useWebWorkers\", useWebWorkers);\n\tsetIfDefined(\"CompressionStream\", CompressionStream);\n\tsetIfDefined(\"DecompressionStream\", DecompressionStream);\n\tsetIfDefined(\"CompressionStreamZlib\", CompressionStreamZlib);\n\tsetIfDefined(\"DecompressionStreamZlib\", DecompressionStreamZlib);\n}\n\nfunction setIfDefined(propertyName, propertyValue) {\n\tif (propertyValue !== UNDEFINED_VALUE) {\n\t\tconfig[propertyName] = propertyValue;\n\t}\n}\n","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst table = [];\nfor (let i = 0; i < 256; i++) {\n\tlet t = i;\n\tfor (let j = 0; j < 8; j++) {\n\t\tif (t & 1) {\n\t\t\tt = (t >>> 1) ^ 0xEDB88320;\n\t\t} else {\n\t\t\tt = t >>> 1;\n\t\t}\n\t}\n\ttable[i] = t;\n}\n\nclass Crc32 {\n\n\tconstructor(crc) {\n\t\tthis.crc = crc || -1;\n\t}\n\n\tappend(data) {\n\t\tlet crc = this.crc | 0;\n\t\tfor (let offset = 0, length = data.length | 0; offset < length; offset++) {\n\t\t\tcrc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF];\n\t\t}\n\t\tthis.crc = crc;\n\t}\n\n\tget() {\n\t\treturn ~this.crc;\n\t}\n}\n\nexport {\n\tCrc32\n};","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TransformStream */\n\nimport { Crc32 } from \"./codecs/crc32.js\";\n\nclass Crc32Stream extends TransformStream {\n\n\tconstructor() {\n\t\t// deno-lint-ignore prefer-const\n\t\tlet stream;\n\t\tconst crc32 = new Crc32();\n\t\tsuper({\n\t\t\ttransform(chunk, controller) {\n\t\t\t\tcrc32.append(chunk);\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t\tflush() {\n\t\t\t\tconst value = new Uint8Array(4);\n\t\t\t\tconst dataView = new DataView(value.buffer);\n\t\t\t\tdataView.setUint32(0, crc32.get());\n\t\t\t\tstream.value = value;\n\t\t\t}\n\t\t});\n\t\tstream = this;\n\t}\n}\n\nexport {\n\tCrc32Stream\n};","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TextEncoder */\n\nimport { UNDEFINED_TYPE } from \"../constants.js\";\n\nexport {\n\tencodeText\n};\n\nfunction encodeText(value) {\n\t// deno-lint-ignore valid-typeof\n\tif (typeof TextEncoder == UNDEFINED_TYPE) {\n\t\tvalue = unescape(encodeURIComponent(value));\n\t\tconst result = new Uint8Array(value.length);\n\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\tresult[i] = value.charCodeAt(i);\n\t\t}\n\t\treturn result;\n\t} else {\n\t\treturn new TextEncoder().encode(value);\n\t}\n}","// Derived from https://github.com/xqdoo00o/jszip/blob/master/lib/sjcl.js and https://github.com/bitwiseshiftleft/sjcl\n\n// deno-lint-ignore-file no-this-alias\n\n/*\n * SJCL is open. You can use, modify and redistribute it under a BSD\n * license or under the GNU GPL, version 2.0.\n */\n\n/** @fileOverview Javascript cryptography implementation.\n *\n * Crush to remove comments, shorten variable names and\n * generally reduce transmission size.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */\n\n/** @fileOverview Arrays of bits, encoded as arrays of Numbers.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/**\n * Arrays of bits, encoded as arrays of Numbers.\n * @namespace\n * @description\n * <p>\n * These objects are the currency accepted by SJCL's crypto functions.\n * </p>\n *\n * <p>\n * Most of our crypto primitives operate on arrays of 4-byte words internally,\n * but many of them can take arguments that are not a multiple of 4 bytes.\n * This library encodes arrays of bits (whose size need not be a multiple of 8\n * bits) as arrays of 32-bit words.  The bits are packed, big-endian, into an\n * array of words, 32 bits at a time.  Since the words are double-precision\n * floating point numbers, they fit some extra data.  We use this (in a private,\n * possibly-changing manner) to encode the number of bits actually  present\n * in the last word of the array.\n * </p>\n *\n * <p>\n * Because bitwise ops clear this out-of-band data, these arrays can be passed\n * to ciphers like AES which want arrays of words.\n * </p>\n */\nconst bitArray = {\n\t/**\n\t * Concatenate two bit arrays.\n\t * @param {bitArray} a1 The first array.\n\t * @param {bitArray} a2 The second array.\n\t * @return {bitArray} The concatenation of a1 and a2.\n\t */\n\tconcat(a1, a2) {\n\t\tif (a1.length === 0 || a2.length === 0) {\n\t\t\treturn a1.concat(a2);\n\t\t}\n\n\t\tconst last = a1[a1.length - 1], shift = bitArray.getPartial(last);\n\t\tif (shift === 32) {\n\t\t\treturn a1.concat(a2);\n\t\t} else {\n\t\t\treturn bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));\n\t\t}\n\t},\n\n\t/**\n\t * Find the length of an array of bits.\n\t * @param {bitArray} a The array.\n\t * @return {Number} The length of a, in bits.\n\t */\n\tbitLength(a) {\n\t\tconst l = a.length;\n\t\tif (l === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tconst x = a[l - 1];\n\t\treturn (l - 1) * 32 + bitArray.getPartial(x);\n\t},\n\n\t/**\n\t * Truncate an array.\n\t * @param {bitArray} a The array.\n\t * @param {Number} len The length to truncate to, in bits.\n\t * @return {bitArray} A new array, truncated to len bits.\n\t */\n\tclamp(a, len) {\n\t\tif (a.length * 32 < len) {\n\t\t\treturn a;\n\t\t}\n\t\ta = a.slice(0, Math.ceil(len / 32));\n\t\tconst l = a.length;\n\t\tlen = len & 31;\n\t\tif (l > 0 && len) {\n\t\t\ta[l - 1] = bitArray.partial(len, a[l - 1] & 0x80000000 >> (len - 1), 1);\n\t\t}\n\t\treturn a;\n\t},\n\n\t/**\n\t * Make a partial word for a bit array.\n\t * @param {Number} len The number of bits in the word.\n\t * @param {Number} x The bits.\n\t * @param {Number} [_end=0] Pass 1 if x has already been shifted to the high side.\n\t * @return {Number} The partial word.\n\t */\n\tpartial(len, x, _end) {\n\t\tif (len === 32) {\n\t\t\treturn x;\n\t\t}\n\t\treturn (_end ? x | 0 : x << (32 - len)) + len * 0x10000000000;\n\t},\n\n\t/**\n\t * Get the number of bits used by a partial word.\n\t * @param {Number} x The partial word.\n\t * @return {Number} The number of bits used by the partial word.\n\t */\n\tgetPartial(x) {\n\t\treturn Math.round(x / 0x10000000000) || 32;\n\t},\n\n\t/** Shift an array right.\n\t * @param {bitArray} a The array to shift.\n\t * @param {Number} shift The number of bits to shift.\n\t * @param {Number} [carry=0] A byte to carry in\n\t * @param {bitArray} [out=[]] An array to prepend to the output.\n\t * @private\n\t */\n\t_shiftRight(a, shift, carry, out) {\n\t\tif (out === undefined) {\n\t\t\tout = [];\n\t\t}\n\n\t\tfor (; shift >= 32; shift -= 32) {\n\t\t\tout.push(carry);\n\t\t\tcarry = 0;\n\t\t}\n\t\tif (shift === 0) {\n\t\t\treturn out.concat(a);\n\t\t}\n\n\t\tfor (let i = 0; i < a.length; i++) {\n\t\t\tout.push(carry | a[i] >>> shift);\n\t\t\tcarry = a[i] << (32 - shift);\n\t\t}\n\t\tconst last2 = a.length ? a[a.length - 1] : 0;\n\t\tconst shift2 = bitArray.getPartial(last2);\n\t\tout.push(bitArray.partial(shift + shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(), 1));\n\t\treturn out;\n\t}\n};\n\n/** @fileOverview Bit array codec implementations.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/**\n * Arrays of bytes\n * @namespace\n */\nconst codec = {\n\tbytes: {\n\t\t/** Convert from a bitArray to an array of bytes. */\n\t\tfromBits(arr) {\n\t\t\tconst bl = bitArray.bitLength(arr);\n\t\t\tconst byteLength = bl / 8;\n\t\t\tconst out = new Uint8Array(byteLength);\n\t\t\tlet tmp;\n\t\t\tfor (let i = 0; i < byteLength; i++) {\n\t\t\t\tif ((i & 3) === 0) {\n\t\t\t\t\ttmp = arr[i / 4];\n\t\t\t\t}\n\t\t\t\tout[i] = tmp >>> 24;\n\t\t\t\ttmp <<= 8;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\t/** Convert from an array of bytes to a bitArray. */\n\t\ttoBits(bytes) {\n\t\t\tconst out = [];\n\t\t\tlet i;\n\t\t\tlet tmp = 0;\n\t\t\tfor (i = 0; i < bytes.length; i++) {\n\t\t\t\ttmp = tmp << 8 | bytes[i];\n\t\t\t\tif ((i & 3) === 3) {\n\t\t\t\t\tout.push(tmp);\n\t\t\t\t\ttmp = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i & 3) {\n\t\t\t\tout.push(bitArray.partial(8 * (i & 3), tmp));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t}\n};\n\nconst hash = {};\n\n/**\n * Context for a SHA-1 operation in progress.\n * @constructor\n */\nhash.sha1 = class {\n\tconstructor(hash) {\n\t\tconst sha1 = this;\n\t\t/**\n\t\t * The hash's block size, in bits.\n\t\t * @constant\n\t\t */\n\t\tsha1.blockSize = 512;\n\t\t/**\n\t\t * The SHA-1 initialization vector.\n\t\t * @private\n\t\t */\n\t\tsha1._init = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0];\n\t\t/**\n\t\t * The SHA-1 hash key.\n\t\t * @private\n\t\t */\n\t\tsha1._key = [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6];\n\t\tif (hash) {\n\t\t\tsha1._h = hash._h.slice(0);\n\t\t\tsha1._buffer = hash._buffer.slice(0);\n\t\t\tsha1._length = hash._length;\n\t\t} else {\n\t\t\tsha1.reset();\n\t\t}\n\t}\n\n\t/**\n\t * Reset the hash state.\n\t * @return this\n\t */\n\treset() {\n\t\tconst sha1 = this;\n\t\tsha1._h = sha1._init.slice(0);\n\t\tsha1._buffer = [];\n\t\tsha1._length = 0;\n\t\treturn sha1;\n\t}\n\n\t/**\n\t * Input several words to the hash.\n\t * @param {bitArray|String} data the data to hash.\n\t * @return this\n\t */\n\tupdate(data) {\n\t\tconst sha1 = this;\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = codec.utf8String.toBits(data);\n\t\t}\n\t\tconst b = sha1._buffer = bitArray.concat(sha1._buffer, data);\n\t\tconst ol = sha1._length;\n\t\tconst nl = sha1._length = ol + bitArray.bitLength(data);\n\t\tif (nl > 9007199254740991) {\n\t\t\tthrow new Error(\"Cannot hash more than 2^53 - 1 bits\");\n\t\t}\n\t\tconst c = new Uint32Array(b);\n\t\tlet j = 0;\n\t\tfor (let i = sha1.blockSize + ol - ((sha1.blockSize + ol) & (sha1.blockSize - 1)); i <= nl;\n\t\t\ti += sha1.blockSize) {\n\t\t\tsha1._block(c.subarray(16 * j, 16 * (j + 1)));\n\t\t\tj += 1;\n\t\t}\n\t\tb.splice(0, 16 * j);\n\t\treturn sha1;\n\t}\n\n\t/**\n\t * Complete hashing and output the hash value.\n\t * @return {bitArray} The hash value, an array of 5 big-endian words. TODO\n\t */\n\tfinalize() {\n\t\tconst sha1 = this;\n\t\tlet b = sha1._buffer;\n\t\tconst h = sha1._h;\n\n\t\t// Round out and push the buffer\n\t\tb = bitArray.concat(b, [bitArray.partial(1, 1)]);\n\t\t// Round out the buffer to a multiple of 16 words, less the 2 length words.\n\t\tfor (let i = b.length + 2; i & 15; i++) {\n\t\t\tb.push(0);\n\t\t}\n\n\t\t// append the length\n\t\tb.push(Math.floor(sha1._length / 0x100000000));\n\t\tb.push(sha1._length | 0);\n\n\t\twhile (b.length) {\n\t\t\tsha1._block(b.splice(0, 16));\n\t\t}\n\n\t\tsha1.reset();\n\t\treturn h;\n\t}\n\n\t/**\n\t * The SHA-1 logical functions f(0), f(1), ..., f(79).\n\t * @private\n\t */\n\t_f(t, b, c, d) {\n\t\tif (t <= 19) {\n\t\t\treturn (b & c) | (~b & d);\n\t\t} else if (t <= 39) {\n\t\t\treturn b ^ c ^ d;\n\t\t} else if (t <= 59) {\n\t\t\treturn (b & c) | (b & d) | (c & d);\n\t\t} else if (t <= 79) {\n\t\t\treturn b ^ c ^ d;\n\t\t}\n\t}\n\n\t/**\n\t * Circular left-shift operator.\n\t * @private\n\t */\n\t_S(n, x) {\n\t\treturn (x << n) | (x >>> 32 - n);\n\t}\n\n\t/**\n\t * Perform one cycle of SHA-1.\n\t * @param {Uint32Array|bitArray} words one block of words.\n\t * @private\n\t */\n\t_block(words) {\n\t\tconst sha1 = this;\n\t\tconst h = sha1._h;\n\t\t// When words is passed to _block, it has 16 elements. SHA1 _block\n\t\t// function extends words with new elements (at the end there are 80 elements). \n\t\t// The problem is that if we use Uint32Array instead of Array, \n\t\t// the length of Uint32Array cannot be changed. Thus, we replace words with a \n\t\t// normal Array here.\n\t\tconst w = Array(80); // do not use Uint32Array here as the instantiation is slower\n\t\tfor (let j = 0; j < 16; j++) {\n\t\t\tw[j] = words[j];\n\t\t}\n\n\t\tlet a = h[0];\n\t\tlet b = h[1];\n\t\tlet c = h[2];\n\t\tlet d = h[3];\n\t\tlet e = h[4];\n\n\t\tfor (let t = 0; t <= 79; t++) {\n\t\t\tif (t >= 16) {\n\t\t\t\tw[t] = sha1._S(1, w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16]);\n\t\t\t}\n\t\t\tconst tmp = (sha1._S(5, a) + sha1._f(t, b, c, d) + e + w[t] +\n\t\t\t\tsha1._key[Math.floor(t / 20)]) | 0;\n\t\t\te = d;\n\t\t\td = c;\n\t\t\tc = sha1._S(30, b);\n\t\t\tb = a;\n\t\t\ta = tmp;\n\t\t}\n\n\t\th[0] = (h[0] + a) | 0;\n\t\th[1] = (h[1] + b) | 0;\n\t\th[2] = (h[2] + c) | 0;\n\t\th[3] = (h[3] + d) | 0;\n\t\th[4] = (h[4] + e) | 0;\n\t}\n};\n\n/** @fileOverview Low-level AES implementation.\n *\n * This file contains a low-level implementation of AES, optimized for\n * size and for efficiency on several browsers.  It is based on\n * OpenSSL's aes_core.c, a public-domain implementation by Vincent\n * Rijmen, Antoon Bosselaers and Paulo Barreto.\n *\n * An older version of this implementation is available in the public\n * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,\n * Stanford University 2008-2010 and BSD-licensed for liability\n * reasons.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\nconst cipher = {};\n\n/**\n * Schedule out an AES key for both encryption and decryption.  This\n * is a low-level class.  Use a cipher mode to do bulk encryption.\n *\n * @constructor\n * @param {Array} key The key as an array of 4, 6 or 8 words.\n */\ncipher.aes = class {\n\tconstructor(key) {\n\t\t/**\n\t\t * The expanded S-box and inverse S-box tables.  These will be computed\n\t\t * on the client so that we don't have to send them down the wire.\n\t\t *\n\t\t * There are two tables, _tables[0] is for encryption and\n\t\t * _tables[1] is for decryption.\n\t\t *\n\t\t * The first 4 sub-tables are the expanded S-box with MixColumns.  The\n\t\t * last (_tables[01][4]) is the S-box itself.\n\t\t *\n\t\t * @private\n\t\t */\n\t\tconst aes = this;\n\t\taes._tables = [[[], [], [], [], []], [[], [], [], [], []]];\n\n\t\tif (!aes._tables[0][0][0]) {\n\t\t\taes._precompute();\n\t\t}\n\n\t\tconst sbox = aes._tables[0][4];\n\t\tconst decTable = aes._tables[1];\n\t\tconst keyLen = key.length;\n\n\t\tlet i, encKey, decKey, rcon = 1;\n\n\t\tif (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n\t\t\tthrow new Error(\"invalid aes key size\");\n\t\t}\n\n\t\taes._key = [encKey = key.slice(0), decKey = []];\n\n\t\t// schedule encryption keys\n\t\tfor (i = keyLen; i < 4 * keyLen + 28; i++) {\n\t\t\tlet tmp = encKey[i - 1];\n\n\t\t\t// apply sbox\n\t\t\tif (i % keyLen === 0 || (keyLen === 8 && i % keyLen === 4)) {\n\t\t\t\ttmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255];\n\n\t\t\t\t// shift rows and add rcon\n\t\t\t\tif (i % keyLen === 0) {\n\t\t\t\t\ttmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n\t\t\t\t\trcon = rcon << 1 ^ (rcon >> 7) * 283;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tencKey[i] = encKey[i - keyLen] ^ tmp;\n\t\t}\n\n\t\t// schedule decryption keys\n\t\tfor (let j = 0; i; j++, i--) {\n\t\t\tconst tmp = encKey[j & 3 ? i : i - 4];\n\t\t\tif (i <= 4 || j < 4) {\n\t\t\t\tdecKey[j] = tmp;\n\t\t\t} else {\n\t\t\t\tdecKey[j] = decTable[0][sbox[tmp >>> 24]] ^\n\t\t\t\t\tdecTable[1][sbox[tmp >> 16 & 255]] ^\n\t\t\t\t\tdecTable[2][sbox[tmp >> 8 & 255]] ^\n\t\t\t\t\tdecTable[3][sbox[tmp & 255]];\n\t\t\t}\n\t\t}\n\t}\n\t// public\n\t/* Something like this might appear here eventually\n\tname: \"AES\",\n\tblockSize: 4,\n\tkeySizes: [4,6,8],\n\t*/\n\n\t/**\n\t * Encrypt an array of 4 big-endian words.\n\t * @param {Array} data The plaintext.\n\t * @return {Array} The ciphertext.\n\t */\n\tencrypt(data) {\n\t\treturn this._crypt(data, 0);\n\t}\n\n\t/**\n\t * Decrypt an array of 4 big-endian words.\n\t * @param {Array} data The ciphertext.\n\t * @return {Array} The plaintext.\n\t */\n\tdecrypt(data) {\n\t\treturn this._crypt(data, 1);\n\t}\n\n\t/**\n\t * Expand the S-box tables.\n\t *\n\t * @private\n\t */\n\t_precompute() {\n\t\tconst encTable = this._tables[0];\n\t\tconst decTable = this._tables[1];\n\t\tconst sbox = encTable[4];\n\t\tconst sboxInv = decTable[4];\n\t\tconst d = [];\n\t\tconst th = [];\n\t\tlet xInv, x2, x4, x8;\n\n\t\t// Compute double and third tables\n\t\tfor (let i = 0; i < 256; i++) {\n\t\t\tth[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n\t\t}\n\n\t\tfor (let x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n\t\t\t// Compute sbox\n\t\t\tlet s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n\t\t\ts = s >> 8 ^ s & 255 ^ 99;\n\t\t\tsbox[x] = s;\n\t\t\tsboxInv[s] = x;\n\n\t\t\t// Compute MixColumns\n\t\t\tx8 = d[x4 = d[x2 = d[x]]];\n\t\t\tlet tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n\t\t\tlet tEnc = d[s] * 0x101 ^ s * 0x1010100;\n\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\tencTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n\t\t\t\tdecTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n\t\t\t}\n\t\t}\n\n\t\t// Compactify.  Considerable speedup on Firefox.\n\t\tfor (let i = 0; i < 5; i++) {\n\t\t\tencTable[i] = encTable[i].slice(0);\n\t\t\tdecTable[i] = decTable[i].slice(0);\n\t\t}\n\t}\n\n\t/**\n\t * Encryption and decryption core.\n\t * @param {Array} input Four words to be encrypted or decrypted.\n\t * @param dir The direction, 0 for encrypt and 1 for decrypt.\n\t * @return {Array} The four encrypted or decrypted words.\n\t * @private\n\t */\n\t_crypt(input, dir) {\n\t\tif (input.length !== 4) {\n\t\t\tthrow new Error(\"invalid aes block size\");\n\t\t}\n\n\t\tconst key = this._key[dir];\n\n\t\tconst nInnerRounds = key.length / 4 - 2;\n\t\tconst out = [0, 0, 0, 0];\n\t\tconst table = this._tables[dir];\n\n\t\t// load up the tables\n\t\tconst t0 = table[0];\n\t\tconst t1 = table[1];\n\t\tconst t2 = table[2];\n\t\tconst t3 = table[3];\n\t\tconst sbox = table[4];\n\n\t\t// state variables a,b,c,d are loaded with pre-whitened data\n\t\tlet a = input[0] ^ key[0];\n\t\tlet b = input[dir ? 3 : 1] ^ key[1];\n\t\tlet c = input[2] ^ key[2];\n\t\tlet d = input[dir ? 1 : 3] ^ key[3];\n\t\tlet kIndex = 4;\n\t\tlet a2, b2, c2;\n\n\t\t// Inner rounds.  Cribbed from OpenSSL.\n\t\tfor (let i = 0; i < nInnerRounds; i++) {\n\t\t\ta2 = t0[a >>> 24] ^ t1[b >> 16 & 255] ^ t2[c >> 8 & 255] ^ t3[d & 255] ^ key[kIndex];\n\t\t\tb2 = t0[b >>> 24] ^ t1[c >> 16 & 255] ^ t2[d >> 8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];\n\t\t\tc2 = t0[c >>> 24] ^ t1[d >> 16 & 255] ^ t2[a >> 8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];\n\t\t\td = t0[d >>> 24] ^ t1[a >> 16 & 255] ^ t2[b >> 8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];\n\t\t\tkIndex += 4;\n\t\t\ta = a2; b = b2; c = c2;\n\t\t}\n\n\t\t// Last round.\n\t\tfor (let i = 0; i < 4; i++) {\n\t\t\tout[dir ? 3 & -i : i] =\n\t\t\t\tsbox[a >>> 24] << 24 ^\n\t\t\t\tsbox[b >> 16 & 255] << 16 ^\n\t\t\t\tsbox[c >> 8 & 255] << 8 ^\n\t\t\t\tsbox[d & 255] ^\n\t\t\t\tkey[kIndex++];\n\t\t\ta2 = a; a = b; b = c; c = d; d = a2;\n\t\t}\n\n\t\treturn out;\n\t}\n};\n\n/**\n * Random values\n * @namespace\n */\nconst random = {\n\t/** \n\t * Generate random words with pure js, cryptographically not as strong & safe as native implementation.\n\t * @param {TypedArray} typedArray The array to fill.\n\t * @return {TypedArray} The random values.\n\t */\n\tgetRandomValues(typedArray) {\n\t\tconst words = new Uint32Array(typedArray.buffer);\n\t\tconst r = (m_w) => {\n\t\t\tlet m_z = 0x3ade68b1;\n\t\t\tconst mask = 0xffffffff;\n\t\t\treturn function () {\n\t\t\t\tm_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t\t\t\tm_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t\t\t\tconst result = ((((m_z << 0x10) + m_w) & mask) / 0x100000000) + .5;\n\t\t\t\treturn result * (Math.random() > .5 ? 1 : -1);\n\t\t\t};\n\t\t};\n\t\tfor (let i = 0, rcache; i < typedArray.length; i += 4) {\n\t\t\tconst _r = r((rcache || Math.random()) * 0x100000000);\n\t\t\trcache = _r() * 0x3ade67b7;\n\t\t\twords[i / 4] = (_r() * 0x100000000) | 0;\n\t\t}\n\t\treturn typedArray;\n\t}\n};\n\n/** @fileOverview CTR mode implementation.\n *\n * Special thanks to Roy Nicholson for pointing out a bug in our\n * implementation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/** Brian Gladman's CTR Mode.\n* @constructor\n* @param {Object} _prf The aes instance to generate key.\n* @param {bitArray} _iv The iv for ctr mode, it must be 128 bits.\n*/\n\nconst mode = {};\n\n/**\n * Brian Gladman's CTR Mode.\n * @namespace\n */\nmode.ctrGladman = class {\n\tconstructor(prf, iv) {\n\t\tthis._prf = prf;\n\t\tthis._initIv = iv;\n\t\tthis._iv = iv;\n\t}\n\n\treset() {\n\t\tthis._iv = this._initIv;\n\t}\n\n\t/** Input some data to calculate.\n\t * @param {bitArray} data the data to process, it must be intergral multiple of 128 bits unless it's the last.\n\t */\n\tupdate(data) {\n\t\treturn this.calculate(this._prf, data, this._iv);\n\t}\n\n\tincWord(word) {\n\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tlet b1 = (word >> 16) & 0xff;\n\t\t\tlet b2 = (word >> 8) & 0xff;\n\t\t\tlet b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) { // overflow b1   \n\t\t\t\tb1 = 0;\n\t\t\t\tif (b2 === 0xff) {\n\t\t\t\t\tb2 = 0;\n\t\t\t\t\tif (b3 === 0xff) {\n\t\t\t\t\t\tb3 = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t++b3;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t++b2;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t} else {\n\t\t\tword += (0x01 << 24);\n\t\t}\n\t\treturn word;\n\t}\n\n\tincCounter(counter) {\n\t\tif ((counter[0] = this.incWord(counter[0])) === 0) {\n\t\t\t// encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\tcounter[1] = this.incWord(counter[1]);\n\t\t}\n\t}\n\n\tcalculate(prf, data, iv) {\n\t\tlet l;\n\t\tif (!(l = data.length)) {\n\t\t\treturn [];\n\t\t}\n\t\tconst bl = bitArray.bitLength(data);\n\t\tfor (let i = 0; i < l; i += 4) {\n\t\t\tthis.incCounter(iv);\n\t\t\tconst e = prf.encrypt(iv);\n\t\t\tdata[i] ^= e[0];\n\t\t\tdata[i + 1] ^= e[1];\n\t\t\tdata[i + 2] ^= e[2];\n\t\t\tdata[i + 3] ^= e[3];\n\t\t}\n\t\treturn bitArray.clamp(data, bl);\n\t}\n};\n\nconst misc = {\n\timportKey(password) {\n\t\treturn new misc.hmacSha1(codec.bytes.toBits(password));\n\t},\n\tpbkdf2(prf, salt, count, length) {\n\t\tcount = count || 10000;\n\t\tif (length < 0 || count < 0) {\n\t\t\tthrow new Error(\"invalid params to pbkdf2\");\n\t\t}\n\t\tconst byteLength = ((length >> 5) + 1) << 2;\n\t\tlet u, ui, i, j, k;\n\t\tconst arrayBuffer = new ArrayBuffer(byteLength);\n\t\tconst out = new DataView(arrayBuffer);\n\t\tlet outLength = 0;\n\t\tconst b = bitArray;\n\t\tsalt = codec.bytes.toBits(salt);\n\t\tfor (k = 1; outLength < (byteLength || 1); k++) {\n\t\t\tu = ui = prf.encrypt(b.concat(salt, [k]));\n\t\t\tfor (i = 1; i < count; i++) {\n\t\t\t\tui = prf.encrypt(ui);\n\t\t\t\tfor (j = 0; j < ui.length; j++) {\n\t\t\t\t\tu[j] ^= ui[j];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (i = 0; outLength < (byteLength || 1) && i < u.length; i++) {\n\t\t\t\tout.setInt32(outLength, u[i]);\n\t\t\t\toutLength += 4;\n\t\t\t}\n\t\t}\n\t\treturn arrayBuffer.slice(0, length / 8);\n\t}\n};\n\n/** @fileOverview HMAC implementation.\n *\n * @author Emily Stark\n * @author Mike Hamburg\n * @author Dan Boneh\n */\n\n/** HMAC with the specified hash function.\n * @constructor\n * @param {bitArray} key the key for HMAC.\n * @param {Object} [Hash=hash.sha1] The hash function to use.\n */\nmisc.hmacSha1 = class {\n\n\tconstructor(key) {\n\t\tconst hmac = this;\n\t\tconst Hash = hmac._hash = hash.sha1;\n\t\tconst exKey = [[], []];\n\t\thmac._baseHash = [new Hash(), new Hash()];\n\t\tconst bs = hmac._baseHash[0].blockSize / 32;\n\n\t\tif (key.length > bs) {\n\t\t\tkey = new Hash().update(key).finalize();\n\t\t}\n\n\t\tfor (let i = 0; i < bs; i++) {\n\t\t\texKey[0][i] = key[i] ^ 0x36363636;\n\t\t\texKey[1][i] = key[i] ^ 0x5C5C5C5C;\n\t\t}\n\n\t\thmac._baseHash[0].update(exKey[0]);\n\t\thmac._baseHash[1].update(exKey[1]);\n\t\thmac._resultHash = new Hash(hmac._baseHash[0]);\n\t}\n\treset() {\n\t\tconst hmac = this;\n\t\thmac._resultHash = new hmac._hash(hmac._baseHash[0]);\n\t\thmac._updated = false;\n\t}\n\n\tupdate(data) {\n\t\tconst hmac = this;\n\t\thmac._updated = true;\n\t\thmac._resultHash.update(data);\n\t}\n\n\tdigest() {\n\t\tconst hmac = this;\n\t\tconst w = hmac._resultHash.finalize();\n\t\tconst result = new (hmac._hash)(hmac._baseHash[1]).update(w).finalize();\n\n\t\thmac.reset();\n\n\t\treturn result;\n\t}\n\n\tencrypt(data) {\n\t\tif (!this._updated) {\n\t\t\tthis.update(data);\n\t\t\treturn this.digest(data);\n\t\t} else {\n\t\t\tthrow new Error(\"encrypt on already updated hmac called!\");\n\t\t}\n\t}\n};\n\nexport {\n\tcipher,\n\tcodec,\n\tmisc,\n\tmode,\n\trandom\n};","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global crypto */\n\nimport { FUNCTION_TYPE, UNDEFINED_TYPE } from \"../constants.js\";\nimport {\n\trandom\n} from \"./codecs/sjcl.js\";\n\nconst GET_RANDOM_VALUES_SUPPORTED = typeof crypto != UNDEFINED_TYPE && typeof crypto.getRandomValues == FUNCTION_TYPE;\n\nconst ERR_INVALID_PASSWORD = \"Invalid password\";\nconst ERR_INVALID_SIGNATURE = \"Invalid signature\";\nconst ERR_ABORT_CHECK_PASSWORD = \"zipjs-abort-check-password\";\n\nexport {\n\tgetRandomValues,\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_SIGNATURE,\n\tERR_ABORT_CHECK_PASSWORD\n};\n\nfunction getRandomValues(array) {\n\tif (GET_RANDOM_VALUES_SUPPORTED) {\n\t\treturn crypto.getRandomValues(array);\n\t} else {\n\t\treturn random.getRandomValues(array);\n\t}\n}","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global crypto, TransformStream */\n// deno-lint-ignore-file no-this-alias\n\nimport { UNDEFINED_VALUE, UNDEFINED_TYPE, FUNCTION_TYPE } from \"../constants.js\";\nimport { encodeText } from \"./../util/encode-text.js\";\nimport {\n\tcipher,\n\tcodec,\n\tmisc,\n\tmode\n} from \"./codecs/sjcl.js\";\nimport {\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_SIGNATURE,\n\tERR_ABORT_CHECK_PASSWORD,\n\tgetRandomValues\n} from \"./common-crypto.js\";\n\nconst BLOCK_LENGTH = 16;\nconst RAW_FORMAT = \"raw\";\nconst PBKDF2_ALGORITHM = { name: \"PBKDF2\" };\nconst HASH_ALGORITHM = { name: \"HMAC\" };\nconst HASH_FUNCTION = \"SHA-1\";\nconst BASE_KEY_ALGORITHM = Object.assign({ hash: HASH_ALGORITHM }, PBKDF2_ALGORITHM);\nconst DERIVED_BITS_ALGORITHM = Object.assign({ iterations: 1000, hash: { name: HASH_FUNCTION } }, PBKDF2_ALGORITHM);\nconst DERIVED_BITS_USAGE = [\"deriveBits\"];\nconst SALT_LENGTH = [8, 12, 16];\nconst KEY_LENGTH = [16, 24, 32];\nconst SIGNATURE_LENGTH = 10;\nconst COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];\n// deno-lint-ignore valid-typeof\nconst CRYPTO_API_SUPPORTED = typeof crypto != UNDEFINED_TYPE;\nconst subtle = CRYPTO_API_SUPPORTED && crypto.subtle;\nconst SUBTLE_API_SUPPORTED = CRYPTO_API_SUPPORTED && typeof subtle != UNDEFINED_TYPE;\nconst codecBytes = codec.bytes;\nconst Aes = cipher.aes;\nconst CtrGladman = mode.ctrGladman;\nconst HmacSha1 = misc.hmacSha1;\n\nlet IMPORT_KEY_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof subtle.importKey == FUNCTION_TYPE;\nlet DERIVE_BITS_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof subtle.deriveBits == FUNCTION_TYPE;\n\nclass AESDecryptionStream extends TransformStream {\n\n\tconstructor({ password, rawPassword, signed, encryptionStrength, checkPasswordOnly }) {\n\t\tsuper({\n\t\t\tstart() {\n\t\t\t\tObject.assign(this, {\n\t\t\t\t\tready: new Promise(resolve => this.resolveReady = resolve),\n\t\t\t\t\tpassword: encodePassword(password, rawPassword),\n\t\t\t\t\tsigned,\n\t\t\t\t\tstrength: encryptionStrength - 1,\n\t\t\t\t\tpending: new Uint8Array()\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync transform(chunk, controller) {\n\t\t\t\tconst aesCrypto = this;\n\t\t\t\tconst {\n\t\t\t\t\tpassword,\n\t\t\t\t\tstrength,\n\t\t\t\t\tresolveReady,\n\t\t\t\t\tready\n\t\t\t\t} = aesCrypto;\n\t\t\t\tif (password) {\n\t\t\t\t\tawait createDecryptionKeys(aesCrypto, strength, password, subarray(chunk, 0, SALT_LENGTH[strength] + 2));\n\t\t\t\t\tchunk = subarray(chunk, SALT_LENGTH[strength] + 2);\n\t\t\t\t\tif (checkPasswordOnly) {\n\t\t\t\t\t\tcontroller.error(new Error(ERR_ABORT_CHECK_PASSWORD));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolveReady();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tawait ready;\n\t\t\t\t}\n\t\t\t\tconst output = new Uint8Array(chunk.length - SIGNATURE_LENGTH - ((chunk.length - SIGNATURE_LENGTH) % BLOCK_LENGTH));\n\t\t\t\tcontroller.enqueue(append(aesCrypto, chunk, output, 0, SIGNATURE_LENGTH, true));\n\t\t\t},\n\t\t\tasync flush(controller) {\n\t\t\t\tconst {\n\t\t\t\t\tsigned,\n\t\t\t\t\tctr,\n\t\t\t\t\thmac,\n\t\t\t\t\tpending,\n\t\t\t\t\tready\n\t\t\t\t} = this;\n\t\t\t\tif (hmac && ctr) {\n\t\t\t\t\tawait ready;\n\t\t\t\t\tconst chunkToDecrypt = subarray(pending, 0, pending.length - SIGNATURE_LENGTH);\n\t\t\t\t\tconst originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);\n\t\t\t\t\tlet decryptedChunkArray = new Uint8Array();\n\t\t\t\t\tif (chunkToDecrypt.length) {\n\t\t\t\t\t\tconst encryptedChunk = toBits(codecBytes, chunkToDecrypt);\n\t\t\t\t\t\thmac.update(encryptedChunk);\n\t\t\t\t\t\tconst decryptedChunk = ctr.update(encryptedChunk);\n\t\t\t\t\t\tdecryptedChunkArray = fromBits(codecBytes, decryptedChunk);\n\t\t\t\t\t}\n\t\t\t\t\tif (signed) {\n\t\t\t\t\t\tconst signature = subarray(fromBits(codecBytes, hmac.digest()), 0, SIGNATURE_LENGTH);\n\t\t\t\t\t\tfor (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {\n\t\t\t\t\t\t\tif (signature[indexSignature] != originalSignature[indexSignature]) {\n\t\t\t\t\t\t\t\tthrow new Error(ERR_INVALID_SIGNATURE);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontroller.enqueue(decryptedChunkArray);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nclass AESEncryptionStream extends TransformStream {\n\n\tconstructor({ password, rawPassword, encryptionStrength }) {\n\t\t// deno-lint-ignore prefer-const\n\t\tlet stream;\n\t\tsuper({\n\t\t\tstart() {\n\t\t\t\tObject.assign(this, {\n\t\t\t\t\tready: new Promise(resolve => this.resolveReady = resolve),\n\t\t\t\t\tpassword: encodePassword(password, rawPassword),\n\t\t\t\t\tstrength: encryptionStrength - 1,\n\t\t\t\t\tpending: new Uint8Array()\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync transform(chunk, controller) {\n\t\t\t\tconst aesCrypto = this;\n\t\t\t\tconst {\n\t\t\t\t\tpassword,\n\t\t\t\t\tstrength,\n\t\t\t\t\tresolveReady,\n\t\t\t\t\tready\n\t\t\t\t} = aesCrypto;\n\t\t\t\tlet preamble = new Uint8Array();\n\t\t\t\tif (password) {\n\t\t\t\t\tpreamble = await createEncryptionKeys(aesCrypto, strength, password);\n\t\t\t\t\tresolveReady();\n\t\t\t\t} else {\n\t\t\t\t\tawait ready;\n\t\t\t\t}\n\t\t\t\tconst output = new Uint8Array(preamble.length + chunk.length - (chunk.length % BLOCK_LENGTH));\n\t\t\t\toutput.set(preamble, 0);\n\t\t\t\tcontroller.enqueue(append(aesCrypto, chunk, output, preamble.length, 0));\n\t\t\t},\n\t\t\tasync flush(controller) {\n\t\t\t\tconst {\n\t\t\t\t\tctr,\n\t\t\t\t\thmac,\n\t\t\t\t\tpending,\n\t\t\t\t\tready\n\t\t\t\t} = this;\n\t\t\t\tif (hmac && ctr) {\n\t\t\t\t\tawait ready;\n\t\t\t\t\tlet encryptedChunkArray = new Uint8Array();\n\t\t\t\t\tif (pending.length) {\n\t\t\t\t\t\tconst encryptedChunk = ctr.update(toBits(codecBytes, pending));\n\t\t\t\t\t\thmac.update(encryptedChunk);\n\t\t\t\t\t\tencryptedChunkArray = fromBits(codecBytes, encryptedChunk);\n\t\t\t\t\t}\n\t\t\t\t\tstream.signature = fromBits(codecBytes, hmac.digest()).slice(0, SIGNATURE_LENGTH);\n\t\t\t\t\tcontroller.enqueue(concat(encryptedChunkArray, stream.signature));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tstream = this;\n\t}\n}\n\nexport {\n\tAESDecryptionStream,\n\tAESEncryptionStream,\n\tERR_INVALID_PASSWORD\n};\n\nfunction append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {\n\tconst {\n\t\tctr,\n\t\thmac,\n\t\tpending\n\t} = aesCrypto;\n\tconst inputLength = input.length - paddingEnd;\n\tif (pending.length) {\n\t\tinput = concat(pending, input);\n\t\toutput = expand(output, inputLength - (inputLength % BLOCK_LENGTH));\n\t}\n\tlet offset;\n\tfor (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {\n\t\tconst inputChunk = toBits(codecBytes, subarray(input, offset, offset + BLOCK_LENGTH));\n\t\tif (verifySignature) {\n\t\t\thmac.update(inputChunk);\n\t\t}\n\t\tconst outputChunk = ctr.update(inputChunk);\n\t\tif (!verifySignature) {\n\t\t\thmac.update(outputChunk);\n\t\t}\n\t\toutput.set(fromBits(codecBytes, outputChunk), offset + paddingStart);\n\t}\n\taesCrypto.pending = subarray(input, offset);\n\treturn output;\n}\n\nasync function createDecryptionKeys(decrypt, strength, password, preamble) {\n\tconst passwordVerificationKey = await createKeys(decrypt, strength, password, subarray(preamble, 0, SALT_LENGTH[strength]));\n\tconst passwordVerification = subarray(preamble, SALT_LENGTH[strength]);\n\tif (passwordVerificationKey[0] != passwordVerification[0] || passwordVerificationKey[1] != passwordVerification[1]) {\n\t\tthrow new Error(ERR_INVALID_PASSWORD);\n\t}\n}\n\nasync function createEncryptionKeys(encrypt, strength, password) {\n\tconst salt = getRandomValues(new Uint8Array(SALT_LENGTH[strength]));\n\tconst passwordVerification = await createKeys(encrypt, strength, password, salt);\n\treturn concat(salt, passwordVerification);\n}\n\nasync function createKeys(aesCrypto, strength, password, salt) {\n\taesCrypto.password = null;\n\tconst baseKey = await importKey(RAW_FORMAT, password, BASE_KEY_ALGORITHM, false, DERIVED_BITS_USAGE);\n\tconst derivedBits = await deriveBits(Object.assign({ salt }, DERIVED_BITS_ALGORITHM), baseKey, 8 * ((KEY_LENGTH[strength] * 2) + 2));\n\tconst compositeKey = new Uint8Array(derivedBits);\n\tconst key = toBits(codecBytes, subarray(compositeKey, 0, KEY_LENGTH[strength]));\n\tconst authentication = toBits(codecBytes, subarray(compositeKey, KEY_LENGTH[strength], KEY_LENGTH[strength] * 2));\n\tconst passwordVerification = subarray(compositeKey, KEY_LENGTH[strength] * 2);\n\tObject.assign(aesCrypto, {\n\t\tkeys: {\n\t\t\tkey,\n\t\t\tauthentication,\n\t\t\tpasswordVerification\n\t\t},\n\t\tctr: new CtrGladman(new Aes(key), Array.from(COUNTER_DEFAULT_VALUE)),\n\t\thmac: new HmacSha1(authentication)\n\t});\n\treturn passwordVerification;\n}\n\nasync function importKey(format, password, algorithm, extractable, keyUsages) {\n\tif (IMPORT_KEY_SUPPORTED) {\n\t\ttry {\n\t\t\treturn await subtle.importKey(format, password, algorithm, extractable, keyUsages);\n\t\t} catch {\n\t\t\tIMPORT_KEY_SUPPORTED = false;\n\t\t\treturn misc.importKey(password);\n\t\t}\n\t} else {\n\t\treturn misc.importKey(password);\n\t}\n}\n\nasync function deriveBits(algorithm, baseKey, length) {\n\tif (DERIVE_BITS_SUPPORTED) {\n\t\ttry {\n\t\t\treturn await subtle.deriveBits(algorithm, baseKey, length);\n\t\t} catch {\n\t\t\tDERIVE_BITS_SUPPORTED = false;\n\t\t\treturn misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);\n\t\t}\n\t} else {\n\t\treturn misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);\n\t}\n}\n\nfunction encodePassword(password, rawPassword) {\n\tif (rawPassword === UNDEFINED_VALUE) {\n\t\treturn encodeText(password);\n\t} else {\n\t\treturn rawPassword;\n\t}\n}\n\nfunction concat(leftArray, rightArray) {\n\tlet array = leftArray;\n\tif (leftArray.length + rightArray.length) {\n\t\tarray = new Uint8Array(leftArray.length + rightArray.length);\n\t\tarray.set(leftArray, 0);\n\t\tarray.set(rightArray, leftArray.length);\n\t}\n\treturn array;\n}\n\nfunction expand(inputArray, length) {\n\tif (length && length > inputArray.length) {\n\t\tconst array = inputArray;\n\t\tinputArray = new Uint8Array(length);\n\t\tinputArray.set(array, 0);\n\t}\n\treturn inputArray;\n}\n\nfunction subarray(array, begin, end) {\n\treturn array.subarray(begin, end);\n}\n\nfunction fromBits(codecBytes, chunk) {\n\treturn codecBytes.fromBits(chunk);\n}\nfunction toBits(codecBytes, chunk) {\n\treturn codecBytes.toBits(chunk);\n}","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TransformStream */\n// deno-lint-ignore-file no-this-alias\n\nimport { Crc32 } from \"./codecs/crc32.js\";\nimport {\n\tERR_INVALID_PASSWORD,\n\tERR_ABORT_CHECK_PASSWORD,\n\tgetRandomValues\n} from \"./common-crypto.js\";\n\nconst HEADER_LENGTH = 12;\n\nclass ZipCryptoDecryptionStream extends TransformStream {\n\n\tconstructor({ password, passwordVerification, checkPasswordOnly }) {\n\t\tsuper({\n\t\t\tstart() {\n\t\t\t\tObject.assign(this, {\n\t\t\t\t\tpassword,\n\t\t\t\t\tpasswordVerification\n\t\t\t\t});\n\t\t\t\tcreateKeys(this, password);\n\t\t\t},\n\t\t\ttransform(chunk, controller) {\n\t\t\t\tconst zipCrypto = this;\n\t\t\t\tif (zipCrypto.password) {\n\t\t\t\t\tconst decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));\n\t\t\t\t\tzipCrypto.password = null;\n\t\t\t\t\tif (decryptedHeader.at(-1) != zipCrypto.passwordVerification) {\n\t\t\t\t\t\tthrow new Error(ERR_INVALID_PASSWORD);\n\t\t\t\t\t}\n\t\t\t\t\tchunk = chunk.subarray(HEADER_LENGTH);\n\t\t\t\t}\n\t\t\t\tif (checkPasswordOnly) {\n\t\t\t\t\tcontroller.error(new Error(ERR_ABORT_CHECK_PASSWORD));\n\t\t\t\t} else {\n\t\t\t\t\tcontroller.enqueue(decrypt(zipCrypto, chunk));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nclass ZipCryptoEncryptionStream extends TransformStream {\n\n\tconstructor({ password, passwordVerification }) {\n\t\tsuper({\n\t\t\tstart() {\n\t\t\t\tObject.assign(this, {\n\t\t\t\t\tpassword,\n\t\t\t\t\tpasswordVerification\n\t\t\t\t});\n\t\t\t\tcreateKeys(this, password);\n\t\t\t},\n\t\t\ttransform(chunk, controller) {\n\t\t\t\tconst zipCrypto = this;\n\t\t\t\tlet output;\n\t\t\t\tlet offset;\n\t\t\t\tif (zipCrypto.password) {\n\t\t\t\t\tzipCrypto.password = null;\n\t\t\t\t\tconst header = getRandomValues(new Uint8Array(HEADER_LENGTH));\n\t\t\t\t\theader[HEADER_LENGTH - 1] = zipCrypto.passwordVerification;\n\t\t\t\t\toutput = new Uint8Array(chunk.length + header.length);\n\t\t\t\t\toutput.set(encrypt(zipCrypto, header), 0);\n\t\t\t\t\toffset = HEADER_LENGTH;\n\t\t\t\t} else {\n\t\t\t\t\toutput = new Uint8Array(chunk.length);\n\t\t\t\t\toffset = 0;\n\t\t\t\t}\n\t\t\t\toutput.set(encrypt(zipCrypto, chunk), offset);\n\t\t\t\tcontroller.enqueue(output);\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport {\n\tZipCryptoDecryptionStream,\n\tZipCryptoEncryptionStream,\n\tERR_INVALID_PASSWORD\n};\n\nfunction decrypt(target, input) {\n\tconst output = new Uint8Array(input.length);\n\tfor (let index = 0; index < input.length; index++) {\n\t\toutput[index] = getByte(target) ^ input[index];\n\t\tupdateKeys(target, output[index]);\n\t}\n\treturn output;\n}\n\nfunction encrypt(target, input) {\n\tconst output = new Uint8Array(input.length);\n\tfor (let index = 0; index < input.length; index++) {\n\t\toutput[index] = getByte(target) ^ input[index];\n\t\tupdateKeys(target, input[index]);\n\t}\n\treturn output;\n}\n\nfunction createKeys(target, password) {\n\tconst keys = [0x12345678, 0x23456789, 0x34567890];\n\tObject.assign(target, {\n\t\tkeys,\n\t\tcrcKey0: new Crc32(keys[0]),\n\t\tcrcKey2: new Crc32(keys[2])\n\t});\n\tfor (let index = 0; index < password.length; index++) {\n\t\tupdateKeys(target, password.charCodeAt(index));\n\t}\n}\n\nfunction updateKeys(target, byte) {\n\tlet [key0, key1, key2] = target.keys;\n\ttarget.crcKey0.append([byte]);\n\tkey0 = ~target.crcKey0.get();\n\tkey1 = getInt32(Math.imul(getInt32(key1 + getInt8(key0)), 134775813) + 1);\n\ttarget.crcKey2.append([key1 >>> 24]);\n\tkey2 = ~target.crcKey2.get();\n\ttarget.keys = [key0, key1, key2];\n}\n\nfunction getByte(target) {\n\tconst temp = target.keys[2] | 2;\n\treturn getInt8(Math.imul(temp, (temp ^ 1)) >>> 8);\n}\n\nfunction getInt8(number) {\n\treturn number & 0xFF;\n}\n\nfunction getInt32(number) {\n\treturn number & 0xFFFFFFFF;\n}","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TransformStream */\n// deno-lint-ignore-file no-this-alias\n\nimport { Crc32Stream } from \"./crc32-stream.js\";\nimport {\n\tAESEncryptionStream,\n\tAESDecryptionStream\n} from \"./aes-crypto-stream.js\";\nimport {\n\tZipCryptoEncryptionStream,\n\tZipCryptoDecryptionStream\n} from \"./zip-crypto-stream.js\";\nimport {\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_SIGNATURE,\n\tERR_ABORT_CHECK_PASSWORD\n} from \"./common-crypto.js\";\n\nconst ERR_INVALID_UNCOMPRESSED_SIZE = \"Invalid uncompressed size\";\nconst FORMAT_DEFLATE_RAW = \"deflate-raw\";\nconst FORMAT_DEFLATE64_RAW = \"deflate64-raw\";\n\nclass DeflateStream extends TransformStream {\n\n\tconstructor(options, { chunkSize, CompressionStreamZlib, CompressionStream }) {\n\t\tsuper({});\n\t\tconst { compressed, encrypted, useCompressionStream, zipCrypto, signed, level } = options;\n\t\tconst stream = this;\n\t\tlet crc32Stream, encryptionStream;\n\t\tlet readable = super.readable;\n\t\tif ((!encrypted || zipCrypto) && signed) {\n\t\t\tcrc32Stream = new Crc32Stream();\n\t\t\treadable = pipeThrough(readable, crc32Stream);\n\t\t}\n\t\tif (compressed) {\n\t\t\treadable = pipeThroughCommpressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream, CompressionStreamZlib, CompressionStream);\n\t\t}\n\t\tif (encrypted) {\n\t\t\tif (zipCrypto) {\n\t\t\t\treadable = pipeThrough(readable, new ZipCryptoEncryptionStream(options));\n\t\t\t} else {\n\t\t\t\tencryptionStream = new AESEncryptionStream(options);\n\t\t\t\treadable = pipeThrough(readable, encryptionStream);\n\t\t\t}\n\t\t}\n\t\tsetReadable(stream, readable, () => {\n\t\t\tlet signature;\n\t\t\tif (encrypted && !zipCrypto) {\n\t\t\t\tsignature = encryptionStream.signature;\n\t\t\t}\n\t\t\tif ((!encrypted || zipCrypto) && signed) {\n\t\t\t\tsignature = new DataView(crc32Stream.value.buffer).getUint32(0);\n\t\t\t}\n\t\t\tstream.signature = signature;\n\t\t});\n\t}\n}\n\nclass InflateStream extends TransformStream {\n\n\tconstructor(options, { chunkSize, DecompressionStreamZlib, DecompressionStream }) {\n\t\tsuper({});\n\t\tconst { zipCrypto, encrypted, signed, signature, compressed, useCompressionStream, deflate64 } = options;\n\t\tlet crc32Stream, decryptionStream;\n\t\tlet readable = super.readable;\n\t\tif (encrypted) {\n\t\t\tif (zipCrypto) {\n\t\t\t\treadable = pipeThrough(readable, new ZipCryptoDecryptionStream(options));\n\t\t\t} else {\n\t\t\t\tdecryptionStream = new AESDecryptionStream(options);\n\t\t\t\treadable = pipeThrough(readable, decryptionStream);\n\t\t\t}\n\t\t}\n\t\tif (compressed) {\n\t\t\treadable = pipeThroughCommpressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamZlib, DecompressionStream);\n\t\t}\n\t\tif ((!encrypted || zipCrypto) && signed) {\n\t\t\tcrc32Stream = new Crc32Stream();\n\t\t\treadable = pipeThrough(readable, crc32Stream);\n\t\t}\n\t\tsetReadable(this, readable, () => {\n\t\t\tif ((!encrypted || zipCrypto) && signed) {\n\t\t\t\tconst dataViewSignature = new DataView(crc32Stream.value.buffer);\n\t\t\t\tif (signature != dataViewSignature.getUint32(0, false)) {\n\t\t\t\t\tthrow new Error(ERR_INVALID_SIGNATURE);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport {\n\tDeflateStream,\n\tInflateStream,\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_SIGNATURE,\n\tERR_INVALID_UNCOMPRESSED_SIZE,\n\tERR_ABORT_CHECK_PASSWORD\n};\n\nfunction setReadable(stream, readable, flush) {\n\treadable = pipeThrough(readable, new TransformStream({ flush }));\n\tObject.defineProperty(stream, \"readable\", {\n\t\tget() {\n\t\t\treturn readable;\n\t\t}\n\t});\n}\n\nfunction pipeThroughCommpressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamZlib, CompressionStream) {\n\tconst Stream = useCompressionStream && CompressionStreamNative ? CompressionStreamNative : CompressionStreamZlib || CompressionStream;\n\tconst format = options.deflate64 ? FORMAT_DEFLATE64_RAW : FORMAT_DEFLATE_RAW;\n\ttry {\n\t\treadable = pipeThrough(readable, new Stream(format, options));\n\t} catch (error) {\n\t\tif (useCompressionStream) {\n\t\t\tif (CompressionStreamZlib) {\n\t\t\t\treadable = pipeThrough(readable, new CompressionStreamZlib(format, options));\n\t\t\t} else if (CompressionStream) {\n\t\t\t\treadable = pipeThrough(readable, new CompressionStream(format, options));\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} else {\n\t\t\tthrow error;\n\t\t}\n\t}\n\treturn readable;\n}\n\nfunction pipeThrough(readable, transformStream) {\n\treturn readable.pipeThrough(transformStream);\n}","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc.\n * JZlib is based on zlib-1.1.3, so all credit should go authors\n * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)\n * and contributors of zlib.\n */\n\n/* global TransformStream */\n// deno-lint-ignore-file no-this-alias\n\nimport { UNDEFINED_VALUE } from \"../constants.js\";\nimport {\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_SIGNATURE,\n\tERR_INVALID_UNCOMPRESSED_SIZE,\n\tERR_ABORT_CHECK_PASSWORD,\n\tInflateStream,\n\tDeflateStream\n} from \"./zip-entry-stream.js\";\n\nconst MESSAGE_EVENT_TYPE = \"message\";\nconst MESSAGE_START = \"start\";\nconst MESSAGE_PULL = \"pull\";\nconst MESSAGE_DATA = \"data\";\nconst MESSAGE_ACK_DATA = \"ack\";\nconst MESSAGE_CLOSE = \"close\";\nconst CODEC_DEFLATE = \"deflate\";\nconst CODEC_INFLATE = \"inflate\";\n\nexport {\n\tCODEC_DEFLATE,\n\tCODEC_INFLATE,\n\tMESSAGE_EVENT_TYPE,\n\tMESSAGE_START,\n\tMESSAGE_PULL,\n\tMESSAGE_DATA,\n\tMESSAGE_ACK_DATA,\n\tMESSAGE_CLOSE,\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_SIGNATURE,\n\tERR_INVALID_UNCOMPRESSED_SIZE,\n\tERR_ABORT_CHECK_PASSWORD,\n\tCodecStream,\n\tChunkStream\n};\n\nclass CodecStream extends TransformStream {\n\n\tconstructor(options, config) {\n\t\tsuper({});\n\t\tconst codec = this;\n\t\tconst { codecType } = options;\n\t\tlet Stream;\n\t\tif (codecType.startsWith(CODEC_DEFLATE)) {\n\t\t\tStream = DeflateStream;\n\t\t} else if (codecType.startsWith(CODEC_INFLATE)) {\n\t\t\tStream = InflateStream;\n\t\t}\n\t\tcodec.outputSize = 0;\n\t\tlet inputSize = 0;\n\t\tconst stream = new Stream(options, config);\n\t\tconst readable = super.readable;\n\t\tconst inputSizeStream = new TransformStream({\n\t\t\ttransform(chunk, controller) {\n\t\t\t\tif (chunk && chunk.length) {\n\t\t\t\t\tinputSize += chunk.length;\n\t\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t\t}\n\t\t\t},\n\t\t\tflush() {\n\t\t\t\tObject.assign(codec, {\n\t\t\t\t\tinputSize\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tconst outputSizeStream = new TransformStream({\n\t\t\ttransform(chunk, controller) {\n\t\t\t\tif (chunk && chunk.length) {\n\t\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t\t\tcodec.outputSize += chunk.length;\n\t\t\t\t\tif (options.outputSize !== UNDEFINED_VALUE && codec.outputSize > options.outputSize) {\n\t\t\t\t\t\tthrow new Error(ERR_INVALID_UNCOMPRESSED_SIZE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tflush() {\n\t\t\t\tconst { signature } = stream;\n\t\t\t\tObject.assign(codec, {\n\t\t\t\t\tsignature,\n\t\t\t\t\tinputSize\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(codec, \"readable\", {\n\t\t\tget() {\n\t\t\t\treturn readable.pipeThrough(inputSizeStream).pipeThrough(stream).pipeThrough(outputSizeStream);\n\t\t\t}\n\t\t});\n\t}\n}\n\nclass ChunkStream extends TransformStream {\n\n\tconstructor(chunkSize) {\n\t\tlet pendingChunk;\n\t\tsuper({\n\t\t\ttransform,\n\t\t\tflush(controller) {\n\t\t\t\tif (pendingChunk && pendingChunk.length) {\n\t\t\t\t\tcontroller.enqueue(pendingChunk);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfunction transform(chunk, controller) {\n\t\t\tif (pendingChunk) {\n\t\t\t\tconst newChunk = new Uint8Array(pendingChunk.length + chunk.length);\n\t\t\t\tnewChunk.set(pendingChunk);\n\t\t\t\tnewChunk.set(chunk, pendingChunk.length);\n\t\t\t\tchunk = newChunk;\n\t\t\t\tpendingChunk = null;\n\t\t\t}\n\t\t\tif (chunk.length > chunkSize) {\n\t\t\t\tcontroller.enqueue(chunk.slice(0, chunkSize));\n\t\t\t\ttransform(chunk.slice(chunkSize), controller);\n\t\t\t} else {\n\t\t\t\tpendingChunk = chunk;\n\t\t\t}\n\t\t}\n\t}\n}","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global Worker, URL, TransformStream, WritableStream */\n\nimport {\n\tUNDEFINED_VALUE,\n\tUNDEFINED_TYPE,\n\tFUNCTION_TYPE\n} from \"./constants.js\";\nimport {\n\tCodecStream,\n\tChunkStream,\n\tMESSAGE_EVENT_TYPE,\n\tMESSAGE_START,\n\tMESSAGE_PULL,\n\tMESSAGE_DATA,\n\tMESSAGE_ACK_DATA,\n\tMESSAGE_CLOSE\n} from \"./streams/codec-stream.js\";\n\nconst MODULE_WORKER_OPTIONS = { type: \"module\" };\n\nlet webWorkerSupported, webWorkerURI, webWorkerOptions;\nlet transferStreamsSupported = true;\ntry {\n\ttransferStreamsSupported = typeof structuredClone == FUNCTION_TYPE && structuredClone(new DOMException(\"\", \"AbortError\")).code !== UNDEFINED_VALUE;\n} catch {\n\t// ignored\n}\nlet initModule = () => { };\n\nexport {\n\tCodecWorker,\n\tconfigureWorker\n};\n\nfunction configureWorker({ initModule: initModuleFunction }) {\n\tinitModule = initModuleFunction;\n}\n\nclass CodecWorker {\n\n\tconstructor(workerData, { readable, writable }, { options, config, streamOptions, useWebWorkers, transferStreams, workerURI }, onTaskFinished) {\n\t\tconst { signal } = streamOptions;\n\t\tObject.assign(workerData, {\n\t\t\tbusy: true,\n\t\t\treadable: readable\n\t\t\t\t.pipeThrough(new ChunkStream(config.chunkSize))\n\t\t\t\t.pipeThrough(new ProgressWatcherStream(streamOptions), { signal }),\n\t\t\twritable,\n\t\t\toptions: Object.assign({}, options),\n\t\t\tworkerURI,\n\t\t\ttransferStreams,\n\t\t\tterminate() {\n\t\t\t\treturn new Promise(resolve => {\n\t\t\t\t\tconst { worker, busy } = workerData;\n\t\t\t\t\tif (worker) {\n\t\t\t\t\t\tif (busy) {\n\t\t\t\t\t\t\tworkerData.resolveTerminated = resolve;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tworker.terminate();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tworkerData.interface = null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tonTaskFinished() {\n\t\t\t\tconst { resolveTerminated } = workerData;\n\t\t\t\tif (resolveTerminated) {\n\t\t\t\t\tworkerData.resolveTerminated = null;\n\t\t\t\t\tworkerData.terminated = true;\n\t\t\t\t\tworkerData.worker.terminate();\n\t\t\t\t\tresolveTerminated();\n\t\t\t\t}\n\t\t\t\tworkerData.busy = false;\n\t\t\t\tonTaskFinished(workerData);\n\t\t\t}\n\t\t});\n\t\tif (webWorkerSupported === UNDEFINED_VALUE) {\n\t\t\t// deno-lint-ignore valid-typeof\n\t\t\twebWorkerSupported = typeof Worker != UNDEFINED_TYPE;\n\t\t}\n\t\treturn (useWebWorkers && webWorkerSupported ? createWebWorkerInterface : createWorkerInterface)(workerData, config);\n\t}\n}\n\nclass ProgressWatcherStream extends TransformStream {\n\n\tconstructor({ onstart, onprogress, size, onend }) {\n\t\tlet chunkOffset = 0;\n\t\tsuper({\n\t\t\tasync start() {\n\t\t\t\tif (onstart) {\n\t\t\t\t\tawait callHandler(onstart, size);\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync transform(chunk, controller) {\n\t\t\t\tchunkOffset += chunk.length;\n\t\t\t\tif (onprogress) {\n\t\t\t\t\tawait callHandler(onprogress, chunkOffset, size);\n\t\t\t\t}\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t\tasync flush() {\n\t\t\t\tif (onend) {\n\t\t\t\t\tawait callHandler(onend, chunkOffset);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nasync function callHandler(handler, ...parameters) {\n\ttry {\n\t\tawait handler(...parameters);\n\t} catch {\n\t\t// ignored\n\t}\n}\n\nfunction createWorkerInterface(workerData, config) {\n\treturn {\n\t\trun: () => runWorker(workerData, config)\n\t};\n}\n\nfunction createWebWorkerInterface(workerData, config) {\n\tconst { baseURI, chunkSize } = config;\n\tlet { wasmURI } = config;\n\n\tif (!workerData.interface) {\n\t\t// deno-lint-ignore valid-typeof\n\t\tif (typeof wasmURI == FUNCTION_TYPE) {\n\t\t\twasmURI = wasmURI();\n\t\t}\n\t\tlet worker;\n\t\ttry {\n\t\t\tworker = getWebWorker(workerData.workerURI, baseURI, workerData);\n\t\t} catch {\n\t\t\twebWorkerSupported = false;\n\t\t\treturn createWorkerInterface(workerData, config);\n\t\t}\n\t\tObject.assign(workerData, {\n\t\t\tworker,\n\t\t\tinterface: {\n\t\t\t\trun: () => runWebWorker(workerData, { chunkSize, wasmURI, baseURI })\n\t\t\t}\n\t\t});\n\t}\n\treturn workerData.interface;\n}\n\nasync function runWorker({ options, readable, writable, onTaskFinished }, config) {\n\tlet codecStream;\n\ttry {\n\t\tif (!options.useCompressionStream) {\n\t\t\ttry {\n\t\t\t\tawait initModule(config);\n\t\t\t} catch {\n\t\t\t\toptions.useCompressionStream = true;\n\t\t\t}\n\t\t}\n\t\tcodecStream = new CodecStream(options, config);\n\t\tawait readable.pipeThrough(codecStream).pipeTo(writable, { preventClose: true, preventAbort: true });\n\t\tconst {\n\t\t\tsignature,\n\t\t\tinputSize,\n\t\t\toutputSize\n\t\t} = codecStream;\n\t\treturn {\n\t\t\tsignature,\n\t\t\tinputSize,\n\t\t\toutputSize\n\t\t};\n\t} catch (error) {\n\t\tif (codecStream) {\n\t\t\terror.outputSize = codecStream.outputSize;\n\t\t}\n\t\tthrow error;\n\t} finally {\n\t\tonTaskFinished();\n\t}\n}\n\nasync function runWebWorker(workerData, config) {\n\tlet resolveResult, rejectResult;\n\tconst result = new Promise((resolve, reject) => {\n\t\tresolveResult = resolve;\n\t\trejectResult = reject;\n\t});\n\tObject.assign(workerData, {\n\t\treader: null,\n\t\twriter: null,\n\t\tresolveResult,\n\t\trejectResult,\n\t\tresult\n\t});\n\tconst { readable, options } = workerData;\n\tconst { writable, closed } = watchClosedStream(workerData.writable);\n\tconst streamsTransferred = sendMessage({\n\t\ttype: MESSAGE_START,\n\t\toptions,\n\t\tconfig,\n\t\treadable,\n\t\twritable\n\t}, workerData);\n\tif (!streamsTransferred) {\n\t\tObject.assign(workerData, {\n\t\t\treader: readable.getReader(),\n\t\t\twriter: writable.getWriter()\n\t\t});\n\t}\n\tconst resultValue = await result;\n\tif (!streamsTransferred) {\n\t\tawait writable.getWriter().close();\n\t}\n\tawait closed;\n\treturn resultValue;\n}\n\nfunction watchClosedStream(writableSource) {\n\tconst { writable, readable } = new TransformStream();\n\tconst closed = readable.pipeTo(writableSource, { preventClose: true });\n\treturn { writable, closed };\n}\n\nfunction getWebWorker(url, baseURI, workerData, isModuleType, useBlobURI = true) {\n\tlet worker, resolvedURI, resolvedOptions;\n\tif (webWorkerURI === UNDEFINED_VALUE) {\n\t\t// deno-lint-ignore valid-typeof\n\t\tconst isFunctionURI = typeof url == FUNCTION_TYPE;\n\t\tif (isFunctionURI) {\n\t\t\tresolvedURI = url(useBlobURI);\n\t\t} else {\n\t\t\tresolvedURI = url;\n\t\t}\n\t\tconst isDataURI = resolvedURI.startsWith(\"data:\");\n\t\tconst isBlobURI = resolvedURI.startsWith(\"blob:\");\n\t\tif (isDataURI || isBlobURI) {\n\t\t\tif (isModuleType === UNDEFINED_VALUE) {\n\t\t\t\tisModuleType = false;\n\t\t\t}\n\t\t\tif (isModuleType) {\n\t\t\t\tresolvedOptions = MODULE_WORKER_OPTIONS;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tworker = new Worker(resolvedURI, resolvedOptions);\n\t\t\t} catch (error) {\n\t\t\t\tif (isBlobURI) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tURL.revokeObjectURL(resolvedURI);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// ignored\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isFunctionURI && isBlobURI) {\n\t\t\t\t\treturn getWebWorker(url, baseURI, workerData, isModuleType, false);\n\t\t\t\t} else if (!isModuleType) {\n\t\t\t\t\treturn getWebWorker(url, baseURI, workerData, true, false);\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (isModuleType === UNDEFINED_VALUE) {\n\t\t\t\tisModuleType = true;\n\t\t\t}\n\t\t\tif (isModuleType) {\n\t\t\t\tresolvedOptions = MODULE_WORKER_OPTIONS;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tresolvedURI = new URL(resolvedURI, baseURI);\n\t\t\t} catch {\n\t\t\t\t// ignored\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tworker = new Worker(resolvedURI, resolvedOptions);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isModuleType) {\n\t\t\t\t\treturn getWebWorker(url, baseURI, workerData, false, useBlobURI);\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twebWorkerURI = resolvedURI;\n\t\twebWorkerOptions = resolvedOptions;\n\t} else {\n\t\tworker = new Worker(webWorkerURI, webWorkerOptions);\n\t}\n\tworker.addEventListener(MESSAGE_EVENT_TYPE, event => onMessage(event, workerData));\n\treturn worker;\n}\n\nfunction sendMessage(message, { worker, writer, onTaskFinished, transferStreams }) {\n\ttry {\n\t\tconst { value, readable, writable } = message;\n\t\tconst transferables = [];\n\t\tif (value) {\n\t\t\tmessage.value = value;\n\t\t\ttransferables.push(message.value.buffer);\n\t\t}\n\t\tif (transferStreams && transferStreamsSupported) {\n\t\t\tif (readable) {\n\t\t\t\ttransferables.push(readable);\n\t\t\t}\n\t\t\tif (writable) {\n\t\t\t\ttransferables.push(writable);\n\t\t\t}\n\t\t} else {\n\t\t\tmessage.readable = message.writable = null;\n\t\t}\n\t\tif (transferables.length) {\n\t\t\ttry {\n\t\t\t\tworker.postMessage(message, transferables);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\ttransferStreamsSupported = false;\n\t\t\t\tmessage.readable = message.writable = null;\n\t\t\t\tworker.postMessage(message);\n\t\t\t}\n\t\t} else {\n\t\t\tworker.postMessage(message);\n\t\t}\n\t} catch (error) {\n\t\tif (writer) {\n\t\t\twriter.releaseLock();\n\t\t}\n\t\tonTaskFinished();\n\t\tthrow error;\n\t}\n}\n\nasync function onMessage({ data }, workerData) {\n\tconst { type, value, messageId, result, error } = data;\n\tconst { reader, writer, resolveResult, rejectResult, onTaskFinished } = workerData;\n\ttry {\n\t\tif (error) {\n\t\t\tconst { message, stack, code, name, outputSize } = error;\n\t\t\tconst responseError = new Error(message);\n\t\t\tObject.assign(responseError, { stack, code, name, outputSize });\n\t\t\tclose(responseError);\n\t\t} else {\n\t\t\tif (type == MESSAGE_PULL) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tsendMessage({ type: MESSAGE_DATA, value, done, messageId }, workerData);\n\t\t\t}\n\t\t\tif (type == MESSAGE_DATA) {\n\t\t\t\tawait writer.ready;\n\t\t\t\tawait writer.write(new Uint8Array(value));\n\t\t\t\tsendMessage({ type: MESSAGE_ACK_DATA, messageId }, workerData);\n\t\t\t}\n\t\t\tif (type == MESSAGE_CLOSE) {\n\t\t\t\tclose(null, result);\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tsendMessage({ type: MESSAGE_CLOSE, messageId }, workerData);\n\t\tclose(error);\n\t}\n\n\tfunction close(error, result) {\n\t\tif (error) {\n\t\t\trejectResult(error);\n\t\t} else {\n\t\t\tresolveResult(result);\n\t\t}\n\t\tif (writer) {\n\t\t\twriter.releaseLock();\n\t\t}\n\t\tonTaskFinished();\n\t}\n}","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global setTimeout, clearTimeout */\n\nimport { UNDEFINED_VALUE } from \"./constants.js\";\nimport {\n\tCODEC_INFLATE,\n\tCODEC_DEFLATE,\n\tERR_INVALID_SIGNATURE,\n\tERR_INVALID_UNCOMPRESSED_SIZE,\n\tERR_INVALID_PASSWORD,\n\tERR_ABORT_CHECK_PASSWORD\n} from \"./streams/codec-stream.js\";\nimport { CodecWorker } from \"./codec-worker.js\";\n\nlet pool = [];\nconst pendingRequests = [];\n\nexport {\n\trunWorker,\n\tterminateWorkers,\n\tCODEC_DEFLATE,\n\tCODEC_INFLATE,\n\tERR_INVALID_SIGNATURE,\n\tERR_INVALID_UNCOMPRESSED_SIZE,\n\tERR_INVALID_PASSWORD,\n\tERR_ABORT_CHECK_PASSWORD\n};\n\nlet indexWorker = 0;\n\nasync function runWorker(stream, workerOptions) {\n\tconst { options, config } = workerOptions;\n\tconst { transferStreams, useWebWorkers, useCompressionStream, compressed, signed, encrypted } = options;\n\tconst { workerURI, maxWorkers } = config;\n\tworkerOptions.transferStreams = transferStreams || transferStreams === UNDEFINED_VALUE;\n\tconst streamCopy = !compressed && !signed && !encrypted && !workerOptions.transferStreams;\n\tworkerOptions.useWebWorkers = !streamCopy && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));\n\tworkerOptions.workerURI = workerOptions.useWebWorkers && workerURI ? workerURI : UNDEFINED_VALUE;\n\toptions.useCompressionStream = useCompressionStream || (useCompressionStream === UNDEFINED_VALUE && config.useCompressionStream);\n\treturn (await getWorker()).run();\n\n\t// deno-lint-ignore require-await\n\tasync function getWorker() {\n\t\tconst workerData = pool.find(workerData => !workerData.busy);\n\t\tif (workerData) {\n\t\t\tclearTerminateTimeout(workerData);\n\t\t\treturn new CodecWorker(workerData, stream, workerOptions, onTaskFinished);\n\t\t} else if (pool.length < maxWorkers) {\n\t\t\tconst workerData = { indexWorker };\n\t\t\tindexWorker++;\n\t\t\tpool.push(workerData);\n\t\t\treturn new CodecWorker(workerData, stream, workerOptions, onTaskFinished);\n\t\t} else {\n\t\t\treturn new Promise(resolve => pendingRequests.push({ resolve, stream, workerOptions }));\n\t\t}\n\t}\n\n\tfunction onTaskFinished(workerData) {\n\t\tif (pendingRequests.length) {\n\t\t\tconst [{ resolve, stream, workerOptions }] = pendingRequests.splice(0, 1);\n\t\t\tresolve(new CodecWorker(workerData, stream, workerOptions, onTaskFinished));\n\t\t} else if (workerData.worker) {\n\t\t\tclearTerminateTimeout(workerData);\n\t\t\tterminateWorker(workerData, workerOptions);\n\t\t} else {\n\t\t\tpool = pool.filter(data => data != workerData);\n\t\t}\n\t}\n}\n\nfunction terminateWorker(workerData, workerOptions) {\n\tconst { config } = workerOptions;\n\tconst { terminateWorkerTimeout } = config;\n\tif (Number.isFinite(terminateWorkerTimeout) && terminateWorkerTimeout >= 0) {\n\t\tif (workerData.terminated) {\n\t\t\tworkerData.terminated = false;\n\t\t} else {\n\t\t\tworkerData.terminateTimeout = setTimeout(async () => {\n\t\t\t\tpool = pool.filter(data => data != workerData);\n\t\t\t\ttry {\n\t\t\t\t\tawait workerData.terminate();\n\t\t\t\t} catch {\n\t\t\t\t\t// ignored\n\t\t\t\t}\n\t\t\t}, terminateWorkerTimeout);\n\t\t}\n\t}\n}\n\nfunction clearTerminateTimeout(workerData) {\n\tconst { terminateTimeout } = workerData;\n\tif (terminateTimeout) {\n\t\tclearTimeout(terminateTimeout);\n\t\tworkerData.terminateTimeout = null;\n\t}\n}\n\nasync function terminateWorkers() {\n\tawait Promise.allSettled(pool.map(workerData => {\n\t\tclearTerminateTimeout(workerData);\n\t\treturn workerData.terminate();\n\t}));\n}","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global Blob, atob, btoa, XMLHttpRequest, URL, fetch, ReadableStream, WritableStream, FileReader, TransformStream, Response */\n// deno-lint-ignore-file no-this-alias\n\nimport {\n\tUNDEFINED_VALUE,\n\tINFINITY_VALUE,\n\tFUNCTION_TYPE,\n\tEND_OF_CENTRAL_DIR_LENGTH\n} from \"./constants.js\";\nimport { getConfiguration } from \"./configuration.js\";\n\nconst ERR_HTTP_STATUS = \"HTTP error \";\nconst ERR_HTTP_RANGE = \"HTTP Range not supported\";\nconst ERR_ITERATOR_COMPLETED_TOO_SOON = \"Writer iterator completed too soon\";\nconst ERR_WRITER_NOT_INITIALIZED = \"Writer not initialized\";\n\nconst CONTENT_TYPE_TEXT_PLAIN = \"text/plain\";\nconst HTTP_HEADER_CONTENT_LENGTH = \"Content-Length\";\nconst HTTP_HEADER_CONTENT_RANGE = \"Content-Range\";\nconst HTTP_HEADER_ACCEPT_RANGES = \"Accept-Ranges\";\nconst HTTP_HEADER_RANGE = \"Range\";\nconst HTTP_HEADER_CONTENT_TYPE = \"Content-Type\";\nconst HTTP_METHOD_HEAD = \"HEAD\";\nconst HTTP_METHOD_GET = \"GET\";\nconst HTTP_RANGE_UNIT = \"bytes\";\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\nconst DEFAULT_BUFFER_SIZE = 256 * 1024;\n\nconst PROPERTY_NAME_WRITABLE = \"writable\";\n\nclass Stream {\n\n\tconstructor() {\n\t\tthis.size = 0;\n\t}\n\n\tinit() {\n\t\tthis.initialized = true;\n\t}\n}\n\nclass Reader extends Stream {\n\n\tget readable() {\n\t\tconst reader = this;\n\t\tconst { chunkSize = DEFAULT_CHUNK_SIZE } = reader;\n\t\tconst readable = new ReadableStream({\n\t\t\tstart() {\n\t\t\t\tthis.chunkOffset = 0;\n\t\t\t},\n\t\t\tasync pull(controller) {\n\t\t\t\tconst { offset = 0, size, diskNumberStart } = readable;\n\t\t\t\tconst { chunkOffset } = this;\n\t\t\t\tconst dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);\n\t\t\t\tconst data = await readUint8Array(reader, offset + chunkOffset, dataSize, diskNumberStart);\n\t\t\t\tcontroller.enqueue(data);\n\t\t\t\tif ((chunkOffset + chunkSize > size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {\n\t\t\t\t\tcontroller.close();\n\t\t\t\t} else {\n\t\t\t\t\tthis.chunkOffset += chunkSize;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn readable;\n\t}\n}\n\nclass Writer extends Stream {\n\n\tconstructor() {\n\t\tsuper();\n\t\tconst writer = this;\n\t\tconst writable = new WritableStream({\n\t\t\twrite(chunk) {\n\t\t\t\tif (!writer.initialized) {\n\t\t\t\t\tthrow new Error(ERR_WRITER_NOT_INITIALIZED);\n\t\t\t\t}\n\t\t\t\treturn writer.writeUint8Array(chunk);\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(writer, PROPERTY_NAME_WRITABLE, {\n\t\t\tget() {\n\t\t\t\treturn writable;\n\t\t\t}\n\t\t});\n\t}\n\n\twriteUint8Array() {\n\t\t// abstract\n\t}\n}\n\nclass Data64URIReader extends Reader {\n\n\tconstructor(dataURI) {\n\t\tsuper();\n\t\tlet dataEnd = dataURI.length;\n\t\twhile (dataURI.charAt(dataEnd - 1) == \"=\") {\n\t\t\tdataEnd--;\n\t\t}\n\t\tconst dataStart = dataURI.indexOf(\",\") + 1;\n\t\tObject.assign(this, {\n\t\t\tdataURI,\n\t\t\tdataStart,\n\t\t\tsize: Math.floor((dataEnd - dataStart) * 0.75)\n\t\t});\n\t}\n\n\treadUint8Array(offset, length) {\n\t\tconst {\n\t\t\tdataStart,\n\t\t\tdataURI\n\t\t} = this;\n\t\tconst dataArray = new Uint8Array(length);\n\t\tconst start = Math.floor(offset / 3) * 4;\n\t\tconst bytes = atob(dataURI.substring(start + dataStart, Math.ceil((offset + length) / 3) * 4 + dataStart));\n\t\tconst delta = offset - Math.floor(start / 4) * 3;\n\t\tlet effectiveLength = 0;\n\t\tfor (let indexByte = delta; indexByte < delta + length && indexByte < bytes.length; indexByte++) {\n\t\t\tdataArray[indexByte - delta] = bytes.charCodeAt(indexByte);\n\t\t\teffectiveLength++;\n\t\t}\n\t\tif (effectiveLength < dataArray.length) {\n\t\t\treturn dataArray.subarray(0, effectiveLength);\n\t\t} else {\n\t\t\treturn dataArray;\n\t\t}\n\t}\n}\n\nclass Data64URIWriter extends Writer {\n\n\tconstructor(contentType) {\n\t\tsuper();\n\t\tObject.assign(this, {\n\t\t\tdata: \"data:\" + (contentType || \"\") + \";base64,\",\n\t\t\tpending: []\n\t\t});\n\t}\n\n\twriteUint8Array(array) {\n\t\tconst writer = this;\n\t\tlet indexArray = 0;\n\t\tlet dataString = writer.pending;\n\t\tconst delta = writer.pending.length;\n\t\twriter.pending = \"\";\n\t\tfor (indexArray = 0; indexArray < (Math.floor((delta + array.length) / 3) * 3) - delta; indexArray++) {\n\t\t\tdataString += String.fromCharCode(array[indexArray]);\n\t\t}\n\t\tfor (; indexArray < array.length; indexArray++) {\n\t\t\twriter.pending += String.fromCharCode(array[indexArray]);\n\t\t}\n\t\tif (dataString.length) {\n\t\t\tif (dataString.length > 2) {\n\t\t\t\twriter.data += btoa(dataString);\n\t\t\t} else {\n\t\t\t\twriter.pending += dataString;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetData() {\n\t\treturn this.data + btoa(this.pending);\n\t}\n}\n\nclass BlobReader extends Reader {\n\n\tconstructor(blob) {\n\t\tsuper();\n\t\tObject.assign(this, {\n\t\t\tblob,\n\t\t\tsize: blob.size\n\t\t});\n\t}\n\n\tasync readUint8Array(offset, length) {\n\t\tconst reader = this;\n\t\tconst offsetEnd = offset + length;\n\t\tconst blob = offset || offsetEnd < reader.size ? reader.blob.slice(offset, offsetEnd) : reader.blob;\n\t\tlet arrayBuffer = await blob.arrayBuffer();\n\t\tif (arrayBuffer.byteLength > length) {\n\t\t\tarrayBuffer = arrayBuffer.slice(offset, offsetEnd);\n\t\t}\n\t\treturn new Uint8Array(arrayBuffer);\n\t}\n}\n\nclass BlobWriter extends Stream {\n\n\tconstructor(contentType) {\n\t\tsuper();\n\t\tconst writer = this;\n\t\tconst transformStream = new TransformStream();\n\t\tconst headers = [];\n\t\tif (contentType) {\n\t\t\theaders.push([HTTP_HEADER_CONTENT_TYPE, contentType]);\n\t\t}\n\t\tObject.defineProperty(writer, PROPERTY_NAME_WRITABLE, {\n\t\t\tget() {\n\t\t\t\treturn transformStream.writable;\n\t\t\t}\n\t\t});\n\t\twriter.blob = new Response(transformStream.readable, { headers }).blob();\n\t}\n\n\tgetData() {\n\t\treturn this.blob;\n\t}\n}\n\nclass TextReader extends BlobReader {\n\n\tconstructor(text) {\n\t\tsuper(new Blob([text], { type: CONTENT_TYPE_TEXT_PLAIN }));\n\t}\n}\n\nclass TextWriter extends BlobWriter {\n\n\tconstructor(encoding) {\n\t\tsuper(encoding);\n\t\tObject.assign(this, {\n\t\t\tencoding,\n\t\t\tutf8: !encoding || encoding.toLowerCase() == \"utf-8\"\n\t\t});\n\t}\n\n\tasync getData() {\n\t\tconst {\n\t\t\tencoding,\n\t\t\tutf8\n\t\t} = this;\n\t\tconst blob = await super.getData();\n\t\tif (blob.text && utf8) {\n\t\t\treturn blob.text();\n\t\t} else {\n\t\t\tconst reader = new FileReader();\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tObject.assign(reader, {\n\t\t\t\t\tonload: ({ target }) => resolve(target.result),\n\t\t\t\t\tonerror: () => reject(reader.error)\n\t\t\t\t});\n\t\t\t\treader.readAsText(blob, encoding);\n\t\t\t});\n\t\t}\n\t}\n}\n\nclass FetchReader extends Reader {\n\n\tconstructor(url, options) {\n\t\tsuper();\n\t\tcreateHttpReader(this, url, options);\n\t}\n\n\tasync init() {\n\t\tawait initHttpReader(this, sendFetchRequest, getFetchRequestData);\n\t\tsuper.init();\n\t}\n\n\treadUint8Array(index, length) {\n\t\treturn readUint8ArrayHttpReader(this, index, length, sendFetchRequest, getFetchRequestData);\n\t}\n}\n\nclass XHRReader extends Reader {\n\n\tconstructor(url, options) {\n\t\tsuper();\n\t\tcreateHttpReader(this, url, options);\n\t}\n\n\tasync init() {\n\t\tawait initHttpReader(this, sendXMLHttpRequest, getXMLHttpRequestData);\n\t\tsuper.init();\n\t}\n\n\treadUint8Array(index, length) {\n\t\treturn readUint8ArrayHttpReader(this, index, length, sendXMLHttpRequest, getXMLHttpRequestData);\n\t}\n}\n\nfunction createHttpReader(httpReader, url, options) {\n\tconst {\n\t\tpreventHeadRequest,\n\t\tuseRangeHeader,\n\t\tforceRangeRequests,\n\t\tcombineSizeEocd\n\t} = options;\n\toptions = Object.assign({}, options);\n\tdelete options.preventHeadRequest;\n\tdelete options.useRangeHeader;\n\tdelete options.forceRangeRequests;\n\tdelete options.combineSizeEocd;\n\tdelete options.useXHR;\n\tObject.assign(httpReader, {\n\t\turl,\n\t\toptions,\n\t\tpreventHeadRequest,\n\t\tuseRangeHeader,\n\t\tforceRangeRequests,\n\t\tcombineSizeEocd\n\t});\n}\n\nasync function initHttpReader(httpReader, sendRequest, getRequestData) {\n\tconst {\n\t\turl,\n\t\tpreventHeadRequest,\n\t\tuseRangeHeader,\n\t\tforceRangeRequests,\n\t\tcombineSizeEocd\n\t} = httpReader;\n\tif (isHttpFamily(url) && (useRangeHeader || forceRangeRequests) && (typeof preventHeadRequest == \"undefined\" || preventHeadRequest)) {\n\t\tconst response = await sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, combineSizeEocd ? -END_OF_CENTRAL_DIR_LENGTH : undefined));\n\t\tconst acceptRanges = response.headers.get(HTTP_HEADER_ACCEPT_RANGES);\n\t\tif (!forceRangeRequests && (!acceptRanges || acceptRanges.toLowerCase() != HTTP_RANGE_UNIT)) {\n\t\t\tthrow new Error(ERR_HTTP_RANGE);\n\t\t} else {\n\t\t\tif (combineSizeEocd) {\n\t\t\t\thttpReader.eocdCache = new Uint8Array(await response.arrayBuffer());\n\t\t\t}\n\t\t\tlet contentSize;\n\t\t\tconst contentRangeHeader = response.headers.get(HTTP_HEADER_CONTENT_RANGE);\n\t\t\tif (contentRangeHeader) {\n\t\t\t\tconst splitHeader = contentRangeHeader.trim().split(/\\s*\\/\\s*/);\n\t\t\t\tif (splitHeader.length) {\n\t\t\t\t\tconst headerValue = splitHeader[1];\n\t\t\t\t\tif (headerValue && headerValue != \"*\") {\n\t\t\t\t\t\tcontentSize = Number(headerValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (contentSize === UNDEFINED_VALUE) {\n\t\t\t\tawait getContentLength(httpReader, sendRequest, getRequestData);\n\t\t\t} else {\n\t\t\t\thttpReader.size = contentSize;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tawait getContentLength(httpReader, sendRequest, getRequestData);\n\t}\n}\n\nasync function readUint8ArrayHttpReader(httpReader, index, length, sendRequest, getRequestData) {\n\tconst {\n\t\tuseRangeHeader,\n\t\tforceRangeRequests,\n\t\teocdCache,\n\t\tsize,\n\t\toptions\n\t} = httpReader;\n\tif (useRangeHeader || forceRangeRequests) {\n\t\tif (eocdCache && index == size - END_OF_CENTRAL_DIR_LENGTH && length == END_OF_CENTRAL_DIR_LENGTH) {\n\t\t\treturn eocdCache;\n\t\t}\n\t\tif (index >= size) {\n\t\t\treturn new Uint8Array();\n\t\t} else {\n\t\t\tif (index + length > size) {\n\t\t\t\tlength = size - index;\n\t\t\t}\n\t\t\tconst response = await sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, index, length));\n\t\t\tif (response.status != 206) {\n\t\t\t\tthrow new Error(ERR_HTTP_RANGE);\n\t\t\t}\n\t\t\treturn new Uint8Array(await response.arrayBuffer());\n\t\t}\n\t} else {\n\t\tconst { data } = httpReader;\n\t\tif (!data) {\n\t\t\tawait getRequestData(httpReader, options);\n\t\t}\n\t\treturn new Uint8Array(httpReader.data.subarray(index, index + length));\n\t}\n}\n\nfunction getRangeHeaders(httpReader, index = 0, length = 1) {\n\treturn Object.assign({}, getHeaders(httpReader), { [HTTP_HEADER_RANGE]: HTTP_RANGE_UNIT + \"=\" + (index < 0 ? index : index + \"-\" + (index + length - 1)) });\n}\n\nfunction getHeaders({ options }) {\n\tconst { headers } = options;\n\tif (headers) {\n\t\tif (Symbol.iterator in headers) {\n\t\t\treturn Object.fromEntries(headers);\n\t\t} else {\n\t\t\treturn headers;\n\t\t}\n\t}\n}\n\nasync function getFetchRequestData(httpReader) {\n\tawait getRequestData(httpReader, sendFetchRequest);\n}\n\nasync function getXMLHttpRequestData(httpReader) {\n\tawait getRequestData(httpReader, sendXMLHttpRequest);\n}\n\nasync function getRequestData(httpReader, sendRequest) {\n\tconst response = await sendRequest(HTTP_METHOD_GET, httpReader, getHeaders(httpReader));\n\thttpReader.data = new Uint8Array(await response.arrayBuffer());\n\tif (!httpReader.size) {\n\t\thttpReader.size = httpReader.data.length;\n\t}\n}\n\nasync function getContentLength(httpReader, sendRequest, getRequestData) {\n\tif (httpReader.preventHeadRequest) {\n\t\tawait getRequestData(httpReader, httpReader.options);\n\t} else {\n\t\tconst response = await sendRequest(HTTP_METHOD_HEAD, httpReader, getHeaders(httpReader));\n\t\tconst contentLength = response.headers.get(HTTP_HEADER_CONTENT_LENGTH);\n\t\tif (contentLength) {\n\t\t\thttpReader.size = Number(contentLength);\n\t\t} else {\n\t\t\tawait getRequestData(httpReader, httpReader.options);\n\t\t}\n\t}\n}\n\nasync function sendFetchRequest(method, { options, url }, headers) {\n\tconst response = await fetch(url, Object.assign({}, options, { method, headers }));\n\tif (response.status < 400) {\n\t\treturn response;\n\t} else {\n\t\tthrow response.status == 416 ? new Error(ERR_HTTP_RANGE) : new Error(ERR_HTTP_STATUS + (response.statusText || response.status));\n\t}\n}\n\nfunction sendXMLHttpRequest(method, { url }, headers) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst request = new XMLHttpRequest();\n\t\trequest.addEventListener(\"load\", () => {\n\t\t\tif (request.status < 400) {\n\t\t\t\tconst headers = [];\n\t\t\t\trequest.getAllResponseHeaders().trim().split(/[\\r\\n]+/).forEach(header => {\n\t\t\t\t\tconst splitHeader = header.trim().split(/\\s*:\\s*/);\n\t\t\t\t\tsplitHeader[0] = splitHeader[0].trim().replace(/^[a-z]|-[a-z]/g, value => value.toUpperCase());\n\t\t\t\t\theaders.push(splitHeader);\n\t\t\t\t});\n\t\t\t\tresolve({\n\t\t\t\t\tstatus: request.status,\n\t\t\t\t\tarrayBuffer: () => request.response,\n\t\t\t\t\theaders: new Map(headers)\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject(request.status == 416 ? new Error(ERR_HTTP_RANGE) : new Error(ERR_HTTP_STATUS + (request.statusText || request.status)));\n\t\t\t}\n\t\t}, false);\n\t\trequest.addEventListener(\"error\", event => reject(event.detail ? event.detail.error : new Error(\"Network error\")), false);\n\t\trequest.open(method, url);\n\t\tif (headers) {\n\t\t\tfor (const entry of Object.entries(headers)) {\n\t\t\t\trequest.setRequestHeader(entry[0], entry[1]);\n\t\t\t}\n\t\t}\n\t\trequest.responseType = \"arraybuffer\";\n\t\trequest.send();\n\t});\n}\n\nclass HttpReader extends Reader {\n\n\tconstructor(url, options = {}) {\n\t\tsuper();\n\t\tObject.assign(this, {\n\t\t\turl,\n\t\t\treader: options.useXHR ? new XHRReader(url, options) : new FetchReader(url, options)\n\t\t});\n\t}\n\n\tset size(value) {\n\t\t// ignored\n\t}\n\n\tget size() {\n\t\treturn this.reader.size;\n\t}\n\n\tasync init() {\n\t\tawait this.reader.init();\n\t\tsuper.init();\n\t}\n\n\treadUint8Array(index, length) {\n\t\treturn this.reader.readUint8Array(index, length);\n\t}\n}\n\nclass HttpRangeReader extends HttpReader {\n\n\tconstructor(url, options = {}) {\n\t\toptions.useRangeHeader = true;\n\t\tsuper(url, options);\n\t}\n}\n\n\nclass Uint8ArrayReader extends Reader {\n\n\tconstructor(array) {\n\t\tsuper();\n\t\tarray = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n\t\tObject.assign(this, {\n\t\t\tarray,\n\t\t\tsize: array.length\n\t\t});\n\t}\n\n\treadUint8Array(index, length) {\n\t\treturn this.array.slice(index, index + length);\n\t}\n}\n\nclass Uint8ArrayWriter extends Writer {\n\n\tconstructor(defaultBufferSize) {\n\t\tsuper();\n\t\tthis.defaultBufferSize = defaultBufferSize || DEFAULT_BUFFER_SIZE;\n\t}\n\n\tinit(initSize = 0) {\n\t\tObject.assign(this, {\n\t\t\toffset: 0,\n\t\t\tarray: new Uint8Array(initSize > 0 ? initSize : this.defaultBufferSize)\n\t\t});\n\t\tsuper.init();\n\t}\n\n\twriteUint8Array(array) {\n\t\tconst writer = this;\n\t\tconst requiredLength = writer.offset + array.length;\n\t\tif (requiredLength > writer.array.length) {\n\t\t\tlet newLength = writer.array.length ? writer.array.length * 2 : writer.defaultBufferSize;\n\t\t\twhile (newLength < requiredLength) {\n\t\t\t\tnewLength *= 2;\n\t\t\t}\n\t\t\tconst previousArray = writer.array;\n\t\t\twriter.array = new Uint8Array(newLength);\n\t\t\twriter.array.set(previousArray);\n\t\t}\n\t\twriter.array.set(array, writer.offset);\n\t\twriter.offset += array.length;\n\t}\n\n\tgetData() {\n\t\tif (this.offset === this.array.length) {\n\t\t\treturn this.array;\n\t\t} else {\n\t\t\treturn this.array.slice(0, this.offset);\n\t\t}\n\t}\n}\n\nclass SplitDataReader extends Reader {\n\n\tconstructor(readers) {\n\t\tsuper();\n\t\tthis.readers = readers;\n\t}\n\n\tasync init() {\n\t\tconst reader = this;\n\t\tconst { readers } = reader;\n\t\treader.lastDiskNumber = 0;\n\t\treader.lastDiskOffset = 0;\n\t\tawait Promise.all(readers.map(async (diskReader, indexDiskReader) => {\n\t\t\tawait diskReader.init();\n\t\t\tif (indexDiskReader != readers.length - 1) {\n\t\t\t\treader.lastDiskOffset += diskReader.size;\n\t\t\t}\n\t\t\treader.size += diskReader.size;\n\t\t}));\n\t\tsuper.init();\n\t}\n\n\tasync readUint8Array(offset, length, diskNumber = 0) {\n\t\tconst reader = this;\n\t\tconst { readers } = this;\n\t\tlet result;\n\t\tlet currentDiskNumber = diskNumber;\n\t\tif (currentDiskNumber == -1) {\n\t\t\tcurrentDiskNumber = readers.length - 1;\n\t\t}\n\t\tlet currentReaderOffset = offset;\n\t\twhile (readers[currentDiskNumber] && currentReaderOffset >= readers[currentDiskNumber].size) {\n\t\t\tcurrentReaderOffset -= readers[currentDiskNumber].size;\n\t\t\tcurrentDiskNumber++;\n\t\t}\n\t\tconst currentReader = readers[currentDiskNumber];\n\t\tif (currentReader) {\n\t\t\tconst currentReaderSize = currentReader.size;\n\t\t\tif (currentReaderOffset + length <= currentReaderSize) {\n\t\t\t\tresult = await readUint8Array(currentReader, currentReaderOffset, length);\n\t\t\t} else {\n\t\t\t\tconst chunkLength = currentReaderSize - currentReaderOffset;\n\t\t\t\tresult = new Uint8Array(length);\n\t\t\t\tconst firstPart = await readUint8Array(currentReader, currentReaderOffset, chunkLength);\n\t\t\t\tresult.set(firstPart, 0);\n\t\t\t\tconst secondPart = await reader.readUint8Array(offset + chunkLength, length - chunkLength, diskNumber);\n\t\t\t\tresult.set(secondPart, chunkLength);\n\t\t\t\tif (firstPart.length + secondPart.length < length) {\n\t\t\t\t\tresult = result.subarray(0, firstPart.length + secondPart.length);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tresult = new Uint8Array();\n\t\t}\n\t\treader.lastDiskNumber = Math.max(currentDiskNumber, reader.lastDiskNumber);\n\t\treturn result;\n\t}\n}\n\nclass SplitDataWriter extends Stream {\n\n\tconstructor(writerGenerator, maxSize = 4294967295) {\n\t\tsuper();\n\t\tconst writer = this;\n\t\tObject.assign(writer, {\n\t\t\tdiskNumber: 0,\n\t\t\tdiskOffset: 0,\n\t\t\tsize: 0,\n\t\t\tmaxSize,\n\t\t\tavailableSize: maxSize\n\t\t});\n\t\tlet diskSourceWriter, diskWritable, diskWriter;\n\t\tconst writable = new WritableStream({\n\t\t\tasync write(chunk) {\n\t\t\t\tconst { availableSize } = writer;\n\t\t\t\tif (!diskWriter) {\n\t\t\t\t\tconst { value, done } = await writerGenerator.next();\n\t\t\t\t\tif (done && !value) {\n\t\t\t\t\t\tthrow new Error(ERR_ITERATOR_COMPLETED_TOO_SOON);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiskSourceWriter = value;\n\t\t\t\t\t\tdiskSourceWriter.size = 0;\n\t\t\t\t\t\tif (diskSourceWriter.maxSize) {\n\t\t\t\t\t\t\twriter.maxSize = diskSourceWriter.maxSize;\n\t\t\t\t\t\t}\n\t\t\t\t\t\twriter.availableSize = writer.maxSize;\n\t\t\t\t\t\tawait initStream(diskSourceWriter);\n\t\t\t\t\t\tdiskWritable = value.writable;\n\t\t\t\t\t\tdiskWriter = diskWritable.getWriter();\n\t\t\t\t\t}\n\t\t\t\t\tawait this.write(chunk);\n\t\t\t\t} else if (chunk.length >= availableSize) {\n\t\t\t\t\tawait writeChunk(chunk.subarray(0, availableSize));\n\t\t\t\t\tawait closeDisk();\n\t\t\t\t\twriter.diskOffset += diskSourceWriter.size;\n\t\t\t\t\twriter.diskNumber++;\n\t\t\t\t\tdiskWriter = null;\n\t\t\t\t\tawait this.write(chunk.subarray(availableSize));\n\t\t\t\t} else {\n\t\t\t\t\tawait writeChunk(chunk);\n\t\t\t\t}\n\t\t\t},\n\t\t\tasync close() {\n\t\t\t\tawait diskWriter.ready;\n\t\t\t\tawait closeDisk();\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(writer, PROPERTY_NAME_WRITABLE, {\n\t\t\tget() {\n\t\t\t\treturn writable;\n\t\t\t}\n\t\t});\n\n\t\tasync function writeChunk(chunk) {\n\t\t\tconst chunkLength = chunk.length;\n\t\t\tif (chunkLength) {\n\t\t\t\tawait diskWriter.ready;\n\t\t\t\tawait diskWriter.write(chunk);\n\t\t\t\tdiskSourceWriter.size += chunkLength;\n\t\t\t\twriter.size += chunkLength;\n\t\t\t\twriter.availableSize -= chunkLength;\n\t\t\t}\n\t\t}\n\n\t\tasync function closeDisk() {\n\t\t\tawait diskWriter.close();\n\t\t}\n\t}\n}\n\nclass GenericReader {\n\n\tconstructor(reader) {\n\t\tif (Array.isArray(reader)) {\n\t\t\treader = new SplitDataReader(reader);\n\t\t}\n\t\tif (reader instanceof ReadableStream) {\n\t\t\treader = {\n\t\t\t\treadable: reader\n\t\t\t};\n\t\t}\n\t\treturn reader;\n\t}\n}\n\nclass GenericWriter {\n\n\tconstructor(writer) {\n\t\tif (writer.writable === UNDEFINED_VALUE && typeof writer.next == FUNCTION_TYPE) {\n\t\t\twriter = new SplitDataWriter(writer);\n\t\t}\n\t\tif (writer instanceof WritableStream) {\n\t\t\twriter = {\n\t\t\t\twritable: writer\n\t\t\t};\n\t\t}\n\t\tif (writer.size === UNDEFINED_VALUE) {\n\t\t\twriter.size = 0;\n\t\t}\n\t\tif (!(writer instanceof SplitDataWriter)) {\n\t\t\tObject.assign(writer, {\n\t\t\t\tdiskNumber: 0,\n\t\t\t\tdiskOffset: 0,\n\t\t\t\tavailableSize: INFINITY_VALUE,\n\t\t\t\tmaxSize: INFINITY_VALUE\n\t\t\t});\n\t\t}\n\t\treturn writer;\n\t}\n}\n\nfunction isHttpFamily(url) {\n\tconst { baseURI } = getConfiguration();\n\tconst { protocol } = new URL(url, baseURI);\n\treturn protocol == \"http:\" || protocol == \"https:\";\n}\n\nasync function initStream(stream, initSize) {\n\tif (stream.init && !stream.initialized) {\n\t\tawait stream.init(initSize);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n}\n\nfunction readUint8Array(reader, offset, size, diskNumber) {\n\treturn reader.readUint8Array(offset, size, diskNumber);\n}\n\nexport {\n\tinitStream,\n\tGenericReader,\n\tGenericWriter,\n\treadUint8Array,\n\tReader,\n\tWriter,\n\tTextReader,\n\tTextWriter,\n\tData64URIReader,\n\tData64URIWriter,\n\tBlobReader,\n\tBlobWriter,\n\tUint8ArrayReader,\n\tUint8ArrayWriter,\n\tHttpReader,\n\tHttpRangeReader,\n\tSplitDataReader,\n\tSplitDataWriter,\n\tERR_HTTP_RANGE,\n\tERR_ITERATOR_COMPLETED_TOO_SOON,\n\tERR_WRITER_NOT_INITIALIZED\n};","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TextDecoder */\n\nconst CP437 = \"\\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \".split(\"\");\nconst VALID_CP437 = CP437.length == 256;\n\nexport {\n\tdecodeCP437\n};\n\nfunction decodeCP437(stringValue) {\n\tif (VALID_CP437) {\n\t\tlet result = \"\";\n\t\tfor (let indexCharacter = 0; indexCharacter < stringValue.length; indexCharacter++) {\n\t\t\tresult += CP437[stringValue[indexCharacter]];\n\t\t}\n\t\treturn result;\n\t} else {\n\t\treturn new TextDecoder().decode(stringValue);\n\t}\n}","/*\n Copyright (c) 2022 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TextDecoder */\n\nimport { decodeCP437 } from \"./decode-cp437.js\";\n\nexport {\n\tdecodeText\n};\n\nfunction decodeText(value, encoding) {\n\tif (encoding && encoding.trim().toLowerCase() == \"cp437\") {\n\t\treturn decodeCP437(value);\n\t} else {\n\t\treturn new TextDecoder(encoding).decode(value);\n\t}\n}","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nconst PROPERTY_NAME_FILENAME = \"filename\";\nconst PROPERTY_NAME_RAW_FILENAME = \"rawFilename\";\nconst PROPERTY_NAME_COMMENT = \"comment\";\nconst PROPERTY_NAME_RAW_COMMENT = \"rawComment\";\nconst PROPERTY_NAME_UNCOMPRESSED_SIZE = \"uncompressedSize\";\nconst PROPERTY_NAME_COMPRESSED_SIZE = \"compressedSize\";\nconst PROPERTY_NAME_OFFSET = \"offset\";\nconst PROPERTY_NAME_DISK_NUMBER_START = \"diskNumberStart\";\nconst PROPERTY_NAME_LAST_MODIFICATION_DATE = \"lastModDate\";\nconst PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE = \"rawLastModDate\";\nconst PROPERTY_NAME_LAST_ACCESS_DATE = \"lastAccessDate\";\nconst PROPERTY_NAME_RAW_LAST_ACCESS_DATE = \"rawLastAccessDate\";\nconst PROPERTY_NAME_CREATION_DATE = \"creationDate\";\nconst PROPERTY_NAME_RAW_CREATION_DATE = \"rawCreationDate\";\nconst PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES = \"internalFileAttributes\";\nconst PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES = \"externalFileAttributes\";\nconst PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW = \"msdosAttributesRaw\";\nconst PROPERTY_NAME_MSDOS_ATTRIBUTES = \"msdosAttributes\";\nconst PROPERTY_NAME_MS_DOS_COMPATIBLE = \"msDosCompatible\";\nconst PROPERTY_NAME_ZIP64 = \"zip64\";\nconst PROPERTY_NAME_ENCRYPTED = \"encrypted\";\nconst PROPERTY_NAME_VERSION = \"version\";\nconst PROPERTY_NAME_VERSION_MADE_BY = \"versionMadeBy\";\nconst PROPERTY_NAME_ZIPCRYPTO = \"zipCrypto\";\nconst PROPERTY_NAME_DIRECTORY = \"directory\";\nconst PROPERTY_NAME_EXECUTABLE = \"executable\";\nconst PROPERTY_NAME_COMPRESSION_METHOD = \"compressionMethod\";\nconst PROPERTY_NAME_SIGNATURE = \"signature\";\nconst PROPERTY_NAME_EXTRA_FIELD = \"extraField\";\nconst PROPERTY_NAME_EXTRA_FIELD_INFOZIP = \"extraFieldInfoZip\";\nconst PROPERTY_NAME_EXTRA_FIELD_UNIX = \"extraFieldUnix\";\nconst PROPERTY_NAME_UID = \"uid\";\nconst PROPERTY_NAME_GID = \"gid\";\nconst PROPERTY_NAME_UNIX_MODE = \"unixMode\";\nconst PROPERTY_NAME_SETUID = \"setuid\";\nconst PROPERTY_NAME_SETGID = \"setgid\";\nconst PROPERTY_NAME_STICKY = \"sticky\";\nconst PROPERTY_NAME_BITFLAG = \"bitFlag\";\nconst PROPERTY_NAME_FILENAME_UTF8 = \"filenameUTF8\";\nconst PROPERTY_NAME_COMMENT_UTF8 = \"commentUTF8\";\nconst PROPERTY_NAME_RAW_EXTRA_FIELD = \"rawExtraField\";\nconst PROPERTY_NAME_EXTRA_FIELD_ZIP64 = \"extraFieldZip64\";\nconst PROPERTY_NAME_EXTRA_FIELD_UNICODE_PATH = \"extraFieldUnicodePath\";\nconst PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT = \"extraFieldUnicodeComment\";\nconst PROPERTY_NAME_EXTRA_FIELD_AES = \"extraFieldAES\";\nconst PROPERTY_NAME_EXTRA_FIELD_NTFS = \"extraFieldNTFS\";\nconst PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP = \"extraFieldExtendedTimestamp\";\n\nconst PROPERTY_NAMES = [\n\tPROPERTY_NAME_FILENAME,\n\tPROPERTY_NAME_RAW_FILENAME,\n\tPROPERTY_NAME_UNCOMPRESSED_SIZE,\n\tPROPERTY_NAME_COMPRESSED_SIZE,\n\tPROPERTY_NAME_LAST_MODIFICATION_DATE,\n\tPROPERTY_NAME_RAW_LAST_MODIFICATION_DATE,\n\tPROPERTY_NAME_COMMENT,\n\tPROPERTY_NAME_RAW_COMMENT,\n\tPROPERTY_NAME_LAST_ACCESS_DATE,\n\tPROPERTY_NAME_CREATION_DATE,\n\tPROPERTY_NAME_RAW_CREATION_DATE,\n\tPROPERTY_NAME_OFFSET,\n\tPROPERTY_NAME_DISK_NUMBER_START,\n\tPROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,\n\tPROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES,\n\tPROPERTY_NAME_MSDOS_ATTRIBUTES_RAW,\n\tPROPERTY_NAME_MSDOS_ATTRIBUTES,\n\tPROPERTY_NAME_MS_DOS_COMPATIBLE,\n\tPROPERTY_NAME_ZIP64,\n\tPROPERTY_NAME_ENCRYPTED,\n\tPROPERTY_NAME_VERSION,\n\tPROPERTY_NAME_VERSION_MADE_BY,\n\tPROPERTY_NAME_ZIPCRYPTO,\n\tPROPERTY_NAME_DIRECTORY,\n\tPROPERTY_NAME_EXECUTABLE,\n\tPROPERTY_NAME_COMPRESSION_METHOD,\n\tPROPERTY_NAME_SIGNATURE,\n\tPROPERTY_NAME_EXTRA_FIELD,\n\tPROPERTY_NAME_EXTRA_FIELD_UNIX,\n\tPROPERTY_NAME_EXTRA_FIELD_INFOZIP,\n\tPROPERTY_NAME_UID,\n\tPROPERTY_NAME_GID,\n\tPROPERTY_NAME_UNIX_MODE,\n\tPROPERTY_NAME_SETUID,\n\tPROPERTY_NAME_SETGID,\n\tPROPERTY_NAME_STICKY,\n\tPROPERTY_NAME_BITFLAG,\n\tPROPERTY_NAME_FILENAME_UTF8,\n\tPROPERTY_NAME_COMMENT_UTF8,\n\tPROPERTY_NAME_RAW_EXTRA_FIELD,\n\tPROPERTY_NAME_EXTRA_FIELD_ZIP64,\n\tPROPERTY_NAME_EXTRA_FIELD_UNICODE_PATH,\n\tPROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT,\n\tPROPERTY_NAME_EXTRA_FIELD_AES,\n\tPROPERTY_NAME_EXTRA_FIELD_NTFS,\n\tPROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP\n];\n\nclass Entry {\n\n\tconstructor(data) {\n\t\tPROPERTY_NAMES.forEach(name => this[name] = data[name]);\n\t}\n\n}\n\nexport {\n\tPROPERTY_NAME_FILENAME,\n\tPROPERTY_NAME_RAW_FILENAME,\n\tPROPERTY_NAME_COMMENT,\n\tPROPERTY_NAME_RAW_COMMENT,\n\tPROPERTY_NAME_UNCOMPRESSED_SIZE,\n\tPROPERTY_NAME_COMPRESSED_SIZE,\n\tPROPERTY_NAME_OFFSET,\n\tPROPERTY_NAME_DISK_NUMBER_START,\n\tPROPERTY_NAME_LAST_MODIFICATION_DATE,\n\tPROPERTY_NAME_RAW_LAST_MODIFICATION_DATE,\n\tPROPERTY_NAME_LAST_ACCESS_DATE,\n\tPROPERTY_NAME_RAW_LAST_ACCESS_DATE,\n\tPROPERTY_NAME_CREATION_DATE,\n\tPROPERTY_NAME_RAW_CREATION_DATE,\n\tPROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,\n\tPROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES,\n\tPROPERTY_NAME_MSDOS_ATTRIBUTES_RAW,\n\tPROPERTY_NAME_MSDOS_ATTRIBUTES,\n\tPROPERTY_NAME_MS_DOS_COMPATIBLE,\n\tPROPERTY_NAME_ZIP64,\n\tPROPERTY_NAME_ENCRYPTED,\n\tPROPERTY_NAME_VERSION,\n\tPROPERTY_NAME_VERSION_MADE_BY,\n\tPROPERTY_NAME_ZIPCRYPTO,\n\tPROPERTY_NAME_DIRECTORY,\n\tPROPERTY_NAME_EXECUTABLE,\n\tPROPERTY_NAME_COMPRESSION_METHOD,\n\tPROPERTY_NAME_SIGNATURE,\n\tPROPERTY_NAME_EXTRA_FIELD,\n\tPROPERTY_NAME_GID,\n\tPROPERTY_NAME_UID,\n\tPROPERTY_NAME_UNIX_MODE,\n\tPROPERTY_NAME_SETUID,\n\tPROPERTY_NAME_SETGID,\n\tPROPERTY_NAME_STICKY,\n\tEntry\n};","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global Response, WritableStream, ReadableStream, TransformStream */\n// deno-lint-ignore-file no-this-alias\n\nimport {\n\tMAX_32_BITS,\n\tMAX_16_BITS,\n\tMAX_8_BITS,\n\tCOMPRESSION_METHOD_DEFLATE,\n\tCOMPRESSION_METHOD_STORE,\n\tCOMPRESSION_METHOD_AES,\n\tSPLIT_ZIP_FILE_SIGNATURE,\n\tDATA_DESCRIPTOR_RECORD_SIGNATURE,\n\tDATA_DESCRIPTOR_RECORD_LENGTH,\n\tDATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH,\n\tDATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH,\n\tLOCAL_FILE_HEADER_SIGNATURE,\n\tCENTRAL_FILE_HEADER_SIGNATURE,\n\tEND_OF_CENTRAL_DIR_SIGNATURE,\n\tZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE,\n\tZIP64_END_OF_CENTRAL_DIR_SIGNATURE,\n\tEXTRAFIELD_TYPE_ZIP64,\n\tEXTRAFIELD_TYPE_UNICODE_PATH,\n\tEXTRAFIELD_TYPE_UNICODE_COMMENT,\n\tEXTRAFIELD_TYPE_AES,\n\tEXTRAFIELD_TYPE_NTFS,\n\tEXTRAFIELD_TYPE_NTFS_TAG1,\n\tEXTRAFIELD_TYPE_EXTENDED_TIMESTAMP,\n\tEXTRAFIELD_TYPE_INFOZIP,\n\tEXTRAFIELD_TYPE_UNIX,\n\tEXTRAFIELD_TYPE_USDZ,\n\tEND_OF_CENTRAL_DIR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_LENGTH,\n\tBITFLAG_ENCRYPTED,\n\tBITFLAG_LEVEL,\n\tBITFLAG_DATA_DESCRIPTOR,\n\tBITFLAG_LANG_ENCODING_FLAG,\n\tFILE_ATTR_MSDOS_DIR_MASK,\n\tFILE_ATTR_MSDOS_READONLY_MASK,\n\tFILE_ATTR_MSDOS_HIDDEN_MASK,\n\tFILE_ATTR_MSDOS_SYSTEM_MASK,\n\tFILE_ATTR_MSDOS_ARCHIVE_MASK,\n\tFILE_ATTR_UNIX_TYPE_MASK,\n\tFILE_ATTR_UNIX_TYPE_DIR,\n\tFILE_ATTR_UNIX_EXECUTABLE_MASK,\n\tFILE_ATTR_UNIX_DEFAULT_MASK,\n\tDIRECTORY_SIGNATURE,\n\tHEADER_SIZE,\n\tHEADER_OFFSET_SIGNATURE,\n\tHEADER_OFFSET_COMPRESSED_SIZE,\n\tHEADER_OFFSET_UNCOMPRESSED_SIZE,\n\tUNDEFINED_VALUE,\n\tCOMPRESSION_METHOD_DEFLATE_64,\n\tFILE_ATTR_UNIX_SETUID_MASK,\n\tFILE_ATTR_UNIX_SETGID_MASK,\n\tFILE_ATTR_UNIX_STICKY_MASK\n} from \"./constants.js\";\nimport {\n\tgetConfiguration,\n\tgetChunkSize\n} from \"./configuration.js\";\nimport {\n\trunWorker,\n\tCODEC_INFLATE,\n\tERR_INVALID_SIGNATURE,\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_UNCOMPRESSED_SIZE,\n\tERR_ABORT_CHECK_PASSWORD\n} from \"./codec-pool.js\";\nimport {\n\tinitStream,\n\treadUint8Array,\n\tBlobReader,\n\tGenericReader,\n\tGenericWriter\n} from \"./io.js\";\nimport { decodeText } from \"./util/decode-text.js\";\nimport { Crc32 } from \"./streams/codecs/crc32.js\";\nimport {\n\tPROPERTY_NAME_RAW_FILENAME,\n\tPROPERTY_NAME_FILENAME,\n\tPROPERTY_NAME_RAW_COMMENT,\n\tPROPERTY_NAME_COMMENT,\n\tPROPERTY_NAME_UNCOMPRESSED_SIZE,\n\tPROPERTY_NAME_COMPRESSED_SIZE,\n\tPROPERTY_NAME_OFFSET,\n\tPROPERTY_NAME_DISK_NUMBER_START,\n\tPROPERTY_NAME_LAST_MODIFICATION_DATE,\n\tPROPERTY_NAME_RAW_LAST_MODIFICATION_DATE,\n\tPROPERTY_NAME_LAST_ACCESS_DATE,\n\tPROPERTY_NAME_RAW_LAST_ACCESS_DATE,\n\tPROPERTY_NAME_CREATION_DATE,\n\tPROPERTY_NAME_RAW_CREATION_DATE,\n\tEntry\n} from \"./zip-entry.js\";\nimport {\n\tOPTION_FILENAME_ENCODING,\n\tOPTION_COMMENT_ENCODING,\n\tOPTION_DECODE_TEXT,\n\tOPTION_EXTRACT_PREPENDED_DATA,\n\tOPTION_EXTRACT_APPENDED_DATA,\n\tOPTION_PASSWORD,\n\tOPTION_RAW_PASSWORD,\n\tOPTION_PASS_THROUGH,\n\tOPTION_SIGNAL,\n\tOPTION_CHECK_PASSWORD_ONLY,\n\tOPTION_CHECK_OVERLAPPING_ENTRY_ONLY,\n\tOPTION_CHECK_OVERLAPPING_ENTRY,\n\tOPTION_CHECK_SIGNATURE,\n\tOPTION_USE_WEB_WORKERS,\n\tOPTION_USE_COMPRESSION_STREAM,\n\tOPTION_TRANSFER_STREAMS,\n\tOPTION_PREVENT_CLOSE\n} from \"./options.js\";\n\nconst ERR_BAD_FORMAT = \"File format is not recognized\";\nconst ERR_EOCDR_NOT_FOUND = \"End of central directory not found\";\nconst ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND = \"End of Zip64 central directory locator not found\";\nconst ERR_CENTRAL_DIRECTORY_NOT_FOUND = \"Central directory header not found\";\nconst ERR_LOCAL_FILE_HEADER_NOT_FOUND = \"Local file header not found\";\nconst ERR_EXTRAFIELD_ZIP64_NOT_FOUND = \"Zip64 extra field not found\";\nconst ERR_ENCRYPTED = \"File contains encrypted entry\";\nconst ERR_UNSUPPORTED_ENCRYPTION = \"Encryption method not supported\";\nconst ERR_UNSUPPORTED_COMPRESSION = \"Compression method not supported\";\nconst ERR_SPLIT_ZIP_FILE = \"Split zip file\";\nconst ERR_OVERLAPPING_ENTRY = \"Overlapping entry found\";\nconst CHARSET_UTF8 = \"utf-8\";\nconst PROPERTY_NAME_UTF8_SUFFIX = \"UTF8\";\nconst CHARSET_CP437 = \"cp437\";\nconst ZIP64_PROPERTIES = [\n\t[PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],\n\t[PROPERTY_NAME_COMPRESSED_SIZE, MAX_32_BITS],\n\t[PROPERTY_NAME_OFFSET, MAX_32_BITS],\n\t[PROPERTY_NAME_DISK_NUMBER_START, MAX_16_BITS]\n];\nconst ZIP64_EXTRACTION = {\n\t[MAX_16_BITS]: {\n\t\tgetValue: getUint32,\n\t\tbytes: 4\n\t},\n\t[MAX_32_BITS]: {\n\t\tgetValue: getBigUint64,\n\t\tbytes: 8\n\t}\n};\n\nclass ZipReader {\n\n\tconstructor(reader, options = {}) {\n\t\tObject.assign(this, {\n\t\t\treader: new GenericReader(reader),\n\t\t\toptions,\n\t\t\tconfig: getConfiguration(),\n\t\t\treadRanges: []\n\t\t});\n\t}\n\n\tasync* getEntriesGenerator(options = {}) {\n\t\tconst zipReader = this;\n\t\tlet { reader } = zipReader;\n\t\tconst { config } = zipReader;\n\t\tawait initStream(reader);\n\t\tif (reader.size === UNDEFINED_VALUE || !reader.readUint8Array) {\n\t\t\treader = new BlobReader(await new Response(reader.readable).blob());\n\t\t\tawait initStream(reader);\n\t\t}\n\t\tif (reader.size < END_OF_CENTRAL_DIR_LENGTH) {\n\t\t\tthrow new Error(ERR_BAD_FORMAT);\n\t\t}\n\t\treader.chunkSize = getChunkSize(config);\n\t\tconst endOfDirectoryInfo = await seekSignature(reader, END_OF_CENTRAL_DIR_SIGNATURE, reader.size, END_OF_CENTRAL_DIR_LENGTH, MAX_16_BITS * 16);\n\t\tif (!endOfDirectoryInfo) {\n\t\t\tconst signatureArray = await readUint8Array(reader, 0, 4);\n\t\t\tconst signatureView = getDataView(signatureArray);\n\t\t\tif (getUint32(signatureView) == SPLIT_ZIP_FILE_SIGNATURE) {\n\t\t\t\tthrow new Error(ERR_SPLIT_ZIP_FILE);\n\t\t\t} else {\n\t\t\t\tthrow new Error(ERR_EOCDR_NOT_FOUND);\n\t\t\t}\n\t\t}\n\t\tconst endOfDirectoryView = getDataView(endOfDirectoryInfo);\n\t\tlet directoryDataLength = getUint32(endOfDirectoryView, 12);\n\t\tlet directoryDataOffset = getUint32(endOfDirectoryView, 16);\n\t\tconst commentOffset = endOfDirectoryInfo.offset;\n\t\tconst commentLength = getUint16(endOfDirectoryView, 20);\n\t\tconst appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;\n\t\tlet lastDiskNumber = getUint16(endOfDirectoryView, 4);\n\t\tconst expectedLastDiskNumber = reader.lastDiskNumber || 0;\n\t\tlet diskNumber = getUint16(endOfDirectoryView, 6);\n\t\tlet filesLength = getUint16(endOfDirectoryView, 8);\n\t\tlet prependedDataLength = 0;\n\t\tlet startOffset = 0;\n\t\tif (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS) {\n\t\t\tconst endOfDirectoryLocatorArray = await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH);\n\t\t\tconst endOfDirectoryLocatorView = getDataView(endOfDirectoryLocatorArray);\n\t\t\tif (getUint32(endOfDirectoryLocatorView, 0) == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE) {\n\t\t\t\tdirectoryDataOffset = getBigUint64(endOfDirectoryLocatorView, 8);\n\t\t\t\tlet endOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH, -1);\n\t\t\t\tlet endOfDirectoryView = getDataView(endOfDirectoryArray);\n\t\t\t\tconst expectedDirectoryDataOffset = endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH - ZIP64_END_OF_CENTRAL_DIR_LENGTH;\n\t\t\t\tif (getUint32(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE && directoryDataOffset != expectedDirectoryDataOffset) {\n\t\t\t\t\tconst originalDirectoryDataOffset = directoryDataOffset;\n\t\t\t\t\tdirectoryDataOffset = expectedDirectoryDataOffset;\n\t\t\t\t\tif (directoryDataOffset > originalDirectoryDataOffset) {\n\t\t\t\t\t\tprependedDataLength = directoryDataOffset - originalDirectoryDataOffset;\n\t\t\t\t\t}\n\t\t\t\t\tendOfDirectoryArray = await readUint8Array(reader, directoryDataOffset, ZIP64_END_OF_CENTRAL_DIR_LENGTH, -1);\n\t\t\t\t\tendOfDirectoryView = getDataView(endOfDirectoryArray);\n\t\t\t\t}\n\t\t\t\tif (getUint32(endOfDirectoryView, 0) != ZIP64_END_OF_CENTRAL_DIR_SIGNATURE) {\n\t\t\t\t\tthrow new Error(ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND);\n\t\t\t\t}\n\t\t\t\tif (lastDiskNumber == MAX_16_BITS) {\n\t\t\t\t\tlastDiskNumber = getUint32(endOfDirectoryView, 16);\n\t\t\t\t}\n\t\t\t\tif (diskNumber == MAX_16_BITS) {\n\t\t\t\t\tdiskNumber = getUint32(endOfDirectoryView, 20);\n\t\t\t\t}\n\t\t\t\tif (filesLength == MAX_16_BITS) {\n\t\t\t\t\tfilesLength = getBigUint64(endOfDirectoryView, 32);\n\t\t\t\t}\n\t\t\t\tif (directoryDataLength == MAX_32_BITS) {\n\t\t\t\t\tdirectoryDataLength = getBigUint64(endOfDirectoryView, 40);\n\t\t\t\t}\n\t\t\t\tdirectoryDataOffset -= directoryDataLength;\n\t\t\t}\n\t\t}\n\t\tif (directoryDataOffset >= reader.size) {\n\t\t\tprependedDataLength = reader.size - directoryDataOffset - directoryDataLength - END_OF_CENTRAL_DIR_LENGTH;\n\t\t\tdirectoryDataOffset = reader.size - directoryDataLength - END_OF_CENTRAL_DIR_LENGTH;\n\t\t}\n\t\tif (expectedLastDiskNumber != lastDiskNumber) {\n\t\t\tthrow new Error(ERR_SPLIT_ZIP_FILE);\n\t\t}\n\t\tif (directoryDataOffset < 0) {\n\t\t\tthrow new Error(ERR_BAD_FORMAT);\n\t\t}\n\t\tlet offset = 0;\n\t\tlet directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);\n\t\tlet directoryView = getDataView(directoryArray);\n\t\tif (directoryDataLength) {\n\t\t\tconst expectedDirectoryDataOffset = endOfDirectoryInfo.offset - directoryDataLength;\n\t\t\tif (getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE && directoryDataOffset != expectedDirectoryDataOffset) {\n\t\t\t\tconst originalDirectoryDataOffset = directoryDataOffset;\n\t\t\t\tdirectoryDataOffset = expectedDirectoryDataOffset;\n\t\t\t\tif (directoryDataOffset > originalDirectoryDataOffset) {\n\t\t\t\t\tprependedDataLength += directoryDataOffset - originalDirectoryDataOffset;\n\t\t\t\t}\n\t\t\t\tdirectoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);\n\t\t\t\tdirectoryView = getDataView(directoryArray);\n\t\t\t}\n\t\t}\n\t\tconst expectedDirectoryDataLength = endOfDirectoryInfo.offset - directoryDataOffset - (reader.lastDiskOffset || 0);\n\t\tif (directoryDataLength != expectedDirectoryDataLength && expectedDirectoryDataLength >= 0) {\n\t\t\tdirectoryDataLength = expectedDirectoryDataLength;\n\t\t\tdirectoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);\n\t\t\tdirectoryView = getDataView(directoryArray);\n\t\t}\n\t\tif (directoryDataOffset < 0 || directoryDataOffset >= reader.size) {\n\t\t\tthrow new Error(ERR_BAD_FORMAT);\n\t\t}\n\t\tconst filenameEncoding = getOptionValue(zipReader, options, OPTION_FILENAME_ENCODING);\n\t\tconst commentEncoding = getOptionValue(zipReader, options, OPTION_COMMENT_ENCODING);\n\t\tfor (let indexFile = 0; indexFile < filesLength; indexFile++) {\n\t\t\tconst fileEntry = new ZipEntry(reader, config, zipReader.options);\n\t\t\tif (getUint32(directoryView, offset) != CENTRAL_FILE_HEADER_SIGNATURE) {\n\t\t\t\tthrow new Error(ERR_CENTRAL_DIRECTORY_NOT_FOUND);\n\t\t\t}\n\t\t\treadCommonHeader(fileEntry, directoryView, offset + 6);\n\t\t\tconst languageEncodingFlag = Boolean(fileEntry.bitFlag.languageEncodingFlag);\n\t\t\tconst filenameOffset = offset + 46;\n\t\t\tconst extraFieldOffset = filenameOffset + fileEntry.filenameLength;\n\t\t\tconst commentOffset = extraFieldOffset + fileEntry.extraFieldLength;\n\t\t\tconst versionMadeBy = getUint16(directoryView, offset + 4);\n\t\t\tconst msDosCompatible = versionMadeBy >> 8 == 0;\n\t\t\tconst unixCompatible = versionMadeBy >> 8 == 3;\n\t\t\tconst rawFilename = directoryArray.subarray(filenameOffset, extraFieldOffset);\n\t\t\tconst commentLength = getUint16(directoryView, offset + 32);\n\t\t\tconst endOffset = commentOffset + commentLength;\n\t\t\tconst rawComment = directoryArray.subarray(commentOffset, endOffset);\n\t\t\tconst filenameUTF8 = languageEncodingFlag;\n\t\t\tconst commentUTF8 = languageEncodingFlag;\n\t\t\tconst externalFileAttributes = getUint32(directoryView, offset + 38);\n\t\t\tconst msdosAttributesRaw = externalFileAttributes & MAX_8_BITS;\n\t\t\tconst msdosAttributes = {\n\t\t\t\treadOnly: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_READONLY_MASK),\n\t\t\t\thidden: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_HIDDEN_MASK),\n\t\t\t\tsystem: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_SYSTEM_MASK),\n\t\t\t\tdirectory: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_DIR_MASK),\n\t\t\t\tarchive: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_ARCHIVE_MASK)\n\t\t\t};\n\t\t\tconst offsetFileEntry = getUint32(directoryView, offset + 42) + prependedDataLength;\n\t\t\tconst decode = getOptionValue(zipReader, options, OPTION_DECODE_TEXT) || decodeText;\n\t\t\tconst rawFilenameEncoding = filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437;\n\t\t\tconst rawCommentEncoding = commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437;\n\t\t\tlet filename = decode(rawFilename, rawFilenameEncoding);\n\t\t\tif (filename === UNDEFINED_VALUE) {\n\t\t\t\tfilename = decodeText(rawFilename, rawFilenameEncoding);\n\t\t\t}\n\t\t\tlet comment = decode(rawComment, rawCommentEncoding);\n\t\t\tif (comment === UNDEFINED_VALUE) {\n\t\t\t\tcomment = decodeText(rawComment, rawCommentEncoding);\n\t\t\t}\n\t\t\tObject.assign(fileEntry, {\n\t\t\t\tversionMadeBy,\n\t\t\t\tmsDosCompatible,\n\t\t\t\tcompressedSize: 0,\n\t\t\t\tuncompressedSize: 0,\n\t\t\t\tcommentLength,\n\t\t\t\toffset: offsetFileEntry,\n\t\t\t\tdiskNumberStart: getUint16(directoryView, offset + 34),\n\t\t\t\tinternalFileAttributes: getUint16(directoryView, offset + 36),\n\t\t\t\texternalFileAttributes,\n\t\t\t\tmsdosAttributesRaw,\n\t\t\t\tmsdosAttributes,\n\t\t\t\trawFilename,\n\t\t\t\tfilenameUTF8,\n\t\t\t\tcommentUTF8,\n\t\t\t\trawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset),\n\t\t\t\trawComment,\n\t\t\t\tfilename,\n\t\t\t\tcomment\n\t\t\t});\n\t\t\tstartOffset = Math.max(offsetFileEntry, startOffset);\n\t\t\treadCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);\n\t\t\tconst unixExternalUpper = (fileEntry.externalFileAttributes >> 16) & MAX_16_BITS;\n\t\t\tif (fileEntry.unixMode === UNDEFINED_VALUE && (unixExternalUpper & (FILE_ATTR_UNIX_DEFAULT_MASK | FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_TYPE_DIR)) != 0) {\n\t\t\t\tfileEntry.unixMode = unixExternalUpper;\n\t\t\t}\n\t\t\tconst setuid = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_SETUID_MASK);\n\t\t\tconst setgid = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_SETGID_MASK);\n\t\t\tconst sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);\n\t\t\tconst executable = (fileEntry.unixMode !== UNDEFINED_VALUE)\n\t\t\t\t? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)\n\t\t\t\t: (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0));\n\t\t\tconst modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);\n\t\t\tconst upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);\n\t\t\tObject.assign(fileEntry, {\n\t\t\t\tsetuid,\n\t\t\t\tsetgid,\n\t\t\t\tsticky,\n\t\t\t\tunixExternalUpper,\n\t\t\t\tinternalFileAttribute: fileEntry.internalFileAttributes,\n\t\t\t\texternalFileAttribute: fileEntry.externalFileAttributes,\n\t\t\t\texecutable,\n\t\t\t\tdirectory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || (filename.endsWith(DIRECTORY_SIGNATURE) && !fileEntry.uncompressedSize),\n\t\t\t\tzipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES\n\t\t\t});\n\t\t\tconst entry = new Entry(fileEntry);\n\t\t\tentry.getData = (writer, options) => fileEntry.getData(writer, entry, zipReader.readRanges, options);\n\t\t\tentry.arrayBuffer = async options => {\n\t\t\t\tconst writer = new TransformStream();\n\t\t\t\tconst [arrayBuffer] = await Promise.all([\n\t\t\t\t\tnew Response(writer.readable).arrayBuffer(),\n\t\t\t\t\tfileEntry.getData(writer, entry, zipReader.readRanges, options)]);\n\t\t\t\treturn arrayBuffer;\n\t\t\t};\n\t\t\toffset = endOffset;\n\t\t\tconst { onprogress } = options;\n\t\t\tif (onprogress) {\n\t\t\t\ttry {\n\t\t\t\t\tawait onprogress(indexFile + 1, filesLength, new Entry(fileEntry));\n\t\t\t\t} catch {\n\t\t\t\t\t// ignored\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield entry;\n\t\t}\n\t\tconst extractPrependedData = getOptionValue(zipReader, options, OPTION_EXTRACT_PREPENDED_DATA);\n\t\tconst extractAppendedData = getOptionValue(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);\n\t\tif (extractPrependedData) {\n\t\t\tzipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) : new Uint8Array();\n\t\t}\n\t\tzipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) : new Uint8Array();\n\t\tif (extractAppendedData) {\n\t\t\tzipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : new Uint8Array();\n\t\t}\n\t\treturn true;\n\t}\n\n\tasync getEntries(options = {}) {\n\t\tconst entries = [];\n\t\tfor await (const entry of this.getEntriesGenerator(options)) {\n\t\t\tentries.push(entry);\n\t\t}\n\t\treturn entries;\n\t}\n\n\tasync close() {\n\t}\n}\n\nclass ZipReaderStream {\n\n\tconstructor(options = {}) {\n\t\tconst { readable, writable } = new TransformStream();\n\t\tconst gen = new ZipReader(readable, options).getEntriesGenerator();\n\t\tthis.readable = new ReadableStream({\n\t\t\tasync pull(controller) {\n\t\t\t\tconst { done, value } = await gen.next();\n\t\t\t\tif (done)\n\t\t\t\t\treturn controller.close();\n\t\t\t\tconst chunk = {\n\t\t\t\t\t...value,\n\t\t\t\t\treadable: (function () {\n\t\t\t\t\t\tconst { readable, writable } = new TransformStream();\n\t\t\t\t\t\tif (value.getData) {\n\t\t\t\t\t\t\tvalue.getData(writable);\n\t\t\t\t\t\t\treturn readable;\n\t\t\t\t\t\t}\n\t\t\t\t\t})()\n\t\t\t\t};\n\t\t\t\tdelete chunk.getData;\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t}\n\t\t});\n\t\tthis.writable = writable;\n\t}\n}\n\nexport {\n\tZipReader,\n\tZipReaderStream,\n\tERR_BAD_FORMAT,\n\tERR_EOCDR_NOT_FOUND,\n\tERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND,\n\tERR_CENTRAL_DIRECTORY_NOT_FOUND,\n\tERR_LOCAL_FILE_HEADER_NOT_FOUND,\n\tERR_EXTRAFIELD_ZIP64_NOT_FOUND,\n\tERR_ENCRYPTED,\n\tERR_UNSUPPORTED_ENCRYPTION,\n\tERR_UNSUPPORTED_COMPRESSION,\n\tERR_INVALID_SIGNATURE,\n\tERR_INVALID_PASSWORD,\n\tERR_INVALID_UNCOMPRESSED_SIZE,\n\tERR_SPLIT_ZIP_FILE,\n\tERR_OVERLAPPING_ENTRY\n};\n\nclass ZipEntry {\n\n\tconstructor(reader, config, options) {\n\t\tObject.assign(this, {\n\t\t\treader,\n\t\t\tconfig,\n\t\t\toptions\n\t\t});\n\t}\n\n\tasync getData(writer, fileEntry, readRanges, options = {}) {\n\t\tconst zipEntry = this;\n\t\tconst {\n\t\t\treader,\n\t\t\toffset,\n\t\t\tdiskNumberStart,\n\t\t\textraFieldAES,\n\t\t\textraFieldZip64,\n\t\t\tcompressionMethod,\n\t\t\tconfig,\n\t\t\tbitFlag,\n\t\t\tsignature,\n\t\t\trawLastModDate,\n\t\t\tuncompressedSize,\n\t\t\tcompressedSize\n\t\t} = zipEntry;\n\t\tconst {\n\t\t\tdataDescriptor\n\t\t} = bitFlag;\n\t\tconst localDirectory = fileEntry.localDirectory = {};\n\t\tconst dataArray = await readUint8Array(reader, offset, HEADER_SIZE, diskNumberStart);\n\t\tconst dataView = getDataView(dataArray);\n\t\tlet password = getOptionValue(zipEntry, options, OPTION_PASSWORD);\n\t\tlet rawPassword = getOptionValue(zipEntry, options, OPTION_RAW_PASSWORD);\n\t\tconst passThrough = getOptionValue(zipEntry, options, OPTION_PASS_THROUGH);\n\t\tpassword = password && password.length && password;\n\t\trawPassword = rawPassword && rawPassword.length && rawPassword;\n\t\tif (extraFieldAES) {\n\t\t\tif (extraFieldAES.originalCompressionMethod != COMPRESSION_METHOD_AES) {\n\t\t\t\tthrow new Error(ERR_UNSUPPORTED_COMPRESSION);\n\t\t\t}\n\t\t}\n\t\tif ((compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE && compressionMethod != COMPRESSION_METHOD_DEFLATE_64) && !passThrough) {\n\t\t\tthrow new Error(ERR_UNSUPPORTED_COMPRESSION);\n\t\t}\n\t\tif (getUint32(dataView, 0) != LOCAL_FILE_HEADER_SIGNATURE) {\n\t\t\tthrow new Error(ERR_LOCAL_FILE_HEADER_NOT_FOUND);\n\t\t}\n\t\treadCommonHeader(localDirectory, dataView, 4);\n\t\tconst {\n\t\t\textraFieldLength,\n\t\t\tfilenameLength,\n\t\t\tlastAccessDate,\n\t\t\tcreationDate\n\t\t} = localDirectory;\n\t\tlocalDirectory.rawExtraField = extraFieldLength ?\n\t\t\tawait readUint8Array(reader, offset + HEADER_SIZE + filenameLength, extraFieldLength, diskNumberStart) :\n\t\t\tnew Uint8Array();\n\t\treadCommonFooter(zipEntry, localDirectory, dataView, 4, true);\n\t\tObject.assign(fileEntry, { lastAccessDate, creationDate });\n\t\tconst encrypted = zipEntry.encrypted && localDirectory.encrypted && !passThrough;\n\t\tconst zipCrypto = encrypted && !extraFieldAES;\n\t\tif (!passThrough) {\n\t\t\tfileEntry.zipCrypto = zipCrypto;\n\t\t}\n\t\tif (encrypted) {\n\t\t\tif (!zipCrypto && extraFieldAES.strength === UNDEFINED_VALUE) {\n\t\t\t\tthrow new Error(ERR_UNSUPPORTED_ENCRYPTION);\n\t\t\t} else if (!password && !rawPassword) {\n\t\t\t\tthrow new Error(ERR_ENCRYPTED);\n\t\t\t}\n\t\t}\n\t\tconst dataOffset = offset + HEADER_SIZE + filenameLength + extraFieldLength;\n\t\tconst size = compressedSize;\n\t\tconst readable = reader.readable;\n\t\tObject.assign(readable, {\n\t\t\tdiskNumberStart,\n\t\t\toffset: dataOffset,\n\t\t\tsize\n\t\t});\n\t\tconst signal = getOptionValue(zipEntry, options, OPTION_SIGNAL);\n\t\tconst checkPasswordOnly = getOptionValue(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);\n\t\tlet checkOverlappingEntry = getOptionValue(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);\n\t\tconst checkOverlappingEntryOnly = getOptionValue(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY_ONLY);\n\t\tif (checkOverlappingEntryOnly) {\n\t\t\tcheckOverlappingEntry = true;\n\t\t}\n\t\tconst { onstart, onprogress, onend } = options;\n\t\tconst deflate64 = compressionMethod == COMPRESSION_METHOD_DEFLATE_64;\n\t\tlet useCompressionStream = getOptionValue(zipEntry, options, OPTION_USE_COMPRESSION_STREAM);\n\t\tif (deflate64) {\n\t\t\tuseCompressionStream = false;\n\t\t}\n\t\tconst workerOptions = {\n\t\t\toptions: {\n\t\t\t\tcodecType: CODEC_INFLATE,\n\t\t\t\tpassword,\n\t\t\t\trawPassword,\n\t\t\t\tzipCrypto,\n\t\t\t\tencryptionStrength: extraFieldAES && extraFieldAES.strength,\n\t\t\t\tsigned: getOptionValue(zipEntry, options, OPTION_CHECK_SIGNATURE) && !passThrough,\n\t\t\t\tpasswordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((signature >>> 24) & MAX_8_BITS)),\n\t\t\t\toutputSize: passThrough ? compressedSize : uncompressedSize,\n\t\t\t\tsignature,\n\t\t\t\tcompressed: compressionMethod != 0 && !passThrough,\n\t\t\t\tencrypted: zipEntry.encrypted && !passThrough,\n\t\t\t\tuseWebWorkers: getOptionValue(zipEntry, options, OPTION_USE_WEB_WORKERS),\n\t\t\t\tuseCompressionStream,\n\t\t\t\ttransferStreams: getOptionValue(zipEntry, options, OPTION_TRANSFER_STREAMS),\n\t\t\t\tdeflate64,\n\t\t\t\tcheckPasswordOnly\n\t\t\t},\n\t\t\tconfig,\n\t\t\tstreamOptions: { signal, size, onstart, onprogress, onend }\n\t\t};\n\t\tif (checkOverlappingEntry) {\n\t\t\tawait detectOverlappingEntry({\n\t\t\t\treader,\n\t\t\t\tfileEntry,\n\t\t\t\toffset,\n\t\t\t\tdiskNumberStart,\n\t\t\t\tsignature,\n\t\t\t\tcompressedSize,\n\t\t\t\tuncompressedSize,\n\t\t\t\tdataOffset,\n\t\t\t\tdataDescriptor: dataDescriptor || localDirectory.bitFlag.dataDescriptor,\n\t\t\t\textraFieldZip64: extraFieldZip64 || localDirectory.extraFieldZip64,\n\t\t\t\treadRanges\n\t\t\t});\n\t\t}\n\t\tlet writable;\n\t\ttry {\n\t\t\tif (!checkOverlappingEntryOnly) {\n\t\t\t\tif (checkPasswordOnly) {\n\t\t\t\t\twriter = new WritableStream();\n\t\t\t\t}\n\t\t\t\twriter = new GenericWriter(writer);\n\t\t\t\tawait initStream(writer, passThrough ? compressedSize : uncompressedSize);\n\t\t\t\t({ writable } = writer);\n\t\t\t\tconst { outputSize } = await runWorker({ readable, writable }, workerOptions);\n\t\t\t\twriter.size += outputSize;\n\t\t\t\tif (outputSize != (passThrough ? compressedSize : uncompressedSize)) {\n\t\t\t\t\tthrow new Error(ERR_INVALID_UNCOMPRESSED_SIZE);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error.outputSize !== UNDEFINED_VALUE) {\n\t\t\t\twriter.size += error.outputSize;\n\t\t\t}\n\t\t\tif (!checkPasswordOnly || error.message != ERR_ABORT_CHECK_PASSWORD) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} finally {\n\t\t\tconst preventClose = getOptionValue(zipEntry, options, OPTION_PREVENT_CLOSE);\n\t\t\tif (!preventClose && writable && !writable.locked) {\n\t\t\t\tawait writable.getWriter().close();\n\t\t\t}\n\t\t}\n\t\treturn checkPasswordOnly || checkOverlappingEntryOnly ? UNDEFINED_VALUE : writer.getData ? writer.getData() : writable;\n\t}\n}\n\nfunction readCommonHeader(directory, dataView, offset) {\n\tconst rawBitFlag = directory.rawBitFlag = getUint16(dataView, offset + 2);\n\tconst encrypted = (rawBitFlag & BITFLAG_ENCRYPTED) == BITFLAG_ENCRYPTED;\n\tconst rawLastModDate = getUint32(dataView, offset + 6);\n\tObject.assign(directory, {\n\t\tencrypted,\n\t\tversion: getUint16(dataView, offset),\n\t\tbitFlag: {\n\t\t\tlevel: (rawBitFlag & BITFLAG_LEVEL) >> 1,\n\t\t\tdataDescriptor: (rawBitFlag & BITFLAG_DATA_DESCRIPTOR) == BITFLAG_DATA_DESCRIPTOR,\n\t\t\tlanguageEncodingFlag: (rawBitFlag & BITFLAG_LANG_ENCODING_FLAG) == BITFLAG_LANG_ENCODING_FLAG\n\t\t},\n\t\trawLastModDate,\n\t\tlastModDate: getDate(rawLastModDate),\n\t\tfilenameLength: getUint16(dataView, offset + 22),\n\t\textraFieldLength: getUint16(dataView, offset + 24)\n\t});\n}\n\nfunction readCommonFooter(fileEntry, directory, dataView, offset, localDirectory) {\n\tconst { rawExtraField } = directory;\n\tconst extraField = directory.extraField = new Map();\n\tconst rawExtraFieldView = getDataView(new Uint8Array(rawExtraField));\n\tlet offsetExtraField = 0;\n\ttry {\n\t\twhile (offsetExtraField < rawExtraField.length) {\n\t\t\tconst type = getUint16(rawExtraFieldView, offsetExtraField);\n\t\t\tconst size = getUint16(rawExtraFieldView, offsetExtraField + 2);\n\t\t\textraField.set(type, {\n\t\t\t\ttype,\n\t\t\t\tdata: rawExtraField.slice(offsetExtraField + 4, offsetExtraField + 4 + size)\n\t\t\t});\n\t\t\toffsetExtraField += 4 + size;\n\t\t}\n\t} catch {\n\t\t// ignored\n\t}\n\tconst compressionMethod = getUint16(dataView, offset + 4);\n\tObject.assign(directory, {\n\t\tsignature: getUint32(dataView, offset + HEADER_OFFSET_SIGNATURE),\n\t\tcompressedSize: getUint32(dataView, offset + HEADER_OFFSET_COMPRESSED_SIZE),\n\t\tuncompressedSize: getUint32(dataView, offset + HEADER_OFFSET_UNCOMPRESSED_SIZE)\n\t});\n\tconst extraFieldZip64 = extraField.get(EXTRAFIELD_TYPE_ZIP64);\n\tif (extraFieldZip64) {\n\t\treadExtraFieldZip64(extraFieldZip64, directory);\n\t\tdirectory.extraFieldZip64 = extraFieldZip64;\n\t}\n\tconst extraFieldUnicodePath = extraField.get(EXTRAFIELD_TYPE_UNICODE_PATH);\n\tif (extraFieldUnicodePath) {\n\t\treadExtraFieldUnicode(extraFieldUnicodePath, PROPERTY_NAME_FILENAME, PROPERTY_NAME_RAW_FILENAME, directory, fileEntry);\n\t\tdirectory.extraFieldUnicodePath = extraFieldUnicodePath;\n\t}\n\tconst extraFieldUnicodeComment = extraField.get(EXTRAFIELD_TYPE_UNICODE_COMMENT);\n\tif (extraFieldUnicodeComment) {\n\t\treadExtraFieldUnicode(extraFieldUnicodeComment, PROPERTY_NAME_COMMENT, PROPERTY_NAME_RAW_COMMENT, directory, fileEntry);\n\t\tdirectory.extraFieldUnicodeComment = extraFieldUnicodeComment;\n\t}\n\tconst extraFieldAES = extraField.get(EXTRAFIELD_TYPE_AES);\n\tif (extraFieldAES) {\n\t\treadExtraFieldAES(extraFieldAES, directory, compressionMethod);\n\t\tdirectory.extraFieldAES = extraFieldAES;\n\t} else {\n\t\tdirectory.compressionMethod = compressionMethod;\n\t}\n\tconst extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);\n\tif (extraFieldNTFS) {\n\t\treadExtraFieldNTFS(extraFieldNTFS, directory);\n\t\tdirectory.extraFieldNTFS = extraFieldNTFS;\n\t}\n\tconst extraFieldUnix = extraField.get(EXTRAFIELD_TYPE_UNIX);\n\tif (extraFieldUnix) {\n\t\treadExtraFieldUnix(extraFieldUnix, directory, false);\n\t\tdirectory.extraFieldUnix = extraFieldUnix;\n\t} else {\n\t\tconst extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);\n\t\tif (extraFieldInfoZip) {\n\t\t\treadExtraFieldUnix(extraFieldInfoZip, directory, true);\n\t\t\tdirectory.extraFieldInfoZip = extraFieldInfoZip;\n\t\t}\n\t}\n\tconst extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);\n\tif (extraFieldExtendedTimestamp) {\n\t\treadExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);\n\t\tdirectory.extraFieldExtendedTimestamp = extraFieldExtendedTimestamp;\n\t}\n\tconst extraFieldUSDZ = extraField.get(EXTRAFIELD_TYPE_USDZ);\n\tif (extraFieldUSDZ) {\n\t\tdirectory.extraFieldUSDZ = extraFieldUSDZ;\n\t}\n}\n\nfunction readExtraFieldZip64(extraFieldZip64, directory) {\n\tdirectory.zip64 = true;\n\tconst extraFieldView = getDataView(extraFieldZip64.data);\n\tconst missingProperties = ZIP64_PROPERTIES.filter(([propertyName, max]) => directory[propertyName] == max);\n\tfor (let indexMissingProperty = 0, offset = 0; indexMissingProperty < missingProperties.length; indexMissingProperty++) {\n\t\tconst [propertyName, max] = missingProperties[indexMissingProperty];\n\t\tif (directory[propertyName] == max) {\n\t\t\tconst extraction = ZIP64_EXTRACTION[max];\n\t\t\tdirectory[propertyName] = extraFieldZip64[propertyName] = extraction.getValue(extraFieldView, offset);\n\t\t\toffset += extraction.bytes;\n\t\t} else if (extraFieldZip64[propertyName]) {\n\t\t\tthrow new Error(ERR_EXTRAFIELD_ZIP64_NOT_FOUND);\n\t\t}\n\t}\n}\n\nfunction readExtraFieldUnicode(extraFieldUnicode, propertyName, rawPropertyName, directory, fileEntry) {\n\tconst extraFieldView = getDataView(extraFieldUnicode.data);\n\tconst crc32 = new Crc32();\n\tcrc32.append(fileEntry[rawPropertyName]);\n\tconst dataViewSignature = getDataView(new Uint8Array(4));\n\tdataViewSignature.setUint32(0, crc32.get(), true);\n\tconst signature = getUint32(extraFieldView, 1);\n\tObject.assign(extraFieldUnicode, {\n\t\tversion: getUint8(extraFieldView, 0),\n\t\t[propertyName]: decodeText(extraFieldUnicode.data.subarray(5)),\n\t\tvalid: !fileEntry.bitFlag.languageEncodingFlag && signature == getUint32(dataViewSignature, 0)\n\t});\n\tif (extraFieldUnicode.valid) {\n\t\tdirectory[propertyName] = extraFieldUnicode[propertyName];\n\t\tdirectory[propertyName + PROPERTY_NAME_UTF8_SUFFIX] = true;\n\t}\n}\n\nfunction readExtraFieldAES(extraFieldAES, directory, compressionMethod) {\n\tconst extraFieldView = getDataView(extraFieldAES.data);\n\tconst strength = getUint8(extraFieldView, 4);\n\tObject.assign(extraFieldAES, {\n\t\tvendorVersion: getUint8(extraFieldView, 0),\n\t\tvendorId: getUint8(extraFieldView, 2),\n\t\tstrength,\n\t\toriginalCompressionMethod: compressionMethod,\n\t\tcompressionMethod: getUint16(extraFieldView, 5)\n\t});\n\tdirectory.compressionMethod = extraFieldAES.compressionMethod;\n}\n\nfunction readExtraFieldNTFS(extraFieldNTFS, directory) {\n\tconst extraFieldView = getDataView(extraFieldNTFS.data);\n\tlet offsetExtraField = 4;\n\tlet tag1Data;\n\ttry {\n\t\twhile (offsetExtraField < extraFieldNTFS.data.length && !tag1Data) {\n\t\t\tconst tagValue = getUint16(extraFieldView, offsetExtraField);\n\t\t\tconst attributeSize = getUint16(extraFieldView, offsetExtraField + 2);\n\t\t\tif (tagValue == EXTRAFIELD_TYPE_NTFS_TAG1) {\n\t\t\t\ttag1Data = extraFieldNTFS.data.slice(offsetExtraField + 4, offsetExtraField + 4 + attributeSize);\n\t\t\t}\n\t\t\toffsetExtraField += 4 + attributeSize;\n\t\t}\n\t} catch {\n\t\t// ignored\n\t}\n\ttry {\n\t\tif (tag1Data && tag1Data.length == 24) {\n\t\t\tconst tag1View = getDataView(tag1Data);\n\t\t\tconst rawLastModDate = tag1View.getBigUint64(0, true);\n\t\t\tconst rawLastAccessDate = tag1View.getBigUint64(8, true);\n\t\t\tconst rawCreationDate = tag1View.getBigUint64(16, true);\n\t\t\tObject.assign(extraFieldNTFS, {\n\t\t\t\trawLastModDate,\n\t\t\t\trawLastAccessDate,\n\t\t\t\trawCreationDate\n\t\t\t});\n\t\t\tconst lastModDate = getDateNTFS(rawLastModDate);\n\t\t\tconst lastAccessDate = getDateNTFS(rawLastAccessDate);\n\t\t\tconst creationDate = getDateNTFS(rawCreationDate);\n\t\t\tconst extraFieldData = { lastModDate, lastAccessDate, creationDate };\n\t\t\tObject.assign(extraFieldNTFS, extraFieldData);\n\t\t\tObject.assign(directory, extraFieldData);\n\t\t}\n\t} catch {\n\t\t// ignored\n\t}\n}\n\nfunction readExtraFieldUnix(extraField, directory, isInfoZip) {\n\ttry {\n\t\tconst view = getDataView(new Uint8Array(extraField.data));\n\t\tlet offset = 0;\n\t\tconst version = getUint8(view, offset++);\n\t\tconst uidSize = getUint8(view, offset++);\n\t\tconst uidBytes = extraField.data.subarray(offset, offset + uidSize);\n\t\toffset += uidSize;\n\t\tconst uid = unpackUnixId(uidBytes);\n\t\tconst gidSize = getUint8(view, offset++);\n\t\tconst gidBytes = extraField.data.subarray(offset, offset + gidSize);\n\t\toffset += gidSize;\n\t\tconst gid = unpackUnixId(gidBytes);\n\t\tlet unixMode = UNDEFINED_VALUE;\n\t\tif (!isInfoZip && offset + 2 <= extraField.data.length) {\n\t\t\tconst base = extraField.data;\n\t\t\tconst modeView = new DataView(base.buffer, base.byteOffset + offset, 2);\n\t\t\tunixMode = modeView.getUint16(0, true);\n\t\t}\n\t\tObject.assign(extraField, { version, uid, gid, unixMode });\n\t\tif (uid !== UNDEFINED_VALUE) {\n\t\t\tdirectory.uid = uid;\n\t\t}\n\t\tif (gid !== UNDEFINED_VALUE) {\n\t\t\tdirectory.gid = gid;\n\t\t}\n\t\tif (unixMode !== UNDEFINED_VALUE) {\n\t\t\tdirectory.unixMode = unixMode;\n\t\t}\n\t} catch {\n\t\t// ignored\n\t}\n}\n\nfunction unpackUnixId(bytes) {\n\tconst buffer = new Uint8Array(4);\n\tbuffer.set(bytes, 0);\n\tconst view = new DataView(buffer.buffer, buffer.byteOffset, 4);\n\treturn view.getUint32(0, true);\n}\n\nfunction readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory) {\n\tconst extraFieldView = getDataView(extraFieldExtendedTimestamp.data);\n\tconst flags = getUint8(extraFieldView, 0);\n\tconst timeProperties = [];\n\tconst timeRawProperties = [];\n\tif (localDirectory) {\n\t\tif ((flags & 0x1) == 0x1) {\n\t\t\ttimeProperties.push(PROPERTY_NAME_LAST_MODIFICATION_DATE);\n\t\t\ttimeRawProperties.push(PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE);\n\t\t}\n\t\tif ((flags & 0x2) == 0x2) {\n\t\t\ttimeProperties.push(PROPERTY_NAME_LAST_ACCESS_DATE);\n\t\t\ttimeRawProperties.push(PROPERTY_NAME_RAW_LAST_ACCESS_DATE);\n\t\t}\n\t\tif ((flags & 0x4) == 0x4) {\n\t\t\ttimeProperties.push(PROPERTY_NAME_CREATION_DATE);\n\t\t\ttimeRawProperties.push(PROPERTY_NAME_RAW_CREATION_DATE);\n\t\t}\n\t} else if (extraFieldExtendedTimestamp.data.length >= 5) {\n\t\ttimeProperties.push(PROPERTY_NAME_LAST_MODIFICATION_DATE);\n\t\ttimeRawProperties.push(PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE);\n\t}\n\tlet offset = 1;\n\ttimeProperties.forEach((propertyName, indexProperty) => {\n\t\tif (extraFieldExtendedTimestamp.data.length >= offset + 4) {\n\t\t\tconst time = getUint32(extraFieldView, offset);\n\t\t\tdirectory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date(time * 1000);\n\t\t\tconst rawPropertyName = timeRawProperties[indexProperty];\n\t\t\textraFieldExtendedTimestamp[rawPropertyName] = time;\n\t\t}\n\t\toffset += 4;\n\t});\n}\n\nasync function detectOverlappingEntry({\n\treader,\n\tfileEntry,\n\toffset,\n\tdiskNumberStart,\n\tsignature,\n\tcompressedSize,\n\tuncompressedSize,\n\tdataOffset,\n\tdataDescriptor,\n\textraFieldZip64,\n\treadRanges\n}) {\n\tlet diskOffset = 0;\n\tif (diskNumberStart) {\n\t\tfor (let indexReader = 0; indexReader < diskNumberStart; indexReader++) {\n\t\t\tconst diskReader = reader.readers[indexReader];\n\t\t\tdiskOffset += diskReader.size;\n\t\t}\n\t}\n\tlet dataDescriptorLength = 0;\n\tif (dataDescriptor) {\n\t\tif (extraFieldZip64) {\n\t\t\tdataDescriptorLength = DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH;\n\t\t} else {\n\t\t\tdataDescriptorLength = DATA_DESCRIPTOR_RECORD_LENGTH;\n\t\t}\n\t}\n\tif (dataDescriptorLength) {\n\t\tconst dataDescriptorArray = await readUint8Array(reader, dataOffset + compressedSize, dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH, diskNumberStart);\n\t\tconst dataDescriptorSignature = getUint32(getDataView(dataDescriptorArray), 0) == DATA_DESCRIPTOR_RECORD_SIGNATURE;\n\t\tif (dataDescriptorSignature) {\n\t\t\tconst readSignature = getUint32(getDataView(dataDescriptorArray), 4);\n\t\t\tlet readCompressedSize;\n\t\t\tlet readUncompressedSize;\n\t\t\tif (extraFieldZip64) {\n\t\t\t\treadCompressedSize = getBigUint64(getDataView(dataDescriptorArray), 8);\n\t\t\t\treadUncompressedSize = getBigUint64(getDataView(dataDescriptorArray), 16);\n\t\t\t} else {\n\t\t\t\treadCompressedSize = getUint32(getDataView(dataDescriptorArray), 8);\n\t\t\t\treadUncompressedSize = getUint32(getDataView(dataDescriptorArray), 12);\n\t\t\t}\n\t\t\tconst matchSignature = (fileEntry.encrypted && !fileEntry.zipCrypto) || readSignature == signature;\n\t\t\tif (matchSignature &&\n\t\t\t\treadCompressedSize == compressedSize &&\n\t\t\t\treadUncompressedSize == uncompressedSize) {\n\t\t\t\tdataDescriptorLength += DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH;\n\t\t\t}\n\t\t}\n\t}\n\tconst range = {\n\t\tstart: diskOffset + offset,\n\t\tend: diskOffset + dataOffset + compressedSize + dataDescriptorLength,\n\t\tfileEntry\n\t};\n\tfor (const otherRange of readRanges) {\n\t\tif (otherRange.fileEntry != fileEntry && range.start >= otherRange.start && range.start < otherRange.end) {\n\t\t\tconst error = new Error(ERR_OVERLAPPING_ENTRY);\n\t\t\terror.overlappingEntry = otherRange.fileEntry;\n\t\t\tthrow error;\n\t\t}\n\t}\n\treadRanges.push(range);\n}\n\nasync function seekSignature(reader, signature, startOffset, minimumBytes, maximumLength) {\n\tconst signatureArray = new Uint8Array(4);\n\tconst signatureView = getDataView(signatureArray);\n\tsetUint32(signatureView, 0, signature);\n\tconst maximumBytes = minimumBytes + maximumLength;\n\treturn (await seek(minimumBytes)) || await seek(Math.min(maximumBytes, startOffset));\n\n\tasync function seek(length) {\n\t\tconst offset = startOffset - length;\n\t\tconst bytes = await readUint8Array(reader, offset, length);\n\t\tfor (let indexByte = bytes.length - minimumBytes; indexByte >= 0; indexByte--) {\n\t\t\tif (bytes[indexByte] == signatureArray[0] && bytes[indexByte + 1] == signatureArray[1] &&\n\t\t\t\tbytes[indexByte + 2] == signatureArray[2] && bytes[indexByte + 3] == signatureArray[3]) {\n\t\t\t\treturn {\n\t\t\t\t\toffset: offset + indexByte,\n\t\t\t\t\tbuffer: bytes.slice(indexByte, indexByte + minimumBytes).buffer\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getOptionValue(zipReader, options, name) {\n\treturn options[name] === UNDEFINED_VALUE ? zipReader.options[name] : options[name];\n}\n\nfunction getDate(timeRaw) {\n\tconst date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & MAX_16_BITS;\n\ttry {\n\t\treturn new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);\n\t} catch {\n\t\t// ignored\n\t}\n}\n\nfunction getDateNTFS(timeRaw) {\n\treturn new Date((Number((timeRaw / BigInt(10000)) - BigInt(11644473600000))));\n}\n\nfunction getUint8(view, offset) {\n\treturn view.getUint8(offset);\n}\n\nfunction getUint16(view, offset) {\n\treturn view.getUint16(offset, true);\n}\n\nfunction getUint32(view, offset) {\n\treturn view.getUint32(offset, true);\n}\n\nfunction getBigUint64(view, offset) {\n\treturn Number(view.getBigUint64(offset, true));\n}\n\nfunction setUint32(view, offset, value) {\n\tview.setUint32(offset, value, true);\n}\n\nfunction getDataView(array) {\n\treturn new DataView(array.buffer);\n}\n","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global TransformStream */\n// deno-lint-ignore-file no-this-alias\n\nimport {\n\tMAX_32_BITS,\n\tMAX_16_BITS,\n\tMAX_8_BITS,\n\tCOMPRESSION_METHOD_DEFLATE,\n\tCOMPRESSION_METHOD_DEFLATE_64,\n\tCOMPRESSION_METHOD_STORE,\n\tCOMPRESSION_METHOD_AES,\n\tSPLIT_ZIP_FILE_SIGNATURE,\n\tLOCAL_FILE_HEADER_SIGNATURE,\n\tDATA_DESCRIPTOR_RECORD_SIGNATURE,\n\tCENTRAL_FILE_HEADER_SIGNATURE,\n\tEND_OF_CENTRAL_DIR_SIGNATURE,\n\tZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE,\n\tZIP64_END_OF_CENTRAL_DIR_SIGNATURE,\n\tDATA_DESCRIPTOR_RECORD_LENGTH,\n\tDATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH,\n\tDATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH,\n\tEXTRAFIELD_TYPE_AES,\n\tEXTRAFIELD_TYPE_ZIP64,\n\tEXTRAFIELD_TYPE_EXTENDED_TIMESTAMP,\n\tEXTRAFIELD_TYPE_NTFS,\n\tEXTRAFIELD_TYPE_NTFS_TAG1,\n\tEXTRAFIELD_TYPE_USDZ,\n\tEXTRAFIELD_TYPE_INFOZIP,\n\tEXTRAFIELD_TYPE_UNIX,\n\tEND_OF_CENTRAL_DIR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH,\n\tZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH,\n\tBITFLAG_ENCRYPTED,\n\tBITFLAG_DATA_DESCRIPTOR,\n\tBITFLAG_LANG_ENCODING_FLAG,\n\tBITFLAG_LEVEL_FAST_MASK,\n\tBITFLAG_LEVEL_SUPER_FAST_MASK,\n\tBITFLAG_LEVEL_MAX_MASK,\n\tFILE_ATTR_MSDOS_DIR_MASK,\n\tFILE_ATTR_MSDOS_READONLY_MASK,\n\tFILE_ATTR_MSDOS_HIDDEN_MASK,\n\tFILE_ATTR_MSDOS_SYSTEM_MASK,\n\tFILE_ATTR_MSDOS_ARCHIVE_MASK,\n\tFILE_ATTR_UNIX_TYPE_DIR,\n\tFILE_ATTR_UNIX_EXECUTABLE_MASK,\n\tFILE_ATTR_UNIX_DEFAULT_MASK,\n\tFILE_ATTR_UNIX_SETUID_MASK,\n\tFILE_ATTR_UNIX_SETGID_MASK,\n\tFILE_ATTR_UNIX_STICKY_MASK,\n\tVERSION_DEFLATE,\n\tVERSION_ZIP64,\n\tVERSION_AES,\n\tDIRECTORY_SIGNATURE,\n\tHEADER_SIZE,\n\tHEADER_OFFSET_SIGNATURE,\n\tHEADER_OFFSET_COMPRESSED_SIZE,\n\tHEADER_OFFSET_UNCOMPRESSED_SIZE,\n\tMIN_DATE,\n\tMAX_DATE,\n\tUNDEFINED_VALUE,\n\tINFINITY_VALUE,\n\tOBJECT_TYPE\n} from \"./constants.js\";\nimport {\n\tgetConfiguration,\n\tgetChunkSize\n} from \"./configuration.js\";\nimport {\n\tCODEC_DEFLATE,\n\trunWorker\n} from \"./codec-pool.js\";\nimport {\n\tinitStream,\n\tGenericWriter,\n\tGenericReader\n} from \"./io.js\";\nimport { encodeText } from \"./util/encode-text.js\";\nimport {\n\tPROPERTY_NAME_LAST_MODIFICATION_DATE,\n\tPROPERTY_NAME_LAST_ACCESS_DATE,\n\tPROPERTY_NAME_CREATION_DATE,\n\tPROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,\n\tPROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES,\n\tPROPERTY_NAME_MS_DOS_COMPATIBLE,\n\tPROPERTY_NAME_ZIP64,\n\tPROPERTY_NAME_ENCRYPTED,\n\tPROPERTY_NAME_VERSION,\n\tPROPERTY_NAME_VERSION_MADE_BY,\n\tPROPERTY_NAME_ZIPCRYPTO,\n\tPROPERTY_NAME_DIRECTORY,\n\tPROPERTY_NAME_EXECUTABLE,\n\tPROPERTY_NAME_COMPRESSION_METHOD,\n\tPROPERTY_NAME_SIGNATURE,\n\tPROPERTY_NAME_COMMENT,\n\tPROPERTY_NAME_UNCOMPRESSED_SIZE,\n\tPROPERTY_NAME_EXTRA_FIELD,\n\tPROPERTY_NAME_UID,\n\tPROPERTY_NAME_GID,\n\tPROPERTY_NAME_UNIX_MODE,\n\tPROPERTY_NAME_SETUID,\n\tPROPERTY_NAME_SETGID,\n\tPROPERTY_NAME_STICKY,\n\tPROPERTY_NAME_MSDOS_ATTRIBUTES,\n\tPROPERTY_NAME_MSDOS_ATTRIBUTES_RAW,\n\tEntry\n} from \"./zip-entry.js\";\nimport {\n\tOPTION_PASSWORD,\n\tOPTION_RAW_PASSWORD,\n\tOPTION_PASS_THROUGH,\n\tOPTION_SIGNAL,\n\tOPTION_USE_WEB_WORKERS,\n\tOPTION_USE_COMPRESSION_STREAM,\n\tOPTION_TRANSFER_STREAMS,\n\tOPTION_PREVENT_CLOSE,\n\tOPTION_ENCRYPTION_STRENGTH,\n\tOPTION_EXTENDED_TIMESTAMP,\n\tOPTION_KEEP_ORDER,\n\tOPTION_LEVEL,\n\tOPTION_BUFFERED_WRITE,\n\tOPTION_CREATE_TEMP_STREAM,\n\tOPTION_DATA_DESCRIPTOR_SIGNATURE,\n\tOPTION_USE_UNICODE_FILE_NAMES,\n\tOPTION_DATA_DESCRIPTOR,\n\tOPTION_SUPPORT_ZIP64_SPLIT_FILE,\n\tOPTION_ENCODE_TEXT,\n\tOPTION_OFFSET,\n\tOPTION_USDZ,\n\tOPTION_UNIX_EXTRA_FIELD_TYPE\n} from \"./options.js\";\nimport {\n\tZipReader\n} from \"./zip-reader.js\";\n\nconst ERR_DUPLICATED_NAME = \"File already exists\";\nconst ERR_INVALID_COMMENT = \"Zip file comment exceeds 64KB\";\nconst ERR_INVALID_ENTRY_COMMENT = \"File entry comment exceeds 64KB\";\nconst ERR_INVALID_ENTRY_NAME = \"File entry name exceeds 64KB\";\nconst ERR_INVALID_VERSION = \"Version exceeds 65535\";\nconst ERR_INVALID_ENCRYPTION_STRENGTH = \"The strength must equal 1, 2, or 3\";\nconst ERR_INVALID_EXTRAFIELD_TYPE = \"Extra field type exceeds 65535\";\nconst ERR_INVALID_EXTRAFIELD_DATA = \"Extra field data exceeds 64KB\";\nconst ERR_UNSUPPORTED_FORMAT = \"Zip64 is not supported (make sure 'keepOrder' is set to 'true')\";\nconst ERR_UNDEFINED_UNCOMPRESSED_SIZE = \"Undefined uncompressed size\";\nconst ERR_ZIP_NOT_EMPTY = \"Zip file not empty\";\nconst ERR_INVALID_UID = \"Invalid uid (must be integer 0..2^32-1)\";\nconst ERR_INVALID_GID = \"Invalid gid (must be integer 0..2^32-1)\";\nconst ERR_INVALID_UNIX_MODE = \"Invalid UNIX mode (must be integer 0..65535)\";\nconst ERR_INVALID_UNIX_EXTRA_FIELD_TYPE = \"Invalid unixExtraFieldType (must be 'infozip' or 'unix')\";\nconst ERR_INVALID_MSDOS_ATTRIBUTES = \"Invalid msdosAttributesRaw (must be integer 0..255)\";\nconst ERR_INVALID_MSDOS_DATA = \"Invalid msdosAttributes (must be an object with boolean flags)\";\n\nconst EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);\nconst INFOZIP_EXTRA_FIELD_TYPE = \"infozip\";\nconst UNIX_EXTRA_FIELD_TYPE = \"unix\";\n\nlet workers = 0;\nconst pendingEntries = [];\n\nclass ZipWriter {\n\n\tconstructor(writer, options = {}) {\n\t\twriter = new GenericWriter(writer);\n\t\tconst addSplitZipSignature =\n\t\t\twriter.availableSize !== UNDEFINED_VALUE && writer.availableSize > 0 && writer.availableSize !== INFINITY_VALUE &&\n\t\t\twriter.maxSize !== UNDEFINED_VALUE && writer.maxSize > 0 && writer.maxSize !== INFINITY_VALUE;\n\t\tObject.assign(this, {\n\t\t\twriter,\n\t\t\taddSplitZipSignature,\n\t\t\toptions,\n\t\t\tconfig: getConfiguration(),\n\t\t\tfiles: new Map(),\n\t\t\tfilenames: new Set(),\n\t\t\toffset: options[OPTION_OFFSET] === UNDEFINED_VALUE ? writer.size || writer.writable.size || 0 : options[OPTION_OFFSET],\n\t\t\tpendingEntriesSize: 0,\n\t\t\tpendingAddFileCalls: new Set(),\n\t\t\tbufferedWrites: 0\n\t\t});\n\t}\n\n\tasync prependZip(reader) {\n\t\tif (this.filenames.size) {\n\t\t\tthrow new Error(ERR_ZIP_NOT_EMPTY);\n\t\t}\n\t\treader = new GenericReader(reader);\n\t\tconst zipReader = new ZipReader(reader.readable);\n\t\tconst entries = await zipReader.getEntries();\n\t\tawait zipReader.close();\n\t\tawait reader.readable.pipeTo(this.writer.writable, { preventClose: true, preventAbort: true });\n\t\tthis.writer.size = this.offset = reader.size;\n\t\tthis.filenames = new Set(entries.map(entry => entry.filename));\n\t\tthis.files = new Map(entries.map(entry => {\n\t\t\tconst {\n\t\t\t\tversion,\n\t\t\t\tcompressionMethod,\n\t\t\t\tlastModDate,\n\t\t\t\tlastAccessDate,\n\t\t\t\tcreationDate,\n\t\t\t\trawFilename,\n\t\t\t\tbitFlag,\n\t\t\t\tencrypted,\n\t\t\t\tuncompressedSize,\n\t\t\t\tcompressedSize,\n\t\t\t\tdiskOffset,\n\t\t\t\tdiskNumber,\n\t\t\t\tzip64\n\t\t\t} = entry;\n\t\t\tlet {\n\t\t\t\trawExtraFieldZip64,\n\t\t\t\trawExtraFieldAES,\n\t\t\t\trawExtraFieldExtendedTimestamp,\n\t\t\t\trawExtraFieldNTFS,\n\t\t\t\trawExtraFieldUnix,\n\t\t\t\trawExtraField,\n\t\t\t} = entry;\n\t\t\tconst { level, languageEncodingFlag, dataDescriptor } = bitFlag;\n\t\t\trawExtraFieldZip64 = rawExtraFieldZip64 || new Uint8Array();\n\t\t\trawExtraFieldAES = rawExtraFieldAES || new Uint8Array();\n\t\t\trawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || new Uint8Array();\n\t\t\trawExtraFieldNTFS = rawExtraFieldNTFS || new Uint8Array();\n\t\t\trawExtraFieldUnix = entry.rawExtraFieldUnix || new Uint8Array();\n\t\t\trawExtraField = rawExtraField || new Uint8Array();\n\t\t\tconst extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);\n\t\t\tconst zip64UncompressedSize = zip64 && uncompressedSize > MAX_32_BITS;\n\t\t\tconst zip64CompressedSize = zip64 && compressedSize > MAX_32_BITS;\n\t\t\tconst {\n\t\t\t\theaderArray,\n\t\t\t\theaderView\n\t\t\t} = getHeaderArrayData({\n\t\t\t\tversion,\n\t\t\t\tbitFlag: getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted, compressionMethod),\n\t\t\t\tcompressionMethod,\n\t\t\t\tuncompressedSize,\n\t\t\t\tcompressedSize,\n\t\t\t\tlastModDate,\n\t\t\t\trawFilename,\n\t\t\t\tzip64CompressedSize,\n\t\t\t\tzip64UncompressedSize,\n\t\t\t\textraFieldLength\n\t\t\t});\n\t\t\tObject.assign(entry, {\n\t\t\t\tzip64UncompressedSize,\n\t\t\t\tzip64CompressedSize,\n\t\t\t\tzip64Offset: zip64 && this.offset - diskOffset > MAX_32_BITS,\n\t\t\t\tzip64DiskNumberStart: zip64 && diskNumber > MAX_16_BITS,\n\t\t\t\trawExtraFieldZip64,\n\t\t\t\trawExtraFieldAES,\n\t\t\t\trawExtraFieldExtendedTimestamp,\n\t\t\t\trawExtraFieldNTFS,\n\t\t\t\trawExtraFieldUnix,\n\t\t\t\trawExtraField,\n\t\t\t\textendedTimestamp: rawExtraFieldExtendedTimestamp.length > 0 || rawExtraFieldNTFS.length > 0,\n\t\t\t\textraFieldExtendedTimestampFlag: 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0),\n\t\t\t\theaderArray,\n\t\t\t\theaderView\n\t\t\t});\n\t\t\treturn [entry.filename, entry];\n\t\t}));\n\t}\n\n\tasync add(name = \"\", reader, options = {}) {\n\t\tconst zipWriter = this;\n\t\tconst {\n\t\t\tpendingAddFileCalls,\n\t\t\tconfig\n\t\t} = zipWriter;\n\t\tif (workers < config.maxWorkers) {\n\t\t\tworkers++;\n\t\t} else {\n\t\t\tawait new Promise(resolve => pendingEntries.push(resolve));\n\t\t}\n\t\tlet promiseAddFile;\n\t\ttry {\n\t\t\tname = name.trim();\n\t\t\tif (zipWriter.filenames.has(name)) {\n\t\t\t\tthrow new Error(ERR_DUPLICATED_NAME);\n\t\t\t}\n\t\t\tzipWriter.filenames.add(name);\n\t\t\tpromiseAddFile = addFile(zipWriter, name, reader, options);\n\t\t\tpendingAddFileCalls.add(promiseAddFile);\n\t\t\treturn await promiseAddFile;\n\t\t} catch (error) {\n\t\t\tzipWriter.filenames.delete(name);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tpendingAddFileCalls.delete(promiseAddFile);\n\t\t\tconst pendingEntry = pendingEntries.shift();\n\t\t\tif (pendingEntry) {\n\t\t\t\tpendingEntry();\n\t\t\t} else {\n\t\t\t\tworkers--;\n\t\t\t}\n\t\t}\n\t}\n\n\tremove(entry) {\n\t\tconst { filenames, files } = this;\n\t\tif (typeof entry == \"string\") {\n\t\t\tentry = files.get(entry);\n\t\t}\n\t\tif (entry && entry.filename !== UNDEFINED_VALUE) {\n\t\t\tconst { filename } = entry;\n\t\t\tif (filenames.has(filename) && files.has(filename)) {\n\t\t\t\tfilenames.delete(filename);\n\t\t\t\tfiles.delete(filename);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tasync close(comment = new Uint8Array(), options = {}) {\n\t\tconst zipWriter = this;\n\t\tconst { pendingAddFileCalls, writer } = this;\n\t\tconst { writable } = writer;\n\t\twhile (pendingAddFileCalls.size) {\n\t\t\tawait Promise.allSettled(Array.from(pendingAddFileCalls));\n\t\t}\n\t\tawait closeFile(zipWriter, comment, options);\n\t\tconst preventClose = getOptionValue(zipWriter, options, OPTION_PREVENT_CLOSE);\n\t\tif (!preventClose) {\n\t\t\tawait writable.getWriter().close();\n\t\t}\n\t\treturn writer.getData ? writer.getData() : writable;\n\t}\n}\n\nclass ZipWriterStream {\n\n\tconstructor(options = {}) {\n\t\tconst { readable, writable } = new TransformStream();\n\t\tthis.readable = readable;\n\t\tthis.zipWriter = new ZipWriter(writable, options);\n\t}\n\n\ttransform(path) {\n\t\tconst { readable, writable } = new TransformStream({\n\t\t\tflush: () => { this.zipWriter.close(); }\n\t\t});\n\t\tthis.zipWriter.add(path, readable);\n\t\treturn { readable: this.readable, writable };\n\t}\n\n\twritable(path) {\n\t\tconst { readable, writable } = new TransformStream();\n\t\tthis.zipWriter.add(path, readable);\n\t\treturn writable;\n\t}\n\n\tclose(comment = UNDEFINED_VALUE, options = {}) {\n\t\treturn this.zipWriter.close(comment, options);\n\t}\n}\n\nexport {\n\tZipWriter,\n\tZipWriterStream,\n\tERR_DUPLICATED_NAME,\n\tERR_INVALID_COMMENT,\n\tERR_INVALID_ENTRY_NAME,\n\tERR_INVALID_ENTRY_COMMENT,\n\tERR_INVALID_VERSION,\n\tERR_INVALID_EXTRAFIELD_TYPE,\n\tERR_INVALID_EXTRAFIELD_DATA,\n\tERR_INVALID_ENCRYPTION_STRENGTH,\n\tERR_UNSUPPORTED_FORMAT,\n\tERR_UNDEFINED_UNCOMPRESSED_SIZE,\n\tERR_ZIP_NOT_EMPTY\n};\n\nasync function addFile(zipWriter, name, reader, options) {\n\tname = name.trim();\n\tlet msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);\n\tlet versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);\n\tconst executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);\n\tconst uid = getOptionValue(zipWriter, options, PROPERTY_NAME_UID);\n\tconst gid = getOptionValue(zipWriter, options, PROPERTY_NAME_GID);\n\tlet unixMode = getOptionValue(zipWriter, options, PROPERTY_NAME_UNIX_MODE);\n\tconst unixExtraFieldType = getOptionValue(zipWriter, options, OPTION_UNIX_EXTRA_FIELD_TYPE);\n\tlet setuid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETUID);\n\tlet setgid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETGID);\n\tlet sticky = getOptionValue(zipWriter, options, PROPERTY_NAME_STICKY);\n\tif (uid !== UNDEFINED_VALUE && (uid < 0 || uid > MAX_32_BITS)) {\n\t\tthrow new Error(ERR_INVALID_UID);\n\t}\n\tif (gid !== UNDEFINED_VALUE && (gid < 0 || gid > MAX_32_BITS)) {\n\t\tthrow new Error(ERR_INVALID_GID);\n\t}\n\tif (unixMode !== UNDEFINED_VALUE && (unixMode < 0 || unixMode > MAX_16_BITS)) {\n\t\tthrow new Error(ERR_INVALID_UNIX_MODE);\n\t}\n\tif (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {\n\t\tthrow new Error(ERR_INVALID_UNIX_EXTRA_FIELD_TYPE);\n\t}\n\tlet msdosAttributesRaw = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW);\n\tlet msdosAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES);\n\tconst hasUnixMetadata = uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE || unixExtraFieldType;\n\tconst hasMsDosProvided = msdosAttributesRaw !== UNDEFINED_VALUE || msdosAttributes !== UNDEFINED_VALUE;\n\tif (hasUnixMetadata) {\n\t\tmsDosCompatible = false;\n\t\tversionMadeBy = (versionMadeBy & MAX_16_BITS) | (3 << 8);\n\t} else if (hasMsDosProvided) {\n\t\tmsDosCompatible = true;\n\t\tversionMadeBy = (versionMadeBy & MAX_8_BITS);\n\t}\n\tif (msdosAttributesRaw !== UNDEFINED_VALUE && (msdosAttributesRaw < 0 || msdosAttributesRaw > MAX_8_BITS)) {\n\t\tthrow new Error(ERR_INVALID_MSDOS_ATTRIBUTES);\n\t}\n\tif (msdosAttributes && typeof msdosAttributes !== OBJECT_TYPE) {\n\t\tthrow new Error(ERR_INVALID_MSDOS_DATA);\n\t}\n\tif (versionMadeBy > MAX_16_BITS) {\n\t\tthrow new Error(ERR_INVALID_VERSION);\n\t}\n\tlet externalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES, 0);\n\tif (!options[PROPERTY_NAME_DIRECTORY] && name.endsWith(DIRECTORY_SIGNATURE)) {\n\t\toptions[PROPERTY_NAME_DIRECTORY] = true;\n\t}\n\tconst directory = getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY);\n\tif (directory) {\n\t\tif (!name.endsWith(DIRECTORY_SIGNATURE)) {\n\t\t\tname += DIRECTORY_SIGNATURE;\n\t\t}\n\t\tif (externalFileAttributes === 0) {\n\t\t\texternalFileAttributes = FILE_ATTR_MSDOS_DIR_MASK;\n\t\t\tif (!msDosCompatible) {\n\t\t\t\texternalFileAttributes |= (FILE_ATTR_UNIX_TYPE_DIR | FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;\n\t\t\t}\n\t\t}\n\t} else if (!msDosCompatible && externalFileAttributes === 0) {\n\t\tif (executable) {\n\t\t\texternalFileAttributes = (FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_DEFAULT_MASK) << 16;\n\t\t} else {\n\t\t\texternalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;\n\t\t}\n\t}\n\tlet unixExternalUpper;\n\tif (!msDosCompatible) {\n\t\tunixExternalUpper = (externalFileAttributes >> 16) & MAX_16_BITS;\n\t\tunixMode = unixMode === UNDEFINED_VALUE ? unixExternalUpper : (unixMode & MAX_16_BITS);\n\t\tif (setuid) {\n\t\t\tunixMode |= FILE_ATTR_UNIX_SETUID_MASK;\n\t\t} else {\n\t\t\tsetuid = Boolean(unixMode & FILE_ATTR_UNIX_SETUID_MASK);\n\t\t}\n\t\tif (setgid) {\n\t\t\tunixMode |= FILE_ATTR_UNIX_SETGID_MASK;\n\t\t} else {\n\t\t\tsetgid = Boolean(unixMode & FILE_ATTR_UNIX_SETGID_MASK);\n\t\t}\n\t\tif (sticky) {\n\t\t\tunixMode |= FILE_ATTR_UNIX_STICKY_MASK;\n\t\t} else {\n\t\t\tsticky = Boolean(unixMode & FILE_ATTR_UNIX_STICKY_MASK);\n\t\t}\n\t\tif (directory) {\n\t\t\tunixMode |= FILE_ATTR_UNIX_TYPE_DIR;\n\t\t}\n\t\texternalFileAttributes = ((unixMode & MAX_16_BITS) << 16) | (externalFileAttributes & MAX_8_BITS);\n\t}\n\t({ msdosAttributesRaw, msdosAttributes } = normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes));\n\tif (hasMsDosProvided) {\n\t\texternalFileAttributes = (externalFileAttributes & MAX_32_BITS) | (msdosAttributesRaw & MAX_8_BITS);\n\t}\n\tconst encode = getOptionValue(zipWriter, options, OPTION_ENCODE_TEXT, encodeText);\n\tlet rawFilename = encode(name);\n\tif (rawFilename === UNDEFINED_VALUE) {\n\t\trawFilename = encodeText(name);\n\t}\n\tif (getLength(rawFilename) > MAX_16_BITS) {\n\t\tthrow new Error(ERR_INVALID_ENTRY_NAME);\n\t}\n\tconst comment = options[PROPERTY_NAME_COMMENT] || \"\";\n\tlet rawComment = encode(comment);\n\tif (rawComment === UNDEFINED_VALUE) {\n\t\trawComment = encodeText(comment);\n\t}\n\tif (getLength(rawComment) > MAX_16_BITS) {\n\t\tthrow new Error(ERR_INVALID_ENTRY_COMMENT);\n\t}\n\tconst version = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION, VERSION_DEFLATE);\n\tif (version > MAX_16_BITS) {\n\t\tthrow new Error(ERR_INVALID_VERSION);\n\t}\n\tconst lastModDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_MODIFICATION_DATE, new Date());\n\tconst lastAccessDate = getOptionValue(zipWriter, options, PROPERTY_NAME_LAST_ACCESS_DATE);\n\tconst creationDate = getOptionValue(zipWriter, options, PROPERTY_NAME_CREATION_DATE);\n\tconst internalFileAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES, 0);\n\tconst passThrough = getOptionValue(zipWriter, options, OPTION_PASS_THROUGH);\n\tlet password, rawPassword;\n\tif (!passThrough) {\n\t\tpassword = getOptionValue(zipWriter, options, OPTION_PASSWORD);\n\t\trawPassword = getOptionValue(zipWriter, options, OPTION_RAW_PASSWORD);\n\t}\n\tconst encryptionStrength = getOptionValue(zipWriter, options, OPTION_ENCRYPTION_STRENGTH, 3);\n\tconst zipCrypto = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIPCRYPTO);\n\tconst extendedTimestamp = getOptionValue(zipWriter, options, OPTION_EXTENDED_TIMESTAMP, true);\n\tconst keepOrder = getOptionValue(zipWriter, options, OPTION_KEEP_ORDER, true);\n\tconst useWebWorkers = getOptionValue(zipWriter, options, OPTION_USE_WEB_WORKERS);\n\tconst transferStreams = getOptionValue(zipWriter, options, OPTION_TRANSFER_STREAMS, true);\n\tconst bufferedWrite = getOptionValue(zipWriter, options, OPTION_BUFFERED_WRITE);\n\tconst createTempStream = getOptionValue(zipWriter, options, OPTION_CREATE_TEMP_STREAM);\n\tconst dataDescriptorSignature = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR_SIGNATURE, false);\n\tconst signal = getOptionValue(zipWriter, options, OPTION_SIGNAL);\n\tconst useUnicodeFileNames = getOptionValue(zipWriter, options, OPTION_USE_UNICODE_FILE_NAMES, true);\n\tconst compressionMethod = getOptionValue(zipWriter, options, PROPERTY_NAME_COMPRESSION_METHOD);\n\tlet level = getOptionValue(zipWriter, options, OPTION_LEVEL);\n\tlet useCompressionStream = getOptionValue(zipWriter, options, OPTION_USE_COMPRESSION_STREAM);\n\tlet dataDescriptor = getOptionValue(zipWriter, options, OPTION_DATA_DESCRIPTOR);\n\tif (bufferedWrite && dataDescriptor === UNDEFINED_VALUE) {\n\t\tdataDescriptor = false;\n\t}\n\tif (dataDescriptor === UNDEFINED_VALUE || zipCrypto) {\n\t\tdataDescriptor = true;\n\t}\n\tif (level !== UNDEFINED_VALUE && level != 6) {\n\t\tuseCompressionStream = false;\n\t}\n\tif (!useCompressionStream && (zipWriter.config.CompressionStream === UNDEFINED_VALUE && zipWriter.config.CompressionStreamZlib === UNDEFINED_VALUE)) {\n\t\tlevel = 0;\n\t}\n\tlet zip64 = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIP64);\n\tif (!zipCrypto && (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) && !(encryptionStrength >= 1 && encryptionStrength <= 3)) {\n\t\tthrow new Error(ERR_INVALID_ENCRYPTION_STRENGTH);\n\t}\n\tlet rawExtraField = new Uint8Array();\n\tconst extraField = options[PROPERTY_NAME_EXTRA_FIELD];\n\tif (extraField) {\n\t\tlet extraFieldSize = 0;\n\t\tlet offset = 0;\n\t\textraField.forEach(data => extraFieldSize += 4 + getLength(data));\n\t\trawExtraField = new Uint8Array(extraFieldSize);\n\t\textraField.forEach((data, type) => {\n\t\t\tif (type > MAX_16_BITS) {\n\t\t\t\tthrow new Error(ERR_INVALID_EXTRAFIELD_TYPE);\n\t\t\t}\n\t\t\tif (getLength(data) > MAX_16_BITS) {\n\t\t\t\tthrow new Error(ERR_INVALID_EXTRAFIELD_DATA);\n\t\t\t}\n\t\t\tarraySet(rawExtraField, new Uint16Array([type]), offset);\n\t\t\tarraySet(rawExtraField, new Uint16Array([getLength(data)]), offset + 2);\n\t\t\tarraySet(rawExtraField, data, offset + 4);\n\t\t\toffset += 4 + getLength(data);\n\t\t});\n\t}\n\tlet maximumCompressedSize = 0;\n\tlet maximumEntrySize = 0;\n\tlet uncompressedSize = 0;\n\tif (passThrough) {\n\t\tuncompressedSize = options[PROPERTY_NAME_UNCOMPRESSED_SIZE];\n\t\tif (uncompressedSize === UNDEFINED_VALUE) {\n\t\t\tthrow new Error(ERR_UNDEFINED_UNCOMPRESSED_SIZE);\n\t\t}\n\t}\n\tconst zip64Enabled = zip64 === true;\n\tif (reader) {\n\t\treader = new GenericReader(reader);\n\t\tawait initStream(reader);\n\t\tif (!passThrough) {\n\t\t\tif (reader.size === UNDEFINED_VALUE) {\n\t\t\t\tdataDescriptor = true;\n\t\t\t\tif (zip64 || zip64 === UNDEFINED_VALUE) {\n\t\t\t\t\tzip64 = true;\n\t\t\t\t\tuncompressedSize = maximumCompressedSize = MAX_32_BITS + 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toptions.uncompressedSize = uncompressedSize = reader.size;\n\t\t\t\tmaximumCompressedSize = getMaximumCompressedSize(uncompressedSize);\n\t\t\t}\n\t\t} else {\n\t\t\toptions.uncompressedSize = uncompressedSize;\n\t\t\tmaximumCompressedSize = getMaximumCompressedSize(uncompressedSize);\n\t\t}\n\t}\n\tconst { diskOffset, diskNumber, maxSize } = zipWriter.writer;\n\tconst zip64UncompressedSize = zip64Enabled || uncompressedSize > MAX_32_BITS;\n\tconst zip64CompressedSize = zip64Enabled || maximumCompressedSize > MAX_32_BITS;\n\tconst zip64Offset = zip64Enabled || zipWriter.offset + zipWriter.pendingEntriesSize - diskOffset > MAX_32_BITS;\n\tconst supportZip64SplitFile = getOptionValue(zipWriter, options, OPTION_SUPPORT_ZIP64_SPLIT_FILE, true);\n\tconst zip64DiskNumberStart = (supportZip64SplitFile && zip64Enabled) || diskNumber + Math.ceil(zipWriter.pendingEntriesSize / maxSize) > MAX_16_BITS;\n\tif (zip64Offset || zip64UncompressedSize || zip64CompressedSize || zip64DiskNumberStart) {\n\t\tif (zip64 === false || !keepOrder) {\n\t\t\tthrow new Error(ERR_UNSUPPORTED_FORMAT);\n\t\t} else {\n\t\t\tzip64 = true;\n\t\t}\n\t}\n\tzip64 = zip64 || false;\n\tconst encrypted = getOptionValue(zipWriter, options, PROPERTY_NAME_ENCRYPTED);\n\toptions = Object.assign({}, options, {\n\t\trawFilename,\n\t\trawComment,\n\t\tversion,\n\t\tversionMadeBy,\n\t\tlastModDate,\n\t\tlastAccessDate,\n\t\tcreationDate,\n\t\trawExtraField,\n\t\tzip64,\n\t\tzip64UncompressedSize,\n\t\tzip64CompressedSize,\n\t\tzip64Offset,\n\t\tzip64DiskNumberStart,\n\t\tpassword,\n\t\trawPassword,\n\t\tlevel,\n\t\tuseWebWorkers,\n\t\ttransferStreams,\n\t\tencryptionStrength,\n\t\textendedTimestamp,\n\t\tzipCrypto,\n\t\tbufferedWrite,\n\t\tcreateTempStream,\n\t\tkeepOrder,\n\t\tuseUnicodeFileNames,\n\t\tdataDescriptor,\n\t\tdataDescriptorSignature,\n\t\tsignal,\n\t\tmsDosCompatible,\n\t\tinternalFileAttribute: internalFileAttributes,\n\t\tinternalFileAttributes,\n\t\texternalFileAttribute: externalFileAttributes,\n\t\texternalFileAttributes,\n\t\tuseCompressionStream,\n\t\tpassThrough,\n\t\tencrypted: Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThrough && encrypted),\n\t\tsignature: options[PROPERTY_NAME_SIGNATURE],\n\t\tcompressionMethod,\n\t\tuncompressedSize,\n\t\toffset: zipWriter.offset - diskOffset,\n\t\tdiskNumberStart: diskNumber,\n\t\tuid,\n\t\tgid,\n\t\tsetuid,\n\t\tsetgid,\n\t\tsticky,\n\t\tunixMode,\n\t\tmsdosAttributesRaw,\n\t\tmsdosAttributes,\n\t\tunixExternalUpper\n\t});\n\tconst headerInfo = getHeaderInfo(options);\n\tconst dataDescriptorInfo = getDataDescriptorInfo(options);\n\tconst metadataSize = getLength(headerInfo.localHeaderArray, dataDescriptorInfo.dataDescriptorArray);\n\tmaximumEntrySize = metadataSize + maximumCompressedSize;\n\tif (zipWriter.options[OPTION_USDZ]) {\n\t\tmaximumEntrySize += maximumEntrySize + 64;\n\t}\n\tzipWriter.pendingEntriesSize += maximumEntrySize;\n\tlet fileEntry;\n\ttry {\n\t\tfileEntry = await getFileEntry(zipWriter, name, reader, { headerInfo, dataDescriptorInfo, metadataSize }, options);\n\t} finally {\n\t\tzipWriter.pendingEntriesSize -= maximumEntrySize;\n\t}\n\tObject.assign(fileEntry, { name, comment, extraField });\n\treturn new Entry(fileEntry);\n}\n\nasync function getFileEntry(zipWriter, name, reader, entryInfo, options) {\n\tconst {\n\t\tfiles,\n\t\twriter\n\t} = zipWriter;\n\tconst {\n\t\tkeepOrder,\n\t\tdataDescriptor,\n\t\tsignal\n\t} = options;\n\tconst {\n\t\theaderInfo\n\t} = entryInfo;\n\tconst usdz = zipWriter.options[OPTION_USDZ];\n\tconst previousFileEntry = Array.from(files.values()).pop();\n\tlet fileEntry = {};\n\tlet bufferedWrite;\n\tlet releaseLockWriter;\n\tlet releaseLockCurrentFileEntry;\n\tlet writingBufferedEntryData;\n\tlet writingEntryData;\n\tlet fileWriter;\n\tfiles.set(name, fileEntry);\n\ttry {\n\t\tlet lockPreviousFileEntry;\n\t\tif (keepOrder) {\n\t\t\tlockPreviousFileEntry = previousFileEntry && previousFileEntry.lock;\n\t\t\trequestLockCurrentFileEntry();\n\t\t}\n\t\tif ((options.bufferedWrite || !keepOrder || zipWriter.writerLocked || zipWriter.bufferedWrites || !dataDescriptor) && !usdz) {\n\t\t\tif (options.createTempStream) {\n\t\t\t\tfileWriter = await options.createTempStream();\n\t\t\t} else {\n\t\t\t\tfileWriter = new TransformStream(UNDEFINED_VALUE, UNDEFINED_VALUE, { highWaterMark: INFINITY_VALUE });\n\t\t\t}\n\t\t\tfileWriter.size = 0;\n\t\t\tbufferedWrite = true;\n\t\t\tzipWriter.bufferedWrites++;\n\t\t\tawait initStream(writer);\n\t\t} else {\n\t\t\tfileWriter = writer;\n\t\t\tawait requestLockWriter();\n\t\t}\n\t\tawait initStream(fileWriter);\n\t\tconst { writable, diskOffset } = writer;\n\t\tif (zipWriter.addSplitZipSignature) {\n\t\t\tdelete zipWriter.addSplitZipSignature;\n\t\t\tconst signatureArray = new Uint8Array(4);\n\t\t\tconst signatureArrayView = getDataView(signatureArray);\n\t\t\tsetUint32(signatureArrayView, 0, SPLIT_ZIP_FILE_SIGNATURE);\n\t\t\tawait writeData(writer, signatureArray);\n\t\t\tzipWriter.offset += 4;\n\t\t}\n\t\tif (usdz) {\n\t\t\tappendExtraFieldUSDZ(entryInfo, zipWriter.offset - diskOffset);\n\t\t}\n\t\tconst {\n\t\t\tlocalHeaderView,\n\t\t\tlocalHeaderArray\n\t\t} = headerInfo;\n\t\tif (!bufferedWrite) {\n\t\t\tawait lockPreviousFileEntry;\n\t\t\tawait skipDiskIfNeeded(writable);\n\t\t}\n\t\tconst { diskNumber } = writer;\n\t\tfileEntry.diskNumberStart = diskNumber;\n\t\tif (!bufferedWrite) {\n\t\t\twritingEntryData = true;\n\t\t\tawait writeData(fileWriter, localHeaderArray);\n\t\t}\n\t\tfileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);\n\t\tconst { zip64 } = fileEntry;\n\t\tif (!bufferedWrite) {\n\t\t\twritingEntryData = false;\n\t\t}\n\t\tfiles.set(name, fileEntry);\n\t\tfileEntry.filename = name;\n\t\tif (bufferedWrite) {\n\t\t\tawait Promise.all([fileWriter.writable.getWriter().close(), lockPreviousFileEntry]);\n\t\t\tawait requestLockWriter();\n\t\t\twritingBufferedEntryData = true;\n\t\t\tfileEntry.diskNumberStart = writer.diskNumber;\n\t\t\tfileEntry.offset = zipWriter.offset - writer.diskOffset;\n\t\t\tif (zip64) {\n\t\t\t\tupdateZip64ExtraField(fileEntry);\n\t\t\t}\n\t\t\tupdateLocalHeader(fileEntry, localHeaderView, options);\n\t\t\tawait skipDiskIfNeeded(writable);\n\t\t\tawait writeData(writer, localHeaderArray);\n\t\t\tawait fileWriter.readable.pipeTo(writable, { preventClose: true, preventAbort: true, signal });\n\t\t\twriter.size += fileWriter.size;\n\t\t\twritingBufferedEntryData = false;\n\t\t} else {\n\t\t\tfileEntry.offset = zipWriter.offset - diskOffset;\n\t\t\tif (zip64) {\n\t\t\t\tupdateZip64ExtraField(fileEntry);\n\t\t\t}\n\t\t}\n\t\tif (fileEntry.offset > MAX_32_BITS && !zip64) {\n\t\t\tthrow new Error(ERR_UNSUPPORTED_FORMAT);\n\t\t}\n\t\tzipWriter.offset += fileEntry.size;\n\t\treturn fileEntry;\n\t} catch (error) {\n\t\tif (writingBufferedEntryData || writingEntryData) {\n\t\t\tzipWriter.hasCorruptedEntries = true;\n\t\t\tif (error) {\n\t\t\t\ttry {\n\t\t\t\t\terror.corruptedEntry = true;\n\t\t\t\t} catch {\n\t\t\t\t\t// ignored\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (bufferedWrite) {\n\t\t\t\tzipWriter.offset += fileWriter.size;\n\t\t\t} else {\n\t\t\t\tzipWriter.offset = fileWriter.size;\n\t\t\t}\n\t\t}\n\t\tfiles.delete(name);\n\t\tthrow error;\n\t} finally {\n\t\tif (bufferedWrite) {\n\t\t\tzipWriter.bufferedWrites--;\n\t\t}\n\t\tif (releaseLockCurrentFileEntry) {\n\t\t\treleaseLockCurrentFileEntry();\n\t\t}\n\t\tif (releaseLockWriter) {\n\t\t\treleaseLockWriter();\n\t\t}\n\t}\n\n\tfunction requestLockCurrentFileEntry() {\n\t\tfileEntry.lock = new Promise(resolve => releaseLockCurrentFileEntry = resolve);\n\t}\n\n\tasync function requestLockWriter() {\n\t\tzipWriter.writerLocked = true;\n\t\tconst { lockWriter } = zipWriter;\n\t\tzipWriter.lockWriter = new Promise(resolve => releaseLockWriter = () => {\n\t\t\tzipWriter.writerLocked = false;\n\t\t\tresolve();\n\t\t});\n\t\tawait lockWriter;\n\t}\n\n\tasync function skipDiskIfNeeded(writable) {\n\t\tif (getLength(headerInfo.localHeaderArray) > writer.availableSize) {\n\t\t\twriter.availableSize = 0;\n\t\t\tawait writeData(writable, new Uint8Array());\n\t\t}\n\t}\n}\n\nasync function createFileEntry(reader, writer, { diskNumberStart, lock }, entryInfo, config, options) {\n\tconst {\n\t\theaderInfo,\n\t\tdataDescriptorInfo,\n\t\tmetadataSize\n\t} = entryInfo;\n\tconst {\n\t\theaderArray,\n\t\theaderView,\n\t\tlastModDate,\n\t\trawLastModDate,\n\t\tencrypted,\n\t\tcompressed,\n\t\tversion,\n\t\tcompressionMethod,\n\t\trawExtraFieldZip64,\n\t\tlocalExtraFieldZip64Length,\n\t\trawExtraFieldExtendedTimestamp,\n\t\textraFieldExtendedTimestampFlag,\n\t\trawExtraFieldNTFS,\n\t\trawExtraFieldUnix,\n\t\trawExtraFieldAES,\n\t} = headerInfo;\n\tconst { dataDescriptorArray } = dataDescriptorInfo;\n\tconst {\n\t\trawFilename,\n\t\tlastAccessDate,\n\t\tcreationDate,\n\t\tpassword,\n\t\trawPassword,\n\t\tlevel,\n\t\tzip64,\n\t\tzip64UncompressedSize,\n\t\tzip64CompressedSize,\n\t\tzip64Offset,\n\t\tzip64DiskNumberStart,\n\t\tzipCrypto,\n\t\tdataDescriptor,\n\t\tdirectory,\n\t\texecutable,\n\t\tversionMadeBy,\n\t\trawComment,\n\t\trawExtraField,\n\t\tuseWebWorkers,\n\t\ttransferStreams,\n\t\tonstart,\n\t\tonprogress,\n\t\tonend,\n\t\tsignal,\n\t\tencryptionStrength,\n\t\textendedTimestamp,\n\t\tmsDosCompatible,\n\t\tinternalFileAttributes,\n\t\texternalFileAttributes,\n\t\tuid,\n\t\tgid,\n\t\tunixMode,\n\t\tsetuid,\n\t\tsetgid,\n\t\tsticky,\n\t\tunixExternalUpper,\n\t\tmsdosAttributesRaw,\n\t\tmsdosAttributes,\n\t\tuseCompressionStream,\n\t\tpassThrough\n\t} = options;\n\tconst fileEntry = {\n\t\tlock,\n\t\tversionMadeBy,\n\t\tzip64,\n\t\tdirectory: Boolean(directory),\n\t\texecutable: Boolean(executable),\n\t\tfilenameUTF8: true,\n\t\trawFilename,\n\t\tcommentUTF8: true,\n\t\trawComment,\n\t\trawExtraFieldZip64,\n\t\tlocalExtraFieldZip64Length,\n\t\trawExtraFieldExtendedTimestamp,\n\t\trawExtraFieldNTFS,\n\t\trawExtraFieldUnix,\n\t\trawExtraFieldAES,\n\t\trawExtraField,\n\t\textendedTimestamp,\n\t\tmsDosCompatible,\n\t\tinternalFileAttributes,\n\t\texternalFileAttributes,\n\t\tdiskNumberStart,\n\t\tuid,\n\t\tgid,\n\t\tunixMode,\n\t\tsetuid,\n\t\tsetgid,\n\t\tsticky,\n\t\tunixExternalUpper,\n\t\tmsdosAttributesRaw,\n\t\tmsdosAttributes\n\t};\n\tlet {\n\t\tsignature,\n\t\tuncompressedSize\n\t} = options;\n\tlet compressedSize = 0;\n\tif (!passThrough) {\n\t\tuncompressedSize = 0;\n\t}\n\tconst { writable } = writer;\n\tif (reader) {\n\t\treader.chunkSize = getChunkSize(config);\n\t\tconst readable = reader.readable;\n\t\tconst size = reader.size;\n\t\tconst workerOptions = {\n\t\t\toptions: {\n\t\t\t\tcodecType: CODEC_DEFLATE,\n\t\t\t\tlevel,\n\t\t\t\trawPassword,\n\t\t\t\tpassword,\n\t\t\t\tencryptionStrength,\n\t\t\t\tzipCrypto: encrypted && zipCrypto,\n\t\t\t\tpasswordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & MAX_8_BITS,\n\t\t\t\tsigned: !passThrough,\n\t\t\t\tcompressed: compressed && !passThrough,\n\t\t\t\tencrypted: encrypted && !passThrough,\n\t\t\t\tuseWebWorkers,\n\t\t\t\tuseCompressionStream,\n\t\t\t\ttransferStreams\n\t\t\t},\n\t\t\tconfig,\n\t\t\tstreamOptions: { signal, size, onstart, onprogress, onend }\n\t\t};\n\t\ttry {\n\t\t\tconst result = await runWorker({ readable, writable }, workerOptions);\n\t\t\tcompressedSize = result.outputSize;\n\t\t\twriter.size += compressedSize;\n\t\t\tif (!passThrough) {\n\t\t\t\tuncompressedSize = result.inputSize;\n\t\t\t\tsignature = result.signature;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error.outputSize !== UNDEFINED_VALUE) {\n\t\t\t\twriter.size += error.outputSize;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t}\n\tsetEntryInfo({\n\t\tsignature,\n\t\tcompressedSize,\n\t\tuncompressedSize,\n\t\theaderInfo,\n\t\tdataDescriptorInfo\n\t}, options);\n\tif (dataDescriptor) {\n\t\tawait writeData(writer, dataDescriptorArray);\n\t}\n\tObject.assign(fileEntry, {\n\t\tuncompressedSize,\n\t\tcompressedSize,\n\t\tlastModDate,\n\t\trawLastModDate,\n\t\tcreationDate,\n\t\tlastAccessDate,\n\t\tencrypted,\n\t\tzipCrypto,\n\t\tsize: metadataSize + compressedSize,\n\t\tcompressionMethod,\n\t\tversion,\n\t\theaderArray,\n\t\theaderView,\n\t\tsignature,\n\t\textraFieldExtendedTimestampFlag,\n\t\tzip64UncompressedSize,\n\t\tzip64CompressedSize,\n\t\tzip64Offset,\n\t\tzip64DiskNumberStart\n\t});\n\treturn fileEntry;\n}\n\nfunction getHeaderInfo(options) {\n\tconst {\n\t\trawFilename,\n\t\tlastModDate,\n\t\tlastAccessDate,\n\t\tcreationDate,\n\t\tlevel,\n\t\tzip64,\n\t\tzipCrypto,\n\t\tuseUnicodeFileNames,\n\t\tdataDescriptor,\n\t\tdirectory,\n\t\trawExtraField,\n\t\tencryptionStrength,\n\t\textendedTimestamp,\n\t\tpassThrough,\n\t\tencrypted,\n\t\tzip64UncompressedSize,\n\t\tzip64CompressedSize,\n\t\tzip64Offset,\n\t\tzip64DiskNumberStart,\n\t\tuncompressedSize,\n\t\toffset,\n\t\tdiskNumberStart\n\t} = options;\n\tlet { version, compressionMethod } = options;\n\tconst compressed = !directory && (level > 0 || (level === UNDEFINED_VALUE && compressionMethod !== 0));\n\tlet rawExtraFieldZip64;\n\tlet rawLocalExtraFieldZip64;\n\tconst uncompressedFile = passThrough || !compressed;\n\tconst zip64ExtraFieldComplete = zip64 && (options.bufferedWrite || ((!zip64UncompressedSize && !zip64CompressedSize) || uncompressedFile));\n\tif (zip64) {\n\t\tlet rawExtraFieldZip64Length = 4;\n\t\tlet rawLocalExtraFieldZip64Length = 4;\n\t\tif (zip64UncompressedSize) {\n\t\t\trawExtraFieldZip64Length += 8;\n\t\t\trawLocalExtraFieldZip64Length += 8;\n\t\t}\n\t\tif (zip64CompressedSize) {\n\t\t\trawExtraFieldZip64Length += 8;\n\t\t\trawLocalExtraFieldZip64Length += 8;\n\t\t}\n\t\tif (zip64Offset) {\n\t\t\trawExtraFieldZip64Length += 8;\n\t\t}\n\t\tif (zip64DiskNumberStart) {\n\t\t\trawExtraFieldZip64Length += 4;\n\t\t}\n\t\trawExtraFieldZip64 = new Uint8Array(rawExtraFieldZip64Length);\n\t\tconst rawExtraFieldZip64View = getDataView(rawExtraFieldZip64);\n\t\trawLocalExtraFieldZip64 = new Uint8Array(rawLocalExtraFieldZip64Length);\n\t\tconst rawLocalExtraFieldZip64View = getDataView(rawLocalExtraFieldZip64);\n\t\tsetUint16(rawExtraFieldZip64View, 0, EXTRAFIELD_TYPE_ZIP64);\n\t\tsetUint16(rawExtraFieldZip64View, 2, getLength(rawExtraFieldZip64) - 4);\n\t\tsetUint16(rawLocalExtraFieldZip64View, 0, EXTRAFIELD_TYPE_ZIP64);\n\t\tsetUint16(rawLocalExtraFieldZip64View, 2, getLength(rawLocalExtraFieldZip64) - 4);\n\t\tif (zip64ExtraFieldComplete) {\n\t\t\tconst rawExtraFieldZip64View = getDataView(rawExtraFieldZip64);\n\t\t\tconst rawLocalExtraFieldZip64View = getDataView(rawLocalExtraFieldZip64);\n\t\t\tlet rawExtraFieldZip64Offset = 4;\n\t\t\tlet rawLocalExtraFieldZip64Offset = 4;\n\t\t\tif (zip64UncompressedSize) {\n\t\t\t\tsetBigUint64(rawExtraFieldZip64View, rawExtraFieldZip64Offset, BigInt(uncompressedSize));\n\t\t\t\trawExtraFieldZip64Offset += 8;\n\t\t\t\tsetBigUint64(rawLocalExtraFieldZip64View, rawLocalExtraFieldZip64Offset, BigInt(uncompressedSize));\n\t\t\t\trawLocalExtraFieldZip64Offset += 8;\n\t\t\t}\n\t\t\tif (zip64CompressedSize && uncompressedFile) {\n\t\t\t\tsetBigUint64(rawExtraFieldZip64View, rawExtraFieldZip64Offset, BigInt(uncompressedSize));\n\t\t\t\trawExtraFieldZip64Offset += 8;\n\t\t\t\tsetBigUint64(rawLocalExtraFieldZip64View, rawLocalExtraFieldZip64Offset, BigInt(uncompressedSize));\n\t\t\t\trawLocalExtraFieldZip64Offset += 8;\n\t\t\t}\n\t\t\tif (zip64Offset) {\n\t\t\t\tsetBigUint64(rawExtraFieldZip64View, rawExtraFieldZip64Offset, BigInt(offset));\n\t\t\t\trawExtraFieldZip64Offset += 8;\n\t\t\t}\n\t\t\tif (zip64DiskNumberStart) {\n\t\t\t\tsetUint32(rawExtraFieldZip64View, rawExtraFieldZip64Offset, diskNumberStart);\n\t\t\t\trawExtraFieldZip64Offset += 4;\n\t\t\t}\n\t\t\tif (rawLocalExtraFieldZip64Offset == 4) {\n\t\t\t\trawLocalExtraFieldZip64 = new Uint8Array();\n\t\t\t}\n\t\t}\n\t} else {\n\t\trawExtraFieldZip64 = new Uint8Array();\n\t\trawLocalExtraFieldZip64 = new Uint8Array();\n\t}\n\tlet rawExtraFieldAES;\n\tif (encrypted && !zipCrypto) {\n\t\trawExtraFieldAES = new Uint8Array(getLength(EXTRAFIELD_DATA_AES) + 2);\n\t\tconst extraFieldAESView = getDataView(rawExtraFieldAES);\n\t\tsetUint16(extraFieldAESView, 0, EXTRAFIELD_TYPE_AES);\n\t\tarraySet(rawExtraFieldAES, EXTRAFIELD_DATA_AES, 2);\n\t\tsetUint8(extraFieldAESView, 8, encryptionStrength);\n\t} else {\n\t\trawExtraFieldAES = new Uint8Array();\n\t}\n\tlet rawExtraFieldNTFS;\n\tlet rawExtraFieldExtendedTimestamp;\n\tlet extraFieldExtendedTimestampFlag;\n\tif (extendedTimestamp) {\n\t\trawExtraFieldExtendedTimestamp = new Uint8Array(9 + (lastAccessDate ? 4 : 0) + (creationDate ? 4 : 0));\n\t\tconst extraFieldExtendedTimestampView = getDataView(rawExtraFieldExtendedTimestamp);\n\t\tsetUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);\n\t\tsetUint16(extraFieldExtendedTimestampView, 2, getLength(rawExtraFieldExtendedTimestamp) - 4);\n\t\textraFieldExtendedTimestampFlag = 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0);\n\t\tsetUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag);\n\t\tlet offset = 5;\n\t\tsetUint32(extraFieldExtendedTimestampView, offset, Math.floor(lastModDate.getTime() / 1000));\n\t\toffset += 4;\n\t\tif (lastAccessDate) {\n\t\t\tsetUint32(extraFieldExtendedTimestampView, offset, Math.floor(lastAccessDate.getTime() / 1000));\n\t\t\toffset += 4;\n\t\t}\n\t\tif (creationDate) {\n\t\t\tsetUint32(extraFieldExtendedTimestampView, offset, Math.floor(creationDate.getTime() / 1000));\n\t\t}\n\t\ttry {\n\t\t\trawExtraFieldNTFS = new Uint8Array(36);\n\t\t\tconst extraFieldNTFSView = getDataView(rawExtraFieldNTFS);\n\t\t\tconst lastModTimeNTFS = getTimeNTFS(lastModDate);\n\t\t\tsetUint16(extraFieldNTFSView, 0, EXTRAFIELD_TYPE_NTFS);\n\t\t\tsetUint16(extraFieldNTFSView, 2, 32);\n\t\t\tsetUint16(extraFieldNTFSView, 8, EXTRAFIELD_TYPE_NTFS_TAG1);\n\t\t\tsetUint16(extraFieldNTFSView, 10, 24);\n\t\t\tsetBigUint64(extraFieldNTFSView, 12, lastModTimeNTFS);\n\t\t\tsetBigUint64(extraFieldNTFSView, 20, getTimeNTFS(lastAccessDate) || lastModTimeNTFS);\n\t\t\tsetBigUint64(extraFieldNTFSView, 28, getTimeNTFS(creationDate) || lastModTimeNTFS);\n\t\t} catch {\n\t\t\trawExtraFieldNTFS = new Uint8Array();\n\t\t}\n\t} else {\n\t\trawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array();\n\t}\n\tlet rawExtraFieldUnix;\n\ttry {\n\t\tconst { uid, gid, unixMode, setuid, setgid, sticky, unixExtraFieldType } = options;\n\t\tif (unixExtraFieldType && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE)) {\n\t\t\tconst uidBytes = packUnixId(uid);\n\t\t\tconst gidBytes = packUnixId(gid);\n\t\t\tlet modeArray = new Uint8Array();\n\t\t\tif (unixExtraFieldType == UNIX_EXTRA_FIELD_TYPE && unixMode !== UNDEFINED_VALUE) {\n\t\t\t\tlet modeToWrite = unixMode & MAX_16_BITS;\n\t\t\t\tif (setuid) {\n\t\t\t\t\tmodeToWrite |= FILE_ATTR_UNIX_SETUID_MASK;\n\t\t\t\t}\n\t\t\t\tif (setgid) {\n\t\t\t\t\tmodeToWrite |= FILE_ATTR_UNIX_SETGID_MASK;\n\t\t\t\t}\n\t\t\t\tif (sticky) {\n\t\t\t\t\tmodeToWrite |= FILE_ATTR_UNIX_STICKY_MASK;\n\t\t\t\t}\n\t\t\t\tmodeArray = new Uint8Array(2);\n\t\t\t\tconst modeDataView = new DataView(modeArray.buffer);\n\t\t\t\tmodeDataView.setUint16(0, modeToWrite, true);\n\t\t\t}\n\t\t\tconst payloadLength = 3 + uidBytes.length + gidBytes.length + modeArray.length;\n\t\t\trawExtraFieldUnix = new Uint8Array(4 + payloadLength);\n\t\t\tconst rawExtraFieldUnixView = getDataView(rawExtraFieldUnix);\n\t\t\tsetUint16(rawExtraFieldUnixView, 0, unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE ? EXTRAFIELD_TYPE_INFOZIP : EXTRAFIELD_TYPE_UNIX);\n\t\t\tsetUint16(rawExtraFieldUnixView, 2, payloadLength);\n\t\t\tsetUint8(rawExtraFieldUnixView, 4, 1);\n\t\t\tsetUint8(rawExtraFieldUnixView, 5, uidBytes.length);\n\t\t\tlet offset = 6;\n\t\t\tarraySet(rawExtraFieldUnix, uidBytes, offset);\n\t\t\toffset += uidBytes.length;\n\t\t\tsetUint8(rawExtraFieldUnixView, offset, gidBytes.length);\n\t\t\toffset++;\n\t\t\tarraySet(rawExtraFieldUnix, gidBytes, offset);\n\t\t\toffset += gidBytes.length;\n\t\t\tarraySet(rawExtraFieldUnix, modeArray, offset);\n\t\t} else {\n\t\t\trawExtraFieldUnix = new Uint8Array();\n\t\t}\n\t} catch {\n\t\trawExtraFieldUnix = new Uint8Array();\n\t}\n\tif (compressionMethod === UNDEFINED_VALUE) {\n\t\tcompressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;\n\t}\n\tif (zip64) {\n\t\tversion = version > VERSION_ZIP64 ? version : VERSION_ZIP64;\n\t}\n\tif (encrypted && !zipCrypto) {\n\t\tversion = version > VERSION_AES ? version : VERSION_AES;\n\t\trawExtraFieldAES[9] = compressionMethod;\n\t\tcompressionMethod = COMPRESSION_METHOD_AES;\n\t}\n\tconst localExtraFieldZip64Length = zip64ExtraFieldComplete ? getLength(rawLocalExtraFieldZip64) : 0;\n\tconst extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);\n\tconst {\n\t\theaderArray,\n\t\theaderView,\n\t\trawLastModDate\n\t} = getHeaderArrayData({\n\t\tversion,\n\t\tbitFlag: getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod),\n\t\tcompressionMethod,\n\t\tuncompressedSize,\n\t\tlastModDate: lastModDate < MIN_DATE ? MIN_DATE : lastModDate > MAX_DATE ? MAX_DATE : lastModDate,\n\t\trawFilename,\n\t\tzip64CompressedSize,\n\t\tzip64UncompressedSize,\n\t\textraFieldLength\n\t});\n\tlet localHeaderOffset = HEADER_SIZE;\n\tconst localHeaderArray = new Uint8Array(localHeaderOffset + getLength(rawFilename) + extraFieldLength);\n\tconst localHeaderView = getDataView(localHeaderArray);\n\tsetUint32(localHeaderView, 0, LOCAL_FILE_HEADER_SIGNATURE);\n\tarraySet(localHeaderArray, headerArray, 4);\n\tarraySet(localHeaderArray, rawFilename, localHeaderOffset);\n\tlocalHeaderOffset += getLength(rawFilename);\n\tif (zip64ExtraFieldComplete) {\n\t\tarraySet(localHeaderArray, rawLocalExtraFieldZip64, localHeaderOffset);\n\t}\n\tlocalHeaderOffset += localExtraFieldZip64Length;\n\tarraySet(localHeaderArray, rawExtraFieldAES, localHeaderOffset);\n\tlocalHeaderOffset += getLength(rawExtraFieldAES);\n\tarraySet(localHeaderArray, rawExtraFieldExtendedTimestamp, localHeaderOffset);\n\tlocalHeaderOffset += getLength(rawExtraFieldExtendedTimestamp);\n\tarraySet(localHeaderArray, rawExtraFieldNTFS, localHeaderOffset);\n\tlocalHeaderOffset += getLength(rawExtraFieldNTFS);\n\tarraySet(localHeaderArray, rawExtraFieldUnix, localHeaderOffset);\n\tlocalHeaderOffset += getLength(rawExtraFieldUnix);\n\tarraySet(localHeaderArray, rawExtraField, localHeaderOffset);\n\tif (dataDescriptor) {\n\t\tsetUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + 4, 0);\n\t\tsetUint32(localHeaderView, HEADER_OFFSET_UNCOMPRESSED_SIZE + 4, 0);\n\t}\n\treturn {\n\t\tlocalHeaderArray,\n\t\tlocalHeaderView,\n\t\theaderArray,\n\t\theaderView,\n\t\tlastModDate,\n\t\trawLastModDate,\n\t\tencrypted,\n\t\tcompressed,\n\t\tversion,\n\t\tcompressionMethod,\n\t\textraFieldExtendedTimestampFlag,\n\t\trawExtraFieldZip64,\n\t\tlocalExtraFieldZip64Length,\n\t\trawExtraFieldExtendedTimestamp,\n\t\trawExtraFieldNTFS,\n\t\trawExtraFieldUnix,\n\t\trawExtraFieldAES,\n\t\textraFieldLength\n\t};\n}\n\nfunction appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {\n\tconst { headerInfo } = entryInfo;\n\tlet { localHeaderArray, extraFieldLength } = headerInfo;\n\tlet localHeaderArrayView = getDataView(localHeaderArray);\n\tlet extraBytesLength = 64 - ((zipWriterOffset + getLength(localHeaderArray)) % 64);\n\tif (extraBytesLength < 4) {\n\t\textraBytesLength += 64;\n\t}\n\tconst rawExtraFieldUSDZ = new Uint8Array(extraBytesLength);\n\tconst extraFieldUSDZView = getDataView(rawExtraFieldUSDZ);\n\tsetUint16(extraFieldUSDZView, 0, EXTRAFIELD_TYPE_USDZ);\n\tsetUint16(extraFieldUSDZView, 2, extraBytesLength - 2);\n\tconst previousLocalHeaderArray = localHeaderArray;\n\theaderInfo.localHeaderArray = localHeaderArray = new Uint8Array(getLength(previousLocalHeaderArray) + extraBytesLength);\n\tarraySet(localHeaderArray, previousLocalHeaderArray);\n\tarraySet(localHeaderArray, rawExtraFieldUSDZ, getLength(previousLocalHeaderArray));\n\tlocalHeaderArrayView = getDataView(localHeaderArray);\n\tsetUint16(localHeaderArrayView, 28, extraFieldLength + extraBytesLength);\n\tentryInfo.metadataSize += extraBytesLength;\n}\n\nfunction packUnixId(id) {\n\tif (id === UNDEFINED_VALUE) {\n\t\treturn new Uint8Array();\n\t} else {\n\t\tconst dataArray = new Uint8Array(4);\n\t\tconst dataView = getDataView(dataArray);\n\t\tdataView.setUint32(0, id, true);\n\t\tlet length = 4;\n\t\twhile (length > 1 && dataArray[length - 1] === 0) {\n\t\t\tlength--;\n\t\t}\n\t\treturn dataArray.subarray(0, length);\n\t}\n}\n\nfunction normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {\n\tif (msdosAttributesRaw !== UNDEFINED_VALUE) {\n\t\tmsdosAttributesRaw = msdosAttributesRaw & MAX_8_BITS;\n\t} else if (msdosAttributes !== UNDEFINED_VALUE) {\n\t\tconst { readOnly, hidden, system, directory: msdDir, archive } = msdosAttributes;\n\t\tlet raw = 0;\n\t\tif (readOnly) raw |= FILE_ATTR_MSDOS_READONLY_MASK;\n\t\tif (hidden) raw |= FILE_ATTR_MSDOS_HIDDEN_MASK;\n\t\tif (system) raw |= FILE_ATTR_MSDOS_SYSTEM_MASK;\n\t\tif (msdDir) raw |= FILE_ATTR_MSDOS_DIR_MASK;\n\t\tif (archive) raw |= FILE_ATTR_MSDOS_ARCHIVE_MASK;\n\t\tmsdosAttributesRaw = raw & MAX_8_BITS;\n\t}\n\tif (msdosAttributes === UNDEFINED_VALUE) {\n\t\tmsdosAttributes = {\n\t\t\treadOnly: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_READONLY_MASK),\n\t\t\thidden: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_HIDDEN_MASK),\n\t\t\tsystem: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_SYSTEM_MASK),\n\t\t\tdirectory: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_DIR_MASK),\n\t\t\tarchive: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_ARCHIVE_MASK)\n\t\t};\n\t}\n\treturn { msdosAttributesRaw, msdosAttributes };\n}\n\nfunction getDataDescriptorInfo({\n\tzip64,\n\tdataDescriptor,\n\tdataDescriptorSignature\n}) {\n\tlet dataDescriptorArray = new Uint8Array();\n\tlet dataDescriptorView, dataDescriptorOffset = 0;\n\tlet dataDescriptorLength = zip64 ? DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH : DATA_DESCRIPTOR_RECORD_LENGTH;\n\tif (dataDescriptorSignature) {\n\t\tdataDescriptorLength += DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH;\n\t}\n\tif (dataDescriptor) {\n\t\tdataDescriptorArray = new Uint8Array(dataDescriptorLength);\n\t\tdataDescriptorView = getDataView(dataDescriptorArray);\n\t\tif (dataDescriptorSignature) {\n\t\t\tdataDescriptorOffset = DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH;\n\t\t\tsetUint32(dataDescriptorView, 0, DATA_DESCRIPTOR_RECORD_SIGNATURE);\n\t\t}\n\t}\n\treturn {\n\t\tdataDescriptorArray,\n\t\tdataDescriptorView,\n\t\tdataDescriptorOffset\n\t};\n}\n\nfunction setEntryInfo({\n\tsignature,\n\tcompressedSize,\n\tuncompressedSize,\n\theaderInfo,\n\tdataDescriptorInfo\n}, {\n\tzip64,\n\tzipCrypto,\n\tdataDescriptor\n}) {\n\tconst {\n\t\theaderView,\n\t\tencrypted\n\t} = headerInfo;\n\tconst {\n\t\tdataDescriptorView,\n\t\tdataDescriptorOffset\n\t} = dataDescriptorInfo;\n\tif ((!encrypted || zipCrypto) && signature !== UNDEFINED_VALUE) {\n\t\tsetUint32(headerView, HEADER_OFFSET_SIGNATURE, signature);\n\t\tif (dataDescriptor) {\n\t\t\tsetUint32(dataDescriptorView, dataDescriptorOffset, signature);\n\t\t}\n\t}\n\tif (zip64) {\n\t\tif (dataDescriptor) {\n\t\t\tsetBigUint64(dataDescriptorView, dataDescriptorOffset + 4, BigInt(compressedSize));\n\t\t\tsetBigUint64(dataDescriptorView, dataDescriptorOffset + 12, BigInt(uncompressedSize));\n\t\t}\n\t} else {\n\t\tsetUint32(headerView, HEADER_OFFSET_COMPRESSED_SIZE, compressedSize);\n\t\tsetUint32(headerView, HEADER_OFFSET_UNCOMPRESSED_SIZE, uncompressedSize);\n\t\tif (dataDescriptor) {\n\t\t\tsetUint32(dataDescriptorView, dataDescriptorOffset + 4, compressedSize);\n\t\t\tsetUint32(dataDescriptorView, dataDescriptorOffset + 8, uncompressedSize);\n\t\t}\n\t}\n}\n\nfunction updateLocalHeader({\n\trawFilename,\n\tencrypted,\n\tzip64,\n\tlocalExtraFieldZip64Length,\n\tsignature,\n\tcompressedSize,\n\tuncompressedSize,\n\tzip64UncompressedSize,\n\tzip64CompressedSize\n}, localHeaderView, { dataDescriptor }) {\n\tif (!dataDescriptor) {\n\t\tif (!encrypted) {\n\t\t\tsetUint32(localHeaderView, HEADER_OFFSET_SIGNATURE + 4, signature);\n\t\t}\n\t\tif (!zip64CompressedSize) {\n\t\t\tsetUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + 4, compressedSize);\n\t\t}\n\t\tif (!zip64UncompressedSize) {\n\t\t\tsetUint32(localHeaderView, HEADER_OFFSET_UNCOMPRESSED_SIZE + 4, uncompressedSize);\n\t\t}\n\t}\n\tif (zip64 && localExtraFieldZip64Length) {\n\t\tlet localHeaderOffset = HEADER_SIZE + getLength(rawFilename) + 4;\n\t\tif (zip64UncompressedSize) {\n\t\t\tsetBigUint64(localHeaderView, localHeaderOffset, BigInt(uncompressedSize));\n\t\t\tlocalHeaderOffset += 8;\n\t\t}\n\t\tif (zip64CompressedSize) {\n\t\t\tsetBigUint64(localHeaderView, localHeaderOffset, BigInt(compressedSize));\n\t\t\tlocalHeaderOffset += 8;\n\t\t}\n\t}\n}\n\nfunction updateZip64ExtraField({\n\tcompressedSize,\n\tuncompressedSize,\n\toffset,\n\tdiskNumberStart,\n\tzip64UncompressedSize,\n\tzip64CompressedSize,\n\tzip64Offset,\n\tzip64DiskNumberStart,\n\trawExtraFieldZip64\n}) {\n\tconst rawExtraFieldZip64View = getDataView(rawExtraFieldZip64);\n\tlet rawExtraFieldZip64Offset = 4;\n\tif (zip64UncompressedSize) {\n\t\tsetBigUint64(rawExtraFieldZip64View, rawExtraFieldZip64Offset, BigInt(uncompressedSize));\n\t\trawExtraFieldZip64Offset += 8;\n\t}\n\tif (zip64CompressedSize) {\n\t\tsetBigUint64(rawExtraFieldZip64View, rawExtraFieldZip64Offset, BigInt(compressedSize));\n\t\trawExtraFieldZip64Offset += 8;\n\t}\n\tif (zip64Offset) {\n\t\tsetBigUint64(rawExtraFieldZip64View, rawExtraFieldZip64Offset, BigInt(offset));\n\t\trawExtraFieldZip64Offset += 8;\n\t}\n\tif (zip64DiskNumberStart) {\n\t\tsetUint32(rawExtraFieldZip64View, rawExtraFieldZip64Offset, diskNumberStart);\n\t}\n}\n\nasync function closeFile(zipWriter, comment, options) {\n\tconst { files, writer } = zipWriter;\n\tconst { diskOffset } = writer;\n\tlet { diskNumber } = writer;\n\tlet offset = 0;\n\tlet directoryDataLength = 0;\n\tlet directoryOffset = zipWriter.offset - diskOffset;\n\tlet filesLength = files.size;\n\tfor (const [, fileEntry] of files) {\n\t\tconst {\n\t\t\trawFilename,\n\t\t\trawExtraFieldZip64,\n\t\t\trawExtraFieldAES,\n\t\t\trawComment,\n\t\t\trawExtraFieldNTFS,\n\t\t\trawExtraFieldUnix,\n\t\t\trawExtraField,\n\t\t\textendedTimestamp,\n\t\t\textraFieldExtendedTimestampFlag,\n\t\t\tlastModDate\n\t\t} = fileEntry;\n\t\tlet rawExtraFieldTimestamp;\n\t\tif (extendedTimestamp) {\n\t\t\trawExtraFieldTimestamp = new Uint8Array(9);\n\t\t\tconst extraFieldExtendedTimestampView = getDataView(rawExtraFieldTimestamp);\n\t\t\tsetUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);\n\t\t\tsetUint16(extraFieldExtendedTimestampView, 2, 5);\n\t\t\tsetUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag);\n\t\t\tsetUint32(extraFieldExtendedTimestampView, 5, Math.floor(lastModDate.getTime() / 1000));\n\t\t} else {\n\t\t\trawExtraFieldTimestamp = new Uint8Array();\n\t\t}\n\t\tfileEntry.rawExtraFieldExtendedTimestamp = rawExtraFieldTimestamp;\n\t\tdirectoryDataLength += 46 +\n\t\t\tgetLength(\n\t\t\t\trawFilename,\n\t\t\t\trawComment,\n\t\t\t\trawExtraFieldZip64,\n\t\t\t\trawExtraFieldAES,\n\t\t\t\trawExtraFieldNTFS,\n\t\t\t\trawExtraFieldUnix,\n\t\t\t\trawExtraFieldTimestamp,\n\t\t\t\trawExtraField);\n\t}\n\tconst directoryArray = new Uint8Array(directoryDataLength);\n\tconst directoryView = getDataView(directoryArray);\n\tawait initStream(writer);\n\tlet directoryDiskOffset = 0;\n\tfor (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {\n\t\tconst {\n\t\t\toffset: fileEntryOffset,\n\t\t\trawFilename,\n\t\t\trawExtraFieldZip64,\n\t\t\trawExtraFieldAES,\n\t\t\trawExtraFieldExtendedTimestamp,\n\t\t\trawExtraFieldNTFS,\n\t\t\trawExtraFieldUnix,\n\t\t\trawExtraField,\n\t\t\trawComment,\n\t\t\tversionMadeBy,\n\t\t\theaderArray,\n\t\t\theaderView,\n\t\t\tzip64,\n\t\t\tzip64UncompressedSize,\n\t\t\tzip64CompressedSize,\n\t\t\tzip64DiskNumberStart,\n\t\t\tzip64Offset,\n\t\t\tinternalFileAttributes,\n\t\t\texternalFileAttributes,\n\t\t\tdiskNumberStart,\n\t\t\tuncompressedSize,\n\t\t\tcompressedSize\n\t\t} = fileEntry;\n\t\tconst extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);\n\t\tsetUint32(directoryView, offset, CENTRAL_FILE_HEADER_SIGNATURE);\n\t\tsetUint16(directoryView, offset + 4, versionMadeBy);\n\t\tif (!zip64UncompressedSize) {\n\t\t\tsetUint32(headerView, HEADER_OFFSET_UNCOMPRESSED_SIZE, uncompressedSize);\n\t\t}\n\t\tif (!zip64CompressedSize) {\n\t\t\tsetUint32(headerView, HEADER_OFFSET_COMPRESSED_SIZE, compressedSize);\n\t\t}\n\t\tarraySet(directoryArray, headerArray, offset + 6);\n\t\tlet directoryOffset = offset + HEADER_SIZE;\n\t\tsetUint16(directoryView, directoryOffset, extraFieldLength);\n\t\tdirectoryOffset += 2;\n\t\tsetUint16(directoryView, directoryOffset, getLength(rawComment));\n\t\tdirectoryOffset += 2;\n\t\tsetUint16(directoryView, directoryOffset, zip64 && zip64DiskNumberStart ? MAX_16_BITS : diskNumberStart);\n\t\tdirectoryOffset += 2;\n\t\tsetUint16(directoryView, directoryOffset, internalFileAttributes);\n\t\tdirectoryOffset += 2;\n\t\tif (externalFileAttributes) {\n\t\t\tsetUint32(directoryView, directoryOffset, externalFileAttributes);\n\t\t}\n\t\tdirectoryOffset += 4;\n\t\tsetUint32(directoryView, directoryOffset, zip64 && zip64Offset ? MAX_32_BITS : fileEntryOffset);\n\t\tdirectoryOffset += 4;\n\t\tarraySet(directoryArray, rawFilename, directoryOffset);\n\t\tdirectoryOffset += getLength(rawFilename);\n\t\tarraySet(directoryArray, rawExtraFieldZip64, directoryOffset);\n\t\tdirectoryOffset += getLength(rawExtraFieldZip64);\n\t\tarraySet(directoryArray, rawExtraFieldAES, directoryOffset);\n\t\tdirectoryOffset += getLength(rawExtraFieldAES);\n\t\tarraySet(directoryArray, rawExtraFieldExtendedTimestamp, directoryOffset);\n\t\tdirectoryOffset += getLength(rawExtraFieldExtendedTimestamp);\n\t\tarraySet(directoryArray, rawExtraFieldNTFS, directoryOffset);\n\t\tdirectoryOffset += getLength(rawExtraFieldNTFS);\n\t\tarraySet(directoryArray, rawExtraFieldUnix, directoryOffset);\n\t\tdirectoryOffset += getLength(rawExtraFieldUnix);\n\t\tarraySet(directoryArray, rawExtraField, directoryOffset);\n\t\tdirectoryOffset += getLength(rawExtraField);\n\t\tarraySet(directoryArray, rawComment, directoryOffset);\n\t\tdirectoryOffset += getLength(rawComment);\n\t\tif (offset - directoryDiskOffset > writer.availableSize) {\n\t\t\twriter.availableSize = 0;\n\t\t\tawait writeData(writer, directoryArray.slice(directoryDiskOffset, offset));\n\t\t\tdirectoryDiskOffset = offset;\n\t\t}\n\t\toffset = directoryOffset;\n\t\tif (options.onprogress) {\n\t\t\ttry {\n\t\t\t\tawait options.onprogress(indexFileEntry + 1, files.size, new Entry(fileEntry));\n\t\t\t} catch {\n\t\t\t\t// ignored\n\t\t\t}\n\t\t}\n\t}\n\tawait writeData(writer, directoryDiskOffset ? directoryArray.slice(directoryDiskOffset) : directoryArray);\n\tlet lastDiskNumber = writer.diskNumber;\n\tconst { availableSize } = writer;\n\tif (availableSize < END_OF_CENTRAL_DIR_LENGTH) {\n\t\tlastDiskNumber++;\n\t}\n\tlet zip64 = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIP64);\n\tif (directoryOffset > MAX_32_BITS || directoryDataLength > MAX_32_BITS || filesLength > MAX_16_BITS || lastDiskNumber > MAX_16_BITS) {\n\t\tif (zip64 === false) {\n\t\t\tthrow new Error(ERR_UNSUPPORTED_FORMAT);\n\t\t} else {\n\t\t\tzip64 = true;\n\t\t}\n\t}\n\tconst endOfdirectoryArray = new Uint8Array(zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);\n\tconst endOfdirectoryView = getDataView(endOfdirectoryArray);\n\toffset = 0;\n\tif (zip64) {\n\t\tsetUint32(endOfdirectoryView, 0, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);\n\t\tsetBigUint64(endOfdirectoryView, 4, BigInt(44));\n\t\tsetUint16(endOfdirectoryView, 12, 45);\n\t\tsetUint16(endOfdirectoryView, 14, 45);\n\t\tsetUint32(endOfdirectoryView, 16, lastDiskNumber);\n\t\tsetUint32(endOfdirectoryView, 20, diskNumber);\n\t\tsetBigUint64(endOfdirectoryView, 24, BigInt(filesLength));\n\t\tsetBigUint64(endOfdirectoryView, 32, BigInt(filesLength));\n\t\tsetBigUint64(endOfdirectoryView, 40, BigInt(directoryDataLength));\n\t\tsetBigUint64(endOfdirectoryView, 48, BigInt(directoryOffset));\n\t\tsetUint32(endOfdirectoryView, 56, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);\n\t\tsetBigUint64(endOfdirectoryView, 64, BigInt(directoryOffset) + BigInt(directoryDataLength));\n\t\tsetUint32(endOfdirectoryView, 72, lastDiskNumber + 1);\n\t\tconst supportZip64SplitFile = getOptionValue(zipWriter, options, OPTION_SUPPORT_ZIP64_SPLIT_FILE, true);\n\t\tif (supportZip64SplitFile) {\n\t\t\tlastDiskNumber = MAX_16_BITS;\n\t\t\tdiskNumber = MAX_16_BITS;\n\t\t}\n\t\tfilesLength = MAX_16_BITS;\n\t\tdirectoryOffset = MAX_32_BITS;\n\t\tdirectoryDataLength = MAX_32_BITS;\n\t\toffset += ZIP64_END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH;\n\t}\n\tsetUint32(endOfdirectoryView, offset, END_OF_CENTRAL_DIR_SIGNATURE);\n\tsetUint16(endOfdirectoryView, offset + 4, lastDiskNumber);\n\tsetUint16(endOfdirectoryView, offset + 6, diskNumber);\n\tsetUint16(endOfdirectoryView, offset + 8, filesLength);\n\tsetUint16(endOfdirectoryView, offset + 10, filesLength);\n\tsetUint32(endOfdirectoryView, offset + 12, directoryDataLength);\n\tsetUint32(endOfdirectoryView, offset + 16, directoryOffset);\n\tconst commentLength = getLength(comment);\n\tif (commentLength) {\n\t\tif (commentLength <= MAX_16_BITS) {\n\t\t\tsetUint16(endOfdirectoryView, offset + 20, commentLength);\n\t\t} else {\n\t\t\tthrow new Error(ERR_INVALID_COMMENT);\n\t\t}\n\t}\n\tawait writeData(writer, endOfdirectoryArray);\n\tif (commentLength) {\n\t\tawait writeData(writer, comment);\n\t}\n}\n\nasync function writeData(writer, array) {\n\tconst { writable } = writer;\n\tconst streamWriter = writable.getWriter();\n\ttry {\n\t\tawait streamWriter.ready;\n\t\twriter.size += getLength(array);\n\t\tawait streamWriter.write(array);\n\t} finally {\n\t\tstreamWriter.releaseLock();\n\t}\n}\n\nfunction getTimeNTFS(date) {\n\tif (date) {\n\t\treturn ((BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000));\n\t}\n}\n\nfunction getOptionValue(zipWriter, options, name, defaultValue) {\n\tconst result = options[name] === UNDEFINED_VALUE ? zipWriter.options[name] : options[name];\n\treturn result === UNDEFINED_VALUE ? defaultValue : result;\n}\n\nfunction getMaximumCompressedSize(uncompressedSize) {\n\treturn uncompressedSize + (5 * (Math.floor(uncompressedSize / 16383) + 1));\n}\n\nfunction setUint8(view, offset, value) {\n\tview.setUint8(offset, value);\n}\n\nfunction setUint16(view, offset, value) {\n\tview.setUint16(offset, value, true);\n}\n\nfunction setUint32(view, offset, value) {\n\tview.setUint32(offset, value, true);\n}\n\nfunction setBigUint64(view, offset, value) {\n\tview.setBigUint64(offset, value, true);\n}\n\nfunction arraySet(array, typedArray, offset) {\n\tarray.set(typedArray, offset);\n}\n\nfunction getDataView(array) {\n\treturn new DataView(array.buffer);\n}\n\nfunction getLength(...arrayLikes) {\n\tlet result = 0;\n\tarrayLikes.forEach(arrayLike => arrayLike && (result += arrayLike.length));\n\treturn result;\n}\n\nfunction getHeaderArrayData({\n\tversion,\n\tbitFlag,\n\tcompressionMethod,\n\tuncompressedSize,\n\tcompressedSize,\n\tlastModDate,\n\trawFilename,\n\tzip64CompressedSize,\n\tzip64UncompressedSize,\n\textraFieldLength\n}) {\n\tconst headerArray = new Uint8Array(HEADER_SIZE - 4);\n\tconst headerView = getDataView(headerArray);\n\tsetUint16(headerView, 0, version);\n\tsetUint16(headerView, 2, bitFlag);\n\tsetUint16(headerView, 4, compressionMethod);\n\tconst dateArray = new Uint32Array(1);\n\tconst dateView = getDataView(dateArray);\n\tsetUint16(dateView, 0, (((lastModDate.getHours() << 6) | lastModDate.getMinutes()) << 5) | lastModDate.getSeconds() / 2);\n\tsetUint16(dateView, 2, ((((lastModDate.getFullYear() - 1980) << 4) | (lastModDate.getMonth() + 1)) << 5) | lastModDate.getDate());\n\tconst rawLastModDate = dateArray[0];\n\tsetUint32(headerView, 6, rawLastModDate);\n\tif (zip64CompressedSize || compressedSize !== UNDEFINED_VALUE) {\n\t\tsetUint32(headerView, HEADER_OFFSET_COMPRESSED_SIZE, zip64CompressedSize ? MAX_32_BITS : compressedSize);\n\t}\n\tif (zip64UncompressedSize || uncompressedSize !== UNDEFINED_VALUE) {\n\t\tsetUint32(headerView, HEADER_OFFSET_UNCOMPRESSED_SIZE, zip64UncompressedSize ? MAX_32_BITS : uncompressedSize);\n\t}\n\tsetUint16(headerView, 22, getLength(rawFilename));\n\tsetUint16(headerView, 24, extraFieldLength);\n\treturn {\n\t\theaderArray,\n\t\theaderView,\n\t\trawLastModDate\n\t};\n}\n\nfunction getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod) {\n\tlet bitFlag = 0;\n\tif (useUnicodeFileNames) {\n\t\tbitFlag = bitFlag | BITFLAG_LANG_ENCODING_FLAG;\n\t}\n\tif (dataDescriptor) {\n\t\tbitFlag = bitFlag | BITFLAG_DATA_DESCRIPTOR;\n\t}\n\tif (compressionMethod == COMPRESSION_METHOD_DEFLATE || compressionMethod == COMPRESSION_METHOD_DEFLATE_64) {\n\t\tif (level >= 0 && level <= 3) {\n\t\t\tbitFlag = bitFlag | BITFLAG_LEVEL_SUPER_FAST_MASK;\n\t\t}\n\t\tif (level > 3 && level <= 5) {\n\t\t\tbitFlag = bitFlag | BITFLAG_LEVEL_FAST_MASK;\n\t\t}\n\t\tif (level == 9) {\n\t\t\tbitFlag = bitFlag | BITFLAG_LEVEL_MAX_MASK;\n\t\t}\n\t}\n\tif (encrypted) {\n\t\tbitFlag = bitFlag | BITFLAG_ENCRYPTED;\n\t}\n\treturn bitFlag;\n}\n","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport { configure } from \"./core/configuration.js\";\n\ntry {\n\tconfigure({ baseURI: import.meta.url });\n} catch {\n\t// ignored\n}\n\nexport * from \"./zip-core-reader.js\";\nexport * from \"./zip-core-writer.js\";\nexport {\n\tReader,\n\tWriter,\n\tTextReader,\n\tTextWriter,\n\tData64URIReader,\n\tData64URIWriter,\n\tBlobReader,\n\tBlobWriter,\n\tHttpReader,\n\tHttpRangeReader,\n\tUint8ArrayWriter,\n\tUint8ArrayReader,\n\tSplitDataReader,\n\tSplitDataWriter,\n\tERR_HTTP_RANGE\n} from \"./core/io.js\";\nexport {\n\tgetMimeType\n} from \"./core/util/default-mime-type.js\";\nexport {\n\tconfigure\n} from \"./core/configuration.js\";","const A=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";function g(g){let B;g({wasmURI:()=>(B||(B=\"data:application/wasm;base64,\"+(g=>{g=(g=>{const B=(g=(g+\"\").replace(/[^A-Za-z0-9+/=]/g,\"\")).length,E=[];for(let I=0;B>I;I+=4){const B=A.indexOf(g[I])<<18|A.indexOf(g[I+1])<<12|(63&A.indexOf(g[I+2]))<<6|63&A.indexOf(g[I+3]);E.push(B>>16&255),\"=\"!==g[I+2]&&E.push(B>>8&255),\"=\"!==g[I+3]&&E.push(255&B)}return new Uint8Array(E)})(g);let B=new Uint8Array(1024),E=0;for(let A=0;A<g.length;){const C=g[A++];if(128&C){const Q=3+(127&C),D=g[A++]<<8|g[A++],o=E-D;I(E+Q);for(let A=0;Q>A;A++)B[E++]=B[o+A]}else{const Q=C;I(E+Q);for(let I=0;Q>I&&A<g.length;I++)B[E++]=g[A++]}}return(g=>{let B=\"\";const E=g.length;let I=0;for(;E>I+2;I+=3){const E=g[I]<<16|g[I+1]<<8|g[I+2];B+=A[E>>18&63]+A[E>>12&63]+A[E>>6&63]+A[63&E]}const C=E-I;if(1===C){const E=g[I]<<16;B+=A[E>>18&63]+A[E>>12&63]+\"==\"}else if(2===C){const E=g[I]<<16|g[I+1]<<8;B+=A[E>>18&63]+A[E>>12&63]+A[E>>6&63]+\"=\"}return B})(new Uint8Array(B.buffer.slice(0,E)));function I(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const I=new Uint8Array(g);I.set(B.subarray(0,E)),B=I}}})(\"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BAGZgAAEAVmAAAQB2YAABAE5gAAEAbmAAAQBeYAABAH5gAAEAQWAAAQBhYAABAFFgAAEAcWAAAQBJYAABAGlgAAEAWWAAAQB5YAABAEVgAAEAZWAAAQBVYAABAHVgAAEATWAAAQBtYAABAF1gAAEAfWAAAQBDYAABAGNgAAEAU2AAAQBzYAABIARMwIArYAABAFtgAAEAe2AAAQBHYAABAGdgAAEAV2AAAQB3YAABAE9gAAEAb2AAAQBfYAABAH9gAAEAROAAMIFEwEJAJOAAAgBk4AACAFTgAAIAVOAAAgB04AACAHTgAAIATOAAAgBM4AACAGzgAAIAbOAAAgBc4AACAFzgAAIAfOAAAgB84AACAELgAAIgBDagAQCgAAEgAAIAUuAAAgBS4AACAHLgAAIAcuAAAgBK4AACAErgAAIAauAAAgBq4AACAFrgAAIAWuAAAgB64AACAHrgAAIARuAAAgBG4AACAGbgAAIAZuAAAgBW4AACAFbgAAIAduAAAgB24AACAE7gAAIATuAAAgBu4AACAG7gAAIAXuAAAgBe4AACAH7gAAIAfuAAAiBA7YBB4AACAGHgAAIAYeAAAgBR4AACAFHgAAIAceAAAgBx4AACAEngAAIASeAAAgBp4AACAGngAAIAWeAAAgBZ4AACAHngAAIAeeAAAgBF4AACAEXgAAIAZeAAAgBl4AACAFXgAAIAVeAAAgB14AACAHXgAAIATeAAAgBN4AACAG3gAAIAbeAAAgBd4AACAF3gAAIAfeAAAgB94AACAEPgAAIAQ+AAAgBj4AACAGPgAAIAU+AAAgBT4AACAHPgAAIAc+AAAgBL4AACAEvgAAIAa+AAAgBr4AACAFvgAAIAW+AAAgB74AACAHvgAAIAR+AAAgBH4AACAGfgAAIAZ+AAAgBX4AACAFfgAAIAd+AAAgB34AACAE/gAAIAT+AAAgBv4AACAG/gAAIAX+AAAgBf4AACAH/gAAIAf+AAAiBBAoBQIAABAEggAAEAWCAAAQBEIAABAFQgAAEATCAAAQBcIIFVgMHAEiAAAQBKIAABAFogAAEARiAAAQBWIAABAE4gAAEAXiAAAQBBIAABAFEgAAEASSAAAQBZIAABAEUgAAEAVSAAAQBNIAABAF0gAAEAQOAAEIBg4AABAFDgAAEAcOAAAQBI4AABAGjgAAEAWOAAAQB44AABIC+K4AAdIECxgEFgABcAQWCBUoBFIAABAEMgAAEARyAAASAvlaABEQBBYIGBAEaggXqAQWAA9QBBYADuAEFgAOcgE92gAAEARGAAAQBCYAABAEZgAAEgQACARWAAAQBDYAABAEdgAAEgL59gAKkgQZAAQWAAiyBBaYBBYABtAEFgD3fAxsLTYMfuYcABIC+rooABIEHUYkABAEEjAAEAQWKAAQEQbAcC4C9CosAS40AO4UALwEGhAAEgQWIgQAEgQEKgQAEgQGSgQAEgIS2ggAEAQuEAAQBDIQABIAF24FHeQTgHQsjhQBfhQXLAhARgAVtBgcJBgoFC4A6uAQNAg4BgAclBJQeC2mFAJCFAIiFAICFAHiBAGiBAFyBBh8BEIAABAEUgAAEARiAAAQBHIAABAEggAAEASiAAAQBMIAABAE4gAAEAUCAAAQBUIAABIEGvQFwgAAEAYCAAAQBoIAABAHAgAAEAeCAAG8DHwtyjQBvgQBrgQBngQBjgQBfgQBbgQBXgQBTgQBPgQBLgQBHgQBDgQE8AYCvAEGAUc0CC22BAMcBBIAAAgEIgAAEgQEzgQJLARCAAA6DAAyBnqyAqmuEACSBB3OBAE8BCIAACIEAGIUADIEIt4MADAEggQCUgDKEgQBrAYCBCC8BBIMADIA/SAoBABAMAEGRIQv/gCUfgMDAgIKxBQgJCQoKgEk3gAABAQ2AAAEBDoAAAQEPgAABARCEAAEBEYQAAQEShAABAROEAAEBFIwAAQEVjAABARaMAAEBF4wAAQEYnAABARmcAAEBGpwAAQEbmwABARyBffsEBAQFBYHB1QEHgAABAQiEAAGAXSqCAAEBCowAAYAnsooAAYEBMJkAAYEBTJkAAYEBaLkAAYEBpLkAAYIDdYABzoUBvI0BqJ0BkLwBgAIbHLwAAQEdvAABgA9PgH05A9AqAQ==\")),B)})}export{g as configureZlibModule};\n","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright \n notice, this list of conditions and the following disclaimer in \n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* global WebAssembly, URL, fetch, atob */\n\nimport { setWasmExports } from \"./zlib-streams.js\";\n\nlet initializedModule = false;\n\nasync function initModule(wasmURI, { baseURI }) {\n\tif (!initializedModule) {\n\t\tlet arrayBuffer, uri;\n\t\ttry {\n\t\t\ttry {\n\t\t\t\turi = new URL(wasmURI, baseURI);\n\t\t\t} catch {\n\t\t\t\t// ignored\n\t\t\t}\n\t\t\tconst response = await fetch(uri);\n\t\t\tarrayBuffer = await response.arrayBuffer();\n\t\t} catch (error) {\n\t\t\tif (wasmURI.startsWith(\"data:application/wasm;base64,\")) {\n\t\t\t\tarrayBuffer = arrayBufferFromDataURI(wasmURI);\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst wasmInstance = await WebAssembly.instantiate(arrayBuffer);\n\t\tsetWasmExports(wasmInstance.instance.exports);\n\t\tinitializedModule = true;\n\t}\n}\n\nfunction resetWasmModule() {\n\tinitializedModule = false;\n}\n\nfunction arrayBufferFromDataURI(dataURI) {\n\tconst base64 = dataURI.split(\",\")[1];\n\tconst binary = atob(base64);\n\tconst len = binary.length;\n\tconst bytes = new Uint8Array(len);\n\tfor (let i = 0; i < len; ++i) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\treturn bytes.buffer;\n}\n\nexport {\n\tsetWasmExports,\n\tCompressionStreamZlib,\n\tDecompressionStreamZlib\n} from \"./zlib-streams.js\";\nexport {\n\tinitModule,\n\tresetWasmModule,\n\tinitializedModule\n};","/*\n Copyright (c) 2025 Gildas Lormeau. All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in\n the documentation and/or other materials provided with the distribution.\n\n 3. The names of the authors may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,\n INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\n OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport { FUNCTION_TYPE } from \"./core/constants.js\";\nimport { configure } from \"./core/configuration.js\";\nimport { configureZlibModule } from \"./core/zlib-streams-inline.js\";\nimport { configureWorker } from \"./core/codec-worker.js\";\nimport { terminateWorkers } from \"./core/codec-pool.js\";\nimport { initModule, resetWasmModule, CompressionStreamZlib, DecompressionStreamZlib } from \"./core/streams/zlib-wasm/zlib-streams-loader.js\";\n\nlet modulePromise;\n\nconfigureZlibModule(configure);\nconfigureWorker({\n\tinitModule: config => {\n\t\tif (!modulePromise) {\n\t\t\tlet { wasmURI } = config;\n\t\t\t// deno-lint-ignore valid-typeof\n\t\t\tif (typeof wasmURI == FUNCTION_TYPE) {\n\t\t\t\twasmURI = wasmURI();\n\t\t\t}\n\t\t\tmodulePromise = initModule(wasmURI, config);\n\n\t\t}\n\t\treturn modulePromise;\n\t}\n});\nconfigure({\n\tCompressionStreamZlib,\n\tDecompressionStreamZlib\n});\n\nexport { terminateWorkersAndModule as terminateWorkers };\n\nfunction terminateWorkersAndModule() {\n\tmodulePromise = null;\n\tterminateWorkers();\n\tresetWasmModule();\n}","export const VERSION = '1.139.0';\nexport { ApproximateTerrainHeights } from '@cesium/engine';\nexport { ArcGISTiledElevationTerrainProvider } from '@cesium/engine';\nexport { ArcType } from '@cesium/engine';\nexport { ArticulationStageType } from '@cesium/engine';\nexport { AssociativeArray } from '@cesium/engine';\nexport { AttributeCompression } from '@cesium/engine';\nexport { AxisAlignedBoundingBox } from '@cesium/engine';\nexport { BingMapsGeocoderService } from '@cesium/engine';\nexport { BoundingRectangle } from '@cesium/engine';\nexport { BoundingSphere } from '@cesium/engine';\nexport { BoxGeometry } from '@cesium/engine';\nexport { BoxOutlineGeometry } from '@cesium/engine';\nexport { Cartesian2 } from '@cesium/engine';\nexport { Cartesian3 } from '@cesium/engine';\nexport { Cartesian4 } from '@cesium/engine';\nexport { Cartographic } from '@cesium/engine';\nexport { CartographicGeocoderService } from '@cesium/engine';\nexport { CatmullRomSpline } from '@cesium/engine';\nexport { Cesium3DTilesTerrainData } from '@cesium/engine';\nexport { Cesium3DTilesTerrainGeometryProcessor } from '@cesium/engine';\nexport { Cesium3DTilesTerrainProvider } from '@cesium/engine';\nexport { CesiumTerrainProvider } from '@cesium/engine';\nexport { Check } from '@cesium/engine';\nexport { CircleGeometry } from '@cesium/engine';\nexport { CircleOutlineGeometry } from '@cesium/engine';\nexport { Clock } from '@cesium/engine';\nexport { ClockRange } from '@cesium/engine';\nexport { ClockStep } from '@cesium/engine';\nexport { Color } from '@cesium/engine';\nexport { ColorGeometryInstanceAttribute } from '@cesium/engine';\nexport { ComponentDatatype } from '@cesium/engine';\nexport { CompressedTextureBuffer } from '@cesium/engine';\nexport { ConstantSpline } from '@cesium/engine';\nexport { CoplanarPolygonGeometry } from '@cesium/engine';\nexport { CoplanarPolygonGeometryLibrary } from '@cesium/engine';\nexport { CoplanarPolygonOutlineGeometry } from '@cesium/engine';\nexport { CornerType } from '@cesium/engine';\nexport { CorridorGeometry } from '@cesium/engine';\nexport { CorridorGeometryLibrary } from '@cesium/engine';\nexport { CorridorOutlineGeometry } from '@cesium/engine';\nexport { Credit } from '@cesium/engine';\nexport { CubicRealPolynomial } from '@cesium/engine';\nexport { CullingVolume } from '@cesium/engine';\nexport { CustomHeightmapTerrainProvider } from '@cesium/engine';\nexport { CylinderGeometry } from '@cesium/engine';\nexport { CylinderGeometryLibrary } from '@cesium/engine';\nexport { CylinderOutlineGeometry } from '@cesium/engine';\nexport { DefaultProxy } from '@cesium/engine';\nexport { DeveloperError } from '@cesium/engine';\nexport { DistanceDisplayCondition } from '@cesium/engine';\nexport { DistanceDisplayConditionGeometryInstanceAttribute } from '@cesium/engine';\nexport { DoubleEndedPriorityQueue } from '@cesium/engine';\nexport { DoublyLinkedList } from '@cesium/engine';\nexport { EarthOrientationParameters } from '@cesium/engine';\nexport { EarthOrientationParametersSample } from '@cesium/engine';\nexport { EasingFunction } from '@cesium/engine';\nexport { EllipseGeometry } from '@cesium/engine';\nexport { EllipseGeometryLibrary } from '@cesium/engine';\nexport { EllipseOutlineGeometry } from '@cesium/engine';\nexport { Ellipsoid } from '@cesium/engine';\nexport { EllipsoidGeodesic } from '@cesium/engine';\nexport { EllipsoidGeometry } from '@cesium/engine';\nexport { EllipsoidOutlineGeometry } from '@cesium/engine';\nexport { EllipsoidRhumbLine } from '@cesium/engine';\nexport { EllipsoidTangentPlane } from '@cesium/engine';\nexport { EllipsoidTerrainProvider } from '@cesium/engine';\nexport { EllipsoidalOccluder } from '@cesium/engine';\nexport { EncodedCartesian3 } from '@cesium/engine';\nexport { Event } from '@cesium/engine';\nexport { EventHelper } from '@cesium/engine';\nexport { ExtrapolationType } from '@cesium/engine';\nexport { FeatureDetection } from '@cesium/engine';\nexport { Frozen } from '@cesium/engine';\nexport { FrustumGeometry } from '@cesium/engine';\nexport { FrustumOutlineGeometry } from '@cesium/engine';\nexport { Fullscreen } from '@cesium/engine';\nexport { GeocodeType } from '@cesium/engine';\nexport { GeocoderService } from '@cesium/engine';\nexport { GeographicProjection } from '@cesium/engine';\nexport { GeographicTilingScheme } from '@cesium/engine';\nexport { Geometry } from '@cesium/engine';\nexport { GeometryAttribute } from '@cesium/engine';\nexport { GeometryAttributes } from '@cesium/engine';\nexport { GeometryFactory } from '@cesium/engine';\nexport { GeometryInstance } from '@cesium/engine';\nexport { GeometryInstanceAttribute } from '@cesium/engine';\nexport { GeometryOffsetAttribute } from '@cesium/engine';\nexport { GeometryPipeline } from '@cesium/engine';\nexport { GeometryType } from '@cesium/engine';\nexport { GoogleEarthEnterpriseMetadata } from '@cesium/engine';\nexport { GoogleEarthEnterpriseTerrainData } from '@cesium/engine';\nexport { GoogleEarthEnterpriseTerrainProvider } from '@cesium/engine';\nexport { GoogleEarthEnterpriseTileInformation } from '@cesium/engine';\nexport { GoogleGeocoderService } from '@cesium/engine';\nexport { GoogleMaps } from '@cesium/engine';\nexport { GregorianDate } from '@cesium/engine';\nexport { GroundPolylineGeometry } from '@cesium/engine';\nexport { HeadingPitchRange } from '@cesium/engine';\nexport { HeadingPitchRoll } from '@cesium/engine';\nexport { Heap } from '@cesium/engine';\nexport { HeightmapEncoding } from '@cesium/engine';\nexport { HeightmapTerrainData } from '@cesium/engine';\nexport { HeightmapTessellator } from '@cesium/engine';\nexport { HermitePolynomialApproximation } from '@cesium/engine';\nexport { HermiteSpline } from '@cesium/engine';\nexport { HilbertOrder } from '@cesium/engine';\nexport { ITwinPlatform } from '@cesium/engine';\nexport { Iau2000Orientation } from '@cesium/engine';\nexport { Iau2006XysData } from '@cesium/engine';\nexport { Iau2006XysSample } from '@cesium/engine';\nexport { IauOrientationAxes } from '@cesium/engine';\nexport { IauOrientationParameters } from '@cesium/engine';\nexport { IndexDatatype } from '@cesium/engine';\nexport { InterpolationAlgorithm } from '@cesium/engine';\nexport { InterpolationType } from '@cesium/engine';\nexport { Intersect } from '@cesium/engine';\nexport { IntersectionTests } from '@cesium/engine';\nexport { Intersections2D } from '@cesium/engine';\nexport { Interval } from '@cesium/engine';\nexport { Ion } from '@cesium/engine';\nexport { IonGeocodeProviderType } from '@cesium/engine';\nexport { IonGeocoderService } from '@cesium/engine';\nexport { IonResource } from '@cesium/engine';\nexport { Iso8601 } from '@cesium/engine';\nexport { JulianDate } from '@cesium/engine';\nexport { KTX2Transcoder } from '@cesium/engine';\nexport { KeyboardEventModifier } from '@cesium/engine';\nexport { LagrangePolynomialApproximation } from '@cesium/engine';\nexport { LeapSecond } from '@cesium/engine';\nexport { LinearApproximation } from '@cesium/engine';\nexport { LinearSpline } from '@cesium/engine';\nexport { ManagedArray } from '@cesium/engine';\nexport { MapProjection } from '@cesium/engine';\nexport { Math } from '@cesium/engine';\nexport { Matrix2 } from '@cesium/engine';\nexport { Matrix3 } from '@cesium/engine';\nexport { Matrix4 } from '@cesium/engine';\nexport { MorphWeightSpline } from '@cesium/engine';\nexport { MortonOrder } from '@cesium/engine';\nexport { NearFarScalar } from '@cesium/engine';\nexport { Occluder } from '@cesium/engine';\nexport { OffsetGeometryInstanceAttribute } from '@cesium/engine';\nexport { OpenCageGeocoderService } from '@cesium/engine';\nexport { OrientedBoundingBox } from '@cesium/engine';\nexport { OrthographicFrustum } from '@cesium/engine';\nexport { OrthographicOffCenterFrustum } from '@cesium/engine';\nexport { Packable } from '@cesium/engine';\nexport { PackableForInterpolation } from '@cesium/engine';\nexport { PeliasGeocoderService } from '@cesium/engine';\nexport { PerspectiveFrustum } from '@cesium/engine';\nexport { PerspectiveOffCenterFrustum } from '@cesium/engine';\nexport { PinBuilder } from '@cesium/engine';\nexport { PixelFormat } from '@cesium/engine';\nexport { Plane } from '@cesium/engine';\nexport { PlaneGeometry } from '@cesium/engine';\nexport { PlaneOutlineGeometry } from '@cesium/engine';\nexport { PolygonGeometry } from '@cesium/engine';\nexport { PolygonGeometryLibrary } from '@cesium/engine';\nexport { PolygonHierarchy } from '@cesium/engine';\nexport { PolygonOutlineGeometry } from '@cesium/engine';\nexport { PolygonPipeline } from '@cesium/engine';\nexport { PolylineGeometry } from '@cesium/engine';\nexport { PolylinePipeline } from '@cesium/engine';\nexport { PolylineVolumeGeometry } from '@cesium/engine';\nexport { PolylineVolumeGeometryLibrary } from '@cesium/engine';\nexport { PolylineVolumeOutlineGeometry } from '@cesium/engine';\nexport { PrimitiveType } from '@cesium/engine';\nexport { Proxy } from '@cesium/engine';\nexport { QuadraticRealPolynomial } from '@cesium/engine';\nexport { QuantizedMeshTerrainData } from '@cesium/engine';\nexport { QuarticRealPolynomial } from '@cesium/engine';\nexport { Quaternion } from '@cesium/engine';\nexport { QuaternionSpline } from '@cesium/engine';\nexport { Queue } from '@cesium/engine';\nexport { Ray } from '@cesium/engine';\nexport { Rectangle } from '@cesium/engine';\nexport { RectangleCollisionChecker } from '@cesium/engine';\nexport { RectangleGeometry } from '@cesium/engine';\nexport { RectangleGeometryLibrary } from '@cesium/engine';\nexport { RectangleOutlineGeometry } from '@cesium/engine';\nexport { ReferenceFrame } from '@cesium/engine';\nexport { Request } from '@cesium/engine';\nexport { RequestErrorEvent } from '@cesium/engine';\nexport { RequestScheduler } from '@cesium/engine';\nexport { RequestState } from '@cesium/engine';\nexport { RequestType } from '@cesium/engine';\nexport { Resource } from '@cesium/engine';\nexport { RuntimeError } from '@cesium/engine';\nexport { S2Cell } from '@cesium/engine';\nexport { ScreenSpaceEventHandler } from '@cesium/engine';\nexport { ScreenSpaceEventType } from '@cesium/engine';\nexport { ShowGeometryInstanceAttribute } from '@cesium/engine';\nexport { Simon1994PlanetaryPositions } from '@cesium/engine';\nexport { SimplePolylineGeometry } from '@cesium/engine';\nexport { SphereGeometry } from '@cesium/engine';\nexport { SphereOutlineGeometry } from '@cesium/engine';\nexport { Spherical } from '@cesium/engine';\nexport { Spline } from '@cesium/engine';\nexport { SteppedSpline } from '@cesium/engine';\nexport { Stereographic } from '@cesium/engine';\nexport { TaskProcessor } from '@cesium/engine';\nexport { TerrainData } from '@cesium/engine';\nexport { TerrainEncoding } from '@cesium/engine';\nexport { TerrainMesh } from '@cesium/engine';\nexport { TerrainPicker } from '@cesium/engine';\nexport { TerrainProvider } from '@cesium/engine';\nexport { TerrainQuantization } from '@cesium/engine';\nexport { TexturePacker } from '@cesium/engine';\nexport { TileAvailability } from '@cesium/engine';\nexport { TileEdge } from '@cesium/engine';\nexport { TileProviderError } from '@cesium/engine';\nexport { TilingScheme } from '@cesium/engine';\nexport { TimeConstants } from '@cesium/engine';\nexport { TimeInterval } from '@cesium/engine';\nexport { TimeIntervalCollection } from '@cesium/engine';\nexport { TimeStandard } from '@cesium/engine';\nexport { Tipsify } from '@cesium/engine';\nexport { TrackingReferenceFrame } from '@cesium/engine';\nexport { Transforms } from '@cesium/engine';\nexport { TranslationRotationScale } from '@cesium/engine';\nexport { TridiagonalSystemSolver } from '@cesium/engine';\nexport { TrustedServers } from '@cesium/engine';\nexport { VRTheWorldTerrainProvider } from '@cesium/engine';\nexport { VertexFormat } from '@cesium/engine';\nexport { VerticalExaggeration } from '@cesium/engine';\nexport { VideoSynchronizer } from '@cesium/engine';\nexport { Visibility } from '@cesium/engine';\nexport { VulkanConstants } from '@cesium/engine';\nexport { WallGeometry } from '@cesium/engine';\nexport { WallGeometryLibrary } from '@cesium/engine';\nexport { WallOutlineGeometry } from '@cesium/engine';\nexport { WebGLConstants } from '@cesium/engine';\nexport { WebMercatorProjection } from '@cesium/engine';\nexport { WebMercatorTilingScheme } from '@cesium/engine';\nexport { WindingOrder } from '@cesium/engine';\nexport { WireframeIndexGenerator } from '@cesium/engine';\nexport { addAllToArray } from '@cesium/engine';\nexport { appendForwardSlash } from '@cesium/engine';\nexport { arrayRemoveDuplicates } from '@cesium/engine';\nexport { barycentricCoordinates } from '@cesium/engine';\nexport { binarySearch } from '@cesium/engine';\nexport { buildModuleUrl } from '@cesium/engine';\nexport { clone } from '@cesium/engine';\nexport { combine } from '@cesium/engine';\nexport { createGuid } from '@cesium/engine';\nexport { createWorldBathymetryAsync } from '@cesium/engine';\nexport { createWorldTerrainAsync } from '@cesium/engine';\nexport { decodeGoogleEarthEnterpriseData } from '@cesium/engine';\nexport { decodeVectorPolylinePositions } from '@cesium/engine';\nexport { defer } from '@cesium/engine';\nexport { defined } from '@cesium/engine';\nexport { deprecationWarning } from '@cesium/engine';\nexport { destroyObject } from '@cesium/engine';\nexport { formatError } from '@cesium/engine';\nexport { getAbsoluteUri } from '@cesium/engine';\nexport { getBaseUri } from '@cesium/engine';\nexport { getExtensionFromUri } from '@cesium/engine';\nexport { getFilenameFromUri } from '@cesium/engine';\nexport { getImageFromTypedArray } from '@cesium/engine';\nexport { getImagePixels } from '@cesium/engine';\nexport { getJsonFromTypedArray } from '@cesium/engine';\nexport { getMagic } from '@cesium/engine';\nexport { getStringFromTypedArray } from '@cesium/engine';\nexport { getTimestamp } from '@cesium/engine';\nexport { isBitSet } from '@cesium/engine';\nexport { isBlobUri } from '@cesium/engine';\nexport { isCrossOriginUrl } from '@cesium/engine';\nexport { isDataUri } from '@cesium/engine';\nexport { isLeapYear } from '@cesium/engine';\nexport { loadAndExecuteScript } from '@cesium/engine';\nexport { loadImageFromTypedArray } from '@cesium/engine';\nexport { loadKTX2 } from '@cesium/engine';\nexport { mergeSort } from '@cesium/engine';\nexport { objectToQuery } from '@cesium/engine';\nexport { oneTimeWarning } from '@cesium/engine';\nexport { parseResponseHeaders } from '@cesium/engine';\nexport { pointInsideTriangle } from '@cesium/engine';\nexport { queryToObject } from '@cesium/engine';\nexport { resizeImageToNextPowerOfTwo } from '@cesium/engine';\nexport { sampleTerrain } from '@cesium/engine';\nexport { sampleTerrainMostDetailed } from '@cesium/engine';\nexport { scaleToGeodeticSurface } from '@cesium/engine';\nexport { srgbToLinear } from '@cesium/engine';\nexport { subdivideArray } from '@cesium/engine';\nexport { webGLConstantToGlslType } from '@cesium/engine';\nexport { wrapFunction } from '@cesium/engine';\nexport { writeTextToCanvas } from '@cesium/engine';\nexport { BillboardGraphics } from '@cesium/engine';\nexport { BillboardVisualizer } from '@cesium/engine';\nexport { BoundingSphereState } from '@cesium/engine';\nexport { BoxGeometryUpdater } from '@cesium/engine';\nexport { BoxGraphics } from '@cesium/engine';\nexport { CallbackPositionProperty } from '@cesium/engine';\nexport { CallbackProperty } from '@cesium/engine';\nexport { Cesium3DTilesetGraphics } from '@cesium/engine';\nexport { Cesium3DTilesetVisualizer } from '@cesium/engine';\nexport { CheckerboardMaterialProperty } from '@cesium/engine';\nexport { ColorMaterialProperty } from '@cesium/engine';\nexport { CompositeEntityCollection } from '@cesium/engine';\nexport { CompositeMaterialProperty } from '@cesium/engine';\nexport { CompositePositionProperty } from '@cesium/engine';\nexport { CompositeProperty } from '@cesium/engine';\nexport { ConstantPositionProperty } from '@cesium/engine';\nexport { ConstantProperty } from '@cesium/engine';\nexport { CorridorGeometryUpdater } from '@cesium/engine';\nexport { CorridorGraphics } from '@cesium/engine';\nexport { CustomDataSource } from '@cesium/engine';\nexport { CylinderGeometryUpdater } from '@cesium/engine';\nexport { CylinderGraphics } from '@cesium/engine';\nexport { CzmlDataSource } from '@cesium/engine';\nexport { DataSource } from '@cesium/engine';\nexport { DataSourceClock } from '@cesium/engine';\nexport { DataSourceCollection } from '@cesium/engine';\nexport { DataSourceDisplay } from '@cesium/engine';\nexport { DynamicGeometryBatch } from '@cesium/engine';\nexport { DynamicGeometryUpdater } from '@cesium/engine';\nexport { EllipseGeometryUpdater } from '@cesium/engine';\nexport { EllipseGraphics } from '@cesium/engine';\nexport { EllipsoidGeometryUpdater } from '@cesium/engine';\nexport { EllipsoidGraphics } from '@cesium/engine';\nexport { Entity } from '@cesium/engine';\nexport { EntityCluster } from '@cesium/engine';\nexport { EntityCollection } from '@cesium/engine';\nexport { EntityView } from '@cesium/engine';\nexport { GeoJsonDataSource } from '@cesium/engine';\nexport { GeometryUpdater } from '@cesium/engine';\nexport { GeometryUpdaterSet } from '@cesium/engine';\nexport { GeometryVisualizer } from '@cesium/engine';\nexport { GpxDataSource } from '@cesium/engine';\nexport { GridMaterialProperty } from '@cesium/engine';\nexport { GroundGeometryUpdater } from '@cesium/engine';\nexport { ImageMaterialProperty } from '@cesium/engine';\nexport { KmlCamera } from '@cesium/engine';\nexport { KmlDataSource } from '@cesium/engine';\nexport { KmlLookAt } from '@cesium/engine';\nexport { KmlTour } from '@cesium/engine';\nexport { KmlTourFlyTo } from '@cesium/engine';\nexport { KmlTourWait } from '@cesium/engine';\nexport { LabelGraphics } from '@cesium/engine';\nexport { LabelVisualizer } from '@cesium/engine';\nexport { MaterialProperty } from '@cesium/engine';\nexport { ModelGraphics } from '@cesium/engine';\nexport { ModelVisualizer } from '@cesium/engine';\nexport { NodeTransformationProperty } from '@cesium/engine';\nexport { PathGraphics } from '@cesium/engine';\nexport { PathVisualizer } from '@cesium/engine';\nexport { PlaneGeometryUpdater } from '@cesium/engine';\nexport { PlaneGraphics } from '@cesium/engine';\nexport { PointGraphics } from '@cesium/engine';\nexport { PointVisualizer } from '@cesium/engine';\nexport { PolygonGeometryUpdater } from '@cesium/engine';\nexport { PolygonGraphics } from '@cesium/engine';\nexport { PolylineArrowMaterialProperty } from '@cesium/engine';\nexport { PolylineDashMaterialProperty } from '@cesium/engine';\nexport { PolylineGeometryUpdater } from '@cesium/engine';\nexport { PolylineGlowMaterialProperty } from '@cesium/engine';\nexport { PolylineGraphics } from '@cesium/engine';\nexport { PolylineOutlineMaterialProperty } from '@cesium/engine';\nexport { PolylineVisualizer } from '@cesium/engine';\nexport { PolylineVolumeGeometryUpdater } from '@cesium/engine';\nexport { PolylineVolumeGraphics } from '@cesium/engine';\nexport { PositionProperty } from '@cesium/engine';\nexport { PositionPropertyArray } from '@cesium/engine';\nexport { Property } from '@cesium/engine';\nexport { PropertyArray } from '@cesium/engine';\nexport { PropertyBag } from '@cesium/engine';\nexport { RectangleGeometryUpdater } from '@cesium/engine';\nexport { RectangleGraphics } from '@cesium/engine';\nexport { ReferenceProperty } from '@cesium/engine';\nexport { Rotation } from '@cesium/engine';\nexport { SampledPositionProperty } from '@cesium/engine';\nexport { SampledProperty } from '@cesium/engine';\nexport { ScaledPositionProperty } from '@cesium/engine';\nexport { StaticGeometryColorBatch } from '@cesium/engine';\nexport { StaticGeometryPerMaterialBatch } from '@cesium/engine';\nexport { StaticGroundGeometryColorBatch } from '@cesium/engine';\nexport { StaticGroundGeometryPerMaterialBatch } from '@cesium/engine';\nexport { StaticGroundPolylinePerMaterialBatch } from '@cesium/engine';\nexport { StaticOutlineGeometryBatch } from '@cesium/engine';\nexport { StripeMaterialProperty } from '@cesium/engine';\nexport { StripeOrientation } from '@cesium/engine';\nexport { TerrainOffsetProperty } from '@cesium/engine';\nexport { TimeIntervalCollectionPositionProperty } from '@cesium/engine';\nexport { TimeIntervalCollectionProperty } from '@cesium/engine';\nexport { VelocityOrientationProperty } from '@cesium/engine';\nexport { VelocityVectorProperty } from '@cesium/engine';\nexport { Visualizer } from '@cesium/engine';\nexport { WallGeometryUpdater } from '@cesium/engine';\nexport { WallGraphics } from '@cesium/engine';\nexport { createMaterialPropertyDescriptor } from '@cesium/engine';\nexport { createPropertyDescriptor } from '@cesium/engine';\nexport { createRawPropertyDescriptor } from '@cesium/engine';\nexport { exportKml } from '@cesium/engine';\nexport { getElement } from '@cesium/engine';\nexport { heightReferenceOnEntityPropertyChanged } from '@cesium/engine';\nexport { AutomaticUniforms } from '@cesium/engine';\nexport { Buffer } from '@cesium/engine';\nexport { BufferUsage } from '@cesium/engine';\nexport { ClearCommand } from '@cesium/engine';\nexport { ComputeCommand } from '@cesium/engine';\nexport { ComputeEngine } from '@cesium/engine';\nexport { Context } from '@cesium/engine';\nexport { ContextLimits } from '@cesium/engine';\nexport { CubeMap } from '@cesium/engine';\nexport { CubeMapFace } from '@cesium/engine';\nexport { DrawCommand } from '@cesium/engine';\nexport { Framebuffer } from '@cesium/engine';\nexport { FramebufferManager } from '@cesium/engine';\nexport { MipmapHint } from '@cesium/engine';\nexport { MultisampleFramebuffer } from '@cesium/engine';\nexport { Pass } from '@cesium/engine';\nexport { PassState } from '@cesium/engine';\nexport { PixelDatatype } from '@cesium/engine';\nexport { RenderState } from '@cesium/engine';\nexport { Renderbuffer } from '@cesium/engine';\nexport { RenderbufferFormat } from '@cesium/engine';\nexport { Sampler } from '@cesium/engine';\nexport { ShaderBuilder } from '@cesium/engine';\nexport { ShaderCache } from '@cesium/engine';\nexport { ShaderDestination } from '@cesium/engine';\nexport { ShaderFunction } from '@cesium/engine';\nexport { ShaderProgram } from '@cesium/engine';\nexport { ShaderSource } from '@cesium/engine';\nexport { ShaderStruct } from '@cesium/engine';\nexport { SharedContext } from '@cesium/engine';\nexport { Sync } from '@cesium/engine';\nexport { Texture } from '@cesium/engine';\nexport { Texture3D } from '@cesium/engine';\nexport { TextureAtlas } from '@cesium/engine';\nexport { TextureCache } from '@cesium/engine';\nexport { TextureMagnificationFilter } from '@cesium/engine';\nexport { TextureMinificationFilter } from '@cesium/engine';\nexport { TextureWrap } from '@cesium/engine';\nexport { UniformState } from '@cesium/engine';\nexport { VertexArray } from '@cesium/engine';\nexport { VertexArrayFacade } from '@cesium/engine';\nexport { createUniform } from '@cesium/engine';\nexport { createUniformArray } from '@cesium/engine';\nexport { demodernizeShader } from '@cesium/engine';\nexport { freezeRenderState } from '@cesium/engine';\nexport { loadCubeMap } from '@cesium/engine';\nexport { _shadersAdjustTranslucentFS } from '@cesium/engine';\nexport { _shadersAtmosphereCommon } from '@cesium/engine';\nexport { _shadersBillboardCollectionFS } from '@cesium/engine';\nexport { _shadersBillboardCollectionVS } from '@cesium/engine';\nexport { _shadersBrdfLutGeneratorFS } from '@cesium/engine';\nexport { _shadersCloudCollectionFS } from '@cesium/engine';\nexport { _shadersCloudCollectionVS } from '@cesium/engine';\nexport { _shadersCloudNoiseFS } from '@cesium/engine';\nexport { _shadersCloudNoiseVS } from '@cesium/engine';\nexport { _shadersCompareAndPackTranslucentDepth } from '@cesium/engine';\nexport { _shadersCompositeOITFS } from '@cesium/engine';\nexport { _shadersComputeIrradianceFS } from '@cesium/engine';\nexport { _shadersComputeRadianceMapFS } from '@cesium/engine';\nexport { _shadersConvolveSpecularMapFS } from '@cesium/engine';\nexport { _shadersConvolveSpecularMapVS } from '@cesium/engine';\nexport { _shadersCubeMapPanoramaVS } from '@cesium/engine';\nexport { _shadersDepthPlaneFS } from '@cesium/engine';\nexport { _shadersDepthPlaneVS } from '@cesium/engine';\nexport { _shadersEllipsoidFS } from '@cesium/engine';\nexport { _shadersEllipsoidVS } from '@cesium/engine';\nexport { _shadersFXAA3_11 } from '@cesium/engine';\nexport { _shadersGlobeFS } from '@cesium/engine';\nexport { _shadersGlobeVS } from '@cesium/engine';\nexport { _shadersGroundAtmosphere } from '@cesium/engine';\nexport { _shadersPointPrimitiveCollectionFS } from '@cesium/engine';\nexport { _shadersPointPrimitiveCollectionVS } from '@cesium/engine';\nexport { _shadersPolygonSignedDistanceFS } from '@cesium/engine';\nexport { _shadersPolylineCommon } from '@cesium/engine';\nexport { _shadersPolylineFS } from '@cesium/engine';\nexport { _shadersPolylineShadowVolumeFS } from '@cesium/engine';\nexport { _shadersPolylineShadowVolumeMorphFS } from '@cesium/engine';\nexport { _shadersPolylineShadowVolumeMorphVS } from '@cesium/engine';\nexport { _shadersPolylineShadowVolumeVS } from '@cesium/engine';\nexport { _shadersPolylineVS } from '@cesium/engine';\nexport { _shadersPrimitiveGaussianSplatFS } from '@cesium/engine';\nexport { _shadersPrimitiveGaussianSplatVS } from '@cesium/engine';\nexport { _shadersReprojectWebMercatorFS } from '@cesium/engine';\nexport { _shadersReprojectWebMercatorVS } from '@cesium/engine';\nexport { _shadersShadowVolumeAppearanceFS } from '@cesium/engine';\nexport { _shadersShadowVolumeAppearanceVS } from '@cesium/engine';\nexport { _shadersShadowVolumeFS } from '@cesium/engine';\nexport { _shadersSkyAtmosphereCommon } from '@cesium/engine';\nexport { _shadersSkyAtmosphereFS } from '@cesium/engine';\nexport { _shadersSkyAtmosphereVS } from '@cesium/engine';\nexport { _shadersSkyBoxFS } from '@cesium/engine';\nexport { _shadersSkyBoxVS } from '@cesium/engine';\nexport { _shadersSunFS } from '@cesium/engine';\nexport { _shadersSunTextureFS } from '@cesium/engine';\nexport { _shadersSunVS } from '@cesium/engine';\nexport { _shadersVector3DTileClampedPolylinesFS } from '@cesium/engine';\nexport { _shadersVector3DTileClampedPolylinesVS } from '@cesium/engine';\nexport { _shadersVector3DTilePolylinesVS } from '@cesium/engine';\nexport { _shadersVectorTileVS } from '@cesium/engine';\nexport { _shadersViewportQuadFS } from '@cesium/engine';\nexport { _shadersViewportQuadVS } from '@cesium/engine';\nexport { AlphaMode } from '@cesium/engine';\nexport { Appearance } from '@cesium/engine';\nexport { ArcGisBaseMapType } from '@cesium/engine';\nexport { ArcGisMapServerImageryProvider } from '@cesium/engine';\nexport { ArcGisMapService } from '@cesium/engine';\nexport { Atmosphere } from '@cesium/engine';\nexport { AttributeType } from '@cesium/engine';\nexport { AutoExposure } from '@cesium/engine';\nexport { Axis } from '@cesium/engine';\nexport { Azure2DImageryProvider } from '@cesium/engine';\nexport { B3dmParser } from '@cesium/engine';\nexport { BatchTable } from '@cesium/engine';\nexport { BatchTableHierarchy } from '@cesium/engine';\nexport { BatchTexture } from '@cesium/engine';\nexport { Billboard } from '@cesium/engine';\nexport { BillboardCollection } from '@cesium/engine';\nexport { BillboardLoadState } from '@cesium/engine';\nexport { BillboardTexture } from '@cesium/engine';\nexport { BingMapsImageryProvider } from '@cesium/engine';\nexport { BingMapsStyle } from '@cesium/engine';\nexport { BlendEquation } from '@cesium/engine';\nexport { BlendFunction } from '@cesium/engine';\nexport { BlendOption } from '@cesium/engine';\nexport { BlendingState } from '@cesium/engine';\nexport { BoundingVolumeSemantics } from '@cesium/engine';\nexport { BoxEmitter } from '@cesium/engine';\nexport { BrdfLutGenerator } from '@cesium/engine';\nexport { BufferLoader } from '@cesium/engine';\nexport { Camera } from '@cesium/engine';\nexport { CameraEventAggregator } from '@cesium/engine';\nexport { CameraEventType } from '@cesium/engine';\nexport { CameraFlightPath } from '@cesium/engine';\nexport { Cesium3DContentGroup } from '@cesium/engine';\nexport { Cesium3DTile } from '@cesium/engine';\nexport { Cesium3DTileBatchTable } from '@cesium/engine';\nexport { Cesium3DTileColorBlendMode } from '@cesium/engine';\nexport { Cesium3DTileContent } from '@cesium/engine';\nexport { Cesium3DTileContentFactory } from '@cesium/engine';\nexport { Cesium3DTileContentState } from '@cesium/engine';\nexport { Cesium3DTileContentType } from '@cesium/engine';\nexport { Cesium3DTileFeature } from '@cesium/engine';\nexport { Cesium3DTileFeatureTable } from '@cesium/engine';\nexport { Cesium3DTileOptimizationHint } from '@cesium/engine';\nexport { Cesium3DTileOptimizations } from '@cesium/engine';\nexport { Cesium3DTilePass } from '@cesium/engine';\nexport { Cesium3DTilePassState } from '@cesium/engine';\nexport { Cesium3DTilePointFeature } from '@cesium/engine';\nexport { Cesium3DTileRefine } from '@cesium/engine';\nexport { Cesium3DTileStyle } from '@cesium/engine';\nexport { Cesium3DTileStyleEngine } from '@cesium/engine';\nexport { Cesium3DTilesVoxelProvider } from '@cesium/engine';\nexport { Cesium3DTileset } from '@cesium/engine';\nexport { Cesium3DTilesetBaseTraversal } from '@cesium/engine';\nexport { Cesium3DTilesetCache } from '@cesium/engine';\nexport { Cesium3DTilesetHeatmap } from '@cesium/engine';\nexport { Cesium3DTilesetMetadata } from '@cesium/engine';\nexport { Cesium3DTilesetMostDetailedTraversal } from '@cesium/engine';\nexport { Cesium3DTilesetSkipTraversal } from '@cesium/engine';\nexport { Cesium3DTilesetStatistics } from '@cesium/engine';\nexport { Cesium3DTilesetTraversal } from '@cesium/engine';\nexport { CircleEmitter } from '@cesium/engine';\nexport { ClassificationPrimitive } from '@cesium/engine';\nexport { ClassificationType } from '@cesium/engine';\nexport { ClippingPlane } from '@cesium/engine';\nexport { ClippingPlaneCollection } from '@cesium/engine';\nexport { ClippingPolygon } from '@cesium/engine';\nexport { ClippingPolygonCollection } from '@cesium/engine';\nexport { CloudCollection } from '@cesium/engine';\nexport { CloudType } from '@cesium/engine';\nexport { ColorBlendMode } from '@cesium/engine';\nexport { Composite3DTileContent } from '@cesium/engine';\nexport { ConditionsExpression } from '@cesium/engine';\nexport { ConeEmitter } from '@cesium/engine';\nexport { ContentMetadata } from '@cesium/engine';\nexport { CreditDisplay } from '@cesium/engine';\nexport { CubeMapPanorama } from '@cesium/engine';\nexport { CullFace } from '@cesium/engine';\nexport { CumulusCloud } from '@cesium/engine';\nexport { DebugAppearance } from '@cesium/engine';\nexport { DebugCameraPrimitive } from '@cesium/engine';\nexport { DebugInspector } from '@cesium/engine';\nexport { DebugModelMatrixPrimitive } from '@cesium/engine';\nexport { DepthFunction } from '@cesium/engine';\nexport { DepthPlane } from '@cesium/engine';\nexport { DerivedCommand } from '@cesium/engine';\nexport { DeviceOrientationCameraController } from '@cesium/engine';\nexport { DirectionalLight } from '@cesium/engine';\nexport { DiscardEmptyTileImagePolicy } from '@cesium/engine';\nexport { DiscardMissingTileImagePolicy } from '@cesium/engine';\nexport { DracoLoader } from '@cesium/engine';\nexport { DynamicAtmosphereLightingType } from '@cesium/engine';\nexport { DynamicEnvironmentMapManager } from '@cesium/engine';\nexport { EdgeFramebuffer } from '@cesium/engine';\nexport { EllipsoidPrimitive } from '@cesium/engine';\nexport { EllipsoidSurfaceAppearance } from '@cesium/engine';\nexport { Empty3DTileContent } from '@cesium/engine';\nexport { EquirectangularPanorama } from '@cesium/engine';\nexport { Expression } from '@cesium/engine';\nexport { ExpressionNodeType } from '@cesium/engine';\nexport { Fog } from '@cesium/engine';\nexport { FrameRateMonitor } from '@cesium/engine';\nexport { FrameState } from '@cesium/engine';\nexport { FrustumCommands } from '@cesium/engine';\nexport { GaussianSplat3DTileContent } from '@cesium/engine';\nexport { GaussianSplatPrimitive } from '@cesium/engine';\nexport { GaussianSplatRenderResources } from '@cesium/engine';\nexport { GaussianSplatSorter } from '@cesium/engine';\nexport { GaussianSplatTextureGenerator } from '@cesium/engine';\nexport { Geometry3DTileContent } from '@cesium/engine';\nexport { GetFeatureInfoFormat } from '@cesium/engine';\nexport { Globe } from '@cesium/engine';\nexport { GlobeDepth } from '@cesium/engine';\nexport { GlobeSurfaceShaderSet } from '@cesium/engine';\nexport { GlobeSurfaceTile } from '@cesium/engine';\nexport { GlobeSurfaceTileProvider } from '@cesium/engine';\nexport { GlobeTranslucency } from '@cesium/engine';\nexport { GlobeTranslucencyFramebuffer } from '@cesium/engine';\nexport { GlobeTranslucencyState } from '@cesium/engine';\nexport { GltfBufferViewLoader } from '@cesium/engine';\nexport { GltfDracoLoader } from '@cesium/engine';\nexport { GltfImageLoader } from '@cesium/engine';\nexport { GltfIndexBufferLoader } from '@cesium/engine';\nexport { GltfJsonLoader } from '@cesium/engine';\nexport { GltfLoader } from '@cesium/engine';\nexport { GltfLoaderUtil } from '@cesium/engine';\nexport { GltfSpzLoader } from '@cesium/engine';\nexport { GltfStructuralMetadataLoader } from '@cesium/engine';\nexport { GltfTextureLoader } from '@cesium/engine';\nexport { GltfVertexBufferLoader } from '@cesium/engine';\nexport { Google2DImageryProvider } from '@cesium/engine';\nexport { GoogleEarthEnterpriseImageryProvider } from '@cesium/engine';\nexport { GoogleEarthEnterpriseMapsProvider } from '@cesium/engine';\nexport { GoogleStreetViewCubeMapPanoramaProvider } from '@cesium/engine';\nexport { GridImageryProvider } from '@cesium/engine';\nexport { GroundPolylinePrimitive } from '@cesium/engine';\nexport { GroundPrimitive } from '@cesium/engine';\nexport { GroupMetadata } from '@cesium/engine';\nexport { HeightReference } from '@cesium/engine';\nexport { HorizontalOrigin } from '@cesium/engine';\nexport { I3SDataProvider } from '@cesium/engine';\nexport { I3SDecoder } from '@cesium/engine';\nexport { I3SFeature } from '@cesium/engine';\nexport { I3SField } from '@cesium/engine';\nexport { I3SGeometry } from '@cesium/engine';\nexport { I3SLayer } from '@cesium/engine';\nexport { I3SNode } from '@cesium/engine';\nexport { I3SStatistics } from '@cesium/engine';\nexport { I3SSublayer } from '@cesium/engine';\nexport { I3SSymbology } from '@cesium/engine';\nexport { I3dmParser } from '@cesium/engine';\nexport { ITwinData } from '@cesium/engine';\nexport { ImageBasedLighting } from '@cesium/engine';\nexport { Imagery } from '@cesium/engine';\nexport { ImageryLayer } from '@cesium/engine';\nexport { ImageryLayerCollection } from '@cesium/engine';\nexport { ImageryLayerFeatureInfo } from '@cesium/engine';\nexport { ImageryProvider } from '@cesium/engine';\nexport { ImageryState } from '@cesium/engine';\nexport { Implicit3DTileContent } from '@cesium/engine';\nexport { ImplicitAvailabilityBitstream } from '@cesium/engine';\nexport { ImplicitMetadataView } from '@cesium/engine';\nexport { ImplicitSubdivisionScheme } from '@cesium/engine';\nexport { ImplicitSubtree } from '@cesium/engine';\nexport { ImplicitSubtreeCache } from '@cesium/engine';\nexport { ImplicitSubtreeMetadata } from '@cesium/engine';\nexport { ImplicitTileCoordinates } from '@cesium/engine';\nexport { ImplicitTileset } from '@cesium/engine';\nexport { InstanceAttributeSemantic } from '@cesium/engine';\nexport { InvertClassification } from '@cesium/engine';\nexport { IonImageryProvider } from '@cesium/engine';\nexport { IonImageryProviderFactory } from '@cesium/engine';\nexport { IonWorldImageryStyle } from '@cesium/engine';\nexport { JobScheduler } from '@cesium/engine';\nexport { JobType } from '@cesium/engine';\nexport { JsonMetadataTable } from '@cesium/engine';\nexport { KeyframeNode } from '@cesium/engine';\nexport { Label } from '@cesium/engine';\nexport { LabelCollection } from '@cesium/engine';\nexport { LabelStyle } from '@cesium/engine';\nexport { Light } from '@cesium/engine';\nexport { MapMode2D } from '@cesium/engine';\nexport { MapboxImageryProvider } from '@cesium/engine';\nexport { MapboxStyleImageryProvider } from '@cesium/engine';\nexport { Material } from '@cesium/engine';\nexport { MaterialAppearance } from '@cesium/engine';\nexport { Megatexture } from '@cesium/engine';\nexport { MetadataClass } from '@cesium/engine';\nexport { MetadataClassProperty } from '@cesium/engine';\nexport { MetadataComponentType } from '@cesium/engine';\nexport { MetadataEntity } from '@cesium/engine';\nexport { MetadataEnum } from '@cesium/engine';\nexport { MetadataEnumValue } from '@cesium/engine';\nexport { MetadataPicking } from '@cesium/engine';\nexport { MetadataSchema } from '@cesium/engine';\nexport { MetadataSchemaLoader } from '@cesium/engine';\nexport { MetadataSemantic } from '@cesium/engine';\nexport { MetadataTable } from '@cesium/engine';\nexport { MetadataTableProperty } from '@cesium/engine';\nexport { MetadataType } from '@cesium/engine';\nexport { ModelAnimationLoop } from '@cesium/engine';\nexport { ModelAnimationState } from '@cesium/engine';\nexport { ModelComponents } from '@cesium/engine';\nexport { Moon } from '@cesium/engine';\nexport { Multiple3DTileContent } from '@cesium/engine';\nexport { NeverTileDiscardPolicy } from '@cesium/engine';\nexport { OIT } from '@cesium/engine';\nexport { OpenStreetMapImageryProvider } from '@cesium/engine';\nexport { OrderedGroundPrimitiveCollection } from '@cesium/engine';\nexport { Panorama } from '@cesium/engine';\nexport { PanoramaProvider } from '@cesium/engine';\nexport { Particle } from '@cesium/engine';\nexport { ParticleBurst } from '@cesium/engine';\nexport { ParticleEmitter } from '@cesium/engine';\nexport { ParticleSystem } from '@cesium/engine';\nexport { PerInstanceColorAppearance } from '@cesium/engine';\nexport { PerformanceDisplay } from '@cesium/engine';\nexport { PickDepth } from '@cesium/engine';\nexport { PickDepthFramebuffer } from '@cesium/engine';\nexport { PickFramebuffer } from '@cesium/engine';\nexport { PickedMetadataInfo } from '@cesium/engine';\nexport { Picking } from '@cesium/engine';\nexport { PntsParser } from '@cesium/engine';\nexport { PointCloud } from '@cesium/engine';\nexport { PointCloudEyeDomeLighting } from '@cesium/engine';\nexport { PointCloudShading } from '@cesium/engine';\nexport { PointPrimitive } from '@cesium/engine';\nexport { PointPrimitiveCollection } from '@cesium/engine';\nexport { Polyline } from '@cesium/engine';\nexport { PolylineCollection } from '@cesium/engine';\nexport { PolylineColorAppearance } from '@cesium/engine';\nexport { PolylineMaterialAppearance } from '@cesium/engine';\nexport { PostProcessStage } from '@cesium/engine';\nexport { PostProcessStageCollection } from '@cesium/engine';\nexport { PostProcessStageComposite } from '@cesium/engine';\nexport { PostProcessStageLibrary } from '@cesium/engine';\nexport { PostProcessStageSampleMode } from '@cesium/engine';\nexport { PostProcessStageTextureCache } from '@cesium/engine';\nexport { Primitive } from '@cesium/engine';\nexport { PrimitiveCollection } from '@cesium/engine';\nexport { PrimitiveLoadPlan } from '@cesium/engine';\nexport { PrimitivePipeline } from '@cesium/engine';\nexport { PrimitiveState } from '@cesium/engine';\nexport { PropertyAttribute } from '@cesium/engine';\nexport { PropertyAttributeProperty } from '@cesium/engine';\nexport { PropertyTable } from '@cesium/engine';\nexport { PropertyTexture } from '@cesium/engine';\nexport { PropertyTextureProperty } from '@cesium/engine';\nexport { QuadtreeOccluders } from '@cesium/engine';\nexport { QuadtreePrimitive } from '@cesium/engine';\nexport { QuadtreeTile } from '@cesium/engine';\nexport { QuadtreeTileLoadState } from '@cesium/engine';\nexport { QuadtreeTileProvider } from '@cesium/engine';\nexport { ResourceCache } from '@cesium/engine';\nexport { ResourceCacheKey } from '@cesium/engine';\nexport { ResourceCacheStatistics } from '@cesium/engine';\nexport { ResourceLoader } from '@cesium/engine';\nexport { ResourceLoaderState } from '@cesium/engine';\nexport { SDFSettings } from '@cesium/engine';\nexport { Scene } from '@cesium/engine';\nexport { SceneFramebuffer } from '@cesium/engine';\nexport { SceneMode } from '@cesium/engine';\nexport { SceneTransforms } from '@cesium/engine';\nexport { SceneTransitioner } from '@cesium/engine';\nexport { ScreenSpaceCameraController } from '@cesium/engine';\nexport { SensorVolumePortionToDisplay } from '@cesium/engine';\nexport { ShadowMap } from '@cesium/engine';\nexport { ShadowMapShader } from '@cesium/engine';\nexport { ShadowMode } from '@cesium/engine';\nexport { ShadowVolumeAppearance } from '@cesium/engine';\nexport { SingleTileImageryProvider } from '@cesium/engine';\nexport { SkyAtmosphere } from '@cesium/engine';\nexport { SkyBox } from '@cesium/engine';\nexport { SpatialNode } from '@cesium/engine';\nexport { SpecularEnvironmentCubeMap } from '@cesium/engine';\nexport { SphereEmitter } from '@cesium/engine';\nexport { SplitDirection } from '@cesium/engine';\nexport { Splitter } from '@cesium/engine';\nexport { StencilConstants } from '@cesium/engine';\nexport { StencilFunction } from '@cesium/engine';\nexport { StencilOperation } from '@cesium/engine';\nexport { StructuralMetadata } from '@cesium/engine';\nexport { StyleExpression } from '@cesium/engine';\nexport { Sun } from '@cesium/engine';\nexport { SunLight } from '@cesium/engine';\nexport { SunPostProcess } from '@cesium/engine';\nexport { SupportedImageFormats } from '@cesium/engine';\nexport { Terrain } from '@cesium/engine';\nexport { TerrainFillMesh } from '@cesium/engine';\nexport { TerrainState } from '@cesium/engine';\nexport { TileBoundingRegion } from '@cesium/engine';\nexport { TileBoundingS2Cell } from '@cesium/engine';\nexport { TileBoundingSphere } from '@cesium/engine';\nexport { TileBoundingVolume } from '@cesium/engine';\nexport { TileCoordinatesImageryProvider } from '@cesium/engine';\nexport { TileDiscardPolicy } from '@cesium/engine';\nexport { TileImagery } from '@cesium/engine';\nexport { TileMapServiceImageryProvider } from '@cesium/engine';\nexport { TileMetadata } from '@cesium/engine';\nexport { TileOrientedBoundingBox } from '@cesium/engine';\nexport { TileReplacementQueue } from '@cesium/engine';\nexport { TileSelectionResult } from '@cesium/engine';\nexport { TileState } from '@cesium/engine';\nexport { Tileset3DTileContent } from '@cesium/engine';\nexport { TilesetMetadata } from '@cesium/engine';\nexport { TimeDynamicImagery } from '@cesium/engine';\nexport { TimeDynamicPointCloud } from '@cesium/engine';\nexport { Tonemapper } from '@cesium/engine';\nexport { TranslucentTileClassification } from '@cesium/engine';\nexport { TweenCollection } from '@cesium/engine';\nexport { UrlTemplateImageryProvider } from '@cesium/engine';\nexport { Vector3DTileBatch } from '@cesium/engine';\nexport { Vector3DTileClampedPolylines } from '@cesium/engine';\nexport { Vector3DTileContent } from '@cesium/engine';\nexport { Vector3DTileGeometry } from '@cesium/engine';\nexport { Vector3DTilePoints } from '@cesium/engine';\nexport { Vector3DTilePolygons } from '@cesium/engine';\nexport { Vector3DTilePolylines } from '@cesium/engine';\nexport { Vector3DTilePrimitive } from '@cesium/engine';\nexport { VertexAttributeSemantic } from '@cesium/engine';\nexport { VerticalOrigin } from '@cesium/engine';\nexport { View } from '@cesium/engine';\nexport { ViewportQuad } from '@cesium/engine';\nexport { VoxelBoundsCollection } from '@cesium/engine';\nexport { VoxelBoxShape } from '@cesium/engine';\nexport { VoxelCell } from '@cesium/engine';\nexport { VoxelContent } from '@cesium/engine';\nexport { VoxelCylinderShape } from '@cesium/engine';\nexport { VoxelEllipsoidShape } from '@cesium/engine';\nexport { VoxelMetadataOrder } from '@cesium/engine';\nexport { VoxelPrimitive } from '@cesium/engine';\nexport { VoxelProvider } from '@cesium/engine';\nexport { VoxelRenderResources } from '@cesium/engine';\nexport { VoxelShape } from '@cesium/engine';\nexport { VoxelShapeType } from '@cesium/engine';\nexport { VoxelTraversal } from '@cesium/engine';\nexport { WebMapServiceImageryProvider } from '@cesium/engine';\nexport { WebMapTileServiceImageryProvider } from '@cesium/engine';\nexport { buildVoxelDrawCommands } from '@cesium/engine';\nexport { computeFlyToLocationForRectangle } from '@cesium/engine';\nexport { createBillboardPointCallback } from '@cesium/engine';\nexport { createElevationBandMaterial } from '@cesium/engine';\nexport { createGooglePhotorealistic3DTileset } from '@cesium/engine';\nexport { createOsmBuildingsAsync } from '@cesium/engine';\nexport { createTangentSpaceDebugPrimitive } from '@cesium/engine';\nexport { createWorldImageryAsync } from '@cesium/engine';\nexport { findContentMetadata } from '@cesium/engine';\nexport { findGroupMetadata } from '@cesium/engine';\nexport { findTileMetadata } from '@cesium/engine';\nexport { getBinaryAccessor } from '@cesium/engine';\nexport { getClipAndStyleCode } from '@cesium/engine';\nexport { getClippingFunction } from '@cesium/engine';\nexport { getMeshPrimitives } from '@cesium/engine';\nexport { getMetadataClassProperty } from '@cesium/engine';\nexport { getMetadataProperty } from '@cesium/engine';\nexport { hasExtension } from '@cesium/engine';\nexport { parseBatchTable } from '@cesium/engine';\nexport { parseFeatureMetadataLegacy } from '@cesium/engine';\nexport { parseStructuralMetadata } from '@cesium/engine';\nexport { preprocess3DTileContent } from '@cesium/engine';\nexport { processVoxelProperties } from '@cesium/engine';\nexport { CesiumWidget } from '@cesium/engine';\nexport { _shadersAllMaterialAppearanceFS } from '@cesium/engine';\nexport { _shadersAllMaterialAppearanceVS } from '@cesium/engine';\nexport { _shadersBasicMaterialAppearanceFS } from '@cesium/engine';\nexport { _shadersBasicMaterialAppearanceVS } from '@cesium/engine';\nexport { _shadersEllipsoidSurfaceAppearanceFS } from '@cesium/engine';\nexport { _shadersEllipsoidSurfaceAppearanceVS } from '@cesium/engine';\nexport { _shadersPerInstanceColorAppearanceFS } from '@cesium/engine';\nexport { _shadersPerInstanceColorAppearanceVS } from '@cesium/engine';\nexport { _shadersPerInstanceFlatColorAppearanceFS } from '@cesium/engine';\nexport { _shadersPerInstanceFlatColorAppearanceVS } from '@cesium/engine';\nexport { _shadersPolylineColorAppearanceVS } from '@cesium/engine';\nexport { _shadersPolylineMaterialAppearanceVS } from '@cesium/engine';\nexport { _shadersTexturedMaterialAppearanceFS } from '@cesium/engine';\nexport { _shadersTexturedMaterialAppearanceVS } from '@cesium/engine';\nexport { _shadersCzmBuiltins } from '@cesium/engine';\nexport { _shadersAspectRampMaterial } from '@cesium/engine';\nexport { _shadersBumpMapMaterial } from '@cesium/engine';\nexport { _shadersCheckerboardMaterial } from '@cesium/engine';\nexport { _shadersDotMaterial } from '@cesium/engine';\nexport { _shadersElevationBandMaterial } from '@cesium/engine';\nexport { _shadersElevationContourMaterial } from '@cesium/engine';\nexport { _shadersElevationRampMaterial } from '@cesium/engine';\nexport { _shadersFadeMaterial } from '@cesium/engine';\nexport { _shadersGridMaterial } from '@cesium/engine';\nexport { _shadersNormalMapMaterial } from '@cesium/engine';\nexport { _shadersPolylineArrowMaterial } from '@cesium/engine';\nexport { _shadersPolylineDashMaterial } from '@cesium/engine';\nexport { _shadersPolylineGlowMaterial } from '@cesium/engine';\nexport { _shadersPolylineOutlineMaterial } from '@cesium/engine';\nexport { _shadersRimLightingMaterial } from '@cesium/engine';\nexport { _shadersSlopeRampMaterial } from '@cesium/engine';\nexport { _shadersStripeMaterial } from '@cesium/engine';\nexport { _shadersWater } from '@cesium/engine';\nexport { _shadersWaterMaskMaterial } from '@cesium/engine';\nexport { _shadersAtmosphereStageFS } from '@cesium/engine';\nexport { _shadersAtmosphereStageVS } from '@cesium/engine';\nexport { _shadersCPUStylingStageFS } from '@cesium/engine';\nexport { _shadersCPUStylingStageVS } from '@cesium/engine';\nexport { _shadersCustomShaderStageFS } from '@cesium/engine';\nexport { _shadersCustomShaderStageVS } from '@cesium/engine';\nexport { _shadersEdgeDetectionStageFS } from '@cesium/engine';\nexport { _shadersEdgeVisibilityStageFS } from '@cesium/engine';\nexport { _shadersFeatureIdStageFS } from '@cesium/engine';\nexport { _shadersFeatureIdStageVS } from '@cesium/engine';\nexport { _shadersGeometryStageFS } from '@cesium/engine';\nexport { _shadersGeometryStageVS } from '@cesium/engine';\nexport { _shadersImageBasedLightingStageFS } from '@cesium/engine';\nexport { _shadersInstancingStageCommon } from '@cesium/engine';\nexport { _shadersInstancingStageVS } from '@cesium/engine';\nexport { _shadersLegacyInstancingStageVS } from '@cesium/engine';\nexport { _shadersLightingStageFS } from '@cesium/engine';\nexport { _shadersMaterialStageFS } from '@cesium/engine';\nexport { _shadersMetadataStageFS } from '@cesium/engine';\nexport { _shadersMetadataStageVS } from '@cesium/engine';\nexport { _shadersModelClippingPlanesStageFS } from '@cesium/engine';\nexport { _shadersModelClippingPolygonsStageFS } from '@cesium/engine';\nexport { _shadersModelClippingPolygonsStageVS } from '@cesium/engine';\nexport { _shadersModelColorStageFS } from '@cesium/engine';\nexport { _shadersModelFS } from '@cesium/engine';\nexport { _shadersModelSilhouetteStageFS } from '@cesium/engine';\nexport { _shadersModelSilhouetteStageVS } from '@cesium/engine';\nexport { _shadersModelSplitterStageFS } from '@cesium/engine';\nexport { _shadersModelVS } from '@cesium/engine';\nexport { _shadersMorphTargetsStageVS } from '@cesium/engine';\nexport { _shadersPointCloudStylingStageVS } from '@cesium/engine';\nexport { _shadersPrimitiveOutlineStageFS } from '@cesium/engine';\nexport { _shadersPrimitiveOutlineStageVS } from '@cesium/engine';\nexport { _shadersSelectedFeatureIdStageCommon } from '@cesium/engine';\nexport { _shadersSkinningStageVS } from '@cesium/engine';\nexport { _shadersVerticalExaggerationStageVS } from '@cesium/engine';\nexport { _shadersAcesTonemappingStage } from '@cesium/engine';\nexport { _shadersAdditiveBlend } from '@cesium/engine';\nexport { _shadersAmbientOcclusionGenerate } from '@cesium/engine';\nexport { _shadersAmbientOcclusionModulate } from '@cesium/engine';\nexport { _shadersBlackAndWhite } from '@cesium/engine';\nexport { _shadersBloomComposite } from '@cesium/engine';\nexport { _shadersBrightPass } from '@cesium/engine';\nexport { _shadersBrightness } from '@cesium/engine';\nexport { _shadersCompositeTranslucentClassification } from '@cesium/engine';\nexport { _shadersContrastBias } from '@cesium/engine';\nexport { _shadersDepthOfField } from '@cesium/engine';\nexport { _shadersDepthView } from '@cesium/engine';\nexport { _shadersDepthViewPacked } from '@cesium/engine';\nexport { _shadersEdgeDetection } from '@cesium/engine';\nexport { _shadersFXAA } from '@cesium/engine';\nexport { _shadersFilmicTonemapping } from '@cesium/engine';\nexport { _shadersGaussianBlur1D } from '@cesium/engine';\nexport { _shadersLensFlare } from '@cesium/engine';\nexport { _shadersModifiedReinhardTonemapping } from '@cesium/engine';\nexport { _shadersNightVision } from '@cesium/engine';\nexport { _shadersPassThrough } from '@cesium/engine';\nexport { _shadersPassThroughDepth } from '@cesium/engine';\nexport { _shadersPbrNeutralTonemapping } from '@cesium/engine';\nexport { _shadersPointCloudEyeDomeLighting } from '@cesium/engine';\nexport { _shadersReinhardTonemapping } from '@cesium/engine';\nexport { _shadersSilhouette } from '@cesium/engine';\nexport { _shadersIntersectBox } from '@cesium/engine';\nexport { _shadersIntersectCylinder } from '@cesium/engine';\nexport { _shadersIntersectDepth } from '@cesium/engine';\nexport { _shadersIntersectEllipsoid } from '@cesium/engine';\nexport { _shadersIntersectLongitude } from '@cesium/engine';\nexport { _shadersIntersectPlane } from '@cesium/engine';\nexport { _shadersIntersection } from '@cesium/engine';\nexport { _shadersIntersectionUtils } from '@cesium/engine';\nexport { _shadersMegatexture } from '@cesium/engine';\nexport { _shadersOctree } from '@cesium/engine';\nexport { _shadersVoxelFS } from '@cesium/engine';\nexport { _shadersVoxelUtils } from '@cesium/engine';\nexport { _shadersVoxelVS } from '@cesium/engine';\nexport { _shadersconvertLocalToBoxUv } from '@cesium/engine';\nexport { _shadersconvertLocalToCylinderUv } from '@cesium/engine';\nexport { _shadersconvertLocalToEllipsoidUv } from '@cesium/engine';\nexport { ForEach } from '@cesium/engine';\nexport { addBuffer } from '@cesium/engine';\nexport { addDefaults } from '@cesium/engine';\nexport { addExtensionsRequired } from '@cesium/engine';\nexport { addExtensionsUsed } from '@cesium/engine';\nexport { addPipelineExtras } from '@cesium/engine';\nexport { addToArray } from '@cesium/engine';\nexport { findAccessorMinMax } from '@cesium/engine';\nexport { forEachTextureInMaterial } from '@cesium/engine';\nexport { getAccessorByteStride } from '@cesium/engine';\nexport { getComponentReader } from '@cesium/engine';\nexport { moveTechniqueRenderStates } from '@cesium/engine';\nexport { moveTechniquesToExtension } from '@cesium/engine';\nexport { numberOfComponentsForType } from '@cesium/engine';\nexport { parseGlb } from '@cesium/engine';\nexport { readAccessorPacked } from '@cesium/engine';\nexport { removeExtension } from '@cesium/engine';\nexport { removeExtensionsRequired } from '@cesium/engine';\nexport { removeExtensionsUsed } from '@cesium/engine';\nexport { removePipelineExtras } from '@cesium/engine';\nexport { removeUnusedElements } from '@cesium/engine';\nexport { updateAccessorComponentTypes } from '@cesium/engine';\nexport { updateVersion } from '@cesium/engine';\nexport { usesExtension } from '@cesium/engine';\nexport { AlphaPipelineStage } from '@cesium/engine';\nexport { AtmospherePipelineStage } from '@cesium/engine';\nexport { B3dmLoader } from '@cesium/engine';\nexport { BatchTexturePipelineStage } from '@cesium/engine';\nexport { CPUStylingPipelineStage } from '@cesium/engine';\nexport { CartesianRectangle } from '@cesium/engine';\nexport { ClassificationModelDrawCommand } from '@cesium/engine';\nexport { ClassificationPipelineStage } from '@cesium/engine';\nexport { CustomShader } from '@cesium/engine';\nexport { CustomShaderMode } from '@cesium/engine';\nexport { CustomShaderPipelineStage } from '@cesium/engine';\nexport { CustomShaderTranslucencyMode } from '@cesium/engine';\nexport { DequantizationPipelineStage } from '@cesium/engine';\nexport { EdgeDetectionPipelineStage } from '@cesium/engine';\nexport { EdgeVisibilityPipelineStage } from '@cesium/engine';\nexport { FeatureIdPipelineStage } from '@cesium/engine';\nexport { GeoJsonLoader } from '@cesium/engine';\nexport { GeometryPipelineStage } from '@cesium/engine';\nexport { I3dmLoader } from '@cesium/engine';\nexport { ImageBasedLightingPipelineStage } from '@cesium/engine';\nexport { ImageryConfiguration } from '@cesium/engine';\nexport { ImageryCoverage } from '@cesium/engine';\nexport { ImageryFlags } from '@cesium/engine';\nexport { ImageryInput } from '@cesium/engine';\nexport { ImageryPipelineStage } from '@cesium/engine';\nexport { InstancingPipelineStage } from '@cesium/engine';\nexport { LightingModel } from '@cesium/engine';\nexport { LightingPipelineStage } from '@cesium/engine';\nexport { MappedPositions } from '@cesium/engine';\nexport { MaterialPipelineStage } from '@cesium/engine';\nexport { MetadataPickingPipelineStage } from '@cesium/engine';\nexport { MetadataPipelineStage } from '@cesium/engine';\nexport { Model } from '@cesium/engine';\nexport { Model3DTileContent } from '@cesium/engine';\nexport { ModelAlphaOptions } from '@cesium/engine';\nexport { ModelAnimation } from '@cesium/engine';\nexport { ModelAnimationChannel } from '@cesium/engine';\nexport { ModelAnimationCollection } from '@cesium/engine';\nexport { ModelArticulation } from '@cesium/engine';\nexport { ModelArticulationStage } from '@cesium/engine';\nexport { ModelClippingPlanesPipelineStage } from '@cesium/engine';\nexport { ModelClippingPolygonsPipelineStage } from '@cesium/engine';\nexport { ModelColorPipelineStage } from '@cesium/engine';\nexport { ModelDrawCommand } from '@cesium/engine';\nexport { ModelDrawCommands } from '@cesium/engine';\nexport { ModelFeature } from '@cesium/engine';\nexport { ModelFeatureTable } from '@cesium/engine';\nexport { ModelImagery } from '@cesium/engine';\nexport { ModelImageryMapping } from '@cesium/engine';\nexport { ModelLightingOptions } from '@cesium/engine';\nexport { ModelMatrixUpdateStage } from '@cesium/engine';\nexport { ModelNode } from '@cesium/engine';\nexport { ModelPrimitiveImagery } from '@cesium/engine';\nexport { ModelReader } from '@cesium/engine';\nexport { ModelRenderResources } from '@cesium/engine';\nexport { ModelRuntimeNode } from '@cesium/engine';\nexport { ModelRuntimePrimitive } from '@cesium/engine';\nexport { ModelSceneGraph } from '@cesium/engine';\nexport { ModelSilhouettePipelineStage } from '@cesium/engine';\nexport { ModelSkin } from '@cesium/engine';\nexport { ModelSplitterPipelineStage } from '@cesium/engine';\nexport { ModelStatistics } from '@cesium/engine';\nexport { ModelType } from '@cesium/engine';\nexport { ModelUtility } from '@cesium/engine';\nexport { MorphTargetsPipelineStage } from '@cesium/engine';\nexport { NodeRenderResources } from '@cesium/engine';\nexport { NodeStatisticsPipelineStage } from '@cesium/engine';\nexport { PickingPipelineStage } from '@cesium/engine';\nexport { PntsLoader } from '@cesium/engine';\nexport { PointCloudStylingPipelineStage } from '@cesium/engine';\nexport { PrimitiveOutlineGenerator } from '@cesium/engine';\nexport { PrimitiveOutlinePipelineStage } from '@cesium/engine';\nexport { PrimitiveRenderResources } from '@cesium/engine';\nexport { PrimitiveStatisticsPipelineStage } from '@cesium/engine';\nexport { SceneMode2DPipelineStage } from '@cesium/engine';\nexport { SelectedFeatureIdPipelineStage } from '@cesium/engine';\nexport { SkinningPipelineStage } from '@cesium/engine';\nexport { StyleCommandsNeeded } from '@cesium/engine';\nexport { TextureManager } from '@cesium/engine';\nexport { TextureUniform } from '@cesium/engine';\nexport { TilesetPipelineStage } from '@cesium/engine';\nexport { UniformType } from '@cesium/engine';\nexport { VaryingType } from '@cesium/engine';\nexport { VerticalExaggerationPipelineStage } from '@cesium/engine';\nexport { WireframePipelineStage } from '@cesium/engine';\nexport { pickModel } from '@cesium/engine';\nexport { _shadersdegreesPerRadian } from '@cesium/engine';\nexport { _shadersdepthRange } from '@cesium/engine';\nexport { _shadersepsilon1 } from '@cesium/engine';\nexport { _shadersepsilon2 } from '@cesium/engine';\nexport { _shadersepsilon3 } from '@cesium/engine';\nexport { _shadersepsilon4 } from '@cesium/engine';\nexport { _shadersepsilon5 } from '@cesium/engine';\nexport { _shadersepsilon6 } from '@cesium/engine';\nexport { _shadersepsilon7 } from '@cesium/engine';\nexport { _shadersinfinity } from '@cesium/engine';\nexport { _shadersoneOverPi } from '@cesium/engine';\nexport { _shadersoneOverTwoPi } from '@cesium/engine';\nexport { _shaderspassCesium3DTile } from '@cesium/engine';\nexport { _shaderspassCesium3DTileClassification } from '@cesium/engine';\nexport { _shaderspassCesium3DTileClassificationIgnoreShow } from '@cesium/engine';\nexport { _shaderspassCesium3DTileEdges } from '@cesium/engine';\nexport { _shaderspassClassification } from '@cesium/engine';\nexport { _shaderspassCompute } from '@cesium/engine';\nexport { _shaderspassEnvironment } from '@cesium/engine';\nexport { _shaderspassGaussianSplats } from '@cesium/engine';\nexport { _shaderspassGlobe } from '@cesium/engine';\nexport { _shaderspassOpaque } from '@cesium/engine';\nexport { _shaderspassOverlay } from '@cesium/engine';\nexport { _shaderspassTerrainClassification } from '@cesium/engine';\nexport { _shaderspassTranslucent } from '@cesium/engine';\nexport { _shaderspassVoxels } from '@cesium/engine';\nexport { _shaderspi } from '@cesium/engine';\nexport { _shaderspiOverFour } from '@cesium/engine';\nexport { _shaderspiOverSix } from '@cesium/engine';\nexport { _shaderspiOverThree } from '@cesium/engine';\nexport { _shaderspiOverTwo } from '@cesium/engine';\nexport { _shadersradiansPerDegree } from '@cesium/engine';\nexport { _shaderssceneMode2D } from '@cesium/engine';\nexport { _shaderssceneMode3D } from '@cesium/engine';\nexport { _shaderssceneModeColumbusView } from '@cesium/engine';\nexport { _shaderssceneModeMorphing } from '@cesium/engine';\nexport { _shaderssolarRadius } from '@cesium/engine';\nexport { _shadersthreePiOver2 } from '@cesium/engine';\nexport { _shaderstwoPi } from '@cesium/engine';\nexport { _shaderswebMercatorMaxLatitude } from '@cesium/engine';\nexport { _shadersdepthRangeStruct } from '@cesium/engine';\nexport { _shadersmaterial } from '@cesium/engine';\nexport { _shadersmaterialInput } from '@cesium/engine';\nexport { _shadersmodelMaterial } from '@cesium/engine';\nexport { _shadersmodelVertexOutput } from '@cesium/engine';\nexport { _shadersray } from '@cesium/engine';\nexport { _shadersraySegment } from '@cesium/engine';\nexport { _shadersshadowParameters } from '@cesium/engine';\nexport { _shadersHSBToRGB } from '@cesium/engine';\nexport { _shadersHSLToRGB } from '@cesium/engine';\nexport { _shadersRGBToHSB } from '@cesium/engine';\nexport { _shadersRGBToHSL } from '@cesium/engine';\nexport { _shadersRGBToXYZ } from '@cesium/engine';\nexport { _shadersXYZToRGB } from '@cesium/engine';\nexport { _shadersacesTonemapping } from '@cesium/engine';\nexport { _shadersalphaWeight } from '@cesium/engine';\nexport { _shadersantialias } from '@cesium/engine';\nexport { _shadersapplyHSBShift } from '@cesium/engine';\nexport { _shadersapproximateSphericalCoordinates } from '@cesium/engine';\nexport { _shadersapproximateTanh } from '@cesium/engine';\nexport { _shadersbackFacing } from '@cesium/engine';\nexport { _shadersbranchFreeTernary } from '@cesium/engine';\nexport { _shaderscascadeColor } from '@cesium/engine';\nexport { _shaderscascadeDistance } from '@cesium/engine';\nexport { _shaderscascadeMatrix } from '@cesium/engine';\nexport { _shaderscascadeWeights } from '@cesium/engine';\nexport { _shadersclipPolygons } from '@cesium/engine';\nexport { _shaderscolumbusViewMorph } from '@cesium/engine';\nexport { _shaderscomputeAtmosphereColor } from '@cesium/engine';\nexport { _shaderscomputeGroundAtmosphereScattering } from '@cesium/engine';\nexport { _shaderscomputePosition } from '@cesium/engine';\nexport { _shaderscomputeScattering } from '@cesium/engine';\nexport { _shaderscosineAndSine } from '@cesium/engine';\nexport { _shadersdecodeRGB8 } from '@cesium/engine';\nexport { _shadersdecompressTextureCoordinates } from '@cesium/engine';\nexport { _shadersdepthClamp } from '@cesium/engine';\nexport { _shaderseastNorthUpToEyeCoordinates } from '@cesium/engine';\nexport { _shadersellipsoidContainsPoint } from '@cesium/engine';\nexport { _shadersellipsoidTextureCoordinates } from '@cesium/engine';\nexport { _shadersequalsEpsilon } from '@cesium/engine';\nexport { _shaderseyeOffset } from '@cesium/engine';\nexport { _shaderseyeToWindowCoordinates } from '@cesium/engine';\nexport { _shadersfastApproximateAtan } from '@cesium/engine';\nexport { _shadersfog } from '@cesium/engine';\nexport { _shadersgammaCorrect } from '@cesium/engine';\nexport { _shadersgeodeticSurfaceNormal } from '@cesium/engine';\nexport { _shadersgetDefaultMaterial } from '@cesium/engine';\nexport { _shadersgetDynamicAtmosphereLightDirection } from '@cesium/engine';\nexport { _shadersgetLambertDiffuse } from '@cesium/engine';\nexport { _shadersgetSpecular } from '@cesium/engine';\nexport { _shadersgetWaterNoise } from '@cesium/engine';\nexport { _shadershue } from '@cesium/engine';\nexport { _shadersinverseGamma } from '@cesium/engine';\nexport { _shadersisEmpty } from '@cesium/engine';\nexport { _shadersisFull } from '@cesium/engine';\nexport { _shaderslatitudeToWebMercatorFraction } from '@cesium/engine';\nexport { _shaderslineDistance } from '@cesium/engine';\nexport { _shaderslinearToSrgb } from '@cesium/engine';\nexport { _shadersluminance } from '@cesium/engine';\nexport { _shadersmaximumComponent } from '@cesium/engine';\nexport { _shadersmetersPerPixel } from '@cesium/engine';\nexport { _shadersmodelToWindowCoordinates } from '@cesium/engine';\nexport { _shadersmultiplyWithColorBalance } from '@cesium/engine';\nexport { _shadersnearFarScalar } from '@cesium/engine';\nexport { _shadersoctDecode } from '@cesium/engine';\nexport { _shaderspackDepth } from '@cesium/engine';\nexport { _shaderspbrLighting } from '@cesium/engine';\nexport { _shaderspbrNeutralTonemapping } from '@cesium/engine';\nexport { _shadersphong } from '@cesium/engine';\nexport { _shadersplaneDistance } from '@cesium/engine';\nexport { _shaderspointAlongRay } from '@cesium/engine';\nexport { _shadersrayEllipsoidIntersectionInterval } from '@cesium/engine';\nexport { _shadersraySphereIntersectionInterval } from '@cesium/engine';\nexport { _shadersreadDepth } from '@cesium/engine';\nexport { _shadersreadNonPerspective } from '@cesium/engine';\nexport { _shadersreverseLogDepth } from '@cesium/engine';\nexport { _shadersround } from '@cesium/engine';\nexport { _shaderssaturation } from '@cesium/engine';\nexport { _shadersshadowDepthCompare } from '@cesium/engine';\nexport { _shadersshadowVisibility } from '@cesium/engine';\nexport { _shaderssignNotZero } from '@cesium/engine';\nexport { _shaderssphericalHarmonics } from '@cesium/engine';\nexport { _shaderssrgbToLinear } from '@cesium/engine';\nexport { _shaderstangentToEyeSpaceMatrix } from '@cesium/engine';\nexport { _shaderstextureCube } from '@cesium/engine';\nexport { _shaderstransformPlane } from '@cesium/engine';\nexport { _shaderstranslateRelativeToEye } from '@cesium/engine';\nexport { _shaderstranslucentPhong } from '@cesium/engine';\nexport { _shaderstranspose } from '@cesium/engine';\nexport { _shadersunpackClippingExtents } from '@cesium/engine';\nexport { _shadersunpackDepth } from '@cesium/engine';\nexport { _shadersunpackFloat } from '@cesium/engine';\nexport { _shadersunpackTexture } from '@cesium/engine';\nexport { _shadersunpackUint } from '@cesium/engine';\nexport { _shadersvalueTransform } from '@cesium/engine';\nexport { _shadersvertexLogDepth } from '@cesium/engine';\nexport { _shaderswindowToEyeCoordinates } from '@cesium/engine';\nexport { _shaderswriteDepthClamp } from '@cesium/engine';\nexport { _shaderswriteLogDepth } from '@cesium/engine';\nexport { _shaderswriteNonPerspective } from '@cesium/engine';\nexport { AnchorPointDirect } from '@cesium/engine';\nexport { AnchorPointIndirect } from '@cesium/engine';\nexport { CorrelationGroup } from '@cesium/engine';\nexport { GltfGpmLoader } from '@cesium/engine';\nexport { GltfGpmLocal } from '@cesium/engine';\nexport { GltfMeshPrimitiveGpmLoader } from '@cesium/engine';\nexport { MeshPrimitiveGpmLocal } from '@cesium/engine';\nexport { PpeMetadata } from '@cesium/engine';\nexport { PpeSource } from '@cesium/engine';\nexport { PpeTexture } from '@cesium/engine';\nexport { Spdcf } from '@cesium/engine';\nexport { StorageType } from '@cesium/engine';\nexport { createTaskProcessorWorker } from '@cesium/engine';\nexport { ClockViewModel } from '@cesium/widgets';\nexport { Command } from '@cesium/widgets';\nexport { InspectorShared } from '@cesium/widgets';\nexport { SvgPathBindingHandler } from '@cesium/widgets';\nexport { ToggleButtonViewModel } from '@cesium/widgets';\nexport { createCommand } from '@cesium/widgets';\nexport { subscribeAndEvaluate } from '@cesium/widgets';\nexport { Animation } from '@cesium/widgets';\nexport { AnimationViewModel } from '@cesium/widgets';\nexport { BaseLayerPicker } from '@cesium/widgets';\nexport { BaseLayerPickerViewModel } from '@cesium/widgets';\nexport { ProviderViewModel } from '@cesium/widgets';\nexport { createDefaultImageryProviderViewModels } from '@cesium/widgets';\nexport { createDefaultTerrainProviderViewModels } from '@cesium/widgets';\nexport { Cesium3DTilesInspector } from '@cesium/widgets';\nexport { Cesium3DTilesInspectorViewModel } from '@cesium/widgets';\nexport { FullscreenButton } from '@cesium/widgets';\nexport { FullscreenButtonViewModel } from '@cesium/widgets';\nexport { CesiumInspector } from '@cesium/widgets';\nexport { CesiumInspectorViewModel } from '@cesium/widgets';\nexport { Geocoder } from '@cesium/widgets';\nexport { GeocoderViewModel } from '@cesium/widgets';\nexport { HomeButton } from '@cesium/widgets';\nexport { HomeButtonViewModel } from '@cesium/widgets';\nexport { I3SBuildingSceneLayerExplorer } from '@cesium/widgets';\nexport { I3SBuildingSceneLayerExplorerViewModel } from '@cesium/widgets';\nexport { InfoBox } from '@cesium/widgets';\nexport { InfoBoxViewModel } from '@cesium/widgets';\nexport { NavigationHelpButton } from '@cesium/widgets';\nexport { NavigationHelpButtonViewModel } from '@cesium/widgets';\nexport { PerformanceWatchdog } from '@cesium/widgets';\nexport { PerformanceWatchdogViewModel } from '@cesium/widgets';\nexport { ProjectionPicker } from '@cesium/widgets';\nexport { ProjectionPickerViewModel } from '@cesium/widgets';\nexport { SceneModePicker } from '@cesium/widgets';\nexport { SceneModePickerViewModel } from '@cesium/widgets';\nexport { SelectionIndicator } from '@cesium/widgets';\nexport { SelectionIndicatorViewModel } from '@cesium/widgets';\nexport { knockout_3_5_1 } from '@cesium/widgets';\nexport { knockout_es5 } from '@cesium/widgets';\nexport { knockout } from '@cesium/widgets';\nexport { Timeline } from '@cesium/widgets';\nexport { TimelineHighlightRange } from '@cesium/widgets';\nexport { TimelineTrack } from '@cesium/widgets';\nexport { VRButton } from '@cesium/widgets';\nexport { VRButtonViewModel } from '@cesium/widgets';\nexport { Viewer } from '@cesium/widgets';\nexport { viewerCesium3DTilesInspectorMixin } from '@cesium/widgets';\nexport { viewerCesiumInspectorMixin } from '@cesium/widgets';\nexport { viewerDragDropMixin } from '@cesium/widgets';\nexport { viewerPerformanceWatchdogMixin } from '@cesium/widgets';\nexport { viewerVoxelInspectorMixin } from '@cesium/widgets';\nexport { VoxelInspector } from '@cesium/widgets';\nexport { VoxelInspectorViewModel } from '@cesium/widgets';\n","/*! DataTables Bootstrap 3 integration\n * ©2011-2015 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n/**\n * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t\"<'row'<'col-sm-6'l><'col-sm-6'f>>\" +\n\t\t\"<'row'<'col-sm-12'tr>>\" +\n\t\t\"<'row'<'col-sm-5'i><'col-sm-7'p>>\",\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( DataTable.ext.classes, {\n\tsWrapper:      \"dataTables_wrapper form-inline dt-bootstrap\",\n\tsFilterInput:  \"form-control input-sm\",\n\tsLengthSelect: \"form-control input-sm\",\n\tsProcessing:   \"dataTables_processing panel panel-default\"\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {\n\tvar api     = new DataTable.Api( settings );\n\tvar classes = settings.oClasses;\n\tvar lang    = settings.oLanguage.oPaginate;\n\tvar aria = settings.oLanguage.oAria.paginate || {};\n\tvar btnDisplay, btnClass;\n\n\tvar attach = function( container, buttons ) {\n\t\tvar i, ien, node, button;\n\t\tvar clickHandler = function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tif ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {\n\t\t\t\tapi.page( e.data.action ).draw( 'page' );\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\tattach( container, button );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtnDisplay = '';\n\t\t\t\tbtnClass = '';\n\n\t\t\t\tswitch ( button ) {\n\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\tbtnDisplay = '&#x2026;';\n\t\t\t\t\t\tbtnClass = 'disabled';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'first':\n\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'last':\n\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t'' : ' disabled');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t'active' : '';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\tvar disabled = btnClass.indexOf('disabled') !== -1;\n\n\t\t\t\t\tnode = $('<li>', {\n\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append( $('<a>', {\n\t\t\t\t\t\t\t\t'href': disabled ? null : '#',\n\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t'aria-current': btnClass === 'active' ? 'page' : null,\n\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\tsettings.oApi._fnBindAction(\n\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t// inside an iframe or frame. \n\tvar activeEl;\n\n\ttry {\n\t\t// Because this approach is destroying and recreating the paging\n\t\t// elements, focus is lost on the select button which is bad for\n\t\t// accessibility. So we want to restore focus once the draw has\n\t\t// completed\n\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t}\n\tcatch (e) {}\n\n\tattach(\n\t\t$(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n\t\tbuttons\n\t);\n\n\tif ( activeEl !== undefined ) {\n\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t}\n};\n\n\nexport default DataTable;\n","/*! Bootstrap integration for DataTables' Buttons\n * © SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net-bs';\nimport Buttons from 'datatables.net-buttons';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n$.extend(true, DataTable.Buttons.defaults, {\n\tdom: {\n\t\tcontainer: {\n\t\t\tclassName: 'dt-buttons btn-group flex-wrap'\n\t\t},\n\t\tbutton: {\n\t\t\tclassName: 'btn btn-default',\n\t\t\tactive: 'active'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\tdropHtml: '<span class=\"caret\"></span>'\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\ttag: 'ul',\n\t\t\t\t\tclassName: 'dropdown-menu'\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloseButton: false,\n\t\t\tbutton: {\n\t\t\t\ttag: 'li',\n\t\t\t\tclassName: 'dt-button',\n\t\t\t\tactive: 'dt-button-active-a',\n\t\t\t\tdisabled: 'disabled',\n\t\t\t\tliner: {\n\t\t\t\t\ttag: 'a'\n\t\t\t\t},\n\t\t\t\tspacer: {\n\t\t\t\t\tclassName: 'divider',\n\t\t\t\t\ttag: 'li'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\ttag: 'a',\n\t\t\t\tclassName: 'btn btn-default dt-button-split-drop-button',\n\t\t\t\tcloseButton: false\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\ttag: 'button',\n\t\t\t\tdropHtml: '<span class=\"caret\"></span>',\n\t\t\t\tclassName:\n\t\t\t\t\t'btn btn-default dt-button-split-drop dropdown-toggle dropdown-toggle-split',\n\t\t\t\tcloseButton: false,\n\t\t\t\talign: 'split-left',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\ttag: 'div',\n\t\t\t\tclassName: 'dt-button-split btn-group',\n\t\t\t\tcloseButton: false\n\t\t\t}\n\t\t}\n\t}\n});\n\n\nexport default DataTable;\n","/*!\n * Column visibility buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\nimport Buttons from 'datatables.net-buttons';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n$.extend(DataTable.ext.buttons, {\n\t// A collection of column visibility buttons\n\tcolvis: function (dt, conf) {\n\t\tvar node = null;\n\t\tvar buttonConf = {\n\t\t\textend: 'collection',\n\t\t\tinit: function (dt, n) {\n\t\t\t\tnode = n;\n\t\t\t},\n\t\t\ttext: function (dt) {\n\t\t\t\treturn dt.i18n('buttons.colvis', 'Column visibility');\n\t\t\t},\n\t\t\tclassName: 'buttons-colvis',\n\t\t\tcloseButton: false,\n\t\t\tbuttons: [\n\t\t\t\t{\n\t\t\t\t\textend: 'columnsToggle',\n\t\t\t\t\tcolumns: conf.columns,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\t\t// Rebuild the collection with the new column structure if columns are reordered\n\t\tdt.on('column-reorder.dt' + conf.namespace, function (e, settings, details) {\n\t\t\tdt.button(null, dt.button(null, node).node()).collectionRebuild([\n\t\t\t\t{\n\t\t\t\t\textend: 'columnsToggle',\n\t\t\t\t\tcolumns: conf.columns,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t}\n\t\t\t]);\n\t\t});\n\n\t\treturn buttonConf;\n\t},\n\n\t// Selected columns with individual buttons - toggle column visibility\n\tcolumnsToggle: function (dt, conf) {\n\t\tvar columns = dt\n\t\t\t.columns(conf.columns)\n\t\t\t.indexes()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn {\n\t\t\t\t\textend: 'columnToggle',\n\t\t\t\t\tcolumns: idx,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t};\n\t\t\t})\n\t\t\t.toArray();\n\n\t\treturn columns;\n\t},\n\n\t// Single button to toggle column visibility\n\tcolumnToggle: function (dt, conf) {\n\t\treturn {\n\t\t\textend: 'columnVisibility',\n\t\t\tcolumns: conf.columns,\n\t\t\tcolumnText: conf.columnText\n\t\t};\n\t},\n\n\t// Selected columns with individual buttons - set column visibility\n\tcolumnsVisibility: function (dt, conf) {\n\t\tvar columns = dt\n\t\t\t.columns(conf.columns)\n\t\t\t.indexes()\n\t\t\t.map(function (idx) {\n\t\t\t\treturn {\n\t\t\t\t\textend: 'columnVisibility',\n\t\t\t\t\tcolumns: idx,\n\t\t\t\t\tvisibility: conf.visibility,\n\t\t\t\t\tcolumnText: conf.columnText\n\t\t\t\t};\n\t\t\t})\n\t\t\t.toArray();\n\n\t\treturn columns;\n\t},\n\n\t// Single button to set column visibility\n\tcolumnVisibility: {\n\t\tcolumns: undefined, // column selector\n\t\ttext: function (dt, button, conf) {\n\t\t\treturn conf._columnText(dt, conf);\n\t\t},\n\t\tclassName: 'buttons-columnVisibility',\n\t\taction: function (e, dt, button, conf) {\n\t\t\tvar col = dt.columns(conf.columns);\n\t\t\tvar curr = col.visible();\n\n\t\t\tcol.visible(\n\t\t\t\tconf.visibility !== undefined ? conf.visibility : !(curr.length ? curr[0] : false)\n\t\t\t);\n\t\t},\n\t\tinit: function (dt, button, conf) {\n\t\t\tvar that = this;\n\t\t\tbutton.attr('data-cv-idx', conf.columns);\n\n\t\t\tdt.on('column-visibility.dt' + conf.namespace, function (e, settings) {\n\t\t\t\tif (!settings.bDestroying && settings.nTable == dt.settings()[0].nTable) {\n\t\t\t\t\tthat.active(dt.column(conf.columns).visible());\n\t\t\t\t}\n\t\t\t}).on('column-reorder.dt' + conf.namespace, function (e, settings, details) {\n\t\t\t\t// Button has been removed from the DOM\n\t\t\t\tif (conf.destroying) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (dt.columns(conf.columns).count() !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// This button controls the same column index but the text for the column has\n\t\t\t\t// changed\n\t\t\t\tthat.text(conf._columnText(dt, conf));\n\n\t\t\t\t// Since its a different column, we need to check its visibility\n\t\t\t\tthat.active(dt.column(conf.columns).visible());\n\t\t\t});\n\n\t\t\tthis.active(dt.column(conf.columns).visible());\n\t\t},\n\t\tdestroy: function (dt, button, conf) {\n\t\t\tdt.off('column-visibility.dt' + conf.namespace).off(\n\t\t\t\t'column-reorder.dt' + conf.namespace\n\t\t\t);\n\t\t},\n\n\t\t_columnText: function (dt, conf) {\n\t\t\t// Use DataTables' internal data structure until this is presented\n\t\t\t// is a public API. The other option is to use\n\t\t\t// `$( column(col).node() ).text()` but the node might not have been\n\t\t\t// populated when Buttons is constructed.\n\t\t\tvar idx = dt.column(conf.columns).index();\n\t\t\tvar title = dt.settings()[0].aoColumns[idx].sTitle;\n\n\t\t\tif (!title) {\n\t\t\t\ttitle = dt.column(idx).header().innerHTML;\n\t\t\t}\n\n\t\t\ttitle = title\n\t\t\t\t.replace(/\\n/g, ' ') // remove new lines\n\t\t\t\t.replace(/<br\\s*\\/?>/gi, ' ') // replace line breaks with spaces\n\t\t\t\t.replace(/<select(.*?)<\\/select>/g, '') // remove select tags, including options text\n\t\t\t\t.replace(/<!\\-\\-.*?\\-\\->/g, '') // strip HTML comments\n\t\t\t\t.replace(/<.*?>/g, '') // strip HTML\n\t\t\t\t.replace(/^\\s+|\\s+$/g, ''); // trim\n\n\t\t\treturn conf.columnText ? conf.columnText(dt, idx, title) : title;\n\t\t}\n\t},\n\n\tcolvisRestore: {\n\t\tclassName: 'buttons-colvisRestore',\n\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.colvisRestore', 'Restore visibility');\n\t\t},\n\n\t\tinit: function (dt, button, conf) {\n\t\t\tconf._visOriginal = dt\n\t\t\t\t.columns()\n\t\t\t\t.indexes()\n\t\t\t\t.map(function (idx) {\n\t\t\t\t\treturn dt.column(idx).visible();\n\t\t\t\t})\n\t\t\t\t.toArray();\n\t\t},\n\n\t\taction: function (e, dt, button, conf) {\n\t\t\tdt.columns().every(function (i) {\n\t\t\t\t// Take into account that ColReorder might have disrupted our\n\t\t\t\t// indexes\n\t\t\t\tvar idx =\n\t\t\t\t\tdt.colReorder && dt.colReorder.transpose\n\t\t\t\t\t\t? dt.colReorder.transpose(i, 'toOriginal')\n\t\t\t\t\t\t: i;\n\n\t\t\t\tthis.visible(conf._visOriginal[idx]);\n\t\t\t});\n\t\t}\n\t},\n\n\tcolvisGroup: {\n\t\tclassName: 'buttons-colvisGroup',\n\n\t\taction: function (e, dt, button, conf) {\n\t\t\tdt.columns(conf.show).visible(true, false);\n\t\t\tdt.columns(conf.hide).visible(false, false);\n\n\t\t\tdt.columns.adjust();\n\t\t},\n\n\t\tshow: [],\n\n\t\thide: []\n\t}\n});\n\n\nexport default DataTable;\n","/*!\n * HTML5 export buttons for Buttons and DataTables.\n * © SpryMedia Ltd - datatables.net/license\n *\n * FileSaver.js (1.3.3) - MIT license\n * Copyright © 2016 Eli Grey - http://eligrey.com\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\nimport Buttons from 'datatables.net-buttons';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n// Allow the constructor to pass in JSZip and PDFMake from external requires.\n// Otherwise, use globally defined variables, if they are available.\nvar useJszip;\nvar usePdfmake;\n\nfunction _jsZip() {\n\treturn useJszip || window.JSZip;\n}\nfunction _pdfMake() {\n\treturn usePdfmake || window.pdfMake;\n}\n\nDataTable.Buttons.pdfMake = function (_) {\n\tif (!_) {\n\t\treturn _pdfMake();\n\t}\n\tusePdfmake = _;\n};\n\nDataTable.Buttons.jszip = function (_) {\n\tif (!_) {\n\t\treturn _jsZip();\n\t}\n\tuseJszip = _;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * FileSaver.js dependency\n */\n\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\nvar _saveAs = (function (view) {\n\t'use strict';\n\t// IE <10 is explicitly unsupported\n\tif (\n\t\ttypeof view === 'undefined' ||\n\t\t(typeof navigator !== 'undefined' && /MSIE [1-9]\\./.test(navigator.userAgent))\n\t) {\n\t\treturn;\n\t}\n\tvar doc = view.document,\n\t\t// only get URL when necessary in case Blob.js hasn't overridden it yet\n\t\tget_URL = function () {\n\t\t\treturn view.URL || view.webkitURL || view;\n\t\t},\n\t\tsave_link = doc.createElementNS('http://www.w3.org/1999/xhtml', 'a'),\n\t\tcan_use_save_link = 'download' in save_link,\n\t\tclick = function (node) {\n\t\t\tvar event = new MouseEvent('click');\n\t\t\tnode.dispatchEvent(event);\n\t\t},\n\t\tis_safari = /constructor/i.test(view.HTMLElement) || view.safari,\n\t\tis_chrome_ios = /CriOS\\/[\\d]+/.test(navigator.userAgent),\n\t\tthrow_outside = function (ex) {\n\t\t\t(view.setImmediate || view.setTimeout)(function () {\n\t\t\t\tthrow ex;\n\t\t\t}, 0);\n\t\t},\n\t\tforce_saveable_type = 'application/octet-stream',\n\t\t// the Blob API is fundamentally broken as there is no \"downloadfinished\" event to subscribe to\n\t\tarbitrary_revoke_timeout = 1000 * 40, // in ms\n\t\trevoke = function (file) {\n\t\t\tvar revoker = function () {\n\t\t\t\tif (typeof file === 'string') {\n\t\t\t\t\t// file is an object URL\n\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// file is a File\n\t\t\t\t\tfile.remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t},\n\t\tdispatch = function (filesaver, event_types, event) {\n\t\t\tevent_types = [].concat(event_types);\n\t\t\tvar i = event_types.length;\n\t\t\twhile (i--) {\n\t\t\t\tvar listener = filesaver['on' + event_types[i]];\n\t\t\t\tif (typeof listener === 'function') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tauto_bom = function (blob) {\n\t\t\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\n\t\t\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\t\t\tif (\n\t\t\t\t/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(\n\t\t\t\t\tblob.type\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn new Blob([String.fromCharCode(0xfeff), blob], { type: blob.type });\n\t\t\t}\n\t\t\treturn blob;\n\t\t},\n\t\tFileSaver = function (blob, name, no_auto_bom) {\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\tvar filesaver = this,\n\t\t\t\ttype = blob.type,\n\t\t\t\tforce = type === force_saveable_type,\n\t\t\t\tobject_url,\n\t\t\t\tdispatch_all = function () {\n\t\t\t\t\tdispatch(filesaver, 'writestart progress write writeend'.split(' '));\n\t\t\t\t},\n\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\tfs_error = function () {\n\t\t\t\t\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\n\t\t\t\t\t\t// Safari doesn't allow downloading of blob urls\n\t\t\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\t\treader.onloadend = function () {\n\t\t\t\t\t\t\tvar url = is_chrome_ios\n\t\t\t\t\t\t\t\t? reader.result\n\t\t\t\t\t\t\t\t: reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');\n\t\t\t\t\t\t\tvar popup = view.open(url, '_blank');\n\t\t\t\t\t\t\tif (!popup) view.location.href = url;\n\t\t\t\t\t\t\turl = undefined; // release reference before dispatching\n\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\t};\n\t\t\t\t\t\treader.readAsDataURL(blob);\n\t\t\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// don't create more object URLs than needed\n\t\t\t\t\tif (!object_url) {\n\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t}\n\t\t\t\t\tif (force) {\n\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar opened = view.open(object_url, '_blank');\n\t\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\t\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\n\t\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t};\n\t\t\tfilesaver.readyState = filesaver.INIT;\n\n\t\t\tif (can_use_save_link) {\n\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfs_error();\n\t\t},\n\t\tFS_proto = FileSaver.prototype,\n\t\tsaveAs = function (blob, name, no_auto_bom) {\n\t\t\treturn new FileSaver(blob, name || blob.name || 'download', no_auto_bom);\n\t\t};\n\t// IE 10+ (native saveAs)\n\tif (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob) {\n\t\treturn function (blob, name, no_auto_bom) {\n\t\t\tname = name || blob.name || 'download';\n\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\treturn navigator.msSaveOrOpenBlob(blob, name);\n\t\t};\n\t}\n\n\tFS_proto.abort = function () {};\n\tFS_proto.readyState = FS_proto.INIT = 0;\n\tFS_proto.WRITING = 1;\n\tFS_proto.DONE = 2;\n\n\tFS_proto.error =\n\t\tFS_proto.onwritestart =\n\t\tFS_proto.onprogress =\n\t\tFS_proto.onwrite =\n\t\tFS_proto.onabort =\n\t\tFS_proto.onerror =\n\t\tFS_proto.onwriteend =\n\t\t\tnull;\n\n\treturn saveAs;\n})(\n\t(typeof self !== 'undefined' && self) ||\n\t\t(typeof window !== 'undefined' && window) ||\n\t\tthis.content\n);\n\n// Expose file saver on the DataTables API. Can't attach to `DataTables.Buttons`\n// since this file can be loaded before Button's core!\nDataTable.fileSave = _saveAs;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Local (private) functions\n */\n\n/**\n * Get the sheet name for Excel exports.\n *\n * @param {object}\tconfig Button configuration\n */\nvar _sheetname = function (config) {\n\tvar sheetName = 'Sheet1';\n\n\tif (config.sheetName) {\n\t\tsheetName = config.sheetName.replace(/[\\[\\]\\*\\/\\\\\\?\\:]/g, '');\n\t}\n\n\treturn sheetName;\n};\n\n/**\n * Get the newline character(s)\n *\n * @param {object}\tconfig Button configuration\n * @return {string}\t\t\t\tNewline character\n */\nvar _newLine = function (config) {\n\treturn config.newline ? config.newline : navigator.userAgent.match(/Windows/) ? '\\r\\n' : '\\n';\n};\n\n/**\n * Combine the data from the `buttons.exportData` method into a string that\n * will be used in the export file.\n *\n * @param\t{DataTable.Api} dt\t\t DataTables API instance\n * @param\t{object}\t\t\t\tconfig Button configuration\n * @return {object}\t\t\t\t\t\t\t The data to export\n */\nvar _exportData = function (dt, config) {\n\tvar newLine = _newLine(config);\n\tvar data = dt.buttons.exportData(config.exportOptions);\n\tvar boundary = config.fieldBoundary;\n\tvar separator = config.fieldSeparator;\n\tvar reBoundary = new RegExp(boundary, 'g');\n\tvar escapeChar = config.escapeChar !== undefined ? config.escapeChar : '\\\\';\n\tvar join = function (a) {\n\t\tvar s = '';\n\n\t\t// If there is a field boundary, then we might need to escape it in\n\t\t// the source data\n\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\ts += separator;\n\t\t\t}\n\n\t\t\ts += boundary\n\t\t\t\t? boundary + ('' + a[i]).replace(reBoundary, escapeChar + boundary) + boundary\n\t\t\t\t: a[i];\n\t\t}\n\n\t\treturn s;\n\t};\n\n\tvar header = config.header ? join(data.header) + newLine : '';\n\tvar footer = config.footer && data.footer ? newLine + join(data.footer) : '';\n\tvar body = [];\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tbody.push(join(data.body[i]));\n\t}\n\n\treturn {\n\t\tstr: header + body.join(newLine) + footer,\n\t\trows: body.length\n\t};\n};\n\n/**\n * Older versions of Safari (prior to tech preview 18) don't support the\n * download option required.\n *\n * @return {Boolean} `true` if old Safari\n */\nvar _isDuffSafari = function () {\n\tvar safari =\n\t\tnavigator.userAgent.indexOf('Safari') !== -1 &&\n\t\tnavigator.userAgent.indexOf('Chrome') === -1 &&\n\t\tnavigator.userAgent.indexOf('Opera') === -1;\n\n\tif (!safari) {\n\t\treturn false;\n\t}\n\n\tvar version = navigator.userAgent.match(/AppleWebKit\\/(\\d+\\.\\d+)/);\n\tif (version && version.length > 1 && version[1] * 1 < 603.1) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Convert from numeric position to letter for column names in Excel\n * @param  {int} n Column number\n * @return {string} Column letter(s) name\n */\nfunction createCellPos(n) {\n\tvar ordA = 'A'.charCodeAt(0);\n\tvar ordZ = 'Z'.charCodeAt(0);\n\tvar len = ordZ - ordA + 1;\n\tvar s = '';\n\n\twhile (n >= 0) {\n\t\ts = String.fromCharCode((n % len) + ordA) + s;\n\t\tn = Math.floor(n / len) - 1;\n\t}\n\n\treturn s;\n}\n\ntry {\n\tvar _serialiser = new XMLSerializer();\n\tvar _ieExcel;\n} catch (t) {}\n\n/**\n * Recursively add XML files from an object's structure to a ZIP file. This\n * allows the XSLX file to be easily defined with an object's structure matching\n * the files structure.\n *\n * @param {JSZip} zip ZIP package\n * @param {object} obj Object to add (recursive)\n */\nfunction _addToZip(zip, obj) {\n\tif (_ieExcel === undefined) {\n\t\t// Detect if we are dealing with IE's _awful_ serialiser by seeing if it\n\t\t// drop attributes\n\t\t_ieExcel =\n\t\t\t_serialiser\n\t\t\t\t.serializeToString(\n\t\t\t\t\tnew window.DOMParser().parseFromString(\n\t\t\t\t\t\texcelStrings['xl/worksheets/sheet1.xml'],\n\t\t\t\t\t\t'text/xml'\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.indexOf('xmlns:r') === -1;\n\t}\n\n\t$.each(obj, function (name, val) {\n\t\tif ($.isPlainObject(val)) {\n\t\t\tvar newDir = zip.folder(name);\n\t\t\t_addToZip(newDir, val);\n\t\t}\n\t\telse {\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE's XML serialiser will drop some name space attributes from\n\t\t\t\t// from the root node, so we need to save them. Do this by\n\t\t\t\t// replacing the namespace nodes with a regular attribute that\n\t\t\t\t// we convert back when serialised. Edge does not have this\n\t\t\t\t// issue\n\t\t\t\tvar worksheet = val.childNodes[0];\n\t\t\t\tvar i, ien;\n\t\t\t\tvar attrs = [];\n\n\t\t\t\tfor (i = worksheet.attributes.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar attrName = worksheet.attributes[i].nodeName;\n\t\t\t\t\tvar attrValue = worksheet.attributes[i].nodeValue;\n\n\t\t\t\t\tif (attrName.indexOf(':') !== -1) {\n\t\t\t\t\t\tattrs.push({ name: attrName, value: attrValue });\n\n\t\t\t\t\t\tworksheet.removeAttribute(attrName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0, ien = attrs.length; i < ien; i++) {\n\t\t\t\t\tvar attr = val.createAttribute(\n\t\t\t\t\t\tattrs[i].name.replace(':', '_dt_b_namespace_token_')\n\t\t\t\t\t);\n\t\t\t\t\tattr.value = attrs[i].value;\n\t\t\t\t\tworksheet.setAttributeNode(attr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar str = _serialiser.serializeToString(val);\n\n\t\t\t// Fix IE's XML\n\t\t\tif (_ieExcel) {\n\t\t\t\t// IE doesn't include the XML declaration\n\t\t\t\tif (str.indexOf('<?xml') === -1) {\n\t\t\t\t\tstr = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' + str;\n\t\t\t\t}\n\n\t\t\t\t// Return namespace attributes to being as such\n\t\t\t\tstr = str.replace(/_dt_b_namespace_token_/g, ':');\n\n\t\t\t\t// Remove testing name space that IE puts into the space preserve attr\n\t\t\t\tstr = str.replace(/xmlns:NS[\\d]+=\"\" NS[\\d]+:/g, '');\n\t\t\t}\n\n\t\t\t// Safari, IE and Edge will put empty name space attributes onto\n\t\t\t// various elements making them useless. This strips them out\n\t\t\tstr = str.replace(/<([^<>]*?) xmlns=\"\"([^<>]*?)>/g, '<$1 $2>');\n\n\t\t\tzip.file(name, str);\n\t\t}\n\t});\n}\n\n/**\n * Create an XML node and add any children, attributes, etc without needing to\n * be verbose in the DOM.\n *\n * @param  {object} doc      XML document\n * @param  {string} nodeName Node name\n * @param  {object} opts     Options - can be `attr` (attributes), `children`\n *   (child nodes) and `text` (text content)\n * @return {node}            Created node\n */\nfunction _createNode(doc, nodeName, opts) {\n\tvar tempNode = doc.createElement(nodeName);\n\n\tif (opts) {\n\t\tif (opts.attr) {\n\t\t\t$(tempNode).attr(opts.attr);\n\t\t}\n\n\t\tif (opts.children) {\n\t\t\t$.each(opts.children, function (key, value) {\n\t\t\t\ttempNode.appendChild(value);\n\t\t\t});\n\t\t}\n\n\t\tif (opts.text !== null && opts.text !== undefined) {\n\t\t\ttempNode.appendChild(doc.createTextNode(opts.text));\n\t\t}\n\t}\n\n\treturn tempNode;\n}\n\n/**\n * Get the width for an Excel column based on the contents of that column\n * @param  {object} data Data for export\n * @param  {int}    col  Column index\n * @return {int}         Column width\n */\nfunction _excelColWidth(data, col) {\n\tvar max = data.header[col].length;\n\tvar len, lineSplit, str;\n\n\tif (data.footer && data.footer[col].length > max) {\n\t\tmax = data.footer[col].length;\n\t}\n\n\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\tvar point = data.body[i][col];\n\t\tstr = point !== null && point !== undefined ? point.toString() : '';\n\n\t\t// If there is a newline character, workout the width of the column\n\t\t// based on the longest line in the string\n\t\tif (str.indexOf('\\n') !== -1) {\n\t\t\tlineSplit = str.split('\\n');\n\t\t\tlineSplit.sort(function (a, b) {\n\t\t\t\treturn b.length - a.length;\n\t\t\t});\n\n\t\t\tlen = lineSplit[0].length;\n\t\t}\n\t\telse {\n\t\t\tlen = str.length;\n\t\t}\n\n\t\tif (len > max) {\n\t\t\tmax = len;\n\t\t}\n\n\t\t// Max width rather than having potentially massive column widths\n\t\tif (max > 40) {\n\t\t\treturn 54; // 40 * 1.35\n\t\t}\n\t}\n\n\tmax *= 1.35;\n\n\t// And a min width\n\treturn max > 6 ? max : 6;\n}\n\n// Excel - Pre-defined strings to build a basic XLSX file\nvar excelStrings = {\n\t'_rels/.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'xl/_rels/workbook.xml.rels':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">' +\n\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>' +\n\t\t'<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>' +\n\t\t'</Relationships>',\n\n\t'[Content_Types].xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">' +\n\t\t'<Default Extension=\"xml\" ContentType=\"application/xml\" />' +\n\t\t'<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />' +\n\t\t'<Default Extension=\"jpeg\" ContentType=\"image/jpeg\" />' +\n\t\t'<Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" />' +\n\t\t'<Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" />' +\n\t\t'<Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\" />' +\n\t\t'</Types>',\n\n\t'xl/workbook.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">' +\n\t\t'<fileVersion appName=\"xl\" lastEdited=\"5\" lowestEdited=\"5\" rupBuild=\"24816\"/>' +\n\t\t'<workbookPr showInkAnnotation=\"0\" autoCompressPictures=\"0\"/>' +\n\t\t'<bookViews>' +\n\t\t'<workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"25600\" windowHeight=\"19020\" tabRatio=\"500\"/>' +\n\t\t'</bookViews>' +\n\t\t'<sheets>' +\n\t\t'<sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/>' +\n\t\t'</sheets>' +\n\t\t'<definedNames/>' +\n\t\t'</workbook>',\n\n\t'xl/worksheets/sheet1.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n\t\t'<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<sheetData/>' +\n\t\t'<mergeCells count=\"0\"/>' +\n\t\t'</worksheet>',\n\n\t'xl/styles.xml':\n\t\t'<?xml version=\"1.0\" encoding=\"UTF-8\"?>' +\n\t\t'<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">' +\n\t\t'<numFmts count=\"6\">' +\n\t\t'<numFmt numFmtId=\"164\" formatCode=\"#,##0.00_- [$$-45C]\"/>' +\n\t\t'<numFmt numFmtId=\"165\" formatCode=\"&quot;£&quot;#,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"166\" formatCode=\"[$€-2] #,##0.00\"/>' +\n\t\t'<numFmt numFmtId=\"167\" formatCode=\"0.0%\"/>' +\n\t\t'<numFmt numFmtId=\"168\" formatCode=\"#,##0;(#,##0)\"/>' +\n\t\t'<numFmt numFmtId=\"169\" formatCode=\"#,##0.00;(#,##0.00)\"/>' +\n\t\t'</numFmts>' +\n\t\t'<fonts count=\"5\" x14ac:knownFonts=\"1\">' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<color rgb=\"FFFFFFFF\" />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<b />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<i />' +\n\t\t'</font>' +\n\t\t'<font>' +\n\t\t'<sz val=\"11\" />' +\n\t\t'<name val=\"Calibri\" />' +\n\t\t'<u />' +\n\t\t'</font>' +\n\t\t'</fonts>' +\n\t\t'<fills count=\"6\">' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"none\" />' +\n\t\t'</fill>' +\n\t\t'<fill>' + // Excel appears to use this as a dotted background regardless of values but\n\t\t'<patternFill patternType=\"none\" />' + // to be valid to the schema, use a patternFill\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD9D9D9\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"FFD99795\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6efce\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'<fill>' +\n\t\t'<patternFill patternType=\"solid\">' +\n\t\t'<fgColor rgb=\"ffc6cfef\" />' +\n\t\t'<bgColor indexed=\"64\" />' +\n\t\t'</patternFill>' +\n\t\t'</fill>' +\n\t\t'</fills>' +\n\t\t'<borders count=\"2\">' +\n\t\t'<border>' +\n\t\t'<left />' +\n\t\t'<right />' +\n\t\t'<top />' +\n\t\t'<bottom />' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'<border diagonalUp=\"false\" diagonalDown=\"false\">' +\n\t\t'<left style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</left>' +\n\t\t'<right style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</right>' +\n\t\t'<top style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</top>' +\n\t\t'<bottom style=\"thin\">' +\n\t\t'<color auto=\"1\" />' +\n\t\t'</bottom>' +\n\t\t'<diagonal />' +\n\t\t'</border>' +\n\t\t'</borders>' +\n\t\t'<cellStyleXfs count=\"1\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" />' +\n\t\t'</cellStyleXfs>' +\n\t\t'<cellXfs count=\"68\">' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"0\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"2\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"3\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"4\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"1\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"2\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"3\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"4\" fillId=\"5\" borderId=\"1\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\"/>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"left\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"center\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"right\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment horizontal=\"fill\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment textRotation=\"90\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyAlignment=\"1\">' +\n\t\t'<alignment wrapText=\"1\"/>' +\n\t\t'</xf>' +\n\t\t'<xf numFmtId=\"9\"   fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"165\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"166\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"167\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"168\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"169\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"3\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"4\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"1\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"2\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'<xf numFmtId=\"14\" fontId=\"0\" fillId=\"0\" borderId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" xfId=\"0\" applyNumberFormat=\"1\"/>' +\n\t\t'</cellXfs>' +\n\t\t'<cellStyles count=\"1\">' +\n\t\t'<cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\" />' +\n\t\t'</cellStyles>' +\n\t\t'<dxfs count=\"0\" />' +\n\t\t'<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium9\" defaultPivotStyle=\"PivotStyleMedium4\" />' +\n\t\t'</styleSheet>'\n};\n// Note we could use 3 `for` loops for the styles, but when gzipped there is\n// virtually no difference in size, since the above can be easily compressed\n\n// Pattern matching for special number formats. Perhaps this should be exposed\n// via an API in future?\n// Ref: section 3.8.30 - built in formatters in open spreadsheet\n//   https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf\nvar _excelSpecials = [\n\t{\n\t\tmatch: /^\\-?\\d+\\.\\d%$/,\n\t\tstyle: 60,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent with d.p.\n\t{\n\t\tmatch: /^\\-?\\d+\\.?\\d*%$/,\n\t\tstyle: 56,\n\t\tfmt: function (d) {\n\t\t\treturn d / 100;\n\t\t}\n\t}, // Percent\n\t{ match: /^\\-?\\$[\\d,]+.?\\d*$/, style: 57 }, // Dollars\n\t{ match: /^\\-?£[\\d,]+.?\\d*$/, style: 58 }, // Pounds\n\t{ match: /^\\-?€[\\d,]+.?\\d*$/, style: 59 }, // Euros\n\t{ match: /^\\-?\\d+$/, style: 65 }, // Numbers without thousand separators\n\t{ match: /^\\-?\\d+\\.\\d{2}$/, style: 66 }, // Numbers 2 d.p. without thousands separators\n\t{\n\t\tmatch: /^\\([\\d,]+\\)$/,\n\t\tstyle: 61,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets\n\t{\n\t\tmatch: /^\\([\\d,]+\\.\\d{2}\\)$/,\n\t\tstyle: 62,\n\t\tfmt: function (d) {\n\t\t\treturn -1 * d.replace(/[\\(\\)]/g, '');\n\t\t}\n\t}, // Negative numbers indicated by brackets - 2d.p.\n\t{ match: /^\\-?[\\d,]+$/, style: 63 }, // Numbers with thousand separators\n\t{ match: /^\\-?[\\d,]+\\.\\d{2}$/, style: 64 },\n\t{\n\t\tmatch: /^[\\d]{4}\\-[01][\\d]\\-[0123][\\d]$/,\n\t\tstyle: 67,\n\t\tfmt: function (d) {\n\t\t\treturn Math.round(25569 + Date.parse(d) / (86400 * 1000));\n\t\t}\n\t} //Date yyyy-mm-dd\n];\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Buttons\n */\n\n//\n// Copy to clipboard\n//\nDataTable.ext.buttons.copyHtml5 = {\n\tclassName: 'buttons-copy buttons-html5',\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.copy', 'Copy');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar exportData = _exportData(dt, config);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar newline = _newLine(config);\n\t\tvar output = exportData.str;\n\t\tvar hiddenDiv = $('<div/>').css({\n\t\t\theight: 1,\n\t\t\twidth: 1,\n\t\t\toverflow: 'hidden',\n\t\t\tposition: 'fixed',\n\t\t\ttop: 0,\n\t\t\tleft: 0\n\t\t});\n\n\t\tif (info.title) {\n\t\t\toutput = info.title + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageTop) {\n\t\t\toutput = info.messageTop + newline + newline + output;\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\toutput = output + newline + newline + info.messageBottom;\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tvar textarea = $('<textarea readonly/>').val(output).appendTo(hiddenDiv);\n\n\t\t// For browsers that support the copy execCommand, try to use it\n\t\tif (document.queryCommandSupported('copy')) {\n\t\t\thiddenDiv.appendTo(dt.table().container());\n\t\t\ttextarea[0].focus();\n\t\t\ttextarea[0].select();\n\n\t\t\ttry {\n\t\t\t\tvar successful = document.execCommand('copy');\n\t\t\t\thiddenDiv.remove();\n\n\t\t\t\tif (successful) {\n\t\t\t\t\tdt.buttons.info(\n\t\t\t\t\t\tdt.i18n('buttons.copyTitle', 'Copy to clipboard'),\n\t\t\t\t\t\tdt.i18n(\n\t\t\t\t\t\t\t'buttons.copySuccess',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t1: 'Copied one row to clipboard',\n\t\t\t\t\t\t\t\t_: 'Copied %d rows to clipboard'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\texportData.rows\n\t\t\t\t\t\t),\n\t\t\t\t\t\t2000\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.processing(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch (t) {}\n\t\t}\n\n\t\t// Otherwise we show the text box and instruct the user to use it\n\t\tvar message = $(\n\t\t\t'<span>' +\n\t\t\t\tdt.i18n(\n\t\t\t\t\t'buttons.copyKeys',\n\t\t\t\t\t'Press <i>ctrl</i> or <i>\\u2318</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>' +\n\t\t\t\t\t\t'To cancel, click this message or press escape.'\n\t\t\t\t) +\n\t\t\t\t'</span>'\n\t\t).append(hiddenDiv);\n\n\t\tdt.buttons.info(dt.i18n('buttons.copyTitle', 'Copy to clipboard'), message, 0);\n\n\t\t// Select the text so when the user activates their system clipboard\n\t\t// it will copy that text\n\t\ttextarea[0].focus();\n\t\ttextarea[0].select();\n\n\t\t// Event to hide the message when the user is done\n\t\tvar container = $(message).closest('.dt-button-info');\n\t\tvar close = function () {\n\t\t\tcontainer.off('click.buttons-copy');\n\t\t\t$(document).off('.buttons-copy');\n\t\t\tdt.buttons.info(false);\n\t\t};\n\n\t\tcontainer.on('click.buttons-copy', close);\n\t\t$(document)\n\t\t\t.on('keydown.buttons-copy', function (e) {\n\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t// esc\n\t\t\t\t\tclose();\n\t\t\t\t\tthat.processing(false);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('copy.buttons-copy cut.buttons-copy', function () {\n\t\t\t\tclose();\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t},\n\n\texportOptions: {},\n\n\tfieldSeparator: '\\t',\n\n\tfieldBoundary: '',\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*'\n};\n\n//\n// CSV export\n//\nDataTable.ext.buttons.csvHtml5 = {\n\tbom: false,\n\n\tclassName: 'buttons-csv buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && window.Blob;\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.csv', 'CSV');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\t// Set the text\n\t\tvar output = _exportData(dt, config).str;\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar charset = config.charset;\n\n\t\tif (config.customize) {\n\t\t\toutput = config.customize(output, config, dt);\n\t\t}\n\n\t\tif (charset !== false) {\n\t\t\tif (!charset) {\n\t\t\t\tcharset = document.characterSet || document.charset;\n\t\t\t}\n\n\t\t\tif (charset) {\n\t\t\t\tcharset = ';charset=' + charset;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tcharset = '';\n\t\t}\n\n\t\tif (config.bom) {\n\t\t\toutput = String.fromCharCode(0xfeff) + output;\n\t\t}\n\n\t\t_saveAs(new Blob([output], { type: 'text/csv' + charset }), info.filename, true);\n\n\t\tthis.processing(false);\n\t},\n\n\tfilename: '*',\n\n\textension: '.csv',\n\n\texportOptions: {},\n\n\tfieldSeparator: ',',\n\n\tfieldBoundary: '\"',\n\n\tescapeChar: '\"',\n\n\tcharset: null,\n\n\theader: true,\n\n\tfooter: false\n};\n\n//\n// Excel (xlsx) export\n//\nDataTable.ext.buttons.excelHtml5 = {\n\tclassName: 'buttons-excel buttons-html5',\n\n\tavailable: function () {\n\t\treturn (\n\t\t\twindow.FileReader !== undefined &&\n\t\t\t_jsZip() !== undefined &&\n\t\t\t!_isDuffSafari() &&\n\t\t\t_serialiser\n\t\t);\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.excel', 'Excel');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar rowPos = 0;\n\t\tvar dataStartRow, dataEndRow;\n\t\tvar getXml = function (type) {\n\t\t\tvar str = excelStrings[type];\n\n\t\t\t//str = str.replace( /xmlns:/g, 'xmlns_' ).replace( /mc:/g, 'mc_' );\n\n\t\t\treturn $.parseXML(str);\n\t\t};\n\t\tvar rels = getXml('xl/worksheets/sheet1.xml');\n\t\tvar relsGet = rels.getElementsByTagName('sheetData')[0];\n\n\t\tvar xlsx = {\n\t\t\t_rels: {\n\t\t\t\t'.rels': getXml('_rels/.rels')\n\t\t\t},\n\t\t\txl: {\n\t\t\t\t_rels: {\n\t\t\t\t\t'workbook.xml.rels': getXml('xl/_rels/workbook.xml.rels')\n\t\t\t\t},\n\t\t\t\t'workbook.xml': getXml('xl/workbook.xml'),\n\t\t\t\t'styles.xml': getXml('xl/styles.xml'),\n\t\t\t\tworksheets: {\n\t\t\t\t\t'sheet1.xml': rels\n\t\t\t\t}\n\t\t\t},\n\t\t\t'[Content_Types].xml': getXml('[Content_Types].xml')\n\t\t};\n\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar currentRow, rowNode;\n\t\tvar addRow = function (row) {\n\t\t\tcurrentRow = rowPos + 1;\n\t\t\trowNode = _createNode(rels, 'row', { attr: { r: currentRow } });\n\n\t\t\tfor (var i = 0, ien = row.length; i < ien; i++) {\n\t\t\t\t// Concat both the Cell Columns as a letter and the Row of the cell.\n\t\t\t\tvar cellId = createCellPos(i) + '' + currentRow;\n\t\t\t\tvar cell = null;\n\n\t\t\t\t// For null, undefined of blank cell, continue so it doesn't create the _createNode\n\t\t\t\tif (row[i] === null || row[i] === undefined || row[i] === '') {\n\t\t\t\t\tif (config.createEmptyCells === true) {\n\t\t\t\t\t\trow[i] = '';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar originalContent = row[i];\n\t\t\t\trow[i] = typeof row[i].trim === 'function' ? row[i].trim() : row[i];\n\n\t\t\t\t// Special number formatting options\n\t\t\t\tfor (var j = 0, jen = _excelSpecials.length; j < jen; j++) {\n\t\t\t\t\tvar special = _excelSpecials[j];\n\n\t\t\t\t\t// TODO Need to provide the ability for the specials to say\n\t\t\t\t\t// if they are returning a string, since at the moment it is\n\t\t\t\t\t// assumed to be a number\n\t\t\t\t\tif (row[i].match && !row[i].match(/^0\\d+/) && row[i].match(special.match)) {\n\t\t\t\t\t\tvar val = row[i].replace(/[^\\d\\.\\-]/g, '');\n\n\t\t\t\t\t\tif (special.fmt) {\n\t\t\t\t\t\t\tval = special.fmt(val);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tr: cellId,\n\t\t\t\t\t\t\t\ts: special.style\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: val })]\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!cell) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof row[i] === 'number' ||\n\t\t\t\t\t\t(row[i].match &&\n\t\t\t\t\t\t\trow[i].match(/^-?\\d+(\\.\\d+)?([eE]\\-?\\d+)?$/) && // Includes exponential format\n\t\t\t\t\t\t\t!row[i].match(/^0\\d+/))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Detect numbers - don't match numbers with leading zeros\n\t\t\t\t\t\t// or a negative anywhere but the start\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'n',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: [_createNode(rels, 'v', { text: row[i] })]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// String output - replace non standard characters for text output\n\t\t\t\t\t\tvar text = !originalContent.replace\n\t\t\t\t\t\t\t? originalContent\n\t\t\t\t\t\t\t: originalContent.replace(/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x9F]/g, '');\n\n\t\t\t\t\t\tcell = _createNode(rels, 'c', {\n\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\tt: 'inlineStr',\n\t\t\t\t\t\t\t\tr: cellId\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\trow: _createNode(rels, 'is', {\n\t\t\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\t\t\trow: _createNode(rels, 't', {\n\t\t\t\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\t\t\t\tattr: {\n\t\t\t\t\t\t\t\t\t\t\t\t'xml:space': 'preserve'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowNode.appendChild(cell);\n\t\t\t}\n\n\t\t\trelsGet.appendChild(rowNode);\n\t\t\trowPos++;\n\t\t};\n\n\t\tif (config.customizeData) {\n\t\t\tconfig.customizeData(data);\n\t\t}\n\n\t\tvar mergeCells = function (row, colspan) {\n\t\t\tvar mergeCells = $('mergeCells', rels);\n\n\t\t\tmergeCells[0].appendChild(\n\t\t\t\t_createNode(rels, 'mergeCell', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref: 'A' + row + ':' + createCellPos(colspan) + row\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t\tmergeCells.attr('count', parseFloat(mergeCells.attr('count')) + 1);\n\t\t\t$('row:eq(' + (row - 1) + ') c', rels).attr('s', '51'); // centre\n\t\t};\n\n\t\t// Title and top messages\n\t\tvar exportInfo = dt.buttons.exportInfo(config);\n\t\tif (exportInfo.title) {\n\t\t\taddRow([exportInfo.title], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\tif (exportInfo.messageTop) {\n\t\t\taddRow([exportInfo.messageTop], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Table itself\n\t\tif (config.header) {\n\t\t\taddRow(data.header, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\tdataStartRow = rowPos;\n\n\t\tfor (var n = 0, ie = data.body.length; n < ie; n++) {\n\t\t\taddRow(data.body[n], rowPos);\n\t\t}\n\n\t\tdataEndRow = rowPos;\n\n\t\tif (config.footer && data.footer) {\n\t\t\taddRow(data.footer, rowPos);\n\t\t\t$('row:last c', rels).attr('s', '2'); // bold\n\t\t}\n\n\t\t// Below the table\n\t\tif (exportInfo.messageBottom) {\n\t\t\taddRow([exportInfo.messageBottom], rowPos);\n\t\t\tmergeCells(rowPos, data.header.length - 1);\n\t\t}\n\n\t\t// Set column widths\n\t\tvar cols = _createNode(rels, 'cols');\n\t\t$('worksheet', rels).prepend(cols);\n\n\t\tfor (var i = 0, ien = data.header.length; i < ien; i++) {\n\t\t\tcols.appendChild(\n\t\t\t\t_createNode(rels, 'col', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tmin: i + 1,\n\t\t\t\t\t\tmax: i + 1,\n\t\t\t\t\t\twidth: _excelColWidth(data, i),\n\t\t\t\t\t\tcustomWidth: 1\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Workbook modifications\n\t\tvar workbook = xlsx.xl['workbook.xml'];\n\n\t\t$('sheets sheet', workbook).attr('name', _sheetname(config));\n\n\t\t// Auto filter for columns\n\t\tif (config.autoFilter) {\n\t\t\t$('mergeCells', rels).before(\n\t\t\t\t_createNode(rels, 'autoFilter', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tref:\n\t\t\t\t\t\t\t'A' +\n\t\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t\t':' +\n\t\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\t\tdataEndRow\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\n\t\t\t$('definedNames', workbook).append(\n\t\t\t\t_createNode(workbook, 'definedName', {\n\t\t\t\t\tattr: {\n\t\t\t\t\t\tname: '_xlnm._FilterDatabase',\n\t\t\t\t\t\tlocalSheetId: '0',\n\t\t\t\t\t\thidden: 1\n\t\t\t\t\t},\n\t\t\t\t\ttext:\n\t\t\t\t\t\t_sheetname(config) +\n\t\t\t\t\t\t'!$A$' +\n\t\t\t\t\t\tdataStartRow +\n\t\t\t\t\t\t':' +\n\t\t\t\t\t\tcreateCellPos(data.header.length - 1) +\n\t\t\t\t\t\tdataEndRow\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\t// Let the developer customise the document if they want to\n\t\tif (config.customize) {\n\t\t\tconfig.customize(xlsx, config, dt);\n\t\t}\n\n\t\t// Excel doesn't like an empty mergeCells tag\n\t\tif ($('mergeCells', rels).children().length === 0) {\n\t\t\t$('mergeCells', rels).remove();\n\t\t}\n\n\t\tvar jszip = _jsZip();\n\t\tvar zip = new jszip();\n\t\tvar zipConfig = {\n\t\t\tcompression: 'DEFLATE',\n\t\t\ttype: 'blob',\n\t\t\tmimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t};\n\n\t\t_addToZip(zip, xlsx);\n\n\t\t// Modern Excel has a 218 character limit on the file name + path of the file (why!?)\n\t\t// https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3\n\t\t// So we truncate to allow for this.\n\t\tvar filename = exportInfo.filename;\n\n\t\tif (filename > 175) {\n\t\t\tfilename = filename.substr(0, 175);\n\t\t}\n\n\t\tif (zip.generateAsync) {\n\t\t\t// JSZip 3+\n\t\t\tzip.generateAsync(zipConfig).then(function (blob) {\n\t\t\t\t_saveAs(blob, filename);\n\t\t\t\tthat.processing(false);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// JSZip 2.5\n\t\t\t_saveAs(zip.generate(zipConfig), filename);\n\t\t\tthis.processing(false);\n\t\t}\n\t},\n\n\tfilename: '*',\n\n\textension: '.xlsx',\n\n\texportOptions: {},\n\n\theader: true,\n\n\tfooter: false,\n\n\ttitle: '*',\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcreateEmptyCells: false,\n\n\tautoFilter: false,\n\n\tsheetName: ''\n};\n\n//\n// PDF export - using pdfMake - http://pdfmake.org\n//\nDataTable.ext.buttons.pdfHtml5 = {\n\tclassName: 'buttons-pdf buttons-html5',\n\n\tavailable: function () {\n\t\treturn window.FileReader !== undefined && _pdfMake();\n\t},\n\n\ttext: function (dt) {\n\t\treturn dt.i18n('buttons.pdf', 'PDF');\n\t},\n\n\taction: function (e, dt, button, config) {\n\t\tthis.processing(true);\n\n\t\tvar that = this;\n\t\tvar data = dt.buttons.exportData(config.exportOptions);\n\t\tvar info = dt.buttons.exportInfo(config);\n\t\tvar rows = [];\n\n\t\tif (config.header) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.header, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableHeader'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tfor (var i = 0, ien = data.body.length; i < ien; i++) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.body[i], function (d) {\n\t\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: i % 2 ? 'tableBodyEven' : 'tableBodyOdd'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (config.footer && data.footer) {\n\t\t\trows.push(\n\t\t\t\t$.map(data.footer, function (d) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: typeof d === 'string' ? d : d + '',\n\t\t\t\t\t\tstyle: 'tableFooter'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tvar doc = {\n\t\t\tpageSize: config.pageSize,\n\t\t\tpageOrientation: config.orientation,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttable: {\n\t\t\t\t\t\theaderRows: 1,\n\t\t\t\t\t\tbody: rows\n\t\t\t\t\t},\n\t\t\t\t\tlayout: 'noBorders'\n\t\t\t\t}\n\t\t\t],\n\t\t\tstyles: {\n\t\t\t\ttableHeader: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154',\n\t\t\t\t\talignment: 'center'\n\t\t\t\t},\n\t\t\t\ttableBodyEven: {},\n\t\t\t\ttableBodyOdd: {\n\t\t\t\t\tfillColor: '#f3f3f3'\n\t\t\t\t},\n\t\t\t\ttableFooter: {\n\t\t\t\t\tbold: true,\n\t\t\t\t\tfontSize: 11,\n\t\t\t\t\tcolor: 'white',\n\t\t\t\t\tfillColor: '#2d4154'\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\talignment: 'center',\n\t\t\t\t\tfontSize: 15\n\t\t\t\t},\n\t\t\t\tmessage: {}\n\t\t\t},\n\t\t\tdefaultStyle: {\n\t\t\t\tfontSize: 10\n\t\t\t}\n\t\t};\n\n\t\tif (info.messageTop) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.messageTop,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.messageBottom) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: info.messageBottom,\n\t\t\t\tstyle: 'message',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (info.title) {\n\t\t\tdoc.content.unshift({\n\t\t\t\ttext: info.title,\n\t\t\t\tstyle: 'title',\n\t\t\t\tmargin: [0, 0, 0, 12]\n\t\t\t});\n\t\t}\n\n\t\tif (config.customize) {\n\t\t\tconfig.customize(doc, config, dt);\n\t\t}\n\n\t\tvar pdf = _pdfMake().createPdf(doc);\n\n\t\tif (config.download === 'open' && !_isDuffSafari()) {\n\t\t\tpdf.open();\n\t\t}\n\t\telse {\n\t\t\tpdf.download(info.filename);\n\t\t}\n\n\t\tthis.processing(false);\n\t},\n\n\ttitle: '*',\n\n\tfilename: '*',\n\n\textension: '.pdf',\n\n\texportOptions: {},\n\n\torientation: 'portrait',\n\n\tpageSize: 'A4',\n\n\theader: true,\n\n\tfooter: false,\n\n\tmessageTop: '*',\n\n\tmessageBottom: '*',\n\n\tcustomize: null,\n\n\tdownload: 'download'\n};\n\n\nexport default DataTable;\n","/*! Buttons for DataTables 2.4.2\n * © SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n// Used for namespacing events added to the document by each instance, so they\n// can be removed on destroy\nvar _instCounter = 0;\n\n// Button namespacing counter for namespacing events on individual buttons\nvar _buttonCounter = 0;\n\nvar _dtButtons = DataTable.ext.buttons;\n\n// Custom entity decoder for data export\nvar _entityDecoder = null;\n\n// Allow for jQuery slim\nfunction _fadeIn(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeIn(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'block');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\nfunction _fadeOut(el, duration, fn) {\n\tif ($.fn.animate) {\n\t\tel.stop().fadeOut(duration, fn);\n\t}\n\telse {\n\t\tel.css('display', 'none');\n\n\t\tif (fn) {\n\t\t\tfn.call(el);\n\t\t}\n\t}\n}\n\n/**\n * [Buttons description]\n * @param {[type]}\n * @param {[type]}\n */\nvar Buttons = function (dt, config) {\n\t// If not created with a `new` keyword then we return a wrapper function that\n\t// will take the settings object for a DT. This allows easy use of new instances\n\t// with the `layout` option - e.g. `topLeft: $.fn.dataTable.Buttons( ... )`.\n\tif (!(this instanceof Buttons)) {\n\t\treturn function (settings) {\n\t\t\treturn new Buttons(settings, dt).container();\n\t\t};\n\t}\n\n\t// If there is no config set it to an empty object\n\tif (typeof config === 'undefined') {\n\t\tconfig = {};\n\t}\n\n\t// Allow a boolean true for defaults\n\tif (config === true) {\n\t\tconfig = {};\n\t}\n\n\t// For easy configuration of buttons an array can be given\n\tif (Array.isArray(config)) {\n\t\tconfig = { buttons: config };\n\t}\n\n\tthis.c = $.extend(true, {}, Buttons.defaults, config);\n\n\t// Don't want a deep copy for the buttons\n\tif (config.buttons) {\n\t\tthis.c.buttons = config.buttons;\n\t}\n\n\tthis.s = {\n\t\tdt: new DataTable.Api(dt),\n\t\tbuttons: [],\n\t\tlistenKeys: '',\n\t\tnamespace: 'dtb' + _instCounter++\n\t};\n\n\tthis.dom = {\n\t\tcontainer: $('<' + this.c.dom.container.tag + '/>').addClass(this.c.dom.container.className)\n\t};\n\n\tthis._constructor();\n};\n\n$.extend(Buttons.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods\n\t */\n\n\t/**\n\t * Get the action of a button\n\t * @param  {int|string} Button index\n\t * @return {function}\n\t */ /**\n\t * Set the action of a button\n\t * @param  {node} node Button element\n\t * @param  {function} action Function to set\n\t * @return {Buttons} Self for chaining\n\t */\n\taction: function (node, action) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (action === undefined) {\n\t\t\treturn button.conf.action;\n\t\t}\n\n\t\tbutton.conf.action = action;\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add an active class to the button to make to look active or get current\n\t * active state.\n\t * @param  {node} node Button element\n\t * @param  {boolean} [flag] Enable / disable flag\n\t * @return {Buttons} Self for chaining or boolean for getter\n\t */\n\tactive: function (node, flag) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar klass = this.c.dom.button.active;\n\t\tvar jqNode = $(button.node);\n\n\t\tif (\n\t\t\tbutton.inCollection &&\n\t\t\tthis.c.dom.collection.button &&\n\t\t\tthis.c.dom.collection.button.active !== undefined\n\t\t) {\n\t\t\tklass = this.c.dom.collection.button.active;\n\t\t}\n\n\t\tif (flag === undefined) {\n\t\t\treturn jqNode.hasClass(klass);\n\t\t}\n\n\t\tjqNode.toggleClass(klass, flag === undefined ? true : flag);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Add a new button\n\t * @param {object} config Button configuration object, base string name or function\n\t * @param {int|string} [idx] Button index for where to insert the button\n\t * @param {boolean} [draw=true] Trigger a draw. Set a false when adding\n\t *   lots of buttons, until the last button.\n\t * @return {Buttons} Self for chaining\n\t */\n\tadd: function (config, idx, draw) {\n\t\tvar buttons = this.s.buttons;\n\n\t\tif (typeof idx === 'string') {\n\t\t\tvar split = idx.split('-');\n\t\t\tvar base = this.s;\n\n\t\t\tfor (var i = 0, ien = split.length - 1; i < ien; i++) {\n\t\t\t\tbase = base.buttons[split[i] * 1];\n\t\t\t}\n\n\t\t\tbuttons = base.buttons;\n\t\t\tidx = split[split.length - 1] * 1;\n\t\t}\n\n\t\tthis._expandButton(\n\t\t\tbuttons,\n\t\t\tconfig,\n\t\t\tconfig !== undefined ? config.split : undefined,\n\t\t\t(config === undefined || config.split === undefined || config.split.length === 0) &&\n\t\t\t\tbase !== undefined,\n\t\t\tfalse,\n\t\t\tidx\n\t\t);\n\n\t\tif (draw === undefined || draw === true) {\n\t\t\tthis._draw();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Clear buttons from a collection and then insert new buttons\n\t */\n\tcollectionRebuild: function (node, newButtons) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (newButtons !== undefined) {\n\t\t\tvar i;\n\t\t\t// Need to reverse the array\n\t\t\tfor (i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\n\t\t\t// If the collection has prefix and / or postfix buttons we need to add them in\n\t\t\tif (button.conf.prefixButtons) {\n\t\t\t\tnewButtons.unshift.apply(newButtons, button.conf.prefixButtons);\n\t\t\t}\n\n\t\t\tif (button.conf.postfixButtons) {\n\t\t\t\tnewButtons.push.apply(newButtons, button.conf.postfixButtons);\n\t\t\t}\n\n\t\t\tfor (i = 0; i < newButtons.length; i++) {\n\t\t\t\tvar newBtn = newButtons[i];\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbutton.buttons,\n\t\t\t\t\tnewBtn,\n\t\t\t\t\tnewBtn !== undefined &&\n\t\t\t\t\t\tnewBtn.config !== undefined &&\n\t\t\t\t\t\tnewBtn.config.split !== undefined,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnewBtn.parentConf !== undefined && newBtn.parentConf.split !== undefined,\n\t\t\t\t\tnull,\n\t\t\t\t\tnewBtn.parentConf\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis._draw(button.collection, button.buttons);\n\t},\n\n\t/**\n\t * Get the container node for the buttons\n\t * @return {jQuery} Buttons node\n\t */\n\tcontainer: function () {\n\t\treturn this.dom.container;\n\t},\n\n\t/**\n\t * Disable a button\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tdisable: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\n\t\t$(button.node).addClass(this.c.dom.button.disabled).prop('disabled', true);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Destroy the instance, cleaning up event handlers and removing DOM\n\t * elements\n\t * @return {Buttons} Self for chaining\n\t */\n\tdestroy: function () {\n\t\t// Key event listener\n\t\t$('body').off('keyup.' + this.s.namespace);\n\n\t\t// Individual button destroy (so they can remove their own events if\n\t\t// needed). Take a copy as the array is modified by `remove`\n\t\tvar buttons = this.s.buttons.slice();\n\t\tvar i, ien;\n\n\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.remove(buttons[i].node);\n\t\t}\n\n\t\t// Container\n\t\tthis.dom.container.remove();\n\n\t\t// Remove from the settings object collection\n\t\tvar buttonInsts = this.s.dt.settings()[0];\n\n\t\tfor (i = 0, ien = buttonInsts.length; i < ien; i++) {\n\t\t\tif (buttonInsts.inst === this) {\n\t\t\t\tbuttonInsts.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Enable / disable a button\n\t * @param  {node} node Button node\n\t * @param  {boolean} [flag=true] Enable / disable flag\n\t * @return {Buttons} Self for chaining\n\t */\n\tenable: function (node, flag) {\n\t\tif (flag === false) {\n\t\t\treturn this.disable(node);\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\t$(button.node).removeClass(this.c.dom.button.disabled).prop('disabled', false);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get a button's index\n\t *\n\t * This is internally recursive\n\t * @param {element} node Button to get the index of\n\t * @return {string} Button index\n\t */\n\tindex: function (node, nested, buttons) {\n\t\tif (!nested) {\n\t\t\tnested = '';\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar inner = buttons[i].buttons;\n\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn nested + i;\n\t\t\t}\n\n\t\t\tif (inner && inner.length) {\n\t\t\t\tvar match = this.index(node, i + '-', inner);\n\n\t\t\t\tif (match !== null) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Get the instance name for the button set selector\n\t * @return {string} Instance name\n\t */\n\tname: function () {\n\t\treturn this.c.name;\n\t},\n\n\t/**\n\t * Get a button's node of the buttons container if no button is given\n\t * @param  {node} [node] Button node\n\t * @return {jQuery} Button element, or container\n\t */\n\tnode: function (node) {\n\t\tif (!node) {\n\t\t\treturn this.dom.container;\n\t\t}\n\n\t\tvar button = this._nodeToButton(node);\n\t\treturn $(button.node);\n\t},\n\n\t/**\n\t * Set / get a processing class on the selected button\n\t * @param {element} node Triggering button node\n\t * @param  {boolean} flag true to add, false to remove, undefined to get\n\t * @return {boolean|Buttons} Getter value or this if a setter.\n\t */\n\tprocessing: function (node, flag) {\n\t\tvar dt = this.s.dt;\n\t\tvar button = this._nodeToButton(node);\n\n\t\tif (flag === undefined) {\n\t\t\treturn $(button.node).hasClass('processing');\n\t\t}\n\n\t\t$(button.node).toggleClass('processing', flag);\n\n\t\t$(dt.table().node()).triggerHandler('buttons-processing.dt', [\n\t\t\tflag,\n\t\t\tdt.button(node),\n\t\t\tdt,\n\t\t\t$(node),\n\t\t\tbutton.conf\n\t\t]);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Remove a button.\n\t * @param  {node} node Button node\n\t * @return {Buttons} Self for chaining\n\t */\n\tremove: function (node) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar host = this._nodeToHost(node);\n\t\tvar dt = this.s.dt;\n\n\t\t// Remove any child buttons first\n\t\tif (button.buttons.length) {\n\t\t\tfor (var i = button.buttons.length - 1; i >= 0; i--) {\n\t\t\t\tthis.remove(button.buttons[i].node);\n\t\t\t}\n\t\t}\n\n\t\tbutton.conf.destroying = true;\n\n\t\t// Allow the button to remove event handlers, etc\n\t\tif (button.conf.destroy) {\n\t\t\tbutton.conf.destroy.call(dt.button(node), dt, $(node), button.conf);\n\t\t}\n\n\t\tthis._removeKey(button.conf);\n\n\t\t$(button.node).remove();\n\n\t\tvar idx = $.inArray(button, host);\n\t\thost.splice(idx, 1);\n\n\t\treturn this;\n\t},\n\n\t/**\n\t * Get the text for a button\n\t * @param  {int|string} node Button index\n\t * @return {string} Button text\n\t */ /**\n\t * Set the text for a button\n\t * @param  {int|string|function} node Button index\n\t * @param  {string} label Text\n\t * @return {Buttons} Self for chaining\n\t */\n\ttext: function (node, label) {\n\t\tvar button = this._nodeToButton(node);\n\t\tvar textNode = button.textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar jqNode = $(button.node);\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, jqNode, button.conf) : opt;\n\t\t};\n\n\t\tif (label === undefined) {\n\t\t\treturn text(button.conf.text);\n\t\t}\n\n\t\tbutton.conf.text = label;\n\t\ttextNode.html(text(label));\n\n\t\treturn this;\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Buttons constructor\n\t * @private\n\t */\n\t_constructor: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar dtSettings = dt.settings()[0];\n\t\tvar buttons = this.c.buttons;\n\n\t\tif (!dtSettings._buttons) {\n\t\t\tdtSettings._buttons = [];\n\t\t}\n\n\t\tdtSettings._buttons.push({\n\t\t\tinst: this,\n\t\t\tname: this.c.name\n\t\t});\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tthis.add(buttons[i]);\n\t\t}\n\n\t\tdt.on('destroy', function (e, settings) {\n\t\t\tif (settings === dtSettings) {\n\t\t\t\tthat.destroy();\n\t\t\t}\n\t\t});\n\n\t\t// Global key event binding to listen for button keys\n\t\t$('body').on('keyup.' + this.s.namespace, function (e) {\n\t\t\tif (!document.activeElement || document.activeElement === document.body) {\n\t\t\t\t// SUse a string of characters for fast lookup of if we need to\n\t\t\t\t// handle this\n\t\t\t\tvar character = String.fromCharCode(e.keyCode).toLowerCase();\n\n\t\t\t\tif (that.s.listenKeys.toLowerCase().indexOf(character) !== -1) {\n\t\t\t\t\tthat._keypress(character, e);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Add a new button to the key press listener\n\t * @param {object} conf Resolved button configuration object\n\t * @private\n\t */\n\t_addKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tthis.s.listenKeys += $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\t\t}\n\t},\n\n\t/**\n\t * Insert the buttons into the container. Call without parameters!\n\t * @param  {node} [container] Recursive only - Insert point\n\t * @param  {array} [buttons] Recursive only - Buttons array\n\t * @private\n\t */\n\t_draw: function (container, buttons) {\n\t\tif (!container) {\n\t\t\tcontainer = this.dom.container;\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tcontainer.children().detach();\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tcontainer.append(buttons[i].inserter);\n\t\t\tcontainer.append(' ');\n\n\t\t\tif (buttons[i].buttons && buttons[i].buttons.length) {\n\t\t\t\tthis._draw(buttons[i].collection, buttons[i].buttons);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create buttons from an array of buttons\n\t * @param  {array} attachTo Buttons array to attach to\n\t * @param  {object} button Button definition\n\t * @param  {boolean} inCollection true if the button is in a collection\n\t * @private\n\t */\n\t_expandButton: function (\n\t\tattachTo,\n\t\tbutton,\n\t\tsplit,\n\t\tinCollection,\n\t\tinSplit,\n\t\tattachPoint,\n\t\tparentConf\n\t) {\n\t\tvar dt = this.s.dt;\n\t\tvar isSplit = false;\n\t\tvar domCollection = this.c.dom.collection;\n\t\tvar buttons = !Array.isArray(button) ? [button] : button;\n\n\t\tif (button === undefined) {\n\t\t\tbuttons = !Array.isArray(split) ? [split] : split;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tvar conf = this._resolveExtends(buttons[i]);\n\n\t\t\tif (!conf) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tisSplit = conf.config && conf.config.split ? true : false;\n\n\t\t\t// If the configuration is an array, then expand the buttons at this\n\t\t\t// point\n\t\t\tif (Array.isArray(conf)) {\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tattachTo,\n\t\t\t\t\tconf,\n\t\t\t\t\tbuilt !== undefined && built.conf !== undefined ? built.conf.split : undefined,\n\t\t\t\t\tinCollection,\n\t\t\t\t\tparentConf !== undefined && parentConf.split !== undefined,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tparentConf\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar built = this._buildButton(\n\t\t\t\tconf,\n\t\t\t\tinCollection,\n\t\t\t\tconf.split !== undefined ||\n\t\t\t\t\t(conf.config !== undefined && conf.config.split !== undefined),\n\t\t\t\tinSplit\n\t\t\t);\n\t\t\tif (!built) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attachPoint !== undefined && attachPoint !== null) {\n\t\t\t\tattachTo.splice(attachPoint, 0, built);\n\t\t\t\tattachPoint++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tattachTo.push(built);\n\t\t\t}\n\n\t\t\t// Create the dropdown for a collection\n\t\t\tif (built.conf.buttons) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.content.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\t$(built.node).append(domCollection.action.dropHtml);\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// And the split collection\n\t\t\tif (built.conf.split) {\n\t\t\t\tbuilt.collection = $('<' + domCollection.container.tag + '/>');\n\t\t\t\tbuilt.conf._collection = built.collection;\n\n\t\t\t\tfor (var j = 0; j < built.conf.split.length; j++) {\n\t\t\t\t\tvar item = built.conf.split[j];\n\n\t\t\t\t\tif (typeof item === 'object') {\n\t\t\t\t\t\titem.parent = parentConf;\n\n\t\t\t\t\t\tif (item.collectionLayout === undefined) {\n\t\t\t\t\t\t\titem.collectionLayout = built.conf.collectionLayout;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.dropup === undefined) {\n\t\t\t\t\t\t\titem.dropup = built.conf.dropup;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item.fade === undefined) {\n\t\t\t\t\t\t\titem.fade = built.conf.fade;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._expandButton(\n\t\t\t\t\tbuilt.buttons,\n\t\t\t\t\tbuilt.conf.buttons,\n\t\t\t\t\tbuilt.conf.split,\n\t\t\t\t\t!isSplit,\n\t\t\t\t\tisSplit,\n\t\t\t\t\tattachPoint,\n\t\t\t\t\tbuilt.conf\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbuilt.conf.parent = parentConf;\n\n\t\t\t// init call is made here, rather than buildButton as it needs to\n\t\t\t// be selectable, and for that it needs to be in the buttons array\n\t\t\tif (conf.init) {\n\t\t\t\tconf.init.call(dt.button(built.node), dt, $(built.node), conf);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Create an individual button\n\t * @param  {object} config            Resolved button configuration\n\t * @param  {boolean} inCollection `true` if a collection button\n\t * @return {object} Completed button description object\n\t * @private\n\t */\n\t_buildButton: function (config, inCollection, isSplit, inSplit) {\n\t\tvar configDom = this.c.dom;\n\t\tvar textNode;\n\t\tvar dt = this.s.dt;\n\t\tvar text = function (opt) {\n\t\t\treturn typeof opt === 'function' ? opt(dt, button, config) : opt;\n\t\t};\n\n\t\t// Create an object that describes the button which can be in `dom.button`, or\n\t\t// `dom.collection.button` or `dom.split.button` or `dom.collection.split.button`!\n\t\t// Each should extend from `dom.button`.\n\t\tvar dom = $.extend(true, {}, configDom.button);\n\n\t\tif (inCollection && isSplit && configDom.collection.split) {\n\t\t\t$.extend(true, dom, configDom.collection.split.action);\n\t\t}\n\t\telse if (inSplit || inCollection) {\n\t\t\t$.extend(true, dom, configDom.collection.button);\n\t\t}\n\t\telse if (isSplit) {\n\t\t\t$.extend(true, dom, configDom.split.button);\n\t\t}\n\n\t\t// Spacers don't do much other than insert an element into the DOM\n\t\tif (config.spacer) {\n\t\t\tvar spacer = $('<' + dom.spacer.tag + '/>')\n\t\t\t\t.addClass('dt-button-spacer ' + config.style + ' ' + dom.spacer.className)\n\t\t\t\t.html(text(config.text));\n\n\t\t\treturn {\n\t\t\t\tconf: config,\n\t\t\t\tnode: spacer,\n\t\t\t\tinserter: spacer,\n\t\t\t\tbuttons: [],\n\t\t\t\tinCollection: inCollection,\n\t\t\t\tisSplit: isSplit,\n\t\t\t\tcollection: null,\n\t\t\t\ttextNode: spacer\n\t\t\t};\n\t\t}\n\n\t\t// Make sure that the button is available based on whatever requirements\n\t\t// it has. For example, PDF button require pdfmake\n\t\tif (config.available && !config.available(dt, config) && !config.hasOwnProperty('html')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar button;\n\n\t\tif (!config.hasOwnProperty('html')) {\n\t\t\tvar action = function (e, dt, button, config) {\n\t\t\t\tconfig.action.call(dt.button(button), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t};\n\n\t\t\tvar tag = config.tag || dom.tag;\n\t\t\tvar clickBlurs = config.clickBlurs === undefined ? true : config.clickBlurs;\n\n\t\t\tbutton = $('<' + tag + '/>')\n\t\t\t\t.addClass(dom.className)\n\t\t\t\t.attr('tabindex', this.s.dt.settings()[0].iTabIndex)\n\t\t\t\t.attr('aria-controls', this.s.dt.table().node().id)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tbutton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!button.hasClass(dom.disabled) && config.action) {\n\t\t\t\t\t\t\taction(e, dt, button, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t// Make `a` tags act like a link\n\t\t\tif (tag.toLowerCase() === 'a') {\n\t\t\t\tbutton.attr('href', '#');\n\t\t\t}\n\n\t\t\t// Button tags should have `type=button` so they don't have any default behaviour\n\t\t\tif (tag.toLowerCase() === 'button') {\n\t\t\t\tbutton.attr('type', 'button');\n\t\t\t}\n\n\t\t\tif (dom.liner.tag) {\n\t\t\t\tvar liner = $('<' + dom.liner.tag + '/>')\n\t\t\t\t\t.html(text(config.text))\n\t\t\t\t\t.addClass(dom.liner.className);\n\n\t\t\t\tif (dom.liner.tag.toLowerCase() === 'a') {\n\t\t\t\t\tliner.attr('href', '#');\n\t\t\t\t}\n\n\t\t\t\tbutton.append(liner);\n\t\t\t\ttextNode = liner;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbutton.html(text(config.text));\n\t\t\t\ttextNode = button;\n\t\t\t}\n\n\t\t\tif (config.enabled === false) {\n\t\t\t\tbutton.addClass(dom.disabled);\n\t\t\t}\n\n\t\t\tif (config.className) {\n\t\t\t\tbutton.addClass(config.className);\n\t\t\t}\n\n\t\t\tif (config.titleAttr) {\n\t\t\t\tbutton.attr('title', text(config.titleAttr));\n\t\t\t}\n\n\t\t\tif (config.attr) {\n\t\t\t\tbutton.attr(config.attr);\n\t\t\t}\n\n\t\t\tif (!config.namespace) {\n\t\t\t\tconfig.namespace = '.dt-button-' + _buttonCounter++;\n\t\t\t}\n\n\t\t\tif (config.config !== undefined && config.config.split) {\n\t\t\t\tconfig.split = config.config.split;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbutton = $(config.html);\n\t\t}\n\n\t\tvar buttonContainer = this.c.dom.buttonContainer;\n\t\tvar inserter;\n\t\tif (buttonContainer && buttonContainer.tag) {\n\t\t\tinserter = $('<' + buttonContainer.tag + '/>')\n\t\t\t\t.addClass(buttonContainer.className)\n\t\t\t\t.append(button);\n\t\t}\n\t\telse {\n\t\t\tinserter = button;\n\t\t}\n\n\t\tthis._addKey(config);\n\n\t\t// Style integration callback for DOM manipulation\n\t\t// Note that this is _not_ documented. It is currently\n\t\t// for style integration only\n\t\tif (this.c.buttonCreated) {\n\t\t\tinserter = this.c.buttonCreated(config, inserter);\n\t\t}\n\n\t\tvar splitDiv;\n\n\t\tif (isSplit) {\n\t\t\tvar dropdownConf = inCollection\n\t\t\t\t? $.extend(true, this.c.dom.split, this.c.dom.collection.split)\n\t\t\t\t: this.c.dom.split;\n\t\t\tvar wrapperConf = dropdownConf.wrapper;\n\n\t\t\tsplitDiv = $('<' + wrapperConf.tag + '/>')\n\t\t\t\t.addClass(wrapperConf.className)\n\t\t\t\t.append(button);\n\n\t\t\tvar dropButtonConfig = $.extend(config, {\n\t\t\t\talign: dropdownConf.dropdown.align,\n\t\t\t\tattr: {\n\t\t\t\t\t'aria-haspopup': 'dialog',\n\t\t\t\t\t'aria-expanded': false\n\t\t\t\t},\n\t\t\t\tclassName: dropdownConf.dropdown.className,\n\t\t\t\tcloseButton: false,\n\t\t\t\tsplitAlignClass: dropdownConf.dropdown.splitAlignClass,\n\t\t\t\ttext: dropdownConf.dropdown.text\n\t\t\t});\n\n\t\t\tthis._addKey(dropButtonConfig);\n\n\t\t\tvar splitAction = function (e, dt, button, config) {\n\t\t\t\t_dtButtons.split.action.call(dt.button(splitDiv), e, dt, button, config);\n\n\t\t\t\t$(dt.table().node()).triggerHandler('buttons-action.dt', [\n\t\t\t\t\tdt.button(button),\n\t\t\t\t\tdt,\n\t\t\t\t\tbutton,\n\t\t\t\t\tconfig\n\t\t\t\t]);\n\t\t\t\tbutton.attr('aria-expanded', true);\n\t\t\t};\n\n\t\t\tvar dropButton = $(\n\t\t\t\t'<button class=\"' + dropdownConf.dropdown.className + ' dt-button\"></button>'\n\t\t\t)\n\t\t\t\t.html(dropdownConf.dropdown.dropHtml)\n\t\t\t\t.on('click.dtb', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t}\n\t\t\t\t\tif (clickBlurs) {\n\t\t\t\t\t\tdropButton.trigger('blur');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keypress.dtb', function (e) {\n\t\t\t\t\tif (e.keyCode === 13) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (!dropButton.hasClass(dom.disabled)) {\n\t\t\t\t\t\t\tsplitAction(e, dt, dropButton, dropButtonConfig);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tif (config.split.length === 0) {\n\t\t\t\tdropButton.addClass('dtb-hide-drop');\n\t\t\t}\n\n\t\t\tsplitDiv.append(dropButton).attr(dropButtonConfig.attr);\n\t\t}\n\n\t\treturn {\n\t\t\tconf: config,\n\t\t\tnode: isSplit ? splitDiv.get(0) : button.get(0),\n\t\t\tinserter: isSplit ? splitDiv : inserter,\n\t\t\tbuttons: [],\n\t\t\tinCollection: inCollection,\n\t\t\tisSplit: isSplit,\n\t\t\tinSplit: inSplit,\n\t\t\tcollection: null,\n\t\t\ttextNode: textNode\n\t\t};\n\t},\n\n\t/**\n\t * Get the button object from a node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {object} Button object\n\t * @private\n\t */\n\t_nodeToButton: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons[i];\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToButton(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Get container array for a button from a button node (recursive)\n\t * @param  {node} node Button node\n\t * @param  {array} [buttons] Button array, uses base if not defined\n\t * @return {array} Button's host array\n\t * @private\n\t */\n\t_nodeToHost: function (node, buttons) {\n\t\tif (!buttons) {\n\t\t\tbuttons = this.s.buttons;\n\t\t}\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tif (buttons[i].node === node) {\n\t\t\t\treturn buttons;\n\t\t\t}\n\n\t\t\tif (buttons[i].buttons.length) {\n\t\t\t\tvar ret = this._nodeToHost(node, buttons[i].buttons);\n\n\t\t\t\tif (ret) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle a key press - determine if any button's key configured matches\n\t * what was typed and trigger the action if so.\n\t * @param  {string} character The character pressed\n\t * @param  {object} e Key event that triggered this call\n\t * @private\n\t */\n\t_keypress: function (character, e) {\n\t\t// Check if this button press already activated on another instance of Buttons\n\t\tif (e._buttonsHandled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar run = function (conf, node) {\n\t\t\tif (!conf.key) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (conf.key === character) {\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t\telse if ($.isPlainObject(conf.key)) {\n\t\t\t\tif (conf.key.key !== character) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.shiftKey && !e.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.altKey && !e.altKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.ctrlKey && !e.ctrlKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (conf.key.metaKey && !e.metaKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Made it this far - it is good\n\t\t\t\te._buttonsHandled = true;\n\t\t\t\t$(node).click();\n\t\t\t}\n\t\t};\n\n\t\tvar recurse = function (a) {\n\t\t\tfor (var i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\trun(a[i].conf, a[i].node);\n\n\t\t\t\tif (a[i].buttons.length) {\n\t\t\t\t\trecurse(a[i].buttons);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trecurse(this.s.buttons);\n\t},\n\n\t/**\n\t * Remove a key from the key listener for this instance (to be used when a\n\t * button is removed)\n\t * @param  {object} conf Button configuration\n\t * @private\n\t */\n\t_removeKey: function (conf) {\n\t\tif (conf.key) {\n\t\t\tvar character = $.isPlainObject(conf.key) ? conf.key.key : conf.key;\n\n\t\t\t// Remove only one character, as multiple buttons could have the\n\t\t\t// same listening key\n\t\t\tvar a = this.s.listenKeys.split('');\n\t\t\tvar idx = $.inArray(character, a);\n\t\t\ta.splice(idx, 1);\n\t\t\tthis.s.listenKeys = a.join('');\n\t\t}\n\t},\n\n\t/**\n\t * Resolve a button configuration\n\t * @param  {string|function|object} conf Button config to resolve\n\t * @return {object} Button configuration\n\t * @private\n\t */\n\t_resolveExtends: function (conf) {\n\t\tvar that = this;\n\t\tvar dt = this.s.dt;\n\t\tvar i, ien;\n\t\tvar toConfObject = function (base) {\n\t\t\tvar loop = 0;\n\n\t\t\t// Loop until we have resolved to a button configuration, or an\n\t\t\t// array of button configurations (which will be iterated\n\t\t\t// separately)\n\t\t\twhile (!$.isPlainObject(base) && !Array.isArray(base)) {\n\t\t\t\tif (base === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (typeof base === 'function') {\n\t\t\t\t\tbase = base.call(that, dt, conf);\n\n\t\t\t\t\tif (!base) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (typeof base === 'string') {\n\t\t\t\t\tif (!_dtButtons[base]) {\n\t\t\t\t\t\treturn { html: base };\n\t\t\t\t\t}\n\n\t\t\t\t\tbase = _dtButtons[base];\n\t\t\t\t}\n\n\t\t\t\tloop++;\n\t\t\t\tif (loop > 30) {\n\t\t\t\t\t// Protect against misconfiguration killing the browser\n\t\t\t\t\tthrow 'Buttons: Too many iterations';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Array.isArray(base) ? base : $.extend({}, base);\n\t\t};\n\n\t\tconf = toConfObject(conf);\n\n\t\twhile (conf && conf.extend) {\n\t\t\t// Use `toConfObject` in case the button definition being extended\n\t\t\t// is itself a string or a function\n\t\t\tif (!_dtButtons[conf.extend]) {\n\t\t\t\tthrow 'Cannot extend unknown button type: ' + conf.extend;\n\t\t\t}\n\n\t\t\tvar objArray = toConfObject(_dtButtons[conf.extend]);\n\t\t\tif (Array.isArray(objArray)) {\n\t\t\t\treturn objArray;\n\t\t\t}\n\t\t\telse if (!objArray) {\n\t\t\t\t// This is a little brutal as it might be possible to have a\n\t\t\t\t// valid button without the extend, but if there is no extend\n\t\t\t\t// then the host button would be acting in an undefined state\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Stash the current class name\n\t\t\tvar originalClassName = objArray.className;\n\n\t\t\tif (conf.config !== undefined && objArray.config !== undefined) {\n\t\t\t\tconf.config = $.extend({}, objArray.config, conf.config);\n\t\t\t}\n\n\t\t\tconf = $.extend({}, objArray, conf);\n\n\t\t\t// The extend will have overwritten the original class name if the\n\t\t\t// `conf` object also assigned a class, but we want to concatenate\n\t\t\t// them so they are list that is combined from all extended buttons\n\t\t\tif (originalClassName && conf.className !== originalClassName) {\n\t\t\t\tconf.className = originalClassName + ' ' + conf.className;\n\t\t\t}\n\n\t\t\t// Although we want the `conf` object to overwrite almost all of\n\t\t\t// the properties of the object being extended, the `extend`\n\t\t\t// property should come from the object being extended\n\t\t\tconf.extend = objArray.extend;\n\t\t}\n\n\t\t// Buttons to be added to a collection  -gives the ability to define\n\t\t// if buttons should be added to the start or end of a collection\n\t\tvar postfixButtons = conf.postfixButtons;\n\t\tif (postfixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = postfixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.push(postfixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\tvar prefixButtons = conf.prefixButtons;\n\t\tif (prefixButtons) {\n\t\t\tif (!conf.buttons) {\n\t\t\t\tconf.buttons = [];\n\t\t\t}\n\n\t\t\tfor (i = 0, ien = prefixButtons.length; i < ien; i++) {\n\t\t\t\tconf.buttons.splice(i, 0, prefixButtons[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn conf;\n\t},\n\n\t/**\n\t * Display (and replace if there is an existing one) a popover attached to a button\n\t * @param {string|node} content Content to show\n\t * @param {DataTable.Api} hostButton DT API instance of the button\n\t * @param {object} inOpts Options (see object below for all options)\n\t */\n\t_popover: function (content, hostButton, inOpts, e) {\n\t\tvar dt = hostButton;\n\t\tvar c = this.c;\n\t\tvar closed = false;\n\t\tvar options = $.extend(\n\t\t\t{\n\t\t\t\talign: 'button-left', // button-right, dt-container, split-left, split-right\n\t\t\t\tautoClose: false,\n\t\t\t\tbackground: true,\n\t\t\t\tbackgroundClassName: 'dt-button-background',\n\t\t\t\tcloseButton: true,\n\t\t\t\tcontainerClassName: c.dom.collection.container.className,\n\t\t\t\tcontentClassName: c.dom.collection.container.content.className,\n\t\t\t\tcollectionLayout: '',\n\t\t\t\tcollectionTitle: '',\n\t\t\t\tdropup: false,\n\t\t\t\tfade: 400,\n\t\t\t\tpopoverTitle: '',\n\t\t\t\trightAlignClassName: 'dt-button-right',\n\t\t\t\ttag: c.dom.collection.container.tag\n\t\t\t},\n\t\t\tinOpts\n\t\t);\n\n\t\tvar containerSelector = options.tag + '.' + options.containerClassName.replace(/ /g, '.');\n\t\tvar hostNode = hostButton.node();\n\n\t\tvar close = function () {\n\t\t\tclosed = true;\n\n\t\t\t_fadeOut($(containerSelector), options.fade, function () {\n\t\t\t\t$(this).detach();\n\t\t\t});\n\n\t\t\t$(dt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()).attr(\n\t\t\t\t'aria-expanded',\n\t\t\t\t'false'\n\t\t\t);\n\n\t\t\t$('div.dt-button-background').off('click.dtb-collection');\n\t\t\tButtons.background(false, options.backgroundClassName, options.fade, hostNode);\n\n\t\t\t$(window).off('resize.resize.dtb-collection');\n\t\t\t$('body').off('.dtb-collection');\n\t\t\tdt.off('buttons-action.b-internal');\n\t\t\tdt.off('destroy');\n\t\t};\n\n\t\tif (content === false) {\n\t\t\tclose();\n\t\t\treturn;\n\t\t}\n\n\t\tvar existingExpanded = $(\n\t\t\tdt.buttons('[aria-haspopup=\"dialog\"][aria-expanded=\"true\"]').nodes()\n\t\t);\n\t\tif (existingExpanded.length) {\n\t\t\t// Reuse the current position if the button that was triggered is inside an existing collection\n\t\t\tif (hostNode.closest(containerSelector).length) {\n\t\t\t\thostNode = existingExpanded.eq(0);\n\t\t\t}\n\n\t\t\tclose();\n\t\t}\n\n\t\t// Try to be smart about the layout\n\t\tvar cnt = $('.dt-button', content).length;\n\t\tvar mod = '';\n\n\t\tif (cnt === 3) {\n\t\t\tmod = 'dtb-b3';\n\t\t}\n\t\telse if (cnt === 2) {\n\t\t\tmod = 'dtb-b2';\n\t\t}\n\t\telse if (cnt === 1) {\n\t\t\tmod = 'dtb-b1';\n\t\t}\n\n\t\tvar display = $('<' + options.tag + '/>')\n\t\t\t.addClass(options.containerClassName)\n\t\t\t.addClass(options.collectionLayout)\n\t\t\t.addClass(options.splitAlignClass)\n\t\t\t.addClass(mod)\n\t\t\t.css('display', 'none')\n\t\t\t.attr({\n\t\t\t\t'aria-modal': true,\n\t\t\t\trole: 'dialog'\n\t\t\t});\n\n\t\tcontent = $(content)\n\t\t\t.addClass(options.contentClassName)\n\t\t\t.attr('role', 'menu')\n\t\t\t.appendTo(display);\n\n\t\thostNode.attr('aria-expanded', 'true');\n\n\t\tif (hostNode.parents('body')[0] !== document.body) {\n\t\t\thostNode = document.body.lastChild;\n\t\t}\n\n\t\tif (options.popoverTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.popoverTitle + '</div>'\n\t\t\t);\n\t\t}\n\t\telse if (options.collectionTitle) {\n\t\t\tdisplay.prepend(\n\t\t\t\t'<div class=\"dt-button-collection-title\">' + options.collectionTitle + '</div>'\n\t\t\t);\n\t\t}\n\n\t\tif (options.closeButton) {\n\t\t\tdisplay\n\t\t\t\t.prepend('<div class=\"dtb-popover-close\">&times;</div>')\n\t\t\t\t.addClass('dtb-collection-closeable');\n\t\t}\n\n\t\t_fadeIn(display.insertAfter(hostNode), options.fade);\n\n\t\tvar tableContainer = $(hostButton.table().container());\n\t\tvar position = display.css('position');\n\n\t\tif (options.span === 'container' || options.align === 'dt-container') {\n\t\t\thostNode = hostNode.parent();\n\t\t\tdisplay.css('width', tableContainer.width());\n\t\t}\n\n\t\t// Align the popover relative to the DataTables container\n\t\t// Useful for wide popovers such as SearchPanes\n\t\tif (position === 'absolute') {\n\t\t\t// Align relative to the host button\n\t\t\tvar offsetParent = $(hostNode[0].offsetParent);\n\t\t\tvar buttonPosition = hostNode.position();\n\t\t\tvar buttonOffset = hostNode.offset();\n\t\t\tvar tableSizes = offsetParent.offset();\n\t\t\tvar containerPosition = offsetParent.position();\n\t\t\tvar computed = window.getComputedStyle(offsetParent[0]);\n\n\t\t\ttableSizes.height = offsetParent.outerHeight();\n\t\t\ttableSizes.width = offsetParent.width() + parseFloat(computed.paddingLeft);\n\t\t\ttableSizes.right = tableSizes.left + tableSizes.width;\n\t\t\ttableSizes.bottom = tableSizes.top + tableSizes.height;\n\n\t\t\t// Set the initial position so we can read height / width\n\t\t\tvar top = buttonPosition.top + hostNode.outerHeight();\n\t\t\tvar left = buttonPosition.left;\n\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\n\t\t\t// Get the popover position\n\t\t\tcomputed = window.getComputedStyle(display[0]);\n\t\t\tvar popoverSizes = display.offset();\n\n\t\t\tpopoverSizes.height = display.outerHeight();\n\t\t\tpopoverSizes.width = display.outerWidth();\n\t\t\tpopoverSizes.right = popoverSizes.left + popoverSizes.width;\n\t\t\tpopoverSizes.bottom = popoverSizes.top + popoverSizes.height;\n\t\t\tpopoverSizes.marginTop = parseFloat(computed.marginTop);\n\t\t\tpopoverSizes.marginBottom = parseFloat(computed.marginBottom);\n\n\t\t\t// First position per the class requirements - pop up and right align\n\t\t\tif (options.dropup) {\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (options.align === 'button-right' || display.hasClass(options.rightAlignClassName)) {\n\t\t\t\tleft = buttonPosition.left - popoverSizes.width + hostNode.outerWidth();\n\t\t\t}\n\n\t\t\t// Container alignment - make sure it doesn't overflow the table container\n\t\t\tif (options.align === 'dt-container' || options.align === 'container') {\n\t\t\t\tif (left < buttonPosition.left) {\n\t\t\t\t\tleft = -buttonPosition.left;\n\t\t\t\t}\n\n\t\t\t\tif (left + popoverSizes.width > tableSizes.width) {\n\t\t\t\t\tleft = tableSizes.width - popoverSizes.width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Window adjustment\n\t\t\tif (containerPosition.left + left + popoverSizes.width > $(window).width()) {\n\t\t\t\t// Overflowing the document to the right\n\t\t\t\tleft = $(window).width() - popoverSizes.width - containerPosition.left;\n\t\t\t}\n\n\t\t\tif (buttonOffset.left + left < 0) {\n\t\t\t\t// Off to the left of the document\n\t\t\t\tleft = -buttonOffset.left;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tcontainerPosition.top + top + popoverSizes.height >\n\t\t\t\t$(window).height() + $(window).scrollTop()\n\t\t\t) {\n\t\t\t\t// Pop up if otherwise we'd need the user to scroll down\n\t\t\t\ttop =\n\t\t\t\t\tbuttonPosition.top -\n\t\t\t\t\tpopoverSizes.height -\n\t\t\t\t\tpopoverSizes.marginTop -\n\t\t\t\t\tpopoverSizes.marginBottom;\n\t\t\t}\n\n\t\t\tif (containerPosition.top + top < $(window).scrollTop()) {\n\t\t\t\t// Correction for when the top is beyond the top of the page\n\t\t\t\ttop = buttonPosition.top + hostNode.outerHeight();\n\t\t\t}\n\n\t\t\t// Calculations all done - now set it\n\t\t\tdisplay.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// Fix position - centre on screen\n\t\t\tvar position = function () {\n\t\t\t\tvar half = $(window).height() / 2;\n\n\t\t\t\tvar top = display.height() / 2;\n\t\t\t\tif (top > half) {\n\t\t\t\t\ttop = half;\n\t\t\t\t}\n\n\t\t\t\tdisplay.css('marginTop', top * -1);\n\t\t\t};\n\n\t\t\tposition();\n\n\t\t\t$(window).on('resize.dtb-collection', function () {\n\t\t\t\tposition();\n\t\t\t});\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tButtons.background(\n\t\t\t\ttrue,\n\t\t\t\toptions.backgroundClassName,\n\t\t\t\toptions.fade,\n\t\t\t\toptions.backgroundHost || hostNode\n\t\t\t);\n\t\t}\n\n\t\t// This is bonkers, but if we don't have a click listener on the\n\t\t// background element, iOS Safari will ignore the body click\n\t\t// listener below. An empty function here is all that is\n\t\t// required to make it work...\n\t\t$('div.dt-button-background').on('click.dtb-collection', function () {});\n\n\t\tif (options.autoClose) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tdt.on('buttons-action.b-internal', function (e, btn, dt, node) {\n\t\t\t\t\tif (node[0] === hostNode[0]) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclose();\n\t\t\t\t});\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(display).trigger('buttons-popover.dt');\n\n\t\tdt.on('destroy', close);\n\n\t\tsetTimeout(function () {\n\t\t\tclosed = false;\n\t\t\t$('body')\n\t\t\t\t.on('click.dtb-collection', function (e) {\n\t\t\t\t\tif (closed) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// andSelf is deprecated in jQ1.8, but we want 1.7 compat\n\t\t\t\t\tvar back = $.fn.addBack ? 'addBack' : 'andSelf';\n\t\t\t\t\tvar parent = $(e.target).parent()[0];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(!$(e.target).parents()[back]().filter(content).length &&\n\t\t\t\t\t\t\t!$(parent).hasClass('dt-buttons')) ||\n\t\t\t\t\t\t$(e.target).hasClass('dt-button-background')\n\t\t\t\t\t) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keyup.dtb-collection', function (e) {\n\t\t\t\t\tif (e.keyCode === 27) {\n\t\t\t\t\t\tclose();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keydown.dtb-collection', function (e) {\n\t\t\t\t\t// Focus trap for tab key\n\t\t\t\t\tvar elements = $('a, button', content);\n\t\t\t\t\tvar active = document.activeElement;\n\n\t\t\t\t\tif (e.keyCode !== 9) {\n\t\t\t\t\t\t// tab\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (elements.index(active) === -1) {\n\t\t\t\t\t\t// If current focus is not inside the popover\n\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey) {\n\t\t\t\t\t\t// Reverse tabbing order when shift key is pressed\n\t\t\t\t\t\tif (active === elements[0]) {\n\t\t\t\t\t\t\telements.last().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (active === elements.last()[0]) {\n\t\t\t\t\t\t\telements.first().focus();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, 0);\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n */\n\n/**\n * Show / hide a background layer behind a collection\n * @param  {boolean} Flag to indicate if the background should be shown or\n *   hidden\n * @param  {string} Class to assign to the background\n * @static\n */\nButtons.background = function (show, className, fade, insertPoint) {\n\tif (fade === undefined) {\n\t\tfade = 400;\n\t}\n\tif (!insertPoint) {\n\t\tinsertPoint = document.body;\n\t}\n\n\tif (show) {\n\t\t_fadeIn(\n\t\t\t$('<div/>').addClass(className).css('display', 'none').insertAfter(insertPoint),\n\t\t\tfade\n\t\t);\n\t}\n\telse {\n\t\t_fadeOut($('div.' + className), fade, function () {\n\t\t\t$(this).removeClass(className).remove();\n\t\t});\n\t}\n};\n\n/**\n * Instance selector - select Buttons instances based on an instance selector\n * value from the buttons assigned to a DataTable. This is only useful if\n * multiple instances are attached to a DataTable.\n * @param  {string|int|array} Instance selector - see `instance-selector`\n *   documentation on the DataTables site\n * @param  {array} Button instance array that was attached to the DataTables\n *   settings object\n * @return {array} Buttons instances\n * @static\n */\nButtons.instanceSelector = function (group, buttons) {\n\tif (group === undefined || group === null) {\n\t\treturn $.map(buttons, function (v) {\n\t\t\treturn v.inst;\n\t\t});\n\t}\n\n\tvar ret = [];\n\tvar names = $.map(buttons, function (v) {\n\t\treturn v.name;\n\t});\n\n\t// Flatten the group selector into an array of single options\n\tvar process = function (input) {\n\t\tif (Array.isArray(input)) {\n\t\t\tfor (var i = 0, ien = input.length; i < ien; i++) {\n\t\t\t\tprocess(input[i]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof input === 'string') {\n\t\t\tif (input.indexOf(',') !== -1) {\n\t\t\t\t// String selector, list of names\n\t\t\t\tprocess(input.split(','));\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// String selector individual name\n\t\t\t\tvar idx = $.inArray(input.trim(), names);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tret.push(buttons[idx].inst);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof input === 'number') {\n\t\t\t// Index selector\n\t\t\tret.push(buttons[input].inst);\n\t\t}\n\t\telse if (typeof input === 'object') {\n\t\t\t// Actual instance selector\n\t\t\tret.push(input);\n\t\t}\n\t};\n\n\tprocess(group);\n\n\treturn ret;\n};\n\n/**\n * Button selector - select one or more buttons from a selector input so some\n * operation can be performed on them.\n * @param  {array} Button instances array that the selector should operate on\n * @param  {string|int|node|jQuery|array} Button selector - see\n *   `button-selector` documentation on the DataTables site\n * @return {array} Array of objects containing `inst` and `idx` properties of\n *   the selected buttons so you know which instance each button belongs to.\n * @static\n */\nButtons.buttonSelector = function (insts, selector) {\n\tvar ret = [];\n\tvar nodeBuilder = function (a, buttons, baseIdx) {\n\t\tvar button;\n\t\tvar idx;\n\n\t\tfor (var i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\tbutton = buttons[i];\n\n\t\t\tif (button) {\n\t\t\t\tidx = baseIdx !== undefined ? baseIdx + i : i + '';\n\n\t\t\t\ta.push({\n\t\t\t\t\tnode: button.node,\n\t\t\t\t\tname: button.conf.name,\n\t\t\t\t\tidx: idx\n\t\t\t\t});\n\n\t\t\t\tif (button.buttons) {\n\t\t\t\t\tnodeBuilder(a, button.buttons, idx + '-');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar run = function (selector, inst) {\n\t\tvar i, ien;\n\t\tvar buttons = [];\n\t\tnodeBuilder(buttons, inst.s.buttons);\n\n\t\tvar nodes = $.map(buttons, function (v) {\n\t\t\treturn v.node;\n\t\t});\n\n\t\tif (Array.isArray(selector) || selector instanceof $) {\n\t\t\tfor (i = 0, ien = selector.length; i < ien; i++) {\n\t\t\t\trun(selector[i], inst);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (selector === null || selector === undefined || selector === '*') {\n\t\t\t// Select all\n\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'number') {\n\t\t\t// Main button index selector\n\t\t\tif (inst.s.buttons[selector]) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: inst.s.buttons[selector].node\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'string') {\n\t\t\tif (selector.indexOf(',') !== -1) {\n\t\t\t\t// Split\n\t\t\t\tvar a = selector.split(',');\n\n\t\t\t\tfor (i = 0, ien = a.length; i < ien; i++) {\n\t\t\t\t\trun(a[i].trim(), inst);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (selector.match(/^\\d+(\\-\\d+)*$/)) {\n\t\t\t\t// Sub-button index selector\n\t\t\t\tvar indexes = $.map(buttons, function (v) {\n\t\t\t\t\treturn v.idx;\n\t\t\t\t});\n\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: buttons[$.inArray(selector, indexes)].node\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (selector.indexOf(':name') !== -1) {\n\t\t\t\t// Button name selector\n\t\t\t\tvar name = selector.replace(':name', '');\n\n\t\t\t\tfor (i = 0, ien = buttons.length; i < ien; i++) {\n\t\t\t\t\tif (buttons[i].name === name) {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: buttons[i].node\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// jQuery selector on the nodes\n\t\t\t\t$(nodes)\n\t\t\t\t\t.filter(selector)\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tret.push({\n\t\t\t\t\t\t\tinst: inst,\n\t\t\t\t\t\t\tnode: this\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if (typeof selector === 'object' && selector.nodeName) {\n\t\t\t// Node selector\n\t\t\tvar idx = $.inArray(selector, nodes);\n\n\t\t\tif (idx !== -1) {\n\t\t\t\tret.push({\n\t\t\t\t\tinst: inst,\n\t\t\t\t\tnode: nodes[idx]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\tvar inst = insts[i];\n\n\t\trun(selector, inst);\n\t}\n\n\treturn ret;\n};\n\n/**\n * Default function used for formatting output data.\n * @param {*} str Data to strip\n */\nButtons.stripData = function (str, config) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\n\t// Always remove script tags\n\tstr = str.replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '');\n\n\t// Always remove comments\n\tstr = str.replace(/<!\\-\\-.*?\\-\\->/g, '');\n\n\tif (!config || config.stripHtml) {\n\t\tstr = str.replace(/<[^>]*>/g, '');\n\t}\n\n\tif (!config || config.trim) {\n\t\tstr = str.replace(/^\\s+|\\s+$/g, '');\n\t}\n\n\tif (!config || config.stripNewlines) {\n\t\tstr = str.replace(/\\n/g, ' ');\n\t}\n\n\tif (!config || config.decodeEntities) {\n\t\tif (_entityDecoder) {\n\t\t\tstr = _entityDecoder(str);\n\t\t}\n\t\telse {\n\t\t\t_exportTextarea.innerHTML = str;\n\t\t\tstr = _exportTextarea.value;\n\t\t}\n\t}\n\n\treturn str;\n};\n\n/**\n * Provide a custom entity decoding function - e.g. a regex one, which can be\n * much faster than the built in DOM option, but also larger code size.\n * @param {function} fn\n */\nButtons.entityDecoder = function (fn) {\n\t_entityDecoder = fn;\n}\n\n/**\n * Buttons defaults. For full documentation, please refer to the docs/option\n * directory or the DataTables site.\n * @type {Object}\n * @static\n */\nButtons.defaults = {\n\tbuttons: ['copy', 'excel', 'csv', 'pdf', 'print'],\n\tname: 'main',\n\ttabIndex: 0,\n\tdom: {\n\t\tcontainer: {\n\t\t\ttag: 'div',\n\t\t\tclassName: 'dt-buttons'\n\t\t},\n\t\tcollection: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>'\n\t\t\t},\n\t\t\tcontainer: {\n\t\t\t\t// The element used for the dropdown\n\t\t\t\tclassName: 'dt-button-collection',\n\t\t\t\tcontent: {\n\t\t\t\t\tclassName: '',\n\t\t\t\t\ttag: 'div'\n\t\t\t\t},\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t\t// optionally\n\t\t\t// , button: IButton - buttons inside the collection container\n\t\t\t// , split: ISplit - splits inside the collection container\n\t\t},\n\t\tbutton: {\n\t\t\ttag: 'button',\n\t\t\tclassName: 'dt-button',\n\t\t\tactive: 'dt-button-active', // class name\n\t\t\tdisabled: 'disabled', // class name\n\t\t\tspacer: {\n\t\t\t\tclassName: 'dt-button-spacer',\n\t\t\t\ttag: 'span'\n\t\t\t},\n\t\t\tliner: {\n\t\t\t\ttag: 'span',\n\t\t\t\tclassName: ''\n\t\t\t}\n\t\t},\n\t\tsplit: {\n\t\t\taction: {\n\t\t\t\t// action button\n\t\t\t\tclassName: 'dt-button-split-drop-button dt-button',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\tdropdown: {\n\t\t\t\t// button to trigger the dropdown\n\t\t\t\talign: 'split-right',\n\t\t\t\tclassName: 'dt-button-split-drop',\n\t\t\t\tdropHtml: '<span class=\"dt-button-down-arrow\">&#x25BC;</span>',\n\t\t\t\tsplitAlignClass: 'dt-button-split-left',\n\t\t\t\ttag: 'button'\n\t\t\t},\n\t\t\twrapper: {\n\t\t\t\t// wrap around both\n\t\t\t\tclassName: 'dt-button-split',\n\t\t\t\ttag: 'div'\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Version information\n * @type {string}\n * @static\n */\nButtons.version = '2.4.2';\n\n$.extend(_dtButtons, {\n\tcollection: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.collection', 'Collection');\n\t\t},\n\t\tclassName: 'buttons-collection',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\tbutton.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tif (config._collection.parents('body').length) {\n\t\t\t\tthis.popover(false, config);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.popover(config._collection, config);\n\t\t\t}\n\n\t\t\t// When activated using a key - auto focus on the\n\t\t\t// first item in the popover\n\t\t\tif (e.type === 'keypress') {\n\t\t\t\t$('a, button', config._collection).eq(0).focus();\n\t\t\t}\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tsplit: {\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.split', 'Split');\n\t\t},\n\t\tclassName: 'buttons-split',\n\t\tcloseButton: false,\n\t\tinit: function (dt, button, config) {\n\t\t\treturn button.attr('aria-expanded', false);\n\t\t},\n\t\taction: function (e, dt, button, config) {\n\t\t\tthis.popover(config._collection, config);\n\t\t},\n\t\tattr: {\n\t\t\t'aria-haspopup': 'dialog'\n\t\t}\n\t\t// Also the popover options, defined in Buttons.popover\n\t},\n\tcopy: function (dt, conf) {\n\t\tif (_dtButtons.copyHtml5) {\n\t\t\treturn 'copyHtml5';\n\t\t}\n\t},\n\tcsv: function (dt, conf) {\n\t\tif (_dtButtons.csvHtml5 && _dtButtons.csvHtml5.available(dt, conf)) {\n\t\t\treturn 'csvHtml5';\n\t\t}\n\t},\n\texcel: function (dt, conf) {\n\t\tif (_dtButtons.excelHtml5 && _dtButtons.excelHtml5.available(dt, conf)) {\n\t\t\treturn 'excelHtml5';\n\t\t}\n\t},\n\tpdf: function (dt, conf) {\n\t\tif (_dtButtons.pdfHtml5 && _dtButtons.pdfHtml5.available(dt, conf)) {\n\t\t\treturn 'pdfHtml5';\n\t\t}\n\t},\n\tpageLength: function (dt) {\n\t\tvar lengthMenu = dt.settings()[0].aLengthMenu;\n\t\tvar vals = [];\n\t\tvar lang = [];\n\t\tvar text = function (dt) {\n\t\t\treturn dt.i18n(\n\t\t\t\t'buttons.pageLength',\n\t\t\t\t{\n\t\t\t\t\t'-1': 'Show all rows',\n\t\t\t\t\t_: 'Show %d rows'\n\t\t\t\t},\n\t\t\t\tdt.page.len()\n\t\t\t);\n\t\t};\n\n\t\t// Support for DataTables 1.x 2D array\n\t\tif (Array.isArray(lengthMenu[0])) {\n\t\t\tvals = lengthMenu[0];\n\t\t\tlang = lengthMenu[1];\n\t\t}\n\t\telse {\n\t\t\tfor (var i = 0; i < lengthMenu.length; i++) {\n\t\t\t\tvar option = lengthMenu[i];\n\n\t\t\t\t// Support for DataTables 2 object in the array\n\t\t\t\tif ($.isPlainObject(option)) {\n\t\t\t\t\tvals.push(option.value);\n\t\t\t\t\tlang.push(option.label);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvals.push(option);\n\t\t\t\t\tlang.push(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\textend: 'collection',\n\t\t\ttext: text,\n\t\t\tclassName: 'buttons-page-length',\n\t\t\tautoClose: true,\n\t\t\tbuttons: $.map(vals, function (val, i) {\n\t\t\t\treturn {\n\t\t\t\t\ttext: lang[i],\n\t\t\t\t\tclassName: 'button-page-length',\n\t\t\t\t\taction: function (e, dt) {\n\t\t\t\t\t\tdt.page.len(val).draw();\n\t\t\t\t\t},\n\t\t\t\t\tinit: function (dt, node, conf) {\n\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\tvar fn = function () {\n\t\t\t\t\t\t\tthat.active(dt.page.len() === val);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdt.on('length.dt' + conf.namespace, fn);\n\t\t\t\t\t\tfn();\n\t\t\t\t\t},\n\t\t\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}),\n\t\t\tinit: function (dt, node, conf) {\n\t\t\t\tvar that = this;\n\t\t\t\tdt.on('length.dt' + conf.namespace, function () {\n\t\t\t\t\tthat.text(conf.text);\n\t\t\t\t});\n\t\t\t},\n\t\t\tdestroy: function (dt, node, conf) {\n\t\t\t\tdt.off('length.dt' + conf.namespace);\n\t\t\t}\n\t\t};\n\t},\n\tspacer: {\n\t\tstyle: 'empty',\n\t\tspacer: true,\n\t\ttext: function (dt) {\n\t\t\treturn dt.i18n('buttons.spacer', '');\n\t\t}\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables API\n *\n * For complete documentation, please refer to the docs/api directory or the\n * DataTables site\n */\n\n// Buttons group and individual button selector\nDataTable.Api.register('buttons()', function (group, selector) {\n\t// Argument shifting\n\tif (selector === undefined) {\n\t\tselector = group;\n\t\tgroup = undefined;\n\t}\n\n\tthis.selector.buttonGroup = group;\n\n\tvar res = this.iterator(\n\t\ttrue,\n\t\t'table',\n\t\tfunction (ctx) {\n\t\t\tif (ctx._buttons) {\n\t\t\t\treturn Buttons.buttonSelector(\n\t\t\t\t\tButtons.instanceSelector(group, ctx._buttons),\n\t\t\t\t\tselector\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\ttrue\n\t);\n\n\tres._groupSelector = group;\n\treturn res;\n});\n\n// Individual button selector\nDataTable.Api.register('button()', function (group, selector) {\n\t// just run buttons() and truncate\n\tvar buttons = this.buttons(group, selector);\n\n\tif (buttons.length > 1) {\n\t\tbuttons.splice(1, buttons.length);\n\t}\n\n\treturn buttons;\n});\n\n// Active buttons\nDataTable.Api.registerPlural('buttons().active()', 'button().active()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.active(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.active(set.node, flag);\n\t});\n});\n\n// Get / set button action\nDataTable.Api.registerPlural('buttons().action()', 'button().action()', function (action) {\n\tif (action === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.action(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.action(set.node, action);\n\t});\n});\n\n// Collection control\nDataTable.Api.registerPlural(\n\t'buttons().collectionRebuild()',\n\t'button().collectionRebuild()',\n\tfunction (buttons) {\n\t\treturn this.each(function (set) {\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\tif (typeof buttons[i] === 'object') {\n\t\t\t\t\tbuttons[i].parentConf = set;\n\t\t\t\t}\n\t\t\t}\n\t\t\tset.inst.collectionRebuild(set.node, buttons);\n\t\t});\n\t}\n);\n\n// Enable / disable buttons\nDataTable.Api.register(['buttons().enable()', 'button().enable()'], function (flag) {\n\treturn this.each(function (set) {\n\t\tset.inst.enable(set.node, flag);\n\t});\n});\n\n// Disable buttons\nDataTable.Api.register(['buttons().disable()', 'button().disable()'], function () {\n\treturn this.each(function (set) {\n\t\tset.inst.disable(set.node);\n\t});\n});\n\n// Button index\nDataTable.Api.register('button().index()', function () {\n\tvar idx = null;\n\n\tthis.each(function (set) {\n\t\tvar res = set.inst.index(set.node);\n\n\t\tif (res !== null) {\n\t\t\tidx = res;\n\t\t}\n\t});\n\n\treturn idx;\n});\n\n// Get button nodes\nDataTable.Api.registerPlural('buttons().nodes()', 'button().node()', function () {\n\tvar jq = $();\n\n\t// jQuery will automatically reduce duplicates to a single entry\n\t$(\n\t\tthis.each(function (set) {\n\t\t\tjq = jq.add(set.inst.node(set.node));\n\t\t})\n\t);\n\n\treturn jq;\n});\n\n// Get / set button processing state\nDataTable.Api.registerPlural('buttons().processing()', 'button().processing()', function (flag) {\n\tif (flag === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.processing(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.processing(set.node, flag);\n\t});\n});\n\n// Get / set button text (i.e. the button labels)\nDataTable.Api.registerPlural('buttons().text()', 'button().text()', function (label) {\n\tif (label === undefined) {\n\t\treturn this.map(function (set) {\n\t\t\treturn set.inst.text(set.node);\n\t\t});\n\t}\n\n\treturn this.each(function (set) {\n\t\tset.inst.text(set.node, label);\n\t});\n});\n\n// Trigger a button's action\nDataTable.Api.registerPlural('buttons().trigger()', 'button().trigger()', function () {\n\treturn this.each(function (set) {\n\t\tset.inst.node(set.node).trigger('click');\n\t});\n});\n\n// Button resolver to the popover\nDataTable.Api.register('button().popover()', function (content, options) {\n\treturn this.map(function (set) {\n\t\treturn set.inst._popover(content, this.button(this[0].node), options);\n\t});\n});\n\n// Get the container elements\nDataTable.Api.register('buttons().containers()', function () {\n\tvar jq = $();\n\tvar groupSelector = this._groupSelector;\n\n\t// We need to use the group selector directly, since if there are no buttons\n\t// the result set will be empty\n\tthis.iterator(true, 'table', function (ctx) {\n\t\tif (ctx._buttons) {\n\t\t\tvar insts = Buttons.instanceSelector(groupSelector, ctx._buttons);\n\n\t\t\tfor (var i = 0, ien = insts.length; i < ien; i++) {\n\t\t\t\tjq = jq.add(insts[i].container());\n\t\t\t}\n\t\t}\n\t});\n\n\treturn jq;\n});\n\nDataTable.Api.register('buttons().container()', function () {\n\t// API level of nesting is `buttons()` so we can zip into the containers method\n\treturn this.containers().eq(0);\n});\n\n// Add a new button\nDataTable.Api.register('button().add()', function (idx, conf, draw) {\n\tvar ctx = this.context;\n\n\t// Don't use `this` as it could be empty - select the instances directly\n\tif (ctx.length) {\n\t\tvar inst = Buttons.instanceSelector(this._groupSelector, ctx[0]._buttons);\n\n\t\tif (inst.length) {\n\t\t\tinst[0].add(conf, idx, draw);\n\t\t}\n\t}\n\n\treturn this.button(this._groupSelector, idx);\n});\n\n// Destroy the button sets selected\nDataTable.Api.register('buttons().destroy()', function () {\n\tthis.pluck('inst')\n\t\t.unique()\n\t\t.each(function (inst) {\n\t\t\tinst.destroy();\n\t\t});\n\n\treturn this;\n});\n\n// Remove a button\nDataTable.Api.registerPlural('buttons().remove()', 'buttons().remove()', function () {\n\tthis.each(function (set) {\n\t\tset.inst.remove(set.node);\n\t});\n\n\treturn this;\n});\n\n// Information box that can be used by buttons\nvar _infoTimer;\nDataTable.Api.register('buttons.info()', function (title, message, time) {\n\tvar that = this;\n\n\tif (title === false) {\n\t\tthis.off('destroy.btn-info');\n\t\t_fadeOut($('#datatables_buttons_info'), 400, function () {\n\t\t\t$(this).remove();\n\t\t});\n\t\tclearTimeout(_infoTimer);\n\t\t_infoTimer = null;\n\n\t\treturn this;\n\t}\n\n\tif (_infoTimer) {\n\t\tclearTimeout(_infoTimer);\n\t}\n\n\tif ($('#datatables_buttons_info').length) {\n\t\t$('#datatables_buttons_info').remove();\n\t}\n\n\ttitle = title ? '<h2>' + title + '</h2>' : '';\n\n\t_fadeIn(\n\t\t$('<div id=\"datatables_buttons_info\" class=\"dt-button-info\"/>')\n\t\t\t.html(title)\n\t\t\t.append($('<div/>')[typeof message === 'string' ? 'html' : 'append'](message))\n\t\t\t.css('display', 'none')\n\t\t\t.appendTo('body')\n\t);\n\n\tif (time !== undefined && time !== 0) {\n\t\t_infoTimer = setTimeout(function () {\n\t\t\tthat.buttons.info(false);\n\t\t}, time);\n\t}\n\n\tthis.on('destroy.btn-info', function () {\n\t\tthat.buttons.info(false);\n\t});\n\n\treturn this;\n});\n\n// Get data from the table for export - this is common to a number of plug-in\n// buttons so it is included in the Buttons core library\nDataTable.Api.register('buttons.exportData()', function (options) {\n\tif (this.context.length) {\n\t\treturn _exportData(new DataTable.Api(this.context[0]), options);\n\t}\n});\n\n// Get information about the export that is common to many of the export data\n// types (DRY)\nDataTable.Api.register('buttons.exportInfo()', function (conf) {\n\tif (!conf) {\n\t\tconf = {};\n\t}\n\n\treturn {\n\t\tfilename: _filename(conf),\n\t\ttitle: _title(conf),\n\t\tmessageTop: _message(this, conf.message || conf.messageTop, 'top'),\n\t\tmessageBottom: _message(this, conf.messageBottom, 'bottom')\n\t};\n});\n\n/**\n * Get the file name for an exported file.\n *\n * @param {object}\tconfig Button configuration\n * @param {boolean} incExtension Include the file name extension\n */\nvar _filename = function (config) {\n\t// Backwards compatibility\n\tvar filename =\n\t\tconfig.filename === '*' &&\n\t\tconfig.title !== '*' &&\n\t\tconfig.title !== undefined &&\n\t\tconfig.title !== null &&\n\t\tconfig.title !== ''\n\t\t\t? config.title\n\t\t\t: config.filename;\n\n\tif (typeof filename === 'function') {\n\t\tfilename = filename();\n\t}\n\n\tif (filename === undefined || filename === null) {\n\t\treturn null;\n\t}\n\n\tif (filename.indexOf('*') !== -1) {\n\t\tfilename = filename.replace('*', $('head > title').text()).trim();\n\t}\n\n\t// Strip characters which the OS will object to\n\tfilename = filename.replace(/[^a-zA-Z0-9_\\u00A1-\\uFFFF\\.,\\-_ !\\(\\)]/g, '');\n\n\tvar extension = _stringOrFunction(config.extension);\n\tif (!extension) {\n\t\textension = '';\n\t}\n\n\treturn filename + extension;\n};\n\n/**\n * Simply utility method to allow parameters to be given as a function\n *\n * @param {undefined|string|function} option Option\n * @return {null|string} Resolved value\n */\nvar _stringOrFunction = function (option) {\n\tif (option === null || option === undefined) {\n\t\treturn null;\n\t}\n\telse if (typeof option === 'function') {\n\t\treturn option();\n\t}\n\treturn option;\n};\n\n/**\n * Get the title for an exported file.\n *\n * @param {object} config\tButton configuration\n */\nvar _title = function (config) {\n\tvar title = _stringOrFunction(config.title);\n\n\treturn title === null\n\t\t? null\n\t\t: title.indexOf('*') !== -1\n\t\t? title.replace('*', $('head > title').text() || 'Exported data')\n\t\t: title;\n};\n\nvar _message = function (dt, option, position) {\n\tvar message = _stringOrFunction(option);\n\tif (message === null) {\n\t\treturn null;\n\t}\n\n\tvar caption = $('caption', dt.table().container()).eq(0);\n\tif (message === '*') {\n\t\tvar side = caption.css('caption-side');\n\t\tif (side !== position) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn caption.length ? caption.text() : '';\n\t}\n\n\treturn message;\n};\n\nvar _exportTextarea = $('<textarea/>')[0];\nvar _exportData = function (dt, inOpts) {\n\tvar config = $.extend(\n\t\ttrue,\n\t\t{},\n\t\t{\n\t\t\trows: null,\n\t\t\tcolumns: '',\n\t\t\tmodifier: {\n\t\t\t\tsearch: 'applied',\n\t\t\t\torder: 'applied'\n\t\t\t},\n\t\t\torthogonal: 'display',\n\t\t\tstripHtml: true,\n\t\t\tstripNewlines: true,\n\t\t\tdecodeEntities: true,\n\t\t\ttrim: true,\n\t\t\tformat: {\n\t\t\t\theader: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tfooter: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t},\n\t\t\t\tbody: function (d) {\n\t\t\t\t\treturn Buttons.stripData(d, config);\n\t\t\t\t}\n\t\t\t},\n\t\t\tcustomizeData: null\n\t\t},\n\t\tinOpts\n\t);\n\n\tvar header = dt\n\t\t.columns(config.columns)\n\t\t.indexes()\n\t\t.map(function (idx) {\n\t\t\tvar el = dt.column(idx).header();\n\t\t\treturn config.format.header(el.innerHTML, idx, el);\n\t\t})\n\t\t.toArray();\n\n\tvar footer = dt.table().footer()\n\t\t? dt\n\t\t\t\t.columns(config.columns)\n\t\t\t\t.indexes()\n\t\t\t\t.map(function (idx) {\n\t\t\t\t\tvar el = dt.column(idx).footer();\n\t\t\t\t\treturn config.format.footer(el ? el.innerHTML : '', idx, el);\n\t\t\t\t})\n\t\t\t\t.toArray()\n\t\t: null;\n\n\t// If Select is available on this table, and any rows are selected, limit the export\n\t// to the selected rows. If no rows are selected, all rows will be exported. Specify\n\t// a `selected` modifier to control directly.\n\tvar modifier = $.extend({}, config.modifier);\n\tif (dt.select && typeof dt.select.info === 'function' && modifier.selected === undefined) {\n\t\tif (dt.rows(config.rows, $.extend({ selected: true }, modifier)).any()) {\n\t\t\t$.extend(modifier, { selected: true });\n\t\t}\n\t}\n\n\tvar rowIndexes = dt.rows(config.rows, modifier).indexes().toArray();\n\tvar selectedCells = dt.cells(rowIndexes, config.columns);\n\tvar cells = selectedCells.render(config.orthogonal).toArray();\n\tvar cellNodes = selectedCells.nodes().toArray();\n\n\tvar columns = header.length;\n\tvar rows = columns > 0 ? cells.length / columns : 0;\n\tvar body = [];\n\tvar cellCounter = 0;\n\n\tfor (var i = 0, ien = rows; i < ien; i++) {\n\t\tvar row = [columns];\n\n\t\tfor (var j = 0; j < columns; j++) {\n\t\t\trow[j] = config.format.body(cells[cellCounter], i, j, cellNodes[cellCounter]);\n\t\t\tcellCounter++;\n\t\t}\n\n\t\tbody[i] = row;\n\t}\n\n\tvar data = {\n\t\theader: header,\n\t\tfooter: footer,\n\t\tbody: body\n\t};\n\n\tif (config.customizeData) {\n\t\tconfig.customizeData(data);\n\t}\n\n\treturn data;\n};\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * DataTables interface\n */\n\n// Attach to DataTables objects for global access\n$.fn.dataTable.Buttons = Buttons;\n$.fn.DataTable.Buttons = Buttons;\n\n// DataTables creation - check if the buttons have been defined for this table,\n// they will have been if the `B` option was used in `dom`, otherwise we should\n// create the buttons instance here so they can be inserted into the document\n// using the API. Listen for `init` for compatibility with pre 1.10.10, but to\n// be removed in future.\n$(document).on('init.dt plugin-init.dt', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar opts = settings.oInit.buttons || DataTable.defaults.buttons;\n\n\tif (opts && !settings._buttons) {\n\t\tnew Buttons(settings, opts).container();\n\t}\n});\n\nfunction _init(settings, options) {\n\tvar api = new DataTable.Api(settings);\n\tvar opts = options ? options : api.init().buttons || DataTable.defaults.buttons;\n\n\treturn new Buttons(api, opts).container();\n}\n\n// DataTables `dom` feature option\nDataTable.ext.feature.push({\n\tfnInit: _init,\n\tcFeature: 'B'\n});\n\n// DataTables 2 layout feature\nif (DataTable.ext.features) {\n\tDataTable.ext.features.register('buttons', _init);\n}\n\n\nexport default DataTable;\n","/*! DataTables jQuery UI integration\n * ©2011-2014 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n/**\n * DataTables integration for jQuery UI. This requires jQuery UI and\n * DataTables 1.10 or newer.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using jQuery UI. See https://datatables.net/manual/styling/jqueryui\n * for further information.\n */\n\nvar toolbar_prefix = 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-';\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\tdom:\n\t\t'<\"'+toolbar_prefix+'tl ui-corner-tr\"lfr>'+\n\t\t't'+\n\t\t'<\"'+toolbar_prefix+'bl ui-corner-br\"ip>'\n} );\n\n\n$.extend( DataTable.ext.classes, {\n\t\"sWrapper\":            \"dataTables_wrapper dt-jqueryui\",\n\n\t/* Full numbers paging buttons */\n\t\"sPageButton\":         \"fg-button ui-button ui-state-default\",\n\t\"sPageButtonActive\":   \"ui-state-disabled\",\n\t\"sPageButtonDisabled\": \"ui-state-disabled\",\n\n\t/* Features */\n\t\"sPaging\": \"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi \"+\n\t\t\"ui-buttonset-multi paging_\", /* Note that the type is postfixed */\n\n\t/* Scrolling */\n\t\"sScrollHead\": \"dataTables_scrollHead \"+\"ui-state-default\",\n\t\"sScrollFoot\": \"dataTables_scrollFoot \"+\"ui-state-default\",\n\n\t/* Misc */\n\t\"sHeaderTH\":  \"ui-state-default\",\n\t\"sFooterTH\":  \"ui-state-default\"\n} );\n\n\nexport default DataTable;\n","/*! DataTables 1.13.11\n * ©2008-2024 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\n\n// DataTables code uses $ internally, but we want to be able to\n// reassign $ with the `use` method, so it is a regular var.\nvar $ = jQuery;\n\n\nvar DataTable = function ( selector, options )\n{\n\t// Check if called with a window or jQuery object for DOM less applications\n\t// This is for backwards compatibility\n\tif (DataTable.factory(selector, options)) {\n\t\treturn DataTable;\n\t}\n\n\t// When creating with `new`, create a new DataTable, returning the API instance\n\tif (this instanceof DataTable) {\n\t\treturn $(selector).DataTable(options);\n\t}\n\telse {\n\t\t// Argument switching\n\t\toptions = selector;\n\t}\n\n\t/**\n\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t * return the resulting jQuery object.\n\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t *    'original' whereby the original order the data was read into the table is used.\n\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t *  @returns {object} jQuery object, filtered by the given selector.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Highlight every second row\n\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t *    } );\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t *      oTable.fnFilter('Webkit');\n\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t *      oTable.fnFilter('');\n\t *    } );\n\t */\n\tthis.$ = function ( sSelector, oOpts )\n\t{\n\t\treturn this.api(true).$( sSelector, oOpts );\n\t};\n\t\n\t\n\t/**\n\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t * rows are found, the data returned is the original data array/object that was used to\n\t * create the row (or a generated array if from a DOM source).\n\t *\n\t * This method is often useful in-combination with $ where both functions are given the\n\t * same parameters and the array indexes will match identically.\n\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t *    'original' whereby the original order the data was read into the table is used.\n\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t *    entry in the array.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Get the data from the first row in the table\n\t *      var data = oTable._('tr:first');\n\t *\n\t *      // Do something useful with the data\n\t *      alert( \"First cell is: \"+data[0] );\n\t *    } );\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Filter to 'Webkit' and get all data for\n\t *      oTable.fnFilter('Webkit');\n\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t *\n\t *      // Do something with the data\n\t *      alert( data.length+\" rows matched the search\" );\n\t *    } );\n\t */\n\tthis._ = function ( sSelector, oOpts )\n\t{\n\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t};\n\t\n\t\n\t/**\n\t * Create a DataTables Api instance, with the currently selected tables for\n\t * the Api's context.\n\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t *   or if all tables captured in the jQuery object should be used.\n\t * @return {DataTables.Api}\n\t */\n\tthis.api = function ( traditional )\n\t{\n\t\treturn traditional ?\n\t\t\tnew _Api(\n\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t) :\n\t\t\tnew _Api( this );\n\t};\n\t\n\t\n\t/**\n\t * Add a single new row or multiple rows of data to the table. Please note\n\t * that this is suitable for client-side processing only - if you are using\n\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t *  @param {array|object} data The data to be added to the table. This can be:\n\t *    <ul>\n\t *      <li>1D array of data - add a single row with the data provided</li>\n\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t *      <li>object - data object when using <i>mData</i></li>\n\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t *    </ul>\n\t *  @param {bool} [redraw=true] redraw the table or not\n\t *  @returns {array} An array of integers, representing the list of indexes in\n\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t *    the table.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    // Global var for counter\n\t *    var giCount = 2;\n\t *\n\t *    $(document).ready(function() {\n\t *      $('#example').dataTable();\n\t *    } );\n\t *\n\t *    function fnClickAddRow() {\n\t *      $('#example').dataTable().fnAddData( [\n\t *        giCount+\".1\",\n\t *        giCount+\".2\",\n\t *        giCount+\".3\",\n\t *        giCount+\".4\" ]\n\t *      );\n\t *\n\t *      giCount++;\n\t *    }\n\t */\n\tthis.fnAddData = function( data, redraw )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\t/* Check if we want to add multiple rows or not */\n\t\tvar rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\tapi.rows.add( data ) :\n\t\t\tapi.row.add( data );\n\t\n\t\tif ( redraw === undefined || redraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\n\t\treturn rows.flatten().toArray();\n\t};\n\t\n\t\n\t/**\n\t * This function will make DataTables recalculate the column sizes, based on the data\n\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t * through the sWidth parameter). This can be useful when the width of the table's\n\t * parent element changes (for example a window resize).\n\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable( {\n\t *        \"sScrollY\": \"200px\",\n\t *        \"bPaginate\": false\n\t *      } );\n\t *\n\t *      $(window).on('resize', function () {\n\t *        oTable.fnAdjustColumnSizing();\n\t *      } );\n\t *    } );\n\t */\n\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t{\n\t\tvar api = this.api( true ).columns.adjust();\n\t\tvar settings = api.settings()[0];\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw( false );\n\t\t}\n\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Quickly and simply clear a table\n\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t *      oTable.fnClearTable();\n\t *    } );\n\t */\n\tthis.fnClearTable = function( bRedraw )\n\t{\n\t\tvar api = this.api( true ).clear();\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t * are currently 'open'.\n\t *  @param {node} nTr the table row to 'close'\n\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable;\n\t *\n\t *      // 'open' an information row when a row is clicked on\n\t *      $('#example tbody tr').click( function () {\n\t *        if ( oTable.fnIsOpen(this) ) {\n\t *          oTable.fnClose( this );\n\t *        } else {\n\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t *        }\n\t *      } );\n\t *\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnClose = function( nTr )\n\t{\n\t\tthis.api( true ).row( nTr ).child.hide();\n\t};\n\t\n\t\n\t/**\n\t * Remove a row for the table\n\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t *    the TR element you want to delete\n\t *  @param {function|null} [callBack] Callback function\n\t *  @param {bool} [redraw=true] Redraw the table or not\n\t *  @returns {array} The row that was deleted\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Immediately remove the first row\n\t *      oTable.fnDeleteRow( 0 );\n\t *    } );\n\t */\n\tthis.fnDeleteRow = function( target, callback, redraw )\n\t{\n\t\tvar api = this.api( true );\n\t\tvar rows = api.rows( target );\n\t\tvar settings = rows.settings()[0];\n\t\tvar data = settings.aoData[ rows[0][0] ];\n\t\n\t\trows.remove();\n\t\n\t\tif ( callback ) {\n\t\t\tcallback.call( this, settings, data );\n\t\t}\n\t\n\t\tif ( redraw === undefined || redraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\n\t\treturn data;\n\t};\n\t\n\t\n\t/**\n\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t *      var oTable = $('#example').dataTable();\n\t *      oTable.fnDestroy();\n\t *    } );\n\t */\n\tthis.fnDestroy = function ( remove )\n\t{\n\t\tthis.api( true ).destroy( remove );\n\t};\n\t\n\t\n\t/**\n\t * Redraw the table\n\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t *      oTable.fnDraw();\n\t *    } );\n\t */\n\tthis.fnDraw = function( complete )\n\t{\n\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t// into account the new data, but can hold position.\n\t\tthis.api( true ).draw( complete );\n\t};\n\t\n\t\n\t/**\n\t * Filter the input based on data\n\t *  @param {string} sInput String to filter the table on\n\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Sometime later - filter...\n\t *      oTable.fnFilter( 'test string' );\n\t *    } );\n\t */\n\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t}\n\t\telse {\n\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t}\n\t\n\t\tapi.draw();\n\t};\n\t\n\t\n\t/**\n\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t * provided parameters.\n\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t *  @param {int} [col] Optional column index that you want the data of.\n\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t *    defined, only data for the designated cell is returned.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    // Row data\n\t *    $(document).ready(function() {\n\t *      oTable = $('#example').dataTable();\n\t *\n\t *      oTable.$('tr').click( function () {\n\t *        var data = oTable.fnGetData( this );\n\t *        // ... do something with the array / object of data for the row\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Individual cell data\n\t *    $(document).ready(function() {\n\t *      oTable = $('#example').dataTable();\n\t *\n\t *      oTable.$('td').click( function () {\n\t *        var sData = oTable.fnGetData( this );\n\t *        alert( 'The cell clicked on had the value of '+sData );\n\t *      } );\n\t *    } );\n\t */\n\tthis.fnGetData = function( src, col )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( src !== undefined ) {\n\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\t\n\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\tapi.row( src ).data() || null;\n\t\t}\n\t\n\t\treturn api.data().toArray();\n\t};\n\t\n\t\n\t/**\n\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t * typically want to use the '$' API method in preference to this as it is more\n\t * flexible.\n\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Get the nodes from the table\n\t *      var nNodes = oTable.fnGetNodes( );\n\t *    } );\n\t */\n\tthis.fnGetNodes = function( iRow )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\treturn iRow !== undefined ?\n\t\t\tapi.row( iRow ).node() :\n\t\t\tapi.rows().nodes().flatten().toArray();\n\t};\n\t\n\t\n\t/**\n\t * Get the array indexes of a particular cell from it's DOM element\n\t * and column index including hidden columns\n\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t *    if given as a cell, an array of [row index, column index (visible),\n\t *    column index (all)] is given.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      $('#example tbody td').click( function () {\n\t *        // Get the position of the current data from the node\n\t *        var aPos = oTable.fnGetPosition( this );\n\t *\n\t *        // Get the data array for this row\n\t *        var aData = oTable.fnGetData( aPos[0] );\n\t *\n\t *        // Update the data array and return the value\n\t *        aData[ aPos[1] ] = 'clicked';\n\t *        this.innerHTML = 'clicked';\n\t *      } );\n\t *\n\t *      // Init DataTables\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnGetPosition = function( node )\n\t{\n\t\tvar api = this.api( true );\n\t\tvar nodeName = node.nodeName.toUpperCase();\n\t\n\t\tif ( nodeName == 'TR' ) {\n\t\t\treturn api.row( node ).index();\n\t\t}\n\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\tvar cell = api.cell( node ).index();\n\t\n\t\t\treturn [\n\t\t\t\tcell.row,\n\t\t\t\tcell.columnVisible,\n\t\t\t\tcell.column\n\t\t\t];\n\t\t}\n\t\treturn null;\n\t};\n\t\n\t\n\t/**\n\t * Check to see if a row is 'open' or not.\n\t *  @param {node} nTr the table row to check\n\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable;\n\t *\n\t *      // 'open' an information row when a row is clicked on\n\t *      $('#example tbody tr').click( function () {\n\t *        if ( oTable.fnIsOpen(this) ) {\n\t *          oTable.fnClose( this );\n\t *        } else {\n\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t *        }\n\t *      } );\n\t *\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnIsOpen = function( nTr )\n\t{\n\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t};\n\t\n\t\n\t/**\n\t * This function will place a new row directly after a row which is currently\n\t * on display on the page, with the HTML contents that is passed into the\n\t * function. This can be used, for example, to ask for confirmation that a\n\t * particular record should be deleted.\n\t *  @param {node} nTr The table row to 'open'\n\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t *  @param {string} sClass Class to give the new TD cell\n\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t *    first parameter, is not found in the table, this method will silently\n\t *    return.\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable;\n\t *\n\t *      // 'open' an information row when a row is clicked on\n\t *      $('#example tbody tr').click( function () {\n\t *        if ( oTable.fnIsOpen(this) ) {\n\t *          oTable.fnClose( this );\n\t *        } else {\n\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t *        }\n\t *      } );\n\t *\n\t *      oTable = $('#example').dataTable();\n\t *    } );\n\t */\n\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t{\n\t\treturn this.api( true )\n\t\t\t.row( nTr )\n\t\t\t.child( mHtml, sClass )\n\t\t\t.show()\n\t\t\t.child()[0];\n\t};\n\t\n\t\n\t/**\n\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t * function. With this function you can have a DataTables table go to the next,\n\t * previous, first or last pages.\n\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      oTable.fnPageChange( 'next' );\n\t *    } );\n\t */\n\tthis.fnPageChange = function ( mAction, bRedraw )\n\t{\n\t\tvar api = this.api( true ).page( mAction );\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw(false);\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Show a particular column\n\t *  @param {int} iCol The column whose display should be changed\n\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Hide the second column after initialisation\n\t *      oTable.fnSetColumnVis( 1, false );\n\t *    } );\n\t */\n\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t{\n\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.columns.adjust().draw();\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the settings for a particular table for external manipulation\n\t *  @returns {object} DataTables settings object. See\n\t *    {@link DataTable.models.oSettings}\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      var oSettings = oTable.fnSettings();\n\t *\n\t *      // Show an example parameter from the settings\n\t *      alert( oSettings._iDisplayStart );\n\t *    } );\n\t */\n\tthis.fnSettings = function()\n\t{\n\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t};\n\t\n\t\n\t/**\n\t * Sort the table by a particular column\n\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t *    'display index' if you have hidden data entries\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Sort immediately with columns 0 and 1\n\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t *    } );\n\t */\n\tthis.fnSort = function( aaSort )\n\t{\n\t\tthis.api( true ).order( aaSort ).draw();\n\t};\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *  @param {node} nNode the element to attach the sort listener to\n\t *  @param {int} iColumn the column that a click on this node will sort on\n\t *  @param {function} [fnCallback] callback function when sort is run\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *\n\t *      // Sort on column 1, when 'sorter' is clicked on\n\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t *    } );\n\t */\n\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t{\n\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t};\n\t\n\t\n\t/**\n\t * Update a table cell or row - this method will accept either a single value to\n\t * update the cell with, an array of values with one element for each column or\n\t * an object in the same format as the original data source. The function is\n\t * self-referencing in order to make the multi column updates easier.\n\t *  @param {object|array|string} mData Data to update the cell/row with\n\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t *    update a whole row.\n\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t *  @returns {int} 0 on success, 1 on error\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t *    } );\n\t */\n\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t{\n\t\tvar api = this.api( true );\n\t\n\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\tapi.row( mRow ).data( mData );\n\t\t}\n\t\telse {\n\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t}\n\t\n\t\tif ( bAction === undefined || bAction ) {\n\t\t\tapi.columns.adjust();\n\t\t}\n\t\n\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\tapi.draw();\n\t\t}\n\t\treturn 0;\n\t};\n\t\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t * to ensure compatibility.\n\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t *    version, or false if this version of DataTales is not suitable\n\t *  @method\n\t *  @dtopt API\n\t *  @deprecated Since v1.10\n\t *\n\t *  @example\n\t *    $(document).ready(function() {\n\t *      var oTable = $('#example').dataTable();\n\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t *    } );\n\t */\n\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\t\n\n\tvar _that = this;\n\tvar emptyInit = options === undefined;\n\tvar len = this.length;\n\n\tif ( emptyInit ) {\n\t\toptions = {};\n\t}\n\n\tthis.oApi = this.internal = _ext.internal;\n\n\t// Extend with old style plug-in API methods\n\tfor ( var fn in DataTable.ext.internal ) {\n\t\tif ( fn ) {\n\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t}\n\t}\n\n\tthis.each(function() {\n\t\t// For each initialisation we want to give it a clean initialisation\n\t\t// object that can be bashed around\n\t\tvar o = {};\n\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t_fnExtend( o, options, true ) :\n\t\t\toptions;\n\n\t\t/*global oInit,_that,emptyInit*/\n\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\tvar sId = this.getAttribute( 'id' );\n\t\tvar bInitHandedOff = false;\n\t\tvar defaults = DataTable.defaults;\n\t\tvar $this = $(this);\n\t\t\n\t\t\n\t\t/* Sanity check */\n\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t{\n\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t/* Backwards compatibility for the defaults */\n\t\t_fnCompatOpts( defaults );\n\t\t_fnCompatCols( defaults.column );\n\t\t\n\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\n\t\t/* Setting up the initialisation object */\n\t\t_fnCamelToHungarian( defaults, $.extend( oInit, $this.data() ), true );\n\t\t\n\t\t\n\t\t\n\t\t/* Check to see if we are re-initialising a table */\n\t\tvar allSettings = DataTable.settings;\n\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar s = allSettings[i];\n\t\t\n\t\t\t/* Base check on table node */\n\t\t\tif (\n\t\t\t\ts.nTable == this ||\n\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t) {\n\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\n\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t{\n\t\t\t\t\treturn s.oInstance;\n\t\t\t\t}\n\t\t\t\telse if ( bDestroy )\n\t\t\t\t{\n\t\t\t\t\ts.oInstance.fnDestroy();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t */\n\t\t\tif ( s.sTableId == this.id )\n\t\t\t{\n\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* Ensure the table has an ID - required for accessibility */\n\t\tif ( sId === null || sId === \"\" )\n\t\t{\n\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\tthis.id = sId;\n\t\t}\n\t\t\n\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\"sInstance\":     sId,\n\t\t\t\"sTableId\":      sId\n\t\t} );\n\t\toSettings.nTable = this;\n\t\toSettings.oApi   = _that.internal;\n\t\toSettings.oInit  = oInit;\n\t\t\n\t\tallSettings.push( oSettings );\n\t\t\n\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\n\t\t// Backwards compatibility, before we apply all the defaults\n\t\t_fnCompatOpts( oInit );\n\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\n\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t{\n\t\t\toInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t}\n\t\t\n\t\t// Apply the defaults and init options to make a single init object will all\n\t\t// options defined from defaults and instance options.\n\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\n\t\t\n\t\t// Map the initialisation options onto the settings object\n\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\"bPaginate\",\n\t\t\t\"bLengthChange\",\n\t\t\t\"bFilter\",\n\t\t\t\"bSort\",\n\t\t\t\"bSortMulti\",\n\t\t\t\"bInfo\",\n\t\t\t\"bProcessing\",\n\t\t\t\"bAutoWidth\",\n\t\t\t\"bSortClasses\",\n\t\t\t\"bServerSide\",\n\t\t\t\"bDeferRender\"\n\t\t] );\n\t\t_fnMap( oSettings, oInit, [\n\t\t\t\"asStripeClasses\",\n\t\t\t\"ajax\",\n\t\t\t\"fnServerData\",\n\t\t\t\"fnFormatNumber\",\n\t\t\t\"sServerMethod\",\n\t\t\t\"aaSorting\",\n\t\t\t\"aaSortingFixed\",\n\t\t\t\"aLengthMenu\",\n\t\t\t\"sPaginationType\",\n\t\t\t\"sAjaxSource\",\n\t\t\t\"sAjaxDataProp\",\n\t\t\t\"iStateDuration\",\n\t\t\t\"sDom\",\n\t\t\t\"bSortCellsTop\",\n\t\t\t\"iTabIndex\",\n\t\t\t\"fnStateLoadCallback\",\n\t\t\t\"fnStateSaveCallback\",\n\t\t\t\"renderer\",\n\t\t\t\"searchDelay\",\n\t\t\t\"rowId\",\n\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\n\t\t/* Callback functions which are array driven */\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\t\t\n\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\n\t\t/* Browser support detection */\n\t\t_fnBrowserDetect( oSettings );\n\t\t\n\t\tvar oClasses = oSettings.oClasses;\n\t\t\n\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t$this.addClass( oClasses.sTable );\n\t\t\n\t\t\n\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t{\n\t\t\t/* Display start point, taking into account the save saving */\n\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t}\n\t\t\n\t\tif ( oInit.iDeferLoading !== null )\n\t\t{\n\t\t\toSettings.bDeferLoading = true;\n\t\t\tvar tmp = Array.isArray( oInit.iDeferLoading );\n\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t}\n\t\t\n\t\t/* Language definitions */\n\t\tvar oLanguage = oSettings.oLanguage;\n\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\n\t\tif ( oLanguage.sUrl )\n\t\t{\n\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t */\n\t\t\t$.ajax( {\n\t\t\t\tdataType: 'json',\n\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\n\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t},\n\t\t\t\terror: function () {\n\t\t\t\t\t// Error occurred loading language file, continue on as best we can\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tbInitHandedOff = true;\n\t\t}\n\t\telse {\n\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings]);\n\t\t}\n\t\t\n\t\t/*\n\t\t * Stripes\n\t\t */\n\t\tif ( oInit.asStripeClasses === null )\n\t\t{\n\t\t\toSettings.asStripeClasses =[\n\t\t\t\toClasses.sStripeOdd,\n\t\t\t\toClasses.sStripeEven\n\t\t\t];\n\t\t}\n\t\t\n\t\t/* Remove row stripe classes if they are already on the table row */\n\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\tvar rowOne = $this.children('tbody').find('tr').eq(0);\n\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\treturn rowOne.hasClass(el);\n\t\t} ) ) !== -1 ) {\n\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t}\n\t\t\n\t\t/*\n\t\t * Columns\n\t\t * See if we should load columns automatically or use defined ones\n\t\t */\n\t\tvar anThs = [];\n\t\tvar aoColumnsInit;\n\t\tvar nThead = this.getElementsByTagName('thead');\n\t\tif ( nThead.length !== 0 )\n\t\t{\n\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t}\n\t\t\n\t\t/* If not given a column array, generate one with nulls */\n\t\tif ( oInit.aoColumns === null )\n\t\t{\n\t\t\taoColumnsInit = [];\n\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\taoColumnsInit.push( null );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t}\n\t\t\n\t\t/* Add the columns */\n\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t}\n\t\t\n\t\t/* Apply the column definitions */\n\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t} );\n\t\t\n\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t * attributes are found\n\t\t */\n\t\tif ( rowOne.length ) {\n\t\t\tvar a = function ( cell, name ) {\n\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t};\n\t\t\n\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\n\t\t\t\tif (! col) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\t\n\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\n\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\n\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\t\n\t\tvar features = oSettings.oFeatures;\n\t\tvar loadedInit = function () {\n\t\t\t/*\n\t\t\t * Sorting\n\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t */\n\t\t\n\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t */\n\t\t\t_fnSortingClasses( oSettings );\n\t\t\n\t\t\tif ( features.bSort ) {\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\tvar sortedColumns = {};\n\t\t\n\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t}\n\t\t\t}, 'sc' );\n\t\t\n\t\t\n\t\t\t/*\n\t\t\t * Final init\n\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t */\n\t\t\n\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\tvar captions = $this.children('caption').each( function () {\n\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t} );\n\t\t\n\t\t\tvar thead = $this.children('thead');\n\t\t\tif ( thead.length === 0 ) {\n\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t}\n\t\t\toSettings.nTHead = thead[0];\n\t\t\n\t\t\tvar tbody = $this.children('tbody');\n\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t}\n\t\t\toSettings.nTBody = tbody[0];\n\t\t\n\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") ) {\n\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t}\n\t\t\n\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t$this.addClass( oClasses.sNoFooter );\n\t\t\t}\n\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t}\n\t\t\n\t\t\t/* Check if there is data passing into the constructor */\n\t\t\tif ( oInit.aaData ) {\n\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ ) {\n\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' ) {\n\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t * to replace it with Ajax data\n\t\t\t\t */\n\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t}\n\t\t\n\t\t\t/* Copy the data index array */\n\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\n\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\toSettings.bInitialised = true;\n\t\t\n\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t * language processor)\n\t\t\t */\n\t\t\tif ( bInitHandedOff === false ) {\n\t\t\t\t_fnInitialise( oSettings );\n\t\t\t}\n\t\t};\n\t\t\n\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\n\t\tif ( oInit.bStateSave )\n\t\t{\n\t\t\tfeatures.bStateSave = true;\n\t\t\t_fnLoadState( oSettings, oInit, loadedInit );\n\t\t}\n\t\telse {\n\t\t\tloadedInit();\n\t\t}\n\t\t\n\t} );\n\t_that = null;\n\treturn this;\n};\n\n\n/*\n * It is useful to have variables which are scoped locally so only the\n * DataTables functions can access them and they don't leak into global space.\n * At the same time these functions are often useful over multiple files in the\n * core and API, so we list, or at least document, all variables which are used\n * by DataTables as private variables here. This also ensures that there is no\n * clashing of variable names and that they can easily referenced for reuse.\n */\n\n\n// Defined else where\n//  _selector_run\n//  _selector_opts\n//  _selector_first\n//  _selector_row_indexes\n\nvar _ext; // DataTable.ext\nvar _Api; // DataTable.Api\nvar _api_register; // DataTable.Api.register\nvar _api_registerPlural; // DataTable.Api.registerPlural\n\nvar _re_dic = {};\nvar _re_new_lines = /[\\r\\n\\u2028]/g;\nvar _re_html = /<.*?>/g;\n\n// This is not strict ISO8601 - Date.parse() is quite lax, although\n// implementations differ between browsers.\nvar _re_date = /^\\d{2,4}[\\.\\/\\-]\\d{1,2}[\\.\\/\\-]\\d{1,2}([T ]{1}\\d{1,2}[:\\.]\\d{2}([\\.:]\\d{2})?)?$/;\n\n// Escape regular expression special characters\nvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\n// https://en.wikipedia.org/wiki/Foreign_exchange_market\n// - \\u20BD - Russian ruble.\n// - \\u20a9 - South Korean Won\n// - \\u20BA - Turkish Lira\n// - \\u20B9 - Indian Rupee\n// - R - Brazil (R$) and South Africa\n// - fr - Swiss Franc\n// - kr - Swedish krona, Norwegian krone and Danish krone\n// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n// - Ƀ - Bitcoin\n// - Ξ - Ethereum\n//   standards as thousands separators.\nvar _re_formatted_numeric = /['\\u00A0,$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfkɃΞ]/gi;\n\n\nvar _empty = function ( d ) {\n\treturn !d || d === true || d === '-' ? true : false;\n};\n\n\nvar _intVal = function ( s ) {\n\tvar integer = parseInt( s, 10 );\n\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n};\n\n// Convert from a formatted number with characters other than `.` as the\n// decimal place, to a Javascript number\nvar _numToDecimal = function ( num, decimalPoint ) {\n\t// Cache created regular expressions for speed as this function is called often\n\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t}\n\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\tnum;\n};\n\n\nvar _isNumber = function ( d, decimalPoint, formatted ) {\n\tvar type = typeof d;\n\tvar strType = type === 'string';\n\n\tif ( type === 'number' || type === 'bigint') {\n\t\treturn true;\n\t}\n\n\t// If empty return immediately so there must be a number if it is a\n\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t// as a formatted number for currency\n\tif ( _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\tif ( decimalPoint && strType ) {\n\t\td = _numToDecimal( d, decimalPoint );\n\t}\n\n\tif ( formatted && strType ) {\n\t\td = d.replace( _re_formatted_numeric, '' );\n\t}\n\n\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n};\n\n\n// A string without HTML in it can be considered to be HTML still\nvar _isHtml = function ( d ) {\n\treturn _empty( d ) || typeof d === 'string';\n};\n\n\nvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\tif ( _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\tvar html = _isHtml( d );\n\treturn ! html ?\n\t\tnull :\n\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\ttrue :\n\t\t\tnull;\n};\n\n\nvar _pluck = function ( a, prop, prop2 ) {\n\tvar out = [];\n\tvar i=0, ien=a.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[i] ) {\n\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\n// Basically the same as _pluck, but rather than looping over `a` we use `order`\n// as the indexes to pick from `a`\nvar _pluck_order = function ( a, order, prop, prop2 )\n{\n\tvar out = [];\n\tvar i=0, ien=order.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tif ( a[ order[i] ][ prop ] ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<ien ; i++ ) {\n\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\nvar _range = function ( len, start )\n{\n\tvar out = [];\n\tvar end;\n\n\tif ( start === undefined ) {\n\t\tstart = 0;\n\t\tend = len;\n\t}\n\telse {\n\t\tend = start;\n\t\tstart = len;\n\t}\n\n\tfor ( var i=start ; i<end ; i++ ) {\n\t\tout.push( i );\n\t}\n\n\treturn out;\n};\n\n\nvar _removeEmpty = function ( a )\n{\n\tvar out = [];\n\n\tfor ( var i=0, ien=a.length ; i<ien ; i++ ) {\n\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\tout.push( a[i] );\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\nvar _stripHtml = function ( d ) {\n\treturn d\n\t\t.replace( _re_html, '' ) // Complete tags\n\t\t.replace(/<script/i, ''); // Safety for incomplete script tag\n};\n\n\n/**\n * Determine if all values in the array are unique. This means we can short\n * cut the _unique method at the cost of a single loop. A sorted array is used\n * to easily check the values.\n *\n * @param  {array} src Source array\n * @return {boolean} true if all unique, false otherwise\n * @ignore\n */\nvar _areAllUnique = function ( src ) {\n\tif ( src.length < 2 ) {\n\t\treturn true;\n\t}\n\n\tvar sorted = src.slice().sort();\n\tvar last = sorted[0];\n\n\tfor ( var i=1, ien=sorted.length ; i<ien ; i++ ) {\n\t\tif ( sorted[i] === last ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlast = sorted[i];\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Find the unique elements in a source array.\n *\n * @param  {array} src Source array\n * @return {array} Array of unique items\n * @ignore\n */\nvar _unique = function ( src )\n{\n\tif ( _areAllUnique( src ) ) {\n\t\treturn src.slice();\n\t}\n\n\t// A faster unique method is to use object keys to identify used values,\n\t// but this doesn't work with arrays or objects, which we must also\n\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t// information.\n\tvar\n\t\tout = [],\n\t\tval,\n\t\ti, ien=src.length,\n\t\tj, k=0;\n\n\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\tval = src[i];\n\n\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\tif ( out[j] === val ) {\n\t\t\t\tcontinue again;\n\t\t\t}\n\t\t}\n\n\t\tout.push( val );\n\t\tk++;\n\t}\n\n\treturn out;\n};\n\n// Surprisingly this is faster than [].concat.apply\n// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\nvar _flatten = function (out, val) {\n\tif (Array.isArray(val)) {\n\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t_flatten(out, val[i]);\n\t\t}\n\t}\n\telse {\n\t\tout.push(val);\n\t}\n  \n\treturn out;\n}\n\nvar _includes = function (search, start) {\n\tif (start === undefined) {\n\t\tstart = 0;\n\t}\n\n\treturn this.indexOf(search, start) !== -1;\t\n};\n\n// Array.isArray polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (! Array.isArray) {\n    Array.isArray = function(arg) {\n        return Object.prototype.toString.call(arg) === '[object Array]';\n    };\n}\n\nif (! Array.prototype.includes) {\n\tArray.prototype.includes = _includes;\n}\n\n// .trim() polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim\nif (!String.prototype.trim) {\n  String.prototype.trim = function () {\n    return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n  };\n}\n\nif (! String.prototype.includes) {\n\tString.prototype.includes = _includes;\n}\n\n/**\n * DataTables utility methods\n * \n * This namespace provides helper methods that DataTables uses internally to\n * create a DataTable, but which are not exclusively used only for DataTables.\n * These methods can be used by extension authors to save the duplication of\n * code.\n *\n *  @namespace\n */\nDataTable.util = {\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained\n\t * for the throttled function.\n\t *\n\t * @param {function} fn Function to be called\n\t * @param {integer} freq Call frequency in mS\n\t * @return {function} Wrapped function\n\t */\n\tthrottle: function ( fn, freq ) {\n\t\tvar\n\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\tlast,\n\t\t\ttimer;\n\n\t\treturn function () {\n\t\t\tvar\n\t\t\t\tthat = this,\n\t\t\t\tnow  = +new Date(),\n\t\t\t\targs = arguments;\n\n\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\tclearTimeout( timer );\n\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tlast = undefined;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}, frequency );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast = now;\n\t\t\t\tfn.apply( that, args );\n\t\t\t}\n\t\t};\n\t},\n\n\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *\n\t *  @param {string} val string to escape\n\t *  @returns {string} escaped string\n\t */\n\tescapeRegex: function ( val ) {\n\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t},\n\n\t/**\n\t * Create a function that will write to a nested object or array\n\t * @param {*} source JSON notation string\n\t * @returns Write function\n\t */\n\tset: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t * for `mRender` which is read only.\n\t\t\t */\n\t\t\treturn DataTable.util.set( source._ );\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Nothing to do when the data source is null\n\t\t\treturn function () {};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, val, meta) {\n\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t{\n\t\t\t// Like the get, we need to get data from a nested object\n\t\t\tvar setData = function (data, val, src) {\n\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\n\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\n\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\n\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t}\n\t\n\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t// Function call\n\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\treturn setData( data, val, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\tdata[source] = val;\n\t\t\t};\n\t\t}\n\t},\n\n\t/**\n\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t * @param {*} source JSON notation string\n\t * @returns Value read\n\t */\n\tget: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\tvar o = {};\n\t\t\t$.each( source, function (key, val) {\n\t\t\t\tif ( val ) {\n\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\tvar t = o[type] || o._;\n\t\t\t\treturn t !== undefined ?\n\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\tdata;\n\t\t\t};\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\treturn data;\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\treturn source( data, type, row, meta );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\t  source.indexOf('[') !== -1 || source.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t * be used if defined, rather than throwing an error\n\t\t\t */\n\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\n\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\n\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tout = [];\n\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\n\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\n\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn fetchData( data, type, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn data[source];\n\t\t\t};\n\t\t}\n\t}\n};\n\n\n\n/**\n * Create a mapping object that allows camel case parameters to be looked up\n * for their Hungarian counterparts. The mapping is stored in a private\n * parameter called `_hungarianMap` which can be accessed on the source object.\n *  @param {object} o\n *  @memberof DataTable#oApi\n */\nfunction _fnHungarianMap ( o )\n{\n\tvar\n\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\tmatch,\n\t\tnewKey,\n\t\tmap = {};\n\n\t$.each( o, function (key, val) {\n\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\n\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t{\n\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\tmap[ newKey ] = key;\n\n\t\t\tif ( match[1] === 'o' )\n\t\t\t{\n\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t}\n\t\t}\n\t} );\n\n\to._hungarianMap = map;\n}\n\n\n/**\n * Convert from camel case parameters to Hungarian, based on a Hungarian map\n * created by _fnHungarianMap.\n *  @param {object} src The model object which holds all parameters that can be\n *    mapped.\n *  @param {object} user The object to convert from camel case to Hungarian.\n *  @param {boolean} force When set to `true`, properties which already have a\n *    Hungarian value in the `user` object will be overwritten. Otherwise they\n *    won't be.\n *  @memberof DataTable#oApi\n */\nfunction _fnCamelToHungarian ( src, user, force )\n{\n\tif ( ! src._hungarianMap ) {\n\t\t_fnHungarianMap( src );\n\t}\n\n\tvar hungarianKey;\n\n\t$.each( user, function (key, val) {\n\t\thungarianKey = src._hungarianMap[ key ];\n\n\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t{\n\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t{\n\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\n\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t}\n\t\t}\n\t} );\n}\n\n\n/**\n * Language compatibility - when certain options are given, and others aren't, we\n * need to duplicate the values over, in order to provide backwards compatibility\n * with older language files.\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnLanguageCompat( lang )\n{\n\t// Note the use of the Hungarian notation for the parameters in this method as\n\t// this is called after the mapping of camelCase to Hungarian\n\tvar defaults = DataTable.defaults.oLanguage;\n\n\t// Default mapping\n\tvar defaultDecimal = defaults.sDecimal;\n\tif ( defaultDecimal ) {\n\t\t_addNumericSort( defaultDecimal );\n\t}\n\n\tif ( lang ) {\n\t\tvar zeroRecords = lang.sZeroRecords;\n\n\t\t// Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t// sZeroRecords - assuming that is given.\n\t\tif ( ! lang.sEmptyTable && zeroRecords &&\n\t\t\tdefaults.sEmptyTable === \"No data available in table\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sEmptyTable' );\n\t\t}\n\n\t\t// Likewise with loading records\n\t\tif ( ! lang.sLoadingRecords && zeroRecords &&\n\t\t\tdefaults.sLoadingRecords === \"Loading...\" )\n\t\t{\n\t\t\t_fnMap( lang, lang, 'sZeroRecords', 'sLoadingRecords' );\n\t\t}\n\n\t\t// Old parameter name of the thousands separator mapped onto the new\n\t\tif ( lang.sInfoThousands ) {\n\t\t\tlang.sThousands = lang.sInfoThousands;\n\t\t}\n\n\t\tvar decimal = lang.sDecimal;\n\t\tif ( decimal && defaultDecimal !== decimal ) {\n\t\t\t_addNumericSort( decimal );\n\t\t}\n\t}\n}\n\n\n/**\n * Map one parameter onto another\n *  @param {object} o Object to map\n *  @param {*} knew The new parameter name\n *  @param {*} old The old parameter name\n */\nvar _fnCompatMap = function ( o, knew, old ) {\n\tif ( o[ knew ] !== undefined ) {\n\t\to[ old ] = o[ knew ];\n\t}\n};\n\n\n/**\n * Provide backwards compatibility for the main DT options. Note that the new\n * options are mapped onto the old parameters, so this is an external interface\n * change only.\n *  @param {object} init Object to map\n */\nfunction _fnCompatOpts ( init )\n{\n\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t_fnCompatMap( init, 'searching',     'bFilter' );\n\n\t// Boolean initialisation of x-scrolling\n\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t}\n\tif ( typeof init.scrollX === 'boolean' ) {\n\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t}\n\n\t// Column search objects are in an array, so it needs to be converted\n\t// element by element\n\tvar searchCols = init.aoSearchCols;\n\n\tif ( searchCols ) {\n\t\tfor ( var i=0, ien=searchCols.length ; i<ien ; i++ ) {\n\t\t\tif ( searchCols[i] ) {\n\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Provide backwards compatibility for column options. Note that the new options\n * are mapped onto the old parameters, so this is an external interface change\n * only.\n *  @param {object} init Object to map\n */\nfunction _fnCompatCols ( init )\n{\n\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\n\t// orderData can be given as an integer\n\tvar dataSort = init.aDataSort;\n\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\tinit.aDataSort = [ dataSort ];\n\t}\n}\n\n\n/**\n * Browser feature detection for capabilities, quirks\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnBrowserDetect( settings )\n{\n\t// We don't need to do this every time DataTables is constructed, the values\n\t// calculated are specific to the browser and OS configuration which we\n\t// don't expect to change between initialisations\n\tif ( ! DataTable.__browser ) {\n\t\tvar browser = {};\n\t\tDataTable.__browser = browser;\n\n\t\t// Scrolling feature / quirks detection\n\t\tvar n = $('<div/>')\n\t\t\t.css( {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: $(window).scrollLeft()*-1, // allow for scrolling\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\n\t\tvar outer = n.children();\n\t\tvar inner = outer.children();\n\n\t\t// Numbers below, in order, are:\n\t\t// inner.offsetWidth, inner.clientWidth, outer.offsetWidth, outer.clientWidth\n\t\t//\n\t\t// IE6 XP:                           100 100 100  83\n\t\t// IE7 Vista:                        100 100 100  83\n\t\t// IE 8+ Windows:                     83  83 100  83\n\t\t// Evergreen Windows:                 83  83 100  83\n\t\t// Evergreen Mac with scrollbars:     85  85 100  85\n\t\t// Evergreen Mac without scrollbars: 100 100 100 100\n\n\t\t// Get scrollbar width\n\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\n\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t// element is contained without forcing scrolling\n\t\tbrowser.bScrollOversize = inner[0].offsetWidth === 100 && outer[0].clientWidth !== 100;\n\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\n\t\t// IE8- don't provide height and width for getBoundingClientRect\n\t\tbrowser.bBounding = n[0].getBoundingClientRect().width ? true : false;\n\n\t\tn.remove();\n\t}\n\n\t$.extend( settings.oBrowser, DataTable.__browser );\n\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n}\n\n\n/**\n * Array.prototype reduce[Right] method, used for browsers which don't support\n * JS 1.6. Done this way to reduce code size, since we iterate either way\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnReduce ( that, fn, init, start, end, inc )\n{\n\tvar\n\t\ti = start,\n\t\tvalue,\n\t\tisSet = false;\n\n\tif ( init !== undefined ) {\n\t\tvalue = init;\n\t\tisSet = true;\n\t}\n\n\twhile ( i !== end ) {\n\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalue = isSet ?\n\t\t\tfn( value, that[i], i, that ) :\n\t\t\tthat[i];\n\n\t\tisSet = true;\n\t\ti += inc;\n\t}\n\n\treturn value;\n}\n\n/**\n * Add a column to the list used for the table with default values\n *  @param {object} oSettings dataTables settings object\n *  @param {node} nTh The th element for this column\n *  @memberof DataTable#oApi\n */\nfunction _fnAddColumn( oSettings, nTh )\n{\n\t// Add column to aoColumns array\n\tvar oDefaults = DataTable.defaults.column;\n\tvar iCol = oSettings.aoColumns.length;\n\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\tidx: iCol\n\t} );\n\toSettings.aoColumns.push( oCol );\n\n\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t// passed into extend can be undefined. This allows the user to give a default\n\t// with only some of the parameters defined, and also not give a default\n\tvar searchCols = oSettings.aoPreSearchCols;\n\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\n\t// Use the default column options function to initialise classes etc\n\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n}\n\n\n/**\n * Apply options for a column\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iCol column index to consider\n *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnOptions( oSettings, iCol, oOptions )\n{\n\tvar oCol = oSettings.aoColumns[ iCol ];\n\tvar oClasses = oSettings.oClasses;\n\tvar th = $(oCol.nTh);\n\n\t// Try to get width information from the DOM. We can't get it from CSS\n\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\tif ( ! oCol.sWidthOrig ) {\n\t\t// Width attribute\n\t\toCol.sWidthOrig = th.attr('width') || null;\n\n\t\t// Style attribute\n\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\tif ( t ) {\n\t\t\toCol.sWidthOrig = t[1];\n\t\t}\n\t}\n\n\t/* User specified column options */\n\tif ( oOptions !== undefined && oOptions !== null )\n\t{\n\t\t// Backwards compatibility\n\t\t_fnCompatCols( oOptions );\n\n\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\n\t\t/* Backwards compatibility for mDataProp */\n\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t{\n\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t}\n\n\t\tif ( oOptions.sType )\n\t\t{\n\t\t\toCol._sManualType = oOptions.sType;\n\t\t}\n\n\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t// the ability to use a valid name for the camel case input\n\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t{\n\t\t\toOptions.sClass = oOptions.className;\n\t\t}\n\t\tif ( oOptions.sClass ) {\n\t\t\tth.addClass( oOptions.sClass );\n\t\t}\n\n\t\tvar origClass = oCol.sClass;\n\n\t\t$.extend( oCol, oOptions );\n\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\n\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t// overwriting it in the extend above\n\t\tif (origClass !== oCol.sClass) {\n\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t}\n\n\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t * priority if defined\n\t\t */\n\t\tif ( oOptions.iDataSort !== undefined )\n\t\t{\n\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t}\n\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\n\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t// provided.\n\t\tif (! oCol.ariaTitle) {\n\t\t\toCol.ariaTitle = th.attr(\"aria-label\");\n\t\t}\n\t}\n\n\t/* Cache the data get and set functions for speed */\n\tvar mDataSrc = oCol.mData;\n\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\n\tvar attrTest = function( src ) {\n\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t};\n\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t);\n\toCol._setter = null;\n\n\toCol.fnGetData = function (rowData, type, meta) {\n\t\tvar innerData = mData( rowData, type, undefined, meta );\n\n\t\treturn mRender && type ?\n\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\tinnerData;\n\t};\n\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t};\n\n\t// Indicate if DataTables should read DOM data as an object or array\n\t// Used in _fnGetRowElements\n\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\toSettings._rowReadObject = true;\n\t}\n\n\t/* Feature sorting overrides column specific when off */\n\tif ( !oSettings.oFeatures.bSort )\n\t{\n\t\toCol.bSortable = false;\n\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t}\n\n\t/* Check that the class assignment is correct for sorting */\n\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\toCol.sSortingClassJUI = \"\";\n\t}\n\telse if ( bAsc && !bDesc )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t}\n\telse if ( !bAsc && bDesc )\n\t{\n\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t}\n\telse\n\t{\n\t\toCol.sSortingClass = oClasses.sSortable;\n\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t}\n}\n\n\n/**\n * Adjust the table column widths for new data. Note: you would probably want to\n * do a redraw after calling this function!\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnAdjustColumnSizing ( settings )\n{\n\t/* Not interested in doing column width calculation if auto-width is disabled */\n\tif ( settings.oFeatures.bAutoWidth !== false )\n\t{\n\t\tvar columns = settings.aoColumns;\n\n\t\t_fnCalculateColumnWidths( settings );\n\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t}\n\t}\n\n\tvar scroll = settings.oScroll;\n\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t{\n\t\t_fnScrollDraw( settings );\n\t}\n\n\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n}\n\n\n/**\n * Convert the index of a visible column to the index in the data array (take account\n * of hidden columns)\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iMatch Visible column index to lookup\n *  @returns {int} i the data index\n *  @memberof DataTable#oApi\n */\nfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\n\treturn typeof aiVis[iMatch] === 'number' ?\n\t\taiVis[iMatch] :\n\t\tnull;\n}\n\n\n/**\n * Convert the index of an index in the data array and convert it to the visible\n *   column index (take account of hidden columns)\n *  @param {int} iMatch Column index to lookup\n *  @param {object} oSettings dataTables settings object\n *  @returns {int} i the data index\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnIndexToVisible( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\tvar iPos = $.inArray( iMatch, aiVis );\n\n\treturn iPos !== -1 ? iPos : null;\n}\n\n\n/**\n * Get the number of visible columns\n *  @param {object} oSettings dataTables settings object\n *  @returns {int} i the number of visible columns\n *  @memberof DataTable#oApi\n */\nfunction _fnVisbleColumns( oSettings )\n{\n\tvar vis = 0;\n\n\t// No reduce in IE8, use a loop for now\n\t$.each( oSettings.aoColumns, function ( i, col ) {\n\t\tif ( col.bVisible && $(col.nTh).css('display') !== 'none' ) {\n\t\t\tvis++;\n\t\t}\n\t} );\n\n\treturn vis;\n}\n\n\n/**\n * Get an array of column indexes that match a given property\n *  @param {object} oSettings dataTables settings object\n *  @param {string} sParam Parameter in aoColumns to look for - typically\n *    bVisible or bSearchable\n *  @returns {array} Array of indexes with matched properties\n *  @memberof DataTable#oApi\n */\nfunction _fnGetColumns( oSettings, sParam )\n{\n\tvar a = [];\n\n\t$.map( oSettings.aoColumns, function(val, i) {\n\t\tif ( val[sParam] ) {\n\t\t\ta.push( i );\n\t\t}\n\t} );\n\n\treturn a;\n}\n\n\n/**\n * Calculate the 'type' of a column\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnTypes ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar data = settings.aoData;\n\tvar types = DataTable.ext.type.detect;\n\tvar i, ien, j, jen, k, ken;\n\tvar col, cell, detectedType, cache;\n\n\t// For each column, spin over the \n\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\tcol = columns[i];\n\t\tcache = [];\n\n\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\tcol.sType = col._sManualType;\n\t\t}\n\t\telse if ( ! col.sType ) {\n\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t}\n\n\t\t\t\t\tdetectedType = types[j]( cache[k], settings );\n\n\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t// types\n\t\t\t\t\tif ( ! detectedType && j !== types.length-1 ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t// must not be empty\n\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t// type\n\t\t\t\tif ( detectedType ) {\n\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fall back - if no type was detected, always use string\n\t\t\tif ( ! col.sType ) {\n\t\t\t\tcol.sType = 'string';\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Take the column definitions and static columns arrays and calculate how\n * they relate to column indexes. The callback function will then apply the\n * definition found for a column to a suitable configuration object.\n *  @param {object} oSettings dataTables settings object\n *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n *  @param {array} aoCols The aoColumns array that defines columns individually\n *  @param {function} fn Callback function - takes two parameters, the calculated\n *    column index and the definition for that column.\n *  @memberof DataTable#oApi\n */\nfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n{\n\tvar i, iLen, j, jLen, k, kLen, def;\n\tvar columns = oSettings.aoColumns;\n\n\t// Column definitions with aTargets\n\tif ( aoColDefs )\n\t{\n\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t{\n\t\t\tdef = aoColDefs[i];\n\n\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t? def.target\n\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t? def.targets\n\t\t\t\t\t: def.aTargets;\n\n\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t{\n\t\t\t\taTargets = [ aTargets ];\n\t\t\t}\n\n\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\twhile( columns.length <= aTargets[j] )\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\tfn( columns.length+aTargets[j], def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t{\n\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t     $(columns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Statically defined columns array\n\tif ( aoCols )\n\t{\n\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfn( i, aoCols[i] );\n\t\t}\n\t}\n}\n\n/**\n * Add a data array to the table, creating DOM node etc. This is the parallel to\n * _fnGatherData, but for adding rows from a Javascript source, rather than a\n * DOM source.\n *  @param {object} oSettings dataTables settings object\n *  @param {array} aData data array to be added\n *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n *    DataTables will create a row automatically\n *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n *    if nTr is.\n *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n *  @memberof DataTable#oApi\n */\nfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n{\n\t/* Create the object for storing information about this new row */\n\tvar iRow = oSettings.aoData.length;\n\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\tsrc: nTr ? 'dom' : 'data',\n\t\tidx: iRow\n\t} );\n\n\toData._aData = aDataIn;\n\toSettings.aoData.push( oData );\n\n\t/* Create the cells */\n\tvar nTd, sThisType;\n\tvar columns = oSettings.aoColumns;\n\n\t// Invalidate the column types as the new data needs to be revalidated\n\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t{\n\t\tcolumns[i].sType = null;\n\t}\n\n\t/* Add to the display array */\n\toSettings.aiDisplayMaster.push( iRow );\n\n\tvar id = oSettings.rowIdFn( aDataIn );\n\tif ( id !== undefined ) {\n\t\toSettings.aIds[ id ] = oData;\n\t}\n\n\t/* Create the DOM information, or register it if already present */\n\tif ( nTr || ! oSettings.oFeatures.bDeferRender )\n\t{\n\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t}\n\n\treturn iRow;\n}\n\n\n/**\n * Add one or more TR elements to the table. Generally we'd expect to\n * use this for reading data from a DOM sourced table, but it could be\n * used for an TR element. Note that if a TR is given, it is used (i.e.\n * it is not cloned).\n *  @param {object} settings dataTables settings object\n *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n *  @returns {array} Array of indexes for the added rows\n *  @memberof DataTable#oApi\n */\nfunction _fnAddTr( settings, trs )\n{\n\tvar row;\n\n\t// Allow an individual node to be passed in\n\tif ( ! (trs instanceof $) ) {\n\t\ttrs = $(trs);\n\t}\n\n\treturn trs.map( function (i, el) {\n\t\trow = _fnGetRowElements( settings, el );\n\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t} );\n}\n\n\n/**\n * Take a TR element and convert it to an index in aoData\n *  @param {object} oSettings dataTables settings object\n *  @param {node} n the TR element to find\n *  @returns {int} index if the node is found, null if not\n *  @memberof DataTable#oApi\n */\nfunction _fnNodeToDataIndex( oSettings, n )\n{\n\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n}\n\n\n/**\n * Take a TD element and convert it into a column data index (not the visible index)\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iRow The row number the TD/TH can be found in\n *  @param {node} n The TD/TH element to find\n *  @returns {int} index if the node is found, -1 if not\n *  @memberof DataTable#oApi\n */\nfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n{\n\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n}\n\n\n/**\n * Get the data for a given cell from the internal cache, taking into account data mapping\n *  @param {object} settings dataTables settings object\n *  @param {int} rowIdx aoData row id\n *  @param {int} colIdx Column index\n *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n *  @returns {*} Cell data\n *  @memberof DataTable#oApi\n */\nfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n{\n\tif (type === 'search') {\n\t\ttype = 'filter';\n\t}\n\telse if (type === 'order') {\n\t\ttype = 'sort';\n\t}\n\n\tvar draw           = settings.iDraw;\n\tvar col            = settings.aoColumns[colIdx];\n\tvar rowData        = settings.aoData[rowIdx]._aData;\n\tvar defaultContent = col.sDefaultContent;\n\tvar cellData       = col.fnGetData( rowData, type, {\n\t\tsettings: settings,\n\t\trow:      rowIdx,\n\t\tcol:      colIdx\n\t} );\n\n\tif ( cellData === undefined ) {\n\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\tsettings.iDrawError = draw;\n\t\t}\n\t\treturn defaultContent;\n\t}\n\n\t// When the data source is null and a specific data type is requested (i.e.\n\t// not the original data), we can use default column data\n\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\tcellData = defaultContent;\n\t}\n\telse if ( typeof cellData === 'function' ) {\n\t\t// If the data source is a function, then we run it and use the return,\n\t\t// executing in the scope of the data object (for instances)\n\t\treturn cellData.call( rowData );\n\t}\n\n\tif ( cellData === null && type === 'display' ) {\n\t\treturn '';\n\t}\n\n\tif ( type === 'filter' ) {\n\t\tvar fomatters = DataTable.ext.type.search;\n\n\t\tif ( fomatters[ col.sType ] ) {\n\t\t\tcellData = fomatters[ col.sType ]( cellData );\n\t\t}\n\t}\n\n\treturn cellData;\n}\n\n\n/**\n * Set the value for a specific cell, into the internal data cache\n *  @param {object} settings dataTables settings object\n *  @param {int} rowIdx aoData row id\n *  @param {int} colIdx Column index\n *  @param {*} val Value to set\n *  @memberof DataTable#oApi\n */\nfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n{\n\tvar col     = settings.aoColumns[colIdx];\n\tvar rowData = settings.aoData[rowIdx]._aData;\n\n\tcol.fnSetData( rowData, val, {\n\t\tsettings: settings,\n\t\trow:      rowIdx,\n\t\tcol:      colIdx\n\t}  );\n}\n\n\n// Private variable that is used to match action syntax in the data property object\nvar __reArray = /\\[.*?\\]$/;\nvar __reFn = /\\(\\)$/;\n\n/**\n * Split string on periods, taking into account escaped periods\n * @param  {string} str String to split\n * @return {array} Split string\n */\nfunction _fnSplitObjNotation( str )\n{\n\treturn $.map( str.match(/(\\\\.|[^\\.])+/g) || [''], function ( s ) {\n\t\treturn s.replace(/\\\\\\./g, '.');\n\t} );\n}\n\n\n/**\n * Return a function that can be used to get data from a source object, taking\n * into account the ability to use nested objects as a source\n *  @param {string|int|function} mSource The data source for the object\n *  @returns {function} Data get function\n *  @memberof DataTable#oApi\n */\nvar _fnGetObjectDataFn = DataTable.util.get;\n\n\n/**\n * Return a function that can be used to set data from a source object, taking\n * into account the ability to use nested objects as a source\n *  @param {string|int|function} mSource The data source for the object\n *  @returns {function} Data set function\n *  @memberof DataTable#oApi\n */\nvar _fnSetObjectDataFn = DataTable.util.set;\n\n\n/**\n * Return an array with the full table data\n *  @param {object} oSettings dataTables settings object\n *  @returns array {array} aData Master data array\n *  @memberof DataTable#oApi\n */\nfunction _fnGetDataMaster ( settings )\n{\n\treturn _pluck( settings.aoData, '_aData' );\n}\n\n\n/**\n * Nuke the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnClearTable( settings )\n{\n\tsettings.aoData.length = 0;\n\tsettings.aiDisplayMaster.length = 0;\n\tsettings.aiDisplay.length = 0;\n\tsettings.aIds = {};\n}\n\n\n /**\n * Take an array of integers (index array) and remove a target integer (value - not\n * the key!)\n *  @param {array} a Index array to target\n *  @param {int} iTarget value to find\n *  @memberof DataTable#oApi\n */\nfunction _fnDeleteIndex( a, iTarget, splice )\n{\n\tvar iTargetIndex = -1;\n\n\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t{\n\t\tif ( a[i] == iTarget )\n\t\t{\n\t\t\tiTargetIndex = i;\n\t\t}\n\t\telse if ( a[i] > iTarget )\n\t\t{\n\t\t\ta[i]--;\n\t\t}\n\t}\n\n\tif ( iTargetIndex != -1 && splice === undefined )\n\t{\n\t\ta.splice( iTargetIndex, 1 );\n\t}\n}\n\n\n/**\n * Mark cached data as invalid such that a re-read of the data will occur when\n * the cached data is next requested. Also update from the data source object.\n *\n * @param {object} settings DataTables settings object\n * @param {int}    rowIdx   Row index to invalidate\n * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n *     or 'data'\n * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n *     row will be invalidated\n * @memberof DataTable#oApi\n *\n * @todo For the modularisation of v1.11 this will need to become a callback, so\n *   the sort and filter methods can subscribe to it. That will required\n *   initialisation options for sorting, which is why it is not already baked in\n */\nfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n{\n\tvar row = settings.aoData[ rowIdx ];\n\tvar i, ien;\n\tvar cellWrite = function ( cell, col ) {\n\t\t// This is very frustrating, but in IE if you just write directly\n\t\t// to innerHTML, and elements that are overwritten are GC'ed,\n\t\t// even if there is a reference to them elsewhere\n\t\twhile ( cell.childNodes.length ) {\n\t\t\tcell.removeChild( cell.firstChild );\n\t\t}\n\n\t\tcell.innerHTML = _fnGetCellData( settings, rowIdx, col, 'display' );\n\t};\n\n\t// Are we reading last data from DOM or the data object?\n\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t// Read the data from the DOM\n\t\trow._aData = _fnGetRowElements(\n\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t)\n\t\t\t.data;\n\t}\n\telse {\n\t\t// Reading from data object, update the DOM\n\t\tvar cells = row.anCells;\n\n\t\tif ( cells ) {\n\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\tcellWrite( cells[colIdx], colIdx );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\t\tcellWrite( cells[i], i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// For both row and cell invalidation, the cached data for sorting and\n\t// filtering is nulled out\n\trow._aSortData = null;\n\trow._aFilterData = null;\n\n\t// Invalidate the type for a specific column (if given) or all columns since\n\t// the data might have changed\n\tvar cols = settings.aoColumns;\n\tif ( colIdx !== undefined ) {\n\t\tcols[ colIdx ].sType = null;\n\t}\n\telse {\n\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\tcols[i].sType = null;\n\t\t}\n\n\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t_fnRowAttributes( settings, row );\n\t}\n}\n\n\n/**\n * Build a data source object from an HTML row, reading the contents of the\n * cells that are in the row.\n *\n * @param {object} settings DataTables settings object\n * @param {node|object} TR element from which to read data or existing row\n *   object from which to re-read the data from the cells\n * @param {int} [colIdx] Optional column index\n * @param {array|object} [d] Data source object. If `colIdx` is given then this\n *   parameter should also be given and will be used to write the data into.\n *   Only the column in question will be written\n * @returns {object} Object with two parameters: `data` the data read, in\n *   document order, and `cells` and array of nodes (they can be useful to the\n *   caller, so rather than needing a second traversal to get them, just return\n *   them from here).\n * @memberof DataTable#oApi\n */\nfunction _fnGetRowElements( settings, row, colIdx, d )\n{\n\tvar\n\t\ttds = [],\n\t\ttd = row.firstChild,\n\t\tname, col, o, i=0, contents,\n\t\tcolumns = settings.aoColumns,\n\t\tobjectRead = settings._rowReadObject;\n\n\t// Allow the data object to be passed in, or construct\n\td = d !== undefined ?\n\t\td :\n\t\tobjectRead ?\n\t\t\t{} :\n\t\t\t[];\n\n\tvar attr = function ( str, td  ) {\n\t\tif ( typeof str === 'string' ) {\n\t\t\tvar idx = str.indexOf('@');\n\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t}\n\t\t}\n\t};\n\n\t// Read data from a cell and store into the data object\n\tvar cellProcess = function ( cell ) {\n\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\tcol = columns[i];\n\t\t\tcontents = (cell.innerHTML).trim();\n\n\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\tsetter( d, contents );\n\n\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t// be read to either an object or an array.\n\t\t\t\tif ( objectRead ) {\n\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t}\n\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td[i] = contents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ti++;\n\t};\n\n\tif ( td ) {\n\t\t// `tr` element was passed in\n\t\twhile ( td ) {\n\t\t\tname = td.nodeName.toUpperCase();\n\n\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\tcellProcess( td );\n\t\t\t\ttds.push( td );\n\t\t\t}\n\n\t\t\ttd = td.nextSibling;\n\t\t}\n\t}\n\telse {\n\t\t// Existing row object passed in\n\t\ttds = row.anCells;\n\n\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\tcellProcess( tds[j] );\n\t\t}\n\t}\n\n\t// Read the ID from the DOM if present\n\tvar rowNode = row.firstChild ? row : row.nTr;\n\n\tif ( rowNode ) {\n\t\tvar id = rowNode.getAttribute( 'id' );\n\n\t\tif ( id ) {\n\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t}\n\t}\n\n\treturn {\n\t\tdata: d,\n\t\tcells: tds\n\t};\n}\n/**\n * Create a new TR element (and it's TD children) for a row\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iRow Row to consider\n *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n *    DataTables will create a row automatically\n *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n *    if nTr is.\n *  @memberof DataTable#oApi\n */\nfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n{\n\tvar\n\t\trow = oSettings.aoData[iRow],\n\t\trowData = row._aData,\n\t\tcells = [],\n\t\tnTr, nTd, oCol,\n\t\ti, iLen, create;\n\n\tif ( row.nTr === null )\n\t{\n\t\tnTr = nTrIn || document.createElement('tr');\n\n\t\trow.nTr = nTr;\n\t\trow.anCells = cells;\n\n\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t * to the aoData array for fast look up\n\t\t */\n\t\tnTr._DT_RowIndex = iRow;\n\n\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t_fnRowAttributes( oSettings, row );\n\n\t\t/* Process each column */\n\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toCol = oSettings.aoColumns[i];\n\t\t\tcreate = nTrIn ? false : true;\n\n\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\n\t\t\tif (! nTd) {\n\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t}\n\n\t\t\tnTd._DT_CellIndex = {\n\t\t\t\trow: iRow,\n\t\t\t\tcolumn: i\n\t\t\t};\n\t\t\t\n\t\t\tcells.push( nTd );\n\n\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\tif ( create || ((oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t (!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t)) {\n\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t}\n\n\t\t\t/* Add user defined class */\n\t\t\tif ( oCol.sClass )\n\t\t\t{\n\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t}\n\n\t\t\t// Visibility - add or remove as required\n\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t{\n\t\t\t\tnTr.appendChild( nTd );\n\t\t\t}\n\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t{\n\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t}\n\n\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t{\n\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow, cells] );\n\t}\n}\n\n\n/**\n * Add attributes to a row based on the special `DT_*` parameters in a data\n * source object.\n *  @param {object} settings DataTables settings object\n *  @param {object} DataTables row object for the row to be modified\n *  @memberof DataTable#oApi\n */\nfunction _fnRowAttributes( settings, row )\n{\n\tvar tr = row.nTr;\n\tvar data = row._aData;\n\n\tif ( tr ) {\n\t\tvar id = settings.rowIdFn( data );\n\n\t\tif ( id ) {\n\t\t\ttr.id = id;\n\t\t}\n\n\t\tif ( data.DT_RowClass ) {\n\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\ta;\n\n\t\t\t$(tr)\n\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t.addClass( data.DT_RowClass );\n\t\t}\n\n\t\tif ( data.DT_RowAttr ) {\n\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t}\n\n\t\tif ( data.DT_RowData ) {\n\t\t\t$(tr).data( data.DT_RowData );\n\t\t}\n\t}\n}\n\n\n/**\n * Create the HTML header for the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnBuildHead( oSettings )\n{\n\tvar i, ien, cell, row, column;\n\tvar thead = oSettings.nTHead;\n\tvar tfoot = oSettings.nTFoot;\n\tvar createHeader = $('th, td', thead).length === 0;\n\tvar classes = oSettings.oClasses;\n\tvar columns = oSettings.aoColumns;\n\n\tif ( createHeader ) {\n\t\trow = $('<tr/>').appendTo( thead );\n\t}\n\n\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\tcolumn = columns[i];\n\t\tcell = $( column.nTh ).addClass( column.sClass );\n\n\t\tif ( createHeader ) {\n\t\t\tcell.appendTo( row );\n\t\t}\n\n\t\t// 1.11 move into sorting\n\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\tcell.addClass( column.sSortingClass );\n\n\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\tcell\n\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\n\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t}\n\t\t}\n\n\t\tif ( column.sTitle != cell[0].innerHTML ) {\n\t\t\tcell.html( column.sTitle );\n\t\t}\n\n\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\toSettings, cell, column, classes\n\t\t);\n\t}\n\n\tif ( createHeader ) {\n\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t}\n\n\t/* Deal with the footer - add classes if required */\n\t$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );\n\t$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );\n\n\t// Cache the footer cells. Note that we only take the cells from the first\n\t// row in the footer. If there is more than one row the user wants to\n\t// interact with, they need to use the table().foot() method. Note also this\n\t// allows cells to be used for multiple columns using colspan\n\tif ( tfoot !== null ) {\n\t\tvar cells = oSettings.aoFooter[0];\n\n\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\n\t\t\tif (column) {\n\t\t\t\tcolumn.nTf = cells[i].cell;\n\t\n\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Draw the header (or footer) element based on the column visibility states. The\n * methodology here is to use the layout array from _fnDetectHeader, modified for\n * the instantaneous column visibility, to construct the new layout. The grid is\n * traversed over cell at a time in a rows x columns grid fashion, although each\n * cell insert can cover multiple elements in the grid - which is tracks using the\n * aApplied array. Cell inserts in the grid will only occur where there isn't\n * already a cell in that position.\n *  @param {object} oSettings dataTables settings object\n *  @param array {objects} aoSource Layout array from _fnDetectHeader\n *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n *  @memberof DataTable#oApi\n */\nfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n{\n\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\tvar aoLocal = [];\n\tvar aApplied = [];\n\tvar iColumns = oSettings.aoColumns.length;\n\tvar iRowspan, iColspan;\n\n\tif ( ! aoSource )\n\t{\n\t\treturn;\n\t}\n\n\tif (  bIncludeHidden === undefined )\n\t{\n\t\tbIncludeHidden = false;\n\t}\n\n\t/* Make a copy of the master layout array, but without the visible columns in it */\n\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t{\n\t\taoLocal[i] = aoSource[i].slice();\n\t\taoLocal[i].nTr = aoSource[i].nTr;\n\n\t\t/* Remove any columns which are currently hidden */\n\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t{\n\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t{\n\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t}\n\t\t}\n\n\t\t/* Prep the applied array - it needs an element for each row */\n\t\taApplied.push( [] );\n\t}\n\n\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t{\n\t\tnLocalTr = aoLocal[i].nTr;\n\n\t\t/* All cells are going to be replaced, so empty out the row */\n\t\tif ( nLocalTr )\n\t\t{\n\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t{\n\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t}\n\t\t}\n\n\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t{\n\t\t\tiRowspan = 1;\n\t\t\tiColspan = 1;\n\n\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t */\n\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t{\n\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\taApplied[i][j] = 1;\n\n\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t{\n\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\tiRowspan++;\n\t\t\t\t}\n\n\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t{\n\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t}\n\t\t\t\t\tiColspan++;\n\t\t\t\t}\n\n\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t$(aoLocal[i][j].cell)\n\t\t\t\t\t.attr('rowspan', iRowspan)\n\t\t\t\t\t.attr('colspan', iColspan);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Insert the required TR nodes into the table for display\n *  @param {object} oSettings dataTables settings object\n *  @param ajaxComplete true after ajax call to complete rendering\n *  @memberof DataTable#oApi\n */\nfunction _fnDraw( oSettings, ajaxComplete )\n{\n\t// Allow for state saving and a custom start position\n\t_fnStart( oSettings );\n\n\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t{\n\t\t_fnProcessingDisplay( oSettings, false );\n\t\treturn;\n\t}\n\n\tvar anRows = [];\n\tvar iRowCount = 0;\n\tvar asStripeClasses = oSettings.asStripeClasses;\n\tvar iStripes = asStripeClasses.length;\n\tvar oLang = oSettings.oLanguage;\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar aiDisplay = oSettings.aiDisplay;\n\tvar iDisplayStart = oSettings._iDisplayStart;\n\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\n\toSettings.bDrawing = true;\n\n\t/* Server-side processing draw intercept */\n\tif ( oSettings.bDeferLoading )\n\t{\n\t\toSettings.bDeferLoading = false;\n\t\toSettings.iDraw++;\n\t\t_fnProcessingDisplay( oSettings, false );\n\t}\n\telse if ( !bServerSide )\n\t{\n\t\toSettings.iDraw++;\n\t}\n\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t{\n\t\t_fnAjaxUpdate( oSettings );\n\t\treturn;\n\t}\n\n\tif ( aiDisplay.length !== 0 )\n\t{\n\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\n\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t{\n\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\tif ( aoData.nTr === null )\n\t\t\t{\n\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t}\n\n\t\t\tvar nRow = aoData.nTr;\n\n\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\tif ( iStripes !== 0 )\n\t\t\t{\n\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t{\n\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t// useful?\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\n\t\t\tanRows.push( nRow );\n\t\t\tiRowCount++;\n\t\t}\n\t}\n\telse\n\t{\n\t\t/* Table is empty - create a row with an empty message in it */\n\t\tvar sZero = oLang.sZeroRecords;\n\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t{\n\t\t\tsZero = oLang.sLoadingRecords;\n\t\t}\n\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t{\n\t\t\tsZero = oLang.sEmptyTable;\n\t\t}\n\n\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t.append( $('<td />', {\n\t\t\t\t'valign':  'top',\n\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t} ).html( sZero ) )[0];\n\t}\n\n\t/* Header and footer callbacks */\n\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\tvar body = $(oSettings.nTBody);\n\n\tbody.children().detach();\n\tbody.append( $(anRows) );\n\n\t/* Call all required callback functions for the end of a draw */\n\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\n\t/* Draw is complete, sorting and filtering must be as well */\n\toSettings.bSorted = false;\n\toSettings.bFiltered = false;\n\toSettings.bDrawing = false;\n}\n\n\n/**\n * Redraw the table - taking account of the various features which are enabled\n *  @param {object} oSettings dataTables settings object\n *  @param {boolean} [holdPosition] Keep the current paging position. By default\n *    the paging is reset to the first page\n *  @memberof DataTable#oApi\n */\nfunction _fnReDraw( settings, holdPosition )\n{\n\tvar\n\t\tfeatures = settings.oFeatures,\n\t\tsort     = features.bSort,\n\t\tfilter   = features.bFilter;\n\n\tif ( sort ) {\n\t\t_fnSort( settings );\n\t}\n\n\tif ( filter ) {\n\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t}\n\telse {\n\t\t// No filtering, so we want to just use the display master\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t}\n\n\tif ( holdPosition !== true ) {\n\t\tsettings._iDisplayStart = 0;\n\t}\n\n\t// Let any modules know about the draw hold position state (used by\n\t// scrolling internally)\n\tsettings._drawHold = holdPosition;\n\n\t_fnDraw( settings );\n\n\tsettings._drawHold = false;\n}\n\n\n/**\n * Add the options to the page HTML for the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnAddOptionsHtml ( oSettings )\n{\n\tvar classes = oSettings.oClasses;\n\tvar table = $(oSettings.nTable);\n\tvar holding = $('<div/>').insertBefore( table ); // Holding element for speed\n\tvar features = oSettings.oFeatures;\n\n\t// All DataTables are wrapped in a div\n\tvar insert = $('<div/>', {\n\t\tid:      oSettings.sTableId+'_wrapper',\n\t\t'class': classes.sWrapper + (oSettings.nTFoot ? '' : ' '+classes.sNoFooter)\n\t} );\n\n\toSettings.nHolding = holding[0];\n\toSettings.nTableWrapper = insert[0];\n\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\n\t/* Loop over the user set positioning and place the elements as needed */\n\tvar aDom = oSettings.sDom.split('');\n\tvar featureNode, cOption, nNewNode, cNext, sAttr, j;\n\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t{\n\t\tfeatureNode = null;\n\t\tcOption = aDom[i];\n\n\t\tif ( cOption == '<' )\n\t\t{\n\t\t\t/* New container div */\n\t\t\tnNewNode = $('<div/>')[0];\n\n\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\tcNext = aDom[i+1];\n\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t{\n\t\t\t\tsAttr = \"\";\n\t\t\t\tj = 2;\n\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t{\n\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t{\n\t\t\t\t\tsAttr = classes.sJUIHeader;\n\t\t\t\t}\n\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t{\n\t\t\t\t\tsAttr = classes.sJUIFooter;\n\t\t\t\t}\n\n\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t */\n\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t{\n\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t}\n\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t{\n\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t}\n\n\t\t\t\ti += j; /* Move along the position array */\n\t\t\t}\n\n\t\t\tinsert.append( nNewNode );\n\t\t\tinsert = $(nNewNode);\n\t\t}\n\t\telse if ( cOption == '>' )\n\t\t{\n\t\t\t/* End container div */\n\t\t\tinsert = insert.parent();\n\t\t}\n\t\t// @todo Move options into their own plugins?\n\t\telse if ( cOption == 'l' && features.bPaginate && features.bLengthChange )\n\t\t{\n\t\t\t/* Length */\n\t\t\tfeatureNode = _fnFeatureHtmlLength( oSettings );\n\t\t}\n\t\telse if ( cOption == 'f' && features.bFilter )\n\t\t{\n\t\t\t/* Filter */\n\t\t\tfeatureNode = _fnFeatureHtmlFilter( oSettings );\n\t\t}\n\t\telse if ( cOption == 'r' && features.bProcessing )\n\t\t{\n\t\t\t/* pRocessing */\n\t\t\tfeatureNode = _fnFeatureHtmlProcessing( oSettings );\n\t\t}\n\t\telse if ( cOption == 't' )\n\t\t{\n\t\t\t/* Table */\n\t\t\tfeatureNode = _fnFeatureHtmlTable( oSettings );\n\t\t}\n\t\telse if ( cOption ==  'i' && features.bInfo )\n\t\t{\n\t\t\t/* Info */\n\t\t\tfeatureNode = _fnFeatureHtmlInfo( oSettings );\n\t\t}\n\t\telse if ( cOption == 'p' && features.bPaginate )\n\t\t{\n\t\t\t/* Pagination */\n\t\t\tfeatureNode = _fnFeatureHtmlPaginate( oSettings );\n\t\t}\n\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t{\n\t\t\t/* Plug-in features */\n\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t{\n\t\t\t\t\tfeatureNode = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Add to the 2D features array */\n\t\tif ( featureNode )\n\t\t{\n\t\t\tvar aanFeatures = oSettings.aanFeatures;\n\n\t\t\tif ( ! aanFeatures[cOption] )\n\t\t\t{\n\t\t\t\taanFeatures[cOption] = [];\n\t\t\t}\n\n\t\t\taanFeatures[cOption].push( featureNode );\n\t\t\tinsert.append( featureNode );\n\t\t}\n\t}\n\n\t/* Built our DOM structure - replace the holding div with what we want */\n\tholding.replaceWith( insert );\n\toSettings.nHolding = null;\n}\n\n\n/**\n * Use the DOM source to create up an array of header cells. The idea here is to\n * create a layout grid (array) of rows x columns, which contains a reference\n * to the cell that that point in the grid (regardless of col/rowspan), such that\n * any column / row could be removed and the new grid constructed\n *  @param array {object} aLayout Array to store the calculated layout in\n *  @param {node} nThead The header/footer element for the table\n *  @memberof DataTable#oApi\n */\nfunction _fnDetectHeader ( aLayout, nThead )\n{\n\tvar nTrs = $(nThead).children('tr');\n\tvar nTr, nCell;\n\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\tvar bUnique;\n\tvar fnShiftCol = function ( a, i, j ) {\n\t\tvar k = a[i];\n                while ( k[j] ) {\n\t\t\tj++;\n\t\t}\n\t\treturn j;\n\t};\n\n\taLayout.splice( 0, aLayout.length );\n\n\t/* We know how many rows there are in the layout - so prep it */\n\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t{\n\t\taLayout.push( [] );\n\t}\n\n\t/* Calculate a layout array */\n\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t{\n\t\tnTr = nTrs[i];\n\t\tiColumn = 0;\n\n\t\t/* For every cell in the row... */\n\t\tnCell = nTr.firstChild;\n\t\twhile ( nCell ) {\n\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t{\n\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\n\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t * accordingly\n\t\t\t\t */\n\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\n\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\n\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t{\n\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t{\n\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t};\n\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tnCell = nCell.nextSibling;\n\t\t}\n\t}\n}\n\n\n/**\n * Get an array of unique th elements, one for each column\n *  @param {object} oSettings dataTables settings object\n *  @param {node} nHeader automatically detect the layout from this node - optional\n *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n *  @returns array {node} aReturn list of unique th's\n *  @memberof DataTable#oApi\n */\nfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n{\n\tvar aReturn = [];\n\tif ( !aLayout )\n\t{\n\t\taLayout = oSettings.aoHeader;\n\t\tif ( nHeader )\n\t\t{\n\t\t\taLayout = [];\n\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t}\n\t}\n\n\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t{\n\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t{\n\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t{\n\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn aReturn;\n}\n\n/**\n * Set the start position for draw\n *  @param {object} oSettings dataTables settings object\n */\nfunction _fnStart( oSettings )\n{\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\n\t// Check and see if we have an initial draw position from state saving\n\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t{\n\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\tiInitDisplayStart :\n\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t0 :\n\t\t\t\tiInitDisplayStart;\n\n\t\toSettings.iInitDisplayStart = -1;\n\t}\n}\n\n/**\n * Create an Ajax call based on the table's settings, taking into account that\n * parameters can have multiple forms, and backwards compatibility.\n *\n * @param {object} oSettings dataTables settings object\n * @param {array} data Data to send to the server, required by\n *     DataTables - may be augmented by developer callbacks\n * @param {function} fn Callback function to run when data is obtained\n */\nfunction _fnBuildAjax( oSettings, data, fn )\n{\n\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\n\t// Convert to object based for 1.10+ if using the old array scheme which can\n\t// come from server-side processing or serverParams\n\tif ( data && Array.isArray(data) ) {\n\t\tvar tmp = {};\n\t\tvar rbracket = /(.*?)\\[\\]$/;\n\n\t\t$.each( data, function (key, val) {\n\t\t\tvar match = val.name.match(rbracket);\n\n\t\t\tif ( match ) {\n\t\t\t\t// Support for arrays\n\t\t\t\tvar name = match[0];\n\n\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t}\n\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp[val.name] = val.value;\n\t\t\t}\n\t\t} );\n\t\tdata = tmp;\n\t}\n\n\tvar ajaxData;\n\tvar ajax = oSettings.ajax;\n\tvar instance = oSettings.oInstance;\n\tvar callback = function ( json ) {\n\t\tvar status = oSettings.jqXHR\n\t\t\t? oSettings.jqXHR.status\n\t\t\t: null;\n\n\t\tif ( json === null || (typeof status === 'number' && status == 204 ) ) {\n\t\t\tjson = {};\n\t\t\t_fnAjaxDataSrc( oSettings, json, [] );\n\t\t}\n\n\t\tvar error = json.error || json.sError;\n\t\tif ( error ) {\n\t\t\t_fnLog( oSettings, 0, error );\n\t\t}\n\n\t\toSettings.json = json;\n\n\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR] );\n\t\tfn( json );\n\t};\n\n\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t{\n\t\tajaxData = ajax.data;\n\n\t\tvar newData = typeof ajaxData === 'function' ?\n\t\t\tajaxData( data, oSettings ) :  // fn can manipulate data or return\n\t\t\tajaxData;                      // an object object or array to merge\n\n\t\t// If the function returned something, use that alone\n\t\tdata = typeof ajaxData === 'function' && newData ?\n\t\t\tnewData :\n\t\t\t$.extend( true, data, newData );\n\n\t\t// Remove the data property as we've resolved it already and don't want\n\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\tdelete ajax.data;\n\t}\n\n\tvar baseAjax = {\n\t\t\"data\": data,\n\t\t\"success\": callback,\n\t\t\"dataType\": \"json\",\n\t\t\"cache\": false,\n\t\t\"type\": oSettings.sServerMethod,\n\t\t\"error\": function (xhr, error, thrown) {\n\t\t\tvar ret = _fnCallbackFire( oSettings, null, 'xhr', [oSettings, null, oSettings.jqXHR] );\n\n\t\t\tif ( $.inArray( true, ret ) === -1 ) {\n\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t}\n\t\t\t\telse if ( xhr.readyState === 4 ) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t};\n\n\t// Store the data submitted for the API\n\toSettings.oAjaxData = data;\n\n\t// Allow plug-ins and external processes to modify the data\n\t_fnCallbackFire( oSettings, null, 'preXhr', [oSettings, data] );\n\n\tif ( oSettings.fnServerData )\n\t{\n\t\t// DataTables 1.9- compatibility\n\t\toSettings.fnServerData.call( instance,\n\t\t\toSettings.sAjaxSource,\n\t\t\t$.map( data, function (val, key) { // Need to convert back to 1.9 trad format\n\t\t\t\treturn { name: key, value: val };\n\t\t\t} ),\n\t\t\tcallback,\n\t\t\toSettings\n\t\t);\n\t}\n\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t{\n\t\t// DataTables 1.9- compatibility\n\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t} ) );\n\t}\n\telse if ( typeof ajax === 'function' )\n\t{\n\t\t// Is a function - let the caller define what needs to be done\n\t\toSettings.jqXHR = ajax.call( instance, data, callback, oSettings );\n\t}\n\telse\n\t{\n\t\t// Object to extend the base settings\n\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\n\t\t// Restore for next time around\n\t\tajax.data = ajaxData;\n\t}\n}\n\n\n/**\n * Update the table using an Ajax call\n *  @param {object} settings dataTables settings object\n *  @returns {boolean} Block the table drawing or not\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdate( settings )\n{\n\tsettings.iDraw++;\n\t_fnProcessingDisplay( settings, true );\n\n\t// Keep track of drawHold state to handle scrolling after the Ajax call\n\tvar drawHold = settings._drawHold;\n\n\t_fnBuildAjax(\n\t\tsettings,\n\t\t_fnAjaxParameters( settings ),\n\t\tfunction(json) {\n\t\t\tsettings._drawHold = drawHold;\n\t\t\t_fnAjaxUpdateDraw( settings, json );\n\t\t\tsettings._drawHold = false;\n\t\t}\n\t);\n}\n\n\n/**\n * Build up the parameters in an object needed for a server-side processing\n * request. Note that this is basically done twice, is different ways - a modern\n * method which is used by default in DataTables 1.10 which uses objects and\n * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n * the sAjaxSource option is used in the initialisation, or the legacyAjax\n * option is set.\n *  @param {object} oSettings dataTables settings object\n *  @returns {bool} block the table drawing or not\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxParameters( settings )\n{\n\tvar\n\t\tcolumns = settings.aoColumns,\n\t\tcolumnCount = columns.length,\n\t\tfeatures = settings.oFeatures,\n\t\tpreSearch = settings.oPreviousSearch,\n\t\tpreColSearch = settings.aoPreSearchCols,\n\t\ti, data = [], dataProp, column, columnSearch,\n\t\tsort = _fnSortFlatten( settings ),\n\t\tdisplayStart = settings._iDisplayStart,\n\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\tsettings._iDisplayLength :\n\t\t\t-1;\n\n\tvar param = function ( name, value ) {\n\t\tdata.push( { 'name': name, 'value': value } );\n\t};\n\n\t// DataTables 1.9- compatible method\n\tparam( 'sEcho',          settings.iDraw );\n\tparam( 'iColumns',       columnCount );\n\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\tparam( 'iDisplayStart',  displayStart );\n\tparam( 'iDisplayLength', displayLength );\n\n\t// DataTables 1.10+ method\n\tvar d = {\n\t\tdraw:    settings.iDraw,\n\t\tcolumns: [],\n\t\torder:   [],\n\t\tstart:   displayStart,\n\t\tlength:  displayLength,\n\t\tsearch:  {\n\t\t\tvalue: preSearch.sSearch,\n\t\t\tregex: preSearch.bRegex\n\t\t}\n\t};\n\n\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\tcolumn = columns[i];\n\t\tcolumnSearch = preColSearch[i];\n\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\n\t\td.columns.push( {\n\t\t\tdata:       dataProp,\n\t\t\tname:       column.sName,\n\t\t\tsearchable: column.bSearchable,\n\t\t\torderable:  column.bSortable,\n\t\t\tsearch:     {\n\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\tregex: columnSearch.bRegex\n\t\t\t}\n\t\t} );\n\n\t\tparam( \"mDataProp_\"+i, dataProp );\n\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t}\n\n\t\tif ( features.bSort ) {\n\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t}\n\t}\n\n\tif ( features.bFilter ) {\n\t\tparam( 'sSearch', preSearch.sSearch );\n\t\tparam( 'bRegex', preSearch.bRegex );\n\t}\n\n\tif ( features.bSort ) {\n\t\t$.each( sort, function ( i, val ) {\n\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\n\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t} );\n\n\t\tparam( 'iSortingCols', sort.length );\n\t}\n\n\t// If the legacy.ajax parameter is null, then we automatically decide which\n\t// form to use, based on sAjaxSource\n\tvar legacy = DataTable.ext.legacy.ajax;\n\tif ( legacy === null ) {\n\t\treturn settings.sAjaxSource ? data : d;\n\t}\n\n\t// Otherwise, if legacy has been specified then we use that to decide on the\n\t// form\n\treturn legacy ? data : d;\n}\n\n\n/**\n * Data the data from the server (nuking the old) and redraw the table\n *  @param {object} oSettings dataTables settings object\n *  @param {object} json json data return from the server.\n *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n *  @param {array} json.aaData The data to display on this page\n *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdateDraw ( settings, json )\n{\n\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t// Support both\n\tvar compat = function ( old, modern ) {\n\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t};\n\n\tvar data = _fnAjaxDataSrc( settings, json );\n\tvar draw            = compat( 'sEcho',                'draw' );\n\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\tvar recordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\n\tif ( draw !== undefined ) {\n\t\t// Protect against out of sequence returns\n\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\treturn;\n\t\t}\n\t\tsettings.iDraw = draw * 1;\n\t}\n\n\t// No data in returned object, so rather than an array, we show an empty table\n\tif ( ! data ) {\n\t\tdata = [];\n\t}\n\n\t_fnClearTable( settings );\n\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\n\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t_fnAddData( settings, data[i] );\n\t}\n\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\n\t_fnDraw( settings, true );\n\n\tif ( ! settings._bInitComplete ) {\n\t\t_fnInitComplete( settings, json );\n\t}\n\n\t_fnProcessingDisplay( settings, false );\n}\n\n\n/**\n * Get the data from the JSON data source to use for drawing a table. Using\n * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n * source object, or from a processing function.\n *  @param {object} oSettings dataTables settings object\n *  @param  {object} json Data source object / array from the server\n *  @return {array} Array of data to use\n */\n function _fnAjaxDataSrc ( oSettings, json, write )\n {\n\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\toSettings.ajax.dataSrc :\n\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\n\tif ( ! write ) {\n\t\tif ( dataSrc === 'data' ) {\n\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t// it if possible\n\t\t\treturn json.aaData || json[dataSrc];\n\t\t}\n\n\t\treturn dataSrc !== \"\" ?\n\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\tjson;\n\t}\n\n\t// set\n\t_fnSetObjectDataFn( dataSrc )( json, write );\n}\n\n/**\n * Generate the node required for filtering text\n *  @returns {node} Filter control element\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlFilter ( settings )\n{\n\tvar classes = settings.oClasses;\n\tvar tableId = settings.sTableId;\n\tvar language = settings.oLanguage;\n\tvar previousSearch = settings.oPreviousSearch;\n\tvar features = settings.aanFeatures;\n\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\n\tvar str = language.sSearch;\n\tstr = str.match(/_INPUT_/) ?\n\t\tstr.replace('_INPUT_', input) :\n\t\tstr+input;\n\n\tvar filter = $('<div/>', {\n\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t'class': classes.sFilter\n\t\t} )\n\t\t.append( $('<label/>' ).append( str ) );\n\n\tvar searchFn = function(event) {\n\t\t/* Update all other filter input elements for the new display */\n\t\tvar n = features.f;\n\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\t\tif(previousSearch['return'] && event.key !== \"Enter\") {\n\t\t\treturn;\n\t\t}\n\t\t/* Now do the filter */\n\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\"sSearch\": val,\n\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive,\n\t\t\t\t\"return\": previousSearch['return']\n\t\t\t} );\n\n\t\t\t// Need to redraw, without resorting\n\t\t\tsettings._iDisplayStart = 0;\n\t\t\t_fnDraw( settings );\n\t\t}\n\t};\n\n\tvar searchDelay = settings.searchDelay !== null ?\n\t\tsettings.searchDelay :\n\t\t_fnDataSource( settings ) === 'ssp' ?\n\t\t\t400 :\n\t\t\t0;\n\n\tvar jqFilter = $('input', filter)\n\t\t.val( previousSearch.sSearch )\n\t\t.attr( 'placeholder', language.sSearchPlaceholder )\n\t\t.on(\n\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\tsearchDelay ?\n\t\t\t\t_fnThrottle( searchFn, searchDelay ) :\n\t\t\t\tsearchFn\n\t\t)\n\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\tsetTimeout( function () {\n\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t}, 10);\n\t\t} )\n\t\t.on( 'keypress.DT', function(e) {\n\t\t\t/* Prevent form submission */\n\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} )\n\t\t.attr('aria-controls', tableId);\n\n\t// Update the input elements whenever the table is filtered\n\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\tif ( settings === s ) {\n\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t// inside an iframe or frame...\n\t\t\ttry {\n\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( e ) {}\n\t\t}\n\t} );\n\n\treturn filter[0];\n}\n\n\n/**\n * Filter the table using both the global filter and column based filtering\n *  @param {object} oSettings dataTables settings object\n *  @param {object} oSearch search information\n *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterComplete ( oSettings, oInput, iForce )\n{\n\tvar oPrevSearch = oSettings.oPreviousSearch;\n\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\tvar fnSaveFilter = function ( oFilter ) {\n\t\t/* Save the filtering values */\n\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\toPrevSearch['return'] = oFilter['return'];\n\t};\n\tvar fnRegex = function ( o ) {\n\t\t// Backwards compatibility with the bEscapeRegex option\n\t\treturn o.bEscapeRegex !== undefined ? !o.bEscapeRegex : o.bRegex;\n\t};\n\n\t// Resolve any column types that are unknown due to addition or invalidation\n\t// @todo As per sort - can this be moved into an event handler?\n\t_fnColumnTypes( oSettings );\n\n\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t{\n\t\t/* Global filter */\n\t\t_fnFilter( oSettings, oInput.sSearch, iForce, fnRegex(oInput), oInput.bSmart, oInput.bCaseInsensitive );\n\t\tfnSaveFilter( oInput );\n\n\t\t/* Now do the individual column filter */\n\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t{\n\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, fnRegex(aoPrevSearch[i]),\n\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t}\n\n\t\t/* Custom filtering */\n\t\t_fnFilterCustom( oSettings );\n\t}\n\telse\n\t{\n\t\tfnSaveFilter( oInput );\n\t}\n\n\t/* Tell the draw function we have been filtering */\n\toSettings.bFiltered = true;\n\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n}\n\n\n/**\n * Apply custom filtering functions\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterCustom( settings )\n{\n\tvar filters = DataTable.ext.search;\n\tvar displayRows = settings.aiDisplay;\n\tvar row, rowIdx;\n\n\tfor ( var i=0, ien=filters.length ; i<ien ; i++ ) {\n\t\tvar rows = [];\n\n\t\t// Loop over each row and see if it should be included\n\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\trowIdx = displayRows[ j ];\n\t\t\trow = settings.aoData[ rowIdx ];\n\n\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\trows.push( rowIdx );\n\t\t\t}\n\t\t}\n\n\t\t// So the array reference doesn't break set the results into the\n\t\t// existing array\n\t\tdisplayRows.length = 0;\n\t\t$.merge( displayRows, rows );\n\t}\n}\n\n\n/**\n * Filter the table on a per-column basis\n *  @param {object} oSettings dataTables settings object\n *  @param {string} sInput string to filter on\n *  @param {int} iColumn column to filter\n *  @param {bool} bRegex treat search string as a regular expression or not\n *  @param {bool} bSmart use smart filtering or not\n *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n{\n\tif ( searchStr === '' ) {\n\t\treturn;\n\t}\n\n\tvar data;\n\tvar out = [];\n\tvar display = settings.aiDisplay;\n\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\n\tfor ( var i=0 ; i<display.length ; i++ ) {\n\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\n\t\tif ( rpSearch.test( data ) ) {\n\t\t\tout.push( display[i] );\n\t\t}\n\t}\n\n\tsettings.aiDisplay = out;\n}\n\n\n/**\n * Filter the data table based on user input and draw the table\n *  @param {object} settings dataTables settings object\n *  @param {string} input string to filter on\n *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n *  @param {bool} regex treat as a regular expression or not\n *  @param {bool} smart perform smart filtering or not\n *  @param {bool} caseInsensitive Do case insensitive matching or not\n *  @memberof DataTable#oApi\n */\nfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n{\n\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\tvar displayMaster = settings.aiDisplayMaster;\n\tvar display, invalidated, i;\n\tvar filtered = [];\n\n\t// Need to take account of custom filtering functions - always filter\n\tif ( DataTable.ext.search.length !== 0 ) {\n\t\tforce = true;\n\t}\n\n\t// Check if any of the rows were invalidated\n\tinvalidated = _fnFilterData( settings );\n\n\t// If the input is blank - we just want the full data set\n\tif ( input.length <= 0 ) {\n\t\tsettings.aiDisplay = displayMaster.slice();\n\t}\n\telse {\n\t\t// New search - start from the master array\n\t\tif ( invalidated ||\n\t\t\t force ||\n\t\t\t regex ||\n\t\t\t prevSearch.length > input.length ||\n\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t                  // re-filtered since indexes will have changed\n\t\t) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\n\t\t// Search the display array\n\t\tdisplay = settings.aiDisplay;\n\n\t\tfor ( i=0 ; i<display.length ; i++ ) {\n\t\t\tif ( rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\tfiltered.push( display[i] );\n\t\t\t}\n\t\t}\n\n\t\tsettings.aiDisplay = filtered;\n\t}\n}\n\n\n/**\n * Build a regular expression object suitable for searching a table\n *  @param {string} sSearch string to search for\n *  @param {bool} bRegex treat as a regular expression or not\n *  @param {bool} bSmart perform smart filtering or not\n *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n *  @returns {RegExp} constructed object\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterCreateSearch( search, regex, smart, caseInsensitive )\n{\n\tsearch = regex ?\n\t\tsearch :\n\t\t_fnEscapeRegex( search );\n\t\n\tif ( smart ) {\n\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t * order is important - a la google. So this is what we want to\n\t\t * generate:\n\t\t * \n\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t */\n\t\tvar a = $.map( search.match( /[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''], function ( word ) {\n\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\tvar m = word.match( /^\"(.*)\"$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\tvar m = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\n\t\t\treturn word.replace('\"', '');\n\t\t} );\n\n\t\tsearch = '^(?=.*?'+a.join( ')(?=.*?' )+').*$';\n\t}\n\n\treturn new RegExp( search, caseInsensitive ? 'i' : '' );\n}\n\n\n/**\n * Escape a string such that it can be used in a regular expression\n *  @param {string} sVal string to escape\n *  @returns {string} escaped string\n *  @memberof DataTable#oApi\n */\nvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\nvar __filter_div = $('<div>')[0];\nvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\n// Update the filtering data for each row if needed (by invalidation or first run)\nfunction _fnFilterData ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar column;\n\tvar i, j, ien, jen, filterData, cellData, row;\n\tvar wasInvalidated = false;\n\n\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\trow = settings.aoData[i];\n\n\t\tif ( ! row._aFilterData ) {\n\t\t\tfilterData = [];\n\n\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\tcolumn = columns[j];\n\n\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\n\t\t\t\t\t// Search in DataTables 1.10 is string based. In 1.11 this\n\t\t\t\t\t// should be altered to also allow strict type checking.\n\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcellData = '';\n\t\t\t\t}\n\n\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t}\n\n\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t}\n\n\t\t\t\tfilterData.push( cellData );\n\t\t\t}\n\n\t\t\trow._aFilterData = filterData;\n\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\twasInvalidated = true;\n\t\t}\n\t}\n\n\treturn wasInvalidated;\n}\n\n\n/**\n * Convert from the internal Hungarian notation to camelCase for external\n * interaction\n *  @param {object} obj Object to convert\n *  @returns {object} Inverted object\n *  @memberof DataTable#oApi\n */\nfunction _fnSearchToCamel ( obj )\n{\n\treturn {\n\t\tsearch:          obj.sSearch,\n\t\tsmart:           obj.bSmart,\n\t\tregex:           obj.bRegex,\n\t\tcaseInsensitive: obj.bCaseInsensitive\n\t};\n}\n\n\n\n/**\n * Convert from camelCase notation to the internal Hungarian. We could use the\n * Hungarian convert function here, but this is cleaner\n *  @param {object} obj Object to convert\n *  @returns {object} Inverted object\n *  @memberof DataTable#oApi\n */\nfunction _fnSearchToHung ( obj )\n{\n\treturn {\n\t\tsSearch:          obj.search,\n\t\tbSmart:           obj.smart,\n\t\tbRegex:           obj.regex,\n\t\tbCaseInsensitive: obj.caseInsensitive\n\t};\n}\n\n/**\n * Generate the node required for the info display\n *  @param {object} oSettings dataTables settings object\n *  @returns {node} Information element\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlInfo ( settings )\n{\n\tvar\n\t\ttid = settings.sTableId,\n\t\tnodes = settings.aanFeatures.i,\n\t\tn = $('<div/>', {\n\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t} );\n\n\tif ( ! nodes ) {\n\t\t// Update display on each draw\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\"sName\": \"information\"\n\t\t} );\n\n\t\tn\n\t\t\t.attr( 'role', 'status' )\n\t\t\t.attr( 'aria-live', 'polite' );\n\n\t\t// Table is described by our info div\n\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t}\n\n\treturn n[0];\n}\n\n\n/**\n * Update the information elements in the display\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnUpdateInfo ( settings )\n{\n\t/* Show information about the table */\n\tvar nodes = settings.aanFeatures.i;\n\tif ( nodes.length === 0 ) {\n\t\treturn;\n\t}\n\n\tvar\n\t\tlang  = settings.oLanguage,\n\t\tstart = settings._iDisplayStart+1,\n\t\tend   = settings.fnDisplayEnd(),\n\t\tmax   = settings.fnRecordsTotal(),\n\t\ttotal = settings.fnRecordsDisplay(),\n\t\tout   = total ?\n\t\t\tlang.sInfo :\n\t\t\tlang.sInfoEmpty;\n\n\tif ( total !== max ) {\n\t\t/* Record set after filtering */\n\t\tout += ' ' + lang.sInfoFiltered;\n\t}\n\n\t// Convert the macros\n\tout += lang.sInfoPostFix;\n\tout = _fnInfoMacros( settings, out );\n\n\tvar callback = lang.fnInfoCallback;\n\tif ( callback !== null ) {\n\t\tout = callback.call( settings.oInstance,\n\t\t\tsettings, start, end, max, total, out\n\t\t);\n\t}\n\n\t$(nodes).html( out );\n}\n\n\nfunction _fnInfoMacros ( settings, str )\n{\n\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t// internally\n\tvar\n\t\tformatter  = settings.fnFormatNumber,\n\t\tstart      = settings._iDisplayStart+1,\n\t\tlen        = settings._iDisplayLength,\n\t\tvis        = settings.fnRecordsDisplay(),\n\t\tall        = len === -1;\n\n\treturn str.\n\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n}\n\n\n\n/**\n * Draw the table for the first time, adding all required features\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnInitialise ( settings )\n{\n\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\tvar columns = settings.aoColumns, column;\n\tvar features = settings.oFeatures;\n\tvar deferLoading = settings.bDeferLoading; // value modified by the draw\n\n\t/* Ensure that the table data is fully initialised */\n\tif ( ! settings.bInitialised ) {\n\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\treturn;\n\t}\n\n\t/* Show the display HTML options */\n\t_fnAddOptionsHtml( settings );\n\n\t/* Build and draw the header / footer for the table */\n\t_fnBuildHead( settings );\n\t_fnDrawHead( settings, settings.aoHeader );\n\t_fnDrawHead( settings, settings.aoFooter );\n\n\t/* Okay to show that something is going on now */\n\t_fnProcessingDisplay( settings, true );\n\n\t/* Calculate sizes for columns */\n\tif ( features.bAutoWidth ) {\n\t\t_fnCalculateColumnWidths( settings );\n\t}\n\n\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\tcolumn = columns[i];\n\n\t\tif ( column.sWidth ) {\n\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t}\n\t}\n\n\t_fnCallbackFire( settings, null, 'preInit', [settings] );\n\n\t// If there is default sorting required - let's do it. The sort function\n\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t// data (show 'loading' message possibly)\n\t_fnReDraw( settings );\n\n\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\tvar dataSrc = _fnDataSource( settings );\n\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t// if there is an ajax source load the data\n\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\n\t\t\t\t// Got the data - add it to the table\n\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t}\n\n\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t// it appear 'fresh'\n\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\n\t\t\t\t_fnReDraw( settings );\n\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t}, settings );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t_fnInitComplete( settings );\n\t\t}\n\t}\n}\n\n\n/**\n * Draw the table for the first time, adding all required features\n *  @param {object} oSettings dataTables settings object\n *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n *    with client-side processing (optional)\n *  @memberof DataTable#oApi\n */\nfunction _fnInitComplete ( settings, json )\n{\n\tsettings._bInitComplete = true;\n\n\t// When data was added after the initialisation (data or Ajax) we need to\n\t// calculate the column sizing\n\tif ( json || settings.oInit.aaData ) {\n\t\t_fnAdjustColumnSizing( settings );\n\t}\n\n\t_fnCallbackFire( settings, null, 'plugin-init', [settings, json] );\n\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n}\n\n\nfunction _fnLengthChange ( settings, val )\n{\n\tvar len = parseInt( val, 10 );\n\tsettings._iDisplayLength = len;\n\n\t_fnLengthOverflow( settings );\n\n\t// Fire length change event\n\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n}\n\n\n/**\n * Generate the node required for user display length changing\n *  @param {object} settings dataTables settings object\n *  @returns {node} Display length feature node\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlLength ( settings )\n{\n\tvar\n\t\tclasses  = settings.oClasses,\n\t\ttableId  = settings.sTableId,\n\t\tmenu     = settings.aLengthMenu,\n\t\td2       = Array.isArray( menu[0] ),\n\t\tlengths  = d2 ? menu[0] : menu,\n\t\tlanguage = d2 ? menu[1] : menu;\n\n\tvar select = $('<select/>', {\n\t\t'name':          tableId+'_length',\n\t\t'aria-controls': tableId,\n\t\t'class':         classes.sLengthSelect\n\t} );\n\n\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\tselect[0][ i ] = new Option(\n\t\t\ttypeof language[i] === 'number' ?\n\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\tlanguage[i],\n\t\t\tlengths[i]\n\t\t);\n\t}\n\n\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\tif ( ! settings.aanFeatures.l ) {\n\t\tdiv[0].id = tableId+'_length';\n\t}\n\n\tdiv.children().append(\n\t\tsettings.oLanguage.sLengthMenu.replace( '_MENU_', select[0].outerHTML )\n\t);\n\n\t// Can't use `select` variable as user might provide their own and the\n\t// reference is broken by the use of outerHTML\n\t$('select', div)\n\t\t.val( settings._iDisplayLength )\n\t\t.on( 'change.DT', function(e) {\n\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t_fnDraw( settings );\n\t\t} );\n\n\t// Update node value whenever anything changes the table's length\n\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\tif ( settings === s ) {\n\t\t\t$('select', div).val( len );\n\t\t}\n\t} );\n\n\treturn div[0];\n}\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Note that most of the paging logic is done in\n * DataTable.ext.pager\n */\n\n/**\n * Generate the node required for default pagination\n *  @param {object} oSettings dataTables settings object\n *  @returns {node} Pagination feature node\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlPaginate ( settings )\n{\n\tvar\n\t\ttype   = settings.sPaginationType,\n\t\tplugin = DataTable.ext.pager[ type ],\n\t\tmodern = typeof plugin === 'function',\n\t\tredraw = function( settings ) {\n\t\t\t_fnDraw( settings );\n\t\t},\n\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\tfeatures = settings.aanFeatures;\n\n\tif ( ! modern ) {\n\t\tplugin.fnInit( settings, node, redraw );\n\t}\n\n\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\tif ( ! features.p )\n\t{\n\t\tnode.id = settings.sTableId+'_paginate';\n\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": function( settings ) {\n\t\t\t\tif ( modern ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\ti, ien;\n\n\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"sName\": \"pagination\"\n\t\t} );\n\t}\n\n\treturn node;\n}\n\n\n/**\n * Alter the display settings to change the page\n *  @param {object} settings DataTables settings object\n *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n *    \"next\" or \"last\" or page number to jump to (integer)\n *  @param [bool] redraw Automatically draw the update or not\n *  @returns {bool} true page has changed, false - no change\n *  @memberof DataTable#oApi\n */\nfunction _fnPageChange ( settings, action, redraw )\n{\n\tvar\n\t\tstart     = settings._iDisplayStart,\n\t\tlen       = settings._iDisplayLength,\n\t\trecords   = settings.fnRecordsDisplay();\n\n\tif ( records === 0 || len === -1 )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( typeof action === \"number\" )\n\t{\n\t\tstart = action * len;\n\n\t\tif ( start > records )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t}\n\telse if ( action == \"first\" )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( action == \"previous\" )\n\t{\n\t\tstart = len >= 0 ?\n\t\t\tstart - len :\n\t\t\t0;\n\n\t\tif ( start < 0 )\n\t\t{\n\t\t  start = 0;\n\t\t}\n\t}\n\telse if ( action == \"next\" )\n\t{\n\t\tif ( start + len < records )\n\t\t{\n\t\t\tstart += len;\n\t\t}\n\t}\n\telse if ( action == \"last\" )\n\t{\n\t\tstart = Math.floor( (records-1) / len) * len;\n\t}\n\telse\n\t{\n\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t}\n\n\tvar changed = settings._iDisplayStart !== start;\n\tsettings._iDisplayStart = start;\n\n\tif ( changed ) {\n\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\n\t\tif ( redraw ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t}\n\telse {\n\t\t// No change event - paging was called, but no change\n\t\t_fnCallbackFire( settings, null, 'page-nc', [settings] );\n\t}\n\n\treturn changed;\n}\n\n\n\n/**\n * Generate the node required for the processing node\n *  @param {object} settings dataTables settings object\n *  @returns {node} Processing element\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlProcessing ( settings )\n{\n\treturn $('<div/>', {\n\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t'class': settings.oClasses.sProcessing,\n\t\t\t'role': 'status'\n\t\t} )\n\t\t.html( settings.oLanguage.sProcessing )\n\t\t.append('<div><div></div><div></div><div></div><div></div></div>')\n\t\t.insertBefore( settings.nTable )[0];\n}\n\n\n/**\n * Display or hide the processing indicator\n *  @param {object} settings dataTables settings object\n *  @param {bool} show Show the processing indicator (true) or not (false)\n *  @memberof DataTable#oApi\n */\nfunction _fnProcessingDisplay ( settings, show )\n{\n\tif ( settings.oFeatures.bProcessing ) {\n\t\t$(settings.aanFeatures.r).css( 'display', show ? 'block' : 'none' );\n\t}\n\n\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n}\n\n/**\n * Add any control elements for the table - specifically scrolling\n *  @param {object} settings dataTables settings object\n *  @returns {node} Node to add to the DOM\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlTable ( settings )\n{\n\tvar table = $(settings.nTable);\n\n\t// Scrolling from here on in\n\tvar scroll = settings.oScroll;\n\n\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\treturn settings.nTable;\n\t}\n\n\tvar scrollX = scroll.sX;\n\tvar scrollY = scroll.sY;\n\tvar classes = settings.oClasses;\n\tvar caption = table.children('caption');\n\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\tvar headerClone = $( table[0].cloneNode(false) );\n\tvar footerClone = $( table[0].cloneNode(false) );\n\tvar footer = table.children('tfoot');\n\tvar _div = '<div/>';\n\tvar size = function ( s ) {\n\t\treturn !s ? null : _fnStringToCss( s );\n\t};\n\n\tif ( ! footer.length ) {\n\t\tfooter = null;\n\t}\n\n\t/*\n\t * The HTML structure that we want to generate in this function is:\n\t *  div - scroller\n\t *    div - scroll head\n\t *      div - scroll head inner\n\t *        table - scroll head table\n\t *          thead - thead\n\t *    div - scroll body\n\t *      table - table (master table)\n\t *        thead - thead clone for sizing\n\t *        tbody - tbody\n\t *    div - scroll foot\n\t *      div - scroll foot inner\n\t *        table - scroll foot table\n\t *          tfoot - tfoot\n\t */\n\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t} )\n\t\t\t\t.append( table )\n\t\t);\n\n\tif ( footer ) {\n\t\tscroller.append(\n\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t);\n\t}\n\n\tvar children = scroller.children();\n\tvar scrollHead = children[0];\n\tvar scrollBody = children[1];\n\tvar scrollFoot = footer ? children[2] : null;\n\n\t// When the body is scrolled, then we also want to scroll the headers\n\tif ( scrollX ) {\n\t\t$(scrollBody).on( 'scroll.DT', function (e) {\n\t\t\tvar scrollLeft = this.scrollLeft;\n\n\t\t\tscrollHead.scrollLeft = scrollLeft;\n\n\t\t\tif ( footer ) {\n\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t}\n\t\t} );\n\t}\n\n\t$(scrollBody).css('max-height', scrollY);\n\tif (! scroll.bCollapse) {\n\t\t$(scrollBody).css('height', scrollY);\n\t}\n\n\tsettings.nScrollHead = scrollHead;\n\tsettings.nScrollBody = scrollBody;\n\tsettings.nScrollFoot = scrollFoot;\n\n\t// On redraw - align columns\n\tsettings.aoDrawCallback.push( {\n\t\t\"fn\": _fnScrollDraw,\n\t\t\"sName\": \"scrolling\"\n\t} );\n\n\treturn scroller[0];\n}\n\n\n\n/**\n * Update the header, footer and body tables for resizing - i.e. column\n * alignment.\n *\n * Welcome to the most horrible function DataTables. The process that this\n * function follows is basically:\n *   1. Re-create the table inside the scrolling div\n *   2. Take live measurements from the DOM\n *   3. Apply the measurements to align the columns\n *   4. Clean up\n *\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnScrollDraw ( settings )\n{\n\t// Given that this is such a monster function, a lot of variables are use\n\t// to try and keep the minimised size as small as possible\n\tvar\n\t\tscroll         = settings.oScroll,\n\t\tscrollX        = scroll.sX,\n\t\tscrollXInner   = scroll.sXInner,\n\t\tscrollY        = scroll.sY,\n\t\tbarWidth       = scroll.iBarWidth,\n\t\tdivHeader      = $(settings.nScrollHead),\n\t\tdivHeaderStyle = divHeader[0].style,\n\t\tdivHeaderInner = divHeader.children('div'),\n\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\tdivBodyEl      = settings.nScrollBody,\n\t\tdivBody        = $(divBodyEl),\n\t\tdivBodyStyle   = divBodyEl.style,\n\t\tdivFooter      = $(settings.nScrollFoot),\n\t\tdivFooterInner = divFooter.children('div'),\n\t\tdivFooterTable = divFooterInner.children('table'),\n\t\theader         = $(settings.nTHead),\n\t\ttable          = $(settings.nTable),\n\t\ttableEl        = table[0],\n\t\ttableStyle     = tableEl.style,\n\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\tbrowser        = settings.oBrowser,\n\t\tie67           = browser.bScrollOversize,\n\t\tdtHeaderCells  = _pluck( settings.aoColumns, 'nTh' ),\n\t\theaderTrgEls, footerTrgEls,\n\t\theaderSrcEls, footerSrcEls,\n\t\theaderCopy, footerCopy,\n\t\theaderWidths=[], footerWidths=[],\n\t\theaderContent=[], footerContent=[],\n\t\tidx, correction, sanityWidth,\n\t\tzeroOut = function(nSizer) {\n\t\t\tvar style = nSizer.style;\n\t\t\tstyle.paddingTop = \"0\";\n\t\t\tstyle.paddingBottom = \"0\";\n\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\tstyle.height = 0;\n\t\t};\n\n\t// If the scrollbar visibility has changed from the last draw, we need to\n\t// adjust the column sizes as the table width will have changed to account\n\t// for the scrollbar\n\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\n\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t_fnAdjustColumnSizing( settings );\n\t\treturn; // adjust column sizing will call this function again\n\t}\n\telse {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t}\n\n\t/*\n\t * 1. Re-create the table inside the scrolling div\n\t */\n\n\t// Remove the old minimised thead and tfoot elements in the inner table\n\ttable.children('thead, tfoot').remove();\n\n\tif ( footer ) {\n\t\tfooterCopy = footer.clone().prependTo( table );\n\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\tfooterSrcEls = footerCopy.find('tr');\n\t\tfooterCopy.find('[id]').removeAttr('id');\n\t}\n\n\t// Clone the current header and footer elements and then place it into the inner table\n\theaderCopy = header.clone().prependTo( table );\n\theaderTrgEls = header.find('tr'); // original header is in its own table\n\theaderSrcEls = headerCopy.find('tr');\n\theaderCopy.find('th, td').removeAttr('tabindex');\n\theaderCopy.find('[id]').removeAttr('id');\n\n\n\t/*\n\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t */\n\n\t// Remove old sizing and apply the calculated column widths\n\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t// calculated sizes to this header\n\tif ( ! scrollX )\n\t{\n\t\tdivBodyStyle.width = '100%';\n\t\tdivHeader[0].style.width = '100%';\n\t}\n\n\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t} );\n\n\tif ( footer ) {\n\t\t_fnApplyToChildren( function(n) {\n\t\t\tn.style.width = \"\";\n\t\t}, footerSrcEls );\n\t}\n\n\t// Size the table as a whole\n\tsanityWidth = table.outerWidth();\n\tif ( scrollX === \"\" ) {\n\t\t// No x scrolling\n\t\ttableStyle.width = \"100%\";\n\n\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t// into account.\n\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t) {\n\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t}\n\n\t\t// Recalculate the sanity width\n\t\tsanityWidth = table.outerWidth();\n\t}\n\telse if ( scrollXInner !== \"\" ) {\n\t\t// legacy x scroll inner has been given - use it\n\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\n\t\t// Recalculate the sanity width\n\t\tsanityWidth = table.outerWidth();\n\t}\n\n\t// Hidden header should have zero height, so remove padding and borders. Then\n\t// set the width based on the real headers\n\n\t// Apply all styles in one pass\n\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\n\t// Read all widths in next pass\n\t_fnApplyToChildren( function(nSizer) {\n\t\tvar style = window.getComputedStyle ?\n\t\t\twindow.getComputedStyle(nSizer).width :\n\t\t\t_fnStringToCss( $(nSizer).width() );\n\n\t\theaderContent.push( nSizer.innerHTML );\n\t\theaderWidths.push( style );\n\t}, headerSrcEls );\n\n\t// Apply all widths in final pass\n\t_fnApplyToChildren( function(nToSize, i) {\n\t\tnToSize.style.width = headerWidths[i];\n\t}, headerTrgEls );\n\n\t$(headerSrcEls).css('height', 0);\n\n\t/* Same again with the footer if we have one */\n\tif ( footer )\n\t{\n\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\tfooterContent.push( nSizer.innerHTML );\n\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t}, footerSrcEls );\n\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = footerWidths[i];\n\t\t}, footerTrgEls );\n\n\t\t$(footerSrcEls).height(0);\n\t}\n\n\n\t/*\n\t * 3. Apply the measurements\n\t */\n\n\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t// the content of the cell so that the width applied to the header and body\n\t// both match, but we want to hide it completely. We want to also fix their\n\t// width to what they currently are\n\t_fnApplyToChildren( function(nSizer, i) {\n\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+headerContent[i]+'</div>';\n\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\tnSizer.style.width = headerWidths[i];\n\t}, headerSrcEls );\n\n\tif ( footer )\n\t{\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = '<div class=\"dataTables_sizing\">'+footerContent[i]+'</div>';\n\t\t\tnSizer.childNodes[0].style.height = \"0\";\n\t\t\tnSizer.childNodes[0].style.overflow = \"hidden\";\n\t\t\tnSizer.style.width = footerWidths[i];\n\t\t}, footerSrcEls );\n\t}\n\n\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\tif ( Math.round(table.outerWidth()) < Math.round(sanityWidth) )\n\t{\n\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\tsanityWidth+barWidth :\n\t\t\t\tsanityWidth;\n\n\t\t// IE6/7 are a law unto themselves...\n\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t) {\n\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t}\n\n\t\t// And give the user a warning that we've stopped the table getting too small\n\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t}\n\t}\n\telse\n\t{\n\t\tcorrection = '100%';\n\t}\n\n\t// Apply to the container elements\n\tdivBodyStyle.width = _fnStringToCss( correction );\n\tdivHeaderStyle.width = _fnStringToCss( correction );\n\n\tif ( footer ) {\n\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t}\n\n\n\t/*\n\t * 4. Clean up\n\t */\n\tif ( ! scrollY ) {\n\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t */\n\t\tif ( ie67 ) {\n\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t}\n\t}\n\n\t/* Finally set the width's of the header and footer tables */\n\tvar iOuterWidth = table.outerWidth();\n\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\n\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\n\tif ( footer ) {\n\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t}\n\n\t// Correct DOM ordering for colgroup - comes before the thead\n\ttable.children('colgroup').insertBefore( table.children('thead') );\n\n\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\tdivBody.trigger('scroll');\n\n\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t// only if we aren't holding the position\n\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\tdivBodyEl.scrollTop = 0;\n\t}\n}\n\n\n\n/**\n * Apply a given function to the display child nodes of an element array (typically\n * TD children of TR rows\n *  @param {function} fn Method to apply to the objects\n *  @param array {nodes} an1 List of elements to look through for display children\n *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n *  @memberof DataTable#oApi\n */\nfunction _fnApplyToChildren( fn, an1, an2 )\n{\n\tvar index=0, i=0, iLen=an1.length;\n\tvar nNode1, nNode2;\n\n\twhile ( i < iLen ) {\n\t\tnNode1 = an1[i].firstChild;\n\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\n\t\twhile ( nNode1 ) {\n\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\tif ( an2 ) {\n\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t}\n\n\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t}\n\n\t\ti++;\n\t}\n}\n\n\n\nvar __re_html_remove = /<.*?>/g;\n\n\n/**\n * Calculate the width of columns for the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnCalculateColumnWidths ( oSettings )\n{\n\tvar\n\t\ttable = oSettings.nTable,\n\t\tcolumns = oSettings.aoColumns,\n\t\tscroll = oSettings.oScroll,\n\t\tscrollY = scroll.sY,\n\t\tscrollX = scroll.sX,\n\t\tscrollXInner = scroll.sXInner,\n\t\tcolumnCount = columns.length,\n\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\theaderCells = $('th', oSettings.nTHead),\n\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\ttableContainer = table.parentNode,\n\t\tuserInputs = false,\n\t\ti, column, columnIdx, width, outerWidth,\n\t\tbrowser = oSettings.oBrowser,\n\t\tie67 = browser.bScrollOversize;\n\n\tvar styleWidth = table.style.width;\n\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\ttableWidthAttr = styleWidth;\n\t}\n\n\t/* Convert any user input sizes into pixel sizes */\n\tvar sizes = _fnConvertToWidth(_pluck(columns, 'sWidthOrig'), tableContainer);\n\n\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\tif ( column.sWidth !== null ) {\n\t\t\tcolumn.sWidth = sizes[i];\n\n\t\t\tuserInputs = true;\n\t\t}\n\t}\n\n\t/* If the number of columns in the DOM equals the number that we have to\n\t * process in DataTables, then we can use the offsets that are created by\n\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t * nor scrolling used\n\t */\n\tif ( ie67 || ! userInputs && ! scrollX && ! scrollY &&\n\t     columnCount == _fnVisbleColumns( oSettings ) &&\n\t     columnCount == headerCells.length\n\t) {\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tvar colIdx = _fnVisibleToColumnIndex( oSettings, i );\n\n\t\t\tif ( colIdx !== null ) {\n\t\t\t\tcolumns[ colIdx ].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t// Otherwise construct a single row, worst case, table with the widest\n\t\t// node in the data, assign any user defined widths, then insert it into\n\t\t// the DOM and allow the browser to do all the hard work of calculating\n\t\t// table widths\n\t\tvar tmpTable = $(table).clone() // don't use cloneNode - IE8 will remove events on the main table\n\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t.removeAttr( 'id' );\n\n\t\t// Clean up the table body\n\t\ttmpTable.find('tbody tr').remove();\n\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\n\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t// real header and footer are contained in different table tags\n\t\ttmpTable.find('thead, tfoot').remove();\n\t\ttmpTable\n\t\t\t.append( $(oSettings.nTHead).clone() )\n\t\t\t.append( $(oSettings.nTFoot).clone() );\n\n\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\n\t\t// Apply custom sizing to the cloned header\n\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t'';\n\n\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t// width the column requires, then it will have no effect\n\t\t\tif ( column.sWidthOrig && scrollX ) {\n\t\t\t\t$( headerCells[i] ).append( $('<div/>').css( {\n\t\t\t\t\twidth: column.sWidthOrig,\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tborder: 0,\n\t\t\t\t\theight: 1\n\t\t\t\t} ) );\n\t\t\t}\n\t\t}\n\n\t\t// Find the widest cell for each column and put it into the table\n\t\tif ( oSettings.aoData.length ) {\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\tcolumn = columns[ columnIdx ];\n\n\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t.clone( false )\n\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t.appendTo( tr );\n\t\t\t}\n\t\t}\n\n\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t// duplicated in the dom (radio elements for example)\n\t\t$('[name]', tmpTable).removeAttr('name');\n\n\t\t// Table has been built, attach to the document so we can work with it.\n\t\t// A holding element is used, positioned at the top of the container\n\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t// needed\n\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\theight: 1,\n\t\t\t\t\tright: 0,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} :\n\t\t\t\t{}\n\t\t\t)\n\t\t\t.append( tmpTable )\n\t\t\t.appendTo( tableContainer );\n\n\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t// is. This results in slightly different, but I think correct behaviour\n\t\tif ( scrollX && scrollXInner ) {\n\t\t\ttmpTable.width( scrollXInner );\n\t\t}\n\t\telse if ( scrollX ) {\n\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\ttmpTable.removeAttr('width');\n\n\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t// collapse\n\t\t\tif ( tmpTable.width() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t\t}\n\t\t}\n\t\telse if ( scrollY ) {\n\t\t\ttmpTable.width( tableContainer.clientWidth );\n\t\t}\n\t\telse if ( tableWidthAttr ) {\n\t\t\ttmpTable.width( tableWidthAttr );\n\t\t}\n\n\t\t// Get the width of each column in the constructed table - we need to\n\t\t// know the inner width (so it can be assigned to the other table's\n\t\t// cells) and the outer width so we can calculate the full width of the\n\t\t// table. This is safe since DataTables requires a unique cell for each\n\t\t// column, but if ever a header can span multiple columns, this will\n\t\t// need to be modified.\n\t\tvar total = 0;\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tvar cell = $(headerCells[i]);\n\t\t\tvar border = cell.outerWidth() - cell.width();\n\n\t\t\t// Use getBounding... where possible (not IE8-) because it can give\n\t\t\t// sub-pixel accuracy, which we then want to round up!\n\t\t\tvar bounding = browser.bBounding ?\n\t\t\t\tMath.ceil( headerCells[i].getBoundingClientRect().width ) :\n\t\t\t\tcell.outerWidth();\n\n\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t// of the table might not equal the total given here (IE!).\n\t\t\ttotal += bounding;\n\n\t\t\t// Width for each column to use\n\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding - border );\n\t\t}\n\n\t\ttable.style.width = _fnStringToCss( total );\n\n\t\t// Finished with the table - ditch it\n\t\tholder.remove();\n\t}\n\n\t// If there is a width attr, we want to attach an event listener which\n\t// allows the table sizing to automatically adjust when the window is\n\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t// CSS is a relative value or absolute - DOM read is always px.\n\tif ( tableWidthAttr ) {\n\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t}\n\n\tif ( (tableWidthAttr || scrollX) && ! oSettings._reszEvt ) {\n\t\tvar bindResize = function () {\n\t\t\t$(window).on('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t} ) );\n\t\t};\n\n\t\t// IE6/7 will crash if we bind a resize event handler on page load.\n\t\t// To be removed in 1.11 which drops IE6/7 support\n\t\tif ( ie67 ) {\n\t\t\tsetTimeout( bindResize, 1000 );\n\t\t}\n\t\telse {\n\t\t\tbindResize();\n\t\t}\n\n\t\toSettings._reszEvt = true;\n\t}\n}\n\n\n/**\n * Throttle the calls to a function. Arguments and context are maintained for\n * the throttled function\n *  @param {function} fn Function to be called\n *  @param {int} [freq=200] call frequency in mS\n *  @returns {function} wrapped function\n *  @memberof DataTable#oApi\n */\nvar _fnThrottle = DataTable.util.throttle;\n\n\n/**\n * Convert a set of CSS units width to pixels (e.g. 2em)\n *  @param {string[]} widths widths to be converted\n *  @param {node} parent parent to get the with for (required for relative widths) - optional\n *  @returns {int[]} widths in pixels\n *  @memberof DataTable#oApi\n */\nfunction _fnConvertToWidth ( widths, parent )\n{\n\tvar els = [];\n\tvar results = [];\n\n\t// Add the elements in a single loop so we only need to reflow once\n\tfor (var i=0 ; i<widths.length ; i++) {\n\t\tif (widths[i]) {\n\t\t\tels.push(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( 'width', _fnStringToCss( widths[i] ) )\n\t\t\t\t\t.appendTo( parent || document.body )\n\t\t\t)\n\t\t}\n\t\telse {\n\t\t\tels.push(null);\n\t\t}\n\t}\n\n\t// Get the sizes (will reflow once)\n\tfor (var i=0 ; i<widths.length ; i++) {\n\t\tresults.push(els[i] ? els[i][0].offsetWidth : null);\n\t}\n\n\t// Tidy\n\t$(els).remove();\n\n\treturn results;\n}\n\n\n/**\n * Get the widest node\n *  @param {object} settings dataTables settings object\n *  @param {int} colIdx column of interest\n *  @returns {node} widest table node\n *  @memberof DataTable#oApi\n */\nfunction _fnGetWidestNode( settings, colIdx )\n{\n\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\tif ( idx < 0 ) {\n\t\treturn null;\n\t}\n\n\tvar data = settings.aoData[ idx ];\n\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\tdata.anCells[ colIdx ];\n}\n\n\n/**\n * Get the maximum strlen for each data column\n *  @param {object} settings dataTables settings object\n *  @param {int} colIdx column of interest\n *  @returns {string} max string length for each column\n *  @memberof DataTable#oApi\n */\nfunction _fnGetMaxLenString( settings, colIdx )\n{\n\tvar s, max=-1, maxIdx = -1;\n\n\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\ts = s.replace( __re_html_remove, '' );\n\t\ts = s.replace( /&nbsp;/g, ' ' );\n\n\t\tif ( s.length > max ) {\n\t\t\tmax = s.length;\n\t\t\tmaxIdx = i;\n\t\t}\n\t}\n\n\treturn maxIdx;\n}\n\n\n/**\n * Append a CSS unit (only if required) to a string\n *  @param {string} value to css-ify\n *  @returns {string} value with css unit\n *  @memberof DataTable#oApi\n */\nfunction _fnStringToCss( s )\n{\n\tif ( s === null ) {\n\t\treturn '0px';\n\t}\n\n\tif ( typeof s == 'number' ) {\n\t\treturn s < 0 ?\n\t\t\t'0px' :\n\t\t\ts+'px';\n\t}\n\n\t// Check it has a unit character already\n\treturn s.match(/\\d$/) ?\n\t\ts+'px' :\n\t\ts;\n}\n\n\n\nfunction _fnSortFlatten ( settings )\n{\n\tvar\n\t\ti, iLen, k, kLen,\n\t\taSort = [],\n\t\taiOrig = [],\n\t\taoColumns = settings.aoColumns,\n\t\taDataSort, iCol, sType, srcCol,\n\t\tfixed = settings.aaSortingFixed,\n\t\tfixedObj = $.isPlainObject( fixed ),\n\t\tnestedSort = [],\n\t\tadd = function ( a ) {\n\t\t\tif ( a.length && ! Array.isArray( a[0] ) ) {\n\t\t\t\t// 1D array\n\t\t\t\tnestedSort.push( a );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// 2D array\n\t\t\t\t$.merge( nestedSort, a );\n\t\t\t}\n\t\t};\n\n\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t// specified\n\tif ( Array.isArray( fixed ) ) {\n\t\tadd( fixed );\n\t}\n\n\tif ( fixedObj && fixed.pre ) {\n\t\tadd( fixed.pre );\n\t}\n\n\tadd( settings.aaSorting );\n\n\tif (fixedObj && fixed.post ) {\n\t\tadd( fixed.post );\n\t}\n\n\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t{\n\t\tsrcCol = nestedSort[i][0];\n\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\n\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t{\n\t\t\tiCol = aDataSort[k];\n\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\n\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\tnestedSort[i]._idx = $.inArray( nestedSort[i][1], aoColumns[iCol].asSorting );\n\t\t\t}\n\n\t\t\taSort.push( {\n\t\t\t\tsrc:       srcCol,\n\t\t\t\tcol:       iCol,\n\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\ttype:      sType,\n\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t} );\n\t\t}\n\t}\n\n\treturn aSort;\n}\n\n/**\n * Change the order of the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n *  @todo This really needs split up!\n */\nfunction _fnSort ( oSettings )\n{\n\tvar\n\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\tsDataType, nTh,\n\t\taiOrig = [],\n\t\toExtSort = DataTable.ext.type.order,\n\t\taoData = oSettings.aoData,\n\t\taoColumns = oSettings.aoColumns,\n\t\taDataSort, data, iCol, sType, oSort,\n\t\tformatters = 0,\n\t\tsortCol,\n\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\taSort;\n\n\t// Resolve any column types that are unknown due to addition or invalidation\n\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t//   data is going to be used in the table?\n\t_fnColumnTypes( oSettings );\n\n\taSort = _fnSortFlatten( oSettings );\n\n\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\tsortCol = aSort[i];\n\n\t\t// Track if we can use the fast sort algorithm\n\t\tif ( sortCol.formatter ) {\n\t\t\tformatters++;\n\t\t}\n\n\t\t// Load the data needed for the sort, for each cell\n\t\t_fnSortData( oSettings, sortCol.col );\n\t}\n\n\t/* No sorting required if server-side or no sorting array */\n\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t{\n\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t}\n\n\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t *  fnLocalSorting = function(a,b){\n\t\t *    var iTest;\n\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t *      if (iTest !== 0)\n\t\t *        return iTest;\n\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t *    if (iTest !== 0)\n\t\t *      return iTest;\n\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t *  }\n\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t * positions in the original data array to provide a stable sort.\n\t\t *\n\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t * methods which do not have a pre-sort formatting function.\n\t\t */\n\t\tif ( formatters === aSort.length ) {\n\t\t\t// All sort types have formatting functions\n\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\tvar\n\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tx = aiOrig[a];\n\t\t\t\ty = aiOrig[b];\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t// methods.\n\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\tvar\n\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn test;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tx = aiOrig[a];\n\t\t\t\ty = aiOrig[b];\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t} );\n\t\t}\n\t}\n\n\t/* Tell the draw function that we have sorted the data */\n\toSettings.bSorted = true;\n}\n\n\nfunction _fnSortAria ( settings )\n{\n\tvar label;\n\tvar nextSort;\n\tvar columns = settings.aoColumns;\n\tvar aSort = _fnSortFlatten( settings );\n\tvar oAria = settings.oLanguage.oAria;\n\n\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t// attributes as needed)\n\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t{\n\t\tvar col = columns[i];\n\t\tvar asSorting = col.asSorting;\n\t\tvar sTitle = col.ariaTitle || col.sTitle.replace( /<.*?>/g, \"\" );\n\t\tvar th = col.nTh;\n\n\t\t// IE7 is throwing an error when setting these properties with jQuery's\n\t\t// attr() and removeAttr() methods...\n\t\tth.removeAttribute('aria-sort');\n\n\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\tif ( col.bSortable ) {\n\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\tth.setAttribute('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnextSort = asSorting[0];\n\t\t\t}\n\n\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\toAria.sSortAscending :\n\t\t\t\toAria.sSortDescending\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tlabel = sTitle;\n\t\t}\n\n\t\tth.setAttribute('aria-label', label);\n\t}\n}\n\n\n/**\n * Function to run on user sort request\n *  @param {object} settings dataTables settings object\n *  @param {node} attachTo node to attach the handler to\n *  @param {int} colIdx column sorting index\n *  @param {boolean} [append=false] Append the requested sort to the existing\n *    sort if true (i.e. multi-column sort)\n *  @param {function} [callback] callback function\n *  @memberof DataTable#oApi\n */\nfunction _fnSortListener ( settings, colIdx, append, callback )\n{\n\tvar col = settings.aoColumns[ colIdx ];\n\tvar sorting = settings.aaSorting;\n\tvar asSorting = col.asSorting;\n\tvar nextSortIdx;\n\tvar next = function ( a, overflow ) {\n\t\tvar idx = a._idx;\n\t\tif ( idx === undefined ) {\n\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t}\n\n\t\treturn idx+1 < asSorting.length ?\n\t\t\tidx+1 :\n\t\t\toverflow ?\n\t\t\t\tnull :\n\t\t\t\t0;\n\t};\n\n\t// Convert to 2D array if needed\n\tif ( typeof sorting[0] === 'number' ) {\n\t\tsorting = settings.aaSorting = [ sorting ];\n\t}\n\n\t// If appending the sort then we are multi-column sorting\n\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t// Are we already doing some kind of sort on this column?\n\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\n\t\tif ( sortIdx !== -1 ) {\n\t\t\t// Yes, modify the sort\n\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\n\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t}\n\n\t\t\tif ( nextSortIdx === null ) {\n\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// No sort on this column yet\n\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t}\n\t}\n\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t// Single column - already sorting on this column, modify the sort\n\t\tnextSortIdx = next( sorting[0] );\n\n\t\tsorting.length = 1;\n\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\tsorting[0]._idx = nextSortIdx;\n\t}\n\telse {\n\t\t// Single column - sort only on this column\n\t\tsorting.length = 0;\n\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\tsorting[0]._idx = 0;\n\t}\n\n\t// Run the sort by calling a full redraw\n\t_fnReDraw( settings );\n\n\t// callback used for async user interaction\n\tif ( typeof callback == 'function' ) {\n\t\tcallback( settings );\n\t}\n}\n\n\n/**\n * Attach a sort handler (click) to a node\n *  @param {object} settings dataTables settings object\n *  @param {node} attachTo node to attach the handler to\n *  @param {int} colIdx column sorting index\n *  @param {function} [callback] callback function\n *  @memberof DataTable#oApi\n */\nfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n{\n\tvar col = settings.aoColumns[ colIdx ];\n\n\t_fnBindAction( attachTo, {}, function (e) {\n\t\t/* If the column is not sortable - don't to anything */\n\t\tif ( col.bSortable === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If processing is enabled use a timeout to allow the processing\n\t\t// display to be shown - otherwise to it synchronously\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t_fnProcessingDisplay( settings, true );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\n\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t// processing display\n\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t}\n\t\telse {\n\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\t\t}\n\t} );\n}\n\n\n/**\n * Set the sorting classes on table's body, Note: it is safe to call this function\n * when bSort and bSortClasses are false\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnSortingClasses( settings )\n{\n\tvar oldSort = settings.aLastSort;\n\tvar sortClass = settings.oClasses.sSortColumn;\n\tvar sort = _fnSortFlatten( settings );\n\tvar features = settings.oFeatures;\n\tvar i, ien, colIdx;\n\n\tif ( features.bSort && features.bSortClasses ) {\n\t\t// Remove old sorting classes\n\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\tcolIdx = oldSort[i].src;\n\n\t\t\t// Remove column sorting\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\n\t\t// Add new column sorting\n\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\tcolIdx = sort[i].src;\n\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\t}\n\n\tsettings.aLastSort = sort;\n}\n\n\n// Get the data to sort a column, be it from cache, fresh (populating the\n// cache), or from a sort formatter\nfunction _fnSortData( settings, idx )\n{\n\t// Custom sorting function - provided by the sort data type\n\tvar column = settings.aoColumns[ idx ];\n\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\tvar customData;\n\n\tif ( customSort ) {\n\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t);\n\t}\n\n\t// Use / populate cache\n\tvar row, cellData;\n\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\n\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\trow = settings.aoData[i];\n\n\t\tif ( ! row._aSortData ) {\n\t\t\trow._aSortData = [];\n\t\t}\n\n\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\tcellData = customSort ?\n\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\n\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\tformatter( cellData ) :\n\t\t\t\tcellData;\n\t\t}\n\t}\n}\n\n\n\n/**\n * Save the state of a table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnSaveState ( settings )\n{\n\tif (settings._bLoadingState) {\n\t\treturn;\n\t}\n\n\t/* Store the interesting variables */\n\tvar state = {\n\t\ttime:    +new Date(),\n\t\tstart:   settings._iDisplayStart,\n\t\tlength:  settings._iDisplayLength,\n\t\torder:   $.extend( true, [], settings.aaSorting ),\n\t\tsearch:  _fnSearchToCamel( settings.oPreviousSearch ),\n\t\tcolumns: $.map( settings.aoColumns, function ( col, i ) {\n\t\t\treturn {\n\t\t\t\tvisible: col.bVisible,\n\t\t\t\tsearch: _fnSearchToCamel( settings.aoPreSearchCols[i] )\n\t\t\t};\n\t\t} )\n\t};\n\n\tsettings.oSavedState = state;\n\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\n\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t{\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t}\t\n}\n\n\n/**\n * Attempt to load a saved table state\n *  @param {object} oSettings dataTables settings object\n *  @param {object} oInit DataTables init object so we can override settings\n *  @param {function} callback Callback to execute when the state has been loaded\n *  @memberof DataTable#oApi\n */\nfunction _fnLoadState ( settings, oInit, callback )\n{\n\tif ( ! settings.oFeatures.bStateSave ) {\n\t\tcallback();\n\t\treturn;\n\t}\n\n\tvar loaded = function(state) {\n\t\t_fnImplementState(settings, state, callback);\n\t}\n\n\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\n\tif ( state !== undefined ) {\n\t\t_fnImplementState( settings, state, callback );\n\t}\n\t// otherwise, wait for the loaded callback to be executed\n\n\treturn true;\n}\n\nfunction _fnImplementState ( settings, s, callback) {\n\tvar i, ien;\n\tvar columns = settings.aoColumns;\n\tsettings._bLoadingState = true;\n\n\t// When StateRestore was introduced the state could now be implemented at any time\n\t// Not just initialisation. To do this an api instance is required in some places\n\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\n\tif ( ! s || ! s.time ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t// cancelling of loading by returning false\n\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\tif ( $.inArray( false, abStateLoad ) !== -1 ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Reject old data\n\tvar duration = settings.iStateDuration;\n\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Number of columns have changed - all bets are off, no restore of settings\n\tif ( s.columns && columns.length !== s.columns.length ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Store the saved state so it might be accessed at any time\n\tsettings.oLoadedState = $.extend( true, {}, s );\n\n\t// Page Length\n\tif ( s.length !== undefined ) {\n\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\tif (api) {\n\t\t\tapi.page.len(s.length)\n\t\t}\n\t\telse {\n\t\t\tsettings._iDisplayLength   = s.length;\n\t\t}\n\t}\n\n\t// Restore key features - todo - for 1.11 this needs to be done by\n\t// subscribed events\n\tif ( s.start !== undefined ) {\n\t\tif(api === null) {\n\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t}\n\t\telse {\n\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t}\n\t}\n\n\t// Order\n\tif ( s.order !== undefined ) {\n\t\tsettings.aaSorting = [];\n\t\t$.each( s.order, function ( i, col ) {\n\t\t\tsettings.aaSorting.push( col[0] >= columns.length ?\n\t\t\t\t[ 0, col[1] ] :\n\t\t\t\tcol\n\t\t\t);\n\t\t} );\n\t}\n\n\t// Search\n\tif ( s.search !== undefined ) {\n\t\t$.extend( settings.oPreviousSearch, _fnSearchToHung( s.search ) );\n\t}\n\n\t// Columns\n\tif ( s.columns ) {\n\t\tfor ( i=0, ien=s.columns.length ; i<ien ; i++ ) {\n\t\t\tvar col = s.columns[i];\n\n\t\t\t// Visibility\n\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\tif (api) {\n\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Search\n\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t$.extend( settings.aoPreSearchCols[i], _fnSearchToHung( col.search ) );\n\t\t\t}\n\t\t}\n\t\t\n\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\tif (api) {\n\t\t\tapi.columns.adjust();\n\t\t}\n\t}\n\n\tsettings._bLoadingState = false;\n\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\tcallback();\n};\n\n\n/**\n * Return the settings object for a particular table\n *  @param {node} table table we are using as a dataTable\n *  @returns {object} Settings object - or null if not found\n *  @memberof DataTable#oApi\n */\nfunction _fnSettingsFromNode ( table )\n{\n\tvar settings = DataTable.settings;\n\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\n\treturn idx !== -1 ?\n\t\tsettings[ idx ] :\n\t\tnull;\n}\n\n\n/**\n * Log an error message\n *  @param {object} settings dataTables settings object\n *  @param {int} level log error messages, or display them to the user\n *  @param {string} msg error message\n *  @param {int} tn Technical note id to get more information about the error.\n *  @memberof DataTable#oApi\n */\nfunction _fnLog( settings, level, msg, tn )\n{\n\tmsg = 'DataTables warning: '+\n\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\n\tif ( tn ) {\n\t\tmsg += '. For more information about this error, please see '+\n\t\t'https://datatables.net/tn/'+tn;\n\t}\n\n\tif ( ! level  ) {\n\t\t// Backwards compatibility pre 1.10\n\t\tvar ext = DataTable.ext;\n\t\tvar type = ext.sErrMode || ext.errMode;\n\n\t\tif ( settings ) {\n\t\t\t_fnCallbackFire( settings, null, 'error', [ settings, tn, msg ] );\n\t\t}\n\n\t\tif ( type == 'alert' ) {\n\t\t\talert( msg );\n\t\t}\n\t\telse if ( type == 'throw' ) {\n\t\t\tthrow new Error(msg);\n\t\t}\n\t\telse if ( typeof type == 'function' ) {\n\t\t\ttype( settings, tn, msg );\n\t\t}\n\t}\n\telse if ( window.console && console.log ) {\n\t\tconsole.log( msg );\n\t}\n}\n\n\n/**\n * See if a property is defined on one object, if so assign it to the other object\n *  @param {object} ret target object\n *  @param {object} src source object\n *  @param {string} name property\n *  @param {string} [mappedName] name to map too - optional, name used if not given\n *  @memberof DataTable#oApi\n */\nfunction _fnMap( ret, src, name, mappedName )\n{\n\tif ( Array.isArray( name ) ) {\n\t\t$.each( name, function (i, val) {\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnMap( ret, src, val );\n\t\t\t}\n\t\t} );\n\n\t\treturn;\n\t}\n\n\tif ( mappedName === undefined ) {\n\t\tmappedName = name;\n\t}\n\n\tif ( src[name] !== undefined ) {\n\t\tret[mappedName] = src[name];\n\t}\n}\n\n\n/**\n * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n * shallow copy arrays. The reason we need to do this, is that we don't want to\n * deep copy array init values (such as aaSorting) since the dev wouldn't be\n * able to override them, but we do want to deep copy arrays.\n *  @param {object} out Object to extend\n *  @param {object} extender Object from which the properties will be applied to\n *      out\n *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n *      independent copy with the exception of the `data` or `aaData` parameters\n *      if they are present. This is so you can pass in a collection to\n *      DataTables and have that used as your data source without breaking the\n *      references\n *  @returns {object} out Reference, just for convenience - out === the return.\n *  @memberof DataTable#oApi\n *  @todo This doesn't take account of arrays inside the deep copied objects.\n */\nfunction _fnExtend( out, extender, breakRefs )\n{\n\tvar val;\n\n\tfor ( var prop in extender ) {\n\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\tval = extender[prop];\n\n\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\tout[prop] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t}\n\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\tout[prop] = val.slice();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tout[prop] = val;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\n\n/**\n * Bind an event handers to allow a click or return key to activate the callback.\n * This is good for accessibility since a return on the keyboard will have the\n * same effect as a click, if the element has focus.\n *  @param {element} n Element to bind the action to\n *  @param {object} oData Data object to pass to the triggered function\n *  @param {function} fn Callback function for when the event is triggered\n *  @memberof DataTable#oApi\n */\nfunction _fnBindAction( n, oData, fn )\n{\n\t$(n)\n\t\t.on( 'click.DT', oData, function (e) {\n\t\t\t\t$(n).trigger('blur'); // Remove focus outline for mouse users\n\t\t\t\tfn(e);\n\t\t\t} )\n\t\t.on( 'keypress.DT', oData, function (e){\n\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfn(e);\n\t\t\t\t}\n\t\t\t} )\n\t\t.on( 'selectstart.DT', function () {\n\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\treturn false;\n\t\t\t} );\n}\n\n\n/**\n * Register a callback function. Easily allows a callback function to be added to\n * an array store of callback functions that can then all be called together.\n *  @param {object} oSettings dataTables settings object\n *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n *  @param {function} fn Function to be called back\n *  @param {string} sName Identifying name for the callback (i.e. a label)\n *  @memberof DataTable#oApi\n */\nfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n{\n\tif ( fn )\n\t{\n\t\toSettings[sStore].push( {\n\t\t\t\"fn\": fn,\n\t\t\t\"sName\": sName\n\t\t} );\n\t}\n}\n\n\n/**\n * Fire callback functions and trigger events. Note that the loop over the\n * callback array store is done backwards! Further note that you do not want to\n * fire off triggers in time sensitive applications (for example cell creation)\n * as its slow.\n *  @param {object} settings dataTables settings object\n *  @param {string} callbackArr Name of the array storage for the callbacks in\n *      oSettings\n *  @param {string} eventName Name of the jQuery custom event to trigger. If\n *      null no trigger is fired\n *  @param {array} args Array of arguments to pass to the callback function /\n *      trigger\n *  @memberof DataTable#oApi\n */\nfunction _fnCallbackFire( settings, callbackArr, eventName, args )\n{\n\tvar ret = [];\n\n\tif ( callbackArr ) {\n\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t} );\n\t}\n\n\tif ( eventName !== null ) {\n\t\tvar e = $.Event( eventName+'.dt' );\n\t\tvar table = $(settings.nTable);\n\n\t\ttable.trigger( e, args );\n\n\t\t// If not yet attached to the document, trigger the event\n\t\t// on the body directly to sort of simulate the bubble\n\t\tif (table.parents('body').length === 0) {\n\t\t\t$('body').trigger( e, args );\n\t\t}\n\n\t\tret.push( e.result );\n\t}\n\n\treturn ret;\n}\n\n\nfunction _fnLengthOverflow ( settings )\n{\n\tvar\n\t\tstart = settings._iDisplayStart,\n\t\tend = settings.fnDisplayEnd(),\n\t\tlen = settings._iDisplayLength;\n\n\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\tif ( start >= end )\n\t{\n\t\tstart = end - len;\n\t}\n\n\t// Keep the start record on the current page\n\tstart -= (start % len);\n\n\tif ( len === -1 || start < 0 )\n\t{\n\t\tstart = 0;\n\t}\n\n\tsettings._iDisplayStart = start;\n}\n\n\nfunction _fnRenderer( settings, type )\n{\n\tvar renderer = settings.renderer;\n\tvar host = DataTable.ext.renderer[type];\n\n\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t// the default.\n\t\treturn host[renderer[type]] || host._;\n\t}\n\telse if ( typeof renderer === 'string' ) {\n\t\t// Common renderer - if there is one available for this type use it,\n\t\t// otherwise use the default\n\t\treturn host[renderer] || host._;\n\t}\n\n\t// Use the default\n\treturn host._;\n}\n\n\n/**\n * Detect the data source being used for the table. Used to simplify the code\n * a little (ajax) and to make it compress a little smaller.\n *\n *  @param {object} settings dataTables settings object\n *  @returns {string} Data source\n *  @memberof DataTable#oApi\n */\nfunction _fnDataSource ( settings )\n{\n\tif ( settings.oFeatures.bServerSide ) {\n\t\treturn 'ssp';\n\t}\n\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\treturn 'ajax';\n\t}\n\treturn 'dom';\n}\n\n\n\n\n/**\n * Computed structure of the DataTables API, defined by the options passed to\n * `DataTable.Api.register()` when building the API.\n *\n * The structure is built in order to speed creation and extension of the Api\n * objects since the extensions are effectively pre-parsed.\n *\n * The array is an array of objects with the following structure, where this\n * base array represents the Api prototype base:\n *\n *     [\n *       {\n *         name:      'data'                -- string   - Property name\n *         val:       function () {},       -- function - Api method (or undefined if just an object\n *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n *       },\n *       {\n *         name:     'row'\n *         val:       {},\n *         methodExt: [ ... ],\n *         propExt:   [\n *           {\n *             name:      'data'\n *             val:       function () {},\n *             methodExt: [ ... ],\n *             propExt:   [ ... ]\n *           },\n *           ...\n *         ]\n *       }\n *     ]\n *\n * @type {Array}\n * @ignore\n */\nvar __apiStruct = [];\n\n\n/**\n * `Array.prototype` reference.\n *\n * @type object\n * @ignore\n */\nvar __arrayProto = Array.prototype;\n\n\n/**\n * Abstraction for `context` parameter of the `Api` constructor to allow it to\n * take several different forms for ease of use.\n *\n * Each of the input parameter types will be converted to a DataTables settings\n * object where possible.\n *\n * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n *   of:\n *\n *   * `string` - jQuery selector. Any DataTables' matching the given selector\n *     with be found and used.\n *   * `node` - `TABLE` node which has already been formed into a DataTable.\n *   * `jQuery` - A jQuery object of `TABLE` nodes.\n *   * `object` - DataTables settings object\n *   * `DataTables.Api` - API instance\n * @return {array|null} Matching DataTables settings objects. `null` or\n *   `undefined` is returned if no matching DataTable is found.\n * @ignore\n */\nvar _toSettings = function ( mixed )\n{\n\tvar idx, jq;\n\tvar settings = DataTable.settings;\n\tvar tables = $.map( settings, function (el, i) {\n\t\treturn el.nTable;\n\t} );\n\n\tif ( ! mixed ) {\n\t\treturn [];\n\t}\n\telse if ( mixed.nTable && mixed.oApi ) {\n\t\t// DataTables settings object\n\t\treturn [ mixed ];\n\t}\n\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t// Table node\n\t\tidx = $.inArray( mixed, tables );\n\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t}\n\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\treturn mixed.settings().toArray();\n\t}\n\telse if ( typeof mixed === 'string' ) {\n\t\t// jQuery selector\n\t\tjq = $(mixed);\n\t}\n\telse if ( mixed instanceof $ ) {\n\t\t// jQuery object (also DataTables instance)\n\t\tjq = mixed;\n\t}\n\n\tif ( jq ) {\n\t\treturn jq.map( function(i) {\n\t\t\tidx = $.inArray( this, tables );\n\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t} ).toArray();\n\t}\n};\n\n\n/**\n * DataTables API class - used to control and interface with  one or more\n * DataTables enhanced tables.\n *\n * The API class is heavily based on jQuery, presenting a chainable interface\n * that you can use to interact with tables. Each instance of the API class has\n * a \"context\" - i.e. the tables that it will operate on. This could be a single\n * table, all tables on a page or a sub-set thereof.\n *\n * Additionally the API is designed to allow you to easily work with the data in\n * the tables, retrieving and manipulating it as required. This is done by\n * presenting the API class as an array like interface. The contents of the\n * array depend upon the actions requested by each method (for example\n * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n * return an array of objects or arrays depending upon your table's\n * configuration). The API object has a number of array like methods (`push`,\n * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n * `unique` etc) to assist your working with the data held in a table.\n *\n * Most methods (those which return an Api instance) are chainable, which means\n * the return from a method call also has all of the methods available that the\n * top level object had. For example, these two calls are equivalent:\n *\n *     // Not chained\n *     api.row.add( {...} );\n *     api.draw();\n *\n *     // Chained\n *     api.row.add( {...} ).draw();\n *\n * @class DataTable.Api\n * @param {array|object|string|jQuery} context DataTable identifier. This is\n *   used to define which DataTables enhanced tables this API will operate on.\n *   Can be one of:\n *\n *   * `string` - jQuery selector. Any DataTables' matching the given selector\n *     with be found and used.\n *   * `node` - `TABLE` node which has already been formed into a DataTable.\n *   * `jQuery` - A jQuery object of `TABLE` nodes.\n *   * `object` - DataTables settings object\n * @param {array} [data] Data to initialise the Api instance with.\n *\n * @example\n *   // Direct initialisation during DataTables construction\n *   var api = $('#example').DataTable();\n *\n * @example\n *   // Initialisation using a DataTables jQuery object\n *   var api = $('#example').dataTable().api();\n *\n * @example\n *   // Initialisation as a constructor\n *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n */\n_Api = function ( context, data )\n{\n\tif ( ! (this instanceof _Api) ) {\n\t\treturn new _Api( context, data );\n\t}\n\n\tvar settings = [];\n\tvar ctxSettings = function ( o ) {\n\t\tvar a = _toSettings( o );\n\t\tif ( a ) {\n\t\t\tsettings.push.apply( settings, a );\n\t\t}\n\t};\n\n\tif ( Array.isArray( context ) ) {\n\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tctxSettings( context[i] );\n\t\t}\n\t}\n\telse {\n\t\tctxSettings( context );\n\t}\n\n\t// Remove duplicates\n\tthis.context = _unique( settings );\n\n\t// Initial data\n\tif ( data ) {\n\t\t$.merge( this, data );\n\t}\n\n\t// selector\n\tthis.selector = {\n\t\trows: null,\n\t\tcols: null,\n\t\topts: null\n\t};\n\n\t_Api.extend( this, this, __apiStruct );\n};\n\nDataTable.Api = _Api;\n\n// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n// isPlainObject.\n$.extend( _Api.prototype, {\n\tany: function ()\n\t{\n\t\treturn this.count() !== 0;\n\t},\n\n\n\tconcat:  __arrayProto.concat,\n\n\n\tcontext: [], // array of table settings objects\n\n\n\tcount: function ()\n\t{\n\t\treturn this.flatten().length;\n\t},\n\n\n\teach: function ( fn )\n\t{\n\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\tfn.call( this, this[i], i, this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\n\teq: function ( idx )\n\t{\n\t\tvar ctx = this.context;\n\n\t\treturn ctx.length > idx ?\n\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\tnull;\n\t},\n\n\n\tfilter: function ( fn )\n\t{\n\t\tvar a = [];\n\n\t\tif ( __arrayProto.filter ) {\n\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t}\n\t\telse {\n\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\ta.push( this[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\n\tflatten: function ()\n\t{\n\t\tvar a = [];\n\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t},\n\n\n\tjoin:    __arrayProto.join,\n\n\n\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t{\n\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\tif ( this[i] === obj ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\tvar\n\t\t\ta = [], ret,\n\t\t\ti, ien, j, jen,\n\t\t\tcontext = this.context,\n\t\t\trows, items, item,\n\t\t\tselector = this.selector;\n\n\t\t// Argument shifting\n\t\tif ( typeof flatten === 'string' ) {\n\t\t\talwaysNew = fn;\n\t\t\tfn = type;\n\t\t\ttype = flatten;\n\t\t\tflatten = false;\n\t\t}\n\n\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\tvar apiInst = new _Api( context[i] );\n\n\t\t\tif ( type === 'table' ) {\n\t\t\t\tret = fn.call( apiInst, context[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\titems = this[i];\n\n\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t}\n\n\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\titem = items[j];\n\n\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( a.length || alwaysNew ) {\n\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\tvar apiSelector = api.selector;\n\t\t\tapiSelector.rows = selector.rows;\n\t\t\tapiSelector.cols = selector.cols;\n\t\t\tapiSelector.opts = selector.opts;\n\t\t\treturn api;\n\t\t}\n\t\treturn this;\n\t},\n\n\n\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t{\n\t\t// Bit cheeky...\n\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t},\n\n\n\tlength:  0,\n\n\n\tmap: function ( fn )\n\t{\n\t\tvar a = [];\n\n\t\tif ( __arrayProto.map ) {\n\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t}\n\t\telse {\n\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t}\n\t\t}\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\n\tpluck: function ( prop )\n\t{\n\t\tvar fn = DataTable.util.get(prop);\n\n\t\treturn this.map( function ( el ) {\n\t\t\treturn fn(el);\n\t\t} );\n\t},\n\n\tpop:     __arrayProto.pop,\n\n\n\tpush:    __arrayProto.push,\n\n\n\t// Does not return an API instance\n\treduce: __arrayProto.reduce || function ( fn, init )\n\t{\n\t\treturn _fnReduce( this, fn, init, 0, this.length, 1 );\n\t},\n\n\n\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t{\n\t\treturn _fnReduce( this, fn, init, this.length-1, -1, -1 );\n\t},\n\n\n\treverse: __arrayProto.reverse,\n\n\n\t// Object with rows, columns and opts\n\tselector: null,\n\n\n\tshift:   __arrayProto.shift,\n\n\n\tslice: function () {\n\t\treturn new _Api( this.context, this );\n\t},\n\n\n\tsort:    __arrayProto.sort, // ? name - order?\n\n\n\tsplice:  __arrayProto.splice,\n\n\n\ttoArray: function ()\n\t{\n\t\treturn __arrayProto.slice.call( this );\n\t},\n\n\n\tto$: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\n\ttoJQuery: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\n\tunique: function ()\n\t{\n\t\treturn new _Api( this.context, _unique(this) );\n\t},\n\n\n\tunshift: __arrayProto.unshift\n} );\n\n\n_Api.extend = function ( scope, obj, ext )\n{\n\t// Only extend API instances and static properties of the API\n\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, ien,\n\t\tstruct,\n\t\tmethodScoping = function ( scope, fn, struc ) {\n\t\t\treturn function () {\n\t\t\t\tvar ret = fn.apply( scope, arguments );\n\n\t\t\t\t// Method extension\n\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\treturn ret;\n\t\t\t};\n\t\t};\n\n\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\tstruct = ext[i];\n\n\t\t// Value\n\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\tmethodScoping( scope, struct.val, struct ) :\n\t\t\tstruct.type === 'object' ?\n\t\t\t\t{} :\n\t\t\t\tstruct.val;\n\n\t\tobj[ struct.name ].__dt_wrapper = true;\n\n\t\t// Property extension\n\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t}\n};\n\n\n// @todo - Is there need for an augment function?\n// _Api.augment = function ( inst, name )\n// {\n// \t// Find src object in the structure from the name\n// \tvar parts = name.split('.');\n\n// \t_Api.extend( inst, obj );\n// };\n\n\n//     [\n//       {\n//         name:      'data'                -- string   - Property name\n//         val:       function () {},       -- function - Api method (or undefined if just an object\n//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n//       },\n//       {\n//         name:     'row'\n//         val:       {},\n//         methodExt: [ ... ],\n//         propExt:   [\n//           {\n//             name:      'data'\n//             val:       function () {},\n//             methodExt: [ ... ],\n//             propExt:   [ ... ]\n//           },\n//           ...\n//         ]\n//       }\n//     ]\n\n_Api.register = _api_register = function ( name, val )\n{\n\tif ( Array.isArray( name ) ) {\n\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t_Api.register( name[j], val );\n\t\t}\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, ien,\n\t\their = name.split('.'),\n\t\tstruct = __apiStruct,\n\t\tkey, method;\n\n\tvar find = function ( src, name ) {\n\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\tif ( src[i].name === name ) {\n\t\t\t\treturn src[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t};\n\n\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\tkey = method ?\n\t\t\their[i].replace('()', '') :\n\t\t\their[i];\n\n\t\tvar src = find( struct, key );\n\t\tif ( ! src ) {\n\t\t\tsrc = {\n\t\t\t\tname:      key,\n\t\t\t\tval:       {},\n\t\t\t\tmethodExt: [],\n\t\t\t\tpropExt:   [],\n\t\t\t\ttype:      'object'\n\t\t\t};\n\t\t\tstruct.push( src );\n\t\t}\n\n\t\tif ( i === ien-1 ) {\n\t\t\tsrc.val = val;\n\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t'function' :\n\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t'object' :\n\t\t\t\t\t'other';\n\t\t}\n\t\telse {\n\t\t\tstruct = method ?\n\t\t\t\tsrc.methodExt :\n\t\t\t\tsrc.propExt;\n\t\t}\n\t}\n};\n\n_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t_Api.register( pluralName, val );\n\n\t_Api.register( singularName, function () {\n\t\tvar ret = val.apply( this, arguments );\n\n\t\tif ( ret === this ) {\n\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\treturn this;\n\t\t}\n\t\telse if ( ret instanceof _Api ) {\n\t\t\t// New API instance returned, want the value from the first item\n\t\t\t// in the returned array for the singular result.\n\t\t\treturn ret.length ?\n\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\tret[0] :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// Non-API return - just fire it back\n\t\treturn ret;\n\t} );\n};\n\n\n/**\n * Selector for HTML tables. Apply the given selector to the give array of\n * DataTables settings objects.\n *\n * @param {string|integer} [selector] jQuery selector string or integer\n * @param  {array} Array of DataTables settings objects to be filtered\n * @return {array}\n * @ignore\n */\nvar __table_selector = function ( selector, a )\n{\n\tif ( Array.isArray(selector) ) {\n\t\treturn $.map( selector, function (item) {\n\t\t\treturn __table_selector(item, a);\n\t\t} );\n\t}\n\n\t// Integer is used to pick out a table by index\n\tif ( typeof selector === 'number' ) {\n\t\treturn [ a[ selector ] ];\n\t}\n\n\t// Perform a jQuery selector on the table nodes\n\tvar nodes = $.map( a, function (el, i) {\n\t\treturn el.nTable;\n\t} );\n\n\treturn $(nodes)\n\t\t.filter( selector )\n\t\t.map( function (i) {\n\t\t\t// Need to translate back from the table node to the settings\n\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\treturn a[ idx ];\n\t\t} )\n\t\t.toArray();\n};\n\n\n\n/**\n * Context selector for the API's context (i.e. the tables the API instance\n * refers to.\n *\n * @name    DataTable.Api#tables\n * @param {string|integer} [selector] Selector to pick which tables the iterator\n *   should operate on. If not given, all tables in the current context are\n *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n *   select multiple tables or as an integer to select a single table.\n * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n */\n_api_register( 'tables()', function ( selector ) {\n\t// A new instance is created if there was a selector specified\n\treturn selector !== undefined && selector !== null ?\n\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\tthis;\n} );\n\n\n_api_register( 'table()', function ( selector ) {\n\tvar tables = this.tables( selector );\n\tvar ctx = tables.context;\n\n\t// Truncate to the first matched table\n\treturn ctx.length ?\n\t\tnew _Api( ctx[0] ) :\n\t\ttables;\n} );\n\n\n_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTable;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTBody;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTHead;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTFoot;\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTableWrapper;\n\t}, 1 );\n} );\n\n\n\n/**\n * Redraw the tables in the current context.\n */\n_api_register( 'draw()', function ( paging ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( paging === 'page' ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t\telse {\n\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\tfalse :\n\t\t\t\t\ttrue;\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, paging===false );\n\t\t}\n\t} );\n} );\n\n\n\n/**\n * Get the current page index.\n *\n * @return {integer} Current page index (zero based)\n *//**\n * Set the current page.\n *\n * Note that if you attempt to show a page which does not exist, DataTables will\n * not throw an error, but rather reset the paging.\n *\n * @param {integer|string} action The paging action to take. This can be one of:\n *  * `integer` - The page index to jump to\n *  * `string` - An action to take:\n *    * `first` - Jump to first page.\n *    * `next` - Jump to the next page\n *    * `previous` - Jump to previous page\n *    * `last` - Jump to the last page.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page()', function ( action ) {\n\tif ( action === undefined ) {\n\t\treturn this.page.info().page; // not an expensive call\n\t}\n\n\t// else, have an action to take on all tables\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnPageChange( settings, action );\n\t} );\n} );\n\n\n/**\n * Paging information for the first table in the current context.\n *\n * If you require paging information for another table, use the `table()` method\n * with a suitable selector.\n *\n * @return {object} Object with the following properties set:\n *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n *  * `pages` - Total number of pages\n *  * `start` - Display index for the first record shown on the current page\n *  * `end` - Display index for the last record shown on the current page\n *  * `length` - Display length (number of records). Note that generally `start\n *    + length = end`, but this is not always true, for example if there are\n *    only 2 records to show on the final page, with a length of 10.\n *  * `recordsTotal` - Full data set length\n *  * `recordsDisplay` - Data set length once the current filtering criterion\n *    are applied.\n */\n_api_register( 'page.info()', function ( action ) {\n\tif ( this.context.length === 0 ) {\n\t\treturn undefined;\n\t}\n\n\tvar\n\t\tsettings   = this.context[0],\n\t\tstart      = settings._iDisplayStart,\n\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\tall        = len === -1;\n\n\treturn {\n\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\"start\":          start,\n\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\"length\":         len,\n\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\"recordsDisplay\": visRecords,\n\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t};\n} );\n\n\n/**\n * Get the current page length.\n *\n * @return {integer} Current page length. Note `-1` indicates that all records\n *   are to be shown.\n *//**\n * Set the current page length.\n *\n * @param {integer} Page length to set. Use `-1` to show all records.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page.len()', function ( len ) {\n\t// Note that we can't call this function 'length()' because `length`\n\t// is a Javascript property of functions which defines how many arguments\n\t// the function expects.\n\tif ( len === undefined ) {\n\t\treturn this.context.length !== 0 ?\n\t\t\tthis.context[0]._iDisplayLength :\n\t\t\tundefined;\n\t}\n\n\t// else, set the page length\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnLengthChange( settings, len );\n\t} );\n} );\n\n\n\nvar __reload = function ( settings, holdPosition, callback ) {\n\t// Use the draw event to trigger a callback\n\tif ( callback ) {\n\t\tvar api = new _Api( settings );\n\n\t\tapi.one( 'draw', function () {\n\t\t\tcallback( api.ajax.json() );\n\t\t} );\n\t}\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t_fnReDraw( settings, holdPosition );\n\t}\n\telse {\n\t\t_fnProcessingDisplay( settings, true );\n\n\t\t// Cancel an existing request\n\t\tvar xhr = settings.jqXHR;\n\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\txhr.abort();\n\t\t}\n\n\t\t// Trigger xhr\n\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t_fnClearTable( settings );\n\n\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t_fnProcessingDisplay( settings, false );\n\t\t} );\n\t}\n};\n\n\n/**\n * Get the JSON response from the last Ajax request that DataTables made to the\n * server. Note that this returns the JSON from the first table in the current\n * context.\n *\n * @return {object} JSON received from the server.\n */\n_api_register( 'ajax.json()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].json;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Get the data submitted in the last Ajax request\n */\n_api_register( 'ajax.params()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].oAjaxData;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Reload tables from the Ajax data source. Note that this function will\n * automatically re-draw the table when the remote data has been loaded.\n *\n * @param {boolean} [reset=true] Reset (default) or hold the current paging\n *   position. A full re-sort and re-filter is performed when this method is\n *   called, which is why the pagination reset is the default action.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\treturn this.iterator( 'table', function (settings) {\n\t\t__reload( settings, resetPaging===false, callback );\n\t} );\n} );\n\n\n/**\n * Get the current Ajax URL. Note that this returns the URL from the first\n * table in the current context.\n *\n * @return {string} Current Ajax source URL\n *//**\n * Set the Ajax URL. Note that this will set the URL for all tables in the\n * current context.\n *\n * @param {string} url URL to set.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url()', function ( url ) {\n\tvar ctx = this.context;\n\n\tif ( url === undefined ) {\n\t\t// get\n\t\tif ( ctx.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tctx = ctx[0];\n\n\t\treturn ctx.ajax ?\n\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\tctx.ajax.url :\n\t\t\t\tctx.ajax :\n\t\t\tctx.sAjaxSource;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\tsettings.ajax.url = url;\n\t\t}\n\t\telse {\n\t\t\tsettings.ajax = url;\n\t\t}\n\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t// value of `sAjaxSource` redundant.\n\t} );\n} );\n\n\n/**\n * Load data from the newly set Ajax URL. Note that this method is only\n * available when `ajax.url()` is used to set a URL. Additionally, this method\n * has the same effect as calling `ajax.reload()` but is provided for\n * convenience when setting a new URL. Like `ajax.reload()` it will\n * automatically redraw the table once the remote data has been loaded.\n *\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t// Same as a reload, but makes sense to present it for easy access after a\n\t// url change\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\t__reload( ctx, resetPaging===false, callback );\n\t} );\n} );\n\n\n\n\nvar _selector_run = function ( type, selector, selectFn, settings, opts )\n{\n\tvar\n\t\tout = [], res,\n\t\ta, i, ien, j, jen,\n\t\tselectorType = typeof selector;\n\n\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t// given with their array like look\n\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\tselector = [ selector ];\n\t}\n\n\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t// Only split on simple strings - complex expressions will be jQuery selectors\n\t\ta = selector[i] && selector[i].split && ! selector[i].match(/[\\[\\(:]/) ?\n\t\t\tselector[i].split(',') :\n\t\t\t[ selector[i] ];\n\n\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\tres = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );\n\n\t\t\tif ( res && res.length ) {\n\t\t\t\tout = out.concat( res );\n\t\t\t}\n\t\t}\n\t}\n\n\t// selector extensions\n\tvar ext = _ext.selector[ type ];\n\tif ( ext.length ) {\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tout = ext[i]( settings, opts, out );\n\t\t}\n\t}\n\n\treturn _unique( out );\n};\n\n\nvar _selector_opts = function ( opts )\n{\n\tif ( ! opts ) {\n\t\topts = {};\n\t}\n\n\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t// than search\n\tif ( opts.filter && opts.search === undefined ) {\n\t\topts.search = opts.filter;\n\t}\n\n\treturn $.extend( {\n\t\tsearch: 'none',\n\t\torder: 'current',\n\t\tpage: 'all'\n\t}, opts );\n};\n\n\nvar _selector_first = function ( inst )\n{\n\t// Reduce the API instance to the first item found\n\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\tif ( inst[i].length > 0 ) {\n\t\t\t// Assign the first element to the first item in the instance\n\t\t\t// and truncate the instance and context\n\t\t\tinst[0] = inst[i];\n\t\t\tinst[0].length = 1;\n\t\t\tinst.length = 1;\n\t\t\tinst.context = [ inst.context[i] ];\n\n\t\t\treturn inst;\n\t\t}\n\t}\n\n\t// Not found - return an empty instance\n\tinst.length = 0;\n\treturn inst;\n};\n\n\nvar _selector_row_indexes = function ( settings, opts )\n{\n\tvar\n\t\ti, ien, tmp, a=[],\n\t\tdisplayFiltered = settings.aiDisplay,\n\t\tdisplayMaster = settings.aiDisplayMaster;\n\n\tvar\n\t\tsearch = opts.search,  // none, applied, removed\n\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\tpage   = opts.page;    // all, current\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t// In server-side processing mode, most options are irrelevant since\n\t\t// rows not shown don't exist and the index order is the applied order\n\t\t// Removed is a special case - for consistency just return an empty\n\t\t// array\n\t\treturn search === 'removed' ?\n\t\t\t[] :\n\t\t\t_range( 0, displayMaster.length );\n\t}\n\telse if ( page == 'current' ) {\n\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t// are\n\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\ta.push( displayFiltered[i] );\n\t\t}\n\t}\n\telse if ( order == 'current' || order == 'applied' ) {\n\t\tif ( search == 'none') {\n\t\t\ta = displayMaster.slice();\n\t\t}\n\t\telse if ( search == 'applied' ) {\n\t\t\ta = displayFiltered.slice();\n\t\t}\n\t\telse if ( search == 'removed' ) {\n\t\t\t// O(n+m) solution by creating a hash map\n\t\t\tvar displayFilteredMap = {};\n\n\t\t\tfor ( var i=0, ien=displayFiltered.length ; i<ien ; i++ ) {\n\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t}\n\n\t\t\ta = $.map( displayMaster, function (el) {\n\t\t\t\treturn ! displayFilteredMap.hasOwnProperty(el) ?\n\t\t\t\t\tel :\n\t\t\t\t\tnull;\n\t\t\t} );\n\t\t}\n\t}\n\telse if ( order == 'index' || order == 'original' ) {\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\tif ( search == 'none' ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t\telse { // applied | removed\n\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\n\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t{\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a;\n};\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Rows\n *\n * {}          - no selector - use all available rows\n * {integer}   - row aoData index\n * {node}      - TR node\n * {string}    - jQuery selector to apply to the TR elements\n * {array}     - jQuery array of nodes, or simply an array of TR nodes\n *\n */\nvar __row_selector = function ( settings, selector, opts )\n{\n\tvar rows;\n\tvar run = function ( sel ) {\n\t\tvar selInt = _intVal( sel );\n\t\tvar i, ien;\n\t\tvar aoData = settings.aoData;\n\n\t\t// Short cut - selector is a number and no options provided (default is\n\t\t// all records, so no need to check if the index is in there, since it\n\t\t// must be - dev error if the index doesn't exist).\n\t\tif ( selInt !== null && ! opts ) {\n\t\t\treturn [ selInt ];\n\t\t}\n\n\t\tif ( ! rows ) {\n\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t}\n\n\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t// Selector - integer\n\t\t\treturn [ selInt ];\n\t\t}\n\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t// Selector - none\n\t\t\treturn rows;\n\t\t}\n\n\t\t// Selector - function\n\t\tif ( typeof sel === 'function' ) {\n\t\t\treturn $.map( rows, function (idx) {\n\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t} );\n\t\t}\n\n\t\t// Selector - node\n\t\tif ( sel.nodeName ) {\n\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\tvar cellIdx = sel._DT_CellIndex;\n\n\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse if ( cellIdx ) {\n\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\treturn host.length ?\n\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t}\n\n\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t// DataTables simplifies this for row selectors since you can select\n\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t// unescaped.\n\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t// get row index from id\n\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\treturn [ rowObj.idx ];\n\t\t\t}\n\n\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t// matches\n\t\t}\n\t\t\n\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\tvar nodes = _removeEmpty(\n\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t);\n\n\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t// it also allows arrays, so this will cope with all three options\n\t\treturn $(nodes)\n\t\t\t.filter( sel )\n\t\t\t.map( function () {\n\t\t\t\treturn this._DT_RowIndex;\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\n\treturn _selector_run( 'row', selector, run, settings, opts );\n};\n\n\n_api_register( 'rows()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __row_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in __row_selector?\n\tinst.selector.rows = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_register( 'rows().nodes()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn settings.aoData[ row ].nTr || undefined;\n\t}, 1 );\n} );\n\n_api_register( 'rows().data()', function () {\n\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\tvar r = settings.aoData[ row ];\n\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t_fnInvalidate( settings, row, src );\n\t} );\n} );\n\n_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn row;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\tvar a = [];\n\tvar context = this.context;\n\n\t// `iterator` will drop undefined values, but in this case we want them\n\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t}\n\t}\n\n\treturn new _Api( context, a );\n} );\n\n_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\tvar that = this;\n\n\tthis.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\tvar data = settings.aoData;\n\t\tvar rowData = data[ row ];\n\t\tvar i, ien, j, jen;\n\t\tvar loopRow, loopCells;\n\n\t\tdata.splice( row, 1 );\n\n\t\t// Update the cached indexes\n\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\tloopRow = data[i];\n\t\t\tloopCells = loopRow.anCells;\n\n\t\t\t// Rows\n\t\t\tif ( loopRow.nTr !== null ) {\n\t\t\t\tloopRow.nTr._DT_RowIndex = i;\n\t\t\t}\n\n\t\t\t// Cells\n\t\t\tif ( loopCells !== null ) {\n\t\t\t\tfor ( j=0, jen=loopCells.length ; j<jen ; j++ ) {\n\t\t\t\t\tloopCells[j]._DT_CellIndex.row = i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Delete from the display arrays\n\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\n\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\tsettings._iRecordsDisplay--;\n\t\t}\n\n\t\t// Check for an 'overflow' they case for displaying the table\n\t\t_fnLengthOverflow( settings );\n\n\t\t// Remove the row's ID reference if there is one\n\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\tif ( id !== undefined ) {\n\t\t\tdelete settings.aIds[ id ];\n\t\t}\n\t} );\n\n\tthis.iterator( 'table', function ( settings ) {\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\tsettings.aoData[i].idx = i;\n\t\t}\n\t} );\n\n\treturn this;\n} );\n\n\n_api_register( 'rows.add()', function ( rows ) {\n\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\tvar row, i, ien;\n\t\t\tvar out = [];\n\n\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t}, 1 );\n\n\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\tvar modRows = this.rows( -1 );\n\tmodRows.pop();\n\t$.merge( modRows, newRows );\n\n\treturn modRows;\n} );\n\n\n\n\n\n/**\n *\n */\n_api_register( 'row()', function ( selector, opts ) {\n\treturn _selector_first( this.rows( selector, opts ) );\n} );\n\n\n_api_register( 'row().data()', function ( data ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\tvar row = ctx[0].aoData[ this[0] ];\n\trow._aData = data;\n\n\t// If the DOM has an id, and the data source is an array\n\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t}\n\n\t// Automatically invalidate\n\t_fnInvalidate( ctx[0], this[0], 'data' );\n\n\treturn this;\n} );\n\n\n_api_register( 'row().node()', function () {\n\tvar ctx = this.context;\n\n\treturn ctx.length && this.length ?\n\t\tctx[0].aoData[ this[0] ].nTr || null :\n\t\tnull;\n} );\n\n\n_api_register( 'row.add()', function ( row ) {\n\t// Allow a jQuery object to be passed in - only a single row is added from\n\t// it though - the first element in the set\n\tif ( row instanceof $ && row.length ) {\n\t\trow = row[0];\n\t}\n\n\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t}\n\t\treturn _fnAddData( settings, row );\n\t} );\n\n\t// Return an Api.rows() extended instance, with the newly added row selected\n\treturn this.row( rows[0] );\n} );\n\n\n$(document).on('plugin-init.dt', function (e, context) {\n\tvar api = new _Api( context );\n\tvar namespace = 'on-plugin-init';\n\tvar stateSaveParamsEvent = 'stateSaveParams.' + namespace;\n\tvar destroyEvent = 'destroy. ' + namespace;\n\n\tapi.on( stateSaveParamsEvent, function ( e, settings, d ) {\n\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t// internal loop\n\t\tvar idFn = settings.rowIdFn;\n\t\tvar data = settings.aoData;\n\t\tvar ids = [];\n\n\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\tif (data[i]._detailsShow) {\n\t\t\t\tids.push( '#' + idFn(data[i]._aData) );\n\t\t\t}\n\t\t}\n\n\t\td.childRows = ids;\n\t});\n\n\tapi.on( destroyEvent, function () {\n\t\tapi.off(stateSaveParamsEvent + ' ' + destroyEvent);\n\t});\n\n\tvar loaded = api.state.loaded();\n\n\tif ( loaded && loaded.childRows ) {\n\t\tapi\n\t\t\t.rows( $.map(loaded.childRows, function (id){\n\t\t\t\treturn id.replace(/:/g, '\\\\:')\n\t\t\t}) )\n\t\t\t.every( function () {\n\t\t\t\t_fnCallbackFire( context, null, 'requestChild', [ this ] )\n\t\t\t});\n\t}\n});\n\nvar __details_add = function ( ctx, row, data, klass )\n{\n\t// Convert to array of TR elements\n\tvar rows = [];\n\tvar addRow = function ( r, k ) {\n\t\t// Recursion to allow for arrays of jQuery objects\n\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\tfor ( var i=0, ien=r.length ; i<ien ; i++ ) {\n\t\t\t\taddRow( r[i], k );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t// to add the correct number of columns etc\n\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\trows.push( r );\n\t\t}\n\t\telse {\n\t\t\t// Otherwise create a row with a wrapper\n\t\t\tvar created = $('<tr><td></td></tr>').addClass( k );\n\t\t\t$('td', created)\n\t\t\t\t.addClass( k )\n\t\t\t\t.html( r )\n\t\t\t\t[0].colSpan = _fnVisbleColumns( ctx );\n\n\t\t\trows.push( created[0] );\n\t\t}\n\t};\n\n\taddRow( data, klass );\n\n\tif ( row._details ) {\n\t\trow._details.detach();\n\t}\n\n\trow._details = $(rows);\n\n\t// If the children were already shown, that state should be retained\n\tif ( row._detailsShow ) {\n\t\trow._details.insertAfter( row.nTr );\n\t}\n};\n\n\n// Make state saving of child row details async to allow them to be batch processed\nvar __details_state = DataTable.util.throttle(\n\tfunction (ctx) {\n\t\t_fnSaveState( ctx[0] )\n\t},\n\t500\n);\n\n\nvar __details_remove = function ( api, idx )\n{\n\tvar ctx = api.context;\n\n\tif ( ctx.length ) {\n\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\n\t\tif ( row && row._details ) {\n\t\t\trow._details.remove();\n\n\t\t\trow._detailsShow = undefined;\n\t\t\trow._details = undefined;\n\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_display = function ( api, show ) {\n\tvar ctx = api.context;\n\n\tif ( ctx.length && api.length ) {\n\t\tvar row = ctx[0].aoData[ api[0] ];\n\n\t\tif ( row._details ) {\n\t\t\trow._detailsShow = show;\n\n\t\t\tif ( show ) {\n\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\trow._details.detach();\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t}\n\n\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\n\t\t\t__details_events( ctx[0] );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_events = function ( settings )\n{\n\tvar api = new _Api( settings );\n\tvar namespace = '.dt.DT_details';\n\tvar drawEvent = 'draw'+namespace;\n\tvar colvisEvent = 'column-sizing'+namespace;\n\tvar destroyEvent = 'destroy'+namespace;\n\tvar data = settings.aoData;\n\n\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\n\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t// On each draw, insert the required elements into the document\n\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t// Internal data grab\n\t\t\t\tvar row = data[ idx ];\n\n\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// Column visibility change - update the colspan\n\t\tapi.on( colvisEvent, function ( e, ctx, idx, vis ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t// a colspan)\n\t\t\tvar row, visible = _fnVisbleColumns( ctx );\n\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\trow = data[i];\n\n\t\t\t\tif ( row._details ) {\n\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\tvar el = $(this).children('td');\n\n\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\tel.attr('colspan', visible);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Table destroyed - nuke any child rows\n\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tif ( data[i]._details ) {\n\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n};\n\n// Strings for the method names to help minification\nvar _emp = '';\nvar _child_obj = _emp+'row().child';\nvar _child_mth = _child_obj+'()';\n\n// data can be:\n//  tr\n//  string\n//  jQuery or array of any of the above\n_api_register( _child_mth, function ( data, klass ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// get\n\t\treturn ctx.length && this.length ?\n\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\tundefined;\n\t}\n\telse if ( data === true ) {\n\t\t// show\n\t\tthis.child.show();\n\t}\n\telse if ( data === false ) {\n\t\t// remove\n\t\t__details_remove( this );\n\t}\n\telse if ( ctx.length && this.length ) {\n\t\t// set\n\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t}\n\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.show()',\n\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n], function ( show ) {   // it returns an object and this method is not executed)\n\t__details_display( this, true );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.hide()',\n\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n], function () {         // it returns an object and this method is not executed)\n\t__details_display( this, false );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.remove()',\n\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n], function () {           // it returns an object and this method is not executed)\n\t__details_remove( this );\n\treturn this;\n} );\n\n\n_api_register( _child_obj+'.isShown()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length && this.length ) {\n\t\t// _detailsShown as false or undefined will fall through to return false\n\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t}\n\treturn false;\n} );\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Columns\n *\n * {integer}           - column index (>=0 count from left, <0 count from right)\n * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n * \"{string}:name\"     - column name\n * \"{string}\"          - jQuery selector on column header nodes\n *\n */\n\n// can be an array of these items, comma separated list, or an array of comma\n// separated lists\n\nvar __re_column_selector = /^([^:]+):(name|visIdx|visible)$/;\n\n\n// r1 and r2 are redundant - but it means that the parameters match for the\n// iterator callback in columns().data()\nvar __columnData = function ( settings, column, r1, r2, rows ) {\n\tvar a = [];\n\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\ta.push( _fnGetCellData( settings, rows[row], column ) );\n\t}\n\treturn a;\n};\n\n\nvar __column_selector = function ( settings, selector, opts )\n{\n\tvar\n\t\tcolumns = settings.aoColumns,\n\t\tnames = _pluck( columns, 'sName' ),\n\t\tnodes = _pluck( columns, 'nTh' );\n\n\tvar run = function ( s ) {\n\t\tvar selInt = _intVal( s );\n\n\t\t// Selector - all\n\t\tif ( s === '' ) {\n\t\t\treturn _range( columns.length );\n\t\t}\n\n\t\t// Selector - index\n\t\tif ( selInt !== null ) {\n\t\t\treturn [ selInt >= 0 ?\n\t\t\t\tselInt : // Count from left\n\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t];\n\t\t}\n\n\t\t// Selector = function\n\t\tif ( typeof s === 'function' ) {\n\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\n\t\t\treturn $.map( columns, function (col, idx) {\n\t\t\t\treturn s(\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\tnodes[ idx ]\n\t\t\t\t\t) ? idx : null;\n\t\t\t} );\n\t\t}\n\n\t\t// jQuery or string selector\n\t\tvar match = typeof s === 'string' ?\n\t\t\ts.match( __re_column_selector ) :\n\t\t\t'';\n\n\t\tif ( match ) {\n\t\t\tswitch( match[2] ) {\n\t\t\t\tcase 'visIdx':\n\t\t\t\tcase 'visible':\n\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t} );\n\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t}\n\t\t\t\t\t// Counting from the left\n\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\n\t\t\t\tcase 'name':\n\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t} );\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\t// Cell in the table body\n\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t}\n\n\t\t// jQuery selector on the TH elements for the columns\n\t\tvar jqResult = $( nodes )\n\t\t\t.filter( s )\n\t\t\t.map( function () {\n\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t} )\n\t\t\t.toArray();\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t// a child or such an element\n\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\treturn host.length ?\n\t\t\t[ host.data('dt-column') ] :\n\t\t\t[];\n\t};\n\n\treturn _selector_run( 'column', selector, run, settings, opts );\n};\n\n\nvar __setColumnVis = function ( settings, column, vis ) {\n\tvar\n\t\tcols = settings.aoColumns,\n\t\tcol  = cols[ column ],\n\t\tdata = settings.aoData,\n\t\trow, cells, i, ien, tr;\n\n\t// Get\n\tif ( vis === undefined ) {\n\t\treturn col.bVisible;\n\t}\n\n\t// Set\n\t// No change\n\tif ( col.bVisible === vis ) {\n\t\treturn;\n\t}\n\n\tif ( vis ) {\n\t\t// Insert column\n\t\t// Need to decide if we should use appendChild or insertBefore\n\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\n\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\ttr = data[i].nTr;\n\t\t\tcells = data[i].anCells;\n\n\t\t\tif ( tr ) {\n\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t// Remove column\n\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t}\n\n\t// Common actions\n\tcol.bVisible = vis;\n};\n\n\n_api_register( 'columns()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __column_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in _row_selector?\n\tinst.selector.cols = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].nTh;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].nTf;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\treturn this.iterator( 'column-rows', __columnData, 1 );\n} );\n\n_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].mData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t);\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\tvar that = this;\n\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\tif ( vis === undefined ) {\n\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t} // else\n\t\t__setColumnVis( settings, column, vis );\n\t} );\n\n\t// Group the column visibility changes\n\tif ( vis !== undefined ) {\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t// Redraw the header after changes\n\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisbleColumns(settings));\n\t\t\t}\n\t\n\t\t\t_fnSaveState( settings );\n\n\t\t\t// Second loop once the first is done for events\n\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t} );\n\n\t\t\tif ( calc === undefined || calc ) {\n\t\t\t\tthat.columns.adjust();\n\t\t\t}\n\t\t});\n\t}\n\n\treturn ret;\n} );\n\n_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn type === 'visible' ?\n\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\tcolumn;\n\t}, 1 );\n} );\n\n_api_register( 'columns.adjust()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnAdjustColumnSizing( settings );\n\t}, 1 );\n} );\n\n_api_register( 'column.index()', function ( type, idx ) {\n\tif ( this.context.length !== 0 ) {\n\t\tvar ctx = this.context[0];\n\n\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t}\n\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t}\n\t}\n} );\n\n_api_register( 'column()', function ( selector, opts ) {\n\treturn _selector_first( this.columns( selector, opts ) );\n} );\n\nvar __cell_selector = function ( settings, selector, opts )\n{\n\tvar data = settings.aoData;\n\tvar rows = _selector_row_indexes( settings, opts );\n\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\tvar allCells = $(_flatten( [], cells ));\n\tvar row;\n\tvar columns = settings.aoColumns.length;\n\tvar a, i, ien, j, o, host;\n\n\tvar run = function ( s ) {\n\t\tvar fnSelector = typeof s === 'function';\n\n\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t// All cells and function selectors\n\t\t\ta = [];\n\n\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\to = {\n\t\t\t\t\t\trow: row,\n\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\thost = data[ row ];\n\n\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}\n\t\t\n\t\t// Selector - index\n\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\treturn s.column !== undefined && s.row !== undefined && $.inArray( s.row, rows ) !== -1 ?\n\t\t\t\t[s] :\n\t\t\t\t[];\n\t\t}\n\n\t\t// Selector - jQuery filtered cells\n\t\tvar jqResult = allCells\n\t\t\t.filter( s )\n\t\t\t.map( function (i, el) {\n\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\tcolumn: el._DT_CellIndex.column\n \t\t\t\t};\n\t\t\t} )\n\t\t\t.toArray();\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t// data attributes\n\t\thost = $(s).closest('*[data-dt-row]');\n\t\treturn host.length ?\n\t\t\t[ {\n\t\t\t\trow: host.data('dt-row'),\n\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t} ] :\n\t\t\t[];\n\t};\n\n\treturn _selector_run( 'cell', selector, run, settings, opts );\n};\n\n\n\n\n_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t// Argument shifting\n\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t// Indexes\n\t\tif ( rowSelector.row === undefined ) {\n\t\t\t// Selector options in first parameter\n\t\t\topts = rowSelector;\n\t\t\trowSelector = null;\n\t\t}\n\t\telse {\n\t\t\t// Cell index objects in first parameter\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t}\n\tif ( $.isPlainObject( columnSelector ) ) {\n\t\topts = columnSelector;\n\t\tcolumnSelector = null;\n\t}\n\n\t// Cell selector\n\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t} );\n\t}\n\n\t// The default built in options need to apply to row and columns\n\tvar internalOpts = opts ? {\n\t\tpage: opts.page,\n\t\torder: opts.order,\n\t\tsearch: opts.search\n\t} : {};\n\n\t// Row + column selector\n\tvar columns = this.columns( columnSelector, internalOpts );\n\tvar rows = this.rows( rowSelector, internalOpts );\n\tvar i, ien, j, jen;\n\n\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\tvar a = [];\n\n\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\ta.push( {\n\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\treturn a;\n\t}, 1 );\n\n\t// There is currently only one extension which uses a cell selector extension\n\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t// an extension specific check at the moment\n\tvar cells = opts && opts.selected ?\n\t\tthis.cells( cellsNoOpts, opts ) :\n\t\tcellsNoOpts;\n\n\t$.extend( cells.selector, {\n\t\tcols: columnSelector,\n\t\trows: rowSelector,\n\t\topts: opts\n\t} );\n\n\treturn cells;\n} );\n\n\n_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\tvar data = settings.aoData[ row ];\n\n\t\treturn data && data.anCells ?\n\t\t\tdata.anCells[ column ] :\n\t\t\tundefined;\n\t}, 1 );\n} );\n\n\n_api_register( 'cells().data()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn settings.aoData[ row ][ type ][ column ];\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column, type );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn {\n\t\t\trow: row,\n\t\t\tcolumn: column,\n\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t};\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t_fnInvalidate( settings, row, src, column );\n\t} );\n} );\n\n\n\n_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n} );\n\n\n_api_register( 'cell().data()', function ( data ) {\n\tvar ctx = this.context;\n\tvar cell = this[0];\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && cell.length ?\n\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\n\treturn this;\n} );\n\n\n\n/**\n * Get current ordering (sorting) that has been applied to the table.\n *\n * @returns {array} 2D array containing the sorting information for the first\n *   table in the current context. Each element in the parent array represents\n *   a column being sorted upon (i.e. multi-sorting with two columns would have\n *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n *   the column index that the sorting condition applies to, the second is the\n *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n *   index of the sorting order from the `column.sorting` initialisation array.\n *//**\n * Set the ordering for the table.\n *\n * @param {integer} order Column index to sort upon.\n * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 1D array of sorting information to be applied.\n * @param {array} [...] Optional additional sorting conditions\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 2D array of sorting information to be applied.\n * @returns {DataTables.Api} this\n */\n_api_register( 'order()', function ( order, dir ) {\n\tvar ctx = this.context;\n\n\tif ( order === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].aaSorting :\n\t\t\tundefined;\n\t}\n\n\t// set\n\tif ( typeof order === 'number' ) {\n\t\t// Simple column / direction passed in\n\t\torder = [ [ order, dir ] ];\n\t}\n\telse if ( order.length && ! Array.isArray( order[0] ) ) {\n\t\t// Arguments passed in (list of 1D arrays)\n\t\torder = Array.prototype.slice.call( arguments );\n\t}\n\t// otherwise a 2D array was passed in\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tsettings.aaSorting = order.slice();\n\t} );\n} );\n\n\n/**\n * Attach a sort listener to an element for a given column\n *\n * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n *   listener to. This can take the form of a single DOM node, a jQuery\n *   collection of nodes or a jQuery selector which will identify the node(s).\n * @param {integer} column the column that a click on this node will sort on\n * @param {function} [callback] callback function when sort is run\n * @returns {DataTables.Api} this\n */\n_api_register( 'order.listener()', function ( node, column, callback ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSortAttachListener( settings, node, column, callback );\n\t} );\n} );\n\n\n_api_register( 'order.fixed()', function ( set ) {\n\tif ( ! set ) {\n\t\tvar ctx = this.context;\n\t\tvar fixed = ctx.length ?\n\t\t\tctx[0].aaSortingFixed :\n\t\t\tundefined;\n\n\t\treturn Array.isArray( fixed ) ?\n\t\t\t{ pre: fixed } :\n\t\t\tfixed;\n\t}\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t} );\n} );\n\n\n// Order by the selected column(s)\n_api_register( [\n\t'columns().order()',\n\t'column().order()'\n], function ( dir ) {\n\tvar that = this;\n\n\treturn this.iterator( 'table', function ( settings, i ) {\n\t\tvar sort = [];\n\n\t\t$.each( that[i], function (j, col) {\n\t\t\tsort.push( [ col, dir ] );\n\t\t} );\n\n\t\tsettings.aaSorting = sort;\n\t} );\n} );\n\n\n\n_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\tvar ctx = this.context;\n\n\tif ( input === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\tundefined;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\"sSearch\": input+\"\",\n\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t} ), 1 );\n\t} );\n} );\n\n\n_api_registerPlural(\n\t'columns().search()',\n\t'column().search()',\n\tfunction ( input, regex, smart, caseInsen ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar preSearch = settings.aoPreSearchCols;\n\n\t\t\tif ( input === undefined ) {\n\t\t\t\t// get\n\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t}\n\n\t\t\t// set\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} );\n\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t} );\n\t}\n);\n\n/*\n * State API methods\n */\n\n_api_register( 'state()', function () {\n\treturn this.context.length ?\n\t\tthis.context[0].oSavedState :\n\t\tnull;\n} );\n\n\n_api_register( 'state.clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t// Save an empty object\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t} );\n} );\n\n\n_api_register( 'state.loaded()', function () {\n\treturn this.context.length ?\n\t\tthis.context[0].oLoadedState :\n\t\tnull;\n} );\n\n\n_api_register( 'state.save()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSaveState( settings );\n\t} );\n} );\n\n\n\n/**\n * Set the jQuery or window object to be used by DataTables\n *\n * @param {*} module Library / container object\n * @param {string} [type] Library or container type `lib`, `win` or `datetime`.\n *   If not provided, automatic detection is attempted.\n */\nDataTable.use = function (module, type) {\n\tif (type === 'lib' || module.fn) {\n\t\t$ = module;\n\t}\n\telse if (type == 'win' || module.document) {\n\t\twindow = module;\n\t\tdocument = module.document;\n\t}\n\telse if (type === 'datetime' || module.type === 'DateTime') {\n\t\tDataTable.DateTime = module;\n\t}\n}\n\n/**\n * CommonJS factory function pass through. This will check if the arguments\n * given are a window object or a jQuery object. If so they are set\n * accordingly.\n * @param {*} root Window\n * @param {*} jq jQUery\n * @returns {boolean} Indicator\n */\nDataTable.factory = function (root, jq) {\n\tvar is = false;\n\n\t// Test if the first parameter is a window object\n\tif (root && root.document) {\n\t\twindow = root;\n\t\tdocument = root.document;\n\t}\n\n\t// Test if the second parameter is a jQuery object\n\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t$ = jq;\n\t\tis = true;\n\t}\n\n\treturn is;\n}\n\n/**\n * Provide a common method for plug-ins to check the version of DataTables being\n * used, in order to ensure compatibility.\n *\n *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n *  @returns {boolean} true if this version of DataTables is greater or equal to\n *    the required version, or false if this version of DataTales is not\n *    suitable\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n */\nDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n{\n\tvar aThis = DataTable.version.split('.');\n\tvar aThat = version.split('.');\n\tvar iThis, iThat;\n\n\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\n\t\t// Parts are the same, keep comparing\n\t\tif (iThis === iThat) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Parts are different, return immediately\n\t\treturn iThis > iThat;\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Check if a `<table>` node is a DataTable table already or not.\n *\n *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n *      selector for the table to test. Note that if more than more than one\n *      table is passed on, only the first will be checked\n *  @returns {boolean} true the table given is a DataTable, or false otherwise\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n *      $('#example').dataTable();\n *    }\n */\nDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n{\n\tvar t = $(table).get(0);\n\tvar is = false;\n\n\tif ( table instanceof DataTable.Api ) {\n\t\treturn true;\n\t}\n\n\t$.each( DataTable.settings, function (i, o) {\n\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\n\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\tis = true;\n\t\t}\n\t} );\n\n\treturn is;\n};\n\n\n/**\n * Get all DataTable tables that have been initialised - optionally you can\n * select to get only currently visible tables.\n *\n *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n *    or visible tables only.\n *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n *    DataTables\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    $.each( $.fn.dataTable.tables(true), function () {\n *      $(table).DataTable().columns.adjust();\n *    } );\n */\nDataTable.tables = DataTable.fnTables = function ( visible )\n{\n\tvar api = false;\n\n\tif ( $.isPlainObject( visible ) ) {\n\t\tapi = visible.api;\n\t\tvisible = visible.visible;\n\t}\n\n\tvar a = $.map( DataTable.settings, function (o) {\n\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\treturn o.nTable;\n\t\t}\n\t} );\n\n\treturn api ?\n\t\tnew _Api( a ) :\n\t\ta;\n};\n\n\n/**\n * Convert from camel case parameters to Hungarian notation. This is made public\n * for the extensions to provide the same ability as DataTables core to accept\n * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n * parameters.\n *\n *  @param {object} src The model object which holds all parameters that can be\n *    mapped.\n *  @param {object} user The object to convert from camel case to Hungarian.\n *  @param {boolean} force When set to `true`, properties which already have a\n *    Hungarian value in the `user` object will be overwritten. Otherwise they\n *    won't be.\n */\nDataTable.camelToHungarian = _fnCamelToHungarian;\n\n\n\n/**\n *\n */\n_api_register( '$()', function ( selector, opts ) {\n\tvar\n\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\tjqRows = $(rows);\n\n\treturn $( [].concat(\n\t\tjqRows.filter( selector ).toArray(),\n\t\tjqRows.find( selector ).toArray()\n\t) );\n} );\n\n\n// jQuery functions to operate on the tables\n$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\n\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\targs[0] = $.map( args[0].split( /\\s/ ), function ( e ) {\n\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\te+'.dt' :\n\t\t\t\te;\n\t\t\t} ).join( ' ' );\n\n\t\tvar inst = $( this.tables().nodes() );\n\t\tinst[key].apply( inst, args );\n\t\treturn this;\n\t} );\n} );\n\n\n_api_register( 'clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnClearTable( settings );\n\t} );\n} );\n\n\n_api_register( 'settings()', function () {\n\treturn new _Api( this.context, this.context );\n} );\n\n\n_api_register( 'init()', function () {\n\tvar ctx = this.context;\n\treturn ctx.length ? ctx[0].oInit : null;\n} );\n\n\n_api_register( 'data()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t} ).flatten();\n} );\n\n\n_api_register( 'destroy()', function ( remove ) {\n\tremove = remove || false;\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tvar classes   = settings.oClasses;\n\t\tvar table     = settings.nTable;\n\t\tvar tbody     = settings.nTBody;\n\t\tvar thead     = settings.nTHead;\n\t\tvar tfoot     = settings.nTFoot;\n\t\tvar jqTable   = $(table);\n\t\tvar jqTbody   = $(tbody);\n\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\tvar i, ien;\n\n\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t// should be taken\n\t\tsettings.bDestroying = true;\n\n\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\n\t\t// If not being removed from the document, make all columns visible\n\t\tif ( ! remove ) {\n\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t}\n\n\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t// for removing them\n\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t$(window).off('.DT-'+settings.sInstance);\n\n\t\t// When scrolling we had to break the table up - restore it\n\t\tif ( table != thead.parentNode ) {\n\t\t\tjqTable.children('thead').detach();\n\t\t\tjqTable.append( thead );\n\t\t}\n\n\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\tjqTable.children('tfoot').detach();\n\t\t\tjqTable.append( tfoot );\n\t\t}\n\n\t\tsettings.aaSorting = [];\n\t\tsettings.aaSortingFixed = [];\n\t\t_fnSortingClasses( settings );\n\n\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\n\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t);\n\n\t\t// Add the TR elements back into the table in their original order\n\t\tjqTbody.children().detach();\n\t\tjqTbody.append( rows );\n\n\t\tvar orig = settings.nTableWrapper.parentNode;\n\n\t\t// Remove the DataTables generated nodes, events and classes\n\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\tjqTable[ removedMethod ]();\n\t\tjqWrapper[ removedMethod ]();\n\n\t\t// If we need to reattach the table to the document\n\t\tif ( ! remove && orig ) {\n\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\n\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t// so we can restore directly to that\n\t\t\tjqTable\n\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t.removeClass( classes.sTable );\n\n\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\tien = settings.asDestroyStripes.length;\n\n\t\t\tif ( ien ) {\n\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t/* Remove the settings object from the settings array */\n\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\tif ( idx !== -1 ) {\n\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t}\n\t} );\n} );\n\n\n// Add the `every()` method for rows, columns and cells in a compact form\n$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t_api_register( type+'s().every()', function ( fn ) {\n\t\tvar opts = this.selector.opts;\n\t\tvar api = this;\n\n\t\treturn this.iterator( type, function ( settings, arg1, arg2, arg3, arg4 ) {\n\t\t\t// Rows and columns:\n\t\t\t//  arg1 - index\n\t\t\t//  arg2 - table counter\n\t\t\t//  arg3 - loop counter\n\t\t\t//  arg4 - undefined\n\t\t\t// Cells:\n\t\t\t//  arg1 - row index\n\t\t\t//  arg2 - column index\n\t\t\t//  arg3 - table counter\n\t\t\t//  arg4 - loop counter\n\t\t\tfn.call(\n\t\t\t\tapi[ type ](\n\t\t\t\t\targ1,\n\t\t\t\t\ttype==='cell' ? arg2 : opts,\n\t\t\t\t\ttype==='cell' ? opts : undefined\n\t\t\t\t),\n\t\t\t\targ1, arg2, arg3, arg4\n\t\t\t);\n\t\t} );\n\t} );\n} );\n\n\n// i18n method for extensions to be able to use the language object from the\n// DataTable\n_api_register( 'i18n()', function ( token, def, plural ) {\n\tvar ctx = this.context[0];\n\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\n\tif ( resolved === undefined ) {\n\t\tresolved = def;\n\t}\n\n\tif ( plural !== undefined && $.isPlainObject( resolved ) ) {\n\t\tresolved = resolved[ plural ] !== undefined ?\n\t\t\tresolved[ plural ] :\n\t\t\tresolved._;\n\t}\n\n\treturn typeof resolved === 'string'\n\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t: resolved;\n} );\n/**\n * Version string for plug-ins to check compatibility. Allowed format is\n * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n * only for non-release builds. See https://semver.org/ for more information.\n *  @member\n *  @type string\n *  @default Version number\n */\nDataTable.version = \"1.13.11\";\n\n/**\n * Private data store, containing all of the settings objects that are\n * created for the tables on a given page.\n *\n * Note that the `DataTable.settings` object is aliased to\n * `jQuery.fn.dataTableExt` through which it may be accessed and\n * manipulated, or `jQuery.fn.dataTable.settings`.\n *  @member\n *  @type array\n *  @default []\n *  @private\n */\nDataTable.settings = [];\n\n/**\n * Object models container, for the various models that DataTables has\n * available to it. These models define the objects that are used to hold\n * the active state and configuration of the table.\n *  @namespace\n */\nDataTable.models = {};\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * search information for the global filter and individual column filters.\n *  @namespace\n */\nDataTable.models.oSearch = {\n\t/**\n\t * Flag to indicate if the filtering should be case insensitive or not\n\t *  @type boolean\n\t *  @default true\n\t */\n\t\"bCaseInsensitive\": true,\n\n\t/**\n\t * Applied search term\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t */\n\t\"sSearch\": \"\",\n\n\t/**\n\t * Flag to indicate if the search term should be interpreted as a\n\t * regular expression (true) or not (false) and therefore and special\n\t * regex characters escaped.\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bRegex\": false,\n\n\t/**\n\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t *  @type boolean\n\t *  @default true\n\t */\n\t\"bSmart\": true,\n\n\t/**\n\t * Flag to indicate if DataTables should only trigger a search when\n\t * the return key is pressed.\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"return\": false\n};\n\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * each individual row. This is the object format used for the settings\n * aoData array.\n *  @namespace\n */\nDataTable.models.oRow = {\n\t/**\n\t * TR element for the row\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTr\": null,\n\n\t/**\n\t * Array of TD elements for each row. This is null until the row has been\n\t * created.\n\t *  @type array nodes\n\t *  @default []\n\t */\n\t\"anCells\": null,\n\n\t/**\n\t * Data object from the original data source for the row. This is either\n\t * an array if using the traditional form of DataTables, or an object if\n\t * using mData options. The exact type will depend on the passed in\n\t * data from the data source, or will be an array if using DOM a data\n\t * source.\n\t *  @type array|object\n\t *  @default []\n\t */\n\t\"_aData\": [],\n\n\t/**\n\t * Sorting data cache - this array is ostensibly the same length as the\n\t * number of columns (although each index is generated only as it is\n\t * needed), and holds the data that is used for sorting each column in the\n\t * row. We do this cache generation at the start of the sort in order that\n\t * the formatting of the sort data need be done only once for each cell\n\t * per sort. This array should not be read from or written to by anything\n\t * other than the master sorting methods.\n\t *  @type array\n\t *  @default null\n\t *  @private\n\t */\n\t\"_aSortData\": null,\n\n\t/**\n\t * Per cell filtering data cache. As per the sort data cache, used to\n\t * increase the performance of the filtering in DataTables\n\t *  @type array\n\t *  @default null\n\t *  @private\n\t */\n\t\"_aFilterData\": null,\n\n\t/**\n\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t * in this case a string rather than an array. This is easily computed with\n\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t * needed on every search (memory traded for performance)\n\t *  @type array\n\t *  @default null\n\t *  @private\n\t */\n\t\"_sFilterRow\": null,\n\n\t/**\n\t * Cache of the class name that DataTables has applied to the row, so we\n\t * can quickly look at this variable rather than needing to do a DOM check\n\t * on className for the nTr property.\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t *  @private\n\t */\n\t\"_sRowStripe\": \"\",\n\n\t/**\n\t * Denote if the original data source was from the DOM, or the data source\n\t * object. This is used for invalidating data, so DataTables can\n\t * automatically read data from the original source, unless uninstructed\n\t * otherwise.\n\t *  @type string\n\t *  @default null\n\t *  @private\n\t */\n\t\"src\": null,\n\n\t/**\n\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t * object, but want to know the index\n\t *  @type integer\n\t *  @default -1\n\t *  @private\n\t */\n\t\"idx\": -1\n};\n\n\n/**\n * Template object for the column information object in DataTables. This object\n * is held in the settings aoColumns array and contains all the information that\n * DataTables needs about each individual column.\n *\n * Note that this object is related to {@link DataTable.defaults.column}\n * but this one is the internal data store for DataTables's cache of columns.\n * It should NOT be manipulated outside of DataTables. Any configuration should\n * be done through the initialisation options.\n *  @namespace\n */\nDataTable.models.oColumn = {\n\t/**\n\t * Column index. This could be worked out on-the-fly with $.inArray, but it\n\t * is faster to just hold it as a variable\n\t *  @type integer\n\t *  @default null\n\t */\n\t\"idx\": null,\n\n\t/**\n\t * A list of the columns that sorting should occur on when this column\n\t * is sorted. That this property is an array allows multi-column sorting\n\t * to be defined for a column (for example first name / last name columns\n\t * would benefit from this). The values are integers pointing to the\n\t * columns to be sorted on (typically it will be a single integer pointing\n\t * at itself, but that doesn't need to be the case).\n\t *  @type array\n\t */\n\t\"aDataSort\": null,\n\n\t/**\n\t * Define the sorting directions that are applied to the column, in sequence\n\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t * as the sorting direction when the column if first sorted (clicked on).\n\t * Sort it again (click again) and it will move on to the next index.\n\t * Repeat until loop.\n\t *  @type array\n\t */\n\t\"asSorting\": null,\n\n\t/**\n\t * Flag to indicate if the column is searchable, and thus should be included\n\t * in the filtering or not.\n\t *  @type boolean\n\t */\n\t\"bSearchable\": null,\n\n\t/**\n\t * Flag to indicate if the column is sortable or not.\n\t *  @type boolean\n\t */\n\t\"bSortable\": null,\n\n\t/**\n\t * Flag to indicate if the column is currently visible in the table or not\n\t *  @type boolean\n\t */\n\t\"bVisible\": null,\n\n\t/**\n\t * Store for manual type assignment using the `column.type` option. This\n\t * is held in store so we can manipulate the column's `sType` property.\n\t *  @type string\n\t *  @default null\n\t *  @private\n\t */\n\t\"_sManualType\": null,\n\n\t/**\n\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t * source for filtering or sorting. True is either are.\n\t *  @type boolean\n\t *  @default false\n\t *  @private\n\t */\n\t\"_bAttrSrc\": false,\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t *  @type function\n\t *  @param {element} nTd The TD node that has been created\n\t *  @param {*} sData The Data for the cell\n\t *  @param {array|object} oData The data for the whole row\n\t *  @param {int} iRow The row index for the aoData data store\n\t *  @default null\n\t */\n\t\"fnCreatedCell\": null,\n\n\t/**\n\t * Function to get data from a cell in a column. You should <b>never</b>\n\t * access data directly through _aData internally in DataTables - always use\n\t * the method attached to this property. It allows mData to function as\n\t * required. This function is automatically assigned by the column\n\t * initialisation method\n\t *  @type function\n\t *  @param {array|object} oData The data array/object for the array\n\t *    (i.e. aoData[]._aData)\n\t *  @param {string} sSpecific The specific data type you want to get -\n\t *    'display', 'type' 'filter' 'sort'\n\t *  @returns {*} The data for the cell from the given row's data\n\t *  @default null\n\t */\n\t\"fnGetData\": null,\n\n\t/**\n\t * Function to set data for a cell in the column. You should <b>never</b>\n\t * set the data directly to _aData internally in DataTables - always use\n\t * this method. It allows mData to function as required. This function\n\t * is automatically assigned by the column initialisation method\n\t *  @type function\n\t *  @param {array|object} oData The data array/object for the array\n\t *    (i.e. aoData[]._aData)\n\t *  @param {*} sValue Value to set\n\t *  @default null\n\t */\n\t\"fnSetData\": null,\n\n\t/**\n\t * Property to read the value for the cells in the column from the data\n\t * source array / object. If null, then the default content is used, if a\n\t * function is given then the return from the function is used.\n\t *  @type function|int|string|null\n\t *  @default null\n\t */\n\t\"mData\": null,\n\n\t/**\n\t * Partner property to mData which is used (only when defined) to get\n\t * the data - i.e. it is basically the same as mData, but without the\n\t * 'set' option, and also the data fed to it is the result from mData.\n\t * This is the rendering method to match the data method of mData.\n\t *  @type function|int|string|null\n\t *  @default null\n\t */\n\t\"mRender\": null,\n\n\t/**\n\t * Unique header TH/TD element for this column - this is what the sorting\n\t * listener is attached to (if sorting is enabled.)\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTh\": null,\n\n\t/**\n\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t * in DataTables as such, but can be used for plug-ins to reference the\n\t * footer for each column.\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTf\": null,\n\n\t/**\n\t * The class to apply to all TD elements in the table's TBODY for the column\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sClass\": null,\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t *  @type string\n\t */\n\t\"sContentPadding\": null,\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because mData\n\t * is set to null, or because the data source itself is null).\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sDefaultContent\": null,\n\n\t/**\n\t * Name for the column, allowing reference to the column by name as well as\n\t * by index (needs a lookup to work by name).\n\t *  @type string\n\t */\n\t\"sName\": null,\n\n\t/**\n\t * Custom sorting data type - defines which of the available plug-ins in\n\t * afnSortData the custom sorting will use - if any is defined.\n\t *  @type string\n\t *  @default std\n\t */\n\t\"sSortDataType\": 'std',\n\n\t/**\n\t * Class to be applied to the header element when sorting on this column\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sSortingClass\": null,\n\n\t/**\n\t * Class to be applied to the header element when sorting on this column -\n\t * when jQuery UI theming is used.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sSortingClassJUI\": null,\n\n\t/**\n\t * Title of the column - what is seen in the TH element (nTh).\n\t *  @type string\n\t */\n\t\"sTitle\": null,\n\n\t/**\n\t * Column sorting and filtering type\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sType\": null,\n\n\t/**\n\t * Width of the column\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sWidth\": null,\n\n\t/**\n\t * Width of the column when it was first \"encountered\"\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sWidthOrig\": null\n};\n\n\n/*\n * Developer note: The properties of the object below are given in Hungarian\n * notation, that was used as the interface for DataTables prior to v1.10, however\n * from v1.10 onwards the primary interface is camel case. In order to avoid\n * breaking backwards compatibility utterly with this change, the Hungarian\n * version is still, internally the primary interface, but is is not documented\n * - hence the @name tags in each doc comment. This allows a Javascript function\n * to create a map from Hungarian notation to camel case (going the other direction\n * would require each property to be listed, which would add around 3K to the size\n * of DataTables, while this method is about a 0.5K hit).\n *\n * Ultimately this does pave the way for Hungarian notation to be dropped\n * completely, but that is a massive amount of work and will break current\n * installs (therefore is on-hold until v2).\n */\n\n/**\n * Initialisation options that can be given to DataTables at initialisation\n * time.\n *  @namespace\n */\nDataTable.defaults = {\n\t/**\n\t * An array of data to use for the table, passed in at initialisation which\n\t * will be used in preference to any data which is already in the DOM. This is\n\t * particularly useful for constructing tables purely in Javascript, for\n\t * example with a custom Ajax call.\n\t *  @type array\n\t *  @default null\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.data\n\t *\n\t *  @example\n\t *    // Using a 2D array data source\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"data\": [\n\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t *        ],\n\t *        \"columns\": [\n\t *          { \"title\": \"Engine\" },\n\t *          { \"title\": \"Browser\" },\n\t *          { \"title\": \"Platform\" },\n\t *          { \"title\": \"Version\" },\n\t *          { \"title\": \"Grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using an array of objects as a data source (`data`)\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"data\": [\n\t *          {\n\t *            \"engine\":   \"Trident\",\n\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t *            \"platform\": \"Win 95+\",\n\t *            \"version\":  4,\n\t *            \"grade\":    \"X\"\n\t *          },\n\t *          {\n\t *            \"engine\":   \"Trident\",\n\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t *            \"platform\": \"Win 95+\",\n\t *            \"version\":  5,\n\t *            \"grade\":    \"C\"\n\t *          }\n\t *        ],\n\t *        \"columns\": [\n\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"aaData\": null,\n\n\n\t/**\n\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t * initialisation. You can define which column(s) the sort is performed\n\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t * should contain an array for each column to be sorted initially containing\n\t * the column's index and a direction string ('asc' or 'desc').\n\t *  @type array\n\t *  @default [[0,'asc']]\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.order\n\t *\n\t *  @example\n\t *    // Sort by 3rd column first, and then 4th column\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t *      } );\n\t *    } );\n\t *\n\t *    // No initial sorting\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"order\": []\n\t *      } );\n\t *    } );\n\t */\n\t\"aaSorting\": [[0,'asc']],\n\n\n\t/**\n\t * This parameter is basically identical to the `sorting` parameter, but\n\t * cannot be overridden by user interaction with the table. What this means\n\t * is that you could have a column (visible or hidden) which the sorting\n\t * will always be forced on first - any sorting after that (from the user)\n\t * will then be performed as required. This can be useful for grouping rows\n\t * together.\n\t *  @type array\n\t *  @default null\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.orderFixed\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"orderFixed\": [[0,'asc']]\n\t *      } );\n\t *    } )\n\t */\n\t\"aaSortingFixed\": [],\n\n\n\t/**\n\t * DataTables can be instructed to load data to display in the table from a\n\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t *\n\t * The `ajax` property has three different modes of operation, depending on\n\t * how it is defined. These are:\n\t *\n\t * * `string` - Set the URL from where the data should be loaded from.\n\t * * `object` - Define properties for `jQuery.ajax`.\n\t * * `function` - Custom data get function\n\t *\n\t * `string`\n\t * --------\n\t *\n\t * As a string, the `ajax` property simply defines the URL from which\n\t * DataTables will load data.\n\t *\n\t * `object`\n\t * --------\n\t *\n\t * As an object, the parameters in the object are passed to\n\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t * of the Ajax request. DataTables has a number of default parameters which\n\t * you can override using this option. Please refer to the jQuery\n\t * documentation for a full description of the options available, although\n\t * the following parameters provide additional options in DataTables or\n\t * require special consideration:\n\t *\n\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t *   can also be used as a function to manipulate the data DataTables sends\n\t *   to the server. The function takes a single parameter, an object of\n\t *   parameters with the values that DataTables has readied for sending. An\n\t *   object may be returned which will be merged into the DataTables\n\t *   defaults, or you can add the items to the object that was passed in and\n\t *   not return anything from the function. This supersedes `fnServerParams`\n\t *   from DataTables 1.9-.\n\t *\n\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t *   from an Ajax source or for server-side processing - this parameter\n\t *   allows that property to be changed. You can use Javascript dotted\n\t *   object notation to get a data source for multiple levels of nesting, or\n\t *   it my be used as a function. As a function it takes a single parameter,\n\t *   the JSON returned from the server, which can be manipulated as\n\t *   required, with the returned value being that used by DataTables as the\n\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t *   DataTables 1.9-.\n\t *\n\t * * `success` - Should not be overridden it is used internally in\n\t *   DataTables. To manipulate / transform the data returned by the server\n\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t *\n\t * `function`\n\t * ----------\n\t *\n\t * As a function, making the Ajax call is left up to yourself allowing\n\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t * than Ajax could be used to obtain the required data, such as Web storage\n\t * or an AIR database.\n\t *\n\t * The function is given four parameters and no return is required. The\n\t * parameters are:\n\t *\n\t * 1. _object_ - Data to send to the server\n\t * 2. _function_ - Callback function that must be executed when the required\n\t *    data has been obtained. That data should be passed into the callback\n\t *    as the only parameter\n\t * 3. _object_ - DataTables settings object for the table\n\t *\n\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t *\n\t *  @type string|object|function\n\t *  @default null\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.ajax\n\t *  @since 1.10.0\n\t *\n\t * @example\n\t *   // Get JSON data from a file via Ajax.\n\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": \"data.json\"\n\t *   } );\n\t *\n\t * @example\n\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"dataSrc\": \"tableData\"\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t *   // from a plain array rather than an array in an object\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"dataSrc\": \"\"\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Manipulate the data returned from the server - add a link to data\n\t *   // (note this can, should, be done using `render` for the column - this\n\t *   // is just a simple example of how the data can be manipulated).\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"dataSrc\": function ( json ) {\n\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t *         }\n\t *         return json;\n\t *       }\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Add data to the request\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"data\": function ( d ) {\n\t *         return {\n\t *           \"extra_search\": $('#extra').val()\n\t *         };\n\t *       }\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Send request as POST\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": {\n\t *       \"url\": \"data.json\",\n\t *       \"type\": \"POST\"\n\t *     }\n\t *   } );\n\t *\n\t * @example\n\t *   // Get the data from localStorage (could interface with a form for\n\t *   // adding, editing and removing rows).\n\t *   $('#example').dataTable( {\n\t *     \"ajax\": function (data, callback, settings) {\n\t *       callback(\n\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t *       );\n\t *     }\n\t *   } );\n\t */\n\t\"ajax\": null,\n\n\n\t/**\n\t * This parameter allows you to readily specify the entries in the length drop\n\t * down menu that DataTables shows when pagination is enabled. It can be\n\t * either a 1D array of options which will be used for both the displayed\n\t * option and the value, or a 2D array which will use the array in the first\n\t * position as the value, and the array in the second position as the\n\t * displayed options (useful for language strings such as 'All').\n\t *\n\t * Note that the `pageLength` property will be automatically set to the\n\t * first value given in this array, unless `pageLength` is also provided.\n\t *  @type array\n\t *  @default [ 10, 25, 50, 100 ]\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.lengthMenu\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t *      } );\n\t *    } );\n\t */\n\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\n\n\t/**\n\t * The `columns` option in the initialisation parameter allows you to define\n\t * details about the way individual columns behave. For a full list of\n\t * column options that can be set, please see\n\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t * define your columns, you must have an entry in the array for every single\n\t * column that you have in your table (these can be null if you don't which\n\t * to specify any options).\n\t *  @member\n\t *\n\t *  @name DataTable.defaults.column\n\t */\n\t\"aoColumns\": null,\n\n\t/**\n\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t * column, multiple columns, or all columns, using the `targets` property of\n\t * each object in the array. This allows great flexibility when creating\n\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t * columns you specifically want. `columnDefs` may use any of the column\n\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t * have `targets` defined in each object in the array. Values in the `targets`\n\t * array may be:\n\t *   <ul>\n\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t *     <li>a negative integer - column index counting from the right</li>\n\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t *   </ul>\n\t *  @member\n\t *\n\t *  @name DataTable.defaults.columnDefs\n\t */\n\t\"aoColumnDefs\": null,\n\n\n\t/**\n\t * Basically the same as `search`, this parameter defines the individual column\n\t * filtering state at initialisation time. The array must be of the same size\n\t * as the number of columns, and each element be an object with the parameters\n\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t * accepted and the default will be used.\n\t *  @type array\n\t *  @default []\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.searchCols\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"searchCols\": [\n\t *          null,\n\t *          { \"search\": \"My filter\" },\n\t *          null,\n\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t *        ]\n\t *      } );\n\t *    } )\n\t */\n\t\"aoSearchCols\": [],\n\n\n\t/**\n\t * An array of CSS classes that should be applied to displayed rows. This\n\t * array may be of any length, and DataTables will apply each class\n\t * sequentially, looping when required.\n\t *  @type array\n\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t *    options</i>\n\t *\n\t *  @dtopt Option\n\t *  @name DataTable.defaults.stripeClasses\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t *      } );\n\t *    } )\n\t */\n\t\"asStripeClasses\": null,\n\n\n\t/**\n\t * Enable or disable automatic column width calculation. This can be disabled\n\t * as an optimisation (it takes some time to calculate the widths) if the\n\t * tables widths are passed in using `columns`.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.autoWidth\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"autoWidth\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bAutoWidth\": true,\n\n\n\t/**\n\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t * are using an Ajax or JS data source for the table. This option, when set to\n\t * true, will cause DataTables to defer the creation of the table elements for\n\t * each row until they are needed for a draw - saving a significant amount of\n\t * time.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.deferRender\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajax\": \"sources/arrays.txt\",\n\t *        \"deferRender\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bDeferRender\": false,\n\n\n\t/**\n\t * Replace a DataTable which matches the given selector and replace it with\n\t * one which has the properties of the new initialisation object passed. If no\n\t * table matches the selector, then the new DataTable will be constructed as\n\t * per normal.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.destroy\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"srollY\": \"200px\",\n\t *        \"paginate\": false\n\t *      } );\n\t *\n\t *      // Some time later....\n\t *      $('#example').dataTable( {\n\t *        \"filter\": false,\n\t *        \"destroy\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bDestroy\": false,\n\n\n\t/**\n\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t * that it allows the end user to input multiple words (space separated) and\n\t * will match a row containing those words, even if not in the order that was\n\t * specified (this allow matching across multiple columns). Note that if you\n\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t * default filtering input box and retain filtering abilities, please use\n\t * {@link DataTable.defaults.dom}.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.searching\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"searching\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bFilter\": true,\n\n\n\t/**\n\t * Enable or disable the table information display. This shows information\n\t * about the data that is currently visible on the page, including information\n\t * about filtered data if that action is being performed.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.info\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"info\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bInfo\": true,\n\n\n\t/**\n\t * Allows the end user to select the size of a formatted page from a select\n\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.lengthChange\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"lengthChange\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bLengthChange\": true,\n\n\n\t/**\n\t * Enable or disable pagination.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.paging\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"paging\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bPaginate\": true,\n\n\n\t/**\n\t * Enable or disable the display of a 'processing' indicator when the table is\n\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t * large amounts of data where it can take a noticeable amount of time to sort\n\t * the entries.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.processing\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"processing\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bProcessing\": false,\n\n\n\t/**\n\t * Retrieve the DataTables object for the given selector. Note that if the\n\t * table has already been initialised, this parameter will cause DataTables\n\t * to simply return the object that has already been set up - it will not take\n\t * account of any changes you might have made to the initialisation object\n\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t * you need.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.retrieve\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      initTable();\n\t *      tableActions();\n\t *    } );\n\t *\n\t *    function initTable ()\n\t *    {\n\t *      return $('#example').dataTable( {\n\t *        \"scrollY\": \"200px\",\n\t *        \"paginate\": false,\n\t *        \"retrieve\": true\n\t *      } );\n\t *    }\n\t *\n\t *    function tableActions ()\n\t *    {\n\t *      var table = initTable();\n\t *      // perform API operations with oTable\n\t *    }\n\t */\n\t\"bRetrieve\": false,\n\n\n\t/**\n\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t * the table's viewport to the given height at all times (useful for layout).\n\t * However, this can look odd when filtering data down to a small data set,\n\t * and the footer is left \"floating\" further down. This parameter (when\n\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t * the result set will fit within the given Y height.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.scrollCollapse\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollY\": \"200\",\n\t *        \"scrollCollapse\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bScrollCollapse\": false,\n\n\n\t/**\n\t * Configure DataTables to use server-side processing. Note that the\n\t * `ajax` parameter must also be given in order to give DataTables a\n\t * source to obtain the required data for each draw.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverSide\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"serverSide\": true,\n\t *        \"ajax\": \"xhr.php\"\n\t *      } );\n\t *    } );\n\t */\n\t\"bServerSide\": false,\n\n\n\t/**\n\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t * disabled by the `sortable` option for each column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.ordering\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"ordering\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bSort\": true,\n\n\n\t/**\n\t * Enable or display DataTables' ability to sort multiple columns at the\n\t * same time (activated by shift-click by the user).\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.orderMulti\n\t *\n\t *  @example\n\t *    // Disable multiple column sorting ability\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"orderMulti\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bSortMulti\": true,\n\n\n\t/**\n\t * Allows control over whether DataTables should use the top (true) unique\n\t * cell that is found for a single column, or the bottom (false - default).\n\t * This is useful when using complex headers.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.orderCellsTop\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"orderCellsTop\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bSortCellsTop\": false,\n\n\n\t/**\n\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t * presented as a feature switch as it can increase processing time (while\n\t * classes are removed and added) so for large data sets you might want to\n\t * turn this off.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.orderClasses\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"orderClasses\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"bSortClasses\": true,\n\n\n\t/**\n\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t * used to save table display information such as pagination information,\n\t * display length, filtering and sorting. As such when the end user reloads\n\t * the page the display display will match what thy had previously set up.\n\t *\n\t * Due to the use of `localStorage` the default state saving is not supported\n\t * in IE6 or 7. If state saving is required in those browsers, use\n\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t *  @type boolean\n\t *  @default false\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.stateSave\n\t *\n\t *  @example\n\t *    $(document).ready( function () {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"bStateSave\": false,\n\n\n\t/**\n\t * This function is called when a TR element is created (and all TD child\n\t * elements have been inserted), or registered if using a DOM source, allowing\n\t * manipulation of the TR element (adding classes etc).\n\t *  @type function\n\t *  @param {node} row \"TR\" element for the current row\n\t *  @param {array} data Raw data array for this row\n\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.createdRow\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t *          // Bold the grade for all 'A' grade browsers\n\t *          if ( data[4] == \"A\" )\n\t *          {\n\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t *          }\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnCreatedRow\": null,\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify any aspect you want about the created DOM.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.drawCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"drawCallback\": function( settings ) {\n\t *          alert( 'DataTables has redrawn the table' );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnDrawCallback\": null,\n\n\n\t/**\n\t * Identical to fnHeaderCallback() but for the table footer this function\n\t * allows you to modify the table footer on every 'draw' event.\n\t *  @type function\n\t *  @param {node} foot \"TR\" element for the footer\n\t *  @param {array} data Full table data (as derived from the original HTML)\n\t *  @param {int} start Index for the current display starting point in the\n\t *    display array\n\t *  @param {int} end Index for the current display ending point in the\n\t *    display array\n\t *  @param {array int} display Index array to translate the visual position\n\t *    to the full data array\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.footerCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t *        }\n\t *      } );\n\t *    } )\n\t */\n\t\"fnFooterCallback\": null,\n\n\n\t/**\n\t * When rendering large numbers in the information element for the table\n\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t * function will override the default method DataTables uses.\n\t *  @type function\n\t *  @member\n\t *  @param {int} toFormat number to be formatted\n\t *  @returns {string} formatted string for DataTables to show the number\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.formatNumber\n\t *\n\t *  @example\n\t *    // Format a number using a single quote for the separator (note that\n\t *    // this can also be done with the language.thousands option)\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"formatNumber\": function ( toFormat ) {\n\t *          return toFormat.toString().replace(\n\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t *          );\n\t *        };\n\t *      } );\n\t *    } );\n\t */\n\t\"fnFormatNumber\": function ( toFormat ) {\n\t\treturn toFormat.toString().replace(\n\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\tthis.oLanguage.sThousands\n\t\t);\n\t},\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify the header row. This can be used to calculate and\n\t * display useful information about the table.\n\t *  @type function\n\t *  @param {node} head \"TR\" element for the header\n\t *  @param {array} data Full table data (as derived from the original HTML)\n\t *  @param {int} start Index for the current display starting point in the\n\t *    display array\n\t *  @param {int} end Index for the current display ending point in the\n\t *    display array\n\t *  @param {array int} display Index array to translate the visual position\n\t *    to the full data array\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.headerCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t *        }\n\t *      } );\n\t *    } )\n\t */\n\t\"fnHeaderCallback\": null,\n\n\n\t/**\n\t * The information element can be used to convey information about the current\n\t * state of the table. Although the internationalisation options presented by\n\t * DataTables are quite capable of dealing with most customisations, there may\n\t * be times where you wish to customise the string further. This callback\n\t * allows you to do exactly that.\n\t *  @type function\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {int} start Starting position in data for the draw\n\t *  @param {int} end End position in data for the draw\n\t *  @param {int} max Total number of rows in the table (regardless of\n\t *    filtering)\n\t *  @param {int} total Total number of rows in the data set, after filtering\n\t *  @param {string} pre The string that DataTables has formatted using it's\n\t *    own rules\n\t *  @returns {string} The string to be displayed in the information element.\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.infoCallback\n\t *\n\t *  @example\n\t *    $('#example').dataTable( {\n\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t *        return start +\" to \"+ end;\n\t *      }\n\t *    } );\n\t */\n\t\"fnInfoCallback\": null,\n\n\n\t/**\n\t * Called when the table has been initialised. Normally DataTables will\n\t * initialise sequentially and there will be no need for this function,\n\t * however, this does not hold true when using external language information\n\t * since that is obtained using an async XHR call.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} json The JSON object request from the server - only\n\t *    present if client-side Ajax sourced data is used\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.initComplete\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"initComplete\": function(settings, json) {\n\t *          alert( 'DataTables has finished its initialisation.' );\n\t *        }\n\t *      } );\n\t *    } )\n\t */\n\t\"fnInitComplete\": null,\n\n\n\t/**\n\t * Called at the very start of each table draw and can be used to cancel the\n\t * draw by returning false, any other return (including undefined) results in\n\t * the full draw occurring).\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t *    return) will allow it to complete.\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.preDrawCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"preDrawCallback\": function( settings ) {\n\t *          if ( $('#test').val() == 1 ) {\n\t *            return false;\n\t *          }\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnPreDrawCallback\": null,\n\n\n\t/**\n\t * This function allows you to 'post process' each row after it have been\n\t * generated for each table draw, but before it is rendered on screen. This\n\t * function might be used for setting the row class name etc.\n\t *  @type function\n\t *  @param {node} row \"TR\" element for the current row\n\t *  @param {array} data Raw data array for this row\n\t *  @param {int} displayIndex The display index for the current table draw\n\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t *    rows (after filtering)\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.rowCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t *          // Bold the grade for all 'A' grade browsers\n\t *          if ( data[4] == \"A\" ) {\n\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t *          }\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnRowCallback\": null,\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * This parameter allows you to override the default function which obtains\n\t * the data from the server so something more suitable for your application.\n\t * For example you could use POST data, or pull information from a Gears or\n\t * AIR database.\n\t *  @type function\n\t *  @member\n\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t *  @param {array} data A key/value pair object containing the data to send\n\t *    to the server\n\t *  @param {function} callback to be called on completion of the data get\n\t *    process that will draw the data on the page.\n\t *  @param {object} settings DataTables settings object\n\t *\n\t *  @dtopt Callbacks\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverData\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"fnServerData\": null,\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t *  It is often useful to send extra data to the server when making an Ajax\n\t * request - for example custom filtering information, and this callback\n\t * function makes it trivial to send extra information to the server. The\n\t * passed in parameter is the data set that has been constructed by\n\t * DataTables, and you can add to this or modify it as you require.\n\t *  @type function\n\t *  @param {array} data Data array (array of objects which are name/value\n\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t *    server. In the case of Ajax sourced data with server-side processing\n\t *    this will be an empty array, for server-side processing there will be a\n\t *    significant number of parameters!\n\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t *    as this is passed by reference.\n\t *\n\t *  @dtopt Callbacks\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverParams\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"fnServerParams\": null,\n\n\n\t/**\n\t * Load the table state. With this function you can define from where, and how, the\n\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t *  @type function\n\t *  @member\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} callback Callback that can be executed when done. It\n\t *    should be passed the loaded state object.\n\t *  @return {object} The DataTables state object to be loaded\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateLoadCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoadCallback\": function (settings, callback) {\n\t *          $.ajax( {\n\t *            \"url\": \"/state_load\",\n\t *            \"dataType\": \"json\",\n\t *            \"success\": function (json) {\n\t *              callback( json );\n\t *            }\n\t *          } );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateLoadCallback\": function ( settings ) {\n\t\ttry {\n\t\t\treturn JSON.parse(\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (e) {\n\t\t\treturn {};\n\t\t}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the saved state prior to loading that state.\n\t * This callback is called when the table is loading state from the stored data, but\n\t * prior to the settings object being modified by the saved state. Note that for\n\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t * a plug-in.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object that is to be loaded\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateLoadParams\n\t *\n\t *  @example\n\t *    // Remove a saved filter, so filtering is never loaded\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoadParams\": function (settings, data) {\n\t *          data.oSearch.sSearch = \"\";\n\t *        }\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Disallow state loading by returning false\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoadParams\": function (settings, data) {\n\t *          return false;\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateLoadParams\": null,\n\n\n\t/**\n\t * Callback that is called when the state has been loaded from the state saving method\n\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object that was loaded\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateLoaded\n\t *\n\t *  @example\n\t *    // Show an alert with the filtering value that was saved\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateLoaded\": function (settings, data) {\n\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateLoaded\": null,\n\n\n\t/**\n\t * Save the table state. This function allows you to define where and how the state\n\t * information for the table is stored By default DataTables will use `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t *  @type function\n\t *  @member\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object to be saved\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateSaveCallback\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateSaveCallback\": function (settings, data) {\n\t *          // Send an Ajax request to the server with the state object\n\t *          $.ajax( {\n\t *            \"url\": \"/state_save\",\n\t *            \"data\": data,\n\t *            \"dataType\": \"json\",\n\t *            \"method\": \"POST\"\n\t *            \"success\": function () {}\n\t *          } );\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\ttry {\n\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\tJSON.stringify( data )\n\t\t\t);\n\t\t} catch (e) {}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the state to be saved. Called when the table\n\t * has changed state a new state save is required. This method allows modification of\n\t * the state saving object prior to actually doing the save, including addition or\n\t * other state properties or modification. Note that for plug-in authors, you should\n\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t *  @type function\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} data The state object to be saved\n\t *\n\t *  @dtopt Callbacks\n\t *  @name DataTable.defaults.stateSaveParams\n\t *\n\t *  @example\n\t *    // Remove a saved filter, so filtering is never saved\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateSave\": true,\n\t *        \"stateSaveParams\": function (settings, data) {\n\t *          data.oSearch.sSearch = \"\";\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"fnStateSaveParams\": null,\n\n\n\t/**\n\t * Duration for which the saved state information is considered valid. After this period\n\t * has elapsed the state will be returned to the default.\n\t * Value is given in seconds.\n\t *  @type int\n\t *  @default 7200 <i>(2 hours)</i>\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.stateDuration\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"stateDuration\": 60*60*24; // 1 day\n\t *      } );\n\t *    } )\n\t */\n\t\"iStateDuration\": 7200,\n\n\n\t/**\n\t * When enabled DataTables will not make a request to the server for the first\n\t * page draw - rather it will use the data already on the page (no sorting etc\n\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t * is used to indicate that deferred loading is required, but it is also used\n\t * to tell DataTables how many records there are in the full table (allowing\n\t * the information element and pagination to be displayed correctly). In the case\n\t * where a filtering is applied to the table on initial load, this can be\n\t * indicated by giving the parameter as an array, where the first element is\n\t * the number of records available after filtering and the second element is the\n\t * number of records without filtering (allowing the table information element\n\t * to be shown correctly).\n\t *  @type int | array\n\t *  @default null\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.deferLoading\n\t *\n\t *  @example\n\t *    // 57 records available in the table, no filtering applied\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"serverSide\": true,\n\t *        \"ajax\": \"scripts/server_processing.php\",\n\t *        \"deferLoading\": 57\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"serverSide\": true,\n\t *        \"ajax\": \"scripts/server_processing.php\",\n\t *        \"deferLoading\": [ 57, 100 ],\n\t *        \"search\": {\n\t *          \"search\": \"my_filter\"\n\t *        }\n\t *      } );\n\t *    } );\n\t */\n\t\"iDeferLoading\": null,\n\n\n\t/**\n\t * Number of rows to display on a single page when using pagination. If\n\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t * this to a custom setting using a pop-up menu.\n\t *  @type int\n\t *  @default 10\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.pageLength\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"pageLength\": 50\n\t *      } );\n\t *    } )\n\t */\n\t\"iDisplayLength\": 10,\n\n\n\t/**\n\t * Define the starting point for data display when using DataTables with\n\t * pagination. Note that this parameter is the number of records, rather than\n\t * the page number, so if you have 10 records per page and want to start on\n\t * the third page, it should be \"20\".\n\t *  @type int\n\t *  @default 0\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.displayStart\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"displayStart\": 20\n\t *      } );\n\t *    } )\n\t */\n\t\"iDisplayStart\": 0,\n\n\n\t/**\n\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t * allows you to tab through the controls and press the enter key to activate them.\n\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t * disable built-in keyboard navigation.\n\t *  @type int\n\t *  @default 0\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.tabIndex\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"tabIndex\": 1\n\t *      } );\n\t *    } );\n\t */\n\t\"iTabIndex\": 0,\n\n\n\t/**\n\t * Classes that DataTables assigns to the various components and features\n\t * that it adds to the HTML table. This allows classes to be configured\n\t * during initialisation in addition to through the static\n\t * {@link DataTable.ext.oStdClasses} object).\n\t *  @namespace\n\t *  @name DataTable.defaults.classes\n\t */\n\t\"oClasses\": {},\n\n\n\t/**\n\t * All strings that DataTables uses in the user interface that it creates\n\t * are defined in this object, allowing you to modified them individually or\n\t * completely replace them all as required.\n\t *  @namespace\n\t *  @name DataTable.defaults.language\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t * must be internationalised as well).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language.aria\n\t\t */\n\t\t\"oAria\": {\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t *  @type string\n\t\t\t *  @default : activate to sort column ascending\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"aria\": {\n\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSortAscending\": \": activate to sort column ascending\",\n\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t *  @type string\n\t\t\t *  @default : activate to sort column ascending\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"aria\": {\n\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSortDescending\": \": activate to sort column descending\"\n\t\t},\n\n\t\t/**\n\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t * control types.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language.paginate\n\t\t */\n\t\t\"oPaginate\": {\n\t\t\t/**\n\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t * button to take the user to the first page.\n\t\t\t *  @type string\n\t\t\t *  @default First\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"first\": \"First page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sFirst\": \"First\",\n\n\n\t\t\t/**\n\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t * button to take the user to the last page.\n\t\t\t *  @type string\n\t\t\t *  @default Last\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"last\": \"Last page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLast\": \"Last\",\n\n\n\t\t\t/**\n\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t * next page).\n\t\t\t *  @type string\n\t\t\t *  @default Next\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"next\": \"Next page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sNext\": \"Next\",\n\n\n\t\t\t/**\n\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t * the previous page).\n\t\t\t *  @type string\n\t\t\t *  @default Previous\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"paginate\": {\n\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t *          }\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sPrevious\": \"Previous\"\n\t\t},\n\n\t\t/**\n\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t * instead (either the default or given value).\n\t\t *  @type string\n\t\t *  @default No data available in table\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sEmptyTable\": \"No data available in table\",\n\n\n\t\t/**\n\t\t * This string gives information to the end user about the information\n\t\t * that is current on display on the page. The following tokens can be\n\t\t * used in the string and will be dynamically replaced as the table\n\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t * removed as needed by the language requires:\n\t\t *\n\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t * * `\\_PAGE\\_` - Current page number\n\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t *\n\t\t *  @type string\n\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n\n\n\t\t/**\n\t\t * Display information string for when the table is empty. Typically the\n\t\t * format of this string should match `info`.\n\t\t *  @type string\n\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 entries\",\n\n\n\t\t/**\n\t\t * When a user filters the information in a table, this string is appended\n\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t *  @type string\n\t\t *  @default (filtered from _MAX_ total entries)\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total entries)\",\n\n\n\t\t/**\n\t\t * If can be useful to append extra information to the info string at times,\n\t\t * and this variable does exactly that. This information will be appended to\n\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t * being used) at all times.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sInfoPostFix\": \"\",\n\n\n\t\t/**\n\t\t * This decimal place operator is a little different from the other\n\t\t * language options since DataTables doesn't output floating point\n\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t * what this parameter does is modify the sort methods of the table so\n\t\t * that numbers which are in a format which has a character other than\n\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t *\n\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t * the same table and still be sortable, the table must be consistent.\n\t\t * However, multiple different tables on the page can use different\n\t\t * decimal place characters.\n\t\t *  @type string\n\t\t *  @default \n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.decimal\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"decimal\": \",\"\n\t\t *          \"thousands\": \".\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDecimal\": \"\",\n\n\n\t\t/**\n\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t * used to format large numbers that are used in the table information.\n\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t * character you wish with this parameter.\n\t\t *  @type string\n\t\t *  @default ,\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.thousands\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"thousands\": \"'\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sThousands\": \",\",\n\n\n\t\t/**\n\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t * with a custom select box if required.\n\t\t *  @type string\n\t\t *  @default Show _MENU_ entries\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    // Language change only\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Language and options change\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t *            '<option value=\"10\">10</option>'+\n\t\t *            '<option value=\"20\">20</option>'+\n\t\t *            '<option value=\"30\">30</option>'+\n\t\t *            '<option value=\"40\">40</option>'+\n\t\t *            '<option value=\"50\">50</option>'+\n\t\t *            '<option value=\"-1\">All</option>'+\n\t\t *            '</select> records'\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sLengthMenu\": \"Show _MENU_ entries\",\n\n\n\t\t/**\n\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t * parameter is not used when loading data by server-side processing, just\n\t\t * Ajax sourced data with client-side processing.\n\t\t *  @type string\n\t\t *  @default Loading...\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sLoadingRecords\": \"Loading...\",\n\n\n\t\t/**\n\t\t * Text which is displayed when the table is processing a user action\n\t\t * (usually a sort command or similar).\n\t\t *  @type string\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sProcessing\": \"\",\n\n\n\t\t/**\n\t\t * Details the actions that will be taken when the user types into the\n\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t * then the input box is appended to the string automatically.\n\t\t *  @type string\n\t\t *  @default Search:\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.search\n\t\t *\n\t\t *  @example\n\t\t *    // Input text box will be appended at the end automatically\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"search\": \"Filter records:\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Specify where the filter should appear\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSearch\": \"Search:\",\n\n\n\t\t/**\n\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t *  @type string\n\t\t *  @default \n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t */\n\t\t\"sSearchPlaceholder\": \"\",\n\n\n\t\t/**\n\t\t * All of the language information can be stored in a file on the\n\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t * and the object has the same properties as the oLanguage object in the\n\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t * the example language files to see how this works in action.\n\t\t *  @type string\n\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.url\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"url\": \"https://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sUrl\": \"\",\n\n\n\t\t/**\n\t\t * Text shown inside the table records when the is no information to be\n\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t * information in the table at all (regardless of filtering).\n\t\t *  @type string\n\t\t *  @default No matching records found\n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"language\": {\n\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sZeroRecords\": \"No matching records found\"\n\t},\n\n\n\t/**\n\t * This parameter allows you to have define the global filtering state at\n\t * initialisation time. As an object the `search` parameter must be\n\t * defined, but all other parameters are optional. When `regex` is true,\n\t * the search string will be treated as a regular expression, when false\n\t * (default) it will be treated as a straight string. When `smart`\n\t * DataTables will use it's smart filtering methods (to word match at\n\t * any point in the data), when false this will not be done.\n\t *  @namespace\n\t *  @extends DataTable.models.oSearch\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.search\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"search\": {\"search\": \"Initial search\"}\n\t *      } );\n\t *    } )\n\t */\n\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * By default DataTables will look for the property `data` (or `aaData` for\n\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t * source or for server-side processing - this parameter allows that\n\t * property to be changed. You can use Javascript dotted object notation to\n\t * get a data source for multiple levels of nesting.\n\t *  @type string\n\t *  @default data\n\t *\n\t *  @dtopt Options\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.ajaxDataProp\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sAjaxDataProp\": \"data\",\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * You can instruct DataTables to load data from an external\n\t * source using this parameter (use aData if you want to pass data in you\n\t * already have). Simply provide a url a JSON object can be obtained from.\n\t *  @type string\n\t *  @default null\n\t *\n\t *  @dtopt Options\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.ajaxSource\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sAjaxSource\": null,\n\n\n\t/**\n\t * This initialisation variable allows you to specify exactly where in the\n\t * DOM you want DataTables to inject the various controls it adds to the page\n\t * (for example you might want the pagination controls at the top of the\n\t * table). DIV elements (with or without a custom class) can also be added to\n\t * aid styling. The follow syntax is used:\n\t *   <ul>\n\t *     <li>The following options are allowed:\n\t *       <ul>\n\t *         <li>'l' - Length changing</li>\n\t *         <li>'f' - Filtering input</li>\n\t *         <li>'t' - The table!</li>\n\t *         <li>'i' - Information</li>\n\t *         <li>'p' - Pagination</li>\n\t *         <li>'r' - pRocessing</li>\n\t *       </ul>\n\t *     </li>\n\t *     <li>The following constants are allowed:\n\t *       <ul>\n\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t *       </ul>\n\t *     </li>\n\t *     <li>The following syntax is expected:\n\t *       <ul>\n\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t *       </ul>\n\t *     </li>\n\t *     <li>Examples:\n\t *       <ul>\n\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t *       </ul>\n\t *     </li>\n\t *   </ul>\n\t *  @type string\n\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.dom\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t *      } );\n\t *    } );\n\t */\n\t\"sDom\": \"lfrtip\",\n\n\n\t/**\n\t * Search delay option. This will throttle full table searches that use the\n\t * DataTables provided search input element (it does not effect calls to\n\t * `dt-api search()`, providing a delay before the search is made.\n\t *  @type integer\n\t *  @default 0\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.searchDelay\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"searchDelay\": 200\n\t *      } );\n\t *    } )\n\t */\n\t\"searchDelay\": null,\n\n\n\t/**\n\t * DataTables features six different built-in options for the buttons to\n\t * display for pagination control:\n\t *\n\t * * `numbers` - Page number buttons only\n\t * * `simple` - 'Previous' and 'Next' buttons only\n\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t *  \n\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t *  @type string\n\t *  @default simple_numbers\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.pagingType\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"pagingType\": \"full_numbers\"\n\t *      } );\n\t *    } )\n\t */\n\t\"sPaginationType\": \"simple_numbers\",\n\n\n\t/**\n\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t * certain layout, or you have a large number of columns in the table, you\n\t * can enable x-scrolling to show the table in a viewport, which can be\n\t * scrolled. This property can be `true` which will allow the table to\n\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t * is recommended.\n\t *  @type boolean|string\n\t *  @default <i>blank string - i.e. disabled</i>\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.scrollX\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollX\": true,\n\t *        \"scrollCollapse\": true\n\t *      } );\n\t *    } );\n\t */\n\t\"sScrollX\": \"\",\n\n\n\t/**\n\t * This property can be used to force a DataTable to use more width than it\n\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t * table which requires to be well spaced, this parameter is useful for\n\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t * measurement).\n\t *  @type string\n\t *  @default <i>blank string - i.e. disabled</i>\n\t *\n\t *  @dtopt Options\n\t *  @name DataTable.defaults.scrollXInner\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollX\": \"100%\",\n\t *        \"scrollXInner\": \"110%\"\n\t *      } );\n\t *    } );\n\t */\n\t\"sScrollXInner\": \"\",\n\n\n\t/**\n\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t * to the given height, and enable scrolling for any data which overflows the\n\t * current viewport. This can be used as an alternative to paging to display\n\t * a lot of data in a small area (although paging and scrolling can both be\n\t * enabled at the same time). This property can be any CSS unit, or a number\n\t * (in which case it will be treated as a pixel measurement).\n\t *  @type string\n\t *  @default <i>blank string - i.e. disabled</i>\n\t *\n\t *  @dtopt Features\n\t *  @name DataTable.defaults.scrollY\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"scrollY\": \"200px\",\n\t *        \"paginate\": false\n\t *      } );\n\t *    } );\n\t */\n\t\"sScrollY\": \"\",\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t * processing or Ajax sourced data.\n\t *  @type string\n\t *  @default GET\n\t *\n\t *  @dtopt Options\n\t *  @dtopt Server-side\n\t *  @name DataTable.defaults.serverMethod\n\t *\n\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t */\n\t\"sServerMethod\": \"GET\",\n\n\n\t/**\n\t * DataTables makes use of renderers when displaying HTML elements for\n\t * a table. These renderers can be added or modified by plug-ins to\n\t * generate suitable mark-up for a site. For example the Bootstrap\n\t * integration plug-in for DataTables uses a paging button renderer to\n\t * display pagination buttons in the mark-up required by Bootstrap.\n\t *\n\t * For further information about the renderers available see\n\t * DataTable.ext.renderer\n\t *  @type string|object\n\t *  @default null\n\t *\n\t *  @name DataTable.defaults.renderer\n\t *\n\t */\n\t\"renderer\": null,\n\n\n\t/**\n\t * Set the data property name that DataTables should use to get a row's id\n\t * to set as the `id` property in the node.\n\t *  @type string\n\t *  @default DT_RowId\n\t *\n\t *  @name DataTable.defaults.rowId\n\t */\n\t\"rowId\": \"DT_RowId\"\n};\n\n_fnHungarianMap( DataTable.defaults );\n\n\n\n/*\n * Developer note - See note in model.defaults.js about the use of Hungarian\n * notation and camel case.\n */\n\n/**\n * Column options that can be given to DataTables at initialisation time.\n *  @namespace\n */\nDataTable.defaults.column = {\n\t/**\n\t * Define which column(s) an order will occur on for this column. This\n\t * allows a column's ordering to take multiple columns into account when\n\t * doing a sort or use the data from a different column. For example first\n\t * name / last name columns make sense to do a multi-column sort over the\n\t * two columns.\n\t *  @type array|int\n\t *  @default null <i>Takes the value of the column index automatically</i>\n\t *\n\t *  @name DataTable.defaults.column.orderData\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"orderData\": [ 0, 1 ] },\n\t *          { \"orderData\": [ 1, 0 ] },\n\t *          { \"orderData\": 2 },\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"aDataSort\": null,\n\t\"iDataSort\": -1,\n\n\n\t/**\n\t * You can control the default ordering direction, and even alter the\n\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t * using this parameter.\n\t *  @type array\n\t *  @default [ 'asc', 'desc' ]\n\t *\n\t *  @name DataTable.defaults.column.orderSequence\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          { \"orderSequence\": [ \"asc\" ] },\n\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t *          { \"orderSequence\": [ \"desc\" ] },\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"asSorting\": [ 'asc', 'desc' ],\n\n\n\t/**\n\t * Enable or disable filtering on the data in this column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @name DataTable.defaults.column.searchable\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t *        ] } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"searchable\": false },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ] } );\n\t *    } );\n\t */\n\t\"bSearchable\": true,\n\n\n\t/**\n\t * Enable or disable ordering on this column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @name DataTable.defaults.column.orderable\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t *        ] } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"orderable\": false },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ] } );\n\t *    } );\n\t */\n\t\"bSortable\": true,\n\n\n\t/**\n\t * Enable or disable the display of this column.\n\t *  @type boolean\n\t *  @default true\n\t *\n\t *  @name DataTable.defaults.column.visible\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t *        ] } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"visible\": false },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ] } );\n\t *    } );\n\t */\n\t\"bVisible\": true,\n\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t *  @type function\n\t *  @param {element} td The TD node that has been created\n\t *  @param {*} cellData The Data for the cell\n\t *  @param {array|object} rowData The data for the whole row\n\t *  @param {int} row The row index for the aoData data store\n\t *  @param {int} col The column index for aoColumns\n\t *\n\t *  @name DataTable.defaults.column.createdCell\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [3],\n\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t *            if ( cellData == \"1.7\" ) {\n\t *              $(td).css('color', 'blue')\n\t *            }\n\t *          }\n\t *        } ]\n\t *      });\n\t *    } );\n\t */\n\t\"fnCreatedCell\": null,\n\n\n\t/**\n\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t * consistency. `dataProp` can still be used, as there is backwards\n\t * compatibility in DataTables for this option, but it is strongly\n\t * recommended that you use `data` in preference to `dataProp`.\n\t *  @name DataTable.defaults.column.dataProp\n\t */\n\n\n\t/**\n\t * This property can be used to read data from any data source property,\n\t * including deeply nested objects / properties. `data` can be given in a\n\t * number of different ways which effect its behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t *   default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t *   three 'special' options that can be used in the string to alter how\n\t *   DataTables reads the data from the source object:\n\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t *      Javascript to read from nested objects, so to can the options\n\t *      specified in `data`. For example: `browser.version` or\n\t *      `browser.name`. If your object parameter name contains a period, use\n\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t *      from and array source, joining the data with the characters provided\n\t *      between the two brackets. For example: `name[, ]` would provide a\n\t *      comma-space separated list from the source array. If no characters\n\t *      are provided between the brackets, the original array source is\n\t *      returned.\n\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t *      execute a function of the name given. For example: `browser()` for a\n\t *      simple function on the data source, `browser.version()` for a\n\t *      function in a nested property or even `browser().version` to get an\n\t *      object property if the function called returns an object. Note that\n\t *      function notation is recommended for use in `render` rather than\n\t *      `data` as it is much simpler to use as a renderer.\n\t * * `null` - use the original data source for the row rather than plucking\n\t *   data directly from it. This action has effects on two other\n\t *   initialisation options:\n\t *    * `defaultContent` - When null is given as the `data` option and\n\t *      `defaultContent` is specified for the column, the value defined by\n\t *      `defaultContent` will be used for the cell.\n\t *    * `render` - When null is used for the `data` option and the `render`\n\t *      option is specified for the column, the whole data source for the\n\t *      row is used for the renderer.\n\t * * `function` - the function given will be executed whenever DataTables\n\t *   needs to set or get the data for a cell in the column. The function\n\t *   takes three parameters:\n\t *    * Parameters:\n\t *      * `{array|object}` The data source for the row\n\t *      * `{string}` The type call data requested - this will be 'set' when\n\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t *        when gathering data. Note that when `undefined` is given for the\n\t *        type DataTables expects to get the raw data for the object back<\n\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t *    * Return:\n\t *      * The return value from the function is not required when 'set' is\n\t *        the type of call, but otherwise the return is what will be used\n\t *        for the data requested.\n\t *\n\t * Note that `data` is a getter and setter option. If you just require\n\t * formatting of data for output, you will likely want to use `render` which\n\t * is simply a getter and thus simpler to use.\n\t *\n\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t * name change reflects the flexibility of this property and is consistent\n\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t * be used by DataTables, as it automatically maps the old name to the new\n\t * if required.\n\t *\n\t *  @type string|int|function|null\n\t *  @default null <i>Use automatically calculated column index</i>\n\t *\n\t *  @name DataTable.defaults.column.data\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Read table data from objects\n\t *    // JSON structure for each row:\n\t *    //   {\n\t *    //      \"engine\": {value},\n\t *    //      \"browser\": {value},\n\t *    //      \"platform\": {value},\n\t *    //      \"version\": {value},\n\t *    //      \"grade\": {value}\n\t *    //   }\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t *        \"columns\": [\n\t *          { \"data\": \"engine\" },\n\t *          { \"data\": \"browser\" },\n\t *          { \"data\": \"platform\" },\n\t *          { \"data\": \"version\" },\n\t *          { \"data\": \"grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Read information from deeply nested objects\n\t *    // JSON structure for each row:\n\t *    //   {\n\t *    //      \"engine\": {value},\n\t *    //      \"browser\": {value},\n\t *    //      \"platform\": {\n\t *    //         \"inner\": {value}\n\t *    //      },\n\t *    //      \"details\": [\n\t *    //         {value}, {value}\n\t *    //      ]\n\t *    //   }\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t *        \"columns\": [\n\t *          { \"data\": \"engine\" },\n\t *          { \"data\": \"browser\" },\n\t *          { \"data\": \"platform.inner\" },\n\t *          { \"data\": \"details.0\" },\n\t *          { \"data\": \"details.1\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `data` as a function to provide different information for\n\t *    // sorting, filtering and display. In this case, currency (price)\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": function ( source, type, val ) {\n\t *            if (type === 'set') {\n\t *              source.price = val;\n\t *              // Store the computed display and filter values for efficiency\n\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t *              return;\n\t *            }\n\t *            else if (type === 'display') {\n\t *              return source.price_display;\n\t *            }\n\t *            else if (type === 'filter') {\n\t *              return source.price_filter;\n\t *            }\n\t *            // 'sort', 'type' and undefined all just use the integer\n\t *            return source.price;\n\t *          }\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using default content\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": null,\n\t *          \"defaultContent\": \"Click to edit\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using array notation - outputting a list from an array\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": \"name[, ]\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t */\n\t\"mData\": null,\n\n\n\t/**\n\t * This property is the rendering partner to `data` and it is suggested that\n\t * when you want to manipulate data for display (including filtering,\n\t * sorting etc) without altering the underlying data for the table, use this\n\t * property. `render` can be considered to be the the read only companion to\n\t * `data` which is read / write (then as such more complex). Like `data`\n\t * this option can be given in a number of different ways to effect its\n\t * behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t *   default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t *   three 'special' options that can be used in the string to alter how\n\t *   DataTables reads the data from the source object:\n\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t *      Javascript to read from nested objects, so to can the options\n\t *      specified in `data`. For example: `browser.version` or\n\t *      `browser.name`. If your object parameter name contains a period, use\n\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t *      from and array source, joining the data with the characters provided\n\t *      between the two brackets. For example: `name[, ]` would provide a\n\t *      comma-space separated list from the source array. If no characters\n\t *      are provided between the brackets, the original array source is\n\t *      returned.\n\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t *      execute a function of the name given. For example: `browser()` for a\n\t *      simple function on the data source, `browser.version()` for a\n\t *      function in a nested property or even `browser().version` to get an\n\t *      object property if the function called returns an object.\n\t * * `object` - use different data for the different data types requested by\n\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t *   of the object is the data type the property refers to and the value can\n\t *   defined using an integer, string or function using the same rules as\n\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t *   This is the default value to use if you haven't specified a value for\n\t *   the data type requested by DataTables.\n\t * * `function` - the function given will be executed whenever DataTables\n\t *   needs to set or get the data for a cell in the column. The function\n\t *   takes three parameters:\n\t *    * Parameters:\n\t *      * {array|object} The data source for the row (based on `data`)\n\t *      * {string} The type call data requested - this will be 'filter',\n\t *        'display', 'type' or 'sort'.\n\t *      * {array|object} The full data source for the row (not based on\n\t *        `data`)\n\t *    * Return:\n\t *      * The return value from the function is what will be used for the\n\t *        data requested.\n\t *\n\t *  @type string|int|function|object|null\n\t *  @default null Use the data source value.\n\t *\n\t *  @name DataTable.defaults.column.render\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Create a comma separated list from an array of objects\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t *        \"columns\": [\n\t *          { \"data\": \"engine\" },\n\t *          { \"data\": \"browser\" },\n\t *          {\n\t *            \"data\": \"platform\",\n\t *            \"render\": \"[, ].name\"\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Execute a function to obtain data\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t *          \"render\": \"browserName()\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // As an object, extracting different data for the different types\n\t *    // This would be used with a data source such as:\n\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t *    // the formatted phone number is the one that is shown in the table.\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t *          \"render\": {\n\t *            \"_\": \"phone\",\n\t *            \"filter\": \"phone_filter\",\n\t *            \"display\": \"phone_display\"\n\t *          }\n\t *        } ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Use as a function to create a link from the data source\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"data\": \"download_link\",\n\t *          \"render\": function ( data, type, full ) {\n\t *            return '<a href=\"'+data+'\">Download</a>';\n\t *          }\n\t *        } ]\n\t *      } );\n\t *    } );\n\t */\n\t\"mRender\": null,\n\n\n\t/**\n\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t *  @type string\n\t *  @default td\n\t *\n\t *  @name DataTable.defaults.column.cellType\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Make the first column use TH cells\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [ {\n\t *          \"targets\": [ 0 ],\n\t *          \"cellType\": \"th\"\n\t *        } ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sCellType\": \"td\",\n\n\n\t/**\n\t * Class to give to each cell in this column.\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t *\n\t *  @name DataTable.defaults.column.class\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"class\": \"my_class\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sClass\": \"\",\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t * Generally you shouldn't need this!\n\t *  @type string\n\t *  @default <i>Empty string<i>\n\t *\n\t *  @name DataTable.defaults.column.contentPadding\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          {\n\t *            \"contentPadding\": \"mmm\"\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sContentPadding\": \"\",\n\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because `data`\n\t * is set to null, or because the data source itself is null).\n\t *  @type string\n\t *  @default null\n\t *\n\t *  @name DataTable.defaults.column.defaultContent\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          {\n\t *            \"data\": null,\n\t *            \"defaultContent\": \"Edit\",\n\t *            \"targets\": [ -1 ]\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          {\n\t *            \"data\": null,\n\t *            \"defaultContent\": \"Edit\"\n\t *          }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sDefaultContent\": null,\n\n\n\t/**\n\t * This parameter is only used in DataTables' server-side processing. It can\n\t * be exceptionally useful to know what columns are being displayed on the\n\t * client side, and to map these to database fields. When defined, the names\n\t * also allow DataTables to reorder information from the server if it comes\n\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t * client-side, your server-side code does not also need updating).\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t *\n\t *  @name DataTable.defaults.column.name\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"name\": \"engine\" },\n\t *          { \"name\": \"browser\" },\n\t *          { \"name\": \"platform\" },\n\t *          { \"name\": \"version\" },\n\t *          { \"name\": \"grade\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sName\": \"\",\n\n\n\t/**\n\t * Defines a data source type for the ordering which can be used to read\n\t * real-time information from the table (updating the internally cached\n\t * version) prior to ordering. This allows ordering to occur on user\n\t * editable elements such as form inputs.\n\t *  @type string\n\t *  @default std\n\t *\n\t *  @name DataTable.defaults.column.orderDataType\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          null,\n\t *          null,\n\t *          { \"orderDataType\": \"dom-text\" },\n\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t *          { \"orderDataType\": \"dom-select\" },\n\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sSortDataType\": \"std\",\n\n\n\t/**\n\t * The title of this column.\n\t *  @type string\n\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t *    original HTML table.</i>\n\t *\n\t *  @name DataTable.defaults.column.title\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"title\": \"My column title\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sTitle\": null,\n\n\n\t/**\n\t * The type allows you to specify how the data for this column will be\n\t * ordered. Four types (string, numeric, date and html (which will strip\n\t * HTML tags before ordering)) are currently available. Note that only date\n\t * formats understood by Javascript's Date() object will be accepted as type\n\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t * through plug-ins.\n\t *  @type string\n\t *  @default null <i>Auto-detected from raw data</i>\n\t *\n\t *  @name DataTable.defaults.column.type\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"type\": \"html\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sType\": null,\n\n\n\t/**\n\t * Defining the width of the column, this parameter may take any CSS value\n\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t * been given a specific width through this interface ensuring that the table\n\t * remains readable.\n\t *  @type string\n\t *  @default null <i>Automatic</i>\n\t *\n\t *  @name DataTable.defaults.column.width\n\t *  @dtopt Columns\n\t *\n\t *  @example\n\t *    // Using `columnDefs`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columnDefs\": [\n\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t *        ]\n\t *      } );\n\t *    } );\n\t *\n\t *  @example\n\t *    // Using `columns`\n\t *    $(document).ready( function() {\n\t *      $('#example').dataTable( {\n\t *        \"columns\": [\n\t *          { \"width\": \"20%\" },\n\t *          null,\n\t *          null,\n\t *          null,\n\t *          null\n\t *        ]\n\t *      } );\n\t *    } );\n\t */\n\t\"sWidth\": null\n};\n\n_fnHungarianMap( DataTable.defaults.column );\n\n\n\n/**\n * DataTables settings object - this holds all the information needed for a\n * given table, including configuration, data and current application of the\n * table options. DataTables does not have a single instance for each DataTable\n * with the settings attached to that instance, but rather instances of the\n * DataTable \"class\" are created on-the-fly as needed (typically by a\n * $().dataTable() call) and the settings object is then applied to that\n * instance.\n *\n * Note that this object is related to {@link DataTable.defaults} but this\n * one is the internal data store for DataTables's cache of columns. It should\n * NOT be manipulated outside of DataTables. Any configuration should be done\n * through the initialisation options.\n *  @namespace\n *  @todo Really should attach the settings object to individual instances so we\n *    don't need to create new instances on each $().dataTable() call (if the\n *    table already exists). It would also save passing oSettings around and\n *    into every single function. However, this is a very significant\n *    architecture change for DataTables and will almost certainly break\n *    backwards compatibility with older installations. This is something that\n *    will be done in 2.0.\n */\nDataTable.models.oSettings = {\n\t/**\n\t * Primary features of DataTables and their enablement state.\n\t *  @namespace\n\t */\n\t\"oFeatures\": {\n\n\t\t/**\n\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t * optimum table and columns widths (true) or not (false).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bAutoWidth\": null,\n\n\t\t/**\n\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t * needed by a driven page draw. This can give a significant speed\n\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t * difference at all for DOM and server-side processing tables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bDeferRender\": null,\n\n\t\t/**\n\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bFilter\": null,\n\n\t\t/**\n\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t * flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bInfo\": null,\n\n\t\t/**\n\t\t * Present a user control allowing the end user to change the page size\n\t\t * when pagination is enabled.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bLengthChange\": null,\n\n\t\t/**\n\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t * changing must also be disabled.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bPaginate\": null,\n\n\t\t/**\n\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t * user request - typically an Ajax request for server-side processing.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bProcessing\": null,\n\n\t\t/**\n\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t * get all data from the server for every draw - there is no filtering,\n\t\t * sorting or paging done on the client-side.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bServerSide\": null,\n\n\t\t/**\n\t\t * Sorting enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSort\": null,\n\n\t\t/**\n\t\t * Multi-column sorting\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortMulti\": null,\n\n\t\t/**\n\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t * there is a lot of DOM interaction.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortClasses\": null,\n\n\t\t/**\n\t\t * State saving enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bStateSave\": null\n\t},\n\n\n\t/**\n\t * Scrolling settings for a table.\n\t *  @namespace\n\t */\n\t\"oScroll\": {\n\t\t/**\n\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t * table container down to the height of the table (when true).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bCollapse\": null,\n\n\t\t/**\n\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t * during table initialisation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iBarWidth\": 0,\n\n\t\t/**\n\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t * disabled if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sX\": null,\n\n\t\t/**\n\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t * should not need to use this.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @deprecated\n\t\t */\n\t\t\"sXInner\": null,\n\n\t\t/**\n\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t * if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sY\": null\n\t},\n\n\t/**\n\t * Language information for the table.\n\t *  @namespace\n\t *  @extends DataTable.defaults.oLanguage\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Information callback function. See\n\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t *  @type function\n\t\t *  @default null\n\t\t */\n\t\t\"fnInfoCallback\": null\n\t},\n\n\t/**\n\t * Browser support parameters\n\t *  @namespace\n\t */\n\t\"oBrowser\": {\n\t\t/**\n\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t * scrolling element (IE6/7)\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bScrollOversize\": false,\n\n\t\t/**\n\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t * scrolling container - needed for rtl language layout, although not\n\t\t * all browsers move the scrollbar (Safari).\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bScrollbarLeft\": false,\n\n\t\t/**\n\t\t * Flag for if `getBoundingClientRect` is fully supported or not\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bBounding\": false,\n\n\t\t/**\n\t\t * Browser scrollbar width\n\t\t *  @type integer\n\t\t *  @default 0\n\t\t */\n\t\t\"barWidth\": 0\n\t},\n\n\n\t\"ajax\": null,\n\n\n\t/**\n\t * Array referencing the nodes which are used for the features. The\n\t * parameters of this object match what is allowed by sDom - i.e.\n\t *   <ul>\n\t *     <li>'l' - Length changing</li>\n\t *     <li>'f' - Filtering input</li>\n\t *     <li>'t' - The table!</li>\n\t *     <li>'i' - Information</li>\n\t *     <li>'p' - Pagination</li>\n\t *     <li>'r' - pRocessing</li>\n\t *   </ul>\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aanFeatures\": [],\n\n\t/**\n\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t * information.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoData\": [],\n\n\t/**\n\t * Array of indexes which are in the current display (after filtering etc)\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aiDisplay\": [],\n\n\t/**\n\t * Array of indexes for display - no filtering\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aiDisplayMaster\": [],\n\n\t/**\n\t * Map of row ids to data indexes\n\t *  @type object\n\t *  @default {}\n\t */\n\t\"aIds\": {},\n\n\t/**\n\t * Store information about each column that is in use\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoColumns\": [],\n\n\t/**\n\t * Store information about the table's header\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoHeader\": [],\n\n\t/**\n\t * Store information about the table's footer\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoFooter\": [],\n\n\t/**\n\t * Store the applied global search information in case we want to force a\n\t * research or compare the old search to a new one.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @namespace\n\t *  @extends DataTable.models.oSearch\n\t */\n\t\"oPreviousSearch\": {},\n\n\t/**\n\t * Store the applied search for each column - see\n\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t * filtering information for each column.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoPreSearchCols\": [],\n\n\t/**\n\t * Sorting that is applied to the table. Note that the inner arrays are\n\t * used in the following manner:\n\t * <ul>\n\t *   <li>Index 0 - column number</li>\n\t *   <li>Index 1 - current sorting direction</li>\n\t * </ul>\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @todo These inner arrays should really be objects\n\t */\n\t\"aaSorting\": null,\n\n\t/**\n\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t * aaSorting).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aaSortingFixed\": [],\n\n\t/**\n\t * Classes to use for the striping of a table.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"asStripeClasses\": null,\n\n\t/**\n\t * If restoring a table - we should restore its striping classes as well\n\t *  @type array\n\t *  @default []\n\t */\n\t\"asDestroyStripes\": [],\n\n\t/**\n\t * If restoring a table - we should restore its width\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"sDestroyWidth\": 0,\n\n\t/**\n\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoRowCallback\": [],\n\n\t/**\n\t * Callback functions for the header on each draw.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoHeaderCallback\": [],\n\n\t/**\n\t * Callback function for the footer on each draw.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoFooterCallback\": [],\n\n\t/**\n\t * Array of callback functions for draw callback functions\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoDrawCallback\": [],\n\n\t/**\n\t * Array of callback functions for row created function\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoRowCreatedCallback\": [],\n\n\t/**\n\t * Callback functions for just before the table is redrawn. A return of\n\t * false will be used to cancel the draw.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoPreDrawCallback\": [],\n\n\t/**\n\t * Callback functions for when the table has been initialised.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoInitComplete\": [],\n\n\n\t/**\n\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t * saving state.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateSaveParams\": [],\n\n\t/**\n\t * Callbacks for modifying the settings that have been stored for state saving\n\t * prior to using the stored values to restore the state.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateLoadParams\": [],\n\n\t/**\n\t * Callbacks for operating on the settings object once the saved state has been\n\t * loaded\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateLoaded\": [],\n\n\t/**\n\t * Cache the table ID for quick access\n\t *  @type string\n\t *  @default <i>Empty string</i>\n\t */\n\t\"sTableId\": \"\",\n\n\t/**\n\t * The TABLE node for the main table\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTable\": null,\n\n\t/**\n\t * Permanent ref to the thead element\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTHead\": null,\n\n\t/**\n\t * Permanent ref to the tfoot element - if it exists\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTFoot\": null,\n\n\t/**\n\t * Permanent ref to the tbody element\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTBody\": null,\n\n\t/**\n\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t *  @type node\n\t *  @default null\n\t */\n\t\"nTableWrapper\": null,\n\n\t/**\n\t * Indicate if when using server-side processing the loading of data\n\t * should be deferred until the second draw.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bDeferLoading\": false,\n\n\t/**\n\t * Indicate if all required information has been read in\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bInitialised\": false,\n\n\t/**\n\t * Information about open rows. Each object in the array has the parameters\n\t * 'nTr' and 'nParent'\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoOpenRows\": [],\n\n\t/**\n\t * Dictate the positioning of DataTables' control elements - see\n\t * {@link DataTable.model.oInit.sDom}.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sDom\": null,\n\n\t/**\n\t * Search delay (in mS)\n\t *  @type integer\n\t *  @default null\n\t */\n\t\"searchDelay\": null,\n\n\t/**\n\t * Which type of pagination should be used.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t *  @default two_button\n\t */\n\t\"sPaginationType\": \"two_button\",\n\n\t/**\n\t * The state duration (for `stateSave`) in seconds.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"iStateDuration\": 0,\n\n\t/**\n\t * Array of callback functions for state saving. Each array element is an\n\t * object with the following parameters:\n\t *   <ul>\n\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t *       and the JSON string to save that has been thus far created. Returns\n\t *       a JSON string to be inserted into a json object\n\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t *     <li>string:sName - name of callback</li>\n\t *   </ul>\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateSave\": [],\n\n\t/**\n\t * Array of callback functions for state loading. Each array element is an\n\t * object with the following parameters:\n\t *   <ul>\n\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t *       and the object stored. May return false to cancel state loading</li>\n\t *     <li>string:sName - name of callback</li>\n\t *   </ul>\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoStateLoad\": [],\n\n\t/**\n\t * State that was saved. Useful for back reference\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oSavedState\": null,\n\n\t/**\n\t * State that was loaded. Useful for back reference\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oLoadedState\": null,\n\n\t/**\n\t * Source url for AJAX data for the table.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sAjaxSource\": null,\n\n\t/**\n\t * Property from a given object from which to read the table data from. This\n\t * can be an empty string (when not server-side processing), in which case\n\t * it is  assumed an an array is given directly.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t */\n\t\"sAjaxDataProp\": null,\n\n\t/**\n\t * The last jQuery XHR object that was used for server-side data gathering.\n\t * This can be used for working with the XHR information in one of the\n\t * callbacks\n\t *  @type object\n\t *  @default null\n\t */\n\t\"jqXHR\": null,\n\n\t/**\n\t * JSON returned from the server in the last Ajax request\n\t *  @type object\n\t *  @default undefined\n\t */\n\t\"json\": undefined,\n\n\t/**\n\t * Data submitted as part of the last Ajax request\n\t *  @type object\n\t *  @default undefined\n\t */\n\t\"oAjaxData\": undefined,\n\n\t/**\n\t * Function to get the server-side data.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type function\n\t */\n\t\"fnServerData\": null,\n\n\t/**\n\t * Functions which are called prior to sending an Ajax request so extra\n\t * parameters can easily be sent to the server\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoServerParams\": [],\n\n\t/**\n\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t * required).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type string\n\t */\n\t\"sServerMethod\": null,\n\n\t/**\n\t * Format numbers for display.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type function\n\t */\n\t\"fnFormatNumber\": null,\n\n\t/**\n\t * List of options that can be used for the user selectable length menu.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aLengthMenu\": null,\n\n\t/**\n\t * Counter for the draws that the table does. Also used as a tracker for\n\t * server-side processing\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"iDraw\": 0,\n\n\t/**\n\t * Indicate if a redraw is being done - useful for Ajax\n\t *  @type boolean\n\t *  @default false\n\t */\n\t\"bDrawing\": false,\n\n\t/**\n\t * Draw index (iDraw) of the last error when parsing the returned data\n\t *  @type int\n\t *  @default -1\n\t */\n\t\"iDrawError\": -1,\n\n\t/**\n\t * Paging display length\n\t *  @type int\n\t *  @default 10\n\t */\n\t\"_iDisplayLength\": 10,\n\n\t/**\n\t * Paging start point - aiDisplay index\n\t *  @type int\n\t *  @default 0\n\t */\n\t\"_iDisplayStart\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the result set\n\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t *  @type int\n\t *  @default 0\n\t *  @private\n\t */\n\t\"_iRecordsTotal\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the current display set\n\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t *  @type boolean\n\t *  @default 0\n\t *  @private\n\t */\n\t\"_iRecordsDisplay\": 0,\n\n\t/**\n\t * The classes to use for the table\n\t *  @type object\n\t *  @default {}\n\t */\n\t\"oClasses\": {},\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t * events.\n\t *  @type boolean\n\t *  @default false\n\t *  @deprecated\n\t */\n\t\"bFiltered\": false,\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t * events.\n\t *  @type boolean\n\t *  @default false\n\t *  @deprecated\n\t */\n\t\"bSorted\": false,\n\n\t/**\n\t * Indicate that if multiple rows are in the header and there is more than\n\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t * should be used for sorting / title by DataTables.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t *  @type boolean\n\t */\n\t\"bSortCellsTop\": null,\n\n\t/**\n\t * Initialisation object that is used for the table\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oInit\": null,\n\n\t/**\n\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t * destroy so they can clean up markup and events.\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aoDestroyCallback\": [],\n\n\n\t/**\n\t * Get the number of records in the current record set, before filtering\n\t *  @type function\n\t */\n\t\"fnRecordsTotal\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsTotal * 1 :\n\t\t\tthis.aiDisplayMaster.length;\n\t},\n\n\t/**\n\t * Get the number of records in the current record set, after filtering\n\t *  @type function\n\t */\n\t\"fnRecordsDisplay\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\tthis.aiDisplay.length;\n\t},\n\n\t/**\n\t * Get the display end point - aiDisplay index\n\t *  @type function\n\t */\n\t\"fnDisplayEnd\": function ()\n\t{\n\t\tvar\n\t\t\tlen      = this._iDisplayLength,\n\t\t\tstart    = this._iDisplayStart,\n\t\t\tcalc     = start + len,\n\t\t\trecords  = this.aiDisplay.length,\n\t\t\tfeatures = this.oFeatures,\n\t\t\tpaginate = features.bPaginate;\n\n\t\tif ( features.bServerSide ) {\n\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\tstart + records :\n\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t}\n\t\telse {\n\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\trecords :\n\t\t\t\tcalc;\n\t\t}\n\t},\n\n\t/**\n\t * The DataTables object for this table\n\t *  @type object\n\t *  @default null\n\t */\n\t\"oInstance\": null,\n\n\t/**\n\t * Unique identifier for each instance of the DataTables object. If there\n\t * is an ID on the table node, then it takes that value, otherwise an\n\t * incrementing internal counter is used.\n\t *  @type string\n\t *  @default null\n\t */\n\t\"sInstance\": null,\n\n\t/**\n\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t * keyboard navigation of the table and its controls.\n\t */\n\t\"iTabIndex\": 0,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollHead\": null,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollFoot\": null,\n\n\t/**\n\t * Last applied sort\n\t *  @type array\n\t *  @default []\n\t */\n\t\"aLastSort\": [],\n\n\t/**\n\t * Stored plug-in instances\n\t *  @type object\n\t *  @default {}\n\t */\n\t\"oPlugins\": {},\n\n\t/**\n\t * Function used to get a row's id from the row's data\n\t *  @type function\n\t *  @default null\n\t */\n\t\"rowIdFn\": null,\n\n\t/**\n\t * Data location where to store a row's id\n\t *  @type string\n\t *  @default null\n\t */\n\t\"rowId\": null\n};\n\n/**\n * Extension object for DataTables that is used to provide all extension\n * options.\n *\n * Note that the `DataTable.ext` object is available through\n * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n *  @namespace\n *  @extends DataTable.models.ext\n */\n\n\n/**\n * DataTables extensions\n * \n * This namespace acts as a collection area for plug-ins that can be used to\n * extend DataTables capabilities. Indeed many of the build in methods\n * use this method to provide their own capabilities (sorting methods for\n * example).\n *\n * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n * reasons\n *\n *  @namespace\n */\nDataTable.ext = _ext = {\n\t/**\n\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t * defined here so other extensions can define buttons regardless of load\n\t * order. It is _not_ used by DataTables core.\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tbuttons: {},\n\n\n\t/**\n\t * Element class names\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tclasses: {},\n\n\n\t/**\n\t * DataTables build type (expanded by the download builder)\n\t *\n\t *  @type string\n\t */\n\tbuilder: \"-source-\",\n\n\n\t/**\n\t * Error reporting.\n\t * \n\t * How should DataTables report an error. Can take the value 'alert',\n\t * 'throw', 'none' or a function.\n\t *\n\t *  @type string|function\n\t *  @default alert\n\t */\n\terrMode: \"alert\",\n\n\n\t/**\n\t * Feature plug-ins.\n\t * \n\t * This is an array of objects which describe the feature plug-ins that are\n\t * available to DataTables. These feature plug-ins are then available for\n\t * use through the `dom` initialisation option.\n\t * \n\t * Each feature plug-in is described by an object which must have the\n\t * following properties:\n\t * \n\t * * `fnInit` - function that is used to initialise the plug-in,\n\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t *   instillation option. This is case sensitive.\n\t *\n\t * The `fnInit` function has the following input parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t *\n\t * And the following return is expected:\n\t * \n\t * * {node|null} The element which contains your feature. Note that the\n\t *   return may also be void if your plug-in does not require to inject any\n\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t *   be useful when developing a plug-in which allows table control via\n\t *   keyboard entry\n\t *\n\t *  @type array\n\t *\n\t *  @example\n\t *    $.fn.dataTable.ext.features.push( {\n\t *      \"fnInit\": function( oSettings ) {\n\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t *      },\n\t *      \"cFeature\": \"T\"\n\t *    } );\n\t */\n\tfeature: [],\n\n\n\t/**\n\t * Row searching.\n\t * \n\t * This method of searching is complimentary to the default type based\n\t * searching, and a lot more comprehensive as it allows you complete control\n\t * over the searching logic. Each element in this array is a function\n\t * (parameters described below) that is called for every row in the table,\n\t * and your logic decides if it should be included in the searching data set\n\t * or not.\n\t *\n\t * Searching functions have the following input parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t *    original format that was passed in as the data source, or an array\n\t *    from a DOM data source\n\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t *\n\t * And the following return is expected:\n\t *\n\t * * {boolean} Include the row in the searched result set (true) or not\n\t *   (false)\n\t *\n\t * Note that as with the main search ability in DataTables, technically this\n\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t * naming we call it searching here.\n\t *\n\t *  @type array\n\t *  @default []\n\t *\n\t *  @example\n\t *    // The following example shows custom search being applied to the\n\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t *    // from the end-user, matching the data in a certain range.\n\t *    $.fn.dataTable.ext.search.push(\n\t *      function( settings, data, dataIndex ) {\n\t *        var min = document.getElementById('min').value * 1;\n\t *        var max = document.getElementById('max').value * 1;\n\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t *\n\t *        if ( min == \"\" && max == \"\" ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min == \"\" && version < max ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min < version && \"\" == max ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min < version && version < max ) {\n\t *          return true;\n\t *        }\n\t *        return false;\n\t *      }\n\t *    );\n\t */\n\tsearch: [],\n\n\n\t/**\n\t * Selector extensions\n\t *\n\t * The `selector` option can be used to extend the options available for the\n\t * selector modifier options (`selector-modifier` object data type) that\n\t * each of the three built in selector types offer (row, column and cell +\n\t * their plural counterparts). For example the Select extension uses this\n\t * mechanism to provide an option to select only rows, columns and cells\n\t * that have been marked as selected by the end user (`{selected: true}`),\n\t * which can be used in conjunction with the existing built in selector\n\t * options.\n\t *\n\t * Each property is an array to which functions can be pushed. The functions\n\t * take three attributes:\n\t *\n\t * * Settings object for the host table\n\t * * Options object (`selector-modifier` object type)\n\t * * Array of selected item indexes\n\t *\n\t * The return is an array of the resulting item indexes after the custom\n\t * selector has been applied.\n\t *\n\t *  @type object\n\t */\n\tselector: {\n\t\tcell: [],\n\t\tcolumn: [],\n\t\trow: []\n\t},\n\n\n\t/**\n\t * Internal functions, exposed for used in plug-ins.\n\t * \n\t * Please note that you should not need to use the internal methods for\n\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t * The internal function may change between releases.\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tinternal: {},\n\n\n\t/**\n\t * Legacy configuration options. Enable and disable legacy options that\n\t * are available in DataTables.\n\t *\n\t *  @type object\n\t */\n\tlegacy: {\n\t\t/**\n\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t * requests\n\t\t *\n\t\t *  @type boolean\n\t\t *  @default null\n\t\t */\n\t\tajax: null\n\t},\n\n\n\t/**\n\t * Pagination plug-in methods.\n\t * \n\t * Each entry in this object is a function and defines which buttons should\n\t * be shown by the pagination rendering method that is used for the table:\n\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t * buttons are displayed in the document, while the functions here tell it\n\t * what buttons to display. This is done by returning an array of button\n\t * descriptions (what each button will do).\n\t *\n\t * Pagination types (the four built in options and any additional plug-in\n\t * options defined here) can be used through the `paginationType`\n\t * initialisation parameter.\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{int} page` The current page index\n\t * 2. `{int} pages` The number of pages in the table\n\t *\n\t * Each function is expected to return an array where each element of the\n\t * array can be one of:\n\t *\n\t * * `first` - Jump to first page when activated\n\t * * `last` - Jump to last page when activated\n\t * * `previous` - Show previous page when activated\n\t * * `next` - Show next page when activated\n\t * * `{int}` - Show page of the index given\n\t * * `{array}` - A nested array containing the above elements to add a\n\t *   containing 'DIV' element (might be useful for styling).\n\t *\n\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t * an object with two functions would be defined for each plug-in. That\n\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t * compatibility, but this option of use is now decremented and no longer\n\t * documented in DataTables 1.10+.\n\t *\n\t *  @type object\n\t *  @default {}\n\t *\n\t *  @example\n\t *    // Show previous, next and current page buttons only\n\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t *      return [ 'previous', page, 'next' ];\n\t *    };\n\t */\n\tpager: {},\n\n\n\trenderer: {\n\t\tpageButton: {},\n\t\theader: {}\n\t},\n\n\n\t/**\n\t * Ordering plug-ins - custom data source\n\t * \n\t * The extension options for ordering of data available here is complimentary\n\t * to the default type based ordering that DataTables typically uses. It\n\t * allows much greater control over the the data that is being used to\n\t * order a column, but is necessarily therefore more complex.\n\t * \n\t * This type of ordering is useful if you want to do ordering based on data\n\t * live from the DOM (for example the contents of an 'input' element) rather\n\t * than just the static string that DataTables knows of.\n\t * \n\t * The way these plug-ins work is that you create an array of the values you\n\t * wish to be ordering for the column in question and then return that\n\t * array. The data in the array much be in the index order of the rows in\n\t * the table (not the currently ordering order!). Which order data gathering\n\t * function is run here depends on the `dt-init columns.orderDataType`\n\t * parameter that is used for the column (if any).\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t * 2. `{int}` Target column index\n\t *\n\t * Each function is expected to return an array:\n\t *\n\t * * `{array}` Data for the column to be ordering upon\n\t *\n\t *  @type array\n\t *\n\t *  @example\n\t *    // Ordering using `input` node values\n\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t *    {\n\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t *        return $('input', td).val();\n\t *      } );\n\t *    }\n\t */\n\torder: {},\n\n\n\t/**\n\t * Type based plug-ins.\n\t *\n\t * Each column in DataTables has a type assigned to it, either by automatic\n\t * detection or by direct assignment using the `type` option for the column.\n\t * The type of a column will effect how it is ordering and search (plug-ins\n\t * can also make use of the column type if required).\n\t *\n\t * @namespace\n\t */\n\ttype: {\n\t\t/**\n\t\t * Type detection functions.\n\t\t *\n\t\t * The functions defined in this object are used to automatically detect\n\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t * when complex data is in the table.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be analysed\n\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t     *     perform context specific type detection - for example detection\n\t     *     based on language settings such as using a comma for a decimal\n\t     *     place. Generally speaking the options from the settings will not\n\t     *     be required\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t *   pass it on to the other type detection functions.\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Currency type detection plug-in:\n\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t *      function ( data, settings ) {\n\t\t *        // Check the numeric part\n\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t *          return null;\n\t\t *        }\n\t\t *\n\t\t *        // Check prefixed by currency\n\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t *          return 'currency';\n\t\t *        }\n\t\t *        return null;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tdetect: [],\n\n\n\t\t/**\n\t\t * Type based search formatting.\n\t\t *\n\t\t * The type based searching functions can be used to pre-format the\n\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t *\n\t\t * Note that is a search is not defined for a column of a given type,\n\t\t * no search formatting will be performed.\n\t\t * \n\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t * or a type detection plug-in), you will typically be using this for\n\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t * the format that should be searched upon. This is done by adding\n\t\t * functions this object with a parameter name which matches the sType\n\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t * for searching data.\n\t\t *\n\t\t * The functions defined take a single parameter:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t *    }\n\t\t */\n\t\tsearch: {},\n\n\n\t\t/**\n\t\t * Type based ordering.\n\t\t *\n\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t * is defined by the functions available in this object.\n\t\t *\n\t\t * Each ordering option can be described by three properties added to\n\t\t * this object:\n\t\t *\n\t\t * * `{type}-pre` - Pre-formatting function\n\t\t * * `{type}-asc` - Ascending order function\n\t\t * * `{type}-desc` - Descending order function\n\t\t *\n\t\t * All three can be used together, only `{type}-pre` or only\n\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t * implementation in terms of speed, although the others are provided\n\t\t * for compatibility with existing Javascript sort functions.\n\t\t *\n\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t *\n\t\t * And return:\n\t\t *\n\t\t * * `{*}` Data to be sorted upon\n\t\t *\n\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t * functions, taking two parameters:\n\t\t *\n\t     *  1. `{*}` Data to compare to the second parameter\n\t     *  2. `{*}` Data to compare to the first parameter\n\t\t *\n\t\t * And returning:\n\t\t *\n\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t *   parameter.\n\t\t * \n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t *      \"string-pre\": function(x) {\n\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t *        return parseFloat( a );\n\t\t *      }\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t *      \"string-case-asc\": function(x,y) {\n\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t *      },\n\t\t *      \"string-case-desc\": function(x,y) {\n\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\torder: {}\n\t},\n\n\t/**\n\t * Unique DataTables instance counter\n\t *\n\t * @type int\n\t * @private\n\t */\n\t_unique: 0,\n\n\n\t//\n\t// Depreciated\n\t// The following properties are retained for backwards compatibility only.\n\t// The should not be used in new projects and will be removed in a future\n\t// version\n\t//\n\n\t/**\n\t * Version check function.\n\t *  @type function\n\t *  @depreciated Since 1.10\n\t */\n\tfnVersionCheck: DataTable.fnVersionCheck,\n\n\n\t/**\n\t * Index for what 'this' index API functions should use\n\t *  @type int\n\t *  @deprecated Since v1.10\n\t */\n\tiApiIndex: 0,\n\n\n\t/**\n\t * jQuery UI class container\n\t *  @type object\n\t *  @deprecated Since v1.10\n\t */\n\toJUIClasses: {},\n\n\n\t/**\n\t * Software version\n\t *  @type string\n\t *  @deprecated Since v1.10\n\t */\n\tsVersion: DataTable.version\n};\n\n\n//\n// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n//\n$.extend( _ext, {\n\tafnFiltering: _ext.search,\n\taTypes:       _ext.type.detect,\n\tofnSearch:    _ext.type.search,\n\toSort:        _ext.type.order,\n\tafnSortData:  _ext.order,\n\taoFeatures:   _ext.feature,\n\toApi:         _ext.internal,\n\toStdClasses:  _ext.classes,\n\toPagination:  _ext.pager\n} );\n\n\n$.extend( DataTable.ext.classes, {\n\t\"sTable\": \"dataTable\",\n\t\"sNoFooter\": \"no-footer\",\n\n\t/* Paging buttons */\n\t\"sPageButton\": \"paginate_button\",\n\t\"sPageButtonActive\": \"current\",\n\t\"sPageButtonDisabled\": \"disabled\",\n\n\t/* Striping classes */\n\t\"sStripeOdd\": \"odd\",\n\t\"sStripeEven\": \"even\",\n\n\t/* Empty row */\n\t\"sRowEmpty\": \"dataTables_empty\",\n\n\t/* Features */\n\t\"sWrapper\": \"dataTables_wrapper\",\n\t\"sFilter\": \"dataTables_filter\",\n\t\"sInfo\": \"dataTables_info\",\n\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\"sLength\": \"dataTables_length\",\n\t\"sProcessing\": \"dataTables_processing\",\n\n\t/* Sorting */\n\t\"sSortAsc\": \"sorting_asc\",\n\t\"sSortDesc\": \"sorting_desc\",\n\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\"sSortableAsc\": \"sorting_desc_disabled\",\n\t\"sSortableDesc\": \"sorting_asc_disabled\",\n\t\"sSortableNone\": \"sorting_disabled\",\n\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\n\t/* Filtering */\n\t\"sFilterInput\": \"\",\n\n\t/* Page length */\n\t\"sLengthSelect\": \"\",\n\n\t/* Scrolling */\n\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\n\t/* Misc */\n\t\"sHeaderTH\": \"\",\n\t\"sFooterTH\": \"\",\n\n\t// Deprecated\n\t\"sSortJUIAsc\": \"\",\n\t\"sSortJUIDesc\": \"\",\n\t\"sSortJUI\": \"\",\n\t\"sSortJUIAscAllowed\": \"\",\n\t\"sSortJUIDescAllowed\": \"\",\n\t\"sSortJUIWrapper\": \"\",\n\t\"sSortIcon\": \"\",\n\t\"sJUIHeader\": \"\",\n\t\"sJUIFooter\": \"\"\n} );\n\n\nvar extPagination = DataTable.ext.pager;\n\nfunction _numbers ( page, pages ) {\n\tvar\n\t\tnumbers = [],\n\t\tbuttons = extPagination.numbers_length,\n\t\thalf = Math.floor( buttons / 2 ),\n\t\ti = 1;\n\n\tif ( pages <= buttons ) {\n\t\tnumbers = _range( 0, pages );\n\t}\n\telse if ( page <= half ) {\n\t\tnumbers = _range( 0, buttons-2 );\n\t\tnumbers.push( 'ellipsis' );\n\t\tnumbers.push( pages-1 );\n\t}\n\telse if ( page >= pages - 1 - half ) {\n\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\tnumbers.splice( 0, 0, 0 );\n\t}\n\telse {\n\t\tnumbers = _range( page-half+2, page+half-1 );\n\t\tnumbers.push( 'ellipsis' );\n\t\tnumbers.push( pages-1 );\n\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\tnumbers.splice( 0, 0, 0 );\n\t}\n\n\tnumbers.DT_el = 'span';\n\treturn numbers;\n}\n\n\n$.extend( extPagination, {\n\tsimple: function ( page, pages ) {\n\t\treturn [ 'previous', 'next' ];\n\t},\n\n\tfull: function ( page, pages ) {\n\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t},\n\n\tnumbers: function ( page, pages ) {\n\t\treturn [ _numbers(page, pages) ];\n\t},\n\n\tsimple_numbers: function ( page, pages ) {\n\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t},\n\n\tfull_numbers: function ( page, pages ) {\n\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t},\n\t\n\tfirst_last_numbers: function (page, pages) {\n \t\treturn ['first', _numbers(page, pages), 'last'];\n \t},\n\n\t// For testing and plug-ins to use\n\t_numbers: _numbers,\n\n\t// Number of number buttons (including ellipsis) to show. _Must be odd!_\n\tnumbers_length: 7\n} );\n\n\n$.extend( true, DataTable.ext.renderer, {\n\tpageButton: {\n\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\tvar classes = settings.oClasses;\n\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\tvar aria = settings.oLanguage.oAria.paginate || {};\n\t\t\tvar btnDisplay, btnClass;\n\n\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\tvar i, ien, node, button;\n\t\t\t\tvar disabledClass = classes.sPageButtonDisabled;\n\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t};\n\n\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\tbutton = buttons[i];\n\n\t\t\t\t\tif ( Array.isArray( button ) ) {\n\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar disabled = false;\n\n\t\t\t\t\t\tbtnDisplay = null;\n\t\t\t\t\t\tbtnClass = button;\n\n\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\tcontainer.append('<span class=\"ellipsis\">&#x2026;</span>');\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\n\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\n\t\t\t\t\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\n\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\n\t\t\t\t\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\t\t\t\t\tdisabled = true;\n\t\t\t\t\t\t\t\t}\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\tbtnDisplay = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( btnDisplay !== null ) {\n\t\t\t\t\t\t\tvar tag = settings.oInit.pagingTag || 'a';\n\n\t\t\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\t\t\tbtnClass += ' ' + disabledClass;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnode = $('<'+tag+'>', {\n\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t'aria-disabled': disabled ? 'true' : null,\n\t\t\t\t\t\t\t\t\t'aria-label': aria[ button ],\n\t\t\t\t\t\t\t\t\t'role': 'link',\n\t\t\t\t\t\t\t\t\t'aria-current': btnClass === classes.sPageButtonActive ? 'page' : null,\n\t\t\t\t\t\t\t\t\t'data-dt-idx': button,\n\t\t\t\t\t\t\t\t\t'tabindex': disabled ? -1 : settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t// inside an iframe or frame. Try / catch the error. Not good for\n\t\t\t// accessibility, but neither are frames.\n\t\t\tvar activeEl;\n\n\t\t\ttry {\n\t\t\t\t// Because this approach is destroying and recreating the paging\n\t\t\t\t// elements, focus is lost on the select button which is bad for\n\t\t\t\t// accessibility. So we want to restore focus once the draw has\n\t\t\t\t// completed\n\t\t\t\tactiveEl = $(host).find(document.activeElement).data('dt-idx');\n\t\t\t}\n\t\t\tcatch (e) {}\n\n\t\t\tattach( $(host).empty(), buttons );\n\n\t\t\tif ( activeEl !== undefined ) {\n\t\t\t\t$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n\n// Built in type detection. See model.ext.aTypes for information about\n// what is required from this methods.\n$.extend( DataTable.ext.type.detect, [\n\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _isNumber( d, decimal ) ? 'num'+decimal : null;\n\t},\n\n\t// Dates (only those recognised by the browser's Date.parse)\n\tfunction ( d, settings )\n\t{\n\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t// plug-in for anything other than ISO8601 style strings\n\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\treturn null;\n\t\t}\n\t\tvar parsed = Date.parse(d);\n\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t},\n\n\t// Formatted numbers\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _isNumber( d, decimal, true ) ? 'num-fmt'+decimal : null;\n\t},\n\n\t// HTML numeric\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _htmlNumeric( d, decimal ) ? 'html-num'+decimal : null;\n\t},\n\n\t// HTML numeric, formatted\n\tfunction ( d, settings )\n\t{\n\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\treturn _htmlNumeric( d, decimal, true ) ? 'html-num-fmt'+decimal : null;\n\t},\n\n\t// HTML (this is strict checking - there must be html)\n\tfunction ( d, settings )\n\t{\n\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t'html' : null;\n\t}\n] );\n\n\n\n// Filter formatting functions. See model.ext.ofnSearch for information about\n// what is required from these methods.\n// \n// Note that additional search methods are added for the html numbers and\n// html formatted numbers by `_addNumericSort()` when we know what the decimal\n// place is\n\n\n$.extend( DataTable.ext.type.search, {\n\thtml: function ( data ) {\n\t\treturn _empty(data) ?\n\t\t\tdata :\n\t\t\ttypeof data === 'string' ?\n\t\t\t\tdata\n\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t'';\n\t},\n\n\tstring: function ( data ) {\n\t\treturn _empty(data) ?\n\t\t\tdata :\n\t\t\ttypeof data === 'string' ?\n\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\tdata;\n\t}\n} );\n\n\n\nvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\tif ( d !== 0 && (!d || d === '-') ) {\n\t\treturn -Infinity;\n\t}\n\t\n\tvar type = typeof d;\n\n\tif (type === 'number' || type === 'bigint') {\n\t\treturn d;\n\t}\n\n\t// If a decimal place other than `.` is used, it needs to be given to the\n\t// function so we can detect it and replace with a `.` which is the only\n\t// decimal place Javascript recognises - it is not locale aware.\n\tif ( decimalPlace ) {\n\t\td = _numToDecimal( d, decimalPlace );\n\t}\n\n\tif ( d.replace ) {\n\t\tif ( re1 ) {\n\t\t\td = d.replace( re1, '' );\n\t\t}\n\n\t\tif ( re2 ) {\n\t\t\td = d.replace( re2, '' );\n\t\t}\n\t}\n\n\treturn d * 1;\n};\n\n\n// Add the numeric 'deformatting' functions for sorting and search. This is done\n// in a function to provide an easy ability for the language options to add\n// additional methods if a non-period decimal place is used.\nfunction _addNumericSort ( decimalPlace ) {\n\t$.each(\n\t\t{\n\t\t\t// Plain numbers\n\t\t\t\"num\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace );\n\t\t\t},\n\n\t\t\t// Formatted numbers\n\t\t\t\"num-fmt\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_formatted_numeric );\n\t\t\t},\n\n\t\t\t// HTML numeric\n\t\t\t\"html-num\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html );\n\t\t\t},\n\n\t\t\t// HTML numeric, formatted\n\t\t\t\"html-num-fmt\": function ( d ) {\n\t\t\t\treturn __numericReplace( d, decimalPlace, _re_html, _re_formatted_numeric );\n\t\t\t}\n\t\t},\n\t\tfunction ( key, fn ) {\n\t\t\t// Add the ordering method\n\t\t\t_ext.type.order[ key+decimalPlace+'-pre' ] = fn;\n\n\t\t\t// For HTML types add a search formatter that will strip the HTML\n\t\t\tif ( key.match(/^html\\-/) ) {\n\t\t\t\t_ext.type.search[ key+decimalPlace ] = _ext.type.search.html;\n\t\t\t}\n\t\t}\n\t);\n}\n\n\n// Default sort methods\n$.extend( _ext.type.order, {\n\t// Dates\n\t\"date-pre\": function ( d ) {\n\t\tvar ts = Date.parse( d );\n\t\treturn isNaN(ts) ? -Infinity : ts;\n\t},\n\n\t// html\n\t\"html-pre\": function ( a ) {\n\t\treturn _empty(a) ?\n\t\t\t'' :\n\t\t\ta.replace ?\n\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\ta+'';\n\t},\n\n\t// string\n\t\"string-pre\": function ( a ) {\n\t\t// This is a little complex, but faster than always calling toString,\n\t\t// https://jsperf.com/tostring-v-check\n\t\treturn _empty(a) ?\n\t\t\t'' :\n\t\t\ttypeof a === 'string' ?\n\t\t\t\ta.toLowerCase() :\n\t\t\t\t! a.toString ?\n\t\t\t\t\t'' :\n\t\t\t\t\ta.toString();\n\t},\n\n\t// string-asc and -desc are retained only for compatibility with the old\n\t// sort methods\n\t\"string-asc\": function ( x, y ) {\n\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t},\n\n\t\"string-desc\": function ( x, y ) {\n\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t}\n} );\n\n\n// Numeric sorting types - order doesn't matter here\n_addNumericSort( '' );\n\n\n$.extend( true, DataTable.ext.renderer, {\n\theader: {\n\t\t_: function ( settings, cell, column, classes ) {\n\t\t\t// No additional mark-up required\n\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t// listening for\n\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\tif ( settings !== ctx ) { // need to check this this is the host\n\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t}\n\n\t\t\t\tvar colIdx = column.idx;\n\n\t\t\t\tcell\n\t\t\t\t\t.removeClass(\n\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t)\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t);\n\t\t\t} );\n\t\t},\n\n\t\tjqueryui: function ( settings, cell, column, classes ) {\n\t\t\t$('<div/>')\n\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t.append( cell.contents() )\n\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t)\n\t\t\t\t.appendTo( cell );\n\n\t\t\t// Attach a sort listener to update on sort\n\t\t\t$(settings.nTable).on( 'order.dt.DT', function ( e, ctx, sorting, columns ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar colIdx = column.idx;\n\n\t\t\t\tcell\n\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t);\n\n\t\t\t\tcell\n\t\t\t\t\t.find( 'span.'+classes.sSortIcon )\n\t\t\t\t\t.removeClass(\n\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t)\n\t\t\t\t\t.addClass( columns[ colIdx ] == 'asc' ?\n\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ colIdx ] == 'desc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t);\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n/*\n * Public helper functions. These aren't used internally by DataTables, or\n * called by any of the options passed into DataTables, but they can be used\n * externally by developers working with DataTables. They are helper functions\n * to make working with DataTables a little bit easier.\n */\n\nvar __htmlEscapeEntities = function ( d ) {\n\tif (Array.isArray(d)) {\n\t\td = d.join(',');\n\t}\n\n\treturn typeof d === 'string' ?\n\t\td\n\t\t\t.replace(/&/g, '&amp;')\n\t\t\t.replace(/</g, '&lt;')\n\t\t\t.replace(/>/g, '&gt;')\n\t\t\t.replace(/\"/g, '&quot;') :\n\t\td;\n};\n\n// Common logic for moment, luxon or a date action\nfunction __mld( dt, momentFn, luxonFn, dateFn, arg1 ) {\n\tif (window.moment) {\n\t\treturn dt[momentFn]( arg1 );\n\t}\n\telse if (window.luxon) {\n\t\treturn dt[luxonFn]( arg1 );\n\t}\n\t\n\treturn dateFn ? dt[dateFn]( arg1 ) : dt;\n}\n\n\nvar __mlWarning = false;\nfunction __mldObj (d, format, locale) {\n\tvar dt;\n\n\tif (window.moment) {\n\t\tdt = window.moment.utc( d, format, locale, true );\n\n\t\tif (! dt.isValid()) {\n\t\t\treturn null;\n\t\t}\n\t}\n\telse if (window.luxon) {\n\t\tdt = format && typeof d === 'string'\n\t\t\t? window.luxon.DateTime.fromFormat( d, format )\n\t\t\t: window.luxon.DateTime.fromISO( d );\n\n\t\tif (! dt.isValid) {\n\t\t\treturn null;\n\t\t}\n\n\t\tdt.setLocale(locale);\n\t}\n\telse if (! format) {\n\t\t// No format given, must be ISO\n\t\tdt = new Date(d);\n\t}\n\telse {\n\t\tif (! __mlWarning) {\n\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t}\n\n\t\t__mlWarning = true;\n\t}\n\n\treturn dt;\n}\n\n// Wrapper for date, datetime and time which all operate the same way with the exception of\n// the output string for auto locale support\nfunction __mlHelper (localeString) {\n\treturn function ( from, to, locale, def ) {\n\t\t// Luxon and Moment support\n\t\t// Argument shifting\n\t\tif ( arguments.length === 0 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = null; // means toLocaleString\n\t\t\tfrom = null; // means iso8601\n\t\t}\n\t\telse if ( arguments.length === 1 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\t\telse if ( arguments.length === 2 ) {\n\t\t\tlocale = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\n\t\tvar typeName = 'datetime-' + to;\n\n\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t});\n\n\t\t\t// The renderer gives us Moment, Luxon or Date obects for the sorting, all of which have a\n\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\tDataTable.ext.type.order[typeName + '-asc'] = function (a, b) {\n\t\t\t\tvar x = a.valueOf();\n\t\t\t\tvar y = b.valueOf();\n\n\t\t\t\treturn x === y\n\t\t\t\t\t? 0\n\t\t\t\t\t: x < y\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1;\n\t\t\t}\n\n\t\t\tDataTable.ext.type.order[typeName + '-desc'] = function (a, b) {\n\t\t\t\tvar x = a.valueOf();\n\t\t\t\tvar y = b.valueOf();\n\n\t\t\t\treturn x === y\n\t\t\t\t\t? 0\n\t\t\t\t\t: x > y\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1;\n\t\t\t}\n\t\t}\n\t\n\t\treturn function ( d, type ) {\n\t\t\t// Allow for a default value\n\t\t\tif (d === null || d === undefined) {\n\t\t\t\tif (def === '--now') {\n\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t// UTC\n\t\t\t\t\tvar local = new Date();\n\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (type === 'type') {\n\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\treturn typeName;\n\t\t\t}\n\n\t\t\tif (d === '') {\n\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t? ''\n\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t}\n\n\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tvar dt = __mldObj(d, from, locale);\n\n\t\t\tif (dt === null) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tif (type === 'sort') {\n\t\t\t\treturn dt;\n\t\t\t}\n\t\t\t\n\t\t\tvar formatted = to === null\n\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString]()\n\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\n\t\t\t// XSS protection\n\t\t\treturn type === 'display' ?\n\t\t\t\t__htmlEscapeEntities( formatted ) :\n\t\t\t\tformatted;\n\t\t};\n\t}\n}\n\n// Based on locale, determine standard number formatting\n// Fallback for legacy browsers is US English\nvar __thousands = ',';\nvar __decimal = '.';\n\nif (window.Intl !== undefined) {\n\ttry {\n\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\n\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\tif (num[i].type === 'group') {\n\t\t\t\t__thousands = num[i].value;\n\t\t\t}\n\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t__decimal = num[i].value;\n\t\t\t}\n\t\t}\n\t}\n\tcatch (e) {\n\t\t// noop\n\t}\n}\n\n// Formatted date time detection - use by declaring the formats you are going to use\nDataTable.datetime = function ( format, locale ) {\n\tvar typeName = 'datetime-detect-' + format;\n\n\tif (! locale) {\n\t\tlocale = 'en';\n\t}\n\n\tif (! DataTable.ext.type.order[typeName]) {\n\t\tDataTable.ext.type.detect.unshift(function (d) {\n\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\treturn d === '' || dt ? typeName : false;\n\t\t});\n\n\t\tDataTable.ext.type.order[typeName + '-pre'] = function (d) {\n\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t}\n\t}\n}\n\n/**\n * Helpers for `columns.render`.\n *\n * The options defined here can be used with the `columns.render` initialisation\n * option to provide a display renderer. The following functions are defined:\n *\n * * `number` - Will format numeric data (defined by `columns.data`) for\n *   display, retaining the original unformatted data for sorting and filtering.\n *   It takes 5 parameters:\n *   * `string` - Thousands grouping separator\n *   * `string` - Decimal point indicator\n *   * `integer` - Number of decimal points to show\n *   * `string` (optional) - Prefix.\n *   * `string` (optional) - Postfix (/suffix).\n * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n *   parameters.\n *\n * @example\n *   // Column definition using the number renderer\n *   {\n *     data: \"salary\",\n *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n *   }\n *\n * @namespace\n */\nDataTable.render = {\n\tdate: __mlHelper('toLocaleDateString'),\n\tdatetime: __mlHelper('toLocaleString'),\n\ttime: __mlHelper('toLocaleTimeString'),\n\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t// Auto locale detection\n\t\tif (thousands === null || thousands === undefined) {\n\t\t\tthousands = __thousands;\n\t\t}\n\n\t\tif (decimal === null || decimal === undefined) {\n\t\t\tdecimal = __decimal;\n\t\t}\n\n\t\treturn {\n\t\t\tdisplay: function ( d ) {\n\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\tvar flo = parseFloat( d );\n\n\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t// be a number after all)\n\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\treturn __htmlEscapeEntities( d );\n\t\t\t\t}\n\n\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\td = Math.abs( flo );\n\n\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t'';\n\n\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\tnegative = '';\n\t\t\t\t}\n\n\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t) +\n\t\t\t\t\tfloatPart +\n\t\t\t\t\t(postfix||'');\n\t\t\t}\n\t\t};\n\t},\n\n\ttext: function () {\n\t\treturn {\n\t\t\tdisplay: __htmlEscapeEntities,\n\t\t\tfilter: __htmlEscapeEntities\n\t\t};\n\t}\n};\n\n\n/*\n * This is really a good bit rubbish this method of exposing the internal methods\n * publicly... - To be fixed in 2.0 using methods on the prototype\n */\n\n\n/**\n * Create a wrapper function for exporting an internal functions to an external API.\n *  @param {string} fn API function name\n *  @returns {function} wrapped function\n *  @memberof DataTable#internal\n */\nfunction _fnExternApiFunc (fn)\n{\n\treturn function() {\n\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\tArray.prototype.slice.call(arguments)\n\t\t);\n\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t};\n}\n\n\n/**\n * Reference to internal functions for use by plug-in developers. Note that\n * these methods are references to internal functions and are considered to be\n * private. If you use these methods, be aware that they are liable to change\n * between versions.\n *  @namespace\n */\n$.extend( DataTable.ext.internal, {\n\t_fnExternApiFunc: _fnExternApiFunc,\n\t_fnBuildAjax: _fnBuildAjax,\n\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t_fnAjaxParameters: _fnAjaxParameters,\n\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t_fnAddColumn: _fnAddColumn,\n\t_fnColumnOptions: _fnColumnOptions,\n\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t_fnVisbleColumns: _fnVisbleColumns,\n\t_fnGetColumns: _fnGetColumns,\n\t_fnColumnTypes: _fnColumnTypes,\n\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t_fnHungarianMap: _fnHungarianMap,\n\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t_fnLanguageCompat: _fnLanguageCompat,\n\t_fnBrowserDetect: _fnBrowserDetect,\n\t_fnAddData: _fnAddData,\n\t_fnAddTr: _fnAddTr,\n\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t_fnGetCellData: _fnGetCellData,\n\t_fnSetCellData: _fnSetCellData,\n\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t_fnGetDataMaster: _fnGetDataMaster,\n\t_fnClearTable: _fnClearTable,\n\t_fnDeleteIndex: _fnDeleteIndex,\n\t_fnInvalidate: _fnInvalidate,\n\t_fnGetRowElements: _fnGetRowElements,\n\t_fnCreateTr: _fnCreateTr,\n\t_fnBuildHead: _fnBuildHead,\n\t_fnDrawHead: _fnDrawHead,\n\t_fnDraw: _fnDraw,\n\t_fnReDraw: _fnReDraw,\n\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t_fnDetectHeader: _fnDetectHeader,\n\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t_fnFilterComplete: _fnFilterComplete,\n\t_fnFilterCustom: _fnFilterCustom,\n\t_fnFilterColumn: _fnFilterColumn,\n\t_fnFilter: _fnFilter,\n\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t_fnEscapeRegex: _fnEscapeRegex,\n\t_fnFilterData: _fnFilterData,\n\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t_fnUpdateInfo: _fnUpdateInfo,\n\t_fnInfoMacros: _fnInfoMacros,\n\t_fnInitialise: _fnInitialise,\n\t_fnInitComplete: _fnInitComplete,\n\t_fnLengthChange: _fnLengthChange,\n\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t_fnPageChange: _fnPageChange,\n\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t_fnScrollDraw: _fnScrollDraw,\n\t_fnApplyToChildren: _fnApplyToChildren,\n\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t_fnThrottle: _fnThrottle,\n\t_fnConvertToWidth: _fnConvertToWidth,\n\t_fnGetWidestNode: _fnGetWidestNode,\n\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t_fnStringToCss: _fnStringToCss,\n\t_fnSortFlatten: _fnSortFlatten,\n\t_fnSort: _fnSort,\n\t_fnSortAria: _fnSortAria,\n\t_fnSortListener: _fnSortListener,\n\t_fnSortAttachListener: _fnSortAttachListener,\n\t_fnSortingClasses: _fnSortingClasses,\n\t_fnSortData: _fnSortData,\n\t_fnSaveState: _fnSaveState,\n\t_fnLoadState: _fnLoadState,\n\t_fnImplementState: _fnImplementState,\n\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t_fnLog: _fnLog,\n\t_fnMap: _fnMap,\n\t_fnBindAction: _fnBindAction,\n\t_fnCallbackReg: _fnCallbackReg,\n\t_fnCallbackFire: _fnCallbackFire,\n\t_fnLengthOverflow: _fnLengthOverflow,\n\t_fnRenderer: _fnRenderer,\n\t_fnDataSource: _fnDataSource,\n\t_fnRowAttributes: _fnRowAttributes,\n\t_fnExtend: _fnExtend,\n\t_fnCalculateEnd: function () {} // Used by a lot of plug-ins, but redundant\n\t                                // in 1.10, so this dead-end function is\n\t                                // added to prevent errors\n} );\n\n\n// jQuery access\n$.fn.dataTable = DataTable;\n\n// Provide access to the host jQuery object (circular reference)\nDataTable.$ = $;\n\n// Legacy aliases\n$.fn.dataTableSettings = DataTable.settings;\n$.fn.dataTableExt = DataTable.ext;\n\n// With a capital `D` we return a DataTables API instance rather than a\n// jQuery object\n$.fn.DataTable = function ( opts ) {\n\treturn $(this).dataTable( opts ).api();\n};\n\n// All properties that are available to $.fn.dataTable should also be\n// available on $.fn.DataTable\n$.each( DataTable, function ( prop, val ) {\n\t$.fn.DataTable[ prop ] = val;\n} );\n\nexport default DataTable;\n","/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n// For ECMAScript module environments where a proper `window`\n// is present, execute the factory and get jQuery.\nfunction jQueryFactory( window, noGlobal ) {\n\nif ( typeof window === \"undefined\" || !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\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\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t//                         /----------\\\n\t//                        |            |    /-------\\\n\t//                        |  / Top  \\  |   |         |\n\t//         /--- Border ---+-| Right  |-+---+- Width -+---\\\n\t//        |                 | Bottom |                    |\n\t//        |                  \\ Left /                     |\n\t//        |                                               |\n\t//        |                              /----------\\     |\n\t//        |          /-------------\\    |            |    |- END\n\t//        |         |               |   |  / Top  \\  |    |\n\t//        |         |  / Margin  \\  |   | | Right  | |    |\n\t//        |---------+-|           |-+---+-| Bottom |-+----|\n\t//        |            \\ Padding /         \\ Left /       |\n\t// BEGIN -|                                               |\n\t//        |                /---------\\                    |\n\t//        |               |           |                   |\n\t//        |               |  / Min \\  |    / Width  \\     |\n\t//         \\--------------+-|       |-+---|          |---/\n\t//                           \\ Max /       \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `<table>` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t//    `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t//    as an array and fires an [inner] native event to prompt state\n\t\t\t//    changes that should be observed by registered listeners (such as\n\t\t\t//    checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t//    an array), it triggers an inner synthetic event, records the\n\t\t\t//    result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t//    array `saved`), it prevents double-propagation of surrogate events\n\t\t\t//    but otherwise allows everything to proceed (particularly including\n\t\t\t//    further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = /<script|<style|<link/i;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar type, i, l,\n\t\tevents = dataPriv.get( src, \"events\" );\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( events ) {\n\t\tdataPriv.remove( dest, \"handle events\" );\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tdataUser.set( dest, jQuery.extend( {}, dataUser.get( src ) ) );\n\t}\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( isIE && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// IE fails to set the defaultValue to the correct value when\n\t\t\t\t// cloning textareas.\n\t\t\t\tif ( nodeName( destElements[ i ], \"textarea\" ) ) {\n\t\t\t\t\tdestElements[ i ].defaultValue = srcElements[ i ].defaultValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `<col>` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t//   * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t//   * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument$1.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Get callback name, remembering preexisting value associated with it\n\tcallbackName = s.jsonpCallback = typeof s.jsonpCallback === \"function\" ?\n\t\ts.jsonpCallback() :\n\t\ts.jsonpCallback;\n\n\t// Insert callback into url or form data\n\tif ( jsonProp ) {\n\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t} else if ( s.jsonp !== false ) {\n\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t}\n\n\t// Use data converter to retrieve json after script execution\n\ts.converters[ \"script json\" ] = function() {\n\t\tif ( !responseContainer ) {\n\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t}\n\t\treturn responseContainer[ 0 ];\n\t};\n\n\t// Force json dataType\n\ts.dataTypes[ 0 ] = \"json\";\n\n\t// Install callback\n\toverwritten = window[ callbackName ];\n\twindow[ callbackName ] = function() {\n\t\tresponseContainer = arguments;\n\t};\n\n\t// Clean-up function (fires after converters)\n\tjqXHR.always( function() {\n\n\t\t// If previous value didn't exist - remove it\n\t\tif ( overwritten === undefined ) {\n\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t// Otherwise restore preexisting value\n\t\t} else {\n\t\t\twindow[ callbackName ] = overwritten;\n\t\t}\n\n\t\t// Save back as free\n\t\tif ( s[ callbackName ] ) {\n\n\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t// Save the callback name for future use\n\t\t\toldCallbacks.push( callbackName );\n\t\t}\n\n\t\t// Call if it was a function and we have a response\n\t\tif ( responseContainer && typeof overwritten === \"function\" ) {\n\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t}\n\n\t\tresponseContainer = overwritten = undefined;\n\t} );\n\n\t// Delegate to script\n\treturn \"script\";\n} );\n\njQuery.ajaxPrefilter( function( s, origOptions ) {\n\n\t// Binary data needs to be passed to XHR as-is without stringification.\n\tif ( typeof s.data !== \"string\" && !jQuery.isPlainObject( s.data ) &&\n\t\t\t!Array.isArray( s.data ) &&\n\n\t\t\t// Don't disable data processing if explicitly set by the user.\n\t\t\t!( \"processData\" in origOptions ) ) {\n\t\ts.processData = false;\n\t}\n\n\t// `Content-Type` for requests with `FormData` bodies needs to be set\n\t// by the browser as it needs to append the `boundary` it generated.\n\tif ( s.data instanceof window.FormData ) {\n\t\ts.contentType = false;\n\t}\n} );\n\n// Argument \"data\" should be string of html or a TrustedHTML wrapper of obvious HTML\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" && !isObviousHtml( data + \"\" ) ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using DOMParser\n\t\tcontext = ( new window.DOMParser() )\n\t\t\t.parseFromString( \"\", \"text/html\" );\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( typeof params === \"function\" ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( typeof options === \"function\" ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11+\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\toffsetParent !== doc.documentElement &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.offsetParent || doc.documentElement;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) !== \"static\" ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement$1;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( typeof fn !== \"function\" ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\n\njQuery.expr[ \":\" ] = jQuery.expr.filters = jQuery.expr.pseudos;\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, gh-557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n\n}\n\nvar jQuery = jQueryFactory( window, true );\n\nexport { jQuery, jQuery as $ };\n\nexport default jQuery;\n","/*! js-cookie v3.0.8 | MIT */\nfunction assign (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (key === '__proto__') continue\n      target[key] = source[key];\n    }\n  }\n  return target\n}\n\nvar defaultConverter = {\n  read: function (value) {\n    if (value[0] === '\"') {\n      value = value.slice(1, -1);\n    }\n    return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n  },\n  write: function (value) {\n    return encodeURIComponent(value).replace(\n      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n      decodeURIComponent\n    )\n  }\n};\n\nfunction init(converter, defaultAttributes) {\n  function set(name, value, attributes) {\n    if (typeof document === 'undefined') {\n      return\n    }\n\n    attributes = assign({}, defaultAttributes, attributes);\n\n    if (typeof attributes.expires === 'number') {\n      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n    }\n    if (attributes.expires) {\n      attributes.expires = attributes.expires.toUTCString();\n    }\n\n    name = encodeURIComponent(name)\n      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n      .replace(/[()]/g, escape);\n\n    var stringifiedAttributes = '';\n    for (var attributeName in attributes) {\n      if (!attributes[attributeName]) {\n        continue\n      }\n\n      stringifiedAttributes += '; ' + attributeName;\n\n      if (attributes[attributeName] === true) {\n        continue\n      }\n\n      // Considers RFC 6265 section 5.2:\n      // ...\n      // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n      //     character:\n      // Consume the characters of the unparsed-attributes up to,\n      // not including, the first %x3B (\";\") character.\n      // ...\n      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n    }\n\n    return (document.cookie =\n      name + '=' + converter.write(value, name) + stringifiedAttributes)\n  }\n\n  function get(name) {\n    if (typeof document === 'undefined' || (arguments.length && !name)) {\n      return\n    }\n\n    // To prevent the for loop in the first place assign an empty array\n    // in case there are no cookies at all.\n    var cookies = document.cookie ? document.cookie.split('; ') : [];\n    var jar = {};\n    for (var i = 0; i < cookies.length; i++) {\n      var parts = cookies[i].split('=');\n      var value = parts.slice(1).join('=');\n\n      try {\n        var found = decodeURIComponent(parts[0]);\n        if (!(found in jar)) jar[found] = converter.read(value, found);\n        if (name === found) {\n          break\n        }\n      } catch (_e) {\n        // Do nothing...\n      }\n    }\n\n    return name ? jar[name] : jar\n  }\n\n  return Object.create(\n    {\n      set: set,\n      get: get,\n      remove: function (name, attributes) {\n        set(\n          name,\n          '',\n          assign({}, attributes, {\n            expires: -1\n          })\n        );\n      },\n      withAttributes: function (attributes) {\n        return init(this.converter, assign({}, this.attributes, attributes))\n      },\n      withConverter: function (converter) {\n        return init(assign({}, this.converter, converter), this.attributes)\n      }\n    },\n    {\n      attributes: { value: Object.freeze(defaultAttributes) },\n      converter: { value: Object.freeze(converter) }\n    }\n  )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n\nexport { api as default };\n","// This file is part of meshoptimizer library and is distributed under the terms of MIT License.\n// Copyright (C) 2016-2025, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)\nvar MeshoptEncoder = (function () {\n\t// Built with clang version 19.1.5-wasi-sdk\n\t// Built from meshoptimizer 1.0\n\tvar wasm =\n\t\t'b9H79Tebbbe9ok9Geueu9Geub9Gbb9Gruuuuuuueu9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiE8AdilveoveovrrwrrrDDoDrbqqbelve9Weiiviebeoweuec;G:Qdkr:PlCo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9mW4W2be8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbd8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbiE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UblY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbv8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbo8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UbrE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbwa9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbDL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbqK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbkL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbxY9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVJ9V29VVbmE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbza9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9WbHa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbOK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbAl79IV9RbXDwebcekdKYq:p28Adbk:Bhdhud9:8Jjjjjbc;qw9Rgr8KjjjjbcbhwdnaeTmbabcbyd;m:kjjbaoaocb9iEgDc:GeV86bbarc;adfcbcjdz:xjjjb8AdnaiTmbarc;adfadalz:wjjjb8Akarc;abfalfcbcbcjdal9RalcFe0Ez:xjjjb8Aarc;abfarc;adfalz:wjjjb8AarcUf9cb83ibarc8Wf9cb83ibarcyf9cb83ibarcaf9cb83ibarcKf9cb83ibarczf9cb83ibar9cb83iwar9cb83ibcj;abal9Uc;WFbGcjdalca0Ehqdnaicd6mbavcd9imbaDTmbadcefhkaqci2gxal2hmarc;alfclfhParc;qlfceVhsarc;qofclVhzarc;qofcKfhHarc;qofczfhOcbhAincdhCcbhodnavci6mbaH9cb83ibaO9cb83ibar9cb83i;yoar9cb83i;qoadaAfgoybbhXcbhQincbhwcbhLdninaoalfhKaoybbgYaX7aLVhLawcP0meaKhoaYhXawcefgwaQfai6mbkkcbhXarc;qofhwincwh8AcwhEdnaLaX93gocFeGg3cs0mbclhEa3ci0mba3cb9hcethEkdnaocw4cFeGg3cs0mbclh8Aa3ci0mba3cb9hceth8Aka8AaEfh3awydbh5cwh8AcwhEdnaocz4cFeGg8Ecs0mbclhEa8Eci0mba8Ecb9hcethEka3a5fh3dnaocFFFFb0mbclh8AaocFFF8F0mbaocFFFr0ceth8Akawa3aEfa8AfBdbawclfhwaXcefgXcw9hmbkaKhoaYhXaQczfgQai6mbkcbhocehwazhLinawaoaLydbarc;qofaocdtfydb6EhoaLclfhLawcefgwcw9hmbkcihCkcbh3arc;qlfcbcjdz:xjjjb8Aarc;alfcwfcbBdbar9cb83i;alaoclth8Fadhaaqhhakh5inarc;qlfadcba3cufgoaoa30Eal2falz:wjjjb8Aaiahaiah6Ehgdnaqaia39Ra3aqfai6EgYcsfc9WGgoaY9nmbarc;qofaYfcbaoaY9Rz:xjjjb8Akada3al2fh8Jcbh8Kina8Ka8FVcl4hQarc;alfa8Kcdtfh8LaAh8Mcbh8Nina8NaAfhwdndndndndndna8KPldebidkasa8Mc98GgLfhoa5aLfh8Aarc;qlfawc98GgLfRbbhXcwhwinaoRbbawtaXVhXaocefhoawcwfgwca9hmbkaYTmla8Ncith8Ea8JaLfhEcbhKinaERbbhLcwhoa8AhwinawRbbaotaLVhLawcefhwaocwfgoca9hmbkarc;qofaKfaLaX7aQ93a8E486bba8Aalfh8AaEalfhEaLhXaKcefgKaY9hmbxlkkaYTmia8Mc9:Ghoa8NcitcwGhEarc;qlfawceVfRbbcwtarc;qlfawc9:GfRbbVhLarc;qofhwaghXinawa5aofRbbcwtaaaofRbbVg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbaoalfhoawcefhwa8AhLa3aXcufgX9hmbxikkaYTmda8Jawfhoarc;qlfawfRbbhLarc;qofhwaghXinawaoRbbg8AaL9RgLcetaLcKtcK91cr4786bbawcefhwaoalfhoa8AhLa3aXcufgX9hmbxdkkaYTmeka8LydbhEcbhKarc;qofhoincdhLcbhwinaLaoawfRbbcb9hfhLawcefgwcz9hmbkclhXcbhwinaXaoawfRbbcd0fhXawcefgwcz9hmbkcwh8Acbhwina8AaoawfRbbcP0fh8Aawcefgwcz9hmbkaLaXaLaX6Egwa8Aawa8A6Egwczawcz6EaEfhEaoczfhoaKczfgKaY6mbka8LaEBdbka8Mcefh8Ma8Ncefg8Ncl9hmbka8Kcefg8KaC9hmbkaaamfhaahaxfhha5amfh5a3axfg3ai6mbkcbhocehwaPhLinawaoaLydbarc;alfaocdtfydb6EhoaLclfhLawcefgXhwaCaX9hmbkaraAcd4fa8FcdVaoaocdSE86bbaAclfgAal6mbkkabaefh8Kabcefhoalcd4gecbaDEhkadcefhOarc;abfceVhHcbhmdndninaiam9nmearc;qofcbcjdz:xjjjb8Aa8Kao9Rak6mdadamal2gwfhxcbh8JaOawfhzaocbakz:xjjjbghakfh5aqaiam9Ramaqfai6Egscsfgocl4cifcd4hCaoc9WGg8LThPindndndndndndndndndndnaDTmbara8Jcd4fRbbgLciGPlbedlbkasTmdaxa8Jfhoarc;abfa8JfRbbhLarc;qofhwashXinawaoRbbg8AaL9RgLcetaLcKtcK91cr4786bbawcefhwaoalfhoa8AhLaXcufgXmbxikkasTmia8JcitcwGhEarc;abfa8JceVfRbbcwtarc;abfa8Jc9:GgofRbbVhLaxaofhoarc;qofhwashXinawao8Vbbg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbawcefhwaoalfhoa8AhLaXcufgXmbxdkkaHa8Jc98GgEfhoazaEfh8Aarc;abfaEfRbbhXcwhwinaoRbbawtaXVhXaocefhoawcwfgwca9hmbkasTmbaLcl4hYa8JcitcKGh3axaEfhEcbhKinaERbbhLcwhoa8AhwinawRbbaotaLVhLawcefhwaocwfgoca9hmbkarc;qofaKfaLaX7aY93a3486bba8Aalfh8AaEalfhEaLhXaKcefgKas9hmbkkaDmbcbhoxlka8LTmbcbhodninarc;qofaofgwcwf8Pibaw8Pib:e9qTmeaoczfgoa8L9pmdxbkkdnavmbcehoxikcbhEaChKaChYinarc;qofaEfgocwf8Pibhyao8Pibh8PcdhLcbhwinaLaoawfRbbcb9hfhLawcefgwcz9hmbkclhXcbhwinaXaoawfRbbcd0fhXawcefgwcz9hmbkcwh8Acbhwina8AaoawfRbbcP0fh8Aawcefgwcz9hmbkaLaXaLaX6Egoa8Aaoa8A6Egoczaocz6EaYfhYaocucbaya8P:e9cb9sEgwaoaw6EaKfhKaEczfgEa8L9pmdxbkkaha8Jcd4fgoaoRbbcda8JcetcoGtV86bbxikdnaKas6mbaYas6mbaha8Jcd4fgoaoRbbcia8JcetcoGtV86bba8Ka59Ras6mra5arc;qofasz:wjjjbasfh5xikaKaY9phokaha8Jcd4fgwawRbbaoa8JcetcoGtV86bbka8Ka59RaC6mla5cbaCz:xjjjbgAaCfhYdndna8LmbaPhoxekdna8KaY9RcK9pmbaPhoxekaocdtc:q1jjbfcj1jjbaDEg5ydxggcetc;:FFFeGh8Fcuh3cuagtcu7cFeGhacbh8Marc;qofhLinarc;qofa8MfhQczhEdndndnagPDbeeeeeeedekcucbaQcwf8PibaQ8Pib:e9cb9sEhExekcbhoa8FhEinaEaaaLaofRbb9nfhEaocefgocz9hmbkkcih8Ecbh8Ainczhwdndndna5a8AcdtfydbgKPDbeeeeeeedekcucbaQcwf8PibaQ8Pib:e9cb9sEhwxekaKcetc;:FFFeGhwcuaKtcu7cFeGhXcbhoinawaXaLaofRbb9nfhwaocefgocz9hmbkkdndnawaE6mbaKa39hmeawaE9hmea5a8EcdtfydbcwSmeka8Ah8EawhEka8Acefg8Aci9hmbkaAa8Mco4fgoaoRbba8Ea8Mci4coGtV86bbdndndna5a8Ecdtfydbg3PDdbbbbbbbebkdncwa39Tg8ETmbcua3tcu7hwdndna3ceSmbcbh8NaLhQinaQhoa8Eh8AcbhXinaoRbbgEawcFeGgKaEaK6EaXa3tVhXaocefhoa8Acufg8AmbkaYaX86bbaQa8EfhQaYcefhYa8Na8Efg8Ncz6mbxdkkcbh8NaLhQinaQhoa8Eh8AcbhXinaoRbbgEawcFeGgKaEaK6EaXcetVhXaocefhoa8Acufg8AmbkaYaX:T9cFe:d9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:9ca188bbaQa8EfhQaYcefhYa8Na8Efg8Ncz6mbkkcbhoinaYaLaofRbbgX86bbaYaXawcFeG9pfhYaocefgocz9hmbxikkdna3ceSmbinaYcb86bbaYcefhYxbkkinaYcb86bbaYcefhYxbkkaYaQ8Pbb83bbaYcwfaQcwf8Pbb83bbaYczfhYka8Mczfg8Ma8L9pgomeaLczfhLa8KaY9RcK9pmbkkaoTmlaYh5aYTmlka8Jcefg8Jal9hmbkarc;abfaxascufal2falz:wjjjb8Aasamfhma5hoa5mbkcbhwxdkdna8Kao9RakalfgwcKcaaDEgLawaL0EgX9pmbcbhwxdkdnawaL9pmbaocbaXaw9Rgwz:xjjjbawfhokaoarc;adfalz:wjjjbalfhodnaDTmbaoaraez:wjjjbaefhokaoab9Rhwxekcbhwkarc;qwf8Kjjjjbawk5babaeadaialcdcbyd;m:kjjbz:bjjjbk9reduaecd4gdaefgicaaica0Eabcj;abae9Uc;WFbGcjdaeca0Egifcufai9Uae2aiadfaicl4cifcd4f2fcefkmbcbabBd;m:kjjbk:Ese5u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd;q:kjjbgrc;GeV86bbalc;abfcFecjez:xjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgLydbhKaLcwfydbhYaLclfydbh8AcbhEdndndninalc;abfavcsGcitfgoydlh3dndndnaoydbgoaK9hmba3a8ASmekdnaoa8A9hmba3aY9hmbaEcefhExekaoaY9hmea3aK9hmeaEcdfhEkaEc870mdaXcufhvaLaEciGcx2goc;i1jjbfydbcdtfydbh3aLaoc;e1jjbfydbcdtfydbh8AaLaoc;a1jjbfydbcdtfydbhKcbhodnindnalavcsGcdtfydba39hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaOa3aOSgvaYce9iaYaH9oVgoGfhOdndndncbcsavEaYaoEgvcs9hmbarce9imba3a3aAa3cefaASgvEgAcefSmecmcsavEhvkasavaEcdtc;WeGV86bbavcs9hmea3aA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbka3hAxvkcPhvasaEcdtcPV86bba3hAkavTmiavaH9omicdhocehEaQhYxlkavcufhvaEclfgEc;ab9hmbkkdnaLceaYaOSceta8AaOSEcx2gvc;a1jjbfydbcdtfydbgKTaLavc;e1jjbfydbcdtfydbg8AceSGaLavc;i1jjbfydbcdtfydbg3cdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhYxdkcuhYaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydba39hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaKaOSg8EfhLdndnaYcm0mbaYcefhYxekcbcsa8AaLSgvEhYaLavfhLkdndnaEcm0mbaEcefhExekcbcsa3aLSgvEhEaLavfhLkc9:cua8EEh8FcbhvaEaYcltVgacFeGhodndndninavc:W1jjbfRbbaoSmeavcefgvcz9hmbxdkka5aKaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeaa86bbaecefhekdna8EmbaKaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaKhAkdnaYcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmba3aA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka3hAkalaXcdtfaKBdbaXcefcsGhvdndnaYPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfa3BdbavcefcsGhvkcihoalc;abfaQcitfgEaKBdlaEa8ABdbaQcefcsGhYcdhEavhXaLhOxekcdhoalaXcdtfa3BdbcehEaXcefcsGhXaQhYkalc;abfaYcitfgva8ABdlava3Bdbalc;abfaQaEfcsGcitfgva3BdlavaKBdbascefhsaQaofcsGhQaCcifgCai6mbkkdnaeaP9nmbcbhvxekcbhvinaeavfavc:W1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd;q:kjjbk:Adewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb;q:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkdnaoar9nmbcbskaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:bvli99dui99ludnaeTmbcuadcetcuftcu7:Zhvdndncuaicuftcu7:ZgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhrdndnakJbbbb9GTmbaxhqxekJbbjZar:l:tgqaq:maxJbbbb9GEhqJbbjZax:l:tgxax:marJbbbb9GEhrkdndnalcxfIdbgxJbbj:;axJbbj:;9GEgkJbbjZakJbbjZ9FEavNJbbbZJbbb:;axJbbbb9GEMgx:lJbbb9p9DTmbax:Ohmxekcjjjj94hmkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEaoNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;hlld99eud99eudnaeTmbdndncuaicuftcu7:ZgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoalaicd7cdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNaoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk;3viDue99eu8Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6meaohwarhDinawc:CuBdbawclfhwaDcufgDmbkaeTmiadcl6mdarcdthqalhkcbhxinaohwakhDarhminawawydbgPcbaDIdbgs:8cL4cFeGc:cufasJbbbb9BEgzaPaz9kEBdbaDclfhDawclfhwamcufgmmbkakaqfhkaxcefgxaeSmixbkkaeTmdxekaeTmekarcdthkavce9hhqadcl6hdcbhxindndndnaqmbadmdc:CuhDalhwarhminaDcbawIdbgs:8cL4cFeGc:cufasJbbbb9BEgPaDaP9kEhDawclfhwamcufgmmbxdkkc:CuhDdndnavPleddbdkadmdaohwalhmarhPinawcbamIdbgs:8cL4cFeGgzc;:bazc;:b0Ec:cufasJbbbb9BEBdbamclfhmawclfhwaPcufgPmbxdkkadmecbhwarhminaoawfcbalawfIdbgs:8cL4cFeGgPc8AaPc8A0Ec:cufasJbbbb9BEBdbawclfhwamcufgmmbkkadmbcbhwarhPinaDhmdnavceSmbaoawfydbhmkdndnalawfIdbgscjjj;8iamai9RcefgmcLt9R::NJbbbZJbbb:;asJbbbb9GEMgs:lJbbb9p9DTmbas:Ohzxekcjjjj94hzkabawfazcFFFrGamcKtVBdbawclfhwaPcufgPmbkkabakfhbalakfhlaxcefgxae9hmbkkaocjdf8Kjjjjbk:Ylvdud99due99iudnaeTmbceaicufgvthocuaitcu7:Zhrcuavtcu7:Zhwcbhvadcl9hhDcbhqindndnalcwfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikdndnalIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohdxekcjjjj94hdkadai9Rcd9TgxaifhidndnalclfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEarNJbbbZMgk:lJbbb9p9DTmbak:Ohdxekcjjjj94hdkadai9Rcd9ThddndnalcxfIdbgkJbbbbakJbbbb9GEgkJbbjZakJbbjZ9FEawNJbbbZMgk:lJbbb9p9DTmbak:Ohmxekcjjjj94hmkadaifhiaoamVhmdndnaDmbabavfgPai86bbaPcifam86bbaPcdfad86bbaPcefax86bbxekabaqfgPai87ebaPcofam87ebaPclfad87ebaPcdfax87ebkalczfhlavclfhvaqcwfhqaecufgembkkk;YqdXui998Jjjjjbc:qd9Rgv8Kjjjjbavc:Sefcbc;Kbz:xjjjb8AcbhodnadTmbcbhoaiTmbdndnabaeSmbaehrxekavcuadcdtgwadcFFFFi0Ecbyd;u:kjjbHjjjjbbgrBd:SeavceBd:mdaraeawz:wjjjb8Akavc:GefcwfcbBdbav9cb83i:Geavc:Gefaradaiavc:Sefz:pjjjbavyd:GehDadci9Ugqcbyd;u:kjjbHjjjjbbheavc:Sefavyd:mdgkcdtfaeBdbavakcefgwBd:mdaecbaqz:xjjjbhxavc:SefawcdtfcuaicdtaicFFFFi0Ecbyd;u:kjjbHjjjjbbgmBdbavakcdfgPBd:mdalc;ebfhsaDheamhwinawalIdbasaeydbgzcwazcw6EcdtfIdbMUdbaeclfheawclfhwaicufgimbkavc:SefaPcdtfcuaqcdtadcFFFF970Ecbyd;u:kjjbHjjjjbbgPBdbdnadci6mbarheaPhwaqhiinawamaeydbcdtfIdbamaeclfydbcdtfIdbMamaecwfydbcdtfIdbMUdbaecxfheawclfhwaicufgimbkkakcifhoalc;ebfhHavc;qbfhOavheavyd:KehAavyd:OehCcbhzcbhwcbhXcehQinaehLcihkarawci2gKcdtfgeydbhsaeclfydbhdabaXcx2fgicwfaecwfydbgYBdbaiclfadBdbaiasBdbaxawfce86bbaOaYBdwaOadBdlaOasBdbaPawcdtfcbBdbdnazTmbcihkaLhiinaOakcdtfaiydbgeBdbakaeaY9haeas9haead9hGGfhkaiclfhiazcufgzmbkkaXcefhXcbhzinaCaAarazaKfcdtfydbcdtgifydbcdtfgYheaDaifgdydbgshidnasTmbdninaeydbawSmeaeclfheaicufgiTmdxbkkaeaYascdtfc98fydbBdbadadydbcufBdbkazcefgzci9hmbkdndnakTmbcuhwJbbbbh8Acbhdavyd:KehYavyd:OehKindndnaDaOadcdtfydbcdtgzfydbgembadcefhdxekadcs0hiamazfgsIdbhEasalcbadcefgdaiEcdtfIdbaHaecwaecw6EcdtfIdbMg3Udba3aE:th3aecdthiaKaYazfydbcdtfheinaPaeydbgzcdtfgsa3asIdbMgEUdbaEa8Aa8AaE9DgsEh8AazawasEhwaeclfheaic98fgimbkkadak9hmbkawcu9hmekaQaq9pmdindnaxaQfRbbmbaQhwxdkaqaQcefgQ9hmbxikkakczakcz6EhzaOheaLhOawcu9hmbkkaocdtavc:Seffc98fhedninaoTmeaeydbcbyd;y:kjjbH:bjjjbbaec98fheaocufhoxbkkavc:qdf8Kjjjjbk;IlevucuaicdtgvaicFFFFi0Egocbyd;u:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd;u:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd;u:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavz:xjjjb8Aadci9UhDdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic;K1jjbz:ojjjbkQbabaeadaic;m:jjjbz:ojjjbk9DeeuabcFeaicdtz:xjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk:Vvioud9:du8Jjjjjbc;Wa9Rgl8Kjjjjbcbhvalcxfcbc;Kbz:xjjjb8AalcuadcitgoadcFFFFe0Ecbyd;u:kjjbHjjjjbbgrBdxalceBd2araeadaicezNjjjbalcuaoadcjjjjoGEcbyd;u:kjjbHjjjjbbgwBdzadcdthednadTmbabhiinaiavBdbaiclfhiadavcefgv9hmbkkawaefhDalabBdwalawBdl9cbhqindnadTmbaq9cq9:hkarhvaDhiadheinaiav8Pibak1:NcFrG87ebavcwfhvaicdfhiaecufgembkkalclfaq:NceGcdtfydbhxalclfaq9ce98gq:NceGcdtfydbhmalc;Wbfcbcjaz:xjjjb8AaDhvadhidnadTmbinalc;Wbfav8VebcdtfgeaeydbcefBdbavcdfhvaicufgimbkkcbhvcbhiinalc;WbfavfgeydbhoaeaiBdbaoaifhiavclfgvcja9hmbkadhvdndnadTmbinalc;WbfaDamydbgicetf8VebcdtfgeaeydbgecefBdbaxaecdtfaiBdbamclfhmavcufgvmbkaq9cv9smdcbhvinabawydbcdtfavBdbawclfhwadavcefgv9hmbxdkkaq9cv9smekkclhvdninavc98Smealcxfavfydbcbyd;y:kjjbH:bjjjbbavc98fhvxbkkalc;Waf8Kjjjjbk:Jwliuo99iud9:cbhv8Jjjjjbca9Rgoczfcwfcbyd:8:kjjbBdbaocb8Pd:0:kjjb83izaocwfcbyd;i:kjjbBdbaocb8Pd;a:kjjb83ibaicd4hrdndnadmbJFFuFhwJFFuuhDJFFuuhqJFFuFhkJFFuuhxJFFuFhmxekarcdthPaehsincbhiinaoczfaifgzasaifIdbgwazIdbgDaDaw9EEUdbaoaifgzawazIdbgDaDaw9DEUdbaiclfgicx9hmbkasaPfhsavcefgvad9hmbkaoIdKhDaoIdwhwaoIdChqaoIdlhkaoIdzhxaoIdbhmkdnadTmbJbbbbJbFu9hJbbbbamax:tgmamJbbbb9DEgmakaq:tgkakam9DEgkawaD:tgwawak9DEgw:vawJbbbb9BEhwdnalmbarcdthoindndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:S9cC:ghHdndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikaHai:S:ehHdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaHai:T9cy:g:e83ibaeaofheabcwfhbadcufgdmbxdkkarcdthoindndnaeIdbax:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cv9:9c;j:KM;j:KM;j:Kd:dhOdndnaeclfIdbaq:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cq9:9cM;j:KM;j:KM;jl:daO:ehOdndnaecwfIdbaD:tawNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabaOai:SgH9ca:gaH9cz:g9cjjj;4s:d:eaH9cFe:d:e9cF:bj;4:pj;ar:d9c:bd9:9c:p;G:d;4j:E;ar:d9cH9:9c;d;H:W:y:m:g;d;Hb:d9cC9:9c:KM;j:KM;j:KMD:d:e83ibaeaofheabcwfhbadcufgdmbkkk9teiucbcbyd;C:kjjbgeabcifc98GfgbBd;C:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;C:kjjbgeabcrfc94GfgbBd;C:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd;C:kjjbge9Rcifc98GaefgbBd;C:kjjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk;Uddbcjwk;mdbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbbbbbbbbbbbbb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc;mqkCebbbebbbebbbdbbb9G:vbb'; // embed! wasm\n\n\tvar wasmpack = new Uint8Array([\n\t\t32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67,\n\t\t24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115,\n\t]);\n\n\tif (typeof WebAssembly !== 'object') {\n\t\treturn {\n\t\t\tsupported: false,\n\t\t};\n\t}\n\n\tvar instance;\n\n\tvar ready = WebAssembly.instantiate(unpack(wasm), {}).then(function (result) {\n\t\tinstance = result.instance;\n\t\tinstance.exports.__wasm_call_ctors();\n\t\tinstance.exports.meshopt_encodeVertexVersion(1);\n\t\tinstance.exports.meshopt_encodeIndexVersion(1);\n\t});\n\n\tfunction unpack(data) {\n\t\tvar result = new Uint8Array(data.length);\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tvar ch = data.charCodeAt(i);\n\t\t\tresult[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;\n\t\t}\n\t\tvar write = 0;\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tresult[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n\t\t}\n\t\treturn result.buffer.slice(0, write);\n\t}\n\n\tfunction assert(cond) {\n\t\tif (!cond) {\n\t\t\tthrow new Error('Assertion failed');\n\t\t}\n\t}\n\n\tfunction bytes(view) {\n\t\treturn new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n\t}\n\n\tfunction reorder(fun, indices, vertices, optf) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar ip = sbrk(indices.length * 4);\n\t\tvar rp = sbrk(vertices * 4);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar indices8 = bytes(indices);\n\t\theap.set(indices8, ip);\n\t\tif (optf) {\n\t\t\toptf(ip, ip, indices.length, vertices);\n\t\t}\n\t\tvar unique = fun(rp, ip, indices.length, vertices);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar remap = new Uint32Array(vertices);\n\t\tnew Uint8Array(remap.buffer).set(heap.subarray(rp, rp + vertices * 4));\n\t\tindices8.set(heap.subarray(ip, ip + indices.length * 4));\n\t\tsbrk(ip - sbrk(0));\n\n\t\tfor (var i = 0; i < indices.length; ++i) indices[i] = remap[indices[i]];\n\n\t\treturn [remap, unique];\n\t}\n\n\tfunction spatialsort(fun, positions, count, stride) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar ip = sbrk(count * 4);\n\t\tvar sp = sbrk(count * stride);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(positions), sp);\n\t\tfun(ip, sp, count, stride);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar remap = new Uint32Array(count);\n\t\tnew Uint8Array(remap.buffer).set(heap.subarray(ip, ip + count * 4));\n\t\tsbrk(ip - sbrk(0));\n\t\treturn remap;\n\t}\n\n\tfunction encode(fun, bound, source, count, size, level, version) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar tp = sbrk(bound);\n\t\tvar sp = sbrk(count * size);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(source), sp);\n\t\tvar res = fun(tp, bound, sp, count, size, level, version);\n\t\tvar target = new Uint8Array(res);\n\t\ttarget.set(heap.subarray(tp, tp + res));\n\t\tsbrk(tp - sbrk(0));\n\t\treturn target;\n\t}\n\n\tfunction maxindex(source) {\n\t\tvar result = 0;\n\t\tfor (var i = 0; i < source.length; ++i) {\n\t\t\tvar index = source[i];\n\t\t\tresult = result < index ? index : result;\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction index32(source, size) {\n\t\tassert(size == 2 || size == 4);\n\t\tif (size == 4) {\n\t\t\treturn new Uint32Array(source.buffer, source.byteOffset, source.byteLength / 4);\n\t\t} else {\n\t\t\tvar view = new Uint16Array(source.buffer, source.byteOffset, source.byteLength / 2);\n\t\t\treturn new Uint32Array(view); // copies each element\n\t\t}\n\t}\n\n\tfunction filter(fun, source, count, stride, bits, insize, mode) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar tp = sbrk(count * stride);\n\t\tvar sp = sbrk(count * insize);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(source), sp);\n\t\tfun(tp, count, stride, bits, sp, mode);\n\t\tvar target = new Uint8Array(count * stride);\n\t\ttarget.set(heap.subarray(tp, tp + count * stride));\n\t\tsbrk(tp - sbrk(0));\n\t\treturn target;\n\t}\n\n\treturn {\n\t\tready: ready,\n\t\tsupported: true,\n\t\treorderMesh: function (indices, triangles, optsize) {\n\t\t\tvar optf = triangles\n\t\t\t\t? optsize\n\t\t\t\t\t? instance.exports.meshopt_optimizeVertexCacheStrip\n\t\t\t\t\t: instance.exports.meshopt_optimizeVertexCache\n\t\t\t\t: undefined;\n\t\t\treturn reorder(instance.exports.meshopt_optimizeVertexFetchRemap, indices, maxindex(indices) + 1, optf);\n\t\t},\n\t\treorderPoints: function (positions, positions_stride) {\n\t\t\tassert(positions instanceof Float32Array);\n\t\t\tassert(positions.length % positions_stride == 0);\n\t\t\tassert(positions_stride >= 3);\n\t\t\treturn spatialsort(instance.exports.meshopt_spatialSortRemap, positions, positions.length / positions_stride, positions_stride * 4);\n\t\t},\n\t\tencodeVertexBuffer: function (source, count, size) {\n\t\t\tassert(size > 0 && size <= 256);\n\t\t\tassert(size % 4 == 0);\n\t\t\tvar bound = instance.exports.meshopt_encodeVertexBufferBound(count, size);\n\t\t\treturn encode(instance.exports.meshopt_encodeVertexBuffer, bound, source, count, size);\n\t\t},\n\t\tencodeVertexBufferLevel: function (source, count, size, level, version) {\n\t\t\tassert(size > 0 && size <= 256);\n\t\t\tassert(size % 4 == 0);\n\t\t\tassert(level >= 0 && level <= 3);\n\t\t\tassert(version === undefined || version == 0 || version == 1);\n\t\t\tvar bound = instance.exports.meshopt_encodeVertexBufferBound(count, size);\n\t\t\treturn encode(instance.exports.meshopt_encodeVertexBufferLevel, bound, source, count, size, level, version === undefined ? -1 : version);\n\t\t},\n\t\tencodeIndexBuffer: function (source, count, size) {\n\t\t\tassert(size == 2 || size == 4);\n\t\t\tassert(count % 3 == 0);\n\t\t\tvar indices = index32(source, size);\n\t\t\tvar bound = instance.exports.meshopt_encodeIndexBufferBound(count, maxindex(indices) + 1);\n\t\t\treturn encode(instance.exports.meshopt_encodeIndexBuffer, bound, indices, count, 4);\n\t\t},\n\t\tencodeIndexSequence: function (source, count, size) {\n\t\t\tassert(size == 2 || size == 4);\n\t\t\tvar indices = index32(source, size);\n\t\t\tvar bound = instance.exports.meshopt_encodeIndexSequenceBound(count, maxindex(indices) + 1);\n\t\t\treturn encode(instance.exports.meshopt_encodeIndexSequence, bound, indices, count, 4);\n\t\t},\n\t\tencodeGltfBuffer: function (source, count, size, mode, version) {\n\t\t\tvar table = {\n\t\t\t\tATTRIBUTES: this.encodeVertexBufferLevel,\n\t\t\t\tTRIANGLES: this.encodeIndexBuffer,\n\t\t\t\tINDICES: this.encodeIndexSequence,\n\t\t\t};\n\t\t\tassert(table[mode]);\n\t\t\treturn table[mode](source, count, size, /* level= */ 2, version === undefined ? 0 : version);\n\t\t},\n\t\tencodeFilterOct: function (source, count, stride, bits) {\n\t\t\tassert(stride == 4 || stride == 8);\n\t\t\tassert(bits >= 2 && bits <= 16);\n\t\t\treturn filter(instance.exports.meshopt_encodeFilterOct, source, count, stride, bits, 16);\n\t\t},\n\t\tencodeFilterQuat: function (source, count, stride, bits) {\n\t\t\tassert(stride == 8);\n\t\t\tassert(bits >= 4 && bits <= 16);\n\t\t\treturn filter(instance.exports.meshopt_encodeFilterQuat, source, count, stride, bits, 16);\n\t\t},\n\t\tencodeFilterExp: function (source, count, stride, bits, mode) {\n\t\t\tassert(stride > 0 && stride % 4 == 0);\n\t\t\tassert(bits >= 1 && bits <= 24);\n\t\t\tvar table = {\n\t\t\t\tSeparate: 0,\n\t\t\t\tSharedVector: 1,\n\t\t\t\tSharedComponent: 2,\n\t\t\t\tClamped: 3,\n\t\t\t};\n\t\t\treturn filter(instance.exports.meshopt_encodeFilterExp, source, count, stride, bits, stride, mode ? table[mode] : 1);\n\t\t},\n\t\tencodeFilterColor: function (source, count, stride, bits) {\n\t\t\tassert(stride == 4 || stride == 8);\n\t\t\tassert(bits >= 2 && bits <= 16);\n\t\t\treturn filter(instance.exports.meshopt_encodeFilterColor, source, count, stride, bits, 16);\n\t\t},\n\t};\n})();\n\nexport { MeshoptEncoder };\n","// This file is part of meshoptimizer library and is distributed under the terms of MIT License.\n// Copyright (C) 2016-2025, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)\nvar MeshoptDecoder = (function () {\n\t// Built with clang version 19.1.5-wasi-sdk\n\t// Built from meshoptimizer 1.0\n\tvar wasm_base =\n\t\t'b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuixkbeeeddddillviebeoweuec:W:Odkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WboY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbrl79IV9Rbwq;lZkdbk;jYi5ud9:du8Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz:jjjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCabaOad2fhXaAcethQaxaDfhiaOaeaoaeao6E9RhLalcl4cifcd4hKazcj;cbfaAfhYcbh8AazcjdfhEaHh3incbhodnawTmbaxa8Acd4fRbbhokaocFeGh5cbh8Eazcj;cbfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcj;cbfa8EaA2fa8FaAz:jjjjb8Aa8FaAfhixdkazcj;cbfa8EaA2fcbaAz:kjjjb8Aa8FhixekaPa8F9RaK6mva8FaKfhidnaCTmbaPai9RcK6mbaocdtc:q1jjbfcj1jjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bbarcwf9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfag9c8F1:NghcKtc8F91aicdfa8J9c8N1:Nfg8KRbbG86bbarcVfcba8KahcjeGcr4fghRbbag9cjjjjjl:dg8J9qE86bbarc7fcbaha8J9c8L1:NfghRbbag9cjjjjjd:dg8J9qE86bbarctfcbaha8J9c8K1:NfghRbbag9cjjjjje:dg8J9qE86bbarc91fcbaha8J9c8J1:NfghRbbag9cjjjj;ab:dg8J9qE86bbarc4fcbaha8J9cg1:NfghRbbag9cjjjja:dg8J9qE86bbarc93fcbaha8J9ch1:NfghRbbag9cjjjjz:dgg9qE86bbarc94fcbahag9ca1:NfghRbbai8Xbe9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbarc95fag9c8F1:NgicKtc8F91aha8J9c8N1:NfghRbbG86bbarc96fcbahaicjeGcr4fgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbb83bbarcwfaicwf8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasa8Acd4fRbbgociGPlbedrbkaATmdaza8Afh8Fazcj;cbfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeaza8Afhaazcj;cbfhhcbhoceh8EaYh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaLaocefgofmbka8FaQfh8FcdhoaacdfhaahaQfhha8EceGhlcbh8EalmbxdkkaATmbcbaocl49Rh8Eaza8AfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaYhainazcj;cbfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E93aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3a8Aclfg8Aad6mbkaXazcjdfaAad2z:jjjjb8AazazcjdfaAcufad2fadz:jjjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaok:XseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:kjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk::ioiue99dud99dud99dnaeTmbcbhiabhlindndnal8Uebgv:YgoJ:ji:1Salcof8UebgrciVgw:Y:vgDNJbbbZJbbb:;avcu9kEMgq:lJbbb9p9DTmbaq:Ohkxekcjjjj94hkkalclf8Uebhvalcdf8UebhxabaiarcefciGfcetfak87ebdndnax:YgqaDNJbbbZJbbb:;axcu9kEMgm:lJbbb9p9DTmbam:Ohxxekcjjjj94hxkabaiarciGfgkcd7cetfax87ebdndnav:YgmaDNJbbbZJbbb:;avcu9kEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabaiarcufciGfcetfav87ebdndnawaw2:ZgPaPMaoaoN:taqaqN:tamamN:tgoJbbbbaoJbbbb9GE:raDNJbbbZMgD:lJbbb9p9DTmbaD:Ohrxekcjjjj94hrkabakcetfar87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk:Tvirud99eudndnadcl9hmbaeTmeindndnabRbbgiabcefgl8Sbbgvabcdfgo8Sbbgrf9R:YJbbuJabcifgwRbbgdce4adVgDcd4aDVgDcl4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax86bbdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao86bbdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai86bbdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad86bbabclfhbaecufgembxdkkaeTmbindndnab8Vebgiabcdfgl8Uebgvabclfgo8Uebgrf9R:YJbFu9habcofgw8Vebgdce4adVgDcd4aDVgDcl4aDVgDcw4aDVgD:Z:vgqNJbbbZMgk:lJbbb9p9DTmbak:Ohxxekcjjjj94hxkaoax87ebdndnaraif:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohoxekcjjjj94hokalao87ebdndnavaifar9R:YaqNJbbbZMgk:lJbbb9p9DTmbak:Ohixekcjjjj94hikabai87ebdndnaDadcetGadceGV:ZaqNJbbbZMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkawad87ebabcwfhbaecufgembkkk9teiucbcbyd:K1jjbgeabcifc98GfgbBd:K1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk81dbcjwk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:Kwkl8WNbb'; // embed! base\n\tvar wasm_simd =\n\t\t'b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuixkbbebeeddddilve9Weeeviebeoweuec:q:6dkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WbwY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbDl79IV9Rbqq:Ctklbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:183lYud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxavaialfgmar9Rgoad;8qbbcj;abad9Uc;WFbGcjdadca0EhPdndndnadTmbaoadfhscbhzinaeaz9nmdamax9RaD6miabazad2fhHaxaDfhOaPaeaz9RazaPfae6EgAcsfgocl4cifcd4hCavcj;cbfaoc9WGgXcetfhQavcj;cbfaXci2fhLavcj;cbfaXfhKcbhYaoc;ab6h8AincbhodnawTmbaxaYcd4fRbbhokaocFeGhEcbh3avcj;cbfh5indndndndnaEa3cet4ciGgoc9:fPdebdkamaO9RaX6mwavcj;cbfa3aX2faOaX;8qbbaOaAfhOxdkavcj;cbfa3aX2fcbaX;8kbxekamaO9RaC6moaoclVcbawEhraOaCfhocbhidna8Ambamao9Rc;Gb6mbcbhlina5alfhidndndndndndnaOalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiczfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaicafaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaoclffaqc:q:yjjbfRbbfhoxikaic8Wfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaocwffaqc:q:yjjbfRbbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitc:q1jjbfpbibaic:q:yjjbfRbbgipsaoRbegqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqc:q:yjjbfRbbfhokalc;abfhialcjefaX0meaihlamao9Rc;Fb0mbkkdnaiaX9pmbaici4hlinamao9RcK6mwa5aifhqdndndndndndnaOaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaoclffahc:q:yjjbfRbbfhoxikaqaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaocwffahc:q:yjjbfRbbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpkbbaaaocdffahc:q:yjjbfRbbfhokalcdfhlaiczfgiaX6mbkkaohOaoTmoka5aXfh5a3cefg3cl9hmbkdndndndnawTmbasaYcd4fRbbglciGPlbedwbkaXTmdavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep9Ta8Epxeeeeeeeeeeeeeeeeg8Fp9op9Hp9rg8Eagp9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Ug8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9AbbbaladfhlaoczfgoaX6mbxikkaXTmeavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep:nea8Epxebebebebebebebebg8Fp9op:bep9rg8Eagp:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeg8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9AbbbaladfhlaoczfgoaX6mbxdkkaXTmbcbhocbalcl4gl9Rc8FGhiavcjdfaYfhravaYfpbdbh8Finaravcj;cbfaofpblbggaKaofpblbg8JpmbzeHdOiAlCvXoQrLg8KaQaofpblbg8LaLaofpblbg8MpmbzeHdOiAlCvXoQrLg8NpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ea8Fp9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Fa8Ka8NpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwKDYq8AkEx3m5P8Es8Fgga8La8MpmwKDYq8AkEx3m5P8Es8Fg8JpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9AbbbaradfhraoczfgoaX6mbkkaYclfgYad6mbkaHavcjdfaAad2;8qbbavavcjdfaAcufad2fad;8qbbaAazfhzc9:hoaOhxaOmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdaPaeao9RaoaPfae6Eaofgoae6mbkaial9Rhxkcbc99amax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbk:TseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhldnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhoindnalaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfaoaDcu7gPcl4fcsGcitfgsydlhzasydbhHdndnaDcsGgsak9pmbavaiaPfcsGcdtfydbaxasEhDaxasTgOfhxxekdndnascsSmbcehOasc987asamffcefhDxekalcefhDal8SbbgscFeGhPdndnascu9mmbaDhlxekalcvfhlaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhlkcehOaPce4cbaPceG9R7amfhDkaDhmkavc;abfaocitfgsaDBdbasazBdlavaicdtfaDBdbavc;abfaocefcsGcitfgsaHBdbasaDBdlaocdfhoaOaifhidnadcd9hmbabarcetfgsaH87ebasclfaD87ebascdfaz87ebxdkabarcdtfgsaHBdbascwfaDBdbasclfazBdbxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHclfas87ebaHcdfaD87ebxekabarcdtfgHaxBdbaHcwfasBdbaHclfaDBdbkavaicdtfaxBdbavc;abfaocitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfaocefcsGcitfgHasBdbaHaDBdlavaiaPfgicsGcdtfasBdbavc;abfaocdfcsGcitfgDaxBdbaDasBdlaocifhoaiaOfhiazaOfhxxekaxcbalRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbalcefhDxekalcdfhDal8SbegPcFeGhsdnaPcu9kmbalcofhAascFbGhscrhldninaD8SbbgPcFbGaltasVhsaPcu9kmeaDcefhDalcrfglc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbglcFeGhPdnalcu9kmbaDcvfhzaPcFbGhPcrhldninas8SbbgDcFbGaltaPVhPaDcu9kmeascefhsalcrfglc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashlxekascefhlas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninal8SbbgscFbGaDtaPVhPascu9kmealcefhlaDcrfgDc8J9hmbkaOhlxekalcefhlkaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDclfaO87ebaDcdfaz87ebxekabarcdtfgDaABdbaDcwfaOBdbaDclfazBdbkavc;abfaocitfgDazBdbaDaABdlavaicdtfaABdbavc;abfaocefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfaocdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhiaocifhokawcefhwaocsGhoaicsGhiarcifgrae6mbkkcbc99alaqSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:2Pliur97eue978Jjjjjbc8W9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskaipxFubbFubbFubbFubbgxpklbdnalTmbcbhvabhdinadczfgmampbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraipblbaDaopmlvorxmPsCXQL358E8Fp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgPp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;MeawaqawaPp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgopklbaiaopklbaiabalcitfgdaeciGglcitgv;8qbbaiaxpkladnalTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraipblaaDaopmlvorxmPsCXQL358E8Fp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgPp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;MeawaqawaPp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkadaiav;8qbbkk:Iwllue97euo978Jjjjjbca9Rhidnaec98GglTmbcbhvabhoinaocKfpx:ji:1S:ji:1S:ji:1S:ji:1SaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkpxibbbibbbibbbibbbp9qgxp;6ep;Negmaxaxp:1ep;7egxaxp;KearaDpmbediwDqkzHOAKY8AEgxczp:Reczp:Sep;6egrarp;Meaxczp:Sep;6egDaDp;Meaqczp:Reczp:Sep;6egqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jep;Mepxbbn0bbn0bbn0bbn0gxp;KepxFFbbFFbbFFbbFFbbgPp9oamaDp;Meaxp;Keczp:Rep9qgDamarp;Meaxp;KeaPp9oamaqp;Meaxp;Keczp:Rep9qgxpmwDKYqk8AExm35Ps8E8Fgrp5eakclp:RegmpEi:T:j83ibawarp5bampEd:T:j83ibaocwfaDaxpmbezHdiOAlvCXorQLgxp5eampEe:T:j83ibaoaxp5bampEb:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiczfpxbbbbbbbbbbbbbbbbgmpklbaiampklbaiabalcitfgoaeciGgvcitgw;8qbbdnavTmbaipx:ji:1S:ji:1S:ji:1S:ji:1SaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkpxibbbibbbibbbibbbp9qgxp;6ep;Negmaxaxp:1ep;7egxaxp;KearaDpmbediwDqkzHOAKY8AEgxczp:Reczp:Sep;6egrarp;Meaxczp:Sep;6egDaDp;Meaqczp:Reczp:Sep;6egqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jep;Mepxbbn0bbn0bbn0bbn0gxp;KepxFFbbFFbbFFbbFFbbgPp9oamaDp;Meaxp;Keczp:Rep9qgDamarp;Meaxp;KeaPp9oamaqp;Meaxp;Keczp:Rep9qgxpmwDKYqk8AExm35Ps8E8Fgrp5eakclp:RegmpEi:T:j83iKaiarp5bampEd:T:j83izaiaDaxpmbezHdiOAlvCXorQLgxp5eampEe:T:j83iwaiaxp5bampEb:T:j83ibkaoaiaw;8qbbkk;uddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaic8WfpxbbbbbbbbbbbbbbbbgopklbaicafaopklbaiczfaopklbaiaopklbaiabavcdtfgdalciGgecdtgv;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkadaiav;8qbbkk:CPvdue97euw97eu8Jjjjjbc8W9Rhiaec98Ghldndnadcl9hmbaipxbbbbbbbbbbbbbbbbgvpklbdnalTmbcbhoabhdinadpbbbhradpxbbuJbbuJbbuJbbuJaipblbarcKp:Tep9qgwcep:Seawp9qgDcdp:SeaDp9qgDclp:SeaDp9qgqp;6ep;NegDarcwp:RecKp:SegkarpxFbbbFbbbFbbbFbbbgxp9ogmp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gPp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oaDamakp:Xearczp:RecKp:Segrp:Uep;6ep;MeaPp;Keaxp9op9qaDamakarp:Uep:Xep;6ep;MeaPp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qaDaqawcep:Rep9oawpxebbbebbbebbbebbbp9op9qp;6ep;MeaPp;KecKp:Rep9qpkbbadczfhdaoclfgoal6mbkkalaeSmeaiavpklaaicafabalcdtfgdaeciGglcdtgo;8qbbaiavpklbdnalTmbaipblahraipxbbuJbbuJbbuJbbuJaipblbarcKp:Tep9qgwcep:Seawp9qgDcdp:SeaDp9qgDclp:SeaDp9qgqp;6ep;NegDarcwp:RecKp:SegkarpxFbbbFbbbFbbbFbbbgxp9ogmp:Uep;6ep;Mepxbbn0bbn0bbn0bbn0gPp;Kecwp:RepxbFbbbFbbbFbbbFbbp9oaDamakp:Xearczp:RecKp:Segrp:Uep;6ep;MeaPp;Keaxp9op9qaDamakarp:Uep:Xep;6ep;MeaPp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qaDaqawcep:Rep9oawpxebbbebbbebbbebbbp9op9qp;6ep;MeaPp;KecKp:Rep9qpklakadaicafao;8qbbskaipxbbbbbbbbbbbbbbbbgvpklbdnalTmbcbhoabhdinadczfgspxbFu9hbFu9hbFu9hbFu9hadpbbbgDaspbbbgPpmlvorxmPsCXQL358E8Fgmczp:Teaipblbp9qgrcep:Searp9qgwcdp:Seawp9qgwclp:Seawp9qgwcwp:Seawp9qgqp;6ep;NegwaDaPpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbgPp9ogkaDczp:Segxp:Ueamczp:Reczp:Segmp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gDp;KeaPp9oawakaxamp:Uep:Xep;6ep;MeaDp;Keczp:Rep9qgxawaqarcep:Rep9oarpxebbbebbbebbbebbbp9op9qp;6ep;MeaDp;Keczp:Reawamakp:Uep;6ep;MeaDp;KeaPp9op9qgrpmwDKYqk8AExm35Ps8E8FpkbbadaxarpmbezHdiOAlvCXorQLpkbbadcafhdaoclfgoal6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgrpklbaiarpklbaiabalcitfgdaeciGglcitgo;8qbbaiavpkladnalTmbaipxbFu9hbFu9hbFu9hbFu9haipblbgDaipblzgPpmlvorxmPsCXQL358E8Fgmczp:Teaipblap9qgrcep:Searp9qgwcdp:Seawp9qgwclp:Seawp9qgwcwp:Seawp9qgqp;6ep;NegwaDaPpmbediwDqkzHOAKY8AEgDpxFFbbFFbbFFbbFFbbgPp9ogkaDczp:Segxp:Ueamczp:Reczp:Segmp:Xep;6ep;Mepxbbn0bbn0bbn0bbn0gDp;KeaPp9oawakaxamp:Uep:Xep;6ep;MeaDp;Keczp:Rep9qgxawaqarcep:Rep9oarpxebbbebbbebbbebbbp9op9qp;6ep;MeaDp;Keczp:Reawamakp:Uep;6ep;MeaDp;KeaPp9op9qgrpmwDKYqk8AExm35Ps8E8FpklzaiaxarpmbezHdiOAlvCXorQLpklbkadaiao;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb'; // embed! simd\n\n\tvar detector = new Uint8Array([\n\t\t0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0,\n\t\t11, 7, 0, 65, 0, 253, 15, 26, 11,\n\t]);\n\tvar wasmpack = new Uint8Array([\n\t\t32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67,\n\t\t24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115,\n\t]);\n\n\tif (typeof WebAssembly !== 'object') {\n\t\treturn {\n\t\t\tsupported: false,\n\t\t};\n\t}\n\n\tvar wasm = WebAssembly.validate(detector) ? unpack(wasm_simd) : unpack(wasm_base);\n\n\tvar instance;\n\n\tvar ready = WebAssembly.instantiate(wasm, {}).then(function (result) {\n\t\tinstance = result.instance;\n\t\tinstance.exports.__wasm_call_ctors();\n\t});\n\n\tfunction unpack(data) {\n\t\tvar result = new Uint8Array(data.length);\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tvar ch = data.charCodeAt(i);\n\t\t\tresult[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;\n\t\t}\n\t\tvar write = 0;\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tresult[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n\t\t}\n\t\treturn result.buffer.slice(0, write);\n\t}\n\n\tfunction decode(instance, fun, target, count, size, source, filter) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar count4 = (count + 3) & ~3;\n\t\tvar tp = sbrk(count4 * size);\n\t\tvar sp = sbrk(source.length);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(source, sp);\n\t\tvar res = fun(tp, count, size, sp, source.length);\n\t\tif (res == 0 && filter) {\n\t\t\tfilter(tp, count4, size);\n\t\t}\n\t\ttarget.set(heap.subarray(tp, tp + count * size));\n\t\tsbrk(tp - sbrk(0));\n\t\tif (res != 0) {\n\t\t\tthrow new Error('Malformed buffer data: ' + res);\n\t\t}\n\t}\n\n\tvar filters = {\n\t\tNONE: '',\n\t\tOCTAHEDRAL: 'meshopt_decodeFilterOct',\n\t\tQUATERNION: 'meshopt_decodeFilterQuat',\n\t\tEXPONENTIAL: 'meshopt_decodeFilterExp',\n\t\tCOLOR: 'meshopt_decodeFilterColor',\n\t};\n\n\tvar decoders = {\n\t\tATTRIBUTES: 'meshopt_decodeVertexBuffer',\n\t\tTRIANGLES: 'meshopt_decodeIndexBuffer',\n\t\tINDICES: 'meshopt_decodeIndexSequence',\n\t};\n\n\tvar workers = [];\n\tvar requestId = 0;\n\n\tfunction createWorker(url) {\n\t\tvar worker = {\n\t\t\tobject: new Worker(url),\n\t\t\tpending: 0,\n\t\t\trequests: {},\n\t\t};\n\n\t\tworker.object.onmessage = function (event) {\n\t\t\tvar data = event.data;\n\n\t\t\tworker.pending -= data.count;\n\t\t\tworker.requests[data.id][data.action](data.value);\n\t\t\tdelete worker.requests[data.id];\n\t\t};\n\n\t\treturn worker;\n\t}\n\n\tfunction initWorkers(count) {\n\t\tvar source =\n\t\t\t'self.ready = WebAssembly.instantiate(new Uint8Array([' +\n\t\t\tnew Uint8Array(wasm) +\n\t\t\t']), {})' +\n\t\t\t'.then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });' +\n\t\t\t'self.onmessage = ' +\n\t\t\tworkerProcess.name +\n\t\t\t';' +\n\t\t\tdecode.toString() +\n\t\t\tworkerProcess.toString();\n\n\t\tvar blob = new Blob([source], { type: 'text/javascript' });\n\t\tvar url = URL.createObjectURL(blob);\n\n\t\tfor (var i = workers.length; i < count; ++i) {\n\t\t\tworkers[i] = createWorker(url);\n\t\t}\n\n\t\tfor (var i = count; i < workers.length; ++i) {\n\t\t\tworkers[i].object.postMessage({});\n\t\t}\n\n\t\tworkers.length = count;\n\n\t\tURL.revokeObjectURL(url);\n\t}\n\n\tfunction decodeWorker(count, size, source, mode, filter) {\n\t\tvar worker = workers[0];\n\n\t\tfor (var i = 1; i < workers.length; ++i) {\n\t\t\tif (workers[i].pending < worker.pending) {\n\t\t\t\tworker = workers[i];\n\t\t\t}\n\t\t}\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tvar data = new Uint8Array(source);\n\t\t\tvar id = ++requestId;\n\n\t\t\tworker.pending += count;\n\t\t\tworker.requests[id] = { resolve: resolve, reject: reject };\n\t\t\tworker.object.postMessage({ id: id, count: count, size: size, source: data, mode: mode, filter: filter }, [data.buffer]);\n\t\t});\n\t}\n\n\tfunction workerProcess(event) {\n\t\tvar data = event.data;\n\t\tif (!data.id) {\n\t\t\treturn self.close();\n\t\t}\n\t\tself.ready.then(function (instance) {\n\t\t\ttry {\n\t\t\t\tvar target = new Uint8Array(data.count * data.size);\n\t\t\t\tdecode(instance, instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);\n\t\t\t\tself.postMessage({ id: data.id, count: data.count, action: 'resolve', value: target }, [target.buffer]);\n\t\t\t} catch (error) {\n\t\t\t\tself.postMessage({ id: data.id, count: data.count, action: 'reject', value: error });\n\t\t\t}\n\t\t});\n\t}\n\n\treturn {\n\t\tready: ready,\n\t\tsupported: true,\n\t\tuseWorkers: function (count) {\n\t\t\tinitWorkers(count);\n\t\t},\n\t\tdecodeVertexBuffer: function (target, count, size, source, filter) {\n\t\t\tdecode(instance, instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]);\n\t\t},\n\t\tdecodeIndexBuffer: function (target, count, size, source) {\n\t\t\tdecode(instance, instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);\n\t\t},\n\t\tdecodeIndexSequence: function (target, count, size, source) {\n\t\t\tdecode(instance, instance.exports.meshopt_decodeIndexSequence, target, count, size, source);\n\t\t},\n\t\tdecodeGltfBuffer: function (target, count, size, source, mode, filter) {\n\t\t\tdecode(instance, instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);\n\t\t},\n\t\tdecodeGltfBufferAsync: function (count, size, source, mode, filter) {\n\t\t\tif (workers.length > 0) {\n\t\t\t\treturn decodeWorker(count, size, source, decoders[mode], filters[filter]);\n\t\t\t}\n\n\t\t\treturn ready.then(function () {\n\t\t\t\tvar target = new Uint8Array(count * size);\n\t\t\t\tdecode(instance, instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);\n\t\t\t\treturn target;\n\t\t\t});\n\t\t},\n\t};\n})();\n\nexport { MeshoptDecoder };\n","// This file is part of meshoptimizer library and is distributed under the terms of MIT License.\n// Copyright (C) 2016-2025, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)\nvar MeshoptSimplifier = (function () {\n\t// Built with clang version 19.1.5-wasi-sdk\n\t// Built from meshoptimizer 1.0\n\tvar wasm =\n\t\t'b9H79Tebbbe:6eO9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gruuuuuuub9Gouuuuuue999Gvuuuuueu9Gzuuuuuuuuuuu99uuuub9Gquuuuuuu99uueu9GPuuuuuuuuuuu99uueu9Gquuuuuuuu99ueu9Gruuuuuu99eu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9Gluuuub9GiuuueuiLQdilvorlwDiqkxmPszbHHbelve9Weiiviebeoweuec:G:Pdkr:Bdxo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bw8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bD8A9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9O9v9W9K9HtWbqQ9TW79O9V9Wt9F79P9T9W29P9M959t29V9W9W95bkX9TW79O9V9Wt9F79P9T9W29P9M959qV919UWbxQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7bmX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2WbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbs59TW79O9V9Wt9F9NW9UWV9HtW9q9V79Pt9P9V9U9sW9T9H9Wbzl79IV9RbHDwebcekdCXqM;YeQdbk;A1er3ue99euE99Que9:r998Jjjjjbcj;sb9Rgs8Kjjjjbcbhzasc:Cefcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkdnamcdGTmbalcrfci4cbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egecdtfaHBdbasaecefBd;8ecbhlcbhednadTmbabheadhOinaHaeydbci4fcb86bbaeclfheaOcufgOmbkcbhlabheadhOinaHaeydbgAci4fgCaCRbbgCceaAcrGgAtV86bbaCcu7aA4ceGalfhlaeclfheaOcufgOmbkcualcdtalcFFFFi0Ehekaecbyd1:jjjbHjjjjbbhzasc:Cefasyd;8egecdtfazBdbasaecefBd;8ealcd4alfhOcehHinaHgecethHaeaO6mbkcbhXcuaecdtgOaecFFFFi0Ecbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egAcdtfaHBdbasaAcefBd;8eaHcFeaOz:tjjjbhQdnadTmbaecufhLcbhKindndnaQabaXcdtfgYydbgAc:v;t;h;Ev2aLGgOcdtfgCydbgHcuSmbceheinazaHcdtfydbaASmdaOaefhHaecefheaQaHaLGgOcdtfgCydbgHcu9hmbkkazaKcdtfaABdbaCaKBdbaKhHaKcefhKkaYaHBdbaXcefgXad9hmbkkaQcbyd:m:jjjbH:bjjjbbasasyd;8ecufBd;8ekcbh8AcualcefgecdtaecFFFFi0Ecbyd1:jjjbHjjjjbbhXasc:Cefasyd;8egecdtfaXBdbasaXBdNeasaecefBd;8ecuadcitadcFFFFe0Ecbyd1:jjjbHjjjjbbhEasc:Cefasyd;8egecdtfaEBdbasaEBd:yeasaecefBd;8eascNefabadalcbz:cjjjbcualcdtgealcFFFFi0Eg3cbyd1:jjjbHjjjjbbhAasc:Cefasyd;8egHcdtfaABdbasaHcefBd;8ea3cbyd1:jjjbHjjjjbbhKasc:Cefasyd;8egHcdtfaKBdbasaHcefBd;8eaAaKaialavazasc:Cefz:djjjbalcbyd1:jjjbHjjjjbbh5asc:Cefasyd;8egHcdtfa5BdbasaHcefBd;8ea3cbyd1:jjjbHjjjjbbhHasc:Cefasyd;8egOcdtfaHBdbasaOcefBd;8ea3cbyd1:jjjbHjjjjbbhOasc:Cefasyd;8egCcdtfaOBdbasaCcefBd;8eaHcFeaez:tjjjbh8EaOcFeaez:tjjjbh8FdnalTmbaEcwfhaindnaXa8AgOcefg8AcdtfydbgCaXaOcdtgefydbgHSmbaCaH9RhhaEaHcitfhga8Faefh8Ja8Eaefh8KcbhQindndnagaQcitfydbgLaO9hmba8KaOBdba8JaOBdbxekdnaXaLcdtg8LfgeclfydbgHaeydbgeSmbaEaecitgCfydbaOSmeaHae9Rh8Maecu7aHfhYaaaCfhHcbheinaYaeSmeaecefheaHydbhCaHcwfhHaCaO9hmbkaea8M6meka8Fa8LfgeaOaLaeydbcuSEBdba8KaLaOa8KydbcuSEBdbkaQcefgQah9hmbkka8Aal9hmbkaAhHaKhOa8FhCa8EhQcbheindndnaeaHydbgL9hmbdnaeaOydbgL9hmbaQydbhLdnaCydbgYcu9hmbaLcu9hmba5aefcb86bbxikdnaYcuSmbaLcuSmbaeaYSmbaAaYcdtfydbaAaLcdtfydb9hmba5aefcd86bbxika5aefh8KdnaeaYSmbaeaLSmba8Kce86bbxika8Kcl86bbxdkdnaeaKaLcdtgYfydb9hmbdnaCydbg8KcuSmbaea8KSmbaQydbghcuSmbaeahSmba8FaYfydbggcuSmbagaLSmba8EaYfydbgYcuSmbaYaLSmbdnaAa8KcdtfydbgLaAaYcdtfydb9hmbaLaAahcdtfydbgYSmbaYaAagcdtfydb9hmba5aefcd86bbxlka5aefcl86bbxika5aefcl86bbxdka5aefcl86bbxeka5aefa5aLfRbb86bbkaHclfhHaOclfhOaCclfhCaQclfhQalaecefge9hmbkdnamcaGTmbaEcwfh8Jcbh8Nindndna5a8NfgyRbbg8Pc9:fPibebekdndndnaAa8Ncdtfydbgea8N9hmbdnaqmbcbhgxdkdnazTmbcbhga8NheinagaqazaecdtgefydbfRbbcdGce4VhgaKaefydbgea8N9hmbxikkcbhga8NheinagaqaefRbbcdGce4VhgaKaecdtfydbgea8N9hmbxdkka5aefRbbhexeka8NheindnaXaecdtgafgeclfydbgHaeydbgeSmbaHae9Rh8AaEaecitfh8MaAaafh8Lcbh8Kina8Ma8KcitfydbgYhednindnaXaecdtgLfgeclfydbgHaeydbgeSmbdnaAaEaecitgOfydbcdtfydba8LydbgQ9hmbcehexikaHae9Rhhaecu7aHfhCa8JaOfhHcbheinaCaeSmeaecefheaHydbhOaHcwfhHaAaOcdtfydbaQ9hmbkaeah6hexdkaKaLfydbgeaY9hmbkcbhekagaece7Vhga8Kcefg8Ka8A9hmbkkaKaafydbgea8N9hmbka8PciagceGEhekayae86bbka8Ncefg8Nal9hmbkkdnaqTmbdndnazTmbazheaAhHalhOindnaqaeydbfRbbceGTmba5aHydbfcl86bbkaeclfheaHclfhHaOcufgOmbxdkkaqheaAhHalhOindnaeRbbceGTmba5aHydbfcl86bbkaecefheaHclfhHaOcufgOmbkkaAhealhOa5hHindna5aeydbfRbbcl9hmbaHcl86bbkaeclfheaHcefhHaOcufgOmbkkamceGTmba5healhHindnaeRbbce9hmbaecl86bbkaecefheaHcufgHmbkkcbhIcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbhaasc:Cefasyd;8egecdtfaaBdbasaecefBd;8easc:qefcbBdbas9cb83i1eaaaialavazasc1efz:ejjjbh8RdndnaDmbcbhycbhCxekcbhCawhecbhHindnaeIdbJbbbb9ETmbasaCcdtfaHBdbaCcefhCkaeclfheaDaHcefgH9hmbkcuaCal2gecdtaecFFFFi0Ecbyd1:jjjbHjjjjbbhyasc:Cefasyd;8egecdtfayBdbasaecefBd;8ealTmbdnaCmbcbhCxekarcd4h8KdnazTmbaCcdthhcbhXayhYinaoazaXcdtfydba8K2cdtfhLasheaYhHaChOinaHaLaeydbcdtgQfIdbawaQfIdbNUdbaeclfheaHclfhHaOcufgOmbkaYahfhYaXcefgXal9hmbxdkkaCcdthhcbhXayhYinaoaXa8K2cdtfhLasheaYhHaChOinaHaLaeydbcdtgQfIdbawaQfIdbNUdbaeclfheaHclfhHaOcufgOmbkaYahfhYaXcefgXal9hmbkkcualc8S2gHalc;D;O;f8U0EgQcbyd1:jjjbHjjjjbbheasc:Cefasyd;8egOcdtfaeBdbasaOcefBd;8eaecbaHz:tjjjbh8ScbhDcbh8KdnaCTmbcbhIaQcbyd1:jjjbHjjjjbbh8Kasc:Cefasyd;8egecdtfa8KBdbasaecefBd;8ea8KcbaHz:tjjjb8AcuaCal2gecltgHaecFFFFb0Ecbyd1:jjjbHjjjjbbhDasc:Cefasyd;8egecdtfaDBdbasaecefBd;8eaDcbaHz:tjjjb8AamcjjjjdGTmbcualcltgealcFFFFb0Ecbyd1:jjjbHjjjjbbhIasc:Cefasyd;8egHcdtfaIBdbasaHcefBd;8eaIcbaez:tjjjb8AkdnadTmbcbhLabhHinaaaHclfydbgXcx2fgeIdbaaaHydbgYcx2fgOIdbgR:tg8UaaaHcwfydbghcx2fgQIdlaOIdlg8V:tg8WNaQIdbaR:tg8XaeIdla8V:tg8YN:tg8Zh80aeIdwaOIdwg81:tgBa8XNaQIdwa81:tg83a8UN:tgUh8Xa8Ya83Na8WaBN:tg8Yh8Udna8Za8ZNa8Ya8YNaUaUNMM:rgBJbbbb9EgOTmba8ZaB:vh80aUaB:vh8Xa8YaB:vh8Uka8SaAaYcdtfydbgQc8S2fgea8UaB:rg8Wa8UNNg85aeIdbMUdbaea8Xa8Wa8XNg86Ng87aeIdlMUdlaea80a8Wa80Ng83Ng88aeIdwMUdwaea86a8UNg86aeIdxMUdxaea83a8UNg89aeIdzMUdzaea83a8XNg8:aeIdCMUdCaea8Ua8Wa80a81Na8UaRNa8Va8XNMM:mgZNg83Ng8UaeIdKMUdKaea8Xa83Ng8XaeId3MUd3aea80a83Ng80aeIdaMUdaaea83aZNg83aeId8KMUd8Kaea8WaeIdyMUdya8SaAaXcdtfydbgXc8S2fgea85aeIdbMUdbaea87aeIdlMUdlaea88aeIdwMUdwaea86aeIdxMUdxaea89aeIdzMUdzaea8:aeIdCMUdCaea8UaeIdKMUdKaea8XaeId3MUd3aea80aeIdaMUdaaea83aeId8KMUd8Kaea8WaeIdyMUdya8SaAahcdtfydbgYc8S2fgea85aeIdbMUdbaea87aeIdlMUdlaea88aeIdwMUdwaea86aeIdxMUdxaea89aeIdzMUdzaea8:aeIdCMUdCaea8UaeIdKMUdKaea8XaeId3MUd3aea80aeIdaMUdaaea83aeId8KMUd8Kaea8WaeIdyMUdydnaITmbdnaOTmba8ZaB:vh8ZaUaB:vhUa8YaB:vh8YkaIaQcltfgeaBJbbbZNg8UaUNg8WaeIdlMUdlaea8Ua8ZNg8XaeIdwMUdwaea8Ua8YNg80aeIdbMUdbaea8UaR:ma8YNaUa8VN:ta81a8ZN:tNg8UaeIdxMUdxaIaXcltfgea8WaeIdlMUdlaea8XaeIdwMUdwaea80aeIdbMUdbaea8UaeIdxMUdxaIaYcltfgea8WaeIdlMUdlaea8XaeIdwMUdwaea80aeIdbMUdbaea8UaeIdxMUdxkaHcxfhHaLcifgLad6mbkkdnalTmbJ;n;m;m89J:v:;;w8ZamczGEh8YcbhOaAhQaahHa8SheindnaOaQydb9hmbaecxfgLaLIdbJbbbbMUdbaeczfgLaLIdbJbbbbMUdbaecCfgLaLIdbJbbbbMUdbaea8YaecyfgLIdbg8ZNg8UaeIdbMUdbaeclfgXa8UaXIdbMUdbaecwfgXa8UaXIdbMUdbaecKfgXaXIdbaHIdbg8Xa8UN:tUdbaHcwfIdbh8Waec3fgXaXIdba8UaHclfIdbg80N:tUdbaecafgXaXIdba8Ua8WN:tUdbaec8KfgXIdbhUaLa8Za8UMUdbaXaUa8Ua8Wa8WNa8Xa8XNa80a80NMMNMUdbkaQclfhQaHcxfhHaec8SfhealaOcefgO9hmbkkdnadTmbcbhhabhYinabahcdtfhXcbhHina5aXaHc:G1jjbfydbcdtfydbgOfRbbhedndna5aYaHfydbgQfRbbgLc99fcFeGcpe0mbaec99fcFeGc;:e6mekdnaLcufcFeGce0mba8EaQcdtfydbaO9hmekdnaecufcFeGce0mba8FaOcdtfydbaQ9hmekJbbacJbbacJbbbZaecFeGceSEaLcFeGceSEh88aaaOcx2fgeIdwaaaQcx2fgLIdwgB:tg80:mh86aeIdlaLIdlg83:tg8Z:mh89aeIdbaLIdbgR:tgU:mh8:dnaaaXaHc:K1jjbfydbcdtfydbcx2fgeIdwaB:tg8Va80a80NaUaUNa8Za8ZNMMg8YNa8Va80NaeIdbaR:tg81aUNa8ZaeIdla83:tg85NMMg8Wa80N:tg8Xa8XNa81a8YNa8WaUN:tg8Ua8UNa85a8YNa8Wa8ZN:tg8Wa8WNMM:rg87Jbbbb9ETmba8Xa87:vh8Xa8Wa87:vh8Wa8Ua87:vh8Uka88a8Y:rNg8Ya8XaBNa8UaRNa83a8WNMM:mgZNg87aZNhZa8Xa87Nhna8Wa87Nhca8Ua87Nh9ca8Ya8XNg87a8WNhJa87a8UNh9ea8Ya8WNgTa8UNhSa8Xa87Nh87a8WaTNhTa8Ua8Ya8UNNh9hdnaUa85Na81a89NMg8Xa8XNa8Za8VNa85a86NMg8Ua8UNa80a81Na8Va8:NMg8Wa8WNMM:rg80Jbbbb9ETmba8Xa80:vh8Xa8Wa80:vh8Wa8Ua80:vh8Uka8SaAaQcdtfydbc8S2fgeaeIdba9ha8Ua88a80:rNg80a8UNNMgUMUdbaeaTa8Wa80a8WNg8VNMg81aeIdlMUdlaea87a8Xa80a8XNg8ZNMg85aeIdwMUdwaeaSa8Va8UNMg8VaeIdxMUdxaea9ea8Za8UNMg87aeIdzMUdzaeaJa8Za8WNMg8ZaeIdCMUdCaea9ca8Ua80a8XaBNa8UaRNa83a8WNMMgB:mNg80NMg8UaeIdKMUdKaeaca8Wa80NMg8WaeId3MUd3aeana8Xa80NMg8XaeIdaMUdaaeaZaBa80N:tg80aeId8KMUd8Kaea8YJbbbbMg8YaeIdyMUdya8SaAaOcdtfydbc8S2fgeaUaeIdbMUdbaea81aeIdlMUdlaea85aeIdwMUdwaea8VaeIdxMUdxaea87aeIdzMUdzaea8ZaeIdCMUdCaea8UaeIdKMUdKaea8WaeId3MUd3aea8XaeIdaMUdaaea80aeId8KMUd8Kaea8YaeIdyMUdykaHclfgHcx9hmbkaYcxfhYahcifghad6mbkaCTmbcbhYinJbbbbh8YaaabaYcdtfgeclfydbghcx2fgHIdwaaaeydbggcx2fgOIdwg81:tg8Wa8WNaHIdbaOIdbg85:tg8Xa8XNaHIdlaOIdlg87:tg80a80NMMgRaaaecwfydbgEcx2fgeIdwa81:tg8ZNa8Wa8Wa8ZNa8XaeIdba85:tgUNa80aeIdla87:tgBNMMg8UN:tJbbbbJbbjZaRa8Za8ZNaUaUNaBaBNMMg8VNa8Ua8UN:tg83:va83Jbbbb9BEg83Nh89a8Va8WNa8Za8UN:ta83Nh8:aRaBNa80a8UN:ta83NhZa8Va80NaBa8UN:ta83NhnaRaUNa8Xa8UN:ta83Nhca8Va8XNaUa8UN:ta83Nh9ca8XaBNaUa80N:tg8Ua8UNa80a8ZNaBa8WN:tg8Ua8UNa8WaUNa8Za8XN:tg8Ua8UNMM:rJbbbZNh8UayagaC2g8LcdtfhHayaEaC2g8JcdtfhOayahaC2g8AcdtfhQa81:mhJa87:mh9ea85:mhTcbhLaChXJbbbbhBJbbbbh83JbbbbhRJbbbbh8VJbbbbh81Jbbbbh85Jbbbbh87Jbbbbh88Jbbbbh86inascjdfaLfgecwfa8Ua8:aQIdbaHIdbg8Z:tg80Na89aOIdba8Z:tgUNMg8WNUdbaeclfa8Uana80NaZaUNMg8XNUdbaea8Ua9ca80NacaUNMg80NUdbaecxfa8UaJa8WNa9ea8XNa8ZaTa80NMMMg8ZNUdba8Ua8Wa8XNNa8VMh8Va8Ua8Wa80NNa81Mh81a8Ua8Xa80NNa85Mh85a8Ua8Za8ZNNa8YMh8Ya8Ua8Wa8ZNNaBMhBa8Ua8Xa8ZNNa83Mh83a8Ua80a8ZNNaRMhRa8Ua8Wa8WNNa87Mh87a8Ua8Xa8XNNa88Mh88a8Ua80a80NNa86Mh86aHclfhHaQclfhQaOclfhOaLczfhLaXcufgXmbka8Kagc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdya8Kahc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdya8KaEc8S2fgea86aeIdbMUdbaea88aeIdlMUdlaea87aeIdwMUdwaea85aeIdxMUdxaea81aeIdzMUdzaea8VaeIdCMUdCaeaRaeIdKMUdKaea83aeId3MUd3aeaBaeIdaMUdaaea8YaeId8KMUd8Kaea8UaeIdyMUdyaDa8LcltfhXcbhHaChQinaXaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaDa8AcltfhXcbhHaChQinaXaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaDa8JcltfhXcbhHaChQinaXaHfgeascjdfaHfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaYcifgYad6mbkkcbhOdndnamcwGg9imbJbbbbhRcbh6cbh9kcbh0xekcbh6a3cbyd1:jjjbHjjjjbbh0asc:Cefasyd;8egecdtfa0BdbasaecefBd;8ecua0alabadaAz:fjjjbgQcltaQcjjjjiGEcbyd1:jjjbHjjjjbbh9kasc:Cefasyd;8egecdtfa9kBdbasaecefBd;8ea9kaQa0aaalz:gjjjbJFFuuhRaQTmba9kheaQhHinaeIdbg8UaRaRa8U9EEhRaeclfheaHcufgHmbkaQh6kasydNeh9mdnalTmba9mclfhea9mydbhQa5hHalhLcbhOincbaeydbgXaQ9RaHRbbcpeGEaOfhOaHcefhHaeclfheaXhQaLcufgLmbkaOce4hOkcuadaO9Rcifg9ncx2a9nc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh9oasc:Cefasyd;8egecdtfa9oBdbasaecefBd;8ecua9ncdta9ncFFFFi0Ecbyd1:jjjbHjjjjbbh9pasc:Cefasyd;8egecdtfa9pBdbasaecefBd;8ea3cbyd1:jjjbHjjjjbbh8Pasc:Cefasyd;8egecdtfa8PBdbasaecefBd;8ealcbyd1:jjjbHjjjjbbh9qasc:Cefasyd;8egecdtfa9qBdbasaecefBd;8eaxaxNa8RJbbjZamclGEgnanN:vh88Jbbbbh86dnadak9nmbdna9nci6mbasyd:yeh9raCclth9sa9ocwfh9tJbbbbh87Jbbbbh86inascNefabadalaAz:cjjjbabhgcbh8Ncbh3inaba3cdtfh8LcbheindnaAagaefydbgOcdtghfydbgQaAa8Laec:W1jjbfydbcdtfydbgHcdtgEfydbgLSmba5aHfRbbgYcv2a5aOfRbbgXfc;a1jjbfRbbg8AaXcv2aYfg8Jc;a1jjbfRbbg8MVcFeGTmbdnaLaQ9nmba8Jc;G1jjbfRbbcFeGmekdnaXcufcFeGce0mbaYTmba8EahfydbaH9hmekdnaXTmbaYcufcFeGce0mba8FaEfydbaO9hmeka9oa8Ncx2fgQaHaOa8McFeGgLEBdlaQaOaHaLEBdbaQaLa8AGcb9hBdwa8Ncefh8Nkaeclfgecx9hmbkdna3cifg3ad9pmbagcxfhga8Ncifa9n9nmekka8NTmdcbh8Jina8SaAa9oa8Jcx2fghydbgLcdtgQfydbggc8S2fgeIdwaaahydlgXcx2fgHIdwg8XNaeIdzaHIdbg80NaeIdaMg8Ua8UMMa8XNaeIdlaHIdlg8ZNaeIdCa8XNaeId3Mg8Ua8UMMa8ZNaeIdba80NaeIdxa8ZNaeIdKMg8Ua8UMMa80NaeId8KMMM:lh8UJbbbbJbbjZaeIdyg8W:va8WJbbbb9BEh8Wdndnahydwg8LmbJFFuuh83xekJbbbbJbbjZa8SaAaXcdtfydbc8S2fgeIdygU:vaUJbbbb9BEaeIdwaaaLcx2fgHIdwgUNaeIdzaHIdbg8YNaeIdaMgBaBMMaUNaeIdlaHIdlgBNaeIdCaUNaeId3MgUaUMMaBNaeIdba8YNaeIdxaBNaeIdKMgUaUMMa8YNaeId8KMMM:lNh83ka8Wa8UNhBdnaCTmba8KaLc8S2fgOIdwa8XNaOIdza80NaOIdaMg8Ua8UMMa8XNaOIdla8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaXaC2gYcdtfhHaDaLaC2gEcltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkdndna8LmbJbbbbh8Wxeka8KaXc8S2fgOIdwaaaLcx2fgeIdwg80NaOIdzaeIdbg8ZNaOIdaMg8Wa8WMMa80NaOIdlaeIdlgUNaOIdCa80NaOId3Mg8Wa8WMMaUNaOIdba8ZNaOIdxaUNaOIdKMg8Wa8WMMa8ZNaOId8KMMMh8WayaEcdtfhHaDaYcltfheaOIdyh8YaChOinaHIdbg8Xa8Xa8YNaecxfIdba80aecwfIdbNa8ZaeIdbNaUaeclfIdbNMMMg8Xa8XM:tNa8WMh8WaHclfhHaeczfheaOcufgOmbka8W:lh8WkaBa8U:lMhBa83a8WMh83dndndna5aLfRbbc9:fPddbekaKaQfydbgQaLSmbaAaXcdtfydbhEindndna8EaQcdtgYfydbgecuSmbaAaecdtfydbaESmekdna8FaYfydbgecuSmbaAaecdtfydbaESmekaXheka8KaQc8S2fgOIdwaaaecx2fgHIdwg8XNaOIdzaHIdbg80NaOIdaMg8Ua8UMMa8XNaOIdlaHIdlg8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaeaC2cdtfhHaDaQaC2cltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkaBa8U:lMhBaKaYfydbgQaL9hmbkka5aXfRbbci9hmea8LTmeaKaXcdtfydbgQaXSmeindndna8EaQcdtgYfydbgecuSmbaAaecdtfydbagSmekdna8FaYfydbgecuSmbaAaecdtfydbagSmekaLheka8KaQc8S2fgOIdwaaaecx2fgHIdwg8XNaOIdzaHIdbg80NaOIdaMg8Ua8UMMa8XNaOIdlaHIdlg8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaeaC2cdtfhHaDaQaC2cltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbka83a8U:lMh83aKaYfydbgQaX9hmbxdkkdna8Fa8Ea8EaQfydbaXSEaKaQfydbgYcdtfydbgQcu9hmbaKaXcdtfydbhQka8KaYc8S2fgOIdwaaaQcx2fgeIdwg8XNaOIdzaeIdbg80NaOIdaMg8Ua8UMMa8XNaOIdlaeIdlg8ZNaOIdCa8XNaOId3Mg8Ua8UMMa8ZNaOIdba80NaOIdxa8ZNaOIdKMg8Ua8UMMa80NaOId8KMMMh8UayaQaC2ggcdtfhHaDaYaC2gEcltfheaOIdyhUaChOinaHIdbg8Wa8WaUNaecxfIdba8XaecwfIdbNa80aeIdbNa8ZaeclfIdbNMMMg8Wa8WM:tNa8UMh8UaHclfhHaeczfheaOcufgOmbkdndna8LmbJbbbbh8Wxeka8KaQc8S2fgOIdwaaaYcx2fgeIdwg80NaOIdzaeIdbg8ZNaOIdaMg8Wa8WMMa80NaOIdlaeIdlgUNaOIdCa80NaOId3Mg8Wa8WMMaUNaOIdba8ZNaOIdxaUNaOIdKMg8Wa8WMMa8ZNaOId8KMMMh8WayaEcdtfhHaDagcltfheaOIdyh8YaChOinaHIdbg8Xa8Xa8YNaecxfIdba80aecwfIdbNa8ZaeIdbNaUaeclfIdbNMMMg8Xa8XM:tNa8WMh8WaHclfhHaeczfheaOcufgOmbka8W:lh8WkaBa8U:lMhBa83a8WMh83kaha83aBa83aB9DgeEUdwahaLaXaea8Lcb9hGgeEBdlahaXaLaeEBdba8Jcefg8Ja8N9hmbkascjdfcbcj;qbz:tjjjb8Aa9thea8NhHinascjdfaeydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbcefBdbaecxfheaHcufgHmbkcbhecbhHinascjdfaefgOydbhQaOaHBdbaQaHfhHaeclfgecj;qb9hmbkcbhea9thHinascjdfaHydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbgOcefBdba9paOcdtfaeBdbaHcxfhHa8Naecefge9hmbkadak9RgOci9Uh9udnalTmbcbhea8PhHinaHaeBdbaHclfhHalaecefge9hmbkkcbh9va9qcbalz:tjjjbh9waOcO9Uh9xa9uce4h9ycbh3cbh8Adnina9oa9pa8Acdtfydbcx2fg8JIdwg8Ua889Emea3a9u9pmeJFFuuh8Wdna9ya8N9pmba9oa9pa9ycdtfydbcx2fIdwJbb;aZNh8Wkdna8Ua8W9ETmba8Ua869ETmba3a9x0mdkdna9waAa8Jydlg8Mcdtg9zfgEydbgQfg9ARbba9waAa8Jydbggcdtg9Bfydbgefg9CRbbVmba5agfRbbh9Ddna9maecdtfgHclfydbgOaHydbgHSmbaOaH9RhLaaaQcx2fhYaaaecx2fhha9raHcitfhecbhHceh8Ldnindna8PaeydbcdtfydbgOaQSmba8PaeclfydbcdtfydbgXaQSmbaOaXSmbaaaXcx2fgXIdbaaaOcx2fgOIdbg8X:tg8UahIdlaOIdlg80:tg8YNahIdba8X:tgBaXIdla80:tg8WN:tg8Za8UaYIdla80:tg83NaYIdba8X:tg8Va8WN:tg80Na8WahIdwaOIdwgU:tg81Na8YaXIdwaU:tg8XN:tg8Ya8WaYIdwaU:tg85Na83a8XN:tg8WNa8XaBNa81a8UN:tgUa8Xa8VNa85a8UN:tg8UNMMa8Za8ZNa8Ya8YNaUaUNMMa80a80Na8Wa8WNa8Ua8UNMMN:rJbbj8:N9FmdkaecwfheaHcefgHaL6h8LaLaH9hmbkka8LceGTmba9ycefh9yxekdndndndna9Dc9:fPdebdkagheinaEydbhOdndna8EaecdtgHfydbgecuSmbaAaecdtfydbaOSmekdna8FaHfydbgecuSmbaAaecdtfydbaOSmeka8Mheka8PaHfaeBdbaKaHfydbgeag9hmbxikkdna8Fa8Ea8Ea9Bfydba8MSEaKa9Bfydbggcdtfydbgecu9hmbaKa9zfydbheka8Pa9Bfa8MBdbaeh8Mka8Pagcdtfa8MBdbka9Cce86bba9Ace86bba8JIdwg8Ua86a86a8U9DEh86a9vcefh9vcecda9DceSEa3fh3ka8Acefg8Aa8N9hmbkka9vTmddnalTmbcbhXcbhhindna8PahcdtgefydbgOahSmbaAaOcdtfydbhgdnahaAaefydb9hgEmba8Sagc8S2fgea8Sahc8S2fgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdyaITmbaIagcltfgeaIahcltfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxkaCTmba8KaOc8S2fgea8Kahc8S2g8LfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya9saO2hYaDhHaChQinaHaYfgeaHaXfgOIdbaeIdbMUdbaeclfgLaOclfIdbaLIdbMUdbaecwfgLaOcwfIdbaLIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaQcufgQmbkaEmbJbbbbJbbjZa8Sa8LfgeIdyg8U:va8UJbbbb9BEaeIdwaaagcx2fgHIdwg8UNaeIdzaHIdbg8WNaeIdaMg8Xa8XMMa8UNaeIdlaHIdlg8XNaeIdCa8UNaeId3Mg8Ua8UMMa8XNaeIdba8WNaeIdxa8XNaeIdKMg8Ua8UMMa8WNaeId8KMMM:lNg8Ua87a87a8U9DEh87kaXa9sfhXahcefghal9hmbkcbhHa8EheindnaeydbgOcuSmbdnaHa8PaOcdtgQfydbgO9hmbcuhOa8EaQfydbgQcuSmba8PaQcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkcbhHa8FheindnaeydbgOcuSmbdnaHa8PaOcdtgQfydbgO9hmbcuhOa8FaQfydbgQcuSmba8PaQcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkka87a86aCEh87cbhHabhecbhOindnaAa8PaeydbcdtfydbgXcdtfydbgQaAa8PaeclfydbcdtfydbgYcdtfydbgLSmbaQaAa8PaecwfydbcdtfydbggcdtfydbghSmbaLahSmbabaHcdtfgQaXBdbaQcwfagBdbaQclfaYBdbaHcifhHkaecxfheaOcifgOad6mbkdndna9imbaHhdxekdnaHak0mbaHhdxekdnaRa879FmbaHhdxekJFFuuhRcbhdabhecbhOindna9ka0aeydbgQcdtfydbcdtfIdbg8Ua879ETmbaeclf8Pdbh9EabadcdtfgLaQBdbaLclfa9E83dba8UaRaRa8U9EEhRadcifhdkaecxfheaOcifgOaH6mbkkadak0mbxdkkascNefabadalaAz:cjjjbkdndnadak0mbadhhxekdna9imbadhhxekdnaRa889FmbadhhxekcehLinaRJbb;aZNg8Ua88a8Ua889DEh8XJbbbbh8Udna6Tmba9khea6hHinaeIdbg8Wa8Ua8Wa8X9FEa8Ua8Wa8U9EEh8UaeclfheaHcufgHmbkkJFFuuhRcbhhabhecbhHindna9ka0aeydbgOcdtfydbcdtfIdbg8Wa8X9ETmbaeclf8Pdbh9EabahcdtfgQaOBdbaQclfa9E83dba8WaRaRa8W9EEhRahcifhhkaecxfheaHcifgHad6mbkdnaLahad9hVceGmbadhhxdka8Ua86a86a8U9DEh86ahak9nmecbhLahhdaRa889FmbkkdnamcjjjjdGTmba9qcbalz:tjjjbh8LdnahTmbabheahhHina8LaeydbgOfce86bba8LaAaOcdtfydbfce86bbaeclfheaHcufgHmbkkascNefabahalaAz:cjjjbdndndnalTmbcbhQasyd:yehEindna8LaQfRbbTmbdna5aQfRbbgecl0mbceaetcQGmekdnaAaQcdtgXfydbgeaQSmbaaaQcx2fgHaaaecx2fge8Pdb83dbaHcwfaecwfydbBdbxeka8SaQc8S2fgLIdyg9ca9cJL:3;rUNg8UMh88aLIdwg9ha8UMhRaLIdlgxa8UMh8VaLIdbg9Fa8UMhUaLIdag9Ga8UaaaQcx2fggIdwg89N:th81aLId3g9Ha8UagIdlg8:N:th85aLIdKg9IagIdbgZa8UN:th8YJbbbbhcaLIdCg9JJbbbbMh87aLIdzg9KJbbbbMhBaLIdxgWJbbbbMh83dndnaCTmbaQhOinJbbbba88a8KaOc8S2fgHIdyg8U:va8UJbbbb9BEh8UaDaOaC2cltfheaHIdaa88Na81Mh81aHId3a88Na85Mh85aHIdKa88Na8YMh8YaHIdCa88Na87Mh87aHIdza88NaBMhBaHIdxa88Na83Mh83aHIdwa88NaRMhRaHIdla88Na8VMh8VaHIdba88NaUMhUaChHina81aecxfIdbg8ZaecwfIdbg8WNa8UN:th81a85a8ZaeclfIdbg8XNa8UN:th85a87a8Wa8XNa8UN:th87aUaeIdbg80a80Na8UN:thUa8Ya8Za80Na8UN:th8YaBa8Wa80Na8UN:thBa83a8Xa80Na8UN:th83aRa8Wa8WNa8UN:thRa8Va8Xa8XNa8UN:th8VaeczfheaHcufgHmbkaKaOcdtfydbgOaQ9hmbkaITmbaIaQcltfgeIdxhSaeIdwhJaeIdlh9eaeIdbh8UxekJbbbbhSJbbbbhJJbbbbh9eJbbbbh8UkaBaU:vg8Xa8YNa81:ta87aBa83aU:vg8WN:tg81a8Va83a8WN:tg8Z:vg80a8Wa8YNa85:tg8VN:th85aJa8Ua8XN:ta9ea8Ua8WN:tg83a80N:tg87aRaBa8XN:ta81a80N:tgB:vgR:mh81a83a8Z:vgJ:mh9ednJbbbba8Ua8UaU:vgTN:ta83aJN:ta87aRN:tg83:la88J:983:g81Ng8U9ETmba81a85Na9ea8VNaTa8YNaS:tMMa83:vhckaU:la8U9ETmba8Z:la8U9ETmbaB:la8U9ETmbaT:macNa8X:ma81acNa85aB:vMgBNa8W:ma9eacNa80:maBNa8Va8Z:vMMg87Na8Y:maU:vMMMh88a9maXfgeclfydbgHaeydbge9RhYaEaecitfhXJbbbbh8UdnaHaeSg8JmbJbbbbh8UaXheaYhOinaaaeclfydbcx2fgHIdwa89:tg8Wa8WNaHIdbaZ:tg8Wa8WNaHIdla8::tg8Wa8WNMMg8Waaaeydbcx2fgHIdwa89:tg8Xa8XNaHIdbaZ:tg8Xa8XNaHIdla8::tg8Xa8XNMMg8Xa8Ua8Ua8X9DEg8Ua8Ua8W9DEh8UaecwfheaOcufgOmbkkaBa89:tg8Wa8WNa88aZ:tg8Wa8WNa87a8::tg8Wa8WNMMa8U:rg8Ua8UN9EmbaLId8Khcdna8JmbcbhOcehLdninaaaXclfydbcx2fgeIdbaaaXydbcx2fgHIdbg8X:tg8Ua8:aHIdlg80:tg8YNaZa8X:tg83aeIdla80:tg8WN:tg8Za8Ua87a80:tgRNa88a8X:tg8Va8WN:tg80Na8Wa89aHIdwgU:tg81Na8YaeIdwaU:tg8XN:tg8Ya8WaBaU:tg85NaRa8XN:tg8WNa8Xa83Na81a8UN:tgUa8Xa8VNa85a8UN:tg8UNMMa8Za8ZNa8Ya8YNaUaUNMMa80a80Na8Wa8WNa8Ua8UNMMN:rJbbj8:N9FmeaXcwfhXaOcefgOaY6hLaYaO9hmbkkaLceGmekJbbbbJbbjZa9c:va9cJbbbb9BEg8Ua9haBNa9Ka88Na9GMg8Wa8WMMaBNaxa87Na9JaBNa9HMg8Wa8WMMa87Na9Fa88NaWa87Na9IMg8Wa8WMMa88NacMMM:lNa8Ua9ha89Na9KaZNa9GMg8Wa8WMMa89Naxa8:Na9Ja89Na9HMg8Wa8WMMa8:Na9FaZNaWa8:Na9IMg8Wa8WMMaZNacMMM:lNJbb;aZNJ:983:g81M9EmbagaBUdwaga87Udlaga88UdbkaQcefgQal9hmbkaCTmecbhLindna8LaLfRbbTmbaAaLcdtgefydbaL9hmba5aLfhEaaaLcx2fhOaKaefh8JayaLaC2cdtfh8AcbhgincuhQdnaERbbci9hmbaLhQa8JydbgeaLSmbayagcdtgHfhXa8AaHfIdbh8UaLhQinaQhHcuhQdnaXaeaC2cdtfIdba8U9CmbaHcuSmbaHhQa8Kaec8S2fIdya8KaHc8S2fIdy9ETmbaehQkaKaecdtfydbgeaL9hmbkkayagcdtfhXaDagcltfhYaLheinaXaeaC2cdtfJbbbbJbbjZa8KaeaQaQcuSEgHc8S2fIdyg8U:va8UJbbbb9BEaYaHaC2cltfgHIdwaOIdwNaHIdbaOIdbNaHIdlaOIdlNMMaHIdxMNUdbaKaecdtfydbgeaL9hmbkagcefggaC9hmbkkaLcefgLalSmixbkkaCmekcbhCkaiavaoarawaCalaaayazasa8Rasc1efa5a8Laqz:hjjjbkdnamcjjjjlGTmbazmbahTmbcbhQabheina5aeydbgAfRbbc3thLaecwfgKydbhHdndna8EaAcdtgYfydbaeclfgXydbgOSmbcbhCa8FaOcdtfydbaA9hmekcjjjj94hCkaeaLaCVaAVBdba5aOfRbbc3thLdndna8EaOcdtfydbaHSmbcbhCa8FaHcdtfydbaO9hmekcjjjj94hCkaXaLaCVaOVBdba5aHfRbbc3thCdndna8EaHcdtfydbaASmbcbhOa8FaYfydbaH9hmekcjjjj94hOkaKaCaOVaHVBdbaecxfheaQcifgQah6mbkkdnazTmbahTmbahheinabazabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPana86:rNUdbkasyd;8egecdtasc:Ceffc98fhHdninaeTmeaHydbcbyd:m:jjjbH:bjjjbbaHc98fhHaecufhexbkkascj;sbf8Kjjjjbahk;Yieouabydlhvabydbclfcbaicdtz:tjjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk:todDue99aicd4aifhrcehwinawgDcethwaDar6mbkcuaDcdtgraDcFFFFi0Ecbyd1:jjjbHjjjjbbhwaoaoyd9GgqcefBd9GaoaqcdtfawBdbawcFearz:tjjjbhkdnaiTmbalcd4hlaDcufhxcbhminamhDdnavTmbavamcdtfydbhDkcbadaDal2cdtfgDydlgwawcjjjj94SEgwcH4aw7c:F:b:DD2cbaDydbgwawcjjjj94SEgwcH4aw7c;D;O:B8J27cbaDydwgDaDcjjjj94SEgDcH4aD7c:3F;N8N27axGhwamcdthPdndndnavTmbakawcdtfgrydbgDcuSmeadavaPfydbal2cdtfgsIdbhzcehqinaqhrdnadavaDcdtfydbal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmlkarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbxdkkakawcdtfgrydbgDcuSmbadamal2cdtfgsIdbhzcehqinaqhrdnadaDal2cdtfgqIdbaz9CmbaqIdlasIdl9CmbaqIdwasIdw9BmikarcefhqakawarfaxGgwcdtfgrydbgDcu9hmbkkaramBdbamhDkabaPfaDBdbamcefgmai9hmbkkakcbyd:m:jjjbH:bjjjbbaoaoyd9GcufBd9GdnaeTmbaiTmbcbhDaehwinawaDBdbawclfhwaiaDcefgD9hmbkcbhDaehwindnaDabydbgrSmbawaearcdtfgrydbBdbaraDBdbkawclfhwabclfhbaiaDcefgD9hmbkkk:hrdvuv998Jjjjjbca9Rgoczfcwfcbyd11jjbBdbaocb8Pdj1jjb83izaocwfcbydN1jjbBdbaocb8Pd:m1jjb83ibdnadTmbaicd4hrdnabmbdnalTmbcbhwinaealawcdtfydbar2cdtfhDcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxikkarcdthwcbhDincbhiinaoczfaifgqaeaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaeawfheaDcefgDad9hmbxdkkdnalTmbcbhwinabawcx2fgiaealawcdtfydbar2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkawcefgwad9hmbxdkkarcdthlcbhwaehDinabawcx2fgiaeawar2cdtfgqIdbUdbaiaqIdlUdlaiaqIdwUdwcbhiinaoczfaifgqaDaifIdbgkaqIdbgxaxak9EEUdbaoaifgqakaqIdbgxaxak9DEUdbaiclfgicx9hmbkaDalfhDawcefgwad9hmbkkJbbbbaoIdbaoIdzgx:tgkakJbbbb9DEgkaoIdlaoIdCgm:tgPaPak9DEgkaoIdwaoIdKgP:tgsasak9DEhsdnabTmbadTmbJbbbbJbbjZas:vasJbbbb9BEhkinabakabIdbax:tNUdbabclfgoakaoIdbam:tNUdbabcwfgoakaoIdbaP:tNUdbabcxfhbadcufgdmbkkdnavTmbavaPUdwavamUdlavaxUdbkask:ZlewudnaeTmbcbhvabhoinaoavBdbaoclfhoaeavcefgv9hmbkkdnaiTmbcbhrinadarcdtfhwcbhDinalawaDcdtgvc:G1jjbfydbcdtfydbcdtfydbhodnabalawavfydbcdtfydbgqcdtfgkydbgvaqSmbinakabavgqcdtfgxydbgvBdbaxhkaqav9hmbkkdnabaocdtfgkydbgvaoSmbinakabavgocdtfgxydbgvBdbaxhkaoav9hmbkkdnaqaoSmbabaqaoaqao0Ecdtfaqaoaqao6EBdbkaDcefgDci9hmbkarcifgrai6mbkkdnaembcbskcbhxindnalaxcdtgvfydbax9hmbaxhodnabavfgDydbgvaxSmbaDhqinaqabavgocdtfgkydbgvBdbakhqaoav9hmbkkaDaoBdbkaxcefgxae9hmbkcbhvabhocbhkindndnavalydbgq9hmbdnavaoydbgq9hmbaoakBdbakcefhkxdkaoabaqcdtfydbBdbxekaoabaqcdtfydbBdbkaoclfhoalclfhlaeavcefgv9hmbkakk;Jiilud99duabcbaecltz:tjjjbhvdnalTmbadhoaihralhwinarcwfIdbhDarclfIdbhqavaoydbcltfgkarIdbakIdbMUdbakclfgxaqaxIdbMUdbakcwfgxaDaxIdbMUdbakcxfgkakIdbJbbjZMUdbaoclfhoarcxfhrawcufgwmbkkdnaeTmbavhraehkinarcxfgoIdbhDaocbBdbararIdbJbbbbJbbjZaD:vaDJbbbb9BEgDNUdbarclfgoaDaoIdbNUdbarcwfgoaDaoIdbNUdbarczfhrakcufgkmbkkdnalTmbinavadydbcltfgrcxfgkaicwfIdbarcwfIdb:tgDaDNaiIdbarIdb:tgDaDNaiclfIdbarclfIdb:tgDaDNMMgDakIdbgqaqaD9DEUdbadclfhdaicxfhialcufglmbkkdnaeTmbavcxfhrinabarIdbUdbarczfhrabclfhbaecufgembkkk:moerudnaoTmbaecd4hzdnavTmbaicd4hHavcdthOcbhAindnaPaAfRbbTmbaAhednaDTmbaDaAcdtfydbhekdnasTmbasaefRbbceGmekdnamaAfRbbclSmbabaeaz2cdtfgiaraAcx2fgCIdbakNaxIdbMUdbaiaCIdlakNaxIdlMUdlaiaCIdwakNaxIdwMUdwkadaeaH2cdtfhXaqheawhiavhCinaXaeydbcdtgQfaiIdbalaQfIdb:vUdbaeclfheaiclfhiaCcufgCmbkkawaOfhwaAcefgAao9hmbxdkkdnasmbcbheaDhiindnaPaefRbbTmbaehCdnaDTmbaiydbhCkamaefRbbclSmbabaCaz2cdtfgCarIdbakNaxIdbMUdbaCarclfIdbakNaxIdlMUdlaCarcwfIdbakNaxIdwMUdwkaiclfhiarcxfhraoaecefge9hmbxdkkdnaDTmbindnaPRbbTmbasaDydbgefRbbceGmbamRbbclSmbabaeaz2cdtfgearIdbakNaxIdbMUdbaearclfIdbakNaxIdlMUdlaearcwfIdbakNaxIdwMUdwkaPcefhPaDclfhDamcefhmarcxfhraocufgombxdkkazcdthicbheindnaPaefRbbTmbasaefRbbceGmbamaefRbbclSmbabarIdbakNaxIdbMUdbabclfarclfIdbakNaxIdlMUdbabcwfarcwfIdbakNaxIdwMUdbkarcxfhrabaifhbaoaecefge9hmbkkk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbkRbababaeadaialavaoarawaDaqakaxcjjjjdVamz:bjjjbk:d8Koque99due99duq998Jjjjjbc;Wb9Rgq8Kjjjjbcbhkaqcxfcbc;Kbz:tjjjb8Aaqcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgxBdxaqceBd2axaialavcbcbz:ejjjb8AaqcualcdtalcFFFFi0Egmcbyd1:jjjbHjjjjbbgiBdzaqcdBd2dndnJFF959eJbbjZawJbbjZawJbbjZ9DE:vawJ9VO:d869DEgw:lJbbb9p9DTmbaw:OhPxekcjjjj94hPkadci9Uhsarco9UhzdndnaombaPcd9imekdnalTmbaPcuf:YhwdnaoTmbcbhvaihHaxhOindndnaoavfRbbceGTmbavcjjjjlVhAxekdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHaOcxfhOalavcefgv9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkadTmbcbhkaehvcbhOinakaiavclfydbcdtfydbgHaiavcwfydbcdtfydbgA9haiavydbcdtfydbgXaH9haXaA9hGGfhkavcxfhvaOcifgOad6mbkkarci9UhQdndnaz:Z:rJbbbZMgw:lJbbb9p9DTmbaw:Ohvxekcjjjj94hvkaQ:ZhLcbhKc:bwhzdninakaQ9pmeazaP9Rcd9imeavazcufavaz9iEaPcefavaP9kEhYdnalTmbaYcuf:YhwdnaoTmbcbhOaihHaxhvindndnaoaOfRbbceGTmbaOcjjjjlVhAxekdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcqthAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXVhAdndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaAaXcCtVhAkaHaABdbaHclfhHavcxfhvalaOcefgO9hmbxdkkaxhvaihOalhHindndnavIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhAxekcjjjj94hAkaAcCthAdndnavclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqtaAVhAdndnavcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaOaAaXVBdbavcxfhvaOclfhOaHcufgHmbkkcbhOdnadTmbaehvcbhHinaOaiavclfydbcdtfydbgAaiavcwfydbcdtfydbgX9haiavydbcdtfydbgraA9haraX9hGGfhOavcxfhvaHcifgHad6mbkkJbbbbh8Adnas:ZgCaL:taY:Ygwaz:Y:tgENak:Zg3aO:Zg5:tNa3aL:tawaP:Y:tg8ENa5aC:tNMg8FJbbbb9BmbaCa3:ta8EaEa5aL:tNNNa8F:vh8AkdndnaOaQ0mbaOhkaYhPxekaOhsaYhzkdndnaKcl0mbdna8AawMJbbbZMgw:lJbbb9p9DTmbaw:Ohvxdkcjjjj94hvxekaPazfcd9ThvkaKcefgKcs9hmbkkdndndnakmbJbbjZhwcbhicdhvaDmexdkalcd4alfhHcehOinaOgvcethOavaH6mbkcbhOaqcuavcdtgYavcFFFFi0Ecbyd1:jjjbHjjjjbbgKBdCaqciBd2aqamcbyd1:jjjbHjjjjbbgzBdKaqclBd2dndndndnalTmbaPcuf:YhwaoTmecbhOaihAaxhHindndnaoaOfRbbceGTmbaOcjjjjlVhXxekdndnaHclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcqthXdndnaHcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarVhXdndnaHIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaXarcCtVhXkaAaXBdbaAclfhAaHcxfhHalaOcefgO9hmbxikkaKcFeaYz:tjjjb8AcbhPcbhvxdkaxhOaihHalhAindndnaOIdbawNJbbbZMgC:lJbbb9p9DTmbaC:OhXxekcjjjj94hXkaXcCthXdndnaOclfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkarcqtaXVhXdndnaOcwfIdbawNJbbbZMgC:lJbbb9p9DTmbaC:Ohrxekcjjjj94hrkaHaXarVBdbaOcxfhOaHclfhHaAcufgAmbkkaKcFeaYz:tjjjbhravcufhocbhPcbhYindndndnaraiaYcdtgKfydbgAcm4aA7c:v;t;h;Ev2gvcs4av7aoGgHcdtfgXydbgOcuSmbcehvinaiaOcdtgOfydbaASmdaHavfhOavcefhvaraOaoGgHcdtfgXydbgOcu9hmbkkaXaYBdbaPhvaPcefhPxekazaOfydbhvkazaKfavBdbaYcefgYal9hmbkcuaPc8S2gOaPc;D;O;f8U0Ehvkcbhraqavcbyd1:jjjbHjjjjbbgvBd3aqcvBd2avcbaOz:tjjjbhOdnadTmbaehiinJbbnnJbbjZazaiydbgAcdtfydbgvazaiclfydbgHcdtfydbgYSavazaicwfydbgXcdtfydbgKSGgoEh8EdnaxaHcx2fgHIdbaxaAcx2fgAIdbg5:tgCaxaXcx2fgXIdlaAIdlg8A:tgwNaXIdba5:tg3aHIdla8A:tg8FN:tgLaLNa8FaXIdwaAIdwgE:tgaNawaHIdwaE:tg8FN:tgwawNa8Fa3NaaaCN:tgCaCNMM:rg3Jbbbb9ETmbaLa3:vhLaCa3:vhCawa3:vhwkaOavc8S2fgvavIdbawa8Ea3:rNg3awNNg8FMUdbavaCa3aCNgaNghavIdlMUdlavaLa3aLNg8ENggavIdwMUdwavaaawNgaavIdxMUdxava8EawNg8JavIdzMUdzava8EaCNg8EavIdCMUdCavawa3aLaENawa5Na8AaCNMM:mg8ANg5NgwavIdKMUdKavaCa5NgCavId3MUd3avaLa5NgLavIdaMUdaava5a8ANg5avId8KMUd8Kava3avIdyMUdydnaombaOaYc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava5avId8KMUd8Kava3avIdyMUdyaOaKc8S2fgva8FavIdbMUdbavahavIdlMUdlavagavIdwMUdwavaaavIdxMUdxava8JavIdzMUdzava8EavIdCMUdCavawavIdKMUdKavaCavId3MUd3avaLavIdaMUdaava5avId8KMUd8Kava3avIdyMUdykaicxfhiarcifgrad6mbkkcbhAaqcuaPcdtgvaPcFFFFi0Egicbyd1:jjjbHjjjjbbgHBdaaqcoBd2aqaicbyd1:jjjbHjjjjbbgiBd8KaqcrBd2aHcFeavz:tjjjbhYdnalTmbazhHinJbbbbJbbjZaOaHydbgXc8S2fgvIdygw:vawJbbbb9BEavIdwaxcwfIdbgwNavIdzaxIdbgCNavIdaMgLaLMMawNavIdlaxclfIdbgLNavIdCawNavId3MgwawMMaLNavIdbaCNavIdxaLNavIdKMgwawMMaCNavId8KMMM:lNhwdndnaYaXcdtgvfgXydbcuSmbaiavfIdbaw9ETmekaXaABdbaiavfawUdbkaHclfhHaxcxfhxalaAcefgA9hmbkkJbbbbhwdnaPTmbinaiIdbgCawawaC9DEhwaiclfhiaPcufgPmbkkakcd4akfhOcehiinaigvcethiavaO6mbkcbhiaqcuavcdtgOavcFFFFi0Ecbyd1:jjjbHjjjjbbgHBdyaHcFeaOz:tjjjbhXdnadTmbavcufhrcbhPcbhxindnazaeaxcdtfgvydbcdtfydbgiazavclfydbcdtfydbgOSmbaiazavcwfydbcdtfydbgvSmbaOavSmbaYavcdtfydbhAdndnaYaOcdtfydbgvaYaicdtfydbgi9pmbavaA9pmbaAhlaihoavhAxekdnaAai9pmbaAav9pmbaihlavhoxekavhlaAhoaihAkabaPcx2fgvaABdbavcwfaoBdbavclfalBdbdnaXaoc:3F;N8N2alc:F:b:DD27aAc;D;O:B8J27arGgOcdtfgvydbgicuSmbcehHinaHhvdnabaicx2fgiydbaA9hmbaiydlal9hmbaiydwaoSmikavcefhHaXaOavfarGgOcdtfgvydbgicu9hmbkkavaPBdbaPcefhPkaxcifgxad6mbkaPci2hikdnaDmbcwhvxdkaw:rhwcwhvkaDawUdbkavcdthvdninavTmeavc98fgvaqcxffydbcbyd:m:jjjbH:bjjjbbxbkkaqc;Wbf8Kjjjjbaik:2ldwue9:8Jjjjjbc;Wb9Rgr8Kjjjjbcbhwarcxfcbc;Kbz:tjjjb8AdnabaeSmbabaeadcdtzMjjjb8AkarcualcdtalcFFFFi0EgDcbyd1:jjjbHjjjjbbgqBdxarceBd2aqcbaialavcbarcxfz:djjjbcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbhkarcxfaryd2gxcdtgmfakBdbaraxcefgPBd2akaialavcbcbz:ejjjb8AarcxfaPcdtfaDcbyd1:jjjbHjjjjbbgvBdbaraxcdfgiBd2arcxfaicdtfcuavalaeadaqz:fjjjbgecltaecjjjjiGEcbyd1:jjjbHjjjjbbgiBdbaiaeavakalz:gjjjbdnadTmbaoaoNhocbhwabhlcbhkindnaiavalydbgecdtfydbcdtfIdbao9ETmbalclf8PdbhsabawcdtfgqaeBdbaqclfas83dbawcifhwkalcxfhlakcifgkad6mbkkaxcifhlamarcxffcwfhkdninalTmeakydbcbyd:m:jjjbH:bjjjbbakc98fhkalcufhlxbkkarc;Wbf8Kjjjjbawk:XCoDud99vue99vuo998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:tjjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgqBdxawceBd2aqaeadaicbcbz:ejjjb8AawcuadcdtadcFFFFi0Egkcbyd1:jjjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd1:jjjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhDcbhCadhXcbhQinaeaDcufaeaD9iEaPcefaeaP9kEhLdndnadTmbaLcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMgK:lJbbb9p9DTmbaK:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaONJbbbZMgK:lJbbb9p9DTmbaK:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbh3cbh5indnaEaxa5cdtfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbaeaYSmbcehiinaEamaifaAGgmcdtfg8AydbgecuSmeaicefhiaeaY9hmbkka8AaYBdba3aecuSfh3a5cefg5ad9hmbxdkkazcFeasz:tjjjb8Acbh3kJbbbbh8EdnaX:ZgKaH:taL:YgOaD:Y:tg8FNaC:Zgaa3:Zgh:tNaaaH:taOaP:Y:tggNahaK:tNMg8JJbbbb9BmbaKaa:taga8FahaH:tNNNa8J:vh8EkaPaLa3ar0giEhPaCa3aiEhCdna3arSmbaLaDaiEgDaP9Rcd9imbdndnaQcl0mbdna8EaOMJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPaDfcd9Theka3aXaiEhXaQcefgQcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd1:jjjbHjjjjbbg5BdKawclBd2aPcuf:YhKdndnadTmbaqhiaxheadhmindndnaiIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:OhYxekcjjjj94hYkaYcCthYdndnaiclfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8Aka8AcqtaYVhYdndnaicwfIdbaKNJbbbZMgO:lJbbb9p9DTmbaO:Oh8Axekcjjjj94h8AkaeaYa8AVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:tjjjbhEcbhDcbh3indndndnaEaxa3cdtgLfydbgYcm4aY7c:v;t;h;Ev2gics4ai7aAGgmcdtfg8AydbgecuSmbcehiinaxaecdtgefydbaYSmdamaifheaicefhiaEaeaAGgmcdtfg8Aydbgecu9hmbkka8Aa3BdbaDhiaDcefhDxeka5aefydbhika5aLfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:tjjjb8AcbhDcbhekawaecbyd1:jjjbHjjjjbbgeBd3awcvBd2aecbaiz:tjjjbh8Aavcd4hxdnadTmbdnalTmbaxcdthEa5hYaqhealhmadhAina8AaYydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiamIdbaiIdxMUdxaiamclfIdbaiIdzMUdzaiamcwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaYclfhYaecxfheamaEfhmaAcufgAmbxdkka5hmaqheadhYina8Aamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaYcufgYmbkkdnaDTmba8AhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhYawcuaDcdtgLaDcFFFFi0Egicbyd1:jjjbHjjjjbbgeBdaawcoBd2awaicbyd1:jjjbHjjjjbbgEBd8KaecFeaLz:tjjjbh3dnadTmbJbbjZJbbjZaK:vaPceSEaoNgOaONhKaxcdthxalheinaKaec;81jjbalEgmIdwa8Aa5ydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndna3aAcdtgifgmydbcuSmbaEaifIdbaO9ETmekamaYBdbaEaifaOUdbka5clfh5aqcxfhqaeaxfheadaYcefgY9hmbkkaba3aLzMjjjb8AcrhikaicdthiinaiTmeaic98fgiawcxffydbcbyd:m:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Ydidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgvaDIdbgoaoav9EEUdbaladfgDavaDIdbgoaoav9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkJbbbbavavJbbbb9DEgvaoaoav9DEgvararav9DEk9DeeuabcFeaicdtz:tjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;7idqui998Jjjjjbc;Wb9Rgl8Kjjjjbalcxfcbc;Kbz:tjjjb8Aadcd4adfhvcehoinaogrcethoarav6mbkalcuarcdtgoarcFFFFi0Ecbyd1:jjjbHjjjjbbgvBdxavcFeaoz:tjjjbhwdnadTmbaicd4hDarcufhqcbhkindndnawcbaeakaD2cdtfgrydlgiaicjjjj94SEgocH4ao7c:F:b:DD2cbarydbgxaxcjjjj94SEgocH4ao7c;D;O:B8J27cbarydwgmamcjjjj94SEgrcH4ar7c:3F;N8N27aqGgvcdtfgrydbgocuSmbam::hPai::hsax::hzcehiinaihrdnaeaoaD2cdtfgiIdbaz9CmbaiIdlas9CmbaiIdwaP9BmikarcefhiawavarfaqGgvcdtfgrydbgocu9hmbkkarakBdbakhokabakcdtfaoBdbakcefgkad9hmbkkcbhrdninarc98Smealcxfarfydbcbyd:m:jjjbH:bjjjbbarc98fhrxbkkalc;Wbf8Kjjjjbk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd:q:jjjbge9Rcifc98GaefgbBd:q:jjjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akkk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbeeeeeebebbeeebeebbbbebebbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:GNbb'; // embed! wasm\n\n\tvar wasmpack = new Uint8Array([\n\t\t32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67,\n\t\t24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115,\n\t]);\n\n\tif (typeof WebAssembly !== 'object') {\n\t\treturn {\n\t\t\tsupported: false,\n\t\t};\n\t}\n\n\tvar instance;\n\n\tvar ready = WebAssembly.instantiate(unpack(wasm), {}).then(function (result) {\n\t\tinstance = result.instance;\n\t\tinstance.exports.__wasm_call_ctors();\n\t});\n\n\tfunction unpack(data) {\n\t\tvar result = new Uint8Array(data.length);\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tvar ch = data.charCodeAt(i);\n\t\t\tresult[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;\n\t\t}\n\t\tvar write = 0;\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tresult[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n\t\t}\n\t\treturn result.buffer.slice(0, write);\n\t}\n\n\tfunction assert(cond) {\n\t\tif (!cond) {\n\t\t\tthrow new Error('Assertion failed');\n\t\t}\n\t}\n\n\tfunction bytes(view) {\n\t\treturn new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n\t}\n\n\tfunction genremap(fun, positions, vertices, stride) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar rp = sbrk(vertices * 4);\n\t\tvar sp = sbrk(vertices * stride * 4);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(positions), sp);\n\t\tfun(rp, sp, vertices, stride * 4);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar remap = new Uint32Array(vertices);\n\t\tnew Uint8Array(remap.buffer).set(heap.subarray(rp, rp + vertices * 4));\n\t\tsbrk(rp - sbrk(0));\n\t\treturn remap;\n\t}\n\n\tfunction reorder(fun, indices, vertices) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar ip = sbrk(indices.length * 4);\n\t\tvar rp = sbrk(vertices * 4);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar indices8 = bytes(indices);\n\t\theap.set(indices8, ip);\n\t\tvar unique = fun(rp, ip, indices.length, vertices);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar remap = new Uint32Array(vertices);\n\t\tnew Uint8Array(remap.buffer).set(heap.subarray(rp, rp + vertices * 4));\n\t\tindices8.set(heap.subarray(ip, ip + indices.length * 4));\n\t\tsbrk(ip - sbrk(0));\n\n\t\tfor (var i = 0; i < indices.length; ++i) indices[i] = remap[indices[i]];\n\n\t\treturn [remap, unique];\n\t}\n\n\tfunction maxindex(source) {\n\t\tvar result = 0;\n\t\tfor (var i = 0; i < source.length; ++i) {\n\t\t\tvar index = source[i];\n\t\t\tresult = result < index ? index : result;\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction simplify(fun, indices, index_count, vertex_positions, vertex_count, vertex_positions_stride, target_index_count, target_error, options) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar te = sbrk(4);\n\t\tvar ti = sbrk(index_count * 4);\n\t\tvar sp = sbrk(vertex_count * vertex_positions_stride);\n\t\tvar si = sbrk(index_count * 4);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), sp);\n\t\theap.set(bytes(indices), si);\n\t\tvar result = fun(ti, si, index_count, sp, vertex_count, vertex_positions_stride, target_index_count, target_error, options, te);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar target = new Uint32Array(result);\n\t\tbytes(target).set(heap.subarray(ti, ti + result * 4));\n\t\tvar error = new Float32Array(1);\n\t\tbytes(error).set(heap.subarray(te, te + 4));\n\t\tsbrk(te - sbrk(0));\n\t\treturn [target, error[0]];\n\t}\n\n\tfunction simplifyAttr(\n\t\tfun,\n\t\tindices,\n\t\tindex_count,\n\t\tvertex_positions,\n\t\tvertex_count,\n\t\tvertex_positions_stride,\n\t\tvertex_attributes,\n\t\tvertex_attributes_stride,\n\t\tattribute_weights,\n\t\tvertex_lock,\n\t\ttarget_index_count,\n\t\ttarget_error,\n\t\toptions\n\t) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar te = sbrk(4);\n\t\tvar ti = sbrk(index_count * 4);\n\t\tvar sp = sbrk(vertex_count * vertex_positions_stride);\n\t\tvar sa = sbrk(vertex_count * vertex_attributes_stride);\n\t\tvar sw = sbrk(attribute_weights.length * 4);\n\t\tvar si = sbrk(index_count * 4);\n\t\tvar vl = vertex_lock ? sbrk(vertex_count) : 0;\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), sp);\n\t\theap.set(bytes(vertex_attributes), sa);\n\t\theap.set(bytes(attribute_weights), sw);\n\t\theap.set(bytes(indices), si);\n\t\tif (vertex_lock) {\n\t\t\theap.set(bytes(vertex_lock), vl);\n\t\t}\n\t\tvar result = fun(\n\t\t\tti,\n\t\t\tsi,\n\t\t\tindex_count,\n\t\t\tsp,\n\t\t\tvertex_count,\n\t\t\tvertex_positions_stride,\n\t\t\tsa,\n\t\t\tvertex_attributes_stride,\n\t\t\tsw,\n\t\t\tattribute_weights.length,\n\t\t\tvl,\n\t\t\ttarget_index_count,\n\t\t\ttarget_error,\n\t\t\toptions,\n\t\t\tte\n\t\t);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar target = new Uint32Array(result);\n\t\tbytes(target).set(heap.subarray(ti, ti + result * 4));\n\t\tvar error = new Float32Array(1);\n\t\tbytes(error).set(heap.subarray(te, te + 4));\n\t\tsbrk(te - sbrk(0));\n\t\treturn [target, error[0]];\n\t}\n\n\tfunction simplifyUpdate(\n\t\tfun,\n\t\tindices,\n\t\tindex_count,\n\t\tvertex_positions,\n\t\tvertex_count,\n\t\tvertex_positions_stride,\n\t\tvertex_attributes,\n\t\tvertex_attributes_stride,\n\t\tattribute_weights,\n\t\tvertex_lock,\n\t\ttarget_index_count,\n\t\ttarget_error,\n\t\toptions\n\t) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar te = sbrk(4);\n\t\tvar sp = sbrk(vertex_count * vertex_positions_stride);\n\t\tvar sa = sbrk(vertex_count * vertex_attributes_stride);\n\t\tvar sw = sbrk(attribute_weights.length * 4);\n\t\tvar si = sbrk(index_count * 4);\n\t\tvar vl = vertex_lock ? sbrk(vertex_count) : 0;\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), sp);\n\t\theap.set(bytes(vertex_attributes), sa);\n\t\theap.set(bytes(attribute_weights), sw);\n\t\theap.set(bytes(indices), si);\n\t\tif (vertex_lock) {\n\t\t\theap.set(bytes(vertex_lock), vl);\n\t\t}\n\t\tvar result = fun(\n\t\t\tsi,\n\t\t\tindex_count,\n\t\t\tsp,\n\t\t\tvertex_count,\n\t\t\tvertex_positions_stride,\n\t\t\tsa,\n\t\t\tvertex_attributes_stride,\n\t\t\tsw,\n\t\t\tattribute_weights.length,\n\t\t\tvl,\n\t\t\ttarget_index_count,\n\t\t\ttarget_error,\n\t\t\toptions,\n\t\t\tte\n\t\t);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tbytes(indices).set(heap.subarray(si, si + result * 4));\n\t\tbytes(vertex_positions).set(heap.subarray(sp, sp + vertex_count * vertex_positions_stride));\n\t\tbytes(vertex_attributes).set(heap.subarray(sa, sa + vertex_count * vertex_attributes_stride));\n\t\tvar error = new Float32Array(1);\n\t\tbytes(error).set(heap.subarray(te, te + 4));\n\t\tsbrk(te - sbrk(0));\n\t\treturn [result, error[0]];\n\t}\n\n\tfunction simplifyScale(fun, vertex_positions, vertex_count, vertex_positions_stride) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar sp = sbrk(vertex_count * vertex_positions_stride);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), sp);\n\t\tvar result = fun(sp, vertex_count, vertex_positions_stride);\n\t\tsbrk(sp - sbrk(0));\n\t\treturn result;\n\t}\n\n\tfunction simplifyPoints(\n\t\tfun,\n\t\tvertex_positions,\n\t\tvertex_count,\n\t\tvertex_positions_stride,\n\t\tvertex_colors,\n\t\tvertex_colors_stride,\n\t\tcolor_weight,\n\t\ttarget_vertex_count\n\t) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar ti = sbrk(target_vertex_count * 4);\n\t\tvar sp = sbrk(vertex_count * vertex_positions_stride);\n\t\tvar sc = sbrk(vertex_count * vertex_colors_stride);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), sp);\n\t\tif (vertex_colors) {\n\t\t\theap.set(bytes(vertex_colors), sc);\n\t\t}\n\t\tvar result = fun(ti, sp, vertex_count, vertex_positions_stride, sc, vertex_colors_stride, color_weight, target_vertex_count);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar target = new Uint32Array(result);\n\t\tbytes(target).set(heap.subarray(ti, ti + result * 4));\n\t\tsbrk(ti - sbrk(0));\n\t\treturn target;\n\t}\n\n\tfunction simplifySloppy(\n\t\tfun,\n\t\tindices,\n\t\tindex_count,\n\t\tvertex_positions,\n\t\tvertex_count,\n\t\tvertex_positions_stride,\n\t\tvertex_lock,\n\t\ttarget_index_count,\n\t\ttarget_error\n\t) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar te = sbrk(4);\n\t\tvar ti = sbrk(index_count * 4);\n\t\tvar sp = sbrk(vertex_count * vertex_positions_stride);\n\t\tvar si = sbrk(index_count * 4);\n\t\tvar vl = vertex_lock ? sbrk(vertex_count) : 0;\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), sp);\n\t\theap.set(bytes(indices), si);\n\t\tif (vertex_lock) {\n\t\t\theap.set(bytes(vertex_lock), vl);\n\t\t}\n\t\tvar result = fun(ti, si, index_count, sp, vertex_count, vertex_positions_stride, vl, target_index_count, target_error, te);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar target = new Uint32Array(result);\n\t\tbytes(target).set(heap.subarray(ti, ti + result * 4));\n\t\tvar error = new Float32Array(1);\n\t\tbytes(error).set(heap.subarray(te, te + 4));\n\t\tsbrk(te - sbrk(0));\n\t\treturn [target, error[0]];\n\t}\n\n\tfunction simplifyPrune(fun, indices, index_count, vertex_positions, vertex_count, vertex_positions_stride, target_error) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar ti = sbrk(index_count * 4);\n\t\tvar sp = sbrk(vertex_count * vertex_positions_stride);\n\t\tvar si = sbrk(index_count * 4);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), sp);\n\t\theap.set(bytes(indices), si);\n\t\tvar result = fun(ti, si, index_count, sp, vertex_count, vertex_positions_stride, target_error);\n\t\t// heap may have grown\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\t\tvar target = new Uint32Array(result);\n\t\tbytes(target).set(heap.subarray(ti, ti + result * 4));\n\t\tsbrk(ti - sbrk(0));\n\t\treturn target;\n\t}\n\n\tvar simplifyOptions = {\n\t\tLockBorder: 1,\n\t\tSparse: 2,\n\t\tErrorAbsolute: 4,\n\t\tPrune: 8,\n\t\tRegularize: 16,\n\t\tPermissive: 32,\n\t\t_InternalDebug: 1 << 30, // internal, don't use!\n\t};\n\n\treturn {\n\t\tready: ready,\n\t\tsupported: true,\n\n\t\tcompactMesh: function (indices) {\n\t\t\tassert(\n\t\t\t\tindices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array\n\t\t\t);\n\t\t\tassert(indices.length % 3 == 0);\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\t\t\treturn reorder(instance.exports.meshopt_optimizeVertexFetchRemap, indices32, maxindex(indices) + 1);\n\t\t},\n\n\t\tgeneratePositionRemap: function (vertex_positions, vertex_positions_stride) {\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\n\t\t\treturn genremap(\n\t\t\t\tinstance.exports.meshopt_generatePositionRemap,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride\n\t\t\t);\n\t\t},\n\n\t\tsimplify: function (indices, vertex_positions, vertex_positions_stride, target_index_count, target_error, flags) {\n\t\t\tassert(\n\t\t\t\tindices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array\n\t\t\t);\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(target_index_count >= 0 && target_index_count <= indices.length);\n\t\t\tassert(target_index_count % 3 == 0);\n\t\t\tassert(target_error >= 0);\n\n\t\t\tvar options = 0;\n\t\t\tfor (var i = 0; i < (flags ? flags.length : 0); ++i) {\n\t\t\t\tassert(flags[i] in simplifyOptions);\n\t\t\t\toptions |= simplifyOptions[flags[i]];\n\t\t\t}\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\t\t\tvar result = simplify(\n\t\t\t\tinstance.exports.meshopt_simplify,\n\t\t\t\tindices32,\n\t\t\t\tindices.length,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\ttarget_index_count,\n\t\t\t\ttarget_error,\n\t\t\t\toptions\n\t\t\t);\n\t\t\tresult[0] = indices instanceof Uint32Array ? result[0] : new indices.constructor(result[0]);\n\n\t\t\treturn result;\n\t\t},\n\n\t\tsimplifyWithAttributes: function (\n\t\t\tindices,\n\t\t\tvertex_positions,\n\t\t\tvertex_positions_stride,\n\t\t\tvertex_attributes,\n\t\t\tvertex_attributes_stride,\n\t\t\tattribute_weights,\n\t\t\tvertex_lock,\n\t\t\ttarget_index_count,\n\t\t\ttarget_error,\n\t\t\tflags\n\t\t) {\n\t\t\tassert(\n\t\t\t\tindices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array\n\t\t\t);\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(vertex_attributes instanceof Float32Array);\n\t\t\tassert(vertex_attributes.length == vertex_attributes_stride * (vertex_positions.length / vertex_positions_stride));\n\t\t\tassert(vertex_attributes_stride >= 0);\n\t\t\tassert(vertex_lock == null || vertex_lock instanceof Uint8Array);\n\t\t\tassert(vertex_lock == null || vertex_lock.length == vertex_positions.length / vertex_positions_stride);\n\t\t\tassert(target_index_count >= 0 && target_index_count <= indices.length);\n\t\t\tassert(target_index_count % 3 == 0);\n\t\t\tassert(target_error >= 0);\n\t\t\tassert(Array.isArray(attribute_weights));\n\t\t\tassert(vertex_attributes_stride >= attribute_weights.length);\n\t\t\tassert(attribute_weights.length <= 32);\n\t\t\tfor (var i = 0; i < attribute_weights.length; ++i) {\n\t\t\t\tassert(attribute_weights[i] >= 0);\n\t\t\t}\n\n\t\t\tvar options = 0;\n\t\t\tfor (var i = 0; i < (flags ? flags.length : 0); ++i) {\n\t\t\t\tassert(flags[i] in simplifyOptions);\n\t\t\t\toptions |= simplifyOptions[flags[i]];\n\t\t\t}\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\t\t\tvar result = simplifyAttr(\n\t\t\t\tinstance.exports.meshopt_simplifyWithAttributes,\n\t\t\t\tindices32,\n\t\t\t\tindices.length,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\tvertex_attributes,\n\t\t\t\tvertex_attributes_stride * 4,\n\t\t\t\tnew Float32Array(attribute_weights),\n\t\t\t\tvertex_lock,\n\t\t\t\ttarget_index_count,\n\t\t\t\ttarget_error,\n\t\t\t\toptions\n\t\t\t);\n\t\t\tresult[0] = indices instanceof Uint32Array ? result[0] : new indices.constructor(result[0]);\n\n\t\t\treturn result;\n\t\t},\n\n\t\tsimplifyWithUpdate: function (\n\t\t\tindices,\n\t\t\tvertex_positions,\n\t\t\tvertex_positions_stride,\n\t\t\tvertex_attributes,\n\t\t\tvertex_attributes_stride,\n\t\t\tattribute_weights,\n\t\t\tvertex_lock,\n\t\t\ttarget_index_count,\n\t\t\ttarget_error,\n\t\t\tflags\n\t\t) {\n\t\t\tassert(\n\t\t\t\tindices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array\n\t\t\t);\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(vertex_attributes instanceof Float32Array);\n\t\t\tassert(vertex_attributes.length == vertex_attributes_stride * (vertex_positions.length / vertex_positions_stride));\n\t\t\tassert(vertex_attributes_stride >= 0);\n\t\t\tassert(vertex_lock == null || vertex_lock instanceof Uint8Array);\n\t\t\tassert(vertex_lock == null || vertex_lock.length == vertex_positions.length / vertex_positions_stride);\n\t\t\tassert(target_index_count >= 0 && target_index_count <= indices.length);\n\t\t\tassert(target_index_count % 3 == 0);\n\t\t\tassert(target_error >= 0);\n\t\t\tassert(Array.isArray(attribute_weights));\n\t\t\tassert(vertex_attributes_stride >= attribute_weights.length);\n\t\t\tassert(attribute_weights.length <= 32);\n\t\t\tfor (var i = 0; i < attribute_weights.length; ++i) {\n\t\t\t\tassert(attribute_weights[i] >= 0);\n\t\t\t}\n\n\t\t\tvar options = 0;\n\t\t\tfor (var i = 0; i < (flags ? flags.length : 0); ++i) {\n\t\t\t\tassert(flags[i] in simplifyOptions);\n\t\t\t\toptions |= simplifyOptions[flags[i]];\n\t\t\t}\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\t\t\tvar result = simplifyUpdate(\n\t\t\t\tinstance.exports.meshopt_simplifyWithUpdate,\n\t\t\t\tindices32,\n\t\t\t\tindices.length,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\tvertex_attributes,\n\t\t\t\tvertex_attributes_stride * 4,\n\t\t\t\tnew Float32Array(attribute_weights),\n\t\t\t\tvertex_lock,\n\t\t\t\ttarget_index_count,\n\t\t\t\ttarget_error,\n\t\t\t\toptions\n\t\t\t);\n\t\t\tif (indices !== indices32) {\n\t\t\t\t// copy back indices if they were converted to Uint32Array\n\t\t\t\tfor (var i = 0; i < result[0]; ++i) {\n\t\t\t\t\tindices[i] = indices32[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\tgetScale: function (vertex_positions, vertex_positions_stride) {\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\treturn simplifyScale(\n\t\t\t\tinstance.exports.meshopt_simplifyScale,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4\n\t\t\t);\n\t\t},\n\n\t\tsimplifyPoints: function (vertex_positions, vertex_positions_stride, target_vertex_count, vertex_colors, vertex_colors_stride, color_weight) {\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(target_vertex_count >= 0 && target_vertex_count <= vertex_positions.length / vertex_positions_stride);\n\t\t\tif (vertex_colors) {\n\t\t\t\tassert(vertex_colors instanceof Float32Array);\n\t\t\t\tassert(vertex_colors.length % vertex_colors_stride == 0);\n\t\t\t\tassert(vertex_colors_stride >= 3);\n\t\t\t\tassert(vertex_positions.length / vertex_positions_stride == vertex_colors.length / vertex_colors_stride);\n\t\t\t\treturn simplifyPoints(\n\t\t\t\t\tinstance.exports.meshopt_simplifyPoints,\n\t\t\t\t\tvertex_positions,\n\t\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\t\tvertex_colors,\n\t\t\t\t\tvertex_colors_stride * 4,\n\t\t\t\t\tcolor_weight,\n\t\t\t\t\ttarget_vertex_count\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn simplifyPoints(\n\t\t\t\t\tinstance.exports.meshopt_simplifyPoints,\n\t\t\t\t\tvertex_positions,\n\t\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\t\tundefined,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\ttarget_vertex_count\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\tsimplifySloppy: function (indices, vertex_positions, vertex_positions_stride, vertex_lock, target_index_count, target_error) {\n\t\t\tassert(\n\t\t\t\tindices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array\n\t\t\t);\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(vertex_lock == null || vertex_lock instanceof Uint8Array);\n\t\t\tassert(vertex_lock == null || vertex_lock.length == vertex_positions.length / vertex_positions_stride);\n\t\t\tassert(target_index_count >= 0 && target_index_count <= indices.length);\n\t\t\tassert(target_index_count % 3 == 0);\n\t\t\tassert(target_error >= 0);\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\t\t\tvar result = simplifySloppy(\n\t\t\t\tinstance.exports.meshopt_simplifySloppy,\n\t\t\t\tindices32,\n\t\t\t\tindices.length,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\tvertex_lock,\n\t\t\t\ttarget_index_count,\n\t\t\t\ttarget_error\n\t\t\t);\n\t\t\tresult[0] = indices instanceof Uint32Array ? result[0] : new indices.constructor(result[0]);\n\n\t\t\treturn result;\n\t\t},\n\n\t\tsimplifyPrune: function (indices, vertex_positions, vertex_positions_stride, target_error) {\n\t\t\tassert(\n\t\t\t\tindices instanceof Uint32Array || indices instanceof Int32Array || indices instanceof Uint16Array || indices instanceof Int16Array\n\t\t\t);\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(target_error >= 0);\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\t\t\tvar result = simplifyPrune(\n\t\t\t\tinstance.exports.meshopt_simplifyPrune,\n\t\t\t\tindices32,\n\t\t\t\tindices.length,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\ttarget_error\n\t\t\t);\n\t\t\tresult = indices instanceof Uint32Array ? result : new indices.constructor(result);\n\n\t\t\treturn result;\n\t\t},\n\t};\n})();\n\nexport { MeshoptSimplifier };\n","// This file is part of meshoptimizer library and is distributed under the terms of MIT License.\n// Copyright (C) 2016-2025, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)\nvar MeshoptClusterizer = (function () {\n\t// Built with clang version 19.1.5-wasi-sdk\n\t// Built from meshoptimizer 1.0\n\tvar wasm =\n\t\t'b9H79Tebbbe96x9Geueu9Geub9Gbb9Giuuueu9Gmuuuuuuuuuuu9999eu9Gouuuuuueu9Gruuuuuuub9Gxuuuuuuuuuuuueu9Gxuuuuuuuuuuu99eu9GPuuuuuuuuuuuuu99b9Gouuuuuub9GluuuubiCAdilvorwDqooqkbiibeilve9Weiiviebeoweuecj:Pdkr;Zeqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeY9TW79O9V9Wt9F9I919P29K9nW79O2Wt7S2W94bd39TW79O9V9Wt9F9I919P29K9nW79O2Wt79t9W9Ht9P9H2bo39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7bw39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bqE9TW79O9V9Wt9F9J9V9T9W91tW9t9W9OWVW9c9V919U9K7bkL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2Wtbxl79IV9RbmDwebcekdzHq:Y:beAdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek;z8JDPue99eux99due99euo99iu8Jjjjjbc:WD9Rgm8KjjjjbdndnalmbcbhPxekamc:Cwfcbc;Kbz:pjjjb8Adndnalcb9imbaoal9nmbamcuaocdtaocFFFFi0Egscbyd;01jjbHjjjjbbgzBd:CwamceBd;8wamascbyd;01jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;01jjbHjjjjbbgOBd:KwamciBd;8waihsalhAinazasydbcdtfcbBdbasclfhsaAcufgAmbkaihsalhAinazasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkaihsalhCcbhXindnazasydbcdtgQfgAydbcb9imbaHaQfaXBdbaAaAydbgQcjjjj94VBdbaQaXfhXkasclfhsaCcufgCmbkalci9UhLdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhXaHaAydbcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaXcdtfgXaXydbgXcefBdbaOaXcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaihsalhAindnazasydbcdtgCfgXydbgQcu9kmbaXaQcFFFFrGgQBdbaHaCfgCaCydbaQ9RBdbkasclfhsaAcufgAmbxdkkamcuaocdtgsaocFFFFi0EgAcbyd;01jjbHjjjjbbgzBd:CwamceBd;8wamaAcbyd;01jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd;01jjbHjjjjbbgOBd:KwamciBd;8wazcbasz:pjjjbhXalci9UhLaihsalhAinaXasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkdnaoTmbcbhsaHhAaXhCaohQinaAasBdbaAclfhAaCydbasfhsaCclfhCaQcufgQmbkkdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhQaHaAydbcdtfgKaKydbgKcefBdbaOaKcdtfasBdbaHaQcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaoTmbcbhsaohAinaHasfgCaCydbaXasfydb9RBdbasclfhsaAcufgAmbkkamaLcbyd;01jjbHjjjjbbgsBd:OwamclBd;8wascbaLz:pjjjbhYamcuaLcK2alcjjjjd0Ecbyd;01jjbHjjjjbbg8ABd:SwamcvBd;8wJbbbbhEdnalci6g3mbarcd4hKaihAa8AhsaLhrJbbbbh5inavaAclfydbaK2cdtfgCIdlh8EavaAydbaK2cdtfgXIdlhEavaAcwfydbaK2cdtfgQIdlh8FaCIdwhaaXIdwhhaQIdwhgasaCIdbg8JaXIdbg8KMaQIdbg8LMJbbnn:vUdbasclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8MaCIdwh8NaXIdwhyascxfa8EaE:tg8Eagah:tggNa8FaE:tg8Faaah:tgaN:tgEJbbbbJbbjZa8Ja8K:tg8Ja8FNa8La8K:tg8Ka8EN:tghahNaEaENaaa8KNaga8JN:tgEaENMM:rg8K:va8KJbbbb9BEg8ENUdbasczfaEa8ENUdbascCfaha8ENUdbascwfa8Maya8NMMJbbnn:vUdba5a8KMh5aAcxfhAascKfhsarcufgrmbka5aL:Z:vJbbbZNhEkamcuaLcdtalcFFFF970Ecbyd;01jjbHjjjjbbgCBd:WwamcoBd;8waq:Zhhdna3mbcbhsaChAinaAasBdbaAclfhAaLascefgs9hmbkkaEahNhhamcuaLcltalcFFFFd0Ecbyd;01jjbHjjjjbbg8PBd:0wamcrBd;8wcba8Pa8AaCaLcbz:djjjb8AJFFuuh8MJFFuuh8NJFFuuhydnalci6mbJFFuuhya8AhsaLhAJFFuuh8NJFFuuh8MinascwfIdbgEa8Ma8MaE9EEh8MasclfIdbgEa8Na8NaE9EEh8NasIdbgEayayaE9EEhyascKfhsaAcufgAmbkkah:rhEamaocetgscuaocu9kEcbyd;01jjbHjjjjbbgCBd:4wdndnaoal9nmbaihsalhAinaCasydbcetfcFFi87ebasclfhsaAcufgAmbxdkkaCcFeasz:pjjjb8AkaEJbbbZNh8JcuhIdnalci6mbcbhAJFFuuhEa8AhscuhIinascwfIdba8M:tghahNasIdbay:tghahNasclfIdba8N:tghahNMM:rghaEaIcuSahaE9DVgXEhEaAaIaXEhIascKfhsaLaAcefgA9hmbkkamczfcbcjwz:pjjjb8Aamcwf9cb83ibam9cb83iba8JaxNh8RJbbjZak:th8Lcbh8SJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8Ycbh8ZcbhPinJbbbbhEdna8STmbJbbjZa8S:Z:vhEkJbbbbhhdna8Ya8YNa8Wa8WNa8Xa8XNMMg8KJbbbb9BmbJbbjZa8K:r:vhhka8VaENh8Ka8UaENh8EaRaENh5aIhLdndndndndna8SaPVTmbamydwg80Tmea8YahNh8Fa8XahNhaa8WahNhgaeamydbcdtfh81cbh3JFFuuhEcvhQcuhLindnaza81a3cdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAindndnaCaiaAydbgKcx2fgsclfydbgrcetf8Vebcs4aCasydbgXcetf8Vebcs4faCascwfydbglcetf8Vebcs4fgombcbhsxekcehsazaXcdtfydbgXceSmbcehsazarcdtfydbgrceSmbcehsazalcdtfydbglceSmbdnarcdSaXcdSfalcdSfcd6mbaocefhsxekaocdfhskdnasaQ9kmba8AaKcK2fgXIdwa8K:tghahNaXIdba5:tghahNaXIdla8E:tghahNMM:ra8J:va8LNJbbjZMJ9VO:d86JbbjZaXIdCa8FNaXIdxagNaaaXIdzNMMakN:tghahJ9VO:d869DENghaEasaQ6ahaE9DVgXEhEaKaLaXEhLasaQaXEhQkaAclfhAavcufgvmbkka3cefg3a809hmbkkaLcu9hmekama8KUd:ODama8EUd:KDama5Ud:GDamcuBd:qDamcFFF;7rBdjDa8Pcba8AaYamc:GDfamc:qDfamcjDfz:ejjjbamyd:qDhLdndnaxJbbbb9ETmba8SaD6mbaLcuSmeceh3amIdjDa8R9EmixdkaLcu9hmekdna8STmbabaPcltfgzam8Pib83dbazcwfamcwf8Pib83dbaPcefhPkc3hzinazc98Smvamc:Cwfazfydbcbyd;41jjbH:bjjjbbazc98fhzxbkkcbh3a8Saq9pmbamydwaCaiaLcx2fgsydbcetf8Vebcs4aCascwfydbcetf8Vebcs4faCasclfydbcetf8Vebcs4ffaw9nmekcbhscbhAdna8ZTmbcbhAamczfhXinamczfaAcdtfaXydbgQBdbaXclfhXaAaYaQfRbbTfhAa8Zcufg8ZmbkkamydwhlamydbhXam9cu83i:GDam9cu83i:ODam9cu83i:qDam9cu83i:yDaAc;8eaAclfc:bd6Eh8ZinamcjDfasfcFFF;7rBdbasclfgscz9hmbka8Zcdth80dnalTmbaeaXcdtfhocbhrindnazaoarcdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAcuhQcuhsinazaiaAydbgKcx2fgXclfydbcdtfydbazaXydbcdtfydbfazaXcwfydbcdtfydbfgXasaXas6gXEhsaKaQaXEhQaAclfhAavcufgvmbkaQcuSmba8AaQcK2fgAIdwa8M:tgEaENaAIdbay:tgEaENaAIdla8N:tgEaENMM:rhEcbhAindndnasamc:qDfaAfgvydbgX6mbasaX9hmeaEamcjDfaAfIdb9FTmekavasBdbamc:GDfaAfaQBdbamcjDfaAfaEUdbxdkaAclfgAcz9hmbkkarcefgral9hmbkkamczfa80fhQcbhscbhAindnamc:GDfasfydbgXcuSmbaQaAcdtfaXBdbaAcefhAkasclfgscz9hmbkaAa8Zfg8ZTmbJFFuuhhcuhKamczfhsa8ZhvcuhQina8AasydbgXcK2fgAIdwa8M:tgEaENaAIdbay:tgEaENaAIdla8N:tgEaENMM:rhEdndnazaiaXcx2fgAclfydbcdtfydbazaAydbcdtfydbfazaAcwfydbcdtfydbfgAaQ6mbaAaQ9hmeaEah9DTmekaEhhaAhQaXhKkasclfhsavcufgvmbkaKcuSmbaKhLkdnamaiaLcx2fgrydbarclfydbarcwfydbaCabaeadaPawaqa3z:fjjjbTmbaPcefhPJbbbbhRJbbbbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YkcbhXinaOaHaraXcdtfydbcdtgAfydbcdtfgKhsazaAfgvydbgQhAdnaQTmbdninasydbaLSmeasclfhsaAcufgATmdxbkkasaKaQcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbka8AaLcK2fgsIdbhEasIdlhhasIdwh8KasIdxh8EasIdzh5asIdCh8FaYaLfce86bba8Ya8FMh8Ya8Xa5Mh8Xa8Wa8EMh8Wa8Va8KMh8Va8UahMh8UaRaEMhRamydxh8Sxbkkamc:WDf8KjjjjbaPk:joivuv99lu8Jjjjjbca9Rgo8Kjjjjbdndnalcw0mbaiydbhraeabcitfgwalcdtciVBdlawarBdbdnalcd6mbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkkalabfhwxekcbhqaoczfcwfcbBdbao9cb83izaocwfcbBdbao9cb83ibJbbjZhkJbbjZhxinadaiaqcdtfydbcK2fhDcbhwinaoczfawfgraDawfIdbgmarIdbgP:tgsaxNaPMgPUdbaoawfgrasamaP:tNarIdbMUdbawclfgwcx9hmbkJbbjZakJbbjZMgk:vhxaqcefgqal9hmbkcbhradcbcecdaoIdlgmaoIdwgP9GEgwaoIdbgsaP9GEawasam9GEgzcdtgwfhHaoczfawfIdbhmaihwalhDinaiarcdtfgqydbhOaqawydbgABdbawaOBdbawclfhwaraHaAcK2fIdbam9DfhraDcufgDmbkdndnarcv6mbavc8X9kmbaralc98f6mekaiydbhraeabcitfgwalcdtciVBdlawarBdbaiclfhralcufhDawcxfhwinarydbhqawcuBdbawc98faqBdbawcwfhwarclfhraDcufgDmbkalabfhwxekaeabcitfgwamUdbawawydlc98GazVBdlabcefaeadaiaravcefgqz:djjjbhDawawydlciGaDabcu7fcdtVBdlaDaeadaiarcdtfalar9Raqz:djjjbhwkaocaf8Kjjjjbawk;yddvue99dninabaecitfgrydlgwcl6mednawciGgDci9hmbabaecitfhbcbhecehqindnaiabydbgDfRbbmbcbhqadaDcK2fgkIdwalIdw:tgxaxNakIdbalIdb:tgxaxNakIdlalIdl:tgxaxNMM:rgxaoIdb9DTmbaoaxUdbavaDBdbarydlhwkabcwfhbaecefgeawcd46mbkaqceGTmdarawciGBdlskdnabcbawcd4gwalaDcdtfIdbarIdb:tgxJbbbb9FEgkaw7aecefgwfgecitfydlabakawfgwcitfydlVci0mbaraDBdlkabawadaialavaoz:ejjjbax:laoIdb9Fmbkkkjlevudnabydwgxaladcetfgm8Vebcs4alaecetfgP8Vebgscs4falaicetfgz8Vebcs4ffaD0abydxaq9pVakVgDce9hmbavawcltfgxab8Pdb83dbaxcwfabcwfgx8Pdb83dbabydbhqdnaxydbgkTmbaoaqcdtfhxakhsinalaxydbcetfcFFi87ebaxclfhxascufgsmbkkabaqakfBdbabydxhxab9cb83dwababydlaxci2fBdlaP8Vebhscbhxkdnascztcz91cu9kmbabaxcefBdwaPax87ebaoabydbcdtfaxcdtfaeBdbkdnam8Uebcu9kmbababydwgxcefBdwamax87ebaoabydbcdtfaxcdtfadBdbkdnaz8Uebcu9kmbababydwgxcefBdwazax87ebaoabydbcdtfaxcdtfaiBdbkarabydlfabydxci2faPRbb86bbarabydlfabydxci2fcefamRbb86bbarabydlfabydxci2fcdfazRbb86bbababydxcefBdxaDk:zPrHue99eue99eue99eu8Jjjjjbc;W;Gb9Rgx8KjjjjbdndnalmbcbhmxekcbhPaxc:m;Gbfcbc;Kbz:pjjjb8Aaxcualci9UgscltascjjjjiGEcbyd;01jjbHjjjjbbgzBd:m9GaxceBd;S9GaxcuascK2gHcKfalcpFFFe0Ecbyd;01jjbHjjjjbbgOBd:q9GaxcdBd;S9Gdnalci6gAmbarcd4hCascdthXaOhQazhLinavaiaPcx2fgrydbaC2cdtfhKavarcwfydbaC2cdtfhYavarclfydbaC2cdtfh8AcbhraLhEinaQarfgmaKarfg3Idbg5a8Aarfg8EIdbg8Fa5a8F9DEg5UdbamaYarfgaIdbg8Fa5a8Fa59DEg8FUdbamcxfgma3Idbg5a8EIdbgha5ah9EEg5UdbamaaIdbgha5aha59EEg5UdbaEa8Fa5MJbbbZNUdbaEaXfhEarclfgrcx9hmbkaQcKfhQaLclfhLaPcefgPas9hmbkkaOaHfgr9cb83dbarczf9cb83dbarcwf9cb83dbaxcuascx2gralc:bjjjl0Ecbyd;01jjbHjjjjbbgCBdN9GaxciBd;S9GascdthgazarfhvaChHazhLcbhPinaxcbcj;Gbz:pjjjbhEaPas2cdthadnaAmbaLhrash3inaEarydbgmc8F91cjjjj94Vam7gmcQ4cx2fg8Ea8EydwcefBdwaEamcd4cFrGcx2fg8Ea8EydbcefBdbaEamcx4cFrGcx2fgmamydlcefBdlarclfhra3cufg3mbkkazaafh8AaCaafhXcbhmcbh3cbh8EcbhainaEamfgrydbhQara3BdbarcwfgKydbhYaKaaBdbarclfgrydbhKara8EBdbaQa3fh3aYaafhaaKa8Efh8Eamcxfgmcj;Gb9hmbkdnaAmbcbhravhminamarBdbamclfhmasarcefgr9hmbkaAmbavhrashminaEa8Aarydbg3cdtfydbg8Ec8F91a8E7cd4cFrGcx2fg8Ea8Eydbg8EcefBdbaXa8Ecdtfa3BdbarclfhramcufgmmbkaHhrashminaEa8Aarydbg3cdtfydbg8Ec8F91a8E7cx4cFrGcx2fg8Ea8Eydlg8EcefBdlava8Ecdtfa3BdbarclfhramcufgmmbkavhrashminaEa8Aarydbg3cdtfydbg8Ec8F91cjjjj94Va8E7cQ4cx2fg8Ea8Eydwg8EcefBdwaXa8Ecdtfa3BdbarclfhramcufgmmbkkaHagfhHaLagfhLaPcefgPci9hmbkaEaocetgrcuaocu9kEcbyd;01jjbHjjjjbbgKBd:y9GaEclBd;S9Gdndnaoal9nmbaihralhminaKarydbcetfcFFi87ebarclfhramcufgmmbxdkkaKcFearz:pjjjb8AkcbhmaEascbyd;01jjbHjjjjbbg8ABd:C9GaOaCaCascdtfaCascitfa8AascbazaKaiawaDaqakz:hjjjbcbh8Ednalci6gambcbh8Ea8Ahrash3ina8EarRbbfh8Earcefhra3cufg3mbkkaEcwf9cb83ibaE9cb83ibalawc9:fgrfcufar9UhrasaDfcufaD9Uh3dnaambara3ara30EhYcbhra8Ehacbhmincbh3dnarTmba8AarfRbbceSh3kamaEaiaCydbcx2fgQydbaQclfydbaQcwfydbaKabaeadamawaqa3a3ce7a8EaY9nVaaamfaY6VGz:fjjjbfhmaCclfhCaaa8AarfRbb9Rhaasarcefgr9hmbkaEydxTmbabamcltfgraE8Pib83dbarcwfaEcwf8Pib83dbamcefhmkczhrinarc98SmeaEc:m;Gbfarfydbcbyd;41jjbH:bjjjbbarc98fhrxbkkaxc;W;Gbf8Kjjjjbamk:YKDQue99lue99iul9:eur99lu8Jjjjjbc;qb9RgP8Kjjjjbaxhsaxhzdndnavax0gHmbdnavTmbcbhOaehzavhAinawaDazydbcx2fgCcwfydbcetfgX8VebhQawaCclfydbcetfgL8VebhKawaCydbcetfgC8VebhYaXce87ebaLce87ebaCce87ebaOaKcs4aYcs4faQcs4ffhOazclfhzaAcufgAmbkaehzavhAinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaAcufgAmbkcehzaqhsaOaq0mekalce86bbalcefcbavcufz:pjjjb8AxekaPaiBdxaPadBdwaPaeBdlavakaqci9Ug8Aaka8Aak6EaHEgK9RhEaxaK9Rh3aKcufh5aKceth8EaKcdtgCc98fh8FavcitgOaC9Rarfc98fhaascufhhavcufhgaraOfh8JJbbjZas:Y:vh8KaravcdtgYfc94fh8LcbazceakaxSEg8Mcdtg8N9RhyJFFuuh8PcuhIcbh8Rcbh8SinaPclfa8ScdtfydbhQaPc8WfcKfcb8Pd:y1jjbgR83ibaPc8Wfczfcb8Pd:q1jjbg8U83ibaPc8Wfcwfcb8Pd11jjbg8V83ibaPcb8Pdj1jjbg8W83i8WaPczfcKfaR83ibaPczfczfa8U83ibaPczfcwfa8V83ibaPa8W83izaQaYfh8XcbhXinabaQaXcdtgLfydbcK2fhAcbhzinaPc8WfazfgCaAazfgOIdbg8YaCIdbg8Za8Ya8Z9DEUdbaCczfgCaOcxfIdbg8YaCIdbg8Za8Ya8Z9EEUdbazclfgzcx9hmbkaPIdnaPId8W:tg80aPId9iaPIdU:tg81NhBaba8XaXcu7cdtfydbcK2fhAcbhzaPId80h83aPId9ehUinaPczfazfgCaAazfgOIdbg8YaCIdbg8Za8Ya8Z9DEUdbaCczfgCaOcxfIdbg8YaCIdbg8Za8Ya8Z9EEUdbazclfgzcx9hmbkaraLfgzaUa83:tg8Ya81Na80a8YNaBMMUdbazaYfaPId8KaPIdC:tg8YaPIdyaPIdK:tg8ZNaPIdaaPIdz:tg80a8YNa80a8ZNMMUdbaXcefgXav9hmbkcbh85dnaHmbcbhAaQhza8JhCavhXinawaDazydbcx2fgOcwfydbcetfgL8Vebh8XawaOclfydbcetfg868Vebh85awaOydbcetfgO8Vebh87aLce87eba86ce87ebaOce87ebaCaAa85cs4a87cs4fa8Xcs4ffgABdbazclfhzaCclfhCaXcufgXmbkavhCinawaDaQydbcx2fgzcwfydbcetfcFFi87ebawazclfydbcetfcFFi87ebawazydbcetfcFFi87ebaQclfhQaCcufgCmbka8Jh85kdndndndndndndndndndna8Eav0mba8Eax0meavaK6mda5aE9pmDcehLaEhXa85Tmlxrka5ag9pmwa8Eax9nmdxlkdnavavaK9UgzaK29Raza320mba5aE9pmwa85Th88ceh86aEhLxvka5ag6mixrka5ag9pmokcbhLaghXa85mikJFFuuh8YcbhQa5hzindnazcefgCaK6mbaLavaC9RgOaK6GmbarazcdtfIdbg8ZaC:YNa8Lavaz9RcdtfIdbg80aO:YNMg81a8Y9Embdndna8KaOahf:YNgB:lJbbb9p9DTmbaB:OhAxekcjjjj94hAka80asaA2aO9R:YNh80dndna8Kazasf:YNgB:lJbbb9p9DTmbaB:OhOxekcjjjj94hOkamasaO2aC9R:Ya8ZNa80MNa81Mg8Za8Ya8Za8Y9DgOEh8YaCaQaOEhQkaza8MfgzaX6mbxlkka85Th88cbh86aghLkJFFuuh8YcbhQaEhCaahAa8FhOaKhzindnazazaK9UgXaK29RaXa320mbdna86TmbaCaCaK9UgXaK29RaXa320mekaraOfIdbg8Zaz:YNaAIdbg80aC:YNMg81a8Y9EmbazhXaCh8Xdna88mba85aOfydbgXh8Xkdndna8Ka8Xahf:YNgB:lJbbb9p9DTmbaB:Oh87xekcjjjj94h87ka80asa872a8X9R:YNh80dndna8KaXahf:YNgB:lJbbb9p9DTmbaB:Oh8Xxekcjjjj94h8Xkamasa8X2aX9R:Ya8ZNa80MNa81Mg8Za8Ya8Za8Y9DgXEh8YazaQaXEhQkaCa8M9RhCaAayfhAaOa8NfhOaza8MfgzcufaL6mbxdkkJFFuuh8YcbhQaEhCaahAa8FhOaKhzindnazaK6mbaLaCaK6GmbaraOfIdbg8Zaz:YNaAIdbg80aC:YNMg81a8Y9Embdndna8Ka85aOfydbg8Xahf:YNgB:lJbbb9p9DTmbaB:Oh86xekcjjjj94h86kamasa862a8X9R:YgBa8ZNa80aBNMNa81Mg8Za8Ya8Za8Y9Dg8XEh8YazaQa8XEhQkaCa8M9RhCaAayfhAaOa8NfhOaza8MfgzcufaX6mbkkaQTmba8Ya8P9DTmba8Yh8PaQh8Ra8ShIka8Scefg8Sci9hmbkdndnaoc8X9kmbaIcb9omeka8Acufh86cbhYindndndnavaY9RaxaYaxfav0Eg8XTmbcbhAaeaYcdtfgzhCa8XhXinawaDaCydbcx2fgOcwfydbcetfgQ8VebhbawaOclfydbcetfgL8VebhrawaOydbcetfgO8VebhKaQce87ebaLce87ebaOce87ebaAarcs4aKcs4fabcs4ffhAaCclfhCaXcufgXmbka8XhOinawaDazydbcx2fgCcwfydbcetfcFFi87ebawaCclfydbcetfcFFi87ebawaCydbcetfcFFi87ebazclfhzaOcufgOmbkaAaq0mekalaYfgzce86bbazcefcba8Xcufz:pjjjb8AxekalaYfgzce86bbazcefcba86z:pjjjb8Aa8Ah8Xka8XaYfgYav9pmdxbkkaravcdtg8XfhLdna8RTmbaPclfaIcdtfydbhza8RhCinaLazydbfcb86bbazclfhzaCcufgCmbkkdnava8R9nmbaPclfaIcdtfydba8Rcdtfhzava8R9RhCinaLazydbfce86bbazclfhzaCcufgCmbkkcbhYindnaYaISmbcbhzaraPclfaYcdtfydbgKa8Xz:ojjjbhCavhXa8RhOinaKaOazaLaCydbgQfRbbgAEcdtfaQBdbaCclfhCaOaAfhOazaA9RcefhzaXcufgXmbkkaYcefgYci9hmbkabaeadaiala8RaocefgCarawaDaqakaxamz:hjjjbabaea8Rcdtgzfadazfaiazfala8Rfava8R9RaCarawaDaqakaxamz:hjjjbkaPc;qbf8Kjjjjbk;Nkovud99euv99eul998Jjjjjbc:W;ae9Rgo8KjjjjbdndnadTmbavcd4hrcbhwcbhDindnaiaeclfydbar2cdtfgvIdbaiaeydbar2cdtfgqIdbgk:tgxaiaecwfydbar2cdtfgmIdlaqIdlgP:tgsNamIdbak:tgzavIdlaP:tgPN:tgkakNaPamIdwaqIdwgH:tgONasavIdwaH:tgHN:tgPaPNaHazNaOaxN:tgxaxNMM:rgsJbbbb9Bmbaoc:W:qefawcx2fgAakas:vUdwaAaxas:vUdlaAaPas:vUdbaoc8Wfawc8K2fgAaq8Pdb83dbaAav8Pdb83dxaAam8Pdb83dKaAcwfaqcwfydbBdbaAcCfavcwfydbBdbaAcafamcwfydbBdbawcefhwkaecxfheaDcifgDad6mbkab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbawTmeaocbBd8Sao9cb83iKao9cb83izaoczfaoc8Wfawci2cxaoc8Sfcbcrz:jjjjbaoIdKhCaoIdChXaoIdzhQao9cb83iwao9cb83ibaoaoc:W:qefawcxaoc8Sfcbciz:jjjjbJbbjZhkaoIdwgPJbbbbJbbjZaPaPNaoIdbgPaPNaoIdlgsasNMM:rgx:vaxJbbbb9BEgzNhxasazNhsaPazNhzaoc:W:qefheawhvinaecwfIdbaxNaeIdbazNasaeclfIdbNMMgPakaPak9DEhkaecxfheavcufgvmbkabaCUdwabaXUdlabaQUdbabaoId3UdxdndnakJ;n;m;m899FmbJbbbbhPaoc:W:qefheaoc8WfhvinaCavcwfIdb:taecwfIdbgHNaQavIdb:taeIdbgONaXavclfIdb:taeclfIdbgLNMMaxaHNazaONasaLNMM:vgHaPaHaP9EEhPavc8KfhvaecxfheawcufgwmbkabaxUd8KabasUdaabazUd3abaCaxaPN:tUdKabaXasaPN:tUdCabaQazaPN:tUdzabJbbjZakakN:t:rgkUdydndnaxJbbj:;axJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;axJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohexekcjjjj94hekabae86b8UdndnasJbbj:;asJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;asJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabav86bRdndnazJbbj:;azJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;azJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohqxekcjjjj94hqkabaq86b8SdndnaecKtcK91:YJbb;:9c:vax:t:lavcKtcK91:YJbb;:9c:vas:t:laqcKtcK91:YJbb;:9c:vaz:t:lakMMMJbb;:9cNJbbjZMgk:lJbbb9p9DTmbak:Ohexekcjjjj94hekaecFbaecFb9iEhexekabcjjj;8iBdycFbhekabae86b8Vxekab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbkaoc:W;aef8Kjjjjbk;Iwwvul99iud99eue99eul998Jjjjjbcje9Rgr8Kjjjjbavcd4hwaicd4hDdndnaoTmbarc;abfcbaocdtgvz:pjjjb8Aarc;Gbfcbavz:pjjjb8AarhvarcafhiaohqinavcFFF97BdbaicFFF;7rBdbaiclfhiavclfhvaqcufgqmbkdnadTmbcbhkinaeakaD2cdtfgvIdwhxavIdlhmavIdbhPalakaw2cdtfIdbhsarc;abfhzarhiarc;GbfhHarcafhqc:G1jjbhvaohOinasavcwfIdbaxNavIdbaPNavclfIdbamNMMgAMhCakhXdnaAas:tgAaqIdbgQ9DgLmbaHydbhXkaHaXBdbakhXdnaCaiIdbgK9EmbazydbhXaKhCkazaXBdbaiaCUdbaqaAaQaLEUdbavcxfhvaqclfhqaHclfhHaiclfhiazclfhzaOcufgOmbkakcefgkad9hmbkkadThkJbbbbhCcbhXarc;abfhvarc;Gbfhicbhqinalavydbgzaw2cdtfIdbalaiydbgHaw2cdtfIdbaeazaD2cdtfgzIdwaeaHaD2cdtfgHIdw:tgsasNazIdbaHIdb:tgsasNazIdlaHIdl:tgsasNMM:rMMgsaCasaC9EgzEhCaqaXazEhXaiclfhiavclfhvaoaqcefgq9hmbkaCJbbbZNhKxekadThkcbhXJbbbbhKkJbbbbhCdnaearc;abfaXcdtgifydbgqaD2cdtfgvIdwaearc;GbfaifydbgzaD2cdtfgiIdwgm:tgsasNavIdbaiIdbgY:tgAaANavIdlaiIdlgP:tgQaQNMM:rgxJbbbb9ETmbaxalaqaw2cdtfIdbMalazaw2cdtfIdb:taxaxM:vhCkasaCNamMhmaQaCNaPMhPaAaCNaYMhYdnakmbaDcdthvawcdthiindnalIdbg8AaecwfIdbam:tgCaCNaeIdbaY:tgsasNaeclfIdbaP:tgAaANMM:rgQMgEaK9ETmbJbbbbhxdnaQJbbbb9ETmbaEaK:taQaQM:vhxkaxaCNamMhmaxaANaPMhPaxasNaYMhYa8AaKaQMMJbbbZNhKkaeavfhealaifhladcufgdmbkkabaKUdxabamUdwabaPUdlabaYUdbarcjef8Kjjjjbkjeeiu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwdnaiTmbawceawce0EhDarhiinaiaeadRbbcdtfydbBdbadcefhdaiclfhiaDcufgDmbkkabarawaladaoz1jjjbarcj8Wf8Kjjjjbk:Reeeu8Jjjjjbca9Rgo8Kjjjjbab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbdnadTmbaocbBd3ao9cb83iwao9cb83ibaoaeadaialaoc3falEavcbalEcrz:jjjjbabao8Pib83dbabao8Piw83dwkaocaf8Kjjjjbk:3lequ8JjjjjbcjP9Rgl8Kjjjjbcbhvalcjxfcbaiz:pjjjb8AdndnadTmbcjehoaehrincuhwarhDcuhqavhkdninawakaoalcjxfaDcefRbbfRbb9RcFeGci6aoalcjxfaDRbbfRbb9RcFeGci6faoalcjxfaDcdfRbbfRbb9RcFeGci6fgxaq9mgmEhwdnammbaxce0mdkaxaqaxaq9kEhqaDcifhDadakcefgk9hmbkkaeawci2fgDcdfRbbhqaDcefRbbhxaDRbbhkaeavci2fgDcifaDawav9Rci2zMjjjb8Aakalcjxffaocefgo86bbaxalcjxffao86bbaDcdfaq86bbaDcefax86bbaDak86bbaqalcjxffao86bbarcifhravcefgvad9hmbkalcFeaicetz:pjjjbhoadci2gDceaDce0EhqcbhxindnaoaeRbbgkcetfgw8UebgDcu9kmbawax87ebaocjlfaxcdtfabakcdtfydbBdbaxhDaxcefhxkaeaD86bbaecefheaqcufgqmbkaxcdthDxekcbhDkabalcjlfaDz:ojjjb8AalcjPf8Kjjjjbk9teiucbcbyd;81jjbgeabcifc98GfgbBd;81jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;81jjbgeabcrfc94GfgbBd;81jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikTeeucbabcbyd;81jjbge9Rcifc98GaefgbBd;81jjbdnabZbcztge9nmbabae9RcFFifcz4nb8Akk:;Deludndndnadch9pmbabaeSmdaeabadfgi9Rcbadcet9R0mekabaead;8qbbxekaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocd4cefciGgiTmbaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglcd4cefcrGgdTmbavadcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaiaeydzBdzaiaeydCBdCaiaeydKBdKaiaeyd3Bd3aecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaiaeRbe86beaiaeRbd86bdaiaeRbi86biaiaeRbl86blaiaeRbv86bvaiaeRbo86boaiaeRbr86braicwfhiaecwfhealc94fglmbkkabkk:nedbcjwktFFuuFFuuFFuubbbbFFuFFFuFFFuFbbbbbbjZbbbbbbbbbbbbbbjZbbbbbbbbbbbbbbjZ86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;86;nAZ86;nAZ86;nAZ86;nA:;bc;0wkxebbbdbbbjNbb'; // embed! wasm\n\n\tvar wasmpack = new Uint8Array([\n\t\t32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67,\n\t\t24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115,\n\t]);\n\n\tif (typeof WebAssembly !== 'object') {\n\t\treturn {\n\t\t\tsupported: false,\n\t\t};\n\t}\n\n\tvar instance;\n\n\tvar ready = WebAssembly.instantiate(unpack(wasm), {}).then(function (result) {\n\t\tinstance = result.instance;\n\t\tinstance.exports.__wasm_call_ctors();\n\t});\n\n\tfunction unpack(data) {\n\t\tvar result = new Uint8Array(data.length);\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tvar ch = data.charCodeAt(i);\n\t\t\tresult[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;\n\t\t}\n\t\tvar write = 0;\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tresult[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n\t\t}\n\t\treturn result.buffer.slice(0, write);\n\t}\n\n\tfunction assert(cond) {\n\t\tif (!cond) {\n\t\t\tthrow new Error('Assertion failed');\n\t\t}\n\t}\n\n\tfunction bytes(view) {\n\t\treturn new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n\t}\n\n\tvar BOUNDS_SIZE = 48;\n\tvar MESHLET_SIZE = 16;\n\n\tfunction extractMeshlet(buffers, index) {\n\t\tvar vertex_offset = buffers.meshlets[index * 4 + 0];\n\t\tvar triangle_offset = buffers.meshlets[index * 4 + 1];\n\t\tvar vertex_count = buffers.meshlets[index * 4 + 2];\n\t\tvar triangle_count = buffers.meshlets[index * 4 + 3];\n\n\t\treturn {\n\t\t\tvertices: buffers.vertices.subarray(vertex_offset, vertex_offset + vertex_count),\n\t\t\ttriangles: buffers.triangles.subarray(triangle_offset, triangle_offset + triangle_count * 3),\n\t\t};\n\t}\n\n\tfunction buildMeshlets(\n\t\tfun,\n\t\tindices,\n\t\tvertex_positions,\n\t\tvertex_count,\n\t\tvertex_positions_stride,\n\t\tmax_vertices,\n\t\tmin_triangles,\n\t\tmax_triangles,\n\t\tparama,\n\t\tparamb\n\t) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar max_meshlets = instance.exports.meshopt_buildMeshletsBound(indices.length, max_vertices, min_triangles);\n\n\t\t// allocate memory\n\t\tvar meshletsp = sbrk(max_meshlets * MESHLET_SIZE);\n\t\tvar meshlet_verticesp = sbrk(indices.length * 4);\n\t\tvar meshlet_trianglesp = sbrk(indices.length);\n\n\t\tvar indicesp = sbrk(indices.byteLength);\n\t\tvar verticesp = sbrk(vertex_positions.byteLength);\n\n\t\t// copy input data to wasm memory\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(indices), indicesp);\n\t\theap.set(bytes(vertex_positions), verticesp);\n\n\t\tvar count = fun(\n\t\t\tmeshletsp,\n\t\t\tmeshlet_verticesp,\n\t\t\tmeshlet_trianglesp,\n\t\t\tindicesp,\n\t\t\tindices.length,\n\t\t\tverticesp,\n\t\t\tvertex_count,\n\t\t\tvertex_positions_stride,\n\t\t\tmax_vertices,\n\t\t\tmin_triangles,\n\t\t\tmax_triangles,\n\t\t\tparama,\n\t\t\tparamb\n\t\t);\n\n\t\t// heap might (will?) have grown -> re-acquire\n\t\theap = new Uint8Array(instance.exports.memory.buffer);\n\n\t\tvar meshletBytes = heap.subarray(meshletsp, meshletsp + count * MESHLET_SIZE);\n\t\tvar meshlets = new Uint32Array(meshletBytes.buffer, meshletBytes.byteOffset, meshletBytes.byteLength / 4).slice();\n\n\t\tfor (var i = 0; i < count; ++i) {\n\t\t\tvar vertex_offset = meshlets[i * 4 + 0];\n\t\t\tvar triangle_offset = meshlets[i * 4 + 1];\n\t\t\tvar vertex_count = meshlets[i * 4 + 2];\n\t\t\tvar triangle_count = meshlets[i * 4 + 3];\n\n\t\t\tinstance.exports.meshopt_optimizeMeshlet(\n\t\t\t\tmeshlet_verticesp + vertex_offset * 4,\n\t\t\t\tmeshlet_trianglesp + triangle_offset,\n\t\t\t\ttriangle_count,\n\t\t\t\tvertex_count\n\t\t\t);\n\t\t}\n\n\t\tvar last_vertex_offset = meshlets[(count - 1) * 4 + 0];\n\t\tvar last_triangle_offset = meshlets[(count - 1) * 4 + 1];\n\t\tvar last_vertex_count = meshlets[(count - 1) * 4 + 2];\n\t\tvar last_triangle_count = meshlets[(count - 1) * 4 + 3];\n\n\t\tvar used_vertices = last_vertex_offset + last_vertex_count;\n\t\tvar used_triangles = last_triangle_offset + last_triangle_count * 3;\n\n\t\tvar result = {\n\t\t\tmeshlets: meshlets,\n\t\t\tvertices: new Uint32Array(heap.buffer, meshlet_verticesp, used_vertices).slice(),\n\t\t\ttriangles: new Uint8Array(heap.buffer, meshlet_trianglesp, used_triangles * 3).slice(),\n\t\t\tmeshletCount: count,\n\t\t};\n\n\t\t// reset memory\n\t\tsbrk(meshletsp - sbrk(0));\n\n\t\treturn result;\n\t}\n\n\tfunction extractBounds(boundsp) {\n\t\tvar bounds_floats = new Float32Array(instance.exports.memory.buffer, boundsp, BOUNDS_SIZE / 4);\n\n\t\t// see meshopt_Bounds in meshoptimizer.h for layout\n\t\treturn {\n\t\t\tcenterX: bounds_floats[0],\n\t\t\tcenterY: bounds_floats[1],\n\t\t\tcenterZ: bounds_floats[2],\n\t\t\tradius: bounds_floats[3],\n\t\t\tconeApexX: bounds_floats[4],\n\t\t\tconeApexY: bounds_floats[5],\n\t\t\tconeApexZ: bounds_floats[6],\n\t\t\tconeAxisX: bounds_floats[7],\n\t\t\tconeAxisY: bounds_floats[8],\n\t\t\tconeAxisZ: bounds_floats[9],\n\t\t\tconeCutoff: bounds_floats[10],\n\t\t};\n\t}\n\n\tfunction computeMeshletBounds(buffers, vertex_positions, vertex_count, vertex_positions_stride) {\n\t\tvar sbrk = instance.exports.sbrk;\n\n\t\tvar results = [];\n\n\t\t// allocate memory that's constant for all meshlets\n\t\tvar verticesp = sbrk(vertex_positions.byteLength);\n\t\tvar meshlet_verticesp = sbrk(buffers.vertices.byteLength);\n\t\tvar meshlet_trianglesp = sbrk(buffers.triangles.byteLength);\n\t\tvar resultp = sbrk(BOUNDS_SIZE);\n\n\t\t// copy vertices to wasm memory\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(vertex_positions), verticesp);\n\t\theap.set(bytes(buffers.vertices), meshlet_verticesp);\n\t\theap.set(bytes(buffers.triangles), meshlet_trianglesp);\n\n\t\tfor (var i = 0; i < buffers.meshletCount; ++i) {\n\t\t\tvar vertex_offset = buffers.meshlets[i * 4 + 0];\n\t\t\tvar triangle_offset = buffers.meshlets[i * 4 + 0 + 1];\n\t\t\tvar triangle_count = buffers.meshlets[i * 4 + 0 + 3];\n\n\t\t\tinstance.exports.meshopt_computeMeshletBounds(\n\t\t\t\tresultp,\n\t\t\t\tmeshlet_verticesp + vertex_offset * 4,\n\t\t\t\tmeshlet_trianglesp + triangle_offset,\n\t\t\t\ttriangle_count,\n\t\t\t\tverticesp,\n\t\t\t\tvertex_count,\n\t\t\t\tvertex_positions_stride\n\t\t\t);\n\n\t\t\tresults.push(extractBounds(resultp));\n\t\t}\n\n\t\t// reset memory\n\t\tsbrk(verticesp - sbrk(0));\n\n\t\treturn results;\n\t}\n\n\tfunction computeClusterBounds(indices, vertex_positions, vertex_count, vertex_positions_stride) {\n\t\tvar sbrk = instance.exports.sbrk;\n\n\t\t// allocate memory\n\t\tvar resultp = sbrk(BOUNDS_SIZE);\n\t\tvar indicesp = sbrk(indices.byteLength);\n\t\tvar verticesp = sbrk(vertex_positions.byteLength);\n\n\t\t// copy input data to wasm memory\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(indices), indicesp);\n\t\theap.set(bytes(vertex_positions), verticesp);\n\n\t\tinstance.exports.meshopt_computeClusterBounds(resultp, indicesp, indices.length, verticesp, vertex_count, vertex_positions_stride);\n\n\t\tvar result = extractBounds(resultp);\n\n\t\t// reset memory\n\t\tsbrk(resultp - sbrk(0));\n\n\t\treturn result;\n\t}\n\n\tfunction computeSphereBounds(positions, count, positions_stride, radii, radii_stride) {\n\t\tvar sbrk = instance.exports.sbrk;\n\n\t\t// allocate memory\n\t\tvar resultp = sbrk(BOUNDS_SIZE);\n\t\tvar positionsp = sbrk(positions.byteLength);\n\t\tvar radiip = radii ? sbrk(radii.byteLength) : 0;\n\n\t\t// copy input data to wasm memory\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(bytes(positions), positionsp);\n\t\tif (radii) {\n\t\t\theap.set(bytes(radii), radiip);\n\t\t}\n\n\t\tinstance.exports.meshopt_computeSphereBounds(resultp, positionsp, count, positions_stride, radiip, radii ? radii_stride : 0);\n\n\t\tvar result = extractBounds(resultp);\n\n\t\t// reset memory\n\t\tsbrk(resultp - sbrk(0));\n\n\t\treturn result;\n\t}\n\n\treturn {\n\t\tready: ready,\n\t\tsupported: true,\n\t\tbuildMeshlets: function (indices, vertex_positions, vertex_positions_stride, max_vertices, max_triangles, cone_weight) {\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(max_vertices > 0 && max_vertices <= 256);\n\t\t\tassert(max_triangles >= 1 && max_triangles <= 512);\n\n\t\t\tcone_weight = cone_weight || 0.0;\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\n\t\t\treturn buildMeshlets(\n\t\t\t\tinstance.exports.meshopt_buildMeshletsFlex,\n\t\t\t\tindices32,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\tmax_vertices,\n\t\t\t\tmax_triangles,\n\t\t\t\tmax_triangles,\n\t\t\t\tcone_weight,\n\t\t\t\t0.0\n\t\t\t);\n\t\t},\n\t\tbuildMeshletsFlex: function (\n\t\t\tindices,\n\t\t\tvertex_positions,\n\t\t\tvertex_positions_stride,\n\t\t\tmax_vertices,\n\t\t\tmin_triangles,\n\t\t\tmax_triangles,\n\t\t\tcone_weight,\n\t\t\tsplit_factor\n\t\t) {\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(max_vertices > 0 && max_vertices <= 256);\n\t\t\tassert(min_triangles >= 1 && max_triangles <= 512);\n\t\t\tassert(min_triangles <= max_triangles);\n\n\t\t\tcone_weight = cone_weight || 0.0;\n\t\t\tsplit_factor = split_factor || 0.0;\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\n\t\t\treturn buildMeshlets(\n\t\t\t\tinstance.exports.meshopt_buildMeshletsFlex,\n\t\t\t\tindices32,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\tmax_vertices,\n\t\t\t\tmin_triangles,\n\t\t\t\tmax_triangles,\n\t\t\t\tcone_weight,\n\t\t\t\tsplit_factor\n\t\t\t);\n\t\t},\n\t\tbuildMeshletsSpatial: function (indices, vertex_positions, vertex_positions_stride, max_vertices, min_triangles, max_triangles, fill_weight) {\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\t\t\tassert(max_vertices > 0 && max_vertices <= 256);\n\t\t\tassert(min_triangles >= 1 && max_triangles <= 512);\n\t\t\tassert(min_triangles <= max_triangles);\n\n\t\t\tfill_weight = fill_weight || 0.0;\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\n\t\t\treturn buildMeshlets(\n\t\t\t\tinstance.exports.meshopt_buildMeshletsSpatial,\n\t\t\t\tindices32,\n\t\t\t\tvertex_positions,\n\t\t\t\tvertex_positions.length / vertex_positions_stride,\n\t\t\t\tvertex_positions_stride * 4,\n\t\t\t\tmax_vertices,\n\t\t\t\tmin_triangles,\n\t\t\t\tmax_triangles,\n\t\t\t\tfill_weight\n\t\t\t);\n\t\t},\n\t\textractMeshlet: function (buffers, index) {\n\t\t\tassert(index >= 0 && index < buffers.meshletCount);\n\n\t\t\treturn extractMeshlet(buffers, index);\n\t\t},\n\t\tcomputeClusterBounds: function (indices, vertex_positions, vertex_positions_stride) {\n\t\t\tassert(indices.length % 3 == 0);\n\t\t\tassert(indices.length / 3 <= 512);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\n\t\t\tvar indices32 = indices.BYTES_PER_ELEMENT == 4 ? indices : new Uint32Array(indices);\n\n\t\t\treturn computeClusterBounds(indices32, vertex_positions, vertex_positions.length / vertex_positions_stride, vertex_positions_stride * 4);\n\t\t},\n\t\tcomputeMeshletBounds: function (buffers, vertex_positions, vertex_positions_stride) {\n\t\t\tassert(buffers.meshletCount != 0);\n\t\t\tassert(vertex_positions instanceof Float32Array);\n\t\t\tassert(vertex_positions.length % vertex_positions_stride == 0);\n\t\t\tassert(vertex_positions_stride >= 3);\n\n\t\t\treturn computeMeshletBounds(buffers, vertex_positions, vertex_positions.length / vertex_positions_stride, vertex_positions_stride * 4);\n\t\t},\n\t\tcomputeSphereBounds: function (positions, positions_stride, radii, radii_stride) {\n\t\t\tassert(positions instanceof Float32Array);\n\t\t\tassert(positions.length % positions_stride == 0);\n\t\t\tassert(positions_stride >= 3);\n\t\t\tassert(!radii || radii instanceof Float32Array);\n\t\t\tassert(!radii || radii.length % radii_stride == 0);\n\t\t\tassert(!radii || radii_stride >= 1);\n\t\t\tassert(!radii || positions.length / positions_stride == radii.length / radii_stride);\n\n\t\t\tradii_stride = radii_stride || 0;\n\n\t\t\treturn computeSphereBounds(positions, positions.length / positions_stride, positions_stride * 4, radii, radii_stride * 4);\n\t\t},\n\t};\n})();\n\nexport { MeshoptClusterizer };\n","\n  /*!\n  * ol-contextmenu - v5.5.0\n  * https://github.com/jonataswalker/ol-contextmenu\n  * Built: Wed Aug 07 2024 12:29:18 GMT+0000 (Coordinated Universal Time)\n  */\n\nvar k = Object.defineProperty;\nvar I = (n, t, e) => t in n ? k(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;\nvar a = (n, t, e) => I(n, typeof t != \"symbol\" ? t + \"\" : t, e);\nimport O from \"ol/control/Control\";\nimport D from \"ol/MapBrowserEvent\";\nvar S = { exports: {} };\nfunction x() {\n}\nx.prototype = {\n  on: function(n, t, e) {\n    var s = this.e || (this.e = {});\n    return (s[n] || (s[n] = [])).push({\n      fn: t,\n      ctx: e\n    }), this;\n  },\n  once: function(n, t, e) {\n    var s = this;\n    function o() {\n      s.off(n, o), t.apply(e, arguments);\n    }\n    return o._ = t, this.on(n, o, e);\n  },\n  emit: function(n) {\n    var t = [].slice.call(arguments, 1), e = ((this.e || (this.e = {}))[n] || []).slice(), s = 0, o = e.length;\n    for (s; s < o; s++)\n      e[s].fn.apply(e[s].ctx, t);\n    return this;\n  },\n  off: function(n, t) {\n    var e = this.e || (this.e = {}), s = e[n], o = [];\n    if (s && t)\n      for (var i = 0, l = s.length; i < l; i++)\n        s[i].fn !== t && s[i].fn._ !== t && o.push(s[i]);\n    return o.length ? e[n] = o : delete e[n], this;\n  }\n};\nS.exports = x;\nvar _ = S.exports.TinyEmitter = x, L = /* @__PURE__ */ ((n) => (n.CONTEXTMENU = \"contextmenu\", n.CLICK = \"click\", n.DBLCLICK = \"dblclick\", n))(L || {}), p = /* @__PURE__ */ ((n) => (n.BEFOREOPEN = \"beforeopen\", n.OPEN = \"open\", n.CLOSE = \"close\", n.ADD_MENU_ENTRY = \"add-menu-entry\", n))(p || {});\nclass w extends D {\n  constructor(t) {\n    super(t.type, t.map, t.originalEvent);\n  }\n}\nconst z = {\n  width: 150,\n  scrollAt: 4,\n  eventType: L.CONTEXTMENU,\n  defaultItems: !0,\n  items: []\n}, d = \"ol-ctx-menu\", r = {\n  namespace: d,\n  container: `${d}-container`,\n  separator: `${d}-separator`,\n  submenu: `${d}-submenu`,\n  hidden: `${d}-hidden`,\n  icon: `${d}-icon`,\n  zoomIn: `${d}-zoom-in`,\n  zoomOut: `${d}-zoom-out`,\n  unselectable: \"ol-unselectable\"\n}, C = [\n  {\n    text: \"Zoom In\",\n    classname: `${r.zoomIn} ${r.icon}`,\n    callback: (n, t) => {\n      const e = t.getView();\n      e.animate({\n        zoom: Number(e.getZoom()) + 1,\n        duration: 700,\n        center: n.coordinate\n      });\n    }\n  },\n  {\n    text: \"Zoom Out\",\n    classname: `${r.zoomOut} ${r.icon}`,\n    callback: (n, t) => {\n      const e = t.getView();\n      e.animate({\n        zoom: Number(e.getZoom()) - 1,\n        duration: 700,\n        center: n.coordinate\n      });\n    }\n  }\n];\nfunction y(n) {\n  const t = document.createDocumentFragment(), e = document.createElement(\"div\");\n  for (e.innerHTML = n; e.firstChild; )\n    t.append(e.firstChild);\n  return t;\n}\nfunction P(n) {\n  const t = document.importNode(n), e = n.offsetWidth;\n  t.style.cssText = `position: fixed; top: 0; left: 0; overflow: auto; visibility: hidden; pointer-events: none; height: unset; max-height: unset; width: ${e}px`;\n  const s = y(\"<span>Foo</span>\"), o = y(\"<span>Foo</span>\"), i = document.createElement(\"li\"), l = document.createElement(\"li\");\n  i.append(s), l.append(o), t.append(i), t.append(l), n.parentNode?.append(t);\n  const c = t.offsetHeight / 2;\n  return n.parentNode?.removeChild(t), c;\n}\nfunction N({\n  parentNode: n,\n  item: t,\n  isSubmenu: e = !1,\n  isInsideSubmenu: s = !1,\n  emitter: o\n}) {\n  const i = `_${Math.random().toString(36).slice(2, 11)}`;\n  if (typeof t != \"string\" && \"text\" in t) {\n    const E = `<span>${t.text}</span>`, m = y(E), u = document.createElement(\"li\");\n    t.classname = t.classname || \"\", t.icon && (t.classname === \"\" ? t.classname = r.icon : t.classname.includes(r.icon) === !1 && (t.classname += ` ${r.icon}`), u.setAttribute(\"style\", `background-image:url(${t.icon})`)), u.id = i, u.className = t.classname, u.append(m), n.append(u);\n    const v = {\n      id: i,\n      isSubmenu: e,\n      isInsideSubmenu: s,\n      isSeparator: !1,\n      callback: \"callback\" in t ? t.callback : null,\n      data: \"data\" in t ? t.data : null\n    };\n    return o.emit(p.ADD_MENU_ENTRY, v, u), u;\n  }\n  const l = `<li id=\"${i}\" class=\"${r.separator}\"><hr></li>`, c = y(l);\n  n.append(c);\n  const f = n.lastChild, g = {\n    id: i,\n    isSubmenu: !1,\n    isInsideSubmenu: !1,\n    isSeparator: !0,\n    callback: null,\n    data: null\n  };\n  return o.emit(p.ADD_MENU_ENTRY, g, f), f;\n}\nfunction M({\n  container: n,\n  items: t,\n  menuWidth: e,\n  isInsideSubmenu: s,\n  emitter: o\n}) {\n  t.forEach((i) => {\n    if (typeof i != \"string\" && \"items\" in i && Array.isArray(i.items)) {\n      const l = N({ parentNode: n, item: i, isSubmenu: !0, emitter: o });\n      l.classList.add(r.submenu);\n      const c = document.createElement(\"ul\");\n      c.classList.add(r.container), c.style.width = `${e}px`, l.append(c), M({\n        emitter: o,\n        menuWidth: e,\n        container: c,\n        items: i.items,\n        isInsideSubmenu: !0\n      });\n    } else\n      N({\n        parentNode: n,\n        item: i,\n        isSubmenu: !1,\n        isInsideSubmenu: s,\n        emitter: o\n      });\n  });\n}\nfunction b(n, t) {\n  if (!n) throw new Error(t);\n}\nclass R extends O {\n  constructor(e = {}) {\n    b(typeof e == \"object\", \"@param `opts` should be object type!\");\n    const s = document.createElement(\"div\");\n    super({ element: s });\n    a(this, \"map\");\n    a(this, \"emitter\", new _());\n    a(this, \"container\");\n    a(this, \"coordinate\", []);\n    a(this, \"pixel\", []);\n    a(this, \"contextMenuEventListener\");\n    a(this, \"entryCallbackEventListener\");\n    a(this, \"mapMoveListener\");\n    a(this, \"lineHeight\", 0);\n    a(this, \"disabled\");\n    a(this, \"opened\");\n    a(this, \"items\", []);\n    a(this, \"menuEntries\", /* @__PURE__ */ new Map());\n    a(this, \"options\");\n    this.options = { ...z, ...e };\n    const o = document.createElement(\"ul\");\n    s.append(o), s.style.width = `${this.options.width}px`, s.classList.add(\n      r.container,\n      r.unselectable,\n      r.hidden\n    ), this.container = s, this.contextMenuEventListener = (i) => {\n      this.handleContextMenu(i);\n    }, this.entryCallbackEventListener = (i) => {\n      this.handleEntryCallback(i);\n    }, this.mapMoveListener = () => {\n      this.handleMapMove();\n    }, this.disabled = !1, this.opened = !1, window.addEventListener(\n      \"beforeunload\",\n      () => {\n        this.removeListeners();\n      },\n      { once: !0 }\n    );\n  }\n  clear() {\n    for (const e of this.menuEntries.keys())\n      this.removeMenuEntry(e);\n    this.container.replaceChildren(), this.container.append(document.createElement(\"ul\"));\n  }\n  enable() {\n    this.disabled = !1;\n  }\n  disable() {\n    this.disabled = !0;\n  }\n  getDefaultItems() {\n    return C;\n  }\n  countItems() {\n    return this.menuEntries.size;\n  }\n  extend(e) {\n    b(Array.isArray(e), \"@param `items` should be an Array.\"), M({\n      items: e,\n      emitter: this.emitter,\n      menuWidth: this.options.width,\n      container: this.container.firstElementChild\n    });\n  }\n  closeMenu() {\n    this.opened = !1, this.container.classList.add(r.hidden), this.dispatchEvent(p.CLOSE);\n  }\n  isOpen() {\n    return this.opened;\n  }\n  updatePosition(e) {\n    b(Array.isArray(e), \"@param `pixel` should be an Array.\"), this.isOpen() && (this.pixel = e, this.positionContainer());\n  }\n  pop() {\n    const e = Array.from(this.menuEntries.keys()).pop();\n    e && this.removeMenuEntry(e);\n  }\n  shift() {\n    const e = Array.from(this.menuEntries.keys()).shift();\n    e && this.removeMenuEntry(e);\n  }\n  push(e) {\n    e && this.extend([e]);\n  }\n  setMap(e) {\n    if (super.setMap(e), e) {\n      this.map = e, e.getViewport().addEventListener(\n        this.options.eventType,\n        this.contextMenuEventListener,\n        !1\n      ), e.on(\"movestart\", () => {\n        this.handleMapMove();\n      }), this.emitter.on(\n        p.ADD_MENU_ENTRY,\n        (o, i) => {\n          this.handleAddMenuEntry(o, i);\n        },\n        this\n      ), this.items = this.options.defaultItems ? this.options.items.concat(C) : this.options.items, M({\n        items: this.items,\n        emitter: this.emitter,\n        menuWidth: this.options.width,\n        container: this.container.firstElementChild\n      });\n      const s = this.getMenuEntriesLength();\n      this.lineHeight = s > 0 ? this.container.offsetHeight / s : P(this.container);\n    } else\n      this.removeListeners(), this.clear();\n  }\n  removeListeners() {\n    this.map.getViewport().removeEventListener(this.options.eventType, this.contextMenuEventListener, !1), this.emitter.off(p.ADD_MENU_ENTRY);\n  }\n  removeMenuEntry(e) {\n    let s = document.getElementById(e);\n    s?.remove(), s = null, this.menuEntries.delete(e);\n  }\n  handleContextMenu(e) {\n    this.coordinate = this.map.getEventCoordinate(e), this.pixel = this.map.getEventPixel(e), this.dispatchEvent(\n      new w({\n        map: this.map,\n        originalEvent: e,\n        type: p.BEFOREOPEN\n      })\n    ), !this.disabled && (this.options.eventType === L.CONTEXTMENU && (e.stopPropagation(), e.preventDefault()), setTimeout(() => {\n      this.openMenu(e);\n    }), e.target?.addEventListener(\n      \"pointerdown\",\n      (s) => {\n        this.opened && (s.stopPropagation(), this.closeMenu());\n      },\n      { once: !0 }\n    ));\n  }\n  openMenu(e) {\n    this.opened = !0, this.positionContainer(), this.container.classList.remove(r.hidden), this.dispatchEvent(\n      new w({\n        map: this.map,\n        originalEvent: e,\n        type: p.OPEN\n      })\n    );\n  }\n  getMenuEntriesLength() {\n    return Array.from(this.menuEntries).filter(\n      ([, e]) => e.isSeparator === !1 && e.isSubmenu === !1 && e.isInsideSubmenu === !1\n    ).length;\n  }\n  positionContainer() {\n    const e = this.map.getSize() || [0, 0], s = {\n      w: e[0] - this.pixel[0],\n      h: e[1] - this.pixel[1]\n    }, o = this.getMenuEntriesLength(), i = {\n      w: this.container.offsetWidth,\n      // a cheap way to recalculate container height\n      // since offsetHeight is like cached\n      h: Math.round(this.lineHeight * o)\n    }, l = s.w >= i.w ? this.pixel[0] + 5 : this.pixel[0] - i.w;\n    this.container.style.left = `${l}px`, this.container.style.top = s.h >= i.h ? `${this.pixel[1] - 10}px` : `${this.pixel[1] - i.h}px`, this.container.style.right = \"auto\", this.container.style.bottom = \"auto\", s.w -= i.w;\n    const c = (E) => Array.from(E.children).filter(\n      (m) => m.tagName === \"LI\" && m.classList.contains(r.submenu)\n    );\n    let f = 0;\n    const g = (E, m) => {\n      f += 1, c(E).forEach((v) => {\n        const A = m >= i.w ? i.w - 8 : (i.w + 8) * -1, h = v.querySelector(\n          `ul.${r.container}`\n        ), $ = Math.round(\n          this.lineHeight * Array.from(h.children).filter((T) => T.tagName === \"LI\").length\n        );\n        h.style.left = `${A}px`, h.style.right = \"auto\", h.style.top = s.h >= $ + i.h ? \"0\" : `-${h.offsetHeight - 25}px`, h.style.bottom = \"auto\", h.style.zIndex = String(f), c(h).length > 0 && g(h, m - i.w);\n      });\n    };\n    g(this.container.firstElementChild, s.w);\n  }\n  handleMapMove() {\n    this.closeMenu();\n  }\n  handleEntryCallback(e) {\n    e.preventDefault(), e.stopPropagation();\n    const s = e.currentTarget, o = this.menuEntries.get(s.id);\n    if (!o) return;\n    const i = {\n      data: o.data,\n      coordinate: this.coordinate\n    };\n    this.closeMenu(), o.callback?.(i, this.map);\n  }\n  handleAddMenuEntry(e, s) {\n    this.menuEntries.set(e.id, e), this.positionContainer(), \"callback\" in e && typeof e.callback == \"function\" && s.addEventListener(\"click\", this.entryCallbackEventListener, !1);\n  }\n}\nexport {\n  R as default\n};\n","/*\tCopyright (c) 2016 Jean-Marc VIGLINO,\n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport ol_control_Control from 'ol/control/Control.js'\nimport { getUid as ol_util_getUid } from 'ol/util.js'\n\n/** Control bar for OL3\n * The control bar is a container for other controls. It can be used to create toolbars.\n * Control bars can be nested and combined with ol.control.Toggle to handle activate/deactivate.\n * @class\n * @constructor\n * @fires control:active\n * @fires control:add\n * @extends ol_control_Control\n * @param {Object=} options Control options.\n *  @param {String} [options.id] button id, default generate a unique id\n *  @param {String} [options.className] class of the control\n *  @param {boolean} [options.group=false] is a group, default false\n *  @param {boolean} [options.toggleOne=false] only one toggle control is active at a time, default false\n *  @param {boolean} [options.autoDeactivate=false] used with subbar to deactivate all control when top level control deactivate, default false\n *  @param { Array<ol_control_Control> } [options.controls] a list of control to add to the bar\n *  @param {Object} [options.attributes] key value attributes to set on the button element\n */\nvar ol_control_Bar = class olcontrolBar extends ol_control_Control {\n  constructor(options) {\n    options = options || {};\n    var element = document.createElement('div');\n\n    element.classList.add('ol-unselectable', 'ol-control', 'ol-bar');\n    if (options.className) {\n      var classes = options.className.split(' ').filter(function (className) {\n        return className.length > 0;\n      });\n      element.classList.add.apply(element.classList, classes);\n    }\n    if (options.group) element.classList.add('ol-group');\n\n    super({\n      element: element,\n      target: options.target\n    });\n\n    if (options.id) {\n      this.element.setAttribute('id', options.id);\n    } else {\n      this.element.setAttribute('id', 'ol-bar-' + ol_util_getUid(this));\n    }\n    this.set('toggleOne', options.toggleOne);\n    this.set('autoDeactivate', options.autoDeactivate);\n\n    this.controls_ = [];\n    if (options.controls instanceof Array) {\n      for (var i = 0; i < options.controls.length; i++) {\n        this.addControl(options.controls[i]);\n      }\n    }\n    // Set attributes on the element\n    for (var k in options.attributes || {}) {\n      this.element.setAttribute(k, options.attributes[k]);\n    }\n  }\n  /** Set the control visibility\n   * @param {boolean} val\n   */\n  setVisible(val) {\n    if (val) {\n      this.element.style.display = '';\n    } else {\n      this.element.style.display = 'none';\n    }\n  }\n  /** Get the control visibility\n   * @return {boolean} b\n   */\n  getVisible() {\n    return this.element.style.display != 'none';\n  }\n  /**\n   * Set the map instance the control is associated with\n   * and add its controls associated to this map.\n   * @param {ol_Map} map The map instance.\n   */\n  setMap(map) {\n    super.setMap(map);\n\n    for (var i = 0; i < this.controls_.length; i++) {\n      var c = this.controls_[i];\n      // map.addControl(c);\n      c.setMap(map);\n    }\n  }\n  /** Get controls in the panel\n   *\t@param {Array<ol_control_Control>}\n   */\n  getControls() {\n    return this.controls_;\n  }\n  /** Set tool bar position\n   * @param {string} pos a combinaison of top|left|bottom|right separated with -\n   */\n  setPosition(pos) {\n    this.element.classList.remove('ol-left', 'ol-top', 'ol-bottom', 'ol-right');\n    pos = pos.split('-');\n    for (var i = 0; i < pos.length; i++) {\n      switch (pos[i]) {\n        case 'top':\n        case 'left':\n        case 'bottom':\n        case 'right':\n          this.element.classList.add(\"ol-\" + pos[i]);\n          break;\n        default: break;\n      }\n    }\n  }\n  /** Add a control to the bar\n   *\t@param {ol_control_Control} c control to add\n   */\n  addControl(c) {\n    this.controls_.push(c);\n    c.setTarget(this.element);\n    if (this.getMap()) {\n      this.getMap().addControl(c);\n    }\n    // Activate and toogleOne\n    if (c._activateBar) c.un('change:active', c._activateBar);\n    c._activateBar = function (e) { this.onActivateControl_(e, c); }.bind(this);\n    c.on('change:active', c._activateBar);\n    if (c.getActive) {\n      // c.dispatchEvent({ type:'change:active', key:'active', oldValue:false, active:true });\n      this.onActivateControl_({ target: c, active: c.getActive() }, c);\n    }\n  }\n  /** Remove a control from the bar\n   *\t@param {ol_control_Control} c control to remove\n   */\n  removeControl(c) {\n    const index = this.controls_.indexOf(c);\n    if (index > -1) {\n      this.controls_.splice(index, 1);\n      if (this.getMap()) {\n        this.getMap().removeControl(c);\n      }\n      // remove and toogleOne\n      if (c._activateBar) c.un('change:active', c._activateBar);\n      delete c._activateBar;\n    }\n  }\n  /** Deativate all controls in a bar\n   * @param {ol_control_Control} [except] a control\n   */\n  deactivateControls(except) {\n    for (var i = 0; i < this.controls_.length; i++) {\n      if (this.controls_[i] !== except && this.controls_[i].setActive) {\n        this.controls_[i].setActive(false);\n      }\n    }\n  }\n  /** Get active control in the bar\n   * @returns {Array<ol_control_Control>}\n   */\n  getActiveControls() {\n    var active = [];\n    for (var i = 0, c; c = this.controls_[i]; i++) {\n      if (c.getActive && c.getActive())\n        active.push(c);\n    }\n    return active;\n  }\n  /** Auto activate/deactivate controls in the bar\n   * @param {boolean} b activate/deactivate\n   */\n  setActive(b) {\n    if (!b && this.get(\"autoDeactivate\")) {\n      this.deactivateControls();\n    }\n    if (b) {\n      var ctrls = this.getControls();\n      for (var i = 0, sb; (sb = ctrls[i]); i++) {\n        if (sb.get(\"autoActivate\"))\n          sb.setActive(true);\n      }\n    }\n  }\n  /** Post-process an activated/deactivated control\n   * @param {ol.event} e :an object with a target {_ol_control_} and active flag {bool}\n   * @private\n   */\n  onActivateControl_(e, ctrl) {\n    if (this.get('toggleOne')) {\n      if (e.active) {\n        var n;\n        //var ctrl = e.target;\n        for (n = 0; n < this.controls_.length; n++) {\n          if (this.controls_[n] === ctrl)\n            break;\n        }\n        // Not here!\n        if (n == this.controls_.length)\n          return;\n        this.deactivateControls(this.controls_[n]);\n      } else {\n        // No one active > test auto activate\n        if (!this.getActiveControls().length) {\n          for (var i = 0, c; c = this.controls_[i]; i++) {\n            if (c.get(\"autoActivate\")) {\n              c.setActive(true);\n              break;\n            }\n          }\n        }\n      }\n    }\n    if (e.type) {\n      this.dispatchEvent({ type: 'control:active', control: ctrl, active: e.active })\n    } else {\n      this.dispatchEvent({ type: 'control:add', control: ctrl, active: e.active })\n    }\n  }\n  /**\n   * @param {string} name of the control to search\n   * @return {ol.control.Control}\n   */\n  getControlsByName(name) {\n    var controls = this.getControls();\n    return controls.filter(\n      function (control) {\n        return (control.get('name') === name);\n      }\n    );\n  }\n}\n\nexport default ol_control_Bar\n","/*\tCopyright (c) 2016 Jean-Marc VIGLINO,\n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport ol_control_Control from 'ol/control/Control.js'\nimport { getUid as ol_util_getUid } from 'ol/util.js'\n\nimport ol_ext_element from '../util/element.js'\n\n/** A simple push button control\n * @constructor\n * @extends {ol_control_Control}\n * @param {Object=} options Control options.\n *  @param {String} [options.id] button id, default generate a unique id\n *  @param {String} [options.className] class of the control\n *  @param {String} [options.classButton] class of the button\n *  @param {String} [options.title] title of the control\n *  @param {String} [options.name] an optional name, default none\n *  @param {String} [options.html] html to insert in the control\n *  @param {function} [options.handleClick] callback when control is clicked (or use change:active event)\n *  @param {Object} [options.attributes] key value attributes to set on the button element\n */\nvar ol_control_Button = class olcontrolButton extends ol_control_Control {\n  constructor(options) {\n    options = options || {};\n\n    var element = document.createElement('div');\n    element.className = (options.className || '') + \" ol-button ol-unselectable ol-control\";\n    super({\n      element: element,\n      target: options.target\n    });\n\n    var self = this;\n\n    var bt = this.button_ = document.createElement(/ol-text-button/.test(options.className) ? \"div\" : \"button\");\n    // Button id\n    if (options.id) {\n      bt.setAttribute('id', options.id);\n    } else {\n      bt.setAttribute('id', 'ol-button-' + ol_util_getUid(this));\n    }\n\n    this.button_.className = options.classButton || '';\n    bt.type = \"button\";\n    if (options.title) {\n      bt.title = options.title;\n    }\n    if (options.name) {\n      bt.name = options.name;\n    }\n    if (options.html instanceof Element){\n      bt.appendChild(options.html);\n    } else {\n      bt.innerHTML = options.html || \"\";\n    }\n    var evtFunction = function (e) {\n      if (e && e.preventDefault) {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      if (options.handleClick) {\n        options.handleClick.call(self, e);\n      }\n    };\n    bt.addEventListener(\"click\", evtFunction);\n    // bt.addEventListener(\"touchstart\", evtFunction);\n    element.appendChild(bt);\n\n    // Try to get a title in the button content\n    if (!options.title && bt.firstElementChild) {\n      bt.title = bt.firstElementChild.title;\n    }\n\n    // Set the control properties\n    if (options.title) {\n      this.set(\"title\", options.title);\n    }\n    if (options.title) {\n      this.set(\"title\", options.title);\n    }\n    if (options.name) {\n      this.set(\"name\", options.name);\n    }\n    // Set button element attributes\n    for (var p in options.attributes || {}) {\n      this.button_.setAttribute(p, options.attributes[p]);\n    }\n  }\n  /** Set the control visibility\n  * @param {boolean} b\n  */\n  setVisible(val) {\n    if (val) {\n      ol_ext_element.show(this.element);\n    } else {\n      ol_ext_element.hide(this.element);\n    }\n  }\n  /**\n   * Test if the control is disabled.\n   * @return {bool}\n   * @api stable\n   */\n  getDisable() {\n    var button = this.element.querySelector('button');\n    return button && button.disabled;\n  }\n  /** Disable the control button. \n   * @param {bool} b disable (or enable) the control, default false (enable)\n   * @api stable\n   */\n  setDisable(b) {\n    if (this.getDisable() == b) return;\n    this.element.querySelector('button').disabled = b;\n  }\n  /**\n   * Set the button title\n   * @param {string} title\n   */\n  setTitle(title) {\n    this.button_.setAttribute('title', title);\n  }\n  /**\n   * Set the button html\n   * @param {string} html\n   */\n  setHtml(html) {\n    ol_ext_element.setHTML(this.button_, html);\n  }\n  /**\n   * Get the button element\n   * @returns {Element}\n   */\n  getButtonElement() {\n    return this.button_;\n  }\n}\n\nexport default ol_control_Button\n","/**\n * @module ol/render/webgl/MixedGeometryBatch\n */\nimport {inflateEnds} from '../../geom/flat/orient.js';\nimport RenderFeature from '../../render/Feature.js';\nimport {getUid} from '../../util.js';\n\n/**\n * @typedef {import(\"../../Feature.js\").default} Feature\n */\n/**\n * @typedef {import(\"../../geom/Geometry.js\").Type} GeometryType\n */\n\n/**\n * @typedef {Object} GeometryBatchItem Object that holds a reference to a feature as well as the raw coordinates of its various geometries\n * @property {Feature|RenderFeature} feature Feature\n * @property {Array<Array<number>>} flatCoordss Array of flat coordinates arrays, one for each geometry related to the feature\n * @property {number} [verticesCount] Only defined for linestring and polygon batches\n * @property {number} [ringsCount] Only defined for polygon batches\n * @property {Array<Array<number>>} [ringsVerticesCounts] Array of vertices counts in each ring for each geometry; only defined for polygons batches\n * @property {number} [ref] The reference in the global batch (used for hit detection)\n */\n\n/**\n * @typedef {PointGeometryBatch|LineStringGeometryBatch|PolygonGeometryBatch} GeometryBatch\n */\n\n/**\n * @typedef {Object} PolygonGeometryBatch A geometry batch specific to polygons\n * @property {Object<string, GeometryBatchItem>} entries Dictionary of all entries in the batch with associated computed values.\n * One entry corresponds to one feature. Key is feature uid.\n * @property {number} geometriesCount Amount of geometries in the batch.\n * @property {number} verticesCount Amount of vertices from geometries in the batch.\n * @property {number} ringsCount How many outer and inner rings in this batch.\n */\n\n/**\n * @typedef {Object} LineStringGeometryBatch A geometry batch specific to lines\n * @property {Object<string, GeometryBatchItem>} entries Dictionary of all entries in the batch with associated computed values.\n * One entry corresponds to one feature. Key is feature uid.\n * @property {number} geometriesCount Amount of geometries in the batch.\n * @property {number} verticesCount Amount of vertices from geometries in the batch.\n */\n\n/**\n * @typedef {Object} PointGeometryBatch A geometry batch specific to points\n * @property {Object<string, GeometryBatchItem>} entries Dictionary of all entries in the batch with associated computed values.\n * One entry corresponds to one feature. Key is feature uid.\n * @property {number} geometriesCount Amount of geometries in the batch.\n */\n\n/**\n * @classdesc This class is used to group several geometries of various types together for faster rendering.\n * Three inner batches are maintained for polygons, lines and points. Each time a feature is added, changed or removed\n * from the batch, these inner batches are modified accordingly in order to keep them up-to-date.\n *\n * A feature can be present in several inner batches, for example a polygon geometry will be present in the polygon batch\n * and its linear rings will be present in the line batch. Multi geometries are also broken down into individual geometries\n * and added to the corresponding batches in a recursive manner.\n *\n * Corresponding {@link module:ol/render/webgl/BatchRenderer} instances are then used to generate the render instructions\n * and WebGL buffers (vertices and indices) for each inner batches; render instructions are stored on the inner batches,\n * alongside the transform used to convert world coords to screen coords at the time these instructions were generated.\n * The resulting WebGL buffers are stored on the batches as well.\n *\n * An important aspect of geometry batches is that there is no guarantee that render instructions and WebGL buffers\n * are synchronized, i.e. render instructions can describe a new state while WebGL buffers might not have been written yet.\n * This is why two world-to-screen transforms are stored on each batch: one for the render instructions and one for\n * the WebGL buffers.\n */\nclass MixedGeometryBatch {\n  constructor() {\n    /**\n     * @private\n     */\n    this.globalCounter_ = 0;\n\n    /**\n     * Refs are used as keys for hit detection.\n     * @type {Map<number, Feature|RenderFeature>}\n     * @private\n     */\n    this.refToFeature_ = new Map();\n\n    /**\n     * Features are split in \"entries\", which are individual geometries. We use the following map to share a single ref for all those entries.\n     * @type {Map<string, number>}\n     * @private\n     */\n    this.uidToRef_ = new Map();\n\n    /**\n     * The precision in WebGL shaders is limited.\n     * To keep the refs as small as possible we maintain an array of freed up references.\n     * @type {Array<number>}\n     * @private\n     */\n    this.freeGlobalRef_ = [];\n\n    /**\n     * @type {PolygonGeometryBatch}\n     */\n    this.polygonBatch = {\n      entries: {},\n      geometriesCount: 0,\n      verticesCount: 0,\n      ringsCount: 0,\n    };\n\n    /**\n     * @type {PointGeometryBatch}\n     */\n    this.pointBatch = {\n      entries: {},\n      geometriesCount: 0,\n    };\n\n    /**\n     * @type {LineStringGeometryBatch}\n     */\n    this.lineStringBatch = {\n      entries: {},\n      geometriesCount: 0,\n      verticesCount: 0,\n    };\n  }\n\n  /**\n   * @param {Array<Feature|RenderFeature>} features Array of features to add to the batch\n   * @param {import(\"../../proj.js\").TransformFunction} [projectionTransform] Projection transform.\n   */\n  addFeatures(features, projectionTransform) {\n    for (let i = 0; i < features.length; i++) {\n      this.addFeature(features[i], projectionTransform);\n    }\n  }\n\n  /**\n   * @param {Feature|RenderFeature} feature Feature to add to the batch\n   * @param {import(\"../../proj.js\").TransformFunction} [projectionTransform] Projection transform.\n   */\n  addFeature(feature, projectionTransform) {\n    let geometry = feature.getGeometry();\n    if (!geometry) {\n      return;\n    }\n    if (projectionTransform) {\n      geometry = geometry.clone();\n      geometry.applyTransform(projectionTransform);\n    }\n    this.addGeometry_(geometry, feature);\n  }\n\n  /**\n   * @param {Feature|RenderFeature} feature Feature\n   * @return {GeometryBatchItem|void} the cleared entry\n   * @private\n   */\n  clearFeatureEntryInPointBatch_(feature) {\n    const featureUid = getUid(feature);\n    const entry = this.pointBatch.entries[featureUid];\n    if (!entry) {\n      return;\n    }\n    this.pointBatch.geometriesCount -= entry.flatCoordss.length;\n    delete this.pointBatch.entries[featureUid];\n    return entry;\n  }\n\n  /**\n   * @param {Feature|RenderFeature} feature Feature\n   * @return {GeometryBatchItem|void} the cleared entry\n   * @private\n   */\n  clearFeatureEntryInLineStringBatch_(feature) {\n    const featureUid = getUid(feature);\n    const entry = this.lineStringBatch.entries[featureUid];\n    if (!entry) {\n      return;\n    }\n    this.lineStringBatch.verticesCount -= entry.verticesCount;\n    this.lineStringBatch.geometriesCount -= entry.flatCoordss.length;\n    delete this.lineStringBatch.entries[featureUid];\n    return entry;\n  }\n\n  /**\n   * @param {Feature|RenderFeature} feature Feature\n   * @return {GeometryBatchItem|void} the cleared entry\n   * @private\n   */\n  clearFeatureEntryInPolygonBatch_(feature) {\n    const featureUid = getUid(feature);\n    const entry = this.polygonBatch.entries[featureUid];\n    if (!entry) {\n      return;\n    }\n    this.polygonBatch.verticesCount -= entry.verticesCount;\n    this.polygonBatch.ringsCount -= entry.ringsCount;\n    this.polygonBatch.geometriesCount -= entry.flatCoordss.length;\n    delete this.polygonBatch.entries[featureUid];\n    return entry;\n  }\n\n  /**\n   * @param {import(\"../../geom.js\").Geometry|RenderFeature} geometry Geometry\n   * @param {Feature|RenderFeature} feature Feature\n   * @private\n   */\n  addGeometry_(geometry, feature) {\n    const type = geometry.getType();\n    switch (type) {\n      case 'GeometryCollection': {\n        const geometries =\n          /** @type {import(\"../../geom.js\").GeometryCollection} */ (\n            geometry\n          ).getGeometriesArray();\n        for (const geometry of geometries) {\n          this.addGeometry_(geometry, feature);\n        }\n        break;\n      }\n      case 'MultiPolygon': {\n        const multiPolygonGeom =\n          /** @type {import(\"../../geom.js\").MultiPolygon} */ (geometry);\n        this.addCoordinates_(\n          type,\n          multiPolygonGeom.getFlatCoordinates(),\n          multiPolygonGeom.getEndss(),\n          feature,\n          getUid(feature),\n          multiPolygonGeom.getStride(),\n        );\n        break;\n      }\n      case 'MultiLineString': {\n        const multiLineGeom =\n          /** @type {import(\"../../geom.js\").MultiLineString|RenderFeature} */ (\n            geometry\n          );\n        this.addCoordinates_(\n          type,\n          multiLineGeom.getFlatCoordinates(),\n          multiLineGeom.getEnds(),\n          feature,\n          getUid(feature),\n          multiLineGeom.getStride(),\n        );\n        break;\n      }\n      case 'MultiPoint': {\n        const multiPointGeom =\n          /** @type {import(\"../../geom.js\").MultiPoint|RenderFeature} */ (\n            geometry\n          );\n        this.addCoordinates_(\n          type,\n          multiPointGeom.getFlatCoordinates(),\n          null,\n          feature,\n          getUid(feature),\n          multiPointGeom.getStride(),\n        );\n        break;\n      }\n      case 'Polygon': {\n        const polygonGeom =\n          /** @type {import(\"../../geom.js\").Polygon|RenderFeature} */ (\n            geometry\n          );\n        this.addCoordinates_(\n          type,\n          polygonGeom.getFlatCoordinates(),\n          polygonGeom.getEnds(),\n          feature,\n          getUid(feature),\n          polygonGeom.getStride(),\n        );\n        break;\n      }\n      case 'Point': {\n        const pointGeom = /** @type {import(\"../../geom.js\").Point} */ (\n          geometry\n        );\n        this.addCoordinates_(\n          type,\n          pointGeom.getFlatCoordinates(),\n          null,\n          feature,\n          getUid(feature),\n          pointGeom.getStride(),\n        );\n        break;\n      }\n      case 'LineString':\n      case 'LinearRing': {\n        const lineGeom = /** @type {import(\"../../geom.js\").LineString} */ (\n          geometry\n        );\n\n        const stride = lineGeom.getStride();\n\n        this.addCoordinates_(\n          type,\n          lineGeom.getFlatCoordinates(),\n          null,\n          feature,\n          getUid(feature),\n          stride,\n          lineGeom.getLayout?.(),\n        );\n        break;\n      }\n      default:\n      // pass\n    }\n  }\n\n  /**\n   * @param {GeometryType} type Geometry type\n   * @param {Array<number>} flatCoords Flat coordinates\n   * @param {Array<number> | Array<Array<number>> | null} ends Coordinate ends\n   * @param {Feature|RenderFeature} feature Feature\n   * @param {string} featureUid Feature uid\n   * @param {number} stride Stride\n   * @param {import('../../geom/Geometry.js').GeometryLayout} [layout] Layout\n   * @private\n   */\n  addCoordinates_(type, flatCoords, ends, feature, featureUid, stride, layout) {\n    /** @type {number} */\n    let verticesCount;\n    switch (type) {\n      case 'MultiPolygon': {\n        const multiPolygonEndss = /** @type {Array<Array<number>>} */ (ends);\n        for (let i = 0, ii = multiPolygonEndss.length; i < ii; i++) {\n          let polygonEnds = multiPolygonEndss[i];\n          const prevPolygonEnds = i > 0 ? multiPolygonEndss[i - 1] : null;\n          const startIndex = prevPolygonEnds\n            ? prevPolygonEnds[prevPolygonEnds.length - 1]\n            : 0;\n          const endIndex = polygonEnds[polygonEnds.length - 1];\n          polygonEnds =\n            startIndex > 0\n              ? polygonEnds.map((end) => end - startIndex)\n              : polygonEnds;\n          this.addCoordinates_(\n            'Polygon',\n            flatCoords.slice(startIndex, endIndex),\n            polygonEnds,\n            feature,\n            featureUid,\n            stride,\n            layout,\n          );\n        }\n        break;\n      }\n      case 'MultiLineString': {\n        const multiLineEnds = /** @type {Array<number>} */ (ends);\n        for (let i = 0, ii = multiLineEnds.length; i < ii; i++) {\n          const startIndex = i > 0 ? multiLineEnds[i - 1] : 0;\n          this.addCoordinates_(\n            'LineString',\n            flatCoords.slice(startIndex, multiLineEnds[i]),\n            null,\n            feature,\n            featureUid,\n            stride,\n            layout,\n          );\n        }\n        break;\n      }\n      case 'MultiPoint':\n        for (let i = 0, ii = flatCoords.length; i < ii; i += stride) {\n          this.addCoordinates_(\n            'Point',\n            flatCoords.slice(i, i + 2),\n            null,\n            feature,\n            featureUid,\n            null,\n            null,\n          );\n        }\n        break;\n      case 'Polygon': {\n        const polygonEnds = /** @type {Array<number>} */ (ends);\n        if (feature instanceof RenderFeature) {\n          const multiPolygonEnds = inflateEnds(flatCoords, polygonEnds);\n          if (multiPolygonEnds.length > 1) {\n            this.addCoordinates_(\n              'MultiPolygon',\n              flatCoords,\n              multiPolygonEnds,\n              feature,\n              featureUid,\n              stride,\n              layout,\n            );\n            return;\n          }\n        }\n        if (!this.polygonBatch.entries[featureUid]) {\n          this.polygonBatch.entries[featureUid] = this.addRefToEntry_(\n            featureUid,\n            {\n              feature: feature,\n              flatCoordss: [],\n              verticesCount: 0,\n              ringsCount: 0,\n              ringsVerticesCounts: [],\n            },\n          );\n        }\n        verticesCount = flatCoords.length / stride;\n        const ringsCount = ends.length;\n        const ringsVerticesCount = ends.map((end, ind, arr) =>\n          ind > 0 ? (end - arr[ind - 1]) / stride : end / stride,\n        );\n        this.polygonBatch.verticesCount += verticesCount;\n        this.polygonBatch.ringsCount += ringsCount;\n        this.polygonBatch.geometriesCount++;\n        this.polygonBatch.entries[featureUid].flatCoordss.push(\n          getFlatCoordinatesXY(flatCoords, stride),\n        );\n        this.polygonBatch.entries[featureUid].ringsVerticesCounts.push(\n          ringsVerticesCount,\n        );\n        this.polygonBatch.entries[featureUid].verticesCount += verticesCount;\n        this.polygonBatch.entries[featureUid].ringsCount += ringsCount;\n        for (let i = 0, ii = polygonEnds.length; i < ii; i++) {\n          const startIndex = i > 0 ? polygonEnds[i - 1] : 0;\n          this.addCoordinates_(\n            'LinearRing',\n            flatCoords.slice(startIndex, polygonEnds[i]),\n            null,\n            feature,\n            featureUid,\n            stride,\n            layout,\n          );\n        }\n        break;\n      }\n      case 'Point':\n        if (!this.pointBatch.entries[featureUid]) {\n          this.pointBatch.entries[featureUid] = this.addRefToEntry_(\n            featureUid,\n            {\n              feature: feature,\n              flatCoordss: [],\n            },\n          );\n        }\n        this.pointBatch.geometriesCount++;\n        this.pointBatch.entries[featureUid].flatCoordss.push(flatCoords);\n        break;\n      case 'LineString':\n      case 'LinearRing':\n        if (!this.lineStringBatch.entries[featureUid]) {\n          this.lineStringBatch.entries[featureUid] = this.addRefToEntry_(\n            featureUid,\n            {\n              feature: feature,\n              flatCoordss: [],\n              verticesCount: 0,\n            },\n          );\n        }\n        verticesCount = flatCoords.length / stride;\n        this.lineStringBatch.verticesCount += verticesCount;\n        this.lineStringBatch.geometriesCount++;\n        this.lineStringBatch.entries[featureUid].flatCoordss.push(\n          getFlatCoordinatesXYM(flatCoords, stride, layout),\n        );\n        this.lineStringBatch.entries[featureUid].verticesCount += verticesCount;\n        break;\n      default:\n      // pass\n    }\n  }\n\n  /**\n   * @param {string} featureUid Feature uid\n   * @param {GeometryBatchItem} entry The entry to add\n   * @return {GeometryBatchItem} the added entry\n   * @private\n   */\n  addRefToEntry_(featureUid, entry) {\n    const currentRef = this.uidToRef_.get(featureUid);\n\n    // the ref starts at 1 to distinguish from white color (no feature)\n    const ref =\n      currentRef || this.freeGlobalRef_.pop() || ++this.globalCounter_;\n    entry.ref = ref;\n    if (!currentRef) {\n      this.refToFeature_.set(ref, entry.feature);\n      this.uidToRef_.set(featureUid, ref);\n    }\n    return entry;\n  }\n\n  /**\n   * Return a ref to the pool of available refs.\n   * @param {number} ref the ref to return\n   * @param {string} featureUid the feature uid\n   * @private\n   */\n  removeRef_(ref, featureUid) {\n    if (!ref) {\n      throw new Error('This feature has no ref: ' + featureUid);\n    }\n    this.refToFeature_.delete(ref);\n    this.uidToRef_.delete(featureUid);\n    this.freeGlobalRef_.push(ref);\n  }\n\n  /**\n   * @param {Feature|RenderFeature} feature Feature\n   * @param {import(\"../../proj.js\").TransformFunction} [projectionTransform] Projection transform.\n   */\n  changeFeature(feature, projectionTransform) {\n    // the feature is not present in the batch; do not add it to avoid unexpected behaviors\n    if (!this.uidToRef_.get(getUid(feature))) {\n      return;\n    }\n    this.removeFeature(feature);\n    let geometry = feature.getGeometry();\n    if (!geometry) {\n      return;\n    }\n    if (projectionTransform) {\n      geometry = geometry.clone();\n      geometry.applyTransform(projectionTransform);\n    }\n    this.addGeometry_(geometry, feature);\n  }\n\n  /**\n   * @param {Feature|RenderFeature} feature Feature\n   */\n  removeFeature(feature) {\n    let entry = this.clearFeatureEntryInPointBatch_(feature);\n    entry = this.clearFeatureEntryInPolygonBatch_(feature) || entry;\n    entry = this.clearFeatureEntryInLineStringBatch_(feature) || entry;\n    if (entry) {\n      this.removeRef_(entry.ref, getUid(entry.feature));\n    }\n  }\n\n  clear() {\n    this.polygonBatch.entries = {};\n    this.polygonBatch.geometriesCount = 0;\n    this.polygonBatch.verticesCount = 0;\n    this.polygonBatch.ringsCount = 0;\n    this.lineStringBatch.entries = {};\n    this.lineStringBatch.geometriesCount = 0;\n    this.lineStringBatch.verticesCount = 0;\n    this.pointBatch.entries = {};\n    this.pointBatch.geometriesCount = 0;\n    this.globalCounter_ = 0;\n    this.freeGlobalRef_ = [];\n    this.refToFeature_.clear();\n    this.uidToRef_.clear();\n  }\n\n  /**\n   * Resolve the feature associated to a ref.\n   * @param {number} ref Hit detected ref\n   * @return {Feature|RenderFeature} feature\n   */\n  getFeatureFromRef(ref) {\n    return this.refToFeature_.get(ref);\n  }\n\n  isEmpty() {\n    return this.globalCounter_ === 0;\n  }\n\n  /**\n   * Will return a new instance of this class that only contains the features\n   * for which the provided callback returned true\n   * @param {function((Feature|RenderFeature)): boolean} featureFilter Feature filter callback\n   * @return {MixedGeometryBatch} Filtered geometry batch\n   */\n  filter(featureFilter) {\n    const filtered = new MixedGeometryBatch();\n    filtered.globalCounter_ = this.globalCounter_;\n    filtered.uidToRef_ = this.uidToRef_;\n    filtered.refToFeature_ = this.refToFeature_;\n    let empty = true;\n    for (const feature of this.refToFeature_.values()) {\n      if (featureFilter(feature)) {\n        filtered.addFeature(feature);\n        empty = false;\n      }\n    }\n    // no feature was added at all; simply return an empty batch for consistency downstream\n    if (empty) {\n      return new MixedGeometryBatch();\n    }\n    return filtered;\n  }\n}\n\n/**\n * @param {Array<number>} flatCoords Flat coords\n * @param {number} stride Stride\n * @return {Array<number>} Flat coords with only XY components\n */\nfunction getFlatCoordinatesXY(flatCoords, stride) {\n  if (stride === 2) {\n    return flatCoords;\n  }\n  return flatCoords.filter((v, i) => i % stride < 2);\n}\n\n/**\n * @param {Array<number>} flatCoords Flat coords\n * @param {number} stride Stride\n * @param {string} layout Layout\n * @return {Array<number>} Flat coords with only XY components\n */\nfunction getFlatCoordinatesXYM(flatCoords, stride, layout) {\n  if (stride === 3 && layout === 'XYM') {\n    return flatCoords;\n  }\n  // this is XYZM layout\n  if (stride === 4) {\n    return flatCoords.filter((v, i) => i % stride !== 2);\n  }\n  // this is XYZ layout\n  if (stride === 3) {\n    return flatCoords.map((v, i) => (i % stride !== 2 ? v : 0));\n  }\n  // this is XY layout\n  return new Array(flatCoords.length * 1.5)\n    .fill(0)\n    .map((v, i) => (i % 3 === 2 ? 0 : flatCoords[Math.round(i / 1.5)]));\n}\n\nexport default MixedGeometryBatch;\n","/**\n * @module ol/webgl/LabelsArray\n */\n\nconst textEncoder = new TextEncoder();\n\n// the underlying typed array will be resized in increments of this amount of bytes\nconst chunkSize = 100_000;\n\n/**\n * @classdesc\n * This class stores text values using typed arrays internally.\n * Labels are stored as separate UTF-8 characters in a single Uint8Array.\n * The Uint8Array is resized when the capacity exceeds to avoid costly concatenation.\n */\nclass LabelsArray {\n  constructor() {\n    /**\n     * @private\n     */\n    this.array_ = new Uint8Array(chunkSize);\n\n    this.actualSize_ = 0;\n\n    /**\n     * @type {Map<string, Array<number>>}\n     * @private\n     */\n    this.labelPositionMap_ = new Map();\n  }\n\n  /**\n   * @param {string} label Label to append to the end of the array\n   * @return {Array<number>} An array containing 1/ the position of the label in the typed array and 2/ the size of the label in the array\n   */\n  push(label) {\n    if (label === '') {\n      return [0, 0];\n    }\n    if (this.labelPositionMap_.has(label)) {\n      return /** @type {Array<number>} */ (this.labelPositionMap_.get(label));\n    }\n    const encoded = textEncoder.encode(label);\n    if (this.actualSize_ + encoded.length > this.array_.length) {\n      const newArray = new Uint8Array(this.array_.length + chunkSize);\n      newArray.set(this.array_);\n      this.array_ = newArray;\n    }\n    const position = this.actualSize_;\n    this.array_.set(encoded, position);\n    this.actualSize_ += encoded.length;\n    const result = [position, encoded.length];\n    this.labelPositionMap_.set(label, result);\n    return result;\n  }\n\n  /**\n   * @return {Uint8Array} Typed array containing the encoded labels.\n   */\n  getArray() {\n    return this.array_;\n  }\n}\n\nexport default LabelsArray;\n","/**\n * @module ol/render/webgl/renderinstructions\n */\nimport {\n  getStringNumberEquivalent,\n  UNDEFINED_PROP_VALUE,\n} from '../../expr/gpu.js';\nimport {transform2D} from '../../geom/flat/transform.js';\nimport {apply as applyTransform} from '../../transform.js';\n\n/**\n * @param {Float32Array} renderInstructions Render instructions\n * @param {import('../../webgl/LabelsArray.js').default} labels Typed array of the values of string attributes, encoded as UTF-8 and appended next to each other\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes\n * @param {import(\"./MixedGeometryBatch.js\").GeometryBatchItem} batchEntry Batch item\n * @param {number} currentIndex Current index\n * @return {number} The amount of values pushed\n */\nfunction pushCustomAttributesInRenderInstructions(\n  renderInstructions,\n  labels,\n  customAttributes,\n  batchEntry,\n  currentIndex,\n) {\n  let shift = 0;\n  for (const key in customAttributes) {\n    const attr = customAttributes[key];\n    const value = attr.callback.call(batchEntry, batchEntry.feature);\n    if (typeof value === 'string') {\n      const [labelPosition, labelLength] = labels.push(value);\n      renderInstructions[currentIndex + shift++] =\n        getStringNumberEquivalent(value);\n      renderInstructions[currentIndex + shift++] = labelPosition;\n      renderInstructions[currentIndex + shift++] = labelLength;\n      continue;\n    }\n    let first = value?.[0] ?? value;\n    if (first === UNDEFINED_PROP_VALUE) {\n      console.warn('The \"has\" operator might return false positives.'); // eslint-disable-line no-console\n    }\n    if (first === undefined) {\n      first = UNDEFINED_PROP_VALUE;\n    } else if (first === null) {\n      first = 0;\n    }\n    renderInstructions[currentIndex + shift++] = first;\n    if (!attr.size || attr.size === 1) {\n      continue;\n    }\n    renderInstructions[currentIndex + shift++] =\n      value?.[1] ?? UNDEFINED_PROP_VALUE;\n    if (attr.size < 3) {\n      continue;\n    }\n    renderInstructions[currentIndex + shift++] =\n      value?.[2] ?? UNDEFINED_PROP_VALUE;\n    if (attr.size < 4) {\n      continue;\n    }\n    renderInstructions[currentIndex + shift++] =\n      value?.[3] ?? UNDEFINED_PROP_VALUE;\n  }\n  return shift;\n}\n\n/**\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes\n * @return {number} Cumulated size of all attributes\n */\nexport function getCustomAttributesSize(customAttributes) {\n  return Object.keys(customAttributes).reduce(\n    (prev, curr) => prev + (customAttributes[curr].size || 1),\n    0,\n  );\n}\n\n/**\n * Render instructions for lines are structured like so:\n * [ x0, y0, customAttr0, ... , xN, yN, customAttrN ]\n * @param {import(\"./MixedGeometryBatch.js\").PointGeometryBatch} batch Point geometry batch\n * @param {Float32Array} renderInstructions Render instructions\n * @param {import('../../webgl/LabelsArray.js').default} labels Typed array of the values of string attributes, encoded as UTF-8 and appended next to each other\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes\n * @param {import(\"../../transform.js\").Transform} transform Transform to apply to coordinates\n * @return {Float32Array} Generated render instructions\n */\nexport function generatePointRenderInstructions(\n  batch,\n  renderInstructions,\n  labels,\n  customAttributes,\n  transform,\n) {\n  // here we anticipate the amount of render instructions for points:\n  // 2 instructions per vertex for position (x and y)\n  // + 1 instruction per vertex per custom attributes\n  const totalInstructionsCount =\n    (2 + getCustomAttributesSize(customAttributes)) * batch.geometriesCount;\n  if (\n    !renderInstructions ||\n    renderInstructions.length !== totalInstructionsCount\n  ) {\n    renderInstructions = new Float32Array(totalInstructionsCount);\n  }\n\n  // loop on features to fill the render instructions\n  const tmpCoords = [];\n  let renderIndex = 0;\n  for (const featureUid in batch.entries) {\n    const batchEntry = batch.entries[featureUid];\n    for (let i = 0, ii = batchEntry.flatCoordss.length; i < ii; i++) {\n      tmpCoords[0] = batchEntry.flatCoordss[i][0];\n      tmpCoords[1] = batchEntry.flatCoordss[i][1];\n      applyTransform(transform, tmpCoords);\n\n      renderInstructions[renderIndex++] = tmpCoords[0];\n      renderInstructions[renderIndex++] = tmpCoords[1];\n      renderIndex += pushCustomAttributesInRenderInstructions(\n        renderInstructions,\n        labels,\n        customAttributes,\n        batchEntry,\n        renderIndex,\n      );\n    }\n  }\n  return renderInstructions;\n}\n\n/**\n * Render instructions for lines are structured like so:\n * [ customAttr0, ... , customAttrN, numberOfVertices0, x0, y0, ... , xN, yN, numberOfVertices1, ... ]\n * @param {import(\"./MixedGeometryBatch.js\").LineStringGeometryBatch} batch Line String geometry batch\n * @param {Float32Array} renderInstructions Render instructions\n * @param {import('../../webgl/LabelsArray.js').default} labels Typed array of the values of string attributes, encoded as UTF-8 and appended next to each other\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes\n * @param {import(\"../../transform.js\").Transform} transform Transform to apply to coordinates\n * @return {Float32Array} Generated render instructions\n */\nexport function generateLineStringRenderInstructions(\n  batch,\n  renderInstructions,\n  labels,\n  customAttributes,\n  transform,\n) {\n  // here we anticipate the amount of render instructions for lines:\n  // 3 instructions per vertex for position (x, y and m)\n  // + 1 instruction per line per custom attributes\n  // + 1 instruction per line (for vertices count)\n  const totalInstructionsCount =\n    3 * batch.verticesCount +\n    (1 + getCustomAttributesSize(customAttributes)) * batch.geometriesCount;\n  if (\n    !renderInstructions ||\n    renderInstructions.length !== totalInstructionsCount\n  ) {\n    renderInstructions = new Float32Array(totalInstructionsCount);\n  }\n\n  // loop on features to fill the render instructions\n  const flatCoords = [];\n  let renderIndex = 0;\n  for (const featureUid in batch.entries) {\n    const batchEntry = batch.entries[featureUid];\n    for (let i = 0, ii = batchEntry.flatCoordss.length; i < ii; i++) {\n      flatCoords.length = batchEntry.flatCoordss[i].length;\n      transform2D(\n        batchEntry.flatCoordss[i],\n        0,\n        flatCoords.length,\n        3,\n        transform,\n        flatCoords,\n        3,\n      );\n      renderIndex += pushCustomAttributesInRenderInstructions(\n        renderInstructions,\n        labels,\n        customAttributes,\n        batchEntry,\n        renderIndex,\n      );\n\n      // vertices count\n      renderInstructions[renderIndex++] = flatCoords.length / 3;\n\n      // looping on points for positions\n      for (let j = 0, jj = flatCoords.length; j < jj; j += 3) {\n        renderInstructions[renderIndex++] = flatCoords[j];\n        renderInstructions[renderIndex++] = flatCoords[j + 1];\n        renderInstructions[renderIndex++] = flatCoords[j + 2];\n      }\n    }\n  }\n  return renderInstructions;\n}\n\n/**\n * Render instructions for polygons are structured like so:\n * [ customAttr0, ..., customAttrN, numberOfRings, numberOfVerticesInRing0, ..., numberOfVerticesInRingN, x0, y0, ..., xN, yN, numberOfRings,... ]\n * @param {import(\"./MixedGeometryBatch.js\").PolygonGeometryBatch} batch Polygon geometry batch\n * @param {Float32Array} renderInstructions Render instructions\n * @param {import('../../webgl/LabelsArray.js').default} labels Typed array of the values of string attributes, encoded as UTF-8 and appended next to each other\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes\n * @param {import(\"../../transform.js\").Transform} transform Transform to apply to coordinates\n * @return {Float32Array} Generated render instructions\n */\nexport function generatePolygonRenderInstructions(\n  batch,\n  renderInstructions,\n  labels,\n  customAttributes,\n  transform,\n) {\n  // here we anticipate the amount of render instructions for polygons:\n  // 2 instructions per vertex for position (x and y)\n  // + 1 instruction per polygon per custom attributes\n  // + 1 instruction per polygon (for vertices count in polygon)\n  // + 1 instruction per ring (for vertices count in ring)\n  const totalInstructionsCount =\n    2 * batch.verticesCount +\n    (1 + getCustomAttributesSize(customAttributes)) * batch.geometriesCount +\n    batch.ringsCount;\n  if (\n    !renderInstructions ||\n    renderInstructions.length !== totalInstructionsCount\n  ) {\n    renderInstructions = new Float32Array(totalInstructionsCount);\n  }\n\n  // loop on features to fill the render instructions\n  const flatCoords = [];\n  let renderIndex = 0;\n  for (const featureUid in batch.entries) {\n    const batchEntry = batch.entries[featureUid];\n    for (let i = 0, ii = batchEntry.flatCoordss.length; i < ii; i++) {\n      flatCoords.length = batchEntry.flatCoordss[i].length;\n      transform2D(\n        batchEntry.flatCoordss[i],\n        0,\n        flatCoords.length,\n        2,\n        transform,\n        flatCoords,\n      );\n      renderIndex += pushCustomAttributesInRenderInstructions(\n        renderInstructions,\n        labels,\n        customAttributes,\n        batchEntry,\n        renderIndex,\n      );\n\n      // ring count\n      renderInstructions[renderIndex++] =\n        batchEntry.ringsVerticesCounts[i].length;\n\n      // vertices count in each ring\n      for (\n        let j = 0, jj = batchEntry.ringsVerticesCounts[i].length;\n        j < jj;\n        j++\n      ) {\n        renderInstructions[renderIndex++] =\n          batchEntry.ringsVerticesCounts[i][j];\n      }\n\n      // looping on points for positions\n      for (let j = 0, jj = flatCoords.length; j < jj; j += 2) {\n        renderInstructions[renderIndex++] = flatCoords[j];\n        renderInstructions[renderIndex++] = flatCoords[j + 1];\n      }\n    }\n  }\n  return renderInstructions;\n}\n","/**\n * @module ol/render/webgl/serialize\n */\n\nimport {get as getProjection} from '../../proj.js';\n\n/**\n * This will serialize a frame state into a cloneable object.\n * Note: the user projection is written as code in the frame state because it won't be available in the worker.\n * Caveat: this won't work for custom/non-standard projections!\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state\n * @return {Object} Serialized as object\n */\nexport function serializeFrameState(frameState) {\n  const viewState = frameState.viewState;\n  return {\n    viewState: {\n      ...viewState,\n      projection: viewState.projection.getCode(),\n    },\n    viewHints: frameState.viewHints,\n    pixelRatio: frameState.pixelRatio,\n    size: frameState.size,\n    extent: frameState.extent,\n    coordinateToPixelTransform: frameState.coordinateToPixelTransform,\n    pixelToCoordinateTransform: frameState.pixelToCoordinateTransform,\n    layerStatesArray: frameState.layerStatesArray.map((l) => ({\n      zIndex: l.zIndex,\n      visible: l.visible,\n      extent: l.extent,\n      maxResolution: l.maxResolution,\n      minResolution: l.minResolution,\n      managed: l.managed,\n      opacity: l.opacity,\n    })),\n    time: frameState.time,\n    layerIndex: frameState.layerIndex,\n  };\n}\n\n/**\n * @param {Object} serialized Serialized frame state\n * @return {import(\"../../Map.js\").FrameState} Frame state\n */\nexport function deserializeFrameState(serialized) {\n  return {\n    ...serialized,\n    viewState: {\n      ...serialized.viewState,\n      projection: getProjection(serialized.viewState.projection),\n    },\n  };\n}\n","/**\n * Utilities for parsing flat styles for WebGL renderers\n * @module ol/render/webgl/style\n */\nimport {assert} from '../../asserts.js';\nimport {\n  BooleanType,\n  ColorType,\n  computeGeometryType,\n  newParsingContext,\n  NumberArrayType,\n  NumberType,\n  SizeType,\n  StringType,\n} from '../../expr/expression.js';\nimport {\n  FEATURE_ID_PROPERTY_NAME,\n  GEOMETRY_TYPE_PROPERTY_NAME,\n  getStringNumberEquivalent,\n  newCompilationContext,\n  stringToGlsl,\n} from '../../expr/gpu.js';\nimport {ShaderBuilder} from './ShaderBuilder.js';\nimport {\n  applyContextToBuilder,\n  expressionToGlsl,\n  generateAttributesFromContext,\n  generateUniformsFromContext,\n  getGlslSizeFromType,\n  getGlslTypeFromType,\n} from './compileUtil.js';\n\n/**\n * see https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\n * @param {Object|string} input The hash input, either an object or string\n * @return {string} Hash (if the object cannot be serialized, it is based on `getUid`)\n */\nexport function computeHash(input) {\n  const hash = JSON.stringify(input)\n    .split('')\n    .reduce((prev, curr) => (prev << 5) - prev + curr.charCodeAt(0), 0);\n  return (hash >>> 0).toString();\n}\n\n/**\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader builder\n * @param {import(\"../../expr/gpu.js\").CompilationContext} vertContext Vertex shader compilation context\n * @param {'shape-'|'circle-'|'icon-'} prefix Properties prefix\n */\nfunction parseCommonSymbolProperties(style, builder, vertContext, prefix) {\n  if (`${prefix}radius` in style && prefix !== 'icon-') {\n    let radius = expressionToGlsl(\n      vertContext,\n      style[`${prefix}radius`],\n      NumberType,\n    );\n    if (`${prefix}radius2` in style) {\n      const radius2 = expressionToGlsl(\n        vertContext,\n        style[`${prefix}radius2`],\n        NumberType,\n      );\n      radius = `max(${radius}, ${radius2})`;\n    }\n    if (`${prefix}stroke-width` in style) {\n      radius = `(${radius} + ${expressionToGlsl(\n        vertContext,\n        style[`${prefix}stroke-width`],\n        NumberType,\n      )} * 0.5)`;\n    }\n    builder.setSymbolSizeExpression(`vec2(${radius} * 2. + 0.5)`); // adding some padding for antialiasing\n  }\n  if (`${prefix}scale` in style) {\n    const scale = expressionToGlsl(\n      vertContext,\n      style[`${prefix}scale`],\n      SizeType,\n    );\n    builder.setSymbolSizeExpression(\n      `${builder.getSymbolSizeExpression()} * ${scale}`,\n    );\n  }\n  if (`${prefix}displacement` in style) {\n    builder.setSymbolOffsetExpression(\n      expressionToGlsl(\n        vertContext,\n        style[`${prefix}displacement`],\n        NumberArrayType,\n      ),\n    );\n  }\n  if (`${prefix}rotation` in style) {\n    builder.setSymbolRotationExpression(\n      expressionToGlsl(vertContext, style[`${prefix}rotation`], NumberType),\n    );\n  }\n  if (`${prefix}rotate-with-view` in style) {\n    builder.setSymbolRotateWithView(!!style[`${prefix}rotate-with-view`]);\n  }\n}\n\n/**\n * @param {string} distanceField The distance field expression\n * @param {string|null} fillColor The fill color expression; null if no fill\n * @param {string|null} strokeColor The stroke color expression; null if no stroke\n * @param {string|null} strokeWidth The stroke width expression; null if no stroke\n * @param {string|null} opacity The opacity expression; null if no stroke\n * @return {string} The final color expression, based on the distance field and given params\n */\nfunction getColorFromDistanceField(\n  distanceField,\n  fillColor,\n  strokeColor,\n  strokeWidth,\n  opacity,\n) {\n  let color = 'vec4(0.)';\n  if (fillColor !== null) {\n    color = fillColor;\n  }\n  if (strokeColor !== null && strokeWidth !== null) {\n    const strokeFillRatio = `smoothstep(-${strokeWidth} + 0.63, -${strokeWidth} - 0.58, ${distanceField})`;\n    color = `mix(${strokeColor}, ${color}, ${strokeFillRatio})`;\n  }\n  const shapeOpacity = `(1.0 - smoothstep(-0.63, 0.58, ${distanceField}))`;\n  let result = `${color} * vec4(1.0, 1.0, 1.0, ${shapeOpacity})`;\n  if (opacity !== null) {\n    result = `${result} * vec4(1.0, 1.0, 1.0, ${opacity})`;\n  }\n  return result;\n}\n\n/**\n * This will parse an image property provided by `<prefix>-src`\n * The image size expression in GLSL will be returned\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader builder\n * @param {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} uniforms Uniforms\n * @param {'icon-'|'fill-pattern-'|'stroke-pattern-'} prefix Property prefix\n * @param {string} textureId A identifier that will be used in the generated uniforms: `sample2d u_texture<id>` and `vec2 u_texture<id>_size`\n * @return {string} The image size expression\n */\nfunction parseImageProperties(style, builder, uniforms, prefix, textureId) {\n  const image = new Image();\n  image.crossOrigin =\n    style[`${prefix}cross-origin`] === undefined\n      ? 'anonymous'\n      : style[`${prefix}cross-origin`];\n  assert(\n    typeof style[`${prefix}src`] === 'string',\n    `WebGL layers do not support expressions for the ${prefix}src style property`,\n  );\n  image.src = /** @type {string} */ (style[`${prefix}src`]);\n\n  // the size is provided asynchronously using a uniform\n  uniforms[`u_texture${textureId}_size`] = () => {\n    return image.complete ? [image.width, image.height] : [0, 0];\n  };\n  builder.addUniform(`u_texture${textureId}_size`, 'vec2');\n  const size = `u_texture${textureId}_size`;\n\n  uniforms[`u_texture${textureId}`] = image;\n  builder.addUniform(`u_texture${textureId}`, 'sampler2D');\n  return size;\n}\n\n/**\n * This will parse an image's offset properties provided by `<prefix>-offset`, `<prefix>-offset-origin` and `<prefix>-size`\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {'icon-'|'fill-pattern-'|'stroke-pattern-'} prefix Property prefix\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Shader compilation context (vertex or fragment)\n * @param {string} imageSize Pixel size of the full image as a GLSL expression\n * @param {string} sampleSize Pixel size of the sample in the image as a GLSL expression\n * @return {string} The offset expression\n */\nfunction parseImageOffsetProperties(\n  style,\n  prefix,\n  context,\n  imageSize,\n  sampleSize,\n) {\n  let offsetExpression = expressionToGlsl(\n    context,\n    style[`${prefix}offset`],\n    SizeType,\n  );\n  if (`${prefix}offset-origin` in style) {\n    switch (style[`${prefix}offset-origin`]) {\n      case 'top-right':\n        offsetExpression = `vec2(${imageSize}.x, 0.) + ${sampleSize} * vec2(-1., 0.) + ${offsetExpression} * vec2(-1., 1.)`;\n        break;\n      case 'bottom-left':\n        offsetExpression = `vec2(0., ${imageSize}.y) + ${sampleSize} * vec2(0., -1.) + ${offsetExpression} * vec2(1., -1.)`;\n        break;\n      case 'bottom-right':\n        offsetExpression = `${imageSize} - ${sampleSize} - ${offsetExpression}`;\n        break;\n      default: // pass\n    }\n  }\n  return offsetExpression;\n}\n\n/**\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader builder\n * @param {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} uniforms Uniforms\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Shader compilation context\n */\nfunction parseCircleProperties(style, builder, uniforms, context) {\n  // this function takes in screen coordinates in pixels and returns the signed distance field\n  // (0 on the boundary, negative inside the circle, positive outside, values in pixels)\n  context.functions['circleDistanceField'] =\n    `float circleDistanceField(vec2 point, float radius) {\n  return length(point) - radius;\n}`;\n\n  parseCommonSymbolProperties(style, builder, context, 'circle-');\n\n  // OPACITY\n  let opacity = null;\n  if ('circle-opacity' in style) {\n    opacity = expressionToGlsl(context, style['circle-opacity'], NumberType);\n  }\n\n  // SCALE\n  let currentPoint = 'coordsPx';\n  if ('circle-scale' in style) {\n    const scale = expressionToGlsl(context, style['circle-scale'], SizeType);\n    currentPoint = `coordsPx / ${scale}`;\n  }\n\n  // FILL COLOR\n  let fillColor = null;\n  if ('circle-fill-color' in style) {\n    fillColor = expressionToGlsl(\n      context,\n      style['circle-fill-color'],\n      ColorType,\n    );\n  }\n\n  // STROKE COLOR\n  let strokeColor = null;\n  if ('circle-stroke-color' in style) {\n    strokeColor = expressionToGlsl(\n      context,\n      style['circle-stroke-color'],\n      ColorType,\n    );\n  }\n\n  // RADIUS\n  let radius = expressionToGlsl(context, style['circle-radius'], NumberType);\n\n  // STROKE WIDTH\n  let strokeWidth = null;\n  if ('circle-stroke-width' in style) {\n    strokeWidth = expressionToGlsl(\n      context,\n      style['circle-stroke-width'],\n      NumberType,\n    );\n    radius = `(${radius} + ${strokeWidth} * 0.5)`;\n  }\n\n  // FINAL COLOR\n  const distanceField = `circleDistanceField(${currentPoint}, ${radius})`;\n  const colorExpression = getColorFromDistanceField(\n    distanceField,\n    fillColor,\n    strokeColor,\n    strokeWidth,\n    opacity,\n  );\n  builder.setSymbolColorExpression(colorExpression);\n}\n\n/**\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader builder\n * @param {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} uniforms Uniforms\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Shader compilation context\n */\nfunction parseShapeProperties(style, builder, uniforms, context) {\n  context.functions['round'] = `float round(float v) {\n  return sign(v) * floor(abs(v) + 0.5);\n}`;\n\n  // these functions take in screen coordinates in pixels and returns the signed distance field\n  // (0 on the boundary, negative inside the polygon, positive outside, values in pixels)\n  // inspired by https://github.com/zranger1/PixelblazePatterns/blob/master/Toolkit/sdf2d.md#n-sided-regular-polygon\n  context.functions['starDistanceField'] =\n    `float starDistanceField(vec2 point, float numPoints, float radius, float radius2, float angle) {\n  float startAngle = -PI * 0.5 + angle; // tip starts upwards and rotates clockwise with angle\n  float c = cos(startAngle);\n  float s = sin(startAngle);\n  vec2 pointRotated = vec2(c * point.x - s * point.y, s * point.x + c * point.y);\n  float alpha = TWO_PI / numPoints; // the angle of one sector\n  float beta = atan(pointRotated.y, pointRotated.x);\n  float gamma = round(beta / alpha) * alpha; // angle in sector\n  c = cos(-gamma);\n  s = sin(-gamma);\n  vec2 inSector = vec2(c * pointRotated.x - s * pointRotated.y, abs(s * pointRotated.x + c * pointRotated.y));\n  vec2 tipToPoint = inSector + vec2(-radius, 0.);\n  vec2 edgeNormal = vec2(radius2 * sin(alpha * 0.5), -radius2 * cos(alpha * 0.5) + radius);\n  return dot(normalize(edgeNormal), tipToPoint);\n}`;\n  context.functions['regularDistanceField'] =\n    `float regularDistanceField(vec2 point, float numPoints, float radius, float angle) {\n  float startAngle = -PI * 0.5 + angle; // tip starts upwards and rotates clockwise with angle\n  float c = cos(startAngle);\n  float s = sin(startAngle);\n  vec2 pointRotated = vec2(c * point.x - s * point.y, s * point.x + c * point.y);\n  float alpha = TWO_PI / numPoints; // the angle of one sector\n  float radiusIn = radius * cos(PI / numPoints);\n  float beta = atan(pointRotated.y, pointRotated.x);\n  float gamma = round((beta - alpha * 0.5) / alpha) * alpha + alpha * 0.5; // angle in sector from mid\n  c = cos(-gamma);\n  s = sin(-gamma);\n  vec2 inSector = vec2(c * pointRotated.x - s * pointRotated.y, abs(s * pointRotated.x + c * pointRotated.y));\n  return inSector.x - radiusIn;\n}`;\n\n  parseCommonSymbolProperties(style, builder, context, 'shape-');\n\n  // OPACITY\n  let opacity = null;\n  if ('shape-opacity' in style) {\n    opacity = expressionToGlsl(context, style['shape-opacity'], NumberType);\n  }\n\n  // SCALE\n  let currentPoint = 'coordsPx';\n  if ('shape-scale' in style) {\n    const scale = expressionToGlsl(context, style['shape-scale'], SizeType);\n    currentPoint = `coordsPx / ${scale}`;\n  }\n\n  // FILL COLOR\n  let fillColor = null;\n  if ('shape-fill-color' in style) {\n    fillColor = expressionToGlsl(context, style['shape-fill-color'], ColorType);\n  }\n\n  // STROKE COLOR\n  let strokeColor = null;\n  if ('shape-stroke-color' in style) {\n    strokeColor = expressionToGlsl(\n      context,\n      style['shape-stroke-color'],\n      ColorType,\n    );\n  }\n\n  // STROKE WIDTH\n  let strokeWidth = null;\n  if ('shape-stroke-width' in style) {\n    strokeWidth = expressionToGlsl(\n      context,\n      style['shape-stroke-width'],\n      NumberType,\n    );\n  }\n\n  // SHAPE TYPE\n  const numPoints = expressionToGlsl(\n    context,\n    style['shape-points'],\n    NumberType,\n  );\n  let angle = '0.';\n  if ('shape-angle' in style) {\n    angle = expressionToGlsl(context, style['shape-angle'], NumberType);\n  }\n  let shapeField;\n  let radius = expressionToGlsl(context, style['shape-radius'], NumberType);\n  if (strokeWidth !== null) {\n    radius = `${radius} + ${strokeWidth} * 0.5`;\n  }\n  if ('shape-radius2' in style) {\n    let radius2 = expressionToGlsl(context, style['shape-radius2'], NumberType);\n    if (strokeWidth !== null) {\n      radius2 = `${radius2} + ${strokeWidth} * 0.5`;\n    }\n    shapeField = `starDistanceField(${currentPoint}, ${numPoints}, ${radius}, ${radius2}, ${angle})`;\n  } else {\n    shapeField = `regularDistanceField(${currentPoint}, ${numPoints}, ${radius}, ${angle})`;\n  }\n\n  // FINAL COLOR\n  const colorExpression = getColorFromDistanceField(\n    shapeField,\n    fillColor,\n    strokeColor,\n    strokeWidth,\n    opacity,\n  );\n  builder.setSymbolColorExpression(colorExpression);\n}\n\n/**\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader builder\n * @param {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} uniforms Uniforms\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Shader compilation context\n */\nfunction parseIconProperties(style, builder, uniforms, context) {\n  // COLOR\n  let color = 'vec4(1.0)';\n  if ('icon-color' in style) {\n    color = expressionToGlsl(context, style['icon-color'], ColorType);\n  }\n\n  // OPACITY\n  if ('icon-opacity' in style) {\n    color = `${color} * vec4(1.0, 1.0, 1.0, ${expressionToGlsl(\n      context,\n      style['icon-opacity'],\n      NumberType,\n    )})`;\n  }\n\n  // IMAGE & SIZE\n  const textureId = computeHash(style['icon-src']);\n  const sizeExpression = parseImageProperties(\n    style,\n    builder,\n    uniforms,\n    'icon-',\n    textureId,\n  );\n  builder\n    .setSymbolColorExpression(\n      `${color} * texture2D(u_texture${textureId}, v_texCoord)`,\n    )\n    .setSymbolSizeExpression(sizeExpression);\n\n  // override size if width/height were specified\n  if ('icon-width' in style && 'icon-height' in style) {\n    builder.setSymbolSizeExpression(\n      `vec2(${expressionToGlsl(\n        context,\n        style['icon-width'],\n        NumberType,\n      )}, ${expressionToGlsl(context, style['icon-height'], NumberType)})`,\n    );\n  }\n\n  // tex coord\n  if ('icon-offset' in style && 'icon-size' in style) {\n    const sampleSize = expressionToGlsl(\n      context,\n      style['icon-size'],\n      NumberArrayType,\n    );\n    const fullsize = builder.getSymbolSizeExpression();\n    builder.setSymbolSizeExpression(sampleSize);\n    const offset = parseImageOffsetProperties(\n      style,\n      'icon-',\n      context,\n      'v_quadSizePx',\n      sampleSize,\n    );\n    builder.setTextureCoordinateExpression(\n      `(vec4((${offset}).xyxy) + vec4(0., 0., ${sampleSize})) / (${fullsize}).xyxy`,\n    );\n  }\n\n  parseCommonSymbolProperties(style, builder, context, 'icon-');\n\n  if ('icon-anchor' in style) {\n    const anchor = expressionToGlsl(\n      context,\n      style['icon-anchor'],\n      NumberArrayType,\n    );\n    let scale = `1.0`;\n    if (`icon-scale` in style) {\n      scale = expressionToGlsl(context, style[`icon-scale`], SizeType);\n    }\n    let shiftPx;\n    if (\n      style['icon-anchor-x-units'] === 'pixels' &&\n      style['icon-anchor-y-units'] === 'pixels'\n    ) {\n      shiftPx = `${anchor} * ${scale}`;\n    } else if (style['icon-anchor-x-units'] === 'pixels') {\n      shiftPx = `${anchor} * vec2(vec2(${scale}).x, v_quadSizePx.y)`;\n    } else if (style['icon-anchor-y-units'] === 'pixels') {\n      shiftPx = `${anchor} * vec2(v_quadSizePx.x, vec2(${scale}).x)`;\n    } else {\n      shiftPx = `${anchor} * v_quadSizePx`;\n    }\n    // default origin is top-left\n    let offsetPx = `v_quadSizePx * vec2(0.5, -0.5) + ${shiftPx} * vec2(-1., 1.)`;\n    if ('icon-anchor-origin' in style) {\n      switch (style['icon-anchor-origin']) {\n        case 'top-right':\n          offsetPx = `v_quadSizePx * -0.5 + ${shiftPx}`;\n          break;\n        case 'bottom-left':\n          offsetPx = `v_quadSizePx * 0.5 - ${shiftPx}`;\n          break;\n        case 'bottom-right':\n          offsetPx = `v_quadSizePx * vec2(-0.5, 0.5) + ${shiftPx} * vec2(1., -1.)`;\n          break;\n        default: // pass\n      }\n    }\n    builder.setSymbolOffsetExpression(\n      `${builder.getSymbolOffsetExpression()} + ${offsetPx}`,\n    );\n  }\n}\n\n/**\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader Builder\n * @param {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} uniforms Uniforms\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Shader compilation context\n */\nfunction parseStrokeProperties(style, builder, uniforms, context) {\n  if ('stroke-color' in style) {\n    builder.setStrokeColorExpression(\n      expressionToGlsl(context, style['stroke-color'], ColorType),\n    );\n  }\n  if ('stroke-pattern-src' in style) {\n    const textureId = computeHash(style['stroke-pattern-src']);\n    const sizeExpression = parseImageProperties(\n      style,\n      builder,\n      uniforms,\n      'stroke-pattern-',\n      textureId,\n    );\n    let sampleSizeExpression = sizeExpression;\n    let offsetExpression = 'vec2(0.)';\n    if ('stroke-pattern-offset' in style && 'stroke-pattern-size' in style) {\n      sampleSizeExpression = expressionToGlsl(\n        context,\n        style[`stroke-pattern-size`],\n        NumberArrayType,\n      );\n      offsetExpression = parseImageOffsetProperties(\n        style,\n        'stroke-pattern-',\n        context,\n        sizeExpression,\n        sampleSizeExpression,\n      );\n    }\n    let spacingExpression = '0.';\n    if ('stroke-pattern-spacing' in style) {\n      spacingExpression = expressionToGlsl(\n        context,\n        style['stroke-pattern-spacing'],\n        NumberType,\n      );\n    }\n    let startOffsetExpression = '0.';\n    if ('stroke-pattern-start-offset' in style) {\n      startOffsetExpression = expressionToGlsl(\n        context,\n        style['stroke-pattern-start-offset'],\n        NumberType,\n      );\n    }\n    context.functions['sampleStrokePattern'] =\n      `vec4 sampleStrokePattern(sampler2D texture, vec2 textureSize, vec2 textureOffset, vec2 sampleSize, float spacingPx, float startOffsetPx, float currentLengthPx, float currentRadiusRatio, float lineWidth) {\n  float currentLengthScaled = (currentLengthPx - startOffsetPx) * sampleSize.y / lineWidth;\n  float spacingScaled = spacingPx * sampleSize.y / lineWidth;\n  float uCoordPx = mod(currentLengthScaled, (sampleSize.x + spacingScaled));\n  float isInsideOfPattern = step(uCoordPx, sampleSize.x);\n  float vCoordPx = (-currentRadiusRatio * 0.5 + 0.5) * sampleSize.y;\n  // make sure that we're not sampling too close to the borders to avoid interpolation with outside pixels\n  uCoordPx = clamp(uCoordPx, 0.5, sampleSize.x - 0.5);\n  vCoordPx = clamp(vCoordPx, 0.5, sampleSize.y - 0.5);\n  vec2 texCoord = (vec2(uCoordPx, vCoordPx) + textureOffset) / textureSize;\n  return texture2D(texture, texCoord) * vec4(1.0, 1.0, 1.0, isInsideOfPattern);\n}`;\n    const textureName = `u_texture${textureId}`;\n    let tintExpression = '1.';\n    if ('stroke-color' in style) {\n      tintExpression = builder.getStrokeColorExpression();\n    }\n    builder.setStrokeColorExpression(\n      `${tintExpression} * sampleStrokePattern(${textureName}, ${sizeExpression}, ${offsetExpression}, ${sampleSizeExpression}, ${spacingExpression}, ${startOffsetExpression}, currentLengthPx, currentRadiusRatio, v_width)`,\n    );\n\n    context.functions['computeStrokePatternLength'] =\n      `float computeStrokePatternLength(vec2 sampleSize, float spacingPx, float lineWidth) {\n  float patternLengthPx = sampleSize.x / sampleSize.y * lineWidth;\n  return patternLengthPx + spacingPx;\n}`;\n\n    // apply a stroke pattern length to avoid visual artifacts\n    builder.setStrokePatternLengthExpression(\n      `computeStrokePatternLength(${sampleSizeExpression}, ${spacingExpression}, v_width)`,\n    );\n  }\n\n  if ('stroke-width' in style) {\n    builder.setStrokeWidthExpression(\n      expressionToGlsl(context, style['stroke-width'], NumberType),\n    );\n  }\n\n  if ('stroke-offset' in style) {\n    builder.setStrokeOffsetExpression(\n      expressionToGlsl(context, style['stroke-offset'], NumberType),\n    );\n  }\n\n  if ('stroke-line-cap' in style) {\n    builder.setStrokeCapExpression(\n      expressionToGlsl(context, style['stroke-line-cap'], StringType),\n    );\n  }\n\n  if ('stroke-line-join' in style) {\n    builder.setStrokeJoinExpression(\n      expressionToGlsl(context, style['stroke-line-join'], StringType),\n    );\n  }\n\n  if ('stroke-miter-limit' in style) {\n    builder.setStrokeMiterLimitExpression(\n      expressionToGlsl(context, style['stroke-miter-limit'], NumberType),\n    );\n  }\n\n  if ('stroke-line-dash' in style) {\n    context.functions['getSingleDashDistance'] =\n      `float getSingleDashDistance(float distance, float radius, float dashOffset, float dashLength, float dashLengthTotal, float capType, float lineWidth) {\n  float localDistance = mod(distance, dashLengthTotal);\n  float distanceSegment = abs(localDistance - dashOffset - dashLength * 0.5) - dashLength * 0.5;\n  distanceSegment = min(distanceSegment, dashLengthTotal - localDistance);\n  if (capType == ${stringToGlsl('square')}) {\n    distanceSegment -= lineWidth * 0.5;\n  } else if (capType == ${stringToGlsl('round')}) {\n    distanceSegment = min(distanceSegment, sqrt(distanceSegment * distanceSegment + radius * radius) - lineWidth * 0.5);\n  }\n  return distanceSegment;\n}`;\n\n    let dashPattern = style['stroke-line-dash'].map((v) =>\n      expressionToGlsl(context, v, NumberType),\n    );\n    // if pattern has odd length, concatenate it with itself to be even\n    if (dashPattern.length % 2 === 1) {\n      dashPattern = [...dashPattern, ...dashPattern];\n    }\n\n    let offsetExpression = '0.';\n    if ('stroke-line-dash-offset' in style) {\n      offsetExpression = expressionToGlsl(\n        context,\n        style['stroke-line-dash-offset'],\n        NumberType,\n      );\n    }\n\n    // define a function for this dash specifically\n    const uniqueDashKey = computeHash(style['stroke-line-dash']);\n    const dashFunctionName = `dashDistanceField_${uniqueDashKey}`;\n\n    const dashLengthsParamsDef = dashPattern\n      .map((v, i) => `float dashLength${i}`)\n      .join(', ');\n    const totalLengthDef = dashPattern\n      .map((v, i) => `dashLength${i}`)\n      .join(' + ');\n    let currentDashOffset = '0.';\n    let distanceExpression = `getSingleDashDistance(distance, radius, ${currentDashOffset}, dashLength0, totalDashLength, capType, lineWidth)`;\n    for (let i = 2; i < dashPattern.length; i += 2) {\n      currentDashOffset = `${currentDashOffset} + dashLength${\n        i - 2\n      } + dashLength${i - 1}`;\n      distanceExpression = `min(${distanceExpression}, getSingleDashDistance(distance, radius, ${currentDashOffset}, dashLength${i}, totalDashLength, capType, lineWidth))`;\n    }\n\n    context.functions[dashFunctionName] =\n      `float ${dashFunctionName}(float distance, float radius, float capType, float lineWidth, ${dashLengthsParamsDef}) {\n  float totalDashLength = ${totalLengthDef};\n  return ${distanceExpression};\n}`;\n    const dashLengthsCalls = dashPattern.map((v, i) => `${v}`).join(', ');\n    builder.setStrokeDistanceFieldExpression(\n      `${dashFunctionName}(currentLengthPx + ${offsetExpression}, currentRadiusPx, capType, v_width, ${dashLengthsCalls})`,\n    );\n\n    // apply a stroke pattern length to avoid visual artifacts\n    let patternLength = dashPattern.join(' + ');\n    if (builder.getStrokePatternLengthExpression()) {\n      context.functions['combinePatternLengths'] =\n        `float combinePatternLengths(float patternLength1, float patternLength2) {\n  return patternLength1 * patternLength2;\n}`;\n      patternLength = `combinePatternLengths(${builder.getStrokePatternLengthExpression()}, ${patternLength})`;\n    }\n    builder.setStrokePatternLengthExpression(patternLength);\n  }\n}\n\n/**\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader Builder\n * @param {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} uniforms Uniforms\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Shader compilation context\n */\nfunction parseFillProperties(style, builder, uniforms, context) {\n  if ('fill-color' in style) {\n    builder.setFillColorExpression(\n      expressionToGlsl(context, style['fill-color'], ColorType),\n    );\n  }\n  if ('fill-pattern-src' in style) {\n    const textureId = computeHash(style['fill-pattern-src']);\n    const sizeExpression = parseImageProperties(\n      style,\n      builder,\n      uniforms,\n      'fill-pattern-',\n      textureId,\n    );\n    builder.setFillPatternSizeExpression(sizeExpression);\n    let offsetExpression = 'vec2(0.)';\n    if ('fill-pattern-offset' in style && 'fill-pattern-size' in style) {\n      const specifiedSizeExpression = expressionToGlsl(\n        context,\n        style[`fill-pattern-size`],\n        NumberArrayType,\n      );\n      builder.setFillPatternSizeExpression(specifiedSizeExpression);\n      offsetExpression = parseImageOffsetProperties(\n        style,\n        'fill-pattern-',\n        context,\n        sizeExpression,\n        `v_patternSizePx`,\n      );\n    }\n    context.functions['sampleFillPattern'] =\n      `vec4 sampleFillPattern(sampler2D texture, vec2 textureSize, vec2 textureOffset, vec2 sampleSize, vec2 patternOriginPx, vec2 pxPosition, float sampleScaleRatio) {\n  vec2 pxRelativePos = pxPosition - patternOriginPx;\n\n  // rotate the relative position from origin by the current view rotation\n  pxRelativePos = vec2(pxRelativePos.x * cos(u_rotation) - pxRelativePos.y * sin(u_rotation), pxRelativePos.x * sin(u_rotation) + pxRelativePos.y * cos(u_rotation));\n  // sample position is computed according to the sample offset & size\n  vec2 samplePos = mod(pxRelativePos / sampleScaleRatio, sampleSize);\n  // also make sure that we're not sampling too close to the borders to avoid interpolation with outside pixels\n  samplePos = clamp(samplePos, vec2(0.5), sampleSize - vec2(0.5));\n  samplePos.y = sampleSize.y - samplePos.y; // invert y axis so that images appear upright\n  return texture2D(texture, (samplePos + textureOffset) / textureSize);\n}`;\n    const textureName = `u_texture${textureId}`;\n    let tintExpression = '1.';\n    if ('fill-color' in style) {\n      tintExpression = builder.getFillColorExpression();\n    }\n\n    builder.setFillColorExpression(\n      `${tintExpression} * sampleFillPattern(${textureName}, ${sizeExpression}, ${offsetExpression}, v_patternSizePx, v_patternOriginPx, pxPos, df_float(u_df_patternScaleRatio))`,\n    );\n  }\n}\n\n/**\n * This only compiles the expressions used in the text style properties; this has no impact on the\n * shaders but the properties and variables used there will be collected\n * @param {import(\"../../style/flat.js\").FlatStyle} style Style\n * @param {ShaderBuilder} builder Shader Builder\n * @param {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} uniforms Uniforms\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Shader compilation context\n */\nfunction parseTextProperties(style, builder, uniforms, context) {\n  function safeExpressionToGlsl(...args) {\n    try {\n      // @ts-ignore\n      expressionToGlsl(...args);\n    } catch {\n      // do nothing, expressions unsuppported in webgl might not be an issue since the text is rendered in canvas down the line\n    }\n  }\n\n  if ('text-value' in style) {\n    safeExpressionToGlsl(context, style['text-value'], StringType);\n  }\n  if ('text-font' in style) {\n    safeExpressionToGlsl(context, style['text-font'], StringType);\n  }\n  if ('text-max-angle' in style) {\n    safeExpressionToGlsl(context, style['text-max-angle'], NumberType);\n  }\n  if ('text-offset-x' in style) {\n    safeExpressionToGlsl(context, style['text-offset-x'], NumberType);\n  }\n  if ('text-offset-y' in style) {\n    safeExpressionToGlsl(context, style['text-offset-y'], NumberType);\n  }\n  if ('text-overflow' in style) {\n    safeExpressionToGlsl(context, style['text-overflow'], BooleanType);\n  }\n  if ('text-placement' in style) {\n    safeExpressionToGlsl(context, style['text-placement'], StringType);\n  }\n  if ('text-repeat' in style) {\n    safeExpressionToGlsl(context, style['text-repeat'], NumberType);\n  }\n  if ('text-scale' in style) {\n    safeExpressionToGlsl(context, style['text-scale'], SizeType);\n  }\n  if ('text-rotate-with-view' in style) {\n    safeExpressionToGlsl(context, style['text-rotate-with-view'], BooleanType);\n  }\n  if ('text-rotation' in style) {\n    safeExpressionToGlsl(context, style['text-rotation'], NumberType);\n  }\n  if ('text-align' in style) {\n    safeExpressionToGlsl(context, style['text-align'], StringType);\n  }\n  if ('text-justify' in style) {\n    safeExpressionToGlsl(context, style['text-justify'], StringType);\n  }\n  if ('text-baseline' in style) {\n    safeExpressionToGlsl(context, style['text-baseline'], StringType);\n  }\n  if ('text-padding' in style) {\n    safeExpressionToGlsl(context, style['text-padding'], NumberArrayType);\n  }\n  if ('text-fill-color' in style) {\n    safeExpressionToGlsl(context, style['text-fill-color'], ColorType);\n  }\n  if ('text-stroke-color' in style) {\n    safeExpressionToGlsl(context, style['text-stroke-color'], ColorType);\n  }\n  if ('text-stroke-line-cap' in style) {\n    safeExpressionToGlsl(context, style['text-stroke-line-cap'], StringType);\n  }\n  if ('text-stroke-line-join' in style) {\n    safeExpressionToGlsl(context, style['text-stroke-line-join'], StringType);\n  }\n  if ('text-stroke-line-dash' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-stroke-line-dash'],\n      NumberArrayType,\n    );\n  }\n  if ('text-stroke-line-dash-offset' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-stroke-line-dash-offset'],\n      NumberType,\n    );\n  }\n  if ('text-stroke-miter-limit' in style) {\n    safeExpressionToGlsl(context, style['text-stroke-miter-limit'], NumberType);\n  }\n  if ('text-stroke-width' in style) {\n    safeExpressionToGlsl(context, style['text-stroke-width'], NumberType);\n  }\n  if ('text-background-fill-color' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-fill-color'],\n      ColorType,\n    );\n  }\n  if ('text-background-stroke-color' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-stroke-color'],\n      ColorType,\n    );\n  }\n  if ('text-background-stroke-line-cap' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-stroke-line-cap'],\n      StringType,\n    );\n  }\n  if ('text-background-stroke-line-join' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-stroke-line-join'],\n      StringType,\n    );\n  }\n  if ('text-background-stroke-line-dash' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-stroke-line-dash'],\n      NumberArrayType,\n    );\n  }\n  if ('text-background-stroke-line-dash-offset' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-stroke-line-dash-offset'],\n      NumberType,\n    );\n  }\n  if ('text-background-stroke-miter-limit' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-stroke-miter-limit'],\n      NumberType,\n    );\n  }\n  if ('text-background-stroke-width' in style) {\n    safeExpressionToGlsl(\n      context,\n      style['text-background-stroke-width'],\n      NumberType,\n    );\n  }\n  if ('z-index' in style) {\n    safeExpressionToGlsl(context, style['z-index'], NumberType);\n  }\n}\n\n/**\n * @typedef {Object} StyleParseResult\n * @property {ShaderBuilder} builder Shader builder pre-configured according to a given style\n * @property {import(\"./VectorStyleRenderer.js\").UniformDefinitions} uniforms Uniform definitions\n * @property {import(\"./VectorStyleRenderer.js\").AttributeDefinitions} attributes Attribute definitions\n * @property {import(\"../../style/flat.js\").Rule} [sourceRule] Style and filter that was parsed (if any)\n */\n\n/**\n * Parses a {@link import(\"../../style/flat.js\").FlatStyle} object and returns a {@link ShaderBuilder}\n * object that has been configured according to the given style, as well as `attributes` and `uniforms`\n * arrays to be fed to the `WebGLPointsRenderer` class.\n *\n * Also returns `uniforms` and `attributes` properties as expected by the\n * {@link module:ol/renderer/webgl/PointsLayer~WebGLPointsLayerRenderer}.\n *\n * @param {import(\"../../style/flat.js\").FlatStyle} style Flat style.\n * @param {import('../../style/flat.js').StyleVariables} [variables] Style variables.\n * @param {import(\"../../expr/expression.js\").EncodedExpression} [filter] Filter (if any)\n * @return {StyleParseResult} Result containing shader params, attributes and uniforms.\n */\nexport function parseLiteralStyle(style, variables, filter) {\n  const context = newCompilationContext(variables);\n\n  const builder = new ShaderBuilder();\n\n  /** @type {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} */\n  const uniforms = {};\n\n  if ('icon-src' in style) {\n    parseIconProperties(style, builder, uniforms, context);\n  } else if ('shape-points' in style) {\n    parseShapeProperties(style, builder, uniforms, context);\n  } else if ('circle-radius' in style) {\n    parseCircleProperties(style, builder, uniforms, context);\n  }\n  parseStrokeProperties(style, builder, uniforms, context);\n  parseFillProperties(style, builder, uniforms, context);\n  // this will not change the shaders but still collect the properties\n  parseTextProperties(style, builder, uniforms, context);\n\n  // note that the style filter may have already been applied earlier when building the rendering instructions\n  // this is still needed in case a filter cannot be evaluated statically beforehand (e.g. depending on time)\n  if (filter) {\n    const filterContext = newParsingContext(variables);\n    const parsedFilter = expressionToGlsl(\n      context,\n      filter,\n      BooleanType,\n      filterContext,\n    );\n    if (filterContext.mCoordinate) {\n      builder.setFragmentDiscardExpression(`!${parsedFilter}`);\n    } else {\n      builder.setShapeDiscardExpression(`!${parsedFilter}`);\n    }\n  }\n\n  /**\n   * @type {import('./VectorStyleRenderer.js').AttributeDefinitions}\n   */\n  const attributes = {};\n\n  // Define attributes for special inputs\n  function defineSpecialInput(contextPropName, glslPropName, type, callback) {\n    if (!context[contextPropName]) {\n      return;\n    }\n    const glslType = getGlslTypeFromType(type);\n    const attrSize = getGlslSizeFromType(type);\n    builder.addAttribute(`a_${glslPropName}`, glslType);\n\n    attributes[glslPropName] = {\n      size: attrSize,\n      callback,\n    };\n  }\n  defineSpecialInput(\n    'geometryType',\n    GEOMETRY_TYPE_PROPERTY_NAME,\n    StringType,\n    (feature) =>\n      getStringNumberEquivalent(computeGeometryType(feature.getGeometry())),\n  );\n  defineSpecialInput(\n    'featureId',\n    FEATURE_ID_PROPERTY_NAME,\n    StringType | NumberType,\n    (feature) => {\n      const id = feature.getId() ?? null;\n      return typeof id === 'string' ? getStringNumberEquivalent(id) : id;\n    },\n  );\n\n  applyContextToBuilder(builder, context);\n\n  return {\n    builder,\n    attributes: {...attributes, ...generateAttributesFromContext(context)},\n    uniforms: {\n      ...uniforms,\n      ...generateUniformsFromContext(context, variables),\n    },\n  };\n}\n","/**\n * @module ol/render/webgl/textUtil\n */\nimport {ColorType, StringType} from '../../expr/expression.js';\nimport LineString from '../../geom/LineString.js';\nimport Point from '../../geom/Point.js';\nimport Polygon from '../../geom/Polygon.js';\nimport {\n  create as createMat4,\n  reset as resetMat4,\n  rotate as rotateMat4,\n  scale as scaleMat4,\n  translate as translateMat4,\n} from '../../vec/mat4.js';\nimport RenderFeature from '../Feature.js';\nimport {unpackColor} from './compileUtil.js';\nimport {getCustomAttributesSize} from './renderinstructions.js';\n\nexport const TextUniforms = {\n  TEXT_OVERLAY_TEXTURE: 'u_textOverlay',\n  TEXT_OVERLAY_MATRIX: 'u_textOverlayMatrix',\n};\n\n/**\n * @param {import('../../style/flat.js').FlatStyleLike} style Single flat style\n * @return {boolean} Whether the style has text-related properties\n */\nexport function hasTextStyle(style) {\n  let result = false;\n  function check(style) {\n    for (const prop in style) {\n      if (prop === 'text-value') {\n        result = true;\n        return;\n      }\n    }\n  }\n  if (Array.isArray(style)) {\n    for (let i = 0, ii = style.length; i < ii; i++) {\n      const rule = style[i];\n      if ('style' in rule && Array.isArray(rule.style)) {\n        for (let j = 0, jj = rule.style.length; j < jj; j++) {\n          check(rule.style[j]);\n        }\n      } else if ('style' in rule) {\n        check(rule.style);\n      } else {\n        check(rule);\n      }\n      if (result) {\n        return result;\n      }\n    }\n    return result;\n  }\n  check(style);\n  return result;\n}\n\n/**\n * @param {import('../../style/flat.js').FlatStyleLike} style Single flat style\n * @return {import('../../style/flat.js').FlatStyleLike} Style with text-related properties only;\n * NOTE: THIS MUTATES THE OBJECT\n */\nexport function stripNonTextStyleProperties(style) {\n  function stripStyle(style) {\n    for (const prop in style) {\n      if (!prop.startsWith('text-') && prop !== 'z-index') {\n        delete style[prop];\n      }\n    }\n  }\n  if (Array.isArray(style)) {\n    for (let i = 0, ii = style.length; i < ii; i++) {\n      const rule = style[i];\n      if ('style' in rule && Array.isArray(rule.style)) {\n        for (let j = 0, jj = rule.style.length; j < jj; j++) {\n          stripStyle(rule.style[j]);\n        }\n      } else if ('style' in rule) {\n        stripStyle(rule.style);\n      } else {\n        stripStyle(rule);\n      }\n    }\n    return style;\n  }\n  stripStyle(style);\n  return style;\n}\n\n/**\n * @param {function(): HTMLCanvasElement} textOverlayCanvasGetter Function that returns the canvas where the text overlay was rendered\n * @param {function(): import('../../Map.js').FrameState} textOverlayFrameStateGetter Function that returns the frame state used for rendering the text overlay\n * @return {import(\"../../renderer/webgl/Layer.js\").PostProcessesOptions} Post-process definition for text rendering\n */\nexport function createPostProcessDefinition(\n  textOverlayCanvasGetter,\n  textOverlayFrameStateGetter,\n) {\n  const tmpMatrix = createMat4();\n  return {\n    fragmentShader: `\n      precision mediump float;\n    \n      uniform sampler2D u_image;\n      uniform sampler2D ${TextUniforms.TEXT_OVERLAY_TEXTURE};\n      uniform mat4 ${TextUniforms.TEXT_OVERLAY_MATRIX};\n      \n      varying vec2 v_texCoord;\n    \n      void main() {\n        vec4 color = texture2D(u_image, v_texCoord);\n    \n        vec2 coords = v_texCoord * 2. - vec2(1.);\n        coords = (${TextUniforms.TEXT_OVERLAY_MATRIX} * vec4(coords.xy, 0., 1.)).xy;\n        coords = coords * 0.5 + vec2(0.5);\n        float outOfBounds = clamp(step(1., coords.x) + step(1., coords.y) + step(0., -coords.x) + step(0., -coords.y), 0., 1.);\n    \n        vec4 textColor = texture2D(${TextUniforms.TEXT_OVERLAY_TEXTURE}, vec2(coords.x, 1. - coords.y));\n        textColor.a *= 1. - outOfBounds; // if we're sampling out of the text overlay, make alpha 0 to avoid drawing anything\n\n        gl_FragColor = textColor.a * textColor + (1. - textColor.a) * color;\n      }`,\n    uniforms: {\n      [TextUniforms.TEXT_OVERLAY_TEXTURE]: textOverlayCanvasGetter,\n      [TextUniforms.TEXT_OVERLAY_MATRIX]: (frameState) => {\n        const textOverlayCanvas = textOverlayCanvasGetter();\n        const textOverlayFrameState = textOverlayFrameStateGetter();\n        if (!textOverlayCanvas || !textOverlayFrameState) {\n          return tmpMatrix;\n        }\n        const textOverlayViewState = textOverlayFrameState.viewState;\n        const viewState = frameState.viewState;\n        const center = viewState.center;\n        const resolution = viewState.resolution;\n        const rotation = viewState.rotation;\n        const size = frameState.size;\n        const renderedCenter = textOverlayViewState.center;\n        const renderedResolution = textOverlayViewState.resolution;\n        const renderedRotation = textOverlayViewState.rotation;\n        const renderedWidth = textOverlayCanvas.width;\n        const renderedHeight = textOverlayCanvas.height;\n        resetMat4(tmpMatrix);\n        scaleMat4(\n          tmpMatrix,\n          1 / renderedResolution / (renderedWidth / 2),\n          1 / renderedResolution / (renderedHeight / 2),\n          1,\n          tmpMatrix,\n        );\n        rotateMat4(tmpMatrix, renderedRotation, tmpMatrix);\n        translateMat4(\n          tmpMatrix,\n          center[0] - renderedCenter[0],\n          center[1] - renderedCenter[1],\n          0,\n          tmpMatrix,\n        );\n        rotateMat4(tmpMatrix, -rotation, tmpMatrix);\n        scaleMat4(\n          tmpMatrix,\n          (resolution * size[0]) / 2,\n          (resolution * size[1]) / 2,\n          1,\n          tmpMatrix,\n        );\n\n        return tmpMatrix;\n      },\n    },\n  };\n}\n\nconst textFeatureProps = {};\nconst textFeature = new RenderFeature(\n  'Point', // the feature holds a simple placeholder geometry\n  [0, 0],\n  [],\n  2,\n  textFeatureProps,\n  'dummy',\n);\n\nconst textDecoder = new TextDecoder();\n\n/**\n * @param {string} propertyName Name of the property (without the `prop_` prefix)\n * @param {import('../../expr/expression.js').ValueType} propertyType Type of the property (e.g. `StringType`, `ColorType`)\n * @param {Array<string>} customAttributesKeys Ordered keys of custom attributes\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes sizes\n * @param {Float32Array} customAttributesValues Flat array of custom attribute values for the feature\n * @param {Uint8Array} labels Encoded label bytes used for string properties\n * @return {string | Array<number> | number} Decoded custom attribute value\n */\nfunction readCustomAttributeValue(\n  propertyName,\n  propertyType,\n  customAttributesKeys,\n  customAttributes,\n  customAttributesValues,\n  labels,\n) {\n  const customAttrName = `prop_${propertyName}`;\n  const customAttrPosition = customAttributesKeys.findIndex(\n    (key) => key === customAttrName,\n  );\n  const customAttrOffset = customAttributesKeys\n    .slice(0, customAttrPosition)\n    .reduce((prev, curr) => prev + customAttributes[curr].size, 0);\n  const customAttrSize = customAttributes[customAttrName].size;\n\n  if (propertyType === StringType) {\n    const start = customAttributesValues[customAttrOffset + 1];\n    const length = customAttributesValues[customAttrOffset + 2];\n    const bytes = labels.slice(start, start + length);\n    return textDecoder.decode(bytes);\n  }\n  if (propertyType === ColorType) {\n    const value = unpackColor(\n      Array.from(\n        customAttributesValues.slice(customAttrOffset, customAttrOffset + 2),\n      ),\n    );\n    value[0] *= 255;\n    value[1] *= 255;\n    value[2] *= 255;\n    return value;\n  }\n  if (customAttrSize > 1) {\n    return Array.from(\n      customAttributesValues.slice(\n        customAttrOffset,\n        customAttrOffset + customAttrSize,\n      ),\n    );\n  }\n  return customAttributesValues[customAttrOffset];\n}\n\n/**\n * Draw text for a geometry using the provided style function and text builder.\n * @param {import('../../style/Style.js').StyleFunction} styleFunction Function returning style(s) for a feature\n * @param {import('../canvas/TextBuilder.js').default} textBuilder Text builder instance\n * @param {import('../Feature.js').default} feature Render feature used as style input\n * @param {import('../../geom/SimpleGeometry.js').default} geometry Geometry to draw text for\n * @param {Object} sharedData Mutable shared data object passed to the text builder\n * @private\n */\nfunction drawTextGeometry(\n  styleFunction,\n  textBuilder,\n  feature,\n  geometry,\n  sharedData,\n) {\n  let styles = styleFunction(feature, 1);\n  if (!styles) {\n    return;\n  }\n  styles = Array.isArray(styles) ? styles : [styles];\n  for (let i = 0, ii = styles.length; i < ii; i++) {\n    const textStyle = styles[i].getText();\n    if (!textStyle) {\n      continue;\n    }\n    const placement = textStyle.getPlacement();\n    const isLine = geometry.getType() === 'LineString'; // TODO: find a better way to figure out if the line geometry is a linear ring from a polygon\n    if ((placement === 'line' && !isLine) || (placement !== 'line' && isLine)) {\n      continue;\n    }\n    textBuilder.setTextStyle(textStyle, sharedData);\n    textBuilder.drawText(geometry, feature);\n  }\n}\n\n/**\n * Uses a Canvas Text Builder to render labels for polygons described in a RenderInstructions typed array\n * @param {Float32Array} renderInstructions Array of render instructions for polygons.\n * @param {Uint8Array} labels Integer array containing encoded labels (from LabelsArray)\n * @param {Map<string,import('../../expr/expression.js').ValueType>} properties Properties\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes definitions\n * @param {import('../canvas/TextBuilder.js').default} textBuilder Text builder\n * @param {import('../../style/Style.js').StyleFunction} styleFunction Text style\n * @private\n */\nexport function convertPolygonRenderInstructionsToCanvasTextBuilder(\n  renderInstructions,\n  labels,\n  properties,\n  customAttributes,\n  textBuilder,\n  styleFunction,\n) {\n  const customAttributesKeys = Object.keys(customAttributes);\n  const totalCustomAttributesSize = getCustomAttributesSize(customAttributes);\n  const instructionsPerVertex = 2; // x, y\n  const sharedData = {};\n\n  let instructionsIndex = 0;\n  while (instructionsIndex < renderInstructions.length) {\n    const customAttributesValues = new Float32Array(\n      renderInstructions.buffer,\n      instructionsIndex * Float32Array.BYTES_PER_ELEMENT,\n      totalCustomAttributesSize,\n    );\n    instructionsIndex += totalCustomAttributesSize;\n    const ringsCount = renderInstructions[instructionsIndex++];\n    let verticesCount = 0;\n    const ends = new Array(ringsCount);\n    for (let i = 0; i < ringsCount; i++) {\n      verticesCount += renderInstructions[instructionsIndex++];\n      ends[i] = verticesCount * instructionsPerVertex;\n    }\n\n    const newInstructionsIndex =\n      instructionsIndex + verticesCount * instructionsPerVertex;\n\n    const flatCoords = Array.from(\n      new Float32Array(\n        renderInstructions.buffer,\n        instructionsIndex * Float32Array.BYTES_PER_ELEMENT,\n        verticesCount * instructionsPerVertex,\n      ),\n    );\n    const polygon = new Polygon(flatCoords, 'XY', ends);\n    const propEntries = Array.from(properties.entries());\n    for (let i = 0; i < propEntries.length; i++) {\n      const [propName, propType] = propEntries[i];\n      textFeatureProps[propName] = readCustomAttributeValue(\n        propName,\n        propType,\n        customAttributesKeys,\n        customAttributes,\n        customAttributesValues,\n        labels,\n      );\n    }\n\n    drawTextGeometry(\n      styleFunction,\n      textBuilder,\n      textFeature,\n      polygon,\n      sharedData,\n    );\n\n    instructionsIndex = newInstructionsIndex;\n  }\n}\n\n/**\n Uses a Canvas Text Builder to render labels for line strings described in a RenderInstructions typed array\n * @param {Float32Array} renderInstructions Array of render instructions for lines.\n * @param {Uint8Array} labels Integer array containing encoded labels (from LabelsArray)\n * @param {Map<string,import('../../expr/expression.js').ValueType>} properties Properties\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes definitions\n * @param {import('../canvas/TextBuilder.js').default} textBuilder Text builder\n * @param {import('../../style/Style.js').StyleFunction} styleFunction Text style\n * @private\n */\nexport function convertLineStringRenderInstructionsToCanvasTextBuilder(\n  renderInstructions,\n  labels,\n  properties,\n  customAttributes,\n  textBuilder,\n  styleFunction,\n) {\n  const customAttributesKeys = Object.keys(customAttributes);\n  const totalCustomAttributesSize = getCustomAttributesSize(customAttributes);\n  const instructionsPerVertex = 3; // x, y\n  const sharedData = {};\n\n  let currentInstructionsIndex = 0;\n\n  let verticesCount;\n  while (currentInstructionsIndex < renderInstructions.length) {\n    const customAttributesValues = new Float32Array(\n      renderInstructions.buffer,\n      currentInstructionsIndex * Float32Array.BYTES_PER_ELEMENT,\n      totalCustomAttributesSize,\n    );\n    currentInstructionsIndex += totalCustomAttributesSize;\n\n    verticesCount = renderInstructions[currentInstructionsIndex++];\n\n    const flatCoords = Array.from(\n      new Float32Array(\n        renderInstructions.buffer,\n        currentInstructionsIndex * Float32Array.BYTES_PER_ELEMENT,\n        verticesCount * instructionsPerVertex,\n      ),\n    );\n\n    const lineString = new LineString(flatCoords, 'XYM'); // render instructions always provide XYM coordinates\n    const propEntries = Array.from(properties.entries());\n    for (let i = 0; i < propEntries.length; i++) {\n      const [propName, propType] = propEntries[i];\n      textFeatureProps[propName] = readCustomAttributeValue(\n        propName,\n        propType,\n        customAttributesKeys,\n        customAttributes,\n        customAttributesValues,\n        labels,\n      );\n    }\n\n    drawTextGeometry(\n      styleFunction,\n      textBuilder,\n      textFeature,\n      lineString,\n      sharedData,\n    );\n\n    currentInstructionsIndex += verticesCount * instructionsPerVertex;\n  }\n}\n\n/**\n Uses a Canvas Text Builder to render labels for points described in a RenderInstructions typed array\n * @param {Float32Array} renderInstructions Array of render instructions for points.\n * @param {Uint8Array} labels Integer array containing encoded labels (from LabelsArray)\n * @param {Map<string,import('../../expr/expression.js').ValueType>} properties Properties\n * @param {import('./VectorStyleRenderer.js').AttributeDefinitions} customAttributes Custom attributes definitions\n * @param {import('../canvas/TextBuilder.js').default} textBuilder Text builder\n * @param {import('../../style/Style.js').StyleFunction} styleFunction Text style\n * @private\n */\nexport function convertPointRenderInstructionsToCanvasTextBuilder(\n  renderInstructions,\n  labels,\n  properties,\n  customAttributes,\n  textBuilder,\n  styleFunction,\n) {\n  const customAttributesKeys = Object.keys(customAttributes);\n  const totalCustomAttributesSize = getCustomAttributesSize(customAttributes);\n  const instructionsPerVertex = 2; // x, y\n  const sharedData = {};\n\n  let currentInstructionsIndex = 0;\n  while (currentInstructionsIndex < renderInstructions.length) {\n    const flatCoords = [\n      renderInstructions.at(currentInstructionsIndex),\n      renderInstructions.at(currentInstructionsIndex + 1),\n    ];\n    currentInstructionsIndex += instructionsPerVertex;\n    const customAttributesValues = new Float32Array(\n      renderInstructions.buffer,\n      currentInstructionsIndex * Float32Array.BYTES_PER_ELEMENT,\n      totalCustomAttributesSize,\n    );\n\n    const point = new Point(flatCoords, 'XY');\n    const propEntries = Array.from(properties.entries());\n    for (let i = 0; i < propEntries.length; i++) {\n      const [propName, propType] = propEntries[i];\n      textFeatureProps[propName] = readCustomAttributeValue(\n        propName,\n        propType,\n        customAttributesKeys,\n        customAttributes,\n        customAttributesValues,\n        labels,\n      );\n    }\n\n    drawTextGeometry(\n      styleFunction,\n      textBuilder,\n      textFeature,\n      point,\n      sharedData,\n    );\n\n    currentInstructionsIndex += totalCustomAttributesSize;\n  }\n}\n","/**\n * @module ol/render/webgl/VectorStyleRenderer\n */\nimport Disposable from '../../Disposable.js';\nimport {createCanvasContext2D} from '../../dom.js';\nimport {\n  create as createTransform,\n  makeInverse as makeInverseTransform,\n} from '../../transform.js';\nimport {ARRAY_BUFFER, DYNAMIC_DRAW, ELEMENT_ARRAY_BUFFER} from '../../webgl.js';\nimport WebGLArrayBuffer from '../../webgl/Buffer.js';\nimport {AttributeType} from '../../webgl/Helper.js';\nimport LabelsArray from '../../webgl/LabelsArray.js';\nimport {create as createTextOverlayWorker} from '../../worker/textOverlay.js';\nimport {create as createWebGLWorker} from '../../worker/webgl.js';\nimport {\n  TextOverlayWorkerMessageType,\n  WebGLWorkerMessageType,\n} from './constants.js';\nimport {colorEncodeIdAndPack} from './encodeUtil.js';\nimport {\n  generateLineStringRenderInstructions,\n  generatePointRenderInstructions,\n  generatePolygonRenderInstructions,\n  getCustomAttributesSize,\n} from './renderinstructions.js';\nimport {serializeFrameState} from './serialize.js';\nimport {parseLiteralStyle} from './style.js';\nimport {hasTextStyle} from './textUtil.js';\n\nconst tmpColor = [];\n\n/** @type {Worker|undefined} */\nlet WEBGL_WORKER;\nfunction getWebGLWorker() {\n  if (!WEBGL_WORKER) {\n    WEBGL_WORKER = createWebGLWorker();\n  }\n  return WEBGL_WORKER;\n}\n\nlet workerMessageCounter = 0;\n\n/**\n *\n * @param {Worker} worker Worker to send the message to\n * @param {Object} message Message\n * @param {Array<Transferable>} [transferables] Transferables\n * @return {Promise<Object>} Response received by the worker\n */\nfunction messageWorker(worker, message, transferables) {\n  const messageId = workerMessageCounter++;\n\n  if (transferables) {\n    worker.postMessage({...message, id: messageId}, transferables);\n  } else {\n    worker.postMessage({...message, id: messageId});\n  }\n\n  return new Promise((resolve) => {\n    const handleMessage = (event) => {\n      const received = event.data;\n\n      // this is not the response to our request: skip\n      if (received.id !== messageId) {\n        return;\n      }\n\n      // we've received our response: stop listening\n      worker.removeEventListener('message', handleMessage);\n\n      resolve(received);\n    };\n\n    worker.addEventListener('message', handleMessage);\n  });\n}\n\n/**\n * Names of attributes made available to the vertex shader.\n * Please note: changing these *will* break custom shaders!\n * @enum {string}\n */\nexport const Attributes = {\n  POSITION: 'a_position',\n  LOCAL_POSITION: 'a_localPosition',\n  SEGMENT_START: 'a_segmentStart',\n  SEGMENT_END: 'a_segmentEnd',\n  MEASURE_START: 'a_measureStart',\n  MEASURE_END: 'a_measureEnd',\n  ANGLE_TANGENT_SUM: 'a_angleTangentSum',\n  JOIN_ANGLES: 'a_joinAngles',\n  DISTANCE_LOW: 'a_distanceLow',\n  DISTANCE_HIGH: 'a_distanceHigh',\n};\n\n/**\n * @typedef {Object} AttributeDefinition A description of a custom attribute to be passed on to the GPU, with a value different\n * for each feature.\n * @property {number} [size] Amount of numerical values composing the attribute, either 1, 2, 3 or 4; in case size is > 1, the return value\n * of the callback should be an array; if unspecified, assumed to be a single float value\n * @property {function(this:import(\"./MixedGeometryBatch.js\").GeometryBatchItem, import(\"../../Feature.js\").FeatureLike):number|Array<number>} callback This callback computes the numerical value of the\n * attribute for a given feature.\n */\n\n/**\n * @typedef {Object<string, AttributeDefinition>} AttributeDefinitions\n * @typedef {Object<string, import(\"../../webgl/Helper.js\").UniformValue>} UniformDefinitions\n */\n\n/**\n * @typedef {Array<WebGLArrayBuffer>} WebGLArrayBufferSet Buffers organized like so: [indicesBuffer, vertexAttributesBuffer, instanceAttributesBuffer]\n */\n\n/**\n * @typedef {Object} WebGLBuffers\n * Anything set to null means there's nothing to render for that category.\n * @property {WebGLArrayBufferSet|null} polygonBuffers Array containing indices and vertices buffers for polygons\n * @property {WebGLArrayBufferSet|null} lineStringBuffers Array containing indices and vertices buffers for line strings\n * @property {WebGLArrayBufferSet|null} pointBuffers Array containing indices and vertices buffers for points\n * @property {string|null} textInstructionsKey Key corresponding to a text instructions set\n * @property {import(\"../../transform.js\").Transform} invertVerticesTransform Inverse of the transform applied when generating buffers\n */\n\n/**\n * @typedef {Object} RenderInstructions\n * @property {Float32Array|null} polygonInstructions Polygon instructions; null if nothing to render\n * @property {Float32Array|null} lineStringInstructions LineString instructions; null if nothing to render\n * @property {Float32Array|null} pointInstructions Point instructions; null if nothing to render\n */\n\n/**\n * @typedef {Object} ShaderProgram An object containing both shaders (vertex and fragment)\n * @property {string} vertex Vertex shader source\n * @property {string} fragment Fragment shader source\n */\n\n/**\n * @typedef {import('./style.js').StyleParseResult} StyleShaders\n */\n\n/**\n * @typedef {import('../../style/flat.js').FlatStyleLike} FlatStyleLike\n */\n/**\n * @typedef {import('../../style/flat.js').FlatStyle} FlatStyle\n */\n/**\n * @typedef {import('../../style/flat.js').Rule} FlatStyleRule\n */\n\n/**\n * @typedef {Object} SubRenderPass\n * @property {string} vertexShader Vertex shader\n * @property {string} fragmentShader Fragment shader\n * @property {Array<import('../../webgl/Helper.js').AttributeDescription>} attributesDesc Attributes description, defined for each primitive vertex\n * @property {Array<import('../../webgl/Helper.js').AttributeDescription>} instancedAttributesDesc Attributes description, defined once per primitive\n * @property {number} instancePrimitiveVertexCount Number of vertices per instance primitive in this render pass\n * @property {WebGLProgram} [program] Program; this has to be recreated if the helper is lost/changed\n */\n\n/**\n * @typedef {Object} RenderPass\n * @property {SubRenderPass} [fillRenderPass] Fill render pass; undefined if no fill in pass\n * @property {SubRenderPass} [strokeRenderPass] Stroke render pass; undefined if no stroke in pass\n * @property {SubRenderPass} [symbolRenderPass] Symbol render pass; undefined if no symbol in pass\n */\n\n/**\n * @classdesc This class is responsible for:\n * 1. generating WebGL buffers according to a provided style, using a MixedGeometryBatch as input\n * 2. rendering geometries contained in said buffers\n *\n * A VectorStyleRenderer instance can be created either from a literal style or from shaders.\n * The shaders should not be provided explicitly but instead as a preconfigured ShaderBuilder instance.\n *\n * The `generateBuffers` method returns a promise resolving to WebGL buffers that are intended to be rendered by the\n * same renderer.\n */\nclass VectorStyleRenderer extends Disposable {\n  /**\n   * @param {FlatStyleLike|StyleShaders|Array<StyleShaders>} styles Vector styles expressed as flat styles, flat style rules or style shaders\n   * @param {import('../../style/flat.js').StyleVariables} variables Style variables\n   * @param {import('../../webgl/Helper.js').default} helper Helper\n   * @param {boolean} [enableHitDetection] Whether to enable the hit detection (needs compatible shader)\n   */\n  constructor(styles, variables, helper, enableHitDetection) {\n    super();\n\n    /**\n     * @private\n     * @type {import('../../webgl/Helper.js').default}\n     */\n    this.helper_;\n\n    /**\n     * @private\n     */\n    this.hitDetectionEnabled_ = !!enableHitDetection;\n\n    /**\n     * Flat style like; if shaders are given as input, will use the `sourceRule` property of the shaders\n     * `null` if no Flat style equivalent is available (e.g. custom-made shaders); in that case no text rendering will happen\n     * @type {FlatStyleLike|null}\n     */\n    this.flatStyle = toFlatStyleLike(styles);\n\n    /**\n     * @type {Array<StyleShaders>}\n     * @private\n     */\n    this.styleShaders = convertStyleToShaders(styles, variables);\n\n    /**\n     * @type {AttributeDefinitions}\n     * @private\n     */\n    this.customAttributes_ = {};\n\n    /**\n     @type {UniformDefinitions}\n     * @private\n     */\n    this.uniforms_ = {};\n\n    // add hit detection attribute if enabled\n    if (this.hitDetectionEnabled_) {\n      this.customAttributes_['hitColor'] = {\n        callback() {\n          return colorEncodeIdAndPack(this.ref, tmpColor);\n        },\n        size: 2,\n      };\n    }\n\n    // add attributes & uniforms coming from all shaders\n    for (const styleShader of this.styleShaders) {\n      for (const attributeName in styleShader.attributes) {\n        if (attributeName in this.customAttributes_) {\n          // already defined: skip\n          continue;\n        }\n        this.customAttributes_[attributeName] =\n          styleShader.attributes[attributeName];\n      }\n      for (const uniformName in styleShader.uniforms) {\n        if (uniformName in this.uniforms_) {\n          // already defined: skip\n          continue;\n        }\n        this.uniforms_[uniformName] = styleShader.uniforms[uniformName];\n      }\n    }\n\n    // create a render pass for each shader\n    /**\n     * @type {Array<RenderPass>}\n     * @private\n     */\n    this.renderPasses_ = this.styleShaders.map((styleShader) => {\n      /** @type {RenderPass} */\n      const renderPass = {};\n\n      const customAttributesDesc = Object.entries(this.customAttributes_).map(\n        ([name, value]) => {\n          const isUsed = name in styleShader.attributes || name === 'hitColor';\n          return {\n            name: isUsed ? `a_${name}` : null, // giving a null name means this is only used for \"spacing\" in between attributes\n            size: value.size || 1,\n            type: AttributeType.FLOAT,\n          };\n        },\n      );\n\n      // set up each subpass\n      if (styleShader.builder.getFillVertexShader()) {\n        renderPass.fillRenderPass = {\n          vertexShader: styleShader.builder.getFillVertexShader(),\n          fragmentShader: styleShader.builder.getFillFragmentShader(),\n          attributesDesc: [\n            {\n              name: Attributes.POSITION,\n              size: 2,\n              type: AttributeType.FLOAT,\n            },\n            ...customAttributesDesc,\n          ],\n          instancedAttributesDesc: [], // no instanced rendering for polygons\n          instancePrimitiveVertexCount: 3,\n        };\n      }\n      if (styleShader.builder.getStrokeVertexShader()) {\n        renderPass.strokeRenderPass = {\n          vertexShader: styleShader.builder.getStrokeVertexShader(),\n          fragmentShader: styleShader.builder.getStrokeFragmentShader(),\n          attributesDesc: [\n            {\n              name: Attributes.LOCAL_POSITION,\n              size: 2,\n              type: AttributeType.FLOAT,\n            },\n          ],\n          instancedAttributesDesc: [\n            {\n              name: Attributes.SEGMENT_START,\n              size: 2,\n              type: AttributeType.FLOAT,\n            },\n            {\n              name: Attributes.MEASURE_START,\n              size: 1,\n              type: AttributeType.FLOAT,\n            },\n            {\n              name: Attributes.SEGMENT_END,\n              size: 2,\n              type: AttributeType.FLOAT,\n            },\n            {\n              name: Attributes.MEASURE_END,\n              size: 1,\n              type: AttributeType.FLOAT,\n            },\n            {\n              name: Attributes.JOIN_ANGLES,\n              size: 2,\n              type: AttributeType.FLOAT,\n            },\n            {\n              name: Attributes.DISTANCE_LOW,\n              size: 1,\n              type: AttributeType.FLOAT,\n            },\n            {\n              name: Attributes.DISTANCE_HIGH,\n              size: 1,\n              type: AttributeType.FLOAT,\n            },\n            {\n              name: Attributes.ANGLE_TANGENT_SUM,\n              size: 1,\n              type: AttributeType.FLOAT,\n            },\n            ...customAttributesDesc,\n          ],\n          instancePrimitiveVertexCount: 6,\n        };\n      }\n      if (styleShader.builder.getSymbolVertexShader()) {\n        renderPass.symbolRenderPass = {\n          vertexShader: styleShader.builder.getSymbolVertexShader(),\n          fragmentShader: styleShader.builder.getSymbolFragmentShader(),\n          attributesDesc: [\n            {\n              name: Attributes.LOCAL_POSITION,\n              size: 2,\n              type: AttributeType.FLOAT,\n            },\n          ],\n          instancedAttributesDesc: [\n            {\n              name: Attributes.POSITION,\n              size: 2,\n              type: AttributeType.FLOAT,\n            },\n            ...customAttributesDesc,\n          ],\n          instancePrimitiveVertexCount: 6,\n        };\n      }\n      return renderPass;\n    });\n\n    this.hasFill_ = this.renderPasses_.some((pass) => pass.fillRenderPass);\n    this.hasStroke_ = this.renderPasses_.some((pass) => pass.strokeRenderPass);\n    this.hasSymbol_ = this.renderPasses_.some((pass) => pass.symbolRenderPass);\n    this.hasText_ = this.flatStyle && hasTextStyle(this.flatStyle);\n\n    if (this.hasText_) {\n      /**\n       * @private\n       */\n      this.textOverlayCanvas_ = /** @type {HTMLCanvasElement} */ (\n        createCanvasContext2D().canvas\n      );\n\n      /**\n       * @private\n       */\n      this.textOverlayContext_ = this.textOverlayCanvas_.getContext('2d');\n\n      /**\n       * @type {import(\"../../Map.js\").FrameState}\n       * @private\n       */\n      this.textOverlayRenderFrameState_ = null;\n\n      /**\n       * @type {Worker}\n       * @private\n       */\n      this.textOverlayWorker_ = createTextOverlayWorker();\n\n      /** @type {Set<string>} */\n      this.textOverlayRenderList_ = new Set();\n    }\n\n    // this will initialize render passes with the given helper\n    this.setHelper(helper);\n  }\n\n  /**\n   * @param {import('./MixedGeometryBatch.js').default} geometryBatch Geometry batch\n   * @param {import(\"../../transform.js\").Transform} transform Transform to apply to coordinates\n   * @param {number} resolution View resolution; used for text render instructions if any\n   * @return {Promise<WebGLBuffers>} A promise resolving to WebGL buffers; buffer sets are set to `null` if nothing to render\n   */\n  async generateBuffers(geometryBatch, transform, resolution) {\n    // also return the inverse of the transform that was applied when generating buffers\n    const invertVerticesTransform = makeInverseTransform(\n      createTransform(),\n      transform,\n    );\n\n    if (geometryBatch.isEmpty()) {\n      return {\n        polygonBuffers: null,\n        lineStringBuffers: null,\n        pointBuffers: null,\n        invertVerticesTransform: invertVerticesTransform,\n        textInstructionsKey: null,\n      };\n    }\n    const labelsArray = new LabelsArray();\n    const renderInstructions = this.generateRenderInstructions_(\n      geometryBatch,\n      labelsArray,\n      transform,\n    );\n    const [\n      textInstructionsKey,\n      polygonBuffers,\n      lineStringBuffers,\n      pointBuffers,\n    ] = await Promise.all([\n      this.hasText_\n        ? this.generateTextInstructions_(\n            renderInstructions,\n            labelsArray,\n            transform,\n            resolution,\n          )\n        : null,\n      this.hasFill_\n        ? this.generateBuffersForType_(\n            renderInstructions.polygonInstructions,\n            'Polygon',\n            transform,\n          )\n        : null,\n      this.hasStroke_\n        ? this.generateBuffersForType_(\n            renderInstructions.lineStringInstructions,\n            'LineString',\n            transform,\n          )\n        : null,\n      this.hasSymbol_\n        ? this.generateBuffersForType_(\n            renderInstructions.pointInstructions,\n            'Point',\n            transform,\n          )\n        : null,\n    ]);\n    return {\n      polygonBuffers: polygonBuffers,\n      lineStringBuffers: lineStringBuffers,\n      pointBuffers: pointBuffers,\n      invertVerticesTransform: invertVerticesTransform,\n      textInstructionsKey,\n    };\n  }\n\n  /**\n   * @param {import('./MixedGeometryBatch.js').default} geometryBatch Geometry batch\n   * @param {LabelsArray} labelsArray Labels array\n   * @param {import(\"../../transform.js\").Transform} transform Transform to apply to coordinates\n   * @return {RenderInstructions} Render instructions\n   * @private\n   */\n  generateRenderInstructions_(geometryBatch, labelsArray, transform) {\n    const polygonInstructions =\n      this.hasFill_ || this.hasText_ // if we do text rendering we need render instructions for all geometry types\n        ? generatePolygonRenderInstructions(\n            geometryBatch.polygonBatch,\n            new Float32Array(0),\n            labelsArray,\n            this.customAttributes_,\n            transform,\n          )\n        : null;\n    const lineStringInstructions =\n      this.hasStroke_ || this.hasText_\n        ? generateLineStringRenderInstructions(\n            geometryBatch.lineStringBatch,\n            new Float32Array(0),\n            labelsArray,\n            this.customAttributes_,\n            transform,\n          )\n        : null;\n    const pointInstructions =\n      this.hasSymbol_ || this.hasText_\n        ? generatePointRenderInstructions(\n            geometryBatch.pointBatch,\n            new Float32Array(0),\n            labelsArray,\n            this.customAttributes_,\n            transform,\n          )\n        : null;\n\n    return {\n      polygonInstructions,\n      lineStringInstructions,\n      pointInstructions,\n    };\n  }\n\n  /**\n   * @param {Float32Array|null} renderInstructions Render instructions\n   * @param {import(\"../../geom/Geometry.js\").Type} geometryType Geometry type\n   * @param {import(\"../../transform.js\").Transform} transform Transform to apply to coordinates\n   * @return {Promise<WebGLArrayBufferSet>|null} Indices buffer and vertices buffer; null if nothing to render\n   * @private\n   */\n  generateBuffersForType_(renderInstructions, geometryType, transform) {\n    if (renderInstructions === null) {\n      return null;\n    }\n\n    let messageType;\n    switch (geometryType) {\n      case 'Polygon':\n        messageType = WebGLWorkerMessageType.GENERATE_POLYGON_BUFFERS;\n        break;\n      case 'LineString':\n        messageType = WebGLWorkerMessageType.GENERATE_LINE_STRING_BUFFERS;\n        break;\n      case 'Point':\n        messageType = WebGLWorkerMessageType.GENERATE_POINT_BUFFERS;\n        break;\n      default:\n      // pass\n    }\n\n    /** @type {import('./constants.js').WebGLWorkerGenerateBuffersMessage} */\n    const message = {\n      type: messageType,\n      renderInstructions: renderInstructions.buffer,\n      renderInstructionsTransform: transform,\n      customAttributesSize: getCustomAttributesSize(this.customAttributes_),\n    };\n\n    return messageWorker(getWebGLWorker(), message, [\n      renderInstructions.buffer,\n    ]).then((data) => {\n      // the helper has disposed in the meantime; the promise will not be resolved\n      if (!this.helper_.getGL()) {\n        return;\n      }\n\n      const received =\n        /** @type {import('./constants.js').WebGLWorkerGenerateBuffersMessage} */ (\n          data\n        );\n\n      // copy & flush received buffers to GPU\n      const indicesBuffer = new WebGLArrayBuffer(\n        ELEMENT_ARRAY_BUFFER,\n        DYNAMIC_DRAW,\n      ).fromArrayBuffer(received.indicesBuffer);\n      const vertexAttributesBuffer = new WebGLArrayBuffer(\n        ARRAY_BUFFER,\n        DYNAMIC_DRAW,\n      ).fromArrayBuffer(received.vertexAttributesBuffer);\n      const instanceAttributesBuffer = new WebGLArrayBuffer(\n        ARRAY_BUFFER,\n        DYNAMIC_DRAW,\n      ).fromArrayBuffer(received.instanceAttributesBuffer);\n      this.helper_.flushBufferData(indicesBuffer);\n      this.helper_.flushBufferData(vertexAttributesBuffer);\n      this.helper_.flushBufferData(instanceAttributesBuffer);\n\n      return [indicesBuffer, vertexAttributesBuffer, instanceAttributesBuffer];\n    });\n  }\n\n  /**\n   * @param {RenderInstructions} renderInstructions Render instructions\n   * @param {import('../../webgl/LabelsArray.js').default} labelsArray Labels array\n   * @param {import(\"../../transform.js\").Transform} transform Transform to apply to coordinates\n   * @param {number} resolution View resolution to be used as a basis when computing text overflow\n   * @return {Promise<string>|null} Resolves to a key corresponding to the text draw instructions; null if no text to render\n   * @private\n   */\n  generateTextInstructions_(\n    renderInstructions,\n    labelsArray,\n    transform,\n    resolution,\n  ) {\n    const transferables = [labelsArray.getArray().buffer];\n    let polygonRenderInstructions = null;\n    let lineStringRenderInstructions = null;\n    let pointRenderInstructions = null;\n    if (renderInstructions.polygonInstructions) {\n      polygonRenderInstructions = new Float32Array(\n        renderInstructions.polygonInstructions,\n      ).buffer;\n      transferables.push(polygonRenderInstructions);\n    }\n    if (renderInstructions.lineStringInstructions) {\n      lineStringRenderInstructions = new Float32Array(\n        renderInstructions.lineStringInstructions,\n      ).buffer;\n      transferables.push(lineStringRenderInstructions);\n    }\n    if (renderInstructions.pointInstructions) {\n      pointRenderInstructions = new Float32Array(\n        renderInstructions.pointInstructions,\n      ).buffer;\n      transferables.push(pointRenderInstructions);\n    }\n    const customAttributesSizes = Object.keys(this.customAttributes_).reduce(\n      (prev, curr) => ({\n        ...prev,\n        [curr]: this.customAttributes_[curr].size || 1,\n      }),\n      {},\n    );\n\n    // load render instructions in text overlay worker\n    /** @type {import('./constants.js').TextOverlayWorkerMessage} */\n    const message = {\n      type: TextOverlayWorkerMessageType.BUILD_INSTRUCTIONS,\n      polygonRenderInstructions,\n      lineStringRenderInstructions,\n      pointRenderInstructions,\n      labelsArray: labelsArray.getArray(),\n      style: this.flatStyle,\n      customAttributesSizes,\n      renderInstructionsTransform: transform,\n      resolution,\n    };\n\n    return messageWorker(this.textOverlayWorker_, message, transferables).then(\n      (data) => {\n        const received =\n          /** @type {import('./constants.js').TextOverlayWorkerMessage} */ (\n            data\n          );\n\n        // we're getting a key from the worker: these will be used later on to ask for render or disposal\n        return received.instructionsSetKey;\n      },\n    );\n  }\n\n  /**\n   * Render the geometries in the given buffers.\n   * @param {WebGLBuffers} buffers WebGL Buffers to draw\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state\n   * @param {function(): void} preRenderCallback This callback will be called right before drawing, and can be used to set uniforms\n   */\n  render(buffers, frameState, preRenderCallback) {\n    for (const renderPass of this.renderPasses_) {\n      renderPass.fillRenderPass &&\n        buffers.polygonBuffers &&\n        this.renderInternal_(\n          buffers.polygonBuffers[0],\n          buffers.polygonBuffers[1],\n          buffers.polygonBuffers[2],\n          renderPass.fillRenderPass,\n          frameState,\n          preRenderCallback,\n        );\n      renderPass.strokeRenderPass &&\n        buffers.lineStringBuffers &&\n        this.renderInternal_(\n          buffers.lineStringBuffers[0],\n          buffers.lineStringBuffers[1],\n          buffers.lineStringBuffers[2],\n          renderPass.strokeRenderPass,\n          frameState,\n          preRenderCallback,\n        );\n      renderPass.symbolRenderPass &&\n        buffers.pointBuffers &&\n        this.renderInternal_(\n          buffers.pointBuffers[0],\n          buffers.pointBuffers[1],\n          buffers.pointBuffers[2],\n          renderPass.symbolRenderPass,\n          frameState,\n          preRenderCallback,\n        );\n    }\n    if (buffers.textInstructionsKey) {\n      this.renderText_(buffers);\n    }\n  }\n\n  /**\n   * @param {WebGLArrayBuffer} indicesBuffer Indices buffer\n   * @param {WebGLArrayBuffer} vertexAttributesBuffer Vertex attributes buffer\n   * @param {WebGLArrayBuffer} instanceAttributesBuffer Instance attributes buffer\n   * @param {SubRenderPass} subRenderPass Render pass (program, attributes, etc.) specific to one geometry type\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {function(): void} preRenderCallback This callback will be called right before drawing, and can be used to set uniforms\n   * @private\n   */\n  renderInternal_(\n    indicesBuffer,\n    vertexAttributesBuffer,\n    instanceAttributesBuffer,\n    subRenderPass,\n    frameState,\n    preRenderCallback,\n  ) {\n    const renderCount = indicesBuffer.getSize();\n    if (renderCount === 0) {\n      return;\n    }\n\n    const usesInstancedRendering = subRenderPass.instancedAttributesDesc.length;\n\n    this.helper_.useProgram(subRenderPass.program, frameState);\n    this.helper_.bindBuffer(vertexAttributesBuffer);\n    this.helper_.bindBuffer(indicesBuffer);\n    this.helper_.enableAttributes(subRenderPass.attributesDesc);\n    this.helper_.bindBuffer(instanceAttributesBuffer);\n    this.helper_.enableAttributesInstanced(\n      subRenderPass.instancedAttributesDesc,\n    );\n\n    preRenderCallback();\n\n    if (usesInstancedRendering) {\n      const instanceAttributesStride =\n        subRenderPass.instancedAttributesDesc.reduce(\n          (prev, curr) => prev + (curr.size || 1),\n          0,\n        );\n      const instanceCount =\n        instanceAttributesBuffer.getSize() / instanceAttributesStride;\n\n      this.helper_.drawElementsInstanced(0, renderCount, instanceCount);\n    } else {\n      this.helper_.drawElements(0, renderCount);\n    }\n  }\n\n  /**\n   * @param {WebGLBuffers} buffers WebGL Buffers to draw\n   * @private\n   */\n  renderText_(buffers) {\n    this.textOverlayRenderList_.add(buffers.textInstructionsKey);\n  }\n\n  /**\n   * Render the geometries in the given buffers.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state\n   * @return {Promise<void>} A promise resolving after the post rendering step is over\n   */\n  finalizeTextRender(frameState) {\n    if (!this.hasText_) {\n      return Promise.resolve();\n    }\n\n    const message = {\n      type: TextOverlayWorkerMessageType.RENDER,\n      frameState: serializeFrameState(frameState),\n      batchesToRender: this.textOverlayRenderList_,\n    };\n\n    return messageWorker(this.textOverlayWorker_, message).then((data) => {\n      const received =\n        /** @type {import('./constants.js').TextOverlayWorkerMessage} */ (data);\n\n      // if no render data returned, do not process it\n      if (received.imageData) {\n        this.textOverlayRenderFrameState_ = received.frameState;\n\n        // the rendered image data is copied to the canvas and then given back to the worker\n        const imageData = received.imageData;\n        if (\n          imageData.width !== this.textOverlayCanvas_.width ||\n          imageData.height !== this.textOverlayCanvas_.height\n        ) {\n          this.textOverlayCanvas_.width = imageData.width;\n          this.textOverlayCanvas_.height = imageData.height;\n        } else {\n          this.textOverlayContext_.clearRect(\n            0,\n            0,\n            this.textOverlayCanvas_.width,\n            this.textOverlayCanvas_.height,\n          );\n        }\n        this.textOverlayContext_.drawImage(imageData, 0, 0);\n        imageData.close();\n      }\n\n      this.textOverlayRenderList_.clear();\n    });\n  }\n\n  /**\n   * @param {import('../../webgl/Helper.js').default} helper Helper\n   * @param {WebGLBuffers} buffers WebGL Buffers to reload if any\n   */\n  setHelper(helper, buffers = null) {\n    this.helper_ = helper;\n\n    for (const renderPass of this.renderPasses_) {\n      if (renderPass.fillRenderPass) {\n        renderPass.fillRenderPass.program = this.helper_.getProgram(\n          renderPass.fillRenderPass.fragmentShader,\n          renderPass.fillRenderPass.vertexShader,\n        );\n      }\n      if (renderPass.strokeRenderPass) {\n        renderPass.strokeRenderPass.program = this.helper_.getProgram(\n          renderPass.strokeRenderPass.fragmentShader,\n          renderPass.strokeRenderPass.vertexShader,\n        );\n      }\n      if (renderPass.symbolRenderPass) {\n        renderPass.symbolRenderPass.program = this.helper_.getProgram(\n          renderPass.symbolRenderPass.fragmentShader,\n          renderPass.symbolRenderPass.vertexShader,\n        );\n      }\n    }\n    this.helper_.addUniforms(this.uniforms_);\n\n    if (buffers) {\n      if (buffers.polygonBuffers) {\n        this.helper_.flushBufferData(buffers.polygonBuffers[0]);\n        this.helper_.flushBufferData(buffers.polygonBuffers[1]);\n        this.helper_.flushBufferData(buffers.polygonBuffers[2]);\n      }\n      if (buffers.lineStringBuffers) {\n        this.helper_.flushBufferData(buffers.lineStringBuffers[0]);\n        this.helper_.flushBufferData(buffers.lineStringBuffers[1]);\n        this.helper_.flushBufferData(buffers.lineStringBuffers[2]);\n      }\n      if (buffers.pointBuffers) {\n        this.helper_.flushBufferData(buffers.pointBuffers[0]);\n        this.helper_.flushBufferData(buffers.pointBuffers[1]);\n        this.helper_.flushBufferData(buffers.pointBuffers[2]);\n      }\n    }\n  }\n\n  getTextOverlayCanvas() {\n    return this.textOverlayCanvas_;\n  }\n\n  getTextOverlayFrameState() {\n    return this.textOverlayRenderFrameState_;\n  }\n\n  /**\n   * Dispose of text instructions in worker.\n   * @param {string} key Key corresponding to the instructions set to dispose\n   */\n  disposeTextInstructions(key) {\n    this.textOverlayWorker_?.postMessage({\n      type: TextOverlayWorkerMessageType.DISPOSE_INSTRUCTIONS,\n      instructionsSetKey: key,\n    });\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.textOverlayWorker_?.terminate();\n    super.disposeInternal();\n  }\n}\n\nexport default VectorStyleRenderer;\n\n/**\n * @param {FlatStyleLike|StyleShaders|Array<StyleShaders>} styleOrShaders Either a flat style or shaders\n * @return {FlatStyleLike|null} Will return null if the original flat style could not be found\n */\nexport function toFlatStyleLike(styleOrShaders) {\n  if (Array.isArray(styleOrShaders)) {\n    // if it's an array of shaders but at least one has no source rule, we can't return a flat style like\n    if (styleOrShaders.some((s) => 'builder' in s && !('sourceRule' in s))) {\n      return null;\n    }\n    if (styleOrShaders.some((s) => 'builder' in s)) {\n      return styleOrShaders.map((style) => style.sourceRule);\n    }\n    return /** @type {FlatStyleLike} */ (styleOrShaders);\n  }\n  if ('builder' in styleOrShaders) {\n    if (!('sourceRule' in styleOrShaders)) {\n      return null;\n    }\n    return [styleOrShaders.sourceRule];\n  }\n  return styleOrShaders;\n}\n\n/**\n * Breaks down a vector style into an array of prebuilt shader builders with attributes and uniforms\n * @param {FlatStyleLike|StyleShaders|Array<StyleShaders>} style Vector style\n * @param {import('../../style/flat.js').StyleVariables} variables Style variables\n * @return {Array<StyleShaders>} Array of style shaders\n */\nexport function convertStyleToShaders(style, variables) {\n  // possible cases:\n  // - single shader\n  // - multiple shaders\n  // - single style\n  // - multiple styles\n  // - multiple rules\n  const asArray = Array.isArray(style) ? style : [style];\n\n  // if array of rules: break rules into separate styles, compute \"else\" filters\n  if ('style' in asArray[0]) {\n    /** @type {Array<StyleShaders>} */\n    const shaders = [];\n    const rules = /** @type {Array<FlatStyleRule>} */ (asArray);\n    const previousFilters = [];\n    for (const rule of rules) {\n      /** @type {Array<FlatStyle>} */\n      const ruleStyles = Array.isArray(rule.style) ? rule.style : [rule.style];\n      /** @type {import(\"../../expr/expression.js\").EncodedExpression} */\n      let currentFilter = rule.filter;\n      if (rule.else && previousFilters.length) {\n        currentFilter = [\n          'all',\n          ...previousFilters.map((filter) => ['!', filter]),\n        ];\n        if (rule.filter) {\n          currentFilter.push(rule.filter);\n        }\n        if (currentFilter.length < 3) {\n          currentFilter = currentFilter[1];\n        }\n      }\n      if (rule.filter) {\n        previousFilters.push(rule.filter);\n      }\n      // parse each style and convert to shader\n      const styleShaders = ruleStyles.map((style) => ({\n        ...parseLiteralStyle(style, variables, currentFilter),\n        sourceRule: rule,\n      }));\n      shaders.push(...styleShaders);\n    }\n    return shaders;\n  }\n\n  // if array of shaders: return as is\n  if ('builder' in asArray[0]) {\n    return /** @type {Array<StyleShaders>} */ (asArray);\n  }\n\n  // array of flat styles: simply convert to shaders\n  return /** @type {Array<FlatStyle>} */ (asArray).map((style) => ({\n    ...parseLiteralStyle(style, variables, null),\n    sourceRule: {style},\n  }));\n}\n","/**\n * Utilities for encoding/decoding values to be used in shaders\n * @module ol/render/webgl/encodeUtil\n */\n\n/**\n * Generates a color array based on a numerical id, and pack it just like the `packColor` function of 'ol/render/webgl/compileUtil.js'.\n * Note: the range for each component is 0 to 1 with 256 steps\n * @param {number} id Id\n * @param {Array<number>} [array] Reusable array\n * @return {Array<number>} Packed color array with two components\n */\nexport function colorEncodeIdAndPack(id, array) {\n  array = array || [];\n  const radix = 256;\n  const divide = radix - 1;\n  const r = Math.floor(id / radix / radix / radix) / divide;\n  const g = (Math.floor(id / radix / radix) % radix) / divide;\n  const b = (Math.floor(id / radix) % radix) / divide;\n  const a = (id % radix) / divide;\n  array[0] = r * 256 * 255 + g * 255;\n  array[1] = b * 256 * 255 + a * 255;\n  return array;\n}\n\n/**\n * Reads an id from a color-encoded array\n * Note: the expected range for each component is 0 to 1 with 256 steps.\n * @param {Array<number>} color Color array containing the encoded id; color components are in the range 0 to 1\n * @return {number} Decoded id\n */\nexport function colorDecodeId(color) {\n  let id = 0;\n  const radix = 256;\n  const mult = radix - 1;\n  id += Math.round(color[0] * radix * radix * radix * mult);\n  id += Math.round(color[1] * radix * radix * mult);\n  id += Math.round(color[2] * radix * mult);\n  id += Math.round(color[3] * mult);\n  return id;\n}\n","\n        export function create() {\n          const source = \"function t(t,e){return t>e?1:t<e?-1:0}function e(t,e,i){for(;e<i;){const n=t[e];t[e]=t[i],t[i]=n,++e,--i}}function i(t,e){const i=Array.isArray(e)?e:[e],n=i.length;for(let e=0;e<n;e++)t[t.length]=i[e]}function n(t,e){const i=t.length;if(i!==e.length)return!1;for(let n=0;n<i;n++)if(t[n]!==e[n])return!1;return!0}const r=\\\"undefined\\\"!=typeof navigator&&void 0!==navigator.userAgent?navigator.userAgent.toLowerCase():\\\"\\\";r.includes(\\\"safari\\\")&&!r.includes(\\\"chrom\\\")&&(r.includes(\\\"version/15.4\\\")||/cpu (os|iphone os) 15_4 like mac os x/.test(r)),r.includes(\\\"webkit\\\")&&r.includes(\\\"edge\\\"),r.includes(\\\"macintosh\\\");const s=\\\"undefined\\\"!=typeof WorkerGlobalScope&&\\\"undefined\\\"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope,o=\\\"undefined\\\"!=typeof Image&&Image.prototype.decode;function a(t,e,i,n){let r;return r=s?new class extends OffscreenCanvas{style={}}(t??300,e??150):document.createElement(\\\"canvas\\\"),t&&(r.width=t),e&&(r.height=e),r.getContext(\\\"2d\\\",n)}let l;function h(){return l||(l=a(1,1)),l}function c(t,e,i){return Math.min(Math.max(t,e),i)}function u(t,e,i,n,r,s){const o=r-i,a=s-n;if(0!==o||0!==a){const l=((t-i)*o+(e-n)*a)/(o*o+a*a);l>1?(i=r,n=s):l>0&&(i+=o*l,n+=a*l)}return f(t,e,i,n)}function f(t,e,i,n){const r=i-t,s=n-e;return r*r+s*s}function d(t){return 180*t/Math.PI}function g(t){return t*Math.PI/180}function p(t,e,i){return t+i*(e-t)}function _(t,e,i){if(t>=e&&t<i)return t;const n=i-e;return((t-e)%n+n)%n+e}!function(){let t=!1;try{const e=Object.defineProperty({},\\\"passive\\\",{get:function(){t=!0}});window.addEventListener(\\\"_\\\",null,e),window.removeEventListener(\\\"_\\\",null,e)}catch{}}();const m=[NaN,NaN,NaN,0];let y;const w=/^rgba?\\\\(\\\\s*(\\\\d+%?)\\\\s+(\\\\d+%?)\\\\s+(\\\\d+%?)(?:\\\\s*\\\\/\\\\s*(\\\\d+%|\\\\d*\\\\.\\\\d+|[01]))?\\\\s*\\\\)$/i,x=/^rgba?\\\\(\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)(?:\\\\s*,\\\\s*(\\\\d+%|\\\\d*\\\\.\\\\d+|[01]))?\\\\s*\\\\)$/i,v=/^rgba?\\\\(\\\\s*(\\\\d+%)\\\\s*,\\\\s*(\\\\d+%)\\\\s*,\\\\s*(\\\\d+%)(?:\\\\s*,\\\\s*(\\\\d+%|\\\\d*\\\\.\\\\d+|[01]))?\\\\s*\\\\)$/i,S=/^#([\\\\da-f]{3,4}|[\\\\da-f]{6}|[\\\\da-f]{8})$/i;function C(t,e){return t.endsWith(\\\"%\\\")?Number(t.substring(0,t.length-1))/e:Number(t)}function b(t){throw new Error('failed to parse \\\"'+t+'\\\" as color')}function M(t){if(t.toLowerCase().startsWith(\\\"rgb\\\")){const e=t.match(x)||t.match(w)||t.match(v);if(e){const t=e[4],i=100/255;return[c(C(e[1],i)+.5|0,0,255),c(C(e[2],i)+.5|0,0,255),c(C(e[3],i)+.5|0,0,255),void 0!==t?c(C(t,100),0,1):1]}b(t)}if(t.startsWith(\\\"#\\\")){if(S.test(t)){const e=t.substring(1),i=e.length<=4?1:2,n=[0,0,0,255];for(let t=0,r=e.length;t<r;t+=i){let r=parseInt(e.substring(t,t+i),16);1===i&&(r+=r<<4),n[t/i]=r}return n[3]=n[3]/255,n}b(t)}const e=(y||(y=a(1,1,0,{willReadFrequently:!0,desynchronized:!0})),y);e.fillStyle=\\\"#abcdef\\\";let i=e.fillStyle;e.fillStyle=t,e.fillStyle===i&&(e.fillStyle=\\\"#fedcba\\\",i=e.fillStyle,e.fillStyle=t,e.fillStyle===i&&b(t));const n=e.fillStyle;if(n.startsWith(\\\"#\\\")||n.startsWith(\\\"rgba\\\"))return M(n);e.clearRect(0,0,1,1),e.fillRect(0,0,1,1);const r=Array.from(e.getImageData(0,0,1,1).data);return r[3]=function(t,e){const i=Math.pow(10,e);return Math.round(t*i)/i}(r[3]/255,3),r}const I={};let E=0;function k(t){if(4===t.length)return t;const e=t.slice();return e[3]=1,e}function A(t){return t>.0031308?269.025*Math.pow(t,1/2.4)-14.025:3294.6*t}function P(t){return t>.2068965?Math.pow(t,3):108/841*(t-4/29)}function O(t){return t>10.314724?Math.pow((t+14.025)/269.025,2.4):t/3294.6}function R(t){return t>.0088564?Math.pow(t,1/3):t/(108/841)+4/29}function L(t){const e=O(t[0]),i=O(t[1]),n=O(t[2]),r=R(.222488403*e+.716873169*i+.06060791*n),s=500*(R(.452247074*e+.399439023*i+.148375274*n)-r),o=200*(r-R(.016863605*e+.117638439*i+.865350722*n)),a=Math.atan2(o,s)*(180/Math.PI);return[116*r-16,Math.sqrt(s*s+o*o),a<0?a+360:a,t[3]]}function D(t){if(\\\"none\\\"===t)return m;if(I.hasOwnProperty(t))return I[t];if(E>=1024){let t=0;for(const e in I)3&t++||(delete I[e],--E)}const e=M(t);4!==e.length&&b(t);for(const i of e)isNaN(i)&&b(t);return I[t]=e,++E,e}function F(t){return Array.isArray(t)?t:D(t)}function T(t){let e=t[0];e!=(0|e)&&(e=e+.5|0);let i=t[1];i!=(0|i)&&(i=i+.5|0);let n=t[2];n!=(0|n)&&(n=n+.5|0);return\\\"rgba(\\\"+e+\\\",\\\"+i+\\\",\\\"+n+\\\",\\\"+(void 0===t[3]?1:Math.round(1e3*t[3])/1e3)+\\\")\\\"}function z(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}let $=0;const W=1<<$++,G=1<<$++,N=1<<$++,X=1<<$++,Y=1<<$++,B=1<<$++,U=Math.pow(2,6)-1,j={[W]:\\\"boolean\\\",[G]:\\\"number\\\",[N]:\\\"string\\\",[X]:\\\"color\\\",[Y]:\\\"number[]\\\",[B]:\\\"size\\\"},V=Object.keys(j).map(Number).sort(t);function q(t){const e=[];for(const i of V)J(t,i)&&e.push(j[i]);return 0===e.length?\\\"untyped\\\":e.length<3?e.join(\\\" or \\\"):e.slice(0,-1).join(\\\", \\\")+\\\", or \\\"+e[e.length-1]}function J(t,e){return(t&e)===e}function K(t,e){return!!(t&e)}function H(t,e){return t===e}class Z{constructor(t,e){if(!function(t){return t in j}(t))throw new Error(`literal expressions must have a specific type, got ${q(t)}`);this.type=t,this.value=e}}class Q{constructor(t,e,...i){this.type=t,this.operator=e,this.args=i}}function tt(t){return{variables:new Map,properties:new Map,featureId:!1,geometryType:!1,mCoordinate:!1,mapState:!1,inputVariables:t}}function et(t,e,i){switch(typeof t){case\\\"boolean\\\":if(H(e,N))return new Z(N,t?\\\"true\\\":\\\"false\\\");if(!J(e,W))throw new Error(`got a boolean, but expected ${q(e)}`);return new Z(W,t);case\\\"number\\\":if(H(e,B))return new Z(B,z(t));if(H(e,W))return new Z(W,!!t);if(H(e,N))return new Z(N,t.toString());if(!J(e,G))throw new Error(`got a number, but expected ${q(e)}`);return new Z(G,t);case\\\"string\\\":if(H(e,X))return new Z(X,D(t));if(H(e,W))return new Z(W,!!t);if(!J(e,N))throw new Error(`got a string, but expected ${q(e)}`);return new Z(N,t)}if(!Array.isArray(t))throw new Error(\\\"expression must be an array or a primitive value\\\");if(0===t.length)throw new Error(\\\"empty expression\\\");if(\\\"string\\\"==typeof t[0])return function(t,e,i){const n=t[0],r=Jt[n];if(!r)throw new Error(`unknown operator: ${n}`);return r(t,e,i)}(t,e,i);for(const e of t)if(\\\"number\\\"!=typeof e)throw new Error(\\\"expected an array of numbers\\\");if(H(e,B)){if(2!==t.length)throw new Error(`expected an array of two values for a size, got ${t.length}`);return new Z(B,t)}if(H(e,X)){if(3===t.length)return new Z(X,[...t,1]);if(4===t.length)return new Z(X,t);throw new Error(`expected an array of 3 or 4 values for a color, got ${t.length}`)}if(!J(e,Y))throw new Error(`got an array of numbers, but expected ${q(e)}`);return new Z(Y,t)}const it=\\\"get\\\",nt=\\\"var\\\",rt=\\\"concat\\\",st=\\\"geometry-type\\\",ot=\\\"line-metric\\\",at=\\\"any\\\",lt=\\\"all\\\",ht=\\\"!\\\",ct=\\\"resolution\\\",ut=\\\"zoom\\\",ft=\\\"time\\\",dt=\\\"==\\\",gt=\\\"!=\\\",pt=\\\">\\\",_t=\\\">=\\\",mt=\\\"<\\\",yt=\\\"<=\\\",wt=\\\"*\\\",xt=\\\"/\\\",vt=\\\"+\\\",St=\\\"-\\\",Ct=\\\"clamp\\\",bt=\\\"%\\\",Mt=\\\"^\\\",It=\\\"abs\\\",Et=\\\"floor\\\",kt=\\\"ceil\\\",At=\\\"round\\\",Pt=\\\"sin\\\",Ot=\\\"cos\\\",Rt=\\\"atan\\\",Lt=\\\"sqrt\\\",Dt=\\\"match\\\",Ft=\\\"between\\\",Tt=\\\"interpolate\\\",zt=\\\"coalesce\\\",$t=\\\"case\\\",Wt=\\\"in\\\",Gt=\\\"number\\\",Nt=\\\"string\\\",Xt=\\\"array\\\",Yt=\\\"color\\\",Bt=\\\"id\\\",Ut=\\\"band\\\",jt=\\\"palette\\\",Vt=\\\"to-string\\\",qt=\\\"has\\\",Jt={[it]:re(Qt(1,1/0),Kt),[nt]:function(t,e,i){const n=t[1];if(\\\"string\\\"!=typeof n)throw new Error(\\\"expected a string argument for var operation\\\");let r=e;const s=i.inputVariables?.[n];if(void 0!==s){const t=et(s,U,i);if(!(t instanceof Z))throw new Error(`style variables should only be literal values (no expressions!), variable name: ${n}`);let o=t.type;if(\\\"string\\\"==typeof s&&K(r,X)&&!K(r,N)?o=X:Array.isArray(s)&&2===s.length&&K(r,B)&&!K(r,Y)&&(o=B),r&=o,0===r)throw new Error(`the type expected from the var operator (${q(e)}) did not have any overlap with the type of the corresponding style variables (${q(o)}), variable name: ${n}`)}if(i.variables.has(n)){const t=i.variables.get(n);if(r&=t,0===r)throw new Error(`a new type expected from the var operator (${q(e)}) did not have any overlap with the previous type expected for it (${q(t)}), variable name: ${n}`)}return i.variables.set(n,r),new Q(r,\\\"var\\\",new Z(N,n))},[qt]:re(Qt(1,1/0),Kt),[Bt]:re(function(t,e,i){i.featureId=!0},Zt),[rt]:re(Qt(2,1/0),ee(N)),[st]:re(function(t,e,i){i.geometryType=!0},Zt),[ot]:re(function(t,e,i){i.mCoordinate=!0},Zt),[ct]:re(Ht,Zt),[ut]:re(Ht,Zt),[ft]:re(Ht,Zt),[at]:re(Qt(2,1/0),ee(W)),[lt]:re(Qt(2,1/0),ee(W)),[ht]:re(Qt(1,1),ee(W)),[dt]:re(Qt(2,2),ie()),[gt]:re(Qt(2,2),ie()),[pt]:re(Qt(2,2),ee(G)),[_t]:re(Qt(2,2),ee(G)),[mt]:re(Qt(2,2),ee(G)),[yt]:re(Qt(2,2),ee(G)),[wt]:re(Qt(2,1/0),te),[zt]:re(Qt(2,1/0),te),[xt]:re(Qt(2,2),ee(G)),[vt]:re(Qt(2,1/0),ee(G)),[St]:re(Qt(2,2),ee(G)),[Ct]:re(Qt(3,3),ee(G)),[bt]:re(Qt(2,2),ee(G)),[Mt]:re(Qt(2,2),ee(G)),[It]:re(Qt(1,1),ee(G)),[Et]:re(Qt(1,1),ee(G)),[kt]:re(Qt(1,1),ee(G)),[At]:re(Qt(1,1),ee(G)),[Pt]:re(Qt(1,1),ee(G)),[Ot]:re(Qt(1,1),ee(G)),[Rt]:re(Qt(1,2),ee(G)),[Lt]:re(Qt(1,1),ee(G)),[Dt]:re(Qt(4,1/0),ne,function(t,e,i){const n=t.length-1,r=et(t[t.length-1],e,i);let s=N|G|W;const o=new Array(n-2);for(let e=0;e<n-2;e+=2){try{s&=et(t[e+2],s,i).type}catch(t){throw new Error(`failed to parse argument ${e+1} of match expression: ${t.message}`)}if(0===s)throw new Error(\\\"no common type was found among the arguments of match expression\\\")}for(let e=0;e<n-2;e+=2){try{const n=et(t[e+2],s,i);o[e]=n}catch(t){throw new Error(`failed to parse argument ${e+1} of match expression: ${t.message}`)}try{const n=et(t[e+3],r.type,i);o[e+1]=n}catch(t){throw new Error(`failed to parse argument ${e+2} of match expression: ${t.message}`)}}const a=et(t[1],s,i);return[a,...o,r]}),[Ft]:re(Qt(3,3),ee(G)),[Tt]:re(Qt(6,1/0),ne,function(t,e,i){const n=t[1];let r;switch(n[0]){case\\\"linear\\\":r=1;break;case\\\"exponential\\\":const t=n[1];if(\\\"number\\\"!=typeof t||t<=0)throw new Error(`expected a number base for exponential interpolation, got ${JSON.stringify(t)} instead`);r=t;break;default:throw new Error(`invalid interpolation type: ${JSON.stringify(n)}`)}const s=new Z(G,r);let o;try{o=et(t[2],G,i)}catch(t){throw new Error(`failed to parse argument 1 in interpolate expression: ${t.message}`)}const a=new Array(t.length-3);for(let n=0;n<a.length;n+=2){try{const e=et(t[n+3],G,i);a[n]=e}catch(t){throw new Error(`failed to parse argument ${n+2} for interpolate expression: ${t.message}`)}try{const r=et(t[n+4],e,i);a[n+1]=r}catch(t){throw new Error(`failed to parse argument ${n+3} for interpolate expression: ${t.message}`)}}return[s,o,...a]}),[$t]:re(Qt(3,1/0),function(t,e,i){const n=t[0],r=t.length-1;if(r%2==0)throw new Error(`expected an odd number of arguments for ${n}, got ${r} instead`)},function(t,e,i){const n=et(t[t.length-1],e,i),r=new Array(t.length-1);for(let e=0;e<r.length-1;e+=2){try{const n=et(t[e+1],W,i);r[e]=n}catch(t){throw new Error(`failed to parse argument ${e} of case expression: ${t.message}`)}try{const s=et(t[e+2],n.type,i);r[e+1]=s}catch(t){throw new Error(`failed to parse argument ${e+1} of case expression: ${t.message}`)}}return r[r.length-1]=n,r}),[Wt]:re(Qt(2,2),function(t,e,i){let n,r=t[2];if(!Array.isArray(r))throw new Error('the second argument for the \\\"in\\\" operator must be an array');if(\\\"literal\\\"===r[0]){if(r=r[1],!Array.isArray(r))throw new Error('failed to parse \\\"in\\\" expression: the literal operator must be followed by an array')}else if(\\\"string\\\"==typeof r[0])throw new Error('for the \\\"in\\\" operator, a string array should be wrapped in a \\\"literal\\\" operator to disambiguate from expressions');n=\\\"string\\\"==typeof r[0]?N:G;const s=new Array(r.length);for(let t=0;t<s.length;t++)try{const e=et(r[t],n,i);s[t]=e}catch(e){throw new Error(`failed to parse haystack item ${t} for \\\"in\\\" expression: ${e.message}`)}const o=et(t[1],n,i);return[o,...s]}),[Gt]:re(Qt(1,1/0),ee(U)),[Nt]:re(Qt(1,1/0),ee(U)),[Xt]:re(Qt(1,1/0),ee(G)),[Yt]:re(Qt(1,4),ee(G)),[Ut]:re(Qt(1,3),ee(G)),[jt]:re(Qt(2,2),function(t,e,i){let n;try{n=et(t[1],G,i)}catch(t){throw new Error(`failed to parse first argument in palette expression: ${t.message}`)}const r=t[2];if(!Array.isArray(r))throw new Error(\\\"the second argument of palette must be an array\\\");const s=new Array(r.length);for(let t=0;t<s.length;t++){let e;try{e=et(r[t],X,i)}catch(e){throw new Error(`failed to parse color at index ${t} in palette expression: ${e.message}`)}if(!(e instanceof Z))throw new Error(`the palette color at index ${t} must be a literal value`);s[t]=e}return[n,...s]}),[Vt]:re(Qt(1,1),ee(W|G|N|X))};function Kt(t,e,i){const n=t.length-1,r=new Array(n);for(let s=0;s<n;++s){const n=t[s+1];switch(typeof n){case\\\"number\\\":r[s]=new Z(G,n);break;case\\\"string\\\":r[s]=new Z(N,n);break;default:throw new Error(`expected a string key or numeric array index for a get operation, got ${n}`)}0===s&&i.properties.set(String(n),e)}return r}function Ht(t,e,i){i.mapState=!0}function Zt(t,e,i){const n=t[0];if(1!==t.length)throw new Error(`expected no arguments for ${n} operation`);return[]}function Qt(t,e){return function(i,n,r){const s=i[0],o=i.length-1;if(t===e){if(o!==t){throw new Error(`expected ${t} argument${1===t?\\\"\\\":\\\"s\\\"} for ${s}, got ${o}`)}}else if(o<t||o>e){throw new Error(`expected ${e===1/0?`${t} or more`:`${t} to ${e}`} arguments for ${s}, got ${o}`)}}}function te(t,e,i){const n=t.length-1,r=new Array(n);for(let s=0;s<n;++s){const n=et(t[s+1],e,i);r[s]=n}return r}function ee(t){return function(e,i,n){const r=e.length-1,s=new Array(r);for(let i=0;i<r;++i){const r=et(e[i+1],t,n);s[i]=r}return s}}function ie(){return function(t,e,i){const n=t[0],r=t.length-1,s=new Array(r);let o=U;for(let e=0;e<r;++e){o&=et(t[e+1],o,i).type}if(0===o)throw new Error(`no common type was found among the arguments of ${n}`);for(let e=0;e<r;++e){const n=et(t[e+1],o,i);s[e]=n}return s}}function ne(t,e,i){const n=t[0],r=t.length-1;if(r%2==1)throw new Error(`expected an even number of arguments for operation ${n}, got ${r} instead`)}function re(...t){return function(e,i,n){const r=e[0];let s;for(let r=0;r<t.length;r++){const o=t[r](e,i,n);if(r==t.length-1){if(!o)throw new Error(\\\"expected last argument validator to return the parsed args\\\");s=o}}return new Q(i,r,...s)}}function se(t){if(!t)return\\\"\\\";const e=t.getType();switch(e){case\\\"Point\\\":case\\\"LineString\\\":case\\\"Polygon\\\":return e;case\\\"MultiPoint\\\":case\\\"MultiLineString\\\":case\\\"MultiPolygon\\\":return e.substring(5);case\\\"Circle\\\":return\\\"Polygon\\\";case\\\"GeometryCollection\\\":return se(t.getGeometries()[0]);default:return\\\"\\\"}}var oe=0,ae=1,le=2,he=4,ce=8,ue=16;function fe(t,e,i){let n,r;return n=e<t[0]?t[0]-e:t[2]<e?e-t[2]:0,r=i<t[1]?t[1]-i:t[3]<i?i-t[3]:0,n*n+r*r}function de(t,e){return ge(t,e[0],e[1])}function ge(t,e,i){return t[0]<=e&&e<=t[2]&&t[1]<=i&&i<=t[3]}function pe(t,e){const i=t[0],n=t[1],r=t[2],s=t[3],o=e[0],a=e[1];let l=oe;return o<i?l|=ue:o>r&&(l|=he),a<n?l|=ce:a>s&&(l|=le),l===oe&&(l=ae),l}function _e(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function me(t){return _e(1/0,1/0,-1/0,-1/0,t)}function ye(t,e){const i=t[0],n=t[1];return _e(i,n,i,n,e)}function we(t,e,i,n,r){return xe(me(r),t,e,i,n)}function xe(t,e,i,n,r){for(;i<n;i+=r)ve(t,e[i],e[i+1]);return t}function ve(t,e,i){t[0]=Math.min(t[0],e),t[1]=Math.min(t[1],i),t[2]=Math.max(t[2],e),t[3]=Math.max(t[3],i)}function Se(t){return[(t[0]+t[2])/2,(t[1]+t[3])/2]}function Ce(t){return t[3]-t[1]}function be(t,e){return t[0]<=e[2]&&t[2]>=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Me(t,e,i,n){let r=t[e],s=t[e+1],o=0;for(let a=e+n;a<i;a+=n){const e=t[a],i=t[a+1];o+=Math.sqrt((e-r)*(e-r)+(i-s)*(i-s)),r=e,s=i}return o}function Ie(t,e,i,n,r,s,o,a){o=o??[],a=a??n;const l=t[e+n],h=t[e+n+1],c=t[i-2*n],u=t[i-2*n+1];let f,d,g,p,_,m,y,w,x=0;for(let v=e;v<i;v+=n){g=f,p=d,_=void 0,m=void 0,v+n<i&&(_=t[v+n],m=t[v+n+1]),s&&v===e&&(g=c,p=u),s&&v===i-n&&(_=l,m=h),f=t[v],d=t[v+1],[y,w]=Ee(f,d,g,p,_,m,r),o[x++]=y,o[x++]=w;for(let e=2;e<a;e++)o[x++]=t[v+e]}return o.length!=x&&(o.length=x),o}function Ee(t,e,i,n,r,s,o){let a,l;void 0!==i&&void 0!==n?(a=t-i,l=e-n):void 0!==r&&void 0!==s?(a=r-t,l=s-e):(a=1,l=0);const h=Math.hypot(a,l),u=a/h,f=l/h;if(a=-f,l=u,void 0===i||void 0===n)return[t+a*o,e+l*o];if(void 0===r||void 0===s)return[t+a*o,e+l*o];const d=function(t,e,i){const n=Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),r=[(e[0]-t[0])/n,(e[1]-t[1])/n],s=[-r[1],r[0]],o=Math.sqrt((i[0]-t[0])*(i[0]-t[0])+(i[1]-t[1])*(i[1]-t[1])),a=[(i[0]-t[0])/o,(i[1]-t[1])/o];let l=0===n||0===o?0:Math.acos(c(a[0]*r[0]+a[1]*r[1],-1,1));return l=Math.max(l,1e-5),a[0]*s[0]+a[1]*s[1]>0?l:2*Math.PI-l}([t,e],[i,n],[r,s]);if(Math.cos(d)>.998)return[t+u*o,e+f*o];const g=Math.cos(d/2),p=Math.sin(d/2);return[t+(p*a+g*l)*(1/p)*o,e+(-g*a+p*l)*(1/p)*o]}function ke(t,e,i=!1){for(let n=0,r=t.length-2;n<r;n+=e){for(let r=i&&0===n?t.length-3*e:t.length-2*e;r>n+e;r-=e){const i=t[n],s=t[n+1],o=t[n+e],a=t[n+e+1],l=t[r],h=t[r+1],c=t[r+e],u=t[r+e+1],f=(u-h)*(o-i)-(c-l)*(a-s);if(0===f)continue;const d=((c-l)*(s-h)-(u-h)*(i-l))/f,g=((o-i)*(s-h)-(a-s)*(i-l))/f;if(d>0&&d<1&&g>0&&g<1){const l=i+d*(o-i),h=s+d*(a-s);t[n+e]=l,t[n+e+1]=h,t.splice(n+2*e,r-n-e);break}}}return t}function Ae(t,e,i,n,r,s,o){s=s||[],o=o||2;let a=0;for(let l=e;l<i;l+=n){const e=t[l],i=t[l+1];s[a++]=r[0]*e+r[2]*i+r[4],s[a++]=r[1]*e+r[3]*i+r[5];for(let e=2;e<o;e++)s[a++]=t[l+e]}return s&&s.length!=a&&(s.length=a),s}function Pe(t,e,i,n,r,s,o){o=o||[];const a=Math.cos(r),l=Math.sin(r),h=s[0],c=s[1];let u=0;for(let r=e;r<i;r+=n){const e=t[r]-h,i=t[r+1]-c;o[u++]=h+e*a-i*l,o[u++]=c+e*l+i*a;for(let e=r+2;e<r+n;++e)o[u++]=t[e]}return o&&o.length!=u&&(o.length=u),o}let Oe;function Re(t,e,i,n,r,s,o,a,l,h,c,u,f=!0){let d=t[e],g=t[e+1],_=0,m=0,y=0,w=0;function x(){_=d,m=g,d=t[e+=n],g=t[e+1],w+=y,y=Math.sqrt((d-_)*(d-_)+(g-m)*(g-m))}do{x()}while(e<i-n&&w+y<s);let v=0===y?0:(s-w)/y;const S=p(_,d,v),C=p(m,g,v),b=e-n,M=w,I=s+a*l(h,r,c);for(;e<i-n&&w+y<I;)x();v=0===y?0:(I-w)/y;const E=p(_,d,v),k=p(m,g,v);let A=!1;if(f)if(u){const t=[S,C,E,k];Pe(t,0,4,2,u,t,t),A=t[0]>t[2]}else A=S>E;const P=Math.PI,O=[],R=b+n===e;let L;if(y=0,w=M,d=t[e=b],g=t[e+1],R){x(),L=Math.atan2(g-m,d-_),A&&(L+=L>0?-P:P);const t=(E+S)/2,e=(k+C)/2;return O[0]=[t,e,(I-s)/2,L,r],O}r=r.replace(/\\\\n/g,\\\" \\\");const D=Array.from((Oe||(Oe=new Intl.Segmenter(void 0,{granularity:\\\"grapheme\\\"})),Oe).segment(r),t=>t.segment);for(let t=0,r=D.length;t<r;){x();let u=Math.atan2(g-m,d-_);if(A&&(u+=u>0?-P:P),void 0!==L){let t=u-L;if(t+=t>P?-2*P:t<-P?2*P:0,Math.abs(t)>o)return null}L=u;const f=t;let S=0;for(;t<r;++t){const o=a*l(h,D[A?r-t-1:t],c);if(e+n<i&&w+y<s+S+o/2)break;S+=o}if(t===f)continue;const C=(A?D.slice(r-t,r-f):D.slice(f,t)).join(\\\"\\\");v=0===y?0:(s+S/2-w)/y;const b=p(_,d,v),M=p(m,g,v);O.push([b,M,S/2,u,C]),s+=S}return O}function Le(t,e){if(!t)throw new Error(e)}const De=[1,0,0,1,0,0];function Fe(){return De.slice(0)}function Te(t,e){const i=t[0],n=t[1],r=t[2],s=t[3],o=t[4],a=t[5],l=e[0],h=e[1],c=e[2],u=e[3],f=e[4],d=e[5];return t[0]=i*l+r*h,t[1]=n*l+s*h,t[2]=i*c+r*u,t[3]=n*c+s*u,t[4]=i*f+r*d+o,t[5]=n*f+s*d+a,t}function ze(t,e){const i=e[0],n=e[1];return e[0]=t[0]*i+t[2]*n+t[4],e[1]=t[1]*i+t[3]*n+t[5],e}function $e(t,e,i,n,r,s,o,a){const l=Math.sin(s),h=Math.cos(s);return t[0]=n*h,t[1]=r*l,t[2]=-n*l,t[3]=r*h,t[4]=o*n*h-a*n*l+e,t[5]=o*r*l+a*r*h+i,t}function We(t){return function(t,e){const i=(n=e,n[0]*n[3]-n[1]*n[2]);var n;Le(0!==i,\\\"Transformation matrix cannot be inverted\\\");const r=e[0],s=e[1],o=e[2],a=e[3],l=e[4],h=e[5];return t[0]=a/i,t[1]=-s/i,t[2]=-o/i,t[3]=r/i,t[4]=(o*h-a*l)/i,t[5]=-(r*h-s*l)/i,t}(t,t)}new Array(6);var Ge=\\\"propertychange\\\";function Ne(t){for(const e in t)delete t[e]}function Xe(t){let e;for(e in t)return!1;return!e}function Ye(t,e,i,n,r){if(r){const n=i;i=function(r){return t.removeEventListener(e,i),n.call(this,r)}}const s={target:t,type:e,listener:i};return t.addEventListener(e,i),s}function Be(t,e,i,n){return Ye(t,e,i,0,!0)}function Ue(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),Ne(t))}var je=\\\"change\\\";class Ve{constructor(){this.disposed=!1}dispose(){this.disposed||(this.disposed=!0,this.disposeInternal())}disposeInternal(){}}function qe(){}function Je(t){let e,i,r;return function(){const s=Array.prototype.slice.call(arguments);return i&&this===r&&n(s,i)||(r=this,i=s,e=t.apply(this,arguments)),e}}class Ke{constructor(t){this.propagationStopped,this.defaultPrevented,this.type=t,this.target=null}preventDefault(){this.defaultPrevented=!0}stopPropagation(){this.propagationStopped=!0}}class He extends Ve{constructor(t){super(),this.eventTarget_=t,this.pendingRemovals_=null,this.dispatching_=null,this.listeners_=null}addEventListener(t,e){if(!t||!e)return;const i=this.listeners_||(this.listeners_={}),n=i[t]||(i[t]=[]);n.includes(e)||n.push(e)}dispatchEvent(t){const e=\\\"string\\\"==typeof t,i=e?t:t.type,n=this.listeners_&&this.listeners_[i];if(!n)return;const r=e?new Ke(t):t;r.target||(r.target=this.eventTarget_||this);const s=this.dispatching_||(this.dispatching_={}),o=this.pendingRemovals_||(this.pendingRemovals_={});let a;i in s||(s[i]=0,o[i]=0),++s[i];for(let t=0,e=n.length;t<e;++t)if(a=\\\"handleEvent\\\"in n[t]?n[t].handleEvent(r):n[t].call(this,r),!1===a||r.propagationStopped){a=!1;break}if(0===--s[i]){let t=o[i];for(delete o[i];t--;)this.removeEventListener(i,qe);delete s[i]}return a}disposeInternal(){this.listeners_&&Ne(this.listeners_)}getListeners(t){return this.listeners_&&this.listeners_[t]||void 0}hasListener(t){return!!this.listeners_&&(t?t in this.listeners_:Object.keys(this.listeners_).length>0)}removeEventListener(t,e){if(!this.listeners_)return;const i=this.listeners_[t];if(!i)return;const n=i.indexOf(e);-1!==n&&(this.pendingRemovals_&&t in this.pendingRemovals_?(i[n]=qe,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t]))}}class Ze extends He{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent(je)}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const i=t.length,n=new Array(i);for(let r=0;r<i;++r)n[r]=Ye(this,t[r],e);return n}return Ye(this,t,e)}onceInternal(t,e){let i;if(Array.isArray(t)){const n=t.length;i=new Array(n);for(let r=0;r<n;++r)i[r]=Be(this,t[r],e)}else i=Be(this,t,e);return e.ol_key=i,i}unInternal(t,e){const i=e.ol_key;if(i)!function(t){if(Array.isArray(t))for(let e=0,i=t.length;e<i;++e)Ue(t[e]);else Ue(t)}(i);else if(Array.isArray(t))for(let i=0,n=t.length;i<n;++i)this.removeEventListener(t[i],e);else this.removeEventListener(t,e)}}function Qe(){throw new Error(\\\"Unimplemented abstract method.\\\")}let ti=0;function ei(t){return t.ol_uid||(t.ol_uid=String(++ti))}class ii extends Ke{constructor(t,e,i){super(t),this.key=e,this.oldValue=i}}class ni extends Ze{constructor(t){super(),this.on,this.once,this.un,ei(this),this.values_=null,void 0!==t&&this.setProperties(t)}get(t){let e;return this.values_&&this.values_.hasOwnProperty(t)&&(e=this.values_[t]),e}getKeys(){return this.values_&&Object.keys(this.values_)||[]}getProperties(){return this.values_&&Object.assign({},this.values_)||{}}getPropertiesInternal(){return this.values_}hasProperties(){return!!this.values_}notify(t,e){let i;i=`change:${t}`,this.hasListener(i)&&this.dispatchEvent(new ii(i,t,e)),i=Ge,this.hasListener(i)&&this.dispatchEvent(new ii(i,t,e))}addChangeListener(t,e){this.addEventListener(`change:${t}`,e)}removeChangeListener(t,e){this.removeEventListener(`change:${t}`,e)}set(t,e,i){const n=this.values_||(this.values_={});if(i)n[t]=e;else{const i=n[t];n[t]=e,i!==e&&this.notify(t,i)}}setProperties(t,e){for(const i in t)this.set(i,t[i],e)}applyProperties(t){t.values_&&Object.assign(this.values_||(this.values_={}),t.values_)}unset(t,e){if(this.values_&&t in this.values_){const i=this.values_[t];delete this.values_[t],Xe(this.values_)&&(this.values_=null),e||this.notify(t,i)}}}const ri=new RegExp([\\\"^\\\\\\\\s*(?=(?:(?:[-a-z]+\\\\\\\\s*){0,2}(italic|oblique))?)\\\",\\\"(?=(?:(?:[-a-z]+\\\\\\\\s*){0,2}(small-caps))?)\\\",\\\"(?=(?:(?:[-a-z]+\\\\\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)\\\",\\\"(?:(?:normal|\\\\\\\\1|\\\\\\\\2|\\\\\\\\3)\\\\\\\\s*){0,3}((?:xx?-)?\\\",\\\"(?:small|large)|medium|smaller|larger|[\\\\\\\\.\\\\\\\\d]+(?:\\\\\\\\%|in|[cem]m|ex|p[ctx]))\\\",\\\"(?:\\\\\\\\s*\\\\\\\\/\\\\\\\\s*(normal|[\\\\\\\\.\\\\\\\\d]+(?:\\\\\\\\%|in|[cem]m|ex|p[ctx])?))\\\",\\\"?\\\\\\\\s*([-,\\\\\\\\\\\\\\\"\\\\\\\\'\\\\\\\\sa-z0-9]+?)\\\\\\\\s*$\\\"].join(\\\"\\\"),\\\"i\\\"),si=[\\\"style\\\",\\\"variant\\\",\\\"weight\\\",\\\"size\\\",\\\"lineHeight\\\",\\\"family\\\"],oi={normal:400,bold:700},ai=function(t){const e=t.match(ri);if(!e)return null;const i={lineHeight:\\\"normal\\\",size:\\\"1.2em\\\",style:\\\"normal\\\",weight:\\\"400\\\",variant:\\\"normal\\\"};for(let t=0,n=si.length;t<n;++t){const n=e[t+1];void 0!==n&&(i[si[t]]=\\\"string\\\"==typeof n?n.trim():n)}return isNaN(Number(i.weight))&&i.weight in oi&&(i.weight=oi[i.weight]),i.families=i.family.split(/,\\\\s?/).map(t=>t.trim().replace(/^['\\\"]|['\\\"]$/g,\\\"\\\")),i},li=\\\"#000\\\",hi=\\\"round\\\",ci=[],ui=\\\"round\\\",fi=\\\"#000\\\",di=\\\"center\\\",gi=\\\"middle\\\",pi=[0,0,0,0],_i=new ni;let mi,yi=null;const wi={},xi=new Set([\\\"serif\\\",\\\"sans-serif\\\",\\\"monospace\\\",\\\"cursive\\\",\\\"fantasy\\\",\\\"system-ui\\\",\\\"ui-serif\\\",\\\"ui-sans-serif\\\",\\\"ui-monospace\\\",\\\"ui-rounded\\\",\\\"emoji\\\",\\\"math\\\",\\\"fangsong\\\"]);function vi(t,e,i){return`${t} ${e} 16px \\\"${i}\\\"`}const Si=function(){const t=100;let e,i;async function n(t){await i.ready;const e=ai(t),n=e.families[0].toLowerCase(),r=e.weight,s=[];if(i.forEach(t=>{const i=t.family.replace(/^['\\\"]|['\\\"]$/g,\\\"\\\").toLowerCase(),o=oi[t.weight]||t.weight;i===n&&t.style===e.style&&o==r&&s.push(t)}),0===s.length)return!1;return(await Promise.all(s.map(t=>t.load().then(()=>!0,()=>!1)))).some(t=>t)}async function r(){await i.ready;let s=!0;const o=_i.getProperties(),a=Object.keys(o).filter(e=>o[e]<t);for(let e=a.length-1;e>=0;--e){const i=a[e];let r=o[i];r<t&&(await n(i)?(Ne(wi),_i.set(i,t)):(r+=10,_i.set(i,r,!0),r<t&&(s=!1)))}e=void 0,s||(e=setTimeout(r,100))}return async function(t){i||(i=s?self.fonts:document.fonts);const n=ai(t);if(!n)return;const o=n.families;let a=!1;for(const t of o){if(xi.has(t))continue;const e=vi(n.style,n.weight,t);void 0===_i.get(e)&&(_i.set(e,0,!0),a=!0)}a&&(clearTimeout(e),e=setTimeout(r,100))}}(),Ci=function(){let t;return function(e){let i=wi[e];if(null==i){if(s){const t=ai(e),n=bi(e,\\\"Žg\\\");i=(isNaN(Number(t.lineHeight))?1.2:Number(t.lineHeight))*(n.actualBoundingBoxAscent+n.actualBoundingBoxDescent)}else t||(t=document.createElement(\\\"div\\\"),t.innerHTML=\\\"M\\\",t.style.minHeight=\\\"0\\\",t.style.maxHeight=\\\"none\\\",t.style.height=\\\"auto\\\",t.style.padding=\\\"0\\\",t.style.border=\\\"none\\\",t.style.position=\\\"absolute\\\",t.style.display=\\\"block\\\",t.style.left=\\\"-99999px\\\"),t.style.font=e,document.body.appendChild(t),i=t.offsetHeight,document.body.removeChild(t);wi[e]=i}return i}}();function bi(t,e){return yi||(yi=a(1,1)),t!=mi&&(yi.font=t,mi=yi.font),yi.measureText(e)}function Mi(t,e){return bi(t,e).width}function Ii(t,e,i){if(e in i)return i[e];const n=e.split(\\\"\\\\n\\\").reduce((e,i)=>Math.max(e,Mi(t,i)),0);return i[e]=n,n}function Ei(t,e,i,n,r,s,o,a,l,h,c){t.save(),1!==i&&(void 0===t.globalAlpha?t.globalAlpha=t=>t.globalAlpha*=i:t.globalAlpha*=i),e&&t.transform.apply(t,e),n.contextInstructions?(t.translate(l,h),t.scale(c[0],c[1]),function(t,e){const i=t.contextInstructions;for(let t=0,n=i.length;t<n;t+=2)Array.isArray(i[t+1])?e[i[t]].apply(e,i[t+1]):e[i[t]]=i[t+1]}(n,t)):c[0]<0||c[1]<0?(t.translate(l,h),t.scale(c[0],c[1]),t.drawImage(n,r,s,o,a,0,0,o,a)):t.drawImage(n,r,s,o,a,l,h,o*c[0],a*c[1]),t.restore()}class ki{constructor(){this.instructions_=[],this.zIndex=0,this.offset_=0,this.pendingMethod_,this.context_=new Proxy(h(),{get:(t,e)=>{if(\\\"function\\\"==typeof t[e])return this.pendingMethod_=e,this.pushMethodArgs_},set:(t,e,i)=>(this.push_(e,i),!0)})}push_(...t){const e=this.instructions_,i=this.zIndex+this.offset_;e[i]||(e[i]=[]),e[i].push(...t)}pushMethodArgs_=(...t)=>{this.push_(this.pendingMethod_,t)};pushFunction(t){this.push_(t)}getContext(){return this.context_}draw(t){this.instructions_.forEach(e=>{for(let i=0,n=e.length;i<n;++i){const n=e[i];if(\\\"function\\\"==typeof n){n(t);continue}const r=e[++i];\\\"function\\\"==typeof t[n]?t[n](...r):t[n]=\\\"function\\\"==typeof r?r(t):r}})}clear(){this.instructions_.length=0,this.zIndex=0,this.offset_=0}offset(){this.offset_=this.instructions_.length,this.zIndex=0}}const Ai=0,Pi=1,Oi=2,Ri=3,Li=4,Di=5,Fi=6,Ti=7,zi=8,$i=9,Wi=10,Gi=11,Ni=12;var Xi=0,Yi=1,Bi=2,Ui=3;function ji(t,e){return e&&(t.src=e),t.src&&o?new Promise((e,i)=>t.decode().then(()=>e(t)).catch(n=>t.complete&&t.width?e(t):i(n))):function(t){return new Promise((e,i)=>{function n(){s(),e(t)}function r(){s(),i(new Error(\\\"Image load error\\\"))}function s(){t.removeEventListener(\\\"load\\\",n),t.removeEventListener(\\\"error\\\",r)}t.addEventListener(\\\"load\\\",n),t.addEventListener(\\\"error\\\",r)})}(t)}function Vi(t,e){return t+\\\":\\\"+(e?F(e):\\\"null\\\")}const qi=new class{constructor(){this.cache_={},this.patternCache_={},this.cacheSize_=0,this.maxCacheSize_=1024}clear(){this.cache_={},this.patternCache_={},this.cacheSize_=0}canExpireCache(){return this.cacheSize_>this.maxCacheSize_}expire(){if(this.canExpireCache()){let t=0;for(const e in this.cache_){const i=this.cache_[e];3&t++||i.hasListener()||(delete this.cache_[e],delete this.patternCache_[e],--this.cacheSize_)}}}get(t,e){const i=Vi(t,e);return i in this.cache_?this.cache_[i]:null}getPattern(t,e){const i=Vi(t,e);return i in this.patternCache_?this.patternCache_[i]:null}set(t,e,i,n){const r=Vi(t,e),s=r in this.cache_;this.cache_[r]=i,n&&(i.getImageState()===Xi&&i.load(),i.getImageState()===Yi?i.ready().then(()=>{this.patternCache_[r]=h().createPattern(i.getImage(1),\\\"repeat\\\")}):this.patternCache_[r]=h().createPattern(i.getImage(1),\\\"repeat\\\")),s||++this.cacheSize_}setSize(t){this.maxCacheSize_=t,this.expire()}};let Ji=null;class Ki extends He{constructor(t,e,i,n,r){super(),this.hitDetectionImage_=null,this.image_=t,this.crossOrigin_=i?.crossOrigin,this.referrerPolicy_=i?.referrerPolicy,this.canvas_={},this.color_=r,this.imageState_=void 0===n?Xi:n,this.size_=t&&t.width&&t.height?[t.width,t.height]:null,this.src_=e,this.tainted_,this.ready_=null}initializeImage_(){this.image_=new Image,null!==this.crossOrigin_&&(this.image_.crossOrigin=this.crossOrigin_),void 0!==this.referrerPolicy_&&(this.image_.referrerPolicy=this.referrerPolicy_)}isTainted_(){if(void 0===this.tainted_&&this.imageState_===Bi){Ji||(Ji=a(1,1,0,{willReadFrequently:!0})),Ji.drawImage(this.image_,0,0);try{Ji.getImageData(0,0,1,1),this.tainted_=!1}catch{Ji=null,this.tainted_=!0}}return!0===this.tainted_}dispatchChangeEvent_(){this.dispatchEvent(je)}handleImageError_(){this.imageState_=Ui,this.dispatchChangeEvent_()}handleImageLoad_(){this.imageState_=Bi,this.size_=[this.image_.width,this.image_.height],this.dispatchChangeEvent_()}getImage(t){return this.image_||this.initializeImage_(),this.replaceColor_(t),this.canvas_[t]?this.canvas_[t]:this.image_}setImage(t){this.image_=t}getPixelRatio(t){return this.replaceColor_(t),this.canvas_[t]?t:1}getImageState(){return this.imageState_}getHitDetectionImage(){if(this.image_||this.initializeImage_(),!this.hitDetectionImage_)if(this.isTainted_()){const t=this.size_[0],e=this.size_[1],i=a(t,e);i.fillRect(0,0,t,e),this.hitDetectionImage_=i.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_}getSize(){return this.size_}getSrc(){return this.src_}load(){if(this.imageState_===Xi){this.image_||this.initializeImage_(),this.imageState_=Yi;try{void 0!==this.src_&&(this.image_.src=this.src_)}catch{this.handleImageError_()}this.image_ instanceof HTMLImageElement&&ji(this.image_,this.src_).then(t=>{this.image_=t,this.handleImageLoad_()}).catch(this.handleImageError_.bind(this))}}replaceColor_(t){if(!this.color_||this.canvas_[t]||this.imageState_!==Bi)return;const e=this.image_,i=a(Math.ceil(e.width*t),Math.ceil(e.height*t)),n=i.canvas;var r;i.scale(t,t),i.drawImage(e,0,0),i.globalCompositeOperation=\\\"multiply\\\",i.fillStyle=\\\"string\\\"==typeof(r=this.color_)?r:T(r),i.fillRect(0,0,n.width/t,n.height/t),i.globalCompositeOperation=\\\"destination-in\\\",i.drawImage(e,0,0),this.canvas_[t]=n}ready(){return this.ready_||(this.ready_=new Promise(t=>{if(this.imageState_===Bi||this.imageState_===Ui)t();else{const e=()=>{this.imageState_!==Bi&&this.imageState_!==Ui||(this.removeEventListener(je,e),t())};this.addEventListener(je,e)}})),this.ready_}}function Hi(t,e,i,n,r,s){let o=void 0===e?void 0:qi.get(e,r);return o||(o=new Ki(t,t&&\\\"src\\\"in t?t.src||void 0:e,i,n,r),qi.set(e,r,o,s)),s&&o&&!qi.getPattern(e,r)&&qi.set(e,r,o,s),o}function Zi(t){return t?Array.isArray(t)?T(t):\\\"object\\\"==typeof t&&\\\"src\\\"in t?function(t){if(!t.offset||!t.size)return qi.getPattern(t.src,t.color);const e=t.src+\\\":\\\"+t.offset,i=qi.getPattern(e,t.color);if(i)return i;const n=qi.get(t.src,null);if(n.getImageState()!==Bi)return null;const r=a(t.size[0],t.size[1]);return r.drawImage(n.getImage(1),t.offset[0],t.offset[1],t.size[0],t.size[1],0,0,t.size[0],t.size[1]),Hi(r.canvas,e,void 0,Bi,t.color,!0),qi.getPattern(e,t.color)}(t):t:null}let Qi=0,tn=1;function en(t,e,i,n,r,s,o,a){const l=o-r,h=a-s;let c=0,u=1;if(0===l){if(r<t||r>i)return!1}else{let e=(t-r)/l,n=(i-r)/l;if(e>n){const t=e;e=n,n=t}if(e>c&&(c=e),n<u&&(u=n),c>u)return!1}if(0===h){if(s<e||s>n)return!1}else{let t=(e-s)/h,i=(n-s)/h;if(t>i){const e=t;t=i,i=e}if(t>c&&(c=t),i<u&&(u=i),c>u)return!1}return Qi=c,tn=u,!0}function nn(t,e,i,n,r){const s=[];let o=i,a=0,l=e.slice(i,2);for(;a<t&&o+r<n;){const[i,n]=l.slice(-2),h=e[o+r],c=e[o+r+1],u=Math.sqrt((h-i)*(h-i)+(c-n)*(c-n));if(a+=u,a>=t){const e=(t-a+u)/u,f=p(i,h,e),d=p(n,c,e);l.push(f,d),s.push(l),l=[f,d],a==t&&(o+=r),a=0}else if(a<t)l.push(e[o+r],e[o+r+1]),o+=r;else{const t=u-a,e=p(i,h,t/u),f=p(n,c,t/u);l.push(e,f),s.push(l),l=[e,f],a=0,o+=r}}return a>0&&s.push(l),s}function rn(t,e,i,n,r){let s,o,a,l,h,c,u,f,d,g,p=i,_=i,m=0,y=0,w=i;for(o=i;o<n;o+=r){const i=e[o],n=e[o+1];void 0!==h&&(d=i-h,g=n-c,l=Math.sqrt(d*d+g*g),void 0!==u&&(y+=a,s=Math.acos((u*d+f*g)/(a*l)),s>t&&(y>m&&(m=y,p=w,_=o),y=0,w=o-r)),a=l,u=d,f=g),h=i,c=n}return y+=l,y>m?[w,o]:[p,_]}function sn(t,e,i,n,r){r=void 0!==r?r:[];let s=0;for(let o=e;o<i;o+=n)r[s++]=t.slice(o,o+n);return r.length=s,r}function on(t,e,i,n,r){r=void 0!==r?r:[];let s=0;for(let o=0,a=i.length;o<a;++o){const a=i[o];r[s++]=sn(t,e,a,n,r[s]),e=a}return r.length=s,r}function an(t,e,i,n,r){r=void 0!==r?r:[];let s=0;for(let o=0,a=i.length;o<a;++o){const a=i[o];r[s++]=1===a.length&&a[0]===e?[]:on(t,e,a,n,r[s]),e=a[a.length-1]}return r.length=s,r}class ln{drawCustom(t,e,i,n,r){}drawGeometry(t){}setStyle(t){}drawCircle(t,e,i){}drawFeature(t,e,i){}drawGeometryCollection(t,e,i){}drawLineString(t,e,i){}drawMultiLineString(t,e,i){}drawMultiPoint(t,e,i){}drawMultiPolygon(t,e,i){}drawPoint(t,e,i){}drawPolygon(t,e,i){}drawText(t,e,i){}setFillStrokeStyle(t,e){}setImageStyle(t,e){}setTextStyle(t,e){}}class hn extends ln{constructor(t,e,i,n){super(),this.tolerance=t,this.maxExtent=e,this.pixelRatio=n,this.maxLineWidth=0,this.resolution=i,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_=null,this.bufferedMaxExtent_=null,this.instructions=[],this.coordinates=[],this.tmpCoordinate_=[],this.hitDetectionInstructions=[],this.state={}}applyPixelRatio(t){const e=this.pixelRatio;return 1==e?t:t.map(function(t){return t*e})}appendFlatPointCoordinates(t,e){const i=this.getBufferedMaxExtent(),n=this.tmpCoordinate_,r=this.coordinates;let s=r.length;for(let o=0,a=t.length;o<a;o+=e)n[0]=t[o],n[1]=t[o+1],de(i,n)&&(r[s++]=n[0],r[s++]=n[1]);return s}appendFlatLineCoordinates(t,e,i,n,r,s){const o=this.coordinates;let a=o.length;const l=this.getBufferedMaxExtent();s&&(e+=n);let h=t[e],c=t[e+1];const u=this.tmpCoordinate_;let f,d,g,p=!0;for(f=e+n;f<i;f+=n)u[0]=t[f],u[1]=t[f+1],g=pe(l,u),g!==d?(p&&(o[a++]=h,o[a++]=c,p=!1),o[a++]=u[0],o[a++]=u[1]):g===ae?(o[a++]=u[0],o[a++]=u[1],p=!1):p=!0,h=u[0],c=u[1],d=g;return(r&&p||f===e+n)&&(o[a++]=h,o[a++]=c),a}drawCustomCoordinates_(t,e,i,n,r){for(let s=0,o=i.length;s<o;++s){const o=i[s],a=this.appendFlatLineCoordinates(t,e,o,n,!1,!1);r.push(a),e=o}return e}drawCustom(t,e,i,n,r){this.beginGeometry(t,e,r);const s=t.getType(),o=t.getStride(),a=this.coordinates.length;let l,h,c,u,f;switch(s){case\\\"MultiPolygon\\\":l=t.getOrientedFlatCoordinates(),u=[];const e=t.getEndss();f=0;for(let t=0,i=e.length;t<i;++t){const i=[];f=this.drawCustomCoordinates_(l,f,e[t],o,i),u.push(i)}this.instructions.push([Li,a,u,t,i,an,r]),this.hitDetectionInstructions.push([Li,a,u,t,n||i,an,r]);break;case\\\"Polygon\\\":case\\\"MultiLineString\\\":c=[],l=\\\"Polygon\\\"==s?t.getOrientedFlatCoordinates():t.getFlatCoordinates(),f=this.drawCustomCoordinates_(l,0,t.getEnds(),o,c),this.instructions.push([Li,a,c,t,i,on,r]),this.hitDetectionInstructions.push([Li,a,c,t,n||i,on,r]);break;case\\\"LineString\\\":case\\\"Circle\\\":l=t.getFlatCoordinates(),h=this.appendFlatLineCoordinates(l,0,l.length,o,!1,!1),this.instructions.push([Li,a,h,t,i,sn,r]),this.hitDetectionInstructions.push([Li,a,h,t,n||i,sn,r]);break;case\\\"MultiPoint\\\":l=t.getFlatCoordinates(),h=this.appendFlatPointCoordinates(l,o),h>a&&(this.instructions.push([Li,a,h,t,i,sn,r]),this.hitDetectionInstructions.push([Li,a,h,t,n||i,sn,r]));break;case\\\"Point\\\":l=t.getFlatCoordinates(),this.coordinates.push(l[0],l[1]),h=this.coordinates.length,this.instructions.push([Li,a,h,t,i,void 0,r]),this.hitDetectionInstructions.push([Li,a,h,t,n||i,void 0,r])}this.endGeometry(e)}beginGeometry(t,e,i){this.beginGeometryInstruction1_=[Ai,e,0,t,i],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[Ai,e,0,t,i],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)}finish(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}}reverseHitDetectionInstructions(){const t=this.hitDetectionInstructions;let i;t.reverse();const n=t.length;let r,s,o=-1;for(i=0;i<n;++i)r=t[i],s=r[0],s==Ti?o=i:s==Ai&&(r[2]=i,e(this.hitDetectionInstructions,o,i),o=-1)}fillStyleToState(t,e={}){if(t){const i=t.getColor();e.fillPatternScale=i&&\\\"object\\\"==typeof i&&\\\"src\\\"in i?this.pixelRatio:1,e.fillStyle=Zi(i||li)??void 0}else e.fillStyle=void 0;return e}strokeStyleToState(t,e={}){if(t){const i=t.getColor();e.strokeStyle=Zi(i||fi);const n=t.getLineCap();e.lineCap=void 0!==n?n:hi;const r=t.getLineDash();e.lineDash=r?r.slice():ci;const s=t.getLineDashOffset();e.lineDashOffset=s||0;const o=t.getLineJoin();e.lineJoin=void 0!==o?o:ui;const a=t.getWidth();e.lineWidth=void 0!==a?a:1;const l=t.getMiterLimit();e.miterLimit=void 0!==l?l:10;const h=t.getOffset();e.strokeOffset=h??0,e.lineWidth>this.maxLineWidth&&(this.maxLineWidth=e.lineWidth,this.bufferedMaxExtent_=null)}else e.strokeStyle=void 0,e.lineCap=void 0,e.lineDash=null,e.lineDashOffset=void 0,e.lineJoin=void 0,e.lineWidth=void 0,e.miterLimit=void 0,e.strokeOffset=void 0;return e}setFillStrokeStyle(t,e){const i=this.state;this.fillStyleToState(t,i),this.strokeStyleToState(e,i)}createFill(t){const e=t.fillStyle,i=[Wi,e];return\\\"string\\\"!=typeof e&&i.push(t.fillPatternScale),i}applyStroke(t){this.instructions.push(this.createStroke(t))}createStroke(t){return[Gi,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,t.lineDash?this.applyPixelRatio(t.lineDash):null,t.lineDashOffset*this.pixelRatio]}updateFillStyle(t,e){const i=t.fillStyle;(void 0!==i&&\\\"string\\\"!=typeof i||t.currentFillStyle!=i)&&(this.instructions.push(e.call(this,t)),t.currentFillStyle=i)}updateStrokeStyle(t,e){const i=t.strokeStyle,r=t.lineCap,s=t.lineDash,o=t.lineDashOffset,a=t.lineJoin,l=t.lineWidth,h=t.miterLimit,c=t.strokeOffset;(t.currentStrokeStyle!=i||t.currentLineCap!=r||s!=t.currentLineDash&&!n(t.currentLineDash,s)||t.currentLineDashOffset!=o||t.currentLineJoin!=a||t.currentLineWidth!=l||t.currentMiterLimit!=h||t.currentStrokeOffset!=c)&&(e.call(this,t),t.currentStrokeStyle=i,t.currentLineCap=r,t.currentLineDash=s,t.currentLineDashOffset=o,t.currentLineJoin=a,t.currentLineWidth=l,t.currentMiterLimit=h,t.currentStrokeOffset=c)}endGeometry(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;const e=[Ti,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)}getBufferedMaxExtent(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=this.maxExtent.slice(),this.maxLineWidth>0)){const t=this.resolution*(this.maxLineWidth+1)/2;!function(t,e,i){i?(i[0]=t[0]-e,i[1]=t[1]-e,i[2]=t[2]+e,i[3]=t[3]+e):(t[0],t[1],t[2],t[3])}(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_}}const cn={left:0,center:.5,right:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1};class un extends hn{constructor(t,e,i,n){super(t,e,i,n),this.labels_=null,this.text_=\\\"\\\",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=void 0,this.textKeepUpright_=void 0,this.textRotation_=0,this.textFillState_=null,this.fillStates={},this.fillStates[li]={fillStyle:li},this.textStrokeState_=null,this.strokeStates={},this.textState_={},this.textStates={},this.textKey_=\\\"\\\",this.fillKey_=\\\"\\\",this.strokeKey_=\\\"\\\",this.declutterMode_=void 0,this.declutterImageWithText_=void 0}finish(){const t=super.finish();return t.textStates=this.textStates,t.fillStates=this.fillStates,t.strokeStates=this.strokeStates,t}drawText(t,e,i){const n=this.textFillState_,r=this.textStrokeState_,s=this.textState_;if(\\\"\\\"===this.text_||!s||!n&&!r)return;const o=this.coordinates;let a=o.length;const l=t.getType();let h=null,c=t.getStride();if(\\\"line\\\"!==s.placement||\\\"LineString\\\"!=l&&\\\"MultiLineString\\\"!=l&&\\\"Polygon\\\"!=l&&\\\"MultiPolygon\\\"!=l){let n=s.overflow?null:[];switch(l){case\\\"Point\\\":case\\\"MultiPoint\\\":h=t.getFlatCoordinates();break;case\\\"LineString\\\":h=t.getFlatMidpoint();break;case\\\"Circle\\\":h=t.getCenter();break;case\\\"MultiLineString\\\":h=t.getFlatMidpoints(),c=2;break;case\\\"Polygon\\\":h=t.getFlatInteriorPoint(),s.overflow||n.push(h[2]/this.resolution),c=3;break;case\\\"MultiPolygon\\\":const e=t.getFlatInteriorPoints();h=[];for(let t=0,i=e.length;t<i;t+=3)s.overflow||n.push(e[t+2]/this.resolution),h.push(e[t],e[t+1]);if(0===h.length)return;c=2}const r=this.appendFlatPointCoordinates(h,c);if(r===a)return;if(n&&(r-a)/2!==h.length/c){let t=a/2;n=n.filter((e,i)=>{const n=o[2*(t+i)]===h[i*c]&&o[2*(t+i)+1]===h[i*c+1];return n||--t,n})}this.saveTextStates_();const u=s.backgroundFill?this.createFill(this.fillStyleToState(s.backgroundFill)):null,f=s.backgroundStroke?this.createStroke(this.strokeStyleToState(s.backgroundStroke)):null;this.beginGeometry(t,e,i);let d=s.padding;if(d!=pi&&(s.scale[0]<0||s.scale[1]<0)){let t=s.padding[0],e=s.padding[1],i=s.padding[2],n=s.padding[3];s.scale[0]<0&&(e=-e,n=-n),s.scale[1]<0&&(t=-t,i=-i),d=[t,e,i,n]}const g=this.pixelRatio;this.instructions.push([Fi,a,r,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[1,1],NaN,this.declutterMode_,this.declutterImageWithText_,d==pi?pi:d.map(function(t){return t*g}),u,f,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,n]);const p=1/g,_=u?u.slice(0):null;_&&(_[1]=li),this.hitDetectionInstructions.push([Fi,a,r,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[p,p],NaN,this.declutterMode_,this.declutterImageWithText_,d,_,f,this.text_,this.textKey_,this.strokeKey_,this.fillKey_?li:this.fillKey_,this.textOffsetX_,this.textOffsetY_,n]),this.endGeometry(e)}else{const n=t.getExtent();if(!be(this.maxExtent,n))return;let r;if(h=t.getFlatCoordinates(),\\\"LineString\\\"==l)r=[h.length];else if(\\\"MultiLineString\\\"==l)r=t.getEnds();else if(\\\"Polygon\\\"==l)r=t.getEnds().slice(0,1);else if(\\\"MultiPolygon\\\"==l){const e=t.getEndss();r=[];for(let t=0,i=e.length;t<i;++t)r.push(e[t][0])}if(!(\\\"LineString\\\"!=l&&\\\"MultiLineString\\\"!=l||(u=this.getBufferedMaxExtent(),f=n,u[0]<=f[0]&&f[2]<=u[2]&&u[1]<=f[1]&&f[3]<=u[3]))){const t=function(t,e,i,n){const r=n[0],s=n[1],o=n[2],a=n[3],l=[],h=[];let c,u,f=!1,d=0;for(let n=0,g=e.length;n<g;++n){const g=e[n];let p=t[d],_=t[d+1],m=!1;for(let e=d+i;e<g;e+=i){const i=t[e],n=t[e+1];if(en(r,s,o,a,p,_,i,n)){const t=i-p,e=n-_,r=p+Qi*t,s=_+Qi*e,o=p+tn*t,a=_+tn*e;f&&m&&r===c&&s===u?l.push(o,a):(f&&h.push(l.length),l.push(r,s,o,a),f=!0),c=o,u=a,m=!0}p=i,_=n}d=g}return f&&h.push(l.length),{flatCoordinates:l,ends:h}}(h,r,c,this.getBufferedMaxExtent());if(h=t.flatCoordinates,r=t.ends,c=2,0===r.length)return}this.beginGeometry(t,e,i);const d=s.repeat,g=d?void 0:s.textAlign;let p=0;for(let t=0,e=r.length;t<e;++t){let e;e=d?nn(d*this.resolution,h,p,r[t],c):[h.slice(p,r[t])];for(let i=0,n=e.length;i<n;++i){const n=e[i];let l=0,h=n.length;if(null==g){const t=rn(s.maxAngle,n,0,n.length,2);l=t[0],h=t[1]}for(let t=l;t<h;t+=c)o.push(n[t],n[t+1]);const u=o.length;p=r[t],this.drawChars_(a,u),a=u}}this.endGeometry(e)}var u,f}saveTextStates_(){const t=this.textStrokeState_,e=this.textState_,i=this.textFillState_,n=this.strokeKey_;t&&(n in this.strokeStates||(this.strokeStates[n]={strokeStyle:t.strokeStyle,lineCap:t.lineCap,lineDashOffset:t.lineDashOffset,lineWidth:t.lineWidth,lineJoin:t.lineJoin,miterLimit:t.miterLimit,lineDash:t.lineDash}));const r=this.textKey_;r in this.textStates||(this.textStates[r]={font:e.font,textAlign:e.textAlign||di,justify:e.justify,textBaseline:e.textBaseline||gi,scale:e.scale});const s=this.fillKey_;i&&(s in this.fillStates||(this.fillStates[s]={fillStyle:i.fillStyle}))}drawChars_(t,e){const i=this.textStrokeState_,n=this.textState_,r=this.strokeKey_,s=this.textKey_,o=this.fillKey_;this.saveTextStates_();const a=this.pixelRatio,l=cn[n.textBaseline],h=this.textOffsetX_*a,c=this.textOffsetY_*a,u=this.text_,f=i?i.lineWidth*Math.abs(n.scale[0])/2:0;this.instructions.push([Di,t,e,l,n.overflow,o,n.maxAngle,a,c,r,f*a,u,s,1,this.declutterMode_,this.textKeepUpright_,h]),this.hitDetectionInstructions.push([Di,t,e,l,n.overflow,o?li:o,n.maxAngle,a,c,r,f*a,u,s,1/a,this.declutterMode_,this.textKeepUpright_,h])}setTextStyle(t,e){let i,n,r;if(t){const e=t.getFill();e?(n=this.textFillState_,n||(n={},this.textFillState_=n),n.fillStyle=Zi(e.getColor()||li)):(n=null,this.textFillState_=n);const s=t.getStroke();if(s){r=this.textStrokeState_,r||(r={},this.textStrokeState_=r);const t=s.getLineDash(),e=s.getLineDashOffset(),i=s.getWidth(),n=s.getMiterLimit();r.lineCap=s.getLineCap()||hi,r.lineDash=t?t.slice():ci,r.lineDashOffset=void 0===e?0:e,r.lineJoin=s.getLineJoin()||ui,r.lineWidth=void 0===i?1:i,r.miterLimit=void 0===n?10:n,r.strokeStyle=Zi(s.getColor()||fi)}else r=null,this.textStrokeState_=r;i=this.textState_;const o=t.getFont()||\\\"10px sans-serif\\\";Si(o);const a=t.getScaleArray();i.overflow=t.getOverflow(),i.font=o,i.maxAngle=t.getMaxAngle(),i.placement=t.getPlacement(),i.textAlign=t.getTextAlign(),i.repeat=t.getRepeat(),i.justify=t.getJustify(),i.textBaseline=t.getTextBaseline()||gi,i.backgroundFill=t.getBackgroundFill(),i.backgroundStroke=t.getBackgroundStroke(),i.padding=t.getPadding()||pi,i.scale=void 0===a?[1,1]:a;const l=t.getOffsetX(),h=t.getOffsetY(),c=t.getRotateWithView(),u=t.getKeepUpright(),f=t.getRotation();this.text_=t.getText()||\\\"\\\",this.textOffsetX_=void 0===l?0:l,this.textOffsetY_=void 0===h?0:h,this.textRotateWithView_=void 0!==c&&c,this.textKeepUpright_=void 0===u||u,this.textRotation_=void 0===f?0:f,this.strokeKey_=r?(\\\"string\\\"==typeof r.strokeStyle?r.strokeStyle:ei(r.strokeStyle))+r.lineCap+r.lineDashOffset+\\\"|\\\"+r.lineWidth+r.lineJoin+r.miterLimit+\\\"[\\\"+r.lineDash.join()+\\\"]\\\":\\\"\\\",this.textKey_=i.font+i.scale+(i.textAlign||\\\"?\\\")+(i.repeat||\\\"?\\\")+(i.justify||\\\"?\\\")+(i.textBaseline||\\\"?\\\"),this.fillKey_=n&&n.fillStyle?\\\"string\\\"==typeof n.fillStyle?n.fillStyle:\\\"|\\\"+ei(n.fillStyle):\\\"\\\"}else this.text_=\\\"\\\";this.declutterMode_=t.getDeclutterMode(),this.declutterImageWithText_=e}}const fn=[1/0,1/0,-1/0,-1/0],dn=[],gn=[],pn=[],_n=[];function mn(t){return t[3].declutterBox}const yn=new RegExp(\\\"[\\\"+String.fromCharCode(1425)+\\\"-\\\"+String.fromCharCode(2303)+String.fromCharCode(64285)+\\\"-\\\"+String.fromCharCode(65023)+String.fromCharCode(65136)+\\\"-\\\"+String.fromCharCode(65276)+String.fromCharCode(67584)+\\\"-\\\"+String.fromCharCode(69631)+String.fromCharCode(124928)+\\\"-\\\"+String.fromCharCode(126975)+\\\"]\\\");function wn(t,e){return\\\"start\\\"===e?e=yn.test(t)?\\\"right\\\":\\\"left\\\":\\\"end\\\"===e&&(e=yn.test(t)?\\\"left\\\":\\\"right\\\"),cn[e]}function xn(t,e,i){return i>0&&t.push(\\\"\\\\n\\\",\\\"\\\"),t.push(e,\\\"\\\"),t}function vn(t,e,i){return i%2==0&&(t+=e),t}class Sn{constructor(t,e,i,n,r){this.overlaps=i,this.pixelRatio=e,this.resolution=t,this.alignAndScaleFill_,this.instructions=n.instructions,this.coordinates=n.coordinates,this.coordinateCache_={},this.renderedTransform_=Fe(),this.hitDetectionInstructions=n.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=n.fillStates||{},this.strokeStates=n.strokeStates||{},this.textStates=n.textStates||{},this.widths_={},this.labels_={},this.zIndexContext_=r?new ki:null}getZIndexContext(){return this.zIndexContext_}createLabel(t,e,i,n){const r=t+e+i+n;if(this.labels_[r])return this.labels_[r];const s=n?this.strokeStates[n]:null,o=i?this.fillStates[i]:null,a=this.textStates[e],l=this.pixelRatio,h=[a.scale[0]*l,a.scale[1]*l],c=a.justify?cn[a.justify]:wn(Array.isArray(t)?t[0]:t,a.textAlign||di),u=n&&s.lineWidth?s.lineWidth:0,f=Array.isArray(t)?t:String(t).split(\\\"\\\\n\\\").reduce(xn,[]),{width:d,height:g,widths:p,heights:_,lineWidths:m}=function(t,e){const i=[],n=[],r=[];let s=0,o=0,a=0,l=0;for(let h=0,c=e.length;h<=c;h+=2){const u=e[h];if(\\\"\\\\n\\\"===u||h===c){s=Math.max(s,o),r.push(o),o=0,a+=l,l=0;continue}const f=e[h+1]||t.font,d=Mi(f,u);i.push(d),o+=d;const g=Ci(f);n.push(g),l=Math.max(l,g)}return{width:s,height:a,widths:i,heights:n,lineWidths:r}}(a,f),y=d+u,w=[],x=(y+2)*h[0],v=(g+u)*h[1],S={width:x<0?Math.floor(x):Math.ceil(x),height:v<0?Math.floor(v):Math.ceil(v),contextInstructions:w};1==h[0]&&1==h[1]||w.push(\\\"scale\\\",h),n&&(w.push(\\\"strokeStyle\\\",s.strokeStyle),w.push(\\\"lineWidth\\\",u),w.push(\\\"lineCap\\\",s.lineCap),w.push(\\\"lineJoin\\\",s.lineJoin),w.push(\\\"miterLimit\\\",s.miterLimit),w.push(\\\"setLineDash\\\",[s.lineDash]),w.push(\\\"lineDashOffset\\\",s.lineDashOffset)),i&&w.push(\\\"fillStyle\\\",o.fillStyle),w.push(\\\"textBaseline\\\",\\\"middle\\\"),w.push(\\\"textAlign\\\",\\\"center\\\");const C=.5-c;let b=c*y+C*u;const M=[],I=[];let E,k=0,A=0,P=0,O=0;for(let t=0,e=f.length;t<e;t+=2){const e=f[t];if(\\\"\\\\n\\\"===e){A+=k,k=0,b=c*y+C*u,++O;continue}const r=f[t+1]||a.font;r!==E&&(n&&M.push(\\\"font\\\",r),i&&I.push(\\\"font\\\",r),E=r),k=Math.max(k,_[P]);const s=[e,b+C*p[P]+c*(p[P]-m[O]),.5*(u+k)+A];b+=p[P],n&&M.push(\\\"strokeText\\\",s),i&&I.push(\\\"fillText\\\",s),++P}return Array.prototype.push.apply(w,M),Array.prototype.push.apply(w,I),this.labels_[r]=S,S}replayTextBackground_(t,e,i,n,r,s,o){t.beginPath(),t.moveTo.apply(t,e),t.lineTo.apply(t,i),t.lineTo.apply(t,n),t.lineTo.apply(t,r),t.lineTo.apply(t,e),s&&(this.alignAndScaleFill_=s[2],t.fillStyle=s[1],this.fill_(t)),o&&(this.setStrokeStyle_(t,o),t.stroke())}calculateImageOrLabelDimensions_(t,e,i,n,r,s,o,a,l,h,c,u,f,d,g,p){let _=i-(o*=u[0]),m=n-(a*=u[1]);const y=r+l>t?t-l:r,w=s+h>e?e-h:s,x=d[3]+y*u[0]+d[1],v=d[0]+w*u[1]+d[2],S=_-d[3],C=m-d[0];let b;return(g||0!==c)&&(dn[0]=S,_n[0]=S,dn[1]=C,gn[1]=C,gn[0]=S+x,pn[0]=gn[0],pn[1]=C+v,_n[1]=pn[1]),0!==c?(b=$e(Fe(),i,n,1,1,c,-i,-n),ze(b,dn),ze(b,gn),ze(b,pn),ze(b,_n),_e(Math.min(dn[0],gn[0],pn[0],_n[0]),Math.min(dn[1],gn[1],pn[1],_n[1]),Math.max(dn[0],gn[0],pn[0],_n[0]),Math.max(dn[1],gn[1],pn[1],_n[1]),fn)):_e(Math.min(S,S+x),Math.min(C,C+v),Math.max(S,S+x),Math.max(C,C+v),fn),f&&(_=Math.round(_),m=Math.round(m)),{drawImageX:_,drawImageY:m,drawImageW:y,drawImageH:w,originX:l,originY:h,declutterBox:{minX:fn[0],minY:fn[1],maxX:fn[2],maxY:fn[3],value:p},canvasTransform:b,scale:u}}replayImageOrLabel_(t,e,i,n,r,s,o){const a=!(!s&&!o),l=n.declutterBox,h=o?o[2]*n.scale[0]/2:0;return l.minX-h<=e[0]&&l.maxX+h>=0&&l.minY-h<=e[1]&&l.maxY+h>=0&&(a&&this.replayTextBackground_(t,dn,gn,pn,_n,s,o),Ei(t,n.canvasTransform,r,i,n.originX,n.originY,n.drawImageW,n.drawImageH,n.drawImageX,n.drawImageY,n.scale)),!0}fill_(t){const e=this.alignAndScaleFill_;if(e){const i=ze(this.renderedTransform_,[0,0]),n=512*this.pixelRatio;t.save(),t.translate(i[0]%n,i[1]%n),1!==e&&t.scale(e,e)}t.fill(),e&&t.restore()}setStrokeStyle_(t,e){t.strokeStyle=e[1],e[1]&&(t.lineWidth=e[2],t.lineCap=e[3],t.lineJoin=e[4],t.miterLimit=e[5],t.lineDashOffset=e[7],t.setLineDash(e[6]))}drawLabelWithPointPlacement_(t,e,i,n){const r=this.textStates[e],s=this.createLabel(t,e,n,i),o=this.strokeStates[i],a=this.pixelRatio,l=wn(Array.isArray(t)?t[0]:t,r.textAlign||di),h=cn[r.textBaseline||gi],c=o&&o.lineWidth?o.lineWidth:0;return{label:s,anchorX:l*(s.width/a-2*r.scale[0])+2*(.5-l)*c,anchorY:h*s.height/a+2*(.5-h)*c}}execute_(t,e,i,r,s,o,a,l){const h=this.zIndexContext_;let c;var u,f;this.pixelCoordinates_&&n(i,this.renderedTransform_)?c=this.pixelCoordinates_:(this.pixelCoordinates_||(this.pixelCoordinates_=[]),c=Ae(this.coordinates,0,this.coordinates.length,2,i,this.pixelCoordinates_),u=this.renderedTransform_,f=i,u[0]=f[0],u[1]=f[1],u[2]=f[2],u[3]=f[3],u[4]=f[4],u[5]=f[5]);let d=0;const g=r.length;let p,_=0;const m=[];let y,w,x,v,S,C,b,M,I,E,k,A,P,O=0,R=0;const L=this.coordinateCache_,D=this.viewRotation_,F=Math.round(1e12*Math.atan2(-i[1],i[0]))/1e12,T={context:t,pixelRatio:this.pixelRatio,resolution:this.resolution,rotation:D},z=this.instructions!=r||this.overlaps?0:200;let $,W,G,N;for(;d<g;){const i=r[d];switch(i[0]){case Ai:$=i[1],N=i[3],$.getGeometry()?void 0===a||be(a,N.getExtent())?++d:d=i[2]+1:d=i[2],h&&(h.zIndex=i[4]);break;case Pi:O>z&&(this.fill_(t),O=0),R>z&&(t.stroke(),R=0),O||R||(t.beginPath(),S=NaN,C=NaN),++d;break;case Oi:_=i[1],x=i[2]??0;const n=c[_],r=c[_+1],u=c[_+2]-x-n,f=c[_+3]-x-r,g=Math.sqrt(u*u+f*f);t.moveTo(n+g,r),t.arc(n,r,g,0,2*Math.PI,!0),++d;break;case Ri:t.closePath(),++d;break;case Li:_=i[1],p=i[2];const X=i[3],Y=i[4],B=i[5];T.geometry=X,T.feature=$,d in L||(L[d]=[]);const U=L[d];B?B(c,_,p,2,U):(U[0]=c[_],U[1]=c[_+1],U.length=2),h&&(h.zIndex=i[6]),Y(U,T),++d;break;case Fi:_=i[1],p=i[2],I=i[3],y=i[4],w=i[5];let j=i[6];const V=i[7],q=i[8],J=i[9],K=i[10];let H=i[11];const Z=i[12];let Q=i[13];v=i[14]||\\\"declutter\\\";const tt=i[15];if(!I&&i.length>=20){E=i[19],k=i[20],A=i[21],P=i[22];const t=this.drawLabelWithPointPlacement_(E,k,A,P);I=t.label,i[3]=I;const e=i[23];y=(t.anchorX-e)*this.pixelRatio,i[4]=y;const n=i[24];w=(t.anchorY-n)*this.pixelRatio,i[5]=w,j=I.height,i[6]=j,Q=I.width,i[13]=Q}let et,it,nt,rt;i.length>25&&(et=i[25]),i.length>17?(it=i[16],nt=i[17],rt=i[18]):(it=pi,nt=null,rt=null),K&&F?H+=D:K||F||(H-=D);let st=0;for(;_<p;_+=2){if(et&&et[st++]<Q/this.pixelRatio)continue;const i=this.calculateImageOrLabelDimensions_(I.width,I.height,c[_],c[_+1],Q,j,y,w,q,J,H,Z,s,it,!!nt||!!rt,$),n=[t,e,I,i,V,nt,rt];if(l){let t,e,r,s,o;if(tt){const i=p-_;if(!tt[i]){tt[i]={args:n,declutterMode:v};continue}const s=tt[i];t=s.args,e=s.declutterMode,delete tt[i],r=mn(t)}if(!t||\\\"declutter\\\"===e&&l.collides(r)||(s=!0),\\\"declutter\\\"===v&&l.collides(i.declutterBox)||(o=!0),\\\"declutter\\\"===e&&\\\"declutter\\\"===v){const t=s&&o;s=t,o=t}s&&(\\\"none\\\"!==e&&l.insert(r),this.replayImageOrLabel_.apply(this,t)),o&&(\\\"none\\\"!==v&&l.insert(i.declutterBox),this.replayImageOrLabel_.apply(this,n))}else this.replayImageOrLabel_.apply(this,n)}++d;break;case Di:const ot=i[1],at=i[2],lt=i[3],ht=i[4];P=i[5];const ct=i[6],ut=i[7],ft=i[8];A=i[9];const dt=i[10];E=i[11],Array.isArray(E)&&(E=E.reduce(vn,\\\"\\\")),k=i[12];const gt=[i[13],i[13]];v=i[14]||\\\"declutter\\\";const pt=i[15],_t=i[16],mt=this.textStates[k],yt=mt.font,wt=[mt.scale[0]*ut,mt.scale[1]*ut];let xt;yt in this.widths_?xt=this.widths_[yt]:(xt={},this.widths_[yt]=xt);const vt=Me(c,ot,at,2),St=Math.abs(wt[0])*Ii(yt,E,xt);if(ht||St<=vt){const i=Re(c,ot,at,2,E,(vt-St)*wn(E,this.textStates[k].textAlign),ct,Math.abs(wt[0]),Ii,yt,xt,F?0:this.viewRotation_,pt);t:if(i){const n=[];let r,s,o,a,h;if(A)for(r=0,s=i.length;r<s;++r){h=i[r],o=h[4],a=this.createLabel(o,k,\\\"\\\",A),y=h[2]+(wt[0]<0?-dt:dt)-_t,w=lt*a.height+2*(.5-lt)*dt*wt[1]/wt[0]-ft;const s=this.calculateImageOrLabelDimensions_(a.width,a.height,h[0],h[1],a.width,a.height,y,w,0,0,h[3],gt,!1,pi,!1,$);if(l&&\\\"declutter\\\"===v&&l.collides(s.declutterBox))break t;n.push([t,e,a,s,1,null,null])}if(P)for(r=0,s=i.length;r<s;++r){h=i[r],o=h[4],a=this.createLabel(o,k,P,\\\"\\\"),y=h[2]-_t,w=lt*a.height-ft;const s=this.calculateImageOrLabelDimensions_(a.width,a.height,h[0],h[1],a.width,a.height,y,w,0,0,h[3],gt,!1,pi,!1,$);if(l&&\\\"declutter\\\"===v&&l.collides(s.declutterBox))break t;n.push([t,e,a,s,1,null,null])}l&&\\\"none\\\"!==v&&l.load(n.map(mn));for(let t=0,e=n.length;t<e;++t)this.replayImageOrLabel_.apply(this,n[t])}}++d;break;case Ti:if(void 0!==o){$=i[1];const t=o($,N,v);if(t)return t}++d;break;case zi:z?O++:this.fill_(t),++d;break;case $i:let Ct,bt,Mt;if(_=i[1],p=i[2],x=i[3],x){const t=(i[4]??!1)||Math.abs(c[_]-c[p-2])<1e-6&&Math.abs(c[_+1]-c[p-1])<1e-6;Ie(c,_,p,2,x,t,m),ke(m,2,t),Ct=m,bt=0,Mt=Ct.length}else Ct=c,bt=_,Mt=p;W=Ct[bt],G=Ct[bt+1],t.moveTo(W,G),S=W+.5|0,C=G+.5|0;for(let e=bt+2;e<Mt;e+=2)W=Ct[e],G=Ct[e+1],b=W+.5|0,M=G+.5|0,e!=Mt-2&&b===S&&M===C||(t.lineTo(W,G),S=b,C=M);++d;break;case Wi:this.alignAndScaleFill_=i[2],O?(this.fill_(t),O=0,R&&(t.stroke(),R=0)):R&&i[1]&&(t.stroke(),R=0),t.fillStyle=i[1],++d;break;case Gi:O&&i[1]&&(this.fill_(t),O=0),R&&(t.stroke(),R=0),this.setStrokeStyle_(t,i),++d;break;case Ni:z?R++:t.stroke(),++d;break;default:++d}}O&&this.fill_(t),R&&t.stroke()}execute(t,e,i,n,r,s){this.viewRotation_=n,this.execute_(t,e,i,this.instructions,r,void 0,void 0,s)}executeHitDetection(t,e,i,n,r){return this.viewRotation_=i,this.execute_(t,[t.canvas.width,t.canvas.height],e,this.hitDetectionInstructions,!0,n,r)}}function Cn(t,e,i){return bn(et(t,e,i))}function bn(t,e){if(t instanceof Z){if(t.type===X&&\\\"string\\\"==typeof t.value){const e=D(t.value);return function(){return e}}return function(){return t.value}}const i=t.operator;switch(i){case Gt:case Nt:case zt:return function(t){const e=t.operator,i=t.args.length,n=new Array(i);for(let e=0;e<i;++e)n[e]=bn(t.args[e]);switch(e){case zt:return t=>{for(let e=0;e<i;++e){const i=n[e](t);if(null!=i)return i}throw new Error(\\\"Expected one of the values to be non-null\\\")};case Gt:case Nt:return t=>{for(let r=0;r<i;++r){const i=n[r](t);if(typeof i===e)return i}throw new Error(`Expected one of the values to be a ${e}`)};default:throw new Error(`Unsupported assertion operator ${e}`)}}(t);case it:case nt:case qt:return function(t){const e=t.args[0],i=e.value;switch(t.operator){case it:return e=>{const n=t.args;let r=e.properties[i];for(let t=1,e=n.length;t<e;++t){r=r[n[t].value]}return r};case nt:return t=>t.variables[i];case qt:return e=>{const n=t.args;if(!(i in e.properties))return!1;let r=e.properties[i];for(let t=1,e=n.length;t<e;++t){const e=n[t].value;if(!r||!Object.hasOwn(r,e))return!1;r=r[e]}return!0};default:throw new Error(`Unsupported accessor operator ${t.operator}`)}}(t);case Bt:return t=>t.featureId;case st:return t=>t.geometryType;case rt:{const e=t.args.map(t=>bn(t));return t=>\\\"\\\".concat(...e.map(e=>e(t).toString()))}case ct:return t=>t.resolution;case at:case lt:case Ft:case Wt:case ht:return function(t){const e=t.operator,i=t.args.length,n=new Array(i);for(let e=0;e<i;++e)n[e]=bn(t.args[e]);switch(e){case at:return t=>{for(let e=0;e<i;++e)if(n[e](t))return!0;return!1};case lt:return t=>{for(let e=0;e<i;++e)if(!n[e](t))return!1;return!0};case Ft:return t=>{const e=n[0](t),i=n[1](t),r=n[2](t);return e>=i&&e<=r};case Wt:return t=>{const e=n[0](t);for(let r=1;r<i;++r)if(e===n[r](t))return!0;return!1};case ht:return t=>!n[0](t);default:throw new Error(`Unsupported logical operator ${e}`)}}(t);case dt:case gt:case mt:case yt:case pt:case _t:return function(t){const e=t.operator,i=bn(t.args[0]),n=bn(t.args[1]);switch(e){case dt:return t=>i(t)===n(t);case gt:return t=>i(t)!==n(t);case mt:return t=>i(t)<n(t);case yt:return t=>i(t)<=n(t);case pt:return t=>i(t)>n(t);case _t:return t=>i(t)>=n(t);default:throw new Error(`Unsupported comparison operator ${e}`)}}(t);case wt:case xt:case vt:case St:case Ct:case bt:case Mt:case It:case Et:case kt:case At:case Pt:case Ot:case Rt:case Lt:return function(t){const e=t.operator,i=t.args.length,n=new Array(i);for(let e=0;e<i;++e)n[e]=bn(t.args[e]);switch(e){case wt:return t=>{let e=1;for(let r=0;r<i;++r)e*=n[r](t);return e};case xt:return t=>n[0](t)/n[1](t);case vt:return t=>{let e=0;for(let r=0;r<i;++r)e+=n[r](t);return e};case St:return t=>n[0](t)-n[1](t);case Ct:return t=>{const e=n[0](t),i=n[1](t);if(e<i)return i;const r=n[2](t);return e>r?r:e};case bt:return t=>n[0](t)%n[1](t);case Mt:return t=>Math.pow(n[0](t),n[1](t));case It:return t=>Math.abs(n[0](t));case Et:return t=>Math.floor(n[0](t));case kt:return t=>Math.ceil(n[0](t));case At:return t=>Math.round(n[0](t));case Pt:return t=>Math.sin(n[0](t));case Ot:return t=>Math.cos(n[0](t));case Rt:return 2===i?t=>Math.atan2(n[0](t),n[1](t)):t=>Math.atan(n[0](t));case Lt:return t=>Math.sqrt(n[0](t));default:throw new Error(`Unsupported numeric operator ${e}`)}}(t);case $t:return function(t){const e=t.args.length,i=new Array(e);for(let n=0;n<e;++n)i[n]=bn(t.args[n]);return t=>{for(let n=0;n<e-1;n+=2){if(i[n](t))return i[n+1](t)}return i[e-1](t)}}(t);case Dt:return function(t){const e=t.args.length,i=new Array(e);for(let n=0;n<e;++n)i[n]=bn(t.args[n]);return t=>{const n=i[0](t);for(let r=1;r<e-1;r+=2)if(n===i[r](t))return i[r+1](t);return i[e-1](t)}}(t);case Tt:return function(t){const e=t.args.length,i=new Array(e);for(let n=0;n<e;++n)i[n]=bn(t.args[n]);return t=>{const n=i[0](t),r=i[1](t);let s,o;for(let a=2;a<e;a+=2){const e=i[a](t);let l=i[a+1](t);const h=Array.isArray(l);if(h&&(l=k(l)),e>=r)return 2===a?l:h?In(n,r,s,o,e,l):Mn(n,r,s,o,e,l);s=e,o=l}return o}}(t);case Vt:return function(t){const e=t.operator,i=t.args.length,n=new Array(i);for(let e=0;e<i;++e)n[e]=bn(t.args[e]);if(e===Vt)return e=>{const i=n[0](e);return t.args[0].type===X?T(i):i.toString()};throw new Error(`Unsupported convert operator ${e}`)}(t);default:throw new Error(`Unsupported operator ${i}`)}}function Mn(t,e,i,n,r,s){const o=r-i;if(0===o)return n;const a=e-i;return n+(1===t?a/o:(Math.pow(t,a)-1)/(Math.pow(t,o)-1))*(s-n)}function In(t,e,i,n,r,s){if(0===r-i)return n;const o=L(n),a=L(s);let l=a[2]-o[2];l>180?l-=360:l<-180&&(l+=360);return function(t){const e=(t[0]+16)/116,i=t[1],n=t[2]*Math.PI/180,r=P(e),s=P(e+i/500*Math.cos(n)),o=P(e-i/200*Math.sin(n)),a=A(3.021973625*s-1.617392459*r-.404875592*o),l=A(-.943766287*s+1.916279586*r+.027607165*o),h=A(.069407491*s-.22898585*r+1.159737864*o);return[c(a+.5|0,0,255),c(l+.5|0,0,255),c(h+.5|0,0,255),t[3]]}([Mn(t,e,i,o[0],r,a[0]),Mn(t,e,i,o[1],r,a[1]),o[2]+Mn(t,e,i,0,r,l),Mn(t,e,i,n[3],r,s[3])])}class En{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=z(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new En({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return Qe()}getImage(t){return Qe()}getHitDetectionImage(){return Qe()}getPixelRatio(t){return 1}getImageState(){return Qe()}getImageSize(){return Qe()}getOrigin(){return Qe()}getSize(){return Qe()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=z(t)}listenImageChange(t){Qe()}load(){Qe()}unlistenImageChange(t){Qe()}ready(){return Promise.resolve()}}class kn extends En{constructor(t){super({opacity:1,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,rotation:void 0!==t.rotation?t.rotation:0,scale:void 0!==t.scale?t.scale:1,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode}),this.hitDetectionCanvas_=null,this.fill_=void 0!==t.fill?t.fill:null,this.origin_=[0,0],this.points_=t.points,this.radius=t.radius,this.radius2_=t.radius2,this.angle_=void 0!==t.angle?t.angle:0,this.stroke_=void 0!==t.stroke?t.stroke:null,this.size_,this.renderOptions_,this.imageState_=this.fill_&&this.fill_.loading()?Yi:Bi,this.imageState_===Yi&&this.ready().then(()=>this.imageState_=Bi),this.render()}clone(){const t=this.getScale(),e=new kn({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_,e=this.getDisplacement(),i=this.getScaleArray();return[t[0]/2-e[0]/i[0],t[1]/2+e[1]/i[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||(this.hitDetectionCanvas_=this.createHitDetectionCanvas_(this.renderOptions_)),this.hitDetectionCanvas_}getImage(t){const e=this.fill_?.getKey(),i=`${t},${this.angle_},${this.radius},${this.radius2_},${this.points_},${e}`+Object.values(this.renderOptions_).join(\\\",\\\");let n=qi.get(i,null)?.getImage(1);if(!n){const e=this.renderOptions_,r=Math.ceil(e.size*t),s=a(r,r);this.draw_(e,s,t),n=s.canvas;const o=new Ki(n,void 0,null,Bi,null);qi.set(i,null,o),createImageBitmap(n).then(t=>{o.setImage(t)})}return n}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return this.imageState_}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius}setRadius(t){this.radius!==t&&(this.radius=t,this.render())}getRadius2(){return this.radius2_}setRadius2(t){this.radius2_!==t&&(this.radius2_=t,this.render())}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,i){if(0===e||this.points_===1/0||\\\"bevel\\\"!==t&&\\\"miter\\\"!==t)return e;let n=this.radius,r=void 0===this.radius2_?n:this.radius2_;if(n<r){const t=n;n=r,r=t}const s=void 0===this.radius2_?this.points_:2*this.points_,o=2*Math.PI/s,a=r*Math.sin(o),l=n-Math.sqrt(r*r-a*a),h=Math.sqrt(a*a+l*l),c=h/a;if(\\\"miter\\\"===t&&c<=i)return c*e;const u=e/2/c,f=e/2*(l/h),d=Math.sqrt((n+u)*(n+u)+f*f)-n;if(void 0===this.radius2_||\\\"bevel\\\"===t)return 2*d;const g=n*Math.sin(o),p=r-Math.sqrt(n*n-g*g),_=Math.sqrt(g*g+p*p)/g;if(_<=i){const t=_*e/2-r-n;return 2*Math.max(d,t)}return 2*d}createRenderOptions(){let t,e=hi,i=ui,n=0,r=null,s=0,o=0;this.stroke_&&(t=Zi(this.stroke_.getColor()??fi),o=this.stroke_.getWidth()??1,r=this.stroke_.getLineDash(),s=this.stroke_.getLineDashOffset()??0,i=this.stroke_.getLineJoin()??ui,e=this.stroke_.getLineCap()??hi,n=this.stroke_.getMiterLimit()??10);const a=this.calculateLineJoinSize_(i,o,n),l=Math.max(this.radius,this.radius2_||0);return{strokeStyle:t,strokeWidth:o,size:Math.ceil(2*l+a),lineCap:e,lineDash:r,lineDashOffset:s,lineJoin:i,miterLimit:n}}render(){this.renderOptions_=this.createRenderOptions();const t=this.renderOptions_.size;this.hitDetectionCanvas_=null,this.size_=[t,t]}draw_(t,e,i){if(e.scale(i,i),e.translate(t.size/2,t.size/2),this.createPath_(e),this.fill_){let t=this.fill_.getColor();null===t&&(t=li),e.fillStyle=Zi(t),e.fill()}t.strokeStyle&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineCap=t.lineCap,e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}createHitDetectionCanvas_(t){let e;if(this.fill_){let i=this.fill_.getColor(),n=0;\\\"string\\\"==typeof i&&(i=F(i)),null===i?n=1:Array.isArray(i)&&(n=4===i.length?i[3]:1),0===n&&(e=a(t.size,t.size),this.drawHitDetectionCanvas_(t,e))}return e?e.canvas:this.getImage(1)}createPath_(t){let e=this.points_;const i=this.radius;if(e===1/0)t.arc(0,0,i,0,2*Math.PI);else{const n=void 0===this.radius2_?i:this.radius2_;void 0!==this.radius2_&&(e*=2);const r=this.angle_-Math.PI/2,s=2*Math.PI/e;for(let o=0;o<e;o++){const e=r+o*s,a=o%2==0?i:n;t.lineTo(a*Math.cos(e),a*Math.sin(e))}t.closePath()}}drawHitDetectionCanvas_(t,e){e.translate(t.size/2,t.size/2),this.createPath_(e),e.fillStyle=li,e.fill(),t.strokeStyle&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}ready(){return this.fill_?this.fill_.ready():Promise.resolve()}}class An extends kn{constructor(t){super({points:1/0,fill:(t=t||{radius:5}).fill,radius:t.radius,stroke:t.stroke,scale:void 0!==t.scale?t.scale:1,rotation:void 0!==t.rotation?t.rotation:0,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode})}clone(){const t=this.getScale(),e=new An({fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,radius:this.getRadius(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}}class Pn{constructor(t){t=t||{},this.patternImage_=null,this.color_=null,void 0!==t.color&&this.setColor(t.color)}clone(){const t=this.getColor();return new Pn({color:Array.isArray(t)?t.slice():t||void 0})}getColor(){return this.color_}setColor(t){if(null!==t&&\\\"object\\\"==typeof t&&\\\"src\\\"in t){const e=Hi(null,t.src,{crossOrigin:\\\"anonymous\\\"},void 0,t.offset?null:t.color?t.color:null,!(t.offset&&t.size));e.ready().then(()=>{this.patternImage_=null}),e.getImageState()===Xi&&e.load(),e.getImageState()===Yi&&(this.patternImage_=e)}this.color_=t}getKey(){const t=this.getColor();return t?t instanceof CanvasPattern||t instanceof CanvasGradient?ei(t):\\\"object\\\"==typeof t&&\\\"src\\\"in t?t.src+\\\":\\\"+t.offset:F(t).toString():\\\"\\\"}loading(){return!!this.patternImage_}ready(){return this.patternImage_?this.patternImage_.ready():Promise.resolve()}}function On(t,e,i,n){return void 0!==i&&void 0!==n?[i/t,n/e]:void 0!==i?i/t:void 0!==n?n/e:1}class Rn extends En{constructor(t){const e=void 0!==(t=t||{}).opacity?t.opacity:1,i=void 0!==t.rotation?t.rotation:0,n=void 0!==t.scale?t.scale:1,r=void 0!==t.rotateWithView&&t.rotateWithView;super({opacity:e,rotation:i,scale:n,displacement:void 0!==t.displacement?t.displacement:[0,0],rotateWithView:r,declutterMode:t.declutterMode}),this.anchor_=void 0!==t.anchor?t.anchor:[.5,.5],this.normalizedAnchor_=null,this.anchorOrigin_=void 0!==t.anchorOrigin?t.anchorOrigin:\\\"top-left\\\",this.anchorXUnits_=void 0!==t.anchorXUnits?t.anchorXUnits:\\\"fraction\\\",this.anchorYUnits_=void 0!==t.anchorYUnits?t.anchorYUnits:\\\"fraction\\\",this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null,this.referrerPolicy_=t.referrerPolicy;const s=void 0!==t.img?t.img:null;let o,a=t.src;if(Le(!(void 0!==a&&s),\\\"`image` and `src` cannot be provided at the same time\\\"),void 0!==a&&0!==a.length||!s||(a=s.src||ei(s)),Le(void 0!==a&&a.length>0,\\\"A defined and non-empty `src` or `image` must be provided\\\"),Le(!((void 0!==t.width||void 0!==t.height)&&void 0!==t.scale),\\\"`width` or `height` cannot be provided together with `scale`\\\"),void 0!==t.src?o=Xi:void 0!==s&&(o=\\\"complete\\\"in s?s.complete?s.src?Bi:Xi:Yi:Bi),this.color_=void 0!==t.color?F(t.color):null,this.iconImage_=Hi(s,a,{crossOrigin:this.crossOrigin_,referrerPolicy:this.referrerPolicy_},o,this.color_),this.offset_=void 0!==t.offset?t.offset:[0,0],this.offsetOrigin_=void 0!==t.offsetOrigin?t.offsetOrigin:\\\"top-left\\\",this.origin_=null,this.size_=void 0!==t.size?t.size:null,this.initialOptions_,void 0!==t.width||void 0!==t.height){let e,i;if(t.size)[e,i]=t.size;else{const n=this.getImage(1);if(n.width&&n.height)e=n.width,i=n.height;else if(n instanceof HTMLImageElement){this.initialOptions_=t;const e=()=>{if(this.unlistenImageChange(e),!this.initialOptions_)return;const i=this.iconImage_.getSize();this.setScale(On(i[0],i[1],t.width,t.height))};return void this.listenImageChange(e)}}void 0!==e&&this.setScale(On(e,i,t.width,t.height))}}clone(){let t,e,i;return this.initialOptions_?(e=this.initialOptions_.width,i=this.initialOptions_.height):(t=this.getScale(),t=Array.isArray(t)?t.slice():t),new Rn({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,referrerPolicy:this.referrerPolicy_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:t,width:e,height:i,size:null!==this.size_?this.size_.slice():void 0,src:this.getSrc(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getAnchor(){let t=this.normalizedAnchor_;if(!t){t=this.anchor_;const e=this.getSize();if(\\\"fraction\\\"==this.anchorXUnits_||\\\"fraction\\\"==this.anchorYUnits_){if(!e)return null;t=this.anchor_.slice(),\\\"fraction\\\"==this.anchorXUnits_&&(t[0]*=e[0]),\\\"fraction\\\"==this.anchorYUnits_&&(t[1]*=e[1])}if(\\\"top-left\\\"!=this.anchorOrigin_){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),\\\"top-right\\\"!=this.anchorOrigin_&&\\\"bottom-right\\\"!=this.anchorOrigin_||(t[0]=-t[0]+e[0]),\\\"bottom-left\\\"!=this.anchorOrigin_&&\\\"bottom-right\\\"!=this.anchorOrigin_||(t[1]=-t[1]+e[1])}this.normalizedAnchor_=t}const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]-e[0]/i[0],t[1]+e[1]/i[1]]}setAnchor(t){this.anchor_=t,this.normalizedAnchor_=null}getColor(){return this.color_}setColor(t){const e=t?F(t):null;if(this.color_===e||this.color_&&e&&this.color_.length===e.length&&this.color_.every((t,i)=>t===e[i]))return;this.color_=e;const i=this.getSrc(),n=void 0!==i?null:this.getHitDetectionImage(),r=void 0!==i?Xi:this.iconImage_.getImageState();this.iconImage_=Hi(n,i,{crossOrigin:this.crossOrigin_,referrerPolicy:this.referrerPolicy_},r,this.color_)}getImage(t){return this.iconImage_.getImage(t)}getPixelRatio(t){return this.iconImage_.getPixelRatio(t)}getImageSize(){return this.iconImage_.getSize()}getImageState(){return this.iconImage_.getImageState()}getHitDetectionImage(){return this.iconImage_.getHitDetectionImage()}getOrigin(){if(this.origin_)return this.origin_;let t=this.offset_;if(\\\"top-left\\\"!=this.offsetOrigin_){const e=this.getSize(),i=this.iconImage_.getSize();if(!e||!i)return null;t=t.slice(),\\\"top-right\\\"!=this.offsetOrigin_&&\\\"bottom-right\\\"!=this.offsetOrigin_||(t[0]=i[0]-e[0]-t[0]),\\\"bottom-left\\\"!=this.offsetOrigin_&&\\\"bottom-right\\\"!=this.offsetOrigin_||(t[1]=i[1]-e[1]-t[1])}return this.origin_=t,this.origin_}getSrc(){return this.iconImage_.getSrc()}setSrc(t){this.iconImage_=Hi(null,t,{crossOrigin:this.crossOrigin_,referrerPolicy:this.referrerPolicy_},Xi,this.color_)}getSize(){return this.size_?this.size_:this.iconImage_.getSize()}getWidth(){const t=this.getScaleArray();return this.size_?this.size_[0]*t[0]:this.iconImage_.getImageState()==Bi?this.iconImage_.getSize()[0]*t[0]:void 0}getHeight(){const t=this.getScaleArray();return this.size_?this.size_[1]*t[1]:this.iconImage_.getImageState()==Bi?this.iconImage_.getSize()[1]*t[1]:void 0}setScale(t){delete this.initialOptions_,super.setScale(t)}listenImageChange(t){this.iconImage_.addEventListener(je,t)}load(){this.iconImage_.load()}unlistenImageChange(t){this.iconImage_.removeEventListener(je,t)}ready(){return this.iconImage_.ready()}}class Ln{constructor(t){t=t||{},this.color_=void 0!==t.color?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=void 0!==t.lineDash?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.offset_=t.offset,this.width_=t.width}clone(){const t=this.getColor();return new Ln({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),offset:this.getOffset(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getOffset(){return this.offset_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setOffset(t){this.offset_=t}setWidth(t){this.width_=t}}class Dn{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=Fn,void 0!==t.geometry&&this.setGeometry(t.geometry),this.fill_=void 0!==t.fill?t.fill:null,this.image_=void 0!==t.image?t.image:null,this.renderer_=void 0!==t.renderer?t.renderer:null,this.hitDetectionRenderer_=void 0!==t.hitDetectionRenderer?t.hitDetectionRenderer:null,this.stroke_=void 0!==t.stroke?t.stroke:null,this.text_=void 0!==t.text?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&\\\"object\\\"==typeof t&&(t=t.clone()),new Dn({geometry:t??void 0,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer()??void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){\\\"function\\\"==typeof t?this.geometryFunction_=t:\\\"string\\\"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=Fn,this.geometry_=t}setZIndex(t){this.zIndex_=t}}function Fn(t){return t.getGeometry()}class Tn{constructor(t){t=t||{},this.font_=t.font,this.rotation_=t.rotation,this.rotateWithView_=t.rotateWithView,this.keepUpright_=t.keepUpright,this.scale_=t.scale,this.scaleArray_=z(void 0!==t.scale?t.scale:1),this.text_=t.text,this.textAlign_=t.textAlign,this.justify_=t.justify,this.repeat_=t.repeat,this.textBaseline_=t.textBaseline,this.fill_=void 0!==t.fill?t.fill:new Pn({color:\\\"#333\\\"}),this.maxAngle_=void 0!==t.maxAngle?t.maxAngle:Math.PI/4,this.placement_=void 0!==t.placement?t.placement:\\\"point\\\",this.overflow_=!!t.overflow,this.stroke_=void 0!==t.stroke?t.stroke:null,this.offsetX_=void 0!==t.offsetX?t.offsetX:0,this.offsetY_=void 0!==t.offsetY?t.offsetY:0,this.backgroundFill_=t.backgroundFill?t.backgroundFill:null,this.backgroundStroke_=t.backgroundStroke?t.backgroundStroke:null,this.padding_=void 0===t.padding?null:t.padding,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new Tn({font:this.getFont(),placement:this.getPlacement(),repeat:this.getRepeat(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),keepUpright:this.getKeepUpright(),scale:Array.isArray(t)?t.slice():t,text:this.getText(),textAlign:this.getTextAlign(),justify:this.getJustify(),textBaseline:this.getTextBaseline(),fill:this.getFill()instanceof Pn?this.getFill().clone():this.getFill(),stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0,declutterMode:this.getDeclutterMode()})}getOverflow(){return this.overflow_}getFont(){return this.font_}getMaxAngle(){return this.maxAngle_}getPlacement(){return this.placement_}getRepeat(){return this.repeat_}getOffsetX(){return this.offsetX_}getOffsetY(){return this.offsetY_}getFill(){return this.fill_}getRotateWithView(){return this.rotateWithView_}getKeepUpright(){return this.keepUpright_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getStroke(){return this.stroke_}getText(){return this.text_}getTextAlign(){return this.textAlign_}getJustify(){return this.justify_}getTextBaseline(){return this.textBaseline_}getBackgroundFill(){return this.backgroundFill_}getBackgroundStroke(){return this.backgroundStroke_}getPadding(){return this.padding_}getDeclutterMode(){return this.declutterMode_}setOverflow(t){this.overflow_=t}setFont(t){this.font_=t}setMaxAngle(t){this.maxAngle_=t}setOffsetX(t){this.offsetX_=t}setOffsetY(t){this.offsetY_=t}setPlacement(t){this.placement_=t}setRepeat(t){this.repeat_=t}setRotateWithView(t){this.rotateWithView_=t}setKeepUpright(t){this.keepUpright_=t}setFill(t){this.fill_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=z(void 0!==t?t:1)}setStroke(t){this.stroke_=t}setText(t){this.text_=t}setTextAlign(t){this.textAlign_=t}setJustify(t){this.justify_=t}setTextBaseline(t){this.textBaseline_=t}setBackgroundFill(t){this.backgroundFill_=t}setBackgroundStroke(t){this.backgroundStroke_=t}setPadding(t){this.padding_=t}}function zn(t){return!0}function $n(t,e){const i=function(t,e){const i=t.length,n=new Array(i);for(let r=0;r<i;++r){const i=t[r],s=\\\"filter\\\"in i?Cn(i.filter,W,e):zn;let o;if(Array.isArray(i.style)){const t=i.style.length;o=new Array(t);for(let n=0;n<t;++n)o[n]=Gn(i.style[n],e)}else o=[Gn(i.style,e)];n[r]={filter:s,styles:o}}return function(e){const r=[];let s=!1;for(let o=0;o<i;++o){if((0,n[o].filter)(e)&&(!t[o].else||!s)){s=!0;for(const t of n[o].styles){const i=t(e);i&&r.push(i)}}}return r}}(t,e=e??tt()),n={variables:{},properties:{},resolution:NaN,featureId:null,geometryType:\\\"\\\"};return function(t,r){if(n.properties=t.getPropertiesInternal(),n.resolution=r,e.featureId){const e=t.getId();n.featureId=void 0!==e?e:null}return e.geometryType&&(n.geometryType=se(t.getGeometry())),i(n)}}function Wn(t,e){e=e??tt();const i=t.length,n=new Array(i);for(let r=0;r<i;++r)n[r]=Gn(t[r],e);const r={variables:{},properties:{},resolution:NaN,featureId:null,geometryType:\\\"\\\"},s=new Array(i);return function(t,o){if(r.properties=t.getPropertiesInternal(),r.resolution=o,e.featureId){const e=t.getId();r.featureId=void 0!==e?e:null}e.geometryType&&(r.geometryType=se(t.getGeometry()));let a=0;for(let t=0;t<i;++t){const e=n[t](r);e&&(s[a]=e,a+=1)}return s.length=a,s}}function Gn(t,e){const i=Nn(t,\\\"\\\",e),n=Xn(t,\\\"\\\",e),r=function(t,e){const i=\\\"text-\\\",n=Un(t,i+\\\"value\\\",e);if(!n)return null;const r=Nn(t,i,e),s=Nn(t,i+\\\"background-\\\",e),o=Xn(t,i,e),a=Xn(t,i+\\\"background-\\\",e),l=Un(t,i+\\\"font\\\",e),h=Bn(t,i+\\\"max-angle\\\",e),c=Bn(t,i+\\\"offset-x\\\",e),u=Bn(t,i+\\\"offset-y\\\",e),f=jn(t,i+\\\"overflow\\\",e),d=Un(t,i+\\\"placement\\\",e),g=Bn(t,i+\\\"repeat\\\",e),p=Hn(t,i+\\\"scale\\\",e),_=jn(t,i+\\\"rotate-with-view\\\",e),m=Bn(t,i+\\\"rotation\\\",e),y=Un(t,i+\\\"align\\\",e),w=Un(t,i+\\\"justify\\\",e),x=Un(t,i+\\\"baseline\\\",e),v=jn(t,i+\\\"keep-upright\\\",e),S=qn(t,i+\\\"padding\\\",e),C=er(t,i+\\\"declutter-mode\\\"),b=new Tn({declutterMode:C});return function(t){if(b.setText(n(t)),r&&b.setFill(r(t)),s&&b.setBackgroundFill(s(t)),o&&b.setStroke(o(t)),a&&b.setBackgroundStroke(a(t)),l&&b.setFont(l(t)),h&&b.setMaxAngle(h(t)),c&&b.setOffsetX(c(t)),u&&b.setOffsetY(u(t)),f&&b.setOverflow(f(t)),d){const e=d(t);if(\\\"point\\\"!==e&&\\\"line\\\"!==e)throw new Error(\\\"Expected point or line for text-placement\\\");b.setPlacement(e)}if(g&&b.setRepeat(g(t)),p&&b.setScale(p(t)),_&&b.setRotateWithView(_(t)),m&&b.setRotation(m(t)),y){const e=y(t);if(\\\"left\\\"!==e&&\\\"center\\\"!==e&&\\\"right\\\"!==e&&\\\"end\\\"!==e&&\\\"start\\\"!==e)throw new Error(\\\"Expected left, right, center, start, or end for text-align\\\");b.setTextAlign(e)}if(w){const e=w(t);if(\\\"left\\\"!==e&&\\\"right\\\"!==e&&\\\"center\\\"!==e)throw new Error(\\\"Expected left, right, or center for text-justify\\\");b.setJustify(e)}if(x){const e=x(t);if(\\\"bottom\\\"!==e&&\\\"top\\\"!==e&&\\\"middle\\\"!==e&&\\\"alphabetic\\\"!==e&&\\\"hanging\\\"!==e)throw new Error(\\\"Expected bottom, top, middle, alphabetic, or hanging for text-baseline\\\");b.setTextBaseline(e)}return S&&b.setPadding(S(t)),v&&b.setKeepUpright(v(t)),b}}(t,e),s=function(t,e){if(\\\"icon-src\\\"in t)return function(t,e){const i=\\\"icon-\\\",n=i+\\\"src\\\",r=nr(t[n],n),s=Jn(t,i+\\\"anchor\\\",e),o=Hn(t,i+\\\"scale\\\",e),a=Bn(t,i+\\\"opacity\\\",e),l=Jn(t,i+\\\"displacement\\\",e),h=Bn(t,i+\\\"rotation\\\",e),c=jn(t,i+\\\"rotate-with-view\\\",e),u=Qn(t,i+\\\"anchor-origin\\\"),f=tr(t,i+\\\"anchor-x-units\\\"),d=tr(t,i+\\\"anchor-y-units\\\"),g=Yn(t,i+\\\"color\\\");let p,_=null;if(void 0!==g){Array.isArray(g)&&g.length>0&&\\\"string\\\"==typeof g[0]?_=Vn(t,i+\\\"color\\\",e):p=sr(g,i+\\\"color\\\")}const m=function(t,e){const i=t[e];if(void 0===i)return;if(\\\"string\\\"!=typeof i)throw new Error(`Expected a string for ${e}`);return i}(t,i+\\\"cross-origin\\\"),y=function(t,e){const i=t[e];if(void 0===i)return;return ir(i,e)}(t,i+\\\"offset\\\"),w=Qn(t,i+\\\"offset-origin\\\"),x=Zn(t,i+\\\"width\\\"),v=Zn(t,i+\\\"height\\\"),S=function(t,e){const i=t[e];if(void 0===i)return;if(\\\"number\\\"==typeof i)return z(i);if(!Array.isArray(i))throw new Error(`Expected a number or size array for ${e}`);if(2!==i.length||\\\"number\\\"!=typeof i[0]||\\\"number\\\"!=typeof i[1])throw new Error(`Expected a number or size array for ${e}`);return i}(t,i+\\\"size\\\"),C=er(t,i+\\\"declutter-mode\\\"),b={src:r,anchorOrigin:u,anchorXUnits:f,anchorYUnits:d,crossOrigin:m,offset:y,offsetOrigin:w,height:v,width:x,size:S,declutterMode:C};let M=null;return function(t){if(M)_&&M.setColor(_(t));else{const e=_?_(t):p;M=new Rn(void 0!==e?Object.assign({},b,{color:e}):Object.assign({},b))}return a&&M.setOpacity(a(t)),l&&M.setDisplacement(l(t)),h&&M.setRotation(h(t)),c&&M.setRotateWithView(c(t)),o&&M.setScale(o(t)),s&&M.setAnchor(s(t)),M}}(t,e);if(\\\"shape-points\\\"in t)return function(t,e){const i=\\\"shape-\\\",n=i+\\\"points\\\",r=i+\\\"radius\\\",s=rr(t[n],n);if(!(r in t))throw new Error(`Expected a number for ${r}`);const o=Bn(t,r,e),a=\\\"number\\\"==typeof t[r]?t[r]:5,l=i+\\\"radius2\\\",h=Bn(t,l,e),c=\\\"number\\\"==typeof t[l]?t[l]:void 0,u=Nn(t,i,e),f=Xn(t,i,e),d=Hn(t,i+\\\"scale\\\",e),g=Jn(t,i+\\\"displacement\\\",e),p=Bn(t,i+\\\"rotation\\\",e),_=jn(t,i+\\\"rotate-with-view\\\",e),m=Zn(t,i+\\\"angle\\\"),y=er(t,i+\\\"declutter-mode\\\"),w=new kn({points:s,radius:a,radius2:c,angle:m,declutterMode:y});return function(t){return o&&w.setRadius(o(t)),h&&w.setRadius2(h(t)),u&&w.setFill(u(t)),f&&w.setStroke(f(t)),g&&w.setDisplacement(g(t)),p&&w.setRotation(p(t)),_&&w.setRotateWithView(_(t)),d&&w.setScale(d(t)),w}}(t,e);if(\\\"circle-radius\\\"in t)return function(t,e){const i=\\\"circle-\\\",n=Nn(t,i,e),r=Xn(t,i,e),s=Bn(t,i+\\\"radius\\\",e),o=Hn(t,i+\\\"scale\\\",e),a=Jn(t,i+\\\"displacement\\\",e),l=Bn(t,i+\\\"rotation\\\",e),h=jn(t,i+\\\"rotate-with-view\\\",e),c=er(t,i+\\\"declutter-mode\\\"),u=new An({radius:5,declutterMode:c});return function(t){return s&&u.setRadius(s(t)),n&&u.setFill(n(t)),r&&u.setStroke(r(t)),a&&u.setDisplacement(a(t)),l&&u.setRotation(l(t)),h&&u.setRotateWithView(h(t)),o&&u.setScale(o(t)),u}}(t,e);return null}(t,e),o=Bn(t,\\\"z-index\\\",e);if(!(i||n||r||s||Xe(t)))throw new Error(\\\"No fill, stroke, point, or text symbolizer properties in style: \\\"+JSON.stringify(t));const a=new Dn;return function(t){let e=!0;if(i){const n=i(t);n&&(e=!1),a.setFill(n)}if(n){const i=n(t);i&&(e=!1),a.setStroke(i)}if(r){const i=r(t);i&&(e=!1),a.setText(i)}if(s){const i=s(t);i&&(e=!1),a.setImage(i)}return o&&a.setZIndex(o(t)),e?null:a}}function Nn(t,e,i){let n;if(e+\\\"fill-pattern-src\\\"in t)n=function(t,e,i){const n=Un(t,e+\\\"pattern-src\\\",i),r=Kn(t,e+\\\"pattern-offset\\\",i),s=Kn(t,e+\\\"pattern-size\\\",i),o=Vn(t,e+\\\"color\\\",i);return function(t){return{src:n(t),offset:r&&r(t),size:s&&s(t),color:o&&o(t)}}}(t,e+\\\"fill-\\\",i);else{if(\\\"none\\\"===t[e+\\\"fill-color\\\"])return t=>null;n=Vn(t,e+\\\"fill-color\\\",i)}if(!n)return null;const r=new Pn;return function(t){const e=n(t);return e===m?null:(r.setColor(e),r)}}function Xn(t,e,i){const n=Bn(t,e+\\\"stroke-width\\\",i),r=Vn(t,e+\\\"stroke-color\\\",i);if(!n&&!r)return null;const s=Un(t,e+\\\"stroke-line-cap\\\",i),o=Un(t,e+\\\"stroke-line-join\\\",i),a=qn(t,e+\\\"stroke-line-dash\\\",i),l=Bn(t,e+\\\"stroke-line-dash-offset\\\",i),h=Bn(t,e+\\\"stroke-miter-limit\\\",i),c=Bn(t,e+\\\"stroke-offset\\\",i),u=new Ln;return function(t){if(r){const e=r(t);if(e===m)return null;u.setColor(e)}if(n&&u.setWidth(n(t)),s){const e=s(t);if(\\\"butt\\\"!==e&&\\\"round\\\"!==e&&\\\"square\\\"!==e)throw new Error(\\\"Expected butt, round, or square line cap\\\");u.setLineCap(e)}if(o){const e=o(t);if(\\\"bevel\\\"!==e&&\\\"round\\\"!==e&&\\\"miter\\\"!==e)throw new Error(\\\"Expected bevel, round, or miter line join\\\");u.setLineJoin(e)}return a&&u.setLineDash(a(t)),l&&u.setLineDashOffset(l(t)),h&&u.setMiterLimit(h(t)),c&&u.setOffset(c(t)),u}}function Yn(t,e){if(!(e in t))return;const i=t[e];return void 0===i?void 0:i}function Bn(t,e,i){const n=Yn(t,e);if(void 0===n)return;const r=Cn(n,G,i);return function(t){return rr(r(t),e)}}function Un(t,e,i){const n=Yn(t,e);if(void 0===n)return null;const r=Cn(n,N,i);return function(t){return nr(r(t),e)}}function jn(t,e,i){const n=Yn(t,e);if(void 0===n)return null;const r=Cn(n,W,i);return function(t){const i=r(t);if(\\\"boolean\\\"!=typeof i)throw new Error(`Expected a boolean for ${e}`);return i}}function Vn(t,e,i){const n=Yn(t,e);if(void 0===n)return null;const r=Cn(n,X,i);return function(t){return sr(r(t),e)}}function qn(t,e,i){const n=Yn(t,e);if(void 0===n)return null;if(Array.isArray(n)&&(0===n.length||\\\"string\\\"!=typeof n[0])){const t=n.map((t,n)=>{if(\\\"number\\\"==typeof t)return()=>t;const r=Cn(t,G,i);return function(t){return rr(r(t),`${e}[${n}]`)}});return function(e){const i=new Array(t.length);for(let n=0;n<t.length;++n)i[n]=t[n](e);return i}}const r=Cn(n,Y,i);return function(t){return ir(r(t),e)}}function Jn(t,e,i){const n=Yn(t,e);if(void 0===n)return null;const r=Cn(n,Y,i);return function(t){const i=ir(r(t),e);if(2!==i.length)throw new Error(`Expected two numbers for ${e}`);return i}}function Kn(t,e,i){const n=Yn(t,e);if(void 0===n)return null;const r=Cn(n,Y,i);return function(t){return or(r(t),e)}}function Hn(t,e,i){const n=Yn(t,e);if(void 0===n)return null;const r=Cn(n,Y|G,i);return function(t){return function(t,e){if(\\\"number\\\"==typeof t)return t;return or(t,e)}(r(t),e)}}function Zn(t,e){const i=t[e];if(void 0!==i){if(\\\"number\\\"!=typeof i)throw new Error(`Expected a number for ${e}`);return i}}function Qn(t,e){const i=t[e];if(void 0!==i){if(\\\"bottom-left\\\"!==i&&\\\"bottom-right\\\"!==i&&\\\"top-left\\\"!==i&&\\\"top-right\\\"!==i)throw new Error(`Expected bottom-left, bottom-right, top-left, or top-right for ${e}`);return i}}function tr(t,e){const i=t[e];if(void 0!==i){if(\\\"pixels\\\"!==i&&\\\"fraction\\\"!==i)throw new Error(`Expected pixels or fraction for ${e}`);return i}}function er(t,e){const i=t[e];if(void 0!==i){if(\\\"string\\\"!=typeof i)throw new Error(`Expected a string for ${e}`);if(\\\"declutter\\\"!==i&&\\\"obstacle\\\"!==i&&\\\"none\\\"!==i)throw new Error(`Expected declutter, obstacle, or none for ${e}`);return i}}function ir(t,e){if(!Array.isArray(t))throw new Error(`Expected an array for ${e}`);const i=t.length;for(let n=0;n<i;++n)if(\\\"number\\\"!=typeof t[n])throw new Error(`Expected an array of numbers for ${e}`);return t}function nr(t,e){if(\\\"string\\\"!=typeof t)throw new Error(`Expected a string for ${e}`);return t}function rr(t,e){if(\\\"number\\\"!=typeof t)throw new Error(`Expected a number for ${e}`);return t}function sr(t,e){if(\\\"string\\\"==typeof t)return t;const i=ir(t,e),n=i.length;if(n<3||n>4)throw new Error(`Expected a color with 3 or 4 values for ${e}`);return i}function or(t,e){const i=ir(t,e);if(2!==i.length)throw new Error(`Expected an array of two numbers for ${e}`);return i}const ar=\\\"BUILD_INSTRUCTIONS\\\",lr=\\\"DISPOSE_INSTRUCTIONS\\\",hr=\\\"RENDER\\\",cr={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,\\\"us-ft\\\":1200/3937};class ur{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:\\\"enu\\\",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||cr[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}}const fr=6378137,dr=Math.PI*fr,gr=[-dr,-dr,dr,dr],pr=[-180,-85,180,85],_r=fr*Math.log(Math.tan(Math.PI/2));class mr extends ur{constructor(t){super({code:t,units:\\\"m\\\",extent:gr,global:!0,worldExtent:pr,getPointResolution:function(t,e){return t/Math.cosh(e[1]/fr)}})}}const yr=[new mr(\\\"EPSG:3857\\\"),new mr(\\\"EPSG:102100\\\"),new mr(\\\"EPSG:102113\\\"),new mr(\\\"EPSG:900913\\\"),new mr(\\\"http://www.opengis.net/def/crs/EPSG/0/3857\\\"),new mr(\\\"http://www.opengis.net/gml/srs/epsg.xml#3857\\\")];function wr(t,e,i,n){const r=t.length;i=i>1?i:2,n=n??i,void 0===e&&(e=i>2?t.slice():new Array(r));for(let i=0;i<r;i+=n){e[i]=dr*t[i]/180;let n=fr*Math.log(Math.tan(Math.PI*(+t[i+1]+90)/360));n>_r?n=_r:n<-_r&&(n=-_r),e[i+1]=n}return e}function xr(t,e,i,n){const r=t.length;i=i>1?i:2,n=n??i,void 0===e&&(e=i>2?t.slice():new Array(r));for(let i=0;i<r;i+=n)e[i]=180*t[i]/dr,e[i+1]=360*Math.atan(Math.exp(t[i+1]/fr))/Math.PI-90;return e}const vr=[-180,-90,180,90],Sr=6378137*Math.PI/180;class Cr extends ur{constructor(t,e){super({code:t,units:\\\"degrees\\\",extent:vr,axisOrientation:e,global:!0,metersPerUnit:Sr,worldExtent:vr})}}const br=[new Cr(\\\"CRS:84\\\"),new Cr(\\\"EPSG:4326\\\",\\\"neu\\\"),new Cr(\\\"urn:ogc:def:crs:OGC:1.3:CRS84\\\"),new Cr(\\\"urn:ogc:def:crs:OGC:2:84\\\"),new Cr(\\\"http://www.opengis.net/def/crs/OGC/1.3/CRS84\\\"),new Cr(\\\"http://www.opengis.net/gml/srs/epsg.xml#4326\\\",\\\"neu\\\"),new Cr(\\\"http://www.opengis.net/def/crs/EPSG/0/4326\\\",\\\"neu\\\")];let Mr={};let Ir={};function Er(t,e,i){const n=t.getCode(),r=e.getCode();n in Ir||(Ir[n]={}),Ir[n][r]=i}function kr(t,e){return t in Ir&&e in Ir[t]?Ir[t][e]:null}const Ar=.9996,Pr=.00669438,Or=Pr*Pr,Rr=Or*Pr,Lr=Pr/(1-Pr),Dr=Math.sqrt(1-Pr),Fr=(1-Dr)/(1+Dr),Tr=Fr*Fr,zr=Tr*Fr,$r=zr*Fr,Wr=$r*Fr,Gr=.9983242984503243,Nr=15*Or/256+45*Rr/1024,Xr=35*Rr/3072,Yr=1.5*Fr-27/32*zr+269/512*Wr,Br=21/16*Tr-55/32*$r,Ur=151/96*zr-417/128*Wr,jr=1097/512*$r,Vr=6378137;function qr(t,e,i){const n=t-5e5,r=(i.north?e:e-1e7)/Ar/(Vr*Gr),s=r+Yr*Math.sin(2*r)+Br*Math.sin(4*r)+Ur*Math.sin(6*r)+jr*Math.sin(8*r),o=Math.sin(s),a=o*o,l=Math.cos(s),h=o/l,c=h*h,u=c*c,f=1-Pr*a,p=Math.sqrt(1-Pr*a),m=Lr*l**2,y=m*m,w=n/(Vr/p*Ar),x=w*w,v=x*w,S=v*w,C=S*w,b=s-h/((1-Pr)/f)*(x/2-S/24*(5+3*c+10*m-4*y-9*Lr))+C*w/720*(61+90*c+298*m+45*u-252*Lr-3*y);let M=(w-v/6*(1+2*c+m)+C/120*(5-2*m+28*c-3*y+8*Lr+24*u))/l;return M=_(M+g(Kr(i.number)),-Math.PI,Math.PI),[d(M),d(b)]}function Jr(t,e,i){t=_(t,-180,180),e<-80?e=-80:e>84&&(e=84);const n=g(e),r=Math.sin(n),s=Math.cos(n),o=r/s,a=o*o,l=a*a,h=g(t),c=g(Kr(i.number)),u=Vr/Math.sqrt(1-Pr*r**2),f=Lr*s**2,d=s*_(h-c,-Math.PI,Math.PI),p=d*d,m=p*d,y=m*d,w=y*d,x=w*d,v=Vr*(Gr*n-.002514607064228144*Math.sin(2*n)+Nr*Math.sin(4*n)-Xr*Math.sin(6*n)),S=Ar*u*(d+m/6*(1-a+f)+w/120*(5-18*a+l+72*f-58*Lr))+5e5;let C=Ar*(v+u*o*(p/2+y/24*(5-a+9*f+4*f**2)+x/720*(61-58*a+l+600*f-330*Lr)));return i.north||(C+=1e7),[S,C]}function Kr(t){return 6*(t-1)-180+3}const Hr=[/^EPSG:(\\\\d+)$/,/^urn:ogc:def:crs:EPSG::(\\\\d+)$/,/^http:\\\\/\\\\/www\\\\.opengis\\\\.net\\\\/def\\\\/crs\\\\/EPSG\\\\/0\\\\/(\\\\d+)$/];function Zr(t){let e=0;for(const i of Hr){const n=t.match(i);if(n){e=parseInt(n[1]);break}}if(!e)return null;let i=0,n=!1;return e>32700&&e<32761?i=e-32700:e>32600&&e<32661&&(n=!0,i=e-32600),i?{number:i,north:n}:null}function Qr(t,e){return function(i,n,r,s){const o=i.length;r=r>1?r:2,s=s??r,n||(n=r>2?i.slice():new Array(o));for(let r=0;r<o;r+=s){const s=i[r],o=i[r+1],a=t(s,o,e);n[r]=a[0],n[r+1]=a[1]}return n}}const ts=[function(t){const e=Zr(t.getCode());return e?{forward:Qr(Jr,e),inverse:Qr(qr,e)}:null}],es=[function(t){return Zr(t)?new ur({code:t,units:\\\"m\\\"}):null}];function is(t,e){if(void 0!==e)for(let i=0,n=t.length;i<n;++i)e[i]=t[i];else e=t.slice();return e}function ns(t){!function(t,e){Mr[t]=e}(t.getCode(),t),Er(t,t,is)}function rs(t){if(\\\"string\\\"!=typeof t)return t;const e=Mr[i=t]||Mr[i.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\\\w+)$/,\\\"EPSG:$3\\\")]||null;var i;if(e)return e;for(const e of es){const i=e(t);if(i)return i}return null}function ss(t){!function(t){t.forEach(ns)}(t),t.forEach(function(e){t.forEach(function(t){e!==t&&Er(e,t,is)})})}function os(t,e){return function(i,n,r,s){return n=t(i,n,r,s),e(n,n,r,s)}}function as(t,e){return function(t,e){const i=t.getCode(),n=e.getCode();let r=kr(i,n);if(r)return r;let s=null,o=null;for(const i of ts)s||(s=i(t)),o||(o=i(e));if(!s&&!o)return null;const a=\\\"EPSG:4326\\\";if(o)if(s)r=os(s.inverse,o.forward);else{const t=kr(i,a);t&&(r=os(t,o.forward))}else{const t=kr(a,n);t&&(r=os(s.inverse,t))}return r&&(ns(t),ns(e),Er(t,e,r)),r}(rs(t),rs(e))}var ls,hs,cs;ss(yr),ss(br),ls=yr,hs=wr,cs=xr,br.forEach(function(t){ls.forEach(function(e){Er(t,e,hs),Er(e,t,cs)})});const us=Fe(),fs=[NaN,NaN];class ds extends ni{constructor(){super(),this.extent_=[1/0,1/0,-1/0,-1/0],this.extentRevision_=-1,this.simplifiedGeometryMaxMinSquaredTolerance=0,this.simplifiedGeometryRevision=0,this.simplifyTransformedInternal=Je((t,e,i)=>{if(!i)return this.getSimplifiedGeometry(e);const n=this.clone();return n.applyTransform(i),n.getSimplifiedGeometry(e)})}simplifyTransformed(t,e){return this.simplifyTransformedInternal(this.getRevision(),t,e)}clone(){return Qe()}closestPointXY(t,e,i,n){return Qe()}containsXY(t,e){return 0===this.closestPointXY(t,e,fs,Number.MIN_VALUE)}getClosestPoint(t,e){return e=e||[NaN,NaN],this.closestPointXY(t[0],t[1],e,1/0),e}intersectsCoordinate(t){return this.containsXY(t[0],t[1])}computeExtent(t){return Qe()}getExtent(t){if(this.extentRevision_!=this.getRevision()){const t=this.computeExtent(this.extent_);(isNaN(t[0])||isNaN(t[1]))&&me(t),this.extentRevision_=this.getRevision()}return function(t,e){return e?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e):t}(this.extent_,t)}rotate(t,e){Qe()}scale(t,e,i){Qe()}simplify(t){return this.getSimplifiedGeometry(t*t)}getSimplifiedGeometry(t){return Qe()}getType(){return Qe()}applyTransform(t){Qe()}intersectsExtent(t){return Qe()}translate(t,e){Qe()}transform(t,e){const i=rs(t),n=\\\"tile-pixels\\\"==i.getUnits()?function(t,n,r){const s=i.getExtent(),o=i.getWorldExtent(),a=Ce(o)/Ce(s);$e(us,o[0],o[3],a,-a,0,0,0);const l=Ae(t,0,t.length,r,us,n),h=as(i,e);return h?h(l,l,r):l}:as(i,e);return this.applyTransform(n),this}}class gs extends ds{constructor(){super(),this.layout=\\\"XY\\\",this.stride=2,this.flatCoordinates}computeExtent(t){return we(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t)}getCoordinates(){return Qe()}getFirstCoordinate(){return this.flatCoordinates.slice(0,this.stride)}getFlatCoordinates(){return this.flatCoordinates}getLastCoordinate(){return this.flatCoordinates.slice(this.flatCoordinates.length-this.stride)}getLayout(){return this.layout}getSimplifiedGeometry(t){if(this.simplifiedGeometryRevision!==this.getRevision()&&(this.simplifiedGeometryMaxMinSquaredTolerance=0,this.simplifiedGeometryRevision=this.getRevision()),t<0||0!==this.simplifiedGeometryMaxMinSquaredTolerance&&t<=this.simplifiedGeometryMaxMinSquaredTolerance)return this;const e=this.getSimplifiedGeometryInternal(t);return e.getFlatCoordinates().length<this.flatCoordinates.length?e:(this.simplifiedGeometryMaxMinSquaredTolerance=t,this)}getSimplifiedGeometryInternal(t){return this}getStride(){return this.stride}setFlatCoordinates(t,e){this.stride=ps(t),this.layout=t,this.flatCoordinates=e}setCoordinates(t,e){Qe()}setLayout(t,e,i){let n;if(t)n=ps(t);else{for(let t=0;t<i;++t){if(0===e.length)return this.layout=\\\"XY\\\",void(this.stride=2);e=e[0]}n=e.length,t=function(t){let e;2==t?e=\\\"XY\\\":3==t?e=\\\"XYZ\\\":4==t&&(e=\\\"XYZM\\\");return e}(n)}this.layout=t,this.stride=n}applyTransform(t){this.flatCoordinates&&(t(this.flatCoordinates,this.flatCoordinates,this.layout.startsWith(\\\"XYZ\\\")?3:2,this.stride),this.changed())}rotate(t,e){const i=this.getFlatCoordinates();if(i){const n=this.getStride();Pe(i,0,i.length,n,t,e,i),this.changed()}}scale(t,e,i){void 0===e&&(e=t),i||(i=Se(this.getExtent()));const n=this.getFlatCoordinates();if(n){const r=this.getStride();!function(t,e,i,n,r,s,o,a){a=a||[];const l=o[0],h=o[1];let c=0;for(let o=e;o<i;o+=n){const e=t[o]-l,i=t[o+1]-h;a[c++]=l+r*e,a[c++]=h+s*i;for(let e=o+2;e<o+n;++e)a[c++]=t[e]}a&&a.length!=c&&(a.length=c)}(n,0,n.length,r,t,e,i,n),this.changed()}}translate(t,e){const i=this.getFlatCoordinates();if(i){const n=this.getStride();!function(t,e,i,n,r,s,o){o=o||[];let a=0;for(let l=e;l<i;l+=n){o[a++]=t[l]+r,o[a++]=t[l+1]+s;for(let e=l+2;e<l+n;++e)o[a++]=t[e]}o&&o.length!=a&&(o.length=a)}(i,0,i.length,n,t,e,i),this.changed()}}}function ps(t){let e;return\\\"XY\\\"==t?e=2:\\\"XYZ\\\"==t||\\\"XYM\\\"==t?e=3:\\\"XYZM\\\"==t&&(e=4),e}function _s(t,e,i,n,r,s,o){const a=t[e],l=t[e+1],h=t[i]-a,c=t[i+1]-l;let u;if(0===h&&0===c)u=e;else{const f=((r-a)*h+(s-l)*c)/(h*h+c*c);if(f>1)u=i;else{if(f>0){for(let r=0;r<n;++r)o[r]=p(t[e+r],t[i+r],f);return void(o.length=n)}u=e}}for(let e=0;e<n;++e)o[e]=t[u+e];o.length=n}function ms(t,e,i,n,r){let s=t[e],o=t[e+1];for(e+=n;e<i;e+=n){const i=t[e],n=t[e+1],a=f(s,o,i,n);a>r&&(r=a),s=i,o=n}return r}function ys(t,e,i,n,r,s,o,a,l,h,c){if(e==i)return h;let u,d;if(0===r){if(d=f(o,a,t[e],t[e+1]),d<h){for(u=0;u<n;++u)l[u]=t[e+u];return l.length=n,d}return h}c=c||[NaN,NaN];let g=e+n;for(;g<i;)if(_s(t,g-n,g,n,o,a,c),d=f(o,a,c[0],c[1]),d<h){for(h=d,u=0;u<n;++u)l[u]=c[u];l.length=n,g+=n}else g+=n*Math.max((Math.sqrt(d)-Math.sqrt(h))/r|0,1);if(s&&(_s(t,i-n,e,n,o,a,c),d=f(o,a,c[0],c[1]),d<h)){for(h=d,u=0;u<n;++u)l[u]=c[u];l.length=n}return h}function ws(t,e,i,n){for(let r=0,s=i.length;r<s;++r){const s=i[r];for(let i=0;i<n;++i)t[e++]=s[i]}return e}function xs(e,i,n,r,s,o,a){let l,h;const c=(n-i)/r;if(1===c)l=i;else if(2===c)l=i,h=s;else if(0!==c){let o=e[i],a=e[i+1],c=0;const u=[0];for(let t=i+r;t<n;t+=r){const i=e[t],n=e[t+1];c+=Math.sqrt((i-o)*(i-o)+(n-a)*(n-a)),u.push(c),o=i,a=n}const f=s*c,d=function(e,i,n){let r,s;n=n||t;let o=0,a=e.length,l=!1;for(;o<a;)r=o+(a-o>>1),s=+n(e[r],i),s<0?o=r+1:(a=r,l=!s);return l?o:~o}(u,f);d<0?(h=(f-u[-d-2])/(u[-d-1]-u[-d-2]),l=i+(-d-2)*r):l=i+d*r}a=a>1?a:2,o=o||new Array(a);for(let t=0;t<a;++t)o[t]=void 0===l?NaN:void 0===h?e[l+t]:p(e[l+t],e[l+r+t],h);return o}function vs(t,e,i,n,r){const s=function(t,e){let i;return i=e(function(t){return[t[0],t[1]]}(t)),i||(i=e(function(t){return[t[2],t[1]]}(t)),i||(i=e(function(t){return[t[2],t[3]]}(t)),i||(i=e(function(t){return[t[0],t[3]]}(t)),i||!1)))}(r,function(r){return!Ss(t,e,i,n,r[0],r[1])});return!s}function Ss(t,e,i,n,r,s){let o=0,a=t[i-n],l=t[i-n+1];for(;e<i;e+=n){const i=t[e],n=t[e+1];l<=s?n>s&&(i-a)*(s-l)-(r-a)*(n-l)>0&&o++:n<=s&&(i-a)*(s-l)-(r-a)*(n-l)<0&&o--,a=i,l=n}return 0!==o}function Cs(t,e,i,n,r,s){if(0===i.length)return!1;if(!Ss(t,e,i[0],n,r,s))return!1;for(let e=1,o=i.length;e<o;++e)if(Ss(t,i[e-1],i[e],n,r,s))return!1;return!0}function bs(t,e,i,n,r){let s;for(e+=n;e<i;e+=n)if(s=r(t.slice(e-n,e),t.slice(e,e+n)),s)return s;return!1}function Ms(t,e,i,n,r,s){return s=s??xe([1/0,1/0,-1/0,-1/0],t,e,i,n),!!be(r,s)&&(s[0]>=r[0]&&s[2]<=r[2]||s[1]>=r[1]&&s[3]<=r[3]||bs(t,e,i,n,function(t,e){return function(t,e,i){let n=!1;const r=pe(t,e),s=pe(t,i);if(r===ae||s===ae)n=!0;else{const o=t[0],a=t[1],l=t[2],h=t[3],c=e[0],u=e[1],f=i[0],d=i[1],g=(d-u)/(f-c);let p,_;s&le&&!(r&le)&&(p=f-(d-h)/g,n=p>=o&&p<=l),n||!(s&he)||r&he||(_=d-(f-l)*g,n=_>=a&&_<=h),n||!(s&ce)||r&ce||(p=f-(d-a)/g,n=p>=o&&p<=l),n||!(s&ue)||r&ue||(_=d-(f-o)*g,n=_>=a&&_<=h)}return n}(r,t,e)}))}function Is(t,e,i,n,r){if(!function(t,e,i,n,r){return!!(Ms(t,e,i,n,r)||Ss(t,e,i,n,r[0],r[1])||Ss(t,e,i,n,r[0],r[3])||Ss(t,e,i,n,r[2],r[1])||Ss(t,e,i,n,r[2],r[3]))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(let e=1,s=i.length;e<s;++e)if(vs(t,i[e-1],i[e],n,r)&&!Ms(t,i[e-1],i[e],n,r))return!1;return!0}function Es(t,e,i,n,r,s,o){const a=(i-e)/n;if(a<3){for(;e<i;e+=n)s[o++]=t[e],s[o++]=t[e+1];return o}const l=new Array(a);l[0]=1,l[a-1]=1;const h=[e,i-n];let c=0;for(;h.length>0;){const i=h.pop(),s=h.pop();let o=0;const a=t[s],f=t[s+1],d=t[i],g=t[i+1];for(let e=s+n;e<i;e+=n){const i=u(t[e],t[e+1],a,f,d,g);i>o&&(c=e,o=i)}o>r&&(l[(c-e)/n]=1,s+n<c&&h.push(s,c),c+n<i&&h.push(c,i))}for(let i=0;i<a;++i)l[i]&&(s[o++]=t[e+i*n],s[o++]=t[e+i*n+1]);return o}function ks(t,e){return e*Math.round(t/e)}function As(t,e,i,n,r,s,o){if(e==i)return o;let a,l,h=ks(t[e],r),c=ks(t[e+1],r);e+=n,s[o++]=h,s[o++]=c;do{if(a=ks(t[e],r),l=ks(t[e+1],r),(e+=n)==i)return s[o++]=a,s[o++]=l,o}while(a==h&&l==c);for(;e<i;){const i=ks(t[e],r),u=ks(t[e+1],r);if(e+=n,i==a&&u==l)continue;const f=a-h,d=l-c,g=i-h,p=u-c;f*p==d*g&&(f<0&&g<f||f==g||f>0&&g>f)&&(d<0&&p<d||d==p||d>0&&p>d)?(a=i,l=u):(s[o++]=a,s[o++]=l,h=a,c=l,a=i,l=u)}return s[o++]=a,s[o++]=l,o}function Ps(t,e,i,n,r,s,o,a){for(let l=0,h=i.length;l<h;++l){const h=i[l];o=As(t,e,h,n,r,s,o),a.push(o),e=h}return o}class Os extends gs{constructor(t,e){super(),this.flatMidpoint_=null,this.flatMidpointRevision_=-1,this.maxDelta_=-1,this.maxDeltaRevision_=-1,void 0===e||Array.isArray(t[0])?this.setCoordinates(t,e):this.setFlatCoordinates(e,t)}appendCoordinate(t){i(this.flatCoordinates,t),this.changed()}clone(){const t=new Os(this.flatCoordinates.slice(),this.layout);return t.applyProperties(this),t}closestPointXY(t,e,i,n){return n<fe(this.getExtent(),t,e)?n:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(ms(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),ys(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,this.maxDelta_,!1,t,e,i,n))}forEachSegment(t){return bs(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t)}getCoordinateAtM(t,e){return\\\"XYM\\\"!=this.layout&&\\\"XYZM\\\"!=this.layout?null:(e=void 0!==e&&e,function(t,e,i,n,r,s){if(i==e)return null;let o;if(r<t[e+n-1])return s?(o=t.slice(e,e+n),o[n-1]=r,o):null;if(t[i-1]<r)return s?(o=t.slice(i-n,i),o[n-1]=r,o):null;if(r==t[e+n-1])return t.slice(e,e+n);let a=e/n,l=i/n;for(;a<l;){const e=a+l>>1;r<t[(e+1)*n-1]?l=e:a=e+1}const h=t[a*n-1];if(r==h)return t.slice((a-1)*n,(a-1)*n+n);const c=(r-h)/(t[(a+1)*n-1]-h);o=[];for(let e=0;e<n-1;++e)o.push(p(t[(a-1)*n+e],t[a*n+e],c));return o.push(r),o}(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e))}getCoordinates(){return sn(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getCoordinateAt(t,e){return xs(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e,this.stride)}getLength(){return Me(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getFlatMidpoint(){return this.flatMidpointRevision_!=this.getRevision()&&(this.flatMidpoint_=this.getCoordinateAt(.5,this.flatMidpoint_??void 0),this.flatMidpointRevision_=this.getRevision()),this.flatMidpoint_}getSimplifiedGeometryInternal(t){const e=[];return e.length=Es(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e,0),new Os(e,\\\"XY\\\")}getType(){return\\\"LineString\\\"}intersectsExtent(t){return Ms(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,this.getExtent())}setCoordinates(t,e){this.setLayout(e,t,1),this.flatCoordinates||(this.flatCoordinates=[]),this.flatCoordinates.length=ws(this.flatCoordinates,0,t,this.stride),this.changed()}}class Rs extends gs{constructor(t,e){super(),this.setCoordinates(t,e)}clone(){const t=new Rs(this.flatCoordinates.slice(),this.layout);return t.applyProperties(this),t}closestPointXY(t,e,i,n){const r=this.flatCoordinates,s=f(t,e,r[0],r[1]);if(s<n){const t=this.stride;for(let e=0;e<t;++e)i[e]=r[e];return i.length=t,s}return n}getCoordinates(){return this.flatCoordinates.slice()}computeExtent(t){return ye(this.flatCoordinates,t)}getType(){return\\\"Point\\\"}intersectsExtent(t){return ge(t,this.flatCoordinates[0],this.flatCoordinates[1])}setCoordinates(t,e){this.setLayout(e,t,0),this.flatCoordinates||(this.flatCoordinates=[]),this.flatCoordinates.length=function(t,e,i){for(let n=0,r=i.length;n<r;++n)t[e++]=i[n];return e}(this.flatCoordinates,0,t,this.stride),this.changed()}}function Ls(t,e,i,n){let r=0;const s=t[i-n],o=t[i-n+1];let a=0,l=0;for(;e<i;e+=n){const i=t[e]-s,n=t[e+1]-o;r+=l*i-a*n,a=i,l=n}return r/2}class Ds extends gs{constructor(t,e){super(),this.maxDelta_=-1,this.maxDeltaRevision_=-1,void 0===e||Array.isArray(t[0])?this.setCoordinates(t,e):this.setFlatCoordinates(e,t)}clone(){return new Ds(this.flatCoordinates.slice(),this.layout)}closestPointXY(t,e,i,n){return n<fe(this.getExtent(),t,e)?n:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(ms(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),ys(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,this.maxDelta_,!0,t,e,i,n))}getArea(){return Ls(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getCoordinates(){return sn(this.flatCoordinates,0,this.flatCoordinates.length,this.stride)}getSimplifiedGeometryInternal(t){const e=[];return e.length=Es(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t,e,0),new Ds(e,\\\"XY\\\")}getType(){return\\\"LinearRing\\\"}intersectsExtent(t){return Ms(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t)}setCoordinates(t,e){this.setLayout(e,t,1),this.flatCoordinates||(this.flatCoordinates=[]),this.flatCoordinates.length=ws(this.flatCoordinates,0,t,this.stride),this.changed()}}function Fs(e,i,n,r,s,o,a){let l,h,c,u,f,d,g;const p=s[o+1],_=[];for(let t=0,s=n.length;t<s;++t){const s=n[t];for(u=e[s-r],d=e[s-r+1],l=i;l<s;l+=r)f=e[l],g=e[l+1],(p<=d&&g<=p||d<=p&&p<=g)&&(c=(p-d)/(g-d)*(f-u)+u,_.push(c)),u=f,d=g}let m=NaN,y=-1/0;for(_.sort(t),u=_[0],l=1,h=_.length;l<h;++l){f=_[l];const t=Math.abs(f-u);t>y&&(c=(u+f)/2,Cs(e,i,n,r,c,p)&&(m=c,y=t)),u=f}return isNaN(m)&&(m=s[o]),a?(a.push(m,p,y),a):[m,p,y]}function Ts(t,e,i,n){for(;e<i-n;){for(let r=0;r<n;++r){const s=t[e+r];t[e+r]=t[i-n+r],t[i-n+r]=s}e+=n,i-=n}}function zs(t,e,i,n){let r=0,s=t[i-n],o=t[i-n+1];for(;e<i;e+=n){const i=t[e],n=t[e+1];r+=(i-s)*(n+o),s=i,o=n}return 0===r?void 0:r>0}function $s(t,e,i,n,r){r=void 0!==r&&r;for(let s=0,o=i.length;s<o;++s){const o=i[s],a=zs(t,e,o,n);(0===s?r&&a||!r&&!a:r&&!a||!r&&a)&&Ts(t,e,o,n),e=o}return e}class Ws extends gs{constructor(t,e,i){super(),this.ends_=[],this.flatInteriorPointRevision_=-1,this.flatInteriorPoint_=null,this.maxDelta_=-1,this.maxDeltaRevision_=-1,this.orientedRevision_=-1,this.orientedFlatCoordinates_=null,void 0!==e&&i?(this.setFlatCoordinates(e,t),this.ends_=i):this.setCoordinates(t,e)}appendLinearRing(t){this.flatCoordinates?i(this.flatCoordinates,t.getFlatCoordinates()):this.flatCoordinates=t.getFlatCoordinates().slice(),this.ends_.push(this.flatCoordinates.length),this.changed()}clone(){const t=new Ws(this.flatCoordinates.slice(),this.layout,this.ends_.slice());return t.applyProperties(this),t}closestPointXY(t,e,i,n){return n<fe(this.getExtent(),t,e)?n:(this.maxDeltaRevision_!=this.getRevision()&&(this.maxDelta_=Math.sqrt(function(t,e,i,n,r){for(let s=0,o=i.length;s<o;++s){const o=i[s];r=ms(t,e,o,n,r),e=o}return r}(this.flatCoordinates,0,this.ends_,this.stride,0)),this.maxDeltaRevision_=this.getRevision()),function(t,e,i,n,r,s,o,a,l,h,c){c=c||[NaN,NaN];for(let u=0,f=i.length;u<f;++u){const f=i[u];h=ys(t,e,f,n,r,s,o,a,l,h,c),e=f}return h}(this.flatCoordinates,0,this.ends_,this.stride,this.maxDelta_,!0,t,e,i,n))}containsXY(t,e){return Cs(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,t,e)}getArea(){return function(t,e,i,n){let r=0;for(let s=0,o=i.length;s<o;++s){const o=i[s];r+=Ls(t,e,o,n),e=o}return r}(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride)}getCoordinates(t){let e;return void 0!==t?(e=this.getOrientedFlatCoordinates().slice(),$s(e,0,this.ends_,this.stride,t)):e=this.flatCoordinates,on(e,0,this.ends_,this.stride)}getEnds(){return this.ends_}getFlatInteriorPoint(){if(this.flatInteriorPointRevision_!=this.getRevision()){const t=Se(this.getExtent());this.flatInteriorPoint_=Fs(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,t,0),this.flatInteriorPointRevision_=this.getRevision()}return this.flatInteriorPoint_}getInteriorPoint(){return new Rs(this.getFlatInteriorPoint(),\\\"XYM\\\")}getLinearRingCount(){return this.ends_.length}getLinearRing(t){return t<0||this.ends_.length<=t?null:new Ds(this.flatCoordinates.slice(0===t?0:this.ends_[t-1],this.ends_[t]),this.layout)}getLinearRings(){const t=this.layout,e=this.flatCoordinates,i=this.ends_,n=[];let r=0;for(let s=0,o=i.length;s<o;++s){const o=i[s],a=new Ds(e.slice(r,o),t);n.push(a),r=o}return n}getOrientedFlatCoordinates(){if(this.orientedRevision_!=this.getRevision()){const t=this.flatCoordinates;!function(t,e,i,n,r){r=void 0!==r&&r;for(let s=0,o=i.length;s<o;++s){const o=i[s],a=zs(t,e,o,n);if(0===s){if(r&&a||!r&&!a)return!1}else if(r&&!a||!r&&a)return!1;e=o}return!0}(t,0,this.ends_,this.stride)?(this.orientedFlatCoordinates_=t.slice(),this.orientedFlatCoordinates_.length=$s(this.orientedFlatCoordinates_,0,this.ends_,this.stride)):this.orientedFlatCoordinates_=t,this.orientedRevision_=this.getRevision()}return this.orientedFlatCoordinates_}getSimplifiedGeometryInternal(t){const e=[],i=[];return e.length=Ps(this.flatCoordinates,0,this.ends_,this.stride,Math.sqrt(t),e,0,i),new Ws(e,\\\"XY\\\",i)}getType(){return\\\"Polygon\\\"}intersectsExtent(t){return Is(this.getOrientedFlatCoordinates(),0,this.ends_,this.stride,t)}setCoordinates(t,e){this.setLayout(e,t,2),this.flatCoordinates||(this.flatCoordinates=[]);const i=function(t,e,i,n,r){r=r||[];let s=0;for(let o=0,a=i.length;o<a;++o){const a=ws(t,e,i[o],n);r[s++]=a,e=a}return r.length=s,r}(this.flatCoordinates,0,t,this.stride,this.ends_);this.flatCoordinates.length=0===i.length?0:i[i.length-1],this.changed()}}const Gs=Fe();class Ns{constructor(t,e,i,n,r,s){this.styleFunction,this.extent_,this.id_=s,this.type_=t,this.flatCoordinates_=e,this.flatInteriorPoints_=null,this.flatMidpoints_=null,this.ends_=i||null,this.properties_=r,this.squaredTolerance_,this.stride_=n,this.simplifiedGeometry_}get(t){return this.properties_[t]}getExtent(){return this.extent_||(this.extent_=\\\"Point\\\"===this.type_?ye(this.flatCoordinates_):we(this.flatCoordinates_,0,this.flatCoordinates_.length,this.stride_)),this.extent_}getFlatInteriorPoint(){if(!this.flatInteriorPoints_){const t=Se(this.getExtent());this.flatInteriorPoints_=Fs(this.flatCoordinates_,0,this.ends_,this.stride_,t,0)}return this.flatInteriorPoints_}getFlatInteriorPoints(){if(!this.flatInteriorPoints_){const t=function(t,e){const i=[];let n,r=0,s=0;for(let o=0,a=e.length;o<a;++o){const a=e[o],l=zs(t,r,a,2);if(void 0===n&&(n=l),l===n)i.push(e.slice(s,o+1));else{if(0===i.length)continue;i[i.length-1].push(e[s])}s=o+1,r=a}return i}(this.flatCoordinates_,this.ends_),e=function(t,e,i,n){const r=[];let s=[1/0,1/0,-1/0,-1/0];for(let o=0,a=i.length;o<a;++o){const a=i[o];s=we(t,e,a[0],n),r.push((s[0]+s[2])/2,(s[1]+s[3])/2),e=a[a.length-1]}return r}(this.flatCoordinates_,0,t,this.stride_);this.flatInteriorPoints_=function(t,e,i,n,r){let s=[];for(let o=0,a=i.length;o<a;++o){const a=i[o];s=Fs(t,e,a,n,r,2*o,s),e=a[a.length-1]}return s}(this.flatCoordinates_,0,t,this.stride_,e)}return this.flatInteriorPoints_}getFlatMidpoint(){return this.flatMidpoints_||(this.flatMidpoints_=xs(this.flatCoordinates_,0,this.flatCoordinates_.length,this.stride_,.5)),this.flatMidpoints_}getFlatMidpoints(){if(!this.flatMidpoints_){this.flatMidpoints_=[];const t=this.flatCoordinates_;let e=0;const n=this.ends_;for(let r=0,s=n.length;r<s;++r){const s=n[r],o=xs(t,e,s,this.stride_,.5);i(this.flatMidpoints_,o),e=s}}return this.flatMidpoints_}getId(){return this.id_}getOrientedFlatCoordinates(){return this.flatCoordinates_}getGeometry(){return this}getSimplifiedGeometry(t){return this}simplifyTransformed(t,e){return this}getProperties(){return this.properties_}getPropertiesInternal(){return this.properties_}getStride(){return this.stride_}getStyleFunction(){return this.styleFunction}getType(){return this.type_}transform(t){const e=(t=rs(t)).getExtent(),i=t.getWorldExtent();if(e&&i){const t=Ce(i)/Ce(e);$e(Gs,i[0],i[3],t,-t,0,0,0),Ae(this.flatCoordinates_,0,this.flatCoordinates_.length,this.stride_,Gs,this.flatCoordinates_)}}applyTransform(t){t(this.flatCoordinates_,this.flatCoordinates_,this.stride_)}clone(){return new Ns(this.type_,this.flatCoordinates_.slice(),this.ends_?.slice(),this.stride_,Object.assign({},this.properties_),this.id_)}getEnds(){return this.ends_}enableSimplifyTransformed(){return this.simplifyTransformed=Je((t,e)=>{if(t===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),e&&this.simplifiedGeometry_.applyTransform(e);const i=this.simplifiedGeometry_.getFlatCoordinates();let n;switch(this.type_){case\\\"LineString\\\":i.length=Es(i,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,t,i,0),n=[i.length];break;case\\\"MultiLineString\\\":n=[],i.length=function(t,e,i,n,r,s,o,a){for(let l=0,h=i.length;l<h;++l){const h=i[l];o=Es(t,e,h,n,r,s,o),a.push(o),e=h}return o}(i,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,t,i,0,n);break;case\\\"Polygon\\\":n=[],i.length=Ps(i,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(t),i,0,n)}return n&&(this.simplifiedGeometry_=new Ns(this.type_,i,n,this.stride_,this.properties_,this.id_)),this.squaredTolerance_=t,this.simplifiedGeometry_}),this}}function Xs(t){return Object.keys(t).reduce((e,i)=>e+(t[i].size||1),0)}Ns.prototype.getFlatCoordinates=Ns.prototype.getOrientedFlatCoordinates;const Ys={},Bs=new Ns(\\\"Point\\\",[0,0],[],2,Ys,\\\"dummy\\\"),Us=new TextDecoder;function js(t,e,i,n,r,s){const o=`prop_${t}`,a=i.findIndex(t=>t===o),l=i.slice(0,a).reduce((t,e)=>t+n[e].size,0),h=n[o].size;if(e===N){const t=r[l+1],e=r[l+2],i=s.slice(t,t+e);return Us.decode(i)}if(e===X){const t=(c=Array.from(r.slice(l,l+2)),[Math.min(Math.floor(c[0]/256)/255,1),Math.min(c[0]%256/255,1),Math.min(Math.floor(c[1]/256)/255,1),Math.min(c[1]%256/255,1)]);return t[0]*=255,t[1]*=255,t[2]*=255,t}var c;return h>1?Array.from(r.slice(l,l+h)):r[l]}function Vs(t,e,i,n,r){let s=t(i,1);if(s){s=Array.isArray(s)?s:[s];for(let t=0,o=s.length;t<o;t++){const o=s[t].getText();if(!o)continue;const a=o.getPlacement(),l=\\\"LineString\\\"===n.getType();\\\"line\\\"===a&&!l||\\\"line\\\"!==a&&l||(e.setTextStyle(o,r),e.drawText(n,i))}}}const qs=self;let Js=0;const Ks=new OffscreenCanvas(1,1),Hs=Ks.getContext(\\\"2d\\\"),Zs=new Map,Qs=Fe();function to(t,e,i,n,r,s){const o=n/2,a=r/2,l=1/e,h=-l,c=-t[0]+s,u=-t[1];return $e(Qs,o,a,l,h,-i,c,u)}qs.onmessage=t=>{const e=t.data;switch(e.type){case hr:{const t=(i=e.frameState,{...i,viewState:{...i.viewState,projection:rs(i.viewState.projection)}}),n=t.viewState,r=e.batchesToRender;Js&&cancelAnimationFrame(Js),Js=requestAnimationFrame(()=>{Js=0,t.size[0]!==Ks.width||t.size[1]!==Ks.height?(Ks.width=t.size[0],Ks.height=t.size[1]):Hs.clearRect(0,0,Ks.width,Ks.height);for(const i of r.values()){if(!Zs.has(i)){const t={type:hr,imageData:null,frameState:e.frameState,id:e.id};return void qs.postMessage(t)}const r=Zs.get(i);if(!r)continue;const s=to(n.center,n.resolution,n.rotation,Ks.width,Ks.height,0);Te(s,r.inverseTransform),r.executor.execute(Hs,t.size,s,t.viewState.rotation,!1)}const i=Ks.transferToImageBitmap(),s={type:hr,imageData:i,frameState:e.frameState,id:e.id};qs.postMessage(s,[i])});break}case ar:{const{polygonRenderInstructions:t,lineStringRenderInstructions:i,pointRenderInstructions:n,style:r,customAttributesSizes:s,renderInstructionsTransform:o,id:a,resolution:l}=e,h=1,c=l*o[0],u=Date.now().toString(),f=new Uint8Array(e.labelsArray),d=new un(1,[-1/0,-1/0,1/0,1/0],c,h),g=Object.keys(s).reduce((t,e)=>({...t,[e]:{size:s[e]}}),{}),p=tt();!function(t){function e(t){for(const e in t)e.startsWith(\\\"text-\\\")||\\\"z-index\\\"===e||delete t[e]}if(Array.isArray(t)){for(let i=0,n=t.length;i<n;i++){const n=t[i];if(\\\"style\\\"in n&&Array.isArray(n.style))for(let t=0,i=n.style.length;t<i;t++)e(n.style[t]);else e(\\\"style\\\"in n?n.style:n)}return t}e(t)}(r);const _=function(t,e){if(e=e??tt(),!Array.isArray(t))return Wn([t],e);const i=t.length;if(\\\"style\\\"in t[0]){const n=new Array(i);for(let e=0;e<i;++e){const i=t[e];if(!(\\\"style\\\"in i))throw new Error(\\\"Expected a list of rules with a style property\\\");n[e]=i}return $n(n,e)}return Wn(t,e)}(r,p);!function(t,e,i,n,r,s){const o=Object.keys(n),a=Xs(n),l={};let h=0;for(;h<t.length;){const c=new Float32Array(t.buffer,h*Float32Array.BYTES_PER_ELEMENT,a);h+=a;const u=t[h++];let f=0;const d=new Array(u);for(let e=0;e<u;e++)f+=t[h++],d[e]=2*f;const g=h+2*f,p=Array.from(new Float32Array(t.buffer,h*Float32Array.BYTES_PER_ELEMENT,2*f)),_=new Ws(p,\\\"XY\\\",d),m=Array.from(i.entries());for(let t=0;t<m.length;t++){const[i,r]=m[t];Ys[i]=js(i,r,o,n,c,e)}Vs(s,r,Bs,_,l),h=g}}(new Float32Array(t),f,p.properties,g,d,_),function(t,e,i,n,r,s){const o=Object.keys(n),a=Xs(n),l={};let h,c=0;for(;c<t.length;){const u=new Float32Array(t.buffer,c*Float32Array.BYTES_PER_ELEMENT,a);c+=a,h=t[c++];const f=Array.from(new Float32Array(t.buffer,c*Float32Array.BYTES_PER_ELEMENT,3*h)),d=new Os(f,\\\"XYM\\\"),g=Array.from(i.entries());for(let t=0;t<g.length;t++){const[i,r]=g[t];Ys[i]=js(i,r,o,n,u,e)}Vs(s,r,Bs,d,l),c+=3*h}}(new Float32Array(i),f,p.properties,g,d,_),function(t,e,i,n,r,s){const o=Object.keys(n),a=Xs(n),l={};let h=0;for(;h<t.length;){const c=[t.at(h),t.at(h+1)];h+=2;const u=new Float32Array(t.buffer,h*Float32Array.BYTES_PER_ELEMENT,a),f=new Rs(c,\\\"XY\\\"),d=Array.from(i.entries());for(let t=0;t<d.length;t++){const[i,r]=d[t];Ys[i]=js(i,r,o,n,u,e)}Vs(s,r,Bs,f,l),h+=a}}(new Float32Array(n),f,p.properties,g,d,_);const m=d.finish();if(0===m.instructions.length)Zs.set(u,null);else{const t=We(o),e=new Sn(c,h,!1,m);Zs.set(u,{inverseTransform:t,executor:e})}const y={type:ar,instructionsSetKey:u,id:a};qs.postMessage(y);break}case lr:{const{instructionsSetKey:t}=e;Zs.has(t)&&Zs.delete(t);break}}var i};\";\n          return new Worker(typeof Blob === 'undefined'\n            ? 'data:application/javascript;base64,' + Buffer.from(source, 'binary').toString('base64')\n            : URL.createObjectURL(new Blob([source], {type: 'application/javascript'})));\n        }\n      \n","/**\n * @module ol/render/webgl/constants\n */\n\n/**\n * @enum {string}\n */\nexport const WebGLWorkerMessageType = {\n  GENERATE_POLYGON_BUFFERS: 'GENERATE_POLYGON_BUFFERS',\n  GENERATE_POINT_BUFFERS: 'GENERATE_POINT_BUFFERS',\n  GENERATE_LINE_STRING_BUFFERS: 'GENERATE_LINE_STRING_BUFFERS',\n};\n\n/**\n * @enum {string}\n */\nexport const TextOverlayWorkerMessageType = {\n  BUILD_INSTRUCTIONS: 'BUILD_INSTRUCTIONS',\n  DISPOSE_INSTRUCTIONS: 'DISPOSE_INSTRUCTIONS',\n  RENDER: 'RENDER',\n};\n\n/**\n * @typedef {Object} WebGLWorkerGenerateBuffersMessage\n * This message will trigger the generation of a vertex and an index buffer based on the given render instructions.\n * When the buffers are generated, the worked will send a message of the same type to the main thread, with\n * the generated buffers in it.\n * Note that any addition properties present in the message *will* be sent back to the main thread.\n * @property {WebGLWorkerMessageType} type Message type\n * @property {ArrayBufferLike} renderInstructions render instructions raw binary buffer.\n * @property {number} [customAttributesSize] Amount of hit detection + custom attributes count in the render instructions.\n * @property {ArrayBuffer} [indicesBuffer] Indices array raw binary buffer (sent by the worker).\n * @property {ArrayBuffer} [vertexAttributesBuffer] Vertex attributes array raw binary buffer (sent by the worker).\n * @property {ArrayBuffer} [instanceAttributesBuffer] Instance attributes array raw binary buffer (sent by the worker).\n * @property {import(\"../../transform.js\").Transform} [renderInstructionsTransform] Transformation matrix used to project the instructions coordinates\n * @property {number} [id] Message id; will be used both in request and response as a means of identification\n */\n\n/**\n * @typedef {Object} TextOverlayWorkerMessage\n * These messages are used to prepare text rendering on the text overlay worker:\n * - BUILD_INSTRUCTIONS is used to transform render instructions into canvas text rendering batches\n * - RENDER is used to actually draw all current text rendering batches on the offscreen canvas; the render list is cleared after each render\n * @property {TextOverlayWorkerMessageType} type Message type\n * @property {ArrayBuffer} [polygonRenderInstructions] Polygon render instructions array buffer\n * @property {ArrayBuffer} [lineStringRenderInstructions] Line string render instructions array buffer\n * @property {ArrayBuffer} [pointRenderInstructions] Point render instructions array buffer\n * @property {ImageBitmap} [imageData] Rendered canvas\n * @property {import(\"../../Map.js\").FrameState} [frameState] Frame state of the rendered image\n * @property {string} [instructionsSetKey] Key corresponding to a generated text instructions set\n * @property {import('../../style/flat.js').FlatStyleLike} [style] Flat style\n * @property {Uint8Array} [labelsArray] Labels array\n * @property {Object<string, number>} [customAttributesSizes] Size of each custom attribute (by name)\n * @property {import(\"../../transform.js\").Transform} [renderInstructionsTransform] Transformation matrix used to project the instructions coordinates\n * @property {number} [resolution] View resolution, required for the BUILD_INSTRUCTIONS step\n * @property {number} [id] Message id; will be used both in request and response as a means of identification\n */\n","\n        export function create() {\n          const source = \"const t=new Set;let e=!1;function n(e,n,i=2){const f=n&&n.length,u=f?n[0]*i:e.length;t.size&&t.clear();let s=r(e,0,u,i,!0);const v=[];if(!s||s.next===s.prev)return v;let b=0,A=0,m=0;if(f&&(s=function(e,n,x,i){const f=[];for(let o=0,x=n.length;o<x;o++){const u=r(e,n[o]*i,o<x-1?n[o+1]*i:e.length,i,!1);u===u.next&&t.add(u),f.push(B(u))}f.sort(l),function(t,e){const n=Math.ceil((t+2*e)/y)+e+2;h.length<4*n&&(h=new Float64Array(4*n));p=0}(e.length/i,n.length),M(x,x),c=!0;for(let t=0;t<f.length;t++)x=a(f[t],x);return c=!1,o(x)}(e,n,s,i)),e.length>80*i){b=e[0],A=e[1];let t=b,n=A;for(let r=i;r<u;r+=i){const o=e[r],x=e[r+1];o<b&&(b=o),x<A&&(A=x),o>t&&(t=o),x>n&&(n=x)}m=Math.max(t-b,n-A),m=0!==m?32767/m:0}return x(s,v,b,A,m),v}function r(t,e,n,r,o){let x=null;if(o===function(t,e,n,r){let o=0;for(let x=e,i=n-r;x<n;x+=r)o+=(t[i]-t[x])*(t[x+1]+t[i+1]),i=x;return o}(t,e,n,r)>0)for(let o=e;o<n;o+=r)x=G(o/r|0,t[o],t[o+1],x);else for(let o=n-r;o>=e;o-=r)x=G(o/r|0,t[o],t[o+1],x);return x&&N(x,x.next)&&(k(x),x=x.next),x}function o(n,r=n){const o=r===n;let x,i=n;do{x=!1,i===i.next||0!==t.size&&t.has(i)||!N(i,i.next)&&0!==S(i.prev,i,i.next)?(o||i!==r)&&(i=i.next,x=!o):((o||i===r)&&(r=i.prev),e=!0,k(i),i=i.prev,x=!0)}while(x||i!==r);return r}function x(t,n,r,x,c){c&&function(t,e,n,r){let o=t,x=0;do{o.z=I(o.x,o.y,e,n,r),w[x++]=o,o=o.next}while(o!==t);!function(t){if(t<=32){for(let e=1;e<t;e++){const t=w[e],n=t.z;let r=e-1;for(;r>=0&&w[r].z>n;)w[r+1]=w[r],r--;w[r+1]=t}return}F.length<t&&(F=new Uint32Array(t),Z=new Uint32Array(t),d=new Array(t));for(let e=0;e<t;e++)F[e]=w[e].z;E(t,w,F,d,Z,0),E(t,d,Z,w,F,8),E(t,w,F,d,Z,16),E(t,d,Z,w,F,24)}(x);let i=null;for(let t=0;t<x;t++){const e=w[t];e.prevZ=i,i&&(i.nextZ=e),i=e}i.nextZ=null}(t,r,x,c);let l=t,a=!1;for(;t.prev!==t.next;){const y=t.prev,h=t.next;if(S(y,t,h)<0&&(c?f(t,r,x,c):i(t)))n.push(y.i,t.i,h.i),k(t),t=h,l=h;else if((t=h)===l){if(e=!1,t=o(t),e){l=t;continue}if(!a){l=t=u(t,n),a=!0;continue}s(t,n,r,x,c);break}}}function i(t){const e=t.prev,n=t,r=t.next,o=e.x,x=n.x,i=r.x,f=e.y,u=n.y,s=r.y,c=Math.min(o,x,i),l=Math.min(f,u,s),a=Math.max(o,x,i),y=Math.max(f,u,s);let h=r.next;for(;h!==e;){if(h.x>=c&&h.x<=a&&h.y>=l&&h.y<=y&&(o!==h.x||f!==h.y)&&U(o,f,x,u,i,s,h.x,h.y)&&S(h.prev,h,h.next)>=0)return!1;h=h.next}return!0}function f(t,e,n,r){const o=t.prev,x=t,i=t.next,f=o.x,u=x.x,s=i.x,c=o.y,l=x.y,a=i.y,y=Math.min(f,u,s),h=Math.min(c,l,a),p=Math.max(f,u,s),v=Math.max(c,l,a),b=I(y,h,e,n,r),M=I(p,v,e,n,r);let A=t.prevZ;for(;A&&A.z>=b;){if(A.x>=y&&A.x<=p&&A.y>=h&&A.y<=v&&A!==i&&(f!==A.x||c!==A.y)&&U(f,c,u,l,s,a,A.x,A.y)&&S(A.prev,A,A.next)>=0)return!1;A=A.prevZ}let m=t.nextZ;for(;m&&m.z<=M;){if(m.x>=y&&m.x<=p&&m.y>=h&&m.y<=v&&m!==i&&(f!==m.x||c!==m.y)&&U(f,c,u,l,s,a,m.x,m.y)&&S(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function u(t,e){let n=t,r=!1;do{const o=n.prev,x=n.next.next;R(o,n,n.next,x,!1)&&_(o,x)&&_(x,o)&&(e.push(o.i,n.i,x.i),k(n),k(n.next),n=t=x,r=!0),n=n.next}while(n!==t);return r?o(n):n}function s(t,e,n,r,i){let f=t;do{let t=f.next.next;for(;t!==f.prev;){if(f.i!==t.i&&P(f,t)){let u=O(f,t);return f=o(f,f.next),u=o(u,u.next),x(f,e,n,r,i),void x(u,e,n,r,i)}t=t.next}f=f.next}while(f!==t)}let c=!1;function l(t,e){return t.x-e.x||t.y-e.y||(t.next.y-t.y)/(t.next.x-t.x)-(e.next.y-e.y)/(e.next.x-e.x)}function a(t,e){const n=function(t,e){let n=e;const r=t.x,o=t.y;let x,i=-1/0;if(N(t,n))return n;for(let e=0,f=0;e<p;e++,f+=4){if(o<h[f+1]||o>h[f+3]||h[f]>r||h[f+2]<=i)continue;const u=A(e);n=m(e);do{if(n.prev.next===n){if(N(t,n.next))return n.next;if(o<=n.y&&o>=n.next.y&&n.next.y!==n.y){const t=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=r&&t>i&&(i=t,x=n.x<n.next.x?n:n.next,t===r))return x}}n=n.next}while(n!==u)}if(!x)return null;const f=x.x,u=x.y,s=Math.min(o,u),c=Math.max(o,u);let l=1/0;for(let e=0,a=0;e<p;e++,a+=4){if(h[a+2]<f||h[a]>r||h[a+3]<s||h[a+1]>c)continue;const y=A(e);n=m(e);do{if(n.prev.next===n&&r>=n.x&&n.x>=f&&r!==n.x&&U(o<u?r:i,o,f,u,o<u?i:r,o,n.x,n.y)){const e=Math.abs(o-n.y)/(r-n.x);(_(n,t)||n.y===o&&n.next.y===o&&n.next.x>r)&&(e<l||e===l&&(n.x>x.x||n.x===x.x&&g(x,n)))&&(x=n,l=e)}n=n.next}while(n!==y)}return x}(t,e);if(!n)return e;const r=O(n,t);return M(n,r.next.next),o(r,r.next),o(n,n.next)}const y=16;let h=new Float64Array(0),p=0;const v=[],b=[];function M(t,e){let n=t;do{const t=p++;v[t]=n;let r=1/0,o=1/0,x=-1/0,i=-1/0,f=0;do{const e=n.next;n.z=t,n.x<r&&(r=n.x),n.x>x&&(x=n.x),n.y<o&&(o=n.y),n.y>i&&(i=n.y),e.x<r&&(r=e.x),e.x>x&&(x=e.x),e.y<o&&(o=e.y),e.y>i&&(i=e.y),n=e}while(++f<y&&n!==e);b[t]=n;const u=4*t;h[u]=r,h[u+1]=o,h[u+2]=x,h[u+3]=i}while(n!==e)}function A(t){let e=b[t];for(;e.prev.next!==e;)e=e.next;return b[t]=e,e}function m(t){let e=v[t];for(;e.prev.next!==e;)e=e.next;return v[t]=e,e}function g(t,e){return S(t.prev,t,e.prev)<0&&S(e.next,t,t.next)<0}const w=[];let d=[],F=new Uint32Array(0),Z=new Uint32Array(0);const z=new Uint32Array(256);function E(t,e,n,r,o,x){z.fill(0);for(let e=0;e<t;e++)z[n[e]>>>x&255]++;let i=0;for(let t=0;t<256;t++){const e=z[t];z[t]=i,i+=e}for(let i=0;i<t;i++){const t=n[i],f=z[t>>>x&255]++;r[f]=e[i],o[f]=t}}function I(t,e,n,r,o){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-n)*o|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-r)*o|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function B(t){let e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function U(t,e,n,r,o,x,i,f){return(o-i)*(e-f)>=(t-i)*(x-f)&&(t-i)*(r-f)>=(n-i)*(e-f)&&(n-i)*(x-f)>=(o-i)*(r-f)}function P(t,e){const n=N(t,e)&&S(t.prev,t,t.next)>0&&S(e.prev,e,e.next)>0;return t.next.i!==e.i&&(n||_(t,e)&&_(e,t)&&(0!==S(t.prev,t,e.prev)||0!==S(t,e.prev,e)))&&!function(t,e){const n=Math.min(t.x,e.x),r=Math.max(t.x,e.x),o=Math.min(t.y,e.y),x=Math.max(t.y,e.y);let i=t;do{const f=i.next;if(i.x>r&&f.x>r||i.x<n&&f.x<n||i.y>x&&f.y>x||i.y<o&&f.y<o)i=f;else{if(i.i!==t.i&&f.i!==t.i&&i.i!==e.i&&f.i!==e.i&&R(i,f,t,e))return!0;i=f}}while(i!==t);return!1}(t,e)&&(n||function(t,e){let n=t,r=!1;const o=(t.x+e.x)/2,x=(t.y+e.y)/2;do{const t=n.next;n.y>x!=t.y>x&&o<(t.x-n.x)*(x-n.y)/(t.y-n.y)+n.x&&(r=!r),n=t}while(n!==t);return r}(t,e))}function S(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function N(t,e){return t.x===e.x&&t.y===e.y}function R(t,e,n,r,o=!0){const x=S(t,e,n),i=S(t,e,r),f=S(n,r,t),u=S(n,r,e);return(x>0&&i<0||x<0&&i>0)&&(f>0&&u<0||f<0&&u>0)||!!o&&(!(0!==x||!T(t,n,e))||(!(0!==i||!T(t,r,e))||(!(0!==f||!T(n,t,r))||!(0!==u||!T(n,e,r)))))}function T(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function _(t,e){return S(t.prev,t,t.next)<0?S(t,e,t.next)>=0&&S(t,t.prev,e)>=0:S(t,e,t.prev)<0||S(t,t.next,e)<0}function O(t,e){const n=j(t.i,t.x,t.y),r=j(e.i,e.x,e.y),o=t.next,x=e.prev;return t.next=e,e.prev=t,n.next=o,o.prev=n,r.next=n,n.prev=r,x.next=r,r.prev=x,r}function G(t,e,n,r){const o=j(t,e,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o}function k(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ),c&&function(t,e){const n=4*t.z;e.x<h[n]&&(h[n]=e.x),e.y<h[n+1]&&(h[n+1]=e.y),e.x>h[n+2]&&(h[n+2]=e.x),e.y>h[n+3]&&(h[n+3]=e.y)}(t.prev,t.next)}function j(t,e,n){return{i:t,x:e,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function q(t,e,n){const r=Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),o=[(e[0]-t[0])/r,(e[1]-t[1])/r],x=[-o[1],o[0]],i=Math.sqrt((n[0]-t[0])*(n[0]-t[0])+(n[1]-t[1])*(n[1]-t[1])),f=[(n[0]-t[0])/i,(n[1]-t[1])/i];let u=0===r||0===i?0:Math.acos((s=f[0]*o[0]+f[1]*o[1],c=-1,l=1,Math.min(Math.max(s,c),l)));var s,c,l;u=Math.max(u,1e-5);return f[0]*x[0]+f[1]*x[1]>0?u:2*Math.PI-u}const L=[1,0,0,1,0,0];function Y(t,e){const n=e[0],r=e[1];return e[0]=t[0]*n+t[2]*r+t[4],e[1]=t[1]*n+t[3]*r+t[5],e}function C(t,e){const n=(r=e)[0]*r[3]-r[1]*r[2];var r;!function(t,e){if(!t)throw new Error(e)}(0!==n,\\\"Transformation matrix cannot be inverted\\\");const o=e[0],x=e[1],i=e[2],f=e[3],u=e[4],s=e[5];return t[0]=f/n,t[1]=-x/n,t[2]=-i/n,t[3]=o/n,t[4]=(i*s-f*u)/n,t[5]=-(o*s-x*u)/n,t}new Array(6);const D=[],H={vertexAttributesPosition:0,instanceAttributesPosition:0,indicesPosition:0};function J(t,e,n,r,o){const x=t[e++],i=t[e++],f=D;f.length=r;for(let n=0;n<f.length;n++)f[n]=t[e+n];let u=o?o.instanceAttributesPosition:0;return n[u++]=x,n[u++]=i,f.length&&(n.set(f,u),u+=f.length),H.instanceAttributesPosition=u,H}function K(t,e,n,r,o,x,i,f,u,s){const c=[t[e],t[e+1]],l=[t[n],t[n+1]],a=t[e+2],y=t[n+2],h=Y(f,[...c]),p=Y(f,[...l]);let v=-1,b=-1,M=s;const A=null!==o;if(null!==r){v=q(h,p,Y(f,[...[t[r],t[r+1]]])),Math.cos(v)<=.985&&(M+=Math.tan((v-Math.PI)/2))}if(A){b=q(p,h,Y(f,[...[t[o],t[o+1]]])),Math.cos(b)<=.985&&(M+=Math.tan((Math.PI-b)/2))}const m=Math.pow(2,24),g=u%m,w=Math.floor(u/m)*m;return x.push(c[0],c[1],a,l[0],l[1],y,v,b,g,w,s),x.push(...i),{length:u+Math.sqrt((p[0]-h[0])*(p[0]-h[0])+(p[1]-h[1])*(p[1]-h[1])),angle:M}}function Q(t,e,r,o,x){const i=2+x;let f=e;const u=t.slice(f,f+x);f+=x;const s=t[f++];let c=0;const l=new Array(s-1);for(let e=0;e<s;e++)c+=t[f++],e<s-1&&(l[e]=c);const a=t.slice(f,f+2*c),y=n(a,l,2);for(let t=0;t<y.length;t++)o.push(y[t]+r.length/i);for(let t=0;t<a.length;t+=2)r.push(a[t],a[t+1],...u);return f+2*c}const V=\\\"GENERATE_POLYGON_BUFFERS\\\",W=\\\"GENERATE_POINT_BUFFERS\\\",X=\\\"GENERATE_LINE_STRING_BUFFERS\\\",$=self;$.onmessage=t=>{const e=t.data;switch(e.type){case W:{const t=2,n=2,r=e.customAttributesSize,o=n+r,x=new Float32Array(e.renderInstructions),i=x.length/o*(t+r),f=Uint32Array.from([0,1,3,1,2,3]),u=Float32Array.from([-1,-1,1,-1,1,1,-1,1]),s=new Float32Array(i);let c;for(let t=0;t<x.length;t+=o)c=J(x,t,s,r,c);const l=Object.assign({indicesBuffer:f.buffer,vertexAttributesBuffer:u.buffer,instanceAttributesBuffer:s.buffer,renderInstructions:x.buffer},e);$.postMessage(l,[u.buffer,s.buffer,f.buffer,x.buffer]);break}case X:{const t=[],n=e.customAttributesSize,r=3,o=new Float32Array(e.renderInstructions);let x=0;const i=e.renderInstructionsTransform,f=L.slice(0);let u,s;for(C(f,i);x<o.length;){s=Array.from(o.slice(x,x+n)),x+=n,u=o[x++];const e=x,i=x+(u-1)*r,c=o[e]===o[i]&&o[e+1]===o[i+1];let l=0,a=0;for(let n=0;n<u-1;n++){let y=null;n>0?y=x+(n-1)*r:c&&(y=i-r);let h=null;n<u-2?h=x+(n+2)*r:c&&(h=e+r);const p=K(o,x+n*r,x+(n+1)*r,y,h,t,s,f,l,a);l=p.length,a=p.angle}x+=u*r}const c=Uint32Array.from([0,1,3,1,2,3]),l=Float32Array.from([-1,-1,1,-1,1,1,-1,1]),a=Float32Array.from(t),y=Object.assign({indicesBuffer:c.buffer,vertexAttributesBuffer:l.buffer,instanceAttributesBuffer:a.buffer,renderInstructions:o.buffer},e);$.postMessage(y,[l.buffer,a.buffer,c.buffer,o.buffer]);break}case V:{const t=[],n=[],r=e.customAttributesSize,o=new Float32Array(e.renderInstructions);let x=0;for(;x<o.length;)x=Q(o,x,t,n,r);const i=Uint32Array.from(n),f=Float32Array.from(t),u=Float32Array.from([]),s=Object.assign({indicesBuffer:i.buffer,vertexAttributesBuffer:f.buffer,instanceAttributesBuffer:u.buffer,renderInstructions:o.buffer},e);$.postMessage(s,[f.buffer,u.buffer,i.buffer,o.buffer]);break}}};\";\n          return new Worker(typeof Blob === 'undefined'\n            ? 'data:application/javascript;base64,' + Buffer.from(source, 'binary').toString('base64')\n            : URL.createObjectURL(new Blob([source], {type: 'application/javascript'})));\n        }\n      \n","/**\n * A wrapper class to simplify rendering to a texture instead of the final canvas\n * @module ol/webgl/RenderTarget\n */\nimport {equals} from '../array.js';\n\n// for pixel color reading\nconst tmpArray4 = new Uint8Array(4);\n\n/**\n * @classdesc\n * This class is a wrapper around the association of both a `WebGLTexture` and a `WebGLFramebuffer` instances,\n * simplifying initialization and binding for rendering.\n */\nclass WebGLRenderTarget {\n  /**\n   * @param {import(\"./Helper.js\").default} helper WebGL helper; mandatory.\n   * @param {Array<number>} [size] Expected size of the render target texture; note: this can be changed later on.\n   */\n  constructor(helper, size) {\n    /**\n     * @private\n     * @type {import(\"./Helper.js\").default}\n     */\n    this.helper_ = helper;\n    const gl = helper.getGL();\n\n    /**\n     * @private\n     * @type {WebGLTexture}\n     */\n    this.texture_ = gl.createTexture();\n\n    /**\n     * @private\n     * @type {WebGLFramebuffer}\n     */\n    this.framebuffer_ = gl.createFramebuffer();\n\n    /**\n     * @private\n     * @type {WebGLRenderbuffer}\n     */\n    this.depthbuffer_ = gl.createRenderbuffer();\n\n    /**\n     * @type {Array<number>}\n     * @private\n     */\n    this.size_ = size || [1, 1];\n\n    /**\n     * @type {Uint8Array}\n     * @private\n     */\n    this.data_ = new Uint8Array(0);\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.dataCacheDirty_ = true;\n\n    this.updateSize_();\n  }\n\n  /**\n   * Changes the size of the render target texture. Note: will do nothing if the size\n   * is already the same.\n   * @param {Array<number>} size Expected size of the render target texture\n   */\n  setSize(size) {\n    if (equals(size, this.size_)) {\n      return;\n    }\n    this.size_[0] = size[0];\n    this.size_[1] = size[1];\n    this.updateSize_();\n  }\n\n  /**\n   * Returns the size of the render target texture\n   * @return {Array<number>} Size of the render target texture\n   */\n  getSize() {\n    return this.size_;\n  }\n\n  /**\n   * This will cause following calls to `#readAll` or `#readPixel` to download the content of the\n   * render target into memory, which is an expensive operation.\n   * This content will be kept in cache but should be cleared after each new render.\n   */\n  clearCachedData() {\n    this.dataCacheDirty_ = true;\n  }\n\n  /**\n   * Returns the full content of the frame buffer as a series of r, g, b, a components\n   * in the 0-255 range (unsigned byte).\n   * @return {Uint8Array} Integer array of color values\n   */\n  readAll() {\n    if (this.dataCacheDirty_) {\n      const size = this.size_;\n      const gl = this.helper_.getGL();\n\n      gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer_);\n      gl.readPixels(\n        0,\n        0,\n        size[0],\n        size[1],\n        gl.RGBA,\n        gl.UNSIGNED_BYTE,\n        this.data_,\n      );\n      this.dataCacheDirty_ = false;\n    }\n    return this.data_;\n  }\n\n  /**\n   * Reads one pixel of the frame buffer as an array of r, g, b, a components\n   * in the 0-255 range (unsigned byte).\n   * If x and/or y are outside of existing data, an array filled with 0 is returned.\n   * @param {number} x Pixel coordinate\n   * @param {number} y Pixel coordinate\n   * @return {Uint8Array} Integer array with one color value (4 components)\n   */\n  readPixel(x, y) {\n    if (x < 0 || y < 0 || x > this.size_[0] || y >= this.size_[1]) {\n      tmpArray4[0] = 0;\n      tmpArray4[1] = 0;\n      tmpArray4[2] = 0;\n      tmpArray4[3] = 0;\n      return tmpArray4;\n    }\n\n    this.readAll();\n    const index =\n      Math.floor(x) + (this.size_[1] - Math.floor(y) - 1) * this.size_[0];\n    tmpArray4[0] = this.data_[index * 4];\n    tmpArray4[1] = this.data_[index * 4 + 1];\n    tmpArray4[2] = this.data_[index * 4 + 2];\n    tmpArray4[3] = this.data_[index * 4 + 3];\n    return tmpArray4;\n  }\n\n  /**\n   * @return {WebGLTexture} Texture to render to\n   */\n  getTexture() {\n    return this.texture_;\n  }\n\n  /**\n   * @return {WebGLFramebuffer} Frame buffer of the render target\n   */\n  getFramebuffer() {\n    return this.framebuffer_;\n  }\n\n  /**\n   * @return {WebGLRenderbuffer} Depth buffer of the render target\n   */\n  getDepthbuffer() {\n    return this.depthbuffer_;\n  }\n\n  /**\n   * @private\n   */\n  updateSize_() {\n    const size = this.size_;\n    const gl = this.helper_.getGL();\n\n    this.texture_ = this.helper_.createTexture(size, null, this.texture_);\n\n    gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer_);\n    gl.viewport(0, 0, size[0], size[1]);\n    gl.framebufferTexture2D(\n      gl.FRAMEBUFFER,\n      gl.COLOR_ATTACHMENT0,\n      gl.TEXTURE_2D,\n      this.texture_,\n      0,\n    );\n\n    gl.bindRenderbuffer(gl.RENDERBUFFER, this.depthbuffer_);\n    gl.renderbufferStorage(\n      gl.RENDERBUFFER,\n      gl.DEPTH_COMPONENT16,\n      size[0],\n      size[1],\n    );\n    gl.framebufferRenderbuffer(\n      gl.FRAMEBUFFER,\n      gl.DEPTH_ATTACHMENT,\n      gl.RENDERBUFFER,\n      this.depthbuffer_,\n    );\n\n    this.data_ = new Uint8Array(size[0] * size[1] * 4);\n  }\n}\n\nexport default WebGLRenderTarget;\n","/**\n * @module ol/renderer/webgl/vectorUtil\n */\n\nimport {getHighPart, getLowPart} from '../../render/webgl/float64Util.js';\nimport {\n  apply as applyTransform,\n  compose as composeTransform,\n  create as createTransform,\n  makeInverse as makeInverseTransform,\n  multiply as multiplyTransform,\n  setFromArray as setFromTransform,\n} from '../../transform.js';\nimport {\n  create as createMat4,\n  fromTransform as mat4FromTransform,\n} from '../../vec/mat4.js';\nimport {DefaultUniform} from '../../webgl/Helper.js';\n\nexport const VectorUniforms = {\n  // the patterns origin is computed on the CPU; it is expressed in the same coordinate system as the geometries rendered,\n  // except the rotation which is left to 0 in order to efficiently compute pattern offsets without involving sin/cos\n  PATTERN_ORIGIN_X_DOUBLE: 'u_df_patternOriginX',\n  PATTERN_ORIGIN_Y_DOUBLE: 'u_df_patternOriginY',\n\n  // patterns are scaled slightly up/down to match zoom levels; this is computed on the CPU for better precision and passed as a double float\n  PATTERN_SCALE_RATIO_DOUBLE: 'u_df_patternScaleRatio',\n\n  // this is used in double-float arithmetics to prevent precision-handling logic from being compiled out\n  ONE: 'u_one',\n};\n\nconst tmpCoords = [0, 0];\nconst tmpCoords2 = [0, 0];\nconst tmpTransform = createTransform();\nconst tmpMat4 = createMat4();\n\n/**\n * Applies uniforms used in vector rendering\n * @param {import('../../webgl/Helper.js').default} helper Helper\n * @param {import('../../transform.js').Transform} worldToViewTransform Transform\n * @param {import('../../transform.js').Transform} geometryInvertTransform Transform.\n * @param {import('../../Map.js').FrameState} frameState Frame state.\n */\nexport function applyVectorUniforms(\n  helper,\n  worldToViewTransform,\n  geometryInvertTransform,\n  frameState,\n) {\n  // world to screen matrix\n  setFromTransform(tmpTransform, worldToViewTransform);\n  multiplyTransform(tmpTransform, geometryInvertTransform);\n  helper.setUniformMatrixValue(\n    DefaultUniform.PROJECTION_MATRIX,\n    mat4FromTransform(tmpMat4, tmpTransform),\n  );\n\n  // screen to world matrix\n  makeInverseTransform(tmpTransform, tmpTransform);\n  helper.setUniformMatrixValue(\n    DefaultUniform.INVERT_PROJECTION_MATRIX,\n    mat4FromTransform(tmpMat4, tmpTransform),\n  );\n\n  // pattern origin: compute pixel position of world [0,0] in pixel coordinates _without rotation_\n  // these coordinates will be given as double-floats to the shader to avoid float32 precision loss\n  // (see https://github.com/openlayers/openlayers/issues/16705)\n  tmpCoords[0] = 0;\n  tmpCoords[1] = 0;\n\n  // compute & apply the transformation from world to pixel (without rotation)\n  const size = frameState.size;\n  const resolution = frameState.viewState.resolution;\n  const center = frameState.viewState.center;\n  composeTransform(\n    tmpTransform,\n    size[0] / 2,\n    size[1] / 2,\n    1 / resolution,\n    1 / resolution,\n    0,\n    -center[0],\n    -center[1],\n  );\n  applyTransform(tmpTransform, tmpCoords);\n\n  // set uniforms\n  tmpCoords2[0] = getHighPart(tmpCoords[0]);\n  tmpCoords2[1] = getLowPart(tmpCoords[0]);\n  helper.setUniformFloatVec2(\n    VectorUniforms.PATTERN_ORIGIN_X_DOUBLE,\n    tmpCoords2,\n  );\n  tmpCoords2[0] = getHighPart(tmpCoords[1]);\n  tmpCoords2[1] = getLowPart(tmpCoords[1]);\n  helper.setUniformFloatVec2(\n    VectorUniforms.PATTERN_ORIGIN_Y_DOUBLE,\n    tmpCoords2,\n  );\n\n  // we're also computing the scale ratio of the pattern so that we don't encounter\n  // precision issues on the GPU\n  const scaleRatio = Math.pow(2, ((frameState.viewState.zoom + 0.5) % 1) - 0.5);\n  tmpCoords[0] = getHighPart(scaleRatio);\n  tmpCoords[1] = getLowPart(scaleRatio);\n  helper.setUniformFloatVec2(\n    VectorUniforms.PATTERN_SCALE_RATIO_DOUBLE,\n    tmpCoords,\n  );\n}\n","/**\n * @module ol/renderer/webgl/VectorLayer\n */\nimport ViewHint from '../../ViewHint.js';\nimport {assert} from '../../asserts.js';\nimport {listen, unlistenByKey} from '../../events.js';\nimport {buffer, createEmpty, equals} from '../../extent.js';\nimport BaseVector from '../../layer/BaseVector.js';\nimport {\n  getTransformFromProjections,\n  getUserProjection,\n  toUserExtent,\n  toUserResolution,\n} from '../../proj.js';\nimport MixedGeometryBatch from '../../render/webgl/MixedGeometryBatch.js';\nimport VectorStyleRenderer, {\n  toFlatStyleLike,\n} from '../../render/webgl/VectorStyleRenderer.js';\nimport {colorDecodeId} from '../../render/webgl/encodeUtil.js';\nimport {\n  createPostProcessDefinition,\n  hasTextStyle,\n  TextUniforms,\n} from '../../render/webgl/textUtil.js';\nimport VectorEventType from '../../source/VectorEventType.js';\nimport {\n  apply as applyTransform,\n  create as createTransform,\n  translate as translateTransform,\n} from '../../transform.js';\nimport {DefaultUniform} from '../../webgl/Helper.js';\nimport WebGLRenderTarget from '../../webgl/RenderTarget.js';\nimport WebGLLayerRenderer from './Layer.js';\nimport {applyVectorUniforms, VectorUniforms} from './vectorUtil.js';\nimport {getWorldParameters} from './worldUtil.js';\n\nexport const Uniforms = {\n  ...DefaultUniform,\n  ...VectorUniforms,\n  ...TextUniforms,\n  RENDER_EXTENT: 'u_renderExtent', // intersection of layer, source, and view extent\n  GLOBAL_ALPHA: 'u_globalAlpha',\n};\n\n/**\n * @typedef {import('../../render/webgl/VectorStyleRenderer.js').StyleShaders} StyleShaders\n */\n/**\n * @typedef {import('../../style/flat.js').FlatStyleLike | Array<StyleShaders> | StyleShaders} LayerStyle\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the canvas element.\n * @property {LayerStyle} style Flat vector style; also accepts shaders\n * @property {Object<string, number|Array<number>|string|boolean>} variables Style variables\n * @property {boolean} [disableHitDetection=false] Setting this to true will provide a slight performance boost, but will\n * prevent all hit detection on the layer.\n * @property {Array<import(\"./Layer.js\").PostProcessesOptions>} [postProcesses] Post-processes definitions\n */\n\n/**\n * @classdesc\n * Experimental WebGL vector renderer. Supports polygons, lines and points:\n *  Polygons are broken down into triangles\n *  Lines are rendered as strips of quads\n *  Points are rendered as quads\n *\n * You need to provide vertex and fragment shaders as well as custom attributes for each type of geometry. All shaders\n * can access the uniforms in the {@link module:ol/webgl/Helper~DefaultUniform} enum.\n * The vertex shaders can access the following attributes depending on the geometry type:\n *  For polygons: {@link module:ol/render/webgl/PolygonBatchRenderer~Attributes}\n *  For line strings: {@link module:ol/render/webgl/LineStringBatchRenderer~Attributes}\n *  For points: {@link module:ol/render/webgl/PointBatchRenderer~Attributes}\n *\n * Please note that the fragment shaders output should have premultiplied alpha, otherwise visual anomalies may occur.\n *\n * Note: this uses {@link module:ol/webgl/Helper~WebGLHelper} internally.\n */\nclass WebGLVectorLayerRenderer extends WebGLLayerRenderer {\n  /**\n   * @param {import(\"../../layer/Layer.js\").default} layer Layer.\n   * @param {Options} options Options.\n   */\n  constructor(layer, options) {\n    const uniforms = {\n      [Uniforms.RENDER_EXTENT]: [0, 0, 0, 0],\n      [Uniforms.GLOBAL_ALPHA]: 1,\n      [Uniforms.ONE]: 1,\n    };\n\n    super(layer, {\n      uniforms: uniforms,\n      postProcesses: options.postProcesses ?? [],\n    });\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.hitDetectionEnabled_ = !options.disableHitDetection;\n\n    /**\n     * @type {WebGLRenderTarget}\n     * @private\n     */\n    this.hitRenderTarget_;\n\n    /**\n     * @private\n     */\n    this.sourceRevision_ = -1;\n\n    /**\n     * @private\n     */\n    this.layerRevision_ = -1;\n\n    /**\n     * @private\n     */\n    this.skipNextTextRender_ = false;\n\n    /**\n     * @private\n     */\n    this.previousExtent_ = createEmpty();\n\n    /**\n     * This transform is updated on every frame and is the composition of:\n     * - invert of the world->screen transform that was used when rebuilding buffers (see `this.renderTransform_`)\n     * - current world->screen transform\n     * @type {import(\"../../transform.js\").Transform}\n     * @private\n     */\n    this.currentTransform_ = createTransform();\n\n    /**\n     * @type {import(\"../../transform.js\").Transform}\n     * @private\n     */\n    this.currentFrameStateTransform_ = createTransform();\n\n    /**\n     * @type {import('../../style/flat.js').StyleVariables}\n     * @private\n     */\n    this.styleVariables_ = {};\n\n    /**\n     * @type {LayerStyle}\n     * @private\n     */\n    this.style_ = [];\n\n    /**\n     * @private\n     */\n    this.hasText_ = false;\n\n    /**\n     * @type {VectorStyleRenderer}\n     * @public\n     */\n    this.styleRenderer_ = null;\n\n    /**\n     * @type {import('../../render/webgl/VectorStyleRenderer.js').WebGLBuffers}\n     * @private\n     */\n    this.buffers_ = null;\n\n    /**\n     * @private\n     */\n    this.batch_ = new MixedGeometryBatch();\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.initialFeaturesAdded_ = false;\n\n    /**\n     * @private\n     * @type {Array<import(\"../../events.js\").EventsKey|null>}\n     */\n    this.sourceListenKeys_ = null;\n\n    this.applyOptions_(options);\n  }\n\n  /**\n   * @private\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   */\n  addInitialFeatures_(frameState) {\n    const source = this.getLayer().getSource();\n    const userProjection = getUserProjection();\n    let projectionTransform;\n    if (userProjection) {\n      projectionTransform = getTransformFromProjections(\n        userProjection,\n        frameState.viewState.projection,\n      );\n    }\n    this.batch_.addFeatures(source.getFeatures(), projectionTransform);\n    this.sourceListenKeys_ = [\n      listen(\n        source,\n        VectorEventType.ADDFEATURE,\n        this.handleSourceFeatureAdded_.bind(this, projectionTransform),\n      ),\n      listen(\n        source,\n        VectorEventType.CHANGEFEATURE,\n        this.handleSourceFeatureChanged_.bind(this, projectionTransform),\n        this,\n      ),\n      listen(\n        source,\n        VectorEventType.REMOVEFEATURE,\n        this.handleSourceFeatureDelete_,\n        this,\n      ),\n      listen(\n        source,\n        VectorEventType.CLEAR,\n        this.handleSourceFeatureClear_,\n        this,\n      ),\n    ];\n  }\n\n  /**\n   * @param {Options} options Options.\n   * @private\n   */\n  applyOptions_(options) {\n    this.styleVariables_ = options.variables;\n    this.style_ = options.style;\n\n    // add text rendering post process if needed\n    const flatStyle = toFlatStyleLike(this.style_);\n    const newHasText = !!flatStyle && hasTextStyle(flatStyle);\n\n    if (newHasText && !this.hasText_) {\n      // add the text overlay post-process\n      this.setPostProcesses([\n        createPostProcessDefinition(\n          () => this.styleRenderer_.getTextOverlayCanvas(),\n          () => this.styleRenderer_.getTextOverlayFrameState(),\n        ),\n        ...this.getPostProcesses(),\n      ]);\n    } else if (!newHasText && this.hasText_) {\n      // remove the text overlay post-process (always in first place)\n      this.setPostProcesses(this.getPostProcesses().slice(1));\n    }\n\n    this.hasText_ = newHasText;\n  }\n\n  /**\n   * @private\n   */\n  createRenderers_() {\n    this.buffers_ = null;\n    this.styleRenderer_ = new VectorStyleRenderer(\n      this.style_,\n      this.styleVariables_,\n      this.helper,\n      this.hitDetectionEnabled_,\n    );\n  }\n\n  /**\n   * @override\n   */\n  reset(options) {\n    this.applyOptions_(options);\n    if (this.helper) {\n      this.createRenderers_();\n    }\n    super.reset(options);\n  }\n\n  /**\n   * @override\n   */\n  afterHelperCreated() {\n    if (this.styleRenderer_) {\n      // To reuse buffers\n      this.styleRenderer_.setHelper(this.helper, this.buffers_);\n    } else {\n      this.createRenderers_();\n    }\n\n    if (this.hitDetectionEnabled_) {\n      this.hitRenderTarget_ = new WebGLRenderTarget(this.helper);\n    }\n  }\n\n  /**\n   * @param {import(\"../../proj.js\").TransformFunction} projectionTransform Transform function.\n   * @param {import(\"../../source/Vector.js\").VectorSourceEvent} event Event.\n   * @private\n   */\n  handleSourceFeatureAdded_(projectionTransform, event) {\n    const feature = event.feature;\n    this.batch_.addFeature(feature, projectionTransform);\n  }\n\n  /**\n   * @param {import(\"../../proj.js\").TransformFunction} projectionTransform Transform function.\n   * @param {import(\"../../source/Vector.js\").VectorSourceEvent} event Event.\n   * @private\n   */\n  handleSourceFeatureChanged_(projectionTransform, event) {\n    const feature = event.feature;\n    this.batch_.changeFeature(feature, projectionTransform);\n  }\n\n  /**\n   * @param {import(\"../../source/Vector.js\").VectorSourceEvent} event Event.\n   * @private\n   */\n  handleSourceFeatureDelete_(event) {\n    const feature = event.feature;\n    this.batch_.removeFeature(feature);\n  }\n\n  /**\n   * @private\n   */\n  handleSourceFeatureClear_() {\n    this.batch_.clear();\n  }\n\n  /**\n   * @param {import(\"../../transform.js\").Transform} batchInvertTransform Inverse of the transformation in which geometries are expressed\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @private\n   */\n  applyUniforms_(batchInvertTransform, frameState) {\n    applyVectorUniforms(\n      this.helper,\n      this.currentFrameStateTransform_,\n      batchInvertTransform,\n      frameState,\n    );\n  }\n\n  /**\n   * Render the layer.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {HTMLElement} The rendered element.\n   * @override\n   */\n  renderFrame(frameState) {\n    const gl = this.helper.getGL();\n    this.preRender(gl, frameState);\n\n    const layer = this.getLayer();\n\n    const [startWorld, endWorld, worldWidth] = getWorldParameters(\n      frameState,\n      layer,\n    );\n\n    // draw the normal canvas\n    this.helper.prepareDraw(frameState);\n    this.renderWorlds(frameState, false, startWorld, endWorld, worldWidth);\n\n    if (this.hasText_) {\n      this.styleRenderer_.finalizeTextRender(frameState).then(() => {\n        if (this.skipNextTextRender_) {\n          this.skipNextTextRender_ = false;\n          return;\n        }\n        // asking for a new render of the layer because the text overlay is now ready to be drawn;\n        // next time this happens we should skip this logic otherwise the layer enters an infinite render loop\n        this.skipNextTextRender_ = true;\n        this.layerRevision_++; // anticipating the layer revision after `layer.changed()`\n        layer.changed();\n      });\n    }\n\n    this.helper.finalizeDraw(\n      frameState,\n      this.dispatchPreComposeEvent,\n      this.dispatchPostComposeEvent,\n    );\n\n    const canvas = this.helper.getCanvas();\n\n    if (this.hitDetectionEnabled_) {\n      this.renderWorlds(frameState, true, startWorld, endWorld, worldWidth);\n      this.hitRenderTarget_.clearCachedData();\n    }\n\n    this.postRender(gl, frameState);\n\n    return canvas;\n  }\n\n  /**\n   * Determine whether renderFrame should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @override\n   */\n  prepareFrameInternal(frameState) {\n    if (!this.initialFeaturesAdded_) {\n      this.addInitialFeatures_(frameState);\n      this.initialFeaturesAdded_ = true;\n    }\n\n    const layer = this.getLayer();\n    const vectorSource = layer.getSource();\n    const viewState = frameState.viewState;\n    const viewNotMoving =\n      !frameState.viewHints[ViewHint.ANIMATING] &&\n      !frameState.viewHints[ViewHint.INTERACTING];\n    const extentChanged = !equals(this.previousExtent_, frameState.extent);\n    const sourceChanged = this.sourceRevision_ < vectorSource.getRevision();\n    const layerChanged = this.layerRevision_ < layer.getRevision();\n\n    this.sourceRevision_ = vectorSource.getRevision();\n    this.layerRevision_ = layer.getRevision();\n\n    // if layer/extent/source changed the next text overlay render should not be skipped\n    if (layerChanged || extentChanged || sourceChanged) {\n      this.skipNextTextRender_ = false;\n    }\n\n    if (viewNotMoving && (extentChanged || sourceChanged)) {\n      const projection = viewState.projection;\n      const resolution = viewState.resolution;\n\n      const renderBuffer =\n        layer instanceof BaseVector ? layer.getRenderBuffer() : 0;\n      const extent = buffer(frameState.extent, renderBuffer * resolution);\n\n      const userProjection = getUserProjection();\n      if (userProjection) {\n        vectorSource.loadFeatures(\n          toUserExtent(extent, userProjection),\n          toUserResolution(resolution, projection),\n          userProjection,\n        );\n      } else {\n        vectorSource.loadFeatures(extent, resolution, projection);\n      }\n\n      this.ready = false;\n\n      const transform = this.helper.makeProjectionTransform(\n        frameState,\n        createTransform(),\n        true,\n      );\n\n      this.styleRenderer_\n        .generateBuffers(\n          this.batch_,\n          transform,\n          frameState.viewState.resolution,\n        )\n        .then((buffers) => {\n          if (this.buffers_) {\n            this.disposeBuffers(this.buffers_);\n          }\n          this.buffers_ = buffers;\n          this.ready = true;\n          this.getLayer()?.changed();\n        });\n\n      this.previousExtent_ = frameState.extent.slice();\n    }\n\n    return true;\n  }\n\n  /**\n   * Render the world, either to the main framebuffer or to the hit framebuffer\n   * @param {import(\"../../Map.js\").FrameState} frameState current frame state\n   * @param {boolean} forHitDetection whether the rendering is for hit detection\n   * @param {number} startWorld the world to render in the first iteration\n   * @param {number} endWorld the last world to render\n   * @param {number} worldWidth the width of the worlds being rendered\n   */\n  renderWorlds(frameState, forHitDetection, startWorld, endWorld, worldWidth) {\n    let world = startWorld;\n\n    if (forHitDetection) {\n      this.hitRenderTarget_.setSize([\n        Math.floor(frameState.size[0] / 2),\n        Math.floor(frameState.size[1] / 2),\n      ]);\n      this.helper.prepareDrawToRenderTarget(\n        frameState,\n        this.hitRenderTarget_,\n        true,\n      );\n    }\n\n    do {\n      this.helper.makeProjectionTransform(\n        frameState,\n        this.currentFrameStateTransform_,\n      );\n      translateTransform(\n        this.currentFrameStateTransform_,\n        world * worldWidth,\n        0,\n      );\n      if (!this.buffers_) {\n        continue;\n      }\n      this.styleRenderer_.render(this.buffers_, frameState, () => {\n        this.applyUniforms_(this.buffers_.invertVerticesTransform, frameState);\n        this.helper.applyHitDetectionUniform(forHitDetection);\n      });\n    } while (++world < endWorld);\n  }\n\n  /**\n   * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {number} hitTolerance Hit tolerance in pixels.\n   * @param {import(\"../vector.js\").FeatureCallback<T>} callback Feature callback.\n   * @param {Array<import(\"../Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n   * @return {T|undefined} Callback result.\n   * @template T\n   * @override\n   */\n  forEachFeatureAtCoordinate(\n    coordinate,\n    frameState,\n    hitTolerance,\n    callback,\n    matches,\n  ) {\n    assert(\n      this.hitDetectionEnabled_,\n      '`forEachFeatureAtCoordinate` cannot be used on a WebGL layer if the hit detection logic has been disabled using the `disableHitDetection: true` option.',\n    );\n    if (!this.styleRenderer_ || !this.hitDetectionEnabled_) {\n      return undefined;\n    }\n\n    const pixel = applyTransform(\n      frameState.coordinateToPixelTransform,\n      coordinate.slice(),\n    );\n\n    const data = this.hitRenderTarget_.readPixel(pixel[0] / 2, pixel[1] / 2);\n    const color = [data[0] / 255, data[1] / 255, data[2] / 255, data[3] / 255];\n    const ref = colorDecodeId(color);\n    const feature = this.batch_.getFeatureFromRef(ref);\n    if (feature) {\n      return callback(feature, this.getLayer(), null);\n    }\n    return undefined;\n  }\n\n  /**\n   * Will release a set of Webgl buffers\n   * @param {import('../../render/webgl/VectorStyleRenderer.js').WebGLBuffers} buffers Buffers\n   */\n  disposeBuffers(buffers) {\n    if (!this.helper) {\n      return;\n    }\n\n    /**\n     * @param {Array<import('../../webgl/Buffer.js').default>} typeBuffers Buffers\n     */\n    const disposeBuffersOfType = (typeBuffers) => {\n      for (const buffer of typeBuffers) {\n        if (buffer) {\n          this.helper.deleteBuffer(buffer);\n        }\n      }\n    };\n    if (buffers.pointBuffers) {\n      disposeBuffersOfType(buffers.pointBuffers);\n    }\n    if (buffers.lineStringBuffers) {\n      disposeBuffersOfType(buffers.lineStringBuffers);\n    }\n    if (buffers.polygonBuffers) {\n      disposeBuffersOfType(buffers.polygonBuffers);\n    }\n    if (buffers.textInstructionsKey) {\n      this.styleRenderer_.disposeTextInstructions(buffers.textInstructionsKey);\n    }\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    if (this.buffers_) {\n      this.disposeBuffers(this.buffers_);\n    }\n    if (this.sourceListenKeys_) {\n      this.sourceListenKeys_.forEach(function (key) {\n        unlistenByKey(key);\n      });\n      this.sourceListenKeys_ = null;\n    }\n    if (this.styleRenderer_) {\n      this.styleRenderer_.dispose();\n    }\n    super.disposeInternal();\n  }\n\n  renderDeclutter() {}\n}\n\nexport default WebGLVectorLayerRenderer;\n","import {getWidth} from '../../extent.js';\n\n/**\n * Compute world params\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {any} layer The layer\n * @return {Array<number>} The world start, end and width.\n */\nexport function getWorldParameters(frameState, layer) {\n  const projection = frameState.viewState.projection;\n\n  const vectorSource = layer.getSource();\n  const multiWorld = vectorSource.getWrapX() && projection.canWrapX();\n  const projectionExtent = projection.getExtent();\n\n  const extent = frameState.extent;\n  const worldWidth = multiWorld ? getWidth(projectionExtent) : null;\n  const endWorld = multiWorld\n    ? Math.ceil((extent[2] - projectionExtent[2]) / worldWidth) + 1\n    : 1;\n\n  const startWorld = multiWorld\n    ? Math.floor((extent[0] - projectionExtent[0]) / worldWidth)\n    : 0;\n\n  return [startWorld, endWorld, worldWidth];\n}\n","/**\n * @module ol/layer/Heatmap\n */\nimport {createCanvasContext2D} from '../dom.js';\nimport {\n  BooleanType,\n  newParsingContext,\n  NumberType,\n} from '../expr/expression.js';\nimport {newCompilationContext} from '../expr/gpu.js';\nimport {clamp} from '../math.js';\nimport {ShaderBuilder} from '../render/webgl/ShaderBuilder.js';\nimport {\n  applyContextToBuilder,\n  expressionToGlsl,\n  generateAttributesFromContext,\n  generateUniformsFromContext,\n} from '../render/webgl/compileUtil.js';\nimport WebGLVectorLayerRenderer from '../renderer/webgl/VectorLayer.js';\nimport BaseVector from './BaseVector.js';\n\n/**\n * @typedef {'change:blur'|'change:radius'|'change:gradient'} HeatmapEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"./Base.js\").BaseLayerObjectEventTypes|\n *     import(\"./Layer.js\").LayerEventType|HeatmapEventTypes, import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../render/EventType.js\").LayerRenderEventTypes, import(\"../render/Event.js\").default, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"./Base.js\").BaseLayerObjectEventTypes|\n *     import(\"./Layer.js\").LayerEventType|HeatmapEventTypes|import(\"../render/EventType.js\").LayerRenderEventTypes, Return>} HeatmapOnSignature\n */\n\n/**\n * @typedef {import(\"../style/flat.js\").NumberExpression|string|function(import(\"../Feature.js\").default):number} WeightExpression\n */\n\n/**\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @template {import(\"../source/Vector.js\").default<FeatureType>} [VectorSourceType=import(\"../source/Vector.js\").default<FeatureType>]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array<string>} [gradient=['#00f', '#0ff', '#0f0', '#ff0', '#f00']] The color gradient\n * of the heatmap, specified as an array of CSS color strings.\n * @property {import(\"../style/flat.js\").NumberExpression} [radius=8] Radius size in pixels. Note that for LineStrings,\n * the width of the line will be double the radius.\n * @property {import(\"../style/flat.js\").NumberExpression} [blur=15] Blur size in pixels. This is added to the `radius`\n * parameter above to create the final size of the blur effect.\n * @property {WeightExpression} [weight='weight'] The feature\n * attribute to use for the weight. This also supports expressions returning a number or a function that returns a weight from a feature. Weight values\n * should range from 0 to 1 (and values outside will be clamped to that range).\n * @property {import(\"../style/flat.js\").BooleanExpression} [filter] Optional filter expression.\n * @property {Object<string, number|Array<number>|string|boolean>} [variables] Variables used in expressions (optional)\n * @property {VectorSourceType} [source] Point source.\n * @property {import(\"./Base.js\").BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object<string, *>} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n  BLUR: 'blur',\n  GRADIENT: 'gradient',\n  RADIUS: 'radius',\n};\n\n/**\n * @const\n * @type {Array<string>}\n */\nconst DEFAULT_GRADIENT = ['#00f', '#0ff', '#0f0', '#ff0', '#f00'];\n\n/**\n * @classdesc\n * Layer for rendering vector data as a heatmap.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @template {import(\"../source/Vector.js\").default<FeatureType>} [VectorSourceType=import(\"../source/Vector.js\").default<FeatureType>]\n * @extends {BaseVector<FeatureType, VectorSourceType, WebGLVectorLayerRenderer>}\n * @api\n */\nclass Heatmap extends BaseVector {\n  /**\n   * @param {Options<FeatureType, VectorSourceType>} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const baseOptions = Object.assign({}, options);\n\n    delete baseOptions.gradient;\n    delete baseOptions.radius;\n    delete baseOptions.blur;\n    delete baseOptions.weight;\n    super(baseOptions);\n\n    /***\n     * @type {HeatmapOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {HeatmapOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {HeatmapOnSignature<void>}\n     */\n    this.un;\n\n    this.filter_ = options.filter ?? true;\n\n    /**\n     * @type {import('../style/flat.js').StyleVariables}\n     * @private\n     */\n    this.styleVariables_ = options.variables || {};\n\n    /**\n     * @private\n     * @type {HTMLCanvasElement|OffscreenCanvas}\n     */\n    this.gradient_ = null;\n\n    this.addChangeListener(Property.GRADIENT, this.handleGradientChanged_);\n\n    this.setGradient(options.gradient ? options.gradient : DEFAULT_GRADIENT);\n\n    this.setBlur(options.blur !== undefined ? options.blur : 15);\n\n    this.setRadius(options.radius !== undefined ? options.radius : 8);\n\n    const weight = options.weight ? options.weight : 'weight';\n\n    /**\n     * @private\n     */\n    this.weight_ = weight;\n\n    // For performance reasons, don't sort the features before rendering.\n    // The render order is not relevant for a heatmap representation.\n    this.setRenderOrder(null);\n  }\n\n  /**\n   * Return the blur size in pixels.\n   * @return {import(\"../style/flat.js\").NumberExpression} Blur size in pixels.\n   * @api\n   * @observable\n   */\n  getBlur() {\n    return /** @type {import(\"../style/flat.js\").NumberExpression} */ (\n      this.get(Property.BLUR)\n    );\n  }\n\n  /**\n   * Return the gradient colors as array of strings.\n   * @return {Array<string>} Colors.\n   * @api\n   * @observable\n   */\n  getGradient() {\n    return /** @type {Array<string>} */ (this.get(Property.GRADIENT));\n  }\n\n  /**\n   * Return the size of the radius in pixels.\n   * @return {import(\"../style/flat.js\").NumberExpression} Radius size in pixel.\n   * @api\n   * @observable\n   */\n  getRadius() {\n    return /** @type {import(\"../style/flat.js\").NumberExpression} */ (\n      this.get(Property.RADIUS)\n    );\n  }\n\n  /**\n   * @private\n   */\n  handleGradientChanged_() {\n    this.gradient_ = createGradient(this.getGradient());\n  }\n\n  /**\n   * Set the blur size in pixels.\n   * @param {import(\"../style/flat.js\").NumberExpression} blur Blur size in pixels (supports expressions).\n   * @api\n   * @observable\n   */\n  setBlur(blur) {\n    const previousValue = this.get(Property.BLUR);\n    this.set(Property.BLUR, blur);\n    // if the value stays numerical, simply refresh the layer\n    if (typeof blur === 'number' && typeof previousValue === 'number') {\n      this.changed();\n      return;\n    }\n    this.clearRenderer();\n  }\n\n  /**\n   * Set the gradient colors as array of strings.\n   * @param {Array<string>} colors Gradient.\n   * @api\n   * @observable\n   */\n  setGradient(colors) {\n    this.set(Property.GRADIENT, colors);\n  }\n\n  /**\n   * Set the size of the radius in pixels.\n   * @param {import(\"../style/flat.js\").NumberExpression} radius Radius size in pixel (supports expressions).\n   * @api\n   * @observable\n   */\n  setRadius(radius) {\n    const previousValue = this.get(Property.RADIUS);\n    this.set(Property.RADIUS, radius);\n    // if the value stays numerical, simply refresh the layer\n    if (typeof radius === 'number' && typeof previousValue === 'number') {\n      this.changed();\n      return;\n    }\n    this.clearRenderer();\n  }\n\n  /**\n   * Set the filter expression\n   * @param {import(\"../style/flat.js\").BooleanExpression} filter Filter expression\n   * @api\n   */\n  setFilter(filter) {\n    this.filter_ = filter;\n    this.changed();\n    this.clearRenderer();\n  }\n\n  /**\n   * Set the weight expression\n   * @param {WeightExpression} weight Weight expression\n   * @api\n   */\n  setWeight(weight) {\n    this.weight_ = weight;\n    this.changed();\n    this.clearRenderer();\n  }\n\n  /**\n   * @override\n   */\n  createRenderer() {\n    const builder = new ShaderBuilder();\n\n    const context = newCompilationContext(this.styleVariables_);\n    const filterParsingContext = newParsingContext(this.styleVariables_);\n    const filterCompiled = expressionToGlsl(\n      context,\n      this.filter_,\n      BooleanType,\n      filterParsingContext,\n    );\n    let radiusCompiled = expressionToGlsl(\n      context,\n      this.getRadius(),\n      NumberType,\n    );\n    let blurCompiled = expressionToGlsl(context, this.getBlur(), NumberType);\n\n    /** @type {import('../render/webgl/VectorStyleRenderer.js').UniformDefinitions} */\n    const blurRadiusUniforms = {};\n    if (typeof this.getBlur() === 'number') {\n      blurCompiled = 'a_blur';\n      blurRadiusUniforms['a_blur'] = () => this.getBlur();\n      builder.addUniform('a_blur', 'float');\n    }\n    if (typeof this.getRadius() === 'number') {\n      radiusCompiled = 'a_radius';\n      blurRadiusUniforms['a_radius'] = () => this.getRadius();\n      builder.addUniform('a_radius', 'float');\n    }\n\n    /** @type {import('../render/webgl/VectorStyleRenderer.js').AttributeDefinitions} */\n    const weightAttribute = {};\n    let weightExpression = null;\n    if (\n      typeof this.weight_ === 'string' ||\n      typeof this.weight_ === 'function'\n    ) {\n      const weightFunction =\n        typeof this.weight_ === 'string'\n          ? (feature) => feature.get(this.weight_)\n          : this.weight_;\n      weightAttribute['prop_weight'] = {\n        size: 1,\n        callback: (feature) => {\n          const weightValue = weightFunction(feature);\n          return weightValue !== undefined ? clamp(weightValue, 0, 1) : 1;\n        },\n      };\n      weightExpression = 'a_prop_weight';\n      builder.addAttribute('a_prop_weight', 'float');\n    } else {\n      const clampedWeight = ['clamp', this.weight_, 0, 1];\n      weightExpression = expressionToGlsl(context, clampedWeight, NumberType);\n    }\n\n    const blurSlopeExpr = `(${radiusCompiled} / max(1., ${blurCompiled}))`;\n\n    builder\n      .setSymbolSizeExpression(`vec2(${radiusCompiled} + ${blurCompiled}) * 2.`)\n      .setSymbolColorExpression(\n        `vec4(smoothstep(0., 1., (1. - length(coordsPx * 2. / v_quadSizePx)) * ${blurSlopeExpr}) * ${weightExpression})`,\n      )\n      .setStrokeColorExpression(\n        `vec4(smoothstep(0., 1., (1. - length(currentRadiusPx * 2. / v_width)) * ${blurSlopeExpr}) * ${weightExpression})`,\n      )\n      .setStrokeWidthExpression(`(${radiusCompiled} + ${blurCompiled}) * 2.`)\n      .setFillColorExpression(`vec4(${weightExpression})`);\n\n    if (filterParsingContext.mCoordinate) {\n      builder.setFragmentDiscardExpression(`!${filterCompiled}`);\n    } else {\n      builder.setShapeDiscardExpression(`!${filterCompiled}`);\n    }\n\n    applyContextToBuilder(builder, context);\n    const attributes = generateAttributesFromContext(context);\n    const uniforms = generateUniformsFromContext(context, this.styleVariables_);\n\n    return new WebGLVectorLayerRenderer(this, {\n      className: this.getClassName(),\n      variables: this.styleVariables_,\n      style: {\n        builder,\n        attributes: {\n          ...attributes,\n          ...weightAttribute,\n        },\n        uniforms: {\n          ...uniforms,\n          ...blurRadiusUniforms,\n        },\n      },\n      disableHitDetection: false,\n      postProcesses: [\n        {\n          fragmentShader: `\n            precision mediump float;\n\n            uniform sampler2D u_image;\n            uniform sampler2D u_gradientTexture;\n            uniform float u_opacity;\n\n            varying vec2 v_texCoord;\n\n            void main() {\n              vec4 color = texture2D(u_image, v_texCoord);\n              gl_FragColor.a = color.a * u_opacity;\n              gl_FragColor.rgb = texture2D(u_gradientTexture, vec2(0.5, color.a)).rgb;\n              gl_FragColor.rgb *= gl_FragColor.a;\n            }`,\n          uniforms: {\n            u_gradientTexture: () => this.gradient_,\n            u_opacity: () => this.getOpacity(),\n          },\n        },\n      ],\n    });\n  }\n\n  /**\n   * Update any variables used by the layer style and trigger a re-render.\n   * @param {import('../style/flat.js').StyleVariables} variables Variables to update.\n   */\n  updateStyleVariables(variables) {\n    Object.assign(this.styleVariables_, variables);\n    this.changed();\n  }\n\n  /**\n   * @override\n   */\n  renderDeclutter() {}\n}\n\n/**\n * @param {Array<string>} colors A list of colored.\n * @return {HTMLCanvasElement|OffscreenCanvas} canvas with gradient texture.\n */\nfunction createGradient(colors) {\n  const width = 1;\n  const height = 256;\n  const context = createCanvasContext2D(width, height);\n\n  const gradient = context.createLinearGradient(0, 0, width, height);\n  const step = 1 / (colors.length - 1);\n  for (let i = 0, ii = colors.length; i < ii; ++i) {\n    gradient.addColorStop(i * step, colors[i]);\n  }\n\n  context.fillStyle = gradient;\n  context.fillRect(0, 0, width, height);\n\n  return context.canvas;\n}\n\nexport default Heatmap;\n","/*\tCopyright (c) 2015 Jean-Marc VIGLINO, \n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport {unByKey as ol_Observable_unByKey} from 'ol/Observable.js'\nimport ol_control_Control from 'ol/control/Control.js'\nimport ol_layer_Tile from 'ol/layer/Tile.js'\nimport ol_layer_Vector from 'ol/layer/Vector.js'\nimport ol_layer_VectorTile from 'ol/layer/VectorTile.js'\n// ol < 6 compatibility VectorImage is not defined\n// import ol_layer_VectorImage from 'ol/layer/VectorImage.js'\nimport ol_layer_Image from 'ol/layer/Image.js'\nimport ol_layer_Heatmap from 'ol/layer/Heatmap.js'\nimport {intersects as ol_extent_intersects} from 'ol/extent.js'\n\nimport ol_ext_element from '../util/element.js'\n\n/** Layer Switcher Control.\n * @fires select\n * @fires drawlist\n * @fires toggle\n * @fires reorder-start\n * @fires reorder-end\n * @fires layer:visible\n * @fires layer:opacity\n * @fires layer:keydown\n * \n * @constructor\n * @extends {ol_control_Control}\n * @param {Object=} options\n *  @param {boolean} options.selection enable layer selection when click on the title\n *  @param {function} options.displayInLayerSwitcher function that takes a layer and return a boolean if the layer is displayed in the switcher, default test the displayInLayerSwitcher layer attribute\n *  @param {boolean} options.show_progress show a progress bar on tile layers, default false\n *  @param {boolean} options.mouseover show the panel on mouseover, default false\n *  @param {boolean} options.reordering allow layer reordering, default true\n *  @param {boolean} options.trash add a trash button to delete the layer, default false\n *  @param {function} options.oninfo callback on click on info button, if none no info button is shown DEPRECATED: use on(info) instead\n *  @param {boolean} options.extent add an extent button to zoom to the extent of the layer\n *  @param {function} options.onextent callback when click on extent, default fits view to extent\n *  @param {number} options.drawDelay delay in ms to redraw the layer (usefull to prevent flickering when manipulating the layers)\n *  @param {boolean} options.collapsed collapse the layerswitcher at beginning, default true\n *  @param {ol.layer.Group} options.layerGroup a layer group to display in the switcher, default display all layers of the map\n *  @param {boolean} options.noScroll prevent handle scrolling, default false\n *  @param {boolean} options.counter layer counter, default false\n *  @param {function} options.onchangeCheck optional callback on click on checkbox, you can call this method for doing operations after check/uncheck a layer\n *\n * Layers attributes that control the switcher\n *\t- allwaysOnTop {boolean} true to force layer stay on top of the others while reordering, default false\n *\t- displayInLayerSwitcher {boolean} display the layer in switcher, default true\n *\t- noSwitcherDelete {boolean} to prevent layer deletion (w. trash option = true), default false\n */\nvar ol_control_LayerSwitcher = class olcontrolLayerSwitcher extends ol_control_Control {\n  constructor(options) {\n    options = options || {}\n    var element = ol_ext_element.create('DIV', {\n      className: options.switcherClass || 'ol-layerswitcher'\n    })\n    super({\n      element: element,\n      target: options.target\n    })\n    \n    var self = this\n    this.dcount = 0\n    this.show_progress = options.show_progress\n    this.oninfo = (typeof (options.oninfo) == 'function' ? options.oninfo : null)\n    this.onextent = (typeof (options.onextent) == 'function' ? options.onextent : null)\n    this.hasextent = options.extent || options.onextent\n    this.hastrash = options.trash\n    this.reordering = (options.reordering !== false)\n    this._layers = []\n    this._layerGroup = (options.layerGroup && options.layerGroup.getLayers) ? options.layerGroup : null\n    this.onchangeCheck = (typeof (options.onchangeCheck) == \"function\" ? options.onchangeCheck : null)\n\n    // displayInLayerSwitcher\n    if (typeof (options.displayInLayerSwitcher) === 'function') {\n      this.displayInLayerSwitcher = options.displayInLayerSwitcher\n    }\n\n    // Insert in the map\n    if (!options.target) {\n      element.classList.add('ol-unselectable')\n      element.classList.add('ol-control')\n      element.classList.add(options.collapsed !== false ? 'ol-collapsed' : 'ol-forceopen')\n      if (options.counter) element.classList.add('ol-counter')\n\n      this.counter = ol_ext_element.create('SPAN', {\n        class: 'ol-counter',\n        text: 0,\n        parent: element\n      });\n      this.button = ol_ext_element.create('BUTTON', {\n        type: 'button',\n        parent: element\n      })\n      this.button.addEventListener('touchstart', function (e) {\n        element.classList.toggle('ol-forceopen')\n        element.classList.add('ol-collapsed')\n        self.dispatchEvent({ type: 'toggle', collapsed: element.classList.contains('ol-collapsed') })\n        e.preventDefault()\n        self.overflow()\n      })\n      this.button.addEventListener('click', function () {\n        element.classList.toggle('ol-forceopen')\n        element.classList.add('ol-collapsed')\n        self.dispatchEvent({ type: 'toggle', collapsed: !element.classList.contains('ol-forceopen') })\n        self.overflow()\n      })\n\n      if (options.mouseover) {\n        element.addEventListener('mouseleave', function () {\n          element.classList.add(\"ol-collapsed\")\n          self.dispatchEvent({ type: 'toggle', collapsed: true })\n        })\n        element.addEventListener('mouseover', function () {\n          element.classList.remove(\"ol-collapsed\")\n          self.dispatchEvent({ type: 'toggle', collapsed: false })\n        })\n      }\n\n      if (options.minibar)\n        options.noScroll = true\n      if (!options.noScroll) {\n        this.topv = ol_ext_element.create('DIV', {\n          className: 'ol-switchertopdiv',\n          parent: element,\n          click: function () {\n            self.overflow(\"+50%\")\n          }\n        })\n\n        this.botv = ol_ext_element.create('DIV', {\n          className: 'ol-switcherbottomdiv',\n          parent: element,\n          click: function () {\n            self.overflow(\"-50%\")\n          }\n        })\n      }\n      this._noScroll = options.noScroll\n    }\n\n    this.panel_ = ol_ext_element.create('UL', {\n      className: 'panel',\n    })\n    this.panelContainer_ = ol_ext_element.create('DIV', {\n      className: 'panel-container',\n      html: this.panel_,\n      parent: element\n    })\n    // Handle mousewheel\n    if (!options.target && !options.noScroll) {\n      ol_ext_element.addListener(this.panel_, 'mousewheel DOMMouseScroll onmousewheel', function (e) {\n        if (self.overflow(Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))))) {\n          e.stopPropagation()\n          e.preventDefault()\n        }\n      })\n    }\n\n    this.header_ = ol_ext_element.create('LI', {\n      className: 'ol-header',\n      parent: this.panel_\n    })\n\n    this.set('drawDelay', options.drawDelay || 0)\n    this.set('selection', options.selection)\n\n    if (options.minibar) {\n      // Wait init complete (for child classes)\n      setTimeout(function () {\n        var mbar = ol_ext_element.scrollDiv(this.panelContainer_, {\n          mousewheel: true,\n          vertical: true,\n          minibar: true\n        })\n        this.on(['drawlist', 'toggle'], function () {\n          mbar.refresh()\n        })\n      }.bind(this))\n    }\n  }\n  /** Test if a layer should be displayed in the switcher\n   * @param {ol.layer} layer\n   * @return {boolean} true if the layer is displayed\n   */\n  displayInLayerSwitcher(layer) {\n    return (layer.get('displayInLayerSwitcher') !== false)\n  }\n  /**\n   * Set the map instance the control is associated with.\n   * @param {_ol_Map_} map The map instance.\n   */\n  setMap(map) {\n    super.setMap(map)\n    this.drawPanel()\n\n    if (this._listener) {\n      for (var i in this._listener){\n        ol_Observable_unByKey(this._listener[i])\n      }\n    }\n    this._listener = null\n\n    // Get change (new layer added or removed)\n    if (map) {\n      this._listener = {\n        moveend: map.on('moveend', this.viewChange.bind(this)),\n        size: map.on('change:size', this.overflow.bind(this))\n      }\n      // Listen to a layer group\n      if (this._layerGroup) {\n        this._listener.change = this._layerGroup.getLayers().on('change:length', this.drawPanel.bind(this))\n      } else {\n        //Listen to all layers\n        this._listener.change = map.getLayerGroup().getLayers().on('change:length', this.drawPanel.bind(this))\n      }\n    }\n  }\n  /** Show control\n   */\n  show() {\n    this.element.classList.add('ol-forceopen')\n    this.overflow()\n    this.dispatchEvent({ type: 'toggle', collapsed: false })\n  }\n  /** Hide control\n   */\n  hide() {\n    this.element.classList.remove('ol-forceopen')\n    this.overflow()\n    this.dispatchEvent({ type: 'toggle', collapsed: true })\n  }\n  /** Toggle control\n   */\n  toggle() {\n    this.element.classList.toggle(\"ol-forceopen\")\n    this.overflow()\n    this.dispatchEvent({ type: 'toggle', collapsed: !this.isOpen() })\n  }\n  /** Is control open\n   * @return {boolean}\n   */\n  isOpen() {\n    return this.element.classList.contains(\"ol-forceopen\")\n  }\n  /** Add a custom header\n   * @param {Element|string} html content html\n   */\n  setHeader(html) {\n    ol_ext_element.setHTML(this.header_, html)\n  }\n  /** Calculate overflow and add scrolls\n   * @param {Number} dir scroll direction -1|0|1|'+50%'|'-50%'\n   * @private\n   */\n  overflow(dir) {\n    if (this.button && !this._noScroll) {\n      // Nothing to show\n      if (ol_ext_element.hidden(this.panel_)) {\n        ol_ext_element.setStyle(this.element, { height: 'auto' })\n        return\n      }\n      // Calculate offset\n      var h = ol_ext_element.outerHeight(this.element)\n      var hp = ol_ext_element.outerHeight(this.panel_)\n      var dh = this.button.offsetTop + ol_ext_element.outerHeight(this.button)\n      //var dh = this.button.position().top + this.button.outerHeight(true);\n      var top = this.panel_.offsetTop - dh\n      if (hp > h - dh) {\n        // Bug IE: need to have an height defined\n        ol_ext_element.setStyle(this.element, { height: '100%' })\n        var li = this.panel_.querySelectorAll('li.ol-visible .li-content')[0]\n        var lh = li ? 2 * ol_ext_element.getStyle(li, 'height') : 0\n        switch (dir) {\n          case 1: top += lh; break\n          case -1: top -= lh; break\n          case \"+50%\": top += Math.round(h / 2); break\n          case \"-50%\": top -= Math.round(h / 2); break\n          default: break\n        }\n        // Scroll div\n        if (top + hp <= h - 3 * dh / 2) {\n          top = h - 3 * dh / 2 - hp\n          ol_ext_element.hide(this.botv)\n        } else {\n          ol_ext_element.show(this.botv)\n        }\n        if (top >= 0) {\n          top = 0\n          ol_ext_element.hide(this.topv)\n        } else {\n          ol_ext_element.show(this.topv)\n        }\n        // Scroll ?\n        ol_ext_element.setStyle(this.panel_, { top: top + \"px\" })\n        return true\n      } else {\n        ol_ext_element.setStyle(this.element, { height: \"auto\" })\n        ol_ext_element.setStyle(this.panel_, { top: 0 })\n        ol_ext_element.hide(this.botv)\n        ol_ext_element.hide(this.topv)\n        return false\n      }\n    }\n    else\n      return false\n  }\n  /** Set the layer associated with a li\n   * @param {Element} li\n   * @param {ol.layer} layer\n   * @private\n   */\n  _setLayerForLI(li, layer) {\n    var listeners = []\n    if (layer.getLayers) {\n      listeners.push(layer.getLayers().on('change:length', this.drawPanel.bind(this)))\n    }\n    if (li) {\n      // Handle opacity change\n      listeners.push(layer.on('change:opacity', (function () {\n        this.setLayerOpacity(layer, li)\n      }).bind(this)))\n      // Handle visibility chage\n      listeners.push(layer.on('change:visible', (function () {\n        this.setLayerVisibility(layer, li)\n      }).bind(this)))\n    }\n    // Other properties\n    listeners.push(layer.on('propertychange', (function (e) {\n      if (e.key === 'displayInLayerSwitcher'\n        || e.key === 'openInLayerSwitcher'\n        || e.key === 'title'\n        || e.key === 'name') {\n        this.drawPanel(e)\n      }\n    }).bind(this)))\n    this._layers.push({ li: li, layer: layer, listeners: listeners })\n  }\n  /** Set opacity for a layer\n   * @param {ol.layer.Layer} layer\n   * @param {Element} li the list element\n   * @private\n   */\n  setLayerOpacity(layer, li) {\n    var i = li.querySelector('.layerswitcher-opacity-cursor')\n    if (i){\n      i.style.left = (layer.getOpacity() * 100) + \"%\"\n    }\n    this.dispatchEvent({ type: 'layer:opacity', layer: layer })\n  }\n  /** Set visibility for a layer\n   * @param {ol.layer.Layer} layer\n   * @param {Element} li the list element\n   * @api\n   */\n  setLayerVisibility(layer, li) {\n    var i = li.querySelector('.ol-visibility')\n    if (i) {\n      i.checked = layer.getVisible()\n    }\n    if (layer.getVisible()){\n      li.classList.add('ol-visible')\n    } else{\n      li.classList.remove('ol-visible')\n    }\n    this.dispatchEvent({ type: 'layer:visible', layer: layer })\n  }\n  /** Clear layers associated with li\n   * @private\n   */\n  _clearLayerForLI() {\n    this._layers.forEach(function (li) {\n      li.listeners.forEach(function (l) {\n        ol_Observable_unByKey(l)\n      })\n    })\n    this._layers = []\n  }\n  /** Get the layer associated with a li\n   * @param {Element} li\n   * @return {ol.layer}\n   * @private\n   */\n  _getLayerForLI(li) {\n    for (var i = 0, l; l = this._layers[i]; i++) {\n      if (l.li === li) {\n        return l.layer\n      }\n    }\n    return null\n  }\n  /**\n   * On view change hide layer depending on resolution / extent\n   * @private\n   */\n  viewChange() {\n    this.panel_.querySelectorAll('li').forEach(function (li) {\n      var l = this._getLayerForLI(li)\n      if (l) {\n        if (this.testLayerVisibility(l)) {\n          li.classList.remove('ol-layer-hidden')\n        } else {\n          li.classList.add('ol-layer-hidden')\n        }\n      }\n    }.bind(this))\n  }\n  /** Get control panel\n   * @api\n   */\n  getPanel() {\n    return this.panelContainer_\n  }\n  /** Draw the panel control (prevent multiple draw due to layers manipulation on the map with a delay function)\n   * @api\n   */\n  drawPanel() {\n    if (!this.getMap())\n      return\n    var self = this\n    // Multiple event simultaneously / draw once => put drawing in the event queue\n    this.dcount++\n    setTimeout(function () { self.drawPanel_() }, this.get('drawDelay') || 0)\n  }\n  /** Delayed draw panel control\n   * @private\n   */\n  drawPanel_() {\n    if (--this.dcount || this.dragging_) {\n      return\n    }\n    var scrollTop = this.panelContainer_.scrollTop\n\n    // Remove existing layers\n    this._clearLayerForLI()\n    this.panel_.querySelectorAll('li').forEach(function (li) {\n      if (!li.classList.contains('ol-header')) li.remove()\n    }.bind(this))\n    // Draw list\n    if (this._layerGroup) {\n      this.drawList(this.panel_, this._layerGroup.getLayers())\n    } else if (this.getMap()) {\n      this.drawList(this.panel_, this.getMap().getLayers())\n    }\n    // Reset scrolltop\n    this.panelContainer_.scrollTop = scrollTop\n    // Counter\n    if (this.counter) {\n      this.counter.innerHTML = this.panel_.parentNode.querySelectorAll('ul.panel > li:not(.ol-header)').length;\n    }\n  }\n  /** Change layer visibility according to the baselayer option\n   * @param {ol.layer}\n   * @param {Array<ol.layer>} related layers\n   * @private\n   */\n  switchLayerVisibility(l, layers) {\n    if (!l.get('baseLayer')) {\n      l.setVisible(!l.getVisible())\n    } else {\n      if (!l.getVisible()) {\n        l.setVisible(true)\n      }\n      layers.forEach(function (li) {\n        if (l !== li && li.get('baseLayer') && li.getVisible()) {\n          li.setVisible(false)\n        }\n      })\n    }\n  }\n  /** Check if layer is on the map (depending on resolution / zoom and extent)\n   * @param {ol.layer}\n   * @return {boolean}\n   * @private\n   */\n  testLayerVisibility(layer) {\n    if (!this.getMap())\n      return true\n    var res = this.getMap().getView().getResolution()\n    var zoom = this.getMap().getView().getZoom()\n    // Calculate visibility on resolution or zoom\n    if (layer.getMaxResolution() <= res || layer.getMinResolution() >= res) {\n      return false\n    } else if (layer.getMinZoom && (layer.getMinZoom() >= zoom || layer.getMaxZoom() < zoom)) {\n      return false\n    } else {\n      // Check extent\n      var ex0 = layer.getExtent()\n      if (ex0) {\n        var ex = this.getMap().getView().calculateExtent(this.getMap().getSize())\n        return ol_extent_intersects(ex, ex0)\n      }\n      return true\n    }\n  }\n  /** Start ordering the list\n  *\t@param {event} e drag event\n  *\t@private\n  */\n  dragOrdering_(e) {\n    e.stopPropagation()\n    e.preventDefault()\n    // Get params\n    var self = this\n    var elt = e.currentTarget.parentNode.parentNode\n    var start = true\n    var panel = this.panel_\n    var pageY\n    var pageY0 = e.pageY\n      || (e.touches && e.touches.length && e.touches[0].pageY)\n      || (e.changedTouches && e.changedTouches.length && e.changedTouches[0].pageY)\n    var target, dragElt\n    var layer, group\n    elt.parentNode.classList.add('drag')\n\n    // Stop ordering\n    function stop() {\n      if (target) {\n        // Get drag on parent\n        var drop = layer\n        var isSelected = self.getSelection() === drop\n        if (drop && target) {\n          var collection\n          if (group) {\n            collection = group.getLayers()\n          } else {\n            collection = self._layerGroup ? self._layerGroup.getLayers() : self.getMap().getLayers()\n          }\n          var layers = collection.getArray()\n          // Switch layers\n          for (var i = 0; i < layers.length; i++) {\n            if (layers[i] == drop) {\n              collection.removeAt(i)\n              break\n            }\n          }\n          for (var j = 0; j < layers.length; j++) {\n            if (layers[j] === target) {\n              if (i > j) {\n                collection.insertAt(j, drop)\n              } else {\n                collection.insertAt(j + 1, drop)\n              }\n              break\n            }\n          }\n        }\n        if (isSelected) self.selectLayer(drop)\n\n        self.dispatchEvent({ type: \"reorder-end\", layer: drop, group: group })\n      }\n\n      elt.parentNode.querySelectorAll('li').forEach(function (li) {\n        li.classList.remove('dropover')\n        li.classList.remove('dropover-after')\n        li.classList.remove('dropover-before')\n      })\n      elt.classList.remove(\"drag\")\n      elt.parentNode.classList.remove(\"drag\")\n      self.element.classList.remove('drag')\n      if (dragElt)\n        dragElt.remove()\n\n      ol_ext_element.removeListener(document, 'mousemove touchmove', move)\n      ol_ext_element.removeListener(document, 'mouseup touchend touchcancel', stop)\n    }\n\n    // Ordering\n    function move(e) {\n      // First drag (more than 2 px) => show drag element (ghost)\n      pageY = e.pageY\n        || (e.touches && e.touches.length && e.touches[0].pageY)\n        || (e.changedTouches && e.changedTouches.length && e.changedTouches[0].pageY)\n      if (start && Math.abs(pageY0 - pageY) > 2) {\n        start = false\n        elt.classList.add(\"drag\")\n        layer = self._getLayerForLI(elt)\n        target = false\n        group = self._getLayerForLI(elt.parentNode.parentNode)\n        // Ghost div\n        dragElt = ol_ext_element.create('LI', {\n          className: 'ol-dragover',\n          html: elt.innerHTML,\n          style: {\n            position: \"absolute\",\n            \"z-index\": 10000,\n            left: elt.offsetLeft,\n            opacity: 0.5,\n            width: ol_ext_element.outerWidth(elt),\n            height: ol_ext_element.getStyle(elt, 'height'),\n          },\n          parent: panel\n        })\n        self.element.classList.add('drag')\n        self.dispatchEvent({ type: \"reorder-start\", layer: layer, group: group })\n      }\n      // Start a new drag sequence\n      if (!start) {\n        e.preventDefault()\n        e.stopPropagation()\n\n        // Ghost div\n        ol_ext_element.setStyle(dragElt, { top: pageY - ol_ext_element.offsetRect(panel).top + panel.scrollTop + 5 })\n\n        var li\n        if (!e.touches) {\n          li = e.target\n          \n          // Get the HTML node within web component on click drag\n          if(e.target.shadowRoot){\n            li = e.composedPath()[0]\n          }\n        } else {\n          li = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY);\n          \n          //Get actual HTML node within web component on touch drag\n          while(li.shadowRoot){\n            li = li.shadowRoot.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY)\n          }\n        }\n        if (li.classList.contains(\"ol-switcherbottomdiv\")) {\n          self.overflow(-1)\n        } else if (li.classList.contains(\"ol-switchertopdiv\")) {\n          self.overflow(1)\n        }\n        // Get associated li\n        while (li && li.tagName !== 'LI') {\n          li = li.parentNode\n        }\n        if (!li || !li.classList.contains('dropover')) {\n          elt.parentNode.querySelectorAll('li').forEach(function (li) {\n            li.classList.remove('dropover')\n            li.classList.remove('dropover-after')\n            li.classList.remove('dropover-before')\n          })\n        }\n        if (li && li.parentNode.classList.contains('drag') && li !== elt) {\n          target = self._getLayerForLI(li)\n          // Don't mix layer level\n          if (target && !target.get('allwaysOnTop') == !layer.get('allwaysOnTop')) {\n            li.classList.add(\"dropover\")\n            li.classList.add((elt.offsetTop < li.offsetTop) ? 'dropover-after' : 'dropover-before')\n          } else {\n            target = false\n          }\n          ol_ext_element.show(dragElt)\n        } else {\n          target = false\n          if (li === elt)\n            ol_ext_element.hide(dragElt)\n          else\n            ol_ext_element.show(dragElt)\n        }\n\n        if (!target)\n          dragElt.classList.add(\"forbidden\")\n        else\n          dragElt.classList.remove(\"forbidden\")\n      }\n    }\n\n    // Start ordering\n    ol_ext_element.addListener(document, 'mousemove touchmove', move)\n    ol_ext_element.addListener(document, 'mouseup touchend touchcancel', stop)\n  }\n  /** Change opacity on drag\n  *\t@param {event} e drag event\n  *\t@private\n  */\n  dragOpacity_(e) {\n    e.stopPropagation()\n    e.preventDefault()\n    var self = this\n    // Register start params\n    var elt = e.target\n    var layer = this._getLayerForLI(elt.parentNode.parentNode.parentNode)\n    if (!layer)\n      return\n    var x = e.pageX\n      || (e.touches && e.touches.length && e.touches[0].pageX)\n      || (e.changedTouches && e.changedTouches.length && e.changedTouches[0].pageX)\n    var start = ol_ext_element.getStyle(elt, 'left') - x\n    self.dragging_ = true\n\n    // stop dragging\n    function stop() {\n      ol_ext_element.removeListener(document, \"mouseup touchend touchcancel\", stop)\n      ol_ext_element.removeListener(document, \"mousemove touchmove\", move)\n      self.dragging_ = false\n    }\n    // On draggin\n    function move(e) {\n      var x = e.pageX\n        || (e.touches && e.touches.length && e.touches[0].pageX)\n        || (e.changedTouches && e.changedTouches.length && e.changedTouches[0].pageX)\n      var delta = (start + x) / ol_ext_element.getStyle(elt.parentNode, 'width')\n      var opacity = Math.max(0, Math.min(1, delta))\n      ol_ext_element.setStyle(elt, { left: (opacity * 100) + \"%\" })\n      elt.parentNode.nextElementSibling.innerHTML = Math.round(opacity * 100)\n      layer.setOpacity(opacity)\n    }\n    // Register move\n    ol_ext_element.addListener(document, \"mouseup touchend touchcancel\", stop)\n    ol_ext_element.addListener(document, \"mousemove touchmove\", move)\n  }\n  /** Render a list of layer\n   * @param {Elemen} element to render\n   * @layers {Array{ol.layer}} list of layer to show\n   * @api stable\n   * @private\n   */\n  drawList(ul, collection) {\n    var self = this\n    var layers = collection.getArray()\n\n    // Change layer visibility\n    var setVisibility = function (e) {\n      e.stopPropagation()\n      e.preventDefault()\n      var l = self._getLayerForLI(this.parentNode.parentNode)\n      self.switchLayerVisibility(l, collection)\n      if (self.get('selection') && l.getVisible()) {\n        self.selectLayer(l)\n      }\n      if (self.onchangeCheck) {\n        self.onchangeCheck(l)\n      }\n    }\n    // Info button click\n    function onInfo(e) {\n      e.stopPropagation()\n      e.preventDefault()\n      var l = self._getLayerForLI(this.parentNode.parentNode)\n      self.oninfo(l)\n      self.dispatchEvent({ type: \"info\", layer: l })\n    }\n    // Zoom to extent button\n    function zoomExtent(e) {\n      e.stopPropagation()\n      e.preventDefault()\n      var l = self._getLayerForLI(this.parentNode.parentNode)\n      if (self.onextent) {\n        self.onextent(l)\n      } else {\n        self.getMap().getView().fit(l.getExtent(), self.getMap().getSize())\n      }\n      self.dispatchEvent({ type: \"extent\", layer: l })\n    }\n    // Remove a layer on trash click\n    function removeLayer(e) {\n      e.stopPropagation()\n      e.preventDefault()\n      var li = this.parentNode.parentNode.parentNode.parentNode\n      var layer, group = self._getLayerForLI(li)\n      // Remove the layer from a group or from a map\n      if (group) {\n        layer = self._getLayerForLI(this.parentNode.parentNode)\n        group.getLayers().remove(layer)\n        if (group.getLayers().getLength() == 0 && !group.get('noSwitcherDelete')) {\n          removeLayer.call(li.querySelectorAll('.layerTrash')[0], e)\n        }\n      } else {\n        li = this.parentNode.parentNode\n        self.getMap().removeLayer(self._getLayerForLI(li))\n      }\n    }\n\n    // Create a list for a layer\n    function createLi(layer) {\n      if (!this.displayInLayerSwitcher(layer)) {\n        this._setLayerForLI(null, layer)\n        return\n      }\n\n      var li = ol_ext_element.create('LI', {\n        className: (layer.getVisible() ? \"ol-visible \" : \" \") + (layer.get('baseLayer') ? \"baselayer\" : \"\"),\n        parent: ul\n      })\n      this._setLayerForLI(li, layer)\n      if (this._selectedLayer === layer) {\n        li.classList.add('ol-layer-select')\n      }\n\n      var layer_buttons = ol_ext_element.create('DIV', {\n        className: 'ol-layerswitcher-buttons',\n        parent: li\n      })\n\n      // Content div\n      var d = ol_ext_element.create('DIV', {\n        className: 'li-content',\n        parent: li\n      })\n\n      // Visibility\n      var input = ol_ext_element.create('INPUT', {\n        type: layer.get('baseLayer') ? 'radio' : 'checkbox',\n        className: 'ol-visibility',\n        checked: layer.getVisible(),\n        click: function(e) {\n          setVisibility.bind(this)(e)\n          setTimeout(function() { e.target.checked = layer.getVisible(); });\n        },\n        on: {\n          // Set opacity on keydown\n          keydown: function(e) {\n            switch (e.key) {\n              // Change opacity on arrow\n              case 'ArrowLeft':\n              case 'ArrowRight': {\n                e.preventDefault();\n                e.stopPropagation();\n                var delta = (e.key==='ArrowLeft' ? -0.1 : 0.1);\n                var opacity = Math.min(1, Math.max(0, layer.getOpacity() + delta))\n                layer.setOpacity(opacity)\n                break;\n              }\n              // Select on enter\n              case 'Enter': {\n                if (self.get('selection')) {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  self.selectLayer(layer)\n                }\n                break;\n              }\n              // Expend \n              case '-': \n              case '+': {\n                if (layer.getLayers) {\n                  this._focus = layer;\n                  layer.set(\"openInLayerSwitcher\", !layer.get(\"openInLayerSwitcher\"))\n                }\n              }\n              // Move up dans down\n              // fallthrough\n              case 'ArrowUp':\n              case 'ArrowDown': {\n                if (e.ctrlKey && this.reordering) {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  var pos = collection.getArray().indexOf(layer);\n                  if (pos > -1) {\n                    if (e.key === 'ArrowDown') {\n                      if (pos > 0) {\n                        collection.remove(layer);\n                        collection.insertAt(pos-1, layer)\n                        self._focus = layer\n                        self.dispatchEvent({ type: \"reorder-end\", layer: layer })\n                      }\n                    } else {\n                      if (pos < collection.getLength()-1) {\n                        collection.remove(layer);\n                        collection.insertAt(pos+1, layer)\n                        self._focus = layer\n                        self.dispatchEvent({ type: \"reorder-end\", layer: layer })\n                      }\n                    }\n                  }\n                }\n                break;\n              }\n              default: {\n                var group = this._getLayerForLI(ul.parentNode)\n                this.dispatchEvent({ type: 'layer:keydown', key: e.key, group: group, li: li, layer: layer, originalEvent: e })\n              }\n            }\n          }.bind(this)\n        },\n        parent: d\n      })\n      // Focus on element\n      if (layer === self._focus) {\n        input.focus();\n        self.overflow()\n      }\n      // Label\n      var label = ol_ext_element.create('LABEL', {\n        title: layer.get('title') || layer.get('name'),\n        click: setVisibility,\n        style: {\n          userSelect: 'none'\n        },\n        parent: d\n      })\n      label.addEventListener('selectstart', function () { return false })\n      ol_ext_element.create('SPAN', {\n        html: layer.get('title') || layer.get('name'),\n        click: function (e) {\n          if (this.get('selection')) {\n            e.stopPropagation()\n            this.selectLayer(layer)\n          }\n        }.bind(this),\n        parent: label\n      })\n      \n      //  up/down\n      if (this.reordering) {\n        if ((i < layers.length - 1 && (layer.get(\"allwaysOnTop\") || !layers[i + 1].get(\"allwaysOnTop\")))\n          || (i > 0 && (!layer.get(\"allwaysOnTop\") || layers[i - 1].get(\"allwaysOnTop\")))) {\n          ol_ext_element.create('DIV', {\n            className: 'layerup ol-noscroll',\n            title: this.tip.up,\n            on: { 'mousedown touchstart': function (e) { self.dragOrdering_(e) } },\n            parent: layer_buttons\n          })\n        }\n      }\n\n      // Show/hide sub layers\n      if (layer.getLayers) {\n        var nb = 0\n        layer.getLayers().forEach(function (l) {\n          if (self.displayInLayerSwitcher(l))\n            nb++\n        })\n        if (nb) {\n          ol_ext_element.create('DIV', {\n            className: layer.get(\"openInLayerSwitcher\") ? \"collapse-layers\" : \"expend-layers\",\n            title: this.tip.plus,\n            click: function () {\n              var l = self._getLayerForLI(this.parentNode.parentNode)\n              l.set(\"openInLayerSwitcher\", !l.get(\"openInLayerSwitcher\"))\n            },\n            parent: layer_buttons\n          })\n        }\n      }\n\n      // Info button\n      if (this.oninfo) {\n        ol_ext_element.create('DIV', {\n          className: 'layerInfo',\n          title: this.tip.info,\n          click: onInfo,\n          parent: layer_buttons\n        })\n      }\n      // Layer remove\n      if (this.hastrash && !layer.get(\"noSwitcherDelete\")) {\n        ol_ext_element.create('DIV', {\n          className: 'layerTrash',\n          title: this.tip.trash,\n          click: removeLayer,\n          parent: layer_buttons\n        })\n      }\n      // Layer extent\n      if (this.hasextent && layers[i].getExtent()) {\n        var ex = layers[i].getExtent()\n        if (ex.length == 4 && ex[0] < ex[2] && ex[1] < ex[3]) {\n          ol_ext_element.create('DIV', {\n            className: 'layerExtent',\n            title: this.tip.extent,\n            click: zoomExtent,\n            parent: layer_buttons\n          })\n        }\n      }\n\n      // Progress\n      if (this.show_progress && layer instanceof ol_layer_Tile) {\n        var p = ol_ext_element.create('DIV', {\n          className: 'layerswitcher-progress',\n          parent: d\n        })\n        this.setprogress_(layer)\n        layer.layerswitcher_progress = ol_ext_element.create('DIV', { parent: p })\n      }\n\n      // Opacity\n      var opacity = ol_ext_element.create('DIV', {\n        className: 'layerswitcher-opacity',\n        // Click on the opacity line\n        click: function (e) {\n          if (e.target !== this)\n            return\n          e.stopPropagation()\n          e.preventDefault()\n          var op = Math.max(0, Math.min(1, e.offsetX / ol_ext_element.getStyle(this, 'width')))\n          self._getLayerForLI(this.parentNode.parentNode).setOpacity(op)\n          this.parentNode.querySelectorAll('.layerswitcher-opacity-label')[0].innerHTML = Math.round(op * 100)\n        },\n        parent: d\n      })\n      // Start dragging\n      ol_ext_element.create('DIV', {\n        className: 'layerswitcher-opacity-cursor ol-noscroll',\n        style: { left: (layer.getOpacity() * 100) + \"%\" },\n        on: {\n          'mousedown touchstart': function (e) { self.dragOpacity_(e) }\n        },\n        parent: opacity\n      })\n      // Percent\n      ol_ext_element.create('DIV', {\n        className: 'layerswitcher-opacity-label',\n        html: Math.round(layer.getOpacity() * 100),\n        parent: d\n      })\n\n      // Layer group\n      if (layer.getLayers) {\n        li.classList.add('ol-layer-group')\n        if (layer.get(\"openInLayerSwitcher\") === true) {\n          var ul2 = ol_ext_element.create('UL', {\n            parent: li\n          })\n          this.drawList(ul2, layer.getLayers())\n        }\n      }\n      li.classList.add(this.getLayerClass(layer))\n\n      // Dispatch a dralist event to allow customisation\n      this.dispatchEvent({ type: 'drawlist', layer: layer, li: li })\n    }\n\n    // Add the layer list\n    for (var i = layers.length - 1; i >= 0; i--) {\n      createLi.call(this, layers[i])\n    }\n\n    this.viewChange()\n\n    if (ul === this.panel_) {\n      this.overflow('')\n      // Remove focus\n      this._focus = null;\n    }\n\n  }\n  /** Select a layer\n   * @param {ol.layer.Layer} layer\n   * @returns {string} the layer classname\n   * @api\n   */\n  getLayerClass(layer) {\n    if (!layer)\n      return 'none'\n    if (layer.getLayers)\n      return 'ol-layer-group'\n    if (layer instanceof ol_layer_Vector)\n      return 'ol-layer-vector'\n    if (layer instanceof ol_layer_VectorTile)\n      return 'ol-layer-vectortile'\n    if (layer instanceof ol_layer_Tile)\n      return 'ol-layer-tile'\n    if (layer instanceof ol_layer_Image)\n      return 'ol-layer-image'\n    if (layer instanceof ol_layer_Heatmap)\n      return 'ol-layer-heatmap'\n    /* ol < 6 compatibility VectorImage is not defined */\n    // if (layer instanceof ol_layer_VectorImage) return 'ol-layer-vectorimage';\n    if (layer.getFeatures)\n      return 'ol-layer-vectorimage'\n    /* */\n    return 'unknown'\n  }\n  /** Select a layer\n   * @param {ol.layer.Layer} layer\n   * @api\n   */\n  selectLayer(layer, silent) {\n    if (!layer) {\n      if (!this.getMap())\n        return\n      layer = this.getMap().getLayers().item(this.getMap().getLayers().getLength() - 1)\n    }\n    this._selectedLayer = layer\n    // Has focus ?\n    if (this.element.querySelector('input.ol-visibility:focus')) {\n      this._focus = layer;\n    }\n    // Draw\n    this.drawPanel()\n    if (!silent) {\n      this.dispatchEvent({ type: 'select', layer: layer })\n    }\n  }\n  /** Get selected layer\n   * @returns {ol.layer.Layer}\n   */\n  getSelection() {\n    return this._selectedLayer\n  }\n  /** Handle progress bar for a layer\n  *\t@private\n  */\n  setprogress_(layer) {\n    if (!layer.layerswitcher_progress) {\n      var loaded = 0\n      var loading = 0\n      var draw = function () {\n        if (loading === loaded) {\n          loading = loaded = 0\n          ol_ext_element.setStyle(layer.layerswitcher_progress, { width: 0 }) // layer.layerswitcher_progress.width(0);\n        } else {\n          ol_ext_element.setStyle(layer.layerswitcher_progress, { width: (loaded / loading * 100).toFixed(1) + '%' }) // layer.layerswitcher_progress.css('width', (loaded / loading * 100).toFixed(1) + '%');\n        }\n      }\n      layer.getSource().on('tileloadstart', function () {\n        loading++\n        draw()\n      })\n      layer.getSource().on('tileloadend', function () {\n        loaded++\n        draw()\n      })\n      layer.getSource().on('tileloaderror', function () {\n        loaded++\n        draw()\n      })\n    }\n  }\n}\n\n/** List of tips for internationalization purposes\n*/\nol_control_LayerSwitcher.prototype.tip = {\n  up: \"up/down\",\n  down: \"down\",\n  info: \"informations...\",\n  extent: \"zoom to extent\",\n  trash: \"remove layer\",\n  plus: \"expand/shrink\"\n};\n\nexport default ol_control_LayerSwitcher\n","/*\tCopyright (c) 2015 Jean-Marc VIGLINO, \n\treleased under the CeCILL-B license (French BSD license)\n\t(http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport ol_control_LayerSwitcher from './LayerSwitcher.js'\nimport ol_ext_element from '../util/element.js';\n\n/**\n * OpenLayers Layer Switcher Control.\n *\n * @constructor\n * @extends {ol_control_LayerSwitcher}\n * @param {Object=} options Control options.\n */\nvar ol_control_LayerPopup = class olcontrolLayerPopup extends ol_control_LayerSwitcher {\n\tconstructor(options) {\n\t\toptions = options || {};\n\t\toptions.switcherClass = 'ol-layerswitcher-popup' + (options.switcherClass ? ' ' + options.switcherClass : '');\n\t\tif (options.mouseover !== false) options.mouseover = true;\n\t\tsuper(options);\n\t}\n\t/** Disable overflow\n\t*/\n\toverflow() { }\n\t/** Render a list of layer\n\t * @param {elt} element to render\n\t * @layers {Array{ol.layer}} list of layer to show\n\t * @api stable\n\t */\n\tdrawList(ul, layers) {\n\t\tvar self = this;\n\n\t\tvar setVisibility = function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar l = self._getLayerForLI(this);\n\t\t\tself.switchLayerVisibility(l, layers);\n\t\t\tif (e.type === 'touchstart')\n\t\t\t\tself.element.classList.add('ol-collapsed');\n\t\t};\n\n\t\tlayers.forEach(function (layer) {\n\t\t\tif (self.displayInLayerSwitcher(layer)) {\n\t\t\t\tvar d = ol_ext_element.create('LI', {\n\t\t\t\t\thtml: layer.get('title') || layer.get('name'),\n\t\t\t\t\ton: { 'click touchstart': setVisibility },\n\t\t\t\t\tparent: ul\n\t\t\t\t});\n\t\t\t\tself._setLayerForLI(d, layer);\n\n\t\t\t\tif (self.testLayerVisibility(layer))\n\t\t\t\t\td.classList.add('ol-layer-hidden');\n\t\t\t\tif (layer.getVisible())\n\t\t\t\t\td.classList.add('ol-visible');\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport default ol_control_LayerPopup\n","/*\tCopyright (c) 2017 Jean-Marc VIGLINO, \n\treleased under the CeCILL-B license (French BSD license)\n\t(http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\n\nimport ol_control_Control from 'ol/control/Control.js'\nimport ol_ext_element from '../util/element.js';\n\n/** Control overlay for OL3\n * The overlay control is a control that display an overlay over the map\n *\n * @constructor\n * @extends {ol_control_Control}\n * @fire change:visible\n * @param {Object=} options Control options.\n *  @param {string} className class of the control\n *  @param {boolean} options.closeBox add a close button\n *  @param {boolean} options.hideOnClick close dialog when click\n */\nvar ol_control_Notification = class olcontrolNotification extends ol_control_Control {\n  constructor(options) {\n    options = options || {};\n    var element = document.createElement('div');\n    super({\n      element: element,\n      target: options.target\n    });\n\n    this.contentElement = ol_ext_element.create('DIV', {\n      click: function () {\n        if (this.get('hideOnClick'))\n          this.hide();\n      }.bind(this),\n      parent: element\n    });\n\n    var classNames = (options.className || \"\") + \" ol-notification\";\n    if (!options.target) {\n      classNames += \" ol-unselectable ol-control ol-collapsed\";\n    }\n    element.setAttribute('class', classNames);\n\n    this.set('closeBox', options.closeBox);\n    this.set('hideOnClick', options.hideOnClick);\n  }\n  /**\n   * Display a notification on the map\n   * @param {string|node|undefined} what the notification to show, default get the last one\n   * @param {number} [duration=3000] duration in ms, if -1 never hide\n   */\n  show(what, duration) {\n    var self = this;\n    var elt = this.element;\n    if (what) {\n      if (what instanceof Node) {\n        this.contentElement.innerHTML = '';\n        this.contentElement.appendChild(what);\n      } else {\n        this.contentElement.innerHTML = what;\n      }\n      if (this.get('closeBox')) {\n        this.contentElement.classList.add('ol-close');\n        ol_ext_element.create('SPAN', {\n          className: 'closeBox',\n          click: function () { this.hide(); }.bind(this),\n          parent: this.contentElement\n        });\n      } else {\n        this.contentElement.classList.remove('ol-close');\n      }\n    }\n\n    if (this._listener) {\n      clearTimeout(this._listener);\n      this._listener = null;\n    }\n    elt.classList.add('ol-collapsed');\n    this._listener = setTimeout(function () {\n      elt.classList.remove('ol-collapsed');\n      if (!duration || duration >= 0) {\n        self._listener = setTimeout(function () {\n          elt.classList.add('ol-collapsed');\n          self._listener = null;\n        }, duration || 3000);\n      } else {\n        self._listener = null;\n      }\n    }, 100);\n  }\n  /**\n   * Remove a notification on the map\n   */\n  hide() {\n    if (this._listener) {\n      clearTimeout(this._listener);\n      this._listener = null;\n    }\n    this.element.classList.add('ol-collapsed');\n  }\n  /**\n   * Toggle a notification on the map\n   * @param {number} [duration=3000] duration in ms\n   */\n  toggle(duration) {\n    if (this.element.classList.contains('ol-collapsed')) {\n      this.show(null, duration);\n    } else {\n      this.hide();\n    }\n  }\n}\n\nexport default ol_control_Notification\n","\n/*\tCopyright (c) 2017 Jean-Marc VIGLINO, \n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\n\nimport ol_control_Control from 'ol/control/Control.js'\nimport ol_ext_element from '../util/element.js'\n\n/** Control overlay for OL3\n * The overlay control is a control that display an overlay over the map\n *\n * @constructor\n * @extends {ol_control_Control}\n * @fire change:visible\n * @param {Object=} options Control options.\n *\t@param {String} options.className class of the control\n*\t@param {String|Element} options.content\n*\t@param {bool} options.hideOnClick hide the control on click, default false\n*\t@param {bool} options.closeBox add a closeBox to the control, default false\n*/\nvar ol_control_Overlay = class olcontrolOverlay extends ol_control_Control {\n  constructor(options) {\n    options = options || {};\n\n    var element = ol_ext_element.create('DIV', {\n      className: 'ol-unselectable ol-overlay ' + (options.className || ''),\n      html: options.content\n    });\n    super({\n      element: element,\n      target: options.target\n    });\n\n    var self = this;\n    if (options.hideOnClick) {\n      element.addEventListener('click', function () { self.hide(); });\n    }\n    this.set('closeBox', options.closeBox);\n\n    this._timeout = false;\n    this.setContent(options.content);\n  }\n  /** Set the content of the overlay\n  * @param {string|Element} html the html to display in the control\n  */\n  setContent(html) {\n    var self = this;\n    if (html) {\n      var elt = this.element;\n      if (html instanceof Element) {\n        elt.innerHTML = '';\n        elt.appendChild(html);\n      }\n      else if (html !== undefined)\n        elt.innerHTML = html;\n      if (this.get(\"closeBox\")) {\n        var cb = document.createElement(\"div\");\n        cb.classList.add(\"ol-closebox\");\n        cb.addEventListener(\"click\", function () { self.hide(); });\n        elt.insertBefore(cb, elt.firstChild);\n      }\n    }\n  }\n  /** Set the control visibility\n  * @param {string|Element} html the html to display in the control\n  * @param {ol.coordinate} coord coordinate of the top left corner of the control to start from\n  */\n  show(html, coord) {\n    var self = this;\n    var elt = this.element;\n    elt.style.display = 'block';\n    if (coord) {\n      this.center_ = this.getMap().getPixelFromCoordinate(coord);\n      elt.style.top = this.center_[1] + 'px';\n      elt.style.left = this.center_[0] + 'px';\n    } else {\n      //TODO: Do fix from  hkollmann pull request\n      this.center_ = false;\n      elt.style.top = \"\";\n      elt.style.left = \"\";\n    }\n    if (html) this.setContent(html);\n    if (this._timeout) clearTimeout(this._timeout);\n    this._timeout = setTimeout(function () {\n      elt.classList.add(\"ol-visible\");\n      elt.style.top = \"\";\n      elt.style.left = \"\";\n      self.dispatchEvent({ type: 'change:visible', visible: true, element: self.element });\n    }, 10);\n  }\n  /** Show an image\n   * @param {string} src image url\n   * @param {*} options\n   *  @param {string} options.title\n   *  @param {ol.coordinate} coordinate\n   */\n  showImage(src, options) {\n    options = options || {};\n    var content = ol_ext_element.create('DIV', {\n      className: 'ol-fullscreen-image'\n    });\n    ol_ext_element.create('IMG', {\n      src: src,\n      parent: content\n    });\n    if (options.title) {\n      content.classList.add('ol-has-title');\n      ol_ext_element.create('P', {\n        html: options.title,\n        parent: content\n      });\n    }\n    this.show(content, options.coordinate);\n  }\n  /** Set the control visibility hidden\n  */\n  hide() {\n    var elt = this.element;\n    this.element.classList.remove(\"ol-visible\");\n    if (this.center_) {\n      elt.style.top = this.center_[1] + 'px';\n      elt.style.left = this.center_[0] + 'px';\n      this.center_ = false;\n    }\n    if (this._timeout) clearTimeout(this._timeout);\n    this._timeout = setTimeout(function () { elt.style.display = 'none'; }, 500);\n    this.dispatchEvent({ type: 'change:visible', visible: false, element: this.element });\n  }\n  /** Toggle control visibility\n  */\n  toggle() {\n    if (this.getVisible()) this.hide();\n    else this.show();\n  }\n  /** Get the control visibility\n  * @return {boolean} b\n  */\n  getVisible() {\n    return ol_ext_element.getStyle(this.element, 'display') !== 'none';\n  }\n  /** Change class name\n  * @param {String} className a class name or a list of class names separated by a space\n  */\n  setClass(className) {\n    var vis = this.element.classList.contains('ol-visible');\n    this.element.className = ('ol-unselectable ol-overlay ' + (vis ? 'ol-visible ' : '') + className).trim();\n  }\n}\n\nexport default ol_control_Overlay\n","/*\tCopyright (c) 2017 Jean-Marc VIGLINO,\n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport {unByKey as ol_Observable_unByKey} from 'ol/Observable.js'\nimport ol_control_Control from 'ol/control/Control.js'\nimport {getMapScale as ol_sphere_getMapScale} from '../geom/sphere.js'\nimport {setMapScale as ol_sphere_setMapScale} from '../geom/sphere.js'\n\n/**\n * Scale Control.\n * A control to display the scale of the center on the map\n *\n * @constructor\n * @extends {ol_control_Control}\n * @fires select\n * @fires change:input\n * @param {Object=} options\n *  @param {string} options.className control class name\n *  @param {string} options.ppi screen ppi, default 96\n * \t@param {string} options.editable make the control editable, default true\n */\nvar ol_control_Scale = class olcontrolScale extends ol_control_Control {\n  constructor(options) {\n    options = options || {};\n    if (options.typing === undefined) options.typing = 300;\n\n    var element = document.createElement(\"DIV\");\n    var classNames = (options.className || \"\") + \" ol-scale\";\n    if (!options.target) {\n      classNames += \" ol-unselectable ol-control\";\n    }\n    super({\n      element: element,\n      target: options.target\n    });\n\n    this._input = document.createElement(\"INPUT\");\n    this._input.value = '-';\n    element.setAttribute('class', classNames);\n    if (options.editable === false) this._input.readOnly = true;\n    element.appendChild(this._input);\n\n    this._input.addEventListener(\"change\", this.setScale.bind(this));\n\n    this.set('ppi', options.ppi || 96);\n  }\n  /**\n   * Remove the control from its current map and attach it to the new map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {ol.Map} map Map.\n   * @api stable\n   */\n  setMap(map) {\n    if (this._listener)\n      ol_Observable_unByKey(this._listener);\n    this._listener = null;\n\n    super.setMap(map);\n\n    // Get change (new layer added or removed)\n    if (map) {\n      this._listener = map.on('moveend', this.getScale.bind(this));\n    }\n  }\n  /** Display the scale\n   */\n  getScale() {\n    var map = this.getMap();\n    if (map) {\n      var d = ol_sphere_getMapScale(map, this.get('ppi'));\n      this._input.value = this.formatScale(d);\n      return d;\n    }\n  }\n  /** Format the scale 1/d\n   * @param {Number} d\n   * @return {string} formated string\n   */\n  formatScale(d) {\n    if (d > 100)\n      d = Math.round(d / 100) * 100;\n    else\n      d = Math.round(d);\n    return '1 / ' + d.toLocaleString();\n  }\n  /** Set the current scale (will change the scale of the map)\n   * @param {Number} value the scale factor\n   */\n  setScale(value) {\n    var map = this.getMap();\n    if (map && value) {\n      if (value.target) {\n        value = value.target.value;\n      }\n      ol_sphere_setMapScale(map, value, this.get('ppi'));\n    }\n    this.getScale();\n  }\n}\n\nexport default ol_control_Scale","import {getDistance as ol_sphere_getDistance} from 'ol/sphere.js'\nimport {transform as ol_proj_transform} from 'ol/proj.js'\n\n/** Compute great circle bearing of two points.\n * @See http://www.movable-type.co.uk/scripts/latlong.html for the original code\n * @param {ol.coordinate} origin origin in lonlat\n * @param {ol.coordinate} destination destination in lonlat\n * @return {number} bearing angle in radian\n */\nvar ol_sphere_greatCircleBearing = function(origin, destination) {\n  var toRad = Math.PI/180;\n  var ori = [ origin[0]*toRad, origin[1]*toRad ];\n  var dest = [ destination[0]*toRad, destination[1]*toRad ];\n\n  var bearing = Math.atan2(\n    Math.sin(dest[0] - ori[0]) * Math.cos(dest[1]),\n    Math.cos(ori[1]) * Math.sin(dest[1]) - Math.sin(ori[1]) * Math.cos(dest[1]) * Math.cos(dest[0] - ori[0])\n  );\n  return bearing;\n};\n\nexport {ol_sphere_greatCircleBearing as greatCircleBearing}\n\n/** \n * Computes the destination point given an initial point, a distance and a bearing\n * @See http://www.movable-type.co.uk/scripts/latlong.html for the original code\n * @param {ol.coordinate} origin stating point in lonlat coords\n * @param {number} distance\n * @param {number} bearing bearing angle in radian\n * @param {*} options\n *  @param {booelan} normalize normalize longitude beetween -180/180, deafulet true\n *  @param {number|undefined} options.radius sphere radius, default 6371008.8\n */\nvar ol_sphere_computeDestinationPoint = function(origin, distance, bearing, options) {\n  options = options || {};\n  var toRad = Math.PI/180;\n  var radius = options.radius || 6371008.8;\n\n  var phi1 = origin[1] * toRad;\n  var lambda1 = origin[0] * toRad;\n  var delta = distance / radius;\n\n  var phi2 = Math.asin(\n    Math.sin(phi1) * Math.cos(delta) +\n    Math.cos(phi1) * Math.sin(delta) * Math.cos(bearing)\n  );\n\n  var lambda2 = lambda1 +\n    Math.atan2(\n      Math.sin(bearing) * Math.sin(delta) * Math.cos(phi1),\n      Math.cos(delta) - Math.sin(phi1) * Math.sin(phi2)\n    );\n\n  var lon = lambda2 / toRad;\n  // normalise to >=-180 and <=180° \n  if (options.normalize!==false && (lon < -180 || lon > 180)) {\n    lon = ((lon * 540) % 360) - 180;\n  }\n\n  return [ lon, phi2 / toRad ];\n};\n\nexport {ol_sphere_computeDestinationPoint as computeDestinationPoint}\n\n/** Calculate a track along the great circle given an origin and a destination\n * @param {ol.coordinate} origin origin in lonlat\n * @param {ol.coordinate} destination destination in lonlat\n * @param {number} distance distance between point along the track in meter, default 1km (1000)\n * @param {number|undefined} radius sphere radius, default 6371008.8\n * @return {Array<ol.coordinate>}\n */\nvar ol_sphere_greatCircleTrack = function(origin, destination, options) {\n  options = options || {};\n  var bearing = ol_sphere_greatCircleBearing(origin, destination);\n  var dist = ol_sphere_getDistance(origin, destination, options.radius);\n  var distance = options.distance || 1000;\n  var d = distance;\n  var geom = [origin];\n  while (d < dist) {\n    geom.push(ol_sphere_computeDestinationPoint(origin, d, bearing, { radius: options.radius, normalize: false }));\n    d += distance;\n  }\n  var pt = ol_sphere_computeDestinationPoint(origin, dist, bearing, { radius: options.radius, normalize: false });\n  if (Math.abs(pt[0]-destination[0]) > 1) {\n    if (pt[0] > destination[0]) destination[0] += 360;\n    else destination[0] -= 360;\n  } \n  geom.push(destination);\n  return geom;\n};\n\nexport {ol_sphere_greatCircleTrack as greatCircleTrack}\n\n/** Get map scale factor\n * @param {ol_Map} map\n * @param {number} [dpi=96] dpi, default 96\n * @return {number}\n */\nvar ol_sphere_getMapScale = function (map, dpi) {\n  var view = map.getView();\n  var proj = view.getProjection();\n  var center = view.getCenter();\n  var px = map.getPixelFromCoordinate(center);\n  px[1] += 1;\n  var coord = map.getCoordinateFromPixel(px);\n  var d = ol_sphere_getDistance(\n    ol_proj_transform(center, proj, 'EPSG:4326'),\n    ol_proj_transform(coord, proj, 'EPSG:4326'));\n  d *= (dpi||96) /.0254\n  return d;\n};\nexport {ol_sphere_getMapScale as getMapScale}\n\n/** Set map scale factor\n * @param {ol_Map} map\n * @param {number|string} scale the scale factor or a scale string as 1/xxx\n * @param {number} [dpi=96] dpi, default 96\n * @return {number} scale factor\n */\nvar ol_sphere_setMapScale = function (map, scale, dpi) {\n  if (map && scale) {\n    var fac = scale;\n    if (typeof(scale)==='string') {\n      scale = scale.replace(':','/').split('/');\n      fac = scale[1];\n      if (!fac) fac = scale[0] || '';\n      fac = fac.replace(/[^\\d]/g,'');\n      fac = parseInt(fac);\n      if (scale[1]) {\n        var num = parseInt(scale[0]);\n        if (num) fac /= num;\n      }\n    }\n    if (!fac) return;\n    // Calculate new resolution\n    var view = map.getView();\n    var proj = view.getProjection();\n    var center = view.getCenter();\n    var px = map.getPixelFromCoordinate(center);\n    px[1] += 1;\n    var coord = map.getCoordinateFromPixel(px);\n    var d = ol_sphere_getDistance(\n      ol_proj_transform(center, proj, 'EPSG:4326'),\n      ol_proj_transform(coord, proj, 'EPSG:4326'));\n    d *= (dpi || 96) /.0254\n    view.setResolution(view.getResolution()*fac/d);\n    return fac;\n  }\n};\nexport {ol_sphere_setMapScale as setMapScale}\n","/*\tCopyright (c) 2017 Jean-Marc VIGLINO,\n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport ol_control_Control from 'ol/control/Control.js'\nimport {unByKey as ol_Observable_unByKey} from 'ol/Observable.js'\n\nimport ol_ext_element from '../util/element.js'\n\n/**\n * Search Control.\n * This is the base class for search controls. You can use it for simple custom search or as base to new class.\n * @see ol_control_SearchFeature\n * @see ol_control_SearchPhoton\n *\n * @constructor\n * @extends {ol_control_Control}\n * @fires select\n * @fires change:input\n * @param {Object=} options\n *  @param {string} options.className control class name\n *  @param {Element | string | undefined} options.target Specify a target if you want the control to be rendered outside of the map's viewport.\n *  @param {string | undefined} options.title Title to use for the search button tooltip, default \"Search\"\n *  @param {string | undefined} options.reverseTitle Title to use for the reverse geocoding button tooltip, default \"Click on the map...\"\n *  @param {string | undefined} options.placeholder placeholder, default \"Search...\"\n *  @param {boolean | undefined} options.reverse enable reverse geocoding, default false\n *  @param {string | undefined} options.inputLabel label for the input, default none\n *  @param {string | undefined} options.collapsed search is collapsed on start, default true\n *  @param {string | undefined} options.noCollapse prevent collapsing on input blur, default false\n *  @param {number | undefined} options.typing a delay on each typing to start searching (ms) use -1 to prevent autocompletion, default 300.\n *  @param {integer | undefined} options.minLength minimum length to start searching, default 1\n *  @param {integer | undefined} options.maxItems maximum number of items to display in the autocomplete list, default 10\n *  @param {integer | undefined} options.maxHistory maximum number of items to display in history. Set -1 if you don't want history, default maxItems\n *  @param {function} options.getTitle a function that takes a feature and return the name to display in the index.\n *  @param {function} options.autocomplete a function that take a search string and callback function to send an array\n *  @param {function} options.onselect a function called when a search is selected\n *  @param {boolean} options.centerOnSelect center map on search, default false\n *  @param {number|boolean} options.zoomOnSelect center map on search and zoom to value if zoom < value, default false\n */\nvar ol_control_Search = class olcontrolSearch extends ol_control_Control {\n  constructor(options) {\n    options = options || {};\n\n    var classNames = (options.className || '') + ' ol-search'\n      + (options.target ? '' : ' ol-unselectable ol-control');\n    var element = ol_ext_element.create('DIV', {\n      className: classNames\n    });\n\n    super({\n      element: element,\n      target: options.target\n    });\n\n    var self = this;\n    if (options.typing == undefined) {\n      options.typing = 300;\n    }\n\n    // Class name for history\n    this._classname = options.className || 'search';\n\n    if (options.collapsed !== false) element.classList.add('ol-collapsed');\n    if (!options.target) {\n      this.button = document.createElement('button');\n      this.button.setAttribute('type', 'button');\n      this.button.setAttribute('title', options.title || options.label || 'Search');\n      this.button.addEventListener('click', function () {\n        element.classList.toggle('ol-collapsed');\n        if (!element.classList.contains('ol-collapsed')) {\n          element.querySelector('input.search').focus();\n          var listElements = element.querySelectorAll('li');\n          for (var i = 0; i < listElements.length; i++) {\n            listElements[i].classList.remove('select');\n          }\n          // Display history\n          if (!input.value) {\n            self.drawList_();\n          }\n        }\n      });\n      element.appendChild(this.button);\n    }\n\n    // Input label\n    if (options.inputLabel) {\n      var label = document.createElement(\"LABEL\");\n      label.innerText = options.inputLabel;\n      element.appendChild(label);\n    }\n    // Search input\n    var tout, cur = \"\";\n    var input = this._input = document.createElement(\"INPUT\");\n    input.setAttribute(\"type\", \"search\");\n    input.setAttribute(\"class\", \"search\");\n    input.setAttribute(\"autocomplete\", \"off\");\n    input.setAttribute(\"placeholder\", options.placeholder || \"Search...\");\n    input.addEventListener(\"change\", function (e) {\n      self.dispatchEvent({ type: \"change:input\", input: e, value: input.value });\n    });\n    var doSearch = function (e) {\n      // console.log(e.type+\" \"+e.key)\n      var li = element.querySelector(\"ul.autocomplete li.select\");\n      var val = input.value;\n      // move up/down\n      if (e.key == 'ArrowDown' || e.key == 'ArrowUp' || e.key == 'Down' || e.key == 'Up') {\n        if (li) {\n          var newli = (/Down/.test(e.key)) ? li.nextElementSibling : li.previousElementSibling;\n          if (newli && !newli.classList.contains('copy')) {\n            li.classList.remove(\"select\");\n            newli.classList.add(\"select\");\n            input.value = newli.innerText;\n          }\n        } else {\n          li = element.querySelector(\"ul.autocomplete li\")\n          if (li) {\n            li.classList.add(\"select\");\n            input.value = li.innerText;\n          }\n        }\n      }\n\n      // Clear input\n      else if (e.type == 'input') {\n        if (!val) {\n          setTimeout(function () {\n            self.drawList_();\n          }, 200);\n        }\n        if (li) {\n          input.value = val = '';\n          li.classList.remove(\"select\");\n        }\n      }\n\n      // Select in the list\n      else if (li && (e.type === \"search\" || e.key === \"Enter\")) {\n        if (element.classList.contains(\"ol-control\")) {\n          input.blur();\n        }\n        li.classList.remove(\"select\");\n        cur = val;\n        self._handleSelect(self._list[li.getAttribute(\"data-search\")]);\n      }\n\n      // Search / autocomplete\n      else if ((e.type === \"search\" || e.key === 'Enter')\n        || (cur != val && options.typing >= 0)) {\n        // current search\n        cur = val;\n        if (cur) {\n          // prevent searching on each typing\n          if (tout) {\n            clearTimeout(tout);\n          }\n          var minLength = self.get(\"minLength\");\n          tout = setTimeout(function () {\n            if (cur.length >= minLength) {\n              var s = self.autocomplete(cur, function (auto) { self.drawList_(auto); });\n              if (s) {\n                self.drawList_(s);\n              }\n            } else {\n              self.drawList_();\n            }\n          }, options.typing);\n        } else {\n           self.drawList_();\n        }\n      }\n\n      // Clear list selection\n      else {\n        li = element.querySelector(\"ul.autocomplete li\");\n        if (li) li.classList.remove('select');\n      }\n    };\n    input.addEventListener(\"keyup\", doSearch);\n    input.addEventListener(\"search\", doSearch);\n    input.addEventListener(\"cut\", doSearch);\n    input.addEventListener(\"paste\", doSearch);\n    input.addEventListener(\"input\", doSearch);\n    if (!options.noCollapse) {\n      input.addEventListener('blur', function () {\n        setTimeout(function () {\n          if (input !== document.activeElement) {\n            element.classList.add('ol-collapsed');\n            this.set('reverse', false);\n            element.classList.remove('ol-revers');\n          }\n        }.bind(this), 200);\n      }.bind(this));\n      input.addEventListener('focus', function () {\n        if (!this.get('reverse')) {\n          element.classList.remove('ol-collapsed');\n          element.classList.remove('ol-revers');\n        }\n      }.bind(this));\n      input.addEventListener('keydown', function() {\n        this.set('reverse', false);\n        element.classList.remove('ol-collapsed');\n        element.classList.remove('ol-revers');\n      }.bind(this))\n    }\n    element.appendChild(input);\n    // Reverse geocode\n    if (options.reverse) {\n      var reverse = ol_ext_element.create('BUTTON', {\n        type: 'button',\n        class: 'ol-revers',\n        title: options.reverseTitle || 'click on the map',\n        on: { \n          focus: function () {\n            if (!this.get('reverse')) {\n              this.set('reverse', !this.get('reverse'));\n              input.focus();\n              element.classList.add('ol-revers');\n            } else {\n              this.set('reverse', false);\n            }\n          }.bind(this)\n        }\n      });\n      element.appendChild(reverse);\n    }\n    // Autocomplete list\n    var ul = document.createElement('ul');\n    ul.classList.add('autocomplete');\n    element.appendChild(ul);\n\n    if (typeof (options.getTitle) == 'function') this.getTitle = options.getTitle;\n    if (typeof (options.autocomplete) == 'function') this.autocomplete = options.autocomplete;\n\n    // Options\n    this.set('copy', options.copy);\n    this.set('minLength', options.minLength || 1);\n    this.set('maxItems', options.maxItems || 10);\n    this.set('maxHistory', options.maxHistory || options.maxItems || 10);\n\n    // Select\n    if (options.onselect)\n      this.on('select', options.onselect);\n    // Center on select\n    if (options.centerOnSelect) {\n      this.on('select', function (e) {\n        var map = this.getMap();\n        if (map) {\n          map.getView().setCenter(e.coordinate);\n        }\n      }.bind(this));\n    }\n    // Zoom on select\n    if (options.zoomOnSelect) {\n      this.on('select', function (e) {\n        var map = this.getMap();\n        if (map) {\n          map.getView().setCenter(e.coordinate);\n          if (map.getView().getZoom() < options.zoomOnSelect)\n            map.getView().setZoom(options.zoomOnSelect);\n        }\n      }.bind(this));\n    }\n\n    // History\n    this.restoreHistory();\n    this.drawList_();\n  }\n  /**\n   * Remove the control from its current map and attach it to the new map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {ol.Map} map Map.\n   * @api stable\n   */\n  setMap(map) {\n    if (this._listener) ol_Observable_unByKey(this._listener);\n    this._listener = null;\n\n    super.setMap(map);\n\n    if (map) {\n      this._listener = map.on('click', this._handleClick.bind(this));\n    }\n  }\n  /** Collapse the search\n   * @param {boolean} [b=true]\n   * @api\n   */\n  collapse(b) {\n    if (b === false)\n      this.element.classList.remove('ol-collapsed');\n    else\n      this.element.classList.add('ol-collapsed');\n  }\n  /** Get the input field\n  *\t@return {Element}\n  *\t@api\n  */\n  getInputField() {\n    return this._input;\n  }\n  /** Returns the text to be displayed in the menu\n   *\t@param {any} f feature to be displayed\n   *\t@return {string} the text to be displayed in the index, default f.name\n   *\t@api\n   */\n  getTitle(f) {\n    return f.name || \"No title\";\n  }\n  /** Returns title as text\n   *\t@param {any} f feature to be displayed\n   *\t@return {string}\n   *\t@api\n   */\n  _getTitleTxt(f) {\n    return ol_ext_element.create('DIV', {\n      html: this.getTitle(f)\n    }).innerText;\n  }\n  /** Force search to refresh\n   */\n  search() {\n    var search = this.element.querySelector(\"input.search\");\n    this._triggerCustomEvent('search', search);\n  }\n  /** Reverse geocode\n   * @param {Object} event\n   *  @param {ol.coordinate} event.coordinate\n   * @private\n   */\n  _handleClick(e) {\n    if (this.get('reverse')) {\n      document.activeElement.blur();\n      this.reverseGeocode(e.coordinate);\n    }\n  }\n  /** Reverse geocode\n   * @param {ol.coordinate} coord\n   * @param {function | undefined} cback a callback function, default trigger a select event\n   * @api\n   */\n  reverseGeocode( /*coord, cback*/) {\n    // this._handleSelect(f);\n  }\n  /** Trigger custom event on elemebt\n   * @param {*} eventName\n   * @param {*} element\n   * @private\n   */\n  _triggerCustomEvent(eventName, element) {\n    ol_ext_element.dispatchEvent(eventName, element);\n  }\n  /** Set the input value in the form (for initialisation purpose)\n  *\t@param {string} value\n  *\t@param {boolean} search to start a search\n  *\t@api\n  */\n  setInput(value, search) {\n    var input = this.element.querySelector(\"input.search\");\n    input.value = value;\n    if (search)\n      this._triggerCustomEvent(\"keyup\", input);\n  }\n  /** A line has been clicked in the menu > dispatch event\n   * @param {any} f the feature, as passed in the autocomplete\n   * @param {boolean} reverse true if reverse geocode\n   * @param {ol.coordinate} coord\n   * @param {*} options options passed to the event\n   *\t@api\n   */\n  select(f, reverse, coord, options) {\n    var event = { type: \"select\", search: f, reverse: !!reverse, coordinate: coord };\n    if (options) {\n      for (var i in options) {\n        event[i] = options[i];\n      }\n    }\n    this.dispatchEvent(event);\n  }\n  /**\n   * Save history and select\n   * @param {*} f\n   * @param {boolean} reverse true if reverse geocode\n   * @param {*} options options send in the event\n   * @private\n   */\n  _handleSelect(f, reverse, options) {\n    if (!f)\n      return;\n    // Save input in history\n    var hist = this.get('history');\n    // Prevent error on stringify\n    var i;\n    try {\n      var fstr = JSON.stringify(f);\n      for (i = hist.length - 1; i >= 0; i--) {\n        if (!hist[i] || JSON.stringify(hist[i]) === fstr) {\n          hist.splice(i, 1);\n        }\n      }\n    } catch (e) {\n      for (i = hist.length - 1; i >= 0; i--) {\n        if (hist[i] === f) {\n          hist.splice(i, 1);\n        }\n      }\n    }\n    hist.unshift(f);\n    var size = Math.max(0, this.get('maxHistory') || 10) || 0;\n    while (hist.length > size) {\n      hist.pop();\n    }\n    this.saveHistory();\n    // Select feature\n    this.select(f, reverse, null, options);\n    if (reverse) {\n      this.setInput(this._getTitleTxt(f));\n      this.drawList_();\n      setTimeout(function () { this.collapse(false); }.bind(this), 300);\n    }\n  }\n  /** Save history (in the localstorage)\n   */\n  saveHistory() {\n    try {\n      if (this.get('maxHistory') >= 0) {\n        localStorage[\"ol@search-\" + this._classname] = JSON.stringify(this.get('history'));\n      } else {\n        localStorage.removeItem(\"ol@search-\" + this._classname);\n      }\n    } catch (e) { console.warn('Failed to access localStorage...'); }\n  }\n  /** Restore history (from the localstorage)\n   */\n  restoreHistory() {\n    if (this._history[this._classname]) {\n      this.set('history', this._history[this._classname]);\n    } else {\n      try {\n        this._history[this._classname] = JSON.parse(localStorage[\"ol@search-\" + this._classname]);\n        this.set('history', this._history[this._classname]);\n      } catch (e) {\n        this.set('history', []);\n      }\n    }\n  }\n  /**\n   * Remove previous history\n   */\n  clearHistory() {\n    this.set('history', []);\n    this.saveHistory();\n    this.drawList_();\n  }\n  /**\n   * Get history table\n   */\n  getHistory() {\n    return this.get('history');\n  }\n  /** Autocomplete function\n  * @param {string} s search string\n  * @param {function} cback a callback function that takes an array to display in the autocomplete field (for asynchronous search)\n  * @return {Array|false} an array of search solutions or false if the array is send with the cback argument (asnchronous)\n  * @api\n  */\n  autocomplete(s, cback) {\n    cback([]);\n    return false;\n    // or just return [];\n  }\n  /** Draw the list\n  * @param {Array} auto an array of search result\n  * @private\n  */\n  drawList_(auto) {\n    var self = this;\n    var ul = this.element.querySelector(\"ul.autocomplete\");\n    ul.innerHTML = '';\n    this._list = [];\n    if (!auto) {\n      var input = this.element.querySelector(\"input.search\");\n      var value = input.value;\n      if (!value) {\n        auto = this.get('history');\n      } else {\n        return;\n      }\n      ul.setAttribute('class', 'autocomplete history');\n    } else {\n      ul.setAttribute('class', 'autocomplete');\n    }\n    var li, max = Math.min(self.get(\"maxItems\"), auto.length);\n    for (var i = 0; i < max; i++) {\n      if (auto[i]) {\n        if (!i || !self.equalFeatures(auto[i], auto[i - 1])) {\n          li = document.createElement(\"LI\");\n          li.setAttribute(\"data-search\", this._list.length);\n          this._list.push(auto[i]);\n          li.addEventListener(\"click\", function (e) {\n            self._handleSelect(self._list[e.currentTarget.getAttribute(\"data-search\")]);\n          });\n          var title = self.getTitle(auto[i]);\n          if (title instanceof Element)\n            li.appendChild(title);\n          else\n            li.innerHTML = title;\n          ul.appendChild(li);\n        }\n      }\n    }\n    if (max && this.get(\"copy\")) {\n      li = document.createElement(\"LI\");\n      li.classList.add(\"copy\");\n      li.innerHTML = this.get(\"copy\");\n      ul.appendChild(li);\n    }\n  }\n  /** Test if 2 features are equal\n   * @param {any} f1\n   * @param {any} f2\n   * @return {boolean}\n   */\n  equalFeatures( /* f1, f2 */) {\n    return false;\n  }\n}\n\n/** Current history */\nol_control_Search.prototype._history = {};\n\nexport default ol_control_Search\n","import ol_Object from 'ol/Object.js'\n\n/** Ajax request\n * @fires success\n * @fires error\n * @param {*} options\n *  @param {string} options.auth Authorisation as btoa(\"username:password\");\n *  @param {string} options.dataType The type of data that you're expecting back from the server, default JSON\n */\nvar ol_ext_Ajax = class olextAjax extends ol_Object {\n  constructor(options) {\n    options = options || {};\n\n    super();\n\n    this._auth = options.auth;\n    this.set('dataType', options.dataType || 'JSON');\n  }\n  /** Helper for get\n   * @param {*} options\n   *  @param {string} options.url\n   *  @param {string} options.auth Authorisation as btoa(\"username:password\");\n   *  @param {string} options.dataType The type of data that you're expecting back from the server, default JSON\n   *  @param {string} options.success\n   *  @param {string} options.error\n   *  @param {*} options.options get options\n   */\n  static get(options) {\n    var ajax = new ol_ext_Ajax(options);\n    if (options.success)\n      ajax.on('success', function (e) { options.success(e.response, e); });\n    if (options.error)\n      ajax.on('error', function (e) { options.error(e); });\n    ajax.send(options.url, options.data, options.options);\n  }\n  /** Helper to get cors header\n   * @param {string} url\n   * @param {string} callback\n   */\n  static getCORS(url, callback) {\n    var request = new XMLHttpRequest();\n    request.open('GET', url, true);\n    request.send();\n    request.onreadystatechange = function () {\n      if (this.readyState == this.HEADERS_RECEIVED) {\n        callback(request.getResponseHeader('Access-Control-Allow-Origin'));\n      }\n    };\n  }\n  /** Send an ajax request (GET)\n   * @fires success\n   * @fires error\n   * @param {string} url\n   * @param {*} data Data to send to the server as key / value\n   * @param {*} options a set of options that are returned in the\n   *  @param {boolean} options.abort false to prevent aborting the current request, default true\n   */\n  send(url, data, options) {\n    options = options || {};\n    var self = this;\n    // Url\n    var encode = (options.encode !== false);\n    if (encode)\n      url = encodeURI(url);\n\n    // Parameters\n    var parameters = '';\n    for (var index in data) {\n      if (data.hasOwnProperty(index) && data[index] !== undefined) {\n        parameters += (parameters ? '&' : '?') + index + '=' + (encode ? encodeURIComponent(data[index]) : data[index]);\n      }\n    }\n\n    // Abort previous request\n    if (this._request && options.abort !== false) {\n      this._request.abort();\n    }\n\n    // New request\n    var ajax = this._request = new XMLHttpRequest();\n    ajax.open('GET', url + parameters, true);\n    if (options.timeout)\n      ajax.timeout = options.timeout;\n    if (this._auth) {\n      ajax.setRequestHeader(\"Authorization\", \"Basic \" + this._auth);\n    }\n\n    // Load complete\n    this.dispatchEvent({ type: 'loadstart' });\n    ajax.onload = function () {\n      self._request = null;\n      self.dispatchEvent({ type: 'loadend' });\n      if (this.status >= 200 && this.status < 400) {\n        var response;\n        // Decode response\n        try {\n          switch (self.get('dataType')) {\n            case 'JSON': {\n              response = JSON.parse(this.response);\n              break;\n            }\n            default: {\n              response = this.response;\n            }\n          }\n        } catch (e) {\n          // Error\n          self.dispatchEvent({\n            type: 'error',\n            status: 0,\n            statusText: 'parsererror',\n            error: e,\n            options: options,\n            jqXHR: this\n          });\n          return;\n        }\n        // Success\n        //console.log('response',response)\n        self.dispatchEvent({\n          type: 'success',\n          response: response,\n          status: this.status,\n          statusText: this.statusText,\n          options: options,\n          jqXHR: this\n        });\n      } else {\n        self.dispatchEvent({\n          type: 'error',\n          status: this.status,\n          statusText: this.statusText,\n          options: options,\n          jqXHR: this\n        });\n      }\n    };\n\n    // Oops\n    ajax.ontimeout = function () {\n      self._request = null;\n      self.dispatchEvent({ type: 'loadend' });\n      self.dispatchEvent({\n        type: 'error',\n        status: this.status,\n        statusText: 'Timeout',\n        options: options,\n        jqXHR: this\n      });\n    };\n    ajax.onerror = function () {\n      self._request = null;\n      self.dispatchEvent({ type: 'loadend' });\n      self.dispatchEvent({\n        type: 'error',\n        status: this.status,\n        statusText: this.statusText,\n        options: options,\n        jqXHR: this\n      });\n    };\n\n    // GO!\n    ajax.send();\n  }\n}\n\nexport default ol_ext_Ajax","/*\tCopyright (c) 2017 Jean-Marc VIGLINO,\n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport ol_control_Search from './Search.js'\nimport ol_ext_Ajax from '../util/Ajax.js';\n\n/**\n * This is the base class for search controls that use a json service to search features.\n * You can use it for simple custom search or as base to new class.\n *\n * @constructor\n * @extends {ol.control.Search}\n * @fires select\n * @param {any} options extend ol.control.Search options\n *  @param {string} options.className control class name\n *  @param {Element | string | undefined} options.target Specify a target if you want the control to be rendered outside of the map's viewport.\n *  @param {string | undefined} options.title Title to use for the search button tooltip, default \"Search\"\n *  @param {string | undefined} options.reverseTitle Title to use for the reverse geocoding button tooltip, default \"Click on the map...\"\n *  @param {string | undefined} options.placeholder placeholder, default \"Search...\"\n *  @param {number | undefined} options.typing a delay on each typing to start searching (ms), default 1000.\n *  @param {integer | undefined} options.minLength minimum length to start searching, default 3\n *  @param {integer | undefined} options.maxItems maximum number of items to display in the autocomplete list, default 10\n *  @param {function | undefined} options.handleResponse Handle server response to pass the features array to the list\n *\n *  @param {string|undefined} options.url Url of the search api\n *  @param {string | undefined} options.authentication: basic authentication for the search API as btoa(\"login:pwd\")\n */\nvar ol_control_SearchJSON = class olcontrolSearchJSON extends ol_control_Search {\n  constructor(options) {\n    options = options || {};\n    options.className = options.className || 'JSON';\n    delete options.autocomplete;\n    options.minLength = options.minLength || 3;\n    options.typing = options.typing || 800;\n    super(options);\n\n    // Handle Mix Content Warning\n    // If the current connection is an https connection all other connections must be https either\n    var url = options.url || \"\";\n    if (window.location.protocol === \"https:\") {\n      var parser = document.createElement('a');\n      parser.href = url;\n      parser.protocol = window.location.protocol;\n      url = parser.href;\n    }\n    this.set('url', url);\n\n    this._ajax = new ol_ext_Ajax({ dataType: 'JSON', auth: options.authentication });\n    this._ajax.on('success', function (resp) {\n      if (resp.status >= 200 && resp.status < 400) {\n        if (typeof (this._callback) === 'function')\n          this._callback(resp.response);\n      } else {\n        if (typeof (this._callback) === 'function')\n          this._callback(false, 'error');\n        console.log('AJAX ERROR', arguments);\n      }\n    }.bind(this));\n    this._ajax.on('error', function () {\n      if (typeof (this._callback) === 'function')\n        this._callback(false, 'error');\n      console.log('AJAX ERROR', arguments);\n    }.bind(this));\n    // Handle searchin\n    this._ajax.on('loadstart', function () {\n      this.element.classList.add('searching');\n    }.bind(this));\n    this._ajax.on('loadend', function () {\n      this.element.classList.remove('searching');\n    }.bind(this));\n\n    // Overwrite handleResponse\n    if (typeof (options.handleResponse) === 'function')\n      this.handleResponse = options.handleResponse;\n  }\n  /** Send ajax request\n   * @param {string} url\n   * @param {*} data\n   * @param {function} cback a callback function that takes an array of {name, feature} to display in the autocomplete field\n   */\n  ajax(url, data, cback, options) {\n    options = options || {};\n    this._callback = cback;\n    this._ajax.set('dataType', options.dataType || 'JSON');\n    this._ajax.send(url, data, options);\n  }\n  /** Autocomplete function (ajax request to the server)\n   * @param {string} s search string\n   * @param {function} cback a callback function that takes an array of {name, feature} to display in the autocomplete field\n   */\n  autocomplete(s, cback) {\n    var data = this.requestData(s);\n    var url = encodeURI(this.get('url'));\n    this.ajax(url, data, function (resp) {\n      if (typeof (cback) === 'function')\n        cback(this.handleResponse(resp));\n    });\n  }\n  /**\n   * @param {string} s the search string\n   * @return {Object} request data (as key:value)\n   * @api\n   */\n  requestData(s) {\n    return { q: s };\n  }\n  /**\n   * Handle server response to pass the features array to the display list\n   * @param {any} response server response\n   * @return {Array<any>} an array of feature\n   * @api\n   */\n  handleResponse(response) {\n    return response;\n  }\n}\n\nexport default ol_control_SearchJSON\n","/*\tCopyright (c) 2017 Jean-Marc VIGLINO,\n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\nimport {transform as ol_proj_transform} from 'ol/proj.js'\nimport ol_control_SearchJSON from \"./SearchJSON.js\";\n\n/**\n * Search places using the Nominatim geocoder from the OpenStreetmap project.\n *\n * @constructor\n * @extends {ol.control.Search}\n * @fires select\n * @param {Object=} Control options.\n *  @param {string} options.className control class name\n *  @param {boolean | undefined} options.polygon To get output geometry of results (in geojson format), default false.\n *  @param {Array<Number> | undefined} options.viewbox The preferred area to find search results. Any two corner points of the box are accepted in any order as long as they span a real box, default none.\n *  @param {boolean | undefined} options.bounded Restrict the results to only items contained with the bounding box. Restricting the results to the bounding box also enables searching by amenity only. default false\n *  @param {Element | string | undefined} options.target Specify a target if you want the control to be rendered outside of the map's viewport.\n *  @param {string | undefined} options.title Title to use for the search button tooltip, default \"Search\"\n *  @param {string | undefined} options.reverseTitle Title to use for the reverse geocoding button tooltip, default \"Click on the map...\"\n *  @param {string | undefined} options.placeholder placeholder, default \"Search...\"\n *  @param {number | undefined} options.typing a delay on each typing to start autocompletion (ms), default -1 (disabled). NB: default nominatim policy forbids auto-complete usage...\n *  @param {integer | undefined} options.minLength minimum length to start searching, default 3\n *  @param {integer | undefined} options.maxItems maximum number of items to display in the autocomplete list, default 10\n *\n *  @param {string|undefined} options.url URL to Nominatim API, default \"https://nominatim.openstreetmap.org/search\"\n * @see {@link https://wiki.openstreetmap.org/wiki/Nominatim}\n */\nvar ol_control_SearchNominatim = class olcontrolSearchNominatim extends ol_control_SearchJSON {\n  constructor(options) {\n    options = options || {};\n    options.className = options.className || 'nominatim';\n    options.typing = options.typing || -1;\n    options.url = options.url || 'https://nominatim.openstreetmap.org/search';\n    options.copy = '<a href=\"http://www.openstreetmap.org/copyright\" target=\"new\">&copy; OpenStreetMap contributors</a>';\n    \n    super(options);\n    \n    this.set('polygon', options.polygon);\n    this.set('viewbox', options.viewbox);\n    this.set('bounded', options.bounded);\n  }\n  /** Returns the text to be displayed in the menu\n   *\t@param {ol.Feature} f the feature\n  *\t@return {string} the text to be displayed in the index\n  *\t@api\n  */\n  getTitle(f) {\n    var info = [];\n    if (f.class)\n      info.push(f.class);\n    if (f.type)\n      info.push(f.type);\n    var title = f.display_name + (info.length ? \"<i>\" + info.join(' - ') + \"</i>\" : '');\n    if (f.icon)\n      title = \"<img src='\" + f.icon + \"' />\" + title;\n    return (title);\n  }\n  /**\n   * @param {string} s the search string\n   * @return {Object} request data (as key:value)\n   * @api\n   */\n  requestData(s) {\n    var data = {\n      format: \"json\",\n      addressdetails: 1,\n      q: s,\n      polygon_geojson: this.get('polygon') ? 1 : 0,\n      bounded: this.get('bounded') ? 1 : 0,\n      limit: this.get('maxItems')\n    };\n    if (this.get('viewbox'))\n      data.viewbox = this.get('viewbox');\n    return data;\n  }\n  /** A ligne has been clicked in the menu > dispatch event\n   *\t@param {any} f the feature, as passed in the autocomplete\n  *\t@api\n  */\n  select(f) {\n    var c = [Number(f.lon), Number(f.lat)];\n    // Add coordinate to the event\n    try {\n      c = ol_proj_transform(c, 'EPSG:4326', this.getMap().getView().getProjection());\n    } catch (e) { /* ok */ }\n    this.dispatchEvent({ type: \"select\", search: f, coordinate: c });\n  }\n\n  /** Reverse geocode\n   * @param {ol.coordinate} coord\n   * @api\n   */\n  reverseGeocode(coord, cback) {\n    var lonlat = ol_proj_transform(coord, this.getMap().getView().getProjection(), 'EPSG:4326');\n    this.ajax(\n      this.get('url').replace('search', 'reverse'),\n      { lon: lonlat[0], lat: lonlat[1], format: 'json' },\n      function (resp) {\n        if (cback) {\n          cback.call(this, [resp]);\n        } else {\n          if (resp && !resp.error) {\n            this._handleSelect(resp, true);\n          }\n          //this.setInput('', true);\n        }\n      }.bind(this)\n    );\n  }\n\n  /**\n   * Handle server response to pass the features array to the display list\n   * @param {any} response server response\n   * @return {Array<any>} an array of feature\n   * @api\n   */\n  handleResponse(response) {\n    return response.results || response;\n  }\n  /**/\n}  \n\n\nexport default ol_control_SearchNominatim\n","/*\tCopyright (c) 2016 Jean-Marc VIGLINO,\n  released under the CeCILL-B license (French BSD license)\n  (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt).\n*/\n\nimport ol_control_Button from './Button.js'\n\n/** A simple toggle control\n * The control can be created with an interaction to control its activation.\n *\n * @constructor\n * @extends {ol_control_Button}\n * @fires change:active, change:disable\n * @param {Object=} options Control options.\n *  @param {String} [options.className] class of the control\n *  @param {String} [options.classButton] class of the button\n *  @param {String} [options.title] title of the control\n *  @param {String} [options.html] html to insert in the control\n *  @param {ol.interaction} [options.interaction] interaction associated with the control\n *  @param {bool} [options.active] the control is created active, default false\n *  @param {bool} [options.disable] the control is created disabled, default false\n *  @param {ol.control.Bar} [options.bar] a subbar associated with the control (drawn when active if control is nested in a ol.control.Bar)\n *  @param {bool} [options.autoActive] the control will activate when shown in an ol.control.Bar, default false\n *  @param {function} [options.onToggle] callback when control is clicked (or use change:active event)\n *  @param {Object} [options.attributes] key value attributes to set on the button element\n */\nvar ol_control_Toggle = class olcontrolToggle extends ol_control_Button {\n  constructor(options) {\n    options = options || {};\n\n    if (options.toggleFn) {\n      options.onToggle = options.toggleFn; // compat old version\n    }\n    options.handleClick = function () {\n      self.toggle();\n      if (options.onToggle) {\n        options.onToggle.call(self, self.getActive());\n      }\n    };\n    options.className = (options.className || '') + ' ol-toggle';\n    super(options);\n\n    var self = this;\n\n    this.interaction_ = options.interaction;\n    if (this.interaction_) {\n      this.interaction_.setActive(options.active);\n      this.interaction_.on(\"change:active\", function () {\n        self.setActive(self.interaction_.getActive());\n      });\n    }\n\n    this.set(\"title\", options.title);\n\n    this.set(\"autoActivate\", options.autoActivate);\n    if (options.bar) {\n      this.setSubBar(options.bar);\n    }\n\n    this.setActive(options.active);\n    this.setDisable(options.disable);\n  }\n  /**\n   * Set the map instance the control is associated with\n   * and add interaction attached to it to this map.\n   * @param {_ol_Map_} map The map instance.\n   */\n  setMap(map) {\n    if (!map && this.getMap()) {\n      if (this.interaction_) {\n        this.getMap().removeInteraction(this.interaction_);\n      }\n      if (this.subbar_)\n        this.getMap().removeControl(this.subbar_);\n    }\n\n    super.setMap(map);\n\n    if (map) {\n      if (this.interaction_)\n        map.addInteraction(this.interaction_);\n      if (this.subbar_)\n        map.addControl(this.subbar_);\n    }\n  }\n  /** Get the subbar associated with a control\n   * @return {ol_control_Bar}\n   */\n  getSubBar() {\n    return this.subbar_;\n  }\n  /** Set the subbar associated with a control\n   * @param {ol_control_Bar} [bar] a subbar if none remove the current subbar\n   */\n  setSubBar(bar) {\n    var map = this.getMap();\n    if (map && this.subbar_) {\n      map.removeControl(this.subbar_);\n    }\n    this.subbar_ = bar;\n    if (bar) {\n      this.subbar_.setTarget(this.element);\n      this.subbar_.element.classList.add(\"ol-option-bar\");\n      if (map) {\n        map.addControl(this.subbar_);\n      }\n      // Accessibility\n      if (bar.element.id) {\n        this.getButtonElement().setAttribute('aria-controls', bar.element.id);\n        bar.element.setAttribute('aria-labelledby', this.getButtonElement().id);\n        this.on('change:active', function (e) {\n          this.getButtonElement().setAttribute('aria-expanded', !!e.active);\n        }.bind(this));\n      }\n    }\n  }\n  /**\n   * Test if the control is disabled.\n   * @return {bool}\n   * @api stable\n   */\n  getDisable() {\n    var button = this.element.querySelector('button');\n    return button && button.disabled;\n  }\n  /** Disable the control. If disable, the control will be deactivated too.\n  * @param {bool} b disable (or enable) the control, default false (enable)\n  */\n  setDisable(b) {\n    if (this.getDisable() == b) return;\n    this.element.querySelector('button').disabled = b;\n    if (b && this.getActive()) this.setActive(false);\n\n    this.dispatchEvent({ type: 'change:disable', key: 'disable', oldValue: !b, disable: b });\n  }\n  /**\n   * Test if the control is active.\n   * @return {bool}.\n   * @api stable\n   */\n  getActive() {\n    return this.element.classList.contains(\"ol-active\");\n  }\n  /** Toggle control state active/deactive\n   */\n  toggle() {\n    if (this.getActive())\n      this.setActive(false);\n    else\n      this.setActive(true);\n  }\n  /** Change control state\n   * @param {bool} b activate or deactivate the control, default false\n   */\n  setActive(b) {\n    if (this.interaction_) {\n      this.interaction_.setActive(b);\n    }\n    if (this.subbar_) {\n      this.subbar_.setActive(b);\n    }\n    if (this.getActive() === b) {\n      return;\n    }\n    if (b) {\n      this.element.classList.add('ol-active');\n    } else {\n      this.element.classList.remove('ol-active');\n    }\n    this.button_.setAttribute('aria-pressed', b);\n\n    this.dispatchEvent({ type: 'change:active', key: 'active', oldValue: !b, active: b });\n  }\n  /** Set the control interaction\n  * @param {_ol_interaction_} i interaction to associate with the control\n  */\n  setInteraction(i) {\n    this.interaction_ = i;\n  }\n  /** Get the control interaction\n  * @return {_ol_interaction_} interaction associated with the control\n  */\n  getInteraction() {\n    return this.interaction_;\n  }\n}\n\nexport default ol_control_Toggle\n","import ol_style_Style from 'ol/style/Style.js'\nimport ol_style_Stroke from 'ol/style/Stroke.js'\nimport ol_source_Vector from 'ol/source/Vector.js'\nimport ol_style_Fill from 'ol/style/Fill.js'\nimport ol_layer_Vector from 'ol/layer/Vector.js'\nimport ol_geom_Point from 'ol/geom/Point.js'\nimport ol_Feature from 'ol/Feature.js'\nimport ol_Collection from 'ol/Collection.js'\nimport ol_interaction_Pointer from 'ol/interaction/Pointer.js'\nimport ol_style_RegularShape from 'ol/style/RegularShape.js'\nimport {fromExtent as ol_geom_Polygon_fromExtent} from 'ol/geom/Polygon.js'\nimport {boundingExtent as ol_extent_boundingExtent, buffer as ol_extent_buffer, createEmpty as ol_extent_createEmpty, extend as ol_extent_extend, getCenter as ol_extent_getCenter} from 'ol/extent.js'\nimport {unByKey as ol_Observable_unByKey} from 'ol/Observable.js'\nimport ol_geom_Polygon from 'ol/geom/Polygon.js'\nimport ol_ext_element from '../util/element.js'\n\n/** Interaction rotate\n * @constructor\n * @extends {ol_interaction_Pointer}\n * @fires select | rotatestart | rotating | rotateend | translatestart | translating | translateend | scalestart | scaling | scaleend\n * @param {any} options\n *  @param {function} options.filter A function that takes a Feature and a Layer and returns true if the feature may be transformed or false otherwise.\n *  @param {Array<ol.Layer>} options.layers array of layers to transform,\n *  @param {ol.Collection<ol.Feature>} options.features collection of feature to transform,\n *  @param {ol.interaction.Select} [options.select] a select interaction to synchronize with\n *\t@param {ol.EventsConditionType|undefined} options.condition A function that takes an ol.MapBrowserEvent and a feature collection and returns a boolean to indicate whether that event should be handled. default: ol.events.condition.always.\n *\t@param {ol.EventsConditionType|undefined} options.addCondition A function that takes an ol.MapBrowserEvent and returns a boolean to indicate whether that event should be handled ie. the feature will be added to the transforms features. default: ol.events.condition.never.\n *\t@param {number | undefined} options.hitTolerance Tolerance to select feature in pixel, default 0\n *\t@param {bool} options.translateFeature Translate when click on feature\n *\t@param {bool} options.translate Can translate the feature\n *  @param {bool} options.translateBBox Enable translate when the user drags inside the bounding box\n *\t@param {bool} options.stretch can stretch the feature\n *\t@param {bool} options.scale can scale the feature\n *\t@param {bool} options.rotate can rotate the feature\n *\t@param {bool} options.noFlip prevent the feature geometry to flip, default false\n *\t@param {bool} options.selection the intraction handle selection/deselection, if not use the select prototype to add features to transform, default true\n *\t@param {ol.events.ConditionType | undefined} options.keepAspectRatio A function that takes an ol.MapBrowserEvent and returns a boolean to keep aspect ratio, default ol.events.condition.shiftKeyOnly.\n *\t@param {ol.events.ConditionType | undefined} options.modifyCenter A function that takes an ol.MapBrowserEvent and returns a boolean to apply scale & strech from the center, default ol.events.condition.metaKey or ol.events.condition.ctrlKey.\n *\t@param {boolean} options.enableRotatedTransform Enable transform when map is rotated\n *\t@param {boolean} [options.keepRectangle=false] keep rectangle when possible\n *  @param {number} [options.buffer] Increase the extent used as bounding box, default 0\n *\t@param {*} options.style list of ol.style for handles\n *  @param {number|Array<number>|function} [options.pointRadius=0] radius for points or a function that takes a feature and returns the radius (or [radiusX, radiusY]). If not null show handles to transform the points\n */\nvar ol_interaction_Transform = class olinteractionTransform extends ol_interaction_Pointer {\n  constructor(options) {\n    options = options || {}\n    // Extend pointer\n    super({\n      handleDownEvent: function(e) { return self.handleDownEvent_(e) },\n      handleDragEvent: function(e) { return this.handleDragEvent_(e) },\n      handleMoveEvent: function(e) { return this.handleMoveEvent_(e) },\n      handleUpEvent: function(e) { return this.handleUpEvent_(e) },\n    })\n    \n    var self = this\n    this.selection_ = new ol_Collection()\n\n    // Create a new overlay layer for the sketch\n    this.handles_ = new ol_Collection()\n    this.overlayLayer_ = new ol_layer_Vector({\n      source: new ol_source_Vector({\n        features: this.handles_,\n        useSpatialIndex: false,\n        wrapX: false // For vector editing across the -180° and 180° meridians to work properly, this should be set to false\n      }),\n      name: 'Transform overlay',\n      displayInLayerSwitcher: false,\n      // Return the style according to the handle type\n      style: function (feature) {\n        return (self.style[(feature.get('handle') || 'default') + (feature.get('constraint') || '') + (feature.get('option') || '')])\n      },\n      updateWhileAnimating: true,\n      updateWhileInteracting: true,\n    })\n\n    // Collection of feature to transform\n    this.features_ = options.features\n    // Filter or list of layers to transform\n    if (typeof (options.filter) === 'function')\n      this._filter = options.filter\n    this.layers_ = options.layers ? (options.layers instanceof Array) ? options.layers : [options.layers] : null\n\n    this._handleEvent = options.condition || function () { return true }\n    this.addFn_ = options.addCondition || function () { return false }\n    this.setPointRadius(options.pointRadius)\n    /* Translate when click on feature */\n    this.set('translateFeature', (options.translateFeature !== false))\n    /* Can translate the feature */\n    this.set('translate', (options.translate !== false))\n    /* Translate when click on the bounding box */\n    this.set('translateBBox', (options.translateBBox === true))\n    /* Can stretch the feature */\n    this.set('stretch', (options.stretch !== false))\n    /* Can scale the feature */\n    this.set('scale', (options.scale !== false))\n    /* Can rotate the feature */\n    this.set('rotate', (options.rotate !== false))\n    /* Keep aspect ratio */\n    this.set('keepAspectRatio', (options.keepAspectRatio || function (e) { return e.originalEvent.shiftKey }))\n    /* Modify center */\n    this.set('modifyCenter', (options.modifyCenter || function (e) { return e.originalEvent.metaKey || e.originalEvent.ctrlKey }))\n    /* Prevent flip */\n    this.set('noFlip', (options.noFlip || false))\n    /* Handle selection */\n    this.set('selection', (options.selection !== false))\n    /*  */\n    this.set('hitTolerance', (options.hitTolerance || 0))\n    /* Enable view rotated transforms */\n    this.set('enableRotatedTransform', (options.enableRotatedTransform || false))\n    /* Keep rectangle angles 90 degrees */\n    this.set('keepRectangle', (options.keepRectangle || false))\n    /* Add buffer to the feature's extent */\n    this.set('buffer', (options.buffer || 0))\n\n    // Force redraw when changed\n    this.on('propertychange', function () {\n      this.drawSketch_()\n    })\n\n    // setstyle\n    this.setDefaultStyle()\n\n    // Synchronize selection\n    if (options.select) {\n      // this.selection_ = options.select.getFeatures();\n      this.on('change:active', function(e) {\n        if (this.getActive()) {\n          this.setSelection(options.select.getFeatures().getArray())\n        } else {\n          options.select.getFeatures().extend(this.selection_)\n          this.selection_.forEach(function(f) {\n            options.select.getFeatures().push(f)\n          })\n          this.select(null)\n        }\n      }.bind(this))\n    } else {\n      this.on('change:active', function(e) {\n        this.select(null)\n      }.bind(this))\n    }\n\n  }\n  /**\n   * Remove the interaction from its current map, if any,  and attach it to a new\n   * map, if any. Pass `null` to just remove the interaction from the current map.\n   * @param {ol.Map} map Map.\n   * @api stable\n   */\n  setMap(map) {\n    var oldMap = this.getMap()\n    if (oldMap) {\n      oldMap.removeLayer(this.overlayLayer_)\n      if (this.previousCursor_) {\n        ol_ext_element.setCursor(oldMap, this.previousCursor_)\n      }\n      this.previousCursor_ = undefined\n    }\n    super.setMap(map)\n    this.overlayLayer_.setMap(map)\n    if (map === null) {\n      this.select(null)\n    }\n    if (map !== null) {\n      this.isTouch = /touch/.test(map.getViewport().className)\n      this.setDefaultStyle()\n    }\n  }\n  /**\n   * Activate/deactivate interaction\n   * @param {bool}\n   * @api stable\n   */\n  setActive(b) {\n    // this.select(null)\n    if (this.overlayLayer_) this.overlayLayer_.setVisible(b)\n    super.setActive(b)\n  }\n  /** Set default sketch style\n   * @param {Object} [options]\n   *  @param {ol_style_Stroke} [stroke] stroke style for selection rectangle, default red dash\n   *  @param {ol_style_Fill} [fill] fill style for selection rectangle, default red\n   *  @param {ol_style_Stroke} [pointStroke] stroke style for handles, default red\n   *  @param {ol_style_Fill} [pointFill] fill style for handles, default white\n   */\n  setDefaultStyle(options) {\n    options = options || {}\n    // Style\n    var stroke = options.pointStroke || new ol_style_Stroke({ color: [255, 0, 0, 1], width: 1 })\n    var strokedash = options.stroke || new ol_style_Stroke({ color: [255, 0, 0, 1], width: 1, lineDash: [4, 4] })\n    var fill0 = options.fill || new ol_style_Fill({ color: [255, 0, 0, 0.01] })\n    var fill = options.pointFill || new ol_style_Fill({ color: [255, 255, 255, 0.8] })\n    var circle = new ol_style_RegularShape({\n      fill: fill,\n      stroke: stroke,\n      radius: this.isTouch ? 12 : 6,\n      displacement: this.isTouch ? [24, -24] : [12, -12],\n      points: 15\n    })\n    // Old version with no displacement\n    if (!circle.setDisplacement)\n      circle.getAnchor()[0] = this.isTouch ? -10 : -5\n    var bigpt = new ol_style_RegularShape({\n      fill: fill,\n      stroke: stroke,\n      radius: this.isTouch ? 16 : 8,\n      points: 4,\n      angle: Math.PI / 4\n    })\n    var smallpt = new ol_style_RegularShape({\n      fill: fill,\n      stroke: stroke,\n      radius: this.isTouch ? 12 : 6,\n      points: 4,\n      angle: Math.PI / 4\n    })\n    function createStyle(img, stroke, fill) {\n      return [new ol_style_Style({ image: img, stroke: stroke, fill: fill })]\n    }\n    /** Style for handles */\n    this.style = {\n      'default': createStyle(bigpt, strokedash, fill0),\n      'translate': createStyle(bigpt, stroke, fill),\n      'rotate': createStyle(circle, stroke, fill),\n      'rotate0': createStyle(bigpt, stroke, fill),\n      'scale': createStyle(bigpt, stroke, fill),\n      'scale1': createStyle(bigpt, stroke, fill),\n      'scale2': createStyle(bigpt, stroke, fill),\n      'scale3': createStyle(bigpt, stroke, fill),\n      'scalev': createStyle(smallpt, stroke, fill),\n      'scaleh1': createStyle(smallpt, stroke, fill),\n      'scalev2': createStyle(smallpt, stroke, fill),\n      'scaleh3': createStyle(smallpt, stroke, fill),\n    }\n    this.drawSketch_()\n  }\n  /**\n   * Set sketch style.\n   * @param {style} style Style name: 'default','translate','rotate','rotate0','scale','scale1','scale2','scale3','scalev','scaleh1','scalev2','scaleh3'\n   * @param {ol.style.Style|Array<ol.style.Style>} olstyle\n   * @api stable\n   */\n  setStyle(style, olstyle) {\n    if (!olstyle)\n      return\n    if (olstyle instanceof Array)\n      this.style[style] = olstyle\n    else\n      this.style[style] = [olstyle]\n    for (var i = 0; i < this.style[style].length; i++) {\n      var im = this.style[style][i].getImage()\n      if (im) {\n        if (style == 'rotate') {\n          im.getAnchor()[0] = -5\n        }\n        if (this.isTouch)\n          im.setScale(1.8)\n      }\n      var tx = this.style[style][i].getText()\n      if (tx) {\n        if (style == 'rotate')\n          tx.setOffsetX(this.isTouch ? 14 : 7)\n        if (this.isTouch)\n          tx.setScale(1.8)\n      }\n    }\n    this.drawSketch_()\n  }\n  /** Get Feature at pixel\n   * @param {ol.Pixel}\n   * @return {ol.feature}\n   * @private\n   */\n  getFeatureAtPixel_(pixel) {\n    var self = this\n    return this.getMap().forEachFeatureAtPixel(pixel,\n      function (feature, layer) {\n        var found = false\n        // Overlay ?\n        if (!layer) {\n          if (feature === self.bbox_) {\n            if (self.get('translateBBox')) {\n              return { feature: feature, handle: 'translate', constraint: '', option: '' }\n            } else {\n              return false\n            }\n          }\n          self.handles_.forEach(function (f) {\n            if (f === feature)\n              found = true\n          })\n          if (found)\n            return { feature: feature, handle: feature.get('handle'), constraint: feature.get('constraint'), option: feature.get('option') }\n        }\n        // No seletion\n        if (!self.get('selection')) {\n          // Return the currently selected feature the user is interacting with.\n          if (self.selection_.getArray().some(function (f) { return feature === f })) {\n            return { feature: feature }\n          }\n          return null\n        }\n        // filter condition\n        if (self._filter) {\n          if (self._filter(feature, layer))\n            return { feature: feature }\n          else\n            return null\n        }\n\n        // feature belong to a layer\n        else if (self.layers_) {\n          for (var i = 0; i < self.layers_.length; i++) {\n            if (self.layers_[i] === layer)\n              return { feature: feature }\n          }\n          return null\n        }\n\n        // feature in the collection\n        else if (self.features_) {\n          self.features_.forEach(function (f) {\n            if (f === feature)\n              found = true\n          })\n          if (found)\n            return { feature: feature }\n          else\n            return null\n        }\n\n        // Others\n        else\n          return { feature: feature }\n      },\n      { hitTolerance: this.get('hitTolerance') }\n    ) || {}\n  }\n  /** Rotate feature from map view rotation\n   * @param {ol.Feature} f the feature\n   * @param {boolean} clone clone resulting geom\n   * @returns {ol.geom.Geometry | undefined} rotated geometry if no/bad geom\n   */\n  getGeometryRotateToZero_(f, clone) {\n    var origGeom = f.getGeometry()\n    var viewRotation = this.getMap().getView().getRotation()\n    if (viewRotation === 0 || !this.get('enableRotatedTransform')) {\n      return (clone) ? origGeom.clone() : origGeom\n    }\n    var rotGeom = origGeom.clone()\n    rotGeom.rotate(viewRotation * -1, this.getMap().getView().getCenter())\n    return rotGeom\n  }\n  /** Test if rectangle\n   * @param {ol.Geometry} geom\n   * @returns {boolean}\n   * @private\n   */\n  _isRectangle(geom) {\n    if (this.get('keepRectangle') && geom.getType() === 'Polygon') {\n      var coords = geom.getCoordinates()[0]\n      return coords.length === 5\n    }\n    return false\n  }\n  /** Draw transform sketch\n  * @param {boolean} draw only the center\n  */\n  drawSketch_(center) {\n    var i, f, geom\n    var keepRectangle = this.selection_.item(0) && this._isRectangle(this.selection_.item(0).getGeometry())\n    this.overlayLayer_.getSource().clear()\n    // No selection or bad geometry\n    if (!this.selection_.getLength() || !this.selection_.item(0).getGeometry()) {\n      return\n    }\n    var viewRotation = this.getMap().getView().getRotation()\n    var ext = this.getGeometryRotateToZero_(this.selection_.item(0)).getExtent()\n    var coords\n    if (keepRectangle) {\n      coords = this.getGeometryRotateToZero_(this.selection_.item(0)).getCoordinates()[0].slice(0, 4)\n      coords.unshift(coords[3])\n    }\n    // Clone and extend\n    ext = ol_extent_buffer(ext, this.get('buffer'))\n    this.selection_.forEach(function (f) {\n      var extendExt = this.getGeometryRotateToZero_(f).getExtent()\n      ol_extent_extend(ext, extendExt)\n    }.bind(this))\n\n    var ptRadius = (this.selection_.getLength() === 1 ? this._pointRadius(this.selection_.item(0)) : 0)\n    if (ptRadius && !(ptRadius instanceof Array))\n      ptRadius = [ptRadius, ptRadius]\n\n    if (center === true) {\n      if (!this.ispt_) {\n        this.overlayLayer_.getSource().addFeature(new ol_Feature({ geometry: new ol_geom_Point(this.center_), handle: 'rotate0' }))\n        geom = ol_geom_Polygon_fromExtent(ext)\n        if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n          geom.rotate(viewRotation, this.getMap().getView().getCenter())\n        }\n        f = this.bbox_ = new ol_Feature(geom)\n        this.overlayLayer_.getSource().addFeature(f)\n      }\n    } else {\n      if (this.ispt_) {\n        // Calculate extent arround the point\n        var p = this.getMap().getPixelFromCoordinate(ol_extent_getCenter(ext))\n        if (p) {\n          var dx = ptRadius ? ptRadius[0] || 10 : 10\n          var dy = ptRadius ? ptRadius[1] || 10 : 10\n          ext = ol_extent_boundingExtent([\n            this.getMap().getCoordinateFromPixel([p[0] - dx, p[1] - dy]),\n            this.getMap().getCoordinateFromPixel([p[0] + dx, p[1] + dy])\n          ])\n        }\n      }\n      geom = keepRectangle ? new ol_geom_Polygon([coords]) : ol_geom_Polygon_fromExtent(ext)\n      if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n        geom.rotate(viewRotation, this.getMap().getView().getCenter())\n      }\n      f = this.bbox_ = new ol_Feature(geom)\n      var features = []\n      var g = geom.getCoordinates()[0]\n      if (!this.ispt_ || ptRadius) {\n        features.push(f)\n        // Middle\n        if (!this.iscircle_ && !this.ispt_ && this.get('stretch') && this.get('scale'))\n          for (i = 0; i < g.length - 1; i++) {\n            f = new ol_Feature({ geometry: new ol_geom_Point([(g[i][0] + g[i + 1][0]) / 2, (g[i][1] + g[i + 1][1]) / 2]), handle: 'scale', constraint: i % 2 ? \"h\" : \"v\", option: i })\n            features.push(f)\n          }\n        // Handles\n        if (this.get('scale'))\n          for (i = 0; i < g.length - 1; i++) {\n            f = new ol_Feature({ geometry: new ol_geom_Point(g[i]), handle: 'scale', option: i })\n            features.push(f)\n          }\n        // Center\n        if (this.get('translate') && !this.get('translateFeature')) {\n          f = new ol_Feature({ geometry: new ol_geom_Point([(g[0][0] + g[2][0]) / 2, (g[0][1] + g[2][1]) / 2]), handle: 'translate' })\n          features.push(f)\n        }\n      }\n      // Rotate\n      if (!this.iscircle_ && this.get('rotate')) {\n        f = new ol_Feature({ geometry: new ol_geom_Point(g[3]), handle: 'rotate' })\n        features.push(f)\n      }\n      // Add sketch\n      this.overlayLayer_.getSource().addFeatures(features)\n    }\n\n  }\n  /** Select a feature to transform\n  * @param {ol.Feature} feature the feature to transform\n  * @param {boolean} add true to add the feature to the selection, default false\n  */\n  select(feature, add) {\n    if (!feature) {\n      if (this.selection_) {\n        this.selection_.clear()\n        this.drawSketch_()\n      }\n      return\n    }\n    if (!feature.getGeometry || !feature.getGeometry()) return\n    // Add to selection\n    if (add) {\n      this.selection_.push(feature)\n    } else {\n      var index = this.selection_.getArray().indexOf(feature)\n      this.selection_.removeAt(index)\n    }\n    this.ispt_ = (this.selection_.getLength() === 1 ? (this.selection_.item(0).getGeometry().getType() == \"Point\") : false)\n    this.iscircle_ = (this.selection_.getLength() === 1 ? (this.selection_.item(0).getGeometry().getType() == \"Circle\") : false)\n    this.drawSketch_()\n    this.watchFeatures_()\n    // select event\n    this.dispatchEvent({ type: 'select', feature: feature, features: this.selection_ })\n  }\n  /** Update the selection collection.\n  * @param {ol.Collection<ol.Feature>} features the features to transform\n  */\n  setSelection(features) {\n    this.selection_.clear()\n    features.forEach(function (feature) {\n      this.selection_.push(feature)\n    }.bind(this))\n\n    this.ispt_ = (this.selection_.getLength() === 1 ? (this.selection_.item(0).getGeometry().getType() == \"Point\") : false)\n    this.iscircle_ = (this.selection_.getLength() === 1 ? (this.selection_.item(0).getGeometry().getType() == \"Circle\") : false)\n    this.drawSketch_()\n    this.watchFeatures_()\n    // select event\n    this.dispatchEvent({ type: 'select', features: this.selection_ })\n  }\n  /** Watch selected features\n   * @private\n   */\n  watchFeatures_() {\n    // Listen to feature modification\n    if (this._featureListeners) {\n      this._featureListeners.forEach(function (l) {\n        ol_Observable_unByKey(l)\n      })\n    }\n    this._featureListeners = []\n    this.selection_.forEach(function (f) {\n      this._featureListeners.push(\n        f.on('change', function () {\n          if (!this.isUpdating_) {\n            this.drawSketch_()\n          }\n        }.bind(this))\n      )\n    }.bind(this))\n  }\n  /**\n   * @param {ol.MapBrowserEvent} evt Map browser event.\n   * @return {boolean} `true` to start the drag sequence.\n   * @private\n   */\n  handleDownEvent_(evt) {\n    if (!this._handleEvent(evt, this.selection_))\n      return\n    var sel = this.getFeatureAtPixel_(evt.pixel)\n    var feature = sel.feature\n    if (this.selection_.getLength()\n      && this.selection_.getArray().indexOf(feature) >= 0\n      && ((this.ispt_ && this.get('translate')) || this.get('translateFeature'))) {\n      sel.handle = 'translate'\n    }\n    if (sel.handle) {\n      this.mode_ = sel.handle\n      this.opt_ = sel.option\n      this.constraint_ = sel.constraint\n      // Save info\n      var viewRotation = this.getMap().getView().getRotation()\n      // Get coordinate of the handle (for snapping)\n      this.coordinate_ = feature.get('handle') ? feature.getGeometry().getCoordinates() : evt.coordinate;\n      this.pixel_ = this.getMap().getCoordinateFromPixel(this.coordinate_) // evt.pixel;\n      this.geoms_ = []\n      this.rotatedGeoms_ = []\n      var extent = ol_extent_createEmpty()\n      var rotExtent = ol_extent_createEmpty()\n      this.hasChanged_ = false;\n      for (var i = 0, f; f = this.selection_.item(i); i++) {\n        this.geoms_.push(f.getGeometry().clone())\n        extent = ol_extent_extend(extent, f.getGeometry().getExtent())\n        if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n          var rotGeom = this.getGeometryRotateToZero_(f, true)\n          this.rotatedGeoms_.push(rotGeom)\n          rotExtent = ol_extent_extend(rotExtent, rotGeom.getExtent())\n        }\n      }\n      this.extent_ = (ol_geom_Polygon_fromExtent(extent)).getCoordinates()[0]\n      if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n        this.rotatedExtent_ = (ol_geom_Polygon_fromExtent(rotExtent)).getCoordinates()[0]\n      }\n      if (this.mode_ === 'rotate') {\n        this.center_ = this.getCenter() || ol_extent_getCenter(extent)\n        // we are now rotating (cursor down on rotate mode), so apply the grabbing cursor\n        var element = evt.map.getTargetElement()\n        ol_ext_element.setCursor(element, this.Cursors.rotate0)\n        this.previousCursor_ = element.style.cursor\n      } else {\n        this.center_ = ol_extent_getCenter(extent)\n      }\n      this.angle_ = Math.atan2(this.center_[1] - evt.coordinate[1], this.center_[0] - evt.coordinate[0])\n\n      this.dispatchEvent({\n        type: this.mode_ + 'start',\n        feature: this.selection_.item(0),\n        features: this.selection_,\n        pixel: evt.pixel,\n        coordinate: evt.coordinate\n      })\n      return true\n    }\n    else if (this.get('selection')) {\n      if (feature) {\n        if (!this.addFn_(evt))\n          this.selection_.clear()\n        var index = this.selection_.getArray().indexOf(feature)\n        if (index < 0)\n          this.selection_.push(feature)\n        else\n          this.selection_.removeAt(index)\n      } else {\n        this.selection_.clear()\n      }\n      this.ispt_ = this.selection_.getLength() === 1 ? (this.selection_.item(0).getGeometry().getType() == \"Point\") : false\n      this.iscircle_ = (this.selection_.getLength() === 1 ? (this.selection_.item(0).getGeometry().getType() == \"Circle\") : false)\n      this.drawSketch_()\n      this.watchFeatures_()\n      this.dispatchEvent({ type: 'select', feature: feature, features: this.selection_, pixel: evt.pixel, coordinate: evt.coordinate })\n      return false\n    }\n  }\n  /**\n   * Get the rotation center\n   * @return {ol.coordinate|undefined}\n   */\n  getCenter() {\n    return this.get('center')\n  }\n  /**\n   * Set the rotation center\n   * @param {ol.coordinate|undefined} c the center point, default center on the objet\n   */\n  setCenter(c) {\n    return this.set('center', c)\n  }\n  /**\n   * @param {ol.MapBrowserEvent} evt Map browser event.\n   * @private\n   */\n  handleDragEvent_(evt) {\n    if (!this._handleEvent(evt, this.features_))\n      return\n    var viewRotation = this.getMap().getView().getRotation()\n    var i, j, f, geometry\n    var pt0 = [this.coordinate_[0], this.coordinate_[1]]\n    var pt = [evt.coordinate[0], evt.coordinate[1]]\n    this.isUpdating_ = true\n    this.hasChanged_ = true\n    switch (this.mode_) {\n      case 'rotate': {\n        var a = Math.atan2(this.center_[1] - pt[1], this.center_[0] - pt[0])\n        if (!this.ispt) {\n          // var geometry = this.geom_.clone();\n          // geometry.rotate(a-this.angle_, this.center_);\n          // this.feature_.setGeometry(geometry);\n          for (i = 0, f; f = this.selection_.item(i); i++) {\n            geometry = this.geoms_[i].clone()\n            geometry.rotate(a - this.angle_, this.center_)\n            // bug: ol, bad calculation circle geom extent\n            if (geometry.getType() == 'Circle')\n              geometry.setCenterAndRadius(geometry.getCenter(), geometry.getRadius())\n            f.setGeometry(geometry)\n          }\n        }\n        this.drawSketch_(true)\n        this.dispatchEvent({\n          type: 'rotating',\n          feature: this.selection_.item(0),\n          features: this.selection_,\n          angle: a - this.angle_,\n          pixel: evt.pixel,\n          coordinate: evt.coordinate\n        })\n        break\n      }\n      case 'translate': {\n        var deltaX = pt[0] - pt0[0]\n        var deltaY = pt[1] - pt0[1]\n\n        //this.feature_.getGeometry().translate(deltaX, deltaY);\n        for (i = 0, f; f = this.selection_.item(i); i++) {\n          f.getGeometry().translate(deltaX, deltaY)\n        }\n        this.handles_.forEach(function (f) {\n          f.getGeometry().translate(deltaX, deltaY)\n        })\n\n        this.coordinate_ = evt.coordinate\n        this.dispatchEvent({\n          type: 'translating',\n          feature: this.selection_.item(0),\n          features: this.selection_,\n          delta: [deltaX, deltaY],\n          pixel: evt.pixel,\n          coordinate: evt.coordinate\n        })\n        break\n      }\n      case 'scale': {\n        var center = this.center_\n        if (this.get('modifyCenter')(evt)) {\n          var extentCoordinates = this.extent_\n          if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n            extentCoordinates = this.rotatedExtent_\n          }\n          center = extentCoordinates[(Number(this.opt_) + 2) % 4]\n        }\n        var keepRectangle = (this.geoms_.length == 1 && this._isRectangle(this.geoms_[0]))\n        var stretch = this.constraint_\n        var opt = this.opt_\n\n        var downCoordinate = this.coordinate_\n        var dragCoordinate = evt.coordinate\n        if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n          var downPoint = new ol_geom_Point(this.coordinate_)\n          downPoint.rotate(viewRotation * -1, center)\n          downCoordinate = downPoint.getCoordinates()\n\n          var dragPoint = new ol_geom_Point(evt.coordinate)\n          dragPoint.rotate(viewRotation * -1, center)\n          dragCoordinate = dragPoint.getCoordinates()\n        }\n\n        var scx = ((dragCoordinate)[0] - (center)[0]) / (downCoordinate[0] - (center)[0])\n        var scy = ((dragCoordinate)[1] - (center)[1]) / (downCoordinate[1] - (center)[1])\n        var displacementVector = [dragCoordinate[0] - downCoordinate[0], (dragCoordinate)[1] - downCoordinate[1]]\n\n        if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n          var centerPoint = new ol_geom_Point(center)\n          centerPoint.rotate(viewRotation * -1, this.getMap().getView().getCenter())\n          center = centerPoint.getCoordinates()\n        }\n\n        if (this.get('noFlip')) {\n          if (scx < 0)\n            scx = -scx\n          if (scy < 0)\n            scy = -scy\n        }\n\n        if (this.constraint_) {\n          if (this.constraint_ == \"h\")\n            scx = 1\n          else\n            scy = 1\n        } else {\n          if (this.get('keepAspectRatio')(evt)) {\n            scx = scy = Math.min(scx, scy)\n          }\n        }\n\n        var keepAspectRatio = this.get('keepAspectRatio')(evt)\n\n        for (i = 0, f; f = this.selection_.item(i); i++) {\n          geometry = (viewRotation === 0 || !this.get('enableRotatedTransform')) ? this.geoms_[i].clone() : this.rotatedGeoms_[i].clone()\n          geometry.applyTransform(function (g1, g2, dim) {\n            if (dim < 2) return g2\n\n            if (!keepRectangle) {\n              for (j = 0; j < g1.length; j += dim) {\n                if (scx != 1)\n                  g2[j] = center[0] + (g1[j] - center[0]) * scx\n                if (scy != 1)\n                  g2[j + 1] = center[1] + (g1[j + 1] - center[1]) * scy\n              }\n            } else {\n              var pointArray = [[6], [0, 8], [2], [4]]\n              var pointA = [g1[0], g1[1]]\n              var pointB = [g1[2], g1[3]]\n              var pointC = [g1[4], g1[5]]\n              var pointD = [g1[6], g1[7]]\n              var pointA1 = [g1[8], g1[9]]\n\n              if (stretch) {\n                var base = (opt % 2 === 0) ? this._countVector(pointA, pointB) : this._countVector(pointD, pointA)\n                var projectedVector = this._projectVectorOnVector(displacementVector, base)\n                var nextIndex = opt + 1 < pointArray.length ? opt + 1 : 0\n                var coordsToChange = [...pointArray[opt], ...pointArray[nextIndex]]\n\n                for (j = 0; j < g1.length; j += dim) {\n                  g2[j] = coordsToChange.includes(j) ? g1[j] + projectedVector[0] : g1[j]\n                  g2[j + 1] = coordsToChange.includes(j) ? g1[j + 1] + projectedVector[1] : g1[j + 1]\n                }\n              } else {\n                var projectedLeft, projectedRight, snapped\n\n                switch (opt) {\n                  case 0: // Dragging D\n                    if (keepAspectRatio) {\n                      snapped = this._snapToDiagonal(pointD, pointB, dragCoordinate);\n                      displacementVector = this._countVector(pointD, snapped);\n                    } else {\n                      displacementVector = this._countVector(pointD, dragCoordinate);\n                    }\n\n                    projectedLeft = this._projectVectorOnVector(displacementVector, this._countVector(pointC, pointD))\n                    projectedRight = this._projectVectorOnVector(displacementVector, this._countVector(pointA, pointD));\n                    [g2[0], g2[1]] = this._movePoint(pointA, projectedLeft);\n                    [g2[4], g2[5]] = this._movePoint(pointC, projectedRight);\n                    [g2[6], g2[7]] = this._movePoint(pointD, displacementVector);\n                    [g2[8], g2[9]] = this._movePoint(pointA1, projectedLeft)\n                    break\n                  case 1: // Dragging A\n                    if (keepAspectRatio) {\n                      snapped = this._snapToDiagonal(pointA, pointC, dragCoordinate);\n                      displacementVector = this._countVector(pointA, snapped);\n                    } else {\n                      displacementVector = this._countVector(pointA, dragCoordinate);\n                    }\n\n                    projectedLeft = this._projectVectorOnVector(displacementVector, this._countVector(pointD, pointA))\n                    projectedRight = this._projectVectorOnVector(displacementVector, this._countVector(pointB, pointA));\n                    [g2[0], g2[1]] = this._movePoint(pointA, displacementVector);\n                    [g2[2], g2[3]] = this._movePoint(pointB, projectedLeft);\n                    [g2[6], g2[7]] = this._movePoint(pointD, projectedRight);\n                    [g2[8], g2[9]] = this._movePoint(pointA1, displacementVector)\n                    break\n                  case 2: // Dragging B\n                    if (keepAspectRatio) {\n                      snapped = this._snapToDiagonal(pointB, pointD, dragCoordinate);\n                      displacementVector = this._countVector(pointB, snapped);\n                    } else {\n                      displacementVector = this._countVector(pointB, dragCoordinate);\n                    }\n\n                    projectedLeft = this._projectVectorOnVector(displacementVector, this._countVector(pointA, pointB))\n                    projectedRight = this._projectVectorOnVector(displacementVector, this._countVector(pointC, pointB));\n                    [g2[0], g2[1]] = this._movePoint(pointA, projectedRight);\n                    [g2[2], g2[3]] = this._movePoint(pointB, displacementVector);\n                    [g2[4], g2[5]] = this._movePoint(pointC, projectedLeft);\n                    [g2[8], g2[9]] = this._movePoint(pointA1, projectedRight)\n                    break\n                  case 3: // Dragging C\n                    if (keepAspectRatio) {\n                      snapped = this._snapToDiagonal(pointC, pointA, dragCoordinate);\n                      displacementVector = this._countVector(pointC, snapped);\n                    } else {\n                       displacementVector = this._countVector(pointC, dragCoordinate);\n                    }\n\n                    projectedLeft = this._projectVectorOnVector(displacementVector, this._countVector(pointB, pointC))\n                    projectedRight = this._projectVectorOnVector(displacementVector, this._countVector(pointD, pointC));\n                    [g2[2], g2[3]] = this._movePoint(pointB, projectedRight);\n                    [g2[4], g2[5]] = this._movePoint(pointC, displacementVector);\n                    [g2[6], g2[7]] = this._movePoint(pointD, projectedLeft)\n                    break\n                }\n              }\n            }\n\n            // bug: ol, bad calculation circle geom extent\n            if (geometry.getType() == 'Circle') geometry.setCenterAndRadius(geometry.getCenter(), geometry.getRadius())\n            return g2\n          }.bind(this))\n          if (this.get('enableRotatedTransform') && viewRotation !== 0) {\n            //geometry.rotate(viewRotation, rotationCenter);\n            geometry.rotate(viewRotation, this.getMap().getView().getCenter())\n          }\n          f.setGeometry(geometry)\n        }\n        this.drawSketch_()\n        this.dispatchEvent({\n          type: 'scaling',\n          feature: this.selection_.item(0),\n          features: this.selection_,\n          scale: [scx, scy],\n          pixel: evt.pixel,\n          coordinate: evt.coordinate\n        })\n        break\n      }\n      default: break\n    }\n    this.isUpdating_ = false\n  }\n  /**\n   * @param {ol.MapBrowserEvent} evt Event.\n   * @private\n   */\n  handleMoveEvent_(evt) {\n    if (!this._handleEvent(evt, this.features_))\n      return\n    // console.log(\"handleMoveEvent\");\n    if (!this.mode_) {\n      var sel = this.getFeatureAtPixel_(evt.pixel)\n      var element = evt.map.getTargetElement()\n      if (sel.feature) {\n        var c = sel.handle ? this.Cursors[(sel.handle || 'default') + (sel.constraint || '') + (sel.option || '')] : this.Cursors.select\n\n        if (this.previousCursor_ === undefined) {\n          this.previousCursor_ = element.style.cursor\n        }\n        ol_ext_element.setCursor(element, c);\n      } else {\n        if (this.previousCursor_ !== undefined) {\n          ol_ext_element.setCursor(element, this.previousCursor_)\n        }\n        this.previousCursor_ = undefined\n      }\n    }\n  }\n  /**\n   * @param {ol.MapBrowserEvent} evt Map browser event.\n   * @return {boolean} `false` to stop the drag sequence.\n   */\n  handleUpEvent_(evt) {\n    // remove rotate0 cursor on Up event, otherwise it's stuck on grab/grabbing\n    if (this.mode_ === 'rotate') {\n      var element = evt.map.getTargetElement()\n      ol_ext_element.setCursor(element, this.Cursors.default)\n      this.previousCursor_ = undefined\n    }\n\n    //dispatchEvent\n    this.dispatchEvent({\n      type: this.mode_ + 'end',\n      feature: this.selection_.item(0),\n      features: this.selection_,\n      oldgeom: this.geoms_[0],\n      oldgeoms: this.geoms_,\n      // handle changes\n      transformed: this.hasChanged_,\n    })\n    \n    this.drawSketch_()\n    this.hasChanged_ = false;\n    this.mode_ = null\n    return false\n  }\n  /** Set the point radius to calculate handles on points\n   *  @param {number|Array<number>|function} [pointRadius=0] radius for points or a function that takes a feature and returns the radius (or [radiusX, radiusY]). If not null show handles to transform the points\n   */\n  setPointRadius(pointRadius) {\n    if (typeof (pointRadius) === 'function') {\n      this._pointRadius = pointRadius\n    } else {\n      this._pointRadius = function () { return pointRadius }\n    }\n  }\n  /** Get the features that are selected for transform\n   * @return ol.Collection\n   */\n  getFeatures() {\n    return this.selection_;\n  }\n  /**\n   * @private\n   */\n  _projectVectorOnVector(displacement_vector, base) {\n    var k = (displacement_vector[0] * base[0] + displacement_vector[1] * base[1]) / (base[0] * base[0] + base[1] * base[1]);\n    return [base[0] * k, base[1] * k];\n  }\n  /**\n   * @private\n   */\n  _countVector(start, end) {\n    return [end[0] - start[0], end[1] - start[1]];\n  }\n  /**\n   * @private\n   */\n  _movePoint(point, displacementVector) {\n    return [point[0]+displacementVector[0], point[1]+displacementVector[1]];\n  }\n\n  /**\n   * @private\n   */\n  _snapToDiagonal(handle, anchor, mouse) {\n    var rail = [handle[0] - anchor[0], handle[1] - anchor[1]];\n    var pull = [mouse[0] - anchor[0], mouse[1] - anchor[1]];\n    var dot = pull[0] * rail[0] + pull[1] * rail[1];\n    var magSq = rail[0] * rail[0] + rail[1] * rail[1];\n    var s = dot / magSq;\n    return [anchor[0] + rail[0] * s, anchor[1] + rail[1] * s];\n  }\n\n\n}\n\n/** Cursors for transform\n*/\nol_interaction_Transform.prototype.Cursors = {\n  'default': 'auto',\n  'select': 'pointer',\n  'translate': 'move',\n  'rotate': 'move',\n  'rotate0': 'move',\n  'scale': 'nesw-resize',\n  'scale1': 'nwse-resize',\n  'scale2': 'nesw-resize',\n  'scale3': 'nwse-resize',\n  'scalev': 'ew-resize',\n  'scaleh1': 'ns-resize',\n  'scalev2': 'ew-resize',\n  'scaleh3': 'ns-resize'\n};\n\nexport default ol_interaction_Transform\n","/** Vanilla JS geographic inputs\n * color, size, width, font, symboles, dash, arrow, pattern\n */\nimport ol_Object from 'ol/Object.js'\n\n/** Abstract base class; normally only used for creating subclasses and not instantiated in apps.    \n * @constructor\n * @extends {ol_Object}\n * @param {*} options\n *  @param {Element} [options.input] input element, if none create one\n *  @param {string} [options.type] input type, if no input\n *  @param {number} [options.min] input min, if no input\n *  @param {number} [options.max] input max, if no input\n *  @param {number} [options.step] input step, if no input\n *  @param {string|number} [options.val] input value\n *  @param {boolean} [options.checked] check input\n *  @param {boolean} [options.hidden] the input is display:none\n *  @param {boolean} [options.disabled] disable input\n *  @param {Element} [options.parent] parent element, if no input\n */\nvar ol_ext_input_Base = class olextinputBase extends ol_Object {\n  constructor(options) {\n    options = options || {};\n    super();\n\n    var input = this.input = options.input;\n    if (!input) {\n      input = this.input = document.createElement('input');\n      if (options.type) {\n        input.setAttribute('type', options.type);\n      }\n      if (options.min !== undefined) {\n        input.setAttribute('min', options.min);\n      }\n      if (options.max !== undefined) {\n        input.setAttribute('max', options.max);\n      }\n      if (options.step !== undefined) {\n        input.setAttribute('step', options.step);\n      }\n      if (options.parent) {\n        options.parent.appendChild(input);\n      }\n    }\n    if (options.disabled) {\n      input.disabled = true;\n    }\n    if (options.checked !== undefined) {\n      input.checked = !!options.checked;\n    }\n    if (options.val !== undefined) {\n      input.value = options.val;\n    }\n    if (options.hidden) { \n      input.classList.add('ol-input-hidden');\n    }\n    input.addEventListener('focus', function () {\n      if (this.element)\n        this.element.classList.add('ol-focus');\n    }.bind(this));\n    var tout;\n    input.addEventListener('focusout', function () {\n      if (this.element) {\n        if (tout)\n          clearTimeout(tout);\n        tout = setTimeout(function () {\n          this.element.classList.remove('ol-focus');\n        }.bind(this), 0);\n      }\n    }.bind(this));\n  }\n  /** Listen to drag event\n   * @param {Element} elt\n   * @param {function} cback when draggin on the element\n   * @private\n   */\n  _listenDrag(elt, cback) {\n    var handle = function (e) {\n      this.moving = true;\n      this.element.classList.add('ol-moving');\n      var listen = function (e) {\n        if (e.type === 'pointerup') {\n          document.removeEventListener('pointermove', listen);\n          document.removeEventListener('pointerup', listen);\n          document.removeEventListener('pointercancel', listen);\n          setTimeout(function () {\n            this.moving = false;\n            this.element.classList.remove('ol-moving');\n          }.bind(this));\n        }\n        if (e.target === elt)\n          cback(e);\n        e.stopPropagation();\n        e.preventDefault();\n      }.bind(this);\n      document.addEventListener('pointermove', listen, false);\n      document.addEventListener('pointerup', listen, false);\n      document.addEventListener('pointercancel', listen, false);\n      e.stopPropagation();\n      e.preventDefault();\n    }.bind(this);\n    elt.addEventListener('mousedown', handle, false);\n    elt.addEventListener('touchstart', handle, false);\n  }\n  /** Set the current value\n   */\n  setValue(v) {\n    if (v !== undefined)\n      this.input.value = v;\n    this.input.dispatchEvent(new Event('change'));\n  }\n  /** Get the current getValue\n   * @returns {string}\n   */\n  getValue() {\n    return this.input.value;\n  }\n  /** Get the input element\n   * @returns {Element}\n   */\n  getInputElement() {\n    return this.input;\n  }\n}\n\nexport default ol_ext_input_Base\n","import ol_ext_input_Base from './Base.js'\n\n/** Checkbox input\n * @constructor\n * @extends {ol_ext_input_Base}\n * @fires check\n * @param {*} options\n *  @param {string} [options.className]\n *  @param {Element|string} [options.html] label content\n *  @param {string} [options.after] label garnish (placed after)\n *  @param {Element} [options.input] input element, if non create one\n *  @param {Element} [options.parent] parent element, if create an input\n *  @param {boolean} [options.autoClose=true]\n *  @param {boolean} [options.visible=false] display the input\n */\nvar ol_ext_input_Checkbox = class olextinputCheckbox extends ol_ext_input_Base {\n  constructor(options) {\n    options = options || {};\n\n    super(options);\n\n    var label = this.element = document.createElement('label');\n    if (options.html instanceof Element)\n      label.appendChild(options.html);\n    else if (options.html !== undefined)\n      label.innerHTML = options.html;\n    label.className = ('ol-ext-check ol-ext-checkbox ' + (options.className || '')).trim();\n\n    if (this.input.parentNode)\n      this.input.parentNode.insertBefore(label, this.input);\n    label.appendChild(this.input);\n    label.appendChild(document.createElement('span'));\n    if (options.after) {\n      label.appendChild(document.createTextNode(options.after));\n    }\n\n    // Handle change\n    this.input.addEventListener('change', function () {\n      this.dispatchEvent({ type: 'check', checked: this.input.checked, value: this.input.value });\n    }.bind(this));\n\n  }\n  isChecked() {\n    return this.input.checked;\n  }\n}\n\nexport default ol_ext_input_Checkbox\n","import ol_ext_input_Checkbox from './Checkbox.js'\n\n/** Switch input\n * @constructor\n * @extends {ol_ext_input_Checkbox}\n * @fires check\n * @param {*} options\n *  @param {string} [options.className]\n *  @param {Element} [options.input] input element, if non create one\n *  @param {Element} [options.parent] parent element, if create an input\n */\nvar ol_ext_input_Switch = class olextinputSwitch extends ol_ext_input_Checkbox {\n  constructor(options) {\n    options = options || {};\n\n    super(options);\n\n    this.element.className = ('ol-ext-toggle-switch ' + (options.className || '')).trim();\n  }\n};\n  \nexport default ol_ext_input_Switch\n","import ol_ext_input_Checkbox from './Checkbox.js'\n\n/** Switch input\n * @constructor\n * @extends {ol_ext_input_Checkbox}\n * @fires check\n * @param {*} options\n *  @param {string} [options.className]\n *  @param {Element} [options.input] input element, if non create one\n *  @param {Element} [options.parent] parent element, if create an input\n */\nvar ol_ext_input_Radio = class olextinputRadio extends ol_ext_input_Checkbox {\n  constructor(options) {\n    options = options || {};\n\n    super(options);\n\n    this.element.className = ('ol-ext-check ol-ext-radio ' + (options.className || '')).trim();\n  }\n}\n  \nexport default ol_ext_input_Radio\n","/** Vanilla JS helper to manipulate DOM without jQuery\n * @see https://github.com/nefe/You-Dont-Need-jQuery\n * @see https://plainjs.com/javascript/\n * @see http://youmightnotneedjquery.com/\n */\nimport ol_Map from 'ol/Map.js'\nimport ol_ext_input_Checkbox from './input/Checkbox.js'\nimport ol_ext_input_Switch from './input/Switch.js'\nimport ol_ext_input_Radio from './input/Radio.js'\n\n/** @namespace ol.ext.element */\nvar ol_ext_element = {};\n\n/**\n * Create an element\n * @param {string} tagName The element tag, use 'TEXT' to create a text node\n * @param {*} options\n *  @param {string} options.className className The element class name \n *  @param {Element} options.parent Parent to append the element as child\n *  @param {Element|string} [options.html] Content of the element (if text is not set)\n *  @param {string} [options.text] Text content (if html is not set)\n *  @param {Element|string} [options.options] when tagName = SELECT a list of options as key:value to add to the select\n *  @param {string} options.* Any other attribut to add to the element\n */\nol_ext_element.create = function (tagName, options) {\n  options = options || {};\n  var elt;\n  // Create text node\n  if (tagName === 'TEXT') {\n    elt = document.createTextNode(options.html||'');\n    if (options.parent) options.parent.appendChild(elt);\n  } else {\n    // Other element\n    elt = document.createElement(tagName.toLowerCase());\n    if (/button/i.test(tagName)) elt.setAttribute('type', 'button');\n    for (var attr in options) {\n      switch (attr) {\n        case 'className': {\n          if (options.className && options.className.trim) elt.setAttribute('class', options.className.trim());\n          break;\n        }\n        case 'text': {\n          elt.innerText = options.text;\n          break;\n        }\n        case 'html': {\n          if (options.html instanceof Element) elt.appendChild(options.html)\n          else if (options.html!==undefined) elt.innerHTML = options.html;\n          break;\n        }\n        case 'parent': {\n          if (options.parent) options.parent.appendChild(elt);\n          break;\n        }\n        case 'options': {\n          if (/select/i.test(tagName)) {\n            for (var i in options.options) {\n              ol_ext_element.create('OPTION', {\n                html: i,\n                value: options.options[i],\n                parent: elt          \n              })\n            }\n          }\n          break;\n        }\n        case 'style': {\n          ol_ext_element.setStyle(elt, options.style);\n          break;\n        }\n        case 'change':\n        case 'click': {\n          ol_ext_element.addListener(elt, attr, options[attr]);\n          break;\n        }\n        case 'on': {\n          for (var e in options.on) {\n            ol_ext_element.addListener(elt, e, options.on[e]);\n          }\n          break;\n        }\n        case 'checked': {\n          elt.checked = !!options.checked;\n          break;\n        }\n        default: {\n          elt.setAttribute(attr, options[attr]);\n          break;\n        }\n      }\n    }\n  }\n  return elt;\n};\n\n/** Create a toggle switch input\n * @param {*} options\n *  @param {string|Element} options.html\n *  @param {string|Element} options.after\n *  @param {boolean} options.checked\n *  @param {*} [options.on] a list of actions\n *  @param {function} [options.click]\n *  @param {function} [options.change]\n *  @param {Element} options.parent\n */\nol_ext_element.createSwitch = function (options) {\n  var input = ol_ext_element.create('INPUT', {\n    type: 'checkbox',\n    on: options.on,\n    click: options.click,\n    change: options.change,\n    parent: options.parent\n  });\n  var opt = Object.assign ({ input: input }, options || {});\n  new ol_ext_input_Switch(opt);\n  return input;\n};\n\n/** Create a toggle switch input\n * @param {*} options\n *  @param {string|Element} options.html\n *  @param {string|Element} options.after\n *  @param {string} [options.name] input name\n *  @param {string} [options.type=checkbox] input type: radio or checkbox\n *  @param {string} options.value input value\n *  @param {*} [options.on] a list of actions\n *  @param {function} [options.click]\n *  @param {function} [options.change]\n *  @param {Element} options.parent\n */\nol_ext_element.createCheck = function (options) {\n  var input = ol_ext_element.create('INPUT', {\n    name: options.name,\n    type: (options.type==='radio' ? 'radio' : 'checkbox'),\n    on: options.on,\n    parent: options.parent\n  });\n  var opt = Object.assign ({ input: input }, options || {});\n  if (options.type === 'radio') {\n    new ol_ext_input_Radio(opt);\n  } else {\n    new ol_ext_input_Checkbox(opt);\n  }\n  return input;\n};\n\n/** Set inner html or append a child element to an element\n * @param {Element} element\n * @param {Element|string} html Content of the element\n */\nol_ext_element.setHTML = function(element, html) {\n  if (html instanceof Element) element.appendChild(html)\n  else if (html!==undefined) element.innerHTML = html;\n};\n\n/** Append text into an elemnt\n * @param {Element} element\n * @param {string} text text content\n */\nol_ext_element.appendText = function(element, text) {\n  element.appendChild(document.createTextNode(text||''));\n};\n\n/**\n * Add a set of event listener to an element\n * @param {Element} element\n * @param {string|Array<string>} eventType\n * @param {function} fn\n */\nol_ext_element.addListener = function (element, eventType, fn, useCapture ) {\n  if (typeof eventType === 'string') eventType = eventType.split(' ');\n  eventType.forEach(function(e) {\n    element.addEventListener(e, fn, useCapture);\n  });\n};\n\n/**\n * Add a set of event listener to an element\n * @param {Element} element\n * @param {string|Array<string>} eventType\n * @param {function} fn\n */\nol_ext_element.removeListener = function (element, eventType, fn) {\n  if (typeof eventType === 'string') eventType = eventType.split(' ');\n  eventType.forEach(function(e) {\n    element.removeEventListener(e, fn);\n  });\n};\n\n/**\n * Show an element\n * @param {Element} element\n */\nol_ext_element.show = function (element) {\n  element.style.display = '';\n};\n\n/**\n * Hide an element\n * @param {Element} element\n */\nol_ext_element.hide = function (element) {\n  element.style.display = 'none';\n};\n\n/**\n * Test if an element is hihdden\n * @param {Element} element\n * @return {boolean}\n */\nol_ext_element.hidden = function (element) {\n  return ol_ext_element.getStyle(element, 'display') === 'none';\n};\n\n/**\n * Toggle an element\n * @param {Element} element\n */\nol_ext_element.toggle = function (element) {\n  element.style.display = (element.style.display==='none' ? '' : 'none');\n};\n\n/** Set style of an element\n * @param {DOMElement} el the element\n * @param {*} st list of style\n */\nol_ext_element.setStyle = function(el, st) {\n  for (var s in st) {\n    switch (s) {\n      case 'top':\n      case 'left':\n      case 'bottom':\n      case 'right':\n      case 'minWidth':\n      case 'maxWidth':\n      case 'width':\n      case 'height': {\n        if (typeof(st[s]) === 'number') {\n          el.style[s] = st[s]+'px';\n        } else {\n          el.style[s] = st[s];\n        }\n        break;\n      }\n      default: {\n        el.style[s] = st[s];\n      }\n    }\n  }\n};\n\n/**\n * Get style propertie of an element\n * @param {DOMElement} el the element\n * @param {string} styleProp Propertie name\n * @return {*} style value\n */\nol_ext_element.getStyle = function(el, styleProp) {\n  var value, defaultView = (el.ownerDocument || document).defaultView;\n  // W3C standard way:\n  if (defaultView && defaultView.getComputedStyle) {\n    // sanitize property name to css notation\n    // (hypen separated words eg. font-Size)\n    styleProp = styleProp.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n    value = defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\n  } else if (el.currentStyle) { // IE\n    // sanitize property name to camelCase\n    styleProp = styleProp.replace(/-(\\w)/g, function(str, letter) {\n      return letter.toUpperCase();\n    });\n    value = el.currentStyle[styleProp];\n    // convert other units to pixels on IE\n    if (/^\\d+(em|pt|%|ex)?$/i.test(value)) { \n      return (function(value) {\n        var oldLeft = el.style.left, oldRsLeft = el.runtimeStyle.left;\n        el.runtimeStyle.left = el.currentStyle.left;\n        el.style.left = value || 0;\n        value = el.style.pixelLeft + \"px\";\n        el.style.left = oldLeft;\n        el.runtimeStyle.left = oldRsLeft;\n        return value;\n      })(value);\n    }\n  }\n  if (/px$/.test(value)) return parseInt(value);\n  return value;\n};\n\n/** Get outerHeight of an elemen\n * @param {DOMElement} elt\n * @return {number}\n */\nol_ext_element.outerHeight = function(elt) {\n  return elt.offsetHeight + ol_ext_element.getStyle(elt, 'marginBottom')\n};\n\n/** Get outerWidth of an elemen\n * @param {DOMElement} elt\n * @return {number}\n */\nol_ext_element.outerWidth = function(elt) {\n  return elt.offsetWidth + ol_ext_element.getStyle(elt, 'marginLeft')\n};\n\n/** Get element offset rect\n * @param {DOMElement} elt\n * @return {*} \n */\nol_ext_element.offsetRect = function(elt) {\n  var rect = elt.getBoundingClientRect();\n  return {\n    top: rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0),\n    left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0),\n    height: rect.height || (rect.bottom - rect.top),\n    width: rect.width || (rect.right - rect.left)\n  }\n};\n\n/** Get element offset \n * @param {ELement} elt\n * @returns {Object} top/left offset\n */\nol_ext_element.getFixedOffset = function(elt) {\n  var offset = {\n    left:0,\n    top:0\n  };\n  var getOffset = function(parent) {\n    if (!parent) return offset;\n    // Check position when transform\n    if (ol_ext_element.getStyle(parent, 'position') === 'absolute'\n      && ol_ext_element.getStyle(parent, 'transform') !== \"none\") {\n      var r = parent.getBoundingClientRect();\n      offset.left += r.left; \n      offset.top += r.top; \n      return offset;\n    }\n    return getOffset(parent.offsetParent)\n  }\n  return getOffset(elt.offsetParent)\n};\n\n/** Get element offset rect\n * @param {DOMElement} elt\n * @param {boolean} fixed get fixed position\n * @return {Object} \n */\nol_ext_element.positionRect = function(elt, fixed) {\n  var gleft = 0;\n  var gtop = 0;\n\n  var getRect = function( parent ) {\n    if (parent) {\n      gleft += parent.offsetLeft;\n      gtop += parent.offsetTop;\n      return getRect(parent.offsetParent);\n    } else {\n      var r = {\n        top: elt.offsetTop + gtop,\n        left: elt.offsetLeft + gleft\n      };\n      if (fixed) {\n        r.top -= (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);\n        r.left -= (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0);\n      }\n      r.bottom = r.top + elt.offsetHeight;\n      r.right = r.top + elt.offsetWidth;\n      return r;\n    }\n  }; \n  return getRect(elt.offsetParent);\n}\n\n/** Make a div scrollable without scrollbar.\n * On touch devices the default behavior is preserved\n * @param {DOMElement} elt\n * @param {*} options\n *  @param {function} [options.onmove] a function that takes a boolean indicating that the div is scrolling\n *  @param {boolean} [options.vertical=false] \n *  @param {boolean} [options.animate=true] add kinetic to scroll\n *  @param {boolean} [options.mousewheel=false] enable mousewheel to scroll\n *  @param {boolean} [options.minibar=false] add a mini scrollbar to the parent element (only vertical scrolling)\n * @returns {Object} an object with a refresh function\n */\nol_ext_element.scrollDiv = function(elt, options) {\n  options = options || {};\n  var pos = false;\n  var speed = 0;\n  var d, dt = 0;\n\n  var onmove = (typeof(options.onmove) === 'function' ? options.onmove : function(){});\n  //var page = options.vertical ? 'pageY' : 'pageX';\n  var page = options.vertical ? 'screenY' : 'screenX';\n  var scroll = options.vertical ? 'scrollTop' : 'scrollLeft';\n  var moving = false;\n  // Factor scale content / container\n  var scale, isbar;\n\n  // Update the minibar\n  var updateCounter = 0;\n  var updateMinibar = function() {\n    if (scrollbar) {\n      updateCounter++;\n      setTimeout(updateMinibarDelay);\n    }\n  }\n  var updateMinibarDelay = function() {\n    if (scrollbar) {\n      updateCounter--;\n      // Prevent multi call\n      if (updateCounter) return;\n      // Container height\n      var pheight = elt.clientHeight;\n      // Content height\n      var height = elt.scrollHeight;\n      // Set scrollbar value\n      scale = pheight / height;\n      scrollbar.style.height = scale * 100 + '%';\n      scrollbar.style.top = (elt.scrollTop / height * 100) + '%';\n      scrollContainer.style.height = pheight + 'px';\n      // No scroll\n      if (pheight > height - .5) scrollContainer.classList.add('ol-100pc');\n      else scrollContainer.classList.remove('ol-100pc');\n    }\n  }\n  \n  // Handle pointer down\n  var onPointerDown = function(e) {\n    // Prevent scroll\n    if (e.target.classList.contains('ol-noscroll')) return;\n    // Start scrolling\n    moving = false;\n    pos = e[page];\n    dt = new Date();\n    elt.classList.add('ol-move');\n    // Prevent elt dragging\n    e.preventDefault();\n    // Listen scroll\n    window.addEventListener('pointermove', onPointerMove);\n    ol_ext_element.addListener(window, ['pointerup','pointercancel'], onPointerUp);\n  }\n\n  // Register scroll\n  var onPointerMove = function(e) {\n    if (pos !== false) {\n      var delta = (isbar ? -1/scale : 1) * (pos - e[page]);\n      moving = moving || Math.round(delta)\n      elt[scroll] += delta;\n      d = new Date();\n      if (d-dt) {\n        speed = (speed + delta / (d - dt))/2;\n      }\n      pos = e[page];\n      dt = d;\n      // Tell we are moving\n      if (delta) onmove(true);\n    } else {\n      moving = true;\n    }\n  };\n  \n  // Animate scroll\n  var animate = function(to) {\n    var step = (to>0) ? Math.min(100, to/2) : Math.max(-100, to/2);\n    to -= step;\n    elt[scroll] += step;\n    if (-1 < to && to < 1) {\n      if (moving) setTimeout(function() { elt.classList.remove('ol-move'); });\n      else elt.classList.remove('ol-move');\n      moving = false;\n      onmove(false);\n    } else {\n      setTimeout(function() {\n        animate(to);\n      }, 40);\n    }\n  }\n  \n  // Initialize scroll container for minibar\n  var scrollContainer, scrollbar;\n  if (options.vertical && options.minibar) {\n    var init = function(b) {\n      // only once\n      elt.removeEventListener('pointermove', init);\n      elt.parentNode.classList.add('ol-miniscroll');\n      scrollbar = ol_ext_element.create('DIV');\n      scrollContainer = ol_ext_element.create('DIV', {\n        className: 'ol-scroll',\n        html: scrollbar\n      });\n      elt.parentNode.insertBefore(scrollContainer, elt);\n      // Move scrollbar\n      scrollbar.addEventListener('pointerdown', function(e) {\n        isbar = true;\n        onPointerDown(e)\n      });\n      // Handle mousewheel\n      if (options.mousewheel) {\n        ol_ext_element.addListener(scrollContainer, \n          ['mousewheel', 'DOMMouseScroll', 'onmousewheel'], \n          function(e) { onMouseWheel(e) }\n        );\n        ol_ext_element.addListener(scrollbar, \n          ['mousewheel', 'DOMMouseScroll', 'onmousewheel'], \n          function(e) { onMouseWheel(e) }\n        );\n      }\n      // Update on enter\n      elt.parentNode.addEventListener('pointerenter', updateMinibar);\n      // Update on resize\n      window.addEventListener('resize', updateMinibar);\n      // Update\n      if (b!==false) updateMinibar();\n    };\n    // Allready inserted in the DOM\n    if (elt.parentNode) init(false);\n    // or wait when ready\n    else elt.addEventListener('pointermove', init);\n    // Update on scroll\n    elt.addEventListener('scroll', function() {\n      updateMinibar();\n    });\n  }\n\n  // Enable scroll\n  elt.style['touch-action'] = 'none';\n  elt.style['overflow'] = 'hidden';\n  elt.classList.add('ol-scrolldiv');\n  \n  // Start scrolling\n  ol_ext_element.addListener(elt, ['pointerdown'], function(e) {\n    isbar = false;\n    onPointerDown(e)\n  });\n\n  // Prevet click when moving...\n  elt.addEventListener('click', function(e) {\n    if (elt.classList.contains('ol-move')) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }, true);\n\n  // Stop scrolling\n  var onPointerUp = function(e) {\n    dt = new Date() - dt;\n    if (dt>100 || isbar) {\n      // User stop: no speed\n      speed = 0;\n    } else if (dt>0) {\n      // Calculate new speed\n      speed = ((speed||0) + (pos - e[page]) / dt) / 2;\n    }\n    animate(options.animate===false ? 0 : speed*200);\n    pos = false;\n    speed = 0;\n    dt = 0;\n    // Add class to handle click (on iframe / double-click)\n    if (!elt.classList.contains('ol-move')) {\n      elt.classList.add('ol-hasClick')\n      setTimeout(function() { elt.classList.remove('ol-hasClick'); }, 500);\n    } else {\n      elt.classList.remove('ol-hasClick');\n    }\n    isbar = false;\n    window.removeEventListener('pointermove', onPointerMove)\n    ol_ext_element.removeListener(window, ['pointerup','pointercancel'], onPointerUp);\n  };\n\n  // Handle mousewheel\n  var onMouseWheel = function(e) {\n    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));\n    elt.classList.add('ol-move');\n    elt[scroll] -= delta*30;\n    elt.classList.remove('ol-move');\n    return false;\n  }\n  if (options.mousewheel) { // && !elt.classList.contains('ol-touch')) {\n    ol_ext_element.addListener(elt, \n      ['mousewheel', 'DOMMouseScroll', 'onmousewheel'], \n      onMouseWheel\n    );\n  }\n\n  return { \n    refresh: updateMinibar\n  }\n};\n\n/** Dispatch an event to an Element \n * @param {string} eventName\n * @param {Element} element\n */\nol_ext_element.dispatchEvent = function (eventName, element) {\n  var event;\n  try {\n    event = new CustomEvent(eventName);\n  } catch(e) {\n    // Try customevent on IE\n    event = document.createEvent(\"CustomEvent\");\n    event.initCustomEvent(eventName, true, true, {});\n  }\n  element.dispatchEvent(event);\n};\n\n/** Set cursor\n * @param {Element|ol/Map} elt\n * @param {string} cursor\n */\nol_ext_element.setCursor = function(elt, cursor) {\n  if (elt instanceof ol_Map) elt = elt.getTargetElement()\n  // prevent flashing on mobile device\n  if (!('ontouchstart' in window) && elt instanceof Element) {\n    elt.style.cursor = cursor;\n  }\n}\n\nexport default ol_ext_element\n","/**\n * @module ol/Collection\n */\nimport CollectionEventType from './CollectionEventType.js';\nimport BaseObject from './Object.js';\nimport Event from './events/Event.js';\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n  LENGTH: 'length',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n * @template T\n */\nexport class CollectionEvent extends Event {\n  /**\n   * @param {import(\"./CollectionEventType.js\").default} type Type.\n   * @param {T} element Element.\n   * @param {number} index The index of the added or removed element.\n   */\n  constructor(type, element, index) {\n    super(type);\n\n    /**\n     * The element that is added to or removed from the collection.\n     * @type {T}\n     * @api\n     */\n    this.element = element;\n\n    /**\n     * The index of the added or removed element.\n     * @type {number}\n     * @api\n     */\n    this.index = index;\n  }\n}\n\n/***\n * @template T\n * @template Return\n * @typedef {import(\"./Observable.js\").OnSignature<import(\"./Observable.js\").EventTypes, import(\"./events/Event.js\").default, Return> &\n *   import(\"./Observable.js\").OnSignature<import(\"./ObjectEventType.js\").Types|'change:length', import(\"./Object.js\").ObjectEvent, Return> &\n *   import(\"./Observable.js\").OnSignature<'add'|'remove', CollectionEvent<T>, Return> &\n *   import(\"./Observable.js\").CombinedOnSignature<import(\"./Observable.js\").EventTypes|import(\"./ObjectEventType.js\").Types|\n *     'change:length'|'add'|'remove',Return>} CollectionOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nclass Collection extends BaseObject {\n  /**\n   * @param {Array<T>} [array] Array.\n   * @param {Options} [options] Collection options.\n   */\n  constructor(array, options) {\n    super();\n\n    /***\n     * @type {CollectionOnSignature<T, import(\"./events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {CollectionOnSignature<T, import(\"./events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {CollectionOnSignature<T, void>}\n     */\n    this.un;\n\n    options = options || {};\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.unique_ = !!options.unique;\n\n    /**\n     * @private\n     * @type {!Array<T>}\n     */\n    this.array_ = array ?? [];\n\n    if (this.unique_) {\n      for (let i = 1, ii = this.array_.length; i < ii; ++i) {\n        this.assertUnique_(this.array_[i], i);\n      }\n    }\n\n    this.updateLength_();\n  }\n\n  /**\n   * Remove all elements from the collection.\n   * @api\n   */\n  clear() {\n    while (this.getLength() > 0) {\n      this.pop();\n    }\n  }\n\n  /**\n   * Add elements to the collection.  This pushes each item in the provided array\n   * to the end of the collection.\n   * @param {!Array<T>} arr Array.\n   * @return {Collection<T>} This collection.\n   * @api\n   */\n  extend(arr) {\n    for (let i = 0, ii = arr.length; i < ii; ++i) {\n      this.push(arr[i]);\n    }\n    return this;\n  }\n\n  /**\n   * Iterate over each element, calling the provided callback.\n   * @param {function(T, number, Array<T>): *} f The function to call\n   *     for every element. This function takes 3 arguments (the element, the\n   *     index and the array). The return value is ignored.\n   * @api\n   */\n  forEach(f) {\n    const array = this.array_;\n    for (let i = 0, ii = array.length; i < ii; ++i) {\n      f(array[i], i, array);\n    }\n  }\n\n  /**\n   * Get a reference to the underlying Array object. Warning: if the array\n   * is mutated, no events will be dispatched by the collection, and the\n   * collection's \"length\" property won't be in sync with the actual length\n   * of the array.\n   * @return {!Array<T>} Array.\n   * @api\n   */\n  getArray() {\n    return this.array_;\n  }\n\n  /**\n   * Get the element at the provided index.\n   * @param {number} index Index.\n   * @return {T} Element.\n   * @api\n   */\n  item(index) {\n    return this.array_[index];\n  }\n\n  /**\n   * Get the length of this collection.\n   * @return {number} The length of the array.\n   * @observable\n   * @api\n   */\n  getLength() {\n    return this.get(Property.LENGTH);\n  }\n\n  /**\n   * Insert an element at the provided index.\n   * @param {number} index Index.\n   * @param {T} elem Element.\n   * @api\n   */\n  insertAt(index, elem) {\n    if (index < 0 || index > this.getLength()) {\n      throw new Error('Index out of bounds: ' + index);\n    }\n    if (this.unique_) {\n      this.assertUnique_(elem);\n    }\n    this.array_.splice(index, 0, elem);\n    this.updateLength_();\n    this.dispatchEvent(\n      new CollectionEvent(CollectionEventType.ADD, elem, index),\n    );\n  }\n\n  /**\n   * Remove the last element of the collection and return it.\n   * Return `undefined` if the collection is empty.\n   * @return {T|undefined} Element.\n   * @api\n   */\n  pop() {\n    return this.removeAt(this.getLength() - 1);\n  }\n\n  /**\n   * Insert the provided element at the end of the collection.\n   * @param {T} elem Element.\n   * @return {number} New length of the collection.\n   * @api\n   */\n  push(elem) {\n    const n = this.getLength();\n    this.insertAt(n, elem);\n    return this.getLength();\n  }\n\n  /**\n   * Remove the first occurrence of an element from the collection.\n   * @param {T} elem Element.\n   * @return {T|undefined} The removed element or undefined if none found.\n   * @api\n   */\n  remove(elem) {\n    const arr = this.array_;\n    for (let i = 0, ii = arr.length; i < ii; ++i) {\n      if (arr[i] === elem) {\n        return this.removeAt(i);\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Remove the element at the provided index and return it.\n   * Return `undefined` if the collection does not contain this index.\n   * @param {number} index Index.\n   * @return {T|undefined} Value.\n   * @api\n   */\n  removeAt(index) {\n    if (index < 0 || index >= this.getLength()) {\n      return undefined;\n    }\n    const prev = this.array_[index];\n    this.array_.splice(index, 1);\n    this.updateLength_();\n    this.dispatchEvent(\n      /** @type {CollectionEvent<T>} */ (\n        new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n      ),\n    );\n    return prev;\n  }\n\n  /**\n   * Set the element at the provided index.\n   * @param {number} index Index.\n   * @param {T} elem Element.\n   * @api\n   */\n  setAt(index, elem) {\n    const n = this.getLength();\n    if (index >= n) {\n      this.insertAt(index, elem);\n      return;\n    }\n    if (index < 0) {\n      throw new Error('Index out of bounds: ' + index);\n    }\n    if (this.unique_) {\n      this.assertUnique_(elem, index);\n    }\n    const prev = this.array_[index];\n    this.array_[index] = elem;\n    this.dispatchEvent(\n      /** @type {CollectionEvent<T>} */ (\n        new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n      ),\n    );\n    this.dispatchEvent(\n      /** @type {CollectionEvent<T>} */ (\n        new CollectionEvent(CollectionEventType.ADD, elem, index)\n      ),\n    );\n  }\n\n  /**\n   * @private\n   */\n  updateLength_() {\n    this.set(Property.LENGTH, this.array_.length);\n  }\n\n  /**\n   * @private\n   * @param {T} elem Element.\n   * @param {number} [except] Optional index to ignore.\n   */\n  assertUnique_(elem, except) {\n    const array = this.array_;\n    for (let i = 0, ii = array.length; i < ii; ++i) {\n      if (array[i] === elem && i !== except) {\n        throw new Error('Duplicate item added to a unique collection');\n      }\n    }\n  }\n}\n\nexport default Collection;\n","/**\n * @module ol/CollectionEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  /**\n   * Triggered when an item is added to the collection.\n   * @event module:ol/Collection.CollectionEvent#add\n   * @api\n   */\n  ADD: 'add',\n  /**\n   * Triggered when an item is removed from the collection.\n   * @event module:ol/Collection.CollectionEvent#remove\n   * @api\n   */\n  REMOVE: 'remove',\n};\n","/**\n * @module ol/DataTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\n\n/**\n * @typedef {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|HTMLVideoElement|ImageBitmap} ImageLike\n */\n\n/**\n * @typedef {Uint8Array|Uint8ClampedArray|Float32Array|DataView} ArrayLike\n */\n\n/**\n * Data that can be used with a DataTile.\n * @typedef {ArrayLike|ImageLike} Data\n */\n\n/**\n * @param {Data} data Tile data.\n * @return {ImageLike|null} The image-like data.\n */\nexport function asImageLike(data) {\n  return data instanceof Image ||\n    data instanceof HTMLCanvasElement ||\n    data instanceof HTMLVideoElement ||\n    data instanceof ImageBitmap\n    ? data\n    : null;\n}\n\n/**\n * @param {Data} data Tile data.\n * @return {ArrayLike|null} The array-like data.\n */\nexport function asArrayLike(data) {\n  return data instanceof Uint8Array ||\n    data instanceof Uint8ClampedArray ||\n    data instanceof Float32Array ||\n    data instanceof DataView\n    ? data\n    : null;\n}\n\n/**\n * This is set as the cancellation reason when a tile is disposed.\n */\nexport const disposedError = new Error('disposed');\n\n/**\n * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D|null}\n */\nlet sharedContext = null;\n\n/**\n * @param {ImageLike} image The image.\n * @return {Uint8ClampedArray} The data.\n */\nexport function toArray(image) {\n  if (!sharedContext) {\n    sharedContext = createCanvasContext2D(\n      image.width,\n      image.height,\n      undefined,\n      {willReadFrequently: true},\n    );\n  }\n  const canvas = sharedContext.canvas;\n  const width = image.width;\n  if (canvas.width !== width) {\n    canvas.width = width;\n  }\n  const height = image.height;\n  if (canvas.height !== height) {\n    canvas.height = height;\n  }\n  sharedContext.clearRect(0, 0, width, height);\n  sharedContext.drawImage(image, 0, 0);\n  return sharedContext.getImageData(0, 0, width, height).data;\n}\n\n/**\n * @type {import('./size.js').Size}\n */\nconst defaultSize = [256, 256];\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @property {function(): Promise<Data>} loader Data loader.  For loaders that generate images,\n * the promise should not resolve until the image is loaded.\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling.  By default,\n * the nearest neighbor is used when resampling.\n * @property {import('./size.js').Size} [size=[256, 256]] Tile size.\n * @property {AbortController} [controller] An abort controller.\n * @api\n */\n\nclass DataTile extends Tile {\n  /**\n   * @param {Options} options Tile options.\n   */\n  constructor(options) {\n    const state = TileState.IDLE;\n\n    super(options.tileCoord, state, {\n      transition: options.transition,\n      interpolate: options.interpolate,\n    });\n\n    /**\n     * @type {function(): Promise<Data>}\n     * @private\n     */\n    this.loader_ = options.loader;\n\n    /**\n     * @type {Data}\n     * @private\n     */\n    this.data_ = null;\n\n    /**\n     * @type {Error}\n     * @private\n     */\n    this.error_ = null;\n\n    /**\n     * @type {import('./size.js').Size|null}\n     * @private\n     */\n    this.size_ = options.size || null;\n\n    /**\n     * @type {AbortController|null}\n     * @private\n     */\n    this.controller_ = options.controller || null;\n  }\n\n  /**\n   * Get the tile size.\n   * @return {import('./size.js').Size} Tile size.\n   */\n  getSize() {\n    if (this.size_) {\n      return this.size_;\n    }\n    const imageData = asImageLike(this.data_);\n    if (imageData) {\n      return [imageData.width, imageData.height];\n    }\n    return defaultSize;\n  }\n\n  /**\n   * Get the data for the tile.\n   * @return {Data} Tile data.\n   * @api\n   */\n  getData() {\n    return this.data_;\n  }\n\n  /**\n   * Get any loading error.\n   * @return {Error} Loading error.\n   * @api\n   */\n  getError() {\n    return this.error_;\n  }\n\n  /**\n   * Load the tile data.\n   * @api\n   * @override\n   */\n  load() {\n    if (this.state !== TileState.IDLE && this.state !== TileState.ERROR) {\n      return;\n    }\n    this.state = TileState.LOADING;\n    this.changed();\n\n    const self = this;\n    this.loader_()\n      .then(function (data) {\n        self.data_ = data;\n        self.state = TileState.LOADED;\n        self.changed();\n      })\n      .catch(function (error) {\n        self.error_ = error;\n        self.state = TileState.ERROR;\n        self.changed();\n      });\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    if (this.controller_) {\n      this.controller_.abort(disposedError);\n      this.controller_ = null;\n    }\n    super.disposeInternal();\n  }\n}\n\nexport default DataTile;\n","/**\n * @module ol/Disposable\n */\n\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nclass Disposable {\n  constructor() {\n    /**\n     * The object has already been disposed.\n     * @type {boolean}\n     * @protected\n     */\n    this.disposed = false;\n  }\n\n  /**\n   * Clean up.\n   */\n  dispose() {\n    if (!this.disposed) {\n      this.disposed = true;\n      this.disposeInternal();\n    }\n  }\n\n  /**\n   * Extension point for disposable objects.\n   * @protected\n   */\n  disposeInternal() {}\n}\n\nexport default Disposable;\n","/**\n * @module ol/Feature\n */\nimport BaseObject from './Object.js';\nimport {assert} from './asserts.js';\nimport {listen, unlistenByKey} from './events.js';\nimport EventType from './events/EventType.js';\n\n/**\n * @typedef {typeof Feature|typeof import(\"./render/Feature.js\").default} FeatureClass\n */\n\n/**\n * @typedef {Feature|import(\"./render/Feature.js\").default} FeatureLike\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable.js\").OnSignature<import(\"./Observable.js\").EventTypes, import(\"./events/Event.js\").default, Return> &\n *   import(\"./Observable.js\").OnSignature<import(\"./ObjectEventType.js\").Types|'change:geometry', import(\"./Object.js\").ObjectEvent, Return> &\n *   import(\"./Observable.js\").CombinedOnSignature<import(\"./Observable.js\").EventTypes|import(\"./ObjectEventType.js\").Types\n *     |'change:geometry', Return>} FeatureOnSignature\n */\n\n/***\n * @template {import(\"./geom/Geometry.js\").default} [Geometry=import(\"./geom/Geometry.js\").default]\n * @template {Object<string, *>} [Properties=Object<string, *>]\n * @typedef {Properties & { geometry?: Geometry }} ObjectWithGeometry\n */\n\n/**\n * @classdesc\n * A vector object for geographic features with a geometry and other\n * attribute properties, similar to the features in vector file formats like\n * GeoJSON.\n *\n * Features can be styled individually with `setStyle`; otherwise they use the\n * style of their vector layer.\n *\n * Note that attribute properties are set as {@link module:ol/Object~BaseObject} properties on\n * the feature object, so they are observable, and have get/set accessors.\n *\n * Typically, a feature has a single geometry property. You can set the\n * geometry using the `setGeometry` method and get it with `getGeometry`.\n * It is possible to store more than one geometry on a feature using attribute\n * properties. By default, the geometry used for rendering is identified by\n * the property name `geometry`. If you want to use another geometry property\n * for rendering, use the `setGeometryName` method to change the attribute\n * property associated with the geometry for the feature.  For example:\n *\n * ```js\n *\n * import Feature from 'ol/Feature.js';\n * import Polygon from 'ol/geom/Polygon.js';\n * import Point from 'ol/geom/Point.js';\n *\n * const feature = new Feature({\n *   geometry: new Polygon(polyCoords),\n *   labelPoint: new Point(labelCoords),\n *   name: 'My Polygon',\n * });\n *\n * // get the polygon geometry\n * const poly = feature.getGeometry();\n *\n * // Render the feature as a point using the coordinates from labelPoint\n * feature.setGeometryName('labelPoint');\n *\n * // get the point geometry\n * const point = feature.getGeometry();\n * ```\n *\n * @api\n * @template {import(\"./geom/Geometry.js\").default} [Geometry=import(\"./geom/Geometry.js\").default]\n * @template {Object<string, *>} [Properties=Object<string, *>]\n * @extends {BaseObject<NoInfer<Properties>>}\n */\nclass Feature extends BaseObject {\n  /**\n   * @param {Geometry|ObjectWithGeometry<Geometry, NoInfer<Properties>>} [geometryOrProperties]\n   *     You may pass a Geometry object directly, or an object literal containing\n   *     properties. If you pass an object literal, you may include a Geometry\n   *     associated with a `geometry` key.\n   */\n  constructor(geometryOrProperties) {\n    super();\n\n    /***\n     * @type {FeatureOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {FeatureOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {FeatureOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @private\n     * @type {number|string|undefined}\n     */\n    this.id_ = undefined;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.geometryName_ = 'geometry';\n\n    /**\n     * User provided style.\n     * @private\n     * @type {import(\"./style/Style.js\").StyleLike}\n     */\n    this.style_ = null;\n\n    /**\n     * @private\n     * @type {import(\"./style/Style.js\").StyleFunction|undefined}\n     */\n    this.styleFunction_ = undefined;\n\n    /**\n     * @private\n     * @type {?import(\"./events.js\").EventsKey}\n     */\n    this.geometryChangeKey_ = null;\n\n    this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n\n    if (geometryOrProperties) {\n      if (\n        typeof (\n          /** @type {?} */ (geometryOrProperties).getSimplifiedGeometry\n        ) === 'function'\n      ) {\n        const geometry = /** @type {Geometry} */ (geometryOrProperties);\n        this.setGeometry(geometry);\n      } else {\n        /** @type {?} */\n        const properties = geometryOrProperties;\n        this.setProperties(properties);\n      }\n    }\n  }\n\n  /**\n   * Clone this feature. If the original feature has a geometry it\n   * is also cloned. The feature id is not set in the clone.\n   * @return {Feature<Geometry>} The clone.\n   * @api\n   */\n  clone() {\n    const clone = /** @type {Feature<Geometry>} */ (new Feature());\n    const geometryName = this.geometryName_;\n    clone.setGeometryName(geometryName);\n\n    const properties = this.getPropertiesInternal();\n    if (properties) {\n      const geometry = this.getGeometry();\n      for (const key in properties) {\n        if (key === geometryName && geometry) {\n          clone.set(key, geometry.clone());\n        } else {\n          clone.set(key, properties[key], true);\n        }\n      }\n    }\n\n    const style = this.getStyle();\n    if (style) {\n      clone.setStyle(style);\n    }\n    return clone;\n  }\n\n  /**\n   * Get the feature's default geometry.  A feature may have any number of named\n   * geometries.  The \"default\" geometry (the one that is rendered by default) is\n   * set when calling {@link module:ol/Feature~Feature#setGeometry}.\n   * @return {Geometry|undefined} The default geometry for the feature.\n   * @api\n   * @observable\n   */\n  getGeometry() {\n    return /** @type {Geometry|undefined} */ (this.get(this.geometryName_));\n  }\n\n  /**\n   * Get the feature identifier.  This is a stable identifier for the feature and\n   * is either set when reading data from a remote source or set explicitly by\n   * calling {@link module:ol/Feature~Feature#setId}.\n   * @return {number|string|undefined} Id.\n   * @api\n   */\n  getId() {\n    return this.id_;\n  }\n\n  /**\n   * Get the name of the feature's default geometry.  By default, the default\n   * geometry is named `geometry`.\n   * @return {string} Get the property name associated with the default geometry\n   *     for this feature.\n   * @api\n   */\n  getGeometryName() {\n    return this.geometryName_;\n  }\n\n  /**\n   * Get the feature's style. Will return what was provided to the\n   * {@link module:ol/Feature~Feature#setStyle} method.\n   * @return {import(\"./style/Style.js\").StyleLike|undefined} The feature style.\n   * @api\n   */\n  getStyle() {\n    return this.style_;\n  }\n\n  /**\n   * Get the feature's style function.\n   * @return {import(\"./style/Style.js\").StyleFunction|undefined} Return a function\n   * representing the current style of this feature.\n   * @api\n   */\n  getStyleFunction() {\n    return this.styleFunction_;\n  }\n\n  /**\n   * @private\n   */\n  handleGeometryChange_() {\n    this.changed();\n  }\n\n  /**\n   * @private\n   */\n  handleGeometryChanged_() {\n    if (this.geometryChangeKey_) {\n      unlistenByKey(this.geometryChangeKey_);\n      this.geometryChangeKey_ = null;\n    }\n    const geometry = this.getGeometry();\n    if (geometry) {\n      this.geometryChangeKey_ = listen(\n        geometry,\n        EventType.CHANGE,\n        this.handleGeometryChange_,\n        this,\n      );\n    }\n    this.changed();\n  }\n\n  /**\n   * Set the default geometry for the feature.  This will update the property\n   * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.\n   * @param {Geometry|undefined} geometry The new geometry.\n   * @api\n   * @observable\n   */\n  setGeometry(geometry) {\n    this.set(this.geometryName_, geometry);\n  }\n\n  /**\n   * Set the style for the feature to override the layer style.  This can be a\n   * single style object, an array of styles, or a function that takes a\n   * resolution and returns an array of styles. To unset the feature style, call\n   * `setStyle()` without arguments or a falsey value.\n   * @param {import(\"./style/Style.js\").StyleLike} [style] Style for this feature.\n   * @api\n   * @fires module:ol/events/Event~BaseEvent#event:change\n   */\n  setStyle(style) {\n    this.style_ = style;\n    this.styleFunction_ = !style ? undefined : createStyleFunction(style);\n    this.changed();\n  }\n\n  /**\n   * Set the feature id.  The feature id is considered stable and may be used when\n   * requesting features or comparing identifiers returned from a remote source.\n   * The feature id can be used with the\n   * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.\n   * @param {number|string|undefined} id The feature id.\n   * @api\n   * @fires module:ol/events/Event~BaseEvent#event:change\n   */\n  setId(id) {\n    this.id_ = id;\n    this.changed();\n  }\n\n  /**\n   * Set the property name to be used when getting the feature's default geometry.\n   * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with\n   * this name will be returned.\n   * @param {string} name The property name of the default geometry.\n   * @api\n   */\n  setGeometryName(name) {\n    if (name === this.geometryName_) {\n      return;\n    }\n    this.removeChangeListener(this.geometryName_, this.handleGeometryChanged_);\n    this.geometryName_ = name;\n    this.addChangeListener(this.geometryName_, this.handleGeometryChanged_);\n    this.handleGeometryChanged_();\n  }\n}\n\n/**\n * Convert the provided object into a feature style function.  Functions passed\n * through unchanged.  Arrays of Style or single style objects wrapped\n * in a new feature style function.\n * @param {!import(\"./style/Style.js\").StyleFunction|!Array<import(\"./style/Style.js\").default>|!import(\"./style/Style.js\").default} obj\n *     A feature style function, a single style, or an array of styles.\n * @return {import(\"./style/Style.js\").StyleFunction} A style function.\n */\nexport function createStyleFunction(obj) {\n  if (typeof obj === 'function') {\n    return obj;\n  }\n  /**\n   * @type {Array<import(\"./style/Style.js\").default>}\n   */\n  let styles;\n  if (Array.isArray(obj)) {\n    styles = obj;\n  } else {\n    assert(\n      typeof (/** @type {?} */ (obj).getZIndex) === 'function',\n      'Expected an `ol/style/Style` or an array of `ol/style/Style.js`',\n    );\n    const style = /** @type {import(\"./style/Style.js\").default} */ (obj);\n    styles = [style];\n  }\n  return function () {\n    return styles;\n  };\n}\nexport default Feature;\n","/**\n * @module ol/Geolocation\n */\nimport BaseObject from './Object.js';\nimport BaseEvent from './events/Event.js';\nimport {circular as circularPolygon} from './geom/Polygon.js';\nimport {toRadians} from './math.js';\nimport {\n  get as getProjection,\n  getTransformFromProjections,\n  identityTransform,\n} from './proj.js';\n\n/**\n * @enum {string}\n */\nconst Property = {\n  ACCURACY: 'accuracy',\n  ACCURACY_GEOMETRY: 'accuracyGeometry',\n  ALTITUDE: 'altitude',\n  ALTITUDE_ACCURACY: 'altitudeAccuracy',\n  HEADING: 'heading',\n  POSITION: 'position',\n  PROJECTION: 'projection',\n  SPEED: 'speed',\n  TRACKING: 'tracking',\n  TRACKING_OPTIONS: 'trackingOptions',\n};\n\n/**\n * @enum string\n */\nconst GeolocationErrorType = {\n  /**\n   * Triggered when a `GeolocationPositionError` occurs.\n   * @event module:ol/Geolocation.GeolocationError#error\n   * @api\n   */\n  ERROR: 'error',\n};\n\n/**\n * @classdesc\n * Events emitted on [GeolocationPositionError](https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError).\n */\nexport class GeolocationError extends BaseEvent {\n  /**\n   * @param {GeolocationPositionError} error error object.\n   */\n  constructor(error) {\n    super(GeolocationErrorType.ERROR);\n\n    /**\n     * Code of the underlying `GeolocationPositionError`.\n     * @type {number}\n     * @api\n     */\n    this.code = error.code;\n\n    /**\n     * Message of the underlying `GeolocationPositionError`.\n     * @type {string}\n     * @api\n     */\n    this.message = error.message;\n  }\n}\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [tracking=false] Start Tracking right after\n * instantiation.\n * @property {PositionOptions} [trackingOptions] Tracking options.\n * See https://www.w3.org/TR/geolocation-API/#position_options_interface.\n * @property {import(\"./proj.js\").ProjectionLike} [projection] The projection the position\n * is reported in.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType.js\").Types|'change:accuracy'|'change:accuracyGeometry'|'change:altitude'|\n *    'change:altitudeAccuracy'|'change:heading'|'change:position'|'change:projection'|'change:speed'|'change:tracking'|\n *    'change:trackingOptions'} GeolocationObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable.js\").OnSignature<GeolocationObjectEventTypes, import(\"./Object.js\").ObjectEvent, Return> &\n *   import(\"./Observable.js\").OnSignature<'error', GeolocationError, Return> &\n *   import(\"./Observable.js\").CombinedOnSignature<import(\"./Observable.js\").EventTypes|GeolocationObjectEventTypes, Return> &\n *   import(\"./Observable.js\").OnSignature<import(\"./Observable.js\").EventTypes, import(\"./events/Event.js\").default, Return>} GeolocationOnSignature\n */\n\n/**\n * @classdesc\n * Helper class for providing HTML5 Geolocation capabilities.\n * The [Geolocation API](https://www.w3.org/TR/geolocation-API/)\n * is used to locate a user's position.\n *\n * To get notified of position changes and errors, register listeners for the generic\n * `change` event and the `error` event on your instance of {@link module:ol/Geolocation~Geolocation}.\n *\n * Example:\n *\n *     const geolocation = new Geolocation({\n *       // take the projection to use from the map's view\n *       projection: view.getProjection()\n *     });\n *     // listen to changes in position\n *     geolocation.on('change', function(evt) {\n *       console.log(geolocation.getPosition());\n *     });\n *     // listen to error\n *     geolocation.on('error', function(evt) {\n *       window.console.log(evt.message);\n *     });\n *\n * @fires GeolocationError\n * @api\n */\nclass Geolocation extends BaseObject {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    /***\n     * @type {GeolocationOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {GeolocationOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {GeolocationOnSignature<void>}\n     */\n    this.un;\n\n    options = options || {};\n\n    /**\n     * The unprojected (EPSG:4326) device position.\n     * @private\n     * @type {?import(\"./coordinate.js\").Coordinate}\n     */\n    this.position_ = null;\n\n    /**\n     * @private\n     * @type {import(\"./proj.js\").TransformFunction}\n     */\n    this.transform_ = identityTransform;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.watchId_ = undefined;\n\n    this.addChangeListener(Property.PROJECTION, this.handleProjectionChanged_);\n    this.addChangeListener(Property.TRACKING, this.handleTrackingChanged_);\n\n    if (options.projection !== undefined) {\n      this.setProjection(options.projection);\n    }\n    if (options.trackingOptions !== undefined) {\n      this.setTrackingOptions(options.trackingOptions);\n    }\n\n    this.setTracking(options.tracking !== undefined ? options.tracking : false);\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.setTracking(false);\n    super.disposeInternal();\n  }\n\n  /**\n   * @private\n   */\n  handleProjectionChanged_() {\n    const projection = this.getProjection();\n    if (projection) {\n      this.transform_ = getTransformFromProjections(\n        getProjection('EPSG:4326'),\n        projection,\n      );\n      if (this.position_) {\n        this.set(Property.POSITION, this.transform_(this.position_));\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  handleTrackingChanged_() {\n    if ('geolocation' in navigator) {\n      const tracking = this.getTracking();\n      if (tracking && this.watchId_ === undefined) {\n        this.watchId_ = navigator.geolocation.watchPosition(\n          this.positionChange_.bind(this),\n          this.positionError_.bind(this),\n          this.getTrackingOptions(),\n        );\n      } else if (!tracking && this.watchId_ !== undefined) {\n        navigator.geolocation.clearWatch(this.watchId_);\n        this.watchId_ = undefined;\n      }\n    }\n  }\n\n  /**\n   * @private\n   * @param {GeolocationPosition} position position event.\n   */\n  positionChange_(position) {\n    const coords = position.coords;\n    this.set(Property.ACCURACY, coords.accuracy);\n    this.set(\n      Property.ALTITUDE,\n      coords.altitude === null ? undefined : coords.altitude,\n    );\n    this.set(\n      Property.ALTITUDE_ACCURACY,\n      coords.altitudeAccuracy === null ? undefined : coords.altitudeAccuracy,\n    );\n    this.set(\n      Property.HEADING,\n      coords.heading === null ? undefined : toRadians(coords.heading),\n    );\n    if (!this.position_) {\n      this.position_ = [coords.longitude, coords.latitude];\n    } else {\n      this.position_[0] = coords.longitude;\n      this.position_[1] = coords.latitude;\n    }\n    const projectedPosition = this.transform_(this.position_);\n    this.set(Property.POSITION, projectedPosition.slice());\n    this.set(Property.SPEED, coords.speed === null ? undefined : coords.speed);\n    const geometry = circularPolygon(this.position_, coords.accuracy);\n    geometry.applyTransform(this.transform_);\n    this.set(Property.ACCURACY_GEOMETRY, geometry);\n    this.changed();\n  }\n\n  /**\n   * @private\n   * @param {GeolocationPositionError} error error object.\n   */\n  positionError_(error) {\n    this.dispatchEvent(new GeolocationError(error));\n  }\n\n  /**\n   * Get the accuracy of the position in meters.\n   * @return {number|undefined} The accuracy of the position measurement in\n   *     meters.\n   * @observable\n   * @api\n   */\n  getAccuracy() {\n    return /** @type {number|undefined} */ (this.get(Property.ACCURACY));\n  }\n\n  /**\n   * Get a geometry of the position accuracy.\n   * @return {?import(\"./geom/Polygon.js\").default} A geometry of the position accuracy.\n   * @observable\n   * @api\n   */\n  getAccuracyGeometry() {\n    return /** @type {?import(\"./geom/Polygon.js\").default} */ (\n      this.get(Property.ACCURACY_GEOMETRY) || null\n    );\n  }\n\n  /**\n   * Get the altitude associated with the position.\n   * @return {number|undefined} The altitude of the position in meters above mean\n   *     sea level.\n   * @observable\n   * @api\n   */\n  getAltitude() {\n    return /** @type {number|undefined} */ (this.get(Property.ALTITUDE));\n  }\n\n  /**\n   * Get the altitude accuracy of the position.\n   * @return {number|undefined} The accuracy of the altitude measurement in\n   *     meters.\n   * @observable\n   * @api\n   */\n  getAltitudeAccuracy() {\n    return /** @type {number|undefined} */ (\n      this.get(Property.ALTITUDE_ACCURACY)\n    );\n  }\n\n  /**\n   * Get the heading as radians clockwise from North.\n   * Note: depending on the browser, the heading is only defined if the `enableHighAccuracy`\n   * is set to `true` in the tracking options.\n   * @return {number|undefined} The heading of the device in radians from north.\n   * @observable\n   * @api\n   */\n  getHeading() {\n    return /** @type {number|undefined} */ (this.get(Property.HEADING));\n  }\n\n  /**\n   * Get the position of the device.\n   * @return {import(\"./coordinate.js\").Coordinate|undefined} The current position of the device reported\n   *     in the current projection.\n   * @observable\n   * @api\n   */\n  getPosition() {\n    return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n      this.get(Property.POSITION)\n    );\n  }\n\n  /**\n   * Get the projection associated with the position.\n   * @return {import(\"./proj/Projection.js\").default|undefined} The projection the position is\n   *     reported in.\n   * @observable\n   * @api\n   */\n  getProjection() {\n    return /** @type {import(\"./proj/Projection.js\").default|undefined} */ (\n      this.get(Property.PROJECTION)\n    );\n  }\n\n  /**\n   * Get the speed in meters per second.\n   * @return {number|undefined} The instantaneous speed of the device in meters\n   *     per second.\n   * @observable\n   * @api\n   */\n  getSpeed() {\n    return /** @type {number|undefined} */ (this.get(Property.SPEED));\n  }\n\n  /**\n   * Determine if the device location is being tracked.\n   * @return {boolean} The device location is being tracked.\n   * @observable\n   * @api\n   */\n  getTracking() {\n    return /** @type {boolean} */ (this.get(Property.TRACKING));\n  }\n\n  /**\n   * Get the tracking options.\n   * See https://www.w3.org/TR/geolocation-API/#position-options.\n   * @return {PositionOptions|undefined} PositionOptions as defined by\n   *     the [HTML5 Geolocation spec\n   *     ](https://www.w3.org/TR/geolocation-API/#position_options_interface).\n   * @observable\n   * @api\n   */\n  getTrackingOptions() {\n    return /** @type {PositionOptions|undefined} */ (\n      this.get(Property.TRACKING_OPTIONS)\n    );\n  }\n\n  /**\n   * Set the projection to use for transforming the coordinates.\n   * @param {import(\"./proj.js\").ProjectionLike} projection The projection the position is\n   *     reported in.\n   * @observable\n   * @api\n   */\n  setProjection(projection) {\n    this.set(Property.PROJECTION, getProjection(projection));\n  }\n\n  /**\n   * Enable or disable tracking.\n   * @param {boolean} tracking Enable tracking.\n   * @observable\n   * @api\n   */\n  setTracking(tracking) {\n    this.set(Property.TRACKING, tracking);\n  }\n\n  /**\n   * Set the tracking options.\n   * See http://www.w3.org/TR/geolocation-API/#position-options.\n   * @param {PositionOptions} options PositionOptions as defined by the\n   *     [HTML5 Geolocation spec\n   *     ](http://www.w3.org/TR/geolocation-API/#position_options_interface).\n   * @observable\n   * @api\n   */\n  setTrackingOptions(options) {\n    this.set(Property.TRACKING_OPTIONS, options);\n  }\n}\n\nexport default Geolocation;\n","/**\n * @module ol/Image\n */\nimport ImageState from './ImageState.js';\nimport {listenOnce, unlistenByKey} from './events.js';\nimport EventType from './events/EventType.js';\nimport EventTarget from './events/Target.js';\nimport {toPromise} from './functions.js';\nimport {CREATE_IMAGE_BITMAP, IMAGE_DECODE} from './has.js';\n\n/**\n * A function that takes an {@link module:ol/Image~ImageWrapper} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~ImageWrapper#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n *     function(image, src) {\n *       image.getImage().src = src;\n *     }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(import(\"./Image.js\").default, string): void} LoadFunction\n * @api\n */\n\n/**\n * @typedef {Object} ImageObject\n * @property {import(\"./extent.js\").Extent} [extent] Extent, if different from the requested one.\n * @property {import(\"./resolution.js\").ResolutionLike} [resolution] Resolution, if different from the requested one.\n * When x and y resolution are different, use the array type (`[xResolution, yResolution]`).\n * @property {number} [pixelRatio] Pixel ratio, if different from the requested one.\n * @property {import('./DataTile.js').ImageLike} image Image.\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * For images that cover any extent and resolution (static images), the loader function should not accept\n * any arguments. The function returns an {@link import(\"./DataTile.js\").ImageLike image}, an\n * {@link import(\"./Image.js\").ImageObject image object}, or a promise for the same.\n * For loaders that generate images, the promise should not resolve until the image is loaded.\n * If the returned image does not match the extent, resolution or pixel ratio passed to the loader,\n * it has to return an {@link import(\"./Image.js\").ImageObject image object} with the `image` and the\n * correct `extent`, `resolution` and `pixelRatio`.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): import(\"./DataTile.js\").ImageLike|ImageObject|Promise<import(\"./DataTile.js\").ImageLike|ImageObject>} Loader\n * @api\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * The function returns a promise for an  {@link import(\"./Image.js\").ImageObject image object}.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): Promise<import(\"./DataTile.js\").ImageLike|ImageObject>} ImageObjectPromiseLoader\n */\n\nclass ImageWrapper extends EventTarget {\n  /**\n   * @param {import(\"./extent.js\").Extent} extent Extent.\n   * @param {number|Array<number>|undefined} resolution Resolution. If provided as array, x and y\n   * resolution will be assumed.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"./ImageState.js\").default|Loader} stateOrLoader State.\n   */\n  constructor(extent, resolution, pixelRatio, stateOrLoader) {\n    super();\n\n    /**\n     * @protected\n     * @type {import(\"./extent.js\").Extent}\n     */\n    this.extent = extent;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelRatio_ = pixelRatio;\n\n    /**\n     * @protected\n     * @type {number|Array<number>|undefined}\n     */\n    this.resolution = resolution;\n\n    /**\n     * @protected\n     * @type {import(\"./ImageState.js\").default}\n     */\n    this.state =\n      typeof stateOrLoader === 'function' ? ImageState.IDLE : stateOrLoader;\n\n    /**\n     * @private\n     * @type {import('./DataTile.js').ImageLike|null}\n     */\n    this.image_ = null;\n\n    /**\n     * @protected\n     * @type {Loader|null}\n     */\n    this.loader = typeof stateOrLoader === 'function' ? stateOrLoader : null;\n  }\n\n  /**\n   * @protected\n   */\n  changed() {\n    this.dispatchEvent(EventType.CHANGE);\n  }\n\n  /**\n   * @return {import(\"./extent.js\").Extent} Extent.\n   */\n  getExtent() {\n    return this.extent;\n  }\n\n  /**\n   * @return {import('./DataTile.js').ImageLike} Image.\n   */\n  getImage() {\n    return this.image_;\n  }\n\n  /**\n   * @return {number} PixelRatio.\n   */\n  getPixelRatio() {\n    return this.pixelRatio_;\n  }\n\n  /**\n   * @return {number|Array<number>} Resolution.\n   */\n  getResolution() {\n    return /** @type {number} */ (this.resolution);\n  }\n\n  /**\n   * @return {import(\"./ImageState.js\").default} State.\n   */\n  getState() {\n    return this.state;\n  }\n\n  /**\n   * Load not yet loaded URI.\n   */\n  load() {\n    if (this.state == ImageState.IDLE) {\n      if (this.loader) {\n        this.state = ImageState.LOADING;\n        this.changed();\n        const resolution = this.getResolution();\n        const requestResolution = Array.isArray(resolution)\n          ? resolution[0]\n          : resolution;\n        toPromise(() =>\n          this.loader(\n            this.getExtent(),\n            requestResolution,\n            this.getPixelRatio(),\n          ),\n        )\n          .then((image) => {\n            if ('image' in image) {\n              this.image_ = image.image;\n            }\n            if ('extent' in image) {\n              this.extent = image.extent;\n            }\n            if ('resolution' in image) {\n              this.resolution = image.resolution;\n            }\n            if ('pixelRatio' in image) {\n              this.pixelRatio_ = image.pixelRatio;\n            }\n            if (\n              image instanceof HTMLImageElement ||\n              (CREATE_IMAGE_BITMAP && image instanceof ImageBitmap) ||\n              image instanceof HTMLCanvasElement ||\n              image instanceof HTMLVideoElement\n            ) {\n              this.image_ = image;\n            }\n            this.state = ImageState.LOADED;\n          })\n          .catch((error) => {\n            this.state = ImageState.ERROR;\n            console.error(error); // eslint-disable-line no-console\n          })\n          .finally(() => this.changed());\n      }\n    }\n  }\n\n  /**\n   * @param {import('./DataTile.js').ImageLike} image The image.\n   */\n  setImage(image) {\n    this.image_ = image;\n  }\n\n  /**\n   * @param {number|Array<number>} resolution Resolution.\n   */\n  setResolution(resolution) {\n    this.resolution = resolution;\n  }\n}\n\n/**\n * @param {import('./DataTile.js').ImageLike} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nexport function listenImage(image, loadHandler, errorHandler) {\n  const img = /** @type {HTMLImageElement} */ (image);\n  let listening = true;\n  let decoding = false;\n  let loaded = false;\n\n  const listenerKeys = [\n    listenOnce(img, EventType.LOAD, function () {\n      loaded = true;\n      if (!decoding) {\n        loadHandler();\n      }\n    }),\n  ];\n\n  if (img.src && IMAGE_DECODE) {\n    decoding = true;\n    img\n      .decode()\n      .then(function () {\n        if (listening) {\n          loadHandler();\n        }\n      })\n      .catch(function (error) {\n        if (listening) {\n          if (loaded) {\n            loadHandler();\n          } else {\n            errorHandler();\n          }\n        }\n      });\n  } else {\n    listenerKeys.push(listenOnce(img, EventType.ERROR, errorHandler));\n  }\n\n  return function unlisten() {\n    listening = false;\n    listenerKeys.forEach(unlistenByKey);\n  };\n}\n\n/**\n * Loads an image.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise<HTMLImageElement>} Promise resolving to an `HTMLImageElement`.\n * @api\n */\nexport function load(image, src) {\n  return new Promise((resolve, reject) => {\n    function handleLoad() {\n      unlisten();\n      resolve(image);\n    }\n    function handleError() {\n      unlisten();\n      reject(new Error('Image load error'));\n    }\n    function unlisten() {\n      image.removeEventListener('load', handleLoad);\n      image.removeEventListener('error', handleError);\n    }\n    image.addEventListener('load', handleLoad);\n    image.addEventListener('error', handleError);\n    if (src) {\n      image.src = src;\n    }\n  });\n}\n\n/**\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise<HTMLImageElement>} Promise resolving to an `HTMLImageElement`.\n */\nexport function decodeFallback(image, src) {\n  if (src) {\n    image.src = src;\n  }\n  return image.src && IMAGE_DECODE\n    ? new Promise((resolve, reject) =>\n        image\n          .decode()\n          .then(() => resolve(image))\n          .catch((e) =>\n            image.complete && image.width ? resolve(image) : reject(e),\n          ),\n      )\n    : load(image);\n}\n\n/**\n * Loads an image and decodes it to an `ImageBitmap` if `createImageBitmap()` is supported. Returns\n * the loaded image otherwise.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise<ImageBitmap|HTMLImageElement>} Promise resolving to an `ImageBitmap` or an\n * `HTMLImageElement` if `createImageBitmap()` is not supported.\n * @api\n */\nexport function decode(image, src) {\n  if (src) {\n    image.src = src;\n  }\n  return image.src && IMAGE_DECODE && CREATE_IMAGE_BITMAP\n    ? image\n        .decode()\n        .then(() => createImageBitmap(image))\n        .catch((e) => {\n          if (image.complete && image.width) {\n            return image;\n          }\n          throw e;\n        })\n    : decodeFallback(image);\n}\n\nexport default ImageWrapper;\n","/**\n * @module ol/ImageState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n  IDLE: 0,\n  LOADING: 1,\n  LOADED: 2,\n  ERROR: 3,\n  EMPTY: 4,\n};\n","/**\n * @module ol/ImageTile\n */\nimport {listenImage} from './Image.js';\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {WORKER_OFFSCREEN_CANVAS} from './has.js';\n\nclass ImageTile extends Tile {\n  /**\n   * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"./TileState.js\").default} state State.\n   * @param {string} src Image source URI.\n   * @param {import('./dom.js').ImageAttributes} imageAttributes Image attributes options.\n   * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n   * @param {import(\"./Tile.js\").Options} [options] Tile options.\n   */\n  constructor(\n    tileCoord,\n    state,\n    src,\n    imageAttributes,\n    tileLoadFunction,\n    options,\n  ) {\n    super(tileCoord, state, options);\n\n    /**\n     * @private\n     * @type {?string}\n     */\n    this.crossOrigin_ = imageAttributes?.crossOrigin;\n\n    /**\n     * @private\n     * @type {ReferrerPolicy}\n     */\n    this.referrerPolicy_ = imageAttributes?.referrerPolicy;\n\n    /**\n     * Image URI\n     *\n     * @private\n     * @type {string}\n     */\n    this.src_ = src;\n\n    this.key = src;\n\n    /**\n     * @private\n     * @type {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas}\n     */\n    this.image_;\n\n    if (WORKER_OFFSCREEN_CANVAS) {\n      this.image_ = new OffscreenCanvas(1, 1);\n    } else {\n      this.image_ = new Image();\n      if (this.crossOrigin_ !== null) {\n        this.image_.crossOrigin = this.crossOrigin_;\n      }\n      if (this.referrerPolicy_ !== undefined) {\n        this.image_.referrerPolicy = this.referrerPolicy_;\n      }\n    }\n\n    /**\n     * @private\n     * @type {?function():void}\n     */\n    this.unlisten_ = null;\n\n    /**\n     * @private\n     * @type {import(\"./Tile.js\").LoadFunction}\n     */\n    this.tileLoadFunction_ = tileLoadFunction;\n  }\n\n  /**\n   * Get the HTML image element for this tile (may be a Canvas, OffscreenCanvas, Image, or Video).\n   * @return {HTMLCanvasElement|OffscreenCanvas|HTMLImageElement|HTMLVideoElement} Image.\n   * @api\n   */\n  getImage() {\n    return this.image_;\n  }\n\n  /**\n   * Sets an HTML image element for this tile (may be a Canvas or preloaded Image).\n   * @param {HTMLCanvasElement|OffscreenCanvas|HTMLImageElement} element Element.\n   */\n  setImage(element) {\n    this.image_ = element;\n    this.state = TileState.LOADED;\n    this.unlistenImage_();\n    this.changed();\n  }\n\n  /**\n   * Get the cross origin of the ImageTile.\n   * @return {string} Cross origin.\n   */\n  getCrossOrigin() {\n    return this.crossOrigin_;\n  }\n\n  /**\n   * Get the referrer policy of the ImageTile.\n   * @return {ReferrerPolicy} Referrer policy.\n   */\n  getReferrerPolicy() {\n    return this.referrerPolicy_;\n  }\n\n  /**\n   * Tracks loading or read errors.\n   *\n   * @private\n   */\n  handleImageError_() {\n    this.state = TileState.ERROR;\n    this.unlistenImage_();\n    this.image_ = getBlankImage();\n    this.changed();\n  }\n\n  /**\n   * Tracks successful image load.\n   *\n   * @private\n   */\n  handleImageLoad_() {\n    if (WORKER_OFFSCREEN_CANVAS) {\n      // OffscreenCanvas does not have naturalWidth and naturalHeight\n      this.state = TileState.LOADED;\n    } else {\n      const image = /** @type {HTMLImageElement} */ (this.image_);\n      if (image.naturalWidth && image.naturalHeight) {\n        this.state = TileState.LOADED;\n      } else {\n        this.state = TileState.EMPTY;\n      }\n    }\n    this.unlistenImage_();\n    this.changed();\n  }\n\n  /**\n   * Load the image or retry if loading previously failed.\n   * Loading is taken care of by the tile queue, and calling this method is\n   * only needed for preloading or for reloading in case of an error.\n   *\n   * To retry loading tiles on failed requests, use a custom `tileLoadFunction`\n   * that checks for error status codes and reloads only when the status code is\n   * 408, 429, 500, 502, 503 and 504, and only when not too many retries have been\n   * made already:\n   *\n   * ```js\n   * const retryCodes = [408, 429, 500, 502, 503, 504];\n   * const retries = {};\n   * source.setTileLoadFunction((tile, src) => {\n   *   const image = tile.getImage();\n   *   fetch(src)\n   *     .then((response) => {\n   *       if (retryCodes.includes(response.status)) {\n   *         retries[src] = (retries[src] || 0) + 1;\n   *         if (retries[src] <= 3) {\n   *           setTimeout(() => tile.load(), retries[src] * 1000);\n   *         }\n   *         return Promise.reject();\n   *       }\n   *       return response.blob();\n   *     })\n   *     .then((blob) => {\n   *       const imageUrl = URL.createObjectURL(blob);\n   *       image.src = imageUrl;\n   *       setTimeout(() => URL.revokeObjectURL(imageUrl), 5000);\n   *     })\n   *     .catch(() => tile.setState(3)); // error\n   * });\n   * ```\n   * @api\n   * @override\n   */\n  load() {\n    if (this.state == TileState.ERROR) {\n      this.state = TileState.IDLE;\n      this.image_ = new Image();\n      if (this.crossOrigin_ !== null) {\n        this.image_.crossOrigin = this.crossOrigin_;\n      }\n      if (this.referrerPolicy_ !== undefined) {\n        this.image_.referrerPolicy = this.referrerPolicy_;\n      }\n    }\n    if (this.state == TileState.IDLE) {\n      this.state = TileState.LOADING;\n      this.changed();\n      this.tileLoadFunction_(this, this.src_);\n      this.unlisten_ = listenImage(\n        this.image_,\n        this.handleImageLoad_.bind(this),\n        this.handleImageError_.bind(this),\n      );\n    }\n  }\n\n  /**\n   * Discards event handlers which listen for load completion or errors.\n   *\n   * @private\n   */\n  unlistenImage_() {\n    if (this.unlisten_) {\n      this.unlisten_();\n      this.unlisten_ = null;\n    }\n  }\n\n  /**\n   * @override\n   */\n  disposeInternal() {\n    this.unlistenImage_();\n    this.image_ = null;\n    super.disposeInternal();\n  }\n}\n\n/**\n * Get a 1-pixel blank image.\n * @return {HTMLCanvasElement|OffscreenCanvas} Blank image.\n */\nfunction getBlankImage() {\n  const ctx = createCanvasContext2D(1, 1);\n  ctx.fillStyle = 'rgba(0,0,0,0)';\n  ctx.fillRect(0, 0, 1, 1);\n  return ctx.canvas;\n}\n\nexport default ImageTile;\n","/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n  /**\n   * @param {number} decay Rate of decay (must be negative).\n   * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n   * @param {number} delay Delay to consider to calculate the kinetic\n   *     initial values (milliseconds).\n   */\n  constructor(decay, minVelocity, delay) {\n    /**\n     * @private\n     * @type {number}\n     */\n    this.decay_ = decay;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.minVelocity_ = minVelocity;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.delay_ = delay;\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.points_ = [];\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.angle_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.initialVelocity_ = 0;\n  }\n\n  /**\n   * FIXME empty description for jsdoc\n   */\n  begin() {\n    this.points_.length = 0;\n    this.angle_ = 0;\n    this.initialVelocity_ = 0;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   */\n  update(x, y) {\n    this.points_.push(x, y, Date.now());\n  }\n\n  /**\n   * @return {boolean} Whether we should do kinetic animation.\n   */\n  end() {\n    if (this.points_.length < 6) {\n      // at least 2 points are required (i.e. there must be at least 6 elements\n      // in the array)\n      return false;\n    }\n    const delay = Date.now() - this.delay_;\n    const lastIndex = this.points_.length - 3;\n    if (this.points_[lastIndex + 2] < delay) {\n      // the last tracked point is too old, which means that the user stopped\n      // panning before releasing the map\n      return false;\n    }\n\n    // get the first point which still falls into the delay time\n    let firstIndex = lastIndex - 3;\n    while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n      firstIndex -= 3;\n    }\n\n    const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n    // we don't want a duration of 0 (divide by zero)\n    // we also make sure the user panned for a duration of at least one frame\n    // (1/60s) to compute sane displacement values\n    if (duration < 1000 / 60) {\n      return false;\n    }\n\n    const dx = this.points_[lastIndex] - this.points_[firstIndex];\n    const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n    this.angle_ = Math.atan2(dy, dx);\n    this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n    return this.initialVelocity_ > this.minVelocity_;\n  }\n\n  /**\n   * @return {number} Total distance travelled (pixels).\n   */\n  getDistance() {\n    return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n  }\n\n  /**\n   * @return {number} Angle of the kinetic panning animation (radians).\n   */\n  getAngle() {\n    return this.angle_;\n  }\n}\n\nexport default Kinetic;\n","/**\n * @module ol/MapBrowserEventHandler\n */\n\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport {listen, unlistenByKey} from './events.js';\nimport EventType from './events/EventType.js';\nimport Target from './events/Target.js';\nimport {PASSIVE_EVENT_LISTENERS} from './has.js';\nimport PointerEventType from './pointer/EventType.js';\n\nclass MapBrowserEventHandler extends Target {\n  /**\n   * @param {import(\"./Map.js\").default} map The map with the viewport to listen to events on.\n   * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n   */\n  constructor(map, moveTolerance) {\n    super(map);\n\n    /**\n     * This is the element that we will listen to the real events on.\n     * @type {import(\"./Map.js\").default}\n     * @private\n     */\n    this.map_ = map;\n\n    /**\n     * @type {ReturnType<typeof setTimeout>}\n     * @private\n     */\n    this.clickTimeoutId_;\n\n    /**\n     * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n     * @type {boolean}\n     */\n    this.emulateClicks_ = false;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.dragging_ = false;\n\n    /**\n     * @type {!Array<import(\"./events.js\").EventsKey>}\n     * @private\n     */\n    this.dragListenerKeys_ = [];\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n    /**\n     * The most recent \"down\" type event (or null if none have occurred).\n     * Set on pointerdown.\n     * @type {PointerEvent|null}\n     * @private\n     */\n    this.down_ = null;\n\n    const element = this.map_.getViewport();\n\n    /**\n     * @type {Array<PointerEvent>}\n     * @private\n     */\n    this.activePointers_ = [];\n\n    /**\n     * @type {!Object<number, Event>}\n     * @private\n     */\n    this.trackedTouches_ = {};\n\n    /**\n     * @private\n     */\n    this.element_ = element;\n\n    /**\n     * @type {?import(\"./events.js\").EventsKey}\n     * @private\n     */\n    this.pointerdownListenerKey_ = listen(\n      element,\n      PointerEventType.POINTERDOWN,\n      this.handlePointerDown_,\n      this,\n    );\n\n    /**\n     * @type {PointerEvent}\n     * @private\n     */\n    this.originalPointerMoveEvent_;\n\n    /**\n     * @type {?import(\"./events.js\").EventsKey}\n     * @private\n     */\n    this.relayedListenerKey_ = listen(\n      element,\n      PointerEventType.POINTERMOVE,\n      this.relayMoveEvent_,\n      this,\n    );\n\n    /**\n     * @private\n     */\n    this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n\n    this.element_.addEventListener(\n      EventType.TOUCHMOVE,\n      this.boundHandleTouchMove_,\n      PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n    );\n  }\n\n  /**\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @private\n   */\n  emulateClick_(pointerEvent) {\n    let newEvent = new MapBrowserEvent(\n      MapBrowserEventType.CLICK,\n      this.map_,\n      pointerEvent,\n    );\n    this.dispatchEvent(newEvent);\n    if (this.clickTimeoutId_ !== undefined) {\n      // double-click\n      clearTimeout(this.clickTimeoutId_);\n      this.clickTimeoutId_ = undefined;\n      newEvent = new MapBrowserEvent(\n        MapBrowserEventType.DBLCLICK,\n        this.map_,\n        pointerEvent,\n      );\n      this.dispatchEvent(newEvent);\n    } else {\n      // click\n      this.clickTimeoutId_ = setTimeout(() => {\n        this.clickTimeoutId_ = undefined;\n        const newEvent = new MapBrowserEvent(\n          MapBrowserEventType.SINGLECLICK,\n          this.map_,\n          pointerEvent,\n        );\n        this.dispatchEvent(newEvent);\n      }, 250);\n    }\n  }\n\n  /**\n   * Keeps track on how many pointers are currently active.\n   *\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @private\n   */\n  updateActivePointers_(pointerEvent) {\n    const event = pointerEvent;\n    const id = event.pointerId;\n\n    if (\n      event.type == MapBrowserEventType.POINTERUP ||\n      event.type == MapBrowserEventType.POINTERCANCEL\n    ) {\n      delete this.trackedTouches_[id];\n      for (const pointerId in this.trackedTouches_) {\n        if (this.trackedTouches_[pointerId].target !== event.target) {\n          // Some platforms assign a new pointerId when the target changes.\n          // If this happens, delete one tracked pointer. If there is more\n          // than one tracked pointer for the old target, it will be cleared\n          // by subsequent POINTERUP events from other pointers.\n          delete this.trackedTouches_[pointerId];\n          break;\n        }\n      }\n    } else if (\n      event.type == MapBrowserEventType.POINTERDOWN ||\n      event.type == MapBrowserEventType.POINTERMOVE\n    ) {\n      this.trackedTouches_[id] = event;\n    }\n    this.activePointers_ = Object.values(this.trackedTouches_);\n  }\n\n  /**\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @private\n   */\n  handlePointerUp_(pointerEvent) {\n    this.updateActivePointers_(pointerEvent);\n    const newEvent = new MapBrowserEvent(\n      MapBrowserEventType.POINTERUP,\n      this.map_,\n      pointerEvent,\n      undefined,\n      undefined,\n      this.activePointers_,\n    );\n    this.dispatchEvent(newEvent);\n\n    // We emulate click events on left mouse button click, touch contact, and pen\n    // contact. isMouseActionButton returns true in these cases (evt.button is set\n    // to 0).\n    // See http://www.w3.org/TR/pointerevents/#button-states\n    // We only fire click, singleclick, and doubleclick if nobody has called\n    // event.preventDefault().\n    if (\n      this.emulateClicks_ &&\n      !newEvent.defaultPrevented &&\n      !this.dragging_ &&\n      this.isMouseActionButton_(pointerEvent)\n    ) {\n      this.emulateClick_(this.down_);\n    }\n\n    if (this.activePointers_.length === 0) {\n      this.dragListenerKeys_.forEach(unlistenByKey);\n      this.dragListenerKeys_.length = 0;\n      this.dragging_ = false;\n      this.down_ = null;\n    }\n  }\n\n  /**\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @return {boolean} If the left mouse button was pressed.\n   * @private\n   */\n  isMouseActionButton_(pointerEvent) {\n    return pointerEvent.button === 0;\n  }\n\n  /**\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @private\n   */\n  handlePointerDown_(pointerEvent) {\n    this.emulateClicks_ = this.activePointers_.length === 0;\n    this.updateActivePointers_(pointerEvent);\n    const newEvent = new MapBrowserEvent(\n      MapBrowserEventType.POINTERDOWN,\n      this.map_,\n      pointerEvent,\n      undefined,\n      undefined,\n      this.activePointers_,\n    );\n    this.dispatchEvent(newEvent);\n\n    this.down_ = new PointerEvent(pointerEvent.type, pointerEvent);\n    Object.defineProperty(this.down_, 'target', {\n      writable: false,\n      value: pointerEvent.target,\n    });\n\n    if (this.dragListenerKeys_.length === 0) {\n      const doc = this.map_.getOwnerDocument();\n      this.dragListenerKeys_.push(\n        listen(\n          doc,\n          MapBrowserEventType.POINTERMOVE,\n          this.handlePointerMove_,\n          this,\n        ),\n        listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this),\n        /* Note that the listener for `pointercancel is set up on\n         * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n         * the `pointerup` and `pointermove` listeners.\n         *\n         * The reason for this is the following: `TouchSource.vacuumTouches_()`\n         * issues `pointercancel` events, when there was no `touchend` for a\n         * `touchstart`. Now, let's say a first `touchstart` is registered on\n         * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n         * But `documentPointerEventHandler_` doesn't know about the first\n         * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n         * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n         * only registered there.\n         */\n        listen(\n          this.element_,\n          MapBrowserEventType.POINTERCANCEL,\n          this.handlePointerUp_,\n          this,\n        ),\n      );\n      if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n        this.dragListenerKeys_.push(\n          listen(\n            this.element_.getRootNode(),\n            MapBrowserEventType.POINTERUP,\n            this.handlePointerUp_,\n            this,\n          ),\n        );\n      }\n    }\n  }\n\n  /**\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @private\n   */\n  handlePointerMove_(pointerEvent) {\n    // Between pointerdown and pointerup, pointermove events are triggered.\n    // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n    // moved a significant distance.\n    if (this.isMoving_(pointerEvent)) {\n      this.updateActivePointers_(pointerEvent);\n      this.dragging_ = true;\n      const newEvent = new MapBrowserEvent(\n        MapBrowserEventType.POINTERDRAG,\n        this.map_,\n        pointerEvent,\n        this.dragging_,\n        undefined,\n        this.activePointers_,\n      );\n      this.dispatchEvent(newEvent);\n    }\n  }\n\n  /**\n   * Wrap and relay a pointermove event.\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @private\n   */\n  relayMoveEvent_(pointerEvent) {\n    this.originalPointerMoveEvent_ = pointerEvent;\n    const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n    this.dispatchEvent(\n      new MapBrowserEvent(\n        MapBrowserEventType.POINTERMOVE,\n        this.map_,\n        pointerEvent,\n        dragging,\n      ),\n    );\n  }\n\n  /**\n   * Flexible handling of a `touch-action: none` css equivalent: because calling\n   * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n   * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n   * when an interaction (currently `DragPan` handles the event.\n   * @param {TouchEvent} event Event.\n   * @private\n   */\n  handleTouchMove_(event) {\n    // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n    // may not be initialized yet when we get here on a platform without native pointer events,\n    // when elm-pep is used as pointer events polyfill.\n    const originalEvent = this.originalPointerMoveEvent_;\n    if (\n      (!originalEvent || originalEvent.defaultPrevented) &&\n      (typeof event.cancelable !== 'boolean' || event.cancelable === true)\n    ) {\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * @param {PointerEvent} pointerEvent Pointer\n   * event.\n   * @return {boolean} Is moving.\n   * @private\n   */\n  isMoving_(pointerEvent) {\n    return (\n      this.dragging_ ||\n      Math.abs(pointerEvent.clientX - this.down_.clientX) >\n        this.moveTolerance_ ||\n      Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_\n    );\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    if (this.relayedListenerKey_) {\n      unlistenByKey(this.relayedListenerKey_);\n      this.relayedListenerKey_ = null;\n    }\n    this.element_.removeEventListener(\n      EventType.TOUCHMOVE,\n      this.boundHandleTouchMove_,\n    );\n\n    if (this.pointerdownListenerKey_) {\n      unlistenByKey(this.pointerdownListenerKey_);\n      this.pointerdownListenerKey_ = null;\n    }\n\n    this.dragListenerKeys_.forEach(unlistenByKey);\n    this.dragListenerKeys_.length = 0;\n\n    this.element_ = null;\n    super.disposeInternal();\n  }\n}\n\nexport default MapBrowserEventHandler;\n","/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n  /**\n   * @param {function(T): number} priorityFunction Priority function.\n   * @param {function(T): string} keyFunction Key function.\n   */\n  constructor(priorityFunction, keyFunction) {\n    /**\n     * @type {function(T): number}\n     * @private\n     */\n    this.priorityFunction_ = priorityFunction;\n\n    /**\n     * @type {function(T): string}\n     * @private\n     */\n    this.keyFunction_ = keyFunction;\n\n    /**\n     * @type {Array<T>}\n     * @private\n     */\n    this.elements_ = [];\n\n    /**\n     * @type {Array<number>}\n     * @private\n     */\n    this.priorities_ = [];\n\n    /**\n     * @type {!Object<string, boolean>}\n     * @private\n     */\n    this.queuedElements_ = {};\n  }\n\n  /**\n   * FIXME empty description for jsdoc\n   */\n  clear() {\n    this.elements_.length = 0;\n    this.priorities_.length = 0;\n    clear(this.queuedElements_);\n  }\n\n  /**\n   * Remove and return the highest-priority element. O(log N).\n   * @return {T} Element.\n   */\n  dequeue() {\n    const elements = this.elements_;\n    const priorities = this.priorities_;\n    const element = elements[0];\n    if (elements.length == 1) {\n      elements.length = 0;\n      priorities.length = 0;\n    } else {\n      elements[0] = /** @type {T} */ (elements.pop());\n      priorities[0] = /** @type {number} */ (priorities.pop());\n      this.siftUp_(0);\n    }\n    const elementKey = this.keyFunction_(element);\n    delete this.queuedElements_[elementKey];\n    return element;\n  }\n\n  /**\n   * Enqueue an element. O(log N).\n   * @param {T} element Element.\n   * @return {boolean} The element was added to the queue.\n   */\n  enqueue(element) {\n    assert(\n      !(this.keyFunction_(element) in this.queuedElements_),\n      'Tried to enqueue an `element` that was already added to the queue',\n    );\n    const priority = this.priorityFunction_(element);\n    if (priority != DROP) {\n      this.elements_.push(element);\n      this.priorities_.push(priority);\n      this.queuedElements_[this.keyFunction_(element)] = true;\n      this.siftDown_(0, this.elements_.length - 1);\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * @return {number} Count.\n   */\n  getCount() {\n    return this.elements_.length;\n  }\n\n  /**\n   * Gets the index of the left child of the node at the given index.\n   * @param {number} index The index of the node to get the left child for.\n   * @return {number} The index of the left child.\n   * @private\n   */\n  getLeftChildIndex_(index) {\n    return index * 2 + 1;\n  }\n\n  /**\n   * Gets the index of the right child of the node at the given index.\n   * @param {number} index The index of the node to get the right child for.\n   * @return {number} The index of the right child.\n   * @private\n   */\n  getRightChildIndex_(index) {\n    return index * 2 + 2;\n  }\n\n  /**\n   * Gets the index of the parent of the node at the given index.\n   * @param {number} index The index of the node to get the parent for.\n   * @return {number} The index of the parent.\n   * @private\n   */\n  getParentIndex_(index) {\n    return (index - 1) >> 1;\n  }\n\n  /**\n   * Make this a heap. O(N).\n   * @private\n   */\n  heapify_() {\n    let i;\n    for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n      this.siftUp_(i);\n    }\n  }\n\n  /**\n   * @return {boolean} Is empty.\n   */\n  isEmpty() {\n    return this.elements_.length === 0;\n  }\n\n  /**\n   * @param {string} key Key.\n   * @return {boolean} Is key queued.\n   */\n  isKeyQueued(key) {\n    return key in this.queuedElements_;\n  }\n\n  /**\n   * @param {T} element Element.\n   * @return {boolean} Is queued.\n   */\n  isQueued(element) {\n    return this.isKeyQueued(this.keyFunction_(element));\n  }\n\n  /**\n   * @param {number} index The index of the node to move down.\n   * @private\n   */\n  siftUp_(index) {\n    const elements = this.elements_;\n    const priorities = this.priorities_;\n    const count = elements.length;\n    const element = elements[index];\n    const priority = priorities[index];\n    const startIndex = index;\n\n    while (index < count >> 1) {\n      const lIndex = this.getLeftChildIndex_(index);\n      const rIndex = this.getRightChildIndex_(index);\n\n      const smallerChildIndex =\n        rIndex < count && priorities[rIndex] < priorities[lIndex]\n          ? rIndex\n          : lIndex;\n\n      elements[index] = elements[smallerChildIndex];\n      priorities[index] = priorities[smallerChildIndex];\n      index = smallerChildIndex;\n    }\n\n    elements[index] = element;\n    priorities[index] = priority;\n    this.siftDown_(startIndex, index);\n  }\n\n  /**\n   * @param {number} startIndex The index of the root.\n   * @param {number} index The index of the node to move up.\n   * @private\n   */\n  siftDown_(startIndex, index) {\n    const elements = this.elements_;\n    const priorities = this.priorities_;\n    const element = elements[index];\n    const priority = priorities[index];\n\n    while (index > startIndex) {\n      const parentIndex = this.getParentIndex_(index);\n      if (priorities[parentIndex] > priority) {\n        elements[index] = elements[parentIndex];\n        priorities[index] = priorities[parentIndex];\n        index = parentIndex;\n      } else {\n        break;\n      }\n    }\n    elements[index] = element;\n    priorities[index] = priority;\n  }\n\n  /**\n   * FIXME empty description for jsdoc\n   */\n  reprioritize() {\n    const priorityFunction = this.priorityFunction_;\n    const elements = this.elements_;\n    const priorities = this.priorities_;\n    let index = 0;\n    const n = elements.length;\n    let element, i, priority;\n    for (i = 0; i < n; ++i) {\n      element = elements[i];\n      priority = priorityFunction(element);\n      if (priority == DROP) {\n        delete this.queuedElements_[this.keyFunction_(element)];\n      } else {\n        priorities[index] = priority;\n        elements[index++] = element;\n      }\n    }\n    elements.length = index;\n    priorities.length = index;\n    this.heapify_();\n  }\n}\n\nexport default PriorityQueue;\n","/**\n * @module ol/TileQueue\n */\nimport TileState from './TileState.js';\nimport EventType from './events/EventType.js';\nimport PriorityQueue, {DROP} from './structs/PriorityQueue.js';\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import('./tilecoord.js').TileCoord, number): number} PriorityFunction\n */\n\n/**\n * @typedef {[import('./Tile.js').default, string, import('./tilecoord.js').TileCoord, number]} TileQueueElement\n */\n\n/**\n * @extends PriorityQueue<TileQueueElement>}\n */\nclass TileQueue extends PriorityQueue {\n  /**\n   * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n   * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n   */\n  constructor(tilePriorityFunction, tileChangeCallback) {\n    super(\n      (element) => tilePriorityFunction.apply(null, element),\n      (element) => element[0].getKey(),\n    );\n\n    /** @private */\n    this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n    /**\n     * @private\n     * @type {function(): ?}\n     */\n    this.tileChangeCallback_ = tileChangeCallback;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.tilesLoading_ = 0;\n\n    /**\n     * @private\n     * @type {!Object<string,boolean>}\n     */\n    this.tilesLoadingKeys_ = {};\n  }\n\n  /**\n   * @param {TileQueueElement} element Element.\n   * @return {boolean} The element was added to the queue.\n   * @override\n   */\n  enqueue(element) {\n    const added = super.enqueue(element);\n    if (added) {\n      const tile = element[0];\n      tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n    }\n    return added;\n  }\n\n  /**\n   * @return {number} Number of tiles loading.\n   */\n  getTilesLoading() {\n    return this.tilesLoading_;\n  }\n\n  /**\n   * @param {import(\"./events/Event.js\").default} event Event.\n   * @protected\n   */\n  handleTileChange(event) {\n    const tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n    const state = tile.getState();\n    if (\n      state === TileState.LOADED ||\n      state === TileState.ERROR ||\n      state === TileState.EMPTY\n    ) {\n      if (state !== TileState.ERROR) {\n        tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n      }\n      const tileKey = tile.getKey();\n      if (tileKey in this.tilesLoadingKeys_) {\n        delete this.tilesLoadingKeys_[tileKey];\n        --this.tilesLoading_;\n      }\n      this.tileChangeCallback_();\n    }\n  }\n\n  /**\n   * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n   * @param {number} maxNewLoads Maximum number of new tiles to load.\n   */\n  loadMoreTiles(maxTotalLoading, maxNewLoads) {\n    let newLoads = 0;\n    while (\n      this.tilesLoading_ < maxTotalLoading &&\n      newLoads < maxNewLoads &&\n      this.getCount() > 0\n    ) {\n      const tile = this.dequeue()[0];\n      const tileKey = tile.getKey();\n      const state = tile.getState();\n      if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n        this.tilesLoadingKeys_[tileKey] = true;\n        ++this.tilesLoading_;\n        ++newLoads;\n        tile.load();\n      }\n    }\n  }\n}\n\nexport default TileQueue;\n\n/**\n * @param {import('./Map.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(\n  frameState,\n  tile,\n  tileSourceKey,\n  tileCenter,\n  tileResolution,\n) {\n  // Filter out tiles at higher zoom levels than the current zoom level, or that\n  // are outside the visible extent.\n  if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n    return DROP;\n  }\n  if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n    return DROP;\n  }\n  // Prioritize the highest zoom level tiles closest to the focus.\n  // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n  // Within a zoom level, tiles are prioritized by the distance in pixels between\n  // the center of the tile and the center of the viewport.  The factor of 65536\n  // means that the prioritization should behave as desired for tiles up to\n  // 65536 * Math.log(2) = 45426 pixels from the focus.\n  const center = frameState.viewState.center;\n  const deltaX = tileCenter[0] - center[0];\n  const deltaY = tileCenter[1] - center[1];\n  return (\n    65536 * Math.log(tileResolution) +\n    Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution\n  );\n}\n","/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport {wrapX} from '../coordinate.js';\nimport {getWidth} from '../extent.js';\nimport {TRUE} from '../functions.js';\nimport {inView} from '../layer/Layer.js';\nimport {shared as iconImageCache} from '../style/IconImageCache.js';\nimport {compose as composeTransform, makeInverse} from '../transform.js';\nimport {abstract} from '../util.js';\n\n/**\n * @template T\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback<T>} callback Callback.\n */\n\n/**\n * @abstract\n */\nclass MapRenderer extends Disposable {\n  /**\n   * @param {import(\"../Map.js\").default} map Map.\n   */\n  constructor(map) {\n    super();\n\n    /**\n     * @private\n     * @type {import(\"../Map.js\").default}\n     */\n    this.map_ = map;\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../render/EventType.js\").default} type Event type.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   */\n  dispatchRenderEvent(type, frameState) {\n    abstract();\n  }\n\n  /**\n   * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n   * @protected\n   */\n  calculateMatrices2D(frameState) {\n    const viewState = frameState.viewState;\n    const coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n    const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n    composeTransform(\n      coordinateToPixelTransform,\n      frameState.size[0] / 2,\n      frameState.size[1] / 2,\n      1 / viewState.resolution,\n      -1 / viewState.resolution,\n      -viewState.rotation,\n      -viewState.center[0],\n      -viewState.center[1],\n    );\n\n    makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n  }\n\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n   * @param {number} hitTolerance Hit tolerance in pixels.\n   * @param {boolean} checkWrapped Check for wrapped geometries.\n   * @param {import(\"./vector.js\").FeatureCallback<T>} callback Feature callback.\n   * @param {S} thisArg Value to use as `this` when executing `callback`.\n   * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n   *     function, only layers which are visible and for which this function\n   *     returns `true` will be tested for features.  By default, all visible\n   *     layers will be tested.\n   * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n   * @return {T|undefined} Callback result.\n   * @template S,T,U\n   */\n  forEachFeatureAtCoordinate(\n    coordinate,\n    frameState,\n    hitTolerance,\n    checkWrapped,\n    callback,\n    thisArg,\n    layerFilter,\n    thisArg2,\n  ) {\n    let result;\n    const viewState = frameState.viewState;\n\n    /**\n     * @param {boolean} managed Managed layer.\n     * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n     * @param {import(\"../layer/Layer.js\").default} layer Layer.\n     * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n     * @return {T|undefined} Callback result.\n     */\n    function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n      return callback.call(thisArg, feature, managed ? layer : null, geometry);\n    }\n\n    const projection = viewState.projection;\n\n    const translatedCoordinate = wrapX(coordinate.slice(), projection);\n    const offsets = [[0, 0]];\n    if (projection.canWrapX() && checkWrapped) {\n      const projectionExtent = projection.getExtent();\n      const worldWidth = getWidth(projectionExtent);\n      offsets.push([-worldWidth, 0], [worldWidth, 0]);\n    }\n\n    const layerStates = frameState.layerStatesArray;\n    const numLayers = layerStates.length;\n\n    const matches = /** @type {Array<HitMatch<T>>} */ ([]);\n    const tmpCoord = [];\n    for (let i = 0; i < offsets.length; i++) {\n      for (let j = numLayers - 1; j >= 0; --j) {\n        const layerState = layerStates[j];\n        const layer = layerState.layer;\n        if (\n          layer.hasRenderer() &&\n          inView(layerState, viewState) &&\n          layerFilter.call(thisArg2, layer)\n        ) {\n          const layerRenderer = layer.getRenderer();\n          const source = layer.getSource();\n          if (layerRenderer && source) {\n            const coordinates = source.getWrapX()\n              ? translatedCoordinate\n              : coordinate;\n            const callback = forEachFeatureAtCoordinate.bind(\n              null,\n              layerState.managed,\n            );\n            tmpCoord[0] = coordinates[0] + offsets[i][0];\n            tmpCoord[1] = coordinates[1] + offsets[i][1];\n            result = layerRenderer.forEachFeatureAtCoordinate(\n              tmpCoord,\n              frameState,\n              hitTolerance,\n              callback,\n              matches,\n            );\n          }\n          if (result) {\n            return result;\n          }\n        }\n      }\n    }\n    if (matches.length === 0) {\n      return undefined;\n    }\n    const order = 1 / matches.length;\n    matches.forEach((m, i) => (m.distanceSq += i * order));\n    matches.sort((a, b) => a.distanceSq - b.distanceSq);\n    matches.some((m) => {\n      return (result = m.callback(m.feature, m.layer, m.geometry));\n    });\n    return result;\n  }\n\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n   * @param {number} hitTolerance Hit tolerance in pixels.\n   * @param {boolean} checkWrapped Check for wrapped geometries.\n   * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n   *     function, only layers which are visible and for which this function\n   *     returns `true` will be tested for features.  By default, all visible\n   *     layers will be tested.\n   * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n   * @return {boolean} Is there a feature at the given coordinate?\n   * @template U\n   */\n  hasFeatureAtCoordinate(\n    coordinate,\n    frameState,\n    hitTolerance,\n    checkWrapped,\n    layerFilter,\n    thisArg,\n  ) {\n    const hasFeature = this.forEachFeatureAtCoordinate(\n      coordinate,\n      frameState,\n      hitTolerance,\n      checkWrapped,\n      TRUE,\n      this,\n      layerFilter,\n      thisArg,\n    );\n\n    return hasFeature !== undefined;\n  }\n\n  /**\n   * @return {import(\"../Map.js\").default} Map.\n   */\n  getMap() {\n    return this.map_;\n  }\n\n  /**\n   * Render.\n   * @abstract\n   * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n   */\n  renderFrame(frameState) {\n    abstract();\n  }\n\n  /**\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  scheduleExpireIconCache(frameState) {\n    if (iconImageCache.canExpireCache()) {\n      frameState.postRenderFunctions.push(expireIconCache);\n    }\n  }\n}\n\n/**\n * @param {import(\"../Map.js\").default} map Map.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n  iconImageCache.expire();\n}\n\nexport default MapRenderer;\n","/**\n * @module ol/renderer/Composite\n */\nimport ObjectEventType from '../ObjectEventType.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {createMockDiv, isCanvas, replaceChildren} from '../dom.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../has.js';\nimport BaseVectorLayer from '../layer/BaseVector.js';\nimport {inView} from '../layer/Layer.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport {checkedFonts} from '../render/canvas.js';\nimport {fromString} from '../transform.js';\nimport MapRenderer from './Map.js';\n\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nclass CompositeMapRenderer extends MapRenderer {\n  /**\n   * @param {import(\"../Map.js\").default} map Map.\n   */\n  constructor(map) {\n    super(map);\n\n    /**\n     * @private\n     * @type {import(\"../events.js\").EventsKey}\n     */\n    this.fontChangeListenerKey_ = listen(\n      checkedFonts,\n      ObjectEventType.PROPERTYCHANGE,\n      map.redrawText,\n      map,\n    );\n\n    /**\n     * @private\n     * @type {HTMLDivElement}\n     */\n    this.element_ = WORKER_OFFSCREEN_CANVAS\n      ? createMockDiv()\n      : document.createElement('div');\n    const style = this.element_.style;\n    style.position = 'absolute';\n    style.width = '100%';\n    style.height = '100%';\n    style.zIndex = '0';\n\n    this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n\n    const container = map.getViewport();\n    if (container) {\n      // maps in a worker do not have a viewport.\n      container.insertBefore(this.element_, container.firstChild || null);\n    }\n\n    /**\n     * @private\n     * @type {Array<HTMLElement>}\n     */\n    this.children_ = [];\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderedVisible_ = true;\n  }\n\n  /**\n   * @param {import(\"../render/EventType.js\").default} type Event type.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @override\n   */\n  dispatchRenderEvent(type, frameState) {\n    const map = this.getMap();\n    if (map.hasListener(type)) {\n      const event = new RenderEvent(type, undefined, frameState);\n      map.dispatchEvent(event);\n    }\n  }\n\n  /**\n   * @override\n   */\n  disposeInternal() {\n    unlistenByKey(this.fontChangeListenerKey_);\n    this.element_.remove();\n    super.disposeInternal();\n  }\n\n  /**\n   * Render.\n   * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n   * @override\n   */\n  renderFrame(frameState) {\n    if (!frameState) {\n      if (this.renderedVisible_) {\n        this.element_.style.display = 'none';\n        this.renderedVisible_ = false;\n      }\n      return;\n    }\n\n    this.calculateMatrices2D(frameState);\n    this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n\n    const layerStatesArray = frameState.layerStatesArray.sort(\n      (a, b) => a.zIndex - b.zIndex,\n    );\n    const declutter = layerStatesArray.some(\n      (layerState) =>\n        layerState.layer instanceof BaseVectorLayer &&\n        layerState.layer.getDeclutter(),\n    );\n    if (declutter) {\n      // Some layers need decluttering, turn on deferred rendering hint\n      frameState.declutter = {};\n    }\n    const viewState = frameState.viewState;\n\n    this.children_.length = 0;\n\n    const map = this.getMap();\n    const mapCanvas = map.getTargetElement();\n    /** @type {CanvasRenderingContext2D|undefined} */\n    let mapContext;\n    if (isCanvas(mapCanvas)) {\n      mapContext = /** @type {CanvasRenderingContext2D} */ (\n        mapCanvas.getContext('2d')\n      );\n      mapContext.setTransform(1, 0, 0, 1, 0, 0);\n      mapContext.clearRect(0, 0, mapCanvas.width, mapCanvas.height);\n    }\n\n    const renderedLayerStates = [];\n    let previousElement = mapContext ? mapCanvas : null;\n    for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n      const layerState = layerStatesArray[i];\n      frameState.layerIndex = i;\n\n      const layer = layerState.layer;\n      const sourceState = layer.getSourceState();\n      if (\n        !inView(layerState, viewState) ||\n        (sourceState != 'ready' && sourceState != 'undefined')\n      ) {\n        layer.unrender();\n        continue;\n      }\n\n      const element = layer.render(frameState, previousElement);\n      if (!element) {\n        continue;\n      }\n      if (element !== previousElement) {\n        this.children_.push(element);\n        previousElement = element;\n      }\n\n      renderedLayerStates.push(layerState);\n    }\n\n    this.declutter(frameState, renderedLayerStates);\n\n    replaceChildren(this.element_, this.children_);\n\n    for (const container of mapContext ? this.children_ : []) {\n      const canvas = container.firstElementChild || container;\n      const backgroundColor = container.style.backgroundColor;\n      if (backgroundColor && (!isCanvas(canvas) || canvas.width > 0)) {\n        mapContext.fillStyle = backgroundColor;\n        mapContext.fillRect(\n          0,\n          0,\n          mapContext.canvas.width,\n          mapContext.canvas.height,\n        );\n      }\n      if (!isCanvas(canvas) || canvas.width === 0) {\n        continue;\n      }\n      mapContext.save();\n      const opacity = container.style.opacity || canvas.style.opacity;\n      mapContext.globalAlpha = opacity === '' ? 1 : Number(opacity);\n      const transform = canvas.style.transform;\n      if (transform) {\n        // Get the transform parameters from the style's transform matrix\n        mapContext.transform(\n          .../** @type {[number, number, number, number, number, number]} */ (\n            fromString(transform)\n          ),\n        );\n      } else {\n        const w = parseFloat(canvas.style.width) / canvas.width;\n        const h = parseFloat(canvas.style.height) / canvas.height;\n        mapContext.transform(w, 0, 0, h, 0, 0);\n      }\n      mapContext.drawImage(canvas, 0, 0);\n      mapContext.restore();\n    }\n\n    this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n\n    if (!this.renderedVisible_) {\n      this.element_.style.display = '';\n      this.renderedVisible_ = true;\n    }\n\n    this.scheduleExpireIconCache(frameState);\n  }\n\n  /**\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @param {Array<import('../layer/Layer.js').State>} layerStates Layers.\n   */\n  declutter(frameState, layerStates) {\n    if (!frameState.declutter) {\n      return;\n    }\n    for (let i = layerStates.length - 1; i >= 0; --i) {\n      const layerState = layerStates[i];\n      const layer = layerState.layer;\n      if (layer.getDeclutter()) {\n        layer.renderDeclutter(frameState, layerState);\n      }\n    }\n    layerStates.forEach((layerState) =>\n      layerState.layer.renderDeferred(frameState),\n    );\n  }\n}\n\nexport default CompositeMapRenderer;\n","/**\n * @module ol/Map\n */\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport BaseObject from './Object.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport TileQueue, {getTilePriority} from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {equals} from './array.js';\nimport {assert} from './asserts.js';\nimport {warn} from './console.js';\nimport {defaults as defaultControls} from './control/defaults.js';\nimport {isCanvas} from './dom.js';\nimport {listen, unlistenByKey} from './events.js';\nimport EventType from './events/EventType.js';\nimport {\n  clone,\n  createOrUpdateEmpty,\n  equals as equalsExtent,\n  getForViewAndSize,\n  isEmpty,\n} from './extent.js';\nimport {TRUE} from './functions.js';\nimport {\n  DEVICE_PIXEL_RATIO,\n  PASSIVE_EVENT_LISTENERS,\n  WORKER_OFFSCREEN_CANVAS,\n} from './has.js';\nimport {defaults as defaultInteractions} from './interaction/defaults.js';\nimport LayerGroup, {GroupEvent} from './layer/Group.js';\nimport Layer from './layer/Layer.js';\nimport PointerEventType from './pointer/EventType.js';\nimport {fromUserCoordinate, toUserCoordinate} from './proj.js';\nimport RenderEventType from './render/EventType.js';\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport {hasArea} from './size.js';\nimport {\n  apply as applyTransform,\n  create as createTransform,\n} from './transform.js';\nimport {getUid} from './util.js';\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {Object<string, import(\"rbush\").default<import('./render/canvas/Executor.js').DeclutterEntry>>|null} declutter\n * Declutter trees by declutter group.\n * When null, no decluttering is needed because no layers have decluttering enabled.\n * @property {null|import(\"./extent.js\").Extent} extent Extent (in view projection coordinates).\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array<import(\"./layer/Layer.js\").State>} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array<PostRenderFunction>} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object<string, Object<string, boolean>>} usedTiles UsedTiles.\n * @property {Array<number>} viewHints ViewHints.\n * @property {!Object<string, Object<string, boolean>>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object<string, boolean>} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(Map, FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default<import(\"./source/Source.js\").default>): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for wrapped geometries inside the range of\n *   +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection<import(\"./control/Control.js\").default>} [controls] Controls.\n * @property {Collection<import(\"./interaction/Interaction.js\").default>} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection<import(\"./Overlay.js\").default>} overlays Overlays.\n * @property {Object<string, *>} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType.js\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable.js\").OnSignature<import(\"./Observable.js\").EventTypes, import(\"./events/Event.js\").default, Return> &\n *    import(\"./Observable.js\").OnSignature<MapObjectEventTypes, import(\"./Object.js\").ObjectEvent, Return> &\n *    import(\"./Observable.js\").OnSignature<import(\"./MapBrowserEventType.js\").Types, import(\"./MapBrowserEvent.js\").default, Return> &\n *    import(\"./Observable.js\").OnSignature<import(\"./MapEventType.js\").Types, import(\"./MapEvent.js\").default, Return> &\n *    import(\"./Observable.js\").OnSignature<import(\"./render/EventType.js\").MapRenderEventTypes, import(\"./render/Event.js\").default, Return> &\n *    import(\"./Observable.js\").CombinedOnSignature<import(\"./Observable.js\").EventTypes|MapObjectEventTypes|\n *      import(\"./MapBrowserEventType.js\").Types|import(\"./MapEventType.js\").Types|\n *      import(\"./render/EventType.js\").MapRenderEventTypes, Return>} MapEventHandler\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection<import(\"./control/Control.js\").default>|Array<import(\"./control/Control.js\").default>} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control/defaults.defaults} is used. In a worker, no controls are added by default.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection<import(\"./interaction/Interaction.js\").default>|Array<import(\"./interaction/Interaction.js\").default>} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction/defaults.defaults} is used. In a worker, no interactions are added by default.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array<import(\"./layer/Base.js\").default>|Collection<import(\"./layer/Base.js\").default>|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection<import(\"./Overlay.js\").default>|Array<import(\"./Overlay.js\").default>} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string|HTMLCanvasElement|OffscreenCanvas} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * For use in workers or when exporting a map, use an `OffscreenCanvas` or `HTMLCanvasElement` as target,\n * with a width and height in physical pixels, optionally multiplied by and a scale transform matching\n * the map's pixel ratio.\n * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n *  properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n *  `tabindex` atribute must be set on the custom element's host element.\n * **Note:** CSS `transform` support for the target element is limited to `scale`.\n * @property {View|Promise<import(\"./View.js\").ViewOptions>} [view] The map's view.  No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n  if (layer instanceof Layer) {\n    layer.setMapInternal(null);\n    return;\n  }\n  if (layer instanceof LayerGroup) {\n    layer.getLayers().forEach(removeLayerMapProperty);\n  }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {Map} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n  if (layer instanceof Layer) {\n    layer.setMapInternal(map);\n    return;\n  }\n  if (layer instanceof LayerGroup) {\n    const layers = layer.getLayers().getArray();\n    for (let i = 0, ii = layers.length; i < ii; ++i) {\n      setLayerMapProperty(layers[i], map);\n    }\n  }\n}\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n *     import Map from 'ol/Map.js';\n *     import View from 'ol/View.js';\n *     import TileLayer from 'ol/layer/Tile.js';\n *     import OSM from 'ol/source/OSM.js';\n *\n *     const map = new Map({\n *       view: new View({\n *         center: [0, 0],\n *         zoom: 1,\n *       }),\n *       layers: [\n *         new TileLayer({\n *           source: new OSM(),\n *         }),\n *       ],\n *       target: 'map',\n *     });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile~TileLayer} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~LayerGroup}\n * is a subclass of {@link module:ol/layer/Base~BaseLayer}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass Map extends BaseObject {\n  /**\n   * @param {MapOptions} [options] Map options.\n   */\n  constructor(options) {\n    super();\n\n    options = options || {};\n\n    /***\n     * @type {MapEventHandler<import(\"./events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {MapEventHandler<import(\"./events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {MapEventHandler<void>}\n     */\n    this.un;\n\n    const optionsInternal = createOptionsInternal(options);\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderComplete_ = false;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.loaded_ = true;\n\n    /** @private */\n    this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.maxTilesLoading_ =\n      options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelRatio_ =\n      options.pixelRatio !== undefined\n        ? options.pixelRatio\n        : DEVICE_PIXEL_RATIO;\n\n    /**\n     * @private\n     * @type {ReturnType<typeof setTimeout>}\n     */\n    this.postRenderTimeoutHandle_;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.animationDelayKey_;\n\n    /**\n     * @private\n     */\n    this.animationDelay_ = this.animationDelay_.bind(this);\n\n    /**\n     * @private\n     * @type {import(\"./transform.js\").Transform}\n     */\n    this.coordinateToPixelTransform_ = createTransform();\n\n    /**\n     * @private\n     * @type {import(\"./transform.js\").Transform}\n     */\n    this.pixelToCoordinateTransform_ = createTransform();\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.frameIndex_ = 0;\n\n    /**\n     * @private\n     * @type {?FrameState}\n     */\n    this.frameState_ = null;\n\n    /**\n     * The extent at the previous 'moveend' event.\n     * @private\n     * @type {import(\"./extent.js\").Extent}\n     */\n    this.previousExtent_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"./events.js\").EventsKey}\n     */\n    this.viewPropertyListenerKey_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"./events.js\").EventsKey}\n     */\n    this.viewChangeListenerKey_ = null;\n\n    /**\n     * @private\n     * @type {?Array<import(\"./events.js\").EventsKey>}\n     */\n    this.layerGroupPropertyListenerKeys_ = null;\n\n    /**\n     * @private\n     * @type {!HTMLElement}\n     */\n    if (!WORKER_OFFSCREEN_CANVAS) {\n      this.viewport_ = document.createElement('div');\n      this.viewport_.className =\n        'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n      this.viewport_.style.position = 'relative';\n      this.viewport_.style.overflow = 'hidden';\n      this.viewport_.style.width = '100%';\n      this.viewport_.style.height = '100%';\n\n      /**\n       * @private\n       * @type {!HTMLElement}\n       */\n      this.overlayContainer_ = document.createElement('div');\n      this.overlayContainer_.style.position = 'absolute';\n      this.overlayContainer_.style.zIndex = '0';\n      this.overlayContainer_.style.width = '100%';\n      this.overlayContainer_.style.height = '100%';\n      this.overlayContainer_.style.pointerEvents = 'none';\n      this.overlayContainer_.className = 'ol-overlaycontainer';\n      this.viewport_.appendChild(this.overlayContainer_);\n\n      /**\n       * @private\n       * @type {!HTMLElement}\n       */\n      this.overlayContainerStopEvent_ = document.createElement('div');\n      this.overlayContainerStopEvent_.style.position = 'absolute';\n      this.overlayContainerStopEvent_.style.zIndex = '0';\n      this.overlayContainerStopEvent_.style.width = '100%';\n      this.overlayContainerStopEvent_.style.height = '100%';\n      this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n      this.overlayContainerStopEvent_.className =\n        'ol-overlaycontainer-stopevent';\n      this.viewport_.appendChild(this.overlayContainerStopEvent_);\n    }\n\n    /**\n     * @private\n     * @type {MapBrowserEventHandler}\n     */\n    this.mapBrowserEventHandler_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.moveTolerance_ = options.moveTolerance;\n\n    /**\n     * @private\n     * @type {HTMLElement|Document}\n     */\n    this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n    /**\n     * @private\n     * @type {?Array<import(\"./events.js\").EventsKey>}\n     */\n    this.targetChangeHandlerKeys_ = null;\n\n    /**\n     * @private\n     * @type {HTMLElement|null}\n     */\n    this.targetElement_ = null;\n\n    if (!WORKER_OFFSCREEN_CANVAS) {\n      /**\n       * @private\n       * @type {ResizeObserver}\n       */\n      this.resizeObserver_ = new ResizeObserver(() => this.updateSize());\n    }\n\n    /**\n     * @type {Collection<import(\"./control/Control.js\").default>}\n     * @protected\n     */\n    this.controls =\n      optionsInternal.controls ||\n      (WORKER_OFFSCREEN_CANVAS ? new Collection() : defaultControls());\n\n    /**\n     * @type {Collection<import(\"./interaction/Interaction.js\").default>}\n     * @protected\n     */\n    this.interactions =\n      optionsInternal.interactions ||\n      (WORKER_OFFSCREEN_CANVAS\n        ? new Collection()\n        : defaultInteractions({\n            onFocusOnly: true,\n          }));\n\n    /**\n     * @type {Collection<import(\"./Overlay.js\").default>}\n     * @private\n     */\n    this.overlays_ = optionsInternal.overlays;\n\n    /**\n     * A lookup of overlays by id.\n     * @private\n     * @type {Object<string, import(\"./Overlay.js\").default>}\n     */\n    this.overlayIdIndex_ = {};\n\n    /**\n     * @type {import(\"./renderer/Map.js\").default|null}\n     * @private\n     */\n    this.renderer_ = null;\n\n    /**\n     * @private\n     * @type {!Array<PostRenderFunction>}\n     */\n    this.postRenderFunctions_ = [];\n\n    /**\n     * @private\n     * @type {TileQueue}\n     */\n    this.tileQueue_ = new TileQueue(\n      this.getTilePriority.bind(this),\n      this.handleTileChange_.bind(this),\n    );\n\n    this.addChangeListener(\n      MapProperty.LAYERGROUP,\n      this.handleLayerGroupChanged_,\n    );\n    this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_);\n    this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_);\n    this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_);\n\n    // setProperties will trigger the rendering of the map if the map\n    // is \"defined\" already.\n    this.setProperties(optionsInternal.values);\n\n    const map = this;\n    if (options.view && !(options.view instanceof View)) {\n      options.view.then(function (viewOptions) {\n        map.setView(new View(viewOptions));\n      });\n    }\n\n    this.controls.addEventListener(\n      CollectionEventType.ADD,\n      /**\n       * @param {import(\"./Collection.js\").CollectionEvent<import(\"./control/Control.js\").default>} event CollectionEvent\n       */\n      (event) => {\n        event.element.setMap(this);\n      },\n    );\n\n    this.controls.addEventListener(\n      CollectionEventType.REMOVE,\n      /**\n       * @param {import(\"./Collection.js\").CollectionEvent<import(\"./control/Control.js\").default>} event CollectionEvent.\n       */\n      (event) => {\n        event.element.setMap(null);\n      },\n    );\n\n    this.interactions.addEventListener(\n      CollectionEventType.ADD,\n      /**\n       * @param {import(\"./Collection.js\").CollectionEvent<import(\"./interaction/Interaction.js\").default>} event CollectionEvent.\n       */\n      (event) => {\n        event.element.setMap(this);\n      },\n    );\n\n    this.interactions.addEventListener(\n      CollectionEventType.REMOVE,\n      /**\n       * @param {import(\"./Collection.js\").CollectionEvent<import(\"./interaction/Interaction.js\").default>} event CollectionEvent.\n       */\n      (event) => {\n        event.element.setMap(null);\n      },\n    );\n\n    this.overlays_.addEventListener(\n      CollectionEventType.ADD,\n      /**\n       * @param {import(\"./Collection.js\").CollectionEvent<import(\"./Overlay.js\").default>} event CollectionEvent.\n       */\n      (event) => {\n        this.addOverlayInternal_(event.element);\n      },\n    );\n\n    this.overlays_.addEventListener(\n      CollectionEventType.REMOVE,\n      /**\n       * @param {import(\"./Collection.js\").CollectionEvent<import(\"./Overlay.js\").default>} event CollectionEvent.\n       */\n      (event) => {\n        const id = event.element.getId();\n        if (id !== undefined) {\n          delete this.overlayIdIndex_[id.toString()];\n        }\n        event.element.setMap(null);\n      },\n    );\n\n    this.controls.forEach(\n      /**\n       * @param {import(\"./control/Control.js\").default} control Control.\n       */\n      (control) => {\n        control.setMap(this);\n      },\n    );\n\n    this.interactions.forEach(\n      /**\n       * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n       */\n      (interaction) => {\n        interaction.setMap(this);\n      },\n    );\n\n    this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n  }\n\n  /**\n   * Add the given control to the map.\n   * @param {import(\"./control/Control.js\").default} control Control.\n   * @api\n   */\n  addControl(control) {\n    this.getControls().push(control);\n  }\n\n  /**\n   * Add the given interaction to the map. If you want to add an interaction\n   * at another point of the collection use `getInteractions()` and the methods\n   * available on {@link module:ol/Collection~Collection}. This can be used to\n   * stop the event propagation from the handleEvent function. The interactions\n   * get to handle the events in the reverse order of this collection.\n   * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n   * @api\n   */\n  addInteraction(interaction) {\n    this.getInteractions().push(interaction);\n  }\n\n  /**\n   * Adds the given layer to the top of this map. If you want to add a layer\n   * elsewhere in the stack, use `getLayers()` and the methods available on\n   * {@link module:ol/Collection~Collection}.\n   * @param {import(\"./layer/Base.js\").default} layer Layer.\n   * @api\n   */\n  addLayer(layer) {\n    const layers = this.getLayerGroup().getLayers();\n    layers.push(layer);\n  }\n\n  /**\n   * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n   * @private\n   */\n  handleLayerAdd_(event) {\n    setLayerMapProperty(event.layer, this);\n  }\n\n  /**\n   * Add the given overlay to the map.\n   * @param {import(\"./Overlay.js\").default} overlay Overlay.\n   * @api\n   */\n  addOverlay(overlay) {\n    this.getOverlays().push(overlay);\n  }\n\n  /**\n   * This deals with map's overlay collection changes.\n   * @param {import(\"./Overlay.js\").default} overlay Overlay.\n   * @private\n   */\n  addOverlayInternal_(overlay) {\n    const id = overlay.getId();\n    if (id !== undefined) {\n      this.overlayIdIndex_[id.toString()] = overlay;\n    }\n    overlay.setMap(this);\n  }\n\n  /**\n   *\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.controls.clear();\n    this.interactions.clear();\n    this.overlays_.clear();\n    this.resizeObserver_?.disconnect();\n    this.setTarget(null);\n    super.disposeInternal();\n  }\n\n  /**\n   * Detect features that intersect a pixel on the viewport, and execute a\n   * callback with each intersecting feature. Layers included in the detection can\n   * be configured through the `layerFilter` option in `options`.\n   * For polygons without a fill, only the stroke will be used for hit detection.\n   * Polygons must have a fill style applied to ensure that pixels inside a polygon are detected.\n   * The fill can be transparent.\n   * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n   * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default<import(\"./source/Source.js\").default>, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n   *     called with two arguments. The first argument is one\n   *     {@link module:ol/Feature~Feature feature} or\n   *     {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n   *     the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n   *     unmanaged layers. To stop detection, callback functions can return a\n   *     truthy value.\n   * @param {AtPixelOptions} [options] Optional options.\n   * @return {T|undefined} Callback result, i.e. the return value of last\n   * callback execution, or the first truthy callback return value.\n   * @template T\n   * @api\n   */\n  forEachFeatureAtPixel(pixel, callback, options) {\n    if (!this.frameState_ || !this.renderer_) {\n      return;\n    }\n    const coordinate = this.getCoordinateFromPixelInternal(pixel);\n    options = options !== undefined ? options : {};\n    const hitTolerance =\n      options.hitTolerance !== undefined ? options.hitTolerance : 0;\n    const layerFilter =\n      options.layerFilter !== undefined ? options.layerFilter : TRUE;\n    const checkWrapped = options.checkWrapped !== false;\n    return this.renderer_.forEachFeatureAtCoordinate(\n      coordinate,\n      this.frameState_,\n      hitTolerance,\n      checkWrapped,\n      callback,\n      null,\n      layerFilter,\n      null,\n    );\n  }\n\n  /**\n   * Get all features that intersect a pixel on the viewport.\n   * For polygons without a fill, only the stroke will be used for hit detection.\n   * Polygons must have a fill style applied to ensure that pixels inside a polygon are detected.\n   * The fill can be transparent.\n   * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n   * @param {AtPixelOptions} [options] Optional options.\n   * @return {Array<import(\"./Feature.js\").FeatureLike>} The detected features or\n   * an empty array if none were found.\n   * @api\n   */\n  getFeaturesAtPixel(pixel, options) {\n    const features = [];\n    this.forEachFeatureAtPixel(\n      pixel,\n      function (feature) {\n        features.push(feature);\n      },\n      options,\n    );\n    return features;\n  }\n\n  /**\n   * Get all layers from all layer groups.\n   * @return {Array<import(\"./layer/Layer.js\").default>} Layers.\n   * @api\n   */\n  getAllLayers() {\n    const layers = [];\n    function addLayersFrom(layerGroup) {\n      layerGroup.forEach(function (layer) {\n        if (layer instanceof LayerGroup) {\n          addLayersFrom(layer.getLayers());\n        } else {\n          layers.push(layer);\n        }\n      });\n    }\n    addLayersFrom(this.getLayers());\n    return layers;\n  }\n\n  /**\n   * Detect if features intersect a pixel on the viewport. Layers included in the\n   * detection can be configured through the `layerFilter` option.\n   * For polygons without a fill, only the stroke will be used for hit detection.\n   * Polygons must have a fill style applied to ensure that pixels inside a polygon are detected.\n   * The fill can be transparent.\n   * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n   * @param {AtPixelOptions} [options] Optional options.\n   * @return {boolean} Is there a feature at the given pixel?\n   * @api\n   */\n  hasFeatureAtPixel(pixel, options) {\n    if (!this.frameState_ || !this.renderer_) {\n      return false;\n    }\n    const coordinate = this.getCoordinateFromPixelInternal(pixel);\n    options = options !== undefined ? options : {};\n    const layerFilter =\n      options.layerFilter !== undefined ? options.layerFilter : TRUE;\n    const hitTolerance =\n      options.hitTolerance !== undefined ? options.hitTolerance : 0;\n    const checkWrapped = options.checkWrapped !== false;\n    return this.renderer_.hasFeatureAtCoordinate(\n      coordinate,\n      this.frameState_,\n      hitTolerance,\n      checkWrapped,\n      layerFilter,\n      null,\n    );\n  }\n\n  /**\n   * Returns the coordinate in user projection for a browser event.\n   * @param {MouseEvent} event Event.\n   * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n   * @api\n   */\n  getEventCoordinate(event) {\n    return this.getCoordinateFromPixel(this.getEventPixel(event));\n  }\n\n  /**\n   * Returns the coordinate in view projection for a browser event.\n   * @param {MouseEvent} event Event.\n   * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n   */\n  getEventCoordinateInternal(event) {\n    return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n  }\n\n  /**\n   * Returns the map pixel position for a browser event relative to the viewport.\n   * @param {UIEvent|{clientX: number, clientY: number}} event Event.\n   * @return {import(\"./pixel.js\").Pixel} Pixel.\n   * @api\n   */\n  getEventPixel(event) {\n    const viewport = this.viewport_;\n    const viewportPosition = viewport.getBoundingClientRect();\n    const viewportSize = this.getSize();\n    const scaleX = viewportPosition.width / viewportSize[0];\n    const scaleY = viewportPosition.height / viewportSize[1];\n    const eventPosition =\n      //FIXME Are we really calling this with a TouchEvent anywhere?\n      'changedTouches' in event\n        ? /** @type {TouchEvent} */ (event).changedTouches[0]\n        : /** @type {MouseEvent} */ (event);\n\n    return [\n      (eventPosition.clientX - viewportPosition.left) / scaleX,\n      (eventPosition.clientY - viewportPosition.top) / scaleY,\n    ];\n  }\n\n  /**\n   * Get the target in which this map is rendered.\n   * Note that this returns what is entered as an option or in setTarget:\n   * if that was an element, it returns an element; if a string, it returns that.\n   * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n   *     map is rendered in.\n   * @observable\n   * @api\n   */\n  getTarget() {\n    return /** @type {HTMLElement|string|undefined} */ (\n      this.get(MapProperty.TARGET)\n    );\n  }\n\n  /**\n   * Get the DOM element into which this map is rendered. In contrast to\n   * `getTarget` this method always return an `Element`, or `null` if the\n   * map has no target.\n   * @return {HTMLElement} The element that the map is rendered in.\n   * @api\n   */\n  getTargetElement() {\n    return this.targetElement_;\n  }\n\n  /**\n   * Get the coordinate for a given pixel.  This returns a coordinate in the\n   * user projection.\n   * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n   * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n   * @api\n   */\n  getCoordinateFromPixel(pixel) {\n    return toUserCoordinate(\n      this.getCoordinateFromPixelInternal(pixel),\n      this.getView().getProjection(),\n    );\n  }\n\n  /**\n   * Get the coordinate for a given pixel.  This returns a coordinate in the\n   * map view projection.\n   * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n   * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n   */\n  getCoordinateFromPixelInternal(pixel) {\n    const frameState = this.frameState_;\n    if (!frameState) {\n      return null;\n    }\n    return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n  }\n\n  /**\n   * Get the map controls. Modifying this collection changes the controls\n   * associated with the map.\n   * @return {Collection<import(\"./control/Control.js\").default>} Controls.\n   * @api\n   */\n  getControls() {\n    return this.controls;\n  }\n\n  /**\n   * Get the map overlays. Modifying this collection changes the overlays\n   * associated with the map.\n   * @return {Collection<import(\"./Overlay.js\").default>} Overlays.\n   * @api\n   */\n  getOverlays() {\n    return this.overlays_;\n  }\n\n  /**\n   * Get an overlay by its identifier (the value returned by overlay.getId()).\n   * Note that the index treats string and numeric identifiers as the same. So\n   * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n   * @param {string|number} id Overlay identifier.\n   * @return {import(\"./Overlay.js\").default|null} Overlay.\n   * @api\n   */\n  getOverlayById(id) {\n    const overlay = this.overlayIdIndex_[id.toString()];\n    return overlay !== undefined ? overlay : null;\n  }\n\n  /**\n   * Get the map interactions. Modifying this collection changes the interactions\n   * associated with the map.\n   *\n   * Interactions are used for e.g. pan, zoom and rotate.\n   * @return {Collection<import(\"./interaction/Interaction.js\").default>} Interactions.\n   * @api\n   */\n  getInteractions() {\n    return this.interactions;\n  }\n\n  /**\n   * Get the layergroup associated with this map.\n   * @return {LayerGroup} A layer group containing the layers in this map.\n   * @observable\n   * @api\n   */\n  getLayerGroup() {\n    return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n  }\n\n  /**\n   * Clear any existing layers and add layers to the map.\n   * @param {Array<import(\"./layer/Base.js\").default>|Collection<import(\"./layer/Base.js\").default>} layers The layers to be added to the map.\n   * @api\n   */\n  setLayers(layers) {\n    const group = this.getLayerGroup();\n    if (layers instanceof Collection) {\n      group.setLayers(layers);\n      return;\n    }\n\n    const collection = group.getLayers();\n    collection.clear();\n    collection.extend(layers);\n  }\n\n  /**\n   * Get the collection of layers associated with this map.\n   * @return {!Collection<import(\"./layer/Base.js\").default>} Layers.\n   * @api\n   */\n  getLayers() {\n    const layers = this.getLayerGroup().getLayers();\n    return layers;\n  }\n\n  /**\n   * @return {boolean} Layers have sources that are still loading.\n   */\n  getLoadingOrNotReady() {\n    const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n    for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n      const state = layerStatesArray[i];\n      if (!state.visible) {\n        continue;\n      }\n      const renderer = state.layer.getRenderer();\n      if (renderer && !renderer.ready) {\n        return true;\n      }\n      const source = state.layer.getSource();\n      if (source && source.loading) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Get the pixel for a coordinate.  This takes a coordinate in the user\n   * projection and returns the corresponding pixel.\n   * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n   * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n   * @api\n   */\n  getPixelFromCoordinate(coordinate) {\n    const viewCoordinate = fromUserCoordinate(\n      coordinate,\n      this.getView().getProjection(),\n    );\n    return this.getPixelFromCoordinateInternal(viewCoordinate);\n  }\n\n  /**\n   * Get the pixel for a coordinate.  This takes a coordinate in the map view\n   * projection and returns the corresponding pixel.\n   * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n   * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n   */\n  getPixelFromCoordinateInternal(coordinate) {\n    const frameState = this.frameState_;\n    if (!frameState) {\n      return null;\n    }\n    return applyTransform(\n      frameState.coordinateToPixelTransform,\n      coordinate.slice(0, 2),\n    );\n  }\n\n  /**\n   * Get the pixel ratio of the rendered map.\n   * @return {number} Pixel ratio.\n   * @api\n   */\n  getPixelRatio() {\n    return this.pixelRatio_;\n  }\n\n  /**\n   * Set the pixel ratio of the rendered map.\n   * @param {number} pixelRatio Pixel ratio.\n   * @api\n   */\n  setPixelRatio(pixelRatio) {\n    if (this.pixelRatio_ === pixelRatio) {\n      return;\n    }\n    this.pixelRatio_ = pixelRatio;\n    this.render();\n  }\n\n  /**\n   * Get the map renderer.\n   * @return {import(\"./renderer/Map.js\").default|null} Renderer\n   */\n  getRenderer() {\n    return this.renderer_;\n  }\n\n  /**\n   * Get the size of this map.\n   * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n   * @observable\n   * @api\n   */\n  getSize() {\n    return /** @type {import(\"./size.js\").Size|undefined} */ (\n      this.get(MapProperty.SIZE)\n    );\n  }\n\n  /**\n   * Get the view associated with this map. A view manages properties such as\n   * center and resolution.\n   * @return {View} The view that controls this map.\n   * @observable\n   * @api\n   */\n  getView() {\n    return /** @type {View} */ (this.get(MapProperty.VIEW));\n  }\n\n  /**\n   * Get the element that serves as the map viewport.\n   * @return {HTMLElement} Viewport.\n   * @api\n   */\n  getViewport() {\n    return this.viewport_;\n  }\n\n  /**\n   * Get the element that serves as the container for overlays.  Elements added to\n   * this container will let mousedown and touchstart events through to the map,\n   * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n   * events.\n   * @return {!HTMLElement} The map's overlay container.\n   */\n  getOverlayContainer() {\n    return this.overlayContainer_;\n  }\n\n  /**\n   * Get the element that serves as a container for overlays that don't allow\n   * event propagation. Elements added to this container won't let mousedown and\n   * touchstart events through to the map, so clicks and gestures on an overlay\n   * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n   * @return {!HTMLElement} The map's overlay container that stops events.\n   */\n  getOverlayContainerStopEvent() {\n    return this.overlayContainerStopEvent_;\n  }\n\n  /**\n   * @return {!Document} The document where the map is displayed.\n   */\n  getOwnerDocument() {\n    const targetElement = this.getTargetElement();\n    return targetElement ? targetElement.ownerDocument : document;\n  }\n\n  /**\n   * @param {import(\"./Tile.js\").default} tile Tile.\n   * @param {string} tileSourceKey Tile source key.\n   * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n   * @param {number} tileResolution Tile resolution.\n   * @return {number} Tile priority.\n   */\n  getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n    return getTilePriority(\n      this.frameState_,\n      tile,\n      tileSourceKey,\n      tileCenter,\n      tileResolution,\n    );\n  }\n\n  /**\n   * @param {PointerEvent|KeyboardEvent|WheelEvent} browserEvent Browser event.\n   * @param {string} [type] Type.\n   */\n  handleBrowserEvent(browserEvent, type) {\n    type = type || browserEvent.type;\n    const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n    this.handleMapBrowserEvent(mapBrowserEvent);\n  }\n\n  /**\n   * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n   */\n  handleMapBrowserEvent(mapBrowserEvent) {\n    if (!this.frameState_) {\n      // With no view defined, we cannot translate pixels into geographical\n      // coordinates so interactions cannot be used.\n      return;\n    }\n    const originalEvent = mapBrowserEvent.originalEvent;\n    const eventType = originalEvent.type;\n    if (\n      eventType === PointerEventType.POINTERDOWN ||\n      eventType === EventType.WHEEL ||\n      eventType === EventType.KEYDOWN\n    ) {\n      const doc = this.getOwnerDocument();\n      const rootNode = this.viewport_.getRootNode\n        ? this.viewport_.getRootNode()\n        : doc;\n      const target = /** @type {Node} */ (originalEvent.target);\n\n      const currentDoc =\n        rootNode instanceof ShadowRoot\n          ? rootNode.host === target\n            ? rootNode.host.ownerDocument\n            : rootNode\n          : rootNode === doc\n            ? doc.documentElement\n            : rootNode;\n      if (\n        // Abort if the target is a child of the container for elements whose events are not meant\n        // to be handled by map interactions.\n        this.overlayContainerStopEvent_.contains(target) ||\n        // Abort if the event target is a child of the container that is no longer in the page.\n        // It's possible for the target to no longer be in the page if it has been removed in an\n        // event listener, this might happen in a Control that recreates it's content based on\n        // user interaction either manually or via a render in something like https://reactjs.org/\n        !currentDoc.contains(target)\n      ) {\n        return;\n      }\n    }\n    mapBrowserEvent.frameState = this.frameState_;\n    if (this.dispatchEvent(mapBrowserEvent) !== false) {\n      const interactionsArray = this.getInteractions().getArray().slice();\n      for (let i = interactionsArray.length - 1; i >= 0; i--) {\n        const interaction = interactionsArray[i];\n        if (\n          interaction.getMap() !== this ||\n          !interaction.getActive() ||\n          !this.getTargetElement()\n        ) {\n          continue;\n        }\n        const cont = interaction.handleEvent(mapBrowserEvent);\n        if (!cont || mapBrowserEvent.propagationStopped) {\n          break;\n        }\n      }\n    }\n  }\n\n  /**\n   * @protected\n   */\n  handlePostRender() {\n    const frameState = this.frameState_;\n\n    // Manage the tile queue\n    // Image loads are expensive and a limited resource, so try to use them\n    // efficiently:\n    // * When the view is static we allow a large number of parallel tile loads\n    //   to complete the frame as quickly as possible.\n    // * When animating or interacting, image loads can cause janks, so we reduce\n    //   the maximum number of loads per frame and limit the number of parallel\n    //   tile loads to remain reactive to view changes and to reduce the chance of\n    //   loading tiles that will quickly disappear from view.\n    const tileQueue = this.tileQueue_;\n    if (!tileQueue.isEmpty()) {\n      let maxTotalLoading = this.maxTilesLoading_;\n      let maxNewLoads = maxTotalLoading;\n      const hints = frameState ? frameState.viewHints : undefined;\n      const animatingOrInteracting = hints\n        ? hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]\n        : false;\n      if (animatingOrInteracting) {\n        const lowOnFrameBudget = Date.now() - frameState.time > 8;\n        maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n        maxNewLoads = lowOnFrameBudget ? 0 : 2;\n      }\n      if (tileQueue.getTilesLoading() < maxTotalLoading) {\n        if (animatingOrInteracting) {\n          tileQueue.reprioritize();\n        }\n        tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n      }\n    }\n\n    if (frameState && this.renderer_ && !frameState.animate) {\n      if (this.renderComplete_) {\n        if (this.hasListener(RenderEventType.RENDERCOMPLETE)) {\n          this.renderer_.dispatchRenderEvent(\n            RenderEventType.RENDERCOMPLETE,\n            frameState,\n          );\n        }\n        if (this.loaded_ === false) {\n          this.loaded_ = true;\n          this.dispatchEvent(\n            new MapEvent(MapEventType.LOADEND, this, frameState),\n          );\n        }\n      } else if (this.loaded_ === true) {\n        this.loaded_ = false;\n        this.dispatchEvent(\n          new MapEvent(MapEventType.LOADSTART, this, frameState),\n        );\n      }\n    }\n\n    const postRenderFunctions = this.postRenderFunctions_;\n    if (frameState) {\n      for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n        postRenderFunctions[i](this, frameState);\n      }\n    }\n    postRenderFunctions.length = 0;\n  }\n\n  /**\n   * @private\n   */\n  handleSizeChanged_() {\n    if (this.getView() && !this.getView().getAnimating()) {\n      this.getView().resolveConstraints(0);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  handleTargetChanged_() {\n    if (this.mapBrowserEventHandler_) {\n      for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n        unlistenByKey(this.targetChangeHandlerKeys_[i]);\n      }\n      this.targetChangeHandlerKeys_ = null;\n      this.viewport_.removeEventListener(\n        EventType.CONTEXTMENU,\n        this.boundHandleBrowserEvent_,\n      );\n      this.viewport_.removeEventListener(\n        EventType.WHEEL,\n        this.boundHandleBrowserEvent_,\n      );\n      this.mapBrowserEventHandler_.dispose();\n      this.mapBrowserEventHandler_ = null;\n      this.viewport_.remove();\n    }\n\n    if (this.targetElement_ && !isCanvas(this.targetElement_)) {\n      this.resizeObserver_?.unobserve(this.targetElement_);\n      const rootNode = this.targetElement_.getRootNode();\n      if (rootNode instanceof ShadowRoot) {\n        this.resizeObserver_.unobserve(rootNode.host);\n      }\n      this.setSize(undefined);\n    }\n\n    // target may be undefined, null, a string or an Element.\n    // If it's a string we convert it to an Element before proceeding.\n    // If it's not now an Element we remove the viewport from the DOM.\n    // If it's an Element we append the viewport element to it.\n\n    const target = this.getTarget();\n    const targetElement =\n      typeof target === 'string' ? document.getElementById(target) : target;\n    this.targetElement_ = targetElement;\n    if (!targetElement) {\n      if (this.renderer_) {\n        clearTimeout(this.postRenderTimeoutHandle_);\n        this.postRenderTimeoutHandle_ = undefined;\n        this.postRenderFunctions_.length = 0;\n        this.renderer_.dispose();\n        this.renderer_ = null;\n      }\n      if (this.animationDelayKey_) {\n        cancelAnimationFrame(this.animationDelayKey_);\n        this.animationDelayKey_ = undefined;\n      }\n    } else {\n      if (!isCanvas(targetElement)) {\n        targetElement.appendChild(this.viewport_);\n      }\n      if (!this.renderer_) {\n        this.renderer_ = new CompositeMapRenderer(this);\n      }\n\n      if (!isCanvas(targetElement)) {\n        this.mapBrowserEventHandler_ = new MapBrowserEventHandler(\n          this,\n          this.moveTolerance_,\n        );\n        for (const key in MapBrowserEventType) {\n          this.mapBrowserEventHandler_.addEventListener(\n            MapBrowserEventType[key],\n            this.handleMapBrowserEvent.bind(this),\n          );\n        }\n        this.viewport_.addEventListener(\n          EventType.CONTEXTMENU,\n          this.boundHandleBrowserEvent_,\n          false,\n        );\n        this.viewport_.addEventListener(\n          EventType.WHEEL,\n          this.boundHandleBrowserEvent_,\n          PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n        );\n\n        let keyboardEventTarget;\n        if (!this.keyboardEventTarget_) {\n          // check if map target is in shadowDOM, if yes use host element as target\n          const targetRoot = targetElement.getRootNode();\n          const targetCandidate =\n            targetRoot instanceof ShadowRoot ? targetRoot.host : targetElement;\n          keyboardEventTarget = targetCandidate;\n        } else {\n          keyboardEventTarget = this.keyboardEventTarget_;\n        }\n\n        this.targetChangeHandlerKeys_ = [\n          listen(\n            keyboardEventTarget,\n            EventType.KEYDOWN,\n            this.handleBrowserEvent,\n            this,\n          ),\n          listen(\n            keyboardEventTarget,\n            EventType.KEYPRESS,\n            this.handleBrowserEvent,\n            this,\n          ),\n        ];\n        if (!isCanvas(targetElement)) {\n          const rootNode = targetElement.getRootNode();\n          if (rootNode instanceof ShadowRoot) {\n            this.resizeObserver_.observe(rootNode.host);\n          }\n          this.resizeObserver_?.observe(targetElement);\n        }\n      }\n\n      this.updateSize();\n    }\n    // updateSize calls setSize, so no need to call this.render\n    // ourselves here.\n  }\n\n  /**\n   * @private\n   */\n  handleTileChange_() {\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  handleViewPropertyChanged_() {\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  handleViewChanged_() {\n    if (this.viewPropertyListenerKey_) {\n      unlistenByKey(this.viewPropertyListenerKey_);\n      this.viewPropertyListenerKey_ = null;\n    }\n    if (this.viewChangeListenerKey_) {\n      unlistenByKey(this.viewChangeListenerKey_);\n      this.viewChangeListenerKey_ = null;\n    }\n    const view = this.getView();\n    if (view) {\n      this.updateViewportSize_(this.getSize());\n\n      this.viewPropertyListenerKey_ = listen(\n        view,\n        ObjectEventType.PROPERTYCHANGE,\n        this.handleViewPropertyChanged_,\n        this,\n      );\n      this.viewChangeListenerKey_ = listen(\n        view,\n        EventType.CHANGE,\n        this.handleViewPropertyChanged_,\n        this,\n      );\n\n      view.resolveConstraints(0);\n    }\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  handleLayerGroupChanged_() {\n    if (this.layerGroupPropertyListenerKeys_) {\n      this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n      this.layerGroupPropertyListenerKeys_ = null;\n    }\n    const layerGroup = this.getLayerGroup();\n    if (layerGroup) {\n      this.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n      this.layerGroupPropertyListenerKeys_ = [\n        listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n        listen(layerGroup, EventType.CHANGE, this.render, this),\n        listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n        listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n      ];\n    }\n    this.render();\n  }\n\n  /**\n   * @return {boolean} Is rendered.\n   */\n  isRendered() {\n    return !!this.frameState_;\n  }\n\n  /**\n   * @private\n   */\n  animationDelay_() {\n    this.animationDelayKey_ = undefined;\n    this.renderFrame_(Date.now());\n  }\n\n  /**\n   * Requests an immediate render in a synchronous manner.\n   * @api\n   */\n  renderSync() {\n    if (this.animationDelayKey_) {\n      cancelAnimationFrame(this.animationDelayKey_);\n    }\n    this.animationDelay_();\n  }\n\n  /**\n   * Redraws all text after new fonts have loaded\n   */\n  redrawText() {\n    if (!this.frameState_) {\n      return;\n    }\n    const layerStates = this.frameState_.layerStatesArray;\n    for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n      const layer = layerStates[i].layer;\n      if (layer.hasRenderer()) {\n        layer.getRenderer().handleFontsChanged();\n      }\n    }\n  }\n\n  /**\n   * Request a map rendering (at the next animation frame).\n   * @api\n   */\n  render() {\n    if (this.renderer_ && this.animationDelayKey_ === undefined) {\n      this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n    }\n  }\n\n  /**\n   * Remove the given control from the map.\n   * @param {import(\"./control/Control.js\").default} control Control.\n   * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n   *     if the control was not found).\n   * @api\n   */\n  removeControl(control) {\n    return this.getControls().remove(control);\n  }\n\n  /**\n   * Remove the given interaction from the map.\n   * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n   * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n   *     undefined if the interaction was not found).\n   * @api\n   */\n  removeInteraction(interaction) {\n    return this.getInteractions().remove(interaction);\n  }\n\n  /**\n   * Removes the given layer from the map.\n   * @param {import(\"./layer/Base.js\").default} layer Layer.\n   * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n   *     layer was not found).\n   * @api\n   */\n  removeLayer(layer) {\n    const layers = this.getLayerGroup().getLayers();\n    return layers.remove(layer);\n  }\n\n  /**\n   * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n   * @private\n   */\n  handleLayerRemove_(event) {\n    removeLayerMapProperty(event.layer);\n  }\n\n  /**\n   * Remove the given overlay from the map.\n   * @param {import(\"./Overlay.js\").default} overlay Overlay.\n   * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n   *     if the overlay was not found).\n   * @api\n   */\n  removeOverlay(overlay) {\n    return this.getOverlays().remove(overlay);\n  }\n\n  /**\n   * @param {number} time Time.\n   * @private\n   */\n  renderFrame_(time) {\n    const size = this.getSize();\n    const view = this.getView();\n    const previousFrameState = this.frameState_;\n    /** @type {?FrameState} */\n    let frameState = null;\n    if (size !== undefined && hasArea(size) && view && view.isDef()) {\n      const viewHints = view.getHints(\n        this.frameState_ ? this.frameState_.viewHints : undefined,\n      );\n      const viewState = view.getState();\n      frameState = {\n        animate: false,\n        coordinateToPixelTransform: this.coordinateToPixelTransform_,\n        declutter: null,\n        extent: getForViewAndSize(\n          viewState.center,\n          viewState.resolution,\n          viewState.rotation,\n          size,\n        ),\n        index: this.frameIndex_++,\n        layerIndex: 0,\n        layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n        pixelRatio: this.pixelRatio_,\n        pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n        postRenderFunctions: [],\n        size: size,\n        tileQueue: this.tileQueue_,\n        time: time,\n        usedTiles: {},\n        viewState: viewState,\n        viewHints: viewHints,\n        wantedTiles: {},\n        mapId: getUid(this),\n        renderTargets: {},\n      };\n      if (viewState.nextCenter && viewState.nextResolution) {\n        const rotation = isNaN(viewState.nextRotation)\n          ? viewState.rotation\n          : viewState.nextRotation;\n\n        frameState.nextExtent = getForViewAndSize(\n          viewState.nextCenter,\n          viewState.nextResolution,\n          rotation,\n          size,\n        );\n      }\n    }\n\n    this.frameState_ = frameState;\n    this.renderer_.renderFrame(frameState);\n\n    if (frameState) {\n      if (frameState.animate) {\n        this.render();\n      }\n      Array.prototype.push.apply(\n        this.postRenderFunctions_,\n        frameState.postRenderFunctions,\n      );\n\n      if (previousFrameState) {\n        const moveStart =\n          !this.previousExtent_ ||\n          (!isEmpty(this.previousExtent_) &&\n            !equalsExtent(frameState.extent, this.previousExtent_));\n        if (moveStart) {\n          this.dispatchEvent(\n            new MapEvent(MapEventType.MOVESTART, this, previousFrameState),\n          );\n          this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n        }\n      }\n\n      const idle =\n        this.previousExtent_ &&\n        !frameState.viewHints[ViewHint.ANIMATING] &&\n        !frameState.viewHints[ViewHint.INTERACTING] &&\n        !equalsExtent(frameState.extent, this.previousExtent_);\n\n      if (idle) {\n        this.dispatchEvent(\n          new MapEvent(MapEventType.MOVEEND, this, frameState),\n        );\n        clone(frameState.extent, this.previousExtent_);\n      }\n    }\n\n    this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n    this.renderComplete_ =\n      (this.hasListener(MapEventType.LOADSTART) ||\n        this.hasListener(MapEventType.LOADEND) ||\n        this.hasListener(RenderEventType.RENDERCOMPLETE)) &&\n      !this.tileQueue_.getTilesLoading() &&\n      !this.tileQueue_.getCount() &&\n      !this.getLoadingOrNotReady();\n\n    if (!this.postRenderTimeoutHandle_) {\n      this.postRenderTimeoutHandle_ = setTimeout(() => {\n        this.postRenderTimeoutHandle_ = undefined;\n        this.handlePostRender();\n      }, 0);\n    }\n  }\n\n  /**\n   * Sets the layergroup of this map.\n   * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n   * @observable\n   * @api\n   */\n  setLayerGroup(layerGroup) {\n    const oldLayerGroup = this.getLayerGroup();\n    if (oldLayerGroup) {\n      this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n    }\n    this.set(MapProperty.LAYERGROUP, layerGroup);\n  }\n\n  /**\n   * Set the size of this map.\n   * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n   * @observable\n   * @api\n   */\n  setSize(size) {\n    this.set(MapProperty.SIZE, size);\n  }\n\n  /**\n   * Set the target element to render this map into.\n   * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n   *  properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n   *  `tabindex` atribute must be set on the custom element's host element.\n   * @param {HTMLElement|string} [target] The Element or id of the Element\n   *     that the map is rendered in.\n   * @observable\n   * @api\n   */\n  setTarget(target) {\n    this.set(MapProperty.TARGET, target);\n  }\n\n  /**\n   * Set the view for this map.\n   * @param {View|Promise<import(\"./View.js\").ViewOptions>|null} view The view that controls this map.\n   * It is also possible to pass a promise that resolves to options for constructing a view.  This\n   * alternative allows view properties to be resolved by sources or other components that load\n   * view-related metadata.\n   * @observable\n   * @api\n   */\n  setView(view) {\n    if (!view || view instanceof View) {\n      this.set(MapProperty.VIEW, view);\n      return;\n    }\n    this.set(MapProperty.VIEW, new View());\n\n    const map = this;\n    view.then(function (viewOptions) {\n      map.setView(new View(viewOptions));\n    });\n  }\n\n  /**\n   * Force a recalculation of the map viewport size.  This should be called when\n   * third-party code changes the size of the map viewport.\n   * @api\n   */\n  updateSize() {\n    const targetElement = this.getTargetElement();\n\n    let size = undefined;\n    if (targetElement) {\n      let width, height;\n      if (isCanvas(targetElement)) {\n        const transform = targetElement.getContext('2d').getTransform();\n        // Use scale components of the transform to calculate the size in CSS pixels\n        width = targetElement.width / transform.a;\n        height = targetElement.height / transform.d;\n      } else {\n        const computedStyle = getComputedStyle(targetElement);\n        width =\n          targetElement.offsetWidth -\n          parseFloat(computedStyle['borderLeftWidth']) -\n          parseFloat(computedStyle['paddingLeft']) -\n          parseFloat(computedStyle['paddingRight']) -\n          parseFloat(computedStyle['borderRightWidth']);\n        height =\n          targetElement.offsetHeight -\n          parseFloat(computedStyle['borderTopWidth']) -\n          parseFloat(computedStyle['paddingTop']) -\n          parseFloat(computedStyle['paddingBottom']) -\n          parseFloat(computedStyle['borderBottomWidth']);\n      }\n      if (!isNaN(width) && !isNaN(height)) {\n        size = [Math.max(0, width), Math.max(0, height)];\n        if (\n          !hasArea(size) &&\n          !!(\n            targetElement.offsetWidth ||\n            targetElement.offsetHeight ||\n            targetElement.getClientRects().length\n          )\n        ) {\n          warn(\n            \"No map visible because the map container's width or height are 0.\",\n          );\n        }\n      }\n    }\n\n    const oldSize = this.getSize();\n    if (size && (!oldSize || !equals(size, oldSize))) {\n      this.updateViewportSize_(size);\n      this.setSize(size);\n    }\n  }\n\n  /**\n   * Recomputes the viewport size and save it on the view object (if any)\n   * @param {import(\"./size.js\").Size|undefined} size The size.\n   * @private\n   */\n  updateViewportSize_(size) {\n    const view = this.getView();\n    if (view) {\n      view.setViewportSize(size);\n    }\n  }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n  /**\n   * @type {HTMLElement|Document}\n   */\n  let keyboardEventTarget = null;\n  if (options.keyboardEventTarget !== undefined) {\n    keyboardEventTarget =\n      typeof options.keyboardEventTarget === 'string'\n        ? document.getElementById(options.keyboardEventTarget)\n        : options.keyboardEventTarget;\n  }\n\n  /**\n   * @type {Object<string, *>}\n   */\n  const values = {};\n\n  const layerGroup =\n    options.layers &&\n    typeof (/** @type {?} */ (options.layers).getLayers) === 'function'\n      ? /** @type {LayerGroup} */ (options.layers)\n      : new LayerGroup({\n          layers:\n            /** @type {Collection<import(\"./layer/Base.js\").default>|Array<import(\"./layer/Base.js\").default>} */ (\n              options.layers\n            ),\n        });\n  values[MapProperty.LAYERGROUP] = layerGroup;\n\n  values[MapProperty.TARGET] = options.target;\n\n  values[MapProperty.VIEW] =\n    options.view instanceof View ? options.view : new View();\n\n  /** @type {Collection<import(\"./control/Control.js\").default>} */\n  let controls;\n  if (options.controls !== undefined) {\n    if (Array.isArray(options.controls)) {\n      controls = new Collection(options.controls.slice());\n    } else {\n      assert(\n        typeof (/** @type {?} */ (options.controls).getArray) === 'function',\n        'Expected `controls` to be an array or an `ol/Collection.js`',\n      );\n      controls = options.controls;\n    }\n  }\n\n  /** @type {Collection<import(\"./interaction/Interaction.js\").default>} */\n  let interactions;\n  if (options.interactions !== undefined) {\n    if (Array.isArray(options.interactions)) {\n      interactions = new Collection(options.interactions.slice());\n    } else {\n      assert(\n        typeof (/** @type {?} */ (options.interactions).getArray) ===\n          'function',\n        'Expected `interactions` to be an array or an `ol/Collection.js`',\n      );\n      interactions = options.interactions;\n    }\n  }\n\n  /** @type {Collection<import(\"./Overlay.js\").default>} */\n  let overlays;\n  if (options.overlays !== undefined) {\n    if (Array.isArray(options.overlays)) {\n      overlays = new Collection(options.overlays.slice());\n    } else {\n      assert(\n        typeof (/** @type {?} */ (options.overlays).getArray) === 'function',\n        'Expected `overlays` to be an array or an `ol/Collection.js`',\n      );\n      overlays = options.overlays;\n    }\n  } else {\n    overlays = new Collection();\n  }\n\n  return {\n    controls: controls,\n    interactions: interactions,\n    keyboardEventTarget: keyboardEventTarget,\n    overlays: overlays,\n    values: values,\n  };\n}\nexport default Map;\n","/**\n * @module ol/control/defaults\n */\nimport Collection from '../Collection.js';\nimport Attribution from './Attribution.js';\nimport Rotate from './Rotate.js';\nimport Zoom from './Zoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n */\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * {@link module:ol/control/Zoom~Zoom}\n * {@link module:ol/control/Rotate~Rotate}\n * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [options] Options for the default controls.\n * @return {Collection<import(\"./Control.js\").default>} A collection of controls\n * to be used with the {@link module:ol/Map~Map} constructor's `controls` option.\n * @api\n */\nexport function defaults(options) {\n  options = options ? options : {};\n\n  /** @type {Collection<import(\"./Control.js\").default>} */\n  const controls = new Collection();\n\n  const zoomControl = options.zoom !== undefined ? options.zoom : true;\n  if (zoomControl) {\n    controls.push(new Zoom(options.zoomOptions));\n  }\n\n  const rotateControl = options.rotate !== undefined ? options.rotate : true;\n  if (rotateControl) {\n    controls.push(new Rotate(options.rotateOptions));\n  }\n\n  const attributionControl =\n    options.attribution !== undefined ? options.attribution : true;\n  if (attributionControl) {\n    controls.push(new Attribution(options.attributionOptions));\n  }\n\n  return controls;\n}\n","/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map browser event.\n * @template {PointerEvent|KeyboardEvent|WheelEvent} [EVENT=PointerEvent|KeyboardEvent|WheelEvent]\n */\nclass MapBrowserEvent extends MapEvent {\n  /**\n   * @param {string} type Event type.\n   * @param {import(\"./Map.js\").default} map Map.\n   * @param {EVENT} originalEvent Original event.\n   * @param {boolean} [dragging] Is the map currently being dragged?\n   * @param {import(\"./Map.js\").FrameState} [frameState] Frame state.\n   * @param {Array<PointerEvent>} [activePointers] Active pointers.\n   */\n  constructor(type, map, originalEvent, dragging, frameState, activePointers) {\n    super(type, map, frameState);\n\n    /**\n     * The original browser event.\n     * @const\n     * @type {EVENT}\n     * @api\n     */\n    this.originalEvent = originalEvent;\n\n    /**\n     * The map pixel relative to the viewport corresponding to the original browser event.\n     * @type {?import(\"./pixel.js\").Pixel}\n     * @private\n     */\n    this.pixel_ = null;\n\n    /**\n     * The coordinate in the user projection corresponding to the original browser event.\n     * @type {?import(\"./coordinate.js\").Coordinate}\n     * @private\n     */\n    this.coordinate_ = null;\n\n    /**\n     * Indicates if the map is currently being dragged. Only set for\n     * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n     *\n     * @type {boolean}\n     * @api\n     */\n    this.dragging = dragging !== undefined ? dragging : false;\n\n    /**\n     * @type {Array<PointerEvent>|undefined}\n     */\n    this.activePointers = activePointers;\n  }\n\n  /**\n   * The map pixel relative to the viewport corresponding to the original event.\n   * @type {import(\"./pixel.js\").Pixel}\n   * @api\n   */\n  get pixel() {\n    if (!this.pixel_) {\n      this.pixel_ = this.map.getEventPixel(this.originalEvent);\n    }\n    return this.pixel_;\n  }\n  set pixel(pixel) {\n    this.pixel_ = pixel;\n  }\n\n  /**\n   * The coordinate corresponding to the original browser event.  This will be in the user\n   * projection if one is set.  Otherwise it will be in the view projection.\n   * @type {import(\"./coordinate.js\").Coordinate}\n   * @api\n   */\n  get coordinate() {\n    if (!this.coordinate_) {\n      this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n    }\n    return this.coordinate_;\n  }\n  set coordinate(coordinate) {\n    this.coordinate_ = coordinate;\n  }\n\n  /**\n   * Prevents the default browser action.\n   * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n   * @api\n   * @override\n   */\n  preventDefault() {\n    super.preventDefault();\n    if ('preventDefault' in this.originalEvent) {\n      /** @type {UIEvent} */ (this.originalEvent).preventDefault();\n    }\n  }\n\n  /**\n   * Prevents further propagation of the current event.\n   * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n   * @api\n   * @override\n   */\n  stopPropagation() {\n    super.stopPropagation();\n    if ('stopPropagation' in this.originalEvent) {\n      /** @type {UIEvent} */ (this.originalEvent).stopPropagation();\n    }\n  }\n}\n\nexport default MapBrowserEvent;\n","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n  /**\n   * A true single click with no dragging and no double click. Note that this\n   * event is delayed by 250 ms to ensure that it is not a double click.\n   * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n   * @api\n   */\n  SINGLECLICK: 'singleclick',\n\n  /**\n   * A click with no dragging. A double click will fire two of this.\n   * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n   * @api\n   */\n  CLICK: EventType.CLICK,\n\n  /**\n   * A true double click, with no dragging.\n   * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n   * @api\n   */\n  DBLCLICK: EventType.DBLCLICK,\n\n  /**\n   * Triggered when a pointer is dragged.\n   * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n   * @api\n   */\n  POINTERDRAG: 'pointerdrag',\n\n  /**\n   * Triggered when a pointer is moved. Note that on touch devices this is\n   * triggered when the map is panned, so is not the same as mousemove.\n   * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n   * @api\n   */\n  POINTERMOVE: 'pointermove',\n\n  POINTERDOWN: 'pointerdown',\n  POINTERUP: 'pointerup',\n  POINTEROVER: 'pointerover',\n  POINTEROUT: 'pointerout',\n  POINTERENTER: 'pointerenter',\n  POINTERLEAVE: 'pointerleave',\n  POINTERCANCEL: 'pointercancel',\n};\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n","/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map event.\n */\nclass MapEvent extends Event {\n  /**\n   * @param {string} type Event type.\n   * @param {import(\"./Map.js\").default} map Map.\n   * @param {?import(\"./Map.js\").FrameState} [frameState] Frame state.\n   */\n  constructor(type, map, frameState) {\n    super(type);\n\n    /**\n     * The map where the event occurred.\n     * @type {import(\"./Map.js\").default}\n     * @api\n     */\n    this.map = map;\n\n    /**\n     * The frame state at the time of the event.\n     * @type {?import(\"./Map.js\").FrameState}\n     * @api\n     */\n    this.frameState = frameState !== undefined ? frameState : null;\n  }\n}\n\nexport default MapEvent;\n","/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  /**\n   * Triggered after a map frame is rendered.\n   * @event module:ol/MapEvent~MapEvent#postrender\n   * @api\n   */\n  POSTRENDER: 'postrender',\n\n  /**\n   * Triggered when the map starts moving.\n   * @event module:ol/MapEvent~MapEvent#movestart\n   * @api\n   */\n  MOVESTART: 'movestart',\n\n  /**\n   * Triggered after the map is moved.\n   * @event module:ol/MapEvent~MapEvent#moveend\n   * @api\n   */\n  MOVEEND: 'moveend',\n\n  /**\n   * Triggered when loading of additional map data (tiles, images, features) starts.\n   * @event module:ol/MapEvent~MapEvent#loadstart\n   * @api\n   */\n  LOADSTART: 'loadstart',\n\n  /**\n   * Triggered when loading of additional map data has completed.\n   * @event module:ol/MapEvent~MapEvent#loadend\n   * @api\n   */\n  LOADEND: 'loadend',\n};\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'|'loadstart'|'loadend'} Types\n */\n","/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  LAYERGROUP: 'layergroup',\n  SIZE: 'size',\n  TARGET: 'target',\n  VIEW: 'view',\n};\n","/**\n * @module ol/Object\n */\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport Event from './events/Event.js';\nimport {isEmpty} from './obj.js';\nimport {getUid} from './util.js';\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nexport class ObjectEvent extends Event {\n  /**\n   * @param {string} type The event type.\n   * @param {string} key The property name.\n   * @param {*} oldValue The old value for `key`.\n   */\n  constructor(type, key, oldValue) {\n    super(type);\n\n    /**\n     * The name of the property whose value is changing.\n     * @type {string}\n     * @api\n     */\n    this.key = key;\n\n    /**\n     * The old value. To get the new value use `e.target.get(e.key)` where\n     * `e` is the event object.\n     * @type {*}\n     * @api\n     */\n    this.oldValue = oldValue;\n  }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable.js\").OnSignature<import(\"./Observable.js\").EventTypes, import(\"./events/Event.js\").default, Return> &\n *    import(\"./Observable.js\").OnSignature<import(\"./ObjectEventType.js\").Types, ObjectEvent, Return> &\n *    import(\"./Observable.js\").CombinedOnSignature<import(\"./Observable.js\").EventTypes|import(\"./ObjectEventType.js\").Types, Return>} ObjectOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable~Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @template {Object<string, *>} [Properties=Object<string, *>]\n * @api\n */\nclass BaseObject extends Observable {\n  /**\n   * @param {NoInfer<Properties>} [values] An object with key-value pairs.\n   */\n  constructor(values) {\n    super();\n\n    /***\n     * @type {ObjectOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {ObjectOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {ObjectOnSignature<void>}\n     */\n    this.un;\n\n    // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n    // the same as the order in which they were created.  This also helps to\n    // ensure that object properties are always added in the same order, which\n    // helps many JavaScript engines generate faster code.\n    getUid(this);\n\n    /**\n     * @private\n     * @type {Partial<NoInfer<Properties>>|null}\n     */\n    this.values_ = null;\n\n    if (values !== undefined) {\n      this.setProperties(values);\n    }\n  }\n\n  /**\n   * Gets a value.\n   * @param {string} key Key name.\n   * @return {*} Value.\n   * @api\n   */\n  get(key) {\n    let value;\n    if (this.values_ && this.values_.hasOwnProperty(key)) {\n      value = this.values_[key];\n    }\n    return value;\n  }\n\n  /**\n   * Get a list of object property names.\n   * @return {Array<string>} List of property names.\n   * @api\n   */\n  getKeys() {\n    return (this.values_ && Object.keys(this.values_)) || [];\n  }\n\n  /**\n   * Get an object of all property names and values.\n   * @return {NoInfer<Properties>} Object.\n   * @api\n   */\n  getProperties() {\n    return /** @type {NoInfer<Properties>} */ (\n      (this.values_ && Object.assign({}, this.values_)) || {}\n    );\n  }\n\n  /**\n   * Get an object of all property names and values.\n   * @return {Partial<NoInfer<Properties>>?} Object.\n   */\n  getPropertiesInternal() {\n    return this.values_;\n  }\n\n  /**\n   * @return {boolean} The object has properties.\n   */\n  hasProperties() {\n    return !!this.values_;\n  }\n\n  /**\n   * @param {string} key Key name.\n   * @param {*} oldValue Old value.\n   */\n  notify(key, oldValue) {\n    let eventType;\n    eventType = `change:${key}`;\n    if (this.hasListener(eventType)) {\n      this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n    }\n    eventType = ObjectEventType.PROPERTYCHANGE;\n    if (this.hasListener(eventType)) {\n      this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n    }\n  }\n\n  /**\n   * @param {string} key Key name.\n   * @param {import(\"./events.js\").Listener} listener Listener.\n   */\n  addChangeListener(key, listener) {\n    this.addEventListener(`change:${key}`, listener);\n  }\n\n  /**\n   * @param {string} key Key name.\n   * @param {import(\"./events.js\").Listener} listener Listener.\n   */\n  removeChangeListener(key, listener) {\n    this.removeEventListener(`change:${key}`, listener);\n  }\n\n  /**\n   * Sets a value.\n   * @param {string} key Key name.\n   * @param {*} value Value.\n   * @param {boolean} [silent] Update without triggering an event.\n   * @api\n   */\n  set(key, value, silent) {\n    const values = this.values_ || (this.values_ = {});\n    if (silent) {\n      values[key] = value;\n    } else {\n      const oldValue = values[key];\n      values[key] = value;\n      if (oldValue !== value) {\n        this.notify(key, oldValue);\n      }\n    }\n  }\n\n  /**\n   * Sets a collection of key-value pairs.  Note that this changes any existing\n   * properties and adds new ones (it does not remove any existing properties).\n   * @param {Partial<NoInfer<Properties>>} values Values.\n   * @param {boolean} [silent] Update without triggering an event.\n   * @api\n   */\n  setProperties(values, silent) {\n    for (const key in values) {\n      this.set(key, values[key], silent);\n    }\n  }\n\n  /**\n   * Apply any properties from another object without triggering events.\n   * @param {BaseObject} source The source object.\n   * @protected\n   */\n  applyProperties(source) {\n    if (!source.values_) {\n      return;\n    }\n    Object.assign(this.values_ || (this.values_ = {}), source.values_);\n  }\n\n  /**\n   * Unsets a property.\n   * @param {string} key Key name.\n   * @param {boolean} [silent] Unset without triggering an event.\n   * @api\n   */\n  unset(key, silent) {\n    if (this.values_ && key in this.values_) {\n      const oldValue = this.values_[key];\n      delete this.values_[key];\n      if (isEmpty(this.values_)) {\n        this.values_ = null;\n      }\n      if (!silent) {\n        this.notify(key, oldValue);\n      }\n    }\n  }\n}\n\nexport default BaseObject;\n","/**\n * @module ol/ObjectEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  /**\n   * Triggered when a property is changed.\n   * @event module:ol/Object.ObjectEvent#propertychange\n   * @api\n   */\n  PROPERTYCHANGE: 'propertychange',\n};\n\n/**\n * @typedef {'propertychange'} Types\n */\n","/**\n * @module ol/Observable\n */\nimport {listen, listenOnce, unlistenByKey} from './events.js';\nimport EventType from './events/EventType.js';\nimport EventTarget from './events/Target.js';\n\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event.js\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n\n/***\n * @template Return\n * @typedef {OnSignature<EventTypes, import(\"./events/Event.js\").default, Return> & CombinedOnSignature<EventTypes, Return>} ObservableOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nclass Observable extends EventTarget {\n  constructor() {\n    super();\n\n    this.on =\n      /** @type {ObservableOnSignature<import(\"./events.js\").EventsKey>} */ (\n        this.onInternal\n      );\n\n    this.once =\n      /** @type {ObservableOnSignature<import(\"./events.js\").EventsKey>} */ (\n        this.onceInternal\n      );\n\n    this.un = /** @type {ObservableOnSignature<void>} */ (this.unInternal);\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.revision_ = 0;\n  }\n\n  /**\n   * Increases the revision counter and dispatches a 'change' event.\n   * @api\n   */\n  changed() {\n    ++this.revision_;\n    this.dispatchEvent(EventType.CHANGE);\n  }\n\n  /**\n   * Get the version number for this object.  Each time the object is modified,\n   * its version number will be incremented.\n   * @return {number} Revision.\n   * @api\n   */\n  getRevision() {\n    return this.revision_;\n  }\n\n  /**\n   * @param {string|Array<string>} type Type.\n   * @param {function((Event|import(\"./events/Event.js\").default)): ?} listener Listener.\n   * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Event key.\n   * @protected\n   */\n  onInternal(type, listener) {\n    if (Array.isArray(type)) {\n      const len = type.length;\n      const keys = new Array(len);\n      for (let i = 0; i < len; ++i) {\n        keys[i] = listen(this, type[i], listener);\n      }\n      return keys;\n    }\n    return listen(this, /** @type {string} */ (type), listener);\n  }\n\n  /**\n   * @param {string|Array<string>} type Type.\n   * @param {function((Event|import(\"./events/Event.js\").default)): ?} listener Listener.\n   * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Event key.\n   * @protected\n   */\n  onceInternal(type, listener) {\n    let key;\n    if (Array.isArray(type)) {\n      const len = type.length;\n      key = new Array(len);\n      for (let i = 0; i < len; ++i) {\n        key[i] = listenOnce(this, type[i], listener);\n      }\n    } else {\n      key = listenOnce(this, /** @type {string} */ (type), listener);\n    }\n    /** @type {Object} */ (listener).ol_key = key;\n    return key;\n  }\n\n  /**\n   * Unlisten for a certain type of event.\n   * @param {string|Array<string>} type Type.\n   * @param {function((Event|import(\"./events/Event.js\").default)): ?} listener Listener.\n   * @protected\n   */\n  unInternal(type, listener) {\n    const key = /** @type {Object} */ (listener).ol_key;\n    if (key) {\n      unByKey(key);\n    } else if (Array.isArray(type)) {\n      for (let i = 0, ii = type.length; i < ii; ++i) {\n        this.removeEventListener(type[i], listener);\n      }\n    } else {\n      this.removeEventListener(type, listener);\n    }\n  }\n}\n\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array<string>} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event.js\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Unique key for the listener. If\n *     called with an array of event types as the first argument, the return\n *     will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array<string>} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event.js\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} Unique key for the listener. If\n *     called with an array of event types as the first argument, the return\n *     will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array<string>} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event.js\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array<import(\"./events.js\").EventsKey>} key The key returned by `on()`\n *     or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n  if (Array.isArray(key)) {\n    for (let i = 0, ii = key.length; i < ii; ++i) {\n      unlistenByKey(key[i]);\n    }\n  } else {\n    unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n  }\n}\n\nexport default Observable;\n","/**\n * @module ol/Overlay\n */\nimport MapEventType from './MapEventType.js';\nimport BaseObject from './Object.js';\nimport {CLASS_SELECTABLE} from './css.js';\nimport {outerHeight, outerWidth, removeChildren} from './dom.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {containsExtent} from './extent.js';\n\n/**\n * @typedef {'bottom-left' | 'bottom-center' | 'bottom-right' | 'center-left' | 'center-center' | 'center-right' | 'top-left' | 'top-center' | 'top-right'} Positioning\n * The overlay position: `'bottom-left'`, `'bottom-center'`,  `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, or `'top-right'`.\n */\n\n/**\n * @typedef {Object} Options\n * @property {number|string} [id] Set the overlay id. The overlay id can be used\n * with the {@link module:ol/Map~Map#getOverlayById} method.\n * @property {HTMLElement} [element] The overlay element.\n * @property {Array<number>} [offset=[0, 0]] Offsets in pixels used when positioning\n * the overlay. The first element in the\n * array is the horizontal offset. A positive value shifts the overlay right.\n * The second element in the array is the vertical offset. A positive value\n * shifts the overlay down.\n * @property {import(\"./coordinate.js\").Coordinate} [position] The overlay position\n * in map projection.\n * @property {Positioning} [positioning='top-left'] Defines how\n * the overlay is actually positioned with respect to its `position` property.\n * Possible values are `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,\n * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,\n * `'top-center'`, and `'top-right'`.\n * @property {boolean} [stopEvent=true] Whether event propagation to the map\n * viewport should be stopped. If `true` the overlay is placed in the same\n * container as that of the controls (CSS class name\n * `ol-overlaycontainer-stopevent`); if `false` it is placed in the container\n * with CSS class name specified by the `className` property.\n * @property {boolean} [insertFirst=true] Whether the overlay is inserted first\n * in the overlay container, or appended. If the overlay is placed in the same\n * container as that of the controls (see the `stopEvent` option) you will\n * probably set `insertFirst` to `true` so the overlay is displayed below the\n * controls.\n * @property {PanIntoViewOptions|boolean} [autoPan=false] Pan the map when calling\n * `setPosition`, so that the overlay is entirely visible in the current viewport.\n * @property {string} [className='ol-overlay-container ol-selectable'] CSS class\n * name.\n */\n\n/**\n * @typedef {Object} PanOptions\n * @property {number} [duration=1000] The duration of the animation in\n * milliseconds.\n * @property {function(number):number} [easing] The easing function to use. Can\n * be one from {@link module:ol/easing} or a custom function.\n * Default is {@link module:ol/easing.inAndOut}.\n */\n\n/**\n * @typedef {Object} PanIntoViewOptions\n * @property {PanOptions} [animation={}] The animation parameters for the pan\n * @property {number} [margin=20] The margin (in pixels) between the\n * overlay and the borders of the map when panning into view.\n */\n\n/**\n * @enum {string}\n * @protected\n */\nconst Property = {\n  ELEMENT: 'element',\n  MAP: 'map',\n  OFFSET: 'offset',\n  POSITION: 'position',\n  POSITIONING: 'positioning',\n};\n\n/**\n * @typedef {import(\"./ObjectEventType.js\").Types|'change:element'|'change:map'|'change:offset'|'change:position'|\n *   'change:positioning'} OverlayObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable.js\").OnSignature<import(\"./Observable.js\").EventTypes, import(\"./events/Event.js\").default, Return> &\n *   import(\"./Observable.js\").OnSignature<OverlayObjectEventTypes, import(\"./Object.js\").ObjectEvent, Return> &\n *   import(\"./Observable.js\").CombinedOnSignature<import(\"./Observable.js\").EventTypes|OverlayObjectEventTypes, Return>} OverlayOnSignature\n */\n\n/**\n * @classdesc\n * An element to be displayed over the map and attached to a single map\n * location.  Like {@link module:ol/control/Control~Control}, Overlays are\n * visible widgets. Unlike Controls, they are not in a fixed position on the\n * screen, but are tied to a geographical coordinate, so panning the map will\n * move an Overlay but not a Control.\n *\n * Example:\n *\n *     import Overlay from 'ol/Overlay.js';\n *\n *     // ...\n *     const popup = new Overlay({\n *       element: document.getElementById('popup'),\n *     });\n *     popup.setPosition(coordinate);\n *     map.addOverlay(popup);\n *\n * @api\n */\nclass Overlay extends BaseObject {\n  /**\n   * @param {Options} options Overlay options.\n   */\n  constructor(options) {\n    super();\n\n    /***\n     * @type {OverlayOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {OverlayOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {OverlayOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @protected\n     * @type {Options}\n     */\n    this.options = options;\n\n    /**\n     * @protected\n     * @type {number|string|undefined}\n     */\n    this.id = options.id;\n\n    /**\n     * @protected\n     * @type {boolean}\n     */\n    this.insertFirst =\n      options.insertFirst !== undefined ? options.insertFirst : true;\n\n    /**\n     * @protected\n     * @type {boolean}\n     */\n    this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;\n\n    /**\n     * @protected\n     * @type {HTMLElement}\n     */\n    this.element = document.createElement('div');\n    this.element.className =\n      options.className !== undefined\n        ? options.className\n        : 'ol-overlay-container ' + CLASS_SELECTABLE;\n    this.element.style.position = 'absolute';\n    this.element.style.pointerEvents = 'auto';\n\n    /**\n     * @protected\n     * @type {PanIntoViewOptions|undefined}\n     */\n    this.autoPan = options.autoPan === true ? {} : options.autoPan || undefined;\n\n    /**\n     * @protected\n     * @type {{transform_: string,\n     *         visible: boolean}}\n     */\n    this.rendered = {\n      transform_: '',\n      visible: true,\n    };\n\n    /**\n     * @protected\n     * @type {?import(\"./events.js\").EventsKey}\n     */\n    this.mapPostrenderListenerKey = null;\n\n    this.addChangeListener(Property.ELEMENT, this.handleElementChanged);\n    this.addChangeListener(Property.MAP, this.handleMapChanged);\n    this.addChangeListener(Property.OFFSET, this.handleOffsetChanged);\n    this.addChangeListener(Property.POSITION, this.handlePositionChanged);\n    this.addChangeListener(Property.POSITIONING, this.handlePositioningChanged);\n\n    if (options.element !== undefined) {\n      this.setElement(options.element);\n    }\n\n    this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);\n\n    this.setPositioning(options.positioning || 'top-left');\n\n    if (options.position !== undefined) {\n      this.setPosition(options.position);\n    }\n  }\n\n  /**\n   * Get the DOM element of this overlay.\n   * @return {HTMLElement|undefined} The Element containing the overlay.\n   * @observable\n   * @api\n   */\n  getElement() {\n    return /** @type {HTMLElement|undefined} */ (this.get(Property.ELEMENT));\n  }\n\n  /**\n   * Get the overlay identifier which is set on constructor.\n   * @return {number|string|undefined} Id.\n   * @api\n   */\n  getId() {\n    return this.id;\n  }\n\n  /**\n   * Get the map associated with this overlay.\n   * @return {import(\"./Map.js\").default|null} The map that the\n   * overlay is part of.\n   * @observable\n   * @api\n   */\n  getMap() {\n    return /** @type {import(\"./Map.js\").default|null} */ (\n      this.get(Property.MAP) || null\n    );\n  }\n\n  /**\n   * Get the offset of this overlay.\n   * @return {Array<number>} The offset.\n   * @observable\n   * @api\n   */\n  getOffset() {\n    return /** @type {Array<number>} */ (this.get(Property.OFFSET));\n  }\n\n  /**\n   * Get the current position of this overlay.\n   * @return {import(\"./coordinate.js\").Coordinate|undefined} The spatial point that the overlay is\n   *     anchored at.\n   * @observable\n   * @api\n   */\n  getPosition() {\n    return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n      this.get(Property.POSITION)\n    );\n  }\n\n  /**\n   * Get the current positioning of this overlay.\n   * @return {Positioning} How the overlay is positioned\n   *     relative to its point on the map.\n   * @observable\n   * @api\n   */\n  getPositioning() {\n    return /** @type {Positioning} */ (this.get(Property.POSITIONING));\n  }\n\n  /**\n   * @protected\n   */\n  handleElementChanged() {\n    removeChildren(this.element);\n    const element = this.getElement();\n    if (element) {\n      this.element.appendChild(element);\n    }\n  }\n\n  /**\n   * @protected\n   */\n  handleMapChanged() {\n    if (this.mapPostrenderListenerKey) {\n      this.element?.remove();\n      unlistenByKey(this.mapPostrenderListenerKey);\n      this.mapPostrenderListenerKey = null;\n    }\n    const map = this.getMap();\n    if (map) {\n      this.mapPostrenderListenerKey = listen(\n        map,\n        MapEventType.POSTRENDER,\n        this.render,\n        this,\n      );\n      this.updatePixelPosition();\n      const container = this.stopEvent\n        ? map.getOverlayContainerStopEvent()\n        : map.getOverlayContainer();\n      if (this.insertFirst) {\n        container.insertBefore(this.element, container.childNodes[0] || null);\n      } else {\n        container.appendChild(this.element);\n      }\n      this.performAutoPan();\n    }\n  }\n\n  /**\n   * @protected\n   */\n  render() {\n    this.updatePixelPosition();\n  }\n\n  /**\n   * @protected\n   */\n  handleOffsetChanged() {\n    this.updatePixelPosition();\n  }\n\n  /**\n   * @protected\n   */\n  handlePositionChanged() {\n    this.updatePixelPosition();\n    this.performAutoPan();\n  }\n\n  /**\n   * @protected\n   */\n  handlePositioningChanged() {\n    this.updatePixelPosition();\n  }\n\n  /**\n   * Set the DOM element to be associated with this overlay.\n   * @param {HTMLElement|undefined} element The Element containing the overlay.\n   * @observable\n   * @api\n   */\n  setElement(element) {\n    this.set(Property.ELEMENT, element);\n  }\n\n  /**\n   * Set the map to be associated with this overlay.\n   * @param {import(\"./Map.js\").default|null} map The map that the\n   * overlay is part of. Pass `null` to just remove the overlay from the current map.\n   * @observable\n   * @api\n   */\n  setMap(map) {\n    this.set(Property.MAP, map);\n  }\n\n  /**\n   * Set the offset for this overlay.\n   * @param {Array<number>} offset Offset.\n   * @observable\n   * @api\n   */\n  setOffset(offset) {\n    this.set(Property.OFFSET, offset);\n  }\n\n  /**\n   * Set the position for this overlay. If the position is `undefined` the\n   * overlay is hidden.\n   * @param {import(\"./coordinate.js\").Coordinate|undefined} position The spatial point that the overlay\n   *     is anchored at.\n   * @observable\n   * @api\n   */\n  setPosition(position) {\n    this.set(Property.POSITION, position);\n  }\n\n  /**\n   * Pan the map so that the overlay is entirely visible in the current viewport\n   * (if necessary) using the configured autoPan parameters\n   * @protected\n   */\n  performAutoPan() {\n    if (this.autoPan) {\n      this.panIntoView(this.autoPan);\n    }\n  }\n\n  /**\n   * Pan the map so that the overlay is entirely visible in the current viewport\n   * (if necessary).\n   * @param {PanIntoViewOptions} [panIntoViewOptions] Options for the pan action\n   * @api\n   */\n  panIntoView(panIntoViewOptions) {\n    const map = this.getMap();\n\n    if (!map || !map.getTargetElement() || !this.get(Property.POSITION)) {\n      return;\n    }\n\n    const mapRect = this.getRect(map.getTargetElement(), map.getSize());\n    const element = this.getElement();\n    const overlayRect = this.getRect(element, [\n      outerWidth(element),\n      outerHeight(element),\n    ]);\n\n    panIntoViewOptions = panIntoViewOptions || {};\n\n    const myMargin =\n      panIntoViewOptions.margin === undefined ? 20 : panIntoViewOptions.margin;\n    if (!containsExtent(mapRect, overlayRect)) {\n      // the overlay is not completely inside the viewport, so pan the map\n      const offsetLeft = overlayRect[0] - mapRect[0];\n      const offsetRight = mapRect[2] - overlayRect[2];\n      const offsetTop = overlayRect[1] - mapRect[1];\n      const offsetBottom = mapRect[3] - overlayRect[3];\n\n      const delta = [0, 0];\n      if (offsetLeft < 0) {\n        // move map to the left\n        delta[0] = offsetLeft - myMargin;\n      } else if (offsetRight < 0) {\n        // move map to the right\n        delta[0] = Math.abs(offsetRight) + myMargin;\n      }\n      if (offsetTop < 0) {\n        // move map up\n        delta[1] = offsetTop - myMargin;\n      } else if (offsetBottom < 0) {\n        // move map down\n        delta[1] = Math.abs(offsetBottom) + myMargin;\n      }\n\n      if (delta[0] !== 0 || delta[1] !== 0) {\n        const center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n          map.getView().getCenterInternal()\n        );\n        const centerPx = map.getPixelFromCoordinateInternal(center);\n        if (!centerPx) {\n          return;\n        }\n        const newCenterPx = [centerPx[0] + delta[0], centerPx[1] + delta[1]];\n\n        const panOptions = panIntoViewOptions.animation || {};\n        map.getView().animateInternal({\n          center: map.getCoordinateFromPixelInternal(newCenterPx),\n          duration: panOptions.duration,\n          easing: panOptions.easing,\n        });\n      }\n    }\n  }\n\n  /**\n   * Get the extent of an element relative to the document\n   * @param {HTMLElement} element The element.\n   * @param {import(\"./size.js\").Size} size The size of the element.\n   * @return {import(\"./extent.js\").Extent} The extent.\n   * @protected\n   */\n  getRect(element, size) {\n    const box = element.getBoundingClientRect();\n    const offsetX = box.left + window.pageXOffset;\n    const offsetY = box.top + window.pageYOffset;\n    return [offsetX, offsetY, offsetX + size[0], offsetY + size[1]];\n  }\n\n  /**\n   * Set the positioning for this overlay.\n   * @param {Positioning} positioning how the overlay is\n   *     positioned relative to its point on the map.\n   * @observable\n   * @api\n   */\n  setPositioning(positioning) {\n    this.set(Property.POSITIONING, positioning);\n  }\n\n  /**\n   * Modify the visibility of the element.\n   * @param {boolean} visible Element visibility.\n   * @protected\n   */\n  setVisible(visible) {\n    if (this.rendered.visible !== visible) {\n      this.element.style.display = visible ? '' : 'none';\n      this.rendered.visible = visible;\n    }\n  }\n\n  /**\n   * Update pixel position.\n   * @protected\n   */\n  updatePixelPosition() {\n    const map = this.getMap();\n    const position = this.getPosition();\n    if (!map || !map.isRendered() || !position) {\n      this.setVisible(false);\n      return;\n    }\n\n    const pixel = map.getPixelFromCoordinate(position);\n    const mapSize = map.getSize();\n    this.updateRenderedPosition(pixel, mapSize);\n  }\n\n  /**\n   * @param {import(\"./pixel.js\").Pixel} pixel The pixel location.\n   * @param {import(\"./size.js\").Size|undefined} mapSize The map size.\n   * @protected\n   */\n  updateRenderedPosition(pixel, mapSize) {\n    const style = this.element.style;\n    const offset = this.getOffset();\n\n    const positioning = this.getPositioning();\n\n    this.setVisible(true);\n\n    const x = `${pixel[0] + offset[0]}px`;\n    const y = `${pixel[1] + offset[1]}px`;\n    let posX = '0%';\n    let posY = '0%';\n    if (\n      positioning == 'bottom-right' ||\n      positioning == 'center-right' ||\n      positioning == 'top-right'\n    ) {\n      posX = '-100%';\n    } else if (\n      positioning == 'bottom-center' ||\n      positioning == 'center-center' ||\n      positioning == 'top-center'\n    ) {\n      posX = '-50%';\n    }\n    if (\n      positioning == 'bottom-left' ||\n      positioning == 'bottom-center' ||\n      positioning == 'bottom-right'\n    ) {\n      posY = '-100%';\n    } else if (\n      positioning == 'center-left' ||\n      positioning == 'center-center' ||\n      positioning == 'center-right'\n    ) {\n      posY = '-50%';\n    }\n    const transform = `translate(${posX}, ${posY}) translate(${x}, ${y})`;\n    if (this.rendered.transform_ != transform) {\n      this.rendered.transform_ = transform;\n      style.transform = transform;\n    }\n  }\n\n  /**\n   * returns the options this Overlay has been created with\n   * @return {Options} overlay options\n   */\n  getOptions() {\n    return this.options;\n  }\n}\n\nexport default Overlay;\n","/**\n * @module ol/Tile\n */\nimport TileState from './TileState.js';\nimport {easeIn} from './easing.js';\nimport EventType from './events/EventType.js';\nimport EventTarget from './events/Target.js';\nimport {abstract} from './util.js';\n\n/**\n * A function that takes a {@link module:ol/Tile~Tile} for the tile and a\n * `{string}` for the url as arguments. The default is\n * ```js\n * source.setTileLoadFunction(function(tile, src) {\n *   tile.getImage().src = src;\n * });\n * ```\n * For more fine grained control, the load function can use fetch or XMLHttpRequest and involve\n * error handling:\n *\n * ```js\n * import TileState from 'ol/TileState.js';\n *\n * source.setTileLoadFunction(function(tile, src) {\n *   const xhr = new XMLHttpRequest();\n *   xhr.responseType = 'blob';\n *   xhr.addEventListener('loadend', function (evt) {\n *     const data = this.response;\n *     if (data !== undefined) {\n *       tile.getImage().src = URL.createObjectURL(data);\n *     } else {\n *       tile.setState(TileState.ERROR);\n *     }\n *   });\n *   xhr.addEventListener('error', function () {\n *     tile.setState(TileState.ERROR);\n *   });\n *   xhr.open('GET', src);\n *   xhr.send();\n * });\n * ```\n *\n * @typedef {function(Tile, string): void} LoadFunction\n * @api\n */\n\n/**\n * {@link module:ol/source/Tile~TileSource} sources use a function of this type to get\n * the url that provides a tile for a given tile coordinate.\n *\n * This function takes a {@link module:ol/tilecoord~TileCoord} for the tile\n * coordinate, a `{number}` representing the pixel ratio and a\n * {@link module:ol/proj/Projection~Projection} for the projection  as arguments\n * and returns a `{string}` representing the tile URL, or undefined if no tile\n * should be requested for the passed tile coordinate.\n *\n * @typedef {function(import(\"./tilecoord.js\").TileCoord, number,\n *           import(\"./proj/Projection.js\").default): (string|undefined)} UrlFunction\n * @api\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling.  By default,\n * the nearest neighbor is used when resampling.\n * @api\n */\n\n/**\n * @classdesc\n * Base class for tiles.\n *\n * @abstract\n */\nclass Tile extends EventTarget {\n  /**\n   * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"./TileState.js\").default} state State.\n   * @param {Options} [options] Tile options.\n   */\n  constructor(tileCoord, state, options) {\n    super();\n\n    options = options ? options : {};\n\n    /**\n     * @type {import(\"./tilecoord.js\").TileCoord}\n     */\n    this.tileCoord = tileCoord;\n\n    /**\n     * @protected\n     * @type {import(\"./TileState.js\").default}\n     */\n    this.state = state;\n\n    /**\n     * A key assigned to the tile. This is used in conjunction with a source key\n     * to determine if a cached version of this tile may be used by the renderer.\n     * @type {string}\n     */\n    this.key = '';\n\n    /**\n     * The duration for the opacity transition.\n     * @private\n     * @type {number}\n     */\n    this.transition_ =\n      options.transition === undefined ? 250 : options.transition;\n\n    /**\n     * Lookup of start times for rendering transitions.  If the start time is\n     * equal to -1, the transition is complete.\n     * @private\n     * @type {Object<string, number>}\n     */\n    this.transitionStarts_ = {};\n\n    /**\n     * @type {boolean}\n     */\n    this.interpolate = !!options.interpolate;\n  }\n\n  /**\n   * @protected\n   */\n  changed() {\n    this.dispatchEvent(EventType.CHANGE);\n  }\n\n  /**\n   * Called by the tile cache when the tile is removed from the cache due to expiry\n   */\n  release() {\n    // to remove the `change` listener on this tile in `ol/TileQueue#handleTileChange`\n    this.setState(TileState.EMPTY);\n  }\n\n  /**\n   * @return {string} Key.\n   */\n  getKey() {\n    return this.key + '/' + this.tileCoord;\n  }\n\n  /**\n   * Get the tile coordinate for this tile.\n   * @return {import(\"./tilecoord.js\").TileCoord} The tile coordinate.\n   * @api\n   */\n  getTileCoord() {\n    return this.tileCoord;\n  }\n\n  /**\n   * @return {import(\"./TileState.js\").default} State.\n   */\n  getState() {\n    return this.state;\n  }\n\n  /**\n   * Sets the state of this tile. If you write your own {@link module:ol/Tile~LoadFunction tileLoadFunction} ,\n   * it is important to set the state correctly to {@link module:ol/TileState~ERROR}\n   * when the tile cannot be loaded. Otherwise the tile cannot be removed from\n   * the tile queue and will block other requests.\n   * @param {import(\"./TileState.js\").default} state State.\n   * @api\n   */\n  setState(state) {\n    if (this.state === TileState.EMPTY) {\n      // no more state changes\n      return;\n    }\n    if (this.state !== TileState.ERROR && this.state > state) {\n      throw new Error('Tile load sequence violation');\n    }\n    this.state = state;\n    this.changed();\n  }\n\n  /**\n   * Load the image or retry if loading previously failed.\n   * Loading is taken care of by the tile queue, and calling this method is\n   * only needed for preloading or for reloading in case of an error.\n   * @abstract\n   * @api\n   */\n  load() {\n    abstract();\n  }\n\n  /**\n   * Get the alpha value for rendering.\n   * @param {string} id An id for the renderer.\n   * @param {number} time The render frame time.\n   * @return {number} A number between 0 and 1.\n   */\n  getAlpha(id, time) {\n    if (!this.transition_) {\n      return 1;\n    }\n\n    let start = this.transitionStarts_[id];\n    if (!start) {\n      start = time;\n      this.transitionStarts_[id] = start;\n    } else if (start === -1) {\n      return 1;\n    }\n\n    const delta = time - start + 1000 / 60; // avoid rendering at 0\n    if (delta >= this.transition_) {\n      return 1;\n    }\n    return easeIn(delta / this.transition_);\n  }\n\n  /**\n   * Determine if a tile is in an alpha transition.  A tile is considered in\n   * transition if tile.getAlpha() has not yet been called or has been called\n   * and returned 1.\n   * @param {string} id An id for the renderer.\n   * @return {boolean} The tile is in transition.\n   */\n  inTransition(id) {\n    if (!this.transition_) {\n      return false;\n    }\n    return this.transitionStarts_[id] !== -1;\n  }\n\n  /**\n   * Mark a transition as complete.\n   * @param {string} id An id for the renderer.\n   */\n  endTransition(id) {\n    if (this.transition_) {\n      this.transitionStarts_[id] = -1;\n    }\n  }\n\n  /**\n   * @override\n   */\n  disposeInternal() {\n    this.release();\n    super.disposeInternal();\n  }\n}\n\nexport default Tile;\n","/**\n * @module ol/TileRange\n */\n\n/**\n * A representation of a contiguous block of tiles.  A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n */\nclass TileRange {\n  /**\n   * @param {number} minX Minimum X.\n   * @param {number} maxX Maximum X.\n   * @param {number} minY Minimum Y.\n   * @param {number} maxY Maximum Y.\n   */\n  constructor(minX, maxX, minY, maxY) {\n    /**\n     * @type {number}\n     */\n    this.minX = minX;\n\n    /**\n     * @type {number}\n     */\n    this.maxX = maxX;\n\n    /**\n     * @type {number}\n     */\n    this.minY = minY;\n\n    /**\n     * @type {number}\n     */\n    this.maxY = maxY;\n  }\n\n  /**\n   * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @return {boolean} Contains tile coordinate.\n   */\n  contains(tileCoord) {\n    return this.containsXY(tileCoord[1], tileCoord[2]);\n  }\n\n  /**\n   * @param {TileRange} tileRange Tile range.\n   * @return {boolean} Contains.\n   */\n  containsTileRange(tileRange) {\n    return (\n      this.minX <= tileRange.minX &&\n      tileRange.maxX <= this.maxX &&\n      this.minY <= tileRange.minY &&\n      tileRange.maxY <= this.maxY\n    );\n  }\n\n  /**\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @return {boolean} Contains coordinate.\n   */\n  containsXY(x, y) {\n    return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n  }\n\n  /**\n   * @param {TileRange} tileRange Tile range.\n   * @return {boolean} Equals.\n   */\n  equals(tileRange) {\n    return (\n      this.minX == tileRange.minX &&\n      this.minY == tileRange.minY &&\n      this.maxX == tileRange.maxX &&\n      this.maxY == tileRange.maxY\n    );\n  }\n\n  /**\n   * @param {TileRange} tileRange Tile range.\n   */\n  extend(tileRange) {\n    if (tileRange.minX < this.minX) {\n      this.minX = tileRange.minX;\n    }\n    if (tileRange.maxX > this.maxX) {\n      this.maxX = tileRange.maxX;\n    }\n    if (tileRange.minY < this.minY) {\n      this.minY = tileRange.minY;\n    }\n    if (tileRange.maxY > this.maxY) {\n      this.maxY = tileRange.maxY;\n    }\n  }\n\n  /**\n   * @return {number} Height.\n   */\n  getHeight() {\n    return this.maxY - this.minY + 1;\n  }\n\n  /**\n   * @return {import(\"./size.js\").Size} Size.\n   */\n  getSize() {\n    return [this.getWidth(), this.getHeight()];\n  }\n\n  /**\n   * @return {number} Width.\n   */\n  getWidth() {\n    return this.maxX - this.minX + 1;\n  }\n\n  /**\n   * @param {TileRange} tileRange Tile range.\n   * @return {boolean} Intersects.\n   */\n  intersects(tileRange) {\n    return (\n      this.minX <= tileRange.maxX &&\n      this.maxX >= tileRange.minX &&\n      this.minY <= tileRange.maxY &&\n      this.maxY >= tileRange.minY\n    );\n  }\n}\n\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {TileRange} [tileRange] TileRange.\n * @return {TileRange} Tile range.\n */\nexport function createOrUpdate(minX, maxX, minY, maxY, tileRange) {\n  if (tileRange !== undefined) {\n    tileRange.minX = minX;\n    tileRange.maxX = maxX;\n    tileRange.minY = minY;\n    tileRange.maxY = maxY;\n    return tileRange;\n  }\n  return new TileRange(minX, maxX, minY, maxY);\n}\n\nexport default TileRange;\n","/**\n * @module ol/TileState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n  IDLE: 0,\n  LOADING: 1,\n  LOADED: 2,\n  /**\n   * Indicates that tile loading failed\n   * @type {number}\n   */\n  ERROR: 3,\n  EMPTY: 4,\n};\n","/**\n * @module ol/centerconstraint\n */\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array<number>=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n  return (\n    /**\n     * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n     * @param {number|undefined} resolution Resolution.\n     * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n     * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n     * @param {Array<number>} [centerShift] Shift between map center and viewport center.\n     * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n     */\n    function (center, resolution, size, isMoving, centerShift) {\n      if (!center) {\n        return undefined;\n      }\n      if (!resolution && !onlyCenter) {\n        return center;\n      }\n      const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n      const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n      const shiftX = centerShift ? centerShift[0] : 0;\n      const shiftY = centerShift ? centerShift[1] : 0;\n      let minX = extent[0] + viewWidth / 2 + shiftX;\n      let maxX = extent[2] - viewWidth / 2 + shiftX;\n      let minY = extent[1] + viewHeight / 2 + shiftY;\n      let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n      // note: when zooming out of bounds, min and max values for x and y may\n      // end up inverted (min > max); this has to be accounted for\n      if (minX > maxX) {\n        minX = (maxX + minX) / 2;\n        maxX = minX;\n      }\n      if (minY > maxY) {\n        minY = (maxY + minY) / 2;\n        maxY = minY;\n      }\n\n      let x = clamp(center[0], minX, maxX);\n      let y = clamp(center[1], minY, maxY);\n\n      // during an interaction, allow some overscroll\n      if (isMoving && smooth && resolution) {\n        const ratio = 30 * resolution;\n        x +=\n          -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n          ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n        y +=\n          -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n          ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n      }\n\n      return [x, y];\n    }\n  );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n  return center;\n}\n","/**\n * @module ol/resolutionconstraint\n */\nimport {linearFindNearest} from './array.js';\nimport {getHeight, getWidth} from './extent.js';\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(\n  resolution,\n  maxExtent,\n  viewportSize,\n  showFullExtent,\n) {\n  const xResolution = getWidth(maxExtent) / viewportSize[0];\n  const yResolution = getHeight(maxExtent) / viewportSize[1];\n\n  if (showFullExtent) {\n    return Math.min(resolution, Math.max(xResolution, yResolution));\n  }\n  return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n *  - at 1, ln(x) is 0\n *  - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n  let result = Math.min(resolution, maxResolution);\n  const ratio = 50;\n\n  result *=\n    Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n    1;\n  if (minResolution) {\n    result = Math.max(result, minResolution);\n    result /=\n      Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n        ratio +\n      1;\n  }\n  return clamp(result, minResolution / 2, maxResolution * 2);\n}\n\n/**\n * @param {Array<number>} resolutions Resolutions.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(\n  resolutions,\n  smooth,\n  maxExtent,\n  showFullExtent,\n) {\n  smooth = smooth !== undefined ? smooth : true;\n  return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} direction Direction.\n     * @param {import(\"./size.js\").Size} size Viewport size.\n     * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n     * @return {number|undefined} Resolution.\n     */\n    function (resolution, direction, size, isMoving) {\n      if (resolution !== undefined) {\n        const maxResolution = resolutions[0];\n        const minResolution = resolutions[resolutions.length - 1];\n        const cappedMaxRes = maxExtent\n          ? getViewportClampedResolution(\n              maxResolution,\n              maxExtent,\n              size,\n              showFullExtent,\n            )\n          : maxResolution;\n\n        // during interacting or animating, allow intermediary values\n        if (isMoving) {\n          if (!smooth) {\n            return clamp(resolution, minResolution, cappedMaxRes);\n          }\n          return getSmoothClampedResolution(\n            resolution,\n            cappedMaxRes,\n            minResolution,\n          );\n        }\n\n        const capped = Math.min(cappedMaxRes, resolution);\n        const z = Math.floor(linearFindNearest(resolutions, capped, direction));\n        if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n          return resolutions[z + 1];\n        }\n        return resolutions[z];\n      }\n      return undefined;\n    }\n  );\n}\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [minResolution] Minimum resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(\n  power,\n  maxResolution,\n  minResolution,\n  smooth,\n  maxExtent,\n  showFullExtent,\n) {\n  smooth = smooth !== undefined ? smooth : true;\n  minResolution = minResolution !== undefined ? minResolution : 0;\n\n  return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} direction Direction.\n     * @param {import(\"./size.js\").Size} size Viewport size.\n     * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n     * @return {number|undefined} Resolution.\n     */\n    function (resolution, direction, size, isMoving) {\n      if (resolution !== undefined) {\n        const cappedMaxRes = maxExtent\n          ? getViewportClampedResolution(\n              maxResolution,\n              maxExtent,\n              size,\n              showFullExtent,\n            )\n          : maxResolution;\n\n        // during interacting or animating, allow intermediary values\n        if (isMoving) {\n          if (!smooth) {\n            return clamp(resolution, minResolution, cappedMaxRes);\n          }\n          return getSmoothClampedResolution(\n            resolution,\n            cappedMaxRes,\n            minResolution,\n          );\n        }\n\n        const tolerance = 1e-9;\n        const minZoomLevel = Math.ceil(\n          Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance,\n        );\n        const offset = -direction * (0.5 - tolerance) + 0.5;\n        const capped = Math.min(cappedMaxRes, resolution);\n        const cappedZoomLevel = Math.floor(\n          Math.log(maxResolution / capped) / Math.log(power) + offset,\n        );\n        const zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n        const newResolution = maxResolution / Math.pow(power, zoomLevel);\n        return clamp(newResolution, minResolution, cappedMaxRes);\n      }\n      return undefined;\n    }\n  );\n}\n\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(\n  maxResolution,\n  minResolution,\n  smooth,\n  maxExtent,\n  showFullExtent,\n) {\n  smooth = smooth !== undefined ? smooth : true;\n\n  return (\n    /**\n     * @param {number|undefined} resolution Resolution.\n     * @param {number} direction Direction.\n     * @param {import(\"./size.js\").Size} size Viewport size.\n     * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n     * @return {number|undefined} Resolution.\n     */\n    function (resolution, direction, size, isMoving) {\n      if (resolution !== undefined) {\n        const cappedMaxRes = maxExtent\n          ? getViewportClampedResolution(\n              maxResolution,\n              maxExtent,\n              size,\n              showFullExtent,\n            )\n          : maxResolution;\n\n        if (!smooth || !isMoving) {\n          return clamp(resolution, minResolution, cappedMaxRes);\n        }\n        return getSmoothClampedResolution(\n          resolution,\n          cappedMaxRes,\n          minResolution,\n        );\n      }\n      return undefined;\n    }\n  );\n}\n","/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport {linearFindNearest} from './array.js';\nimport {assert} from './asserts.js';\nimport {none as centerNone, createExtent} from './centerconstraint.js';\nimport {\n  add as addCoordinate,\n  equals as coordinatesEqual,\n  equals,\n  rotate as rotateCoordinate,\n} from './coordinate.js';\nimport {easeOut, inAndOut} from './easing.js';\nimport {\n  getCenter,\n  getForViewAndSize,\n  getHeight,\n  getWidth,\n  isEmpty,\n} from './extent.js';\nimport {VOID} from './functions.js';\nimport {fromExtent as polygonFromExtent} from './geom/Polygon.js';\nimport {clamp, modulo} from './math.js';\nimport {\n  METERS_PER_UNIT,\n  createProjection,\n  disableCoordinateWarning,\n  fromUserCoordinate,\n  fromUserExtent,\n  getUserProjection,\n  toUserCoordinate,\n  toUserExtent,\n} from './proj.js';\nimport {\n  createMinMaxResolution,\n  createSnapToPower,\n  createSnapToResolutions,\n} from './resolutionconstraint.js';\nimport {\n  createSnapToN,\n  createSnapToZero,\n  disable,\n  none as rotationNone,\n} from './rotationconstraint.js';\nimport {DEFAULT_TILE_SIZE} from './tilegrid/common.js';\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to\n * fit the extent into. Defaults to the size of the map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired box size\n * (e.g. `map.getSize()`).\n * @property {!Array<number>} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration.  The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint.  It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`.  If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`.  Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`.  Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge.  If `true` the map\n * may show multiple worlds at low zoom levels.  Only used if the `projection` is\n * global.  Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array<number>} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array<number>} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation.  If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration.  The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center (in view projection coordinates).\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Like {@link import(\"./Map.js\").FrameState}, but just `viewState` and `extent`.\n * @typedef {Object} ViewStateLayerStateExtent\n * @property {State} viewState View state.\n * @property {import(\"./extent.js\").Extent} extent Extent (in user projection coordinates).\n * @property {Array<import(\"./layer/Layer.js\").State>} [layerStatesArray] Layer states.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType.js\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable.js\").OnSignature<import(\"./Observable.js\").EventTypes, import(\"./events/Event.js\").default, Return> &\n *   import(\"./Observable.js\").OnSignature<ViewObjectEventTypes, import(\"./Object.js\").ObjectEvent, Return> &\n *   import(\"./Observable.js\").CombinedOnSignature<import(\"./Observable.js\").EventTypes|ViewObjectEventTypes, Return>} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n * @extends {BaseObject<ViewOptions>}\n */\nclass View extends BaseObject {\n  /**\n   * @param {ViewOptions} [options] View options.\n   */\n  constructor(options) {\n    super();\n\n    /***\n     * @type {ViewOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {ViewOnSignature<import(\"./events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {ViewOnSignature<void>}\n     */\n    this.un;\n\n    options = Object.assign({}, options);\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.hints_ = [0, 0];\n\n    /**\n     * @private\n     * @type {Array<Array<Animation>>}\n     */\n    this.animations_ = [];\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.updateAnimationKey_;\n\n    /**\n     * @private\n     * @const\n     * @type {import(\"./proj/Projection.js\").default}\n     */\n    this.projection_ = createProjection(options.projection, 'EPSG:3857');\n\n    /**\n     * @private\n     * @type {import(\"./size.js\").Size}\n     */\n    this.viewportSize_ = [100, 100];\n\n    /**\n     * @private\n     * @type {import(\"./coordinate.js\").Coordinate|undefined}\n     */\n    this.targetCenter_ = null;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.targetResolution_;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.targetRotation_;\n\n    /**\n     * @private\n     * @type {import(\"./coordinate.js\").Coordinate}\n     */\n    this.nextCenter_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.nextResolution_;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.nextRotation_;\n\n    /**\n     * @private\n     * @type {import(\"./coordinate.js\").Coordinate|undefined}\n     */\n    this.cancelAnchor_ = undefined;\n\n    if (options.projection) {\n      disableCoordinateWarning();\n    }\n    if (options.center) {\n      options.center = fromUserCoordinate(options.center, this.projection_);\n    }\n    if (options.extent) {\n      options.extent = fromUserExtent(options.extent, this.projection_);\n    }\n\n    this.applyOptions_(options);\n  }\n\n  /**\n   * Set up the view with the given options.\n   * @param {ViewOptions} options View options.\n   */\n  applyOptions_(options) {\n    const properties = Object.assign({}, options);\n    for (const key in ViewProperty) {\n      delete properties[key];\n    }\n    this.setProperties(properties, true);\n\n    const resolutionConstraintInfo = createResolutionConstraint(options);\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n    /**\n     * @private\n     * @type {Array<number>|undefined}\n     */\n    this.resolutions_ = options.resolutions;\n\n    /**\n     * @type {Array<number>|undefined}\n     * @private\n     */\n    this.padding_ = options.padding;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n    const centerConstraint = createCenterConstraint(options);\n    const resolutionConstraint = resolutionConstraintInfo.constraint;\n    const rotationConstraint = createRotationConstraint(options);\n\n    /**\n     * @private\n     * @type {Constraints}\n     */\n    this.constraints_ = {\n      center: centerConstraint,\n      resolution: resolutionConstraint,\n      rotation: rotationConstraint,\n    };\n\n    this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n    this.setCenterInternal(\n      options.center !== undefined ? options.center : null,\n    );\n    if (options.resolution !== undefined) {\n      this.setResolution(options.resolution);\n    } else if (options.zoom !== undefined) {\n      this.setZoom(options.zoom);\n    }\n  }\n\n  /**\n   * Padding (in css pixels).\n   * If the map viewport is partially covered with other content (overlays) along\n   * its edges, this setting allows to shift the center of the viewport away from that\n   * content. The order of the values in the array is top, right, bottom, left.\n   * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n   * @type {Array<number>|undefined}\n   * @api\n   */\n  get padding() {\n    return this.padding_;\n  }\n  set padding(padding) {\n    let oldPadding = this.padding_;\n    this.padding_ = padding;\n    const center = this.getCenterInternal();\n    if (center) {\n      const newPadding = padding || [0, 0, 0, 0];\n      oldPadding = oldPadding || [0, 0, 0, 0];\n      const resolution = this.getResolution();\n      const offsetX =\n        (resolution / 2) *\n        (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n      const offsetY =\n        (resolution / 2) *\n        (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n      this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n    }\n  }\n\n  /**\n   * Get an updated version of the view options used to construct the view.  The\n   * current resolution (or zoom), center, and rotation are applied to any stored\n   * options.  The provided options can be used to apply new min/max zoom or\n   * resolution limits.\n   * @param {ViewOptions} newOptions New options to be applied.\n   * @return {ViewOptions} New options updated with the current view state.\n   */\n  getUpdatedOptions_(newOptions) {\n    const options = this.getProperties();\n\n    // preserve resolution (or zoom)\n    if (options.resolution !== undefined) {\n      options.resolution = this.getResolution();\n    } else {\n      options.zoom = this.getZoom();\n    }\n\n    // preserve center\n    options.center = this.getCenterInternal();\n\n    // preserve rotation\n    options.rotation = this.getRotation();\n\n    return Object.assign({}, options, newOptions);\n  }\n\n  /**\n   * Animate the view.  The view's center, zoom (or resolution), and rotation\n   * can be animated for smooth transitions between view states.  For example,\n   * to animate the view to a new zoom level:\n   *\n   *     view.animate({zoom: view.getZoom() + 1});\n   *\n   * By default, the animation lasts one second and uses in-and-out easing.  You\n   * can customize this behavior by including `duration` (in milliseconds) and\n   * `easing` options (see {@link module:ol/easing}).\n   *\n   * To chain together multiple animations, call the method with multiple\n   * animation objects.  For example, to first zoom and then pan:\n   *\n   *     view.animate({zoom: 10}, {center: [0, 0]});\n   *\n   * If you provide a function as the last argument to the animate method, it\n   * will get called at the end of an animation series.  The callback will be\n   * called with `true` if the animation series completed on its own or `false`\n   * if it was cancelled.\n   *\n   * Animations are cancelled by user interactions (e.g. dragging the map) or by\n   * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n   * (or another method that calls one of these).\n   *\n   * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n   *     options.  Multiple animations can be run in series by passing multiple\n   *     options objects.  To run multiple animations in parallel, call the method\n   *     multiple times.  An optional callback can be provided as a final\n   *     argument.  The callback will be called with a boolean indicating whether\n   *     the animation completed without being cancelled.\n   * @api\n   */\n  animate(var_args) {\n    if (this.isDef() && !this.getAnimating()) {\n      this.resolveConstraints(0);\n    }\n    const args = new Array(arguments.length);\n    for (let i = 0; i < args.length; ++i) {\n      let options = arguments[i];\n      if (options.center) {\n        options = Object.assign({}, options);\n        options.center = fromUserCoordinate(\n          options.center,\n          this.getProjection(),\n        );\n      }\n      if (options.anchor) {\n        options = Object.assign({}, options);\n        options.anchor = fromUserCoordinate(\n          options.anchor,\n          this.getProjection(),\n        );\n      }\n      args[i] = options;\n    }\n    this.animateInternal.apply(this, args);\n  }\n\n  /**\n   * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n   */\n  animateInternal(var_args) {\n    let animationCount = arguments.length;\n    let callback;\n    if (\n      animationCount > 1 &&\n      typeof arguments[animationCount - 1] === 'function'\n    ) {\n      callback = arguments[animationCount - 1];\n      --animationCount;\n    }\n\n    let i = 0;\n    for (; i < animationCount && !this.isDef(); ++i) {\n      // if view properties are not yet set, shortcut to the final state\n      const state = arguments[i];\n      if (state.center) {\n        this.setCenterInternal(state.center);\n      }\n      if (state.zoom !== undefined) {\n        this.setZoom(state.zoom);\n      } else if (state.resolution) {\n        this.setResolution(state.resolution);\n      }\n      if (state.rotation !== undefined) {\n        this.setRotation(state.rotation);\n      }\n    }\n    if (i === animationCount) {\n      if (callback) {\n        animationCallback(callback, true);\n      }\n      return;\n    }\n\n    let start = Date.now();\n    let center = this.targetCenter_.slice();\n    let resolution = this.targetResolution_;\n    let rotation = this.targetRotation_;\n    const series = [];\n    for (; i < animationCount; ++i) {\n      const options = /** @type {AnimationOptions} */ (arguments[i]);\n\n      const animation = {\n        start: start,\n        complete: false,\n        anchor: options.anchor,\n        duration: options.duration !== undefined ? options.duration : 1000,\n        easing: options.easing || inAndOut,\n        callback: callback,\n      };\n\n      if (options.center) {\n        animation.sourceCenter = center;\n        animation.targetCenter = options.center.slice();\n        center = animation.targetCenter;\n      }\n\n      if (options.zoom !== undefined) {\n        animation.sourceResolution = resolution;\n        animation.targetResolution = this.getResolutionForZoom(options.zoom);\n        resolution = animation.targetResolution;\n      } else if (options.resolution) {\n        animation.sourceResolution = resolution;\n        animation.targetResolution = options.resolution;\n        resolution = animation.targetResolution;\n      }\n\n      if (options.rotation !== undefined) {\n        animation.sourceRotation = rotation;\n        const delta =\n          modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n        animation.targetRotation = rotation + delta;\n        rotation = animation.targetRotation;\n      }\n\n      // check if animation is a no-op\n      if (isNoopAnimation(animation)) {\n        animation.complete = true;\n        // we still push it onto the series for callback handling\n      } else {\n        start += animation.duration;\n      }\n      series.push(animation);\n    }\n    this.animations_.push(series);\n    this.setHint(ViewHint.ANIMATING, 1);\n    this.updateAnimations_();\n  }\n\n  /**\n   * Determine if the view is being animated.\n   * @return {boolean} The view is being animated.\n   * @api\n   */\n  getAnimating() {\n    return this.hints_[ViewHint.ANIMATING] > 0;\n  }\n\n  /**\n   * Determine if the user is interacting with the view, such as panning or zooming.\n   * @return {boolean} The view is being interacted with.\n   * @api\n   */\n  getInteracting() {\n    return this.hints_[ViewHint.INTERACTING] > 0;\n  }\n\n  /**\n   * Cancel any ongoing animations.\n   * @api\n   */\n  cancelAnimations() {\n    this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n    let anchor;\n    for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n      const series = this.animations_[i];\n      if (series[0].callback) {\n        animationCallback(series[0].callback, false);\n      }\n      if (!anchor) {\n        for (let j = 0, jj = series.length; j < jj; ++j) {\n          const animation = series[j];\n          if (!animation.complete) {\n            anchor = animation.anchor;\n            break;\n          }\n        }\n      }\n    }\n    this.animations_.length = 0;\n    this.cancelAnchor_ = anchor;\n    this.nextCenter_ = null;\n    this.nextResolution_ = NaN;\n    this.nextRotation_ = NaN;\n  }\n\n  /**\n   * Update all animations.\n   */\n  updateAnimations_() {\n    if (this.updateAnimationKey_ !== undefined) {\n      cancelAnimationFrame(this.updateAnimationKey_);\n      this.updateAnimationKey_ = undefined;\n    }\n    if (!this.getAnimating()) {\n      return;\n    }\n    const now = Date.now();\n    let more = false;\n    for (let i = this.animations_.length - 1; i >= 0; --i) {\n      const series = this.animations_[i];\n      let seriesComplete = true;\n      for (let j = 0, jj = series.length; j < jj; ++j) {\n        const animation = series[j];\n        if (animation.complete) {\n          continue;\n        }\n        const elapsed = now - animation.start;\n        let fraction =\n          animation.duration > 0 ? elapsed / animation.duration : 1;\n        if (fraction >= 1) {\n          animation.complete = true;\n          fraction = 1;\n        } else {\n          seriesComplete = false;\n        }\n        const progress = animation.easing(fraction);\n        if (animation.sourceCenter) {\n          const x0 = animation.sourceCenter[0];\n          const y0 = animation.sourceCenter[1];\n          const x1 = animation.targetCenter[0];\n          const y1 = animation.targetCenter[1];\n          this.nextCenter_ = animation.targetCenter;\n          const x = x0 + progress * (x1 - x0);\n          const y = y0 + progress * (y1 - y0);\n          this.targetCenter_ = [x, y];\n        }\n        if (animation.sourceResolution && animation.targetResolution) {\n          const resolution =\n            progress === 1\n              ? animation.targetResolution\n              : animation.sourceResolution +\n                progress *\n                  (animation.targetResolution - animation.sourceResolution);\n          if (animation.anchor) {\n            const size = this.getViewportSize_(this.getRotation());\n            const constrainedResolution = this.constraints_.resolution(\n              resolution,\n              0,\n              size,\n              true,\n            );\n            this.targetCenter_ = this.calculateCenterZoom(\n              constrainedResolution,\n              animation.anchor,\n            );\n          }\n          this.nextResolution_ = animation.targetResolution;\n          this.targetResolution_ = resolution;\n          this.applyTargetState_(true);\n        }\n        if (\n          animation.sourceRotation !== undefined &&\n          animation.targetRotation !== undefined\n        ) {\n          const rotation =\n            progress === 1\n              ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n                Math.PI\n              : animation.sourceRotation +\n                progress *\n                  (animation.targetRotation - animation.sourceRotation);\n          if (animation.anchor) {\n            const constrainedRotation = this.constraints_.rotation(\n              rotation,\n              true,\n            );\n            this.targetCenter_ = this.calculateCenterRotate(\n              constrainedRotation,\n              animation.anchor,\n            );\n          }\n          this.nextRotation_ = animation.targetRotation;\n          this.targetRotation_ = rotation;\n        }\n        this.applyTargetState_(true);\n        more = true;\n        if (!animation.complete) {\n          break;\n        }\n      }\n      if (seriesComplete) {\n        this.animations_[i] = null;\n        this.setHint(ViewHint.ANIMATING, -1);\n        this.nextCenter_ = null;\n        this.nextResolution_ = NaN;\n        this.nextRotation_ = NaN;\n        const callback = series[0].callback;\n        if (callback) {\n          animationCallback(callback, true);\n        }\n      }\n    }\n    // prune completed series\n    this.animations_ = this.animations_.filter(Boolean);\n    if (more && this.updateAnimationKey_ === undefined) {\n      this.updateAnimationKey_ = requestAnimationFrame(\n        this.updateAnimations_.bind(this),\n      );\n    }\n  }\n\n  /**\n   * @param {number} rotation Target rotation.\n   * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n   * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n   */\n  calculateCenterRotate(rotation, anchor) {\n    let center;\n    const currentCenter = this.getCenterInternal();\n    if (currentCenter !== undefined) {\n      center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n      rotateCoordinate(center, rotation - this.getRotation());\n      addCoordinate(center, anchor);\n    }\n    return center;\n  }\n\n  /**\n   * @param {number} resolution Target resolution.\n   * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n   * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n   */\n  calculateCenterZoom(resolution, anchor) {\n    let center;\n    const currentCenter = this.getCenterInternal();\n    const currentResolution = this.getResolution();\n    if (currentCenter !== undefined && currentResolution !== undefined) {\n      const x =\n        anchor[0] -\n        (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n      const y =\n        anchor[1] -\n        (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n      center = [x, y];\n    }\n    return center;\n  }\n\n  /**\n   * Returns the current viewport size.\n   * @private\n   * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n   * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n   */\n  getViewportSize_(rotation) {\n    const size = this.viewportSize_;\n    if (rotation) {\n      const w = size[0];\n      const h = size[1];\n      return [\n        Math.abs(w * Math.cos(rotation)) + Math.abs(h * Math.sin(rotation)),\n        Math.abs(w * Math.sin(rotation)) + Math.abs(h * Math.cos(rotation)),\n      ];\n    }\n    return size;\n  }\n\n  /**\n   * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n   * to avoid performance hit and layout reflow.\n   * This should be done on map size change.\n   * Note: the constraints are not resolved during an animation to avoid stopping it\n   * @param {import(\"./size.js\").Size} [size] Viewport size; if undefined, [100, 100] is assumed\n   */\n  setViewportSize(size) {\n    this.viewportSize_ = Array.isArray(size) ? size.slice() : [100, 100];\n    if (!this.getAnimating()) {\n      this.resolveConstraints(0);\n    }\n  }\n\n  /**\n   * Get the view center.\n   * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n   * @observable\n   * @api\n   */\n  getCenter() {\n    const center = this.getCenterInternal();\n    if (!center) {\n      return center;\n    }\n    return toUserCoordinate(center, this.getProjection());\n  }\n\n  /**\n   * Get the view center without transforming to user projection.\n   * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n   */\n  getCenterInternal() {\n    return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n      this.get(ViewProperty.CENTER)\n    );\n  }\n\n  /**\n   * @return {Constraints} Constraints.\n   */\n  getConstraints() {\n    return this.constraints_;\n  }\n\n  /**\n   * @return {boolean} Resolution constraint is set\n   */\n  getConstrainResolution() {\n    return this.get('constrainResolution');\n  }\n\n  /**\n   * @param {Array<number>} [hints] Destination array.\n   * @return {Array<number>} Hint.\n   */\n  getHints(hints) {\n    if (hints !== undefined) {\n      hints[0] = this.hints_[0];\n      hints[1] = this.hints_[1];\n      return hints;\n    }\n    return this.hints_.slice();\n  }\n\n  /**\n   * Calculate the extent for the current view state and the passed box size.\n   * @param {import(\"./size.js\").Size} [size] The pixel dimensions of the box\n   * into which the calculated extent should fit. Defaults to the size of the\n   * map the view is associated with.\n   * If no map or multiple maps are connected to the view, provide the desired\n   * box size (e.g. `map.getSize()`).\n   * @return {import(\"./extent.js\").Extent} Extent.\n   * @api\n   */\n  calculateExtent(size) {\n    const extent = this.calculateExtentInternal(size);\n    return toUserExtent(extent, this.getProjection());\n  }\n\n  /**\n   * @param {import(\"./size.js\").Size} [size] Box pixel size. If not provided,\n   * the map's last known viewport size will be used.\n   * @return {import(\"./extent.js\").Extent} Extent.\n   */\n  calculateExtentInternal(size) {\n    size = size || this.getViewportSizeMinusPadding_();\n    const center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (\n      this.getCenterInternal()\n    );\n    assert(center, 'The view center is not defined');\n    const resolution = /** @type {!number} */ (this.getResolution());\n    assert(resolution !== undefined, 'The view resolution is not defined');\n    const rotation = /** @type {!number} */ (this.getRotation());\n    assert(rotation !== undefined, 'The view rotation is not defined');\n\n    return getForViewAndSize(center, resolution, rotation, size);\n  }\n\n  /**\n   * Get the maximum resolution of the view.\n   * @return {number} The maximum resolution of the view.\n   * @api\n   */\n  getMaxResolution() {\n    return this.maxResolution_;\n  }\n\n  /**\n   * Get the minimum resolution of the view.\n   * @return {number} The minimum resolution of the view.\n   * @api\n   */\n  getMinResolution() {\n    return this.minResolution_;\n  }\n\n  /**\n   * Get the maximum zoom level for the view.\n   * @return {number} The maximum zoom level.\n   * @api\n   */\n  getMaxZoom() {\n    return /** @type {number} */ (\n      this.getZoomForResolution(this.minResolution_)\n    );\n  }\n\n  /**\n   * Set a new maximum zoom level for the view.\n   * @param {number} zoom The maximum zoom level.\n   * @api\n   */\n  setMaxZoom(zoom) {\n    this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n  }\n\n  /**\n   * Get the minimum zoom level for the view.\n   * @return {number} The minimum zoom level.\n   * @api\n   */\n  getMinZoom() {\n    return /** @type {number} */ (\n      this.getZoomForResolution(this.maxResolution_)\n    );\n  }\n\n  /**\n   * Set a new minimum zoom level for the view.\n   * @param {number} zoom The minimum zoom level.\n   * @api\n   */\n  setMinZoom(zoom) {\n    this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n  }\n\n  /**\n   * Set whether the view should allow intermediary zoom levels.\n   * @param {boolean} enabled Whether the resolution is constrained.\n   * @api\n   */\n  setConstrainResolution(enabled) {\n    this.applyOptions_(this.getUpdatedOptions_({constrainResolution: enabled}));\n  }\n\n  /**\n   * Get the view projection.\n   * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n   * @api\n   */\n  getProjection() {\n    return this.projection_;\n  }\n\n  /**\n   * Get the view resolution.\n   * @return {number|undefined} The resolution of the view.\n   * @observable\n   * @api\n   */\n  getResolution() {\n    return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n  }\n\n  /**\n   * Get the resolutions for the view. This returns the array of resolutions\n   * passed to the constructor of the View, or undefined if none were given.\n   * @return {Array<number>|undefined} The resolutions of the view.\n   * @api\n   */\n  getResolutions() {\n    return this.resolutions_;\n  }\n\n  /**\n   * Get the resolution for a provided extent (in map units) and size (in pixels).\n   * @param {import(\"./extent.js\").Extent} extent Extent.\n   * @param {import(\"./size.js\").Size} [size] Box pixel size.\n   * @return {number} The resolution at which the provided extent will render at\n   *     the given size.\n   * @api\n   */\n  getResolutionForExtent(extent, size) {\n    return this.getResolutionForExtentInternal(\n      fromUserExtent(extent, this.getProjection()),\n      size,\n    );\n  }\n\n  /**\n   * Get the resolution for a provided extent (in map units) and size (in pixels).\n   * @param {import(\"./extent.js\").Extent} extent Extent.\n   * @param {import(\"./size.js\").Size} [size] Box pixel size.\n   * @return {number} The resolution at which the provided extent will render at\n   *     the given size.\n   */\n  getResolutionForExtentInternal(extent, size) {\n    size = size || this.getViewportSizeMinusPadding_();\n    const xResolution = getWidth(extent) / size[0];\n    const yResolution = getHeight(extent) / size[1];\n    return Math.max(xResolution, yResolution);\n  }\n\n  /**\n   * Return a function that returns a value between 0 and 1 for a\n   * resolution. Exponential scaling is assumed.\n   * @param {number} [power] Power.\n   * @return {function(number): number} Resolution for value function.\n   */\n  getResolutionForValueFunction(power) {\n    power = power || 2;\n    const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n    const minResolution = this.minResolution_;\n    const max = Math.log(maxResolution / minResolution) / Math.log(power);\n    return (\n      /**\n       * @param {number} value Value.\n       * @return {number} Resolution.\n       */\n      function (value) {\n        const resolution = maxResolution / Math.pow(power, value * max);\n        return resolution;\n      }\n    );\n  }\n\n  /**\n   * Get the view rotation.\n   * @return {number} The rotation of the view in radians.\n   * @observable\n   * @api\n   */\n  getRotation() {\n    return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n  }\n\n  /**\n   * Return a function that returns a resolution for a value between\n   * 0 and 1. Exponential scaling is assumed.\n   * @param {number} [power] Power.\n   * @return {function(number): number} Value for resolution function.\n   */\n  getValueForResolutionFunction(power) {\n    const logPower = Math.log(power || 2);\n    const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n    const minResolution = this.minResolution_;\n    const max = Math.log(maxResolution / minResolution) / logPower;\n    return (\n      /**\n       * @param {number} resolution Resolution.\n       * @return {number} Value.\n       */\n      function (resolution) {\n        const value = Math.log(maxResolution / resolution) / logPower / max;\n        return value;\n      }\n    );\n  }\n\n  /**\n   * Returns the size of the viewport minus padding.\n   * @private\n   * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n   * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n   */\n  getViewportSizeMinusPadding_(rotation) {\n    let size = this.getViewportSize_(rotation);\n    const padding = this.padding_;\n    if (padding) {\n      size = [\n        size[0] - padding[1] - padding[3],\n        size[1] - padding[0] - padding[2],\n      ];\n    }\n    return size;\n  }\n\n  /**\n   * @return {State} View state.\n   */\n  getState() {\n    const projection = this.getProjection();\n    const resolution = this.getResolution();\n    const rotation = this.getRotation();\n    let center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n      this.getCenterInternal()\n    );\n    const padding = this.padding_;\n    if (padding) {\n      const reducedSize = this.getViewportSizeMinusPadding_();\n      center = calculateCenterOn(\n        center,\n        this.getViewportSize_(),\n        [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n        resolution,\n        rotation,\n      );\n    }\n    return {\n      center: center.slice(0),\n      projection: projection !== undefined ? projection : null,\n      resolution: resolution,\n      nextCenter: this.nextCenter_,\n      nextResolution: this.nextResolution_,\n      nextRotation: this.nextRotation_,\n      rotation: rotation,\n      zoom: this.getZoom(),\n    };\n  }\n\n  /**\n   * @return {ViewStateLayerStateExtent} Like `FrameState`, but just `viewState` and `extent`.\n   */\n  getViewStateAndExtent() {\n    return {\n      viewState: this.getState(),\n      extent: this.calculateExtent(),\n    };\n  }\n\n  /**\n   * Get the current zoom level. This method may return non-integer zoom levels\n   * if the view does not constrain the resolution, or if an interaction or\n   * animation is underway.\n   * @return {number|undefined} Zoom.\n   * @api\n   */\n  getZoom() {\n    let zoom;\n    const resolution = this.getResolution();\n    if (resolution !== undefined) {\n      zoom = this.getZoomForResolution(resolution);\n    }\n    return zoom;\n  }\n\n  /**\n   * Get the zoom level for a resolution.\n   * @param {number} resolution The resolution.\n   * @return {number|undefined} The zoom level for the provided resolution.\n   * @api\n   */\n  getZoomForResolution(resolution) {\n    let offset = this.minZoom_ || 0;\n    let max, zoomFactor;\n    if (this.resolutions_) {\n      const nearest = linearFindNearest(this.resolutions_, resolution, 1);\n      offset = nearest;\n      max = this.resolutions_[nearest];\n      if (nearest == this.resolutions_.length - 1) {\n        zoomFactor = 2;\n      } else {\n        zoomFactor = max / this.resolutions_[nearest + 1];\n      }\n    } else {\n      max = this.maxResolution_;\n      zoomFactor = this.zoomFactor_;\n    }\n    return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n  }\n\n  /**\n   * Get the resolution for a zoom level.\n   * @param {number} zoom Zoom level.\n   * @return {number} The view resolution for the provided zoom level.\n   * @api\n   */\n  getResolutionForZoom(zoom) {\n    if (this.resolutions_?.length) {\n      if (this.resolutions_.length === 1) {\n        return this.resolutions_[0];\n      }\n      const baseLevel = clamp(\n        Math.floor(zoom),\n        0,\n        this.resolutions_.length - 2,\n      );\n      const zoomFactor =\n        this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n      return (\n        this.resolutions_[baseLevel] /\n        Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1))\n      );\n    }\n    return (\n      this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\n    );\n  }\n\n  /**\n   * Fit the given geometry or extent based on the given map size and border.\n   * The size is pixel dimensions of the box to fit the extent into.\n   * In most cases you will want to use the map size, that is `map.getSize()`.\n   * Takes care of the map angle.\n   * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n   *     extent to fit the view to.\n   * @param {FitOptions} [options] Options.\n   * @api\n   */\n  fit(geometryOrExtent, options) {\n    /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n    let geometry;\n    assert(\n      Array.isArray(geometryOrExtent) ||\n        typeof (/** @type {?} */ (geometryOrExtent).getSimplifiedGeometry) ===\n          'function',\n      'Invalid extent or geometry provided as `geometry`',\n    );\n    if (Array.isArray(geometryOrExtent)) {\n      assert(\n        !isEmpty(geometryOrExtent),\n        'Cannot fit empty extent provided as `geometry`',\n      );\n      const extent = fromUserExtent(geometryOrExtent, this.getProjection());\n      geometry = polygonFromExtent(extent);\n    } else if (geometryOrExtent.getType() === 'Circle') {\n      const extent = fromUserExtent(\n        geometryOrExtent.getExtent(),\n        this.getProjection(),\n      );\n      geometry = polygonFromExtent(extent);\n      geometry.rotate(this.getRotation(), getCenter(extent));\n    } else {\n      const userProjection = getUserProjection();\n      if (userProjection) {\n        geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n          geometryOrExtent\n            .clone()\n            .transform(userProjection, this.getProjection())\n        );\n      } else {\n        geometry = geometryOrExtent;\n      }\n    }\n\n    this.fitInternal(geometry, options);\n  }\n\n  /**\n   * Calculate rotated extent\n   * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n   * @return {import(\"./extent.js\").Extent} The rotated extent for the geometry.\n   */\n  rotatedExtentForGeometry(geometry) {\n    const rotation = this.getRotation();\n    const cosAngle = Math.cos(rotation);\n    const sinAngle = Math.sin(-rotation);\n    const coords = geometry.getFlatCoordinates();\n    const stride = geometry.getStride();\n    let minRotX = +Infinity;\n    let minRotY = +Infinity;\n    let maxRotX = -Infinity;\n    let maxRotY = -Infinity;\n    for (let i = 0, ii = coords.length; i < ii; i += stride) {\n      const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n      const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n      minRotX = Math.min(minRotX, rotX);\n      minRotY = Math.min(minRotY, rotY);\n      maxRotX = Math.max(maxRotX, rotX);\n      maxRotY = Math.max(maxRotY, rotY);\n    }\n    return [minRotX, minRotY, maxRotX, maxRotY];\n  }\n\n  /**\n   * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n   * @param {FitOptions} [options] Options.\n   */\n  fitInternal(geometry, options) {\n    options = options || {};\n    let size = options.size;\n    if (!size) {\n      size = this.getViewportSizeMinusPadding_();\n    }\n    const padding =\n      options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n    const nearest = options.nearest !== undefined ? options.nearest : false;\n    let minResolution;\n    if (options.minResolution !== undefined) {\n      minResolution = options.minResolution;\n    } else if (options.maxZoom !== undefined) {\n      minResolution = this.getResolutionForZoom(options.maxZoom);\n    } else {\n      minResolution = 0;\n    }\n\n    const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n    // calculate resolution\n    let resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n      size[0] - padding[1] - padding[3],\n      size[1] - padding[0] - padding[2],\n    ]);\n    resolution = isNaN(resolution)\n      ? minResolution\n      : Math.max(resolution, minResolution);\n    resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n    // calculate center\n    const rotation = this.getRotation();\n    const sinAngle = Math.sin(rotation);\n    const cosAngle = Math.cos(rotation);\n    const centerRot = getCenter(rotatedExtent);\n    centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n    centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n    const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n    const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n    const center = this.getConstrainedCenter([centerX, centerY], resolution);\n    const callback = options.callback ? options.callback : VOID;\n\n    if (options.duration !== undefined) {\n      this.animateInternal(\n        {\n          resolution: resolution,\n          center: center,\n          duration: options.duration,\n          easing: options.easing,\n        },\n        callback,\n      );\n    } else {\n      this.targetResolution_ = resolution;\n      this.targetCenter_ = center;\n      this.applyTargetState_(false, true);\n      animationCallback(callback, true);\n    }\n  }\n\n  /**\n   * Center on coordinate and view position.\n   * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"./size.js\").Size} size Box pixel size.\n   * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n   * @api\n   */\n  centerOn(coordinate, size, position) {\n    this.centerOnInternal(\n      fromUserCoordinate(coordinate, this.getProjection()),\n      size,\n      position,\n    );\n  }\n\n  /**\n   * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"./size.js\").Size} size Box pixel size.\n   * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n   */\n  centerOnInternal(coordinate, size, position) {\n    this.setCenterInternal(\n      calculateCenterOn(\n        coordinate,\n        size,\n        position,\n        this.getResolution(),\n        this.getRotation(),\n      ),\n    );\n  }\n\n  /**\n   * Calculates the shift between map and viewport center.\n   * @param {import(\"./coordinate.js\").Coordinate} center Center.\n   * @param {number} resolution Resolution.\n   * @param {number} rotation Rotation.\n   * @param {import(\"./size.js\").Size} size Size.\n   * @return {Array<number>|undefined} Center shift.\n   */\n  calculateCenterShift(center, resolution, rotation, size) {\n    let centerShift;\n    const padding = this.padding_;\n    if (padding && center) {\n      const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n      const shiftedCenter = calculateCenterOn(\n        center,\n        size,\n        [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n        resolution,\n        rotation,\n      );\n      centerShift = [\n        center[0] - shiftedCenter[0],\n        center[1] - shiftedCenter[1],\n      ];\n    }\n    return centerShift;\n  }\n\n  /**\n   * @return {boolean} Is defined.\n   */\n  isDef() {\n    return !!this.getCenterInternal() && this.getResolution() !== undefined;\n  }\n\n  /**\n   * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n   * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n   * @api\n   */\n  adjustCenter(deltaCoordinates) {\n    const center = toUserCoordinate(this.targetCenter_, this.getProjection());\n    this.setCenter([\n      center[0] + deltaCoordinates[0],\n      center[1] + deltaCoordinates[1],\n    ]);\n  }\n\n  /**\n   * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n   * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n   */\n  adjustCenterInternal(deltaCoordinates) {\n    const center = this.targetCenter_;\n    this.setCenterInternal([\n      center[0] + deltaCoordinates[0],\n      center[1] + deltaCoordinates[1],\n    ]);\n  }\n\n  /**\n   * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n   * constraint will apply.\n   * @param {number} ratio The ratio to apply on the view resolution.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n   * @api\n   */\n  adjustResolution(ratio, anchor) {\n    anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n    this.adjustResolutionInternal(ratio, anchor);\n  }\n\n  /**\n   * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n   * constraint will apply.\n   * @param {number} ratio The ratio to apply on the view resolution.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n   */\n  adjustResolutionInternal(ratio, anchor) {\n    const isMoving = this.getAnimating() || this.getInteracting();\n    const size = this.getViewportSize_(this.getRotation());\n    const newResolution = this.constraints_.resolution(\n      this.targetResolution_ * ratio,\n      0,\n      size,\n      isMoving,\n    );\n\n    if (anchor) {\n      this.targetCenter_ = this.calculateCenterZoom(newResolution, anchor);\n    }\n\n    this.targetResolution_ *= ratio;\n    this.applyTargetState_();\n  }\n\n  /**\n   * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n   * constraint will apply.\n   * @param {number} delta Relative value to add to the zoom level.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n   * @api\n   */\n  adjustZoom(delta, anchor) {\n    this.adjustResolution(Math.pow(this.zoomFactor_, -delta), anchor);\n  }\n\n  /**\n   * Adds a value to the view rotation, optionally using an anchor. Any rotation\n   * constraint will apply.\n   * @param {number} delta Relative value to add to the zoom rotation, in radians.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n   * @api\n   */\n  adjustRotation(delta, anchor) {\n    if (anchor) {\n      anchor = fromUserCoordinate(anchor, this.getProjection());\n    }\n    this.adjustRotationInternal(delta, anchor);\n  }\n\n  /**\n   * @param {number} delta Relative value to add to the zoom rotation, in radians.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n   */\n  adjustRotationInternal(delta, anchor) {\n    const isMoving = this.getAnimating() || this.getInteracting();\n    const newRotation = this.constraints_.rotation(\n      this.targetRotation_ + delta,\n      isMoving,\n    );\n    if (anchor) {\n      this.targetCenter_ = this.calculateCenterRotate(newRotation, anchor);\n    }\n    this.targetRotation_ += delta;\n    this.applyTargetState_();\n  }\n\n  /**\n   * Set the center of the current view. Any extent constraint will apply.\n   * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n   * @observable\n   * @api\n   */\n  setCenter(center) {\n    this.setCenterInternal(\n      center ? fromUserCoordinate(center, this.getProjection()) : center,\n    );\n  }\n\n  /**\n   * Set the center using the view projection (not the user projection).\n   * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n   */\n  setCenterInternal(center) {\n    this.targetCenter_ = center;\n    this.applyTargetState_();\n  }\n\n  /**\n   * @param {import(\"./ViewHint.js\").default} hint Hint.\n   * @param {number} delta Delta.\n   * @return {number} New value.\n   */\n  setHint(hint, delta) {\n    this.hints_[hint] += delta;\n    this.changed();\n    return this.hints_[hint];\n  }\n\n  /**\n   * Set the resolution for this view. Any resolution constraint will apply.\n   * @param {number|undefined} resolution The resolution of the view.\n   * @observable\n   * @api\n   */\n  setResolution(resolution) {\n    this.targetResolution_ = resolution;\n    this.applyTargetState_();\n  }\n\n  /**\n   * Set the rotation for this view. Any rotation constraint will apply.\n   * @param {number} rotation The rotation of the view in radians.\n   * @observable\n   * @api\n   */\n  setRotation(rotation) {\n    this.targetRotation_ = rotation;\n    this.applyTargetState_();\n  }\n\n  /**\n   * Zoom to a specific zoom level. Any resolution constrain will apply.\n   * @param {number} zoom Zoom level.\n   * @api\n   */\n  setZoom(zoom) {\n    this.setResolution(this.getResolutionForZoom(zoom));\n  }\n\n  /**\n   * Recompute rotation/resolution/center based on target values.\n   * Note: we have to compute rotation first, then resolution and center considering that\n   * parameters can influence one another in case a view extent constraint is present.\n   * @param {boolean} [doNotCancelAnims] Do not cancel animations.\n   * @param {boolean} [forceMoving] Apply constraints as if the view is moving.\n   * @private\n   */\n  applyTargetState_(doNotCancelAnims, forceMoving) {\n    const isMoving =\n      this.getAnimating() || this.getInteracting() || forceMoving;\n\n    // compute rotation\n    const newRotation = this.constraints_.rotation(\n      this.targetRotation_,\n      isMoving,\n    );\n    const size = this.getViewportSize_(newRotation);\n    const newResolution = this.constraints_.resolution(\n      this.targetResolution_,\n      0,\n      size,\n      isMoving,\n    );\n    const newCenter = this.constraints_.center(\n      this.targetCenter_,\n      newResolution,\n      size,\n      isMoving,\n      this.calculateCenterShift(\n        this.targetCenter_,\n        newResolution,\n        newRotation,\n        size,\n      ),\n    );\n\n    if (this.get(ViewProperty.ROTATION) !== newRotation) {\n      this.set(ViewProperty.ROTATION, newRotation);\n    }\n    if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n      this.set(ViewProperty.RESOLUTION, newResolution);\n      this.set('zoom', this.getZoom(), true);\n    }\n    if (\n      !newCenter ||\n      !this.get(ViewProperty.CENTER) ||\n      !equals(this.get(ViewProperty.CENTER), newCenter)\n    ) {\n      this.set(ViewProperty.CENTER, newCenter);\n    }\n\n    if (this.getAnimating() && !doNotCancelAnims) {\n      this.cancelAnimations();\n    }\n    this.cancelAnchor_ = undefined;\n  }\n\n  /**\n   * If any constraints need to be applied, an animation will be triggered.\n   * This is typically done on interaction end.\n   * Note: calling this with a duration of 0 will apply the constrained values straight away,\n   * without animation.\n   * @param {number} [duration] The animation duration in ms.\n   * @param {number} [resolutionDirection] Which direction to zoom.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n   */\n  resolveConstraints(duration, resolutionDirection, anchor) {\n    duration = duration !== undefined ? duration : 200;\n    const direction = resolutionDirection || 0;\n\n    const newRotation = this.constraints_.rotation(this.targetRotation_);\n    const size = this.getViewportSize_(newRotation);\n    const newResolution = this.constraints_.resolution(\n      this.targetResolution_,\n      direction,\n      size,\n    );\n    const newCenter = this.constraints_.center(\n      this.targetCenter_,\n      newResolution,\n      size,\n      false,\n      this.calculateCenterShift(\n        this.targetCenter_,\n        newResolution,\n        newRotation,\n        size,\n      ),\n    );\n\n    if (duration === 0 && !this.cancelAnchor_) {\n      this.targetResolution_ = newResolution;\n      this.targetRotation_ = newRotation;\n      this.targetCenter_ = newCenter;\n      this.applyTargetState_();\n      return;\n    }\n\n    anchor = anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n    this.cancelAnchor_ = undefined;\n\n    if (\n      this.getResolution() !== newResolution ||\n      this.getRotation() !== newRotation ||\n      !this.getCenterInternal() ||\n      !equals(this.getCenterInternal(), newCenter)\n    ) {\n      if (this.getAnimating()) {\n        this.cancelAnimations();\n      }\n\n      this.animateInternal({\n        rotation: newRotation,\n        center: newCenter,\n        resolution: newResolution,\n        duration: duration,\n        easing: easeOut,\n        anchor: anchor,\n      });\n    }\n  }\n\n  /**\n   * Notify the View that an interaction has started.\n   * The view state will be resolved to a stable one if needed\n   * (depending on its constraints).\n   * @api\n   */\n  beginInteraction() {\n    this.resolveConstraints(0);\n\n    this.setHint(ViewHint.INTERACTING, 1);\n  }\n\n  /**\n   * Notify the View that an interaction has ended. The view state will be resolved\n   * to a stable one if needed (depending on its constraints).\n   * @param {number} [duration] Animation duration in ms.\n   * @param {number} [resolutionDirection] Which direction to zoom.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n   * @api\n   */\n  endInteraction(duration, resolutionDirection, anchor) {\n    anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n    this.endInteractionInternal(duration, resolutionDirection, anchor);\n  }\n\n  /**\n   * Notify the View that an interaction has ended. The view state will be resolved\n   * to a stable one if needed (depending on its constraints).\n   * @param {number} [duration] Animation duration in ms.\n   * @param {number} [resolutionDirection] Which direction to zoom.\n   * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n   */\n  endInteractionInternal(duration, resolutionDirection, anchor) {\n    if (!this.getInteracting()) {\n      return;\n    }\n    this.setHint(ViewHint.INTERACTING, -1);\n    this.resolveConstraints(duration, resolutionDirection, anchor);\n  }\n\n  /**\n   * Get a valid position for the view center according to the current constraints.\n   * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n   * @param {number} [targetResolution] Target resolution. If not supplied, the current one will be used.\n   * This is useful to guess a valid center position at a different zoom level.\n   * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n   */\n  getConstrainedCenter(targetCenter, targetResolution) {\n    const size = this.getViewportSize_(this.getRotation());\n    return this.constraints_.center(\n      targetCenter,\n      targetResolution || this.getResolution(),\n      size,\n    );\n  }\n\n  /**\n   * Get a valid zoom level according to the current view constraints.\n   * @param {number|undefined} targetZoom Target zoom.\n   * @param {number} [direction] Indicate which resolution should be used\n   * by a renderer if the view resolution does not match any resolution of the tile source.\n   * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n   * will be used. If -1, the nearest higher resolution will be used.\n   * @return {number|undefined} Valid zoom level.\n   */\n  getConstrainedZoom(targetZoom, direction) {\n    const targetRes = this.getResolutionForZoom(targetZoom);\n    return this.getZoomForResolution(\n      this.getConstrainedResolution(targetRes, direction),\n    );\n  }\n\n  /**\n   * Get a valid resolution according to the current view constraints.\n   * @param {number|undefined} targetResolution Target resolution.\n   * @param {number} [direction] Indicate which resolution should be used\n   * by a renderer if the view resolution does not match any resolution of the tile source.\n   * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n   * will be used. If -1, the nearest higher resolution will be used.\n   * @return {number|undefined} Valid resolution.\n   */\n  getConstrainedResolution(targetResolution, direction) {\n    direction = direction || 0;\n    const size = this.getViewportSize_(this.getRotation());\n\n    return this.constraints_.resolution(targetResolution, direction, size);\n  }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n  setTimeout(function () {\n    callback(returnValue);\n  }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n  if (options.extent !== undefined) {\n    const smooth =\n      options.smoothExtentConstraint !== undefined\n        ? options.smoothExtentConstraint\n        : true;\n    return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n  }\n\n  const projection = createProjection(options.projection, 'EPSG:3857');\n  if (options.multiWorld !== true && projection.isGlobal()) {\n    const extent = projection.getExtent().slice();\n    extent[0] = -Infinity;\n    extent[2] = Infinity;\n    return createExtent(extent, false, false);\n  }\n\n  return centerNone;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n *     minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n  let resolutionConstraint;\n  let maxResolution;\n  let minResolution;\n\n  // TODO: move these to be ol constants\n  // see https://github.com/openlayers/openlayers/issues/2076\n  const defaultMaxZoom = 28;\n  const defaultZoomFactor = 2;\n\n  let minZoom =\n    options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n\n  let maxZoom =\n    options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n\n  const zoomFactor =\n    options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n\n  const multiWorld =\n    options.multiWorld !== undefined ? options.multiWorld : false;\n\n  const smooth =\n    options.smoothResolutionConstraint !== undefined\n      ? options.smoothResolutionConstraint\n      : true;\n\n  const showFullExtent =\n    options.showFullExtent !== undefined ? options.showFullExtent : false;\n\n  const projection = createProjection(options.projection, 'EPSG:3857');\n  const projExtent = projection.getExtent();\n  let constrainOnlyCenter = options.constrainOnlyCenter;\n  let extent = options.extent;\n  if (!multiWorld && !extent && projection.isGlobal()) {\n    constrainOnlyCenter = false;\n    extent = projExtent;\n  }\n\n  if (options.resolutions !== undefined) {\n    const resolutions = options.resolutions;\n    maxResolution = resolutions[minZoom];\n    minResolution =\n      resolutions[maxZoom] !== undefined\n        ? resolutions[maxZoom]\n        : resolutions[resolutions.length - 1];\n\n    if (options.constrainResolution) {\n      resolutionConstraint = createSnapToResolutions(\n        resolutions,\n        smooth,\n        !constrainOnlyCenter && extent,\n        showFullExtent,\n      );\n    } else {\n      resolutionConstraint = createMinMaxResolution(\n        maxResolution,\n        minResolution,\n        smooth,\n        !constrainOnlyCenter && extent,\n        showFullExtent,\n      );\n    }\n  } else {\n    // calculate the default min and max resolution\n    const size = !projExtent\n      ? // use an extent that can fit the whole world if need be\n        (360 * METERS_PER_UNIT.degrees) / projection.getMetersPerUnit()\n      : Math.max(getWidth(projExtent), getHeight(projExtent));\n\n    const defaultMaxResolution =\n      size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n\n    const defaultMinResolution =\n      defaultMaxResolution /\n      Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n    // user provided maxResolution takes precedence\n    maxResolution = options.maxResolution;\n    if (maxResolution !== undefined) {\n      minZoom = 0;\n    } else {\n      maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n    }\n\n    // user provided minResolution takes precedence\n    minResolution = options.minResolution;\n    if (minResolution === undefined) {\n      if (options.maxZoom !== undefined) {\n        if (options.maxResolution !== undefined) {\n          minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n        } else {\n          minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n        }\n      } else {\n        minResolution = defaultMinResolution;\n      }\n    }\n\n    // given discrete zoom levels, minResolution may be different than provided\n    maxZoom =\n      minZoom +\n      Math.floor(\n        Math.log(maxResolution / minResolution) / Math.log(zoomFactor),\n      );\n    minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n    if (options.constrainResolution) {\n      resolutionConstraint = createSnapToPower(\n        zoomFactor,\n        maxResolution,\n        minResolution,\n        smooth,\n        !constrainOnlyCenter && extent,\n        showFullExtent,\n      );\n    } else {\n      resolutionConstraint = createMinMaxResolution(\n        maxResolution,\n        minResolution,\n        smooth,\n        !constrainOnlyCenter && extent,\n        showFullExtent,\n      );\n    }\n  }\n  return {\n    constraint: resolutionConstraint,\n    maxResolution: maxResolution,\n    minResolution: minResolution,\n    minZoom: minZoom,\n    zoomFactor: zoomFactor,\n  };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n  const enableRotation =\n    options.enableRotation !== undefined ? options.enableRotation : true;\n  if (enableRotation) {\n    const constrainRotation = options.constrainRotation;\n    if (constrainRotation === undefined || constrainRotation === true) {\n      return createSnapToZero();\n    }\n    if (constrainRotation === false) {\n      return rotationNone;\n    }\n    if (typeof constrainRotation === 'number') {\n      return createSnapToN(constrainRotation);\n    }\n    return rotationNone;\n  }\n  return disable;\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n  if (animation.sourceCenter && animation.targetCenter) {\n    if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n      return false;\n    }\n  }\n  if (animation.sourceResolution !== animation.targetResolution) {\n    return false;\n  }\n  if (animation.sourceRotation !== animation.targetRotation) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n  // calculate rotated position\n  const cosAngle = Math.cos(-rotation);\n  let sinAngle = Math.sin(-rotation);\n  let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n  let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n  rotX += (size[0] / 2 - position[0]) * resolution;\n  rotY += (position[1] - size[1] / 2) * resolution;\n\n  // go back to original angle\n  sinAngle = -sinAngle; // go back to original rotation\n  const centerX = rotX * cosAngle - rotY * sinAngle;\n  const centerY = rotY * cosAngle + rotX * sinAngle;\n\n  return [centerX, centerY];\n}\n\nexport default View;\n\n/**\n * @typedef {function(ViewOptions):ViewOptions} ViewTransform\n */\n\n/**\n * Adds higher resolutions.\n * @param {number} num The number of higher resolution levels to use.\n * @return {ViewTransform} A view transform.\n */\nexport function withHigherResolutions(num) {\n  return function (options) {\n    if (!options.resolutions) {\n      return options;\n    }\n    const resolutions = [...options.resolutions];\n    const highest = resolutions[resolutions.length - 1];\n    for (let i = 0; i < num; ++i) {\n      resolutions.push(highest / Math.pow(2, i + 1));\n    }\n    return {\n      ...options,\n      resolutions,\n    };\n  };\n}\n\n/**\n * Adds lower resolutions.\n * @param {number} num The number of lower resolution levels to use.\n * @return {ViewTransform} A view transform.\n * @api\n */\nexport function withLowerResolutions(num) {\n  return function (options) {\n    if (!options.resolutions) {\n      return options;\n    }\n    const resolutions = [...options.resolutions];\n    const lowest = resolutions[0];\n    for (let i = 0; i < num; ++i) {\n      resolutions.unshift(lowest * Math.pow(2, i + 1));\n    }\n    return {\n      ...options,\n      resolutions,\n    };\n  };\n}\n\n/**\n * Applies a center based on the extent.\n * @return {ViewTransform} A view transform.\n * @api\n */\nexport function withExtentCenter() {\n  return function (options) {\n    if (!options.extent) {\n      return options;\n    }\n    const center = getCenter(options.extent);\n    const newOptions = {...options, center};\n    delete newOptions.extent;\n    return newOptions;\n  };\n}\n\n/**\n * Applies a zoom level.\n * @param {number} z The zoom level.\n * @return {ViewTransform} A view transform.\n * @api\n */\nexport function withZoom(z) {\n  return function (options) {\n    return {...options, zoom: z};\n  };\n}\n\n/**\n * Applies a series of transforms to a view that is resolved from a source.\n * @param {import(\"./source/Source.js\").default} source The source.\n * @param {...ViewTransform} transforms The transforms to apply.\n * @return {Promise<ViewOptions>} The view options.\n * @api\n */\nexport async function getView(source, ...transforms) {\n  let config = await source.getView();\n  for (const transform of transforms) {\n    config = transform(config);\n  }\n  return config;\n}\n","/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n  ANIMATING: 0,\n  INTERACTING: 1,\n};\n","/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  CENTER: 'center',\n  RESOLUTION: 'resolution',\n  ROTATION: 'rotation',\n};\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, comparator) {\n  let mid, cmp;\n  comparator = comparator || ascending;\n  let low = 0;\n  let high = haystack.length;\n  let found = false;\n\n  while (low < high) {\n    /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n     * to double (which gives the wrong results). */\n    mid = low + ((high - low) >> 1);\n    cmp = +comparator(haystack[mid], needle);\n\n    if (cmp < 0.0) {\n      /* Too low. */\n      low = mid + 1;\n    } else {\n      /* Key found or too high */\n      high = mid;\n      found = !cmp;\n    }\n  }\n\n  /* Key not found. */\n  return found ? low : ~low;\n}\n\n/**\n * Compare function sorting arrays in ascending order.  Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n *     argument is less than, equal to, or greater than the second.\n */\nexport function ascending(a, b) {\n  return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order.  Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n *     argument is greater than, equal to, or less than the second.\n */\nexport function descending(a, b) {\n  return a < b ? 1 : a > b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array<number>} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n *    0 means return the nearest,\n *    > 0 means return the largest nearest,\n *    < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n  if (arr[0] <= target) {\n    return 0;\n  }\n\n  const n = arr.length;\n  if (target <= arr[n - 1]) {\n    return n - 1;\n  }\n\n  if (typeof direction === 'function') {\n    for (let i = 1; i < n; ++i) {\n      const candidate = arr[i];\n      if (candidate === target) {\n        return i;\n      }\n      if (candidate < target) {\n        if (direction(target, arr[i - 1], candidate) > 0) {\n          return i - 1;\n        }\n        return i;\n      }\n    }\n    return n - 1;\n  }\n\n  if (direction > 0) {\n    for (let i = 1; i < n; ++i) {\n      if (arr[i] < target) {\n        return i - 1;\n      }\n    }\n    return n - 1;\n  }\n\n  if (direction < 0) {\n    for (let i = 1; i < n; ++i) {\n      if (arr[i] <= target) {\n        return i;\n      }\n    }\n    return n - 1;\n  }\n\n  for (let i = 1; i < n; ++i) {\n    if (arr[i] == target) {\n      return i;\n    }\n    if (arr[i] < target) {\n      if (arr[i - 1] - target < target - arr[i]) {\n        return i - 1;\n      }\n      return i;\n    }\n  }\n  return n - 1;\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n  while (begin < end) {\n    const tmp = arr[begin];\n    arr[begin] = arr[end];\n    arr[end] = tmp;\n    ++begin;\n    --end;\n  }\n}\n\n/**\n * @param {Array<VALUE>} arr The array to modify.\n * @param {!Array<VALUE>|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n  const extension = Array.isArray(data) ? data : [data];\n  const length = extension.length;\n  for (let i = 0; i < length; i++) {\n    arr[arr.length] = extension[i];\n  }\n}\n\n/**\n * @param {Array<VALUE>} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n  const i = arr.indexOf(obj);\n  const found = i > -1;\n  if (found) {\n    arr.splice(i, 1);\n  }\n  return found;\n}\n\n/**\n * @param {Array<any>|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array<any>|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n  const len1 = arr1.length;\n  if (len1 !== arr2.length) {\n    return false;\n  }\n  for (let i = 0; i < len1; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n * @deprecated\n */\nexport function stableSort(arr, compareFnc) {\n  const length = arr.length;\n  const tmp = Array(arr.length);\n  let i;\n  for (i = 0; i < length; i++) {\n    tmp[i] = {index: i, value: arr[i]};\n  }\n  tmp.sort(function (a, b) {\n    return compareFnc(a.value, b.value) || a.index - b.index;\n  });\n  for (i = 0; i < arr.length; i++) {\n    arr[i] = tmp[i].value;\n  }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, func, strict) {\n  const compare = func || ascending;\n  return arr.every(function (currentVal, index) {\n    if (index === 0) {\n      return true;\n    }\n    const res = compare(arr[index - 1], currentVal);\n    return !(res > 0 || (strict && res === 0));\n  });\n}\n","/**\n * @module ol/asserts\n */\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {string} errorMessage Error message.\n */\nexport function assert(assertion, errorMessage) {\n  if (!assertion) {\n    throw new Error(errorMessage);\n  }\n}\n","/**\n * @module ol/color\n */\nimport {createCanvasContext2D} from './dom.js';\nimport {clamp, toFixed} from './math.js';\n\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array<number>} Color\n * @api\n */\n\n/**\n * Color to indicate that no color should be rendered. This is meant to be used for per-reference\n * comparisons only.\n * @type {Color}\n */\nexport const NO_COLOR = [NaN, NaN, NaN, 0];\n\nlet colorParseContext;\n/**\n * @return {CanvasRenderingContext2D} The color parse context\n */\nfunction getColorParseContext() {\n  if (!colorParseContext) {\n    colorParseContext = createCanvasContext2D(1, 1, undefined, {\n      willReadFrequently: true,\n      desynchronized: true,\n    });\n  }\n  return colorParseContext;\n}\n\nconst rgbModernRegEx =\n  /^rgba?\\(\\s*(\\d+%?)\\s+(\\d+%?)\\s+(\\d+%?)(?:\\s*\\/\\s*(\\d+%|\\d*\\.\\d+|[01]))?\\s*\\)$/i;\nconst rgbLegacyAbsoluteRegEx =\n  /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)(?:\\s*,\\s*(\\d+%|\\d*\\.\\d+|[01]))?\\s*\\)$/i;\nconst rgbLegacyPercentageRegEx =\n  /^rgba?\\(\\s*(\\d+%)\\s*,\\s*(\\d+%)\\s*,\\s*(\\d+%)(?:\\s*,\\s*(\\d+%|\\d*\\.\\d+|[01]))?\\s*\\)$/i;\nconst hexRegEx = /^#([\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/i;\n\n/**\n * @param {string} s Color component as number or percentage.\n * @param {number} divider Divider for percentage.\n * @return {number} Color component.\n */\nfunction toColorComponent(s, divider) {\n  return s.endsWith('%')\n    ? Number(s.substring(0, s.length - 1)) / divider\n    : Number(s);\n}\n\n/**\n * @param {string} color Color string.\n */\nfunction throwInvalidColor(color) {\n  throw new Error('failed to parse \"' + color + '\" as color');\n}\n\n/**\n * @param {string} color Color string.\n * @return {Color} RGBa color array.\n */\nfunction parseRgba(color) {\n  // Fast lane for rgb(a) colors\n  if (color.toLowerCase().startsWith('rgb')) {\n    const rgb =\n      color.match(rgbLegacyAbsoluteRegEx) ||\n      color.match(rgbModernRegEx) ||\n      color.match(rgbLegacyPercentageRegEx);\n    if (rgb) {\n      const alpha = rgb[4];\n      const rgbDivider = 100 / 255;\n      return [\n        clamp((toColorComponent(rgb[1], rgbDivider) + 0.5) | 0, 0, 255),\n        clamp((toColorComponent(rgb[2], rgbDivider) + 0.5) | 0, 0, 255),\n        clamp((toColorComponent(rgb[3], rgbDivider) + 0.5) | 0, 0, 255),\n        alpha !== undefined ? clamp(toColorComponent(alpha, 100), 0, 1) : 1,\n      ];\n    }\n    throwInvalidColor(color);\n  }\n  // Fast lane for hex colors (also with alpha)\n  if (color.startsWith('#')) {\n    if (hexRegEx.test(color)) {\n      const hex = color.substring(1);\n      const step = hex.length <= 4 ? 1 : 2;\n      const colorFromHex = [0, 0, 0, 255];\n      for (let i = 0, ii = hex.length; i < ii; i += step) {\n        let colorComponent = parseInt(hex.substring(i, i + step), 16);\n        if (step === 1) {\n          colorComponent += colorComponent << 4;\n        }\n        colorFromHex[i / step] = colorComponent;\n      }\n      colorFromHex[3] = colorFromHex[3] / 255;\n      return colorFromHex;\n    }\n    throwInvalidColor(color);\n  }\n  // Use canvas color serialization to parse the color into hex or rgba\n  // See https://www.w3.org/TR/2021/SPSD-2dcontext-20210128/#serialization-of-a-color\n  const context = getColorParseContext();\n  context.fillStyle = '#abcdef';\n  let invalidCheckFillStyle = context.fillStyle;\n  context.fillStyle = color;\n  if (context.fillStyle === invalidCheckFillStyle) {\n    context.fillStyle = '#fedcba';\n    invalidCheckFillStyle = context.fillStyle;\n    context.fillStyle = color;\n    if (context.fillStyle === invalidCheckFillStyle) {\n      throwInvalidColor(color);\n    }\n  }\n  const colorString = context.fillStyle;\n  if (colorString.startsWith('#') || colorString.startsWith('rgba')) {\n    return parseRgba(colorString);\n  }\n  context.clearRect(0, 0, 1, 1);\n  context.fillRect(0, 0, 1, 1);\n  const colorFromImage = Array.from(context.getImageData(0, 0, 1, 1).data);\n  colorFromImage[3] = toFixed(colorFromImage[3] / 255, 3);\n  return colorFromImage;\n}\n\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n  if (typeof color === 'string') {\n    return color;\n  }\n  return toString(color);\n}\n\n/**\n * @type {number}\n */\nconst MAX_CACHE_SIZE = 1024;\n\n/**\n * We maintain a small cache of parsed strings.  Whenever the cache grows too large,\n * we delete an arbitrary set of the entries.\n *\n * @type {Object<string, Color>}\n */\nconst cache = {};\n\n/**\n * @type {number}\n */\nlet cacheSize = 0;\n\n/**\n * @param {Color} color A color that may or may not have an alpha channel.\n * @return {Color} The input color with an alpha channel.  If the input color has\n * an alpha channel, the input color will be returned unchanged.  Otherwise, a new\n * array will be returned with the input color and an alpha channel of 1.\n */\nexport function withAlpha(color) {\n  if (color.length === 4) {\n    return color;\n  }\n  const output = color.slice();\n  output[3] = 1;\n  return output;\n}\n\n// The functions b1, b2, a1, a2, rgbaToLcha and lchaToRgba below are adapted from\n// https://stackoverflow.com/a/67219995/2389327\n\n/**\n * @param {number} v Input value.\n * @return {number} Output value.\n */\nfunction b1(v) {\n  return v > 0.0031308 ? Math.pow(v, 1 / 2.4) * 269.025 - 14.025 : v * 3294.6;\n}\n\n/**\n * @param {number} v Input value.\n * @return {number} Output value.\n */\nfunction b2(v) {\n  return v > 0.2068965 ? Math.pow(v, 3) : (v - 4 / 29) * (108 / 841);\n}\n\n/**\n * @param {number} v Input value.\n * @return {number} Output value.\n */\nfunction a1(v) {\n  return v > 10.314724 ? Math.pow((v + 14.025) / 269.025, 2.4) : v / 3294.6;\n}\n\n/**\n * @param {number} v Input value.\n * @return {number} Output value.\n */\nfunction a2(v) {\n  return v > 0.0088564 ? Math.pow(v, 1 / 3) : v / (108 / 841) + 4 / 29;\n}\n\n/**\n * @param {Color} color RGBA color.\n * @return {Color} LCHuv color with alpha.\n */\nexport function rgbaToLcha(color) {\n  const r = a1(color[0]);\n  const g = a1(color[1]);\n  const b = a1(color[2]);\n  const y = a2(r * 0.222488403 + g * 0.716873169 + b * 0.06060791);\n  const l = 500 * (a2(r * 0.452247074 + g * 0.399439023 + b * 0.148375274) - y);\n  const q = 200 * (y - a2(r * 0.016863605 + g * 0.117638439 + b * 0.865350722));\n  const h = Math.atan2(q, l) * (180 / Math.PI);\n  return [\n    116 * y - 16,\n    Math.sqrt(l * l + q * q),\n    h < 0 ? h + 360 : h,\n    color[3],\n  ];\n}\n\n/**\n * @param {Color} color LCHuv color with alpha.\n * @return {Color} RGBA color.\n */\nexport function lchaToRgba(color) {\n  const l = (color[0] + 16) / 116;\n  const c = color[1];\n  const h = (color[2] * Math.PI) / 180;\n  const y = b2(l);\n  const x = b2(l + (c / 500) * Math.cos(h));\n  const z = b2(l - (c / 200) * Math.sin(h));\n  const r = b1(x * 3.021973625 - y * 1.617392459 - z * 0.404875592);\n  const g = b1(x * -0.943766287 + y * 1.916279586 + z * 0.027607165);\n  const b = b1(x * 0.069407491 - y * 0.22898585 + z * 1.159737864);\n  return [\n    clamp((r + 0.5) | 0, 0, 255),\n    clamp((g + 0.5) | 0, 0, 255),\n    clamp((b + 0.5) | 0, 0, 255),\n    color[3],\n  ];\n}\n\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport function fromString(s) {\n  if (s === 'none') {\n    return NO_COLOR;\n  }\n  if (cache.hasOwnProperty(s)) {\n    return cache[s];\n  }\n  if (cacheSize >= MAX_CACHE_SIZE) {\n    let i = 0;\n    for (const key in cache) {\n      if ((i++ & 3) === 0) {\n        delete cache[key];\n        --cacheSize;\n      }\n    }\n  }\n\n  const color = parseRgba(s);\n  if (color.length !== 4) {\n    throwInvalidColor(s);\n  }\n  for (const c of color) {\n    if (isNaN(c)) {\n      throwInvalidColor(s);\n    }\n  }\n  cache[s] = color;\n  ++cacheSize;\n  return color;\n}\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n  if (Array.isArray(color)) {\n    return color;\n  }\n  return fromString(color);\n}\n\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n  let r = color[0];\n  if (r != (r | 0)) {\n    r = (r + 0.5) | 0;\n  }\n  let g = color[1];\n  if (g != (g | 0)) {\n    g = (g + 0.5) | 0;\n  }\n  let b = color[2];\n  if (b != (b | 0)) {\n    b = (b + 0.5) | 0;\n  }\n  const a = color[3] === undefined ? 1 : Math.round(color[3] * 1000) / 1000;\n  return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n  try {\n    fromString(s);\n    return true;\n  } catch {\n    return false;\n  }\n}\n","/**\n * @module ol/colorlike\n */\nimport ImageState from './ImageState.js';\nimport {toString} from './color.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {get as getIconImage} from './style/IconImage.js';\nimport {shared as iconCache} from './style/IconImageCache.js';\n\n/**\n * @typedef {Object} PatternDescriptor\n * @property {string} src Pattern image URL\n * @property {import(\"./color.js\").Color|string} [color] Color to tint the pattern with.\n * @property {import(\"./size.js\").Size} [size] Size of the desired slice from the pattern image.\n * Use this together with `offset` when the pattern image is a sprite sheet.\n * @property {import(\"./size.js\").Size} [offset] Offset of the desired slice from the pattern image.\n * Use this together with `size` when the pattern image is a sprite sheet.\n */\n\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, [CanvasPattern](https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern),\n * or [CanvasGradient](https://developer.mozilla.org/en-US/docs/Web/API/CanvasGradient). The origin for\n * patterns and gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n\n/**\n * @param {import(\"./color.js\").Color|ColorLike|PatternDescriptor|null} color Color.\n * @return {ColorLike|null} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n  if (!color) {\n    return null;\n  }\n  if (Array.isArray(color)) {\n    return toString(color);\n  }\n  if (typeof color === 'object' && 'src' in color) {\n    return asCanvasPattern(color);\n  }\n  return color;\n}\n\n/**\n * @param {PatternDescriptor} pattern Pattern descriptor.\n * @return {CanvasPattern|null} Canvas pattern or null if the pattern referenced in the\n * PatternDescriptor was not found in the icon image cache.\n */\nfunction asCanvasPattern(pattern) {\n  if (!pattern.offset || !pattern.size) {\n    return iconCache.getPattern(pattern.src, pattern.color);\n  }\n\n  const cacheKey = pattern.src + ':' + pattern.offset;\n\n  const canvasPattern = iconCache.getPattern(cacheKey, pattern.color);\n  if (canvasPattern) {\n    return canvasPattern;\n  }\n\n  const iconImage = iconCache.get(pattern.src, null);\n  if (iconImage.getImageState() !== ImageState.LOADED) {\n    return null;\n  }\n  const patternCanvasContext = createCanvasContext2D(\n    pattern.size[0],\n    pattern.size[1],\n  );\n  patternCanvasContext.drawImage(\n    iconImage.getImage(1),\n    pattern.offset[0],\n    pattern.offset[1],\n    pattern.size[0],\n    pattern.size[1],\n    0,\n    0,\n    pattern.size[0],\n    pattern.size[1],\n  );\n  getIconImage(\n    patternCanvasContext.canvas,\n    cacheKey,\n    undefined,\n    ImageState.LOADED,\n    pattern.color,\n    true,\n  );\n  return iconCache.getPattern(cacheKey, pattern.color);\n}\n","/**\n * @module ol/console\n */\n\n/**\n * @typedef {'info'|'warn'|'error'|'none'} Level\n */\n\n/**\n * @type {Object<Level, number>}\n */\nconst levels = {\n  info: 1,\n  warn: 2,\n  error: 3,\n  none: 4,\n};\n\n/**\n * @type {number}\n */\nlet level = levels.info;\n\n/**\n * Set the logging level.  By default, the level is set to 'info' and all\n * messages will be logged.  Set to 'warn' to only display warnings and errors.\n * Set to 'error' to only display errors.  Set to 'none' to silence all messages.\n *\n * @param {Level} l The new level.\n */\nexport function setLevel(l) {\n  level = levels[l];\n}\n\n/**\n * @param  {...any} args Arguments to log\n */\nexport function log(...args) {\n  if (level > levels.info) {\n    return;\n  }\n  console.log(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param  {...any} args Arguments to log\n */\nexport function warn(...args) {\n  if (level > levels.warn) {\n    return;\n  }\n  console.warn(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param  {...any} args Arguments to log\n */\nexport function error(...args) {\n  if (level > levels.error) {\n    return;\n  }\n  console.error(...args); // eslint-disable-line no-console\n}\n","/**\n * @module ol/control/Attribution\n */\nimport {equals} from '../array.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {removeChildren, replaceNode} from '../dom.js';\nimport EventType from '../events/EventType.js';\nimport {toPromise} from '../functions.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {string|Array<string>|undefined} [attributions] Optional attribution(s) that will always be\n * displayed regardless of the layers rendered.\n * **Caution:** Attributions are rendered dynamically using `innerHTML`, which can lead to potential\n * [**XSS (Cross-Site Scripting)**](https://en.wikipedia.org/wiki/Cross-site_scripting) vulnerabilities.\n * Use this feature only for trusted content\n * or ensure that the content is properly sanitized before inserting it.\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n  /**\n   * @param {Options} [options] Attribution options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      element: document.createElement('div'),\n      render: options.render,\n      target: options.target,\n    });\n\n    /**\n     * @private\n     * @type {HTMLElement}\n     */\n    this.ulElement_ = document.createElement('ul');\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.collapsed_ =\n      options.collapsed !== undefined ? options.collapsed : true;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.userCollapsed_ = this.collapsed_;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.overrideCollapsible_ = options.collapsible !== undefined;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.collapsible_ =\n      options.collapsible !== undefined ? options.collapsible : true;\n\n    if (!this.collapsible_) {\n      this.collapsed_ = false;\n    }\n\n    /**\n     * @private\n     * @type {string | Array<string> | undefined}\n     */\n    this.attributions_ = options.attributions;\n\n    const className =\n      options.className !== undefined ? options.className : 'ol-attribution';\n\n    const tipLabel =\n      options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n    const expandClassName =\n      options.expandClassName !== undefined\n        ? options.expandClassName\n        : className + '-expand';\n\n    const collapseLabel =\n      options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n\n    const collapseClassName =\n      options.collapseClassName !== undefined\n        ? options.collapseClassName\n        : className + '-collapse';\n\n    if (typeof collapseLabel === 'string') {\n      /**\n       * @private\n       * @type {HTMLElement}\n       */\n      this.collapseLabel_ = document.createElement('span');\n      this.collapseLabel_.textContent = collapseLabel;\n      this.collapseLabel_.className = collapseClassName;\n    } else {\n      this.collapseLabel_ = collapseLabel;\n    }\n\n    const label = options.label !== undefined ? options.label : 'i';\n\n    if (typeof label === 'string') {\n      /**\n       * @private\n       * @type {HTMLElement}\n       */\n      this.label_ = document.createElement('span');\n      this.label_.textContent = label;\n      this.label_.className = expandClassName;\n    } else {\n      this.label_ = label;\n    }\n\n    const activeLabel =\n      this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n    /**\n     * @private\n     * @type {HTMLElement}\n     */\n    this.toggleButton_ = document.createElement('button');\n    this.toggleButton_.setAttribute('type', 'button');\n    this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n    this.toggleButton_.title = tipLabel;\n    this.toggleButton_.appendChild(activeLabel);\n\n    this.toggleButton_.addEventListener(\n      EventType.CLICK,\n      this.handleClick_.bind(this),\n      false,\n    );\n\n    const cssClasses =\n      className +\n      ' ' +\n      CLASS_UNSELECTABLE +\n      ' ' +\n      CLASS_CONTROL +\n      (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n      (this.collapsible_ ? '' : ' ol-uncollapsible');\n    const element = this.element;\n    element.className = cssClasses;\n    element.appendChild(this.toggleButton_);\n    element.appendChild(this.ulElement_);\n\n    /**\n     * A list of currently rendered resolutions.\n     * @type {Array<string>}\n     * @private\n     */\n    this.renderedAttributions_ = [];\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderedVisible_ = true;\n  }\n\n  /**\n   * Collect a list of visible attributions and set the collapsible state.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @return {Array<string>} Attributions.\n   * @private\n   */\n  collectSourceAttributions_(frameState) {\n    const layers = this.getMap().getAllLayers();\n    const visibleAttributions = new Set(\n      layers.flatMap((layer) => layer.getAttributions(frameState)),\n    );\n    if (this.attributions_ !== undefined) {\n      Array.isArray(this.attributions_)\n        ? this.attributions_.forEach((item) => visibleAttributions.add(item))\n        : visibleAttributions.add(this.attributions_);\n    }\n\n    if (!this.overrideCollapsible_) {\n      const collapsible = !layers.some(\n        (layer) => layer.getSource()?.getAttributionsCollapsible() === false,\n      );\n      this.setCollapsible(collapsible);\n    }\n    return Array.from(visibleAttributions);\n  }\n\n  /**\n   * @private\n   * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n   */\n  async updateElement_(frameState) {\n    if (!frameState) {\n      if (this.renderedVisible_) {\n        this.element.style.display = 'none';\n        this.renderedVisible_ = false;\n      }\n      return;\n    }\n\n    const attributions = await Promise.all(\n      this.collectSourceAttributions_(frameState).map((attribution) =>\n        toPromise(() => attribution),\n      ),\n    );\n\n    const visible = attributions.length > 0;\n    if (this.renderedVisible_ != visible) {\n      this.element.style.display = visible ? '' : 'none';\n      this.renderedVisible_ = visible;\n    }\n\n    if (equals(attributions, this.renderedAttributions_)) {\n      return;\n    }\n\n    removeChildren(this.ulElement_);\n\n    // append the attributions\n    for (let i = 0, ii = attributions.length; i < ii; ++i) {\n      const element = document.createElement('li');\n      element.innerHTML = attributions[i];\n      this.ulElement_.appendChild(element);\n    }\n\n    this.renderedAttributions_ = attributions;\n  }\n\n  /**\n   * @param {MouseEvent} event The event to handle\n   * @private\n   */\n  handleClick_(event) {\n    event.preventDefault();\n    this.handleToggle_();\n    this.userCollapsed_ = this.collapsed_;\n  }\n\n  /**\n   * @private\n   */\n  handleToggle_() {\n    this.element.classList.toggle(CLASS_COLLAPSED);\n    if (this.collapsed_) {\n      replaceNode(this.collapseLabel_, this.label_);\n    } else {\n      replaceNode(this.label_, this.collapseLabel_);\n    }\n    this.collapsed_ = !this.collapsed_;\n    this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n  }\n\n  /**\n   * Return `true` if the attribution is collapsible, `false` otherwise.\n   * @return {boolean} True if the widget is collapsible.\n   * @api\n   */\n  getCollapsible() {\n    return this.collapsible_;\n  }\n\n  /**\n   * Set whether the attribution should be collapsible.\n   * @param {boolean} collapsible True if the widget is collapsible.\n   * @api\n   */\n  setCollapsible(collapsible) {\n    if (this.collapsible_ === collapsible) {\n      return;\n    }\n    this.collapsible_ = collapsible;\n    this.element.classList.toggle('ol-uncollapsible');\n    if (this.userCollapsed_) {\n      this.handleToggle_();\n    }\n  }\n\n  /**\n   * Collapse or expand the attribution according to the passed parameter. Will\n   * not do anything if the attribution isn't collapsible or if the current\n   * collapsed state is already the one requested.\n   * @param {boolean} collapsed True if the widget is collapsed.\n   * @api\n   */\n  setCollapsed(collapsed) {\n    this.userCollapsed_ = collapsed;\n    if (!this.collapsible_ || this.collapsed_ === collapsed) {\n      return;\n    }\n    this.handleToggle_();\n  }\n\n  /**\n   * Return `true` when the attribution is currently collapsed or `false`\n   * otherwise.\n   * @return {boolean} True if the widget is collapsed.\n   * @api\n   */\n  getCollapsed() {\n    return this.collapsed_;\n  }\n\n  /**\n   * Update the attribution element.\n   * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n   * @override\n   */\n  render(mapEvent) {\n    this.updateElement_(mapEvent.frameState);\n  }\n}\n\nexport default Attribution;\n","/**\n * @module ol/control/Control\n */\nimport MapEventType from '../MapEventType.js';\nimport BaseObject from '../Object.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {VOID} from '../functions.js';\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * const myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n  /**\n   * @param {Options} options Control options.\n   */\n  constructor(options) {\n    super();\n\n    const element = options.element;\n    if (element && !options.target && !element.style.pointerEvents) {\n      element.style.pointerEvents = 'auto';\n    }\n\n    /**\n     * @protected\n     * @type {HTMLElement}\n     */\n    this.element = element ? element : null;\n\n    /**\n     * @private\n     * @type {HTMLElement}\n     */\n    this.target_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../Map.js\").default|null}\n     */\n    this.map_ = null;\n\n    /**\n     * @protected\n     * @type {!Array<import(\"../events.js\").EventsKey>}\n     */\n    this.listenerKeys = [];\n\n    if (options.render) {\n      this.render = options.render;\n    }\n\n    if (options.target) {\n      this.setTarget(options.target);\n    }\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.element?.remove();\n    super.disposeInternal();\n  }\n\n  /**\n   * Get the map associated with this control.\n   * @return {import(\"../Map.js\").default|null} Map.\n   * @api\n   */\n  getMap() {\n    return this.map_;\n  }\n\n  /**\n   * Remove the control from its current map and attach it to the new map.\n   * Pass `null` to just remove the control from the current map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {import(\"../Map.js\").default|null} map Map.\n   * @api\n   */\n  setMap(map) {\n    if (this.map_) {\n      this.element?.remove();\n    }\n    for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n      unlistenByKey(this.listenerKeys[i]);\n    }\n    this.listenerKeys.length = 0;\n    this.map_ = map;\n    if (map) {\n      const target = this.target_ ?? map.getOverlayContainerStopEvent();\n      if (this.element) {\n        target.appendChild(this.element);\n      }\n      if (this.render !== VOID) {\n        this.listenerKeys.push(\n          listen(map, MapEventType.POSTRENDER, this.render, this),\n        );\n      }\n      map.render();\n    }\n  }\n\n  /**\n   * Renders the control.\n   * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n   * @api\n   */\n  render(mapEvent) {}\n\n  /**\n   * This function is used to set a target element for the control. It has no\n   * effect if it is called after the control has been added to the map (i.e.\n   * after `setMap` is called on the control). If no `target` is set in the\n   * options passed to the control constructor and if `setTarget` is not called\n   * then the control is added to the map's overlay container.\n   * @param {HTMLElement|string} target Target.\n   * @api\n   */\n  setTarget(target) {\n    this.target_ =\n      typeof target === 'string' ? document.getElementById(target) : target;\n  }\n}\n\nexport default Control;\n","/**\n * @module ol/control/FullScreen\n */\nimport MapProperty from '../MapProperty.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE, CLASS_UNSUPPORTED} from '../css.js';\nimport {replaceNode} from '../dom.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport Control from './Control.js';\n\nconst events = ['fullscreenchange', 'webkitfullscreenchange'];\n\n/**\n * @enum {string}\n */\nconst FullScreenEventType = {\n  /**\n   * Triggered after the map entered fullscreen.\n   * @event FullScreenEventType#enterfullscreen\n   * @api\n   */\n  ENTERFULLSCREEN: 'enterfullscreen',\n\n  /**\n   * Triggered after the map leave fullscreen.\n   * @event FullScreenEventType#leavefullscreen\n   * @api\n   */\n  LEAVEFULLSCREEN: 'leavefullscreen',\n};\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes|\n *     'enterfullscreen'|'leavefullscreen', import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types, import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|\n *     'enterfullscreen'|'leavefullscreen'|import(\"../ObjectEventType.js\").Types, Return>} FullScreenOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-full-screen'] CSS class name.\n * @property {string|Text|HTMLElement} [label='\\u2922'] Text label to use for the button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|Text|HTMLElement} [labelActive='\\u00d7'] Text label to use for the\n * button when full-screen is active.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [activeClassName=className + '-true'] CSS class name for the button\n * when full-screen is active.\n * @property {string} [inactiveClassName=className + '-false'] CSS class name for the button\n * when full-screen is inactive.\n * @property {string} [tipLabel='Toggle full-screen'] Text label to use for the button tip.\n * @property {boolean} [keys=false] Full keyboard access.\n * @property {HTMLElement|string} [target] Specify a target if you want the\n * control to be rendered outside of the map's viewport.\n * @property {HTMLElement|string} [source] The element to be displayed\n * fullscreen. When not provided, the element containing the map viewport will\n * be displayed fullscreen.\n */\n\n/**\n * @classdesc\n * Provides a button that when clicked fills up the full screen with the map.\n * The full screen source element is by default the element containing the map viewport unless\n * overridden by providing the `source` option. In which case, the dom\n * element introduced using this parameter will be displayed in full screen.\n *\n * When in full screen mode, a close button is shown to exit full screen mode.\n * The [Fullscreen API](https://www.w3.org/TR/fullscreen/) is used to\n * toggle the map in full screen mode.\n *\n * @fires FullScreenEventType#enterfullscreen\n * @fires FullScreenEventType#leavefullscreen\n * @api\n */\nclass FullScreen extends Control {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      element: document.createElement('div'),\n      target: options.target,\n    });\n\n    /***\n     * @type {FullScreenOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {FullScreenOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {FullScreenOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.keys_ = options.keys !== undefined ? options.keys : false;\n\n    /**\n     * @private\n     * @type {HTMLElement|string|undefined}\n     */\n    this.source_ = options.source;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.isInFullscreen_ = false;\n\n    /**\n     * @private\n     */\n    this.boundHandleMapTargetChange_ = this.handleMapTargetChange_.bind(this);\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.cssClassName_ =\n      options.className !== undefined ? options.className : 'ol-full-screen';\n\n    /**\n     * @private\n     * @type {Array<import(\"../events.js\").EventsKey>}\n     */\n    this.documentListeners_ = [];\n\n    /**\n     * @private\n     * @type {Array<string>}\n     */\n    this.activeClassName_ =\n      options.activeClassName !== undefined\n        ? options.activeClassName.split(' ')\n        : [this.cssClassName_ + '-true'];\n\n    /**\n     * @private\n     * @type {Array<string>}\n     */\n    this.inactiveClassName_ =\n      options.inactiveClassName !== undefined\n        ? options.inactiveClassName.split(' ')\n        : [this.cssClassName_ + '-false'];\n\n    const label = options.label !== undefined ? options.label : '\\u2922';\n\n    /**\n     * @private\n     * @type {Text|HTMLElement}\n     */\n    this.labelNode_ =\n      typeof label === 'string' ? document.createTextNode(label) : label;\n\n    const labelActive =\n      options.labelActive !== undefined ? options.labelActive : '\\u00d7';\n\n    /**\n     * @private\n     * @type {Text|HTMLElement}\n     */\n    this.labelActiveNode_ =\n      typeof labelActive === 'string'\n        ? document.createTextNode(labelActive)\n        : labelActive;\n\n    const tipLabel = options.tipLabel ? options.tipLabel : 'Toggle full-screen';\n\n    /**\n     * @private\n     * @type {HTMLElement}\n     */\n    this.button_ = document.createElement('button');\n    this.button_.title = tipLabel;\n    this.button_.setAttribute('type', 'button');\n    this.button_.appendChild(this.labelNode_);\n    this.button_.addEventListener(\n      EventType.CLICK,\n      this.handleClick_.bind(this),\n      false,\n    );\n    this.setClassName_(this.button_, this.isInFullscreen_);\n\n    this.element.className = `${this.cssClassName_} ${CLASS_UNSELECTABLE} ${CLASS_CONTROL}`;\n    this.element.appendChild(this.button_);\n  }\n\n  /**\n   * @param {MouseEvent} event The event to handle\n   * @private\n   */\n  handleClick_(event) {\n    event.preventDefault();\n    this.handleFullScreen_();\n  }\n\n  /**\n   * @private\n   */\n  handleFullScreen_() {\n    const map = this.getMap();\n    if (!map) {\n      return;\n    }\n    const doc = map.getOwnerDocument();\n    if (!isFullScreenSupported(doc)) {\n      return;\n    }\n    if (isFullScreen(doc)) {\n      exitFullScreen(doc);\n    } else {\n      let element;\n      if (this.source_) {\n        element =\n          typeof this.source_ === 'string'\n            ? doc.getElementById(this.source_)\n            : this.source_;\n      } else {\n        element = map.getTargetElement();\n      }\n      if (this.keys_) {\n        requestFullScreenWithKeys(element);\n      } else {\n        requestFullScreen(element);\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  handleFullScreenChange_() {\n    const map = this.getMap();\n    if (!map) {\n      return;\n    }\n    const wasInFullscreen = this.isInFullscreen_;\n    this.isInFullscreen_ = isFullScreen(map.getOwnerDocument());\n    if (wasInFullscreen !== this.isInFullscreen_) {\n      this.setClassName_(this.button_, this.isInFullscreen_);\n      if (this.isInFullscreen_) {\n        replaceNode(this.labelActiveNode_, this.labelNode_);\n        this.dispatchEvent(FullScreenEventType.ENTERFULLSCREEN);\n      } else {\n        replaceNode(this.labelNode_, this.labelActiveNode_);\n        this.dispatchEvent(FullScreenEventType.LEAVEFULLSCREEN);\n      }\n      map.updateSize();\n    }\n  }\n\n  /**\n   * @param {HTMLElement} element Target element\n   * @param {boolean} fullscreen True if fullscreen class name should be active\n   * @private\n   */\n  setClassName_(element, fullscreen) {\n    if (fullscreen) {\n      element.classList.remove(...this.inactiveClassName_);\n      element.classList.add(...this.activeClassName_);\n    } else {\n      element.classList.remove(...this.activeClassName_);\n      element.classList.add(...this.inactiveClassName_);\n    }\n  }\n\n  /**\n   * Remove the control from its current map and attach it to the new map.\n   * Pass `null` to just remove the control from the current map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {import(\"../Map.js\").default|null} map Map.\n   * @api\n   * @override\n   */\n  setMap(map) {\n    const oldMap = this.getMap();\n    if (oldMap) {\n      oldMap.removeChangeListener(\n        MapProperty.TARGET,\n        this.boundHandleMapTargetChange_,\n      );\n    }\n\n    super.setMap(map);\n\n    this.handleMapTargetChange_();\n    if (map) {\n      map.addChangeListener(\n        MapProperty.TARGET,\n        this.boundHandleMapTargetChange_,\n      );\n    }\n  }\n\n  /**\n   * @private\n   */\n  handleMapTargetChange_() {\n    const listeners = this.documentListeners_;\n    for (let i = 0, ii = listeners.length; i < ii; ++i) {\n      unlistenByKey(listeners[i]);\n    }\n    listeners.length = 0;\n\n    const map = this.getMap();\n    if (map) {\n      const doc = map.getOwnerDocument();\n      if (isFullScreenSupported(doc)) {\n        this.element.classList.remove(CLASS_UNSUPPORTED);\n      } else {\n        this.element.classList.add(CLASS_UNSUPPORTED);\n      }\n\n      for (let i = 0, ii = events.length; i < ii; ++i) {\n        listeners.push(\n          listen(doc, events[i], this.handleFullScreenChange_, this),\n        );\n      }\n      this.handleFullScreenChange_();\n    }\n  }\n}\n\n/**\n * @param {Document} doc The root document to check.\n * @return {boolean} Fullscreen is supported by the current platform.\n */\nfunction isFullScreenSupported(doc) {\n  const body = doc.body;\n  return !!(\n    body['webkitRequestFullscreen'] ||\n    (body.requestFullscreen && doc.fullscreenEnabled)\n  );\n}\n\n/**\n * @param {Document} doc The root document to check.\n * @return {boolean} Element is currently in fullscreen.\n */\nfunction isFullScreen(doc) {\n  return !!(doc['webkitIsFullScreen'] || doc.fullscreenElement);\n}\n\n/**\n * Request to fullscreen an element.\n * @param {HTMLElement} element Element to request fullscreen\n */\nfunction requestFullScreen(element) {\n  if (element.requestFullscreen) {\n    element.requestFullscreen();\n  } else if (element['webkitRequestFullscreen']) {\n    element['webkitRequestFullscreen']();\n  }\n}\n\n/**\n * Request to fullscreen an element with keyboard input.\n * @param {HTMLElement} element Element to request fullscreen\n */\nfunction requestFullScreenWithKeys(element) {\n  if (element['webkitRequestFullscreen']) {\n    element['webkitRequestFullscreen']();\n  } else {\n    requestFullScreen(element);\n  }\n}\n\n/**\n * Exit fullscreen.\n * @param {Document} doc The document to exit fullscren from\n */\nfunction exitFullScreen(doc) {\n  if (doc.exitFullscreen) {\n    doc.exitFullscreen();\n  } else if (doc['webkitExitFullscreen']) {\n    doc['webkitExitFullscreen']();\n  }\n}\n\nexport default FullScreen;\n","/**\n * @module ol/control/MousePosition\n */\n\nimport {wrapX} from '../coordinate.js';\nimport {listen} from '../events.js';\nimport EventType from '../pointer/EventType.js';\nimport {\n  get as getProjection,\n  getTransformFromProjections,\n  getUserProjection,\n  identityTransform,\n} from '../proj.js';\nimport Control from './Control.js';\n\n/**\n * @type {string}\n */\nconst PROJECTION = 'projection';\n\n/**\n * @type {string}\n */\nconst COORDINATE_FORMAT = 'coordinateFormat';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types|\n *     'change:coordinateFormat'|'change:projection', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n *     'change:coordinateFormat'|'change:projection', Return>} MousePositionOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-mouse-position'] CSS class name.\n * @property {import(\"../coordinate.js\").CoordinateFormat} [coordinateFormat] Coordinate format.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the\n * control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want the\n * control to be rendered outside of the map's viewport.\n * @property {string} [placeholder] Markup to show when the mouse position is not\n * available (e.g. when the pointer leaves the map viewport).  By default, a non-breaking space is rendered\n * initially and the last position is retained when the mouse leaves the viewport.\n * When a string is provided (e.g. `'no position'` or `''` for an empty string) it is used as a\n * placeholder.\n * @property {boolean} [wrapX=true] Wrap the world horizontally on the projection's antimeridian, if it\n * is a global projection.\n */\n\n/**\n * @classdesc\n * A control to show the 2D coordinates of the mouse cursor. By default, these\n * are in the view projection, but can be in any supported projection.\n * By default the control is shown in the top right corner of the map, but this\n * can be changed by using the css selector `.ol-mouse-position`.\n *\n * On touch devices, which usually do not have a mouse cursor, the coordinates\n * of the currently touched position are shown.\n *\n * @api\n */\nclass MousePosition extends Control {\n  /**\n   * @param {Options} [options] Mouse position options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const element = document.createElement('div');\n    element.className =\n      options.className !== undefined ? options.className : 'ol-mouse-position';\n\n    super({\n      element: element,\n      render: options.render,\n      target: options.target,\n    });\n\n    /***\n     * @type {MousePositionOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {MousePositionOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {MousePositionOnSignature<void>}\n     */\n    this.un;\n\n    this.addChangeListener(PROJECTION, this.handleProjectionChanged_);\n\n    if (options.coordinateFormat) {\n      this.setCoordinateFormat(options.coordinateFormat);\n    }\n    if (options.projection) {\n      this.setProjection(options.projection);\n    }\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderOnMouseOut_ = options.placeholder !== undefined;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.placeholder_ = this.renderOnMouseOut_ ? options.placeholder : '&#160;';\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.renderedHTML_ = element.innerHTML;\n\n    /**\n     * @private\n     * @type {?import(\"../proj/Projection.js\").default}\n     */\n    this.mapProjection_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../proj.js\").TransformFunction}\n     */\n    this.transform_ = null;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.wrapX_ = options.wrapX === false ? false : true;\n  }\n\n  /**\n   * @private\n   */\n  handleProjectionChanged_() {\n    this.transform_ = null;\n  }\n\n  /**\n   * Return the coordinate format type used to render the current position or\n   * undefined.\n   * @return {import(\"../coordinate.js\").CoordinateFormat|undefined} The format to render the current\n   *     position in.\n   * @observable\n   * @api\n   */\n  getCoordinateFormat() {\n    return /** @type {import(\"../coordinate.js\").CoordinateFormat|undefined} */ (\n      this.get(COORDINATE_FORMAT)\n    );\n  }\n\n  /**\n   * Return the projection that is used to report the mouse position.\n   * @return {import(\"../proj/Projection.js\").default|undefined} The projection to report mouse\n   *     position in.\n   * @observable\n   * @api\n   */\n  getProjection() {\n    return /** @type {import(\"../proj/Projection.js\").default|undefined} */ (\n      this.get(PROJECTION)\n    );\n  }\n\n  /**\n   * @param {MouseEvent} event Browser event.\n   * @protected\n   */\n  handleMouseMove(event) {\n    const map = this.getMap();\n    this.updateHTML_(map.getEventPixel(event));\n  }\n\n  /**\n   * @param {Event} event Browser event.\n   * @protected\n   */\n  handleMouseOut(event) {\n    this.updateHTML_(null);\n  }\n\n  /**\n   * Remove the control from its current map and attach it to the new map.\n   * Pass `null` to just remove the control from the current map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {import(\"../Map.js\").default|null} map Map.\n   * @api\n   * @override\n   */\n  setMap(map) {\n    super.setMap(map);\n    if (map) {\n      const viewport = map.getViewport();\n      this.listenerKeys.push(\n        listen(viewport, EventType.POINTERMOVE, this.handleMouseMove, this),\n      );\n      if (this.renderOnMouseOut_) {\n        this.listenerKeys.push(\n          listen(viewport, EventType.POINTEROUT, this.handleMouseOut, this),\n        );\n      }\n      this.updateHTML_(null);\n    }\n  }\n\n  /**\n   * Set the coordinate format type used to render the current position.\n   * @param {import(\"../coordinate.js\").CoordinateFormat} format The format to render the current\n   *     position in.\n   * @observable\n   * @api\n   */\n  setCoordinateFormat(format) {\n    this.set(COORDINATE_FORMAT, format);\n  }\n\n  /**\n   * Set the projection that is used to report the mouse position.\n   * @param {import(\"../proj.js\").ProjectionLike} projection The projection to report mouse\n   *     position in.\n   * @observable\n   * @api\n   */\n  setProjection(projection) {\n    this.set(PROJECTION, getProjection(projection));\n  }\n\n  /**\n   * @param {?import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @private\n   */\n  updateHTML_(pixel) {\n    let html = this.placeholder_;\n    if (pixel && this.mapProjection_) {\n      if (!this.transform_) {\n        const projection = this.getProjection();\n        if (projection) {\n          this.transform_ = getTransformFromProjections(\n            this.mapProjection_,\n            projection,\n          );\n        } else {\n          this.transform_ = identityTransform;\n        }\n      }\n      const map = this.getMap();\n      const coordinate = map.getCoordinateFromPixelInternal(pixel);\n      if (coordinate) {\n        const userProjection = getUserProjection();\n        if (userProjection) {\n          this.transform_ = getTransformFromProjections(\n            this.mapProjection_,\n            userProjection,\n          );\n        }\n        this.transform_(coordinate, coordinate);\n        if (this.wrapX_) {\n          const projection =\n            userProjection || this.getProjection() || this.mapProjection_;\n          wrapX(coordinate, projection);\n        }\n        const coordinateFormat = this.getCoordinateFormat();\n        if (coordinateFormat) {\n          html = coordinateFormat(coordinate);\n        } else {\n          html = coordinate.toString();\n        }\n      }\n    }\n    if (!this.renderedHTML_ || html !== this.renderedHTML_) {\n      this.element.innerHTML = html;\n      this.renderedHTML_ = html;\n    }\n  }\n\n  /**\n   * Update the projection. Rendering of the coordinates is done in\n   * `handleMouseMove` and `handleMouseUp`.\n   * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n   * @override\n   */\n  render(mapEvent) {\n    const frameState = mapEvent.frameState;\n    if (!frameState) {\n      this.mapProjection_ = null;\n    } else {\n      if (this.mapProjection_ != frameState.viewState.projection) {\n        this.mapProjection_ = frameState.viewState.projection;\n        this.transform_ = null;\n      }\n    }\n  }\n}\n\nexport default MousePosition;\n","/**\n * @module ol/control/OverviewMap\n */\nimport Collection from '../Collection.js';\nimport Map from '../Map.js';\nimport MapEventType from '../MapEventType.js';\nimport MapProperty from '../MapProperty.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport Overlay from '../Overlay.js';\nimport View from '../View.js';\nimport ViewProperty from '../ViewProperty.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {replaceNode} from '../dom.js';\nimport {listen, listenOnce} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {\n  containsExtent,\n  equals as equalsExtent,\n  getBottomRight,\n  getTopLeft,\n  scaleFromCenter,\n} from '../extent.js';\nimport {fromExtent as polygonFromExtent} from '../geom/Polygon.js';\nimport Control from './Control.js';\n\n/**\n * Maximum width and/or height extent ratio that determines when the overview\n * map should be zoomed out.\n * @type {number}\n */\nconst MAX_RATIO = 0.75;\n\n/**\n * Minimum width and/or height extent ratio that determines when the overview\n * map should be zoomed in.\n * @type {number}\n */\nconst MIN_RATIO = 0.1;\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-overviewmap'] CSS class name.\n * @property {boolean} [collapsed=true] Whether the control should start collapsed or not (expanded).\n * @property {string|HTMLElement} [collapseLabel='‹'] Text label to use for the\n * expanded overviewmap button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {boolean} [collapsible=true] Whether the control can be collapsed or not.\n * @property {string|HTMLElement} [label='›'] Text label to use for the collapsed\n * overviewmap button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {Array<import(\"../layer/Base.js\").default>|import(\"../Collection.js\").default<import(\"../layer/Base.js\").default>} [layers]\n * Layers for the overview map.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {boolean} [rotateWithView=false] Whether the control view should rotate with the main map view.\n * @property {HTMLElement|string} [target] Specify a target if you want the control\n * to be rendered outside of the map's viewport.\n * @property {string} [tipLabel='Overview map'] Text label to use for the button tip.\n * @property {View} [view] Custom view for the overview map (should use same projection as main map). If not provided,\n * a default view with the same projection as the main map will be used.\n */\n\n/**\n * Create a new control with a map acting as an overview map for another\n * defined map.\n *\n * @api\n */\nclass OverviewMap extends Control {\n  /**\n   * @param {Options} [options] OverviewMap options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      element: document.createElement('div'),\n      render: options.render,\n      target: options.target,\n    });\n\n    /**\n     * @private\n     */\n    this.boundHandleRotationChanged_ = this.handleRotationChanged_.bind(this);\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.collapsed_ =\n      options.collapsed !== undefined ? options.collapsed : true;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.collapsible_ =\n      options.collapsible !== undefined ? options.collapsible : true;\n\n    if (!this.collapsible_) {\n      this.collapsed_ = false;\n    }\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.rotateWithView_ =\n      options.rotateWithView !== undefined ? options.rotateWithView : false;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent|undefined}\n     */\n    this.viewExtent_ = undefined;\n\n    const className =\n      options.className !== undefined ? options.className : 'ol-overviewmap';\n\n    const tipLabel =\n      options.tipLabel !== undefined ? options.tipLabel : 'Overview map';\n\n    const collapseLabel =\n      options.collapseLabel !== undefined ? options.collapseLabel : '\\u2039';\n\n    if (typeof collapseLabel === 'string') {\n      /**\n       * @private\n       * @type {HTMLElement}\n       */\n      this.collapseLabel_ = document.createElement('span');\n      this.collapseLabel_.textContent = collapseLabel;\n    } else {\n      this.collapseLabel_ = collapseLabel;\n    }\n\n    const label = options.label !== undefined ? options.label : '\\u203A';\n\n    if (typeof label === 'string') {\n      /**\n       * @private\n       * @type {HTMLElement}\n       */\n      this.label_ = document.createElement('span');\n      this.label_.textContent = label;\n    } else {\n      this.label_ = label;\n    }\n\n    const activeLabel =\n      this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n    const button = document.createElement('button');\n    button.setAttribute('type', 'button');\n    button.title = tipLabel;\n    button.appendChild(activeLabel);\n\n    button.addEventListener(\n      EventType.CLICK,\n      this.handleClick_.bind(this),\n      false,\n    );\n\n    /**\n     * @type {HTMLElement}\n     * @private\n     */\n    this.ovmapDiv_ = document.createElement('div');\n    this.ovmapDiv_.className = 'ol-overviewmap-map';\n\n    /**\n     * Explicitly given view to be used instead of a view derived from the main map.\n     * @type {View}\n     * @private\n     */\n    this.view_ = options.view;\n\n    const ovmap = new Map({\n      view: options.view,\n      controls: new Collection(),\n      interactions: new Collection(),\n    });\n\n    /**\n     * @type {Map}\n     * @private\n     */\n    this.ovmap_ = ovmap;\n\n    if (options.layers) {\n      options.layers.forEach(function (layer) {\n        ovmap.addLayer(layer);\n      });\n    }\n\n    const box = document.createElement('div');\n    box.className = 'ol-overviewmap-box';\n    box.style.boxSizing = 'border-box';\n\n    /**\n     * @type {import(\"../Overlay.js\").default}\n     * @private\n     */\n    this.boxOverlay_ = new Overlay({\n      position: [0, 0],\n      positioning: 'center-center',\n      element: box,\n    });\n    this.ovmap_.addOverlay(this.boxOverlay_);\n\n    const cssClasses =\n      className +\n      ' ' +\n      CLASS_UNSELECTABLE +\n      ' ' +\n      CLASS_CONTROL +\n      (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n      (this.collapsible_ ? '' : ' ol-uncollapsible');\n    const element = this.element;\n    element.className = cssClasses;\n    element.appendChild(this.ovmapDiv_);\n    element.appendChild(button);\n\n    /* Interactive map */\n\n    const overlay = this.boxOverlay_;\n    const overlayBox = this.boxOverlay_.getElement();\n\n    /* Functions definition */\n\n    const computeDesiredMousePosition = (mousePosition) => {\n      return {\n        clientX: mousePosition.clientX,\n        clientY: mousePosition.clientY,\n      };\n    };\n\n    const move = function (event) {\n      const position = /** @type {?} */ (computeDesiredMousePosition(event));\n      const coordinates = ovmap.getEventCoordinate(\n        /** @type {MouseEvent} */ (position),\n      );\n\n      overlay.setPosition(coordinates);\n    };\n\n    const endMoving = (event) => {\n      const coordinates = ovmap.getEventCoordinateInternal(event);\n\n      const map = this.getMap();\n\n      map.getView().setCenterInternal(coordinates);\n\n      const ownerDocument = map.getOwnerDocument();\n      ownerDocument.removeEventListener('pointermove', move);\n      ownerDocument.removeEventListener('pointerup', endMoving);\n    };\n\n    /* Binding */\n\n    this.ovmapDiv_.addEventListener('pointerdown', (event) => {\n      const ownerDocument = this.getMap().getOwnerDocument();\n      if (event.target === overlayBox) {\n        ownerDocument.addEventListener('pointermove', move);\n      }\n      ownerDocument.addEventListener('pointerup', endMoving);\n    });\n  }\n\n  /**\n   * Remove the control from its current map and attach it to the new map.\n   * Pass `null` to just remove the control from the current map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {import(\"../Map.js\").default|null} map Map.\n   * @api\n   * @override\n   */\n  setMap(map) {\n    const oldMap = this.getMap();\n    if (map === oldMap) {\n      return;\n    }\n    if (oldMap) {\n      const oldView = oldMap.getView();\n      if (oldView) {\n        this.unbindView_(oldView);\n      }\n      this.ovmap_.setTarget(null);\n    }\n    super.setMap(map);\n\n    if (map) {\n      this.ovmap_.setTarget(this.ovmapDiv_);\n      this.listenerKeys.push(\n        listen(\n          map,\n          ObjectEventType.PROPERTYCHANGE,\n          this.handleMapPropertyChange_,\n          this,\n        ),\n      );\n\n      const view = map.getView();\n      if (view) {\n        this.bindView_(view);\n      }\n\n      if (!this.ovmap_.isRendered()) {\n        this.updateBoxAfterOvmapIsRendered_();\n      }\n    }\n  }\n\n  /**\n   * Handle map property changes.  This only deals with changes to the map's view.\n   * @param {import(\"../Object.js\").ObjectEvent} event The propertychange event.\n   * @private\n   */\n  handleMapPropertyChange_(event) {\n    if (event.key === MapProperty.VIEW) {\n      const oldView = /** @type {import(\"../View.js\").default} */ (\n        event.oldValue\n      );\n      if (oldView) {\n        this.unbindView_(oldView);\n      }\n      const newView = this.getMap().getView();\n      this.bindView_(newView);\n    } else if (\n      !this.ovmap_.isRendered() &&\n      (event.key === MapProperty.TARGET || event.key === MapProperty.SIZE)\n    ) {\n      this.ovmap_.updateSize();\n    }\n  }\n\n  /**\n   * Register listeners for view property changes.\n   * @param {import(\"../View.js\").default} view The view.\n   * @private\n   */\n  bindView_(view) {\n    if (!this.view_) {\n      // Unless an explicit view definition was given, derive default from whatever main map uses.\n      const newView = new View({\n        projection: view.getProjection(),\n      });\n      this.ovmap_.setView(newView);\n    }\n\n    view.addChangeListener(\n      ViewProperty.ROTATION,\n      this.boundHandleRotationChanged_,\n    );\n    // Sync once with the new view\n    this.handleRotationChanged_();\n\n    if (view.isDef()) {\n      this.ovmap_.updateSize();\n      this.resetExtent_();\n    }\n  }\n\n  /**\n   * Unregister listeners for view property changes.\n   * @param {import(\"../View.js\").default} view The view.\n   * @private\n   */\n  unbindView_(view) {\n    view.removeChangeListener(\n      ViewProperty.ROTATION,\n      this.boundHandleRotationChanged_,\n    );\n  }\n\n  /**\n   * Handle rotation changes to the main map.\n   * @private\n   */\n  handleRotationChanged_() {\n    if (this.rotateWithView_) {\n      this.ovmap_.getView().setRotation(this.getMap().getView().getRotation());\n    }\n  }\n\n  /**\n   * Reset the overview map extent if the box size (width or\n   * height) is less than the size of the overview map size times minRatio\n   * or is greater than the size of the overview size times maxRatio.\n   *\n   * If the map extent was not reset, the box size can fits in the defined\n   * ratio sizes. This method then checks if is contained inside the overview\n   * map current extent. If not, recenter the overview map to the current\n   * main map center location.\n   * @private\n   */\n  validateExtent_() {\n    const map = this.getMap();\n    const ovmap = this.ovmap_;\n\n    if (!map.isRendered() || !ovmap.isRendered()) {\n      return;\n    }\n\n    const mapSize = /** @type {import(\"../size.js\").Size} */ (map.getSize());\n\n    const view = map.getView();\n    const extent = view.calculateExtentInternal(mapSize);\n\n    if (this.viewExtent_ && equalsExtent(extent, this.viewExtent_)) {\n      // repeats of the same extent may indicate constraint conflicts leading to an endless cycle\n      return;\n    }\n    this.viewExtent_ = extent;\n\n    const ovmapSize = /** @type {import(\"../size.js\").Size} */ (\n      ovmap.getSize()\n    );\n\n    const ovview = ovmap.getView();\n    const ovextent = ovview.calculateExtentInternal(ovmapSize);\n\n    const topLeftPixel = ovmap.getPixelFromCoordinateInternal(\n      getTopLeft(extent),\n    );\n    const bottomRightPixel = ovmap.getPixelFromCoordinateInternal(\n      getBottomRight(extent),\n    );\n\n    const boxWidth = Math.abs(topLeftPixel[0] - bottomRightPixel[0]);\n    const boxHeight = Math.abs(topLeftPixel[1] - bottomRightPixel[1]);\n\n    const ovmapWidth = ovmapSize[0];\n    const ovmapHeight = ovmapSize[1];\n\n    if (\n      boxWidth < ovmapWidth * MIN_RATIO ||\n      boxHeight < ovmapHeight * MIN_RATIO ||\n      boxWidth > ovmapWidth * MAX_RATIO ||\n      boxHeight > ovmapHeight * MAX_RATIO\n    ) {\n      this.resetExtent_();\n    } else if (!containsExtent(ovextent, extent)) {\n      this.recenter_();\n    }\n  }\n\n  /**\n   * Reset the overview map extent to half calculated min and max ratio times\n   * the extent of the main map.\n   * @private\n   */\n  resetExtent_() {\n    if (MAX_RATIO === 0 || MIN_RATIO === 0) {\n      return;\n    }\n\n    const map = this.getMap();\n    const ovmap = this.ovmap_;\n\n    const mapSize = /** @type {import(\"../size.js\").Size} */ (map.getSize());\n\n    const view = map.getView();\n    const extent = view.calculateExtentInternal(mapSize);\n\n    const ovview = ovmap.getView();\n\n    // get how many times the current map overview could hold different\n    // box sizes using the min and max ratio, pick the step in the middle used\n    // to calculate the extent from the main map to set it to the overview map,\n    const steps = Math.log(MAX_RATIO / MIN_RATIO) / Math.LN2;\n    const ratio = 1 / (Math.pow(2, steps / 2) * MIN_RATIO);\n    scaleFromCenter(extent, ratio);\n    ovview.fitInternal(polygonFromExtent(extent));\n  }\n\n  /**\n   * Set the center of the overview map to the map center without changing its\n   * resolution.\n   * @private\n   */\n  recenter_() {\n    const map = this.getMap();\n    const ovmap = this.ovmap_;\n\n    const view = map.getView();\n\n    const ovview = ovmap.getView();\n\n    ovview.setCenterInternal(view.getCenterInternal());\n  }\n\n  /**\n   * Update the box using the main map extent\n   * @private\n   */\n  updateBox_() {\n    const map = this.getMap();\n    const ovmap = this.ovmap_;\n\n    if (!map.isRendered() || !ovmap.isRendered()) {\n      return;\n    }\n\n    const mapSize = /** @type {import(\"../size.js\").Size} */ (map.getSize());\n\n    const view = map.getView();\n\n    const ovview = ovmap.getView();\n\n    const rotation = this.rotateWithView_ ? 0 : -view.getRotation();\n\n    const overlay = this.boxOverlay_;\n    const box = this.boxOverlay_.getElement();\n    const center = view.getCenter();\n    const resolution = view.getResolution();\n    const ovresolution = ovview.getResolution();\n    const width = (mapSize[0] * resolution) / ovresolution;\n    const height = (mapSize[1] * resolution) / ovresolution;\n\n    // set position using center coordinates\n    overlay.setPosition(center);\n\n    // set box size calculated from map extent size and overview map resolution\n    if (box) {\n      box.style.width = width + 'px';\n      box.style.height = height + 'px';\n      const transform = 'rotate(' + rotation + 'rad)';\n      box.style.transform = transform;\n    }\n  }\n\n  /**\n   * @private\n   */\n  updateBoxAfterOvmapIsRendered_() {\n    if (this.ovmapPostrenderKey_) {\n      return;\n    }\n    this.ovmapPostrenderKey_ = listenOnce(\n      this.ovmap_,\n      MapEventType.POSTRENDER,\n      (event) => {\n        delete this.ovmapPostrenderKey_;\n        this.updateBox_();\n      },\n    );\n  }\n\n  /**\n   * @param {MouseEvent} event The event to handle\n   * @private\n   */\n  handleClick_(event) {\n    event.preventDefault();\n    this.handleToggle_();\n  }\n\n  /**\n   * @private\n   */\n  handleToggle_() {\n    this.element.classList.toggle(CLASS_COLLAPSED);\n    if (this.collapsed_) {\n      replaceNode(this.collapseLabel_, this.label_);\n    } else {\n      replaceNode(this.label_, this.collapseLabel_);\n    }\n    this.collapsed_ = !this.collapsed_;\n\n    // manage overview map if it had not been rendered before and control\n    // is expanded\n    const ovmap = this.ovmap_;\n    if (!this.collapsed_) {\n      if (ovmap.isRendered()) {\n        this.viewExtent_ = undefined;\n        ovmap.render();\n        return;\n      }\n      ovmap.updateSize();\n      this.resetExtent_();\n      this.updateBoxAfterOvmapIsRendered_();\n    }\n  }\n\n  /**\n   * Return `true` if the overview map is collapsible, `false` otherwise.\n   * @return {boolean} True if the widget is collapsible.\n   * @api\n   */\n  getCollapsible() {\n    return this.collapsible_;\n  }\n\n  /**\n   * Set whether the overview map should be collapsible.\n   * @param {boolean} collapsible True if the widget is collapsible.\n   * @api\n   */\n  setCollapsible(collapsible) {\n    if (this.collapsible_ === collapsible) {\n      return;\n    }\n    this.collapsible_ = collapsible;\n    this.element.classList.toggle('ol-uncollapsible');\n    if (!collapsible && this.collapsed_) {\n      this.handleToggle_();\n    }\n  }\n\n  /**\n   * Collapse or expand the overview map according to the passed parameter. Will\n   * not do anything if the overview map isn't collapsible or if the current\n   * collapsed state is already the one requested.\n   * @param {boolean} collapsed True if the widget is collapsed.\n   * @api\n   */\n  setCollapsed(collapsed) {\n    if (!this.collapsible_ || this.collapsed_ === collapsed) {\n      return;\n    }\n    this.handleToggle_();\n  }\n\n  /**\n   * Determine if the overview map is collapsed.\n   * @return {boolean} The overview map is collapsed.\n   * @api\n   */\n  getCollapsed() {\n    return this.collapsed_;\n  }\n\n  /**\n   * Return `true` if the overview map view can rotate, `false` otherwise.\n   * @return {boolean} True if the control view can rotate.\n   * @api\n   */\n  getRotateWithView() {\n    return this.rotateWithView_;\n  }\n\n  /**\n   * Set whether the overview map view should rotate with the main map view.\n   * @param {boolean} rotateWithView True if the control view should rotate.\n   * @api\n   */\n  setRotateWithView(rotateWithView) {\n    if (this.rotateWithView_ === rotateWithView) {\n      return;\n    }\n    this.rotateWithView_ = rotateWithView;\n    if (this.getMap().getView().getRotation() !== 0) {\n      if (this.rotateWithView_) {\n        this.handleRotationChanged_();\n      } else {\n        this.ovmap_.getView().setRotation(0);\n      }\n      this.viewExtent_ = undefined;\n      this.validateExtent_();\n      this.updateBox_();\n    }\n  }\n\n  /**\n   * Return the overview map.\n   * @return {import(\"../Map.js\").default} Overview map.\n   * @api\n   */\n  getOverviewMap() {\n    return this.ovmap_;\n  }\n\n  /**\n   * Update the overview map element.\n   * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n   * @override\n   */\n  render(mapEvent) {\n    this.validateExtent_();\n    this.updateBox_();\n  }\n}\n\nexport default OverviewMap;\n","/**\n * @module ol/control/Rotate\n */\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\nimport EventType from '../events/EventType.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n  /**\n   * @param {Options} [options] Rotate options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      element: document.createElement('div'),\n      render: options.render,\n      target: options.target,\n    });\n\n    const className =\n      options.className !== undefined ? options.className : 'ol-rotate';\n\n    const label = options.label !== undefined ? options.label : '\\u21E7';\n\n    const compassClassName =\n      options.compassClassName !== undefined\n        ? options.compassClassName\n        : 'ol-compass';\n\n    /**\n     * @type {HTMLElement}\n     * @private\n     */\n    this.label_ = null;\n\n    if (typeof label === 'string') {\n      this.label_ = document.createElement('span');\n      this.label_.className = compassClassName;\n      this.label_.textContent = label;\n    } else {\n      this.label_ = label;\n      this.label_.classList.add(compassClassName);\n    }\n\n    const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n    const button = document.createElement('button');\n    button.className = className + '-reset';\n    button.setAttribute('type', 'button');\n    button.title = tipLabel;\n    button.appendChild(this.label_);\n\n    button.addEventListener(\n      EventType.CLICK,\n      this.handleClick_.bind(this),\n      false,\n    );\n\n    const cssClasses =\n      className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n    const element = this.element;\n    element.className = cssClasses;\n    element.appendChild(button);\n\n    /**\n     * @private\n     */\n    this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.rotation_ = undefined;\n\n    if (this.autoHide_) {\n      this.element.classList.add(CLASS_HIDDEN);\n    }\n  }\n\n  /**\n   * @param {MouseEvent} event The event to handle\n   * @private\n   */\n  handleClick_(event) {\n    event.preventDefault();\n    if (this.callResetNorth_ !== undefined) {\n      this.callResetNorth_();\n    } else {\n      this.resetNorth_();\n    }\n  }\n\n  /**\n   * @private\n   */\n  resetNorth_() {\n    const map = this.getMap();\n    const view = map.getView();\n    if (!view) {\n      // the map does not have a view, so we can't act\n      // upon it\n      return;\n    }\n    const rotation = view.getRotation();\n    if (rotation !== undefined) {\n      if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n        view.animate({\n          rotation: 0,\n          duration: this.duration_,\n          easing: easeOut,\n        });\n      } else {\n        view.setRotation(0);\n      }\n    }\n  }\n\n  /**\n   * Update the rotate control element.\n   * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n   * @override\n   */\n  render(mapEvent) {\n    const frameState = mapEvent.frameState;\n    if (!frameState) {\n      return;\n    }\n    const rotation = frameState.viewState.rotation;\n    if (rotation != this.rotation_) {\n      const transform = 'rotate(' + rotation + 'rad)';\n      if (this.autoHide_) {\n        const contains = this.element.classList.contains(CLASS_HIDDEN);\n        if (!contains && rotation === 0) {\n          this.element.classList.add(CLASS_HIDDEN);\n        } else if (contains && rotation !== 0) {\n          this.element.classList.remove(CLASS_HIDDEN);\n        }\n      }\n      this.label_.style.transform = transform;\n    }\n    this.rotation_ = rotation;\n  }\n}\n\nexport default Rotate;\n","/**\n * @module ol/control/ScaleLine\n */\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {METERS_PER_UNIT, getPointResolution} from '../proj.js';\nimport Control from './Control.js';\n\n/**\n * @type {string}\n */\nconst UNITS_PROP = 'units';\n\n/**\n * @typedef {'degrees' | 'imperial' | 'nautical' | 'metric' | 'us'} Units\n * Units for the scale line.\n */\n\n/**\n * @const\n * @type {Array<number>}\n */\nconst LEADING_DIGITS = [1, 2, 5];\n\n/**\n * @const\n * @type {number}\n */\nconst DEFAULT_DPI = 25.4 / 0.28;\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types|\n *     'change:units', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types\n *     |'change:units', Return>} ScaleLineOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className] CSS class name. The default is `ol-scale-bar` when configured with\n * `bar: true`. Otherwise the default is `ol-scale-line`.\n * @property {number} [minWidth=64] Minimum width in pixels at the OGC default dpi. The width will be\n * adjusted to match the dpi used.\n * @property {number} [maxWidth] Maximum width in pixels at the OGC default dpi. The width will be\n * adjusted to match the dpi used.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control\n * should be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {HTMLElement|string} [target] Specify a target if you want the control\n * to be rendered outside of the map's viewport.\n * @property {Units} [units='metric'] Units.\n * @property {boolean} [bar=false] Render scalebars instead of a line.\n * @property {number} [steps=4] Number of steps the scalebar should use. Use even numbers\n * for best results. Only applies when `bar` is `true`.\n * @property {boolean} [text=false] Render the text scale above of the scalebar. Only applies\n * when `bar` is `true`.\n * @property {number|undefined} [dpi=undefined] dpi of output device such as printer. Only applies\n * when `bar` is `true`. If undefined the OGC default screen pixel size of 0.28mm will be assumed.\n */\n\n/**\n * @classdesc\n * A control displaying rough y-axis distances, calculated for the center of the\n * viewport. For conformal projections (e.g. EPSG:3857, the default view\n * projection in OpenLayers), the scale is valid for all directions.\n * No scale line will be shown when the y-axis distance of a pixel at the\n * viewport center cannot be calculated in the view projection.\n * By default the scale line will show in the bottom left portion of the map,\n * but this can be changed by using the css selector `.ol-scale-line`.\n * When specifying `bar` as `true`, a scalebar will be rendered instead\n * of a scaleline.\n * For cartesian measurements of the scaleline, you need to set the\n * `getPointResolution` method of your projection to simply return the input\n * value, e.g. `projection.setGetPointResolution(r => r);`\n *\n * @api\n */\nclass ScaleLine extends Control {\n  /**\n   * @param {Options} [options] Scale line options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const element = document.createElement('div');\n    element.style.pointerEvents = 'none';\n\n    super({\n      element: element,\n      render: options.render,\n      target: options.target,\n    });\n\n    /***\n     * @type {ScaleLineOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {ScaleLineOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {ScaleLineOnSignature<void>}\n     */\n    this.un;\n\n    const className =\n      options.className !== undefined\n        ? options.className\n        : options.bar\n          ? 'ol-scale-bar'\n          : 'ol-scale-line';\n\n    /**\n     * @private\n     * @type {HTMLElement}\n     */\n    this.innerElement_ = document.createElement('div');\n    this.innerElement_.className = className + '-inner';\n\n    this.element.className = className + ' ' + CLASS_UNSELECTABLE;\n    this.element.appendChild(this.innerElement_);\n\n    /**\n     * @private\n     * @type {?import(\"../View.js\").State}\n     */\n    this.viewState_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.minWidth_ = options.minWidth !== undefined ? options.minWidth : 64;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.maxWidth_ = options.maxWidth;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderedVisible_ = false;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.renderedWidth_ = undefined;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.renderedHTML_ = '';\n\n    this.addChangeListener(UNITS_PROP, this.handleUnitsChanged_);\n\n    this.setUnits(options.units || 'metric');\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.scaleBar_ = options.bar || false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.scaleBarSteps_ = options.steps || 4;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.scaleBarText_ = options.text || false;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.dpi_ = options.dpi || undefined;\n  }\n\n  /**\n   * Return the units to use in the scale line.\n   * @return {Units} The units\n   * to use in the scale line.\n   * @observable\n   * @api\n   */\n  getUnits() {\n    return this.get(UNITS_PROP);\n  }\n\n  /**\n   * @private\n   */\n  handleUnitsChanged_() {\n    this.updateElement_();\n  }\n\n  /**\n   * Set the units to use in the scale line.\n   * @param {Units} units The units to use in the scale line.\n   * @observable\n   * @api\n   */\n  setUnits(units) {\n    this.set(UNITS_PROP, units);\n  }\n\n  /**\n   * Specify the dpi of output device such as printer.\n   * @param {number|undefined} dpi The dpi of output device.\n   * @api\n   */\n  setDpi(dpi) {\n    this.dpi_ = dpi;\n  }\n\n  /**\n   * @private\n   */\n  updateElement_() {\n    const viewState = this.viewState_;\n\n    if (!viewState) {\n      if (this.renderedVisible_) {\n        this.element.style.display = 'none';\n        this.renderedVisible_ = false;\n      }\n      return;\n    }\n\n    const center = viewState.center;\n    const projection = viewState.projection;\n    const units = this.getUnits();\n    const pointResolutionUnits = units == 'degrees' ? 'degrees' : 'm';\n    let pointResolution = getPointResolution(\n      projection,\n      viewState.resolution,\n      center,\n      pointResolutionUnits,\n    );\n\n    const minWidth =\n      (this.minWidth_ * (this.dpi_ || DEFAULT_DPI)) / DEFAULT_DPI;\n\n    const maxWidth =\n      this.maxWidth_ !== undefined\n        ? (this.maxWidth_ * (this.dpi_ || DEFAULT_DPI)) / DEFAULT_DPI\n        : undefined;\n\n    let nominalCount = minWidth * pointResolution;\n    let suffix = '';\n    if (units == 'degrees') {\n      const metersPerDegree = METERS_PER_UNIT.degrees;\n      nominalCount *= metersPerDegree;\n      if (nominalCount < metersPerDegree / 60) {\n        suffix = '\\u2033'; // seconds\n        pointResolution *= 3600;\n      } else if (nominalCount < metersPerDegree) {\n        suffix = '\\u2032'; // minutes\n        pointResolution *= 60;\n      } else {\n        suffix = '\\u00b0'; // degrees\n      }\n    } else if (units == 'imperial') {\n      if (nominalCount < 0.9144) {\n        suffix = 'in';\n        pointResolution /= 0.0254;\n      } else if (nominalCount < 1609.344) {\n        suffix = 'ft';\n        pointResolution /= 0.3048;\n      } else {\n        suffix = 'mi';\n        pointResolution /= 1609.344;\n      }\n    } else if (units == 'nautical') {\n      pointResolution /= 1852;\n      suffix = 'NM';\n    } else if (units == 'metric') {\n      if (nominalCount < 1e-6) {\n        suffix = 'nm';\n        pointResolution *= 1e9;\n      } else if (nominalCount < 0.001) {\n        suffix = 'μm';\n        pointResolution *= 1000000;\n      } else if (nominalCount < 1) {\n        suffix = 'mm';\n        pointResolution *= 1000;\n      } else if (nominalCount < 1000) {\n        suffix = 'm';\n      } else {\n        suffix = 'km';\n        pointResolution /= 1000;\n      }\n    } else if (units == 'us') {\n      if (nominalCount < 0.9144) {\n        suffix = 'in';\n        pointResolution *= 39.37;\n      } else if (nominalCount < 1609.344) {\n        suffix = 'ft';\n        pointResolution /= 0.30480061;\n      } else {\n        suffix = 'mi';\n        pointResolution /= 1609.3472;\n      }\n    } else {\n      throw new Error('Invalid units');\n    }\n\n    let i = 3 * Math.floor(Math.log(minWidth * pointResolution) / Math.log(10));\n    let count, width, decimalCount;\n    let previousCount = 0;\n    let previousWidth, previousDecimalCount;\n    while (true) {\n      decimalCount = Math.floor(i / 3);\n      const decimal = Math.pow(10, decimalCount);\n      count = LEADING_DIGITS[((i % 3) + 3) % 3] * decimal;\n      width = Math.round(count / pointResolution);\n      if (isNaN(width)) {\n        this.element.style.display = 'none';\n        this.renderedVisible_ = false;\n        return;\n      }\n      if (maxWidth !== undefined && width >= maxWidth) {\n        count = previousCount;\n        width = previousWidth;\n        decimalCount = previousDecimalCount;\n        break;\n      } else if (width >= minWidth) {\n        break;\n      }\n      previousCount = count;\n      previousWidth = width;\n      previousDecimalCount = decimalCount;\n      ++i;\n    }\n    const html = this.scaleBar_\n      ? this.createScaleBar(width, count, suffix)\n      : count.toFixed(decimalCount < 0 ? -decimalCount : 0) + ' ' + suffix;\n\n    if (this.renderedHTML_ != html) {\n      this.innerElement_.innerHTML = html;\n      this.renderedHTML_ = html;\n    }\n\n    if (this.renderedWidth_ != width) {\n      this.innerElement_.style.width = width + 'px';\n      this.renderedWidth_ = width;\n    }\n\n    if (!this.renderedVisible_) {\n      this.element.style.display = '';\n      this.renderedVisible_ = true;\n    }\n  }\n\n  /**\n   * @private\n   * @param {number} width The current width of the scalebar.\n   * @param {number} scale The current scale.\n   * @param {string} suffix The suffix to append to the scale text.\n   * @return {string} The stringified HTML of the scalebar.\n   */\n  createScaleBar(width, scale, suffix) {\n    const resolutionScale = this.getScaleForResolution();\n    const mapScale =\n      resolutionScale < 1\n        ? Math.round(1 / resolutionScale).toLocaleString() + ' : 1'\n        : '1 : ' + Math.round(resolutionScale).toLocaleString();\n    const steps = this.scaleBarSteps_;\n    const stepWidth = width / steps;\n    const scaleSteps = [this.createMarker('absolute')];\n    for (let i = 0; i < steps; ++i) {\n      const cls =\n        i % 2 === 0 ? 'ol-scale-singlebar-odd' : 'ol-scale-singlebar-even';\n      scaleSteps.push(\n        '<div>' +\n          '<div ' +\n          `class=\"ol-scale-singlebar ${cls}\" ` +\n          `style=\"width: ${stepWidth}px;\"` +\n          '>' +\n          '</div>' +\n          this.createMarker('relative') +\n          // render text every second step, except when only 2 steps\n          (i % 2 === 0 || steps === 2\n            ? this.createStepText(i, width, false, scale, suffix)\n            : '') +\n          '</div>',\n      );\n    }\n    // render text at the end\n    scaleSteps.push(this.createStepText(steps, width, true, scale, suffix));\n\n    const scaleBarText = this.scaleBarText_\n      ? `<div class=\"ol-scale-text\" style=\"width: ${width}px;\">` +\n        mapScale +\n        '</div>'\n      : '';\n    return scaleBarText + scaleSteps.join('');\n  }\n\n  /**\n   * Creates a marker at given position\n   * @param {'absolute'|'relative'} position The position, absolute or relative\n   * @return {string} The stringified div containing the marker\n   */\n  createMarker(position) {\n    const top = position === 'absolute' ? 3 : -10;\n    return (\n      '<div ' +\n      'class=\"ol-scale-step-marker\" ' +\n      `style=\"position: ${position}; top: ${top}px;\"` +\n      '></div>'\n    );\n  }\n\n  /**\n   * Creates the label for a marker marker at given position\n   * @param {number} i The iterator\n   * @param {number} width The width the scalebar will currently use\n   * @param {boolean} isLast Flag indicating if we add the last step text\n   * @param {number} scale The current scale for the whole scalebar\n   * @param {string} suffix The suffix for the scale\n   * @return {string} The stringified div containing the step text\n   */\n  createStepText(i, width, isLast, scale, suffix) {\n    const length =\n      i === 0 ? 0 : Math.round((scale / this.scaleBarSteps_) * i * 100) / 100;\n    const lengthString = length + (i === 0 ? '' : ' ' + suffix);\n    const margin = i === 0 ? -3 : (width / this.scaleBarSteps_) * -1;\n    const minWidth = i === 0 ? 0 : (width / this.scaleBarSteps_) * 2;\n    return (\n      '<div ' +\n      'class=\"ol-scale-step-text\" ' +\n      'style=\"' +\n      `margin-left: ${margin}px;` +\n      `text-align: ${i === 0 ? 'left' : 'center'};` +\n      `min-width: ${minWidth}px;` +\n      `left: ${isLast ? width + 'px' : 'unset'};` +\n      '\">' +\n      lengthString +\n      '</div>'\n    );\n  }\n\n  /**\n   * Returns the appropriate scale for the given resolution and units.\n   * @return {number} The appropriate scale.\n   */\n  getScaleForResolution() {\n    const resolution = getPointResolution(\n      this.viewState_.projection,\n      this.viewState_.resolution,\n      this.viewState_.center,\n      'm',\n    );\n    const dpi = this.dpi_ || DEFAULT_DPI;\n    const inchesPerMeter = 1000 / 25.4;\n    return resolution * inchesPerMeter * dpi;\n  }\n\n  /**\n   * Update the scale line element.\n   * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n   * @override\n   */\n  render(mapEvent) {\n    const frameState = mapEvent.frameState;\n    if (!frameState) {\n      this.viewState_ = null;\n    } else {\n      this.viewState_ = frameState.viewState;\n    }\n    this.updateElement_();\n  }\n}\n\nexport default ScaleLine;\n","/**\n * @module ol/control/Zoom\n */\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\nimport EventType from '../events/EventType.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n  /**\n   * @param {Options} [options] Zoom options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      element: document.createElement('div'),\n      target: options.target,\n    });\n\n    const className =\n      options.className !== undefined ? options.className : 'ol-zoom';\n\n    const delta = options.delta !== undefined ? options.delta : 1;\n\n    const zoomInClassName =\n      options.zoomInClassName !== undefined\n        ? options.zoomInClassName\n        : className + '-in';\n\n    const zoomOutClassName =\n      options.zoomOutClassName !== undefined\n        ? options.zoomOutClassName\n        : className + '-out';\n\n    const zoomInLabel =\n      options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n    const zoomOutLabel =\n      options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n\n    const zoomInTipLabel =\n      options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n    const zoomOutTipLabel =\n      options.zoomOutTipLabel !== undefined\n        ? options.zoomOutTipLabel\n        : 'Zoom out';\n\n    const inElement = document.createElement('button');\n    inElement.className = zoomInClassName;\n    inElement.setAttribute('type', 'button');\n    inElement.title = zoomInTipLabel;\n    inElement.appendChild(\n      typeof zoomInLabel === 'string'\n        ? document.createTextNode(zoomInLabel)\n        : zoomInLabel,\n    );\n\n    inElement.addEventListener(\n      EventType.CLICK,\n      this.handleClick_.bind(this, delta),\n      false,\n    );\n\n    const outElement = document.createElement('button');\n    outElement.className = zoomOutClassName;\n    outElement.setAttribute('type', 'button');\n    outElement.title = zoomOutTipLabel;\n    outElement.appendChild(\n      typeof zoomOutLabel === 'string'\n        ? document.createTextNode(zoomOutLabel)\n        : zoomOutLabel,\n    );\n\n    outElement.addEventListener(\n      EventType.CLICK,\n      this.handleClick_.bind(this, -delta),\n      false,\n    );\n\n    const cssClasses =\n      className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n    const element = this.element;\n    element.className = cssClasses;\n    element.appendChild(inElement);\n    element.appendChild(outElement);\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 250;\n  }\n\n  /**\n   * @param {number} delta Zoom delta.\n   * @param {MouseEvent} event The event to handle\n   * @private\n   */\n  handleClick_(delta, event) {\n    event.preventDefault();\n    this.zoomByDelta_(delta);\n  }\n\n  /**\n   * @param {number} delta Zoom delta.\n   * @private\n   */\n  zoomByDelta_(delta) {\n    const map = this.getMap();\n    const view = map.getView();\n    if (!view) {\n      // the map does not have a view, so we can't act\n      // upon it\n      return;\n    }\n    const currentZoom = view.getZoom();\n    if (currentZoom !== undefined) {\n      const newZoom = view.getConstrainedZoom(currentZoom + delta);\n      if (this.duration_ > 0) {\n        if (view.getAnimating()) {\n          view.cancelAnimations();\n        }\n        view.animate({\n          zoom: newZoom,\n          duration: this.duration_,\n          easing: easeOut,\n        });\n      } else {\n        view.setZoom(newZoom);\n      }\n    }\n  }\n}\n\nexport default Zoom;\n","/**\n * @module ol/control/ZoomToExtent\n */\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport EventType from '../events/EventType.js';\nimport {fromExtent as polygonFromExtent} from '../geom/Polygon.js';\nimport {fromUserExtent} from '../proj.js';\nimport Control from './Control.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-zoom-extent'] Class name.\n * @property {HTMLElement|string} [target] Specify a target if you want the control\n * to be rendered outside of the map's viewport.\n * @property {string|HTMLElement} [label='E'] Text label to use for the button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Fit to extent'] Text label to use for the button tip.\n * @property {import(\"../extent.js\").Extent} [extent] The extent to zoom to. If undefined the validity\n * extent of the view projection is used.\n * @property {import(\"../View.js\").FitOptions} [fitOptions] Options to pass to the view when fitting\n * the extent (e.g. `padding`, `duration`, `minResolution`, `maxZoom`, `easing`, `callback`).\n */\n\n/**\n * @classdesc\n * A button control which, when pressed, changes the map view to a specific\n * extent. To style this control use the css selector `.ol-zoom-extent`.\n *\n * @api\n */\nclass ZoomToExtent extends Control {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      element: document.createElement('div'),\n      target: options.target,\n    });\n\n    /**\n     * @type {?import(\"../extent.js\").Extent|null}\n     * @protected\n     */\n    this.extent = options.extent ? options.extent : null;\n\n    /**\n     * @type {import(\"../View.js\").FitOptions}\n     * @protected\n     */\n    this.fitOptions = options.fitOptions || {};\n\n    const className =\n      options.className !== undefined ? options.className : 'ol-zoom-extent';\n\n    const label = options.label !== undefined ? options.label : 'E';\n    const tipLabel =\n      options.tipLabel !== undefined ? options.tipLabel : 'Fit to extent';\n    const button = document.createElement('button');\n    button.setAttribute('type', 'button');\n    button.title = tipLabel;\n    button.appendChild(\n      typeof label === 'string' ? document.createTextNode(label) : label,\n    );\n\n    button.addEventListener(\n      EventType.CLICK,\n      this.handleClick_.bind(this),\n      false,\n    );\n\n    const cssClasses =\n      className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n    const element = this.element;\n    element.className = cssClasses;\n    element.appendChild(button);\n  }\n\n  /**\n   * @param {MouseEvent} event The event to handle\n   * @private\n   */\n  handleClick_(event) {\n    event.preventDefault();\n    this.handleZoomToExtent();\n  }\n\n  /**\n   * @protected\n   */\n  handleZoomToExtent() {\n    const map = this.getMap();\n    const view = map.getView();\n    const extent = !this.extent\n      ? view.getProjection().getExtent()\n      : fromUserExtent(this.extent, view.getProjection());\n\n    view.fitInternal(polygonFromExtent(extent), this.fitOptions);\n  }\n}\n\nexport default ZoomToExtent;\n","/**\n * @module ol/coordinate\n */\nimport {getWidth} from './extent.js';\nimport {clamp, modulo, toFixed} from './math.js';\nimport {padNumber} from './string.js';\n\n/**\n * An array of numbers representing an `xy`, `xyz` or `xyzm` coordinate.\n * Example: `[16, 48]`.\n * @typedef {Array<number>} Coordinate\n * @api\n */\n\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n *     import {add} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     add(coord, [-2, 4]);\n *     // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n  coordinate[0] += +delta[0];\n  coordinate[1] += +delta[1];\n  return coordinate;\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n  const r = circle.getRadius();\n  const center = circle.getCenter();\n  const x0 = center[0];\n  const y0 = center[1];\n  const x1 = coordinate[0];\n  const y1 = coordinate[1];\n\n  let dx = x1 - x0;\n  const dy = y1 - y0;\n  if (dx === 0 && dy === 0) {\n    dx = 1;\n  }\n  const d = Math.sqrt(dx * dx + dy * dy);\n\n  const x = x0 + (r * dx) / d;\n  const y = y0 + (r * dy) / d;\n\n  return [x, y];\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array<Coordinate>} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n  const x0 = coordinate[0];\n  const y0 = coordinate[1];\n  const start = segment[0];\n  const end = segment[1];\n  const x1 = start[0];\n  const y1 = start[1];\n  const x2 = end[0];\n  const y2 = end[1];\n  const dx = x2 - x1;\n  const dy = y2 - y1;\n  const along =\n    dx === 0 && dy === 0\n      ? 0\n      : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n  let x, y;\n  if (along <= 0) {\n    x = x1;\n    y = y1;\n  } else if (along >= 1) {\n    x = x2;\n    y = y2;\n  } else {\n    x = x1 + along * dx;\n    y = y1 + along * dy;\n  }\n  return [x, y];\n}\n\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n *     import {createStringXY} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const stringifyFunc = createStringXY();\n *     const out = stringifyFunc(coord);\n *     // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n *     import {createStringXY} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const stringifyFunc = createStringXY(2);\n *     const out = stringifyFunc(coord);\n *     // out is now '7.85, 47.98'\n *\n * @param {number} [fractionDigits] The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(fractionDigits) {\n  return (\n    /**\n     * @param {Coordinate} coordinate Coordinate.\n     * @return {string} String XY.\n     */\n    function (coordinate) {\n      return toStringXY(coordinate, fractionDigits);\n    }\n  );\n}\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [fractionDigits] The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, fractionDigits) {\n  const normalizedDegrees = modulo(degrees + 180, 360) - 180;\n  const x = Math.abs(3600 * normalizedDegrees);\n  const decimals = fractionDigits || 0;\n\n  let deg = Math.floor(x / 3600);\n  let min = Math.floor((x - deg * 3600) / 60);\n  let sec = toFixed(x - deg * 3600 - min * 60, decimals);\n\n  if (sec >= 60) {\n    sec = 0;\n    min += 1;\n  }\n\n  if (min >= 60) {\n    min = 0;\n    deg += 1;\n  }\n\n  let hdms = deg + '\\u00b0';\n  if (min !== 0 || sec !== 0) {\n    hdms += ' ' + padNumber(min, 2) + '\\u2032';\n  }\n  if (sec !== 0) {\n    hdms += ' ' + padNumber(sec, 2, decimals) + '\\u2033';\n  }\n  if (normalizedDegrees !== 0) {\n    hdms += ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n  }\n\n  return hdms;\n}\n\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n *     import {format} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const template = 'Coordinate is ({x}|{y}).';\n *     const out = format(coord, template);\n *     // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n *     import {format} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const template = 'Coordinate is ({x}|{y}).';\n *     const out = format(coord, template, 2);\n *     // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n *     that will be replaced by first and second coordinate values.\n * @param {number} [fractionDigits] The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, fractionDigits) {\n  if (coordinate) {\n    return template\n      .replace('{x}', coordinate[0].toFixed(fractionDigits))\n      .replace('{y}', coordinate[1].toFixed(fractionDigits));\n  }\n  return '';\n}\n\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n  let equals = true;\n  for (let i = coordinate1.length - 1; i >= 0; --i) {\n    if (coordinate1[i] != coordinate2[i]) {\n      equals = false;\n      break;\n    }\n  }\n  return equals;\n}\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n *     import {rotate} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const rotateRadians = Math.PI / 2; // 90 degrees\n *     rotate(coord, rotateRadians);\n *     // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n  const cosAngle = Math.cos(angle);\n  const sinAngle = Math.sin(angle);\n  const x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n  const y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n  coordinate[0] = x;\n  coordinate[1] = y;\n  return coordinate;\n}\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n *     import {scale as scaleCoordinate} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const scale = 1.2;\n *     scaleCoordinate(coord, scale);\n *     // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n  coordinate[0] *= scale;\n  coordinate[1] *= scale;\n  return coordinate;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n  const dx = coord1[0] - coord2[0];\n  const dy = coord1[1] - coord2[1];\n  return dx * dx + dy * dy;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n  return Math.sqrt(squaredDistance(coord1, coord2));\n}\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array<Coordinate>} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n  return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n *     import {toStringHDMS} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const out = toStringHDMS(coord);\n *     // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n *     import {toStringHDMS} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const out = toStringHDMS(coord, 1);\n *     // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, fractionDigits) {\n  if (coordinate) {\n    return (\n      degreesToStringHDMS('NS', coordinate[1], fractionDigits) +\n      ' ' +\n      degreesToStringHDMS('EW', coordinate[0], fractionDigits)\n    );\n  }\n  return '';\n}\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n *     import {toStringXY} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const out = toStringXY(coord);\n *     // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n *     import {toStringXY} from 'ol/coordinate.js';\n *\n *     const coord = [7.85, 47.983333];\n *     const out = toStringXY(coord, 1);\n *     // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n *    after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, fractionDigits) {\n  return format(coordinate, '{x}, {y}', fractionDigits);\n}\n\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n  if (projection.canWrapX()) {\n    const worldWidth = getWidth(projection.getExtent());\n    const worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n    if (worldsAway) {\n      coordinate[0] -= worldsAway * worldWidth;\n    }\n  }\n  return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, sourceExtentWidth) {\n  const projectionExtent = projection.getExtent();\n  let worldsAway = 0;\n  if (\n    projection.canWrapX() &&\n    (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])\n  ) {\n    sourceExtentWidth = sourceExtentWidth || getWidth(projectionExtent);\n    worldsAway = Math.floor(\n      (coordinate[0] - projectionExtent[0]) / sourceExtentWidth,\n    );\n  }\n  return worldsAway;\n}\n\n/**\n * Compute the angle between p0pA and p0pB\n * @param {Coordinate} p0 Point 0\n * @param {Coordinate} pA Point A\n * @param {Coordinate} pB Point B\n * @return {number} a value in [0, 2PI]\n */\nexport function angleBetween(p0, pA, pB) {\n  const lenA = Math.sqrt(\n    (pA[0] - p0[0]) * (pA[0] - p0[0]) + (pA[1] - p0[1]) * (pA[1] - p0[1]),\n  );\n  const tangentA = [(pA[0] - p0[0]) / lenA, (pA[1] - p0[1]) / lenA];\n  const orthoA = [-tangentA[1], tangentA[0]];\n  const lenB = Math.sqrt(\n    (pB[0] - p0[0]) * (pB[0] - p0[0]) + (pB[1] - p0[1]) * (pB[1] - p0[1]),\n  );\n  const tangentB = [(pB[0] - p0[0]) / lenB, (pB[1] - p0[1]) / lenB];\n\n  // this angle can be clockwise or anticlockwise; hence the computation afterwards\n  let angle =\n    lenA === 0 || lenB === 0\n      ? 0\n      : Math.acos(\n          clamp(tangentB[0] * tangentA[0] + tangentB[1] * tangentA[1], -1, 1),\n        );\n  angle = Math.max(angle, 0.00001); // avoid a zero angle otherwise this is detected as a line cap\n  const isClockwise = tangentB[0] * orthoA[0] + tangentB[1] * orthoA[1] > 0;\n  return !isClockwise ? Math.PI * 2 - angle : angle;\n}\n","/**\n * @module ol/css\n */\n\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array<string>} families Families.\n */\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_HIDDEN = 'ol-hidden';\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_SELECTABLE = 'ol-selectable';\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSELECTABLE = 'ol-unselectable';\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSUPPORTED = 'ol-unsupported';\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_CONTROL = 'ol-control';\n\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_COLLAPSED = 'ol-collapsed';\n\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nconst fontRegEx = new RegExp(\n  [\n    '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n    '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n    '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n    '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n    '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n    '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n    '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z0-9]+?)\\\\s*$',\n  ].join(''),\n  'i',\n);\n/** @type {Array<'style'|'variant'|'weight'|'size'|'lineHeight'|'family'>} */\nconst fontRegExMatchIndex = [\n  'style',\n  'variant',\n  'weight',\n  'size',\n  'lineHeight',\n  'family',\n];\n\n/** @type {Object<string|number, number>} */\nexport const fontWeights = {\n  normal: 400,\n  bold: 700,\n};\n\n/**\n * Get the list of font families from a font spec.  Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters|null} The font parameters (or null if the input spec is invalid).\n */\nexport const getFontParameters = function (fontSpec) {\n  const match = fontSpec.match(fontRegEx);\n  if (!match) {\n    return null;\n  }\n  const style = /** @type {FontParameters} */ ({\n    lineHeight: 'normal',\n    size: '1.2em',\n    style: 'normal',\n    weight: '400',\n    variant: 'normal',\n  });\n  for (let i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n    const value = match[i + 1];\n    if (value !== undefined) {\n      style[fontRegExMatchIndex[i]] =\n        typeof value === 'string' ? value.trim() : value;\n    }\n  }\n  if (isNaN(Number(style.weight)) && style.weight in fontWeights) {\n    style.weight = fontWeights[style.weight];\n  }\n  style.families = style.family\n    .split(/,\\s?/)\n    .map((f) => f.trim().replace(/^['\"]|['\"]$/g, ''));\n  return style;\n};\n","import {WORKER_OFFSCREEN_CANVAS} from './has.js';\n\n/**\n * @module ol/dom\n */\n\n/**\n * @typedef {Object} ImageAttributes\n * @property {string|null} [crossOrigin] Cross origin.\n * @property {ReferrerPolicy} [referrerPolicy]  Referrer policy.\n */\n\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [width] Canvas width.\n * @param {number} [height] Canvas height.\n * @param {Array<HTMLCanvasElement|OffscreenCanvas>} [canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [settings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(width, height, canvasPool, settings) {\n  /** @type {HTMLCanvasElement|OffscreenCanvas} */\n  let canvas;\n  if (canvasPool && canvasPool.length) {\n    canvas = /** @type {HTMLCanvasElement} */ (canvasPool.shift());\n  } else if (WORKER_OFFSCREEN_CANVAS) {\n    canvas = new (class extends OffscreenCanvas {\n      style = {};\n    })(width ?? 300, height ?? 150);\n  } else {\n    canvas = document.createElement('canvas');\n  }\n  if (width) {\n    canvas.width = width;\n  }\n  if (height) {\n    canvas.height = height;\n  }\n  return /** @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} */ (\n    canvas.getContext('2d', settings)\n  );\n}\n\n/**\n * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n */\nlet sharedCanvasContext;\n\n/**\n * @return {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} Shared canvas context.\n */\nexport function getSharedCanvasContext2D() {\n  if (!sharedCanvasContext) {\n    sharedCanvasContext = createCanvasContext2D(1, 1);\n  }\n  return sharedCanvasContext;\n}\n\n/**\n * Releases canvas memory to avoid exceeding memory limits in Safari.\n * See https://pqina.nl/blog/total-canvas-memory-use-exceeds-the-maximum-limit/\n * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n */\nexport function releaseCanvas(context) {\n  const canvas = context.canvas;\n  canvas.width = 1;\n  canvas.height = 1;\n  context.clearRect(0, 0, 1, 1);\n}\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n  let width = element.offsetWidth;\n  const style = getComputedStyle(element);\n  width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n\n  return width;\n}\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n  let height = element.offsetHeight;\n  const style = getComputedStyle(element);\n  height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n\n  return height;\n}\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n  const parent = oldNode.parentNode;\n  if (parent) {\n    parent.replaceChild(newNode, oldNode);\n  }\n}\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n  while (node.lastChild) {\n    node.lastChild.remove();\n  }\n}\n\n/**\n * Transform the children of a parent node so they match the\n * provided list of children.  This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array<Node>} children The desired children.\n */\nexport function replaceChildren(node, children) {\n  const oldChildren = node.childNodes;\n\n  for (let i = 0; true; ++i) {\n    const oldChild = oldChildren[i];\n    const newChild = children[i];\n\n    // check if our work is done\n    if (!oldChild && !newChild) {\n      break;\n    }\n\n    // check if children match\n    if (oldChild === newChild) {\n      continue;\n    }\n\n    // check if a new child needs to be added\n    if (!oldChild) {\n      node.appendChild(newChild);\n      continue;\n    }\n\n    // check if an old child needs to be removed\n    if (!newChild) {\n      node.removeChild(oldChild);\n      --i;\n      continue;\n    }\n\n    // reorder\n    node.insertBefore(newChild, oldChild);\n  }\n}\n\n/**\n * Creates a minimal structure that mocks a DIV to be used by the composite and\n * layer renderer in a worker environment\n * @return {HTMLDivElement} mocked DIV\n */\nexport function createMockDiv() {\n  const mockedDiv = new Proxy(\n    {\n      /**\n       * @type {Array<HTMLElement>}\n       */\n      childNodes: [],\n      /**\n       * @param {HTMLElement} node html node.\n       * @return {HTMLElement} html node.\n       */\n      appendChild: function (node) {\n        this.childNodes.push(node);\n        return node;\n      },\n      /**\n       * dummy function, as this structure is not supposed to have a parent.\n       */\n      remove: function () {},\n      /**\n       * @param {HTMLElement} node html node.\n       * @return {HTMLElement} html node.\n       */\n      removeChild: function (node) {\n        const index = this.childNodes.indexOf(node);\n        if (index === -1) {\n          throw new Error('Node to remove was not found');\n        }\n        this.childNodes.splice(index, 1);\n        return node;\n      },\n      /**\n       * @param {HTMLElement} newNode new html node.\n       * @param {HTMLElement} referenceNode reference html node.\n       * @return {HTMLElement} new html node.\n       */\n      insertBefore: function (newNode, referenceNode) {\n        const index = this.childNodes.indexOf(referenceNode);\n        if (index === -1) {\n          throw new Error('Reference node not found');\n        }\n        this.childNodes.splice(index, 0, newNode);\n        return newNode;\n      },\n      style: {},\n    },\n    {\n      get(target, prop, receiver) {\n        if (prop === 'firstElementChild') {\n          return target.childNodes.length > 0 ? target.childNodes[0] : null;\n        }\n        return Reflect.get(target, prop, receiver);\n      },\n    },\n  );\n  return /** @type {HTMLDivElement} */ (/** @type {*} */ (mockedDiv));\n}\n\n/***\n * @param {*} obj The object to check.\n * @return {obj is (HTMLCanvasElement | OffscreenCanvas)} The object is a canvas.\n */\nexport function isCanvas(obj) {\n  return (\n    (typeof HTMLCanvasElement !== 'undefined' &&\n      obj instanceof HTMLCanvasElement) ||\n    (typeof OffscreenCanvas !== 'undefined' && obj instanceof OffscreenCanvas)\n  );\n}\n","/**\n * @module ol/easing\n */\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n  return Math.pow(t, 3);\n}\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n  return 1 - easeIn(1 - t);\n}\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n  return 3 * t * t - 2 * t * t * t;\n}\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n  return t;\n}\n\n/**\n * Start slow, speed up, and at the very end slow down again.  This has the\n * same general behavior as {@link module:ol/easing.inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n  if (t < 0.5) {\n    return inAndOut(2 * t);\n  }\n  return 1 - inAndOut(2 * (t - 0.5));\n}\n","/**\n * @module ol/events\n */\nimport {clear} from './obj.js';\n\n/**\n * Key to use with {@link module:ol/Observable.unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n *     listener. Default is the `target`.\n * @param {boolean} [once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, thisArg, once) {\n  if (once) {\n    const originalListener = listener;\n    /**\n     * @param {Event|import('./events/Event.js').default} event The event\n     * @return {void|boolean} When the function returns `false`, event propagation will stop.\n     * @this {typeof target}\n     */\n    listener = function (event) {\n      target.removeEventListener(type, listener);\n      return originalListener.call(thisArg ?? this, event);\n    };\n  } else if (thisArg && thisArg !== target) {\n    listener = listener.bind(thisArg);\n  }\n  const eventsKey = {\n    target: target,\n    type: type,\n    listener: listener,\n  };\n  target.addEventListener(type, listener);\n  return eventsKey;\n}\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n *     listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, thisArg) {\n  return listen(target, type, listener, thisArg, true);\n}\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n  if (key && key.target) {\n    key.target.removeEventListener(key.type, key.listener);\n    clear(key);\n  }\n}\n","/**\n * @module ol/events/Event\n */\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nclass BaseEvent {\n  /**\n   * @param {string} type Type.\n   */\n  constructor(type) {\n    /**\n     * @type {boolean}\n     */\n    this.propagationStopped;\n\n    /**\n     * @type {boolean}\n     */\n    this.defaultPrevented;\n\n    /**\n     * The event type.\n     * @type {string}\n     * @api\n     */\n    this.type = type;\n\n    /**\n     * The event target.\n     * @type {Object}\n     * @api\n     */\n    this.target = null;\n  }\n\n  /**\n   * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n   * will be fired.\n   * @api\n   */\n  preventDefault() {\n    this.defaultPrevented = true;\n  }\n\n  /**\n   * Stop event propagation.\n   * @api\n   */\n  stopPropagation() {\n    this.propagationStopped = true;\n  }\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n  evt.stopPropagation();\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n  evt.preventDefault();\n}\n\nexport default BaseEvent;\n","/**\n * @module ol/events/EventType\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n  /**\n   * Generic change event. Triggered when the revision counter is increased.\n   * @event module:ol/events/Event~BaseEvent#change\n   * @api\n   */\n  CHANGE: 'change',\n\n  /**\n   * Generic error event. Triggered when an error occurs.\n   * @event module:ol/events/Event~BaseEvent#error\n   * @api\n   */\n  ERROR: 'error',\n\n  BLUR: 'blur',\n  CLEAR: 'clear',\n  CONTEXTMENU: 'contextmenu',\n  CLICK: 'click',\n  DBLCLICK: 'dblclick',\n  DRAGENTER: 'dragenter',\n  DRAGOVER: 'dragover',\n  DROP: 'drop',\n  FOCUS: 'focus',\n  KEYDOWN: 'keydown',\n  KEYPRESS: 'keypress',\n  LOAD: 'load',\n  RESIZE: 'resize',\n  TOUCHMOVE: 'touchmove',\n  WHEEL: 'wheel',\n};\n","/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport {VOID} from '../functions.js';\nimport {clear} from '../obj.js';\nimport Event from './Event.js';\n\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n *    `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n *    There is no event target hierarchy. When a listener calls\n *    `stopPropagation` or `preventDefault` on an event object, it means that no\n *    more listeners after this one will be called. Same as when the listener\n *    returns false.\n */\nclass Target extends Disposable {\n  /**\n   * @param {*} [target] Default event target for dispatched events.\n   */\n  constructor(target) {\n    super();\n\n    /**\n     * @private\n     * @type {*}\n     */\n    this.eventTarget_ = target;\n\n    /**\n     * @private\n     * @type {Object<string, number>|null}\n     */\n    this.pendingRemovals_ = null;\n\n    /**\n     * @private\n     * @type {Object<string, number>|null}\n     */\n    this.dispatching_ = null;\n\n    /**\n     * @private\n     * @type {Object<string, Array<import(\"../events.js\").Listener>>|null}\n     */\n    this.listeners_ = null;\n  }\n\n  /**\n   * @param {string} type Type.\n   * @param {import(\"../events.js\").Listener} listener Listener.\n   */\n  addEventListener(type, listener) {\n    if (!type || !listener) {\n      return;\n    }\n    const listeners = this.listeners_ || (this.listeners_ = {});\n    const listenersForType = listeners[type] || (listeners[type] = []);\n    if (!listenersForType.includes(listener)) {\n      listenersForType.push(listener);\n    }\n  }\n\n  /**\n   * Dispatches an event and calls all listeners listening for events\n   * of this type. The event parameter can either be a string or an\n   * Object with a `type` property.\n   *\n   * @param {import(\"./Event.js\").default|string} event Event object.\n   * @return {boolean|undefined} `false` if anyone called preventDefault on the\n   *     event object or if any of the listeners returned false.\n   * @api\n   */\n  dispatchEvent(event) {\n    const isString = typeof event === 'string';\n    const type = isString ? event : event.type;\n    const listeners = this.listeners_ && this.listeners_[type];\n    if (!listeners) {\n      return;\n    }\n\n    const evt = isString ? new Event(event) : /** @type {Event} */ (event);\n    if (!evt.target) {\n      evt.target = this.eventTarget_ || this;\n    }\n    const dispatching = this.dispatching_ || (this.dispatching_ = {});\n    const pendingRemovals =\n      this.pendingRemovals_ || (this.pendingRemovals_ = {});\n    if (!(type in dispatching)) {\n      dispatching[type] = 0;\n      pendingRemovals[type] = 0;\n    }\n    ++dispatching[type];\n    let propagate;\n    for (let i = 0, ii = listeners.length; i < ii; ++i) {\n      if ('handleEvent' in listeners[i]) {\n        propagate = /** @type {import(\"../events.js\").ListenerObject} */ (\n          listeners[i]\n        ).handleEvent(evt);\n      } else {\n        propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (\n          listeners[i]\n        ).call(this, evt);\n      }\n      if (propagate === false || evt.propagationStopped) {\n        propagate = false;\n        break;\n      }\n    }\n    if (--dispatching[type] === 0) {\n      let pr = pendingRemovals[type];\n      delete pendingRemovals[type];\n      while (pr--) {\n        this.removeEventListener(type, VOID);\n      }\n      delete dispatching[type];\n    }\n    return propagate;\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.listeners_ && clear(this.listeners_);\n  }\n\n  /**\n   * Get the listeners for a specified event type. Listeners are returned in the\n   * order that they will be called in.\n   *\n   * @param {string} type Type.\n   * @return {Array<import(\"../events.js\").Listener>|undefined} Listeners.\n   */\n  getListeners(type) {\n    return (this.listeners_ && this.listeners_[type]) || undefined;\n  }\n\n  /**\n   * @param {string} [type] Type. If not provided,\n   *     `true` will be returned if this event target has any listeners.\n   * @return {boolean} Has listeners.\n   */\n  hasListener(type) {\n    if (!this.listeners_) {\n      return false;\n    }\n    return type\n      ? type in this.listeners_\n      : Object.keys(this.listeners_).length > 0;\n  }\n\n  /**\n   * @param {string} type Type.\n   * @param {import(\"../events.js\").Listener} listener Listener.\n   */\n  removeEventListener(type, listener) {\n    if (!this.listeners_) {\n      return;\n    }\n    const listeners = this.listeners_[type];\n    if (!listeners) {\n      return;\n    }\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n      if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n        // make listener a no-op, and remove later in #dispatchEvent()\n        listeners[index] = VOID;\n        ++this.pendingRemovals_[type];\n      } else {\n        listeners.splice(index, 1);\n        if (listeners.length === 0) {\n          delete this.listeners_[type];\n        }\n      }\n    }\n  }\n}\n\nexport default Target;\n","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport {MAC, WEBKIT} from '../has.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n  const conditions = arguments;\n  /**\n   * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n   * @return {boolean} All conditions passed.\n   */\n  return function (event) {\n    let pass = true;\n    for (let i = 0, ii = conditions.length; i < ii; ++i) {\n      pass = pass && conditions[i](event);\n      if (!pass) {\n        break;\n      }\n    }\n    return pass;\n  };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function (mapBrowserEvent) {\n  const originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    originalEvent.altKey &&\n    !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n    !originalEvent.shiftKey\n  );\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function (mapBrowserEvent) {\n  const originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    originalEvent.altKey &&\n    !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n    originalEvent.shiftKey\n  );\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `<div id=\"map\" tabindex=\"1\">`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function (event) {\n  const targetElement = event.map.getTargetElement();\n  const rootNode = targetElement.getRootNode();\n  const activeElement = event.map.getOwnerDocument().activeElement;\n\n  return rootNode instanceof ShadowRoot\n    ? rootNode.host.contains(activeElement)\n    : targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport const focusWithTabindex = function (event) {\n  const targetElement = event.map.getTargetElement();\n  const rootNode = targetElement.getRootNode();\n  const tabIndexCandidate =\n    rootNode instanceof ShadowRoot ? rootNode.host : targetElement;\n\n  return tabIndexCandidate.hasAttribute('tabindex') ? focus(event) : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport const always = TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function (mapBrowserEvent) {\n  return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function (mapBrowserEvent) {\n  const originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    'pointerId' in originalEvent &&\n    originalEvent.button == 0 &&\n    !(WEBKIT && MAC && originalEvent.ctrlKey)\n  );\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport const never = FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function (mapBrowserEvent) {\n  return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function (mapBrowserEvent) {\n  return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function (mapBrowserEvent) {\n  return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function (mapBrowserEvent) {\n  const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n    mapBrowserEvent.originalEvent\n  );\n  return (\n    !originalEvent.altKey &&\n    !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n    !originalEvent.shiftKey\n  );\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function (mapBrowserEvent) {\n  const originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    !originalEvent.altKey &&\n    (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n    !originalEvent.shiftKey\n  );\n};\n\n/**\n * Return `true` if the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKey = function (mapBrowserEvent) {\n  const originalEvent = mapBrowserEvent.originalEvent;\n  return MAC ? originalEvent.metaKey : originalEvent.ctrlKey;\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function (mapBrowserEvent) {\n  const originalEvent = mapBrowserEvent.originalEvent;\n  return (\n    !originalEvent.altKey &&\n    !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n    originalEvent.shiftKey\n  );\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not an `input`,\n * `select`, or `textarea` element and no `contenteditable` attribute is\n * set or inherited, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport const targetNotEditable = function (mapBrowserEvent) {\n  const originalEvent = mapBrowserEvent.originalEvent;\n  const tagName = /** @type {Element} */ (originalEvent.target).tagName;\n  return (\n    tagName !== 'INPUT' &&\n    tagName !== 'SELECT' &&\n    tagName !== 'TEXTAREA' &&\n    // `isContentEditable` is only available on `HTMLElement`, but it may also be a\n    // different type like `SVGElement`.\n    // @ts-ignore\n    !originalEvent.target.isContentEditable\n  );\n};\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport const mouseOnly = function (mapBrowserEvent) {\n  const pointerEvent = mapBrowserEvent.originalEvent;\n  // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n  return 'pointerId' in pointerEvent && pointerEvent.pointerType == 'mouse';\n};\n\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport const touchOnly = function (mapBrowserEvent) {\n  const pointerEvt = mapBrowserEvent.originalEvent;\n  // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n  return 'pointerId' in pointerEvt && pointerEvt.pointerType === 'touch';\n};\n\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport const penOnly = function (mapBrowserEvent) {\n  const pointerEvt = mapBrowserEvent.originalEvent;\n  // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n  return 'pointerId' in pointerEvt && pointerEvt.pointerType === 'pen';\n};\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See https://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport const primaryAction = function (mapBrowserEvent) {\n  const pointerEvent = mapBrowserEvent.originalEvent;\n  return (\n    'pointerId' in pointerEvent &&\n    pointerEvent.isPrimary &&\n    pointerEvent.button === 0\n  );\n};\n","/**\n * @module ol/expr/cpu\n */\n\nimport {\n  fromString,\n  lchaToRgba,\n  rgbaToLcha,\n  toString,\n  withAlpha,\n} from '../color.js';\nimport {ColorType, LiteralExpression, Ops, parse} from './expression.js';\n\n/**\n * @typedef {import('./expression.js').ValueType} ValueType\n */\n\n/**\n * @fileoverview This module includes functions to build expressions for evaluation on the CPU.\n * Building is composed of two steps: parsing and compiling.  The parsing step takes an encoded\n * expression and returns an instance of one of the expression classes.  The compiling step takes\n * the expression instance and returns a function that can be evaluated in to return a literal\n * value.  The evaluator function should do as little allocation and work as possible.\n */\n\n/**\n * @typedef {Object} EvaluationContext\n * @property {Object} properties The values for properties used in 'get' expressions.\n * @property {Object} variables The values for variables used in 'var' expressions.\n * @property {number} resolution The map resolution.\n * @property {string|number|null} featureId The feature id.\n * @property {string} geometryType Geometry type of the current object.\n */\n\n/**\n * @return {EvaluationContext} A new evaluation context.\n */\nexport function newEvaluationContext() {\n  return {\n    variables: {},\n    properties: {},\n    resolution: NaN,\n    featureId: null,\n    geometryType: '',\n  };\n}\n\n/**\n * @typedef {function(EvaluationContext):import(\"./expression.js\").LiteralValue} ExpressionEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):boolean} BooleanEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):number} NumberEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):string} StringEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array<number>|string)} ColorLikeEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):Array<number>} NumberArrayEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):Array<number>} CoordinateEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array<number>)} SizeEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array<number>|number)} SizeLikeEvaluator\n */\n\n/**\n * @param {import('./expression.js').EncodedExpression} encoded The encoded expression.\n * @param {ValueType} type The expected type.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The expression evaluator.\n */\nexport function buildExpression(encoded, type, context) {\n  const expression = parse(encoded, type, context);\n  return compileExpression(expression, context);\n}\n\n/**\n * @param {import(\"./expression.js\").Expression} expression The expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileExpression(expression, context) {\n  if (expression instanceof LiteralExpression) {\n    // convert colors to array if possible\n    if (expression.type === ColorType && typeof expression.value === 'string') {\n      const colorValue = fromString(expression.value);\n      return function () {\n        return colorValue;\n      };\n    }\n    return function () {\n      return expression.value;\n    };\n  }\n  const operator = expression.operator;\n  switch (operator) {\n    case Ops.Number:\n    case Ops.String:\n    case Ops.Coalesce: {\n      return compileAssertionExpression(expression, context);\n    }\n    case Ops.Get:\n    case Ops.Var:\n    case Ops.Has: {\n      return compileAccessorExpression(expression, context);\n    }\n    case Ops.Id: {\n      return (context) => context.featureId;\n    }\n    case Ops.GeometryType: {\n      return (context) => context.geometryType;\n    }\n    case Ops.Concat: {\n      const args = expression.args.map((e) => compileExpression(e, context));\n      return (context) =>\n        ''.concat(...args.map((arg) => arg(context).toString()));\n    }\n    case Ops.Resolution: {\n      return (context) => context.resolution;\n    }\n    case Ops.Any:\n    case Ops.All:\n    case Ops.Between:\n    case Ops.In:\n    case Ops.Not: {\n      return compileLogicalExpression(expression, context);\n    }\n    case Ops.Equal:\n    case Ops.NotEqual:\n    case Ops.LessThan:\n    case Ops.LessThanOrEqualTo:\n    case Ops.GreaterThan:\n    case Ops.GreaterThanOrEqualTo: {\n      return compileComparisonExpression(expression, context);\n    }\n    case Ops.Multiply:\n    case Ops.Divide:\n    case Ops.Add:\n    case Ops.Subtract:\n    case Ops.Clamp:\n    case Ops.Mod:\n    case Ops.Pow:\n    case Ops.Abs:\n    case Ops.Floor:\n    case Ops.Ceil:\n    case Ops.Round:\n    case Ops.Sin:\n    case Ops.Cos:\n    case Ops.Atan:\n    case Ops.Sqrt: {\n      return compileNumericExpression(expression, context);\n    }\n    case Ops.Case: {\n      return compileCaseExpression(expression, context);\n    }\n    case Ops.Match: {\n      return compileMatchExpression(expression, context);\n    }\n    case Ops.Interpolate: {\n      return compileInterpolateExpression(expression, context);\n    }\n    case Ops.ToString: {\n      return compileConvertExpression(expression, context);\n    }\n    default: {\n      throw new Error(`Unsupported operator ${operator}`);\n    }\n    // TODO: unimplemented\n    // Ops.Zoom\n    // Ops.Time\n    // Ops.Array\n    // Ops.Color\n    // Ops.Band\n    // Ops.Palette\n  }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileAssertionExpression(expression, context) {\n  const type = expression.operator;\n  const length = expression.args.length;\n\n  const args = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    args[i] = compileExpression(expression.args[i], context);\n  }\n  switch (type) {\n    case Ops.Coalesce: {\n      return (context) => {\n        for (let i = 0; i < length; ++i) {\n          const value = args[i](context);\n          if (typeof value !== 'undefined' && value !== null) {\n            return value;\n          }\n        }\n        throw new Error('Expected one of the values to be non-null');\n      };\n    }\n    case Ops.Number:\n    case Ops.String: {\n      return (context) => {\n        for (let i = 0; i < length; ++i) {\n          const value = args[i](context);\n          if (typeof value === type) {\n            return value;\n          }\n        }\n        throw new Error(`Expected one of the values to be a ${type}`);\n      };\n    }\n    default: {\n      throw new Error(`Unsupported assertion operator ${type}`);\n    }\n  }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileAccessorExpression(expression, context) {\n  const nameExpression = /** @type {LiteralExpression} */ (expression.args[0]);\n  const name = /** @type {string} */ (nameExpression.value);\n  switch (expression.operator) {\n    case Ops.Get: {\n      return (context) => {\n        const args = expression.args;\n        let value = context.properties[name];\n        for (let i = 1, ii = args.length; i < ii; ++i) {\n          const keyExpression = /** @type {LiteralExpression} */ (args[i]);\n          const key = /** @type {string|number} */ (keyExpression.value);\n          value = value[key];\n        }\n        return value;\n      };\n    }\n    case Ops.Var: {\n      return (context) => context.variables[name];\n    }\n    case Ops.Has: {\n      return (context) => {\n        const args = expression.args;\n        if (!(name in context.properties)) {\n          return false;\n        }\n        let value = context.properties[name];\n        for (let i = 1, ii = args.length; i < ii; ++i) {\n          const keyExpression = /** @type {LiteralExpression} */ (args[i]);\n          const key = /** @type {string|number} */ (keyExpression.value);\n          if (!value || !Object.hasOwn(value, key)) {\n            return false;\n          }\n          value = value[key];\n        }\n        return true;\n      };\n    }\n    default: {\n      throw new Error(`Unsupported accessor operator ${expression.operator}`);\n    }\n  }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {BooleanEvaluator} The evaluator function.\n */\nfunction compileComparisonExpression(expression, context) {\n  const op = expression.operator;\n  const left = compileExpression(expression.args[0], context);\n  const right = compileExpression(expression.args[1], context);\n  switch (op) {\n    case Ops.Equal: {\n      return (context) => left(context) === right(context);\n    }\n    case Ops.NotEqual: {\n      return (context) => left(context) !== right(context);\n    }\n    case Ops.LessThan: {\n      return (context) => left(context) < right(context);\n    }\n    case Ops.LessThanOrEqualTo: {\n      return (context) => left(context) <= right(context);\n    }\n    case Ops.GreaterThan: {\n      return (context) => left(context) > right(context);\n    }\n    case Ops.GreaterThanOrEqualTo: {\n      return (context) => left(context) >= right(context);\n    }\n    default: {\n      throw new Error(`Unsupported comparison operator ${op}`);\n    }\n  }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {BooleanEvaluator} The evaluator function.\n */\nfunction compileLogicalExpression(expression, context) {\n  const op = expression.operator;\n  const length = expression.args.length;\n\n  const args = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    args[i] = compileExpression(expression.args[i], context);\n  }\n  switch (op) {\n    case Ops.Any: {\n      return (context) => {\n        for (let i = 0; i < length; ++i) {\n          if (args[i](context)) {\n            return true;\n          }\n        }\n        return false;\n      };\n    }\n    case Ops.All: {\n      return (context) => {\n        for (let i = 0; i < length; ++i) {\n          if (!args[i](context)) {\n            return false;\n          }\n        }\n        return true;\n      };\n    }\n    case Ops.Between: {\n      return (context) => {\n        const value = args[0](context);\n        const min = args[1](context);\n        const max = args[2](context);\n        return value >= min && value <= max;\n      };\n    }\n    case Ops.In: {\n      return (context) => {\n        const value = args[0](context);\n        for (let i = 1; i < length; ++i) {\n          if (value === args[i](context)) {\n            return true;\n          }\n        }\n        return false;\n      };\n    }\n    case Ops.Not: {\n      return (context) => !args[0](context);\n    }\n    default: {\n      throw new Error(`Unsupported logical operator ${op}`);\n    }\n  }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {NumberEvaluator} The evaluator function.\n */\nfunction compileNumericExpression(expression, context) {\n  const op = expression.operator;\n  const length = expression.args.length;\n\n  const args = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    args[i] = compileExpression(expression.args[i], context);\n  }\n  switch (op) {\n    case Ops.Multiply: {\n      return (context) => {\n        let value = 1;\n        for (let i = 0; i < length; ++i) {\n          value *= args[i](context);\n        }\n        return value;\n      };\n    }\n    case Ops.Divide: {\n      return (context) => args[0](context) / args[1](context);\n    }\n    case Ops.Add: {\n      return (context) => {\n        let value = 0;\n        for (let i = 0; i < length; ++i) {\n          value += args[i](context);\n        }\n        return value;\n      };\n    }\n    case Ops.Subtract: {\n      return (context) => args[0](context) - args[1](context);\n    }\n    case Ops.Clamp: {\n      return (context) => {\n        const value = args[0](context);\n        const min = args[1](context);\n        if (value < min) {\n          return min;\n        }\n        const max = args[2](context);\n        if (value > max) {\n          return max;\n        }\n        return value;\n      };\n    }\n    case Ops.Mod: {\n      return (context) => args[0](context) % args[1](context);\n    }\n    case Ops.Pow: {\n      return (context) => Math.pow(args[0](context), args[1](context));\n    }\n    case Ops.Abs: {\n      return (context) => Math.abs(args[0](context));\n    }\n    case Ops.Floor: {\n      return (context) => Math.floor(args[0](context));\n    }\n    case Ops.Ceil: {\n      return (context) => Math.ceil(args[0](context));\n    }\n    case Ops.Round: {\n      return (context) => Math.round(args[0](context));\n    }\n    case Ops.Sin: {\n      return (context) => Math.sin(args[0](context));\n    }\n    case Ops.Cos: {\n      return (context) => Math.cos(args[0](context));\n    }\n    case Ops.Atan: {\n      if (length === 2) {\n        return (context) => Math.atan2(args[0](context), args[1](context));\n      }\n      return (context) => Math.atan(args[0](context));\n    }\n    case Ops.Sqrt: {\n      return (context) => Math.sqrt(args[0](context));\n    }\n    default: {\n      throw new Error(`Unsupported numeric operator ${op}`);\n    }\n  }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileCaseExpression(expression, context) {\n  const length = expression.args.length;\n  const args = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    args[i] = compileExpression(expression.args[i], context);\n  }\n  return (context) => {\n    for (let i = 0; i < length - 1; i += 2) {\n      const condition = args[i](context);\n      if (condition) {\n        return args[i + 1](context);\n      }\n    }\n    return args[length - 1](context);\n  };\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileMatchExpression(expression, context) {\n  const length = expression.args.length;\n  const args = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    args[i] = compileExpression(expression.args[i], context);\n  }\n  return (context) => {\n    const value = args[0](context);\n    for (let i = 1; i < length - 1; i += 2) {\n      if (value === args[i](context)) {\n        return args[i + 1](context);\n      }\n    }\n    return args[length - 1](context);\n  };\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileInterpolateExpression(expression, context) {\n  const length = expression.args.length;\n  const args = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    args[i] = compileExpression(expression.args[i], context);\n  }\n  return (context) => {\n    const base = args[0](context);\n    const value = args[1](context);\n\n    let previousInput;\n    let previousOutput;\n    for (let i = 2; i < length; i += 2) {\n      const input = args[i](context);\n      let output = args[i + 1](context);\n      const isColor = Array.isArray(output);\n      if (isColor) {\n        output = withAlpha(output);\n      }\n      if (input >= value) {\n        if (i === 2) {\n          return output;\n        }\n        if (isColor) {\n          return interpolateColor(\n            base,\n            value,\n            previousInput,\n            previousOutput,\n            input,\n            output,\n          );\n        }\n        return interpolateNumber(\n          base,\n          value,\n          previousInput,\n          previousOutput,\n          input,\n          output,\n        );\n      }\n      previousInput = input;\n      previousOutput = output;\n    }\n    return previousOutput;\n  };\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileConvertExpression(expression, context) {\n  const op = expression.operator;\n  const length = expression.args.length;\n\n  const args = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    args[i] = compileExpression(expression.args[i], context);\n  }\n  switch (op) {\n    case Ops.ToString: {\n      return (context) => {\n        const value = args[0](context);\n        if (expression.args[0].type === ColorType) {\n          return toString(value);\n        }\n        return value.toString();\n      };\n    }\n    default: {\n      throw new Error(`Unsupported convert operator ${op}`);\n    }\n  }\n}\n\n/**\n * @param {number} base The base.\n * @param {number} value The value.\n * @param {number} input1 The first input value.\n * @param {number} output1 The first output value.\n * @param {number} input2 The second input value.\n * @param {number} output2 The second output value.\n * @return {number} The interpolated value.\n */\nfunction interpolateNumber(base, value, input1, output1, input2, output2) {\n  const delta = input2 - input1;\n  if (delta === 0) {\n    return output1;\n  }\n  const along = value - input1;\n  const factor =\n    base === 1\n      ? along / delta\n      : (Math.pow(base, along) - 1) / (Math.pow(base, delta) - 1);\n  return output1 + factor * (output2 - output1);\n}\n\n/**\n * @param {number} base The base.\n * @param {number} value The value.\n * @param {number} input1 The first input value.\n * @param {import('../color.js').Color} rgba1 The first output value.\n * @param {number} input2 The second input value.\n * @param {import('../color.js').Color} rgba2 The second output value.\n * @return {import('../color.js').Color} The interpolated color.\n */\nfunction interpolateColor(base, value, input1, rgba1, input2, rgba2) {\n  const delta = input2 - input1;\n  if (delta === 0) {\n    return rgba1;\n  }\n  const lcha1 = rgbaToLcha(rgba1);\n  const lcha2 = rgbaToLcha(rgba2);\n  let deltaHue = lcha2[2] - lcha1[2];\n  if (deltaHue > 180) {\n    deltaHue -= 360;\n  } else if (deltaHue < -180) {\n    deltaHue += 360;\n  }\n\n  const lcha = [\n    interpolateNumber(base, value, input1, lcha1[0], input2, lcha2[0]),\n    interpolateNumber(base, value, input1, lcha1[1], input2, lcha2[1]),\n    lcha1[2] + interpolateNumber(base, value, input1, 0, input2, deltaHue),\n    interpolateNumber(base, value, input1, rgba1[3], input2, rgba2[3]),\n  ];\n  return lchaToRgba(lcha);\n}\n","/**\n * @module ol/expr/expression\n */\nimport {ascending} from '../array.js';\nimport {fromString as colorFromString} from '../color.js';\nimport {toSize} from '../size.js';\n\n/**\n * @fileoverview This module includes types and functions for parsing array encoded expressions.\n * The result of parsing an encoded expression is one of the specific expression classes.\n * During parsing, information is added to the parsing context about the data accessed by the\n * expression.\n */\n\n/**\n * Base type used for literal style parameters; can be a number literal or the output of an operator,\n * which in turns takes {@link import(\"./expression.js\").ExpressionValue} arguments.\n *\n * See below for details on the available operators (with notes for those that are WebGL or Canvas only).\n *\n * Reading operators:\n *   * `['band', bandIndex, xOffset, yOffset]` For tile layers only. Fetches pixel values from band\n *     `bandIndex` of the source's data. The first `bandIndex` of the source data is `1`. Fetched values\n *     are in the 0..1 range. {@link import(\"../source/TileImage.js\").default} sources have 4 bands: red,\n *     green, blue and alpha. {@link import(\"../source/DataTile.js\").default} sources can have any number\n *     of bands, depending on the underlying data source and\n *     {@link import(\"../source/GeoTIFF.js\").Options configuration}. `xOffset` and `yOffset` are optional\n *     and allow specifying pixel offsets for x and y. This is used for sampling data from neighboring pixels (WebGL only).\n *   * `['get', attributeName]` fetches a feature property value, similar to `feature.get('attributeName')`.\n *   * `['get', attributeName, keyOrArrayIndex, ...]` (Canvas only) Access nested properties and array items of a\n *     feature property. The result is `undefined` when there is nothing at the specified key or index.\n *   * `['geometry-type']` returns a feature's geometry type as string, either: 'LineString', 'Point' or 'Polygon'\n *     `Multi*` values are returned as their singular equivalent\n *     `Circle` geometries are returned as 'Polygon'\n *     `GeometryCollection` geometries are returned as the type of the first geometry found in the collection (WebGL only).\n *   * `['resolution']` returns the current resolution\n *   * `['time']` The time in seconds since the creation of the layer (WebGL only).\n *   * `['var', 'varName']` fetches a value from the style variables; will throw an error if that variable is undefined\n *   * `['zoom']` The current zoom level (WebGL only).\n *   * `['line-metric']` returns the M component of the current point on a line (WebGL only); in case where the geometry layout of the line\n *      does not contain an M component (e.g. XY or XYZ), 0 is returned; 0 is also returned for geometries other than lines.\n *      Please note that the M component will be linearly interpolated between the two points composing a segment.\n *\n * Math operators:\n *   * `['*', value1, value2, ...]` multiplies the values (either numbers or colors)\n *   * `['/', value1, value2]` divides `value1` by `value2`\n *   * `['+', value1, value2, ...]` adds the values\n *   * `['-', value1, value2]` subtracts `value2` from `value1`\n *   * `['clamp', value, low, high]` clamps `value` between `low` and `high`\n *   * `['%', value1, value2]` returns the result of `value1 % value2` (modulo)\n *   * `['^', value1, value2]` returns the value of `value1` raised to the `value2` power\n *   * `['abs', value1]` returns the absolute value of `value1`\n *   * `['floor', value1]` returns the nearest integer less than or equal to `value1`\n *   * `['round', value1]` returns the nearest integer to `value1`\n *   * `['ceil', value1]` returns the nearest integer greater than or equal to `value1`\n *   * `['sin', value1]` returns the sine of `value1`\n *   * `['cos', value1]` returns the cosine of `value1`\n *   * `['atan', value1, value2]` returns `atan2(value1, value2)`. If `value2` is not provided, returns `atan(value1)`\n *   * `['sqrt', value1]` returns the square root of `value1`\n *\n * * Transform operators:\n *   * `['case', condition1, output1, ...conditionN, outputN, fallback]` selects the first output whose corresponding\n *     condition evaluates to `true`. If no match is found, returns the `fallback` value.\n *     All conditions should be `boolean`, output and fallback can be any kind.\n *   * `['match', input, match1, output1, ...matchN, outputN, fallback]` compares the `input` value against all\n *     provided `matchX` values, returning the output associated with the first valid match. If no match is found,\n *     returns the `fallback` value.\n *     `input` and `matchX` values must all be of the same type, and can be `number` or `string`. `outputX` and\n *     `fallback` values must be of the same type, and can be of any kind.\n *   * `['interpolate', interpolation, input, stop1, output1, ...stopN, outputN]` returns a value by interpolating between\n *     pairs of inputs and outputs; `interpolation` can either be `['linear']` or `['exponential', base]` where `base` is\n *     the rate of increase from stop A to stop B (i.e. power to which the interpolation ratio is raised); a value\n *     of 1 is equivalent to `['linear']`.\n *     `input` and `stopX` values must all be of type `number`. `outputX` values can be `number` or `color` values.\n *     Note: `input` will be clamped between `stop1` and `stopN`, meaning that all output values will be comprised\n *     between `output1` and `outputN`.\n *   * `['string', value1, value2, ...]` returns the first value in the list that evaluates to a string.\n *     An example would be to provide a default value for get: `['string', ['get', 'propertyname'], 'default value']]`\n *     (Canvas only).\n *   * `['number', value1, value2, ...]` returns the first value in the list that evaluates to a number.\n *     An example would be to provide a default value for get: `['string', ['get', 'propertyname'], 42]]`\n *     (Canvas only).\n *   * `['coalesce', value1, value2, ...]` returns the first value in the list which is not null or undefined.\n *     An example would be to provide a default value for get: `['coalesce', ['get','propertyname'], 'default value']]`\n *     (Canvas only).\n *\n * * Logical operators:\n *   * `['<', value1, value2]` returns `true` if `value1` is strictly lower than `value2`, or `false` otherwise.\n *   * `['<=', value1, value2]` returns `true` if `value1` is lower than or equals `value2`, or `false` otherwise.\n *   * `['>', value1, value2]` returns `true` if `value1` is strictly greater than `value2`, or `false` otherwise.\n *   * `['>=', value1, value2]` returns `true` if `value1` is greater than or equals `value2`, or `false` otherwise.\n *   * `['==', value1, value2]` returns `true` if `value1` equals `value2`, or `false` otherwise.\n *   * `['!=', value1, value2]` returns `true` if `value1` does not equal `value2`, or `false` otherwise.\n *   * `['!', value1]` returns `false` if `value1` is `true` or greater than `0`, or `true` otherwise.\n *   * `['all', value1, value2, ...]` returns `true` if all the inputs are `true`, `false` otherwise.\n *   * `['any', value1, value2, ...]` returns `true` if any of the inputs are `true`, `false` otherwise.\n *   * `['has', attributeName, keyOrArrayIndex, ...]` returns `true` if feature properties include the (nested) key `attributeName`,\n *     `false` otherwise.\n *     Note that for WebGL layers, the hardcoded value `-9999999` is used to distinguish when a property is not defined.\n *   * `['between', value1, value2, value3]` returns `true` if `value1` is contained between `value2` and `value3`\n *     (inclusively), or `false` otherwise.\n *   * `['in', needle, haystack]` returns `true` if `needle` is found in `haystack`, and\n *     `false` otherwise.\n *     This operator has the following limitations:\n *     * `haystack` has to be an array of numbers or strings (searching for a substring in a string is not supported yet)\n *     * Only literal arrays are supported as `haystack` for now; this means that `haystack` cannot be the result of an\n *     expression. If `haystack` is an array of strings, use the `literal` operator to disambiguate from an expression:\n *     `['literal', ['abc', 'def', 'ghi']]`\n *     This works as well for number arrays although it is not required. Mixing types (numbers and strings) will produce undefined results.\n *\n * * Conversion operators:\n *   * `['array', value1, ...valueN]` creates a numerical array from `number` values; please note that the amount of\n *     values can currently only be 2, 3 or 4 (WebGL only).\n *   * `['color', red, green, blue, alpha]` or `['color', shade, alpha]` creates a `color` value from `number` values;\n *     the `alpha` parameter is optional; if not specified, it will be set to 1 (WebGL only).\n *     Note: `red`, `green` and `blue` or `shade` components must be values between 0 and 255; `alpha` between 0 and 1.\n *   * `['palette', index, colors]` picks a `color` value from an array of colors using the given index; the `index`\n *     expression must evaluate to a number; the items in the `colors` array must be strings with hex colors\n *     (e.g. `'#86A136'`), colors using the rgba[a] functional notation (e.g. `'rgb(134, 161, 54)'` or `'rgba(134, 161, 54, 1)'`),\n *     named colors (e.g. `'red'`), or array literals with 3 ([r, g, b]) or 4 ([r, g, b, a]) values (with r, g, and b\n *     in the 0-255 range and a in the 0-1 range) (WebGL only).\n *   * `['to-string', value]` converts the input value to a string. If the input is a boolean, the result is \"true\" or \"false\".\n *     If the input is a number, it is converted to a string as specified by the \"NumberToString\" algorithm of the ECMAScript\n *     Language Specification. If the input is a color, it is converted to a string of the form \"rgba(r,g,b,a)\". (Canvas only)\n *\n * Values can either be literals or another operator, as they will be evaluated recursively.\n * Literal values can be of the following types:\n * * `boolean`\n * * `number`\n * * `number[]` (number arrays can only have a length of 2, 3 or 4)\n * * `string`\n * * {@link module:ol/color~Color}\n *\n * @typedef {Array<*>|import(\"../color.js\").Color|string|number|boolean} ExpressionValue\n * @api\n */\n\n/**\n * @typedef {number} ValueType\n */\n\nlet numTypes = 0;\nexport const NoneType = 0;\nexport const BooleanType = 1 << numTypes++;\nexport const NumberType = 1 << numTypes++;\nexport const StringType = 1 << numTypes++;\nexport const ColorType = 1 << numTypes++;\nexport const NumberArrayType = 1 << numTypes++;\nexport const SizeType = 1 << numTypes++;\nexport const AnyType = Math.pow(2, numTypes) - 1;\n\nconst typeNames = {\n  [BooleanType]: 'boolean',\n  [NumberType]: 'number',\n  [StringType]: 'string',\n  [ColorType]: 'color',\n  [NumberArrayType]: 'number[]',\n  [SizeType]: 'size',\n};\n\nconst namedTypes = Object.keys(typeNames).map(Number).sort(ascending);\n\n/**\n * @param {ValueType} type The type.\n * @return {boolean} The type is one of the specific types (not any or a union type).\n */\nfunction isSpecific(type) {\n  return type in typeNames;\n}\n\n/**\n * Get a string representation for a type.\n * @param {ValueType} type The type.\n * @return {string} The type name.\n */\nexport function typeName(type) {\n  const names = [];\n  for (const namedType of namedTypes) {\n    if (includesType(type, namedType)) {\n      names.push(typeNames[namedType]);\n    }\n  }\n  if (names.length === 0) {\n    return 'untyped';\n  }\n  if (names.length < 3) {\n    return names.join(' or ');\n  }\n  return names.slice(0, -1).join(', ') + ', or ' + names[names.length - 1];\n}\n\n/**\n * @param {ValueType} broad The broad type.\n * @param {ValueType} specific The specific type.\n * @return {boolean} The broad type includes the specific type.\n */\nexport function includesType(broad, specific) {\n  return (broad & specific) === specific;\n}\n\n/**\n * @param {ValueType} oneType One type.\n * @param {ValueType} otherType Another type.\n * @return {boolean} The set of types overlap (share a common specific type)\n */\nexport function overlapsType(oneType, otherType) {\n  return !!(oneType & otherType);\n}\n\n/**\n * @param {ValueType} type The type.\n * @param {ValueType} expected The expected type.\n * @return {boolean} The given type is exactly the expected type.\n */\nexport function isType(type, expected) {\n  return type === expected;\n}\n\n/**\n * @typedef {boolean|number|string|Array<number>} LiteralValue\n */\n\nexport class LiteralExpression {\n  /**\n   * @param {ValueType} type The value type.\n   * @param {LiteralValue} value The literal value.\n   */\n  constructor(type, value) {\n    if (!isSpecific(type)) {\n      throw new Error(\n        `literal expressions must have a specific type, got ${typeName(type)}`,\n      );\n    }\n    this.type = type;\n    this.value = value;\n  }\n}\n\nexport class CallExpression {\n  /**\n   * @param {ValueType} type The return type.\n   * @param {string} operator The operator.\n   * @param {...Expression} args The arguments.\n   */\n  constructor(type, operator, ...args) {\n    this.type = type;\n    this.operator = operator;\n    this.args = args;\n  }\n}\n\n/**\n * @typedef {LiteralExpression|CallExpression} Expression\n */\n\n/**\n * @typedef {Object} ParsingContext\n * @property {Map<string, ValueType>} variables Variables referenced with the 'var' operator; key is name, value is type.\n * @property {Map<string, ValueType>} properties Properties referenced with the 'get' operator; key is name, value is type.\n * @property {boolean} featureId The style uses the feature id.\n * @property {boolean} geometryType The style uses the feature geometry type.\n * @property {boolean} mCoordinate The style uses the M coordinate of geometries\n * @property {boolean} mapState The style uses the map state (view state or time elapsed).\n * @property {import('../style/flat.js').StyleVariables} [inputVariables] Variable values (i.e. style variables) given as input during parsing to help with type narrowing\n */\n\n/**\n * @param {import('../style/flat.js').StyleVariables} [inputVariables] Variable values (i.e. style variables) given as input during parsing to help with type narrowing\n * @return {ParsingContext} A new parsing context.\n */\nexport function newParsingContext(inputVariables) {\n  return {\n    variables: new Map(),\n    properties: new Map(),\n    featureId: false,\n    geometryType: false,\n    mCoordinate: false,\n    mapState: false,\n    inputVariables,\n  };\n}\n\n/**\n * @typedef {LiteralValue|Array} EncodedExpression\n */\n\n/**\n * @param {EncodedExpression} encoded The encoded expression.\n * @param {ValueType} expectedType The expected type.\n * @param {ParsingContext} context The parsing context.\n * @return {Expression} The parsed expression result.\n */\nexport function parse(encoded, expectedType, context) {\n  switch (typeof encoded) {\n    case 'boolean': {\n      if (isType(expectedType, StringType)) {\n        return new LiteralExpression(StringType, encoded ? 'true' : 'false');\n      }\n      if (!includesType(expectedType, BooleanType)) {\n        throw new Error(\n          `got a boolean, but expected ${typeName(expectedType)}`,\n        );\n      }\n      return new LiteralExpression(BooleanType, encoded);\n    }\n    case 'number': {\n      if (isType(expectedType, SizeType)) {\n        return new LiteralExpression(SizeType, toSize(encoded));\n      }\n      if (isType(expectedType, BooleanType)) {\n        return new LiteralExpression(BooleanType, !!encoded);\n      }\n      if (isType(expectedType, StringType)) {\n        return new LiteralExpression(StringType, encoded.toString());\n      }\n      if (!includesType(expectedType, NumberType)) {\n        throw new Error(`got a number, but expected ${typeName(expectedType)}`);\n      }\n      return new LiteralExpression(NumberType, encoded);\n    }\n    case 'string': {\n      if (isType(expectedType, ColorType)) {\n        return new LiteralExpression(ColorType, colorFromString(encoded));\n      }\n      if (isType(expectedType, BooleanType)) {\n        return new LiteralExpression(BooleanType, !!encoded);\n      }\n      if (!includesType(expectedType, StringType)) {\n        throw new Error(`got a string, but expected ${typeName(expectedType)}`);\n      }\n      return new LiteralExpression(StringType, encoded);\n    }\n    default: {\n      // pass\n    }\n  }\n\n  if (!Array.isArray(encoded)) {\n    throw new Error('expression must be an array or a primitive value');\n  }\n\n  if (encoded.length === 0) {\n    throw new Error('empty expression');\n  }\n\n  if (typeof encoded[0] === 'string') {\n    return parseCallExpression(encoded, expectedType, context);\n  }\n\n  for (const item of encoded) {\n    if (typeof item !== 'number') {\n      throw new Error('expected an array of numbers');\n    }\n  }\n\n  if (isType(expectedType, SizeType)) {\n    if (encoded.length !== 2) {\n      throw new Error(\n        `expected an array of two values for a size, got ${encoded.length}`,\n      );\n    }\n    return new LiteralExpression(SizeType, encoded);\n  }\n\n  if (isType(expectedType, ColorType)) {\n    if (encoded.length === 3) {\n      return new LiteralExpression(ColorType, [...encoded, 1]);\n    }\n    if (encoded.length === 4) {\n      return new LiteralExpression(ColorType, encoded);\n    }\n    throw new Error(\n      `expected an array of 3 or 4 values for a color, got ${encoded.length}`,\n    );\n  }\n\n  if (!includesType(expectedType, NumberArrayType)) {\n    throw new Error(\n      `got an array of numbers, but expected ${typeName(expectedType)}`,\n    );\n  }\n\n  return new LiteralExpression(NumberArrayType, encoded);\n}\n\n/**\n * @type {Object<string, string>}\n */\nexport const Ops = {\n  Get: 'get',\n  Var: 'var',\n  Concat: 'concat',\n  GeometryType: 'geometry-type',\n  LineMetric: 'line-metric',\n  Any: 'any',\n  All: 'all',\n  Not: '!',\n  Resolution: 'resolution',\n  Zoom: 'zoom',\n  Time: 'time',\n  Equal: '==',\n  NotEqual: '!=',\n  GreaterThan: '>',\n  GreaterThanOrEqualTo: '>=',\n  LessThan: '<',\n  LessThanOrEqualTo: '<=',\n  Multiply: '*',\n  Divide: '/',\n  Add: '+',\n  Subtract: '-',\n  Clamp: 'clamp',\n  Mod: '%',\n  Pow: '^',\n  Abs: 'abs',\n  Floor: 'floor',\n  Ceil: 'ceil',\n  Round: 'round',\n  Sin: 'sin',\n  Cos: 'cos',\n  Atan: 'atan',\n  Sqrt: 'sqrt',\n  Match: 'match',\n  Between: 'between',\n  Interpolate: 'interpolate',\n  Coalesce: 'coalesce',\n  Case: 'case',\n  In: 'in',\n  Number: 'number',\n  String: 'string',\n  Array: 'array',\n  Color: 'color',\n  Id: 'id',\n  Band: 'band',\n  Palette: 'palette',\n  ToString: 'to-string',\n  Has: 'has',\n};\n\n/**\n * @typedef {function(Array, number, ParsingContext):Expression} Parser\n *\n * Second argument is the expected type.\n */\n\n/**\n * @type {Object<string, Parser>}\n */\nconst parsers = {\n  [Ops.Get]: createCallExpressionParser(hasArgsCount(1, Infinity), withGetArgs),\n  [Ops.Var]: createVarExpressionParser(),\n  [Ops.Has]: createCallExpressionParser(hasArgsCount(1, Infinity), withGetArgs),\n  [Ops.Id]: createCallExpressionParser(usesFeatureId, withNoArgs),\n  [Ops.Concat]: createCallExpressionParser(\n    hasArgsCount(2, Infinity),\n    withArgsOfType(StringType),\n  ),\n  [Ops.GeometryType]: createCallExpressionParser(usesGeometryType, withNoArgs),\n  [Ops.LineMetric]: createCallExpressionParser(usesMCoordinate, withNoArgs),\n  [Ops.Resolution]: createCallExpressionParser(usesMapState, withNoArgs),\n  [Ops.Zoom]: createCallExpressionParser(usesMapState, withNoArgs),\n  [Ops.Time]: createCallExpressionParser(usesMapState, withNoArgs),\n  [Ops.Any]: createCallExpressionParser(\n    hasArgsCount(2, Infinity),\n    withArgsOfType(BooleanType),\n  ),\n  [Ops.All]: createCallExpressionParser(\n    hasArgsCount(2, Infinity),\n    withArgsOfType(BooleanType),\n  ),\n  [Ops.Not]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(BooleanType),\n  ),\n  [Ops.Equal]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfIdenticalType(),\n  ),\n  [Ops.NotEqual]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfIdenticalType(),\n  ),\n  [Ops.GreaterThan]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.GreaterThanOrEqualTo]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.LessThan]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.LessThanOrEqualTo]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Multiply]: createCallExpressionParser(\n    hasArgsCount(2, Infinity),\n    withArgsOfReturnType,\n  ),\n  [Ops.Coalesce]: createCallExpressionParser(\n    hasArgsCount(2, Infinity),\n    withArgsOfReturnType,\n  ),\n  [Ops.Divide]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Add]: createCallExpressionParser(\n    hasArgsCount(2, Infinity),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Subtract]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Clamp]: createCallExpressionParser(\n    hasArgsCount(3, 3),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Mod]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Pow]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Abs]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Floor]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Ceil]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Round]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Sin]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Cos]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Atan]: createCallExpressionParser(\n    hasArgsCount(1, 2),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Sqrt]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Match]: createCallExpressionParser(\n    hasArgsCount(4, Infinity),\n    hasEvenArgs,\n    withMatchArgs,\n  ),\n  [Ops.Between]: createCallExpressionParser(\n    hasArgsCount(3, 3),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Interpolate]: createCallExpressionParser(\n    hasArgsCount(6, Infinity),\n    hasEvenArgs,\n    withInterpolateArgs,\n  ),\n  [Ops.Case]: createCallExpressionParser(\n    hasArgsCount(3, Infinity),\n    hasOddArgs,\n    withCaseArgs,\n  ),\n  [Ops.In]: createCallExpressionParser(hasArgsCount(2, 2), withInArgs),\n  [Ops.Number]: createCallExpressionParser(\n    hasArgsCount(1, Infinity),\n    withArgsOfType(AnyType),\n  ),\n  [Ops.String]: createCallExpressionParser(\n    hasArgsCount(1, Infinity),\n    withArgsOfType(AnyType),\n  ),\n  [Ops.Array]: createCallExpressionParser(\n    hasArgsCount(1, Infinity),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Color]: createCallExpressionParser(\n    hasArgsCount(1, 4),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Band]: createCallExpressionParser(\n    hasArgsCount(1, 3),\n    withArgsOfType(NumberType),\n  ),\n  [Ops.Palette]: createCallExpressionParser(\n    hasArgsCount(2, 2),\n    withPaletteArgs,\n  ),\n  [Ops.ToString]: createCallExpressionParser(\n    hasArgsCount(1, 1),\n    withArgsOfType(BooleanType | NumberType | StringType | ColorType),\n  ),\n};\n\n/**\n * @typedef {function(Array<EncodedExpression>, ValueType, ParsingContext):Array<Expression>|void} ArgValidator\n *\n * An argument validator applies various checks to an encoded expression arguments and\n * returns the parsed arguments if any.  The second argument is the return type of the call expression.\n */\n\n/**\n * @type {ArgValidator}\n */\nfunction withGetArgs(encoded, returnType, context) {\n  const argsCount = encoded.length - 1;\n  const args = new Array(argsCount);\n  for (let i = 0; i < argsCount; ++i) {\n    const key = encoded[i + 1];\n    switch (typeof key) {\n      case 'number': {\n        args[i] = new LiteralExpression(NumberType, key);\n        break;\n      }\n      case 'string': {\n        args[i] = new LiteralExpression(StringType, key);\n        break;\n      }\n      default: {\n        throw new Error(\n          `expected a string key or numeric array index for a get operation, got ${key}`,\n        );\n      }\n    }\n    if (i === 0) {\n      context.properties.set(String(key), returnType);\n    }\n  }\n  return args;\n}\n\n/**\n * This special expression parser reads style variables present in the context to narrow down\n * the expected return type of the 'var' operator\n * @return {Parser} The parser.\n */\nfunction createVarExpressionParser() {\n  return function (encoded, returnType, context) {\n    const name = encoded[1];\n    if (typeof name !== 'string') {\n      throw new Error('expected a string argument for var operation');\n    }\n    let type = returnType;\n\n    const variableValue = context.inputVariables?.[name];\n    if (variableValue !== undefined) {\n      const parsedInput = parse(variableValue, AnyType, context);\n      if (!(parsedInput instanceof LiteralExpression)) {\n        throw new Error(\n          `style variables should only be literal values (no expressions!), variable name: ${name}`,\n        );\n      }\n      let parsedType = parsedInput.type;\n\n      // special cases (because variables are not embedded in expressions and as such are harder to figure out their types)\n      // * if the variable is a string (e.g. 'blue') and we know that the expected type is not\n      //   StringType but ColorType, assume that the variable is indeed a color and not a string\n      // * if the variable is 2-elements a number array and we know that the expected type is SizeType\n      //   and not NumberArrayType, assume that the variable is indeed a size\n      if (\n        typeof variableValue === 'string' &&\n        overlapsType(type, ColorType) &&\n        !overlapsType(type, StringType)\n      ) {\n        parsedType = ColorType;\n      } else if (\n        Array.isArray(variableValue) &&\n        variableValue.length === 2 &&\n        overlapsType(type, SizeType) &&\n        !overlapsType(type, NumberArrayType)\n      ) {\n        parsedType = SizeType;\n      }\n\n      type &= parsedType;\n      if (type === NoneType) {\n        throw new Error(\n          `the type expected from the var operator (${typeName(returnType)}) did not have any overlap with the type of the corresponding style variables (${typeName(parsedType)}), variable name: ${name}`,\n        );\n      }\n    }\n\n    if (context.variables.has(name)) {\n      const existingType = context.variables.get(name);\n      type &= existingType;\n      if (type === NoneType) {\n        throw new Error(\n          `a new type expected from the var operator (${typeName(returnType)}) did not have any overlap with the previous type expected for it (${typeName(existingType)}), variable name: ${name}`,\n        );\n      }\n    }\n\n    context.variables.set(name, type);\n\n    return new CallExpression(\n      type,\n      'var',\n      new LiteralExpression(StringType, name),\n    );\n  };\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction usesFeatureId(encoded, returnType, context) {\n  context.featureId = true;\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction usesGeometryType(encoded, returnType, context) {\n  context.geometryType = true;\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction usesMCoordinate(encoded, returnType, context) {\n  context.mCoordinate = true;\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction usesMapState(encoded, returnType, context) {\n  context.mapState = true;\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withNoArgs(encoded, returnType, context) {\n  const operation = encoded[0];\n  if (encoded.length !== 1) {\n    throw new Error(`expected no arguments for ${operation} operation`);\n  }\n  return [];\n}\n\n/**\n * @param {number} minArgs The minimum number of arguments.\n * @param {number} maxArgs The maximum number of arguments.\n * @return {ArgValidator} The argument validator\n */\nfunction hasArgsCount(minArgs, maxArgs) {\n  return function (encoded, returnType, context) {\n    const operation = encoded[0];\n    const argCount = encoded.length - 1;\n    if (minArgs === maxArgs) {\n      if (argCount !== minArgs) {\n        const plural = minArgs === 1 ? '' : 's';\n        throw new Error(\n          `expected ${minArgs} argument${plural} for ${operation}, got ${argCount}`,\n        );\n      }\n    } else if (argCount < minArgs || argCount > maxArgs) {\n      const range =\n        maxArgs === Infinity\n          ? `${minArgs} or more`\n          : `${minArgs} to ${maxArgs}`;\n      throw new Error(\n        `expected ${range} arguments for ${operation}, got ${argCount}`,\n      );\n    }\n  };\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withArgsOfReturnType(encoded, returnType, context) {\n  const argCount = encoded.length - 1;\n  /**\n   * @type {Array<Expression>}\n   */\n  const args = new Array(argCount);\n  for (let i = 0; i < argCount; ++i) {\n    const expression = parse(encoded[i + 1], returnType, context);\n    args[i] = expression;\n  }\n  return args;\n}\n\n/**\n * @param {ValueType} argType The argument type.\n * @return {ArgValidator} The argument validator\n */\nfunction withArgsOfType(argType) {\n  return function (encoded, returnType, context) {\n    const argCount = encoded.length - 1;\n    /**\n     * @type {Array<Expression>}\n     */\n    const args = new Array(argCount);\n    for (let i = 0; i < argCount; ++i) {\n      const expression = parse(encoded[i + 1], argType, context);\n      args[i] = expression;\n    }\n    return args;\n  };\n}\n\n/**\n * @return {ArgValidator} The argument validator\n */\nfunction withArgsOfIdenticalType() {\n  return function (encoded, returnType, context) {\n    const operation = encoded[0];\n    const argCount = encoded.length - 1;\n    /**\n     * @type {Array<Expression>}\n     */\n    const args = new Array(argCount);\n    let commonType = AnyType;\n    for (let i = 0; i < argCount; ++i) {\n      const expression = parse(encoded[i + 1], commonType, context);\n      commonType &= expression.type;\n    }\n    if (commonType === NoneType) {\n      throw new Error(\n        `no common type was found among the arguments of ${operation}`,\n      );\n    }\n    // second loop to compile actual args\n    for (let i = 0; i < argCount; ++i) {\n      const expression = parse(encoded[i + 1], commonType, context);\n      args[i] = expression;\n    }\n    return args;\n  };\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction hasOddArgs(encoded, returnType, context) {\n  const operation = encoded[0];\n  const argCount = encoded.length - 1;\n  if (argCount % 2 === 0) {\n    throw new Error(\n      `expected an odd number of arguments for ${operation}, got ${argCount} instead`,\n    );\n  }\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction hasEvenArgs(encoded, returnType, context) {\n  const operation = encoded[0];\n  const argCount = encoded.length - 1;\n  if (argCount % 2 === 1) {\n    throw new Error(\n      `expected an even number of arguments for operation ${operation}, got ${argCount} instead`,\n    );\n  }\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withMatchArgs(encoded, returnType, context) {\n  const argsCount = encoded.length - 1;\n\n  const fallback = parse(encoded[encoded.length - 1], returnType, context);\n\n  let inputType = StringType | NumberType | BooleanType;\n  const args = new Array(argsCount - 2);\n\n  // first round to determine input type\n  for (let i = 0; i < argsCount - 2; i += 2) {\n    try {\n      const match = parse(encoded[i + 2], inputType, context);\n      inputType &= match.type;\n    } catch (err) {\n      throw new Error(\n        `failed to parse argument ${i + 1} of match expression: ${err.message}`,\n      );\n    }\n    if (inputType === NoneType) {\n      throw new Error(\n        `no common type was found among the arguments of match expression`,\n      );\n    }\n  }\n\n  for (let i = 0; i < argsCount - 2; i += 2) {\n    try {\n      const match = parse(encoded[i + 2], inputType, context);\n      args[i] = match;\n    } catch (err) {\n      throw new Error(\n        `failed to parse argument ${i + 1} of match expression: ${err.message}`,\n      );\n    }\n    try {\n      const output = parse(encoded[i + 3], fallback.type, context);\n      args[i + 1] = output;\n    } catch (err) {\n      throw new Error(\n        `failed to parse argument ${i + 2} of match expression: ${err.message}`,\n      );\n    }\n  }\n\n  const input = parse(encoded[1], inputType, context);\n\n  return [input, ...args, fallback];\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withInterpolateArgs(encoded, returnType, context) {\n  const interpolationType = encoded[1];\n  /**\n   * @type {number}\n   */\n  let base;\n  switch (interpolationType[0]) {\n    case 'linear':\n      base = 1;\n      break;\n    case 'exponential':\n      const b = interpolationType[1];\n      if (typeof b !== 'number' || b <= 0) {\n        throw new Error(\n          `expected a number base for exponential interpolation` +\n            `, got ${JSON.stringify(b)} instead`,\n        );\n      }\n      base = b;\n      break;\n    default:\n      throw new Error(\n        `invalid interpolation type: ${JSON.stringify(interpolationType)}`,\n      );\n  }\n\n  const interpolation = new LiteralExpression(NumberType, base);\n\n  let input;\n  try {\n    input = parse(encoded[2], NumberType, context);\n  } catch (err) {\n    throw new Error(\n      `failed to parse argument 1 in interpolate expression: ${err.message}`,\n    );\n  }\n\n  const args = new Array(encoded.length - 3);\n  for (let i = 0; i < args.length; i += 2) {\n    try {\n      const stop = parse(encoded[i + 3], NumberType, context);\n      args[i] = stop;\n    } catch (err) {\n      throw new Error(\n        `failed to parse argument ${i + 2} for interpolate expression: ${err.message}`,\n      );\n    }\n    try {\n      const output = parse(encoded[i + 4], returnType, context);\n      args[i + 1] = output;\n    } catch (err) {\n      throw new Error(\n        `failed to parse argument ${i + 3} for interpolate expression: ${err.message}`,\n      );\n    }\n  }\n\n  return [interpolation, input, ...args];\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withCaseArgs(encoded, returnType, context) {\n  const fallback = parse(encoded[encoded.length - 1], returnType, context);\n\n  const args = new Array(encoded.length - 1);\n  for (let i = 0; i < args.length - 1; i += 2) {\n    try {\n      const condition = parse(encoded[i + 1], BooleanType, context);\n      args[i] = condition;\n    } catch (err) {\n      throw new Error(\n        `failed to parse argument ${i} of case expression: ${err.message}`,\n      );\n    }\n    try {\n      const output = parse(encoded[i + 2], fallback.type, context);\n      args[i + 1] = output;\n    } catch (err) {\n      throw new Error(\n        `failed to parse argument ${i + 1} of case expression: ${err.message}`,\n      );\n    }\n  }\n\n  args[args.length - 1] = fallback;\n  return args;\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withInArgs(encoded, returnType, context) {\n  let haystack = encoded[2];\n  if (!Array.isArray(haystack)) {\n    throw new Error(\n      `the second argument for the \"in\" operator must be an array`,\n    );\n  }\n  /**\n   * @type {ValueType}\n   */\n  let needleType;\n\n  // check if we're using the 'literal' operator for the haystack\n  if (haystack[0] === 'literal') {\n    haystack = haystack[1];\n    if (!Array.isArray(haystack)) {\n      throw new Error(\n        `failed to parse \"in\" expression: the literal operator must be followed by an array`,\n      );\n    }\n  } else if (typeof haystack[0] === 'string') {\n    throw new Error(\n      `for the \"in\" operator, a string array should be wrapped in a \"literal\" operator to disambiguate from expressions`,\n    );\n  }\n\n  if (typeof haystack[0] === 'string') {\n    needleType = StringType;\n  } else {\n    needleType = NumberType;\n  }\n\n  const args = new Array(haystack.length);\n  for (let i = 0; i < args.length; i++) {\n    try {\n      const arg = parse(haystack[i], needleType, context);\n      args[i] = arg;\n    } catch (err) {\n      throw new Error(\n        `failed to parse haystack item ${i} for \"in\" expression: ${err.message}`,\n      );\n    }\n  }\n\n  const needle = parse(encoded[1], needleType, context);\n  return [needle, ...args];\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withPaletteArgs(encoded, returnType, context) {\n  let index;\n  try {\n    index = parse(encoded[1], NumberType, context);\n  } catch (err) {\n    throw new Error(\n      `failed to parse first argument in palette expression: ${err.message}`,\n    );\n  }\n  const colors = encoded[2];\n  if (!Array.isArray(colors)) {\n    throw new Error('the second argument of palette must be an array');\n  }\n  const parsedColors = new Array(colors.length);\n  for (let i = 0; i < parsedColors.length; i++) {\n    let color;\n    try {\n      color = parse(colors[i], ColorType, context);\n    } catch (err) {\n      throw new Error(\n        `failed to parse color at index ${i} in palette expression: ${err.message}`,\n      );\n    }\n    if (!(color instanceof LiteralExpression)) {\n      throw new Error(\n        `the palette color at index ${i} must be a literal value`,\n      );\n    }\n    parsedColors[i] = color;\n  }\n  return [index, ...parsedColors];\n}\n\n/**\n * @param {Array<ArgValidator>} validators A chain of argument validators.  The last validator is expected\n * to return the parsed arguments.\n * @return {Parser} The parser.\n */\nfunction createCallExpressionParser(...validators) {\n  return function (encoded, returnType, context) {\n    const operator = encoded[0];\n\n    /**\n     * @type {Array<Expression>}\n     */\n    let args;\n    for (let i = 0; i < validators.length; i++) {\n      const parsed = validators[i](encoded, returnType, context);\n      if (i == validators.length - 1) {\n        if (!parsed) {\n          throw new Error(\n            'expected last argument validator to return the parsed args',\n          );\n        }\n        args = parsed;\n      }\n    }\n    return new CallExpression(returnType, operator, ...args);\n  };\n}\n\n/**\n * @param {Array} encoded The encoded expression.\n * @param {ValueType} returnType The expected return type of the call expression.\n * @param {ParsingContext} context The parsing context.\n * @return {Expression} The parsed expression.\n */\nfunction parseCallExpression(encoded, returnType, context) {\n  const operator = encoded[0];\n\n  const parser = parsers[operator];\n  if (!parser) {\n    throw new Error(`unknown operator: ${operator}`);\n  }\n  return parser(encoded, returnType, context);\n}\n\n/**\n * Returns a simplified geometry type suited for the `geometry-type` operator\n * @param {import('../geom/Geometry.js').default|import('../render/Feature.js').default} geometry Geometry object\n * @return {'Point'|'LineString'|'Polygon'|''} Simplified geometry type; empty string of no geometry found\n */\nexport function computeGeometryType(geometry) {\n  if (!geometry) {\n    return '';\n  }\n  const type = geometry.getType();\n  switch (type) {\n    case 'Point':\n    case 'LineString':\n    case 'Polygon':\n      return type;\n    case 'MultiPoint':\n    case 'MultiLineString':\n    case 'MultiPolygon':\n      return /** @type {'Point'|'LineString'|'Polygon'} */ (type.substring(5));\n    case 'Circle':\n      return 'Polygon';\n    case 'GeometryCollection':\n      return computeGeometryType(\n        /** @type {import(\"../geom/GeometryCollection.js\").default} */ (\n          geometry\n        ).getGeometries()[0],\n      );\n    default:\n      return '';\n  }\n}\n","/**\n * @module ol/webgl/PaletteTexture\n */\n\nclass PaletteTexture {\n  /**\n   * @param {string} name The name of the texture.\n   * @param {Uint8Array} data The texture data.\n   */\n  constructor(name, data) {\n    this.name = name;\n    this.data = data;\n\n    /**\n     * @type {WebGLTexture|null}\n     * @private\n     */\n    this.texture_ = null;\n  }\n\n  /**\n   * @param {WebGLRenderingContext} gl Rendering context.\n   * @return {WebGLTexture} The texture.\n   */\n  getTexture(gl) {\n    if (!this.texture_) {\n      const texture = gl.createTexture();\n      gl.bindTexture(gl.TEXTURE_2D, texture);\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.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.RGBA,\n        this.data.length / 4,\n        1,\n        0,\n        gl.RGBA,\n        gl.UNSIGNED_BYTE,\n        this.data,\n      );\n      this.texture_ = texture;\n    }\n    return this.texture_;\n  }\n\n  /**\n   * @param {WebGLRenderingContext} gl Rendering context.\n   */\n  delete(gl) {\n    if (this.texture_) {\n      gl.deleteTexture(this.texture_);\n    }\n    this.texture_ = null;\n  }\n}\n\nexport default PaletteTexture;\n","/**\n * @module ol/expr/gpu\n */\nimport {asArray} from '../color.js';\nimport {Uniforms} from '../renderer/webgl/TileLayer.js';\nimport {toSize} from '../size.js';\nimport PaletteTexture from '../webgl/PaletteTexture.js';\nimport {\n  BooleanType,\n  CallExpression,\n  ColorType,\n  isType,\n  NumberArrayType,\n  NumberType,\n  Ops,\n  parse,\n  SizeType,\n  StringType,\n  typeName,\n} from './expression.js';\n\n/**\n * @typedef {import('./expression.js').ValueType} ValueType\n */\n\n/**\n * @param {string} operator Operator\n * @param {CompilationContext} context Compilation context\n * @return {string} A function name based on the operator, unique in the given context\n */\nfunction computeOperatorFunctionName(operator, context) {\n  return `operator_${operator}_${Object.keys(context.functions).length}`;\n}\n\n/**\n * Will return the number as a float with a dot separator, which is required by GLSL.\n * @param {number} v Numerical value.\n * @return {string} The value as string.\n */\nexport function numberToGlsl(v) {\n  const s = v.toString();\n  return s.includes('.') ? s : s + '.0';\n}\n\n/**\n * Will return the number array as a float with a dot separator, concatenated with ', '.\n * @param {Array<number>} array Numerical values array.\n * @return {string} The array as a vector, e. g.: `vec3(1.0, 2.0, 3.0)`.\n */\nexport function arrayToGlsl(array) {\n  if (array.length < 2 || array.length > 4) {\n    throw new Error(\n      '`formatArray` can only output `vec2`, `vec3` or `vec4` arrays.',\n    );\n  }\n  return `vec${array.length}(${array.map(numberToGlsl).join(', ')})`;\n}\n\n/**\n * Will normalize and converts to string a `vec4` color array compatible with GLSL.\n * @param {string|import(\"../color.js\").Color} color Color either in string format or [r, g, b, a] array format,\n * with RGB components in the 0..255 range and the alpha component in the 0..1 range.\n * Note that the final array will always have 4 components.\n * @return {string} The color expressed in the `vec4(1.0, 1.0, 1.0, 1.0)` form.\n */\nexport function colorToGlsl(color) {\n  const array = asArray(color);\n  const alpha = array.length > 3 ? array[3] : 1;\n  return arrayToGlsl([array[0] / 255, array[1] / 255, array[2] / 255, alpha]);\n}\n\n/**\n * Normalizes and converts a number or array toa `vec2` array compatible with GLSL.\n * @param {number|import('../size.js').Size} size Size.\n * @return {string} The color expressed in the `vec4(1.0, 1.0, 1.0, 1.0)` form.\n */\nexport function sizeToGlsl(size) {\n  const array = toSize(size);\n  return arrayToGlsl(array);\n}\n\n/** @type {Object<string, number>} */\nconst stringToFloatMap = {};\nlet stringToFloatCounter = 0;\n\n/**\n * Returns a stable equivalent number for the string literal.\n * @param {string} string String literal value\n * @return {number} Number equivalent\n */\nexport function getStringNumberEquivalent(string) {\n  if (!(string in stringToFloatMap)) {\n    stringToFloatMap[string] = stringToFloatCounter++;\n  }\n  return stringToFloatMap[string];\n}\n\n/**\n * Returns a stable equivalent number for the string literal, for use in shaders. This number is then\n * converted to be a GLSL-compatible string.\n * Note: with a float precision of `mediump`, the amount of unique strings supported is 16,777,216\n * @param {string} string String literal value\n * @return {string} GLSL-compatible string containing a number\n */\nexport function stringToGlsl(string) {\n  return numberToGlsl(getStringNumberEquivalent(string));\n}\n\n/**\n * Get the uniform name given a variable name.\n * @param {string} variableName The variable name.\n * @return {string} The uniform name.\n */\nexport function uniformNameForVariable(variableName) {\n  return 'u_var_' + variableName;\n}\n\n/**\n * @typedef {import('./expression.js').ParsingContext} ParsingContext\n */\n/**\n *\n * @typedef {import(\"./expression.js\").Expression} Expression\n */\n/**\n *\n * @typedef {import(\"./expression.js\").LiteralExpression} LiteralExpression\n */\n\n/**\n * @typedef {Object} CompilationContext\n * @property {Map<string, ValueType>} variables Variables and their types (transferred from the parsing context)\n * @property {Map<string, ValueType>} properties Properties and their types (transferred from the parsing context)\n * @property {Object<string, string>} functions Lookup of functions used by the style.\n * @property {number} [bandCount] Number of bands per pixel.\n * @property {Array<PaletteTexture>} [paletteTextures] List of palettes used by the style.\n * @property {boolean} featureId Whether the feature ID is used in the expression\n * @property {boolean} geometryType Whether the geometry type is used in the expression\n * @property {import('../style/flat.js').StyleVariables} [inputVariables] Variable values (i.e. style variables) given as input during parsing to help with type narrowing\n */\n\n/**\n * @param {import('../style/flat.js').StyleVariables} [inputVariables] Variable values (i.e. style variables) given as input during parsing to help with type narrowing\n * @return {CompilationContext} A new compilation context.\n */\nexport function newCompilationContext(inputVariables) {\n  return {\n    variables: new Map(),\n    properties: new Map(),\n    functions: {},\n    bandCount: 0,\n    featureId: false,\n    geometryType: false,\n    inputVariables,\n  };\n}\n\nconst GET_BAND_VALUE_FUNC = 'getBandValue';\n\nexport const PALETTE_TEXTURE_ARRAY = 'u_paletteTextures';\n\nexport const FEATURE_ID_PROPERTY_NAME = 'featureId';\nexport const GEOMETRY_TYPE_PROPERTY_NAME = 'geometryType';\n\n/**\n * The value `-9999999` will be used to indicate that a property on a feature is not defined, similar to a \"no data\" value.\n */\nexport const UNDEFINED_PROP_VALUE = -9999999;\n\n/**\n * @typedef {string} CompiledExpression\n */\n\n/**\n * @typedef {function(CompilationContext, CallExpression, number): string} Compiler\n * Third argument is the expected value types\n */\n\n/**\n * @param {import('./expression.js').EncodedExpression} encoded The encoded expression.\n * @param {number} type The expected type.\n * @param {import('./expression.js').ParsingContext} parsingContext The parsing context.\n * @param {CompilationContext} compilationContext An existing compilation context\n * @return {CompiledExpression} The compiled expression.\n */\nexport function buildExpression(\n  encoded,\n  type,\n  parsingContext,\n  compilationContext,\n) {\n  const expression = parse(encoded, type, parsingContext);\n  // add collected variables and properties to the compilation context\n  compilationContext.properties = new Map([\n    ...compilationContext.properties,\n    ...parsingContext.properties,\n  ]);\n  compilationContext.variables = new Map([\n    ...compilationContext.variables,\n    ...parsingContext.variables,\n  ]);\n  return compile(expression, type, compilationContext);\n}\n\n/**\n * @param {function(Array<CompiledExpression>, CompilationContext): string} output Function that takes in parsed arguments and returns a string\n * @return {function(CompilationContext, import(\"./expression.js\").CallExpression, number): string} Compiler for the call expression\n */\nfunction createCompiler(output) {\n  return (context, expression, type) => {\n    const length = expression.args.length;\n    const args = new Array(length);\n    for (let i = 0; i < length; ++i) {\n      args[i] = compile(expression.args[i], type, context);\n    }\n    return output(args, context);\n  };\n}\n\n/**\n * @type {Object<string, Compiler>}\n */\nconst compilers = {\n  [Ops.Get]: (context, expression) => {\n    const firstArg = /** @type {LiteralExpression} */ (expression.args[0]);\n    const propName = /** @type {string} */ (firstArg.value);\n    let result = 'a_prop_' + propName;\n    if (isType(expression.type, BooleanType)) {\n      result = `(${result} > 0.0)`;\n    }\n    return result;\n  },\n  [Ops.Id]: (context) => {\n    context.featureId = true;\n    return 'a_' + FEATURE_ID_PROPERTY_NAME;\n  },\n  [Ops.GeometryType]: (context) => {\n    context.geometryType = true;\n    return 'a_' + GEOMETRY_TYPE_PROPERTY_NAME;\n  },\n  [Ops.LineMetric]: () => 'currentLineMetric', // this variable is assumed to always be present in shaders, default is 0.\n  [Ops.Var]: (context, expression) => {\n    const firstArg = /** @type {LiteralExpression} */ (expression.args[0]);\n    const varName = /** @type {string} */ (firstArg.value);\n    let result = uniformNameForVariable(varName);\n    if (isType(expression.type, BooleanType)) {\n      result = `(${result} > 0.0)`;\n    }\n    return result;\n  },\n  [Ops.Has]: (context, expression) => {\n    const firstArg = /** @type {LiteralExpression} */ (expression.args[0]);\n    const propName = /** @type {string} */ (firstArg.value);\n    return `(a_prop_${propName} != ${numberToGlsl(UNDEFINED_PROP_VALUE)})`;\n  },\n  [Ops.Resolution]: () => 'u_resolution',\n  [Ops.Zoom]: () => 'u_zoom',\n  [Ops.Time]: () => 'u_time',\n  [Ops.Any]: createCompiler((compiledArgs) => `(${compiledArgs.join(` || `)})`),\n  [Ops.All]: createCompiler((compiledArgs) => `(${compiledArgs.join(` && `)})`),\n  [Ops.Not]: createCompiler(([value]) => `(!${value})`),\n  [Ops.Equal]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} == ${secondValue})`,\n  ),\n  [Ops.NotEqual]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} != ${secondValue})`,\n  ),\n  [Ops.GreaterThan]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} > ${secondValue})`,\n  ),\n  [Ops.GreaterThanOrEqualTo]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} >= ${secondValue})`,\n  ),\n  [Ops.LessThan]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} < ${secondValue})`,\n  ),\n  [Ops.LessThanOrEqualTo]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} <= ${secondValue})`,\n  ),\n  [Ops.Multiply]: createCompiler(\n    (compiledArgs) => `(${compiledArgs.join(' * ')})`,\n  ),\n  [Ops.Divide]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} / ${secondValue})`,\n  ),\n  [Ops.Add]: createCompiler((compiledArgs) => `(${compiledArgs.join(' + ')})`),\n  [Ops.Subtract]: createCompiler(\n    ([firstValue, secondValue]) => `(${firstValue} - ${secondValue})`,\n  ),\n  [Ops.Clamp]: createCompiler(\n    ([value, min, max]) => `clamp(${value}, ${min}, ${max})`,\n  ),\n  [Ops.Mod]: createCompiler(([value, modulo]) => `mod(${value}, ${modulo})`),\n  [Ops.Pow]: createCompiler(([value, power]) => `pow(${value}, ${power})`),\n  [Ops.Abs]: createCompiler(([value]) => `abs(${value})`),\n  [Ops.Floor]: createCompiler(([value]) => `floor(${value})`),\n  [Ops.Ceil]: createCompiler(([value]) => `ceil(${value})`),\n  [Ops.Round]: createCompiler(([value]) => `floor(${value} + 0.5)`),\n  [Ops.Sin]: createCompiler(([value]) => `sin(${value})`),\n  [Ops.Cos]: createCompiler(([value]) => `cos(${value})`),\n  [Ops.Atan]: createCompiler(([firstValue, secondValue]) => {\n    return secondValue !== undefined\n      ? `atan(${firstValue}, ${secondValue})`\n      : `atan(${firstValue})`;\n  }),\n  [Ops.Sqrt]: createCompiler(([value]) => `sqrt(${value})`),\n  [Ops.Match]: createCompiler((compiledArgs) => {\n    const input = compiledArgs[0];\n    const fallback = compiledArgs[compiledArgs.length - 1];\n    let result = null;\n    for (let i = compiledArgs.length - 3; i >= 1; i -= 2) {\n      const match = compiledArgs[i];\n      const output = compiledArgs[i + 1];\n      result = `(${input} == ${match} ? ${output} : ${result || fallback})`;\n    }\n    return result;\n  }),\n  [Ops.Between]: createCompiler(\n    ([value, min, max]) => `(${value} >= ${min} && ${value} <= ${max})`,\n  ),\n  [Ops.Interpolate]: createCompiler(([exponent, input, ...compiledArgs]) => {\n    let result = '';\n    for (let i = 0; i < compiledArgs.length - 2; i += 2) {\n      const stop1 = compiledArgs[i];\n      const output1 = result || compiledArgs[i + 1];\n      const stop2 = compiledArgs[i + 2];\n      const output2 = compiledArgs[i + 3];\n      let ratio;\n      if (exponent === numberToGlsl(1)) {\n        ratio = `(${input} - ${stop1}) / (${stop2} - ${stop1})`;\n      } else {\n        ratio = `(pow(${exponent}, (${input} - ${stop1})) - 1.0) / (pow(${exponent}, (${stop2} - ${stop1})) - 1.0)`;\n      }\n      result = `mix(${output1}, ${output2}, clamp(${ratio}, 0.0, 1.0))`;\n    }\n    return result;\n  }),\n  [Ops.Case]: createCompiler((compiledArgs) => {\n    const fallback = compiledArgs[compiledArgs.length - 1];\n    let result = null;\n    for (let i = compiledArgs.length - 3; i >= 0; i -= 2) {\n      const condition = compiledArgs[i];\n      const output = compiledArgs[i + 1];\n      result = `(${condition} ? ${output} : ${result || fallback})`;\n    }\n    return result;\n  }),\n  [Ops.In]: createCompiler(([needle, ...haystack], context) => {\n    const funcName = computeOperatorFunctionName('in', context);\n    const tests = [];\n    for (let i = 0; i < haystack.length; i += 1) {\n      tests.push(`  if (inputValue == ${haystack[i]}) { return true; }`);\n    }\n    context.functions[funcName] = `bool ${funcName}(float inputValue) {\n${tests.join('\\n')}\n  return false;\n}`;\n    return `${funcName}(${needle})`;\n  }),\n  [Ops.Array]: createCompiler(\n    (args) => `vec${args.length}(${args.join(', ')})`,\n  ),\n  [Ops.Color]: createCompiler((compiledArgs) => {\n    if (compiledArgs.length === 1) {\n      //grayscale\n      return `vec4(vec3(${compiledArgs[0]} / 255.0), 1.0)`;\n    }\n    if (compiledArgs.length === 2) {\n      //grayscale with alpha\n      return `vec4(vec3(${compiledArgs[0]} / 255.0), ${compiledArgs[1]})`;\n    }\n    const rgb = compiledArgs.slice(0, 3).map((color) => `${color} / 255.0`);\n    if (compiledArgs.length === 3) {\n      return `vec4(${rgb.join(', ')}, 1.0)`;\n    }\n    const alpha = compiledArgs[3];\n    return `vec4(${rgb.join(', ')}, ${alpha})`;\n  }),\n  [Ops.Band]: createCompiler(([band, xOffset, yOffset], context) => {\n    if (!(GET_BAND_VALUE_FUNC in context.functions)) {\n      let ifBlocks = '';\n      const bandCount = context.bandCount || 1;\n      for (let i = 0; i < bandCount; i++) {\n        const colorIndex = Math.floor(i / 4);\n        let bandIndex = i % 4;\n        if (i === bandCount - 1 && bandIndex === 1) {\n          // LUMINANCE_ALPHA - band 1 assigned to rgb and band 2 assigned to alpha\n          bandIndex = 3;\n        }\n        const textureName = `${Uniforms.TILE_TEXTURE_ARRAY}[${colorIndex}]`;\n        ifBlocks += `  if (band == ${i + 1}.0) {\n    return texture2D(${textureName}, v_textureCoord + vec2(dx, dy))[${bandIndex}];\n  }\n`;\n      }\n\n      context.functions[GET_BAND_VALUE_FUNC] =\n        `float getBandValue(float band, float xOffset, float yOffset) {\n  float dx = xOffset / ${Uniforms.TEXTURE_PIXEL_WIDTH};\n  float dy = yOffset / ${Uniforms.TEXTURE_PIXEL_HEIGHT};\n${ifBlocks}\n}`;\n    }\n\n    return `${GET_BAND_VALUE_FUNC}(${band}, ${xOffset ?? '0.0'}, ${\n      yOffset ?? '0.0'\n    })`;\n  }),\n  [Ops.Palette]: (context, expression) => {\n    const [index, ...colors] = expression.args;\n    const numColors = colors.length;\n    const palette = new Uint8Array(numColors * 4);\n    for (let i = 0; i < colors.length; i++) {\n      const parsedValue = /** @type {string | Array<number>} */ (\n        /** @type {LiteralExpression} */ (colors[i]).value\n      );\n      const color = asArray(parsedValue);\n      const offset = i * 4;\n      palette[offset] = color[0];\n      palette[offset + 1] = color[1];\n      palette[offset + 2] = color[2];\n      palette[offset + 3] = color[3] * 255;\n    }\n    if (!context.paletteTextures) {\n      context.paletteTextures = [];\n    }\n    const paletteName = `${PALETTE_TEXTURE_ARRAY}[${context.paletteTextures.length}]`;\n    const paletteTexture = new PaletteTexture(paletteName, palette);\n    context.paletteTextures.push(paletteTexture);\n    const compiledIndex = compile(index, NumberType, context);\n    return `texture2D(${paletteName}, vec2((${compiledIndex} + 0.5) / ${numColors}.0, 0.5))`;\n  },\n  // TODO: unimplemented\n  // Ops.Number\n  // Ops.String\n  // Ops.Coalesce\n  // Ops.Concat\n  // Ops.ToString\n  // Ops.Has\n};\n\n/**\n * @param {Expression} expression The expression.\n * @param {ValueType} returnType The expected return type.\n * @param {CompilationContext} context The compilation context.\n * @return {CompiledExpression} The compiled expression\n */\nfunction compile(expression, returnType, context) {\n  // operator\n  if (expression instanceof CallExpression) {\n    const compiler = compilers[expression.operator];\n    if (compiler === undefined) {\n      throw new Error(\n        `No compiler defined for this operator: ${JSON.stringify(\n          expression.operator,\n        )}`,\n      );\n    }\n    return compiler(context, expression, returnType);\n  }\n\n  if ((expression.type & NumberType) > 0) {\n    return numberToGlsl(/** @type {number} */ (expression.value));\n  }\n\n  if ((expression.type & BooleanType) > 0) {\n    return expression.value.toString();\n  }\n\n  if ((expression.type & StringType) > 0) {\n    return stringToGlsl(expression.value.toString());\n  }\n\n  if ((expression.type & ColorType) > 0) {\n    return colorToGlsl(\n      /** @type {Array<number> | string} */ (expression.value),\n    );\n  }\n\n  if ((expression.type & NumberArrayType) > 0) {\n    return arrayToGlsl(/** @type {Array<number>} */ (expression.value));\n  }\n\n  if ((expression.type & SizeType) > 0) {\n    return sizeToGlsl(\n      /** @type {number|import('../size.js').Size} */ (expression.value),\n    );\n  }\n\n  throw new Error(\n    `Unexpected expression ${expression.value} (expected type ${typeName(\n      returnType,\n    )})`,\n  );\n}\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array<number>} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n  const extent = createEmpty();\n  for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n    extendCoordinate(extent, coordinates[i]);\n  }\n  return extent;\n}\n\n/**\n * @param {Array<number>} xs Xs.\n * @param {Array<number>} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n  const minX = Math.min.apply(null, xs);\n  const minY = Math.min.apply(null, ys);\n  const maxX = Math.max.apply(null, xs);\n  const maxY = Math.max.apply(null, ys);\n  return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n  if (dest) {\n    dest[0] = extent[0] - value;\n    dest[1] = extent[1] - value;\n    dest[2] = extent[2] + value;\n    dest[3] = extent[3] + value;\n    return dest;\n  }\n  return [\n    extent[0] - value,\n    extent[1] - value,\n    extent[2] + value,\n    extent[3] + value,\n  ];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n  if (dest) {\n    dest[0] = extent[0];\n    dest[1] = extent[1];\n    dest[2] = extent[2];\n    dest[3] = extent[3];\n    return dest;\n  }\n  return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n  let dx, dy;\n  if (x < extent[0]) {\n    dx = extent[0] - x;\n  } else if (extent[2] < x) {\n    dx = x - extent[2];\n  } else {\n    dx = 0;\n  }\n  if (y < extent[1]) {\n    dy = extent[1] - y;\n  } else if (extent[3] < y) {\n    dy = y - extent[3];\n  } else {\n    dy = 0;\n  }\n  return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n  return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n *     first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n  return (\n    extent1[0] <= extent2[0] &&\n    extent2[2] <= extent1[2] &&\n    extent1[1] <= extent2[1] &&\n    extent2[3] <= extent1[3]\n  );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n  return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n *     import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n  const minX = extent[0];\n  const minY = extent[1];\n  const maxX = extent[2];\n  const maxY = extent[3];\n  const x = coordinate[0];\n  const y = coordinate[1];\n  let relationship = Relationship.UNKNOWN;\n  if (x < minX) {\n    relationship = relationship | Relationship.LEFT;\n  } else if (x > maxX) {\n    relationship = relationship | Relationship.RIGHT;\n  }\n  if (y < minY) {\n    relationship = relationship | Relationship.BELOW;\n  } else if (y > maxY) {\n    relationship = relationship | Relationship.ABOVE;\n  }\n  if (relationship === Relationship.UNKNOWN) {\n    relationship = Relationship.INTERSECTING;\n  }\n  return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n  return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n  if (dest) {\n    dest[0] = minX;\n    dest[1] = minY;\n    dest[2] = maxX;\n    dest[3] = maxY;\n    return dest;\n  }\n  return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n  return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n  const x = coordinate[0];\n  const y = coordinate[1];\n  return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n  const extent = createOrUpdateEmpty(dest);\n  return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  dest,\n) {\n  const extent = createOrUpdateEmpty(dest);\n  return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n  const extent = createOrUpdateEmpty(dest);\n  return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n  return (\n    extent1[0] == extent2[0] &&\n    extent1[2] == extent2[2] &&\n    extent1[1] == extent2[1] &&\n    extent1[3] == extent2[3]\n  );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n  return (\n    Math.abs(extent1[0] - extent2[0]) < tolerance &&\n    Math.abs(extent1[2] - extent2[2]) < tolerance &&\n    Math.abs(extent1[1] - extent2[1]) < tolerance &&\n    Math.abs(extent1[3] - extent2[3]) < tolerance\n  );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n  if (extent2[0] < extent1[0]) {\n    extent1[0] = extent2[0];\n  }\n  if (extent2[2] > extent1[2]) {\n    extent1[2] = extent2[2];\n  }\n  if (extent2[1] < extent1[1]) {\n    extent1[1] = extent2[1];\n  }\n  if (extent2[3] > extent1[3]) {\n    extent1[3] = extent2[3];\n  }\n  return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n  if (coordinate[0] < extent[0]) {\n    extent[0] = coordinate[0];\n  }\n  if (coordinate[0] > extent[2]) {\n    extent[2] = coordinate[0];\n  }\n  if (coordinate[1] < extent[1]) {\n    extent[1] = coordinate[1];\n  }\n  if (coordinate[1] > extent[3]) {\n    extent[3] = coordinate[1];\n  }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n  for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n    extendCoordinate(extent, coordinates[i]);\n  }\n  return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n  extent,\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n) {\n  for (; offset < end; offset += stride) {\n    extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n  }\n  return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n  for (let i = 0, ii = rings.length; i < ii; ++i) {\n    extendCoordinates(extent, rings[i]);\n  }\n  return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n  extent[0] = Math.min(extent[0], x);\n  extent[1] = Math.min(extent[1], y);\n  extent[2] = Math.max(extent[2], x);\n  extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n  let val;\n  val = callback(getBottomLeft(extent));\n  if (val) {\n    return val;\n  }\n  val = callback(getBottomRight(extent));\n  if (val) {\n    return val;\n  }\n  val = callback(getTopRight(extent));\n  if (val) {\n    return val;\n  }\n  val = callback(getTopLeft(extent));\n  if (val) {\n    return val;\n  }\n  return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n  let area = 0;\n  if (!isEmpty(extent)) {\n    area = getWidth(extent) * getHeight(extent);\n  }\n  return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n  return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n  return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n  return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n  let coordinate;\n  if (corner === 'bottom-left') {\n    coordinate = getBottomLeft(extent);\n  } else if (corner === 'bottom-right') {\n    coordinate = getBottomRight(extent);\n  } else if (corner === 'top-left') {\n    coordinate = getTopLeft(extent);\n  } else if (corner === 'top-right') {\n    coordinate = getTopRight(extent);\n  } else {\n    throw new Error('Invalid corner');\n  }\n  return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n  const minX = Math.min(extent1[0], extent2[0]);\n  const minY = Math.min(extent1[1], extent2[1]);\n  const maxX = Math.max(extent1[2], extent2[2]);\n  const maxY = Math.max(extent1[3], extent2[3]);\n  return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n  const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n    center,\n    resolution,\n    rotation,\n    size,\n  );\n  return createOrUpdate(\n    Math.min(x0, x1, x2, x3),\n    Math.min(y0, y1, y2, y3),\n    Math.max(x0, x1, x2, x3),\n    Math.max(y0, y1, y2, y3),\n    dest,\n  );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array<number>} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n  const dx = (resolution * size[0]) / 2;\n  const dy = (resolution * size[1]) / 2;\n  const cosRotation = Math.cos(rotation);\n  const sinRotation = Math.sin(rotation);\n  const xCos = dx * cosRotation;\n  const xSin = dx * sinRotation;\n  const yCos = dy * cosRotation;\n  const ySin = dy * sinRotation;\n  const x = center[0];\n  const y = center[1];\n  return [\n    x - xCos + ySin,\n    y - xSin - yCos,\n    x - xCos - ySin,\n    y - xSin + yCos,\n    x + xCos - ySin,\n    y + xSin + yCos,\n    x + xCos + ySin,\n    y + xSin - yCos,\n    x - xCos + ySin,\n    y - xSin - yCos,\n  ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n  return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n  const intersection = getIntersection(extent1, extent2);\n  return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n  const intersection = dest ? dest : createEmpty();\n  if (intersects(extent1, extent2)) {\n    if (extent1[0] > extent2[0]) {\n      intersection[0] = extent1[0];\n    } else {\n      intersection[0] = extent2[0];\n    }\n    if (extent1[1] > extent2[1]) {\n      intersection[1] = extent1[1];\n    } else {\n      intersection[1] = extent2[1];\n    }\n    if (extent1[2] < extent2[2]) {\n      intersection[2] = extent1[2];\n    } else {\n      intersection[2] = extent2[2];\n    }\n    if (extent1[3] < extent2[3]) {\n      intersection[3] = extent1[3];\n    } else {\n      intersection[3] = extent2[3];\n    }\n  } else {\n    createOrUpdateEmpty(intersection);\n  }\n  return intersection;\n}\n\n/**\n * Get the difference between two extents, i.e. the area(s) of `extent1` that\n * are not covered by `extent2`.  Returns an array of between 0 and 4 extents.\n *\n * When the extents do not intersect the returned array contains `extent1` as\n * its only element.  When `extent2` completely contains `extent1` the returned\n * array is empty.  Otherwise up to four non-overlapping extents are returned\n * that together cover exactly the parts of `extent1` outside `extent2`.\n *\n * The decomposition used is:\n *\n * ```\n * ┌────┬─────────┬────┐  ← y2\n * │    │   top   │    │\n * │    ├─────────┤    │  ← iy2\n * │left│ (gone)  │right│\n * │    ├─────────┤    │  ← iy1\n * │    │ bottom  │    │\n * └────┴─────────┴────┘  ← y1\n * x1  ix1       ix2   x2\n * ```\n *\n * The left and right strips span the full height of `extent1` while the top\n * and bottom strips are clamped horizontally to the intersection, so the four\n * rectangles tile perfectly without overlap or gaps.\n *\n * @param {Extent} extent1 Extent to subtract from.\n * @param {Extent} extent2 Extent to subtract.\n * @return {Array<Extent>} Remaining extents (0–4 elements).\n * @api\n */\nexport function getDifference(extent1, extent2) {\n  if (!intersects(extent1, extent2)) {\n    return [extent1.slice()];\n  }\n  if (containsExtent(extent2, extent1)) {\n    return [];\n  }\n\n  const [x1, y1, x2, y2] = extent1;\n  const ix1 = Math.max(x1, extent2[0]);\n  const iy1 = Math.max(y1, extent2[1]);\n  const ix2 = Math.min(x2, extent2[2]);\n  const iy2 = Math.min(y2, extent2[3]);\n\n  const result = [];\n\n  // Left strip  (full height of extent1)\n  if (ix1 > x1) {\n    result.push([x1, y1, ix1, y2]);\n  }\n  // Right strip (full height of extent1)\n  if (ix2 < x2) {\n    result.push([ix2, y1, x2, y2]);\n  }\n  // Bottom strip (between the left and right strips)\n  if (iy1 > y1) {\n    result.push([ix1, y1, ix2, iy1]);\n  }\n  // Top strip (between the left and right strips)\n  if (iy2 < y2) {\n    result.push([ix1, iy2, ix2, y2]);\n  }\n\n  return result;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n  return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n  return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n  return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n  return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n  return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n  return (\n    extent1[0] <= extent2[2] &&\n    extent1[2] >= extent2[0] &&\n    extent1[1] <= extent2[3] &&\n    extent1[3] >= extent2[1]\n  );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n  return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n  if (dest) {\n    dest[0] = extent[0];\n    dest[1] = extent[1];\n    dest[2] = extent[2];\n    dest[3] = extent[3];\n    return dest;\n  }\n  return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n  const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n  const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n  extent[0] -= deltaX;\n  extent[2] += deltaX;\n  extent[1] -= deltaY;\n  extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n  let intersects = false;\n  const startRel = coordinateRelationship(extent, start);\n  const endRel = coordinateRelationship(extent, end);\n  if (\n    startRel === Relationship.INTERSECTING ||\n    endRel === Relationship.INTERSECTING\n  ) {\n    intersects = true;\n  } else {\n    const minX = extent[0];\n    const minY = extent[1];\n    const maxX = extent[2];\n    const maxY = extent[3];\n    const startX = start[0];\n    const startY = start[1];\n    const endX = end[0];\n    const endY = end[1];\n    const slope = (endY - startY) / (endX - startX);\n    let x, y;\n    if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n      // potentially intersects top\n      x = endX - (endY - maxY) / slope;\n      intersects = x >= minX && x <= maxX;\n    }\n    if (\n      !intersects &&\n      !!(endRel & Relationship.RIGHT) &&\n      !(startRel & Relationship.RIGHT)\n    ) {\n      // potentially intersects right\n      y = endY - (endX - maxX) * slope;\n      intersects = y >= minY && y <= maxY;\n    }\n    if (\n      !intersects &&\n      !!(endRel & Relationship.BELOW) &&\n      !(startRel & Relationship.BELOW)\n    ) {\n      // potentially intersects bottom\n      x = endX - (endY - minY) / slope;\n      intersects = x >= minX && x <= maxX;\n    }\n    if (\n      !intersects &&\n      !!(endRel & Relationship.LEFT) &&\n      !(startRel & Relationship.LEFT)\n    ) {\n      // potentially intersects left\n      y = endY - (endX - minX) * slope;\n      intersects = y >= minY && y <= maxY;\n    }\n  }\n  return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n  if (isEmpty(extent)) {\n    return createOrUpdateEmpty(dest);\n  }\n  let coordinates = [];\n  if (stops > 1) {\n    const width = extent[2] - extent[0];\n    const height = extent[3] - extent[1];\n    for (let i = 0; i < stops; ++i) {\n      coordinates.push(\n        extent[0] + (width * i) / stops,\n        extent[1],\n        extent[2],\n        extent[1] + (height * i) / stops,\n        extent[2] - (width * i) / stops,\n        extent[3],\n        extent[0],\n        extent[3] - (height * i) / stops,\n      );\n    }\n  } else {\n    coordinates = [\n      extent[0],\n      extent[1],\n      extent[2],\n      extent[1],\n      extent[2],\n      extent[3],\n      extent[0],\n      extent[3],\n    ];\n  }\n  transformFn(coordinates, coordinates, 2);\n  const xs = [];\n  const ys = [];\n  for (let i = 0, l = coordinates.length; i < l; i += 2) {\n    xs.push(coordinates[i]);\n    ys.push(coordinates[i + 1]);\n  }\n  return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n  const projectionExtent = projection.getExtent();\n  const center = getCenter(extent);\n  if (\n    projection.canWrapX() &&\n    (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n  ) {\n    const worldWidth = getWidth(projectionExtent);\n    const worldsAway = Math.floor(\n      (center[0] - projectionExtent[0]) / worldWidth,\n    );\n    const offset = worldsAway * worldWidth;\n    extent[0] -= offset;\n    extent[2] -= offset;\n  }\n  return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @param {boolean} [multiWorld] Return all worlds\n * @return {Array<Extent>} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\n  if (projection.canWrapX()) {\n    const projectionExtent = projection.getExtent();\n\n    if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n      return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n    }\n\n    wrapX(extent, projection);\n    const worldWidth = getWidth(projectionExtent);\n\n    if (getWidth(extent) > worldWidth && !multiWorld) {\n      // the extent wraps around on itself\n      return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n    }\n    if (extent[0] < projectionExtent[0]) {\n      // the extent crosses the anti meridian, so it needs to be sliced\n      return [\n        [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n        [projectionExtent[0], extent[1], extent[2], extent[3]],\n      ];\n    }\n    if (extent[2] > projectionExtent[2]) {\n      // the extent crosses the anti meridian, so it needs to be sliced\n      return [\n        [extent[0], extent[1], projectionExtent[2], extent[3]],\n        [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n      ];\n    }\n  }\n\n  return [extent];\n}\n\n/**\n * Subtract several rectangles from a base rectangle. Returns a set of disjoint\n * rectangles that together cover the base rectangle minus the union of the\n * subtracted rectangles, by repeatedly applying {@link module:ol/extent.getDifference}.\n * @param {Extent} base Base rectangle.\n * @param {Array<Extent>} subtract Rectangles to subtract.\n * @return {Array<Extent>} Remainder rectangles.\n */\nexport function subtractExtents(base, subtract) {\n  let remainder = [base];\n  for (let i = 0, ii = subtract.length; i < ii && remainder.length > 0; ++i) {\n    /** @type {Array<Extent>} */\n    const next = [];\n    for (let j = 0, jj = remainder.length; j < jj; ++j) {\n      next.push(...getDifference(remainder[j], subtract[i]));\n    }\n    remainder = next;\n  }\n  return remainder;\n}\n","/**\n * @module ol/extent/Relationship\n */\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n  UNKNOWN: 0,\n  INTERSECTING: 1,\n  ABOVE: 2,\n  RIGHT: 4,\n  BELOW: 8,\n  LEFT: 16,\n};\n","/**\n * @module ol/featureloader\n */\n\n/**\n *\n * @type {boolean}\n * @private\n */\nlet withCredentials = false;\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * load features.\n *\n * This function takes 3 arguments: an {@link module:ol/extent~Extent} representing\n * the area to be loaded, a `{number}` representing the resolution (map units per pixel), and a\n * {@link module:ol/proj/Projection~Projection} for the projection. The function is expeced to return\n * a promise that resolves to an array of features.\n *\n * There are also a deprecated signature, with `void` as\n * return, and two additional arguments: an optional success callback that should get\n * the loaded features passed as an argument and an optional failure callback with no arguments.\n *\n * The function is responsible for loading the features and adding them to the\n * source.\n *\n * @template {import(\"./Feature.js\").FeatureLike} [FeatureType=import(\"./Feature.js\").FeatureLike]\n * @typedef {(\n *           extent: import(\"./extent.js\").Extent,\n *           resolution: number,\n *           projection: import(\"./proj/Projection.js\").default,\n *           success?: (features: Array<FeatureType>) => void,\n *           failure?: () => void) => void|Promise<Array<FeatureType>>} FeatureLoader\n * @api\n */\n\n/**\n * {@link module:ol/source/Vector~VectorSource} sources use a function of this type to\n * get the url to load features from.\n *\n * This function takes an {@link module:ol/extent~Extent} representing the area\n * to be loaded, a `{number}` representing the resolution (map units per pixel)\n * and an {@link module:ol/proj/Projection~Projection} for the projection  as\n * arguments and returns a `{string}` representing the URL.\n * @typedef {function(import(\"./extent.js\").Extent, number, import(\"./proj/Projection.js\").default): string} FeatureUrlFunction\n * @api\n */\n\n/**\n * @template {import(\"./Feature.js\").FeatureLike} [FeatureType=import(\"./Feature.js\").default]\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default<FeatureType>} format Feature format.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {function(Array<FeatureType>, import(\"./proj/Projection.js\").default): void} success Success\n *      Function called with the loaded features and optionally with the data projection.\n * @param {function(): void} failure Failure\n *      Function called when loading failed.\n */\nexport function loadFeaturesXhr(\n  url,\n  format,\n  extent,\n  resolution,\n  projection,\n  success,\n  failure,\n) {\n  const xhr = new XMLHttpRequest();\n  xhr.open(\n    'GET',\n    typeof url === 'function' ? url(extent, resolution, projection) : url,\n    true,\n  );\n  if (format.getType() == 'arraybuffer') {\n    xhr.responseType = 'arraybuffer';\n  }\n  xhr.withCredentials = withCredentials;\n  /**\n   * @param {Event} event Event.\n   * @private\n   */\n  xhr.onload = function (event) {\n    // status will be 0 for file:// urls\n    if (!xhr.status || (xhr.status >= 200 && xhr.status < 300)) {\n      const type = format.getType();\n      try {\n        /** @type {Document|Node|Object|string|undefined} */\n        let source;\n        if (type == 'text' || type == 'json') {\n          source = xhr.responseText;\n        } else if (type == 'xml') {\n          source = xhr.responseXML || xhr.responseText;\n        } else if (type == 'arraybuffer') {\n          source = /** @type {ArrayBuffer} */ (xhr.response);\n        }\n        if (source) {\n          success(\n            /** @type {Array<FeatureType>} */\n            (\n              format.readFeatures(source, {\n                extent: extent,\n                featureProjection: projection,\n              })\n            ),\n            format.readProjection(source),\n          );\n        } else {\n          failure();\n        }\n      } catch {\n        failure();\n      }\n    } else {\n      failure();\n    }\n  };\n  /**\n   * @private\n   */\n  xhr.onerror = failure;\n  xhr.send();\n}\n\n/**\n * Create an XHR feature loader for a `url` and `format`. The feature loader\n * loads features (with XHR), parses the features, and adds them to the\n * vector source.\n *\n * @template {import(\"./Feature.js\").FeatureLike} [FeatureType=import(\"./Feature.js\").default]\n * @param {string|FeatureUrlFunction} url Feature URL service.\n * @param {import(\"./format/Feature.js\").default<FeatureType>} format Feature format.\n * @return {FeatureLoader<FeatureType>} The feature loader.\n * @api\n */\nexport function xhr(url, format) {\n  /**\n   * @param {import(\"./extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @param {import(\"./proj/Projection.js\").default} projection Projection.\n   * @param {function(Array<FeatureType>): void} [success] Success\n   *      Function called when loading succeeded.\n   * @param {function(): void} [failure] Failure\n   *      Function called when loading failed.\n   * @this {import(\"./source/Vector.js\").default<FeatureType>}\n   */\n  return function (extent, resolution, projection, success, failure) {\n    loadFeaturesXhr(\n      url,\n      format,\n      extent,\n      resolution,\n      projection,\n      /**\n       * @param {Array<FeatureType>} features The loaded features.\n       * @param {import(\"./proj/Projection.js\").default} dataProjection Data\n       * projection.\n       */\n      (features, dataProjection) => {\n        this.addFeatures(features);\n        if (success !== undefined) {\n          success(features);\n        }\n      },\n      () => {\n        this.changed();\n        if (failure !== undefined) {\n          failure();\n        }\n      },\n    );\n  };\n}\n\n/**\n * Setter for the withCredentials configuration for the XHR.\n *\n * @param {boolean} xhrWithCredentials The value of withCredentials to set.\n * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/\n * @api\n */\nexport function setWithCredentials(xhrWithCredentials) {\n  withCredentials = xhrWithCredentials;\n}\n","/**\n * @module ol/format/Feature\n */\nimport Feature from '../Feature.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {\n  linearRingsAreOriented,\n  linearRingssAreOriented,\n  orientLinearRings,\n  orientLinearRingsArray,\n} from '../geom/flat/orient.js';\nimport {\n  equivalent as equivalentProjection,\n  get as getProjection,\n  getTransform,\n  transformExtent,\n} from '../proj.js';\nimport RenderFeature from '../render/Feature.js';\nimport {abstract} from '../util.js';\n\n/**\n * @typedef {Object} ReadOptions\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection] Projection of the data we are reading.\n * If not provided, the projection will be derived from the data (where possible) or\n * the `dataProjection` of the format is assigned (where set). If the projection\n * can not be derived from the data and if no `dataProjection` is set for a format,\n * the features will not be reprojected.\n * @property {import(\"../extent.js\").Extent} [extent] Tile extent in map units of the tile being read.\n * This is only required when reading data with tile pixels as geometry units. When configured,\n * a `dataProjection` with `TILE_PIXELS` as `units` and the tile's pixel extent as `extent` needs to be\n * provided.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection of the feature geometries\n * created by the format reader. If not provided, features will be returned in the\n * `dataProjection`.\n */\n\n/**\n * @typedef {Object} WriteOptions\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection] Projection of the data we are writing.\n * If not provided, the `dataProjection` of the format is assigned (where set).\n * If no `dataProjection` is set for a format, the features will be returned\n * in the `featureProjection`.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection of the feature geometries\n * that will be serialized by the format writer. If not provided, geometries are assumed\n * to be in the `dataProjection` if that is set; in other words, they are not transformed.\n * @property {boolean} [rightHanded] When writing geometries, follow the right-hand\n * rule for linear ring orientation.  This means that polygons will have counter-clockwise\n * exterior rings and clockwise interior rings.  By default, coordinates are serialized\n * as they are provided at construction.  If `true`, the right-hand rule will\n * be applied.  If `false`, the left-hand rule will be applied (clockwise for\n * exterior and counter-clockwise for interior rings).  Note that not all\n * formats support this.  The GeoJSON format does use this property when writing\n * geometries.\n * @property {number} [decimals] Maximum number of decimal places for coordinates.\n * Coordinates are stored internally as floats, but floating-point arithmetic can create\n * coordinates with a large number of decimal places, not generally wanted on output.\n * Set a number here to round coordinates. Can also be used to ensure that\n * coordinates read in can be written back out with the same number of decimals.\n * Default is no rounding.\n */\n\n/**\n * @typedef {'arraybuffer' | 'json' | 'text' | 'xml'} Type\n */\n\n/**\n * @typedef {Object} SimpleGeometryObject\n * @property {import('../geom/Geometry.js').Type} type Type.\n * @property {Array<number>} flatCoordinates Flat coordinates.\n * @property {Array<number>|Array<Array<number>>} [ends] Ends or endss.\n * @property {import('../geom/Geometry.js').GeometryLayout} [layout] Layout.\n */\n\n/**\n * @typedef {Array<GeometryObject>} GeometryCollectionObject\n */\n\n/**\n * @typedef {SimpleGeometryObject|GeometryCollectionObject} GeometryObject\n */\n\n/**\n * @typedef {Object} FeatureObject\n * @property {string|number} [id] Id.\n * @property {GeometryObject} [geometry] Geometry.\n * @property {Object<string, *>} [properties] Properties.\n */\n\n/***\n * @template {import('../Feature.js').FeatureLike} T\n * @typedef {T extends RenderFeature ? typeof RenderFeature : typeof Feature} FeatureToFeatureClass\n */\n\n/***\n * @template {import(\"../Feature.js\").FeatureClass} T\n * @typedef {T[keyof T] extends RenderFeature ? RenderFeature : Feature} FeatureClassToFeature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for feature formats.\n * {@link module:ol/format/Feature~FeatureFormat} subclasses provide the ability to decode and encode\n * {@link module:ol/Feature~Feature} objects from a variety of commonly used geospatial\n * file formats.  See the documentation for each format for more details.\n *\n * @template {import('../Feature.js').FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @abstract\n * @api\n */\nclass FeatureFormat {\n  constructor() {\n    /**\n     * @protected\n     * @type {import(\"../proj/Projection.js\").default|undefined}\n     */\n    this.dataProjection = undefined;\n\n    /**\n     * @protected\n     * @type {import(\"../proj/Projection.js\").default|undefined}\n     */\n    this.defaultFeatureProjection = undefined;\n\n    /**\n     * @protected\n     * @type {FeatureToFeatureClass<FeatureType>}\n     */\n    this.featureClass = /** @type {FeatureToFeatureClass<FeatureType>} */ (\n      Feature\n    );\n\n    /**\n     * A list media types supported by the format in descending order of preference.\n     * @type {Array<string>}\n     */\n    this.supportedMediaTypes = null;\n  }\n\n  /**\n   * Adds the data projection to the read options.\n   * @param {Document|Element|Object|string} source Source.\n   * @param {ReadOptions} [options] Options.\n   * @return {ReadOptions|undefined} Options.\n   * @protected\n   */\n  getReadOptions(source, options) {\n    if (options) {\n      let dataProjection = options.dataProjection\n        ? getProjection(options.dataProjection)\n        : this.readProjection(source);\n      if (\n        options.extent &&\n        dataProjection &&\n        dataProjection.getUnits() === 'tile-pixels'\n      ) {\n        dataProjection = getProjection(dataProjection);\n        dataProjection.setWorldExtent(options.extent);\n      }\n      options = {\n        dataProjection: dataProjection,\n        featureProjection: options.featureProjection,\n      };\n    }\n    return this.adaptOptions(options);\n  }\n\n  /**\n   * Sets the `dataProjection` on the options, if no `dataProjection`\n   * is set.\n   * @param {WriteOptions|ReadOptions|undefined} options\n   *     Options.\n   * @protected\n   * @return {WriteOptions|ReadOptions|undefined}\n   *     Updated options.\n   */\n  adaptOptions(options) {\n    return Object.assign(\n      {\n        dataProjection: this.dataProjection,\n        featureProjection: this.defaultFeatureProjection,\n        featureClass: this.featureClass,\n      },\n      options,\n    );\n  }\n\n  /**\n   * @abstract\n   * @return {Type} The format type.\n   */\n  getType() {\n    return abstract();\n  }\n\n  /**\n   * Read a single feature from a source.\n   *\n   * @abstract\n   * @param {Document|Element|Object|string} source Source.\n   * @param {ReadOptions} [options] Read options.\n   * @return {FeatureType|Array<FeatureType>} Feature.\n   */\n  readFeature(source, options) {\n    return abstract();\n  }\n\n  /**\n   * Read all features from a source.\n   *\n   * @abstract\n   * @param {Document|Element|ArrayBuffer|Object|string} source Source.\n   * @param {ReadOptions} [options] Read options.\n   * @return {Array<FeatureType>} Features.\n   */\n  readFeatures(source, options) {\n    return abstract();\n  }\n\n  /**\n   * Read a single geometry from a source.\n   *\n   * @abstract\n   * @param {Document|Element|Object|string} source Source.\n   * @param {ReadOptions} [options] Read options.\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   */\n  readGeometry(source, options) {\n    return abstract();\n  }\n\n  /**\n   * Read the projection from a source.\n   *\n   * @abstract\n   * @param {Document|Element|Object|string} source Source.\n   * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n   */\n  readProjection(source) {\n    return abstract();\n  }\n\n  /**\n   * Encode a feature in this format.\n   *\n   * @abstract\n   * @param {Feature} feature Feature.\n   * @param {WriteOptions} [options] Write options.\n   * @return {string|ArrayBuffer} Result.\n   */\n  writeFeature(feature, options) {\n    return abstract();\n  }\n\n  /**\n   * Encode an array of features in this format.\n   *\n   * @abstract\n   * @param {Array<Feature>} features Features.\n   * @param {WriteOptions} [options] Write options.\n   * @return {string|ArrayBuffer} Result.\n   */\n  writeFeatures(features, options) {\n    return abstract();\n  }\n\n  /**\n   * Write a single geometry in this format.\n   *\n   * @abstract\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {WriteOptions} [options] Write options.\n   * @return {string|ArrayBuffer} Result.\n   */\n  writeGeometry(geometry, options) {\n    return abstract();\n  }\n}\n\nexport default FeatureFormat;\n\n/**\n * @template {import(\"../geom/Geometry.js\").default|RenderFeature} T\n * @param {T} geometry Geometry.\n * @param {boolean} write Set to true for writing, false for reading.\n * @param {WriteOptions|ReadOptions} [options] Options.\n * @return {T} Transformed geometry.\n */\nexport function transformGeometryWithOptions(geometry, write, options) {\n  const featureProjection = options\n    ? getProjection(options.featureProjection)\n    : null;\n  const dataProjection = options ? getProjection(options.dataProjection) : null;\n\n  let transformed = geometry;\n  if (\n    featureProjection &&\n    dataProjection &&\n    !equivalentProjection(featureProjection, dataProjection)\n  ) {\n    if (write) {\n      transformed = /** @type {T} */ (geometry.clone());\n    }\n    const fromProjection = write ? featureProjection : dataProjection;\n    const toProjection = write ? dataProjection : featureProjection;\n    if (fromProjection.getUnits() === 'tile-pixels') {\n      transformed.transform(fromProjection, toProjection);\n    } else {\n      transformed.applyTransform(getTransform(fromProjection, toProjection));\n    }\n  }\n  if (\n    write &&\n    options &&\n    /** @type {WriteOptions} */ (options).decimals !== undefined\n  ) {\n    const power = Math.pow(10, /** @type {WriteOptions} */ (options).decimals);\n    // if decimals option on write, round each coordinate appropriately\n    /**\n     * @param {Array<number>} coordinates Coordinates.\n     * @return {Array<number>} Transformed coordinates.\n     */\n    const transform = function (coordinates) {\n      for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n        coordinates[i] = Math.round(coordinates[i] * power) / power;\n      }\n      return coordinates;\n    };\n    if (transformed === geometry) {\n      transformed = /** @type {T} */ (geometry.clone());\n    }\n    transformed.applyTransform(transform);\n  }\n  return transformed;\n}\n\n/**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {ReadOptions} [options] Read options.\n * @return {import(\"../extent.js\").Extent} Transformed extent.\n */\nexport function transformExtentWithOptions(extent, options) {\n  const featureProjection = options\n    ? getProjection(options.featureProjection)\n    : null;\n  const dataProjection = options ? getProjection(options.dataProjection) : null;\n\n  if (\n    featureProjection &&\n    dataProjection &&\n    !equivalentProjection(featureProjection, dataProjection)\n  ) {\n    return transformExtent(extent, dataProjection, featureProjection);\n  }\n  return extent;\n}\n\nconst GeometryConstructor = {\n  Point: Point,\n  LineString: LineString,\n  Polygon: Polygon,\n  MultiPoint: MultiPoint,\n  MultiLineString: MultiLineString,\n  MultiPolygon: MultiPolygon,\n};\n\nfunction orientFlatCoordinates(flatCoordinates, ends, stride) {\n  if (Array.isArray(ends[0])) {\n    // MultiPolagon\n    if (!linearRingssAreOriented(flatCoordinates, 0, ends, stride)) {\n      flatCoordinates = flatCoordinates.slice();\n      orientLinearRingsArray(flatCoordinates, 0, ends, stride);\n    }\n    return flatCoordinates;\n  }\n  if (!linearRingsAreOriented(flatCoordinates, 0, ends, stride)) {\n    flatCoordinates = flatCoordinates.slice();\n    orientLinearRings(flatCoordinates, 0, ends, stride);\n  }\n  return flatCoordinates;\n}\n\n/**\n * @param {FeatureObject} object Feature object.\n * @param {WriteOptions|ReadOptions} [options] Options.\n * @return {RenderFeature|Array<RenderFeature>} Render feature.\n */\nexport function createRenderFeature(object, options) {\n  const geometry = object.geometry;\n  if (!geometry) {\n    return [];\n  }\n  if (Array.isArray(geometry)) {\n    return geometry\n      .map((geometry) => createRenderFeature({...object, geometry}))\n      .flat();\n  }\n\n  const geometryType =\n    geometry.type === 'MultiPolygon' ? 'Polygon' : geometry.type;\n  if (geometryType === 'GeometryCollection' || geometryType === 'Circle') {\n    throw new Error('Unsupported geometry type: ' + geometryType);\n  }\n\n  const stride = geometry.layout.length;\n  return transformGeometryWithOptions(\n    new RenderFeature(\n      geometryType,\n      geometryType === 'Polygon'\n        ? orientFlatCoordinates(geometry.flatCoordinates, geometry.ends, stride)\n        : geometry.flatCoordinates,\n      geometry.ends?.flat(),\n      stride,\n      object.properties || {},\n      object.id,\n    ).enableSimplifyTransformed(),\n    false,\n    options,\n  );\n}\n\n/**\n * @param {GeometryObject|null} object Geometry object.\n * @param {WriteOptions|ReadOptions} [options] Options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\nexport function createGeometry(object, options) {\n  if (!object) {\n    return null;\n  }\n  if (Array.isArray(object)) {\n    const geometries = object.map((geometry) =>\n      createGeometry(geometry, options),\n    );\n    return new GeometryCollection(geometries);\n  }\n  const Geometry = GeometryConstructor[object.type];\n  return transformGeometryWithOptions(\n    new Geometry(object.flatCoordinates, object.layout || 'XY', object.ends),\n    false,\n    options,\n  );\n}\n","/**\n * @module ol/format/JSONFeature\n */\nimport {abstract} from '../util.js';\nimport FeatureFormat from './Feature.js';\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for JSON feature formats.\n *\n * @template {import('../Feature.js').FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @extends {FeatureFormat<FeatureType>}\n * @abstract\n */\nclass JSONFeature extends FeatureFormat {\n  constructor() {\n    super();\n  }\n\n  /**\n   * @return {import(\"./Feature.js\").Type} Format.\n   * @override\n   */\n  getType() {\n    return 'json';\n  }\n\n  /**\n   * Read a feature.  Only works for a single feature. Use `readFeatures` to\n   * read a feature collection.\n   *\n   * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {FeatureType|Array<FeatureType>} Feature.\n   * @api\n   * @override\n   */\n  readFeature(source, options) {\n    return this.readFeatureFromObject(\n      getObject(source),\n      this.getReadOptions(source, options),\n    );\n  }\n\n  /**\n   * Read all features.  Works with both a single feature and a feature\n   * collection.\n   *\n   * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {Array<FeatureType>} Features.\n   * @api\n   * @override\n   */\n  readFeatures(source, options) {\n    return this.readFeaturesFromObject(\n      getObject(source),\n      this.getReadOptions(source, options),\n    );\n  }\n\n  /**\n   * @abstract\n   * @param {Object} object Object.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {FeatureType|Array<FeatureType>} Feature.\n   */\n  readFeatureFromObject(object, options) {\n    return abstract();\n  }\n\n  /**\n   * @abstract\n   * @param {Object} object Object.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {Array<FeatureType>} Features.\n   */\n  readFeaturesFromObject(object, options) {\n    return abstract();\n  }\n\n  /**\n   * Read a geometry.\n   *\n   * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   * @api\n   * @override\n   */\n  readGeometry(source, options) {\n    return this.readGeometryFromObject(\n      getObject(source),\n      this.getReadOptions(source, options),\n    );\n  }\n\n  /**\n   * @abstract\n   * @param {Object} object Object.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   */\n  readGeometryFromObject(object, options) {\n    return abstract();\n  }\n\n  /**\n   * Read the projection.\n   *\n   * @param {ArrayBuffer|Document|Element|Object|string} source Source.\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   * @api\n   * @override\n   */\n  readProjection(source) {\n    return this.readProjectionFromObject(getObject(source));\n  }\n\n  /**\n   * @abstract\n   * @param {Object} object Object.\n   * @protected\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   */\n  readProjectionFromObject(object) {\n    return abstract();\n  }\n\n  /**\n   * Encode a feature as string.\n   *\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Encoded feature.\n   * @api\n   * @override\n   */\n  writeFeature(feature, options) {\n    return JSON.stringify(this.writeFeatureObject(feature, options));\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {Object} Object.\n   */\n  writeFeatureObject(feature, options) {\n    return abstract();\n  }\n\n  /**\n   * Encode an array of features as string.\n   *\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Encoded features.\n   * @api\n   * @override\n   */\n  writeFeatures(features, options) {\n    return JSON.stringify(this.writeFeaturesObject(features, options));\n  }\n\n  /**\n   * @abstract\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {Object} Object.\n   */\n  writeFeaturesObject(features, options) {\n    return abstract();\n  }\n\n  /**\n   * Encode a geometry as string.\n   *\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Encoded geometry.\n   * @api\n   * @override\n   */\n  writeGeometry(geometry, options) {\n    return JSON.stringify(this.writeGeometryObject(geometry, options));\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {Object} Object.\n   */\n  writeGeometryObject(geometry, options) {\n    return abstract();\n  }\n}\n\n/**\n * @param {Document|Element|Object|string} source Source.\n * @return {Object} Object.\n */\nfunction getObject(source) {\n  if (typeof source === 'string') {\n    const object = JSON.parse(source);\n    return object ? /** @type {Object} */ (object) : null;\n  }\n  if (source !== null) {\n    return source;\n  }\n  return null;\n}\n\nexport default JSONFeature;\n","/**\n * @module ol/format/GeoJSON\n */\n\nimport {getLayoutForStride} from '../geom/SimpleGeometry.js';\nimport {\n  deflateCoordinatesArray,\n  deflateMultiCoordinatesArray,\n} from '../geom/flat/deflate.js';\nimport {isEmpty} from '../obj.js';\nimport {get as getProjection} from '../proj.js';\nimport RenderFeature from '../render/Feature.js';\nimport {\n  createGeometry,\n  createRenderFeature,\n  transformGeometryWithOptions,\n} from './Feature.js';\nimport JSONFeature from './JSONFeature.js';\n\n/**\n * @typedef {import(\"geojson\").GeoJSON} GeoJSONObject\n * @typedef {import(\"geojson\").Feature} GeoJSONFeature\n * @typedef {import(\"geojson\").FeatureCollection} GeoJSONFeatureCollection\n * @typedef {import(\"geojson\").Geometry} GeoJSONGeometry\n * @typedef {import(\"geojson\").Point} GeoJSONPoint\n * @typedef {import(\"geojson\").LineString} GeoJSONLineString\n * @typedef {import(\"geojson\").Polygon} GeoJSONPolygon\n * @typedef {import(\"geojson\").MultiPoint} GeoJSONMultiPoint\n * @typedef {import(\"geojson\").MultiLineString} GeoJSONMultiLineString\n * @typedef {import(\"geojson\").MultiPolygon} GeoJSONMultiPolygon\n * @typedef {import(\"geojson\").GeometryCollection} GeoJSONGeometryCollection\n */\n\n/**\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @typedef {Object} Options\n *\n * @property {import(\"../proj.js\").ProjectionLike} [dataProjection='EPSG:4326'] Default data projection.\n * @property {import(\"../proj.js\").ProjectionLike} [featureProjection] Projection for features read or\n * written by the format.  Options passed to read or write methods will take precedence.\n * @property {string} [geometryName] Geometry name to use when creating features.\n * @property {boolean} [extractGeometryName=false] Certain GeoJSON providers include\n * the geometry_name field in the feature GeoJSON. If set to `true` the GeoJSON reader\n * will look for that field to set the geometry name. If both this field is set to `true`\n * and a `geometryName` is provided, the `geometryName` will take precedence.\n * @property {import('./Feature.js').FeatureToFeatureClass<FeatureType>} [featureClass] Feature class\n * to be used when reading features. The default is {@link module:ol/Feature~Feature}. If performance is\n * the primary concern, and features are not going to be modified or round-tripped through the format,\n * consider using {@link module:ol/render/Feature~RenderFeature}\n */\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the GeoJSON format.\n *\n * @template {import('../Feature.js').FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @extends {JSONFeature<FeatureType>}\n * @api\n */\nclass GeoJSON extends JSONFeature {\n  /**\n   * @param {Options<FeatureType>} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super();\n\n    /**\n     * @type {import(\"../proj/Projection.js\").default}\n     */\n    this.dataProjection = getProjection(\n      options.dataProjection ? options.dataProjection : 'EPSG:4326',\n    );\n\n    if (options.featureProjection) {\n      /**\n       * @type {import(\"../proj/Projection.js\").default}\n       */\n      this.defaultFeatureProjection = getProjection(options.featureProjection);\n    }\n\n    if (options.featureClass) {\n      this.featureClass = options.featureClass;\n    }\n\n    /**\n     * Name of the geometry attribute for features.\n     * @type {string|undefined}\n     * @private\n     */\n    this.geometryName_ = options.geometryName;\n\n    /**\n     * Look for the `geometry_name` in the feature GeoJSON\n     * @type {boolean|undefined}\n     * @private\n     */\n    this.extractGeometryName_ = options.extractGeometryName;\n\n    this.supportedMediaTypes = [\n      'application/geo+json',\n      'application/vnd.geo+json',\n    ];\n  }\n\n  /**\n   * @param {Object} object Object.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {FeatureType|Array<FeatureType>} Feature.\n   * @override\n   */\n  readFeatureFromObject(object, options) {\n    /**\n     * @type {GeoJSONFeature}\n     */\n    let geoJSONFeature = null;\n    if (object['type'] === 'Feature') {\n      geoJSONFeature = /** @type {GeoJSONFeature} */ (object);\n    } else {\n      geoJSONFeature = {\n        'type': 'Feature',\n        'geometry': /** @type {GeoJSONGeometry} */ (object),\n        'properties': null,\n      };\n    }\n\n    const geometry = readGeometryInternal(geoJSONFeature['geometry'], options);\n    if (this.featureClass === RenderFeature) {\n      return /** @type {FeatureType|Array<FeatureType>} */ (\n        createRenderFeature(\n          {\n            geometry,\n            id: geoJSONFeature['id'],\n            properties: geoJSONFeature['properties'],\n          },\n          options,\n        )\n      );\n    }\n\n    const FeatureClass = /** @type {typeof import(\"../Feature.js\").default} */ (\n      this.featureClass\n    );\n    const feature = new FeatureClass();\n    if (this.geometryName_) {\n      feature.setGeometryName(this.geometryName_);\n    } else if (this.extractGeometryName_ && geoJSONFeature['geometry_name']) {\n      feature.setGeometryName(geoJSONFeature['geometry_name']);\n    }\n    feature.setGeometry(createGeometry(geometry, options));\n\n    if ('id' in geoJSONFeature) {\n      feature.setId(geoJSONFeature['id']);\n    }\n\n    if (geoJSONFeature['properties']) {\n      feature.setProperties(geoJSONFeature['properties'], true);\n    }\n    return /** @type {FeatureType|Array<FeatureType>} */ (feature);\n  }\n\n  /**\n   * @param {Object} object Object.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {Array<FeatureType>} Features.\n   * @override\n   */\n  readFeaturesFromObject(object, options) {\n    const geoJSONObject = /** @type {GeoJSONObject} */ (object);\n    let features = null;\n    if (geoJSONObject['type'] === 'FeatureCollection') {\n      const geoJSONFeatureCollection = /** @type {GeoJSONFeatureCollection} */ (\n        object\n      );\n      features = [];\n      const geoJSONFeatures = geoJSONFeatureCollection['features'];\n      for (let i = 0, ii = geoJSONFeatures.length; i < ii; ++i) {\n        const featureObject = this.readFeatureFromObject(\n          geoJSONFeatures[i],\n          options,\n        );\n        if (!featureObject) {\n          continue;\n        }\n        features.push(featureObject);\n      }\n    } else {\n      features = [this.readFeatureFromObject(object, options)];\n    }\n    return /** @type {Array<FeatureType>} */ (features.flat());\n  }\n\n  /**\n   * @param {GeoJSONGeometry} object Object.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   * @override\n   */\n  readGeometryFromObject(object, options) {\n    return readGeometry(object, options);\n  }\n\n  /**\n   * @param {Object} object Object.\n   * @protected\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   * @override\n   */\n  readProjectionFromObject(object) {\n    const crs = object['crs'];\n    let projection;\n    if (crs) {\n      if (crs['type'] == 'name') {\n        projection = getProjection(crs['properties']['name']);\n      } else if (crs['type'] === 'EPSG') {\n        projection = getProjection('EPSG:' + crs['properties']['code']);\n      } else {\n        throw new Error('Unknown SRS type');\n      }\n    } else {\n      projection = this.dataProjection;\n    }\n    return /** @type {import(\"../proj/Projection.js\").default} */ (projection);\n  }\n\n  /**\n   * Encode a feature as a GeoJSON Feature object.\n   *\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {GeoJSONFeature} Object.\n   * @api\n   * @override\n   */\n  writeFeatureObject(feature, options) {\n    options = this.adaptOptions(options);\n\n    /** @type {GeoJSONFeature} */\n    const object = {\n      'type': 'Feature',\n      geometry: null,\n      properties: null,\n    };\n\n    const id = feature.getId();\n    if (id !== undefined) {\n      object.id = id;\n    }\n\n    if (!feature.hasProperties()) {\n      return object;\n    }\n\n    const properties = feature.getProperties();\n    const geometry = feature.getGeometry();\n    if (geometry) {\n      object.geometry = writeGeometry(geometry, options);\n\n      delete properties[feature.getGeometryName()];\n    }\n\n    if (!isEmpty(properties)) {\n      object.properties = properties;\n    }\n\n    return object;\n  }\n\n  /**\n   * Encode an array of features as a GeoJSON object.\n   *\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {GeoJSONFeatureCollection} GeoJSON Object.\n   * @api\n   * @override\n   */\n  writeFeaturesObject(features, options) {\n    options = this.adaptOptions(options);\n    const objects = [];\n    for (let i = 0, ii = features.length; i < ii; ++i) {\n      objects.push(this.writeFeatureObject(features[i], options));\n    }\n    return {\n      type: 'FeatureCollection',\n      features: objects,\n    };\n  }\n\n  /**\n   * Encode a geometry as a GeoJSON object.\n   *\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {GeoJSONGeometry|GeoJSONGeometryCollection} Object.\n   * @api\n   * @override\n   */\n  writeGeometryObject(geometry, options) {\n    return writeGeometry(geometry, this.adaptOptions(options));\n  }\n}\n\n/**\n * @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n * @return {import(\"./Feature.js\").GeometryObject} Geometry.\n */\nfunction readGeometryInternal(object, options) {\n  if (!object) {\n    return null;\n  }\n\n  /** @type {import(\"./Feature.js\").GeometryObject} */\n  let geometry;\n  switch (object['type']) {\n    case 'Point': {\n      geometry = readPointGeometry(/** @type {GeoJSONPoint} */ (object));\n      break;\n    }\n    case 'LineString': {\n      geometry = readLineStringGeometry(\n        /** @type {GeoJSONLineString} */ (object),\n      );\n      break;\n    }\n    case 'Polygon': {\n      geometry = readPolygonGeometry(/** @type {GeoJSONPolygon} */ (object));\n      break;\n    }\n    case 'MultiPoint': {\n      geometry = readMultiPointGeometry(\n        /** @type {GeoJSONMultiPoint} */ (object),\n      );\n      break;\n    }\n    case 'MultiLineString': {\n      geometry = readMultiLineStringGeometry(\n        /** @type {GeoJSONMultiLineString} */ (object),\n      );\n      break;\n    }\n    case 'MultiPolygon': {\n      geometry = readMultiPolygonGeometry(\n        /** @type {GeoJSONMultiPolygon} */ (object),\n      );\n      break;\n    }\n    case 'GeometryCollection': {\n      geometry = readGeometryCollectionGeometry(\n        /** @type {GeoJSONGeometryCollection} */ (object),\n      );\n      break;\n    }\n    default: {\n      throw new Error('Unsupported GeoJSON type: ' + object['type']);\n    }\n  }\n  return geometry;\n}\n\n/**\n * @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\nfunction readGeometry(object, options) {\n  const geometryObject = readGeometryInternal(object, options);\n  return createGeometry(geometryObject, options);\n}\n\n/**\n * @param {GeoJSONGeometryCollection} object Object.\n * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n * @return {import(\"./Feature.js\").GeometryCollectionObject} Geometry collection.\n */\nfunction readGeometryCollectionGeometry(object, options) {\n  const geometries = object['geometries'].map(\n    /**\n     * @param {GeoJSONGeometry} geometry Geometry.\n     * @return {import(\"./Feature.js\").GeometryObject} geometry Geometry.\n     */\n    function (geometry) {\n      return readGeometryInternal(geometry, options);\n    },\n  );\n  return geometries;\n}\n\n/**\n * @param {GeoJSONPoint} object Input object.\n * @return {import(\"./Feature.js\").GeometryObject} Point geometry.\n */\nfunction readPointGeometry(object) {\n  const flatCoordinates = object['coordinates'];\n  return {\n    type: 'Point',\n    flatCoordinates,\n    layout: getLayoutForStride(flatCoordinates.length),\n  };\n}\n\n/**\n * @param {GeoJSONLineString} object Object.\n * @return {import(\"./Feature.js\").GeometryObject} LineString geometry.\n */\nfunction readLineStringGeometry(object) {\n  const coordinates = object['coordinates'];\n  const flatCoordinates = coordinates.flat();\n  return {\n    type: 'LineString',\n    flatCoordinates,\n    ends: [flatCoordinates.length],\n    layout: getLayoutForStride(coordinates[0]?.length || 2),\n  };\n}\n\n/**\n * @param {GeoJSONMultiLineString} object Object.\n * @return {import(\"./Feature.js\").GeometryObject} MultiLineString geometry.\n */\nfunction readMultiLineStringGeometry(object) {\n  const coordinates = object['coordinates'];\n  const stride = coordinates[0]?.[0]?.length || 2;\n  const flatCoordinates = [];\n  const ends = deflateCoordinatesArray(flatCoordinates, 0, coordinates, stride);\n  return {\n    type: 'MultiLineString',\n    flatCoordinates,\n    ends,\n    layout: getLayoutForStride(stride),\n  };\n}\n\n/**\n * @param {GeoJSONMultiPoint} object Object.\n * @return {import(\"./Feature.js\").GeometryObject} MultiPoint geometry.\n */\nfunction readMultiPointGeometry(object) {\n  const coordinates = object['coordinates'];\n  return {\n    type: 'MultiPoint',\n    flatCoordinates: coordinates.flat(),\n    layout: getLayoutForStride(coordinates[0]?.length || 2),\n  };\n}\n\n/**\n * @param {GeoJSONMultiPolygon} object Object.\n * @return {import(\"./Feature.js\").GeometryObject} MultiPolygon geometry.\n */\nfunction readMultiPolygonGeometry(object) {\n  const coordinates = object['coordinates'];\n  const flatCoordinates = [];\n  const stride = coordinates[0]?.[0]?.[0].length || 2;\n  const endss = deflateMultiCoordinatesArray(\n    flatCoordinates,\n    0,\n    coordinates,\n    stride,\n  );\n  return {\n    type: 'MultiPolygon',\n    flatCoordinates,\n    ends: endss,\n    layout: getLayoutForStride(stride),\n  };\n}\n\n/**\n * @param {GeoJSONPolygon} object Object.\n * @return {import(\"./Feature.js\").GeometryObject} Polygon.\n */\nfunction readPolygonGeometry(object) {\n  const coordinates = object['coordinates'];\n  const flatCoordinates = [];\n  const stride = coordinates[0]?.[0]?.length;\n  const ends = deflateCoordinatesArray(flatCoordinates, 0, coordinates, stride);\n  return {\n    type: 'Polygon',\n    flatCoordinates,\n    ends,\n    layout: getLayoutForStride(stride),\n  };\n}\n\n/**\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeGeometry(geometry, options) {\n  geometry = transformGeometryWithOptions(geometry, true, options);\n\n  const type = geometry.getType();\n\n  /** @type {GeoJSONGeometry} */\n  let geoJSON;\n  switch (type) {\n    case 'Point': {\n      geoJSON = writePointGeometry(\n        /** @type {import(\"../geom/Point.js\").default} */ (geometry),\n        options,\n      );\n      break;\n    }\n    case 'LineString': {\n      geoJSON = writeLineStringGeometry(\n        /** @type {import(\"../geom/LineString.js\").default} */ (geometry),\n        options,\n      );\n      break;\n    }\n    case 'Polygon': {\n      geoJSON = writePolygonGeometry(\n        /** @type {import(\"../geom/Polygon.js\").default} */ (geometry),\n        options,\n      );\n      break;\n    }\n    case 'MultiPoint': {\n      geoJSON = writeMultiPointGeometry(\n        /** @type {import(\"../geom/MultiPoint.js\").default} */ (geometry),\n        options,\n      );\n      break;\n    }\n    case 'MultiLineString': {\n      geoJSON = writeMultiLineStringGeometry(\n        /** @type {import(\"../geom/MultiLineString.js\").default} */ (geometry),\n        options,\n      );\n      break;\n    }\n    case 'MultiPolygon': {\n      geoJSON = writeMultiPolygonGeometry(\n        /** @type {import(\"../geom/MultiPolygon.js\").default} */ (geometry),\n        options,\n      );\n      break;\n    }\n    case 'GeometryCollection': {\n      geoJSON = writeGeometryCollectionGeometry(\n        /** @type {import(\"../geom/GeometryCollection.js\").default} */ (\n          geometry\n        ),\n        options,\n      );\n      break;\n    }\n    case 'Circle': {\n      geoJSON = {\n        type: 'GeometryCollection',\n        geometries: [],\n      };\n      break;\n    }\n    default: {\n      throw new Error('Unsupported geometry type: ' + type);\n    }\n  }\n  return geoJSON;\n}\n\n/**\n * @param {import(\"../geom/GeometryCollection.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometryCollection} GeoJSON geometry collection.\n */\nfunction writeGeometryCollectionGeometry(geometry, options) {\n  options = Object.assign({}, options);\n  delete options.featureProjection;\n  const geometries = geometry.getGeometriesArray().map(function (geometry) {\n    return writeGeometry(geometry, options);\n  });\n  return {\n    type: 'GeometryCollection',\n    geometries: geometries,\n  };\n}\n\n/**\n * @param {import(\"../geom/LineString.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeLineStringGeometry(geometry, options) {\n  return {\n    type: 'LineString',\n    coordinates: geometry.getCoordinates(),\n  };\n}\n\n/**\n * @param {import(\"../geom/MultiLineString.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiLineStringGeometry(geometry, options) {\n  return {\n    type: 'MultiLineString',\n    coordinates: geometry.getCoordinates(),\n  };\n}\n\n/**\n * @param {import(\"../geom/MultiPoint.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPointGeometry(geometry, options) {\n  return {\n    type: 'MultiPoint',\n    coordinates: geometry.getCoordinates(),\n  };\n}\n\n/**\n * @param {import(\"../geom/MultiPolygon.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writeMultiPolygonGeometry(geometry, options) {\n  let right;\n  if (options) {\n    right = options.rightHanded;\n  }\n  return {\n    type: 'MultiPolygon',\n    coordinates: geometry.getCoordinates(right),\n  };\n}\n\n/**\n * @param {import(\"../geom/Point.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePointGeometry(geometry, options) {\n  return {\n    type: 'Point',\n    coordinates: geometry.getCoordinates(),\n  };\n}\n\n/**\n * @param {import(\"../geom/Polygon.js\").default} geometry Geometry.\n * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n * @return {GeoJSONGeometry} GeoJSON geometry.\n */\nfunction writePolygonGeometry(geometry, options) {\n  let right;\n  if (options) {\n    right = options.rightHanded;\n  }\n  return {\n    type: 'Polygon',\n    coordinates: geometry.getCoordinates(right),\n  };\n}\n\nexport default GeoJSON;\n","/**\n * @module ol/format/XMLFeature\n */\nimport {extend} from '../array.js';\nimport FeatureFormat from '../format/Feature.js';\nimport {abstract} from '../util.js';\nimport {getXMLSerializer, isDocument, parse} from '../xml.js';\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for XML feature formats.\n *\n * @abstract\n */\nclass XMLFeature extends FeatureFormat {\n  constructor() {\n    super();\n\n    /**\n     * @type {XMLSerializer}\n     * @private\n     */\n    this.xmlSerializer_ = getXMLSerializer();\n  }\n\n  /**\n   * @return {import(\"./Feature.js\").Type} Format.\n   * @override\n   */\n  getType() {\n    return 'xml';\n  }\n\n  /**\n   * Read a single feature.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {import(\"../Feature.js\").default} Feature.\n   * @api\n   * @override\n   */\n  readFeature(source, options) {\n    if (!source) {\n      return null;\n    }\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      return this.readFeatureFromDocument(doc, options);\n    }\n    if (isDocument(source)) {\n      return this.readFeatureFromDocument(\n        /** @type {Document} */ (source),\n        options,\n      );\n    }\n    return this.readFeatureFromNode(/** @type {Element} */ (source), options);\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @return {import(\"../Feature.js\").default} Feature.\n   */\n  readFeatureFromDocument(doc, options) {\n    const features = this.readFeaturesFromDocument(doc, options);\n    if (features.length > 0) {\n      return features[0];\n    }\n    return null;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @return {import(\"../Feature.js\").default} Feature.\n   */\n  readFeatureFromNode(node, options) {\n    return null; // not implemented\n  }\n\n  /**\n   * Read all features from a feature collection.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @return {Array<import(\"../Feature.js\").default>} Features.\n   * @api\n   * @override\n   */\n  readFeatures(source, options) {\n    if (!source) {\n      return [];\n    }\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      return this.readFeaturesFromDocument(doc, options);\n    }\n    if (isDocument(source)) {\n      return this.readFeaturesFromDocument(\n        /** @type {Document} */ (source),\n        options,\n      );\n    }\n    return this.readFeaturesFromNode(/** @type {Element} */ (source), options);\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @protected\n   * @return {Array<import(\"../Feature.js\").default>} Features.\n   */\n  readFeaturesFromDocument(doc, options) {\n    /** @type {Array<import(\"../Feature.js\").default>} */\n    const features = [];\n    for (let n = doc.firstChild; n; n = n.nextSibling) {\n      if (n.nodeType == Node.ELEMENT_NODE) {\n        extend(\n          features,\n          this.readFeaturesFromNode(/** @type {Element} */ (n), options),\n        );\n      }\n    }\n    return features;\n  }\n\n  /**\n   * @abstract\n   * @param {Element} node Node.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @protected\n   * @return {Array<import(\"../Feature.js\").default>} Features.\n   */\n  readFeaturesFromNode(node, options) {\n    return abstract();\n  }\n\n  /**\n   * Read a single geometry from a source.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   * @override\n   */\n  readGeometry(source, options) {\n    if (!source) {\n      return null;\n    }\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      return this.readGeometryFromDocument(doc, options);\n    }\n    if (isDocument(source)) {\n      return this.readGeometryFromDocument(\n        /** @type {Document} */ (source),\n        options,\n      );\n    }\n    return this.readGeometryFromNode(/** @type {Element} */ (source), options);\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @protected\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   */\n  readGeometryFromDocument(doc, options) {\n    return null; // not implemented\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @protected\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   */\n  readGeometryFromNode(node, options) {\n    return null; // not implemented\n  }\n\n  /**\n   * Read the projection from the source.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   * @api\n   * @override\n   */\n  readProjection(source) {\n    if (!source) {\n      return null;\n    }\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      return this.readProjectionFromDocument(doc);\n    }\n    if (isDocument(source)) {\n      return this.readProjectionFromDocument(/** @type {Document} */ (source));\n    }\n    return this.readProjectionFromNode(/** @type {Element} */ (source));\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @protected\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   */\n  readProjectionFromDocument(doc) {\n    return this.dataProjection;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @protected\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   */\n  readProjectionFromNode(node) {\n    return this.dataProjection;\n  }\n\n  /**\n   * Encode a feature as string.\n   *\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Encoded feature.\n   * @override\n   */\n  writeFeature(feature, options) {\n    const node = this.writeFeatureNode(feature, options);\n    return this.xmlSerializer_.serializeToString(node);\n  }\n\n  /**\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Options.\n   * @protected\n   * @return {Node} Node.\n   */\n  writeFeatureNode(feature, options) {\n    return null; // not implemented\n  }\n\n  /**\n   * Encode an array of features as string.\n   *\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Result.\n   * @api\n   * @override\n   */\n  writeFeatures(features, options) {\n    const node = this.writeFeaturesNode(features, options);\n    return this.xmlSerializer_.serializeToString(node);\n  }\n\n  /**\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Options.\n   * @return {Node} Node.\n   */\n  writeFeaturesNode(features, options) {\n    return null; // not implemented\n  }\n\n  /**\n   * Encode a geometry as string.\n   *\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Encoded geometry.\n   * @override\n   */\n  writeGeometry(geometry, options) {\n    const node = this.writeGeometryNode(geometry, options);\n    return this.xmlSerializer_.serializeToString(node);\n  }\n\n  /**\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Options.\n   * @return {Node} Node.\n   */\n  writeGeometryNode(geometry, options) {\n    return null; // not implemented\n  }\n}\n\nexport default XMLFeature;\n","/**\n * @module ol/format/KML\n */\nimport Feature from '../Feature.js';\nimport ImageState from '../ImageState.js';\nimport {extend} from '../array.js';\nimport {asArray} from '../color.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {toRadians} from '../math.js';\nimport {get as getProjection} from '../proj.js';\nimport Fill from '../style/Fill.js';\nimport Icon from '../style/Icon.js';\nimport Stroke from '../style/Stroke.js';\nimport Style from '../style/Style.js';\nimport Text from '../style/Text.js';\nimport {\n  OBJECT_PROPERTY_NODE_FACTORY,\n  XML_SCHEMA_INSTANCE_URI,\n  createElementNS,\n  getAllTextContent,\n  isDocument,\n  makeArrayExtender,\n  makeArrayPusher,\n  makeChildAppender,\n  makeObjectPropertySetter,\n  makeReplacer,\n  makeSequence,\n  makeSimpleNodeFactory,\n  makeStructureNS,\n  parse,\n  parseNode,\n  pushParseAndPop,\n  pushSerializeAndPop,\n} from '../xml.js';\nimport {transformGeometryWithOptions} from './Feature.js';\nimport XMLFeature from './XMLFeature.js';\nimport {\n  readBoolean,\n  readDecimal,\n  readString,\n  writeBooleanTextNode,\n  writeDecimalTextNode,\n  writeStringTextNode,\n} from './xsd.js';\n\n/**\n * @typedef {Object} Vec2\n * @property {number} x X coordinate.\n * @property {import(\"../style/Icon.js\").IconAnchorUnits} xunits Units of x.\n * @property {number} y Y coordinate.\n * @property {import(\"../style/Icon.js\").IconAnchorUnits} yunits Units of Y.\n * @property {import(\"../style/Icon.js\").IconOrigin} [origin] Origin.\n */\n\n/**\n * @typedef {Object} GxTrackObject\n * @property {Array<Array<number>>} coordinates Coordinates.\n * @property {Array<number>} whens Whens.\n */\n\n/**\n * @const\n * @type {Array<string>}\n */\nconst GX_NAMESPACE_URIS = ['http://www.google.com/kml/ext/2.2'];\n\n/**\n * @const\n * @type {Array<null|string>}\n */\nconst NAMESPACE_URIS = [\n  null,\n  'http://earth.google.com/kml/2.0',\n  'http://earth.google.com/kml/2.1',\n  'http://earth.google.com/kml/2.2',\n  'http://www.opengis.net/kml/2.2',\n];\n\n/**\n * @const\n * @type {string}\n */\nconst SCHEMA_LOCATION =\n  'http://www.opengis.net/kml/2.2 ' +\n  'https://developers.google.com/kml/schema/kml22gx.xsd';\n\n/**\n * @type {Object<string, import(\"../style/Icon.js\").IconAnchorUnits>}\n */\nconst ICON_ANCHOR_UNITS_MAP = {\n  'fraction': 'fraction',\n  'pixels': 'pixels',\n  'insetPixels': 'pixels',\n};\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst PLACEMARK_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'ExtendedData': extendedDataParser,\n    'Region': regionParser,\n    'MultiGeometry': makeObjectPropertySetter(readMultiGeometry, 'geometry'),\n    'LineString': makeObjectPropertySetter(readLineString, 'geometry'),\n    'LinearRing': makeObjectPropertySetter(readLinearRing, 'geometry'),\n    'Point': makeObjectPropertySetter(readPoint, 'geometry'),\n    'Polygon': makeObjectPropertySetter(readPolygon, 'geometry'),\n    'Style': makeObjectPropertySetter(readStyle),\n    'StyleMap': placemarkStyleMapParser,\n    'address': makeObjectPropertySetter(readString),\n    'description': makeObjectPropertySetter(readString),\n    'name': makeObjectPropertySetter(readString),\n    'open': makeObjectPropertySetter(readBoolean),\n    'phoneNumber': makeObjectPropertySetter(readString),\n    'styleUrl': makeObjectPropertySetter(readStyleURL),\n    'visibility': makeObjectPropertySetter(readBoolean),\n  },\n  makeStructureNS(GX_NAMESPACE_URIS, {\n    'MultiTrack': makeObjectPropertySetter(readGxMultiTrack, 'geometry'),\n    'Track': makeObjectPropertySetter(readGxTrack, 'geometry'),\n  }),\n);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst NETWORK_LINK_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'ExtendedData': extendedDataParser,\n  'Region': regionParser,\n  'Link': linkParser,\n  'address': makeObjectPropertySetter(readString),\n  'description': makeObjectPropertySetter(readString),\n  'name': makeObjectPropertySetter(readString),\n  'open': makeObjectPropertySetter(readBoolean),\n  'phoneNumber': makeObjectPropertySetter(readString),\n  'visibility': makeObjectPropertySetter(readBoolean),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst LINK_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'href': makeObjectPropertySetter(readURI),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst CAMERA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  Altitude: makeObjectPropertySetter(readDecimal),\n  Longitude: makeObjectPropertySetter(readDecimal),\n  Latitude: makeObjectPropertySetter(readDecimal),\n  Tilt: makeObjectPropertySetter(readDecimal),\n  AltitudeMode: makeObjectPropertySetter(readString),\n  Heading: makeObjectPropertySetter(readDecimal),\n  Roll: makeObjectPropertySetter(readDecimal),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst REGION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'LatLonAltBox': latLonAltBoxParser,\n  'Lod': lodParser,\n});\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst KML_SEQUENCE = makeStructureNS(NAMESPACE_URIS, ['Document', 'Placemark']);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst KML_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'Document': makeChildAppender(writeDocument),\n  'Placemark': makeChildAppender(writePlacemark),\n});\n\n/**\n * @type {import(\"../color.js\").Color}\n */\nlet DEFAULT_COLOR;\n\n/**\n * @type {Fill|null}\n */\nlet DEFAULT_FILL_STYLE = null;\n\n/**\n * Get the default fill style (or null if not yet set).\n * @return {Fill|null} The default fill style.\n */\nexport function getDefaultFillStyle() {\n  return DEFAULT_FILL_STYLE;\n}\n\n/**\n * @type {import(\"../size.js\").Size}\n */\nlet DEFAULT_IMAGE_STYLE_ANCHOR;\n\n/**\n * @type {import(\"../style/Icon.js\").IconAnchorUnits}\n */\nlet DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS;\n\n/**\n * @type {import(\"../style/Icon.js\").IconAnchorUnits}\n */\nlet DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS;\n\n/**\n * @type {import(\"../size.js\").Size}\n */\nlet DEFAULT_IMAGE_STYLE_SIZE;\n\n/**\n * @type {string}\n */\nlet DEFAULT_IMAGE_STYLE_SRC;\n\n/**\n * @type {import(\"../style/Image.js\").default|null}\n */\nlet DEFAULT_IMAGE_STYLE = null;\n\n/**\n * Get the default image style (or null if not yet set).\n * @return {import(\"../style/Image.js\").default|null} The default image style.\n */\nexport function getDefaultImageStyle() {\n  return DEFAULT_IMAGE_STYLE;\n}\n\n/**\n * @type {string}\n */\nlet DEFAULT_NO_IMAGE_STYLE;\n\n/**\n * @type {Stroke|null}\n */\nlet DEFAULT_STROKE_STYLE = null;\n\n/**\n * Get the default stroke style (or null if not yet set).\n * @return {Stroke|null} The default stroke style.\n */\nexport function getDefaultStrokeStyle() {\n  return DEFAULT_STROKE_STYLE;\n}\n\n/**\n * @type {Stroke}\n */\nlet DEFAULT_TEXT_STROKE_STYLE;\n\n/**\n * @type {Text|null}\n */\nlet DEFAULT_TEXT_STYLE = null;\n\n/**\n * Get the default text style (or null if not yet set).\n * @return {Text|null} The default text style.\n */\nexport function getDefaultTextStyle() {\n  return DEFAULT_TEXT_STYLE;\n}\n\n/**\n * @type {Style|null}\n */\nlet DEFAULT_STYLE = null;\n\n/**\n * Get the default style (or null if not yet set).\n * @return {Style|null} The default style.\n */\nexport function getDefaultStyle() {\n  return DEFAULT_STYLE;\n}\n\n/**\n * @type {Array<Style>|null}\n */\nlet DEFAULT_STYLE_ARRAY = null;\n\n/**\n * Get the default style array (or null if not yet set).\n * @return {Array<Style>|null} The default style.\n */\nexport function getDefaultStyleArray() {\n  return DEFAULT_STYLE_ARRAY;\n}\n\n/**\n * Function that returns the scale needed to normalize an icon image to 32 pixels.\n * @param {import(\"../size.js\").Size} size Image size.\n * @return {number} Scale.\n */\nfunction scaleForSize(size) {\n  return 32 / Math.min(size[0], size[1]);\n}\n\nfunction createStyleDefaults() {\n  DEFAULT_COLOR = [255, 255, 255, 1];\n\n  DEFAULT_FILL_STYLE = new Fill({\n    color: DEFAULT_COLOR,\n  });\n\n  DEFAULT_IMAGE_STYLE_ANCHOR = [20, 2];\n\n  DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS = 'pixels';\n\n  DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS = 'pixels';\n\n  DEFAULT_IMAGE_STYLE_SIZE = [64, 64];\n\n  DEFAULT_IMAGE_STYLE_SRC =\n    'https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png';\n\n  DEFAULT_IMAGE_STYLE = new Icon({\n    anchor: DEFAULT_IMAGE_STYLE_ANCHOR,\n    anchorOrigin: 'bottom-left',\n    anchorXUnits: DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS,\n    anchorYUnits: DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS,\n    crossOrigin: 'anonymous',\n    rotation: 0,\n    scale: scaleForSize(DEFAULT_IMAGE_STYLE_SIZE),\n    size: DEFAULT_IMAGE_STYLE_SIZE,\n    src: DEFAULT_IMAGE_STYLE_SRC,\n  });\n\n  DEFAULT_NO_IMAGE_STYLE = 'NO_IMAGE';\n\n  DEFAULT_STROKE_STYLE = new Stroke({\n    color: DEFAULT_COLOR,\n    width: 1,\n  });\n\n  DEFAULT_TEXT_STROKE_STYLE = new Stroke({\n    color: [51, 51, 51, 1],\n    width: 2,\n  });\n\n  DEFAULT_TEXT_STYLE = new Text({\n    font: 'bold 16px Helvetica',\n    fill: DEFAULT_FILL_STYLE,\n    stroke: DEFAULT_TEXT_STROKE_STYLE,\n    scale: 0.8,\n  });\n\n  DEFAULT_STYLE = new Style({\n    fill: DEFAULT_FILL_STYLE,\n    image: DEFAULT_IMAGE_STYLE,\n    text: DEFAULT_TEXT_STYLE,\n    stroke: DEFAULT_STROKE_STYLE,\n    zIndex: 0,\n  });\n\n  DEFAULT_STYLE_ARRAY = [DEFAULT_STYLE];\n}\n\n/**\n * @type {HTMLTextAreaElement}\n */\nlet TEXTAREA;\n\n/**\n * A function that takes a url `{string}` and returns a url `{string}`.\n * Might be used to change an icon path or to substitute a\n * data url obtained from a KMZ array buffer.\n *\n * @typedef {function(string):string} IconUrlFunction\n * @api\n */\n\n/**\n * Function that returns a url unchanged.\n * @param {string} href Input url.\n * @return {string} Output url.\n */\nfunction defaultIconUrlFunction(href) {\n  return href;\n}\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [extractStyles=true] Extract styles from the KML.\n * @property {boolean} [showPointNames=true] Show names as labels for placemarks which contain points.\n * @property {Array<Style>} [defaultStyle] Default style. The\n * default default style is the same as Google Earth.\n * @property {boolean} [writeStyles=true] Write styles into KML.\n * @property {null|string} [crossOrigin='anonymous'] The `crossOrigin` attribute for loaded images. Note that you must provide a\n * `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {IconUrlFunction} [iconUrlFunction] Function that takes a url string and returns a url string.\n * Might be used to change an icon path or to substitute a data url obtained from a KMZ array buffer.\n */\n\n/**\n * @classdesc\n * Feature format for reading and writing data in the KML format.\n *\n * {@link module:ol/format/KML~KML#readFeature} will read the first feature from\n * a KML source.\n *\n * MultiGeometries are converted into GeometryCollections if they are a mix of\n * geometry types, and into MultiPoint/MultiLineString/MultiPolygon if they are\n * all of the same type.\n *\n * @api\n */\nclass KML extends XMLFeature {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    options = options ? options : {};\n\n    if (!DEFAULT_STYLE_ARRAY) {\n      createStyleDefaults();\n    }\n\n    /**\n     * @type {import(\"../proj/Projection.js\").default}\n     */\n    this.dataProjection = getProjection('EPSG:4326');\n\n    /**\n     * @private\n     * @type {Array<Style>}\n     */\n    this.defaultStyle_ = options.defaultStyle\n      ? options.defaultStyle\n      : DEFAULT_STYLE_ARRAY;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.extractStyles_ =\n      options.extractStyles !== undefined ? options.extractStyles : true;\n\n    /**\n     * @type {boolean}\n     */\n    this.writeStyles_ =\n      options.writeStyles !== undefined ? options.writeStyles : true;\n\n    /**\n     * @private\n     * @type {!Object<string, (Array<Style>|string)>}\n     */\n    this.sharedStyles_ = {};\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.showPointNames_ =\n      options.showPointNames !== undefined ? options.showPointNames : true;\n\n    /**\n     * @type {null|string}\n     */\n    this.crossOrigin_ =\n      options.crossOrigin !== undefined ? options.crossOrigin : 'anonymous';\n\n    /**\n     * @type {ReferrerPolicy}\n     */\n    this.referrerPolicy_ = options.referrerPolicy;\n\n    /**\n     * @type {IconUrlFunction}\n     */\n    this.iconUrlFunction_ = options.iconUrlFunction\n      ? options.iconUrlFunction\n      : defaultIconUrlFunction;\n\n    this.supportedMediaTypes = ['application/vnd.google-earth.kml+xml'];\n  }\n\n  /**\n   * @param {Node} node Node.\n   * @param {Array<*>} objectStack Object stack.\n   * @private\n   * @return {Array<Feature>|undefined} Features.\n   */\n  readDocumentOrFolder_(node, objectStack) {\n    // FIXME use scope somehow\n    const parsersNS = makeStructureNS(NAMESPACE_URIS, {\n      'Document': makeArrayExtender(this.readDocumentOrFolder_, this),\n      'Folder': makeArrayExtender(this.readDocumentOrFolder_, this),\n      'Placemark': makeArrayPusher(this.readPlacemark_, this),\n      'Style': this.readSharedStyle_.bind(this),\n      'StyleMap': this.readSharedStyleMap_.bind(this),\n    });\n    /** @type {Array<Feature>} */\n    // @ts-ignore\n    const features = pushParseAndPop([], parsersNS, node, objectStack, this);\n    if (features) {\n      return features;\n    }\n    return undefined;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @param {Array<*>} objectStack Object stack.\n   * @private\n   * @return {Feature|undefined} Feature.\n   */\n  readPlacemark_(node, objectStack) {\n    const object = pushParseAndPop(\n      {'geometry': null},\n      PLACEMARK_PARSERS,\n      node,\n      objectStack,\n      this,\n    );\n    if (!object) {\n      return undefined;\n    }\n    const feature = new Feature();\n    const id = node.getAttribute('id');\n    if (id !== null) {\n      feature.setId(id);\n    }\n    const options = /** @type {import(\"./Feature.js\").ReadOptions} */ (\n      objectStack[0]\n    );\n\n    const geometry = object['geometry'];\n    if (geometry) {\n      transformGeometryWithOptions(geometry, false, options);\n    }\n    feature.setGeometry(geometry);\n    delete object['geometry'];\n\n    if (this.extractStyles_) {\n      const style = object['Style'];\n      const styleUrl = object['styleUrl'];\n      const styleFunction = createFeatureStyleFunction(\n        style,\n        styleUrl,\n        this.defaultStyle_,\n        this.sharedStyles_,\n        this.showPointNames_,\n      );\n      feature.setStyle(styleFunction);\n    }\n    delete object['Style'];\n    // we do not remove the styleUrl property from the object, so it\n    // gets stored on feature when setProperties is called\n\n    feature.setProperties(object, true);\n\n    return feature;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @param {Array<*>} objectStack Object stack.\n   * @private\n   */\n  readSharedStyle_(node, objectStack) {\n    const id = node.getAttribute('id');\n    if (id !== null) {\n      const style = readStyle.call(this, node, objectStack);\n      if (style) {\n        let styleUri;\n        let baseURI = node.baseURI;\n        if (!baseURI || baseURI == 'about:blank') {\n          baseURI = window.location.href;\n        }\n        if (baseURI) {\n          const url = new URL('#' + id, baseURI);\n          styleUri = url.href;\n        } else {\n          styleUri = '#' + id;\n        }\n        this.sharedStyles_[styleUri] = style;\n      }\n    }\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @param {Array<*>} objectStack Object stack.\n   * @private\n   */\n  readSharedStyleMap_(node, objectStack) {\n    const id = node.getAttribute('id');\n    if (id === null) {\n      return;\n    }\n    const styleMapValue = readStyleMapValue.call(this, node, objectStack);\n    if (!styleMapValue) {\n      return;\n    }\n    let styleUri;\n    let baseURI = node.baseURI;\n    if (!baseURI || baseURI == 'about:blank') {\n      baseURI = window.location.href;\n    }\n    if (baseURI) {\n      const url = new URL('#' + id, baseURI);\n      styleUri = url.href;\n    } else {\n      styleUri = '#' + id;\n    }\n    this.sharedStyles_[styleUri] = styleMapValue;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @return {import(\"../Feature.js\").default} Feature.\n   * @override\n   */\n  readFeatureFromNode(node, options) {\n    if (!NAMESPACE_URIS.includes(node.namespaceURI)) {\n      return null;\n    }\n    const feature = this.readPlacemark_(node, [\n      this.getReadOptions(node, options),\n    ]);\n    if (feature) {\n      return feature;\n    }\n    return null;\n  }\n\n  /**\n   * @protected\n   * @param {Element} node Node.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Options.\n   * @return {Array<import(\"../Feature.js\").default>} Features.\n   * @override\n   */\n  readFeaturesFromNode(node, options) {\n    if (!NAMESPACE_URIS.includes(node.namespaceURI)) {\n      return [];\n    }\n    let features;\n    const localName = node.localName;\n    if (localName == 'Document' || localName == 'Folder') {\n      features = this.readDocumentOrFolder_(node, [\n        this.getReadOptions(node, options),\n      ]);\n      if (features) {\n        return features;\n      }\n      return [];\n    }\n    if (localName == 'Placemark') {\n      const feature = this.readPlacemark_(node, [\n        this.getReadOptions(node, options),\n      ]);\n      if (feature) {\n        return [feature];\n      }\n      return [];\n    }\n    if (localName == 'kml') {\n      features = [];\n      for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n        const fs = this.readFeaturesFromNode(n, options);\n        if (fs) {\n          extend(features, fs);\n        }\n      }\n      return features;\n    }\n    return [];\n  }\n\n  /**\n   * Read the name of the KML.\n   *\n   * @param {Document|Element|string} source Source.\n   * @return {string|undefined} Name.\n   * @api\n   */\n  readName(source) {\n    if (!source) {\n      return undefined;\n    }\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      return this.readNameFromDocument(doc);\n    }\n    if (isDocument(source)) {\n      return this.readNameFromDocument(/** @type {Document} */ (source));\n    }\n    return this.readNameFromNode(/** @type {Element} */ (source));\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @return {string|undefined} Name.\n   */\n  readNameFromDocument(doc) {\n    for (let n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {\n      if (n.nodeType == Node.ELEMENT_NODE) {\n        const name = this.readNameFromNode(/** @type {Element} */ (n));\n        if (name) {\n          return name;\n        }\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @return {string|undefined} Name.\n   */\n  readNameFromNode(node) {\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      if (NAMESPACE_URIS.includes(n.namespaceURI) && n.localName == 'name') {\n        return readString(n);\n      }\n    }\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      const localName = n.localName;\n      if (\n        NAMESPACE_URIS.includes(n.namespaceURI) &&\n        (localName == 'Document' ||\n          localName == 'Folder' ||\n          localName == 'Placemark' ||\n          localName == 'kml')\n      ) {\n        const name = this.readNameFromNode(n);\n        if (name) {\n          return name;\n        }\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Read the network links of the KML.\n   *\n   * @param {Document|Element|string} source Source.\n   * @return {Array<Object>} Network links.\n   * @api\n   */\n  readNetworkLinks(source) {\n    const networkLinks = [];\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      extend(networkLinks, this.readNetworkLinksFromDocument(doc));\n    } else if (isDocument(source)) {\n      extend(\n        networkLinks,\n        this.readNetworkLinksFromDocument(/** @type {Document} */ (source)),\n      );\n    } else {\n      extend(\n        networkLinks,\n        this.readNetworkLinksFromNode(/** @type {Element} */ (source)),\n      );\n    }\n    return networkLinks;\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @return {Array<Object>} Network links.\n   */\n  readNetworkLinksFromDocument(doc) {\n    const networkLinks = [];\n    for (let n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {\n      if (n.nodeType == Node.ELEMENT_NODE) {\n        extend(\n          networkLinks,\n          this.readNetworkLinksFromNode(/** @type {Element} */ (n)),\n        );\n      }\n    }\n    return networkLinks;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @return {Array<Object>} Network links.\n   */\n  readNetworkLinksFromNode(node) {\n    const networkLinks = [];\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      if (\n        NAMESPACE_URIS.includes(n.namespaceURI) &&\n        n.localName == 'NetworkLink'\n      ) {\n        const obj = pushParseAndPop({}, NETWORK_LINK_PARSERS, n, []);\n        networkLinks.push(obj);\n      }\n    }\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      const localName = n.localName;\n      if (\n        NAMESPACE_URIS.includes(n.namespaceURI) &&\n        (localName == 'Document' || localName == 'Folder' || localName == 'kml')\n      ) {\n        extend(networkLinks, this.readNetworkLinksFromNode(n));\n      }\n    }\n    return networkLinks;\n  }\n\n  /**\n   * Read the regions of the KML.\n   *\n   * @param {Document|Element|string} source Source.\n   * @return {Array<Object>} Regions.\n   * @api\n   */\n  readRegion(source) {\n    const regions = [];\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      extend(regions, this.readRegionFromDocument(doc));\n    } else if (isDocument(source)) {\n      extend(\n        regions,\n        this.readRegionFromDocument(/** @type {Document} */ (source)),\n      );\n    } else {\n      extend(regions, this.readRegionFromNode(/** @type {Element} */ (source)));\n    }\n    return regions;\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @return {Array<Object>} Region.\n   */\n  readRegionFromDocument(doc) {\n    const regions = [];\n    for (let n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {\n      if (n.nodeType == Node.ELEMENT_NODE) {\n        extend(regions, this.readRegionFromNode(/** @type {Element} */ (n)));\n      }\n    }\n    return regions;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @return {Array<Object>} Region.\n   * @api\n   */\n  readRegionFromNode(node) {\n    const regions = [];\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      if (NAMESPACE_URIS.includes(n.namespaceURI) && n.localName == 'Region') {\n        const obj = pushParseAndPop({}, REGION_PARSERS, n, []);\n        regions.push(obj);\n      }\n    }\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      const localName = n.localName;\n      if (\n        NAMESPACE_URIS.includes(n.namespaceURI) &&\n        (localName == 'Document' || localName == 'Folder' || localName == 'kml')\n      ) {\n        extend(regions, this.readRegionFromNode(n));\n      }\n    }\n    return regions;\n  }\n\n  /**\n   * @typedef {Object} KMLCamera Specifies the observer's viewpoint and associated view parameters.\n   * @property {number} [Latitude] Latitude of the camera.\n   * @property {number} [Longitude] Longitude of the camera.\n   * @property {number} [Altitude] Altitude of the camera.\n   * @property {string} [AltitudeMode] Floor-related altitude mode.\n   * @property {number} [Heading] Horizontal camera rotation.\n   * @property {number} [Tilt] Lateral camera rotation.\n   * @property {number} [Roll] Vertical camera rotation.\n   */\n\n  /**\n   * Read the cameras of the KML.\n   *\n   * @param {Document|Element|string} source Source.\n   * @return {Array<KMLCamera>} Cameras.\n   * @api\n   */\n  readCamera(source) {\n    const cameras = [];\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      extend(cameras, this.readCameraFromDocument(doc));\n    } else if (isDocument(source)) {\n      extend(\n        cameras,\n        this.readCameraFromDocument(/** @type {Document} */ (source)),\n      );\n    } else {\n      extend(cameras, this.readCameraFromNode(/** @type {Element} */ (source)));\n    }\n    return cameras;\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @return {Array<KMLCamera>} Cameras.\n   */\n  readCameraFromDocument(doc) {\n    const cameras = [];\n    for (let n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {\n      if (n.nodeType === Node.ELEMENT_NODE) {\n        extend(cameras, this.readCameraFromNode(/** @type {Element} */ (n)));\n      }\n    }\n    return cameras;\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @return {Array<KMLCamera>} Cameras.\n   * @api\n   */\n  readCameraFromNode(node) {\n    const cameras = [];\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      if (NAMESPACE_URIS.includes(n.namespaceURI) && n.localName === 'Camera') {\n        const obj = pushParseAndPop({}, CAMERA_PARSERS, n, []);\n        cameras.push(obj);\n      }\n    }\n    for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n      const localName = n.localName;\n      if (\n        NAMESPACE_URIS.includes(n.namespaceURI) &&\n        (localName === 'Document' ||\n          localName === 'Folder' ||\n          localName === 'Placemark' ||\n          localName === 'kml')\n      ) {\n        extend(cameras, this.readCameraFromNode(n));\n      }\n    }\n    return cameras;\n  }\n\n  /**\n   * Encode an array of features in the KML format as an XML node. GeometryCollections,\n   * MultiPoints, MultiLineStrings, and MultiPolygons are output as MultiGeometries.\n   *\n   * @param {Array<Feature>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Options.\n   * @return {Node} Node.\n   * @api\n   * @override\n   */\n  writeFeaturesNode(features, options) {\n    options = this.adaptOptions(options);\n    const kml = createElementNS(NAMESPACE_URIS[4], 'kml');\n    const xmlnsUri = 'http://www.w3.org/2000/xmlns/';\n    kml.setAttributeNS(xmlnsUri, 'xmlns:gx', GX_NAMESPACE_URIS[0]);\n    kml.setAttributeNS(xmlnsUri, 'xmlns:xsi', XML_SCHEMA_INSTANCE_URI);\n    kml.setAttributeNS(\n      XML_SCHEMA_INSTANCE_URI,\n      'xsi:schemaLocation',\n      SCHEMA_LOCATION,\n    );\n\n    const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {\n        node: kml,\n      };\n    /** @type {!Object<string, (Array<Feature>|Feature|undefined)>} */\n    const properties = {};\n    if (features.length > 1) {\n      properties['Document'] = features;\n    } else if (features.length == 1) {\n      properties['Placemark'] = features[0];\n    }\n    const orderedKeys = KML_SEQUENCE[kml.namespaceURI];\n    const values = makeSequence(properties, orderedKeys);\n    pushSerializeAndPop(\n      context,\n      KML_SERIALIZERS,\n      OBJECT_PROPERTY_NODE_FACTORY,\n      values,\n      [options],\n      orderedKeys,\n      this,\n    );\n    return kml;\n  }\n}\n\n/**\n * @param {Style|undefined} foundStyle Style.\n * @param {string} name Name.\n * @return {Style} style Style.\n */\nfunction createNameStyleFunction(foundStyle, name) {\n  const textOffset = [0, 0];\n  /** @type {CanvasTextAlign} */\n  let textAlign = 'start';\n  const imageStyle = foundStyle.getImage();\n  if (imageStyle) {\n    const imageSize = imageStyle.getSize();\n    if (imageSize && imageSize.length == 2) {\n      const imageScale = imageStyle.getScaleArray();\n      const anchor = imageStyle.getAnchor();\n      // Offset the label to be centered to the right of the icon,\n      // if there is one.\n      textOffset[0] = imageScale[0] * (imageSize[0] - anchor[0]);\n      textOffset[1] = imageScale[1] * (imageSize[1] / 2 - anchor[1]);\n      textAlign = 'left';\n    }\n  }\n  let textStyle = foundStyle.getText();\n  if (textStyle) {\n    // clone the text style, customizing it with name, alignments and offset.\n    // Note that kml does not support many text options that OpenLayers does (rotation, textBaseline).\n    textStyle = textStyle.clone();\n    textStyle.setFont(textStyle.getFont() || DEFAULT_TEXT_STYLE.getFont());\n    textStyle.setScale(textStyle.getScale() || DEFAULT_TEXT_STYLE.getScale());\n    textStyle.setFill(textStyle.getFill() || DEFAULT_TEXT_STYLE.getFill());\n    textStyle.setStroke(textStyle.getStroke() || DEFAULT_TEXT_STROKE_STYLE);\n  } else {\n    textStyle = DEFAULT_TEXT_STYLE.clone();\n  }\n  textStyle.setText(name);\n  textStyle.setOffsetX(textOffset[0]);\n  textStyle.setOffsetY(textOffset[1]);\n  textStyle.setTextAlign(textAlign);\n\n  const nameStyle = new Style({\n    image: imageStyle,\n    text: textStyle,\n  });\n  return nameStyle;\n}\n\n/**\n * @param {Array<Style>|undefined} style Style.\n * @param {string} styleUrl Style URL.\n * @param {Array<Style>} defaultStyle Default style.\n * @param {!Object<string, (Array<Style>|string)>} sharedStyles Shared styles.\n * @param {boolean|undefined} showPointNames true to show names for point placemarks.\n * @return {import(\"../style/Style.js\").StyleFunction} Feature style function.\n */\nfunction createFeatureStyleFunction(\n  style,\n  styleUrl,\n  defaultStyle,\n  sharedStyles,\n  showPointNames,\n) {\n  return (\n    /**\n     * @param {Feature} feature feature.\n     * @param {number} resolution Resolution.\n     * @return {Array<Style>|Style} Style.\n     */\n    function (feature, resolution) {\n      let drawName = showPointNames;\n      let name = '';\n      let multiGeometryPoints = [];\n      if (drawName) {\n        const geometry = feature.getGeometry();\n        if (geometry) {\n          if (geometry instanceof GeometryCollection) {\n            multiGeometryPoints = geometry\n              .getGeometriesArrayRecursive()\n              .filter(function (geometry) {\n                const type = geometry.getType();\n                return type === 'Point' || type === 'MultiPoint';\n              });\n            drawName = multiGeometryPoints.length > 0;\n          } else {\n            const type = geometry.getType();\n            drawName = type === 'Point' || type === 'MultiPoint';\n          }\n        }\n      }\n\n      if (drawName) {\n        name = /** @type {string} */ (feature.get('name'));\n        drawName = drawName && !!name;\n        // convert any html character codes\n        if (drawName && /&[^&]+;/.test(name)) {\n          if (!TEXTAREA) {\n            TEXTAREA = document.createElement('textarea');\n          }\n          TEXTAREA.innerHTML = name;\n          name = TEXTAREA.value;\n        }\n      }\n\n      let featureStyle = defaultStyle;\n      if (style) {\n        featureStyle = style;\n      } else if (styleUrl) {\n        featureStyle = findStyle(styleUrl, defaultStyle, sharedStyles);\n      }\n      if (drawName) {\n        const nameStyle = createNameStyleFunction(featureStyle[0], name);\n        if (multiGeometryPoints.length > 0) {\n          // in multigeometries restrict the name style to points and create a\n          // style without image or text for geometries requiring fill or stroke\n          // including any polygon specific style if there is one\n          nameStyle.setGeometry(new GeometryCollection(multiGeometryPoints));\n          const baseStyle = new Style({\n            geometry: featureStyle[0].getGeometry(),\n            image: null,\n            fill: featureStyle[0].getFill(),\n            stroke: featureStyle[0].getStroke(),\n            text: null,\n          });\n          return [nameStyle, baseStyle].concat(featureStyle.slice(1));\n        }\n        return nameStyle;\n      }\n      return featureStyle;\n    }\n  );\n}\n\n/**\n * @param {Array<Style>|string|undefined} styleValue Style value.\n * @param {Array<Style>} defaultStyle Default style.\n * @param {!Object<string, (Array<Style>|string)>} sharedStyles\n * Shared styles.\n * @return {Array<Style>} Style.\n */\nfunction findStyle(styleValue, defaultStyle, sharedStyles) {\n  if (Array.isArray(styleValue)) {\n    return styleValue;\n  }\n  if (typeof styleValue === 'string') {\n    return findStyle(sharedStyles[styleValue], defaultStyle, sharedStyles);\n  }\n  return defaultStyle;\n}\n\n/**\n * @param {Node} node Node.\n * @return {import(\"../color.js\").Color|undefined} Color.\n */\nfunction readColor(node) {\n  const s = getAllTextContent(node, false);\n  // The KML specification states that colors should not include a leading `#`\n  // but we tolerate them.\n  const m = /^\\s*#?\\s*([0-9A-Fa-f]{8})\\s*$/.exec(s);\n  if (m) {\n    const hexColor = m[1];\n    return [\n      parseInt(hexColor.substr(6, 2), 16),\n      parseInt(hexColor.substr(4, 2), 16),\n      parseInt(hexColor.substr(2, 2), 16),\n      parseInt(hexColor.substr(0, 2), 16) / 255,\n    ];\n  }\n  return undefined;\n}\n\n/**\n * @param {Node} node Node.\n * @return {Array<number>|undefined} Flat coordinates.\n */\nexport function readFlatCoordinates(node) {\n  let s = getAllTextContent(node, false);\n  const flatCoordinates = [];\n  // The KML specification states that coordinate tuples should not include\n  // spaces, but we tolerate them.\n  s = s.replace(/\\s*,\\s*/g, ',');\n  const re =\n    /^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?),([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)(?:\\s+|,|$)(?:([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)(?:\\s+|$))?\\s*/i;\n  let m;\n  while ((m = re.exec(s))) {\n    const x = parseFloat(m[1]);\n    const y = parseFloat(m[2]);\n    const z = m[3] ? parseFloat(m[3]) : 0;\n    flatCoordinates.push(x, y, z);\n    s = s.substr(m[0].length);\n  }\n  if (s !== '') {\n    return undefined;\n  }\n  return flatCoordinates;\n}\n\n/**\n * @param {Node} node Node.\n * @return {string} URI.\n */\nfunction readURI(node) {\n  const s = getAllTextContent(node, false).trim();\n  let baseURI = node.baseURI;\n  if (!baseURI || baseURI == 'about:blank') {\n    baseURI = window.location.href;\n  }\n  if (baseURI) {\n    const url = new URL(s, baseURI);\n    return url.href;\n  }\n  return s;\n}\n\n/**\n * @param {Node} node Node.\n * @return {string} URI.\n */\nfunction readStyleURL(node) {\n  // KML files in the wild occasionally forget the leading\n  // `#` on styleUrlsdefined in the same document.\n  const s = getAllTextContent(node, false)\n    .trim()\n    .replace(/^(?!.*#)/, '#');\n  let baseURI = node.baseURI;\n  if (!baseURI || baseURI == 'about:blank') {\n    baseURI = window.location.href;\n  }\n  if (baseURI) {\n    const url = new URL(s, baseURI);\n    return url.href;\n  }\n  return s;\n}\n\n/**\n * @param {Element} node Node.\n * @return {Vec2} Vec2.\n */\nfunction readVec2(node) {\n  const xunits = node.getAttribute('xunits');\n  const yunits = node.getAttribute('yunits');\n  /** @type {import('../style/Icon.js').IconOrigin} */\n  let origin;\n  if (xunits !== 'insetPixels') {\n    if (yunits !== 'insetPixels') {\n      origin = 'bottom-left';\n    } else {\n      origin = 'top-left';\n    }\n  } else {\n    if (yunits !== 'insetPixels') {\n      origin = 'bottom-right';\n    } else {\n      origin = 'top-right';\n    }\n  }\n  return {\n    x: parseFloat(node.getAttribute('x')),\n    xunits: ICON_ANCHOR_UNITS_MAP[xunits],\n    y: parseFloat(node.getAttribute('y')),\n    yunits: ICON_ANCHOR_UNITS_MAP[yunits],\n    origin: origin,\n  };\n}\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Scale.\n */\nfunction readScale(node) {\n  return readDecimal(node);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst STYLE_MAP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Pair': pairDataParser,\n});\n\n/**\n * @this {KML}\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array<Style>|string|undefined} StyleMap.\n */\nfunction readStyleMapValue(node, objectStack) {\n  return pushParseAndPop(undefined, STYLE_MAP_PARSERS, node, objectStack, this);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst ICON_STYLE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Icon': makeObjectPropertySetter(readIcon),\n  'color': makeObjectPropertySetter(readColor),\n  'heading': makeObjectPropertySetter(readDecimal),\n  'hotSpot': makeObjectPropertySetter(readVec2),\n  'scale': makeObjectPropertySetter(readScale),\n});\n\n/**\n * @this {KML}\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction iconStyleParser(node, objectStack) {\n  // FIXME refreshMode\n  // FIXME refreshInterval\n  // FIXME viewRefreshTime\n  // FIXME viewBoundScale\n  // FIXME viewFormat\n  // FIXME httpQuery\n  const object = pushParseAndPop({}, ICON_STYLE_PARSERS, node, objectStack);\n  if (!object) {\n    return;\n  }\n  const styleObject = /** @type {Object} */ (\n    objectStack[objectStack.length - 1]\n  );\n  const IconObject = 'Icon' in object ? object['Icon'] : {};\n  const drawIcon = !('Icon' in object) || Object.keys(IconObject).length > 0;\n  let src;\n  const href = /** @type {string|undefined} */ (IconObject['href']);\n  if (href) {\n    src = href;\n  } else if (drawIcon) {\n    src = DEFAULT_IMAGE_STYLE_SRC;\n  }\n  let anchor, anchorXUnits, anchorYUnits;\n  /** @type {import('../style/Icon.js').IconOrigin|undefined} */\n  let anchorOrigin = 'bottom-left';\n  const hotSpot = /** @type {Vec2|undefined} */ (object['hotSpot']);\n  if (hotSpot) {\n    anchor = [hotSpot.x, hotSpot.y];\n    anchorXUnits = hotSpot.xunits;\n    anchorYUnits = hotSpot.yunits;\n    anchorOrigin = hotSpot.origin;\n  } else if (/^https?:\\/\\/maps\\.(?:google|gstatic)\\.com\\//.test(src)) {\n    // Google hotspots from https://kml4earth.appspot.com/icons.html#notes\n    if (src.includes('pushpin')) {\n      anchor = DEFAULT_IMAGE_STYLE_ANCHOR;\n      anchorXUnits = DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS;\n      anchorYUnits = DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS;\n    } else if (src.includes('arrow-reverse')) {\n      anchor = [54, 42];\n      anchorXUnits = DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS;\n      anchorYUnits = DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS;\n    } else if (src.includes('paddle')) {\n      anchor = [32, 1];\n      anchorXUnits = DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS;\n      anchorYUnits = DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS;\n    }\n  }\n\n  let offset;\n  const x = /** @type {number|undefined} */ (IconObject['x']);\n  const y = /** @type {number|undefined} */ (IconObject['y']);\n  if (x !== undefined && y !== undefined) {\n    offset = [x, y];\n  }\n\n  let size;\n  const w = /** @type {number|undefined} */ (IconObject['w']);\n  const h = /** @type {number|undefined} */ (IconObject['h']);\n  if (w !== undefined && h !== undefined) {\n    size = [w, h];\n  }\n\n  let rotation;\n  const heading = /** @type {number} */ (object['heading']);\n  if (heading !== undefined) {\n    rotation = toRadians(heading);\n  }\n\n  const scale = /** @type {number|undefined} */ (object['scale']);\n\n  const color = /** @type {Array<number>|undefined} */ (object['color']);\n\n  if (drawIcon) {\n    if (src == DEFAULT_IMAGE_STYLE_SRC) {\n      size = DEFAULT_IMAGE_STYLE_SIZE;\n    }\n\n    const imageStyle = new Icon({\n      anchor: anchor,\n      anchorOrigin: anchorOrigin,\n      anchorXUnits: anchorXUnits,\n      anchorYUnits: anchorYUnits,\n      crossOrigin: this.crossOrigin_,\n      referrerPolicy: this.referrerPolicy_,\n      offset: offset,\n      offsetOrigin: 'bottom-left',\n      rotation: rotation,\n      scale: scale,\n      size: size,\n      src: this.iconUrlFunction_(src),\n      color: color,\n    });\n\n    const imageScale = imageStyle.getScaleArray()[0];\n    const imageSize = imageStyle.getSize();\n    if (imageSize === null) {\n      const imageState = imageStyle.getImageState();\n      if (imageState === ImageState.IDLE || imageState === ImageState.LOADING) {\n        const listener = function () {\n          const imageState = imageStyle.getImageState();\n          if (!(\n            imageState === ImageState.IDLE || imageState === ImageState.LOADING\n          )) {\n            const imageSize = imageStyle.getSize();\n            if (imageSize && imageSize.length == 2) {\n              const resizeScale = scaleForSize(imageSize);\n              imageStyle.setScale(imageScale * resizeScale);\n            }\n            imageStyle.unlistenImageChange(listener);\n          }\n        };\n        imageStyle.listenImageChange(listener);\n        if (imageState === ImageState.IDLE) {\n          imageStyle.load();\n        }\n      }\n    } else if (imageSize.length == 2) {\n      const resizeScale = scaleForSize(imageSize);\n      imageStyle.setScale(imageScale * resizeScale);\n    }\n    styleObject['imageStyle'] = imageStyle;\n  } else {\n    // handle the case when we explicitly want to draw no icon.\n    styleObject['imageStyle'] = DEFAULT_NO_IMAGE_STYLE;\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst LABEL_STYLE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'color': makeObjectPropertySetter(readColor),\n  'scale': makeObjectPropertySetter(readScale),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction labelStyleParser(node, objectStack) {\n  // FIXME colorMode\n  const object = pushParseAndPop({}, LABEL_STYLE_PARSERS, node, objectStack);\n  if (!object) {\n    return;\n  }\n  const styleObject = objectStack[objectStack.length - 1];\n  const textStyle = new Text({\n    fill: new Fill({\n      color:\n        /** @type {import(\"../color.js\").Color} */\n        ('color' in object ? object['color'] : DEFAULT_COLOR),\n    }),\n    scale: /** @type {number|undefined} */ (object['scale']),\n  });\n  styleObject['textStyle'] = textStyle;\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst LINE_STYLE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'color': makeObjectPropertySetter(readColor),\n  'width': makeObjectPropertySetter(readDecimal),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction lineStyleParser(node, objectStack) {\n  // FIXME colorMode\n  // FIXME gx:outerColor\n  // FIXME gx:outerWidth\n  // FIXME gx:physicalWidth\n  // FIXME gx:labelVisibility\n  const object = pushParseAndPop({}, LINE_STYLE_PARSERS, node, objectStack);\n  if (!object) {\n    return;\n  }\n  const styleObject = objectStack[objectStack.length - 1];\n  const strokeStyle = new Stroke({\n    color:\n      /** @type {import(\"../color.js\").Color} */\n      ('color' in object ? object['color'] : DEFAULT_COLOR),\n    width: /** @type {number} */ ('width' in object ? object['width'] : 1),\n  });\n  styleObject['strokeStyle'] = strokeStyle;\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst POLY_STYLE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'color': makeObjectPropertySetter(readColor),\n  'fill': makeObjectPropertySetter(readBoolean),\n  'outline': makeObjectPropertySetter(readBoolean),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction polyStyleParser(node, objectStack) {\n  // FIXME colorMode\n  const object = pushParseAndPop({}, POLY_STYLE_PARSERS, node, objectStack);\n  if (!object) {\n    return;\n  }\n  const styleObject = objectStack[objectStack.length - 1];\n  const fillStyle = new Fill({\n    color:\n      /** @type {import(\"../color.js\").Color} */\n      ('color' in object ? object['color'] : DEFAULT_COLOR),\n  });\n  styleObject['fillStyle'] = fillStyle;\n  const fill = /** @type {boolean|undefined} */ (object['fill']);\n  if (fill !== undefined) {\n    styleObject['fill'] = fill;\n  }\n  const outline = /** @type {boolean|undefined} */ (object['outline']);\n  if (outline !== undefined) {\n    styleObject['outline'] = outline;\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst FLAT_LINEAR_RING_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'coordinates': makeReplacer(readFlatCoordinates),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array<number>} LinearRing flat coordinates.\n */\nfunction readFlatLinearRing(node, objectStack) {\n  return pushParseAndPop(null, FLAT_LINEAR_RING_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction gxCoordParser(node, objectStack) {\n  const gxTrackObject =\n    /** @type {GxTrackObject} */\n    (objectStack[objectStack.length - 1]);\n  const coordinates = gxTrackObject.coordinates;\n  const s = getAllTextContent(node, false);\n  const re =\n    /^\\s*([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s+([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s+([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s*$/i;\n  const m = re.exec(s);\n  if (m) {\n    const x = parseFloat(m[1]);\n    const y = parseFloat(m[2]);\n    const z = parseFloat(m[3]);\n    coordinates.push([x, y, z]);\n  } else {\n    coordinates.push([]);\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst GX_MULTITRACK_GEOMETRY_PARSERS = makeStructureNS(GX_NAMESPACE_URIS, {\n  'Track': makeArrayPusher(readGxTrack),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {MultiLineString|undefined} MultiLineString.\n */\nfunction readGxMultiTrack(node, objectStack) {\n  const lineStrings = pushParseAndPop(\n    [],\n    GX_MULTITRACK_GEOMETRY_PARSERS,\n    node,\n    objectStack,\n  );\n  if (!lineStrings) {\n    return undefined;\n  }\n  return new MultiLineString(lineStrings);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst GX_TRACK_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'when': whenParser,\n  },\n  makeStructureNS(GX_NAMESPACE_URIS, {\n    'coord': gxCoordParser,\n  }),\n);\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {LineString|undefined} LineString.\n */\nfunction readGxTrack(node, objectStack) {\n  const gxTrackObject = pushParseAndPop(\n    /** @type {GxTrackObject} */ ({\n      coordinates: [],\n      whens: [],\n    }),\n    GX_TRACK_PARSERS,\n    node,\n    objectStack,\n  );\n  if (!gxTrackObject) {\n    return undefined;\n  }\n  const flatCoordinates = [];\n  const coordinates = gxTrackObject.coordinates;\n  const whens = gxTrackObject.whens;\n  for (\n    let i = 0, ii = Math.min(coordinates.length, whens.length);\n    i < ii;\n    ++i\n  ) {\n    if (coordinates[i].length == 3) {\n      flatCoordinates.push(\n        coordinates[i][0],\n        coordinates[i][1],\n        coordinates[i][2],\n        whens[i],\n      );\n    }\n  }\n  return new LineString(flatCoordinates, 'XYZM');\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst ICON_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'href': makeObjectPropertySetter(readURI),\n  },\n  makeStructureNS(GX_NAMESPACE_URIS, {\n    'x': makeObjectPropertySetter(readDecimal),\n    'y': makeObjectPropertySetter(readDecimal),\n    'w': makeObjectPropertySetter(readDecimal),\n    'h': makeObjectPropertySetter(readDecimal),\n  }),\n);\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object} Icon object.\n */\nfunction readIcon(node, objectStack) {\n  const iconObject = pushParseAndPop({}, ICON_PARSERS, node, objectStack);\n  if (iconObject) {\n    return iconObject;\n  }\n  return null;\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst GEOMETRY_FLAT_COORDINATES_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'coordinates': makeReplacer(readFlatCoordinates),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array<number>} Flat coordinates.\n */\nfunction readFlatCoordinatesFromNode(node, objectStack) {\n  return pushParseAndPop(\n    null,\n    GEOMETRY_FLAT_COORDINATES_PARSERS,\n    node,\n    objectStack,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst EXTRUDE_AND_ALTITUDE_MODE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'extrude': makeObjectPropertySetter(readBoolean),\n  'tessellate': makeObjectPropertySetter(readBoolean),\n  'altitudeMode': makeObjectPropertySetter(readString),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {LineString|undefined} LineString.\n */\nfunction readLineString(node, objectStack) {\n  const properties = pushParseAndPop(\n    {},\n    EXTRUDE_AND_ALTITUDE_MODE_PARSERS,\n    node,\n    objectStack,\n  );\n  const flatCoordinates = readFlatCoordinatesFromNode(node, objectStack);\n  if (flatCoordinates) {\n    const lineString = new LineString(flatCoordinates, 'XYZ');\n    lineString.setProperties(properties, true);\n    return lineString;\n  }\n  return undefined;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Polygon|undefined} Polygon.\n */\nfunction readLinearRing(node, objectStack) {\n  const properties = pushParseAndPop(\n    {},\n    EXTRUDE_AND_ALTITUDE_MODE_PARSERS,\n    node,\n    objectStack,\n  );\n  const flatCoordinates = readFlatCoordinatesFromNode(node, objectStack);\n  if (flatCoordinates) {\n    const polygon = new Polygon(flatCoordinates, 'XYZ', [\n      flatCoordinates.length,\n    ]);\n    polygon.setProperties(properties, true);\n    return polygon;\n  }\n  return undefined;\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst MULTI_GEOMETRY_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'LineString': makeArrayPusher(readLineString),\n  'LinearRing': makeArrayPusher(readLinearRing),\n  'MultiGeometry': makeArrayPusher(readMultiGeometry),\n  'Point': makeArrayPusher(readPoint),\n  'Polygon': makeArrayPusher(readPolygon),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {import(\"../geom/Geometry.js\").default} Geometry.\n */\nfunction readMultiGeometry(node, objectStack) {\n  const geometries = pushParseAndPop(\n    [],\n    MULTI_GEOMETRY_PARSERS,\n    node,\n    objectStack,\n  );\n  if (!geometries) {\n    return null;\n  }\n  if (geometries.length === 0) {\n    return new GeometryCollection(geometries);\n  }\n  let multiGeometry;\n  let homogeneous = true;\n  const type = geometries[0].getType();\n  let geometry;\n  for (let i = 1, ii = geometries.length; i < ii; ++i) {\n    geometry = geometries[i];\n    if (geometry.getType() != type) {\n      homogeneous = false;\n      break;\n    }\n  }\n  if (homogeneous) {\n    let layout;\n    let flatCoordinates;\n    if (type == 'Point') {\n      const point = geometries[0];\n      layout = point.getLayout();\n      flatCoordinates = point.getFlatCoordinates();\n      for (let i = 1, ii = geometries.length; i < ii; ++i) {\n        geometry = geometries[i];\n        extend(flatCoordinates, geometry.getFlatCoordinates());\n      }\n      multiGeometry = new MultiPoint(flatCoordinates, layout);\n      setCommonGeometryProperties(multiGeometry, geometries);\n    } else if (type == 'LineString') {\n      multiGeometry = new MultiLineString(geometries);\n      setCommonGeometryProperties(multiGeometry, geometries);\n    } else if (type == 'Polygon') {\n      multiGeometry = new MultiPolygon(geometries);\n      setCommonGeometryProperties(multiGeometry, geometries);\n    } else if (type == 'GeometryCollection' || type.startsWith('Multi')) {\n      multiGeometry = new GeometryCollection(geometries);\n    } else {\n      throw new Error('Unknown geometry type found');\n    }\n  } else {\n    multiGeometry = new GeometryCollection(geometries);\n  }\n  return /** @type {import(\"../geom/Geometry.js\").default} */ (multiGeometry);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Point|undefined} Point.\n */\nfunction readPoint(node, objectStack) {\n  const properties = pushParseAndPop(\n    {},\n    EXTRUDE_AND_ALTITUDE_MODE_PARSERS,\n    node,\n    objectStack,\n  );\n  const flatCoordinates = readFlatCoordinatesFromNode(node, objectStack);\n  if (flatCoordinates) {\n    const point = new Point(flatCoordinates, 'XYZ');\n    point.setProperties(properties, true);\n    return point;\n  }\n  return undefined;\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst FLAT_LINEAR_RINGS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'innerBoundaryIs': innerBoundaryIsParser,\n  'outerBoundaryIs': outerBoundaryIsParser,\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Polygon|undefined} Polygon.\n */\nfunction readPolygon(node, objectStack) {\n  const properties = pushParseAndPop(\n    /** @type {Object<string,*>} */ ({}),\n    EXTRUDE_AND_ALTITUDE_MODE_PARSERS,\n    node,\n    objectStack,\n  );\n  const flatLinearRings = pushParseAndPop(\n    [null],\n    FLAT_LINEAR_RINGS_PARSERS,\n    node,\n    objectStack,\n  );\n  if (flatLinearRings && flatLinearRings[0]) {\n    const flatCoordinates = flatLinearRings[0];\n    const ends = [flatCoordinates.length];\n    for (let i = 1, ii = flatLinearRings.length; i < ii; ++i) {\n      extend(flatCoordinates, flatLinearRings[i]);\n      ends.push(flatCoordinates.length);\n    }\n    const polygon = new Polygon(flatCoordinates, 'XYZ', ends);\n    polygon.setProperties(properties, true);\n    return polygon;\n  }\n  return undefined;\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst STYLE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'IconStyle': iconStyleParser,\n  'LabelStyle': labelStyleParser,\n  'LineStyle': lineStyleParser,\n  'PolyStyle': polyStyleParser,\n});\n\n/**\n * @this {KML}\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array<Style>} Style.\n */\nfunction readStyle(node, objectStack) {\n  const styleObject = pushParseAndPop(\n    {},\n    STYLE_PARSERS,\n    node,\n    objectStack,\n    this,\n  );\n  if (!styleObject) {\n    return null;\n  }\n  let fillStyle =\n    /** @type {Fill} */\n    (\n      'fillStyle' in styleObject ? styleObject['fillStyle'] : DEFAULT_FILL_STYLE\n    );\n  const fill = /** @type {boolean|undefined} */ (styleObject['fill']);\n  if (fill !== undefined && !fill) {\n    fillStyle = null;\n  }\n  let imageStyle;\n  if ('imageStyle' in styleObject) {\n    if (styleObject['imageStyle'] != DEFAULT_NO_IMAGE_STYLE) {\n      imageStyle = /** @type {import(\"../style/Image.js\").default} */ (\n        styleObject['imageStyle']\n      );\n    }\n  } else {\n    imageStyle = DEFAULT_IMAGE_STYLE;\n  }\n  const textStyle =\n    /** @type {Text} */\n    (\n      'textStyle' in styleObject ? styleObject['textStyle'] : DEFAULT_TEXT_STYLE\n    );\n  const strokeStyle =\n    /** @type {Stroke} */\n    (\n      'strokeStyle' in styleObject\n        ? styleObject['strokeStyle']\n        : DEFAULT_STROKE_STYLE\n    );\n  const outline = /** @type {boolean|undefined} */ (styleObject['outline']);\n  if (outline !== undefined && !outline) {\n    // if the polystyle specifies no outline two styles are needed,\n    // one for non-polygon geometries where linestrings require a stroke\n    // and one for polygons where there should be no stroke\n    return [\n      new Style({\n        geometry: function (feature) {\n          const geometry = feature.getGeometry();\n          const type = geometry.getType();\n          if (type === 'GeometryCollection') {\n            const collection =\n              /** @type {import(\"../geom/GeometryCollection.js\").default} */ (\n                geometry\n              );\n            return new GeometryCollection(\n              collection\n                .getGeometriesArrayRecursive()\n                .filter(function (geometry) {\n                  const type = geometry.getType();\n                  return type !== 'Polygon' && type !== 'MultiPolygon';\n                }),\n            );\n          }\n          if (type !== 'Polygon' && type !== 'MultiPolygon') {\n            return geometry;\n          }\n        },\n        fill: fillStyle,\n        image: imageStyle,\n        stroke: strokeStyle,\n        text: textStyle,\n        zIndex: undefined, // FIXME\n      }),\n      new Style({\n        geometry: function (feature) {\n          const geometry = feature.getGeometry();\n          const type = geometry.getType();\n          if (type === 'GeometryCollection') {\n            const collection =\n              /** @type {import(\"../geom/GeometryCollection.js\").default} */ (\n                geometry\n              );\n            return new GeometryCollection(\n              collection\n                .getGeometriesArrayRecursive()\n                .filter(function (geometry) {\n                  const type = geometry.getType();\n                  return type === 'Polygon' || type === 'MultiPolygon';\n                }),\n            );\n          }\n          if (type === 'Polygon' || type === 'MultiPolygon') {\n            return geometry;\n          }\n        },\n        fill: fillStyle,\n        stroke: null,\n        zIndex: undefined, // FIXME\n      }),\n    ];\n  }\n  return [\n    new Style({\n      fill: fillStyle,\n      image: imageStyle,\n      stroke: strokeStyle,\n      text: textStyle,\n      zIndex: undefined, // FIXME\n    }),\n  ];\n}\n\n/**\n * Reads an array of geometries and creates arrays for common geometry\n * properties. Then sets them to the multi geometry.\n * @param {MultiPoint|MultiLineString|MultiPolygon} multiGeometry A multi-geometry.\n * @param {Array<import(\"../geom/Geometry.js\").default>} geometries List of geometries.\n */\nfunction setCommonGeometryProperties(multiGeometry, geometries) {\n  const ii = geometries.length;\n  const extrudes = new Array(geometries.length);\n  const tessellates = new Array(geometries.length);\n  const altitudeModes = new Array(geometries.length);\n  let hasExtrude, hasTessellate, hasAltitudeMode;\n  hasExtrude = false;\n  hasTessellate = false;\n  hasAltitudeMode = false;\n  for (let i = 0; i < ii; ++i) {\n    const geometry = geometries[i];\n    extrudes[i] = geometry.get('extrude');\n    tessellates[i] = geometry.get('tessellate');\n    altitudeModes[i] = geometry.get('altitudeMode');\n    hasExtrude = hasExtrude || extrudes[i] !== undefined;\n    hasTessellate = hasTessellate || tessellates[i] !== undefined;\n    hasAltitudeMode = hasAltitudeMode || altitudeModes[i];\n  }\n  if (hasExtrude) {\n    multiGeometry.set('extrude', extrudes);\n  }\n  if (hasTessellate) {\n    multiGeometry.set('tessellate', tessellates);\n  }\n  if (hasAltitudeMode) {\n    multiGeometry.set('altitudeMode', altitudeModes);\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst DATA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'displayName': makeObjectPropertySetter(readString),\n  'value': makeObjectPropertySetter(readString),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction dataParser(node, objectStack) {\n  const name = node.getAttribute('name');\n  parseNode(DATA_PARSERS, node, objectStack);\n  const featureObject = /** @type {Object} */ (\n    objectStack[objectStack.length - 1]\n  );\n  if (name && featureObject.displayName) {\n    featureObject[name] = {\n      value: featureObject.value,\n      displayName: featureObject.displayName,\n      toString: function () {\n        return featureObject.value;\n      },\n    };\n  } else if (name !== null) {\n    featureObject[name] = featureObject.value;\n  } else if (featureObject.displayName !== null) {\n    featureObject[featureObject.displayName] = featureObject.value;\n  }\n  delete featureObject['value'];\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst EXTENDED_DATA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Data': dataParser,\n  'SchemaData': schemaDataParser,\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction extendedDataParser(node, objectStack) {\n  parseNode(EXTENDED_DATA_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction regionParser(node, objectStack) {\n  parseNode(REGION_PARSERS, node, objectStack);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst PAIR_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Style': makeObjectPropertySetter(readStyle),\n  'key': makeObjectPropertySetter(readString),\n  'styleUrl': makeObjectPropertySetter(readStyleURL),\n});\n\n/**\n * @this {KML}\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction pairDataParser(node, objectStack) {\n  const pairObject = pushParseAndPop({}, PAIR_PARSERS, node, objectStack, this);\n  if (!pairObject) {\n    return;\n  }\n  const key = /** @type {string|undefined} */ (pairObject['key']);\n  if (key && key == 'normal') {\n    const styleUrl = /** @type {string|undefined} */ (pairObject['styleUrl']);\n    if (styleUrl) {\n      objectStack[objectStack.length - 1] = styleUrl;\n    }\n    const style = /** @type {Style} */ (pairObject['Style']);\n    if (style) {\n      objectStack[objectStack.length - 1] = style;\n    }\n  }\n}\n\n/**\n * @this {KML}\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction placemarkStyleMapParser(node, objectStack) {\n  const styleMapValue = readStyleMapValue.call(this, node, objectStack);\n  if (!styleMapValue) {\n    return;\n  }\n  const placemarkObject = objectStack[objectStack.length - 1];\n  if (Array.isArray(styleMapValue)) {\n    placemarkObject['Style'] = styleMapValue;\n  } else if (typeof styleMapValue === 'string') {\n    placemarkObject['styleUrl'] = styleMapValue;\n  } else {\n    throw new Error('`styleMapValue` has an unknown type');\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst SCHEMA_DATA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'SimpleData': simpleDataParser,\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction schemaDataParser(node, objectStack) {\n  parseNode(SCHEMA_DATA_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction simpleDataParser(node, objectStack) {\n  const name = node.getAttribute('name');\n  if (name !== null) {\n    const data = readString(node);\n    const featureObject = /** @type {Object} */ (\n      objectStack[objectStack.length - 1]\n    );\n    featureObject[name] = data;\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst LAT_LON_ALT_BOX_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'altitudeMode': makeObjectPropertySetter(readString),\n  'minAltitude': makeObjectPropertySetter(readDecimal),\n  'maxAltitude': makeObjectPropertySetter(readDecimal),\n  'north': makeObjectPropertySetter(readDecimal),\n  'south': makeObjectPropertySetter(readDecimal),\n  'east': makeObjectPropertySetter(readDecimal),\n  'west': makeObjectPropertySetter(readDecimal),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction latLonAltBoxParser(node, objectStack) {\n  const object = pushParseAndPop(\n    {},\n    LAT_LON_ALT_BOX_PARSERS,\n    node,\n    objectStack,\n  );\n  if (!object) {\n    return;\n  }\n  const regionObject = /** @type {Object} */ (\n    objectStack[objectStack.length - 1]\n  );\n  const extent = [\n    parseFloat(object['west']),\n    parseFloat(object['south']),\n    parseFloat(object['east']),\n    parseFloat(object['north']),\n  ];\n  regionObject['extent'] = extent;\n  regionObject['altitudeMode'] = object['altitudeMode'];\n  regionObject['minAltitude'] = parseFloat(object['minAltitude']);\n  regionObject['maxAltitude'] = parseFloat(object['maxAltitude']);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst LOD_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'minLodPixels': makeObjectPropertySetter(readDecimal),\n  'maxLodPixels': makeObjectPropertySetter(readDecimal),\n  'minFadeExtent': makeObjectPropertySetter(readDecimal),\n  'maxFadeExtent': makeObjectPropertySetter(readDecimal),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction lodParser(node, objectStack) {\n  const object = pushParseAndPop({}, LOD_PARSERS, node, objectStack);\n  if (!object) {\n    return;\n  }\n  const lodObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  lodObject['minLodPixels'] = parseFloat(object['minLodPixels']);\n  lodObject['maxLodPixels'] = parseFloat(object['maxLodPixels']);\n  lodObject['minFadeExtent'] = parseFloat(object['minFadeExtent']);\n  lodObject['maxFadeExtent'] = parseFloat(object['maxFadeExtent']);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst INNER_BOUNDARY_IS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  // KML spec only allows one LinearRing  per innerBoundaryIs, but Google Earth\n  // allows multiple, so we parse multiple here too.\n  'LinearRing': makeArrayPusher(readFlatLinearRing),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction innerBoundaryIsParser(node, objectStack) {\n  const innerBoundaryFlatLinearRings = pushParseAndPop(\n    /** @type {Array<Array<number>>} */ ([]),\n    INNER_BOUNDARY_IS_PARSERS,\n    node,\n    objectStack,\n  );\n  if (innerBoundaryFlatLinearRings.length > 0) {\n    const flatLinearRings =\n      /** @type {Array<Array<number>>} */\n      (objectStack[objectStack.length - 1]);\n    flatLinearRings.push(...innerBoundaryFlatLinearRings);\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst OUTER_BOUNDARY_IS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'LinearRing': makeReplacer(readFlatLinearRing),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction outerBoundaryIsParser(node, objectStack) {\n  /** @type {Array<number>|undefined} */\n  const flatLinearRing = pushParseAndPop(\n    undefined,\n    OUTER_BOUNDARY_IS_PARSERS,\n    node,\n    objectStack,\n  );\n  if (flatLinearRing) {\n    const flatLinearRings =\n      /** @type {Array<Array<number>>} */\n      (objectStack[objectStack.length - 1]);\n    flatLinearRings[0] = flatLinearRing;\n  }\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction linkParser(node, objectStack) {\n  parseNode(LINK_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction whenParser(node, objectStack) {\n  const gxTrackObject =\n    /** @type {GxTrackObject} */\n    (objectStack[objectStack.length - 1]);\n  const whens = gxTrackObject.whens;\n  const s = getAllTextContent(node, false);\n  const when = Date.parse(s);\n  whens.push(isNaN(when) ? 0 : when);\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the color to.\n * @param {import(\"../color.js\").Color|string} color Color.\n */\nfunction writeColorTextNode(node, color) {\n  const rgba = asArray(color);\n  const opacity = rgba.length == 4 ? rgba[3] : 1;\n  /** @type {Array<string|number>} */\n  const abgr = [opacity * 255, rgba[2], rgba[1], rgba[0]];\n  for (let i = 0; i < 4; ++i) {\n    const hex = Math.floor(/** @type {number} */ (abgr[i])).toString(16);\n    abgr[i] = hex.length == 1 ? '0' + hex : hex;\n  }\n  writeStringTextNode(node, abgr.join(''));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the coordinates to.\n * @param {Array<number>} coordinates Coordinates.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeCoordinatesTextNode(node, coordinates, objectStack) {\n  const context = objectStack[objectStack.length - 1];\n\n  const layout = context['layout'];\n  const stride = context['stride'];\n\n  let dimension;\n  if (layout == 'XY' || layout == 'XYM') {\n    dimension = 2;\n  } else if (layout == 'XYZ' || layout == 'XYZM') {\n    dimension = 3;\n  } else {\n    throw new Error('Invalid geometry layout');\n  }\n\n  const ii = coordinates.length;\n  let text = '';\n  if (ii > 0) {\n    text += coordinates[0];\n    for (let d = 1; d < dimension; ++d) {\n      text += ',' + coordinates[d];\n    }\n    for (let i = stride; i < ii; i += stride) {\n      text += ' ' + coordinates[i];\n      for (let d = 1; d < dimension; ++d) {\n        text += ',' + coordinates[i + d];\n      }\n    }\n  }\n  writeStringTextNode(node, text);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst EXTENDEDDATA_NODE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'Data': makeChildAppender(writeDataNode),\n  'value': makeChildAppender(writeDataNodeValue),\n  'displayName': makeChildAppender(writeDataNodeName),\n});\n\n/**\n * @param {Element} node Node.\n * @param {{name: *, value: *}} pair Name value pair.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeDataNode(node, pair, objectStack) {\n  node.setAttribute('name', pair.name);\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const value = pair.value;\n\n  if (typeof value == 'object') {\n    if (value !== null && value.displayName) {\n      pushSerializeAndPop(\n        context,\n        EXTENDEDDATA_NODE_SERIALIZERS,\n        OBJECT_PROPERTY_NODE_FACTORY,\n        [value.displayName],\n        objectStack,\n        ['displayName'],\n      );\n    }\n\n    if (value !== null && value.value) {\n      pushSerializeAndPop(\n        context,\n        EXTENDEDDATA_NODE_SERIALIZERS,\n        OBJECT_PROPERTY_NODE_FACTORY,\n        [value.value],\n        objectStack,\n        ['value'],\n      );\n    }\n  } else {\n    pushSerializeAndPop(\n      context,\n      EXTENDEDDATA_NODE_SERIALIZERS,\n      OBJECT_PROPERTY_NODE_FACTORY,\n      [value],\n      objectStack,\n      ['value'],\n    );\n  }\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the name to.\n * @param {string} name DisplayName.\n */\nfunction writeDataNodeName(node, name) {\n  writeStringTextNode(node, name);\n}\n\n/**\n * @param {Node} node Node to append a CDATA Section with the value to.\n * @param {string} value Value.\n */\nfunction writeDataNodeValue(node, value) {\n  writeStringTextNode(node, value);\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst DOCUMENT_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'Placemark': makeChildAppender(writePlacemark),\n});\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [nodeName] Node name.\n * @return {Node|undefined} Node.\n */\nconst DOCUMENT_NODE_FACTORY = function (value, objectStack, nodeName) {\n  const parentNode = objectStack[objectStack.length - 1].node;\n  return createElementNS(parentNode.namespaceURI, 'Placemark');\n};\n\n/**\n * @param {Element} node Node.\n * @param {Array<Feature>} features Features.\n * @param {Array<*>} objectStack Object stack.\n * @this {KML}\n */\nfunction writeDocument(node, features, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  pushSerializeAndPop(\n    context,\n    DOCUMENT_SERIALIZERS,\n    DOCUMENT_NODE_FACTORY,\n    features,\n    objectStack,\n    undefined,\n    this,\n  );\n}\n\n/**\n * A factory for creating Data nodes.\n * @const\n * @type {function(*, Array<*>): (Node|undefined)}\n */\nconst DATA_NODE_FACTORY = makeSimpleNodeFactory('Data');\n\n/**\n * @param {Element} node Node.\n * @param {{names: Array<string>, values: (Array<*>)}} namesAndValues Names and values.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeExtendedData(node, namesAndValues, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const names = namesAndValues.names;\n  const values = namesAndValues.values;\n  const length = names.length;\n\n  for (let i = 0; i < length; i++) {\n    pushSerializeAndPop(\n      context,\n      EXTENDEDDATA_NODE_SERIALIZERS,\n      DATA_NODE_FACTORY,\n      [{name: names[i], value: values[i]}],\n      objectStack,\n    );\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst ICON_SEQUENCE = makeStructureNS(\n  NAMESPACE_URIS,\n  ['href'],\n  makeStructureNS(GX_NAMESPACE_URIS, ['x', 'y', 'w', 'h']),\n);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst ICON_SERIALIZERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'href': makeChildAppender(writeStringTextNode),\n  },\n  makeStructureNS(GX_NAMESPACE_URIS, {\n    'x': makeChildAppender(writeDecimalTextNode),\n    'y': makeChildAppender(writeDecimalTextNode),\n    'w': makeChildAppender(writeDecimalTextNode),\n    'h': makeChildAppender(writeDecimalTextNode),\n  }),\n);\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [nodeName] Node name.\n * @return {Node|undefined} Node.\n */\nconst GX_NODE_FACTORY = function (value, objectStack, nodeName) {\n  return createElementNS(GX_NAMESPACE_URIS[0], 'gx:' + nodeName);\n};\n\n/**\n * @param {Element} node Node.\n * @param {Object} icon Icon object.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeIcon(node, icon, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const parentNode = objectStack[objectStack.length - 1].node;\n  let orderedKeys = ICON_SEQUENCE[parentNode.namespaceURI];\n  let values = makeSequence(icon, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    ICON_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n  orderedKeys = ICON_SEQUENCE[GX_NAMESPACE_URIS[0]];\n  values = makeSequence(icon, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    ICON_SERIALIZERS,\n    GX_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst ICON_STYLE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\n  'scale',\n  'heading',\n  'Icon',\n  'color',\n  'hotSpot',\n]);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst ICON_STYLE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'Icon': makeChildAppender(writeIcon),\n  'color': makeChildAppender(writeColorTextNode),\n  'heading': makeChildAppender(writeDecimalTextNode),\n  'hotSpot': makeChildAppender(writeVec2),\n  'scale': makeChildAppender(writeScaleTextNode),\n});\n\n/**\n * @param {Element} node Node.\n * @param {import(\"../style/Icon.js\").default} style Icon style.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeIconStyle(node, style, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const /** @type {Object<string, any>} */ properties = {};\n  const src = style.getSrc();\n  const size = style.getSize();\n  const iconImageSize = style.getImageSize();\n  const iconProperties = {\n    'href': src,\n  };\n\n  if (size) {\n    iconProperties['w'] = size[0];\n    iconProperties['h'] = size[1];\n    const anchor = style.getAnchor(); // top-left\n    const origin = style.getOrigin(); // top-left\n\n    if (origin && iconImageSize && origin[0] !== 0 && origin[1] !== size[1]) {\n      iconProperties['x'] = origin[0];\n      iconProperties['y'] = iconImageSize[1] - (origin[1] + size[1]);\n    }\n\n    if (anchor && (anchor[0] !== size[0] / 2 || anchor[1] !== size[1] / 2)) {\n      const /** @type {Vec2} */ hotSpot = {\n          x: anchor[0],\n          xunits: 'pixels',\n          y: size[1] - anchor[1],\n          yunits: 'pixels',\n        };\n      properties['hotSpot'] = hotSpot;\n    }\n  }\n\n  properties['Icon'] = iconProperties;\n\n  let scale = style.getScaleArray()[0];\n  let imageSize = size;\n  if (imageSize === null) {\n    imageSize = DEFAULT_IMAGE_STYLE_SIZE;\n  }\n  if (imageSize.length == 2) {\n    const resizeScale = scaleForSize(imageSize);\n    scale = scale / resizeScale;\n  }\n  if (scale !== 1) {\n    properties['scale'] = scale;\n  }\n\n  const rotation = style.getRotation();\n  if (rotation !== 0) {\n    properties['heading'] = rotation; // 0-360\n  }\n\n  const color = style.getColor();\n  if (color) {\n    properties['color'] = color;\n  }\n\n  const parentNode = objectStack[objectStack.length - 1].node;\n  const orderedKeys = ICON_STYLE_SEQUENCE[parentNode.namespaceURI];\n  const values = makeSequence(properties, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    ICON_STYLE_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst LABEL_STYLE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\n  'color',\n  'scale',\n]);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst LABEL_STYLE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'color': makeChildAppender(writeColorTextNode),\n  'scale': makeChildAppender(writeScaleTextNode),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Text} style style.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeLabelStyle(node, style, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const properties = {};\n  const fill = style.getFill();\n  if (fill) {\n    properties['color'] = fill.getColor();\n  }\n  const scale = style.getScale();\n  if (scale && scale !== 1) {\n    properties['scale'] = scale;\n  }\n  const parentNode = objectStack[objectStack.length - 1].node;\n  const orderedKeys = LABEL_STYLE_SEQUENCE[parentNode.namespaceURI];\n  const values = makeSequence(properties, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    LABEL_STYLE_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst LINE_STYLE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, ['color', 'width']);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst LINE_STYLE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'color': makeChildAppender(writeColorTextNode),\n  'width': makeChildAppender(writeDecimalTextNode),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Stroke} style style.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeLineStyle(node, style, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const properties = {\n    'color': style.getColor(),\n    'width': Number(style.getWidth()) || 1,\n  };\n  const parentNode = objectStack[objectStack.length - 1].node;\n  const orderedKeys = LINE_STYLE_SEQUENCE[parentNode.namespaceURI];\n  const values = makeSequence(properties, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    LINE_STYLE_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, string>}\n */\nconst GEOMETRY_TYPE_TO_NODENAME = {\n  'Point': 'Point',\n  'LineString': 'LineString',\n  'LinearRing': 'LinearRing',\n  'Polygon': 'Polygon',\n  'MultiPoint': 'MultiGeometry',\n  'MultiLineString': 'MultiGeometry',\n  'MultiPolygon': 'MultiGeometry',\n  'GeometryCollection': 'MultiGeometry',\n};\n\n/**\n * @const\n * @param {*} value Value.\n * @param {Array<*>} objectStack Object stack.\n * @param {string} [nodeName] Node name.\n * @return {Node|undefined} Node.\n */\nconst GEOMETRY_NODE_FACTORY = function (value, objectStack, nodeName) {\n  if (value) {\n    const parentNode = objectStack[objectStack.length - 1].node;\n    return createElementNS(\n      parentNode.namespaceURI,\n      GEOMETRY_TYPE_TO_NODENAME[\n        /** @type {import(\"../geom/Geometry.js\").default} */ (value).getType()\n      ],\n    );\n  }\n};\n\n/**\n * A factory for creating Point nodes.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nconst POINT_NODE_FACTORY = makeSimpleNodeFactory('Point');\n\n/**\n * A factory for creating LineString nodes.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nconst LINE_STRING_NODE_FACTORY = makeSimpleNodeFactory('LineString');\n\n/**\n * A factory for creating LinearRing nodes.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nconst LINEAR_RING_NODE_FACTORY = makeSimpleNodeFactory('LinearRing');\n\n/**\n * A factory for creating Polygon nodes.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nconst POLYGON_NODE_FACTORY = makeSimpleNodeFactory('Polygon');\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst MULTI_GEOMETRY_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'LineString': makeChildAppender(writePrimitiveGeometry),\n  'Point': makeChildAppender(writePrimitiveGeometry),\n  'Polygon': makeChildAppender(writePolygon),\n  'GeometryCollection': makeChildAppender(writeMultiGeometry),\n});\n\n/**\n * @param {Element} node Node.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeMultiGeometry(node, geometry, objectStack) {\n  /** @type {import(\"../xml.js\").NodeStackItem} */\n  const context = {node: node};\n  const type = geometry.getType();\n  /** @type {Array<import(\"../geom/Geometry.js\").default>} */\n  let geometries = [];\n  /** @type {function(*, Array<*>, string=): (Node|undefined)} */\n  let factory;\n  if (type === 'GeometryCollection') {\n    /** @type {GeometryCollection} */ (geometry)\n      .getGeometriesArrayRecursive()\n      .forEach(function (geometry) {\n        const type = geometry.getType();\n        if (type === 'MultiPoint') {\n          geometries = geometries.concat(\n            /** @type {MultiPoint} */ (geometry).getPoints(),\n          );\n        } else if (type === 'MultiLineString') {\n          geometries = geometries.concat(\n            /** @type {MultiLineString} */ (geometry).getLineStrings(),\n          );\n        } else if (type === 'MultiPolygon') {\n          geometries = geometries.concat(\n            /** @type {MultiPolygon} */ (geometry).getPolygons(),\n          );\n        } else if (\n          type === 'Point' ||\n          type === 'LineString' ||\n          type === 'Polygon'\n        ) {\n          geometries.push(geometry);\n        } else {\n          throw new Error('Unknown geometry type');\n        }\n      });\n    factory = GEOMETRY_NODE_FACTORY;\n  } else if (type === 'MultiPoint') {\n    geometries = /** @type {MultiPoint} */ (geometry).getPoints();\n    factory = POINT_NODE_FACTORY;\n  } else if (type === 'MultiLineString') {\n    geometries = /** @type {MultiLineString} */ (geometry).getLineStrings();\n    factory = LINE_STRING_NODE_FACTORY;\n  } else if (type === 'MultiPolygon') {\n    geometries = /** @type {MultiPolygon} */ (geometry).getPolygons();\n    factory = POLYGON_NODE_FACTORY;\n  } else {\n    throw new Error('Unknown geometry type');\n  }\n  pushSerializeAndPop(\n    context,\n    MULTI_GEOMETRY_SERIALIZERS,\n    factory,\n    geometries,\n    objectStack,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst BOUNDARY_IS_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'LinearRing': makeChildAppender(writePrimitiveGeometry),\n});\n\n/**\n * @param {Element} node Node.\n * @param {import(\"../geom/LinearRing.js\").default} linearRing Linear ring.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeBoundaryIs(node, linearRing, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  pushSerializeAndPop(\n    context,\n    BOUNDARY_IS_SERIALIZERS,\n    LINEAR_RING_NODE_FACTORY,\n    [linearRing],\n    objectStack,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst PLACEMARK_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'ExtendedData': makeChildAppender(writeExtendedData),\n  'MultiGeometry': makeChildAppender(writeMultiGeometry),\n  'LineString': makeChildAppender(writePrimitiveGeometry),\n  'LinearRing': makeChildAppender(writePrimitiveGeometry),\n  'Point': makeChildAppender(writePrimitiveGeometry),\n  'Polygon': makeChildAppender(writePolygon),\n  'Style': makeChildAppender(writeStyle),\n  'address': makeChildAppender(writeStringTextNode),\n  'description': makeChildAppender(writeStringTextNode),\n  'name': makeChildAppender(writeStringTextNode),\n  'open': makeChildAppender(writeBooleanTextNode),\n  'phoneNumber': makeChildAppender(writeStringTextNode),\n  'styleUrl': makeChildAppender(writeStringTextNode),\n  'visibility': makeChildAppender(writeBooleanTextNode),\n});\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst PLACEMARK_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\n  'name',\n  'open',\n  'visibility',\n  'address',\n  'phoneNumber',\n  'description',\n  'styleUrl',\n  'Style',\n]);\n\n/**\n * A factory for creating ExtendedData nodes.\n * @const\n * @type {function(*, Array<*>): (Node|undefined)}\n */\nconst EXTENDEDDATA_NODE_FACTORY = makeSimpleNodeFactory('ExtendedData');\n\n/**\n * FIXME currently we do serialize arbitrary/custom feature properties\n * (ExtendedData).\n * @param {Element} node Node.\n * @param {Feature} feature Feature.\n * @param {Array<*>} objectStack Object stack.\n * @this {KML}\n */\nfunction writePlacemark(node, feature, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n\n  // set id\n  if (feature.getId()) {\n    node.setAttribute('id', /** @type {string} */ (feature.getId()));\n  }\n\n  // serialize properties (properties unknown to KML are not serialized)\n  const properties = feature.getProperties();\n\n  // don't export these to ExtendedData\n  const filter = {\n    'address': 1,\n    'description': 1,\n    'name': 1,\n    'open': 1,\n    'phoneNumber': 1,\n    'styleUrl': 1,\n    'visibility': 1,\n  };\n  filter[feature.getGeometryName()] = 1;\n  const keys = Object.keys(properties || {})\n    .sort()\n    .filter(function (v) {\n      return !filter[v];\n    });\n\n  const styleFunction = feature.getStyleFunction();\n  if (styleFunction) {\n    // FIXME the styles returned by the style function are supposed to be\n    // resolution-independent here\n    const styles = styleFunction(feature, 0);\n    if (styles) {\n      const styleArray = Array.isArray(styles) ? styles : [styles];\n      let pointStyles = styleArray;\n      if (feature.getGeometry()) {\n        pointStyles = styleArray.filter(function (style) {\n          const geometry = style.getGeometryFunction()(feature);\n          if (geometry) {\n            const type = geometry.getType();\n            if (type === 'GeometryCollection') {\n              return /** @type {GeometryCollection} */ (geometry)\n                .getGeometriesArrayRecursive()\n                .filter(function (geometry) {\n                  const type = geometry.getType();\n                  return type === 'Point' || type === 'MultiPoint';\n                }).length;\n            }\n            return type === 'Point' || type === 'MultiPoint';\n          }\n        });\n        ('Point');\n      }\n      if (this.writeStyles_) {\n        let lineStyles = styleArray;\n        let polyStyles = styleArray;\n        if (feature.getGeometry()) {\n          lineStyles = styleArray.filter(function (style) {\n            const geometry = style.getGeometryFunction()(feature);\n            if (geometry) {\n              const type = geometry.getType();\n              if (type === 'GeometryCollection') {\n                return /** @type {GeometryCollection} */ (geometry)\n                  .getGeometriesArrayRecursive()\n                  .filter(function (geometry) {\n                    const type = geometry.getType();\n                    return type === 'LineString' || type === 'MultiLineString';\n                  }).length;\n              }\n              return type === 'LineString' || type === 'MultiLineString';\n            }\n          });\n          polyStyles = styleArray.filter(function (style) {\n            const geometry = style.getGeometryFunction()(feature);\n            if (geometry) {\n              const type = geometry.getType();\n              if (type === 'GeometryCollection') {\n                return /** @type {GeometryCollection} */ (geometry)\n                  .getGeometriesArrayRecursive()\n                  .filter(function (geometry) {\n                    const type = geometry.getType();\n                    return type === 'Polygon' || type === 'MultiPolygon';\n                  }).length;\n              }\n              return type === 'Polygon' || type === 'MultiPolygon';\n            }\n          });\n        }\n        properties['Style'] = {\n          pointStyles: pointStyles,\n          lineStyles: lineStyles,\n          polyStyles: polyStyles,\n        };\n      }\n      if (pointStyles.length && properties['name'] === undefined) {\n        const textStyle = pointStyles[0].getText();\n        if (textStyle) {\n          properties['name'] = textStyle.getText();\n        }\n      }\n    }\n  }\n  const parentNode = objectStack[objectStack.length - 1].node;\n  const orderedKeys = PLACEMARK_SEQUENCE[parentNode.namespaceURI];\n  const values = makeSequence(properties, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    PLACEMARK_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n\n  if (keys.length > 0) {\n    const sequence = makeSequence(properties, keys);\n    const namesAndValues = {names: keys, values: sequence};\n    pushSerializeAndPop(\n      context,\n      PLACEMARK_SERIALIZERS,\n      EXTENDEDDATA_NODE_FACTORY,\n      [namesAndValues],\n      objectStack,\n    );\n  }\n\n  // serialize geometry\n  const options = /** @type {import(\"./Feature.js\").WriteOptions} */ (\n    objectStack[0]\n  );\n  let geometry = feature.getGeometry();\n  if (geometry) {\n    geometry = transformGeometryWithOptions(geometry, true, options);\n  }\n  pushSerializeAndPop(\n    context,\n    PLACEMARK_SERIALIZERS,\n    GEOMETRY_NODE_FACTORY,\n    [geometry],\n    objectStack,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst PRIMITIVE_GEOMETRY_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\n  'extrude',\n  'tessellate',\n  'altitudeMode',\n  'coordinates',\n]);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst PRIMITIVE_GEOMETRY_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'extrude': makeChildAppender(writeBooleanTextNode),\n  'tessellate': makeChildAppender(writeBooleanTextNode),\n  'altitudeMode': makeChildAppender(writeStringTextNode),\n  'coordinates': makeChildAppender(writeCoordinatesTextNode),\n});\n\n/**\n * @param {Element} node Node.\n * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writePrimitiveGeometry(node, geometry, objectStack) {\n  const flatCoordinates = geometry.getFlatCoordinates();\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  context['layout'] = geometry.getLayout();\n  context['stride'] = geometry.getStride();\n\n  // serialize properties (properties unknown to KML are not serialized)\n  const properties = geometry.getProperties();\n  properties.coordinates = flatCoordinates;\n\n  const parentNode = objectStack[objectStack.length - 1].node;\n  const orderedKeys = PRIMITIVE_GEOMETRY_SEQUENCE[parentNode.namespaceURI];\n  const values = makeSequence(properties, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    PRIMITIVE_GEOMETRY_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst POLY_STYLE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\n  'color',\n  'fill',\n  'outline',\n]);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst POLYGON_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'outerBoundaryIs': makeChildAppender(writeBoundaryIs),\n  'innerBoundaryIs': makeChildAppender(writeBoundaryIs),\n});\n\n/**\n * A factory for creating innerBoundaryIs nodes.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nconst INNER_BOUNDARY_NODE_FACTORY = makeSimpleNodeFactory('innerBoundaryIs');\n\n/**\n * A factory for creating outerBoundaryIs nodes.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nconst OUTER_BOUNDARY_NODE_FACTORY = makeSimpleNodeFactory('outerBoundaryIs');\n\n/**\n * @param {Element} node Node.\n * @param {Polygon} polygon Polygon.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writePolygon(node, polygon, objectStack) {\n  const linearRings = polygon.getLinearRings();\n  const outerRing = linearRings.shift();\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  // inner rings\n  pushSerializeAndPop(\n    context,\n    POLYGON_SERIALIZERS,\n    INNER_BOUNDARY_NODE_FACTORY,\n    linearRings,\n    objectStack,\n  );\n  // outer ring\n  pushSerializeAndPop(\n    context,\n    POLYGON_SERIALIZERS,\n    OUTER_BOUNDARY_NODE_FACTORY,\n    [outerRing],\n    objectStack,\n  );\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst POLY_STYLE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'color': makeChildAppender(writeColorTextNode),\n  'fill': makeChildAppender(writeBooleanTextNode),\n  'outline': makeChildAppender(writeBooleanTextNode),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Style} style Style.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writePolyStyle(node, style, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const fill = style.getFill();\n  const stroke = style.getStroke();\n  const properties = {\n    'color': fill ? fill.getColor() : undefined,\n    'fill': fill ? undefined : false,\n    'outline': stroke ? undefined : false,\n  };\n  const parentNode = objectStack[objectStack.length - 1].node;\n  const orderedKeys = POLY_STYLE_SEQUENCE[parentNode.namespaceURI];\n  const values = makeSequence(properties, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    POLY_STYLE_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the scale to.\n * @param {number|undefined} scale Scale.\n */\nfunction writeScaleTextNode(node, scale) {\n  // the Math is to remove any excess decimals created by float arithmetic\n  writeDecimalTextNode(node, Math.round(scale * 1e6) / 1e6);\n}\n\n/**\n * @const\n * @type {Object<string, Array<string>>}\n */\n// @ts-ignore\nconst STYLE_SEQUENCE = makeStructureNS(NAMESPACE_URIS, [\n  'IconStyle',\n  'LabelStyle',\n  'LineStyle',\n  'PolyStyle',\n]);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Serializer>>}\n */\n// @ts-ignore\nconst STYLE_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {\n  'IconStyle': makeChildAppender(writeIconStyle),\n  'LabelStyle': makeChildAppender(writeLabelStyle),\n  'LineStyle': makeChildAppender(writeLineStyle),\n  'PolyStyle': makeChildAppender(writePolyStyle),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Object<string, Array<Style>>} styles Styles.\n * @param {Array<*>} objectStack Object stack.\n */\nfunction writeStyle(node, styles, objectStack) {\n  const /** @type {import(\"../xml.js\").NodeStackItem} */ context = {node: node};\n  const properties = {};\n  if (styles.pointStyles.length) {\n    const textStyle = styles.pointStyles[0].getText();\n    if (textStyle) {\n      properties['LabelStyle'] = textStyle;\n    }\n    const imageStyle = styles.pointStyles[0].getImage();\n    if (\n      imageStyle &&\n      typeof (/** @type {?} */ (imageStyle).getSrc) === 'function'\n    ) {\n      properties['IconStyle'] = imageStyle;\n    }\n  }\n  if (styles.lineStyles.length) {\n    const strokeStyle = styles.lineStyles[0].getStroke();\n    if (strokeStyle) {\n      properties['LineStyle'] = strokeStyle;\n    }\n  }\n  if (styles.polyStyles.length) {\n    const strokeStyle = styles.polyStyles[0].getStroke();\n    if (strokeStyle && !properties['LineStyle']) {\n      properties['LineStyle'] = strokeStyle;\n    }\n    properties['PolyStyle'] = styles.polyStyles[0];\n  }\n  const parentNode = objectStack[objectStack.length - 1].node;\n  const orderedKeys = STYLE_SEQUENCE[parentNode.namespaceURI];\n  const values = makeSequence(properties, orderedKeys);\n  pushSerializeAndPop(\n    context,\n    STYLE_SERIALIZERS,\n    OBJECT_PROPERTY_NODE_FACTORY,\n    values,\n    objectStack,\n    orderedKeys,\n  );\n}\n\n/**\n * @param {Element} node Node to append a TextNode with the Vec2 to.\n * @param {Vec2} vec2 Vec2.\n */\nfunction writeVec2(node, vec2) {\n  node.setAttribute('x', String(vec2.x));\n  node.setAttribute('y', String(vec2.y));\n  node.setAttribute('xunits', vec2.xunits);\n  node.setAttribute('yunits', vec2.yunits);\n}\n\nexport default KML;\n","/**\n * @module ol/format/TextFeature\n */\nimport FeatureFormat from '../format/Feature.js';\nimport {abstract} from '../util.js';\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for text feature formats.\n *\n * @abstract\n */\nclass TextFeature extends FeatureFormat {\n  constructor() {\n    super();\n  }\n\n  /**\n   * @return {import(\"./Feature.js\").Type} Format.\n   * @override\n   */\n  getType() {\n    return 'text';\n  }\n\n  /**\n   * Read the feature from the source.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {import(\"../Feature.js\").default} Feature.\n   * @api\n   * @override\n   */\n  readFeature(source, options) {\n    return this.readFeatureFromText(\n      getText(source),\n      this.adaptOptions(options),\n    );\n  }\n\n  /**\n   * @abstract\n   * @param {string} text Text.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {import(\"../Feature.js\").default} Feature.\n   */\n  readFeatureFromText(text, options) {\n    return abstract();\n  }\n\n  /**\n   * Read the features from the source.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {Array<import(\"../Feature.js\").default>} Features.\n   * @api\n   * @override\n   */\n  readFeatures(source, options) {\n    return this.readFeaturesFromText(\n      getText(source),\n      this.adaptOptions(options),\n    );\n  }\n\n  /**\n   * @abstract\n   * @param {string} text Text.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {Array<import(\"../Feature.js\").default>} Features.\n   */\n  readFeaturesFromText(text, options) {\n    return abstract();\n  }\n\n  /**\n   * Read the geometry from the source.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   * @api\n   * @override\n   */\n  readGeometry(source, options) {\n    return this.readGeometryFromText(\n      getText(source),\n      this.adaptOptions(options),\n    );\n  }\n\n  /**\n   * @abstract\n   * @param {string} text Text.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   */\n  readGeometryFromText(text, options) {\n    return abstract();\n  }\n\n  /**\n   * Read the projection from the source.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n   * @api\n   * @override\n   */\n  readProjection(source) {\n    return this.readProjectionFromText(getText(source));\n  }\n\n  /**\n   * @param {string} text Text.\n   * @protected\n   * @return {import(\"../proj/Projection.js\").default|undefined} Projection.\n   */\n  readProjectionFromText(text) {\n    return this.dataProjection;\n  }\n\n  /**\n   * Encode a feature as a string.\n   *\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Encoded feature.\n   * @api\n   * @override\n   */\n  writeFeature(feature, options) {\n    return this.writeFeatureText(feature, this.adaptOptions(options));\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../Feature.js\").default} feature Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @protected\n   * @return {string} Text.\n   */\n  writeFeatureText(feature, options) {\n    return abstract();\n  }\n\n  /**\n   * Encode an array of features as string.\n   *\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Encoded features.\n   * @api\n   * @override\n   */\n  writeFeatures(features, options) {\n    return this.writeFeaturesText(features, this.adaptOptions(options));\n  }\n\n  /**\n   * @abstract\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @protected\n   * @return {string} Text.\n   */\n  writeFeaturesText(features, options) {\n    return abstract();\n  }\n\n  /**\n   * Write a single geometry.\n   *\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @return {string} Geometry.\n   * @api\n   * @override\n   */\n  writeGeometry(geometry, options) {\n    return this.writeGeometryText(geometry, this.adaptOptions(options));\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @protected\n   * @return {string} Text.\n   */\n  writeGeometryText(geometry, options) {\n    return abstract();\n  }\n}\n\n/**\n * @param {Document|Element|Object|string} source Source.\n * @return {string} Text.\n */\nfunction getText(source) {\n  if (typeof source === 'string') {\n    return source;\n  }\n  return '';\n}\n\nexport default TextFeature;\n","/**\n * @module ol/format/WKT\n */\nimport Feature from '../Feature.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {transformGeometryWithOptions} from './Feature.js';\nimport TextFeature from './TextFeature.js';\n\n/**\n * Geometry constructors\n * @enum {function (new:import(\"../geom/Geometry.js\").default, Array, import(\"../geom/Geometry.js\").GeometryLayout)}\n */\nconst GeometryConstructor = {\n  'POINT': Point,\n  'LINESTRING': LineString,\n  'POLYGON': Polygon,\n  'MULTIPOINT': MultiPoint,\n  'MULTILINESTRING': MultiLineString,\n  'MULTIPOLYGON': MultiPolygon,\n};\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [splitCollection=false] Whether to split GeometryCollections into\n * multiple features on reading.\n */\n\n/**\n * @typedef {Object} Token\n * @property {number} type Type.\n * @property {number|string} [value] Value.\n * @property {number} position Position.\n */\n\n/**\n * @const\n * @type {string}\n */\nconst EMPTY = 'EMPTY';\n\n/**\n * @const\n * @type {string}\n */\nconst Z = 'Z';\n\n/**\n * @const\n * @type {string}\n */\nconst M = 'M';\n\n/**\n * @const\n * @type {string}\n */\nconst ZM = 'ZM';\n\n/**\n * @const\n * @enum {number}\n */\nconst TokenType = {\n  START: 0,\n  TEXT: 1,\n  LEFT_PAREN: 2,\n  RIGHT_PAREN: 3,\n  NUMBER: 4,\n  COMMA: 5,\n  EOF: 6,\n};\n\n/**\n * @type {Object<import(\"../geom/Geometry.js\").Type, string>}\n */\nconst wktTypeLookup = {\n  Point: 'POINT',\n  LineString: 'LINESTRING',\n  Polygon: 'POLYGON',\n  MultiPoint: 'MULTIPOINT',\n  MultiLineString: 'MULTILINESTRING',\n  MultiPolygon: 'MULTIPOLYGON',\n  GeometryCollection: 'GEOMETRYCOLLECTION',\n  Circle: 'CIRCLE',\n};\n\n/**\n * Class to tokenize a WKT string.\n */\nclass Lexer {\n  /**\n   * @param {string} wkt WKT string.\n   */\n  constructor(wkt) {\n    /**\n     * @type {string}\n     */\n    this.wkt = wkt;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.index_ = -1;\n  }\n\n  /**\n   * @param {string} c Character.\n   * @return {boolean} Whether the character is alphabetic.\n   * @private\n   */\n  isAlpha_(c) {\n    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');\n  }\n\n  /**\n   * @param {string} c Character.\n   * @param {boolean} [decimal] Whether the string number\n   *     contains a dot, i.e. is a decimal number.\n   * @return {boolean} Whether the character is numeric.\n   * @private\n   */\n  isNumeric_(c, decimal) {\n    decimal = decimal !== undefined ? decimal : false;\n    return (c >= '0' && c <= '9') || (c == '.' && !decimal);\n  }\n\n  /**\n   * @param {string} c Character.\n   * @return {boolean} Whether the character is whitespace.\n   * @private\n   */\n  isWhiteSpace_(c) {\n    return c == ' ' || c == '\\t' || c == '\\r' || c == '\\n';\n  }\n\n  /**\n   * @return {string} Next string character.\n   * @private\n   */\n  nextChar_() {\n    return this.wkt.charAt(++this.index_);\n  }\n\n  /**\n   * Fetch and return the next token.\n   * @return {Token} Next string token.\n   */\n  nextToken() {\n    const c = this.nextChar_();\n    const position = this.index_;\n    /** @type {number|string} */\n    let value = c;\n    let type;\n\n    if (c == '(') {\n      type = TokenType.LEFT_PAREN;\n    } else if (c == ',') {\n      type = TokenType.COMMA;\n    } else if (c == ')') {\n      type = TokenType.RIGHT_PAREN;\n    } else if (this.isNumeric_(c) || c == '-') {\n      type = TokenType.NUMBER;\n      value = this.readNumber_();\n    } else if (this.isAlpha_(c)) {\n      type = TokenType.TEXT;\n      value = this.readText_();\n    } else if (this.isWhiteSpace_(c)) {\n      return this.nextToken();\n    } else if (c === '') {\n      type = TokenType.EOF;\n    } else {\n      throw new Error('Unexpected character: ' + c);\n    }\n\n    return {position: position, value: value, type: type};\n  }\n\n  /**\n   * @return {number} Numeric token value.\n   * @private\n   */\n  readNumber_() {\n    let c;\n    const index = this.index_;\n    let decimal = false;\n    let scientificNotation = false;\n    do {\n      if (c == '.') {\n        decimal = true;\n      } else if (c == 'e' || c == 'E') {\n        scientificNotation = true;\n      }\n      c = this.nextChar_();\n    } while (\n      this.isNumeric_(c, decimal) ||\n      // if we haven't detected a scientific number before, 'e' or 'E'\n      // hint that we should continue to read\n      (!scientificNotation && (c == 'e' || c == 'E')) ||\n      // once we know that we have a scientific number, both '-' and '+'\n      // are allowed\n      (scientificNotation && (c == '-' || c == '+'))\n    );\n    return parseFloat(this.wkt.substring(index, this.index_--));\n  }\n\n  /**\n   * @return {string} String token value.\n   * @private\n   */\n  readText_() {\n    let c;\n    const index = this.index_;\n    do {\n      c = this.nextChar_();\n    } while (this.isAlpha_(c));\n    return this.wkt.substring(index, this.index_--).toUpperCase();\n  }\n}\n\n/**\n * Class to parse the tokens from the WKT string.\n */\nclass Parser {\n  /**\n   * @param {Lexer} lexer The lexer.\n   */\n  constructor(lexer) {\n    /**\n     * @type {Lexer}\n     * @private\n     */\n    this.lexer_ = lexer;\n\n    /**\n     * @type {Token}\n     * @private\n     */\n    this.token_ = {\n      position: 0,\n      type: TokenType.START,\n    };\n\n    /**\n     * @type {import(\"../geom/Geometry.js\").GeometryLayout}\n     * @private\n     */\n    this.layout_ = 'XY';\n  }\n\n  /**\n   * Fetch the next token form the lexer and replace the active token.\n   * @private\n   */\n  consume_() {\n    this.token_ = this.lexer_.nextToken();\n  }\n\n  /**\n   * Tests if the given type matches the type of the current token.\n   * @param {TokenType} type Token type.\n   * @return {boolean} Whether the token matches the given type.\n   */\n  isTokenType(type) {\n    return this.token_.type == type;\n  }\n\n  /**\n   * If the given type matches the current token, consume it.\n   * @param {TokenType} type Token type.\n   * @return {boolean} Whether the token matches the given type.\n   */\n  match(type) {\n    const isMatch = this.isTokenType(type);\n    if (isMatch) {\n      this.consume_();\n    }\n    return isMatch;\n  }\n\n  /**\n   * Try to parse the tokens provided by the lexer.\n   * @return {import(\"../geom/Geometry.js\").default} The geometry.\n   */\n  parse() {\n    this.consume_();\n    return this.parseGeometry_();\n  }\n\n  /**\n   * Try to parse the dimensional info.\n   * @return {import(\"../geom/Geometry.js\").GeometryLayout} The layout.\n   * @private\n   */\n  parseGeometryLayout_() {\n    /** @type {import(\"../geom/Geometry.js\").GeometryLayout} */\n    let layout = 'XY';\n    const dimToken = this.token_;\n    if (this.isTokenType(TokenType.TEXT)) {\n      const dimInfo = dimToken.value;\n      if (dimInfo === Z) {\n        layout = 'XYZ';\n      } else if (dimInfo === M) {\n        layout = 'XYM';\n      } else if (dimInfo === ZM) {\n        layout = 'XYZM';\n      }\n      if (layout !== 'XY') {\n        this.consume_();\n      }\n    }\n    return layout;\n  }\n\n  /**\n   * @return {Array<import(\"../geom/Geometry.js\").default>} A collection of geometries.\n   * @private\n   */\n  parseGeometryCollectionText_() {\n    if (this.match(TokenType.LEFT_PAREN)) {\n      const geometries = [];\n      do {\n        geometries.push(this.parseGeometry_());\n      } while (this.match(TokenType.COMMA));\n      if (this.match(TokenType.RIGHT_PAREN)) {\n        return geometries;\n      }\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<number>} All values in a point.\n   * @private\n   */\n  parsePointText_() {\n    if (this.match(TokenType.LEFT_PAREN)) {\n      const coordinates = this.parsePoint_();\n      if (this.match(TokenType.RIGHT_PAREN)) {\n        return coordinates;\n      }\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<Array<number>>} All points in a linestring.\n   * @private\n   */\n  parseLineStringText_() {\n    if (this.match(TokenType.LEFT_PAREN)) {\n      const coordinates = this.parsePointList_();\n      if (this.match(TokenType.RIGHT_PAREN)) {\n        return coordinates;\n      }\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<Array<Array<number>>>} All points in a polygon.\n   * @private\n   */\n  parsePolygonText_() {\n    if (this.match(TokenType.LEFT_PAREN)) {\n      const coordinates = this.parseLineStringTextList_();\n      if (this.match(TokenType.RIGHT_PAREN)) {\n        return coordinates;\n      }\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<Array<number>>} All points in a multipoint.\n   * @private\n   */\n  parseMultiPointText_() {\n    if (this.match(TokenType.LEFT_PAREN)) {\n      let coordinates;\n      if (this.token_.type == TokenType.LEFT_PAREN) {\n        coordinates = this.parsePointTextList_();\n      } else {\n        coordinates = this.parsePointList_();\n      }\n      if (this.match(TokenType.RIGHT_PAREN)) {\n        return coordinates;\n      }\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<Array<Array<number>>>} All linestring points\n   *                                          in a multilinestring.\n   * @private\n   */\n  parseMultiLineStringText_() {\n    if (this.match(TokenType.LEFT_PAREN)) {\n      const coordinates = this.parseLineStringTextList_();\n      if (this.match(TokenType.RIGHT_PAREN)) {\n        return coordinates;\n      }\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<Array<Array<Array<number>>>>} All polygon points in a multipolygon.\n   * @private\n   */\n  parseMultiPolygonText_() {\n    if (this.match(TokenType.LEFT_PAREN)) {\n      const coordinates = this.parsePolygonTextList_();\n      if (this.match(TokenType.RIGHT_PAREN)) {\n        return coordinates;\n      }\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<number>} A point.\n   * @private\n   */\n  parsePoint_() {\n    const coordinates = [];\n    const dimensions = this.layout_.length;\n    for (let i = 0; i < dimensions; ++i) {\n      const token = this.token_;\n      if (this.match(TokenType.NUMBER)) {\n        coordinates.push(/** @type {number} */ (token.value));\n      } else {\n        break;\n      }\n    }\n    if (coordinates.length == dimensions) {\n      return coordinates;\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n\n  /**\n   * @return {Array<Array<number>>} An array of points.\n   * @private\n   */\n  parsePointList_() {\n    const coordinates = [this.parsePoint_()];\n    while (this.match(TokenType.COMMA)) {\n      coordinates.push(this.parsePoint_());\n    }\n    return coordinates;\n  }\n\n  /**\n   * @return {Array<Array<number>>} An array of points.\n   * @private\n   */\n  parsePointTextList_() {\n    const coordinates = [this.parsePointText_()];\n    while (this.match(TokenType.COMMA)) {\n      coordinates.push(this.parsePointText_());\n    }\n    return coordinates;\n  }\n\n  /**\n   * @return {Array<Array<Array<number>>>} An array of points.\n   * @private\n   */\n  parseLineStringTextList_() {\n    const coordinates = [this.parseLineStringText_()];\n    while (this.match(TokenType.COMMA)) {\n      coordinates.push(this.parseLineStringText_());\n    }\n    return coordinates;\n  }\n\n  /**\n   * @return {Array<Array<Array<Array<number>>>>} An array of points.\n   * @private\n   */\n  parsePolygonTextList_() {\n    const coordinates = [this.parsePolygonText_()];\n    while (this.match(TokenType.COMMA)) {\n      coordinates.push(this.parsePolygonText_());\n    }\n    return coordinates;\n  }\n\n  /**\n   * @return {boolean} Whether the token implies an empty geometry.\n   * @private\n   */\n  isEmptyGeometry_() {\n    const isEmpty =\n      this.isTokenType(TokenType.TEXT) && this.token_.value == EMPTY;\n    if (isEmpty) {\n      this.consume_();\n    }\n    return isEmpty;\n  }\n\n  /**\n   * Create an error message for an unexpected token error.\n   * @return {string} Error message.\n   * @private\n   */\n  formatErrorMessage_() {\n    return (\n      'Unexpected `' +\n      this.token_.value +\n      '` at position ' +\n      this.token_.position +\n      ' in `' +\n      this.lexer_.wkt +\n      '`'\n    );\n  }\n\n  /**\n   * @return {import(\"../geom/Geometry.js\").default} The geometry.\n   * @private\n   */\n  parseGeometry_() {\n    const token = this.token_;\n    if (this.match(TokenType.TEXT)) {\n      const geomType = /** @type {string} */ (token.value);\n      this.layout_ = this.parseGeometryLayout_();\n      const isEmpty = this.isEmptyGeometry_();\n      if (geomType == 'GEOMETRYCOLLECTION') {\n        if (isEmpty) {\n          return new GeometryCollection([]);\n        }\n        const geometries = this.parseGeometryCollectionText_();\n        return new GeometryCollection(geometries);\n      }\n      const ctor = GeometryConstructor[geomType];\n      if (!ctor) {\n        throw new Error('Invalid geometry type: ' + geomType);\n      }\n\n      let coordinates;\n\n      if (isEmpty) {\n        if (geomType == 'POINT') {\n          coordinates = [NaN, NaN];\n        } else {\n          coordinates = [];\n        }\n      } else {\n        switch (geomType) {\n          case 'POINT': {\n            coordinates = this.parsePointText_();\n            break;\n          }\n          case 'LINESTRING': {\n            coordinates = this.parseLineStringText_();\n            break;\n          }\n          case 'POLYGON': {\n            coordinates = this.parsePolygonText_();\n            break;\n          }\n          case 'MULTIPOINT': {\n            coordinates = this.parseMultiPointText_();\n            break;\n          }\n          case 'MULTILINESTRING': {\n            coordinates = this.parseMultiLineStringText_();\n            break;\n          }\n          case 'MULTIPOLYGON': {\n            coordinates = this.parseMultiPolygonText_();\n            break;\n          }\n          default:\n            break;\n        }\n      }\n\n      return new ctor(coordinates, this.layout_);\n    }\n    throw new Error(this.formatErrorMessage_());\n  }\n}\n\n/**\n * @classdesc\n * Geometry format for reading and writing data in the `WellKnownText` (WKT)\n * format.\n *\n * @api\n */\nclass WKT extends TextFeature {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    options = options ? options : {};\n\n    /**\n     * Split GeometryCollection into multiple features.\n     * @type {boolean}\n     * @private\n     */\n    this.splitCollection_ =\n      options.splitCollection !== undefined ? options.splitCollection : false;\n  }\n\n  /**\n   * Parse a WKT string.\n   * @param {string} wkt WKT string.\n   * @return {import(\"../geom/Geometry.js\").default}\n   *     The geometry created.\n   * @private\n   */\n  parse_(wkt) {\n    const lexer = new Lexer(wkt);\n    const parser = new Parser(lexer);\n    return parser.parse();\n  }\n\n  /**\n   * @protected\n   * @param {string} text Text.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {import(\"../Feature.js\").default} Feature.\n   * @override\n   */\n  readFeatureFromText(text, options) {\n    const geom = this.readGeometryFromText(text, options);\n    const feature = new Feature();\n    feature.setGeometry(geom);\n    return feature;\n  }\n\n  /**\n   * @param {string} text Text.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {Array<Feature>} Features.\n   * @override\n   */\n  readFeaturesFromText(text, options) {\n    let geometries = [];\n    const geometry = this.readGeometryFromText(text, options);\n    if (this.splitCollection_ && geometry.getType() == 'GeometryCollection') {\n      geometries = /** @type {GeometryCollection} */ (\n        geometry\n      ).getGeometriesArray();\n    } else {\n      geometries = [geometry];\n    }\n    const features = [];\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      const feature = new Feature();\n      feature.setGeometry(geometries[i]);\n      features.push(feature);\n    }\n    return features;\n  }\n\n  /**\n   * @param {string} text Text.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @protected\n   * @return {import(\"../geom/Geometry.js\").default} Geometry.\n   * @override\n   */\n  readGeometryFromText(text, options) {\n    const geometry = this.parse_(text);\n    return transformGeometryWithOptions(geometry, false, options);\n  }\n\n  /**\n   * @param {import(\"../Feature.js\").default} feature Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @protected\n   * @return {string} Text.\n   * @override\n   */\n  writeFeatureText(feature, options) {\n    const geometry = feature.getGeometry();\n    if (geometry) {\n      return this.writeGeometryText(geometry, options);\n    }\n    return '';\n  }\n\n  /**\n   * @param {Array<import(\"../Feature.js\").default>} features Features.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @protected\n   * @return {string} Text.\n   * @override\n   */\n  writeFeaturesText(features, options) {\n    if (features.length == 1) {\n      return this.writeFeatureText(features[0], options);\n    }\n    const geometries = [];\n    for (let i = 0, ii = features.length; i < ii; ++i) {\n      geometries.push(features[i].getGeometry());\n    }\n    const collection = new GeometryCollection(geometries);\n    return this.writeGeometryText(collection, options);\n  }\n\n  /**\n   * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n   * @param {import(\"./Feature.js\").WriteOptions} [options] Write options.\n   * @protected\n   * @return {string} Text.\n   * @override\n   */\n  writeGeometryText(geometry, options) {\n    return encode(transformGeometryWithOptions(geometry, true, options));\n  }\n}\n\n/**\n * @param {Point} geom Point geometry.\n * @return {string} Coordinates part of Point as WKT.\n */\nfunction encodePointGeometry(geom) {\n  const coordinates = geom.getCoordinates();\n  if (coordinates.length === 0) {\n    return '';\n  }\n  return coordinates.join(' ');\n}\n\n/**\n * @param {MultiPoint} geom MultiPoint geometry.\n * @return {string} Coordinates part of MultiPoint as WKT.\n */\nfunction encodeMultiPointGeometry(geom) {\n  const array = [];\n  const components = geom.getPoints();\n  for (let i = 0, ii = components.length; i < ii; ++i) {\n    array.push('(' + encodePointGeometry(components[i]) + ')');\n  }\n  return array.join(',');\n}\n\n/**\n * @param {GeometryCollection} geom GeometryCollection geometry.\n * @return {string} Coordinates part of GeometryCollection as WKT.\n */\nfunction encodeGeometryCollectionGeometry(geom) {\n  const array = [];\n  const geoms = geom.getGeometries();\n  for (let i = 0, ii = geoms.length; i < ii; ++i) {\n    array.push(encode(geoms[i]));\n  }\n  return array.join(',');\n}\n\n/**\n * @param {LineString|import(\"../geom/LinearRing.js\").default} geom LineString geometry.\n * @return {string} Coordinates part of LineString as WKT.\n */\nfunction encodeLineStringGeometry(geom) {\n  const coordinates = geom.getCoordinates();\n  const array = [];\n  for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n    array.push(coordinates[i].join(' '));\n  }\n  return array.join(',');\n}\n\n/**\n * @param {MultiLineString} geom MultiLineString geometry.\n * @return {string} Coordinates part of MultiLineString as WKT.\n */\nfunction encodeMultiLineStringGeometry(geom) {\n  const array = [];\n  const components = geom.getLineStrings();\n  for (let i = 0, ii = components.length; i < ii; ++i) {\n    array.push('(' + encodeLineStringGeometry(components[i]) + ')');\n  }\n  return array.join(',');\n}\n\n/**\n * @param {Polygon} geom Polygon geometry.\n * @return {string} Coordinates part of Polygon as WKT.\n */\nfunction encodePolygonGeometry(geom) {\n  const array = [];\n  const rings = geom.getLinearRings();\n  for (let i = 0, ii = rings.length; i < ii; ++i) {\n    array.push('(' + encodeLineStringGeometry(rings[i]) + ')');\n  }\n  return array.join(',');\n}\n\n/**\n * @param {MultiPolygon} geom MultiPolygon geometry.\n * @return {string} Coordinates part of MultiPolygon as WKT.\n */\nfunction encodeMultiPolygonGeometry(geom) {\n  const array = [];\n  const components = geom.getPolygons();\n  for (let i = 0, ii = components.length; i < ii; ++i) {\n    array.push('(' + encodePolygonGeometry(components[i]) + ')');\n  }\n  return array.join(',');\n}\n\n/**\n * @param {import(\"../geom/SimpleGeometry.js\").default} geom SimpleGeometry geometry.\n * @return {string} Potential dimensional information for WKT type.\n */\nfunction encodeGeometryLayout(geom) {\n  const layout = geom.getLayout();\n  let dimInfo = '';\n  if (layout === 'XYZ' || layout === 'XYZM') {\n    dimInfo += Z;\n  }\n  if (layout === 'XYM' || layout === 'XYZM') {\n    dimInfo += M;\n  }\n  return dimInfo;\n}\n\n/**\n * @const\n * @type {Object<string, function(import(\"../geom/Geometry.js\").default): string>}\n */\nconst GeometryEncoder = {\n  'Point': encodePointGeometry,\n  'LineString': encodeLineStringGeometry,\n  'Polygon': encodePolygonGeometry,\n  'MultiPoint': encodeMultiPointGeometry,\n  'MultiLineString': encodeMultiLineStringGeometry,\n  'MultiPolygon': encodeMultiPolygonGeometry,\n  'GeometryCollection': encodeGeometryCollectionGeometry,\n};\n\n/**\n * Encode a geometry as WKT.\n * @param {import(\"../geom/Geometry.js\").default} geom The geometry to encode.\n * @return {string} WKT string for the geometry.\n */\nfunction encode(geom) {\n  const type = geom.getType();\n  const geometryEncoder = GeometryEncoder[type];\n  const enc = geometryEncoder(geom);\n  let wktType = wktTypeLookup[type];\n  if (typeof (/** @type {?} */ (geom).getFlatCoordinates) === 'function') {\n    const dimInfo = encodeGeometryLayout(\n      /** @type {import(\"../geom/SimpleGeometry.js\").default} */ (geom),\n    );\n    if (dimInfo.length > 0) {\n      wktType += ' ' + dimInfo;\n    }\n  }\n  if (enc.length === 0) {\n    return wktType + ' ' + EMPTY;\n  }\n  return wktType + '(' + enc + ')';\n}\n\nexport default WKT;\n","/**\n * @module ol/format/XML\n */\nimport {abstract} from '../util.js';\nimport {isDocument, parse} from '../xml.js';\n\n/**\n * @classdesc\n * Generic format for reading non-feature XML data\n *\n * @abstract\n */\nclass XML {\n  /**\n   * Read the source document.\n   *\n   * @param {Document|Element|string} source The XML source.\n   * @return {Object|null} An object representing the source.\n   * @api\n   */\n  read(source) {\n    if (!source) {\n      return null;\n    }\n    if (typeof source === 'string') {\n      const doc = parse(source);\n      return this.readFromDocument(doc);\n    }\n    if (isDocument(source)) {\n      return this.readFromDocument(/** @type {Document} */ (source));\n    }\n    return this.readFromNode(/** @type {Element} */ (source));\n  }\n\n  /**\n   * @param {Document} doc Document.\n   * @return {Object|null} Object\n   */\n  readFromDocument(doc) {\n    for (let n = doc.firstChild; n; n = n.nextSibling) {\n      if (n.nodeType == Node.ELEMENT_NODE) {\n        return this.readFromNode(/** @type {Element} */ (n));\n      }\n    }\n    return null;\n  }\n\n  /**\n   * @abstract\n   * @param {Element} node Node.\n   * @return {Object|null} Object\n   */\n  readFromNode(node) {\n    abstract();\n  }\n}\n\nexport default XML;\n","/**\n * @module ol/format/xlink\n */\n\n/**\n * @const\n * @type {string}\n */\nconst NAMESPACE_URI = 'http://www.w3.org/1999/xlink';\n\n/**\n * @param {Element} node Node.\n * @return {string|null} href.\n */\nexport function readHref(node) {\n  return node.getAttributeNS(NAMESPACE_URI, 'href');\n}\n","/**\n * @module ol/format/OWS\n */\nimport {\n  makeObjectPropertyPusher,\n  makeObjectPropertySetter,\n  makeStructureNS,\n  pushParseAndPop,\n} from '../xml.js';\nimport XML from './XML.js';\nimport {readHref} from './xlink.js';\nimport {readString} from './xsd.js';\n\n/**\n * @const\n * @type {Array<null|string>}\n */\nconst NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'ServiceIdentification': makeObjectPropertySetter(readServiceIdentification),\n  'ServiceProvider': makeObjectPropertySetter(readServiceProvider),\n  'OperationsMetadata': makeObjectPropertySetter(readOperationsMetadata),\n});\n\nclass OWS extends XML {\n  constructor() {\n    super();\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @return {Object|null} Object\n   * @override\n   */\n  readFromNode(node) {\n    const owsObject = pushParseAndPop({}, PARSERS, node, []);\n    return owsObject ? owsObject : null;\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst ADDRESS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'DeliveryPoint': makeObjectPropertySetter(readString),\n  'City': makeObjectPropertySetter(readString),\n  'AdministrativeArea': makeObjectPropertySetter(readString),\n  'PostalCode': makeObjectPropertySetter(readString),\n  'Country': makeObjectPropertySetter(readString),\n  'ElectronicMailAddress': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst ALLOWED_VALUES_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Value': makeObjectPropertyPusher(readValue),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst CONSTRAINT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'AllowedValues': makeObjectPropertySetter(readAllowedValues),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst CONTACT_INFO_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Phone': makeObjectPropertySetter(readPhone),\n  'Address': makeObjectPropertySetter(readAddress),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst DCP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'HTTP': makeObjectPropertySetter(readHttp),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst HTTP_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Get': makeObjectPropertyPusher(readGet),\n  'Post': undefined, // TODO\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst OPERATION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'DCP': makeObjectPropertySetter(readDcp),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst OPERATIONS_METADATA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Operation': readOperation,\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst PHONE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Voice': makeObjectPropertySetter(readString),\n  'Facsimile': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst REQUEST_METHOD_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Constraint': makeObjectPropertyPusher(readConstraint),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst SERVICE_CONTACT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'IndividualName': makeObjectPropertySetter(readString),\n  'PositionName': makeObjectPropertySetter(readString),\n  'ContactInfo': makeObjectPropertySetter(readContactInfo),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst SERVICE_IDENTIFICATION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Abstract': makeObjectPropertySetter(readString),\n  'AccessConstraints': makeObjectPropertySetter(readString),\n  'Fees': makeObjectPropertySetter(readString),\n  'Title': makeObjectPropertySetter(readString),\n  'ServiceTypeVersion': makeObjectPropertySetter(readString),\n  'ServiceType': makeObjectPropertySetter(readString),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst SERVICE_PROVIDER_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'ProviderName': makeObjectPropertySetter(readString),\n  'ProviderSite': makeObjectPropertySetter(readHref),\n  'ServiceContact': makeObjectPropertySetter(readServiceContact),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The address.\n */\nfunction readAddress(node, objectStack) {\n  return pushParseAndPop({}, ADDRESS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The values.\n */\nfunction readAllowedValues(node, objectStack) {\n  return pushParseAndPop({}, ALLOWED_VALUES_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The constraint.\n */\nfunction readConstraint(node, objectStack) {\n  const name = node.getAttribute('name');\n  if (!name) {\n    return undefined;\n  }\n  return pushParseAndPop({'name': name}, CONSTRAINT_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The contact info.\n */\nfunction readContactInfo(node, objectStack) {\n  return pushParseAndPop({}, CONTACT_INFO_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The DCP.\n */\nfunction readDcp(node, objectStack) {\n  return pushParseAndPop({}, DCP_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The GET object.\n */\nfunction readGet(node, objectStack) {\n  const href = readHref(node);\n  if (!href) {\n    return undefined;\n  }\n  return pushParseAndPop(\n    {'href': href},\n    REQUEST_METHOD_PARSERS,\n    node,\n    objectStack,\n  );\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The HTTP object.\n */\nfunction readHttp(node, objectStack) {\n  return pushParseAndPop({}, HTTP_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The operation.\n */\nfunction readOperation(node, objectStack) {\n  const name = node.getAttribute('name');\n  const value = pushParseAndPop({}, OPERATION_PARSERS, node, objectStack);\n  if (!value) {\n    return undefined;\n  }\n  const object = /** @type {Object} */ (objectStack[objectStack.length - 1]);\n  object[name] = value;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The operations metadata.\n */\nfunction readOperationsMetadata(node, objectStack) {\n  return pushParseAndPop({}, OPERATIONS_METADATA_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The phone.\n */\nfunction readPhone(node, objectStack) {\n  return pushParseAndPop({}, PHONE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service identification.\n */\nfunction readServiceIdentification(node, objectStack) {\n  return pushParseAndPop({}, SERVICE_IDENTIFICATION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service contact.\n */\nfunction readServiceContact(node, objectStack) {\n  return pushParseAndPop({}, SERVICE_CONTACT_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} The service provider.\n */\nfunction readServiceProvider(node, objectStack) {\n  return pushParseAndPop({}, SERVICE_PROVIDER_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {string|undefined} The value.\n */\nfunction readValue(node, objectStack) {\n  return readString(node);\n}\n\nexport default OWS;\n","/**\n * @module ol/format/WMTSCapabilities\n */\nimport {boundingExtent} from '../extent.js';\nimport {\n  makeArrayPusher,\n  makeObjectPropertyPusher,\n  makeObjectPropertySetter,\n  makeStructureNS,\n  pushParseAndPop,\n} from '../xml.js';\nimport OWS from './OWS.js';\nimport XML from './XML.js';\nimport {readHref} from './xlink.js';\nimport {readDecimal, readPositiveInteger, readString} from './xsd.js';\n\n/**\n * @const\n * @type {Array<null|string>}\n */\nconst NAMESPACE_URIS = [null, 'http://www.opengis.net/wmts/1.0'];\n\n/**\n * @const\n * @type {Array<null|string>}\n */\nconst OWS_NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Contents': makeObjectPropertySetter(readContents),\n});\n\n/**\n * @classdesc\n * Format for reading WMTS capabilities data.\n *\n * @api\n */\nclass WMTSCapabilities extends XML {\n  constructor() {\n    super();\n\n    /**\n     * @type {OWS}\n     * @private\n     */\n    this.owsParser_ = new OWS();\n  }\n\n  /**\n   * @param {Element} node Node.\n   * @return {Object|null} Object\n   * @override\n   */\n  readFromNode(node) {\n    let version = node.getAttribute('version');\n    if (version) {\n      version = version.trim();\n    }\n    let WMTSCapabilityObject = this.owsParser_.readFromNode(node);\n    if (!WMTSCapabilityObject) {\n      return null;\n    }\n    WMTSCapabilityObject['version'] = version;\n    WMTSCapabilityObject = pushParseAndPop(\n      WMTSCapabilityObject,\n      PARSERS,\n      node,\n      [],\n    );\n    return WMTSCapabilityObject ? WMTSCapabilityObject : null;\n  }\n}\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst CONTENTS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'Layer': makeObjectPropertyPusher(readLayer),\n  'TileMatrixSet': makeObjectPropertyPusher(readTileMatrixSet),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst LAYER_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'Style': makeObjectPropertyPusher(readStyle),\n    'Format': makeObjectPropertyPusher(readString),\n    'TileMatrixSetLink': makeObjectPropertyPusher(readTileMatrixSetLink),\n    'Dimension': makeObjectPropertyPusher(readDimensions),\n    'ResourceURL': makeObjectPropertyPusher(readResourceUrl),\n  },\n  makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Title': makeObjectPropertySetter(readString),\n    'Abstract': makeObjectPropertySetter(readString),\n    'WGS84BoundingBox': makeObjectPropertySetter(readBoundingBox),\n    'BoundingBox': makeObjectPropertyPusher(readBoundingBoxWithCrs),\n    'Identifier': makeObjectPropertySetter(readString),\n  }),\n);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst STYLE_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'LegendURL': makeObjectPropertyPusher(readLegendUrl),\n  },\n  makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Title': makeObjectPropertySetter(readString),\n    'Identifier': makeObjectPropertySetter(readString),\n  }),\n);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst TMS_LINKS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'TileMatrixSet': makeObjectPropertySetter(readString),\n  'TileMatrixSetLimits': makeObjectPropertySetter(readTileMatrixLimitsList),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst TMS_LIMITS_LIST_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'TileMatrixLimits': makeArrayPusher(readTileMatrixLimits),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst TMS_LIMITS_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n  'TileMatrix': makeObjectPropertySetter(readString),\n  'MinTileRow': makeObjectPropertySetter(readPositiveInteger),\n  'MaxTileRow': makeObjectPropertySetter(readPositiveInteger),\n  'MinTileCol': makeObjectPropertySetter(readPositiveInteger),\n  'MaxTileCol': makeObjectPropertySetter(readPositiveInteger),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst DIMENSION_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'Default': makeObjectPropertySetter(readString),\n    'Value': makeObjectPropertyPusher(readString),\n  },\n  makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Identifier': makeObjectPropertySetter(readString),\n  }),\n);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst WGS84_BBOX_READERS = makeStructureNS(OWS_NAMESPACE_URIS, {\n  'LowerCorner': makeArrayPusher(readCoordinates),\n  'UpperCorner': makeArrayPusher(readCoordinates),\n});\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst TMS_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'WellKnownScaleSet': makeObjectPropertySetter(readString),\n    'TileMatrix': makeObjectPropertyPusher(readTileMatrix),\n  },\n  makeStructureNS(OWS_NAMESPACE_URIS, {\n    'SupportedCRS': makeObjectPropertySetter(readString),\n    'Identifier': makeObjectPropertySetter(readString),\n    'BoundingBox': makeObjectPropertySetter(readBoundingBox),\n  }),\n);\n\n/**\n * @const\n * @type {Object<string, Object<string, import(\"../xml.js\").Parser>>}\n */\n// @ts-ignore\nconst TM_PARSERS = makeStructureNS(\n  NAMESPACE_URIS,\n  {\n    'TopLeftCorner': makeObjectPropertySetter(readCoordinates),\n    'ScaleDenominator': makeObjectPropertySetter(readDecimal),\n    'TileWidth': makeObjectPropertySetter(readPositiveInteger),\n    'TileHeight': makeObjectPropertySetter(readPositiveInteger),\n    'MatrixWidth': makeObjectPropertySetter(readPositiveInteger),\n    'MatrixHeight': makeObjectPropertySetter(readPositiveInteger),\n  },\n  makeStructureNS(OWS_NAMESPACE_URIS, {\n    'Identifier': makeObjectPropertySetter(readString),\n  }),\n);\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Attribution object.\n */\nfunction readContents(node, objectStack) {\n  return pushParseAndPop({}, CONTENTS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Layers object.\n */\nfunction readLayer(node, objectStack) {\n  return pushParseAndPop({}, LAYER_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set object.\n */\nfunction readTileMatrixSet(node, objectStack) {\n  return pushParseAndPop({}, TMS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Style object.\n */\nfunction readStyle(node, objectStack) {\n  const style = pushParseAndPop({}, STYLE_PARSERS, node, objectStack);\n  if (!style) {\n    return undefined;\n  }\n  const isDefault = node.getAttribute('isDefault') === 'true';\n  style['isDefault'] = isDefault;\n  return style;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Tile Matrix Set Link object.\n */\nfunction readTileMatrixSetLink(node, objectStack) {\n  return pushParseAndPop({}, TMS_LINKS_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Dimension object.\n */\nfunction readDimensions(node, objectStack) {\n  return pushParseAndPop({}, DIMENSION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Resource URL object.\n */\nfunction readResourceUrl(node, objectStack) {\n  const format = node.getAttribute('format');\n  const template = node.getAttribute('template');\n  const resourceType = node.getAttribute('resourceType');\n  const resource = {};\n  if (format) {\n    resource['format'] = format;\n  }\n  if (template) {\n    resource['template'] = template;\n  }\n  if (resourceType) {\n    resource['resourceType'] = resourceType;\n  }\n  return resource;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} BBox object.\n */\nfunction readBoundingBox(node, objectStack) {\n  const coordinates = pushParseAndPop(\n    [],\n    WGS84_BBOX_READERS,\n    node,\n    objectStack,\n  );\n  if (coordinates.length != 2) {\n    return undefined;\n  }\n  return boundingExtent(coordinates);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} BBox object.\n */\nfunction readBoundingBoxWithCrs(node, objectStack) {\n  const crs = node.getAttribute('crs');\n  const coordinates = pushParseAndPop(\n    [],\n    WGS84_BBOX_READERS,\n    node,\n    objectStack,\n  );\n  if (coordinates.length != 2) {\n    return undefined;\n  }\n  return {extent: boundingExtent(coordinates), crs: crs};\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Legend object.\n */\nfunction readLegendUrl(node, objectStack) {\n  const legend = {};\n  legend['format'] = node.getAttribute('format');\n  legend['href'] = readHref(node);\n  return legend;\n}\n\n/**\n * @param {Node} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Coordinates object.\n */\nfunction readCoordinates(node, objectStack) {\n  const coordinates = readString(node).split(/\\s+/);\n  if (!coordinates || coordinates.length != 2) {\n    return undefined;\n  }\n  const x = +coordinates[0];\n  const y = +coordinates[1];\n  if (isNaN(x) || isNaN(y)) {\n    return undefined;\n  }\n  return [x, y];\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrix object.\n */\nfunction readTileMatrix(node, objectStack) {\n  return pushParseAndPop({}, TM_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixSetLimits Object.\n */\nfunction readTileMatrixLimitsList(node, objectStack) {\n  return pushParseAndPop([], TMS_LIMITS_LIST_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} TileMatrixLimits Array.\n */\nfunction readTileMatrixLimits(node, objectStack) {\n  return pushParseAndPop({}, TMS_LIMITS_PARSERS, node, objectStack);\n}\n\nexport default WMTSCapabilities;\n","/**\n * @module ol/format/xsd\n */\nimport {padNumber} from '../string.js';\nimport {getAllTextContent, getDocument} from '../xml.js';\n\n/**\n * @param {Node} node Node.\n * @return {boolean|undefined} Boolean.\n */\nexport function readBoolean(node) {\n  const s = getAllTextContent(node, false);\n  return readBooleanString(s);\n}\n\n/**\n * @param {string} string String.\n * @return {boolean|undefined} Boolean.\n */\nexport function readBooleanString(string) {\n  const m = /^\\s*(true|1)|(false|0)\\s*$/.exec(string);\n  if (m) {\n    return m[1] !== undefined || false;\n  }\n  return undefined;\n}\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} DateTime in seconds.\n */\nexport function readDateTime(node) {\n  const s = getAllTextContent(node, false);\n  const dateTime = Date.parse(s);\n  return isNaN(dateTime) ? undefined : dateTime / 1000;\n}\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Decimal.\n */\nexport function readDecimal(node) {\n  const s = getAllTextContent(node, false);\n  return readDecimalString(s);\n}\n\n/**\n * @param {string} string String.\n * @return {number|undefined} Decimal.\n */\nexport function readDecimalString(string) {\n  // FIXME check spec\n  const m = /^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)\\s*$/i.exec(string);\n  if (m) {\n    return parseFloat(m[1]);\n  }\n  return undefined;\n}\n\n/**\n * @param {Node} node Node.\n * @return {number|undefined} Non negative integer.\n */\nexport function readPositiveInteger(node) {\n  const s = getAllTextContent(node, false);\n  return readNonNegativeIntegerString(s);\n}\n\n/**\n * @param {string} string String.\n * @return {number|undefined} Non negative integer.\n */\nexport function readNonNegativeIntegerString(string) {\n  const m = /^\\s*(\\d+)\\s*$/.exec(string);\n  if (m) {\n    return parseInt(m[1], 10);\n  }\n  return undefined;\n}\n\n/**\n * @param {Node} node Node.\n * @return {string|undefined} String.\n */\nexport function readString(node) {\n  return getAllTextContent(node, false).trim();\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the boolean to.\n * @param {boolean} bool Boolean.\n */\nexport function writeBooleanTextNode(node, bool) {\n  writeStringTextNode(node, bool ? '1' : '0');\n}\n\n/**\n * @param {Node} node Node to append a CDATA Section with the string to.\n * @param {string} string String.\n */\nexport function writeCDATASection(node, string) {\n  node.appendChild(getDocument().createCDATASection(string));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the dateTime to.\n * @param {number} dateTime DateTime in seconds.\n */\nexport function writeDateTimeTextNode(node, dateTime) {\n  const date = new Date(dateTime * 1000);\n  const string =\n    date.getUTCFullYear() +\n    '-' +\n    padNumber(date.getUTCMonth() + 1, 2) +\n    '-' +\n    padNumber(date.getUTCDate(), 2) +\n    'T' +\n    padNumber(date.getUTCHours(), 2) +\n    ':' +\n    padNumber(date.getUTCMinutes(), 2) +\n    ':' +\n    padNumber(date.getUTCSeconds(), 2) +\n    'Z';\n  node.appendChild(getDocument().createTextNode(string));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} decimal Decimal.\n */\nexport function writeDecimalTextNode(node, decimal) {\n  const string = decimal.toPrecision();\n  node.appendChild(getDocument().createTextNode(string));\n}\n\n/**\n * @param {Node} node Node to append a TextNode with the decimal to.\n * @param {number} nonNegativeInteger Non negative integer.\n */\nexport function writeNonNegativeIntegerTextNode(node, nonNegativeInteger) {\n  const string = nonNegativeInteger.toString();\n  node.appendChild(getDocument().createTextNode(string));\n}\n\nconst whiteSpaceStart = /^\\s/;\nconst whiteSpaceEnd = /\\s$/;\nconst cdataCharacters = /(\\n|\\t|\\r|<|&| {2})/;\n\n/**\n * @param {Node} node Node to append a TextNode with the string to.\n * @param {string} string String.\n */\nexport function writeStringTextNode(node, string) {\n  if (\n    typeof string === 'string' &&\n    (whiteSpaceStart.test(string) ||\n      whiteSpaceEnd.test(string) ||\n      cdataCharacters.test(string))\n  ) {\n    string.split(']]>').forEach((part, i, a) => {\n      if (i < a.length - 1) {\n        part += ']]';\n      }\n      if (i > 0) {\n        part = '>' + part;\n      }\n      writeCDATASection(node, part);\n    });\n  } else {\n    node.appendChild(getDocument().createTextNode(string));\n  }\n}\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n  return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n  return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return.  If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n  /** @type {ReturnType} */\n  let lastResult;\n\n  /** @type {Array<any>|undefined} */\n  let lastArgs;\n\n  let lastThis;\n\n  /**\n   * @this {*} Only need to know if `this` changed, don't care what type\n   * @return {ReturnType} Memoized value\n   */\n  return function () {\n    const nextArgs = Array.prototype.slice.call(arguments);\n    if (!lastArgs || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n      lastThis = this;\n      lastArgs = nextArgs;\n      lastResult = fn.apply(this, arguments);\n    }\n    return lastResult;\n  };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise<T>)} getter A function that returns a value or a promise for a value.\n * @return {Promise<T>} A promise for the value.\n */\nexport function toPromise(getter) {\n  function promiseGetter() {\n    let value;\n    try {\n      value = getter();\n    } catch (err) {\n      return Promise.reject(err);\n    }\n    if (value instanceof Promise) {\n      return value;\n    }\n    return Promise.resolve(value);\n  }\n  return promiseGetter();\n}\n","/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport {\n  createEmpty,\n  createOrUpdateEmpty,\n  getHeight,\n  returnOrUpdate,\n} from '../extent.js';\nimport {memoizeOne} from '../functions.js';\nimport {get as getProjection, getTransform} from '../proj.js';\nimport {\n  compose as composeTransform,\n  create as createTransform,\n} from '../transform.js';\nimport {abstract} from '../util.js';\nimport {transform2D} from './flat/transform.js';\n\n/**\n * @typedef {'XY' | 'XYZ' | 'XYM' | 'XYZM'} GeometryLayout\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available.\n */\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection' | 'Circle'} Type\n * The geometry type.  One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, or `'Circle'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/** @type {import('../coordinate.js').Coordinate} */\nconst tmpPoint = [NaN, NaN];\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nclass Geometry extends BaseObject {\n  constructor() {\n    super();\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.extent_ = createEmpty();\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.extentRevision_ = -1;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.simplifiedGeometryRevision = 0;\n\n    /**\n     * Get a transformed and simplified version of the geometry.\n     * @abstract\n     * @param {number} revision The geometry revision.\n     * @param {number} squaredTolerance Squared tolerance.\n     * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n     * @return {Geometry} Simplified geometry.\n     */\n    this.simplifyTransformedInternal = memoizeOne(\n      (revision, squaredTolerance, transform) => {\n        if (!transform) {\n          return this.getSimplifiedGeometry(squaredTolerance);\n        }\n        const clone = this.clone();\n        clone.applyTransform(transform);\n        return clone.getSimplifiedGeometry(squaredTolerance);\n      },\n    );\n  }\n\n  /**\n   * Get a transformed and simplified version of the geometry.\n   * @abstract\n   * @param {number} squaredTolerance Squared tolerance.\n   * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n   * @return {Geometry} Simplified geometry.\n   */\n  simplifyTransformed(squaredTolerance, transform) {\n    return this.simplifyTransformedInternal(\n      this.getRevision(),\n      squaredTolerance,\n      transform,\n    );\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @abstract\n   * @return {!Geometry} Clone.\n   */\n  clone() {\n    return abstract();\n  }\n\n  /**\n   * @abstract\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    return abstract();\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @return {boolean} Contains (x, y).\n   */\n  containsXY(x, y) {\n    return this.closestPointXY(x, y, tmpPoint, Number.MIN_VALUE) === 0;\n  }\n\n  /**\n   * Return the closest point of the geometry to the passed point as\n   * {@link module:ol/coordinate~Coordinate coordinate}.\n   * @param {import(\"../coordinate.js\").Coordinate} point Point.\n   * @param {import(\"../coordinate.js\").Coordinate} [closestPoint] Closest point.\n   * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n   * @api\n   */\n  getClosestPoint(point, closestPoint) {\n    closestPoint = closestPoint ? closestPoint : [NaN, NaN];\n    this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n    return closestPoint;\n  }\n\n  /**\n   * Returns true if this geometry includes the specified coordinate. If the\n   * coordinate is on the boundary of the geometry, returns false.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @return {boolean} Contains coordinate.\n   * @api\n   */\n  intersectsCoordinate(coordinate) {\n    return this.containsXY(coordinate[0], coordinate[1]);\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @protected\n   * @return {import(\"../extent.js\").Extent} extent Extent.\n   */\n  computeExtent(extent) {\n    return abstract();\n  }\n\n  /**\n   * Get the extent of the geometry.\n   * @param {import(\"../extent.js\").Extent} [extent] Extent.\n   * @return {import(\"../extent.js\").Extent} extent Extent.\n   * @api\n   */\n  getExtent(extent) {\n    if (this.extentRevision_ != this.getRevision()) {\n      const extent = this.computeExtent(this.extent_);\n      if (isNaN(extent[0]) || isNaN(extent[1])) {\n        createOrUpdateEmpty(extent);\n      }\n      this.extentRevision_ = this.getRevision();\n    }\n    return returnOrUpdate(this.extent_, extent);\n  }\n\n  /**\n   * Rotate the geometry around a given coordinate. This modifies the geometry\n   * coordinates in place.\n   * @abstract\n   * @param {number} angle Rotation angle in radians.\n   * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n   * @api\n   */\n  rotate(angle, anchor) {\n    abstract();\n  }\n\n  /**\n   * Scale the geometry (with an optional origin).  This modifies the geometry\n   * coordinates in place.\n   * @abstract\n   * @param {number} sx The scaling factor in the x-direction.\n   * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n   * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n   *     of the geometry extent).\n   * @api\n   */\n  scale(sx, sy, anchor) {\n    abstract();\n  }\n\n  /**\n   * Create a simplified version of this geometry.  For linestrings, this uses\n   * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n   * algorithm.  For polygons, a quantization-based\n   * simplification is used to preserve topology.\n   * @param {number} tolerance The tolerance distance for simplification.\n   * @return {Geometry} A new, simplified version of the original geometry.\n   * @api\n   */\n  simplify(tolerance) {\n    return this.getSimplifiedGeometry(tolerance * tolerance);\n  }\n\n  /**\n   * Create a simplified version of this geometry using the Douglas Peucker\n   * algorithm.\n   * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n   * @abstract\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {Geometry} Simplified geometry.\n   */\n  getSimplifiedGeometry(squaredTolerance) {\n    return abstract();\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @abstract\n   * @return {Type} Geometry type.\n   */\n  getType() {\n    return abstract();\n  }\n\n  /**\n   * Apply a transform function to the coordinates of the geometry.\n   * The geometry is modified in place.\n   * If you do not want the geometry modified in place, first `clone()` it and\n   * then use this function on the clone.\n   * @abstract\n   * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n   * Called with a flat array of geometry coordinates.\n   */\n  applyTransform(transformFn) {\n    abstract();\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @abstract\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   */\n  intersectsExtent(extent) {\n    return abstract();\n  }\n\n  /**\n   * Translate the geometry.  This modifies the geometry coordinates in place.  If\n   * instead you want a new geometry, first `clone()` this geometry.\n   * @abstract\n   * @param {number} deltaX Delta X.\n   * @param {number} deltaY Delta Y.\n   * @api\n   */\n  translate(deltaX, deltaY) {\n    abstract();\n  }\n\n  /**\n   * Transform each coordinate of the geometry from one coordinate reference\n   * system to another. The geometry is modified in place.\n   * For example, a line will be transformed to a line and a circle to a circle.\n   * If you do not want the geometry modified in place, first `clone()` it and\n   * then use this function on the clone.\n   *\n   * @param {import(\"../proj.js\").ProjectionLike} source The current projection.  Can be a\n   *     string identifier or a {@link module:ol/proj/Projection~Projection} object.\n   * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection.  Can be a\n   *     string identifier or a {@link module:ol/proj/Projection~Projection} object.\n   * @return {this} This geometry.  Note that original geometry is\n   *     modified in place.\n   * @api\n   */\n  transform(source, destination) {\n    /** @type {import(\"../proj/Projection.js\").default} */\n    const sourceProj = getProjection(source);\n    const transformFn =\n      sourceProj.getUnits() == 'tile-pixels'\n        ? function (inCoordinates, outCoordinates, stride) {\n            const pixelExtent = sourceProj.getExtent();\n            const projectedExtent = sourceProj.getWorldExtent();\n            const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n            composeTransform(\n              tmpTransform,\n              projectedExtent[0],\n              projectedExtent[3],\n              scale,\n              -scale,\n              0,\n              0,\n              0,\n            );\n            const transformed = transform2D(\n              inCoordinates,\n              0,\n              inCoordinates.length,\n              stride,\n              tmpTransform,\n              outCoordinates,\n            );\n            const projTransform = getTransform(sourceProj, destination);\n            if (projTransform) {\n              return projTransform(transformed, transformed, stride);\n            }\n            return transformed;\n          }\n        : getTransform(sourceProj, destination);\n    this.applyTransform(transformFn);\n    return this;\n  }\n}\n\nexport default Geometry;\n","/**\n * @module ol/geom/GeometryCollection\n */\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {\n  closestSquaredDistanceXY,\n  createOrUpdateEmpty,\n  extend,\n  getCenter,\n} from '../extent.js';\nimport Geometry from './Geometry.js';\n\n/**\n * @classdesc\n * An array of {@link module:ol/geom/Geometry~Geometry} objects.\n *\n * @api\n */\nclass GeometryCollection extends Geometry {\n  /**\n   * @param {Array<Geometry>} geometries Geometries.\n   */\n  constructor(geometries) {\n    super();\n\n    /**\n     * @private\n     * @type {Array<Geometry>}\n     */\n    this.geometries_ = geometries;\n\n    /**\n     * @private\n     * @type {Array<import(\"../events.js\").EventsKey>}\n     */\n    this.changeEventsKeys_ = [];\n\n    this.listenGeometriesChange_();\n  }\n\n  /**\n   * @private\n   */\n  unlistenGeometriesChange_() {\n    this.changeEventsKeys_.forEach(unlistenByKey);\n    this.changeEventsKeys_.length = 0;\n  }\n\n  /**\n   * @private\n   */\n  listenGeometriesChange_() {\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      this.changeEventsKeys_.push(\n        listen(geometries[i], EventType.CHANGE, this.changed, this),\n      );\n    }\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!GeometryCollection} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const geometryCollection = new GeometryCollection(\n      cloneGeometries(this.geometries_),\n    );\n    geometryCollection.applyProperties(this);\n    return geometryCollection;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n      return minSquaredDistance;\n    }\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      minSquaredDistance = geometries[i].closestPointXY(\n        x,\n        y,\n        closestPoint,\n        minSquaredDistance,\n      );\n    }\n    return minSquaredDistance;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @return {boolean} Contains (x, y).\n   * @override\n   */\n  containsXY(x, y) {\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      if (geometries[i].containsXY(x, y)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @protected\n   * @return {import(\"../extent.js\").Extent} extent Extent.\n   * @override\n   */\n  computeExtent(extent) {\n    createOrUpdateEmpty(extent);\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      extend(extent, geometries[i].getExtent());\n    }\n    return extent;\n  }\n\n  /**\n   * Return the geometries that make up this geometry collection.\n   * @return {Array<Geometry>} Geometries.\n   * @api\n   */\n  getGeometries() {\n    return cloneGeometries(this.geometries_);\n  }\n\n  /**\n   * @return {Array<Geometry>} Geometries.\n   */\n  getGeometriesArray() {\n    return this.geometries_;\n  }\n\n  /**\n   * @return {Array<Geometry>} Geometries.\n   */\n  getGeometriesArrayRecursive() {\n    /** @type {Array<Geometry>} */\n    let geometriesArray = [];\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      if (geometries[i].getType() === this.getType()) {\n        geometriesArray = geometriesArray.concat(\n          /** @type {GeometryCollection} */ (\n            geometries[i]\n          ).getGeometriesArrayRecursive(),\n        );\n      } else {\n        geometriesArray.push(geometries[i]);\n      }\n    }\n    return geometriesArray;\n  }\n\n  /**\n   * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {GeometryCollection} Simplified GeometryCollection.\n   * @override\n   */\n  getSimplifiedGeometry(squaredTolerance) {\n    if (this.simplifiedGeometryRevision !== this.getRevision()) {\n      this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n      this.simplifiedGeometryRevision = this.getRevision();\n    }\n    if (\n      squaredTolerance < 0 ||\n      (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n        squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance)\n    ) {\n      return this;\n    }\n\n    const simplifiedGeometries = [];\n    const geometries = this.geometries_;\n    let simplified = false;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      const geometry = geometries[i];\n      const simplifiedGeometry =\n        geometry.getSimplifiedGeometry(squaredTolerance);\n      simplifiedGeometries.push(simplifiedGeometry);\n      if (simplifiedGeometry !== geometry) {\n        simplified = true;\n      }\n    }\n    if (simplified) {\n      const simplifiedGeometryCollection = new GeometryCollection(\n        simplifiedGeometries,\n      );\n      return simplifiedGeometryCollection;\n    }\n    this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n    return this;\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'GeometryCollection';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      if (geometries[i].intersectsExtent(extent)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * @return {boolean} Is empty.\n   */\n  isEmpty() {\n    return this.geometries_.length === 0;\n  }\n\n  /**\n   * Rotate the geometry around a given coordinate. This modifies the geometry\n   * coordinates in place.\n   * @param {number} angle Rotation angle in radians.\n   * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n   * @api\n   * @override\n   */\n  rotate(angle, anchor) {\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      geometries[i].rotate(angle, anchor);\n    }\n    this.changed();\n  }\n\n  /**\n   * Scale the geometry (with an optional origin).  This modifies the geometry\n   * coordinates in place.\n   * @abstract\n   * @param {number} sx The scaling factor in the x-direction.\n   * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n   * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n   *     of the geometry extent).\n   * @api\n   * @override\n   */\n  scale(sx, sy, anchor) {\n    if (!anchor) {\n      anchor = getCenter(this.getExtent());\n    }\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      geometries[i].scale(sx, sy, anchor);\n    }\n    this.changed();\n  }\n\n  /**\n   * Set the geometries that make up this geometry collection.\n   * @param {Array<Geometry>} geometries Geometries.\n   * @api\n   */\n  setGeometries(geometries) {\n    this.setGeometriesArray(cloneGeometries(geometries));\n  }\n\n  /**\n   * @param {Array<Geometry>} geometries Geometries.\n   */\n  setGeometriesArray(geometries) {\n    this.unlistenGeometriesChange_();\n    this.geometries_ = geometries;\n    this.listenGeometriesChange_();\n    this.changed();\n  }\n\n  /**\n   * Apply a transform function to the coordinates of the geometry.\n   * The geometry is modified in place.\n   * If you do not want the geometry modified in place, first `clone()` it and\n   * then use this function on the clone.\n   * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n   * Called with a flat array of geometry coordinates.\n   * @api\n   * @override\n   */\n  applyTransform(transformFn) {\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      geometries[i].applyTransform(transformFn);\n    }\n    this.changed();\n  }\n\n  /**\n   * Translate the geometry.  This modifies the geometry coordinates in place.  If\n   * instead you want a new geometry, first `clone()` this geometry.\n   * @param {number} deltaX Delta X.\n   * @param {number} deltaY Delta Y.\n   * @api\n   * @override\n   */\n  translate(deltaX, deltaY) {\n    const geometries = this.geometries_;\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      geometries[i].translate(deltaX, deltaY);\n    }\n    this.changed();\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.unlistenGeometriesChange_();\n    super.disposeInternal();\n  }\n}\n\n/**\n * @param {Array<Geometry>} geometries Geometries.\n * @return {Array<Geometry>} Cloned geometries.\n */\nfunction cloneGeometries(geometries) {\n  return geometries.map((geometry) => geometry.clone());\n}\n\nexport default GeometryCollection;\n","/**\n * @module ol/geom/LineString\n */\nimport {extend} from '../array.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {assignClosestPoint, maxSquaredDelta} from './flat/closest.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {interpolatePoint, lineStringCoordinateAtM} from './flat/interpolate.js';\nimport {intersectsLineString} from './flat/intersectsextent.js';\nimport {lineStringLength} from './flat/length.js';\nimport {forEach as forEachSegment} from './flat/segments.js';\nimport {douglasPeucker} from './flat/simplify.js';\n\n/**\n * @classdesc\n * Linestring geometry.\n *\n * @api\n */\nclass LineString extends SimpleGeometry {\n  /**\n   * @param {Array<import(\"../coordinate.js\").Coordinate>|Array<number>} coordinates Coordinates.\n   *     For internal use, flat coordinates in combination with `layout` are also accepted.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   */\n  constructor(coordinates, layout) {\n    super();\n\n    /**\n     * @private\n     * @type {import(\"../coordinate.js\").Coordinate|null}\n     */\n    this.flatMidpoint_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.flatMidpointRevision_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDelta_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDeltaRevision_ = -1;\n\n    if (layout !== undefined && !Array.isArray(coordinates[0])) {\n      this.setFlatCoordinates(\n        layout,\n        /** @type {Array<number>} */ (coordinates),\n      );\n    } else {\n      this.setCoordinates(\n        /** @type {Array<import(\"../coordinate.js\").Coordinate>} */ (\n          coordinates\n        ),\n        layout,\n      );\n    }\n  }\n\n  /**\n   * Append the passed coordinate to the coordinates of the linestring.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @api\n   */\n  appendCoordinate(coordinate) {\n    extend(this.flatCoordinates, coordinate);\n    this.changed();\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!LineString} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const lineString = new LineString(\n      this.flatCoordinates.slice(),\n      this.layout,\n    );\n    lineString.applyProperties(this);\n    return lineString;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n      return minSquaredDistance;\n    }\n    if (this.maxDeltaRevision_ != this.getRevision()) {\n      this.maxDelta_ = Math.sqrt(\n        maxSquaredDelta(\n          this.flatCoordinates,\n          0,\n          this.flatCoordinates.length,\n          this.stride,\n          0,\n        ),\n      );\n      this.maxDeltaRevision_ = this.getRevision();\n    }\n    return assignClosestPoint(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      this.maxDelta_,\n      false,\n      x,\n      y,\n      closestPoint,\n      minSquaredDistance,\n    );\n  }\n\n  /**\n   * Iterate over each segment, calling the provided callback.\n   * If the callback returns a truthy value the function returns that\n   * value immediately. Otherwise the function returns `false`.\n   *\n   * @param {function(this: S, import(\"../coordinate.js\").Coordinate, import(\"../coordinate.js\").Coordinate): T} callback Function\n   *     called for each segment. The function will receive two arguments, the start and end coordinates of the segment.\n   * @return {T|boolean} Value.\n   * @template T,S\n   * @api\n   */\n  forEachSegment(callback) {\n    return forEachSegment(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      callback,\n    );\n  }\n\n  /**\n   * Returns the coordinate at `m` using linear interpolation, or `null` if no\n   * such coordinate exists.\n   *\n   * `extrapolate` controls extrapolation beyond the range of Ms in the\n   * MultiLineString. If `extrapolate` is `true` then Ms less than the first\n   * M will return the first coordinate and Ms greater than the last M will\n   * return the last coordinate.\n   *\n   * @param {number} m M.\n   * @param {boolean} [extrapolate] Extrapolate. Default is `false`.\n   * @return {import(\"../coordinate.js\").Coordinate|null} Coordinate.\n   * @api\n   */\n  getCoordinateAtM(m, extrapolate) {\n    if (this.layout != 'XYM' && this.layout != 'XYZM') {\n      return null;\n    }\n    extrapolate = extrapolate !== undefined ? extrapolate : false;\n    return lineStringCoordinateAtM(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      m,\n      extrapolate,\n    );\n  }\n\n  /**\n   * Return the coordinates of the linestring.\n   * @return {Array<import(\"../coordinate.js\").Coordinate>} Coordinates.\n   * @api\n   * @override\n   */\n  getCoordinates() {\n    return inflateCoordinates(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n    );\n  }\n\n  /**\n   * Return the coordinate at the provided fraction along the linestring.\n   * The `fraction` is a number between 0 and 1, where 0 is the start of the\n   * linestring and 1 is the end.\n   * @param {number} fraction Fraction.\n   * @param {import(\"../coordinate.js\").Coordinate} [dest] Optional coordinate whose values will\n   *     be modified. If not provided, a new coordinate will be returned.\n   * @return {import(\"../coordinate.js\").Coordinate} Coordinate of the interpolated point.\n   * @api\n   */\n  getCoordinateAt(fraction, dest) {\n    return interpolatePoint(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      fraction,\n      dest,\n      this.stride,\n    );\n  }\n\n  /**\n   * Return the length of the linestring on projected plane.\n   * @return {number} Length (on projected plane).\n   * @api\n   */\n  getLength() {\n    return lineStringLength(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n    );\n  }\n\n  /**\n   * @return {Array<number>} Flat midpoint.\n   */\n  getFlatMidpoint() {\n    if (this.flatMidpointRevision_ != this.getRevision()) {\n      this.flatMidpoint_ = this.getCoordinateAt(\n        0.5,\n        this.flatMidpoint_ ?? undefined,\n      );\n      this.flatMidpointRevision_ = this.getRevision();\n    }\n    return /** @type {Array<number>} */ (this.flatMidpoint_);\n  }\n\n  /**\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {LineString} Simplified LineString.\n   * @protected\n   * @override\n   */\n  getSimplifiedGeometryInternal(squaredTolerance) {\n    /** @type {Array<number>} */\n    const simplifiedFlatCoordinates = [];\n    simplifiedFlatCoordinates.length = douglasPeucker(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      squaredTolerance,\n      simplifiedFlatCoordinates,\n      0,\n    );\n    return new LineString(simplifiedFlatCoordinates, 'XY');\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'LineString';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    return intersectsLineString(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      extent,\n      this.getExtent(),\n    );\n  }\n\n  /**\n   * Set the coordinates of the linestring.\n   * @param {!Array<import(\"../coordinate.js\").Coordinate>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   * @override\n   */\n  setCoordinates(coordinates, layout) {\n    this.setLayout(layout, coordinates, 1);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = deflateCoordinates(\n      this.flatCoordinates,\n      0,\n      coordinates,\n      this.stride,\n    );\n    this.changed();\n  }\n}\n\nexport default LineString;\n","/**\n * @module ol/geom/MultiLineString\n */\nimport {extend} from '../array.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport LineString from './LineString.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {arrayMaxSquaredDelta, assignClosestArrayPoint} from './flat/closest.js';\nimport {deflateCoordinatesArray} from './flat/deflate.js';\nimport {inflateCoordinatesArray} from './flat/inflate.js';\nimport {\n  interpolatePoint,\n  lineStringsCoordinateAtM,\n} from './flat/interpolate.js';\nimport {intersectsLineStringArray} from './flat/intersectsextent.js';\nimport {lineStringLength} from './flat/length.js';\nimport {douglasPeuckerArray} from './flat/simplify.js';\n\n/**\n * @classdesc\n * Multi-linestring geometry.\n *\n * @api\n */\nclass MultiLineString extends SimpleGeometry {\n  /**\n   * @param {Array<Array<import(\"../coordinate.js\").Coordinate>|LineString>|Array<number>} coordinates\n   *     Coordinates or LineString geometries. (For internal use, flat coordinates in\n   *     combination with `layout` and `ends` are also accepted.)\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @param {Array<number>} [ends] Flat coordinate ends for internal use.\n   */\n  constructor(coordinates, layout, ends) {\n    super();\n\n    /**\n     * @type {Array<number>}\n     * @private\n     */\n    this.ends_ = [];\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDelta_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDeltaRevision_ = -1;\n\n    if (Array.isArray(coordinates[0])) {\n      this.setCoordinates(\n        /** @type {Array<Array<import(\"../coordinate.js\").Coordinate>>} */ (\n          coordinates\n        ),\n        layout,\n      );\n    } else if (layout !== undefined && ends) {\n      this.setFlatCoordinates(\n        layout,\n        /** @type {Array<number>} */ (coordinates),\n      );\n      this.ends_ = ends;\n    } else {\n      const lineStrings = /** @type {Array<LineString>} */ (coordinates);\n      /** @type {Array<number>} */\n      const flatCoordinates = [];\n      const ends = [];\n      for (let i = 0, ii = lineStrings.length; i < ii; ++i) {\n        const lineString = lineStrings[i];\n        extend(flatCoordinates, lineString.getFlatCoordinates());\n        ends.push(flatCoordinates.length);\n      }\n      const layout =\n        lineStrings.length === 0\n          ? this.getLayout()\n          : lineStrings[0].getLayout();\n      this.setFlatCoordinates(layout, flatCoordinates);\n      this.ends_ = ends;\n    }\n  }\n\n  /**\n   * Append the passed linestring to the multilinestring.\n   * @param {LineString} lineString LineString.\n   * @api\n   */\n  appendLineString(lineString) {\n    extend(this.flatCoordinates, lineString.getFlatCoordinates().slice());\n    this.ends_.push(this.flatCoordinates.length);\n    this.changed();\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!MultiLineString} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const multiLineString = new MultiLineString(\n      this.flatCoordinates.slice(),\n      this.layout,\n      this.ends_.slice(),\n    );\n    multiLineString.applyProperties(this);\n    return multiLineString;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n      return minSquaredDistance;\n    }\n    if (this.maxDeltaRevision_ != this.getRevision()) {\n      this.maxDelta_ = Math.sqrt(\n        arrayMaxSquaredDelta(\n          this.flatCoordinates,\n          0,\n          this.ends_,\n          this.stride,\n          0,\n        ),\n      );\n      this.maxDeltaRevision_ = this.getRevision();\n    }\n    return assignClosestArrayPoint(\n      this.flatCoordinates,\n      0,\n      this.ends_,\n      this.stride,\n      this.maxDelta_,\n      false,\n      x,\n      y,\n      closestPoint,\n      minSquaredDistance,\n    );\n  }\n\n  /**\n   * Returns the coordinate at `m` using linear interpolation, or `null` if no\n   * such coordinate exists.\n   *\n   * `extrapolate` controls extrapolation beyond the range of Ms in the\n   * MultiLineString. If `extrapolate` is `true` then Ms less than the first\n   * M will return the first coordinate and Ms greater than the last M will\n   * return the last coordinate.\n   *\n   * `interpolate` controls interpolation between consecutive LineStrings\n   * within the MultiLineString. If `interpolate` is `true` the coordinates\n   * will be linearly interpolated between the last coordinate of one LineString\n   * and the first coordinate of the next LineString.  If `interpolate` is\n   * `false` then the function will return `null` for Ms falling between\n   * LineStrings.\n   *\n   * @param {number} m M.\n   * @param {boolean} [extrapolate] Extrapolate. Default is `false`.\n   * @param {boolean} [interpolate] Interpolate. Default is `false`.\n   * @return {import(\"../coordinate.js\").Coordinate|null} Coordinate.\n   * @api\n   */\n  getCoordinateAtM(m, extrapolate, interpolate) {\n    if (\n      (this.layout != 'XYM' && this.layout != 'XYZM') ||\n      this.flatCoordinates.length === 0\n    ) {\n      return null;\n    }\n    extrapolate = extrapolate !== undefined ? extrapolate : false;\n    interpolate = interpolate !== undefined ? interpolate : false;\n    return lineStringsCoordinateAtM(\n      this.flatCoordinates,\n      0,\n      this.ends_,\n      this.stride,\n      m,\n      extrapolate,\n      interpolate,\n    );\n  }\n\n  /**\n   * Return the coordinates of the multilinestring.\n   * @return {Array<Array<import(\"../coordinate.js\").Coordinate>>} Coordinates.\n   * @api\n   * @override\n   */\n  getCoordinates() {\n    return inflateCoordinatesArray(\n      this.flatCoordinates,\n      0,\n      this.ends_,\n      this.stride,\n    );\n  }\n\n  /**\n   * @return {Array<number>} Ends.\n   */\n  getEnds() {\n    return this.ends_;\n  }\n\n  /**\n   * Return the linestring at the specified index.\n   * @param {number} index Index.\n   * @return {LineString} LineString.\n   * @api\n   */\n  getLineString(index) {\n    if (index < 0 || this.ends_.length <= index) {\n      return null;\n    }\n    return new LineString(\n      this.flatCoordinates.slice(\n        index === 0 ? 0 : this.ends_[index - 1],\n        this.ends_[index],\n      ),\n      this.layout,\n    );\n  }\n\n  /**\n   * Return the linestrings of this multilinestring.\n   * @return {Array<LineString>} LineStrings.\n   * @api\n   */\n  getLineStrings() {\n    const flatCoordinates = this.flatCoordinates;\n    const ends = this.ends_;\n    const layout = this.layout;\n    /** @type {Array<LineString>} */\n    const lineStrings = [];\n    let offset = 0;\n    for (let i = 0, ii = ends.length; i < ii; ++i) {\n      const end = ends[i];\n      const lineString = new LineString(\n        flatCoordinates.slice(offset, end),\n        layout,\n      );\n      lineStrings.push(lineString);\n      offset = end;\n    }\n    return lineStrings;\n  }\n\n  /**\n   * Return the sum of all line string lengths\n   * @return {number} Length (on projected plane).\n   * @api\n   */\n  getLength() {\n    const ends = this.ends_;\n    let start = 0;\n    let length = 0;\n    for (let i = 0, ii = ends.length; i < ii; ++i) {\n      length += lineStringLength(\n        this.flatCoordinates,\n        start,\n        ends[i],\n        this.stride,\n      );\n      start = ends[i];\n    }\n    return length;\n  }\n\n  /**\n   * @return {Array<number>} Flat midpoints.\n   */\n  getFlatMidpoints() {\n    /** @type {Array<number>} */\n    const midpoints = [];\n    const flatCoordinates = this.flatCoordinates;\n    let offset = 0;\n    const ends = this.ends_;\n    const stride = this.stride;\n    for (let i = 0, ii = ends.length; i < ii; ++i) {\n      const end = ends[i];\n      const midpoint = interpolatePoint(\n        flatCoordinates,\n        offset,\n        end,\n        stride,\n        0.5,\n      );\n      extend(midpoints, midpoint);\n      offset = end;\n    }\n    return midpoints;\n  }\n\n  /**\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {MultiLineString} Simplified MultiLineString.\n   * @protected\n   * @override\n   */\n  getSimplifiedGeometryInternal(squaredTolerance) {\n    /** @type {Array<number>} */\n    const simplifiedFlatCoordinates = [];\n    /** @type {Array<number>} */\n    const simplifiedEnds = [];\n    simplifiedFlatCoordinates.length = douglasPeuckerArray(\n      this.flatCoordinates,\n      0,\n      this.ends_,\n      this.stride,\n      squaredTolerance,\n      simplifiedFlatCoordinates,\n      0,\n      simplifiedEnds,\n    );\n    return new MultiLineString(simplifiedFlatCoordinates, 'XY', simplifiedEnds);\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'MultiLineString';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    return intersectsLineStringArray(\n      this.flatCoordinates,\n      0,\n      this.ends_,\n      this.stride,\n      extent,\n    );\n  }\n\n  /**\n   * Set the coordinates of the multilinestring.\n   * @param {!Array<Array<import(\"../coordinate.js\").Coordinate>>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   * @override\n   */\n  setCoordinates(coordinates, layout) {\n    this.setLayout(layout, coordinates, 2);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    const ends = deflateCoordinatesArray(\n      this.flatCoordinates,\n      0,\n      coordinates,\n      this.stride,\n      this.ends_,\n    );\n    this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n    this.changed();\n  }\n}\n\nexport default MultiLineString;\n","/**\n * @module ol/geom/MultiPoint\n */\nimport {extend} from '../array.js';\nimport {closestSquaredDistanceXY, containsXY} from '../extent.js';\nimport {squaredDistance as squaredDx} from '../math.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {inflateCoordinates} from './flat/inflate.js';\n\n/**\n * @classdesc\n * Multi-point geometry.\n *\n * @api\n */\nclass MultiPoint extends SimpleGeometry {\n  /**\n   * @param {Array<import(\"../coordinate.js\").Coordinate>|Array<number>} coordinates Coordinates.\n   *     For internal use, flat coordinates in combination with `layout` are also accepted.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   */\n  constructor(coordinates, layout) {\n    super();\n    if (layout && !Array.isArray(coordinates[0])) {\n      this.setFlatCoordinates(\n        layout,\n        /** @type {Array<number>} */ (coordinates),\n      );\n    } else {\n      this.setCoordinates(\n        /** @type {Array<import(\"../coordinate.js\").Coordinate>} */ (\n          coordinates\n        ),\n        layout,\n      );\n    }\n  }\n\n  /**\n   * Append the passed point to this multipoint.\n   * @param {Point} point Point.\n   * @api\n   */\n  appendPoint(point) {\n    extend(this.flatCoordinates, point.getFlatCoordinates());\n    this.changed();\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!MultiPoint} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const multiPoint = new MultiPoint(\n      this.flatCoordinates.slice(),\n      this.layout,\n    );\n    multiPoint.applyProperties(this);\n    return multiPoint;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n      return minSquaredDistance;\n    }\n    const flatCoordinates = this.flatCoordinates;\n    const stride = this.stride;\n    for (let i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n      const squaredDistance = squaredDx(\n        x,\n        y,\n        flatCoordinates[i],\n        flatCoordinates[i + 1],\n      );\n      if (squaredDistance < minSquaredDistance) {\n        minSquaredDistance = squaredDistance;\n        for (let j = 0; j < stride; ++j) {\n          closestPoint[j] = flatCoordinates[i + j];\n        }\n        closestPoint.length = stride;\n      }\n    }\n    return minSquaredDistance;\n  }\n\n  /**\n   * Return the coordinates of the multipoint.\n   * @return {Array<import(\"../coordinate.js\").Coordinate>} Coordinates.\n   * @api\n   * @override\n   */\n  getCoordinates() {\n    return inflateCoordinates(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n    );\n  }\n\n  /**\n   * Return the point at the specified index.\n   * @param {number} index Index.\n   * @return {Point} Point.\n   * @api\n   */\n  getPoint(index) {\n    const n = this.flatCoordinates.length / this.stride;\n    if (index < 0 || n <= index) {\n      return null;\n    }\n    return new Point(\n      this.flatCoordinates.slice(\n        index * this.stride,\n        (index + 1) * this.stride,\n      ),\n      this.layout,\n    );\n  }\n\n  /**\n   * Return the points of this multipoint.\n   * @return {Array<Point>} Points.\n   * @api\n   */\n  getPoints() {\n    const flatCoordinates = this.flatCoordinates;\n    const layout = this.layout;\n    const stride = this.stride;\n    /** @type {Array<Point>} */\n    const points = [];\n    for (let i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n      const point = new Point(flatCoordinates.slice(i, i + stride), layout);\n      points.push(point);\n    }\n    return points;\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'MultiPoint';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    const flatCoordinates = this.flatCoordinates;\n    const stride = this.stride;\n    for (let i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n      const x = flatCoordinates[i];\n      const y = flatCoordinates[i + 1];\n      if (containsXY(extent, x, y)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Set the coordinates of the multipoint.\n   * @param {!Array<import(\"../coordinate.js\").Coordinate>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   * @override\n   */\n  setCoordinates(coordinates, layout) {\n    this.setLayout(layout, coordinates, 1);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = deflateCoordinates(\n      this.flatCoordinates,\n      0,\n      coordinates,\n      this.stride,\n    );\n    this.changed();\n  }\n}\n\nexport default MultiPoint;\n","/**\n * @module ol/geom/MultiPolygon\n */\nimport {extend} from '../array.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport MultiPoint from './MultiPoint.js';\nimport Polygon from './Polygon.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {linearRingss as linearRingssArea} from './flat/area.js';\nimport {linearRingss as linearRingssCenter} from './flat/center.js';\nimport {\n  assignClosestMultiArrayPoint,\n  multiArrayMaxSquaredDelta,\n} from './flat/closest.js';\nimport {linearRingssContainsXY} from './flat/contains.js';\nimport {deflateMultiCoordinatesArray} from './flat/deflate.js';\nimport {inflateMultiCoordinatesArray} from './flat/inflate.js';\nimport {getInteriorPointsOfMultiArray} from './flat/interiorpoint.js';\nimport {intersectsLinearRingMultiArray} from './flat/intersectsextent.js';\nimport {\n  linearRingssAreOriented,\n  orientLinearRingsArray,\n} from './flat/orient.js';\nimport {quantizeMultiArray} from './flat/simplify.js';\n\n/**\n * @classdesc\n * Multi-polygon geometry.\n *\n * @api\n */\nclass MultiPolygon extends SimpleGeometry {\n  /**\n   * @param {Array<Array<Array<import(\"../coordinate.js\").Coordinate>>|Polygon>|Array<number>} coordinates Coordinates.\n   *     For internal use, flat coordinates in combination with `layout` and `endss` are also accepted.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @param {Array<Array<number>>} [endss] Array of ends for internal use with flat coordinates.\n   */\n  constructor(coordinates, layout, endss) {\n    super();\n\n    /**\n     * @type {Array<Array<number>>}\n     * @private\n     */\n    this.endss_ = [];\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.flatInteriorPointsRevision_ = -1;\n\n    /**\n     * @private\n     * @type {Array<number>|null}\n     */\n    this.flatInteriorPoints_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDelta_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDeltaRevision_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.orientedRevision_ = -1;\n\n    /**\n     * @private\n     * @type {Array<number>|null}\n     */\n    this.orientedFlatCoordinates_ = null;\n\n    if (!endss && !Array.isArray(coordinates[0])) {\n      const polygons = /** @type {Array<Polygon>} */ (coordinates);\n      /** @type {Array<number>} */\n      const flatCoordinates = [];\n      const thisEndss = [];\n      for (let i = 0, ii = polygons.length; i < ii; ++i) {\n        const polygon = polygons[i];\n        const offset = flatCoordinates.length;\n        const ends = polygon.getEnds();\n        for (let j = 0, jj = ends.length; j < jj; ++j) {\n          ends[j] += offset;\n        }\n        extend(flatCoordinates, polygon.getFlatCoordinates());\n        thisEndss.push(ends);\n      }\n      layout =\n        polygons.length === 0 ? this.getLayout() : polygons[0].getLayout();\n      coordinates = flatCoordinates;\n      endss = thisEndss;\n    }\n    if (layout !== undefined && endss) {\n      this.setFlatCoordinates(\n        layout,\n        /** @type {Array<number>} */ (coordinates),\n      );\n      this.endss_ = endss;\n    } else {\n      this.setCoordinates(\n        /** @type {Array<Array<Array<import(\"../coordinate.js\").Coordinate>>>} */ (\n          coordinates\n        ),\n        layout,\n      );\n    }\n  }\n\n  /**\n   * Append the passed polygon to this multipolygon.\n   * @param {Polygon} polygon Polygon.\n   * @api\n   */\n  appendPolygon(polygon) {\n    /** @type {Array<number>} */\n    let ends;\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = polygon.getFlatCoordinates().slice();\n      ends = polygon.getEnds().slice();\n      this.endss_.push();\n    } else {\n      const offset = this.flatCoordinates.length;\n      extend(this.flatCoordinates, polygon.getFlatCoordinates());\n      ends = polygon.getEnds().slice();\n      for (let i = 0, ii = ends.length; i < ii; ++i) {\n        ends[i] += offset;\n      }\n    }\n    this.endss_.push(ends);\n    this.changed();\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!MultiPolygon} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const len = this.endss_.length;\n    const newEndss = new Array(len);\n    for (let i = 0; i < len; ++i) {\n      newEndss[i] = this.endss_[i].slice();\n    }\n\n    const multiPolygon = new MultiPolygon(\n      this.flatCoordinates.slice(),\n      this.layout,\n      newEndss,\n    );\n    multiPolygon.applyProperties(this);\n\n    return multiPolygon;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n      return minSquaredDistance;\n    }\n    if (this.maxDeltaRevision_ != this.getRevision()) {\n      this.maxDelta_ = Math.sqrt(\n        multiArrayMaxSquaredDelta(\n          this.flatCoordinates,\n          0,\n          this.endss_,\n          this.stride,\n          0,\n        ),\n      );\n      this.maxDeltaRevision_ = this.getRevision();\n    }\n    return assignClosestMultiArrayPoint(\n      this.getOrientedFlatCoordinates(),\n      0,\n      this.endss_,\n      this.stride,\n      this.maxDelta_,\n      true,\n      x,\n      y,\n      closestPoint,\n      minSquaredDistance,\n    );\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @return {boolean} Contains (x, y).\n   * @override\n   */\n  containsXY(x, y) {\n    return linearRingssContainsXY(\n      this.getOrientedFlatCoordinates(),\n      0,\n      this.endss_,\n      this.stride,\n      x,\n      y,\n    );\n  }\n\n  /**\n   * Return the area of the multipolygon on projected plane.\n   * @return {number} Area (on projected plane).\n   * @api\n   */\n  getArea() {\n    return linearRingssArea(\n      this.getOrientedFlatCoordinates(),\n      0,\n      this.endss_,\n      this.stride,\n    );\n  }\n\n  /**\n   * Get the coordinate array for this geometry.  This array has the structure\n   * of a GeoJSON coordinate array for multi-polygons.\n   *\n   * @param {boolean} [right] Orient coordinates according to the right-hand\n   *     rule (counter-clockwise for exterior and clockwise for interior rings).\n   *     If `false`, coordinates will be oriented according to the left-hand rule\n   *     (clockwise for exterior and counter-clockwise for interior rings).\n   *     By default, coordinate orientation will depend on how the geometry was\n   *     constructed.\n   * @return {Array<Array<Array<import(\"../coordinate.js\").Coordinate>>>} Coordinates.\n   * @api\n   * @override\n   */\n  getCoordinates(right) {\n    let flatCoordinates;\n    if (right !== undefined) {\n      flatCoordinates = this.getOrientedFlatCoordinates().slice();\n      orientLinearRingsArray(\n        flatCoordinates,\n        0,\n        this.endss_,\n        this.stride,\n        right,\n      );\n    } else {\n      flatCoordinates = this.flatCoordinates;\n    }\n\n    return inflateMultiCoordinatesArray(\n      flatCoordinates,\n      0,\n      this.endss_,\n      this.stride,\n    );\n  }\n\n  /**\n   * @return {Array<Array<number>>} Endss.\n   */\n  getEndss() {\n    return this.endss_;\n  }\n\n  /**\n   * @return {Array<number>} Flat interior points.\n   */\n  getFlatInteriorPoints() {\n    if (this.flatInteriorPointsRevision_ != this.getRevision()) {\n      const flatCenters = linearRingssCenter(\n        this.flatCoordinates,\n        0,\n        this.endss_,\n        this.stride,\n      );\n      this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n        this.getOrientedFlatCoordinates(),\n        0,\n        this.endss_,\n        this.stride,\n        flatCenters,\n      );\n      this.flatInteriorPointsRevision_ = this.getRevision();\n    }\n    return /** @type {Array<number>} */ (this.flatInteriorPoints_);\n  }\n\n  /**\n   * Return the interior points as {@link module:ol/geom/MultiPoint~MultiPoint multipoint}.\n   * @return {MultiPoint} Interior points as XYM coordinates, where M is\n   * the length of the horizontal intersection that the point belongs to.\n   * @api\n   */\n  getInteriorPoints() {\n    return new MultiPoint(this.getFlatInteriorPoints().slice(), 'XYM');\n  }\n\n  /**\n   * @return {Array<number>} Oriented flat coordinates.\n   */\n  getOrientedFlatCoordinates() {\n    if (this.orientedRevision_ != this.getRevision()) {\n      const flatCoordinates = this.flatCoordinates;\n      if (\n        linearRingssAreOriented(flatCoordinates, 0, this.endss_, this.stride)\n      ) {\n        this.orientedFlatCoordinates_ = flatCoordinates;\n      } else {\n        this.orientedFlatCoordinates_ = flatCoordinates.slice();\n        this.orientedFlatCoordinates_.length = orientLinearRingsArray(\n          this.orientedFlatCoordinates_,\n          0,\n          this.endss_,\n          this.stride,\n        );\n      }\n      this.orientedRevision_ = this.getRevision();\n    }\n    return /** @type {Array<number>} */ (this.orientedFlatCoordinates_);\n  }\n\n  /**\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {MultiPolygon} Simplified MultiPolygon.\n   * @protected\n   * @override\n   */\n  getSimplifiedGeometryInternal(squaredTolerance) {\n    /** @type {Array<number>} */\n    const simplifiedFlatCoordinates = [];\n    /** @type {Array<Array<number>>} */\n    const simplifiedEndss = [];\n    simplifiedFlatCoordinates.length = quantizeMultiArray(\n      this.flatCoordinates,\n      0,\n      this.endss_,\n      this.stride,\n      Math.sqrt(squaredTolerance),\n      simplifiedFlatCoordinates,\n      0,\n      simplifiedEndss,\n    );\n    return new MultiPolygon(simplifiedFlatCoordinates, 'XY', simplifiedEndss);\n  }\n\n  /**\n   * Return the polygon at the specified index.\n   * @param {number} index Index.\n   * @return {Polygon} Polygon.\n   * @api\n   */\n  getPolygon(index) {\n    if (index < 0 || this.endss_.length <= index) {\n      return null;\n    }\n    let offset;\n    if (index === 0) {\n      offset = 0;\n    } else {\n      const prevEnds = this.endss_[index - 1];\n      offset = prevEnds[prevEnds.length - 1];\n    }\n    const ends = this.endss_[index].slice();\n    const end = ends[ends.length - 1];\n    if (offset !== 0) {\n      for (let i = 0, ii = ends.length; i < ii; ++i) {\n        ends[i] -= offset;\n      }\n    }\n    return new Polygon(\n      this.flatCoordinates.slice(offset, end),\n      this.layout,\n      ends,\n    );\n  }\n\n  /**\n   * Return the polygons of this multipolygon.\n   * @return {Array<Polygon>} Polygons.\n   * @api\n   */\n  getPolygons() {\n    const layout = this.layout;\n    const flatCoordinates = this.flatCoordinates;\n    const endss = this.endss_;\n    const polygons = [];\n    let offset = 0;\n    for (let i = 0, ii = endss.length; i < ii; ++i) {\n      const ends = endss[i].slice();\n      const end = ends[ends.length - 1];\n      if (offset !== 0) {\n        for (let j = 0, jj = ends.length; j < jj; ++j) {\n          ends[j] -= offset;\n        }\n      }\n      const polygon = new Polygon(\n        flatCoordinates.slice(offset, end),\n        layout,\n        ends,\n      );\n      polygons.push(polygon);\n      offset = end;\n    }\n    return polygons;\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'MultiPolygon';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    return intersectsLinearRingMultiArray(\n      this.getOrientedFlatCoordinates(),\n      0,\n      this.endss_,\n      this.stride,\n      extent,\n    );\n  }\n\n  /**\n   * Set the coordinates of the multipolygon.\n   * @param {!Array<Array<Array<import(\"../coordinate.js\").Coordinate>>>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   * @override\n   */\n  setCoordinates(coordinates, layout) {\n    this.setLayout(layout, coordinates, 3);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    const endss = deflateMultiCoordinatesArray(\n      this.flatCoordinates,\n      0,\n      coordinates,\n      this.stride,\n      this.endss_,\n    );\n    if (endss.length === 0) {\n      this.flatCoordinates.length = 0;\n    } else {\n      const lastEnds = endss[endss.length - 1];\n      this.flatCoordinates.length =\n        lastEnds.length === 0 ? 0 : lastEnds[lastEnds.length - 1];\n    }\n    this.changed();\n  }\n}\n\nexport default MultiPolygon;\n","/**\n * @module ol/geom/Point\n */\nimport {containsXY, createOrUpdateFromCoordinate} from '../extent.js';\nimport {squaredDistance as squaredDx} from '../math.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {deflateCoordinate} from './flat/deflate.js';\n\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nclass Point extends SimpleGeometry {\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   */\n  constructor(coordinates, layout) {\n    super();\n    this.setCoordinates(coordinates, layout);\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!Point} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const point = new Point(this.flatCoordinates.slice(), this.layout);\n    point.applyProperties(this);\n    return point;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    const flatCoordinates = this.flatCoordinates;\n    const squaredDistance = squaredDx(\n      x,\n      y,\n      flatCoordinates[0],\n      flatCoordinates[1],\n    );\n    if (squaredDistance < minSquaredDistance) {\n      const stride = this.stride;\n      for (let i = 0; i < stride; ++i) {\n        closestPoint[i] = flatCoordinates[i];\n      }\n      closestPoint.length = stride;\n      return squaredDistance;\n    }\n    return minSquaredDistance;\n  }\n\n  /**\n   * Return the coordinate of the point.\n   * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n   * @api\n   * @override\n   */\n  getCoordinates() {\n    return this.flatCoordinates.slice();\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @protected\n   * @return {import(\"../extent.js\").Extent} extent Extent.\n   * @override\n   */\n  computeExtent(extent) {\n    return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'Point';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n  }\n\n  /**\n   * @param {!Array<*>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   * @override\n   */\n  setCoordinates(coordinates, layout) {\n    this.setLayout(layout, coordinates, 0);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = deflateCoordinate(\n      this.flatCoordinates,\n      0,\n      coordinates,\n      this.stride,\n    );\n    this.changed();\n  }\n}\n\nexport default Point;\n","/**\n * @module ol/geom/LinearRing\n */\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {linearRing as linearRingArea} from './flat/area.js';\nimport {assignClosestPoint, maxSquaredDelta} from './flat/closest.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {intersectsLineString} from './flat/intersectsextent.js';\nimport {douglasPeucker} from './flat/simplify.js';\n\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nclass LinearRing extends SimpleGeometry {\n  /**\n   * @param {Array<import(\"../coordinate.js\").Coordinate>|Array<number>} coordinates Coordinates.\n   *     For internal use, flat coordinates in combination with `layout` are also accepted.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   */\n  constructor(coordinates, layout) {\n    super();\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDelta_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDeltaRevision_ = -1;\n\n    if (layout !== undefined && !Array.isArray(coordinates[0])) {\n      this.setFlatCoordinates(\n        layout,\n        /** @type {Array<number>} */ (coordinates),\n      );\n    } else {\n      this.setCoordinates(\n        /** @type {Array<import(\"../coordinate.js\").Coordinate>} */ (\n          coordinates\n        ),\n        layout,\n      );\n    }\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!LinearRing} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    return new LinearRing(this.flatCoordinates.slice(), this.layout);\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n      return minSquaredDistance;\n    }\n    if (this.maxDeltaRevision_ != this.getRevision()) {\n      this.maxDelta_ = Math.sqrt(\n        maxSquaredDelta(\n          this.flatCoordinates,\n          0,\n          this.flatCoordinates.length,\n          this.stride,\n          0,\n        ),\n      );\n      this.maxDeltaRevision_ = this.getRevision();\n    }\n    return assignClosestPoint(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      this.maxDelta_,\n      true,\n      x,\n      y,\n      closestPoint,\n      minSquaredDistance,\n    );\n  }\n\n  /**\n   * Return the area of the linear ring on projected plane.\n   * @return {number} Area (on projected plane).\n   * @api\n   */\n  getArea() {\n    return linearRingArea(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n    );\n  }\n\n  /**\n   * Return the coordinates of the linear ring.\n   * @return {Array<import(\"../coordinate.js\").Coordinate>} Coordinates.\n   * @api\n   * @override\n   */\n  getCoordinates() {\n    return inflateCoordinates(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n    );\n  }\n\n  /**\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {LinearRing} Simplified LinearRing.\n   * @protected\n   * @override\n   */\n  getSimplifiedGeometryInternal(squaredTolerance) {\n    /** @type {Array<number>} */\n    const simplifiedFlatCoordinates = [];\n    simplifiedFlatCoordinates.length = douglasPeucker(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      squaredTolerance,\n      simplifiedFlatCoordinates,\n      0,\n    );\n    return new LinearRing(simplifiedFlatCoordinates, 'XY');\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'LinearRing';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect. A linear ring is\n   * treated as a line string for this test.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    return intersectsLineString(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      extent,\n    );\n  }\n\n  /**\n   * Set the coordinates of the linear ring.\n   * @param {!Array<import(\"../coordinate.js\").Coordinate>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   * @override\n   */\n  setCoordinates(coordinates, layout) {\n    this.setLayout(layout, coordinates, 1);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    this.flatCoordinates.length = deflateCoordinates(\n      this.flatCoordinates,\n      0,\n      coordinates,\n      this.stride,\n    );\n    this.changed();\n  }\n}\n\nexport default LinearRing;\n","/**\n * @module ol/geom/Polygon\n */\nimport {extend} from '../array.js';\nimport {closestSquaredDistanceXY, getCenter, isEmpty} from '../extent.js';\nimport {modulo} from '../math.js';\nimport {offset as sphereOffset} from '../sphere.js';\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {linearRings as linearRingsArea} from './flat/area.js';\nimport {arrayMaxSquaredDelta, assignClosestArrayPoint} from './flat/closest.js';\nimport {linearRingsContainsXY} from './flat/contains.js';\nimport {deflateCoordinatesArray} from './flat/deflate.js';\nimport {inflateCoordinatesArray} from './flat/inflate.js';\nimport {getInteriorPointOfArray} from './flat/interiorpoint.js';\nimport {intersectsLinearRingArray} from './flat/intersectsextent.js';\nimport {linearRingsAreOriented, orientLinearRings} from './flat/orient.js';\nimport {quantizeArray} from './flat/simplify.js';\n\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nclass Polygon extends SimpleGeometry {\n  /**\n   * @param {!Array<Array<import(\"../coordinate.js\").Coordinate>>|!Array<number>} coordinates\n   *     Array of linear rings that define the polygon. The first linear ring of the\n   *     array defines the outer-boundary or surface of the polygon. Each subsequent\n   *     linear ring defines a hole in the surface of the polygon. A linear ring is\n   *     an array of vertices' coordinates where the first coordinate and the last are\n   *     equivalent. (For internal use, flat coordinates in combination with\n   *     `layout` and `ends` are also accepted.)\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @param {Array<number>} [ends] Ends (for internal use with flat coordinates).\n   */\n  constructor(coordinates, layout, ends) {\n    super();\n\n    /**\n     * @type {Array<number>}\n     * @private\n     */\n    this.ends_ = [];\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.flatInteriorPointRevision_ = -1;\n\n    /**\n     * @private\n     * @type {import(\"../coordinate.js\").Coordinate|null}\n     */\n    this.flatInteriorPoint_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDelta_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDeltaRevision_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.orientedRevision_ = -1;\n\n    /**\n     * @private\n     * @type {Array<number>|null}\n     */\n    this.orientedFlatCoordinates_ = null;\n\n    if (layout !== undefined && ends) {\n      this.setFlatCoordinates(\n        layout,\n        /** @type {Array<number>} */ (coordinates),\n      );\n      this.ends_ = ends;\n    } else {\n      this.setCoordinates(\n        /** @type {Array<Array<import(\"../coordinate.js\").Coordinate>>} */ (\n          coordinates\n        ),\n        layout,\n      );\n    }\n  }\n\n  /**\n   * Append the passed linear ring to this polygon.\n   * @param {LinearRing} linearRing Linear ring.\n   * @api\n   */\n  appendLinearRing(linearRing) {\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n    } else {\n      extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n    }\n    this.ends_.push(this.flatCoordinates.length);\n    this.changed();\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!Polygon} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const polygon = new Polygon(\n      this.flatCoordinates.slice(),\n      this.layout,\n      this.ends_.slice(),\n    );\n    polygon.applyProperties(this);\n    return polygon;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n      return minSquaredDistance;\n    }\n    if (this.maxDeltaRevision_ != this.getRevision()) {\n      this.maxDelta_ = Math.sqrt(\n        arrayMaxSquaredDelta(\n          this.flatCoordinates,\n          0,\n          this.ends_,\n          this.stride,\n          0,\n        ),\n      );\n      this.maxDeltaRevision_ = this.getRevision();\n    }\n    return assignClosestArrayPoint(\n      this.flatCoordinates,\n      0,\n      this.ends_,\n      this.stride,\n      this.maxDelta_,\n      true,\n      x,\n      y,\n      closestPoint,\n      minSquaredDistance,\n    );\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @return {boolean} Contains (x, y).\n   * @override\n   */\n  containsXY(x, y) {\n    return linearRingsContainsXY(\n      this.getOrientedFlatCoordinates(),\n      0,\n      this.ends_,\n      this.stride,\n      x,\n      y,\n    );\n  }\n\n  /**\n   * Return the area of the polygon on projected plane.\n   * @return {number} Area (on projected plane).\n   * @api\n   */\n  getArea() {\n    return linearRingsArea(\n      this.getOrientedFlatCoordinates(),\n      0,\n      this.ends_,\n      this.stride,\n    );\n  }\n\n  /**\n   * Get the coordinate array for this geometry.  This array has the structure\n   * of a GeoJSON coordinate array for polygons.\n   *\n   * @param {boolean} [right] Orient coordinates according to the right-hand\n   *     rule (counter-clockwise for exterior and clockwise for interior rings).\n   *     If `false`, coordinates will be oriented according to the left-hand rule\n   *     (clockwise for exterior and counter-clockwise for interior rings).\n   *     By default, coordinate orientation will depend on how the geometry was\n   *     constructed.\n   * @return {Array<Array<import(\"../coordinate.js\").Coordinate>>} Coordinates.\n   * @api\n   * @override\n   */\n  getCoordinates(right) {\n    let flatCoordinates;\n    if (right !== undefined) {\n      flatCoordinates = this.getOrientedFlatCoordinates().slice();\n      orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, right);\n    } else {\n      flatCoordinates = this.flatCoordinates;\n    }\n\n    return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n  }\n\n  /**\n   * @return {Array<number>} Ends.\n   */\n  getEnds() {\n    return this.ends_;\n  }\n\n  /**\n   * @return {Array<number>} Interior point.\n   */\n  getFlatInteriorPoint() {\n    if (this.flatInteriorPointRevision_ != this.getRevision()) {\n      const flatCenter = getCenter(this.getExtent());\n      this.flatInteriorPoint_ = getInteriorPointOfArray(\n        this.getOrientedFlatCoordinates(),\n        0,\n        this.ends_,\n        this.stride,\n        flatCenter,\n        0,\n      );\n      this.flatInteriorPointRevision_ = this.getRevision();\n    }\n    return /** @type {import(\"../coordinate.js\").Coordinate} */ (\n      this.flatInteriorPoint_\n    );\n  }\n\n  /**\n   * Return an interior point of the polygon.\n   * @return {Point} Interior point as XYM coordinate, where M is the\n   * length of the horizontal intersection that the point belongs to.\n   * @api\n   */\n  getInteriorPoint() {\n    return new Point(this.getFlatInteriorPoint(), 'XYM');\n  }\n\n  /**\n   * Return the number of rings of the polygon,  this includes the exterior\n   * ring and any interior rings.\n   *\n   * @return {number} Number of rings.\n   * @api\n   */\n  getLinearRingCount() {\n    return this.ends_.length;\n  }\n\n  /**\n   * Return the Nth linear ring of the polygon geometry. Return `null` if the\n   * given index is out of range.\n   * The exterior linear ring is available at index `0` and the interior rings\n   * at index `1` and beyond.\n   *\n   * @param {number} index Index.\n   * @return {LinearRing|null} Linear ring.\n   * @api\n   */\n  getLinearRing(index) {\n    if (index < 0 || this.ends_.length <= index) {\n      return null;\n    }\n    return new LinearRing(\n      this.flatCoordinates.slice(\n        index === 0 ? 0 : this.ends_[index - 1],\n        this.ends_[index],\n      ),\n      this.layout,\n    );\n  }\n\n  /**\n   * Return the linear rings of the polygon.\n   * @return {Array<LinearRing>} Linear rings.\n   * @api\n   */\n  getLinearRings() {\n    const layout = this.layout;\n    const flatCoordinates = this.flatCoordinates;\n    const ends = this.ends_;\n    const linearRings = [];\n    let offset = 0;\n    for (let i = 0, ii = ends.length; i < ii; ++i) {\n      const end = ends[i];\n      const linearRing = new LinearRing(\n        flatCoordinates.slice(offset, end),\n        layout,\n      );\n      linearRings.push(linearRing);\n      offset = end;\n    }\n    return linearRings;\n  }\n\n  /**\n   * @return {Array<number>} Oriented flat coordinates.\n   */\n  getOrientedFlatCoordinates() {\n    if (this.orientedRevision_ != this.getRevision()) {\n      const flatCoordinates = this.flatCoordinates;\n      if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n        this.orientedFlatCoordinates_ = flatCoordinates;\n      } else {\n        this.orientedFlatCoordinates_ = flatCoordinates.slice();\n        this.orientedFlatCoordinates_.length = orientLinearRings(\n          this.orientedFlatCoordinates_,\n          0,\n          this.ends_,\n          this.stride,\n        );\n      }\n      this.orientedRevision_ = this.getRevision();\n    }\n    return /** @type {Array<number>} */ (this.orientedFlatCoordinates_);\n  }\n\n  /**\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {Polygon} Simplified Polygon.\n   * @protected\n   * @override\n   */\n  getSimplifiedGeometryInternal(squaredTolerance) {\n    /** @type {Array<number>} */\n    const simplifiedFlatCoordinates = [];\n    /** @type {Array<number>} */\n    const simplifiedEnds = [];\n    simplifiedFlatCoordinates.length = quantizeArray(\n      this.flatCoordinates,\n      0,\n      this.ends_,\n      this.stride,\n      Math.sqrt(squaredTolerance),\n      simplifiedFlatCoordinates,\n      0,\n      simplifiedEnds,\n    );\n    return new Polygon(simplifiedFlatCoordinates, 'XY', simplifiedEnds);\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'Polygon';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    return intersectsLinearRingArray(\n      this.getOrientedFlatCoordinates(),\n      0,\n      this.ends_,\n      this.stride,\n      extent,\n    );\n  }\n\n  /**\n   * Set the coordinates of the polygon.\n   * @param {!Array<Array<import(\"../coordinate.js\").Coordinate>>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   * @override\n   */\n  setCoordinates(coordinates, layout) {\n    this.setLayout(layout, coordinates, 2);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    const ends = deflateCoordinatesArray(\n      this.flatCoordinates,\n      0,\n      coordinates,\n      this.stride,\n      this.ends_,\n    );\n    this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n    this.changed();\n  }\n}\n\nexport default Polygon;\n\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {import(\"../coordinate.js\").Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n *     the polygon vertices in meters.\n * @param {number} [n] Optional number of vertices for the resulting\n *     polygon. Default is `32`.\n * @param {number} [sphereRadius] Optional radius for the sphere (defaults to\n *     the Earth's mean radius using the WGS84 ellipsoid).\n * @return {Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, n, sphereRadius) {\n  n = n ? n : 32;\n  /** @type {Array<number>} */\n  const flatCoordinates = [];\n  for (let i = 0; i < n; ++i) {\n    extend(\n      flatCoordinates,\n      sphereOffset(center, radius, (2 * Math.PI * i) / n, sphereRadius),\n    );\n  }\n  flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n  return new Polygon(flatCoordinates, 'XY', [flatCoordinates.length]);\n}\n\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {import(\"../extent.js\").Extent} extent The extent.\n * @return {Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n  if (isEmpty(extent)) {\n    throw new Error('Cannot create polygon from empty extent');\n  }\n  const minX = extent[0];\n  const minY = extent[1];\n  const maxX = extent[2];\n  const maxY = extent[3];\n  const flatCoordinates = [\n    minX,\n    minY,\n    minX,\n    maxY,\n    maxX,\n    maxY,\n    maxX,\n    minY,\n    minX,\n    minY,\n  ];\n  return new Polygon(flatCoordinates, 'XY', [flatCoordinates.length]);\n}\n\n/**\n * Create a regular polygon from a circle.\n * @param {import(\"./Circle.js\").default} circle Circle geometry.\n * @param {number} [sides] Number of sides of the polygon. Default is 32.\n * @param {number} [angle] Start angle for the first vertex of the polygon in\n *     counter-clockwise radians. 0 means East. Default is 0.\n * @return {Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, sides, angle) {\n  sides = sides ? sides : 32;\n  const stride = circle.getStride();\n  const layout = circle.getLayout();\n  const center = circle.getCenter();\n  const arrayLength = stride * (sides + 1);\n  const flatCoordinates = new Array(arrayLength);\n  for (let i = 0; i < arrayLength; i += stride) {\n    flatCoordinates[i] = 0;\n    flatCoordinates[i + 1] = 0;\n    for (let j = 2; j < stride; j++) {\n      flatCoordinates[i + j] = center[j];\n    }\n  }\n  const ends = [flatCoordinates.length];\n  const polygon = new Polygon(flatCoordinates, layout, ends);\n  makeRegular(polygon, center, circle.getRadius(), angle);\n  return polygon;\n}\n\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {Polygon} polygon Polygon geometry.\n * @param {import(\"../coordinate.js\").Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number} [angle] Start angle for the first vertex of the polygon in\n *     counter-clockwise radians. 0 means East. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, angle) {\n  const flatCoordinates = polygon.getFlatCoordinates();\n  const stride = polygon.getStride();\n  const sides = flatCoordinates.length / stride - 1;\n  const startAngle = angle ? angle : 0;\n  for (let i = 0; i <= sides; ++i) {\n    const offset = i * stride;\n    const angle = startAngle + (modulo(i, sides) * 2 * Math.PI) / sides;\n    flatCoordinates[offset] = center[0] + radius * Math.cos(angle);\n    flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);\n  }\n  polygon.changed();\n}\n","/**\n * @module ol/geom/SimpleGeometry\n */\nimport {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js';\nimport {abstract} from '../util.js';\nimport Geometry from './Geometry.js';\nimport {rotate, scale, transform2D, translate} from './flat/transform.js';\n\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nclass SimpleGeometry extends Geometry {\n  constructor() {\n    super();\n\n    /**\n     * @protected\n     * @type {import(\"./Geometry.js\").GeometryLayout}\n     */\n    this.layout = 'XY';\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.stride = 2;\n\n    /**\n     * @protected\n     * @type {Array<number>}\n     */\n    this.flatCoordinates;\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @protected\n   * @return {import(\"../extent.js\").Extent} extent Extent.\n   * @override\n   */\n  computeExtent(extent) {\n    return createOrUpdateFromFlatCoordinates(\n      this.flatCoordinates,\n      0,\n      this.flatCoordinates.length,\n      this.stride,\n      extent,\n    );\n  }\n\n  /**\n   * @abstract\n   * @return {Array<*> | null} Coordinates.\n   */\n  getCoordinates() {\n    return abstract();\n  }\n\n  /**\n   * Return the first coordinate of the geometry.\n   * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n   * @api\n   */\n  getFirstCoordinate() {\n    return this.flatCoordinates.slice(0, this.stride);\n  }\n\n  /**\n   * @return {Array<number>} Flat coordinates.\n   */\n  getFlatCoordinates() {\n    return this.flatCoordinates;\n  }\n\n  /**\n   * Return the last coordinate of the geometry.\n   * @return {import(\"../coordinate.js\").Coordinate} Last point.\n   * @api\n   */\n  getLastCoordinate() {\n    return this.flatCoordinates.slice(\n      this.flatCoordinates.length - this.stride,\n    );\n  }\n\n  /**\n   * Return the {@link import(\"./Geometry.js\").GeometryLayout layout} of the geometry.\n   * @return {import(\"./Geometry.js\").GeometryLayout} Layout.\n   * @api\n   */\n  getLayout() {\n    return this.layout;\n  }\n\n  /**\n   * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {SimpleGeometry} Simplified geometry.\n   * @override\n   */\n  getSimplifiedGeometry(squaredTolerance) {\n    if (this.simplifiedGeometryRevision !== this.getRevision()) {\n      this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n      this.simplifiedGeometryRevision = this.getRevision();\n    }\n    // If squaredTolerance is negative or if we know that simplification will not\n    // have any effect then just return this.\n    if (\n      squaredTolerance < 0 ||\n      (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n        squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)\n    ) {\n      return this;\n    }\n\n    const simplifiedGeometry =\n      this.getSimplifiedGeometryInternal(squaredTolerance);\n    const simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n    if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n      return simplifiedGeometry;\n    }\n    // Simplification did not actually remove any coordinates.  We now know\n    // that any calls to getSimplifiedGeometry with a squaredTolerance less\n    // than or equal to the current squaredTolerance will also not have any\n    // effect.  This allows us to short circuit simplification (saving CPU\n    // cycles) and prevents the cache of simplified geometries from filling\n    // up with useless identical copies of this geometry (saving memory).\n    this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n    return this;\n  }\n\n  /**\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {SimpleGeometry} Simplified geometry.\n   * @protected\n   */\n  getSimplifiedGeometryInternal(squaredTolerance) {\n    return this;\n  }\n\n  /**\n   * @return {number} Stride.\n   */\n  getStride() {\n    return this.stride;\n  }\n\n  /**\n   * @param {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   */\n  setFlatCoordinates(layout, flatCoordinates) {\n    this.stride = getStrideForLayout(layout);\n    this.layout = layout;\n    this.flatCoordinates = flatCoordinates;\n  }\n\n  /**\n   * @abstract\n   * @param {!Array<*>} coordinates Coordinates.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   */\n  setCoordinates(coordinates, layout) {\n    abstract();\n  }\n\n  /**\n   * @param {import(\"./Geometry.js\").GeometryLayout|undefined} layout Layout.\n   * @param {Array<*>} coordinates Coordinates.\n   * @param {number} nesting Nesting.\n   * @protected\n   */\n  setLayout(layout, coordinates, nesting) {\n    let stride;\n    if (layout) {\n      stride = getStrideForLayout(layout);\n    } else {\n      for (let i = 0; i < nesting; ++i) {\n        if (coordinates.length === 0) {\n          this.layout = 'XY';\n          this.stride = 2;\n          return;\n        }\n        coordinates = /** @type {Array<unknown>} */ (coordinates[0]);\n      }\n      stride = coordinates.length;\n      layout = getLayoutForStride(stride);\n    }\n    this.layout = layout;\n    this.stride = stride;\n  }\n\n  /**\n   * Apply a transform function to the coordinates of the geometry.\n   * The geometry is modified in place.\n   * If you do not want the geometry modified in place, first `clone()` it and\n   * then use this function on the clone.\n   * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n   * Called with a flat array of geometry coordinates.\n   * @api\n   * @override\n   */\n  applyTransform(transformFn) {\n    if (this.flatCoordinates) {\n      transformFn(\n        this.flatCoordinates,\n        this.flatCoordinates,\n        this.layout.startsWith('XYZ') ? 3 : 2,\n        this.stride,\n      );\n      this.changed();\n    }\n  }\n\n  /**\n   * Rotate the geometry around a given coordinate. This modifies the geometry\n   * coordinates in place.\n   * @param {number} angle Rotation angle in counter-clockwise radians.\n   * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n   * @api\n   * @override\n   */\n  rotate(angle, anchor) {\n    const flatCoordinates = this.getFlatCoordinates();\n    if (flatCoordinates) {\n      const stride = this.getStride();\n      rotate(\n        flatCoordinates,\n        0,\n        flatCoordinates.length,\n        stride,\n        angle,\n        anchor,\n        flatCoordinates,\n      );\n      this.changed();\n    }\n  }\n\n  /**\n   * Scale the geometry (with an optional origin).  This modifies the geometry\n   * coordinates in place.\n   * @param {number} sx The scaling factor in the x-direction.\n   * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n   * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n   *     of the geometry extent).\n   * @api\n   * @override\n   */\n  scale(sx, sy, anchor) {\n    if (sy === undefined) {\n      sy = sx;\n    }\n    if (!anchor) {\n      anchor = getCenter(this.getExtent());\n    }\n    const flatCoordinates = this.getFlatCoordinates();\n    if (flatCoordinates) {\n      const stride = this.getStride();\n      scale(\n        flatCoordinates,\n        0,\n        flatCoordinates.length,\n        stride,\n        sx,\n        sy,\n        anchor,\n        flatCoordinates,\n      );\n      this.changed();\n    }\n  }\n\n  /**\n   * Translate the geometry.  This modifies the geometry coordinates in place.  If\n   * instead you want a new geometry, first `clone()` this geometry.\n   * @param {number} deltaX Delta X.\n   * @param {number} deltaY Delta Y.\n   * @api\n   * @override\n   */\n  translate(deltaX, deltaY) {\n    const flatCoordinates = this.getFlatCoordinates();\n    if (flatCoordinates) {\n      const stride = this.getStride();\n      translate(\n        flatCoordinates,\n        0,\n        flatCoordinates.length,\n        stride,\n        deltaX,\n        deltaY,\n        flatCoordinates,\n      );\n      this.changed();\n    }\n  }\n}\n\n/**\n * @param {number} stride Stride.\n * @return {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n */\nexport function getLayoutForStride(stride) {\n  let layout;\n  if (stride == 2) {\n    layout = 'XY';\n  } else if (stride == 3) {\n    layout = 'XYZ';\n  } else if (stride == 4) {\n    layout = 'XYZM';\n  }\n  return /** @type {import(\"./Geometry.js\").GeometryLayout} */ (layout);\n}\n\n/**\n * @param {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n  let stride;\n  if (layout == 'XY') {\n    stride = 2;\n  } else if (layout == 'XYZ' || layout == 'XYM') {\n    stride = 3;\n  } else if (layout == 'XYZM') {\n    stride = 4;\n  }\n  return /** @type {number} */ (stride);\n}\n\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array<number>} [dest] Destination.\n * @return {Array<number>} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, dest) {\n  const flatCoordinates = simpleGeometry.getFlatCoordinates();\n  if (!flatCoordinates) {\n    return null;\n  }\n  const stride = simpleGeometry.getStride();\n  return transform2D(\n    flatCoordinates,\n    0,\n    flatCoordinates.length,\n    stride,\n    transform,\n    dest,\n  );\n}\n\nexport default SimpleGeometry;\n","/**\n * @module ol/geom/flat/area\n */\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n  let twiceArea = 0;\n  const x0 = flatCoordinates[end - stride];\n  const y0 = flatCoordinates[end - stride + 1];\n  let dx1 = 0;\n  let dy1 = 0;\n  for (; offset < end; offset += stride) {\n    const dx2 = flatCoordinates[offset] - x0;\n    const dy2 = flatCoordinates[offset + 1] - y0;\n    twiceArea += dy1 * dx2 - dx1 * dy2;\n    dx1 = dx2;\n    dy1 = dy2;\n  }\n  return twiceArea / 2;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n  let area = 0;\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    area += linearRing(flatCoordinates, offset, end, stride);\n    offset = end;\n  }\n  return area;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n  let area = 0;\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    area += linearRings(flatCoordinates, offset, ends, stride);\n    offset = ends[ends.length - 1];\n  }\n  return area;\n}\n","/**\n * @module ol/geom/flat/center\n */\nimport {createEmpty, createOrUpdateFromFlatCoordinates} from '../../extent.js';\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @return {Array<number>} Flat centers.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n  const flatCenters = [];\n  let extent = createEmpty();\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    extent = createOrUpdateFromFlatCoordinates(\n      flatCoordinates,\n      offset,\n      ends[0],\n      stride,\n    );\n    flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);\n    offset = ends[ends.length - 1];\n  }\n  return flatCenters;\n}\n","/**\n * @module ol/geom/flat/closest\n */\nimport {lerp, squaredDistance as squaredDx} from '../../math.js';\n\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y).  Extra\n * dimensions are linearly interpolated.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n */\nfunction assignClosest(\n  flatCoordinates,\n  offset1,\n  offset2,\n  stride,\n  x,\n  y,\n  closestPoint,\n) {\n  const x1 = flatCoordinates[offset1];\n  const y1 = flatCoordinates[offset1 + 1];\n  const dx = flatCoordinates[offset2] - x1;\n  const dy = flatCoordinates[offset2 + 1] - y1;\n  let offset;\n  if (dx === 0 && dy === 0) {\n    offset = offset1;\n  } else {\n    const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n    if (t > 1) {\n      offset = offset2;\n    } else if (t > 0) {\n      for (let i = 0; i < stride; ++i) {\n        closestPoint[i] = lerp(\n          flatCoordinates[offset1 + i],\n          flatCoordinates[offset2 + i],\n          t,\n        );\n      }\n      closestPoint.length = stride;\n      return;\n    } else {\n      offset = offset1;\n    }\n  }\n  for (let i = 0; i < stride; ++i) {\n    closestPoint[i] = flatCoordinates[offset + i];\n  }\n  closestPoint.length = stride;\n}\n\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n  let x1 = flatCoordinates[offset];\n  let y1 = flatCoordinates[offset + 1];\n  for (offset += stride; offset < end; offset += stride) {\n    const x2 = flatCoordinates[offset];\n    const y2 = flatCoordinates[offset + 1];\n    const squaredDelta = squaredDx(x1, y1, x2, y2);\n    if (squaredDelta > max) {\n      max = squaredDelta;\n    }\n    x1 = x2;\n    y1 = y2;\n  }\n  return max;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  max,\n) {\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n    offset = end;\n  }\n  return max;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  max,\n) {\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n    offset = ends[ends.length - 1];\n  }\n  return max;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  maxDelta,\n  isRing,\n  x,\n  y,\n  closestPoint,\n  minSquaredDistance,\n  tmpPoint,\n) {\n  if (offset == end) {\n    return minSquaredDistance;\n  }\n  let i, squaredDistance;\n  if (maxDelta === 0) {\n    // All points are identical, so just test the first point.\n    squaredDistance = squaredDx(\n      x,\n      y,\n      flatCoordinates[offset],\n      flatCoordinates[offset + 1],\n    );\n    if (squaredDistance < minSquaredDistance) {\n      for (i = 0; i < stride; ++i) {\n        closestPoint[i] = flatCoordinates[offset + i];\n      }\n      closestPoint.length = stride;\n      return squaredDistance;\n    }\n    return minSquaredDistance;\n  }\n  tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n  let index = offset + stride;\n  while (index < end) {\n    assignClosest(\n      flatCoordinates,\n      index - stride,\n      index,\n      stride,\n      x,\n      y,\n      tmpPoint,\n    );\n    squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n    if (squaredDistance < minSquaredDistance) {\n      minSquaredDistance = squaredDistance;\n      for (i = 0; i < stride; ++i) {\n        closestPoint[i] = tmpPoint[i];\n      }\n      closestPoint.length = stride;\n      index += stride;\n    } else {\n      // Skip ahead multiple points, because we know that all the skipped\n      // points cannot be any closer than the closest point we have found so\n      // far.  We know this because we know how close the current point is, how\n      // close the closest point we have found so far is, and the maximum\n      // distance between consecutive points.  For example, if we're currently\n      // at distance 10, the best we've found so far is 3, and that the maximum\n      // distance between consecutive points is 2, then we'll need to skip at\n      // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n      // finding a closer point.  We use Math.max(..., 1) to ensure that we\n      // always advance at least one point, to avoid an infinite loop.\n      index +=\n        stride *\n        Math.max(\n          ((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n            maxDelta) |\n            0,\n          1,\n        );\n    }\n  }\n  if (isRing) {\n    // Check the closing segment.\n    assignClosest(\n      flatCoordinates,\n      end - stride,\n      offset,\n      stride,\n      x,\n      y,\n      tmpPoint,\n    );\n    squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n    if (squaredDistance < minSquaredDistance) {\n      minSquaredDistance = squaredDistance;\n      for (i = 0; i < stride; ++i) {\n        closestPoint[i] = tmpPoint[i];\n      }\n      closestPoint.length = stride;\n    }\n  }\n  return minSquaredDistance;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  maxDelta,\n  isRing,\n  x,\n  y,\n  closestPoint,\n  minSquaredDistance,\n  tmpPoint,\n) {\n  tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    minSquaredDistance = assignClosestPoint(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      maxDelta,\n      isRing,\n      x,\n      y,\n      closestPoint,\n      minSquaredDistance,\n      tmpPoint,\n    );\n    offset = end;\n  }\n  return minSquaredDistance;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array<number>} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array<number>} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  maxDelta,\n  isRing,\n  x,\n  y,\n  closestPoint,\n  minSquaredDistance,\n  tmpPoint,\n) {\n  tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    minSquaredDistance = assignClosestArrayPoint(\n      flatCoordinates,\n      offset,\n      ends,\n      stride,\n      maxDelta,\n      isRing,\n      x,\n      y,\n      closestPoint,\n      minSquaredDistance,\n      tmpPoint,\n    );\n    offset = ends[ends.length - 1];\n  }\n  return minSquaredDistance;\n}\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  extent,\n) {\n  const outside = forEachCorner(\n    extent,\n    /**\n     * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n     * @return {boolean} Contains (x, y).\n     */\n    function (coordinate) {\n      return !linearRingContainsXY(\n        flatCoordinates,\n        offset,\n        end,\n        stride,\n        coordinate[0],\n        coordinate[1],\n      );\n    },\n  );\n  return !outside;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  x,\n  y,\n) {\n  // https://web.archive.org/web/20210504233957/http://geomalgorithms.com/a03-_inclusion.html\n  // Copyright 2000 softSurfer, 2012 Dan Sunday\n  // This code may be freely used and modified for any purpose\n  // providing that this copyright notice is included with it.\n  // SoftSurfer makes no warranty for this code, and cannot be held\n  // liable for any real or imagined damage resulting from its use.\n  // Users of this code must verify correctness for their application.\n  let wn = 0;\n  let x1 = flatCoordinates[end - stride];\n  let y1 = flatCoordinates[end - stride + 1];\n  for (; offset < end; offset += stride) {\n    const x2 = flatCoordinates[offset];\n    const y2 = flatCoordinates[offset + 1];\n    if (y1 <= y) {\n      if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n        wn++;\n      }\n    } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n      wn--;\n    }\n    x1 = x2;\n    y1 = y2;\n  }\n  return wn !== 0;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  x,\n  y,\n) {\n  if (ends.length === 0) {\n    return false;\n  }\n  if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n    return false;\n  }\n  for (let i = 1, ii = ends.length; i < ii; ++i) {\n    if (\n      linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n    ) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  x,\n  y,\n) {\n  if (endss.length === 0) {\n    return false;\n  }\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n      return true;\n    }\n    offset = ends[ends.length - 1];\n  }\n  return false;\n}\n","/**\n * @module ol/geom/flat/deflate\n */\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n  for (let i = 0, ii = coordinate.length; i < ii; ++i) {\n    flatCoordinates[offset++] = coordinate[i];\n  }\n  return offset;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<import(\"../../coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(\n  flatCoordinates,\n  offset,\n  coordinates,\n  stride,\n) {\n  for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n    const coordinate = coordinates[i];\n    for (let j = 0; j < stride; ++j) {\n      flatCoordinates[offset++] = coordinate[j];\n    }\n  }\n  return offset;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<import(\"../../coordinate.js\").Coordinate>>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array<number>} [ends] Ends.\n * @return {Array<number>} Ends.\n */\nexport function deflateCoordinatesArray(\n  flatCoordinates,\n  offset,\n  coordinatess,\n  stride,\n  ends,\n) {\n  ends = ends ? ends : [];\n  let i = 0;\n  for (let j = 0, jj = coordinatess.length; j < jj; ++j) {\n    const end = deflateCoordinates(\n      flatCoordinates,\n      offset,\n      coordinatess[j],\n      stride,\n    );\n    ends[i++] = end;\n    offset = end;\n  }\n  ends.length = i;\n  return ends;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array<Array<number>>} [endss] Endss.\n * @return {Array<Array<number>>} Endss.\n */\nexport function deflateMultiCoordinatesArray(\n  flatCoordinates,\n  offset,\n  coordinatesss,\n  stride,\n  endss,\n) {\n  endss = endss ? endss : [];\n  let i = 0;\n  for (let j = 0, jj = coordinatesss.length; j < jj; ++j) {\n    const ends = deflateCoordinatesArray(\n      flatCoordinates,\n      offset,\n      coordinatesss[j],\n      stride,\n      endss[i],\n    );\n    if (ends.length === 0) {\n      ends[0] = offset;\n    }\n    endss[i++] = ends;\n    offset = ends[ends.length - 1];\n  }\n  endss.length = i;\n  return endss;\n}\n","/**\n * @module ol/geom/flat/inflate\n */\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array<import(\"../../coordinate.js\").Coordinate>} [coordinates] Coordinates.\n * @return {Array<import(\"../../coordinate.js\").Coordinate>} Coordinates.\n */\nexport function inflateCoordinates(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  coordinates,\n) {\n  coordinates = coordinates !== undefined ? coordinates : [];\n  let i = 0;\n  for (let j = offset; j < end; j += stride) {\n    coordinates[i++] = flatCoordinates.slice(j, j + stride);\n  }\n  coordinates.length = i;\n  return coordinates;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array<Array<import(\"../../coordinate.js\").Coordinate>>} [coordinatess] Coordinatess.\n * @return {Array<Array<import(\"../../coordinate.js\").Coordinate>>} Coordinatess.\n */\nexport function inflateCoordinatesArray(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  coordinatess,\n) {\n  coordinatess = coordinatess !== undefined ? coordinatess : [];\n  let i = 0;\n  for (let j = 0, jj = ends.length; j < jj; ++j) {\n    const end = ends[j];\n    coordinatess[i++] = inflateCoordinates(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      coordinatess[i],\n    );\n    offset = end;\n  }\n  coordinatess.length = i;\n  return coordinatess;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>} [coordinatesss]\n *     Coordinatesss.\n * @return {Array<Array<Array<import(\"../../coordinate.js\").Coordinate>>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  coordinatesss,\n) {\n  coordinatesss = coordinatesss !== undefined ? coordinatesss : [];\n  let i = 0;\n  for (let j = 0, jj = endss.length; j < jj; ++j) {\n    const ends = endss[j];\n    coordinatesss[i++] =\n      ends.length === 1 && ends[0] === offset\n        ? []\n        : inflateCoordinatesArray(\n            flatCoordinates,\n            offset,\n            ends,\n            stride,\n            coordinatesss[i],\n          );\n    offset = ends[ends.length - 1];\n  }\n  coordinatesss.length = i;\n  return coordinatesss;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {ascending} from '../../array.js';\nimport {linearRingsContainsXY} from './contains.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {Array<number>} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array<number>} [dest] Destination.\n * @return {Array<number>} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  flatCenters,\n  flatCentersOffset,\n  dest,\n) {\n  let i, ii, x, x1, x2, y1, y2;\n  const y = flatCenters[flatCentersOffset + 1];\n  /** @type {Array<number>} */\n  const intersections = [];\n  // Calculate intersections with the horizontal line\n  for (let r = 0, rr = ends.length; r < rr; ++r) {\n    const end = ends[r];\n    x1 = flatCoordinates[end - stride];\n    y1 = flatCoordinates[end - stride + 1];\n    for (i = offset; i < end; i += stride) {\n      x2 = flatCoordinates[i];\n      y2 = flatCoordinates[i + 1];\n      if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n        x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n        intersections.push(x);\n      }\n      x1 = x2;\n      y1 = y2;\n    }\n  }\n  // Find the longest segment of the horizontal line that has its center point\n  // inside the linear ring.\n  let pointX = NaN;\n  let maxSegmentLength = -Infinity;\n  intersections.sort(ascending);\n  x1 = intersections[0];\n  for (i = 1, ii = intersections.length; i < ii; ++i) {\n    x2 = intersections[i];\n    const segmentLength = Math.abs(x2 - x1);\n    if (segmentLength > maxSegmentLength) {\n      x = (x1 + x2) / 2;\n      if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n        pointX = x;\n        maxSegmentLength = segmentLength;\n      }\n    }\n    x1 = x2;\n  }\n  if (isNaN(pointX)) {\n    // There is no horizontal line that has its center point inside the linear\n    // ring.  Use the center of the the linear ring's extent.\n    pointX = flatCenters[flatCentersOffset];\n  }\n  if (dest) {\n    dest.push(pointX, y, maxSegmentLength);\n    return dest;\n  }\n  return [pointX, y, maxSegmentLength];\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array<number>} flatCenters Flat centers.\n * @return {Array<number>} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  flatCenters,\n) {\n  /** @type {Array<number>} */\n  let interiorPoints = [];\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    interiorPoints = getInteriorPointOfArray(\n      flatCoordinates,\n      offset,\n      ends,\n      stride,\n      flatCenters,\n      2 * i,\n      interiorPoints,\n    );\n    offset = ends[ends.length - 1];\n  }\n  return interiorPoints;\n}\n","/**\n * @module ol/geom/flat/interpolate\n */\nimport {binarySearch} from '../../array.js';\nimport {lerp} from '../../math.js';\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} fraction Fraction.\n * @param {Array<number>} [dest] Destination.\n * @param {number} [dimension] Destination dimension (default is `2`)\n * @return {Array<number>} Destination.\n */\nexport function interpolatePoint(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  fraction,\n  dest,\n  dimension,\n) {\n  let o, t;\n  const n = (end - offset) / stride;\n  if (n === 1) {\n    o = offset;\n  } else if (n === 2) {\n    o = offset;\n    t = fraction;\n  } else if (n !== 0) {\n    let x1 = flatCoordinates[offset];\n    let y1 = flatCoordinates[offset + 1];\n    let length = 0;\n    const cumulativeLengths = [0];\n    for (let i = offset + stride; i < end; i += stride) {\n      const x2 = flatCoordinates[i];\n      const y2 = flatCoordinates[i + 1];\n      length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n      cumulativeLengths.push(length);\n      x1 = x2;\n      y1 = y2;\n    }\n    const target = fraction * length;\n    const index = binarySearch(cumulativeLengths, target);\n    if (index < 0) {\n      t =\n        (target - cumulativeLengths[-index - 2]) /\n        (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);\n      o = offset + (-index - 2) * stride;\n    } else {\n      o = offset + index * stride;\n    }\n  }\n  dimension = dimension > 1 ? dimension : 2;\n  dest = dest ? dest : new Array(dimension);\n  for (let i = 0; i < dimension; ++i) {\n    dest[i] =\n      o === undefined\n        ? NaN\n        : t === undefined\n          ? flatCoordinates[o + i]\n          : lerp(flatCoordinates[o + i], flatCoordinates[o + stride + i], t);\n  }\n  return dest;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringCoordinateAtM(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  m,\n  extrapolate,\n) {\n  if (end == offset) {\n    return null;\n  }\n  let coordinate;\n  if (m < flatCoordinates[offset + stride - 1]) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(offset, offset + stride);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    }\n    return null;\n  }\n  if (flatCoordinates[end - 1] < m) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(end - stride, end);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    }\n    return null;\n  }\n  // FIXME use O(1) search\n  if (m == flatCoordinates[offset + stride - 1]) {\n    return flatCoordinates.slice(offset, offset + stride);\n  }\n  let lo = offset / stride;\n  let hi = end / stride;\n  while (lo < hi) {\n    const mid = (lo + hi) >> 1;\n    if (m < flatCoordinates[(mid + 1) * stride - 1]) {\n      hi = mid;\n    } else {\n      lo = mid + 1;\n    }\n  }\n  const m0 = flatCoordinates[lo * stride - 1];\n  if (m == m0) {\n    return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);\n  }\n  const m1 = flatCoordinates[(lo + 1) * stride - 1];\n  const t = (m - m0) / (m1 - m0);\n  coordinate = [];\n  for (let i = 0; i < stride - 1; ++i) {\n    coordinate.push(\n      lerp(\n        flatCoordinates[(lo - 1) * stride + i],\n        flatCoordinates[lo * stride + i],\n        t,\n      ),\n    );\n  }\n  coordinate.push(m);\n  return coordinate;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} m M.\n * @param {boolean} extrapolate Extrapolate.\n * @param {boolean} interpolate Interpolate.\n * @return {import(\"../../coordinate.js\").Coordinate|null} Coordinate.\n */\nexport function lineStringsCoordinateAtM(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  m,\n  extrapolate,\n  interpolate,\n) {\n  if (interpolate) {\n    return lineStringCoordinateAtM(\n      flatCoordinates,\n      offset,\n      ends[ends.length - 1],\n      stride,\n      m,\n      extrapolate,\n    );\n  }\n  let coordinate;\n  if (m < flatCoordinates[stride - 1]) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(0, stride);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    }\n    return null;\n  }\n  if (flatCoordinates[flatCoordinates.length - 1] < m) {\n    if (extrapolate) {\n      coordinate = flatCoordinates.slice(flatCoordinates.length - stride);\n      coordinate[stride - 1] = m;\n      return coordinate;\n    }\n    return null;\n  }\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    if (offset == end) {\n      continue;\n    }\n    if (m < flatCoordinates[offset + stride - 1]) {\n      return null;\n    }\n    if (m <= flatCoordinates[end - 1]) {\n      return lineStringCoordinateAtM(\n        flatCoordinates,\n        offset,\n        end,\n        stride,\n        m,\n        false,\n      );\n    }\n    offset = end;\n  }\n  return null;\n}\n","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport {\n  createEmpty,\n  extendFlatCoordinates,\n  intersects,\n  intersectsSegment,\n} from '../../extent.js';\nimport {linearRingContainsExtent, linearRingContainsXY} from './contains.js';\nimport {forEach as forEachSegment} from './segments.js';\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @param {import('../../extent.js').Extent} [coordinatesExtent] Coordinates extent\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  extent,\n  coordinatesExtent,\n) {\n  coordinatesExtent =\n    coordinatesExtent ??\n    extendFlatCoordinates(createEmpty(), flatCoordinates, offset, end, stride);\n  if (!intersects(extent, coordinatesExtent)) {\n    return false;\n  }\n  if (\n    (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) ||\n    (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3])\n  ) {\n    return true;\n  }\n  return forEachSegment(\n    flatCoordinates,\n    offset,\n    end,\n    stride,\n    /**\n     * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n     * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n     * @return {boolean} `true` if the segment and the extent intersect,\n     *     `false` otherwise.\n     */\n    function (point1, point2) {\n      return intersectsSegment(extent, point1, point2);\n    },\n  );\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  extent,\n) {\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    if (\n      intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)\n    ) {\n      return true;\n    }\n    offset = ends[i];\n  }\n  return false;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  extent,\n) {\n  if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n    return true;\n  }\n  if (\n    linearRingContainsXY(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      extent[0],\n      extent[1],\n    )\n  ) {\n    return true;\n  }\n  if (\n    linearRingContainsXY(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      extent[0],\n      extent[3],\n    )\n  ) {\n    return true;\n  }\n  if (\n    linearRingContainsXY(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      extent[2],\n      extent[1],\n    )\n  ) {\n    return true;\n  }\n  if (\n    linearRingContainsXY(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      extent[2],\n      extent[3],\n    )\n  ) {\n    return true;\n  }\n  return false;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  extent,\n) {\n  if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n    return false;\n  }\n  if (ends.length === 1) {\n    return true;\n  }\n  for (let i = 1, ii = ends.length; i < ii; ++i) {\n    if (\n      linearRingContainsExtent(\n        flatCoordinates,\n        ends[i - 1],\n        ends[i],\n        stride,\n        extent,\n      )\n    ) {\n      if (\n        !intersectsLineString(\n          flatCoordinates,\n          ends[i - 1],\n          ends[i],\n          stride,\n          extent,\n        )\n      ) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  extent,\n) {\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    if (\n      intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)\n    ) {\n      return true;\n    }\n    offset = ends[ends.length - 1];\n  }\n  return false;\n}\n","/**\n * @module ol/geom/flat/length\n */\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Length.\n */\nexport function lineStringLength(flatCoordinates, offset, end, stride) {\n  let x1 = flatCoordinates[offset];\n  let y1 = flatCoordinates[offset + 1];\n  let length = 0;\n  for (let i = offset + stride; i < end; i += stride) {\n    const x2 = flatCoordinates[i];\n    const y2 = flatCoordinates[i + 1];\n    length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n    x1 = x2;\n    y1 = y2;\n  }\n  return length;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Perimeter.\n */\nexport function linearRingLength(flatCoordinates, offset, end, stride) {\n  let perimeter = lineStringLength(flatCoordinates, offset, end, stride);\n  const dx = flatCoordinates[end - stride] - flatCoordinates[offset];\n  const dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];\n  perimeter += Math.sqrt(dx * dx + dy * dy);\n  return perimeter;\n}\n","import {angleBetween} from '../../coordinate.js';\n\n/**\n * Offsets a line string to the left / right along its segments direction.\n * Offset is applied to each segment of the line in the direciton of the segment normal (positive offset goes \"right\" relative to the line direction).\n * For very sharp angles between segments, the function falls back to offsetting along the segment normal direction to avoid excessively long miters.\n *\n * Coordinates and the offset should be in the same units — either pixels or the same spatial reference system as the input line coordinates.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} start Start index.\n * @param {number} end End index.\n * @param {number} stride Stride.\n * @param {number} offset Offset distance along the segment normal direction.\n *   Positive values offset to the right relative to the direction of the line.\n *   Negative values offset to the left.\n * @param {boolean} isClosedRing If coordinates build a closed circle (in this the first and the last coordinate offsets will consider previous / next ring coordinate)\n * @param {Array<number>} [dest] Destination coordinate array. If not provided a new one will be created\n * @param {number} [destinationStride] Stride of destination coordinates. If unspecified, assumed to be same as the source coordinates stride.\n * @return {Array<number>} Result flat coordinates of the offset line.\n */\nexport function offsetLineString(\n  flatCoordinates,\n  start,\n  end,\n  stride,\n  offset,\n  isClosedRing,\n  dest,\n  destinationStride,\n) {\n  dest = dest ?? [];\n  destinationStride = destinationStride ?? stride;\n\n  const secondPointX = flatCoordinates[start + stride];\n  const secondPointY = flatCoordinates[start + stride + 1];\n  const secondToLastPointX = flatCoordinates[end - 2 * stride];\n  const secondToLastPointY = flatCoordinates[end - 2 * stride + 1];\n  let x, y, prevX, prevY, nextX, nextY, offsetX, offsetY;\n\n  let i = 0;\n  for (let j = start; j < end; j += stride) {\n    // 1. Detect previous and next coordinates of a current vertex\n    prevX = x;\n    prevY = y;\n    nextX = undefined;\n    nextY = undefined;\n    if (j + stride < end) {\n      nextX = flatCoordinates[j + stride];\n      nextY = flatCoordinates[j + stride + 1];\n    }\n    // First coordinate of a closed ring -> previous coordinate is the second to last one\n    if (isClosedRing && j === start) {\n      prevX = secondToLastPointX;\n      prevY = secondToLastPointY;\n    }\n    // Last coordinate of a closed ring -> next coordinate is the second vertex of a line string (the last one is same as the first one for a closed ring)\n    if (isClosedRing && j === end - stride) {\n      nextX = secondPointX;\n      nextY = secondPointY;\n    }\n\n    // 2. Current vertex to offset\n    x = flatCoordinates[j];\n    y = flatCoordinates[j + 1];\n\n    // 3. Offset the vertex\n    [offsetX, offsetY] = offsetLineVertex(\n      x,\n      y,\n      prevX,\n      prevY,\n      nextX,\n      nextY,\n      offset,\n    );\n    dest[i++] = offsetX;\n    dest[i++] = offsetY;\n\n    // 4. Copy over other dimension values if any\n    for (let k = 2; k < destinationStride; k++) {\n      dest[i++] = flatCoordinates[j + k];\n    }\n  }\n\n  if (dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n}\n\n/**\n * Computes the offset of a single vertex of a line string.\n *\n * The function calculates a new vertex coordinate offset along the normal/miter direction of the line at this vertex.\n * Offset is applied along the segment normal (positive offset goes \"right\" relative to the line direction).\n * It handles first and last vertices (caps) as well as joins between two segments (mitering).\n * For very sharp angles, the function falls back to offsetting along the segment normal direction to avoid excessively long miters.\n *\n * Coordinates and the offset should be in the same units — either pixels or the same spatial reference system as the input line coordinates.\n *\n * @param {number} x Vertex x-coordinate.\n * @param {number} y Vertex y-coordinate.\n * @param {number|undefined} prevX Previous vertex x-coordinate.\n *   Pass undefined if computing the offset for the first vertex (no previous vertex).\n * @param {number|undefined} prevY Previous vertex y-coordinate.\n *   Pass undefined if computing the offset for the first vertex (no previous vertex).\n * @param {number|undefined} nextX Next vertex x-coordinate.\n *   Pass undefined if computing the offset for the last vertex (no next vertex).\n * @param {number|undefined} nextY Next vertex y-coordinate.\n *   Pass undefined if computing the offset for the last vertex (no next vertex).\n * @param {number} offset Offset distance along the segment normal direction.\n *   Positive values offset to the right relative to the direction from previous to next vertex.\n *   Negative values offset to the left.\n * @return {import(\"../../coordinate.js\").Coordinate} Offset vertex coordinate as `[x, y]`.\n */\nfunction offsetLineVertex(x, y, prevX, prevY, nextX, nextY, offset) {\n  // Compute segment direction\n  let nx, ny;\n  if (prevX !== undefined && prevY !== undefined) {\n    nx = x - prevX;\n    ny = y - prevY;\n  } else if (nextX !== undefined && nextY !== undefined) {\n    nx = nextX - x;\n    ny = nextY - y;\n  } else {\n    // no next, no previous point given -> just assume some default (horizontal) direction\n    nx = 1;\n    ny = 0;\n  }\n\n  // Normalize -> tangent\n  const len = Math.hypot(nx, ny);\n  const tx = nx / len;\n  const ty = ny / len;\n\n  // Rotate tangent 90° -> normal\n  nx = -ty;\n  ny = tx;\n\n  // First / last vertex -> offset the point in the direction of the normal vector\n  if (prevX === undefined || prevY === undefined) {\n    return [x + nx * offset, y + ny * offset];\n  }\n  if (nextX === undefined || nextY === undefined) {\n    return [x + nx * offset, y + ny * offset];\n  }\n\n  // Compute join angle - angle between 2 segments of the vertex.\n  const joinAngle = angleBetween([x, y], [prevX, prevY], [nextX, nextY]);\n\n  // Avoid huge or infinite miter joins for very sharp angles, offset in the segment direction in this case.\n  if (Math.cos(joinAngle) > 0.998) {\n    return [x + tx * offset, y + ty * offset];\n  }\n\n  // Compute join offset direction.\n  // We rotate the normal vector by half of the join angle.\n  // This gives the direction of the miter at the vertex.\n  const cos = Math.cos(joinAngle / 2);\n  const sin = Math.sin(joinAngle / 2);\n\n  // Rotate the normal vector (nx, ny) by half of the join angle.\n  // bx/by = bisector direction before normalization\n  const bx = sin * nx + cos * ny;\n  const by = -cos * nx + sin * ny;\n\n  // Scale the bisector so that moving along it preserves the correct offset distance.\n  // Dividing by sin(half of angle) converts the bisector into the true miter vector.\n  // (This expands the miter for sharp angles and shortens it for wide ones.)\n  const dx = bx * (1 / sin);\n  const dy = by * (1 / sin);\n\n  // Offset final vertex along miter direction\n  return [x + dx * offset, y + dy * offset];\n}\n\n/**\n * Removes self-intersection loops (cycles) from an offset line.\n * When a polyline is offset, sharp turns can create self-intersecting loops.\n * This function detects those crossings and splices out the looped portions,\n * replacing them with the intersection point.\n *\n * @param {Array<number>} coords Flat offset coordinates (modified in-place).\n * @param {number} stride Coordinate stride (typically 2).\n * @param {boolean} [closedLine] Whether the original line is closed (first vertex === last vertex).\n *   When true, the first and last offset segments are not compared against each other to avoid\n *   false loop detection at the closure point.\n * @return {Array<number>} The cleaned coordinate array.\n */\nexport function removeOffsetCycles(coords, stride, closedLine = false) {\n  for (let i = 0, ii = coords.length - 2; i < ii; i += stride) {\n    const jMax =\n      closedLine && i === 0\n        ? coords.length - 3 * stride\n        : coords.length - 2 * stride;\n    for (let j = jMax; j > i + stride; j -= stride) {\n      const p1x = coords[i];\n      const p1y = coords[i + 1];\n      const p2x = coords[i + stride];\n      const p2y = coords[i + stride + 1];\n      const p3x = coords[j];\n      const p3y = coords[j + 1];\n      const p4x = coords[j + stride];\n      const p4y = coords[j + stride + 1];\n      const d = (p4y - p3y) * (p2x - p1x) - (p4x - p3x) * (p2y - p1y);\n      if (d === 0) {\n        continue;\n      }\n      const t = ((p4x - p3x) * (p1y - p3y) - (p4y - p3y) * (p1x - p3x)) / d;\n      const u = ((p2x - p1x) * (p1y - p3y) - (p2y - p1y) * (p1x - p3x)) / d;\n      if (t > 0 && t < 1 && u > 0 && u < 1) {\n        const ix = p1x + t * (p2x - p1x);\n        const iy = p1y + t * (p2y - p1y);\n        coords[i + stride] = ix;\n        coords[i + stride + 1] = iy;\n        coords.splice(i + 2 * stride, j - i - stride);\n        break;\n      }\n    }\n  }\n  return coords;\n}\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean|undefined} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n  // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n  // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n  let edge = 0;\n  let x1 = flatCoordinates[end - stride];\n  let y1 = flatCoordinates[end - stride + 1];\n  for (; offset < end; offset += stride) {\n    const x2 = flatCoordinates[offset];\n    const y2 = flatCoordinates[offset + 1];\n    edge += (x2 - x1) * (y2 + y1);\n    x1 = x2;\n    y1 = y2;\n  }\n  return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented.  By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n *     (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  right,\n) {\n  right = right !== undefined ? right : false;\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    const isClockwise = linearRingIsClockwise(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n    );\n    if (i === 0) {\n      if ((right && isClockwise) || (!right && !isClockwise)) {\n        return false;\n      }\n    } else {\n      if ((right && !isClockwise) || (!right && isClockwise)) {\n        return false;\n      }\n    }\n    offset = end;\n  }\n  return true;\n}\n\n/**\n * Determines if linear rings are oriented.  By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n *     (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  right,\n) {\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, right)) {\n      return false;\n    }\n    if (ends.length) {\n      offset = ends[ends.length - 1];\n    }\n  }\n  return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings.  By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings).  To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  right,\n) {\n  right = right !== undefined ? right : false;\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    const isClockwise = linearRingIsClockwise(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n    );\n    const reverse =\n      i === 0\n        ? (right && isClockwise) || (!right && !isClockwise)\n        : (right && !isClockwise) || (!right && isClockwise);\n    if (reverse) {\n      reverseCoordinates(flatCoordinates, offset, end, stride);\n    }\n    offset = end;\n  }\n  return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings.  By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings).  To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  right,\n) {\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    offset = orientLinearRings(\n      flatCoordinates,\n      offset,\n      endss[i],\n      stride,\n      right,\n    );\n  }\n  return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array<number>} flatCoordinates Flat coordinates\n * @param {Array<number>} ends Linear ring end indexes\n * @return {Array<Array<number>>} Two dimensional endss array that can\n * be used to construct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n  const endss = [];\n  let offset = 0;\n  let prevEndIndex = 0;\n  let startOrientation;\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    // classifies an array of rings into polygons with outer rings and holes\n    const orientation = linearRingIsClockwise(flatCoordinates, offset, end, 2);\n    if (startOrientation === undefined) {\n      startOrientation = orientation;\n    }\n    if (orientation === startOrientation) {\n      endss.push(ends.slice(prevEndIndex, i + 1));\n    } else {\n      if (endss.length === 0) {\n        continue;\n      }\n      endss[endss.length - 1].push(ends[prevEndIndex]);\n    }\n    prevEndIndex = i + 1;\n    offset = end;\n  }\n  return endss;\n}\n","/**\n * @module ol/geom/flat/reverse\n */\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n  while (offset < end - stride) {\n    for (let i = 0; i < stride; ++i) {\n      const tmp = flatCoordinates[offset + i];\n      flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n      flatCoordinates[end - stride + i] = tmp;\n    }\n    offset += stride;\n    end -= stride;\n  }\n}\n","/**\n * @module ol/geom/flat/segments\n */\n\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n *     called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n  let ret;\n  offset += stride;\n  for (; offset < end; offset += stride) {\n    ret = callback(\n      flatCoordinates.slice(offset - stride, offset),\n      flatCoordinates.slice(offset, offset + stride),\n    );\n    if (ret) {\n      return ret;\n    }\n  }\n  return false;\n}\n\n/**\n * Calculate the intersection point of two line segments.\n * Reference: https://stackoverflow.com/a/72474223/2389327\n * @param {Array<import(\"../../coordinate.js\").Coordinate>} segment1 The first line segment as an array of two points.\n * @param {Array<import(\"../../coordinate.js\").Coordinate>} segment2 The second line segment as an array of two points.\n * @return {import(\"../../coordinate.js\").Coordinate|undefined} The intersection point or `undefined` if no intersection.\n */\nexport function getIntersectionPoint(segment1, segment2) {\n  const [a, b] = segment1;\n  const [c, d] = segment2;\n  const t =\n    ((a[0] - c[0]) * (c[1] - d[1]) - (a[1] - c[1]) * (c[0] - d[0])) /\n    ((a[0] - b[0]) * (c[1] - d[1]) - (a[1] - b[1]) * (c[0] - d[0]));\n  const u =\n    ((a[0] - c[0]) * (a[1] - b[1]) - (a[1] - c[1]) * (a[0] - b[0])) /\n    ((a[0] - b[0]) * (c[1] - d[1]) - (a[1] - b[1]) * (c[0] - d[0]));\n\n  // Check if lines actually intersect\n  if (0 <= t && t <= 1 && 0 <= u && u <= 1) {\n    return [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n  }\n  return undefined;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n//    1. Redistributions of source code must retain the above copyright notice,\n//       this list of conditions and the following disclaimer.\n//\n//    2. Redistributions in binary form must reproduce the above copyright\n//       notice, this list of conditions and the following disclaimer in the\n//       documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array<number>} [simplifiedFlatCoordinates] Simplified flat\n *     coordinates.\n * @return {Array<number>} Simplified line string.\n */\nexport function simplifyLineString(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  squaredTolerance,\n  highQuality,\n  simplifiedFlatCoordinates,\n) {\n  simplifiedFlatCoordinates =\n    simplifiedFlatCoordinates !== undefined ? simplifiedFlatCoordinates : [];\n  if (!highQuality) {\n    end = radialDistance(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      squaredTolerance,\n      simplifiedFlatCoordinates,\n      0,\n    );\n    flatCoordinates = simplifiedFlatCoordinates;\n    offset = 0;\n    stride = 2;\n  }\n  simplifiedFlatCoordinates.length = douglasPeucker(\n    flatCoordinates,\n    offset,\n    end,\n    stride,\n    squaredTolerance,\n    simplifiedFlatCoordinates,\n    0,\n  );\n  return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  squaredTolerance,\n  simplifiedFlatCoordinates,\n  simplifiedOffset,\n) {\n  const n = (end - offset) / stride;\n  if (n < 3) {\n    for (; offset < end; offset += stride) {\n      simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n        flatCoordinates[offset + 1];\n    }\n    return simplifiedOffset;\n  }\n  /** @type {Array<number>} */\n  const markers = new Array(n);\n  markers[0] = 1;\n  markers[n - 1] = 1;\n  /** @type {Array<number>} */\n  const stack = [offset, end - stride];\n  let index = 0;\n  while (stack.length > 0) {\n    const last = stack.pop();\n    const first = stack.pop();\n    let maxSquaredDistance = 0;\n    const x1 = flatCoordinates[first];\n    const y1 = flatCoordinates[first + 1];\n    const x2 = flatCoordinates[last];\n    const y2 = flatCoordinates[last + 1];\n    for (let i = first + stride; i < last; i += stride) {\n      const x = flatCoordinates[i];\n      const y = flatCoordinates[i + 1];\n      const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n      if (squaredDistance > maxSquaredDistance) {\n        index = i;\n        maxSquaredDistance = squaredDistance;\n      }\n    }\n    if (maxSquaredDistance > squaredTolerance) {\n      markers[(index - offset) / stride] = 1;\n      if (first + stride < index) {\n        stack.push(first, index);\n      }\n      if (index + stride < last) {\n        stack.push(index, last);\n      }\n    }\n  }\n  for (let i = 0; i < n; ++i) {\n    if (markers[i]) {\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n        flatCoordinates[offset + i * stride];\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n        flatCoordinates[offset + i * stride + 1];\n    }\n  }\n  return simplifiedOffset;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  squaredTolerance,\n  simplifiedFlatCoordinates,\n  simplifiedOffset,\n  simplifiedEnds,\n) {\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    simplifiedOffset = douglasPeucker(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      squaredTolerance,\n      simplifiedFlatCoordinates,\n      simplifiedOffset,\n    );\n    simplifiedEnds.push(simplifiedOffset);\n    offset = end;\n  }\n  return simplifiedOffset;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<Array<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  squaredTolerance,\n  simplifiedFlatCoordinates,\n  simplifiedOffset,\n  simplifiedEndss,\n) {\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    /** @type {Array<number>} */\n    const simplifiedEnds = [];\n    simplifiedOffset = douglasPeuckerArray(\n      flatCoordinates,\n      offset,\n      ends,\n      stride,\n      squaredTolerance,\n      simplifiedFlatCoordinates,\n      simplifiedOffset,\n      simplifiedEnds,\n    );\n    simplifiedEndss.push(simplifiedEnds);\n    offset = ends[ends.length - 1];\n  }\n  return simplifiedOffset;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  squaredTolerance,\n  simplifiedFlatCoordinates,\n  simplifiedOffset,\n) {\n  if (end <= offset + stride) {\n    // zero or one point, no simplification possible, so copy and return\n    for (; offset < end; offset += stride) {\n      simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n      simplifiedFlatCoordinates[simplifiedOffset++] =\n        flatCoordinates[offset + 1];\n    }\n    return simplifiedOffset;\n  }\n  let x1 = flatCoordinates[offset];\n  let y1 = flatCoordinates[offset + 1];\n  // copy first point\n  simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n  simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n  let x2 = x1;\n  let y2 = y1;\n  for (offset += stride; offset < end; offset += stride) {\n    x2 = flatCoordinates[offset];\n    y2 = flatCoordinates[offset + 1];\n    if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n      // copy point at offset\n      simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n      simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n      x1 = x2;\n      y1 = y2;\n    }\n  }\n  if (x2 != x1 || y2 != y1) {\n    // copy last point\n    simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n    simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n  }\n  return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n  return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded.  This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string.  This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons.  This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  tolerance,\n  simplifiedFlatCoordinates,\n  simplifiedOffset,\n) {\n  // do nothing if the line is empty\n  if (offset == end) {\n    return simplifiedOffset;\n  }\n  // snap the first coordinate (P1)\n  let x1 = snap(flatCoordinates[offset], tolerance);\n  let y1 = snap(flatCoordinates[offset + 1], tolerance);\n  offset += stride;\n  // add the first coordinate to the output\n  simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n  simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n  // find the next coordinate that does not snap to the same value as the first\n  // coordinate (P2)\n  let x2, y2;\n  do {\n    x2 = snap(flatCoordinates[offset], tolerance);\n    y2 = snap(flatCoordinates[offset + 1], tolerance);\n    offset += stride;\n    if (offset == end) {\n      // all coordinates snap to the same value, the line collapses to a point\n      // push the last snapped value anyway to ensure that the output contains\n      // at least two points\n      // FIXME should we really return at least two points anyway?\n      simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n      simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n      return simplifiedOffset;\n    }\n  } while (x2 == x1 && y2 == y1);\n  while (offset < end) {\n    // snap the next coordinate (P3)\n    const x3 = snap(flatCoordinates[offset], tolerance);\n    const y3 = snap(flatCoordinates[offset + 1], tolerance);\n    offset += stride;\n    // skip P3 if it is equal to P2\n    if (x3 == x2 && y3 == y2) {\n      continue;\n    }\n    // calculate the delta between P1 and P2\n    const dx1 = x2 - x1;\n    const dy1 = y2 - y1;\n    // calculate the delta between P3 and P1\n    const dx2 = x3 - x1;\n    const dy2 = y3 - y1;\n    // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n    // P1 in the same direction then P2 is on the straight line between P1 and\n    // P3\n    if (\n      dx1 * dy2 == dy1 * dx2 &&\n      ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n      ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n    ) {\n      // discard P2 and set P2 = P3\n      x2 = x3;\n      y2 = y3;\n      continue;\n    }\n    // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n    // between P3 and P1 or on the opposite half of the line to P2.  add P2,\n    // and continue with P1 = P2 and P2 = P3\n    simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n    simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n    x1 = x2;\n    y1 = y2;\n    x2 = x3;\n    y2 = y3;\n  }\n  // add the last point (P2)\n  simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n  simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n  return simplifiedOffset;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<number>} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n  flatCoordinates,\n  offset,\n  ends,\n  stride,\n  tolerance,\n  simplifiedFlatCoordinates,\n  simplifiedOffset,\n  simplifiedEnds,\n) {\n  for (let i = 0, ii = ends.length; i < ii; ++i) {\n    const end = ends[i];\n    simplifiedOffset = quantize(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      tolerance,\n      simplifiedFlatCoordinates,\n      simplifiedOffset,\n    );\n    simplifiedEnds.push(simplifiedOffset);\n    offset = end;\n  }\n  return simplifiedOffset;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array<Array<number>>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array<number>} simplifiedFlatCoordinates Simplified flat\n *     coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array<Array<number>>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n  flatCoordinates,\n  offset,\n  endss,\n  stride,\n  tolerance,\n  simplifiedFlatCoordinates,\n  simplifiedOffset,\n  simplifiedEndss,\n) {\n  for (let i = 0, ii = endss.length; i < ii; ++i) {\n    const ends = endss[i];\n    /** @type {Array<number>} */\n    const simplifiedEnds = [];\n    simplifiedOffset = quantizeArray(\n      flatCoordinates,\n      offset,\n      ends,\n      stride,\n      tolerance,\n      simplifiedFlatCoordinates,\n      simplifiedOffset,\n      simplifiedEnds,\n    );\n    simplifiedEndss.push(simplifiedEnds);\n    offset = ends[ends.length - 1];\n  }\n  return simplifiedOffset;\n}\n","/**\n * @module ol/geom/flat/textpath\n */\nimport {lerp} from '../../math.js';\nimport {rotate} from './transform.js';\n\nlet segmenter;\n/**\n * @return {Intl.Segmenter} A grapheme segmenter.\n */\nfunction getSegmenter() {\n  if (!segmenter) {\n    segmenter = new Intl.Segmenter(undefined, {granularity: 'grapheme'});\n  }\n  return segmenter;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Path to put text on.\n * @param {number} offset Start offset of the `flatCoordinates`.\n * @param {number} end End offset of the `flatCoordinates`.\n * @param {number} stride Stride.\n * @param {string} text Text to place on the path.\n * @param {number} startM m along the path where the text starts.\n * @param {number} maxAngle Max angle between adjacent chars in radians.\n * @param {number} scale The product of the text scale and the device pixel ratio.\n * @param {function(string, string, Object<string, number>):number} measureAndCacheTextWidth Measure and cache text width.\n * @param {string} font The font.\n * @param {Object<string, number>} cache A cache of measured widths.\n * @param {number} rotation Rotation to apply to the flatCoordinates to determine whether text needs to be reversed.\n * @param {boolean} keepUpright Whether the text needs to be kept upright\n * @return {Array<Array<*>>|null} The result array (or null if `maxAngle` was\n * exceeded). Entries of the array are x, y, anchorX, angle, chunk.\n */\nexport function drawTextOnPath(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  text,\n  startM,\n  maxAngle,\n  scale,\n  measureAndCacheTextWidth,\n  font,\n  cache,\n  rotation,\n  keepUpright = true,\n) {\n  let x2 = flatCoordinates[offset];\n  let y2 = flatCoordinates[offset + 1];\n  let x1 = 0;\n  let y1 = 0;\n  let segmentLength = 0;\n  let segmentM = 0;\n\n  function advance() {\n    x1 = x2;\n    y1 = y2;\n    offset += stride;\n    x2 = flatCoordinates[offset];\n    y2 = flatCoordinates[offset + 1];\n    segmentM += segmentLength;\n    segmentLength = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n  }\n  do {\n    advance();\n  } while (offset < end - stride && segmentM + segmentLength < startM);\n\n  let interpolate =\n    segmentLength === 0 ? 0 : (startM - segmentM) / segmentLength;\n  const beginX = lerp(x1, x2, interpolate);\n  const beginY = lerp(y1, y2, interpolate);\n\n  const startOffset = offset - stride;\n  const startLength = segmentM;\n  const endM = startM + scale * measureAndCacheTextWidth(font, text, cache);\n  while (offset < end - stride && segmentM + segmentLength < endM) {\n    advance();\n  }\n  interpolate = segmentLength === 0 ? 0 : (endM - segmentM) / segmentLength;\n  const endX = lerp(x1, x2, interpolate);\n  const endY = lerp(y1, y2, interpolate);\n\n  // Keep text upright if the option is selected\n  let reverse = false;\n  if (keepUpright) {\n    if (rotation) {\n      const flat = [beginX, beginY, endX, endY];\n      rotate(flat, 0, 4, 2, rotation, flat, flat);\n      reverse = flat[0] > flat[2];\n    } else {\n      reverse = beginX > endX;\n    }\n  }\n\n  const PI = Math.PI;\n  const result = [];\n  const singleSegment = startOffset + stride === offset;\n\n  offset = startOffset;\n  segmentLength = 0;\n  segmentM = startLength;\n  x2 = flatCoordinates[offset];\n  y2 = flatCoordinates[offset + 1];\n\n  let previousAngle;\n  // All on the same segment\n  if (singleSegment) {\n    advance();\n\n    previousAngle = Math.atan2(y2 - y1, x2 - x1);\n    if (reverse) {\n      previousAngle += previousAngle > 0 ? -PI : PI;\n    }\n    const x = (endX + beginX) / 2;\n    const y = (endY + beginY) / 2;\n    result[0] = [x, y, (endM - startM) / 2, previousAngle, text];\n    return result;\n  }\n\n  // rendering across line segments\n  text = text.replace(/\\n/g, ' '); // ensure rendering in single-line as all calculations below don't handle multi-lines\n\n  const segments = Array.from(getSegmenter().segment(text), (s) => s.segment);\n  for (let i = 0, ii = segments.length; i < ii;) {\n    advance();\n    let angle = Math.atan2(y2 - y1, x2 - x1);\n    if (reverse) {\n      angle += angle > 0 ? -PI : PI;\n    }\n    if (previousAngle !== undefined) {\n      let delta = angle - previousAngle;\n      delta += delta > PI ? -2 * PI : delta < -PI ? 2 * PI : 0;\n      if (Math.abs(delta) > maxAngle) {\n        return null;\n      }\n    }\n    previousAngle = angle;\n\n    const iStart = i;\n    let charLength = 0;\n    for (; i < ii; ++i) {\n      const index = reverse ? ii - i - 1 : i;\n      const len =\n        scale * measureAndCacheTextWidth(font, segments[index], cache);\n      if (\n        offset + stride < end &&\n        segmentM + segmentLength < startM + charLength + len / 2\n      ) {\n        break;\n      }\n      charLength += len;\n    }\n    if (i === iStart) {\n      continue;\n    }\n    const chars = (\n      reverse ? segments.slice(ii - i, ii - iStart) : segments.slice(iStart, i)\n    ).join('');\n    interpolate =\n      segmentLength === 0\n        ? 0\n        : (startM + charLength / 2 - segmentM) / segmentLength;\n    const x = lerp(x1, x2, interpolate);\n    const y = lerp(y1, y2, interpolate);\n    result.push([x, y, charLength / 2, angle, chars]);\n    startM += charLength;\n  }\n  return result;\n}\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array<number>} [dest] Destination.\n * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function transform2D(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  transform,\n  dest,\n  destinationStride,\n) {\n  dest = dest ? dest : [];\n  destinationStride = destinationStride ? destinationStride : 2;\n  let i = 0;\n  for (let j = offset; j < end; j += stride) {\n    const x = flatCoordinates[j];\n    const y = flatCoordinates[j + 1];\n    dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n    dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n\n    for (let k = 2; k < destinationStride; k++) {\n      dest[i++] = flatCoordinates[j + k];\n    }\n  }\n\n  if (dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array<number>} anchor Rotation anchor point.\n * @param {Array<number>} [dest] Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function rotate(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  angle,\n  anchor,\n  dest,\n) {\n  dest = dest ? dest : [];\n  const cos = Math.cos(angle);\n  const sin = Math.sin(angle);\n  const anchorX = anchor[0];\n  const anchorY = anchor[1];\n  let i = 0;\n  for (let j = offset; j < end; j += stride) {\n    const deltaX = flatCoordinates[j] - anchorX;\n    const deltaY = flatCoordinates[j + 1] - anchorY;\n    dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n    dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n    for (let k = j + 2; k < j + stride; ++k) {\n      dest[i++] = flatCoordinates[k];\n    }\n  }\n  if (dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array<number>} anchor Scale anchor point.\n * @param {Array<number>} [dest] Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function scale(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  sx,\n  sy,\n  anchor,\n  dest,\n) {\n  dest = dest ? dest : [];\n  const anchorX = anchor[0];\n  const anchorY = anchor[1];\n  let i = 0;\n  for (let j = offset; j < end; j += stride) {\n    const deltaX = flatCoordinates[j] - anchorX;\n    const deltaY = flatCoordinates[j + 1] - anchorY;\n    dest[i++] = anchorX + sx * deltaX;\n    dest[i++] = anchorY + sy * deltaY;\n    for (let k = j + 2; k < j + stride; ++k) {\n      dest[i++] = flatCoordinates[k];\n    }\n  }\n  if (dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array<number>} [dest] Destination.\n * @return {Array<number>} Transformed coordinates.\n */\nexport function translate(\n  flatCoordinates,\n  offset,\n  end,\n  stride,\n  deltaX,\n  deltaY,\n  dest,\n) {\n  dest = dest ? dest : [];\n  let i = 0;\n  for (let j = offset; j < end; j += stride) {\n    dest[i++] = flatCoordinates[j] + deltaX;\n    dest[i++] = flatCoordinates[j + 1] + deltaY;\n    for (let k = j + 2; k < j + stride; ++k) {\n      dest[i++] = flatCoordinates[k];\n    }\n  }\n  if (dest && dest.length != i) {\n    dest.length = i;\n  }\n  return dest;\n}\n","/**\n * @module ol/has\n */\n\nconst ua =\n  typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n    ? navigator.userAgent.toLowerCase()\n    : '';\n\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport const SAFARI = ua.includes('safari') && !ua.includes('chrom');\n\n/**\n * https://bugs.webkit.org/show_bug.cgi?id=237906\n * @type {boolean}\n */\nexport const SAFARI_BUG_237906 =\n  SAFARI &&\n  (ua.includes('version/15.4') ||\n    /cpu (os|iphone os) 15_4 like mac os x/.test(ua));\n\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport const WEBKIT = ua.includes('webkit') && !ua.includes('edge');\n\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport const MAC = ua.includes('macintosh');\n\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport const DEVICE_PIXEL_RATIO =\n  typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport const WORKER_OFFSCREEN_CANVAS =\n  typeof WorkerGlobalScope !== 'undefined' &&\n  typeof OffscreenCanvas !== 'undefined' &&\n  self instanceof WorkerGlobalScope; //eslint-disable-line\n\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport const IMAGE_DECODE =\n  typeof Image !== 'undefined' && Image.prototype.decode;\n\n/**\n * createImageBitmap() is supported.\n * @type {boolean}\n */\nexport const CREATE_IMAGE_BITMAP = typeof createImageBitmap === 'function';\n\n/**\n * @type {boolean}\n */\nexport const PASSIVE_EVENT_LISTENERS = (function () {\n  let passive = false;\n  try {\n    const options = Object.defineProperty({}, 'passive', {\n      get: function () {\n        passive = true;\n      },\n    });\n\n    // @ts-ignore Ignore invalid event type '_'\n    window.addEventListener('_', null, options);\n    // @ts-ignore Ignore invalid event type '_'\n    window.removeEventListener('_', null, options);\n  } catch {\n    // passive not supported\n  }\n  return passive;\n})();\n","/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    options = options ? options : {};\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.delta_ = options.delta ? options.delta : 1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 250;\n  }\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a\n   * doubleclick) and eventually zooms the map.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @override\n   */\n  handleEvent(mapBrowserEvent) {\n    let stopEvent = false;\n    if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n      const browserEvent = /** @type {MouseEvent} */ (\n        mapBrowserEvent.originalEvent\n      );\n      const map = mapBrowserEvent.map;\n      const anchor = mapBrowserEvent.coordinate;\n      const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n      const view = map.getView();\n      zoomByDelta(view, delta, anchor, this.duration_);\n      browserEvent.preventDefault();\n      stopEvent = true;\n    }\n    return !stopEvent;\n  }\n}\n\nexport default DoubleClickZoom;\n","/**\n * @module ol/interaction/DragPan\n */\nimport {\n  rotate as rotateCoordinate,\n  scale as scaleCoordinate,\n} from '../coordinate.js';\nimport {easeOut} from '../easing.js';\nimport {\n  all,\n  focusWithTabindex,\n  noModifierKeys,\n  primaryAction,\n} from '../events/condition.js';\nimport {FALSE} from '../functions.js';\nimport PointerInteraction, {\n  centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.noModifierKeys} and {@link module:ol/events/condition.primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nclass DragPan extends PointerInteraction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super({\n      stopDown: FALSE,\n    });\n\n    options = options ? options : {};\n\n    /**\n     * @private\n     * @type {import(\"../Kinetic.js\").default|undefined}\n     */\n    this.kinetic_ = options.kinetic;\n\n    /**\n     * @type {import(\"../pixel.js\").Pixel}\n     */\n    this.lastCentroid = null;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.lastPointersCount_;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.panning_ = false;\n\n    const condition = options.condition\n      ? options.condition\n      : all(noModifierKeys, primaryAction);\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ = options.onFocusOnly\n      ? all(focusWithTabindex, condition)\n      : condition;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.noKinetic_ = false;\n  }\n\n  /**\n   * Handle pointer drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @override\n   */\n  handleDragEvent(mapBrowserEvent) {\n    const map = mapBrowserEvent.map;\n    if (!this.panning_) {\n      this.panning_ = true;\n      map.getView().beginInteraction();\n    }\n    const targetPointers = this.targetPointers;\n    const centroid = map.getEventPixel(centroidFromPointers(targetPointers));\n    if (targetPointers.length == this.lastPointersCount_) {\n      if (this.kinetic_) {\n        this.kinetic_.update(centroid[0], centroid[1]);\n      }\n      if (this.lastCentroid) {\n        const delta = [\n          this.lastCentroid[0] - centroid[0],\n          centroid[1] - this.lastCentroid[1],\n        ];\n        const map = mapBrowserEvent.map;\n        const view = map.getView();\n        scaleCoordinate(delta, view.getResolution());\n        rotateCoordinate(delta, view.getRotation());\n        view.adjustCenterInternal(delta);\n      }\n    } else if (this.kinetic_) {\n      // reset so we don't overestimate the kinetic energy after\n      // after one finger down, tiny drag, second finger down\n      this.kinetic_.begin();\n    }\n    this.lastCentroid = centroid;\n    this.lastPointersCount_ = targetPointers.length;\n    mapBrowserEvent.originalEvent.preventDefault();\n  }\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleUpEvent(mapBrowserEvent) {\n    const map = mapBrowserEvent.map;\n    const view = map.getView();\n    if (this.targetPointers.length === 0) {\n      if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n        const distance = this.kinetic_.getDistance();\n        const angle = this.kinetic_.getAngle();\n        const center = view.getCenterInternal();\n        const centerpx = map.getPixelFromCoordinateInternal(center);\n        const dest = map.getCoordinateFromPixelInternal([\n          centerpx[0] - distance * Math.cos(angle),\n          centerpx[1] - distance * Math.sin(angle),\n        ]);\n        view.animateInternal({\n          center: view.getConstrainedCenter(dest),\n          duration: 500,\n          easing: easeOut,\n        });\n      }\n      if (this.panning_) {\n        this.panning_ = false;\n        view.endInteraction();\n      }\n      return false;\n    }\n    if (this.kinetic_) {\n      // reset so we don't overestimate the kinetic energy after\n      // after one finger up, tiny drag, second finger up\n      this.kinetic_.begin();\n    }\n    this.lastCentroid = null;\n    return true;\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleDownEvent(mapBrowserEvent) {\n    if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n      const map = mapBrowserEvent.map;\n      const view = map.getView();\n      this.lastCentroid = null;\n      // stop any current animation\n      if (view.getAnimating()) {\n        view.cancelAnimations();\n      }\n      if (this.kinetic_) {\n        this.kinetic_.begin();\n      }\n      // No kinetic as soon as more than one pointer on the screen is\n      // detected. This is to prevent nasty pans after pinch.\n      this.noKinetic_ = this.targetPointers.length > 1;\n      return true;\n    }\n    return false;\n  }\n}\n\nexport default DragPan;\n","/**\n * @module ol/interaction/DragRotate\n */\nimport {\n  altShiftKeysOnly,\n  mouseActionButton,\n  mouseOnly,\n} from '../events/condition.js';\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nclass DragRotate extends PointerInteraction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      stopDown: FALSE,\n    });\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.lastAngle_ = undefined;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 250;\n  }\n\n  /**\n   * Handle pointer drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @override\n   */\n  handleDragEvent(mapBrowserEvent) {\n    if (!mouseOnly(mapBrowserEvent)) {\n      return;\n    }\n\n    const map = mapBrowserEvent.map;\n    const view = map.getView();\n    if (view.getConstraints().rotation === disable) {\n      return;\n    }\n    const size = map.getSize();\n    const offset = mapBrowserEvent.pixel;\n    const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n    if (this.lastAngle_ !== undefined) {\n      const delta = theta - this.lastAngle_;\n      view.adjustRotationInternal(-delta);\n    }\n    this.lastAngle_ = theta;\n  }\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleUpEvent(mapBrowserEvent) {\n    if (!mouseOnly(mapBrowserEvent)) {\n      return true;\n    }\n\n    const map = mapBrowserEvent.map;\n    const view = map.getView();\n    view.endInteraction(this.duration_);\n    return false;\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleDownEvent(mapBrowserEvent) {\n    if (!mouseOnly(mapBrowserEvent)) {\n      return false;\n    }\n\n    if (\n      mouseActionButton(mapBrowserEvent) &&\n      this.condition_(mapBrowserEvent)\n    ) {\n      const map = mapBrowserEvent.map;\n      map.getView().beginInteraction();\n      this.lastAngle_ = undefined;\n      return true;\n    }\n    return false;\n  }\n}\n\nexport default DragRotate;\n","/**\n * @module ol/render/Box\n */\n\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\n\nclass RenderBox extends Disposable {\n  /**\n   * @param {string} className CSS class name.\n   */\n  constructor(className) {\n    super();\n\n    /**\n     * @type {import(\"../geom/Polygon.js\").default}\n     * @private\n     */\n    this.geometry_ = null;\n\n    /**\n     * @type {HTMLDivElement}\n     * @private\n     */\n    this.element_ = document.createElement('div');\n    this.element_.style.position = 'absolute';\n    this.element_.style.pointerEvents = 'auto';\n    this.element_.className = 'ol-box ' + className;\n\n    /**\n     * @private\n     * @type {import(\"../Map.js\").default|null}\n     */\n    this.map_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../pixel.js\").Pixel}\n     */\n    this.startPixel_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../pixel.js\").Pixel}\n     */\n    this.endPixel_ = null;\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.setMap(null);\n  }\n\n  /**\n   * @private\n   */\n  render_() {\n    const startPixel = this.startPixel_;\n    const endPixel = this.endPixel_;\n    const px = 'px';\n    const style = this.element_.style;\n    style.left = Math.min(startPixel[0], endPixel[0]) + px;\n    style.top = Math.min(startPixel[1], endPixel[1]) + px;\n    style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n    style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n  }\n\n  /**\n   * @param {import(\"../Map.js\").default|null} map Map.\n   */\n  setMap(map) {\n    if (this.map_) {\n      this.map_.getOverlayContainer().removeChild(this.element_);\n      const style = this.element_.style;\n      style.left = 'inherit';\n      style.top = 'inherit';\n      style.width = 'inherit';\n      style.height = 'inherit';\n    }\n    this.map_ = map;\n    if (this.map_) {\n      this.map_.getOverlayContainer().appendChild(this.element_);\n    }\n  }\n\n  /**\n   * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n   * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n   */\n  setPixels(startPixel, endPixel) {\n    this.startPixel_ = startPixel;\n    this.endPixel_ = endPixel;\n    this.createOrUpdateGeometry();\n    this.render_();\n  }\n\n  /**\n   * Creates or updates the cached geometry.\n   */\n  createOrUpdateGeometry() {\n    if (!this.map_) {\n      return;\n    }\n\n    const startPixel = this.startPixel_;\n    const endPixel = this.endPixel_;\n    const pixels = [\n      startPixel,\n      [startPixel[0], endPixel[1]],\n      endPixel,\n      [endPixel[0], startPixel[1]],\n    ];\n    const coordinates = pixels.map(\n      this.map_.getCoordinateFromPixelInternal,\n      this.map_,\n    );\n    // close the polygon\n    coordinates[4] = coordinates[0].slice();\n    if (!this.geometry_) {\n      this.geometry_ = new Polygon([coordinates]);\n    } else {\n      this.geometry_.setCoordinates([coordinates]);\n    }\n  }\n\n  /**\n   * @return {import(\"../geom/Polygon.js\").default} Geometry.\n   */\n  getGeometry() {\n    return this.geometry_;\n  }\n}\n\nexport default RenderBox;\n","/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport {mouseActionButton} from '../events/condition.js';\nimport RenderBox from '../render/Box.js';\nimport PointerInteraction from './Pointer.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n\n/**\n * @enum {string}\n */\nconst DragBoxEventType = {\n  /**\n   * Triggered upon drag box start.\n   * @event DragBoxEvent#boxstart\n   * @api\n   */\n  BOXSTART: 'boxstart',\n\n  /**\n   * Triggered on drag when box is active.\n   * @event DragBoxEvent#boxdrag\n   * @api\n   */\n  BOXDRAG: 'boxdrag',\n\n  /**\n   * Triggered upon drag box end.\n   * @event DragBoxEvent#boxend\n   * @api\n   */\n  BOXEND: 'boxend',\n\n  /**\n   * Triggered upon drag box canceled.\n   * @event DragBoxEvent#boxcancel\n   * @api\n   */\n  BOXCANCEL: 'boxcancel',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nexport class DragBoxEvent extends Event {\n  /**\n   * @param {string} type The event type.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n   */\n  constructor(type, coordinate, mapBrowserEvent) {\n    super(type);\n\n    /**\n     * The coordinate of the drag event.\n     * @const\n     * @type {import(\"../coordinate.js\").Coordinate}\n     * @api\n     */\n    this.coordinate = coordinate;\n\n    /**\n     * @const\n     * @type {import(\"../MapBrowserEvent.js\").default}\n     * @api\n     */\n    this.mapBrowserEvent = mapBrowserEvent;\n  }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types|\n *     'change:active', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<'boxcancel'|'boxdrag'|'boxend'|'boxstart', DragBoxEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n *     'change:active'|'boxcancel'|'boxdrag'|'boxend', Return>} DragBoxOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom~DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nclass DragBox extends PointerInteraction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    /***\n     * @type {DragBoxOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {DragBoxOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {DragBoxOnSignature<void>}\n     */\n    this.un;\n\n    options = options ?? {};\n\n    /**\n     * @type {import(\"../render/Box.js\").default}\n     * @private\n     */\n    this.box_ = new RenderBox(options.className || 'ol-dragbox');\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.minArea_ = options.minArea ?? 64;\n\n    if (options.onBoxEnd) {\n      this.onBoxEnd = options.onBoxEnd;\n    }\n\n    /**\n     * @type {import(\"../pixel.js\").Pixel}\n     * @private\n     */\n    this.startPixel_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ = options.condition ?? mouseActionButton;\n\n    /**\n     * @private\n     * @type {EndCondition}\n     */\n    this.boxEndCondition_ =\n      options.boxEndCondition ?? this.defaultBoxEndCondition;\n  }\n\n  /**\n   * The default condition for determining whether the boxend event\n   * should fire.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n   *     leading to the box end.\n   * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n   * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n   * @return {boolean} Whether or not the boxend condition should be fired.\n   */\n  defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) {\n    const width = endPixel[0] - startPixel[0];\n    const height = endPixel[1] - startPixel[1];\n    return width * width + height * height >= this.minArea_;\n  }\n\n  /**\n   * Returns geometry of last drawn box.\n   * @return {import(\"../geom/Polygon.js\").default} Geometry.\n   * @api\n   */\n  getGeometry() {\n    return this.box_.getGeometry();\n  }\n\n  /**\n   * Handle pointer drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @override\n   */\n  handleDragEvent(mapBrowserEvent) {\n    if (!this.startPixel_) {\n      return;\n    }\n\n    this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n\n    this.dispatchEvent(\n      new DragBoxEvent(\n        DragBoxEventType.BOXDRAG,\n        mapBrowserEvent.coordinate,\n        mapBrowserEvent,\n      ),\n    );\n  }\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleUpEvent(mapBrowserEvent) {\n    if (!this.startPixel_) {\n      return false;\n    }\n\n    const completeBox = this.boxEndCondition_(\n      mapBrowserEvent,\n      this.startPixel_,\n      mapBrowserEvent.pixel,\n    );\n    if (completeBox) {\n      this.onBoxEnd(mapBrowserEvent);\n    }\n    this.dispatchEvent(\n      new DragBoxEvent(\n        completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL,\n        mapBrowserEvent.coordinate,\n        mapBrowserEvent,\n      ),\n    );\n\n    this.box_.setMap(null);\n    this.startPixel_ = null;\n\n    return false;\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleDownEvent(mapBrowserEvent) {\n    if (this.condition_(mapBrowserEvent)) {\n      this.startPixel_ = mapBrowserEvent.pixel;\n      this.box_.setMap(mapBrowserEvent.map);\n      this.box_.setPixels(this.startPixel_, this.startPixel_);\n      this.dispatchEvent(\n        new DragBoxEvent(\n          DragBoxEventType.BOXSTART,\n          mapBrowserEvent.coordinate,\n          mapBrowserEvent,\n        ),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Function to execute just before `onboxend` is fired\n   * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n   */\n  onBoxEnd(event) {}\n\n  /**\n   * Activate or deactivate the interaction.\n   * @param {boolean} active Active.\n   * @observable\n   * @api\n   * @override\n   */\n  setActive(active) {\n    if (!active) {\n      this.box_.setMap(null);\n      if (this.startPixel_) {\n        this.dispatchEvent(\n          new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n        );\n        this.startPixel_ = null;\n      }\n    }\n\n    super.setActive(active);\n  }\n\n  /**\n   * @param {import(\"../Map.js\").default|null} map Map.\n   * @override\n   */\n  setMap(map) {\n    const oldMap = this.getMap();\n\n    if (oldMap) {\n      this.box_.setMap(null);\n\n      if (this.startPixel_) {\n        this.dispatchEvent(\n          new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n        );\n        this.startPixel_ = null;\n      }\n    }\n\n    super.setMap(map);\n  }\n}\n\nexport default DragBox;\n","/**\n * @module ol/interaction/DragZoom\n */\nimport {easeOut} from '../easing.js';\nimport {shiftKeyOnly} from '../events/condition.js';\nimport DragBox from './DragBox.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nclass DragZoom extends DragBox {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const condition = options.condition ? options.condition : shiftKeyOnly;\n\n    super({\n      condition: condition,\n      className: options.className || 'ol-dragzoom',\n      minArea: options.minArea,\n    });\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.out_ = options.out !== undefined ? options.out : false;\n  }\n\n  /**\n   * Function to execute just before `onboxend` is fired\n   * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n   * @override\n   */\n  onBoxEnd(event) {\n    const map = this.getMap();\n    const view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n    let geometry = this.getGeometry();\n\n    if (this.out_) {\n      const rotatedExtent = view.rotatedExtentForGeometry(geometry);\n      const resolution = view.getResolutionForExtentInternal(rotatedExtent);\n      const factor = view.getResolution() / resolution;\n      geometry = geometry.clone();\n      geometry.scale(factor * factor);\n    }\n\n    view.fitInternal(geometry, {\n      duration: this.duration_,\n      easing: easeOut,\n    });\n  }\n}\n\nexport default DragZoom;\n","/**\n * @module ol/geom/Circle\n */\nimport {createOrUpdate, forEachCorner, intersects} from '../extent.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {deflateCoordinate} from './flat/deflate.js';\nimport {rotate} from './flat/transform.js';\n\n/**\n * @classdesc\n * Circle geometry.\n *\n * @api\n */\nclass Circle extends SimpleGeometry {\n  /**\n   * @param {!import(\"../coordinate.js\").Coordinate} center Center.\n   *     For internal use, flat coordinates in combination with `layout` and no\n   *     `radius` are also accepted.\n   * @param {number} [radius] Radius in units of the projection.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   */\n  constructor(center, radius, layout) {\n    super();\n    if (layout !== undefined && radius === undefined) {\n      this.setFlatCoordinates(layout, center);\n    } else {\n      radius = radius ? radius : 0;\n      this.setCenterAndRadius(center, radius, layout);\n    }\n  }\n\n  /**\n   * Make a complete copy of the geometry.\n   * @return {!Circle} Clone.\n   * @api\n   * @override\n   */\n  clone() {\n    const circle = new Circle(\n      this.flatCoordinates.slice(),\n      undefined,\n      this.layout,\n    );\n    circle.applyProperties(this);\n    return circle;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n   * @param {number} minSquaredDistance Minimum squared distance.\n   * @return {number} Minimum squared distance.\n   * @override\n   */\n  closestPointXY(x, y, closestPoint, minSquaredDistance) {\n    const flatCoordinates = this.flatCoordinates;\n    const dx = x - flatCoordinates[0];\n    const dy = y - flatCoordinates[1];\n    const squaredDistance = dx * dx + dy * dy;\n    if (squaredDistance < minSquaredDistance) {\n      if (squaredDistance === 0) {\n        for (let i = 0; i < this.stride; ++i) {\n          closestPoint[i] = flatCoordinates[i];\n        }\n      } else {\n        const delta = this.getRadius() / Math.sqrt(squaredDistance);\n        closestPoint[0] = flatCoordinates[0] + delta * dx;\n        closestPoint[1] = flatCoordinates[1] + delta * dy;\n        for (let i = 2; i < this.stride; ++i) {\n          closestPoint[i] = flatCoordinates[i];\n        }\n      }\n      closestPoint.length = this.stride;\n      return squaredDistance;\n    }\n    return minSquaredDistance;\n  }\n\n  /**\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @return {boolean} Contains (x, y).\n   * @override\n   */\n  containsXY(x, y) {\n    const flatCoordinates = this.flatCoordinates;\n    const dx = x - flatCoordinates[0];\n    const dy = y - flatCoordinates[1];\n    return dx * dx + dy * dy <= this.getRadiusSquared_();\n  }\n\n  /**\n   * Return the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.\n   * @return {import(\"../coordinate.js\").Coordinate} Center.\n   * @api\n   */\n  getCenter() {\n    return this.flatCoordinates.slice(0, this.stride);\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @protected\n   * @return {import(\"../extent.js\").Extent} extent Extent.\n   * @override\n   */\n  computeExtent(extent) {\n    const flatCoordinates = this.flatCoordinates;\n    const radius = flatCoordinates[this.stride] - flatCoordinates[0];\n    return createOrUpdate(\n      flatCoordinates[0] - radius,\n      flatCoordinates[1] - radius,\n      flatCoordinates[0] + radius,\n      flatCoordinates[1] + radius,\n      extent,\n    );\n  }\n\n  /**\n   * Return the radius of the circle.\n   * @return {number} Radius.\n   * @api\n   */\n  getRadius() {\n    return Math.sqrt(this.getRadiusSquared_());\n  }\n\n  /**\n   * @private\n   * @return {number} Radius squared.\n   */\n  getRadiusSquared_() {\n    const dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0];\n    const dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];\n    return dx * dx + dy * dy;\n  }\n\n  /**\n   * Get the type of this geometry.\n   * @return {import(\"./Geometry.js\").Type} Geometry type.\n   * @api\n   * @override\n   */\n  getType() {\n    return 'Circle';\n  }\n\n  /**\n   * Test if the geometry and the passed extent intersect.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {boolean} `true` if the geometry and the extent intersect.\n   * @api\n   * @override\n   */\n  intersectsExtent(extent) {\n    const circleExtent = this.getExtent();\n    if (intersects(extent, circleExtent)) {\n      const center = this.getCenter();\n\n      if (extent[0] <= center[0] && extent[2] >= center[0]) {\n        return true;\n      }\n      if (extent[1] <= center[1] && extent[3] >= center[1]) {\n        return true;\n      }\n\n      return forEachCorner(extent, this.intersectsCoordinate.bind(this));\n    }\n    return false;\n  }\n\n  /**\n   * Set the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.\n   * @param {import(\"../coordinate.js\").Coordinate} center Center.\n   * @api\n   */\n  setCenter(center) {\n    const stride = this.stride;\n    const radius = this.flatCoordinates[stride] - this.flatCoordinates[0];\n    const flatCoordinates = center.slice();\n    flatCoordinates[stride] = flatCoordinates[0] + radius;\n    for (let i = 1; i < stride; ++i) {\n      flatCoordinates[stride + i] = center[i];\n    }\n    this.setFlatCoordinates(this.layout, flatCoordinates);\n    this.changed();\n  }\n\n  /**\n   * Set the center (as {@link module:ol/coordinate~Coordinate coordinate}) and the radius (as\n   * number) of the circle.\n   * @param {!import(\"../coordinate.js\").Coordinate} center Center.\n   * @param {number} radius Radius.\n   * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n   * @api\n   */\n  setCenterAndRadius(center, radius, layout) {\n    this.setLayout(layout, center, 0);\n    if (!this.flatCoordinates) {\n      this.flatCoordinates = [];\n    }\n    /** @type {Array<number>} */\n    const flatCoordinates = this.flatCoordinates;\n    let offset = deflateCoordinate(flatCoordinates, 0, center, this.stride);\n    flatCoordinates[offset++] = flatCoordinates[0] + radius;\n    for (let i = 1, ii = this.stride; i < ii; ++i) {\n      flatCoordinates[offset++] = flatCoordinates[i];\n    }\n    flatCoordinates.length = offset;\n    this.changed();\n  }\n\n  /**\n   * @override\n   */\n  getCoordinates() {\n    return null;\n  }\n\n  /**\n   * @override\n   */\n  setCoordinates(coordinates, layout) {}\n\n  /**\n   * Set the radius of the circle. The radius is in the units of the projection.\n   * @param {number} radius Radius.\n   * @api\n   */\n  setRadius(radius) {\n    this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;\n    this.changed();\n  }\n\n  /**\n   * Rotate the geometry around a given coordinate. This modifies the geometry\n   * coordinates in place.\n   * @param {number} angle Rotation angle in counter-clockwise radians.\n   * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n   * @api\n   * @override\n   */\n  rotate(angle, anchor) {\n    const center = this.getCenter();\n    const stride = this.getStride();\n    this.setCenter(\n      rotate(center, 0, center.length, stride, angle, anchor, center),\n    );\n    this.changed();\n  }\n}\n\n/**\n * Transform each coordinate of the circle from one coordinate reference system\n * to another. The geometry is modified in place.\n * If you do not want the geometry modified in place, first clone() it and\n * then use this function on the clone.\n *\n * Internally a circle is currently represented by two points: the center of\n * the circle `[cx, cy]`, and the point to the right of the circle\n * `[cx + r, cy]`. This `transform` function just transforms these two points.\n * So the resulting geometry is also a circle, and that circle does not\n * correspond to the shape that would be obtained by transforming every point\n * of the original circle.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection.  Can be a\n *     string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection.  Can be a\n *     string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {Circle} This geometry.  Note that original geometry is\n *     modified in place.\n * @function\n * @api\n */\nCircle.prototype.transform;\nexport default Circle;\n","/**\n * @module ol/interaction/Draw\n */\nimport Feature from '../Feature.js';\nimport MapBrowserEvent from '../MapBrowserEvent.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {\n  distance,\n  squaredDistance as squaredCoordinateDistance,\n} from '../coordinate.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {\n  always,\n  never,\n  noModifierKeys,\n  shiftKeyOnly,\n} from '../events/condition.js';\nimport {\n  boundingExtent,\n  getBottomLeft,\n  getBottomRight,\n  getTopLeft,\n  getTopRight,\n} from '../extent.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport Circle from '../geom/Circle.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon, {fromCircle, makeRegular} from '../geom/Polygon.js';\nimport {getStrideForLayout} from '../geom/SimpleGeometry.js';\nimport VectorLayer from '../layer/Vector.js';\nimport {fromUserCoordinate, getUserProjection} from '../proj.js';\nimport VectorSource from '../source/Vector.js';\nimport {createEditingStyle} from '../style/Style.js';\nimport PointerInteraction from './Pointer.js';\nimport InteractionProperty from './Property.js';\nimport {\n  getCoordinate,\n  getTraceTargetUpdate,\n  getTraceTargets,\n  interpolateCoordinate,\n} from './tracing.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../geom/Geometry.js\").Type} type Geometry type of\n * the geometries being drawn with this instance.\n * @property {number} [clickTolerance=6] The maximum distance in pixels between\n * \"down\" and \"up\" for a \"up\" event to be considered a \"click\" event and\n * actually add a point/vertex to the geometry being drawn.  The default of `6`\n * was chosen for the draw interaction to behave correctly on mouse as well as\n * on touch devices.\n * @property {import(\"../Collection.js\").default<Feature>} [features]\n * Destination collection for the drawn features.\n * @property {VectorSource} [source] Destination source for\n * the drawn features.\n * @property {number} [dragVertexDelay=500] Delay in milliseconds after pointerdown\n * before the current vertex can be dragged to its exact position.\n * @property {number} [snapTolerance=12] Pixel distance for snapping to the\n * drawing finish. Must be greater than `0`.\n * @property {boolean} [stopClick=false] Stop click, singleclick, and\n * doubleclick events from firing during drawing.\n * @property {number} [maxPoints] The number of points that can be drawn before\n * a polygon ring or line string is finished. By default there is no\n * restriction.\n * @property {number} [minPoints] The number of points that must be drawn\n * before a polygon ring or line string can be finished. Default is `3` for\n * polygon rings and `2` for line strings.\n * @property {import(\"../events/condition.js\").Condition} [finishCondition] A function\n * that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether the drawing can be finished. Not used when drawing\n * POINT or MULTI_POINT geometries.\n * @property {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike} [style]\n * Style for sketch features. The draw interaction can have up to three sketch features, depending on the mode.\n * It will always contain a feature with a `Point` geometry that corresponds to the current cursor position.\n * If the mode is `LineString` or `Polygon`, and there is at least one drawn point, it will also contain a feature with\n * a `LineString` geometry that corresponds to the line between the already drawn points and the current cursor position.\n * If the mode is `Polygon`, and there is at least one drawn point, it will also contain a feature with a `Polygon`\n * geometry that corresponds to the polygon between the already drawn points and the current cursor position\n * (note that this polygon has only two points if only one point is drawn).\n * If the mode is `Circle`, and there is one point drawn, it will also contain a feature with a `Circle` geometry whose\n * center is the drawn point and the radius is determined by the distance between the drawn point and the cursor.\n * @property {GeometryFunction} [geometryFunction]\n * Function that is called when a geometry's coordinates are updated.\n * @property {string} [geometryName] Geometry name to use for features created\n * by the draw interaction.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * By default {@link module:ol/events/condition.noModifierKeys}, i.e. a click,\n * adds a vertex or deactivates freehand drawing.\n * @property {boolean} [freehand=false] Operate in freehand mode for lines,\n * polygons, and circles.  This makes the interaction always operate in freehand\n * mode and takes precedence over any `freehandCondition` option.\n * @property {import(\"../events/condition.js\").Condition} [freehandCondition]\n * Condition that activates freehand drawing for lines and polygons. This\n * function takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and\n * returns a boolean to indicate whether that event should be handled. The\n * default is {@link module:ol/events/condition.shiftKeyOnly}, meaning that the\n * Shift key activates freehand drawing.\n * @property {boolean|import(\"../events/condition.js\").Condition} [trace=false] Trace a portion of another geometry.\n * Ignored when in freehand mode.\n * @property {VectorSource} [traceSource] Source for features to trace.  If tracing is active and a `traceSource` is\n * not provided, the interaction's `source` will be used.  Tracing requires that the interaction is configured with\n * either a `traceSource` or a `source`.\n * @property {boolean} [wrapX=false] Wrap the world horizontally on the sketch\n * overlay.\n * @property {import(\"../geom/Geometry.js\").GeometryLayout} [geometryLayout='XY'] Layout of the\n * feature geometries created by the draw interaction.\n */\n\n/**\n * Coordinate type when drawing points.\n * @typedef {import(\"../coordinate.js\").Coordinate} PointCoordType\n */\n\n/**\n * @typedef {import('./tracing.js').LineCoordType} LineCoordType\n */\n\n/**\n * Coordinate type when drawing polygons.\n * @typedef {Array<Array<import(\"../coordinate.js\").Coordinate>>} PolyCoordType\n */\n\n/**\n * Types used for drawing coordinates.\n * @typedef {PointCoordType|LineCoordType|PolyCoordType} SketchCoordType\n */\n\n/** @typedef {import('./tracing.js').TraceState} TraceState */\n\n/** @typedef {import('./tracing.js').TraceTarget} TraceTarget */\n\n/**\n * Function that takes an array of coordinates and an optional existing geometry\n * and a projection as arguments, and returns a geometry. The optional existing\n * geometry is the geometry that is returned when the function is called without\n * a second argument.\n * @typedef {function(!SketchCoordType, import(\"../geom/SimpleGeometry.js\").default,\n *     import(\"../proj/Projection.js\").default):\n *     import(\"../geom/SimpleGeometry.js\").default} GeometryFunction\n */\n\n/**\n * @typedef {'Point' | 'LineString' | 'Polygon' | 'Circle'} Mode\n * Draw mode.  This collapses multi-part geometry types with their single-part\n * cousins.\n */\n\n/**\n * @enum {string}\n */\nconst DrawEventType = {\n  /**\n   * Triggered upon feature draw start\n   * @event DrawEvent#drawstart\n   * @api\n   */\n  DRAWSTART: 'drawstart',\n  /**\n   * Triggered upon feature draw end\n   * @event DrawEvent#drawend\n   * @api\n   */\n  DRAWEND: 'drawend',\n  /**\n   * Triggered upon feature draw abortion\n   * @event DrawEvent#drawabort\n   * @api\n   */\n  DRAWABORT: 'drawabort',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Draw~Draw} instances are\n * instances of this type.\n */\nexport class DrawEvent extends Event {\n  /**\n   * @param {DrawEventType} type Type.\n   * @param {Feature} feature The feature drawn.\n   */\n  constructor(type, feature) {\n    super(type);\n\n    /**\n     * The feature being drawn.\n     * @type {Feature}\n     * @api\n     */\n    this.feature = feature;\n  }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types|\n *     'change:active', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<'drawabort'|'drawend'|'drawstart', DrawEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n *     'change:active'|'drawabort'|'drawend'|'drawstart', Return>} DrawOnSignature\n */\n\n/**\n * @classdesc\n * Interaction for drawing feature geometries.\n *\n * @fires DrawEvent\n * @api\n */\nclass Draw extends PointerInteraction {\n  /**\n   * @param {Options} options Options.\n   */\n  constructor(options) {\n    const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n      options\n    );\n    if (!pointerOptions.stopDown) {\n      pointerOptions.stopDown = FALSE;\n    }\n\n    super(pointerOptions);\n\n    /***\n     * @type {DrawOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {DrawOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {DrawOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @type {Options}\n     * @private\n     */\n    this.options_ = options;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.shouldHandle_ = false;\n\n    /**\n     * @type {import(\"../pixel.js\").Pixel}\n     * @private\n     */\n    this.downPx_ = null;\n\n    /**\n     * @type {ReturnType<typeof setTimeout>}\n     * @private\n     */\n    this.downTimeout_;\n\n    /**\n     * @type {number|undefined}\n     * @private\n     */\n    this.lastDragTime_;\n\n    /**\n     * Pointer type of the last pointermove event\n     * @type {string}\n     * @private\n     */\n    this.pointerType_;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.freehand_ = false;\n\n    /**\n     * Target source for drawn features.\n     * @type {VectorSource|null}\n     * @private\n     */\n    this.source_ = options.source ? options.source : null;\n\n    /**\n     * Target collection for drawn features.\n     * @type {import(\"../Collection.js\").default<Feature>|null}\n     * @private\n     */\n    this.features_ = options.features ? options.features : null;\n\n    /**\n     * Pixel distance for snapping.\n     * @type {number}\n     * @private\n     */\n    this.snapTolerance_ = options.snapTolerance ? options.snapTolerance : 12;\n\n    /**\n     * Geometry type.\n     * @type {import(\"../geom/Geometry.js\").Type}\n     * @private\n     */\n    this.type_ = /** @type {import(\"../geom/Geometry.js\").Type} */ (\n      options.type\n    );\n\n    /**\n     * Drawing mode (derived from geometry type.\n     * @type {Mode}\n     * @private\n     */\n    this.mode_ = getMode(this.type_);\n\n    /**\n     * Stop click, singleclick, and doubleclick events from firing during drawing.\n     * Default is `false`.\n     * @type {boolean}\n     * @private\n     */\n    this.stopClick_ = !!options.stopClick;\n\n    /**\n     * Ignore the next up event. This is set to `true` when a drag event is encountered,\n     * e.g. when the user pans the map while drawing. In this case, we do not want to bail\n     * out of tracing.\n     * @type {boolean}\n     * @private\n     */\n    this.ignoreNextUpEvent_ = false;\n\n    /**\n     * The number of points that must be drawn before a polygon ring or line\n     * string can be finished.  The default is 3 for polygon rings and 2 for\n     * line strings.\n     * @type {number}\n     * @private\n     */\n    this.minPoints_ = options.minPoints\n      ? options.minPoints\n      : this.mode_ === 'Polygon'\n        ? 3\n        : 2;\n\n    /**\n     * The number of points that can be drawn before a polygon ring or line string\n     * is finished. The default is no restriction.\n     * @type {number}\n     * @private\n     */\n    this.maxPoints_ =\n      this.mode_ === 'Circle'\n        ? 2\n        : options.maxPoints\n          ? options.maxPoints\n          : Infinity;\n\n    /**\n     * A function to decide if a potential finish coordinate is permissible\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.finishCondition_ = options.finishCondition\n      ? options.finishCondition\n      : TRUE;\n\n    /**\n     * @private\n     * @type {import(\"../geom/Geometry.js\").GeometryLayout}\n     */\n    this.geometryLayout_ = options.geometryLayout\n      ? options.geometryLayout\n      : 'XY';\n\n    let geometryFunction = options.geometryFunction;\n    if (!geometryFunction) {\n      const mode = this.mode_;\n      if (mode === 'Circle') {\n        /**\n         * @param {!LineCoordType} coordinates The coordinates.\n         * @param {import(\"../geom/SimpleGeometry.js\").default|undefined} geometry Optional geometry.\n         * @param {import(\"../proj/Projection.js\").default} projection The view projection.\n         * @return {import(\"../geom/SimpleGeometry.js\").default} A geometry.\n         */\n        geometryFunction = (coordinates, geometry, projection) => {\n          const circle = geometry\n            ? /** @type {Circle} */ (geometry)\n            : new Circle([NaN, NaN]);\n          const center = fromUserCoordinate(coordinates[0], projection);\n          const squaredLength = squaredCoordinateDistance(\n            center,\n            fromUserCoordinate(coordinates[coordinates.length - 1], projection),\n          );\n          circle.setCenterAndRadius(\n            center,\n            Math.sqrt(squaredLength),\n            this.geometryLayout_,\n          );\n          const userProjection = getUserProjection();\n          if (userProjection) {\n            circle.transform(projection, userProjection);\n          }\n          return circle;\n        };\n      } else {\n        let Constructor;\n        if (mode === 'Point') {\n          Constructor = Point;\n        } else if (mode === 'LineString') {\n          Constructor = LineString;\n        } else if (mode === 'Polygon') {\n          Constructor = Polygon;\n        }\n        /**\n         * @param {!LineCoordType} coordinates The coordinates.\n         * @param {import(\"../geom/SimpleGeometry.js\").default|undefined} geometry Optional geometry.\n         * @param {import(\"../proj/Projection.js\").default} projection The view projection.\n         * @return {import(\"../geom/SimpleGeometry.js\").default} A geometry.\n         */\n        geometryFunction = (coordinates, geometry, projection) => {\n          if (geometry) {\n            if (mode === 'Polygon') {\n              if (coordinates[0].length) {\n                // Add a closing coordinate to match the first\n                geometry.setCoordinates(\n                  [coordinates[0].concat([coordinates[0][0]])],\n                  this.geometryLayout_,\n                );\n              } else {\n                geometry.setCoordinates([], this.geometryLayout_);\n              }\n            } else {\n              geometry.setCoordinates(coordinates, this.geometryLayout_);\n            }\n          } else {\n            geometry = new Constructor(coordinates, this.geometryLayout_);\n          }\n          return geometry;\n        };\n      }\n    }\n\n    /**\n     * @type {GeometryFunction}\n     * @private\n     */\n    this.geometryFunction_ = geometryFunction;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.dragVertexDelay_ =\n      options.dragVertexDelay !== undefined ? options.dragVertexDelay : 500;\n\n    /**\n     * Finish coordinate for the feature (first point for polygons, last point for\n     * linestrings).\n     * @type {import(\"../coordinate.js\").Coordinate}\n     * @private\n     */\n    this.finishCoordinate_ = null;\n\n    /**\n     * Sketch feature.\n     * @type {Feature<import('../geom/SimpleGeometry.js').default>}\n     * @private\n     */\n    this.sketchFeature_ = null;\n\n    /**\n     * Sketch point.\n     * @type {Feature<Point>}\n     * @private\n     */\n    this.sketchPoint_ = null;\n\n    /**\n     * Sketch coordinates. Used when drawing a line or polygon.\n     * @type {SketchCoordType}\n     * @private\n     */\n    this.sketchCoords_ = null;\n\n    /**\n     * Sketch line. Used when drawing polygon.\n     * @type {Feature<LineString>}\n     * @private\n     */\n    this.sketchLine_ = null;\n\n    /**\n     * Sketch line coordinates. Used when drawing a polygon or circle.\n     * @type {LineCoordType}\n     * @private\n     */\n    this.sketchLineCoords_ = null;\n\n    /**\n     * Squared tolerance for handling up events.  If the squared distance\n     * between a down and up event is greater than this tolerance, up events\n     * will not be handled.\n     * @type {number}\n     * @private\n     */\n    this.squaredClickTolerance_ = options.clickTolerance\n      ? options.clickTolerance * options.clickTolerance\n      : 36;\n\n    /**\n     * Draw overlay where our sketch features are drawn.\n     * @type {VectorLayer}\n     * @private\n     */\n    this.overlay_ = new VectorLayer({\n      source: new VectorSource({\n        useSpatialIndex: false,\n        wrapX: options.wrapX ? options.wrapX : false,\n      }),\n      style: options.style ? options.style : getDefaultStyleFunction(),\n      updateWhileInteracting: true,\n    });\n\n    /**\n     * Name of the geometry attribute for newly created features.\n     * @type {string|undefined}\n     * @private\n     */\n    this.geometryName_ = options.geometryName;\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ = options.condition ? options.condition : noModifierKeys;\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.freehandCondition_;\n    if (options.freehand) {\n      this.freehandCondition_ = always;\n    } else {\n      this.freehandCondition_ = options.freehandCondition\n        ? options.freehandCondition\n        : shiftKeyOnly;\n    }\n\n    /**\n     * @type {import(\"../events/condition.js\").Condition}\n     * @private\n     */\n    this.traceCondition_;\n    this.setTrace(options.trace || false);\n\n    /**\n     * @type {TraceState}\n     * @private\n     */\n    this.traceState_ = {active: false};\n\n    /**\n     * @type {VectorSource|null}\n     * @private\n     */\n    this.traceSource_ = options.traceSource || options.source || null;\n\n    this.addChangeListener(InteractionProperty.ACTIVE, this.updateState_);\n  }\n\n  /**\n   * Toggle tracing mode or set a tracing condition.\n   *\n   * @param {boolean|import(\"../events/condition.js\").Condition} trace A boolean to toggle tracing mode or an event\n   *     condition that will be checked when a feature is clicked to determine if tracing should be active.\n   */\n  setTrace(trace) {\n    let condition;\n    if (!trace) {\n      condition = never;\n    } else if (trace === true) {\n      condition = always;\n    } else {\n      condition = trace;\n    }\n    this.traceCondition_ = condition;\n  }\n\n  /**\n   * Remove the interaction from its current map and attach it to the new map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {import(\"../Map.js\").default} map Map.\n   * @override\n   */\n  setMap(map) {\n    super.setMap(map);\n    this.updateState_();\n  }\n\n  /**\n   * Set whether the drawing is done in freehand mode.\n   *\n   * @param {boolean} freehand Freehand drawing.\n   * @api\n   */\n  setFreehand(freehand) {\n    this.freehand_ = freehand;\n    if (this.freehand_) {\n      this.freehandCondition_ = always;\n    } else {\n      this.freehandCondition_ =\n        this.options_ && this.options_.freehandCondition\n          ? this.options_.freehandCondition\n          : shiftKeyOnly;\n    }\n  }\n\n  /**\n   * Get the overlay layer that this interaction renders sketch features to.\n   * @return {VectorLayer} Overlay layer.\n   * @api\n   */\n  getOverlay() {\n    return this.overlay_;\n  }\n\n  /**\n   * Get if this interaction is in freehand mode.\n   * @return {boolean} Freehand drawing.\n   * @api\n   */\n  getFreehand() {\n    return this.freehand_;\n  }\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may actually draw or finish the drawing.\n   * @param {import(\"../MapBrowserEvent.js\").default<PointerEvent>} event Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @api\n   * @override\n   */\n  handleEvent(event) {\n    if (event.originalEvent.type === EventType.CONTEXTMENU) {\n      // Avoid context menu for long taps when drawing on mobile\n      event.originalEvent.preventDefault();\n    }\n    this.freehand_ = this.mode_ !== 'Point' && this.freehandCondition_(event);\n    let move = event.type === MapBrowserEventType.POINTERMOVE;\n    let pass = true;\n    if (\n      !this.freehand_ &&\n      this.lastDragTime_ &&\n      event.type === MapBrowserEventType.POINTERDRAG\n    ) {\n      const now = Date.now();\n      if (now - this.lastDragTime_ >= this.dragVertexDelay_) {\n        this.downPx_ = event.pixel;\n        this.shouldHandle_ = !this.freehand_;\n        move = true;\n      } else {\n        this.lastDragTime_ = undefined;\n      }\n      if (this.shouldHandle_ && this.downTimeout_ !== undefined) {\n        clearTimeout(this.downTimeout_);\n        this.downTimeout_ = undefined;\n      }\n    }\n    if (\n      this.freehand_ &&\n      event.type === MapBrowserEventType.POINTERDRAG &&\n      this.sketchFeature_ !== null\n    ) {\n      this.addToDrawing_(event.coordinate);\n      pass = false;\n    } else if (\n      this.freehand_ &&\n      event.type === MapBrowserEventType.POINTERDOWN\n    ) {\n      pass = false;\n    } else if (move && this.getPointerCount() < 2) {\n      pass = event.type === MapBrowserEventType.POINTERMOVE;\n      if (pass && this.freehand_) {\n        this.handlePointerMove_(event);\n        if (this.shouldHandle_) {\n          // Avoid page scrolling when freehand drawing on mobile\n          event.originalEvent.preventDefault();\n        }\n      } else if (\n        event.originalEvent.pointerType === 'mouse' ||\n        (event.type === MapBrowserEventType.POINTERDRAG &&\n          this.downTimeout_ === undefined)\n      ) {\n        this.handlePointerMove_(event);\n      }\n    } else if (event.type === MapBrowserEventType.DBLCLICK) {\n      pass = false;\n    }\n\n    return super.handleEvent(event) && pass;\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default<PointerEvent>} event Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleDownEvent(event) {\n    this.shouldHandle_ = !this.freehand_;\n\n    if (this.freehand_) {\n      this.downPx_ = event.pixel;\n      if (!this.finishCoordinate_) {\n        this.startDrawing_(event.coordinate);\n      }\n      return true;\n    }\n\n    if (!this.condition_(event)) {\n      this.lastDragTime_ = undefined;\n      return false;\n    }\n\n    this.lastDragTime_ = Date.now();\n    this.downTimeout_ = setTimeout(() => {\n      this.handlePointerMove_(\n        new MapBrowserEvent(\n          MapBrowserEventType.POINTERMOVE,\n          event.map,\n          event.originalEvent,\n          false,\n          event.frameState,\n        ),\n      );\n    }, this.dragVertexDelay_);\n    this.downPx_ = event.pixel;\n    return true;\n  }\n\n  /**\n   * @private\n   */\n  deactivateTrace_() {\n    this.traceState_ = {active: false};\n  }\n\n  /**\n   * Activate or deactivate trace state based on a browser event.\n   * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n   * @private\n   */\n  toggleTraceState_(event) {\n    if (!this.traceSource_ || !this.traceCondition_(event)) {\n      return;\n    }\n\n    if (this.traceState_.active) {\n      this.deactivateTrace_();\n      return;\n    }\n\n    const map = this.getMap();\n    const lowerLeft = map.getCoordinateFromPixel([\n      event.pixel[0] - this.snapTolerance_,\n      event.pixel[1] + this.snapTolerance_,\n    ]);\n    const upperRight = map.getCoordinateFromPixel([\n      event.pixel[0] + this.snapTolerance_,\n      event.pixel[1] - this.snapTolerance_,\n    ]);\n    const extent = boundingExtent([lowerLeft, upperRight]);\n    const features = this.traceSource_.getFeaturesInExtent(extent);\n    if (features.length === 0) {\n      return;\n    }\n\n    const targets = getTraceTargets(event.coordinate, features);\n    if (targets.length) {\n      this.traceState_ = {\n        active: true,\n        startCoord: event.coordinate.slice(),\n        targets: targets,\n        targetIndex: -1,\n      };\n    }\n  }\n\n  /**\n   * @param {TraceTarget} target The trace target.\n   * @param {number} endIndex The new end index of the trace.\n   * @private\n   */\n  addOrRemoveTracedCoordinates_(target, endIndex) {\n    // three cases to handle:\n    //  1. traced in the same direction and points need adding\n    //  2. traced in the same direction and points need removing\n    //  3. traced in a new direction\n    const previouslyForward = target.startIndex <= target.endIndex;\n    const currentlyForward = target.startIndex <= endIndex;\n    if (previouslyForward === currentlyForward) {\n      // same direction\n      if (\n        (previouslyForward && endIndex > target.endIndex) ||\n        (!previouslyForward && endIndex < target.endIndex)\n      ) {\n        // case 1 - add new points\n        this.addTracedCoordinates_(target, target.endIndex, endIndex);\n      } else if (\n        (previouslyForward && endIndex < target.endIndex) ||\n        (!previouslyForward && endIndex > target.endIndex)\n      ) {\n        // case 2 - remove old points\n        this.removeTracedCoordinates_(endIndex, target.endIndex);\n      }\n    } else {\n      // case 3 - remove old points, add new points\n      this.removeTracedCoordinates_(target.startIndex, target.endIndex);\n      this.addTracedCoordinates_(target, target.startIndex, endIndex);\n    }\n  }\n\n  /**\n   * @param {number} fromIndex The start index.\n   * @param {number} toIndex The end index.\n   * @private\n   */\n  removeTracedCoordinates_(fromIndex, toIndex) {\n    if (fromIndex === toIndex) {\n      return;\n    }\n\n    let remove = 0;\n    if (fromIndex < toIndex) {\n      const start = Math.ceil(fromIndex);\n      let end = Math.floor(toIndex);\n      if (end === toIndex) {\n        end -= 1;\n      }\n      remove = end - start + 1;\n    } else {\n      const start = Math.floor(fromIndex);\n      let end = Math.ceil(toIndex);\n      if (end === toIndex) {\n        end += 1;\n      }\n      remove = start - end + 1;\n    }\n\n    if (remove > 0) {\n      this.removeLastPoints_(remove);\n    }\n  }\n\n  /**\n   * @param {TraceTarget} target The trace target.\n   * @param {number} fromIndex The start index.\n   * @param {number} toIndex The end index.\n   * @private\n   */\n  addTracedCoordinates_(target, fromIndex, toIndex) {\n    if (fromIndex === toIndex) {\n      return;\n    }\n\n    const coordinates = [];\n    if (fromIndex < toIndex) {\n      // forward trace\n      const start = Math.ceil(fromIndex);\n      let end = Math.floor(toIndex);\n      if (end === toIndex) {\n        // if end is snapped to a vertex, it will be added later\n        end -= 1;\n      }\n      for (let i = start; i <= end; ++i) {\n        coordinates.push(getCoordinate(target.coordinates, i));\n      }\n    } else {\n      // reverse trace\n      const start = Math.floor(fromIndex);\n      let end = Math.ceil(toIndex);\n      if (end === toIndex) {\n        end += 1;\n      }\n      for (let i = start; i >= end; --i) {\n        coordinates.push(getCoordinate(target.coordinates, i));\n      }\n    }\n    if (coordinates.length) {\n      this.appendCoordinates(coordinates);\n    }\n  }\n\n  /**\n   * Update the trace.\n   * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n   * @private\n   */\n  updateTrace_(event) {\n    const traceState = this.traceState_;\n    if (!traceState.active) {\n      return;\n    }\n\n    if (traceState.targetIndex === -1) {\n      // check if we are ready to pick a target\n      const startPx = event.map.getPixelFromCoordinate(traceState.startCoord);\n      if (distance(startPx, event.pixel) < this.snapTolerance_) {\n        return;\n      }\n    }\n\n    const updatedTraceTarget = getTraceTargetUpdate(\n      event.coordinate,\n      traceState,\n      this.getMap(),\n      this.snapTolerance_,\n    );\n\n    if (traceState.targetIndex !== updatedTraceTarget.index) {\n      // target changed\n      if (traceState.targetIndex !== -1) {\n        // remove points added during previous trace\n        const oldTarget = traceState.targets[traceState.targetIndex];\n        this.removeTracedCoordinates_(oldTarget.startIndex, oldTarget.endIndex);\n      }\n      // add points for the new target\n      const newTarget = traceState.targets[updatedTraceTarget.index];\n      this.addTracedCoordinates_(\n        newTarget,\n        newTarget.startIndex,\n        updatedTraceTarget.endIndex,\n      );\n    } else {\n      // target stayed the same\n      const target = traceState.targets[traceState.targetIndex];\n      this.addOrRemoveTracedCoordinates_(target, updatedTraceTarget.endIndex);\n    }\n\n    // modify the state with updated info\n    traceState.targetIndex = updatedTraceTarget.index;\n    const target = traceState.targets[traceState.targetIndex];\n    target.endIndex = updatedTraceTarget.endIndex;\n\n    // update event coordinate and pixel to match end point of final segment\n    const coordinate = interpolateCoordinate(\n      target.coordinates,\n      target.endIndex,\n    );\n    const pixel = this.getMap().getPixelFromCoordinate(coordinate);\n    event.coordinate = coordinate;\n    event.pixel = [Math.round(pixel[0]), Math.round(pixel[1])];\n  }\n\n  /**\n   * Handle drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default<PointerEvent>} event Event.\n   * @override\n   */\n  handleDragEvent(event) {\n    this.ignoreNextUpEvent_ = true;\n    super.handleDragEvent(event);\n  }\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default<PointerEvent>} event Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleUpEvent(event) {\n    let pass = true;\n\n    if (this.getPointerCount() === 0) {\n      if (this.downTimeout_) {\n        clearTimeout(this.downTimeout_);\n        this.downTimeout_ = undefined;\n      }\n\n      this.handlePointerMove_(event);\n      const tracing = this.traceState_.active;\n      if (!this.ignoreNextUpEvent_) {\n        this.toggleTraceState_(event);\n      }\n\n      if (this.shouldHandle_) {\n        const startingToDraw = !this.finishCoordinate_;\n        if (startingToDraw) {\n          this.startDrawing_(event.coordinate);\n        }\n        if (!startingToDraw && this.freehand_) {\n          this.finishDrawing();\n        } else if (\n          !this.freehand_ &&\n          (!startingToDraw || this.mode_ === 'Point')\n        ) {\n          if (this.atFinish_(event.pixel, tracing)) {\n            if (this.finishCondition_(event)) {\n              this.finishDrawing();\n            }\n          } else {\n            this.addToDrawing_(event.coordinate);\n          }\n        }\n        pass = false;\n      } else if (this.freehand_) {\n        this.abortDrawing();\n      }\n    }\n    this.ignoreNextUpEvent_ = false;\n\n    if (!pass && this.stopClick_) {\n      event.preventDefault();\n    }\n    return pass;\n  }\n\n  /**\n   * Handle move events.\n   * @param {import(\"../MapBrowserEvent.js\").default<PointerEvent>} event A move event.\n   * @private\n   */\n  handlePointerMove_(event) {\n    this.pointerType_ = event.originalEvent.pointerType;\n    if (\n      this.downPx_ &&\n      ((!this.freehand_ && this.shouldHandle_) ||\n        (this.freehand_ && !this.shouldHandle_))\n    ) {\n      const downPx = this.downPx_;\n      const clickPx = event.pixel;\n      const dx = downPx[0] - clickPx[0];\n      const dy = downPx[1] - clickPx[1];\n      const squaredDistance = dx * dx + dy * dy;\n      this.shouldHandle_ = this.freehand_\n        ? squaredDistance > this.squaredClickTolerance_\n        : squaredDistance <= this.squaredClickTolerance_;\n      if (!this.shouldHandle_) {\n        return;\n      }\n    }\n\n    if (!this.finishCoordinate_) {\n      this.createOrUpdateSketchPoint_(event.coordinate.slice());\n      return;\n    }\n\n    this.updateTrace_(event);\n    this.modifyDrawing_(event.coordinate);\n  }\n\n  /**\n   * Determine if an event is within the snapping tolerance of the start coord.\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @param {boolean} [tracing] Drawing in trace mode (only stop if at the starting point).\n   * @return {boolean} The event is within the snapping tolerance of the start.\n   * @private\n   */\n  atFinish_(pixel, tracing) {\n    let at = false;\n    if (this.sketchFeature_) {\n      let potentiallyDone = false;\n      let potentiallyFinishCoordinates = [this.finishCoordinate_];\n      const mode = this.mode_;\n      if (mode === 'Point') {\n        at = true;\n      } else if (mode === 'Circle') {\n        at = this.sketchCoords_.length === 2;\n      } else if (mode === 'LineString') {\n        potentiallyDone =\n          !tracing && this.sketchCoords_.length > this.minPoints_;\n      } else if (mode === 'Polygon') {\n        const sketchCoords = /** @type {PolyCoordType} */ (this.sketchCoords_);\n        potentiallyDone = sketchCoords[0].length > this.minPoints_;\n        potentiallyFinishCoordinates = [\n          sketchCoords[0][0],\n          sketchCoords[0][sketchCoords[0].length - 2],\n        ];\n        if (tracing) {\n          potentiallyFinishCoordinates = [sketchCoords[0][0]];\n        } else {\n          potentiallyFinishCoordinates = [\n            sketchCoords[0][0],\n            sketchCoords[0][sketchCoords[0].length - 2],\n          ];\n        }\n      }\n      if (potentiallyDone) {\n        const map = this.getMap();\n        for (let i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) {\n          const finishCoordinate = potentiallyFinishCoordinates[i];\n          const finishPixel = map.getPixelFromCoordinate(finishCoordinate);\n          const dx = pixel[0] - finishPixel[0];\n          const dy = pixel[1] - finishPixel[1];\n          const snapTolerance = this.freehand_ ? 1 : this.snapTolerance_;\n          at = Math.sqrt(dx * dx + dy * dy) <= snapTolerance;\n          if (at) {\n            this.finishCoordinate_ = finishCoordinate;\n            break;\n          }\n        }\n      }\n    }\n    return at;\n  }\n\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinate.\n   * @private\n   */\n  createOrUpdateSketchPoint_(coordinates) {\n    if (!this.sketchPoint_) {\n      this.sketchPoint_ = new Feature(new Point(coordinates));\n      this.updateSketchFeatures_();\n    } else {\n      const sketchPointGeom = this.sketchPoint_.getGeometry();\n      sketchPointGeom.setCoordinates(coordinates);\n    }\n  }\n\n  /**\n   * @param {import(\"../geom/Polygon.js\").default} geometry Polygon geometry.\n   * @private\n   */\n  createOrUpdateCustomSketchLine_(geometry) {\n    if (!this.sketchLine_) {\n      this.sketchLine_ = new Feature();\n    }\n    const ring = geometry.getLinearRing(0);\n    let sketchLineGeom = this.sketchLine_.getGeometry();\n    if (!sketchLineGeom) {\n      sketchLineGeom = new LineString(\n        ring.getFlatCoordinates(),\n        ring.getLayout(),\n      );\n      this.sketchLine_.setGeometry(sketchLineGeom);\n    } else {\n      sketchLineGeom.setFlatCoordinates(\n        ring.getLayout(),\n        ring.getFlatCoordinates(),\n      );\n      sketchLineGeom.changed();\n    }\n  }\n\n  /**\n   * Start the drawing.\n   * @param {import(\"../coordinate.js\").Coordinate} start Start coordinate.\n   * @private\n   */\n  startDrawing_(start) {\n    const projection = this.getMap().getView().getProjection();\n    const stride = getStrideForLayout(this.geometryLayout_);\n    while (start.length < stride) {\n      start.push(0);\n    }\n    this.finishCoordinate_ = start;\n    if (this.mode_ === 'Point') {\n      this.sketchCoords_ = start.slice();\n    } else if (this.mode_ === 'Polygon') {\n      this.sketchCoords_ = [[start.slice(), start.slice()]];\n      this.sketchLineCoords_ = this.sketchCoords_[0];\n    } else {\n      this.sketchCoords_ = [start.slice(), start.slice()];\n    }\n    if (this.sketchLineCoords_) {\n      this.sketchLine_ = new Feature(new LineString(this.sketchLineCoords_));\n    }\n    const geometry = this.geometryFunction_(\n      this.sketchCoords_,\n      undefined,\n      projection,\n    );\n    this.sketchFeature_ = new Feature();\n    if (this.geometryName_) {\n      this.sketchFeature_.setGeometryName(this.geometryName_);\n    }\n    this.sketchFeature_.setGeometry(geometry);\n    this.updateSketchFeatures_();\n    this.dispatchEvent(\n      new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_),\n    );\n  }\n\n  /**\n   * Modify the drawing.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @private\n   */\n  modifyDrawing_(coordinate) {\n    const map = this.getMap();\n    const geometry = this.sketchFeature_.getGeometry();\n    const projection = map.getView().getProjection();\n    const stride = getStrideForLayout(this.geometryLayout_);\n    let coordinates, last;\n    while (coordinate.length < stride) {\n      coordinate.push(0);\n    }\n    if (this.mode_ === 'Point') {\n      last = this.sketchCoords_;\n    } else if (this.mode_ === 'Polygon') {\n      coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];\n      last = coordinates[coordinates.length - 1];\n      if (this.atFinish_(map.getPixelFromCoordinate(coordinate))) {\n        // snap to finish\n        coordinate = this.finishCoordinate_.slice();\n      }\n    } else {\n      coordinates = this.sketchCoords_;\n      last = coordinates[coordinates.length - 1];\n    }\n    last[0] = coordinate[0];\n    last[1] = coordinate[1];\n    this.geometryFunction_(\n      /** @type {!LineCoordType} */ (this.sketchCoords_),\n      geometry,\n      projection,\n    );\n    if (this.sketchPoint_) {\n      const sketchPointGeom = this.sketchPoint_.getGeometry();\n      sketchPointGeom.setCoordinates(coordinate);\n    }\n    if (geometry.getType() === 'Polygon' && this.mode_ !== 'Polygon') {\n      this.createOrUpdateCustomSketchLine_(/** @type {Polygon} */ (geometry));\n    } else if (this.sketchLineCoords_) {\n      const sketchLineGeom = this.sketchLine_.getGeometry();\n      sketchLineGeom.setCoordinates(this.sketchLineCoords_);\n    }\n    this.updateSketchFeatures_();\n  }\n\n  /**\n   * Add a new coordinate to the drawing.\n   * @param {!PointCoordType} coordinate Coordinate\n   * @return {Feature<import(\"../geom/SimpleGeometry.js\").default>} The sketch feature.\n   * @private\n   */\n  addToDrawing_(coordinate) {\n    const geometry = this.sketchFeature_.getGeometry();\n    const projection = this.getMap().getView().getProjection();\n    let done;\n    let coordinates;\n    const mode = this.mode_;\n    if (mode === 'LineString' || mode === 'Circle') {\n      this.finishCoordinate_ = coordinate.slice();\n      coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);\n      if (coordinates.length >= this.maxPoints_) {\n        if (this.freehand_) {\n          coordinates.pop();\n        } else {\n          done = true;\n        }\n      }\n      coordinates.push(coordinate.slice());\n      this.geometryFunction_(coordinates, geometry, projection);\n    } else if (mode === 'Polygon') {\n      coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];\n      if (coordinates.length >= this.maxPoints_) {\n        if (this.freehand_) {\n          coordinates.pop();\n        } else {\n          done = true;\n        }\n      }\n      coordinates.push(coordinate.slice());\n      if (done) {\n        this.finishCoordinate_ = coordinates[0];\n      }\n      this.geometryFunction_(this.sketchCoords_, geometry, projection);\n    }\n    this.createOrUpdateSketchPoint_(coordinate.slice());\n    this.updateSketchFeatures_();\n    if (done) {\n      return this.finishDrawing();\n    }\n    return this.sketchFeature_;\n  }\n\n  /**\n   * @param {number} n The number of points to remove.\n   */\n  removeLastPoints_(n) {\n    if (!this.sketchFeature_) {\n      return;\n    }\n    const geometry = this.sketchFeature_.getGeometry();\n    const projection = this.getMap().getView().getProjection();\n    const mode = this.mode_;\n    for (let i = 0; i < n; ++i) {\n      let coordinates;\n      if (mode === 'LineString' || mode === 'Circle') {\n        coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);\n        coordinates.splice(-2, 1);\n        if (coordinates.length >= 2) {\n          this.finishCoordinate_ = coordinates[coordinates.length - 2].slice();\n          const finishCoordinate = this.finishCoordinate_.slice();\n          coordinates[coordinates.length - 1] = finishCoordinate;\n          this.createOrUpdateSketchPoint_(finishCoordinate);\n        }\n        this.geometryFunction_(coordinates, geometry, projection);\n        if (geometry.getType() === 'Polygon' && this.sketchLine_) {\n          this.createOrUpdateCustomSketchLine_(\n            /** @type {Polygon} */ (geometry),\n          );\n        }\n      } else if (mode === 'Polygon') {\n        coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];\n        coordinates.splice(-2, 1);\n        const sketchLineGeom = this.sketchLine_.getGeometry();\n        if (coordinates.length >= 2) {\n          const finishCoordinate = coordinates[coordinates.length - 2].slice();\n          coordinates[coordinates.length - 1] = finishCoordinate;\n          this.createOrUpdateSketchPoint_(finishCoordinate);\n        }\n        sketchLineGeom.setCoordinates(coordinates);\n        this.geometryFunction_(this.sketchCoords_, geometry, projection);\n      }\n\n      if (coordinates.length === 1) {\n        this.abortDrawing();\n        break;\n      }\n    }\n\n    this.updateSketchFeatures_();\n  }\n\n  /**\n   * Remove last point of the feature currently being drawn. Does not do anything when\n   * drawing POINT or MULTI_POINT geometries.\n   * @api\n   */\n  removeLastPoint() {\n    this.removeLastPoints_(1);\n  }\n\n  /**\n   * Stop drawing and add the sketch feature to the target layer.\n   * The {@link module:ol/interaction/Draw~DrawEventType.DRAWEND} event is\n   * dispatched before inserting the feature.\n   * @return {Feature<import(\"../geom/SimpleGeometry.js\").default>|null} The drawn feature.\n   * @api\n   */\n  finishDrawing() {\n    const sketchFeature = this.abortDrawing_();\n    if (!sketchFeature) {\n      return null;\n    }\n    let coordinates = this.sketchCoords_;\n    const geometry = sketchFeature.getGeometry();\n    const projection = this.getMap().getView().getProjection();\n    if (this.mode_ === 'LineString') {\n      // remove the redundant last point\n      coordinates.pop();\n      this.geometryFunction_(coordinates, geometry, projection);\n    } else if (this.mode_ === 'Polygon') {\n      // remove the redundant last point in ring\n      /** @type {PolyCoordType} */ (coordinates)[0].pop();\n      this.geometryFunction_(coordinates, geometry, projection);\n      coordinates = geometry.getCoordinates();\n    }\n\n    // cast multi-part geometries\n    if (this.type_ === 'MultiPoint') {\n      sketchFeature.setGeometry(\n        new MultiPoint([/** @type {PointCoordType} */ (coordinates)]),\n      );\n    } else if (this.type_ === 'MultiLineString') {\n      sketchFeature.setGeometry(\n        new MultiLineString([/** @type {LineCoordType} */ (coordinates)]),\n      );\n    } else if (this.type_ === 'MultiPolygon') {\n      sketchFeature.setGeometry(\n        new MultiPolygon([/** @type {PolyCoordType} */ (coordinates)]),\n      );\n    }\n\n    // First dispatch event to allow full set up of feature\n    this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND, sketchFeature));\n\n    // Then insert feature\n    if (this.features_) {\n      this.features_.push(sketchFeature);\n    }\n    if (this.source_) {\n      this.source_.addFeature(sketchFeature);\n    }\n    return sketchFeature;\n  }\n\n  /**\n   * Stop drawing without adding the sketch feature to the target layer.\n   * @return {Feature<import(\"../geom/SimpleGeometry.js\").default>|null} The sketch feature (or null if none).\n   * @private\n   */\n  abortDrawing_() {\n    this.finishCoordinate_ = null;\n    const sketchFeature = this.sketchFeature_;\n    this.sketchFeature_ = null;\n    this.sketchPoint_ = null;\n    this.sketchLine_ = null;\n    this.overlay_.getSource().clear(true);\n    this.deactivateTrace_();\n    return sketchFeature;\n  }\n\n  /**\n   * Stop drawing without adding the sketch feature to the target layer.\n   * @api\n   */\n  abortDrawing() {\n    const sketchFeature = this.abortDrawing_();\n    if (sketchFeature) {\n      this.dispatchEvent(new DrawEvent(DrawEventType.DRAWABORT, sketchFeature));\n    }\n  }\n\n  /**\n   * Append coordinates to the end of the geometry that is currently being drawn.\n   * This can be used when drawing LineStrings or Polygons. Coordinates will\n   * either be appended to the current LineString or the outer ring of the current\n   * Polygon. If no geometry is being drawn, a new one will be created.\n   * @param {!LineCoordType} coordinates Linear coordinates to be appended to\n   * the coordinate array.\n   * @api\n   */\n  appendCoordinates(coordinates) {\n    const mode = this.mode_;\n    const newDrawing = !this.sketchFeature_;\n    if (newDrawing) {\n      this.startDrawing_(coordinates[0]);\n    }\n    /** @type {LineCoordType} */\n    let sketchCoords;\n    if (mode === 'LineString' || mode === 'Circle') {\n      sketchCoords = /** @type {LineCoordType} */ (this.sketchCoords_);\n    } else if (mode === 'Polygon') {\n      sketchCoords =\n        this.sketchCoords_ && this.sketchCoords_.length\n          ? /** @type {PolyCoordType} */ (this.sketchCoords_)[0]\n          : [];\n    } else {\n      return;\n    }\n\n    if (newDrawing) {\n      sketchCoords.shift();\n    }\n\n    // Remove last coordinate from sketch drawing (this coordinate follows cursor position)\n    sketchCoords.pop();\n\n    // Append coordinate list\n    for (let i = 0; i < coordinates.length; i++) {\n      this.addToDrawing_(coordinates[i]);\n    }\n\n    const ending = coordinates[coordinates.length - 1];\n    // Duplicate last coordinate for sketch drawing (cursor position)\n    this.sketchFeature_ = this.addToDrawing_(ending);\n    this.modifyDrawing_(ending);\n  }\n\n  /**\n   * Initiate draw mode by starting from an existing geometry which will\n   * receive new additional points. This only works on features with\n   * `LineString` geometries, where the interaction will extend lines by adding\n   * points to the end of the coordinates array.\n   * This will change the original feature, instead of drawing a copy.\n   *\n   * The function will dispatch a `drawstart` event.\n   *\n   * @param {!Feature<LineString>} feature Feature to be extended.\n   * @api\n   */\n  extend(feature) {\n    const geometry = feature.getGeometry();\n    const lineString = geometry;\n    this.sketchFeature_ = feature;\n    this.sketchCoords_ = lineString.getCoordinates();\n    const last = this.sketchCoords_[this.sketchCoords_.length - 1];\n    this.finishCoordinate_ = last.slice();\n    this.sketchCoords_.push(last.slice());\n    this.sketchPoint_ = new Feature(new Point(last));\n    this.updateSketchFeatures_();\n    this.dispatchEvent(\n      new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_),\n    );\n  }\n\n  /**\n   * Redraw the sketch features.\n   * @private\n   */\n  updateSketchFeatures_() {\n    const sketchFeatures = [];\n    if (this.sketchFeature_) {\n      sketchFeatures.push(this.sketchFeature_);\n    }\n    if (this.sketchLine_) {\n      sketchFeatures.push(this.sketchLine_);\n    }\n    if (this.sketchPoint_) {\n      sketchFeatures.push(this.sketchPoint_);\n    }\n    const overlaySource = this.overlay_.getSource();\n    overlaySource.clear(true);\n    overlaySource.addFeatures(sketchFeatures);\n  }\n\n  /**\n   * @private\n   */\n  updateState_() {\n    const map = this.getMap();\n    const active = this.getActive();\n    if (!map || !active) {\n      this.abortDrawing();\n    }\n    this.overlay_.setMap(active ? map : null);\n  }\n}\n\n/**\n * @return {import(\"../style/Style.js\").StyleFunction} Styles.\n */\nfunction getDefaultStyleFunction() {\n  const styles = createEditingStyle();\n  return function (feature, resolution) {\n    return styles[feature.getGeometry().getType()];\n  };\n}\n\n/**\n * Create a `geometryFunction` for `type: 'Circle'` that will create a regular\n * polygon with a user specified number of sides and start angle instead of a\n * {@link import(\"../geom/Circle.js\").Circle} geometry.\n * @param {number} [sides] Number of sides of the regular polygon.\n *     Default is 32.\n * @param {number} [angle] Angle of the first point in counter-clockwise\n *     radians. 0 means East.\n *     Default is the angle defined by the heading from the center of the\n *     regular polygon to the current pointer position.\n * @return {GeometryFunction} Function that draws a polygon.\n * @api\n */\nexport function createRegularPolygon(sides, angle) {\n  return function (coordinates, geometry, projection) {\n    const center = fromUserCoordinate(\n      /** @type {LineCoordType} */ (coordinates)[0],\n      projection,\n    );\n    const end = fromUserCoordinate(\n      /** @type {LineCoordType} */ (coordinates)[coordinates.length - 1],\n      projection,\n    );\n    const radius = Math.sqrt(squaredCoordinateDistance(center, end));\n    geometry = geometry || fromCircle(new Circle(center), sides);\n\n    let internalAngle = angle;\n    if (!angle && angle !== 0) {\n      const x = end[0] - center[0];\n      const y = end[1] - center[1];\n      internalAngle = Math.atan2(y, x);\n    }\n    makeRegular(\n      /** @type {Polygon} */ (geometry),\n      center,\n      radius,\n      internalAngle,\n    );\n\n    const userProjection = getUserProjection();\n    if (userProjection) {\n      geometry.transform(projection, userProjection);\n    }\n    return geometry;\n  };\n}\n\n/**\n * Create a `geometryFunction` that will create a box-shaped polygon (aligned\n * with the coordinate system axes).  Use this with the draw interaction and\n * `type: 'Circle'` to return a box instead of a circle geometry.\n * @return {GeometryFunction} Function that draws a box-shaped polygon.\n * @api\n */\nexport function createBox() {\n  return function (coordinates, geometry, projection) {\n    const extent = boundingExtent(\n      /** @type {LineCoordType} */ ([\n        coordinates[0],\n        coordinates[coordinates.length - 1],\n      ]).map(function (coordinate) {\n        return fromUserCoordinate(coordinate, projection);\n      }),\n    );\n    const boxCoordinates = [\n      [\n        getBottomLeft(extent),\n        getBottomRight(extent),\n        getTopRight(extent),\n        getTopLeft(extent),\n        getBottomLeft(extent),\n      ],\n    ];\n    if (geometry) {\n      geometry.setCoordinates(boxCoordinates);\n    } else {\n      geometry = new Polygon(boxCoordinates);\n    }\n    const userProjection = getUserProjection();\n    if (userProjection) {\n      geometry.transform(projection, userProjection);\n    }\n    return geometry;\n  };\n}\n\n/**\n * Get the drawing mode.  The mode for multi-part geometries is the same as for\n * their single-part cousins.\n * @param {import(\"../geom/Geometry.js\").Type} type Geometry type.\n * @return {Mode} Drawing mode.\n */\nfunction getMode(type) {\n  switch (type) {\n    case 'Point':\n    case 'MultiPoint':\n      return 'Point';\n    case 'LineString':\n    case 'MultiLineString':\n      return 'LineString';\n    case 'Polygon':\n    case 'MultiPolygon':\n      return 'Polygon';\n    case 'Circle':\n      return 'Circle';\n    default:\n      throw new Error('Invalid type: ' + type);\n  }\n}\n\nexport default Draw;\n","/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport {easeOut, linear} from '../easing.js';\nimport InteractionProperty from './Property.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types|\n *     'change:active', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n *     'change:active', Return>} InteractionOnSignature\n */\n\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nclass Interaction extends BaseObject {\n  /**\n   * @param {InteractionOptions} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    /***\n     * @type {InteractionOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {InteractionOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {InteractionOnSignature<void>}\n     */\n    this.un;\n\n    if (options && options.handleEvent) {\n      this.handleEvent = options.handleEvent;\n    }\n\n    /**\n     * @private\n     * @type {import(\"../Map.js\").default|null}\n     */\n    this.map_ = null;\n\n    this.setActive(true);\n  }\n\n  /**\n   * Return whether the interaction is currently active.\n   * @return {boolean} `true` if the interaction is active, `false` otherwise.\n   * @observable\n   * @api\n   */\n  getActive() {\n    return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n  }\n\n  /**\n   * Get the map associated with this interaction.\n   * @return {import(\"../Map.js\").default|null} Map.\n   * @api\n   */\n  getMap() {\n    return this.map_;\n  }\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event}.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @api\n   */\n  handleEvent(mapBrowserEvent) {\n    return true;\n  }\n\n  /**\n   * Activate or deactivate the interaction.\n   * @param {boolean} active Active.\n   * @observable\n   * @api\n   */\n  setActive(active) {\n    this.set(InteractionProperty.ACTIVE, active);\n  }\n\n  /**\n   * Remove the interaction from its current map and attach it to the new map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {import(\"../Map.js\").default|null} map Map.\n   */\n  setMap(map) {\n    this.map_ = map;\n  }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number} [duration] Duration.\n */\nexport function pan(view, delta, duration) {\n  const currentCenter = view.getCenterInternal();\n  if (currentCenter) {\n    const center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n    view.animateInternal({\n      duration: duration !== undefined ? duration : 250,\n      easing: linear,\n      center: view.getConstrainedCenter(center),\n    });\n  }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] Anchor coordinate in the user projection.\n * @param {number} [duration] Duration.\n */\nexport function zoomByDelta(view, delta, anchor, duration) {\n  const currentZoom = view.getZoom();\n\n  if (currentZoom === undefined) {\n    return;\n  }\n\n  const newZoom = view.getConstrainedZoom(currentZoom + delta);\n  const newResolution = view.getResolutionForZoom(newZoom);\n\n  if (view.getAnimating()) {\n    view.cancelAnimations();\n  }\n  view.animate({\n    resolution: newResolution,\n    anchor: anchor,\n    duration: duration !== undefined ? duration : 250,\n    easing: easeOut,\n  });\n}\n\nexport default Interaction;\n","/**\n * @module ol/events/Key\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n  LEFT: 'ArrowLeft',\n  UP: 'ArrowUp',\n  RIGHT: 'ArrowRight',\n  DOWN: 'ArrowDown',\n};\n","/**\n * @module ol/interaction/KeyboardPan\n */\nimport {rotate as rotateCoordinate} from '../coordinate.js';\nimport EventType from '../events/EventType.js';\nimport Key from '../events/Key.js';\nimport {noModifierKeys, targetNotEditable} from '../events/condition.js';\nimport Interaction, {pan} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.noModifierKeys} and\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nclass KeyboardPan extends Interaction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    options = options || {};\n\n    /**\n     * @private\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n     * @return {boolean} Combined condition result.\n     */\n    this.defaultCondition_ = function (mapBrowserEvent) {\n      return (\n        noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent)\n      );\n    };\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ =\n      options.condition !== undefined\n        ? options.condition\n        : this.defaultCondition_;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelDelta_ =\n      options.pixelDelta !== undefined ? options.pixelDelta : 128;\n  }\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n   * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n   * pressed).\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @override\n   */\n  handleEvent(mapBrowserEvent) {\n    let stopEvent = false;\n    if (mapBrowserEvent.type == EventType.KEYDOWN) {\n      const keyEvent = /** @type {KeyboardEvent} */ (\n        mapBrowserEvent.originalEvent\n      );\n      const key = keyEvent.key;\n      if (\n        this.condition_(mapBrowserEvent) &&\n        (key == Key.DOWN ||\n          key == Key.LEFT ||\n          key == Key.RIGHT ||\n          key == Key.UP)\n      ) {\n        const map = mapBrowserEvent.map;\n        const view = map.getView();\n        const mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n        let deltaX = 0,\n          deltaY = 0;\n        if (key == Key.DOWN) {\n          deltaY = -mapUnitsDelta;\n        } else if (key == Key.LEFT) {\n          deltaX = -mapUnitsDelta;\n        } else if (key == Key.RIGHT) {\n          deltaX = mapUnitsDelta;\n        } else {\n          deltaY = mapUnitsDelta;\n        }\n        const delta = [deltaX, deltaY];\n        rotateCoordinate(delta, view.getRotation());\n        pan(view, delta, this.duration_);\n        keyEvent.preventDefault();\n        stopEvent = true;\n      }\n    }\n    return !stopEvent;\n  }\n}\n\nexport default KeyboardPan;\n","/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport {platformModifierKey, targetNotEditable} from '../events/condition.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. The default condition is\n * that {@link module:ol/events/condition.targetNotEditable} is fulfilled and that\n * the platform modifier key isn't pressed\n * (!{@link module:ol/events/condition.platformModifierKey}).\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nclass KeyboardZoom extends Interaction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    options = options ? options : {};\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ = options.condition\n      ? options.condition\n      : function (mapBrowserEvent) {\n          return (\n            !platformModifierKey(mapBrowserEvent) &&\n            targetNotEditable(mapBrowserEvent)\n          );\n        };\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.delta_ = options.delta ? options.delta : 1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 100;\n  }\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n   * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n   * key pressed was '+' or '-').\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @override\n   */\n  handleEvent(mapBrowserEvent) {\n    let stopEvent = false;\n    if (\n      mapBrowserEvent.type == EventType.KEYDOWN ||\n      mapBrowserEvent.type == EventType.KEYPRESS\n    ) {\n      const keyEvent = /** @type {KeyboardEvent} */ (\n        mapBrowserEvent.originalEvent\n      );\n      const key = keyEvent.key;\n      if (this.condition_(mapBrowserEvent) && (key === '+' || key === '-')) {\n        const map = mapBrowserEvent.map;\n        const delta = key === '+' ? this.delta_ : -this.delta_;\n        const view = map.getView();\n        zoomByDelta(view, delta, undefined, this.duration_);\n        keyEvent.preventDefault();\n        stopEvent = true;\n      }\n    }\n    return !stopEvent;\n  }\n}\n\nexport default KeyboardZoom;\n","/**\n * @module ol/interaction/Modify\n */\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Feature from '../Feature.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {equals} from '../array.js';\nimport {\n  closestOnSegment,\n  distance as coordinateDistance,\n  equals as coordinatesEqual,\n  squaredDistance as squaredCoordinateDistance,\n  squaredDistanceToSegment,\n} from '../coordinate.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {\n  altKeyOnly,\n  always,\n  never,\n  primaryAction,\n  singleClick,\n} from '../events/condition.js';\nimport {\n  boundingExtent,\n  buffer as bufferExtent,\n  createOrUpdateFromCoordinate as createExtent,\n} from '../extent.js';\nimport Point from '../geom/Point.js';\nimport {fromCircle} from '../geom/Polygon.js';\nimport VectorLayer from '../layer/Vector.js';\nimport {\n  fromUserCoordinate,\n  fromUserExtent,\n  getUserProjection,\n  toUserCoordinate,\n  toUserExtent,\n} from '../proj.js';\nimport VectorSource from '../source/Vector.js';\nimport VectorEventType from '../source/VectorEventType.js';\nimport RBush from '../structs/RBush.js';\nimport {createEditingStyle} from '../style/Style.js';\nimport {getUid} from '../util.js';\nimport PointerInteraction from './Pointer.js';\nimport {\n  getCoordinate,\n  getTraceTargetUpdate,\n  getTraceTargets,\n  interpolateCoordinate,\n} from './tracing.js';\n\n/**\n * The segment index assigned to a circle's center when\n * breaking up a circle into ModifySegmentDataType segments.\n * @type {number}\n */\nconst CIRCLE_CENTER_INDEX = 0;\n\n/**\n * The segment index assigned to a circle's circumference when\n * breaking up a circle into ModifySegmentDataType segments.\n * @type {number}\n */\nconst CIRCLE_CIRCUMFERENCE_INDEX = 1;\n\nconst tempExtent = [0, 0, 0, 0];\nconst tempSegment = [];\n\n/**\n * @enum {string}\n */\nconst ModifyEventType = {\n  /**\n   * Triggered upon feature modification start\n   * @event ModifyEvent#modifystart\n   * @api\n   */\n  MODIFYSTART: 'modifystart',\n  /**\n   * Triggered upon feature modification end\n   * @event ModifyEvent#modifyend\n   * @api\n   */\n  MODIFYEND: 'modifyend',\n};\n\n/**\n * @typedef {Object} SegmentData\n * @property {Array<number>} [depth] Depth.\n * @property {Feature} feature Feature.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} [index] Index.\n * @property {Array<Array<number>>} segment Segment.\n * @property {Array<SegmentData>} [featureSegments] FeatureSegments.\n */\n\n/**\n * A function that takes a {@link module:ol/Feature~Feature} and  returns `true` if\n * the feature may be modified or `false` otherwise.\n * @typedef {function(Feature):boolean} FilterFunction\n */\n\n/**\n * @typedef {[SegmentData, number]} DragSegment\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event will be considered to add or move a\n * vertex to the sketch. Default is\n * {@link module:ol/events/condition.primaryAction}.\n * @property {import(\"../events/condition.js\").Condition} [deleteCondition] A function\n * that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. By default,\n * {@link module:ol/events/condition.singleClick} with\n * {@link module:ol/events/condition.altKeyOnly} results in a vertex deletion.\n * This combination is handled by wrapping the two condition checks in a single function:\n * ```js\n * import { altKeyOnly, singleClick } from 'ol/events/condition.js';\n *\n * function (event) {\n *   return altKeyOnly(event) && singleClick(event)\n * }\n * ```\n * @property {import(\"../events/condition.js\").Condition} [insertVertexCondition] A\n * function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and\n * returns a boolean to indicate whether a new vertex should be added to the sketch\n * features. Default is {@link module:ol/events/condition.always}.\n * @property {number} [pixelTolerance=10] Pixel tolerance for considering the\n * pointer close enough to a segment or vertex for editing.\n * @property {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike} [style]\n * Style used for the modification point or vertex. For linestrings and polygons, this will\n * be the affected vertex, for circles a point along the circle, and for points the actual\n * point. If not configured, the default edit style is used (see {@link module:ol/style/Style~Style}).\n * When using a style function, the point feature passed to the function will have an `existing` property -\n * indicating whether there is an existing vertex underneath or not, a `features`\n * property - an array whose entries are the features that are being modified, and a `geometries`\n * property - an array whose entries are the geometries that are being modified. Both arrays are\n * in the same order. The `geometries` are only useful when modifying geometry collections, where\n * the geometry will be the particular geometry from the collection that is being modified.\n * @property {VectorSource} [source] The vector source with\n * features to modify.  If a vector source is not provided, a feature collection\n * must be provided with the `features` option.\n * @property {boolean|import(\"../layer/BaseVector.js\").default} [hitDetection] When configured, point\n * features will be considered for modification based on their visual appearance, instead of being within\n * the `pixelTolerance` from the pointer location. When a {@link module:ol/layer/BaseVector~BaseVectorLayer} is\n * provided, only the rendered representation of the features on that layer will be considered.\n * @property {Collection<Feature>} [features]\n * The features the interaction works on.  If a feature collection is not\n * provided, a vector source must be provided with the `source` option.\n * @property {FilterFunction} [filter] A function that takes a {@link module:ol/Feature~Feature}\n * and returns `true` if the feature may be modified or `false` otherwise.\n * @property {boolean|import(\"../events/condition.js\").Condition} [trace=false] Trace a portion of another geometry.\n * Tracing starts when two neighboring vertices are dragged onto a trace target, without any other modification in between..\n * @property {VectorSource} [traceSource] Source for features to trace.  If tracing is active and a `traceSource` is\n * not provided, the interaction's `source` will be used.  Tracing requires that the interaction is configured with\n * either a `traceSource` or a `source`.\n * @property {boolean} [wrapX=false] Wrap the world horizontally on the sketch\n * overlay.\n * @property {boolean} [snapToPointer=!hitDetection] The vertex, point or segment being modified snaps to the\n * pointer coordinate when clicked within the `pixelTolerance`.\n * @property {function(import(\"../coordinate.js\").Coordinate, import(\"../coordinate.js\").Coordinate): boolean} [sharedVerticesEqual]\n * A function that takes two coordinates and returns whether they should be\n * considered equal for vertex matching purposes. By default, all coordinate\n * dimensions are compared. This is useful when features have mixed coordinate\n * dimensions (e.g., XY and XYZ) but should still be treated as sharing vertices\n * at the same 2D position.\n */\n\nfunction getCoordinatesArray(coordinates, geometryType, depth) {\n  let coordinatesArray;\n  switch (geometryType) {\n    case 'LineString':\n      coordinatesArray = coordinates;\n      break;\n    case 'MultiLineString':\n    case 'Polygon':\n      coordinatesArray = coordinates[depth[0]];\n      break;\n    case 'MultiPolygon':\n      coordinatesArray = coordinates[depth[1]][depth[0]];\n      break;\n    default:\n    // pass\n  }\n  return coordinatesArray;\n}\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/Modify~Modify} instances are\n * instances of this type.\n */\nexport class ModifyEvent extends Event {\n  /**\n   * @param {ModifyEventType} type Type.\n   * @param {Collection<Feature>} features\n   * The features modified.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent\n   * Associated {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n   */\n  constructor(type, features, mapBrowserEvent) {\n    super(type);\n\n    /**\n     * The features being modified.\n     * @type {Collection<Feature>}\n     * @api\n     */\n    this.features = features;\n\n    /**\n     * Associated {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n     * @type {import(\"../MapBrowserEvent.js\").default}\n     * @api\n     */\n    this.mapBrowserEvent = mapBrowserEvent;\n  }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types|\n *     'change:active', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<'modifyend'|'modifystart', ModifyEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n *     'change:active'|'modifyend'|'modifystart', Return>} ModifyOnSignature\n */\n\n/**\n * @classdesc\n * Interaction for modifying feature geometries.  To modify features that have\n * been added to an existing source, construct the modify interaction with the\n * `source` option.  If you want to modify features in a collection (for example,\n * the collection used by a select interaction), construct the interaction with\n * the `features` option.  The interaction must be constructed with either a\n * `source` or `features` option.\n *\n * Cartesian distance from the pointer is used to determine the features that\n * will be modified. This means that geometries will only be considered for\n * modification when they are within the configured `pixelTolerance`. For point\n * geometries, the `hitDetection` option can be used to match their visual\n * appearance.\n *\n * By default, the interaction will allow deletion of vertices when the `alt`\n * key is pressed.  To configure the interaction with a different condition\n * for deletion, use the `deleteCondition` option.\n * @fires ModifyEvent\n * @api\n */\nclass Modify extends PointerInteraction {\n  /**\n   * @param {Options} options Options.\n   */\n  constructor(options) {\n    super(/** @type {import(\"./Pointer.js\").Options} */ (options));\n\n    //Maintain a ref to event handlers for later unregistering\n    /** @private */\n    this.handleSourceAdd_ = this.handleSourceAdd_.bind(this);\n\n    /** @private */\n    this.handleSourceRemove_ = this.handleSourceRemove_.bind(this);\n\n    /** @private */\n    this.handleExternalCollectionAdd_ =\n      this.handleExternalCollectionAdd_.bind(this);\n\n    /** @private */\n    this.handleExternalCollectionRemove_ =\n      this.handleExternalCollectionRemove_.bind(this);\n\n    /** @private */\n    this.handleFeatureChange_ = this.handleFeatureChange_.bind(this);\n\n    /***\n     * @type {ModifyOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {ModifyOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {ModifyOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ = options.condition ? options.condition : primaryAction;\n\n    /**\n     * @private\n     * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n     * @return {boolean} Combined condition result.\n     */\n    this.defaultDeleteCondition_ = function (mapBrowserEvent) {\n      return altKeyOnly(mapBrowserEvent) && singleClick(mapBrowserEvent);\n    };\n\n    /**\n     * @type {import(\"../events/condition.js\").Condition}\n     * @private\n     */\n    this.deleteCondition_ = options.deleteCondition\n      ? options.deleteCondition\n      : this.defaultDeleteCondition_;\n\n    /**\n     * @type {import(\"../events/condition.js\").Condition}\n     * @private\n     */\n    this.insertVertexCondition_ = options.insertVertexCondition\n      ? options.insertVertexCondition\n      : always;\n\n    /**\n     * Editing vertex.\n     * @type {Feature<Point>}\n     * @private\n     */\n    this.vertexFeature_ = null;\n\n    /**\n     * Segments intersecting {@link this.vertexFeature_} by segment uid.\n     * @type {Object<string, boolean>}\n     * @private\n     */\n    this.vertexSegments_ = null;\n\n    /**\n     * @type {import(\"../coordinate.js\").Coordinate}\n     * @private\n     */\n    this.lastCoordinate_ = [0, 0];\n\n    /**\n     * Tracks if the next `singleclick` event should be ignored to prevent\n     * accidental deletion right after vertex creation.\n     * @type {boolean}\n     * @private\n     */\n    this.ignoreNextSingleClick_ = false;\n\n    /**\n     * @type {Collection<Feature>}\n     * @private\n     */\n    this.featuresBeingModified_ = null;\n\n    /**\n     * Segment RTree for each layer\n     * @type {RBush<SegmentData>}\n     * @private\n     */\n    this.rBush_ = new RBush();\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.pixelTolerance_ =\n      options.pixelTolerance !== undefined ? options.pixelTolerance : 10;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.snappedToVertex_ = false;\n\n    /**\n     * Indicate whether the interaction is currently changing a feature's\n     * coordinates.\n     * @type {boolean}\n     * @private\n     */\n    this.changingFeature_ = false;\n\n    /**\n     * @type {Array<DragSegment>}\n     * @private\n     */\n    this.dragSegments_ = [];\n\n    /**\n     * Draw overlay where sketch features are drawn.\n     * @type {VectorLayer}\n     * @private\n     */\n    this.overlay_ = new VectorLayer({\n      source: new VectorSource({\n        useSpatialIndex: false,\n        wrapX: !!options.wrapX,\n      }),\n      style: options.style ? options.style : getDefaultStyleFunction(),\n      updateWhileAnimating: true,\n      updateWhileInteracting: true,\n    });\n\n    /**\n     * @const\n     * @private\n     * @type {!Object<string, function(Feature, import(\"../geom/Geometry.js\").default): void>}\n     */\n    this.SEGMENT_WRITERS_ = {\n      Point: this.writePointGeometry_.bind(this),\n      LineString: this.writeLineStringGeometry_.bind(this),\n      LinearRing: this.writeLineStringGeometry_.bind(this),\n      Polygon: this.writePolygonGeometry_.bind(this),\n      MultiPoint: this.writeMultiPointGeometry_.bind(this),\n      MultiLineString: this.writeMultiLineStringGeometry_.bind(this),\n      MultiPolygon: this.writeMultiPolygonGeometry_.bind(this),\n      Circle: this.writeCircleGeometry_.bind(this),\n      GeometryCollection: this.writeGeometryCollectionGeometry_.bind(this),\n    };\n\n    /**\n     * @type {VectorSource}\n     * @private\n     */\n    this.source_ = null;\n\n    /**\n     * @type {VectorSource|null}\n     * @private\n     */\n    this.traceSource_ = options.traceSource || options.source || null;\n\n    /**\n     * @type {import(\"../events/condition.js\").Condition}\n     * @private\n     */\n    this.traceCondition_;\n    this.setTrace(options.trace || false);\n\n    /**\n     * @type {import('./tracing.js').TraceState}\n     * @private\n     */\n    this.traceState_ = {active: false};\n\n    /**\n     * @type {Array<DragSegment>|null}\n     * @private\n     */\n    this.traceSegments_ = null;\n\n    /**\n     * @type {boolean|import(\"../layer/BaseVector.js\").default}\n     * @private\n     */\n    this.hitDetection_ = null;\n\n    /**\n     * Useful for performance optimization\n     * @private\n     * @type boolean\n     */\n    this.filterFunctionWasSupplied_ =\n      options.filter != undefined ? true : false;\n\n    /**\n     * @private\n     * @type {FilterFunction}\n     */\n    this.filter_ = options.filter ? options.filter : () => true;\n\n    /**\n     * @private\n     * @type {function(import(\"../coordinate.js\").Coordinate, import(\"../coordinate.js\").Coordinate): boolean}\n     */\n    this.coordinatesEqual_ = options.sharedVerticesEqual\n      ? options.sharedVerticesEqual\n      : coordinatesEqual;\n\n    if (!(options.features || options.source)) {\n      throw new Error(\n        'The modify interaction requires features collection or a source',\n      );\n    }\n    /** @type {Array<Feature>} */\n    let features;\n    if (options.features) {\n      features = options.features.getArray();\n      //setup listeners on external features collection and features\n      options.features.addEventListener(\n        CollectionEventType.ADD,\n        this.handleExternalCollectionAdd_,\n      );\n      options.features.addEventListener(\n        CollectionEventType.REMOVE,\n        this.handleExternalCollectionRemove_,\n      );\n      //keep ref for unsubscribe on dispose\n      this.featuresCollection_ = options.features;\n    } else if (options.source) {\n      features = options.source.getFeatures();\n      //setup listeners on external source and features\n      options.source.addEventListener(\n        VectorEventType.ADDFEATURE,\n        this.handleSourceAdd_,\n      );\n      options.source.addEventListener(\n        VectorEventType.REMOVEFEATURE,\n        this.handleSourceRemove_,\n      );\n      //keep ref for unsubscribe on dispose\n      this.source_ = options.source;\n    }\n    features.forEach((feature) => {\n      //any modification to the feature requires filter to be re-run\n      feature.addEventListener(EventType.CHANGE, this.handleFeatureChange_);\n      //prop change handler is only to re-run the filter\n      if (this.filterFunctionWasSupplied_) {\n        feature.addEventListener(\n          ObjectEventType.PROPERTYCHANGE,\n          this.handleFeatureChange_,\n        );\n      }\n    });\n\n    if (options.hitDetection) {\n      this.hitDetection_ = options.hitDetection;\n    }\n\n    /**\n     * Internal features array.  When adding or removing features, be sure to use\n     * addFeature_()/removeFeature_() so that the the segment index is adjusted.\n     * @type {Array<Feature>}\n     * @private\n     */\n    this.features_ = [];\n    features\n      .filter(this.filter_)\n      .forEach((feature) => this.addFeature_(feature));\n\n    /**\n     * @type {import(\"../MapBrowserEvent.js\").default}\n     * @private\n     */\n    this.lastPointerEvent_ = null;\n\n    /**\n     * Delta (x, y in map units) between matched rtree vertex and pointer vertex.\n     * @type {Array<number>}\n     * @private\n     */\n    this.delta_ = [0, 0];\n\n    /**\n     * @private\n     */\n    this.snapToPointer_ =\n      options.snapToPointer === undefined\n        ? !this.hitDetection_\n        : options.snapToPointer;\n  }\n\n  /**\n   * Toggle tracing mode or set a tracing condition.\n   *\n   * @param {boolean|import(\"../events/condition.js\").Condition} trace A boolean to toggle tracing mode or an event\n   *     condition that will be checked when a feature is clicked to determine if tracing should be active.\n   */\n  setTrace(trace) {\n    let condition;\n    if (!trace) {\n      condition = never;\n    } else if (trace === true) {\n      condition = always;\n    } else {\n      condition = trace;\n    }\n    this.traceCondition_ = condition;\n  }\n\n  /**\n   * Called when a feature is added to the internal features collection\n   * @param {Feature} feature Feature.\n   * @private\n   */\n  addFeature_(feature) {\n    this.features_.push(feature);\n    const geometry = feature.getGeometry();\n    if (geometry) {\n      const writer = this.SEGMENT_WRITERS_[geometry.getType()];\n      if (writer) {\n        writer(feature, geometry);\n      }\n    }\n    const map = this.getMap();\n    if (map && map.isRendered() && this.getActive()) {\n      this.handlePointerAtPixel_(this.lastCoordinate_);\n    }\n  }\n\n  /**\n   * @param {import(\"../MapBrowserEvent.js\").default} evt Map browser event.\n   * @param {Array<SegmentData>} segments The segments subject to modification.\n   * @private\n   */\n  willModifyFeatures_(evt, segments) {\n    if (!this.featuresBeingModified_) {\n      this.featuresBeingModified_ = new Collection();\n      const features = this.featuresBeingModified_.getArray();\n      for (let i = 0, ii = segments.length; i < ii; ++i) {\n        const feature = segments[i].feature;\n        if (feature && !features.includes(feature)) {\n          this.featuresBeingModified_.push(feature);\n        }\n      }\n      if (this.featuresBeingModified_.getLength() === 0) {\n        this.featuresBeingModified_ = null;\n      } else {\n        this.dispatchEvent(\n          new ModifyEvent(\n            ModifyEventType.MODIFYSTART,\n            this.featuresBeingModified_,\n            evt,\n          ),\n        );\n      }\n    }\n  }\n\n  /**\n   * Removes a feature from the internal features collection and updates internal state\n   * accordingly.\n   * @param {Feature} feature Feature.\n   * @private\n   */\n  removeFeature_(feature) {\n    const itemIndex = this.features_.indexOf(feature);\n    this.features_.splice(itemIndex, 1);\n    this.removeFeatureSegmentData_(feature);\n    // Remove the vertex feature if the collection of candidate features is empty.\n    if (this.vertexFeature_ && this.features_.length === 0) {\n      this.overlay_.getSource().removeFeature(this.vertexFeature_);\n      this.vertexFeature_ = null;\n    }\n  }\n\n  /**\n   * @param {Feature} feature Feature.\n   * @private\n   */\n  removeFeatureSegmentData_(feature) {\n    const rBush = this.rBush_;\n    /** @type {Array<SegmentData>} */\n    const nodesToRemove = [];\n    rBush.forEach(\n      /**\n       * @param {SegmentData} node RTree node.\n       */\n      function (node) {\n        if (feature === node.feature) {\n          nodesToRemove.push(node);\n        }\n      },\n    );\n    for (let i = nodesToRemove.length - 1; i >= 0; --i) {\n      const nodeToRemove = nodesToRemove[i];\n      for (let j = this.dragSegments_.length - 1; j >= 0; --j) {\n        if (this.dragSegments_[j][0] === nodeToRemove) {\n          this.dragSegments_.splice(j, 1);\n        }\n      }\n      rBush.remove(nodeToRemove);\n    }\n  }\n\n  /**\n   * Activate or deactivate the interaction.\n   * @param {boolean} active Active.\n   * @observable\n   * @api\n   * @override\n   */\n  setActive(active) {\n    if (this.vertexFeature_ && !active) {\n      this.overlay_.getSource().removeFeature(this.vertexFeature_);\n      this.vertexFeature_ = null;\n    }\n    super.setActive(active);\n  }\n\n  /**\n   * Remove the interaction from its current map and attach it to the new map.\n   * Subclasses may set up event handlers to get notified about changes to\n   * the map here.\n   * @param {import(\"../Map.js\").default} map Map.\n   * @override\n   */\n  setMap(map) {\n    this.overlay_.setMap(map);\n    super.setMap(map);\n  }\n\n  /**\n   * Get the overlay layer that this interaction renders the modification point or vertex to.\n   * @return {VectorLayer} Overlay layer.\n   * @api\n   */\n  getOverlay() {\n    return this.overlay_;\n  }\n\n  /**\n   * @param {import(\"../source/Vector.js\").VectorSourceEvent} event Event.\n   * @private\n   */\n  handleSourceAdd_(event) {\n    const feature = event.feature;\n    if (feature) {\n      this.externalAddFeatureHandler_(feature);\n    }\n  }\n\n  /**\n   * @param {import(\"../source/Vector.js\").VectorSourceEvent} event Event.\n   * @private\n   */\n  handleSourceRemove_(event) {\n    const feature = event.feature;\n    if (feature) {\n      this.externalRemoveFeatureHandler_(feature);\n    }\n  }\n\n  /**\n   * @param {import(\"../Collection.js\").CollectionEvent} event Event.\n   * @private\n   */\n  handleExternalCollectionAdd_(event) {\n    const feature = event.element;\n    if (feature) {\n      this.externalAddFeatureHandler_(feature);\n    }\n  }\n\n  /**\n   * @param {import(\"../Collection.js\").CollectionEvent} event Event.\n   * @private\n   */\n  handleExternalCollectionRemove_(event) {\n    const feature = event.element;\n    if (feature) {\n      this.externalRemoveFeatureHandler_(feature);\n    }\n  }\n\n  /**\n   * Common handler for event signaling addition of feature to the supplied features source\n   * or collection.\n   * @param {Feature} feature Feature.\n   */\n  externalAddFeatureHandler_(feature) {\n    feature.addEventListener(EventType.CHANGE, this.handleFeatureChange_);\n    //prop change handler is only for reapplying the filter\n    if (this.filterFunctionWasSupplied_) {\n      feature.addEventListener(\n        ObjectEventType.PROPERTYCHANGE,\n        this.handleFeatureChange_,\n      );\n    }\n    if (this.filter_(feature)) {\n      this.addFeature_(feature);\n    }\n  }\n\n  /**\n   * Common handler for event signaling removal of feature from the supplied features source\n   * or collection.\n   * @param {Feature} feature Feature.\n   */\n  externalRemoveFeatureHandler_(feature) {\n    feature.removeEventListener(EventType.CHANGE, this.handleFeatureChange_);\n    if (this.filterFunctionWasSupplied_) {\n      feature.removeEventListener(\n        ObjectEventType.PROPERTYCHANGE,\n        this.handleFeatureChange_,\n      );\n    }\n    this.removeFeature_(feature);\n  }\n\n  /**\n   * Listener for features in external source or features collection.  Ensures the feature filter\n   * is re-run and segment data is updated.\n   * @param {import(\"../events/Event.js\").default | import(\"../Object.js\").ObjectEvent} evt Event.\n   * @private\n   */\n  handleFeatureChange_(evt) {\n    if (!this.changingFeature_) {\n      const feature = /** @type {Feature} */ (evt.target);\n      this.removeFeature_(feature);\n      //safe to remove handler on a feature if there isn't one, but need to apply the filter\n      // before adding the feature.\n      this.filter_(feature) && this.addFeature_(feature);\n    }\n  }\n\n  /**\n   * @param {Feature} feature Feature\n   * @param {Point} geometry Geometry.\n   * @private\n   */\n  writePointGeometry_(feature, geometry) {\n    const coordinates = geometry.getCoordinates();\n\n    /** @type {SegmentData} */\n    const segmentData = {\n      feature: feature,\n      geometry: geometry,\n      segment: [coordinates, coordinates],\n    };\n\n    this.rBush_.insert(geometry.getExtent(), segmentData);\n  }\n\n  /**\n   * @param {Feature} feature Feature\n   * @param {import(\"../geom/MultiPoint.js\").default} geometry Geometry.\n   * @private\n   */\n  writeMultiPointGeometry_(feature, geometry) {\n    const points = geometry.getCoordinates();\n    for (let i = 0, ii = points.length; i < ii; ++i) {\n      const coordinates = points[i];\n\n      /** @type {SegmentData} */\n      const segmentData = {\n        feature: feature,\n        geometry: geometry,\n        depth: [i],\n        index: i,\n        segment: [coordinates, coordinates],\n      };\n\n      this.rBush_.insert(geometry.getExtent(), segmentData);\n    }\n  }\n\n  /**\n   * @param {Feature} feature Feature\n   * @param {import(\"../geom/LineString.js\").default} geometry Geometry.\n   * @private\n   */\n  writeLineStringGeometry_(feature, geometry) {\n    const coordinates = geometry.getCoordinates();\n    for (let i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n      const segment = coordinates.slice(i, i + 2);\n\n      /** @type {SegmentData} */\n      const segmentData = {\n        feature: feature,\n        geometry: geometry,\n        index: i,\n        segment: segment,\n      };\n\n      this.rBush_.insert(boundingExtent(segment), segmentData);\n    }\n  }\n\n  /**\n   * @param {Feature} feature Feature\n   * @param {import(\"../geom/MultiLineString.js\").default} geometry Geometry.\n   * @private\n   */\n  writeMultiLineStringGeometry_(feature, geometry) {\n    const lines = geometry.getCoordinates();\n    for (let j = 0, jj = lines.length; j < jj; ++j) {\n      const coordinates = lines[j];\n      for (let i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n        const segment = coordinates.slice(i, i + 2);\n\n        /** @type {SegmentData} */\n        const segmentData = {\n          feature: feature,\n          geometry: geometry,\n          depth: [j],\n          index: i,\n          segment: segment,\n        };\n\n        this.rBush_.insert(boundingExtent(segment), segmentData);\n      }\n    }\n  }\n\n  /**\n   * @param {Feature} feature Feature\n   * @param {import(\"../geom/Polygon.js\").default} geometry Geometry.\n   * @private\n   */\n  writePolygonGeometry_(feature, geometry) {\n    const rings = geometry.getCoordinates();\n    for (let j = 0, jj = rings.length; j < jj; ++j) {\n      const coordinates = rings[j];\n      for (let i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n        const segment = coordinates.slice(i, i + 2);\n\n        /** @type {SegmentData} */\n        const segmentData = {\n          feature: feature,\n          geometry: geometry,\n          depth: [j],\n          index: i,\n          segment: segment,\n        };\n\n        this.rBush_.insert(boundingExtent(segment), segmentData);\n      }\n    }\n  }\n\n  /**\n   * @param {Feature} feature Feature\n   * @param {import(\"../geom/MultiPolygon.js\").default} geometry Geometry.\n   * @private\n   */\n  writeMultiPolygonGeometry_(feature, geometry) {\n    const polygons = geometry.getCoordinates();\n    for (let k = 0, kk = polygons.length; k < kk; ++k) {\n      const rings = polygons[k];\n      for (let j = 0, jj = rings.length; j < jj; ++j) {\n        const coordinates = rings[j];\n        for (let i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n          const segment = coordinates.slice(i, i + 2);\n\n          /** @type {SegmentData} */\n          const segmentData = {\n            feature: feature,\n            geometry: geometry,\n            depth: [j, k],\n            index: i,\n            segment: segment,\n          };\n\n          this.rBush_.insert(boundingExtent(segment), segmentData);\n        }\n      }\n    }\n  }\n\n  /**\n   * We convert a circle into two segments.  The segment at index\n   * {@link CIRCLE_CENTER_INDEX} is the\n   * circle's center (a point).  The segment at index\n   * {@link CIRCLE_CIRCUMFERENCE_INDEX} is\n   * the circumference, and is not a line segment.\n   *\n   * @param {Feature} feature Feature.\n   * @param {import(\"../geom/Circle.js\").default} geometry Geometry.\n   * @private\n   */\n  writeCircleGeometry_(feature, geometry) {\n    const coordinates = geometry.getCenter();\n\n    /** @type {SegmentData} */\n    const centerSegmentData = {\n      feature: feature,\n      geometry: geometry,\n      index: CIRCLE_CENTER_INDEX,\n      segment: [coordinates, coordinates],\n    };\n\n    /** @type {SegmentData} */\n    const circumferenceSegmentData = {\n      feature: feature,\n      geometry: geometry,\n      index: CIRCLE_CIRCUMFERENCE_INDEX,\n      segment: [coordinates, coordinates],\n    };\n\n    const featureSegments = [centerSegmentData, circumferenceSegmentData];\n    centerSegmentData.featureSegments = featureSegments;\n    circumferenceSegmentData.featureSegments = featureSegments;\n    this.rBush_.insert(createExtent(coordinates), centerSegmentData);\n    let circleGeometry = /** @type {import(\"../geom/Geometry.js\").default} */ (\n      geometry\n    );\n    const userProjection = getUserProjection();\n    if (userProjection && this.getMap()) {\n      const projection = this.getMap().getView().getProjection();\n      circleGeometry = circleGeometry\n        .clone()\n        .transform(userProjection, projection);\n      circleGeometry = fromCircle(\n        /** @type {import(\"../geom/Circle.js\").default} */ (circleGeometry),\n      ).transform(projection, userProjection);\n    }\n    this.rBush_.insert(circleGeometry.getExtent(), circumferenceSegmentData);\n  }\n\n  /**\n   * @param {Feature} feature Feature\n   * @param {import(\"../geom/GeometryCollection.js\").default} geometry Geometry.\n   * @private\n   */\n  writeGeometryCollectionGeometry_(feature, geometry) {\n    const geometries = geometry.getGeometriesArray();\n    for (let i = 0; i < geometries.length; ++i) {\n      const geometry = geometries[i];\n      const writer = this.SEGMENT_WRITERS_[geometry.getType()];\n      writer(feature, geometry);\n    }\n  }\n\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n   * @param {Array<Feature>} features The features being modified.\n   * @param {Array<import(\"../geom/SimpleGeometry.js\").default>} geometries The geometries being modified.\n   * @param {boolean} existing The vertex represents an existing vertex.\n   * @return {Feature} Vertex feature.\n   * @private\n   */\n  createOrUpdateVertexFeature_(coordinates, features, geometries, existing) {\n    let vertexFeature = this.vertexFeature_;\n    if (!vertexFeature) {\n      vertexFeature = new Feature(new Point(coordinates));\n      this.vertexFeature_ = vertexFeature;\n      this.overlay_.getSource().addFeature(vertexFeature);\n    } else {\n      const geometry = vertexFeature.getGeometry();\n      geometry.setCoordinates(coordinates);\n    }\n    vertexFeature.set('features', features);\n    vertexFeature.set('geometries', geometries);\n    vertexFeature.set('existing', existing);\n    return vertexFeature;\n  }\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may modify the geometry.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @override\n   */\n  handleEvent(mapBrowserEvent) {\n    if (!mapBrowserEvent.originalEvent) {\n      return true;\n    }\n    this.lastPointerEvent_ = mapBrowserEvent;\n\n    let handled;\n    if (\n      !mapBrowserEvent.map.getView().getInteracting() &&\n      mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE &&\n      !this.handlingDownUpSequence\n    ) {\n      this.handlePointerMove_(mapBrowserEvent);\n    }\n    if (this.vertexFeature_ && this.deleteCondition_(mapBrowserEvent)) {\n      if (\n        mapBrowserEvent.type != MapBrowserEventType.SINGLECLICK ||\n        !this.ignoreNextSingleClick_\n      ) {\n        handled = this.removePoint();\n      } else {\n        handled = true;\n      }\n    }\n\n    if (mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK) {\n      this.ignoreNextSingleClick_ = false;\n    }\n\n    return super.handleEvent(mapBrowserEvent) && !handled;\n  }\n\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} pixelCoordinate Pixel coordinate.\n   * @return {Array<SegmentData>|undefined} Insert vertices and update drag segments.\n   * @private\n   */\n  findInsertVerticesAndUpdateDragSegments_(pixelCoordinate) {\n    this.handlePointerAtPixel_(pixelCoordinate);\n    this.dragSegments_.length = 0;\n    this.featuresBeingModified_ = null;\n    const vertexFeature = this.vertexFeature_;\n    if (!vertexFeature) {\n      return;\n    }\n\n    const projection = this.getMap().getView().getProjection();\n    /** @type {Array<SegmentData>} */\n    const insertVertices = [];\n    const vertex = this.vertexFeature_.getGeometry().getCoordinates();\n    const vertexExtent = boundingExtent([vertex]);\n    const segmentDataMatches = this.rBush_.getInExtent(vertexExtent);\n    const componentSegments = {};\n    segmentDataMatches.sort(compareIndexes);\n    for (let i = 0, ii = segmentDataMatches.length; i < ii; ++i) {\n      const segmentDataMatch = segmentDataMatches[i];\n      const segment = segmentDataMatch.segment;\n      let uid = getUid(segmentDataMatch.geometry);\n      const depth = segmentDataMatch.depth;\n      if (depth) {\n        uid += '-' + depth.join('-'); // separate feature components\n      }\n      if (!componentSegments[uid]) {\n        componentSegments[uid] = new Array(2);\n      }\n\n      if (\n        segmentDataMatch.geometry.getType() === 'Circle' &&\n        segmentDataMatch.index === CIRCLE_CIRCUMFERENCE_INDEX\n      ) {\n        const closestVertex = closestOnSegmentData(\n          pixelCoordinate,\n          segmentDataMatch,\n          projection,\n        );\n        if (\n          this.coordinatesEqual_(closestVertex, vertex) &&\n          !componentSegments[uid][0]\n        ) {\n          this.dragSegments_.push([segmentDataMatch, 0]);\n          componentSegments[uid][0] = segmentDataMatch;\n        }\n        continue;\n      }\n\n      if (\n        this.coordinatesEqual_(segment[0], vertex) &&\n        !componentSegments[uid][0]\n      ) {\n        this.dragSegments_.push([segmentDataMatch, 0]);\n        componentSegments[uid][0] = segmentDataMatch;\n        continue;\n      }\n\n      if (\n        this.coordinatesEqual_(segment[1], vertex) &&\n        !componentSegments[uid][1]\n      ) {\n        if (\n          componentSegments[uid][0] &&\n          componentSegments[uid][0].index === 0\n        ) {\n          let coordinates = segmentDataMatch.geometry.getCoordinates();\n          switch (segmentDataMatch.geometry.getType()) {\n            // prevent dragging closed linestrings by the connecting node\n            case 'LineString':\n            case 'MultiLineString':\n              continue;\n            // if dragging the first vertex of a polygon, ensure the other segment\n            // belongs to the closing vertex of the linear ring\n            case 'MultiPolygon':\n              coordinates = coordinates[depth[1]];\n            /* falls through */\n            case 'Polygon':\n              if (segmentDataMatch.index !== coordinates[depth[0]].length - 2) {\n                continue;\n              }\n              break;\n            default:\n            // pass\n          }\n        }\n\n        this.dragSegments_.push([segmentDataMatch, 1]);\n        componentSegments[uid][1] = segmentDataMatch;\n        continue;\n      }\n\n      if (\n        getUid(segment) in this.vertexSegments_ &&\n        !componentSegments[uid][0] &&\n        !componentSegments[uid][1]\n      ) {\n        insertVertices.push(segmentDataMatch);\n      }\n    }\n\n    return insertVertices;\n  }\n\n  /**\n   * @private\n   */\n  deactivateTrace_() {\n    this.traceState_ = {active: false};\n  }\n\n  /**\n   * Determine whether a trace from `fromIndex` to `toIndex` passes at least one\n   * vertex of the target (i.e. whether it would add any traced coordinates).\n   * The index math mirrors {@link addTracedCoordinates_}.\n   * @param {number} fromIndex The start index.\n   * @param {number} toIndex The end index.\n   * @return {boolean} At least one target vertex lies between the indices.\n   * @private\n   */\n  tracePassesVertex_(fromIndex, toIndex) {\n    if (fromIndex === toIndex) {\n      return false;\n    }\n    if (fromIndex < toIndex) {\n      const start = Math.ceil(fromIndex);\n      let end = Math.floor(toIndex);\n      if (end === toIndex) {\n        end -= 1;\n      }\n      return start <= end;\n    }\n    const start = Math.floor(fromIndex);\n    let end = Math.ceil(toIndex);\n    if (end === toIndex) {\n      end += 1;\n    }\n    return start >= end;\n  }\n\n  /**\n   * Update the trace.\n   * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n   * @return {import('../coordinate.js').Coordinate|undefined} The coordinate the\n   * dragged vertex was snapped onto a target edge, if any.\n   * @private\n   */\n  updateTrace_(event) {\n    const traceState = this.traceState_;\n    if (!traceState.active) {\n      return;\n    }\n\n    if (traceState.targetIndex === -1) {\n      // check if we are ready to pick a target\n      const startPx = event.map.getPixelFromCoordinate(traceState.startCoord);\n      if (coordinateDistance(startPx, event.pixel) < this.pixelTolerance_) {\n        return;\n      }\n    }\n\n    const updatedTraceTarget = getTraceTargetUpdate(\n      event.coordinate,\n      traceState,\n      event.map,\n      this.pixelTolerance_,\n    );\n\n    if (\n      traceState.targetIndex === -1 &&\n      Math.sqrt(updatedTraceTarget.closestTargetDistance) /\n        event.map.getView().getResolution() >\n        this.pixelTolerance_\n    ) {\n      return;\n    }\n\n    // Only commit to tracing a target once the drag has passed one of its\n    // vertices.  Before that we still snap the dragged vertex onto the target\n    // edge (below), but we keep `targetIndex` at -1 so that pulling the pointer\n    // beyond the tolerance releases the vertex instead of getting stuck on the\n    // target.\n    let commit = true;\n    if (traceState.targetIndex === -1) {\n      const candidateTarget = traceState.targets[updatedTraceTarget.index];\n      commit = this.tracePassesVertex_(\n        candidateTarget.startIndex,\n        updatedTraceTarget.endIndex,\n      );\n    }\n\n    if (commit) {\n      if (traceState.targetIndex !== updatedTraceTarget.index) {\n        // target changed\n        if (traceState.targetIndex !== -1) {\n          // remove points added during previous trace\n          const oldTarget = traceState.targets[traceState.targetIndex];\n          this.removeTracedCoordinates_(\n            oldTarget.startIndex,\n            oldTarget.endIndex,\n          );\n        }\n        // add points for the new target\n        const newTarget = traceState.targets[updatedTraceTarget.index];\n        this.addTracedCoordinates_(\n          newTarget,\n          newTarget.startIndex,\n          updatedTraceTarget.endIndex,\n        );\n      } else {\n        // target stayed the same\n        const target = traceState.targets[traceState.targetIndex];\n        this.addOrRemoveTracedCoordinates_(target, updatedTraceTarget.endIndex);\n      }\n\n      // modify the state with updated info\n      traceState.targetIndex = updatedTraceTarget.index;\n      traceState.targets[traceState.targetIndex].endIndex =\n        updatedTraceTarget.endIndex;\n    }\n\n    // Snap the dragged vertex (the moving end of the trace) onto the target\n    // edge so that the trace follows edges, not only vertices, and the geometry\n    // stays consistent with the vertex marker.  Moving all of the dragged\n    // vertex' segments keeps polygon rings closed.\n    const snapTarget = traceState.targets[updatedTraceTarget.index];\n    const snappedVertex = interpolateCoordinate(\n      snapTarget.coordinates,\n      updatedTraceTarget.endIndex,\n    );\n    for (const dragSegment of this.dragSegments_) {\n      this.updateGeometry_(snappedVertex.slice(), dragSegment);\n    }\n    return snappedVertex;\n  }\n\n  getTraceCandidates_(event) {\n    const map = this.getMap();\n    const tolerance = this.pixelTolerance_;\n    const lowerLeft = map.getCoordinateFromPixel([\n      event.pixel[0] - tolerance,\n      event.pixel[1] + tolerance,\n    ]);\n    const upperRight = map.getCoordinateFromPixel([\n      event.pixel[0] + tolerance,\n      event.pixel[1] - tolerance,\n    ]);\n    const extent = boundingExtent([lowerLeft, upperRight]);\n    const features = this.traceSource_.getFeaturesInExtent(extent);\n    return features;\n  }\n\n  /**\n   * Activate or deactivate trace state based on a browser event.\n   * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n   * @private\n   */\n  toggleTraceState_(event) {\n    if (!this.traceSource_ || !this.traceCondition_(event)) {\n      return;\n    }\n\n    if (this.traceState_.active) {\n      this.deactivateTrace_();\n      this.traceSegments_ = null;\n      return;\n    }\n\n    const features = this.getTraceCandidates_(event);\n    if (features.length === 0) {\n      return;\n    }\n\n    const targets = getTraceTargets(event.coordinate, features);\n    if (targets.length) {\n      this.traceState_ = {\n        active: true,\n        startCoord: event.coordinate.slice(),\n        targets: targets,\n        targetIndex: -1,\n      };\n    }\n  }\n\n  /**\n   * @param {import('./tracing.js').TraceTarget} target The trace target.\n   * @param {number} endIndex The new end index of the trace.\n   * @private\n   */\n  addOrRemoveTracedCoordinates_(target, endIndex) {\n    // three cases to handle:\n    //  1. traced in the same direction and points need adding\n    //  2. traced in the same direction and points need removing\n    //  3. traced in a new direction\n    const previouslyForward = target.startIndex <= target.endIndex;\n    const currentlyForward = target.startIndex <= endIndex;\n    if (previouslyForward === currentlyForward) {\n      // same direction\n      if (\n        (previouslyForward && endIndex > target.endIndex) ||\n        (!previouslyForward && endIndex < target.endIndex)\n      ) {\n        // case 1 - add new points\n        this.addTracedCoordinates_(target, target.endIndex, endIndex);\n      } else if (\n        (previouslyForward && endIndex < target.endIndex) ||\n        (!previouslyForward && endIndex > target.endIndex)\n      ) {\n        // case 2 - remove old points\n        this.removeTracedCoordinates_(endIndex, target.endIndex);\n      }\n    } else {\n      // case 3 - remove old points, add new points\n      this.removeTracedCoordinates_(target.startIndex, target.endIndex);\n      this.addTracedCoordinates_(target, target.startIndex, endIndex);\n    }\n  }\n\n  /**\n   * Tracing splices coordinates into a ring next to the dragged vertex, but only\n   * adjusts the index of the trace segment itself.  The dragged vertex' other\n   * segments in `dragSegments_` reference the same ring, so their stored index\n   * must be shifted too - otherwise the next {@link updateGeometry_} writes the\n   * dragged vertex to the wrong coordinate and scrambles the ring.\n   * @param {SegmentData} traceSegmentData The trace segment (adjusted by the\n   * caller and skipped here).\n   * @param {number} atIndex Segments at or after this coordinate index shift.\n   * @param {number} delta Coordinates added (positive) or removed (negative).\n   * @private\n   */\n  shiftTracedSegmentIndices_(traceSegmentData, atIndex, delta) {\n    for (const dragSegment of this.dragSegments_) {\n      const segmentData = dragSegment[0];\n      if (\n        segmentData !== traceSegmentData &&\n        segmentData.geometry === traceSegmentData.geometry &&\n        (segmentData.depth === undefined ||\n          traceSegmentData.depth === undefined ||\n          equals(segmentData.depth, traceSegmentData.depth)) &&\n        segmentData.index >= atIndex\n      ) {\n        segmentData.index += delta;\n      }\n    }\n  }\n\n  /**\n   * @param {number} fromIndex The start index.\n   * @param {number} toIndex The end index.\n   * @private\n   */\n  removeTracedCoordinates_(fromIndex, toIndex) {\n    if (fromIndex === toIndex) {\n      return;\n    }\n\n    let remove = 0;\n    if (fromIndex < toIndex) {\n      const start = Math.ceil(fromIndex);\n      let end = Math.floor(toIndex);\n      if (end === toIndex) {\n        end -= 1;\n      }\n      remove = end - start + 1;\n    } else {\n      const start = Math.floor(fromIndex);\n      let end = Math.ceil(toIndex);\n      if (end === toIndex) {\n        end += 1;\n      }\n      remove = start - end + 1;\n    }\n\n    if (remove > 0) {\n      for (const traceSegment of this.traceSegments_) {\n        const segmentData = traceSegment[0];\n        const geometry = segmentData.geometry;\n        const index = traceSegment[1];\n        let removeIndex = traceSegment[0].index + 1;\n        if (index === 1) {\n          removeIndex -= remove;\n        }\n        const coordinates = geometry.getCoordinates();\n        const coordinatesArray = getCoordinatesArray(\n          coordinates,\n          geometry.getType(),\n          segmentData.depth,\n        );\n        coordinatesArray.splice(removeIndex, remove);\n        this.setGeometryCoordinates_(geometry, coordinates);\n        this.shiftTracedSegmentIndices_(\n          segmentData,\n          removeIndex + remove,\n          -remove,\n        );\n        if (index === 1) {\n          segmentData.index -= remove;\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {import('./tracing.js').TraceTarget} target The trace target.\n   * @param {number} fromIndex The start index.\n   * @param {number} toIndex The end index.\n   * @private\n   */\n  addTracedCoordinates_(target, fromIndex, toIndex) {\n    if (fromIndex === toIndex) {\n      return;\n    }\n\n    const newCoordinates = [];\n    if (fromIndex < toIndex) {\n      // forward trace\n      const start = Math.ceil(fromIndex);\n      let end = Math.floor(toIndex);\n      if (end === toIndex) {\n        // if end is snapped to a vertex, it will be added later\n        end -= 1;\n      }\n      for (let i = start; i <= end; ++i) {\n        newCoordinates.push(getCoordinate(target.coordinates, i));\n      }\n    } else {\n      // reverse trace\n      const start = Math.floor(fromIndex);\n      let end = Math.ceil(toIndex);\n      if (end === toIndex) {\n        end += 1;\n      }\n      for (let i = start; i >= end; --i) {\n        newCoordinates.push(getCoordinate(target.coordinates, i));\n      }\n    }\n\n    if (newCoordinates.length) {\n      for (const traceSegment of this.traceSegments_) {\n        const segmentData = traceSegment[0];\n        const geometry = segmentData.geometry;\n        const index = traceSegment[1];\n        const insertIndex = segmentData.index + 1;\n        if (index === 0) {\n          newCoordinates.reverse();\n        }\n        const coordinates = geometry.getCoordinates();\n        const coordinatesArray = getCoordinatesArray(\n          coordinates,\n          geometry.getType(),\n          segmentData.depth,\n        );\n        coordinatesArray.splice(insertIndex, 0, ...newCoordinates);\n        this.setGeometryCoordinates_(geometry, coordinates);\n        this.shiftTracedSegmentIndices_(\n          segmentData,\n          insertIndex,\n          newCoordinates.length,\n        );\n        if (index === 1) {\n          segmentData.index += newCoordinates.length;\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {import('../coordinate.js').Coordinate} vertex Vertex.\n   * @param {DragSegment} dragSegment Drag segment.\n   */\n  updateGeometry_(vertex, dragSegment) {\n    const segmentData = dragSegment[0];\n    const depth = segmentData.depth;\n    let coordinates;\n    const segment = segmentData.segment;\n    const geometry = segmentData.geometry;\n    const index = dragSegment[1];\n\n    const stride = geometry.getStride();\n    for (let i = 2; i < stride; ++i) {\n      vertex[i] = segment[index][i];\n    }\n    vertex.length = stride;\n    switch (geometry.getType()) {\n      case 'Point':\n        coordinates = vertex;\n        segment[0] = vertex;\n        segment[1] = vertex;\n        break;\n      case 'MultiPoint':\n        coordinates = geometry.getCoordinates();\n        coordinates[segmentData.index] = vertex;\n        segment[0] = vertex;\n        segment[1] = vertex;\n        break;\n      case 'LineString':\n        coordinates = geometry.getCoordinates();\n        coordinates[segmentData.index + index] = vertex;\n        segment[index] = vertex;\n        break;\n      case 'MultiLineString':\n        coordinates = geometry.getCoordinates();\n        coordinates[depth[0]][segmentData.index + index] = vertex;\n        segment[index] = vertex;\n        break;\n      case 'Polygon': {\n        coordinates = geometry.getCoordinates();\n        const ring = coordinates[depth[0]];\n        const targetIndex = segmentData.index + index;\n\n        // Prevent duplicate change events when vertex already at position\n        if (\n          ring[targetIndex][0] === vertex[0] &&\n          ring[targetIndex][1] === vertex[1]\n        ) {\n          coordinates = null;\n        } else {\n          ring[targetIndex] = vertex;\n          if (targetIndex === 0) {\n            ring[ring.length - 1] = vertex;\n          } else if (targetIndex === ring.length - 1) {\n            ring[0] = vertex;\n          }\n        }\n        segment[index] = vertex;\n        break;\n      }\n      case 'MultiPolygon': {\n        coordinates = geometry.getCoordinates();\n        const mRing = coordinates[depth[1]][depth[0]];\n        const mTargetIndex = segmentData.index + index;\n\n        // Prevent duplicate change events when vertex already at position\n        if (\n          mRing[mTargetIndex][0] === vertex[0] &&\n          mRing[mTargetIndex][1] === vertex[1]\n        ) {\n          coordinates = null;\n        } else {\n          mRing[mTargetIndex] = vertex;\n          if (mTargetIndex === 0) {\n            mRing[mRing.length - 1] = vertex;\n          } else if (mTargetIndex === mRing.length - 1) {\n            mRing[0] = vertex;\n          }\n        }\n        segment[index] = vertex;\n        break;\n      }\n      case 'Circle':\n        const circle = /** @type {import(\"../geom/Circle.js\").default} */ (\n          geometry\n        );\n        segment[0] = vertex;\n        segment[1] = vertex;\n        if (segmentData.index === CIRCLE_CENTER_INDEX) {\n          this.changingFeature_ = true;\n          circle.setCenter(vertex);\n          this.changingFeature_ = false;\n        } else {\n          // We're dragging the circle's circumference:\n          this.changingFeature_ = true;\n          const projection = this.getMap().getView().getProjection();\n          let radius = coordinateDistance(\n            fromUserCoordinate(circle.getCenter(), projection),\n            fromUserCoordinate(vertex, projection),\n          );\n          const userProjection = getUserProjection();\n          if (userProjection) {\n            const circleGeometry = circle\n              .clone()\n              .transform(userProjection, projection);\n            circleGeometry.setRadius(radius);\n            radius = circleGeometry\n              .transform(projection, userProjection)\n              .getRadius();\n          }\n          circle.setRadius(radius);\n          this.changingFeature_ = false;\n        }\n        break;\n      default:\n      // pass\n    }\n    if (coordinates) {\n      this.setGeometryCoordinates_(geometry, coordinates);\n    }\n  }\n\n  /**\n   * Handle pointer drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default} evt Event.\n   * @override\n   */\n  handleDragEvent(evt) {\n    this.ignoreNextSingleClick_ = false;\n    this.willModifyFeatures_(\n      evt,\n      this.dragSegments_.map(([segment]) => segment),\n    );\n\n    const vertex = [\n      evt.coordinate[0] + this.delta_[0],\n      evt.coordinate[1] + this.delta_[1],\n    ];\n    const features = [];\n    const geometries = [];\n    const startTraceCoord =\n      this.traceState_.active && !this.traceSegments_\n        ? this.traceState_.startCoord\n        : null;\n    if (startTraceCoord) {\n      this.traceSegments_ = [];\n      for (const dragSegment of this.dragSegments_) {\n        const segmentData = dragSegment[0];\n        const eligibleForTracing =\n          coordinateDistance(\n            closestOnSegment(startTraceCoord, segmentData.segment),\n            startTraceCoord,\n          ) /\n            evt.map.getView().getResolution() <\n          1;\n        if (eligibleForTracing) {\n          this.traceSegments_.push(dragSegment);\n        }\n      }\n      if (this.traceSegments_.length > 1) {\n        // Both segments of the dragged vertex are anchored at the trace start,\n        // i.e. the grabbed vertex is the anchor itself.  Tracing needs a fixed\n        // anchor distinct from the moving vertex, so cancel tracing and let this\n        // drag move the vertex freely.\n        this.deactivateTrace_();\n        this.traceSegments_ = null;\n      }\n    }\n    for (let i = 0, ii = this.dragSegments_.length; i < ii; ++i) {\n      const dragSegment = this.dragSegments_[i];\n      const segmentData = dragSegment[0];\n      const feature = segmentData.feature;\n      if (!features.includes(feature)) {\n        features.push(feature);\n      }\n      const geometry = segmentData.geometry;\n      if (!geometries.includes(geometry)) {\n        geometries.push(geometry);\n      }\n\n      this.updateGeometry_(vertex, dragSegment);\n    }\n    // when tracing snaps the dragged vertex onto a target edge, show the vertex\n    // marker at the snapped location rather than at the raw pointer\n    const snappedVertex = this.updateTrace_(evt);\n    this.createOrUpdateVertexFeature_(\n      snappedVertex || vertex,\n      features,\n      geometries,\n      true,\n    );\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default} evt Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleDownEvent(evt) {\n    if (!this.condition_(evt)) {\n      return false;\n    }\n    const pixelCoordinate = evt.coordinate;\n    const insertVertices =\n      this.findInsertVerticesAndUpdateDragSegments_(pixelCoordinate);\n\n    if (insertVertices?.length && this.insertVertexCondition_(evt)) {\n      this.willModifyFeatures_(evt, insertVertices);\n\n      if (this.vertexFeature_) {\n        const vertex = this.vertexFeature_.getGeometry().getCoordinates();\n        for (let j = insertVertices.length - 1; j >= 0; --j) {\n          this.insertVertex_(insertVertices[j], vertex);\n        }\n        this.ignoreNextSingleClick_ = true;\n      }\n    }\n\n    return !!this.vertexFeature_;\n  }\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default} evt Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleUpEvent(evt) {\n    // Tracing inserts and removes vertices with guarded geometry mutations (so\n    // that dragSegments_ survive the drag). Those guarded mutations skip the\n    // segment rBush rebuild that handleFeatureChange_ would normally do, so the\n    // rBush no longer matches the traced geometry. Collect the affected features\n    // here and rebuild their segment data once the drag is over.\n    const tracedFeatures = this.traceState_.active ? new Set() : null;\n    for (let i = this.dragSegments_.length - 1; i >= 0; --i) {\n      const segmentData = this.dragSegments_[i][0];\n      if (tracedFeatures) {\n        tracedFeatures.add(segmentData.feature);\n      }\n      const geometry = segmentData.geometry;\n      if (geometry.getType() === 'Circle') {\n        const circle = /** @type {import(\"../geom/Circle.js\").default} */ (\n          geometry\n        );\n        // Update a circle object in the R* bush:\n        const coordinates = circle.getCenter();\n        const centerSegmentData = segmentData.featureSegments[0];\n        const circumferenceSegmentData = segmentData.featureSegments[1];\n        centerSegmentData.segment[0] = coordinates;\n        centerSegmentData.segment[1] = coordinates;\n        circumferenceSegmentData.segment[0] = coordinates;\n        circumferenceSegmentData.segment[1] = coordinates;\n        this.rBush_.update(createExtent(coordinates), centerSegmentData);\n        /** @type {import(\"../geom/Circle.js\").default | import(\"../geom/Polygon.js\").default} */\n        let circleGeometry = circle;\n        const userProjection = getUserProjection();\n        if (userProjection) {\n          const projection = evt.map.getView().getProjection();\n          circleGeometry = circleGeometry\n            .clone()\n            .transform(userProjection, projection);\n          circleGeometry = fromCircle(circleGeometry).transform(\n            projection,\n            userProjection,\n          );\n        }\n        this.rBush_.update(\n          circleGeometry.getExtent(),\n          circumferenceSegmentData,\n        );\n      } else {\n        this.rBush_.update(boundingExtent(segmentData.segment), segmentData);\n      }\n    }\n    if (tracedFeatures) {\n      for (const feature of tracedFeatures) {\n        this.removeFeature_(feature);\n        if (this.filter_(feature)) {\n          this.addFeature_(feature);\n        }\n      }\n    }\n    if (this.featuresBeingModified_) {\n      this.toggleTraceState_(evt);\n      this.dispatchEvent(\n        new ModifyEvent(\n          ModifyEventType.MODIFYEND,\n          this.featuresBeingModified_,\n          evt,\n        ),\n      );\n      this.featuresBeingModified_ = null;\n    }\n    return false;\n  }\n\n  /**\n   * @param {import(\"../MapBrowserEvent.js\").default} evt Event.\n   * @private\n   */\n  handlePointerMove_(evt) {\n    this.lastCoordinate_ = evt.coordinate;\n    this.handlePointerAtPixel_(this.lastCoordinate_);\n  }\n\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} pixelCoordinate The pixel Coordinate.\n   * @private\n   */\n  handlePointerAtPixel_(pixelCoordinate) {\n    const map = this.getMap();\n    const pixel = map.getPixelFromCoordinate(pixelCoordinate);\n    const projection = map.getView().getProjection();\n    const sortByDistance = function (a, b) {\n      return (\n        projectedDistanceToSegmentDataSquared(pixelCoordinate, a, projection) -\n        projectedDistanceToSegmentDataSquared(pixelCoordinate, b, projection)\n      );\n    };\n\n    /** @type {Array<SegmentData>|undefined} */\n    let nodes;\n    /** @type {Point|undefined} */\n    let hitPointGeometry;\n    if (this.hitDetection_) {\n      const layerFilter =\n        typeof this.hitDetection_ === 'object'\n          ? (layer) => layer === this.hitDetection_\n          : undefined;\n      map.forEachFeatureAtPixel(\n        pixel,\n        (feature, layer, geometry) => {\n          if (geometry && geometry.getType() === 'Point') {\n            geometry = new Point(\n              toUserCoordinate(geometry.getCoordinates(), projection),\n            );\n          }\n          const geom = geometry || feature.getGeometry();\n\n          if (\n            geom &&\n            geom.getType() === 'Point' &&\n            feature instanceof Feature &&\n            this.features_.includes(feature)\n          ) {\n            hitPointGeometry = /** @type {Point} */ (geom);\n            const coordinate = /** @type {Point} */ (feature.getGeometry())\n              .getFlatCoordinates()\n              .slice(0, 2);\n            nodes = [\n              {\n                feature,\n                geometry: hitPointGeometry,\n                segment: [coordinate, coordinate],\n              },\n            ];\n          }\n          return true;\n        },\n        {layerFilter},\n      );\n    }\n    if (!nodes) {\n      const viewExtent = fromUserExtent(\n        createExtent(pixelCoordinate, tempExtent),\n        projection,\n      );\n      const buffer = map.getView().getResolution() * this.pixelTolerance_;\n      const box = toUserExtent(\n        bufferExtent(viewExtent, buffer, tempExtent),\n        projection,\n      );\n      nodes = this.rBush_.getInExtent(box);\n    }\n\n    if (nodes && nodes.length > 0) {\n      const node = nodes.sort(sortByDistance)[0];\n      const closestSegment = node.segment;\n      let vertex = closestOnSegmentData(pixelCoordinate, node, projection);\n      const vertexPixel = map.getPixelFromCoordinate(vertex);\n      let dist = coordinateDistance(pixel, vertexPixel);\n      if (hitPointGeometry || dist <= this.pixelTolerance_) {\n        /** @type {Object<string, boolean>} */\n        const vertexSegments = {};\n        vertexSegments[getUid(closestSegment)] = true;\n\n        if (!this.snapToPointer_) {\n          this.delta_[0] = vertex[0] - pixelCoordinate[0];\n          this.delta_[1] = vertex[1] - pixelCoordinate[1];\n        }\n        if (\n          node.geometry.getType() === 'Circle' &&\n          node.index === CIRCLE_CIRCUMFERENCE_INDEX\n        ) {\n          this.snappedToVertex_ = true;\n          this.createOrUpdateVertexFeature_(\n            vertex,\n            [node.feature],\n            [node.geometry],\n            this.snappedToVertex_,\n          );\n        } else {\n          const pixel1 = map.getPixelFromCoordinate(closestSegment[0]);\n          const pixel2 = map.getPixelFromCoordinate(closestSegment[1]);\n          const squaredDist1 = squaredCoordinateDistance(vertexPixel, pixel1);\n          const squaredDist2 = squaredCoordinateDistance(vertexPixel, pixel2);\n          dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));\n          this.snappedToVertex_ = dist <= this.pixelTolerance_;\n          // Stop and cleanup overlay vertex feature if a segment was hit and new vertex creation is not allowed by the insertVertexCondition\n          if (\n            !this.snappedToVertex_ &&\n            !this.insertVertexCondition_(this.lastPointerEvent_)\n          ) {\n            if (this.vertexFeature_) {\n              this.overlay_.getSource().removeFeature(this.vertexFeature_);\n              this.vertexFeature_ = null;\n            }\n            return;\n          }\n          if (this.snappedToVertex_) {\n            vertex =\n              squaredDist1 > squaredDist2\n                ? closestSegment[1]\n                : closestSegment[0];\n          }\n          this.createOrUpdateVertexFeature_(\n            vertex,\n            [node.feature],\n            [node.geometry],\n            this.snappedToVertex_,\n          );\n          const geometries = {};\n          geometries[getUid(node.geometry)] = true;\n          for (let i = 1, ii = nodes.length; i < ii; ++i) {\n            const segment = nodes[i].segment;\n            if (\n              (this.coordinatesEqual_(closestSegment[0], segment[0]) &&\n                this.coordinatesEqual_(closestSegment[1], segment[1])) ||\n              (this.coordinatesEqual_(closestSegment[0], segment[1]) &&\n                this.coordinatesEqual_(closestSegment[1], segment[0]))\n            ) {\n              const geometryUid = getUid(nodes[i].geometry);\n              if (!(geometryUid in geometries)) {\n                geometries[geometryUid] = true;\n                vertexSegments[getUid(segment)] = true;\n              }\n            } else {\n              break;\n            }\n          }\n        }\n\n        this.vertexSegments_ = vertexSegments;\n        return;\n      }\n    }\n    if (this.vertexFeature_) {\n      this.overlay_.getSource().removeFeature(this.vertexFeature_);\n      this.vertexFeature_ = null;\n    }\n  }\n\n  /**\n   * @param {SegmentData} segmentData Segment data.\n   * @param {import(\"../coordinate.js\").Coordinate} vertex Vertex.\n   * @return {boolean} A vertex was inserted.\n   * @private\n   */\n  insertVertex_(segmentData, vertex) {\n    const segment = segmentData.segment;\n    const feature = segmentData.feature;\n    const geometry = segmentData.geometry;\n    const depth = segmentData.depth;\n    const index = segmentData.index;\n    let coordinates;\n\n    while (vertex.length < geometry.getStride()) {\n      vertex.push(0);\n    }\n\n    switch (geometry.getType()) {\n      case 'MultiLineString':\n        coordinates = geometry.getCoordinates();\n        coordinates[depth[0]].splice(index + 1, 0, vertex);\n        break;\n      case 'Polygon':\n        coordinates = geometry.getCoordinates();\n        coordinates[depth[0]].splice(index + 1, 0, vertex);\n        break;\n      case 'MultiPolygon':\n        coordinates = geometry.getCoordinates();\n        coordinates[depth[1]][depth[0]].splice(index + 1, 0, vertex);\n        break;\n      case 'LineString':\n        coordinates = geometry.getCoordinates();\n        coordinates.splice(index + 1, 0, vertex);\n        break;\n      default:\n        return false;\n    }\n\n    this.setGeometryCoordinates_(geometry, coordinates);\n    const rTree = this.rBush_;\n    rTree.remove(segmentData);\n    this.updateSegmentIndices_(geometry, index, depth, 1);\n\n    /** @type {SegmentData} */\n    const newSegmentData = {\n      segment: [segment[0], vertex],\n      feature: feature,\n      geometry: geometry,\n      depth: depth,\n      index: index,\n    };\n\n    rTree.insert(boundingExtent(newSegmentData.segment), newSegmentData);\n    this.dragSegments_.push([newSegmentData, 1]);\n\n    /** @type {SegmentData} */\n    const newSegmentData2 = {\n      segment: [vertex, segment[1]],\n      feature: feature,\n      geometry: geometry,\n      depth: depth,\n      index: index + 1,\n    };\n\n    rTree.insert(boundingExtent(newSegmentData2.segment), newSegmentData2);\n    this.dragSegments_.push([newSegmentData2, 0]);\n    return true;\n  }\n\n  /**\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate The coordinate.\n   * @return {import(\"../coordinate.js\").Coordinate} The updated pointer coordinate.\n   * @private\n   */\n  updatePointer_(coordinate) {\n    if (coordinate) {\n      this.findInsertVerticesAndUpdateDragSegments_(coordinate);\n    }\n    return this.vertexFeature_?.getGeometry().getCoordinates();\n  }\n\n  /**\n   * Get the current pointer position.\n   * @return {import(\"../coordinate.js\").Coordinate | null} The current pointer coordinate.\n   */\n  getPoint() {\n    const coordinate = this.vertexFeature_?.getGeometry().getCoordinates();\n    if (!coordinate) {\n      return null;\n    }\n    return toUserCoordinate(\n      coordinate,\n      this.getMap().getView().getProjection(),\n    );\n  }\n\n  /**\n   * Check if a point can be removed from the current linestring or polygon at the current\n   * pointer position.\n   * @return {boolean} A point can be deleted at the current pointer position.\n   * @api\n   */\n  canRemovePoint() {\n    if (!this.vertexFeature_) {\n      return false;\n    }\n    if (\n      this.vertexFeature_\n        .get('geometries')\n        .every(\n          (geometry) =>\n            geometry.getType() === 'Circle' ||\n            geometry.getType().endsWith('Point'),\n        )\n    ) {\n      return false;\n    }\n    const coordinate = this.vertexFeature_.getGeometry().getCoordinates();\n    const segments = this.rBush_.getInExtent(boundingExtent([coordinate]));\n    return segments.some(\n      ({segment}) =>\n        this.coordinatesEqual_(segment[0], coordinate) ||\n        this.coordinatesEqual_(segment[1], coordinate),\n    );\n  }\n\n  /**\n   * Removes the vertex currently being pointed from the current linestring or polygon.\n   * @param {import('../coordinate.js').Coordinate} [coordinate] If provided, the pointer\n   * will be set to the provided coordinate. If not, the current pointer coordinate will be used.\n   * @return {boolean} True when a vertex was removed.\n   * @api\n   */\n  removePoint(coordinate) {\n    if (coordinate) {\n      coordinate = fromUserCoordinate(\n        coordinate,\n        this.getMap().getView().getProjection(),\n      );\n      this.updatePointer_(coordinate);\n    }\n    if (\n      !this.lastPointerEvent_ ||\n      (this.lastPointerEvent_ &&\n        this.lastPointerEvent_.type != MapBrowserEventType.POINTERDRAG)\n    ) {\n      const evt = this.lastPointerEvent_;\n      this.willModifyFeatures_(\n        evt,\n        this.dragSegments_.map(([segment]) => segment),\n      );\n      const removed = this.removeVertex_();\n      if (this.featuresBeingModified_) {\n        this.dispatchEvent(\n          new ModifyEvent(\n            ModifyEventType.MODIFYEND,\n            this.featuresBeingModified_,\n            evt,\n          ),\n        );\n      }\n\n      this.featuresBeingModified_ = null;\n      return removed;\n    }\n    return false;\n  }\n\n  /**\n   * Removes a vertex from all matching features.\n   * @return {boolean} True when a vertex was removed.\n   * @private\n   */\n  removeVertex_() {\n    const dragSegments = this.dragSegments_;\n    const segmentsByFeature = {};\n    let deleted = false;\n    let component, coordinates, dragSegment, geometry, i, index, left;\n    let newIndex, right, segmentData, uid;\n    for (i = dragSegments.length - 1; i >= 0; --i) {\n      dragSegment = dragSegments[i];\n      segmentData = dragSegment[0];\n      uid = getUid(segmentData.feature);\n      if (segmentData.depth) {\n        // separate feature components\n        uid += '-' + segmentData.depth.join('-');\n      }\n      if (!(uid in segmentsByFeature)) {\n        segmentsByFeature[uid] = {};\n      }\n      if (dragSegment[1] === 0) {\n        segmentsByFeature[uid].right = segmentData;\n        segmentsByFeature[uid].index = segmentData.index;\n      } else if (dragSegment[1] == 1) {\n        segmentsByFeature[uid].left = segmentData;\n        segmentsByFeature[uid].index = segmentData.index + 1;\n      }\n    }\n    for (uid in segmentsByFeature) {\n      right = segmentsByFeature[uid].right;\n      left = segmentsByFeature[uid].left;\n      index = segmentsByFeature[uid].index;\n      newIndex = index - 1;\n      if (left !== undefined) {\n        segmentData = left;\n      } else {\n        segmentData = right;\n      }\n      if (newIndex < 0) {\n        newIndex = 0;\n      }\n      geometry = segmentData.geometry;\n      coordinates = geometry.getCoordinates();\n      component = coordinates;\n      deleted = false;\n      switch (geometry.getType()) {\n        case 'MultiLineString':\n          if (coordinates[segmentData.depth[0]].length > 2) {\n            coordinates[segmentData.depth[0]].splice(index, 1);\n            deleted = true;\n          }\n          break;\n        case 'LineString':\n          if (coordinates.length > 2) {\n            coordinates.splice(index, 1);\n            deleted = true;\n          }\n          break;\n        case 'MultiPolygon':\n          component = component[segmentData.depth[1]];\n        /* falls through */\n        case 'Polygon':\n          component = component[segmentData.depth[0]];\n          if (component.length > 4) {\n            if (index == component.length - 1) {\n              index = 0;\n            }\n            component.splice(index, 1);\n            deleted = true;\n            if (index === 0) {\n              // close the ring again\n              component.pop();\n              component.push(component[0]);\n              newIndex = component.length - 1;\n            }\n          }\n          break;\n        default:\n        // pass\n      }\n\n      if (deleted) {\n        this.setGeometryCoordinates_(geometry, coordinates);\n        const segments = [];\n        if (left !== undefined) {\n          this.rBush_.remove(left);\n          segments.push(left.segment[0]);\n        }\n        if (right !== undefined) {\n          this.rBush_.remove(right);\n          segments.push(right.segment[1]);\n        }\n        if (left !== undefined && right !== undefined) {\n          /** @type {SegmentData} */\n          const newSegmentData = {\n            depth: segmentData.depth,\n            feature: segmentData.feature,\n            geometry: segmentData.geometry,\n            index: newIndex,\n            segment: segments,\n          };\n\n          this.rBush_.insert(\n            boundingExtent(newSegmentData.segment),\n            newSegmentData,\n          );\n        }\n        this.updateSegmentIndices_(geometry, index, segmentData.depth, -1);\n        if (this.vertexFeature_) {\n          this.overlay_.getSource().removeFeature(this.vertexFeature_);\n          this.vertexFeature_ = null;\n        }\n        dragSegments.length = 0;\n      }\n    }\n    return deleted;\n  }\n\n  /**\n   * Check if a point can be inserted to the current linestring or polygon at the current\n   * pointer position.\n   * @return {boolean} A point can be inserted at the current pointer position.\n   * @api\n   */\n  canInsertPoint() {\n    if (!this.vertexFeature_) {\n      return false;\n    }\n    if (\n      this.vertexFeature_\n        .get('geometries')\n        .every(\n          (geometry) =>\n            geometry.getType() === 'Circle' ||\n            geometry.getType().endsWith('Point'),\n        )\n    ) {\n      return false;\n    }\n    const coordinate = this.vertexFeature_.getGeometry().getCoordinates();\n    const segments = this.rBush_.getInExtent(boundingExtent([coordinate]));\n    return segments.some(\n      ({segment}) =>\n        !(\n          this.coordinatesEqual_(segment[0], coordinate) ||\n          this.coordinatesEqual_(segment[1], coordinate)\n        ),\n    );\n  }\n\n  /**\n   * Inserts the vertex currently being pointed to the current linestring or polygon.\n   * @param {import('../coordinate.js').Coordinate} [coordinate] If provided, the pointer\n   * will be set to the provided coordinate. If not, the current pointer coordinate will be used.\n   * @return {boolean} A vertex was inserted.\n   * @api\n   */\n  insertPoint(coordinate) {\n    const pixelCoordinate = coordinate\n      ? fromUserCoordinate(coordinate, this.getMap().getView().getProjection())\n      : this.vertexFeature_?.getGeometry().getCoordinates();\n    if (!pixelCoordinate) {\n      return false;\n    }\n    const insertVertices =\n      this.findInsertVerticesAndUpdateDragSegments_(pixelCoordinate);\n    return insertVertices.reduce(\n      (prev, segmentData) =>\n        prev || this.insertVertex_(segmentData, pixelCoordinate),\n      false,\n    );\n  }\n\n  /**\n   * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n   * @param {Array} coordinates Coordinates.\n   * @private\n   */\n  setGeometryCoordinates_(geometry, coordinates) {\n    this.changingFeature_ = true;\n    geometry.setCoordinates(coordinates);\n    this.changingFeature_ = false;\n  }\n\n  /**\n   * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n   * @param {number} index Index.\n   * @param {Array<number>|undefined} depth Depth.\n   * @param {number} delta Delta (1 or -1).\n   * @private\n   */\n  updateSegmentIndices_(geometry, index, depth, delta) {\n    this.rBush_.forEachInExtent(\n      geometry.getExtent(),\n      function (segmentDataMatch) {\n        if (\n          segmentDataMatch.geometry === geometry &&\n          (depth === undefined ||\n            segmentDataMatch.depth === undefined ||\n            equals(segmentDataMatch.depth, depth)) &&\n          segmentDataMatch.index > index\n        ) {\n          segmentDataMatch.index += delta;\n        }\n      },\n    );\n  }\n\n  /**\n   * @override\n   */\n  disposeInternal() {\n    super.disposeInternal();\n    if (this.featuresCollection_) {\n      this.featuresCollection_.removeEventListener(\n        CollectionEventType.ADD,\n        this.handleExternalCollectionAdd_,\n      );\n      this.featuresCollection_.removeEventListener(\n        CollectionEventType.REMOVE,\n        this.handleExternalCollectionRemove_,\n      );\n      //change and propertychange event handlers were placed on all features in the external\n      // collection, not just the ones that passed the filter.  Remove these too.\n      for (const feature of this.featuresCollection_.getArray()) {\n        feature.removeEventListener(\n          EventType.CHANGE,\n          this.handleFeatureChange_,\n        );\n        if (this.filterFunctionWasSupplied_) {\n          feature.removeEventListener(\n            ObjectEventType.PROPERTYCHANGE,\n            this.handleFeatureChange_,\n          );\n        }\n      }\n    } else if (this.source_) {\n      this.source_.removeEventListener(\n        VectorEventType.ADDFEATURE,\n        this.handleSourceAdd_,\n      );\n      this.source_.removeEventListener(\n        VectorEventType.REMOVEFEATURE,\n        this.handleSourceRemove_,\n      );\n      //change and propertychange event handlers were placed on all features in the source, not\n      // just the ones that passed the filter.  Remove these too.\n      for (const feature of this.source_.getFeatures()) {\n        feature.removeEventListener(\n          EventType.CHANGE,\n          this.handleFeatureChange_,\n        );\n        if (this.filterFunctionWasSupplied_) {\n          feature.removeEventListener(\n            ObjectEventType.PROPERTYCHANGE,\n            this.handleFeatureChange_,\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * @param {SegmentData} a The first segment data.\n * @param {SegmentData} b The second segment data.\n * @return {number} The difference in indexes.\n */\nfunction compareIndexes(a, b) {\n  return a.index - b.index;\n}\n\n/**\n * Returns the distance from a point to a line segment.\n *\n * @param {import(\"../coordinate.js\").Coordinate} pointCoordinates The coordinates of the point from\n *        which to calculate the distance.\n * @param {SegmentData} segmentData The object describing the line\n *        segment we are calculating the distance to.\n * @param {import(\"../proj/Projection.js\").default} projection The view projection.\n * @return {number} The square of the distance between a point and a line segment.\n */\nfunction projectedDistanceToSegmentDataSquared(\n  pointCoordinates,\n  segmentData,\n  projection,\n) {\n  const geometry = segmentData.geometry;\n\n  if (geometry.getType() === 'Circle') {\n    let circleGeometry = /** @type {import(\"../geom/Circle.js\").default} */ (\n      geometry\n    );\n\n    if (segmentData.index === CIRCLE_CIRCUMFERENCE_INDEX) {\n      const userProjection = getUserProjection();\n      if (userProjection) {\n        circleGeometry = circleGeometry\n          .clone()\n          .transform(userProjection, projection);\n      }\n      const distanceToCenterSquared = squaredCoordinateDistance(\n        circleGeometry.getCenter(),\n        fromUserCoordinate(pointCoordinates, projection),\n      );\n      const distanceToCircumference =\n        Math.sqrt(distanceToCenterSquared) - circleGeometry.getRadius();\n      return distanceToCircumference * distanceToCircumference;\n    }\n  }\n\n  const coordinate = fromUserCoordinate(pointCoordinates, projection);\n  tempSegment[0] = fromUserCoordinate(segmentData.segment[0], projection);\n  tempSegment[1] = fromUserCoordinate(segmentData.segment[1], projection);\n  return squaredDistanceToSegment(coordinate, tempSegment);\n}\n\n/**\n * Returns the point closest to a given line segment.\n *\n * @param {import(\"../coordinate.js\").Coordinate} pointCoordinates The point to which a closest point\n *        should be found.\n * @param {SegmentData} segmentData The object describing the line\n *        segment which should contain the closest point.\n * @param {import(\"../proj/Projection.js\").default} projection The view projection.\n * @return {import(\"../coordinate.js\").Coordinate} The point closest to the specified line segment.\n */\nfunction closestOnSegmentData(pointCoordinates, segmentData, projection) {\n  const geometry = segmentData.geometry;\n\n  if (\n    geometry.getType() === 'Circle' &&\n    segmentData.index === CIRCLE_CIRCUMFERENCE_INDEX\n  ) {\n    let circleGeometry = /** @type {import(\"../geom/Circle.js\").default} */ (\n      geometry\n    );\n    const userProjection = getUserProjection();\n    if (userProjection) {\n      circleGeometry = circleGeometry\n        .clone()\n        .transform(userProjection, projection);\n    }\n    return toUserCoordinate(\n      circleGeometry.getClosestPoint(\n        fromUserCoordinate(pointCoordinates, projection),\n      ),\n      projection,\n    );\n  }\n  const coordinate = fromUserCoordinate(pointCoordinates, projection);\n  tempSegment[0] = fromUserCoordinate(segmentData.segment[0], projection);\n  tempSegment[1] = fromUserCoordinate(segmentData.segment[1], projection);\n  return toUserCoordinate(\n    closestOnSegment(coordinate, tempSegment),\n    projection,\n  );\n}\n\n/**\n * @return {import(\"../style/Style.js\").StyleFunction} Styles.\n */\nfunction getDefaultStyleFunction() {\n  const style = createEditingStyle();\n  return function (feature, resolution) {\n    return style['Point'];\n  };\n}\n\nexport default Modify;\n","/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {all, always, focusWithTabindex} from '../events/condition.js';\nimport {clamp} from '../math.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\n\n/**\n * @typedef {'trackpad' | 'wheel'} Mode\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n\n/**\n * Mutliplier for the DOM_DELTA_LINE delta value.\n * @type {number}\n */\nconst DELTA_LINE_MULTIPLIER = 40;\n\n/**\n * Mutliplier for the DOM_DELTA_PAGE delta value.\n * @type {number}\n */\nconst DELTA_PAGE_MULTIPLIER = 300;\n\n/**\n * Mutliplier for the delta value when using pinch-to-zoom\n * @type {number}\n */\nconst DELTA_TRACKPAD_PINCH_TO_ZOOM_MULTIPLIER = 3; // 5 = google maps. 3 = apple maps, MapLibre.\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nclass MouseWheelZoom extends Interaction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super(\n      /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options),\n    );\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.totalDelta_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.lastDelta_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.useAnchor_ =\n      options.useAnchor !== undefined ? options.useAnchor : true;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.constrainResolution_ =\n      options.constrainResolution !== undefined\n        ? options.constrainResolution\n        : false;\n\n    const condition = options.condition ? options.condition : always;\n\n    /**\n     * @private\n     * @type {import(\"../events/condition.js\").Condition}\n     */\n    this.condition_ = options.onFocusOnly\n      ? all(focusWithTabindex, condition)\n      : condition;\n\n    /**\n     * @private\n     * @type {?import(\"../pixel.js\").Pixel}\n     */\n    this.lastAnchor_ = null;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.startTime_ = undefined;\n\n    /**\n     * @private\n     * @type {ReturnType<typeof setTimeout>}\n     */\n    this.timeoutId_;\n\n    /**\n     * @private\n     * @type {Mode|undefined}\n     */\n    this.mode_ = undefined;\n\n    /**\n     * Trackpad events separated by this delay will be considered separate\n     * interactions.\n     * @private\n     * @type {number}\n     */\n    this.trackpadEventGap_ = 400;\n\n    /**\n     * @private\n     * @type {ReturnType<typeof setTimeout>}\n     */\n    this.trackpadTimeoutId_;\n\n    /**\n     * The number of delta values per zoom level\n     * @private\n     * @type {number}\n     */\n    this.deltaPerZoom_ = 300;\n\n    /**\n     * Tracks whether the Ctrl key is physically held down (as opposed to the\n     * browser synthesizing ctrlKey=true for pinch-to-zoom trackpad gestures).\n     * @private\n     * @type {boolean}\n     */\n    this.ctrlKeyPressed_ = false;\n\n    /**\n     * @private\n     * @type {Array<import('../events.js').EventsKey>}\n     */\n    this.ctrlKeyListenerKeys_ = [];\n  }\n\n  /**\n   * @param {import('../Map.js').default|null} map Map.\n   * @override\n   */\n  setMap(map) {\n    this.ctrlKeyListenerKeys_.forEach(unlistenByKey);\n    this.ctrlKeyListenerKeys_.length = 0;\n    this.ctrlKeyPressed_ = false;\n    super.setMap(map);\n    if (map) {\n      const doc = map.getOwnerDocument();\n      this.ctrlKeyListenerKeys_.push(\n        listen(doc, 'keydown', (/** @type {KeyboardEvent} */ e) => {\n          if (e.key === 'Control') {\n            this.ctrlKeyPressed_ = true;\n          }\n        }),\n        listen(doc, 'keyup', (/** @type {KeyboardEvent} */ e) => {\n          if (e.key === 'Control') {\n            this.ctrlKeyPressed_ = false;\n          }\n        }),\n      );\n    }\n  }\n\n  /**\n   * @private\n   */\n  endInteraction_() {\n    this.trackpadTimeoutId_ = undefined;\n    const map = this.getMap();\n    if (!map) {\n      return;\n    }\n    const view = map.getView();\n    const direction = this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0;\n    view.endInteraction(\n      this.constrainResolution_ || view.getConstrainResolution()\n        ? 100\n        : undefined,\n      direction,\n      this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n    );\n  }\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n   * zooms the map.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @override\n   */\n  handleEvent(mapBrowserEvent) {\n    if (!this.condition_(mapBrowserEvent)) {\n      return true;\n    }\n    const type = mapBrowserEvent.type;\n    if (type !== EventType.WHEEL) {\n      return true;\n    }\n\n    const map = mapBrowserEvent.map;\n    const wheelEvent = /** @type {WheelEvent} */ (\n      mapBrowserEvent.originalEvent\n    );\n    wheelEvent.preventDefault();\n\n    const isPinchToZoom = wheelEvent.ctrlKey && !this.ctrlKeyPressed_;\n    if (!wheelEvent.ctrlKey) {\n      this.ctrlKeyPressed_ = false;\n    }\n\n    if (this.useAnchor_) {\n      this.lastAnchor_ = mapBrowserEvent.pixel;\n    }\n\n    // Delta normalisation inspired by\n    // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n    let delta = wheelEvent.deltaY;\n\n    switch (wheelEvent.deltaMode) {\n      case WheelEvent.DOM_DELTA_LINE:\n        delta *= DELTA_LINE_MULTIPLIER;\n        break;\n      case WheelEvent.DOM_DELTA_PAGE:\n        delta *= DELTA_PAGE_MULTIPLIER;\n        break;\n      default:\n      // pass\n    }\n\n    if (delta === 0) {\n      return false;\n    }\n    this.lastDelta_ = delta;\n\n    const now = Date.now();\n\n    if (this.startTime_ === undefined) {\n      this.startTime_ = now;\n    }\n\n    if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n      this.mode_ = Math.abs(delta) < 4 ? 'trackpad' : 'wheel';\n    }\n\n    const view = map.getView();\n    if (this.mode_ === 'trackpad') {\n      if (this.trackpadTimeoutId_) {\n        clearTimeout(this.trackpadTimeoutId_);\n      } else {\n        if (view.getAnimating()) {\n          view.cancelAnimations();\n        }\n        view.beginInteraction();\n      }\n      this.trackpadTimeoutId_ = setTimeout(\n        this.endInteraction_.bind(this),\n        this.timeout_,\n      );\n      if (isPinchToZoom) {\n        delta = delta * DELTA_TRACKPAD_PINCH_TO_ZOOM_MULTIPLIER;\n      }\n      view.adjustZoom(\n        -delta / this.deltaPerZoom_,\n        this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n      );\n      this.startTime_ = now;\n      return false;\n    }\n\n    this.totalDelta_ += delta;\n\n    const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n\n    clearTimeout(this.timeoutId_);\n    this.timeoutId_ = setTimeout(\n      this.handleWheelZoom_.bind(this, map),\n      timeLeft,\n    );\n\n    return false;\n  }\n\n  /**\n   * @private\n   * @param {import(\"../Map.js\").default} map Map.\n   */\n  handleWheelZoom_(map) {\n    const view = map.getView();\n    if (view.getAnimating()) {\n      view.cancelAnimations();\n    }\n    let delta =\n      -clamp(\n        this.totalDelta_,\n        -this.maxDelta_ * this.deltaPerZoom_,\n        this.maxDelta_ * this.deltaPerZoom_,\n      ) / this.deltaPerZoom_;\n    if (view.getConstrainResolution() || this.constrainResolution_) {\n      // view has a zoom constraint, zoom by 1\n      delta = delta ? (delta > 0 ? 1 : -1) : 0;\n    }\n    zoomByDelta(\n      view,\n      delta,\n      this.lastAnchor_ ? map.getCoordinateFromPixel(this.lastAnchor_) : null,\n      this.duration_,\n    );\n\n    this.mode_ = undefined;\n    this.totalDelta_ = 0;\n    this.lastAnchor_ = null;\n    this.startTime_ = undefined;\n    this.timeoutId_ = undefined;\n  }\n\n  /**\n   * Enable or disable using the mouse's location as an anchor when zooming\n   * @param {boolean} useAnchor true to zoom to the mouse's location, false\n   * to zoom to the center of the map\n   * @api\n   */\n  setMouseAnchor(useAnchor) {\n    this.useAnchor_ = useAnchor;\n    if (!useAnchor) {\n      this.lastAnchor_ = null;\n    }\n  }\n}\n\nexport default MouseWheelZoom;\n","/**\n * @module ol/interaction/PinchRotate\n */\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\nimport PointerInteraction, {\n  centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchRotate extends PointerInteraction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n      options\n    );\n\n    if (!pointerOptions.stopDown) {\n      pointerOptions.stopDown = FALSE;\n    }\n\n    super(pointerOptions);\n\n    /**\n     * @private\n     * @type {import(\"../coordinate.js\").Coordinate}\n     */\n    this.anchor_ = null;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.lastAngle_ = undefined;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.rotating_ = false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.rotationDelta_ = 0.0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 250;\n  }\n\n  /**\n   * Handle pointer drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @override\n   */\n  handleDragEvent(mapBrowserEvent) {\n    let rotationDelta = 0.0;\n\n    const touch0 = this.targetPointers[0];\n    const touch1 = this.targetPointers[1];\n\n    // angle between touches\n    const angle = Math.atan2(\n      touch1.clientY - touch0.clientY,\n      touch1.clientX - touch0.clientX,\n    );\n\n    if (this.lastAngle_ !== undefined) {\n      const delta = angle - this.lastAngle_;\n      this.rotationDelta_ += delta;\n      if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n        this.rotating_ = true;\n      }\n      rotationDelta = delta;\n    }\n    this.lastAngle_ = angle;\n\n    const map = mapBrowserEvent.map;\n    const view = map.getView();\n    if (view.getConstraints().rotation === disable) {\n      return;\n    }\n\n    // rotate anchor point.\n    // FIXME: should be the intersection point between the lines:\n    //     touch0,touch1 and previousTouch0,previousTouch1\n    this.anchor_ = map.getCoordinateFromPixelInternal(\n      map.getEventPixel(centroidFromPointers(this.targetPointers)),\n    );\n\n    // rotate\n    if (this.rotating_) {\n      map.render();\n      view.adjustRotationInternal(rotationDelta, this.anchor_);\n    }\n  }\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleUpEvent(mapBrowserEvent) {\n    if (this.targetPointers.length < 2) {\n      const map = mapBrowserEvent.map;\n      const view = map.getView();\n      view.endInteraction(this.duration_);\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleDownEvent(mapBrowserEvent) {\n    if (this.targetPointers.length >= 2) {\n      const map = mapBrowserEvent.map;\n      this.anchor_ = null;\n      this.lastAngle_ = undefined;\n      this.rotating_ = false;\n      this.rotationDelta_ = 0.0;\n      if (!this.handlingDownUpSequence) {\n        map.getView().beginInteraction();\n      }\n      return true;\n    }\n    return false;\n  }\n}\n\nexport default PinchRotate;\n","/**\n * @module ol/interaction/PinchZoom\n */\nimport {FALSE} from '../functions.js';\nimport PointerInteraction, {\n  centroid as centroidFromPointers,\n} from './Pointer.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchZoom extends PointerInteraction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n      options\n    );\n\n    if (!pointerOptions.stopDown) {\n      pointerOptions.stopDown = FALSE;\n    }\n\n    super(pointerOptions);\n\n    /**\n     * @private\n     * @type {import(\"../coordinate.js\").Coordinate}\n     */\n    this.anchor_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.lastDistance_ = undefined;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.lastScaleDelta_ = 1;\n  }\n\n  /**\n   * Handle pointer drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @override\n   */\n  handleDragEvent(mapBrowserEvent) {\n    let scaleDelta = 1.0;\n\n    const touch0 = this.targetPointers[0];\n    const touch1 = this.targetPointers[1];\n    const dx = touch0.clientX - touch1.clientX;\n    const dy = touch0.clientY - touch1.clientY;\n\n    // distance between touches\n    const distance = Math.sqrt(dx * dx + dy * dy);\n\n    if (this.lastDistance_ !== undefined) {\n      scaleDelta = this.lastDistance_ / distance;\n    }\n    this.lastDistance_ = distance;\n\n    const map = mapBrowserEvent.map;\n    const view = map.getView();\n\n    if (scaleDelta != 1.0) {\n      this.lastScaleDelta_ = scaleDelta;\n    }\n\n    // scale anchor point.\n    this.anchor_ = map.getCoordinateFromPixelInternal(\n      map.getEventPixel(centroidFromPointers(this.targetPointers)),\n    );\n\n    // scale, bypass the resolution constraint\n    map.render();\n    view.adjustResolutionInternal(scaleDelta, this.anchor_);\n  }\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleUpEvent(mapBrowserEvent) {\n    if (this.targetPointers.length < 2) {\n      const map = mapBrowserEvent.map;\n      const view = map.getView();\n      const direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n      view.endInteraction(this.duration_, direction);\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @override\n   */\n  handleDownEvent(mapBrowserEvent) {\n    if (this.targetPointers.length >= 2) {\n      const map = mapBrowserEvent.map;\n      this.anchor_ = null;\n      this.lastDistance_ = undefined;\n      this.lastScaleDelta_ = 1;\n      if (!this.handlingDownUpSequence) {\n        map.getView().beginInteraction();\n      }\n      return true;\n    }\n    return false;\n  }\n}\n\nexport default PinchZoom;\n","/**\n * @module ol/interaction/Pointer\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport Interaction from './Interaction.js';\n\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n *  Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nclass PointerInteraction extends Interaction {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super(\n      /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options),\n    );\n\n    if (options.handleDownEvent) {\n      this.handleDownEvent = options.handleDownEvent;\n    }\n\n    if (options.handleDragEvent) {\n      this.handleDragEvent = options.handleDragEvent;\n    }\n\n    if (options.handleMoveEvent) {\n      this.handleMoveEvent = options.handleMoveEvent;\n    }\n\n    if (options.handleUpEvent) {\n      this.handleUpEvent = options.handleUpEvent;\n    }\n\n    if (options.stopDown) {\n      this.stopDown = options.stopDown;\n    }\n\n    /**\n     * @type {boolean}\n     * @protected\n     */\n    this.handlingDownUpSequence = false;\n\n    /**\n     * @type {Array<PointerEvent>}\n     * @protected\n     */\n    this.targetPointers = [];\n  }\n\n  /**\n   * Returns the current number of pointers involved in the interaction,\n   * e.g. `2` when two fingers are used.\n   * @return {number} The number of pointers.\n   * @api\n   */\n  getPointerCount() {\n    return this.targetPointers.length;\n  }\n\n  /**\n   * Handle pointer down events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @protected\n   */\n  handleDownEvent(mapBrowserEvent) {\n    return false;\n  }\n\n  /**\n   * Handle pointer drag events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @protected\n   */\n  handleDragEvent(mapBrowserEvent) {}\n\n  /**\n   * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may call into\n   * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n   * detected.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n   * @return {boolean} `false` to stop event propagation.\n   * @api\n   * @override\n   */\n  handleEvent(mapBrowserEvent) {\n    if (!mapBrowserEvent.originalEvent) {\n      return true;\n    }\n\n    let stopEvent = false;\n    this.updateTrackedPointers_(mapBrowserEvent);\n    if (this.handlingDownUpSequence) {\n      if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n        this.handleDragEvent(mapBrowserEvent);\n        // prevent page scrolling during dragging\n        mapBrowserEvent.originalEvent.preventDefault();\n      } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n        const handledUp = this.handleUpEvent(mapBrowserEvent);\n        this.handlingDownUpSequence =\n          handledUp && this.targetPointers.length > 0;\n      }\n    } else {\n      if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n        const handled = this.handleDownEvent(mapBrowserEvent);\n        this.handlingDownUpSequence = handled;\n        stopEvent = this.stopDown(handled);\n      } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n        this.handleMoveEvent(mapBrowserEvent);\n      }\n    }\n    return !stopEvent;\n  }\n\n  /**\n   * Handle pointer move events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @protected\n   */\n  handleMoveEvent(mapBrowserEvent) {}\n\n  /**\n   * Handle pointer up events.\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @return {boolean} If the event was consumed.\n   * @protected\n   */\n  handleUpEvent(mapBrowserEvent) {\n    return false;\n  }\n\n  /**\n   * This function is used to determine if \"down\" events should be propagated\n   * to other interactions or should be stopped.\n   * @param {boolean} handled Was the event handled by the interaction?\n   * @return {boolean} Should the `down` event be stopped?\n   */\n  stopDown(handled) {\n    return handled;\n  }\n\n  /**\n   * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n   * @private\n   */\n  updateTrackedPointers_(mapBrowserEvent) {\n    if (mapBrowserEvent.activePointers) {\n      this.targetPointers = mapBrowserEvent.activePointers;\n    }\n  }\n}\n\n/**\n * @param {Array<PointerEvent>} pointerEvents List of events.\n * @return {{clientX: number, clientY: number}} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n  const length = pointerEvents.length;\n  let clientX = 0;\n  let clientY = 0;\n  for (let i = 0; i < length; i++) {\n    clientX += pointerEvents[i].clientX;\n    clientY += pointerEvents[i].clientY;\n  }\n  return {clientX: clientX / length, clientY: clientY / length};\n}\n\nexport default PointerInteraction;\n","/**\n * @module ol/interaction/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  ACTIVE: 'active',\n};\n","/**\n * @module ol/interaction/defaults\n */\nimport Collection from '../Collection.js';\nimport Kinetic from '../Kinetic.js';\nimport DoubleClickZoom from './DoubleClickZoom.js';\nimport DragPan from './DragPan.js';\nimport DragRotate from './DragRotate.js';\nimport DragZoom from './DragZoom.js';\nimport KeyboardPan from './KeyboardPan.js';\nimport KeyboardZoom from './KeyboardZoom.js';\nimport MouseWheelZoom from './MouseWheelZoom.js';\nimport PinchRotate from './PinchRotate.js';\nimport PinchZoom from './PinchZoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed.  If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction~Interaction} instances and insert\n * them into a {@link module:ol/Collection~Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * {@link module:ol/interaction/DragRotate~DragRotate}\n * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * {@link module:ol/interaction/DragPan~DragPan}\n * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions} [options] Defaults options.\n * @return {Collection<import(\"./Interaction.js\").default>}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(options) {\n  options = options ? options : {};\n\n  /** @type {Collection<import(\"./Interaction.js\").default>} */\n  const interactions = new Collection();\n\n  const kinetic = new Kinetic(-0.005, 0.05, 100);\n\n  const altShiftDragRotate =\n    options.altShiftDragRotate !== undefined\n      ? options.altShiftDragRotate\n      : true;\n  if (altShiftDragRotate) {\n    interactions.push(new DragRotate());\n  }\n\n  const doubleClickZoom =\n    options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n  if (doubleClickZoom) {\n    interactions.push(\n      new DoubleClickZoom({\n        delta: options.zoomDelta,\n        duration: options.zoomDuration,\n      }),\n    );\n  }\n\n  const dragPan = options.dragPan !== undefined ? options.dragPan : true;\n  if (dragPan) {\n    interactions.push(\n      new DragPan({\n        onFocusOnly: options.onFocusOnly,\n        kinetic: kinetic,\n      }),\n    );\n  }\n\n  const pinchRotate =\n    options.pinchRotate !== undefined ? options.pinchRotate : true;\n  if (pinchRotate) {\n    interactions.push(new PinchRotate());\n  }\n\n  const pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n  if (pinchZoom) {\n    interactions.push(\n      new PinchZoom({\n        duration: options.zoomDuration,\n      }),\n    );\n  }\n\n  const keyboard = options.keyboard !== undefined ? options.keyboard : true;\n  if (keyboard) {\n    interactions.push(new KeyboardPan());\n    interactions.push(\n      new KeyboardZoom({\n        delta: options.zoomDelta,\n        duration: options.zoomDuration,\n      }),\n    );\n  }\n\n  const mouseWheelZoom =\n    options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n  if (mouseWheelZoom) {\n    interactions.push(\n      new MouseWheelZoom({\n        onFocusOnly: options.onFocusOnly,\n        duration: options.zoomDuration,\n      }),\n    );\n  }\n\n  const shiftDragZoom =\n    options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n  if (shiftDragZoom) {\n    interactions.push(\n      new DragZoom({\n        duration: options.zoomDuration,\n      }),\n    );\n  }\n\n  return interactions;\n}\n","/**\n * Coordinate type when drawing lines.\n * @typedef {Array<import(\"../coordinate.js\").Coordinate>} LineCoordType\n */\n\nimport {distance} from '../coordinate.js';\nimport GeometryCollection from '../geom/GeometryCollection.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Polygon from '../geom/Polygon.js';\nimport {clamp, squaredDistance, toFixed} from '../math.js';\n\n/**\n * @param {LineCoordType} coordinates The ring coordinates.\n * @param {number} index The index.  May be wrapped.\n * @return {import(\"../coordinate.js\").Coordinate} The coordinate.\n */\nexport function getCoordinate(coordinates, index) {\n  const count = coordinates.length;\n  if (index < 0) {\n    return coordinates[index + count];\n  }\n  if (index >= count) {\n    return coordinates[index - count];\n  }\n  return coordinates[index];\n}\n\n/**\n * @param {LineCoordType} coordinates The coordinates.\n * @param {number} index The index.  May be fractional and may wrap.\n * @return {import(\"../coordinate.js\").Coordinate} The interpolated coordinate.\n */\nexport function interpolateCoordinate(coordinates, index) {\n  const count = coordinates.length;\n\n  let startIndex = Math.floor(index);\n  const along = index - startIndex;\n  if (startIndex >= count) {\n    startIndex -= count;\n  } else if (startIndex < 0) {\n    startIndex += count;\n  }\n\n  let endIndex = startIndex + 1;\n  if (endIndex >= count) {\n    endIndex -= count;\n  }\n\n  const start = coordinates[startIndex];\n  const x0 = start[0];\n  const y0 = start[1];\n  const end = coordinates[endIndex];\n  const dx = end[0] - x0;\n  const dy = end[1] - y0;\n\n  return [x0 + dx * along, y0 + dy * along];\n}\n\n/**\n * @typedef {Object} TraceTarget\n * @property {Array<import(\"../coordinate.js\").Coordinate>} coordinates Target coordinates.\n * @property {boolean} ring The target coordinates are a linear ring.\n * @property {number} startIndex The index of first traced coordinate.  A fractional index represents an\n * edge intersection.  Index values for rings will wrap (may be negative or larger than coordinates length).\n * @property {number} endIndex The index of last traced coordinate.  Details from startIndex also apply here.\n */\n\n/**\n * @typedef {Object} TraceState\n * @property {boolean} active Tracing active.\n * @property {import(\"../coordinate.js\").Coordinate} [startCoord] The initially clicked coordinate.\n * @property {Array<TraceTarget>} [targets] Targets available for tracing.\n * @property {number} [targetIndex] The index of the currently traced target.  A value of -1 indicates\n * that no trace target is active.\n */\n\n/**\n * @typedef {Object} TraceTargetUpdateInfo\n * @property {number} index The new target index.\n * @property {number} endIndex The new segment end index.\n * @property {number} closestTargetDistance The squared distance to the closest target.\n */\n\n/**\n * @type {TraceTargetUpdateInfo}\n */\nconst sharedUpdateInfo = {\n  index: -1,\n  endIndex: NaN,\n  closestTargetDistance: Infinity,\n};\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The coordinate.\n * @param {TraceState} traceState The trace state.\n * @param {import(\"../Map.js\").default} map The map.\n * @param {number} snapTolerance The snap tolerance.\n * @return {TraceTargetUpdateInfo} Information about the new trace target.  The returned\n * object is reused between calls and must not be modified by the caller.\n */\nexport function getTraceTargetUpdate(\n  coordinate,\n  traceState,\n  map,\n  snapTolerance,\n) {\n  const x = coordinate[0];\n  const y = coordinate[1];\n\n  let closestTargetDistance = Infinity;\n\n  let newTargetIndex = -1;\n  let newEndIndex = NaN;\n\n  for (\n    let targetIndex = 0;\n    targetIndex < traceState.targets.length;\n    ++targetIndex\n  ) {\n    const target = traceState.targets[targetIndex];\n    const coordinates = target.coordinates;\n\n    let minSegmentDistance = Infinity;\n    let endIndex;\n    for (\n      let coordinateIndex = 0;\n      coordinateIndex < coordinates.length - 1;\n      ++coordinateIndex\n    ) {\n      const start = coordinates[coordinateIndex];\n      const end = coordinates[coordinateIndex + 1];\n      const rel = getPointSegmentRelationship(x, y, start, end);\n      if (rel.squaredDistance < minSegmentDistance) {\n        minSegmentDistance = rel.squaredDistance;\n        endIndex = coordinateIndex + rel.along;\n      }\n    }\n\n    if (minSegmentDistance < closestTargetDistance) {\n      closestTargetDistance = minSegmentDistance;\n      if (target.ring && traceState.targetIndex === targetIndex) {\n        // same target, maintain the same trace direction\n        if (target.endIndex > target.startIndex) {\n          // forward trace\n          if (endIndex < target.startIndex) {\n            endIndex += coordinates.length;\n          }\n        } else if (target.endIndex < target.startIndex) {\n          // reverse trace\n          if (endIndex > target.startIndex) {\n            endIndex -= coordinates.length;\n          }\n        }\n      }\n      newEndIndex = endIndex;\n      newTargetIndex = targetIndex;\n    }\n  }\n\n  const newTarget = traceState.targets[newTargetIndex];\n  let considerBothDirections = newTarget.ring;\n  if (traceState.targetIndex === newTargetIndex && considerBothDirections) {\n    // only consider switching trace direction if close to the start\n    const newCoordinate = interpolateCoordinate(\n      newTarget.coordinates,\n      newEndIndex,\n    );\n    const pixel = map.getPixelFromCoordinate(newCoordinate);\n    const startPx = map.getPixelFromCoordinate(traceState.startCoord);\n    if (distance(pixel, startPx) > snapTolerance) {\n      considerBothDirections = false;\n    }\n  }\n\n  if (considerBothDirections) {\n    const coordinates = newTarget.coordinates;\n    const count = coordinates.length;\n    const startIndex = newTarget.startIndex;\n    const endIndex = newEndIndex;\n    if (startIndex < endIndex) {\n      const forwardDistance = getCumulativeSquaredDistance(\n        coordinates,\n        startIndex,\n        endIndex,\n      );\n      const reverseDistance = getCumulativeSquaredDistance(\n        coordinates,\n        startIndex,\n        endIndex - count,\n      );\n      if (reverseDistance < forwardDistance) {\n        newEndIndex -= count;\n      }\n    } else {\n      const reverseDistance = getCumulativeSquaredDistance(\n        coordinates,\n        startIndex,\n        endIndex,\n      );\n      const forwardDistance = getCumulativeSquaredDistance(\n        coordinates,\n        startIndex,\n        endIndex + count,\n      );\n      if (forwardDistance < reverseDistance) {\n        newEndIndex += count;\n      }\n    }\n  }\n\n  sharedUpdateInfo.index = newTargetIndex;\n  sharedUpdateInfo.endIndex = newEndIndex;\n  sharedUpdateInfo.closestTargetDistance = closestTargetDistance;\n  return sharedUpdateInfo;\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The coordinate.\n * @param {Array<import(\"../Feature.js\").default>} features The candidate features.\n * @return {Array<TraceTarget>} The trace targets.\n */\nexport function getTraceTargets(coordinate, features) {\n  /**\n   * @type {Array<TraceTarget>}\n   */\n  const targets = [];\n\n  for (let i = 0; i < features.length; ++i) {\n    const feature = features[i];\n    const geometry = feature.getGeometry();\n    appendGeometryTraceTargets(coordinate, geometry, targets);\n  }\n\n  return targets;\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The coordinate.\n * @param {import(\"../geom/Geometry.js\").default} geometry The candidate geometry.\n * @param {Array<TraceTarget>} targets The trace targets.\n */\nfunction appendGeometryTraceTargets(coordinate, geometry, targets) {\n  if (geometry instanceof LineString) {\n    appendTraceTarget(coordinate, geometry.getCoordinates(), false, targets);\n    return;\n  }\n  if (geometry instanceof MultiLineString) {\n    const coordinates = geometry.getCoordinates();\n    for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n      appendTraceTarget(coordinate, coordinates[i], false, targets);\n    }\n    return;\n  }\n  if (geometry instanceof Polygon) {\n    const coordinates = geometry.getCoordinates();\n    for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n      appendTraceTarget(coordinate, coordinates[i], true, targets);\n    }\n    return;\n  }\n  if (geometry instanceof MultiPolygon) {\n    const polys = geometry.getCoordinates();\n    for (let i = 0, ii = polys.length; i < ii; ++i) {\n      const coordinates = polys[i];\n      for (let j = 0, jj = coordinates.length; j < jj; ++j) {\n        appendTraceTarget(coordinate, coordinates[j], true, targets);\n      }\n    }\n    return;\n  }\n  if (geometry instanceof GeometryCollection) {\n    const geometries = geometry.getGeometries();\n    for (let i = 0; i < geometries.length; ++i) {\n      appendGeometryTraceTargets(coordinate, geometries[i], targets);\n    }\n    return;\n  }\n  // other types cannot be traced\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The clicked coordinate.\n * @param {Array<import(\"../coordinate.js\").Coordinate>} coordinates The geometry component coordinates.\n * @param {boolean} ring The coordinates represent a linear ring.\n * @param {Array<TraceTarget>} targets The trace targets.\n */\nfunction appendTraceTarget(coordinate, coordinates, ring, targets) {\n  const x = coordinate[0];\n  const y = coordinate[1];\n  for (let i = 0, ii = coordinates.length - 1; i < ii; ++i) {\n    const start = coordinates[i];\n    const end = coordinates[i + 1];\n    const rel = getPointSegmentRelationship(x, y, start, end);\n    if (rel.squaredDistance === 0) {\n      const index = i + rel.along;\n      targets.push({\n        coordinates: coordinates,\n        ring: ring,\n        startIndex: index,\n        endIndex: index,\n      });\n      return;\n    }\n  }\n}\n\n/**\n * @param {import(\"../coordinate.js\").Coordinate} a One coordinate.\n * @param {import(\"../coordinate.js\").Coordinate} b Another coordinate.\n * @return {number} The squared distance between the two coordinates.\n */\nfunction getSquaredDistance(a, b) {\n  return squaredDistance(a[0], a[1], b[0], b[1]);\n}\n\n/**\n * Get the cumulative squared distance along a ring path.  The end index index may be \"wrapped\" and it may\n * be less than the start index to indicate the direction of travel.  The start and end index may have\n * a fractional part to indicate a point between two coordinates.\n * @param {LineCoordType} coordinates Ring coordinates.\n * @param {number} startIndex The start index.\n * @param {number} endIndex The end index.\n * @return {number} The cumulative squared distance along the ring path.\n */\nfunction getCumulativeSquaredDistance(coordinates, startIndex, endIndex) {\n  let lowIndex, highIndex;\n  if (startIndex < endIndex) {\n    lowIndex = startIndex;\n    highIndex = endIndex;\n  } else {\n    lowIndex = endIndex;\n    highIndex = startIndex;\n  }\n  const lowWholeIndex = Math.ceil(lowIndex);\n  const highWholeIndex = Math.floor(highIndex);\n\n  if (lowWholeIndex > highWholeIndex) {\n    // both start and end are on the same segment\n    const start = interpolateCoordinate(coordinates, lowIndex);\n    const end = interpolateCoordinate(coordinates, highIndex);\n    return getSquaredDistance(start, end);\n  }\n\n  let sd = 0;\n\n  if (lowIndex < lowWholeIndex) {\n    const start = interpolateCoordinate(coordinates, lowIndex);\n    const end = getCoordinate(coordinates, lowWholeIndex);\n    sd += getSquaredDistance(start, end);\n  }\n\n  if (highWholeIndex < highIndex) {\n    const start = getCoordinate(coordinates, highWholeIndex);\n    const end = interpolateCoordinate(coordinates, highIndex);\n    sd += getSquaredDistance(start, end);\n  }\n\n  for (let i = lowWholeIndex; i < highWholeIndex - 1; ++i) {\n    const start = getCoordinate(coordinates, i);\n    const end = getCoordinate(coordinates, i + 1);\n    sd += getSquaredDistance(start, end);\n  }\n\n  return sd;\n}\n\n/**\n * @typedef {Object} PointSegmentRelationship\n * @property {number} along The closest point expressed as a fraction along the segment length.\n * @property {number} squaredDistance The squared distance of the point to the segment.\n */\n\n/**\n * @type {PointSegmentRelationship}\n */\nconst sharedRel = {along: 0, squaredDistance: 0};\n\n/**\n * @param {number} x The point x.\n * @param {number} y The point y.\n * @param {import(\"../coordinate.js\").Coordinate} start The segment start.\n * @param {import(\"../coordinate.js\").Coordinate} end The segment end.\n * @return {PointSegmentRelationship} The point segment relationship.  The returned object is\n * shared between calls and must not be modified by the caller.\n */\nexport function getPointSegmentRelationship(x, y, start, end) {\n  const x1 = start[0];\n  const y1 = start[1];\n  const x2 = end[0];\n  const y2 = end[1];\n  const dx = x2 - x1;\n  const dy = y2 - y1;\n  let along = 0;\n  let px = x1;\n  let py = y1;\n  if (dx !== 0 || dy !== 0) {\n    along = clamp(((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy), 0, 1);\n    px += dx * along;\n    py += dy * along;\n  }\n\n  sharedRel.along = along;\n  sharedRel.squaredDistance = toFixed(squaredDistance(x, y, px, py), 10);\n  return sharedRel;\n}\n","/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport {assert} from '../asserts.js';\nimport {clamp} from '../math.js';\nimport {abstract} from '../util.js';\nimport LayerProperty from './Property.js';\n\n/**\n * A css color, or a function called with a view resolution returning a css color.\n *\n * @typedef {string|function(number):string} BackgroundColor\n * @api\n */\n\n/**\n * @typedef {import(\"../ObjectEventType.js\").Types|'change:extent'|'change:maxResolution'|'change:maxZoom'|\n *    'change:minResolution'|'change:minZoom'|'change:opacity'|'change:visible'|'change:zIndex'} BaseLayerObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<BaseLayerObjectEventTypes, import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|BaseLayerObjectEventTypes, Return>} BaseLayerOnSignature\n */\n\n/**\n * @template {Object<string, *>} [Properties=Object<string, *>]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number | undefined} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Properties} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base~BaseLayer} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object~BaseObject} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n * @template {Object<string, *>} [Properties=Object<string, *>]\n * @extends {BaseObject<NoInfer<Properties> & Object<string, *>>}\n */\nclass BaseLayer extends BaseObject {\n  /**\n   * @param {Options<NoInfer<Properties>>} options Layer options.\n   */\n  constructor(options) {\n    super();\n\n    /***\n     * @type {BaseLayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {BaseLayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {BaseLayerOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @type {BackgroundColor|false}\n     * @private\n     */\n    this.background_ = options.background;\n\n    /**\n     * @type {?}\n     */\n    const properties = Object.assign({}, options);\n    if (typeof options.properties === 'object') {\n      delete properties.properties;\n      Object.assign(properties, options.properties);\n    }\n\n    properties[LayerProperty.OPACITY] =\n      options.opacity !== undefined ? options.opacity : 1;\n    assert(\n      typeof properties[LayerProperty.OPACITY] === 'number',\n      'Layer opacity must be a number',\n    );\n\n    properties[LayerProperty.VISIBLE] =\n      options.visible !== undefined ? options.visible : true;\n    properties[LayerProperty.Z_INDEX] = options.zIndex;\n    properties[LayerProperty.MAX_RESOLUTION] =\n      options.maxResolution !== undefined ? options.maxResolution : Infinity;\n    properties[LayerProperty.MIN_RESOLUTION] =\n      options.minResolution !== undefined ? options.minResolution : 0;\n    properties[LayerProperty.MIN_ZOOM] =\n      options.minZoom !== undefined ? options.minZoom : -Infinity;\n    properties[LayerProperty.MAX_ZOOM] =\n      options.maxZoom !== undefined ? options.maxZoom : Infinity;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.className_ =\n      properties.className !== undefined ? properties.className : 'ol-layer';\n    delete properties.className;\n\n    this.setProperties(properties);\n\n    /**\n     * @type {import(\"./Layer.js\").State}\n     * @private\n     */\n    this.state_ = null;\n  }\n\n  /**\n   * Get the background for this layer.\n   * @return {BackgroundColor|false} Layer background.\n   */\n  getBackground() {\n    return this.background_;\n  }\n\n  /**\n   * @return {string} CSS class name.\n   */\n  getClassName() {\n    return this.className_;\n  }\n\n  /**\n   * This method is not meant to be called by layers or layer renderers because the state\n   * is incorrect if the layer is included in a layer group.\n   *\n   * @param {boolean} [managed] Layer is managed.\n   * @return {import(\"./Layer.js\").State} Layer state.\n   */\n  getLayerState(managed) {\n    /** @type {import(\"./Layer.js\").State} */\n    const state =\n      this.state_ ||\n      /** @type {?} */ ({\n        layer: this,\n        managed: managed === undefined ? true : managed,\n      });\n    const zIndex = this.getZIndex();\n    state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n    state.visible = this.getVisible();\n    state.extent = this.getExtent();\n    state.zIndex = zIndex === undefined && !state.managed ? Infinity : zIndex;\n    state.maxResolution = this.getMaxResolution();\n    state.minResolution = Math.max(this.getMinResolution(), 0);\n    state.minZoom = this.getMinZoom();\n    state.maxZoom = this.getMaxZoom();\n    this.state_ = state;\n\n    return state;\n  }\n\n  /**\n   * @abstract\n   * @param {Array<import(\"./Layer.js\").default>} [array] Array of layers (to be\n   *     modified in place).\n   * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n   */\n  getLayersArray(array) {\n    return abstract();\n  }\n\n  /**\n   * @abstract\n   * @param {Array<import(\"./Layer.js\").State>} [states] Optional list of layer\n   *     states (to be modified in place).\n   * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n   */\n  getLayerStatesArray(states) {\n    return abstract();\n  }\n\n  /**\n   * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n   * will be visible regardless of extent.\n   * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n   * @observable\n   * @api\n   */\n  getExtent() {\n    return /** @type {import(\"../extent.js\").Extent|undefined} */ (\n      this.get(LayerProperty.EXTENT)\n    );\n  }\n\n  /**\n   * Return the maximum resolution of the layer. Returns Infinity if\n   * the layer has no maximum resolution set.\n   * @return {number} The maximum resolution of the layer.\n   * @observable\n   * @api\n   */\n  getMaxResolution() {\n    return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n  }\n\n  /**\n   * Return the minimum resolution of the layer. Returns 0 if\n   * the layer has no minimum resolution set.\n   * @return {number} The minimum resolution of the layer.\n   * @observable\n   * @api\n   */\n  getMinResolution() {\n    return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n  }\n\n  /**\n   * Return the minimum zoom level of the layer. Returns -Infinity if\n   * the layer has no minimum zoom set.\n   * @return {number} The minimum zoom level of the layer.\n   * @observable\n   * @api\n   */\n  getMinZoom() {\n    return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n  }\n\n  /**\n   * Return the maximum zoom level of the layer. Returns Infinity if\n   * the layer has no maximum zoom set.\n   * @return {number} The maximum zoom level of the layer.\n   * @observable\n   * @api\n   */\n  getMaxZoom() {\n    return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n  }\n\n  /**\n   * Return the opacity of the layer (between 0 and 1).\n   * @return {number} The opacity of the layer.\n   * @observable\n   * @api\n   */\n  getOpacity() {\n    return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n  }\n\n  /**\n   * @abstract\n   * @return {import(\"../source/Source.js\").State} Source state.\n   */\n  getSourceState() {\n    return abstract();\n  }\n\n  /**\n   * Return the value of this layer's `visible` property. To find out whether the layer\n   * is visible on a map, use `isVisible()` instead.\n   * @return {boolean} The value of the `visible` property of the layer.\n   * @observable\n   * @api\n   */\n  getVisible() {\n    return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n  }\n\n  /**\n   * Return the Z-index of the layer, which is used to order layers before\n   * rendering. Returns undefined if the layer is unmanaged.\n   * @return {number|undefined} The Z-index of the layer.\n   * @observable\n   * @api\n   */\n  getZIndex() {\n    return /** @type {number|undefined} */ (this.get(LayerProperty.Z_INDEX));\n  }\n\n  /**\n   * Sets the background color.\n   * @param {BackgroundColor} [background] Background color.\n   */\n  setBackground(background) {\n    this.background_ = background;\n    this.changed();\n  }\n\n  /**\n   * Set the extent at which the layer is visible.  If `undefined`, the layer\n   * will be visible at all extents.\n   * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n   * @observable\n   * @api\n   */\n  setExtent(extent) {\n    this.set(LayerProperty.EXTENT, extent);\n  }\n\n  /**\n   * Set the maximum resolution at which the layer is visible.\n   * @param {number} maxResolution The maximum resolution of the layer.\n   * @observable\n   * @api\n   */\n  setMaxResolution(maxResolution) {\n    this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n  }\n\n  /**\n   * Set the minimum resolution at which the layer is visible.\n   * @param {number} minResolution The minimum resolution of the layer.\n   * @observable\n   * @api\n   */\n  setMinResolution(minResolution) {\n    this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n  }\n\n  /**\n   * Set the maximum zoom (exclusive) at which the layer is visible.\n   * Note that the zoom levels for layer visibility are based on the\n   * view zoom level, which may be different from a tile source zoom level.\n   * @param {number} maxZoom The maximum zoom of the layer.\n   * @observable\n   * @api\n   */\n  setMaxZoom(maxZoom) {\n    this.set(LayerProperty.MAX_ZOOM, maxZoom);\n  }\n\n  /**\n   * Set the minimum zoom (inclusive) at which the layer is visible.\n   * Note that the zoom levels for layer visibility are based on the\n   * view zoom level, which may be different from a tile source zoom level.\n   * @param {number} minZoom The minimum zoom of the layer.\n   * @observable\n   * @api\n   */\n  setMinZoom(minZoom) {\n    this.set(LayerProperty.MIN_ZOOM, minZoom);\n  }\n\n  /**\n   * Set the opacity of the layer, allowed values range from 0 to 1.\n   * @param {number} opacity The opacity of the layer.\n   * @observable\n   * @api\n   */\n  setOpacity(opacity) {\n    assert(typeof opacity === 'number', 'Layer opacity must be a number');\n    this.set(LayerProperty.OPACITY, opacity);\n  }\n\n  /**\n   * Set the visibility of the layer (`true` or `false`).\n   * @param {boolean} visible The visibility of the layer.\n   * @observable\n   * @api\n   */\n  setVisible(visible) {\n    this.set(LayerProperty.VISIBLE, visible);\n  }\n\n  /**\n   * Set Z-index of the layer, which is used to order layers before rendering.\n   * The default Z-index is 0.\n   * @param {number} zindex The z-index of the layer.\n   * @observable\n   * @api\n   */\n  setZIndex(zindex) {\n    this.set(LayerProperty.Z_INDEX, zindex);\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    if (this.state_) {\n      this.state_.layer = null;\n      this.state_ = null;\n    }\n    super.disposeInternal();\n  }\n}\n\nexport default BaseLayer;\n","/**\n * @module ol/layer/BaseTile\n */\nimport Layer from './Layer.js';\nimport TileProperty from './TileProperty.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"./Base.js\").BaseLayerObjectEventTypes|\n *     import(\"./Layer.js\").LayerEventType|'change:preload'|'change:useInterimTilesOnError', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../render/EventType.js\").LayerRenderEventTypes, import(\"../render/Event.js\").default, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"./Base.js\").BaseLayerObjectEventTypes|\n *   import(\"./Layer.js\").LayerEventType|'change:preload'|'change:useInterimTilesOnError'|import(\"../render/EventType.js\").LayerRenderEventTypes, Return>} BaseTileLayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Tile.js\").default} TileSourceType\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {TileSourceType} [source] Source for this layer.\n * @property {import(\"../Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link import(\"../Map.js\").default#addLayer map.addLayer()}.\n * @property {import(\"./Base.js\").BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {boolean} [useInterimTilesOnError=true] Deprecated.  Use interim tiles on error.\n * @property {Object<string, *>} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n * @property {number} [cacheSize=512] The internal tile cache size.  This needs to be large enough to render\n * two zoom levels worth of tiles.\n */\n\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Tile.js\").default} TileSourceType\n * @template {import(\"../renderer/Layer.js\").default} RendererType\n * @extends {Layer<TileSourceType, RendererType>}\n * @api\n */\nclass BaseTileLayer extends Layer {\n  /**\n   * @param {Options<TileSourceType>} [options] Tile layer options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const baseOptions = Object.assign({}, options);\n\n    const cacheSize = options.cacheSize;\n    delete options.cacheSize;\n\n    delete baseOptions.preload;\n    delete baseOptions.useInterimTilesOnError;\n    super(baseOptions);\n\n    /***\n     * @type {BaseTileLayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {BaseTileLayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {BaseTileLayerOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @type {number|undefined}\n     * @private\n     */\n    this.cacheSize_ = cacheSize;\n\n    this.setPreload(options.preload !== undefined ? options.preload : 0);\n    this.setUseInterimTilesOnError(\n      options.useInterimTilesOnError !== undefined\n        ? options.useInterimTilesOnError\n        : true,\n    );\n  }\n\n  /**\n   * @return {number|undefined} The suggested cache size\n   * @protected\n   */\n  getCacheSize() {\n    return this.cacheSize_;\n  }\n\n  /**\n   * Return the level as number to which we will preload tiles up to.\n   * @return {number} The level to preload tiles up to.\n   * @observable\n   * @api\n   */\n  getPreload() {\n    return /** @type {number} */ (this.get(TileProperty.PRELOAD));\n  }\n\n  /**\n   * Set the level as number to which we will preload tiles up to.\n   * @param {number} preload The level to preload tiles up to.\n   * @observable\n   * @api\n   */\n  setPreload(preload) {\n    this.set(TileProperty.PRELOAD, preload);\n  }\n\n  /**\n   * Deprecated.  Whether we use interim tiles on error.\n   * @return {boolean} Use interim tiles on error.\n   * @observable\n   * @api\n   */\n  getUseInterimTilesOnError() {\n    return /** @type {boolean} */ (\n      this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR)\n    );\n  }\n\n  /**\n   * Deprecated.  Set whether we use interim tiles on error.\n   * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n   * @observable\n   * @api\n   */\n  setUseInterimTilesOnError(useInterimTilesOnError) {\n    this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n  }\n\n  /**\n   * Get data for a pixel location.  The return type depends on the source data.  For image tiles,\n   * a four element RGBA array will be returned.  For data tiles, the array length will match the\n   * number of bands in the dataset.  For requests outside the layer extent, `null` will be returned.\n   * Data for a image tiles can only be retrieved if the source's `crossOrigin` property is set.\n   *\n   * ```js\n   * // display layer data on every pointer move\n   * map.on('pointermove', (event) => {\n   *   console.log(layer.getData(event.pixel));\n   * });\n   * ```\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n   * @api\n   * @override\n   */\n  getData(pixel) {\n    return super.getData(pixel);\n  }\n}\n\nexport default BaseTileLayer;\n","/**\n * @module ol/render/canvas/style\n */\n\nimport {NO_COLOR} from '../../color.js';\nimport {buildExpression, newEvaluationContext} from '../../expr/cpu.js';\nimport {\n  BooleanType,\n  ColorType,\n  computeGeometryType,\n  newParsingContext,\n  NumberArrayType,\n  NumberType,\n  StringType,\n} from '../../expr/expression.js';\nimport {isEmpty} from '../../obj.js';\nimport {toSize} from '../../size.js';\nimport Circle from '../../style/Circle.js';\nimport Fill from '../../style/Fill.js';\nimport Icon from '../../style/Icon.js';\nimport RegularShape from '../../style/RegularShape.js';\nimport Stroke from '../../style/Stroke.js';\nimport Style from '../../style/Style.js';\nimport Text from '../../style/Text.js';\n\n/**\n * @fileoverview This module includes functions to build styles for the canvas renderer.  Building\n * is composed of two steps: parsing and compiling.  The parsing step takes an encoded expression\n * and returns an instance of one of the expression classes.  The compiling step takes the\n * expression instance and returns a function that can be evaluated to return a literal value.  The\n * evaluator function should do as little allocation and work as possible.\n */\n\n/**\n * @typedef {import(\"../../style/flat.js\").FlatStyle} FlatStyle\n */\n\n/**\n * @typedef {import(\"../../expr/expression.js\").EncodedExpression} EncodedExpression\n */\n\n/**\n * @typedef {import(\"../../expr/expression.js\").ParsingContext} ParsingContext\n */\n\n/**\n * @typedef {import(\"../../expr/expression.js\").CallExpression} CallExpression\n */\n\n/**\n * @typedef {import(\"../../expr/cpu.js\").EvaluationContext} EvaluationContext\n */\n\n/**\n * @typedef {import(\"../../expr/cpu.js\").ExpressionEvaluator} ExpressionEvaluator\n */\n\n/**\n * @param {EvaluationContext} context The evaluation context.\n * @return {boolean} Always true.\n */\nfunction always(context) {\n  return true;\n}\n\n/**\n * This function adapts a rule evaluator to the existing style function interface.\n * After we have deprecated the style function, we can use the compiled rules directly\n * and pass a more complete evaluation context (variables, zoom, time, etc.).\n *\n * @param {Array<import('../../style/flat.js').Rule>} rules The rules.\n * @param {ParsingContext} [parsingContext] Optional parsing context; will create a new one if not provided\n * @return {import('../../style/Style.js').StyleFunction} A style function.\n */\nexport function rulesToStyleFunction(rules, parsingContext) {\n  parsingContext = parsingContext ?? newParsingContext();\n  const evaluator = buildRuleSet(rules, parsingContext);\n  const evaluationContext = newEvaluationContext();\n  return function (feature, resolution) {\n    evaluationContext.properties = feature.getPropertiesInternal();\n    evaluationContext.resolution = resolution;\n    if (parsingContext.featureId) {\n      const id = feature.getId();\n      if (id !== undefined) {\n        evaluationContext.featureId = id;\n      } else {\n        evaluationContext.featureId = null;\n      }\n    }\n    if (parsingContext.geometryType) {\n      evaluationContext.geometryType = computeGeometryType(\n        feature.getGeometry(),\n      );\n    }\n    return evaluator(evaluationContext);\n  };\n}\n\n/**\n * This function adapts a style evaluator to the existing style function interface.\n * After we have deprecated the style function, we can use the compiled rules directly\n * and pass a more complete evaluation context (variables, zoom, time, etc.).\n *\n * @param {Array<import('../../style/flat.js').FlatStyle>} flatStyles The flat styles.\n * @param {ParsingContext} [parsingContext] Optional parsing context; will create a new one if not provided\n * @return {import('../../style/Style.js').StyleFunction} A style function.\n */\nexport function flatStylesToStyleFunction(flatStyles, parsingContext) {\n  parsingContext = parsingContext ?? newParsingContext();\n  const length = flatStyles.length;\n\n  /**\n   * @type {Array<StyleEvaluator>}\n   */\n  const evaluators = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    evaluators[i] = buildStyle(flatStyles[i], parsingContext);\n  }\n  const evaluationContext = newEvaluationContext();\n\n  /**\n   * @type {Array<Style>}\n   */\n  const styles = new Array(length);\n\n  return function (feature, resolution) {\n    evaluationContext.properties = feature.getPropertiesInternal();\n    evaluationContext.resolution = resolution;\n    if (parsingContext.featureId) {\n      const id = feature.getId();\n      if (id !== undefined) {\n        evaluationContext.featureId = id;\n      } else {\n        evaluationContext.featureId = null;\n      }\n    }\n    if (parsingContext.geometryType) {\n      evaluationContext.geometryType = computeGeometryType(\n        feature.getGeometry(),\n      );\n    }\n    let nonNullCount = 0;\n    for (let i = 0; i < length; ++i) {\n      const style = evaluators[i](evaluationContext);\n      if (style) {\n        styles[nonNullCount] = style;\n        nonNullCount += 1;\n      }\n    }\n    styles.length = nonNullCount;\n    return styles;\n  };\n}\n\n/**\n * This function handles any kind of style that matches the FlatStyleLike type.\n *\n * @param {import('../../style/flat.js').FlatStyleLike} flatStyleLike The flat style.\n * @param {ParsingContext} [parsingContext] Optional parsing context; will create a new one if not provided\n * @return {import('../../style/Style.js').StyleFunction} A style function.\n */\nexport function flatStyleLikeToStyleFunction(flatStyleLike, parsingContext) {\n  parsingContext = parsingContext ?? newParsingContext();\n\n  // single FlatStyle\n  if (!Array.isArray(flatStyleLike)) {\n    return flatStylesToStyleFunction([flatStyleLike], parsingContext);\n  }\n\n  const length = flatStyleLike.length;\n  const first = flatStyleLike[0];\n\n  // array of Rule\n  if ('style' in first) {\n    /**\n     * @type {Array<import(\"../../style/flat.js\").Rule>}\n     */\n    const rules = new Array(length);\n    for (let i = 0; i < length; ++i) {\n      const candidate = flatStyleLike[i];\n      if (!('style' in candidate)) {\n        throw new Error('Expected a list of rules with a style property');\n      }\n      rules[i] = candidate;\n    }\n    return rulesToStyleFunction(rules, parsingContext);\n  }\n\n  // array of FlatStyle\n  const flatStyles =\n    /** @type {Array<import(\"../../style/flat.js\").FlatStyle>} */ (\n      flatStyleLike\n    );\n  return flatStylesToStyleFunction(flatStyles, parsingContext);\n}\n\n/**\n * @typedef {function(EvaluationContext):Array<Style>} RuleSetEvaluator\n */\n\n/**\n * @typedef {Object} CompiledRule\n * @property {ExpressionEvaluator} filter The compiled filter evaluator.\n * @property {Array<StyleEvaluator>} styles The list of compiled style evaluators.\n */\n\n/**\n * @param {Array<import('../../style/flat.js').Rule>} rules The rules.\n * @param {ParsingContext} context The parsing context.\n * @return {RuleSetEvaluator} The evaluator function.\n */\nexport function buildRuleSet(rules, context) {\n  const length = rules.length;\n\n  /**\n   * @type {Array<CompiledRule>}\n   */\n  const compiledRules = new Array(length);\n\n  for (let i = 0; i < length; ++i) {\n    const rule = rules[i];\n    const filter =\n      'filter' in rule\n        ? buildExpression(rule.filter, BooleanType, context)\n        : always;\n\n    /**\n     * @type {Array<StyleEvaluator>}\n     */\n    let styles;\n    if (Array.isArray(rule.style)) {\n      const styleLength = rule.style.length;\n      styles = new Array(styleLength);\n      for (let j = 0; j < styleLength; ++j) {\n        styles[j] = buildStyle(rule.style[j], context);\n      }\n    } else {\n      styles = [buildStyle(rule.style, context)];\n    }\n\n    compiledRules[i] = {filter, styles};\n  }\n\n  return function (context) {\n    /**\n     * @type {Array<Style>}\n     */\n    const styles = [];\n\n    let someMatched = false;\n    for (let i = 0; i < length; ++i) {\n      const filterEvaluator = compiledRules[i].filter;\n      if (!filterEvaluator(context)) {\n        continue;\n      }\n      if (rules[i].else && someMatched) {\n        continue;\n      }\n      someMatched = true;\n      for (const styleEvaluator of compiledRules[i].styles) {\n        const style = styleEvaluator(context);\n        if (!style) {\n          continue;\n        }\n        styles.push(style);\n      }\n    }\n\n    return styles;\n  };\n}\n\n/**\n * @typedef {function(EvaluationContext):Style|null} StyleEvaluator\n */\n\n/**\n * @param {FlatStyle} flatStyle A flat style literal.\n * @param {ParsingContext} context The parsing context.\n * @return {StyleEvaluator} A function that evaluates to a style.  The style returned by\n * this function will be reused between invocations.\n */\nexport function buildStyle(flatStyle, context) {\n  const evaluateFill = buildFill(flatStyle, '', context);\n  const evaluateStroke = buildStroke(flatStyle, '', context);\n  const evaluateText = buildText(flatStyle, context);\n  const evaluateImage = buildImage(flatStyle, context);\n  const evaluateZIndex = numberEvaluator(flatStyle, 'z-index', context);\n\n  if (\n    !evaluateFill &&\n    !evaluateStroke &&\n    !evaluateText &&\n    !evaluateImage &&\n    !isEmpty(flatStyle)\n  ) {\n    // assume this is a user error\n    // would be nice to check the properties and suggest \"did you mean...\"\n    throw new Error(\n      'No fill, stroke, point, or text symbolizer properties in style: ' +\n        JSON.stringify(flatStyle),\n    );\n  }\n\n  const style = new Style();\n  return function (context) {\n    let empty = true;\n    if (evaluateFill) {\n      const fill = evaluateFill(context);\n      if (fill) {\n        empty = false;\n      }\n      style.setFill(fill);\n    }\n    if (evaluateStroke) {\n      const stroke = evaluateStroke(context);\n      if (stroke) {\n        empty = false;\n      }\n      style.setStroke(stroke);\n    }\n    if (evaluateText) {\n      const text = evaluateText(context);\n      if (text) {\n        empty = false;\n      }\n      style.setText(text);\n    }\n    if (evaluateImage) {\n      const image = evaluateImage(context);\n      if (image) {\n        empty = false;\n      }\n      style.setImage(image);\n    }\n    if (evaluateZIndex) {\n      style.setZIndex(evaluateZIndex(context));\n    }\n    if (empty) {\n      return null;\n    }\n    return style;\n  };\n}\n\n/**\n * @typedef {function(EvaluationContext):Fill|null} FillEvaluator\n */\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} prefix The property prefix.\n * @param {ParsingContext} context The parsing context.\n * @return {FillEvaluator?} A function that evaluates to a fill.\n */\nfunction buildFill(flatStyle, prefix, context) {\n  let evaluateColor;\n  if (prefix + 'fill-pattern-src' in flatStyle) {\n    evaluateColor = patternEvaluator(flatStyle, prefix + 'fill-', context);\n  } else {\n    if (flatStyle[prefix + 'fill-color'] === 'none') {\n      // avoids hit detection\n      return (context) => null;\n    }\n\n    evaluateColor = colorLikeEvaluator(\n      flatStyle,\n      prefix + 'fill-color',\n      context,\n    );\n  }\n  if (!evaluateColor) {\n    return null;\n  }\n\n  const fill = new Fill();\n  return function (context) {\n    const color = evaluateColor(context);\n    if (color === NO_COLOR) {\n      return null;\n    }\n    fill.setColor(color);\n    return fill;\n  };\n}\n\n/**\n * @typedef {function(EvaluationContext):Stroke|null} StrokeEvaluator\n */\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} prefix The property prefix.\n * @param {ParsingContext} context The parsing context.\n * @return {StrokeEvaluator?} A function the evaluates to a stroke.\n */\nfunction buildStroke(flatStyle, prefix, context) {\n  const evaluateWidth = numberEvaluator(\n    flatStyle,\n    prefix + 'stroke-width',\n    context,\n  );\n\n  const evaluateColor = colorLikeEvaluator(\n    flatStyle,\n    prefix + 'stroke-color',\n    context,\n  );\n\n  if (!evaluateWidth && !evaluateColor) {\n    return null;\n  }\n\n  const evaluateLineCap = stringEvaluator(\n    flatStyle,\n    prefix + 'stroke-line-cap',\n    context,\n  );\n\n  const evaluateLineJoin = stringEvaluator(\n    flatStyle,\n    prefix + 'stroke-line-join',\n    context,\n  );\n\n  const evaluateLineDash = numberArrayEvaluator(\n    flatStyle,\n    prefix + 'stroke-line-dash',\n    context,\n  );\n\n  const evaluateLineDashOffset = numberEvaluator(\n    flatStyle,\n    prefix + 'stroke-line-dash-offset',\n    context,\n  );\n\n  const evaluateMiterLimit = numberEvaluator(\n    flatStyle,\n    prefix + 'stroke-miter-limit',\n    context,\n  );\n\n  const evaluateOffset = numberEvaluator(\n    flatStyle,\n    prefix + 'stroke-offset',\n    context,\n  );\n\n  const stroke = new Stroke();\n  return function (context) {\n    if (evaluateColor) {\n      const color = evaluateColor(context);\n      if (color === NO_COLOR) {\n        return null;\n      }\n      stroke.setColor(color);\n    }\n\n    if (evaluateWidth) {\n      stroke.setWidth(evaluateWidth(context));\n    }\n\n    if (evaluateLineCap) {\n      const lineCap = evaluateLineCap(context);\n      if (lineCap !== 'butt' && lineCap !== 'round' && lineCap !== 'square') {\n        throw new Error('Expected butt, round, or square line cap');\n      }\n      stroke.setLineCap(lineCap);\n    }\n\n    if (evaluateLineJoin) {\n      const lineJoin = evaluateLineJoin(context);\n      if (\n        lineJoin !== 'bevel' &&\n        lineJoin !== 'round' &&\n        lineJoin !== 'miter'\n      ) {\n        throw new Error('Expected bevel, round, or miter line join');\n      }\n      stroke.setLineJoin(lineJoin);\n    }\n\n    if (evaluateLineDash) {\n      stroke.setLineDash(evaluateLineDash(context));\n    }\n\n    if (evaluateLineDashOffset) {\n      stroke.setLineDashOffset(evaluateLineDashOffset(context));\n    }\n\n    if (evaluateMiterLimit) {\n      stroke.setMiterLimit(evaluateMiterLimit(context));\n    }\n\n    if (evaluateOffset) {\n      stroke.setOffset(evaluateOffset(context));\n    }\n\n    return stroke;\n  };\n}\n\n/**\n * @typedef {function(EvaluationContext):Text} TextEvaluator\n */\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {ParsingContext} context The parsing context.\n * @return {TextEvaluator?} A function that evaluates to a text symbolizer.\n */\nfunction buildText(flatStyle, context) {\n  const prefix = 'text-';\n\n  // Currently, an Array<string> may be used for rich text support.  This doesn't\n  // work with our expression syntax where arrays of strings are interpreted as\n  // call expressions.  To support rich text, we could add a 'strings' operator\n  // where all the following arguments would be string values.\n  const evaluateValue = stringEvaluator(flatStyle, prefix + 'value', context);\n  if (!evaluateValue) {\n    return null;\n  }\n\n  const evaluateFill = buildFill(flatStyle, prefix, context);\n\n  const evaluateBackgroundFill = buildFill(\n    flatStyle,\n    prefix + 'background-',\n    context,\n  );\n\n  const evaluateStroke = buildStroke(flatStyle, prefix, context);\n\n  const evaluateBackgroundStroke = buildStroke(\n    flatStyle,\n    prefix + 'background-',\n    context,\n  );\n\n  const evaluateFont = stringEvaluator(flatStyle, prefix + 'font', context);\n\n  const evaluateMaxAngle = numberEvaluator(\n    flatStyle,\n    prefix + 'max-angle',\n    context,\n  );\n\n  const evaluateOffsetX = numberEvaluator(\n    flatStyle,\n    prefix + 'offset-x',\n    context,\n  );\n\n  const evaluateOffsetY = numberEvaluator(\n    flatStyle,\n    prefix + 'offset-y',\n    context,\n  );\n\n  const evaluateOverflow = booleanEvaluator(\n    flatStyle,\n    prefix + 'overflow',\n    context,\n  );\n\n  const evaluatePlacement = stringEvaluator(\n    flatStyle,\n    prefix + 'placement',\n    context,\n  );\n\n  const evaluateRepeat = numberEvaluator(flatStyle, prefix + 'repeat', context);\n\n  const evaluateScale = sizeLikeEvaluator(flatStyle, prefix + 'scale', context);\n\n  const evaluateRotateWithView = booleanEvaluator(\n    flatStyle,\n    prefix + 'rotate-with-view',\n    context,\n  );\n\n  const evaluateRotation = numberEvaluator(\n    flatStyle,\n    prefix + 'rotation',\n    context,\n  );\n\n  const evaluateAlign = stringEvaluator(flatStyle, prefix + 'align', context);\n\n  const evaluateJustify = stringEvaluator(\n    flatStyle,\n    prefix + 'justify',\n    context,\n  );\n\n  const evaluateBaseline = stringEvaluator(\n    flatStyle,\n    prefix + 'baseline',\n    context,\n  );\n\n  const evaluateKeepUpright = booleanEvaluator(\n    flatStyle,\n    prefix + 'keep-upright',\n    context,\n  );\n\n  const evaluatePadding = numberArrayEvaluator(\n    flatStyle,\n    prefix + 'padding',\n    context,\n  );\n\n  // The following properties are not currently settable\n  const declutterMode = optionalDeclutterMode(\n    flatStyle,\n    prefix + 'declutter-mode',\n  );\n\n  const text = new Text({declutterMode});\n\n  return function (context) {\n    text.setText(evaluateValue(context));\n\n    if (evaluateFill) {\n      text.setFill(evaluateFill(context));\n    }\n\n    if (evaluateBackgroundFill) {\n      text.setBackgroundFill(evaluateBackgroundFill(context));\n    }\n\n    if (evaluateStroke) {\n      text.setStroke(evaluateStroke(context));\n    }\n\n    if (evaluateBackgroundStroke) {\n      text.setBackgroundStroke(evaluateBackgroundStroke(context));\n    }\n\n    if (evaluateFont) {\n      text.setFont(evaluateFont(context));\n    }\n\n    if (evaluateMaxAngle) {\n      text.setMaxAngle(evaluateMaxAngle(context));\n    }\n\n    if (evaluateOffsetX) {\n      text.setOffsetX(evaluateOffsetX(context));\n    }\n\n    if (evaluateOffsetY) {\n      text.setOffsetY(evaluateOffsetY(context));\n    }\n\n    if (evaluateOverflow) {\n      text.setOverflow(evaluateOverflow(context));\n    }\n\n    if (evaluatePlacement) {\n      const placement = evaluatePlacement(context);\n      if (placement !== 'point' && placement !== 'line') {\n        throw new Error('Expected point or line for text-placement');\n      }\n      text.setPlacement(placement);\n    }\n\n    if (evaluateRepeat) {\n      text.setRepeat(evaluateRepeat(context));\n    }\n\n    if (evaluateScale) {\n      text.setScale(evaluateScale(context));\n    }\n\n    if (evaluateRotateWithView) {\n      text.setRotateWithView(evaluateRotateWithView(context));\n    }\n\n    if (evaluateRotation) {\n      text.setRotation(evaluateRotation(context));\n    }\n\n    if (evaluateAlign) {\n      const textAlign = evaluateAlign(context);\n      if (\n        textAlign !== 'left' &&\n        textAlign !== 'center' &&\n        textAlign !== 'right' &&\n        textAlign !== 'end' &&\n        textAlign !== 'start'\n      ) {\n        throw new Error(\n          'Expected left, right, center, start, or end for text-align',\n        );\n      }\n      text.setTextAlign(textAlign);\n    }\n\n    if (evaluateJustify) {\n      const justify = evaluateJustify(context);\n      if (justify !== 'left' && justify !== 'right' && justify !== 'center') {\n        throw new Error('Expected left, right, or center for text-justify');\n      }\n      text.setJustify(justify);\n    }\n\n    if (evaluateBaseline) {\n      const textBaseline = evaluateBaseline(context);\n      if (\n        textBaseline !== 'bottom' &&\n        textBaseline !== 'top' &&\n        textBaseline !== 'middle' &&\n        textBaseline !== 'alphabetic' &&\n        textBaseline !== 'hanging'\n      ) {\n        throw new Error(\n          'Expected bottom, top, middle, alphabetic, or hanging for text-baseline',\n        );\n      }\n      text.setTextBaseline(textBaseline);\n    }\n\n    if (evaluatePadding) {\n      text.setPadding(evaluatePadding(context));\n    }\n\n    if (evaluateKeepUpright) {\n      text.setKeepUpright(evaluateKeepUpright(context));\n    }\n\n    return text;\n  };\n}\n\n/**\n * @typedef {function(EvaluationContext):import(\"../../style/Image.js\").default} ImageEvaluator\n */\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {ParsingContext} context The parsing context.\n * @return {ImageEvaluator?} A function that evaluates to an image symbolizer.\n */\nfunction buildImage(flatStyle, context) {\n  if ('icon-src' in flatStyle) {\n    return buildIcon(flatStyle, context);\n  }\n\n  if ('shape-points' in flatStyle) {\n    return buildShape(flatStyle, context);\n  }\n\n  if ('circle-radius' in flatStyle) {\n    return buildCircle(flatStyle, context);\n  }\n\n  return null;\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {ParsingContext} context The parsing context.\n * @return {ImageEvaluator} A function that evaluates to an image symbolizer.\n */\nfunction buildIcon(flatStyle, context) {\n  const prefix = 'icon-';\n\n  // required property\n  const srcName = prefix + 'src';\n  const src = requireString(flatStyle[srcName], srcName);\n\n  // settable properties\n  const evaluateAnchor = coordinateEvaluator(\n    flatStyle,\n    prefix + 'anchor',\n    context,\n  );\n\n  const evaluateScale = sizeLikeEvaluator(flatStyle, prefix + 'scale', context);\n\n  const evaluateOpacity = numberEvaluator(\n    flatStyle,\n    prefix + 'opacity',\n    context,\n  );\n\n  const evaluateDisplacement = coordinateEvaluator(\n    flatStyle,\n    prefix + 'displacement',\n    context,\n  );\n\n  const evaluateRotation = numberEvaluator(\n    flatStyle,\n    prefix + 'rotation',\n    context,\n  );\n\n  const evaluateRotateWithView = booleanEvaluator(\n    flatStyle,\n    prefix + 'rotate-with-view',\n    context,\n  );\n\n  // the remaining symbolizer properties are not currently settable\n  const anchorOrigin = optionalIconOrigin(flatStyle, prefix + 'anchor-origin');\n  const anchorXUnits = optionalIconAnchorUnits(\n    flatStyle,\n    prefix + 'anchor-x-units',\n  );\n  const anchorYUnits = optionalIconAnchorUnits(\n    flatStyle,\n    prefix + 'anchor-y-units',\n  );\n  const colorValue = getExpressionValue(flatStyle, prefix + 'color');\n  let color;\n  let evaluateColor = null;\n  if (colorValue !== undefined) {\n    const isColorExpression =\n      Array.isArray(colorValue) &&\n      colorValue.length > 0 &&\n      typeof colorValue[0] === 'string';\n    if (isColorExpression) {\n      evaluateColor = colorLikeEvaluator(flatStyle, prefix + 'color', context);\n    } else {\n      color = requireColorLike(colorValue, prefix + 'color');\n    }\n  }\n  const crossOrigin = optionalString(flatStyle, prefix + 'cross-origin');\n  const offset = optionalNumberArray(flatStyle, prefix + 'offset');\n  const offsetOrigin = optionalIconOrigin(flatStyle, prefix + 'offset-origin');\n  const width = optionalNumber(flatStyle, prefix + 'width');\n  const height = optionalNumber(flatStyle, prefix + 'height');\n  const size = optionalSize(flatStyle, prefix + 'size');\n  const declutterMode = optionalDeclutterMode(\n    flatStyle,\n    prefix + 'declutter-mode',\n  );\n\n  const iconOptions = {\n    src,\n    anchorOrigin,\n    anchorXUnits,\n    anchorYUnits,\n    crossOrigin,\n    offset,\n    offsetOrigin,\n    height,\n    width,\n    size,\n    declutterMode,\n  };\n\n  let icon = null;\n\n  return function (context) {\n    if (!icon) {\n      // lazily create the icon to allow for expression evaluation\n      const initialColor = evaluateColor ? evaluateColor(context) : color;\n      icon = new Icon(\n        initialColor !== undefined\n          ? Object.assign({}, iconOptions, {color: initialColor})\n          : Object.assign({}, iconOptions),\n      );\n    } else if (evaluateColor) {\n      icon.setColor(evaluateColor(context));\n    }\n    if (evaluateOpacity) {\n      icon.setOpacity(evaluateOpacity(context));\n    }\n\n    if (evaluateDisplacement) {\n      icon.setDisplacement(evaluateDisplacement(context));\n    }\n\n    if (evaluateRotation) {\n      icon.setRotation(evaluateRotation(context));\n    }\n\n    if (evaluateRotateWithView) {\n      icon.setRotateWithView(evaluateRotateWithView(context));\n    }\n\n    if (evaluateScale) {\n      icon.setScale(evaluateScale(context));\n    }\n\n    if (evaluateAnchor) {\n      icon.setAnchor(evaluateAnchor(context));\n    }\n    return icon;\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {ParsingContext} context The parsing context.\n * @return {ImageEvaluator} A function that evaluates to an icon symbolizer.\n */\nfunction buildShape(flatStyle, context) {\n  const prefix = 'shape-';\n\n  // required property\n  const pointsName = prefix + 'points';\n  const radiusName = prefix + 'radius';\n  const points = requireNumber(flatStyle[pointsName], pointsName);\n  if (!(radiusName in flatStyle)) {\n    throw new Error(`Expected a number for ${radiusName}`);\n  }\n  const evaluateRadius = numberEvaluator(flatStyle, radiusName, context);\n  const initialRadius =\n    typeof flatStyle[radiusName] === 'number' ? flatStyle[radiusName] : 5;\n  const radius2Name = prefix + 'radius2';\n  const evaluateRadius2 = numberEvaluator(flatStyle, radius2Name, context);\n  const initialRadius2 =\n    typeof flatStyle[radius2Name] === 'number'\n      ? flatStyle[radius2Name]\n      : undefined;\n\n  // settable properties\n  const evaluateFill = buildFill(flatStyle, prefix, context);\n  const evaluateStroke = buildStroke(flatStyle, prefix, context);\n  const evaluateScale = sizeLikeEvaluator(flatStyle, prefix + 'scale', context);\n  const evaluateDisplacement = coordinateEvaluator(\n    flatStyle,\n    prefix + 'displacement',\n    context,\n  );\n  const evaluateRotation = numberEvaluator(\n    flatStyle,\n    prefix + 'rotation',\n    context,\n  );\n  const evaluateRotateWithView = booleanEvaluator(\n    flatStyle,\n    prefix + 'rotate-with-view',\n    context,\n  );\n\n  // the remaining properties are not currently settable\n  const angle = optionalNumber(flatStyle, prefix + 'angle');\n  const declutterMode = optionalDeclutterMode(\n    flatStyle,\n    prefix + 'declutter-mode',\n  );\n\n  const shape = new RegularShape({\n    points,\n    radius: initialRadius,\n    radius2: initialRadius2,\n    angle,\n    declutterMode,\n  });\n\n  return function (context) {\n    if (evaluateRadius) {\n      shape.setRadius(evaluateRadius(context));\n    }\n    if (evaluateRadius2) {\n      shape.setRadius2(evaluateRadius2(context));\n    }\n    if (evaluateFill) {\n      shape.setFill(evaluateFill(context));\n    }\n    if (evaluateStroke) {\n      shape.setStroke(evaluateStroke(context));\n    }\n    if (evaluateDisplacement) {\n      shape.setDisplacement(evaluateDisplacement(context));\n    }\n    if (evaluateRotation) {\n      shape.setRotation(evaluateRotation(context));\n    }\n    if (evaluateRotateWithView) {\n      shape.setRotateWithView(evaluateRotateWithView(context));\n    }\n    if (evaluateScale) {\n      shape.setScale(evaluateScale(context));\n    }\n\n    return shape;\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {ParsingContext} context The parsing context.\n * @return {ImageEvaluator} A function that evaluates to a circle symbolizer.\n */\nfunction buildCircle(flatStyle, context) {\n  const prefix = 'circle-';\n\n  // settable properties\n  const evaluateFill = buildFill(flatStyle, prefix, context);\n  const evaluateStroke = buildStroke(flatStyle, prefix, context);\n  const evaluateRadius = numberEvaluator(flatStyle, prefix + 'radius', context);\n  const evaluateScale = sizeLikeEvaluator(flatStyle, prefix + 'scale', context);\n  const evaluateDisplacement = coordinateEvaluator(\n    flatStyle,\n    prefix + 'displacement',\n    context,\n  );\n  const evaluateRotation = numberEvaluator(\n    flatStyle,\n    prefix + 'rotation',\n    context,\n  );\n  const evaluateRotateWithView = booleanEvaluator(\n    flatStyle,\n    prefix + 'rotate-with-view',\n    context,\n  );\n\n  // the remaining properties are not currently settable\n  const declutterMode = optionalDeclutterMode(\n    flatStyle,\n    prefix + 'declutter-mode',\n  );\n\n  const circle = new Circle({\n    radius: 5, // this is arbitrary, but required - the evaluated radius is used below\n    declutterMode,\n  });\n\n  return function (context) {\n    if (evaluateRadius) {\n      circle.setRadius(evaluateRadius(context));\n    }\n    if (evaluateFill) {\n      circle.setFill(evaluateFill(context));\n    }\n    if (evaluateStroke) {\n      circle.setStroke(evaluateStroke(context));\n    }\n    if (evaluateDisplacement) {\n      circle.setDisplacement(evaluateDisplacement(context));\n    }\n    if (evaluateRotation) {\n      circle.setRotation(evaluateRotation(context));\n    }\n    if (evaluateRotateWithView) {\n      circle.setRotateWithView(evaluateRotateWithView(context));\n    }\n    if (evaluateScale) {\n      circle.setScale(evaluateScale(context));\n    }\n\n    return circle;\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @return {any|undefined} The encoded value, or undefined if not provided.\n */\nfunction getExpressionValue(flatStyle, name) {\n  if (!(name in flatStyle)) {\n    return undefined;\n  }\n  const value = flatStyle[name];\n  return value === undefined ? undefined : value;\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').NumberEvaluator|undefined} The expression evaluator or undefined.\n */\nfunction numberEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return undefined;\n  }\n  const evaluator = buildExpression(encoded, NumberType, context);\n  return function (context) {\n    return requireNumber(evaluator(context), name);\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').StringEvaluator?} The expression evaluator.\n */\nfunction stringEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return null;\n  }\n  const evaluator = buildExpression(encoded, StringType, context);\n  return function (context) {\n    return requireString(evaluator(context), name);\n  };\n}\n\nfunction patternEvaluator(flatStyle, prefix, context) {\n  const srcEvaluator = stringEvaluator(\n    flatStyle,\n    prefix + 'pattern-src',\n    context,\n  );\n  const offsetEvaluator = sizeEvaluator(\n    flatStyle,\n    prefix + 'pattern-offset',\n    context,\n  );\n  const patternSizeEvaluator = sizeEvaluator(\n    flatStyle,\n    prefix + 'pattern-size',\n    context,\n  );\n  const colorEvaluator = colorLikeEvaluator(\n    flatStyle,\n    prefix + 'color',\n    context,\n  );\n  return function (context) {\n    return {\n      src: srcEvaluator(context),\n      offset: offsetEvaluator && offsetEvaluator(context),\n      size: patternSizeEvaluator && patternSizeEvaluator(context),\n      color: colorEvaluator && colorEvaluator(context),\n    };\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').BooleanEvaluator?} The expression evaluator.\n */\nfunction booleanEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return null;\n  }\n  const evaluator = buildExpression(encoded, BooleanType, context);\n  return function (context) {\n    const value = evaluator(context);\n    if (typeof value !== 'boolean') {\n      throw new Error(`Expected a boolean for ${name}`);\n    }\n    return value;\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').ColorLikeEvaluator?} The expression evaluator.\n */\nfunction colorLikeEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return null;\n  }\n  const evaluator = buildExpression(encoded, ColorType, context);\n  return function (context) {\n    return requireColorLike(evaluator(context), name);\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').NumberArrayEvaluator?} The expression evaluator.\n */\nfunction numberArrayEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return null;\n  }\n  if (\n    Array.isArray(encoded) &&\n    (encoded.length === 0 || typeof encoded[0] !== 'string')\n  ) {\n    /** @type {Array<import('../../expr/cpu.js').NumberEvaluator>} */\n    const evaluators = encoded.map((value, index) => {\n      if (typeof value === 'number') {\n        return () => value;\n      }\n      const evaluator = buildExpression(value, NumberType, context);\n      return function (context) {\n        return requireNumber(evaluator(context), `${name}[${index}]`);\n      };\n    });\n    return function (context) {\n      const array = new Array(evaluators.length);\n      for (let i = 0; i < evaluators.length; ++i) {\n        array[i] = evaluators[i](context);\n      }\n      return array;\n    };\n  }\n  const evaluator = buildExpression(encoded, NumberArrayType, context);\n  return function (context) {\n    return requireNumberArray(evaluator(context), name);\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').CoordinateEvaluator?} The expression evaluator.\n */\nfunction coordinateEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return null;\n  }\n  const evaluator = buildExpression(encoded, NumberArrayType, context);\n  return function (context) {\n    const array = requireNumberArray(evaluator(context), name);\n    if (array.length !== 2) {\n      throw new Error(`Expected two numbers for ${name}`);\n    }\n    return array;\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').SizeEvaluator?} The expression evaluator.\n */\nfunction sizeEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return null;\n  }\n  const evaluator = buildExpression(encoded, NumberArrayType, context);\n  return function (context) {\n    return requireSize(evaluator(context), name);\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} name The property name.\n * @param {ParsingContext} context The parsing context.\n * @return {import('../../expr/cpu.js').SizeLikeEvaluator?} The expression evaluator.\n */\nfunction sizeLikeEvaluator(flatStyle, name, context) {\n  const encoded = getExpressionValue(flatStyle, name);\n  if (encoded === undefined) {\n    return null;\n  }\n  const evaluator = buildExpression(\n    encoded,\n    NumberArrayType | NumberType,\n    context,\n  );\n  return function (context) {\n    return requireSizeLike(evaluator(context), name);\n  };\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} property The symbolizer property.\n * @return {number|undefined} A number or undefined.\n */\nfunction optionalNumber(flatStyle, property) {\n  const value = flatStyle[property];\n  if (value === undefined) {\n    return undefined;\n  }\n  if (typeof value !== 'number') {\n    throw new Error(`Expected a number for ${property}`);\n  }\n  return value;\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} property The symbolizer property.\n * @return {import(\"../../size.js\").Size|undefined} A size or undefined.\n */\nfunction optionalSize(flatStyle, property) {\n  const encoded = flatStyle[property];\n  if (encoded === undefined) {\n    return undefined;\n  }\n  if (typeof encoded === 'number') {\n    return toSize(encoded);\n  }\n  if (!Array.isArray(encoded)) {\n    throw new Error(`Expected a number or size array for ${property}`);\n  }\n  if (\n    encoded.length !== 2 ||\n    typeof encoded[0] !== 'number' ||\n    typeof encoded[1] !== 'number'\n  ) {\n    throw new Error(`Expected a number or size array for ${property}`);\n  }\n  return encoded;\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} property The symbolizer property.\n * @return {string|undefined} A string or undefined.\n */\nfunction optionalString(flatStyle, property) {\n  const encoded = flatStyle[property];\n  if (encoded === undefined) {\n    return undefined;\n  }\n  if (typeof encoded !== 'string') {\n    throw new Error(`Expected a string for ${property}`);\n  }\n  return encoded;\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} property The symbolizer property.\n * @return {import(\"../../style/Icon.js\").IconOrigin|undefined} An icon origin or undefined.\n */\nfunction optionalIconOrigin(flatStyle, property) {\n  const encoded = flatStyle[property];\n  if (encoded === undefined) {\n    return undefined;\n  }\n  if (\n    encoded !== 'bottom-left' &&\n    encoded !== 'bottom-right' &&\n    encoded !== 'top-left' &&\n    encoded !== 'top-right'\n  ) {\n    throw new Error(\n      `Expected bottom-left, bottom-right, top-left, or top-right for ${property}`,\n    );\n  }\n  return encoded;\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} property The symbolizer property.\n * @return {import(\"../../style/Icon.js\").IconAnchorUnits|undefined} Icon anchor units or undefined.\n */\nfunction optionalIconAnchorUnits(flatStyle, property) {\n  const encoded = flatStyle[property];\n  if (encoded === undefined) {\n    return undefined;\n  }\n  if (encoded !== 'pixels' && encoded !== 'fraction') {\n    throw new Error(`Expected pixels or fraction for ${property}`);\n  }\n  return encoded;\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} property The symbolizer property.\n * @return {Array<number>|undefined} An array of numbers or undefined.\n */\nfunction optionalNumberArray(flatStyle, property) {\n  const encoded = flatStyle[property];\n  if (encoded === undefined) {\n    return undefined;\n  }\n  return requireNumberArray(encoded, property);\n}\n\n/**\n * @param {FlatStyle} flatStyle The flat style.\n * @param {string} property The symbolizer property.\n * @return {import('../../style/Style.js').DeclutterMode} Icon declutter mode.\n */\nfunction optionalDeclutterMode(flatStyle, property) {\n  const encoded = flatStyle[property];\n  if (encoded === undefined) {\n    return undefined;\n  }\n  if (typeof encoded !== 'string') {\n    throw new Error(`Expected a string for ${property}`);\n  }\n  if (encoded !== 'declutter' && encoded !== 'obstacle' && encoded !== 'none') {\n    throw new Error(`Expected declutter, obstacle, or none for ${property}`);\n  }\n  return encoded;\n}\n\n/**\n * @param {any} value The value.\n * @param {string} property The property.\n * @return {Array<number>} An array of numbers.\n */\nfunction requireNumberArray(value, property) {\n  if (!Array.isArray(value)) {\n    throw new Error(`Expected an array for ${property}`);\n  }\n  const length = value.length;\n  for (let i = 0; i < length; ++i) {\n    if (typeof value[i] !== 'number') {\n      throw new Error(`Expected an array of numbers for ${property}`);\n    }\n  }\n  return value;\n}\n\n/**\n * @param {any} value The value.\n * @param {string} property The property.\n * @return {string} A string.\n */\nfunction requireString(value, property) {\n  if (typeof value !== 'string') {\n    throw new Error(`Expected a string for ${property}`);\n  }\n  return value;\n}\n\n/**\n * @param {any} value The value.\n * @param {string} property The property.\n * @return {number} A number.\n */\nfunction requireNumber(value, property) {\n  if (typeof value !== 'number') {\n    throw new Error(`Expected a number for ${property}`);\n  }\n  return value;\n}\n\n/**\n * @param {any} value The value.\n * @param {string} property The property.\n * @return {Array<number>|string} A color.\n */\nfunction requireColorLike(value, property) {\n  if (typeof value === 'string') {\n    return value;\n  }\n  const array = requireNumberArray(value, property);\n  const length = array.length;\n  if (length < 3 || length > 4) {\n    throw new Error(`Expected a color with 3 or 4 values for ${property}`);\n  }\n  return array;\n}\n\n/**\n * @param {any} value The value.\n * @param {string} property The property.\n * @return {Array<number>} A number or an array of two numbers.\n */\nfunction requireSize(value, property) {\n  const size = requireNumberArray(value, property);\n  if (size.length !== 2) {\n    throw new Error(`Expected an array of two numbers for ${property}`);\n  }\n  return size;\n}\n\n/**\n * @param {any} value The value.\n * @param {string} property The property.\n * @return {number|Array<number>} A number or an array of two numbers.\n */\nfunction requireSizeLike(value, property) {\n  if (typeof value === 'number') {\n    return value;\n  }\n  return requireSize(value, property);\n}\n","/**\n * @module ol/layer/BaseVector\n */\nimport RBush from 'rbush';\nimport {flatStyleLikeToStyleFunction} from '../render/canvas/style.js';\nimport Style, {\n  createDefaultStyle,\n  toFunction as toStyleFunction,\n} from '../style/Style.js';\nimport Layer from './Layer.js';\n\n/***\n * @template T\n * @typedef {T extends import(\"../source/Vector.js\").default<infer U extends import(\"../Feature.js\").FeatureLike> ? U : never} ExtractedFeatureType\n */\n\n/**\n * @template {import('../Feature.js').FeatureLike} FeatureType\n * @template {import(\"../source/Vector.js\").default<FeatureType>|import(\"../source/VectorTile.js\").default<FeatureType>} VectorSourceType<FeatureType>\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the viewport extent used by the\n * renderer when getting features from the vector source for the rendering or hit-detection.\n * Recommended value: the size of the largest symbol, line width or label.\n * @property {VectorSourceType} [source] Source.\n * @property {import(\"../Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use [map.addLayer()]{@link import(\"../Map.js\").default#addLayer}.\n * @property {boolean|string|number} [declutter=false] Declutter images and text. Any truthy value will enable\n * decluttering. Within a layer, a feature rendered before another has higher priority. All layers with the\n * same `declutter` value will be decluttered together. The priority is determined by the drawing order of the\n * layers with the same `declutter` value. Higher in the layer stack means higher priority. To declutter distinct\n * layers or groups of layers separately, use different truthy values for `declutter`.\n * @property {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike|null} [style] Layer style. When set to `null`, only\n * features that have their own style will be rendered. See {@link module:ol/style/Style~Style} for the default style\n * which will be used if this is not set.\n * @property {import(\"./Base.js\").BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will\n * be recreated during animations. This means that no vectors will be shown clipped, but the\n * setting will have a performance impact for large amounts of vector data. When set to `false`,\n * batches will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will\n * be recreated during interactions. See also `updateWhileAnimating`.\n * @property {Object<string, *>} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n  RENDER_ORDER: 'renderOrder',\n};\n\n/**\n * @classdesc\n * Vector data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import('../Feature.js').FeatureLike} FeatureType\n * @template {import(\"../source/Vector.js\").default<FeatureType>|import(\"../source/VectorTile.js\").default<FeatureType>} VectorSourceType<FeatureType>\n * @extends {Layer<VectorSourceType, RendererType>}\n * @template {import(\"../renderer/canvas/VectorLayer.js\").default|import(\"../renderer/canvas/VectorTileLayer.js\").default|import(\"../renderer/canvas/VectorImageLayer.js\").default|import(\"../renderer/webgl/VectorLayer.js\").default|import(\"../renderer/webgl/PointsLayer.js\").default} RendererType\n * @api\n */\nclass BaseVectorLayer extends Layer {\n  /**\n   * @param {Options<FeatureType, VectorSourceType>} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const baseOptions = Object.assign({}, options);\n\n    delete baseOptions.style;\n    delete baseOptions.renderBuffer;\n    delete baseOptions.updateWhileAnimating;\n    delete baseOptions.updateWhileInteracting;\n    super(baseOptions);\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.declutter_ = options.declutter ? String(options.declutter) : undefined;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.renderBuffer_ =\n      options.renderBuffer !== undefined ? options.renderBuffer : 100;\n\n    /**\n     * User provided style.\n     * @type {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike}\n     * @private\n     */\n    this.style_ = null;\n\n    /**\n     * Style function for use within the library.\n     * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n     * @private\n     */\n    this.styleFunction_ = undefined;\n\n    this.setStyle(options.style);\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.updateWhileAnimating_ =\n      options.updateWhileAnimating !== undefined\n        ? options.updateWhileAnimating\n        : false;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.updateWhileInteracting_ =\n      options.updateWhileInteracting !== undefined\n        ? options.updateWhileInteracting\n        : false;\n  }\n\n  /**\n   * @return {string} Declutter group.\n   * @override\n   */\n  getDeclutter() {\n    return this.declutter_;\n  }\n\n  /**\n   * Get the topmost feature that intersects the given pixel on the viewport. Returns a promise\n   * that resolves with an array of features. The array will either contain the topmost feature\n   * when a hit was detected, or it will be empty.\n   *\n   * The hit detection algorithm used for this method is optimized for performance, but is less\n   * accurate than the one used in [map.getFeaturesAtPixel()]{@link import(\"../Map.js\").default#getFeaturesAtPixel}.\n   * Text is not considered, and icons are only represented by their bounding box instead of the exact\n   * image.\n   *\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Promise<Array<import(\"../Feature.js\").FeatureLike>>} Promise that resolves with an array of features.\n   * @api\n   * @override\n   */\n  getFeatures(pixel) {\n    return super.getFeatures(pixel);\n  }\n\n  /**\n   * @return {number|undefined} Render buffer.\n   */\n  getRenderBuffer() {\n    return this.renderBuffer_;\n  }\n\n  /**\n   * @return {import(\"../render.js\").OrderFunction|null|undefined} Render order.\n   */\n  getRenderOrder() {\n    return /** @type {import(\"../render.js\").OrderFunction|null|undefined} */ (\n      this.get(Property.RENDER_ORDER)\n    );\n  }\n\n  /**\n   * Get the style for features.  This returns whatever was passed to the `style`\n   * option at construction or to the `setStyle` method.\n   * @return {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike|null|undefined} Layer style.\n   * @api\n   */\n  getStyle() {\n    return this.style_;\n  }\n\n  /**\n   * Get the style function.\n   * @return {import(\"../style/Style.js\").StyleFunction|undefined} Layer style function.\n   * @api\n   */\n  getStyleFunction() {\n    return this.styleFunction_;\n  }\n\n  /**\n   * @return {boolean} Whether the rendered layer should be updated while\n   *     animating.\n   */\n  getUpdateWhileAnimating() {\n    return this.updateWhileAnimating_;\n  }\n\n  /**\n   * @return {boolean} Whether the rendered layer should be updated while\n   *     interacting.\n   */\n  getUpdateWhileInteracting() {\n    return this.updateWhileInteracting_;\n  }\n\n  /**\n   * Render declutter items for this layer\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @param {import(\"../layer/Layer.js\").State} layerState Layer state.\n   * @override\n   */\n  renderDeclutter(frameState, layerState) {\n    const declutterGroup = this.getDeclutter();\n    if (declutterGroup in frameState.declutter === false) {\n      frameState.declutter[declutterGroup] = new RBush(9);\n    }\n    this.getRenderer().renderDeclutter(frameState, layerState);\n  }\n\n  /**\n   * @param {import(\"../render.js\").OrderFunction|null|undefined} renderOrder\n   *     Render order.\n   */\n  setRenderOrder(renderOrder) {\n    this.set(Property.RENDER_ORDER, renderOrder);\n  }\n\n  /**\n   * Set the style for features.  This can be a single style object, an array\n   * of styles, or a function that takes a feature and resolution and returns\n   * an array of styles. If set to `null`, the layer has no style (a `null` style),\n   * so only features that have their own styles will be rendered in the layer. Call\n   * `setStyle()` without arguments to reset to the default style. See\n   * [the ol/style/Style module]{@link module:ol/style/Style~Style} for information on the default style.\n   *\n   * If your layer has a static style, you can use [flat style]{@link module:ol/style/flat~FlatStyle} object\n   * literals instead of using the `Style` and symbolizer constructors (`Fill`, `Stroke`, etc.):\n   * ```js\n   * vectorLayer.setStyle({\n   *   \"fill-color\": \"yellow\",\n   *   \"stroke-color\": \"black\",\n   *   \"stroke-width\": 4\n   * })\n   * ```\n   *\n   * @param {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike|null} [style] Layer style.\n   * @api\n   */\n  setStyle(style) {\n    this.style_ = style === undefined ? createDefaultStyle : style;\n    const styleLike = toStyleLike(style);\n    this.styleFunction_ =\n      style === null ? undefined : toStyleFunction(styleLike);\n    this.changed();\n  }\n\n  /**\n   * @param {boolean|string|number} declutter Declutter images and text.\n   * @api\n   */\n  setDeclutter(declutter) {\n    this.declutter_ = declutter ? String(declutter) : undefined;\n    this.changed();\n  }\n}\n\n/**\n * Coerce the allowed style types into a shorter list of types.  Flat styles, arrays of flat\n * styles, and arrays of rules are converted into style functions.\n *\n * @param {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike|null} [style] Layer style.\n * @return {import(\"../style/Style.js\").StyleLike|null} The style.\n */\nfunction toStyleLike(style) {\n  if (style === undefined) {\n    return createDefaultStyle;\n  }\n  if (!style) {\n    return null;\n  }\n  if (typeof style === 'function') {\n    return style;\n  }\n  if (style instanceof Style) {\n    return style;\n  }\n  if (Array.isArray(style) && style.length === 0) {\n    return [];\n  }\n  if (Array.isArray(style) && style[0] instanceof Style) {\n    const length = style.length;\n    const styles = new Array(length);\n    for (let i = 0; i < length; ++i) {\n      const candidate = style[i];\n      if (!(candidate instanceof Style)) {\n        throw new Error('Expected a list of style instances');\n      }\n      styles[i] = candidate;\n    }\n    return styles;\n  }\n\n  const flatStyleLike =\n    /** @type {import(\"../style/flat.js\").FlatStyleLike} */ (style);\n  return flatStyleLikeToStyleFunction(flatStyleLike);\n}\n\nexport default BaseVectorLayer;\n","/**\n * @module ol/renderer/webgl/FlowLayer\n */\nimport {ARRAY_BUFFER, STATIC_DRAW} from '../../webgl.js';\nimport WebGLArrayBuffer from '../../webgl/Buffer.js';\nimport {DefaultUniform} from '../../webgl/Helper.js';\nimport WebGLTileLayerRenderer from './TileLayer.js';\n\n/**\n * @typedef {import(\"../../layer/Flow.js\").default} LayerType\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} maxSpeed The maximum particle speed in the input data.\n * @property {number} [speedFactor=0.001] A larger factor increases the rate at which particles cross the screen.\n * @property {number} [particles=65536] The number of particles to render.\n * @property {number} [cacheSize=512] The texture cache size.\n * @property {string} tileVertexShader The flow tile vertex shader.\n * @property {string} tileFragmentShader The flow tile fragment shader.\n * @property {string} textureVertexShader Generic texture fragment shader.\n * @property {string} textureFragmentShader Generic texture fragment shader.\n * @property {string} particlePositionVertexShader The particle position vertex shader.\n * @property {string} particlePositionFragmentShader The particle position fragment shader.\n * @property {string} particleColorVertexShader The particle color vertex shader.\n * @property {string} particleColorFragmentShader The particle color fragment shader.\n */\n\n/**\n * Shader uniforms.\n * @enum {string}\n */\nexport const U = {\n  TEXTURE: 'u_texture',\n  VELOCITY_TEXTURE: 'u_velocityTexture',\n  POSITION_TEXTURE: 'u_positionTexture',\n  PARTICLE_COUNT_SQRT: 'u_particleCountSqrt',\n  MAX_SPEED: 'u_maxSpeed',\n  GAIN: 'u_gain',\n  OFFSET: 'u_offset',\n  IS_FLOAT: 'u_isFloat',\n  RANDOM_SEED: 'u_randomSeed',\n  SPEED_FACTOR: 'u_speedFactor',\n  DROP_RATE: 'u_dropRate',\n  DROP_RATE_BUMP: 'u_dropRateBump',\n  OPACITY: 'u_opacity',\n  ROTATION: DefaultUniform.ROTATION,\n  VIEWPORT_SIZE_PX: DefaultUniform.VIEWPORT_SIZE_PX,\n};\n\n/**\n * Shader attributes.\n * @enum {string}\n */\nexport const A = {\n  POSITION: 'a_position',\n  INDEX: 'a_index',\n};\n\n/**\n * Shader varyings.\n * @enum {string}\n */\nexport const V = {\n  POSITION: 'v_position',\n};\n\n/**\n * @classdesc\n * Experimental WebGL renderer for vector fields.\n * @extends {WebGLTileLayerRenderer<LayerType>}\n */\nclass FlowLayerRenderer extends WebGLTileLayerRenderer {\n  /**\n   * @param {LayerType} layer The tiled field layer.\n   * @param {Options} options The renderer options.\n   */\n  constructor(layer, options) {\n    super(layer, {\n      vertexShader: options.tileVertexShader,\n      fragmentShader: options.tileFragmentShader,\n      cacheSize: options.cacheSize,\n      // TODO: rework the post-processing logic\n      // see https://github.com/openlayers/openlayers/issues/16120\n      postProcesses: [{}],\n      uniforms: {\n        [U.MAX_SPEED]: options.maxSpeed,\n      },\n    });\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.particleColorFragmentShader_ = options.particleColorFragmentShader;\n\n    /**\n     * @type {WebGLTexture|null}\n     * @private\n     */\n    this.velocityTexture_ = null;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.particleCountSqrt_ = options.particles\n      ? Math.ceil(Math.sqrt(options.particles))\n      : 256;\n\n    /**\n     * @type {WebGLArrayBuffer}\n     * @private\n     */\n    this.particleIndexBuffer_;\n\n    /**\n     * @type {WebGLArrayBuffer}\n     * @private\n     */\n    this.quadBuffer_;\n\n    /**\n     * @type {WebGLProgram}\n     * @private\n     */\n    this.particlePositionProgram_;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.particlePositionVertexShader_ = options.particlePositionVertexShader;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.particlePositionFragmentShader_ =\n      options.particlePositionFragmentShader;\n\n    /**\n     * @type {WebGLTexture}\n     * @private\n     */\n    this.previousPositionTexture_;\n\n    /**\n     * @type {WebGLTexture}\n     * @private\n     */\n    this.nextPositionTexture_;\n\n    /**\n     * @type {WebGLProgram}\n     * @private\n     */\n    this.particleColorProgram_;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.particleColorVertexShader_ = options.particleColorVertexShader;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.particleColorFragmentShader_ = options.particleColorFragmentShader;\n\n    /**\n     * @type {WebGLProgram}\n     * @private\n     */\n    this.textureProgram_;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.textureVertexShader_ = options.textureVertexShader;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.textureFragmentShader_ = options.textureFragmentShader;\n\n    /**\n     * @type {WebGLTexture}\n     * @private\n     */\n    this.previousTrailsTexture_;\n\n    /**\n     * @type {WebGLTexture}\n     * @private\n     */\n    this.nextTrailsTexture_;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.fadeOpacity_ = 0.996; // how fast the particle trails fade on each frame\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.maxSpeed_ = options.maxSpeed;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.speedFactor_ = options.speedFactor || 0.001;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.dropRate_ = 0.003; // how often the particles move to a random place\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.dropRateBump_ = 0.01; // drop rate increase relative to individual particle speed\n\n    /**\n     * @type {Array<number>}\n     * @private\n     */\n    this.tempVec2_ = [0, 0];\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.renderedWidth_ = 0;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.renderedHeight_ = 0;\n  }\n\n  /**\n   * @override\n   */\n  afterHelperCreated() {\n    super.afterHelperCreated();\n    const helper = this.helper;\n\n    const gl = helper.getGL();\n    this.framebuffer_ = gl.createFramebuffer();\n\n    const particleCount = this.particleCountSqrt_ * this.particleCountSqrt_;\n    const particleIndices = new Float32Array(particleCount);\n    for (let i = 0; i < particleCount; ++i) {\n      particleIndices[i] = i;\n    }\n    const particleIndexBuffer = new WebGLArrayBuffer(ARRAY_BUFFER, STATIC_DRAW);\n    particleIndexBuffer.setArray(particleIndices);\n    helper.flushBufferData(particleIndexBuffer);\n    this.particleIndexBuffer_ = particleIndexBuffer;\n\n    const quadIndices = new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]);\n    const quadBuffer = new WebGLArrayBuffer(ARRAY_BUFFER, STATIC_DRAW);\n    quadBuffer.setArray(quadIndices);\n    helper.flushBufferData(quadBuffer);\n    this.quadBuffer_ = quadBuffer;\n\n    const particlePositions = new Uint8Array(particleCount * 4);\n    for (let i = 0; i < particlePositions.length; ++i) {\n      particlePositions[i] = Math.floor(Math.random() * 256);\n    }\n\n    this.previousPositionTexture_ = helper.createTexture(\n      [this.particleCountSqrt_, this.particleCountSqrt_],\n      particlePositions,\n      null,\n      true,\n    );\n\n    this.nextPositionTexture_ = helper.createTexture(\n      [this.particleCountSqrt_, this.particleCountSqrt_],\n      particlePositions,\n      null,\n      true,\n    );\n\n    this.particlePositionProgram_ = helper.getProgram(\n      this.particlePositionFragmentShader_,\n      this.particlePositionVertexShader_,\n    );\n\n    this.particleColorProgram_ = helper.getProgram(\n      this.particleColorFragmentShader_,\n      this.particleColorVertexShader_,\n    );\n\n    this.textureProgram_ = helper.getProgram(\n      this.textureFragmentShader_,\n      this.textureVertexShader_,\n    );\n  }\n\n  createSizeDependentTextures_() {\n    const helper = this.helper;\n    const gl = helper.getGL();\n    const canvas = helper.getCanvas();\n    const screenWidth = canvas.width;\n    const screenHeight = canvas.height;\n\n    const blank = new Uint8Array(screenWidth * screenHeight * 4);\n\n    if (this.nextTrailsTexture_) {\n      gl.deleteTexture(this.nextTrailsTexture_);\n    }\n    this.nextTrailsTexture_ = helper.createTexture(\n      [screenWidth, screenHeight],\n      blank,\n      null,\n      true,\n    );\n\n    if (this.previousTrailsTexture_) {\n      gl.deleteTexture(this.previousTrailsTexture_);\n    }\n    this.previousTrailsTexture_ = helper.createTexture(\n      [screenWidth, screenHeight],\n      blank,\n      null,\n      true,\n    );\n  }\n\n  /**\n   * @override\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   */\n  beforeFinalize(frameState) {\n    const helper = this.helper;\n    const gl = helper.getGL();\n    const canvas = helper.getCanvas();\n    const screenWidth = canvas.width;\n    const screenHeight = canvas.height;\n\n    if (\n      this.renderedWidth_ != screenWidth ||\n      this.renderedHeight_ != screenHeight\n    ) {\n      this.createSizeDependentTextures_();\n    }\n\n    const size = [screenWidth, screenHeight];\n\n    // copy current frame buffer to the velocity texture\n    this.velocityTexture_ = helper.createTexture(\n      size,\n      null,\n      this.velocityTexture_,\n    );\n    gl.copyTexImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      0,\n      0,\n      screenWidth,\n      screenHeight,\n      0,\n    );\n\n    this.drawParticleTrails_(frameState);\n    this.updateParticlePositions_(frameState);\n\n    frameState.animate = true;\n    this.renderedWidth_ = screenWidth;\n    this.renderedHeight_ = screenHeight;\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   */\n  drawParticleTrails_(frameState) {\n    const helper = this.helper;\n    const gl = helper.getGL();\n\n    helper.bindFrameBuffer(this.framebuffer_, this.nextTrailsTexture_);\n\n    this.drawTexture_(this.previousTrailsTexture_, this.fadeOpacity_);\n    this.drawParticleColor_(frameState);\n\n    helper.bindInitialFrameBuffer();\n    gl.clearColor(0.0, 0.0, 0.0, 0.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    gl.enable(gl.BLEND);\n    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n    this.drawTexture_(this.nextTrailsTexture_, 1);\n    gl.disable(gl.BLEND);\n\n    const current = this.nextTrailsTexture_;\n    this.nextTrailsTexture_ = this.previousTrailsTexture_;\n    this.previousTrailsTexture_ = current;\n  }\n\n  /**\n   * @param {WebGLTexture} texture The texture to draw.\n   * @param {number} opacity The opacity.\n   */\n  drawTexture_(texture, opacity) {\n    const helper = this.helper;\n    const gl = helper.getGL();\n\n    helper.useProgram(this.textureProgram_);\n    helper.bindTexture(texture, 0, U.TEXTURE);\n    helper.bindAttribute(this.quadBuffer_, A.POSITION, 2);\n    this.helper.setUniformFloatValue(U.OPACITY, opacity);\n\n    gl.drawArrays(gl.TRIANGLES, 0, 6);\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   */\n  drawParticleColor_(frameState) {\n    const helper = this.helper;\n    const gl = helper.getGL();\n\n    helper.useProgram(this.particleColorProgram_);\n\n    const particleCount = this.particleCountSqrt_ * this.particleCountSqrt_;\n\n    helper.bindAttribute(this.particleIndexBuffer_, A.INDEX, 1);\n\n    helper.bindTexture(this.previousPositionTexture_, 0, U.POSITION_TEXTURE);\n    helper.bindTexture(this.velocityTexture_, 1, U.VELOCITY_TEXTURE);\n\n    this.helper.setUniformFloatValue(\n      U.PARTICLE_COUNT_SQRT,\n      this.particleCountSqrt_,\n    );\n\n    const rotation = this.tempVec2_;\n    rotation[0] = Math.cos(-frameState.viewState.rotation);\n    rotation[1] = Math.sin(-frameState.viewState.rotation);\n    this.helper.setUniformFloatVec2(U.ROTATION, rotation);\n\n    this.helper.setUniformFloatValue(U.MAX_SPEED, this.maxSpeed_);\n\n    gl.drawArrays(gl.POINTS, 0, particleCount);\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   */\n  updateParticlePositions_(frameState) {\n    const helper = this.helper;\n    const gl = helper.getGL();\n\n    helper.useProgram(this.particlePositionProgram_);\n    gl.viewport(0, 0, this.particleCountSqrt_, this.particleCountSqrt_);\n    helper.bindFrameBuffer(this.framebuffer_, this.nextPositionTexture_);\n\n    helper.bindTexture(this.previousPositionTexture_, 0, U.POSITION_TEXTURE);\n    helper.bindTexture(this.velocityTexture_, 1, U.VELOCITY_TEXTURE);\n    helper.bindAttribute(this.quadBuffer_, A.POSITION, 2);\n\n    helper.setUniformFloatValue(U.RANDOM_SEED, Math.random());\n    helper.setUniformFloatValue(U.SPEED_FACTOR, this.speedFactor_);\n    helper.setUniformFloatValue(U.DROP_RATE, this.dropRate_);\n    helper.setUniformFloatValue(U.DROP_RATE_BUMP, this.dropRateBump_);\n\n    const rotation = this.tempVec2_;\n    rotation[0] = Math.cos(-frameState.viewState.rotation);\n    rotation[1] = Math.sin(-frameState.viewState.rotation);\n    this.helper.setUniformFloatVec2(U.ROTATION, rotation);\n\n    const size = frameState.size;\n    this.helper.setUniformFloatVec2(U.VIEWPORT_SIZE_PX, [size[0], size[1]]);\n\n    gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n    const current = this.nextPositionTexture_;\n    this.nextPositionTexture_ = this.previousPositionTexture_;\n    this.previousPositionTexture_ = current;\n  }\n}\n\nexport default FlowLayerRenderer;\n","/**\n * @module ol/layer/Flow\n */\nimport {ColorType} from '../expr/expression.js';\nimport {\n  getStringNumberEquivalent,\n  newCompilationContext,\n  uniformNameForVariable,\n} from '../expr/gpu.js';\nimport {expressionToGlsl} from '../render/webgl/compileUtil.js';\nimport FlowLayerRenderer, {A, U, V} from '../renderer/webgl/FlowLayer.js';\nimport {Attributes as BA, Uniforms as BU} from '../renderer/webgl/TileLayer.js';\nimport BaseTileLayer from './BaseTile.js';\nimport LayerProperty from './Property.js';\n\n/**\n * @typedef {import(\"../source/DataTile.js\").default} SourceType\n */\n\n/**\n * @typedef {Object} Style\n * Translates tile data to rendered pixels.\n *\n * @property {Object<string, (string|number)>} [variables] Style variables.  Each variable must hold a number or string.  These\n * variables can be used in the `color` {@link import(\"../expr/expression.js\").ExpressionValue expression} using\n * the `['var', 'varName']` operator.  To update style variables, use the {@link import(\"./WebGLTile.js\").default#updateStyleVariables} method.\n * @property {import(\"../expr/expression.js\").ExpressionValue} [color] An expression applied to color values.\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} maxSpeed The maximum particle speed.\n * @property {number} [speedFactor=0.001] A larger factor increases the rate at which particles cross the screen.\n * @property {number} [particles=65536] The number of particles to render.\n * @property {Style} [style] Style to apply to the layer.\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {SourceType} [source] Source for this layer.\n * @property {import(\"../Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link module:ol/Map~Map#addLayer}.\n * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.\n * @property {number} [cacheSize=512] The internal texture cache size.  This needs to be large enough to render\n * two zoom levels worth of tiles.\n */\n\nconst tileVertexShader = `\n  attribute vec2 ${BA.TEXTURE_COORD};\n  uniform mat4 ${BU.TILE_TRANSFORM};\n  uniform float ${BU.TEXTURE_PIXEL_WIDTH};\n  uniform float ${BU.TEXTURE_PIXEL_HEIGHT};\n  uniform float ${BU.TEXTURE_RESOLUTION};\n  uniform float ${BU.DEPTH};\n\n  varying vec2 v_textureCoord;\n  varying vec2 v_localMapCoord;\n\n  void main() {\n    v_textureCoord = ${BA.TEXTURE_COORD};\n    v_localMapCoord = vec2(\n      ${BU.TEXTURE_RESOLUTION} * ${BU.TEXTURE_PIXEL_WIDTH} * v_textureCoord[0],\n      -1. * ${BU.TEXTURE_RESOLUTION} * ${BU.TEXTURE_PIXEL_HEIGHT} * v_textureCoord[1]\n    );\n    gl_Position = ${BU.TILE_TRANSFORM} * vec4(${BA.TEXTURE_COORD}, ${BU.DEPTH}, 1.0);\n  }\n`;\n\nconst tileFragmentShader = `\n  #ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n  #else\n  precision mediump float;\n  #endif\n\n  uniform vec4 ${BU.RENDER_EXTENT};\n  uniform float ${U.MAX_SPEED};\n  uniform sampler2D ${BU.TILE_TEXTURE_ARRAY}[1];\n\n  varying vec2 v_textureCoord;\n  varying vec2 v_localMapCoord;\n\n  void main() {\n    if (\n      v_localMapCoord[0] < ${BU.RENDER_EXTENT}[0] ||\n      v_localMapCoord[1] < ${BU.RENDER_EXTENT}[1] ||\n      v_localMapCoord[0] > ${BU.RENDER_EXTENT}[2] ||\n      v_localMapCoord[1] > ${BU.RENDER_EXTENT}[3]\n    ) {\n      discard;\n    }\n\n    vec4 velocity = texture2D(${BU.TILE_TEXTURE_ARRAY}[0],  v_textureCoord);\n    gl_FragColor = vec4((velocity.xy + ${U.MAX_SPEED}) / (2.0 * ${U.MAX_SPEED}), 0, 1);\n  }\n`;\n\n/**\n * Sets up a varying position for rendering textures.\n */\nconst quadVertexShader = `\n  #ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n  #else\n  precision mediump float;\n  #endif\n\n  attribute vec2 ${A.POSITION};\n\n  varying vec2 ${V.POSITION};\n\n  void main() {\n    ${V.POSITION} = ${A.POSITION};\n    gl_Position = vec4(1.0 - 2.0 * ${A.POSITION}, 0, 1);\n  }\n`;\n\n/**\n * Sampes a texture and renders it with a new opacity.\n */\nconst textureFragmentShader = `\n  #ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n  #else\n  precision mediump float;\n  #endif\n\n  uniform sampler2D ${U.TEXTURE};\n  uniform float ${U.OPACITY};\n\n  varying vec2 ${V.POSITION};\n\n  void main() {\n    vec4 color = texture2D(${U.TEXTURE}, 1.0 - ${V.POSITION});\n    gl_FragColor = vec4(floor(255.0 * color * ${U.OPACITY}) / 255.0);\n  }\n`;\n\n/**\n * Samples current particle positions, determines new positions based on velocity, and\n * encodes the new position as a color.\n */\nconst particlePositionFragmentShader = `\n  #ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n  #else\n  precision mediump float;\n  #endif\n\n  uniform sampler2D ${U.POSITION_TEXTURE};\n  uniform sampler2D ${U.VELOCITY_TEXTURE};\n  uniform float ${U.RANDOM_SEED};\n  uniform float ${U.SPEED_FACTOR};\n  uniform float ${U.DROP_RATE};\n  uniform float ${U.DROP_RATE_BUMP};\n  uniform vec2 ${U.ROTATION};\n  uniform vec2 ${U.VIEWPORT_SIZE_PX};\n\n  varying vec2 ${V.POSITION};\n\n  // pseudo-random generator\n  const vec3 randConstants = vec3(12.9898, 78.233, 4375.85453);\n\n  float rand(const vec2 co) {\n    float t = dot(randConstants.xy, co);\n    return fract(sin(t) * (randConstants.z + t));\n  }\n\n  void main() {\n    vec4 positionColor = texture2D(${U.POSITION_TEXTURE}, ${V.POSITION});\n\n    // decode particle position from pixel RGBA\n    vec2 particlePosition = vec2(\n      positionColor.r / 255.0 + positionColor.b,\n      positionColor.g / 255.0 + positionColor.a\n    );\n\n    vec4 velocityColor = texture2D(${U.VELOCITY_TEXTURE}, particlePosition);\n    if (velocityColor.a == 0.0) {\n      discard;\n    }\n\n    float vx = 2.0 * velocityColor.r - 1.0;\n    float vy = 2.0 * velocityColor.g - 1.0;\n\n    // normalized veloicty (magnitude 0 - 1)\n    vec2 velocity = vec2(\n      vx * ${U.ROTATION}.x - vy * ${U.ROTATION}.y,\n      vx * ${U.ROTATION}.y + vy * ${U.ROTATION}.x\n    );\n\n    // account for aspect ratio (square particle position texture, non-square map)\n    float aspectRatio = ${U.VIEWPORT_SIZE_PX}.x / ${U.VIEWPORT_SIZE_PX}.y;\n    vec2 offset = vec2(velocity.x / aspectRatio, velocity.y) * ${U.SPEED_FACTOR};\n\n    // update particle position, wrapping around the edge\n    particlePosition = fract(1.0 + particlePosition + offset);\n\n    // a random seed to use for the particle drop\n    vec2 seed = (particlePosition + ${V.POSITION}) * ${U.RANDOM_SEED};\n\n    // drop rate is a chance a particle will restart at random position, to avoid degeneration\n    float dropRate = ${U.DROP_RATE} + length(velocity) * ${U.DROP_RATE_BUMP};\n    float drop = step(1.0 - dropRate, rand(seed));\n\n    vec2 randomPosition = vec2(rand(seed + 1.3), rand(seed + 2.1));\n    particlePosition = mix(particlePosition, randomPosition, drop);\n\n    // encode the new particle position back into RGBA\n    gl_FragColor = vec4(\n      fract(particlePosition * 255.0),\n      floor(particlePosition * 255.0) / 255.0\n    );\n  }\n`;\n\n/**\n * Samples the particle position texture to decode the particle position\n * based on pixel color.\n */\nconst particleColorVertexShader = `\n  #ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n  #else\n  precision mediump float;\n  #endif\n\n  attribute float ${A.INDEX};\n\n  uniform sampler2D ${U.POSITION_TEXTURE};\n  uniform float ${U.PARTICLE_COUNT_SQRT};\n\n  varying vec2 ${V.POSITION};\n\n  void main() {\n    vec4 color = texture2D(\n      ${U.POSITION_TEXTURE},\n      vec2(\n        fract(${A.INDEX} / ${U.PARTICLE_COUNT_SQRT}),\n        floor(${A.INDEX} / ${U.PARTICLE_COUNT_SQRT}) / ${U.PARTICLE_COUNT_SQRT}\n      )\n    );\n\n    ${V.POSITION} = vec2(\n      color.r / 255.0 + color.b,\n      color.g / 255.0 + color.a\n    );\n\n    gl_PointSize = 1.0;\n    gl_Position = vec4(\n      2.0 * ${V.POSITION}.x - 1.0,\n      2.0 * ${V.POSITION}.y - 1.0,\n      0,\n      1\n    );\n  }\n`;\n\n/**\n * @typedef {Object} ParsedStyle\n * @property {string} tileVertexShader The flow tile vertex shader.\n * @property {string} tileFragmentShader The flow tile fragment shader.\n * @property {string} textureVertexShader Generic texture fragment shader.\n * @property {string} textureFragmentShader Generic texture fragment shader.\n * @property {string} particlePositionVertexShader The particle position vertex shader.\n * @property {string} particlePositionFragmentShader The particle position fragment shader.\n * @property {string} particleColorVertexShader The particle color vertex shader.\n * @property {string} particleColorFragmentShader The particle color fragment shader.\n */\n\n/**\n * @param {Style} style The layer style.\n * @return {ParsedStyle} Shaders and uniforms generated from the style.\n */\nfunction parseStyle(style) {\n  const context = newCompilationContext();\n  const pipeline = [];\n\n  if (style.color !== undefined) {\n    const color = expressionToGlsl(context, style.color, ColorType);\n    pipeline.push(`color = ${color};`);\n  }\n\n  if (context.variables.size > 1 && !style.variables) {\n    throw new Error(\n      `Missing variables in style (expected ${Array.from(context.variables.keys())})`,\n    );\n  }\n\n  /** @type {Object<string,import(\"../webgl/Helper.js\").UniformValue>} */\n  const uniforms = {};\n\n  for (const [variableName] of context.variables.entries()) {\n    if (!(variableName in style.variables)) {\n      throw new Error(`Missing '${variableName}' in style variables`);\n    }\n\n    const uniformName = uniformNameForVariable(variableName);\n    uniforms[uniformName] = function () {\n      let value = style.variables[variableName];\n      if (typeof value === 'string') {\n        value = getStringNumberEquivalent(value);\n      }\n      return value !== undefined ? value : -9999999; // to avoid matching with the first string literal\n    };\n  }\n\n  const uniformDeclarations = Object.keys(uniforms).map(function (name) {\n    return `uniform float ${name};`;\n  });\n\n  const functionDefintions = Object.keys(context.functions).map(\n    function (name) {\n      return context.functions[name];\n    },\n  );\n\n  const particleColorFragmentShader = `\n    #ifdef GL_FRAGMENT_PRECISION_HIGH\n    precision highp float;\n    #else\n    precision mediump float;\n    #endif\n\n    uniform sampler2D ${U.VELOCITY_TEXTURE};\n    uniform float ${U.MAX_SPEED};\n    uniform vec2 ${U.ROTATION};\n\n    ${uniformDeclarations.join('\\n')}\n\n    varying vec2 ${V.POSITION};\n    \n    ${functionDefintions.join('\\n')}\n\n    void main() {\n      vec4 velocityColor = texture2D(${U.VELOCITY_TEXTURE}, ${V.POSITION});\n\n      float vx = mix(-${U.MAX_SPEED}, ${U.MAX_SPEED}, velocityColor.r);\n      float vy = mix(-${U.MAX_SPEED}, ${U.MAX_SPEED}, velocityColor.g);\n\n      vec2 velocity = vec2(\n        vx * ${U.ROTATION}.x - vy * ${U.ROTATION}.y,\n        vx * ${U.ROTATION}.y + vy * ${U.ROTATION}.x\n      );\n\n      float a_prop_speed = length(velocity);\n\n      vec4 color;\n\n      ${pipeline.join('\\n')}\n\n      if (color.a == 0.0) {\n        discard;\n      }\n\n      gl_FragColor = color;\n    }\n  `;\n\n  return {\n    tileVertexShader,\n    tileFragmentShader,\n    particleColorVertexShader,\n    particleColorFragmentShader,\n    particlePositionVertexShader: quadVertexShader,\n    particlePositionFragmentShader,\n    textureVertexShader: quadVertexShader,\n    textureFragmentShader,\n  };\n}\n\n/**\n * @type {Array<SourceType>}\n */\nconst sources = [];\n\n/**\n * @classdesc\n * Experimental layer that renders particles moving through a vector field.\n *\n * @extends BaseTileLayer<SourceType, FlowLayerRenderer>\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n */\nclass FlowLayer extends BaseTileLayer {\n  /**\n   * @param {Options} options Flow layer options.\n   */\n  constructor(options) {\n    const baseOptions = Object.assign({}, options);\n    delete baseOptions.maxSpeed;\n    delete baseOptions.speedFactor;\n    delete baseOptions.particles;\n    super(baseOptions);\n\n    /**\n     * @type {Style}\n     * @private\n     */\n    this.style_ = options.style || {};\n\n    if (!(options.maxSpeed > 0)) {\n      throw new Error('maxSpeed is required');\n    }\n    /**\n     * @type {number}\n     * @private\n     */\n    this.maxSpeed_ = options.maxSpeed;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.speedFactor_ = options.speedFactor;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.particles_ = options.particles;\n\n    /**\n     * @type {Object<string, (string|number)>}\n     * @private\n     */\n    this.styleVariables_ = this.style_.variables || {};\n\n    this.addChangeListener(LayerProperty.SOURCE, this.handleSourceUpdate_);\n  }\n\n  /**\n   * @private\n   */\n  handleSourceUpdate_() {\n    if (this.hasRenderer()) {\n      this.getRenderer().clearCache();\n    }\n  }\n\n  /**\n   * Update any variables used by the layer style and trigger a re-render.\n   * @param {Object<string, number>} variables Variables to update.\n   */\n  updateStyleVariables(variables) {\n    Object.assign(this.styleVariables_, variables);\n    this.changed();\n  }\n\n  /**\n   * Gets the sources for this layer, for a given extent and resolution.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @return {Array<SourceType>} Sources.\n   */\n  getSources(extent, resolution) {\n    const source = this.getSource();\n    sources[0] = source;\n    return sources;\n  }\n\n  /**\n   * @override\n   */\n  createRenderer() {\n    const parsedStyle = parseStyle(this.style_);\n\n    return new FlowLayerRenderer(this, {\n      ...parsedStyle,\n      cacheSize: this.getCacheSize(),\n      maxSpeed: this.maxSpeed_,\n      speedFactor: this.speedFactor_,\n      particles: this.particles_,\n    });\n  }\n}\n\n/**\n * Clean up underlying WebGL resources.\n * @function\n */\nFlowLayer.prototype.dispose;\n\nexport default FlowLayer;\n","/**\n * @module ol/layer/Group\n */\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {assert} from '../asserts.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {getIntersection} from '../extent.js';\nimport {clear} from '../obj.js';\nimport {getUid} from '../util.js';\nimport BaseLayer from './Base.js';\n\n/**\n * @enum {string}\n */\nconst GroupEventType = {\n  /**\n   * Triggered when a layer is added\n   * @event GroupEvent#addlayer\n   * @api\n   */\n  ADDLAYER: 'addlayer',\n  /**\n   * Triggered when a layer is removed\n   * @event GroupEvent#removelayer\n   * @api\n   */\n  REMOVELAYER: 'removelayer',\n};\n\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups.  When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nexport class GroupEvent extends Event {\n  /**\n   * @param {GroupEventType} type The event type.\n   * @param {BaseLayer} layer The layer.\n   */\n  constructor(type, layer) {\n    super(type);\n\n    /**\n     * The added or removed layer.\n     * @type {BaseLayer}\n     * @api\n     */\n    this.layer = layer;\n  }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"./Base.js\").BaseLayerObjectEventTypes|\n *     'change:layers', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<'addlayer'|'removelayer', GroupEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"./Base.js\").BaseLayerObjectEventTypes|'addlayer'|'removelayer'|'change:layers', Return>} GroupOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array<import(\"./Base.js\").default>|Collection<import(\"./Base.js\").default>} [layers] Child layers.\n * @property {Object<string, *>} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n  LAYERS: 'layers',\n};\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @fires GroupEvent\n * @api\n */\nclass LayerGroup extends BaseLayer {\n  /**\n   * @param {Options} [options] Layer options.\n   */\n  constructor(options) {\n    options = options || {};\n    const baseOptions = /** @type {Options} */ (Object.assign({}, options));\n    delete baseOptions.layers;\n\n    let layers = options.layers;\n\n    super(baseOptions);\n\n    /***\n     * @type {GroupOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {GroupOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {GroupOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @private\n     * @type {Array<import(\"../events.js\").EventsKey>}\n     */\n    this.layersListenerKeys_ = [];\n\n    /**\n     * @private\n     * @type {Object<string, Array<import(\"../events.js\").EventsKey>>}\n     */\n    this.listenerKeys_ = {};\n\n    this.addChangeListener(Property.LAYERS, this.handleLayersChanged_);\n\n    if (layers) {\n      if (Array.isArray(layers)) {\n        layers = new Collection(layers.slice(), {unique: true});\n      } else {\n        assert(\n          typeof (/** @type {?} */ (layers).getArray) === 'function',\n          'Expected `layers` to be an array or a `Collection`',\n        );\n      }\n    } else {\n      layers = new Collection(undefined, {unique: true});\n    }\n\n    this.setLayers(layers);\n  }\n\n  /**\n   * @private\n   */\n  handleLayerChange_() {\n    this.changed();\n  }\n\n  /**\n   * @private\n   */\n  handleLayersChanged_() {\n    this.layersListenerKeys_.forEach(unlistenByKey);\n    this.layersListenerKeys_.length = 0;\n\n    const layers = this.getLayers();\n    this.layersListenerKeys_.push(\n      listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n      listen(\n        layers,\n        CollectionEventType.REMOVE,\n        this.handleLayersRemove_,\n        this,\n      ),\n    );\n\n    for (const id in this.listenerKeys_) {\n      this.listenerKeys_[id].forEach(unlistenByKey);\n    }\n    clear(this.listenerKeys_);\n\n    const layersArray = layers.getArray();\n    for (let i = 0, ii = layersArray.length; i < ii; i++) {\n      const layer = layersArray[i];\n      this.registerLayerListeners_(layer);\n      this.dispatchEvent(new GroupEvent(GroupEventType.ADDLAYER, layer));\n    }\n    this.changed();\n  }\n\n  /**\n   * @param {BaseLayer} layer The layer.\n   */\n  registerLayerListeners_(layer) {\n    const listenerKeys = [\n      listen(\n        layer,\n        ObjectEventType.PROPERTYCHANGE,\n        this.handleLayerChange_,\n        this,\n      ),\n      listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n    ];\n\n    if (layer instanceof LayerGroup) {\n      listenerKeys.push(\n        listen(layer, GroupEventType.ADDLAYER, this.handleLayerGroupAdd_, this),\n        listen(\n          layer,\n          GroupEventType.REMOVELAYER,\n          this.handleLayerGroupRemove_,\n          this,\n        ),\n      );\n    }\n\n    this.listenerKeys_[getUid(layer)] = listenerKeys;\n  }\n\n  /**\n   * @param {GroupEvent} event The layer group event.\n   */\n  handleLayerGroupAdd_(event) {\n    this.dispatchEvent(new GroupEvent(GroupEventType.ADDLAYER, event.layer));\n  }\n\n  /**\n   * @param {GroupEvent} event The layer group event.\n   */\n  handleLayerGroupRemove_(event) {\n    this.dispatchEvent(new GroupEvent(GroupEventType.REMOVELAYER, event.layer));\n  }\n\n  /**\n   * @param {import(\"../Collection.js\").CollectionEvent<import(\"./Base.js\").default>} collectionEvent CollectionEvent.\n   * @private\n   */\n  handleLayersAdd_(collectionEvent) {\n    const layer = collectionEvent.element;\n    this.registerLayerListeners_(layer);\n    this.dispatchEvent(new GroupEvent(GroupEventType.ADDLAYER, layer));\n    this.changed();\n  }\n\n  /**\n   * @param {import(\"../Collection.js\").CollectionEvent<import(\"./Base.js\").default>} collectionEvent CollectionEvent.\n   * @private\n   */\n  handleLayersRemove_(collectionEvent) {\n    const layer = collectionEvent.element;\n    const key = getUid(layer);\n    this.listenerKeys_[key].forEach(unlistenByKey);\n    delete this.listenerKeys_[key];\n    this.dispatchEvent(new GroupEvent(GroupEventType.REMOVELAYER, layer));\n    this.changed();\n  }\n\n  /**\n   * Returns the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n   * in this group.\n   * @return {!Collection<import(\"./Base.js\").default>} Collection of\n   *   {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n   * @observable\n   * @api\n   */\n  getLayers() {\n    return /** @type {!Collection<import(\"./Base.js\").default>} */ (\n      this.get(Property.LAYERS)\n    );\n  }\n\n  /**\n   * Set the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n   * in this group.\n   * @param {!Collection<import(\"./Base.js\").default>} layers Collection of\n   *   {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n   * @observable\n   * @api\n   */\n  setLayers(layers) {\n    const collection = this.getLayers();\n    if (collection) {\n      const currentLayers = collection.getArray();\n      for (let i = 0, ii = currentLayers.length; i < ii; ++i) {\n        this.dispatchEvent(\n          new GroupEvent(GroupEventType.REMOVELAYER, currentLayers[i]),\n        );\n      }\n    }\n\n    this.set(Property.LAYERS, layers);\n  }\n\n  /**\n   * @param {Array<import(\"./Layer.js\").default>} [array] Array of layers (to be modified in place).\n   * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n   * @override\n   */\n  getLayersArray(array) {\n    array = array !== undefined ? array : [];\n    this.getLayers().forEach(function (layer) {\n      layer.getLayersArray(array);\n    });\n    return array;\n  }\n\n  /**\n   * Get the layer states list and use this groups z-index as the default\n   * for all layers in this and nested groups, if it is unset at this point.\n   * If dest is not provided and this group's z-index is undefined\n   * 0 is used a the default z-index.\n   * @param {Array<import(\"./Layer.js\").State>} [dest] Optional list\n   * of layer states (to be modified in place).\n   * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n   * @override\n   */\n  getLayerStatesArray(dest) {\n    const states = dest !== undefined ? dest : [];\n    const pos = states.length;\n\n    this.getLayers().forEach(function (layer) {\n      layer.getLayerStatesArray(states);\n    });\n\n    const ownLayerState = this.getLayerState();\n    let defaultZIndex = ownLayerState.zIndex;\n    if (!dest && ownLayerState.zIndex === undefined) {\n      defaultZIndex = 0;\n    }\n    for (let i = pos, ii = states.length; i < ii; i++) {\n      const layerState = states[i];\n      layerState.opacity *= ownLayerState.opacity;\n      layerState.visible = layerState.visible && ownLayerState.visible;\n      layerState.maxResolution = Math.min(\n        layerState.maxResolution,\n        ownLayerState.maxResolution,\n      );\n      layerState.minResolution = Math.max(\n        layerState.minResolution,\n        ownLayerState.minResolution,\n      );\n      layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n      layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n      if (ownLayerState.extent !== undefined) {\n        if (layerState.extent !== undefined) {\n          layerState.extent = getIntersection(\n            layerState.extent,\n            ownLayerState.extent,\n          );\n        } else {\n          layerState.extent = ownLayerState.extent;\n        }\n      }\n      if (layerState.zIndex === undefined) {\n        layerState.zIndex = defaultZIndex;\n      }\n    }\n\n    return states;\n  }\n\n  /**\n   * @return {import(\"../source/Source.js\").State} Source state.\n   * @override\n   */\n  getSourceState() {\n    return 'ready';\n  }\n}\n\nexport default LayerGroup;\n","/**\n * @module ol/renderer/canvas/ImageLayer\n */\nimport ImageState from '../../ImageState.js';\nimport ViewHint from '../../ViewHint.js';\nimport {\n  containsCoordinate,\n  containsExtent,\n  getHeight,\n  getIntersection,\n  getWidth,\n  intersects as intersectsExtent,\n  isEmpty,\n} from '../../extent.js';\nimport {fromUserExtent} from '../../proj.js';\nimport {\n  apply as applyTransform,\n  compose as composeTransform,\n} from '../../transform.js';\nimport CanvasLayerRenderer from './Layer.js';\n\n/**\n * @classdesc\n * Canvas renderer for image layers.\n * @api\n */\nclass CanvasImageLayerRenderer extends CanvasLayerRenderer {\n  /**\n   * @param {import(\"../../layer/Image.js\").default} imageLayer Image layer.\n   */\n  constructor(imageLayer) {\n    super(imageLayer);\n\n    /**\n     * @protected\n     * @type {?import(\"../../Image.js\").default}\n     */\n    this.image = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedSourceRevision_ = 0;\n  }\n\n  /**\n   * @return {import('../../DataTile.js').ImageLike} Image.\n   */\n  getImage() {\n    return !this.image ? null : this.image.getImage();\n  }\n\n  /**\n   * Determine whether render should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @override\n   */\n  prepareFrame(frameState) {\n    const layerState = frameState.layerStatesArray[frameState.layerIndex];\n    const pixelRatio = frameState.pixelRatio;\n    const viewState = frameState.viewState;\n    const viewResolution = viewState.resolution;\n\n    const imageSource = this.getLayer().getSource();\n\n    const hints = frameState.viewHints;\n\n    let renderedExtent = frameState.extent;\n    if (layerState.extent !== undefined) {\n      renderedExtent = getIntersection(\n        renderedExtent,\n        fromUserExtent(layerState.extent, viewState.projection),\n      );\n    }\n\n    if (\n      !hints[ViewHint.ANIMATING] &&\n      !hints[ViewHint.INTERACTING] &&\n      !isEmpty(renderedExtent)\n    ) {\n      if (imageSource) {\n        if (\n          !this.getLayer().rendered &&\n          this.renderedSourceRevision_ !== imageSource.getRevision()\n        ) {\n          this.image = null;\n        }\n        this.renderedSourceRevision_ = imageSource.getRevision();\n\n        const projection = viewState.projection;\n        const image = imageSource.getImage(\n          renderedExtent,\n          viewResolution,\n          pixelRatio,\n          projection,\n        );\n        if (image) {\n          if (this.loadImage(image)) {\n            this.image = image;\n          } else if (image.getState() === ImageState.EMPTY) {\n            this.image = null;\n          }\n        }\n      } else {\n        this.image = null;\n      }\n    }\n\n    return !!this.image;\n  }\n\n  /**\n   * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n   * @return {Uint8ClampedArray} Data at the pixel location.\n   * @override\n   */\n  getData(pixel) {\n    const frameState = this.frameState;\n    if (!frameState) {\n      return null;\n    }\n\n    const layer = this.getLayer();\n    const coordinate = applyTransform(\n      frameState.pixelToCoordinateTransform,\n      pixel.slice(),\n    );\n\n    const layerExtent = layer.getExtent();\n    if (layerExtent) {\n      if (!containsCoordinate(layerExtent, coordinate)) {\n        return null;\n      }\n    }\n\n    const imageExtent = this.image.getExtent();\n    const img = this.image.getImage();\n\n    const imageMapWidth = getWidth(imageExtent);\n    const col = Math.floor(\n      img.width * ((coordinate[0] - imageExtent[0]) / imageMapWidth),\n    );\n    if (col < 0 || col >= img.width) {\n      return null;\n    }\n\n    const imageMapHeight = getHeight(imageExtent);\n    const row = Math.floor(\n      img.height * ((imageExtent[3] - coordinate[1]) / imageMapHeight),\n    );\n    if (row < 0 || row >= img.height) {\n      return null;\n    }\n\n    return this.getImageData(img, col, row);\n  }\n\n  /**\n   * Render the layer.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {HTMLElement} target Target that may be used to render content to.\n   * @return {HTMLElement} The rendered element.\n   * @override\n   */\n  renderFrame(frameState, target) {\n    const image = this.image;\n    const imageExtent = image.getExtent();\n    const imageResolution = image.getResolution();\n    const [imageResolutionX, imageResolutionY] = Array.isArray(imageResolution)\n      ? imageResolution\n      : [imageResolution, imageResolution];\n    const imagePixelRatio = image.getPixelRatio();\n    const layerState = frameState.layerStatesArray[frameState.layerIndex];\n    const pixelRatio = frameState.pixelRatio;\n    const viewState = frameState.viewState;\n    const viewCenter = viewState.center;\n    const viewResolution = viewState.resolution;\n    const scaleX =\n      (pixelRatio * imageResolutionX) / (viewResolution * imagePixelRatio);\n    const scaleY =\n      (pixelRatio * imageResolutionY) / (viewResolution * imagePixelRatio);\n\n    this.prepareContainer(frameState, target);\n\n    // desired dimensions of the canvas in pixels\n    const width = this.context.canvas.width;\n    const height = this.context.canvas.height;\n\n    const context = this.getRenderContext(frameState);\n\n    // clipped rendering if layer extent is set\n    let clipped = false;\n    let render = true;\n    if (layerState.extent) {\n      const layerExtent = fromUserExtent(\n        layerState.extent,\n        viewState.projection,\n      );\n      render = intersectsExtent(layerExtent, frameState.extent);\n      clipped = render && !containsExtent(layerExtent, frameState.extent);\n      if (clipped) {\n        this.clipUnrotated(context, frameState, layerExtent);\n      }\n    }\n\n    const img = image.getImage();\n\n    const transform = composeTransform(\n      this.tempTransform,\n      width / 2,\n      height / 2,\n      scaleX,\n      scaleY,\n      0,\n      (imagePixelRatio * (imageExtent[0] - viewCenter[0])) / imageResolutionX,\n      (imagePixelRatio * (viewCenter[1] - imageExtent[3])) / imageResolutionY,\n    );\n\n    this.renderedResolution = (imageResolutionY * pixelRatio) / imagePixelRatio;\n\n    const dw = img.width * transform[0];\n    const dh = img.height * transform[3];\n\n    if (!this.getLayer().getSource().getInterpolate()) {\n      context.imageSmoothingEnabled = false;\n    }\n\n    this.preRender(context, frameState);\n    if (render && dw >= 0.5 && dh >= 0.5) {\n      const dx = transform[4];\n      const dy = transform[5];\n      const opacity = layerState.opacity;\n      if (opacity !== 1) {\n        context.save();\n        context.globalAlpha = opacity;\n      }\n      context.drawImage(img, 0, 0, +img.width, +img.height, dx, dy, dw, dh);\n      if (opacity !== 1) {\n        context.restore();\n      }\n    }\n    this.postRender(this.context, frameState);\n\n    if (clipped) {\n      context.restore();\n    }\n    context.imageSmoothingEnabled = true;\n    return this.container;\n  }\n}\n\nexport default CanvasImageLayerRenderer;\n","/**\n * @module ol/layer/BaseImage\n */\nimport Layer from './Layer.js';\n\n/**\n * @template {import(\"../source/Image.js\").default} ImageSourceType\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use {@link import(\"../Map.js\").default#addLayer map.addLayer()}.\n * @property {ImageSourceType} [source] Source for this layer.\n * @property {import('./Base.js').BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object<string, *>} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Server-rendered images that are available for arbitrary extents and\n * resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Image.js\").default} ImageSourceType\n * @template {import(\"../renderer/Layer.js\").default} RendererType\n * @extends {Layer<ImageSourceType, RendererType>}\n * @api\n */\nclass BaseImageLayer extends Layer {\n  /**\n   * @param {Options<ImageSourceType>} [options] Layer options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n    super(options);\n  }\n}\n\nexport default BaseImageLayer;\n","/**\n * @module ol/layer/Image\n */\nimport CanvasImageLayerRenderer from '../renderer/canvas/ImageLayer.js';\nimport BaseImageLayer from './BaseImage.js';\n\n/**\n * @classdesc\n * Server-rendered images that are available for arbitrary extents and\n * resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Image.js\").default} ImageSourceType\n * @extends {BaseImageLayer<ImageSourceType, CanvasImageLayerRenderer>}\n * @api\n */\nclass ImageLayer extends BaseImageLayer {\n  /**\n   * @param {import(\"./BaseImage.js\").Options<ImageSourceType>} [options] Layer options.\n   */\n  constructor(options) {\n    super(options);\n  }\n\n  /**\n   * @override\n   */\n  createRenderer() {\n    return new CanvasImageLayerRenderer(this);\n  }\n\n  /**\n   * Get data for a pixel location.  A four element RGBA array will be returned.  For requests outside the\n   * layer extent, `null` will be returned.  Data for an image can only be retrieved if the\n   * source's `crossOrigin` property is set.\n   *\n   * ```js\n   * // display layer data on every pointer move\n   * map.on('pointermove', (event) => {\n   *   console.log(layer.getData(event.pixel));\n   * });\n   * ```\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n   * @api\n   * @override\n   */\n  getData(pixel) {\n    return super.getData(pixel);\n  }\n}\n\nexport default ImageLayer;\n","/**\n * @module ol/layer/Layer\n */\nimport View from '../View.js';\nimport {assert} from '../asserts.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {intersects} from '../extent.js';\nimport RenderEventType from '../render/EventType.js';\nimport BaseLayer from './Base.js';\nimport LayerProperty from './Property.js';\n\n/**\n * @typedef {function(import(\"../Map.js\").FrameState):HTMLElement} RenderFunction\n */\n\n/**\n * @typedef {'sourceready'|'change:source'} LayerEventType\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"./Base.js\").BaseLayerObjectEventTypes|\n *     LayerEventType, import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../render/EventType.js\").LayerRenderEventTypes, import(\"../render/Event.js\").default, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"./Base.js\").BaseLayerObjectEventTypes|LayerEventType|\n *     import(\"../render/EventType.js\").LayerRenderEventTypes, Return>} LayerOnSignature\n */\n\n/**\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @template {Object<string, *>} [Properties=Object<string, *>]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {SourceType} [source] Source for this layer.  If not provided to the constructor,\n * the source can be set by calling {@link module:ol/layer/Layer~Layer#setSource layer.setSource(source)} after\n * construction.\n * @property {import(\"../Map.js\").default|null} [map] Map.\n * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an\n * HTML element. Will overwrite the default rendering for the layer.\n * @property {import(\"./Base.js\").BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Properties} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./Layer.js\").default} layer Layer.\n * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.\n * @property {boolean} visible Visible.\n * @property {boolean} managed Managed.\n * @property {import(\"../extent.js\").Extent} [extent] Extent.\n * @property {number} zIndex ZIndex.\n * @property {number} maxResolution Maximum resolution.\n * @property {number} minResolution Minimum resolution.\n * @property {number} minZoom Minimum zoom.\n * @property {number} maxZoom Maximum zoom.\n */\n\n/**\n * @classdesc\n * Base class from which all layer types are derived. This should only be instantiated\n * in the case where a custom layer is added to the map with a custom `render` function.\n * Such a function can be specified in the `options` object, and is expected to return an HTML element.\n *\n * A visual representation of raster or vector map data.\n * Layers group together those properties that pertain to how the data is to be\n * displayed, irrespective of the source of that data.\n *\n * Layers are usually added to a map with [map.addLayer()]{@link import(\"../Map.js\").default#addLayer}.\n * Components like {@link module:ol/interaction/Draw~Draw} use unmanaged layers\n * internally. These unmanaged layers are associated with the map using\n * [layer.setMap()]{@link module:ol/layer/Layer~Layer#setMap} instead.\n *\n * A generic `change` event is fired when the state of the source changes.\n * A `sourceready` event is fired when the layer's source is ready.\n *\n * @fires import(\"../render/Event.js\").RenderEvent#prerender\n * @fires import(\"../render/Event.js\").RenderEvent#postrender\n * @fires import(\"../events/Event.js\").BaseEvent#sourceready\n *\n * @template {import(\"../source/Source.js\").default} [SourceType=import(\"../source/Source.js\").default]\n * @template {import(\"../renderer/Layer.js\").default} [RendererType=import(\"../renderer/Layer.js\").default]\n * @template {Object<string, *>} [Properties=Object<string, *>]\n * @extends {BaseLayer<NoInfer<Properties>>}\n * @api\n */\nclass Layer extends BaseLayer {\n  /**\n   * @param {Options<SourceType, NoInfer<Properties>>} options Layer options.\n   */\n  constructor(options) {\n    const baseOptions = Object.assign({}, options);\n    delete baseOptions.source;\n\n    super(baseOptions);\n\n    /***\n     * @type {LayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {LayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {LayerOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @private\n     * @type {?import(\"../events.js\").EventsKey}\n     */\n    this.mapPrecomposeKey_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../events.js\").EventsKey}\n     */\n    this.mapRenderKey_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../events.js\").EventsKey}\n     */\n    this.sourceChangeKey_ = null;\n\n    /**\n     * @private\n     * @type {RendererType}\n     */\n    this.renderer_ = null;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.sourceReady_ = false;\n\n    /**\n     * @protected\n     * @type {boolean}\n     */\n    this.rendered = false;\n\n    // Overwrite default render method with a custom one\n    if (options.render) {\n      this.render = options.render;\n    }\n\n    if (options.map) {\n      this.setMap(options.map);\n    }\n\n    this.addChangeListener(\n      LayerProperty.SOURCE,\n      this.handleSourcePropertyChange_,\n    );\n\n    const source = options.source\n      ? /** @type {SourceType} */ (options.source)\n      : null;\n    this.setSource(source);\n  }\n\n  /**\n   * @param {Array<import(\"./Layer.js\").default>} [array] Array of layers (to be modified in place).\n   * @return {Array<import(\"./Layer.js\").default>} Array of layers.\n   * @override\n   */\n  getLayersArray(array) {\n    array = array ? array : [];\n    array.push(this);\n    return array;\n  }\n\n  /**\n   * @param {Array<import(\"./Layer.js\").State>} [states] Optional list of layer states (to be modified in place).\n   * @return {Array<import(\"./Layer.js\").State>} List of layer states.\n   * @override\n   */\n  getLayerStatesArray(states) {\n    states = states ? states : [];\n    states.push(this.getLayerState());\n    return states;\n  }\n\n  /**\n   * Get the layer source.\n   * @return {SourceType|null} The layer source (or `null` if not yet set).\n   * @observable\n   * @api\n   */\n  getSource() {\n    return /** @type {SourceType} */ (this.get(LayerProperty.SOURCE)) || null;\n  }\n\n  /**\n   * @return {SourceType|null} The source being rendered.\n   */\n  getRenderSource() {\n    return this.getSource();\n  }\n\n  /**\n   * @return {import(\"../source/Source.js\").State} Source state.\n   * @override\n   */\n  getSourceState() {\n    const source = this.getSource();\n    return !source ? 'undefined' : source.getState();\n  }\n\n  /**\n   * @private\n   */\n  handleSourceChange_() {\n    this.changed();\n    if (this.sourceReady_ || this.getSource().getState() !== 'ready') {\n      return;\n    }\n    this.sourceReady_ = true;\n    this.dispatchEvent('sourceready');\n  }\n\n  /**\n   * @private\n   */\n  handleSourcePropertyChange_() {\n    if (this.sourceChangeKey_) {\n      unlistenByKey(this.sourceChangeKey_);\n      this.sourceChangeKey_ = null;\n    }\n    this.sourceReady_ = false;\n    const source = this.getSource();\n    if (source) {\n      this.sourceChangeKey_ = listen(\n        source,\n        EventType.CHANGE,\n        this.handleSourceChange_,\n        this,\n      );\n      if (source.getState() === 'ready') {\n        this.sourceReady_ = true;\n        setTimeout(() => {\n          this.dispatchEvent('sourceready');\n        }, 0);\n      }\n    }\n    this.changed();\n  }\n\n  /**\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Promise<Array<import(\"../Feature.js\").FeatureLike>>} Promise that resolves with\n   * an array of features.\n   */\n  getFeatures(pixel) {\n    if (!this.renderer_) {\n      return Promise.resolve([]);\n    }\n    return this.renderer_.getFeatures(pixel);\n  }\n\n  /**\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n   */\n  getData(pixel) {\n    if (!this.renderer_ || !this.rendered) {\n      return null;\n    }\n    return this.renderer_.getData(pixel);\n  }\n\n  /**\n   * The layer is visible on the map view, i.e. within its min/max resolution or zoom and\n   * extent, not set to `visible: false`, and not inside a layer group that is set\n   * to `visible: false`.\n   * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n   * Only required when the layer is not added to a map.\n   * @return {boolean} The layer is visible in the map view.\n   * @api\n   */\n  isVisible(view) {\n    let frameState;\n    const map = this.getMapInternal();\n    if (!view && map) {\n      view = map.getView();\n    }\n    if (view instanceof View) {\n      frameState = {\n        viewState: view.getState(),\n        extent: view.calculateExtent(),\n      };\n    } else {\n      frameState = view;\n    }\n    if (!frameState.layerStatesArray && map) {\n      frameState.layerStatesArray = map.getLayerGroup().getLayerStatesArray();\n    }\n    let layerState;\n    if (frameState.layerStatesArray) {\n      layerState = frameState.layerStatesArray.find(\n        (layerState) => layerState.layer === this,\n      );\n      if (!layerState) {\n        return false;\n      }\n    } else {\n      layerState = this.getLayerState();\n    }\n\n    const layerExtent = this.getExtent();\n\n    return (\n      inView(layerState, frameState.viewState) &&\n      (!layerExtent || intersects(layerExtent, frameState.extent))\n    );\n  }\n\n  /**\n   * Get the attributions of the source of this layer for the given view.\n   * @param {View|import(\"../View.js\").ViewStateLayerStateExtent} [view] View or {@link import(\"../Map.js\").FrameState}.\n   * Only required when the layer is not added to a map.\n   * @return {Array<string>} Attributions for this layer at the given view.\n   * @api\n   */\n  getAttributions(view) {\n    if (!this.isVisible(view)) {\n      return [];\n    }\n    const getAttributions = this.getSource()?.getAttributions();\n    if (!getAttributions) {\n      return [];\n    }\n    const frameState =\n      view instanceof View ? view.getViewStateAndExtent() : view;\n    let attributions = getAttributions(frameState);\n    if (!Array.isArray(attributions)) {\n      attributions = [attributions];\n    }\n    return attributions;\n  }\n\n  /**\n   * In charge to manage the rendering of the layer. One layer type is\n   * bounded with one layer renderer.\n   * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n   * @param {HTMLElement} target Target which the renderer may (but need not) use\n   * for rendering its content.\n   * @return {HTMLElement|null} The rendered element.\n   */\n  render(frameState, target) {\n    const layerRenderer = this.getRenderer();\n\n    if (layerRenderer.prepareFrame(frameState)) {\n      this.rendered = true;\n      return layerRenderer.renderFrame(frameState, target);\n    }\n    return null;\n  }\n\n  /**\n   * Called when a layer is not visible during a map render.\n   */\n  unrender() {\n    this.rendered = false;\n  }\n\n  /** @return {string} Declutter */\n  getDeclutter() {\n    return undefined;\n  }\n\n  /**\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @param {import(\"../layer/Layer.js\").State} layerState Layer state.\n   */\n  renderDeclutter(frameState, layerState) {}\n\n  /**\n   * When the renderer follows a layout -> render approach, do the final rendering here.\n   * @param {import('../Map.js').FrameState} frameState Frame state\n   */\n  renderDeferred(frameState) {\n    const layerRenderer = this.getRenderer();\n    if (!layerRenderer) {\n      return;\n    }\n    layerRenderer.renderDeferred(frameState);\n  }\n\n  /**\n   * For use inside the library only.\n   * @param {import(\"../Map.js\").default|null} map Map.\n   */\n  setMapInternal(map) {\n    if (!map) {\n      this.unrender();\n    }\n    this.set(LayerProperty.MAP, map);\n  }\n\n  /**\n   * For use inside the library only.\n   * @return {import(\"../Map.js\").default|null} Map.\n   */\n  getMapInternal() {\n    return this.get(LayerProperty.MAP);\n  }\n\n  /**\n   * Sets the layer to be rendered on top of other layers on a map. The map will\n   * not manage this layer in its layers collection. This\n   * is useful for temporary layers. To remove an unmanaged layer from the map,\n   * use `#setMap(null)`.\n   *\n   * To add the layer to a map and have it managed by the map, use\n   * {@link module:ol/Map~Map#addLayer} instead.\n   * @param {import(\"../Map.js\").default|null} map Map.\n   * @api\n   */\n  setMap(map) {\n    if (this.mapPrecomposeKey_) {\n      unlistenByKey(this.mapPrecomposeKey_);\n      this.mapPrecomposeKey_ = null;\n    }\n    if (!map) {\n      this.changed();\n    }\n    if (this.mapRenderKey_) {\n      unlistenByKey(this.mapRenderKey_);\n      this.mapRenderKey_ = null;\n    }\n    if (map) {\n      this.mapPrecomposeKey_ = listen(\n        map,\n        RenderEventType.PRECOMPOSE,\n        this.handlePrecompose_,\n        this,\n      );\n      this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map);\n      this.changed();\n    }\n  }\n\n  /**\n   * @param {import(\"../events/Event.js\").default} renderEvent Render event\n   * @private\n   */\n  handlePrecompose_(renderEvent) {\n    const layerStatesArray =\n      /** @type {import(\"../render/Event.js\").default} */ (renderEvent)\n        .frameState.layerStatesArray;\n    const layerState = this.getLayerState(false);\n    assert(\n      !layerStatesArray.some(\n        (arrayLayerState) => arrayLayerState.layer === layerState.layer,\n      ),\n      'A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both.',\n    );\n    layerStatesArray.push(layerState);\n  }\n\n  /**\n   * Set the layer source.\n   * @param {SourceType|null} source The layer source.\n   * @observable\n   * @api\n   */\n  setSource(source) {\n    this.set(LayerProperty.SOURCE, source);\n  }\n\n  /**\n   * Get the renderer for this layer.\n   * @return {RendererType|null} The layer renderer.\n   */\n  getRenderer() {\n    if (!this.renderer_) {\n      this.renderer_ = this.createRenderer();\n    }\n    return this.renderer_;\n  }\n\n  /**\n   * @return {boolean} The layer has a renderer.\n   */\n  hasRenderer() {\n    return !!this.renderer_;\n  }\n\n  /**\n   * Create a renderer for this layer.\n   * @return {RendererType} A layer renderer.\n   * @protected\n   */\n  createRenderer() {\n    return null;\n  }\n\n  /**\n   * This will clear the renderer so that a new one can be created next time it is needed\n   */\n  clearRenderer() {\n    if (this.renderer_) {\n      this.renderer_.dispose();\n      delete this.renderer_;\n    }\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.clearRenderer();\n    this.setSource(null);\n    super.disposeInternal();\n  }\n}\n\n/**\n * Return `true` if the layer is visible and if the provided view state\n * has resolution and zoom levels that are in range of the layer's min/max.\n * @param {State} layerState Layer state.\n * @param {import(\"../View.js\").State} viewState View state.\n * @return {boolean} The layer is visible at the given view state.\n */\nexport function inView(layerState, viewState) {\n  if (!layerState.visible) {\n    return false;\n  }\n  const resolution = viewState.resolution;\n  if (\n    resolution < layerState.minResolution ||\n    resolution >= layerState.maxResolution\n  ) {\n    return false;\n  }\n  const zoom = viewState.zoom;\n  return zoom > layerState.minZoom && zoom <= layerState.maxZoom;\n}\n\nexport default Layer;\n","/**\n * @module ol/layer/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  OPACITY: 'opacity',\n  VISIBLE: 'visible',\n  EXTENT: 'extent',\n  Z_INDEX: 'zIndex',\n  MAX_RESOLUTION: 'maxResolution',\n  MIN_RESOLUTION: 'minResolution',\n  MAX_ZOOM: 'maxZoom',\n  MIN_ZOOM: 'minZoom',\n  SOURCE: 'source',\n  MAP: 'map',\n};\n","/**\n * @module ol/layer/Tile\n */\nimport CanvasTileLayerRenderer from '../renderer/canvas/TileLayer.js';\nimport BaseTileLayer from './BaseTile.js';\n\n/**\n * @classdesc\n * For layer sources that provide pre-rendered, tiled images in grids that are\n * organized by zoom levels for specific resolutions.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Tile.js\").default} [TileSourceType=import(\"../source/Tile.js\").default]\n * @extends BaseTileLayer<TileSourceType, CanvasTileLayerRenderer>\n * @api\n */\nclass TileLayer extends BaseTileLayer {\n  /**\n   * @param {import(\"./BaseTile.js\").Options<TileSourceType>} [options] Tile layer options.\n   */\n  constructor(options) {\n    super(options);\n  }\n\n  /**\n   * @override\n   */\n  createRenderer() {\n    return new CanvasTileLayerRenderer(this, {\n      cacheSize: this.getCacheSize(),\n    });\n  }\n}\n\nexport default TileLayer;\n","/**\n * @module ol/layer/TileProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  PRELOAD: 'preload',\n  USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError',\n};\n","/**\n * @module ol/renderer/canvas/VectorLayer\n */\nimport ViewHint from '../../ViewHint.js';\nimport {equals} from '../../array.js';\nimport {wrapX as wrapCoordinateX} from '../../coordinate.js';\nimport {createCanvasContext2D, releaseCanvas} from '../../dom.js';\nimport {\n  buffer,\n  containsExtent,\n  createEmpty,\n  getHeight,\n  getWidth,\n  intersects as intersectsExtent,\n  isEmpty,\n  wrapX as wrapExtentX,\n} from '../../extent.js';\nimport {\n  fromUserExtent,\n  getTransformFromProjections,\n  getUserProjection,\n  toUserExtent,\n  toUserResolution,\n} from '../../proj.js';\nimport RenderEventType from '../../render/EventType.js';\nimport CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';\nimport ExecutorGroup, {\n  ALL,\n  DECLUTTER,\n  NON_DECLUTTER,\n} from '../../render/canvas/ExecutorGroup.js';\nimport {\n  HIT_DETECT_RESOLUTION,\n  createHitDetectionImageData,\n  hitDetect,\n} from '../../render/canvas/hitdetect.js';\nimport {getUid} from '../../util.js';\nimport {\n  defaultOrder as defaultRenderOrder,\n  getTolerance as getRenderTolerance,\n  getSquaredTolerance as getSquaredRenderTolerance,\n  renderFeature,\n} from '../vector.js';\nimport CanvasLayerRenderer, {canvasPool} from './Layer.js';\n\n/**\n * @classdesc\n * Canvas renderer for vector layers.\n * @api\n */\nclass CanvasVectorLayerRenderer extends CanvasLayerRenderer {\n  /**\n   * @param {import(\"../../layer/BaseVector.js\").default} vectorLayer Vector layer.\n   */\n  constructor(vectorLayer) {\n    super(vectorLayer);\n\n    /** @private */\n    this.boundHandleStyleImageChange_ = this.handleStyleImageChange_.bind(this);\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.animatingOrInteracting_;\n\n    /**\n     * @private\n     * @type {ImageData|null}\n     */\n    this.hitDetectionImageData_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.clipExtent_ = null;\n\n    /**\n     * Do we need to extend the rendered area on the x-axis to handle\n     * features that cross the antimeridian?\n     * @private\n     * @type {boolean}\n     */\n    this.extendX_ = false;\n\n    /**\n     * @private\n     * @type {Array<import(\"../../Feature.js\").default>}\n     */\n    this.renderedFeatures_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedRevision_ = -1;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedResolution_ = NaN;\n\n    /**\n     * @private\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.renderedExtent_ = createEmpty();\n\n    /**\n     * @private\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.wrappedRenderedExtent_ = createEmpty();\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedRotation_;\n\n    /**\n     * @private\n     * @type {import(\"../../coordinate.js\").Coordinate}\n     */\n    this.renderedCenter_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../../proj/Projection.js\").default}\n     */\n    this.renderedProjection_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedPixelRatio_ = 1;\n\n    /**\n     * @private\n     * @type {import(\"../../render.js\").OrderFunction|null}\n     */\n    this.renderedRenderOrder_ = null;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderedFrameDeclutter_;\n\n    /**\n     * @private\n     * @type {import(\"../../render/canvas/ExecutorGroup.js\").default}\n     */\n    this.replayGroup_ = null;\n\n    /**\n     * A new replay group had to be created by `prepareFrame()`\n     * @type {boolean}\n     */\n    this.replayGroupChanged = true;\n\n    /**\n     * Clipping to be performed by `renderFrame()`\n     * @type {boolean}\n     */\n    this.clipping = true;\n\n    /**\n     * @private\n     * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n     */\n    this.targetContext_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.opacity_ = 1;\n  }\n\n  /**\n   * @param {ExecutorGroup} executorGroup Executor group.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {boolean} [declutterable] `true` to only render declutterable items,\n   *     `false` to only render non-declutterable items, `undefined` to render all.\n   */\n  renderWorlds(executorGroup, frameState, declutterable) {\n    const extent = frameState.extent;\n    const viewState = frameState.viewState;\n    const center = viewState.center;\n    const resolution = viewState.resolution;\n    const projection = viewState.projection;\n    const rotation = viewState.rotation;\n    const projectionExtent = projection.getExtent();\n    const vectorSource = this.getLayer().getSource();\n    const declutter = this.getLayer().getDeclutter();\n    const pixelRatio = frameState.pixelRatio;\n    const viewHints = frameState.viewHints;\n    const snapToPixel = !(\n      viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING]\n    );\n    const context = this.context;\n    const width = Math.round((getWidth(extent) / resolution) * pixelRatio);\n    const height = Math.round((getHeight(extent) / resolution) * pixelRatio);\n\n    const multiWorld = vectorSource.getWrapX() && projection.canWrapX();\n    const worldWidth = multiWorld ? getWidth(projectionExtent) : null;\n    const endWorld = multiWorld\n      ? Math.ceil((extent[2] - projectionExtent[2]) / worldWidth) +\n        (this.extendX_ ? 2 : 1)\n      : 1;\n    let world = multiWorld\n      ? Math.floor((extent[0] - projectionExtent[0]) / worldWidth) -\n        (this.extendX_ ? 1 : 0)\n      : 0;\n    do {\n      let transform = this.getRenderTransform(\n        center,\n        resolution,\n        0,\n        pixelRatio,\n        width,\n        height,\n        world * worldWidth,\n      );\n      if (frameState.declutter) {\n        transform = transform.slice(0);\n      }\n      executorGroup.execute(\n        context,\n        [context.canvas.width, context.canvas.height],\n        transform,\n        rotation,\n        snapToPixel,\n        declutterable === undefined\n          ? ALL\n          : declutterable\n            ? DECLUTTER\n            : NON_DECLUTTER,\n        declutterable\n          ? declutter && frameState.declutter[declutter]\n          : undefined,\n      );\n    } while (++world < endWorld);\n  }\n\n  /**\n   * @private\n   */\n  setDrawContext_() {\n    if (this.opacity_ !== 1) {\n      this.targetContext_ = this.context;\n      this.context = createCanvasContext2D(\n        this.context.canvas.width,\n        this.context.canvas.height,\n        canvasPool,\n      );\n    }\n  }\n\n  /**\n   * @private\n   */\n  resetDrawContext_() {\n    if (this.opacity_ !== 1 && this.targetContext_) {\n      const alpha = this.targetContext_.globalAlpha;\n      this.targetContext_.globalAlpha = this.opacity_;\n      this.targetContext_.drawImage(this.context.canvas, 0, 0);\n      this.targetContext_.globalAlpha = alpha;\n      releaseCanvas(this.context);\n      canvasPool.push(this.context.canvas);\n      this.context = this.targetContext_;\n      this.targetContext_ = null;\n    }\n  }\n\n  /**\n   * Render declutter items for this layer\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   */\n  renderDeclutter(frameState) {\n    if (!this.replayGroup_ || !this.getLayer().getDeclutter()) {\n      return;\n    }\n    this.renderWorlds(this.replayGroup_, frameState, true);\n  }\n\n  /**\n   * Render deferred instructions.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @override\n   */\n  renderDeferredInternal(frameState) {\n    if (!this.replayGroup_) {\n      return;\n    }\n    if (this.clipExtent_) {\n      this.clipUnrotated(this.context, frameState, this.clipExtent_);\n    }\n    this.replayGroup_.renderDeferred();\n    if (this.clipExtent_) {\n      this.context.restore();\n      this.clipExtent_ = null;\n    }\n    this.resetDrawContext_();\n  }\n\n  /**\n   * Render the layer.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {HTMLElement|null} target Target that may be used to render content to.\n   * @return {HTMLElement} The rendered element.\n   * @override\n   */\n  renderFrame(frameState, target) {\n    const layerState = frameState.layerStatesArray[frameState.layerIndex];\n    this.opacity_ = layerState.opacity;\n    const viewState = frameState.viewState;\n\n    this.prepareContainer(frameState, target);\n    const context = this.context;\n\n    const replayGroup = this.replayGroup_;\n    let render = replayGroup && !replayGroup.isEmpty();\n    if (!render) {\n      const hasRenderListeners =\n        this.getLayer().hasListener(RenderEventType.PRERENDER) ||\n        this.getLayer().hasListener(RenderEventType.POSTRENDER);\n      if (!hasRenderListeners) {\n        return this.container;\n      }\n    }\n\n    this.setDrawContext_();\n\n    this.preRender(context, frameState);\n\n    const projection = viewState.projection;\n\n    // clipped rendering if layer extent is set\n    this.clipExtent_ = null;\n    let clipped = false;\n    if (render && layerState.extent && this.clipping) {\n      const layerExtent = fromUserExtent(layerState.extent, projection);\n      render = intersectsExtent(layerExtent, frameState.extent);\n      const needsClip =\n        render && !containsExtent(layerExtent, frameState.extent);\n      if (needsClip) {\n        if (frameState.declutter) {\n          // Store extent for deferred clipping\n          this.clipExtent_ = layerExtent;\n        } else {\n          // Apply clipping immediately for non-declutter rendering\n          this.clipUnrotated(context, frameState, layerExtent);\n          clipped = true;\n        }\n      }\n    }\n\n    if (render) {\n      this.renderWorlds(\n        replayGroup,\n        frameState,\n        this.getLayer().getDeclutter() ? false : undefined,\n      );\n    }\n\n    if (clipped) {\n      context.restore();\n    }\n\n    this.postRender(context, frameState);\n\n    if (this.renderedRotation_ !== viewState.rotation) {\n      this.renderedRotation_ = viewState.rotation;\n      this.hitDetectionImageData_ = null;\n    }\n    if (!frameState.declutter) {\n      this.resetDrawContext_();\n    }\n    return this.container;\n  }\n\n  /**\n   * Asynchronous layer level hit detection.\n   * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n   * @return {Promise<Array<import(\"../../Feature.js\").default>>} Promise\n   * that resolves with an array of features.\n   * @override\n   */\n  getFeatures(pixel) {\n    return new Promise((resolve) => {\n      if (\n        this.frameState &&\n        !this.hitDetectionImageData_ &&\n        !this.animatingOrInteracting_\n      ) {\n        const size = this.frameState.size.slice();\n        const center = this.renderedCenter_;\n        const resolution = this.renderedResolution_;\n        const rotation = this.renderedRotation_;\n        const projection = this.renderedProjection_;\n        const extent = this.wrappedRenderedExtent_;\n        const layer = this.getLayer();\n        const transforms = [];\n        const width = size[0] * HIT_DETECT_RESOLUTION;\n        const height = size[1] * HIT_DETECT_RESOLUTION;\n        transforms.push(\n          this.getRenderTransform(\n            center,\n            resolution,\n            rotation,\n            HIT_DETECT_RESOLUTION,\n            width,\n            height,\n            0,\n          ).slice(),\n        );\n        const source = layer.getSource();\n        const projectionExtent = projection.getExtent();\n        if (\n          source.getWrapX() &&\n          projection.canWrapX() &&\n          !containsExtent(projectionExtent, extent)\n        ) {\n          let startX = extent[0];\n          const worldWidth = getWidth(projectionExtent);\n          let world = 0;\n          let offsetX;\n          while (startX < projectionExtent[0]) {\n            --world;\n            offsetX = worldWidth * world;\n            transforms.push(\n              this.getRenderTransform(\n                center,\n                resolution,\n                rotation,\n                HIT_DETECT_RESOLUTION,\n                width,\n                height,\n                offsetX,\n              ).slice(),\n            );\n            startX += worldWidth;\n          }\n          world = 0;\n          startX = extent[2];\n          while (startX > projectionExtent[2]) {\n            ++world;\n            offsetX = worldWidth * world;\n            transforms.push(\n              this.getRenderTransform(\n                center,\n                resolution,\n                rotation,\n                HIT_DETECT_RESOLUTION,\n                width,\n                height,\n                offsetX,\n              ).slice(),\n            );\n            startX -= worldWidth;\n          }\n        }\n        const userProjection = getUserProjection();\n        this.hitDetectionImageData_ = createHitDetectionImageData(\n          size,\n          transforms,\n          this.renderedFeatures_,\n          layer.getStyleFunction(),\n          extent,\n          resolution,\n          rotation,\n          getSquaredRenderTolerance(resolution, this.renderedPixelRatio_),\n          userProjection ? projection : null,\n        );\n      }\n      resolve(\n        hitDetect(pixel, this.renderedFeatures_, this.hitDetectionImageData_),\n      );\n    });\n  }\n\n  /**\n   * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {number} hitTolerance Hit tolerance in pixels.\n   * @param {import(\"../vector.js\").FeatureCallback<T>} callback Feature callback.\n   * @param {Array<import(\"../Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n   * @return {T|undefined} Callback result.\n   * @template T\n   * @override\n   */\n  forEachFeatureAtCoordinate(\n    coordinate,\n    frameState,\n    hitTolerance,\n    callback,\n    matches,\n  ) {\n    if (!this.replayGroup_) {\n      return undefined;\n    }\n    const resolution = frameState.viewState.resolution;\n    const rotation = frameState.viewState.rotation;\n    const layer = this.getLayer();\n\n    /** @type {!Object<string, import(\"../Map.js\").HitMatch<T>|true>} */\n    const features = {};\n\n    /**\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n     * @param {number} distanceSq The squared distance to the click position\n     * @return {T|undefined} Callback result.\n     */\n    const featureCallback = function (feature, geometry, distanceSq) {\n      const key = getUid(feature);\n      const match = features[key];\n      if (!match) {\n        if (distanceSq === 0) {\n          features[key] = true;\n          return callback(feature, layer, geometry);\n        }\n        matches.push(\n          (features[key] = {\n            feature: feature,\n            layer: layer,\n            geometry: geometry,\n            distanceSq: distanceSq,\n            callback: callback,\n          }),\n        );\n      } else if (match !== true && distanceSq < match.distanceSq) {\n        if (distanceSq === 0) {\n          features[key] = true;\n          matches.splice(matches.lastIndexOf(match), 1);\n          return callback(feature, layer, geometry);\n        }\n        match.geometry = geometry;\n        match.distanceSq = distanceSq;\n      }\n      return undefined;\n    };\n\n    const declutter = this.getLayer().getDeclutter();\n    return this.replayGroup_.forEachFeatureAtCoordinate(\n      coordinate,\n      resolution,\n      rotation,\n      hitTolerance,\n      featureCallback,\n      declutter\n        ? frameState.declutter?.[declutter]?.all().map((item) => item.value)\n        : null,\n    );\n  }\n\n  /**\n   * Perform action necessary to get the layer rendered after new fonts have loaded\n   * @override\n   */\n  handleFontsChanged() {\n    const layer = this.getLayer();\n    if (layer.getVisible() && this.replayGroup_) {\n      layer.changed();\n    }\n  }\n\n  /**\n   * Handle changes in image style state.\n   * @param {import(\"../../events/Event.js\").default} event Image style change event.\n   * @private\n   */\n  handleStyleImageChange_(event) {\n    this.renderIfReadyAndVisible();\n  }\n\n  /**\n   * Determine whether render should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @override\n   */\n  prepareFrame(frameState) {\n    const vectorLayer = this.getLayer();\n    const vectorSource = vectorLayer.getSource();\n    if (!vectorSource) {\n      return false;\n    }\n\n    const animating = frameState.viewHints[ViewHint.ANIMATING];\n    const interacting = frameState.viewHints[ViewHint.INTERACTING];\n    const updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();\n    const updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();\n\n    if (\n      (this.ready && !updateWhileAnimating && animating) ||\n      (!updateWhileInteracting && interacting)\n    ) {\n      this.animatingOrInteracting_ = true;\n      return true;\n    }\n    this.animatingOrInteracting_ = false;\n\n    const frameStateExtent = frameState.extent;\n    const viewState = frameState.viewState;\n    const projection = viewState.projection;\n    const resolution = viewState.resolution;\n    const pixelRatio = frameState.pixelRatio;\n    const vectorLayerRevision = vectorLayer.getRevision();\n    const vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();\n    let vectorLayerRenderOrder = vectorLayer.getRenderOrder();\n\n    if (vectorLayerRenderOrder === undefined) {\n      vectorLayerRenderOrder = defaultRenderOrder;\n    }\n\n    const center = viewState.center.slice();\n    const extent = buffer(\n      frameStateExtent,\n      vectorLayerRenderBuffer * resolution,\n    );\n    const renderedExtent = extent.slice();\n    const loadExtents = [extent.slice()];\n    const projectionExtent = projection.getExtent();\n\n    const canWrapX = vectorSource.getWrapX() && projection.canWrapX();\n    this.extendX_ = false;\n    if (canWrapX) {\n      const sourceExtent = vectorSource.getExtent();\n      if (sourceExtent && !isEmpty(sourceExtent)) {\n        this.extendX_ =\n          sourceExtent[0] < projectionExtent[0] ||\n          sourceExtent[2] > projectionExtent[2];\n      }\n    }\n\n    if (\n      canWrapX &&\n      (!containsExtent(projectionExtent, frameState.extent) || this.extendX_)\n    ) {\n      // For the replay group, we need an extent that intersects the real world\n      // (-180° to +180°). To support geometries in a coordinate range from -540°\n      // to +540°, we add at least 1 world width on each side of the projection\n      // extent. If the viewport is wider than the world, we need to add half of\n      // the viewport width to make sure we cover the whole viewport.\n      const worldWidth = getWidth(projectionExtent);\n      const gutter = Math.max(getWidth(extent) / 2, worldWidth);\n      let projMinX = projectionExtent[0];\n      let projMaxX = projectionExtent[2];\n      if (this.extendX_) {\n        projMinX -= worldWidth;\n        projMaxX += worldWidth;\n      }\n      extent[0] = projMinX - gutter;\n      extent[2] = projMaxX + gutter;\n      wrapCoordinateX(center, projection);\n      const loadExtent = wrapExtentX(loadExtents[0], projection);\n      // If the extent crosses the date line, we load data for both edges of the worlds\n      if (\n        loadExtent[0] < projectionExtent[0] &&\n        loadExtent[2] < projectionExtent[2]\n      ) {\n        loadExtents.push([\n          loadExtent[0] + worldWidth,\n          loadExtent[1],\n          loadExtent[2] + worldWidth,\n          loadExtent[3],\n        ]);\n      } else if (\n        loadExtent[0] > projectionExtent[0] &&\n        loadExtent[2] > projectionExtent[2]\n      ) {\n        loadExtents.push([\n          loadExtent[0] - worldWidth,\n          loadExtent[1],\n          loadExtent[2] - worldWidth,\n          loadExtent[3],\n        ]);\n      }\n    }\n\n    if (\n      this.ready &&\n      this.renderedResolution_ == resolution &&\n      this.renderedPixelRatio_ === pixelRatio &&\n      this.renderedRevision_ == vectorLayerRevision &&\n      this.renderedRenderOrder_ == vectorLayerRenderOrder &&\n      this.renderedFrameDeclutter_ === !!frameState.declutter &&\n      containsExtent(this.wrappedRenderedExtent_, extent)\n    ) {\n      if (!equals(this.renderedExtent_, renderedExtent)) {\n        this.hitDetectionImageData_ = null;\n        this.renderedExtent_ = renderedExtent;\n      }\n      this.renderedCenter_ = center;\n      this.replayGroupChanged = false;\n      return true;\n    }\n\n    this.replayGroup_ = null;\n\n    const replayGroup = new CanvasBuilderGroup(\n      getRenderTolerance(resolution, pixelRatio),\n      extent,\n      resolution,\n      pixelRatio,\n    );\n\n    const userProjection = getUserProjection();\n    let userTransform;\n    if (userProjection) {\n      for (let i = 0, ii = loadExtents.length; i < ii; ++i) {\n        const extent = loadExtents[i];\n        const userExtent = toUserExtent(extent, projection);\n        vectorSource.loadFeatures(\n          userExtent,\n          toUserResolution(resolution, projection),\n          userProjection,\n        );\n      }\n      userTransform = getTransformFromProjections(userProjection, projection);\n    } else {\n      for (let i = 0, ii = loadExtents.length; i < ii; ++i) {\n        vectorSource.loadFeatures(loadExtents[i], resolution, projection);\n      }\n    }\n\n    const squaredTolerance = getSquaredRenderTolerance(resolution, pixelRatio);\n    let ready = true;\n    const render =\n      /**\n       * @param {import(\"../../Feature.js\").default} feature Feature.\n       * @param {number} index Index.\n       */\n      (feature, index) => {\n        let styles;\n        const styleFunction =\n          feature.getStyleFunction() || vectorLayer.getStyleFunction();\n        if (styleFunction) {\n          styles = styleFunction(feature, resolution);\n        }\n        if (styles) {\n          const dirty = this.renderFeature(\n            feature,\n            squaredTolerance,\n            styles,\n            replayGroup,\n            userTransform,\n            this.getLayer().getDeclutter(),\n            index,\n          );\n          ready = ready && !dirty;\n        }\n      };\n\n    const userExtent = toUserExtent(extent, projection);\n    /** @type {Array<import(\"../../Feature.js\").default>} */\n    const features = vectorSource.getFeaturesInExtent(userExtent);\n    if (vectorLayerRenderOrder) {\n      features.sort(vectorLayerRenderOrder);\n    }\n    for (let i = 0, ii = features.length; i < ii; ++i) {\n      render(features[i], i);\n    }\n    this.renderedFeatures_ = features;\n    this.ready = ready;\n\n    const replayGroupInstructions = replayGroup.finish();\n    const executorGroup = new ExecutorGroup(\n      extent,\n      resolution,\n      pixelRatio,\n      vectorSource.getOverlaps(),\n      replayGroupInstructions,\n      vectorLayer.getRenderBuffer(),\n      !!frameState.declutter,\n    );\n\n    this.renderedResolution_ = resolution;\n    this.renderedRevision_ = vectorLayerRevision;\n    this.renderedRenderOrder_ = vectorLayerRenderOrder;\n    this.renderedFrameDeclutter_ = !!frameState.declutter;\n    this.renderedExtent_ = renderedExtent;\n    this.wrappedRenderedExtent_ = extent;\n    this.renderedCenter_ = center;\n    this.renderedProjection_ = projection;\n    this.renderedPixelRatio_ = pixelRatio;\n    this.replayGroup_ = executorGroup;\n    this.hitDetectionImageData_ = null;\n\n    this.replayGroupChanged = true;\n    return true;\n  }\n\n  /**\n   * @param {import(\"../../Feature.js\").default} feature Feature.\n   * @param {number} squaredTolerance Squared render tolerance.\n   * @param {import(\"../../style/Style.js\").default|Array<import(\"../../style/Style.js\").default>} styles The style or array of styles.\n   * @param {import(\"../../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n   * @param {import(\"../../proj.js\").TransformFunction} [transform] Transform from user to view projection.\n   * @param {boolean} [declutter] Enable decluttering.\n   * @param {number} [index] Render order index.\n   * @return {boolean} `true` if an image is loading.\n   */\n  renderFeature(\n    feature,\n    squaredTolerance,\n    styles,\n    builderGroup,\n    transform,\n    declutter,\n    index,\n  ) {\n    if (!styles) {\n      return false;\n    }\n    let loading = false;\n    if (Array.isArray(styles)) {\n      for (let i = 0, ii = styles.length; i < ii; ++i) {\n        loading =\n          renderFeature(\n            builderGroup,\n            feature,\n            styles[i],\n            squaredTolerance,\n            this.boundHandleStyleImageChange_,\n            transform,\n            declutter,\n            index,\n          ) || loading;\n      }\n    } else {\n      loading = renderFeature(\n        builderGroup,\n        feature,\n        styles,\n        squaredTolerance,\n        this.boundHandleStyleImageChange_,\n        transform,\n        declutter,\n        index,\n      );\n    }\n    return loading;\n  }\n}\n\nexport default CanvasVectorLayerRenderer;\n","/**\n * @module ol/layer/Vector\n */\nimport CanvasVectorLayerRenderer from '../renderer/canvas/VectorLayer.js';\nimport BaseVectorLayer from './BaseVector.js';\n\n/**\n * @template {import(\"../source/Vector.js\").default<FeatureType>} [VectorSourceType=import(\"../source/Vector.js\").default<*>]\n * @template {import('../Feature.js').FeatureLike} [FeatureType=import(\"./BaseVector.js\").ExtractedFeatureType<VectorSourceType>]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the viewport extent used by the\n * renderer when getting features from the vector source for the rendering or hit-detection.\n * Recommended value: the size of the largest symbol, line width or label.\n * @property {VectorSourceType} [source] Source.\n * @property {import(\"../Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use [map.addLayer()]{@link import(\"../Map.js\").default#addLayer}.\n * @property {boolean|string|number} [declutter=false] Declutter images and text. Any truthy value will enable\n * decluttering. Within a layer, a feature rendered before another has higher priority. All layers with the\n * same `declutter` value will be decluttered together. The priority is determined by the drawing order of the\n * layers with the same `declutter` value. Higher in the layer stack means higher priority. To declutter distinct\n * layers or groups of layers separately, use different truthy values for `declutter`.\n * @property {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike|null} [style] Layer style. When set to `null`, only\n * features that have their own style will be rendered. See {@link module:ol/style/Style~Style} for the default style\n * which will be used if this is not set.\n * @property {import(\"./Base.js\").BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will\n * be recreated during animations. This means that no vectors will be shown clipped, but the\n * setting will have a performance impact for large amounts of vector data. When set to `false`,\n * batches will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will\n * be recreated during interactions. See also `updateWhileAnimating`.\n * @property {Object<string, *>} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Vector data is rendered client-side, as vectors. This layer type provides most accurate rendering\n * even during animations. Points and labels stay upright on rotated views. For very large\n * amounts of vector data, performance may suffer during pan and zoom animations. In this case,\n * try {@link module:ol/layer/VectorImage~VectorImageLayer}.\n *\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/Vector.js\").default<FeatureType>} [VectorSourceType=import(\"../source/Vector.js\").default<*>]\n * @template {import('../Feature.js').FeatureLike} [FeatureType=import(\"./BaseVector.js\").ExtractedFeatureType<VectorSourceType>]\n * @extends {BaseVectorLayer<FeatureType, VectorSourceType, CanvasVectorLayerRenderer>}\n * @api\n */\nclass VectorLayer extends BaseVectorLayer {\n  /**\n   * @param {Options<VectorSourceType, FeatureType>} [options] Options.\n   */\n  constructor(options) {\n    super(options);\n  }\n\n  /**\n   * @override\n   */\n  createRenderer() {\n    return new CanvasVectorLayerRenderer(this);\n  }\n}\n\nexport default VectorLayer;\n","/**\n * @module ol/renderer/canvas/VectorTileLayer\n */\nimport TileState from '../../TileState.js';\nimport ViewHint from '../../ViewHint.js';\nimport {ascending} from '../../array.js';\nimport {wrapX} from '../../coordinate.js';\nimport {\n  boundingExtent,\n  buffer,\n  containsExtent,\n  equals,\n  getIntersection,\n  getTopLeft,\n  intersects,\n  subtractExtents,\n} from '../../extent.js';\nimport {equivalent, getTransform, transformExtent} from '../../proj.js';\nimport CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';\nimport CanvasExecutorGroup, {\n  DECLUTTER,\n} from '../../render/canvas/ExecutorGroup.js';\nimport ZIndexContext from '../../render/canvas/ZIndexContext.js';\nimport {\n  createHitDetectionImageData,\n  HIT_DETECT_RESOLUTION,\n  hitDetect,\n} from '../../render/canvas/hitdetect.js';\nimport {toSize} from '../../size.js';\nimport {\n  apply as applyTransform,\n  create as createTransform,\n  IDENTITY_TRANSFORM,\n  multiply,\n  reset as resetTransform,\n  scale,\n  scale as scaleTransform,\n  translate as translateTransform,\n} from '../../transform.js';\nimport {getUid} from '../../util.js';\nimport {\n  getSquaredTolerance as getSquaredRenderTolerance,\n  renderFeature,\n} from '../vector.js';\nimport CanvasTileLayerRenderer from './TileLayer.js';\n\n/**\n * @type {!Object<string, Array<import(\"../../render/canvas.js\").BuilderType>>}\n */\nconst IMAGE_REPLAYS = {\n  'image': ['Polygon', 'Circle', 'LineString', 'Image', 'Text'],\n  'hybrid': ['Polygon', 'LineString'],\n  'vector': [],\n};\n\n/**\n * @type {!Object<string, Array<import(\"../../render/canvas.js\").BuilderType>>}\n */\nconst VECTOR_REPLAYS = {\n  'hybrid': ['Image', 'Text', 'Default'],\n  'vector': ['Polygon', 'Circle', 'LineString', 'Image', 'Text', 'Default'],\n};\n\n/**\n * @classdesc\n * Canvas renderer for vector tile layers.\n * @api\n * @extends {CanvasTileLayerRenderer<import(\"../../layer/VectorTile.js\").default<import('../../source/VectorTile.js').default<import('../../Feature.js').FeatureLike>>>}\n */\nclass CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {\n  /**\n   * @param {import(\"../../layer/VectorTile.js\").default} layer VectorTile layer.\n   * @param {import(\"./TileLayer.js\").Options} options Options.\n   */\n  constructor(layer, options) {\n    super(layer, options);\n\n    /** @private */\n    this.boundHandleStyleImageChange_ = this.handleStyleImageChange_.bind(this);\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedLayerRevision_;\n\n    /**\n     * @private\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.renderedPixelToCoordinateTransform_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedRotation_;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedOpacity_ = 1;\n\n    /**\n     * @private\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.tmpTransform_ = createTransform();\n\n    /**\n     * @private\n     * @type {Array<ZIndexContext>}\n     */\n    this.tileClipContexts_ = null;\n  }\n\n  /**\n   * Determine whether tiles for next extent should be enqueued for rendering.\n   * @return {boolean} Rendering tiles for next extent is supported.\n   * @override\n   */\n  enqueueTilesForNextExtent() {\n    return this.getLayer().getRenderMode() !== 'vector';\n  }\n\n  /**\n   * @param {import(\"../../VectorRenderTile.js\").default} tile Tile.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {number} x Left of the tile.\n   * @param {number} y Top of the tile.\n   * @param {number} w Width of the tile.\n   * @param {number} h Height of the tile.\n   * @param {number} gutter Tile gutter.\n   * @param {boolean} transition Apply an alpha transition.\n   * @param {Array<import(\"../../extent.js\").Extent>} [clipRects] Sub-rectangles\n   *     of the tile to draw.\n   * @override\n   */\n  drawTile(tile, frameState, x, y, w, h, gutter, transition, clipRects) {\n    this.updateExecutorGroup_(\n      tile,\n      frameState.pixelRatio,\n      frameState.viewState.projection,\n    );\n    if (this.tileImageNeedsRender_(tile)) {\n      this.renderTileImage_(tile, frameState);\n    }\n    super.drawTile(tile, frameState, x, y, w, h, gutter, transition, clipRects);\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {import(\"../../Tile.js\").default|null} Tile (or null if outside source extent).\n   * @override\n   */\n  getTile(z, x, y, frameState) {\n    const tile = /** @type {import(\"../../VectorRenderTile.js\").default} */ (\n      this.getOrCreateTile(z, x, y, frameState)\n    );\n    if (!tile) {\n      return null;\n    }\n\n    const viewState = frameState.viewState;\n    const resolution = viewState.resolution;\n    const viewHints = frameState.viewHints;\n    const source = this.getLayer().getSource();\n    const tileGrid = source.getTileGridForProjection(viewState.projection);\n    const hifi = !(\n      viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING]\n    );\n    const withinTileResolutionRange =\n      tileGrid.getZForResolution(resolution, source.zDirection) === z;\n    if (hifi && withinTileResolutionRange) {\n      tile.wantedResolution = resolution;\n    } else if (!tile.wantedResolution) {\n      tile.wantedResolution = tileGrid.getResolution(z);\n    }\n\n    return tile;\n  }\n\n  /**\n   * Determine whether render should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @override\n   */\n  prepareFrame(frameState) {\n    const layerRevision = this.getLayer().getRevision();\n    if (this.renderedLayerRevision_ !== layerRevision) {\n      this.renderedLayerRevision_ = layerRevision;\n      this.renderedTiles.length = 0;\n    }\n    return super.prepareFrame(frameState);\n  }\n\n  /**\n   * @param {import(\"../../VectorRenderTile.js\").default} tile Tile.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../../proj/Projection.js\").default} projection Projection.\n   * @private\n   */\n  updateExecutorGroup_(tile, pixelRatio, projection) {\n    const layer = /** @type {import(\"../../layer/VectorTile.js\").default} */ (\n      this.getLayer()\n    );\n    const revision = layer.getRevision();\n    const renderOrder = layer.getRenderOrder() || null;\n\n    const resolution = tile.wantedResolution;\n    const builderState = tile.getReplayState(layer);\n    if (\n      !builderState.dirty &&\n      builderState.renderedResolution === resolution &&\n      builderState.renderedRevision == revision &&\n      builderState.renderedPixelRatio === pixelRatio &&\n      builderState.renderedRenderOrder == renderOrder\n    ) {\n      return;\n    }\n\n    const source = layer.getSource();\n    const declutter = !!layer.getDeclutter();\n    const sourceTileGrid = source.getTileGrid();\n    const tileGrid = source.getTileGridForProjection(projection);\n    const tileExtent = tileGrid.getTileCoordExtent(tile.wrappedTileCoord);\n\n    const sourceTiles = source.getSourceTiles(pixelRatio, projection, tile);\n    const layerUid = getUid(layer);\n    delete tile.hitDetectionImageData[layerUid];\n    tile.executorGroups[layerUid] = [];\n    builderState.dirty = false;\n    for (let t = 0, tt = sourceTiles.length; t < tt; ++t) {\n      const sourceTile = sourceTiles[t];\n      if (sourceTile.getState() != TileState.LOADED) {\n        continue;\n      }\n      const sourceProjection = source.getProjection();\n      const sourceTileCoord = sourceTile.tileCoord;\n      let sourceTileExtent = sourceTileGrid.getTileCoordExtent(sourceTileCoord);\n      if (\n        projection &&\n        sourceProjection &&\n        !equivalent(projection, sourceProjection)\n      ) {\n        sourceTileExtent = transformExtent(\n          sourceTileExtent,\n          sourceProjection,\n          projection,\n          32,\n        );\n      }\n\n      const sharedExtent = getIntersection(tileExtent, sourceTileExtent);\n      const builderExtent = buffer(\n        sharedExtent,\n        layer.getRenderBuffer() * resolution,\n        this.tempExtent,\n      );\n      const bufferedExtent = equals(sourceTileExtent, sharedExtent)\n        ? null\n        : builderExtent;\n      const builderGroup = new CanvasBuilderGroup(\n        0,\n        sharedExtent,\n        resolution,\n        pixelRatio,\n      );\n      const squaredTolerance = getSquaredRenderTolerance(\n        resolution,\n        pixelRatio,\n      );\n\n      /**\n       * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n       * @param {number} [index] Render order index.\n       * @this {CanvasVectorTileLayerRenderer}\n       */\n      const render = function (feature, index) {\n        let styles;\n        const styleFunction =\n          feature.getStyleFunction() || layer.getStyleFunction();\n        if (styleFunction) {\n          styles = styleFunction(feature, resolution);\n        }\n        if (styles) {\n          const dirty = this.renderFeature(\n            feature,\n            squaredTolerance,\n            styles,\n            builderGroup,\n            declutter,\n            index,\n          );\n          builderState.dirty = builderState.dirty || dirty;\n        }\n      };\n\n      const features = sourceTile.getFeatures();\n      if (renderOrder && renderOrder !== builderState.renderedRenderOrder) {\n        features.sort(renderOrder);\n      }\n      for (let i = 0, ii = features.length; i < ii; ++i) {\n        let feature = features[i];\n        if (\n          projection &&\n          sourceTile.projection &&\n          !equivalent(projection, sourceTile.projection)\n        ) {\n          feature = feature.clone();\n          feature\n            .getGeometry()\n            .applyTransform(getTransform(sourceTile.projection, projection));\n        }\n        if (\n          !bufferedExtent ||\n          intersects(bufferedExtent, feature.getGeometry().getExtent())\n        ) {\n          render.call(this, feature, i);\n        }\n      }\n      const executorGroupInstructions = builderGroup.finish();\n      // no need to clip when the render tile is covered by a single source tile\n      const replayExtent =\n        layer.getRenderMode() !== 'vector' &&\n        declutter &&\n        sourceTiles.length === 1\n          ? null\n          : sharedExtent;\n      const renderingReplayGroup = new CanvasExecutorGroup(\n        replayExtent,\n        resolution,\n        pixelRatio,\n        source.getOverlaps(),\n        executorGroupInstructions,\n        layer.getRenderBuffer(),\n        true,\n      );\n      tile.executorGroups[layerUid].push(renderingReplayGroup);\n    }\n    builderState.renderedRevision = revision;\n    builderState.renderedPixelRatio = pixelRatio;\n    builderState.renderedRenderOrder = renderOrder;\n    builderState.renderedResolution = resolution;\n  }\n\n  /**\n   * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {number} hitTolerance Hit tolerance in pixels.\n   * @param {import(\"../vector.js\").FeatureCallback<T>} callback Feature callback.\n   * @param {Array<import(\"../Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n   * @return {T|undefined} Callback result.\n   * @template T\n   * @override\n   */\n  forEachFeatureAtCoordinate(\n    coordinate,\n    frameState,\n    hitTolerance,\n    callback,\n    matches,\n  ) {\n    const resolution = frameState.viewState.resolution;\n    const rotation = frameState.viewState.rotation;\n    hitTolerance = hitTolerance == undefined ? 0 : hitTolerance;\n    const layer = this.getLayer();\n    const source = layer.getSource();\n    const tileGrid = source.getTileGridForProjection(\n      frameState.viewState.projection,\n    );\n\n    const renderBuffer = layer.getRenderBuffer();\n    const hitExtent = boundingExtent([coordinate]);\n    buffer(hitExtent, resolution * (renderBuffer + hitTolerance), hitExtent);\n\n    /** @type {!Object<string, import(\"../Map.js\").HitMatch<T>|true>} */\n    const features = {};\n\n    /**\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n     * @param {number} distanceSq The squared distance to the click position.\n     * @return {T|undefined} Callback result.\n     */\n    const featureCallback = function (feature, geometry, distanceSq) {\n      let key = feature.getId();\n      if (key === undefined) {\n        key = getUid(feature);\n      }\n      const match = features[key];\n      if (!match) {\n        if (distanceSq === 0) {\n          features[key] = true;\n          return callback(feature, layer, geometry);\n        }\n        matches.push(\n          (features[key] = {\n            feature: feature,\n            layer: layer,\n            geometry: geometry,\n            distanceSq: distanceSq,\n            callback: callback,\n          }),\n        );\n      } else if (match !== true && distanceSq < match.distanceSq) {\n        if (distanceSq === 0) {\n          features[key] = true;\n          matches.splice(matches.lastIndexOf(match), 1);\n          return callback(feature, layer, geometry);\n        }\n        match.geometry = geometry;\n        match.distanceSq = distanceSq;\n      }\n      return undefined;\n    };\n\n    const renderedTiles =\n      /** @type {Array<import(\"../../VectorRenderTile.js\").default>} */ (\n        this.renderedTiles\n      );\n    const layerUid = getUid(layer);\n    const declutter = layer.getDeclutter();\n    const declutteredFeatures = declutter\n      ? frameState.declutter?.[declutter]?.all().map((item) => item.value)\n      : null;\n    let found;\n    foundFeature: for (let i = renderedTiles.length - 1; i >= 0; --i) {\n      const tile = renderedTiles[i];\n      const tileExtent = tileGrid.getTileCoordExtent(tile.wrappedTileCoord);\n      if (!intersects(tileExtent, hitExtent)) {\n        continue;\n      }\n\n      const executorGroups = tile.executorGroups[layerUid];\n      for (let t = 0, tt = executorGroups.length; t < tt; ++t) {\n        found = executorGroups[t].forEachFeatureAtCoordinate(\n          coordinate,\n          resolution,\n          rotation,\n          hitTolerance,\n          featureCallback,\n          declutteredFeatures,\n        );\n        if (found) {\n          break foundFeature;\n        }\n      }\n    }\n    return found;\n  }\n\n  /**\n   * Asynchronous layer level hit detection.\n   * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n   * @return {Promise<Array<import(\"../../Feature.js\").FeatureLike>>} Promise that resolves with an array of features.\n   * @override\n   */\n  getFeatures(pixel) {\n    if (this.renderedTiles.length === 0) {\n      return Promise.resolve([]);\n    }\n    return new Promise((resolve, reject) => {\n      const layer = this.getLayer();\n      const source = layer.getSource();\n      const projection = this.renderedProjection;\n      const projectionExtent = projection.getExtent();\n      const resolution = this.renderedResolution;\n      const tileGrid = source.getTileGridForProjection(projection);\n      const coordinate = applyTransform(\n        this.renderedPixelToCoordinateTransform_,\n        pixel.slice(),\n      );\n      const tileCoordString = tileGrid\n        .getTileCoordForCoordAndResolution(coordinate, resolution)\n        .toString();\n      const tile =\n        /** @type {Array<import(\"../../VectorRenderTile.js\").default>} */ (\n          this.renderedTiles\n        ).find(\n          (tile) =>\n            tile.tileCoord.toString() === tileCoordString &&\n            tile.getState() === TileState.LOADED,\n        );\n      if (!tile || tile.loadingSourceTiles > 0) {\n        resolve([]);\n        return;\n      }\n      if (\n        source.getWrapX() &&\n        projection.canWrapX() &&\n        !containsExtent(\n          projectionExtent,\n          tileGrid.getTileCoordExtent(tile.tileCoord),\n        )\n      ) {\n        wrapX(coordinate, projection);\n      }\n      const layerUid = getUid(layer);\n      const extent = tileGrid.getTileCoordExtent(tile.wrappedTileCoord);\n      const corner = getTopLeft(extent);\n      const tilePixel = [\n        (coordinate[0] - corner[0]) / resolution,\n        (corner[1] - coordinate[1]) / resolution,\n      ];\n      const features = tile\n        .getSourceTiles()\n        .reduce(\n          (accumulator, sourceTile) =>\n            accumulator.concat(sourceTile.getFeatures()),\n          /** @type {Array<import(\"../../Feature.js\").FeatureLike>} */ ([]),\n        );\n      let hitDetectionImageData = tile.hitDetectionImageData[layerUid];\n      if (!hitDetectionImageData) {\n        const tileSize = toSize(\n          tileGrid.getTileSize(\n            tileGrid.getZForResolution(resolution, source.zDirection),\n          ),\n        );\n        const rotation = this.renderedRotation_;\n        const transforms = [\n          this.getRenderTransform(\n            tileGrid.getTileCoordCenter(tile.wrappedTileCoord),\n            resolution,\n            0,\n            HIT_DETECT_RESOLUTION,\n            tileSize[0] * HIT_DETECT_RESOLUTION,\n            tileSize[1] * HIT_DETECT_RESOLUTION,\n            0,\n          ),\n        ];\n        hitDetectionImageData = createHitDetectionImageData(\n          tileSize,\n          transforms,\n          features,\n          layer.getStyleFunction(),\n          tileGrid.getTileCoordExtent(tile.wrappedTileCoord),\n          tile.getReplayState(layer).renderedResolution,\n          rotation,\n        );\n        tile.hitDetectionImageData[layerUid] = hitDetectionImageData;\n      }\n      resolve(hitDetect(tilePixel, features, hitDetectionImageData));\n    });\n  }\n\n  /**\n   * @param {import(\"../../extent.js\").Extent} extent Extent.\n   * @return {Array<import('../../Feature.js').FeatureLike>} Features.\n   */\n  getFeaturesInExtent(extent) {\n    /** @type {Array<import('../../Feature.js').FeatureLike>} */\n    const features = [];\n    const tileCache = this.getTileCache();\n    if (tileCache.getCount() === 0) {\n      return features;\n    }\n    const source = this.getLayer().getSource();\n    const tileGrid = source.getTileGridForProjection(\n      this.frameState.viewState.projection,\n    );\n    const z = tileGrid.getZForResolution(this.renderedResolution);\n    /** @type {Object<string, true>} */\n    const visitedSourceTiles = {};\n    tileCache.forEach((tile) => {\n      if (tile.tileCoord[0] !== z || tile.getState() !== TileState.LOADED) {\n        return;\n      }\n      const sourceTiles = tile.getSourceTiles();\n      for (let i = 0, ii = sourceTiles.length; i < ii; ++i) {\n        const sourceTile = sourceTiles[i];\n        const key = sourceTile.getKey();\n        if (key in visitedSourceTiles) {\n          continue;\n        }\n        visitedSourceTiles[key] = true;\n        const tileCoord = sourceTile.tileCoord;\n        if (intersects(extent, tileGrid.getTileCoordExtent(tileCoord))) {\n          const tileFeatures = sourceTile.getFeatures();\n          if (tileFeatures) {\n            for (let j = 0, jj = tileFeatures.length; j < jj; ++j) {\n              const candidate = tileFeatures[j];\n              const geometry = candidate.getGeometry();\n              if (intersects(extent, geometry.getExtent())) {\n                features.push(candidate);\n              }\n            }\n          }\n        }\n      }\n    });\n    return features;\n  }\n\n  /**\n   * Perform action necessary to get the layer rendered after new fonts have loaded\n   * @override\n   */\n  handleFontsChanged() {\n    const layer = this.getLayer();\n    if (layer.getVisible() && this.renderedLayerRevision_ !== undefined) {\n      layer.changed();\n    }\n  }\n\n  /**\n   * Handle changes in image style state.\n   * @param {import(\"../../events/Event.js\").default} event Image style change event.\n   * @private\n   */\n  handleStyleImageChange_(event) {\n    this.renderIfReadyAndVisible();\n  }\n\n  /**\n   * Render declutter items for this layer\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {import(\"../../layer/Layer.js\").State} layerState Layer state.\n   */\n  renderDeclutter(frameState, layerState) {\n    const context = this.context;\n    const alpha = context.globalAlpha;\n    context.globalAlpha = layerState.opacity;\n    const viewHints = frameState.viewHints;\n    const hifi = !(\n      viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING]\n    );\n    const scaledCanvasSize = [\n      this.context.canvas.width,\n      this.context.canvas.height,\n    ];\n    const declutter = this.getLayer().getDeclutter();\n    const declutterTree = declutter\n      ? frameState.declutter?.[declutter]\n      : undefined;\n    const layerUid = getUid(this.getLayer());\n    const tiles =\n      /** @type {Array<import(\"../../VectorRenderTile.js\").default>} */ (\n        this.renderedTiles\n      );\n    for (let i = 0, ii = tiles.length; i < ii; ++i) {\n      const tile = tiles[i];\n      const executorGroups = tile.executorGroups[layerUid];\n      if (executorGroups) {\n        for (let j = executorGroups.length - 1; j >= 0; --j) {\n          executorGroups[j].execute(\n            this.context,\n            scaledCanvasSize,\n            this.getTileRenderTransform(tile, frameState),\n            frameState.viewState.rotation,\n            hifi,\n            DECLUTTER,\n            declutterTree,\n          );\n        }\n      }\n    }\n    context.globalAlpha = alpha;\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @override\n   */\n  renderDeferredInternal(frameState) {\n    const tiles =\n      /** @type {Array<import(\"../../VectorRenderTile.js\").default>} */ (\n        this.renderedTiles\n      );\n    const layerUid = getUid(this.getLayer());\n    const executorGroups = tiles.reduce((acc, tile, index) => {\n      tile.executorGroups[layerUid].forEach((executorGroup) =>\n        acc.push({\n          executorGroup,\n          index,\n        }),\n      );\n      return acc;\n    }, /** @type {Array<{executorGroup: CanvasExecutorGroup, index: number}>} */ ([]));\n\n    const executorGroupZIndexContexts = executorGroups.map(({executorGroup}) =>\n      executorGroup.getDeferredZIndexContexts(),\n    );\n    /** @type {Object<number, true>} */\n    const usedZIndices = {};\n    for (let i = 0, ii = executorGroups.length; i < ii; ++i) {\n      const executorGroupZindexContext =\n        executorGroups[i].executorGroup.getDeferredZIndexContexts();\n      for (const key in executorGroupZindexContext) {\n        usedZIndices[key] = true;\n      }\n    }\n    const zIndexKeys = Object.keys(usedZIndices).map(Number).sort(ascending);\n    if (this.layerExtent) {\n      this.clipUnrotated(this.context, frameState, this.layerExtent);\n    }\n    zIndexKeys.forEach((zIndex) => {\n      executorGroupZIndexContexts.forEach((zIndexContexts, i) => {\n        if (!zIndexContexts[zIndex]) {\n          return;\n        }\n        zIndexContexts[zIndex].forEach((zIndexContext) => {\n          const {executorGroup, index} = executorGroups[i];\n          const context = executorGroup.getRenderedContext();\n          const alpha = context.globalAlpha;\n          context.globalAlpha = this.renderedOpacity_;\n          const tileClipContext = this.tileClipContexts_[index];\n          if (tileClipContext) {\n            tileClipContext.draw(context);\n          }\n          zIndexContext.draw(context);\n          if (tileClipContext) {\n            context.restore();\n          }\n          context.globalAlpha = alpha;\n          zIndexContext.clear();\n        });\n        zIndexContexts[zIndex].length = 0;\n      });\n    });\n    if (this.layerExtent) {\n      this.context.restore();\n    }\n  }\n\n  /**\n   * @param {import(\"../../VectorRenderTile.js\").default} tile The tile\n   * @param {import('../../Map.js').FrameState} frameState Current frame state\n   * @return {import('../../transform.js').Transform} Transform to use to render this tile\n   */\n  getTileRenderTransform(tile, frameState) {\n    const pixelRatio = frameState.pixelRatio;\n    const viewState = frameState.viewState;\n    const center = viewState.center;\n    const resolution = viewState.resolution;\n    const rotation = viewState.rotation;\n    const size = frameState.size;\n    const width = Math.round(size[0] * pixelRatio);\n    const height = Math.round(size[1] * pixelRatio);\n\n    const source = this.getLayer().getSource();\n    const tileGrid = source.getTileGridForProjection(\n      frameState.viewState.projection,\n    );\n    const tileCoord = tile.tileCoord;\n    const tileExtent = tileGrid.getTileCoordExtent(tile.wrappedTileCoord);\n    const worldOffset =\n      tileGrid.getTileCoordExtent(tileCoord, this.tempExtent)[0] -\n      tileExtent[0];\n    const transform = multiply(\n      scale(this.inversePixelTransform.slice(), 1 / pixelRatio, 1 / pixelRatio),\n      this.getRenderTransform(\n        center,\n        resolution,\n        rotation,\n        pixelRatio,\n        width,\n        height,\n        worldOffset,\n      ),\n    );\n    return transform;\n  }\n\n  /**\n   * Clips the current tile to the regions not already covered by higher-z tiles.\n   * The tile extents are axis-aligned in world coordinates, so the covered\n   * regions can be subtracted as rectangles and a single clip applied to the\n   * disjoint remainder.\n   * @param {CanvasRenderingContext2D|import(\"../../render/canvas/ZIndexContext.js\").ZIndexContextProxy} clipContext Context to apply the clip to.\n   * @param {import(\"../../extent.js\").Extent} currentExtent World extent of the current tile.\n   * @param {Array<import(\"../../extent.js\").Extent>} clips World extents of previously rendered tiles.\n   * @param {Array<number>} clipZs Zoom levels of previously rendered tiles.\n   * @param {number} currentZ Zoom level of the current tile.\n   * @param {import(\"../../transform.js\").Transform} transform Transform from world to render coordinates.\n   * @return {boolean} The context was saved and needs to be restored.\n   * @private\n   */\n  clipTileContext_(\n    clipContext,\n    currentExtent,\n    clips,\n    clipZs,\n    currentZ,\n    transform,\n  ) {\n    /** @type {Array<import(\"../../extent.js\").Extent>} */\n    const covered = [];\n    for (let i = 0, ii = clips.length; i < ii; ++i) {\n      if (currentZ < clipZs[i] && intersects(currentExtent, clips[i])) {\n        covered.push(clips[i]);\n      }\n    }\n    if (covered.length === 0) {\n      return false;\n    }\n    const remainder = subtractExtents(currentExtent, covered);\n    clipContext.save();\n    clipContext.beginPath();\n    for (let i = 0, ii = remainder.length; i < ii; ++i) {\n      const r = remainder[i];\n      const p0 = applyTransform(transform, [r[0], r[1]]);\n      const p1 = applyTransform(transform, [r[0], r[3]]);\n      const p2 = applyTransform(transform, [r[2], r[3]]);\n      const p3 = applyTransform(transform, [r[2], r[1]]);\n      clipContext.moveTo(p0[0], p0[1]);\n      clipContext.lineTo(p1[0], p1[1]);\n      clipContext.lineTo(p2[0], p2[1]);\n      clipContext.lineTo(p3[0], p3[1]);\n      clipContext.closePath();\n    }\n    clipContext.clip();\n    return true;\n  }\n\n  /**\n   * Render the vectors for this layer.\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Target context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @override\n   */\n  postRender(context, frameState) {\n    const viewHints = frameState.viewHints;\n    const hifi = !(\n      viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING]\n    );\n\n    this.renderedPixelToCoordinateTransform_ =\n      frameState.pixelToCoordinateTransform.slice();\n    this.renderedRotation_ = frameState.viewState.rotation;\n    this.renderedOpacity_ =\n      frameState.layerStatesArray[frameState.layerIndex].opacity;\n\n    const layer = /** @type {import(\"../../layer/VectorTile.js\").default} */ (\n      this.getLayer()\n    );\n    const renderMode = layer.getRenderMode();\n    const alpha = context.globalAlpha;\n    context.globalAlpha = this.renderedOpacity_;\n    const declutter = layer.getDeclutter();\n    const replayTypes = declutter\n      ? VECTOR_REPLAYS[renderMode].filter((type) => !DECLUTTER.includes(type))\n      : VECTOR_REPLAYS[renderMode];\n    const viewState = frameState.viewState;\n    const rotation = viewState.rotation;\n    // clipped rendering if layer extent is set\n    if (this.layerExtent) {\n      this.clipUnrotated(context, frameState, this.layerExtent);\n    }\n    const tileSource = layer.getSource();\n    const tileGrid = tileSource.getTileGridForProjection(viewState.projection);\n    const z = tileGrid.getZForResolution(\n      viewState.resolution,\n      tileSource.zDirection,\n    );\n\n    const tiles =\n      /** @type {Array<import(\"../../VectorRenderTile.js\").default>} */ (\n        this.renderedTiles\n      );\n    /** @type {Array<import(\"../../extent.js\").Extent>} */\n    const clips = [];\n    const clipZs = [];\n    const tileClipContexts = [];\n    const layerUid = getUid(layer);\n    let ready = true;\n    for (let i = tiles.length - 1; i >= 0; --i) {\n      const tile = tiles[i];\n      ready = ready && !tile.getReplayState(layer).dirty;\n      const executorGroups = tile.executorGroups[layerUid].filter((group) =>\n        group.hasExecutors(replayTypes),\n      );\n      if (executorGroups.length === 0) {\n        continue;\n      }\n      const transform = this.getTileRenderTransform(tile, frameState);\n      const currentZ = tile.tileCoord[0];\n      let contextSaved = false;\n      const worldClip = executorGroups[0].getClipCoords(IDENTITY_TRANSFORM);\n      let clipContext = context;\n      let tileClipContext;\n      if (worldClip) {\n        const currentExtent = [\n          worldClip[0],\n          worldClip[1],\n          worldClip[4],\n          worldClip[5],\n        ];\n        tileClipContext = new ZIndexContext();\n        clipContext = tileClipContext.getContext();\n        if (z !== currentZ) {\n          contextSaved = this.clipTileContext_(\n            clipContext,\n            currentExtent,\n            clips,\n            clipZs,\n            currentZ,\n            transform,\n          );\n        }\n        clips.push(currentExtent);\n        clipZs.push(currentZ);\n      }\n      for (let t = 0, tt = executorGroups.length; t < tt; ++t) {\n        const executorGroup = executorGroups[t];\n        executorGroup.execute(\n          context,\n          [context.canvas.width, context.canvas.height],\n          transform,\n          rotation,\n          hifi,\n          replayTypes,\n          frameState.declutter?.[declutter],\n        );\n      }\n      if (contextSaved) {\n        if (clipContext === context) {\n          clipContext.restore();\n        } else {\n          tileClipContexts[i] = tileClipContext;\n        }\n      }\n    }\n    if (this.layerExtent) {\n      context.restore();\n    }\n    context.globalAlpha = alpha;\n    this.ready = ready;\n    this.tileClipContexts_ = tileClipContexts;\n    if (!frameState.declutter) {\n      this.renderDeferredInternal(frameState);\n    }\n\n    super.postRender(context, frameState);\n  }\n\n  /**\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} squaredTolerance Squared tolerance.\n   * @param {import(\"../../style/Style.js\").default|Array<import(\"../../style/Style.js\").default>} styles The style or array of styles.\n   * @param {import(\"../../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n   * @param {boolean} [declutter] Enable decluttering.\n   * @param {number} [index] Render order index.\n   * @return {boolean} `true` if an image is loading.\n   */\n  renderFeature(\n    feature,\n    squaredTolerance,\n    styles,\n    builderGroup,\n    declutter,\n    index,\n  ) {\n    if (!styles) {\n      return false;\n    }\n    let loading = false;\n    if (Array.isArray(styles)) {\n      for (let i = 0, ii = styles.length; i < ii; ++i) {\n        loading =\n          renderFeature(\n            builderGroup,\n            feature,\n            styles[i],\n            squaredTolerance,\n            this.boundHandleStyleImageChange_,\n            undefined,\n            declutter,\n            index,\n          ) || loading;\n      }\n    } else {\n      loading = renderFeature(\n        builderGroup,\n        feature,\n        styles,\n        squaredTolerance,\n        this.boundHandleStyleImageChange_,\n        undefined,\n        declutter,\n        index,\n      );\n    }\n    return loading;\n  }\n\n  /**\n   * @param {import(\"../../VectorRenderTile.js\").default} tile Tile.\n   * @return {boolean} A new tile image was rendered.\n   * @private\n   */\n  tileImageNeedsRender_(tile) {\n    const layer = /** @type {import(\"../../layer/VectorTile.js\").default} */ (\n      this.getLayer()\n    );\n    if (layer.getRenderMode() === 'vector') {\n      return false;\n    }\n    const replayState = tile.getReplayState(layer);\n    const revision = layer.getRevision();\n    const resolution = tile.wantedResolution;\n    const tileImageNeedsRender =\n      replayState.renderedTileResolution !== resolution ||\n      replayState.renderedTileRevision !== revision;\n    return tileImageNeedsRender;\n  }\n\n  /**\n   * @param {import(\"../../VectorRenderTile.js\").default} tile Tile.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @private\n   */\n  renderTileImage_(tile, frameState) {\n    const layer = /** @type {import(\"../../layer/VectorTile.js\").default} */ (\n      this.getLayer()\n    );\n    const replayState = tile.getReplayState(layer);\n    const revision = layer.getRevision();\n    const executorGroups = tile.executorGroups[getUid(layer)];\n    replayState.renderedTileRevision = revision;\n\n    const tileCoord = tile.wrappedTileCoord;\n    const z = tileCoord[0];\n    const source = layer.getSource();\n    let pixelRatio = frameState.pixelRatio;\n    const viewState = frameState.viewState;\n    const projection = viewState.projection;\n    const tileGrid = source.getTileGridForProjection(projection);\n    const tileResolution = tileGrid.getResolution(tile.tileCoord[0]);\n    const renderPixelRatio =\n      (frameState.pixelRatio / tile.wantedResolution) * tileResolution;\n    const resolution = tileGrid.getResolution(z);\n    const context = tile.getContext();\n\n    // Increase tile size when overzooming for low pixel ratio, to avoid blurry tiles\n    pixelRatio = Math.round(\n      Math.max(pixelRatio, renderPixelRatio / pixelRatio),\n    );\n    const size = source.getTilePixelSize(z, pixelRatio, projection);\n    context.canvas.width = size[0];\n    context.canvas.height = size[1];\n    const renderScale = pixelRatio / renderPixelRatio;\n    if (renderScale !== 1) {\n      const canvasTransform = resetTransform(this.tmpTransform_);\n      scaleTransform(canvasTransform, renderScale, renderScale);\n      context.setTransform.apply(context, canvasTransform);\n    }\n    const tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tempExtent);\n    const pixelScale = renderPixelRatio / resolution;\n    const transform = resetTransform(this.tmpTransform_);\n    scaleTransform(transform, pixelScale, -pixelScale);\n    translateTransform(transform, -tileExtent[0], -tileExtent[3]);\n    for (let i = 0, ii = executorGroups.length; i < ii; ++i) {\n      const executorGroup = executorGroups[i];\n      executorGroup.execute(\n        context,\n        [\n          context.canvas.width * renderScale,\n          context.canvas.height * renderScale,\n        ],\n        transform,\n        0,\n        true,\n        IMAGE_REPLAYS[layer.getRenderMode()],\n        null,\n      );\n    }\n    replayState.renderedTileResolution = tile.wantedResolution;\n  }\n}\n\nexport default CanvasVectorTileLayerRenderer;\n","/**\n * @module ol/layer/VectorTile\n */\nimport {assert} from '../asserts.js';\nimport CanvasVectorTileLayerRenderer from '../renderer/canvas/VectorTileLayer.js';\nimport BaseVectorLayer from './BaseVector.js';\nimport TileProperty from './TileProperty.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"./Base.js\").BaseLayerObjectEventTypes|\n *     import(\"./Layer.js\").LayerEventType|'change:preload'|'change:useInterimTilesOnError', import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../render/EventType.js\").LayerRenderEventTypes, import(\"../render/Event.js\").default, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"./Base.js\").BaseLayerObjectEventTypes|\n *     import(\"./Layer.js\").LayerEventType|'change:preload'|'change:useInterimTilesOnError'|import(\"../render/EventType.js\").LayerRenderEventTypes, Return>} VectorTileLayerOnSignature\n */\n\n/**\n * @typedef {'hybrid' | 'vector'} VectorTileRenderType\n */\n\n/***\n * @template T\n * @typedef {T extends import(\"../source/VectorTile.js\").default<infer U extends import(\"../Feature.js\").FeatureLike> ? U : never} ExtractedFeatureType\n */\n\n/**\n * @template {import(\"../source/VectorTile.js\").default<FeatureType>} [VectorTileSourceType=import(\"../source/VectorTile.js\").default<*>]\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=ExtractedFeatureType<VectorTileSourceType>]\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering.  The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {import(\"../render.js\").OrderFunction} [renderOrder] Render order. Function to be used when sorting\n * features before rendering. By default features are drawn in the order that they are created. Use\n * `null` to avoid the sort, but get an undefined draw order.\n * @property {number} [renderBuffer=100] The buffer in pixels around the tile extent used by the\n * renderer when getting features from the vector tile for the rendering or hit-detection.\n * Recommended value: Vector tiles are usually generated with a buffer, so this value should match\n * the largest possible buffer of the used tiles. It should be at least the size of the largest\n * point symbol or line width.\n * @property {VectorTileRenderType} [renderMode='hybrid'] Render mode for vector tiles:\n *  `'hybrid'`: Polygon and line elements are rendered as images, so pixels are scaled during zoom\n *    animations. Point symbols and texts are accurately rendered as vectors and can stay upright on\n *    rotated views, but get lifted above all polygon and line elements.\n *  `'vector'`: Everything is rendered as vectors and the original render order is maintained. Use\n *    this mode for improved performance and visual epxerience on vector tile layers with not too many\n *    rendered features (e.g. for highlighting a subset of features of another layer with the same\n *    source).\n * @property {VectorTileSourceType} [source] Source.\n * @property {import(\"../Map.js\").default} [map] Sets the layer as overlay on a map. The map will not manage\n * this layer in its layers collection, and the layer will be rendered on top. This is useful for\n * temporary layers. The standard way to add a layer to a map and have it managed by the map is to\n * use [map.addLayer()]{@link import(\"../Map.js\").default#addLayer}.\n * @property {boolean|string|number} [declutter=false] Declutter images and text. Any truthy value will enable\n * decluttering. Within a layer, a feature rendered before another has higher priority. All layers with the\n * same `declutter` value will be decluttered together. The priority is determined by the drawing order of the\n * layers with the same `declutter` value. Higher in the layer stack means higher priority. To declutter distinct\n * layers or groups of layers separately, use different truthy values for `declutter`.\n * @property {import(\"../style/Style.js\").StyleLike|import(\"../style/flat.js\").FlatStyleLike|null} [style] Layer\n * style. When set to `null`, only\n * features that have their own style will be rendered. See {@link module:ol/style/Style~Style} for the default style\n * which will be used if this is not set.\n * @property {import(\"./Base.js\").BackgroundColor} [background] Background color for the layer. If not specified, no\n * background will be rendered.\n * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will be\n * recreated during animations. This means that no vectors will be shown clipped, but the setting\n * will have a performance impact for large amounts of vector data. When set to `false`, batches\n * will be recreated when no animation is active.\n * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will be\n * recreated during interactions. See also `updateWhileAnimating`.\n * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`\n * means no preloading.\n * @property {boolean} [useInterimTilesOnError=true] Deprecated.  Use interim tiles on error.\n * @property {Object<string, *>} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n * @property {number} [cacheSize=0] The internal tile cache size.  If too small, this will auto-grow to hold\n * two zoom levels worth of tiles.\n */\n\n/**\n * @classdesc\n * Layer for vector tile data that is rendered client-side.\n * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}\n * property on the layer object; for example, setting `title: 'My Title'` in the\n * options means that `title` is observable, and has get/set accessors.\n *\n * @template {import(\"../source/VectorTile.js\").default<FeatureType>} [VectorTileSourceType=import(\"../source/VectorTile.js\").default<*>]\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=ExtractedFeatureType<VectorTileSourceType>]\n * @extends {BaseVectorLayer<FeatureType, VectorTileSourceType, CanvasVectorTileLayerRenderer>}\n * @api\n */\nclass VectorTileLayer extends BaseVectorLayer {\n  /**\n   * @param {Options<VectorTileSourceType, FeatureType>} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    const baseOptions = Object.assign({}, options);\n    delete baseOptions.preload;\n    const cacheSize = options.cacheSize === undefined ? 0 : options.cacheSize;\n    delete options.cacheSize;\n    delete baseOptions.useInterimTilesOnError;\n\n    super(baseOptions);\n\n    /***\n     * @type {VectorTileLayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {VectorTileLayerOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {VectorTileLayerOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @type {number|undefined}\n     * @private\n     */\n    this.cacheSize_ = cacheSize;\n\n    const renderMode = options.renderMode || 'hybrid';\n    assert(\n      renderMode == 'hybrid' || renderMode == 'vector',\n      \"`renderMode` must be `'hybrid'` or `'vector'`\",\n    );\n\n    /**\n     * @private\n     * @type {VectorTileRenderType}\n     */\n    this.renderMode_ = renderMode;\n\n    this.setPreload(options.preload ? options.preload : 0);\n    this.setUseInterimTilesOnError(\n      options.useInterimTilesOnError !== undefined\n        ? options.useInterimTilesOnError\n        : true,\n    );\n\n    /**\n     * @return {import(\"./Base.js\").BackgroundColor} Background color.\n     * @function\n     * @api\n     */\n    this.getBackground;\n\n    /**\n     * @param {import(\"./Base.js\").BackgroundColor} background Background color.\n     * @function\n     * @api\n     */\n    this.setBackground;\n  }\n\n  /**\n   * @override\n   */\n  createRenderer() {\n    return new CanvasVectorTileLayerRenderer(this, {\n      cacheSize: this.cacheSize_,\n    });\n  }\n\n  /**\n   * Get the topmost feature that intersects the given pixel on the viewport. Returns a promise\n   * that resolves with an array of features. The array will either contain the topmost feature\n   * when a hit was detected, or it will be empty.\n   *\n   * The hit detection algorithm used for this method is optimized for performance, but is less\n   * accurate than the one used in [map.getFeaturesAtPixel()]{@link import(\"../Map.js\").default#getFeaturesAtPixel}.\n   * Text is not considered, and icons are only represented by their bounding box instead of the exact\n   * image.\n   *\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Promise<Array<import(\"../Feature.js\").FeatureLike>>} Promise that resolves with an array of features.\n   * @api\n   * @override\n   */\n  getFeatures(pixel) {\n    return super.getFeatures(pixel);\n  }\n\n  /**\n   * Get features whose bounding box intersects the provided extent. Only features for cached\n   * tiles for the last rendered zoom level are available in the source. So this method is only\n   * suitable for requesting tiles for extents that are currently rendered.\n   *\n   * Features are returned in random tile order and as they are included in the tiles. This means\n   * they can be clipped, duplicated across tiles, and simplified to the render resolution.\n   *\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {Array<FeatureType>} Features.\n   * @api\n   */\n  getFeaturesInExtent(extent) {\n    return /** @type {Array<FeatureType>} */ (\n      /** @type {*} */ (this.getRenderer().getFeaturesInExtent(extent))\n    );\n  }\n\n  /**\n   * @return {VectorTileRenderType} The render mode.\n   */\n  getRenderMode() {\n    return this.renderMode_;\n  }\n\n  /**\n   * Return the level as number to which we will preload tiles up to.\n   * @return {number} The level to preload tiles up to.\n   * @observable\n   * @api\n   */\n  getPreload() {\n    return /** @type {number} */ (this.get(TileProperty.PRELOAD));\n  }\n\n  /**\n   * Deprecated.  Whether we use interim tiles on error.\n   * @return {boolean} Use interim tiles on error.\n   * @observable\n   * @api\n   */\n  getUseInterimTilesOnError() {\n    return /** @type {boolean} */ (\n      this.get(TileProperty.USE_INTERIM_TILES_ON_ERROR)\n    );\n  }\n\n  /**\n   * Set the level as number to which we will preload tiles up to.\n   * @param {number} preload The level to preload tiles up to.\n   * @observable\n   * @api\n   */\n  setPreload(preload) {\n    this.set(TileProperty.PRELOAD, preload);\n  }\n\n  /**\n   * Deprecated.  Set whether we use interim tiles on error.\n   * @param {boolean} useInterimTilesOnError Use interim tiles on error.\n   * @observable\n   * @api\n   */\n  setUseInterimTilesOnError(useInterimTilesOnError) {\n    this.set(TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);\n  }\n}\n\nexport default VectorTileLayer;\n","/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n *     number within the bounds.\n */\nexport function clamp(value, min, max) {\n  return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n  const dx = x2 - x1;\n  const dy = y2 - y1;\n  if (dx !== 0 || dy !== 0) {\n    const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n    if (t > 1) {\n      x1 = x2;\n      y1 = y2;\n    } else if (t > 0) {\n      x1 += dx * t;\n      y1 += dy * t;\n    }\n  }\n  return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n  const dx = x2 - x1;\n  const dy = y2 - y1;\n  return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array<Array<number>>} mat Augmented matrix (n x n + 1 column)\n *                                     in row-major order.\n * @return {Array<number>|null} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n  const n = mat.length;\n\n  for (let i = 0; i < n; i++) {\n    // Find max in the i-th column (ignoring i - 1 first rows)\n    let maxRow = i;\n    let maxEl = Math.abs(mat[i][i]);\n    for (let r = i + 1; r < n; r++) {\n      const absValue = Math.abs(mat[r][i]);\n      if (absValue > maxEl) {\n        maxEl = absValue;\n        maxRow = r;\n      }\n    }\n\n    if (maxEl === 0) {\n      return null; // matrix is singular\n    }\n\n    // Swap max row with i-th (current) row\n    const tmp = mat[maxRow];\n    mat[maxRow] = mat[i];\n    mat[i] = tmp;\n\n    // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n    for (let j = i + 1; j < n; j++) {\n      const coef = -mat[j][i] / mat[i][i];\n      for (let k = i; k < n + 1; k++) {\n        if (i == k) {\n          mat[j][k] = 0;\n        } else {\n          mat[j][k] += coef * mat[i][k];\n        }\n      }\n    }\n  }\n\n  // Solve Ax=b for upper triangular matrix A (mat)\n  const x = new Array(n);\n  for (let l = n - 1; l >= 0; l--) {\n    x[l] = mat[l][n] / mat[l][l];\n    for (let m = l - 1; m >= 0; m--) {\n      mat[m][n] -= mat[m][l] * x[l];\n    }\n  }\n  return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n  return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n  return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n  const r = a % b;\n  return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n  return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n  const factor = Math.pow(10, decimals);\n  return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n  return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n  return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n  return Math.ceil(toFixed(n, decimals));\n}\n\n/**\n * Wraps a number between some minimum and maximum values.\n * @param {number} n The number to wrap.\n * @param {number} min The minimum of the range (inclusive).\n * @param {number} max The maximum of the range (exclusive).\n * @return {number} The wrapped number.\n */\nexport function wrap(n, min, max) {\n  if (n >= min && n < max) {\n    return n;\n  }\n  const range = max - min;\n  return ((((n - min) % range) + range) % range) + min;\n}\n","/**\n * @module ol/obj\n */\n\n/**\n * Removes all properties from an object.\n * @param {Object<string, unknown>} object The object to clear.\n */\nexport function clear(object) {\n  for (const property in object) {\n    delete object[property];\n  }\n}\n\n/**\n * Determine if an object has any properties.\n * @param {Object} object The object to check.\n * @return {boolean} The object is empty.\n */\nexport function isEmpty(object) {\n  let property;\n  for (property in object) {\n    return false;\n  }\n  return !property;\n}\n","/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n  POINTERMOVE: 'pointermove',\n  POINTERDOWN: 'pointerdown',\n  POINTERUP: 'pointerup',\n  POINTEROVER: 'pointerover',\n  POINTEROUT: 'pointerout',\n  POINTERENTER: 'pointerenter',\n  POINTERLEAVE: 'pointerleave',\n  POINTERCANCEL: 'pointercancel',\n};\n","/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n  /**\n   * @param {string} code Code.\n   */\n  constructor(code) {\n    super({\n      code: code,\n      units: 'm',\n      extent: EXTENT,\n      global: true,\n      worldExtent: WORLD_EXTENT,\n      getPointResolution: function (resolution, point) {\n        return resolution / Math.cosh(point[1] / RADIUS);\n      },\n    });\n  }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport const PROJECTIONS = [\n  new EPSG3857Projection('EPSG:3857'),\n  new EPSG3857Projection('EPSG:102100'),\n  new EPSG3857Projection('EPSG:102113'),\n  new EPSG3857Projection('EPSG:900913'),\n  new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n  new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension, stride) {\n  const length = input.length;\n  dimension = dimension > 1 ? dimension : 2;\n  stride = stride ?? dimension;\n  if (output === undefined) {\n    if (dimension > 2) {\n      // preserve values beyond second dimension\n      output = input.slice();\n    } else {\n      output = new Array(length);\n    }\n  }\n  for (let i = 0; i < length; i += stride) {\n    output[i] = (HALF_SIZE * input[i]) / 180;\n    let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n    if (y > MAX_SAFE_Y) {\n      y = MAX_SAFE_Y;\n    } else if (y < -MAX_SAFE_Y) {\n      y = -MAX_SAFE_Y;\n    }\n    output[i + 1] = y;\n  }\n  return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension, stride) {\n  const length = input.length;\n  dimension = dimension > 1 ? dimension : 2;\n  stride = stride ?? dimension;\n  if (output === undefined) {\n    if (dimension > 2) {\n      // preserve values beyond second dimension\n      output = input.slice();\n    } else {\n      output = new Array(length);\n    }\n  }\n  for (let i = 0; i < length; i += stride) {\n    output[i] = (180 * input[i]) / HALF_SIZE;\n    output[i + 1] =\n      (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n  }\n  return output;\n}\n","/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n  /**\n   * @param {string} code Code.\n   * @param {string} [axisOrientation] Axis orientation.\n   */\n  constructor(code, axisOrientation) {\n    super({\n      code: code,\n      units: 'degrees',\n      extent: EXTENT,\n      axisOrientation: axisOrientation,\n      global: true,\n      metersPerUnit: METERS_PER_UNIT,\n      worldExtent: EXTENT,\n    });\n  }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport const PROJECTIONS = [\n  new EPSG4326Projection('CRS:84'),\n  new EPSG4326Projection('EPSG:4326', 'neu'),\n  new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n  new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n  new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n  new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n  new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n","/**\n * @module ol/proj/utm\n */\n\n/**\n * Adapted from https://github.com/Turbo87/utm\n * Copyright (c) 2012-2017 Tobias Bieniek\n *\n * The functions here provide approximate transforms to and from UTM.\n * They are not appropriate for use beyond the validity extend of a UTM\n * zone, and the accuracy of the transform decreases toward the zone\n * edges.\n */\n\nimport {toDegrees, toRadians, wrap} from '../math.js';\nimport Projection from './Projection.js';\n\n/**\n * @typedef {Object} UTMZone\n * @property {number} number The zone number (1 - 60).\n * @property {boolean} north The northern hemisphere.\n */\n\nconst K0 = 0.9996;\n\nconst E = 0.00669438;\nconst E2 = E * E;\nconst E3 = E2 * E;\nconst E_P2 = E / (1 - E);\n\nconst SQRT_E = Math.sqrt(1 - E);\nconst _E = (1 - SQRT_E) / (1 + SQRT_E);\nconst _E2 = _E * _E;\nconst _E3 = _E2 * _E;\nconst _E4 = _E3 * _E;\nconst _E5 = _E4 * _E;\n\nconst M1 = 1 - E / 4 - (3 * E2) / 64 - (5 * E3) / 256;\nconst M2 = (3 * E) / 8 + (3 * E2) / 32 + (45 * E3) / 1024;\nconst M3 = (15 * E2) / 256 + (45 * E3) / 1024;\nconst M4 = (35 * E3) / 3072;\n\nconst P2 = (3 / 2) * _E - (27 / 32) * _E3 + (269 / 512) * _E5;\nconst P3 = (21 / 16) * _E2 - (55 / 32) * _E4;\nconst P4 = (151 / 96) * _E3 - (417 / 128) * _E5;\nconst P5 = (1097 / 512) * _E4;\n\nconst R = 6378137;\n\n/**\n * @param {number} easting Easting value of coordinate.\n * @param {number} northing Northing value of coordinate.\n * @param {UTMZone} zone The UTM zone.\n * @return {import(\"../coordinate.js\").Coordinate} The transformed coordinate.\n */\nfunction toLonLat(easting, northing, zone) {\n  const x = easting - 500000;\n  const y = zone.north ? northing : northing - 10000000;\n\n  const m = y / K0;\n  const mu = m / (R * M1);\n\n  const pRad =\n    mu +\n    P2 * Math.sin(2 * mu) +\n    P3 * Math.sin(4 * mu) +\n    P4 * Math.sin(6 * mu) +\n    P5 * Math.sin(8 * mu);\n\n  const pSin = Math.sin(pRad);\n  const pSin2 = pSin * pSin;\n\n  const pCos = Math.cos(pRad);\n\n  const pTan = pSin / pCos;\n  const pTan2 = pTan * pTan;\n  const pTan4 = pTan2 * pTan2;\n\n  const epSin = 1 - E * pSin2;\n  const epSinSqrt = Math.sqrt(1 - E * pSin2);\n\n  const n = R / epSinSqrt;\n  const r = (1 - E) / epSin;\n\n  const c = E_P2 * pCos ** 2;\n  const c2 = c * c;\n\n  const d = x / (n * K0);\n  const d2 = d * d;\n  const d3 = d2 * d;\n  const d4 = d3 * d;\n  const d5 = d4 * d;\n  const d6 = d5 * d;\n\n  const latitude =\n    pRad -\n    (pTan / r) *\n      (d2 / 2 - (d4 / 24) * (5 + 3 * pTan2 + 10 * c - 4 * c2 - 9 * E_P2)) +\n    (d6 / 720) * (61 + 90 * pTan2 + 298 * c + 45 * pTan4 - 252 * E_P2 - 3 * c2);\n\n  let longitude =\n    (d -\n      (d3 / 6) * (1 + 2 * pTan2 + c) +\n      (d5 / 120) * (5 - 2 * c + 28 * pTan2 - 3 * c2 + 8 * E_P2 + 24 * pTan4)) /\n    pCos;\n\n  longitude = wrap(\n    longitude + toRadians(zoneToCentralLongitude(zone.number)),\n    -Math.PI,\n    Math.PI,\n  );\n\n  return [toDegrees(longitude), toDegrees(latitude)];\n}\n\nconst MIN_LATITUDE = -80;\nconst MAX_LATITUDE = 84;\nconst MIN_LONGITUDE = -180;\nconst MAX_LONGITUDE = 180;\n\n/**\n * @param {number} longitude The longitude.\n * @param {number} latitude The latitude.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../coordinate.js').Coordinate} The UTM coordinate.\n */\nfunction fromLonLat(longitude, latitude, zone) {\n  longitude = wrap(longitude, MIN_LONGITUDE, MAX_LONGITUDE);\n\n  if (latitude < MIN_LATITUDE) {\n    latitude = MIN_LATITUDE;\n  } else if (latitude > MAX_LATITUDE) {\n    latitude = MAX_LATITUDE;\n  }\n\n  const latRad = toRadians(latitude);\n  const latSin = Math.sin(latRad);\n  const latCos = Math.cos(latRad);\n\n  const latTan = latSin / latCos;\n  const latTan2 = latTan * latTan;\n  const latTan4 = latTan2 * latTan2;\n\n  const lonRad = toRadians(longitude);\n  const centralLon = zoneToCentralLongitude(zone.number);\n  const centralLonRad = toRadians(centralLon);\n\n  const n = R / Math.sqrt(1 - E * latSin ** 2);\n  const c = E_P2 * latCos ** 2;\n\n  const a = latCos * wrap(lonRad - centralLonRad, -Math.PI, Math.PI);\n  const a2 = a * a;\n  const a3 = a2 * a;\n  const a4 = a3 * a;\n  const a5 = a4 * a;\n  const a6 = a5 * a;\n\n  const m =\n    R *\n    (M1 * latRad -\n      M2 * Math.sin(2 * latRad) +\n      M3 * Math.sin(4 * latRad) -\n      M4 * Math.sin(6 * latRad));\n\n  const easting =\n    K0 *\n      n *\n      (a +\n        (a3 / 6) * (1 - latTan2 + c) +\n        (a5 / 120) * (5 - 18 * latTan2 + latTan4 + 72 * c - 58 * E_P2)) +\n    500000;\n\n  let northing =\n    K0 *\n    (m +\n      n *\n        latTan *\n        (a2 / 2 +\n          (a4 / 24) * (5 - latTan2 + 9 * c + 4 * c ** 2) +\n          (a6 / 720) * (61 - 58 * latTan2 + latTan4 + 600 * c - 330 * E_P2)));\n\n  if (!zone.north) {\n    northing += 10000000;\n  }\n\n  return [easting, northing];\n}\n\n/**\n * @param {number} zone The zone number.\n * @return {number} The central longitude in degrees.\n */\nfunction zoneToCentralLongitude(zone) {\n  return (zone - 1) * 6 - 180 + 3;\n}\n\n/**\n * @type {Array<RegExp>}\n */\nconst epsgRegExes = [\n  /^EPSG:(\\d+)$/,\n  /^urn:ogc:def:crs:EPSG::(\\d+)$/,\n  /^http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/0\\/(\\d+)$/,\n];\n\n/**\n * @param {string} code The projection code.\n * @return {UTMZone|null} The UTM zone info (or null if not UTM).\n */\nexport function zoneFromCode(code) {\n  let epsgId = 0;\n  for (const re of epsgRegExes) {\n    const match = code.match(re);\n    if (match) {\n      epsgId = parseInt(match[1]);\n      break;\n    }\n  }\n  if (!epsgId) {\n    return null;\n  }\n\n  let number = 0;\n  let north = false;\n  if (epsgId > 32700 && epsgId < 32761) {\n    number = epsgId - 32700;\n  } else if (epsgId > 32600 && epsgId < 32661) {\n    north = true;\n    number = epsgId - 32600;\n  }\n  if (!number) {\n    return null;\n  }\n\n  return {number, north};\n}\n\n/**\n * @param {function(number, number, UTMZone): import('../coordinate.js').Coordinate} transformer The transformer.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../proj.js').TransformFunction} The transform function.\n */\nfunction makeTransformFunction(transformer, zone) {\n  return function (input, output, dimension, stride) {\n    const length = input.length;\n    dimension = dimension > 1 ? dimension : 2;\n    stride = stride ?? dimension;\n    if (!output) {\n      if (dimension > 2) {\n        output = input.slice();\n      } else {\n        output = new Array(length);\n      }\n    }\n    for (let i = 0; i < length; i += stride) {\n      const x = input[i];\n      const y = input[i + 1];\n      const coord = transformer(x, y, zone);\n      output[i] = coord[0];\n      output[i + 1] = coord[1];\n    }\n    return output;\n  };\n}\n\n/**\n * @param {string} code The projection code.\n * @return {import('./Projection.js').default|null} A projection or null if unable to create one.\n */\nexport function makeProjection(code) {\n  const zone = zoneFromCode(code);\n  if (!zone) {\n    return null;\n  }\n  return new Projection({code, units: 'm'});\n}\n\n/**\n * @param {import('./Projection.js').default} projection The projection.\n * @return {import('../proj.js').Transforms|null} The transforms lookup or null if unable to handle projection.\n */\nexport function makeTransforms(projection) {\n  const zone = zoneFromCode(projection.getCode());\n  if (!zone) {\n    return null;\n  }\n\n  return {\n    forward: makeTransformFunction(fromLonLat, zone),\n    inverse: makeTransformFunction(toLonLat, zone),\n  };\n}\n","/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://spatialreference.org/, and are a JS function, so can be loaded in a\n * script tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport {warn} from './console.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport Projection from './proj/Projection.js';\nimport {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n  PROJECTIONS as EPSG3857_PROJECTIONS,\n  fromEPSG4326,\n  toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {\n  add as addProj,\n  clear as clearProj,\n  get as getProj,\n} from './proj/projections.js';\nimport {\n  add as addTransformFunc,\n  clear as clearTransformFuncs,\n  get as getTransformFunc,\n} from './proj/transforms.js';\nimport {\n  makeProjection as makeUTMProjection,\n  makeTransforms as makeUTMTransforms,\n} from './proj/utm.js';\nimport {getDistance} from './sphere.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * @typedef {Object} Transforms\n * @property {TransformFunction} forward The forward transform (from geographic).\n * @property {TransformFunction} inverse The inverse transform (to geographic).\n */\n\n/**\n * @type {Array<function(Projection): Transforms|null>}\n */\nconst transformFactories = [makeUTMTransforms];\n\n/**\n * @type {Array<function(string): Projection|null>}\n */\nconst projectionFactories = [makeUTMProjection];\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2).  The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @callback TransformFunction\n * @param {Array<number>} input\n * @param {Array<number>} [output]\n * @param {number} [dimension]\n * @param {number} [stride]\n * @return {Array<number>}\n *\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [disable] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(disable) {\n  const hide = disable === undefined ? true : disable;\n  showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @return {Array<number>} Output coordinate array (new array, same coordinate\n *     values).\n */\nexport function cloneTransform(input, output) {\n  if (output !== undefined) {\n    for (let i = 0, ii = input.length; i < ii; ++i) {\n      output[i] = input[i];\n    }\n    output = output;\n  } else {\n    output = input.slice();\n  }\n  return output;\n}\n\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @return {Array<number>} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output) {\n  if (output !== undefined && input !== output) {\n    for (let i = 0, ii = input.length; i < ii; ++i) {\n      output[i] = input[i];\n    }\n    input = output;\n  }\n  return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n  addProj(projection.getCode(), projection);\n  addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array<Projection>} projections Projections.\n */\nexport function addProjections(projections) {\n  projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n *     a combination of authority and identifier such as \"EPSG:4326\", or an\n *     existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n  if (!(typeof projectionLike === 'string')) {\n    return projectionLike;\n  }\n  const projection = getProj(projectionLike);\n  if (projection) {\n    return projection;\n  }\n  for (const makeProjection of projectionFactories) {\n    const projection = makeProjection(projectionLike);\n    if (projection) {\n      return projection;\n    }\n  }\n  return null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").Units} [units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, units) {\n  projection = get(projection);\n  let pointResolution;\n  const getter = projection.getPointResolutionFunc();\n  if (getter) {\n    pointResolution = getter(resolution, point);\n    if (units && units !== projection.getUnits()) {\n      const metersPerUnit = projection.getMetersPerUnit();\n      if (metersPerUnit) {\n        pointResolution =\n          (pointResolution * metersPerUnit) / METERS_PER_UNIT[units];\n      }\n    }\n  } else {\n    const projUnits = projection.getUnits();\n    if ((projUnits == 'degrees' && !units) || units == 'degrees') {\n      pointResolution = resolution;\n    } else {\n      // Estimate point resolution by transforming the center pixel to EPSG:4326,\n      // measuring its width and height on the normal sphere, and taking the\n      // average of the width and height.\n      const toEPSG4326 = getTransformFromProjections(\n        projection,\n        get('EPSG:4326'),\n      );\n      if (!toEPSG4326 && projUnits !== 'degrees') {\n        // no transform is available\n        pointResolution = resolution * projection.getMetersPerUnit();\n      } else {\n        let vertices = [\n          point[0] - resolution / 2,\n          point[1],\n          point[0] + resolution / 2,\n          point[1],\n          point[0],\n          point[1] - resolution / 2,\n          point[0],\n          point[1] + resolution / 2,\n        ];\n        vertices = toEPSG4326(vertices, vertices, 2);\n        const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n        const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n        pointResolution = (width + height) / 2;\n      }\n      const metersPerUnit = units\n        ? METERS_PER_UNIT[units]\n        : projection.getMetersPerUnit();\n      if (metersPerUnit !== undefined) {\n        pointResolution /= metersPerUnit;\n      }\n    }\n  }\n  return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array<Projection>} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n  addProjections(projections);\n  projections.forEach(function (source) {\n    projections.forEach(function (destination) {\n      if (source !== destination) {\n        addTransformFunc(source, destination, cloneTransform);\n      }\n    });\n  });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array<Projection>} projections1 Projections with equal\n *     meaning.\n * @param {Array<Projection>} projections2 Projections with equal\n *     meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n *   projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n *   in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n  projections1,\n  projections2,\n  forwardTransform,\n  inverseTransform,\n) {\n  projections1.forEach(function (projection1) {\n    projections2.forEach(function (projection2) {\n      addTransformFunc(projection1, projection2, forwardTransform);\n      addTransformFunc(projection2, projection1, inverseTransform);\n    });\n  });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n  clearProj();\n  clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n  if (!projection) {\n    return get(defaultCode);\n  }\n  if (typeof projection === 'string') {\n    return get(projection);\n  }\n  return /** @type {Projection} */ (projection);\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n *     transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n  return (\n    /**\n     * @param {Array<number>} input Input.\n     * @param {Array<number>} [output] Output.\n     * @param {number} [dimension] Dimensions that should be transformed.\n     * @param {number} [stride] Stride.\n     * @return {Array<number>} Output.\n     */\n    function (input, output, dimension, stride) {\n      const length = input.length;\n      dimension = dimension !== undefined ? dimension : 2;\n      stride = stride ?? dimension;\n      output = output !== undefined ? output : new Array(length);\n      for (let i = 0; i < length; i += stride) {\n        const point = coordTransform(input.slice(i, i + dimension));\n        const pointLength = point.length;\n        for (let j = 0, jj = stride; j < jj; ++j) {\n          output[i + j] = j >= pointLength ? input[i + j] : point[j];\n        }\n      }\n      return output;\n    }\n  );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n *     function (that is, from the source projection to the destination\n *     projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n *     the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n *     function (that is, from the destination projection to the source\n *     projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n *     the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n *     transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n *     with only the length it can transform. The other dimensions will be taken unchanged from the\n *     source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n  const sourceProj = get(source);\n  const destProj = get(destination);\n  addTransformFunc(\n    sourceProj,\n    destProj,\n    createTransformFromCoordinateTransform(forward),\n  );\n  addTransformFunc(\n    destProj,\n    sourceProj,\n    createTransformFromCoordinateTransform(inverse),\n  );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n *     an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [projection] Target projection. The\n *     default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, projection) {\n  disableCoordinateWarning();\n  return transform(\n    coordinate,\n    'EPSG:4326',\n    projection !== undefined ? projection : 'EPSG:3857',\n  );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [projection] Projection of the coordinate.\n *     The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n *     with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, projection) {\n  const lonLat = transform(\n    coordinate,\n    projection !== undefined ? projection : 'EPSG:3857',\n    'EPSG:4326',\n  );\n  const lon = lonLat[0];\n  if (lon < -180 || lon > 180) {\n    lonLat[0] = modulo(lon + 180, 360) - 180;\n  }\n  return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n  if (projection1 === projection2) {\n    return true;\n  }\n  const equalUnits = projection1.getUnits() === projection2.getUnits();\n  if (projection1.getCode() === projection2.getCode()) {\n    return equalUnits;\n  }\n  const transformFunc = getTransformFromProjections(projection1, projection2);\n  return transformFunc === cloneTransform && equalUnits;\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} source Source Projection object.\n * @param {Projection} destination Destination Projection\n *     object.\n * @return {TransformFunction|null} Transform function.\n */\nexport function getTransformFromProjections(source, destination) {\n  const sourceCode = source.getCode();\n  const destinationCode = destination.getCode();\n  let transformFunc = getTransformFunc(sourceCode, destinationCode);\n  if (transformFunc) {\n    return transformFunc;\n  }\n\n  /**\n   * @type {Transforms|null}\n   */\n  let sourceTransforms = null;\n\n  /**\n   * @type {Transforms|null}\n   */\n  let destinationTransforms = null;\n\n  // lazily add projections if we have supported transforms\n  for (const makeTransforms of transformFactories) {\n    if (!sourceTransforms) {\n      sourceTransforms = makeTransforms(source);\n    }\n    if (!destinationTransforms) {\n      destinationTransforms = makeTransforms(destination);\n    }\n  }\n\n  if (!sourceTransforms && !destinationTransforms) {\n    return null;\n  }\n\n  const intermediateCode = 'EPSG:4326';\n  if (!destinationTransforms) {\n    const toDestination = getTransformFunc(intermediateCode, destinationCode);\n    if (toDestination) {\n      transformFunc = composeTransformFuncs(\n        sourceTransforms.inverse,\n        toDestination,\n      );\n    }\n  } else if (!sourceTransforms) {\n    const fromSource = getTransformFunc(sourceCode, intermediateCode);\n    if (fromSource) {\n      transformFunc = composeTransformFuncs(\n        fromSource,\n        destinationTransforms.forward,\n      );\n    }\n  } else {\n    transformFunc = composeTransformFuncs(\n      sourceTransforms.inverse,\n      destinationTransforms.forward,\n    );\n  }\n\n  if (transformFunc) {\n    addProjection(source);\n    addProjection(destination);\n    addTransformFunc(source, destination, transformFunc);\n  }\n\n  return transformFunc;\n}\n\n/**\n * @param {TransformFunction} t1 The first transform function.\n * @param {TransformFunction} t2 The second transform function.\n * @return {TransformFunction} The composed transform function.\n */\nfunction composeTransformFuncs(t1, t2) {\n  return function (input, output, dimensions, stride) {\n    output = t1(input, output, dimensions, stride);\n    return t2(output, output, dimensions, stride);\n  };\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n  const sourceProjection = get(source);\n  const destinationProjection = get(destination);\n  return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original). If there\n * is no available transform between the two projection, the function will throw\n * an error.\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n  const transformFunc = getTransform(source, destination);\n  if (!transformFunc) {\n    const sourceCode = get(source).getCode();\n    const destinationCode = get(destination).getCode();\n    throw new Error(\n      `No transform available between ${sourceCode} and ${destinationCode}`,\n    );\n  }\n  return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection.  This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, stops) {\n  const transformFunc = getTransform(source, destination);\n  return applyTransform(extent, transformFunc, undefined, stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n  point,\n  sourceProjection,\n  destinationProjection,\n) {\n  const transformFunc = getTransformFromProjections(\n    sourceProjection,\n    destinationProjection,\n  );\n  return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n  userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n  userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n  return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @api\n */\nexport function useGeographic() {\n  setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection.  If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array<number>} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n  if (!userProjection) {\n    return coordinate;\n  }\n  return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection.  If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array<number>} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n  if (!userProjection) {\n    if (\n      showCoordinateWarning &&\n      !equals(coordinate, [0, 0]) &&\n      coordinate[0] >= -180 &&\n      coordinate[0] <= 180 &&\n      coordinate[1] >= -90 &&\n      coordinate[1] <= 90\n    ) {\n      showCoordinateWarning = false;\n      warn(\n        'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.',\n      );\n    }\n    return coordinate;\n  }\n  return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection.  If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n  if (!userProjection) {\n    return extent;\n  }\n  return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection.  If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n  if (!userProjection) {\n    return extent;\n  }\n  return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n  if (!userProjection) {\n    return resolution;\n  }\n  const sourceMetersPerUnit = get(sourceProjection).getMetersPerUnit();\n  const userMetersPerUnit = userProjection.getMetersPerUnit();\n  return sourceMetersPerUnit && userMetersPerUnit\n    ? (resolution * sourceMetersPerUnit) / userMetersPerUnit\n    : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n  if (!userProjection) {\n    return resolution;\n  }\n  const destMetersPerUnit = get(destProjection).getMetersPerUnit();\n  const userMetersPerUnit = userProjection.getMetersPerUnit();\n  return destMetersPerUnit && userMetersPerUnit\n    ? (resolution * userMetersPerUnit) / destMetersPerUnit\n    : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destination).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destination).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n  return function (coord) {\n    let transformed, worldsAway;\n    if (sourceProj.canWrapX()) {\n      const sourceExtent = sourceProj.getExtent();\n      const sourceExtentWidth = getWidth(sourceExtent);\n      coord = coord.slice(0);\n      worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n      if (worldsAway) {\n        // Move x to the real world\n        coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n      }\n      coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n      coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n      transformed = transform(coord);\n    } else {\n      transformed = transform(coord);\n    }\n    if (worldsAway && destProj.canWrapX()) {\n      // Move transformed coordinate back to the offset world\n      transformed[0] += worldsAway * getWidth(destProj.getExtent());\n    }\n    return transformed;\n  };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857.  This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n  // Add transformations that don't alter coordinates to convert within set of\n  // projections with equal meaning.\n  addEquivalentProjections(EPSG3857_PROJECTIONS);\n  addEquivalentProjections(EPSG4326_PROJECTIONS);\n  // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n  // coordinates and back.\n  addEquivalentTransforms(\n    EPSG4326_PROJECTIONS,\n    EPSG3857_PROJECTIONS,\n    fromEPSG4326,\n    toEPSG4326,\n  );\n}\n\naddCommon();\n","/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * The function is called with a `number` view resolution and a\n * {@link module:ol/coordinate~Coordinate} as arguments, and returns the `number` resolution\n * in projection units at the passed coordinate.\n * @typedef {function(number, import(\"../coordinate.js\").Coordinate):number} GetPointResolution\n * @api\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").Units} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {GetPointResolution} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution} function will be used.\n */\n\n/**\n * @classdesc\n * In most cases, you should not need to create instances of this class.\n * Instead, where projection information is required, you can use a string\n * projection code or identifier (e.g. `EPSG:4326`) instead of a projection\n * instance.\n *\n * The library includes support for transforming coordinates between the following\n * projections:\n *\n *  WGS 84 / Geographic - Using codes `EPSG:4326`, `CRS:84`, `urn:ogc:def:crs:EPSG:6.6:4326`,\n *    `urn:ogc:def:crs:OGC:1.3:CRS84`, `urn:ogc:def:crs:OGC:2:84`, `http://www.opengis.net/gml/srs/epsg.xml#4326`,\n *    or `urn:x-ogc:def:crs:EPSG:4326`\n *  WGS 84 / Spherical Mercator - Using codes `EPSG:3857`, `EPSG:102100`, `EPSG:102113`, `EPSG:900913`,\n *    `urn:ogc:def:crs:EPSG:6.18:3:3857`, or `http://www.opengis.net/gml/srs/epsg.xml#3857`\n *  WGS 84 / UTM zones - Using codes `EPSG:32601` through `EPSG:32660` for northern zones\n *    and `EPSG:32701` through `EPSG:32760` for southern zones. Note that the built-in UTM transforms\n *    are lower accuracy (with errors on the order of 0.1 m) than those that you might get in a\n *    library like [proj4js](https://github.com/proj4js/proj4js).\n *\n * For additional projection support, or to use higher accuracy transforms than the built-in ones, you can use\n * the [proj4js](https://github.com/proj4js/proj4js) library. With `proj4js`, after adding any new projection\n * definitions, call the {@link module:ol/proj/proj4.register} function.\n *\n * You can use the {@link module:ol/proj.get} function to retrieve a projection instance\n * for one of the registered projections.\n *\n * @api\n */\nclass Projection {\n  /**\n   * @param {Options} options Projection options.\n   */\n  constructor(options) {\n    /**\n     * @private\n     * @type {string}\n     */\n    this.code_ = options.code;\n\n    /**\n     * Units of projected coordinates. When set to `TILE_PIXELS`, a\n     * `this.extent_` and `this.worldExtent_` must be configured properly for each\n     * tile.\n     * @private\n     * @type {import(\"./Units.js\").Units}\n     */\n    this.units_ = /** @type {import(\"./Units.js\").Units} */ (options.units);\n\n    /**\n     * Validity extent of the projection in projected coordinates. For projections\n     * with `TILE_PIXELS` units, this is the extent of the tile in\n     * tile pixel space.\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.extent_ = options.extent !== undefined ? options.extent : null;\n\n    /**\n     * Extent of the world in EPSG:4326. For projections with\n     * `TILE_PIXELS` units, this is the extent of the tile in\n     * projected coordinate space.\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.worldExtent_ =\n      options.worldExtent !== undefined ? options.worldExtent : null;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.axisOrientation_ =\n      options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.global_ = options.global !== undefined ? options.global : false;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.canWrapX_ = !!(this.global_ && this.extent_);\n\n    /**\n     * @private\n     * @type {GetPointResolution|undefined}\n     */\n    this.getPointResolutionFunc_ = options.getPointResolution;\n\n    /**\n     * @private\n     * @type {import(\"../tilegrid/TileGrid.js\").default}\n     */\n    this.defaultTileGrid_ = null;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.metersPerUnit_ = options.metersPerUnit;\n  }\n\n  /**\n   * @return {boolean} The projection is suitable for wrapping the x-axis\n   */\n  canWrapX() {\n    return this.canWrapX_;\n  }\n\n  /**\n   * Get the code for this projection, e.g. 'EPSG:4326'.\n   * @return {string} Code.\n   * @api\n   */\n  getCode() {\n    return this.code_;\n  }\n\n  /**\n   * Get the validity extent for this projection.\n   * @return {import(\"../extent.js\").Extent} Extent.\n   * @api\n   */\n  getExtent() {\n    return this.extent_;\n  }\n\n  /**\n   * Get the units of this projection.\n   * @return {import(\"./Units.js\").Units} Units.\n   * @api\n   */\n  getUnits() {\n    return this.units_;\n  }\n\n  /**\n   * Get the amount of meters per unit of this projection.  If the projection is\n   * not configured with `metersPerUnit` or a units identifier, the return is\n   * `undefined`.\n   * @return {number|undefined} Meters.\n   * @api\n   */\n  getMetersPerUnit() {\n    return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n  }\n\n  /**\n   * Get the world extent for this projection.\n   * @return {import(\"../extent.js\").Extent} Extent.\n   * @api\n   */\n  getWorldExtent() {\n    return this.worldExtent_;\n  }\n\n  /**\n   * Get the axis orientation of this projection.\n   * Example values are:\n   * enu - the default easting, northing, elevation.\n   * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n   *     or south orientated transverse mercator.\n   * wnu - westing, northing, up - some planetary coordinate systems have\n   *     \"west positive\" coordinate systems\n   * @return {string} Axis orientation.\n   * @api\n   */\n  getAxisOrientation() {\n    return this.axisOrientation_;\n  }\n\n  /**\n   * Is this projection a global projection which spans the whole world?\n   * @return {boolean} Whether the projection is global.\n   * @api\n   */\n  isGlobal() {\n    return this.global_;\n  }\n\n  /**\n   * Set if the projection is a global projection which spans the whole world\n   * @param {boolean} global Whether the projection is global.\n   * @api\n   */\n  setGlobal(global) {\n    this.global_ = global;\n    this.canWrapX_ = !!(global && this.extent_);\n  }\n\n  /**\n   * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n   */\n  getDefaultTileGrid() {\n    return this.defaultTileGrid_;\n  }\n\n  /**\n   * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n   */\n  setDefaultTileGrid(tileGrid) {\n    this.defaultTileGrid_ = tileGrid;\n  }\n\n  /**\n   * Set the validity extent for this projection.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @api\n   */\n  setExtent(extent) {\n    this.extent_ = extent;\n    this.canWrapX_ = !!(this.global_ && extent);\n  }\n\n  /**\n   * Set the world extent for this projection.\n   * @param {import(\"../extent.js\").Extent} worldExtent World extent\n   *     [minlon, minlat, maxlon, maxlat].\n   * @api\n   */\n  setWorldExtent(worldExtent) {\n    this.worldExtent_ = worldExtent;\n  }\n\n  /**\n   * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n   * for this projection.\n   * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n   * @api\n   */\n  setGetPointResolution(func) {\n    this.getPointResolutionFunc_ = func;\n  }\n\n  /**\n   * Get the custom point resolution function for this projection (if set).\n   * @return {GetPointResolution|undefined} The custom point\n   * resolution function (if set).\n   */\n  getPointResolutionFunc() {\n    return this.getPointResolutionFunc_;\n  }\n}\n\nexport default Projection;\n","/**\n * @module ol/proj/Units\n */\n\n/**\n * @typedef {'radians' | 'degrees' | 'ft' | 'm' | 'pixels' | 'tile-pixels' | 'us-ft'} Units\n * Projection units.\n */\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object<number, Units>}\n */\nconst unitByCode = {\n  '9001': 'm',\n  '9002': 'ft',\n  '9003': 'us-ft',\n  '9101': 'radians',\n  '9102': 'degrees',\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n  return unitByCode[code];\n}\n\n/**\n * @typedef {Object} MetersPerUnitLookup\n * @property {number} radians Radians\n * @property {number} degrees Degrees\n * @property {number} ft  Feet\n * @property {number} m Meters\n * @property {number} us-ft US feet\n */\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {MetersPerUnitLookup}\n * @api\n */\nexport const METERS_PER_UNIT = {\n  // use the radius of the Normal sphere\n  'radians': 6370997 / (2 * Math.PI),\n  'degrees': (2 * Math.PI * 6370997) / 360,\n  'ft': 0.3048,\n  'm': 1,\n  'us-ft': 1200 / 3937,\n};\n","/**\n * @module ol/proj/proj4\n */\nimport {\n  addCoordinateTransforms,\n  addEquivalentProjections,\n  addProjection,\n  createSafeCoordinateTransform,\n} from '../proj.js';\nimport Projection from './Projection.js';\nimport {get as getCachedProjection} from './projections.js';\nimport {get as getTransform} from './transforms.js';\n\n/**\n * @type {import(\"proj4\")|null}\n */\nlet registered = null;\n\n/**\n * @return {boolean} Proj4 has been registered.\n */\nexport function isRegistered() {\n  return !!registered;\n}\n\n/**\n * Unsets the shared proj4 previously set with register.\n */\nexport function unregister() {\n  registered = null;\n}\n\n/**\n * Make projections defined in proj4 (with `proj4.defs()`) available in\n * OpenLayers. Requires proj4 >= 2.8.0.\n *\n * This function should be called whenever changes are made to the proj4\n * registry, e.g. after calling `proj4.defs()`. Existing transforms will not be\n * modified by this function.\n *\n * @param {import(\"proj4\")} proj4 Proj4.\n * @api\n */\nexport function register(proj4) {\n  registered = proj4;\n\n  const projCodes = Object.keys(proj4.defs);\n  const len = projCodes.length;\n  let i, j;\n  for (i = 0; i < len; ++i) {\n    const code = projCodes[i];\n    if (!getCachedProjection(code)) {\n      const def = proj4.defs(code);\n      let units = /** @type {import(\"./Units.js\").Units} */ (def.units);\n      if (!units && def.projName === 'longlat') {\n        units = 'degrees';\n      }\n      addProjection(\n        new Projection({\n          code: code,\n          axisOrientation: def.axis,\n          metersPerUnit: def.to_meter,\n          units,\n        }),\n      );\n    }\n  }\n  for (i = 0; i < len; ++i) {\n    const code1 = projCodes[i];\n    const proj1 = getCachedProjection(code1);\n    for (j = 0; j < len; ++j) {\n      const code2 = projCodes[j];\n      const proj2 = getCachedProjection(code2);\n      if (!getTransform(code1, code2)) {\n        if (proj4.defs[code1] === proj4.defs[code2]) {\n          addEquivalentProjections([proj1, proj2]);\n        } else {\n          const transform = proj4(code1, code2);\n          addCoordinateTransforms(\n            proj1,\n            proj2,\n            createSafeCoordinateTransform(proj1, proj2, transform.forward),\n            createSafeCoordinateTransform(proj2, proj1, transform.inverse),\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * @param {string} code The projection code.\n * @return {Promise<string>} The WKT definition.\n */\nlet projLookup = async function (code) {\n  if (typeof code !== 'string' || !code.includes(':')) {\n    throw new Error('Invalid code');\n  }\n  const [authority, num] = code.toLowerCase().split(':', 2);\n  const response = await fetch(\n    `https://spatialreference.org/ref/${authority}/${num}/ogcwkt/`,\n  );\n  if (!response.ok) {\n    throw new Error(\n      `Unexpected response from spatialreference.org: ${response.status}`,\n    );\n  }\n  return response.text();\n};\n\n/**\n * Set the lookup function for getting proj4 or WKT definitions given an\n * projection code. By default, the {@link module:ol/proj/proj4.fromProjectionCode}\n * function uses the spatialreference.org website for WKT definitions.\n * This can be changed by providing a different lookup function.\n *\n * @param {function(string):Promise<string>} func The lookup function.\n * @api\n */\nexport function setProjectionCodeLookup(func) {\n  projLookup = func;\n}\n\n/**\n * Get the current projection code lookup function.\n *\n * @return {function(string):Promise<string>} The projection lookup function.\n */\nexport function getProjectionCodeLookup() {\n  return projLookup;\n}\n\n/**\n * Get a projection from a projection code (i.e., authority:number).\n * This function fetches the projection definition from the\n * https://spatialreference.org website, registers this definition for use with\n * proj4, and returns a configured projection.  You must call import proj4 and\n * call {@link module:ol/proj/proj4.register} before using this function.\n *\n * If the projection definition is already registered with proj4, it will not\n * be fetched again (so it is ok to call this function multiple times with the\n * same code).\n *\n * @param {string} code The projection code (e.g., 'EPSG:4326' or 'OGC:CRS84').\n * @return {Promise<Projection>} The projection.\n * @api\n */\nexport async function fromProjectionCode(code) {\n  const proj4 = registered;\n  if (!proj4) {\n    throw new Error('Proj4 must be registered first with register(proj4)');\n  }\n\n  if (proj4.defs(code)) {\n    return getCachedProjection(code);\n  }\n\n  proj4.defs(code, await projLookup(code));\n  register(proj4);\n\n  return getCachedProjection(code);\n}\n\n/**\n * @param {*} def Projection definition.\n * @return {Projection} The projection.\n */\nexport function fromProjectionDefinition(def) {\n  const proj4 = registered;\n  if (!proj4) {\n    throw new Error('Proj4 must be registered first with register(proj4)');\n  }\n  // Fallback code is the whole def...\n  let code = JSON.stringify(def);\n  proj4.defs(code, def);\n  const proj4Def = proj4.defs(code);\n  if (proj4Def.title) {\n    // ...but use authority:code if available\n    proj4.defs(code, null);\n    code = proj4Def.title;\n    const projection = getCachedProjection(code);\n    if (projection) {\n      return projection;\n    }\n    proj4.defs(code, def);\n  }\n  register(proj4);\n  return getCachedProjection(code);\n}\n\n/**\n * @param {number} code The EPSG code.\n * @return {Promise<string>} The proj4 or WKT definition.\n * @deprecated Use {@link module:ol/proj/proj4.projLookup} instead.\n */\nlet epsgLookup = async function (code) {\n  return await projLookup('EPSG:' + code);\n};\n\n/**\n * Set the lookup function for getting proj4 or WKT definitions given an EPSG code.\n * By default, the {@link module:ol/proj/proj4.fromEPSGCode} function uses the\n * spatialreference.org website for WKT definitions.\n * This can be changed by providing a different lookup function.\n *\n * @param {function(number):Promise<string>} func The lookup function.\n * @api\n * @deprecated Use {@link module:ol/proj/proj4.setProjectionCodeLookup} instead.\n */\nexport function setEPSGLookup(func) {\n  epsgLookup = func;\n}\n\n/**\n * Get the current EPSG lookup function.\n *\n * @return {function(number):Promise<string>} The EPSG lookup function.\n * @deprecated Use {@link module:ol/proj/proj4.getProjectionCodeLookup} instead.\n */\nexport function getEPSGLookup() {\n  return epsgLookup;\n}\n\n/**\n * Get a projection from an EPSG code.  This function fetches the projection\n * definition from the spatialreference.org website, registers this definition\n * for use with proj4, and returns a configured projection.  You must call\n * import proj4 and call {@link module:ol/proj/proj4.register} before using this\n * function.\n *\n * If the projection definition is already registered with proj4, it will not\n * be fetched again (so it is ok to call this function multiple times with the\n * same code).\n *\n * @param {number|string} code The EPSG code (e.g. 4326 or 'EPSG:4326').\n * @return {Promise<Projection>} The projection.\n * @api\n * @deprecated Use {@link module:ol/proj/proj4.fromProjectionCode} instead.\n */\nexport async function fromEPSGCode(code) {\n  if (typeof code === 'number') {\n    code = 'EPSG:' + code;\n  }\n  return await fromProjectionCode(code);\n}\n\n/**\n * Generate an EPSG lookup function which uses the MapTiler Coordinates API to find projection\n * definitions which do not require proj4 to be configured to handle `+nadgrids` parameters.\n * Call {@link module:ol/proj/proj4.setEPSGLookup} use the function for lookups\n * `setEPSGLookup(epsgLookupMapTiler('{YOUR_MAPTILER_API_KEY_HERE}'))`.\n *\n * @param {string} key MapTiler API key.  Get your own API key at https://www.maptiler.com/cloud/.\n * @return {function(number):Promise<string>} The EPSG lookup function.\n * @api\n * @deprecated Not needed any more, the default lookup provides this functionality now.\n */\nexport function epsgLookupMapTiler(key) {\n  return async function (code) {\n    const response = await fetch(\n      `https://api.maptiler.com/coordinates/search/code:${code}.json?transformations=true&exports=true&key=${key}`,\n    );\n    if (!response.ok) {\n      throw new Error(\n        `Unexpected response from maptiler.com: ${response.status}`,\n      );\n    }\n    return response.json().then((json) => {\n      const results = json['results'];\n      if (results?.length > 0) {\n        const result = results.filter(\n          (r) =>\n            r['id']?.['authority'] === 'EPSG' && r['id']?.['code'] === code,\n        )[0];\n        if (result) {\n          const transforms = result['transformations'];\n          if (transforms?.length > 0) {\n            // use default transform if it does not require grids\n            const defaultTransform = result['default_transformation'];\n            if (\n              transforms.filter(\n                (t) =>\n                  t['id']?.['authority'] === defaultTransform?.['authority'] &&\n                  t['id']?.['code'] === defaultTransform?.['code'] &&\n                  t['grids']?.length === 0,\n              ).length > 0\n            ) {\n              return result['exports']?.['proj4'];\n            }\n            // otherwise use most accurate alternative without grids\n            const transform = transforms\n              .filter(\n                (t) =>\n                  t['grids']?.length === 0 &&\n                  t['target_crs']?.['authority'] === 'EPSG' &&\n                  t['target_crs']?.['code'] === 4326 &&\n                  t['deprecated'] === false &&\n                  t['usable'] === true,\n              )\n              .sort((t1, t2) => t1['accuracy'] - t2['accuracy'])[0]?.[\n              'exports'\n            ]?.['proj4'];\n            if (transform) {\n              return transform;\n            }\n          }\n          // fallback to default\n          return result['exports']?.['proj4'];\n        }\n      }\n    });\n  };\n}\n","/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object<string, import(\"./Projection.js\").default>}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n  cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default|null} The projection (if cached).\n */\nexport function get(code) {\n  return (\n    cache[code] ||\n    cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n    null\n  );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n  cache[code] = projection;\n}\n","/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object<string, Object<string, import(\"../proj.js\").TransformFunction>>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n  transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n  const sourceCode = source.getCode();\n  const destinationCode = destination.getCode();\n  if (!(sourceCode in transforms)) {\n    transforms[sourceCode] = {};\n  }\n  transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection.  This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n  const sourceCode = source.getCode();\n  const destinationCode = destination.getCode();\n  const transform = transforms[sourceCode][destinationCode];\n  delete transforms[sourceCode][destinationCode];\n  if (isEmpty(transforms[sourceCode])) {\n    delete transforms[sourceCode];\n  }\n  return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|null} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n  if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n    return transforms[sourceCode][destinationCode];\n  }\n  return null;\n}\n","/**\n * @module ol/render\n */\nimport {DEVICE_PIXEL_RATIO} from './has.js';\nimport {getTransformFromProjections, getUserProjection} from './proj.js';\nimport CanvasImmediateRenderer from './render/canvas/Immediate.js';\nimport {getSquaredTolerance} from './renderer/vector.js';\nimport {\n  apply as applyTransform,\n  create as createTransform,\n  multiply as multiplyTransform,\n  scale as scaleTransform,\n} from './transform.js';\n\n/**\n * @typedef {Object} State\n * @property {CanvasRenderingContext2D} context Canvas context that the layer is being rendered to.\n * @property {import(\"./Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"./geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} pixelRatio Pixel ratio used by the layer renderer.\n * @property {number} resolution Resolution that the render batch was created and optimized for.\n * This is not the view's resolution that is being rendered.\n * @property {number} rotation Rotation of the rendered layer in radians.\n */\n\n/**\n * A function to be used when sorting features before rendering.\n * It takes two instances of {@link module:ol/Feature~Feature} or\n * {@link module:ol/render/Feature~RenderFeature} and returns a `{number}`.\n *\n * @typedef {function(import(\"./Feature.js\").FeatureLike, import(\"./Feature.js\").FeatureLike):number} OrderFunction\n */\n\n/**\n * @typedef {Object} ToContextOptions\n * @property {import(\"./size.js\").Size} [size] Desired size of the canvas in css\n * pixels. When provided, both canvas and css size will be set according to the\n * `pixelRatio`. If not provided, the current canvas and css sizes will not be\n * altered.\n * @property {number} [pixelRatio=window.devicePixelRatio] Pixel ratio (canvas\n * pixel to css pixel ratio) for the canvas.\n */\n\n/**\n * Binds a Canvas Immediate API to a canvas context, to allow drawing geometries\n * to the context's canvas.\n *\n * The units for geometry coordinates are css pixels relative to the top left\n * corner of the canvas element.\n * ```js\n * import {toContext} from 'ol/render.js';\n * import Fill from 'ol/style/Fill.js';\n * import Polygon from 'ol/geom/Polygon.js';\n *\n * const canvas = document.createElement('canvas');\n * const render = toContext(\n *     canvas.getContext('2d'),\n *     {size: [100, 100]}\n * );\n * render.setFillStrokeStyle(new Fill({ color: blue }));\n * render.drawPolygon(\n *     new Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]])\n * );\n * ```\n *\n * @param {CanvasRenderingContext2D} context Canvas context.\n * @param {ToContextOptions} [options] Options.\n * @return {CanvasImmediateRenderer} Canvas Immediate.\n * @api\n */\nexport function toContext(context, options) {\n  const canvas = context.canvas;\n  options = options ? options : {};\n  const pixelRatio = options.pixelRatio || DEVICE_PIXEL_RATIO;\n  const size = options.size;\n  if (size) {\n    canvas.width = size[0] * pixelRatio;\n    canvas.height = size[1] * pixelRatio;\n    canvas.style.width = size[0] + 'px';\n    canvas.style.height = size[1] + 'px';\n  }\n  const extent = [0, 0, canvas.width, canvas.height];\n  const transform = scaleTransform(createTransform(), pixelRatio, pixelRatio);\n  const squaredTolerance = getSquaredTolerance(1, pixelRatio);\n  return new CanvasImmediateRenderer(\n    context,\n    pixelRatio,\n    extent,\n    transform,\n    0,\n    squaredTolerance,\n  );\n}\n\n/**\n * Gets a vector context for drawing to the event's canvas.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @return {CanvasImmediateRenderer} Vector context.\n * @api\n */\nexport function getVectorContext(event) {\n  if (!(event.context instanceof CanvasRenderingContext2D)) {\n    throw new Error('Only works for render events from Canvas 2D layers');\n  }\n\n  // canvas may be at a different pixel ratio than frameState.pixelRatio\n  const a = event.inversePixelTransform[0];\n  const b = event.inversePixelTransform[1];\n  const canvasPixelRatio = Math.sqrt(a * a + b * b);\n  const frameState = event.frameState;\n  const transform = multiplyTransform(\n    event.inversePixelTransform.slice(),\n    frameState.coordinateToPixelTransform,\n  );\n  const squaredTolerance = getSquaredTolerance(\n    frameState.viewState.resolution,\n    canvasPixelRatio,\n  );\n  let userTransform;\n  const userProjection = getUserProjection();\n  if (userProjection) {\n    userTransform = getTransformFromProjections(\n      userProjection,\n      frameState.viewState.projection,\n    );\n  }\n\n  return new CanvasImmediateRenderer(\n    event.context,\n    canvasPixelRatio,\n    frameState.extent,\n    transform,\n    frameState.viewState.rotation,\n    squaredTolerance,\n    userTransform,\n  );\n}\n\n/**\n * Gets the pixel of the event's canvas context from the map viewport's CSS pixel.\n * @param {import(\"./render/Event.js\").default} event Render event.\n * @param {import(\"./pixel.js\").Pixel} pixel CSS pixel relative to the top-left\n * corner of the map viewport.\n * @return {import(\"./pixel.js\").Pixel} Pixel on the event's canvas context.\n * @api\n */\nexport function getRenderPixel(event, pixel) {\n  return applyTransform(event.inversePixelTransform, pixel.slice(0));\n}\n","/**\n * @module ol/render/Event\n */\n\nimport Event from '../events/Event.js';\n\nclass RenderEvent extends Event {\n  /**\n   * @param {import(\"./EventType.js\").default} type Type.\n   * @param {import(\"../transform.js\").Transform} [inversePixelTransform] Transform for\n   *     CSS pixels to rendered pixels.\n   * @param {import(\"../Map.js\").FrameState} [frameState] Frame state.\n   * @param {?(CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D|WebGLRenderingContext)} [context] Context.\n   */\n  constructor(type, inversePixelTransform, frameState, context) {\n    super(type);\n\n    /**\n     * Transform from CSS pixels (relative to the top-left corner of the map viewport)\n     * to rendered pixels on this event's `context`. Only available when a Canvas renderer is used, null otherwise.\n     * @type {import(\"../transform.js\").Transform|undefined}\n     * @api\n     */\n    this.inversePixelTransform = inversePixelTransform;\n\n    /**\n     * An object representing the current render frame state.\n     * @type {import(\"../Map.js\").FrameState|undefined}\n     * @api\n     */\n    this.frameState = frameState;\n\n    /**\n     * Canvas context. Not available when the event is dispatched by the map. For Canvas 2D layers,\n     * the context will be the 2D rendering context.  For WebGL layers, the context will be the WebGL\n     * context.\n     * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D|WebGLRenderingContext|undefined}\n     * @api\n     */\n    this.context = context;\n  }\n}\n\nexport default RenderEvent;\n","/**\n * @module ol/render/EventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  /**\n   * Triggered before a layer is rendered.\n   * @event module:ol/render/Event~RenderEvent#prerender\n   * @api\n   */\n  PRERENDER: 'prerender',\n\n  /**\n   * Triggered after a layer is rendered.\n   * @event module:ol/render/Event~RenderEvent#postrender\n   * @api\n   */\n  POSTRENDER: 'postrender',\n\n  /**\n   * Triggered before layers are composed.  When dispatched by the map, the event object will not have\n   * a `context` set.  When dispatched by a layer, the event object will have a `context` set.  Only\n   * WebGL layers currently dispatch this event.\n   * @event module:ol/render/Event~RenderEvent#precompose\n   * @api\n   */\n  PRECOMPOSE: 'precompose',\n\n  /**\n   * Triggered after layers are composed.  When dispatched by the map, the event object will not have\n   * a `context` set.  When dispatched by a layer, the event object will have a `context` set.  Only\n   * WebGL layers currently dispatch this event.\n   * @event module:ol/render/Event~RenderEvent#postcompose\n   * @api\n   */\n  POSTCOMPOSE: 'postcompose',\n\n  /**\n   * Triggered when rendering is complete, i.e. all sources and tiles have\n   * finished loading for the current viewport, and all tiles are faded in.\n   * The event object will not have a `context` set.\n   * @event module:ol/render/Event~RenderEvent#rendercomplete\n   * @api\n   */\n  RENDERCOMPLETE: 'rendercomplete',\n};\n\n/**\n * @typedef {'postrender'|'precompose'|'postcompose'|'rendercomplete'} MapRenderEventTypes\n */\n\n/**\n * @typedef {'postrender'|'prerender'} LayerRenderEventTypes\n */\n","/**\n * @module ol/render/Feature\n */\nimport Feature from '../Feature.js';\nimport {extend} from '../array.js';\nimport {\n  createOrUpdateFromCoordinate,\n  createOrUpdateFromFlatCoordinates,\n  getCenter,\n  getHeight,\n} from '../extent.js';\nimport {memoizeOne} from '../functions.js';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {linearRingss as linearRingssCenter} from '../geom/flat/center.js';\nimport {\n  getInteriorPointOfArray,\n  getInteriorPointsOfMultiArray,\n} from '../geom/flat/interiorpoint.js';\nimport {interpolatePoint} from '../geom/flat/interpolate.js';\nimport {inflateEnds} from '../geom/flat/orient.js';\nimport {\n  douglasPeucker,\n  douglasPeuckerArray,\n  quantizeArray,\n} from '../geom/flat/simplify.js';\nimport {transform2D} from '../geom/flat/transform.js';\nimport {get as getProjection} from '../proj.js';\nimport {\n  compose as composeTransform,\n  create as createTransform,\n} from '../transform.js';\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString'} Type\n * The geometry type.  One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'` or 'MultiLineString'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * Lightweight, read-only, {@link module:ol/Feature~Feature} and {@link module:ol/geom/Geometry~Geometry} like\n * structure, optimized for vector tile rendering and styling. Geometry access\n * through the API is limited to getting the type and extent of the geometry.\n */\nclass RenderFeature {\n  /**\n   * @param {Type} type Geometry type.\n   * @param {Array<number>} flatCoordinates Flat coordinates. These always need\n   *     to be right-handed for polygons.\n   * @param {Array<number>} ends Ends.\n   * @param {number} stride Stride.\n   * @param {Object<string, *>} properties Properties.\n   * @param {number|string|undefined} id Feature id.\n   */\n  constructor(type, flatCoordinates, ends, stride, properties, id) {\n    /**\n     * @type {import(\"../style/Style.js\").StyleFunction|undefined}\n     */\n    this.styleFunction;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent|undefined}\n     */\n    this.extent_;\n\n    /**\n     * @private\n     * @type {number|string|undefined}\n     */\n    this.id_ = id;\n\n    /**\n     * @private\n     * @type {Type}\n     */\n    this.type_ = type;\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.flatCoordinates_ = flatCoordinates;\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.flatInteriorPoints_ = null;\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.flatMidpoints_ = null;\n\n    /**\n     * @private\n     * @type {Array<number>|null}\n     */\n    this.ends_ = ends || null;\n\n    /**\n     * @private\n     * @type {Object<string, *>}\n     */\n    this.properties_ = properties;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.squaredTolerance_;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.stride_ = stride;\n\n    /**\n     * @private\n     * @type {RenderFeature}\n     */\n    this.simplifiedGeometry_;\n  }\n\n  /**\n   * Get a feature property by its key.\n   * @param {string} key Key\n   * @return {*} Value for the requested key.\n   * @api\n   */\n  get(key) {\n    return this.properties_[key];\n  }\n\n  /**\n   * Get the extent of this feature's geometry.\n   * @return {import(\"../extent.js\").Extent} Extent.\n   * @api\n   */\n  getExtent() {\n    if (!this.extent_) {\n      this.extent_ =\n        this.type_ === 'Point'\n          ? createOrUpdateFromCoordinate(this.flatCoordinates_)\n          : createOrUpdateFromFlatCoordinates(\n              this.flatCoordinates_,\n              0,\n              this.flatCoordinates_.length,\n              this.stride_,\n            );\n    }\n    return this.extent_;\n  }\n\n  /**\n   * @return {Array<number>} Flat interior points.\n   */\n  getFlatInteriorPoint() {\n    if (!this.flatInteriorPoints_) {\n      const flatCenter = getCenter(this.getExtent());\n      this.flatInteriorPoints_ = getInteriorPointOfArray(\n        this.flatCoordinates_,\n        0,\n        this.ends_,\n        this.stride_,\n        flatCenter,\n        0,\n      );\n    }\n    return this.flatInteriorPoints_;\n  }\n\n  /**\n   * @return {Array<number>} Flat interior points.\n   */\n  getFlatInteriorPoints() {\n    if (!this.flatInteriorPoints_) {\n      const ends = inflateEnds(this.flatCoordinates_, this.ends_);\n      const flatCenters = linearRingssCenter(\n        this.flatCoordinates_,\n        0,\n        ends,\n        this.stride_,\n      );\n      this.flatInteriorPoints_ = getInteriorPointsOfMultiArray(\n        this.flatCoordinates_,\n        0,\n        ends,\n        this.stride_,\n        flatCenters,\n      );\n    }\n    return this.flatInteriorPoints_;\n  }\n\n  /**\n   * @return {Array<number>} Flat midpoint.\n   */\n  getFlatMidpoint() {\n    if (!this.flatMidpoints_) {\n      this.flatMidpoints_ = interpolatePoint(\n        this.flatCoordinates_,\n        0,\n        this.flatCoordinates_.length,\n        this.stride_,\n        0.5,\n      );\n    }\n    return this.flatMidpoints_;\n  }\n\n  /**\n   * @return {Array<number>} Flat midpoints.\n   */\n  getFlatMidpoints() {\n    if (!this.flatMidpoints_) {\n      this.flatMidpoints_ = [];\n      const flatCoordinates = this.flatCoordinates_;\n      let offset = 0;\n      const ends = /** @type {Array<number>} */ (this.ends_);\n      for (let i = 0, ii = ends.length; i < ii; ++i) {\n        const end = ends[i];\n        const midpoint = interpolatePoint(\n          flatCoordinates,\n          offset,\n          end,\n          this.stride_,\n          0.5,\n        );\n        extend(this.flatMidpoints_, midpoint);\n        offset = end;\n      }\n    }\n    return this.flatMidpoints_;\n  }\n\n  /**\n   * Get the feature identifier.  This is a stable identifier for the feature and\n   * is set when reading data from a remote source.\n   * @return {number|string|undefined} Id.\n   * @api\n   */\n  getId() {\n    return this.id_;\n  }\n\n  /**\n   * @return {Array<number>} Flat coordinates.\n   */\n  getOrientedFlatCoordinates() {\n    return this.flatCoordinates_;\n  }\n\n  /**\n   * For API compatibility with {@link module:ol/Feature~Feature}, this method is useful when\n   * determining the geometry type in style function (see {@link #getType}).\n   * @return {RenderFeature} Feature.\n   * @api\n   */\n  getGeometry() {\n    return this;\n  }\n\n  /**\n   * @param {number} squaredTolerance Squared tolerance.\n   * @return {RenderFeature} Simplified geometry.\n   */\n  getSimplifiedGeometry(squaredTolerance) {\n    return this;\n  }\n\n  /**\n   * Get a transformed and simplified version of the geometry.\n   * @param {number} squaredTolerance Squared tolerance.\n   * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n   * @return {RenderFeature} Simplified geometry.\n   */\n  simplifyTransformed(squaredTolerance, transform) {\n    return this;\n  }\n\n  /**\n   * Get the feature properties.\n   * @return {Object<string, *>} Feature properties.\n   * @api\n   */\n  getProperties() {\n    return this.properties_;\n  }\n\n  /**\n   * Get an object of all property names and values.  This has the same behavior as getProperties,\n   * but is here to conform with the {@link module:ol/Feature~Feature} interface.\n   * @return {Object<string, *>?} Object.\n   */\n  getPropertiesInternal() {\n    return this.properties_;\n  }\n\n  /**\n   * @return {number} Stride.\n   */\n  getStride() {\n    return this.stride_;\n  }\n\n  /**\n   * @return {import('../style/Style.js').StyleFunction|undefined} Style\n   */\n  getStyleFunction() {\n    return this.styleFunction;\n  }\n\n  /**\n   * Get the type of this feature's geometry.\n   * @return {Type} Geometry type.\n   * @api\n   */\n  getType() {\n    return this.type_;\n  }\n\n  /**\n   * Transform geometry coordinates from tile pixel space to projected.\n   *\n   * @param {import(\"../proj.js\").ProjectionLike} projection The data projection\n   */\n  transform(projection) {\n    projection = getProjection(projection);\n    const pixelExtent = projection.getExtent();\n    const projectedExtent = projection.getWorldExtent();\n    if (pixelExtent && projectedExtent) {\n      const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n      composeTransform(\n        tmpTransform,\n        projectedExtent[0],\n        projectedExtent[3],\n        scale,\n        -scale,\n        0,\n        0,\n        0,\n      );\n      transform2D(\n        this.flatCoordinates_,\n        0,\n        this.flatCoordinates_.length,\n        this.stride_,\n        tmpTransform,\n        this.flatCoordinates_,\n      );\n    }\n  }\n\n  /**\n   * Apply a transform function to the coordinates of the geometry.\n   * The geometry is modified in place.\n   * If you do not want the geometry modified in place, first `clone()` it and\n   * then use this function on the clone.\n   * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n   */\n  applyTransform(transformFn) {\n    transformFn(this.flatCoordinates_, this.flatCoordinates_, this.stride_);\n  }\n\n  /**\n   * @return {RenderFeature} A cloned render feature.\n   */\n  clone() {\n    return new RenderFeature(\n      this.type_,\n      this.flatCoordinates_.slice(),\n      this.ends_?.slice(),\n      this.stride_,\n      Object.assign({}, this.properties_),\n      this.id_,\n    );\n  }\n\n  /**\n   * @return {Array<number>|null} Ends.\n   */\n  getEnds() {\n    return this.ends_;\n  }\n\n  /**\n   * Add transform and resolution based geometry simplification to this instance.\n   * @return {RenderFeature} This render feature.\n   */\n  enableSimplifyTransformed() {\n    this.simplifyTransformed = memoizeOne((squaredTolerance, transform) => {\n      if (squaredTolerance === this.squaredTolerance_) {\n        return this.simplifiedGeometry_;\n      }\n      this.simplifiedGeometry_ = this.clone();\n      if (transform) {\n        this.simplifiedGeometry_.applyTransform(transform);\n      }\n      const simplifiedFlatCoordinates =\n        this.simplifiedGeometry_.getFlatCoordinates();\n      let simplifiedEnds;\n      switch (this.type_) {\n        case 'LineString':\n          simplifiedFlatCoordinates.length = douglasPeucker(\n            simplifiedFlatCoordinates,\n            0,\n            this.simplifiedGeometry_.flatCoordinates_.length,\n            this.simplifiedGeometry_.stride_,\n            squaredTolerance,\n            simplifiedFlatCoordinates,\n            0,\n          );\n          simplifiedEnds = [simplifiedFlatCoordinates.length];\n          break;\n        case 'MultiLineString':\n          simplifiedEnds = [];\n          simplifiedFlatCoordinates.length = douglasPeuckerArray(\n            simplifiedFlatCoordinates,\n            0,\n            this.simplifiedGeometry_.ends_,\n            this.simplifiedGeometry_.stride_,\n            squaredTolerance,\n            simplifiedFlatCoordinates,\n            0,\n            simplifiedEnds,\n          );\n          break;\n        case 'Polygon':\n          simplifiedEnds = [];\n          simplifiedFlatCoordinates.length = quantizeArray(\n            simplifiedFlatCoordinates,\n            0,\n            this.simplifiedGeometry_.ends_,\n            this.simplifiedGeometry_.stride_,\n            Math.sqrt(squaredTolerance),\n            simplifiedFlatCoordinates,\n            0,\n            simplifiedEnds,\n          );\n          break;\n        default:\n      }\n      if (simplifiedEnds) {\n        this.simplifiedGeometry_ = new RenderFeature(\n          this.type_,\n          simplifiedFlatCoordinates,\n          simplifiedEnds,\n          this.stride_,\n          this.properties_,\n          this.id_,\n        );\n      }\n      this.squaredTolerance_ = squaredTolerance;\n      return this.simplifiedGeometry_;\n    });\n    return this;\n  }\n}\n\n/**\n * @return {Array<number>} Flat coordinates.\n */\nRenderFeature.prototype.getFlatCoordinates =\n  RenderFeature.prototype.getOrientedFlatCoordinates;\n\n/**\n * Create a geometry from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature\n * Render Feature\n * @return {Point|MultiPoint|LineString|MultiLineString|Polygon|MultiPolygon}\n * New geometry instance.\n * @api\n */\nexport function toGeometry(renderFeature) {\n  const geometryType = renderFeature.getType();\n  switch (geometryType) {\n    case 'Point':\n      return new Point(renderFeature.getFlatCoordinates());\n    case 'MultiPoint':\n      return new MultiPoint(renderFeature.getFlatCoordinates(), 'XY');\n    case 'LineString':\n      return new LineString(renderFeature.getFlatCoordinates(), 'XY');\n    case 'MultiLineString':\n      return new MultiLineString(\n        renderFeature.getFlatCoordinates(),\n        'XY',\n        /** @type {Array<number>} */ (renderFeature.getEnds()),\n      );\n    case 'Polygon':\n      const flatCoordinates = renderFeature.getFlatCoordinates();\n      const ends = renderFeature.getEnds();\n      const endss = inflateEnds(flatCoordinates, ends);\n      return endss.length > 1\n        ? new MultiPolygon(flatCoordinates, 'XY', endss)\n        : new Polygon(flatCoordinates, 'XY', ends);\n    default:\n      throw new Error('Invalid geometry type:' + geometryType);\n  }\n}\n\n/**\n * Create an `ol/Feature` from an `ol/render/Feature`\n * @param {RenderFeature} renderFeature RenderFeature\n * @param {string} [geometryName] Geometry name to use\n * when creating the Feature.\n * @return {Feature} Newly constructed `ol/Feature` with properties,\n * geometry, and id copied over.\n * @api\n */\nexport function toFeature(renderFeature, geometryName) {\n  const id = renderFeature.getId();\n  const geometry = toGeometry(renderFeature);\n  const properties = renderFeature.getProperties();\n  const feature = new Feature();\n  if (geometryName !== undefined) {\n    feature.setGeometryName(geometryName);\n  }\n  feature.setGeometry(geometry);\n  if (id !== undefined) {\n    feature.setId(id);\n  }\n  feature.setProperties(properties, true);\n  return feature;\n}\n\nexport default RenderFeature;\n","/**\n * @module ol/render/VectorContext\n */\n\n/**\n * @classdesc\n * Context for drawing geometries.  A vector context is available on render\n * events and does not need to be constructed directly.\n * @api\n */\nclass VectorContext {\n  /**\n   * Render a geometry with a custom renderer.\n   *\n   * @param {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {Function} renderer Renderer.\n   * @param {Function} hitDetectionRenderer Renderer.\n   * @param {number} [index] Render order index.\n   */\n  drawCustom(geometry, feature, renderer, hitDetectionRenderer, index) {}\n\n  /**\n   * Render a geometry.\n   *\n   * @param {import(\"../geom/Geometry.js\").default} geometry The geometry to render.\n   */\n  drawGeometry(geometry) {}\n\n  /**\n   * Set the rendering style.\n   *\n   * @param {import(\"../style/Style.js\").default} style The rendering style.\n   */\n  setStyle(style) {}\n\n  /**\n   * @param {import(\"../geom/Circle.js\").default} circleGeometry Circle geometry.\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawCircle(circleGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {import(\"../style/Style.js\").default} style Style.\n   * @param {number} [index] Render order index.\n   */\n  drawFeature(feature, style, index) {}\n\n  /**\n   * @param {import(\"../geom/GeometryCollection.js\").default} geometryCollectionGeometry Geometry collection.\n   * @param {import(\"../Feature.js\").default} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawGeometryCollection(geometryCollectionGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../geom/LineString.js\").default|import(\"./Feature.js\").default} lineStringGeometry Line string geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawLineString(lineStringGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../geom/MultiLineString.js\").default|import(\"./Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawMultiLineString(multiLineStringGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../geom/MultiPoint.js\").default|import(\"./Feature.js\").default} multiPointGeometry MultiPoint geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawMultiPoint(multiPointGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawMultiPolygon(multiPolygonGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../geom/Point.js\").default|import(\"./Feature.js\").default} pointGeometry Point geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawPoint(pointGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../geom/Polygon.js\").default|import(\"./Feature.js\").default} polygonGeometry Polygon geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawPolygon(polygonGeometry, feature, index) {}\n\n  /**\n   * @param {import(\"../geom/SimpleGeometry.js\").default|import(\"./Feature.js\").default} geometry Geometry.\n   * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   */\n  drawText(geometry, feature, index) {}\n\n  /**\n   * @param {import(\"../style/Fill.js\").default} fillStyle Fill style.\n   * @param {import(\"../style/Stroke.js\").default} strokeStyle Stroke style.\n   */\n  setFillStrokeStyle(fillStyle, strokeStyle) {}\n\n  /**\n   * @param {import(\"../style/Image.js\").default} imageStyle Image style.\n   * @param {import(\"../render/canvas.js\").DeclutterImageWithText} [declutterImageWithText] Shared data for combined decluttering with a text style.\n   */\n  setImageStyle(imageStyle, declutterImageWithText) {}\n\n  /**\n   * @param {import(\"../style/Text.js\").default} textStyle Text style.\n   * @param {import(\"../render/canvas.js\").DeclutterImageWithText} [declutterImageWithText] Shared data for combined decluttering with an image style.\n   */\n  setTextStyle(textStyle, declutterImageWithText) {}\n}\n\nexport default VectorContext;\n","/**\n * @module ol/render/canvas\n */\nimport BaseObject from '../Object.js';\nimport {fontWeights, getFontParameters} from '../css.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../has.js';\nimport {clear} from '../obj.js';\n\n/**\n * @typedef {'Circle' | 'Image' | 'LineString' | 'Polygon' | 'Text' | 'Default'} BuilderType\n */\n\n/**\n * @typedef {Object} FillState\n * @property {import(\"../colorlike.js\").ColorLike} fillStyle FillStyle.\n */\n\n/**\n * @typedef Label\n * @property {number} width Width.\n * @property {number} height Height.\n * @property {Array<string|number>} contextInstructions ContextInstructions.\n */\n\n/**\n * @typedef {Object} FillStrokeState\n * @property {import(\"../colorlike.js\").ColorLike} [currentFillStyle] Current FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [currentStrokeStyle] Current StrokeStyle.\n * @property {CanvasLineCap} [currentLineCap] Current LineCap.\n * @property {Array<number>} currentLineDash Current LineDash.\n * @property {number} [currentLineDashOffset] Current LineDashOffset.\n * @property {CanvasLineJoin} [currentLineJoin] Current LineJoin.\n * @property {number} [currentLineWidth] Current LineWidth.\n * @property {number} [currentMiterLimit] Current MiterLimit.\n * @property {number} [currentStrokeOffset] Current StrokeOffset.\n * @property {number} [lastStroke] Last stroke.\n * @property {import(\"../colorlike.js\").ColorLike} [fillStyle] FillStyle.\n * @property {import(\"../colorlike.js\").ColorLike} [strokeStyle] StrokeStyle.\n * @property {CanvasLineCap} [lineCap] LineCap.\n * @property {Array<number>} lineDash LineDash.\n * @property {number} [lineDashOffset] LineDashOffset.\n * @property {CanvasLineJoin} [lineJoin] LineJoin.\n * @property {number} [lineWidth] LineWidth.\n * @property {number} [miterLimit] MiterLimit.\n * @property {number} [strokeOffset] StrokeOffset.\n * @property {number} [fillPatternScale] Fill pattern scale.\n */\n\n/**\n * @typedef {Object} StrokeState\n * @property {CanvasLineCap} lineCap LineCap.\n * @property {Array<number>} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} lineWidth LineWidth.\n * @property {number} miterLimit MiterLimit.\n * @property {number} [strokeOffset] StrokeOffset.\n * @property {import(\"../colorlike.js\").ColorLike} strokeStyle StrokeStyle.\n */\n\n/**\n * @typedef {Object} TextState\n * @property {string} font Font.\n * @property {CanvasTextAlign} [textAlign] TextAlign.\n * @property {number} [repeat] Repeat.\n * @property {import(\"../style/Text.js\").TextJustify} [justify] Justify.\n * @property {CanvasTextBaseline} textBaseline TextBaseline.\n * @property {import(\"../style/Text.js\").TextPlacement} [placement] Placement.\n * @property {number} [maxAngle] MaxAngle.\n * @property {boolean} [overflow] Overflow.\n * @property {import(\"../style/Fill.js\").default} [backgroundFill] BackgroundFill.\n * @property {import(\"../style/Stroke.js\").default} [backgroundStroke] BackgroundStroke.\n * @property {import(\"../size.js\").Size} [scale] Scale.\n * @property {Array<number>} [padding] Padding.\n */\n\n/**\n * @typedef {Object} SerializableInstructions\n * @property {Array<*>} instructions The rendering instructions.\n * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.\n * @property {Array<number>} coordinates The array of all coordinates.\n * @property {!Object<string, TextState>} [textStates] The text states (decluttering).\n * @property {!Object<string, FillState>} [fillStates] The fill states (decluttering).\n * @property {!Object<string, StrokeState>} [strokeStates] The stroke states (decluttering).\n */\n\n/**\n * @typedef {Object<number, import(\"./canvas/Executor.js\").ReplayImageOrLabelArgs>} DeclutterImageWithText\n */\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultFont = '10px sans-serif';\n\n/**\n * @const\n * @type {string}\n */\nexport const defaultFillStyle = '#000';\n\n/**\n * @const\n * @type {CanvasLineCap}\n */\nexport const defaultLineCap = 'round';\n\n/**\n * @const\n * @type {Array<number>}\n */\nexport const defaultLineDash = [];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineDashOffset = 0;\n\n/**\n * @const\n * @type {CanvasLineJoin}\n */\nexport const defaultLineJoin = 'round';\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultMiterLimit = 10;\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultStrokeOffset = 0;\n\n/**\n * @const\n * @type {import(\"../colorlike.js\").ColorLike}\n */\nexport const defaultStrokeStyle = '#000';\n\n/**\n * @const\n * @type {CanvasTextAlign}\n */\nexport const defaultTextAlign = 'center';\n\n/**\n * @const\n * @type {CanvasTextBaseline}\n */\nexport const defaultTextBaseline = 'middle';\n\n/**\n * @const\n * @type {Array<number>}\n */\nexport const defaultPadding = [0, 0, 0, 0];\n\n/**\n * @const\n * @type {number}\n */\nexport const defaultLineWidth = 1;\n\n/**\n * @type {BaseObject}\n */\nexport const checkedFonts = new BaseObject();\n\n/**\n * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n */\nlet measureContext = null;\n\n/**\n * @type {string}\n */\nlet measureFont;\n\n/**\n * @type {!Object<string, number>}\n */\nexport const textHeights = {};\n\nconst genericFontFamilies = new Set([\n  'serif',\n  'sans-serif',\n  'monospace',\n  'cursive',\n  'fantasy',\n  'system-ui',\n  'ui-serif',\n  'ui-sans-serif',\n  'ui-monospace',\n  'ui-rounded',\n  'emoji',\n  'math',\n  'fangsong',\n]);\n\n/**\n * @param {string} style Css font-style\n * @param {string} weight Css font-weight\n * @param {string} family Css font-family\n * @return {string} Font key.\n */\nfunction getFontKey(style, weight, family) {\n  return `${style} ${weight} 16px \"${family}\"`;\n}\n\n/**\n * Clears the label cache when a font becomes available.\n * @param {string} fontSpec CSS font spec.\n */\nexport const registerFont = (function () {\n  const retries = 100;\n  let timeout, fontFaceSet;\n\n  /**\n   * @param {string} fontSpec Css font spec\n   * @return {Promise<boolean>} Font with style and weight is available\n   */\n  async function isAvailable(fontSpec) {\n    await fontFaceSet.ready;\n    const font = getFontParameters(fontSpec);\n    const checkFamily = font.families[0].toLowerCase();\n    const checkWeight = font.weight;\n    /** @type {Array<FontFace>} */\n    const matching = [];\n    fontFaceSet.forEach(\n      /**\n       * @param {FontFace} f Font face.\n       */\n      (f) => {\n        const family = f.family.replace(/^['\"]|['\"]$/g, '').toLowerCase();\n        const weight = fontWeights[f.weight] || f.weight;\n        if (\n          family === checkFamily &&\n          f.style === font.style &&\n          weight == checkWeight\n        ) {\n          matching.push(f);\n        }\n      },\n    );\n    if (matching.length === 0) {\n      return false;\n    }\n    // Load each matching face with `FontFace.load()` instead of querying the\n    // set with `FontFaceSet.load()`. The latter only resolves faces whose\n    // `unicode-range` covers its (default) test string, so subset fonts -\n    // e.g. those served by Google Fonts - would never be detected.\n    const loaded = await Promise.all(\n      matching.map((f) =>\n        f.load().then(\n          () => true, // available\n          () => false, // not available\n        ),\n      ),\n    );\n    return loaded.some((available) => available);\n  }\n\n  async function check() {\n    await fontFaceSet.ready;\n    let done = true;\n    const checkedFontsProperties = checkedFonts.getProperties();\n    const fonts = Object.keys(checkedFontsProperties).filter(\n      (key) => checkedFontsProperties[key] < retries,\n    );\n    for (let i = fonts.length - 1; i >= 0; --i) {\n      const font = fonts[i];\n      let currentRetries = checkedFontsProperties[font];\n      if (currentRetries < retries) {\n        if (await isAvailable(font)) {\n          clear(textHeights);\n          checkedFonts.set(font, retries);\n        } else {\n          currentRetries += 10;\n          checkedFonts.set(font, currentRetries, true);\n          if (currentRetries < retries) {\n            done = false;\n          }\n        }\n      }\n    }\n    timeout = undefined;\n    if (!done) {\n      timeout = setTimeout(check, 100);\n    }\n  }\n\n  return async function (fontSpec) {\n    if (!fontFaceSet) {\n      fontFaceSet = WORKER_OFFSCREEN_CANVAS ? self.fonts : document.fonts;\n    }\n    const font = getFontParameters(fontSpec);\n    if (!font) {\n      return;\n    }\n    const families = font.families;\n    let needCheck = false;\n    for (const family of families) {\n      if (genericFontFamilies.has(family)) {\n        continue;\n      }\n      const key = getFontKey(font.style, font.weight, family);\n      if (checkedFonts.get(key) !== undefined) {\n        continue;\n      }\n      checkedFonts.set(key, 0, true);\n      needCheck = true;\n    }\n    if (needCheck) {\n      clearTimeout(timeout);\n      timeout = setTimeout(check, 100);\n    }\n  };\n})();\n\n/**\n * @param {string} font Font to use for measuring.\n * @return {import(\"../size.js\").Size} Measurement.\n */\nexport const measureTextHeight = (function () {\n  /**\n   * @type {HTMLDivElement}\n   */\n  let measureElement;\n  return function (fontSpec) {\n    let height = textHeights[fontSpec];\n    if (height == undefined) {\n      if (WORKER_OFFSCREEN_CANVAS) {\n        const font = getFontParameters(fontSpec);\n        const metrics = measureText(fontSpec, 'Žg');\n        const lineHeight = isNaN(Number(font.lineHeight))\n          ? 1.2\n          : Number(font.lineHeight);\n        height =\n          lineHeight *\n          (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n      } else {\n        if (!measureElement) {\n          measureElement = document.createElement('div');\n          measureElement.innerHTML = 'M';\n          measureElement.style.minHeight = '0';\n          measureElement.style.maxHeight = 'none';\n          measureElement.style.height = 'auto';\n          measureElement.style.padding = '0';\n          measureElement.style.border = 'none';\n          measureElement.style.position = 'absolute';\n          measureElement.style.display = 'block';\n          measureElement.style.left = '-99999px';\n        }\n        measureElement.style.font = fontSpec;\n        document.body.appendChild(measureElement);\n        height = measureElement.offsetHeight;\n        document.body.removeChild(measureElement);\n      }\n      textHeights[fontSpec] = height;\n    }\n    return height;\n  };\n})();\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {TextMetrics} Text metrics.\n */\nfunction measureText(font, text) {\n  if (!measureContext) {\n    measureContext = createCanvasContext2D(1, 1);\n  }\n  if (font != measureFont) {\n    measureContext.font = font;\n    measureFont = measureContext.font;\n  }\n  return measureContext.measureText(text);\n}\n\n/**\n * @param {string} font Font.\n * @param {string} text Text.\n * @return {number} Width.\n */\nexport function measureTextWidth(font, text) {\n  return measureText(font, text).width;\n}\n\n/**\n * Measure text width using a cache.\n * @param {string} font The font.\n * @param {string} text The text to measure.\n * @param {Object<string, number>} cache A lookup of cached widths by text.\n * @return {number} The text width.\n */\nexport function measureAndCacheTextWidth(font, text, cache) {\n  if (text in cache) {\n    return cache[text];\n  }\n  const width = text\n    .split('\\n')\n    .reduce((prev, curr) => Math.max(prev, measureTextWidth(font, curr)), 0);\n  cache[text] = width;\n  return width;\n}\n\n/**\n * @param {TextState} baseStyle Base style.\n * @param {Array<string>} chunks Text chunks to measure.\n * @return {{width: number, height: number, widths: Array<number>, heights: Array<number>, lineWidths: Array<number>}}} Text metrics.\n */\nexport function getTextDimensions(baseStyle, chunks) {\n  const widths = [];\n  const heights = [];\n  const lineWidths = [];\n  let width = 0;\n  let lineWidth = 0;\n  let height = 0;\n  let lineHeight = 0;\n  for (let i = 0, ii = chunks.length; i <= ii; i += 2) {\n    const text = chunks[i];\n    if (text === '\\n' || i === ii) {\n      width = Math.max(width, lineWidth);\n      lineWidths.push(lineWidth);\n      lineWidth = 0;\n      height += lineHeight;\n      lineHeight = 0;\n      continue;\n    }\n    const font = chunks[i + 1] || baseStyle.font;\n    const currentWidth = measureTextWidth(font, text);\n    widths.push(currentWidth);\n    lineWidth += currentWidth;\n    const currentHeight = measureTextHeight(font);\n    heights.push(currentHeight);\n    lineHeight = Math.max(lineHeight, currentHeight);\n  }\n  return {width, height, widths, heights, lineWidths};\n}\n\n/**\n * @param {CanvasRenderingContext2D} context Context.\n * @param {number} rotation Rotation.\n * @param {number} offsetX X offset.\n * @param {number} offsetY Y offset.\n */\nexport function rotateAtOffset(context, rotation, offsetX, offsetY) {\n  if (rotation !== 0) {\n    context.translate(offsetX, offsetY);\n    context.rotate(rotation);\n    context.translate(-offsetX, -offsetY);\n  }\n}\n\n/**\n * @param {CanvasRenderingContext2D|import(\"../render/canvas/ZIndexContext.js\").ZIndexContextProxy} context Context.\n * @param {import(\"../transform.js\").Transform|null} transform Transform.\n * @param {number} opacity Opacity.\n * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.\n * @param {number} originX Origin X.\n * @param {number} originY Origin Y.\n * @param {number} w Width.\n * @param {number} h Height.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../size.js\").Size} scale Scale.\n */\nexport function drawImageOrLabel(\n  context,\n  transform,\n  opacity,\n  labelOrImage,\n  originX,\n  originY,\n  w,\n  h,\n  x,\n  y,\n  scale,\n) {\n  context.save();\n\n  if (opacity !== 1) {\n    if (context.globalAlpha === undefined) {\n      context.globalAlpha = (context) => (context.globalAlpha *= opacity);\n    } else {\n      context.globalAlpha *= opacity;\n    }\n  }\n  if (transform) {\n    context.transform.apply(context, transform);\n  }\n\n  if (/** @type {*} */ (labelOrImage).contextInstructions) {\n    // label\n    context.translate(x, y);\n    context.scale(scale[0], scale[1]);\n    executeLabelInstructions(/** @type {Label} */ (labelOrImage), context);\n  } else if (scale[0] < 0 || scale[1] < 0) {\n    // flipped image\n    context.translate(x, y);\n    context.scale(scale[0], scale[1]);\n    context.drawImage(\n      /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n        labelOrImage\n      ),\n      originX,\n      originY,\n      w,\n      h,\n      0,\n      0,\n      w,\n      h,\n    );\n  } else {\n    // if image not flipped translate and scale can be avoided\n    context.drawImage(\n      /** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (\n        labelOrImage\n      ),\n      originX,\n      originY,\n      w,\n      h,\n      x,\n      y,\n      w * scale[0],\n      h * scale[1],\n    );\n  }\n\n  context.restore();\n}\n\n/**\n * @param {Label} label Label.\n * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n */\nfunction executeLabelInstructions(label, context) {\n  const contextInstructions = label.contextInstructions;\n  for (let i = 0, ii = contextInstructions.length; i < ii; i += 2) {\n    if (Array.isArray(contextInstructions[i + 1])) {\n      context[contextInstructions[i]].apply(\n        context,\n        contextInstructions[i + 1],\n      );\n    } else {\n      context[contextInstructions[i]] = contextInstructions[i + 1];\n    }\n  }\n}\n","/**\n * @module ol/render/canvas/Builder\n */\nimport {equals, reverseSubArray} from '../../array.js';\nimport {asColorLike} from '../../colorlike.js';\nimport {\n  buffer,\n  clone,\n  containsCoordinate,\n  coordinateRelationship,\n} from '../../extent.js';\nimport Relationship from '../../extent/Relationship.js';\nimport {\n  inflateCoordinates,\n  inflateCoordinatesArray,\n  inflateMultiCoordinatesArray,\n} from '../../geom/flat/inflate.js';\nimport VectorContext from '../VectorContext.js';\nimport {\n  defaultFillStyle,\n  defaultLineCap,\n  defaultLineDash,\n  defaultLineDashOffset,\n  defaultLineJoin,\n  defaultLineWidth,\n  defaultMiterLimit,\n  defaultStrokeOffset,\n  defaultStrokeStyle,\n} from '../canvas.js';\nimport CanvasInstruction from './Instruction.js';\n\nclass CanvasBuilder extends VectorContext {\n  /**\n   * @param {number} tolerance Tolerance.\n   * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   */\n  constructor(tolerance, maxExtent, resolution, pixelRatio) {\n    super();\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.tolerance = tolerance;\n\n    /**\n     * @protected\n     * @const\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.maxExtent = maxExtent;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.pixelRatio = pixelRatio;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.maxLineWidth = 0;\n\n    /**\n     * @protected\n     * @const\n     * @type {number}\n     */\n    this.resolution = resolution;\n\n    /**\n     * @private\n     * @type {Array<*>}\n     */\n    this.beginGeometryInstruction1_ = null;\n\n    /**\n     * @private\n     * @type {Array<*>}\n     */\n    this.beginGeometryInstruction2_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.bufferedMaxExtent_ = null;\n\n    /**\n     * @protected\n     * @type {Array<*>}\n     */\n    this.instructions = [];\n\n    /**\n     * @protected\n     * @type {Array<number>}\n     */\n    this.coordinates = [];\n\n    /**\n     * @private\n     * @type {import(\"../../coordinate.js\").Coordinate}\n     */\n    this.tmpCoordinate_ = [];\n\n    /**\n     * @protected\n     * @type {Array<*>}\n     */\n    this.hitDetectionInstructions = [];\n\n    /**\n     * @protected\n     * @type {import(\"../canvas.js\").FillStrokeState}\n     */\n    this.state = /** @type {import(\"../canvas.js\").FillStrokeState} */ ({});\n  }\n\n  /**\n   * @protected\n   * @param {Array<number>} dashArray Dash array.\n   * @return {Array<number>} Dash array with pixel ratio applied\n   */\n  applyPixelRatio(dashArray) {\n    const pixelRatio = this.pixelRatio;\n    return pixelRatio == 1\n      ? dashArray\n      : dashArray.map(function (dash) {\n          return dash * pixelRatio;\n        });\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} stride Stride.\n   * @protected\n   * @return {number} My end\n   */\n  appendFlatPointCoordinates(flatCoordinates, stride) {\n    const extent = this.getBufferedMaxExtent();\n    const tmpCoord = this.tmpCoordinate_;\n    const coordinates = this.coordinates;\n    let myEnd = coordinates.length;\n    for (let i = 0, ii = flatCoordinates.length; i < ii; i += stride) {\n      tmpCoord[0] = flatCoordinates[i];\n      tmpCoord[1] = flatCoordinates[i + 1];\n      if (containsCoordinate(extent, tmpCoord)) {\n        coordinates[myEnd++] = tmpCoord[0];\n        coordinates[myEnd++] = tmpCoord[1];\n      }\n    }\n    return myEnd;\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {number} end End.\n   * @param {number} stride Stride.\n   * @param {boolean} closed Last input coordinate equals first.\n   * @param {boolean} skipFirst Skip first coordinate.\n   * @protected\n   * @return {number} My end.\n   */\n  appendFlatLineCoordinates(\n    flatCoordinates,\n    offset,\n    end,\n    stride,\n    closed,\n    skipFirst,\n  ) {\n    const coordinates = this.coordinates;\n    let myEnd = coordinates.length;\n    const extent = this.getBufferedMaxExtent();\n    if (skipFirst) {\n      offset += stride;\n    }\n    let lastXCoord = flatCoordinates[offset];\n    let lastYCoord = flatCoordinates[offset + 1];\n    const nextCoord = this.tmpCoordinate_;\n    let skipped = true;\n\n    let i, lastRel, nextRel;\n    for (i = offset + stride; i < end; i += stride) {\n      nextCoord[0] = flatCoordinates[i];\n      nextCoord[1] = flatCoordinates[i + 1];\n      nextRel = coordinateRelationship(extent, nextCoord);\n      if (nextRel !== lastRel) {\n        if (skipped) {\n          coordinates[myEnd++] = lastXCoord;\n          coordinates[myEnd++] = lastYCoord;\n          skipped = false;\n        }\n        coordinates[myEnd++] = nextCoord[0];\n        coordinates[myEnd++] = nextCoord[1];\n      } else if (nextRel === Relationship.INTERSECTING) {\n        coordinates[myEnd++] = nextCoord[0];\n        coordinates[myEnd++] = nextCoord[1];\n        skipped = false;\n      } else {\n        skipped = true;\n      }\n      lastXCoord = nextCoord[0];\n      lastYCoord = nextCoord[1];\n      lastRel = nextRel;\n    }\n\n    // Last coordinate equals first or only one point to append:\n    if ((closed && skipped) || i === offset + stride) {\n      coordinates[myEnd++] = lastXCoord;\n      coordinates[myEnd++] = lastYCoord;\n    }\n    return myEnd;\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {Array<number>} ends Ends.\n   * @param {number} stride Stride.\n   * @param {Array<number>} builderEnds Builder ends.\n   * @return {number} Offset.\n   */\n  drawCustomCoordinates_(flatCoordinates, offset, ends, stride, builderEnds) {\n    for (let i = 0, ii = ends.length; i < ii; ++i) {\n      const end = ends[i];\n      const builderEnd = this.appendFlatLineCoordinates(\n        flatCoordinates,\n        offset,\n        end,\n        stride,\n        false,\n        false,\n      );\n      builderEnds.push(builderEnd);\n      offset = end;\n    }\n    return offset;\n  }\n\n  /**\n   * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {Function} renderer Renderer.\n   * @param {Function} hitDetectionRenderer Renderer.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawCustom(geometry, feature, renderer, hitDetectionRenderer, index) {\n    this.beginGeometry(geometry, feature, index);\n\n    const type = geometry.getType();\n    const stride = geometry.getStride();\n    const builderBegin = this.coordinates.length;\n\n    let flatCoordinates, builderEnd, builderEnds, builderEndss;\n    let offset;\n\n    switch (type) {\n      case 'MultiPolygon':\n        flatCoordinates =\n          /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (\n            geometry\n          ).getOrientedFlatCoordinates();\n        builderEndss = [];\n        const endss =\n          /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (\n            geometry\n          ).getEndss();\n        offset = 0;\n        for (let i = 0, ii = endss.length; i < ii; ++i) {\n          const myEnds = [];\n          offset = this.drawCustomCoordinates_(\n            flatCoordinates,\n            offset,\n            endss[i],\n            stride,\n            myEnds,\n          );\n          builderEndss.push(myEnds);\n        }\n        this.instructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEndss,\n          geometry,\n          renderer,\n          inflateMultiCoordinatesArray,\n          index,\n        ]);\n        this.hitDetectionInstructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEndss,\n          geometry,\n          hitDetectionRenderer || renderer,\n          inflateMultiCoordinatesArray,\n          index,\n        ]);\n        break;\n      case 'Polygon':\n      case 'MultiLineString':\n        builderEnds = [];\n        flatCoordinates =\n          type == 'Polygon'\n            ? /** @type {import(\"../../geom/Polygon.js\").default} */ (\n                geometry\n              ).getOrientedFlatCoordinates()\n            : geometry.getFlatCoordinates();\n        offset = this.drawCustomCoordinates_(\n          flatCoordinates,\n          0,\n          /** @type {import(\"../../geom/Polygon.js\").default|import(\"../../geom/MultiLineString.js\").default} */ (\n            geometry\n          ).getEnds(),\n          stride,\n          builderEnds,\n        );\n        this.instructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEnds,\n          geometry,\n          renderer,\n          inflateCoordinatesArray,\n          index,\n        ]);\n        this.hitDetectionInstructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEnds,\n          geometry,\n          hitDetectionRenderer || renderer,\n          inflateCoordinatesArray,\n          index,\n        ]);\n        break;\n      case 'LineString':\n      case 'Circle':\n        flatCoordinates = geometry.getFlatCoordinates();\n        builderEnd = this.appendFlatLineCoordinates(\n          flatCoordinates,\n          0,\n          flatCoordinates.length,\n          stride,\n          false,\n          false,\n        );\n        this.instructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEnd,\n          geometry,\n          renderer,\n          inflateCoordinates,\n          index,\n        ]);\n        this.hitDetectionInstructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEnd,\n          geometry,\n          hitDetectionRenderer || renderer,\n          inflateCoordinates,\n          index,\n        ]);\n        break;\n      case 'MultiPoint':\n        flatCoordinates = geometry.getFlatCoordinates();\n        builderEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n\n        if (builderEnd > builderBegin) {\n          this.instructions.push([\n            CanvasInstruction.CUSTOM,\n            builderBegin,\n            builderEnd,\n            geometry,\n            renderer,\n            inflateCoordinates,\n            index,\n          ]);\n          this.hitDetectionInstructions.push([\n            CanvasInstruction.CUSTOM,\n            builderBegin,\n            builderEnd,\n            geometry,\n            hitDetectionRenderer || renderer,\n            inflateCoordinates,\n            index,\n          ]);\n        }\n        break;\n      case 'Point':\n        flatCoordinates = geometry.getFlatCoordinates();\n        this.coordinates.push(flatCoordinates[0], flatCoordinates[1]);\n        builderEnd = this.coordinates.length;\n\n        this.instructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEnd,\n          geometry,\n          renderer,\n          undefined,\n          index,\n        ]);\n        this.hitDetectionInstructions.push([\n          CanvasInstruction.CUSTOM,\n          builderBegin,\n          builderEnd,\n          geometry,\n          hitDetectionRenderer || renderer,\n          undefined,\n          index,\n        ]);\n        break;\n      default:\n    }\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @protected\n   * @param {import(\"../../geom/Geometry.js\").default|import(\"../Feature.js\").default} geometry The geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} index Render order index\n   */\n  beginGeometry(geometry, feature, index) {\n    this.beginGeometryInstruction1_ = [\n      CanvasInstruction.BEGIN_GEOMETRY,\n      feature,\n      0,\n      geometry,\n      index,\n    ];\n    this.instructions.push(this.beginGeometryInstruction1_);\n    this.beginGeometryInstruction2_ = [\n      CanvasInstruction.BEGIN_GEOMETRY,\n      feature,\n      0,\n      geometry,\n      index,\n    ];\n    this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);\n  }\n\n  /**\n   * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n   */\n  finish() {\n    return {\n      instructions: this.instructions,\n      hitDetectionInstructions: this.hitDetectionInstructions,\n      coordinates: this.coordinates,\n    };\n  }\n\n  /**\n   * Reverse the hit detection instructions.\n   */\n  reverseHitDetectionInstructions() {\n    const hitDetectionInstructions = this.hitDetectionInstructions;\n    // step 1 - reverse array\n    hitDetectionInstructions.reverse();\n    // step 2 - reverse instructions within geometry blocks\n    let i;\n    const n = hitDetectionInstructions.length;\n    let instruction;\n    let type;\n    let begin = -1;\n    for (i = 0; i < n; ++i) {\n      instruction = hitDetectionInstructions[i];\n      type = /** @type {import(\"./Instruction.js\").default} */ (instruction[0]);\n      if (type == CanvasInstruction.END_GEOMETRY) {\n        begin = i;\n      } else if (type == CanvasInstruction.BEGIN_GEOMETRY) {\n        instruction[2] = i;\n        reverseSubArray(this.hitDetectionInstructions, begin, i);\n        begin = -1;\n      }\n    }\n  }\n\n  /**\n   * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n   * @param {import('../canvas.js').FillStrokeState} [state] State.\n   * @return {import('../canvas.js').FillStrokeState} State.\n   */\n  fillStyleToState(\n    fillStyle,\n    state = /** @type {import('../canvas.js').FillStrokeState} */ ({}),\n  ) {\n    if (fillStyle) {\n      const fillStyleColor = fillStyle.getColor();\n      state.fillPatternScale =\n        fillStyleColor &&\n        typeof fillStyleColor === 'object' &&\n        'src' in fillStyleColor\n          ? this.pixelRatio\n          : 1;\n      state.fillStyle =\n        asColorLike(fillStyleColor ? fillStyleColor : defaultFillStyle) ??\n        undefined;\n    } else {\n      state.fillStyle = undefined;\n    }\n    return state;\n  }\n\n  /**\n   * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n   * @param {import(\"../canvas.js\").FillStrokeState} state State.\n   * @return {import(\"../canvas.js\").FillStrokeState} State.\n   */\n  strokeStyleToState(\n    strokeStyle,\n    state = /** @type {import('../canvas.js').FillStrokeState} */ ({}),\n  ) {\n    if (strokeStyle) {\n      const strokeStyleColor = strokeStyle.getColor();\n      state.strokeStyle = asColorLike(\n        strokeStyleColor ? strokeStyleColor : defaultStrokeStyle,\n      );\n      const strokeStyleLineCap = strokeStyle.getLineCap();\n      state.lineCap =\n        strokeStyleLineCap !== undefined ? strokeStyleLineCap : defaultLineCap;\n      const strokeStyleLineDash = strokeStyle.getLineDash();\n      state.lineDash = strokeStyleLineDash\n        ? strokeStyleLineDash.slice()\n        : defaultLineDash;\n      const strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n      state.lineDashOffset = strokeStyleLineDashOffset\n        ? strokeStyleLineDashOffset\n        : defaultLineDashOffset;\n      const strokeStyleLineJoin = strokeStyle.getLineJoin();\n      state.lineJoin =\n        strokeStyleLineJoin !== undefined\n          ? strokeStyleLineJoin\n          : defaultLineJoin;\n      const strokeStyleWidth = strokeStyle.getWidth();\n      state.lineWidth =\n        strokeStyleWidth !== undefined ? strokeStyleWidth : defaultLineWidth;\n      const strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n      state.miterLimit =\n        strokeStyleMiterLimit !== undefined\n          ? strokeStyleMiterLimit\n          : defaultMiterLimit;\n      const strokeStyleOffset = strokeStyle.getOffset();\n      state.strokeOffset = strokeStyleOffset ?? defaultStrokeOffset;\n\n      if (state.lineWidth > this.maxLineWidth) {\n        this.maxLineWidth = state.lineWidth;\n        // invalidate the buffered max extent cache\n        this.bufferedMaxExtent_ = null;\n      }\n    } else {\n      state.strokeStyle = undefined;\n      state.lineCap = undefined;\n      state.lineDash = null;\n      state.lineDashOffset = undefined;\n      state.lineJoin = undefined;\n      state.lineWidth = undefined;\n      state.miterLimit = undefined;\n      state.strokeOffset = undefined;\n    }\n    return state;\n  }\n\n  /**\n   * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n   * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n   * @override\n   */\n  setFillStrokeStyle(fillStyle, strokeStyle) {\n    const state = this.state;\n    this.fillStyleToState(fillStyle, state);\n    this.strokeStyleToState(strokeStyle, state);\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").FillStrokeState} state State.\n   * @return {Array<*>} Fill instruction.\n   */\n  createFill(state) {\n    const fillStyle = state.fillStyle;\n    /** @type {Array<*>} */\n    const fillInstruction = [CanvasInstruction.SET_FILL_STYLE, fillStyle];\n    if (typeof fillStyle !== 'string') {\n      // Fill is a pattern or gradient - align and scale it!\n      fillInstruction.push(state.fillPatternScale);\n    }\n    return fillInstruction;\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").FillStrokeState} state State.\n   */\n  applyStroke(state) {\n    this.instructions.push(this.createStroke(state));\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").FillStrokeState} state State.\n   * @return {Array<*>} Stroke instruction.\n   */\n  createStroke(state) {\n    return [\n      CanvasInstruction.SET_STROKE_STYLE,\n      state.strokeStyle,\n      state.lineWidth * this.pixelRatio,\n      state.lineCap,\n      state.lineJoin,\n      state.miterLimit,\n      state.lineDash ? this.applyPixelRatio(state.lineDash) : null,\n      state.lineDashOffset * this.pixelRatio,\n    ];\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").FillStrokeState} state State.\n   * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState):Array<*>} createFill Create fill.\n   */\n  updateFillStyle(state, createFill) {\n    const fillStyle = state.fillStyle;\n    if (\n      (fillStyle !== undefined && typeof fillStyle !== 'string') ||\n      state.currentFillStyle != fillStyle\n    ) {\n      this.instructions.push(createFill.call(this, state));\n      state.currentFillStyle = fillStyle;\n    }\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").FillStrokeState} state State.\n   * @param {function(this:CanvasBuilder, import(\"../canvas.js\").FillStrokeState): void} applyStroke Apply stroke.\n   */\n  updateStrokeStyle(state, applyStroke) {\n    const strokeStyle = state.strokeStyle;\n    const lineCap = state.lineCap;\n    const lineDash = state.lineDash;\n    const lineDashOffset = state.lineDashOffset;\n    const lineJoin = state.lineJoin;\n    const lineWidth = state.lineWidth;\n    const miterLimit = state.miterLimit;\n    const strokeOffset = state.strokeOffset;\n    if (\n      state.currentStrokeStyle != strokeStyle ||\n      state.currentLineCap != lineCap ||\n      (lineDash != state.currentLineDash &&\n        !equals(state.currentLineDash, lineDash)) ||\n      state.currentLineDashOffset != lineDashOffset ||\n      state.currentLineJoin != lineJoin ||\n      state.currentLineWidth != lineWidth ||\n      state.currentMiterLimit != miterLimit ||\n      state.currentStrokeOffset != strokeOffset\n    ) {\n      applyStroke.call(this, state);\n      state.currentStrokeStyle = strokeStyle;\n      state.currentLineCap = lineCap;\n      state.currentLineDash = lineDash;\n      state.currentLineDashOffset = lineDashOffset;\n      state.currentLineJoin = lineJoin;\n      state.currentLineWidth = lineWidth;\n      state.currentMiterLimit = miterLimit;\n      state.currentStrokeOffset = strokeOffset;\n    }\n  }\n\n  /**\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   */\n  endGeometry(feature) {\n    this.beginGeometryInstruction1_[2] = this.instructions.length;\n    this.beginGeometryInstruction1_ = null;\n    this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;\n    this.beginGeometryInstruction2_ = null;\n    const endGeometryInstruction = [CanvasInstruction.END_GEOMETRY, feature];\n    this.instructions.push(endGeometryInstruction);\n    this.hitDetectionInstructions.push(endGeometryInstruction);\n  }\n\n  /**\n   * Get the buffered rendering extent.  Rendering will be clipped to the extent\n   * provided to the constructor.  To account for symbolizers that may intersect\n   * this extent, we calculate a buffered extent (e.g. based on stroke width).\n   * @return {import(\"../../extent.js\").Extent} The buffered rendering extent.\n   * @protected\n   */\n  getBufferedMaxExtent() {\n    if (!this.bufferedMaxExtent_) {\n      this.bufferedMaxExtent_ = clone(this.maxExtent);\n      if (this.maxLineWidth > 0) {\n        const width = (this.resolution * (this.maxLineWidth + 1)) / 2;\n        buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);\n      }\n    }\n    return this.bufferedMaxExtent_;\n  }\n}\n\nexport default CanvasBuilder;\n","/**\n * @module ol/render/canvas/ImageBuilder\n */\nimport {containsCoordinate} from '../../extent.js';\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\n\nclass CanvasImageBuilder extends CanvasBuilder {\n  /**\n   * @param {number} tolerance Tolerance.\n   * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   */\n  constructor(tolerance, maxExtent, resolution, pixelRatio) {\n    super(tolerance, maxExtent, resolution, pixelRatio);\n\n    /**\n     * @private\n     * @type {import('../../DataTile.js').ImageLike}\n     */\n    this.hitDetectionImage_ = null;\n\n    /**\n     * @private\n     * @type {import('../../DataTile.js').ImageLike}\n     */\n    this.image_ = null;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.imagePixelRatio_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.anchorX_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.anchorY_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.height_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.opacity_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.originX_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.originY_ = undefined;\n\n    /**\n     * @private\n     * @type {boolean|undefined}\n     */\n    this.rotateWithView_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.rotation_ = undefined;\n\n    /**\n     * @private\n     * @type {import(\"../../size.js\").Size|undefined}\n     */\n    this.scale_ = undefined;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.width_ = undefined;\n\n    /**\n     * @private\n     * @type {import('../../style/Style.js').DeclutterMode}\n     */\n    this.declutterMode_ = undefined;\n\n    /**\n     * Data shared with a text builder for combined decluttering.\n     * @private\n     * @type {import(\"../canvas.js\").DeclutterImageWithText}\n     */\n    this.declutterImageWithText_ = undefined;\n  }\n\n  /**\n   * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} pointGeometry Point geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawPoint(pointGeometry, feature, index) {\n    if (\n      !this.image_ ||\n      (this.maxExtent &&\n        !containsCoordinate(this.maxExtent, pointGeometry.getFlatCoordinates()))\n    ) {\n      return;\n    }\n    this.beginGeometry(pointGeometry, feature, index);\n    const flatCoordinates = pointGeometry.getFlatCoordinates();\n    const stride = pointGeometry.getStride();\n    const myBegin = this.coordinates.length;\n    const myEnd = this.appendFlatPointCoordinates(flatCoordinates, stride);\n    this.instructions.push([\n      CanvasInstruction.DRAW_IMAGE,\n      myBegin,\n      myEnd,\n      this.image_,\n      // Remaining arguments to DRAW_IMAGE are in alphabetical order\n      this.anchorX_ * this.imagePixelRatio_,\n      this.anchorY_ * this.imagePixelRatio_,\n      Math.ceil(this.height_ * this.imagePixelRatio_),\n      this.opacity_,\n      this.originX_ * this.imagePixelRatio_,\n      this.originY_ * this.imagePixelRatio_,\n      this.rotateWithView_,\n      this.rotation_,\n      [\n        (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n        (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n      ],\n      Math.ceil(this.width_ * this.imagePixelRatio_),\n      this.declutterMode_,\n      this.declutterImageWithText_,\n    ]);\n    this.hitDetectionInstructions.push([\n      CanvasInstruction.DRAW_IMAGE,\n      myBegin,\n      myEnd,\n      this.hitDetectionImage_,\n      // Remaining arguments to DRAW_IMAGE are in alphabetical order\n      this.anchorX_,\n      this.anchorY_,\n      this.height_,\n      1,\n      this.originX_,\n      this.originY_,\n      this.rotateWithView_,\n      this.rotation_,\n      this.scale_,\n      this.width_,\n      this.declutterMode_,\n      this.declutterImageWithText_,\n    ]);\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} multiPointGeometry MultiPoint geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawMultiPoint(multiPointGeometry, feature, index) {\n    if (!this.image_) {\n      return;\n    }\n    this.beginGeometry(multiPointGeometry, feature, index);\n    const flatCoordinates = multiPointGeometry.getFlatCoordinates();\n    const filteredFlatCoordinates = [];\n    for (\n      let i = 0, ii = flatCoordinates.length;\n      i < ii;\n      i += multiPointGeometry.getStride()\n    ) {\n      if (\n        !this.maxExtent ||\n        containsCoordinate(this.maxExtent, flatCoordinates.slice(i, i + 2))\n      ) {\n        filteredFlatCoordinates.push(\n          flatCoordinates[i],\n          flatCoordinates[i + 1],\n        );\n      }\n    }\n    const myBegin = this.coordinates.length;\n    const myEnd = this.appendFlatPointCoordinates(filteredFlatCoordinates, 2);\n    this.instructions.push([\n      CanvasInstruction.DRAW_IMAGE,\n      myBegin,\n      myEnd,\n      this.image_,\n      // Remaining arguments to DRAW_IMAGE are in alphabetical order\n      this.anchorX_ * this.imagePixelRatio_,\n      this.anchorY_ * this.imagePixelRatio_,\n      Math.ceil(this.height_ * this.imagePixelRatio_),\n      this.opacity_,\n      this.originX_ * this.imagePixelRatio_,\n      this.originY_ * this.imagePixelRatio_,\n      this.rotateWithView_,\n      this.rotation_,\n      [\n        (this.scale_[0] * this.pixelRatio) / this.imagePixelRatio_,\n        (this.scale_[1] * this.pixelRatio) / this.imagePixelRatio_,\n      ],\n      Math.ceil(this.width_ * this.imagePixelRatio_),\n      this.declutterMode_,\n      this.declutterImageWithText_,\n    ]);\n    this.hitDetectionInstructions.push([\n      CanvasInstruction.DRAW_IMAGE,\n      myBegin,\n      myEnd,\n      this.hitDetectionImage_,\n      // Remaining arguments to DRAW_IMAGE are in alphabetical order\n      this.anchorX_,\n      this.anchorY_,\n      this.height_,\n      1,\n      this.originX_,\n      this.originY_,\n      this.rotateWithView_,\n      this.rotation_,\n      this.scale_,\n      this.width_,\n      this.declutterMode_,\n      this.declutterImageWithText_,\n    ]);\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n   * @override\n   */\n  finish() {\n    this.reverseHitDetectionInstructions();\n    // FIXME this doesn't really protect us against further calls to draw*Geometry\n    this.anchorX_ = undefined;\n    this.anchorY_ = undefined;\n    this.hitDetectionImage_ = null;\n    this.image_ = null;\n    this.imagePixelRatio_ = undefined;\n    this.height_ = undefined;\n    this.scale_ = undefined;\n    this.opacity_ = undefined;\n    this.originX_ = undefined;\n    this.originY_ = undefined;\n    this.rotateWithView_ = undefined;\n    this.rotation_ = undefined;\n    this.width_ = undefined;\n    return super.finish();\n  }\n\n  /**\n   * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n   * @param {Object} [sharedData] Shared data.\n   * @override\n   */\n  setImageStyle(imageStyle, sharedData) {\n    const anchor = imageStyle.getAnchor();\n    const size = imageStyle.getSize();\n    const origin = imageStyle.getOrigin();\n    this.imagePixelRatio_ = imageStyle.getPixelRatio(this.pixelRatio);\n    this.anchorX_ = anchor[0];\n    this.anchorY_ = anchor[1];\n    this.hitDetectionImage_ = imageStyle.getHitDetectionImage();\n    this.image_ = imageStyle.getImage(this.pixelRatio);\n    this.height_ = size[1];\n    this.opacity_ = imageStyle.getOpacity();\n    this.originX_ = origin[0];\n    this.originY_ = origin[1];\n    this.rotateWithView_ = imageStyle.getRotateWithView();\n    this.rotation_ = imageStyle.getRotation();\n    this.scale_ = imageStyle.getScaleArray();\n    this.width_ = size[0];\n    this.declutterMode_ = imageStyle.getDeclutterMode();\n    this.declutterImageWithText_ = sharedData;\n  }\n}\n\nexport default CanvasImageBuilder;\n","/**\n * @module ol/render/canvas/LineStringBuilder\n */\nimport {\n  defaultLineDash,\n  defaultLineDashOffset,\n  defaultStrokeStyle,\n} from '../canvas.js';\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, {\n  beginPathInstruction,\n  strokeInstruction,\n} from './Instruction.js';\n\nclass CanvasLineStringBuilder extends CanvasBuilder {\n  /**\n   * @param {number} tolerance Tolerance.\n   * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   */\n  constructor(tolerance, maxExtent, resolution, pixelRatio) {\n    super(tolerance, maxExtent, resolution, pixelRatio);\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {number} end End.\n   * @param {number} stride Stride.\n   * @param {number} [strokeOffset] Stroke Offset in pixels.\n   * @private\n   * @return {number} end.\n   */\n  drawFlatCoordinates_(flatCoordinates, offset, end, stride, strokeOffset) {\n    const myBegin = this.coordinates.length;\n    const myEnd = this.appendFlatLineCoordinates(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      false,\n      false,\n    );\n    this.instructions.push([\n      CanvasInstruction.MOVE_TO_LINE_TO,\n      myBegin,\n      myEnd,\n      strokeOffset * this.pixelRatio,\n    ]);\n    this.hitDetectionInstructions.push([\n      CanvasInstruction.MOVE_TO_LINE_TO,\n      myBegin,\n      myEnd,\n      strokeOffset,\n    ]);\n    return end;\n  }\n\n  /**\n   * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} lineStringGeometry Line string geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawLineString(lineStringGeometry, feature, index) {\n    const state = this.state;\n    const strokeStyle = state.strokeStyle;\n    const lineWidth = state.lineWidth;\n    const strokeOffset = state.strokeOffset;\n    if (strokeStyle === undefined || lineWidth === undefined) {\n      return;\n    }\n    this.updateStrokeStyle(state, this.applyStroke);\n    this.beginGeometry(lineStringGeometry, feature, index);\n    this.hitDetectionInstructions.push(\n      [\n        CanvasInstruction.SET_STROKE_STYLE,\n        defaultStrokeStyle,\n        state.lineWidth,\n        state.lineCap,\n        state.lineJoin,\n        state.miterLimit,\n        defaultLineDash,\n        defaultLineDashOffset,\n      ],\n      beginPathInstruction,\n    );\n    const flatCoordinates = lineStringGeometry.getFlatCoordinates();\n    const stride = lineStringGeometry.getStride();\n    this.drawFlatCoordinates_(\n      flatCoordinates,\n      0,\n      flatCoordinates.length,\n      stride,\n      strokeOffset,\n    );\n    this.hitDetectionInstructions.push(strokeInstruction);\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} multiLineStringGeometry MultiLineString geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawMultiLineString(multiLineStringGeometry, feature, index) {\n    const state = this.state;\n    const strokeStyle = state.strokeStyle;\n    const lineWidth = state.lineWidth;\n    const strokeOffset = state.strokeOffset;\n    if (strokeStyle === undefined || lineWidth === undefined) {\n      return;\n    }\n    this.updateStrokeStyle(state, this.applyStroke);\n    this.beginGeometry(multiLineStringGeometry, feature, index);\n    this.hitDetectionInstructions.push(\n      [\n        CanvasInstruction.SET_STROKE_STYLE,\n        defaultStrokeStyle,\n        state.lineWidth,\n        state.lineCap,\n        state.lineJoin,\n        state.miterLimit,\n        defaultLineDash,\n        defaultLineDashOffset,\n      ],\n      beginPathInstruction,\n    );\n    const ends = multiLineStringGeometry.getEnds();\n    const flatCoordinates = multiLineStringGeometry.getFlatCoordinates();\n    const stride = multiLineStringGeometry.getStride();\n    let offset = 0;\n    for (let i = 0, ii = ends.length; i < ii; ++i) {\n      offset = this.drawFlatCoordinates_(\n        flatCoordinates,\n        offset,\n        /** @type {number} */ (ends[i]),\n        stride,\n        strokeOffset,\n      );\n    }\n    this.hitDetectionInstructions.push(strokeInstruction);\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n   * @override\n   */\n  finish() {\n    const state = this.state;\n    if (\n      state.lastStroke != undefined &&\n      state.lastStroke != this.coordinates.length\n    ) {\n      this.instructions.push(strokeInstruction);\n    }\n    this.reverseHitDetectionInstructions();\n    this.state = null;\n    return super.finish();\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").FillStrokeState} state State.\n   * @override\n   */\n  applyStroke(state) {\n    if (\n      state.lastStroke != undefined &&\n      state.lastStroke != this.coordinates.length\n    ) {\n      this.instructions.push(strokeInstruction);\n      state.lastStroke = this.coordinates.length;\n    }\n    state.lastStroke = 0;\n    super.applyStroke(state);\n    this.instructions.push(beginPathInstruction);\n  }\n}\n\nexport default CanvasLineStringBuilder;\n","/**\n * @module ol/render/canvas/PolygonBuilder\n */\nimport {snap} from '../../geom/flat/simplify.js';\nimport {\n  defaultFillStyle,\n  defaultLineDash,\n  defaultLineDashOffset,\n  defaultStrokeStyle,\n} from '../canvas.js';\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction, {\n  beginPathInstruction,\n  closePathInstruction,\n  fillInstruction,\n  strokeInstruction,\n} from './Instruction.js';\n\nclass CanvasPolygonBuilder extends CanvasBuilder {\n  /**\n   * @param {number} tolerance Tolerance.\n   * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   */\n  constructor(tolerance, maxExtent, resolution, pixelRatio) {\n    super(tolerance, maxExtent, resolution, pixelRatio);\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {Array<number>} ends Ends.\n   * @param {number} stride Stride.\n   * @param {number} [strokeOffset] Stroke Offset in pixels.\n   * @private\n   * @return {number} End.\n   */\n  drawFlatCoordinatess_(flatCoordinates, offset, ends, stride, strokeOffset) {\n    const state = this.state;\n    const fill = state.fillStyle !== undefined;\n    const stroke = state.strokeStyle !== undefined;\n    const numEnds = ends.length;\n    this.instructions.push(beginPathInstruction);\n    this.hitDetectionInstructions.push(beginPathInstruction);\n    for (let i = 0; i < numEnds; ++i) {\n      const end = ends[i];\n      const myBegin = this.coordinates.length;\n      const myEnd = this.appendFlatLineCoordinates(\n        flatCoordinates,\n        offset,\n        end,\n        stride,\n        true,\n        !stroke,\n      );\n      this.instructions.push([\n        CanvasInstruction.MOVE_TO_LINE_TO,\n        myBegin,\n        myEnd,\n        strokeOffset * this.pixelRatio,\n        true,\n      ]);\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.MOVE_TO_LINE_TO,\n        myBegin,\n        myEnd,\n        strokeOffset,\n        true,\n      ]);\n      if (stroke) {\n        // Performance optimization: only call closePath() when we have a stroke.\n        // Otherwise the ring is closed already (see appendFlatLineCoordinates above).\n        this.instructions.push(closePathInstruction);\n        this.hitDetectionInstructions.push(closePathInstruction);\n      }\n      offset = end;\n    }\n    if (fill) {\n      this.instructions.push(fillInstruction);\n      this.hitDetectionInstructions.push(fillInstruction);\n    }\n    if (stroke) {\n      this.instructions.push(strokeInstruction);\n      this.hitDetectionInstructions.push(strokeInstruction);\n    }\n    return offset;\n  }\n\n  /**\n   * @param {import(\"../../geom/Circle.js\").default} circleGeometry Circle geometry.\n   * @param {import(\"../../Feature.js\").default} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawCircle(circleGeometry, feature, index) {\n    const state = this.state;\n    const fillStyle = state.fillStyle;\n    const strokeStyle = state.strokeStyle;\n    const strokeOffset = state.strokeOffset;\n    if (fillStyle === undefined && strokeStyle === undefined) {\n      return;\n    }\n\n    if (\n      this.handleStrokeOffset_(() =>\n        this.drawCircle(circleGeometry, feature, index),\n      )\n    ) {\n      return;\n    }\n    this.setFillStrokeStyles_();\n    this.beginGeometry(circleGeometry, feature, index);\n    if (state.fillStyle !== undefined) {\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.SET_FILL_STYLE,\n        defaultFillStyle,\n      ]);\n    }\n    if (state.strokeStyle !== undefined) {\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.SET_STROKE_STYLE,\n        defaultStrokeStyle,\n        state.lineWidth,\n        state.lineCap,\n        state.lineJoin,\n        state.miterLimit,\n        defaultLineDash,\n        defaultLineDashOffset,\n      ]);\n    }\n    const flatCoordinates = circleGeometry.getFlatCoordinates();\n    const stride = circleGeometry.getStride();\n    const myBegin = this.coordinates.length;\n    this.appendFlatLineCoordinates(\n      flatCoordinates,\n      0,\n      flatCoordinates.length,\n      stride,\n      false,\n      false,\n    );\n    const circleInstruction = [CanvasInstruction.CIRCLE, myBegin, strokeOffset];\n    this.instructions.push(beginPathInstruction, circleInstruction);\n    this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction);\n    if (state.fillStyle !== undefined) {\n      this.instructions.push(fillInstruction);\n      this.hitDetectionInstructions.push(fillInstruction);\n    }\n    if (state.strokeStyle !== undefined) {\n      this.instructions.push(strokeInstruction);\n      this.hitDetectionInstructions.push(strokeInstruction);\n    }\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} polygonGeometry Polygon geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawPolygon(polygonGeometry, feature, index) {\n    const state = this.state;\n    const fillStyle = state.fillStyle;\n    const strokeStyle = state.strokeStyle;\n    const strokeOffset = state.strokeOffset;\n    if (fillStyle === undefined && strokeStyle === undefined) {\n      return;\n    }\n    if (\n      this.handleStrokeOffset_(() =>\n        this.drawPolygon(polygonGeometry, feature, index),\n      )\n    ) {\n      return;\n    }\n\n    this.setFillStrokeStyles_();\n    this.beginGeometry(polygonGeometry, feature, index);\n    if (state.fillStyle !== undefined) {\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.SET_FILL_STYLE,\n        defaultFillStyle,\n      ]);\n    }\n    if (state.strokeStyle !== undefined) {\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.SET_STROKE_STYLE,\n        defaultStrokeStyle,\n        state.lineWidth,\n        state.lineCap,\n        state.lineJoin,\n        state.miterLimit,\n        defaultLineDash,\n        defaultLineDashOffset,\n      ]);\n    }\n    const ends = polygonGeometry.getEnds();\n    const flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();\n    const stride = polygonGeometry.getStride();\n    this.drawFlatCoordinatess_(\n      flatCoordinates,\n      0,\n      /** @type {Array<number>} */ (ends),\n      stride,\n      strokeOffset,\n    );\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @param {import(\"../../geom/MultiPolygon.js\").default} multiPolygonGeometry MultiPolygon geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawMultiPolygon(multiPolygonGeometry, feature, index) {\n    const state = this.state;\n    const fillStyle = state.fillStyle;\n    const strokeStyle = state.strokeStyle;\n    const strokeOffset = state.strokeOffset;\n    if (fillStyle === undefined && strokeStyle === undefined) {\n      return;\n    }\n    if (\n      this.handleStrokeOffset_(() =>\n        this.drawMultiPolygon(multiPolygonGeometry, feature, index),\n      )\n    ) {\n      return;\n    }\n    this.setFillStrokeStyles_();\n    this.beginGeometry(multiPolygonGeometry, feature, index);\n    if (state.fillStyle !== undefined) {\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.SET_FILL_STYLE,\n        defaultFillStyle,\n      ]);\n    }\n    if (state.strokeStyle !== undefined) {\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.SET_STROKE_STYLE,\n        defaultStrokeStyle,\n        state.lineWidth,\n        state.lineCap,\n        state.lineJoin,\n        state.miterLimit,\n        defaultLineDash,\n        defaultLineDashOffset,\n      ]);\n    }\n    const endss = multiPolygonGeometry.getEndss();\n    const flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();\n    const stride = multiPolygonGeometry.getStride();\n    let offset = 0;\n    for (let i = 0, ii = endss.length; i < ii; ++i) {\n      offset = this.drawFlatCoordinatess_(\n        flatCoordinates,\n        offset,\n        endss[i],\n        stride,\n        strokeOffset,\n      );\n    }\n    this.endGeometry(feature);\n  }\n\n  /**\n   * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n   * @override\n   */\n  finish() {\n    this.reverseHitDetectionInstructions();\n    this.state = null;\n    // We want to preserve topology when drawing polygons.  Polygons are\n    // simplified using quantization and point elimination. However, we might\n    // have received a mix of quantized and non-quantized geometries, so ensure\n    // that all are quantized by quantizing all coordinates in the batch.\n    const tolerance = this.tolerance;\n    if (tolerance !== 0) {\n      const coordinates = this.coordinates;\n      for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n        coordinates[i] = snap(coordinates[i], tolerance);\n      }\n    }\n    return super.finish();\n  }\n\n  /**\n   * @private\n   */\n  setFillStrokeStyles_() {\n    const state = this.state;\n    this.updateFillStyle(state, this.createFill);\n    this.updateStrokeStyle(state, this.applyStroke);\n  }\n\n  handleStrokeOffset_(drawGeometryCallback) {\n    const state = this.state;\n    const fillStyle = state.fillStyle;\n    const strokeStyle = state.strokeStyle;\n    const strokeOffset = state.strokeOffset;\n\n    // In case both fill style and stroke style are defined and the stroke style has an offset,\n    // the stroke and fill should be done in separate steps, because offset stroke shape will\n    // be different from the original shape used for the fill.\n    if (\n      Math.abs(strokeOffset) > 0 &&\n      fillStyle !== undefined &&\n      strokeStyle !== undefined\n    ) {\n      // First do only fill\n      state.strokeStyle = undefined;\n      state.strokeOffset = 0;\n      drawGeometryCallback();\n      // Now separately do the stroke\n      state.fillStyle = undefined;\n      state.strokeStyle = strokeStyle;\n      state.strokeOffset = strokeOffset;\n      drawGeometryCallback();\n      // Reset the state to the original\n      state.fillStyle = fillStyle;\n      return true;\n    }\n    return false;\n  }\n}\n\nexport default CanvasPolygonBuilder;\n","/**\n * @module ol/render/canvas/BuilderGroup\n */\n\nimport Builder from './Builder.js';\nimport ImageBuilder from './ImageBuilder.js';\nimport LineStringBuilder from './LineStringBuilder.js';\nimport PolygonBuilder from './PolygonBuilder.js';\nimport TextBuilder from './TextBuilder.js';\n\n/**\n * @type {Object<import(\"../canvas.js\").BuilderType, typeof Builder>}\n */\nconst BATCH_CONSTRUCTORS = {\n  'Circle': PolygonBuilder,\n  'Default': Builder,\n  'Image': ImageBuilder,\n  'LineString': LineStringBuilder,\n  'Polygon': PolygonBuilder,\n  'Text': TextBuilder,\n};\n\nclass BuilderGroup {\n  /**\n   * @param {number} tolerance Tolerance.\n   * @param {import(\"../../extent.js\").Extent} maxExtent Max extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   */\n  constructor(tolerance, maxExtent, resolution, pixelRatio) {\n    /**\n     * @private\n     * @type {number}\n     */\n    this.tolerance_ = tolerance;\n\n    /**\n     * @private\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.maxExtent_ = maxExtent;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelRatio_ = pixelRatio;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.resolution_ = resolution;\n\n    /**\n     * @private\n     * @type {!Object<string, !Object<import(\"../canvas.js\").BuilderType, Builder>>}\n     */\n    this.buildersByZIndex_ = {};\n  }\n\n  /**\n   * @return {!Object<string, !Object<import(\"../canvas.js\").BuilderType, import(\"./Builder.js\").SerializableInstructions>>} The serializable instructions\n   */\n  finish() {\n    const builderInstructions = {};\n    for (const zKey in this.buildersByZIndex_) {\n      builderInstructions[zKey] = builderInstructions[zKey] || {};\n      const builders = this.buildersByZIndex_[zKey];\n      for (const builderKey in builders) {\n        const builderInstruction = builders[builderKey].finish();\n        builderInstructions[zKey][builderKey] = builderInstruction;\n      }\n    }\n    return builderInstructions;\n  }\n\n  /**\n   * @param {number|undefined} zIndex Z index.\n   * @param {import(\"../canvas.js\").BuilderType} builderType Replay type.\n   * @return {import(\"../VectorContext.js\").default} Replay.\n   */\n  getBuilder(zIndex, builderType) {\n    const zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';\n    let replays = this.buildersByZIndex_[zIndexKey];\n    if (replays === undefined) {\n      replays = {};\n      this.buildersByZIndex_[zIndexKey] = replays;\n    }\n    let replay = replays[builderType];\n    if (replay === undefined) {\n      const Constructor = BATCH_CONSTRUCTORS[builderType];\n      replay = new Constructor(\n        this.tolerance_,\n        this.maxExtent_,\n        this.resolution_,\n        this.pixelRatio_,\n      );\n      replays[builderType] = replay;\n    }\n    return replay;\n  }\n}\n\nexport default BuilderGroup;\n","/**\n * @module ol/render/canvas/Executor\n */\nimport {equals} from '../../array.js';\nimport {createEmpty, createOrUpdate, intersects} from '../../extent.js';\nimport {lineStringLength} from '../../geom/flat/length.js';\nimport {\n  offsetLineString,\n  removeOffsetCycles,\n} from '../../geom/flat/lineoffset.js';\nimport {drawTextOnPath} from '../../geom/flat/textpath.js';\nimport {transform2D} from '../../geom/flat/transform.js';\nimport {\n  apply as applyTransform,\n  compose as composeTransform,\n  create as createTransform,\n  setFromArray as transformSetFromArray,\n} from '../../transform.js';\nimport {\n  defaultPadding,\n  defaultTextAlign,\n  defaultTextBaseline,\n  drawImageOrLabel,\n  getTextDimensions,\n  measureAndCacheTextWidth,\n} from '../canvas.js';\nimport ZIndexContext from '../canvas/ZIndexContext.js';\nimport CanvasInstruction from './Instruction.js';\nimport {TEXT_ALIGN} from './TextBuilder.js';\n\n/**\n * @typedef {import('../../structs/RBush.js').Entry<import('../../Feature.js').FeatureLike>} DeclutterEntry\n */\n\n/**\n * @typedef {Object} ImageOrLabelDimensions\n * @property {number} drawImageX DrawImageX.\n * @property {number} drawImageY DrawImageY.\n * @property {number} drawImageW DrawImageW.\n * @property {number} drawImageH DrawImageH.\n * @property {number} originX OriginX.\n * @property {number} originY OriginY.\n * @property {Array<number>} scale Scale.\n * @property {DeclutterEntry} declutterBox DeclutterBox.\n * @property {import(\"../../transform.js\").Transform} canvasTransform CanvasTransform.\n */\n\n/**\n * @typedef {{0: CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D, 1: import('../../size.js').Size, 2: import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement, 3: ImageOrLabelDimensions, 4: number, 5: Array<*>, 6: Array<*>}} ReplayImageOrLabelArgs\n */\n\n/**\n * @template T\n * @typedef {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default, import(\"../../style/Style.js\").DeclutterMode): T} FeatureCallback\n */\n\n/**\n * @type {import(\"../../extent.js\").Extent}\n */\nconst tmpExtent = createEmpty();\n\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nconst p1 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nconst p2 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nconst p3 = [];\n/** @type {import(\"../../coordinate.js\").Coordinate} */\nconst p4 = [];\n\n/**\n * @param {ReplayImageOrLabelArgs} replayImageOrLabelArgs Arguments to replayImageOrLabel\n * @return {DeclutterEntry} Declutter rbush entry.\n */\nfunction getDeclutterBox(replayImageOrLabelArgs) {\n  return replayImageOrLabelArgs[3].declutterBox;\n}\n\nconst rtlRegEx = new RegExp(\n  /* eslint-disable prettier/prettier */\n  '[' +\n    String.fromCharCode(0x00591) + '-' + String.fromCharCode(0x008ff) +\n    String.fromCharCode(0x0fb1d) + '-' + String.fromCharCode(0x0fdff) +\n    String.fromCharCode(0x0fe70) + '-' + String.fromCharCode(0x0fefc) +\n    String.fromCharCode(0x10800) + '-' + String.fromCharCode(0x10fff) +\n    String.fromCharCode(0x1e800) + '-' + String.fromCharCode(0x1efff) +\n  ']'\n  /* eslint-enable prettier/prettier */\n);\n\n/**\n * @param {string} text Text.\n * @param {CanvasTextAlign} align Alignment.\n * @return {number} Text alignment.\n */\nfunction horizontalTextAlign(text, align) {\n  if (align === 'start') {\n    align = rtlRegEx.test(text) ? 'right' : 'left';\n  } else if (align === 'end') {\n    align = rtlRegEx.test(text) ? 'left' : 'right';\n  }\n  return TEXT_ALIGN[align];\n}\n\n/**\n * @param {Array<string>} acc Accumulator.\n * @param {string} line Line of text.\n * @param {number} i Index\n * @return {Array<string>} Accumulator.\n */\nfunction createTextChunks(acc, line, i) {\n  if (i > 0) {\n    acc.push('\\n', '');\n  }\n  acc.push(line, '');\n  return acc;\n}\n\n/**\n * Converts rich text to plain text for text along lines.\n * @param {string} result The resulting plain text.\n * @param {string} part Item of the rich text array.\n * @param {number} index Index of the item in the rich text array.\n * @return {string} The resulting plain text.\n */\nfunction richTextToPlainText(result, part, index) {\n  if (index % 2 === 0) {\n    result += part;\n  }\n  return result;\n}\n\nclass Executor {\n  /**\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {boolean} overlaps The replay can have overlapping geometries.\n   * @param {import(\"../canvas.js\").SerializableInstructions} instructions The serializable instructions.\n   * @param {boolean} [deferredRendering] Enable deferred rendering.\n   */\n  constructor(\n    resolution,\n    pixelRatio,\n    overlaps,\n    instructions,\n    deferredRendering,\n  ) {\n    /**\n     * @protected\n     * @type {boolean}\n     */\n    this.overlaps = overlaps;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.pixelRatio = pixelRatio;\n\n    /**\n     * @protected\n     * @const\n     * @type {number}\n     */\n    this.resolution = resolution;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.alignAndScaleFill_;\n\n    /**\n     * @protected\n     * @type {Array<*>}\n     */\n    this.instructions = instructions.instructions;\n\n    /**\n     * @protected\n     * @type {Array<number>}\n     */\n    this.coordinates = instructions.coordinates;\n\n    /**\n     * @private\n     * @type {!Object<number,import(\"../../coordinate.js\").Coordinate|Array<import(\"../../coordinate.js\").Coordinate>|Array<Array<import(\"../../coordinate.js\").Coordinate>>>}\n     */\n    this.coordinateCache_ = {};\n\n    /**\n     * @private\n     * @type {!import(\"../../transform.js\").Transform}\n     */\n    this.renderedTransform_ = createTransform();\n\n    /**\n     * @protected\n     * @type {Array<*>}\n     */\n    this.hitDetectionInstructions = instructions.hitDetectionInstructions;\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.pixelCoordinates_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.viewRotation_ = 0;\n\n    /**\n     * @type {!Object<string, import(\"../canvas.js\").FillState>}\n     */\n    this.fillStates = instructions.fillStates || {};\n\n    /**\n     * @type {!Object<string, import(\"../canvas.js\").StrokeState>}\n     */\n    this.strokeStates = instructions.strokeStates || {};\n\n    /**\n     * @type {!Object<string, import(\"../canvas.js\").TextState>}\n     */\n    this.textStates = instructions.textStates || {};\n\n    /**\n     * @private\n     * @type {Object<string, Object<string, number>>}\n     */\n    this.widths_ = {};\n\n    /**\n     * @private\n     * @type {Object<string, import(\"../canvas.js\").Label>}\n     */\n    this.labels_ = {};\n\n    /**\n     * @private\n     * @type {import(\"../canvas/ZIndexContext.js\").default}\n     */\n    this.zIndexContext_ = deferredRendering ? new ZIndexContext() : null;\n  }\n\n  /**\n   * @return {ZIndexContext} ZIndex context.\n   */\n  getZIndexContext() {\n    return this.zIndexContext_;\n  }\n\n  /**\n   * @param {string|Array<string>} text Text.\n   * @param {string} textKey Text style key.\n   * @param {string} fillKey Fill style key.\n   * @param {string} strokeKey Stroke style key.\n   * @return {import(\"../canvas.js\").Label} Label.\n   */\n  createLabel(text, textKey, fillKey, strokeKey) {\n    const key = text + textKey + fillKey + strokeKey;\n    if (this.labels_[key]) {\n      return this.labels_[key];\n    }\n    const strokeState = strokeKey ? this.strokeStates[strokeKey] : null;\n    const fillState = fillKey ? this.fillStates[fillKey] : null;\n    const textState = this.textStates[textKey];\n    const pixelRatio = this.pixelRatio;\n    const scale = [\n      textState.scale[0] * pixelRatio,\n      textState.scale[1] * pixelRatio,\n    ];\n    const align = textState.justify\n      ? TEXT_ALIGN[textState.justify]\n      : horizontalTextAlign(\n          Array.isArray(text) ? text[0] : text,\n          textState.textAlign || defaultTextAlign,\n        );\n    const strokeWidth =\n      strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0;\n\n    const chunks = Array.isArray(text)\n      ? text\n      : String(text).split('\\n').reduce(createTextChunks, []);\n\n    const {width, height, widths, heights, lineWidths} = getTextDimensions(\n      textState,\n      chunks,\n    );\n    const renderWidth = width + strokeWidth;\n    const contextInstructions = [];\n    // make canvas 2 pixels wider to account for italic text width measurement errors\n    const w = (renderWidth + 2) * scale[0];\n    const h = (height + strokeWidth) * scale[1];\n    /** @type {import(\"../canvas.js\").Label} */\n    const label = {\n      width: w < 0 ? Math.floor(w) : Math.ceil(w),\n      height: h < 0 ? Math.floor(h) : Math.ceil(h),\n      contextInstructions: contextInstructions,\n    };\n    if (scale[0] != 1 || scale[1] != 1) {\n      contextInstructions.push('scale', scale);\n    }\n    if (strokeKey) {\n      contextInstructions.push('strokeStyle', strokeState.strokeStyle);\n      contextInstructions.push('lineWidth', strokeWidth);\n      contextInstructions.push('lineCap', strokeState.lineCap);\n      contextInstructions.push('lineJoin', strokeState.lineJoin);\n      contextInstructions.push('miterLimit', strokeState.miterLimit);\n      contextInstructions.push('setLineDash', [strokeState.lineDash]);\n      contextInstructions.push('lineDashOffset', strokeState.lineDashOffset);\n    }\n    if (fillKey) {\n      contextInstructions.push('fillStyle', fillState.fillStyle);\n    }\n    contextInstructions.push('textBaseline', 'middle');\n    contextInstructions.push('textAlign', 'center');\n    const leftRight = 0.5 - align;\n    let x = align * renderWidth + leftRight * strokeWidth;\n    const strokeInstructions = [];\n    const fillInstructions = [];\n    let lineHeight = 0;\n    let lineOffset = 0;\n    let widthHeightIndex = 0;\n    let lineWidthIndex = 0;\n    let previousFont;\n    for (let i = 0, ii = chunks.length; i < ii; i += 2) {\n      const text = chunks[i];\n      if (text === '\\n') {\n        lineOffset += lineHeight;\n        lineHeight = 0;\n        x = align * renderWidth + leftRight * strokeWidth;\n        ++lineWidthIndex;\n        continue;\n      }\n      const font = chunks[i + 1] || textState.font;\n      if (font !== previousFont) {\n        if (strokeKey) {\n          strokeInstructions.push('font', font);\n        }\n        if (fillKey) {\n          fillInstructions.push('font', font);\n        }\n        previousFont = font;\n      }\n      lineHeight = Math.max(lineHeight, heights[widthHeightIndex]);\n      const fillStrokeArgs = [\n        text,\n        x +\n          leftRight * widths[widthHeightIndex] +\n          align * (widths[widthHeightIndex] - lineWidths[lineWidthIndex]),\n        0.5 * (strokeWidth + lineHeight) + lineOffset,\n      ];\n      x += widths[widthHeightIndex];\n      if (strokeKey) {\n        strokeInstructions.push('strokeText', fillStrokeArgs);\n      }\n      if (fillKey) {\n        fillInstructions.push('fillText', fillStrokeArgs);\n      }\n      ++widthHeightIndex;\n    }\n    Array.prototype.push.apply(contextInstructions, strokeInstructions);\n    Array.prototype.push.apply(contextInstructions, fillInstructions);\n    this.labels_[key] = label;\n    return label;\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D} context Context.\n   * @param {import(\"../../coordinate.js\").Coordinate} p1 1st point of the background box.\n   * @param {import(\"../../coordinate.js\").Coordinate} p2 2nd point of the background box.\n   * @param {import(\"../../coordinate.js\").Coordinate} p3 3rd point of the background box.\n   * @param {import(\"../../coordinate.js\").Coordinate} p4 4th point of the background box.\n   * @param {Array<*>} fillInstruction Fill instruction.\n   * @param {Array<*>} strokeInstruction Stroke instruction.\n   */\n  replayTextBackground_(\n    context,\n    p1,\n    p2,\n    p3,\n    p4,\n    fillInstruction,\n    strokeInstruction,\n  ) {\n    context.beginPath();\n    context.moveTo.apply(context, p1);\n    context.lineTo.apply(context, p2);\n    context.lineTo.apply(context, p3);\n    context.lineTo.apply(context, p4);\n    context.lineTo.apply(context, p1);\n    if (fillInstruction) {\n      this.alignAndScaleFill_ = /** @type {number} */ (fillInstruction[2]);\n      context.fillStyle = /** @type {string} */ (fillInstruction[1]);\n      this.fill_(context);\n    }\n    if (strokeInstruction) {\n      this.setStrokeStyle_(\n        context,\n        /** @type {Array<*>} */ (strokeInstruction),\n      );\n      context.stroke();\n    }\n  }\n\n  /**\n   * @private\n   * @param {number} sheetWidth Width of the sprite sheet.\n   * @param {number} sheetHeight Height of the sprite sheet.\n   * @param {number} centerX X.\n   * @param {number} centerY Y.\n   * @param {number} width Width.\n   * @param {number} height Height.\n   * @param {number} anchorX Anchor X.\n   * @param {number} anchorY Anchor Y.\n   * @param {number} originX Origin X.\n   * @param {number} originY Origin Y.\n   * @param {number} rotation Rotation.\n   * @param {import(\"../../size.js\").Size} scale Scale.\n   * @param {boolean} snapToPixel Snap to pixel.\n   * @param {Array<number>} padding Padding.\n   * @param {boolean} fillStroke Background fill or stroke.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @return {ImageOrLabelDimensions} Dimensions for positioning and decluttering the image or label.\n   */\n  calculateImageOrLabelDimensions_(\n    sheetWidth,\n    sheetHeight,\n    centerX,\n    centerY,\n    width,\n    height,\n    anchorX,\n    anchorY,\n    originX,\n    originY,\n    rotation,\n    scale,\n    snapToPixel,\n    padding,\n    fillStroke,\n    feature,\n  ) {\n    anchorX *= scale[0];\n    anchorY *= scale[1];\n    let x = centerX - anchorX;\n    let y = centerY - anchorY;\n\n    const w = width + originX > sheetWidth ? sheetWidth - originX : width;\n    const h = height + originY > sheetHeight ? sheetHeight - originY : height;\n    const boxW = padding[3] + w * scale[0] + padding[1];\n    const boxH = padding[0] + h * scale[1] + padding[2];\n    const boxX = x - padding[3];\n    const boxY = y - padding[0];\n\n    if (fillStroke || rotation !== 0) {\n      p1[0] = boxX;\n      p4[0] = boxX;\n      p1[1] = boxY;\n      p2[1] = boxY;\n      p2[0] = boxX + boxW;\n      p3[0] = p2[0];\n      p3[1] = boxY + boxH;\n      p4[1] = p3[1];\n    }\n\n    let transform;\n    if (rotation !== 0) {\n      transform = composeTransform(\n        createTransform(),\n        centerX,\n        centerY,\n        1,\n        1,\n        rotation,\n        -centerX,\n        -centerY,\n      );\n\n      applyTransform(transform, p1);\n      applyTransform(transform, p2);\n      applyTransform(transform, p3);\n      applyTransform(transform, p4);\n      createOrUpdate(\n        Math.min(p1[0], p2[0], p3[0], p4[0]),\n        Math.min(p1[1], p2[1], p3[1], p4[1]),\n        Math.max(p1[0], p2[0], p3[0], p4[0]),\n        Math.max(p1[1], p2[1], p3[1], p4[1]),\n        tmpExtent,\n      );\n    } else {\n      createOrUpdate(\n        Math.min(boxX, boxX + boxW),\n        Math.min(boxY, boxY + boxH),\n        Math.max(boxX, boxX + boxW),\n        Math.max(boxY, boxY + boxH),\n        tmpExtent,\n      );\n    }\n    if (snapToPixel) {\n      x = Math.round(x);\n      y = Math.round(y);\n    }\n    return {\n      drawImageX: x,\n      drawImageY: y,\n      drawImageW: w,\n      drawImageH: h,\n      originX: originX,\n      originY: originY,\n      declutterBox: {\n        minX: tmpExtent[0],\n        minY: tmpExtent[1],\n        maxX: tmpExtent[2],\n        maxY: tmpExtent[3],\n        value: feature,\n      },\n      canvasTransform: transform,\n      scale: scale,\n    };\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} context Context.\n   * @param {import('../../size.js').Size} scaledCanvasSize Scaled canvas size.\n   * @param {import(\"../canvas.js\").Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} imageOrLabel Image.\n   * @param {ImageOrLabelDimensions} dimensions Dimensions.\n   * @param {number} opacity Opacity.\n   * @param {Array<*>} fillInstruction Fill instruction.\n   * @param {Array<*>} strokeInstruction Stroke instruction.\n   * @return {boolean} The image or label was rendered.\n   */\n  replayImageOrLabel_(\n    context,\n    scaledCanvasSize,\n    imageOrLabel,\n    dimensions,\n    opacity,\n    fillInstruction,\n    strokeInstruction,\n  ) {\n    const fillStroke = !!(fillInstruction || strokeInstruction);\n\n    const box = dimensions.declutterBox;\n    const strokePadding = strokeInstruction\n      ? (strokeInstruction[2] * dimensions.scale[0]) / 2\n      : 0;\n    const intersects =\n      box.minX - strokePadding <= scaledCanvasSize[0] &&\n      box.maxX + strokePadding >= 0 &&\n      box.minY - strokePadding <= scaledCanvasSize[1] &&\n      box.maxY + strokePadding >= 0;\n\n    if (intersects) {\n      if (fillStroke) {\n        this.replayTextBackground_(\n          context,\n          p1,\n          p2,\n          p3,\n          p4,\n          /** @type {Array<*>} */ (fillInstruction),\n          /** @type {Array<*>} */ (strokeInstruction),\n        );\n      }\n      drawImageOrLabel(\n        context,\n        dimensions.canvasTransform,\n        opacity,\n        imageOrLabel,\n        dimensions.originX,\n        dimensions.originY,\n        dimensions.drawImageW,\n        dimensions.drawImageH,\n        dimensions.drawImageX,\n        dimensions.drawImageY,\n        dimensions.scale,\n      );\n    }\n    return true;\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   */\n  fill_(context) {\n    const alignAndScale = this.alignAndScaleFill_;\n    if (alignAndScale) {\n      const origin = applyTransform(this.renderedTransform_, [0, 0]);\n      const repeatSize = 512 * this.pixelRatio;\n      context.save();\n      context.translate(origin[0] % repeatSize, origin[1] % repeatSize);\n      if (alignAndScale !== 1) {\n        context.scale(alignAndScale, alignAndScale);\n      }\n    }\n    context.fill();\n    if (alignAndScale) {\n      context.restore();\n    }\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {Array<*>} instruction Instruction.\n   */\n  setStrokeStyle_(context, instruction) {\n    context.strokeStyle =\n      /** @type {import(\"../../colorlike.js\").ColorLike} */ (instruction[1]);\n    if (!instruction[1]) {\n      return;\n    }\n    context.lineWidth = /** @type {number} */ (instruction[2]);\n    context.lineCap = /** @type {CanvasLineCap} */ (instruction[3]);\n    context.lineJoin = /** @type {CanvasLineJoin} */ (instruction[4]);\n    context.miterLimit = /** @type {number} */ (instruction[5]);\n    context.lineDashOffset = /** @type {number} */ (instruction[7]);\n    context.setLineDash(/** @type {Array<number>} */ (instruction[6]));\n  }\n\n  /**\n   * @private\n   * @param {string|Array<string>} text The text to draw.\n   * @param {string} textKey The key of the text state.\n   * @param {string} strokeKey The key for the stroke state.\n   * @param {string} fillKey The key for the fill state.\n   * @return {{label: import(\"../canvas.js\").Label, anchorX: number, anchorY: number}} The text image and its anchor.\n   */\n  drawLabelWithPointPlacement_(text, textKey, strokeKey, fillKey) {\n    const textState = this.textStates[textKey];\n\n    const label = this.createLabel(text, textKey, fillKey, strokeKey);\n\n    const strokeState = this.strokeStates[strokeKey];\n    const pixelRatio = this.pixelRatio;\n    const align = horizontalTextAlign(\n      Array.isArray(text) ? text[0] : text,\n      textState.textAlign || defaultTextAlign,\n    );\n    const baseline = TEXT_ALIGN[textState.textBaseline || defaultTextBaseline];\n    const strokeWidth =\n      strokeState && strokeState.lineWidth ? strokeState.lineWidth : 0;\n\n    // Remove the 2 pixels we added in createLabel() for the anchor\n    const width = label.width / pixelRatio - 2 * textState.scale[0];\n    const anchorX = align * width + 2 * (0.5 - align) * strokeWidth;\n    const anchorY =\n      (baseline * label.height) / pixelRatio +\n      2 * (0.5 - baseline) * strokeWidth;\n\n    return {\n      label: label,\n      anchorX: anchorX,\n      anchorY: anchorY,\n    };\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import('../../size.js').Size} scaledCanvasSize Scaled canvas size\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   * @param {Array<*>} instructions Instructions array.\n   * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n   * @param {FeatureCallback<T>} [featureCallback] Feature callback.\n   * @param {import(\"../../extent.js\").Extent} [hitExtent] Only check\n   *     features that intersect this extent.\n   * @param {import(\"rbush\").default<DeclutterEntry>} [declutterTree] Declutter tree.\n   * @return {T|undefined} Callback result.\n   * @template T\n   */\n  execute_(\n    context,\n    scaledCanvasSize,\n    transform,\n    instructions,\n    snapToPixel,\n    featureCallback,\n    hitExtent,\n    declutterTree,\n  ) {\n    const zIndexContext = this.zIndexContext_;\n    /** @type {Array<number>} */\n    let pixelCoordinates;\n    if (this.pixelCoordinates_ && equals(transform, this.renderedTransform_)) {\n      pixelCoordinates = this.pixelCoordinates_;\n    } else {\n      if (!this.pixelCoordinates_) {\n        this.pixelCoordinates_ = [];\n      }\n      pixelCoordinates = transform2D(\n        this.coordinates,\n        0,\n        this.coordinates.length,\n        2,\n        transform,\n        this.pixelCoordinates_,\n      );\n      transformSetFromArray(this.renderedTransform_, transform);\n    }\n    let i = 0; // instruction index\n    const ii = instructions.length; // end of instructions\n    let d = 0; // data index\n    let dd; // end of per-instruction data\n    const offsetCoords = [];\n    let anchorX,\n      anchorY,\n      lineOffsetPx,\n      /** @type {import('../../style/Style.js').DeclutterMode} */\n      declutterMode,\n      prevX,\n      prevY,\n      roundX,\n      roundY,\n      image,\n      text,\n      textKey,\n      strokeKey,\n      fillKey;\n    let pendingFill = 0;\n    let pendingStroke = 0;\n    const coordinateCache = this.coordinateCache_;\n    const viewRotation = this.viewRotation_;\n    const viewRotationFromTransform =\n      Math.round(Math.atan2(-transform[1], transform[0]) * 1e12) / 1e12;\n\n    const state = /** @type {import(\"../../render.js\").State} */ ({\n      context: context,\n      pixelRatio: this.pixelRatio,\n      resolution: this.resolution,\n      rotation: viewRotation,\n    });\n\n    // When the batch size gets too big, performance decreases. 200 is a good\n    // balance between batch size and number of fill/stroke instructions.\n    const batchSize =\n      this.instructions != instructions || this.overlaps ? 0 : 200;\n    let /** @type {import(\"../../Feature.js\").FeatureLike} */ feature;\n    let x, y, currentGeometry;\n    while (i < ii) {\n      const instruction = instructions[i];\n      const type = /** @type {import(\"./Instruction.js\").default} */ (\n        instruction[0]\n      );\n      switch (type) {\n        case CanvasInstruction.BEGIN_GEOMETRY:\n          feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (\n            instruction[1]\n          );\n          currentGeometry = instruction[3];\n          if (!feature.getGeometry()) {\n            i = /** @type {number} */ (instruction[2]);\n          } else if (\n            hitExtent !== undefined &&\n            !intersects(hitExtent, currentGeometry.getExtent())\n          ) {\n            i = /** @type {number} */ (instruction[2]) + 1;\n          } else {\n            ++i;\n          }\n          if (zIndexContext) {\n            zIndexContext.zIndex = instruction[4];\n          }\n          break;\n        case CanvasInstruction.BEGIN_PATH:\n          if (pendingFill > batchSize) {\n            this.fill_(context);\n            pendingFill = 0;\n          }\n          if (pendingStroke > batchSize) {\n            context.stroke();\n            pendingStroke = 0;\n          }\n          if (!pendingFill && !pendingStroke) {\n            context.beginPath();\n            prevX = NaN;\n            prevY = NaN;\n          }\n          ++i;\n          break;\n        case CanvasInstruction.CIRCLE:\n          d = /** @type {number} */ (instruction[1]);\n          lineOffsetPx = /** @type {number} */ instruction[2] ?? 0;\n          const x1 = pixelCoordinates[d];\n          const y1 = pixelCoordinates[d + 1];\n          const x2 = pixelCoordinates[d + 2] - lineOffsetPx;\n          const y2 = pixelCoordinates[d + 3] - lineOffsetPx;\n          const dx = x2 - x1;\n          const dy = y2 - y1;\n          const r = Math.sqrt(dx * dx + dy * dy);\n          context.moveTo(x1 + r, y1);\n          context.arc(x1, y1, r, 0, 2 * Math.PI, true);\n          ++i;\n          break;\n        case CanvasInstruction.CLOSE_PATH:\n          context.closePath();\n          ++i;\n          break;\n        case CanvasInstruction.CUSTOM:\n          d = /** @type {number} */ (instruction[1]);\n          dd = instruction[2];\n          const geometry =\n            /** @type {import(\"../../geom/SimpleGeometry.js\").default} */ (\n              instruction[3]\n            );\n          const renderer = instruction[4];\n          const fn = instruction[5];\n          state.geometry = geometry;\n          state.feature = feature;\n          if (!(i in coordinateCache)) {\n            coordinateCache[i] = [];\n          }\n          const coords = coordinateCache[i];\n          if (fn) {\n            fn(pixelCoordinates, d, dd, 2, coords);\n          } else {\n            coords[0] = pixelCoordinates[d];\n            coords[1] = pixelCoordinates[d + 1];\n            coords.length = 2;\n          }\n          if (zIndexContext) {\n            zIndexContext.zIndex = instruction[6];\n          }\n          renderer(coords, state);\n          ++i;\n          break;\n        case CanvasInstruction.DRAW_IMAGE:\n          d = /** @type {number} */ (instruction[1]);\n          dd = /** @type {number} */ (instruction[2]);\n          image =\n            /** @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} */ (\n              instruction[3]\n            );\n\n          // Remaining arguments in DRAW_IMAGE are in alphabetical order\n          anchorX = /** @type {number} */ (instruction[4]);\n          anchorY = /** @type {number} */ (instruction[5]);\n          let height = /** @type {number} */ (instruction[6]);\n          const opacity = /** @type {number} */ (instruction[7]);\n          const originX = /** @type {number} */ (instruction[8]);\n          const originY = /** @type {number} */ (instruction[9]);\n          const rotateWithView = /** @type {boolean} */ (instruction[10]);\n          let rotation = /** @type {number} */ (instruction[11]);\n          const scale = /** @type {import(\"../../size.js\").Size} */ (\n            instruction[12]\n          );\n          let width = /** @type {number} */ (instruction[13]);\n          declutterMode = instruction[14] || 'declutter';\n          const declutterImageWithText =\n            /** @type {{args: import(\"../canvas.js\").DeclutterImageWithText, declutterMode: import('../../style/Style.js').DeclutterMode}} */ (\n              instruction[15]\n            );\n\n          if (!image && instruction.length >= 20) {\n            // create label images\n            text = /** @type {string} */ (instruction[19]);\n            textKey = /** @type {string} */ (instruction[20]);\n            strokeKey = /** @type {string} */ (instruction[21]);\n            fillKey = /** @type {string} */ (instruction[22]);\n            const labelWithAnchor = this.drawLabelWithPointPlacement_(\n              text,\n              textKey,\n              strokeKey,\n              fillKey,\n            );\n            image = labelWithAnchor.label;\n            instruction[3] = image;\n            const textOffsetX = /** @type {number} */ (instruction[23]);\n            anchorX = (labelWithAnchor.anchorX - textOffsetX) * this.pixelRatio;\n            instruction[4] = anchorX;\n            const textOffsetY = /** @type {number} */ (instruction[24]);\n            anchorY = (labelWithAnchor.anchorY - textOffsetY) * this.pixelRatio;\n            instruction[5] = anchorY;\n            height = image.height;\n            instruction[6] = height;\n            width = image.width;\n            instruction[13] = width;\n          }\n\n          let geometryWidths;\n          if (instruction.length > 25) {\n            geometryWidths = /** @type {number} */ (instruction[25]);\n          }\n\n          let padding, backgroundFillInstruction, backgroundStrokeInstruction;\n          if (instruction.length > 17) {\n            padding = /** @type {Array<number>} */ (instruction[16]);\n            backgroundFillInstruction = /** @type {Array<*>} */ (\n              instruction[17]\n            );\n            backgroundStrokeInstruction = /** @type {Array<*>} */ (\n              instruction[18]\n            );\n          } else {\n            padding = defaultPadding;\n            backgroundFillInstruction = null;\n            backgroundStrokeInstruction = null;\n          }\n\n          if (rotateWithView && viewRotationFromTransform) {\n            // Canvas is expected to be rotated to reverse view rotation.\n            rotation += viewRotation;\n          } else if (!rotateWithView && !viewRotationFromTransform) {\n            // Canvas is not rotated, images need to be rotated back to be north-up.\n            rotation -= viewRotation;\n          }\n          let widthIndex = 0;\n          for (; d < dd; d += 2) {\n            if (\n              geometryWidths &&\n              geometryWidths[widthIndex++] < width / this.pixelRatio\n            ) {\n              continue;\n            }\n            const dimensions = this.calculateImageOrLabelDimensions_(\n              image.width,\n              image.height,\n              pixelCoordinates[d],\n              pixelCoordinates[d + 1],\n              width,\n              height,\n              anchorX,\n              anchorY,\n              originX,\n              originY,\n              rotation,\n              scale,\n              snapToPixel,\n              padding,\n              !!backgroundFillInstruction || !!backgroundStrokeInstruction,\n              feature,\n            );\n            /** @type {ReplayImageOrLabelArgs} */\n            const args = [\n              context,\n              scaledCanvasSize,\n              image,\n              dimensions,\n              opacity,\n              backgroundFillInstruction,\n              backgroundStrokeInstruction,\n            ];\n            if (declutterTree) {\n              let imageArgs, imageDeclutterMode, imageDeclutterBox;\n              if (declutterImageWithText) {\n                const index = dd - d;\n                if (!declutterImageWithText[index]) {\n                  // We now have the image for an image+text combination.\n                  declutterImageWithText[index] = {args, declutterMode};\n                  // Don't render anything for now, wait for the text.\n                  continue;\n                }\n                const imageDeclutter = declutterImageWithText[index];\n                imageArgs = imageDeclutter.args;\n                imageDeclutterMode = imageDeclutter.declutterMode;\n                delete declutterImageWithText[index];\n                imageDeclutterBox = getDeclutterBox(imageArgs);\n              }\n              // We now have image and text for an image+text combination.\n              let renderImage, renderText;\n              if (\n                imageArgs &&\n                (imageDeclutterMode !== 'declutter' ||\n                  !declutterTree.collides(imageDeclutterBox))\n              ) {\n                renderImage = true;\n              }\n              if (\n                declutterMode !== 'declutter' ||\n                !declutterTree.collides(dimensions.declutterBox)\n              ) {\n                renderText = true;\n              }\n              if (\n                imageDeclutterMode === 'declutter' &&\n                declutterMode === 'declutter'\n              ) {\n                const render = renderImage && renderText;\n                renderImage = render;\n                renderText = render;\n              }\n              if (renderImage) {\n                if (imageDeclutterMode !== 'none') {\n                  declutterTree.insert(imageDeclutterBox);\n                }\n                this.replayImageOrLabel_.apply(this, imageArgs);\n              }\n              if (renderText) {\n                if (declutterMode !== 'none') {\n                  declutterTree.insert(dimensions.declutterBox);\n                }\n                this.replayImageOrLabel_.apply(this, args);\n              }\n            } else {\n              this.replayImageOrLabel_.apply(this, args);\n            }\n          }\n          ++i;\n          break;\n        case CanvasInstruction.DRAW_CHARS:\n          const begin = /** @type {number} */ (instruction[1]);\n          const end = /** @type {number} */ (instruction[2]);\n          const baseline = /** @type {number} */ (instruction[3]);\n          const overflow = /** @type {number} */ (instruction[4]);\n          fillKey = /** @type {string} */ (instruction[5]);\n          const maxAngle = /** @type {number} */ (instruction[6]);\n          const measurePixelRatio = /** @type {number} */ (instruction[7]);\n          const offsetY = /** @type {number} */ (instruction[8]);\n          strokeKey = /** @type {string} */ (instruction[9]);\n          const strokeWidth = /** @type {number} */ (instruction[10]);\n          text = /** @type {string|Array<string>} */ (instruction[11]);\n          if (Array.isArray(text)) {\n            //FIXME Add support for rich text along lines\n            text = text.reduce(richTextToPlainText, '');\n          }\n          textKey = /** @type {string} */ (instruction[12]);\n          const pixelRatioScale = [\n            /** @type {number} */ (instruction[13]),\n            /** @type {number} */ (instruction[13]),\n          ];\n          declutterMode = instruction[14] || 'declutter';\n\n          const textKeepUpright = /** @type {boolean} */ (instruction[15]);\n          const offsetX = /** @type {number} */ (instruction[16]);\n          const textState = this.textStates[textKey];\n          const font = textState.font;\n          const textScale = [\n            textState.scale[0] * measurePixelRatio,\n            textState.scale[1] * measurePixelRatio,\n          ];\n\n          let cachedWidths;\n          if (font in this.widths_) {\n            cachedWidths = this.widths_[font];\n          } else {\n            cachedWidths = {};\n            this.widths_[font] = cachedWidths;\n          }\n\n          const pathLength = lineStringLength(pixelCoordinates, begin, end, 2);\n          const textLength =\n            Math.abs(textScale[0]) *\n            measureAndCacheTextWidth(font, text, cachedWidths);\n          if (overflow || textLength <= pathLength) {\n            const textAlign = this.textStates[textKey].textAlign;\n            const startM =\n              (pathLength - textLength) * horizontalTextAlign(text, textAlign);\n            const parts = drawTextOnPath(\n              pixelCoordinates,\n              begin,\n              end,\n              2,\n              text,\n              startM,\n              maxAngle,\n              Math.abs(textScale[0]),\n              measureAndCacheTextWidth,\n              font,\n              cachedWidths,\n              viewRotationFromTransform ? 0 : this.viewRotation_,\n              textKeepUpright,\n            );\n            drawChars: if (parts) {\n              /** @type {Array<ReplayImageOrLabelArgs>} */\n              const replayImageOrLabelArgs = [];\n              let c, cc, chars, label, part;\n              if (strokeKey) {\n                for (c = 0, cc = parts.length; c < cc; ++c) {\n                  part = parts[c]; // x, y, anchorX, rotation, chunk\n                  chars = /** @type {string} */ (part[4]);\n                  label = this.createLabel(chars, textKey, '', strokeKey);\n                  anchorX =\n                    /** @type {number} */ (part[2]) +\n                    (textScale[0] < 0 ? -strokeWidth : strokeWidth) -\n                    offsetX;\n                  anchorY =\n                    baseline * label.height +\n                    ((0.5 - baseline) * 2 * strokeWidth * textScale[1]) /\n                      textScale[0] -\n                    offsetY;\n                  const dimensions = this.calculateImageOrLabelDimensions_(\n                    label.width,\n                    label.height,\n                    part[0],\n                    part[1],\n                    label.width,\n                    label.height,\n                    anchorX,\n                    anchorY,\n                    0,\n                    0,\n                    part[3],\n                    pixelRatioScale,\n                    false,\n                    defaultPadding,\n                    false,\n                    feature,\n                  );\n                  if (\n                    declutterTree &&\n                    declutterMode === 'declutter' &&\n                    declutterTree.collides(dimensions.declutterBox)\n                  ) {\n                    break drawChars;\n                  }\n                  replayImageOrLabelArgs.push([\n                    context,\n                    scaledCanvasSize,\n                    label,\n                    dimensions,\n                    1,\n                    null,\n                    null,\n                  ]);\n                }\n              }\n              if (fillKey) {\n                for (c = 0, cc = parts.length; c < cc; ++c) {\n                  part = parts[c]; // x, y, anchorX, rotation, chunk\n                  chars = /** @type {string} */ (part[4]);\n                  label = this.createLabel(chars, textKey, fillKey, '');\n                  anchorX = /** @type {number} */ (part[2]) - offsetX;\n                  anchorY = baseline * label.height - offsetY;\n                  const dimensions = this.calculateImageOrLabelDimensions_(\n                    label.width,\n                    label.height,\n                    part[0],\n                    part[1],\n                    label.width,\n                    label.height,\n                    anchorX,\n                    anchorY,\n                    0,\n                    0,\n                    part[3],\n                    pixelRatioScale,\n                    false,\n                    defaultPadding,\n                    false,\n                    feature,\n                  );\n                  if (\n                    declutterTree &&\n                    declutterMode === 'declutter' &&\n                    declutterTree.collides(dimensions.declutterBox)\n                  ) {\n                    break drawChars;\n                  }\n                  replayImageOrLabelArgs.push([\n                    context,\n                    scaledCanvasSize,\n                    label,\n                    dimensions,\n                    1,\n                    null,\n                    null,\n                  ]);\n                }\n              }\n              if (declutterTree && declutterMode !== 'none') {\n                declutterTree.load(replayImageOrLabelArgs.map(getDeclutterBox));\n              }\n              for (let i = 0, ii = replayImageOrLabelArgs.length; i < ii; ++i) {\n                this.replayImageOrLabel_.apply(this, replayImageOrLabelArgs[i]);\n              }\n            }\n          }\n          ++i;\n          break;\n        case CanvasInstruction.END_GEOMETRY:\n          if (featureCallback !== undefined) {\n            feature = /** @type {import(\"../../Feature.js\").FeatureLike} */ (\n              instruction[1]\n            );\n            const result = featureCallback(\n              feature,\n              currentGeometry,\n              declutterMode,\n            );\n            if (result) {\n              return result;\n            }\n          }\n          ++i;\n          break;\n        case CanvasInstruction.FILL:\n          if (batchSize) {\n            pendingFill++;\n          } else {\n            this.fill_(context);\n          }\n          ++i;\n          break;\n        case CanvasInstruction.MOVE_TO_LINE_TO:\n          d = /** @type {number} */ (instruction[1]);\n          dd = /** @type {number} */ (instruction[2]);\n          lineOffsetPx = /** @type {number|undefined} */ (instruction[3]);\n\n          let lineCoords, lineStart, lineEnd;\n          if (lineOffsetPx) {\n            const isClosedRing =\n              /** @type {boolean|undefined} */ (instruction[4]) ?? false;\n            const isClosedLine =\n              isClosedRing ||\n              (Math.abs(pixelCoordinates[d] - pixelCoordinates[dd - 2]) <\n                1e-6 &&\n                Math.abs(pixelCoordinates[d + 1] - pixelCoordinates[dd - 1]) <\n                  1e-6);\n            offsetLineString(\n              pixelCoordinates,\n              d,\n              dd,\n              2,\n              lineOffsetPx,\n              isClosedLine,\n              offsetCoords,\n            );\n            removeOffsetCycles(offsetCoords, 2, isClosedLine);\n            lineCoords = offsetCoords;\n            lineStart = 0;\n            lineEnd = lineCoords.length;\n          } else {\n            lineCoords = pixelCoordinates;\n            lineStart = d;\n            lineEnd = dd;\n          }\n          x = lineCoords[lineStart];\n          y = lineCoords[lineStart + 1];\n          context.moveTo(x, y);\n          prevX = (x + 0.5) | 0;\n          prevY = (y + 0.5) | 0;\n          for (let k = lineStart + 2; k < lineEnd; k += 2) {\n            x = lineCoords[k];\n            y = lineCoords[k + 1];\n            roundX = (x + 0.5) | 0;\n            roundY = (y + 0.5) | 0;\n            if (k == lineEnd - 2 || roundX !== prevX || roundY !== prevY) {\n              context.lineTo(x, y);\n              prevX = roundX;\n              prevY = roundY;\n            }\n          }\n          ++i;\n          break;\n        case CanvasInstruction.SET_FILL_STYLE:\n          this.alignAndScaleFill_ = instruction[2];\n\n          if (pendingFill) {\n            this.fill_(context);\n            pendingFill = 0;\n            if (pendingStroke) {\n              context.stroke();\n              pendingStroke = 0;\n            }\n          } else if (pendingStroke && instruction[1]) {\n            context.stroke();\n            pendingStroke = 0;\n          }\n\n          /** @type {import(\"../../colorlike.js\").ColorLike} */\n          context.fillStyle = instruction[1];\n          ++i;\n          break;\n        case CanvasInstruction.SET_STROKE_STYLE:\n          if (pendingFill && instruction[1]) {\n            this.fill_(context);\n            pendingFill = 0;\n          }\n          if (pendingStroke) {\n            context.stroke();\n            pendingStroke = 0;\n          }\n          this.setStrokeStyle_(context, /** @type {Array<*>} */ (instruction));\n          ++i;\n          break;\n        case CanvasInstruction.STROKE:\n          if (batchSize) {\n            pendingStroke++;\n          } else {\n            context.stroke();\n          }\n          ++i;\n          break;\n        default: // consume the instruction anyway, to avoid an infinite loop\n          ++i;\n          break;\n      }\n    }\n    if (pendingFill) {\n      this.fill_(context);\n    }\n    if (pendingStroke) {\n      context.stroke();\n    }\n    return undefined;\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import('../../size.js').Size} scaledCanvasSize Scaled canvas size.\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   * @param {number} viewRotation View rotation.\n   * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.\n   * @param {import(\"rbush\").default<DeclutterEntry>} [declutterTree] Declutter tree.\n   */\n  execute(\n    context,\n    scaledCanvasSize,\n    transform,\n    viewRotation,\n    snapToPixel,\n    declutterTree,\n  ) {\n    this.viewRotation_ = viewRotation;\n    this.execute_(\n      context,\n      scaledCanvasSize,\n      transform,\n      this.instructions,\n      snapToPixel,\n      undefined,\n      undefined,\n      declutterTree,\n    );\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   * @param {number} viewRotation View rotation.\n   * @param {FeatureCallback<T>} [featureCallback] Feature callback.\n   * @param {import(\"../../extent.js\").Extent} [hitExtent] Only check\n   *     features that intersect this extent.\n   * @return {T|undefined} Callback result.\n   * @template T\n   */\n  executeHitDetection(\n    context,\n    transform,\n    viewRotation,\n    featureCallback,\n    hitExtent,\n  ) {\n    this.viewRotation_ = viewRotation;\n    return this.execute_(\n      context,\n      [context.canvas.width, context.canvas.height],\n      transform,\n      this.hitDetectionInstructions,\n      true,\n      featureCallback,\n      hitExtent,\n    );\n  }\n}\n\nexport default Executor;\n","/**\n * @module ol/render/canvas/ExecutorGroup\n */\n\nimport {ascending, descending} from '../../array.js';\nimport {createCanvasContext2D} from '../../dom.js';\nimport {buffer, createEmpty, extendCoordinate} from '../../extent.js';\nimport {transform2D} from '../../geom/flat/transform.js';\nimport {isEmpty} from '../../obj.js';\nimport {\n  compose as composeTransform,\n  create as createTransform,\n} from '../../transform.js';\nimport Executor from './Executor.js';\n\n/**\n * @const\n * @type {Array<import(\"../canvas.js\").BuilderType>}\n */\nexport const ALL = [\n  'Polygon',\n  'Circle',\n  'LineString',\n  'Image',\n  'Text',\n  'Default',\n];\n\n/**\n * @const\n * @type {Array<import(\"../canvas.js\").BuilderType>}\n */\nexport const DECLUTTER = ['Image', 'Text'];\n\n/**\n * @const\n * @type {Array<import(\"../canvas.js\").BuilderType>}\n */\nexport const NON_DECLUTTER = ALL.filter(\n  (builderType) => !DECLUTTER.includes(builderType),\n);\n\n/** @type {boolean|undefined} */\nlet willReadFrequently = false;\n\n/** @type {boolean|undefined} */\nlet canvasReadsBenchmarked = false;\n\n/** Determine if canvas read operations are faster with willReadFrequently set to true or false */\nfunction benchmarkCanvasReads() {\n  let bestResult = 0;\n  /**\n   * @param {boolean} willReadFrequently Will read frequently.\n   * @return {number} Operation count.\n   */\n  const measure = (willReadFrequently) => {\n    const context = createCanvasContext2D(1, 1, null, {willReadFrequently});\n    let count = 0;\n    const start = performance.now();\n    for (; performance.now() - start < 50; ++count) {\n      context.fillStyle = `rgba(255,0,${count % 256},1)`;\n      context.fillRect(0, 0, 1, 1);\n      context.getImageData(0, 0, 1, 1);\n    }\n    bestResult = count > bestResult ? count : bestResult;\n    return count;\n  };\n\n  const measures = {\n    [measure(true)]: true,\n    [measure(false)]: false,\n    [measure(undefined)]: undefined,\n  };\n  willReadFrequently = measures[bestResult];\n  canvasReadsBenchmarked = true;\n}\n\nclass ExecutorGroup {\n  /**\n   * @param {import(\"../../extent.js\").Extent} maxExtent Max extent for clipping. When a\n   * `maxExtent` was set on the Builder for this executor group, the same `maxExtent`\n   * should be set here, unless the target context does not exceed that extent (which\n   * can be the case when rendering to tiles).\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {boolean} overlaps The executor group can have overlapping geometries.\n   * @param {!Object<string, !Object<import(\"../canvas.js\").BuilderType, import(\"../canvas.js\").SerializableInstructions>>} allInstructions\n   * The serializable instructions.\n   * @param {number} [renderBuffer] Optional rendering buffer.\n   * @param {boolean} [deferredRendering] Enable deferred rendering with renderDeferred().\n   */\n  constructor(\n    maxExtent,\n    resolution,\n    pixelRatio,\n    overlaps,\n    allInstructions,\n    renderBuffer,\n    deferredRendering,\n  ) {\n    /**\n     * @private\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.maxExtent_ = maxExtent;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.overlaps_ = overlaps;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelRatio_ = pixelRatio;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.resolution_ = resolution;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.renderBuffer_ = renderBuffer;\n\n    /**\n     * @private\n     * @type {!Object<string, !Object<string, import(\"./Executor.js\").default>>}\n     */\n    this.executorsByZIndex_ = {};\n\n    /**\n     * @private\n     * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n     */\n    this.hitDetectionContext_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.hitDetectionTransform_ = createTransform();\n\n    /**\n     * @private\n     * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n     */\n    this.renderedContext_ = null;\n\n    /**\n     * @private\n     * @type {Object<number, Array<import(\"./ZIndexContext.js\").default>>}\n     */\n    this.deferredZIndexContexts_ = {};\n\n    this.createExecutors_(allInstructions, deferredRendering);\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   */\n  clip(context, transform) {\n    const flatClipCoords = this.getClipCoords(transform);\n    context.beginPath();\n    context.moveTo(flatClipCoords[0], flatClipCoords[1]);\n    context.lineTo(flatClipCoords[2], flatClipCoords[3]);\n    context.lineTo(flatClipCoords[4], flatClipCoords[5]);\n    context.lineTo(flatClipCoords[6], flatClipCoords[7]);\n    context.clip();\n  }\n\n  /**\n   * Create executors and populate them using the provided instructions.\n   * @private\n   * @param {!Object<string, !Object<string, import(\"../canvas.js\").SerializableInstructions>>} allInstructions The serializable instructions\n   * @param {boolean} deferredRendering Enable deferred rendering.\n   */\n  createExecutors_(allInstructions, deferredRendering) {\n    for (const zIndex in allInstructions) {\n      let executors = this.executorsByZIndex_[zIndex];\n      if (executors === undefined) {\n        executors = {};\n        this.executorsByZIndex_[zIndex] = executors;\n      }\n      const instructionByZindex = allInstructions[zIndex];\n      for (const builderType in instructionByZindex) {\n        const instructions = instructionByZindex[builderType];\n        executors[builderType] = new Executor(\n          this.resolution_,\n          this.pixelRatio_,\n          this.overlaps_,\n          instructions,\n          deferredRendering,\n        );\n      }\n    }\n  }\n\n  /**\n   * @param {Array<import(\"../canvas.js\").BuilderType>} executors Executors.\n   * @return {boolean} Has executors of the provided types.\n   */\n  hasExecutors(executors) {\n    for (const zIndex in this.executorsByZIndex_) {\n      const candidates = this.executorsByZIndex_[zIndex];\n      for (let i = 0, ii = executors.length; i < ii; ++i) {\n        if (executors[i] in candidates) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {number} resolution Resolution.\n   * @param {number} rotation Rotation.\n   * @param {number} hitTolerance Hit tolerance in pixels.\n   * @param {function(import(\"../../Feature.js\").FeatureLike, import(\"../../geom/SimpleGeometry.js\").default, number): T} callback Feature callback.\n   * @param {Array<import(\"../../Feature.js\").FeatureLike>} declutteredFeatures Decluttered features.\n   * @return {T|undefined} Callback result.\n   * @template T\n   */\n  forEachFeatureAtCoordinate(\n    coordinate,\n    resolution,\n    rotation,\n    hitTolerance,\n    callback,\n    declutteredFeatures,\n  ) {\n    if (canvasReadsBenchmarked === false) {\n      benchmarkCanvasReads();\n    }\n\n    hitTolerance = Math.round(hitTolerance);\n    const contextSize = hitTolerance * 2 + 1;\n    const transform = composeTransform(\n      this.hitDetectionTransform_,\n      hitTolerance + 0.5,\n      hitTolerance + 0.5,\n      1 / resolution,\n      -1 / resolution,\n      -rotation,\n      -coordinate[0],\n      -coordinate[1],\n    );\n\n    const newContext = !this.hitDetectionContext_;\n    if (newContext) {\n      this.hitDetectionContext_ = createCanvasContext2D(\n        contextSize,\n        contextSize,\n        null,\n        {willReadFrequently},\n      );\n    }\n    const context = this.hitDetectionContext_;\n\n    if (\n      context.canvas.width !== contextSize ||\n      context.canvas.height !== contextSize\n    ) {\n      context.canvas.width = contextSize;\n      context.canvas.height = contextSize;\n    } else if (!newContext) {\n      context.clearRect(0, 0, contextSize, contextSize);\n    }\n\n    /** @type {import(\"../../extent.js\").Extent|undefined} */\n    let hitExtent;\n    if (this.renderBuffer_ !== undefined) {\n      hitExtent = createEmpty();\n      extendCoordinate(hitExtent, coordinate);\n      buffer(\n        hitExtent,\n        resolution * (this.renderBuffer_ + hitTolerance),\n        hitExtent,\n      );\n    }\n\n    const indexes = getPixelIndexArray(hitTolerance);\n\n    /** @type {import(\"../canvas.js\").BuilderType} */\n    let builderType;\n\n    /**\n     * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n     * @param {import(\"../../geom/SimpleGeometry.js\").default} geometry Geometry.\n     * @param {import('../../style/Style.js').DeclutterMode} declutterMode Declutter mode.\n     * @return {T|undefined} Callback result.\n     */\n    function featureCallback(feature, geometry, declutterMode) {\n      const imageData = context.getImageData(\n        0,\n        0,\n        contextSize,\n        contextSize,\n      ).data;\n      for (let i = 0, ii = indexes.length; i < ii; i++) {\n        if (imageData[indexes[i]] > 0) {\n          if (\n            !declutteredFeatures ||\n            declutterMode === 'none' ||\n            (builderType !== 'Image' && builderType !== 'Text') ||\n            declutteredFeatures.includes(feature)\n          ) {\n            const idx = (indexes[i] - 3) / 4;\n            const x = hitTolerance - (idx % contextSize);\n            const y = hitTolerance - ((idx / contextSize) | 0);\n            const result = callback(feature, geometry, x * x + y * y);\n            if (result) {\n              return result;\n            }\n          }\n          context.clearRect(0, 0, contextSize, contextSize);\n          break;\n        }\n      }\n      return undefined;\n    }\n\n    /** @type {Array<number>} */\n    const zs = Object.keys(this.executorsByZIndex_).map(Number);\n    zs.sort(ascending);\n\n    let i, j, executors, executor, result;\n    for (i = zs.length - 1; i >= 0; --i) {\n      const zIndexKey = zs[i].toString();\n      executors = this.executorsByZIndex_[zIndexKey];\n      for (j = ALL.length - 1; j >= 0; --j) {\n        builderType = ALL[j];\n        executor = executors[builderType];\n        if (executor !== undefined) {\n          result = executor.executeHitDetection(\n            context,\n            transform,\n            rotation,\n            featureCallback,\n            hitExtent,\n          );\n          if (result) {\n            return result;\n          }\n        }\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   * @return {Array<number>|null} Clip coordinates.\n   */\n  getClipCoords(transform) {\n    const maxExtent = this.maxExtent_;\n    if (!maxExtent) {\n      return null;\n    }\n    const minX = maxExtent[0];\n    const minY = maxExtent[1];\n    const maxX = maxExtent[2];\n    const maxY = maxExtent[3];\n    const flatClipCoords = [minX, minY, minX, maxY, maxX, maxY, maxX, minY];\n    transform2D(flatClipCoords, 0, 8, 2, transform, flatClipCoords);\n    return flatClipCoords;\n  }\n\n  /**\n   * @return {boolean} Is empty.\n   */\n  isEmpty() {\n    return isEmpty(this.executorsByZIndex_);\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} targetContext Context.\n   * @param {import('../../size.js').Size} scaledCanvasSize Scale of the context.\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   * @param {number} viewRotation View rotation.\n   * @param {boolean} snapToPixel Snap point symbols and test to integer pixel.\n   * @param {Array<import(\"../canvas.js\").BuilderType>} [builderTypes] Ordered replay types to replay.\n   *     Default is {@link module:ol/render/replay~ALL}\n   * @param {import(\"rbush\").default<import('./Executor.js').DeclutterEntry>|null} [declutterTree] Declutter tree.\n   *     When set to null, no decluttering is done, even when the executor group has a `ZIndexContext`.\n   */\n  execute(\n    targetContext,\n    scaledCanvasSize,\n    transform,\n    viewRotation,\n    snapToPixel,\n    builderTypes,\n    declutterTree,\n  ) {\n    const zs = Object.keys(this.executorsByZIndex_).map(Number);\n    zs.sort(declutterTree ? descending : ascending);\n\n    builderTypes = builderTypes ? builderTypes : ALL;\n    const maxBuilderTypes = ALL.length;\n    for (let i = 0, ii = zs.length; i < ii; ++i) {\n      const zIndexKey = zs[i].toString();\n      const replays = this.executorsByZIndex_[zIndexKey];\n      for (let j = 0, jj = builderTypes.length; j < jj; ++j) {\n        const builderType = builderTypes[j];\n        const replay = replays[builderType];\n        if (replay !== undefined) {\n          const zIndexContext =\n            declutterTree === null ? undefined : replay.getZIndexContext();\n          const context = zIndexContext\n            ? zIndexContext.getContext()\n            : targetContext;\n          const requireClip =\n            this.maxExtent_ &&\n            builderType !== 'Image' &&\n            builderType !== 'Text';\n          if (requireClip) {\n            context.save();\n            // setup clipping so that the parts of over-simplified geometries are not\n            // visible outside the current extent when panning\n            this.clip(context, transform);\n          }\n          if (\n            !zIndexContext ||\n            builderType === 'Text' ||\n            builderType === 'Image'\n          ) {\n            replay.execute(\n              context,\n              scaledCanvasSize,\n              transform,\n              viewRotation,\n              snapToPixel,\n              declutterTree,\n            );\n          } else {\n            zIndexContext.pushFunction((context) =>\n              replay.execute(\n                context,\n                scaledCanvasSize,\n                transform,\n                viewRotation,\n                snapToPixel,\n                declutterTree,\n              ),\n            );\n          }\n          if (requireClip) {\n            context.restore();\n          }\n          if (zIndexContext) {\n            zIndexContext.offset();\n            const index = zs[i] * maxBuilderTypes + ALL.indexOf(builderType);\n            if (!this.deferredZIndexContexts_[index]) {\n              this.deferredZIndexContexts_[index] = [];\n            }\n            this.deferredZIndexContexts_[index].push(zIndexContext);\n          }\n        }\n      }\n    }\n\n    this.renderedContext_ = targetContext;\n  }\n\n  getDeferredZIndexContexts() {\n    return this.deferredZIndexContexts_;\n  }\n\n  getRenderedContext() {\n    return this.renderedContext_;\n  }\n\n  renderDeferred() {\n    const deferredZIndexContexts = this.deferredZIndexContexts_;\n    const zs = Object.keys(deferredZIndexContexts).map(Number).sort(ascending);\n    for (let i = 0, ii = zs.length; i < ii; ++i) {\n      deferredZIndexContexts[zs[i]].forEach((zIndexContext) => {\n        zIndexContext.draw(this.renderedContext_); // FIXME Pass clip to replay for temporarily enabling clip\n        zIndexContext.clear();\n      });\n      deferredZIndexContexts[zs[i]].length = 0;\n    }\n  }\n}\n\n/**\n * This cache is used to store arrays of indexes for calculated pixel circles\n * to increase performance.\n * It is a static property to allow each Replaygroup to access it.\n * @type {Object<number, Array<number>>}\n */\nconst circlePixelIndexArrayCache = {};\n\n/**\n * This methods creates an array with indexes of all pixels within a circle,\n * ordered by how close they are to the center.\n * A cache is used to increase performance.\n * @param {number} radius Radius.\n * @return {Array<number>} An array with indexes within a circle.\n */\nexport function getPixelIndexArray(radius) {\n  if (circlePixelIndexArrayCache[radius] !== undefined) {\n    return circlePixelIndexArrayCache[radius];\n  }\n\n  const size = radius * 2 + 1;\n  const maxDistanceSq = radius * radius;\n  const distances = new Array(maxDistanceSq + 1);\n  for (let i = 0; i <= radius; ++i) {\n    for (let j = 0; j <= radius; ++j) {\n      const distanceSq = i * i + j * j;\n      if (distanceSq > maxDistanceSq) {\n        break;\n      }\n      let distance = distances[distanceSq];\n      if (!distance) {\n        distance = [];\n        distances[distanceSq] = distance;\n      }\n      distance.push(((radius + i) * size + (radius + j)) * 4 + 3);\n      if (i > 0) {\n        distance.push(((radius - i) * size + (radius + j)) * 4 + 3);\n      }\n      if (j > 0) {\n        distance.push(((radius + i) * size + (radius - j)) * 4 + 3);\n        if (i > 0) {\n          distance.push(((radius - i) * size + (radius - j)) * 4 + 3);\n        }\n      }\n    }\n  }\n\n  const pixelIndex = [];\n  for (let i = 0, ii = distances.length; i < ii; ++i) {\n    if (distances[i]) {\n      pixelIndex.push(...distances[i]);\n    }\n  }\n\n  circlePixelIndexArrayCache[radius] = pixelIndex;\n  return pixelIndex;\n}\n\nexport default ExecutorGroup;\n","/**\n * @module ol/render/canvas/Immediate\n */\n// FIXME test, especially polygons with holes and multipolygons\n// FIXME need to handle large thick features (where pixel size matters)\n// FIXME add offset and end to ol/geom/flat/transform~transform2D?\n\nimport {equals} from '../../array.js';\nimport {asColorLike} from '../../colorlike.js';\nimport {intersects} from '../../extent.js';\nimport {transformGeom2D} from '../../geom/SimpleGeometry.js';\nimport {\n  offsetLineString,\n  removeOffsetCycles,\n} from '../../geom/flat/lineoffset.js';\nimport {transform2D} from '../../geom/flat/transform.js';\nimport {toFixed} from '../../math.js';\nimport {\n  compose as composeTransform,\n  create as createTransform,\n} from '../../transform.js';\nimport VectorContext from '../VectorContext.js';\nimport {\n  defaultFillStyle,\n  defaultFont,\n  defaultLineCap,\n  defaultLineDash,\n  defaultLineDashOffset,\n  defaultLineJoin,\n  defaultLineWidth,\n  defaultMiterLimit,\n  defaultStrokeStyle,\n  defaultTextAlign,\n  defaultTextBaseline,\n} from '../canvas.js';\n\n/**\n * @classdesc\n * A concrete subclass of {@link module:ol/render/VectorContext~VectorContext} that implements\n * direct rendering of features and geometries to an HTML5 Canvas context.\n * Instances of this class are created internally by the library and\n * provided to application code as vectorContext member of the\n * {@link module:ol/render/Event~RenderEvent} object associated with postcompose, precompose and\n * render events emitted by layers and maps.\n */\nclass CanvasImmediateRenderer extends VectorContext {\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../../extent.js\").Extent} extent Extent.\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   * @param {number} viewRotation View rotation.\n   * @param {number} [squaredTolerance] Optional squared tolerance for simplification.\n   * @param {import(\"../../proj.js\").TransformFunction} [userTransform] Transform from user to view projection.\n   */\n  constructor(\n    context,\n    pixelRatio,\n    extent,\n    transform,\n    viewRotation,\n    squaredTolerance,\n    userTransform,\n  ) {\n    super();\n\n    /**\n     * @private\n     * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n     */\n    this.context_ = context;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelRatio_ = pixelRatio;\n\n    /**\n     * @private\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.extent_ = extent;\n\n    /**\n     * @private\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.transform_ = transform;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.transformRotation_ = transform\n      ? toFixed(Math.atan2(transform[1], transform[0]), 10)\n      : 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.viewRotation_ = viewRotation;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.squaredTolerance_ = squaredTolerance;\n\n    /**\n     * @private\n     * @type {import(\"../../proj.js\").TransformFunction}\n     */\n    this.userTransform_ = userTransform;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").FillState}\n     */\n    this.contextFillState_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").StrokeState}\n     */\n    this.contextStrokeState_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").TextState}\n     */\n    this.contextTextState_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").FillState}\n     */\n    this.fillState_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").StrokeState}\n     */\n    this.strokeState_ = null;\n\n    /**\n     * @private\n     * @type {import('../../DataTile.js').ImageLike}\n     */\n    this.image_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageAnchorX_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageAnchorY_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageHeight_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageOpacity_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageOriginX_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageOriginY_ = 0;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.imageRotateWithView_ = false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageRotation_ = 0;\n\n    /**\n     * @private\n     * @type {import(\"../../size.js\").Size}\n     */\n    this.imageScale_ = [0, 0];\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.imageWidth_ = 0;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.text_ = '';\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.textOffsetX_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.textOffsetY_ = 0;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.textRotateWithView_ = false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.textRotation_ = 0;\n\n    /**\n     * @private\n     * @type {import(\"../../size.js\").Size}\n     */\n    this.textScale_ = [0, 0];\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").FillState}\n     */\n    this.textFillState_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").StrokeState}\n     */\n    this.textStrokeState_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").TextState}\n     */\n    this.textState_ = null;\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.pixelCoordinates_ = [];\n\n    /**\n     * @private\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.tmpLocalTransform_ = createTransform();\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {number} end End.\n   * @param {number} stride Stride.\n   * @private\n   */\n  drawImages_(flatCoordinates, offset, end, stride) {\n    if (!this.image_) {\n      return;\n    }\n    const pixelCoordinates = transform2D(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      this.transform_,\n      this.pixelCoordinates_,\n    );\n    const context = this.context_;\n    const localTransform = this.tmpLocalTransform_;\n    const alpha = context.globalAlpha;\n    if (this.imageOpacity_ != 1) {\n      context.globalAlpha = alpha * this.imageOpacity_;\n    }\n    let rotation = this.imageRotation_;\n    if (this.transformRotation_ === 0) {\n      rotation -= this.viewRotation_;\n    }\n    if (this.imageRotateWithView_) {\n      rotation += this.viewRotation_;\n    }\n    for (let i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {\n      const x = pixelCoordinates[i] - this.imageAnchorX_;\n      const y = pixelCoordinates[i + 1] - this.imageAnchorY_;\n      if (\n        rotation !== 0 ||\n        this.imageScale_[0] != 1 ||\n        this.imageScale_[1] != 1\n      ) {\n        const centerX = x + this.imageAnchorX_;\n        const centerY = y + this.imageAnchorY_;\n        composeTransform(\n          localTransform,\n          centerX,\n          centerY,\n          1,\n          1,\n          rotation,\n          -centerX,\n          -centerY,\n        );\n        context.save();\n        context.transform.apply(context, localTransform);\n        context.translate(centerX, centerY);\n        context.scale(this.imageScale_[0], this.imageScale_[1]);\n        context.drawImage(\n          this.image_,\n          this.imageOriginX_,\n          this.imageOriginY_,\n          this.imageWidth_,\n          this.imageHeight_,\n          -this.imageAnchorX_,\n          -this.imageAnchorY_,\n          this.imageWidth_,\n          this.imageHeight_,\n        );\n        context.restore();\n      } else {\n        context.drawImage(\n          this.image_,\n          this.imageOriginX_,\n          this.imageOriginY_,\n          this.imageWidth_,\n          this.imageHeight_,\n          x,\n          y,\n          this.imageWidth_,\n          this.imageHeight_,\n        );\n      }\n    }\n    if (this.imageOpacity_ != 1) {\n      context.globalAlpha = alpha;\n    }\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {number} end End.\n   * @param {number} stride Stride.\n   * @private\n   */\n  drawText_(flatCoordinates, offset, end, stride) {\n    if (!this.textState_ || this.text_ === '') {\n      return;\n    }\n    if (this.textFillState_) {\n      this.setContextFillState_(this.textFillState_);\n    }\n    if (this.textStrokeState_) {\n      this.setContextStrokeState_(this.textStrokeState_);\n    }\n    this.setContextTextState_(this.textState_);\n    const pixelCoordinates = transform2D(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      this.transform_,\n      this.pixelCoordinates_,\n    );\n    const context = this.context_;\n    let rotation = this.textRotation_;\n    if (this.transformRotation_ === 0) {\n      rotation -= this.viewRotation_;\n    }\n    if (this.textRotateWithView_) {\n      rotation += this.viewRotation_;\n    }\n    for (; offset < end; offset += stride) {\n      const x = pixelCoordinates[offset] + this.textOffsetX_;\n      const y = pixelCoordinates[offset + 1] + this.textOffsetY_;\n      if (\n        rotation !== 0 ||\n        this.textScale_[0] != 1 ||\n        this.textScale_[1] != 1\n      ) {\n        context.save();\n        context.translate(x - this.textOffsetX_, y - this.textOffsetY_);\n        context.rotate(rotation);\n        context.translate(this.textOffsetX_, this.textOffsetY_);\n        context.scale(this.textScale_[0], this.textScale_[1]);\n        if (this.textStrokeState_) {\n          context.strokeText(this.text_, 0, 0);\n        }\n        if (this.textFillState_) {\n          context.fillText(this.text_, 0, 0);\n        }\n        context.restore();\n      } else {\n        if (this.textStrokeState_) {\n          context.strokeText(this.text_, x, y);\n        }\n        if (this.textFillState_) {\n          context.fillText(this.text_, x, y);\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {number} end End.\n   * @param {number} stride Stride.\n   * @param {boolean} close Close.\n   * @param {number} [strokeOffset] Stroke Offset.\n   * @private\n   * @return {number} end End.\n   */\n  moveToLineTo_(flatCoordinates, offset, end, stride, close, strokeOffset) {\n    const context = this.context_;\n    let pixelCoordinates = transform2D(\n      flatCoordinates,\n      offset,\n      end,\n      stride,\n      this.transform_,\n      this.pixelCoordinates_,\n    );\n    if (Math.abs(strokeOffset) > 0) {\n      const n = pixelCoordinates.length;\n      const isClosedLine =\n        close ||\n        (Math.abs(pixelCoordinates[0] - pixelCoordinates[n - 2]) < 1e-6 &&\n          Math.abs(pixelCoordinates[1] - pixelCoordinates[n - 1]) < 1e-6);\n      pixelCoordinates = offsetLineString(\n        pixelCoordinates,\n        0,\n        n,\n        2,\n        strokeOffset,\n        isClosedLine,\n        pixelCoordinates,\n      );\n      removeOffsetCycles(pixelCoordinates, 2, isClosedLine);\n    }\n    context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);\n    let length = pixelCoordinates.length;\n    if (close) {\n      length -= 2;\n    }\n    for (let i = 2; i < length; i += 2) {\n      context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);\n    }\n    if (close) {\n      context.closePath();\n    }\n    return end;\n  }\n\n  /**\n   * @param {Array<number>} flatCoordinates Flat coordinates.\n   * @param {number} offset Offset.\n   * @param {Array<number>} ends Ends.\n   * @param {number} stride Stride.\n   * @param {number} [strokeOffset] Stroke Offset.\n   * @private\n   * @return {number} End.\n   */\n  drawRings_(flatCoordinates, offset, ends, stride, strokeOffset) {\n    for (let i = 0, ii = ends.length; i < ii; ++i) {\n      offset = this.moveToLineTo_(\n        flatCoordinates,\n        offset,\n        ends[i],\n        stride,\n        true,\n        strokeOffset,\n      );\n    }\n    return offset;\n  }\n\n  /**\n   * Render a circle geometry into the canvas.  Rendering is immediate and uses\n   * the current fill and stroke styles.\n   *\n   * @param {import(\"../../geom/Circle.js\").default} geometry Circle geometry.\n   * @api\n   * @override\n   */\n  drawCircle(geometry) {\n    if (this.squaredTolerance_) {\n      geometry = /** @type {import(\"../../geom/Circle.js\").default} */ (\n        geometry.simplifyTransformed(\n          this.squaredTolerance_,\n          this.userTransform_,\n        )\n      );\n    }\n    if (!intersects(this.extent_, geometry.getExtent())) {\n      return;\n    }\n    if (this.fillState_ || this.strokeState_) {\n      if (this.fillState_) {\n        this.setContextFillState_(this.fillState_);\n      }\n      if (this.strokeState_) {\n        this.setContextStrokeState_(this.strokeState_);\n      }\n      const pixelCoordinates = transformGeom2D(\n        geometry,\n        this.transform_,\n        this.pixelCoordinates_,\n      );\n      const dx = pixelCoordinates[2] - pixelCoordinates[0];\n      const dy = pixelCoordinates[3] - pixelCoordinates[1];\n      const radius = Math.sqrt(dx * dx + dy * dy);\n      const context = this.context_;\n      context.beginPath();\n      context.arc(\n        pixelCoordinates[0],\n        pixelCoordinates[1],\n        radius,\n        0,\n        2 * Math.PI,\n      );\n      if (this.fillState_) {\n        context.fill();\n      }\n      if (this.strokeState_) {\n        context.stroke();\n      }\n    }\n    if (this.text_ !== '') {\n      this.drawText_(geometry.getCenter(), 0, 2, 2);\n    }\n  }\n\n  /**\n   * Set the rendering style.  Note that since this is an immediate rendering API,\n   * any `zIndex` on the provided style will be ignored.\n   *\n   * @param {import(\"../../style/Style.js\").default} style The rendering style.\n   * @api\n   * @override\n   */\n  setStyle(style) {\n    this.setFillStrokeStyle(style.getFill(), style.getStroke());\n    this.setImageStyle(style.getImage());\n    this.setTextStyle(style.getText());\n  }\n\n  /**\n   * @param {import(\"../../transform.js\").Transform} transform Transform.\n   */\n  setTransform(transform) {\n    this.transform_ = transform;\n  }\n\n  /**\n   * Render a geometry into the canvas.  Call\n   * {@link module:ol/render/canvas/Immediate~CanvasImmediateRenderer#setStyle renderer.setStyle()} first to set the rendering style.\n   *\n   * @param {import(\"../../geom/Geometry.js\").default|import(\"../Feature.js\").default} geometry The geometry to render.\n   * @api\n   * @override\n   */\n  drawGeometry(geometry) {\n    const type = geometry.getType();\n    switch (type) {\n      case 'Point':\n        this.drawPoint(\n          /** @type {import(\"../../geom/Point.js\").default} */ (geometry),\n        );\n        break;\n      case 'LineString':\n        this.drawLineString(\n          /** @type {import(\"../../geom/LineString.js\").default} */ (geometry),\n        );\n        break;\n      case 'Polygon':\n        this.drawPolygon(\n          /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry),\n        );\n        break;\n      case 'MultiPoint':\n        this.drawMultiPoint(\n          /** @type {import(\"../../geom/MultiPoint.js\").default} */ (geometry),\n        );\n        break;\n      case 'MultiLineString':\n        this.drawMultiLineString(\n          /** @type {import(\"../../geom/MultiLineString.js\").default} */ (\n            geometry\n          ),\n        );\n        break;\n      case 'MultiPolygon':\n        this.drawMultiPolygon(\n          /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (\n            geometry\n          ),\n        );\n        break;\n      case 'GeometryCollection':\n        this.drawGeometryCollection(\n          /** @type {import(\"../../geom/GeometryCollection.js\").default} */ (\n            geometry\n          ),\n        );\n        break;\n      case 'Circle':\n        this.drawCircle(\n          /** @type {import(\"../../geom/Circle.js\").default} */ (geometry),\n        );\n        break;\n      default:\n    }\n  }\n\n  /**\n   * Render a feature into the canvas.  Note that any `zIndex` on the provided\n   * style will be ignored - features are rendered immediately in the order that\n   * this method is called.  If you need `zIndex` support, you should be using an\n   * {@link module:ol/layer/Vector~VectorLayer} instead.\n   *\n   * @param {import(\"../../Feature.js\").default} feature Feature.\n   * @param {import(\"../../style/Style.js\").default} style Style.\n   * @api\n   * @override\n   */\n  drawFeature(feature, style) {\n    const geometry = style.getGeometryFunction()(feature);\n    if (!geometry) {\n      return;\n    }\n    this.setStyle(style);\n    this.drawGeometry(geometry);\n  }\n\n  /**\n   * Render a GeometryCollection to the canvas.  Rendering is immediate and\n   * uses the current styles appropriate for each geometry in the collection.\n   *\n   * @param {import(\"../../geom/GeometryCollection.js\").default} geometry Geometry collection.\n   * @override\n   */\n  drawGeometryCollection(geometry) {\n    const geometries = geometry.getGeometriesArray();\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      this.drawGeometry(geometries[i]);\n    }\n  }\n\n  /**\n   * Render a Point geometry into the canvas.  Rendering is immediate and uses\n   * the current style.\n   *\n   * @param {import(\"../../geom/Point.js\").default|import(\"../Feature.js\").default} geometry Point geometry.\n   * @override\n   */\n  drawPoint(geometry) {\n    if (this.squaredTolerance_) {\n      geometry = /** @type {import(\"../../geom/Point.js\").default} */ (\n        geometry.simplifyTransformed(\n          this.squaredTolerance_,\n          this.userTransform_,\n        )\n      );\n    }\n    const flatCoordinates = geometry.getFlatCoordinates();\n    const stride = geometry.getStride();\n    if (this.image_) {\n      this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n    }\n    if (this.text_ !== '') {\n      this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n    }\n  }\n\n  /**\n   * Render a MultiPoint geometry  into the canvas.  Rendering is immediate and\n   * uses the current style.\n   *\n   * @param {import(\"../../geom/MultiPoint.js\").default|import(\"../Feature.js\").default} geometry MultiPoint geometry.\n   * @override\n   */\n  drawMultiPoint(geometry) {\n    if (this.squaredTolerance_) {\n      geometry = /** @type {import(\"../../geom/MultiPoint.js\").default} */ (\n        geometry.simplifyTransformed(\n          this.squaredTolerance_,\n          this.userTransform_,\n        )\n      );\n    }\n    const flatCoordinates = geometry.getFlatCoordinates();\n    const stride = geometry.getStride();\n    if (this.image_) {\n      this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);\n    }\n    if (this.text_ !== '') {\n      this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);\n    }\n  }\n\n  /**\n   * Render a LineString into the canvas.  Rendering is immediate and uses\n   * the current style.\n   *\n   * @param {import(\"../../geom/LineString.js\").default|import(\"../Feature.js\").default} geometry LineString geometry.\n   * @override\n   */\n  drawLineString(geometry) {\n    if (this.squaredTolerance_) {\n      geometry = /** @type {import(\"../../geom/LineString.js\").default} */ (\n        geometry.simplifyTransformed(\n          this.squaredTolerance_,\n          this.userTransform_,\n        )\n      );\n    }\n    if (!intersects(this.extent_, geometry.getExtent())) {\n      return;\n    }\n    if (this.strokeState_) {\n      this.setContextStrokeState_(this.strokeState_);\n      const context = this.context_;\n      const flatCoordinates = geometry.getFlatCoordinates();\n      context.beginPath();\n      this.moveToLineTo_(\n        flatCoordinates,\n        0,\n        flatCoordinates.length,\n        geometry.getStride(),\n        false,\n        this.strokeState_.strokeOffset,\n      );\n      context.stroke();\n    }\n    if (this.text_ !== '') {\n      const flatMidpoint = geometry.getFlatMidpoint();\n      this.drawText_(flatMidpoint, 0, 2, 2);\n    }\n  }\n\n  /**\n   * Render a MultiLineString geometry into the canvas.  Rendering is immediate\n   * and uses the current style.\n   *\n   * @param {import(\"../../geom/MultiLineString.js\").default|import(\"../Feature.js\").default} geometry MultiLineString geometry.\n   * @override\n   */\n  drawMultiLineString(geometry) {\n    if (this.squaredTolerance_) {\n      geometry =\n        /** @type {import(\"../../geom/MultiLineString.js\").default} */ (\n          geometry.simplifyTransformed(\n            this.squaredTolerance_,\n            this.userTransform_,\n          )\n        );\n    }\n    const geometryExtent = geometry.getExtent();\n    if (!intersects(this.extent_, geometryExtent)) {\n      return;\n    }\n    if (this.strokeState_) {\n      this.setContextStrokeState_(this.strokeState_);\n      const context = this.context_;\n      const flatCoordinates = geometry.getFlatCoordinates();\n      let offset = 0;\n      const ends = /** @type {Array<number>} */ (geometry.getEnds());\n      const stride = geometry.getStride();\n      context.beginPath();\n      for (let i = 0, ii = ends.length; i < ii; ++i) {\n        offset = this.moveToLineTo_(\n          flatCoordinates,\n          offset,\n          ends[i],\n          stride,\n          false,\n          this.strokeState_.strokeOffset,\n        );\n      }\n      context.stroke();\n    }\n    if (this.text_ !== '') {\n      const flatMidpoints = geometry.getFlatMidpoints();\n      this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);\n    }\n  }\n\n  /**\n   * Render a Polygon geometry into the canvas.  Rendering is immediate and uses\n   * the current style.\n   *\n   * @param {import(\"../../geom/Polygon.js\").default|import(\"../Feature.js\").default} geometry Polygon geometry.\n   * @override\n   */\n  drawPolygon(geometry) {\n    if (this.squaredTolerance_) {\n      geometry = /** @type {import(\"../../geom/Polygon.js\").default} */ (\n        geometry.simplifyTransformed(\n          this.squaredTolerance_,\n          this.userTransform_,\n        )\n      );\n    }\n    if (!intersects(this.extent_, geometry.getExtent())) {\n      return;\n    }\n    if (this.strokeState_ || this.fillState_) {\n      if (this.fillState_) {\n        this.setContextFillState_(this.fillState_);\n      }\n      if (this.strokeState_) {\n        this.setContextStrokeState_(this.strokeState_);\n      }\n      const context = this.context_;\n      context.beginPath();\n      this.drawRings_(\n        geometry.getOrientedFlatCoordinates(),\n        0,\n        /** @type {Array<number>} */ (geometry.getEnds()),\n        geometry.getStride(),\n        this.strokeState_?.strokeOffset,\n      );\n      if (this.fillState_) {\n        context.fill();\n      }\n      if (this.strokeState_) {\n        context.stroke();\n      }\n    }\n    if (this.text_ !== '') {\n      const flatInteriorPoint = geometry.getFlatInteriorPoint();\n      this.drawText_(flatInteriorPoint, 0, 2, 2);\n    }\n  }\n\n  /**\n   * Render MultiPolygon geometry into the canvas.  Rendering is immediate and\n   * uses the current style.\n   * @param {import(\"../../geom/MultiPolygon.js\").default} geometry MultiPolygon geometry.\n   * @override\n   */\n  drawMultiPolygon(geometry) {\n    if (this.squaredTolerance_) {\n      geometry = /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (\n        geometry.simplifyTransformed(\n          this.squaredTolerance_,\n          this.userTransform_,\n        )\n      );\n    }\n    if (!intersects(this.extent_, geometry.getExtent())) {\n      return;\n    }\n    if (this.strokeState_ || this.fillState_) {\n      if (this.fillState_) {\n        this.setContextFillState_(this.fillState_);\n      }\n      if (this.strokeState_) {\n        this.setContextStrokeState_(this.strokeState_);\n      }\n      const context = this.context_;\n      const flatCoordinates = geometry.getOrientedFlatCoordinates();\n      let offset = 0;\n      const endss = geometry.getEndss();\n      const stride = geometry.getStride();\n      context.beginPath();\n      for (let i = 0, ii = endss.length; i < ii; ++i) {\n        const ends = endss[i];\n        offset = this.drawRings_(\n          flatCoordinates,\n          offset,\n          ends,\n          stride,\n          this.strokeState_?.strokeOffset,\n        );\n      }\n      if (this.fillState_) {\n        context.fill();\n      }\n      if (this.strokeState_) {\n        context.stroke();\n      }\n    }\n    if (this.text_ !== '') {\n      const flatInteriorPoints = geometry.getFlatInteriorPoints();\n      this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);\n    }\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").FillState} fillState Fill state.\n   * @private\n   */\n  setContextFillState_(fillState) {\n    const context = this.context_;\n    const contextFillState = this.contextFillState_;\n    if (!contextFillState) {\n      context.fillStyle = fillState.fillStyle;\n      this.contextFillState_ = {\n        fillStyle: fillState.fillStyle,\n      };\n    } else {\n      if (contextFillState.fillStyle != fillState.fillStyle) {\n        contextFillState.fillStyle = fillState.fillStyle;\n        context.fillStyle = fillState.fillStyle;\n      }\n    }\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").StrokeState} strokeState Stroke state.\n   * @private\n   */\n  setContextStrokeState_(strokeState) {\n    const context = this.context_;\n    const contextStrokeState = this.contextStrokeState_;\n    if (!contextStrokeState) {\n      context.lineCap = strokeState.lineCap;\n      context.setLineDash(strokeState.lineDash);\n      context.lineDashOffset = strokeState.lineDashOffset;\n      context.lineJoin = strokeState.lineJoin;\n      context.lineWidth = strokeState.lineWidth;\n      context.miterLimit = strokeState.miterLimit;\n      context.strokeStyle = strokeState.strokeStyle;\n      this.contextStrokeState_ = {\n        lineCap: strokeState.lineCap,\n        lineDash: strokeState.lineDash,\n        lineDashOffset: strokeState.lineDashOffset,\n        lineJoin: strokeState.lineJoin,\n        lineWidth: strokeState.lineWidth,\n        miterLimit: strokeState.miterLimit,\n        strokeStyle: strokeState.strokeStyle,\n      };\n    } else {\n      if (contextStrokeState.lineCap != strokeState.lineCap) {\n        contextStrokeState.lineCap = strokeState.lineCap;\n        context.lineCap = strokeState.lineCap;\n      }\n      if (!equals(contextStrokeState.lineDash, strokeState.lineDash)) {\n        context.setLineDash(\n          (contextStrokeState.lineDash = strokeState.lineDash),\n        );\n      }\n      if (contextStrokeState.lineDashOffset != strokeState.lineDashOffset) {\n        contextStrokeState.lineDashOffset = strokeState.lineDashOffset;\n        context.lineDashOffset = strokeState.lineDashOffset;\n      }\n      if (contextStrokeState.lineJoin != strokeState.lineJoin) {\n        contextStrokeState.lineJoin = strokeState.lineJoin;\n        context.lineJoin = strokeState.lineJoin;\n      }\n      if (contextStrokeState.lineWidth != strokeState.lineWidth) {\n        contextStrokeState.lineWidth = strokeState.lineWidth;\n        context.lineWidth = strokeState.lineWidth;\n      }\n      if (contextStrokeState.miterLimit != strokeState.miterLimit) {\n        contextStrokeState.miterLimit = strokeState.miterLimit;\n        context.miterLimit = strokeState.miterLimit;\n      }\n      if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {\n        contextStrokeState.strokeStyle = strokeState.strokeStyle;\n        context.strokeStyle = strokeState.strokeStyle;\n      }\n    }\n  }\n\n  /**\n   * @param {import(\"../canvas.js\").TextState} textState Text state.\n   * @private\n   */\n  setContextTextState_(textState) {\n    const context = this.context_;\n    const contextTextState = this.contextTextState_;\n    const textAlign = textState.textAlign\n      ? textState.textAlign\n      : defaultTextAlign;\n    if (!contextTextState) {\n      context.font = textState.font;\n      context.textAlign = textAlign;\n      context.textBaseline = textState.textBaseline;\n      this.contextTextState_ = {\n        font: textState.font,\n        textAlign: textAlign,\n        textBaseline: textState.textBaseline,\n      };\n    } else {\n      if (contextTextState.font != textState.font) {\n        contextTextState.font = textState.font;\n        context.font = textState.font;\n      }\n      if (contextTextState.textAlign != textAlign) {\n        contextTextState.textAlign = textAlign;\n        context.textAlign = textAlign;\n      }\n      if (contextTextState.textBaseline != textState.textBaseline) {\n        contextTextState.textBaseline = textState.textBaseline;\n        context.textBaseline = textState.textBaseline;\n      }\n    }\n  }\n\n  /**\n   * Set the fill and stroke style for subsequent draw operations.  To clear\n   * either fill or stroke styles, pass null for the appropriate parameter.\n   *\n   * @param {import(\"../../style/Fill.js\").default} fillStyle Fill style.\n   * @param {import(\"../../style/Stroke.js\").default} strokeStyle Stroke style.\n   * @override\n   */\n  setFillStrokeStyle(fillStyle, strokeStyle) {\n    if (!fillStyle) {\n      this.fillState_ = null;\n    } else {\n      const fillStyleColor = fillStyle.getColor();\n      this.fillState_ = {\n        fillStyle: asColorLike(\n          fillStyleColor ? fillStyleColor : defaultFillStyle,\n        ),\n      };\n    }\n    if (!strokeStyle) {\n      this.strokeState_ = null;\n    } else {\n      const strokeStyleColor = strokeStyle.getColor();\n      const strokeStyleLineCap = strokeStyle.getLineCap();\n      const strokeStyleLineDash = strokeStyle.getLineDash();\n      const strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();\n      const strokeStyleLineJoin = strokeStyle.getLineJoin();\n      const strokeStyleWidth = strokeStyle.getWidth();\n      const strokeStyleMiterLimit = strokeStyle.getMiterLimit();\n      const lineDash = strokeStyleLineDash\n        ? strokeStyleLineDash\n        : defaultLineDash;\n      const strokeOffset = strokeStyle.getOffset();\n      this.strokeState_ = {\n        lineCap:\n          strokeStyleLineCap !== undefined\n            ? strokeStyleLineCap\n            : defaultLineCap,\n        lineDash:\n          this.pixelRatio_ === 1\n            ? lineDash\n            : lineDash.map((n) => n * this.pixelRatio_),\n        lineDashOffset:\n          (strokeStyleLineDashOffset\n            ? strokeStyleLineDashOffset\n            : defaultLineDashOffset) * this.pixelRatio_,\n        lineJoin:\n          strokeStyleLineJoin !== undefined\n            ? strokeStyleLineJoin\n            : defaultLineJoin,\n        lineWidth:\n          (strokeStyleWidth !== undefined\n            ? strokeStyleWidth\n            : defaultLineWidth) * this.pixelRatio_,\n        miterLimit:\n          strokeStyleMiterLimit !== undefined\n            ? strokeStyleMiterLimit\n            : defaultMiterLimit,\n        strokeStyle: asColorLike(\n          strokeStyleColor ? strokeStyleColor : defaultStrokeStyle,\n        ),\n        strokeOffset: (strokeOffset ?? 0) * this.pixelRatio_,\n      };\n    }\n  }\n\n  /**\n   * Set the image style for subsequent draw operations.  Pass null to remove\n   * the image style.\n   *\n   * @param {import(\"../../style/Image.js\").default} imageStyle Image style.\n   * @override\n   */\n  setImageStyle(imageStyle) {\n    let imageSize;\n    if (!imageStyle || !(imageSize = imageStyle.getSize())) {\n      this.image_ = null;\n      return;\n    }\n    const imagePixelRatio = imageStyle.getPixelRatio(this.pixelRatio_);\n    const imageAnchor = imageStyle.getAnchor();\n    const imageOrigin = imageStyle.getOrigin();\n    this.image_ = imageStyle.getImage(this.pixelRatio_);\n    this.imageAnchorX_ = imageAnchor[0] * imagePixelRatio;\n    this.imageAnchorY_ = imageAnchor[1] * imagePixelRatio;\n    this.imageHeight_ = imageSize[1] * imagePixelRatio;\n    this.imageOpacity_ = imageStyle.getOpacity();\n    this.imageOriginX_ = imageOrigin[0];\n    this.imageOriginY_ = imageOrigin[1];\n    this.imageRotateWithView_ = imageStyle.getRotateWithView();\n    this.imageRotation_ = imageStyle.getRotation();\n    const imageScale = imageStyle.getScaleArray();\n    this.imageScale_ = [\n      (imageScale[0] * this.pixelRatio_) / imagePixelRatio,\n      (imageScale[1] * this.pixelRatio_) / imagePixelRatio,\n    ];\n    this.imageWidth_ = imageSize[0] * imagePixelRatio;\n  }\n\n  /**\n   * Set the text style for subsequent draw operations.  Pass null to\n   * remove the text style.\n   *\n   * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n   * @override\n   */\n  setTextStyle(textStyle) {\n    if (!textStyle) {\n      this.text_ = '';\n    } else {\n      const textFillStyle = textStyle.getFill();\n      if (!textFillStyle) {\n        this.textFillState_ = null;\n      } else {\n        const textFillStyleColor = textFillStyle.getColor();\n        this.textFillState_ = {\n          fillStyle: asColorLike(\n            textFillStyleColor ? textFillStyleColor : defaultFillStyle,\n          ),\n        };\n      }\n      const textStrokeStyle = textStyle.getStroke();\n      if (!textStrokeStyle) {\n        this.textStrokeState_ = null;\n      } else {\n        const textStrokeStyleColor = textStrokeStyle.getColor();\n        const textStrokeStyleLineCap = textStrokeStyle.getLineCap();\n        const textStrokeStyleLineDash = textStrokeStyle.getLineDash();\n        const textStrokeStyleLineDashOffset =\n          textStrokeStyle.getLineDashOffset();\n        const textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();\n        const textStrokeStyleWidth = textStrokeStyle.getWidth();\n        const textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();\n        this.textStrokeState_ = {\n          lineCap:\n            textStrokeStyleLineCap !== undefined\n              ? textStrokeStyleLineCap\n              : defaultLineCap,\n          lineDash: textStrokeStyleLineDash\n            ? textStrokeStyleLineDash\n            : defaultLineDash,\n          lineDashOffset: textStrokeStyleLineDashOffset\n            ? textStrokeStyleLineDashOffset\n            : defaultLineDashOffset,\n          lineJoin:\n            textStrokeStyleLineJoin !== undefined\n              ? textStrokeStyleLineJoin\n              : defaultLineJoin,\n          lineWidth:\n            textStrokeStyleWidth !== undefined\n              ? textStrokeStyleWidth\n              : defaultLineWidth,\n          miterLimit:\n            textStrokeStyleMiterLimit !== undefined\n              ? textStrokeStyleMiterLimit\n              : defaultMiterLimit,\n          strokeStyle: asColorLike(\n            textStrokeStyleColor ? textStrokeStyleColor : defaultStrokeStyle,\n          ),\n        };\n      }\n      const textFont = textStyle.getFont();\n      const textOffsetX = textStyle.getOffsetX();\n      const textOffsetY = textStyle.getOffsetY();\n      const textRotateWithView = textStyle.getRotateWithView();\n      const textRotation = textStyle.getRotation();\n      const textScale = textStyle.getScaleArray();\n      const textText = textStyle.getText();\n      const textTextAlign = textStyle.getTextAlign();\n      const textTextBaseline = textStyle.getTextBaseline();\n      this.textState_ = {\n        font: textFont !== undefined ? textFont : defaultFont,\n        textAlign:\n          textTextAlign !== undefined ? textTextAlign : defaultTextAlign,\n        textBaseline:\n          textTextBaseline !== undefined\n            ? textTextBaseline\n            : defaultTextBaseline,\n      };\n      this.text_ =\n        textText !== undefined\n          ? Array.isArray(textText)\n            ? textText.reduce((acc, t, i) => (acc += i % 2 ? ' ' : t), '')\n            : textText\n          : '';\n      this.textOffsetX_ =\n        textOffsetX !== undefined ? this.pixelRatio_ * textOffsetX : 0;\n      this.textOffsetY_ =\n        textOffsetY !== undefined ? this.pixelRatio_ * textOffsetY : 0;\n      this.textRotateWithView_ =\n        textRotateWithView !== undefined ? textRotateWithView : false;\n      this.textRotation_ = textRotation !== undefined ? textRotation : 0;\n      this.textScale_ = [\n        this.pixelRatio_ * textScale[0],\n        this.pixelRatio_ * textScale[1],\n      ];\n    }\n  }\n}\n\nexport default CanvasImmediateRenderer;\n","/**\n * @module ol/render/canvas/Instruction\n */\n\n/**\n * @enum {number}\n */\nconst Instruction = {\n  BEGIN_GEOMETRY: 0,\n  BEGIN_PATH: 1,\n  CIRCLE: 2,\n  CLOSE_PATH: 3,\n  CUSTOM: 4,\n  DRAW_CHARS: 5,\n  DRAW_IMAGE: 6,\n  END_GEOMETRY: 7,\n  FILL: 8,\n  MOVE_TO_LINE_TO: 9,\n  SET_FILL_STYLE: 10,\n  SET_STROKE_STYLE: 11,\n  STROKE: 12,\n};\n\n/**\n * @type {Array<Instruction>}\n */\nexport const fillInstruction = [Instruction.FILL];\n\n/**\n * @type {Array<Instruction>}\n */\nexport const strokeInstruction = [Instruction.STROKE];\n\n/**\n * @type {Array<Instruction>}\n */\nexport const beginPathInstruction = [Instruction.BEGIN_PATH];\n\n/**\n * @type {Array<Instruction>}\n */\nexport const closePathInstruction = [Instruction.CLOSE_PATH];\n\nexport default Instruction;\n","/**\n * @module ol/geom/flat/clip\n */\n\n/**\n * Start parameter of the portion of the last clipped segment that is inside the\n * extent. Set by {@link clipSegment}, read right after a `true` return to avoid\n * allocating a result array per segment.\n * @type {number}\n */\nlet clipSegmentStart = 0;\n\n/**\n * End parameter of the portion of the last clipped segment that is inside the\n * extent. See {@link clipSegmentStart}.\n * @type {number}\n */\nlet clipSegmentEnd = 1;\n\n/**\n * Clip a segment to a rectangular extent. On a `true` return, the inside\n * portion is `[clipSegmentStart, clipSegmentEnd]` in segment parameters. No\n * allocations are made, so the result globals must be read before the next\n * call.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {number} x0 Segment start X.\n * @param {number} y0 Segment start Y.\n * @param {number} x1 Segment end X.\n * @param {number} y1 Segment end Y.\n * @return {boolean} The segment intersects the extent.\n */\nfunction clipSegment(minX, minY, maxX, maxY, x0, y0, x1, y1) {\n  const dx = x1 - x0;\n  const dy = y1 - y0;\n  let t0 = 0;\n  let t1 = 1;\n\n  // X slab.\n  if (dx === 0) {\n    if (x0 < minX || x0 > maxX) {\n      return false;\n    }\n  } else {\n    let ta = (minX - x0) / dx;\n    let tb = (maxX - x0) / dx;\n    if (ta > tb) {\n      const tmp = ta;\n      ta = tb;\n      tb = tmp;\n    }\n    if (ta > t0) {\n      t0 = ta;\n    }\n    if (tb < t1) {\n      t1 = tb;\n    }\n    if (t0 > t1) {\n      return false;\n    }\n  }\n\n  // Y slab.\n  if (dy === 0) {\n    if (y0 < minY || y0 > maxY) {\n      return false;\n    }\n  } else {\n    let ta = (minY - y0) / dy;\n    let tb = (maxY - y0) / dy;\n    if (ta > tb) {\n      const tmp = ta;\n      ta = tb;\n      tb = tmp;\n    }\n    if (ta > t0) {\n      t0 = ta;\n    }\n    if (tb < t1) {\n      t1 = tb;\n    }\n    if (t0 > t1) {\n      return false;\n    }\n  }\n\n  clipSegmentStart = t0;\n  clipSegmentEnd = t1;\n  return true;\n}\n\n/**\n * Clip flat line strings to the given extent. Parts outside the extent are\n * dropped and a vertex is inserted where a segment crosses the boundary. A line\n * that leaves and re-enters the extent is split into separate parts so that\n * positions derived from the result (e.g. labels placed along the line) stay\n * within the extent. Output coordinates have a stride of 2.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {Array<number>} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent to clip to.\n * @return {{flatCoordinates: Array<number>, ends: Array<number>}} Clipped flat\n *     coordinates and ends.\n */\nexport function clipFlatLineStrings(flatCoordinates, ends, stride, extent) {\n  const minX = extent[0];\n  const minY = extent[1];\n  const maxX = extent[2];\n  const maxY = extent[3];\n  const dest = [];\n  const destEnds = [];\n  let open = false;\n  let lastX, lastY;\n  let offset = 0;\n  for (let e = 0, ee = ends.length; e < ee; ++e) {\n    const end = ends[e];\n    let prevX = flatCoordinates[offset];\n    let prevY = flatCoordinates[offset + 1];\n    let lineHasLast = false;\n    for (let i = offset + stride; i < end; i += stride) {\n      const curX = flatCoordinates[i];\n      const curY = flatCoordinates[i + 1];\n      if (clipSegment(minX, minY, maxX, maxY, prevX, prevY, curX, curY)) {\n        const dx = curX - prevX;\n        const dy = curY - prevY;\n        const ax = prevX + clipSegmentStart * dx;\n        const ay = prevY + clipSegmentStart * dy;\n        const bx = prevX + clipSegmentEnd * dx;\n        const by = prevY + clipSegmentEnd * dy;\n        if (open && lineHasLast && ax === lastX && ay === lastY) {\n          dest.push(bx, by);\n        } else {\n          if (open) {\n            destEnds.push(dest.length);\n          }\n          dest.push(ax, ay, bx, by);\n          open = true;\n        }\n        lastX = bx;\n        lastY = by;\n        lineHasLast = true;\n      }\n      prevX = curX;\n      prevY = curY;\n    }\n    offset = end;\n  }\n  if (open) {\n    destEnds.push(dest.length);\n  }\n  return {flatCoordinates: dest, ends: destEnds};\n}\n","import {lerp} from '../../math.js';\n\n/**\n * Creates chunks of equal length from a linestring\n * @param {number} chunkLength Length of each chunk.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Start offset of the `flatCoordinates`.\n * @param {number} end End offset of the `flatCoordinates`.\n * @param {number} stride Stride.\n * @return {Array<Array<number>>} Chunks of linestrings with stride 2.\n */\nexport function lineChunk(chunkLength, flatCoordinates, offset, end, stride) {\n  const chunks = [];\n  let cursor = offset;\n  let chunkM = 0;\n  let currentChunk = flatCoordinates.slice(offset, 2);\n  while (chunkM < chunkLength && cursor + stride < end) {\n    const [x1, y1] = currentChunk.slice(-2);\n    const x2 = flatCoordinates[cursor + stride];\n    const y2 = flatCoordinates[cursor + stride + 1];\n    const segmentLength = Math.sqrt(\n      (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1),\n    );\n    chunkM += segmentLength;\n    if (chunkM >= chunkLength) {\n      const m = (chunkLength - chunkM + segmentLength) / segmentLength;\n      const x = lerp(x1, x2, m);\n      const y = lerp(y1, y2, m);\n      currentChunk.push(x, y);\n      chunks.push(currentChunk);\n      currentChunk = [x, y];\n      if (chunkM == chunkLength) {\n        cursor += stride;\n      }\n      chunkM = 0;\n    } else if (chunkM < chunkLength) {\n      currentChunk.push(\n        flatCoordinates[cursor + stride],\n        flatCoordinates[cursor + stride + 1],\n      );\n      cursor += stride;\n    } else {\n      const missing = segmentLength - chunkM;\n      const x = lerp(x1, x2, missing / segmentLength);\n      const y = lerp(y1, y2, missing / segmentLength);\n      currentChunk.push(x, y);\n      chunks.push(currentChunk);\n      currentChunk = [x, y];\n      chunkM = 0;\n      cursor += stride;\n    }\n  }\n  if (chunkM > 0) {\n    chunks.push(currentChunk);\n  }\n  return chunks;\n}\n","/**\n * @module ol/geom/flat/straightchunk\n */\n\n/**\n * @param {number} maxAngle Maximum acceptable angle delta between segments.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Array<number>} Start and end of the first suitable chunk of the\n * given `flatCoordinates`.\n */\nexport function matchingChunk(maxAngle, flatCoordinates, offset, end, stride) {\n  let chunkStart = offset;\n  let chunkEnd = offset;\n  let chunkM = 0;\n  let m = 0;\n  let start = offset;\n  let acos, i, m12, m23, x1, y1, x12, y12, x23, y23;\n  for (i = offset; i < end; i += stride) {\n    const x2 = flatCoordinates[i];\n    const y2 = flatCoordinates[i + 1];\n    if (x1 !== undefined) {\n      x23 = x2 - x1;\n      y23 = y2 - y1;\n      m23 = Math.sqrt(x23 * x23 + y23 * y23);\n      if (x12 !== undefined) {\n        m += m12;\n        acos = Math.acos((x12 * x23 + y12 * y23) / (m12 * m23));\n        if (acos > maxAngle) {\n          if (m > chunkM) {\n            chunkM = m;\n            chunkStart = start;\n            chunkEnd = i;\n          }\n          m = 0;\n          start = i - stride;\n        }\n      }\n      m12 = m23;\n      x12 = x23;\n      y12 = y23;\n    }\n    x1 = x2;\n    y1 = y2;\n  }\n  m += m23;\n  return m > chunkM ? [start, i] : [chunkStart, chunkEnd];\n}\n","/**\n * @module ol/render/canvas/TextBuilder\n */\nimport {asColorLike} from '../../colorlike.js';\nimport {containsExtent, intersects} from '../../extent.js';\nimport {clipFlatLineStrings} from '../../geom/flat/clip.js';\nimport {lineChunk} from '../../geom/flat/linechunk.js';\nimport {matchingChunk} from '../../geom/flat/straightchunk.js';\nimport {getUid} from '../../util.js';\nimport {\n  defaultFillStyle,\n  defaultFont,\n  defaultLineCap,\n  defaultLineDash,\n  defaultLineDashOffset,\n  defaultLineJoin,\n  defaultLineWidth,\n  defaultMiterLimit,\n  defaultPadding,\n  defaultStrokeStyle,\n  defaultTextAlign,\n  defaultTextBaseline,\n  registerFont,\n} from '../canvas.js';\nimport CanvasBuilder from './Builder.js';\nimport CanvasInstruction from './Instruction.js';\n/**\n * @const\n * @type {{left: 0, center: 0.5, right: 1, top: 0, middle: 0.5, hanging: 0.2, alphabetic: 0.8, ideographic: 0.8, bottom: 1}}\n */\nexport const TEXT_ALIGN = {\n  'left': 0,\n  'center': 0.5,\n  'right': 1,\n  'top': 0,\n  'middle': 0.5,\n  'hanging': 0.2,\n  'alphabetic': 0.8,\n  'ideographic': 0.8,\n  'bottom': 1,\n};\n\nclass CanvasTextBuilder extends CanvasBuilder {\n  /**\n   * @param {number} tolerance Tolerance.\n   * @param {import(\"../../extent.js\").Extent} maxExtent Maximum extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   */\n  constructor(tolerance, maxExtent, resolution, pixelRatio) {\n    super(tolerance, maxExtent, resolution, pixelRatio);\n\n    /**\n     * @private\n     * @type {Array<HTMLCanvasElement>}\n     */\n    this.labels_ = null;\n\n    /**\n     * @private\n     * @type {string|Array<string>}\n     */\n    this.text_ = '';\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.textOffsetX_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.textOffsetY_ = 0;\n\n    /**\n     * @private\n     * @type {boolean|undefined}\n     */\n    this.textRotateWithView_ = undefined;\n\n    /**\n     * @private\n     * @type {boolean|undefined}\n     */\n    this.textKeepUpright_ = undefined;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.textRotation_ = 0;\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").FillState}\n     */\n    this.textFillState_ = null;\n\n    /**\n     * @type {!Object<string, import(\"../canvas.js\").FillState>}\n     */\n    this.fillStates = {};\n    this.fillStates[defaultFillStyle] = {fillStyle: defaultFillStyle};\n\n    /**\n     * @private\n     * @type {?import(\"../canvas.js\").StrokeState}\n     */\n    this.textStrokeState_ = null;\n\n    /**\n     * @type {!Object<string, import(\"../canvas.js\").StrokeState>}\n     */\n    this.strokeStates = {};\n\n    /**\n     * @private\n     * @type {import(\"../canvas.js\").TextState}\n     */\n    this.textState_ = /** @type {import(\"../canvas.js\").TextState} */ ({});\n\n    /**\n     * @type {!Object<string, import(\"../canvas.js\").TextState>}\n     */\n    this.textStates = {};\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.textKey_ = '';\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.fillKey_ = '';\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.strokeKey_ = '';\n\n    /**\n     * @private\n     * @type {import('../../style/Style.js').DeclutterMode}\n     */\n    this.declutterMode_ = undefined;\n\n    /**\n     * Data shared with an image builder for combined decluttering.\n     * @private\n     * @type {import(\"../canvas.js\").DeclutterImageWithText}\n     */\n    this.declutterImageWithText_ = undefined;\n  }\n\n  /**\n   * @return {import(\"../canvas.js\").SerializableInstructions} the serializable instructions.\n   * @override\n   */\n  finish() {\n    const instructions = super.finish();\n    instructions.textStates = this.textStates;\n    instructions.fillStates = this.fillStates;\n    instructions.strokeStates = this.strokeStates;\n    return instructions;\n  }\n\n  /**\n   * @param {import(\"../../geom/SimpleGeometry.js\").default|import(\"../Feature.js\").default} geometry Geometry.\n   * @param {import(\"../../Feature.js\").FeatureLike} feature Feature.\n   * @param {number} [index] Render order index.\n   * @override\n   */\n  drawText(geometry, feature, index) {\n    const fillState = this.textFillState_;\n    const strokeState = this.textStrokeState_;\n    const textState = this.textState_;\n    if (this.text_ === '' || !textState || (!fillState && !strokeState)) {\n      return;\n    }\n\n    const coordinates = this.coordinates;\n    let begin = coordinates.length;\n\n    const geometryType = geometry.getType();\n    let flatCoordinates = null;\n    let stride = geometry.getStride();\n\n    if (\n      textState.placement === 'line' &&\n      (geometryType == 'LineString' ||\n        geometryType == 'MultiLineString' ||\n        geometryType == 'Polygon' ||\n        geometryType == 'MultiPolygon')\n    ) {\n      const geometryExtent = geometry.getExtent();\n      if (!intersects(this.maxExtent, geometryExtent)) {\n        return;\n      }\n      let ends;\n      flatCoordinates = geometry.getFlatCoordinates();\n      if (geometryType == 'LineString') {\n        ends = [flatCoordinates.length];\n      } else if (geometryType == 'MultiLineString') {\n        ends = /** @type {import(\"../../geom/MultiLineString.js\").default} */ (\n          geometry\n        ).getEnds();\n      } else if (geometryType == 'Polygon') {\n        ends = /** @type {import(\"../../geom/Polygon.js\").default} */ (geometry)\n          .getEnds()\n          .slice(0, 1);\n      } else if (geometryType == 'MultiPolygon') {\n        const endss =\n          /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (\n            geometry\n          ).getEndss();\n        ends = [];\n        for (let i = 0, ii = endss.length; i < ii; ++i) {\n          ends.push(endss[i][0]);\n        }\n      }\n      if (\n        (geometryType == 'LineString' || geometryType == 'MultiLineString') &&\n        !containsExtent(this.getBufferedMaxExtent(), geometryExtent)\n      ) {\n        // Clip the line to the rendered extent so the label is anchored within\n        // the rendered area instead of along the full geometry, whose center\n        // can lie outside it.\n        const clipped = clipFlatLineStrings(\n          flatCoordinates,\n          ends,\n          stride,\n          this.getBufferedMaxExtent(),\n        );\n        flatCoordinates = clipped.flatCoordinates;\n        ends = clipped.ends;\n        stride = 2;\n        if (ends.length === 0) {\n          return;\n        }\n      }\n      this.beginGeometry(geometry, feature, index);\n      const repeat = textState.repeat;\n      const textAlign = repeat ? undefined : textState.textAlign;\n      // No `justify` support for line placement.\n      let flatOffset = 0;\n      for (let o = 0, oo = ends.length; o < oo; ++o) {\n        let chunks;\n        if (repeat) {\n          chunks = lineChunk(\n            repeat * this.resolution,\n            flatCoordinates,\n            flatOffset,\n            ends[o],\n            stride,\n          );\n        } else {\n          chunks = [flatCoordinates.slice(flatOffset, ends[o])];\n        }\n        for (let c = 0, cc = chunks.length; c < cc; ++c) {\n          const chunk = chunks[c];\n          let chunkBegin = 0;\n          let chunkEnd = chunk.length;\n          if (textAlign == undefined) {\n            const range = matchingChunk(\n              textState.maxAngle,\n              chunk,\n              0,\n              chunk.length,\n              2,\n            );\n            chunkBegin = range[0];\n            chunkEnd = range[1];\n          }\n          for (let i = chunkBegin; i < chunkEnd; i += stride) {\n            coordinates.push(chunk[i], chunk[i + 1]);\n          }\n          const end = coordinates.length;\n          flatOffset = ends[o];\n          this.drawChars_(begin, end);\n          begin = end;\n        }\n      }\n      this.endGeometry(feature);\n    } else {\n      let geometryWidths = textState.overflow ? null : [];\n      switch (geometryType) {\n        case 'Point':\n        case 'MultiPoint':\n          flatCoordinates =\n            /** @type {import(\"../../geom/MultiPoint.js\").default} */ (\n              geometry\n            ).getFlatCoordinates();\n          break;\n        case 'LineString':\n          flatCoordinates =\n            /** @type {import(\"../../geom/LineString.js\").default} */ (\n              geometry\n            ).getFlatMidpoint();\n          break;\n        case 'Circle':\n          flatCoordinates =\n            /** @type {import(\"../../geom/Circle.js\").default} */ (\n              geometry\n            ).getCenter();\n          break;\n        case 'MultiLineString':\n          flatCoordinates =\n            /** @type {import(\"../../geom/MultiLineString.js\").default} */ (\n              geometry\n            ).getFlatMidpoints();\n          stride = 2;\n          break;\n        case 'Polygon':\n          flatCoordinates =\n            /** @type {import(\"../../geom/Polygon.js\").default} */ (\n              geometry\n            ).getFlatInteriorPoint();\n          if (!textState.overflow) {\n            geometryWidths.push(flatCoordinates[2] / this.resolution);\n          }\n          stride = 3;\n          break;\n        case 'MultiPolygon':\n          const interiorPoints =\n            /** @type {import(\"../../geom/MultiPolygon.js\").default} */ (\n              geometry\n            ).getFlatInteriorPoints();\n          flatCoordinates = [];\n          for (let i = 0, ii = interiorPoints.length; i < ii; i += 3) {\n            if (!textState.overflow) {\n              geometryWidths.push(interiorPoints[i + 2] / this.resolution);\n            }\n            flatCoordinates.push(interiorPoints[i], interiorPoints[i + 1]);\n          }\n          if (flatCoordinates.length === 0) {\n            return;\n          }\n          stride = 2;\n          break;\n        default:\n      }\n      const end = this.appendFlatPointCoordinates(flatCoordinates, stride);\n      if (end === begin) {\n        return;\n      }\n      if (\n        geometryWidths &&\n        (end - begin) / 2 !== flatCoordinates.length / stride\n      ) {\n        let beg = begin / 2;\n        geometryWidths = geometryWidths.filter((w, i) => {\n          const keep =\n            coordinates[(beg + i) * 2] === flatCoordinates[i * stride] &&\n            coordinates[(beg + i) * 2 + 1] === flatCoordinates[i * stride + 1];\n          if (!keep) {\n            --beg;\n          }\n          return keep;\n        });\n      }\n\n      this.saveTextStates_();\n\n      const backgroundFill = textState.backgroundFill\n        ? this.createFill(this.fillStyleToState(textState.backgroundFill))\n        : null;\n      const backgroundStroke = textState.backgroundStroke\n        ? this.createStroke(this.strokeStyleToState(textState.backgroundStroke))\n        : null;\n\n      this.beginGeometry(geometry, feature, index);\n\n      // adjust padding for negative scale\n      let padding = textState.padding;\n      if (\n        padding != defaultPadding &&\n        (textState.scale[0] < 0 || textState.scale[1] < 0)\n      ) {\n        let p0 = textState.padding[0];\n        let p1 = textState.padding[1];\n        let p2 = textState.padding[2];\n        let p3 = textState.padding[3];\n        if (textState.scale[0] < 0) {\n          p1 = -p1;\n          p3 = -p3;\n        }\n        if (textState.scale[1] < 0) {\n          p0 = -p0;\n          p2 = -p2;\n        }\n        padding = [p0, p1, p2, p3];\n      }\n\n      // The image is unknown at this stage so we pass null; it will be computed at render time.\n      // For clarity, we pass NaN for offsetX, offsetY, width and height, which will be computed at\n      // render time.\n      const pixelRatio = this.pixelRatio;\n      this.instructions.push([\n        CanvasInstruction.DRAW_IMAGE,\n        begin,\n        end,\n        null,\n        NaN,\n        NaN,\n        NaN,\n        1,\n        0,\n        0,\n        this.textRotateWithView_,\n        this.textRotation_,\n        [1, 1],\n        NaN,\n        this.declutterMode_,\n        this.declutterImageWithText_,\n        padding == defaultPadding\n          ? defaultPadding\n          : padding.map(function (p) {\n              return p * pixelRatio;\n            }),\n        backgroundFill,\n        backgroundStroke,\n        this.text_,\n        this.textKey_,\n        this.strokeKey_,\n        this.fillKey_,\n        this.textOffsetX_,\n        this.textOffsetY_,\n        geometryWidths,\n      ]);\n      const scale = 1 / pixelRatio;\n      // Set default fill for hit detection background\n      const hitDetectionBackgroundFill = backgroundFill\n        ? backgroundFill.slice(0)\n        : null;\n      if (hitDetectionBackgroundFill) {\n        hitDetectionBackgroundFill[1] = defaultFillStyle;\n      }\n      this.hitDetectionInstructions.push([\n        CanvasInstruction.DRAW_IMAGE,\n        begin,\n        end,\n        null,\n        NaN,\n        NaN,\n        NaN,\n        1,\n        0,\n        0,\n        this.textRotateWithView_,\n        this.textRotation_,\n        [scale, scale],\n        NaN,\n        this.declutterMode_,\n        this.declutterImageWithText_,\n        padding,\n        hitDetectionBackgroundFill,\n        backgroundStroke,\n        this.text_,\n        this.textKey_,\n        this.strokeKey_,\n        this.fillKey_ ? defaultFillStyle : this.fillKey_,\n        this.textOffsetX_,\n        this.textOffsetY_,\n        geometryWidths,\n      ]);\n\n      this.endGeometry(feature);\n    }\n  }\n\n  /**\n   * @private\n   */\n  saveTextStates_() {\n    const strokeState = this.textStrokeState_;\n    const textState = this.textState_;\n    const fillState = this.textFillState_;\n\n    const strokeKey = this.strokeKey_;\n    if (strokeState) {\n      if (!(strokeKey in this.strokeStates)) {\n        this.strokeStates[strokeKey] = {\n          strokeStyle: strokeState.strokeStyle,\n          lineCap: strokeState.lineCap,\n          lineDashOffset: strokeState.lineDashOffset,\n          lineWidth: strokeState.lineWidth,\n          lineJoin: strokeState.lineJoin,\n          miterLimit: strokeState.miterLimit,\n          lineDash: strokeState.lineDash,\n        };\n      }\n    }\n    const textKey = this.textKey_;\n    if (!(textKey in this.textStates)) {\n      this.textStates[textKey] = {\n        font: textState.font,\n        textAlign: textState.textAlign || defaultTextAlign,\n        justify: textState.justify,\n        textBaseline: textState.textBaseline || defaultTextBaseline,\n        scale: textState.scale,\n      };\n    }\n    const fillKey = this.fillKey_;\n    if (fillState) {\n      if (!(fillKey in this.fillStates)) {\n        this.fillStates[fillKey] = {\n          fillStyle: fillState.fillStyle,\n        };\n      }\n    }\n  }\n\n  /**\n   * @private\n   * @param {number} begin Begin.\n   * @param {number} end End.\n   */\n  drawChars_(begin, end) {\n    const strokeState = this.textStrokeState_;\n    const textState = this.textState_;\n\n    const strokeKey = this.strokeKey_;\n    const textKey = this.textKey_;\n    const fillKey = this.fillKey_;\n    this.saveTextStates_();\n\n    const pixelRatio = this.pixelRatio;\n    const baseline = TEXT_ALIGN[textState.textBaseline];\n\n    const offsetX = this.textOffsetX_ * pixelRatio;\n    const offsetY = this.textOffsetY_ * pixelRatio;\n    const text = this.text_;\n    const strokeWidth = strokeState\n      ? (strokeState.lineWidth * Math.abs(textState.scale[0])) / 2\n      : 0;\n\n    this.instructions.push([\n      CanvasInstruction.DRAW_CHARS,\n      begin,\n      end,\n      baseline,\n      textState.overflow,\n      fillKey,\n      textState.maxAngle,\n      pixelRatio,\n      offsetY,\n      strokeKey,\n      strokeWidth * pixelRatio,\n      text,\n      textKey,\n      1,\n      this.declutterMode_,\n      this.textKeepUpright_,\n      offsetX,\n    ]);\n    this.hitDetectionInstructions.push([\n      CanvasInstruction.DRAW_CHARS,\n      begin,\n      end,\n      baseline,\n      textState.overflow,\n      fillKey ? defaultFillStyle : fillKey,\n      textState.maxAngle,\n      pixelRatio,\n      offsetY,\n      strokeKey,\n      strokeWidth * pixelRatio,\n      text,\n      textKey,\n      1 / pixelRatio,\n      this.declutterMode_,\n      this.textKeepUpright_,\n      offsetX,\n    ]);\n  }\n\n  /**\n   * @param {import(\"../../style/Text.js\").default} textStyle Text style.\n   * @param {Object} [sharedData] Shared data.\n   * @override\n   */\n  setTextStyle(textStyle, sharedData) {\n    let textState, fillState, strokeState;\n    if (!textStyle) {\n      this.text_ = '';\n    } else {\n      const textFillStyle = textStyle.getFill();\n      if (!textFillStyle) {\n        fillState = null;\n        this.textFillState_ = fillState;\n      } else {\n        fillState = this.textFillState_;\n        if (!fillState) {\n          fillState = /** @type {import(\"../canvas.js\").FillState} */ ({});\n          this.textFillState_ = fillState;\n        }\n        fillState.fillStyle = asColorLike(\n          textFillStyle.getColor() || defaultFillStyle,\n        );\n      }\n\n      const textStrokeStyle = textStyle.getStroke();\n      if (!textStrokeStyle) {\n        strokeState = null;\n        this.textStrokeState_ = strokeState;\n      } else {\n        strokeState = this.textStrokeState_;\n        if (!strokeState) {\n          strokeState = /** @type {import(\"../canvas.js\").StrokeState} */ ({});\n          this.textStrokeState_ = strokeState;\n        }\n        const lineDash = textStrokeStyle.getLineDash();\n        const lineDashOffset = textStrokeStyle.getLineDashOffset();\n        const lineWidth = textStrokeStyle.getWidth();\n        const miterLimit = textStrokeStyle.getMiterLimit();\n        strokeState.lineCap = textStrokeStyle.getLineCap() || defaultLineCap;\n        strokeState.lineDash = lineDash ? lineDash.slice() : defaultLineDash;\n        strokeState.lineDashOffset =\n          lineDashOffset === undefined ? defaultLineDashOffset : lineDashOffset;\n        strokeState.lineJoin = textStrokeStyle.getLineJoin() || defaultLineJoin;\n        strokeState.lineWidth =\n          lineWidth === undefined ? defaultLineWidth : lineWidth;\n        strokeState.miterLimit =\n          miterLimit === undefined ? defaultMiterLimit : miterLimit;\n        strokeState.strokeStyle = asColorLike(\n          textStrokeStyle.getColor() || defaultStrokeStyle,\n        );\n      }\n\n      textState = this.textState_;\n      const font = textStyle.getFont() || defaultFont;\n      registerFont(font);\n      const textScale = textStyle.getScaleArray();\n      textState.overflow = textStyle.getOverflow();\n      textState.font = font;\n      textState.maxAngle = textStyle.getMaxAngle();\n      textState.placement = textStyle.getPlacement();\n      textState.textAlign = textStyle.getTextAlign();\n      textState.repeat = textStyle.getRepeat();\n      textState.justify = textStyle.getJustify();\n      textState.textBaseline =\n        textStyle.getTextBaseline() || defaultTextBaseline;\n      textState.backgroundFill = textStyle.getBackgroundFill();\n      textState.backgroundStroke = textStyle.getBackgroundStroke();\n      textState.padding = textStyle.getPadding() || defaultPadding;\n      textState.scale = textScale === undefined ? [1, 1] : textScale;\n\n      const textOffsetX = textStyle.getOffsetX();\n      const textOffsetY = textStyle.getOffsetY();\n      const textRotateWithView = textStyle.getRotateWithView();\n      const textKeepUpright = textStyle.getKeepUpright();\n      const textRotation = textStyle.getRotation();\n      this.text_ = textStyle.getText() || '';\n      this.textOffsetX_ = textOffsetX === undefined ? 0 : textOffsetX;\n      this.textOffsetY_ = textOffsetY === undefined ? 0 : textOffsetY;\n      this.textRotateWithView_ =\n        textRotateWithView === undefined ? false : textRotateWithView;\n      this.textKeepUpright_ =\n        textKeepUpright === undefined ? true : textKeepUpright;\n      this.textRotation_ = textRotation === undefined ? 0 : textRotation;\n\n      this.strokeKey_ = strokeState\n        ? (typeof strokeState.strokeStyle == 'string'\n            ? strokeState.strokeStyle\n            : getUid(strokeState.strokeStyle)) +\n          strokeState.lineCap +\n          strokeState.lineDashOffset +\n          '|' +\n          strokeState.lineWidth +\n          strokeState.lineJoin +\n          strokeState.miterLimit +\n          '[' +\n          strokeState.lineDash.join() +\n          ']'\n        : '';\n      this.textKey_ =\n        textState.font +\n        textState.scale +\n        (textState.textAlign || '?') +\n        (textState.repeat || '?') +\n        (textState.justify || '?') +\n        (textState.textBaseline || '?');\n      this.fillKey_ =\n        fillState && fillState.fillStyle\n          ? typeof fillState.fillStyle == 'string'\n            ? fillState.fillStyle\n            : '|' + getUid(fillState.fillStyle)\n          : '';\n    }\n    this.declutterMode_ = textStyle.getDeclutterMode();\n    this.declutterImageWithText_ = sharedData;\n  }\n}\n\nexport default CanvasTextBuilder;\n","/**\n * @module ol/render/canvas/ZIndexContext\n */\n\nimport {getSharedCanvasContext2D} from '../../dom.js';\n\n/** @typedef {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D & {globalAlpha: any}} ZIndexContextProxy */\n\n/**\n * @extends {CanvasRenderingContext2D}\n */\nclass ZIndexContext {\n  constructor() {\n    /**\n     * @private\n     * @type {Array<Array<*>>}\n     */\n    this.instructions_ = [];\n    /**\n     * @type {number}\n     */\n    this.zIndex = 0;\n    /**\n     * @private\n     * @type {number}\n     */\n    this.offset_ = 0;\n\n    /**\n     * Name of the method last accessed on the proxy, pushed together with its\n     * arguments when the method is actually called.\n     * @private\n     * @type {string|symbol}\n     */\n    this.pendingMethod_;\n\n    /**\n     * @private\n     * @type {ZIndexContextProxy}\n     */\n    this.context_ = /** @type {ZIndexContextProxy} */ (\n      new Proxy(getSharedCanvasContext2D(), {\n        get: (target, property) => {\n          if (typeof (/** @type {*} */ (target)[property]) !== 'function') {\n            // we only accept calling functions on the proxy, not accessing properties\n            return undefined;\n          }\n          this.pendingMethod_ = property;\n          return this.pushMethodArgs_;\n        },\n        set: (target, property, value) => {\n          this.push_(property, value);\n          return true;\n        },\n      })\n    );\n  }\n\n  /**\n   * @param {...*} args Arguments to push to the instructions array.\n   * @private\n   */\n  push_(...args) {\n    const instructions = this.instructions_;\n    const index = this.zIndex + this.offset_;\n    if (!instructions[index]) {\n      instructions[index] = [];\n    }\n    instructions[index].push(...args);\n  }\n\n  /**\n   * Pushes the method name captured at access time together with the arguments\n   * passed at call time. Reused across all proxied method calls.\n   * @param {...*} args Args.\n   * @private\n   */\n  pushMethodArgs_ = (...args) => {\n    this.push_(this.pendingMethod_, args);\n  };\n\n  /**\n   * Push a function that renders to the context directly.\n   * @param {function(CanvasRenderingContext2D): void} render Function.\n   */\n  pushFunction(render) {\n    this.push_(render);\n  }\n\n  /**\n   * Get a proxy for CanvasRenderingContext2D which does not support getting state\n   * (e.g. `context.globalAlpha`, which will return `undefined`). To set state, if it relies on a\n   * previous state (e.g. `context.globalAlpha = context.globalAlpha / 2`), set a function,\n   * e.g. `context.globalAlpha = (context) => context.globalAlpha / 2`.\n   * @return {ZIndexContextProxy} Context.\n   */\n  getContext() {\n    return this.context_;\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   */\n  draw(context) {\n    this.instructions_.forEach((instructionsAtIndex) => {\n      for (let i = 0, ii = instructionsAtIndex.length; i < ii; ++i) {\n        const property = instructionsAtIndex[i];\n        if (typeof property === 'function') {\n          property(context);\n          continue;\n        }\n        const instructionAtIndex = instructionsAtIndex[++i];\n        if (typeof (/** @type {*} */ (context)[property]) === 'function') {\n          /** @type {*} */ (context)[property](...instructionAtIndex);\n        } else if (typeof instructionAtIndex === 'function') {\n          /** @type {*} */ (context)[property] = instructionAtIndex(context);\n        } else {\n          /** @type {*} */ (context)[property] = instructionAtIndex;\n        }\n      }\n    });\n  }\n\n  clear() {\n    this.instructions_.length = 0;\n    this.zIndex = 0;\n    this.offset_ = 0;\n  }\n\n  /**\n   * Offsets the zIndex by the highest current zIndex. Useful for rendering multiple worlds or tiles, to\n   * avoid conflicting context.clip() or context.save()/restore() calls.\n   */\n  offset() {\n    this.offset_ = this.instructions_.length;\n    this.zIndex = 0;\n  }\n}\n\nexport default ZIndexContext;\n","/**\n * @module ol/render/canvas/hitdetect\n */\n\nimport {ascending} from '../../array.js';\nimport {createCanvasContext2D} from '../../dom.js';\nimport {intersects} from '../../extent.js';\nimport {clamp} from '../../math.js';\nimport {\n  getTransformFromProjections,\n  getUserProjection,\n  toUserExtent,\n} from '../../proj.js';\nimport Icon from '../../style/Icon.js';\nimport CanvasImmediateRenderer from './Immediate.js';\n\nexport const HIT_DETECT_RESOLUTION = 0.5;\n\n/**\n * @param {import(\"../../size.js\").Size} size Canvas size in css pixels.\n * @param {Array<import(\"../../transform.js\").Transform>} transforms Transforms\n * for rendering features to all worlds of the viewport, from coordinates to css\n * pixels.\n * @param {Array<import(\"../../Feature.js\").FeatureLike>} features\n * Features to consider for hit detection.\n * @param {import(\"../../style/Style.js\").StyleFunction|undefined} styleFunction\n * Layer style function.\n * @param {import(\"../../extent.js\").Extent} extent Extent in render projection.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {number} [squaredTolerance] Squared tolerance.\n * @param {import(\"../../proj/Projection.js\").default} [projection] Render projection.\n * @return {ImageData} Hit detection image data.\n */\nexport function createHitDetectionImageData(\n  size,\n  transforms,\n  features,\n  styleFunction,\n  extent,\n  resolution,\n  rotation,\n  squaredTolerance,\n  projection,\n) {\n  const userExtent = projection ? toUserExtent(extent, projection) : extent;\n  const width = size[0] * HIT_DETECT_RESOLUTION;\n  const height = size[1] * HIT_DETECT_RESOLUTION;\n  const context = createCanvasContext2D(width, height);\n  context.imageSmoothingEnabled = false;\n  const canvas = context.canvas;\n  const renderer = new CanvasImmediateRenderer(\n    context,\n    HIT_DETECT_RESOLUTION,\n    extent,\n    null,\n    rotation,\n    squaredTolerance,\n    projection\n      ? getTransformFromProjections(getUserProjection(), projection)\n      : null,\n  );\n  const featureCount = features.length;\n  // Stretch hit detection index to use the whole available color range\n  const indexFactor = Math.floor((256 * 256 * 256 - 1) / featureCount);\n  const featuresByZIndex = {};\n  for (let i = 1; i <= featureCount; ++i) {\n    const feature = features[i - 1];\n    const featureStyleFunction = feature.getStyleFunction() || styleFunction;\n    if (!featureStyleFunction) {\n      continue;\n    }\n    let styles = featureStyleFunction(feature, resolution);\n    if (!styles) {\n      continue;\n    }\n    if (!Array.isArray(styles)) {\n      styles = [styles];\n    }\n    const index = i * indexFactor;\n    const color = index.toString(16).padStart(7, '#00000');\n    for (let j = 0, jj = styles.length; j < jj; ++j) {\n      const originalStyle = styles[j];\n      const geometry = originalStyle.getGeometryFunction()(feature);\n      if (!geometry || !intersects(userExtent, geometry.getExtent())) {\n        continue;\n      }\n      const style = originalStyle.clone();\n      const fill = style.getFill();\n      if (fill) {\n        fill.setColor(color);\n      }\n      const stroke = style.getStroke();\n      if (stroke) {\n        stroke.setColor(color);\n        stroke.setLineDash(null);\n      }\n      style.setText(undefined);\n      const image = originalStyle.getImage();\n      if (image) {\n        const imgSize = image.getImageSize();\n        if (!imgSize) {\n          continue;\n        }\n\n        const imgContext = createCanvasContext2D(\n          imgSize[0],\n          imgSize[1],\n          undefined,\n          {alpha: false},\n        );\n        const img = imgContext.canvas;\n        imgContext.fillStyle = color;\n        imgContext.fillRect(0, 0, img.width, img.height);\n        style.setImage(\n          new Icon({\n            img: img,\n            anchor: image.getAnchor(),\n            anchorXUnits: 'pixels',\n            anchorYUnits: 'pixels',\n            offset: image.getOrigin(),\n            opacity: 1,\n            size: image.getSize(),\n            scale: image.getScale(),\n            rotation: image.getRotation(),\n            rotateWithView: image.getRotateWithView(),\n          }),\n        );\n      }\n      const zIndex = style.getZIndex() || 0;\n      let byGeometryType = featuresByZIndex[zIndex];\n      if (!byGeometryType) {\n        byGeometryType = {};\n        featuresByZIndex[zIndex] = byGeometryType;\n        byGeometryType['Polygon'] = [];\n        byGeometryType['Circle'] = [];\n        byGeometryType['LineString'] = [];\n        byGeometryType['Point'] = [];\n      }\n      const type = geometry.getType();\n      if (type === 'GeometryCollection') {\n        const geometries =\n          /** @type {import(\"../../geom/GeometryCollection.js\").default} */ (\n            geometry\n          ).getGeometriesArrayRecursive();\n        for (let i = 0, ii = geometries.length; i < ii; ++i) {\n          const geometry = geometries[i];\n          byGeometryType[geometry.getType().replace('Multi', '')].push(\n            geometry,\n            style,\n          );\n        }\n      } else {\n        byGeometryType[type.replace('Multi', '')].push(geometry, style);\n      }\n    }\n  }\n\n  const zIndexKeys = Object.keys(featuresByZIndex).map(Number).sort(ascending);\n  for (let i = 0, ii = zIndexKeys.length; i < ii; ++i) {\n    const byGeometryType = featuresByZIndex[zIndexKeys[i]];\n    for (const type in byGeometryType) {\n      const geomAndStyle = byGeometryType[type];\n      for (let j = 0, jj = geomAndStyle.length; j < jj; j += 2) {\n        renderer.setStyle(geomAndStyle[j + 1]);\n        for (let k = 0, kk = transforms.length; k < kk; ++k) {\n          renderer.setTransform(transforms[k]);\n          renderer.drawGeometry(geomAndStyle[j]);\n        }\n      }\n    }\n  }\n  return context.getImageData(0, 0, canvas.width, canvas.height);\n}\n\n/**\n * @param {import(\"../../pixel.js\").Pixel} pixel Pixel coordinate on the hit\n * detection canvas in css pixels.\n * @param {Array<F>} features Features. Has to\n * match the `features` array that was passed to `createHitDetectionImageData()`.\n * @param {ImageData} imageData Hit detection image data generated by\n * `createHitDetectionImageData()`.\n * @return {Array<F>} Features.\n * @template {import(\"../../Feature.js\").FeatureLike} F\n */\nexport function hitDetect(pixel, features, imageData) {\n  /** @type {Array<F>} */\n  const resultFeatures = [];\n  if (imageData) {\n    const x = Math.floor(Math.round(pixel[0]) * HIT_DETECT_RESOLUTION);\n    const y = Math.floor(Math.round(pixel[1]) * HIT_DETECT_RESOLUTION);\n    // The pixel coordinate is clamped down to the hit-detect canvas' size to account\n    // for browsers returning coordinates slightly larger than the actual canvas size\n    // due to a non-integer pixel ratio.\n    const index =\n      (clamp(x, 0, imageData.width - 1) +\n        clamp(y, 0, imageData.height - 1) * imageData.width) *\n      4;\n    const r = imageData.data[index];\n    const g = imageData.data[index + 1];\n    const b = imageData.data[index + 2];\n    const i = b + 256 * (g + 256 * r);\n    const indexFactor = Math.floor((256 * 256 * 256 - 1) / features.length);\n    if (i && i % indexFactor === 0) {\n      resultFeatures.push(features[i / indexFactor - 1]);\n    }\n  }\n  return resultFeatures;\n}\n","/**\n * Class for generating shaders from literal style objects\n * @module ol/render/webgl/ShaderBuilder\n */\nimport {colorToGlsl, numberToGlsl, stringToGlsl} from '../../expr/gpu.js';\nimport {createDefaultStyle} from '../../style/flat.js';\nimport {LINESTRING_ANGLE_COSINE_CUTOFF} from './bufferUtil.js';\nimport {UNPACK_COLOR_FN} from './compileUtil.js';\nimport {FLOAT64_ARITHMETIC_FN} from './float64Util.js';\n\nexport const COMMON_HEADER = `#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\nuniform float u_one;\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_invertProjectionMatrix;\nuniform vec2 u_viewportSizePx;\nuniform float u_pixelRatio;\nuniform float u_globalAlpha;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\nuniform float u_rotation;\nuniform vec4 u_renderExtent;\nuniform float u_depth;\nuniform mediump int u_hitDetection;\n\n// these 64-bits floats are split into high/low\nuniform vec2 u_df_patternOriginX;\nuniform vec2 u_df_patternOriginY;\nuniform vec2 u_df_patternScaleRatio;\n\nconst float PI = 3.141592653589793238;\nconst float TWO_PI = 2.0 * PI;\nfloat currentLineMetric = 0.; // an actual value will be used in the stroke shaders\n\nvec2 pxToWorld(vec2 pxPos) {\n  vec2 screenPos = 2.0 * pxPos / u_viewportSizePx - 1.0;\n  return (u_invertProjectionMatrix * vec4(screenPos, 0.0, 1.0)).xy;\n}\n\nvec2 worldToPx(vec2 worldPos) {\n  vec4 screenPos = u_projectionMatrix * vec4(worldPos, 0.0, 1.0);\n  return (0.5 * screenPos.xy + 0.5) * u_viewportSizePx;\n}\n${UNPACK_COLOR_FN}\n${FLOAT64_ARITHMETIC_FN}\n`;\n\nconst DEFAULT_STYLE = createDefaultStyle();\n\n/**\n * @typedef {Object} AttributeDescription\n * @property {string} name Attribute name, as will be declared in the header of the vertex shader (including a_)\n * @property {string} type Attribute GLSL type, either `float`, `vec2`, `vec4`...\n * @property {string} varyingName Varying name, as will be declared in the header of both shaders (including v_)\n * @property {string} varyingType Varying type, either `float`, `vec2`, `vec4`...\n * @property {string} varyingExpression GLSL expression to assign to the varying in the vertex shader (e.g. `unpackColor(a_myAttr)`)\n */\n\n/**\n * @typedef {Object} UniformDescription\n * @property {string} name Uniform name, as will be declared in the header of the vertex shader (including u_)\n * @property {string} type Uniform GLSL type, either `float`, `vec2`, `vec4`...\n */\n\n/**\n * @classdesc\n * This class implements a classic builder pattern for generating many different types of shaders.\n * Methods can be chained, e. g.:\n *\n * ```js\n * const shader = new ShaderBuilder()\n *   .addAttribute('a_width', 'float')\n *   .addUniform('u_time', 'float)\n *   .setColorExpression('...')\n *   .setSymbolSizeExpression('...')\n *   .getSymbolFragmentShader();\n * ```\n *\n * A note on [alpha premultiplication](https://en.wikipedia.org/wiki/Alpha_compositing#Straight_versus_premultiplied):\n * The ShaderBuilder class expects all colors to **not having been alpha-premultiplied!** This is because alpha\n * premultiplication is done at the end of each fragment shader.\n */\nexport class ShaderBuilder {\n  constructor() {\n    /**\n     * Uniforms; these will be declared in the header (should include the type).\n     * @type {Array<UniformDescription>}\n     * @private\n     */\n    this.uniforms_ = [];\n\n    /**\n     * Attributes; these will be declared in the header (should include the type).\n     * @type {Array<AttributeDescription>}\n     * @private\n     */\n    this.attributes_ = [];\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.hasSymbol_ = false;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.symbolSizeExpression_ = `vec2(${numberToGlsl(\n      DEFAULT_STYLE['circle-radius'],\n    )} + ${numberToGlsl(DEFAULT_STYLE['circle-stroke-width'] * 0.5)})`;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.symbolRotationExpression_ = '0.0';\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.symbolOffsetExpression_ = 'vec2(0.0)';\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.symbolColorExpression_ = colorToGlsl(\n      /** @type {string} */ (DEFAULT_STYLE['circle-fill-color']),\n    );\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.texCoordExpression_ = 'vec4(0.0, 0.0, 1.0, 1.0)';\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.fragmentDiscardExpression_ = null;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.shapeDiscardExpression_ = null;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.symbolRotateWithView_ = false;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.hasStroke_ = false;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.strokeWidthExpression_ = numberToGlsl(DEFAULT_STYLE['stroke-width']);\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.strokeColorExpression_ = colorToGlsl(\n      /** @type {string} */ (DEFAULT_STYLE['stroke-color']),\n    );\n\n    /**\n     * @private\n     */\n    this.strokeOffsetExpression_ = '0.';\n\n    /**\n     * @private\n     */\n    this.strokeCapExpression_ = stringToGlsl('round');\n\n    /**\n     * @private\n     */\n    this.strokeJoinExpression_ = stringToGlsl('round');\n\n    /**\n     * @private\n     */\n    this.strokeMiterLimitExpression_ = '10.';\n\n    /**\n     * @private\n     */\n    this.strokeDistanceFieldExpression_ = '-1000.';\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.strokePatternLengthExpression_ = null;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.hasFill_ = false;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.fillColorExpression_ = colorToGlsl(\n      /** @type {string} */ (DEFAULT_STYLE['fill-color']),\n    );\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.fillPatternSizeExpression_ = null;\n\n    /**\n     * @type {Array<string>}\n     * @private\n     */\n    this.vertexShaderFunctions_ = [];\n\n    /**\n     * @type {Array<string>}\n     * @private\n     */\n    this.fragmentShaderFunctions_ = [];\n  }\n\n  /**\n   * Adds a uniform accessible in both fragment and vertex shaders.\n   * The given name should include a type, such as `sampler2D u_texture`.\n   * @param {string} name Uniform name, including the `u_` prefix\n   * @param {'float'|'vec2'|'vec3'|'vec4'|'sampler2D'} type GLSL type\n   * @return {ShaderBuilder} the builder object\n   */\n  addUniform(name, type) {\n    this.uniforms_.push({\n      name,\n      type,\n    });\n    return this;\n  }\n\n  /**\n   * Adds an attribute accessible in the vertex shader, read from the geometry buffer.\n   * The given name should include a type, such as `vec2 a_position`.\n   * Attributes will also be made available under the same name in fragment shaders.\n   * @param {string} name Attribute name, including the `a_` prefix\n   * @param {'float'|'vec2'|'vec3'|'vec4'} type GLSL type\n   * @param {string} [varyingExpression] Expression which will be assigned to the varying in the vertex shader, and\n   * passed on to the fragment shader.\n   * @param {'float'|'vec2'|'vec3'|'vec4'} [varyingType] Type of the attribute after transformation;\n   * e.g. `vec4` after unpacking color components\n   * @return {ShaderBuilder} the builder object\n   */\n  addAttribute(name, type, varyingExpression, varyingType) {\n    this.attributes_.push({\n      name,\n      type,\n      varyingName: name.replace(/^a_/, 'v_'),\n      varyingType: varyingType ?? type,\n      varyingExpression: varyingExpression ?? name,\n    });\n    return this;\n  }\n\n  /**\n   * Sets an expression to compute the size of the shape.\n   * This expression can use all the uniforms and attributes available\n   * in the vertex shader, and should evaluate to a `vec2` value.\n   * @param {string} expression Size expression\n   * @return {ShaderBuilder} the builder object\n   */\n  setSymbolSizeExpression(expression) {\n    this.hasSymbol_ = true;\n    this.symbolSizeExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current symbol size expression\n   */\n  getSymbolSizeExpression() {\n    return this.symbolSizeExpression_;\n  }\n\n  /**\n   * Sets an expression to compute the rotation of the shape.\n   * This expression can use all the uniforms and attributes available\n   * in the vertex shader, and should evaluate to a `float` value in radians.\n   * @param {string} expression Size expression\n   * @return {ShaderBuilder} the builder object\n   */\n  setSymbolRotationExpression(expression) {\n    this.symbolRotationExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * Sets an expression to compute the offset of the symbol from the point center.\n   * This expression can use all the uniforms and attributes available\n   * in the vertex shader, and should evaluate to a `vec2` value.\n   * @param {string} expression Offset expression\n   * @return {ShaderBuilder} the builder object\n   */\n  setSymbolOffsetExpression(expression) {\n    this.symbolOffsetExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current symbol offset expression\n   */\n  getSymbolOffsetExpression() {\n    return this.symbolOffsetExpression_;\n  }\n\n  /**\n   * Sets an expression to compute the color of the shape.\n   * This expression can use all the uniforms, varyings and attributes available\n   * in the fragment shader, and should evaluate to a `vec4` value.\n   * @param {string} expression Color expression\n   * @return {ShaderBuilder} the builder object\n   */\n  setSymbolColorExpression(expression) {\n    this.hasSymbol_ = true;\n    this.symbolColorExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current symbol color expression\n   */\n  getSymbolColorExpression() {\n    return this.symbolColorExpression_;\n  }\n\n  /**\n   * Sets an expression to compute the texture coordinates of the vertices.\n   * This expression can use all the uniforms and attributes available\n   * in the vertex shader, and should evaluate to a `vec4` value.\n   * @param {string} expression Texture coordinate expression\n   * @return {ShaderBuilder} the builder object\n   */\n  setTextureCoordinateExpression(expression) {\n    this.texCoordExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * Sets an expression to determine whether a fragment (pixel) should be discarded,\n   * i.e. not drawn at all. If the expression evaluates to `true`, the fragment is discarded.\n   * This expression can use all the uniforms, varyings and attributes available\n   * in the fragment shader, and should evaluate to a `bool` value (it will be\n   * used in an `if` statement)\n   * @param {string} expression Fragment discard expression\n   * @return {ShaderBuilder} the builder object\n   */\n  setFragmentDiscardExpression(expression) {\n    this.fragmentDiscardExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current fragment discard expression; null if none has been set\n   */\n  getFragmentDiscardExpression() {\n    return this.fragmentDiscardExpression_;\n  }\n\n  /**\n   * Sets an expression to determine whether a whole shape (triangle) should be filtered out\n   * and not rasterized at all. If the expression evaluates to `true`, the shape is discarded.\n   * This is more performant than the fragment discard expression because the fragment shader will not run at all.\n   * This expression can use all the uniforms, varyings and attributes available\n   * in the vertex shader, and should evaluate to a `bool` value.\n   * @param {string} expression Shape discard expression\n   * @return {ShaderBuilder} the builder object\n   */\n  setShapeDiscardExpression(expression) {\n    this.shapeDiscardExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current shape discard expression; null if none has been set\n   */\n  getShapeDiscardExpression() {\n    return this.shapeDiscardExpression_;\n  }\n\n  /**\n   * Sets whether the symbols should rotate with the view or stay aligned with the map.\n   * Note: will only be used for point geometry shaders.\n   * @param {boolean} rotateWithView Rotate with view\n   * @return {ShaderBuilder} the builder object\n   */\n  setSymbolRotateWithView(rotateWithView) {\n    this.symbolRotateWithView_ = rotateWithView;\n    return this;\n  }\n\n  /**\n   * @param {string} expression Stroke width expression, returning value in pixels\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokeWidthExpression(expression) {\n    this.hasStroke_ = true;\n    this.strokeWidthExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @param {string} expression Stroke color expression, evaluate to `vec4`: can rely on currentLengthPx and currentRadiusPx\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokeColorExpression(expression) {\n    this.hasStroke_ = true;\n    this.strokeColorExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current stroke color expression\n   */\n  getStrokeColorExpression() {\n    return this.strokeColorExpression_;\n  }\n\n  /**\n   * @param {string} expression Stroke color expression, evaluate to `float`\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokeOffsetExpression(expression) {\n    this.strokeOffsetExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @param {string} expression Stroke line cap expression, evaluate to `float`\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokeCapExpression(expression) {\n    this.strokeCapExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @param {string} expression Stroke line join expression, evaluate to `float`\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokeJoinExpression(expression) {\n    this.strokeJoinExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @param {string} expression Stroke miter limit expression, evaluate to `float`\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokeMiterLimitExpression(expression) {\n    this.strokeMiterLimitExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @param {string} expression Stroke distance field expression, evaluate to `float`\n   * This can override the default distance field; can rely on currentLengthPx and currentRadiusPx\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokeDistanceFieldExpression(expression) {\n    this.strokeDistanceFieldExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * Defining a pattern length for a stroke lets us avoid having visual artifacts when\n   * a linestring is very long and thus has very high \"distance\" attributes on its vertices.\n   * If we apply a pattern or dash array to a stroke we know for certain that the full distance value\n   * is not necessary and can be trimmed down using `mod(currentDistance, patternLength)`.\n   * @param {string} expression Stroke expression that evaluates to a`float; value is expected to be\n   * in pixels.\n   * @return {ShaderBuilder} the builder object\n   */\n  setStrokePatternLengthExpression(expression) {\n    this.strokePatternLengthExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current stroke pattern length expression.\n   */\n  getStrokePatternLengthExpression() {\n    return this.strokePatternLengthExpression_;\n  }\n\n  /**\n   * @param {string} expression Fill color expression, evaluate to `vec4`\n   * @return {ShaderBuilder} the builder object\n   */\n  setFillColorExpression(expression) {\n    this.hasFill_ = true;\n    this.fillColorExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current fill color expression\n   */\n  getFillColorExpression() {\n    return this.fillColorExpression_;\n  }\n\n  /**\n   * Defining a pattern size for a fill pattern lets us avoid having visual artifacts that typically appear\n   * when zoomed in above zoom levels 14~15. If we can compute the fill pattern size we can more efficiently\n   * compute the offset of the pattern on screen, thus avoiding precision issues.\n   * @param {string} expression Size expression that evaluates to a `vec2` in pixels\n   * @return {ShaderBuilder} the builder object\n   */\n  setFillPatternSizeExpression(expression) {\n    this.fillPatternSizeExpression_ = expression;\n    return this;\n  }\n\n  /**\n   * @return {string} The current fill pattern size expression.\n   */\n  getFillPatternSizeExpression() {\n    return this.fillPatternSizeExpression_;\n  }\n\n  addVertexShaderFunction(code) {\n    if (this.vertexShaderFunctions_.includes(code)) {\n      return this;\n    }\n    this.vertexShaderFunctions_.push(code);\n    return this;\n  }\n  addFragmentShaderFunction(code) {\n    if (this.fragmentShaderFunctions_.includes(code)) {\n      return this;\n    }\n    this.fragmentShaderFunctions_.push(code);\n    return this;\n  }\n\n  /**\n   * Generates a symbol vertex shader from the builder parameters\n   * @return {string|null} The full shader as a string; null if no size or color specified\n   */\n  getSymbolVertexShader() {\n    if (!this.hasSymbol_) {\n      return null;\n    }\n\n    return `${COMMON_HEADER}\n${this.uniforms_.map((uniform) => `uniform ${uniform.type} ${uniform.name};`).join('\\n')}\nattribute vec2 a_position;\nattribute vec2 a_localPosition;\nattribute vec2 a_hitColor;\n\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\nvarying vec4 v_hitColor;\nvarying vec2 v_centerPx;\nvarying float v_angle;\nvarying vec2 v_quadSizePx;\n\n${this.attributes_\n  .map(\n    (attribute) => `attribute ${attribute.type} ${attribute.name};\nvarying ${attribute.varyingType} ${attribute.varyingName};`,\n  )\n  .join('\\n')}\n${this.vertexShaderFunctions_.join('\\n')}\nvec2 pxToScreen(vec2 coordPx) {\n  vec2 scaled = coordPx / u_viewportSizePx / 0.5;\n  return scaled;\n}\n\nvec2 screenToPx(vec2 coordScreen) {\n  return (coordScreen * 0.5 + 0.5) * u_viewportSizePx;\n}\n\nvoid main(void) {\n  v_quadSizePx = ${this.symbolSizeExpression_};\n  vec2 halfSizePx = v_quadSizePx * 0.5;\n  vec2 centerOffsetPx = ${this.symbolOffsetExpression_};\n  vec2 offsetPx = centerOffsetPx + a_localPosition * halfSizePx * vec2(1., -1.);\n  float angle = ${this.symbolRotationExpression_}${this.symbolRotateWithView_ ? ' + u_rotation' : ''};\n  float c = cos(-angle);\n  float s = sin(-angle);\n  offsetPx = vec2(c * offsetPx.x - s * offsetPx.y, s * offsetPx.x + c * offsetPx.y);\n  vec4 center = u_projectionMatrix * vec4(a_position, 0.0, 1.0);\n  gl_Position = center + vec4(pxToScreen(offsetPx), u_depth, 0.);\n  vec4 texCoord = ${this.texCoordExpression_};\n  float u = mix(texCoord.s, texCoord.p, a_localPosition.x * 0.5 + 0.5);\n  float v = mix(texCoord.t, texCoord.q, a_localPosition.y * 0.5 + 0.5);\n  v_texCoord = vec2(u, v);\n  v_hitColor = unpackColor(a_hitColor);\n  v_angle = angle;\n  c = cos(-v_angle);\n  s = sin(-v_angle);\n  centerOffsetPx = vec2(c * centerOffsetPx.x - s * centerOffsetPx.y, s * centerOffsetPx.x + c * centerOffsetPx.y);\n  v_centerPx = screenToPx(center.xy) + centerOffsetPx;\n${this.attributes_\n  .map(\n    (attribute) =>\n      `  ${attribute.varyingName} = ${attribute.varyingExpression};`,\n  )\n  .join('\\n')}\n${\n  this.shapeDiscardExpression_\n    ? `  if (${this.shapeDiscardExpression_}) { gl_Position = vec4(2.0, 2.0, 0.0, 0.0); }`\n    : ''\n}\n}`;\n  }\n\n  /**\n   * Generates a symbol fragment shader from the builder parameters\n   * @return {string|null} The full shader as a string; null if no size or color specified\n   */\n  getSymbolFragmentShader() {\n    if (!this.hasSymbol_) {\n      return null;\n    }\n\n    return `${COMMON_HEADER}\n${this.uniforms_.map((uniform) => `uniform ${uniform.type} ${uniform.name};`).join('\\n')}\nvarying vec2 v_texCoord;\nvarying vec4 v_hitColor;\nvarying vec2 v_centerPx;\nvarying float v_angle;\nvarying vec2 v_quadSizePx;\n${this.attributes_\n  .map(\n    (attribute) => `varying ${attribute.varyingType} ${attribute.varyingName};`,\n  )\n  .join('\\n')}\n${this.fragmentShaderFunctions_.join('\\n')}\n\nvoid main(void) {\n${this.attributes_\n  .map(\n    (attribute) =>\n      `  ${attribute.varyingType} ${attribute.name} = ${attribute.varyingName}; // assign to original attribute name`,\n  )\n  .join('\\n')}\n${this.fragmentDiscardExpression_ ? `  if (${this.fragmentDiscardExpression_}) { discard; }` : ''}\n  vec2 coordsPx = gl_FragCoord.xy / u_pixelRatio - v_centerPx; // relative to center\n  float c = cos(v_angle);\n  float s = sin(v_angle);\n  coordsPx = vec2(c * coordsPx.x - s * coordsPx.y, s * coordsPx.x + c * coordsPx.y);\n  gl_FragColor = ${this.symbolColorExpression_};\n  gl_FragColor.rgb *= gl_FragColor.a;\n  if (u_hitDetection > 0) {\n    if (gl_FragColor.a < 0.05) { discard; };\n    gl_FragColor = v_hitColor;\n  }\n}`;\n  }\n\n  /**\n   * Generates a stroke vertex shader from the builder parameters\n   * @return {string|null} The full shader as a string; null if no size or color specified\n   */\n  getStrokeVertexShader() {\n    if (!this.hasStroke_) {\n      return null;\n    }\n\n    return `${COMMON_HEADER}\n${this.uniforms_.map((uniform) => `uniform ${uniform.type} ${uniform.name};`).join('\\n')}\nattribute vec2 a_segmentStart;\nattribute vec2 a_segmentEnd;\nattribute vec2 a_localPosition;\nattribute float a_measureStart;\nattribute float a_measureEnd;\nattribute float a_angleTangentSum;\nattribute float a_distanceLow;\nattribute float a_distanceHigh;\nattribute vec2 a_joinAngles;\nattribute vec2 a_hitColor;\n\nvarying vec2 v_segmentStartPx;\nvarying vec2 v_segmentEndPx;\nvarying float v_angleStart;\nvarying float v_angleEnd;\nvarying float v_width;\nvarying vec4 v_hitColor;\nvarying float v_distancePx;\nvarying float v_measureStart;\nvarying float v_measureEnd;\n\n${this.attributes_\n  .map(\n    (attribute) => `attribute ${attribute.type} ${attribute.name};\nvarying ${attribute.varyingType} ${attribute.varyingName};`,\n  )\n  .join('\\n')}\n${this.vertexShaderFunctions_.join('\\n')}\n\nvec4 pxToScreen(vec2 pxPos) {\n  vec2 screenPos = 2.0 * pxPos / u_viewportSizePx - 1.0;\n  return vec4(screenPos, u_depth, 1.0);\n}\n\nbool isCap(float joinAngle) {\n  return joinAngle < -0.1;\n}\n\nvec2 getJoinOffsetDirection(vec2 normalPx, float joinAngle) {\n  float halfAngle = joinAngle / 2.0;\n  float c = cos(halfAngle);\n  float s = sin(halfAngle);\n  vec2 angleBisectorNormal = vec2(s * normalPx.x + c * normalPx.y, -c * normalPx.x + s * normalPx.y);\n  float length = 1.0 / s;\n  return angleBisectorNormal * length;\n}\n\nvec2 getOffsetPoint(vec2 point, vec2 normal, float joinAngle, float offsetPx) {\n  // if on a cap or the join angle is too high, offset the line along the segment normal\n  if (cos(joinAngle) > 0.998 || isCap(joinAngle)) {\n    return point - normal * offsetPx;\n  }\n  // offset is applied along the inverted normal (positive offset goes \"right\" relative to line direction)\n  return point - getJoinOffsetDirection(normal, joinAngle) * offsetPx;\n}\n\nvoid main(void) {\n  v_angleStart = a_joinAngles.x;\n  v_angleEnd = a_joinAngles.y;\n  float startEndRatio = a_localPosition.x * 0.5 + 0.5;\n  currentLineMetric = mix(a_measureStart, a_measureEnd, startEndRatio);\n  // we're reading the fractional part while keeping the sign (so -4.12 gives -0.12, 3.45 gives 0.45)\n\n  float lineWidth = ${this.strokeWidthExpression_};\n  float lineOffsetPx = ${this.strokeOffsetExpression_};\n\n  // compute segment start/end in px with offset\n  vec2 segmentStartPx = worldToPx(a_segmentStart);\n  vec2 segmentEndPx = worldToPx(a_segmentEnd);\n  vec2 tangentPx = normalize(segmentEndPx - segmentStartPx);\n  vec2 normalPx = vec2(-tangentPx.y, tangentPx.x);\n  segmentStartPx = getOffsetPoint(segmentStartPx, normalPx, v_angleStart, lineOffsetPx),\n  segmentEndPx = getOffsetPoint(segmentEndPx, normalPx, v_angleEnd, lineOffsetPx);\n\n  // compute current vertex position\n  float normalDir = -1. * a_localPosition.y;\n  float tangentDir = -1. * a_localPosition.x;\n  float angle = mix(v_angleStart, v_angleEnd, startEndRatio);\n  vec2 joinDirection;\n  vec2 positionPx = mix(segmentStartPx, segmentEndPx, startEndRatio);\n  // if angle is too high, do not make a proper join\n  if (cos(angle) > ${LINESTRING_ANGLE_COSINE_CUTOFF} || isCap(angle)) {\n    joinDirection = normalPx * normalDir - tangentPx * tangentDir;\n  } else {\n    joinDirection = getJoinOffsetDirection(normalPx * normalDir, angle);\n  }\n  positionPx = positionPx + joinDirection * (lineWidth * 0.5 + 1.); // adding 1 pixel for antialiasing\n  gl_Position = pxToScreen(positionPx);\n\n  v_segmentStartPx = segmentStartPx;\n  v_segmentEndPx = segmentEndPx;\n  v_width = lineWidth;\n  v_hitColor = unpackColor(a_hitColor);\n\n  v_distancePx = a_distanceLow / u_resolution - (lineOffsetPx * a_angleTangentSum);\n  float distanceHighPx = a_distanceHigh / u_resolution;\n  ${\n    this.strokePatternLengthExpression_ !== null\n      ? `v_distancePx = mod(v_distancePx, ${this.strokePatternLengthExpression_});\n  distanceHighPx = mod(distanceHighPx, ${this.strokePatternLengthExpression_});\n  `\n      : ''\n  }v_distancePx += distanceHighPx;\n\n  v_measureStart = a_measureStart;\n  v_measureEnd = a_measureEnd;\n${this.attributes_\n  .map(\n    (attribute) =>\n      `  ${attribute.varyingName} = ${attribute.varyingExpression};`,\n  )\n  .join('\\n')}\n${\n  this.shapeDiscardExpression_\n    ? `  if (${this.shapeDiscardExpression_}) { gl_Position = vec4(2.0, 2.0, 0.0, 0.0); }`\n    : ''\n}\n}`;\n  }\n\n  /**\n   * Generates a stroke fragment shader from the builder parameters\n   *\n   * @return {string|null} The full shader as a string; null if no size or color specified\n   */\n  getStrokeFragmentShader() {\n    if (!this.hasStroke_) {\n      return null;\n    }\n\n    return `${COMMON_HEADER}\n${this.uniforms_.map((uniform) => `uniform ${uniform.type} ${uniform.name};`).join('\\n')}\nvarying vec2 v_segmentStartPx;\nvarying vec2 v_segmentEndPx;\nvarying float v_angleStart;\nvarying float v_angleEnd;\nvarying float v_width;\nvarying vec4 v_hitColor;\nvarying float v_distancePx;\nvarying float v_measureStart;\nvarying float v_measureEnd;\n${this.attributes_\n  .map(\n    (attribute) => `varying ${attribute.varyingType} ${attribute.varyingName};`,\n  )\n  .join('\\n')}\n${this.fragmentShaderFunctions_.join('\\n')}\n\nbool isCap(float joinAngle) {\n  return joinAngle < -0.1;\n}\n\nfloat segmentDistanceField(vec2 point, vec2 start, vec2 end, float width) {\n  vec2 tangent = normalize(end - start);\n  vec2 normal = vec2(-tangent.y, tangent.x);\n  vec2 startToPoint = point - start;\n  return abs(dot(startToPoint, normal)) - width * 0.5;\n}\n\nfloat buttCapDistanceField(vec2 point, vec2 start, vec2 end) {\n  vec2 startToPoint = point - start;\n  vec2 tangent = normalize(end - start);\n  return dot(startToPoint, -tangent);\n}\n\nfloat squareCapDistanceField(vec2 point, vec2 start, vec2 end, float width) {\n  return buttCapDistanceField(point, start, end) - width * 0.5;\n}\n\nfloat roundCapDistanceField(vec2 point, vec2 start, vec2 end, float width) {\n  float onSegment = max(0., 1000. * dot(point - start, end - start)); // this is very high when inside the segment\n  return length(point - start) - width * 0.5 - onSegment;\n}\n\nfloat roundJoinDistanceField(vec2 point, vec2 start, vec2 end, float width) {\n  return roundCapDistanceField(point, start, end, width);\n}\n\nfloat bevelJoinField(vec2 point, vec2 start, vec2 end, float width, float joinAngle) {\n  vec2 startToPoint = point - start;\n  vec2 tangent = normalize(end - start);\n  float c = cos(joinAngle * 0.5);\n  float s = sin(joinAngle * 0.5);\n  float direction = -sign(sin(joinAngle));\n  vec2 bisector = vec2(c * tangent.x - s * tangent.y, s * tangent.x + c * tangent.y);\n  float radius = width * 0.5 * s;\n  return dot(startToPoint, bisector * direction) - radius;\n}\n\nfloat miterJoinDistanceField(vec2 point, vec2 start, vec2 end, float width, float joinAngle) {\n  if (cos(joinAngle) > ${LINESTRING_ANGLE_COSINE_CUTOFF}) { // avoid risking a division by zero\n    return bevelJoinField(point, start, end, width, joinAngle);\n  }\n  float miterLength = 1. / sin(joinAngle * 0.5);\n  float miterLimit = ${this.strokeMiterLimitExpression_};\n  if (miterLength > miterLimit) {\n    return bevelJoinField(point, start, end, width, joinAngle);\n  }\n  return -1000.;\n}\n\nfloat capDistanceField(vec2 point, vec2 start, vec2 end, float width, float capType) {\n   if (capType == ${stringToGlsl('butt')}) {\n    return buttCapDistanceField(point, start, end);\n  } else if (capType == ${stringToGlsl('square')}) {\n    return squareCapDistanceField(point, start, end, width);\n  }\n  return roundCapDistanceField(point, start, end, width);\n}\n\nfloat joinDistanceField(vec2 point, vec2 start, vec2 end, float width, float joinAngle, float joinType) {\n  if (joinType == ${stringToGlsl('bevel')}) {\n    return bevelJoinField(point, start, end, width, joinAngle);\n  } else if (joinType == ${stringToGlsl('miter')}) {\n    return miterJoinDistanceField(point, start, end, width, joinAngle);\n  }\n  return roundJoinDistanceField(point, start, end, width);\n}\n\nfloat computeSegmentPointDistance(vec2 point, vec2 start, vec2 end, float width, float joinAngle, float capType, float joinType) {\n  if (isCap(joinAngle)) {\n    return capDistanceField(point, start, end, width, capType);\n  }\n  return joinDistanceField(point, start, end, width, joinAngle, joinType);\n}\n\nfloat distanceFromSegment(vec2 point, vec2 start, vec2 end) {\n  vec2 tangent = end - start;\n  vec2 startToPoint = point - start;\n  // inspire by capsule fn in https://iquilezles.org/articles/distfunctions/\n  float h = clamp(dot(startToPoint, tangent) / dot(tangent, tangent), 0.0, 1.0);\n  return length(startToPoint - tangent * h);\n}\n\nvoid main(void) {\n${this.attributes_\n  .map(\n    (attribute) =>\n      `  ${attribute.varyingType} ${attribute.name} = ${attribute.varyingName}; // assign to original attribute name`,\n  )\n  .join('\\n')}\n\n  vec2 currentPointPx = gl_FragCoord.xy / u_pixelRatio;\n  vec2 worldPos = pxToWorld(currentPointPx);\n  if (\n    abs(u_renderExtent[0] - u_renderExtent[2]) > 0.0 && (\n      worldPos[0] < u_renderExtent[0] ||\n      worldPos[1] < u_renderExtent[1] ||\n      worldPos[0] > u_renderExtent[2] ||\n      worldPos[1] > u_renderExtent[3]\n    )\n  ) {\n    discard;\n  }\n\n  float segmentLengthPx = length(v_segmentEndPx - v_segmentStartPx);\n  segmentLengthPx = max(segmentLengthPx, 1.17549429e-38); // avoid divide by zero\n  vec2 segmentTangent = (v_segmentEndPx - v_segmentStartPx) / segmentLengthPx;\n  vec2 segmentNormal = vec2(-segmentTangent.y, segmentTangent.x);\n  vec2 startToPointPx = currentPointPx - v_segmentStartPx;\n  float lengthToPointPx = max(0., min(dot(segmentTangent, startToPointPx), segmentLengthPx));\n  float currentLengthPx = lengthToPointPx + v_distancePx;\n  float currentRadiusPx = distanceFromSegment(currentPointPx, v_segmentStartPx, v_segmentEndPx);\n  float currentRadiusRatio = dot(segmentNormal, startToPointPx) * 2. / v_width;\n  currentLineMetric = mix(v_measureStart, v_measureEnd, lengthToPointPx / segmentLengthPx);\n\n${this.fragmentDiscardExpression_ ? `  if (${this.fragmentDiscardExpression_}) { discard; }` : ''}\n\n  float capType = ${this.strokeCapExpression_};\n  float joinType = ${this.strokeJoinExpression_};\n  float segmentStartDistance = computeSegmentPointDistance(currentPointPx, v_segmentStartPx, v_segmentEndPx, v_width, v_angleStart, capType, joinType);\n  float segmentEndDistance = computeSegmentPointDistance(currentPointPx, v_segmentEndPx, v_segmentStartPx, v_width, v_angleEnd, capType, joinType);\n  float distanceField = max(\n    segmentDistanceField(currentPointPx, v_segmentStartPx, v_segmentEndPx, v_width),\n    max(segmentStartDistance, segmentEndDistance)\n  );\n  distanceField = max(distanceField, ${this.strokeDistanceFieldExpression_});\n\n  vec4 color = ${this.strokeColorExpression_};\n  color.a *= smoothstep(0.5, -0.5, distanceField);\n  gl_FragColor = color;\n  gl_FragColor.a *= u_globalAlpha;\n  gl_FragColor.rgb *= gl_FragColor.a;\n  if (u_hitDetection > 0) {\n    if (gl_FragColor.a < 0.1) { discard; };\n    gl_FragColor = v_hitColor;\n  }\n}`;\n  }\n\n  /**\n   * Generates a fill vertex shader from the builder parameters\n   *\n   * @return {string|null} The full shader as a string; null if no color specified\n   */\n  getFillVertexShader() {\n    if (!this.hasFill_) {\n      return null;\n    }\n\n    return `${COMMON_HEADER}\n${this.uniforms_.map((uniform) => `uniform ${uniform.type} ${uniform.name};`).join('\\n')}\nattribute vec2 a_position;\nattribute vec2 a_hitColor;\n\nvarying vec4 v_hitColor;\nvarying vec2 v_patternOriginPx;\nvarying vec2 v_patternSizePx;\n\n${this.attributes_\n  .map(\n    (attribute) => `attribute ${attribute.type} ${attribute.name};\nvarying ${attribute.varyingType} ${attribute.varyingName};`,\n  )\n  .join('\\n')}\n${this.vertexShaderFunctions_.join('\\n')}\nvoid main(void) {\n  gl_Position = u_projectionMatrix * vec4(a_position, u_depth, 1.0);\n  v_hitColor = unpackColor(a_hitColor);\n${\n  this.fillPatternSizeExpression_ !== null\n    ? `\n  // this computes the pattern offset in screenspace using double-float arithmetics\n  v_patternSizePx = ${this.fillPatternSizeExpression_};\n  vec2 patternSizeScaledX = df_mul(df_from(v_patternSizePx.x), u_df_patternScaleRatio);\n  vec2 patternSizeScaledY = df_mul(df_from(v_patternSizePx.y), u_df_patternScaleRatio);\n  v_patternOriginPx = vec2(\n    df_mod(u_df_patternOriginX, patternSizeScaledX),\n    df_mod(u_df_patternOriginY, patternSizeScaledY)\n  );\n\n  // reapply rotation to the pattern origin\n  v_patternOriginPx -= u_viewportSizePx / 2.; // translate to viewport center\n  v_patternOriginPx = vec2(\n    cos(-u_rotation) * v_patternOriginPx.x - sin(-u_rotation) * v_patternOriginPx.y,\n    sin(-u_rotation) * v_patternOriginPx.x + cos(-u_rotation) * v_patternOriginPx.y\n  );\n  v_patternOriginPx += u_viewportSizePx / 2.; // translate back\n`\n    : '  v_patternOriginPx = vec2(0.);'\n}\n${this.attributes_\n  .map(\n    (attribute) =>\n      `  ${attribute.varyingName} = ${attribute.varyingExpression};`,\n  )\n  .join('\\n')}\n${\n  this.shapeDiscardExpression_\n    ? `  if (${this.shapeDiscardExpression_}) { gl_Position = vec4(2.0, 2.0, 0.0, 0.0); }`\n    : ''\n}\n}`;\n  }\n\n  /**\n   * Generates a fill fragment shader from the builder parameters\n   * @return {string|null} The full shader as a string; null if no color specified\n   */\n  getFillFragmentShader() {\n    if (!this.hasFill_) {\n      return null;\n    }\n\n    return `${COMMON_HEADER}\n${this.uniforms_.map((uniform) => `uniform ${uniform.type} ${uniform.name};`).join('\\n')}\nvarying vec4 v_hitColor;\nvarying vec2 v_patternOriginPx;\nvarying vec2 v_patternSizePx;\n${this.attributes_\n  .map(\n    (attribute) => `varying ${attribute.varyingType} ${attribute.varyingName};`,\n  )\n  .join('\\n')}\n${this.fragmentShaderFunctions_.join('\\n')}\n\nvoid main(void) {\n${this.attributes_\n  .map(\n    (attribute) =>\n      `  ${attribute.varyingType} ${attribute.name} = ${attribute.varyingName}; // assign to original attribute name`,\n  )\n  .join('\\n')}\n  vec2 pxPos = gl_FragCoord.xy / u_pixelRatio;\n  vec2 worldPos = pxToWorld(pxPos);\n  if (\n    abs(u_renderExtent[0] - u_renderExtent[2]) > 0.0 && (\n      worldPos[0] < u_renderExtent[0] ||\n      worldPos[1] < u_renderExtent[1] ||\n      worldPos[0] > u_renderExtent[2] ||\n      worldPos[1] > u_renderExtent[3]\n    )\n  ) {\n    discard;\n  }\n${this.fragmentDiscardExpression_ ? `  if (${this.fragmentDiscardExpression_}) { discard; }` : ''}\n  gl_FragColor = ${this.fillColorExpression_};\n  gl_FragColor.a *= u_globalAlpha;\n  gl_FragColor.rgb *= gl_FragColor.a;\n  if (u_hitDetection > 0) {\n    if (gl_FragColor.a < 0.1) { discard; };\n    gl_FragColor = v_hitColor;\n  }\n}`;\n  }\n}\n","/**\n * @module ol/style/flat\n */\n\n/**\n * @api\n * @fileoverview Vector layers can be styled with an object literal containing properties for\n * stroke, fill, image, and text styles.  The types below can be composed into a single object.\n * For example, a style with both stroke and fill properties could look like this:\n *\n *     const style = {\n *       'stroke-color': 'yellow',\n *       'stroke-width': 1.5,\n *       'fill-color': 'orange',\n *     };\n *\n * See details about the available properties depending on what type of symbolizer should be applied:\n *  {@link module:ol/style/flat~FlatStroke Stroke} - properties for applying a stroke to lines and polygons\n *  {@link module:ol/style/flat~FlatFill Fill} - properties for filling polygons\n *  {@link module:ol/style/flat~FlatText Text} - properties for labeling points, lines, and polygons\n *  {@link module:ol/style/flat~FlatIcon Icon} - properties for rendering points with an icon\n *  {@link module:ol/style/flat~FlatCircle Circle} - properties for rendering points with a circle\n *  {@link module:ol/style/flat~FlatShape Shape} - properties for rendering points with a regular shape\n *\n * To conditionally apply styles based on a filter, a list of {@link module:ol/style/flat~Rule rules} can be used.\n * For example, to style points with a big orange circle if the population is greater than 1 million and\n * a smaller blue circle otherwise:\n *\n *     const rules = [\n *       {\n *         filter: ['>', ['get', 'population'], 1_000_000],\n *         style: {\n *           'circle-radius': 10,\n *           'circle-fill-color': 'red',\n *         }\n *       },\n *       {\n *         else: true,\n *         style: {\n *           'circle-radius': 5,\n *           'circle-fill-color': 'blue',\n *         },\n *       },\n *     ];\n */\n\n/**\n * A literal boolean (e.g. `true`) or an expression that evaluates to a boolean (e.g. `['>', ['get', 'population'], 1_000_000]`).\n *\n * @typedef {boolean|Array} BooleanExpression\n */\n\n/**\n * A literal string (e.g. `'hello'`) or an expression that evaluates to a string (e.g. `['get', 'greeting']`).\n *\n * @typedef {string|Array} StringExpression\n */\n\n/**\n * A literal number (e.g. `42`) or an expression that evaluates to a number (e.g. `['+', 40, 2]`).\n *\n * @typedef {number|Array} NumberExpression\n */\n\n/**\n * A CSS named color (e.g. `'blue'`), an array of 3 RGB values (e.g. `[0, 255, 0]`), an array of 4 RGBA values\n * (e.g. `[0, 255, 0, 0.5]`), or an expression that evaluates to one of these color types (e.g. `['get', 'color']`).\n *\n * @typedef {import(\"../color.js\").Color|string|Array} ColorExpression\n */\n\n/**\n * An array of numbers (e.g. `[1, 2, 3]`) or an expression that evaluates to the same (e.g. `['get', 'values']`).\n *\n * @typedef {Array<number>|Array} NumberArrayExpression\n */\n\n/**\n * An array of two numbers (e.g. `[10, 20]`) or an expression that evaluates to the same (e.g. `['get', 'size']`).\n *\n * @typedef {number|Array<number>|Array} SizeExpression\n */\n\n/**\n * For static styling, the [layer.setStyle()]{@link module:ol/layer/Vector~VectorLayer#setStyle} method\n * can be called with an object literal that has fill, stroke, text, icon, regular shape, and/or circle properties.\n * @api\n *\n * @typedef {FlatFill & FlatStroke & FlatText & FlatIcon & FlatShape & FlatCircle} FlatStyle\n */\n\n/**\n * A flat style literal or an array of the same.\n *\n * @typedef {FlatStyle|Array<FlatStyle>|Array<Rule>} FlatStyleLike\n */\n\n/**\n * Fill style properties applied to polygon features.\n *\n * @typedef {Object} FlatFill\n * @property {ColorExpression} [fill-color] The fill color. `'none'` means no fill and no hit detection (applies to Canvas only).\n * @property {StringExpression} [fill-pattern-src] Fill pattern image source URI. If `fill-color` is defined as well,\n * it will be used to tint this image. (Expressions only in Canvas)\n * @property {SizeExpression} [fill-pattern-size] Fill pattern image size in pixels.\n * Can be used together with `fill-pattern-offset` to define the sub-rectangle to use\n * from a fill pattern image sprite sheet.\n * @property {SizeExpression} [fill-pattern-offset=[0, 0]] Offset, which, together with the size and the offset origin, define the\n * sub-rectangle to use from the original fill pattern image.\n * @property {import(\"./Icon.js\").IconOrigin} [fill-pattern-offset-origin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`. (WebGL only)\n */\n\n/**\n * Stroke style properties applied to line strings and polygon boundaries. To apply a stroke, at least one of\n * `stroke-color` or `stroke-width` must be provided.\n *\n * @typedef {Object} FlatStroke\n * @property {ColorExpression} [stroke-color] The stroke color.\n * @property {NumberExpression} [stroke-width] Stroke pixel width.\n * @property {StringExpression} [stroke-line-cap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {StringExpression} [stroke-line-join='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {NumberArrayExpression} [stroke-line-dash] Line dash pattern.\n * @property {NumberExpression} [stroke-line-dash-offset=0] Line dash offset.\n * @property {NumberExpression} [stroke-miter-limit=10] Miter limit.\n * @property {NumberExpression} [stroke-offset] Stroke offset in pixel along the normal. A positive value offsets the line to the right,\n * relative to the direction of the line.\n * @property {string} [stroke-pattern-src] Stroke pattern image source URI. If `stroke-color` is defined as well,\n * it will be used to tint this image. (WebGL only)\n * @property {SizeExpression} [stroke-pattern-offset=[0, 0]] Offset, which, together with the size and the offset origin,\n * define the sub-rectangle to use from the original stroke pattern image. (WebGL only)\n * @property {import(\"./Icon.js\").IconOrigin} [stroke-pattern-offset-origin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`. (WebGL only)\n * @property {SizeExpression} [stroke-pattern-size] Stroke pattern image size in pixel. Can be used together with `stroke-pattern-offset` to define the\n * sub-rectangle to use from the origin (sprite) fill pattern image. (WebGL only)\n * @property {NumberExpression} [stroke-pattern-spacing] Spacing between each pattern occurrence in pixels; 0 if undefined. (WebGL only)\n * @property {NumberExpression} [stroke-pattern-start-offset] Stroke pattern offset in pixels at the start of the line. (WebGL only)\n * @property {NumberExpression} [z-index] The zIndex of the style.\n */\n\n/**\n * Label style properties applied to all features. At a minimum, a `text-value` must be provided.\n * Note: text style is currently not supported in WebGL layers\n *\n * @typedef {Object} FlatText\n * @property {StringExpression} [text-value] Text content (with `\\n` for line breaks).\n * @property {StringExpression} [text-font='10px sans-serif'] Font style as [CSS `font`](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font) value.\n * @property {NumberExpression} [text-max-angle=Math.PI/4] When `text-placement` is set to `'line'`, allow a maximum angle between adjacent characters.\n * The expected value is in radians, and the default is 45° (`Math.PI / 4`).\n * @property {NumberExpression} [text-offset-x=0] Horizontal text offset in pixels. A positive will shift the text right.\n * @property {NumberExpression} [text-offset-y=0] Vertical text offset in pixels. A positive will shift the text down.\n * @property {BooleanExpression} [text-overflow=false] For polygon labels or when `placement` is set to `'line'`, allow text to exceed\n * the width of the polygon at the label position or the length of the path that it follows.\n * @property {StringExpression} [text-placement='point'] Text placement.\n * @property {NumberExpression} [text-repeat] Repeat interval in pixels. When set, the text will be repeated at this interval. Only available when\n * `text-placement` is set to `'line'`. Overrides `text-align`.\n * @property {SizeExpression} [text-scale] Scale.\n * @property {BooleanExpression} [text-rotate-with-view=false] Whether to rotate the text with the view.\n * @property {NumberExpression} [text-rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {StringExpression} [text-align] Text alignment. Possible values: `'left'`, `'right'`, `'center'`, `'end'` or `'start'`.\n * Default is `'center'` for `'text-placement': 'point'`. For `'text-placement': 'line'`, the default is to let the renderer choose a\n * placement where `text-max-angle` is not exceeded.\n * @property {StringExpression} [text-justify] Text justification within the text box.\n * If not set, text is justified towards the `textAlign` anchor.\n * Otherwise, use options `'left'`, `'center'`, or `'right'` to justify the text within the text box.\n * **Note:** `text-justify` is ignored for immediate rendering and also for `'text-placement': 'line'`.\n * @property {StringExpression} [text-baseline='middle'] Text base line. Possible values: `'bottom'`, `'top'`, `'middle'`, `'alphabetic'`,\n * `'hanging'`, `'ideographic'`.\n * @property {NumberArrayExpression} [text-padding=[0, 0, 0, 0]] Padding in pixels around the text for decluttering and background. The order of\n * values in the array is `[top, right, bottom, left]`.\n * @property {ColorExpression} [text-fill-color] The fill color. `'none'` means no fill and no hit detection.\n * @property {ColorExpression} [text-background-fill-color] The fill color. `'none'` means no fill and no hit detection.\n * @property {ColorExpression} [text-stroke-color] The stroke color.\n * @property {StringExpression} [text-stroke-line-cap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {StringExpression} [text-stroke-line-join='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {NumberArrayExpression} [text-stroke-line-dash] Line dash pattern.\n * @property {NumberExpression} [text-stroke-line-dash-offset=0] Line dash offset.\n * @property {NumberExpression} [text-stroke-miter-limit=10] Miter limit.\n * @property {NumberExpression} [text-stroke-width] Stroke pixel width.\n * @property {ColorExpression} [text-background-stroke-color] The stroke color.\n * @property {StringExpression} [text-background-stroke-line-cap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {StringExpression} [text-background-stroke-line-join='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {NumberArrayExpression} [text-background-stroke-line-dash] Line dash pattern.\n * @property {NumberExpression} [text-background-stroke-line-dash-offset=0] Line dash offset.\n * @property {NumberExpression} [text-background-stroke-miter-limit=10] Miter limit.\n * @property {NumberExpression} [text-background-stroke-width] Stroke pixel width.\n * @property {import(\"./Style.js\").DeclutterMode} [text-declutter-mode] Declutter mode\n * @property {NumberExpression} [z-index] The zIndex of the style.\n */\n\n/**\n * Icon style properties applied to point features. `icon-src` must be provided to render\n * points with an icon.\n *\n * @typedef {Object} FlatIcon\n * @property {string} [icon-src] Image source URI.\n * @property {NumberArrayExpression} [icon-anchor=[0.5, 0.5]] Anchor. Default value is the icon center.\n * @property {import(\"./Icon.js\").IconOrigin} [icon-anchor-origin='top-left'] Origin of the anchor: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {import(\"./Icon.js\").IconAnchorUnits} [icon-anchor-x-units='fraction'] Units in which the anchor x value is\n * specified. A value of `'fraction'` indicates the x value is a fraction of the icon. A value of `'pixels'` indicates\n * the x value in pixels.\n * @property {import(\"./Icon.js\").IconAnchorUnits} [icon-anchor-y-units='fraction'] Units in which the anchor y value is\n * specified. A value of `'fraction'` indicates the y value is a fraction of the icon. A value of `'pixels'` indicates\n * the y value in pixels.\n * @property {ColorExpression} [icon-color] Color to tint the icon. If not specified,\n * the icon will be left as is.\n * @property {null|string} [icon-cross-origin] The `crossOrigin` attribute for loaded images. Note that you must provide a\n * `icon-cross-origin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {SizeExpression} [icon-offset=[0, 0]] Offset, which, together with the size and the offset origin, define the\n * sub-rectangle to use from the original icon image.\n * @property {NumberArrayExpression} [icon-displacement=[0,0]] Displacement of the icon.\n * @property {import(\"./Icon.js\").IconOrigin} [icon-offset-origin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {NumberExpression} [icon-opacity=1] Opacity of the icon.\n * @property {SizeExpression} [icon-scale=1] Scale.\n * @property {NumberExpression} [icon-width] Width of the icon. If not specified, the actual image width will be used. Cannot be combined\n * with `scale`. (Expressions only in WebGL)\n * @property {NumberExpression} [icon-height] Height of the icon. If not specified, the actual image height will be used. Cannot be combined\n * with `scale`. (Expressions only in WebGL)\n * @property {NumberExpression} [icon-rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {BooleanExpression} [icon-rotate-with-view=false] Whether to rotate the icon with the view. (Expressions only supported in Canvas)\n * @property {SizeExpression} [icon-size] Icon size in pixel. Can be used together with `icon-offset` to define the\n * sub-rectangle to use from the origin (sprite) icon image. (Expressions only in WebGL)\n * @property {import(\"./Style.js\").DeclutterMode} [icon-declutter-mode] Declutter mode (Canvas only)\n * @property {NumberExpression} [z-index] The zIndex of the style. (Canvas only)\n */\n\n/**\n * Regular shape style properties for rendering point features. At least `shape-points` must be provided.\n *\n * @typedef {Object} FlatShape\n * @property {NumberExpression} [shape-points] Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides. (Expressions only in WebGL)\n * @property {ColorExpression} [shape-fill-color] The fill color. `'none'` means no fill and no hit detection.\n * @property {ColorExpression} [shape-stroke-color] The stroke color.\n * @property {NumberExpression} [shape-stroke-width] Stroke pixel width.\n * @property {StringExpression} [shape-stroke-line-cap='round'] Line cap style: `butt`, `round`, or `square`. (Canvas only)\n * @property {StringExpression} [shape-stroke-line-join='round'] Line join style: `bevel`, `round`, or `miter`. (Canvas only)\n * @property {NumberArrayExpression} [shape-stroke-line-dash] Line dash pattern. (Canvas only)\n * @property {NumberExpression} [shape-stroke-line-dash-offset=0] Line dash offset. (Canvas only)\n * @property {NumberExpression} [shape-stroke-miter-limit=10] Miter limit. (Canvas only)\n * @property {NumberExpression} [shape-radius] Radius of a regular polygon. (Expressions only in WebGL)\n * @property {NumberExpression} [shape-radius2] Second radius to make a star instead of a regular polygon. (Expressions only in WebGL)\n * @property {NumberExpression} [shape-angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up. (Expressions only in WebGL)\n * @property {NumberArrayExpression} [shape-displacement=[0,0]] Displacement of the shape\n * @property {NumberExpression} [shape-opacity] Shape opacity. (WebGL only)\n * @property {NumberExpression} [shape-rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {BooleanExpression} [shape-rotate-with-view=false] Whether to rotate the shape with the view. (Expression only supported in Canvas)\n * @property {SizeExpression} [shape-scale=1] Scale. Unless two-dimensional scaling is required a better\n * result may be obtained with appropriate settings for `shape-radius` and `shape-radius2`.\n * @property {import(\"./Style.js\").DeclutterMode} [shape-declutter-mode] Declutter mode. (Canvas only)\n * @property {NumberExpression} [z-index] The zIndex of the style. (Canvas only)\n */\n\n/**\n * Circle style properties for rendering point features. At least `circle-radius` must be provided.\n *\n * @typedef {Object} FlatCircle\n * @property {NumberExpression} [circle-radius] Circle radius.\n * @property {ColorExpression} [circle-fill-color] The fill color. `'none'` means no fill and no hit detection.\n * @property {ColorExpression} [circle-stroke-color] The stroke color.\n * @property {NumberExpression} [circle-stroke-width] Stroke pixel width.\n * @property {StringExpression} [circle-stroke-line-cap='round'] Line cap style: `butt`, `round`, or `square`. (Canvas only)\n * @property {StringExpression} [circle-stroke-line-join='round'] Line join style: `bevel`, `round`, or `miter`. (Canvas only)\n * @property {NumberArrayExpression} [circle-stroke-line-dash] Line dash pattern. (Canvas only)\n * @property {NumberExpression} [circle-stroke-line-dash-offset=0] Line dash offset. (Canvas only)\n * @property {NumberExpression} [circle-stroke-miter-limit=10] Miter limit. (Canvas only)\n * @property {NumberArrayExpression} [circle-displacement=[0,0]] displacement\n * @property {SizeExpression} [circle-scale=1] Scale. A two-dimensional scale will produce an ellipse.\n * Unless two-dimensional scaling is required a better result may be obtained with an appropriate setting for `circle-radius`.\n * @property {NumberExpression} [circle-opacity] Circle opacity. (WebGL only)\n * @property {NumberExpression} [circle-rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two-dimensional scale).\n * @property {BooleanExpression} [circle-rotate-with-view=false] Whether to rotate the shape with the view (Expression only supported in Canvas)\n * (meaningful only when used in conjunction with a two-dimensional scale).\n * @property {import(\"./Style.js\").DeclutterMode} [circle-declutter-mode] Declutter mode (Canvas only)\n * @property {NumberExpression} [z-index] The zIndex of the style. (Canvas only)\n */\n\n/**\n * These default style properties are applied when no other style is given.\n *\n * @typedef {Object} DefaultStyle\n * @property {string} fill-color `'rgba(255,255,255,0.4)'`\n * @property {string} stroke-color `'#3399CC'`\n * @property {number} stroke-width `1.25`\n * @property {number} circle-radius `5`\n * @property {string} circle-fill-color `'rgba(255,255,255,0.4)'`\n * @property {number} circle-stroke-width `1.25`\n * @property {string} circle-stroke-color `'#3399CC'`\n */\n\n/**\n * @return {DefaultStyle} The default flat style.\n */\nexport function createDefaultStyle() {\n  return {\n    'fill-color': 'rgba(255,255,255,0.4)',\n    'stroke-color': '#3399CC',\n    'stroke-width': 1.25,\n    'circle-radius': 5,\n    'circle-fill-color': 'rgba(255,255,255,0.4)',\n    'circle-stroke-width': 1.25,\n    'circle-stroke-color': '#3399CC',\n  };\n}\n\n/**\n * A rule is used to conditionally apply a style. If the rule's filter evaluates to true,\n * the style will be applied.\n *\n * @typedef {Object} Rule\n * @property {FlatStyle|Array<FlatStyle>} style The style to be applied if the filter matches.\n * @property {import(\"../expr/expression.js\").EncodedExpression} [filter] The filter used\n * to determine if a style applies. If no filter is included, the rule always applies\n * (unless it is an else rule).\n * @property {boolean} [else] If true, the rule applies only if no other previous rule applies.\n * If the else rule also has a filter, the rule will not apply if the filter does not match.\n */\n\n/**\n * Style variables are provided as an object. The variables can be read in a {@link import(\"../expr/expression.js\").ExpressionValue style expression}\n * using the `['var', 'varName']` operator.\n * Each variable must hold a literal value (not an expression).\n * @typedef {Object<string, number|Array<number>|string|boolean>} StyleVariables\n */\n","/**\n * Utilities for filling WebGL buffers\n * @module ol/render/webgl/bufferUtil\n */\nimport earcut from 'earcut';\nimport {angleBetween} from '../../coordinate.js';\nimport {apply as applyTransform} from '../../transform.js';\n\nexport const LINESTRING_ANGLE_COSINE_CUTOFF = 0.985;\n\n/** @type {Array<number>} */\nconst tmpArray_ = [];\n\n/**\n * An object holding positions both in an index and a vertex buffer.\n * @typedef {Object} BufferPositions\n * @property {number} vertexAttributesPosition Position in the vertex buffer\n * @property {number} instanceAttributesPosition Position in the vertex buffer\n * @property {number} indicesPosition Position in the index buffer\n */\nconst bufferPositions_ = {\n  vertexAttributesPosition: 0,\n  instanceAttributesPosition: 0,\n  indicesPosition: 0,\n};\n\n/**\n * Pushes a quad (two triangles) based on a point geometry\n * @param {Float32Array} instructions Array of render instructions for points.\n * @param {number} elementIndex Index from which render instructions will be read.\n * @param {Float32Array} instanceAttributesBuffer Buffer in the form of a typed array.\n * @param {number} customAttributesSize Amount of custom attributes for each element.\n * @param {BufferPositions} [bufferPositions] Buffer write positions; if not specified, positions will be set at 0.\n * @return {BufferPositions} New buffer positions where to write next\n * @property {number} vertexAttributesPosition New position in the vertex buffer where future writes should start.\n * @property {number} indicesPosition New position in the index buffer where future writes should start.\n * @private\n */\nexport function writePointFeatureToBuffers(\n  instructions,\n  elementIndex,\n  instanceAttributesBuffer,\n  customAttributesSize,\n  bufferPositions,\n) {\n  const x = instructions[elementIndex++];\n  const y = instructions[elementIndex++];\n\n  // read custom numerical attributes on the feature\n  const customAttrs = tmpArray_;\n  customAttrs.length = customAttributesSize;\n  for (let i = 0; i < customAttrs.length; i++) {\n    customAttrs[i] = instructions[elementIndex + i];\n  }\n\n  let instPos = bufferPositions\n    ? bufferPositions.instanceAttributesPosition\n    : 0;\n\n  instanceAttributesBuffer[instPos++] = x;\n  instanceAttributesBuffer[instPos++] = y;\n  if (customAttrs.length) {\n    instanceAttributesBuffer.set(customAttrs, instPos);\n    instPos += customAttrs.length;\n  }\n\n  bufferPositions_.instanceAttributesPosition = instPos;\n  return bufferPositions_;\n}\n\n/**\n * Pushes a single quad to form a line segment; also includes a computation for the join angles with previous and next\n * segment, in order to be able to offset the vertices correctly in the shader.\n * Join angles are between 0 and 2PI.\n * This also computes the length of the current segment and the sum of the join angle tangents in order\n * to store this information on each subsequent segment along the line. This is necessary to correctly render dashes\n * and symbols along the line.\n *\n *   pB (before)                          pA (after)\n *    X             negative             X\n *     \\             offset             /\n *      \\                              /\n *       \\   join              join   /\n *        \\ angle 0          angle 1 /\n *         \\←---                ←---/      positive\n *          \\   ←--          ←--   /        offset\n *           \\     ↑       ↓      /\n *            X────┴───────┴─────X\n *            p0                  p1\n *\n * @param {Float32Array} instructions Array of render instructions for lines.s\n * @param {number} segmentStartIndex Index of the segment start point from which render instructions will be read.\n * @param {number} segmentEndIndex Index of the segment end point from which render instructions will be read.\n * @param {number|null} beforeSegmentIndex Index of the point right before the segment (null if none, e.g this is a line start)\n * @param {number|null} afterSegmentIndex Index of the point right after the segment (null if none, e.g this is a line end)\n * @param {Array<number>} instanceAttributesArray Array containing instance attributes.\n * @param {Array<number>} customAttributes Array of custom attributes value\n * @param {import('../../transform.js').Transform} toWorldTransform Transform matrix used to obtain world coordinates from instructions\n * @param {number} currentLength Cumulated length of segments processed so far\n * @param {number} currentAngleTangentSum Cumulated tangents of the join angles processed so far\n * @return {{length: number, angle: number}} Cumulated length with the newly processed segment (in world units), new sum of the join angle tangents\n * @private\n */\nexport function writeLineSegmentToBuffers(\n  instructions,\n  segmentStartIndex,\n  segmentEndIndex,\n  beforeSegmentIndex,\n  afterSegmentIndex,\n  instanceAttributesArray,\n  customAttributes,\n  toWorldTransform,\n  currentLength,\n  currentAngleTangentSum,\n) {\n  // The segment is composed of two positions called P0[x0, y0] and P1[x1, y1]\n  // Depending on whether there are points before and after the segment, its final shape\n  // will be different\n  const p0 = [\n    instructions[segmentStartIndex],\n    instructions[segmentStartIndex + 1],\n  ];\n  const p1 = [instructions[segmentEndIndex], instructions[segmentEndIndex + 1]];\n\n  const m0 = instructions[segmentStartIndex + 2];\n  const m1 = instructions[segmentEndIndex + 2];\n\n  // to compute join angles we need to reproject coordinates back in world units\n  const p0world = applyTransform(toWorldTransform, [...p0]);\n  const p1world = applyTransform(toWorldTransform, [...p1]);\n\n  // a negative angle indicates a line cap\n  let angle0 = -1;\n  let angle1 = -1;\n  let newAngleTangentSum = currentAngleTangentSum;\n\n  const joinBefore = beforeSegmentIndex !== null;\n  const joinAfter = afterSegmentIndex !== null;\n\n  // add vertices and adapt offsets for P0 in case of join\n  if (joinBefore) {\n    // B for before\n    const pB = [\n      instructions[beforeSegmentIndex],\n      instructions[beforeSegmentIndex + 1],\n    ];\n    const pBworld = applyTransform(toWorldTransform, [...pB]);\n    angle0 = angleBetween(p0world, p1world, pBworld);\n\n    // only add to the sum if the angle isn't too close to 0 or 2PI\n    if (Math.cos(angle0) <= LINESTRING_ANGLE_COSINE_CUTOFF) {\n      newAngleTangentSum += Math.tan((angle0 - Math.PI) / 2);\n    }\n  }\n  // adapt offsets for P1 in case of join; add to angle sum\n  if (joinAfter) {\n    // A for after\n    const pA = [\n      instructions[afterSegmentIndex],\n      instructions[afterSegmentIndex + 1],\n    ];\n    const pAworld = applyTransform(toWorldTransform, [...pA]);\n    angle1 = angleBetween(p1world, p0world, pAworld);\n\n    // only add to the sum if the angle isn't too close to 0 or 2PI\n    if (Math.cos(angle1) <= LINESTRING_ANGLE_COSINE_CUTOFF) {\n      newAngleTangentSum += Math.tan((Math.PI - angle1) / 2);\n    }\n  }\n\n  const maxPrecision = Math.pow(2, 24);\n  const distanceLow = currentLength % maxPrecision;\n  const distanceHigh = Math.floor(currentLength / maxPrecision) * maxPrecision;\n\n  instanceAttributesArray.push(\n    p0[0],\n    p0[1],\n    m0,\n    p1[0],\n    p1[1],\n    m1,\n    angle0,\n    angle1,\n    distanceLow,\n    distanceHigh,\n    currentAngleTangentSum,\n  );\n  instanceAttributesArray.push(...customAttributes);\n\n  return {\n    length:\n      currentLength +\n      Math.sqrt(\n        (p1world[0] - p0world[0]) * (p1world[0] - p0world[0]) +\n          (p1world[1] - p0world[1]) * (p1world[1] - p0world[1]),\n      ),\n    angle: newAngleTangentSum,\n  };\n}\n\n/**\n * Pushes several triangles to form a polygon, including holes\n * @param {Float32Array} instructions Array of render instructions for lines.\n * @param {number} polygonStartIndex Index of the polygon start point from which render instructions will be read.\n * @param {Array<number>} vertexArray Array containing vertices.\n * @param {Array<number>} indexArray Array containing indices.\n * @param {number} customAttributesSize Amount of custom attributes for each element.\n * @return {number} Next polygon instructions index\n * @private\n */\nexport function writePolygonTrianglesToBuffers(\n  instructions,\n  polygonStartIndex,\n  vertexArray,\n  indexArray,\n  customAttributesSize,\n) {\n  const instructionsPerVertex = 2; // x, y\n  const attributesPerVertex = 2 + customAttributesSize;\n  let instructionsIndex = polygonStartIndex;\n  const customAttributes = instructions.slice(\n    instructionsIndex,\n    instructionsIndex + customAttributesSize,\n  );\n  instructionsIndex += customAttributesSize;\n  const ringsCount = instructions[instructionsIndex++];\n  let verticesCount = 0;\n  const holes = new Array(ringsCount - 1);\n  for (let i = 0; i < ringsCount; i++) {\n    verticesCount += instructions[instructionsIndex++];\n    if (i < ringsCount - 1) {\n      holes[i] = verticesCount;\n    }\n  }\n  const flatCoords = instructions.slice(\n    instructionsIndex,\n    instructionsIndex + verticesCount * instructionsPerVertex,\n  );\n\n  // pushing to vertices and indices!! this is where the magic happens\n  const result = earcut(flatCoords, holes, instructionsPerVertex);\n  for (let i = 0; i < result.length; i++) {\n    indexArray.push(result[i] + vertexArray.length / attributesPerVertex);\n  }\n  for (let i = 0; i < flatCoords.length; i += 2) {\n    vertexArray.push(flatCoords[i], flatCoords[i + 1], ...customAttributes);\n  }\n\n  return instructionsIndex + verticesCount * instructionsPerVertex;\n}\n","/**\n * Utilities for compiling expressions and turning them into WebGL concepts\n * @module ol/render/webgl/compileUtil\n */\n\nimport {asArray} from '../../color.js';\nimport {\n  BooleanType,\n  ColorType,\n  newParsingContext,\n  NumberArrayType,\n  SizeType,\n  StringType,\n} from '../../expr/expression.js';\nimport {\n  buildExpression,\n  getStringNumberEquivalent,\n  uniformNameForVariable,\n} from '../../expr/gpu.js';\n\n/**\n * Recursively parses a style expression and outputs a GLSL-compatible string. Takes in a compilation context that\n * will be read and modified during the parsing operation.\n * @param {import(\"../../expr/gpu.js\").CompilationContext} compilationContext Compilation context\n * @param {import(\"../../expr/expression.js\").EncodedExpression} value Value\n * @param {number} [expectedType] Expected final type (can be several types combined)\n * @param {import(\"../../expr/expression.js\").ParsingContext} [parsingContext] Optional parsing context to be used;\n * if not specified, a new context using input variables from the compilation context will be used\n * @return {string} GLSL-compatible output\n */\nexport function expressionToGlsl(\n  compilationContext,\n  value,\n  expectedType,\n  parsingContext,\n) {\n  return buildExpression(\n    value,\n    expectedType,\n    parsingContext ?? newParsingContext(compilationContext.inputVariables),\n    compilationContext,\n  );\n}\n\n/**\n * Packs all components of a color into a two-floats array\n * @param {import(\"../../color.js\").Color|string} color Color as array of numbers or string\n * @return {Array<number>} Vec2 array containing the color in compressed form\n */\nexport function packColor(color) {\n  const array = asArray(color);\n  const r = array[0] * 256;\n  const g = array[1];\n  const b = array[2] * 256;\n  const a = Math.round(array[3] * 255);\n  return [r + g, b + a];\n}\n\n/**\n * Unpacks a color from a packed color in two-floats array form\n * NOTE: this is only used for testing purposes\n * @param {Array<number>} packedColor Packed color generated by the `packColor` function\n * @return {Array<number>} Resulting unpacked color in array form with components in the range [0, 1]\n */\nexport function unpackColor(packedColor) {\n  return [\n    Math.min(Math.floor(packedColor[0] / 256.0) / 255.0, 1),\n    Math.min((packedColor[0] % 256.0) / 255.0, 1),\n    Math.min(Math.floor(packedColor[1] / 256.0) / 255.0, 1),\n    Math.min((packedColor[1] % 256.0) / 255.0, 1),\n  ];\n}\n\n/**\n * Equivalent of `unpackColor()` in GLSL\n * @type {string}\n */\nexport const UNPACK_COLOR_FN = `vec4 unpackColor(vec2 packedColor) {\n  return vec4(\n    min(floor(packedColor[0] / 256.0) / 255.0, 1.0),\n    min(mod(packedColor[0], 256.0) / 255.0, 1.0),\n    min(floor(packedColor[1] / 256.0) / 255.0, 1.0),\n    min(mod(packedColor[1], 256.0) / 255.0, 1.0)\n  );\n}`;\n\n/**\n * @param {number} type Value type\n * @return {1|2|3|4} The amount of components for this value\n */\nexport function getGlslSizeFromType(type) {\n  if (type === ColorType || type === SizeType) {\n    return 2;\n  }\n  if (type === NumberArrayType) {\n    return 4;\n  }\n  if (type === StringType) {\n    return 3;\n  }\n  return 1;\n}\n\n/**\n * @param {number} type Value type\n * @return {'float'|'vec2'|'vec3'|'vec4'} The corresponding GLSL type for this value\n */\nexport function getGlslTypeFromType(type) {\n  if (type === StringType) {\n    return 'float'; // strings take 3 floats in the attributes but only the first is used in the shader\n  }\n  const size = getGlslSizeFromType(type);\n  if (size > 1) {\n    return /** @type {'vec2'|'vec3'|'vec4'} */ (`vec${size}`);\n  }\n  return 'float';\n}\n\n/**\n * Applies the properties and variables collected in a compilation context to a ShaderBuilder instance:\n * properties will show up as attributes in shaders, and variables will show up as uniforms.\n * @param {import(\"./ShaderBuilder.js\").ShaderBuilder} builder Shader builder\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Compilation context\n */\nexport function applyContextToBuilder(builder, context) {\n  // define one uniform per variable\n  for (const entry of context.variables.entries()) {\n    const [varName, varType] = entry;\n    const uniformName = uniformNameForVariable(varName);\n    let glslType = getGlslTypeFromType(varType);\n    if (varType === ColorType) {\n      // we're not packing colors when they're passed as uniforms\n      glslType = 'vec4';\n    }\n    builder.addUniform(uniformName, glslType);\n  }\n\n  // for each feature attribute used in the fragment shader, define a varying that will be used to pass data\n  // from the vertex to the fragment shader, as well as an attribute in the vertex shader (if not already present)\n  for (const entry of context.properties.entries()) {\n    const [propName, propType] = entry;\n    const glslType = getGlslTypeFromType(propType);\n    const attributeName = `a_prop_${propName}`;\n    if (propType === ColorType) {\n      builder.addAttribute(\n        attributeName,\n        glslType,\n        `unpackColor(${attributeName})`,\n        'vec4',\n      );\n    } else {\n      builder.addAttribute(attributeName, glslType);\n    }\n  }\n\n  // add functions that were collected in the compilation contexts\n  for (const functionName in context.functions) {\n    builder.addVertexShaderFunction(context.functions[functionName]);\n    builder.addFragmentShaderFunction(context.functions[functionName]);\n  }\n}\n\n/**\n * Generates a set of uniforms from variables collected in a compilation context,\n * to be fed to a WebGLHelper instance\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Compilation context\n * @param {import('../../style/flat.js').StyleVariables} [variables] Style variables.\n * @return {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} Uniforms\n */\nexport function generateUniformsFromContext(context, variables) {\n  /** @type {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} */\n  const uniforms = {};\n\n  // define one uniform per variable\n  for (const entry of context.variables.entries()) {\n    const [varName, varType] = entry;\n    const uniformName = uniformNameForVariable(varName);\n\n    uniforms[uniformName] = () => {\n      const value = variables[varName];\n      if (varType === BooleanType) {\n        return value ? 1 : 0;\n      }\n      if (varType === ColorType) {\n        const colorValue =\n          /** @type {string|import('../../color.js').Color} */ (value);\n        const color = [...asArray(colorValue || '#eee')];\n        color[0] /= 255;\n        color[1] /= 255;\n        color[2] /= 255;\n        color[3] ??= 1;\n        return color;\n      }\n      if (varType === StringType) {\n        return getStringNumberEquivalent(/** @type {string} */ (value));\n      }\n      return value;\n    };\n  }\n\n  return uniforms;\n}\n\n/**\n * Generates a set of attributes from properties collected in a compilation context,\n * to be fed to a WebGLHelper instance\n * @param {import(\"../../expr/gpu.js\").CompilationContext} context Compilation context\n * @return {import('./VectorStyleRenderer.js').AttributeDefinitions} Attributes\n */\nexport function generateAttributesFromContext(context) {\n  /**\n   * @type {import('./VectorStyleRenderer.js').AttributeDefinitions}\n   */\n  const attributes = {};\n\n  // Define attributes with their callback for each property used in the vertex shader\n  for (const entry of context.properties.entries()) {\n    const [propName, propType] = entry;\n    const callback = (feature) => {\n      const value = feature.get(propName);\n      if (propType === ColorType) {\n        return packColor([...asArray(value || '#eee')]);\n      }\n      if (propType === BooleanType) {\n        return value ? 1 : 0;\n      }\n      return value;\n    };\n\n    attributes[`prop_${propName}`] = {\n      size: getGlslSizeFromType(propType),\n      callback,\n    };\n  }\n  return attributes;\n}\n","/**\n * Returns a low part of a float value that can be encoded to Float32 without recision loss\n * @param {number} float Number in float64 precision\n * @return {number} Low part of the float value\n */\nexport function getLowPart(float) {\n  return float - getHighPart(float);\n}\n\n/**\n * Returns a high part of a float value that can be encoded to Float32 without precision loss\n * @param {number} float Number in float64 precision\n * @return {number} High part of the float value\n */\nexport function getHighPart(float) {\n  return Math.fround(float);\n}\n\n/**\n * These arithmetic functions are mostly inspired the ones in luma.gl: https://github.com/visgl/luma.gl/blob/master/modules/shadertools/src/modules/math/fp64/fp64-arithmetic-glsl.ts\n * and https://blog.cyclemap.link/2011-06-09-glsl-part2-emu/\n * Note that we use the `u_one` uniform here to ensure that the compiler doesn't simplify the calculations; otherwise these will have no effect at all\n * @type {string}\n */\n\nexport const FLOAT64_ARITHMETIC_FN = `\nvec2 df_from(float value) {\n  return vec2(value, 0.);\n}\n\nfloat df_float(vec2 df) {\n  return df.x;\n}\n\nvec2 df_add(vec2 dfa, vec2 dfb) {\n  vec2 dfc;\n  float t1, t2, e;\n  \n  t1 = dfa.x * u_one + dfb.x * u_one;\n  e = t1 * u_one - dfa.x * u_one;\n  t2 = ((dfb.x - e) + (dfa.x - (t1 - e))) * u_one + dfa.y + dfb.y * u_one;\n  \n  dfc.x = t1 * u_one + t2 * u_one;\n  dfc.y = t2 - (dfc.x - t1) * u_one;\n  return dfc;\n}\n\nvec2 df_sub(vec2 dfa, vec2 dfb) {\n  vec2 dfc;\n  float e, t1, t2;\n  \n  t1 = dfa.x - dfb.x;\n  e = t1 - dfa.x;\n  t2 = ((-dfb.x - e) + (dfa.x - (t1 - e))) + dfa.y - dfb.y;\n  \n  dfc.x = t1 + t2;\n  dfc.y = t2 - (dfc.x - t1);\n  return dfc;\n}\n\nvec2 df_mul(vec2 dfa, vec2 dfb) {\n  vec2 dfc;\n  float c11, c21, c2, e, t1, t2;\n  float a1, a2, b1, b2, cona, conb, split = 4097.;\n\n  cona = dfa.x * split * u_one;\n  conb = dfb.x * split * u_one;\n  a1 = cona * u_one - (cona - dfa.x);\n  b1 = conb * u_one - (conb - dfb.x);\n  a2 = dfa.x * u_one - a1;\n  b2 = dfb.x * u_one - b1 * u_one;\n\n  c11 = dfa.x * u_one * dfb.x * u_one;\n  c21 = a2 * b2 * u_one + (a2 * b1 + (a1 * b2 + (a1 * b1 - c11))) * u_one;\n\n  c2 = dfa.x * dfb.y * u_one + dfa.y * dfb.x * u_one;\n\n  t1 = c11 + c2 * u_one;\n  e = t1 - c11 * u_one;\n  t2 = dfa.y * dfb.y * u_one + ((c2 - e) + (c11 - (t1 - e))) + c21 * u_one;\n\n  dfc.x = t1 * u_one + t2 * u_one;\n  dfc.y = t2 - (dfc.x - t1) * u_one;\n\n  return dfc;\n}\n\nvec2 df_div(vec2 dfa, vec2 dfb) {\n  vec2 dfc;\n  float c11, c21, c2, e, t1, t2, t11, t12, t21, t22;\n  float a1, a2, b1, b2, cona, conb, split = 4097.;\n  float s1, s2;\n  \n  s1 = dfa.x / dfb.x * u_one;\n  cona = s1 * split * u_one;\n  conb = dfb.x * split * u_one;\n  a1 = cona - (cona - s1) * u_one;\n  b1 = conb - (conb - dfb.x) * u_one;\n  a2 = s1 - a1 * u_one;\n  b2 = dfb.x - b1 * u_one;\n  \n  c11 = s1 * dfb.x * u_one;\n  c21 = (((a1 * b1 - c11) + a1 * b2) + a2 * b1) + a2 * b2 * u_one;\n  \n  c2 = s1 * dfb.y * u_one;\n  \n  t1 = c11 + c2 * u_one;\n  e  = t1 - c11 * u_one;\n  t2 = ((c2 - e) + (c11 - (t1 - e))) + c21 * u_one;\n  \n  t12 = t1 + t2 * u_one;\n  t22 = t2 - (t12 - t1) * u_one;\n  \n  t11 = dfa.x - t12 * u_one;\n  e   = t11 - dfa.x * u_one;\n  t21 = ((-t12 - e) + (dfa.x - (t11 - e))) + dfa.y - t22 * u_one;\n  \n  s2 = (t11 + t21) / dfb.x * u_one;\n  \n  dfc.x = s1 + s2 * u_one;\n  dfc.y = s2 - (dfc.x - s1) * u_one;\n  \n  return dfc;\n}\n\nfloat df_mod(vec2 df, vec2 m) {\n  vec2 q = df_div(df, m) * u_one;\n  float qf = floor(q.x);\n  float frac = q.x - qf + q.y * u_one;\n  if (frac < 0.0) qf -= 1.0;\n  if (frac >= 1.0) qf += 1.0;\n  vec2 prod = df_mul(df_from(qf), m);\n  vec2 rem = df_add(df_from(df.x), df_from(-prod.x)) * u_one;\n  rem.y += df.y - prod.y;\n  return rem.x + rem.y * u_one;\n}\n`;\n","/**\n * @module ol/renderer/Layer\n */\nimport ImageState from '../ImageState.js';\nimport Observable from '../Observable.js';\nimport EventType from '../events/EventType.js';\nimport {abstract} from '../util.js';\n\nconst maxStaleKeys = 5;\n\n/**\n * @template {import(\"../layer/Layer.js\").default} LayerType\n */\nclass LayerRenderer extends Observable {\n  /**\n   * @param {LayerType} layer Layer.\n   */\n  constructor(layer) {\n    super();\n\n    /**\n     * The renderer is initialized and ready to render.\n     * @type {boolean}\n     */\n    this.ready = true;\n\n    /** @private */\n    this.boundHandleImageChange_ = this.handleImageChange_.bind(this);\n\n    /**\n     * @private\n     * @type {LayerType}\n     */\n    this.layer_ = layer;\n\n    /**\n     * @type {Array<string>}\n     * @private\n     */\n    this.staleKeys_ = new Array();\n\n    /**\n     * @type {number}\n     * @protected\n     */\n    this.maxStaleKeys = maxStaleKeys;\n\n    /**\n     * @type {string}\n     * @protected\n     */\n    this.renderedSourceKey_;\n  }\n\n  /**\n   * @return {Array<string>} Get the list of stale keys.\n   */\n  getStaleKeys() {\n    return this.staleKeys_;\n  }\n\n  /**\n   * @param {string} key The new stale key.\n   */\n  prependStaleKey(key) {\n    this.staleKeys_.unshift(key);\n    if (this.staleKeys_.length > this.maxStaleKeys) {\n      this.staleKeys_.length = this.maxStaleKeys;\n    }\n  }\n\n  /**\n   * Remember the previous source key as stale when the key changes.\n   * @param {string} sourceKey The current source key.\n   * @protected\n   */\n  updateStaleKeys(sourceKey) {\n    if (!this.renderedSourceKey_) {\n      this.renderedSourceKey_ = sourceKey;\n    } else if (this.renderedSourceKey_ !== sourceKey) {\n      this.prependStaleKey(this.renderedSourceKey_);\n      this.renderedSourceKey_ = sourceKey;\n    }\n  }\n\n  /**\n   * Asynchronous layer level hit detection.\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Promise<Array<import(\"../Feature.js\").FeatureLike>>} Promise that resolves with\n   * an array of features.\n   */\n  getFeatures(pixel) {\n    return abstract();\n  }\n\n  /**\n   * @param {import(\"../pixel.js\").Pixel} pixel Pixel.\n   * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView|null} Pixel data.\n   */\n  getData(pixel) {\n    return null;\n  }\n\n  /**\n   * Determine whether render should be called.\n   * @abstract\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   */\n  prepareFrame(frameState) {\n    return abstract();\n  }\n\n  /**\n   * Render the layer.\n   * @abstract\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @param {HTMLElement|null} target Target that may be used to render content to.\n   * @return {HTMLElement} The rendered element.\n   */\n  renderFrame(frameState, target) {\n    return abstract();\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @param {number} hitTolerance Hit tolerance in pixels.\n   * @param {import(\"./vector.js\").FeatureCallback<T>} callback Feature callback.\n   * @param {Array<import(\"./Map.js\").HitMatch<T>>} matches The hit detected matches with tolerance.\n   * @return {T|undefined} Callback result.\n   * @template T\n   */\n  forEachFeatureAtCoordinate(\n    coordinate,\n    frameState,\n    hitTolerance,\n    callback,\n    matches,\n  ) {\n    return undefined;\n  }\n\n  /**\n   * @return {LayerType} Layer.\n   */\n  getLayer() {\n    return this.layer_;\n  }\n\n  /**\n   * Perform action necessary to get the layer rendered after new fonts have loaded\n   * @abstract\n   */\n  handleFontsChanged() {}\n\n  /**\n   * Handle changes in image state.\n   * @param {import(\"../events/Event.js\").default} event Image change event.\n   * @private\n   */\n  handleImageChange_(event) {\n    const image = /** @type {import(\"../Image.js\").default} */ (event.target);\n    if (\n      image.getState() === ImageState.LOADED ||\n      image.getState() === ImageState.ERROR\n    ) {\n      this.renderIfReadyAndVisible();\n    }\n  }\n\n  /**\n   * Load the image if not already loaded, and register the image change\n   * listener if needed.\n   * @param {import(\"../Image.js\").default} image Image.\n   * @return {boolean} `true` if the image is already loaded, `false` otherwise.\n   * @protected\n   */\n  loadImage(image) {\n    let imageState = image.getState();\n    if (imageState != ImageState.LOADED && imageState != ImageState.ERROR) {\n      image.addEventListener(EventType.CHANGE, this.boundHandleImageChange_);\n    }\n    if (imageState == ImageState.IDLE) {\n      image.load();\n      imageState = image.getState();\n    }\n    return imageState == ImageState.LOADED;\n  }\n\n  /**\n   * @protected\n   */\n  renderIfReadyAndVisible() {\n    const layer = this.getLayer();\n    if (layer && layer.getVisible() && layer.getSourceState() === 'ready') {\n      layer.changed();\n    }\n  }\n\n  /**\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   */\n  renderDeferred(frameState) {}\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    delete this.layer_;\n    super.disposeInternal();\n  }\n}\n\nexport default LayerRenderer;\n","/**\n * @module ol/renderer/canvas/Layer\n */\nimport {equals} from '../../array.js';\nimport {asArray} from '../../color.js';\nimport {createCanvasContext2D, createMockDiv, isCanvas} from '../../dom.js';\nimport {\n  getBottomLeft,\n  getBottomRight,\n  getHeight,\n  getTopLeft,\n  getTopRight,\n  getWidth,\n} from '../../extent.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../../has.js';\nimport RenderEvent from '../../render/Event.js';\nimport RenderEventType from '../../render/EventType.js';\nimport ZIndexContext from '../../render/canvas/ZIndexContext.js';\nimport {\n  apply as applyTransform,\n  compose as composeTransform,\n  create as createTransform,\n  equivalent,\n  makeInverse,\n  toString as toTransformString,\n} from '../../transform.js';\nimport LayerRenderer from '../Layer.js';\n\n/**\n * @type {Array<HTMLCanvasElement|OffscreenCanvas>}\n */\nexport const canvasPool = [];\n\n/**\n * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n */\nlet pixelContext = null;\n\nfunction createPixelContext() {\n  pixelContext = createCanvasContext2D(1, 1, undefined, {\n    willReadFrequently: true,\n  });\n}\n\n/**\n * @abstract\n * @template {import(\"../../layer/Layer.js\").default} LayerType\n * @extends {LayerRenderer<LayerType>}\n */\nclass CanvasLayerRenderer extends LayerRenderer {\n  /**\n   * @param {LayerType} layer Layer.\n   */\n  constructor(layer) {\n    super(layer);\n\n    /**\n     * HTMLElement container for the layer to be rendered in.\n     * @protected\n     * @type {HTMLElement}\n     */\n    this.container = null;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.renderedResolution;\n\n    /**\n     * A temporary transform.  The values in this transform should only be used in a\n     * function that sets the values.\n     * @protected\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.tempTransform = createTransform();\n\n    /**\n     * The transform for rendered pixels to viewport CSS pixels.  This transform must\n     * be set when rendering a frame and may be used by other functions after rendering.\n     * @protected\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.pixelTransform = createTransform();\n\n    /**\n     * The transform for viewport CSS pixels to rendered pixels.  This transform must\n     * be set when rendering a frame and may be used by other functions after rendering.\n     * @protected\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.inversePixelTransform = createTransform();\n\n    /**\n     * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n     */\n    this.context = null;\n\n    /**\n     * @private\n     * @type {ZIndexContext}\n     */\n    this.deferredContext_ = null;\n\n    /**\n     * true if the container has been reused from the previous renderer\n     * @type {boolean}\n     */\n    this.containerReused = false;\n\n    /**\n     * @protected\n     * @type {import(\"../../Map.js\").FrameState|null}\n     */\n    this.frameState = null;\n  }\n\n  /**\n   * @param {import('../../DataTile.js').ImageLike} image Image.\n   * @param {number} col The column index.\n   * @param {number} row The row index.\n   * @return {Uint8ClampedArray|null} The image data.\n   */\n  getImageData(image, col, row) {\n    if (!pixelContext) {\n      createPixelContext();\n    }\n    pixelContext.clearRect(0, 0, 1, 1);\n\n    let data;\n    try {\n      pixelContext.drawImage(image, col, row, 1, 1, 0, 0, 1, 1);\n      data = pixelContext.getImageData(0, 0, 1, 1).data;\n    } catch {\n      pixelContext = null;\n      return null;\n    }\n    return data;\n  }\n\n  /**\n   * @param {import('../../Map.js').FrameState} frameState Frame state.\n   * @return {string} Background color.\n   */\n  getBackground(frameState) {\n    const layer = this.getLayer();\n    let background = layer.getBackground();\n    if (typeof background === 'function') {\n      background = background(frameState.viewState.resolution);\n    }\n    return background || undefined;\n  }\n\n  /**\n   * Get a rendering container from an existing target, if compatible.\n   * @param {HTMLElement} target Potential render target.\n   * @param {string} transform CSS transform matrix.\n   * @param {string} [backgroundColor] Background color.\n   * @param {number} [width] Physical pixel width of the rendering canvas.\n   * @param {number} [height] Physical pixel height of the rendering canvas.\n   */\n  useContainer(target, transform, backgroundColor, width, height) {\n    // Render directly into the target canvas when there is no rotation or\n    // offset (no CSS transform needed) and the physical dimensions match.\n    if (\n      isCanvas(target) &&\n      this.pixelTransform[1] === 0 &&\n      this.pixelTransform[2] === 0 &&\n      this.pixelTransform[4] === 0 &&\n      this.pixelTransform[5] === 0 &&\n      target.width === width &&\n      target.height === height\n    ) {\n      const targetCanvas = /** @type {HTMLCanvasElement} */ (target);\n      const context = targetCanvas.getContext('2d');\n      if (context) {\n        this.container = target;\n        this.context = context;\n        this.containerReused = true;\n        if (backgroundColor) {\n          context.fillStyle = backgroundColor;\n          context.fillRect(0, 0, targetCanvas.width, targetCanvas.height);\n        }\n        return;\n      }\n    }\n    const layerClassName = this.getLayer().getClassName();\n    let container, context;\n    if (\n      target &&\n      target.className === layerClassName &&\n      (!backgroundColor ||\n        (target &&\n          target.style.backgroundColor &&\n          equals(\n            asArray(target.style.backgroundColor),\n            asArray(backgroundColor),\n          )))\n    ) {\n      const canvas = target.firstElementChild;\n      if (isCanvas(canvas)) {\n        context = canvas.getContext('2d');\n      }\n    }\n    if (context && equivalent(context.canvas.style.transform, transform)) {\n      // Container of the previous layer renderer can be used.\n      this.container = target;\n      this.context = context;\n      this.containerReused = true;\n    } else if (this.containerReused) {\n      // Previously reused container cannot be used any more.\n      this.container = null;\n      this.context = null;\n      this.containerReused = false;\n    } else if (this.container) {\n      this.container.style.backgroundColor = null;\n    }\n    if (!this.container) {\n      container = WORKER_OFFSCREEN_CANVAS\n        ? createMockDiv()\n        : document.createElement('div');\n      container.className = layerClassName;\n      let style = container.style;\n      style.position = 'absolute';\n      style.width = '100%';\n      style.height = '100%';\n      context = createCanvasContext2D();\n      const canvas = /** @type {HTMLCanvasElement} */ (context.canvas);\n      container.appendChild(canvas);\n      style = canvas.style;\n      style.position = 'absolute';\n      style.left = '0';\n      style.transformOrigin = 'top left';\n      this.container = container;\n      this.context = context;\n    }\n    if (\n      !this.containerReused &&\n      backgroundColor &&\n      !this.container.style.backgroundColor\n    ) {\n      this.container.style.backgroundColor = backgroundColor;\n    }\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {import(\"../../extent.js\").Extent} extent Clip extent.\n   * @protected\n   */\n  clipUnrotated(context, frameState, extent) {\n    const topLeft = getTopLeft(extent);\n    const topRight = getTopRight(extent);\n    const bottomRight = getBottomRight(extent);\n    const bottomLeft = getBottomLeft(extent);\n\n    applyTransform(frameState.coordinateToPixelTransform, topLeft);\n    applyTransform(frameState.coordinateToPixelTransform, topRight);\n    applyTransform(frameState.coordinateToPixelTransform, bottomRight);\n    applyTransform(frameState.coordinateToPixelTransform, bottomLeft);\n\n    const inverted = this.inversePixelTransform;\n    applyTransform(inverted, topLeft);\n    applyTransform(inverted, topRight);\n    applyTransform(inverted, bottomRight);\n    applyTransform(inverted, bottomLeft);\n\n    context.save();\n    context.beginPath();\n    context.moveTo(Math.round(topLeft[0]), Math.round(topLeft[1]));\n    context.lineTo(Math.round(topRight[0]), Math.round(topRight[1]));\n    context.lineTo(Math.round(bottomRight[0]), Math.round(bottomRight[1]));\n    context.lineTo(Math.round(bottomLeft[0]), Math.round(bottomLeft[1]));\n    context.clip();\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {HTMLElement} target Target that may be used to render content to.\n   * @protected\n   */\n  prepareContainer(frameState, target) {\n    const extent = frameState.extent;\n    const resolution = frameState.viewState.resolution;\n    const rotation = frameState.viewState.rotation;\n    const pixelRatio = frameState.pixelRatio;\n    const width = Math.round((getWidth(extent) / resolution) * pixelRatio);\n    const height = Math.round((getHeight(extent) / resolution) * pixelRatio);\n    // set forward and inverse pixel transforms\n    composeTransform(\n      this.pixelTransform,\n      frameState.size[0] / 2,\n      frameState.size[1] / 2,\n      1 / pixelRatio,\n      1 / pixelRatio,\n      rotation,\n      -width / 2,\n      -height / 2,\n    );\n    makeInverse(this.inversePixelTransform, this.pixelTransform);\n\n    const canvasTransform = toTransformString(this.pixelTransform);\n    const backgroundColor = this.getBackground(frameState);\n    this.useContainer(target, canvasTransform, backgroundColor, width, height);\n    if (!this.containerReused) {\n      const canvas = this.context.canvas;\n      if (canvas.width != width || canvas.height != height) {\n        canvas.width = width;\n        canvas.height = height;\n      } else {\n        this.context.clearRect(0, 0, width, height);\n      }\n      if (\n        canvasTransform !==\n        /** @type {HTMLCanvasElement} */ (canvas).style.transform\n      ) {\n        /** @type {HTMLCanvasElement} */ (canvas).style.transform =\n          canvasTransform;\n      }\n    }\n  }\n\n  /**\n   * @param {import(\"../../render/EventType.js\").default} type Event type.\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @private\n   */\n  dispatchRenderEvent_(type, context, frameState) {\n    const layer = this.getLayer();\n    if (layer.hasListener(type)) {\n      const event = new RenderEvent(\n        type,\n        this.inversePixelTransform,\n        frameState,\n        context,\n      );\n      layer.dispatchEvent(event);\n    }\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  preRender(context, frameState) {\n    this.frameState = frameState;\n    if (frameState.declutter) {\n      return;\n    }\n    this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);\n  }\n\n  /**\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context Context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  postRender(context, frameState) {\n    if (frameState.declutter) {\n      return;\n    }\n    this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   */\n  renderDeferredInternal(frameState) {}\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {import('../../render/canvas/ZIndexContext.js').ZIndexContextProxy} Context.\n   */\n  getRenderContext(frameState) {\n    if (frameState.declutter && !this.deferredContext_) {\n      this.deferredContext_ = new ZIndexContext();\n    }\n    return frameState.declutter\n      ? this.deferredContext_.getContext()\n      : this.context;\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @override\n   */\n  renderDeferred(frameState) {\n    if (!frameState.declutter) {\n      return;\n    }\n    this.dispatchRenderEvent_(\n      RenderEventType.PRERENDER,\n      this.context,\n      frameState,\n    );\n    if (frameState.declutter && this.deferredContext_) {\n      this.deferredContext_.draw(this.context);\n      this.deferredContext_.clear();\n    }\n    this.renderDeferredInternal(frameState);\n    this.dispatchRenderEvent_(\n      RenderEventType.POSTRENDER,\n      this.context,\n      frameState,\n    );\n  }\n\n  /**\n   * Creates a transform for rendering to an element that will be rotated after rendering.\n   * @param {import(\"../../coordinate.js\").Coordinate} center Center.\n   * @param {number} resolution Resolution.\n   * @param {number} rotation Rotation.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {number} width Width of the rendered element (in pixels).\n   * @param {number} height Height of the rendered element (in pixels).\n   * @param {number} offsetX Offset on the x-axis in view coordinates.\n   * @protected\n   * @return {!import(\"../../transform.js\").Transform} Transform.\n   */\n  getRenderTransform(\n    center,\n    resolution,\n    rotation,\n    pixelRatio,\n    width,\n    height,\n    offsetX,\n  ) {\n    const dx1 = width / 2;\n    const dy1 = height / 2;\n    const sx = pixelRatio / resolution;\n    const sy = -sx;\n    const dx2 = -center[0] + offsetX;\n    const dy2 = -center[1];\n    return composeTransform(\n      this.tempTransform,\n      dx1,\n      dy1,\n      sx,\n      sy,\n      -rotation,\n      dx2,\n      dy2,\n    );\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    delete this.frameState;\n    super.disposeInternal();\n  }\n}\n\nexport default CanvasLayerRenderer;\n","/**\n * @module ol/renderer/canvas/TileLayer\n */\nimport DataTile, {asImageLike} from '../../DataTile.js';\nimport ImageTile from '../../ImageTile.js';\nimport TileRange from '../../TileRange.js';\nimport TileState from '../../TileState.js';\nimport {ascending} from '../../array.js';\nimport {\n  containsCoordinate,\n  createEmpty,\n  equals,\n  getIntersection,\n  getRotatedViewport,\n  getTopLeft,\n  intersects,\n  subtractExtents,\n} from '../../extent.js';\nimport {equivalent, fromUserExtent} from '../../proj.js';\nimport ReprojTile from '../../reproj/Tile.js';\nimport {toSize} from '../../size.js';\nimport LRUCache from '../../structs/LRUCache.js';\nimport {\n  createOrUpdate as createTileCoord,\n  getCacheKey,\n} from '../../tilecoord.js';\nimport {\n  apply as applyTransform,\n  compose as composeTransform,\n} from '../../transform.js';\nimport {getUid} from '../../util.js';\nimport CanvasLayerRenderer from './Layer.js';\n\n/**\n * @typedef {Object<number, Set<import(\"../../Tile.js\").default>>} TileLookup\n */\n\n/**\n * Add a tile to the lookup.\n * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n * @param {import(\"../../Tile.js\").default} tile A tile.\n * @param {number} z The zoom level.\n * @return {boolean} The tile was added to the lookup.\n */\nfunction addTileToLookup(tilesByZ, tile, z) {\n  if (!(z in tilesByZ)) {\n    tilesByZ[z] = new Set([tile]);\n    return true;\n  }\n  const set = tilesByZ[z];\n  const existing = set.has(tile);\n  if (!existing) {\n    set.add(tile);\n  }\n  return !existing;\n}\n\n/**\n * Remove a tile from the lookup.\n * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n * @param {import(\"../../Tile.js\").default} tile A tile.\n * @param {number} z The zoom level.\n * @return {boolean} The tile was removed from the lookup.\n */\nfunction removeTileFromLookup(tilesByZ, tile, z) {\n  const set = tilesByZ[z];\n  if (set) {\n    return set.delete(tile);\n  }\n  return false;\n}\n\n/**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent The frame extent.\n * @return {import(\"../../extent.js\").Extent} Frame extent intersected with layer extents.\n */\nfunction getRenderExtent(frameState, extent) {\n  const layerState = frameState.layerStatesArray[frameState.layerIndex];\n  if (layerState.extent) {\n    extent = getIntersection(\n      extent,\n      fromUserExtent(layerState.extent, frameState.viewState.projection),\n    );\n  }\n  const source = /** @type {import(\"../../source/Tile.js\").default} */ (\n    layerState.layer.getRenderSource()\n  );\n  if (!source.getWrapX()) {\n    const gridExtent = source\n      .getTileGridForProjection(frameState.viewState.projection)\n      .getExtent();\n    if (gridExtent) {\n      extent = getIntersection(extent, gridExtent);\n    }\n  }\n  return extent;\n}\n\n/**\n * @typedef {Object} Options\n * @property {number} [cacheSize=512] The cache size.\n */\n\n/**\n * @classdesc\n * Canvas renderer for tile layers.\n * @api\n * @template {import(\"../../layer/Tile.js\").default|import(\"../../layer/VectorTile.js\").default} [LayerType=import(\"../../layer/Tile.js\").default<import(\"../../source/Tile.js\").default>|import(\"../../layer/VectorTile.js\").default]\n * @extends {CanvasLayerRenderer<LayerType>}\n */\nclass CanvasTileLayerRenderer extends CanvasLayerRenderer {\n  /**\n   * @param {LayerType} tileLayer Tile layer.\n   * @param {Options} [options] Options.\n   */\n  constructor(tileLayer, options) {\n    super(tileLayer);\n\n    options = options || {};\n\n    /**\n     * Rendered extent has changed since the previous `renderFrame()` call\n     * @type {boolean}\n     */\n    this.extentChanged = true;\n\n    /**\n     * The last call to `renderFrame` was completed with all tiles loaded\n     * @type {boolean}\n     */\n    this.renderComplete = false;\n\n    /**\n     * @private\n     * @type {?import(\"../../extent.js\").Extent}\n     */\n    this.renderedExtent_ = null;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.renderedPixelRatio;\n\n    /**\n     * @protected\n     * @type {import(\"../../proj/Projection.js\").default|null}\n     */\n    this.renderedProjection = null;\n\n    /**\n     * @protected\n     * @type {!Array<import(\"../../Tile.js\").default>}\n     */\n    this.renderedTiles = [];\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedSourceRevision_;\n\n    /**\n     * @protected\n     * @type {import(\"../../extent.js\").Extent}\n     */\n    this.tempExtent = createEmpty();\n\n    /**\n     * @private\n     * @type {import(\"../../TileRange.js\").default}\n     */\n    this.tempTileRange_ = new TileRange(0, 0, 0, 0);\n\n    /**\n     * @type {import(\"../../tilecoord.js\").TileCoord}\n     * @private\n     */\n    this.tempTileCoord_ = createTileCoord(0, 0, 0);\n\n    const cacheSize = options.cacheSize !== undefined ? options.cacheSize : 512;\n\n    /**\n     * @type {import(\"../../structs/LRUCache.js\").default<import(\"../../Tile.js\").default>}\n     * @private\n     */\n    this.tileCache_ = new LRUCache(cacheSize);\n\n    /**\n     * @type {import(\"../../structs/LRUCache.js\").default<import(\"../../Tile.js\").default|null>}\n     * @private\n     */\n    this.sourceTileCache_ = null;\n\n    /**\n     * @protected\n     * @type {import(\"../../extent.js\").Extent|null}\n     */\n    this.layerExtent = null;\n\n    this.maxStaleKeys = cacheSize * 0.5;\n  }\n\n  /**\n   * @return {LRUCache} Tile cache.\n   */\n  getTileCache() {\n    return this.tileCache_;\n  }\n\n  /**\n   * @return {LRUCache} Tile cache.\n   */\n  getSourceTileCache() {\n    if (!this.sourceTileCache_) {\n      this.sourceTileCache_ = new LRUCache(512);\n    }\n    return this.sourceTileCache_;\n  }\n\n  /**\n   * Get a tile from the cache or create one if needed.\n   *\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {import(\"../../Tile.js\").default|null} Tile (or null if outside source extent).\n   * @protected\n   */\n  getOrCreateTile(z, x, y, frameState) {\n    const tileCache = this.tileCache_;\n    const tileLayer = this.getLayer();\n    const tileSource = tileLayer.getSource();\n    const cacheKey = getCacheKey(tileSource, tileSource.getKey(), z, x, y);\n\n    /** @type {import(\"../../Tile.js\").default} */\n    let tile;\n\n    if (tileCache.containsKey(cacheKey)) {\n      tile = tileCache.get(cacheKey);\n    } else {\n      const projection = frameState.viewState.projection;\n      const sourceProjection = tileSource.getProjection();\n      tile = tileSource.getTile(\n        z,\n        x,\n        y,\n        frameState.pixelRatio,\n        projection,\n        !sourceProjection || equivalent(sourceProjection, projection)\n          ? undefined\n          : this.getSourceTileCache(),\n      );\n      if (!tile) {\n        return null;\n      }\n      tileCache.set(cacheKey, tile);\n    }\n    return tile;\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {import(\"../../Tile.js\").default|null} Tile (or null if outside source extent).\n   * @protected\n   */\n  getTile(z, x, y, frameState) {\n    const tile = this.getOrCreateTile(z, x, y, frameState);\n    if (!tile) {\n      return null;\n    }\n    return tile;\n  }\n\n  /**\n   * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n   * @return {Uint8ClampedArray} Data at the pixel location.\n   * @override\n   */\n  getData(pixel) {\n    const frameState = this.frameState;\n    if (!frameState) {\n      return null;\n    }\n\n    const layer = this.getLayer();\n    const coordinate = applyTransform(\n      frameState.pixelToCoordinateTransform,\n      pixel.slice(),\n    );\n\n    const layerExtent = layer.getExtent();\n    if (layerExtent) {\n      if (!containsCoordinate(layerExtent, coordinate)) {\n        return null;\n      }\n    }\n\n    const viewState = frameState.viewState;\n    const source = layer.getRenderSource();\n    const tileGrid = source.getTileGridForProjection(viewState.projection);\n    const tilePixelRatio = source.getTilePixelRatio(frameState.pixelRatio);\n\n    for (\n      let z = tileGrid.getZForResolution(viewState.resolution);\n      z >= tileGrid.getMinZoom();\n      --z\n    ) {\n      const tileCoord = tileGrid.getTileCoordForCoordAndZ(coordinate, z);\n      const tile = this.getTile(z, tileCoord[1], tileCoord[2], frameState);\n      if (!tile || tile.getState() !== TileState.LOADED) {\n        continue;\n      }\n\n      const tileOrigin = tileGrid.getOrigin(z);\n      const tileSize = toSize(tileGrid.getTileSize(z));\n      const tileResolution = tileGrid.getResolution(z);\n\n      /**\n       * @type {import('../../DataTile.js').ImageLike}\n       */\n      let image;\n      if (tile instanceof ImageTile || tile instanceof ReprojTile) {\n        image = tile.getImage();\n      } else if (tile instanceof DataTile) {\n        image = asImageLike(tile.getData());\n        if (!image) {\n          continue;\n        }\n      } else {\n        continue;\n      }\n\n      const col = Math.floor(\n        tilePixelRatio *\n          ((coordinate[0] - tileOrigin[0]) / tileResolution -\n            tileCoord[1] * tileSize[0]),\n      );\n\n      const row = Math.floor(\n        tilePixelRatio *\n          ((tileOrigin[1] - coordinate[1]) / tileResolution -\n            tileCoord[2] * tileSize[1]),\n      );\n\n      const gutter = Math.round(\n        tilePixelRatio * source.getGutterForProjection(viewState.projection),\n      );\n\n      return this.getImageData(image, col + gutter, row + gutter);\n    }\n\n    return null;\n  }\n\n  /**\n   * Determine whether render should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @override\n   */\n  prepareFrame(frameState) {\n    if (!this.renderedProjection) {\n      this.renderedProjection = frameState.viewState.projection;\n    } else if (frameState.viewState.projection !== this.renderedProjection) {\n      this.tileCache_.clear();\n      this.renderedProjection = frameState.viewState.projection;\n    }\n\n    const source = this.getLayer().getSource();\n    if (!source) {\n      return false;\n    }\n    const sourceRevision = source.getRevision();\n    if (!this.renderedSourceRevision_) {\n      this.renderedSourceRevision_ = sourceRevision;\n    } else if (this.renderedSourceRevision_ !== sourceRevision) {\n      this.renderedSourceRevision_ = sourceRevision;\n      if (this.renderedSourceKey_ === source.getKey()) {\n        this.tileCache_.clear();\n        this.sourceTileCache_?.clear();\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Determine whether tiles for next extent should be enqueued for rendering.\n   * @return {boolean} Rendering tiles for next extent is supported.\n   * @protected\n   */\n  enqueueTilesForNextExtent() {\n    return true;\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {import(\"../../extent.js\").Extent} extent The extent to be rendered.\n   * @param {number} initialZ The zoom level.\n   * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n   * @param {number} preload Number of additional levels to load.\n   */\n  enqueueTiles(frameState, extent, initialZ, tilesByZ, preload) {\n    const viewState = frameState.viewState;\n    const tileLayer = this.getLayer();\n    const tileSource = tileLayer.getRenderSource();\n    const tileGrid = tileSource.getTileGridForProjection(viewState.projection);\n\n    const tileSourceKey = getUid(tileSource);\n    if (!(tileSourceKey in frameState.wantedTiles)) {\n      frameState.wantedTiles[tileSourceKey] = {};\n    }\n\n    const wantedTiles = frameState.wantedTiles[tileSourceKey];\n\n    const map = tileLayer.getMapInternal();\n    const minZ = Math.max(\n      initialZ - preload,\n      tileGrid.getMinZoom(),\n      tileGrid.getZForResolution(\n        Math.min(\n          tileLayer.getMaxResolution(),\n          map\n            ? map\n                .getView()\n                .getResolutionForZoom(Math.max(tileLayer.getMinZoom(), 0))\n            : tileGrid.getResolution(0),\n        ),\n        tileSource.zDirection,\n      ),\n    );\n    const rotation = viewState.rotation;\n    const viewport = rotation\n      ? getRotatedViewport(\n          viewState.center,\n          viewState.resolution,\n          rotation,\n          frameState.size,\n        )\n      : undefined;\n    for (let z = initialZ; z >= minZ; --z) {\n      const tileRange = tileGrid.getTileRangeForExtentAndZ(\n        extent,\n        z,\n        this.tempTileRange_,\n      );\n\n      const tileResolution = tileGrid.getResolution(z);\n\n      for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n        for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n          if (\n            rotation &&\n            !tileGrid.tileCoordIntersectsViewport([z, x, y], viewport)\n          ) {\n            continue;\n          }\n          const tile = this.getTile(z, x, y, frameState);\n          if (!tile) {\n            continue;\n          }\n          const added = addTileToLookup(tilesByZ, tile, z);\n          if (!added) {\n            continue;\n          }\n\n          const tileQueueKey = tile.getKey();\n          wantedTiles[tileQueueKey] = true;\n\n          if (tile.getState() === TileState.IDLE) {\n            if (!frameState.tileQueue.isKeyQueued(tileQueueKey)) {\n              const tileCoord = createTileCoord(z, x, y, this.tempTileCoord_);\n              frameState.tileQueue.enqueue([\n                tile,\n                tileSourceKey,\n                tileGrid.getTileCoordCenter(tileCoord),\n                tileResolution,\n              ]);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Look for tiles covering the provided tile coordinate at an alternate\n   * zoom level.  Loaded tiles will be added to the provided tile texture lookup.\n   * @param {import(\"../../tilecoord.js\").TileCoord} tileCoord The target tile coordinate.\n   * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n   * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.\n   * @private\n   */\n  findStaleTile_(tileCoord, tilesByZ) {\n    const tileCache = this.tileCache_;\n    const z = tileCoord[0];\n    const x = tileCoord[1];\n    const y = tileCoord[2];\n    const staleKeys = this.getStaleKeys();\n    for (let i = 0; i < staleKeys.length; ++i) {\n      const cacheKey = getCacheKey(\n        this.getLayer().getSource(),\n        staleKeys[i],\n        z,\n        x,\n        y,\n      );\n      if (tileCache.containsKey(cacheKey)) {\n        const tile = tileCache.peek(cacheKey);\n        if (tile.getState() === TileState.LOADED) {\n          tile.endTransition(getUid(this));\n          addTileToLookup(tilesByZ, tile, z);\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Look for tiles covering the provided tile coordinate at an alternate\n   * zoom level.  Loaded tiles will be added to the provided tile texture lookup.\n   * @param {import(\"../../tilegrid/TileGrid.js\").default} tileGrid The tile grid.\n   * @param {import(\"../../tilecoord.js\").TileCoord} tileCoord The target tile coordinate.\n   * @param {number} altZ The alternate zoom level.\n   * @param {TileLookup} tilesByZ Lookup of tiles by zoom level.\n   * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.\n   * @private\n   */\n  findAltTiles_(tileGrid, tileCoord, altZ, tilesByZ) {\n    const tileRange = tileGrid.getTileRangeForTileCoordAndZ(\n      tileCoord,\n      altZ,\n      this.tempTileRange_,\n    );\n\n    if (!tileRange) {\n      return false;\n    }\n\n    let covered = true;\n    const tileCache = this.tileCache_;\n    const source = this.getLayer().getRenderSource();\n    const sourceKey = source.getKey();\n    for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n      for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n        const cacheKey = getCacheKey(source, sourceKey, altZ, x, y);\n        let loaded = false;\n        if (tileCache.containsKey(cacheKey)) {\n          const tile = tileCache.peek(cacheKey);\n          if (tile.getState() === TileState.LOADED) {\n            addTileToLookup(tilesByZ, tile, altZ);\n            loaded = true;\n          }\n        }\n        if (!loaded) {\n          covered = false;\n        }\n      }\n    }\n    return covered;\n  }\n\n  /**\n   * Render the layer.\n   *\n   * The frame rendering logic has three parts:\n   *\n   *  1. Enqueue tiles\n   *  2. Find alt tiles for those that are not yet loaded\n   *  3. Render loaded tiles\n   *\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {HTMLElement} target Target that may be used to render content to.\n   * @return {HTMLElement} The rendered element.\n   * @override\n   */\n  renderFrame(frameState, target) {\n    this.renderComplete = true;\n    /**\n     * TODO:\n     *  maybe skip transition when not fully opaque\n     *  decide if this.renderComplete is useful\n     */\n\n    const layerState = frameState.layerStatesArray[frameState.layerIndex];\n    const viewState = frameState.viewState;\n    const projection = viewState.projection;\n    const viewResolution = viewState.resolution;\n    const viewCenter = viewState.center;\n    const pixelRatio = frameState.pixelRatio;\n\n    const tileLayer = this.getLayer();\n    const tileSource = tileLayer.getSource();\n    const tileGrid = tileSource.getTileGridForProjection(projection);\n    const z = tileGrid.getZForResolution(viewResolution, tileSource.zDirection);\n    const tileResolution = tileGrid.getResolution(z);\n\n    this.updateStaleKeys(tileSource.getKey());\n\n    let frameExtent = frameState.extent;\n    const tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);\n\n    this.prepareContainer(frameState, target);\n\n    // desired dimensions of the canvas in pixels\n    const width = this.context.canvas.width;\n    const height = this.context.canvas.height;\n\n    this.layerExtent = layerState.extent\n      ? fromUserExtent(layerState.extent, projection)\n      : null;\n    if (this.layerExtent) {\n      frameExtent = getIntersection(frameExtent, this.layerExtent);\n    }\n\n    const dx = (tileResolution * width) / 2 / tilePixelRatio;\n    const dy = (tileResolution * height) / 2 / tilePixelRatio;\n    const canvasExtent = [\n      viewCenter[0] - dx,\n      viewCenter[1] - dy,\n      viewCenter[0] + dx,\n      viewCenter[1] + dy,\n    ];\n\n    /**\n     * @type {TileLookup}\n     */\n    const tilesByZ = {};\n\n    this.renderedTiles.length = 0;\n\n    /**\n     * Part 1: Enqueue tiles\n     */\n\n    const preload = tileLayer.getPreload();\n    if (frameState.nextExtent && this.enqueueTilesForNextExtent()) {\n      const targetZ = tileGrid.getZForResolution(\n        viewState.nextResolution,\n        tileSource.zDirection,\n      );\n      const nextExtent = getRenderExtent(frameState, frameState.nextExtent);\n      this.enqueueTiles(frameState, nextExtent, targetZ, tilesByZ, preload);\n    }\n\n    const renderExtent = getRenderExtent(frameState, frameExtent);\n    this.enqueueTiles(frameState, renderExtent, z, tilesByZ, 0);\n    if (preload > 0) {\n      setTimeout(() => {\n        this.enqueueTiles(\n          frameState,\n          renderExtent,\n          z - 1,\n          tilesByZ,\n          preload - 1,\n        );\n      }, 0);\n    }\n\n    if (!(z in tilesByZ)) {\n      return this.container;\n    }\n\n    /**\n     * Part 2: Find alt tiles for those that are not yet loaded\n     */\n\n    const uid = getUid(this);\n    const time = frameState.time;\n\n    // look for cached tiles to use if a target tile is not ready\n    for (const tile of tilesByZ[z]) {\n      const tileState = tile.getState();\n      if (tileState === TileState.EMPTY) {\n        continue;\n      }\n      const tileCoord = tile.tileCoord;\n\n      if (tileState === TileState.LOADED) {\n        const alpha = tile.getAlpha(uid, time);\n        if (alpha === 1) {\n          // no need to look for alt tiles\n          tile.endTransition(uid);\n          continue;\n        }\n      }\n      if (tileState !== TileState.ERROR) {\n        this.renderComplete = false;\n      }\n\n      const hasStaleTile = this.findStaleTile_(tileCoord, tilesByZ);\n      if (hasStaleTile) {\n        // use the stale tile before the new tile's transition has completed\n        removeTileFromLookup(tilesByZ, tile, z);\n        frameState.animate = true;\n        continue;\n      }\n\n      // first look for child tiles (at z + 1)\n      const coveredByChildren = this.findAltTiles_(\n        tileGrid,\n        tileCoord,\n        z + 1,\n        tilesByZ,\n      );\n\n      if (coveredByChildren) {\n        continue;\n      }\n\n      // next look for parent tiles\n      const minZoom = tileGrid.getMinZoom();\n      for (let parentZ = z - 1; parentZ >= minZoom; --parentZ) {\n        const coveredByParent = this.findAltTiles_(\n          tileGrid,\n          tileCoord,\n          parentZ,\n          tilesByZ,\n        );\n\n        if (coveredByParent) {\n          break;\n        }\n      }\n    }\n\n    /**\n     * Part 3: Render loaded tiles\n     */\n\n    const canvasScale =\n      ((tileResolution / viewResolution) * pixelRatio) / tilePixelRatio;\n\n    const context = this.getRenderContext(frameState);\n\n    // set scale transform for calculating tile positions on the canvas\n    composeTransform(\n      this.tempTransform,\n      width / 2,\n      height / 2,\n      canvasScale,\n      canvasScale,\n      0,\n      -width / 2,\n      -height / 2,\n    );\n\n    if (this.layerExtent) {\n      this.clipUnrotated(context, frameState, this.layerExtent);\n    }\n\n    if (!tileSource.getInterpolate()) {\n      context.imageSmoothingEnabled = false;\n    }\n\n    this.preRender(context, frameState);\n\n    const zs = Object.keys(tilesByZ).map(Number);\n    zs.sort(ascending);\n\n    /** @type {Array<import(\"../../extent.js\").Extent>} */\n    const clips = [];\n    /** @type {Array<number>} */\n    const clipZs = [];\n    // Tiles at the target zoom that are still fading in. They are drawn in a\n    // second pass on top of the (fully drawn) lower-z fallback, so the fade\n    // reads as a coarse-to-fine sharpen instead of revealing the background.\n    /** @type {Array<{tile: import(\"../../Tile.js\").default, x: number, y: number, w: number, h: number, gutter: number}>} */\n    const fadingTiles = [];\n    for (let i = zs.length - 1; i >= 0; --i) {\n      const currentZ = zs[i];\n      const currentTilePixelSize = tileSource.getTilePixelSize(\n        currentZ,\n        pixelRatio,\n        projection,\n      );\n      const currentResolution = tileGrid.getResolution(currentZ);\n      const currentScale = currentResolution / tileResolution;\n      const dx = currentTilePixelSize[0] * currentScale * canvasScale;\n      const dy = currentTilePixelSize[1] * currentScale * canvasScale;\n      const originTileCoord = tileGrid.getTileCoordForCoordAndZ(\n        getTopLeft(canvasExtent),\n        currentZ,\n      );\n      const originTileExtent = tileGrid.getTileCoordExtent(originTileCoord);\n      const origin = applyTransform(this.tempTransform, [\n        (tilePixelRatio * (originTileExtent[0] - canvasExtent[0])) /\n          tileResolution,\n        (tilePixelRatio * (canvasExtent[3] - originTileExtent[3])) /\n          tileResolution,\n      ]);\n      const tileGutter =\n        tilePixelRatio * tileSource.getGutterForProjection(projection);\n      for (const tile of tilesByZ[currentZ]) {\n        if (tile.getState() !== TileState.LOADED) {\n          continue;\n        }\n        const tileCoord = tile.tileCoord;\n\n        // Calculate integer positions and sizes so that tiles align\n        const xIndex = originTileCoord[1] - tileCoord[1];\n        const nextX = Math.round(origin[0] - (xIndex - 1) * dx);\n        const yIndex = originTileCoord[2] - tileCoord[2];\n        const nextY = Math.round(origin[1] - (yIndex - 1) * dy);\n        const x = Math.round(origin[0] - xIndex * dx);\n        const y = Math.round(origin[1] - yIndex * dy);\n        const w = nextX - x;\n        const h = nextY - y;\n        // Only the target zoom tiles fade in; lower-z fallback tiles are just\n        // gap fillers and must not animate. `inTransition` is false when\n        // transitions are disabled, so this whole path is skipped then.\n        const transition = currentZ === z;\n\n        if (transition && tile.inTransition(uid)) {\n          // Still fading in - defer to the second pass and keep the fallback\n          // beneath it by not adding it to the clips.\n          fadingTiles.push({tile, x, y, w, h, gutter: tileGutter});\n          this.renderedTiles.unshift(tile);\n          this.updateUsedTiles(frameState.usedTiles, tileSource, tile);\n          continue;\n        }\n\n        // Draw only the parts of this tile that are not already covered by a\n        // higher-z tile.\n        const currentRect = [x, y, x + w, y + h];\n        /** @type {Array<import(\"../../extent.js\").Extent>} */\n        const covered = [];\n        for (let j = 0, jj = clips.length; j < jj; ++j) {\n          if (currentZ < clipZs[j] && intersects(currentRect, clips[j])) {\n            covered.push(clips[j]);\n          }\n        }\n        let clipRects;\n        if (covered.length > 0) {\n          clipRects = subtractExtents(currentRect, covered);\n        }\n        clips.push(currentRect);\n        clipZs.push(currentZ);\n\n        this.drawTile(\n          tile,\n          frameState,\n          x,\n          y,\n          w,\n          h,\n          tileGutter,\n          transition,\n          clipRects,\n        );\n\n        this.renderedTiles.unshift(tile);\n\n        // TODO: decide if this is necessary\n        this.updateUsedTiles(frameState.usedTiles, tileSource, tile);\n      }\n    }\n\n    // Second pass: draw the fading target zoom tiles on top of the fallback.\n    for (let i = 0, ii = fadingTiles.length; i < ii; ++i) {\n      const {tile, x, y, w, h, gutter} = fadingTiles[i];\n      this.drawTile(tile, frameState, x, y, w, h, gutter, true, undefined);\n    }\n\n    this.renderedResolution = tileResolution;\n    this.extentChanged =\n      !this.renderedExtent_ || !equals(this.renderedExtent_, canvasExtent);\n    this.renderedExtent_ = canvasExtent;\n    this.renderedPixelRatio = pixelRatio;\n\n    this.postRender(this.context, frameState);\n\n    if (this.layerExtent) {\n      context.restore();\n    }\n    context.imageSmoothingEnabled = true;\n\n    if (this.renderComplete) {\n      /**\n       * @param {import(\"../../Map.js\").default} map Map.\n       * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n       */\n      const postRenderFunction = (map, frameState) => {\n        const tileSourceKey = getUid(tileSource);\n        const wantedTiles = frameState.wantedTiles[tileSourceKey];\n        const tilesCount = wantedTiles ? Object.keys(wantedTiles).length : 0;\n        this.updateCacheSize(tilesCount);\n        this.tileCache_.expireCache();\n        this.sourceTileCache_?.expireCache();\n      };\n\n      frameState.postRenderFunctions.push(postRenderFunction);\n    }\n\n    // this normally is `div.ol-layer` and is a mocked div in worker\n    return this.container;\n  }\n\n  /**\n   * Increases the cache size if needed\n   * @param {number} tileCount Minimum number of tiles needed.\n   */\n  updateCacheSize(tileCount) {\n    this.tileCache_.highWaterMark = Math.max(\n      this.tileCache_.highWaterMark,\n      tileCount * 2,\n    );\n  }\n\n  /**\n   * @param {import(\"../../Tile.js\").default} tile Tile.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {number} x Left of the tile.\n   * @param {number} y Top of the tile.\n   * @param {number} w Width of the tile.\n   * @param {number} h Height of the tile.\n   * @param {number} gutter Tile gutter.\n   * @param {boolean} transition Apply an alpha transition.\n   * @param {Array<import(\"../../extent.js\").Extent>} [clipRects] Sub-rectangles\n   *     of the tile to draw. When not provided, the whole tile is drawn; when an\n   *     empty array is provided, nothing is drawn (the tile is fully covered by\n   *     higher-z tiles).\n   * @protected\n   */\n  drawTile(tile, frameState, x, y, w, h, gutter, transition, clipRects) {\n    let image;\n    if (tile instanceof DataTile) {\n      image = asImageLike(tile.getData());\n      if (!image) {\n        throw new Error('Rendering array data is not yet supported');\n      }\n    } else {\n      image = this.getTileImage(\n        /** @type {import(\"../../ImageTile.js\").default} */ (tile),\n      );\n    }\n\n    if (!image) {\n      return;\n    }\n    const context = this.getRenderContext(frameState);\n    const uid = getUid(this);\n    const layerState = frameState.layerStatesArray[frameState.layerIndex];\n    const alpha =\n      layerState.opacity *\n      (transition ? tile.getAlpha(uid, frameState.time) : 1);\n    const alphaChanged = alpha !== context.globalAlpha;\n    if (alphaChanged) {\n      context.save();\n      context.globalAlpha = alpha;\n    }\n    const imageWidth = image.width - 2 * gutter;\n    const imageHeight = image.height - 2 * gutter;\n    if (clipRects) {\n      const scaleX = imageWidth / w;\n      const scaleY = imageHeight / h;\n      for (let i = 0, ii = clipRects.length; i < ii; ++i) {\n        const rect = clipRects[i];\n        const rx = rect[0];\n        const ry = rect[1];\n        const rw = rect[2] - rect[0];\n        const rh = rect[3] - rect[1];\n        context.drawImage(\n          image,\n          gutter + (rx - x) * scaleX,\n          gutter + (ry - y) * scaleY,\n          rw * scaleX,\n          rh * scaleY,\n          rx,\n          ry,\n          rw,\n          rh,\n        );\n      }\n    } else {\n      context.drawImage(\n        image,\n        gutter,\n        gutter,\n        imageWidth,\n        imageHeight,\n        x,\n        y,\n        w,\n        h,\n      );\n    }\n\n    if (alphaChanged) {\n      context.restore();\n    }\n    if (alpha !== layerState.opacity) {\n      frameState.animate = true;\n    } else if (transition) {\n      tile.endTransition(uid);\n    }\n  }\n\n  /**\n   * @return {HTMLCanvasElement|OffscreenCanvas} Image\n   */\n  getImage() {\n    const context = this.context;\n    return context ? context.canvas : null;\n  }\n\n  /**\n   * Get the image from a tile.\n   * @param {import(\"../../ImageTile.js\").default} tile Tile.\n   * @return {HTMLCanvasElement|OffscreenCanvas|HTMLImageElement|HTMLVideoElement} Image.\n   * @protected\n   */\n  getTileImage(tile) {\n    return tile.getImage();\n  }\n\n  /**\n   * @param {!Object<string, !Object<string, boolean>>} usedTiles Used tiles.\n   * @param {import(\"../../source/Tile.js\").default} tileSource Tile source.\n   * @param {import('../../Tile.js').default} tile Tile.\n   * @protected\n   */\n  updateUsedTiles(usedTiles, tileSource, tile) {\n    // FIXME should we use tilesToDrawByZ instead?\n    const tileSourceKey = getUid(tileSource);\n    if (!(tileSourceKey in usedTiles)) {\n      usedTiles[tileSourceKey] = {};\n    }\n    usedTiles[tileSourceKey][tile.getKey()] = true;\n  }\n}\n\nexport default CanvasTileLayerRenderer;\n","/**\n * @module ol/renderer/vector\n */\nimport ImageState from '../ImageState.js';\nimport {getUid} from '../util.js';\n\n/**\n * Feature callback. The callback will be called with three arguments. The first\n * argument is one {@link module:ol/Feature~Feature feature} or {@link module:ol/render/Feature~RenderFeature render feature}\n * at the pixel, the second is the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. The third is the {@link module:ol/geom/SimpleGeometry~SimpleGeometry} of the feature. For features\n * with a GeometryCollection geometry, it will be the first detected geometry from the collection.\n * @template T\n * @typedef {function(import(\"../Feature.js\").FeatureLike, import(\"../layer/Layer.js\").default<import(\"../source/Source.js\").default>, import(\"../geom/SimpleGeometry.js\").default): T} FeatureCallback\n */\n\n/**\n * Tolerance for geometry simplification in device pixels.\n * @type {number}\n */\nconst SIMPLIFY_TOLERANCE = 0.5;\n\n/**\n * @const\n * @type {Object<import(\"../geom/Geometry.js\").Type,\n *                function(import(\"../render/canvas/BuilderGroup.js\").default, import(\"../geom/Geometry.js\").default,\n *                         import(\"../style/Style.js\").default, Object): void>}\n */\nconst GEOMETRY_RENDERERS = {\n  'Point': renderPointGeometry,\n  'LineString': renderLineStringGeometry,\n  'Polygon': renderPolygonGeometry,\n  'MultiPoint': renderMultiPointGeometry,\n  'MultiLineString': renderMultiLineStringGeometry,\n  'MultiPolygon': renderMultiPolygonGeometry,\n  'GeometryCollection': renderGeometryCollectionGeometry,\n  'Circle': renderCircleGeometry,\n};\n\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature1 Feature 1.\n * @param {import(\"../Feature.js\").FeatureLike} feature2 Feature 2.\n * @return {number} Order.\n */\nexport function defaultOrder(feature1, feature2) {\n  return parseInt(getUid(feature1), 10) - parseInt(getUid(feature2), 10);\n}\n\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Squared pixel tolerance.\n */\nexport function getSquaredTolerance(resolution, pixelRatio) {\n  const tolerance = getTolerance(resolution, pixelRatio);\n  return tolerance * tolerance;\n}\n\n/**\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio Pixel ratio.\n * @return {number} Pixel tolerance.\n */\nexport function getTolerance(resolution, pixelRatio) {\n  return (SIMPLIFY_TOLERANCE * resolution) / pixelRatio;\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Builder group.\n * @param {import(\"../geom/Circle.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {number} [index] Render order index.\n */\nfunction renderCircleGeometry(builderGroup, geometry, style, feature, index) {\n  const fillStyle = style.getFill();\n  const strokeStyle = style.getStroke();\n  if (fillStyle || strokeStyle) {\n    const circleReplay = builderGroup.getBuilder(style.getZIndex(), 'Circle');\n    circleReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n    circleReplay.drawCircle(geometry, feature, index);\n  }\n  const textStyle = style.getText();\n  if (textStyle && textStyle.getText()) {\n    const textReplay = builderGroup.getBuilder(style.getZIndex(), 'Text');\n    textReplay.setTextStyle(textStyle);\n    textReplay.drawText(geometry, feature, index);\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Transform from user to view projection.\n * @param {boolean} [declutter] Enable decluttering.\n * @param {number} [index] Render order index..\n * @return {boolean} `true` if style is loading.\n */\nexport function renderFeature(\n  replayGroup,\n  feature,\n  style,\n  squaredTolerance,\n  listener,\n  transform,\n  declutter,\n  index,\n) {\n  const loadingPromises = [];\n  const imageStyle = style.getImage();\n  if (imageStyle) {\n    let loading = true;\n    const imageState = imageStyle.getImageState();\n    if (imageState == ImageState.LOADED || imageState == ImageState.ERROR) {\n      loading = false;\n    } else {\n      if (imageState == ImageState.IDLE) {\n        imageStyle.load();\n      }\n    }\n    if (loading) {\n      loadingPromises.push(imageStyle.ready());\n    }\n  }\n  const fillStyle = style.getFill();\n  if (fillStyle && fillStyle.loading()) {\n    loadingPromises.push(fillStyle.ready());\n  }\n  const loading = loadingPromises.length > 0;\n  if (loading) {\n    Promise.all(loadingPromises).then(() => listener(null));\n  }\n  renderFeatureInternal(\n    replayGroup,\n    feature,\n    style,\n    squaredTolerance,\n    transform,\n    declutter,\n    index,\n  );\n\n  return loading;\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @param {boolean} [declutter] Enable decluttering.\n * @param {number} [index] Render order index..\n */\nfunction renderFeatureInternal(\n  replayGroup,\n  feature,\n  style,\n  squaredTolerance,\n  transform,\n  declutter,\n  index,\n) {\n  const geometry = style.getGeometryFunction()(feature);\n  if (!geometry) {\n    return;\n  }\n  const simplifiedGeometry = geometry.simplifyTransformed(\n    squaredTolerance,\n    transform,\n  );\n  const renderer = style.getRenderer();\n  if (renderer) {\n    renderGeometry(replayGroup, simplifiedGeometry, style, feature, index);\n  } else {\n    const geometryRenderer = GEOMETRY_RENDERERS[simplifiedGeometry.getType()];\n    geometryRenderer(\n      replayGroup,\n      simplifiedGeometry,\n      style,\n      feature,\n      index,\n      declutter,\n    );\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} [index] Render order index.\n */\nfunction renderGeometry(replayGroup, geometry, style, feature, index) {\n  if (geometry.getType() == 'GeometryCollection') {\n    const geometries =\n      /** @type {import(\"../geom/GeometryCollection.js\").default} */ (\n        geometry\n      ).getGeometries();\n    for (let i = 0, ii = geometries.length; i < ii; ++i) {\n      renderGeometry(replayGroup, geometries[i], style, feature, index);\n    }\n    return;\n  }\n  const replay = replayGroup.getBuilder(style.getZIndex(), 'Default');\n  replay.drawCustom(\n    /** @type {import(\"../geom/SimpleGeometry.js\").default} */ (geometry),\n    feature,\n    style.getRenderer(),\n    style.getHitDetectionRenderer(),\n    index,\n  );\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} replayGroup Replay group.\n * @param {import(\"../geom/GeometryCollection.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} [declutterBuilderGroup] Builder for decluttering.\n * @param {number} [index] Render order index.\n */\nfunction renderGeometryCollectionGeometry(\n  replayGroup,\n  geometry,\n  style,\n  feature,\n  declutterBuilderGroup,\n  index,\n) {\n  const geometries = geometry.getGeometriesArray();\n  let i, ii;\n  for (i = 0, ii = geometries.length; i < ii; ++i) {\n    const geometryRenderer = GEOMETRY_RENDERERS[geometries[i].getType()];\n    geometryRenderer(\n      replayGroup,\n      geometries[i],\n      style,\n      feature,\n      declutterBuilderGroup,\n      index,\n    );\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/LineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} [index] Render order index.\n */\nfunction renderLineStringGeometry(\n  builderGroup,\n  geometry,\n  style,\n  feature,\n  index,\n) {\n  const strokeStyle = style.getStroke();\n  if (strokeStyle) {\n    const lineStringReplay = builderGroup.getBuilder(\n      style.getZIndex(),\n      'LineString',\n    );\n    lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n    lineStringReplay.drawLineString(geometry, feature, index);\n  }\n  const textStyle = style.getText();\n  if (textStyle && textStyle.getText()) {\n    const textReplay = builderGroup.getBuilder(style.getZIndex(), 'Text');\n    textReplay.setTextStyle(textStyle);\n    textReplay.drawText(geometry, feature, index);\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiLineString.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} [index] Render order index.\n */\nfunction renderMultiLineStringGeometry(\n  builderGroup,\n  geometry,\n  style,\n  feature,\n  index,\n) {\n  const strokeStyle = style.getStroke();\n  if (strokeStyle) {\n    const lineStringReplay = builderGroup.getBuilder(\n      style.getZIndex(),\n      'LineString',\n    );\n    lineStringReplay.setFillStrokeStyle(null, strokeStyle);\n    lineStringReplay.drawMultiLineString(geometry, feature, index);\n  }\n  const textStyle = style.getText();\n  if (textStyle && textStyle.getText()) {\n    const textReplay = builderGroup.getBuilder(style.getZIndex(), 'Text');\n    textReplay.setTextStyle(textStyle);\n    textReplay.drawText(geometry, feature, index);\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPolygon.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").default} feature Feature.\n * @param {number} [index] Render order index.\n */\nfunction renderMultiPolygonGeometry(\n  builderGroup,\n  geometry,\n  style,\n  feature,\n  index,\n) {\n  const fillStyle = style.getFill();\n  const strokeStyle = style.getStroke();\n  if (strokeStyle || fillStyle) {\n    const polygonReplay = builderGroup.getBuilder(style.getZIndex(), 'Polygon');\n    polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n    polygonReplay.drawMultiPolygon(geometry, feature, index);\n  }\n  const textStyle = style.getText();\n  if (textStyle && textStyle.getText()) {\n    const textReplay = builderGroup.getBuilder(style.getZIndex(), 'Text');\n    textReplay.setTextStyle(textStyle);\n    textReplay.drawText(geometry, feature, index);\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Point.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} [index] Render order index.\n * @param {boolean} [declutter] Enable decluttering.\n */\nfunction renderPointGeometry(\n  builderGroup,\n  geometry,\n  style,\n  feature,\n  index,\n  declutter,\n) {\n  const imageStyle = style.getImage();\n  const textStyle = style.getText();\n  const hasText = textStyle && textStyle.getText();\n  /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n  const declutterImageWithText =\n    declutter && imageStyle && hasText ? {} : undefined;\n  if (imageStyle) {\n    if (imageStyle.getImageState() != ImageState.LOADED) {\n      return;\n    }\n    const imageReplay = builderGroup.getBuilder(style.getZIndex(), 'Image');\n    imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n    imageReplay.drawPoint(geometry, feature, index);\n  }\n  if (hasText) {\n    const textReplay = builderGroup.getBuilder(style.getZIndex(), 'Text');\n    textReplay.setTextStyle(textStyle, declutterImageWithText);\n    textReplay.drawText(geometry, feature, index);\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/MultiPoint.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} [index] Render order index.\n * @param {boolean} [declutter] Enable decluttering.\n */\nfunction renderMultiPointGeometry(\n  builderGroup,\n  geometry,\n  style,\n  feature,\n  index,\n  declutter,\n) {\n  const imageStyle = style.getImage();\n  const hasImage = imageStyle && imageStyle.getOpacity() !== 0;\n  const textStyle = style.getText();\n  const hasText = textStyle && textStyle.getText();\n  /** @type {import(\"../render/canvas.js\").DeclutterImageWithText} */\n  const declutterImageWithText =\n    declutter && hasImage && hasText ? {} : undefined;\n  if (hasImage) {\n    if (imageStyle.getImageState() != ImageState.LOADED) {\n      return;\n    }\n    const imageReplay = builderGroup.getBuilder(style.getZIndex(), 'Image');\n    imageReplay.setImageStyle(imageStyle, declutterImageWithText);\n    imageReplay.drawMultiPoint(geometry, feature, index);\n  }\n  if (hasText) {\n    const textReplay = builderGroup.getBuilder(style.getZIndex(), 'Text');\n    textReplay.setTextStyle(textStyle, declutterImageWithText);\n    textReplay.drawText(geometry, feature, index);\n  }\n}\n\n/**\n * @param {import(\"../render/canvas/BuilderGroup.js\").default} builderGroup Replay group.\n * @param {import(\"../geom/Polygon.js\").default|import(\"../render/Feature.js\").default} geometry Geometry.\n * @param {import(\"../style/Style.js\").default} style Style.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} [index] Render order index.\n */\nfunction renderPolygonGeometry(builderGroup, geometry, style, feature, index) {\n  const fillStyle = style.getFill();\n  const strokeStyle = style.getStroke();\n  if (fillStyle || strokeStyle) {\n    const polygonReplay = builderGroup.getBuilder(style.getZIndex(), 'Polygon');\n    polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);\n    polygonReplay.drawPolygon(geometry, feature, index);\n  }\n  const textStyle = style.getText();\n  if (textStyle && textStyle.getText()) {\n    const textReplay = builderGroup.getBuilder(style.getZIndex(), 'Text');\n    textReplay.setTextStyle(textStyle);\n    textReplay.drawText(geometry, feature, index);\n  }\n}\n","/**\n * @module ol/renderer/webgl/Layer\n */\nimport LayerProperty from '../../layer/Property.js';\nimport RenderEvent from '../../render/Event.js';\nimport RenderEventType from '../../render/EventType.js';\nimport {\n  compose as composeTransform,\n  create as createTransform,\n} from '../../transform.js';\nimport WebGLHelper from '../../webgl/Helper.js';\nimport LayerRenderer from '../Layer.js';\n\n/**\n * @typedef {Object} PostProcessesOptions\n * @property {number} [scaleRatio] Scale ratio; if < 1, the post process will render to a texture smaller than\n * the main canvas that will then be sampled up (useful for saving resource on blur steps).\n * @property {string} [vertexShader] Vertex shader source\n * @property {string} [fragmentShader] Fragment shader source\n * @property {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} [uniforms] Uniform definitions for the post process step\n */\n\n/**\n * @typedef {Object} Options\n * @property {Object<string,import(\"../../webgl/Helper.js\").UniformValue>} [uniforms] Uniform definitions for the post process steps\n * @property {Array<PostProcessesOptions>} [postProcesses] Post-processes definitions\n */\n\n/**\n * @classdesc\n * Base WebGL renderer class.\n * Holds all logic related to data manipulation & some common rendering logic\n * @template {import(\"../../layer/Layer.js\").default} LayerType\n * @extends {LayerRenderer<LayerType>}\n */\nclass WebGLLayerRenderer extends LayerRenderer {\n  /**\n   * @param {LayerType} layer Layer.\n   * @param {Options} [options] Options.\n   */\n  constructor(layer, options) {\n    super(layer);\n\n    options = options || {};\n\n    /**\n     * The transform for viewport CSS pixels to rendered pixels.  This transform is only\n     * set before dispatching rendering events.\n     * @private\n     * @type {import(\"../../transform.js\").Transform}\n     */\n    this.inversePixelTransform_ = createTransform();\n\n    /**\n     * @private\n     */\n    this.postProcesses_ = options.postProcesses;\n\n    /**\n     * @private\n     */\n    this.uniforms_ = options.uniforms;\n\n    /**\n     * @type {WebGLHelper}\n     * @protected\n     */\n    this.helper;\n\n    this.onMapChanged_ = () => {\n      this.clearCache();\n      this.removeHelper();\n    };\n\n    layer.addChangeListener(LayerProperty.MAP, this.onMapChanged_);\n\n    this.dispatchPreComposeEvent = this.dispatchPreComposeEvent.bind(this);\n    this.dispatchPostComposeEvent = this.dispatchPostComposeEvent.bind(this);\n  }\n\n  /**\n   * @param {WebGLRenderingContext} context The WebGL rendering context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  dispatchPreComposeEvent(context, frameState) {\n    const layer = this.getLayer();\n    if (layer.hasListener(RenderEventType.PRECOMPOSE)) {\n      const event = new RenderEvent(\n        RenderEventType.PRECOMPOSE,\n        undefined,\n        frameState,\n        context,\n      );\n      layer.dispatchEvent(event);\n    }\n  }\n\n  /**\n   * @param {WebGLRenderingContext} context The WebGL rendering context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  dispatchPostComposeEvent(context, frameState) {\n    const layer = this.getLayer();\n    if (layer.hasListener(RenderEventType.POSTCOMPOSE)) {\n      const event = new RenderEvent(\n        RenderEventType.POSTCOMPOSE,\n        undefined,\n        frameState,\n        context,\n      );\n      layer.dispatchEvent(event);\n    }\n  }\n\n  /**\n   * Reset options (only handles uniforms).\n   * @param {Options} options Options.\n   */\n  reset(options) {\n    this.uniforms_ = options.uniforms;\n    if (this.helper) {\n      this.helper.setUniforms(this.uniforms_);\n    }\n  }\n\n  /**\n   * @protected\n   */\n  removeHelper() {\n    if (this.helper) {\n      this.helper.dispose();\n      delete this.helper;\n    }\n  }\n\n  /**\n   * Determine whether renderFrame should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @override\n   */\n  prepareFrame(frameState) {\n    if (this.getLayer().getRenderSource()) {\n      let incrementGroup = true;\n      let groupNumber = -1;\n      let className;\n      for (let i = 0, ii = frameState.layerStatesArray.length; i < ii; i++) {\n        const layer = frameState.layerStatesArray[i].layer;\n        const renderer = layer.getRenderer();\n        if (!(renderer instanceof WebGLLayerRenderer)) {\n          incrementGroup = true;\n          continue;\n        }\n        const layerClassName = layer.getClassName();\n        if (incrementGroup || layerClassName !== className) {\n          groupNumber += 1;\n          incrementGroup = false;\n        }\n        className = layerClassName;\n        if (renderer === this) {\n          break;\n        }\n      }\n\n      const canvasCacheKey =\n        'map/' + frameState.mapId + '/group/' + groupNumber;\n\n      if (\n        !this.helper ||\n        !this.helper.canvasCacheKeyMatches(canvasCacheKey) ||\n        this.helper.needsToBeRecreated()\n      ) {\n        this.removeHelper();\n\n        this.helper = new WebGLHelper({\n          postProcesses: this.postProcesses_,\n          uniforms: this.uniforms_,\n          canvasCacheKey: canvasCacheKey,\n        });\n\n        if (className) {\n          this.helper.getCanvas().className = className;\n        }\n\n        this.afterHelperCreated();\n      }\n    }\n\n    return this.prepareFrameInternal(frameState);\n  }\n\n  /**\n   * @protected\n   */\n  afterHelperCreated() {}\n\n  /**\n   * Determine whether renderFrame should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @protected\n   */\n  prepareFrameInternal(frameState) {\n    return true;\n  }\n\n  /**\n   * @protected\n   */\n  clearCache() {}\n\n  /**\n   * @protected\n   * @param {Array<PostProcessesOptions>} postProcesses New post processes array\n   */\n  setPostProcesses(postProcesses) {\n    this.postProcesses_ = postProcesses;\n    this.removeHelper(); // needs a new helper for this change\n  }\n\n  /**\n   * @protected\n   * @return {Array<PostProcessesOptions>} Array of post processes\n   */\n  getPostProcesses() {\n    return this.postProcesses_;\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    this.clearCache();\n    this.removeHelper();\n    this.getLayer()?.removeChangeListener(\n      LayerProperty.MAP,\n      this.onMapChanged_,\n    );\n    super.disposeInternal();\n  }\n\n  /**\n   * @param {import(\"../../render/EventType.js\").default} type Event type.\n   * @param {WebGLRenderingContext} context The rendering context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @private\n   */\n  dispatchRenderEvent_(type, context, frameState) {\n    const layer = this.getLayer();\n    if (layer.hasListener(type)) {\n      composeTransform(\n        this.inversePixelTransform_,\n        0,\n        0,\n        frameState.pixelRatio,\n        -frameState.pixelRatio,\n        0,\n        0,\n        -frameState.size[1],\n      );\n\n      const event = new RenderEvent(\n        type,\n        this.inversePixelTransform_,\n        frameState,\n        context,\n      );\n      layer.dispatchEvent(event);\n    }\n  }\n\n  /**\n   * @param {WebGLRenderingContext} context The rendering context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  preRender(context, frameState) {\n    this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);\n  }\n\n  /**\n   * @param {WebGLRenderingContext} context The rendering context.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  postRender(context, frameState) {\n    this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);\n  }\n}\n\nexport default WebGLLayerRenderer;\n","/**\n * @module ol/webgl/BaseTileRepresentation\n */\n\nimport ImageTile from '../ImageTile.js';\nimport TileState from '../TileState.js';\nimport EventType from '../events/EventType.js';\nimport EventTarget from '../events/Target.js';\nimport {abstract} from '../util.js';\n\n/**\n * @typedef {import(\"../Tile.js\").default} BaseTileType\n */\n\n/**\n * @template {BaseTileType} TileType\n * @typedef {Object} TileRepresentationOptions\n * @property {TileType} tile The tile.\n * @property {import(\"../tilegrid/TileGrid.js\").default} grid Tile grid.\n * @property {import(\"../webgl/Helper.js\").default} helper WebGL helper.\n * @property {number} [gutter=0] The size in pixels of the gutter around image tiles to ignore.\n */\n\n/**\n * @classdesc\n * Base class for representing a tile in a webgl context\n * @template {import(\"../Tile.js\").default} TileType\n * @abstract\n */\nclass BaseTileRepresentation extends EventTarget {\n  /**\n   * @param {TileRepresentationOptions<TileType>} options The tile representation options.\n   */\n  constructor(options) {\n    super();\n\n    /**\n     * @type {TileType}\n     */\n    this.tile;\n\n    /**\n     * @private\n     */\n    this.handleTileChange_ = this.handleTileChange_.bind(this);\n\n    /**\n     * @type {number}\n     * @protected\n     */\n    this.gutter = options.gutter || 0;\n\n    /**\n     * @type {import(\"../webgl/Helper.js\").default}\n     * @protected\n     */\n    this.helper = options.helper;\n\n    this.loaded = false;\n    this.ready = false;\n  }\n\n  /**\n   * @param {TileType} tile Tile.\n   */\n  setTile(tile) {\n    if (tile !== this.tile) {\n      if (this.tile) {\n        this.tile.removeEventListener(EventType.CHANGE, this.handleTileChange_);\n      }\n      this.tile = tile;\n      this.loaded = tile.getState() === TileState.LOADED;\n      if (this.loaded) {\n        this.uploadTile();\n      } else {\n        if (tile instanceof ImageTile) {\n          const image = tile.getImage();\n          if (image instanceof Image && !image.crossOrigin) {\n            image.crossOrigin = 'anonymous';\n          }\n        }\n        tile.addEventListener(EventType.CHANGE, this.handleTileChange_);\n      }\n    }\n  }\n\n  /**\n   * @abstract\n   * @protected\n   */\n  uploadTile() {\n    abstract();\n  }\n\n  setReady() {\n    this.ready = true;\n    this.dispatchEvent(EventType.CHANGE);\n  }\n\n  handleTileChange_() {\n    if (this.tile.getState() === TileState.LOADED) {\n      this.loaded = true;\n      this.uploadTile();\n    }\n  }\n\n  /**\n   * @param {import(\"./Helper.js\").default} helper The WebGL helper.\n   */\n  setHelper(helper) {\n    this.helper = helper;\n    if (this.helper && this.loaded) {\n      this.uploadTile();\n    }\n  }\n\n  /**\n   * @override\n   */\n  disposeInternal() {\n    this.setHelper(null);\n    this.tile.removeEventListener(EventType.CHANGE, this.handleTileChange_);\n  }\n}\n\nexport default BaseTileRepresentation;\n","/**\n * @module ol/webgl/TileTexture\n */\n\nimport DataTile, {asArrayLike, asImageLike} from '../DataTile.js';\nimport ImageTile from '../ImageTile.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport ReprojTile from '../reproj/Tile.js';\nimport {toSize} from '../size.js';\nimport {ARRAY_BUFFER, STATIC_DRAW} from '../webgl.js';\nimport BaseTileRepresentation from './BaseTileRepresentation.js';\nimport WebGLArrayBuffer from './Buffer.js';\n\n/**\n * @param {WebGLRenderingContext} gl The WebGL context.\n * @param {WebGLTexture} texture The texture.\n * @param {boolean} interpolate Interpolate when resampling.\n */\nfunction bindAndConfigure(gl, texture, interpolate) {\n  const resampleFilter = interpolate ? gl.LINEAR : gl.NEAREST;\n  gl.bindTexture(gl.TEXTURE_2D, texture);\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, resampleFilter);\n  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, resampleFilter);\n}\n\n/**\n * @param {WebGLRenderingContext} gl The WebGL context.\n * @param {WebGLTexture} texture The texture.\n * @param {import(\"../DataTile.js\").ImageLike} image The image.\n * @param {boolean} interpolate Interpolate when resampling.\n */\nfunction uploadImageTexture(gl, texture, image, interpolate) {\n  bindAndConfigure(gl, texture, interpolate);\n\n  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n}\n\n/**\n * @param {import(\"./Helper.js\").default} helper The WebGL helper.\n * @param {WebGLTexture} texture The texture.\n * @param {import(\"../DataTile.js\").ArrayLike} data The pixel data.\n * @param {import(\"../size.js\").Size} size The pixel size.\n * @param {number} bandCount The band count.\n * @param {boolean} interpolate Interpolate when resampling.\n */\nfunction uploadDataTexture(\n  helper,\n  texture,\n  data,\n  size,\n  bandCount,\n  interpolate,\n) {\n  const gl = helper.getGL();\n  let textureType;\n  let canInterpolate;\n  if (data instanceof Float32Array) {\n    textureType = gl.FLOAT;\n    helper.getExtension('OES_texture_float');\n    const extension = helper.getExtension('OES_texture_float_linear');\n    canInterpolate = extension !== null;\n  } else {\n    textureType = gl.UNSIGNED_BYTE;\n    canInterpolate = true;\n  }\n  bindAndConfigure(gl, texture, interpolate && canInterpolate);\n\n  const bytesPerRow = data.byteLength / size[1];\n  let unpackAlignment = 1;\n  if (bytesPerRow % 8 === 0) {\n    unpackAlignment = 8;\n  } else if (bytesPerRow % 4 === 0) {\n    unpackAlignment = 4;\n  } else if (bytesPerRow % 2 === 0) {\n    unpackAlignment = 2;\n  }\n\n  let format;\n  switch (bandCount) {\n    case 1: {\n      format = gl.LUMINANCE;\n      break;\n    }\n    case 2: {\n      format = gl.LUMINANCE_ALPHA;\n      break;\n    }\n    case 3: {\n      format = gl.RGB;\n      break;\n    }\n    case 4: {\n      format = gl.RGBA;\n      break;\n    }\n    default: {\n      throw new Error(`Unsupported number of bands: ${bandCount}`);\n    }\n  }\n\n  const oldUnpackAlignment = gl.getParameter(gl.UNPACK_ALIGNMENT);\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);\n  gl.texImage2D(\n    gl.TEXTURE_2D,\n    0,\n    format,\n    size[0],\n    size[1],\n    0,\n    format,\n    textureType,\n    data,\n  );\n  gl.pixelStorei(gl.UNPACK_ALIGNMENT, oldUnpackAlignment);\n}\n\n/**\n * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n */\nlet pixelContext = null;\n\nfunction createPixelContext() {\n  pixelContext = createCanvasContext2D(1, 1, undefined, {\n    willReadFrequently: true,\n  });\n}\n\n/**\n * @typedef {import(\"../DataTile.js\").default|ImageTile|ReprojTile} TileType\n */\n\n/**\n * @extends {BaseTileRepresentation<TileType>}\n */\nclass TileTexture extends BaseTileRepresentation {\n  /**\n   * @param {import(\"./BaseTileRepresentation.js\").TileRepresentationOptions<TileType>} options The tile texture options.\n   */\n  constructor(options) {\n    super(options);\n\n    /**\n     * @type {Array<WebGLTexture>}\n     */\n    this.textures = [];\n\n    /**\n     * @type {import(\"../size.js\").Size}\n     * @private\n     */\n    this.renderSize_ = toSize(\n      options.grid.getTileSize(options.tile.tileCoord[0]),\n    );\n\n    /**\n     * @type {number}\n     */\n    this.bandCount = NaN;\n\n    const coords = new WebGLArrayBuffer(ARRAY_BUFFER, STATIC_DRAW);\n    coords.fromArray([\n      0, // P0\n      1,\n      1, // P1\n      1,\n      1, // P2\n      0,\n      0, // P3\n      0,\n    ]);\n    this.helper.flushBufferData(coords);\n\n    /**\n     * @type {WebGLArrayBuffer}\n     */\n    this.coords = coords;\n\n    this.setTile(options.tile);\n  }\n\n  /**\n   * @override\n   * @param {import(\"./Helper.js\").default} helper The WebGL helper.\n   */\n  setHelper(helper) {\n    const gl = this.helper?.getGL();\n    if (gl) {\n      this.helper.deleteBuffer(this.coords);\n      for (let i = 0; i < this.textures.length; ++i) {\n        gl.deleteTexture(this.textures[i]);\n      }\n    }\n\n    super.setHelper(helper);\n\n    if (helper) {\n      helper.flushBufferData(this.coords);\n    }\n  }\n\n  /**\n   * @override\n   */\n  uploadTile() {\n    const helper = this.helper;\n    const gl = helper.getGL();\n    const tile = this.tile;\n\n    this.textures.length = 0;\n\n    /**\n     * @type {import(\"../DataTile.js\").Data}\n     */\n    let data;\n\n    if (tile instanceof ImageTile || tile instanceof ReprojTile) {\n      data = tile.getImage();\n    } else {\n      data = tile.getData();\n    }\n\n    const image = asImageLike(data);\n    if (image) {\n      const texture = gl.createTexture();\n      this.textures.push(texture);\n      this.bandCount = 4;\n      uploadImageTexture(gl, texture, image, tile.interpolate);\n      this.setReady();\n      return;\n    }\n\n    data = asArrayLike(data);\n\n    const sourceTileSize = /** @type {DataTile} */ (tile).getSize();\n    const pixelSize = [\n      sourceTileSize[0] + 2 * this.gutter,\n      sourceTileSize[1] + 2 * this.gutter,\n    ];\n    const isFloat = data instanceof Float32Array;\n    const pixelCount = pixelSize[0] * pixelSize[1];\n    const DataType = isFloat ? Float32Array : Uint8Array;\n    const bytesPerElement = DataType.BYTES_PER_ELEMENT;\n    const bytesPerRow = data.byteLength / pixelSize[1];\n\n    this.bandCount = Math.floor(bytesPerRow / bytesPerElement / pixelSize[0]);\n    const textureCount = Math.ceil(this.bandCount / 4);\n\n    if (textureCount === 1) {\n      const texture = gl.createTexture();\n      this.textures.push(texture);\n      uploadDataTexture(\n        helper,\n        texture,\n        data,\n        pixelSize,\n        this.bandCount,\n        tile.interpolate,\n      );\n      this.setReady();\n      return;\n    }\n\n    const textureDataArrays = new Array(textureCount);\n    for (let textureIndex = 0; textureIndex < textureCount; ++textureIndex) {\n      const texture = gl.createTexture();\n      this.textures.push(texture);\n\n      const bandCount =\n        textureIndex < textureCount - 1 ? 4 : ((this.bandCount - 1) % 4) + 1;\n      textureDataArrays[textureIndex] = new DataType(pixelCount * bandCount);\n    }\n\n    let dataIndex = 0;\n    let rowOffset = 0;\n    const colCount = pixelSize[0] * this.bandCount;\n    for (let rowIndex = 0; rowIndex < pixelSize[1]; ++rowIndex) {\n      for (let colIndex = 0; colIndex < colCount; ++colIndex) {\n        const dataValue = data[rowOffset + colIndex];\n\n        const pixelIndex = Math.floor(dataIndex / this.bandCount);\n        const bandIndex = colIndex % this.bandCount;\n        const textureIndex = Math.floor(bandIndex / 4);\n        const textureData = textureDataArrays[textureIndex];\n        const bandCount = textureData.length / pixelCount;\n        const textureBandIndex = bandIndex % 4;\n        textureData[pixelIndex * bandCount + textureBandIndex] = dataValue;\n\n        ++dataIndex;\n      }\n      rowOffset += bytesPerRow / bytesPerElement;\n    }\n\n    for (let textureIndex = 0; textureIndex < textureCount; ++textureIndex) {\n      const texture = this.textures[textureIndex];\n      const textureData = textureDataArrays[textureIndex];\n      const bandCount = textureData.length / pixelCount;\n      uploadDataTexture(\n        helper,\n        texture,\n        textureData,\n        pixelSize,\n        bandCount,\n        tile.interpolate,\n      );\n    }\n\n    this.setReady();\n  }\n\n  /**\n   * @param {import(\"../DataTile.js\").ImageLike} image The image.\n   * @param {number} renderCol The column index (in rendered tile space).\n   * @param {number} renderRow The row index (in rendered tile space).\n   * @return {Uint8ClampedArray|null} The data.\n   * @private\n   */\n  getImagePixelData_(image, renderCol, renderRow) {\n    const gutter = this.gutter;\n    const renderWidth = this.renderSize_[0];\n    const renderHeight = this.renderSize_[1];\n\n    if (!pixelContext) {\n      createPixelContext();\n    }\n    pixelContext.clearRect(0, 0, 1, 1);\n\n    const sourceWidth = image.width;\n    const sourceHeight = image.height;\n\n    const sourceWidthWithoutGutter = sourceWidth - 2 * gutter;\n    const sourceHeightWithoutGutter = sourceHeight - 2 * gutter;\n\n    const sourceCol =\n      gutter + Math.floor(sourceWidthWithoutGutter * (renderCol / renderWidth));\n\n    const sourceRow =\n      gutter +\n      Math.floor(sourceHeightWithoutGutter * (renderRow / renderHeight));\n\n    let data;\n    try {\n      pixelContext.drawImage(image, sourceCol, sourceRow, 1, 1, 0, 0, 1, 1);\n      data = pixelContext.getImageData(0, 0, 1, 1).data;\n    } catch {\n      pixelContext = null;\n      return null;\n    }\n    return data;\n  }\n\n  /**\n   * @param {import(\"../DataTile.js\").ArrayLike} data The data.\n   * @param {import(\"../size.js\").Size} sourceSize The size.\n   * @param {number} renderCol The column index (in rendered tile space).\n   * @param {number} renderRow The row index (in rendered tile space).\n   * @return {import(\"../DataTile.js\").ArrayLike|null} The data.\n   * @private\n   */\n  getArrayPixelData_(data, sourceSize, renderCol, renderRow) {\n    const gutter = this.gutter;\n    const renderWidth = this.renderSize_[0];\n    const renderHeight = this.renderSize_[1];\n\n    const sourceWidthWithoutGutter = sourceSize[0];\n    const sourceHeightWithoutGutter = sourceSize[1];\n    const sourceWidth = sourceWidthWithoutGutter + 2 * gutter;\n    const sourceHeight = sourceHeightWithoutGutter + 2 * gutter;\n\n    const sourceCol =\n      gutter + Math.floor(sourceWidthWithoutGutter * (renderCol / renderWidth));\n\n    const sourceRow =\n      gutter +\n      Math.floor(sourceHeightWithoutGutter * (renderRow / renderHeight));\n\n    if (data instanceof DataView) {\n      const bytesPerPixel = data.byteLength / (sourceWidth * sourceHeight);\n      const offset = bytesPerPixel * (sourceRow * sourceWidth + sourceCol);\n      const buffer = data.buffer.slice(offset, offset + bytesPerPixel);\n      return new DataView(buffer);\n    }\n\n    const offset = this.bandCount * (sourceRow * sourceWidth + sourceCol);\n    return data.slice(offset, offset + this.bandCount);\n  }\n\n  /**\n   * Get data for a pixel.  If the tile is not loaded, null is returned.\n   * @param {number} renderCol The column index (in rendered tile space).\n   * @param {number} renderRow The row index (in rendered tile space).\n   * @return {import(\"../DataTile.js\").ArrayLike|null} The data.\n   */\n  getPixelData(renderCol, renderRow) {\n    if (!this.loaded) {\n      return null;\n    }\n\n    if (this.tile instanceof DataTile) {\n      const data = this.tile.getData();\n      const arrayData = asArrayLike(data);\n      if (arrayData) {\n        const sourceSize = this.tile.getSize();\n        return this.getArrayPixelData_(\n          arrayData,\n          sourceSize,\n          renderCol,\n          renderRow,\n        );\n      }\n      return this.getImagePixelData_(asImageLike(data), renderCol, renderRow);\n    }\n\n    return this.getImagePixelData_(this.tile.getImage(), renderCol, renderRow);\n  }\n}\n\nexport default TileTexture;\n","/**\n * @module ol/renderer/webgl/TileLayerBase\n */\nimport TileRange from '../../TileRange.js';\nimport TileState from '../../TileState.js';\nimport {descending} from '../../array.js';\nimport {getIntersection, getRotatedViewport, isEmpty} from '../../extent.js';\nimport {equivalent, fromUserExtent} from '../../proj.js';\nimport {toSize} from '../../size.js';\nimport LRUCache from '../../structs/LRUCache.js';\nimport {\n  createOrUpdate as createTileCoord,\n  getKey as getTileCoordKey,\n} from '../../tilecoord.js';\nimport {\n  apply as applyTransform,\n  create as createTransform,\n  reset as resetTransform,\n  rotate as rotateTransform,\n  scale as scaleTransform,\n  translate as translateTransform,\n} from '../../transform.js';\nimport {abstract, getUid} from '../../util.js';\nimport {create as createMat4} from '../../vec/mat4.js';\nimport {DefaultUniform} from '../../webgl/Helper.js';\nimport WebGLLayerRenderer from './Layer.js';\n\nexport const Uniforms = {\n  ...DefaultUniform,\n  TILE_TRANSFORM: 'u_tileTransform',\n  TRANSITION_ALPHA: 'u_transitionAlpha',\n  DEPTH: 'u_depth',\n  RENDER_EXTENT: 'u_renderExtent', // intersection of layer, source, and view extent\n  GLOBAL_ALPHA: 'u_globalAlpha',\n};\n\n/**\n * Transform a zoom level into a depth value; zoom level zero has a depth value of 0.5, and increasing values\n * have a depth trending towards 0\n * @param {number} z A zoom level.\n * @return {number} A depth value.\n */\nfunction depthForZ(z) {\n  return 1 / (z + 2);\n}\n\n/**\n * @typedef {import(\"../../webgl/BaseTileRepresentation.js\").default<import(\"../../Tile.js\").default>} AbstractTileRepresentation\n */\n/**\n * @typedef {Object} TileRepresentationLookup\n * @property {Set<string>} tileIds The set of tile ids in the lookup.\n * @property {Object<number, Set<AbstractTileRepresentation>>} representationsByZ Tile representations by zoom level.\n */\n\n/**\n * @return {TileRepresentationLookup} A new tile representation lookup.\n */\nexport function newTileRepresentationLookup() {\n  return {tileIds: new Set(), representationsByZ: {}};\n}\n\n/**\n * Check if a tile is already in the tile representation lookup.\n * @param {TileRepresentationLookup} tileRepresentationLookup Lookup of tile representations by zoom level.\n * @param {import(\"../../Tile.js\").default} tile A tile.\n * @return {boolean} The tile is already in the lookup.\n */\nfunction lookupHasTile(tileRepresentationLookup, tile) {\n  return tileRepresentationLookup.tileIds.has(getUid(tile));\n}\n\n/**\n * Add a tile representation to the lookup.\n * @param {TileRepresentationLookup} tileRepresentationLookup Lookup of tile representations by zoom level.\n * @param {AbstractTileRepresentation} tileRepresentation A tile representation.\n * @param {number} z The zoom level.\n */\nfunction addTileRepresentationToLookup(\n  tileRepresentationLookup,\n  tileRepresentation,\n  z,\n) {\n  const representationsByZ = tileRepresentationLookup.representationsByZ;\n  if (!(z in representationsByZ)) {\n    representationsByZ[z] = new Set();\n  }\n  representationsByZ[z].add(tileRepresentation);\n  tileRepresentationLookup.tileIds.add(getUid(tileRepresentation.tile));\n}\n\n/**\n * Remove a tile representation from the lookup.\n * @param {TileRepresentationLookup} tileRepresentationLookup Lookup of tile representations by zoom level.\n * @param {AbstractTileRepresentation} tileRepresentation A tile representation.\n * @param {number} z The zoom level.\n */\nfunction removeTileRepresentationFromLookup(\n  tileRepresentationLookup,\n  tileRepresentation,\n  z,\n) {\n  const representations = tileRepresentationLookup.representationsByZ[z];\n  if (representations) {\n    representations.delete(tileRepresentation);\n  }\n  tileRepresentationLookup.tileIds.delete(getUid(tileRepresentation.tile));\n}\n\n/**\n * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n * @param {import(\"../../extent.js\").Extent} extent The frame extent.\n * @return {import(\"../../extent.js\").Extent} Frame extent intersected with layer extents.\n */\nfunction getRenderExtent(frameState, extent) {\n  const layerState = frameState.layerStatesArray[frameState.layerIndex];\n  if (layerState.extent) {\n    extent = getIntersection(\n      extent,\n      fromUserExtent(layerState.extent, frameState.viewState.projection),\n    );\n  }\n  const source = /** @type {import(\"../../source/Tile.js\").default} */ (\n    layerState.layer.getRenderSource()\n  );\n  if (!source.getWrapX()) {\n    const gridExtent = source\n      .getTileGridForProjection(frameState.viewState.projection)\n      .getExtent();\n    if (gridExtent) {\n      extent = getIntersection(extent, gridExtent);\n    }\n  }\n  return extent;\n}\n\n/**\n * @param {import(\"../../source/Tile.js\").default} source The source.\n * @param {import('../../tilecoord.js').TileCoord} tileCoord The tile coordinate.\n * @param {string} [key] The source key to use; defaults to the current key.\n * @return {string} The cache key.\n */\nexport function getCacheKey(source, tileCoord, key = source.getKey()) {\n  return `${getUid(source)},${key},${getTileCoordKey(tileCoord)}`;\n}\n\n/**\n * @typedef {Object} Options\n * @property {Object<string, import(\"../../webgl/Helper.js\").UniformValue>} [uniforms] Additional uniforms\n * made available to shaders.\n * @property {number} [cacheSize=512] The tile representation cache size.\n * @property {Array<import('./Layer.js').PostProcessesOptions>} [postProcesses] Post-processes definitions.\n */\n\n/**\n * @typedef {import(\"../../layer/BaseTile.js\").default} BaseLayerType\n */\n\n/**\n * @classdesc\n * Base WebGL renderer for tile layers.\n * @template {BaseLayerType} LayerType\n * @template {import(\"../../Tile.js\").default} TileType\n * @template {import(\"../../webgl/BaseTileRepresentation.js\").default<TileType>} TileRepresentation\n * @extends {WebGLLayerRenderer<LayerType>}\n */\nclass WebGLBaseTileLayerRenderer extends WebGLLayerRenderer {\n  /**\n   * @param {LayerType} tileLayer Tile layer.\n   * @param {Options} options Options.\n   */\n  constructor(tileLayer, options) {\n    super(tileLayer, {\n      uniforms: options.uniforms,\n      postProcesses: options.postProcesses,\n    });\n\n    /**\n     * The last call to `renderFrame` was completed with all tiles loaded\n     * @type {boolean}\n     */\n    this.renderComplete = false;\n\n    /**\n     * This transform converts representation coordinates to screen coordinates.\n     * @type {import(\"../../transform.js\").Transform}\n     * @private\n     */\n    this.tileTransform_ = createTransform();\n\n    /**\n     * @protected\n     */\n    this.tmpCoords_ = [0, 0];\n    /**\n     * @protected\n     */\n    this.tmpCoords2_ = [0, 0];\n    /**\n     * @protected\n     */\n    this.tmpExtent_ = [0, 0, 0, 0];\n    /**\n     * @protected\n     */\n    this.tmpTransform_ = createTransform();\n    /**\n     * @protected\n     */\n    this.tmpMat4_ = createMat4();\n\n    /**\n     * @type {import(\"../../TileRange.js\").default}\n     * @private\n     */\n    this.tempTileRange_ = new TileRange(0, 0, 0, 0);\n\n    /**\n     * @type {import(\"../../tilecoord.js\").TileCoord}\n     * @private\n     */\n    this.tempTileCoord_ = createTileCoord(0, 0, 0);\n\n    /**\n     * @type {import(\"../../size.js\").Size}\n     * @private\n     */\n    this.tempSize_ = [0, 0];\n\n    const cacheSize = options.cacheSize !== undefined ? options.cacheSize : 512;\n    /**\n     * @type {import(\"../../structs/LRUCache.js\").default<TileRepresentation>}\n     * @protected\n     */\n    this.tileRepresentationCache = new LRUCache(cacheSize);\n\n    this.maxStaleKeys = cacheSize * 0.5;\n\n    /**\n     * @protected\n     * @type {import(\"../../Map.js\").FrameState|null}\n     */\n    this.frameState = null;\n\n    /**\n     * @private\n     * @type {import(\"../../proj/Projection.js\").default}\n     */\n    this.renderedProjection_ = undefined;\n\n    /**\n     * @private\n     * @type {import(\"../../structs/LRUCache.js\").default<import(\"../../Tile.js\").default>|null}\n     */\n    this.sourceTileCache_ = null;\n  }\n\n  /**\n   * @param {Options} options Options.\n   * @override\n   */\n  reset(options) {\n    super.reset({\n      uniforms: options.uniforms,\n    });\n  }\n\n  /**\n   * Determine whether renderFrame should be called.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} Layer is ready to be rendered.\n   * @override\n   */\n  prepareFrameInternal(frameState) {\n    if (!this.renderedProjection_) {\n      this.renderedProjection_ = frameState.viewState.projection;\n    } else if (frameState.viewState.projection !== this.renderedProjection_) {\n      this.clearCache();\n      this.renderedProjection_ = frameState.viewState.projection;\n    }\n\n    const layer = this.getLayer();\n    const source = layer.getRenderSource();\n    if (!source) {\n      return false;\n    }\n\n    if (isEmpty(getRenderExtent(frameState, frameState.extent))) {\n      return false;\n    }\n    return source.getState() === 'ready';\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../../webgl/BaseTileRepresentation.js\").TileRepresentationOptions<TileType>} options tile representation options\n   * @return {TileRepresentation} A new tile representation\n   * @protected\n   */\n  createTileRepresentation(options) {\n    return abstract();\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {import(\"../../extent.js\").Extent} extent The extent to be rendered.\n   * @param {number} initialZ The zoom level.\n   * @param {TileRepresentationLookup} tileRepresentationLookup The zoom level.\n   * @param {number} preload Number of additional levels to load.\n   */\n  enqueueTiles(\n    frameState,\n    extent,\n    initialZ,\n    tileRepresentationLookup,\n    preload,\n  ) {\n    const viewState = frameState.viewState;\n    const tileLayer = this.getLayer();\n    const tileSource = tileLayer.getRenderSource();\n    const tileGrid = tileSource.getTileGridForProjection(viewState.projection);\n    const gutter = tileSource.getGutterForProjection(viewState.projection);\n\n    const tileSourceKey = getUid(tileSource);\n    if (!(tileSourceKey in frameState.wantedTiles)) {\n      frameState.wantedTiles[tileSourceKey] = {};\n    }\n\n    const wantedTiles = frameState.wantedTiles[tileSourceKey];\n    const tileRepresentationCache = this.tileRepresentationCache;\n\n    const map = tileLayer.getMapInternal();\n    const minZ = Math.max(\n      initialZ - preload,\n      tileGrid.getMinZoom(),\n      tileGrid.getZForResolution(\n        Math.min(\n          tileLayer.getMaxResolution(),\n          map\n            ? map\n                .getView()\n                .getResolutionForZoom(Math.max(tileLayer.getMinZoom(), 0))\n            : tileGrid.getResolution(0),\n        ),\n        tileSource.zDirection,\n      ),\n    );\n    const rotation = viewState.rotation;\n    const viewport = rotation\n      ? getRotatedViewport(\n          viewState.center,\n          viewState.resolution,\n          rotation,\n          frameState.size,\n        )\n      : undefined;\n    for (let z = initialZ; z >= minZ; --z) {\n      const tileRange = tileGrid.getTileRangeForExtentAndZ(\n        extent,\n        z,\n        this.tempTileRange_,\n      );\n\n      const tileResolution = tileGrid.getResolution(z);\n\n      for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n        for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n          if (\n            rotation &&\n            !tileGrid.tileCoordIntersectsViewport([z, x, y], viewport)\n          ) {\n            continue;\n          }\n          const tileCoord = createTileCoord(z, x, y, this.tempTileCoord_);\n          const cacheKey = getCacheKey(tileSource, tileCoord);\n\n          /** @type {TileRepresentation} */\n          let tileRepresentation;\n\n          /** @type {TileType} */\n          let tile;\n\n          if (tileRepresentationCache.containsKey(cacheKey)) {\n            tileRepresentation = tileRepresentationCache.get(cacheKey);\n            tile = tileRepresentation.tile;\n          }\n          if (\n            !tileRepresentation ||\n            tileRepresentation.tile.key !== tileSource.getKey()\n          ) {\n            const sourceProjection = tileSource.getProjection();\n            const sourceTileCache =\n              sourceProjection &&\n              !equivalent(sourceProjection, viewState.projection)\n                ? this.getSourceTileCache_()\n                : undefined;\n            tile = tileSource.getTile(\n              z,\n              x,\n              y,\n              frameState.pixelRatio,\n              viewState.projection,\n              sourceTileCache,\n            );\n            if (!tile) {\n              continue;\n            }\n          }\n\n          if (lookupHasTile(tileRepresentationLookup, tile)) {\n            continue;\n          }\n\n          if (!tileRepresentation) {\n            tileRepresentation = this.createTileRepresentation({\n              tile: tile,\n              grid: tileGrid,\n              helper: this.helper,\n              gutter: gutter,\n            });\n            tileRepresentationCache.set(cacheKey, tileRepresentation);\n          } else {\n            tileRepresentation.setTile(tile);\n          }\n\n          addTileRepresentationToLookup(\n            tileRepresentationLookup,\n            tileRepresentation,\n            z,\n          );\n\n          const tileQueueKey = tile.getKey();\n          wantedTiles[tileQueueKey] = true;\n\n          if (tile.getState() === TileState.IDLE) {\n            if (!frameState.tileQueue.isKeyQueued(tileQueueKey)) {\n              frameState.tileQueue.enqueue([\n                tile,\n                tileSourceKey,\n                tileGrid.getTileCoordCenter(tileCoord),\n                tileResolution,\n              ]);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @param {boolean} tilesWithAlpha True if at least one of the rendered tiles has alpha\n   * @protected\n   */\n  beforeTilesRender(frameState, tilesWithAlpha) {\n    this.helper.prepareDraw(this.frameState, !tilesWithAlpha, true);\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {boolean} If returns false, tile mask rendering will be skipped\n   * @protected\n   */\n  beforeTilesMaskRender(frameState) {\n    return false;\n  }\n\n  /**\n   * @param {TileRepresentation} tileRepresentation Tile representation\n   * @param {import(\"../../transform.js\").Transform} tileTransform Tile transform\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state\n   * @param {import(\"../../extent.js\").Extent} renderExtent Render extent\n   * @param {number} tileResolution Tile resolution\n   * @param {import(\"../../size.js\").Size} tileSize Tile size\n   * @param {import(\"../../coordinate.js\").Coordinate} tileOrigin Tile origin\n   * @param {import(\"../../extent.js\").Extent} tileExtent tile Extent\n   * @param {number} depth Depth\n   * @param {number} gutter Gutter\n   * @param {number} alpha Alpha\n   * @protected\n   */\n  renderTile(\n    tileRepresentation,\n    tileTransform,\n    frameState,\n    renderExtent,\n    tileResolution,\n    tileSize,\n    tileOrigin,\n    tileExtent,\n    depth,\n    gutter,\n    alpha,\n  ) {}\n\n  /**\n   * @param {TileRepresentation} tileRepresentation Tile representation\n   * @param {number} tileZ Tile Z\n   * @param {import(\"../../extent.js\").Extent} extent Render extent\n   * @param {number} depth Depth\n   * @protected\n   */\n  renderTileMask(tileRepresentation, tileZ, extent, depth) {}\n\n  drawTile_(\n    frameState,\n    tileRepresentation,\n    tileZ,\n    gutter,\n    extent,\n    alphaLookup,\n    tileGrid,\n  ) {\n    if (!tileRepresentation.ready) {\n      return;\n    }\n    const tile = tileRepresentation.tile;\n    const tileCoord = tile.tileCoord;\n    const tileCoordKey = getTileCoordKey(tileCoord);\n    const alpha = tileCoordKey in alphaLookup ? alphaLookup[tileCoordKey] : 1;\n\n    const tileResolution = tileGrid.getResolution(tileZ);\n    const tileSize = toSize(tileGrid.getTileSize(tileZ), this.tempSize_);\n    const tileOrigin = tileGrid.getOrigin(tileZ);\n    const tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n    // tiles with alpha are rendered last to allow blending\n    const depth = alpha < 1 ? -1 : depthForZ(tileZ);\n    if (alpha < 1) {\n      frameState.animate = true;\n    }\n\n    const viewState = frameState.viewState;\n    const centerX = viewState.center[0];\n    const centerY = viewState.center[1];\n\n    const tileWidthWithGutter = tileSize[0] + 2 * gutter;\n    const tileHeightWithGutter = tileSize[1] + 2 * gutter;\n\n    const aspectRatio = tileWidthWithGutter / tileHeightWithGutter;\n\n    const centerI = (centerX - tileOrigin[0]) / (tileSize[0] * tileResolution);\n    const centerJ = (tileOrigin[1] - centerY) / (tileSize[1] * tileResolution);\n\n    const tileScale = viewState.resolution / tileResolution;\n\n    const tileCenterI = tileCoord[1];\n    const tileCenterJ = tileCoord[2];\n\n    resetTransform(this.tileTransform_);\n    scaleTransform(\n      this.tileTransform_,\n      2 / ((frameState.size[0] * tileScale) / tileWidthWithGutter),\n      -2 / ((frameState.size[1] * tileScale) / tileWidthWithGutter),\n    );\n    rotateTransform(this.tileTransform_, viewState.rotation);\n    scaleTransform(this.tileTransform_, 1, 1 / aspectRatio);\n    translateTransform(\n      this.tileTransform_,\n      (tileSize[0] * (tileCenterI - centerI) - gutter) / tileWidthWithGutter,\n      (tileSize[1] * (tileCenterJ - centerJ) - gutter) / tileHeightWithGutter,\n    );\n\n    this.renderTile(\n      /** @type {TileRepresentation} */ (tileRepresentation),\n      this.tileTransform_,\n      frameState,\n      extent,\n      tileResolution,\n      tileSize,\n      tileOrigin,\n      tileExtent,\n      depth,\n      gutter,\n      alpha,\n    );\n  }\n\n  /**\n   * Render the layer.\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @return {HTMLElement} The rendered element.\n   * @override\n   */\n  renderFrame(frameState) {\n    this.frameState = frameState;\n    this.renderComplete = true;\n    const gl = this.helper.getGL();\n    this.preRender(gl, frameState);\n\n    const viewState = frameState.viewState;\n    const tileLayer = this.getLayer();\n    const tileSource = tileLayer.getRenderSource();\n    const tileGrid = tileSource.getTileGridForProjection(viewState.projection);\n    const gutter = tileSource.getGutterForProjection(viewState.projection);\n    const extent = getRenderExtent(frameState, frameState.extent);\n    const z = tileGrid.getZForResolution(\n      viewState.resolution,\n      tileSource.zDirection,\n    );\n\n    this.updateStaleKeys(tileSource.getKey());\n\n    /**\n     * @type {TileRepresentationLookup}\n     */\n    const tileRepresentationLookup = newTileRepresentationLookup();\n\n    const preload = tileLayer.getPreload();\n    if (frameState.nextExtent) {\n      const targetZ = tileGrid.getZForResolution(\n        viewState.nextResolution,\n        tileSource.zDirection,\n      );\n      const nextExtent = getRenderExtent(frameState, frameState.nextExtent);\n      this.enqueueTiles(\n        frameState,\n        nextExtent,\n        targetZ,\n        tileRepresentationLookup,\n        preload,\n      );\n    }\n\n    this.enqueueTiles(frameState, extent, z, tileRepresentationLookup, 0);\n    if (preload > 0) {\n      setTimeout(() => {\n        this.enqueueTiles(\n          frameState,\n          extent,\n          z - 1,\n          tileRepresentationLookup,\n          preload - 1,\n        );\n      }, 0);\n    }\n\n    /**\n     * A lookup of alpha values for tiles at the target rendering resolution\n     * for tiles that are in transition.  If a tile coord key is absent from\n     * this lookup, the tile should be rendered at alpha 1.\n     * @type {Object<string, number>}\n     */\n    const alphaLookup = {};\n\n    let blend = false;\n    const representationsByZ = tileRepresentationLookup.representationsByZ;\n\n    // look for cached tiles to use if a target tile is not ready\n    if (z in representationsByZ) {\n      const uid = getUid(this);\n      const time = frameState.time;\n      for (const tileRepresentation of representationsByZ[z]) {\n        const tile = tileRepresentation.tile;\n        if (tile.getState() === TileState.EMPTY) {\n          continue;\n        }\n        const tileCoord = tile.tileCoord;\n\n        const tileCoordKey = getTileCoordKey(tileCoord);\n        if (tileRepresentation.ready) {\n          const alpha = tile.getAlpha(uid, time);\n          if (alpha === 1) {\n            // no need to look for alt tiles\n            tile.endTransition(uid);\n            continue;\n          }\n          blend = true;\n          alphaLookup[tileCoordKey] = alpha;\n        }\n        this.renderComplete = false;\n\n        // look for a tile from a previous key before falling back to other zoom levels\n        const hasStaleTile = this.findStaleTile_(\n          tileCoord,\n          tileRepresentationLookup,\n        );\n        if (hasStaleTile) {\n          // show the stale tile at full opacity until the new tile has faded in\n          delete alphaLookup[tileCoordKey];\n          removeTileRepresentationFromLookup(\n            tileRepresentationLookup,\n            tileRepresentation,\n            z,\n          );\n          frameState.animate = true;\n          continue;\n        }\n\n        // first look for child tiles (at z + 1)\n        const coveredByChildren = this.findAltTiles_(\n          tileGrid,\n          tileCoord,\n          z + 1,\n          tileRepresentationLookup,\n        );\n\n        if (coveredByChildren) {\n          continue;\n        }\n\n        // next look for parent tiles\n        const minZoom = tileGrid.getMinZoom();\n        for (let parentZ = z - 1; parentZ >= minZoom; --parentZ) {\n          const coveredByParent = this.findAltTiles_(\n            tileGrid,\n            tileCoord,\n            parentZ,\n            tileRepresentationLookup,\n          );\n\n          if (coveredByParent) {\n            break;\n          }\n        }\n      }\n    }\n\n    const zs = Object.keys(representationsByZ).map(Number).sort(descending);\n\n    const renderTileMask = this.beforeTilesMaskRender(frameState);\n\n    if (renderTileMask) {\n      for (let j = 0, jj = zs.length; j < jj; ++j) {\n        const tileZ = zs[j];\n        for (const tileRepresentation of representationsByZ[tileZ]) {\n          const tileCoord = tileRepresentation.tile.tileCoord;\n          const tileCoordKey = getTileCoordKey(tileCoord);\n          // do not render the tile mask if alpha < 1\n          if (tileCoordKey in alphaLookup) {\n            continue;\n          }\n          const tileExtent = tileGrid.getTileCoordExtent(tileCoord);\n          this.renderTileMask(\n            /** @type {TileRepresentation} */ (tileRepresentation),\n            tileZ,\n            tileExtent,\n            depthForZ(tileZ),\n          );\n        }\n      }\n    }\n\n    this.beforeTilesRender(frameState, blend);\n\n    for (let j = 0, jj = zs.length; j < jj; ++j) {\n      const tileZ = zs[j];\n      for (const tileRepresentation of representationsByZ[tileZ]) {\n        const tileCoord = tileRepresentation.tile.tileCoord;\n        const tileCoordKey = getTileCoordKey(tileCoord);\n        if (tileCoordKey in alphaLookup) {\n          continue;\n        }\n\n        this.drawTile_(\n          frameState,\n          tileRepresentation,\n          tileZ,\n          gutter,\n          extent,\n          alphaLookup,\n          tileGrid,\n        );\n      }\n    }\n\n    if (z in representationsByZ) {\n      for (const tileRepresentation of representationsByZ[z]) {\n        const tileCoord = tileRepresentation.tile.tileCoord;\n        const tileCoordKey = getTileCoordKey(tileCoord);\n        if (tileCoordKey in alphaLookup) {\n          this.drawTile_(\n            frameState,\n            tileRepresentation,\n            z,\n            gutter,\n            extent,\n            alphaLookup,\n            tileGrid,\n          );\n        }\n      }\n    }\n\n    this.beforeFinalize(frameState);\n    this.helper.finalizeDraw(\n      frameState,\n      this.dispatchPreComposeEvent,\n      this.dispatchPostComposeEvent,\n    );\n\n    const canvas = this.helper.getCanvas();\n\n    const tileRepresentationCache = this.tileRepresentationCache;\n    tileRepresentationCache.expireCache();\n\n    this.postRender(gl, frameState);\n    return canvas;\n  }\n\n  /**\n   * @param {import(\"../../Map.js\").FrameState} frameState Frame state.\n   * @protected\n   */\n  beforeFinalize(frameState) {}\n\n  /**\n   * Look for a ready tile at the same coordinate from a previous source key.\n   * A match is added to the provided lookup at the target zoom level.\n   * @param {import(\"../../tilecoord.js\").TileCoord} tileCoord The target tile coordinate.\n   * @param {TileRepresentationLookup} tileRepresentationLookup Lookup of\n   * tile representations by zoom level.\n   * @return {boolean} A stale tile was found and added to the lookup.\n   * @private\n   */\n  findStaleTile_(tileCoord, tileRepresentationLookup) {\n    const tileRepresentationCache = this.tileRepresentationCache;\n    const source = this.getLayer().getRenderSource();\n    const z = tileCoord[0];\n    const staleKeys = this.getStaleKeys();\n    for (let i = 0, ii = staleKeys.length; i < ii; ++i) {\n      const cacheKey = getCacheKey(source, tileCoord, staleKeys[i]);\n      if (tileRepresentationCache.containsKey(cacheKey)) {\n        const tileRepresentation = tileRepresentationCache.get(cacheKey);\n        if (\n          tileRepresentation.ready &&\n          !lookupHasTile(tileRepresentationLookup, tileRepresentation.tile)\n        ) {\n          // end the transition so the stale tile renders opaque and is not\n          // re-processed as a target tile (which could loop)\n          tileRepresentation.tile.endTransition(getUid(this));\n          addTileRepresentationToLookup(\n            tileRepresentationLookup,\n            tileRepresentation,\n            z,\n          );\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Look for tiles covering the provided tile coordinate at an alternate\n   * zoom level.  Loaded tiles will be added to the provided tile representation lookup.\n   * @param {import(\"../../tilegrid/TileGrid.js\").default} tileGrid The tile grid.\n   * @param {import(\"../../tilecoord.js\").TileCoord} tileCoord The target tile coordinate.\n   * @param {number} altZ The alternate zoom level.\n   * @param {TileRepresentationLookup} tileRepresentationLookup Lookup of\n   * tile representations by zoom level.\n   * @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.\n   * @private\n   */\n  findAltTiles_(tileGrid, tileCoord, altZ, tileRepresentationLookup) {\n    const tileRange = tileGrid.getTileRangeForTileCoordAndZ(\n      tileCoord,\n      altZ,\n      this.tempTileRange_,\n    );\n\n    if (!tileRange) {\n      return false;\n    }\n\n    let covered = true;\n    const tileRepresentationCache = this.tileRepresentationCache;\n    const source = this.getLayer().getRenderSource();\n    for (let x = tileRange.minX; x <= tileRange.maxX; ++x) {\n      for (let y = tileRange.minY; y <= tileRange.maxY; ++y) {\n        const cacheKey = getCacheKey(source, [altZ, x, y]);\n        let loaded = false;\n        if (tileRepresentationCache.containsKey(cacheKey)) {\n          const tileRepresentation = tileRepresentationCache.get(cacheKey);\n          if (\n            tileRepresentation.ready &&\n            !lookupHasTile(tileRepresentationLookup, tileRepresentation.tile)\n          ) {\n            addTileRepresentationToLookup(\n              tileRepresentationLookup,\n              tileRepresentation,\n              altZ,\n            );\n            loaded = true;\n          }\n        }\n        if (!loaded) {\n          covered = false;\n        }\n      }\n    }\n    return covered;\n  }\n\n  /**\n   * @override\n   */\n  /**\n   * @return {import(\"../../structs/LRUCache.js\").default<import(\"../../Tile.js\").default>} Source tile cache.\n   * @private\n   */\n  getSourceTileCache_() {\n    if (!this.sourceTileCache_) {\n      this.sourceTileCache_ = new LRUCache(512);\n    }\n    return this.sourceTileCache_;\n  }\n\n  /**\n   * @override\n   */\n  clearCache() {\n    super.clearCache();\n\n    const tileRepresentationCache = this.tileRepresentationCache;\n    tileRepresentationCache.forEach((tileRepresentation) =>\n      tileRepresentation.dispose(),\n    );\n    tileRepresentationCache.clear();\n    this.sourceTileCache_?.clear();\n  }\n\n  /**\n   * @override\n   */\n  afterHelperCreated() {\n    super.afterHelperCreated();\n\n    this.tileRepresentationCache.forEach((tileRepresentation) =>\n      tileRepresentation.setHelper(this.helper),\n    );\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    super.disposeInternal();\n    delete this.frameState;\n  }\n\n  /**\n   * Apply the render extent as a uniform; the render extent uniform is expressed in the same coordinate space as the geometries in the render buffers,\n   * whereas the input render extent is expressed in full world coordinates.\n   * @protected\n   * @param {import(\"../../extent.js\").Extent} renderExtent Render extent in map units (world coordinates)\n   * @param {import('../../transform.js').Transform} worldToLocalTransform Transform.\n   */\n  applyRenderExtentUniform(renderExtent, worldToLocalTransform) {\n    // minx, miny\n    this.tmpCoords_[0] = renderExtent[0];\n    this.tmpCoords_[1] = renderExtent[1];\n    applyTransform(worldToLocalTransform, this.tmpCoords_);\n\n    // maxx, maxy\n    this.tmpCoords2_[0] = renderExtent[2];\n    this.tmpCoords2_[1] = renderExtent[3];\n    applyTransform(worldToLocalTransform, this.tmpCoords2_);\n\n    this.tmpExtent_[0] = this.tmpCoords_[0];\n    this.tmpExtent_[1] = this.tmpCoords_[1];\n    this.tmpExtent_[2] = this.tmpCoords2_[0];\n    this.tmpExtent_[3] = this.tmpCoords2_[1];\n    this.helper.setUniformFloatVec4(Uniforms.RENDER_EXTENT, this.tmpExtent_);\n  }\n}\n\nexport default WebGLBaseTileLayerRenderer;\n","/**\n * @module ol/renderer/webgl/TileLayer\n */\nimport TileState from '../../TileState.js';\nimport {\n  boundingExtent,\n  containsCoordinate,\n  getIntersection,\n} from '../../extent.js';\nimport {fromUserExtent} from '../../proj.js';\nimport {toSize} from '../../size.js';\nimport {\n  apply as applyTransform,\n  reset as resetTransform,\n  translate as translateTransform,\n} from '../../transform.js';\nimport {fromTransform as mat4FromTransform} from '../../vec/mat4.js';\nimport {ELEMENT_ARRAY_BUFFER, STATIC_DRAW} from '../../webgl.js';\nimport WebGLArrayBuffer from '../../webgl/Buffer.js';\nimport {AttributeType} from '../../webgl/Helper.js';\nimport TileTexture from '../../webgl/TileTexture.js';\nimport WebGLBaseTileLayerRenderer, {\n  Uniforms as BaseUniforms,\n  getCacheKey,\n} from './TileLayerBase.js';\n\nexport const Uniforms = {\n  ...BaseUniforms,\n  TILE_TEXTURE_ARRAY: 'u_tileTextures',\n  TEXTURE_PIXEL_WIDTH: 'u_texturePixelWidth',\n  TEXTURE_PIXEL_HEIGHT: 'u_texturePixelHeight',\n  TEXTURE_RESOLUTION: 'u_textureResolution', // map units per texture pixel\n};\n\nexport const Attributes = {\n  TEXTURE_COORD: 'a_textureCoord',\n};\n\n/**\n * @type {Array<import('../../webgl/Helper.js').AttributeDescription>}\n */\nconst attributeDescriptions = [\n  {\n    name: Attributes.TEXTURE_COORD,\n    size: 2,\n    type: AttributeType.FLOAT,\n  },\n];\n\n/**\n * @typedef {Object} Options\n * @property {string} vertexShader Vertex shader source.\n * @property {string} fragmentShader Fragment shader source.\n * @property {Object<string, import(\"../../webgl/Helper.js\").UniformValue>} [uniforms] Additional uniforms\n * made available to shaders.\n * @property {Array<import(\"../../webgl/PaletteTexture.js\").default>} [paletteTextures] Palette textures.\n * @property {number} [cacheSize=512] The texture cache size.\n * @property {Array<import('./Layer.js').PostProcessesOptions>} [postProcesses] Post-processes definitions.\n */\n\n/**\n * @typedef {import(\"../../webgl/TileTexture.js\").TileType} TileTextureType\n */\n\n/**\n * @typedef {import(\"../../webgl/TileTexture.js\").default} TileTextureRepresentation\n */\n\n/**\n * @classdesc\n * WebGL renderer for tile layers.\n * @template {import(\"../../layer/WebGLTile.js\").default|import(\"../../layer/Flow.js\").default} LayerType\n * @extends {WebGLBaseTileLayerRenderer<LayerType, TileTextureType, TileTextureRepresentation>}\n * @api\n */\nclass WebGLTileLayerRenderer extends WebGLBaseTileLayerRenderer {\n  /**\n   * @param {LayerType} tileLayer Tile layer.\n   * @param {Options} options Options.\n   */\n  constructor(tileLayer, options) {\n    super(tileLayer, options);\n\n    /**\n     * @type {WebGLProgram}\n     * @private\n     */\n    this.program_;\n\n    /**\n     * @private\n     */\n    this.vertexShader_ = options.vertexShader;\n\n    /**\n     * @private\n     */\n    this.fragmentShader_ = options.fragmentShader;\n\n    /**\n     * Tiles are rendered as a quad with the following structure:\n     *\n     *  [P3]---------[P2]\n     *   |`           |\n     *   |  `     B   |\n     *   |    `       |\n     *   |      `     |\n     *   |   A    `   |\n     *   |          ` |\n     *  [P0]---------[P1]\n     *\n     * Triangle A: P0, P1, P3\n     * Triangle B: P1, P2, P3\n     *\n     * @private\n     */\n    this.indices_ = new WebGLArrayBuffer(ELEMENT_ARRAY_BUFFER, STATIC_DRAW);\n    this.indices_.fromArray([0, 1, 3, 1, 2, 3]);\n\n    /**\n     * @type {Array<import(\"../../webgl/PaletteTexture.js\").default>}\n     * @private\n     */\n    this.paletteTextures_ = options.paletteTextures || [];\n  }\n\n  /**\n   * @param {Options} options Options.\n   * @override\n   */\n  reset(options) {\n    super.reset(options);\n    if (this.helper) {\n      const gl = this.helper.getGL();\n      for (const paletteTexture of this.paletteTextures_) {\n        paletteTexture.delete(gl);\n      }\n    }\n\n    this.vertexShader_ = options.vertexShader;\n    this.fragmentShader_ = options.fragmentShader;\n    this.paletteTextures_ = options.paletteTextures || [];\n\n    if (this.helper) {\n      this.program_ = this.helper.getProgram(\n        this.fragmentShader_,\n        this.vertexShader_,\n      );\n      const gl = this.helper.getGL();\n      for (const paletteTexture of this.paletteTextures_) {\n        // upload the texture data\n        paletteTexture.getTexture(gl);\n      }\n    }\n  }\n\n  /**\n   * @override\n   */\n  afterHelperCreated() {\n    super.afterHelperCreated();\n\n    const gl = this.helper.getGL();\n    for (const paletteTexture of this.paletteTextures_) {\n      // upload the texture data\n      paletteTexture.getTexture(gl);\n    }\n\n    this.program_ = this.helper.getProgram(\n      this.fragmentShader_,\n      this.vertexShader_,\n    );\n    this.helper.flushBufferData(this.indices_);\n  }\n\n  /**\n   * @override\n   */\n  removeHelper() {\n    if (this.helper) {\n      const gl = this.helper.getGL();\n      for (const paletteTexture of this.paletteTextures_) {\n        paletteTexture.delete(gl);\n      }\n    }\n\n    super.removeHelper();\n  }\n\n  /**\n   * @override\n   */\n  createTileRepresentation(options) {\n    return new TileTexture(options);\n  }\n\n  /**\n   * @override\n   */\n  beforeTilesRender(frameState, tilesWithAlpha) {\n    super.beforeTilesRender(frameState, tilesWithAlpha);\n    this.helper.useProgram(this.program_, frameState);\n  }\n\n  /**\n   * @override\n   */\n  renderTile(\n    tileTexture,\n    tileTransform,\n    frameState,\n    renderExtent,\n    tileResolution,\n    tileSize,\n    tileOrigin,\n    tileExtent,\n    depth,\n    gutter,\n    alpha,\n  ) {\n    const gl = this.helper.getGL();\n    this.helper.bindBuffer(tileTexture.coords);\n    this.helper.bindBuffer(this.indices_);\n    this.helper.enableAttributes(attributeDescriptions);\n\n    let textureSlot = 0;\n    while (textureSlot < tileTexture.textures.length) {\n      const uniformName = `${Uniforms.TILE_TEXTURE_ARRAY}[${textureSlot}]`;\n      this.helper.bindTexture(\n        tileTexture.textures[textureSlot],\n        textureSlot,\n        uniformName,\n      );\n      ++textureSlot;\n    }\n\n    for (\n      let paletteIndex = 0;\n      paletteIndex < this.paletteTextures_.length;\n      ++paletteIndex\n    ) {\n      const paletteTexture = this.paletteTextures_[paletteIndex];\n      const texture = paletteTexture.getTexture(gl);\n      this.helper.bindTexture(texture, textureSlot, paletteTexture.name);\n      ++textureSlot;\n    }\n\n    const viewState = frameState.viewState;\n\n    const tileWidthWithGutter = tileSize[0] + 2 * gutter;\n    const tileHeightWithGutter = tileSize[1] + 2 * gutter;\n\n    const tile = tileTexture.tile;\n    const tileCoord = tile.tileCoord;\n\n    const tileCenterI = tileCoord[1];\n    const tileCenterJ = tileCoord[2];\n\n    this.helper.setUniformMatrixValue(\n      Uniforms.TILE_TRANSFORM,\n      mat4FromTransform(this.tmpMat4_, tileTransform),\n    );\n\n    this.helper.setUniformFloatValue(Uniforms.TRANSITION_ALPHA, alpha);\n    this.helper.setUniformFloatValue(Uniforms.DEPTH, depth);\n\n    let gutterExtent = renderExtent;\n    if (gutter > 0) {\n      gutterExtent = tileExtent;\n      getIntersection(gutterExtent, renderExtent, gutterExtent);\n    }\n    const textureOriginX =\n      tileOrigin[0] +\n      tileCenterI * tileSize[0] * tileResolution -\n      gutter * tileResolution;\n    const textureOriginY =\n      tileOrigin[1] -\n      tileCenterJ * tileSize[1] * tileResolution +\n      gutter * tileResolution;\n    const extentTransform = translateTransform(\n      resetTransform(this.tmpTransform_),\n      -textureOriginX,\n      -textureOriginY,\n    );\n    this.applyRenderExtentUniform(gutterExtent, extentTransform);\n\n    this.helper.setUniformFloatValue(Uniforms.RESOLUTION, viewState.resolution);\n    this.helper.setUniformFloatValue(Uniforms.ZOOM, viewState.zoom);\n\n    this.helper.setUniformFloatValue(\n      Uniforms.TEXTURE_PIXEL_WIDTH,\n      tileWidthWithGutter,\n    );\n    this.helper.setUniformFloatValue(\n      Uniforms.TEXTURE_PIXEL_HEIGHT,\n      tileHeightWithGutter,\n    );\n    this.helper.setUniformFloatValue(\n      Uniforms.TEXTURE_RESOLUTION,\n      tileResolution,\n    );\n\n    this.helper.drawElements(0, this.indices_.getSize());\n  }\n\n  /**\n   * @param {import(\"../../pixel.js\").Pixel} pixel Pixel.\n   * @return {Uint8ClampedArray|Uint8Array|Float32Array|DataView} Data at the pixel location.\n   * @override\n   */\n  getData(pixel) {\n    const gl = this.helper.getGL();\n    if (!gl) {\n      return null;\n    }\n\n    const frameState = this.frameState;\n    if (!frameState) {\n      return null;\n    }\n\n    const layer = this.getLayer();\n    const coordinate = applyTransform(\n      frameState.pixelToCoordinateTransform,\n      pixel.slice(),\n    );\n\n    const viewState = frameState.viewState;\n    const layerExtent = layer.getExtent();\n    if (layerExtent) {\n      if (\n        !containsCoordinate(\n          fromUserExtent(layerExtent, viewState.projection),\n          coordinate,\n        )\n      ) {\n        return null;\n      }\n    }\n\n    // determine last source suitable for rendering at coordinate\n    const sources = layer.getSources(\n      boundingExtent([coordinate]),\n      viewState.resolution,\n    );\n    let i, source, tileGrid;\n    for (i = sources.length - 1; i >= 0; --i) {\n      source = sources[i];\n      if (source.getState() === 'ready') {\n        tileGrid = source.getTileGridForProjection(viewState.projection);\n        if (source.getWrapX()) {\n          break;\n        }\n        const gridExtent = tileGrid.getExtent();\n        if (!gridExtent || containsCoordinate(gridExtent, coordinate)) {\n          break;\n        }\n      }\n    }\n    if (i < 0) {\n      return null;\n    }\n\n    const tileTextureCache = this.tileRepresentationCache;\n    for (\n      let z = tileGrid.getZForResolution(viewState.resolution);\n      z >= tileGrid.getMinZoom();\n      --z\n    ) {\n      const tileCoord = tileGrid.getTileCoordForCoordAndZ(coordinate, z);\n      const cacheKey = getCacheKey(source, tileCoord);\n      if (!tileTextureCache.containsKey(cacheKey)) {\n        continue;\n      }\n      const tileTexture = tileTextureCache.get(cacheKey);\n      const tile = tileTexture.tile;\n      if (tile.getState() === TileState.EMPTY) {\n        return null;\n      }\n      if (!tileTexture.loaded) {\n        continue;\n      }\n      const tileOrigin = tileGrid.getOrigin(z);\n      const tileSize = toSize(tileGrid.getTileSize(z));\n      const tileResolution = tileGrid.getResolution(z);\n\n      const col =\n        (coordinate[0] - tileOrigin[0]) / tileResolution -\n        tileCoord[1] * tileSize[0];\n\n      const row =\n        (tileOrigin[1] - coordinate[1]) / tileResolution -\n        tileCoord[2] * tileSize[1];\n\n      return tileTexture.getPixelData(col, row);\n    }\n    return null;\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    const helper = this.helper;\n    if (helper) {\n      const gl = helper.getGL();\n      for (const paletteTexture of this.paletteTextures_) {\n        paletteTexture.delete(gl);\n      }\n      this.paletteTextures_.length = 0;\n\n      gl.deleteProgram(this.program_);\n      delete this.program_;\n      helper.deleteBuffer(this.indices_);\n    }\n    super.disposeInternal();\n    delete this.indices_;\n  }\n}\n\nexport default WebGLTileLayerRenderer;\n","/**\n * @module ol/reproj\n */\nimport {createCanvasContext2D, releaseCanvas} from './dom.js';\nimport {\n  containsCoordinate,\n  createEmpty,\n  extend,\n  forEachCorner,\n  getCenter,\n  getHeight,\n  getTopLeft,\n  getWidth,\n} from './extent.js';\nimport {solveLinearSystem} from './math.js';\nimport {getPointResolution, transform} from './proj.js';\n\nlet brokenDiagonalRendering_;\n\n/**\n * @type {Array<HTMLCanvasElement|OffscreenCanvas>}\n */\nexport const canvasPool = [];\n\n/**\n * This draws a small triangle into a canvas by setting the triangle as the clip region\n * and then drawing a (too large) rectangle\n *\n * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} ctx The context in which to draw the triangle\n * @param {number} u1 The x-coordinate of the second point. The first point is 0,0.\n * @param {number} v1 The y-coordinate of the second point.\n * @param {number} u2 The x-coordinate of the third point.\n * @param {number} v2 The y-coordinate of the third point.\n */\nfunction drawTestTriangle(ctx, u1, v1, u2, v2) {\n  ctx.beginPath();\n  ctx.moveTo(0, 0);\n  ctx.lineTo(u1, v1);\n  ctx.lineTo(u2, v2);\n  ctx.closePath();\n  ctx.save();\n  ctx.clip();\n  ctx.fillRect(0, 0, Math.max(u1, u2) + 1, Math.max(v1, v2));\n  ctx.restore();\n}\n\n/**\n * Given the data from getImageData, see if the right values appear at the provided offset.\n * Returns true if either the color or transparency is off\n *\n * @param {Uint8ClampedArray} data The data returned from getImageData\n * @param {number} offset The pixel offset from the start of data.\n * @return {boolean} true if the diagonal rendering is broken\n */\nfunction verifyBrokenDiagonalRendering(data, offset) {\n  // the values ought to be close to the rgba(210, 0, 0, 0.75)\n  return (\n    Math.abs(data[offset * 4] - 210) > 2 ||\n    Math.abs(data[offset * 4 + 3] - 0.75 * 255) > 2\n  );\n}\n\n/**\n * Determines if the current browser configuration can render triangular clip regions correctly.\n * This value is cached so the function is only expensive the first time called.\n * Firefox on Windows (as of now) does not if HWA is enabled. See https://bugzilla.mozilla.org/show_bug.cgi?id=1606976\n * Chrome works, and everything seems to work on OSX and Android. This function caches the\n * result. I suppose that it is conceivably possible that a browser might flip modes while the app is\n * running, but lets hope not.\n *\n * @return {boolean} true if the Diagonal Rendering is broken.\n */\nfunction isBrokenDiagonalRendering() {\n  if (brokenDiagonalRendering_ === undefined) {\n    const ctx = createCanvasContext2D(6, 6, canvasPool);\n    ctx.globalCompositeOperation = 'lighter';\n    ctx.fillStyle = 'rgba(210, 0, 0, 0.75)';\n    drawTestTriangle(ctx, 4, 5, 4, 0);\n    drawTestTriangle(ctx, 4, 5, 0, 5);\n    const data = ctx.getImageData(0, 0, 3, 3).data;\n    brokenDiagonalRendering_ =\n      verifyBrokenDiagonalRendering(data, 0) ||\n      verifyBrokenDiagonalRendering(data, 4) ||\n      verifyBrokenDiagonalRendering(data, 8);\n    releaseCanvas(ctx);\n    canvasPool.push(ctx.canvas);\n  }\n\n  return brokenDiagonalRendering_;\n}\n\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./coordinate.js\").Coordinate} targetCenter Target center.\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceResolution(\n  sourceProj,\n  targetProj,\n  targetCenter,\n  targetResolution,\n) {\n  const sourceCenter = transform(targetCenter, targetProj, sourceProj);\n\n  // calculate the ideal resolution of the source data\n  let sourceResolution = getPointResolution(\n    targetProj,\n    targetResolution,\n    targetCenter,\n  );\n\n  const targetMetersPerUnit = targetProj.getMetersPerUnit();\n  if (targetMetersPerUnit !== undefined) {\n    sourceResolution *= targetMetersPerUnit;\n  }\n  const sourceMetersPerUnit = sourceProj.getMetersPerUnit();\n  if (sourceMetersPerUnit !== undefined) {\n    sourceResolution /= sourceMetersPerUnit;\n  }\n\n  // Based on the projection properties, the point resolution at the specified\n  // coordinates may be slightly different. We need to reverse-compensate this\n  // in order to achieve optimal results.\n\n  const sourceExtent = sourceProj.getExtent();\n  if (!sourceExtent || containsCoordinate(sourceExtent, sourceCenter)) {\n    const compensationFactor =\n      getPointResolution(sourceProj, sourceResolution, sourceCenter) /\n      sourceResolution;\n    if (isFinite(compensationFactor) && compensationFactor > 0) {\n      sourceResolution /= compensationFactor;\n    }\n  }\n\n  return sourceResolution;\n}\n\n/**\n * Calculates ideal resolution to use from the source in order to achieve\n * pixel mapping as close as possible to 1:1 during reprojection.\n * The resolution is calculated regardless of what resolutions\n * are actually available in the dataset (TileGrid, Image, ...).\n *\n * @param {import(\"./proj/Projection.js\").default} sourceProj Source projection.\n * @param {import(\"./proj/Projection.js\").default} targetProj Target projection.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent\n * @param {number} targetResolution Target resolution.\n * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.\n */\nexport function calculateSourceExtentResolution(\n  sourceProj,\n  targetProj,\n  targetExtent,\n  targetResolution,\n) {\n  const targetCenter = getCenter(targetExtent);\n  let sourceResolution = calculateSourceResolution(\n    sourceProj,\n    targetProj,\n    targetCenter,\n    targetResolution,\n  );\n\n  if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n    forEachCorner(targetExtent, function (corner) {\n      sourceResolution = calculateSourceResolution(\n        sourceProj,\n        targetProj,\n        corner,\n        targetResolution,\n      );\n      return isFinite(sourceResolution) && sourceResolution > 0;\n    });\n  }\n\n  return sourceResolution;\n}\n\n/**\n * @typedef {Object} ImageExtent\n * @property {import(\"./extent.js\").Extent} extent Extent.\n * @property {import(\"./extent.js\").Extent} [clipExtent] Clip extent.\n * @property {import('./DataTile.js').ImageLike} image Image.\n */\n\n/**\n * Renders the source data into new canvas based on the triangulation.\n *\n * @param {number} width Width of the canvas.\n * @param {number} height Height of the canvas.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} sourceResolution Source resolution.\n * @param {import(\"./extent.js\").Extent} sourceExtent Extent of the data source.\n * @param {number} targetResolution Target resolution.\n * @param {import(\"./extent.js\").Extent} targetExtent Target extent.\n * @param {import(\"./reproj/Triangulation.js\").default} triangulation Calculated triangulation.\n * @param {Array<ImageExtent>} sources Array of sources.\n * @param {number} gutter Gutter of the sources.\n * @param {boolean} [renderEdges] Render reprojection edges.\n * @param {boolean} [interpolate] Use linear interpolation when resampling.\n * @param {boolean} [drawSingle] Draw single source images directly without stitchContext.\n * @param {boolean} [clipExtent] Clip stitchContext to sourceExtent.\n * @return {HTMLCanvasElement|OffscreenCanvas} Canvas with reprojected data.\n */\nexport function render(\n  width,\n  height,\n  pixelRatio,\n  sourceResolution,\n  sourceExtent,\n  targetResolution,\n  targetExtent,\n  triangulation,\n  sources,\n  gutter,\n  renderEdges,\n  interpolate,\n  drawSingle,\n  clipExtent,\n) {\n  const context = createCanvasContext2D(\n    Math.round(pixelRatio * width),\n    Math.round(pixelRatio * height),\n    canvasPool,\n  );\n\n  if (!interpolate) {\n    context.imageSmoothingEnabled = false;\n  }\n\n  if (sources.length === 0) {\n    return context.canvas;\n  }\n\n  context.scale(pixelRatio, pixelRatio);\n\n  function pixelRound(value) {\n    return Math.round(value * pixelRatio) / pixelRatio;\n  }\n\n  context.globalCompositeOperation = 'lighter';\n\n  const sourceDataExtent = createEmpty();\n  sources.forEach(function (src, i, arr) {\n    extend(sourceDataExtent, src.extent);\n  });\n\n  let stitchContext;\n  const stitchScale = pixelRatio / sourceResolution;\n  // Round up Float32 scale values to prevent interpolation in Firefox.\n  const inverseScale = (interpolate ? 1 : 1 + Math.pow(2, -24)) / stitchScale;\n\n  if (!drawSingle || sources.length !== 1 || gutter !== 0) {\n    stitchContext = createCanvasContext2D(\n      Math.round(getWidth(sourceDataExtent) * stitchScale),\n      Math.round(getHeight(sourceDataExtent) * stitchScale),\n      canvasPool,\n    );\n\n    if (!interpolate) {\n      stitchContext.imageSmoothingEnabled = false;\n    }\n    if (sourceExtent && clipExtent) {\n      const xPos = (sourceExtent[0] - sourceDataExtent[0]) * stitchScale;\n      const yPos = -(sourceExtent[3] - sourceDataExtent[3]) * stitchScale;\n      const width = getWidth(sourceExtent) * stitchScale;\n      const height = getHeight(sourceExtent) * stitchScale;\n      stitchContext.rect(xPos, yPos, width, height);\n      stitchContext.clip();\n    }\n\n    sources.forEach(function (src, i, arr) {\n      // This test should never fail -- but it does. Need to find a fix the upstream condition\n      if (src.image.width > 0 && src.image.height > 0) {\n        if (src.clipExtent) {\n          stitchContext.save();\n          const xPos = (src.clipExtent[0] - sourceDataExtent[0]) * stitchScale;\n          const yPos = -(src.clipExtent[3] - sourceDataExtent[3]) * stitchScale;\n          const width = getWidth(src.clipExtent) * stitchScale;\n          const height = getHeight(src.clipExtent) * stitchScale;\n          stitchContext.rect(\n            interpolate ? xPos : Math.round(xPos),\n            interpolate ? yPos : Math.round(yPos),\n            interpolate ? width : Math.round(xPos + width) - Math.round(xPos),\n            interpolate ? height : Math.round(yPos + height) - Math.round(yPos),\n          );\n          stitchContext.clip();\n        }\n\n        const xPos = (src.extent[0] - sourceDataExtent[0]) * stitchScale;\n        const yPos = -(src.extent[3] - sourceDataExtent[3]) * stitchScale;\n        const srcWidth = getWidth(src.extent) * stitchScale;\n        const srcHeight = getHeight(src.extent) * stitchScale;\n        stitchContext.drawImage(\n          src.image,\n          gutter,\n          gutter,\n          src.image.width - 2 * gutter,\n          src.image.height - 2 * gutter,\n          interpolate ? xPos : Math.round(xPos),\n          interpolate ? yPos : Math.round(yPos),\n          interpolate\n            ? srcWidth\n            : Math.round(xPos + srcWidth) - Math.round(xPos),\n          interpolate\n            ? srcHeight\n            : Math.round(yPos + srcHeight) - Math.round(yPos),\n        );\n\n        if (src.clipExtent) {\n          stitchContext.restore();\n        }\n      }\n    });\n  }\n  const targetTopLeft = getTopLeft(targetExtent);\n\n  triangulation.getTriangles().forEach(function (triangle, i, arr) {\n    /* Calculate affine transform (src -> dst)\n     * Resulting matrix can be used to transform coordinate\n     * from `sourceProjection` to destination pixels.\n     *\n     * To optimize number of context calls and increase numerical stability,\n     * we also do the following operations:\n     * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)\n     * here before solving the linear system so [ui, vi] are pixel coordinates.\n     *\n     * Src points: xi, yi\n     * Dst points: ui, vi\n     * Affine coefficients: aij\n     *\n     * | x0 y0 1  0  0 0 |   |a00|   |u0|\n     * | x1 y1 1  0  0 0 |   |a01|   |u1|\n     * | x2 y2 1  0  0 0 | x |a02| = |u2|\n     * |  0  0 0 x0 y0 1 |   |a10|   |v0|\n     * |  0  0 0 x1 y1 1 |   |a11|   |v1|\n     * |  0  0 0 x2 y2 1 |   |a12|   |v2|\n     */\n    const source = triangle.source;\n    const target = triangle.target;\n    let x0 = source[0][0],\n      y0 = source[0][1];\n    let x1 = source[1][0],\n      y1 = source[1][1];\n    let x2 = source[2][0],\n      y2 = source[2][1];\n    // Make sure that everything is on pixel boundaries\n    const u0 = pixelRound((target[0][0] - targetTopLeft[0]) / targetResolution);\n    const v0 = pixelRound(\n      -(target[0][1] - targetTopLeft[1]) / targetResolution,\n    );\n    const u1 = pixelRound((target[1][0] - targetTopLeft[0]) / targetResolution);\n    const v1 = pixelRound(\n      -(target[1][1] - targetTopLeft[1]) / targetResolution,\n    );\n    const u2 = pixelRound((target[2][0] - targetTopLeft[0]) / targetResolution);\n    const v2 = pixelRound(\n      -(target[2][1] - targetTopLeft[1]) / targetResolution,\n    );\n\n    // Shift all the source points to improve numerical stability\n    // of all the subsequent calculations. The [x0, y0] is used here.\n    // This is also used to simplify the linear system.\n    const sourceNumericalShiftX = x0;\n    const sourceNumericalShiftY = y0;\n    x0 = 0;\n    y0 = 0;\n    x1 -= sourceNumericalShiftX;\n    y1 -= sourceNumericalShiftY;\n    x2 -= sourceNumericalShiftX;\n    y2 -= sourceNumericalShiftY;\n\n    const augmentedMatrix = [\n      [x1, y1, 0, 0, u1 - u0],\n      [x2, y2, 0, 0, u2 - u0],\n      [0, 0, x1, y1, v1 - v0],\n      [0, 0, x2, y2, v2 - v0],\n    ];\n    const affineCoefs = solveLinearSystem(augmentedMatrix);\n    if (!affineCoefs) {\n      return;\n    }\n\n    context.save();\n    context.beginPath();\n\n    if (isBrokenDiagonalRendering() || !interpolate) {\n      // Make sure that all lines are horizontal or vertical\n      context.moveTo(u1, v1);\n      // This is the diagonal line. Do it in 4 steps\n      const steps = 4;\n      const ud = u0 - u1;\n      const vd = v0 - v1;\n      for (let step = 0; step < steps; step++) {\n        // Go horizontally\n        context.lineTo(\n          u1 + pixelRound(((step + 1) * ud) / steps),\n          v1 + pixelRound((step * vd) / (steps - 1)),\n        );\n        // Go vertically\n        if (step != steps - 1) {\n          context.lineTo(\n            u1 + pixelRound(((step + 1) * ud) / steps),\n            v1 + pixelRound(((step + 1) * vd) / (steps - 1)),\n          );\n        }\n      }\n      // We are almost at u0r, v0r\n      context.lineTo(u2, v2);\n    } else {\n      context.moveTo(u1, v1);\n      context.lineTo(u0, v0);\n      context.lineTo(u2, v2);\n    }\n\n    context.clip();\n\n    context.transform(\n      affineCoefs[0],\n      affineCoefs[2],\n      affineCoefs[1],\n      affineCoefs[3],\n      u0,\n      v0,\n    );\n\n    context.translate(\n      sourceDataExtent[0] - sourceNumericalShiftX,\n      sourceDataExtent[3] - sourceNumericalShiftY,\n    );\n\n    let image;\n    if (stitchContext) {\n      image = stitchContext.canvas;\n      context.scale(inverseScale, -inverseScale);\n    } else {\n      const source = sources[0];\n      const extent = source.extent;\n      image = source.image;\n      context.scale(\n        getWidth(extent) / image.width,\n        -getHeight(extent) / image.height,\n      );\n    }\n\n    context.drawImage(image, 0, 0);\n    context.restore();\n  });\n\n  if (stitchContext) {\n    releaseCanvas(stitchContext);\n    canvasPool.push(stitchContext.canvas);\n  }\n\n  if (renderEdges) {\n    context.save();\n\n    context.globalCompositeOperation = 'source-over';\n    context.strokeStyle = 'black';\n    context.lineWidth = 1;\n\n    triangulation.getTriangles().forEach(function (triangle, i, arr) {\n      const target = triangle.target;\n      const u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;\n      const v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;\n      const u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;\n      const v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;\n      const u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;\n      const v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;\n\n      context.beginPath();\n      context.moveTo(u1, v1);\n      context.lineTo(u0, v0);\n      context.lineTo(u2, v2);\n      context.closePath();\n      context.stroke();\n    });\n\n    context.restore();\n  }\n  return context.canvas;\n}\n","/**\n * @module ol/reproj/Tile\n */\n\nimport Tile from '../Tile.js';\nimport TileState from '../TileState.js';\nimport {releaseCanvas} from '../dom.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {getArea, getIntersection, getWidth, wrapAndSliceX} from '../extent.js';\nimport {clamp} from '../math.js';\nimport {\n  calculateSourceExtentResolution,\n  canvasPool,\n  render as renderReprojected,\n} from '../reproj.js';\nimport Triangulation from './Triangulation.js';\nimport {ERROR_THRESHOLD} from './common.js';\n\n/**\n * @typedef {function(number, number, number, number) : (import(\"../ImageTile.js\").default)} FunctionType\n */\n\n/**\n * @typedef {Object} TileOffset\n * @property {import(\"../ImageTile.js\").default} [tile] Tile.\n * @property {function(): import(\"../ImageTile.js\").default} getTile Tile getter.\n * @property {number} offset Offset.\n */\n\n/**\n * @classdesc\n * Class encapsulating single reprojected tile.\n * See {@link module:ol/source/TileImage~TileImage}.\n *\n */\nclass ReprojTile extends Tile {\n  /**\n   * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n   * @param {import(\"../tilegrid/TileGrid.js\").default} sourceTileGrid Source tile grid.\n   * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n   * @param {import(\"../tilegrid/TileGrid.js\").default} targetTileGrid Target tile grid.\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Coordinate of the tile.\n   * @param {import(\"../tilecoord.js\").TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {number} gutter Gutter of the source tiles.\n   * @param {FunctionType} getTileFunction\n   *     Function returning source tiles (z, x, y, pixelRatio).\n   * @param {number} [errorThreshold] Acceptable reprojection error (in px).\n   * @param {boolean} [renderEdges] Render reprojection edges.\n   * @param {import(\"../Tile.js\").Options} [options] Tile options.\n   */\n  constructor(\n    sourceProj,\n    sourceTileGrid,\n    targetProj,\n    targetTileGrid,\n    tileCoord,\n    wrappedTileCoord,\n    pixelRatio,\n    gutter,\n    getTileFunction,\n    errorThreshold,\n    renderEdges,\n    options,\n  ) {\n    super(tileCoord, TileState.IDLE, options);\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderEdges_ = renderEdges !== undefined ? renderEdges : false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelRatio_ = pixelRatio;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.gutter_ = gutter;\n\n    /**\n     * @private\n     * @type {HTMLCanvasElement|OffscreenCanvas}\n     */\n    this.canvas_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../tilegrid/TileGrid.js\").default}\n     */\n    this.sourceTileGrid_ = sourceTileGrid;\n\n    /**\n     * @private\n     * @type {import(\"../tilegrid/TileGrid.js\").default}\n     */\n    this.targetTileGrid_ = targetTileGrid;\n\n    /**\n     * @private\n     * @type {import(\"../tilecoord.js\").TileCoord}\n     */\n    this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;\n\n    /**\n     * @private\n     * @type {!Array<TileOffset>}\n     */\n    this.sourceTiles_ = [];\n\n    /**\n     * @private\n     * @type {?Array<import(\"../events.js\").EventsKey>}\n     */\n    this.sourcesListenerKeys_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.sourceZ_ = 0;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.clipExtent_ = sourceProj.canWrapX()\n      ? sourceProj.getExtent()\n      : undefined;\n\n    const targetExtent = targetTileGrid.getTileCoordExtent(\n      this.wrappedTileCoord_,\n    );\n    const maxTargetExtent = this.targetTileGrid_.getExtent();\n    let maxSourceExtent = this.sourceTileGrid_.getExtent();\n\n    const limitedTargetExtent = maxTargetExtent\n      ? getIntersection(targetExtent, maxTargetExtent)\n      : targetExtent;\n\n    if (getArea(limitedTargetExtent) === 0) {\n      // Tile is completely outside range -> EMPTY\n      // TODO: is it actually correct that the source even creates the tile ?\n      this.state = TileState.EMPTY;\n      return;\n    }\n\n    const sourceProjExtent = sourceProj.getExtent();\n    if (sourceProjExtent) {\n      if (!maxSourceExtent) {\n        maxSourceExtent = sourceProjExtent;\n      } else {\n        maxSourceExtent = getIntersection(maxSourceExtent, sourceProjExtent);\n      }\n    }\n\n    const targetResolution = targetTileGrid.getResolution(\n      this.wrappedTileCoord_[0],\n    );\n\n    const sourceResolution = calculateSourceExtentResolution(\n      sourceProj,\n      targetProj,\n      limitedTargetExtent,\n      targetResolution,\n    );\n\n    if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n      // invalid sourceResolution -> EMPTY\n      // probably edges of the projections when no extent is defined\n      this.state = TileState.EMPTY;\n      return;\n    }\n\n    const errorThresholdInPixels =\n      errorThreshold !== undefined ? errorThreshold : ERROR_THRESHOLD;\n\n    /**\n     * @private\n     * @type {!import(\"./Triangulation.js\").default}\n     */\n    this.triangulation_ = new Triangulation(\n      sourceProj,\n      targetProj,\n      limitedTargetExtent,\n      maxSourceExtent,\n      sourceResolution * errorThresholdInPixels,\n      targetResolution,\n    );\n\n    if (this.triangulation_.getTriangles().length === 0) {\n      // no valid triangles -> EMPTY\n      this.state = TileState.EMPTY;\n      return;\n    }\n\n    this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);\n    let sourceExtent = this.triangulation_.calculateSourceExtent();\n\n    if (maxSourceExtent) {\n      if (sourceProj.canWrapX()) {\n        sourceExtent[1] = clamp(\n          sourceExtent[1],\n          maxSourceExtent[1],\n          maxSourceExtent[3],\n        );\n        sourceExtent[3] = clamp(\n          sourceExtent[3],\n          maxSourceExtent[1],\n          maxSourceExtent[3],\n        );\n      } else {\n        sourceExtent = getIntersection(sourceExtent, maxSourceExtent);\n      }\n    }\n\n    if (!getArea(sourceExtent)) {\n      this.state = TileState.EMPTY;\n    } else {\n      let worldWidth = 0;\n      let worldsAway = 0;\n      if (sourceProj.canWrapX()) {\n        worldWidth = getWidth(sourceProjExtent);\n        worldsAway = Math.floor(\n          (sourceExtent[0] - sourceProjExtent[0]) / worldWidth,\n        );\n      }\n\n      const sourceExtents = wrapAndSliceX(\n        sourceExtent.slice(),\n        sourceProj,\n        true,\n      );\n      sourceExtents.forEach((extent) => {\n        const sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(\n          extent,\n          this.sourceZ_,\n        );\n\n        for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {\n          for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {\n            const offset = worldsAway * worldWidth;\n            this.sourceTiles_.push({\n              getTile: () =>\n                getTileFunction(this.sourceZ_, srcX, srcY, pixelRatio),\n              offset,\n            });\n          }\n        }\n        ++worldsAway;\n      });\n\n      if (this.sourceTiles_.length === 0) {\n        this.state = TileState.EMPTY;\n      }\n    }\n  }\n\n  /**\n   * Get the HTML Canvas element for this tile.\n   * @return {HTMLCanvasElement|OffscreenCanvas} Canvas.\n   */\n  getImage() {\n    return this.canvas_;\n  }\n\n  /**\n   * @private\n   */\n  reproject_() {\n    const sources = [];\n    this.sourceTiles_.forEach((source) => {\n      const tile = source.tile;\n      if (tile && tile.getState() == TileState.LOADED) {\n        const extent = this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord);\n        extent[0] += source.offset;\n        extent[2] += source.offset;\n        const clipExtent = this.clipExtent_?.slice();\n        if (clipExtent) {\n          clipExtent[0] += source.offset;\n          clipExtent[2] += source.offset;\n        }\n        sources.push({\n          extent: extent,\n          clipExtent: clipExtent,\n          image: tile.getImage(),\n        });\n      }\n    });\n    this.sourceTiles_.length = 0;\n\n    if (sources.length === 0) {\n      this.state = TileState.ERROR;\n    } else {\n      const z = this.wrappedTileCoord_[0];\n      const size = this.targetTileGrid_.getTileSize(z);\n      const width = typeof size === 'number' ? size : size[0];\n      const height = typeof size === 'number' ? size : size[1];\n      const targetResolution = this.targetTileGrid_.getResolution(z);\n      const sourceResolution = this.sourceTileGrid_.getResolution(\n        this.sourceZ_,\n      );\n\n      const targetExtent = this.targetTileGrid_.getTileCoordExtent(\n        this.wrappedTileCoord_,\n      );\n\n      this.canvas_ = renderReprojected(\n        width,\n        height,\n        this.pixelRatio_,\n        sourceResolution,\n        this.sourceTileGrid_.getExtent(),\n        targetResolution,\n        targetExtent,\n        this.triangulation_,\n        sources,\n        this.gutter_,\n        this.renderEdges_,\n        this.interpolate,\n      );\n\n      this.state = TileState.LOADED;\n    }\n    this.changed();\n  }\n\n  /**\n   * Load not yet loaded URI.\n   * @override\n   */\n  load() {\n    for (const sourceTile of this.sourceTiles_) {\n      sourceTile.tile = sourceTile.getTile();\n    }\n    if (this.state == TileState.IDLE) {\n      this.state = TileState.LOADING;\n      this.changed();\n\n      let leftToLoad = 0;\n\n      this.sourcesListenerKeys_ = [];\n      this.sourceTiles_.forEach(({tile}) => {\n        const state = tile.getState();\n        if (state == TileState.IDLE || state == TileState.LOADING) {\n          leftToLoad++;\n\n          const sourceListenKey = listen(tile, EventType.CHANGE, (e) => {\n            const state = tile.getState();\n            if (\n              state == TileState.LOADED ||\n              state == TileState.ERROR ||\n              state == TileState.EMPTY\n            ) {\n              unlistenByKey(sourceListenKey);\n              leftToLoad--;\n              if (leftToLoad === 0) {\n                this.unlistenSources_();\n                this.reproject_();\n              }\n            }\n          });\n          this.sourcesListenerKeys_.push(sourceListenKey);\n        }\n      });\n\n      if (leftToLoad === 0) {\n        setTimeout(this.reproject_.bind(this), 0);\n      } else {\n        this.sourceTiles_.forEach(function ({tile}, i, arr) {\n          const state = tile.getState();\n          if (state == TileState.IDLE) {\n            tile.load();\n          }\n        });\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  unlistenSources_() {\n    this.sourcesListenerKeys_.forEach(unlistenByKey);\n    this.sourcesListenerKeys_ = null;\n  }\n\n  /**\n   * Remove from the cache due to expiry\n   * @override\n   */\n  release() {\n    if (this.canvas_) {\n      releaseCanvas(\n        /** @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} */ (\n          this.canvas_.getContext('2d')\n        ),\n      );\n      canvasPool.push(this.canvas_);\n      this.canvas_ = null;\n    }\n    this.sourceTiles_.length = 0;\n    super.release();\n  }\n}\n\nexport default ReprojTile;\n","/**\n * @module ol/reproj/Triangulation\n */\nimport {\n  boundingExtent,\n  createEmpty,\n  extendCoordinate,\n  getArea,\n  getBottomLeft,\n  getBottomRight,\n  getTopLeft,\n  getTopRight,\n  getWidth,\n  intersects,\n} from '../extent.js';\nimport {modulo} from '../math.js';\nimport {\n  createTransformFromCoordinateTransform,\n  getTransform,\n  transform,\n} from '../proj.js';\nimport {apply as applyMatrix} from '../transform.js';\n\n/**\n * Single triangle; consists of 3 source points and 3 target points.\n * @typedef {Object} Triangle\n * @property {Array<import(\"../coordinate.js\").Coordinate>} source Source.\n * @property {Array<import(\"../coordinate.js\").Coordinate>} target Target.\n */\n\n/**\n * Maximum number of subdivision steps during raster reprojection triangulation.\n * Prevents high memory usage and large number of proj4 calls (for certain\n * transformations and areas). At most `2*(2^this)` triangles are created for\n * each triangulated extent (tile/image).\n * @type {number}\n */\nconst MAX_SUBDIVISION = 10;\n\n/**\n * Maximum allowed size of triangle relative to world width. When transforming\n * corners of world extent between certain projections, the resulting\n * triangulation seems to have zero error and no subdivision is performed. If\n * the triangle width is more than this (relative to world width; 0-1),\n * subdivison is forced (up to `MAX_SUBDIVISION`). Default is `0.25`.\n * @type {number}\n */\nconst MAX_TRIANGLE_WIDTH = 0.25;\n\n/**\n * @classdesc\n * Class containing triangulation of the given target extent.\n * Used for determining source data and the reprojection itself.\n */\nclass Triangulation {\n  /**\n   * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n   * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n   * @param {import(\"../extent.js\").Extent} targetExtent Target extent to triangulate.\n   * @param {import(\"../extent.js\").Extent} maxSourceExtent Maximal source extent that can be used.\n   * @param {number} errorThreshold Acceptable error (in source units).\n   * @param {?number} destinationResolution The (optional) resolution of the destination.\n   * @param {import(\"../transform.js\").Transform} [sourceMatrix] Source transform matrix.\n   */\n  constructor(\n    sourceProj,\n    targetProj,\n    targetExtent,\n    maxSourceExtent,\n    errorThreshold,\n    destinationResolution,\n    sourceMatrix,\n  ) {\n    /**\n     * @type {import(\"../proj/Projection.js\").default}\n     * @private\n     */\n    this.sourceProj_ = sourceProj;\n\n    /**\n     * @type {import(\"../proj/Projection.js\").default}\n     * @private\n     */\n    this.targetProj_ = targetProj;\n\n    /** @type {!Object<string, import(\"../coordinate.js\").Coordinate>} */\n    let transformInvCache = {};\n    const transformInv = sourceMatrix\n      ? createTransformFromCoordinateTransform((input) =>\n          applyMatrix(\n            sourceMatrix,\n            transform(input, this.targetProj_, this.sourceProj_),\n          ),\n        )\n      : getTransform(this.targetProj_, this.sourceProj_);\n\n    /**\n     * @param {import(\"../coordinate.js\").Coordinate} c A coordinate.\n     * @return {import(\"../coordinate.js\").Coordinate} Transformed coordinate.\n     * @private\n     */\n    this.transformInv_ = function (c) {\n      const key = c[0] + '/' + c[1];\n      if (!transformInvCache[key]) {\n        transformInvCache[key] = transformInv(c);\n      }\n      return transformInvCache[key];\n    };\n\n    /**\n     * @type {import(\"../extent.js\").Extent}\n     * @private\n     */\n    this.maxSourceExtent_ = maxSourceExtent;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.errorThresholdSquared_ = errorThreshold * errorThreshold;\n\n    /**\n     * @type {Array<Triangle>}\n     * @private\n     */\n    this.triangles_ = [];\n\n    /**\n     * Indicates that the triangulation crosses edge of the source projection.\n     * @type {boolean}\n     * @private\n     */\n    this.wrapsXInSource_ = false;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.canWrapXInSource_ =\n      this.sourceProj_.canWrapX() &&\n      !!maxSourceExtent &&\n      !!this.sourceProj_.getExtent() &&\n      getWidth(maxSourceExtent) >= getWidth(this.sourceProj_.getExtent());\n\n    /**\n     * @type {?number}\n     * @private\n     */\n    this.sourceWorldWidth_ = this.sourceProj_.getExtent()\n      ? getWidth(this.sourceProj_.getExtent())\n      : null;\n\n    /**\n     * @type {?number}\n     * @private\n     */\n    this.targetWorldWidth_ = this.targetProj_.getExtent()\n      ? getWidth(this.targetProj_.getExtent())\n      : null;\n\n    const destinationTopLeft = getTopLeft(targetExtent);\n    const destinationTopRight = getTopRight(targetExtent);\n    const destinationBottomRight = getBottomRight(targetExtent);\n    const destinationBottomLeft = getBottomLeft(targetExtent);\n    const sourceTopLeft = this.transformInv_(destinationTopLeft);\n    const sourceTopRight = this.transformInv_(destinationTopRight);\n    const sourceBottomRight = this.transformInv_(destinationBottomRight);\n    const sourceBottomLeft = this.transformInv_(destinationBottomLeft);\n\n    /*\n     * The maxSubdivision controls how many splittings of the target area can\n     * be done. The idea here is to do a linear mapping of the target areas\n     * but the actual overall reprojection (can be) extremely non-linear. The\n     * default value of MAX_SUBDIVISION was chosen based on mapping a 256x256\n     * tile size. However this function is also called to remap canvas rendered\n     * layers which can be much larger. This calculation increases the maxSubdivision\n     * value by the right factor so that each 256x256 pixel area has\n     * MAX_SUBDIVISION divisions.\n     */\n    const maxSubdivision =\n      MAX_SUBDIVISION +\n      (destinationResolution\n        ? Math.max(\n            0,\n            Math.ceil(\n              Math.log2(\n                getArea(targetExtent) /\n                  (destinationResolution * destinationResolution * 256 * 256),\n              ),\n            ),\n          )\n        : 0);\n\n    this.addQuad_(\n      destinationTopLeft,\n      destinationTopRight,\n      destinationBottomRight,\n      destinationBottomLeft,\n      sourceTopLeft,\n      sourceTopRight,\n      sourceBottomRight,\n      sourceBottomLeft,\n      maxSubdivision,\n    );\n\n    if (this.wrapsXInSource_) {\n      let leftBound = Infinity;\n      this.triangles_.forEach(function (triangle, i, arr) {\n        leftBound = Math.min(\n          leftBound,\n          triangle.source[0][0],\n          triangle.source[1][0],\n          triangle.source[2][0],\n        );\n      });\n\n      // Shift triangles to be as close to `leftBound` as possible\n      // (if the distance is more than `worldWidth / 2` it can be closer.\n      this.triangles_.forEach((triangle) => {\n        if (\n          Math.max(\n            triangle.source[0][0],\n            triangle.source[1][0],\n            triangle.source[2][0],\n          ) -\n            leftBound >\n          this.sourceWorldWidth_ / 2\n        ) {\n          const newTriangle = [\n            [triangle.source[0][0], triangle.source[0][1]],\n            [triangle.source[1][0], triangle.source[1][1]],\n            [triangle.source[2][0], triangle.source[2][1]],\n          ];\n          if (newTriangle[0][0] - leftBound > this.sourceWorldWidth_ / 2) {\n            newTriangle[0][0] -= this.sourceWorldWidth_;\n          }\n          if (newTriangle[1][0] - leftBound > this.sourceWorldWidth_ / 2) {\n            newTriangle[1][0] -= this.sourceWorldWidth_;\n          }\n          if (newTriangle[2][0] - leftBound > this.sourceWorldWidth_ / 2) {\n            newTriangle[2][0] -= this.sourceWorldWidth_;\n          }\n\n          // Rarely (if the extent contains both the dateline and prime meridian)\n          // the shift can in turn break some triangles.\n          // Detect this here and don't shift in such cases.\n          const minX = Math.min(\n            newTriangle[0][0],\n            newTriangle[1][0],\n            newTriangle[2][0],\n          );\n          const maxX = Math.max(\n            newTriangle[0][0],\n            newTriangle[1][0],\n            newTriangle[2][0],\n          );\n          if (maxX - minX < this.sourceWorldWidth_ / 2) {\n            triangle.source = newTriangle;\n          }\n        }\n      });\n    }\n\n    transformInvCache = {};\n  }\n\n  /**\n   * Adds triangle to the triangulation.\n   * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n   * @private\n   */\n  addTriangle_(a, b, c, aSrc, bSrc, cSrc) {\n    this.triangles_.push({\n      source: [aSrc, bSrc, cSrc],\n      target: [a, b, c],\n    });\n  }\n\n  /**\n   * Adds quad (points in clock-wise order) to the triangulation\n   * (and reprojects the vertices) if valid.\n   * Performs quad subdivision if needed to increase precision.\n   *\n   * @param {import(\"../coordinate.js\").Coordinate} a The target a coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} b The target b coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} c The target c coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} d The target d coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} aSrc The source a coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} bSrc The source b coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} cSrc The source c coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} dSrc The source d coordinate.\n   * @param {number} maxSubdivision Maximal allowed subdivision of the quad.\n   * @private\n   */\n  addQuad_(a, b, c, d, aSrc, bSrc, cSrc, dSrc, maxSubdivision) {\n    const sourceQuadExtent = boundingExtent([aSrc, bSrc, cSrc, dSrc]);\n    const sourceCoverageX = this.sourceWorldWidth_\n      ? getWidth(sourceQuadExtent) / this.sourceWorldWidth_\n      : null;\n    const sourceWorldWidth = /** @type {number} */ (this.sourceWorldWidth_);\n\n    // when the quad is wrapped in the source projection\n    // it covers most of the projection extent, but not fully\n    const wrapsX =\n      this.sourceProj_.canWrapX() &&\n      sourceCoverageX > 0.5 &&\n      sourceCoverageX < 1;\n\n    let needsSubdivision = false;\n\n    if (maxSubdivision > 0) {\n      if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {\n        const targetQuadExtent = boundingExtent([a, b, c, d]);\n        const targetCoverageX =\n          getWidth(targetQuadExtent) / this.targetWorldWidth_;\n        needsSubdivision =\n          targetCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n      }\n      if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {\n        needsSubdivision =\n          sourceCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;\n      }\n    }\n\n    if (!needsSubdivision && this.maxSourceExtent_) {\n      if (\n        isFinite(sourceQuadExtent[0]) &&\n        isFinite(sourceQuadExtent[1]) &&\n        isFinite(sourceQuadExtent[2]) &&\n        isFinite(sourceQuadExtent[3])\n      ) {\n        if (!intersects(sourceQuadExtent, this.maxSourceExtent_)) {\n          // whole quad outside source projection extent -> ignore\n          return;\n        }\n      }\n    }\n\n    let isNotFinite = 0;\n\n    if (!needsSubdivision) {\n      if (\n        !isFinite(aSrc[0]) ||\n        !isFinite(aSrc[1]) ||\n        !isFinite(bSrc[0]) ||\n        !isFinite(bSrc[1]) ||\n        !isFinite(cSrc[0]) ||\n        !isFinite(cSrc[1]) ||\n        !isFinite(dSrc[0]) ||\n        !isFinite(dSrc[1])\n      ) {\n        if (maxSubdivision > 0) {\n          needsSubdivision = true;\n        } else {\n          // It might be the case that only 1 of the points is infinite. In this case\n          // we can draw a single triangle with the other three points\n          isNotFinite =\n            (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) ? 8 : 0) +\n            (!isFinite(bSrc[0]) || !isFinite(bSrc[1]) ? 4 : 0) +\n            (!isFinite(cSrc[0]) || !isFinite(cSrc[1]) ? 2 : 0) +\n            (!isFinite(dSrc[0]) || !isFinite(dSrc[1]) ? 1 : 0);\n          if (\n            isNotFinite != 1 &&\n            isNotFinite != 2 &&\n            isNotFinite != 4 &&\n            isNotFinite != 8\n          ) {\n            return;\n          }\n        }\n      }\n    }\n\n    if (maxSubdivision > 0) {\n      if (!needsSubdivision) {\n        const center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];\n        const centerSrc = this.transformInv_(center);\n\n        let dx;\n        if (wrapsX) {\n          const centerSrcEstimX =\n            (modulo(aSrc[0], sourceWorldWidth) +\n              modulo(cSrc[0], sourceWorldWidth)) /\n            2;\n          dx = centerSrcEstimX - modulo(centerSrc[0], sourceWorldWidth);\n        } else {\n          dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];\n        }\n        const dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];\n        const centerSrcErrorSquared = dx * dx + dy * dy;\n        needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;\n      }\n      if (needsSubdivision) {\n        if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {\n          // split horizontally (top & bottom)\n          const bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];\n          const bcSrc = this.transformInv_(bc);\n          const da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];\n          const daSrc = this.transformInv_(da);\n\n          this.addQuad_(\n            a,\n            b,\n            bc,\n            da,\n            aSrc,\n            bSrc,\n            bcSrc,\n            daSrc,\n            maxSubdivision - 1,\n          );\n          this.addQuad_(\n            da,\n            bc,\n            c,\n            d,\n            daSrc,\n            bcSrc,\n            cSrc,\n            dSrc,\n            maxSubdivision - 1,\n          );\n        } else {\n          // split vertically (left & right)\n          const ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];\n          const abSrc = this.transformInv_(ab);\n          const cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];\n          const cdSrc = this.transformInv_(cd);\n\n          this.addQuad_(\n            a,\n            ab,\n            cd,\n            d,\n            aSrc,\n            abSrc,\n            cdSrc,\n            dSrc,\n            maxSubdivision - 1,\n          );\n          this.addQuad_(\n            ab,\n            b,\n            c,\n            cd,\n            abSrc,\n            bSrc,\n            cSrc,\n            cdSrc,\n            maxSubdivision - 1,\n          );\n        }\n        return;\n      }\n    }\n\n    if (wrapsX) {\n      if (!this.canWrapXInSource_) {\n        return;\n      }\n      this.wrapsXInSource_ = true;\n    }\n\n    // Exactly zero or one of *Src is not finite\n    // The triangles must have the diagonal line as the first side\n    // This is to allow easy code in reproj.s to make it straight for broken\n    // browsers that can't handle diagonal clipping\n    if ((isNotFinite & 0xb) == 0) {\n      this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);\n    }\n    if ((isNotFinite & 0xe) == 0) {\n      this.addTriangle_(a, c, b, aSrc, cSrc, bSrc);\n    }\n    if (isNotFinite) {\n      // Try the other two triangles\n      if ((isNotFinite & 0xd) == 0) {\n        this.addTriangle_(b, d, a, bSrc, dSrc, aSrc);\n      }\n      if ((isNotFinite & 0x7) == 0) {\n        this.addTriangle_(b, d, c, bSrc, dSrc, cSrc);\n      }\n    }\n  }\n\n  /**\n   * Calculates extent of the `source` coordinates from all the triangles.\n   *\n   * @return {import(\"../extent.js\").Extent} Calculated extent.\n   */\n  calculateSourceExtent() {\n    const extent = createEmpty();\n\n    this.triangles_.forEach(function (triangle, i, arr) {\n      const src = triangle.source;\n      extendCoordinate(extent, src[0]);\n      extendCoordinate(extent, src[1]);\n      extendCoordinate(extent, src[2]);\n    });\n\n    return extent;\n  }\n\n  /**\n   * @return {Array<Triangle>} Array of the calculated triangles.\n   */\n  getTriangles() {\n    return this.triangles_;\n  }\n}\n\nexport default Triangulation;\n","/**\n * @module ol/reproj/common\n */\n\n/**\n * Default maximum allowed threshold  (in pixels) for reprojection\n * triangulation.\n * @type {number}\n */\nexport const ERROR_THRESHOLD = 0.5;\n","/**\n * @module ol/rotationconstraint\n */\nimport {toRadians} from './math.js';\n\n/**\n * @typedef {function((number|undefined), boolean=): (number|undefined)} Type\n */\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function disable(rotation) {\n  if (rotation !== undefined) {\n    return 0;\n  }\n  return undefined;\n}\n\n/**\n * @param {number|undefined} rotation Rotation.\n * @return {number|undefined} Rotation.\n */\nexport function none(rotation) {\n  if (rotation !== undefined) {\n    return rotation;\n  }\n  return undefined;\n}\n\n/**\n * @param {number} n N.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToN(n) {\n  const theta = (2 * Math.PI) / n;\n  return (\n    /**\n     * @param {number|undefined} rotation Rotation.\n     * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n     * @return {number|undefined} Rotation.\n     */\n    function (rotation, isMoving) {\n      if (isMoving) {\n        return rotation;\n      }\n\n      if (rotation !== undefined) {\n        rotation = Math.floor(rotation / theta + 0.5) * theta;\n        return rotation;\n      }\n      return undefined;\n    }\n  );\n}\n\n/**\n * @param {number} [tolerance] Tolerance.\n * @return {Type} Rotation constraint.\n */\nexport function createSnapToZero(tolerance) {\n  const t = tolerance === undefined ? toRadians(5) : tolerance;\n  return (\n    /**\n     * @param {number|undefined} rotation Rotation.\n     * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n     * @return {number|undefined} Rotation.\n     */\n    function (rotation, isMoving) {\n      if (isMoving || rotation === undefined) {\n        return rotation;\n      }\n\n      if (Math.abs(rotation) <= t) {\n        return 0;\n      }\n      return rotation;\n    }\n  );\n}\n","/**\n * @module ol/size\n */\n\n/**\n * An array of numbers representing a size: `[width, height]`.\n * @typedef {Array<number>} Size\n * @api\n */\n\n/**\n * Returns a buffered size.\n * @param {Size} size Size.\n * @param {number} num The amount by which to buffer.\n * @param {Size} [dest] Optional reusable size array.\n * @return {Size} The buffered size.\n */\nexport function buffer(size, num, dest) {\n  if (dest === undefined) {\n    dest = [0, 0];\n  }\n  dest[0] = size[0] + 2 * num;\n  dest[1] = size[1] + 2 * num;\n  return dest;\n}\n\n/**\n * Determines if a size has a positive area.\n * @param {Size} size The size to test.\n * @return {boolean} The size has a positive area.\n */\nexport function hasArea(size) {\n  return size[0] > 0 && size[1] > 0;\n}\n\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n * @param {Size} size Size.\n * @param {number} ratio Ratio.\n * @param {Size} [dest] Optional reusable size array.\n * @return {Size} The scaled size.\n */\nexport function scale(size, ratio, dest) {\n  if (dest === undefined) {\n    dest = [0, 0];\n  }\n  dest[0] = (size[0] * ratio + 0.5) | 0;\n  dest[1] = (size[1] * ratio + 0.5) | 0;\n  return dest;\n}\n\n/**\n * Returns an `Size` array for the passed in number (meaning: square) or\n * `Size` array.\n * (meaning: non-square),\n * @param {number|Size} size Width and height.\n * @param {Size} [dest] Optional reusable size array.\n * @return {Size} Size.\n * @api\n */\nexport function toSize(size, dest) {\n  if (Array.isArray(size)) {\n    return size;\n  }\n  if (dest === undefined) {\n    dest = [size, size];\n  } else {\n    dest[0] = size;\n    dest[1] = size;\n  }\n  return dest;\n}\n","/**\n * @module ol/source/BingMaps\n */\n\nimport {applyTransform, intersects} from '../extent.js';\nimport {get as getProjection, getTransformFromProjections} from '../proj.js';\nimport {createOrUpdate} from '../tilecoord.js';\nimport {createXYZ, extentFromProjection} from '../tilegrid.js';\nimport {createFromTileUrlFunctions} from '../tileurlfunction.js';\nimport TileImage from './TileImage.js';\n\n/**\n * @param {import('../tilecoord.js').TileCoord} tileCoord Tile coord.\n * @return {string} Quad key.\n */\nexport function quadKey(tileCoord) {\n  const z = tileCoord[0];\n  const digits = new Array(z);\n  let mask = 1 << (z - 1);\n  let i, charCode;\n  for (i = 0; i < z; ++i) {\n    // 48 is charCode for 0 - '0'.charCodeAt(0)\n    charCode = 48;\n    if (tileCoord[1] & mask) {\n      charCode += 1;\n    }\n    if (tileCoord[2] & mask) {\n      charCode += 2;\n    }\n    digits[i] = String.fromCharCode(charCode);\n    mask >>= 1;\n  }\n  return digits.join('');\n}\n\n/**\n * The attribution containing a link to the Microsoft® Bing™ Maps Platform APIs’\n * Terms Of Use.\n * @const\n * @type {string}\n */\nconst TOS_ATTRIBUTION =\n  '<a class=\"ol-attribution-bing-tos\" ' +\n  'href=\"https://www.microsoft.com/maps/product/terms.html\" target=\"_blank\">' +\n  'Terms of Use</a>';\n\n/**\n * @typedef {Object} Options\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {boolean} [hidpi=false] If `true` hidpi tiles will be requested.\n * @property {string} [culture='en-us'] Culture code.\n * @property {string} key Bing Maps API key. Get yours at https://www.bingmapsportal.com/.\n * @property {string} imagerySet Type of imagery.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {number} [maxZoom=21] Max zoom. Default is what's advertized by the BingMaps service.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n * @property {boolean} [placeholderTiles] Whether to show BingMaps placeholder tiles when zoomed past the maximum level provided in an area. When `false`, requests beyond\n * the maximum zoom level will return no tile. When `true`, the placeholder tile will be returned. When not set, the default behaviour of the imagery set takes place,\n * which is unique for each imagery set in BingMaps.\n * @property {string} [url='https://dev.virtualearth.net/REST/v1/Imagery/Metadata/'] The Bing Map Metadata API URL.\n */\n\n/**\n * @typedef {Object} BingMapsImageryMetadataResponse\n * @property {number} statusCode The response status code\n * @property {string} statusDescription The response status description\n * @property {string} authenticationResultCode The authentication result code\n * @property {Array<ResourceSet>} resourceSets The array of resource sets\n */\n\n/**\n * @typedef {Object} ResourceSet\n * @property {Array<Resource>} resources Resources.\n */\n\n/**\n * @typedef {Object} Resource\n * @property {number} imageHeight The image height\n * @property {number} imageWidth The image width\n * @property {number} zoomMin The minimum zoom level\n * @property {number} zoomMax The maximum zoom level\n * @property {string} imageUrl The image URL\n * @property {Array<string>} imageUrlSubdomains The image URL subdomains for rotation\n * @property {Array<ImageryProvider>} [imageryProviders] The array of ImageryProviders\n */\n\n/**\n * @typedef {Object} ImageryProvider\n * @property {Array<CoverageArea>} coverageAreas The coverage areas\n * @property {string} [attribution] The attribution\n */\n\n/**\n * @typedef {Object} CoverageArea\n * @property {number} zoomMin The minimum zoom\n * @property {number} zoomMax The maximum zoom\n * @property {Array<number>} bbox The coverage bounding box\n */\n\n/**\n * @classdesc\n * Layer source for Bing Maps tile data.\n * @deprecated Bing Maps for Enterprise is being retired on June 30th, 2028. Use\n * `ol/source/ImageTile` with the Azure Maps tile API instead. See the azure-maps\n * example for guidance.\n * @api\n */\nclass BingMaps extends TileImage {\n  /**\n   * @param {Options} options Bing Maps options.\n   */\n  constructor(options) {\n    const hidpi = options.hidpi !== undefined ? options.hidpi : false;\n\n    super({\n      cacheSize: options.cacheSize,\n      crossOrigin: 'anonymous',\n      interpolate: options.interpolate,\n      projection: getProjection('EPSG:3857'),\n      reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n      state: 'loading',\n      tileLoadFunction: options.tileLoadFunction,\n      tilePixelRatio: hidpi ? 2 : 1,\n      wrapX: options.wrapX !== undefined ? options.wrapX : true,\n      transition: options.transition,\n      zDirection: options.zDirection,\n    });\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.hidpi_ = hidpi;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.culture_ = options.culture !== undefined ? options.culture : 'en-us';\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxZoom_ = options.maxZoom !== undefined ? options.maxZoom : -1;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.apiKey_ = options.key;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.imagerySet_ = options.imagerySet;\n\n    /**\n     * @private\n     * @type {boolean|undefined}\n     */\n    this.placeholderTiles_ = options.placeholderTiles;\n\n    const url =\n      (options.url ||\n        'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/') +\n      this.imagerySet_ +\n      '?uriScheme=https&include=ImageryProviders&key=' +\n      this.apiKey_ +\n      '&c=' +\n      this.culture_;\n\n    fetch(url)\n      .then((response) => response.json())\n      .then((json) => this.handleImageryMetadataResponse(json));\n  }\n\n  /**\n   * Get the api key used for this source.\n   *\n   * @return {string} The api key.\n   * @api\n   */\n  getApiKey() {\n    return this.apiKey_;\n  }\n\n  /**\n   * Get the imagery set associated with this source.\n   *\n   * @return {string} The imagery set.\n   * @api\n   */\n  getImagerySet() {\n    return this.imagerySet_;\n  }\n\n  /**\n   * @param {BingMapsImageryMetadataResponse} response Response.\n   */\n  handleImageryMetadataResponse(response) {\n    if (\n      response.statusCode != 200 ||\n      response.statusDescription != 'OK' ||\n      response.authenticationResultCode != 'ValidCredentials' ||\n      response.resourceSets.length != 1 ||\n      response.resourceSets[0].resources.length != 1\n    ) {\n      this.setState('error');\n      return;\n    }\n\n    const resource = response.resourceSets[0].resources[0];\n    const maxZoom = this.maxZoom_ == -1 ? resource.zoomMax : this.maxZoom_;\n\n    const sourceProjection = this.getProjection();\n    const extent = extentFromProjection(sourceProjection);\n    const scale = this.hidpi_ ? 2 : 1;\n    const tileSize =\n      resource.imageWidth == resource.imageHeight\n        ? resource.imageWidth / scale\n        : [resource.imageWidth / scale, resource.imageHeight / scale];\n\n    const tileGrid = createXYZ({\n      extent: extent,\n      minZoom: resource.zoomMin,\n      maxZoom: maxZoom,\n      tileSize: tileSize,\n    });\n    this.tileGrid = tileGrid;\n\n    const culture = this.culture_;\n    const hidpi = this.hidpi_;\n    const placeholderTiles = this.placeholderTiles_;\n    this.tileUrlFunction = createFromTileUrlFunctions(\n      resource.imageUrlSubdomains.map(function (subdomain) {\n        /** @type {import('../tilecoord.js').TileCoord} */\n        const quadKeyTileCoord = [0, 0, 0];\n        const imageUrl = resource.imageUrl\n          .replace('{subdomain}', subdomain)\n          .replace('{culture}', culture);\n        return (\n          /**\n           * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n           * @param {number} pixelRatio Pixel ratio.\n           * @param {import(\"../proj/Projection.js\").default} projection Projection.\n           * @return {string|undefined} Tile URL.\n           */\n          function (tileCoord, pixelRatio, projection) {\n            if (!tileCoord) {\n              return undefined;\n            }\n            createOrUpdate(\n              tileCoord[0],\n              tileCoord[1],\n              tileCoord[2],\n              quadKeyTileCoord,\n            );\n            const url = new URL(\n              imageUrl.replace('{quadkey}', quadKey(quadKeyTileCoord)),\n            );\n            const params = url.searchParams;\n            if (hidpi) {\n              params.set('dpi', 'd1');\n              params.set('device', 'mobile');\n            }\n            if (placeholderTiles === true) {\n              params.delete('n');\n            } else if (placeholderTiles === false) {\n              params.set('n', 'z');\n            }\n            return url.toString();\n          }\n        );\n      }),\n    );\n\n    if (resource.imageryProviders) {\n      const transform = getTransformFromProjections(\n        getProjection('EPSG:4326'),\n        this.getProjection(),\n      );\n\n      this.setAttributions((frameState) => {\n        const attributions = [];\n        const viewState = frameState.viewState;\n        const tileGrid = this.getTileGrid();\n        const z = tileGrid.getZForResolution(\n          viewState.resolution,\n          this.zDirection,\n        );\n        const tileCoord = tileGrid.getTileCoordForCoordAndZ(\n          viewState.center,\n          z,\n        );\n        const zoom = tileCoord[0];\n        resource.imageryProviders.map(function (imageryProvider) {\n          let intersecting = false;\n          const coverageAreas = imageryProvider.coverageAreas;\n          for (let i = 0, ii = coverageAreas.length; i < ii; ++i) {\n            const coverageArea = coverageAreas[i];\n            if (zoom >= coverageArea.zoomMin && zoom <= coverageArea.zoomMax) {\n              const bbox = coverageArea.bbox;\n              const epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]];\n              const extent = applyTransform(epsg4326Extent, transform);\n              if (intersects(extent, frameState.extent)) {\n                intersecting = true;\n                break;\n              }\n            }\n          }\n          if (intersecting) {\n            attributions.push(imageryProvider.attribution);\n          }\n        });\n\n        attributions.push(TOS_ATTRIBUTION);\n        return attributions;\n      });\n    }\n\n    this.setState('ready');\n  }\n}\n\nexport default BingMaps;\n","/**\n * @module ol/source/Cluster\n */\n\nimport Feature from '../Feature.js';\nimport {assert} from '../asserts.js';\nimport {add as addCoordinate, scale as scaleCoordinate} from '../coordinate.js';\nimport EventType from '../events/EventType.js';\nimport {\n  buffer,\n  createEmpty,\n  createOrUpdateFromCoordinate,\n  getCenter,\n} from '../extent.js';\nimport Point from '../geom/Point.js';\nimport {getUid} from '../util.js';\nimport VectorSource from './Vector.js';\n\n/**\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").FeatureLike]\n * @typedef {(feature: FeatureType) => (Point|null)} GeometryFunction\n */\n\n/**\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {number} [distance=20] Distance in pixels within which features will\n * be clustered together.\n * @property {number} [minDistance=0] Minimum distance in pixels between clusters.\n * Will be capped at the configured distance.\n * By default no minimum distance is guaranteed. This config can be used to avoid\n * overlapping icons. As a tradoff, the cluster feature's position will no longer be\n * the center of all its features.\n * @property {GeometryFunction<FeatureType>} [geometryFunction]\n * Function that takes a {@link module:ol/Feature~Feature} as argument and returns a\n * {@link module:ol/geom/Point~Point} as cluster calculation point for the feature. When a\n * feature should not be considered for clustering, the function should return\n * `null`. The default, which works when the underlying source contains point\n * features only, is\n * ```js\n * function(feature) {\n *   return feature.getGeometry();\n * }\n * ```\n * See {@link module:ol/geom/Polygon~Polygon#getInteriorPoint} for a way to get a cluster\n * calculation point for polygons.\n * @property {function(Point, Array<FeatureType>):Feature} [createCluster]\n * Function that takes the cluster's center {@link module:ol/geom/Point~Point} and an array\n * of {@link module:ol/Feature~Feature} included in this cluster. Must return a\n * {@link module:ol/Feature~Feature} that will be used to render. Default implementation is:\n * ```js\n * function(point, features) {\n *   return new Feature({\n *     geometry: point,\n *     features: features\n *   });\n * }\n * ```\n * @property {VectorSource<FeatureType>} [source=null] Source.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n */\n\n/**\n * @classdesc\n * Layer source to cluster vector data. Works out of the box with point\n * geometries. For other geometry types, or if not all geometries should be\n * considered for clustering, a custom `geometryFunction` can be defined.\n *\n * If the instance is disposed without also disposing the underlying\n * source `setSource(null)` has to be called to remove the listener reference\n * from the wrapped source.\n * @api\n * @template {import('../Feature.js').FeatureLike} [FeatureType=import('../Feature.js').default]\n * @extends {VectorSource<Feature<import(\"../geom/Geometry.js\").default>>}\n */\nclass Cluster extends VectorSource {\n  /**\n   * @param {Options<FeatureType>} [options] Cluster options.\n   */\n  constructor(options) {\n    options = options || {};\n    super({\n      attributions: options.attributions,\n      wrapX: options.wrapX,\n    });\n\n    /**\n     * @type {number|undefined}\n     * @protected\n     */\n    this.resolution = undefined;\n\n    /**\n     * @type {number}\n     * @protected\n     */\n    this.distance = options.distance !== undefined ? options.distance : 20;\n\n    /**\n     * @type {number}\n     * @protected\n     */\n    this.minDistance = options.minDistance || 0;\n\n    /**\n     * @type {number}\n     * @protected\n     */\n    this.interpolationRatio = 0;\n\n    /**\n     * @type {Array<Feature>}\n     * @protected\n     */\n    this.features = [];\n\n    /**\n     * @type {GeometryFunction<import(\"../Feature.js\").FeatureLike>}\n     * @protected\n     */\n    this.geometryFunction =\n      options.geometryFunction ||\n      function (feature) {\n        const geometry = /** @type {Point} */ (feature.getGeometry());\n        assert(\n          !geometry || geometry.getType() === 'Point',\n          'The default `geometryFunction` can only handle `Point` or null geometries',\n        );\n        return geometry;\n      };\n\n    /**\n     * @type {function(Point, Array<FeatureType>):Feature}\n     * @private\n     */\n    this.createCustomCluster_ = options.createCluster;\n\n    /**\n     * @type {VectorSource<FeatureType>|null}\n     * @protected\n     */\n    this.source = null;\n\n    /**\n     * @private\n     */\n    this.boundRefresh_ = this.refresh.bind(this);\n\n    this.updateDistance(this.distance, this.minDistance);\n    this.setSource(options.source || null);\n  }\n\n  /**\n   * Remove all features from the source.\n   * @param {boolean} [fast] Skip dispatching of {@link module:ol/source/VectorEventType~VectorEventType#removefeature} events.\n   * @api\n   * @override\n   */\n  clear(fast) {\n    this.features.length = 0;\n    super.clear(fast);\n  }\n\n  /**\n   * Get the distance in pixels between clusters.\n   * @return {number} Distance.\n   * @api\n   */\n  getDistance() {\n    return this.distance;\n  }\n\n  /**\n   * Get a reference to the wrapped source.\n   * @return {VectorSource<FeatureType>|null} Source.\n   * @api\n   */\n  getSource() {\n    return this.source;\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @override\n   */\n  loadFeatures(extent, resolution, projection) {\n    this.source?.loadFeatures(extent, resolution, projection);\n    if (resolution !== this.resolution) {\n      this.resolution = resolution;\n      this.refresh();\n    }\n  }\n\n  /**\n   * Set the distance within which features will be clusterd together.\n   * @param {number} distance The distance in pixels.\n   * @api\n   */\n  setDistance(distance) {\n    this.updateDistance(distance, this.minDistance);\n  }\n\n  /**\n   * Set the minimum distance between clusters. Will be capped at the\n   * configured distance.\n   * @param {number} minDistance The minimum distance in pixels.\n   * @api\n   */\n  setMinDistance(minDistance) {\n    this.updateDistance(this.distance, minDistance);\n  }\n\n  /**\n   * The configured minimum distance between clusters.\n   * @return {number} The minimum distance in pixels.\n   * @api\n   */\n  getMinDistance() {\n    return this.minDistance;\n  }\n\n  /**\n   * Replace the wrapped source.\n   * @param {VectorSource<FeatureType>|null} source The new source for this instance.\n   * @api\n   */\n  setSource(source) {\n    if (this.source) {\n      this.source.removeEventListener(EventType.CHANGE, this.boundRefresh_);\n    }\n    this.source = source;\n    if (source) {\n      source.addEventListener(EventType.CHANGE, this.boundRefresh_);\n    }\n    this.refresh();\n  }\n\n  /**\n   * Handle the source changing.\n   * @override\n   */\n  refresh() {\n    this.clear();\n    this.cluster();\n    this.addFeatures(this.features);\n  }\n\n  /**\n   * Update the distances and refresh the source if necessary.\n   * @param {number} distance The new distance.\n   * @param {number} minDistance The new minimum distance.\n   */\n  updateDistance(distance, minDistance) {\n    const ratio =\n      distance === 0 ? 0 : Math.min(minDistance, distance) / distance;\n    const changed =\n      distance !== this.distance || this.interpolationRatio !== ratio;\n    this.distance = distance;\n    this.minDistance = minDistance;\n    this.interpolationRatio = ratio;\n    if (changed) {\n      this.refresh();\n    }\n  }\n\n  /**\n   * @protected\n   */\n  cluster() {\n    if (this.resolution === undefined || !this.source) {\n      return;\n    }\n    const extent = createEmpty();\n    const mapDistance = this.distance * this.resolution;\n    const features = this.source.getFeatures();\n\n    /** @type {Object<string, true>} */\n    const clustered = {};\n\n    for (let i = 0, ii = features.length; i < ii; i++) {\n      const feature = features[i];\n      if (!(getUid(feature) in clustered)) {\n        const geometry = this.geometryFunction(feature);\n        if (geometry) {\n          const coordinates = geometry.getCoordinates();\n          createOrUpdateFromCoordinate(coordinates, extent);\n          buffer(extent, mapDistance, extent);\n\n          const neighbors = this.source\n            .getFeaturesInExtent(extent)\n            .filter(function (neighbor) {\n              const uid = getUid(neighbor);\n              if (uid in clustered) {\n                return false;\n              }\n              clustered[uid] = true;\n              return true;\n            });\n          this.features.push(this.createCluster(neighbors, extent));\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Array<FeatureType>} features Features\n   * @param {import(\"../extent.js\").Extent} extent The searched extent for these features.\n   * @return {Feature} The cluster feature.\n   * @protected\n   */\n  createCluster(features, extent) {\n    const centroid = [0, 0];\n    for (let i = features.length - 1; i >= 0; --i) {\n      const geometry = this.geometryFunction(features[i]);\n      if (geometry) {\n        addCoordinate(centroid, geometry.getCoordinates());\n      } else {\n        features.splice(i, 1);\n      }\n    }\n    scaleCoordinate(centroid, 1 / features.length);\n    const searchCenter = getCenter(extent);\n    const ratio = this.interpolationRatio;\n    const geometry = new Point([\n      centroid[0] * (1 - ratio) + searchCenter[0] * ratio,\n      centroid[1] * (1 - ratio) + searchCenter[1] * ratio,\n    ]);\n    if (this.createCustomCluster_) {\n      return this.createCustomCluster_(geometry, features);\n    }\n    return new Feature({\n      geometry,\n      features,\n    });\n  }\n}\n\nexport default Cluster;\n","/**\n * @module ol/reproj/glreproj\n */\nimport {\n  createEmpty,\n  extend,\n  getHeight,\n  getTopLeft,\n  getWidth,\n} from '../extent.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../has.js';\nimport * as mat4 from '../vec/mat4.js';\nimport {Canvas as WebGLCanvas, createProgram} from '../webgl/Canvas.js';\n\nconst EDGE_VERTEX_SHADER = `\n  attribute vec4 a_position;\n\n  uniform mat4 u_matrix;\n\n  void main() {\n     gl_Position = u_matrix * a_position;\n  }\n`;\nconst EDGE_FRAGMENT_SHADER = `\n  precision mediump float;\n\n  uniform vec4 u_val;\n  void main() {\n     gl_FragColor = u_val;\n  }\n`;\n\nconst TRIANGLE_VERTEX_SHADER = `\n  attribute vec4 a_position;\n  attribute vec2 a_texcoord;\n\n  varying vec2 v_texcoord;\n\n  uniform mat4 u_matrix;\n\n  void main() {\n     gl_Position = u_matrix * a_position;\n     v_texcoord = a_texcoord;\n  }\n`;\nconst TRIANGLE_FRAGMENT_SHADER = `\n  precision mediump float;\n\n  varying vec2 v_texcoord;\n\n  uniform sampler2D u_texture;\n\n  void main() {\n    if (v_texcoord.x < 0.0 || v_texcoord.x > 1.0 || v_texcoord.y < 0.0 || v_texcoord.y > 1.0) {\n      discard;\n    }\n    gl_FragColor = texture2D(u_texture, v_texcoord);\n  }\n`;\n\n/**\n * Create an html canvas element and returns its webgl context.\n * @param {number} [width] Canvas width.\n * @param {number} [height] Canvas height.\n * @param {Array<HTMLCanvasElement | OffscreenCanvas>} [canvasPool] Canvas pool to take existing canvas from.\n * @param {WebGLContextAttributes} [settings] CanvasRenderingContext2DSettings\n * @return {WebGLRenderingContext} The context.\n */\nexport function createCanvasContextWebGL(width, height, canvasPool, settings) {\n  /** @type {HTMLCanvasElement|OffscreenCanvas} */\n  let canvas;\n  if (canvasPool && canvasPool.length) {\n    canvas = /** @type {HTMLCanvasElement} */ (canvasPool.shift());\n  } else if (WORKER_OFFSCREEN_CANVAS) {\n    canvas = new OffscreenCanvas(width || 300, height || 300);\n  } else {\n    canvas = document.createElement('canvas');\n  }\n  if (width) {\n    canvas.width = width;\n  }\n  if (height) {\n    canvas.height = height;\n  }\n  //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n  return /** @type {WebGLRenderingContext} */ (\n    canvas.getContext('webgl', settings)\n  );\n}\n\n/**\n * Releases canvas memory to avoid exceeding memory limits in Safari.\n * See https://pqina.nl/blog/total-canvas-memory-use-exceeds-the-maximum-limit/\n * @param {WebGLRenderingContext} gl Context.\n */\nexport function releaseGLCanvas(gl) {\n  const canvas = gl.canvas;\n  canvas.width = 1;\n  canvas.height = 1;\n  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);\n}\n\n/**\n * @type {Array<HTMLCanvasElement | OffscreenCanvas>}\n */\nexport const canvasGLPool = [];\n\n/**\n * @typedef {Object} ImageExtent\n * @property {import(\"../extent.js\").Extent} extent Extent.\n * @property {import(\"../extent.js\").Extent} [clipExtent] Clip extent.\n * @property {WebGLTexture} texture Texture.\n * @property {number} width Width of texture.\n * @property {number} height Height of texture.\n */\n\n/**\n * Renders the source data into new canvas based on the triangulation.\n *\n * @param {WebGLRenderingContext} gl the context to render in.\n * @param {number} width_ Width of the canvas.\n * @param {number} height_ Height of the canvas.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} sourceResolution Source resolution.\n * @param {number} targetResolution Target resolution.\n * @param {import(\"../extent.js\").Extent} targetExtent Target extent (tile).\n * @param {import(\"../reproj/Triangulation.js\").default} triangulation Calculated triangulation.\n * @param {Array<ImageExtent>} sources Array of sources.\n * @param {number} gutter Gutter of the sources.\n * @param {number} dataType What kind of data is the textures, must be gl.FLOAT or gl.UNSIGNED_BYTE\n * TODO: Allow setting renderEdges value in the data as this is done in \"data-space\".\n * @param {boolean | Array<number>} [renderEdges] Render reprojection edges.\n * @param {boolean} [interpolate] Use linear interpolation when resampling.\n * @param {boolean} [drawSingle] Draw single source images directly without stitchTexture.\n * @return {{framebuffer: WebGLFramebuffer, width: number, height: number, texture: WebGLTexture}} Canvas with reprojected data.\n */\nexport function render(\n  gl,\n  width_,\n  height_,\n  pixelRatio,\n  sourceResolution,\n  targetResolution,\n  targetExtent,\n  triangulation,\n  sources,\n  gutter,\n  dataType,\n  renderEdges,\n  interpolate,\n  drawSingle,\n) {\n  const width = Math.round(pixelRatio * width_);\n  const height = Math.round(pixelRatio * height_);\n  gl.canvas.width = width;\n  gl.canvas.height = height;\n\n  /** @type {WebGLFramebuffer | null} */\n  let resultFrameBuffer;\n  /** @type {WebGLTexture | null} */\n  let resultTexture;\n  {\n    resultTexture = gl.createTexture();\n    gl.bindTexture(gl.TEXTURE_2D, resultTexture);\n\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    if (interpolate) {\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n    } else {\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n    }\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      width,\n      height,\n      0,\n      gl.RGBA,\n      dataType,\n      null,\n    );\n\n    resultFrameBuffer = gl.createFramebuffer();\n    gl.bindFramebuffer(gl.FRAMEBUFFER, resultFrameBuffer);\n    gl.framebufferTexture2D(\n      gl.FRAMEBUFFER,\n      gl.COLOR_ATTACHMENT0,\n      gl.TEXTURE_2D,\n      resultTexture,\n      0,\n    );\n  }\n\n  if (resultFrameBuffer === null) {\n    throw new Error('Could not create framebuffer');\n  }\n  if (resultTexture === null) {\n    throw new Error('Could not create texture');\n  }\n\n  if (sources.length === 0) {\n    return {\n      width,\n      height,\n      framebuffer: resultFrameBuffer,\n      texture: resultTexture,\n    };\n  }\n\n  const sourceDataExtent = createEmpty();\n  sources.forEach(function (src, i, arr) {\n    extend(sourceDataExtent, src.extent);\n  });\n\n  /** @type {WebGLTexture | null} */\n  let stitchTexture;\n  /** @type {number} */\n  let stitchWidth;\n  /** @type {number} */\n  let stitchHeight;\n  const stitchScale = 1 / sourceResolution;\n\n  if (!drawSingle || sources.length !== 1 || gutter !== 0) {\n    stitchTexture = gl.createTexture();\n    if (resultTexture === null) {\n      throw new Error('Could not create texture');\n    }\n    stitchWidth = Math.round(getWidth(sourceDataExtent) * stitchScale);\n    stitchHeight = Math.round(getHeight(sourceDataExtent) * stitchScale);\n\n    // Make sure we do not exceed the max texture size by lowering the resolution for this image.\n    // https://github.com/openlayers/openlayers/pull/15860#issuecomment-2254123580\n    const maxTexSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n    const largeSide = Math.max(stitchWidth, stitchHeight);\n    const scaleFactor = largeSide > maxTexSize ? maxTexSize / largeSide : 1;\n    const stitchWidthFixed = Math.round(stitchWidth * scaleFactor);\n    const stitchHeightFixed = Math.round(stitchHeight * scaleFactor);\n\n    gl.bindTexture(gl.TEXTURE_2D, stitchTexture);\n\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    if (interpolate) {\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n    } else {\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n    }\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      stitchWidthFixed,\n      stitchHeightFixed,\n      0,\n      gl.RGBA,\n      dataType,\n      null,\n    );\n\n    const fb = gl.createFramebuffer();\n    gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n    gl.framebufferTexture2D(\n      gl.FRAMEBUFFER,\n      gl.COLOR_ATTACHMENT0,\n      gl.TEXTURE_2D,\n      stitchTexture,\n      0,\n    );\n    const webGLCanvas = new WebGLCanvas(gl);\n\n    sources.forEach(function (src, i, arr) {\n      const xPos =\n        (src.extent[0] - sourceDataExtent[0]) * stitchScale * scaleFactor;\n      const yPos =\n        -(src.extent[3] - sourceDataExtent[3]) * stitchScale * scaleFactor;\n      const srcWidth = getWidth(src.extent) * stitchScale * scaleFactor;\n      const srcHeight = getHeight(src.extent) * stitchScale * scaleFactor;\n      gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n      gl.viewport(0, 0, stitchWidthFixed, stitchHeightFixed);\n\n      if (src.clipExtent) {\n        const xPos =\n          (src.clipExtent[0] - sourceDataExtent[0]) * stitchScale * scaleFactor;\n        const yPos =\n          -(src.clipExtent[3] - sourceDataExtent[3]) *\n          stitchScale *\n          scaleFactor;\n        const width = getWidth(src.clipExtent) * stitchScale * scaleFactor;\n        const height = getHeight(src.clipExtent) * stitchScale * scaleFactor;\n        gl.enable(gl.SCISSOR_TEST);\n        gl.scissor(\n          interpolate ? xPos : Math.round(xPos),\n          interpolate ? yPos : Math.round(yPos),\n          interpolate ? width : Math.round(xPos + width) - Math.round(xPos),\n          interpolate ? height : Math.round(yPos + height) - Math.round(yPos),\n        );\n      }\n\n      webGLCanvas.drawImage(\n        src.texture,\n        src.width,\n        src.height,\n        gutter,\n        gutter,\n        src.width - 2 * gutter,\n        src.height - 2 * gutter,\n        interpolate ? xPos : Math.round(xPos),\n        interpolate ? yPos : Math.round(yPos),\n        interpolate ? srcWidth : Math.round(xPos + srcWidth) - Math.round(xPos),\n        interpolate\n          ? srcHeight\n          : Math.round(yPos + srcHeight) - Math.round(yPos),\n        stitchWidthFixed,\n        stitchHeightFixed,\n      );\n\n      gl.disable(gl.SCISSOR_TEST);\n    });\n    gl.deleteFramebuffer(fb);\n  } else {\n    stitchTexture = sources[0].texture;\n    stitchWidth = sources[0].width;\n    stitchHeight = sources[0].width;\n  }\n\n  const targetTopLeft = getTopLeft(targetExtent);\n  const sourceTopLeft = getTopLeft(sourceDataExtent);\n\n  const getUVs = (\n    /** @type {Array<import(\"../coordinate.js\").Coordinate>} */ target,\n  ) => {\n    const u0 =\n      ((target[0][0] - targetTopLeft[0]) / targetResolution) * pixelRatio;\n    const v0 =\n      (-(target[0][1] - targetTopLeft[1]) / targetResolution) * pixelRatio;\n    const u1 =\n      ((target[1][0] - targetTopLeft[0]) / targetResolution) * pixelRatio;\n    const v1 =\n      (-(target[1][1] - targetTopLeft[1]) / targetResolution) * pixelRatio;\n    const u2 =\n      ((target[2][0] - targetTopLeft[0]) / targetResolution) * pixelRatio;\n    const v2 =\n      (-(target[2][1] - targetTopLeft[1]) / targetResolution) * pixelRatio;\n    return {u1, v1, u0, v0, u2, v2};\n  };\n\n  gl.bindFramebuffer(gl.FRAMEBUFFER, resultFrameBuffer);\n  gl.viewport(0, 0, width, height);\n\n  // Draw source to reprojtile\n  {\n    /** @type {Array<number>} */\n    const vertices = [];\n    /** @type {Array<number>} */\n    const texcoords = [];\n\n    const triProgram = createProgram(\n      gl,\n      TRIANGLE_FRAGMENT_SHADER,\n      TRIANGLE_VERTEX_SHADER,\n    );\n    gl.useProgram(triProgram);\n\n    // Bind image\n    const textureLocation = gl.getUniformLocation(triProgram, 'u_texture');\n    gl.bindTexture(gl.TEXTURE_2D, stitchTexture);\n\n    // Tell the shader to get the texture from texture unit 0\n    gl.uniform1i(textureLocation, 0);\n\n    // Calculate vert and tex coordinates.\n    triangulation.getTriangles().forEach(function (triangle, i, arr) {\n      const source = triangle.source;\n      const target = triangle.target;\n      // Make sure that everything is on pixel boundaries\n      const {u1, v1, u0, v0, u2, v2} = getUVs(target);\n\n      const su0 =\n        (source[0][0] - sourceTopLeft[0]) / sourceResolution / stitchWidth;\n      const sv0 =\n        -(source[0][1] - sourceTopLeft[1]) / sourceResolution / stitchHeight;\n      const su1 =\n        (source[1][0] - sourceTopLeft[0]) / sourceResolution / stitchWidth;\n      const sv1 =\n        -(source[1][1] - sourceTopLeft[1]) / sourceResolution / stitchHeight;\n      const su2 =\n        (source[2][0] - sourceTopLeft[0]) / sourceResolution / stitchWidth;\n      const sv2 =\n        -(source[2][1] - sourceTopLeft[1]) / sourceResolution / stitchHeight;\n\n      vertices.push(u1, v1, u0, v0, u2, v2);\n      texcoords.push(su1, sv1, su0, sv0, su2, sv2);\n    });\n\n    // Convert pixel space to clip space.\n    const matrix = mat4.orthographic(0, width, height, 0, -1, 1);\n    const matrixLocation = gl.getUniformLocation(triProgram, 'u_matrix');\n    gl.uniformMatrix4fv(matrixLocation, false, matrix);\n\n    const positionLocation = gl.getAttribLocation(triProgram, 'a_position');\n    const positionBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);\n    gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n    gl.enableVertexAttribArray(positionLocation);\n\n    const texcoordLocation = gl.getAttribLocation(triProgram, 'a_texcoord');\n    const texcoordBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(texcoords), gl.STATIC_DRAW);\n    gl.vertexAttribPointer(texcoordLocation, 2, gl.FLOAT, false, 0, 0);\n    gl.enableVertexAttribArray(texcoordLocation);\n\n    gl.drawArrays(gl.TRIANGLES, 0, vertices.length / 2);\n  }\n\n  if (renderEdges) {\n    const edgeProgram = createProgram(\n      gl,\n      EDGE_FRAGMENT_SHADER,\n      EDGE_VERTEX_SHADER,\n    );\n    gl.useProgram(edgeProgram);\n    const matrix = mat4.orthographic(0, width, height, 0, -1, 1);\n    const matrixLocation = gl.getUniformLocation(edgeProgram, 'u_matrix');\n    gl.uniformMatrix4fv(matrixLocation, false, matrix);\n\n    const burnval = Array.isArray(renderEdges) ? renderEdges : [0, 0, 0, 255];\n    const burnvalLocation = gl.getUniformLocation(edgeProgram, 'u_val');\n    const isFloat = true;\n    if (isFloat) {\n      gl.uniform4fv(burnvalLocation, burnval);\n    } else {\n      gl.uniform4iv(burnvalLocation, burnval);\n    }\n\n    const positionLocation = gl.getAttribLocation(edgeProgram, 'a_position');\n    const positionBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n    gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n    gl.enableVertexAttribArray(positionLocation);\n\n    /** @type {Array<number>} */\n    const lines = triangulation.getTriangles().reduce(function (\n      /** @type {Array<number>} */ lines,\n      triangle,\n    ) {\n      const target = triangle.target;\n      const {u1, v1, u0, v0, u2, v2} = getUVs(target);\n\n      return lines.concat([u1, v1, u0, v0, u0, v0, u2, v2, u2, v2, u1, v1]);\n    }, []);\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(lines), gl.STATIC_DRAW);\n    gl.drawArrays(gl.LINES, 0, lines.length / 2);\n  }\n\n  return {\n    width,\n    height,\n    framebuffer: resultFrameBuffer,\n    texture: resultTexture,\n  };\n}\n","/**\n * @module ol/reproj/DataTile\n */\n\nimport DataTile, {asArrayLike, asImageLike, toArray} from '../DataTile.js';\nimport TileState from '../TileState.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {getArea, getIntersection, getWidth, wrapAndSliceX} from '../extent.js';\nimport {clamp} from '../math.js';\nimport {calculateSourceExtentResolution} from '../reproj.js';\nimport Triangulation from './Triangulation.js';\nimport {ERROR_THRESHOLD} from './common.js';\nimport {\n  canvasGLPool,\n  createCanvasContextWebGL,\n  releaseGLCanvas,\n  render as renderReprojected,\n} from './glreproj.js';\n\n/**\n * @typedef {function(number, number, number, number) : import(\"../DataTile.js\").default} TileGetter\n */\n\n/**\n * @typedef {Object} TileOffset\n * @property {DataTile} tile Tile.\n * @property {number} offset Offset.\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../proj/Projection.js\").default} sourceProj Source projection.\n * @property {import(\"../tilegrid/TileGrid.js\").default} sourceTileGrid Source tile grid.\n * @property {import(\"../proj/Projection.js\").default} targetProj Target projection.\n * @property {import(\"../tilegrid/TileGrid.js\").default} targetTileGrid Target tile grid.\n * @property {import(\"../tilecoord.js\").TileCoord} tileCoord Coordinate of the tile.\n * @property {import(\"../tilecoord.js\").TileCoord} [wrappedTileCoord] Coordinate of the tile wrapped in X.\n * @property {number} pixelRatio Pixel ratio.\n * @property {number} gutter Gutter of the source tiles.\n * @property {TileGetter} getTileFunction Function returning source tiles (z, x, y, pixelRatio).\n * @property {boolean} [interpolate=false] Use interpolated values when resampling.  By default,\n * the nearest neighbor is used when resampling.\n * @property {number} [errorThreshold] Acceptable reprojection error (in px).\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {import(\"../transform.js\").Transform} [transformMatrix] Source transform matrix.\n * @property {boolean} [renderEdges] Render reprojection edges.\n * @property {boolean} [hasAlpha=true] Whether the source tiles already include an\n * alpha band.  When `false`, an alpha band marking the reprojected coverage is\n * appended to the output so areas outside the source footprint render transparent.\n */\n\n/**\n * @classdesc\n * Class encapsulating single reprojected data tile.\n * See {@link module:ol/source/DataTile~DataTileSource}.\n *\n */\nclass ReprojDataTile extends DataTile {\n  /**\n   * @param {Options} options Tile options.\n   */\n  constructor(options) {\n    super({\n      tileCoord: options.tileCoord,\n      loader: () => Promise.resolve(new Uint8ClampedArray(4)),\n      interpolate: options.interpolate,\n      transition: options.transition,\n    });\n\n    /**\n     * @private\n     * @type {boolean | Array<number>}\n     */\n    this.renderEdges_ =\n      options.renderEdges !== undefined ? options.renderEdges : false;\n\n    /**\n     * Whether the source tiles already carry an alpha band.  When `false`, a\n     * coverage alpha band is appended to the reprojected output.\n     * @private\n     * @type {boolean}\n     */\n    this.hasAlpha_ = options.hasAlpha !== undefined ? options.hasAlpha : true;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.pixelRatio_ = options.pixelRatio;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.gutter_ = options.gutter;\n\n    /**\n     * @type {import(\"../DataTile.js\").Data}\n     * @private\n     */\n    this.reprojData_ = null;\n\n    /**\n     * @type {Error}\n     * @private\n     */\n    this.reprojError_ = null;\n\n    /**\n     * @type {import('../size.js').Size}\n     * @private\n     */\n    this.reprojSize_ = undefined;\n\n    /**\n     * @private\n     * @type {import(\"../tilegrid/TileGrid.js\").default}\n     */\n    this.sourceTileGrid_ = options.sourceTileGrid;\n\n    /**\n     * @private\n     * @type {import(\"../tilegrid/TileGrid.js\").default}\n     */\n    this.targetTileGrid_ = options.targetTileGrid;\n\n    /**\n     * @private\n     * @type {import(\"../tilecoord.js\").TileCoord}\n     */\n    this.wrappedTileCoord_ = options.wrappedTileCoord || options.tileCoord;\n\n    /**\n     * @private\n     * @type {!Array<TileOffset>}\n     */\n    this.sourceTiles_ = [];\n\n    /**\n     * @private\n     * @type {?Array<import(\"../events.js\").EventsKey>}\n     */\n    this.sourcesListenerKeys_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.sourceZ_ = 0;\n\n    const sourceProj = options.sourceProj;\n    const sourceProjExtent = sourceProj.getExtent();\n    const sourceTileGridExtent = options.sourceTileGrid.getExtent();\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.clipExtent_ = sourceProj.canWrapX()\n      ? sourceTileGridExtent\n        ? getIntersection(sourceProjExtent, sourceTileGridExtent)\n        : sourceProjExtent\n      : sourceTileGridExtent;\n\n    const targetExtent = this.targetTileGrid_.getTileCoordExtent(\n      this.wrappedTileCoord_,\n    );\n    const maxTargetExtent = this.targetTileGrid_.getExtent();\n    let maxSourceExtent = this.sourceTileGrid_.getExtent();\n\n    const limitedTargetExtent = maxTargetExtent\n      ? getIntersection(targetExtent, maxTargetExtent)\n      : targetExtent;\n\n    if (getArea(limitedTargetExtent) === 0) {\n      // Tile is completely outside range -> EMPTY\n      // TODO: is it actually correct that the source even creates the tile ?\n      this.state = TileState.EMPTY;\n      return;\n    }\n\n    if (sourceProjExtent) {\n      if (!maxSourceExtent) {\n        maxSourceExtent = sourceProjExtent;\n      } else {\n        maxSourceExtent = getIntersection(maxSourceExtent, sourceProjExtent);\n      }\n    }\n\n    const targetResolution = this.targetTileGrid_.getResolution(\n      this.wrappedTileCoord_[0],\n    );\n\n    const targetProj = options.targetProj;\n    const sourceResolution = calculateSourceExtentResolution(\n      sourceProj,\n      targetProj,\n      limitedTargetExtent,\n      targetResolution,\n    );\n\n    if (!isFinite(sourceResolution) || sourceResolution <= 0) {\n      // invalid sourceResolution -> EMPTY\n      // probably edges of the projections when no extent is defined\n      this.state = TileState.EMPTY;\n      return;\n    }\n\n    const errorThresholdInPixels =\n      options.errorThreshold !== undefined\n        ? options.errorThreshold\n        : ERROR_THRESHOLD;\n\n    /**\n     * @private\n     * @type {!import(\"./Triangulation.js\").default}\n     */\n    this.triangulation_ = new Triangulation(\n      sourceProj,\n      targetProj,\n      limitedTargetExtent,\n      maxSourceExtent,\n      sourceResolution * errorThresholdInPixels,\n      targetResolution,\n      options.transformMatrix,\n    );\n\n    if (this.triangulation_.getTriangles().length === 0) {\n      // no valid triangles -> EMPTY\n      this.state = TileState.EMPTY;\n      return;\n    }\n\n    this.sourceZ_ = this.sourceTileGrid_.getZForResolution(sourceResolution);\n    let sourceExtent = this.triangulation_.calculateSourceExtent();\n\n    if (maxSourceExtent) {\n      if (sourceProj.canWrapX()) {\n        sourceExtent[1] = clamp(\n          sourceExtent[1],\n          maxSourceExtent[1],\n          maxSourceExtent[3],\n        );\n        sourceExtent[3] = clamp(\n          sourceExtent[3],\n          maxSourceExtent[1],\n          maxSourceExtent[3],\n        );\n      } else {\n        sourceExtent = getIntersection(sourceExtent, maxSourceExtent);\n      }\n    }\n\n    if (!getArea(sourceExtent)) {\n      this.state = TileState.EMPTY;\n    } else {\n      let worldWidth = 0;\n      let worldsAway = 0;\n      if (sourceProj.canWrapX()) {\n        worldWidth = getWidth(sourceProjExtent);\n        worldsAway = Math.floor(\n          (sourceExtent[0] - sourceProjExtent[0]) / worldWidth,\n        );\n      }\n\n      const sourceExtents = wrapAndSliceX(\n        sourceExtent.slice(),\n        sourceProj,\n        true,\n      );\n      sourceExtents.forEach((extent) => {\n        const sourceRange = this.sourceTileGrid_.getTileRangeForExtentAndZ(\n          extent,\n          this.sourceZ_,\n        );\n        const getTile = options.getTileFunction;\n        for (let srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {\n          for (let srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {\n            const tile = getTile(this.sourceZ_, srcX, srcY, this.pixelRatio_);\n            if (tile) {\n              const offset = worldsAway * worldWidth;\n              this.sourceTiles_.push({tile, offset});\n            }\n          }\n        }\n        ++worldsAway;\n      });\n\n      if (this.sourceTiles_.length === 0) {\n        this.state = TileState.EMPTY;\n      }\n    }\n  }\n\n  /**\n   * Get the tile size.\n   * @return {import('../size.js').Size} Tile size.\n   * @override\n   */\n  getSize() {\n    return this.reprojSize_;\n  }\n\n  /**\n   * Get the data for the tile.\n   * @return {import(\"../DataTile.js\").Data} Tile data.\n   * @override\n   */\n  getData() {\n    return this.reprojData_;\n  }\n\n  /**\n   * Get any loading error.\n   * @return {Error} Loading error.\n   * @override\n   */\n  getError() {\n    return this.reprojError_;\n  }\n\n  /**\n   * @private\n   */\n  reproject_() {\n    const dataSources = [];\n    let imageLike = false;\n    this.sourceTiles_.forEach((source) => {\n      const tile = source.tile;\n      if (!tile || tile.getState() !== TileState.LOADED) {\n        return;\n      }\n      const size = tile.getSize();\n      const gutter = this.gutter_;\n      /**\n       * @type {import(\"../DataTile.js\").ArrayLike}\n       */\n      let tileData;\n      const arrayData = asArrayLike(tile.getData());\n      if (arrayData) {\n        tileData = arrayData;\n      } else {\n        imageLike = true;\n        tileData = toArray(asImageLike(tile.getData()));\n      }\n      const pixelSize = [size[0] + 2 * gutter, size[1] + 2 * gutter];\n      const isFloat = tileData instanceof Float32Array;\n      const pixelCount = pixelSize[0] * pixelSize[1];\n      const DataType = isFloat ? Float32Array : Uint8ClampedArray;\n      const tileDataR = new DataType(\n        /** @type {ArrayBuffer} */ (tileData.buffer),\n      );\n      const bytesPerElement = DataType.BYTES_PER_ELEMENT;\n      const bytesPerPixel = (bytesPerElement * tileDataR.length) / pixelCount;\n      const bytesPerRow = tileDataR.byteLength / pixelSize[1];\n      const bandCount = Math.floor(\n        bytesPerRow / bytesPerElement / pixelSize[0],\n      );\n      const extent = this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord);\n      extent[0] += source.offset;\n      extent[2] += source.offset;\n      const clipExtent = this.clipExtent_?.slice();\n      if (clipExtent) {\n        clipExtent[0] += source.offset;\n        clipExtent[2] += source.offset;\n      }\n      dataSources.push({\n        extent: extent,\n        clipExtent: clipExtent,\n        data: tileDataR,\n        dataType: DataType,\n        bytesPerPixel: bytesPerPixel,\n        pixelSize: pixelSize,\n        bandCount: bandCount,\n      });\n    });\n    this.sourceTiles_.length = 0;\n\n    if (dataSources.length === 0) {\n      this.state = TileState.ERROR;\n      this.changed();\n      return;\n    }\n\n    const z = this.wrappedTileCoord_[0];\n    const size = this.targetTileGrid_.getTileSize(z);\n    const targetWidth = typeof size === 'number' ? size : size[0];\n    const targetHeight = typeof size === 'number' ? size : size[1];\n    const outWidth = Math.round(targetWidth * this.pixelRatio_);\n    const outHeight = Math.round(targetHeight * this.pixelRatio_);\n    const targetResolution = this.targetTileGrid_.getResolution(z);\n    const sourceResolution = this.sourceTileGrid_.getResolution(this.sourceZ_);\n\n    const targetExtent = this.targetTileGrid_.getTileCoordExtent(\n      this.wrappedTileCoord_,\n    );\n\n    const bandCount = dataSources[0].bandCount;\n\n    // When the source tiles have no alpha band, append a coverage band so areas\n    // outside the source footprint (out-of-bounds source pixels and the gaps a\n    // rotated/curved reprojection leaves) render transparent instead of opaque.\n    // The reprojection clears uncovered pixels to 0, so a band marked opaque for\n    // every source pixel becomes the coverage after reprojection.\n    const coverageBand = this.hasAlpha_ ? -1 : bandCount;\n    const outBandCount = this.hasAlpha_ ? bandCount : bandCount + 1;\n    const dataR = new dataSources[0].dataType(\n      outBandCount * outWidth * outHeight,\n    );\n\n    const gl = createCanvasContextWebGL(outWidth, outHeight, canvasGLPool, {\n      premultipliedAlpha: false,\n      antialias: false,\n    });\n\n    let willInterpolate;\n    const format = gl.RGBA;\n    let textureType;\n    if (dataSources[0].dataType == Float32Array) {\n      textureType = gl.FLOAT;\n      gl.getExtension('WEBGL_color_buffer_float');\n      gl.getExtension('OES_texture_float');\n      gl.getExtension('EXT_float_blend');\n      const extension = gl.getExtension('OES_texture_float_linear');\n      const canInterpolate = extension !== null;\n      willInterpolate = canInterpolate && this.interpolate;\n    } else {\n      textureType = gl.UNSIGNED_BYTE;\n      willInterpolate = this.interpolate;\n    }\n\n    const opaque = dataSources[0].dataType === Float32Array ? 1 : 255;\n\n    const BANDS_PR_REPROJ = 4;\n    const reprojs = Math.ceil(outBandCount / BANDS_PR_REPROJ);\n    for (let reproj = reprojs - 1; reproj >= 0; --reproj) {\n      const sources = [];\n      const groupBase = reproj * BANDS_PR_REPROJ;\n      for (let i = 0, len = dataSources.length; i < len; ++i) {\n        const dataSource = dataSources[i];\n\n        const pixelSize = dataSource.pixelSize;\n        const width = pixelSize[0];\n        const height = pixelSize[1];\n\n        const data = new dataSource.dataType(BANDS_PR_REPROJ * width * height);\n        const dataS = dataSource.data;\n        for (\n          let j = 0, p = 0, len = data.length;\n          j < len;\n          j += BANDS_PR_REPROJ\n        ) {\n          for (let c = 0; c < BANDS_PR_REPROJ; ++c) {\n            const band = groupBase + c;\n            if (band === coverageBand) {\n              data[j + c] = opaque;\n            } else if (band < bandCount) {\n              data[j + c] = dataS[p * bandCount + band];\n            }\n          }\n          ++p;\n        }\n\n        const texture = gl.createTexture();\n        gl.bindTexture(gl.TEXTURE_2D, texture);\n\n        if (willInterpolate) {\n          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n        } else {\n          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n          gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n        }\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.texImage2D(\n          gl.TEXTURE_2D,\n          0,\n          format,\n          width,\n          height,\n          0,\n          format,\n          textureType,\n          data,\n        );\n\n        sources.push({\n          extent: dataSource.extent,\n          clipExtent: dataSource.clipExtent,\n          texture: texture,\n          width: width,\n          height: height,\n        });\n      }\n\n      const {framebuffer, width, height} = renderReprojected(\n        gl,\n        targetWidth,\n        targetHeight,\n        this.pixelRatio_,\n        sourceResolution,\n        targetResolution,\n        targetExtent,\n        this.triangulation_,\n        sources,\n        this.gutter_,\n        textureType,\n        this.renderEdges_,\n        willInterpolate,\n      );\n\n      // The texture is always RGBA.\n      const rows = width;\n      const cols = height * BANDS_PR_REPROJ;\n      const data = new dataSources[0].dataType(rows * cols);\n      gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n      gl.readPixels(0, 0, width, height, gl.RGBA, textureType, data);\n\n      for (let i = 0, p = 0, len = data.length; i < len; i += BANDS_PR_REPROJ) {\n        // The data read by `readPixels` is flipped in the y-axis so flip it again.\n        const flipY = (rows - 1 - ((i / cols) | 0)) * cols + (i % cols);\n        for (let c = 0; c < BANDS_PR_REPROJ; ++c) {\n          const band = groupBase + c;\n          if (band < outBandCount) {\n            dataR[p * outBandCount + band] = data[flipY + c];\n          }\n        }\n        ++p;\n      }\n    }\n\n    releaseGLCanvas(gl);\n    canvasGLPool.push(gl.canvas);\n\n    if (imageLike) {\n      const context = createCanvasContext2D(targetWidth, targetHeight);\n      const imageData = new ImageData(dataR, targetWidth);\n      context.putImageData(imageData, 0, 0);\n      this.reprojData_ = context.canvas;\n    } else {\n      this.reprojData_ = dataR;\n    }\n    this.reprojSize_ = [outWidth, outHeight];\n    this.state = TileState.LOADED;\n    this.changed();\n  }\n\n  /**\n   * Load not yet loaded URI.\n   * @override\n   */\n  load() {\n    if (this.state !== TileState.IDLE && this.state !== TileState.ERROR) {\n      return;\n    }\n    this.state = TileState.LOADING;\n    this.changed();\n\n    let leftToLoad = 0;\n\n    this.sourcesListenerKeys_ = [];\n    this.sourceTiles_.forEach(({tile}) => {\n      const state = tile.getState();\n      if (state !== TileState.IDLE && state !== TileState.LOADING) {\n        return;\n      }\n      leftToLoad++;\n\n      const sourceListenKey = listen(tile, EventType.CHANGE, () => {\n        const state = tile.getState();\n        if (\n          state == TileState.LOADED ||\n          state == TileState.ERROR ||\n          state == TileState.EMPTY\n        ) {\n          unlistenByKey(sourceListenKey);\n          leftToLoad--;\n          if (leftToLoad === 0) {\n            this.unlistenSources_();\n            this.reproject_();\n          }\n        }\n      });\n      this.sourcesListenerKeys_.push(sourceListenKey);\n    });\n\n    if (leftToLoad === 0) {\n      setTimeout(this.reproject_.bind(this), 0);\n    } else {\n      this.sourceTiles_.forEach(function ({tile}) {\n        const state = tile.getState();\n        if (state == TileState.IDLE) {\n          tile.load();\n        }\n      });\n    }\n  }\n\n  /**\n   * @private\n   */\n  unlistenSources_() {\n    this.sourcesListenerKeys_.forEach(unlistenByKey);\n    this.sourcesListenerKeys_ = null;\n  }\n}\n\nexport default ReprojDataTile;\n","/**\n * @module ol/source/DataTile\n */\nimport DataTile from '../DataTile.js';\nimport TileState from '../TileState.js';\nimport EventType from '../events/EventType.js';\nimport {getHeight, getWidth} from '../extent.js';\nimport {toPromise} from '../functions.js';\nimport {equivalent, get as getProjection} from '../proj.js';\nimport ReprojDataTile from '../reproj/DataTile.js';\nimport {toSize} from '../size.js';\nimport {getCacheKey} from '../tilecoord.js';\nimport {\n  createForProjection,\n  createXYZ,\n  extentFromProjection,\n  getForProjection as getTileGridForProjection,\n} from '../tilegrid.js';\nimport {DEFAULT_TILE_SIZE} from '../tilegrid/common.js';\nimport {getUid} from '../util.js';\nimport TileSource, {TileSourceEvent} from './Tile.js';\nimport TileEventType from './TileEventType.js';\n\n/**\n * @typedef {'anonymous'|'use-credentials'} CrossOriginAttribute\n */\n\n/**\n * @typedef {Object} LoaderOptions\n * @property {AbortSignal} signal An abort controller signal.\n * @property {CrossOriginAttribute} [crossOrigin] The cross-origin attribute for images.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for images.\n * @property {number} [maxY] The maximum y coordinate at the given z level.  Will be undefined if the\n * underlying tile grid does not have a known extent.\n */\n\n/**\n * Data tile loading function.  The function is called with z, x, and y tile coordinates and\n * returns {@link import(\"../DataTile.js\").Data data} for a tile or a promise for the same.\n * @typedef {function(number, number, number, LoaderOptions) : (import(\"../DataTile.js\").Data|Promise<import(\"../DataTile.js\").Data>)} Loader\n */\n\n/**\n * @typedef {Object} Options\n * @property {Loader} [loader] Data loader.  Called with z, x, and y tile coordinates.\n * Returns {@link import(\"../DataTile.js\").Data data} for a tile or a promise for the same.\n * For loaders that generate images, the promise should not resolve until the image is loaded.\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [maxZoom=42] Optional max zoom level. Not used if `tileGrid` is provided.\n * @property {number} [minZoom=0] Optional min zoom level. Not used if `tileGrid` is provided.\n * @property {number|import(\"../size.js\").Size} [tileSize=[256, 256]] The pixel width and height of the source tiles.\n * This may be different than the rendered pixel size if a `tileGrid` is provided.\n * @property {number} [gutter=0] The size in pixels of the gutter around data tiles to ignore.\n * This allows artifacts of rendering at tile edges to be ignored.\n * Supported data should be wider and taller than the tile size by a value of `2 x gutter`.\n * @property {number} [maxResolution] Optional tile grid resolution at level zero. Not used if `tileGrid` is provided.\n * @property {import(\"../proj.js\").ProjectionLike} [projection='EPSG:3857'] Tile projection.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"./Source.js\").State} [state] The source state.\n * @property {boolean} [wrapX=false] Render tiles beyond the antimeridian.\n * @property {number} [transition] Transition time when fading in new tiles (in milliseconds).\n * @property {number} [bandCount=4] Number of bands represented in the data.\n * @property {boolean} [hasAlpha] Whether the data includes an alpha band.  Used when\n * reprojecting to decide whether a coverage alpha band needs to be appended so areas\n * outside the source footprint render transparent.  Defaults to `true` for 2 (luminance\n * alpha) or 4 (RGBA) bands and `false` otherwise.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling.  By default,\n * the nearest neighbor is used when resampling.\n * @property {CrossOriginAttribute} [crossOrigin='anonymous'] The crossOrigin property to pass to loaders for image data.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {string} [key] Key for use in caching tiles.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n */\n\n/**\n * @classdesc\n * A source for typed array data tiles.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n * @template {import(\"../Tile.js\").default} [TileType=DataTile]\n * @extends TileSource<TileType>\n * @api\n */\nclass DataTileSource extends TileSource {\n  /**\n   * @param {Options} options DataTile source options.\n   */\n  constructor(options) {\n    const projection =\n      options.projection === undefined ? 'EPSG:3857' : options.projection;\n\n    let tileGrid = options.tileGrid;\n    if (tileGrid === undefined && projection) {\n      tileGrid = createXYZ({\n        extent: extentFromProjection(projection),\n        maxResolution: options.maxResolution,\n        maxZoom: options.maxZoom,\n        minZoom: options.minZoom,\n        tileSize: options.tileSize,\n      });\n    }\n\n    super({\n      cacheSize: 0.1, // don't cache on the source\n      attributions: options.attributions,\n      attributionsCollapsible: options.attributionsCollapsible,\n      projection: projection,\n      tileGrid: tileGrid,\n      state: options.state,\n      wrapX: options.wrapX,\n      transition: options.transition,\n      interpolate: options.interpolate,\n      key: options.key,\n      zDirection: options.zDirection,\n    });\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.gutter_ = options.gutter !== undefined ? options.gutter : 0;\n\n    /**\n     * @private\n     * @type {import('../size.js').Size|null}\n     */\n    this.tileSize_ = options.tileSize ? toSize(options.tileSize) : null;\n\n    /**\n     * @private\n     * @type {Array<import('../size.js').Size>|null}\n     */\n    this.tileSizes_ = null;\n\n    /**\n     * @private\n     * @type {!Object<string, boolean>}\n     */\n    this.tileLoadingKeys_ = {};\n\n    /**\n     * @private\n     */\n    this.loader_ = options.loader;\n\n    /**\n     * @private\n     */\n    this.handleTileChange_ = this.handleTileChange_.bind(this);\n\n    /**\n     * @type {number}\n     */\n    this.bandCount = options.bandCount === undefined ? 4 : options.bandCount; // assume RGBA if undefined\n\n    /**\n     * Whether the data includes an alpha band.  When `false`, reprojection\n     * appends a coverage alpha band so areas outside the source footprint\n     * render transparent instead of opaque.\n     * @type {boolean}\n     */\n    this.hasAlpha =\n      options.hasAlpha !== undefined\n        ? options.hasAlpha\n        : this.bandCount === 2 || this.bandCount === 4;\n\n    /**\n     * The 1-based band index for the nodata alpha band.\n     * @type {number|undefined}\n     */\n    this.nodataBandIndex;\n\n    /**\n     * @private\n     * @type {!Object<string, import(\"../tilegrid/TileGrid.js\").default>}\n     */\n    this.tileGridForProjection_ = {};\n\n    /**\n     * @private\n     * @type {CrossOriginAttribute}\n     */\n    this.crossOrigin_ = options.crossOrigin || 'anonymous';\n\n    /**\n     * @private\n     * @type {ReferrerPolicy}\n     */\n    this.referrerPolicy_ = options.referrerPolicy;\n\n    /**\n     * @type {import(\"../transform.js\").Transform|null}\n     */\n    this.transformMatrix = null;\n  }\n\n  /**\n   * Set the source tile sizes.  The length of the array is expected to match the number of\n   * levels in the tile grid.\n   * @protected\n   * @param {Array<import('../size.js').Size>} tileSizes An array of tile sizes.\n   */\n  setTileSizes(tileSizes) {\n    this.tileSizes_ = tileSizes;\n  }\n\n  /**\n   * Get the source tile size at the given zoom level.  This may be different than the rendered tile\n   * size.\n   * @protected\n   * @param {number} z Tile zoom level.\n   * @return {import('../size.js').Size} The source tile size.\n   */\n  getTileSize(z) {\n    if (this.tileSizes_) {\n      return this.tileSizes_[z];\n    }\n    if (this.tileSize_) {\n      return this.tileSize_;\n    }\n    const tileGrid = this.getTileGrid();\n    return tileGrid ? toSize(tileGrid.getTileSize(z)) : [256, 256];\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {number} Gutter.\n   * @override\n   */\n  getGutterForProjection(projection) {\n    const thisProj = this.getProjection();\n    if (\n      (!thisProj || equivalent(thisProj, projection)) &&\n      !this.transformMatrix\n    ) {\n      return this.gutter_;\n    }\n\n    return 0;\n  }\n\n  /**\n   * @param {Loader} loader The data loader.\n   * @protected\n   */\n  setLoader(loader) {\n    this.loader_ = loader;\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {import(\"../proj/Projection.js\").default} targetProj The output projection.\n   * @param {import(\"../proj/Projection.js\").default} sourceProj The input projection.\n   * @param {import(\"../structs/LRUCache.js\").default<import(\"../Tile.js\").default>} [tileCache] Tile cache.\n   * @return {!TileType} Tile.\n   */\n  getReprojTile_(z, x, y, targetProj, sourceProj, tileCache) {\n    const sourceTileGrid =\n      this.tileGrid || this.getTileGridForProjection(sourceProj || targetProj);\n    const reprojTilePixelRatio = Math.max.apply(\n      null,\n      sourceTileGrid.getResolutions().map((r, z) => {\n        const tileSize = toSize(sourceTileGrid.getTileSize(z));\n        const textureSize = this.getTileSize(z);\n        return Math.max(\n          textureSize[0] / tileSize[0],\n          textureSize[1] / tileSize[1],\n        );\n      }),\n    );\n\n    const targetTileGrid = this.getTileGridForProjection(targetProj);\n    const tileCoord = [z, x, y];\n    const wrappedTileCoord = this.getTileCoordForTileUrlFunction(\n      tileCoord,\n      targetProj,\n    );\n\n    const options = Object.assign(\n      {\n        sourceProj: sourceProj || targetProj,\n        sourceTileGrid,\n        targetProj,\n        targetTileGrid,\n        tileCoord,\n        wrappedTileCoord,\n        pixelRatio: reprojTilePixelRatio,\n        gutter: this.gutter_,\n        hasAlpha: this.hasAlpha,\n        getTileFunction: (z, x, y, pixelRatio) =>\n          this.getTile(z, x, y, pixelRatio, undefined, tileCache),\n        transformMatrix: this.transformMatrix,\n      },\n      /** @type {import(\"../reproj/DataTile.js\").Options} */ (this.tileOptions),\n    );\n    const tile = /** @type {TileType} */ (\n      /** @type {*} */ (new ReprojDataTile(options))\n    );\n    tile.key = this.getKey();\n    return tile;\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} [projection] Projection.\n   * @param {import(\"../structs/LRUCache.js\").default<import(\"../Tile.js\").default>} [tileCache] Tile cache.\n   * @return {TileType|null} Tile (or null if outside source extent).\n   * @override\n   */\n  getTile(z, x, y, pixelRatio, projection, tileCache) {\n    const sourceProjection = this.getProjection();\n    if (\n      projection &&\n      ((sourceProjection && !equivalent(sourceProjection, projection)) ||\n        this.transformMatrix)\n    ) {\n      return this.getReprojTile_(\n        z,\n        x,\n        y,\n        projection,\n        sourceProjection,\n        tileCache,\n      );\n    }\n\n    const size = this.getTileSize(z);\n\n    const sourceLoader = this.loader_;\n\n    const controller = new AbortController();\n\n    /**\n     * @type {LoaderOptions}\n     */\n    const loaderOptions = {\n      signal: controller.signal,\n      crossOrigin: this.crossOrigin_,\n      referrerPolicy: this.referrerPolicy_,\n    };\n\n    const tileCoord = this.getTileCoordForTileUrlFunction([z, x, y]);\n    if (!tileCoord) {\n      return null;\n    }\n\n    const key = this.getKey();\n    const cacheKey = getCacheKey(this, key, z, x, y);\n    if (tileCache && tileCache.containsKey(cacheKey)) {\n      return /** @type {TileType} */ (tileCache.get(cacheKey));\n    }\n\n    const requestZ = tileCoord[0];\n    const requestX = tileCoord[1];\n    const requestY = tileCoord[2];\n    const range = this.getTileGrid()?.getFullTileRange(requestZ);\n    if (range) {\n      loaderOptions.maxY = range.getHeight() - 1;\n    }\n    function loader() {\n      return toPromise(function () {\n        return sourceLoader(requestZ, requestX, requestY, loaderOptions);\n      });\n    }\n\n    /**\n     * @type {import(\"../DataTile.js\").Options}\n     */\n    const options = Object.assign(\n      {\n        tileCoord: [z, x, y],\n        loader: loader,\n        size: size,\n        controller: controller,\n      },\n      this.tileOptions,\n    );\n\n    const tile = /** @type {TileType} */ (\n      /** @type {*} */ (new DataTile(options))\n    );\n    tile.key = this.getKey();\n    tile.addEventListener(EventType.CHANGE, this.handleTileChange_);\n\n    tileCache?.set(cacheKey, tile);\n    return tile;\n  }\n\n  /**\n   * Handle tile change events.\n   * @param {import(\"../events/Event.js\").default} event Event.\n   */\n  handleTileChange_(event) {\n    const tile = /** @type {import(\"../Tile.js\").default} */ (event.target);\n    const uid = getUid(tile);\n    const tileState = tile.getState();\n    let type;\n    if (tileState == TileState.LOADING) {\n      this.tileLoadingKeys_[uid] = true;\n      type = TileEventType.TILELOADSTART;\n    } else if (uid in this.tileLoadingKeys_) {\n      delete this.tileLoadingKeys_[uid];\n      type =\n        tileState == TileState.ERROR\n          ? TileEventType.TILELOADERROR\n          : tileState == TileState.LOADED\n            ? TileEventType.TILELOADEND\n            : undefined;\n    }\n    if (type) {\n      this.dispatchEvent(new TileSourceEvent(type, tile));\n    }\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n   * @override\n   */\n  getTileGridForProjection(projection) {\n    const thisProj = this.getProjection();\n    if (\n      this.tileGrid &&\n      (!thisProj || equivalent(thisProj, projection)) &&\n      !this.transformMatrix\n    ) {\n      return this.tileGrid;\n    }\n\n    const projKey = getUid(projection);\n    if (!(projKey in this.tileGridForProjection_)) {\n      if (this.tileGrid && thisProj && !equivalent(thisProj, projection)) {\n        // Limit the target tile grid's zoom levels based on the source's\n        // finest available resolution to avoid creating excessive target\n        // tiles that all map to the same source data.\n        const sourceResolutions = this.tileGrid.getResolutions();\n        const sourceFinestRes = sourceResolutions[sourceResolutions.length - 1];\n        const sourceMetersPerUnit = thisProj.getMetersPerUnit() || 1;\n        const targetMetersPerUnit = projection.getMetersPerUnit() || 1;\n        const targetFinestRes =\n          (sourceFinestRes * sourceMetersPerUnit) / targetMetersPerUnit;\n        const extent = extentFromProjection(projection);\n        const tileSize = DEFAULT_TILE_SIZE;\n        const maxResolution = Math.max(\n          getWidth(extent) / tileSize,\n          getHeight(extent) / tileSize,\n        );\n        const maxZoom = Math.max(\n          0,\n          Math.ceil(Math.log2(maxResolution / targetFinestRes)) + 1,\n        );\n        this.tileGridForProjection_[projKey] = createForProjection(\n          projection,\n          maxZoom,\n        );\n      } else {\n        this.tileGridForProjection_[projKey] =\n          getTileGridForProjection(projection);\n      }\n    }\n    return this.tileGridForProjection_[projKey];\n  }\n\n  /**\n   * Sets the tile grid to use when reprojecting the tiles to the given\n   * projection instead of the default tile grid for the projection.\n   *\n   * This can be useful when the default tile grid cannot be created\n   * (e.g. projection has no extent defined) or\n   * for optimization reasons (custom tile size, resolutions, ...).\n   *\n   * @param {import(\"../proj.js\").ProjectionLike} projection Projection.\n   * @param {import(\"../tilegrid/TileGrid.js\").default} tilegrid Tile grid to use for the projection.\n   * @api\n   */\n  setTileGridForProjection(projection, tilegrid) {\n    const proj = getProjection(projection);\n    if (proj) {\n      const projKey = getUid(proj);\n      if (!(projKey in this.tileGridForProjection_)) {\n        this.tileGridForProjection_[projKey] = tilegrid;\n      }\n    }\n  }\n}\n\nexport default DataTileSource;\n","/**\n * @module ol/resolution\n */\n\n/**\n * @typedef {number|Array<number>} ResolutionLike\n */\n\n/**\n * @param {ResolutionLike} resolution Resolution.\n * @return {number} Resolution.\n */\nexport function fromResolutionLike(resolution) {\n  if (Array.isArray(resolution)) {\n    return Math.min(...resolution);\n  }\n  return resolution;\n}\n","/**\n * @module ol/reproj/Image\n */\n\nimport ImageWrapper from '../Image.js';\nimport ImageState from '../ImageState.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport EventType from '../events/EventType.js';\nimport {\n  getCenter,\n  getHeight,\n  getIntersection,\n  getWidth,\n  isEmpty,\n} from '../extent.js';\nimport {\n  calculateSourceResolution,\n  render as renderReprojected,\n} from '../reproj.js';\nimport {fromResolutionLike} from '../resolution.js';\nimport Triangulation from './Triangulation.js';\nimport {ERROR_THRESHOLD} from './common.js';\n\n/**\n * @typedef {function(import(\"../extent.js\").Extent, number, number) : import(\"../Image.js\").default} FunctionType\n */\n\n/**\n * @classdesc\n * Class encapsulating single reprojected image.\n * See {@link module:ol/source/Image~ImageSource}.\n */\nclass ReprojImage extends ImageWrapper {\n  /**\n   * @param {import(\"../proj/Projection.js\").default} sourceProj Source projection (of the data).\n   * @param {import(\"../proj/Projection.js\").default} targetProj Target projection.\n   * @param {import(\"../extent.js\").Extent} targetExtent Target extent.\n   * @param {number} targetResolution Target resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {FunctionType} getImageFunction\n   *     Function returning source images (extent, resolution, pixelRatio).\n   * @param {boolean} interpolate Use linear interpolation when resampling.\n   */\n  constructor(\n    sourceProj,\n    targetProj,\n    targetExtent,\n    targetResolution,\n    pixelRatio,\n    getImageFunction,\n    interpolate,\n  ) {\n    let maxSourceExtent = sourceProj.getExtent();\n    if (maxSourceExtent && sourceProj.canWrapX()) {\n      maxSourceExtent = maxSourceExtent.slice();\n      maxSourceExtent[0] = -Infinity;\n      maxSourceExtent[2] = Infinity;\n    }\n    let maxTargetExtent = targetProj.getExtent();\n    if (maxTargetExtent && targetProj.canWrapX()) {\n      maxTargetExtent = maxTargetExtent.slice();\n      maxTargetExtent[0] = -Infinity;\n      maxTargetExtent[2] = Infinity;\n    }\n\n    const limitedTargetExtent = maxTargetExtent\n      ? getIntersection(targetExtent, maxTargetExtent)\n      : targetExtent;\n\n    const targetCenter = getCenter(limitedTargetExtent);\n    const sourceResolution = calculateSourceResolution(\n      sourceProj,\n      targetProj,\n      targetCenter,\n      targetResolution,\n    );\n\n    const errorThresholdInPixels = ERROR_THRESHOLD;\n\n    const triangulation = new Triangulation(\n      sourceProj,\n      targetProj,\n      limitedTargetExtent,\n      maxSourceExtent,\n      sourceResolution * errorThresholdInPixels,\n      targetResolution,\n    );\n\n    const sourceExtent = triangulation.calculateSourceExtent();\n    const sourceImage = isEmpty(sourceExtent)\n      ? null\n      : getImageFunction(sourceExtent, sourceResolution, pixelRatio);\n    const state = sourceImage ? ImageState.IDLE : ImageState.EMPTY;\n    const sourcePixelRatio = sourceImage ? sourceImage.getPixelRatio() : 1;\n\n    super(targetExtent, targetResolution, sourcePixelRatio, state);\n\n    /**\n     * @private\n     * @type {import(\"../proj/Projection.js\").default}\n     */\n    this.targetProj_ = targetProj;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.maxSourceExtent_ = maxSourceExtent;\n\n    /**\n     * @private\n     * @type {!import(\"./Triangulation.js\").default}\n     */\n    this.triangulation_ = triangulation;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.targetResolution_ = targetResolution;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.targetExtent_ = targetExtent;\n\n    /**\n     * @private\n     * @type {import(\"../Image.js\").default}\n     */\n    this.sourceImage_ = sourceImage;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.sourcePixelRatio_ = sourcePixelRatio;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.interpolate_ = interpolate;\n\n    /**\n     * @private\n     * @type {HTMLCanvasElement|OffscreenCanvas}\n     */\n    this.canvas_ = null;\n\n    /**\n     * @private\n     * @type {?import(\"../events.js\").EventsKey}\n     */\n    this.sourceListenerKey_ = null;\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    if (this.state == ImageState.LOADING) {\n      this.unlistenSource_();\n    }\n    super.disposeInternal();\n  }\n\n  /**\n   * @return {HTMLCanvasElement|OffscreenCanvas} Image.\n   * @override\n   */\n  getImage() {\n    return this.canvas_;\n  }\n\n  /**\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   */\n  getProjection() {\n    return this.targetProj_;\n  }\n\n  /**\n   * @private\n   */\n  reproject_() {\n    const sourceState = this.sourceImage_.getState();\n    if (sourceState == ImageState.LOADED) {\n      const width = getWidth(this.targetExtent_) / this.targetResolution_;\n      const height = getHeight(this.targetExtent_) / this.targetResolution_;\n      this.canvas_ = renderReprojected(\n        width,\n        height,\n        this.sourcePixelRatio_,\n        fromResolutionLike(this.sourceImage_.getResolution()),\n        this.maxSourceExtent_,\n        this.targetResolution_,\n        this.targetExtent_,\n        this.triangulation_,\n        [\n          {\n            extent: this.sourceImage_.getExtent(),\n            image: this.sourceImage_.getImage(),\n          },\n        ],\n        0,\n        undefined,\n        this.interpolate_,\n        true,\n      );\n    }\n    this.state = sourceState;\n    this.changed();\n  }\n\n  /**\n   * Load not yet loaded URI.\n   * @override\n   */\n  load() {\n    if (this.state == ImageState.IDLE) {\n      this.state = ImageState.LOADING;\n      this.changed();\n\n      const sourceState = this.sourceImage_.getState();\n      if (sourceState == ImageState.LOADED || sourceState == ImageState.ERROR) {\n        this.reproject_();\n      } else {\n        this.sourceListenerKey_ = listen(\n          this.sourceImage_,\n          EventType.CHANGE,\n          (e) => {\n            const sourceState = this.sourceImage_.getState();\n            if (\n              sourceState == ImageState.LOADED ||\n              sourceState == ImageState.ERROR\n            ) {\n              this.unlistenSource_();\n              this.reproject_();\n            }\n          },\n        );\n        this.sourceImage_.load();\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  unlistenSource_() {\n    unlistenByKey(\n      /** @type {!import(\"../events.js\").EventsKey} */ (\n        this.sourceListenerKey_\n      ),\n    );\n    this.sourceListenerKey_ = null;\n  }\n}\n\nexport default ReprojImage;\n","/**\n * @module ol/source/Image\n */\nimport ImageWrapper from '../Image.js';\nimport ImageState from '../ImageState.js';\nimport {linearFindNearest} from '../array.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {\n  containsExtent,\n  equals,\n  getCenter,\n  getForViewAndSize,\n  getHeight,\n  getWidth,\n} from '../extent.js';\nimport {ceil} from '../math.js';\nimport {equivalent} from '../proj.js';\nimport ReprojImage from '../reproj/Image.js';\nimport {fromResolutionLike} from '../resolution.js';\nimport Source from './Source.js';\nimport {DECIMALS} from './common.js';\n\n/**\n * @enum {string}\n */\nexport const ImageSourceEventType = {\n  /**\n   * Triggered when an image starts loading.\n   * @event module:ol/source/Image.ImageSourceEvent#imageloadstart\n   * @api\n   */\n  IMAGELOADSTART: 'imageloadstart',\n\n  /**\n   * Triggered when an image finishes loading.\n   * @event module:ol/source/Image.ImageSourceEvent#imageloadend\n   * @api\n   */\n  IMAGELOADEND: 'imageloadend',\n\n  /**\n   * Triggered if image loading results in an error.\n   * @event module:ol/source/Image.ImageSourceEvent#imageloaderror\n   * @api\n   */\n  IMAGELOADERROR: 'imageloaderror',\n};\n\n/**\n * @typedef {'imageloadend'|'imageloaderror'|'imageloadstart'} ImageSourceEventTypes\n */\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Image~ImageSource} instances are instances of this\n * type.\n */\nexport class ImageSourceEvent extends Event {\n  /**\n   * @param {string} type Type.\n   * @param {import(\"../Image.js\").default} image The image.\n   */\n  constructor(type, image) {\n    super(type);\n\n    /**\n     * The image related to the event.\n     * @type {import(\"../Image.js\").default}\n     * @api\n     */\n    this.image = image;\n  }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types, import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<ImageSourceEventTypes, ImageSourceEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types\n *     |ImageSourceEventTypes, Return>} ImageSourceOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {import(\"../Image.js\").Loader} [loader] Loader. Can either be a custom loader, or one of the\n * loaders created with a `createLoader()` function ({@link module:ol/source/wms.createLoader wms},\n * {@link module:ol/source/arcgisRest.createLoader arcgisRest}, {@link module:ol/source/mapguide.createLoader mapguide},\n * {@link module:ol/source/static.createLoader static}).\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection.\n * @property {Array<number>} [resolutions] Resolutions.\n * @property {import(\"./Source.js\").State} [state] State.\n */\n\n/**\n * @classdesc\n * Base class for sources providing a single image.\n * @fires module:ol/source/Image.ImageSourceEvent\n * @api\n */\nclass ImageSource extends Source {\n  /**\n   * @param {Options} options Single image source options.\n   */\n  constructor(options) {\n    super({\n      attributions: options.attributions,\n      projection: options.projection,\n      state: options.state,\n      interpolate:\n        options.interpolate !== undefined ? options.interpolate : true,\n    });\n\n    /***\n     * @type {ImageSourceOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {ImageSourceOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {ImageSourceOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @protected\n     * @type {import(\"../Image.js\").Loader}\n     */\n    this.loader = options.loader || null;\n\n    /**\n     * @private\n     * @type {Array<number>|null}\n     */\n    this.resolutions_ =\n      options.resolutions !== undefined ? options.resolutions : null;\n\n    /**\n     * @private\n     * @type {import(\"../reproj/Image.js\").default}\n     */\n    this.reprojectedImage_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.reprojectedRevision_ = 0;\n\n    /**\n     * @protected\n     * @type {import(\"../Image.js\").default}\n     */\n    this.image = null;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.wantedExtent_;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.wantedResolution_;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.static_ = options.loader ? options.loader.length === 0 : false;\n\n    /**\n     * @private\n     * @type {import(\"../proj/Projection.js\").default}\n     */\n    this.wantedProjection_ = null;\n  }\n\n  /**\n   * @return {Array<number>|null} Resolutions.\n   * @override\n   */\n  getResolutions() {\n    return this.resolutions_;\n  }\n\n  /**\n   * @param {Array<number>|null} resolutions Resolutions.\n   */\n  setResolutions(resolutions) {\n    this.resolutions_ = resolutions;\n  }\n\n  /**\n   * @protected\n   * @param {number} resolution Resolution.\n   * @return {number} Resolution.\n   */\n  findNearestResolution(resolution) {\n    const resolutions = this.getResolutions();\n    if (resolutions) {\n      const idx = linearFindNearest(resolutions, resolution, 0);\n      resolution = resolutions[idx];\n    }\n    return resolution;\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {import(\"../Image.js\").default} Single image.\n   */\n  getImage(extent, resolution, pixelRatio, projection) {\n    const sourceProjection = this.getProjection();\n    if (\n      !sourceProjection ||\n      !projection ||\n      equivalent(sourceProjection, projection)\n    ) {\n      if (sourceProjection) {\n        projection = sourceProjection;\n      }\n\n      return this.getImageInternal(extent, resolution, pixelRatio, projection);\n    }\n    if (this.reprojectedImage_) {\n      if (\n        this.reprojectedRevision_ == this.getRevision() &&\n        equivalent(this.reprojectedImage_.getProjection(), projection) &&\n        this.reprojectedImage_.getResolution() == resolution &&\n        equals(this.reprojectedImage_.getExtent(), extent)\n      ) {\n        return this.reprojectedImage_;\n      }\n      this.reprojectedImage_.dispose();\n      this.reprojectedImage_ = null;\n    }\n\n    this.reprojectedImage_ = new ReprojImage(\n      sourceProjection,\n      projection,\n      extent,\n      resolution,\n      pixelRatio,\n      (extent, resolution, pixelRatio) =>\n        this.getImageInternal(extent, resolution, pixelRatio, sourceProjection),\n      this.getInterpolate(),\n    );\n    this.reprojectedRevision_ = this.getRevision();\n\n    return this.reprojectedImage_;\n  }\n\n  /**\n   * @abstract\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {import(\"../Image.js\").default} Single image.\n   * @protected\n   */\n  getImageInternal(extent, resolution, pixelRatio, projection) {\n    if (this.loader) {\n      const requestExtent = getRequestExtent(extent, resolution, pixelRatio, 1);\n      const requestResolution = this.findNearestResolution(resolution);\n      if (\n        this.image &&\n        (this.static_ ||\n          (this.wantedProjection_ === projection &&\n            ((this.wantedExtent_ &&\n              containsExtent(this.wantedExtent_, requestExtent)) ||\n              containsExtent(this.image.getExtent(), requestExtent)) &&\n            ((this.wantedResolution_ &&\n              fromResolutionLike(this.wantedResolution_) ===\n                requestResolution) ||\n              fromResolutionLike(this.image.getResolution()) ===\n                requestResolution)))\n      ) {\n        return this.image;\n      }\n      this.wantedProjection_ = projection;\n      this.wantedExtent_ = requestExtent;\n      this.wantedResolution_ = requestResolution;\n      this.image = new ImageWrapper(\n        requestExtent,\n        requestResolution,\n        pixelRatio,\n        this.loader,\n      );\n      this.image.addEventListener(\n        EventType.CHANGE,\n        this.handleImageChange.bind(this),\n      );\n    }\n    return this.image;\n  }\n\n  /**\n   * Handle image change events.\n   * @param {import(\"../events/Event.js\").default} event Event.\n   * @protected\n   */\n  handleImageChange(event) {\n    const image = /** @type {import(\"../Image.js\").default} */ (event.target);\n    let type;\n    switch (image.getState()) {\n      case ImageState.LOADING:\n        this.loading = true;\n        type = ImageSourceEventType.IMAGELOADSTART;\n        break;\n      case ImageState.LOADED:\n        this.loading = false;\n        type = ImageSourceEventType.IMAGELOADEND;\n        break;\n      case ImageState.ERROR:\n        this.loading = false;\n        type = ImageSourceEventType.IMAGELOADERROR;\n        break;\n      default:\n        return;\n    }\n    if (this.hasListener(type)) {\n      this.dispatchEvent(new ImageSourceEvent(type, image));\n    }\n  }\n}\n\n/**\n * Default image load function for image sources that use import(\"../Image.js\").Image image\n * instances.\n * @param {import(\"../Image.js\").default} image Image.\n * @param {string} src Source.\n */\nexport function defaultImageLoadFunction(image, src) {\n  /** @type {HTMLImageElement|HTMLVideoElement} */ (image.getImage()).src = src;\n}\n\n/**\n * Adjusts the extent so it aligns with pixel boundaries.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Reolution.\n * @param {number} pixelRatio Pixel ratio.\n * @param {number} ratio Ratio between request size and view size.\n * @return {import(\"../extent.js\").Extent} Request extent.\n */\nexport function getRequestExtent(extent, resolution, pixelRatio, ratio) {\n  const imageResolution = resolution / pixelRatio;\n  const center = getCenter(extent);\n  const viewWidth = ceil(getWidth(extent) / imageResolution, DECIMALS);\n  const viewHeight = ceil(getHeight(extent) / imageResolution, DECIMALS);\n  const marginWidth = ceil(((ratio - 1) * viewWidth) / 2, DECIMALS);\n  const requestWidth = viewWidth + 2 * marginWidth;\n  const marginHeight = ceil(((ratio - 1) * viewHeight) / 2, DECIMALS);\n  const requestHeight = viewHeight + 2 * marginHeight;\n  return getForViewAndSize(center, imageResolution, 0, [\n    requestWidth,\n    requestHeight,\n  ]);\n}\n\nexport default ImageSource;\n","/**\n * @module ol/source/ImageStatic\n */\n\nimport ImageWrapper, {decode} from '../Image.js';\nimport EventType from '../events/EventType.js';\nimport {intersects} from '../extent.js';\nimport {get as getProjection} from '../proj.js';\nimport ImageSource, {defaultImageLoadFunction} from './Image.js';\nimport {createLoader} from './static.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {import(\"../extent.js\").Extent} imageExtent Extent of the image in map coordinates.\n * This is the [left, bottom, right, top] map coordinates of your image.\n * @property {import(\"../Image.js\").LoadFunction} [imageLoadFunction] Optional function to load an image given a URL.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {string} url Image URL.\n */\n\n/**\n * @classdesc\n * A layer source for displaying a single, static image.\n * @api\n */\nclass Static extends ImageSource {\n  /**\n   * @param {Options} options ImageStatic options.\n   */\n  constructor(options) {\n    const crossOrigin =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n    const /** @type {import(\"../Image.js\").LoadFunction} */ imageLoadFunction =\n        options.imageLoadFunction !== undefined\n          ? options.imageLoadFunction\n          : defaultImageLoadFunction;\n\n    super({\n      attributions: options.attributions,\n      interpolate: options.interpolate,\n      projection: getProjection(options.projection),\n    });\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.url_ = options.url;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.imageExtent_ = options.imageExtent;\n\n    /**\n     * @private\n     * @type {import(\"../Image.js\").default}\n     */\n    this.image = null;\n\n    this.image = new ImageWrapper(\n      this.imageExtent_,\n      undefined,\n      1,\n      createLoader({\n        url: options.url,\n        imageExtent: options.imageExtent,\n        crossOrigin,\n        referrerPolicy: options.referrerPolicy,\n        load: (image, src) => {\n          this.image.setImage(image);\n          imageLoadFunction(this.image, src);\n          return decode(image);\n        },\n      }),\n    );\n\n    this.image.addEventListener(\n      EventType.CHANGE,\n      this.handleImageChange.bind(this),\n    );\n  }\n\n  /**\n   * Returns the image extent\n   * @return {import(\"../extent.js\").Extent} image extent.\n   * @api\n   */\n  getImageExtent() {\n    return this.imageExtent_;\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {import(\"../Image.js\").default} Single image.\n   * @override\n   */\n  getImageInternal(extent, resolution, pixelRatio, projection) {\n    if (intersects(extent, this.image.getExtent())) {\n      return this.image;\n    }\n    return null;\n  }\n\n  /**\n   * Return the URL used for this image source.\n   * @return {string} URL.\n   * @api\n   */\n  getUrl() {\n    return this.url_;\n  }\n}\n\nexport default Static;\n","/**\n * @module ol/source/static\n */\n\nimport {decode} from '../Image.js';\nimport {getHeight, getWidth} from '../extent.js';\n\n/**\n * @typedef {Object} LoaderOptions\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {import(\"../extent.js\").Extent} imageExtent Extent of the image in map coordinates.\n * This is the [left, bottom, right, top] map coordinates of your image. When using this loader with an\n * `ol/source/Image`, the same extent must be set as `extent` of the `ol/layer/Image`.\n * @property {string} url Image URL.\n * @property {function(HTMLImageElement, string): Promise<import('../DataTile.js').ImageLike>} [load] Function\n * to perform loading of the image. Receives the created `HTMLImageElement` and the desired `src` as argument and\n * returns a promise resolving to the loaded or decoded image. Default is {@link module:ol/Image.decode}.\n */\n\n/**\n * Creates a loader for static images.\n * @param {LoaderOptions} options Loader options.\n * @return {import(\"../Image.js\").ImageObjectPromiseLoader} Loader.\n * @api\n */\nexport function createLoader(options) {\n  const load = options.load || decode;\n  const extent = options.imageExtent;\n  const crossOrigin = options.crossOrigin ?? null;\n\n  return () => {\n    const image = new Image();\n    image.crossOrigin = crossOrigin;\n    if (options.referrerPolicy !== undefined) {\n      image.referrerPolicy = options.referrerPolicy;\n    }\n    return load(image, options.url).then((image) => {\n      const resolutionX = getWidth(extent) / image.width;\n      const resolutionY = getHeight(extent) / image.height;\n      const resolution =\n        resolutionX !== resolutionY ? [resolutionX, resolutionY] : resolutionY;\n      return {image, extent, resolution, pixelRatio: 1};\n    });\n  };\n}\n","/**\n * @module ol/source/ImageWMS\n */\n\nimport {decode} from '../Image.js';\nimport {get as getProjection, transform} from '../proj.js';\nimport {calculateSourceResolution} from '../reproj.js';\nimport ImageSource, {defaultImageLoadFunction} from './Image.js';\nimport {createLoader, getFeatureInfoUrl, getLegendUrl} from './wms.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {boolean} [hidpi=true] Use the `ol/Map#pixelRatio` value when requesting\n * the image from the remote server.\n * @property {import(\"./wms.js\").ServerType} [serverType] The type of\n * the remote WMS server: `mapserver`, `geoserver`, `carmentaserver`, or `qgis`.\n * Only needed if `hidpi` is `true`.\n * @property {import(\"../Image.js\").LoadFunction} [imageLoadFunction] Optional function to load an image given a URL.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {Object<string,*>} [params] WMS request parameters.\n * At least a `LAYERS` param is required. `STYLES` is\n * `''` by default. `VERSION` is `1.3.0` by default. `WIDTH`, `HEIGHT`, `BBOX`\n * and `CRS` (`SRS` for WMS version < 1.3.0) will be set dynamically.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [ratio=1.5] Ratio. `1` means image requests are the size of the map viewport, `2` means\n * twice the width and height of the map viewport, and so on. Must be `1` or higher.\n * @property {Array<number>} [resolutions] Resolutions.\n * If specified, requests will be made for these resolutions only.\n * @property {string} [url] WMS service URL.\n */\n\n/**\n * @classdesc\n * Source for WMS servers providing single, untiled images.\n *\n * @fires module:ol/source/Image.ImageSourceEvent\n * @api\n */\nclass ImageWMS extends ImageSource {\n  /**\n   * @param {Options} [options] ImageWMS options.\n   */\n  constructor(options) {\n    options = options ? options : {};\n\n    super({\n      attributions: options.attributions,\n      interpolate: options.interpolate,\n      projection: options.projection,\n      resolutions: options.resolutions,\n    });\n\n    /**\n     * @private\n     * @type {?string}\n     */\n    this.crossOrigin_ =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n    /**\n     * @private\n     * @type {ReferrerPolicy}\n     */\n    this.referrerPolicy_ = options.referrerPolicy;\n\n    /**\n     * @private\n     * @type {string|undefined}\n     */\n    this.url_ = options.url;\n\n    /**\n     * @private\n     * @type {import(\"../Image.js\").LoadFunction}\n     */\n    this.imageLoadFunction_ =\n      options.imageLoadFunction !== undefined\n        ? options.imageLoadFunction\n        : defaultImageLoadFunction;\n\n    /**\n     * @private\n     * @type {!Object}\n     */\n    this.params_ = Object.assign({}, options.params);\n\n    /**\n     * @private\n     * @type {import(\"./wms.js\").ServerType}\n     */\n    this.serverType_ = options.serverType;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.renderedRevision_ = 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.ratio_ = options.ratio !== undefined ? options.ratio : 1.5;\n\n    /**\n     * @private\n     * @type {import(\"../proj/Projection.js\").default}\n     */\n    this.loaderProjection_ = null;\n  }\n\n  /**\n   * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n   * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n   * constructed.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {number} resolution Resolution.\n   * @param {import(\"../proj.js\").ProjectionLike} projection Projection.\n   * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should\n   *     be provided. If `QUERY_LAYERS` is not provided then the layers specified\n   *     in the `LAYERS` parameter will be used. `VERSION` should not be\n   *     specified here.\n   * @return {string|undefined} GetFeatureInfo URL.\n   * @api\n   */\n  getFeatureInfoUrl(coordinate, resolution, projection, params) {\n    const projectionObj = getProjection(projection);\n    const sourceProjectionObj = this.getProjection();\n\n    if (sourceProjectionObj && sourceProjectionObj !== projectionObj) {\n      resolution = calculateSourceResolution(\n        sourceProjectionObj,\n        projectionObj,\n        coordinate,\n        resolution,\n      );\n      coordinate = transform(coordinate, projectionObj, sourceProjectionObj);\n    }\n\n    const options = {\n      url: this.url_,\n      params: {\n        ...this.params_,\n        ...params,\n      },\n      projection: sourceProjectionObj || projectionObj,\n    };\n    return getFeatureInfoUrl(options, coordinate, resolution);\n  }\n\n  /**\n   * Return the GetLegendGraphic URL, optionally optimized for the passed\n   * resolution and possibly including any passed specific parameters. Returns\n   * `undefined` if the GetLegendGraphic URL cannot be constructed.\n   *\n   * @param {number} [resolution] Resolution. If set to undefined, `SCALE`\n   *     will not be calculated and included in URL.\n   * @param {Object} [params] GetLegendGraphic params. If `LAYER` is set, the\n   *     request is generated for this wms layer, else it will try to use the\n   *     configured wms layer. Default `FORMAT` is `image/png`.\n   *     `VERSION` should not be specified here.\n   * @return {string|undefined} GetLegendGraphic URL.\n   * @api\n   */\n  getLegendUrl(resolution, params) {\n    return getLegendUrl(\n      {\n        url: this.url_,\n        params: {\n          ...this.params_,\n          ...params,\n        },\n      },\n      resolution,\n    );\n  }\n\n  /**\n   * Get the user-provided params, i.e. those passed to the constructor through\n   * the \"params\" option, and possibly updated using the updateParams method.\n   * @return {Object} Params.\n   * @api\n   */\n  getParams() {\n    return this.params_;\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {import(\"../Image.js\").default} Single image.\n   * @override\n   */\n  getImageInternal(extent, resolution, pixelRatio, projection) {\n    if (this.url_ === undefined) {\n      return null;\n    }\n    if (!this.loader || this.loaderProjection_ !== projection) {\n      // Lazily create loader to pick up the view projection and to allow `params` updates\n      this.loaderProjection_ = projection;\n      this.loader = createLoader({\n        crossOrigin: this.crossOrigin_,\n        referrerPolicy: this.referrerPolicy_,\n        params: this.params_,\n        projection: projection,\n        serverType: this.serverType_,\n        hidpi: this.hidpi_,\n        url: this.url_,\n        ratio: this.ratio_,\n        load: (image, src) => {\n          this.image.setImage(image);\n          this.imageLoadFunction_(this.image, src);\n          return decode(image);\n        },\n      });\n    }\n\n    return super.getImageInternal(extent, resolution, pixelRatio, projection);\n  }\n\n  /**\n   * Return the image load function of the source.\n   * @return {import(\"../Image.js\").LoadFunction} The image load function.\n   * @api\n   */\n  getImageLoadFunction() {\n    return this.imageLoadFunction_;\n  }\n\n  /**\n   * Return the URL used for this WMS source.\n   * @return {string|undefined} URL.\n   * @api\n   */\n  getUrl() {\n    return this.url_;\n  }\n\n  /**\n   * Set the image load function of the source.\n   * @param {import(\"../Image.js\").LoadFunction} imageLoadFunction Image load function.\n   * @api\n   */\n  setImageLoadFunction(imageLoadFunction) {\n    this.imageLoadFunction_ = imageLoadFunction;\n    this.changed();\n  }\n\n  /**\n   * Set the URL to use for requests.\n   * @param {string|undefined} url URL.\n   * @api\n   */\n  setUrl(url) {\n    if (url != this.url_) {\n      this.url_ = url;\n      this.loader = null;\n      this.changed();\n    }\n  }\n\n  /**\n   * Set the user-provided params.\n   * @param {Object} params Params.\n   * @api\n   */\n  setParams(params) {\n    this.params_ = Object.assign({}, params);\n    // Reset loader to pick up new params\n    this.loader = null;\n    this.changed();\n  }\n\n  /**\n   * Update the user-provided params.\n   * @param {Object} params Params.\n   * @api\n   */\n  updateParams(params) {\n    Object.assign(this.params_, params);\n    this.changed();\n  }\n\n  /**\n   * @override\n   */\n  changed() {\n    this.image = null;\n    super.changed();\n  }\n}\n\nexport default ImageWMS;\n","/**\n * @module ol/source/OSM\n */\n\nimport XYZ from './XYZ.js';\n\n/**\n * The attribution containing a link to the OpenStreetMap Copyright and License\n * page.\n * @const\n * @type {string}\n * @api\n */\nexport const ATTRIBUTION =\n  '&#169; ' +\n  '<a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> ' +\n  'contributors.';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {null|string} [crossOrigin='anonymous'] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy='origin-when-cross-origin'] The `referrerPolicy` property for loaded images.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {number} [maxZoom=19] Max zoom.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [transition=250] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {string} [url='https://tile.openstreetmap.org/{z}/{x}/{y}.png'] URL template.\n * Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n */\n\n/**\n * @classdesc\n * Layer source for the OpenStreetMap tile server.\n * @api\n */\nclass OSM extends XYZ {\n  /**\n   * @param {Options} [options] Open Street Map options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    let attributions;\n    if (options.attributions !== undefined) {\n      attributions = options.attributions;\n    } else {\n      attributions = [ATTRIBUTION];\n    }\n\n    const url =\n      options.url !== undefined\n        ? options.url\n        : 'https://tile.openstreetmap.org/{z}/{x}/{y}.png';\n\n    super({\n      attributions: attributions,\n      attributionsCollapsible: false,\n      cacheSize: options.cacheSize,\n      crossOrigin:\n        options.crossOrigin !== undefined ? options.crossOrigin : 'anonymous',\n      referrerPolicy: options.referrerPolicy || 'origin-when-cross-origin',\n      interpolate: options.interpolate,\n      maxZoom: options.maxZoom !== undefined ? options.maxZoom : 19,\n      reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n      tileLoadFunction: options.tileLoadFunction,\n      transition: options.transition,\n      url: url,\n      wrapX: options.wrapX,\n      zDirection: options.zDirection,\n    });\n  }\n}\n\nexport default OSM;\n","/**\n * @module ol/source/Source\n */\nimport BaseObject from '../Object.js';\nimport {get as getProjection} from '../proj.js';\n\n/**\n * @typedef {'undefined' | 'loading' | 'ready' | 'error'} State\n * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.\n */\n\n/**\n * A function that takes a {@link import(\"../View.js\").ViewStateLayerStateExtent} and returns a string or\n * an array of strings representing source attributions.\n *\n * @typedef {function(import(\"../View.js\").ViewStateLayerStateExtent): (string|Array<string>)} Attribution\n */\n\n/**\n * A type that can be used to provide attribution information for data sources.\n *\n * It represents either\n * a simple string (e.g. `'© Acme Inc.'`)\n * an array of simple strings (e.g. `['© Acme Inc.', '© Bacme Inc.']`)\n * a function that returns a string or array of strings ({@link module:ol/source/Source~Attribution})\n *\n * @typedef {string|Array<string>|Attribution} AttributionLike\n */\n\n/**\n * @typedef {Object} Options\n * @property {AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {import(\"./Source.js\").State} [state='ready'] State.\n * @property {boolean} [wrapX=false] WrapX.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling.  By default,\n * the nearest neighbor is used when resampling.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for {@link module:ol/layer/Layer~Layer} sources.\n *\n * A generic `change` event is triggered when the state of the source changes.\n * @abstract\n * @api\n */\nclass Source extends BaseObject {\n  /**\n   * @param {Options} options Source options.\n   */\n  constructor(options) {\n    super();\n\n    /**\n     * @protected\n     * @type {import(\"../proj/Projection.js\").default|null}\n     */\n    this.projection = getProjection(options.projection);\n\n    /**\n     * @private\n     * @type {?Attribution}\n     */\n    this.attributions_ = adaptAttributions(options.attributions);\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.attributionsCollapsible_ = options.attributionsCollapsible ?? true;\n\n    /**\n     * This source is currently loading data. Sources that defer loading to the\n     * map's tile queue never set this to a `truthy` value.\n     * @type {boolean|number}\n     */\n    this.loading = false;\n\n    /**\n     * @private\n     * @type {import(\"./Source.js\").State}\n     */\n    this.state_ = options.state !== undefined ? options.state : 'ready';\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.interpolate_ = !!options.interpolate;\n\n    /**\n     * @protected\n     * @type {function(import(\"../View.js\").ViewOptions):void}\n     */\n    this.viewResolver = null;\n\n    /**\n     * @protected\n     * @type {function(Error):void}\n     */\n    this.viewRejector = null;\n\n    const self = this;\n    /**\n     * @private\n     * @type {Promise<import(\"../View.js\").ViewOptions>}\n     */\n    this.viewPromise_ = new Promise(function (resolve, reject) {\n      self.viewResolver = resolve;\n      self.viewRejector = reject;\n    });\n  }\n\n  /**\n   * Get the attribution function for the source.\n   * @return {?Attribution} Attribution function.\n   * @api\n   */\n  getAttributions() {\n    return this.attributions_;\n  }\n\n  /**\n   * @return {boolean} Attributions are collapsible.\n   * @api\n   */\n  getAttributionsCollapsible() {\n    return this.attributionsCollapsible_;\n  }\n\n  /**\n   * Get the projection of the source.\n   * @return {import(\"../proj/Projection.js\").default|null} Projection.\n   * @api\n   */\n  getProjection() {\n    return this.projection;\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} [projection] Projection.\n   * @return {Array<number>|null} Resolutions.\n   */\n  getResolutions(projection) {\n    return null;\n  }\n\n  /**\n   * @return {Promise<import(\"../View.js\").ViewOptions>} A promise for view-related properties.\n   */\n  getView() {\n    return this.viewPromise_;\n  }\n\n  /**\n   * Resolve once the source is ready to be used (its state is `ready`), or\n   * reject if it fails to load (its state is `error`). Sources that configure\n   * asynchronously can use this to expose data (e.g. dimensions) through a\n   * promise instead of the `change` event.\n   * @return {Promise<void>} Resolves when the source is ready.\n   * @protected\n   */\n  ready() {\n    const state = this.getState();\n    if (state === 'ready') {\n      return Promise.resolve();\n    }\n    if (state === 'error') {\n      return Promise.reject(new Error('Source failed to load'));\n    }\n    return new Promise((resolve, reject) => {\n      const onChange = () => {\n        const changedState = this.getState();\n        if (changedState === 'ready') {\n          this.un('change', onChange);\n          resolve();\n        } else if (changedState === 'error') {\n          this.un('change', onChange);\n          reject(new Error('Source failed to load'));\n        }\n      };\n      this.on('change', onChange);\n    });\n  }\n\n  /**\n   * Get the state of the source, see {@link import(\"./Source.js\").State} for possible states.\n   * @return {import(\"./Source.js\").State} State.\n   * @api\n   */\n  getState() {\n    return this.state_;\n  }\n\n  /**\n   * @return {boolean|undefined} Wrap X.\n   */\n  getWrapX() {\n    return this.wrapX_;\n  }\n\n  /**\n   * @return {boolean} Use linear interpolation when resampling.\n   */\n  getInterpolate() {\n    return this.interpolate_;\n  }\n\n  /**\n   * Refreshes the source. The source will be cleared, and data from the server will be reloaded.\n   * @api\n   */\n  refresh() {\n    this.changed();\n  }\n\n  /**\n   * Set the attributions of the source.\n   * @param {AttributionLike|undefined} attributions Attributions.\n   *     Can be passed as `string`, `Array<string>`, {@link module:ol/source/Source~Attribution},\n   *     or `undefined`.\n   * @api\n   */\n  setAttributions(attributions) {\n    this.attributions_ = adaptAttributions(attributions);\n    this.changed();\n  }\n\n  /**\n   * Set the state of the source.\n   * @param {import(\"./Source.js\").State} state State.\n   */\n  setState(state) {\n    this.state_ = state;\n    this.changed();\n  }\n}\n\n/**\n * Turns the attributions option into an attributions function.\n * @param {AttributionLike|undefined} attributionLike The attribution option.\n * @return {Attribution|null} An attribution function (or null).\n */\nfunction adaptAttributions(attributionLike) {\n  if (!attributionLike) {\n    return null;\n  }\n  if (typeof attributionLike === 'function') {\n    return attributionLike;\n  }\n  if (!Array.isArray(attributionLike)) {\n    attributionLike = [attributionLike];\n  }\n  return (frameState) => attributionLike;\n}\n\nexport default Source;\n","/**\n * @module ol/source/Tile\n */\nimport Event from '../events/Event.js';\nimport {scale as scaleSize, toSize} from '../size.js';\nimport {withinExtentAndZ} from '../tilecoord.js';\nimport {\n  getForProjection as getTileGridForProjection,\n  wrapX,\n} from '../tilegrid.js';\nimport {abstract, getUid} from '../util.js';\nimport Source from './Source.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types, import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"./TileEventType.js\").TileSourceEventTypes, TileSourceEvent, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n *     import(\"./TileEventType.js\").TileSourceEventTypes, Return>} TileSourceOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {number} [tilePixelRatio] TilePixelRatio.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection.\n * @property {import(\"./Source.js\").State} [state] State.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] TileGrid.\n * @property {boolean} [wrapX=false] WrapX.\n * @property {number} [transition] Transition.\n * @property {string} [key] Key.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0] ZDirection.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling.  By default,\n * the nearest neighbor is used when resampling.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for sources providing images divided into a tile grid.\n *\n * @template {import(\"../Tile.js\").default} [TileType=import(\"../Tile.js\").default]\n * @abstract\n * @api\n */\nclass TileSource extends Source {\n  /**\n   * @param {Options} options SourceTile source options.\n   */\n  constructor(options) {\n    super({\n      attributions: options.attributions,\n      attributionsCollapsible: options.attributionsCollapsible,\n      projection: options.projection,\n      state: options.state,\n      wrapX: options.wrapX,\n      interpolate: options.interpolate,\n    });\n\n    /***\n     * @type {TileSourceOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.on;\n\n    /***\n     * @type {TileSourceOnSignature<import(\"../events.js\").EventsKey>}\n     */\n    this.once;\n\n    /***\n     * @type {TileSourceOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.tilePixelRatio_ =\n      options.tilePixelRatio !== undefined ? options.tilePixelRatio : 1;\n\n    /**\n     * @type {import(\"../tilegrid/TileGrid.js\").default|null}\n     * @protected\n     */\n    this.tileGrid = options.tileGrid !== undefined ? options.tileGrid : null;\n\n    const tileSize = [256, 256];\n    if (this.tileGrid) {\n      toSize(this.tileGrid.getTileSize(this.tileGrid.getMinZoom()), tileSize);\n    }\n\n    /**\n     * @protected\n     * @type {import(\"../size.js\").Size}\n     */\n    this.tmpSize = [0, 0];\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.key_ = options.key || getUid(this);\n\n    /**\n     * @protected\n     * @type {import(\"../Tile.js\").Options}\n     */\n    this.tileOptions = {\n      transition: options.transition,\n      interpolate: options.interpolate,\n    };\n\n    /**\n     * zDirection hint, read by the renderer. Indicates which resolution should be used\n     * by a renderer if the views resolution does not match any resolution of the tile source.\n     * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n     * will be used. If -1, the nearest higher resolution will be used.\n     * @type {number|import(\"../array.js\").NearestDirectionFunction}\n     */\n    this.zDirection = options.zDirection ? options.zDirection : 0;\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {number} Gutter.\n   */\n  getGutterForProjection(projection) {\n    return 0;\n  }\n\n  /**\n   * Return the key to be used for all tiles in the source.\n   * @return {string} The key for all tiles.\n   */\n  getKey() {\n    return this.key_;\n  }\n\n  /**\n   * Set the value to be used as the key for all tiles in the source.\n   * @param {string} key The key for tiles.\n   * @protected\n   */\n  setKey(key) {\n    if (this.key_ !== key) {\n      this.key_ = key;\n      this.changed();\n    }\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} [projection] Projection.\n   * @return {Array<number>|null} Resolutions.\n   * @override\n   */\n  getResolutions(projection) {\n    const tileGrid = projection\n      ? this.getTileGridForProjection(projection)\n      : this.tileGrid;\n    if (!tileGrid) {\n      return null;\n    }\n    return tileGrid.getResolutions();\n  }\n\n  /**\n   * @abstract\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @param {import(\"../structs/LRUCache.js\").default<import(\"../Tile.js\").default>} [tileCache] Tile cache.\n   * @return {TileType|null} Tile.\n   */\n  getTile(z, x, y, pixelRatio, projection, tileCache) {\n    return abstract();\n  }\n\n  /**\n   * Return the tile grid of the tile source.\n   * @return {import(\"../tilegrid/TileGrid.js\").default|null} Tile grid.\n   * @api\n   */\n  getTileGrid() {\n    return this.tileGrid;\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n   */\n  getTileGridForProjection(projection) {\n    if (!this.tileGrid) {\n      return getTileGridForProjection(projection);\n    }\n    return this.tileGrid;\n  }\n\n  /**\n   * Get the tile pixel ratio for this source. Subclasses may override this\n   * method, which is meant to return a supported pixel ratio that matches the\n   * provided `pixelRatio` as close as possible.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {number} Tile pixel ratio.\n   */\n  getTilePixelRatio(pixelRatio) {\n    return this.tilePixelRatio_;\n  }\n\n  /**\n   * @param {number} z Z.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {import(\"../size.js\").Size} Tile size.\n   */\n  getTilePixelSize(z, pixelRatio, projection) {\n    const tileGrid = this.getTileGridForProjection(projection);\n    const tilePixelRatio = this.getTilePixelRatio(pixelRatio);\n    const tileSize = toSize(tileGrid.getTileSize(z), this.tmpSize);\n    if (tilePixelRatio == 1) {\n      return tileSize;\n    }\n    return scaleSize(tileSize, tilePixelRatio, this.tmpSize);\n  }\n\n  /**\n   * Returns a tile coordinate wrapped around the x-axis. When the tile coordinate\n   * is outside the resolution and extent range of the tile grid, `null` will be\n   * returned.\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"../proj/Projection.js\").default} [projection] Projection.\n   * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate to be passed to the tileUrlFunction or\n   *     null if no tile URL should be created for the passed `tileCoord`.\n   */\n  getTileCoordForTileUrlFunction(tileCoord, projection) {\n    const gridProjection =\n      projection !== undefined ? projection : this.getProjection();\n    const tileGrid =\n      projection !== undefined\n        ? this.getTileGridForProjection(gridProjection)\n        : this.tileGrid || this.getTileGridForProjection(gridProjection);\n    if (this.getWrapX() && gridProjection.isGlobal()) {\n      tileCoord = wrapX(tileGrid, tileCoord, gridProjection);\n    }\n    return withinExtentAndZ(tileCoord, tileGrid) ? tileCoord : null;\n  }\n\n  /**\n   * Remove all cached reprojected tiles from the source. The next render cycle will create new tiles.\n   * @api\n   */\n  clear() {}\n\n  /**\n   * @override\n   */\n  refresh() {\n    this.clear();\n    super.refresh();\n  }\n}\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Tile~TileSource} instances are instances of this\n * type.\n */\nexport class TileSourceEvent extends Event {\n  /**\n   * @param {string} type Type.\n   * @param {import(\"../Tile.js\").default} tile The tile.\n   */\n  constructor(type, tile) {\n    super(type);\n\n    /**\n     * The tile related to the event.\n     * @type {import(\"../Tile.js\").default}\n     * @api\n     */\n    this.tile = tile;\n  }\n}\n\nexport default TileSource;\n","/**\n * @module ol/source/TileEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  /**\n   * Triggered when a tile starts loading.\n   * @event module:ol/source/Tile.TileSourceEvent#tileloadstart\n   * @api\n   */\n  TILELOADSTART: 'tileloadstart',\n\n  /**\n   * Triggered when a tile finishes loading, either when its data is loaded,\n   * or when loading was aborted because the tile is no longer needed.\n   * @event module:ol/source/Tile.TileSourceEvent#tileloadend\n   * @api\n   */\n  TILELOADEND: 'tileloadend',\n\n  /**\n   * Triggered if tile loading results in an error. Note that this is not the\n   * right place to re-fetch tiles. See {@link module:ol/ImageTile~ImageTile#load}\n   * for details.\n   * @event module:ol/source/Tile.TileSourceEvent#tileloaderror\n   * @api\n   */\n  TILELOADERROR: 'tileloaderror',\n};\n\n/**\n * @typedef {'tileloadstart'|'tileloadend'|'tileloaderror'} TileSourceEventTypes\n */\n","/**\n * @module ol/source/TileImage\n */\nimport ImageTile from '../ImageTile.js';\nimport TileState from '../TileState.js';\nimport EventType from '../events/EventType.js';\nimport {WORKER_OFFSCREEN_CANVAS} from '../has.js';\nimport {equivalent, get as getProjection} from '../proj.js';\nimport ReprojTile from '../reproj/Tile.js';\nimport {getCacheKey} from '../tilecoord.js';\nimport {getForProjection as getTileGridForProjection} from '../tilegrid.js';\nimport {getUid} from '../util.js';\nimport UrlTile from './UrlTile.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {import(\"./Source.js\").State} [state] Source state.\n * @property {typeof import(\"../ImageTile.js\").default} [tileClass] Class used to instantiate image tiles.\n * Default is {@link module:ol/ImageTile~ImageTile}.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service. For example, if the tile\n * service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Deprecated.  Use an ImageTile source and provide a function\n * for the url option instead.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be\n * used instead of defining each one separately in the `urls` option.\n * @property {Array<string>} [urls] An array of URL templates.\n * @property {boolean} [wrapX] Whether to wrap the world horizontally. The default, is to\n * request out-of-bounds tiles from the server. When set to `false`, only one\n * world will be rendered. When set to `true`, tiles will be requested for one\n * world only, but they will be wrapped horizontally to render multiple worlds.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {string} [key] Optional tile key for proper cache fetching\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n */\n\n/**\n * @deprecated Use the ol/source/ImageTile.js instead.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n * @api\n */\nclass TileImage extends UrlTile {\n  /**\n   * @param {!Options} options Image tile options.\n   */\n  constructor(options) {\n    super({\n      attributions: options.attributions,\n      cacheSize: options.cacheSize,\n      projection: options.projection,\n      state: options.state,\n      tileGrid: options.tileGrid,\n      tileLoadFunction: options.tileLoadFunction\n        ? options.tileLoadFunction\n        : defaultTileLoadFunction,\n      tilePixelRatio: options.tilePixelRatio,\n      tileUrlFunction: options.tileUrlFunction,\n      url: options.url,\n      urls: options.urls,\n      wrapX: options.wrapX,\n      transition: options.transition,\n      interpolate:\n        options.interpolate !== undefined ? options.interpolate : true,\n      key: options.key,\n      attributionsCollapsible: options.attributionsCollapsible,\n      zDirection: options.zDirection,\n    });\n\n    /**\n     * @protected\n     * @type {?string}\n     */\n    this.crossOrigin =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n    /**\n     * @protected\n     * @type {ReferrerPolicy}\n     */\n    this.referrerPolicy = options.referrerPolicy;\n\n    /**\n     * @protected\n     * @type {typeof ImageTile}\n     */\n    this.tileClass =\n      options.tileClass !== undefined ? options.tileClass : ImageTile;\n\n    /**\n     * @protected\n     * @type {!Object<string, import(\"../tilegrid/TileGrid.js\").default>}\n     */\n    this.tileGridForProjection = {};\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.renderReprojectionEdges_ = false;\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {number} Gutter.\n   * @override\n   */\n  getGutterForProjection(projection) {\n    if (\n      this.getProjection() &&\n      projection &&\n      !equivalent(this.getProjection(), projection)\n    ) {\n      return 0;\n    }\n    return this.getGutter();\n  }\n\n  /**\n   * @return {number} Gutter.\n   */\n  getGutter() {\n    return 0;\n  }\n\n  /**\n   * Return the key to be used for all tiles in the source.\n   * @return {string} The key for all tiles.\n   * @override\n   */\n  getKey() {\n    let key = super.getKey();\n    if (!this.getInterpolate()) {\n      key += ':disable-interpolation';\n    }\n    return key;\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n   * @override\n   */\n  getTileGridForProjection(projection) {\n    const thisProj = this.getProjection();\n    if (this.tileGrid && (!thisProj || equivalent(thisProj, projection))) {\n      return this.tileGrid;\n    }\n    const projKey = getUid(projection);\n    if (!(projKey in this.tileGridForProjection)) {\n      this.tileGridForProjection[projKey] =\n        getTileGridForProjection(projection);\n    }\n    return this.tileGridForProjection[projKey];\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @param {string} key The key set on the tile.\n   * @return {!ImageTile} Tile.\n   * @private\n   */\n  createTile_(z, x, y, pixelRatio, projection, key) {\n    const tileCoord = [z, x, y];\n    const urlTileCoord = this.getTileCoordForTileUrlFunction(\n      tileCoord,\n      projection,\n    );\n    const tileUrl = urlTileCoord\n      ? this.tileUrlFunction(urlTileCoord, pixelRatio, projection)\n      : undefined;\n    const tile = new this.tileClass(\n      tileCoord,\n      tileUrl !== undefined ? TileState.IDLE : TileState.EMPTY,\n      tileUrl !== undefined ? tileUrl : '',\n      {\n        crossOrigin: this.crossOrigin,\n        referrerPolicy: this.referrerPolicy,\n      },\n      this.tileLoadFunction,\n      this.tileOptions,\n    );\n    tile.key = key;\n    tile.addEventListener(EventType.CHANGE, this.handleTileChange.bind(this));\n    return tile;\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @param {import(\"../structs/LRUCache.js\").default<import(\"../Tile.js\").default>} [tileCache] Tile cache.\n   * @return {!(ImageTile|ReprojTile)} Tile.\n   * @override\n   */\n  getTile(z, x, y, pixelRatio, projection, tileCache) {\n    const sourceProjection = this.getProjection();\n    if (\n      !sourceProjection ||\n      !projection ||\n      equivalent(sourceProjection, projection)\n    ) {\n      return this.getTileInternal(\n        z,\n        x,\n        y,\n        pixelRatio,\n        sourceProjection || projection,\n      );\n    }\n    const tileCoord = [z, x, y];\n    const key = this.getKey();\n    const sourceTileGrid = this.getTileGridForProjection(sourceProjection);\n    const targetTileGrid = this.getTileGridForProjection(projection);\n    const wrappedTileCoord = this.getTileCoordForTileUrlFunction(\n      tileCoord,\n      projection,\n    );\n    const tile = new ReprojTile(\n      sourceProjection,\n      sourceTileGrid,\n      projection,\n      targetTileGrid,\n      tileCoord,\n      wrappedTileCoord,\n      this.getTilePixelRatio(pixelRatio),\n      this.getGutter(),\n      (z, x, y, pixelRatio) =>\n        this.getTileInternal(z, x, y, pixelRatio, sourceProjection, tileCache),\n      this.reprojectionErrorThreshold_,\n      this.renderReprojectionEdges_,\n      this.tileOptions,\n    );\n    tile.key = key;\n    return tile;\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {!import(\"../proj/Projection.js\").default} projection Projection.\n   * @param {import(\"../structs/LRUCache.js\").default<import(\"../Tile.js\").default>} [tileCache] Tile cache.\n   * @return {!ImageTile} Tile.\n   * @protected\n   */\n  getTileInternal(z, x, y, pixelRatio, projection, tileCache) {\n    const key = this.getKey();\n    const cacheKey = getCacheKey(this, key, z, x, y);\n    if (tileCache && tileCache.containsKey(cacheKey)) {\n      const tile = /** @type {!ImageTile} */ (tileCache.get(cacheKey));\n      return tile;\n    }\n    const tile = this.createTile_(z, x, y, pixelRatio, projection, key);\n    tileCache?.set(cacheKey, tile);\n    return tile;\n  }\n\n  /**\n   * Sets whether to render reprojection edges or not (usually for debugging).\n   * @param {boolean} render Render the edges.\n   * @api\n   */\n  setRenderReprojectionEdges(render) {\n    if (this.renderReprojectionEdges_ == render) {\n      return;\n    }\n    this.renderReprojectionEdges_ = render;\n    this.changed();\n  }\n\n  /**\n   * Sets the tile grid to use when reprojecting the tiles to the given\n   * projection instead of the default tile grid for the projection.\n   *\n   * This can be useful when the default tile grid cannot be created\n   * (e.g. projection has no extent defined) or\n   * for optimization reasons (custom tile size, resolutions, ...).\n   *\n   * @param {import(\"../proj.js\").ProjectionLike} projection Projection.\n   * @param {import(\"../tilegrid/TileGrid.js\").default} tilegrid Tile grid to use for the projection.\n   * @api\n   */\n  setTileGridForProjection(projection, tilegrid) {\n    const proj = getProjection(projection);\n    if (proj) {\n      const projKey = getUid(proj);\n      if (!(projKey in this.tileGridForProjection)) {\n        this.tileGridForProjection[projKey] = tilegrid;\n      }\n    }\n  }\n}\n\n/**\n * @param {ImageTile} imageTile Image tile.\n * @param {string} src Source.\n */\nexport function defaultTileLoadFunction(imageTile, src) {\n  if (WORKER_OFFSCREEN_CANVAS) {\n    // special treatment for offscreen canvas\n    const crossOrigin = imageTile.getCrossOrigin();\n\n    /** @type {RequestMode} */\n    let mode = 'same-origin';\n    /** @type {RequestCredentials} */\n    let credentials = 'same-origin';\n    if (crossOrigin === 'anonymous' || crossOrigin === '') {\n      mode = 'cors';\n      credentials = 'omit';\n    } else if (crossOrigin === 'use-credentials') {\n      mode = 'cors';\n      credentials = 'include';\n    }\n\n    const options = {\n      mode,\n      credentials,\n      referrerPolicy: imageTile.getReferrerPolicy(),\n    };\n\n    fetch(src, options)\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(`HTTP ${response.status}`);\n        }\n        return response.blob();\n      })\n      .then((blob) => {\n        return createImageBitmap(blob);\n      })\n      .then((imageBitmap) => {\n        const canvas = imageTile.getImage();\n        canvas.width = imageBitmap.width;\n        canvas.height = imageBitmap.height;\n        const ctx = /** @type {OffscreenCanvas} */ (canvas).getContext('2d');\n        ctx.drawImage(imageBitmap, 0, 0);\n        imageBitmap.close?.();\n        // mock the image 'load' event\n        canvas.dispatchEvent(new Event('load'));\n      })\n      .catch(() => {\n        const canvas = imageTile.getImage();\n        canvas.dispatchEvent(new Event('error'));\n      });\n    return;\n  }\n\n  /** @type {HTMLImageElement|HTMLVideoElement} */ (imageTile.getImage()).src =\n    src;\n}\n\nexport default TileImage;\n","/**\n * @module ol/source/TileWMS\n */\n\nimport {buffer, createEmpty} from '../extent.js';\nimport {modulo} from '../math.js';\nimport {get as getProjection, transform} from '../proj.js';\nimport {calculateSourceResolution} from '../reproj.js';\nimport {compareVersions} from '../string.js';\nimport {hash as tileCoordHash} from '../tilecoord.js';\nimport {appendParams} from '../uri.js';\nimport TileImage from './TileImage.js';\nimport {DEFAULT_VERSION, getImageSrc, getRequestParams} from './wms.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {Object<string,*>} params WMS request parameters.\n * At least a `LAYERS` param is required. `STYLES` is\n * `''` by default. `VERSION` is `1.3.0` by default. `WIDTH`, `HEIGHT`, `BBOX`\n * and `CRS` (`SRS` for WMS version < 1.3.0) will be set dynamically.\n * @property {number} [gutter=0]\n * The size in pixels of the gutter around image tiles to ignore. By setting\n * this property to a non-zero value, images will be requested that are wider\n * and taller than the tile size by a value of `2 x gutter`.\n * Using a non-zero value allows artifacts of rendering at tile edges to be\n * ignored. If you control the WMS service it is recommended to address\n * \"artifacts at tile edges\" issues by properly configuring the WMS service. For\n * example, MapServer has a `tile_map_edge_buffer` configuration parameter for\n * this. See https://mapserver.org/output/tile_mode.html.\n * @property {boolean} [hidpi=true] Use the `ol/Map#pixelRatio` value when requesting\n * the image from the remote server.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {typeof import(\"../ImageTile.js\").default} [tileClass] Class used to instantiate image tiles.\n * Default is {@link module:ol/ImageTile~ImageTile}.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid. Base this on the resolutions,\n * tilesize and extent supported by the server.\n * If this is not defined, a default grid will be used: if there is a projection\n * extent, the grid will be based on that; if not, a grid based on a global\n * extent with origin at 0,0 will be used.\n * @property {import(\"./wms.js\").ServerType} [serverType] The type of\n * the remote WMS server: `mapserver`, `geoserver`, `carmentaserver`, or `qgis`.\n * Only needed if `hidpi` is `true`.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {string} [url] WMS service URL.\n * @property {Array<string>} [urls] WMS service urls.\n * Use this instead of `url` when the WMS supports multiple urls for GetMap requests.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * When set to `false`, only one world\n * will be rendered. When `true`, tiles will be requested for one world only,\n * but they will be wrapped horizontally to render multiple worlds.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n */\n\n/**\n * @classdesc\n * Layer source for tile data from WMS servers.\n * @api\n */\nclass TileWMS extends TileImage {\n  /**\n   * @param {Options} [options] Tile WMS options.\n   */\n  constructor(options) {\n    options = options ? options : /** @type {Options} */ ({});\n\n    const params = Object.assign({}, options.params);\n\n    super({\n      attributions: options.attributions,\n      attributionsCollapsible: options.attributionsCollapsible,\n      cacheSize: options.cacheSize,\n      crossOrigin: options.crossOrigin,\n      interpolate: options.interpolate,\n      projection: options.projection,\n      reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n      tileClass: options.tileClass,\n      tileGrid: options.tileGrid,\n      tileLoadFunction: options.tileLoadFunction,\n      url: options.url,\n      urls: options.urls,\n      wrapX: options.wrapX !== undefined ? options.wrapX : true,\n      transition: options.transition,\n      zDirection: options.zDirection,\n    });\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.gutter_ = options.gutter !== undefined ? options.gutter : 0;\n\n    /**\n     * @private\n     * @type {!Object}\n     */\n    this.params_ = params;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.v13_ = true;\n\n    /**\n     * @private\n     * @type {import(\"./wms.js\").ServerType}\n     */\n    this.serverType_ = options.serverType;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.tmpExtent_ = createEmpty();\n\n    this.updateV13_();\n    this.setKey(this.getKeyForParams_());\n  }\n\n  /**\n   * Return the GetFeatureInfo URL for the passed coordinate, resolution, and\n   * projection. Return `undefined` if the GetFeatureInfo URL cannot be\n   * constructed.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {number} resolution Resolution.\n   * @param {import(\"../proj.js\").ProjectionLike} projection Projection.\n   * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should\n   *     be provided. If `QUERY_LAYERS` is not provided then the layers specified\n   *     in the `LAYERS` parameter will be used. `VERSION` should not be\n   *     specified here.\n   * @return {string|undefined} GetFeatureInfo URL.\n   * @api\n   */\n  getFeatureInfoUrl(coordinate, resolution, projection, params) {\n    const projectionObj = getProjection(projection);\n    const sourceProjectionObj = this.getProjection() || projectionObj;\n\n    let tileGrid = this.getTileGrid();\n    if (!tileGrid) {\n      tileGrid = this.getTileGridForProjection(sourceProjectionObj);\n    }\n\n    const sourceProjCoord = transform(\n      coordinate,\n      projectionObj,\n      sourceProjectionObj,\n    );\n    const sourceResolution = calculateSourceResolution(\n      sourceProjectionObj,\n      projectionObj,\n      coordinate,\n      resolution,\n    );\n\n    const z = tileGrid.getZForResolution(sourceResolution, this.zDirection);\n    const tileResolution = tileGrid.getResolution(z);\n    const tileCoord = tileGrid.getTileCoordForCoordAndZ(sourceProjCoord, z);\n\n    if (tileGrid.getResolutions().length <= tileCoord[0]) {\n      return undefined;\n    }\n\n    let tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);\n\n    const gutter = this.gutter_;\n    if (gutter !== 0) {\n      tileExtent = buffer(tileExtent, tileResolution * gutter, tileExtent);\n    }\n\n    const baseParams = {\n      'QUERY_LAYERS': this.params_['LAYERS'],\n    };\n    Object.assign(\n      baseParams,\n      getRequestParams(this.params_, 'GetFeatureInfo'),\n      params,\n    );\n\n    const x = Math.floor((sourceProjCoord[0] - tileExtent[0]) / tileResolution);\n    const y = Math.floor((tileExtent[3] - sourceProjCoord[1]) / tileResolution);\n\n    baseParams[this.v13_ ? 'I' : 'X'] = x;\n    baseParams[this.v13_ ? 'J' : 'Y'] = y;\n\n    return this.getRequestUrl_(\n      tileCoord,\n      tileExtent,\n      1,\n      sourceProjectionObj || projectionObj,\n      baseParams,\n    );\n  }\n\n  /**\n   * Return the GetLegendGraphic URL, optionally optimized for the passed\n   * resolution and possibly including any passed specific parameters. Returns\n   * `undefined` if the GetLegendGraphic URL cannot be constructed.\n   *\n   * @param {number} [resolution] Resolution. If set to undefined, `SCALE`\n   *     will not be calculated and included in URL.\n   * @param {Object} [params] GetLegendGraphic params. If `LAYER` is set, the\n   *     request is generated for this wms layer, else it will try to use the\n   *     configured wms layer. Default `FORMAT` is `image/png`.\n   *     `VERSION` should not be specified here.\n   * @return {string|undefined} GetLegendGraphic URL.\n   * @api\n   */\n  getLegendUrl(resolution, params) {\n    if (this.urls[0] === undefined) {\n      return undefined;\n    }\n\n    const baseParams = {\n      'SERVICE': 'WMS',\n      'VERSION': DEFAULT_VERSION,\n      'REQUEST': 'GetLegendGraphic',\n      'FORMAT': 'image/png',\n    };\n\n    if (params === undefined || params['LAYER'] === undefined) {\n      const layers = this.params_.LAYERS;\n      const isSingleLayer = !Array.isArray(layers) || layers.length === 1;\n      if (!isSingleLayer) {\n        return undefined;\n      }\n      baseParams['LAYER'] = layers;\n    }\n\n    if (resolution !== undefined) {\n      const mpu = this.getProjection()\n        ? this.getProjection().getMetersPerUnit()\n        : 1;\n      const pixelSize = 0.00028;\n      baseParams['SCALE'] = (resolution * mpu) / pixelSize;\n    }\n\n    Object.assign(baseParams, params);\n\n    return appendParams(/** @type {string} */ (this.urls[0]), baseParams);\n  }\n\n  /**\n   * @return {number} Gutter.\n   * @override\n   */\n  getGutter() {\n    return this.gutter_;\n  }\n\n  /**\n   * Get the user-provided params, i.e. those passed to the constructor through\n   * the \"params\" option, and possibly updated using the updateParams method.\n   * @return {Object} Params.\n   * @api\n   */\n  getParams() {\n    return this.params_;\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"../extent.js\").Extent} tileExtent Tile extent.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @param {Object} params Params.\n   * @return {string|undefined} Request URL.\n   * @private\n   */\n  getRequestUrl_(tileCoord, tileExtent, pixelRatio, projection, params) {\n    const urls = this.urls;\n    if (!urls) {\n      return undefined;\n    }\n    let url;\n    if (urls.length == 1) {\n      url = urls[0];\n    } else {\n      const index = modulo(tileCoordHash(tileCoord), urls.length);\n      url = urls[index];\n    }\n\n    return getImageSrc(\n      tileExtent,\n      (\n        this.tileGrid || this.getTileGridForProjection(projection)\n      ).getResolution(tileCoord[0]),\n      pixelRatio,\n      projection,\n      url,\n      params,\n      this.serverType_,\n    );\n  }\n\n  /**\n   * Get the tile pixel ratio for this source.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {number} Tile pixel ratio.\n   * @override\n   */\n  getTilePixelRatio(pixelRatio) {\n    return !this.hidpi_ || this.serverType_ === undefined ? 1 : pixelRatio;\n  }\n\n  /**\n   * @private\n   * @return {string} The key for the current params.\n   */\n  getKeyForParams_() {\n    let i = 0;\n    const res = [];\n    for (const key in this.params_) {\n      res[i++] = key + '-' + this.params_[key];\n    }\n    return res.join('/');\n  }\n\n  /**\n   * @param {Object} params New URL paremeters.\n   * @private\n   */\n  setParams_(params) {\n    this.params_ = params;\n    this.updateV13_();\n    this.setKey(this.getKeyForParams_());\n  }\n\n  /**\n   * Set the URL parameters passed to the WMS source.\n   * @param {Object} params New URL paremeters.\n   * @api\n   */\n  setParams(params) {\n    this.setParams_(Object.assign({}, params));\n  }\n\n  /**\n   * Update the URL parameters. This method can be used to update a subset of the WMS\n   * parameters. Call `setParams` to set all of the parameters.\n   * @param {Object} params Updated URL parameters.\n   * @api\n   */\n  updateParams(params) {\n    this.setParams_(Object.assign(this.params_, params));\n  }\n\n  /**\n   * @private\n   */\n  updateV13_() {\n    const version = this.params_['VERSION'] || DEFAULT_VERSION;\n    this.v13_ = compareVersions(version, '1.3') >= 0;\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord The tile coordinate\n   * @param {number} pixelRatio The pixel ratio\n   * @param {import(\"../proj/Projection.js\").default} projection The projection\n   * @return {string|undefined} The tile URL\n   * @override\n   */\n  tileUrlFunction(tileCoord, pixelRatio, projection) {\n    let tileGrid = this.getTileGrid();\n    if (!tileGrid) {\n      tileGrid = this.getTileGridForProjection(projection);\n    }\n\n    if (tileGrid.getResolutions().length <= tileCoord[0]) {\n      return undefined;\n    }\n\n    if (pixelRatio != 1 && (!this.hidpi_ || this.serverType_ === undefined)) {\n      pixelRatio = 1;\n    }\n\n    const tileResolution = tileGrid.getResolution(tileCoord[0]);\n    let tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);\n\n    const gutter = this.gutter_;\n    if (gutter !== 0) {\n      tileExtent = buffer(tileExtent, tileResolution * gutter, tileExtent);\n    }\n\n    const baseParams = Object.assign(\n      {},\n      getRequestParams(this.params_, 'GetMap'),\n    );\n\n    return this.getRequestUrl_(\n      tileCoord,\n      tileExtent,\n      pixelRatio,\n      projection,\n      baseParams,\n    );\n  }\n}\n\nexport default TileWMS;\n","/**\n * @module ol/source/UrlTile\n */\nimport TileState from '../TileState.js';\nimport {createFromTemplates} from '../tileurlfunction.js';\nimport {expandUrl} from '../uri.js';\nimport {getUid} from '../util.js';\nimport TileSource, {TileSourceEvent} from './Tile.js';\nimport TileEventType from './TileEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection.\n * @property {import(\"./Source.js\").State} [state] State.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] TileGrid.\n * @property {import(\"../Tile.js\").LoadFunction} tileLoadFunction TileLoadFunction.\n * @property {number} [tilePixelRatio] TilePixelRatio.\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Deprecated.  Use an ImageTile source and provide a function\n * for the url option instead.\n * @property {string} [url] Url.\n * @property {Array<string>} [urls] Urls.\n * @property {boolean} [wrapX=true] WrapX.\n * @property {number} [transition] Transition.\n * @property {string} [key] Key.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0] ZDirection.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling.  By default,\n * the nearest neighbor is used when resampling.\n */\n\n/**\n * @deprecated Use the ol/source/ImageTile.js instead.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n */\nclass UrlTile extends TileSource {\n  /**\n   * @param {Options} options Image tile options.\n   */\n  constructor(options) {\n    super({\n      attributions: options.attributions,\n      cacheSize: options.cacheSize,\n      projection: options.projection,\n      state: options.state,\n      tileGrid: options.tileGrid,\n      tilePixelRatio: options.tilePixelRatio,\n      wrapX: options.wrapX,\n      transition: options.transition,\n      interpolate: options.interpolate,\n      key: options.key,\n      attributionsCollapsible: options.attributionsCollapsible,\n      zDirection: options.zDirection,\n    });\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.generateTileUrlFunction_ =\n      this.tileUrlFunction === UrlTile.prototype.tileUrlFunction;\n\n    /**\n     * @protected\n     * @type {import(\"../Tile.js\").LoadFunction}\n     */\n    this.tileLoadFunction = options.tileLoadFunction;\n\n    if (options.tileUrlFunction) {\n      this.tileUrlFunction = options.tileUrlFunction;\n    }\n\n    /**\n     * @protected\n     * @type {!Array<string>|null}\n     */\n    this.urls = null;\n\n    if (options.urls) {\n      this.setUrls(options.urls);\n    } else if (options.url) {\n      this.setUrl(options.url);\n    }\n\n    /**\n     * @private\n     * @type {!Object<string, boolean>}\n     */\n    this.tileLoadingKeys_ = {};\n  }\n\n  /**\n   * Deprecated.  Use an ImageTile source instead.\n   * Return the tile load function of the source.\n   * @return {import(\"../Tile.js\").LoadFunction} TileLoadFunction\n   * @api\n   */\n  getTileLoadFunction() {\n    return this.tileLoadFunction;\n  }\n\n  /**\n   * Deprecated.  Use an ImageTile source instead.\n   * Return the tile URL function of the source.\n   * @return {import(\"../Tile.js\").UrlFunction} TileUrlFunction\n   * @api\n   */\n  getTileUrlFunction() {\n    return Object.getPrototypeOf(this).tileUrlFunction === this.tileUrlFunction\n      ? this.tileUrlFunction.bind(this)\n      : this.tileUrlFunction;\n  }\n\n  /**\n   * Deprecated.  Use an ImageTile source instead.\n   * Return the URLs used for this source.\n   * When a tileUrlFunction is used instead of url or urls,\n   * null will be returned.\n   * @return {!Array<string>|null} URLs.\n   * @api\n   */\n  getUrls() {\n    return this.urls;\n  }\n\n  /**\n   * Handle tile change events.\n   * @param {import(\"../events/Event.js\").default} event Event.\n   * @protected\n   */\n  handleTileChange(event) {\n    const tile = /** @type {import(\"../Tile.js\").default} */ (event.target);\n    const uid = getUid(tile);\n    const tileState = tile.getState();\n    let type;\n    if (tileState == TileState.LOADING) {\n      this.tileLoadingKeys_[uid] = true;\n      type = TileEventType.TILELOADSTART;\n    } else if (uid in this.tileLoadingKeys_) {\n      delete this.tileLoadingKeys_[uid];\n      type =\n        tileState == TileState.ERROR\n          ? TileEventType.TILELOADERROR\n          : tileState == TileState.LOADED\n            ? TileEventType.TILELOADEND\n            : undefined;\n    }\n    if (type != undefined) {\n      this.dispatchEvent(new TileSourceEvent(type, tile));\n    }\n  }\n\n  /**\n   * Deprecated.  Use an ImageTile source instead.\n   * Set the tile load function of the source.\n   * @param {import(\"../Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n   * @api\n   */\n  setTileLoadFunction(tileLoadFunction) {\n    this.tileLoadFunction = tileLoadFunction;\n    this.changed();\n  }\n\n  /**\n   * Deprecated.  Use an ImageTile source instead.\n   * Set the tile URL function of the source.\n   * @param {import(\"../Tile.js\").UrlFunction} tileUrlFunction Tile URL function.\n   * @param {string} [key] Optional new tile key for the source.\n   * @api\n   */\n  setTileUrlFunction(tileUrlFunction, key) {\n    this.tileUrlFunction = tileUrlFunction;\n    if (typeof key !== 'undefined') {\n      this.setKey(key);\n    } else {\n      this.changed();\n    }\n  }\n\n  /**\n   * Set the URL to use for requests.\n   * @param {string} url URL.\n   * @api\n   */\n  setUrl(url) {\n    const urls = expandUrl(url);\n    this.urls = urls;\n    this.setUrls(urls);\n  }\n\n  /**\n   * Deprecated.  Use an ImageTile source instead.\n   * Set the URLs to use for requests.\n   * @param {Array<string>} urls URLs.\n   * @api\n   */\n  setUrls(urls) {\n    this.urls = urls;\n    const key = urls.join('\\n');\n    if (this.generateTileUrlFunction_) {\n      this.setTileUrlFunction(createFromTemplates(urls, this.tileGrid), key);\n    } else {\n      this.setKey(key);\n    }\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {string|undefined} Tile URL.\n   */\n  tileUrlFunction(tileCoord, pixelRatio, projection) {\n    return undefined;\n  }\n}\n\nexport default UrlTile;\n","/**\n * @module ol/loadingstrategy\n */\n\nimport {fromUserExtent, fromUserResolution, toUserExtent} from './proj.js';\n\n/**\n * Strategy function for loading all features with a single request.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array<import(\"./extent.js\").Extent>} Extents.\n * @api\n */\nexport function all(extent, resolution) {\n  return [[-Infinity, -Infinity, Infinity, Infinity]];\n}\n\n/**\n * Strategy function for loading features based on the view's extent and\n * resolution.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @return {Array<import(\"./extent.js\").Extent>} Extents.\n * @api\n */\nexport function bbox(extent, resolution) {\n  return [extent];\n}\n\n/**\n * Creates a strategy function for loading features based on a tile grid.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {function(import(\"./extent.js\").Extent, number, import(\"./proj.js\").Projection): Array<import(\"./extent.js\").Extent>} Loading strategy.\n * @api\n */\nexport function tile(tileGrid) {\n  return (\n    /**\n     * @param {import(\"./extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {import(\"./proj.js\").Projection} projection Projection.\n     * @return {Array<import(\"./extent.js\").Extent>} Extents.\n     */\n    function (extent, resolution, projection) {\n      const z = tileGrid.getZForResolution(\n        fromUserResolution(resolution, projection),\n      );\n      const tileRange = tileGrid.getTileRangeForExtentAndZ(\n        fromUserExtent(extent, projection),\n        z,\n      );\n      /** @type {Array<import(\"./extent.js\").Extent>} */\n      const extents = [];\n      /** @type {import(\"./tilecoord.js\").TileCoord} */\n      const tileCoord = [z, 0, 0];\n      for (\n        tileCoord[1] = tileRange.minX;\n        tileCoord[1] <= tileRange.maxX;\n        ++tileCoord[1]\n      ) {\n        for (\n          tileCoord[2] = tileRange.minY;\n          tileCoord[2] <= tileRange.maxY;\n          ++tileCoord[2]\n        ) {\n          extents.push(\n            toUserExtent(tileGrid.getTileCoordExtent(tileCoord), projection),\n          );\n        }\n      }\n      return extents;\n    }\n  );\n}\n","/**\n * @module ol/source/Vector\n */\n\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {extend} from '../array.js';\nimport {assert} from '../asserts.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport {containsExtent, getDifference, wrapAndSliceX} from '../extent.js';\nimport {xhr} from '../featureloader.js';\nimport {TRUE, VOID} from '../functions.js';\nimport {all as allStrategy} from '../loadingstrategy.js';\nimport {isEmpty} from '../obj.js';\nimport RenderFeature from '../render/Feature.js';\nimport RBush from '../structs/RBush.js';\nimport {getUid} from '../util.js';\nimport Source from './Source.js';\nimport VectorEventType from './VectorEventType.js';\n\n/**\n * A function that takes an {@link module:ol/extent~Extent} and a resolution as arguments, and\n * returns an array of {@link module:ol/extent~Extent} with the extents to load. Usually this\n * is one of the standard {@link module:ol/loadingstrategy} strategies.\n *\n * @typedef {function(import(\"../extent.js\").Extent, number, import(\"../proj/Projection.js\").default): Array<import(\"../extent.js\").Extent>} LoadingStrategy\n * @api\n */\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/source/Vector~VectorSource} instances are instances of this\n * type.\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n */\nexport class VectorSourceEvent extends Event {\n  /**\n   * @param {string} type Type.\n   * @param {FeatureType} [feature] Feature.\n   * @param {Array<FeatureType>} [features] Features.\n   */\n  constructor(type, feature, features) {\n    super(type);\n\n    /**\n     * The added or removed feature for the `ADDFEATURE` and `REMOVEFEATURE` events, `undefined` otherwise.\n     * @type {FeatureType|undefined}\n     * @api\n     */\n    this.feature = feature;\n\n    /**\n     * The loaded features for the `FEATURESLOADED` event, `undefined` otherwise.\n     * @type {Array<FeatureType>|undefined}\n     * @api\n     */\n    this.features = features;\n  }\n}\n\n/***\n * @template {import(\"../Feature.js\").FeatureLike} [T=import(\"../Feature.js\").default]\n * @typedef {T extends RenderFeature ? T|Array<T> : T} FeatureClassOrArrayOfRenderFeatures\n */\n\n/***\n * @template Return\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @typedef {import(\"../Observable.js\").OnSignature<import(\"../Observable.js\").EventTypes, import(\"../events/Event.js\").default, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"../ObjectEventType.js\").Types, import(\"../Object.js\").ObjectEvent, Return> &\n *   import(\"../Observable.js\").OnSignature<import(\"./VectorEventType.js\").VectorSourceEventTypes, VectorSourceEvent<FeatureType>, Return> &\n *   import(\"../Observable.js\").CombinedOnSignature<import(\"../Observable.js\").EventTypes|import(\"../ObjectEventType.js\").Types|\n *     import(\"./VectorEventType.js\").VectorSourceEventTypes, Return>} VectorSourceOnSignature\n */\n\n/**\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {Array<FeatureType>|Collection<FeatureType>} [features]\n * Features. If provided as {@link module:ol/Collection~Collection}, the features in the source\n * and the collection will stay in sync.\n * @property {import(\"../format/Feature.js\").default<FeatureType>} [format] The feature format used by the XHR\n * feature loader when `url` is set. Required if `url` is set, otherwise ignored.\n * @property {import(\"../featureloader.js\").FeatureLoader<FeatureType>} [loader]\n * The loader function used to load features, from a remote source for example.\n * If this is not set and `url` is set, the source will create and use an XHR\n * feature loader. The `'featuresloadend'` and `'featuresloaderror'` events\n * will only fire if the `success` and `failure` callbacks are used.\n *\n * Example:\n *\n * ```js\n * import Vector from 'ol/source/Vector.js';\n * import GeoJSON from 'ol/format/GeoJSON.js';\n * import {bbox} from 'ol/loadingstrategy.js';\n *\n * const vectorSource = new Vector({\n *   loader: async (extent, resolution, projection) => {\n *      const url = 'https://ahocevar.com/geoserver/wfs?service=WFS&' +\n *          'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +\n *          'outputFormat=application/json' +\n *          'bbox=' + extent.join(',') + ',' + projection.getCode();\n *      const response = await fetch(url);\n *      if (!response.ok) {\n *        throw new Error('Network response was not ok');\n *      }\n *      const json = await response.json();\n *      const features = new GeoJSON().readFeatures(json, {\n *        featureProjection: projection,\n *      });\n *      return features;\n *    },\n *    strategy: bbox,\n *  });\n * ```\n *\n * When you want to retry a failed request, use\n * ```js\n * vectorSource.removeLoadedExtent(extent);\n * vectorSource.changed();\n * ```\n *\n * @property {boolean} [overlaps=true] This source may have overlapping geometries.\n * Setting this to `false` (e.g. for sources with polygons that represent administrative\n * boundaries or TopoJSON sources) allows the renderer to optimise fill and\n * stroke operations.\n * @property {LoadingStrategy} [strategy] The loading strategy to use.\n * By default an {@link module:ol/loadingstrategy.all}\n * strategy is used, a one-off strategy which loads all features at once.\n * @property {string|import(\"../featureloader.js\").FeatureUrlFunction} [url]\n * Setting this option instructs the source to load features using an XHR loader\n * (see {@link module:ol/featureloader.xhr}). Use a `string` and an\n * {@link module:ol/loadingstrategy.all} for a one-off download of all features from\n * the given URL. Use a {@link module:ol/featureloader~FeatureUrlFunction} to generate the url with\n * other loading strategies.\n * Requires `format` to be set as well.\n * When default XHR feature loader is provided, the features will\n * be transformed from the data projection to the view projection\n * during parsing. If your remote data source does not advertise its projection\n * properly, this transformation will be incorrect. For some formats, the\n * default projection (usually EPSG:4326) can be overridden by setting the\n * dataProjection constructor option on the format.\n * Note that if a source contains non-feature data, such as a GeoJSON geometry\n * or a KML NetworkLink, these will be ignored. Use a custom loader to load these.\n * @property {boolean} [useSpatialIndex=true]\n * By default, an RTree is used as spatial index. When features are removed and\n * added frequently, and the total number of features is low, setting this to\n * `false` may improve performance.\n *\n * Note that\n * {@link module:ol/source/Vector~VectorSource#getFeaturesInExtent},\n * {@link module:ol/source/Vector~VectorSource#getClosestFeatureToCoordinate} and\n * {@link module:ol/source/Vector~VectorSource#getExtent} cannot be used when `useSpatialIndex` is\n * set to `false`, and {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent} will loop\n * through all features.\n *\n * When set to `false`, the features will be maintained in an\n * {@link module:ol/Collection~Collection}, which can be retrieved through\n * {@link module:ol/source/Vector~VectorSource#getFeaturesCollection}.\n * @property {boolean} [wrapX=true] Wrap the world horizontally. For vector editing across the\n * -180° and 180° meridians to work properly, this should be set to `false`. The\n * resulting geometry coordinates will then exceed the world bounds.\n */\n\n/**\n * @classdesc\n * Provides a source of features for vector layers. Vector features provided\n * by this source are suitable for editing. See {@link module:ol/source/VectorTile~VectorTile} for\n * vector data that is optimized for rendering.\n *\n * @fires VectorSourceEvent\n * @api\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../Feature.js\").default]\n */\nclass VectorSource extends Source {\n  /**\n   * @param {Options<FeatureType>} [options] Vector source options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    super({\n      attributions: options.attributions,\n      interpolate: true,\n      projection: undefined,\n      state: 'ready',\n      wrapX: options.wrapX !== undefined ? options.wrapX : true,\n    });\n\n    /***\n     * @type {VectorSourceOnSignature<import(\"../events.js\").EventsKey, FeatureType>}\n     */\n    this.on;\n\n    /***\n     * @type {VectorSourceOnSignature<import(\"../events.js\").EventsKey, FeatureType>}\n     */\n    this.once;\n\n    /***\n     * @type {VectorSourceOnSignature<void>}\n     */\n    this.un;\n\n    /**\n     * @private\n     * @type {import(\"../featureloader.js\").FeatureLoader<import(\"../Feature.js\").FeatureLike>}\n     */\n    this.loader_ = VOID;\n\n    /**\n     * @private\n     * @type {import(\"../format/Feature.js\").default<FeatureType>|null}\n     */\n    this.format_ = options.format || null;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.overlaps_ = options.overlaps === undefined ? true : options.overlaps;\n\n    /**\n     * @private\n     * @type {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined}\n     */\n    this.url_ = options.url;\n\n    if (options.loader !== undefined) {\n      this.loader_ = options.loader;\n    } else if (this.url_ !== undefined) {\n      assert(this.format_, '`format` must be set when `url` is set');\n      // create a XHR feature loader for \"url\" and \"format\"\n      this.loader_ = xhr(this.url_, this.format_);\n    }\n\n    /**\n     * @private\n     * @type {LoadingStrategy}\n     */\n    this.strategy_ =\n      options.strategy !== undefined ? options.strategy : allStrategy;\n\n    const useSpatialIndex =\n      options.useSpatialIndex !== undefined ? options.useSpatialIndex : true;\n\n    /**\n     * @private\n     * @type {RBush<FeatureType>}\n     */\n    this.featuresRtree_ = useSpatialIndex ? new RBush() : null;\n\n    /**\n     * @private\n     * @type {RBush<{extent: import(\"../extent.js\").Extent}>}\n     */\n    this.loadedExtentsRtree_ = new RBush();\n\n    /**\n     * @private\n     * @type {!Object<string, FeatureType>}\n     */\n    this.nullGeometryFeatures_ = {};\n\n    /**\n     * A lookup of features by id (the return from feature.getId()).\n     * @private\n     * @type {!Object<string, import('../Feature.js').FeatureLike|Array<import('../Feature.js').FeatureLike>>}\n     */\n    this.idIndex_ = {};\n\n    /**\n     * A lookup of features by uid (using getUid(feature)).\n     * @private\n     * @type {!Object<string, FeatureType>}\n     */\n    this.uidIndex_ = {};\n\n    /**\n     * @private\n     * @type {Object<string, Array<import(\"../events.js\").EventsKey>>}\n     */\n    this.featureChangeKeys_ = {};\n\n    /**\n     * @private\n     * @type {Collection<FeatureType>|null}\n     */\n    this.featuresCollection_ = null;\n\n    /** @type {Collection<FeatureType>} */\n    let collection;\n    /** @type {Array<FeatureType>} */\n    let features;\n    if (Array.isArray(options.features)) {\n      features = options.features;\n    } else if (options.features) {\n      collection = options.features;\n      features = collection.getArray();\n    }\n    if (!useSpatialIndex && collection === undefined) {\n      collection = new Collection(features);\n    }\n    if (features !== undefined) {\n      this.addFeaturesInternal(features);\n    }\n    if (collection !== undefined) {\n      this.bindFeaturesCollection_(collection);\n    }\n  }\n\n  /**\n   * Add a single feature to the source.  If you want to add a batch of features\n   * at once, call {@link module:ol/source/Vector~VectorSource#addFeatures #addFeatures()}\n   * instead. A feature will not be added to the source if feature with\n   * the same id is already there. The reason for this behavior is to avoid\n   * feature duplication when using bbox or tile loading strategies.\n   * Note: this also applies if a {@link module:ol/Collection~Collection} is used for features,\n   * meaning that if a feature with a duplicate id is added in the collection, it will\n   * be removed from it right away.\n   * @param {FeatureType} feature Feature to add.\n   * @api\n   */\n  addFeature(feature) {\n    this.addFeatureInternal(feature);\n    this.changed();\n  }\n\n  /**\n   * Add a feature without firing a `change` event.\n   * @param {FeatureType} feature Feature.\n   * @protected\n   */\n  addFeatureInternal(feature) {\n    const featureKey = getUid(feature);\n\n    if (!this.addToIndex_(featureKey, feature)) {\n      if (this.featuresCollection_) {\n        this.featuresCollection_.remove(feature);\n      }\n      return;\n    }\n\n    this.setupChangeEvents_(featureKey, feature);\n\n    const geometry = feature.getGeometry();\n    if (geometry) {\n      const extent = geometry.getExtent();\n      if (this.featuresRtree_) {\n        this.featuresRtree_.insert(extent, feature);\n      }\n    } else {\n      this.nullGeometryFeatures_[featureKey] = feature;\n    }\n\n    this.dispatchEvent(\n      new VectorSourceEvent(VectorEventType.ADDFEATURE, feature),\n    );\n  }\n\n  /**\n   * @param {string} featureKey Unique identifier for the feature.\n   * @param {FeatureType} feature The feature.\n   * @private\n   */\n  setupChangeEvents_(featureKey, feature) {\n    if (feature instanceof RenderFeature) {\n      return;\n    }\n    this.featureChangeKeys_[featureKey] = [\n      listen(feature, EventType.CHANGE, this.handleFeatureChange_, this),\n      listen(\n        feature,\n        ObjectEventType.PROPERTYCHANGE,\n        this.handleFeatureChange_,\n        this,\n      ),\n    ];\n  }\n\n  /**\n   * @param {string} featureKey Unique identifier for the feature.\n   * @param {FeatureType} feature The feature.\n   * @return {boolean} The feature is \"valid\", in the sense that it is also a\n   *     candidate for insertion into the Rtree.\n   * @private\n   */\n  addToIndex_(featureKey, feature) {\n    let valid = true;\n    if (feature.getId() !== undefined) {\n      const id = String(feature.getId());\n      if (!(id in this.idIndex_)) {\n        this.idIndex_[id] = feature;\n      } else if (feature instanceof RenderFeature) {\n        const indexedFeature = this.idIndex_[id];\n        if (!(indexedFeature instanceof RenderFeature)) {\n          valid = false;\n        } else if (!Array.isArray(indexedFeature)) {\n          this.idIndex_[id] = [indexedFeature, feature];\n        } else {\n          indexedFeature.push(feature);\n        }\n      } else {\n        valid = false;\n      }\n    }\n    if (valid) {\n      assert(\n        !(featureKey in this.uidIndex_),\n        'The passed `feature` was already added to the source',\n      );\n      this.uidIndex_[featureKey] = feature;\n    }\n    return valid;\n  }\n\n  /**\n   * Add a batch of features to the source.\n   * @param {Array<FeatureType>} features Features to add.\n   * @api\n   */\n  addFeatures(features) {\n    this.addFeaturesInternal(features);\n    this.changed();\n  }\n\n  /**\n   * Add features without firing a `change` event.\n   * @param {Array<FeatureType>} features Features.\n   * @protected\n   */\n  addFeaturesInternal(features) {\n    const extents = [];\n    /** @type {Array<FeatureType>} */\n    const newFeatures = [];\n    /** @type {Array<FeatureType>} */\n    const geometryFeatures = [];\n\n    for (let i = 0, length = features.length; i < length; i++) {\n      const feature = features[i];\n      const featureKey = getUid(feature);\n      if (this.addToIndex_(featureKey, feature)) {\n        newFeatures.push(feature);\n      }\n    }\n\n    for (let i = 0, length = newFeatures.length; i < length; i++) {\n      const feature = newFeatures[i];\n      const featureKey = getUid(feature);\n      this.setupChangeEvents_(featureKey, feature);\n\n      const geometry = feature.getGeometry();\n      if (geometry) {\n        const extent = geometry.getExtent();\n        extents.push(extent);\n        geometryFeatures.push(feature);\n      } else {\n        this.nullGeometryFeatures_[featureKey] = feature;\n      }\n    }\n    if (this.featuresRtree_) {\n      this.featuresRtree_.load(extents, geometryFeatures);\n    }\n\n    if (this.hasListener(VectorEventType.ADDFEATURE)) {\n      for (let i = 0, length = newFeatures.length; i < length; i++) {\n        this.dispatchEvent(\n          new VectorSourceEvent(VectorEventType.ADDFEATURE, newFeatures[i]),\n        );\n      }\n    }\n  }\n\n  /**\n   * @param {!Collection<FeatureType>} collection Collection.\n   * @private\n   */\n  bindFeaturesCollection_(collection) {\n    let modifyingCollection = false;\n    this.addEventListener(\n      VectorEventType.ADDFEATURE,\n      /**\n       * @param {VectorSourceEvent<FeatureType>} evt The vector source event\n       */\n      function (evt) {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          collection.push(evt.feature);\n          modifyingCollection = false;\n        }\n      },\n    );\n    this.addEventListener(\n      VectorEventType.REMOVEFEATURE,\n      /**\n       * @param {VectorSourceEvent<FeatureType>} evt The vector source event\n       */\n      function (evt) {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          collection.remove(evt.feature);\n          modifyingCollection = false;\n        }\n      },\n    );\n    collection.addEventListener(\n      CollectionEventType.ADD,\n      /**\n       * @param {import(\"../Collection.js\").CollectionEvent<FeatureType>} evt The collection event\n       */\n      (evt) => {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          this.addFeature(evt.element);\n          modifyingCollection = false;\n        }\n      },\n    );\n    collection.addEventListener(\n      CollectionEventType.REMOVE,\n      /**\n       * @param {import(\"../Collection.js\").CollectionEvent<FeatureType>} evt The collection event\n       */\n      (evt) => {\n        if (!modifyingCollection) {\n          modifyingCollection = true;\n          this.removeFeature(evt.element);\n          modifyingCollection = false;\n        }\n      },\n    );\n    this.featuresCollection_ = collection;\n  }\n\n  /**\n   * Remove all features from the source.\n   * @param {boolean} [fast] Skip dispatching of {@link module:ol/source/Vector.VectorSourceEvent#event:removefeature} events.\n   * @api\n   */\n  clear(fast) {\n    if (fast) {\n      for (const featureId in this.featureChangeKeys_) {\n        const keys = this.featureChangeKeys_[featureId];\n        keys.forEach(unlistenByKey);\n      }\n      if (!this.featuresCollection_) {\n        this.featureChangeKeys_ = {};\n        this.idIndex_ = {};\n        this.uidIndex_ = {};\n      }\n    } else {\n      if (this.featuresRtree_) {\n        this.featuresRtree_.forEach((feature) => {\n          this.removeFeatureInternal(feature);\n        });\n        for (const id in this.nullGeometryFeatures_) {\n          this.removeFeatureInternal(this.nullGeometryFeatures_[id]);\n        }\n      }\n    }\n    if (this.featuresCollection_) {\n      this.featuresCollection_.clear();\n    }\n\n    if (this.featuresRtree_) {\n      this.featuresRtree_.clear();\n    }\n    this.nullGeometryFeatures_ = {};\n\n    const clearEvent = new VectorSourceEvent(VectorEventType.CLEAR);\n    this.dispatchEvent(clearEvent);\n    this.changed();\n  }\n\n  /**\n   * Iterate through all features on the source, calling the provided callback\n   * with each one.  If the callback returns any \"truthy\" value, iteration will\n   * stop and the function will return the same value.\n   * Note: this function only iterate through the feature that have a defined geometry.\n   *\n   * @param {function(FeatureType): T} callback Called with each feature\n   *     on the source.  Return a truthy value to stop iteration.\n   * @return {T|undefined} The return value from the last call to the callback.\n   * @template T\n   * @api\n   */\n  forEachFeature(callback) {\n    if (this.featuresRtree_) {\n      return this.featuresRtree_.forEach(callback);\n    }\n    if (this.featuresCollection_) {\n      this.featuresCollection_.forEach(callback);\n    }\n  }\n\n  /**\n   * Iterate through all features whose geometries contain the provided\n   * coordinate, calling the callback with each feature.  If the callback returns\n   * a \"truthy\" value, iteration will stop and the function will return the same\n   * value.\n   *\n   * For {@link module:ol/render/Feature~RenderFeature} features, the callback will be\n   * called for all features.\n   *\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {function(FeatureType): T} callback Called with each feature\n   *     whose goemetry contains the provided coordinate.\n   * @return {T|undefined} The return value from the last call to the callback.\n   * @template T\n   */\n  forEachFeatureAtCoordinateDirect(coordinate, callback) {\n    const extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];\n    return this.forEachFeatureInExtent(extent, function (feature) {\n      const geometry = feature.getGeometry();\n      if (\n        geometry instanceof RenderFeature ||\n        geometry.intersectsCoordinate(coordinate)\n      ) {\n        return callback(feature);\n      }\n      return undefined;\n    });\n  }\n\n  /**\n   * Iterate through all features whose bounding box intersects the provided\n   * extent (note that the feature's geometry may not intersect the extent),\n   * calling the callback with each feature.  If the callback returns a \"truthy\"\n   * value, iteration will stop and the function will return the same value.\n   *\n   * If you are interested in features whose geometry intersects an extent, call\n   * the {@link module:ol/source/Vector~VectorSource#forEachFeatureIntersectingExtent #forEachFeatureIntersectingExtent()} method instead.\n   *\n   * When `useSpatialIndex` is set to false, this method will loop through all\n   * features, equivalent to {@link module:ol/source/Vector~VectorSource#forEachFeature #forEachFeature()}.\n   *\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {function(FeatureType): T} callback Called with each feature\n   *     whose bounding box intersects the provided extent.\n   * @return {T|undefined} The return value from the last call to the callback.\n   * @template T\n   * @api\n   */\n  forEachFeatureInExtent(extent, callback) {\n    if (this.featuresRtree_) {\n      return this.featuresRtree_.forEachInExtent(extent, callback);\n    }\n    if (this.featuresCollection_) {\n      this.featuresCollection_.forEach(callback);\n    }\n  }\n\n  /**\n   * Iterate through all features whose geometry intersects the provided extent,\n   * calling the callback with each feature.  If the callback returns a \"truthy\"\n   * value, iteration will stop and the function will return the same value.\n   *\n   * If you only want to test for bounding box intersection, call the\n   * {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent #forEachFeatureInExtent()} method instead.\n   *\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {function(FeatureType): T} callback Called with each feature\n   *     whose geometry intersects the provided extent.\n   * @return {T|undefined} The return value from the last call to the callback.\n   * @template T\n   * @api\n   */\n  forEachFeatureIntersectingExtent(extent, callback) {\n    return this.forEachFeatureInExtent(\n      extent,\n      /**\n       * @param {FeatureType} feature Feature.\n       * @return {T|undefined} The return value from the last call to the callback.\n       */\n      function (feature) {\n        const geometry = feature.getGeometry();\n        if (\n          geometry instanceof RenderFeature ||\n          geometry.intersectsExtent(extent)\n        ) {\n          const result = callback(feature);\n          if (result) {\n            return result;\n          }\n        }\n      },\n    );\n  }\n\n  /**\n   * Get the features collection associated with this source. Will be `null`\n   * unless the source was configured with `useSpatialIndex` set to `false`, or\n   * with a {@link module:ol/Collection~Collection} as `features`.\n   * @return {Collection<FeatureType>|null} The collection of features.\n   * @api\n   */\n  getFeaturesCollection() {\n    return this.featuresCollection_;\n  }\n\n  /**\n   * Get a snapshot of the features currently on the source in random order. The returned array\n   * is a copy, the features are references to the features in the source.\n   * @return {Array<FeatureType>} Features.\n   * @api\n   */\n  getFeatures() {\n    let features;\n    if (this.featuresCollection_) {\n      features = this.featuresCollection_.getArray().slice(0);\n    } else if (this.featuresRtree_) {\n      features = this.featuresRtree_.getAll();\n      if (!isEmpty(this.nullGeometryFeatures_)) {\n        extend(features, Object.values(this.nullGeometryFeatures_));\n      }\n    }\n    return features;\n  }\n\n  /**\n   * Get all features whose geometry intersects the provided coordinate.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @return {Array<FeatureType>} Features.\n   * @api\n   */\n  getFeaturesAtCoordinate(coordinate) {\n    /** @type {Array<FeatureType>} */\n    const features = [];\n    this.forEachFeatureAtCoordinateDirect(coordinate, function (feature) {\n      features.push(feature);\n    });\n    return features;\n  }\n\n  /**\n   * Get all features whose bounding box intersects the provided extent.  Note that this returns an array of\n   * all features intersecting the given extent in random order (so it may include\n   * features whose geometries do not intersect the extent).\n   *\n   * When `useSpatialIndex` is set to false, this method will return all\n   * features.\n   *\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {import(\"../proj/Projection.js\").default} [projection] Include features\n   * where `extent` exceeds the x-axis bounds of `projection` and wraps around the world.\n   * @return {Array<FeatureType>} Features.\n   * @api\n   */\n  getFeaturesInExtent(extent, projection) {\n    if (this.featuresRtree_) {\n      const multiWorld = projection && projection.canWrapX() && this.getWrapX();\n\n      if (!multiWorld) {\n        return this.featuresRtree_.getInExtent(extent);\n      }\n\n      const extents = wrapAndSliceX(extent, projection);\n\n      return [].concat(\n        ...extents.map((anExtent) => this.featuresRtree_.getInExtent(anExtent)),\n      );\n    }\n    if (this.featuresCollection_) {\n      return this.featuresCollection_.getArray().slice(0);\n    }\n    return [];\n  }\n\n  /**\n   * Get the closest feature to the provided coordinate.\n   *\n   * This method is not available when the source is configured with\n   * `useSpatialIndex` set to `false` and the features in this source are of type\n   * {@link module:ol/Feature~Feature}.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {function(FeatureType):boolean} [filter] Feature filter function.\n   *     The filter function will receive one argument, the {@link module:ol/Feature~Feature feature}\n   *     and it should return a boolean value. By default, no filtering is made.\n   * @return {FeatureType|null} Closest feature (or `null` if none found).\n   * @api\n   */\n  getClosestFeatureToCoordinate(coordinate, filter) {\n    // Find the closest feature using branch and bound.  We start searching an\n    // infinite extent, and find the distance from the first feature found.  This\n    // becomes the closest feature.  We then compute a smaller extent which any\n    // closer feature must intersect.  We continue searching with this smaller\n    // extent, trying to find a closer feature.  Every time we find a closer\n    // feature, we update the extent being searched so that any even closer\n    // feature must intersect it.  We continue until we run out of features.\n    const x = coordinate[0];\n    const y = coordinate[1];\n    let closestFeature = null;\n    const closestPoint = [NaN, NaN];\n    let minSquaredDistance = Infinity;\n    const extent = [-Infinity, -Infinity, Infinity, Infinity];\n    filter = filter ? filter : TRUE;\n    this.featuresRtree_.forEachInExtent(\n      extent,\n      /**\n       * @param {FeatureType} feature Feature.\n       */\n      function (feature) {\n        if (filter(feature)) {\n          const geometry = feature.getGeometry();\n          const previousMinSquaredDistance = minSquaredDistance;\n          minSquaredDistance =\n            geometry instanceof RenderFeature\n              ? 0\n              : geometry.closestPointXY(x, y, closestPoint, minSquaredDistance);\n          if (minSquaredDistance < previousMinSquaredDistance) {\n            closestFeature = feature;\n            // This is sneaky.  Reduce the extent that it is currently being\n            // searched while the R-Tree traversal using this same extent object\n            // is still in progress.  This is safe because the new extent is\n            // strictly contained by the old extent.\n            const minDistance = Math.sqrt(minSquaredDistance);\n            extent[0] = x - minDistance;\n            extent[1] = y - minDistance;\n            extent[2] = x + minDistance;\n            extent[3] = y + minDistance;\n          }\n        }\n      },\n    );\n    return closestFeature;\n  }\n\n  /**\n   * Get the extent of the features currently in the source.\n   *\n   * This will return `null` when the source is configured with\n   * `useSpatialIndex` set to `false`.\n   * @param {import(\"../extent.js\").Extent} [extent] Destination extent. If provided, no new extent\n   *     will be created. Instead, that extent's coordinates will be overwritten.\n   * @return {import(\"../extent.js\").Extent | null} Extent.\n   * @api\n   */\n  getExtent(extent) {\n    return this.featuresRtree_?.getExtent(extent) ?? null;\n  }\n\n  /**\n   * Get a feature by its identifier (the value returned by feature.getId()). When `RenderFeature`s\n   * are used, `getFeatureById()` can return an array of `RenderFeature`s. This allows for handling\n   * of `GeometryCollection` geometries, where format readers create one `RenderFeature` per\n   * `GeometryCollection` member.\n   * Note that the index treats string and numeric identifiers as the same.  So\n   * `source.getFeatureById(2)` will return a feature with id `'2'` or `2`.\n   *\n   * @param {string|number} id Feature identifier.\n   * @return {FeatureClassOrArrayOfRenderFeatures<FeatureType>|null} The feature (or `null` if not found).\n   * @api\n   */\n  getFeatureById(id) {\n    const feature = this.idIndex_[id.toString()];\n    return feature !== undefined\n      ? /** @type {FeatureClassOrArrayOfRenderFeatures<FeatureType>} */ (\n          feature\n        )\n      : null;\n  }\n\n  /**\n   * Get a feature by its internal unique identifier (using `getUid`).\n   *\n   * @param {string} uid Feature identifier.\n   * @return {FeatureType|null} The feature (or `null` if not found).\n   */\n  getFeatureByUid(uid) {\n    const feature = this.uidIndex_[uid];\n    return feature !== undefined ? feature : null;\n  }\n\n  /**\n   * Get the format associated with this source.\n   *\n   * @return {import(\"../format/Feature.js\").default<FeatureType>|null}} The feature format.\n   * @api\n   */\n  getFormat() {\n    return this.format_;\n  }\n\n  /**\n   * @return {boolean} The source can have overlapping geometries.\n   */\n  getOverlaps() {\n    return this.overlaps_;\n  }\n\n  /**\n   * Get the url associated with this source.\n   *\n   * @return {string|import(\"../featureloader.js\").FeatureUrlFunction|undefined} The url.\n   * @api\n   */\n  getUrl() {\n    return this.url_;\n  }\n\n  /**\n   * @param {Event} event Event.\n   * @private\n   */\n  handleFeatureChange_(event) {\n    const feature = /** @type {FeatureType} */ (event.target);\n    const featureKey = getUid(feature);\n    const geometry = feature.getGeometry();\n    if (!geometry) {\n      if (!(featureKey in this.nullGeometryFeatures_)) {\n        if (this.featuresRtree_) {\n          this.featuresRtree_.remove(feature);\n        }\n        this.nullGeometryFeatures_[featureKey] = feature;\n      }\n    } else {\n      const extent = geometry.getExtent();\n      if (featureKey in this.nullGeometryFeatures_) {\n        delete this.nullGeometryFeatures_[featureKey];\n        if (this.featuresRtree_) {\n          this.featuresRtree_.insert(extent, feature);\n        }\n      } else {\n        if (this.featuresRtree_) {\n          this.featuresRtree_.update(extent, feature);\n        }\n      }\n    }\n    const id = feature.getId();\n    if (id !== undefined) {\n      const sid = id.toString();\n      if (this.idIndex_[sid] !== feature) {\n        this.removeFromIdIndex_(feature);\n        this.idIndex_[sid] = feature;\n      }\n    } else {\n      this.removeFromIdIndex_(feature);\n      this.uidIndex_[featureKey] = feature;\n    }\n    this.changed();\n    this.dispatchEvent(\n      new VectorSourceEvent(VectorEventType.CHANGEFEATURE, feature),\n    );\n  }\n\n  /**\n   * Returns true if the feature is contained within the source.\n   * @param {FeatureType} feature Feature.\n   * @return {boolean} Has feature.\n   * @api\n   */\n  hasFeature(feature) {\n    const id = feature.getId();\n    if (id !== undefined) {\n      const indexed = this.idIndex_[String(id)];\n      if (Array.isArray(indexed)) {\n        return indexed.includes(feature);\n      }\n      return indexed === feature;\n    }\n    return getUid(feature) in this.uidIndex_;\n  }\n\n  /**\n   * @return {boolean} Is empty.\n   */\n  isEmpty() {\n    if (this.featuresRtree_) {\n      return (\n        this.featuresRtree_.isEmpty() && isEmpty(this.nullGeometryFeatures_)\n      );\n    }\n    if (this.featuresCollection_) {\n      return this.featuresCollection_.getLength() === 0;\n    }\n    return true;\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} resolution Resolution.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   */\n  loadFeatures(extent, resolution, projection) {\n    const loadedExtentsRtree = this.loadedExtentsRtree_;\n    const extentsToLoad = this.strategy_(extent, resolution, projection);\n    for (let i = 0, ii = extentsToLoad.length; i < ii; ++i) {\n      const extentToLoad = extentsToLoad[i];\n      const alreadyLoaded = loadedExtentsRtree.forEachInExtent(\n        extentToLoad,\n        /**\n         * @param {{extent: import(\"../extent.js\").Extent}} object Object.\n         * @return {boolean} Contains.\n         */\n        function (object) {\n          return containsExtent(object.extent, extentToLoad);\n        },\n      );\n      if (!alreadyLoaded) {\n        this.loading = Number(this.loading) + 1;\n        this.dispatchEvent(\n          new VectorSourceEvent(VectorEventType.FEATURESLOADSTART),\n        );\n\n        /**\n         * @param {Array<FeatureType>} features Loaded features\n         */\n        const success = (features) => {\n          this.loading = Number(this.loading) - 1;\n          this.dispatchEvent(\n            new VectorSourceEvent(\n              VectorEventType.FEATURESLOADEND,\n              undefined,\n              features,\n            ),\n          );\n        };\n\n        const failure = () => {\n          this.changed();\n          this.loading = Number(this.loading) - 1;\n          this.dispatchEvent(\n            new VectorSourceEvent(VectorEventType.FEATURESLOADERROR),\n          );\n        };\n\n        //TODO Remove this when the deprecatedsuccess and failure arguments are removed\n        let disableCallbacks = false;\n\n        const loaded = this.loader_.call(\n          this,\n          extentToLoad,\n          resolution,\n          projection,\n          (features) => disableCallbacks || success(features),\n          () => disableCallbacks || failure(),\n        );\n        if (loaded instanceof Promise) {\n          //TODO Remove this when the deprecatedsuccess and failure arguments are removed\n          disableCallbacks = true;\n          loaded\n            .then((features) => {\n              this.addFeatures(features);\n              success(features);\n            })\n            .catch(failure);\n        } else if (this.loader_.length < 4) {\n          this.loading = false;\n        }\n        loadedExtentsRtree.insert(extentToLoad, {extent: extentToLoad.slice()});\n      }\n    }\n  }\n\n  /**\n   * @override\n   */\n  refresh() {\n    this.clear(true);\n    this.loadedExtentsRtree_.clear();\n    super.refresh();\n  }\n\n  /**\n   * Marks an extent as not loaded, preserving any loaded areas outside it.\n   *\n   * Any previously loaded extent overlapping the given extent is split into its\n   * remaining non-overlapping parts using {@link module:ol/extent~getDifference getDifference()},\n   * which are then re-inserted into the tree.\n   *\n   * @param {import(\"../extent.js\").Extent} extent Extent to mark as not loaded.\n   * @api\n   */\n  removeLoadedExtent(extent) {\n    const loadedExtentsRtree = this.loadedExtentsRtree_;\n    const intersectingExtents = [];\n    loadedExtentsRtree.forEachInExtent(extent, function (object) {\n      intersectingExtents.push(object);\n    });\n    intersectingExtents.forEach((intersectingExtent) => {\n      loadedExtentsRtree.remove(intersectingExtent);\n      const remainders = getDifference(intersectingExtent.extent, extent);\n      for (const remainder of remainders) {\n        loadedExtentsRtree.insert(remainder, {extent: remainder});\n      }\n    });\n  }\n\n  /**\n   * Batch remove features from the source.  If you want to remove all features\n   * at once, use the {@link module:ol/source/Vector~VectorSource#clear #clear()} method\n   * instead.\n   * @param {Array<FeatureType>} features Features to remove.\n   * @api\n   */\n  removeFeatures(features) {\n    let removed = false;\n    for (let i = 0, ii = features.length; i < ii; ++i) {\n      removed = this.removeFeatureInternal(features[i]) || removed;\n    }\n    if (removed) {\n      this.changed();\n    }\n  }\n\n  /**\n   * Remove a single feature from the source. If you want to batch remove\n   * features, use the {@link module:ol/source/Vector~VectorSource#removeFeatures #removeFeatures()} method\n   * instead.\n   * @param {FeatureType} feature Feature to remove.\n   * @api\n   */\n  removeFeature(feature) {\n    if (!feature) {\n      return;\n    }\n    const removed = this.removeFeatureInternal(feature);\n    if (removed) {\n      this.changed();\n    }\n  }\n\n  /**\n   * Remove feature without firing a `change` event.\n   * @param {FeatureType} feature Feature.\n   * @return {boolean} True if the feature was removed, false if it was not found.\n   * @protected\n   */\n  removeFeatureInternal(feature) {\n    const featureKey = getUid(feature);\n    if (!(featureKey in this.uidIndex_)) {\n      return false;\n    }\n\n    if (featureKey in this.nullGeometryFeatures_) {\n      delete this.nullGeometryFeatures_[featureKey];\n    } else {\n      if (this.featuresRtree_) {\n        this.featuresRtree_.remove(feature);\n      }\n    }\n\n    const featureChangeKeys = this.featureChangeKeys_[featureKey];\n    featureChangeKeys?.forEach(unlistenByKey);\n    delete this.featureChangeKeys_[featureKey];\n\n    const id = feature.getId();\n    if (id !== undefined) {\n      const idString = id.toString();\n      const indexedFeature = this.idIndex_[idString];\n      if (indexedFeature === feature) {\n        delete this.idIndex_[idString];\n      } else if (Array.isArray(indexedFeature)) {\n        indexedFeature.splice(indexedFeature.indexOf(feature), 1);\n        if (indexedFeature.length === 1) {\n          this.idIndex_[idString] = indexedFeature[0];\n        }\n      }\n    }\n    delete this.uidIndex_[featureKey];\n    if (this.hasListener(VectorEventType.REMOVEFEATURE)) {\n      this.dispatchEvent(\n        new VectorSourceEvent(VectorEventType.REMOVEFEATURE, feature),\n      );\n    }\n    return true;\n  }\n\n  /**\n   * Remove a feature from the id index.  Called internally when the feature id\n   * may have changed.\n   * @param {FeatureType} feature The feature.\n   * @private\n   */\n  removeFromIdIndex_(feature) {\n    for (const id in this.idIndex_) {\n      if (this.idIndex_[id] === feature) {\n        delete this.idIndex_[id];\n        break;\n      }\n    }\n  }\n\n  /**\n   * Set the new loader of the source. The next render cycle will use the\n   * new loader.\n   * @param {import(\"../featureloader.js\").FeatureLoader} loader The loader to set.\n   * @api\n   */\n  setLoader(loader) {\n    this.loader_ = loader;\n  }\n\n  /**\n   * Points the source to a new url. The next render cycle will use the new url.\n   * @param {string|import(\"../featureloader.js\").FeatureUrlFunction} url Url.\n   * @api\n   */\n  setUrl(url) {\n    assert(this.format_, '`format` must be set when `url` is set');\n    this.url_ = url;\n    this.setLoader(xhr(url, this.format_));\n  }\n\n  /**\n   * @param {boolean} overlaps The source can have overlapping geometries.\n   */\n  setOverlaps(overlaps) {\n    this.overlaps_ = overlaps;\n    this.changed();\n  }\n}\n\nexport default VectorSource;\n","/**\n * @module ol/source/VectorEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  /**\n   * Triggered when a feature is added to the source.\n   * @event module:ol/source/Vector.VectorSourceEvent#addfeature\n   * @api\n   */\n  ADDFEATURE: 'addfeature',\n\n  /**\n   * Triggered when a feature is updated.\n   * @event module:ol/source/Vector.VectorSourceEvent#changefeature\n   * @api\n   */\n  CHANGEFEATURE: 'changefeature',\n\n  /**\n   * Triggered when the clear method is called on the source.\n   * @event module:ol/source/Vector.VectorSourceEvent#clear\n   * @api\n   */\n  CLEAR: 'clear',\n\n  /**\n   * Triggered when a feature is removed from the source.\n   * See {@link module:ol/source/Vector~VectorSource#clear source.clear()} for exceptions.\n   * @event module:ol/source/Vector.VectorSourceEvent#removefeature\n   * @api\n   */\n  REMOVEFEATURE: 'removefeature',\n\n  /**\n   * Triggered when features starts loading.\n   * @event module:ol/source/Vector.VectorSourceEvent#featuresloadstart\n   * @api\n   */\n  FEATURESLOADSTART: 'featuresloadstart',\n\n  /**\n   * Triggered when features finishes loading.\n   * @event module:ol/source/Vector.VectorSourceEvent#featuresloadend\n   * @api\n   */\n  FEATURESLOADEND: 'featuresloadend',\n\n  /**\n   * Triggered if feature loading results in an error.\n   * @event module:ol/source/Vector.VectorSourceEvent#featuresloaderror\n   * @api\n   */\n  FEATURESLOADERROR: 'featuresloaderror',\n};\n\n/**\n * @typedef {'addfeature'|'changefeature'|'clear'|'removefeature'|'featuresloadstart'|'featuresloadend'|'featuresloaderror'} VectorSourceEventTypes\n */\n","/**\n * @module ol/VectorRenderTile\n */\nimport Tile from './Tile.js';\nimport {createCanvasContext2D, releaseCanvas} from './dom.js';\nimport {getUid} from './util.js';\n\n/**\n * @typedef {Object} ReplayState\n * @property {boolean} dirty Dirty.\n * @property {null|import(\"./render.js\").OrderFunction} renderedRenderOrder RenderedRenderOrder.\n * @property {number} renderedTileRevision RenderedTileRevision.\n * @property {number} renderedResolution RenderedResolution.\n * @property {number} renderedPixelRatio RenderedPixelRatio.\n * @property {number} renderedRevision RenderedRevision.\n * @property {number} renderedTileResolution RenderedTileResolution.\n * @property {number} renderedTileZ RenderedTileZ.\n */\n\n/**\n * @type {Array<HTMLCanvasElement|OffscreenCanvas>}\n */\nconst canvasPool = [];\n\nclass VectorRenderTile extends Tile {\n  /**\n   * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"./TileState.js\").default} state State.\n   * @param {import(\"./tilecoord.js\").TileCoord} urlTileCoord Wrapped tile coordinate for source urls.\n   * @param {function(VectorRenderTile):Array<import(\"./VectorTile.js\").default>} getSourceTiles Function.\n   * @param {function(VectorRenderTile):void} removeSourceTiles Function.\n   */\n  constructor(\n    tileCoord,\n    state,\n    urlTileCoord,\n    getSourceTiles,\n    removeSourceTiles,\n  ) {\n    super(tileCoord, state, {transition: 0});\n\n    /**\n     * @private\n     * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D|null}\n     */\n    this.context_ = null;\n\n    /**\n     * Executor groups. Read/written by the renderer.\n     * @type {Object<string, Array<import(\"./render/canvas/ExecutorGroup.js\").default>>}\n     */\n    this.executorGroups = {};\n\n    /**\n     * Number of loading source tiles. Read/written by the source.\n     * @type {number}\n     */\n    this.loadingSourceTiles = 0;\n\n    /**\n     * @type {Object<string, ImageData>}\n     */\n    this.hitDetectionImageData = {};\n\n    /**\n     * @private\n     * @type {!Object<string, ReplayState>}\n     */\n    this.replayState_ = {};\n\n    /**\n     * @type {Array<import(\"./VectorTile.js\").default>}\n     */\n    this.sourceTiles = [];\n\n    /**\n     * @type {Object<string, boolean>}\n     */\n    this.errorTileKeys = {};\n\n    /**\n     * @type {number}\n     */\n    this.wantedResolution;\n\n    /**\n     * @type {!function():Array<import(\"./VectorTile.js\").default>}\n     */\n    this.getSourceTiles = getSourceTiles.bind(undefined, this);\n\n    /**\n     * @type {!function(VectorRenderTile):void}\n     * @private\n     */\n    this.removeSourceTiles_ = removeSourceTiles;\n\n    /**\n     * @type {import(\"./tilecoord.js\").TileCoord}\n     */\n    this.wrappedTileCoord = urlTileCoord;\n  }\n\n  /**\n   * @return {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} The rendering context.\n   */\n  getContext() {\n    if (!this.context_) {\n      this.context_ = createCanvasContext2D(1, 1, canvasPool);\n    }\n    return this.context_;\n  }\n\n  /**\n   * @return {boolean} Tile has a rendering context.\n   */\n  hasContext() {\n    return !!this.context_;\n  }\n\n  /**\n   * Get the Canvas for this tile.\n   * @return {HTMLCanvasElement|OffscreenCanvas} Canvas.\n   */\n  getImage() {\n    return this.hasContext() ? this.getContext().canvas : null;\n  }\n\n  /**\n   * @param {import(\"./layer/Layer.js\").default} layer Layer.\n   * @return {ReplayState} The replay state.\n   */\n  getReplayState(layer) {\n    const key = getUid(layer);\n    if (!(key in this.replayState_)) {\n      this.replayState_[key] = {\n        dirty: false,\n        renderedRenderOrder: null,\n        renderedResolution: NaN,\n        renderedPixelRatio: NaN,\n        renderedRevision: -1,\n        renderedTileResolution: NaN,\n        renderedTileRevision: -1,\n        renderedTileZ: -1,\n      };\n    }\n    return this.replayState_[key];\n  }\n\n  /**\n   * Load the tile.\n   * @override\n   */\n  load() {\n    this.getSourceTiles();\n  }\n\n  /**\n   * Remove from the cache due to expiry\n   * @override\n   */\n  release() {\n    if (this.context_) {\n      releaseCanvas(this.context_);\n      canvasPool.push(this.context_.canvas);\n      this.context_ = null;\n    }\n    this.removeSourceTiles_(this);\n    this.sourceTiles.length = 0;\n    super.release();\n  }\n}\n\nexport default VectorRenderTile;\n","/**\n * @module ol/VectorTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\n\n/**\n * @template {import('./Feature.js').FeatureLike} FeatureType\n */\nclass VectorTile extends Tile {\n  /**\n   * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"./TileState.js\").default} state State.\n   * @param {string} src Data source url.\n   * @param {import(\"./format/Feature.js\").default<FeatureType>} format Feature format.\n   * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n   * @param {import(\"./Tile.js\").Options} [options] Tile options.\n   */\n  constructor(tileCoord, state, src, format, tileLoadFunction, options) {\n    super(tileCoord, state, options);\n\n    /**\n     * Extent of this tile; set by the source.\n     * @type {import(\"./extent.js\").Extent}\n     */\n    this.extent = null;\n\n    /**\n     * @private\n     * @type {import(\"./format/Feature.js\").default<FeatureType>}\n     */\n    this.format_ = format;\n\n    /**\n     * @private\n     * @type {Array<FeatureType>}\n     */\n    this.features_ = null;\n\n    /**\n     * @private\n     * @type {import(\"./featureloader.js\").FeatureLoader}\n     */\n    this.loader_;\n\n    /**\n     * Feature projection of this tile; set by the source.\n     * @type {import(\"./proj/Projection.js\").default}\n     */\n    this.projection = null;\n\n    /**\n     * Resolution of this tile; set by the source.\n     * @type {number}\n     */\n    this.resolution;\n\n    /**\n     * @private\n     * @type {import(\"./Tile.js\").LoadFunction}\n     */\n    this.tileLoadFunction_ = tileLoadFunction;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.url_ = src;\n\n    this.key = src;\n  }\n\n  /**\n   * @return {string} Tile url.\n   */\n  getTileUrl() {\n    return this.url_;\n  }\n\n  /**\n   * Get the feature format assigned for reading this tile's features.\n   * @return {import(\"./format/Feature.js\").default<FeatureType>} Feature format.\n   * @api\n   */\n  getFormat() {\n    return this.format_;\n  }\n\n  /**\n   * Get the features for this tile. Geometries will be in the view projection.\n   * @return {Array<FeatureType>} Features.\n   * @api\n   */\n  getFeatures() {\n    return this.features_;\n  }\n\n  /**\n   * Load not yet loaded URI.\n   * @override\n   */\n  load() {\n    if (this.state == TileState.IDLE) {\n      this.setState(TileState.LOADING);\n      this.tileLoadFunction_(this, this.url_);\n      if (this.loader_) {\n        this.loader_(this.extent, this.resolution, this.projection);\n      }\n    }\n  }\n\n  /**\n   * Handler for successful tile load.\n   * @param {Array<FeatureType>} features The loaded features.\n   * @param {import(\"./proj/Projection.js\").default} dataProjection Data projection.\n   */\n  onLoad(features, dataProjection) {\n    this.setFeatures(features);\n  }\n\n  /**\n   * Handler for tile load errors.\n   */\n  onError() {\n    this.setState(TileState.ERROR);\n  }\n\n  /**\n   * Function for use in a {@link module:ol/source/VectorTile~VectorTile}'s `tileLoadFunction`.\n   * Sets the features for the tile.\n   * @param {Array<FeatureType>} features Features.\n   * @api\n   */\n  setFeatures(features) {\n    this.features_ = features;\n    this.setState(TileState.LOADED);\n  }\n\n  /**\n   * Set the feature loader for reading this tile's features.\n   * @param {import(\"./featureloader.js\").FeatureLoader<FeatureType>} loader Feature loader.\n   * @api\n   */\n  setLoader(loader) {\n    this.loader_ = loader;\n  }\n}\n\nexport default VectorTile;\n","/**\n * @module ol/source/VectorTile\n */\n\nimport TileState from '../TileState.js';\nimport VectorRenderTile from '../VectorRenderTile.js';\nimport Tile from '../VectorTile.js';\nimport EventType from '../events/EventType.js';\nimport {\n  buffer as bufferExtent,\n  getIntersection,\n  intersects,\n} from '../extent.js';\nimport {loadFeaturesXhr} from '../featureloader.js';\nimport {isEmpty} from '../obj.js';\nimport {equivalent, transformExtent} from '../proj.js';\nimport {toSize} from '../size.js';\nimport {\n  createXYZ,\n  extentFromProjection,\n  getForProjection,\n} from '../tilegrid.js';\nimport TileGrid from '../tilegrid/TileGrid.js';\nimport {DEFAULT_MAX_ZOOM} from '../tilegrid/common.js';\nimport UrlTile from './UrlTile.js';\n\n/**\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../render/Feature.js\").default]\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Initial tile cache size. Will auto-grow to hold at least twice the number of tiles in the viewport.\n * @property {import(\"../extent.js\").Extent} [extent] Extent.\n * @property {import(\"../format/Feature.js\").default<FeatureType>} [format] Feature format for tiles. Used and required by the default.\n * @property {boolean} [overlaps=true] This source may have overlapping geometries. Setting this\n * to `false` (e.g. for sources with polygons that represent administrative\n * boundaries or TopoJSON sources) allows the renderer to optimise fill and\n * stroke operations.\n * @property {import(\"../proj.js\").ProjectionLike} [projection='EPSG:3857'] Projection of the tile source.\n * @property {import(\"./Source.js\").State} [state] Source state.\n * @property {typeof import(\"../VectorTile.js\").default} [tileClass] Class used to instantiate tiles.\n * Default is {@link module:ol/VectorTile~VectorTile}.\n * @property {number} [maxZoom=22] Optional max zoom level. Not used if `tileGrid` is provided.\n * @property {number} [minZoom] Optional min zoom level. Not used if `tileGrid` is provided.\n * @property {number|import(\"../size.js\").Size} [tileSize=512] Optional tile size. Not used if `tileGrid` is provided.\n * @property {number} [maxResolution] Optional tile grid resolution at level zero. Not used if `tileGrid` is provided.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction]\n * Optional function to load a tile given a URL. Could look like this for pbf tiles:\n * ```js\n * function(tile, url) {\n *   tile.setLoader(function(extent, resolution, projection) {\n *     fetch(url).then(function(response) {\n *       response.arrayBuffer().then(function(data) {\n *         const format = tile.getFormat() // ol/format/MVT configured as source format\n *         const features = format.readFeatures(data, {\n *           extent: extent,\n *           featureProjection: projection\n *         });\n *         tile.setFeatures(features);\n *       });\n *     });\n *   });\n * }\n * ```\n * If you do not need extent, resolution and projection to get the features for a tile (e.g.\n * for GeoJSON tiles), your `tileLoadFunction` does not need a `setLoader()` call. Only make sure\n * to call `setFeatures()` on the tile:\n * ```js\n * const format = new GeoJSON({featureProjection: map.getView().getProjection()});\n * async function tileLoadFunction(tile, url) {\n *   const response = await fetch(url);\n *   const data = await response.json();\n *   tile.setFeatures(format.readFeatures(data));\n * }\n * ```\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Optional function to get tile URL given a tile coordinate and the projection.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.\n * A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be\n * used instead of defining each one separately in the `urls` option.\n * @property {number} [transition] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {Array<string>} [urls] An array of URL templates.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * When set to `false`, only one world\n * will be rendered. When set to `true`, tiles will be wrapped horizontally to\n * render multiple worlds.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=1]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n */\n\n/**\n * @classdesc\n * Class for layer sources providing vector data divided into a tile grid, to be\n * used with {@link module:ol/layer/VectorTile~VectorTileLayer}. Although this source receives tiles\n * with vector features from the server, it is not meant for feature editing.\n * Features are optimized for rendering, their geometries are clipped at or near\n * tile boundaries and simplified for a view resolution. See\n * {@link module:ol/source/Vector~VectorSource} for vector sources that are suitable for feature\n * editing.\n *\n * @fires import(\"./Tile.js\").TileSourceEvent\n * @api\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../render/Feature.js\").default]\n */\nclass VectorTile extends UrlTile {\n  /**\n   * @param {!Options<FeatureType>} options Vector tile options.\n   */\n  constructor(options) {\n    const projection = options.projection || 'EPSG:3857';\n\n    const extent = options.extent || extentFromProjection(projection);\n\n    const tileGrid =\n      options.tileGrid ||\n      createXYZ({\n        extent: extent,\n        maxResolution: options.maxResolution,\n        maxZoom: options.maxZoom !== undefined ? options.maxZoom : 22,\n        minZoom: options.minZoom,\n        tileSize: options.tileSize || 512,\n      });\n\n    super({\n      attributions: options.attributions,\n      attributionsCollapsible: options.attributionsCollapsible,\n      cacheSize: options.cacheSize,\n      interpolate: true,\n      projection: projection,\n      state: options.state,\n      tileGrid: tileGrid,\n      tileLoadFunction: options.tileLoadFunction\n        ? options.tileLoadFunction\n        : defaultLoadFunction,\n      tileUrlFunction: options.tileUrlFunction,\n      url: options.url,\n      urls: options.urls,\n      wrapX: options.wrapX === undefined ? true : options.wrapX,\n      transition: options.transition,\n      zDirection: options.zDirection === undefined ? 1 : options.zDirection,\n    });\n\n    /**\n     * @private\n     * @type {import(\"../format/Feature.js\").default<FeatureType>|null}\n     */\n    this.format_ = options.format ? options.format : null;\n\n    /**\n     * @type {Object<string, Array<string>>}\n     * @private\n     */\n    this.tileKeysBySourceTileUrl_ = {};\n\n    /**\n     @type {Object<string, Tile<FeatureType>>}\n     */\n    this.sourceTiles_ = {};\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.overlaps_ = options.overlaps == undefined ? true : options.overlaps;\n\n    /**\n     * @protected\n     * @type {typeof import(\"../VectorTile.js\").default}\n     */\n    this.tileClass = options.tileClass ? options.tileClass : Tile;\n\n    /**\n     * @private\n     * @type {Object<string, import(\"../tilegrid/TileGrid.js\").default>}\n     */\n    this.tileGrids_ = {};\n  }\n\n  /**\n   * @return {boolean} The source can have overlapping geometries.\n   */\n  getOverlaps() {\n    return this.overlaps_;\n  }\n\n  /**\n   * @param {number} resolution Resolution.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @param {number|import(\"../array.js\").NearestDirectionFunction} zDirection Z direction.\n   * @return {number} Source z.\n   * @private\n   */\n  getSourceZ_(resolution, projection, zDirection) {\n    const sourceProjection = this.projection;\n    const sourceResolution =\n      projection &&\n      sourceProjection &&\n      !equivalent(projection, sourceProjection)\n        ? (resolution / sourceProjection.getMetersPerUnit()) *\n          projection.getMetersPerUnit()\n        : resolution;\n    return this.tileGrid.getZForResolution(sourceResolution, zDirection);\n  }\n\n  /**\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @param {VectorRenderTile} tile Vector render tile.\n   * @param {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Tile URL function.\n   * @return {Array<import(\"../VectorTile.js\").default>} Tile keys.\n   */\n  getSourceTiles(pixelRatio, projection, tile, tileUrlFunction) {\n    if (tile.getState() === TileState.IDLE) {\n      tile.setState(TileState.LOADING);\n      const urlTileCoord = tile.wrappedTileCoord;\n      const tileGrid = this.getTileGridForProjection(projection);\n      let extent = tileGrid.getTileCoordExtent(urlTileCoord);\n      const z = urlTileCoord[0];\n      const resolution = tileGrid.getResolution(z);\n      // make extent 1 pixel smaller so we don't load tiles for < 0.5 pixel render space\n      bufferExtent(extent, -resolution, extent);\n      const sourceProjection = this.projection;\n      if (\n        projection &&\n        this.projection &&\n        !equivalent(projection, sourceProjection)\n      ) {\n        extent = transformExtent(extent, projection, sourceProjection);\n      }\n      const sourceTileGrid = this.tileGrid;\n      const sourceExtent = sourceTileGrid.getExtent();\n      if (sourceExtent) {\n        getIntersection(extent, sourceExtent, extent);\n      }\n      const sourceZ = this.getSourceZ_(resolution, projection, this.zDirection);\n\n      const urlFunction = tileUrlFunction || this.tileUrlFunction;\n      sourceTileGrid.forEachTileCoord(extent, sourceZ, (sourceTileCoord) => {\n        const tileUrl = urlFunction(sourceTileCoord, pixelRatio, projection);\n        if (!this.sourceTiles_[tileUrl]) {\n          this.sourceTiles_[tileUrl] = new this.tileClass(\n            sourceTileCoord,\n            tileUrl ? TileState.IDLE : TileState.EMPTY,\n            tileUrl,\n            this.format_,\n            this.tileLoadFunction,\n          );\n        }\n        const sourceTile = this.sourceTiles_[tileUrl];\n        tile.sourceTiles.push(sourceTile);\n        if (!this.tileKeysBySourceTileUrl_[tileUrl]) {\n          this.tileKeysBySourceTileUrl_[tileUrl] = [];\n        }\n        this.tileKeysBySourceTileUrl_[tileUrl].push(tile.getKey());\n        const sourceTileState = sourceTile.getState();\n        if (sourceTileState < TileState.LOADED) {\n          const listenChange = (event) => {\n            this.handleTileChange(event);\n            const state = sourceTile.getState();\n            if (state === TileState.LOADED || state === TileState.ERROR) {\n              const sourceTileKey = sourceTile.getKey();\n              if (sourceTileKey in tile.errorTileKeys) {\n                if (sourceTile.getState() === TileState.LOADED) {\n                  delete tile.errorTileKeys[sourceTileKey];\n                }\n              } else {\n                tile.loadingSourceTiles--;\n              }\n              if (state === TileState.ERROR) {\n                tile.errorTileKeys[sourceTileKey] = true;\n              } else {\n                sourceTile.removeEventListener(EventType.CHANGE, listenChange);\n              }\n              if (tile.loadingSourceTiles === 0) {\n                tile.setState(\n                  isEmpty(tile.errorTileKeys)\n                    ? TileState.LOADED\n                    : TileState.ERROR,\n                );\n              }\n            }\n          };\n          sourceTile.addEventListener(EventType.CHANGE, listenChange);\n          tile.loadingSourceTiles++;\n        }\n        if (sourceTileState === TileState.IDLE) {\n          sourceTile.extent =\n            sourceTileGrid.getTileCoordExtent(sourceTileCoord);\n          sourceTile.projection = this.projection;\n          sourceTile.resolution = sourceTileGrid.getResolution(\n            sourceTileCoord[0],\n          );\n          sourceTile.load();\n        }\n      });\n      if (!tile.loadingSourceTiles) {\n        tile.setState(\n          tile.sourceTiles.some(\n            (sourceTile) => sourceTile.getState() === TileState.ERROR,\n          )\n            ? TileState.ERROR\n            : TileState.LOADED,\n        );\n      }\n    }\n\n    return tile.sourceTiles;\n  }\n\n  /**\n   * @param {VectorRenderTile} tile Vector render tile.\n   */\n  removeSourceTiles(tile) {\n    const tileKey = tile.getKey();\n    const sourceTiles = tile.sourceTiles;\n    for (let i = 0, ii = sourceTiles.length; i < ii; ++i) {\n      const sourceTileUrl = sourceTiles[i].getTileUrl();\n      if (!this.tileKeysBySourceTileUrl_[sourceTileUrl]) {\n        return;\n      }\n      const index =\n        this.tileKeysBySourceTileUrl_[sourceTileUrl].indexOf(tileKey);\n      if (index === -1) {\n        continue;\n      }\n      this.tileKeysBySourceTileUrl_[sourceTileUrl].splice(index, 1);\n      if (this.tileKeysBySourceTileUrl_[sourceTileUrl].length === 0) {\n        delete this.tileKeysBySourceTileUrl_[sourceTileUrl];\n        delete this.sourceTiles_[sourceTileUrl];\n      }\n    }\n  }\n\n  /**\n   * @param {number} z Tile coordinate z.\n   * @param {number} x Tile coordinate x.\n   * @param {number} y Tile coordinate y.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {!VectorRenderTile} Tile.\n   * @override\n   */\n  getTile(z, x, y, pixelRatio, projection) {\n    const tileCoord = [z, x, y];\n    let urlTileCoord = this.getTileCoordForTileUrlFunction(\n      tileCoord,\n      projection,\n    );\n    const sourceExtent = this.getTileGrid().getExtent();\n    const sourceProjection = this.projection;\n    const tileGrid = this.getTileGridForProjection(projection);\n    if (urlTileCoord && sourceExtent) {\n      const tileExtent = tileGrid.getTileCoordExtent(urlTileCoord);\n      // make extent 1 pixel smaller so we don't load tiles for < 0.5 pixel render space\n      bufferExtent(tileExtent, -tileGrid.getResolution(z), tileExtent);\n      if (\n        !intersects(\n          sourceExtent,\n          !projection ||\n            !sourceProjection ||\n            equivalent(projection, sourceProjection)\n            ? tileExtent\n            : transformExtent(tileExtent, projection, sourceProjection),\n        )\n      ) {\n        urlTileCoord = null;\n      }\n    }\n    let empty = true;\n    if (urlTileCoord !== null) {\n      const sourceTileGrid = this.tileGrid;\n      const resolution = tileGrid.getResolution(z);\n      const sourceZ = this.getSourceZ_(resolution, projection, 1);\n      // make extent 1 pixel smaller so we don't load tiles for < 0.5 pixel render space\n      const extent = tileGrid.getTileCoordExtent(urlTileCoord);\n      bufferExtent(extent, -resolution, extent);\n      sourceTileGrid.forEachTileCoord(\n        !projection ||\n          !sourceProjection ||\n          equivalent(projection, sourceProjection)\n          ? extent\n          : transformExtent(extent, projection, sourceProjection),\n        sourceZ,\n        (sourceTileCoord) => {\n          empty =\n            empty &&\n            !this.tileUrlFunction(\n              sourceTileCoord,\n              pixelRatio,\n              sourceProjection,\n            );\n        },\n      );\n    }\n    const tileUrlFunction = this.tileUrlFunction;\n    const newTile = new VectorRenderTile(\n      tileCoord,\n      empty ? TileState.EMPTY : TileState.IDLE,\n      urlTileCoord,\n      (tile) =>\n        this.getSourceTiles(pixelRatio, projection, tile, tileUrlFunction),\n      this.removeSourceTiles.bind(this),\n    );\n    newTile.key = this.getKey();\n    return newTile;\n  }\n\n  /**\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {!import(\"../tilegrid/TileGrid.js\").default} Tile grid.\n   * @override\n   */\n  getTileGridForProjection(projection) {\n    const code = projection.getCode();\n    let tileGrid = this.tileGrids_[code];\n    if (!tileGrid) {\n      const sourceProjection = this.projection;\n      if (\n        sourceProjection !== null &&\n        !equivalent(sourceProjection, projection)\n      ) {\n        return getForProjection(projection);\n      }\n\n      // A tile grid that matches the tile size of the source tile grid is more\n      // likely to have 1:1 relationships between source tiles and rendered tiles.\n      const sourceTileGrid = this.tileGrid;\n      const resolutions = sourceTileGrid.getResolutions().slice();\n      const origins = resolutions.map(function (resolution, z) {\n        return sourceTileGrid.getOrigin(z);\n      });\n      const tileSizes = resolutions.map(function (resolution, z) {\n        return sourceTileGrid.getTileSize(z);\n      });\n      const length = DEFAULT_MAX_ZOOM + 1;\n      for (let z = resolutions.length; z < length; ++z) {\n        resolutions.push(resolutions[z - 1] / 2);\n        origins.push(origins[z - 1]);\n        tileSizes.push(tileSizes[z - 1]);\n      }\n      tileGrid = new TileGrid({\n        extent: sourceTileGrid.getExtent(),\n        origins: origins,\n        resolutions: resolutions,\n        tileSizes: tileSizes,\n      });\n      this.tileGrids_[code] = tileGrid;\n    }\n    return tileGrid;\n  }\n\n  /**\n   * Get the tile pixel ratio for this source.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {number} Tile pixel ratio.\n   * @override\n   */\n  getTilePixelRatio(pixelRatio) {\n    return pixelRatio;\n  }\n\n  /**\n   * @param {number} z Z.\n   * @param {number} pixelRatio Pixel ratio.\n   * @param {import(\"../proj/Projection.js\").default} projection Projection.\n   * @return {import(\"../size.js\").Size} Tile size.\n   * @override\n   */\n  getTilePixelSize(z, pixelRatio, projection) {\n    const tileGrid = this.getTileGridForProjection(projection);\n    const tileSize = toSize(tileGrid.getTileSize(z), this.tmpSize);\n    return [\n      Math.round(tileSize[0] * pixelRatio),\n      Math.round(tileSize[1] * pixelRatio),\n    ];\n  }\n\n  /**\n   * @param {boolean} overlaps The source has overlapping geometries.\n   */\n  setOverlaps(overlaps) {\n    this.overlaps_ = overlaps;\n    this.changed();\n  }\n}\n\nexport default VectorTile;\n\n/**\n * Sets the loader for a tile.\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../render/Feature.js\").default]\n * @param {import(\"../VectorTile.js\").default<FeatureType>} tile Vector tile.\n * @param {string} url URL.\n */\nexport function defaultLoadFunction(tile, url) {\n  tile.setLoader(\n    /**\n     * @param {import(\"../extent.js\").Extent} extent Extent.\n     * @param {number} resolution Resolution.\n     * @param {import(\"../proj/Projection.js\").default} projection Projection.\n     */\n    function (extent, resolution, projection) {\n      loadFeaturesXhr(\n        url,\n        tile.getFormat(),\n        extent,\n        resolution,\n        projection,\n        tile.onLoad.bind(tile),\n        tile.onError.bind(tile),\n      );\n    },\n  );\n}\n","/**\n * @module ol/source/WMTS\n */\n\nimport {containsExtent} from '../extent.js';\nimport {equivalent, get as getProjection, transformExtent} from '../proj.js';\nimport {createFromCapabilitiesMatrixSet} from '../tilegrid/WMTS.js';\nimport {createFromTileUrlFunctions} from '../tileurlfunction.js';\nimport {appendParams, expandUrl} from '../uri.js';\nimport TileImage from './TileImage.js';\n\n/**\n * Request encoding. One of 'KVP', 'REST'.\n * @typedef {'KVP' | 'REST'} RequestEncoding\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {import(\"../tilegrid/WMTS.js\").default} tileGrid Tile grid.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is the view projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {RequestEncoding} [requestEncoding='KVP'] Request encoding.\n * @property {string} layer Layer name as advertised in the WMTS capabilities.\n * @property {string} style Style name as advertised in the WMTS capabilities.\n * @property {typeof import(\"../ImageTile.js\").default} [tileClass]  Class used to instantiate image tiles. Default is {@link module:ol/ImageTile~ImageTile}.\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service.\n * For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {string} [format='image/jpeg'] Image format. Only used when `requestEncoding` is `'KVP'`.\n * @property {string} [version='1.0.0'] WMTS version.\n * @property {string} matrixSet Matrix set.\n * @property {!Object} [dimensions] Additional \"dimensions\" for tile requests.\n * This is an object with properties named like the advertised WMTS dimensions.\n * @property {string} [url]  A URL for the service.\n * For the RESTful request encoding, this is a URL\n * template.  For KVP encoding, it is normal URL. A `{?-?}` template pattern,\n * for example `subdomain{a-f}.domain.com`, may be used instead of defining\n * each one separately in the `urls` option.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {Array<string>} [urls] An array of URLs.\n * Requests will be distributed among the URLs in this array.\n * @property {boolean} [wrapX=false] Whether to wrap the world horizontally.\n * @property {number} [transition] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n */\n\n/**\n * @classdesc\n * Layer source for tile data from WMTS servers.\n * @api\n */\nclass WMTS extends TileImage {\n  /**\n   * @param {Options} options WMTS options.\n   */\n  constructor(options) {\n    // TODO: add support for TileMatrixLimits\n\n    const requestEncoding =\n      options.requestEncoding !== undefined ? options.requestEncoding : 'KVP';\n\n    // FIXME: should we create a default tileGrid?\n    // we could issue a getCapabilities xhr to retrieve missing configuration\n    const tileGrid = options.tileGrid;\n\n    let urls = options.urls;\n    if (urls === undefined && options.url !== undefined) {\n      urls = expandUrl(options.url);\n    }\n\n    super({\n      attributions: options.attributions,\n      attributionsCollapsible: options.attributionsCollapsible,\n      cacheSize: options.cacheSize,\n      crossOrigin: options.crossOrigin,\n      referrerPolicy: options.referrerPolicy,\n      interpolate: options.interpolate,\n      projection: options.projection,\n      reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n      tileClass: options.tileClass,\n      tileGrid: tileGrid,\n      tileLoadFunction: options.tileLoadFunction,\n      tilePixelRatio: options.tilePixelRatio,\n      urls: urls,\n      wrapX: options.wrapX !== undefined ? options.wrapX : false,\n      transition: options.transition,\n      zDirection: options.zDirection,\n    });\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.version_ = options.version !== undefined ? options.version : '1.0.0';\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.format_ = options.format !== undefined ? options.format : 'image/jpeg';\n\n    /**\n     * @private\n     * @type {!Object}\n     */\n    this.dimensions_ =\n      options.dimensions !== undefined ? options.dimensions : {};\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.layer_ = options.layer;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.matrixSet_ = options.matrixSet;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.style_ = options.style;\n\n    // FIXME: should we guess this requestEncoding from options.url(s)\n    //        structure? that would mean KVP only if a template is not provided.\n\n    /**\n     * @private\n     * @type {RequestEncoding}\n     */\n    this.requestEncoding_ = requestEncoding;\n\n    this.setKey(this.getKeyForDimensions_());\n\n    if (urls && urls.length > 0) {\n      this.tileUrlFunction = createFromTileUrlFunctions(\n        urls.map(this.createFromWMTSTemplate.bind(this)),\n      );\n    }\n  }\n\n  /**\n   * Set the URLs to use for requests.\n   * URLs may contain OGC conform URL Template Variables: {TileMatrix}, {TileRow}, {TileCol}.\n   * @param {Array<string>} urls URLs.\n   * @override\n   */\n  setUrls(urls) {\n    this.urls = urls;\n    const key = urls.join('\\n');\n    this.setTileUrlFunction(\n      createFromTileUrlFunctions(\n        urls.map(this.createFromWMTSTemplate.bind(this)),\n      ),\n      key,\n    );\n  }\n\n  /**\n   * Get the dimensions, i.e. those passed to the constructor through the\n   * \"dimensions\" option, and possibly updated using the updateDimensions\n   * method.\n   * @return {!Object} Dimensions.\n   * @api\n   */\n  getDimensions() {\n    return this.dimensions_;\n  }\n\n  /**\n   * Return the image format of the WMTS source.\n   * @return {string} Format.\n   * @api\n   */\n  getFormat() {\n    return this.format_;\n  }\n\n  /**\n   * Return the layer of the WMTS source.\n   * @return {string} Layer.\n   * @api\n   */\n  getLayer() {\n    return this.layer_;\n  }\n\n  /**\n   * Return the matrix set of the WMTS source.\n   * @return {string} MatrixSet.\n   * @api\n   */\n  getMatrixSet() {\n    return this.matrixSet_;\n  }\n\n  /**\n   * Return the request encoding, either \"KVP\" or \"REST\".\n   * @return {RequestEncoding} Request encoding.\n   * @api\n   */\n  getRequestEncoding() {\n    return this.requestEncoding_;\n  }\n\n  /**\n   * Return the style of the WMTS source.\n   * @return {string} Style.\n   * @api\n   */\n  getStyle() {\n    return this.style_;\n  }\n\n  /**\n   * Return the version of the WMTS source.\n   * @return {string} Version.\n   * @api\n   */\n  getVersion() {\n    return this.version_;\n  }\n\n  /**\n   * @private\n   * @return {string} The key for the current dimensions.\n   */\n  getKeyForDimensions_() {\n    const res = this.urls ? this.urls.slice(0) : [];\n    for (const key in this.dimensions_) {\n      res.push(key + '-' + this.dimensions_[key]);\n    }\n    return res.join('/');\n  }\n\n  /**\n   * Update the dimensions.\n   * @param {Object} dimensions Dimensions.\n   * @api\n   */\n  updateDimensions(dimensions) {\n    Object.assign(this.dimensions_, dimensions);\n    this.setKey(this.getKeyForDimensions_());\n  }\n\n  /**\n   * @param {string} template Template.\n   * @return {import(\"../Tile.js\").UrlFunction} Tile URL function.\n   */\n  createFromWMTSTemplate(template) {\n    const requestEncoding = this.requestEncoding_;\n\n    // context property names are lower case to allow for a case insensitive\n    // replacement as some services use different naming conventions\n    const context = {\n      'layer': this.layer_,\n      'style': this.style_,\n      'tilematrixset': this.matrixSet_,\n    };\n\n    if (requestEncoding == 'KVP') {\n      Object.assign(context, {\n        'Service': 'WMTS',\n        'Request': 'GetTile',\n        'Version': this.version_,\n        'Format': this.format_,\n      });\n    }\n\n    // TODO: we may want to create our own appendParams function so that params\n    // order conforms to wmts spec guidance, and so that we can avoid to escape\n    // special template params\n\n    template =\n      requestEncoding == 'KVP'\n        ? appendParams(template, context)\n        : template.replace(/\\{(\\w+?)\\}/g, function (m, p) {\n            return p.toLowerCase() in context ? context[p.toLowerCase()] : m;\n          });\n\n    const tileGrid = /** @type {import(\"../tilegrid/WMTS.js\").default} */ (\n      this.tileGrid\n    );\n    const dimensions = this.dimensions_;\n\n    return (\n      /**\n       * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n       * @param {number} pixelRatio Pixel ratio.\n       * @param {import(\"../proj/Projection.js\").default} projection Projection.\n       * @return {string|undefined} Tile URL.\n       */\n      function (tileCoord, pixelRatio, projection) {\n        if (!tileCoord) {\n          return undefined;\n        }\n        const localContext = {\n          'TileMatrix': tileGrid.getMatrixId(tileCoord[0]),\n          'TileCol': tileCoord[1],\n          'TileRow': tileCoord[2],\n        };\n        Object.assign(localContext, dimensions);\n        let url = template;\n        if (requestEncoding == 'KVP') {\n          url = appendParams(url, localContext);\n        } else {\n          url = url.replace(/\\{(\\w+?)\\}/g, function (m, p) {\n            return encodeURIComponent(localContext[p]);\n          });\n        }\n        return url;\n      }\n    );\n  }\n}\n\nexport default WMTS;\n\n/**\n * Generate source options from a capabilities object.\n * @param {Object} wmtsCap An object representing the capabilities document.\n * @param {!Object} config Configuration properties for the layer.  Defaults for\n *                  the layer will apply if not provided.\n *\n * Required config properties:\n *  - layer - {string} The layer identifier.\n *\n * Optional config properties:\n *  - matrixSet - {string} The matrix set identifier, required if there is\n *       more than one matrix set in the layer capabilities.\n *  - projection - {string} The desired CRS when no matrixSet is specified.\n *       eg: \"EPSG:3857\". If the desired projection is not available,\n *       an error is thrown.\n *  - requestEncoding - {string} url encoding format for the layer. Default is\n *       the first tile url format found in the GetCapabilities response.\n *  - style - {string} The name of the style\n *  - format - {string} Image format for the layer. Default is the first\n *       format returned in the GetCapabilities response.\n *  - crossOrigin - {string|null|undefined} Cross origin. Default is `undefined`.\n * @return {Options|null} WMTS source options object or `null` if the layer was not found.\n * @api\n */\nexport function optionsFromCapabilities(wmtsCap, config) {\n  const layers = wmtsCap['Contents']['Layer'];\n  const l = layers?.find(function (elt) {\n    return elt['Identifier'] == config['layer'];\n  });\n  if (!l) {\n    return null;\n  }\n  const tileMatrixSets = wmtsCap['Contents']['TileMatrixSet'];\n  let idx;\n  if (l['TileMatrixSetLink'].length > 1) {\n    if ('projection' in config) {\n      idx = l['TileMatrixSetLink'].findIndex(function (elt) {\n        const tileMatrixSet = tileMatrixSets.find(function (el) {\n          return el['Identifier'] == elt['TileMatrixSet'];\n        });\n        const supportedCRS = tileMatrixSet['SupportedCRS'];\n        const proj1 = getProjection(supportedCRS);\n        const proj2 = getProjection(config['projection']);\n        if (proj1 && proj2) {\n          return equivalent(proj1, proj2);\n        }\n        return supportedCRS == config['projection'];\n      });\n    } else {\n      idx = l['TileMatrixSetLink'].findIndex(function (elt) {\n        return elt['TileMatrixSet'] == config['matrixSet'];\n      });\n    }\n  } else {\n    idx = 0;\n  }\n  if (idx < 0) {\n    idx = 0;\n  }\n  const matrixSet =\n    /** @type {string} */\n    (l['TileMatrixSetLink'][idx]['TileMatrixSet']);\n  const matrixLimits =\n    /** @type {Array<Object>} */\n    (l['TileMatrixSetLink'][idx]['TileMatrixSetLimits']);\n\n  let format = /** @type {string} */ (l['Format'][0]);\n  if ('format' in config) {\n    format = config['format'];\n  }\n  idx = l['Style'].findIndex(function (elt) {\n    if ('style' in config) {\n      return elt['Title'] == config['style'];\n    }\n    return elt['isDefault'];\n  });\n  if (idx < 0) {\n    idx = 0;\n  }\n  const style = /** @type {string} */ (l['Style'][idx]['Identifier']);\n\n  const dimensions = {};\n  if ('Dimension' in l) {\n    l['Dimension'].forEach(function (elt, index, array) {\n      const key = elt['Identifier'];\n      let value = elt['Default'];\n      if (value === undefined) {\n        value = elt['Value'][0];\n      }\n      dimensions[key] = value;\n    });\n  }\n\n  const matrixSets = wmtsCap['Contents']['TileMatrixSet'];\n  const matrixSetObj = matrixSets.find(function (elt) {\n    return elt['Identifier'] == matrixSet;\n  });\n\n  let projection;\n  const code = matrixSetObj['SupportedCRS'];\n  if (code) {\n    projection = getProjection(code);\n  }\n  if ('projection' in config) {\n    const projConfig = getProjection(config['projection']);\n    if (projConfig) {\n      if (!projection || equivalent(projConfig, projection)) {\n        projection = projConfig;\n      }\n    }\n  }\n\n  let wrapX = false;\n  const switchXY = projection.getAxisOrientation().startsWith('ne');\n\n  let matrix = matrixSetObj.TileMatrix[0];\n\n  // create default matrixLimit\n  let selectedMatrixLimit = {\n    MinTileCol: 0,\n    MinTileRow: 0,\n    // subtract one to end up at tile top left\n    MaxTileCol: matrix.MatrixWidth - 1,\n    MaxTileRow: matrix.MatrixHeight - 1,\n  };\n\n  //in case of matrix limits, use matrix limits to calculate extent\n  if (matrixLimits) {\n    selectedMatrixLimit = matrixLimits[matrixLimits.length - 1];\n    const m = matrixSetObj.TileMatrix.find(\n      (tileMatrixValue) =>\n        tileMatrixValue.Identifier === selectedMatrixLimit.TileMatrix ||\n        matrixSetObj.Identifier + ':' + tileMatrixValue.Identifier ===\n          selectedMatrixLimit.TileMatrix,\n    );\n    if (m) {\n      matrix = m;\n    }\n  }\n\n  const layerExtent = l['BoundingBox']?.find(\n    (bbox) =>\n      getProjection(bbox.crs) &&\n      equivalent(getProjection(bbox.crs), projection),\n  );\n\n  const resolution =\n    (matrix.ScaleDenominator * 0.00028) / projection.getMetersPerUnit(); // WMTS 1.0.0: standardized rendering pixel size\n  const origin = switchXY\n    ? [matrix.TopLeftCorner[1], matrix.TopLeftCorner[0]]\n    : matrix.TopLeftCorner;\n  const tileSpanX = matrix.TileWidth * resolution;\n  const tileSpanY = matrix.TileHeight * resolution;\n  let matrixSetExtent = layerExtent?.extent ?? matrixSetObj['BoundingBox'];\n  if (matrixSetExtent && switchXY) {\n    matrixSetExtent = [\n      matrixSetExtent[1],\n      matrixSetExtent[0],\n      matrixSetExtent[3],\n      matrixSetExtent[2],\n    ];\n  }\n  let extent = [\n    origin[0] + tileSpanX * selectedMatrixLimit.MinTileCol,\n    // add one to get proper bottom/right coordinate\n    origin[1] - tileSpanY * (1 + selectedMatrixLimit.MaxTileRow),\n    origin[0] + tileSpanX * (1 + selectedMatrixLimit.MaxTileCol),\n    origin[1] - tileSpanY * selectedMatrixLimit.MinTileRow,\n  ];\n\n  if (\n    matrixSetExtent !== undefined &&\n    !containsExtent(matrixSetExtent, extent)\n  ) {\n    const wgs84BoundingBox = l['WGS84BoundingBox'];\n    const wgs84ProjectionExtent = getProjection('EPSG:4326').getExtent();\n    extent = matrixSetExtent;\n    if (wgs84BoundingBox) {\n      wrapX =\n        wgs84BoundingBox[0] === wgs84ProjectionExtent[0] &&\n        wgs84BoundingBox[2] === wgs84ProjectionExtent[2];\n    } else {\n      const wgs84MatrixSetExtent = transformExtent(\n        matrixSetExtent,\n        matrixSetObj['SupportedCRS'],\n        'EPSG:4326',\n      );\n      // Ignore slight deviation from the correct x limits\n      wrapX =\n        wgs84MatrixSetExtent[0] - 1e-10 <= wgs84ProjectionExtent[0] &&\n        wgs84MatrixSetExtent[2] + 1e-10 >= wgs84ProjectionExtent[2];\n    }\n  }\n\n  const tileGrid = createFromCapabilitiesMatrixSet(\n    matrixSetObj,\n    extent,\n    matrixLimits,\n  );\n\n  /** @type {!Array<string>} */\n  const urls = [];\n  let requestEncoding = config['requestEncoding'];\n  requestEncoding = requestEncoding !== undefined ? requestEncoding : '';\n\n  if (\n    'OperationsMetadata' in wmtsCap &&\n    'GetTile' in wmtsCap['OperationsMetadata']\n  ) {\n    const gets = wmtsCap['OperationsMetadata']['GetTile']['DCP']['HTTP']['Get'];\n\n    for (let i = 0, ii = gets.length; i < ii; ++i) {\n      if (gets[i]['Constraint']) {\n        const constraint = gets[i]['Constraint'].find(function (element) {\n          return element['name'] == 'GetEncoding';\n        });\n        const encodings = constraint['AllowedValues']['Value'];\n\n        if (requestEncoding === '') {\n          // requestEncoding not provided, use the first encoding from the list\n          requestEncoding = encodings[0];\n        }\n        if (requestEncoding === 'KVP') {\n          if (encodings.includes('KVP')) {\n            urls.push(/** @type {string} */ (gets[i]['href']));\n          }\n        } else {\n          break;\n        }\n      } else if (gets[i]['href']) {\n        requestEncoding = 'KVP';\n        urls.push(/** @type {string} */ (gets[i]['href']));\n      }\n    }\n  }\n  if (urls.length === 0) {\n    requestEncoding = 'REST';\n    l['ResourceURL'].forEach(function (element) {\n      if (element['resourceType'] === 'tile') {\n        format = element['format'];\n        urls.push(/** @type {string} */ (element['template']));\n      }\n    });\n  }\n\n  return {\n    urls: urls,\n    layer: config['layer'],\n    matrixSet: matrixSet,\n    format: format,\n    projection: projection,\n    requestEncoding: requestEncoding,\n    tileGrid: tileGrid,\n    style: style,\n    dimensions: dimensions,\n    wrapX: wrapX,\n    crossOrigin: config['crossOrigin'],\n  };\n}\n","/**\n * @module ol/source/XYZ\n */\n\nimport {createXYZ, extentFromProjection} from '../tilegrid.js';\nimport TileImage from './TileImage.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Source.js\").AttributionLike} [attributions] Attributions.\n * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.\n * @property {number} [cacheSize] Deprecated.  Use the cacheSize option on the layer instead.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {boolean} [interpolate=true] Use interpolated values when resampling.  By default,\n * linear interpolation is used when resampling.  Set to false to use the nearest neighbor instead.\n * @property {import(\"../proj.js\").ProjectionLike} [projection='EPSG:3857'] Projection.\n * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).\n * Higher values can increase reprojection performance, but decrease precision.\n * @property {number} [maxZoom=42] Optional max zoom level. Not used if `tileGrid` is provided.\n * @property {number} [minZoom=0] Optional min zoom level. Not used if `tileGrid` is provided.\n * @property {number} [maxResolution] Optional tile grid resolution at level zero. Not used if `tileGrid` is provided.\n * @property {import(\"../tilegrid/TileGrid.js\").default} [tileGrid] Tile grid.\n * @property {import(\"../Tile.js\").LoadFunction} [tileLoadFunction] Deprecated.  Use an ImageTile source with a loader\n * instead.  Optional function to load a tile given a URL. The default is\n * ```js\n * function(imageTile, src) {\n *   imageTile.getImage().src = src;\n * };\n * ```\n * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service.\n * For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px\n * by 512px images (for retina/hidpi devices) then `tilePixelRatio`\n * should be set to `2`.\n * @property {number|import(\"../size.js\").Size} [tileSize=[256, 256]] The tile size used by the tile service.\n * Not used if `tileGrid` is provided.\n * @property {number} [gutter=0] The size in pixels of the gutter around image tiles to ignore.\n * This allows artifacts of rendering at tile edges to be ignored.\n * Supported images should be wider and taller than the tile size by a value of `2 x gutter`.\n * @property {import(\"../Tile.js\").UrlFunction} [tileUrlFunction] Deprecated.  Use an ImageTile source and provide a function\n * for the url option instead.\n * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`,\n * and `{z}` placeholders. A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`,\n * may be used instead of defining each one separately in the `urls` option.\n * @property {Array<string>} [urls] Deprecated.  Use an ImageTile source and provide an array of URLs for the\n * url option instead.\n * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.\n * @property {number} [transition=250] Duration of the opacity transition for rendering.\n * To disable the opacity transition, pass `transition: 0`.\n * @property {number|import(\"../array.js\").NearestDirectionFunction} [zDirection=0]\n * Choose whether to use tiles with a higher or lower zoom level when between integer\n * zoom levels. See {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution}.\n */\n\n/**\n * @classdesc\n * Layer source for tile data with URLs in a set XYZ format that are\n * defined in a URL template. By default, this follows the widely-used\n * Google grid where `x` 0 and `y` 0 are in the top left. Grids like\n * TMS where `x` 0 and `y` 0 are in the bottom left can be used by\n * using the `{-y}` placeholder in the URL template, so long as the\n * source does not have a custom tile grid. In this case\n * a `tileUrlFunction` can be used, such as:\n * ```js\n *  tileUrlFunction: function(coordinate) {\n *    return 'http://mapserver.com/' + coordinate[0] + '/' +\n *      coordinate[1] + '/' + (-coordinate[2] - 1) + '.png';\n *  }\n * ```\n * @api\n */\nclass XYZ extends TileImage {\n  /**\n   * @param {Options} [options] XYZ options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    const projection =\n      options.projection !== undefined ? options.projection : 'EPSG:3857';\n\n    const tileGrid =\n      options.tileGrid !== undefined\n        ? options.tileGrid\n        : createXYZ({\n            extent: extentFromProjection(projection),\n            maxResolution: options.maxResolution,\n            maxZoom: options.maxZoom,\n            minZoom: options.minZoom,\n            tileSize: options.tileSize,\n          });\n\n    super({\n      attributions: options.attributions,\n      cacheSize: options.cacheSize,\n      crossOrigin: options.crossOrigin,\n      referrerPolicy: options.referrerPolicy,\n      interpolate: options.interpolate,\n      projection: projection,\n      reprojectionErrorThreshold: options.reprojectionErrorThreshold,\n      tileGrid: tileGrid,\n      tileLoadFunction: options.tileLoadFunction,\n      tilePixelRatio: options.tilePixelRatio,\n      tileUrlFunction: options.tileUrlFunction,\n      url: options.url,\n      urls: options.urls,\n      wrapX: options.wrapX !== undefined ? options.wrapX : true,\n      transition: options.transition,\n      attributionsCollapsible: options.attributionsCollapsible,\n      zDirection: options.zDirection,\n    });\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.gutter_ = options.gutter !== undefined ? options.gutter : 0;\n  }\n\n  /**\n   * @return {number} Gutter.\n   * @override\n   */\n  getGutter() {\n    return this.gutter_;\n  }\n}\n\nexport default XYZ;\n","/**\n * @module ol/source/common\n */\n\n/**\n * Default WMS version.\n * @type {string}\n */\nexport const DEFAULT_WMS_VERSION = '1.3.0';\n\n/**\n * Number of decimal digits to consider in integer values when rounding.\n * @type {number}\n */\nexport const DECIMALS = 4;\n","/**\n * @module ol/source/wms\n */\n\nimport {decode} from '../Image.js';\nimport {getForViewAndSize, getHeight, getWidth} from '../extent.js';\nimport {floor, round} from '../math.js';\nimport {get as getProjection} from '../proj.js';\nimport {compareVersions} from '../string.js';\nimport {appendParams} from '../uri.js';\nimport {getRequestExtent} from './Image.js';\nimport {DECIMALS} from './common.js';\n\n/**\n * Default WMS version.\n * @type {string}\n */\nexport const DEFAULT_VERSION = '1.3.0';\n\n/**\n * @const\n * @type {import(\"../size.js\").Size}\n */\nconst GETFEATUREINFO_IMAGE_SIZE = [101, 101];\n\n/**\n * @api\n * @typedef {'carmentaserver' | 'geoserver' | 'mapserver' | 'qgis'} ServerType\n * Set the server type to use implementation-specific parameters beyond the WMS specification.\n *  - `'carmentaserver'`: HiDPI support for [Carmenta Server](https://www.carmenta.com/en/products/carmenta-server)\n *  - `'geoserver'`: HiDPI support for [GeoServer](https://geoserver.org/)\n *  - `'mapserver'`: HiDPI support for [MapServer](https://mapserver.org/)\n *  - `'qgis'`: HiDPI support for [QGIS](https://qgis.org/)\n */\n\n/**\n * @param {string} baseUrl Base URL.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {import(\"../size.js\").Size} size Size.\n * @param {import(\"../proj/Projection.js\").default} projection Projection.\n * @param {Object} params WMS params. Will be modified in place.\n * @return {string} Request URL.\n */\nexport function getRequestUrl(baseUrl, extent, size, projection, params) {\n  params['WIDTH'] = size[0];\n  params['HEIGHT'] = size[1];\n\n  const axisOrientation = projection.getAxisOrientation();\n  const v13 = compareVersions(params['VERSION'], '1.3') >= 0;\n  params[v13 ? 'CRS' : 'SRS'] = projection.getCode();\n  const bbox =\n    v13 && axisOrientation.startsWith('ne')\n      ? [extent[1], extent[0], extent[3], extent[2]]\n      : extent;\n  params['BBOX'] = bbox.join(',');\n\n  return appendParams(baseUrl, params);\n}\n\n/**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @param {number} resolution Resolution.\n * @param {number} pixelRatio pixel ratio.\n * @param {import(\"../proj.js\").Projection} projection Projection.\n * @param {string} url WMS service url.\n * @param {Object} params WMS params.\n * @param {import(\"./wms.js\").ServerType} serverType The type of the remote WMS server.\n * @return {string} Image src.\n */\nexport function getImageSrc(\n  extent,\n  resolution,\n  pixelRatio,\n  projection,\n  url,\n  params,\n  serverType,\n) {\n  params = Object.assign({REQUEST: 'GetMap'}, params);\n\n  const imageResolution = resolution / pixelRatio;\n\n  const imageSize = [\n    round(getWidth(extent) / imageResolution, DECIMALS),\n    round(getHeight(extent) / imageResolution, DECIMALS),\n  ];\n\n  if (pixelRatio != 1) {\n    switch (serverType) {\n      case 'geoserver':\n        const dpi = (90 * pixelRatio + 0.5) | 0;\n        if ('FORMAT_OPTIONS' in params) {\n          params['FORMAT_OPTIONS'] += ';dpi:' + dpi;\n        } else {\n          params['FORMAT_OPTIONS'] = 'dpi:' + dpi;\n        }\n        break;\n      case 'mapserver':\n        params['MAP_RESOLUTION'] = 90 * pixelRatio;\n        break;\n      case 'carmentaserver':\n      case 'qgis':\n        params['DPI'] = 90 * pixelRatio;\n        break;\n      default:\n        throw new Error('Unknown `serverType` configured');\n    }\n  }\n\n  const src = getRequestUrl(url, extent, imageSize, projection, params);\n  return src;\n}\n\n/**\n * @param {Object} params WMS params.\n * @param {string} request WMS `REQUEST`.\n * @return {Object} WMS params with required properties set.\n */\nexport function getRequestParams(params, request) {\n  return Object.assign(\n    {\n      'REQUEST': request,\n      'SERVICE': 'WMS',\n      'VERSION': DEFAULT_VERSION,\n      'FORMAT': 'image/png',\n      'STYLES': '',\n      'TRANSPARENT': 'TRUE',\n    },\n    params,\n  );\n}\n\n/**\n * @typedef {Object} LoaderOptions\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that\n * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {boolean} [hidpi=true] Use the `ol/Map#pixelRatio` value when requesting\n * the image from the remote server.\n * @property {Object<string,*>} [params] WMS request parameters.\n * At least a `LAYERS` param is required. `STYLES` is\n * `''` by default. `VERSION` is `1.3.0` by default. `WIDTH`, `HEIGHT` and `BBOX` will be set\n * dynamically. `CRS` (`SRS` for WMS version < 1.3.0) will is derived from the `proection` config.\n * @property {import(\"../proj.js\").ProjectionLike} [projection] Projection. Default is 'EPSG:3857'.\n * @property {number} [ratio=1.5] Ratio. `1` means image requests are the size of the map viewport, `2` means\n * twice the width and height of the map viewport, and so on. Must be `1` or higher.\n * @property {import(\"./wms.js\").ServerType} [serverType] The type of\n * the remote WMS server: `mapserver`, `geoserver`, `carmentaserver`, or `qgis`.\n * Only needed if `hidpi` is `true`.\n * @property {string} url WMS service URL.\n * @property {function(HTMLImageElement, string): Promise<import('../DataTile.js').ImageLike>} [load] Function\n * to perform loading of the image. Receives the created `HTMLImageElement` and the desired `src` as argument and\n * returns a promise resolving to the loaded or decoded image. Default is {@link module:ol/Image.decode}.\n */\n\n/**\n * Creates a loader for WMS images.\n * @param {LoaderOptions} options Loader options.\n * @return {import(\"../Image.js\").ImageObjectPromiseLoader} Loader.\n * @api\n */\nexport function createLoader(options) {\n  const hidpi = options.hidpi === undefined ? true : options.hidpi;\n  const projection = getProjection(options.projection || 'EPSG:3857');\n  const ratio = options.ratio || 1.5;\n  const load = options.load || decode;\n  const crossOrigin = options.crossOrigin ?? null;\n  const referrerPolicy = options.referrerPolicy;\n\n  return (extent, resolution, pixelRatio) => {\n    extent = getRequestExtent(extent, resolution, pixelRatio, ratio);\n    if (pixelRatio != 1 && (!hidpi || options.serverType === undefined)) {\n      pixelRatio = 1;\n    }\n    const src = getImageSrc(\n      extent,\n      resolution,\n      pixelRatio,\n      projection,\n      options.url,\n      getRequestParams(options.params, 'GetMap'),\n      options.serverType,\n    );\n    const image = new Image();\n    image.crossOrigin = crossOrigin;\n    if (referrerPolicy !== undefined) {\n      image.referrerPolicy = referrerPolicy;\n    }\n    return load(image, src).then((image) => ({image, extent, pixelRatio}));\n  };\n}\n\n/**\n * Get the GetFeatureInfo URL for the passed coordinate and resolution. Returns `undefined` if the\n * GetFeatureInfo URL cannot be constructed.\n * @param {LoaderOptions} options Options passed the `createWMSLoader()` function. In addition to\n * the params required by the loader, `INFO_FORMAT` should be specified, it defaults to\n * `application/json`. If `QUERY_LAYERS` is not provided, then the layers specified in the `LAYERS`\n * parameter will be used.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} resolution Resolution.\n * @return {string|undefined} GetFeatureInfo URL.\n * @api\n */\nexport function getFeatureInfoUrl(options, coordinate, resolution) {\n  if (options.url === undefined) {\n    return undefined;\n  }\n\n  const projectionObj = getProjection(options.projection || 'EPSG:3857');\n\n  const extent = getForViewAndSize(\n    coordinate,\n    resolution,\n    0,\n    GETFEATUREINFO_IMAGE_SIZE,\n  );\n\n  const baseParams = {\n    'QUERY_LAYERS': options.params['LAYERS'],\n    'INFO_FORMAT': 'application/json',\n  };\n  Object.assign(\n    baseParams,\n    getRequestParams(options.params, 'GetFeatureInfo'),\n    options.params,\n  );\n\n  const x = floor((coordinate[0] - extent[0]) / resolution, DECIMALS);\n  const y = floor((extent[3] - coordinate[1]) / resolution, DECIMALS);\n  const v13 = compareVersions(baseParams['VERSION'], '1.3') >= 0;\n  baseParams[v13 ? 'I' : 'X'] = x;\n  baseParams[v13 ? 'J' : 'Y'] = y;\n\n  return getRequestUrl(\n    options.url,\n    extent,\n    GETFEATUREINFO_IMAGE_SIZE,\n    projectionObj,\n    baseParams,\n  );\n}\n\n/**\n * Get the GetLegendGraphic URL, optionally optimized for the passed resolution and possibly\n * including any passed specific parameters. Returns `undefined` if the GetLegendGraphic URL\n * cannot be constructed.\n *\n * @param {LoaderOptions} options Options passed the `createWMSLoader()` function.\n * @param {number} [resolution] Resolution. If not provided, `SCALE` will not be calculated and\n * included in URL.\n * @return {string|undefined} GetLegendGraphic URL.\n * @api\n */\nexport function getLegendUrl(options, resolution) {\n  if (options.url === undefined) {\n    return undefined;\n  }\n\n  const baseParams = {\n    'SERVICE': 'WMS',\n    'VERSION': DEFAULT_VERSION,\n    'REQUEST': 'GetLegendGraphic',\n    'FORMAT': 'image/png',\n  };\n\n  if (resolution !== undefined) {\n    const mpu =\n      getProjection(options.projection || 'EPSG:3857').getMetersPerUnit() || 1;\n    const pixelSize = 0.00028;\n    baseParams['SCALE'] = (resolution * mpu) / pixelSize;\n  }\n\n  Object.assign(baseParams, options.params);\n\n  if (options.params !== undefined && baseParams['LAYER'] === undefined) {\n    const layers = baseParams['LAYERS'];\n    const isSingleLayer = !Array.isArray(layers) || layers.length !== 1;\n    if (!isSingleLayer) {\n      return undefined;\n    }\n    baseParams['LAYER'] = layers;\n  }\n\n  return appendParams(options.url, baseParams);\n}\n","/**\n * @module ol/sphere\n */\nimport {toDegrees, toRadians} from './math.js';\n\n/**\n * Object literal with options for the {@link getLength} or {@link getArea}\n * functions.\n * @typedef {Object} SphereMetricOptions\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857']\n * Projection of the  geometry.  By default, the geometry is assumed to be in\n * Web Mercator.\n * @property {number} [radius=6371008.8] Sphere radius.  By default, the\n * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)\n * for the WGS84 ellipsoid is used.\n */\n\n/**\n * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.\n * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius\n * @type {number}\n */\nexport const DEFAULT_RADIUS = 6371008.8;\n\n/**\n * Get the great circle distance (in meters) between two geographic coordinates.\n * @param {Array} c1 Starting coordinate.\n * @param {Array} c2 Ending coordinate.\n * @param {number} [radius] The sphere radius to use.  Defaults to the Earth's\n *     mean radius using the WGS84 ellipsoid.\n * @return {number} The great circle distance between the points (in meters).\n * @api\n */\nexport function getDistance(c1, c2, radius) {\n  radius = radius || DEFAULT_RADIUS;\n  const lat1 = toRadians(c1[1]);\n  const lat2 = toRadians(c2[1]);\n  const deltaLatBy2 = (lat2 - lat1) / 2;\n  const deltaLonBy2 = toRadians(c2[0] - c1[0]) / 2;\n  const a =\n    Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +\n    Math.sin(deltaLonBy2) *\n      Math.sin(deltaLonBy2) *\n      Math.cos(lat1) *\n      Math.cos(lat2);\n  return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n}\n\n/**\n * Get the cumulative great circle length of linestring coordinates (geographic).\n * @param {Array} coordinates Linestring coordinates.\n * @param {number} radius The sphere radius to use.\n * @return {number} The length (in meters).\n */\nfunction getLengthInternal(coordinates, radius) {\n  let length = 0;\n  for (let i = 0, ii = coordinates.length; i < ii - 1; ++i) {\n    length += getDistance(coordinates[i], coordinates[i + 1], radius);\n  }\n  return length;\n}\n\n/**\n * Get the spherical length of a geometry.  This length is the sum of the\n * great circle distances between coordinates.  For polygons, the length is\n * the sum of all rings.  For points, the length is zero.  For multi-part\n * geometries, the length is the sum of the length of each part.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [options] Options for the\n * length calculation.  By default, geometries are assumed to be in 'EPSG:3857'.\n * You can change this by providing a `projection` option.\n * @return {number} The spherical length (in meters).\n * @api\n */\nexport function getLength(geometry, options) {\n  options = options || {};\n  const radius = options.radius || DEFAULT_RADIUS;\n  const projection = options.projection || 'EPSG:3857';\n  const type = geometry.getType();\n  if (type !== 'GeometryCollection') {\n    geometry = geometry.clone().transform(projection, 'EPSG:4326');\n  }\n  let length = 0;\n  let coordinates, coords, i, ii, j, jj;\n  switch (type) {\n    case 'Point':\n    case 'MultiPoint': {\n      break;\n    }\n    case 'LineString':\n    case 'LinearRing': {\n      coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n        geometry\n      ).getCoordinates();\n      length = getLengthInternal(coordinates, radius);\n      break;\n    }\n    case 'MultiLineString':\n    case 'Polygon': {\n      coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n        geometry\n      ).getCoordinates();\n      for (i = 0, ii = coordinates.length; i < ii; ++i) {\n        length += getLengthInternal(coordinates[i], radius);\n      }\n      break;\n    }\n    case 'MultiPolygon': {\n      coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n        geometry\n      ).getCoordinates();\n      for (i = 0, ii = coordinates.length; i < ii; ++i) {\n        coords = coordinates[i];\n        for (j = 0, jj = coords.length; j < jj; ++j) {\n          length += getLengthInternal(coords[j], radius);\n        }\n      }\n      break;\n    }\n    case 'GeometryCollection': {\n      const geometries =\n        /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n          geometry\n        ).getGeometries();\n      for (i = 0, ii = geometries.length; i < ii; ++i) {\n        length += getLength(geometries[i], options);\n      }\n      break;\n    }\n    default: {\n      throw new Error('Unsupported geometry type: ' + type);\n    }\n  }\n  return length;\n}\n\n/**\n * Returns the spherical area for a list of coordinates.\n *\n * [Reference](https://trs.jpl.nasa.gov/handle/2014/40409)\n * Robert. G. Chamberlain and William H. Duquette, \"Some Algorithms for\n * Polygons on a Sphere\", JPL Publication 07-03, Jet Propulsion\n * Laboratory, Pasadena, CA, June 2007\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates List of coordinates of a linear\n * ring. If the ring is oriented clockwise, the area will be positive,\n * otherwise it will be negative.\n * @param {number} radius The sphere radius.\n * @return {number} Area (in square meters).\n */\nfunction getAreaInternal(coordinates, radius) {\n  let area = 0;\n  const len = coordinates.length;\n  let x1 = coordinates[len - 1][0];\n  let y1 = coordinates[len - 1][1];\n  for (let i = 0; i < len; i++) {\n    const x2 = coordinates[i][0];\n    const y2 = coordinates[i][1];\n    area +=\n      toRadians(x2 - x1) *\n      (2 + Math.sin(toRadians(y1)) + Math.sin(toRadians(y2)));\n    x1 = x2;\n    y1 = y2;\n  }\n  return (area * radius * radius) / 2.0;\n}\n\n/**\n * Get the spherical area of a geometry.  This is the area (in meters) assuming\n * that polygon edges are segments of great circles on a sphere.\n * @param {import(\"./geom/Geometry.js\").default} geometry A geometry.\n * @param {SphereMetricOptions} [options] Options for the area\n *     calculation.  By default, geometries are assumed to be in 'EPSG:3857'.\n *     You can change this by providing a `projection` option.\n * @return {number} The spherical area (in square meters).\n * @api\n */\nexport function getArea(geometry, options) {\n  options = options || {};\n  const radius = options.radius || DEFAULT_RADIUS;\n  const projection = options.projection || 'EPSG:3857';\n  const type = geometry.getType();\n  if (type !== 'GeometryCollection') {\n    geometry = geometry.clone().transform(projection, 'EPSG:4326');\n  }\n  let area = 0;\n  let coordinates, coords, i, ii, j, jj;\n  switch (type) {\n    case 'Point':\n    case 'MultiPoint':\n    case 'LineString':\n    case 'MultiLineString':\n    case 'LinearRing': {\n      break;\n    }\n    case 'Polygon': {\n      coordinates = /** @type {import(\"./geom/Polygon.js\").default} */ (\n        geometry\n      ).getCoordinates();\n      area = Math.abs(getAreaInternal(coordinates[0], radius));\n      for (i = 1, ii = coordinates.length; i < ii; ++i) {\n        area -= Math.abs(getAreaInternal(coordinates[i], radius));\n      }\n      break;\n    }\n    case 'MultiPolygon': {\n      coordinates = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n        geometry\n      ).getCoordinates();\n      for (i = 0, ii = coordinates.length; i < ii; ++i) {\n        coords = coordinates[i];\n        area += Math.abs(getAreaInternal(coords[0], radius));\n        for (j = 1, jj = coords.length; j < jj; ++j) {\n          area -= Math.abs(getAreaInternal(coords[j], radius));\n        }\n      }\n      break;\n    }\n    case 'GeometryCollection': {\n      const geometries =\n        /** @type {import(\"./geom/GeometryCollection.js\").default} */ (\n          geometry\n        ).getGeometries();\n      for (i = 0, ii = geometries.length; i < ii; ++i) {\n        area += getArea(geometries[i], options);\n      }\n      break;\n    }\n    default: {\n      throw new Error('Unsupported geometry type: ' + type);\n    }\n  }\n  return area;\n}\n\n/**\n * Returns the coordinate at the given distance and bearing from `c1`.\n *\n * @param {import(\"./coordinate.js\").Coordinate} c1 The origin point (`[lon, lat]` in degrees).\n * @param {number} distance The great-circle distance between the origin\n *     point and the target point.\n * @param {number} bearing The bearing (in radians).\n * @param {number} [radius] The sphere radius to use.  Defaults to the Earth's\n *     mean radius using the WGS84 ellipsoid.\n * @return {import(\"./coordinate.js\").Coordinate} The target point.\n */\nexport function offset(c1, distance, bearing, radius) {\n  radius = radius || DEFAULT_RADIUS;\n  const lat1 = toRadians(c1[1]);\n  const lon1 = toRadians(c1[0]);\n  const dByR = distance / radius;\n  const lat = Math.asin(\n    Math.sin(lat1) * Math.cos(dByR) +\n      Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing),\n  );\n  const lon =\n    lon1 +\n    Math.atan2(\n      Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),\n      Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat),\n    );\n  return [toDegrees(lon), toDegrees(lat)];\n}\n","/**\n * @module ol/string\n */\n\n/**\n * @param {number} number Number to be formatted\n * @param {number} width The desired width\n * @param {number} [precision] Precision of the output string (i.e. number of decimal places)\n * @return {string} Formatted string\n */\nexport function padNumber(number, width, precision) {\n  const numberString =\n    precision !== undefined ? number.toFixed(precision) : '' + number;\n  let decimal = numberString.indexOf('.');\n  decimal = decimal === -1 ? numberString.length : decimal;\n  return decimal > width\n    ? numberString\n    : new Array(1 + width - decimal).join('0') + numberString;\n}\n\n/**\n * Adapted from https://github.com/omichelsen/compare-versions/blob/master/index.js\n * @param {string|number} v1 First version\n * @param {string|number} v2 Second version\n * @return {number} Value\n */\nexport function compareVersions(v1, v2) {\n  const s1 = ('' + v1).split('.');\n  const s2 = ('' + v2).split('.');\n\n  for (let i = 0; i < Math.max(s1.length, s2.length); i++) {\n    const n1 = parseInt(s1[i] || '0', 10);\n    const n2 = parseInt(s2[i] || '0', 10);\n\n    if (n1 > n2) {\n      return 1;\n    }\n    if (n2 > n1) {\n      return -1;\n    }\n  }\n\n  return 0;\n}\n","/**\n * @module ol/structs/LRUCache\n */\n\nimport Disposable from '../Disposable.js';\nimport {assert} from '../asserts.js';\n\n/**\n * @typedef {Object} Entry\n * @property {string} key_ Key.\n * @property {Entry|null} newer Newer.\n * @property {Entry|null} older Older.\n * @property {*} value_ Value.\n */\n\n/**\n * @classdesc\n * Implements a Least-Recently-Used cache where the keys do not conflict with\n * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring\n * items from the cache is the responsibility of the user.\n *\n * @fires import(\"../events/Event.js\").default\n * @template T\n */\nclass LRUCache {\n  /**\n   * @param {number} [highWaterMark] High water mark.\n   */\n  constructor(highWaterMark) {\n    /**\n     * Desired max cache size after expireCache(). If set to 0, no cache entries\n     * will be pruned at all.\n     * @type {number}\n     */\n    this.highWaterMark = highWaterMark !== undefined ? highWaterMark : 2048;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.count_ = 0;\n\n    /**\n     * @private\n     * @type {!Object<string, Entry>}\n     */\n    this.entries_ = {};\n\n    /**\n     * @private\n     * @type {?Entry}\n     */\n    this.oldest_ = null;\n\n    /**\n     * @private\n     * @type {?Entry}\n     */\n    this.newest_ = null;\n  }\n\n  deleteOldest() {\n    const entry = this.pop();\n    if (entry instanceof Disposable) {\n      entry.dispose();\n    }\n  }\n\n  /**\n   * @return {boolean} Can expire cache.\n   */\n  canExpireCache() {\n    return this.highWaterMark > 0 && this.getCount() > this.highWaterMark;\n  }\n\n  /**\n   * Expire the cache. When the cache entry is a {@link module:ol/Disposable~Disposable},\n   * the entry will be disposed.\n   * @param {!Object<string, boolean>} [keep] Keys to keep. To be implemented by subclasses.\n   */\n  expireCache(keep) {\n    while (this.canExpireCache()) {\n      this.deleteOldest();\n    }\n  }\n\n  /**\n   * FIXME empty description for jsdoc\n   */\n  clear() {\n    while (this.oldest_) {\n      this.deleteOldest();\n    }\n  }\n\n  /**\n   * @param {string} key Key.\n   * @return {boolean} Contains key.\n   */\n  containsKey(key) {\n    return this.entries_.hasOwnProperty(key);\n  }\n\n  /**\n   * @param {function(T, string, LRUCache<T>): ?} f The function\n   *     to call for every entry from the oldest to the newer. This function takes\n   *     3 arguments (the entry value, the entry key and the LRUCache object).\n   *     The return value is ignored.\n   */\n  forEach(f) {\n    let entry = this.oldest_;\n    while (entry) {\n      f(entry.value_, entry.key_, this);\n      entry = entry.newer;\n    }\n  }\n\n  /**\n   * @param {string} key Key.\n   * @param {*} [options] Options (reserved for subclasses).\n   * @return {T} Value.\n   */\n  get(key, options) {\n    const entry = this.entries_[key];\n    assert(\n      entry !== undefined,\n      'Tried to get a value for a key that does not exist in the cache',\n    );\n    if (entry === this.newest_) {\n      return entry.value_;\n    }\n    if (entry === this.oldest_) {\n      this.oldest_ = /** @type {Entry} */ (this.oldest_.newer);\n      this.oldest_.older = null;\n    } else {\n      entry.newer.older = entry.older;\n      entry.older.newer = entry.newer;\n    }\n    entry.newer = null;\n    entry.older = this.newest_;\n    this.newest_.newer = entry;\n    this.newest_ = entry;\n    return entry.value_;\n  }\n\n  /**\n   * Remove an entry from the cache.\n   * @param {string} key The entry key.\n   * @return {T} The removed entry.\n   */\n  remove(key) {\n    const entry = this.entries_[key];\n    assert(\n      entry !== undefined,\n      'Tried to get a value for a key that does not exist in the cache',\n    );\n    if (entry === this.newest_) {\n      this.newest_ = /** @type {Entry} */ (entry.older);\n      if (this.newest_) {\n        this.newest_.newer = null;\n      }\n    } else if (entry === this.oldest_) {\n      this.oldest_ = /** @type {Entry} */ (entry.newer);\n      if (this.oldest_) {\n        this.oldest_.older = null;\n      }\n    } else {\n      entry.newer.older = entry.older;\n      entry.older.newer = entry.newer;\n    }\n    delete this.entries_[key];\n    --this.count_;\n    return entry.value_;\n  }\n\n  /**\n   * @return {number} Count.\n   */\n  getCount() {\n    return this.count_;\n  }\n\n  /**\n   * @return {Array<string>} Keys.\n   */\n  getKeys() {\n    const keys = new Array(this.count_);\n    let i = 0;\n    let entry;\n    for (entry = this.newest_; entry; entry = entry.older) {\n      keys[i++] = entry.key_;\n    }\n    return keys;\n  }\n\n  /**\n   * @return {Array<T>} Values.\n   */\n  getValues() {\n    const values = new Array(this.count_);\n    let i = 0;\n    let entry;\n    for (entry = this.newest_; entry; entry = entry.older) {\n      values[i++] = entry.value_;\n    }\n    return values;\n  }\n\n  /**\n   * @return {T} Last value.\n   */\n  peekLast() {\n    return this.oldest_.value_;\n  }\n\n  /**\n   * @return {string} Last key.\n   */\n  peekLastKey() {\n    return this.oldest_.key_;\n  }\n\n  /**\n   * Get the key of the newest item in the cache.  Throws if the cache is empty.\n   * @return {string} The newest key.\n   */\n  peekFirstKey() {\n    return this.newest_.key_;\n  }\n\n  /**\n   * Return an entry without updating least recently used time.\n   * @param {string} key Key.\n   * @return {T|undefined} Value.\n   */\n  peek(key) {\n    return this.entries_[key]?.value_;\n  }\n\n  /**\n   * @return {T} value Value.\n   */\n  pop() {\n    const entry = this.oldest_;\n    delete this.entries_[entry.key_];\n    if (entry.newer) {\n      entry.newer.older = null;\n    }\n    this.oldest_ = /** @type {Entry} */ (entry.newer);\n    if (!this.oldest_) {\n      this.newest_ = null;\n    }\n    --this.count_;\n    return entry.value_;\n  }\n\n  /**\n   * @param {string} key Key.\n   * @param {T} value Value.\n   */\n  replace(key, value) {\n    this.get(key); // update `newest_`\n    this.entries_[key].value_ = value;\n  }\n\n  /**\n   * @param {string} key Key.\n   * @param {T} value Value.\n   */\n  set(key, value) {\n    assert(\n      !(key in this.entries_),\n      'Tried to set a value for a key that is used already',\n    );\n    const entry = {\n      key_: key,\n      newer: null,\n      older: this.newest_,\n      value_: value,\n    };\n    if (!this.newest_) {\n      this.oldest_ = entry;\n    } else {\n      this.newest_.newer = entry;\n    }\n    this.newest_ = entry;\n    this.entries_[key] = entry;\n    ++this.count_;\n  }\n\n  /**\n   * Set a maximum number of entries for the cache.\n   * @param {number} size Cache size.\n   * @api\n   */\n  setSize(size) {\n    this.highWaterMark = size;\n  }\n}\n\nexport default LRUCache;\n","/**\n * @module ol/structs/RBush\n */\nimport RBush_ from 'rbush';\nimport {createOrUpdate, equals} from '../extent.js';\nimport {isEmpty} from '../obj.js';\nimport {getUid} from '../util.js';\n\n/**\n * @typedef {import(\"rbush\").BBox & {value: T}} Entry\n * @template T\n */\n\n/**\n * @classdesc\n * Wrapper around the RBush by Vladimir Agafonkin.\n * See https://github.com/mourner/rbush.\n *\n * @template {Object} T\n */\nclass RBush {\n  /**\n   * @param {number} [maxEntries] Max entries.\n   */\n  constructor(maxEntries) {\n    /**\n     * @private\n     * @type {RBush_<Entry<T>>}\n     */\n    this.rbush_ = new RBush_(maxEntries);\n\n    /**\n     * A mapping between the objects added to this rbush wrapper\n     * and the objects that are actually added to the internal rbush.\n     * @private\n     * @type {Object<string, Entry<T>>}\n     */\n    this.items_ = {};\n  }\n\n  /**\n   * Insert a value into the RBush.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {T} value Value.\n   */\n  insert(extent, value) {\n    /** @type {Entry<T>} */\n    const item = {\n      minX: extent[0],\n      minY: extent[1],\n      maxX: extent[2],\n      maxY: extent[3],\n      value: value,\n    };\n\n    this.rbush_.insert(item);\n    this.items_[getUid(value)] = item;\n  }\n\n  /**\n   * Bulk-insert values into the RBush.\n   * @param {Array<import(\"../extent.js\").Extent>} extents Extents.\n   * @param {Array<T>} values Values.\n   */\n  load(extents, values) {\n    const items = new Array(values.length);\n    for (let i = 0, l = values.length; i < l; i++) {\n      const extent = extents[i];\n      const value = values[i];\n\n      /** @type {Entry<T>} */\n      const item = {\n        minX: extent[0],\n        minY: extent[1],\n        maxX: extent[2],\n        maxY: extent[3],\n        value: value,\n      };\n      items[i] = item;\n      this.items_[getUid(value)] = item;\n    }\n    this.rbush_.load(items);\n  }\n\n  /**\n   * Remove a value from the RBush.\n   * @param {T} value Value.\n   * @return {boolean} Removed.\n   */\n  remove(value) {\n    const uid = getUid(value);\n\n    // get the object in which the value was wrapped when adding to the\n    // internal rbush. then use that object to do the removal.\n    const item = this.items_[uid];\n    delete this.items_[uid];\n    return this.rbush_.remove(item) !== null;\n  }\n\n  /**\n   * Update the extent of a value in the RBush.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {T} value Value.\n   */\n  update(extent, value) {\n    const item = this.items_[getUid(value)];\n    const bbox = [item.minX, item.minY, item.maxX, item.maxY];\n    if (!equals(bbox, extent)) {\n      this.remove(value);\n      this.insert(extent, value);\n    }\n  }\n\n  /**\n   * Return all values in the RBush.\n   * @return {Array<T>} All.\n   */\n  getAll() {\n    const items = this.rbush_.all();\n    return items.map(function (item) {\n      return item.value;\n    });\n  }\n\n  /**\n   * Return all values in the given extent.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @return {Array<T>} All in extent.\n   */\n  getInExtent(extent) {\n    /** @type {import(\"rbush\").BBox} */\n    const bbox = {\n      minX: extent[0],\n      minY: extent[1],\n      maxX: extent[2],\n      maxY: extent[3],\n    };\n    const items = this.rbush_.search(bbox);\n    return items.map(function (item) {\n      return item.value;\n    });\n  }\n\n  /**\n   * Calls a callback function with each value in the tree.\n   * If the callback returns a truthy value, this value is returned without\n   * checking the rest of the tree.\n   * @param {function(T): R} callback Callback.\n   * @return {R|undefined} Callback return value.\n   * @template R\n   */\n  forEach(callback) {\n    return this.forEach_(this.getAll(), callback);\n  }\n\n  /**\n   * Calls a callback function with each value in the provided extent.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {function(T): R} callback Callback.\n   * @return {R|undefined} Callback return value.\n   * @template R\n   */\n  forEachInExtent(extent, callback) {\n    return this.forEach_(this.getInExtent(extent), callback);\n  }\n\n  /**\n   * @param {Array<T>} values Values.\n   * @param {function(T): R} callback Callback.\n   * @return {R|undefined} Callback return value.\n   * @template R\n   * @private\n   */\n  forEach_(values, callback) {\n    let result;\n    for (let i = 0, l = values.length; i < l; i++) {\n      result = callback(values[i]);\n      if (result) {\n        return result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * @return {boolean} Is empty.\n   */\n  isEmpty() {\n    return isEmpty(this.items_);\n  }\n\n  /**\n   * Remove all values from the RBush.\n   */\n  clear() {\n    this.rbush_.clear();\n    this.items_ = {};\n  }\n\n  /**\n   * @param {import(\"../extent.js\").Extent} [extent] Extent.\n   * @return {import(\"../extent.js\").Extent} Extent.\n   */\n  getExtent(extent) {\n    const data = this.rbush_.toJSON();\n    return createOrUpdate(data.minX, data.minY, data.maxX, data.maxY, extent);\n  }\n\n  /**\n   * @param {RBush<T>} rbush R-Tree.\n   */\n  concat(rbush) {\n    this.rbush_.load(rbush.rbush_.all());\n    for (const i in rbush.items_) {\n      this.items_[i] = rbush.items_[i];\n    }\n  }\n}\n\nexport default RBush;\n","/**\n * @module ol/style/Circle\n */\n\nimport RegularShape from './RegularShape.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} radius Circle radius.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {Array<number>} [displacement=[0,0]] displacement\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. A two dimensional scale will produce an ellipse.\n * Unless two dimensional scaling is required a better result may be obtained with an appropriate setting for `radius`.\n * @property {number} [rotation=0] Rotation in radians\n * (positive rotation clockwise, meaningful only when used in conjunction with a two dimensional scale).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view\n * (meaningful only when used in conjunction with a two dimensional scale).\n * @property {import('./Style.js').DeclutterMode} [declutterMode] Declutter mode\n */\n\n/**\n * @classdesc\n * Set circle style for vector features.\n * @api\n */\nclass CircleStyle extends RegularShape {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options ? options : {radius: 5};\n\n    super({\n      points: Infinity,\n      fill: options.fill,\n      radius: options.radius,\n      stroke: options.stroke,\n      scale: options.scale !== undefined ? options.scale : 1,\n      rotation: options.rotation !== undefined ? options.rotation : 0,\n      rotateWithView:\n        options.rotateWithView !== undefined ? options.rotateWithView : false,\n      displacement:\n        options.displacement !== undefined ? options.displacement : [0, 0],\n      declutterMode: options.declutterMode,\n    });\n  }\n\n  /**\n   * Clones the style.\n   * @return {CircleStyle} The cloned style.\n   * @api\n   * @override\n   */\n  clone() {\n    const scale = this.getScale();\n    const style = new CircleStyle({\n      fill: this.getFill() ? this.getFill().clone() : undefined,\n      stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n      radius: this.getRadius(),\n      scale: Array.isArray(scale) ? scale.slice() : scale,\n      rotation: this.getRotation(),\n      rotateWithView: this.getRotateWithView(),\n      displacement: this.getDisplacement().slice(),\n      declutterMode: this.getDeclutterMode(),\n    });\n    style.setOpacity(this.getOpacity());\n    return style;\n  }\n}\n\nexport default CircleStyle;\n","/**\n * @module ol/style/Fill\n */\n\nimport ImageState from '../ImageState.js';\nimport {asArray} from '../color.js';\nimport {getUid} from '../util.js';\nimport {get as getIconImage} from './IconImage.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|import('../colorlike.js').PatternDescriptor|null} [color=null] A color,\n * gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats. For polygon fills (not for {@link import(\"./RegularShape.js\").default} fills),\n * a pattern can also be provided as {@link module:ol/colorlike~PatternDescriptor}.\n * Default null; if null, the Canvas/renderer default black will be used.\n */\n\n/**\n * @classdesc\n * Set fill style for vector features.\n * @api\n */\nclass Fill {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    /**\n     * @private\n     * @type {import(\"./IconImage.js\").default|null}\n     */\n    this.patternImage_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|import('../colorlike.js').PatternDescriptor|null}\n     */\n    this.color_ = null;\n    if (options.color !== undefined) {\n      this.setColor(options.color);\n    }\n  }\n\n  /**\n   * Clones the style. The color is not cloned if it is a {@link module:ol/colorlike~ColorLike}.\n   * @return {Fill} The cloned style.\n   * @api\n   */\n  clone() {\n    const color = this.getColor();\n    return new Fill({\n      color: Array.isArray(color) ? color.slice() : color || undefined,\n    });\n  }\n\n  /**\n   * Get the fill color.\n   * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|import('../colorlike.js').PatternDescriptor|null} Color.\n   * @api\n   */\n  getColor() {\n    return this.color_;\n  }\n\n  /**\n   * Set the color.\n   *\n   * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike|import('../colorlike.js').PatternDescriptor|null} color Color.\n   * @api\n   */\n  setColor(color) {\n    if (color !== null && typeof color === 'object' && 'src' in color) {\n      const patternImage = getIconImage(\n        null,\n        color.src,\n        {crossOrigin: 'anonymous'},\n        undefined,\n        color.offset ? null : color.color ? color.color : null,\n        !(color.offset && color.size),\n      );\n      patternImage.ready().then(() => {\n        this.patternImage_ = null;\n      });\n      if (patternImage.getImageState() === ImageState.IDLE) {\n        patternImage.load();\n      }\n      if (patternImage.getImageState() === ImageState.LOADING) {\n        this.patternImage_ = patternImage;\n      }\n    }\n    this.color_ = color;\n  }\n\n  /**\n   * @return {string} Key of the fill for cache lookup.\n   */\n  getKey() {\n    const fill = this.getColor();\n    if (!fill) {\n      return '';\n    }\n    return fill instanceof CanvasPattern || fill instanceof CanvasGradient\n      ? getUid(fill)\n      : typeof fill === 'object' && 'src' in fill\n        ? fill.src + ':' + fill.offset\n        : asArray(fill).toString();\n  }\n\n  /**\n   * @return {boolean} The fill style is loading an image pattern.\n   */\n  loading() {\n    return !!this.patternImage_;\n  }\n\n  /**\n   * @return {Promise<void>} `false` or a promise that resolves when the style is ready to use.\n   */\n  ready() {\n    return this.patternImage_ ? this.patternImage_.ready() : Promise.resolve();\n  }\n}\n\nexport default Fill;\n","/**\n * @module ol/style/Icon\n */\nimport ImageState from '../ImageState.js';\nimport {assert} from '../asserts.js';\nimport {asArray} from '../color.js';\nimport EventType from '../events/EventType.js';\nimport {getUid} from '../util.js';\nimport {get as getIconImage} from './IconImage.js';\nimport ImageStyle from './Image.js';\n\n/**\n * @typedef {'fraction' | 'pixels'} IconAnchorUnits\n * Anchor unit can be either a fraction of the icon size or in pixels.\n */\n\n/**\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} IconOrigin\n * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.\n */\n\n/**\n * @typedef {Object} Options\n * @property {Array<number>} [anchor=[0.5, 0.5]] Anchor. Default value is the icon center.\n * @property {IconOrigin} [anchorOrigin='top-left'] Origin of the anchor: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {IconAnchorUnits} [anchorXUnits='fraction'] Units in which the anchor x value is\n * specified. A value of `'fraction'` indicates the x value is a fraction of the icon. A value of `'pixels'` indicates\n * the x value in pixels.\n * @property {IconAnchorUnits} [anchorYUnits='fraction'] Units in which the anchor y value is\n * specified. A value of `'fraction'` indicates the y value is a fraction of the icon. A value of `'pixels'` indicates\n * the y value in pixels.\n * @property {import(\"../color.js\").Color|string} [color] Color to tint the icon. If not specified,\n * the icon will be left as is.\n * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that you must provide a\n * `crossOrigin` value if you want to access pixel data with the Canvas renderer.\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.\n * @property {ReferrerPolicy} [referrerPolicy] The `referrerPolicy` property for loaded images.\n * @property {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap} [img] Image object for the icon.\n * @property {Array<number>} [displacement=[0, 0]] Displacement of the icon in pixels.\n * Positive values will shift the icon right and up.\n * @property {number} [opacity=1] Opacity of the icon.\n * @property {number} [width] The width of the icon in pixels. This can't be used together with `scale`.\n * @property {number} [height] The height of the icon in pixels. This can't be used together with `scale`.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the icon with the view.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {Array<number>} [offset=[0, 0]] Offset which, together with `size` and `offsetOrigin`, defines the\n * sub-rectangle to use from the original (sprite) image.\n * @property {IconOrigin} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,\n * `top-left` or `top-right`.\n * @property {import(\"../size.js\").Size} [size] Icon size in pixels. Used together with `offset` to define the\n * sub-rectangle to use from the original (sprite) image.\n * @property {string} [src] Image source URI.\n * @property {import(\"./Style.js\").DeclutterMode} [declutterMode] Declutter mode.\n */\n\n/**\n * @param {number} width The width.\n * @param {number} height The height.\n * @param {number|undefined} wantedWidth The wanted width.\n * @param {number|undefined} wantedHeight The wanted height.\n * @return {number|Array<number>} The scale.\n */\nfunction calculateScale(width, height, wantedWidth, wantedHeight) {\n  if (wantedWidth !== undefined && wantedHeight !== undefined) {\n    return [wantedWidth / width, wantedHeight / height];\n  }\n  if (wantedWidth !== undefined) {\n    return wantedWidth / width;\n  }\n  if (wantedHeight !== undefined) {\n    return wantedHeight / height;\n  }\n  return 1;\n}\n\n/**\n * @classdesc\n * Set icon style for vector features.\n * @api\n */\nclass Icon extends ImageStyle {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    /**\n     * @type {number}\n     */\n    const opacity = options.opacity !== undefined ? options.opacity : 1;\n\n    /**\n     * @type {number}\n     */\n    const rotation = options.rotation !== undefined ? options.rotation : 0;\n\n    /**\n     * @type {number|import(\"../size.js\").Size}\n     */\n    const scale = options.scale !== undefined ? options.scale : 1;\n\n    /**\n     * @type {boolean}\n     */\n    const rotateWithView =\n      options.rotateWithView !== undefined ? options.rotateWithView : false;\n\n    super({\n      opacity: opacity,\n      rotation: rotation,\n      scale: scale,\n      displacement:\n        options.displacement !== undefined ? options.displacement : [0, 0],\n      rotateWithView: rotateWithView,\n      declutterMode: options.declutterMode,\n    });\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.normalizedAnchor_ = null;\n\n    /**\n     * @private\n     * @type {IconOrigin}\n     */\n    this.anchorOrigin_ =\n      options.anchorOrigin !== undefined ? options.anchorOrigin : 'top-left';\n\n    /**\n     * @private\n     * @type {IconAnchorUnits}\n     */\n    this.anchorXUnits_ =\n      options.anchorXUnits !== undefined ? options.anchorXUnits : 'fraction';\n\n    /**\n     * @private\n     * @type {IconAnchorUnits}\n     */\n    this.anchorYUnits_ =\n      options.anchorYUnits !== undefined ? options.anchorYUnits : 'fraction';\n\n    /**\n     * @private\n     * @type {?string}\n     */\n    this.crossOrigin_ =\n      options.crossOrigin !== undefined ? options.crossOrigin : null;\n\n    /**\n     * @private\n     * @type {ReferrerPolicy}\n     */\n    this.referrerPolicy_ = options.referrerPolicy;\n\n    const image = options.img !== undefined ? options.img : null;\n\n    let cacheKey = options.src;\n\n    assert(\n      !(cacheKey !== undefined && image),\n      '`image` and `src` cannot be provided at the same time',\n    );\n\n    if ((cacheKey === undefined || cacheKey.length === 0) && image) {\n      cacheKey = /** @type {HTMLImageElement} */ (image).src || getUid(image);\n    }\n    assert(\n      cacheKey !== undefined && cacheKey.length > 0,\n      'A defined and non-empty `src` or `image` must be provided',\n    );\n\n    assert(\n      !(\n        (options.width !== undefined || options.height !== undefined) &&\n        options.scale !== undefined\n      ),\n      '`width` or `height` cannot be provided together with `scale`',\n    );\n\n    let imageState;\n    if (options.src !== undefined) {\n      imageState = ImageState.IDLE;\n    } else if (image !== undefined) {\n      if ('complete' in image) {\n        if (image.complete) {\n          imageState = image.src ? ImageState.LOADED : ImageState.IDLE;\n        } else {\n          imageState = ImageState.LOADING;\n        }\n      } else {\n        imageState = ImageState.LOADED;\n      }\n    }\n\n    /**\n     * @private\n     * @type {import(\"../color.js\").Color}\n     */\n    this.color_ = options.color !== undefined ? asArray(options.color) : null;\n\n    /**\n     * @private\n     * @type {import(\"./IconImage.js\").default}\n     */\n    this.iconImage_ = getIconImage(\n      image,\n      /** @type {string} */ (cacheKey),\n      {\n        crossOrigin: this.crossOrigin_,\n        referrerPolicy: this.referrerPolicy_,\n      },\n      imageState,\n      this.color_,\n    );\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.offset_ = options.offset !== undefined ? options.offset : [0, 0];\n    /**\n     * @private\n     * @type {IconOrigin}\n     */\n    this.offsetOrigin_ =\n      options.offsetOrigin !== undefined ? options.offsetOrigin : 'top-left';\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.origin_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../size.js\").Size}\n     */\n    this.size_ = options.size !== undefined ? options.size : null;\n\n    /**\n     * @private\n     */\n    this.initialOptions_;\n\n    /**\n     * Calculate the scale if width or height were given.\n     */\n    if (options.width !== undefined || options.height !== undefined) {\n      let width, height;\n      if (options.size) {\n        [width, height] = options.size;\n      } else {\n        const image = this.getImage(1);\n        if (image.width && image.height) {\n          width = image.width;\n          height = image.height;\n        } else if (image instanceof HTMLImageElement) {\n          this.initialOptions_ = options;\n          const onload = () => {\n            this.unlistenImageChange(onload);\n            if (!this.initialOptions_) {\n              return;\n            }\n            const imageSize = this.iconImage_.getSize();\n            this.setScale(\n              calculateScale(\n                imageSize[0],\n                imageSize[1],\n                options.width,\n                options.height,\n              ),\n            );\n          };\n          this.listenImageChange(onload);\n          return;\n        }\n      }\n      if (width !== undefined) {\n        this.setScale(\n          calculateScale(width, height, options.width, options.height),\n        );\n      }\n    }\n  }\n\n  /**\n   * Clones the style. The underlying Image/HTMLCanvasElement is not cloned.\n   * @return {Icon} The cloned style.\n   * @api\n   * @override\n   */\n  clone() {\n    let scale, width, height;\n    if (this.initialOptions_) {\n      width = this.initialOptions_.width;\n      height = this.initialOptions_.height;\n    } else {\n      scale = this.getScale();\n      scale = Array.isArray(scale) ? scale.slice() : scale;\n    }\n    return new Icon({\n      anchor: this.anchor_.slice(),\n      anchorOrigin: this.anchorOrigin_,\n      anchorXUnits: this.anchorXUnits_,\n      anchorYUnits: this.anchorYUnits_,\n      color:\n        this.color_ && this.color_.slice\n          ? this.color_.slice()\n          : this.color_ || undefined,\n      crossOrigin: this.crossOrigin_,\n      referrerPolicy: this.referrerPolicy_,\n      offset: this.offset_.slice(),\n      offsetOrigin: this.offsetOrigin_,\n      opacity: this.getOpacity(),\n      rotateWithView: this.getRotateWithView(),\n      rotation: this.getRotation(),\n      scale,\n      width,\n      height,\n      size: this.size_ !== null ? this.size_.slice() : undefined,\n      src: this.getSrc(),\n      displacement: this.getDisplacement().slice(),\n      declutterMode: this.getDeclutterMode(),\n    });\n  }\n\n  /**\n   * Get the anchor point in pixels. The anchor determines the center point for the\n   * symbolizer.\n   * @return {Array<number>} Anchor.\n   * @api\n   * @override\n   */\n  getAnchor() {\n    let anchor = this.normalizedAnchor_;\n    if (!anchor) {\n      anchor = this.anchor_;\n      const size = this.getSize();\n      if (\n        this.anchorXUnits_ == 'fraction' ||\n        this.anchorYUnits_ == 'fraction'\n      ) {\n        if (!size) {\n          return null;\n        }\n        anchor = this.anchor_.slice();\n        if (this.anchorXUnits_ == 'fraction') {\n          anchor[0] *= size[0];\n        }\n        if (this.anchorYUnits_ == 'fraction') {\n          anchor[1] *= size[1];\n        }\n      }\n\n      if (this.anchorOrigin_ != 'top-left') {\n        if (!size) {\n          return null;\n        }\n        if (anchor === this.anchor_) {\n          anchor = this.anchor_.slice();\n        }\n        if (\n          this.anchorOrigin_ == 'top-right' ||\n          this.anchorOrigin_ == 'bottom-right'\n        ) {\n          anchor[0] = -anchor[0] + size[0];\n        }\n        if (\n          this.anchorOrigin_ == 'bottom-left' ||\n          this.anchorOrigin_ == 'bottom-right'\n        ) {\n          anchor[1] = -anchor[1] + size[1];\n        }\n      }\n      this.normalizedAnchor_ = anchor;\n    }\n    const displacement = this.getDisplacement();\n    const scale = this.getScaleArray();\n    // anchor is scaled by renderer but displacement should not be scaled\n    // so divide by scale here\n    return [\n      anchor[0] - displacement[0] / scale[0],\n      anchor[1] + displacement[1] / scale[1],\n    ];\n  }\n\n  /**\n   * Set the anchor point. The anchor determines the center point for the\n   * symbolizer.\n   *\n   * @param {Array<number>} anchor Anchor.\n   * @api\n   */\n  setAnchor(anchor) {\n    this.anchor_ = anchor;\n    this.normalizedAnchor_ = null;\n  }\n\n  /**\n   * Get the icon color.\n   * @return {import(\"../color.js\").Color} Color.\n   * @api\n   */\n  getColor() {\n    return this.color_;\n  }\n\n  /**\n   * Set the icon color.\n   *\n   * Warning: Repeatedly setting the color on an icon style\n   * causes the icon image to be re-created each time. This can have a\n   * severe performance impact.\n   *\n   * @param {import(\"../color.js\").Color|string|null|undefined} color Color.\n   */\n  setColor(color) {\n    const nextColor = color ? asArray(color) : null;\n    if (\n      this.color_ === nextColor ||\n      (this.color_ &&\n        nextColor &&\n        this.color_.length === nextColor.length &&\n        this.color_.every((value, index) => value === nextColor[index]))\n    ) {\n      // Discard if the color hasn't changed.\n      return;\n    }\n\n    this.color_ = nextColor;\n    const src = this.getSrc();\n    const image = src !== undefined ? null : this.getHitDetectionImage();\n    const imageState =\n      src !== undefined ? ImageState.IDLE : this.iconImage_.getImageState();\n    this.iconImage_ = getIconImage(\n      image,\n      src,\n      {\n        crossOrigin: this.crossOrigin_,\n        referrerPolicy: this.referrerPolicy_,\n      },\n      imageState,\n      this.color_,\n    );\n  }\n\n  /**\n   * Get the image icon.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap} Image or Canvas element. If the Icon\n   * style was configured with `src` or with a not let loaded `img`, an `ImageBitmap` will be returned.\n   * @api\n   * @override\n   */\n  getImage(pixelRatio) {\n    return this.iconImage_.getImage(pixelRatio);\n  }\n\n  /**\n   * Get the pixel ratio.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {number} The pixel ratio of the image.\n   * @api\n   * @override\n   */\n  getPixelRatio(pixelRatio) {\n    return this.iconImage_.getPixelRatio(pixelRatio);\n  }\n\n  /**\n   * @return {import(\"../size.js\").Size} Image size.\n   * @override\n   */\n  getImageSize() {\n    return this.iconImage_.getSize();\n  }\n\n  /**\n   * @return {import(\"../ImageState.js\").default} Image state.\n   * @override\n   */\n  getImageState() {\n    return this.iconImage_.getImageState();\n  }\n\n  /**\n   * @return {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap} Image element.\n   * @override\n   */\n  getHitDetectionImage() {\n    return this.iconImage_.getHitDetectionImage();\n  }\n\n  /**\n   * Get the origin of the symbolizer.\n   * @return {Array<number>} Origin.\n   * @api\n   * @override\n   */\n  getOrigin() {\n    if (this.origin_) {\n      return this.origin_;\n    }\n    let offset = this.offset_;\n\n    if (this.offsetOrigin_ != 'top-left') {\n      const size = this.getSize();\n      const iconImageSize = this.iconImage_.getSize();\n      if (!size || !iconImageSize) {\n        return null;\n      }\n      offset = offset.slice();\n      if (\n        this.offsetOrigin_ == 'top-right' ||\n        this.offsetOrigin_ == 'bottom-right'\n      ) {\n        offset[0] = iconImageSize[0] - size[0] - offset[0];\n      }\n      if (\n        this.offsetOrigin_ == 'bottom-left' ||\n        this.offsetOrigin_ == 'bottom-right'\n      ) {\n        offset[1] = iconImageSize[1] - size[1] - offset[1];\n      }\n    }\n    this.origin_ = offset;\n    return this.origin_;\n  }\n\n  /**\n   * Get the image URL.\n   * @return {string|undefined} Image src.\n   * @api\n   */\n  getSrc() {\n    return this.iconImage_.getSrc();\n  }\n\n  /**\n   * Set the image URI\n   * @param {string} src Image source URI\n   * @api\n   */\n  setSrc(src) {\n    this.iconImage_ = getIconImage(\n      null,\n      src,\n      {\n        crossOrigin: this.crossOrigin_,\n        referrerPolicy: this.referrerPolicy_,\n      },\n      ImageState.IDLE,\n      this.color_,\n    );\n  }\n\n  /**\n   * Get the size of the icon (in pixels).\n   * @return {import(\"../size.js\").Size} Image size.\n   * @api\n   * @override\n   */\n  getSize() {\n    return !this.size_ ? this.iconImage_.getSize() : this.size_;\n  }\n\n  /**\n   * Get the width of the icon (in pixels). Will return undefined when the icon image is not yet loaded.\n   * @return {number} Icon width (in pixels).\n   * @api\n   */\n  getWidth() {\n    const scale = this.getScaleArray();\n    if (this.size_) {\n      return this.size_[0] * scale[0];\n    }\n    if (this.iconImage_.getImageState() == ImageState.LOADED) {\n      return this.iconImage_.getSize()[0] * scale[0];\n    }\n    return undefined;\n  }\n\n  /**\n   * Get the height of the icon (in pixels). Will return undefined when the icon image is not yet loaded.\n   * @return {number} Icon height (in pixels).\n   * @api\n   */\n  getHeight() {\n    const scale = this.getScaleArray();\n    if (this.size_) {\n      return this.size_[1] * scale[1];\n    }\n    if (this.iconImage_.getImageState() == ImageState.LOADED) {\n      return this.iconImage_.getSize()[1] * scale[1];\n    }\n    return undefined;\n  }\n\n  /**\n   * Set the scale.\n   *\n   * @param {number|import(\"../size.js\").Size} scale Scale.\n   * @api\n   * @override\n   */\n  setScale(scale) {\n    delete this.initialOptions_;\n    super.setScale(scale);\n  }\n\n  /**\n   * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n   * @override\n   */\n  listenImageChange(listener) {\n    this.iconImage_.addEventListener(EventType.CHANGE, listener);\n  }\n\n  /**\n   * Load not yet loaded URI.\n   * When rendering a feature with an icon style, the vector renderer will\n   * automatically call this method. However, you might want to call this\n   * method yourself for preloading or other purposes.\n   * @api\n   * @override\n   */\n  load() {\n    this.iconImage_.load();\n  }\n\n  /**\n   * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n   * @override\n   */\n  unlistenImageChange(listener) {\n    this.iconImage_.removeEventListener(EventType.CHANGE, listener);\n  }\n\n  /**\n   * @override\n   */\n  ready() {\n    return this.iconImage_.ready();\n  }\n}\n\nexport default Icon;\n","/**\n * @module ol/style/IconImage\n */\n\nimport {decodeFallback} from '../Image.js';\nimport ImageState from '../ImageState.js';\nimport {asString} from '../color.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport EventType from '../events/EventType.js';\nimport EventTarget from '../events/Target.js';\nimport {shared as iconImageCache} from './IconImageCache.js';\n\n/**\n * @type {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D}\n */\nlet taintedTestContext = null;\n\nclass IconImage extends EventTarget {\n  /**\n   * @param {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap|null} image Image.\n   * @param {string|undefined} src Src.\n   * @param {import('../dom.js').ImageAttributes} imageAttributes Image attributes options.\n   * @param {import(\"../ImageState.js\").default|undefined} imageState Image state.\n   * @param {import(\"../color.js\").Color|string|null} color Color.\n   */\n  constructor(image, src, imageAttributes, imageState, color) {\n    super();\n\n    /**\n     * @private\n     * @type {HTMLImageElement|OffscreenCanvas|HTMLCanvasElement|ImageBitmap}\n     */\n    this.hitDetectionImage_ = null;\n\n    /**\n     * @private\n     * @type {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap|null}\n     */\n    this.image_ = image;\n\n    /**\n     * @private\n     * @type {string|null}\n     */\n    this.crossOrigin_ = imageAttributes?.crossOrigin;\n\n    /**\n     * @private\n     * @type {ReferrerPolicy}\n     */\n    this.referrerPolicy_ = imageAttributes?.referrerPolicy;\n\n    /**\n     * @private\n     * @type {Object<number, HTMLCanvasElement|OffscreenCanvas>}\n     */\n    this.canvas_ = {};\n\n    /**\n     * @private\n     * @type {import(\"../color.js\").Color|string|null}\n     */\n    this.color_ = color;\n\n    /**\n     * @private\n     * @type {import(\"../ImageState.js\").default}\n     */\n    this.imageState_ = imageState === undefined ? ImageState.IDLE : imageState;\n\n    /**\n     * @private\n     * @type {import(\"../size.js\").Size|null}\n     */\n    this.size_ =\n      image && image.width && image.height ? [image.width, image.height] : null;\n\n    /**\n     * @private\n     * @type {string|undefined}\n     */\n    this.src_ = src;\n\n    /**\n     * @private\n     */\n    this.tainted_;\n\n    /**\n     * @private\n     * @type {Promise<void>|null}\n     */\n    this.ready_ = null;\n  }\n\n  /**\n   * @private\n   */\n  initializeImage_() {\n    this.image_ = new Image();\n    if (this.crossOrigin_ !== null) {\n      this.image_.crossOrigin = this.crossOrigin_;\n    }\n    if (this.referrerPolicy_ !== undefined) {\n      this.image_.referrerPolicy = this.referrerPolicy_;\n    }\n  }\n\n  /**\n   * @private\n   * @return {boolean} The image canvas is tainted.\n   */\n  isTainted_() {\n    if (this.tainted_ === undefined && this.imageState_ === ImageState.LOADED) {\n      if (!taintedTestContext) {\n        taintedTestContext = createCanvasContext2D(1, 1, undefined, {\n          willReadFrequently: true,\n        });\n      }\n      taintedTestContext.drawImage(this.image_, 0, 0);\n      try {\n        taintedTestContext.getImageData(0, 0, 1, 1);\n        this.tainted_ = false;\n      } catch {\n        taintedTestContext = null;\n        this.tainted_ = true;\n      }\n    }\n    return this.tainted_ === true;\n  }\n\n  /**\n   * @private\n   */\n  dispatchChangeEvent_() {\n    this.dispatchEvent(EventType.CHANGE);\n  }\n\n  /**\n   * @private\n   */\n  handleImageError_() {\n    this.imageState_ = ImageState.ERROR;\n    this.dispatchChangeEvent_();\n  }\n\n  /**\n   * @private\n   */\n  handleImageLoad_() {\n    this.imageState_ = ImageState.LOADED;\n    this.size_ = [this.image_.width, this.image_.height];\n    this.dispatchChangeEvent_();\n  }\n\n  /**\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap} Image or Canvas element or image bitmap.\n   */\n  getImage(pixelRatio) {\n    if (!this.image_) {\n      this.initializeImage_();\n    }\n    this.replaceColor_(pixelRatio);\n    return this.canvas_[pixelRatio] ? this.canvas_[pixelRatio] : this.image_;\n  }\n\n  /**\n   * @param {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap} image Image.\n   */\n  setImage(image) {\n    this.image_ = image;\n  }\n\n  /**\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {number} Image or Canvas element.\n   */\n  getPixelRatio(pixelRatio) {\n    this.replaceColor_(pixelRatio);\n    return this.canvas_[pixelRatio] ? pixelRatio : 1;\n  }\n\n  /**\n   * @return {import(\"../ImageState.js\").default} Image state.\n   */\n  getImageState() {\n    return this.imageState_;\n  }\n\n  /**\n   * @return {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap} Image element.\n   */\n  getHitDetectionImage() {\n    if (!this.image_) {\n      this.initializeImage_();\n    }\n    if (!this.hitDetectionImage_) {\n      if (this.isTainted_()) {\n        const width = this.size_[0];\n        const height = this.size_[1];\n        const context = createCanvasContext2D(width, height);\n        context.fillRect(0, 0, width, height);\n        this.hitDetectionImage_ = context.canvas;\n      } else {\n        this.hitDetectionImage_ = this.image_;\n      }\n    }\n    return this.hitDetectionImage_;\n  }\n\n  /**\n   * Get the size of the icon (in pixels).\n   * @return {import(\"../size.js\").Size} Image size.\n   */\n  getSize() {\n    return this.size_;\n  }\n\n  /**\n   * @return {string|undefined} Image src.\n   */\n  getSrc() {\n    return this.src_;\n  }\n\n  /**\n   * Load not yet loaded URI.\n   */\n  load() {\n    if (this.imageState_ !== ImageState.IDLE) {\n      return;\n    }\n    if (!this.image_) {\n      this.initializeImage_();\n    }\n\n    this.imageState_ = ImageState.LOADING;\n    try {\n      if (this.src_ !== undefined) {\n        /** @type {HTMLImageElement} */ (this.image_).src = this.src_;\n      }\n    } catch {\n      this.handleImageError_();\n    }\n    if (this.image_ instanceof HTMLImageElement) {\n      decodeFallback(this.image_, this.src_)\n        .then((image) => {\n          this.image_ = image;\n          this.handleImageLoad_();\n        })\n        .catch(this.handleImageError_.bind(this));\n    }\n  }\n\n  /**\n   * @param {number} pixelRatio Pixel ratio.\n   * @private\n   */\n  replaceColor_(pixelRatio) {\n    if (\n      !this.color_ ||\n      this.canvas_[pixelRatio] ||\n      this.imageState_ !== ImageState.LOADED\n    ) {\n      return;\n    }\n\n    const image = this.image_;\n    const ctx = createCanvasContext2D(\n      Math.ceil(image.width * pixelRatio),\n      Math.ceil(image.height * pixelRatio),\n    );\n    const canvas = ctx.canvas;\n\n    ctx.scale(pixelRatio, pixelRatio);\n    ctx.drawImage(image, 0, 0);\n\n    ctx.globalCompositeOperation = 'multiply';\n    ctx.fillStyle = asString(this.color_);\n    ctx.fillRect(0, 0, canvas.width / pixelRatio, canvas.height / pixelRatio);\n\n    ctx.globalCompositeOperation = 'destination-in';\n    ctx.drawImage(image, 0, 0);\n\n    this.canvas_[pixelRatio] = canvas;\n  }\n\n  /**\n   * @return {Promise<void>} Promise that resolves when the image is loaded.\n   */\n  ready() {\n    if (!this.ready_) {\n      this.ready_ = new Promise((resolve) => {\n        if (\n          this.imageState_ === ImageState.LOADED ||\n          this.imageState_ === ImageState.ERROR\n        ) {\n          resolve();\n        } else {\n          const onChange = () => {\n            if (\n              this.imageState_ === ImageState.LOADED ||\n              this.imageState_ === ImageState.ERROR\n            ) {\n              this.removeEventListener(EventType.CHANGE, onChange);\n              resolve();\n            }\n          };\n          this.addEventListener(EventType.CHANGE, onChange);\n        }\n      });\n    }\n    return this.ready_;\n  }\n}\n\n/**\n * @param {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas|ImageBitmap|null} image Image.\n * @param {string|undefined} src Src.\n * @param {import('../dom.js').ImageAttributes} imageAttributes Image attributes options.\n * @param {import(\"../ImageState.js\").default|undefined} imageState Image state.\n * @param {import(\"../color.js\").Color|string|null} color Color.\n * @param {boolean} [pattern] Also cache a `repeat` pattern with the icon image.\n * @return {IconImage} Icon image.\n */\nexport function get(image, src, imageAttributes, imageState, color, pattern) {\n  let iconImage =\n    src === undefined ? undefined : iconImageCache.get(src, color);\n  if (!iconImage) {\n    iconImage = new IconImage(\n      image,\n      image && 'src' in image ? image.src || undefined : src,\n      imageAttributes,\n      imageState,\n      color,\n    );\n    iconImageCache.set(src, color, iconImage, pattern);\n  }\n  if (pattern && iconImage && !iconImageCache.getPattern(src, color)) {\n    iconImageCache.set(src, color, iconImage, pattern);\n  }\n  return iconImage;\n}\n\nexport default IconImage;\n","/**\n * @module ol/style/IconImageCache\n */\nimport ImageState from '../ImageState.js';\nimport {asArray} from '../color.js';\nimport {getSharedCanvasContext2D} from '../dom.js';\n\n/**\n * @classdesc\n * Singleton class. Available through {@link module:ol/style/IconImageCache.shared}.\n */\nclass IconImageCache {\n  constructor() {\n    /**\n     * @type {!Object<string, import(\"./IconImage.js\").default>}\n     * @private\n     */\n    this.cache_ = {};\n\n    /**\n     * @type {!Object<string, CanvasPattern>}\n     * @private\n     */\n    this.patternCache_ = {};\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.cacheSize_ = 0;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.maxCacheSize_ = 1024;\n  }\n\n  /**\n   * FIXME empty description for jsdoc\n   */\n  clear() {\n    this.cache_ = {};\n    this.patternCache_ = {};\n    this.cacheSize_ = 0;\n  }\n\n  /**\n   * @return {boolean} Can expire cache.\n   */\n  canExpireCache() {\n    return this.cacheSize_ > this.maxCacheSize_;\n  }\n\n  /**\n   * FIXME empty description for jsdoc\n   */\n  expire() {\n    if (this.canExpireCache()) {\n      let i = 0;\n      for (const key in this.cache_) {\n        const iconImage = this.cache_[key];\n        if ((i++ & 3) === 0 && !iconImage.hasListener()) {\n          delete this.cache_[key];\n          delete this.patternCache_[key];\n          --this.cacheSize_;\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {string} src Src.\n   * @param {import(\"../color.js\").Color|string|null} color Color.\n   * @return {import(\"./IconImage.js\").default} Icon image.\n   */\n  get(src, color) {\n    const key = getCacheKey(src, color);\n\n    const icon = key in this.cache_ ? this.cache_[key] : null;\n    return icon;\n  }\n\n  /**\n   * @param {string} src Src.\n   * @param {import(\"../color.js\").Color|string|null} color Color.\n   * @return {CanvasPattern} Icon image.\n   */\n  getPattern(src, color) {\n    const key = getCacheKey(src, color);\n    return key in this.patternCache_ ? this.patternCache_[key] : null;\n  }\n\n  /**\n   * @param {string} src Src.\n   * @param {import(\"../color.js\").Color|string|null} color Color.\n   * @param {import(\"./IconImage.js\").default|null} iconImage Icon image.\n   * @param {boolean} [pattern] Also cache a `'repeat'` pattern with this `iconImage`.\n   */\n  set(src, color, iconImage, pattern) {\n    const key = getCacheKey(src, color);\n    const update = key in this.cache_;\n    this.cache_[key] = iconImage;\n    if (pattern) {\n      if (iconImage.getImageState() === ImageState.IDLE) {\n        iconImage.load();\n      }\n      if (iconImage.getImageState() === ImageState.LOADING) {\n        iconImage.ready().then(() => {\n          this.patternCache_[key] = getSharedCanvasContext2D().createPattern(\n            iconImage.getImage(1),\n            'repeat',\n          );\n        });\n      } else {\n        this.patternCache_[key] = getSharedCanvasContext2D().createPattern(\n          iconImage.getImage(1),\n          'repeat',\n        );\n      }\n    }\n    if (!update) {\n      ++this.cacheSize_;\n    }\n  }\n\n  /**\n   * Set the cache size of the icon cache. Default is `1024`. Change this value when\n   * your map uses more than 1024 different icon images and you are not caching icon\n   * styles on the application level.\n   * @param {number} maxCacheSize Cache max size.\n   * @api\n   */\n  setSize(maxCacheSize) {\n    this.maxCacheSize_ = maxCacheSize;\n    this.expire();\n  }\n}\n\n/**\n * @param {string} src Src.\n * @param {import(\"../color.js\").Color|string|null} color Color.\n * @return {string} Cache key.\n */\nexport function getCacheKey(src, color) {\n  const colorString = color ? asArray(color) : 'null';\n  return src + ':' + colorString;\n}\n\nexport default IconImageCache;\n\n/**\n * The {@link module:ol/style/IconImageCache~IconImageCache} for\n * {@link module:ol/style/Icon~Icon} images.\n * @api\n */\nexport const shared = new IconImageCache();\n","/**\n * @module ol/style/Image\n */\nimport {toSize} from '../size.js';\nimport {abstract} from '../util.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} opacity Opacity.\n * @property {boolean} rotateWithView If the image should get rotated with the view.\n * @property {number} rotation Rotation.\n * @property {number|import(\"../size.js\").Size} scale Scale.\n * @property {Array<number>} displacement Displacement.\n * @property {import('../style/Style.js').DeclutterMode} declutterMode Declutter mode: `declutter`, `obstacle`, `none`.\n */\n\n/**\n * @classdesc\n * A base class used for creating subclasses and not instantiated in\n * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and\n * {@link module:ol/style/RegularShape~RegularShape}.\n * @abstract\n * @api\n */\nclass ImageStyle {\n  /**\n   * @param {Options} options Options.\n   */\n  constructor(options) {\n    /**\n     * @private\n     * @type {number}\n     */\n    this.opacity_ = options.opacity;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.rotateWithView_ = options.rotateWithView;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.rotation_ = options.rotation;\n\n    /**\n     * @private\n     * @type {number|import(\"../size.js\").Size}\n     */\n    this.scale_ = options.scale;\n\n    /**\n     * @private\n     * @type {import(\"../size.js\").Size}\n     */\n    this.scaleArray_ = toSize(options.scale);\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.displacement_ = options.displacement;\n\n    /**\n     * @private\n     * @type {import('../style/Style.js').DeclutterMode}\n     */\n    this.declutterMode_ = options.declutterMode;\n  }\n\n  /**\n   * Clones the style.\n   * @return {ImageStyle} The cloned style.\n   * @api\n   */\n  clone() {\n    const scale = this.getScale();\n    return new ImageStyle({\n      opacity: this.getOpacity(),\n      scale: Array.isArray(scale) ? scale.slice() : scale,\n      rotation: this.getRotation(),\n      rotateWithView: this.getRotateWithView(),\n      displacement: this.getDisplacement().slice(),\n      declutterMode: this.getDeclutterMode(),\n    });\n  }\n\n  /**\n   * Get the symbolizer opacity.\n   * @return {number} Opacity.\n   * @api\n   */\n  getOpacity() {\n    return this.opacity_;\n  }\n\n  /**\n   * Determine whether the symbolizer rotates with the map.\n   * @return {boolean} Rotate with map.\n   * @api\n   */\n  getRotateWithView() {\n    return this.rotateWithView_;\n  }\n\n  /**\n   * Get the symoblizer rotation.\n   * @return {number} Rotation.\n   * @api\n   */\n  getRotation() {\n    return this.rotation_;\n  }\n\n  /**\n   * Get the symbolizer scale.\n   * @return {number|import(\"../size.js\").Size} Scale.\n   * @api\n   */\n  getScale() {\n    return this.scale_;\n  }\n\n  /**\n   * Get the symbolizer scale array.\n   * @return {import(\"../size.js\").Size} Scale array.\n   */\n  getScaleArray() {\n    return this.scaleArray_;\n  }\n\n  /**\n   * Get the displacement of the shape\n   * @return {Array<number>} Shape's center displacement\n   * @api\n   */\n  getDisplacement() {\n    return this.displacement_;\n  }\n\n  /**\n   * Get the declutter mode of the shape\n   * @return {import(\"./Style.js\").DeclutterMode} Shape's declutter mode\n   * @api\n   */\n  getDeclutterMode() {\n    return this.declutterMode_;\n  }\n\n  /**\n   * Get the anchor point in pixels. The anchor determines the center point for the\n   * symbolizer.\n   * @abstract\n   * @return {Array<number>} Anchor.\n   */\n  getAnchor() {\n    return abstract();\n  }\n\n  /**\n   * Get the image element for the symbolizer.\n   * @abstract\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {import('../DataTile.js').ImageLike} Image element.\n   */\n  getImage(pixelRatio) {\n    return abstract();\n  }\n\n  /**\n   * @abstract\n   * @return {import('../DataTile.js').ImageLike} Image element.\n   */\n  getHitDetectionImage() {\n    return abstract();\n  }\n\n  /**\n   * Get the image pixel ratio.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {number} Pixel ratio.\n   */\n  getPixelRatio(pixelRatio) {\n    return 1;\n  }\n\n  /**\n   * @abstract\n   * @return {import(\"../ImageState.js\").default} Image state.\n   */\n  getImageState() {\n    return abstract();\n  }\n\n  /**\n   * @abstract\n   * @return {import(\"../size.js\").Size} Image size.\n   */\n  getImageSize() {\n    return abstract();\n  }\n\n  /**\n   * Get the origin of the symbolizer.\n   * @abstract\n   * @return {Array<number>} Origin.\n   */\n  getOrigin() {\n    return abstract();\n  }\n\n  /**\n   * Get the size of the symbolizer (in pixels).\n   * @abstract\n   * @return {import(\"../size.js\").Size} Size.\n   */\n  getSize() {\n    return abstract();\n  }\n\n  /**\n   * Set the displacement.\n   *\n   * @param {Array<number>} displacement Displacement.\n   * @api\n   */\n  setDisplacement(displacement) {\n    this.displacement_ = displacement;\n  }\n\n  /**\n   * Set the opacity.\n   *\n   * @param {number} opacity Opacity.\n   * @api\n   */\n  setOpacity(opacity) {\n    this.opacity_ = opacity;\n  }\n\n  /**\n   * Set whether to rotate the style with the view.\n   *\n   * @param {boolean} rotateWithView Rotate with map.\n   * @api\n   */\n  setRotateWithView(rotateWithView) {\n    this.rotateWithView_ = rotateWithView;\n  }\n\n  /**\n   * Set the rotation.\n   *\n   * @param {number} rotation Rotation.\n   * @api\n   */\n  setRotation(rotation) {\n    this.rotation_ = rotation;\n  }\n\n  /**\n   * Set the scale.\n   *\n   * @param {number|import(\"../size.js\").Size} scale Scale.\n   * @api\n   */\n  setScale(scale) {\n    this.scale_ = scale;\n    this.scaleArray_ = toSize(scale);\n  }\n\n  /**\n   * @abstract\n   * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n   */\n  listenImageChange(listener) {\n    abstract();\n  }\n\n  /**\n   * Load not yet loaded URI.\n   * @abstract\n   */\n  load() {\n    abstract();\n  }\n\n  /**\n   * @abstract\n   * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n   */\n  unlistenImageChange(listener) {\n    abstract();\n  }\n\n  /**\n   * @return {Promise<void>} `false` or Promise that resolves when the style is ready to use.\n   */\n  ready() {\n    return Promise.resolve();\n  }\n}\n\nexport default ImageStyle;\n","/**\n * @module ol/style/RegularShape\n */\n\nimport ImageState from '../ImageState.js';\nimport {asArray} from '../color.js';\nimport {asColorLike} from '../colorlike.js';\nimport {createCanvasContext2D} from '../dom.js';\nimport {\n  defaultFillStyle,\n  defaultLineCap,\n  defaultLineJoin,\n  defaultLineWidth,\n  defaultMiterLimit,\n  defaultStrokeStyle,\n} from '../render/canvas.js';\nimport IconImage from './IconImage.js';\nimport {shared as iconImageCache} from './IconImageCache.js';\nimport ImageStyle from './Image.js';\n\n/**\n * Specify radius for regular polygons, or both radius and radius2 for stars.\n * @typedef {Object} Options\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points\n * is the number of sides.\n * @property {number} radius Radius of a regular polygon.\n * @property {number} [radius2] Second radius to make a star instead of a regular polygon.\n * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's points facing up.\n * @property {Array<number>} [displacement=[0, 0]] Displacement of the shape in pixels.\n * Positive values will shift the shape right and up.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.\n * @property {number|import(\"../size.js\").Size} [scale=1] Scale. Unless two dimensional scaling is required a better\n * result may be obtained with appropriate settings for `radius` and `radius2`.\n * @property {import('./Style.js').DeclutterMode} [declutterMode] Declutter mode.\n */\n\n/**\n * @typedef {Object} RenderOptions\n * @property {import(\"../colorlike.js\").ColorLike|undefined} strokeStyle StrokeStyle.\n * @property {number} strokeWidth StrokeWidth.\n * @property {number} size Size.\n * @property {CanvasLineCap} lineCap LineCap.\n * @property {Array<number>|null} lineDash LineDash.\n * @property {number} lineDashOffset LineDashOffset.\n * @property {CanvasLineJoin} lineJoin LineJoin.\n * @property {number} miterLimit MiterLimit.\n */\n\n/**\n * @classdesc\n * Set regular shape style for vector features. The resulting shape will be\n * a regular polygon when `radius` is provided, or a star when both `radius` and\n * `radius2` are provided.\n * @api\n */\nclass RegularShape extends ImageStyle {\n  /**\n   * @param {Options} options Options.\n   */\n  constructor(options) {\n    super({\n      opacity: 1,\n      rotateWithView:\n        options.rotateWithView !== undefined ? options.rotateWithView : false,\n      rotation: options.rotation !== undefined ? options.rotation : 0,\n      scale: options.scale !== undefined ? options.scale : 1,\n      displacement:\n        options.displacement !== undefined ? options.displacement : [0, 0],\n      declutterMode: options.declutterMode,\n    });\n\n    /**\n     * @private\n     * @type {HTMLCanvasElement|OffscreenCanvas|null}\n     */\n    this.hitDetectionCanvas_ = null;\n\n    /**\n     * @private\n     * @type {import(\"./Fill.js\").default|null}\n     */\n    this.fill_ = options.fill !== undefined ? options.fill : null;\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.origin_ = [0, 0];\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.points_ = options.points;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.radius = options.radius;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.radius2_ = options.radius2;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.angle_ = options.angle !== undefined ? options.angle : 0;\n\n    /**\n     * @private\n     * @type {import(\"./Stroke.js\").default|null}\n     */\n    this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n    /**\n     * @private\n     * @type {import(\"../size.js\").Size}\n     */\n    this.size_;\n\n    /**\n     * @private\n     * @type {RenderOptions}\n     */\n    this.renderOptions_;\n\n    /**\n     * @private\n     */\n    this.imageState_ =\n      this.fill_ && this.fill_.loading()\n        ? ImageState.LOADING\n        : ImageState.LOADED;\n    if (this.imageState_ === ImageState.LOADING) {\n      this.ready().then(() => (this.imageState_ = ImageState.LOADED));\n    }\n    this.render();\n  }\n\n  /**\n   * Clones the style.\n   * @return {RegularShape} The cloned style.\n   * @api\n   * @override\n   */\n  clone() {\n    const scale = this.getScale();\n    const style = new RegularShape({\n      fill: this.getFill() ? this.getFill().clone() : undefined,\n      points: this.getPoints(),\n      radius: this.getRadius(),\n      radius2: this.getRadius2(),\n      angle: this.getAngle(),\n      stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n      rotation: this.getRotation(),\n      rotateWithView: this.getRotateWithView(),\n      scale: Array.isArray(scale) ? scale.slice() : scale,\n      displacement: this.getDisplacement().slice(),\n      declutterMode: this.getDeclutterMode(),\n    });\n    style.setOpacity(this.getOpacity());\n    return style;\n  }\n\n  /**\n   * Get the anchor point in pixels. The anchor determines the center point for the\n   * symbolizer.\n   * @return {Array<number>} Anchor.\n   * @api\n   * @override\n   */\n  getAnchor() {\n    const size = this.size_;\n    const displacement = this.getDisplacement();\n    const scale = this.getScaleArray();\n    // anchor is scaled by renderer but displacement should not be scaled\n    // so divide by scale here\n    return [\n      size[0] / 2 - displacement[0] / scale[0],\n      size[1] / 2 + displacement[1] / scale[1],\n    ];\n  }\n\n  /**\n   * Get the angle used in generating the shape.\n   * @return {number} Shape's rotation in radians.\n   * @api\n   */\n  getAngle() {\n    return this.angle_;\n  }\n\n  /**\n   * Get the fill style for the shape.\n   * @return {import(\"./Fill.js\").default|null} Fill style.\n   * @api\n   */\n  getFill() {\n    return this.fill_;\n  }\n\n  /**\n   * Set the fill style.\n   * @param {import(\"./Fill.js\").default|null} fill Fill style.\n   * @api\n   */\n  setFill(fill) {\n    this.fill_ = fill;\n    this.render();\n  }\n\n  /**\n   * @return {HTMLCanvasElement|OffscreenCanvas} Image element.\n   * @override\n   */\n  getHitDetectionImage() {\n    if (!this.hitDetectionCanvas_) {\n      this.hitDetectionCanvas_ = this.createHitDetectionCanvas_(\n        this.renderOptions_,\n      );\n    }\n    return this.hitDetectionCanvas_;\n  }\n\n  /**\n   * Get the image icon.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {HTMLCanvasElement|OffscreenCanvas} Image or Canvas element.\n   * @api\n   * @override\n   */\n  getImage(pixelRatio) {\n    const fillKey = this.fill_?.getKey();\n    const cacheKey =\n      `${pixelRatio},${this.angle_},${this.radius},${this.radius2_},${this.points_},${fillKey}` +\n      Object.values(this.renderOptions_).join(',');\n    let image = /** @type {HTMLCanvasElement|OffscreenCanvas} */ (\n      iconImageCache.get(cacheKey, null)?.getImage(1)\n    );\n    if (!image) {\n      const renderOptions = this.renderOptions_;\n      const size = Math.ceil(renderOptions.size * pixelRatio);\n      const context = createCanvasContext2D(size, size);\n      this.draw_(renderOptions, context, pixelRatio);\n\n      image = context.canvas;\n      const iconImage = new IconImage(\n        image,\n        undefined,\n        null,\n        ImageState.LOADED,\n        null,\n      );\n      iconImageCache.set(cacheKey, null, iconImage);\n      // Update the image in place to an ImageBitmap for better performance and lower memory usage\n      createImageBitmap(image).then((imageBitmap) => {\n        iconImage.setImage(imageBitmap);\n      });\n    }\n    return image;\n  }\n\n  /**\n   * Get the image pixel ratio.\n   * @param {number} pixelRatio Pixel ratio.\n   * @return {number} Pixel ratio.\n   * @override\n   */\n  getPixelRatio(pixelRatio) {\n    return pixelRatio;\n  }\n\n  /**\n   * @return {import(\"../size.js\").Size} Image size.\n   * @override\n   */\n  getImageSize() {\n    return this.size_;\n  }\n\n  /**\n   * @return {import(\"../ImageState.js\").default} Image state.\n   * @override\n   */\n  getImageState() {\n    return this.imageState_;\n  }\n\n  /**\n   * Get the origin of the symbolizer.\n   * @return {Array<number>} Origin.\n   * @api\n   * @override\n   */\n  getOrigin() {\n    return this.origin_;\n  }\n\n  /**\n   * Get the number of points for generating the shape.\n   * @return {number} Number of points for stars and regular polygons.\n   * @api\n   */\n  getPoints() {\n    return this.points_;\n  }\n\n  /**\n   * Get the (primary) radius for the shape.\n   * @return {number} Radius.\n   * @api\n   */\n  getRadius() {\n    return this.radius;\n  }\n\n  /**\n   * Set the (primary) radius for the shape.\n   * @param {number} radius Radius.\n   * @api\n   */\n  setRadius(radius) {\n    if (this.radius === radius) {\n      return;\n    }\n    this.radius = radius;\n    this.render();\n  }\n\n  /**\n   * Get the secondary radius for the shape.\n   * @return {number|undefined} Radius2.\n   * @api\n   */\n  getRadius2() {\n    return this.radius2_;\n  }\n\n  /**\n   * Set the secondary radius for the shape.\n   * @param {number|undefined} radius2 Radius2.\n   * @api\n   */\n  setRadius2(radius2) {\n    if (this.radius2_ === radius2) {\n      return;\n    }\n    this.radius2_ = radius2;\n    this.render();\n  }\n\n  /**\n   * Get the size of the symbolizer (in pixels).\n   * @return {import(\"../size.js\").Size} Size.\n   * @api\n   * @override\n   */\n  getSize() {\n    return this.size_;\n  }\n\n  /**\n   * Get the stroke style for the shape.\n   * @return {import(\"./Stroke.js\").default|null} Stroke style.\n   * @api\n   */\n  getStroke() {\n    return this.stroke_;\n  }\n\n  /**\n   * Set the stroke style.\n   * @param {import(\"./Stroke.js\").default|null} stroke Stroke style.\n   * @api\n   */\n  setStroke(stroke) {\n    this.stroke_ = stroke;\n    this.render();\n  }\n\n  /**\n   * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n   * @override\n   */\n  listenImageChange(listener) {}\n\n  /**\n   * Load not yet loaded URI.\n   * @override\n   */\n  load() {}\n\n  /**\n   * @param {function(import(\"../events/Event.js\").default): void} listener Listener function.\n   * @override\n   */\n  unlistenImageChange(listener) {}\n\n  /**\n   * Calculate additional canvas size needed for the miter.\n   * @param {string} lineJoin Line join\n   * @param {number} strokeWidth Stroke width\n   * @param {number} miterLimit Miter limit\n   * @return {number} Additional canvas size needed\n   * @private\n   */\n  calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit) {\n    if (\n      strokeWidth === 0 ||\n      this.points_ === Infinity ||\n      (lineJoin !== 'bevel' && lineJoin !== 'miter')\n    ) {\n      return strokeWidth;\n    }\n    // m  | ^\n    // i  | |\\                  .\n    // t >|  #\\\n    // e  | |\\ \\              .\n    // r      \\s\\\n    //      |  \\t\\          .                 .\n    //          \\r\\                      .   .\n    //      |    \\o\\      .          .  . . .\n    //          e \\k\\            .  .    . .\n    //      |      \\e\\  .    .  .       . .\n    //       d      \\ \\  .  .          . .\n    //      | _ _a_ _\\#  .            . .\n    //   r1          / `             . .\n    //      |                       . .\n    //       b     /               . .\n    //      |                     . .\n    //           / r2            . .\n    //      |                        .   .\n    //         /                           .   .\n    //      |α                                   .   .\n    //       /                                         .   .\n    //      ° center\n    let r1 = this.radius;\n    let r2 = this.radius2_ === undefined ? r1 : this.radius2_;\n    if (r1 < r2) {\n      const tmp = r1;\n      r1 = r2;\n      r2 = tmp;\n    }\n    const points =\n      this.radius2_ === undefined ? this.points_ : this.points_ * 2;\n    const alpha = (2 * Math.PI) / points;\n    const a = r2 * Math.sin(alpha);\n    const b = Math.sqrt(r2 * r2 - a * a);\n    const d = r1 - b;\n    const e = Math.sqrt(a * a + d * d);\n    const miterRatio = e / a;\n    if (lineJoin === 'miter' && miterRatio <= miterLimit) {\n      return miterRatio * strokeWidth;\n    }\n    // Calculate the distance from center to the stroke corner where\n    // it was cut short because of the miter limit.\n    //              l\n    //        ----+---- <= distance from center to here is maxr\n    //       /####|k ##\\\n    //      /#####^#####\\\n    //     /#### /+\\# s #\\\n    //    /### h/+++\\# t #\\\n    //   /### t/+++++\\# r #\\\n    //  /### a/+++++++\\# o #\\\n    // /### p/++ fill +\\# k #\\\n    ///#### /+++++^+++++\\# e #\\\n    //#####/+++++/+\\+++++\\#####\\\n    const k = strokeWidth / 2 / miterRatio;\n    const l = (strokeWidth / 2) * (d / e);\n    const maxr = Math.sqrt((r1 + k) * (r1 + k) + l * l);\n    const bevelAdd = maxr - r1;\n    if (this.radius2_ === undefined || lineJoin === 'bevel') {\n      return bevelAdd * 2;\n    }\n    // If outer miter is over the miter limit the inner miter may reach through the\n    // center and be longer than the bevel, same calculation as above but swap r1 / r2.\n    const aa = r1 * Math.sin(alpha);\n    const bb = Math.sqrt(r1 * r1 - aa * aa);\n    const dd = r2 - bb;\n    const ee = Math.sqrt(aa * aa + dd * dd);\n    const innerMiterRatio = ee / aa;\n    if (innerMiterRatio <= miterLimit) {\n      const innerLength = (innerMiterRatio * strokeWidth) / 2 - r2 - r1;\n      return 2 * Math.max(bevelAdd, innerLength);\n    }\n    return bevelAdd * 2;\n  }\n\n  /**\n   * @return {RenderOptions}  The render options\n   * @protected\n   */\n  createRenderOptions() {\n    let lineCap = defaultLineCap;\n    let lineJoin = defaultLineJoin;\n    let miterLimit = 0;\n    let lineDash = null;\n    let lineDashOffset = 0;\n    let strokeStyle;\n    let strokeWidth = 0;\n\n    if (this.stroke_) {\n      strokeStyle = asColorLike(this.stroke_.getColor() ?? defaultStrokeStyle);\n      strokeWidth = this.stroke_.getWidth() ?? defaultLineWidth;\n      lineDash = this.stroke_.getLineDash();\n      lineDashOffset = this.stroke_.getLineDashOffset() ?? 0;\n      lineJoin = this.stroke_.getLineJoin() ?? defaultLineJoin;\n      lineCap = this.stroke_.getLineCap() ?? defaultLineCap;\n      miterLimit = this.stroke_.getMiterLimit() ?? defaultMiterLimit;\n    }\n\n    const add = this.calculateLineJoinSize_(lineJoin, strokeWidth, miterLimit);\n    const maxRadius = Math.max(this.radius, this.radius2_ || 0);\n    const size = Math.ceil(2 * maxRadius + add);\n\n    return {\n      strokeStyle: strokeStyle,\n      strokeWidth: strokeWidth,\n      size: size,\n      lineCap: lineCap,\n      lineDash: lineDash,\n      lineDashOffset: lineDashOffset,\n      lineJoin: lineJoin,\n      miterLimit: miterLimit,\n    };\n  }\n\n  /**\n   * @protected\n   */\n  render() {\n    this.renderOptions_ = this.createRenderOptions();\n    const size = this.renderOptions_.size;\n    this.hitDetectionCanvas_ = null;\n    this.size_ = [size, size];\n  }\n\n  /**\n   * @private\n   * @param {RenderOptions} renderOptions Render options.\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context The rendering context.\n   * @param {number} pixelRatio The pixel ratio.\n   */\n  draw_(renderOptions, context, pixelRatio) {\n    context.scale(pixelRatio, pixelRatio);\n    // set origin to canvas center\n    context.translate(renderOptions.size / 2, renderOptions.size / 2);\n\n    this.createPath_(context);\n\n    if (this.fill_) {\n      let color = this.fill_.getColor();\n      if (color === null) {\n        color = defaultFillStyle;\n      }\n      context.fillStyle = asColorLike(color);\n      context.fill();\n    }\n    if (renderOptions.strokeStyle) {\n      context.strokeStyle = renderOptions.strokeStyle;\n      context.lineWidth = renderOptions.strokeWidth;\n      if (renderOptions.lineDash) {\n        context.setLineDash(renderOptions.lineDash);\n        context.lineDashOffset = renderOptions.lineDashOffset;\n      }\n      context.lineCap = renderOptions.lineCap;\n      context.lineJoin = renderOptions.lineJoin;\n      context.miterLimit = renderOptions.miterLimit;\n      context.stroke();\n    }\n  }\n\n  /**\n   * @private\n   * @param {RenderOptions} renderOptions Render options.\n   * @return {HTMLCanvasElement|OffscreenCanvas} Canvas containing the icon\n   */\n  createHitDetectionCanvas_(renderOptions) {\n    let context;\n    if (this.fill_) {\n      let color = this.fill_.getColor();\n\n      // determine if fill is transparent (or pattern or gradient)\n      let opacity = 0;\n      if (typeof color === 'string') {\n        color = asArray(color);\n      }\n      if (color === null) {\n        opacity = 1;\n      } else if (Array.isArray(color)) {\n        opacity = color.length === 4 ? color[3] : 1;\n      }\n      if (opacity === 0) {\n        // if a transparent fill style is set, create an extra hit-detection image\n        // with a default fill style\n        context = createCanvasContext2D(renderOptions.size, renderOptions.size);\n        this.drawHitDetectionCanvas_(renderOptions, context);\n      }\n    }\n    return context ? context.canvas : this.getImage(1);\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context The context to draw in.\n   */\n  createPath_(context) {\n    let points = this.points_;\n    const radius = this.radius;\n    if (points === Infinity) {\n      context.arc(0, 0, radius, 0, 2 * Math.PI);\n    } else {\n      const radius2 = this.radius2_ === undefined ? radius : this.radius2_;\n      if (this.radius2_ !== undefined) {\n        points *= 2;\n      }\n      const startAngle = this.angle_ - Math.PI / 2;\n      const step = (2 * Math.PI) / points;\n      for (let i = 0; i < points; i++) {\n        const angle0 = startAngle + i * step;\n        const radiusC = i % 2 === 0 ? radius : radius2;\n        context.lineTo(radiusC * Math.cos(angle0), radiusC * Math.sin(angle0));\n      }\n      context.closePath();\n    }\n  }\n\n  /**\n   * @private\n   * @param {RenderOptions} renderOptions Render options.\n   * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context The context.\n   */\n  drawHitDetectionCanvas_(renderOptions, context) {\n    // set origin to canvas center\n    context.translate(renderOptions.size / 2, renderOptions.size / 2);\n\n    this.createPath_(context);\n\n    context.fillStyle = defaultFillStyle;\n    context.fill();\n    if (renderOptions.strokeStyle) {\n      context.strokeStyle = renderOptions.strokeStyle;\n      context.lineWidth = renderOptions.strokeWidth;\n      if (renderOptions.lineDash) {\n        context.setLineDash(renderOptions.lineDash);\n        context.lineDashOffset = renderOptions.lineDashOffset;\n      }\n      context.lineJoin = renderOptions.lineJoin;\n      context.miterLimit = renderOptions.miterLimit;\n      context.stroke();\n    }\n  }\n\n  /**\n   * @override\n   */\n  ready() {\n    return this.fill_ ? this.fill_.ready() : Promise.resolve();\n  }\n}\n\nexport default RegularShape;\n","/**\n * @module ol/style/Stroke\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} [color] A color, gradient or pattern.\n * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.\n * Default null; if null, the Canvas/renderer default black will be used.\n * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.\n * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.\n * @property {Array<number>} [lineDash] Line dash pattern. Default is `null` (no dash).\n * @property {number} [lineDashOffset=0] Line dash offset.\n * @property {number} [miterLimit=10] Miter limit.\n * @property {number} [offset] Line offset in pixels along the normal. A positive value offsets the line to the right,\n * relative to the direction of the line. Default is `undefined` (no offset).\n * @property {number} [width] Width.\n */\n\n/**\n * @classdesc\n * Set stroke style for vector features.\n * Note that the defaults given are the Canvas defaults, which will be used if\n * option is not defined. The `get` functions return whatever was entered in\n * the options; they will not return the default.\n * @api\n */\nclass Stroke {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    /**\n     * @private\n     * @type {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike}\n     */\n    this.color_ = options.color !== undefined ? options.color : null;\n\n    /**\n     * @private\n     * @type {CanvasLineCap|undefined}\n     */\n    this.lineCap_ = options.lineCap;\n\n    /**\n     * @private\n     * @type {Array<number>|null}\n     */\n    this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.lineDashOffset_ = options.lineDashOffset;\n\n    /**\n     * @private\n     * @type {CanvasLineJoin|undefined}\n     */\n    this.lineJoin_ = options.lineJoin;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.miterLimit_ = options.miterLimit;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.offset_ = options.offset;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.width_ = options.width;\n  }\n\n  /**\n   * Clones the style.\n   * @return {Stroke} The cloned style.\n   * @api\n   */\n  clone() {\n    const color = this.getColor();\n    return new Stroke({\n      color: Array.isArray(color) ? color.slice() : color || undefined,\n      lineCap: this.getLineCap(),\n      lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,\n      lineDashOffset: this.getLineDashOffset(),\n      lineJoin: this.getLineJoin(),\n      miterLimit: this.getMiterLimit(),\n      offset: this.getOffset(),\n      width: this.getWidth(),\n    });\n  }\n\n  /**\n   * Get the stroke color.\n   * @return {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} Color.\n   * @api\n   */\n  getColor() {\n    return this.color_;\n  }\n\n  /**\n   * Get the line cap type for the stroke.\n   * @return {CanvasLineCap|undefined} Line cap.\n   * @api\n   */\n  getLineCap() {\n    return this.lineCap_;\n  }\n\n  /**\n   * Get the line dash style for the stroke.\n   * @return {Array<number>|null} Line dash.\n   * @api\n   */\n  getLineDash() {\n    return this.lineDash_;\n  }\n\n  /**\n   * Get the line dash offset for the stroke.\n   * @return {number|undefined} Line dash offset.\n   * @api\n   */\n  getLineDashOffset() {\n    return this.lineDashOffset_;\n  }\n\n  /**\n   * Get the line join type for the stroke.\n   * @return {CanvasLineJoin|undefined} Line join.\n   * @api\n   */\n  getLineJoin() {\n    return this.lineJoin_;\n  }\n\n  /**\n   * Get the miter limit for the stroke.\n   * @return {number|undefined} Miter limit.\n   * @api\n   */\n  getMiterLimit() {\n    return this.miterLimit_;\n  }\n\n  /**\n   * Get the line offset in pixels.\n   * @return {number|undefined} Offset.\n   * @api\n   */\n  getOffset() {\n    return this.offset_;\n  }\n\n  /**\n   * Get the stroke width.\n   * @return {number|undefined} Width.\n   * @api\n   */\n  getWidth() {\n    return this.width_;\n  }\n\n  /**\n   * Set the color.\n   *\n   * @param {import(\"../color.js\").Color|import(\"../colorlike.js\").ColorLike} color Color.\n   * @api\n   */\n  setColor(color) {\n    this.color_ = color;\n  }\n\n  /**\n   * Set the line cap.\n   *\n   * @param {CanvasLineCap|undefined} lineCap Line cap.\n   * @api\n   */\n  setLineCap(lineCap) {\n    this.lineCap_ = lineCap;\n  }\n\n  /**\n   * Set the line dash.\n   *\n   * @param {Array<number>|null} lineDash Line dash.\n   * @api\n   */\n  setLineDash(lineDash) {\n    this.lineDash_ = lineDash;\n  }\n\n  /**\n   * Set the line dash offset.\n   *\n   * @param {number|undefined} lineDashOffset Line dash offset.\n   * @api\n   */\n  setLineDashOffset(lineDashOffset) {\n    this.lineDashOffset_ = lineDashOffset;\n  }\n\n  /**\n   * Set the line join.\n   *\n   * @param {CanvasLineJoin|undefined} lineJoin Line join.\n   * @api\n   */\n  setLineJoin(lineJoin) {\n    this.lineJoin_ = lineJoin;\n  }\n\n  /**\n   * Set the miter limit.\n   *\n   * @param {number|undefined} miterLimit Miter limit.\n   * @api\n   */\n  setMiterLimit(miterLimit) {\n    this.miterLimit_ = miterLimit;\n  }\n\n  /**\n   * Set the line offset in pixels.\n   *\n   * @param {number|undefined} offset Offset.\n   * @api\n   */\n  setOffset(offset) {\n    this.offset_ = offset;\n  }\n\n  /**\n   * Set the width.\n   *\n   * @param {number|undefined} width Width.\n   * @api\n   */\n  setWidth(width) {\n    this.width_ = width;\n  }\n}\n\nexport default Stroke;\n","/**\n * @module ol/style/Style\n */\n\nimport {assert} from '../asserts.js';\nimport CircleStyle from './Circle.js';\nimport Fill from './Fill.js';\nimport Stroke from './Stroke.js';\n\n/**\n * Defines how symbols and text are decluttered on layers ith `declutter` set to `true`\n * **declutter**: Overlapping symbols and text are decluttered.\n * **obstacle**: Symbols and text are rendered, but serve as obstacle for subsequent attempts\n *   to place a symbol or text at the same location.\n * **none**: No decluttering is done.\n *\n * @typedef {\"declutter\"|\"obstacle\"|\"none\"} DeclutterMode\n */\n\n/**\n * A function that takes a {@link module:ol/Feature~Feature} and a `{number}`\n * representing the view's resolution. The function should return a\n * {@link module:ol/style/Style~Style} or an array of them. This way e.g. a\n * vector layer can be styled. If the function returns `undefined`, the\n * feature will not be rendered.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike, number):(Style|Array<Style>|void)} StyleFunction\n */\n\n/**\n * A {@link Style}, an array of {@link Style}, or a {@link StyleFunction}.\n * @typedef {Style|Array<Style>|StyleFunction} StyleLike\n */\n\n/**\n * A function that takes a {@link module:ol/Feature~Feature} as argument and returns an\n * {@link module:ol/geom/Geometry~Geometry} that will be rendered and styled for the feature.\n *\n * @typedef {function(import(\"../Feature.js\").FeatureLike):\n *     (import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default|undefined)} GeometryFunction\n */\n\n/**\n * Custom renderer function. Takes two arguments:\n *\n * 1. The pixel coordinates of the geometry in GeoJSON notation.\n * 2. The {@link module:ol/render~State} of the layer renderer.\n *\n * @typedef {function((import(\"../coordinate.js\").Coordinate|Array<import(\"../coordinate.js\").Coordinate>|Array<Array<import(\"../coordinate.js\").Coordinate>>|Array<Array<Array<import(\"../coordinate.js\").Coordinate>>>),import(\"../render.js\").State): void} RenderFunction\n */\n\n/**\n * @typedef {Object} Options\n * @property {string|import(\"../geom/Geometry.js\").default|GeometryFunction} [geometry] Feature property or geometry\n * or function returning a geometry to render for this style.\n * @property {import(\"./Fill.js\").default} [fill] Fill style.\n * @property {import(\"./Image.js\").default} [image] Image style.\n * @property {RenderFunction} [renderer] Custom renderer. When configured, `fill`, `stroke` and `image` will be\n * ignored, and the provided function will be called with each render frame for each geometry.\n * @property {RenderFunction} [hitDetectionRenderer] Custom renderer for hit detection. If provided will be used\n * in hit detection rendering.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {import(\"./Text.js\").default} [text] Text style.\n * @property {number} [zIndex] Z index.\n */\n\n/**\n * @classdesc\n * Container for vector feature rendering styles. Any changes made to the style\n * or its children through `set*()` methods will not take effect until the\n * feature or layer that uses the style is re-rendered.\n *\n * ## Feature styles\n *\n * If no style is defined, the following default style is used:\n * ```js\n *  import {Circle, Fill, Stroke, Style} from 'ol/style.js';\n *\n *  const fill = new Fill({\n *    color: 'rgba(255,255,255,0.4)',\n *  });\n *  const stroke = new Stroke({\n *    color: '#3399CC',\n *    width: 1.25,\n *  });\n *  const styles = [\n *    new Style({\n *      image: new Circle({\n *        fill: fill,\n *        stroke: stroke,\n *        radius: 5,\n *      }),\n *      fill: fill,\n *      stroke: stroke,\n *    }),\n *  ];\n * ```\n *\n * A separate editing style has the following defaults:\n * ```js\n *  import {Circle, Fill, Stroke, Style} from 'ol/style.js';\n *\n *  const styles = {};\n *  const white = [255, 255, 255, 1];\n *  const blue = [0, 153, 255, 1];\n *  const width = 3;\n *  styles['Polygon'] = [\n *    new Style({\n *      fill: new Fill({\n *        color: [255, 255, 255, 0.5],\n *      }),\n *    }),\n *  ];\n *  styles['MultiPolygon'] =\n *      styles['Polygon'];\n *  styles['LineString'] = [\n *    new Style({\n *      stroke: new Stroke({\n *        color: white,\n *        width: width + 2,\n *      }),\n *    }),\n *    new Style({\n *      stroke: new Stroke({\n *        color: blue,\n *        width: width,\n *      }),\n *    }),\n *  ];\n *  styles['MultiLineString'] = styles['LineString'];\n *\n *  styles['Circle'] = styles['Polygon'].concat(\n *    styles['LineString']\n *  );\n *\n *  styles['Point'] = [\n *    new Style({\n *      image: new Circle({\n *        radius: width * 2,\n *        fill: new Fill({\n *          color: blue,\n *        }),\n *        stroke: new Stroke({\n *          color: white,\n *          width: width / 2,\n *        }),\n *      }),\n *      zIndex: Infinity,\n *    }),\n *  ];\n *  styles['MultiPoint'] =\n *      styles['Point'];\n *  styles['GeometryCollection'] =\n *      styles['Polygon'].concat(\n *          styles['LineString'],\n *          styles['Point']\n *      );\n * ```\n *\n * @api\n */\nclass Style {\n  /**\n   * @param {Options} [options] Style options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    /**\n     * @private\n     * @type {string|import(\"../geom/Geometry.js\").default|GeometryFunction|null}\n     */\n    this.geometry_ = null;\n\n    /**\n     * @private\n     * @type {!GeometryFunction}\n     */\n    this.geometryFunction_ = defaultGeometryFunction;\n\n    if (options.geometry !== undefined) {\n      this.setGeometry(options.geometry);\n    }\n\n    /**\n     * @private\n     * @type {import(\"./Fill.js\").default|null}\n     */\n    this.fill_ = options.fill !== undefined ? options.fill : null;\n\n    /**\n     * @private\n     * @type {import(\"./Image.js\").default|null}\n     */\n    this.image_ = options.image !== undefined ? options.image : null;\n\n    /**\n     * @private\n     * @type {RenderFunction|null}\n     */\n    this.renderer_ = options.renderer !== undefined ? options.renderer : null;\n\n    /**\n     * @private\n     * @type {RenderFunction|null}\n     */\n    this.hitDetectionRenderer_ =\n      options.hitDetectionRenderer !== undefined\n        ? options.hitDetectionRenderer\n        : null;\n\n    /**\n     * @private\n     * @type {import(\"./Stroke.js\").default|null}\n     */\n    this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n    /**\n     * @private\n     * @type {import(\"./Text.js\").default|null}\n     */\n    this.text_ = options.text !== undefined ? options.text : null;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.zIndex_ = options.zIndex;\n  }\n\n  /**\n   * Clones the style.\n   * @return {Style} The cloned style.\n   * @api\n   */\n  clone() {\n    let geometry = this.getGeometry();\n    if (geometry && typeof geometry === 'object') {\n      geometry = /** @type {import(\"../geom/Geometry.js\").default} */ (\n        geometry\n      ).clone();\n    }\n    return new Style({\n      geometry: geometry ?? undefined,\n      fill: this.getFill() ? this.getFill().clone() : undefined,\n      image: this.getImage() ? this.getImage().clone() : undefined,\n      renderer: this.getRenderer() ?? undefined,\n      stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n      text: this.getText() ? this.getText().clone() : undefined,\n      zIndex: this.getZIndex(),\n    });\n  }\n\n  /**\n   * Get the custom renderer function that was configured with\n   * {@link #setRenderer} or the `renderer` constructor option.\n   * @return {RenderFunction|null} Custom renderer function.\n   * @api\n   */\n  getRenderer() {\n    return this.renderer_;\n  }\n\n  /**\n   * Sets a custom renderer function for this style. When set, `fill`, `stroke`\n   * and `image` options of the style will be ignored.\n   * @param {RenderFunction|null} renderer Custom renderer function.\n   * @api\n   */\n  setRenderer(renderer) {\n    this.renderer_ = renderer;\n  }\n\n  /**\n   * Sets a custom renderer function for this style used\n   * in hit detection.\n   * @param {RenderFunction|null} renderer Custom renderer function.\n   * @api\n   */\n  setHitDetectionRenderer(renderer) {\n    this.hitDetectionRenderer_ = renderer;\n  }\n\n  /**\n   * Get the custom renderer function that was configured with\n   * {@link #setHitDetectionRenderer} or the `hitDetectionRenderer` constructor option.\n   * @return {RenderFunction|null} Custom renderer function.\n   * @api\n   */\n  getHitDetectionRenderer() {\n    return this.hitDetectionRenderer_;\n  }\n\n  /**\n   * Get the geometry to be rendered.\n   * @return {string|import(\"../geom/Geometry.js\").default|GeometryFunction|null}\n   * Feature property or geometry or function that returns the geometry that will\n   * be rendered with this style.\n   * @api\n   */\n  getGeometry() {\n    return this.geometry_;\n  }\n\n  /**\n   * Get the function used to generate a geometry for rendering.\n   * @return {!GeometryFunction} Function that is called with a feature\n   * and returns the geometry to render instead of the feature's geometry.\n   * @api\n   */\n  getGeometryFunction() {\n    return this.geometryFunction_;\n  }\n\n  /**\n   * Get the fill style.\n   * @return {import(\"./Fill.js\").default|null} Fill style.\n   * @api\n   */\n  getFill() {\n    return this.fill_;\n  }\n\n  /**\n   * Set the fill style.\n   * @param {import(\"./Fill.js\").default|null} fill Fill style.\n   * @api\n   */\n  setFill(fill) {\n    this.fill_ = fill;\n  }\n\n  /**\n   * Get the image style.\n   * @return {import(\"./Image.js\").default|null} Image style.\n   * @api\n   */\n  getImage() {\n    return this.image_;\n  }\n\n  /**\n   * Set the image style.\n   * @param {import(\"./Image.js\").default} image Image style.\n   * @api\n   */\n  setImage(image) {\n    this.image_ = image;\n  }\n\n  /**\n   * Get the stroke style.\n   * @return {import(\"./Stroke.js\").default|null} Stroke style.\n   * @api\n   */\n  getStroke() {\n    return this.stroke_;\n  }\n\n  /**\n   * Set the stroke style.\n   * @param {import(\"./Stroke.js\").default|null} stroke Stroke style.\n   * @api\n   */\n  setStroke(stroke) {\n    this.stroke_ = stroke;\n  }\n\n  /**\n   * Get the text style.\n   * @return {import(\"./Text.js\").default|null} Text style.\n   * @api\n   */\n  getText() {\n    return this.text_;\n  }\n\n  /**\n   * Set the text style.\n   * @param {import(\"./Text.js\").default} text Text style.\n   * @api\n   */\n  setText(text) {\n    this.text_ = text;\n  }\n\n  /**\n   * Get the z-index for the style.\n   * @return {number|undefined} ZIndex.\n   * @api\n   */\n  getZIndex() {\n    return this.zIndex_;\n  }\n\n  /**\n   * Set a geometry that is rendered instead of the feature's geometry.\n   *\n   * @param {string|import(\"../geom/Geometry.js\").default|GeometryFunction|null} geometry\n   *     Feature property or geometry or function returning a geometry to render\n   *     for this style.\n   * @api\n   */\n  setGeometry(geometry) {\n    if (typeof geometry === 'function') {\n      this.geometryFunction_ = geometry;\n    } else if (typeof geometry === 'string') {\n      this.geometryFunction_ = function (feature) {\n        return /** @type {import(\"../geom/Geometry.js\").default} */ (\n          feature.get(geometry)\n        );\n      };\n    } else if (!geometry) {\n      this.geometryFunction_ = defaultGeometryFunction;\n    } else if (geometry !== undefined) {\n      this.geometryFunction_ = function () {\n        return /** @type {import(\"../geom/Geometry.js\").default} */ (geometry);\n      };\n    }\n    this.geometry_ = geometry;\n  }\n\n  /**\n   * Set the z-index.\n   *\n   * @param {number|undefined} zIndex ZIndex.\n   * @api\n   */\n  setZIndex(zIndex) {\n    this.zIndex_ = zIndex;\n  }\n}\n\n/**\n * Convert the provided object into a style function.  Functions passed through\n * unchanged.  Arrays of Style or single style objects wrapped in a\n * new style function.\n * @param {StyleFunction|Array<Style>|Style} obj\n *     A style function, a single style, or an array of styles.\n * @return {StyleFunction} A style function.\n */\nexport function toFunction(obj) {\n  let styleFunction;\n\n  if (typeof obj === 'function') {\n    styleFunction = obj;\n  } else {\n    /**\n     * @type {Array<Style>}\n     */\n    let styles;\n    if (Array.isArray(obj)) {\n      styles = obj;\n    } else {\n      assert(\n        typeof (/** @type {?} */ (obj).getZIndex) === 'function',\n        'Expected an `Style` or an array of `Style`',\n      );\n      const style = /** @type {Style} */ (obj);\n      styles = [style];\n    }\n    styleFunction = function () {\n      return styles;\n    };\n  }\n  return styleFunction;\n}\n\n/**\n * @type {Array<Style>|null}\n */\nlet defaultStyles = null;\n\n/**\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {number} resolution Resolution.\n * @return {Array<Style>} Style.\n */\nexport function createDefaultStyle(feature, resolution) {\n  // We don't use an immediately-invoked function\n  // and a closure so we don't get an error at script evaluation time in\n  // browsers that do not support Canvas. (import(\"./Circle.js\").CircleStyle does\n  // canvas.getContext('2d') at construction time, which will cause an.error\n  // in such browsers.)\n  if (!defaultStyles) {\n    const fill = new Fill({\n      color: 'rgba(255,255,255,0.4)',\n    });\n    const stroke = new Stroke({\n      color: '#3399CC',\n      width: 1.25,\n    });\n    defaultStyles = [\n      new Style({\n        image: new CircleStyle({\n          fill: fill,\n          stroke: stroke,\n          radius: 5,\n        }),\n        fill: fill,\n        stroke: stroke,\n      }),\n    ];\n  }\n  return defaultStyles;\n}\n\n/**\n * Default styles for editing features.\n * @return {Object<import(\"../geom/Geometry.js\").Type, Array<Style>>} Styles\n */\nexport function createEditingStyle() {\n  /** @type {Object<import(\"../geom/Geometry.js\").Type, Array<Style>>} */\n  const styles = {};\n  const white = [255, 255, 255, 1];\n  const blue = [0, 153, 255, 1];\n  const width = 3;\n  styles['Polygon'] = [\n    new Style({\n      fill: new Fill({\n        color: [255, 255, 255, 0.5],\n      }),\n    }),\n  ];\n  styles['MultiPolygon'] = styles['Polygon'];\n\n  styles['LineString'] = [\n    new Style({\n      stroke: new Stroke({\n        color: white,\n        width: width + 2,\n      }),\n    }),\n    new Style({\n      stroke: new Stroke({\n        color: blue,\n        width: width,\n      }),\n    }),\n  ];\n  styles['MultiLineString'] = styles['LineString'];\n\n  styles['Circle'] = styles['Polygon'].concat(styles['LineString']);\n\n  styles['Point'] = [\n    new Style({\n      image: new CircleStyle({\n        radius: width * 2,\n        fill: new Fill({\n          color: blue,\n        }),\n        stroke: new Stroke({\n          color: white,\n          width: width / 2,\n        }),\n      }),\n      zIndex: Infinity,\n    }),\n  ];\n  styles['MultiPoint'] = styles['Point'];\n\n  styles['GeometryCollection'] = styles['Polygon'].concat(\n    styles['LineString'],\n    styles['Point'],\n  );\n\n  return styles;\n}\n\n/**\n * Function that is called with a feature and returns its default geometry.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature to get the geometry for.\n * @return {import(\"../geom/Geometry.js\").default|import(\"../render/Feature.js\").default|undefined} Geometry to render.\n */\nfunction defaultGeometryFunction(feature) {\n  return feature.getGeometry();\n}\n\nexport default Style;\n","/**\n * @module ol/style/Text\n */\nimport {toSize} from '../size.js';\nimport Fill from './Fill.js';\n\n/**\n * @typedef {'point' | 'line'} TextPlacement\n * Default text placement is `'point'`. Note that\n * `'line'` requires the underlying geometry to be a {@link module:ol/geom/LineString~LineString},\n * {@link module:ol/geom/Polygon~Polygon}, {@link module:ol/geom/MultiLineString~MultiLineString} or\n * {@link module:ol/geom/MultiPolygon~MultiPolygon}.\n */\n\n/**\n * @typedef {'left' | 'center' | 'right'} TextJustify\n */\n\n/**\n * The default fill color to use if no fill was set at construction time; a\n * blackish `#333`.\n *\n * @const {string}\n */\nconst DEFAULT_FILL_COLOR = '#333';\n\n/**\n * @typedef {Object} Options\n * @property {string} [font] Font style as CSS `font` value, see:\n * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font. Default is `'10px sans-serif'`\n * @property {number} [maxAngle=Math.PI/4] When `placement` is set to `'line'`, allow a maximum angle between adjacent characters.\n * The expected value is in radians, and the default is 45° (`Math.PI / 4`).\n * @property {number} [offsetX=0] Horizontal text offset in pixels. A positive will shift the text right.\n * @property {number} [offsetY=0] Vertical text offset in pixels. A positive will shift the text down.\n * @property {boolean} [overflow=false] For polygon labels or when `placement` is set to `'line'`, allow text to exceed\n * the width of the polygon at the label position or the length of the path that it follows.\n * @property {TextPlacement} [placement='point'] Text placement.\n * @property {number} [repeat] Repeat interval. When set, the text will be repeated at this interval, which specifies\n * the distance between two text anchors in pixels. Only available when `placement` is set to `'line'`. Overrides 'textAlign'.\n * @property {number|import(\"../size.js\").Size} [scale] Scale.\n * @property {boolean} [rotateWithView=false] Whether to rotate the text with the view.\n * @property {boolean} [keepUpright=true] Whether the text can be rotated 180° to prevent being rendered upside down.\n * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).\n * @property {string|Array<string>} [text] Text content or rich text content. For plain text provide a string, which can\n * contain line breaks (`\\n`). For rich text provide an array of text/font tuples. A tuple consists of the text to\n * render and the font to use (or `''` to use the text style's font). A line break has to be a separate tuple (i.e. `'\\n', ''`).\n * **Example:** `['foo', 'bold 10px sans-serif', ' bar', 'italic 10px sans-serif', ' baz', '']` will yield \"**foo** *bar* baz\".\n * **Note:** Rich text is not supported for `placement: 'line'` or the immediate rendering API.\n * @property {CanvasTextAlign} [textAlign] Text alignment. Possible values: `'left'`, `'right'`, `'center'`, `'end'` or `'start'`.\n * Default is `'center'` for `placement: 'point'`. For `placement: 'line'`, the default is to let the renderer choose a\n * placement where `maxAngle` is not exceeded.\n * @property {TextJustify} [justify] Text justification within the text box.\n * If not set, text is justified towards the `textAlign` anchor.\n * Otherwise, use options `'left'`, `'center'`, or `'right'` to justify the text within the text box.\n * **Note:** `justify` is ignored for immediate rendering and also for `placement: 'line'`.\n * @property {CanvasTextBaseline} [textBaseline='middle'] Text base line. Possible values: `'bottom'`, `'top'`, `'middle'`, `'alphabetic'`,\n * `'hanging'`, `'ideographic'`.\n * @property {import(\"./Fill.js\").default|null} [fill] Fill style. If none is provided, we'll use a dark fill-style (#333). Specify `null` for no fill.\n * @property {import(\"./Stroke.js\").default} [stroke] Stroke style.\n * @property {import(\"./Fill.js\").default} [backgroundFill] Fill style for the text background when `placement` is\n * `'point'`. Default is no fill.\n * @property {import(\"./Stroke.js\").default} [backgroundStroke] Stroke style for the text background  when `placement`\n * is `'point'`. Default is no stroke.\n * @property {Array<number>} [padding=[0, 0, 0, 0]] Padding in pixels around the text for decluttering and background. The order of\n * values in the array is `[top, right, bottom, left]`.\n * @property {import('../style/Style.js').DeclutterMode} [declutterMode] Declutter mode: `declutter`, `obstacle`, `none`\n */\n\n/**\n * @classdesc\n * Set text style for vector features.\n * @api\n */\nclass Text {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    options = options || {};\n\n    /**\n     * @private\n     * @type {string|undefined}\n     */\n    this.font_ = options.font;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.rotation_ = options.rotation;\n\n    /**\n     * @private\n     * @type {boolean|undefined}\n     */\n    this.rotateWithView_ = options.rotateWithView;\n\n    /**\n     * @private\n     * @type {boolean|undefined}\n     */\n    this.keepUpright_ = options.keepUpright;\n\n    /**\n     * @private\n     * @type {number|import(\"../size.js\").Size|undefined}\n     */\n    this.scale_ = options.scale;\n\n    /**\n     * @private\n     * @type {import(\"../size.js\").Size}\n     */\n    this.scaleArray_ = toSize(options.scale !== undefined ? options.scale : 1);\n\n    /**\n     * @private\n     * @type {string|Array<string>|undefined}\n     */\n    this.text_ = options.text;\n\n    /**\n     * @private\n     * @type {CanvasTextAlign|undefined}\n     */\n    this.textAlign_ = options.textAlign;\n\n    /**\n     * @private\n     * @type {TextJustify|undefined}\n     */\n    this.justify_ = options.justify;\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.repeat_ = options.repeat;\n\n    /**\n     * @private\n     * @type {CanvasTextBaseline|undefined}\n     */\n    this.textBaseline_ = options.textBaseline;\n\n    /**\n     * @private\n     * @type {import(\"./Fill.js\").default|null}\n     */\n    this.fill_ =\n      options.fill !== undefined\n        ? options.fill\n        : new Fill({color: DEFAULT_FILL_COLOR});\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.maxAngle_ =\n      options.maxAngle !== undefined ? options.maxAngle : Math.PI / 4;\n\n    /**\n     * @private\n     * @type {TextPlacement}\n     */\n    this.placement_ =\n      options.placement !== undefined ? options.placement : 'point';\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.overflow_ = !!options.overflow;\n\n    /**\n     * @private\n     * @type {import(\"./Stroke.js\").default|null}\n     */\n    this.stroke_ = options.stroke !== undefined ? options.stroke : null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.offsetX_ = options.offsetX !== undefined ? options.offsetX : 0;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.offsetY_ = options.offsetY !== undefined ? options.offsetY : 0;\n\n    /**\n     * @private\n     * @type {import(\"./Fill.js\").default|null}\n     */\n    this.backgroundFill_ = options.backgroundFill\n      ? options.backgroundFill\n      : null;\n\n    /**\n     * @private\n     * @type {import(\"./Stroke.js\").default|null}\n     */\n    this.backgroundStroke_ = options.backgroundStroke\n      ? options.backgroundStroke\n      : null;\n\n    /**\n     * @private\n     * @type {Array<number>|null}\n     */\n    this.padding_ = options.padding === undefined ? null : options.padding;\n\n    /**\n     * @private\n     * @type {import('../style/Style.js').DeclutterMode}\n     */\n    this.declutterMode_ = options.declutterMode;\n  }\n\n  /**\n   * Clones the style.\n   * @return {Text} The cloned style.\n   * @api\n   */\n  clone() {\n    const scale = this.getScale();\n    return new Text({\n      font: this.getFont(),\n      placement: this.getPlacement(),\n      repeat: this.getRepeat(),\n      maxAngle: this.getMaxAngle(),\n      overflow: this.getOverflow(),\n      rotation: this.getRotation(),\n      rotateWithView: this.getRotateWithView(),\n      keepUpright: this.getKeepUpright(),\n      scale: Array.isArray(scale) ? scale.slice() : scale,\n      text: this.getText(),\n      textAlign: this.getTextAlign(),\n      justify: this.getJustify(),\n      textBaseline: this.getTextBaseline(),\n      fill:\n        this.getFill() instanceof Fill\n          ? this.getFill().clone()\n          : this.getFill(),\n      stroke: this.getStroke() ? this.getStroke().clone() : undefined,\n      offsetX: this.getOffsetX(),\n      offsetY: this.getOffsetY(),\n      backgroundFill: this.getBackgroundFill()\n        ? this.getBackgroundFill().clone()\n        : undefined,\n      backgroundStroke: this.getBackgroundStroke()\n        ? this.getBackgroundStroke().clone()\n        : undefined,\n      padding: this.getPadding() || undefined,\n      declutterMode: this.getDeclutterMode(),\n    });\n  }\n\n  /**\n   * Get the `overflow` configuration.\n   * @return {boolean} Let text overflow the length of the path they follow.\n   * @api\n   */\n  getOverflow() {\n    return this.overflow_;\n  }\n\n  /**\n   * Get the font name.\n   * @return {string|undefined} Font.\n   * @api\n   */\n  getFont() {\n    return this.font_;\n  }\n\n  /**\n   * Get the maximum angle between adjacent characters.\n   * @return {number} Angle in radians.\n   * @api\n   */\n  getMaxAngle() {\n    return this.maxAngle_;\n  }\n\n  /**\n   * Get the label placement.\n   * @return {TextPlacement} Text placement.\n   * @api\n   */\n  getPlacement() {\n    return this.placement_;\n  }\n\n  /**\n   * Get the repeat interval of the text.\n   * @return {number|undefined} Repeat interval in pixels.\n   * @api\n   */\n  getRepeat() {\n    return this.repeat_;\n  }\n\n  /**\n   * Get the x-offset for the text.\n   * @return {number} Horizontal text offset.\n   * @api\n   */\n  getOffsetX() {\n    return this.offsetX_;\n  }\n\n  /**\n   * Get the y-offset for the text.\n   * @return {number} Vertical text offset.\n   * @api\n   */\n  getOffsetY() {\n    return this.offsetY_;\n  }\n\n  /**\n   * Get the fill style for the text.\n   * @return {import(\"./Fill.js\").default|null} Fill style.\n   * @api\n   */\n  getFill() {\n    return this.fill_;\n  }\n\n  /**\n   * Determine whether the text rotates with the map.\n   * @return {boolean|undefined} Rotate with map.\n   * @api\n   */\n  getRotateWithView() {\n    return this.rotateWithView_;\n  }\n\n  /**\n   * Determine whether the text can be rendered upside down.\n   * @return {boolean|undefined} Keep text upright.\n   * @api\n   */\n  getKeepUpright() {\n    return this.keepUpright_;\n  }\n\n  /**\n   * Get the text rotation.\n   * @return {number|undefined} Rotation.\n   * @api\n   */\n  getRotation() {\n    return this.rotation_;\n  }\n\n  /**\n   * Get the text scale.\n   * @return {number|import(\"../size.js\").Size|undefined} Scale.\n   * @api\n   */\n  getScale() {\n    return this.scale_;\n  }\n\n  /**\n   * Get the symbolizer scale array.\n   * @return {import(\"../size.js\").Size} Scale array.\n   */\n  getScaleArray() {\n    return this.scaleArray_;\n  }\n\n  /**\n   * Get the stroke style for the text.\n   * @return {import(\"./Stroke.js\").default|null} Stroke style.\n   * @api\n   */\n  getStroke() {\n    return this.stroke_;\n  }\n\n  /**\n   * Get the text to be rendered.\n   * @return {string|Array<string>|undefined} Text.\n   * @api\n   */\n  getText() {\n    return this.text_;\n  }\n\n  /**\n   * Get the text alignment.\n   * @return {CanvasTextAlign|undefined} Text align.\n   * @api\n   */\n  getTextAlign() {\n    return this.textAlign_;\n  }\n\n  /**\n   * Get the justification.\n   * @return {TextJustify|undefined} Justification.\n   * @api\n   */\n  getJustify() {\n    return this.justify_;\n  }\n\n  /**\n   * Get the text baseline.\n   * @return {CanvasTextBaseline|undefined} Text baseline.\n   * @api\n   */\n  getTextBaseline() {\n    return this.textBaseline_;\n  }\n\n  /**\n   * Get the background fill style for the text.\n   * @return {import(\"./Fill.js\").default|null} Fill style.\n   * @api\n   */\n  getBackgroundFill() {\n    return this.backgroundFill_;\n  }\n\n  /**\n   * Get the background stroke style for the text.\n   * @return {import(\"./Stroke.js\").default|null} Stroke style.\n   * @api\n   */\n  getBackgroundStroke() {\n    return this.backgroundStroke_;\n  }\n\n  /**\n   * Get the padding for the text.\n   * @return {Array<number>|null} Padding.\n   * @api\n   */\n  getPadding() {\n    return this.padding_;\n  }\n\n  /**\n   * Get the declutter mode of the shape\n   * @return {import(\"./Style.js\").DeclutterMode} Shape's declutter mode\n   * @api\n   */\n  getDeclutterMode() {\n    return this.declutterMode_;\n  }\n\n  /**\n   * Set the `overflow` property.\n   *\n   * @param {boolean} overflow Let text overflow the path that it follows.\n   * @api\n   */\n  setOverflow(overflow) {\n    this.overflow_ = overflow;\n  }\n\n  /**\n   * Set the font.\n   *\n   * @param {string|undefined} font Font.\n   * @api\n   */\n  setFont(font) {\n    this.font_ = font;\n  }\n\n  /**\n   * Set the maximum angle between adjacent characters.\n   *\n   * @param {number} maxAngle Angle in radians.\n   * @api\n   */\n  setMaxAngle(maxAngle) {\n    this.maxAngle_ = maxAngle;\n  }\n\n  /**\n   * Set the x offset.\n   *\n   * @param {number} offsetX Horizontal text offset.\n   * @api\n   */\n  setOffsetX(offsetX) {\n    this.offsetX_ = offsetX;\n  }\n\n  /**\n   * Set the y offset.\n   *\n   * @param {number} offsetY Vertical text offset.\n   * @api\n   */\n  setOffsetY(offsetY) {\n    this.offsetY_ = offsetY;\n  }\n\n  /**\n   * Set the text placement.\n   *\n   * @param {TextPlacement} placement Placement.\n   * @api\n   */\n  setPlacement(placement) {\n    this.placement_ = placement;\n  }\n\n  /**\n   * Set the repeat interval of the text.\n   * @param {number|undefined} [repeat] Repeat interval in pixels.\n   * @api\n   */\n  setRepeat(repeat) {\n    this.repeat_ = repeat;\n  }\n\n  /**\n   * Set whether to rotate the text with the view.\n   *\n   * @param {boolean} rotateWithView Rotate with map.\n   * @api\n   */\n  setRotateWithView(rotateWithView) {\n    this.rotateWithView_ = rotateWithView;\n  }\n\n  /**\n   * Set whether the text can be rendered upside down.\n   *\n   * @param {boolean} keepUpright Keep text upright.\n   * @api\n   */\n  setKeepUpright(keepUpright) {\n    this.keepUpright_ = keepUpright;\n  }\n\n  /**\n   * Set the fill.\n   *\n   * @param {import(\"./Fill.js\").default|null} fill Fill style.\n   * @api\n   */\n  setFill(fill) {\n    this.fill_ = fill;\n  }\n\n  /**\n   * Set the rotation.\n   *\n   * @param {number|undefined} rotation Rotation.\n   * @api\n   */\n  setRotation(rotation) {\n    this.rotation_ = rotation;\n  }\n\n  /**\n   * Set the scale.\n   *\n   * @param {number|import(\"../size.js\").Size|undefined} scale Scale.\n   * @api\n   */\n  setScale(scale) {\n    this.scale_ = scale;\n    this.scaleArray_ = toSize(scale !== undefined ? scale : 1);\n  }\n\n  /**\n   * Set the stroke.\n   *\n   * @param {import(\"./Stroke.js\").default|null} stroke Stroke style.\n   * @api\n   */\n  setStroke(stroke) {\n    this.stroke_ = stroke;\n  }\n\n  /**\n   * Set the text.\n   *\n   * @param {string|Array<string>|undefined} text Text.\n   * @api\n   */\n  setText(text) {\n    this.text_ = text;\n  }\n\n  /**\n   * Set the text alignment.\n   *\n   * @param {CanvasTextAlign|undefined} textAlign Text align.\n   * @api\n   */\n  setTextAlign(textAlign) {\n    this.textAlign_ = textAlign;\n  }\n\n  /**\n   * Set the justification.\n   *\n   * @param {TextJustify|undefined} justify Justification.\n   * @api\n   */\n  setJustify(justify) {\n    this.justify_ = justify;\n  }\n\n  /**\n   * Set the text baseline.\n   *\n   * @param {CanvasTextBaseline|undefined} textBaseline Text baseline.\n   * @api\n   */\n  setTextBaseline(textBaseline) {\n    this.textBaseline_ = textBaseline;\n  }\n\n  /**\n   * Set the background fill.\n   *\n   * @param {import(\"./Fill.js\").default|null} fill Fill style.\n   * @api\n   */\n  setBackgroundFill(fill) {\n    this.backgroundFill_ = fill;\n  }\n\n  /**\n   * Set the background stroke.\n   *\n   * @param {import(\"./Stroke.js\").default|null} stroke Stroke style.\n   * @api\n   */\n  setBackgroundStroke(stroke) {\n    this.backgroundStroke_ = stroke;\n  }\n\n  /**\n   * Set the padding (`[top, right, bottom, left]`).\n   *\n   * @param {Array<number>|null} padding Padding.\n   * @api\n   */\n  setPadding(padding) {\n    this.padding_ = padding;\n  }\n}\n\nexport default Text;\n","/**\n * @module ol/tilecoord\n */\n\nimport {getUid} from './util.js';\n\n/**\n * An array of three numbers representing the location of a tile in a tile\n * grid. The order is `z` (zoom level), `x` (column), and `y` (row).\n * @typedef {Array<number>} TileCoord\n * @api\n */\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {TileCoord} [tileCoord] Tile coordinate.\n * @return {TileCoord} Tile coordinate.\n */\nexport function createOrUpdate(z, x, y, tileCoord) {\n  if (tileCoord !== undefined) {\n    tileCoord[0] = z;\n    tileCoord[1] = x;\n    tileCoord[2] = y;\n    return tileCoord;\n  }\n  return [z, x, y];\n}\n\n/**\n * @param {number} z Z.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {string} Key.\n */\nexport function getKeyZXY(z, x, y) {\n  return z + '/' + x + '/' + y;\n}\n\n/**\n * Get the key for a tile coord.\n * @param {TileCoord} tileCoord The tile coord.\n * @return {string} Key.\n */\nexport function getKey(tileCoord) {\n  return getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);\n}\n\n/**\n * Get the tile cache key for a tile key obtained through `tile.getKey()`.\n * @param {string} tileKey The tile key.\n * @return {string} The cache key.\n */\nexport function getCacheKeyForTileKey(tileKey) {\n  const [z, x, y] = tileKey\n    .substring(tileKey.lastIndexOf('/') + 1, tileKey.length)\n    .split(',')\n    .map(Number);\n  return getKeyZXY(z, x, y);\n}\n\n/**\n * @param {import(\"./source/Tile.js\").default} source The tile source.\n * @param {string} sourceKey The source key.\n * @param {number} z The tile z level.\n * @param {number} x The tile x level.\n * @param {number} y The tile y level.\n * @return {string} The cache key.\n */\nexport function getCacheKey(source, sourceKey, z, x, y) {\n  return `${getUid(source)},${sourceKey},${getKeyZXY(z, x, y)}`;\n}\n\n/**\n * Get a tile coord given a key.\n * @param {string} key The tile coord key.\n * @return {TileCoord} The tile coord.\n */\nexport function fromKey(key) {\n  return key.split('/').map(Number);\n}\n\n/**\n * @param {TileCoord} tileCoord Tile coord.\n * @return {number} Hash.\n */\nexport function hash(tileCoord) {\n  return hashZXY(tileCoord[0], tileCoord[1], tileCoord[2]);\n}\n\n/**\n * @param {number} z The tile z coordinate.\n * @param {number} x The tile x coordinate.\n * @param {number} y The tile y coordinate.\n * @return {number} Hash.\n */\nexport function hashZXY(z, x, y) {\n  return (x << z) + y;\n}\n\n/**\n * @param {TileCoord} tileCoord Tile coordinate.\n * @param {!import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {boolean} Tile coordinate is within extent and zoom level range.\n */\nexport function withinExtentAndZ(tileCoord, tileGrid) {\n  const z = tileCoord[0];\n  const x = tileCoord[1];\n  const y = tileCoord[2];\n\n  if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {\n    return false;\n  }\n  const tileRange = tileGrid.getFullTileRange(z);\n  if (!tileRange) {\n    return true;\n  }\n  return tileRange.containsXY(x, y);\n}\n","/**\n * @module ol/tilegrid\n */\nimport {\n  containsCoordinate,\n  createOrUpdate,\n  getCorner,\n  getHeight,\n  getWidth,\n} from './extent.js';\nimport {METERS_PER_UNIT, get as getProjection} from './proj.js';\nimport {toSize} from './size.js';\nimport TileGrid from './tilegrid/TileGrid.js';\nimport {DEFAULT_MAX_ZOOM, DEFAULT_TILE_SIZE} from './tilegrid/common.js';\n\nexport {default as WMTS} from './tilegrid/WMTS.js';\nexport {TileGrid};\n\n/**\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {!TileGrid} Default tile grid for the\n * passed projection.\n */\nexport function getForProjection(projection) {\n  let tileGrid = projection.getDefaultTileGrid();\n  if (!tileGrid) {\n    tileGrid = createForProjection(projection);\n    projection.setDefaultTileGrid(tileGrid);\n  }\n  return tileGrid;\n}\n\n/**\n * @param {TileGrid} tileGrid Tile grid.\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {import(\"./tilecoord.js\").TileCoord} Tile coordinate.\n */\nexport function wrapX(tileGrid, tileCoord, projection) {\n  const z = tileCoord[0];\n  const center = tileGrid.getTileCoordCenter(tileCoord);\n  const projectionExtent = extentFromProjection(projection);\n  if (!containsCoordinate(projectionExtent, center)) {\n    const worldWidth = getWidth(projectionExtent);\n    const worldsAway = Math.ceil(\n      (projectionExtent[0] - center[0]) / worldWidth,\n    );\n    center[0] += worldWidth * worldsAway;\n    return tileGrid.getTileCoordForCoordAndZ(center, z);\n  }\n  return tileCoord;\n}\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} [maxZoom] Maximum zoom level (default is\n *     DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size} [tileSize] Tile size (default uses\n *     DEFAULT_TILE_SIZE).\n * @param {import(\"./extent.js\").Corner} [corner] Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForExtent(extent, maxZoom, tileSize, corner) {\n  corner = corner !== undefined ? corner : 'top-left';\n\n  const resolutions = resolutionsFromExtent(extent, maxZoom, tileSize);\n\n  return new TileGrid({\n    extent: extent,\n    origin: getCorner(extent, corner),\n    resolutions: resolutions,\n    tileSize: tileSize,\n  });\n}\n\n/**\n * @typedef {Object} XYZOptions\n * @property {import(\"./extent.js\").Extent} [extent] Extent for the tile grid. The origin for an XYZ tile grid is the\n * top-left corner of the extent. If `maxResolution` is not provided the zero level of the grid is defined by the resolution\n * at which one tile fits in the provided extent. If not provided, the extent of the EPSG:3857 projection is used.\n * @property {number} [maxResolution] Resolution at level zero.\n * @property {number} [maxZoom] Maximum zoom. The default is `42`. This determines the number of levels\n * in the grid set. For example, a `maxZoom` of 21 means there are 22 levels in the grid set.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {number|import(\"./size.js\").Size} [tileSize=[256, 256]] Tile size in pixels.\n */\n\n/**\n * Creates a tile grid with a standard XYZ tiling scheme.\n * @param {XYZOptions} [options] Tile grid options.\n * @return {!TileGrid} Tile grid instance.\n * @api\n */\nexport function createXYZ(options) {\n  const xyzOptions = options || {};\n\n  const extent = xyzOptions.extent || getProjection('EPSG:3857').getExtent();\n\n  const gridOptions = {\n    extent: extent,\n    minZoom: xyzOptions.minZoom,\n    tileSize: xyzOptions.tileSize,\n    resolutions: resolutionsFromExtent(\n      extent,\n      xyzOptions.maxZoom,\n      xyzOptions.tileSize,\n      xyzOptions.maxResolution,\n    ),\n  };\n  return new TileGrid(gridOptions);\n}\n\n/**\n * Create a resolutions array from an extent.  A zoom factor of 2 is assumed.\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number} [maxZoom] Maximum zoom level (default is\n *     DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size} [tileSize] Tile size (default uses\n *     DEFAULT_TILE_SIZE).\n * @param {number} [maxResolution] Resolution at level zero.\n * @return {!Array<number>} Resolutions array.\n */\nfunction resolutionsFromExtent(extent, maxZoom, tileSize, maxResolution) {\n  maxZoom = maxZoom !== undefined ? maxZoom : DEFAULT_MAX_ZOOM;\n  tileSize = toSize(tileSize !== undefined ? tileSize : DEFAULT_TILE_SIZE);\n\n  const height = getHeight(extent);\n  const width = getWidth(extent);\n\n  maxResolution =\n    maxResolution > 0\n      ? maxResolution\n      : Math.max(width / tileSize[0], height / tileSize[1]);\n\n  const length = maxZoom + 1;\n  const resolutions = new Array(length);\n  for (let z = 0; z < length; ++z) {\n    resolutions[z] = maxResolution / Math.pow(2, z);\n  }\n  return resolutions;\n}\n\n/**\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @param {number} [maxZoom] Maximum zoom level (default is\n *     DEFAULT_MAX_ZOOM).\n * @param {number|import(\"./size.js\").Size} [tileSize] Tile size (default uses\n *     DEFAULT_TILE_SIZE).\n * @param {import(\"./extent.js\").Corner} [corner] Extent corner (default is `'top-left'`).\n * @return {!TileGrid} TileGrid instance.\n */\nexport function createForProjection(projection, maxZoom, tileSize, corner) {\n  const extent = extentFromProjection(projection);\n  return createForExtent(extent, maxZoom, tileSize, corner);\n}\n\n/**\n * Generate a tile grid extent from a projection.  If the projection has an\n * extent, it is used.  If not, a global extent is assumed.\n * @param {import(\"./proj.js\").ProjectionLike} projection Projection.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\nexport function extentFromProjection(projection) {\n  projection = getProjection(projection);\n  let extent = projection.getExtent();\n  if (!extent) {\n    const half =\n      (180 * METERS_PER_UNIT.degrees) / projection.getMetersPerUnit();\n    extent = createOrUpdate(-half, -half, half, half);\n  }\n  return extent;\n}\n","/**\n * @module ol/tilegrid/TileGrid\n */\nimport TileRange, {\n  createOrUpdate as createOrUpdateTileRange,\n} from '../TileRange.js';\nimport {isSorted, linearFindNearest} from '../array.js';\nimport {assert} from '../asserts.js';\nimport {createOrUpdate, getTopLeft} from '../extent.js';\nimport {intersectsLinearRing} from '../geom/flat/intersectsextent.js';\nimport {ceil, clamp, floor} from '../math.js';\nimport {toSize} from '../size.js';\nimport {createOrUpdate as createOrUpdateTileCoord} from '../tilecoord.js';\nimport {DEFAULT_TILE_SIZE} from './common.js';\n\n/**\n * @private\n * @type {import(\"../tilecoord.js\").TileCoord}\n */\nconst tmpTileCoord = [0, 0, 0];\n\n/**\n * Number of decimal digits to consider in integer values when rounding.\n * @type {number}\n */\nconst DECIMALS = 5;\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../extent.js\").Extent} [extent] Extent for the tile grid. No tiles outside this\n * extent will be requested by {@link module:ol/source/Tile~TileSource} sources. When no `origin` or\n * `origins` are configured, the `origin` will be set to the top-left corner of the extent.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {import(\"../coordinate.js\").Coordinate} [origin] The tile grid origin, i.e. where the `x`\n * and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left to right and downwards. If not\n * specified, `extent` or `origins` must be provided.\n * @property {Array<import(\"../coordinate.js\").Coordinate>} [origins] Tile grid origins, i.e. where\n * the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * origin. Tile coordinates increase left to right and downwards. If not specified, `extent` or\n * `origin` must be provided.\n * @property {!Array<number>} resolutions Resolutions. The array index of each resolution needs\n * to match the zoom level. This means that even if a `minZoom` is configured, the resolutions\n * array will have a length of `maxZoom + 1`.\n * @property {Array<import(\"../size.js\").Size>} [sizes] Number of tile rows and columns\n * of the grid for each zoom level. If specified the values\n * define each zoom level's extent together with the `origin` or `origins`.\n * A grid `extent` can be configured in addition, and will further limit the extent\n * for which tile requests are made by sources. If the bottom-left corner of\n * an extent is used as `origin` or `origins`, then the `y` value must be\n * negative because OpenLayers tile coordinates use the top left as the origin.\n * @property {Array<import(\"../TileRange.js\").default>} [tileRanges] Pre-built tile ranges for each\n * zoom level. When provided, these are used directly as the full tile ranges instead of computing\n * them from `sizes`. Useful for setting per-level tile index bounds (e.g. from WMTS `TileMatrixSetLimits`).\n * @property {number|import(\"../size.js\").Size} [tileSize] Tile size.\n * Default is `[256, 256]`.\n * @property {Array<number|import(\"../size.js\").Size>} [tileSizes] Tile sizes. If given, the array length\n * should match the length of the `resolutions` array, i.e. each resolution can have a different\n * tile size.\n */\n\n/**\n * @classdesc\n * Base class for setting the grid pattern for sources accessing tiled-image\n * servers.\n * @api\n */\nclass TileGrid {\n  /**\n   * @param {Options} options Tile grid options.\n   */\n  constructor(options) {\n    let minZoom = options.minZoom;\n    const resolutions = options.resolutions;\n    if (minZoom === undefined && resolutions) {\n      minZoom = resolutions.findIndex((resolution) => resolution !== undefined);\n    }\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.minZoom = minZoom !== undefined ? minZoom : 0;\n\n    /**\n     * @private\n     * @type {!Array<number>}\n     */\n    this.resolutions_ = resolutions;\n    assert(\n      isSorted(\n        this.resolutions_,\n        /**\n         * @param {number} a First resolution\n         * @param {number} b Second resolution\n         * @return {number} Comparison result\n         */\n        (a, b) => b - a,\n        true,\n      ),\n      '`resolutions` must be sorted in descending order',\n    );\n\n    // check if we've got a consistent zoom factor and origin\n    let zoomFactor;\n    if (!options.origins) {\n      for (let i = 0, ii = this.resolutions_.length - 1; i < ii; ++i) {\n        if (!zoomFactor) {\n          zoomFactor = this.resolutions_[i] / this.resolutions_[i + 1];\n        } else {\n          if (this.resolutions_[i] / this.resolutions_[i + 1] !== zoomFactor) {\n            zoomFactor = undefined;\n            break;\n          }\n        }\n      }\n    }\n\n    /**\n     * @private\n     * @type {number|undefined}\n     */\n    this.zoomFactor_ = zoomFactor;\n\n    /**\n     * @protected\n     * @type {number}\n     */\n    this.maxZoom = this.resolutions_.length - 1;\n\n    /**\n     * @private\n     * @type {import(\"../coordinate.js\").Coordinate|null}\n     */\n    this.origin_ = options.origin !== undefined ? options.origin : null;\n\n    /**\n     * @private\n     * @type {Array<import(\"../coordinate.js\").Coordinate>}\n     */\n    this.origins_ = null;\n    if (options.origins !== undefined) {\n      this.origins_ = options.origins;\n      assert(\n        this.origins_.length == this.resolutions_.length,\n        'Number of `origins` and `resolutions` must be equal',\n      );\n    }\n\n    const extent = options.extent;\n\n    if (extent !== undefined && !this.origin_ && !this.origins_) {\n      this.origin_ = getTopLeft(extent);\n    }\n\n    assert(\n      (!this.origin_ && this.origins_) || (this.origin_ && !this.origins_),\n      'Either `origin` or `origins` must be configured, never both',\n    );\n\n    /**\n     * @private\n     * @type {Array<number|import(\"../size.js\").Size>}\n     */\n    this.tileSizes_ = null;\n    if (options.tileSizes !== undefined) {\n      this.tileSizes_ = options.tileSizes;\n      assert(\n        this.tileSizes_.length == this.resolutions_.length,\n        'Number of `tileSizes` and `resolutions` must be equal',\n      );\n    }\n\n    /**\n     * @private\n     * @type {number|import(\"../size.js\").Size}\n     */\n    this.tileSize_ =\n      options.tileSize !== undefined\n        ? options.tileSize\n        : !this.tileSizes_\n          ? DEFAULT_TILE_SIZE\n          : null;\n    assert(\n      (!this.tileSize_ && this.tileSizes_) ||\n        (this.tileSize_ && !this.tileSizes_),\n      'Either `tileSize` or `tileSizes` must be configured, never both',\n    );\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.extent_ = extent !== undefined ? extent : null;\n\n    /**\n     * @private\n     * @type {Array<import(\"../TileRange.js\").default>}\n     */\n    this.fullTileRanges_ = null;\n\n    /**\n     * @private\n     * @type {import(\"../size.js\").Size}\n     */\n    this.tmpSize_ = [0, 0];\n\n    /**\n     * @private\n     * @type {import(\"../extent.js\").Extent}\n     */\n    this.tmpExtent_ = [0, 0, 0, 0];\n\n    if (options.tileRanges !== undefined) {\n      this.fullTileRanges_ = options.tileRanges;\n    } else if (options.sizes !== undefined) {\n      this.fullTileRanges_ = options.sizes.map((size, z) => {\n        const tileRange = new TileRange(\n          Math.min(0, size[0]),\n          Math.max(size[0] - 1, -1),\n          Math.min(0, size[1]),\n          Math.max(size[1] - 1, -1),\n        );\n        if (extent) {\n          const restrictedTileRange = this.getTileRangeForExtentAndZ(extent, z);\n          tileRange.minX = Math.max(restrictedTileRange.minX, tileRange.minX);\n          tileRange.maxX = Math.min(restrictedTileRange.maxX, tileRange.maxX);\n          tileRange.minY = Math.max(restrictedTileRange.minY, tileRange.minY);\n          tileRange.maxY = Math.min(restrictedTileRange.maxY, tileRange.maxY);\n        }\n        return tileRange;\n      });\n    } else if (extent) {\n      this.calculateTileRanges_(extent);\n    }\n  }\n\n  /**\n   * Call a function with each tile coordinate for a given extent and zoom level.\n   *\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} zoom Integer zoom level.\n   * @param {function(import(\"../tilecoord.js\").TileCoord): void} callback Function called with each tile coordinate.\n   * @api\n   */\n  forEachTileCoord(extent, zoom, callback) {\n    const tileRange = this.getTileRangeForExtentAndZ(extent, zoom);\n    for (let i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {\n      for (let j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {\n        callback([zoom, i, j]);\n      }\n    }\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {function(number, import(\"../TileRange.js\").default): boolean} callback Callback.\n   * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary import(\"../TileRange.js\").default object.\n   * @param {import(\"../extent.js\").Extent} [tempExtent] Temporary import(\"../extent.js\").Extent object.\n   * @return {boolean} Callback succeeded.\n   */\n  forEachTileCoordParentTileRange(\n    tileCoord,\n    callback,\n    tempTileRange,\n    tempExtent,\n  ) {\n    let tileRange, x, y;\n    let tileCoordExtent = null;\n    let z = tileCoord[0] - 1;\n    if (this.zoomFactor_ === 2) {\n      x = tileCoord[1];\n      y = tileCoord[2];\n    } else {\n      tileCoordExtent = this.getTileCoordExtent(tileCoord, tempExtent);\n    }\n    while (z >= this.minZoom) {\n      if (x !== undefined && y !== undefined) {\n        x = Math.floor(x / 2);\n        y = Math.floor(y / 2);\n        tileRange = createOrUpdateTileRange(x, x, y, y, tempTileRange);\n      } else {\n        tileRange = this.getTileRangeForExtentAndZ(\n          tileCoordExtent,\n          z,\n          tempTileRange,\n        );\n      }\n      if (callback(z, tileRange)) {\n        return true;\n      }\n      --z;\n    }\n    return false;\n  }\n\n  /**\n   * Get the extent for this tile grid, if it was configured.\n   * @return {import(\"../extent.js\").Extent} Extent.\n   * @api\n   */\n  getExtent() {\n    return this.extent_;\n  }\n\n  /**\n   * Get the maximum zoom level for the grid.\n   * @return {number} Max zoom.\n   * @api\n   */\n  getMaxZoom() {\n    return this.maxZoom;\n  }\n\n  /**\n   * Get the minimum zoom level for the grid.\n   * @return {number} Min zoom.\n   * @api\n   */\n  getMinZoom() {\n    return this.minZoom;\n  }\n\n  /**\n   * Get the origin for the grid at the given zoom level.\n   * @param {number} z Integer zoom level.\n   * @return {import(\"../coordinate.js\").Coordinate} Origin.\n   * @api\n   */\n  getOrigin(z) {\n    if (this.origin_) {\n      return this.origin_;\n    }\n    return this.origins_[z];\n  }\n\n  /**\n   * Get the list of origins for the grid.\n   * @return {Array<import(\"../coordinate.js\").Coordinate>|null} Origin.\n   */\n  getOrigins() {\n    return this.origins_;\n  }\n\n  /**\n   * Get the resolution for the given zoom level.\n   * @param {number} z Integer zoom level.\n   * @return {number} Resolution.\n   * @api\n   */\n  getResolution(z) {\n    return this.resolutions_[z];\n  }\n\n  /**\n   * Get the list of resolutions for the tile grid.\n   * @return {Array<number>} Resolutions.\n   * @api\n   */\n  getResolutions() {\n    return this.resolutions_;\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary import(\"../TileRange.js\").default object.\n   * @param {import(\"../extent.js\").Extent} [tempExtent] Temporary import(\"../extent.js\").Extent object.\n   * @return {import(\"../TileRange.js\").default|null} Tile range.\n   */\n  getTileCoordChildTileRange(tileCoord, tempTileRange, tempExtent) {\n    if (tileCoord[0] < this.maxZoom) {\n      if (this.zoomFactor_ === 2) {\n        const minX = tileCoord[1] * 2;\n        const minY = tileCoord[2] * 2;\n        return createOrUpdateTileRange(\n          minX,\n          minX + 1,\n          minY,\n          minY + 1,\n          tempTileRange,\n        );\n      }\n      const tileCoordExtent = this.getTileCoordExtent(\n        tileCoord,\n        tempExtent || this.tmpExtent_,\n      );\n      return this.getTileRangeForExtentAndZ(\n        tileCoordExtent,\n        tileCoord[0] + 1,\n        tempTileRange,\n      );\n    }\n    return null;\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {number} z Integer zoom level.\n   * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary import(\"../TileRange.js\").default object.\n   * @return {import(\"../TileRange.js\").default|null} Tile range.\n   */\n  getTileRangeForTileCoordAndZ(tileCoord, z, tempTileRange) {\n    if (z > this.maxZoom || z < this.minZoom) {\n      return null;\n    }\n\n    const tileCoordZ = tileCoord[0];\n    const tileCoordX = tileCoord[1];\n    const tileCoordY = tileCoord[2];\n\n    if (z === tileCoordZ) {\n      return createOrUpdateTileRange(\n        tileCoordX,\n        tileCoordY,\n        tileCoordX,\n        tileCoordY,\n        tempTileRange,\n      );\n    }\n\n    if (this.zoomFactor_) {\n      const factor = Math.pow(this.zoomFactor_, z - tileCoordZ);\n      const minX = Math.floor(tileCoordX * factor);\n      const minY = Math.floor(tileCoordY * factor);\n      if (z < tileCoordZ) {\n        return createOrUpdateTileRange(minX, minX, minY, minY, tempTileRange);\n      }\n\n      const maxX = Math.floor(factor * (tileCoordX + 1)) - 1;\n      const maxY = Math.floor(factor * (tileCoordY + 1)) - 1;\n      return createOrUpdateTileRange(minX, maxX, minY, maxY, tempTileRange);\n    }\n\n    const tileCoordExtent = this.getTileCoordExtent(tileCoord, this.tmpExtent_);\n    return this.getTileRangeForExtentAndZ(tileCoordExtent, z, tempTileRange);\n  }\n\n  /**\n   * Get a tile range for the given extent and integer zoom level.\n   * @param {import(\"../extent.js\").Extent} extent Extent.\n   * @param {number} z Integer zoom level.\n   * @param {import(\"../TileRange.js\").default} [tempTileRange] Temporary tile range object.\n   * @return {import(\"../TileRange.js\").default} Tile range.\n   */\n  getTileRangeForExtentAndZ(extent, z, tempTileRange) {\n    this.getTileCoordForXYAndZ_(extent[0], extent[3], z, false, tmpTileCoord);\n    const minX = tmpTileCoord[1];\n    const minY = tmpTileCoord[2];\n    this.getTileCoordForXYAndZ_(extent[2], extent[1], z, true, tmpTileCoord);\n    const maxX = tmpTileCoord[1];\n    const maxY = tmpTileCoord[2];\n    return createOrUpdateTileRange(minX, maxX, minY, maxY, tempTileRange);\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @return {import(\"../coordinate.js\").Coordinate} Tile center.\n   */\n  getTileCoordCenter(tileCoord) {\n    const origin = this.getOrigin(tileCoord[0]);\n    const resolution = this.getResolution(tileCoord[0]);\n    const tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n    return [\n      origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,\n      origin[1] - (tileCoord[2] + 0.5) * tileSize[1] * resolution,\n    ];\n  }\n\n  /**\n   * Get the extent of a tile coordinate.\n   *\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @param {import(\"../extent.js\").Extent} [tempExtent] Temporary extent object.\n   * @return {import(\"../extent.js\").Extent} Extent.\n   * @api\n   */\n  getTileCoordExtent(tileCoord, tempExtent) {\n    const origin = this.getOrigin(tileCoord[0]);\n    const resolution = this.getResolution(tileCoord[0]);\n    const tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);\n    const minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;\n    const minY = origin[1] - (tileCoord[2] + 1) * tileSize[1] * resolution;\n    const maxX = minX + tileSize[0] * resolution;\n    const maxY = minY + tileSize[1] * resolution;\n    return createOrUpdate(minX, minY, maxX, maxY, tempExtent);\n  }\n\n  /**\n   * Get the tile coordinate for the given map coordinate and resolution.  This\n   * method considers that coordinates that intersect tile boundaries should be\n   * assigned the higher tile coordinate.\n   *\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {number} resolution Resolution.\n   * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Destination import(\"../tilecoord.js\").TileCoord object.\n   * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n   * @api\n   */\n  getTileCoordForCoordAndResolution(coordinate, resolution, opt_tileCoord) {\n    return this.getTileCoordForXYAndResolution_(\n      coordinate[0],\n      coordinate[1],\n      resolution,\n      false,\n      opt_tileCoord,\n    );\n  }\n\n  /**\n   * Note that this method should not be called for resolutions that correspond\n   * to an integer zoom level.  Instead call the `getTileCoordForXYAndZ_` method.\n   * @param {number} x X.\n   * @param {number} y Y.\n   * @param {number} resolution Resolution (for a non-integer zoom level).\n   * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n   *     intersections go to the higher tile coordinate, let edge intersections\n   *     go to the lower tile coordinate.\n   * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Temporary import(\"../tilecoord.js\").TileCoord object.\n   * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n   * @private\n   */\n  getTileCoordForXYAndResolution_(\n    x,\n    y,\n    resolution,\n    reverseIntersectionPolicy,\n    opt_tileCoord,\n  ) {\n    const z = this.getZForResolution(resolution);\n    const scale = resolution / this.getResolution(z);\n    const origin = this.getOrigin(z);\n    const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n\n    let tileCoordX = (scale * (x - origin[0])) / resolution / tileSize[0];\n    let tileCoordY = (scale * (origin[1] - y)) / resolution / tileSize[1];\n\n    if (reverseIntersectionPolicy) {\n      tileCoordX = ceil(tileCoordX, DECIMALS) - 1;\n      tileCoordY = ceil(tileCoordY, DECIMALS) - 1;\n    } else {\n      tileCoordX = floor(tileCoordX, DECIMALS);\n      tileCoordY = floor(tileCoordY, DECIMALS);\n    }\n\n    return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n  }\n\n  /**\n   * Although there is repetition between this method and `getTileCoordForXYAndResolution_`,\n   * they should have separate implementations.  This method is for integer zoom\n   * levels.  The other method should only be called for resolutions corresponding\n   * to non-integer zoom levels.\n   * @param {number} x Map x coordinate.\n   * @param {number} y Map y coordinate.\n   * @param {number} z Integer zoom level.\n   * @param {boolean} reverseIntersectionPolicy Instead of letting edge\n   *     intersections go to the higher tile coordinate, let edge intersections\n   *     go to the lower tile coordinate.\n   * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Temporary import(\"../tilecoord.js\").TileCoord object.\n   * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n   * @private\n   */\n  getTileCoordForXYAndZ_(x, y, z, reverseIntersectionPolicy, opt_tileCoord) {\n    const origin = this.getOrigin(z);\n    const resolution = this.getResolution(z);\n    const tileSize = toSize(this.getTileSize(z), this.tmpSize_);\n\n    let tileCoordX = (x - origin[0]) / resolution / tileSize[0];\n    let tileCoordY = (origin[1] - y) / resolution / tileSize[1];\n\n    if (reverseIntersectionPolicy) {\n      tileCoordX = ceil(tileCoordX, DECIMALS) - 1;\n      tileCoordY = ceil(tileCoordY, DECIMALS) - 1;\n    } else {\n      tileCoordX = floor(tileCoordX, DECIMALS);\n      tileCoordY = floor(tileCoordY, DECIMALS);\n    }\n\n    return createOrUpdateTileCoord(z, tileCoordX, tileCoordY, opt_tileCoord);\n  }\n\n  /**\n   * Get a tile coordinate given a map coordinate and zoom level.\n   * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n   * @param {number} z Integer zoom level, e.g. the result of a `getZForResolution()` method call\n   * @param {import(\"../tilecoord.js\").TileCoord} [opt_tileCoord] Destination import(\"../tilecoord.js\").TileCoord object.\n   * @return {import(\"../tilecoord.js\").TileCoord} Tile coordinate.\n   * @api\n   */\n  getTileCoordForCoordAndZ(coordinate, z, opt_tileCoord) {\n    return this.getTileCoordForXYAndZ_(\n      coordinate[0],\n      coordinate[1],\n      z,\n      false,\n      opt_tileCoord,\n    );\n  }\n\n  /**\n   * @param {import(\"../tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n   * @return {number} Tile resolution.\n   */\n  getTileCoordResolution(tileCoord) {\n    return this.resolutions_[tileCoord[0]];\n  }\n\n  /**\n   * Get the tile size for a zoom level. The type of the return value matches the\n   * `tileSize` or `tileSizes` that the tile grid was configured with. To always\n   * get an {@link import(\"../size.js\").Size}, run the result through {@link module:ol/size.toSize}.\n   * @param {number} z Z.\n   * @return {number|import(\"../size.js\").Size} Tile size.\n   * @api\n   */\n  getTileSize(z) {\n    if (this.tileSize_) {\n      return this.tileSize_;\n    }\n    return this.tileSizes_[z];\n  }\n\n  /**\n   * @param {number} z Zoom level.\n   * @return {import(\"../TileRange.js\").default|null} Extent tile range for the specified zoom level.\n   */\n  getFullTileRange(z) {\n    if (!this.fullTileRanges_) {\n      return this.extent_\n        ? this.getTileRangeForExtentAndZ(this.extent_, z)\n        : null;\n    }\n    return this.fullTileRanges_[z];\n  }\n\n  /**\n   * @param {number} resolution Resolution.\n   * @param {number|import(\"../array.js\").NearestDirectionFunction} [opt_direction]\n   *     If 0, the nearest resolution will be used.\n   *     If 1, the nearest higher resolution (lower Z) will be used. If -1, the\n   *     nearest lower resolution (higher Z) will be used. Default is 0.\n   *     Use a {@link module:ol/array~NearestDirectionFunction} for more precise control.\n   *\n   * For example to change tile Z at the midpoint of zoom levels\n   * ```js\n   * function(value, high, low) {\n   *   return value - low * Math.sqrt(high / low);\n   * }\n   * ```\n   * @return {number} Z.\n   * @api\n   */\n  getZForResolution(resolution, opt_direction) {\n    const z = linearFindNearest(\n      this.resolutions_,\n      resolution,\n      opt_direction || 0,\n    );\n    return clamp(z, this.minZoom, this.maxZoom);\n  }\n\n  /**\n   * The tile with the provided tile coordinate intersects the given viewport.\n   * @param {import('../tilecoord.js').TileCoord} tileCoord Tile coordinate.\n   * @param {Array<number>} viewport Viewport as returned from {@link module:ol/extent.getRotatedViewport}.\n   * @return {boolean} The tile with the provided tile coordinate intersects the given viewport.\n   */\n  tileCoordIntersectsViewport(tileCoord, viewport) {\n    return intersectsLinearRing(\n      viewport,\n      0,\n      viewport.length,\n      2,\n      this.getTileCoordExtent(tileCoord),\n    );\n  }\n\n  /**\n   * @param {!import(\"../extent.js\").Extent} extent Extent for this tile grid.\n   * @private\n   */\n  calculateTileRanges_(extent) {\n    const length = this.resolutions_.length;\n    const fullTileRanges = new Array(length);\n    for (let z = this.minZoom; z < length; ++z) {\n      fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);\n    }\n    this.fullTileRanges_ = fullTileRanges;\n  }\n}\n\nexport default TileGrid;\n","/**\n * @module ol/tilegrid/WMTS\n */\n\nimport TileRange from '../TileRange.js';\nimport {get as getProjection} from '../proj.js';\nimport TileGrid from './TileGrid.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../extent.js\").Extent} [extent] Extent for the tile grid. No tiles\n * outside this extent will be requested by {@link module:ol/source/Tile~TileSource} sources.\n * When no `origin` or `origins` are configured, the `origin` will be set to the\n * top-left corner of the extent.\n * @property {number} [minZoom=0] Minimum zoom.\n * @property {import(\"../coordinate.js\").Coordinate} [origin] The tile grid origin, i.e.\n * where the `x` and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left\n * to right and downwards. If not specified, `extent` or `origins` must be provided.\n * @property {Array<import(\"../coordinate.js\").Coordinate>} [origins] Tile grid origins,\n * i.e. where the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If\n * given, the array length should match the length of the `resolutions` array, i.e.\n * each resolution can have a different origin. Tile coordinates increase left to\n * right and downwards. If not specified, `extent` or `origin` must be provided.\n * @property {!Array<number>} resolutions Resolutions. The array index of each\n * resolution needs to match the zoom level. This means that even if a `minZoom`\n * is configured, the resolutions array will have a length of `maxZoom + 1`\n * @property {!Array<string>} matrixIds matrix IDs. The length of this array needs\n * to match the length of the `resolutions` array.\n * @property {Array<import(\"../size.js\").Size>} [sizes] Number of tile rows and columns\n * of the grid for each zoom level. The values here are the `TileMatrixWidth` and\n * `TileMatrixHeight` advertised in the GetCapabilities response of the WMTS, and\n * define each zoom level's extent together with the `origin` or `origins`.\n * A grid `extent` can be configured in addition, and will further limit the extent for\n * which tile requests are made by sources. If the bottom-left corner of\n * an extent is used as `origin` or `origins`, then the `y` value must be\n * negative because OpenLayers tile coordinates use the top left as the origin.\n * @property {Array<import(\"../TileRange.js\").default>} [tileRanges] Pre-built tile ranges for each\n * zoom level. When provided, used instead of `sizes` to set per-level tile index bounds.\n * @property {number|import(\"../size.js\").Size} [tileSize] Tile size.\n * @property {Array<number|import(\"../size.js\").Size>} [tileSizes] Tile sizes. The length of\n * this array needs to match the length of the `resolutions` array.\n */\n\n/**\n * @classdesc\n * Set the grid pattern for sources accessing WMTS tiled-image servers.\n * @api\n */\nclass WMTSTileGrid extends TileGrid {\n  /**\n   * @param {Options} options WMTS options.\n   */\n  constructor(options) {\n    super({\n      extent: options.extent,\n      origin: options.origin,\n      origins: options.origins,\n      resolutions: options.resolutions,\n      tileSize: options.tileSize,\n      tileSizes: options.tileSizes,\n      sizes: options.sizes,\n      tileRanges: options.tileRanges,\n      minZoom: options.minZoom,\n    });\n\n    /**\n     * @private\n     * @type {!Array<string>}\n     */\n    this.matrixIds_ = options.matrixIds;\n  }\n\n  /**\n   * @param {number} z Z.\n   * @return {string} MatrixId..\n   */\n  getMatrixId(z) {\n    return this.matrixIds_[z];\n  }\n\n  /**\n   * Get the list of matrix identifiers.\n   * @return {Array<string>} MatrixIds.\n   * @api\n   */\n  getMatrixIds() {\n    return this.matrixIds_;\n  }\n}\n\nexport default WMTSTileGrid;\n\n/**\n * Create a tile grid from a WMTS capabilities matrix set and an\n * optional TileMatrixSetLimits.\n * @param {Object} matrixSet An object representing a matrixSet in the\n *     capabilities document.\n * @param {import(\"../extent.js\").Extent} [extent] An optional extent to restrict the tile\n *     ranges the server provides.\n * @param {Array<Object>} [matrixLimits] An optional object representing\n *     the available matrices for tileGrid.\n * @return {WMTSTileGrid} WMTS tileGrid instance.\n * @api\n */\nexport function createFromCapabilitiesMatrixSet(\n  matrixSet,\n  extent,\n  matrixLimits,\n) {\n  /** @type {!Array<number>} */\n  const resolutions = [];\n  /** @type {!Array<string>} */\n  const matrixIds = [];\n  /** @type {!Array<import(\"../coordinate.js\").Coordinate>} */\n  const origins = [];\n  /** @type {!Array<number|import(\"../size.js\").Size>} */\n  const tileSizes = [];\n  /** @type {!Array<import(\"../size.js\").Size>} */\n  const sizes = [];\n  /** @type {!Array<import(\"../TileRange.js\").default>} */\n  const tileRanges = [];\n\n  matrixLimits = matrixLimits !== undefined ? matrixLimits : [];\n\n  const supportedCRSPropName = 'SupportedCRS';\n  const matrixIdsPropName = 'TileMatrix';\n  const identifierPropName = 'Identifier';\n  const scaleDenominatorPropName = 'ScaleDenominator';\n  const topLeftCornerPropName = 'TopLeftCorner';\n  const tileWidthPropName = 'TileWidth';\n  const tileHeightPropName = 'TileHeight';\n\n  const code = matrixSet[supportedCRSPropName];\n  const projection = getProjection(code);\n  const metersPerUnit = projection.getMetersPerUnit();\n  // swap origin x and y coordinates if axis orientation is lat/long\n  const switchOriginXY = projection.getAxisOrientation().startsWith('ne');\n\n  matrixSet[matrixIdsPropName].sort(function (a, b) {\n    return b[scaleDenominatorPropName] - a[scaleDenominatorPropName];\n  });\n\n  matrixSet[matrixIdsPropName].forEach(function (elt) {\n    let matrixAvailable;\n    // use of matrixLimits to filter TileMatrices from GetCapabilities\n    // TileMatrixSet from unavailable matrix levels.\n    if (matrixLimits.length > 0) {\n      matrixAvailable = matrixLimits.find(function (elt_ml) {\n        if (elt[identifierPropName] == elt_ml[matrixIdsPropName]) {\n          return true;\n        }\n        // Fallback for tileMatrix identifiers that don't get prefixed\n        // by their tileMatrixSet identifiers.\n        if (!elt[identifierPropName].includes(':')) {\n          return (\n            matrixSet[identifierPropName] + ':' + elt[identifierPropName] ===\n            elt_ml[matrixIdsPropName]\n          );\n        }\n        return false;\n      });\n    } else {\n      matrixAvailable = true;\n    }\n\n    if (matrixAvailable) {\n      matrixIds.push(elt[identifierPropName]);\n      const resolution =\n        (elt[scaleDenominatorPropName] * 0.28e-3) / metersPerUnit;\n      const tileWidth = elt[tileWidthPropName];\n      const tileHeight = elt[tileHeightPropName];\n      if (switchOriginXY) {\n        origins.push([\n          elt[topLeftCornerPropName][1],\n          elt[topLeftCornerPropName][0],\n        ]);\n      } else {\n        origins.push(elt[topLeftCornerPropName]);\n      }\n      resolutions.push(resolution);\n      tileSizes.push(\n        tileWidth == tileHeight ? tileWidth : [tileWidth, tileHeight],\n      );\n      sizes.push([elt['MatrixWidth'], elt['MatrixHeight']]);\n      if (matrixLimits.length > 0) {\n        tileRanges.push(\n          new TileRange(\n            matrixAvailable['MinTileCol'],\n            matrixAvailable['MaxTileCol'],\n            matrixAvailable['MinTileRow'],\n            matrixAvailable['MaxTileRow'],\n          ),\n        );\n      }\n    }\n  });\n\n  return new WMTSTileGrid({\n    extent: extent,\n    origins: origins,\n    resolutions: resolutions,\n    matrixIds: matrixIds,\n    tileSizes: tileSizes,\n    sizes: tileRanges.length === 0 ? sizes : undefined,\n    tileRanges: tileRanges.length > 0 ? tileRanges : undefined,\n  });\n}\n","/**\n * @module ol/tilegrid/common\n */\n\n/**\n * Default maximum zoom for default tile grids.\n * @type {number}\n */\nexport const DEFAULT_MAX_ZOOM = 42;\n\n/**\n * Default tile size.\n * @type {number}\n */\nexport const DEFAULT_TILE_SIZE = 256;\n","/**\n * @module ol/tileurlfunction\n */\nimport {modulo} from './math.js';\nimport {hash as tileCoordHash} from './tilecoord.js';\nimport {renderXYZTemplate} from './uri.js';\n\n/**\n * @param {string} template Template.\n * @param {import(\"./tilegrid/TileGrid.js\").default|null} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplate(template, tileGrid) {\n  return (\n    /**\n     * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"./proj/Projection.js\").default} projection Projection.\n     * @return {string|undefined} Tile URL.\n     */\n    function (tileCoord, pixelRatio, projection) {\n      if (!tileCoord) {\n        return undefined;\n      }\n      let maxY;\n      const z = tileCoord[0];\n      if (tileGrid) {\n        // The `{-y}` placeholder only works for sources that have a tile grid at construction\n        const range = tileGrid.getFullTileRange(z);\n        if (range) {\n          maxY = range.getHeight() - 1;\n        }\n      }\n      return renderXYZTemplate(template, z, tileCoord[1], tileCoord[2], maxY);\n    }\n  );\n}\n\n/**\n * @param {Array<string>} templates Templates.\n * @param {import(\"./tilegrid/TileGrid.js\").default} tileGrid Tile grid.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTemplates(templates, tileGrid) {\n  const len = templates.length;\n  const tileUrlFunctions = new Array(len);\n  for (let i = 0; i < len; ++i) {\n    tileUrlFunctions[i] = createFromTemplate(templates[i], tileGrid);\n  }\n  return createFromTileUrlFunctions(tileUrlFunctions);\n}\n\n/**\n * @param {Array<import(\"./Tile.js\").UrlFunction>} tileUrlFunctions Tile URL Functions.\n * @return {import(\"./Tile.js\").UrlFunction} Tile URL function.\n */\nexport function createFromTileUrlFunctions(tileUrlFunctions) {\n  if (tileUrlFunctions.length === 1) {\n    return tileUrlFunctions[0];\n  }\n  return (\n    /**\n     * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile Coordinate.\n     * @param {number} pixelRatio Pixel ratio.\n     * @param {import(\"./proj/Projection.js\").default} projection Projection.\n     * @return {string|undefined} Tile URL.\n     */\n    function (tileCoord, pixelRatio, projection) {\n      if (!tileCoord) {\n        return undefined;\n      }\n      const h = tileCoordHash(tileCoord);\n      const index = modulo(h, tileUrlFunctions.length);\n      return tileUrlFunctions[index](tileCoord, pixelRatio, projection);\n    }\n  );\n}\n\n/**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {string|undefined} Tile URL.\n */\nexport function nullTileUrlFunction(tileCoord, pixelRatio, projection) {\n  return undefined;\n}\n","/**\n * @module ol/transform\n */\nimport {assert} from './asserts.js';\n\n/**\n * An array representing an affine 2d transformation for use with\n * {@link module:ol/transform} functions. The array has 6 elements.\n * @typedef {!Array<number>} Transform\n * @api\n */\n\n/**\n * Collection of affine 2d transformation functions. The functions work on an\n * array of 6 elements. The element order is compatible with the [SVGMatrix\n * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is\n * a subset (elements a to f) of a 3×3 matrix:\n * ```\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * ```\n */\n\n/** @type {Transform} */\nexport const IDENTITY_TRANSFORM = [1, 0, 0, 1, 0, 0];\n\n/**\n * @private\n * @type {Transform}\n */\nconst tmp_ = new Array(6);\n\n/**\n * Create an identity transform.\n * @return {!Transform} Identity transform.\n */\nexport function create() {\n  return IDENTITY_TRANSFORM.slice(0);\n}\n\n/**\n * Resets the given transform to an identity transform.\n * @param {!Transform} transform Transform.\n * @return {!Transform} Transform.\n */\nexport function reset(transform) {\n  return set(transform, 1, 0, 0, 1, 0, 0);\n}\n\n/**\n * Multiply the underlying matrices of two transforms and return the result in\n * the first transform.\n * @param {!Transform} transform1 Transform parameters of matrix 1.\n * @param {!Transform} transform2 Transform parameters of matrix 2.\n * @return {!Transform} transform1 multiplied with transform2.\n */\nexport function multiply(transform1, transform2) {\n  const a1 = transform1[0];\n  const b1 = transform1[1];\n  const c1 = transform1[2];\n  const d1 = transform1[3];\n  const e1 = transform1[4];\n  const f1 = transform1[5];\n  const a2 = transform2[0];\n  const b2 = transform2[1];\n  const c2 = transform2[2];\n  const d2 = transform2[3];\n  const e2 = transform2[4];\n  const f2 = transform2[5];\n\n  transform1[0] = a1 * a2 + c1 * b2;\n  transform1[1] = b1 * a2 + d1 * b2;\n  transform1[2] = a1 * c2 + c1 * d2;\n  transform1[3] = b1 * c2 + d1 * d2;\n  transform1[4] = a1 * e2 + c1 * f2 + e1;\n  transform1[5] = b1 * e2 + d1 * f2 + f1;\n\n  return transform1;\n}\n\n/**\n * Set the transform components a-f on a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} a The a component of the transform.\n * @param {number} b The b component of the transform.\n * @param {number} c The c component of the transform.\n * @param {number} d The d component of the transform.\n * @param {number} e The e component of the transform.\n * @param {number} f The f component of the transform.\n * @return {!Transform} Matrix with transform applied.\n */\nexport function set(transform, a, b, c, d, e, f) {\n  transform[0] = a;\n  transform[1] = b;\n  transform[2] = c;\n  transform[3] = d;\n  transform[4] = e;\n  transform[5] = f;\n  return transform;\n}\n\n/**\n * Set transform on one matrix from another matrix.\n * @param {!Transform} transform1 Matrix to set transform to.\n * @param {!Transform} transform2 Matrix to set transform from.\n * @return {!Transform} transform1 with transform from transform2 applied.\n */\nexport function setFromArray(transform1, transform2) {\n  transform1[0] = transform2[0];\n  transform1[1] = transform2[1];\n  transform1[2] = transform2[2];\n  transform1[3] = transform2[3];\n  transform1[4] = transform2[4];\n  transform1[5] = transform2[5];\n  return transform1;\n}\n\n/**\n * Transforms the given coordinate with the given transform returning the\n * resulting, transformed coordinate. The coordinate will be modified in-place.\n *\n * @param {Transform} transform The transformation.\n * @param {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} coordinate The coordinate to transform.\n * @return {import(\"./coordinate.js\").Coordinate|import(\"./pixel.js\").Pixel} return coordinate so that operations can be\n *     chained together.\n */\nexport function apply(transform, coordinate) {\n  const x = coordinate[0];\n  const y = coordinate[1];\n  coordinate[0] = transform[0] * x + transform[2] * y + transform[4];\n  coordinate[1] = transform[1] * x + transform[3] * y + transform[5];\n  return coordinate;\n}\n\n/**\n * Applies rotation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} angle Angle in radians.\n * @return {!Transform} The rotated transform.\n */\nexport function rotate(transform, angle) {\n  const cos = Math.cos(angle);\n  const sin = Math.sin(angle);\n  return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));\n}\n\n/**\n * Applies scale to a given transform.\n * @param {!Transform} transform Transform.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scaled transform.\n */\nexport function scale(transform, x, y) {\n  return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));\n}\n\n/**\n * Creates a scale transform.\n * @param {!Transform} target Transform to overwrite.\n * @param {number} x Scale factor x.\n * @param {number} y Scale factor y.\n * @return {!Transform} The scale transform.\n */\nexport function makeScale(target, x, y) {\n  return set(target, x, 0, 0, y, 0, 0);\n}\n\n/**\n * Applies translation to the given transform.\n * @param {!Transform} transform Transform.\n * @param {number} dx Translation x.\n * @param {number} dy Translation y.\n * @return {!Transform} The translated transform.\n */\nexport function translate(transform, dx, dy) {\n  return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative).\n * @param {!Transform} transform The transform (will be modified in place).\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {!Transform} The composite transform.\n */\nexport function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {\n  const sin = Math.sin(angle);\n  const cos = Math.cos(angle);\n  transform[0] = sx * cos;\n  transform[1] = sy * sin;\n  transform[2] = -sx * sin;\n  transform[3] = sy * cos;\n  transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;\n  transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;\n  return transform;\n}\n\n/**\n * Creates a composite transform given an initial translation, scale, rotation, and\n * final translation (in that order only, not commutative). The resulting transform\n * string can be applied as `transform` property of an HTMLElement's style.\n * @param {number} dx1 Initial translation x.\n * @param {number} dy1 Initial translation y.\n * @param {number} sx Scale factor x.\n * @param {number} sy Scale factor y.\n * @param {number} angle Rotation (in counter-clockwise radians).\n * @param {number} dx2 Final translation x.\n * @param {number} dy2 Final translation y.\n * @return {string} The composite css transform.\n * @api\n */\nexport function composeCssTransform(dx1, dy1, sx, sy, angle, dx2, dy2) {\n  return toString(compose(create(), dx1, dy1, sx, sy, angle, dx2, dy2));\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (source) transform.\n */\nexport function invert(source) {\n  return makeInverse(source, source);\n}\n\n/**\n * Invert the given transform.\n * @param {!Transform} target Transform to be set as the inverse of\n *     the source transform.\n * @param {!Transform} source The source transform to invert.\n * @return {!Transform} The inverted (target) transform.\n */\nexport function makeInverse(target, source) {\n  const det = determinant(source);\n  assert(det !== 0, 'Transformation matrix cannot be inverted');\n\n  const a = source[0];\n  const b = source[1];\n  const c = source[2];\n  const d = source[3];\n  const e = source[4];\n  const f = source[5];\n\n  target[0] = d / det;\n  target[1] = -b / det;\n  target[2] = -c / det;\n  target[3] = a / det;\n  target[4] = (c * f - d * e) / det;\n  target[5] = -(a * f - b * e) / det;\n\n  return target;\n}\n\n/**\n * Returns the determinant of the given matrix.\n * @param {!Transform} mat Matrix.\n * @return {number} Determinant.\n */\nexport function determinant(mat) {\n  return mat[0] * mat[3] - mat[1] * mat[2];\n}\n\n/**\n * @type {Array}\n */\nconst matrixPrecision = [1e5, 1e5, 1e5, 1e5, 2, 2];\n\n/**\n * A matrix string version of the transform.  This can be used\n * for CSS transforms.\n * @param {!Transform} mat Matrix.\n * @return {string} The transform as a string.\n */\nexport function toString(mat) {\n  const transformString = 'matrix(' + mat.join(', ') + ')';\n  return transformString;\n}\n\n/**\n * Create a transform from a CSS transform matrix string.\n * @param {string} cssTransform The CSS string to parse.\n * @return {!Transform} The transform.\n */\nexport function fromString(cssTransform) {\n  const values = cssTransform.substring(7, cssTransform.length - 1).split(',');\n  return values.map(parseFloat);\n}\n\n/**\n * Compare two matrices for equality.\n * @param {!string} cssTransform1 A CSS transform matrix string.\n * @param {!string} cssTransform2 A CSS transform matrix string.\n * @return {boolean} The two matrices are equal.\n */\nexport function equivalent(cssTransform1, cssTransform2) {\n  const mat1 = fromString(cssTransform1);\n  const mat2 = fromString(cssTransform2);\n  for (let i = 0; i < 6; ++i) {\n    if (Math.round((mat1[i] - mat2[i]) * matrixPrecision[i]) !== 0) {\n      return false;\n    }\n  }\n  return true;\n}\n","/**\n * @module ol/uri\n */\n\nimport {modulo} from './math.js';\nimport {hashZXY} from './tilecoord.js';\n\n/**\n * Appends query parameters to a URI.\n *\n * @param {string} uri The original URI, which may already have query data.\n * @param {!Object} params An object where keys are URI-encoded parameter keys,\n *     and the values are arbitrary types or arrays.\n * @return {string} The new URI.\n */\nexport function appendParams(uri, params) {\n  /** @type {Array<string>} */\n  const keyParams = [];\n  // Skip any null or undefined parameter values\n  Object.keys(params).forEach(function (k) {\n    if (params[k] !== null && params[k] !== undefined) {\n      keyParams.push(k + '=' + encodeURIComponent(params[k]));\n    }\n  });\n  const qs = keyParams.join('&');\n  // remove any trailing ? or &\n  uri = uri.replace(/[?&]$/, '');\n  // append ? or & depending on whether uri has existing parameters\n  uri += uri.includes('?') ? '&' : '?';\n  return uri + qs;\n}\n\nconst zRegEx = /\\{z\\}/g;\nconst xRegEx = /\\{x\\}/g;\nconst yRegEx = /\\{y\\}/g;\nconst dashYRegEx = /\\{-y\\}/g;\n\n/**\n * @param {string} template The URL template.  Should have `{x}`, `{y}`, and `{z}` placeholders.  If\n * the template has a `{-y}` placeholder, the `maxY` parameter must be supplied.\n * @param {number} z The tile z coordinate.\n * @param {number} x The tile x coordinate.\n * @param {number} y The tile y coordinate.\n * @param {number} [maxY] The maximum y coordinate at the given z level.\n * @return {string} The URL.\n */\nexport function renderXYZTemplate(template, z, x, y, maxY) {\n  return template\n    .replace(zRegEx, z.toString())\n    .replace(xRegEx, x.toString())\n    .replace(yRegEx, y.toString())\n    .replace(dashYRegEx, function () {\n      if (maxY === undefined) {\n        throw new Error(\n          'If the URL template has a {-y} placeholder, the grid extent must be known',\n        );\n      }\n      return (maxY - y).toString();\n    });\n}\n\n/**\n * @param {Array<string>} urls List of URLs.\n * @param {number} z The tile z coordinate.\n * @param {number} x The tile x coordinate.\n * @param {number} y The tile y coordinate.\n * @return {string} The chosen URL.\n */\nexport function pickUrl(urls, z, x, y) {\n  const hash = hashZXY(z, x, y);\n  const index = modulo(hash, urls.length);\n  return urls[index];\n}\n\n/**\n * @param {string} url URL.\n * @return {Array<string>} Array of urls.\n */\nexport function expandUrl(url) {\n  const urls = [];\n  let match = /\\{([a-z])-([a-z])\\}/.exec(url);\n  if (match) {\n    // char range\n    const startCharCode = match[1].charCodeAt(0);\n    const stopCharCode = match[2].charCodeAt(0);\n    let charCode;\n    for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n      urls.push(url.replace(match[0], String.fromCharCode(charCode)));\n    }\n    return urls;\n  }\n  match = /\\{(\\d+)-(\\d+)\\}/.exec(url);\n  if (match) {\n    // number range\n    const stop = parseInt(match[2], 10);\n    for (let i = parseInt(match[1], 10); i <= stop; i++) {\n      urls.push(url.replace(match[0], i.toString()));\n    }\n    return urls;\n  }\n  urls.push(url);\n  return urls;\n}\n","/**\n * @module ol/util\n */\n\n/**\n * @return {never} Any return.\n */\nexport function abstract() {\n  throw new Error('Unimplemented abstract method.');\n}\n\n/**\n * Counter for getUid.\n * @type {number}\n * @private\n */\nlet uidCounter_ = 0;\n\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid.\n *\n * @param {Object} obj The object to get the unique ID for.\n * @return {string} The unique ID for the object.\n * @api\n */\nexport function getUid(obj) {\n  return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));\n}\n\n/**\n * OpenLayers version.\n * @type {string}\n */\nexport const VERSION = '10.10.0';\n","/**\n * @module ol/vec/mat4\n */\n\n/** @typedef {Array<number>} Mat4 */\n\n/**\n * @return {Mat4} \"4x4 matrix representing a 3D identity transform.\"\n */\nexport function create() {\n  return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\n\n/**\n * @param {Mat4} out Flattened 4x4 matrix being reset.\n * @return {Mat4} Reset 4x4 matrix\n */\nexport function reset(out) {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = 1;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 1;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n\n/**\n * @param {Mat4} mat4 Flattened 4x4 matrix receiving the result.\n * @param {import(\"../transform.js\").Transform} transform Transformation matrix.\n * @return {Mat4} \"2D transformation matrix as flattened 4x4 matrix.\"\n */\nexport function fromTransform(mat4, transform) {\n  mat4[0] = transform[0];\n  mat4[1] = transform[1];\n  mat4[4] = transform[2];\n  mat4[5] = transform[3];\n  mat4[12] = transform[4];\n  mat4[13] = transform[5];\n  return mat4;\n}\n\n/**\n * Generates a orthogonal projection matrix with the given bounds\n *\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @param {Mat4} [out] mat4 frustum matrix will be written into\n * @return {Mat4} out\n */\nexport function orthographic(left, right, bottom, top, near, far, out) {\n  out = out ?? create();\n  const lr = 1 / (left - right),\n    bt = 1 / (bottom - top),\n    nf = 1 / (near - far);\n  out[0] = -2 * lr;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = -2 * bt;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 2 * nf;\n  out[11] = 0;\n  out[12] = (left + right) * lr;\n  out[13] = (top + bottom) * bt;\n  out[14] = (far + near) * nf;\n  out[15] = 1;\n  return out;\n}\n\n/**\n * Scales the mat4 by the dimensions in the given vec3\n *\n * @param {Mat4} m The matrix to scale.\n * @param {number} x How much to scale in the x direction.\n * @param {number} y How much to scale in the y direction.\n * @param {number} z How much to scale in the z direction.\n * @param {Mat4} [out] The matrix to write to.\n * @return {Mat4} out\n */\nexport function scale(m, x, y, z, out) {\n  out = out ?? create();\n  out[0] = m[0] * x;\n  out[1] = m[1] * x;\n  out[2] = m[2] * x;\n  out[3] = m[3] * x;\n  out[4] = m[4] * y;\n  out[5] = m[5] * y;\n  out[6] = m[6] * y;\n  out[7] = m[7] * y;\n  out[8] = m[8] * z;\n  out[9] = m[9] * z;\n  out[10] = m[10] * z;\n  out[11] = m[11] * z;\n  out[12] = m[12];\n  out[13] = m[13];\n  out[14] = m[14];\n  out[15] = m[15];\n  return out;\n}\n\n/**\n * Translate a matrix.\n *\n * @param {Mat4} m the matrix to translate\n * @param {number} x How much to translate in the x direction.\n * @param {number} y How much to translate in the y direction.\n * @param {number} z How much to translate in the z direction.\n * @param {Mat4} [out] the receiving matrix\n * @return {Mat4} out\n */\nexport function translate(m, x, y, z, out) {\n  out = out ?? create();\n  let a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23;\n\n  if (m === out) {\n    out[12] = m[0] * x + m[4] * y + m[8] * z + m[12];\n    out[13] = m[1] * x + m[5] * y + m[9] * z + m[13];\n    out[14] = m[2] * x + m[6] * y + m[10] * z + m[14];\n    out[15] = m[3] * x + m[7] * y + m[11] * z + m[15];\n  } else {\n    a00 = m[0];\n    a01 = m[1];\n    a02 = m[2];\n    a03 = m[3];\n    a10 = m[4];\n    a11 = m[5];\n    a12 = m[6];\n    a13 = m[7];\n    a20 = m[8];\n    a21 = m[9];\n    a22 = m[10];\n    a23 = m[11];\n\n    out[0] = a00;\n    out[1] = a01;\n    out[2] = a02;\n    out[3] = a03;\n    out[4] = a10;\n    out[5] = a11;\n    out[6] = a12;\n    out[7] = a13;\n    out[8] = a20;\n    out[9] = a21;\n    out[10] = a22;\n    out[11] = a23;\n\n    out[12] = a00 * x + a10 * y + a20 * z + m[12];\n    out[13] = a01 * x + a11 * y + a21 * z + m[13];\n    out[14] = a02 * x + a12 * y + a22 * z + m[14];\n    out[15] = a03 * x + a13 * y + a23 * z + m[15];\n  }\n\n  return out;\n}\n\n/**\n * @param {number} x x translation.\n * @param {number} y y translation.\n * @param {number} z z translation.\n * @param {Mat4} [out] optional matrix to store result\n * @return {Mat4} out\n */\nexport function translation(x, y, z, out) {\n  out = out ?? create();\n\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = 1;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 1;\n  out[11] = 0;\n  out[12] = x;\n  out[13] = y;\n  out[14] = z;\n  out[15] = 1;\n\n  return out;\n}\n\n/**\n * Rotate a matrix around the Z axis, only affecting X and Y components.\n *\n * @param {Mat4} m the matrix to rotate\n * @param {number} angle How much to rotate (in radians).\n * @param {Mat4} [out] the receiving matrix\n * @return {Mat4} out\n */\nexport function rotate(m, angle, out) {\n  out = out ?? create();\n  const cos = Math.cos(angle),\n    sin = Math.sin(angle);\n\n  // rotation matrix components\n  const a11 = cos;\n  const a12 = -sin;\n  const a21 = sin;\n  const a22 = cos;\n\n  const b11 = m[0];\n  const b12 = m[1];\n  const b13 = m[2];\n  const b14 = m[3];\n  const b21 = m[4];\n  const b22 = m[5];\n  const b23 = m[6];\n  const b24 = m[7];\n\n  out[0] = a11 * b11 + a12 * b21;\n  out[1] = a11 * b12 + a12 * b22;\n  out[2] = a11 * b13 + a12 * b23;\n  out[3] = a11 * b14 + a12 * b24;\n\n  out[4] = a21 * b11 + a22 * b21;\n  out[5] = a21 * b12 + a22 * b22;\n  out[6] = a21 * b13 + a22 * b23;\n  out[7] = a21 * b14 + a22 * b24;\n\n  if (out !== m) {\n    out[8] = m[8];\n    out[9] = m[9];\n    out[10] = m[10];\n    out[11] = m[11];\n\n    out[12] = m[12];\n    out[13] = m[13];\n    out[14] = m[14];\n    out[15] = m[15];\n  }\n\n  return out;\n}\n","/**\n * @module ol/webgl\n */\n\nimport {SAFARI_BUG_237906} from './has.js';\n\n/**\n * Constants taken from goog.webgl\n */\n\n/**\n * Used by {@link module:ol/webgl/Helper~WebGLHelper} for buffers containing vertices data, such as\n * position, color, texture coordinate, etc. These vertices are then referenced by an index buffer\n * to be drawn on screen (see {@link module:ol/webgl.ELEMENT_ARRAY_BUFFER}).\n * @const\n * @type {number}\n * @api\n */\nexport const ARRAY_BUFFER = 0x8892;\n\n/**\n * Used by {@link module:ol/webgl/Helper~WebGLHelper} for buffers containing indices data.\n * Index buffers are essentially lists of references to vertices defined in a vertex buffer\n * (see {@link module:ol/webgl.ARRAY_BUFFER}), and define the primitives (triangles) to be drawn.\n * @const\n * @type {number}\n * @api\n */\nexport const ELEMENT_ARRAY_BUFFER = 0x8893;\n\n/**\n * Used by {link module:ol/webgl/Buffer~WebGLArrayBuffer}.\n * @const\n * @type {number}\n * @api\n */\nexport const STREAM_DRAW = 0x88e0;\n\n/**\n * Used by {link module:ol/webgl/Buffer~WebGLArrayBuffer}.\n * @const\n * @type {number}\n * @api\n */\nexport const STATIC_DRAW = 0x88e4;\n\n/**\n * Used by {link module:ol/webgl/Buffer~WebGLArrayBuffer}.\n * @const\n * @type {number}\n * @api\n */\nexport const DYNAMIC_DRAW = 0x88e8;\n\n/**\n * @const\n * @type {number}\n */\nexport const UNSIGNED_BYTE = 0x1401;\n\n/**\n * @const\n * @type {number}\n */\nexport const UNSIGNED_SHORT = 0x1403;\n\n/**\n * @const\n * @type {number}\n */\nexport const UNSIGNED_INT = 0x1405;\n\n/**\n * @const\n * @type {number}\n */\nexport const FLOAT = 0x1406;\n\n/**\n  end of goog.webgl constants\n */\n\n/**\n * @const\n * @type {Array<string>}\n */\nconst CONTEXT_IDS = ['experimental-webgl', 'webgl', 'webkit-3d', 'moz-webgl'];\n\n/**\n * @param {HTMLCanvasElement} canvas Canvas.\n * @param {Object} [attributes] Attributes.\n * @return {WebGLRenderingContext|null} WebGL rendering context.\n */\nexport function getContext(canvas, attributes) {\n  attributes = Object.assign(\n    {\n      preserveDrawingBuffer: true,\n      antialias: SAFARI_BUG_237906 ? false : true, // https://bugs.webkit.org/show_bug.cgi?id=237906\n    },\n    attributes,\n  );\n  const ii = CONTEXT_IDS.length;\n  for (let i = 0; i < ii; ++i) {\n    try {\n      const context = canvas.getContext(CONTEXT_IDS[i], attributes);\n      if (context) {\n        return /** @type {!WebGLRenderingContext} */ (context);\n      }\n    } catch {\n      // pass\n    }\n  }\n  return null;\n}\n\n/**\n * @type {Array<string>|null}\n */\nlet supportedExtensions = null;\n\n/**\n * @return {Array<string>|null} List of supported WebGL extensions.\n */\nexport function getSupportedExtensions() {\n  if (!supportedExtensions) {\n    const canvas = document.createElement('canvas');\n    const gl = getContext(canvas);\n    if (gl) {\n      supportedExtensions = gl.getSupportedExtensions();\n    }\n  }\n  return supportedExtensions;\n}\n","/**\n * @module ol/webgl/Buffer\n */\nimport {assert} from '../asserts.js';\nimport {\n  ARRAY_BUFFER,\n  DYNAMIC_DRAW,\n  ELEMENT_ARRAY_BUFFER,\n  STATIC_DRAW,\n  STREAM_DRAW,\n} from '../webgl.js';\n\n/**\n * Used to describe the intended usage for the data: `STATIC_DRAW`, `STREAM_DRAW`\n * or `DYNAMIC_DRAW`.\n * @enum {number}\n */\nexport const BufferUsage = {\n  STATIC_DRAW: STATIC_DRAW,\n  STREAM_DRAW: STREAM_DRAW,\n  DYNAMIC_DRAW: DYNAMIC_DRAW,\n};\n\n/**\n * @classdesc\n * Object used to store an array of data as well as usage information for that data.\n * Stores typed arrays internally, either Float32Array or Uint16/32Array depending on\n * the buffer type (ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER) and available extensions.\n *\n * To populate the array, you can either use:\n * A size using `#ofSize(buffer)`\n * An `ArrayBuffer` object using `#fromArrayBuffer(buffer)`\n * A plain array using `#fromArray(array)`\n *\n * Note:\n * See the documentation of [WebGLRenderingContext.bufferData](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData)\n * for more info on buffer usage.\n */\nclass WebGLArrayBuffer {\n  /**\n   * @param {number} type Buffer type, either ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER.\n   * @param {number} [usage] Intended usage, either `STATIC_DRAW`, `STREAM_DRAW` or `DYNAMIC_DRAW`.\n   * Default is `STATIC_DRAW`.\n   */\n  constructor(type, usage) {\n    /**\n     * @private\n     * @type {Float32Array|Uint32Array|null}\n     */\n    this.array_ = null;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.type_ = type;\n\n    assert(\n      type === ARRAY_BUFFER || type === ELEMENT_ARRAY_BUFFER,\n      'A `WebGLArrayBuffer` must either be of type `ELEMENT_ARRAY_BUFFER` or `ARRAY_BUFFER`',\n    );\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this.usage_ = usage !== undefined ? usage : BufferUsage.STATIC_DRAW;\n  }\n\n  /**\n   * Populates the buffer with an array of the given size (all values will be zeroes).\n   * @param {number} size Array size\n   * @return {WebGLArrayBuffer} This\n   */\n  ofSize(size) {\n    this.array_ = new (getArrayClassForType(this.type_))(size);\n    return this;\n  }\n\n  /**\n   * Populates the buffer with an array of the given size.\n   * @param {Array<number>} array Numerical array\n   * @return {WebGLArrayBuffer} This\n   */\n  fromArray(array) {\n    this.array_ = getArrayClassForType(this.type_).from(array);\n    return this;\n  }\n\n  /**\n   * Populates the buffer with a raw binary array buffer.\n   * @param {ArrayBuffer} buffer Raw binary buffer to populate the array with. Note that this buffer must have been\n   * initialized for the same typed array class.\n   * @return {WebGLArrayBuffer} This\n   */\n  fromArrayBuffer(buffer) {\n    this.array_ = new (getArrayClassForType(this.type_))(buffer);\n    return this;\n  }\n\n  /**\n   * @return {number} Buffer type.\n   */\n  getType() {\n    return this.type_;\n  }\n\n  /**\n   * Will return null if the buffer was not initialized\n   * @return {Float32Array|Uint32Array|null} Array.\n   */\n  getArray() {\n    return this.array_;\n  }\n\n  /**\n   * @param {Float32Array|Uint32Array} array Array.\n   */\n  setArray(array) {\n    const ArrayType = getArrayClassForType(this.type_);\n    if (!(array instanceof ArrayType)) {\n      throw new Error(`Expected ${ArrayType}`);\n    }\n    this.array_ = array;\n  }\n\n  /**\n   * @return {number} Usage.\n   */\n  getUsage() {\n    return this.usage_;\n  }\n\n  /**\n   * Will return 0 if the buffer is not initialized\n   * @return {number} Array size\n   */\n  getSize() {\n    return this.array_ ? this.array_.length : 0;\n  }\n}\n\n/**\n * Returns a typed array constructor based on the given buffer type\n * @param {number} type Buffer type, either ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER.\n * @return {Float32ArrayConstructor|Uint32ArrayConstructor} The typed array class to use for this buffer.\n */\nexport function getArrayClassForType(type) {\n  switch (type) {\n    case ARRAY_BUFFER:\n      return Float32Array;\n    case ELEMENT_ARRAY_BUFFER:\n      return Uint32Array;\n    default:\n      return Float32Array;\n  }\n}\n\nexport default WebGLArrayBuffer;\n","import * as mat4 from '../vec/mat4.js';\n\n/**\n * @module ol/webgl/Canvas\n */\n\nconst VERTEX_SHADER = `\n  attribute vec4 a_position;\n  attribute vec4 a_texcoord;\n\n  uniform mat4 u_matrix;\n  uniform mat4 u_textureMatrix;\n\n  varying vec2 v_texcoord;\n\n  void main() {\n    gl_Position = u_matrix * a_position;\n    vec2 texcoord = (u_textureMatrix * a_texcoord).xy;\n    v_texcoord = texcoord;\n  }\n`;\n\nconst FRAGMENT_SHADER = `\n  precision mediump float;\n\n  varying vec2 v_texcoord;\n\n  uniform sampler2D u_texture;\n\n  void main() {\n    if (\n      v_texcoord.x < 0.0 ||\n      v_texcoord.y < 0.0 ||\n      v_texcoord.x > 1.0 ||\n      v_texcoord.y > 1.0\n    ) {\n      discard;\n    }\n    gl_FragColor = texture2D(u_texture, v_texcoord);\n  }\n`;\n\n/** @typedef {import(\"../transform.js\").Transform} Matrix */\n\n/**\n * Canvas-like operations implemented in webgl.\n */\nexport class Canvas {\n  /**\n   * @param {WebGLRenderingContext} gl Context to render in.\n   */\n  constructor(gl) {\n    /**\n     * @private\n     * @type {WebGLRenderingContext}\n     */\n    this.gl_ = gl;\n\n    /**\n     * @private\n     * @type {WebGLProgram}\n     */\n    this.program_ = createProgram(gl, FRAGMENT_SHADER, VERTEX_SHADER);\n\n    this.positionLocation = gl.getAttribLocation(this.program_, 'a_position');\n    this.texcoordLocation = gl.getAttribLocation(this.program_, 'a_texcoord');\n\n    this.matrixLocation = gl.getUniformLocation(this.program_, 'u_matrix');\n    this.textureMatrixLocation = gl.getUniformLocation(\n      this.program_,\n      'u_textureMatrix',\n    );\n    this.textureLocation = gl.getUniformLocation(this.program_, 'u_texture');\n\n    this.positionBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n\n    this.positions = [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1];\n    gl.bufferData(\n      gl.ARRAY_BUFFER,\n      new Float32Array(this.positions),\n      gl.STATIC_DRAW,\n    );\n\n    this.texcoordBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffer);\n\n    this.texcoords = [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1];\n    gl.bufferData(\n      gl.ARRAY_BUFFER,\n      new Float32Array(this.texcoords),\n      gl.STATIC_DRAW,\n    );\n  }\n\n  /**\n   * 2dContext drawImage call implemented in webgl.\n   * Unlike images, textures do not have a width and height associated\n   * with them so we'll pass in the width and height of the texture.\n   *\n   * @param {WebGLTexture} tex Image to draw.\n   * @param {number} texWidth Image width.\n   * @param {number} texHeight Image height.\n   * @param {number} srcX Top-left x-point to read src image.\n   * @param {number} srcY Top-left y-point to read src image.\n   * @param {number} [srcWidth] Width of source to read.\n   * @param {number} [srcHeight] Height of source to read.\n   * @param {number} [dstX] Top-left x-point of destination.\n   * @param {number} [dstY] Top-left y-point of destination.\n   * @param {number} [dstWidth] Width of written image in destination.\n   * @param {number} [dstHeight] Height of written image in destination.\n   * @param {number} [width] Width of canvas.\n   * @param {number} [height] Height of canvas.\n   */\n  drawImage(\n    tex,\n    texWidth,\n    texHeight,\n    srcX,\n    srcY,\n    srcWidth,\n    srcHeight,\n    dstX,\n    dstY,\n    dstWidth,\n    dstHeight,\n    width,\n    height,\n  ) {\n    const gl = this.gl_;\n\n    if (dstX === undefined) {\n      dstX = srcX;\n    }\n    if (dstY === undefined) {\n      dstY = srcY;\n    }\n    if (srcWidth === undefined) {\n      srcWidth = texWidth;\n    }\n    if (srcHeight === undefined) {\n      srcHeight = texHeight;\n    }\n    if (dstWidth === undefined) {\n      dstWidth = srcWidth;\n    }\n    if (dstHeight === undefined) {\n      dstHeight = srcHeight;\n    }\n    if (width === undefined) {\n      width = gl.canvas.width;\n    }\n    if (height === undefined) {\n      height = gl.canvas.height;\n    }\n\n    gl.bindTexture(gl.TEXTURE_2D, tex);\n\n    gl.useProgram(this.program_);\n\n    gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n    gl.enableVertexAttribArray(this.positionLocation);\n    gl.vertexAttribPointer(this.positionLocation, 2, gl.FLOAT, false, 0, 0);\n    gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffer);\n    gl.enableVertexAttribArray(this.texcoordLocation);\n    gl.vertexAttribPointer(this.texcoordLocation, 2, gl.FLOAT, false, 0, 0);\n\n    // matrix for converting pixels to clip space\n    let matrix = mat4.orthographic(0, width, 0, height, -1, 1);\n    matrix = mat4.translate(matrix, dstX, dstY, 0);\n    matrix = mat4.scale(matrix, dstWidth, dstHeight, 1);\n    gl.uniformMatrix4fv(this.matrixLocation, false, matrix);\n\n    let texMatrix = mat4.translation(srcX / texWidth, srcY / texHeight, 0);\n    texMatrix = mat4.scale(\n      texMatrix,\n      srcWidth / texWidth,\n      srcHeight / texHeight,\n      1,\n    );\n\n    gl.uniformMatrix4fv(this.textureMatrixLocation, false, texMatrix);\n    gl.uniform1i(this.textureLocation, 0);\n    gl.drawArrays(gl.TRIANGLES, 0, this.positions.length / 2);\n  }\n}\n\n/**\n * @param {WebGLRenderingContext} gl Rendering Context.\n * @param {GLenum} type Type of shader.\n * @param {string} source source of shader.\n * @return {WebGLShader} [progam] The program.\n */\nfunction createShader(gl, type, source) {\n  const shader = gl.createShader(type);\n\n  if (shader === null) {\n    throw new Error('Shader compilation failed');\n  }\n\n  gl.shaderSource(shader, source);\n\n  gl.compileShader(shader);\n  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n    const log = gl.getShaderInfoLog(shader);\n    if (log === null) {\n      throw new Error('Shader info log creation failed');\n    }\n    throw new Error(log);\n  }\n\n  return shader;\n}\n\n/**\n * @param {WebGLRenderingContext} gl Rendering Context.\n * @param {string} fragmentSource Fragment shader source.\n * @param {string} vertexSource Vertex shader source.\n * @return {WebGLProgram} [progam] The program.\n */\nexport function createProgram(gl, fragmentSource, vertexSource) {\n  const program = gl.createProgram();\n\n  const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexSource);\n  const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentSource);\n  if (program === null) {\n    throw new Error('Program creation failed');\n  }\n\n  gl.attachShader(program, vertexShader);\n  gl.attachShader(program, fragmentShader);\n\n  gl.linkProgram(program);\n  if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n    const log = gl.getProgramInfoLog(program);\n    if (log === null) {\n      throw new Error('Program info log creation failed');\n    }\n    throw new Error();\n  }\n  return program;\n}\n","/**\n * @module ol/webgl/ContextEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n  LOST: 'webglcontextlost',\n  RESTORED: 'webglcontextrestored',\n};\n","/**\n * @module ol/webgl/PostProcessingPass\n */\n\nimport {getUid} from '../util.js';\n\nconst DEFAULT_VERTEX_SHADER = `\n  precision mediump float;\n\n  attribute vec2 a_position;\n  varying vec2 v_texCoord;\n  varying vec2 v_screenCoord;\n\n  uniform vec2 u_screenSize;\n\n  void main() {\n    v_texCoord = a_position * 0.5 + 0.5;\n    v_screenCoord = v_texCoord * u_screenSize;\n    gl_Position = vec4(a_position, 0.0, 1.0);\n  }\n`;\n\nconst DEFAULT_FRAGMENT_SHADER = `\n  precision mediump float;\n\n  uniform sampler2D u_image;\n  uniform float u_opacity;\n\n  varying vec2 v_texCoord;\n\n  void main() {\n    gl_FragColor = texture2D(u_image, v_texCoord) * u_opacity;\n  }\n`;\n\n/**\n * @typedef {Object} Options\n * @property {WebGLRenderingContext} webGlContext WebGL context; mandatory.\n * @property {number} [scaleRatio] Scale ratio; if < 1, the post process will render to a texture smaller than\n * the main canvas that will then be sampled up (useful for saving resource on blur steps).\n * @property {string} [vertexShader] Vertex shader source\n * @property {string} [fragmentShader] Fragment shader source\n * @property {Object<string,import(\"./Helper.js\").UniformValue>} [uniforms] Uniform definitions for the post process step\n */\n\n/**\n * @typedef {Object} UniformInternalDescription\n * @property {import(\"./Helper.js\").UniformValue} value Value\n * @property {WebGLUniformLocation} location Location\n * @property {WebGLTexture} [texture] Texture\n * @private\n */\n\n/**\n * @classdesc\n * This class is used to define Post Processing passes with custom shaders and uniforms.\n * This is used internally by {@link module:ol/webgl/Helper~WebGLHelper}.\n *\n * Please note that the final output on the DOM canvas is expected to have premultiplied alpha, which means that\n * a pixel which is 100% red with an opacity of 50% must have a color of (r=0.5, g=0, b=0, a=0.5).\n * Failing to provide pixel colors with premultiplied alpha will result in render anomalies.\n *\n * The default post-processing pass does *not* multiply color values with alpha value, it expects color values to be\n * premultiplied.\n *\n * Default shaders are shown hereafter:\n *\n * Vertex shader:\n *\n *   ```\n *   precision mediump float;\n *\n *   attribute vec2 a_position;\n *   varying vec2 v_texCoord;\n *   varying vec2 v_screenCoord;\n *\n *   uniform vec2 u_screenSize;\n *\n *   void main() {\n *     v_texCoord = a_position * 0.5 + 0.5;\n *     v_screenCoord = v_texCoord * u_screenSize;\n *     gl_Position = vec4(a_position, 0.0, 1.0);\n *   }\n *   ```\n *\n * Fragment shader:\n *\n *   ```\n *   precision mediump float;\n *\n *   uniform sampler2D u_image;\n *   uniform float u_opacity;\n *\n *   varying vec2 v_texCoord;\n *\n *   void main() {\n *     gl_FragColor = texture2D(u_image, v_texCoord) * u_opacity;\n *   }\n *   ```\n */\nclass WebGLPostProcessingPass {\n  /**\n   * @param {Options} options Options.\n   */\n  constructor(options) {\n    /**\n     * @private\n     */\n    this.gl_ = options.webGlContext;\n    const gl = this.gl_;\n\n    /**\n     * @private\n     */\n    this.scaleRatio_ = options.scaleRatio || 1;\n\n    /**\n     * @type {WebGLTexture}\n     * @private\n     */\n    this.renderTargetTexture_ = gl.createTexture();\n\n    /**\n     * @type {import('../size.js').Size|null}\n     * @private\n     */\n    this.renderTargetTextureSize_ = null;\n\n    /**\n     * @private\n     */\n    this.frameBuffer_ = gl.createFramebuffer();\n    /**\n     * @private\n     */\n    this.depthBuffer_ = gl.createRenderbuffer();\n\n    // compile the program for the frame buffer\n    const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n    gl.shaderSource(\n      vertexShader,\n      options.vertexShader || DEFAULT_VERTEX_SHADER,\n    );\n    gl.compileShader(vertexShader);\n    const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n    gl.shaderSource(\n      fragmentShader,\n      options.fragmentShader || DEFAULT_FRAGMENT_SHADER,\n    );\n    gl.compileShader(fragmentShader);\n    if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n      const message = `Fragment shader compilation failed: ${gl.getShaderInfoLog(\n        fragmentShader,\n      )}`;\n      throw new Error(message);\n    }\n    /**\n     * @private\n     */\n    this.renderTargetProgram_ = gl.createProgram();\n    gl.attachShader(this.renderTargetProgram_, vertexShader);\n    gl.attachShader(this.renderTargetProgram_, fragmentShader);\n    gl.linkProgram(this.renderTargetProgram_);\n\n    // bind the vertices buffer for the frame buffer\n    /**\n     * @private\n     */\n    this.renderTargetVerticesBuffer_ = gl.createBuffer();\n    const verticesArray = [-1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1];\n    gl.bindBuffer(gl.ARRAY_BUFFER, this.renderTargetVerticesBuffer_);\n    gl.bufferData(\n      gl.ARRAY_BUFFER,\n      new Float32Array(verticesArray),\n      gl.STATIC_DRAW,\n    );\n\n    /**\n     * @private\n     */\n    this.renderTargetAttribLocation_ = gl.getAttribLocation(\n      this.renderTargetProgram_,\n      'a_position',\n    );\n    /**\n     * @private\n     */\n    this.renderTargetUniformLocation_ = gl.getUniformLocation(\n      this.renderTargetProgram_,\n      'u_screenSize',\n    );\n    /**\n     * @private\n     */\n    this.renderTargetOpacityLocation_ = gl.getUniformLocation(\n      this.renderTargetProgram_,\n      'u_opacity',\n    );\n    /**\n     * @private\n     */\n    this.renderTargetTextureLocation_ = gl.getUniformLocation(\n      this.renderTargetProgram_,\n      'u_image',\n    );\n\n    /**\n     * Holds info about custom uniforms used in the post processing pass\n     * @type {Array<UniformInternalDescription>}\n     * @private\n     */\n    this.uniforms_ = [];\n    options.uniforms &&\n      Object.keys(options.uniforms).forEach((name) => {\n        this.uniforms_.push({\n          value: options.uniforms[name],\n          location: gl.getUniformLocation(this.renderTargetProgram_, name),\n        });\n      });\n  }\n\n  getRenderTargetTexture() {\n    return this.renderTargetTexture_;\n  }\n\n  /**\n   * Get the WebGL rendering context\n   * @return {WebGLRenderingContext} The rendering context.\n   */\n  getGL() {\n    return this.gl_;\n  }\n\n  /**\n   * Initialize the render target texture of the post process, make sure it is at the\n   * right size and bind it as a render target for the next draw calls.\n   * The last step to be initialized will be the one where the primitives are rendered.\n   * @param {import(\"../Map.js\").FrameState} frameState current frame state\n   */\n  init(frameState) {\n    const gl = this.getGL();\n    const textureSize = [\n      gl.drawingBufferWidth * this.scaleRatio_,\n      gl.drawingBufferHeight * this.scaleRatio_,\n    ];\n\n    // rendering goes to my buffer\n    gl.bindFramebuffer(gl.FRAMEBUFFER, this.getFrameBuffer());\n    gl.bindRenderbuffer(gl.RENDERBUFFER, this.getDepthBuffer());\n    gl.viewport(0, 0, textureSize[0], textureSize[1]);\n\n    // if size has changed: adjust canvas & render target texture\n    if (\n      !this.renderTargetTextureSize_ ||\n      this.renderTargetTextureSize_[0] !== textureSize[0] ||\n      this.renderTargetTextureSize_[1] !== textureSize[1]\n    ) {\n      this.renderTargetTextureSize_ = textureSize;\n\n      // create a new texture\n      const level = 0;\n      const internalFormat = gl.RGBA;\n      const border = 0;\n      const format = gl.RGBA;\n      const type = gl.UNSIGNED_BYTE;\n      const data = null;\n      gl.bindTexture(gl.TEXTURE_2D, this.renderTargetTexture_);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        level,\n        internalFormat,\n        textureSize[0],\n        textureSize[1],\n        border,\n        format,\n        type,\n        data,\n      );\n\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\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\n      // bind the texture to the framebuffer\n      gl.framebufferTexture2D(\n        gl.FRAMEBUFFER,\n        gl.COLOR_ATTACHMENT0,\n        gl.TEXTURE_2D,\n        this.renderTargetTexture_,\n        0,\n      );\n\n      gl.renderbufferStorage(\n        gl.RENDERBUFFER,\n        gl.DEPTH_COMPONENT16,\n        textureSize[0],\n        textureSize[1],\n      );\n      gl.framebufferRenderbuffer(\n        gl.FRAMEBUFFER,\n        gl.DEPTH_ATTACHMENT,\n        gl.RENDERBUFFER,\n        this.depthBuffer_,\n      );\n    }\n  }\n\n  /**\n   * Render to the next postprocessing pass (or to the canvas if final pass).\n   * @param {import(\"../Map.js\").FrameState} frameState current frame state\n   * @param {WebGLPostProcessingPass} [nextPass] Next pass, optional\n   * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [preCompose] Called before composing.\n   * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [postCompose] Called before composing.\n   */\n  apply(frameState, nextPass, preCompose, postCompose) {\n    const gl = this.getGL();\n    const size = frameState.size;\n\n    gl.bindFramebuffer(\n      gl.FRAMEBUFFER,\n      nextPass ? nextPass.getFrameBuffer() : null,\n    );\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this.renderTargetTexture_);\n\n    if (!nextPass) {\n      // clear the canvas if we are the first to render to it\n      // and preserveDrawingBuffer is true\n      const canvasId = getUid(gl.canvas);\n      if (!frameState.renderTargets[canvasId]) {\n        const attributes = gl.getContextAttributes();\n        if (attributes && attributes.preserveDrawingBuffer) {\n          gl.clearColor(0.0, 0.0, 0.0, 0.0);\n          gl.clearDepth(1.0);\n          gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n        }\n\n        frameState.renderTargets[canvasId] = true;\n      }\n    }\n\n    gl.disable(gl.DEPTH_TEST);\n    gl.enable(gl.BLEND);\n    gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\n\n    gl.bindBuffer(gl.ARRAY_BUFFER, this.renderTargetVerticesBuffer_);\n\n    gl.useProgram(this.renderTargetProgram_);\n    gl.enableVertexAttribArray(this.renderTargetAttribLocation_);\n    gl.vertexAttribPointer(\n      this.renderTargetAttribLocation_,\n      2,\n      gl.FLOAT,\n      false,\n      0,\n      0,\n    );\n    gl.uniform2f(this.renderTargetUniformLocation_, size[0], size[1]);\n    gl.uniform1i(this.renderTargetTextureLocation_, 0);\n\n    const opacity = frameState.layerStatesArray[frameState.layerIndex].opacity;\n    gl.uniform1f(this.renderTargetOpacityLocation_, opacity);\n\n    this.applyUniforms(frameState);\n\n    if (preCompose) {\n      preCompose(gl, frameState);\n    }\n    gl.drawArrays(gl.TRIANGLES, 0, 6);\n    if (postCompose) {\n      postCompose(gl, frameState);\n    }\n  }\n\n  /**\n   * @return {WebGLFramebuffer} Frame buffer\n   */\n  getFrameBuffer() {\n    return this.frameBuffer_;\n  }\n\n  /**\n   * @return {WebGLRenderbuffer} Depth buffer\n   */\n  getDepthBuffer() {\n    return this.depthBuffer_;\n  }\n\n  /**\n   * Sets the custom uniforms based on what was given in the constructor.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @private\n   */\n  applyUniforms(frameState) {\n    const gl = this.getGL();\n\n    let value;\n    let textureSlot = 1;\n    this.uniforms_.forEach(function (uniform) {\n      value =\n        typeof uniform.value === 'function'\n          ? uniform.value(frameState)\n          : uniform.value;\n\n      // apply value based on type\n      if (value instanceof HTMLCanvasElement || value instanceof ImageData) {\n        // create a texture & put data\n        if (!uniform.texture) {\n          uniform.texture = gl.createTexture();\n        }\n        gl.activeTexture(gl[`TEXTURE${textureSlot}`]);\n        gl.bindTexture(gl.TEXTURE_2D, uniform.texture);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\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\n        if (value instanceof ImageData) {\n          gl.texImage2D(\n            gl.TEXTURE_2D,\n            0,\n            gl.RGBA,\n            gl.RGBA,\n            value.width,\n            value.height,\n            0,\n            gl.UNSIGNED_BYTE,\n            new Uint8Array(value.data),\n          );\n        } else {\n          gl.texImage2D(\n            gl.TEXTURE_2D,\n            0,\n            gl.RGBA,\n            gl.RGBA,\n            gl.UNSIGNED_BYTE,\n            value,\n          );\n        }\n\n        // fill texture slots\n        gl.uniform1i(uniform.location, textureSlot++);\n      } else if (Array.isArray(value)) {\n        switch (value.length) {\n          case 2:\n            gl.uniform2f(uniform.location, value[0], value[1]);\n            return;\n          case 3:\n            gl.uniform3f(uniform.location, value[0], value[1], value[2]);\n            return;\n          case 4:\n            gl.uniform4f(\n              uniform.location,\n              value[0],\n              value[1],\n              value[2],\n              value[3],\n            );\n            return;\n          case 16:\n            gl.uniformMatrix4fv(uniform.location, false, value);\n            return;\n          default:\n            return;\n        }\n      } else if (typeof value === 'number') {\n        gl.uniform1f(uniform.location, value);\n      }\n    });\n  }\n}\n\nexport default WebGLPostProcessingPass;\n","/**\n * @module ol/webgl/Helper\n */\nimport Disposable from '../Disposable.js';\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\nimport {compose as composeTransform} from '../transform.js';\nimport {getUid} from '../util.js';\nimport {create, fromTransform} from '../vec/mat4.js';\nimport {\n  FLOAT,\n  getContext,\n  UNSIGNED_BYTE,\n  UNSIGNED_INT,\n  UNSIGNED_SHORT,\n} from '../webgl.js';\nimport ContextEventType from '../webgl/ContextEventType.js';\nimport WebGLPostProcessingPass from './PostProcessingPass.js';\n\n/**\n * @typedef {Object} BufferCacheEntry\n * @property {import(\"./Buffer.js\").default} buffer Buffer.\n * @property {WebGLBuffer} webGlBuffer WebGlBuffer.\n */\n\n/**\n * Shader types, either `FRAGMENT_SHADER` or `VERTEX_SHADER`.\n * @enum {number}\n */\nexport const ShaderType = {\n  FRAGMENT_SHADER: 0x8b30,\n  VERTEX_SHADER: 0x8b31,\n};\n\n/**\n * Names of uniforms made available to all shaders.\n * Please note: changing these *will* break custom shaders!\n * @enum {string}\n */\nexport const DefaultUniform = {\n  PROJECTION_MATRIX: 'u_projectionMatrix',\n  INVERT_PROJECTION_MATRIX: 'u_invertProjectionMatrix',\n  TIME: 'u_time',\n  ZOOM: 'u_zoom',\n  RESOLUTION: 'u_resolution',\n  ROTATION: 'u_rotation',\n  VIEWPORT_SIZE_PX: 'u_viewportSizePx',\n  PIXEL_RATIO: 'u_pixelRatio',\n  HIT_DETECTION: 'u_hitDetection',\n};\n\n/**\n * Attribute types, either `UNSIGNED_BYTE`, `UNSIGNED_SHORT`, `UNSIGNED_INT` or `FLOAT`\n * Note: an attribute stored in a `Float32Array` should be of type `FLOAT`.\n * @enum {number}\n */\nexport const AttributeType = {\n  UNSIGNED_BYTE: UNSIGNED_BYTE,\n  UNSIGNED_SHORT: UNSIGNED_SHORT,\n  UNSIGNED_INT: UNSIGNED_INT,\n  FLOAT: FLOAT,\n};\n\n/**\n * Description of an attribute in a buffer\n * @typedef {Object} AttributeDescription\n * @property {string|null} name Attribute name to use in shaders; if null, this attribute will not be enabled and is simply used as padding in the buffers\n * @property {number} size Number of components per attributes\n * @property {AttributeType} [type] Attribute type, i.e. number of bytes used to store the value. This is\n * determined by the class of typed array which the buffer uses (eg. `Float32Array` for a `FLOAT` attribute).\n * Default is `FLOAT`.\n */\n\n/**\n * @typedef {number|Array<number>|HTMLCanvasElement|HTMLImageElement|ImageData|WebGLTexture|import(\"../transform.js\").Transform} UniformLiteralValue\n */\n\n/**\n * Uniform value can be a number, array of numbers (2 to 4), canvas element or a callback returning\n * one of the previous types.\n * @typedef {UniformLiteralValue|function(import(\"../Map.js\").FrameState):UniformLiteralValue} UniformValue\n */\n\n/**\n * @typedef {Object} PostProcessesOptions\n * @property {number} [scaleRatio] Scale ratio; if < 1, the post process will render to a texture smaller than\n * the main canvas which will then be sampled up (useful for saving resource on blur steps).\n * @property {string} [vertexShader] Vertex shader source\n * @property {string} [fragmentShader] Fragment shader source\n * @property {Object<string,UniformValue>} [uniforms] Uniform definitions for the post process step\n */\n\n/**\n * @typedef {Object} Options\n * @property {Object<string,UniformValue>} [uniforms] Uniform definitions; property names must match the uniform\n * names in the provided or default shaders.\n * @property {Array<PostProcessesOptions>} [postProcesses] Post-processes definitions\n * @property {string} [canvasCacheKey] The cache key for the canvas.\n */\n\n/**\n * @typedef {Object} UniformInternalDescription\n * @property {string} name Name\n * @property {UniformValue} [value] Value\n * @property {UniformValue} [prevValue] The previous value.\n * @property {WebGLTexture} [texture] Texture\n * @private\n */\n\n/**\n * @typedef {Object} CanvasCacheItem\n * @property {WebGLRenderingContext} context The context of this canvas.\n * @property {number} users The count of users of this canvas.\n */\n\n/**\n * @type {Object<string,CanvasCacheItem>}\n */\nconst canvasCache = {};\n\n/**\n * @param {string} key The cache key for the canvas.\n * @return {string} The shared cache key.\n */\nfunction getSharedCanvasCacheKey(key) {\n  return 'shared/' + key;\n}\n\nlet uniqueCanvasCacheKeyCount = 0;\n\n/**\n * @return {string} The unique cache key.\n */\nfunction getUniqueCanvasCacheKey() {\n  const key = 'unique/' + uniqueCanvasCacheKeyCount;\n  uniqueCanvasCacheKeyCount += 1;\n  return key;\n}\n\n/**\n * @param {string} key The cache key for the canvas.\n * @return {WebGLRenderingContext} The canvas.\n */\nfunction getOrCreateContext(key) {\n  let cacheItem = canvasCache[key];\n  if (!cacheItem) {\n    const canvas = document.createElement('canvas');\n    canvas.width = 1;\n    canvas.height = 1;\n    canvas.style.position = 'absolute';\n    canvas.style.left = '0';\n    const context = getContext(canvas);\n    cacheItem = {users: 0, context};\n    canvasCache[key] = cacheItem;\n  }\n\n  cacheItem.users += 1;\n  return cacheItem.context;\n}\n\n/**\n * @param {string} key The cache key for the canvas.\n */\nfunction releaseCanvas(key) {\n  const cacheItem = canvasCache[key];\n  if (!cacheItem) {\n    return;\n  }\n\n  cacheItem.users -= 1;\n  if (cacheItem.users > 0) {\n    return;\n  }\n\n  const gl = cacheItem.context;\n  const extension = gl.getExtension('WEBGL_lose_context');\n  if (extension) {\n    extension.loseContext();\n  }\n  const canvas = gl.canvas;\n  canvas.width = 1;\n  canvas.height = 1;\n\n  delete canvasCache[key];\n}\n\n/**\n * @classdesc\n * This class is intended to provide low-level functions related to WebGL rendering, so that accessing\n * directly the WebGL API should not be required anymore.\n *\n * Several operations are handled by the `WebGLHelper` class:\n *\n * ### Define custom shaders and uniforms\n *\n *   Shaders* are low-level programs executed on the GPU and written in GLSL. There are two types of shaders:\n *\n *   Vertex shaders are used to manipulate the position and attribute of *vertices* of rendered primitives (ie. corners of a square).\n *   Outputs are:\n *\n *   `gl_Position`: position of the vertex in screen space\n *\n *   Varyings usually prefixed with `v_` are passed on to the fragment shader\n *\n *   Fragment shaders are used to control the actual color of the pixels drawn on screen. Their only output is `gl_FragColor`.\n *\n *   Both shaders can take *uniforms* or *attributes* as input. Attributes are explained later. Uniforms are common, read-only values that\n *   can be changed at every frame and can be of type float, arrays of float or images.\n *\n *   Shaders must be compiled and assembled into a program like so:\n *   ```js\n *   // here we simply create two shaders and assemble them in a program which is then used\n *   // for subsequent rendering calls; note how a frameState is required to set up a program,\n *   // as several default uniforms are computed from it (projection matrix, zoom level, etc.)\n *   const vertexShader = new WebGLVertex(VERTEX_SHADER);\n *   const fragmentShader = new WebGLFragment(FRAGMENT_SHADER);\n *   const program = this.context.getProgram(fragmentShader, vertexShader);\n *   helper.useProgram(this.program, frameState);\n *   ```\n *\n *   Uniforms are defined using the `uniforms` option and can either be explicit values or callbacks taking the frame state as argument.\n *   You can also change their value along the way like so:\n *   ```js\n *   helper.setUniformFloatValue('u_value', valueAsNumber);\n *   ```\n *\n * ### Defining post processing passes\n *\n *   Post processing* describes the act of rendering primitives to a texture, and then rendering this texture to the final canvas\n *   while applying special effects in screen space.\n *   Typical uses are: blurring, color manipulation, depth of field, filtering...\n *\n *   The `WebGLHelper` class offers the possibility to define post processes at creation time using the `postProcesses` option.\n *   A post process step accepts the following options:\n *\n *   `fragmentShader` and `vertexShader`: text literals in GLSL language that will be compiled and used in the post processing step.\n *   `uniforms`: uniforms can be defined for the post processing steps just like for the main render.\n *   `scaleRatio`: allows using an intermediate texture smaller or higher than the final canvas in the post processing step.\n *     This is typically used in blur steps to reduce the performance overhead by using an already downsampled texture as input.\n *\n *   The {@link module:ol/webgl/PostProcessingPass~WebGLPostProcessingPass} class is used internally, refer to its documentation for more info.\n *\n * ### Binding WebGL buffers and flushing data into them\n *\n *   Data that must be passed to the GPU has to be transferred using {@link module:ol/webgl/Buffer~WebGLArrayBuffer} objects.\n *   A buffer has to be created only once, but must be bound every time the buffer content will be used for rendering.\n *   This is done using {@link bindBuffer}.\n *   When the buffer's array content has changed, the new data has to be flushed to the GPU memory; this is done using\n *   {@link flushBufferData}. Note: this operation is expensive and should be done as infrequently as possible.\n *\n *   When binding an array buffer, a `target` parameter must be given: it should be either {@link module:ol/webgl.ARRAY_BUFFER}\n *   (if the buffer contains vertices data) or {@link module:ol/webgl.ELEMENT_ARRAY_BUFFER} (if the buffer contains indices data).\n *\n *   Examples below:\n *   ```js\n *   // at initialization phase\n *   const verticesBuffer = new WebGLArrayBuffer([], DYNAMIC_DRAW);\n *   const indicesBuffer = new WebGLArrayBuffer([], DYNAMIC_DRAW);\n *\n *   // when array values have changed\n *   helper.flushBufferData(ARRAY_BUFFER, this.verticesBuffer);\n *   helper.flushBufferData(ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n *\n *   // at rendering phase\n *   helper.bindBuffer(ARRAY_BUFFER, this.verticesBuffer);\n *   helper.bindBuffer(ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n *   ```\n *\n * ### Specifying attributes\n *\n *   The GPU only receives the data as arrays of numbers. These numbers must be handled differently depending on what it describes (position, texture coordinate...).\n *   Attributes are used to specify these uses. Specify the attribute names with\n *   {@link module:ol/webgl/Helper~WebGLHelper#enableAttributes} (see code snippet below).\n *\n *   Please note that you will have to specify the type and offset of the attributes in the data array. You can refer to the documentation of [WebGLRenderingContext.vertexAttribPointer](https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer) for more explanation.\n *   ```js\n *   // here we indicate that the data array has the following structure:\n *   // [posX, posY, offsetX, offsetY, texCoordU, texCoordV, posX, posY, ...]\n *   helper.enableAttributes([\n *     {\n *        name: 'a_position',\n *        size: 2\n *     },\n *     {\n *       name: 'a_offset',\n *       size: 2\n *     },\n *     {\n *       name: 'a_texCoord',\n *       size: 2\n *     }\n *   ])\n *   ```\n *\n * ### Rendering primitives\n *\n *   Once all the steps above have been achieved, rendering primitives to the screen is done using {@link prepareDraw}, {@link drawElements} and {@link finalizeDraw}.\n *   ```js\n *   // frame preparation step\n *   helper.prepareDraw(frameState);\n *\n *   // call this for every data array that has to be rendered on screen\n *   helper.drawElements(0, this.indicesBuffer.getArray().length);\n *\n *   // finalize the rendering by applying post processes\n *   helper.finalizeDraw(frameState);\n *   ```\n *\n * For an example usage of this class, refer to {@link module:ol/renderer/webgl/PointsLayer~WebGLPointsLayerRenderer}.\n */\nclass WebGLHelper extends Disposable {\n  /**\n   * @param {Options} [options] Options.\n   */\n  constructor(options) {\n    super();\n    options = options || {};\n\n    /** @private */\n    this.boundHandleWebGLContextLost_ = this.handleWebGLContextLost.bind(this);\n\n    /** @private */\n    this.boundHandleWebGLContextRestored_ =\n      this.handleWebGLContextRestored.bind(this);\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.canvasCacheKey_ = options.canvasCacheKey\n      ? getSharedCanvasCacheKey(options.canvasCacheKey)\n      : getUniqueCanvasCacheKey();\n\n    /**\n     * @private\n     * @type {WebGLRenderingContext}\n     */\n    this.gl_ = getOrCreateContext(this.canvasCacheKey_);\n\n    /**\n     * @private\n     * @type {!Object<string, BufferCacheEntry>}\n     */\n    this.bufferCache_ = {};\n\n    /**\n     * @private\n     * @type {Object<string, Object>}\n     */\n    this.extensionCache_ = {};\n\n    /**\n     * @private\n     * @type {WebGLProgram}\n     */\n    this.currentProgram_ = null;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this.needsToBeRecreated_ = false;\n\n    const canvas = this.gl_.canvas;\n\n    canvas.addEventListener(\n      ContextEventType.LOST,\n      this.boundHandleWebGLContextLost_,\n    );\n    canvas.addEventListener(\n      ContextEventType.RESTORED,\n      this.boundHandleWebGLContextRestored_,\n    );\n\n    /**\n     * @private\n     * @type {Array<number>}\n     */\n    this.tmpMat4_ = create();\n\n    /**\n     * @private\n     * @type {Object<string, Object<string, WebGLUniformLocation>>}\n     */\n    this.uniformLocationsByProgram_ = {};\n\n    /**\n     * @private\n     * @type {Object<string, Object<string, number>>}\n     */\n    this.attribLocationsByProgram_ = {};\n\n    /**\n     * Holds info about custom uniforms used in the post processing pass.\n     * If the uniform is a texture, the WebGL Texture object will be stored here.\n     * @type {Array<UniformInternalDescription>}\n     * @private\n     */\n    this.uniforms_ = [];\n    if (options.uniforms) {\n      this.setUniforms(options.uniforms);\n    }\n\n    /**\n     * An array of PostProcessingPass objects is kept in this variable, built from the steps provided in the\n     * options. If no post process was given, a default one is used (so as not to have to make an exception to\n     * the frame buffer logic).\n     * @type {Array<WebGLPostProcessingPass>}\n     * @private\n     */\n    this.postProcessPasses_ = options.postProcesses?.length\n      ? options.postProcesses.map(\n          (options) =>\n            new WebGLPostProcessingPass({\n              webGlContext: this.gl_,\n              scaleRatio: options.scaleRatio,\n              vertexShader: options.vertexShader,\n              fragmentShader: options.fragmentShader,\n              uniforms: options.uniforms,\n            }),\n        )\n      : [new WebGLPostProcessingPass({webGlContext: this.gl_})];\n\n    /**\n     * @type {string|null}\n     * @private\n     */\n    this.shaderCompileErrors_ = null;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.startTime_ = Date.now();\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.maxAttributeCount_ = this.gl_.getParameter(\n      this.gl_.MAX_VERTEX_ATTRIBS,\n    );\n  }\n\n  /**\n   * @param {Object<string, UniformValue>} uniforms Uniform definitions.\n   */\n  setUniforms(uniforms) {\n    this.uniforms_ = [];\n    this.addUniforms(uniforms);\n  }\n\n  /**\n   * @param {Object<string, UniformValue>} uniforms Uniform definitions.\n   */\n  addUniforms(uniforms) {\n    for (const name in uniforms) {\n      this.uniforms_.push({\n        name: name,\n        value: uniforms[name],\n      });\n    }\n  }\n\n  /**\n   * @param {string} canvasCacheKey The canvas cache key.\n   * @return {boolean} The provided key matches the one this helper was constructed with.\n   */\n  canvasCacheKeyMatches(canvasCacheKey) {\n    return this.canvasCacheKey_ === getSharedCanvasCacheKey(canvasCacheKey);\n  }\n\n  /**\n   * Get a WebGL extension.  If the extension is not supported, null is returned.\n   * Extensions are cached after they are enabled for the first time.\n   * @param {string} name The extension name.\n   * @return {Object|null} The extension or null if not supported.\n   */\n  getExtension(name) {\n    if (name in this.extensionCache_) {\n      return this.extensionCache_[name];\n    }\n    const extension = this.gl_.getExtension(name);\n    this.extensionCache_[name] = extension;\n    return extension;\n  }\n\n  /**\n   * Will throw if the extension is not available\n   * @return {ANGLE_instanced_arrays} Extension\n   */\n  getInstancedRenderingExtension_() {\n    const ext = this.getExtension('ANGLE_instanced_arrays');\n    assert(\n      !!ext,\n      \"WebGL extension 'ANGLE_instanced_arrays' is required for vector rendering\",\n    );\n    return ext;\n  }\n\n  /**\n   * Just bind the buffer if it's in the cache. Otherwise create\n   * the WebGL buffer, bind it, populate it, and add an entry to\n   * the cache.\n   * @param {import(\"./Buffer.js\").default} buffer Buffer.\n   */\n  bindBuffer(buffer) {\n    const gl = this.gl_;\n    const bufferKey = getUid(buffer);\n    let bufferCache = this.bufferCache_[bufferKey];\n    if (!bufferCache) {\n      const webGlBuffer = gl.createBuffer();\n      bufferCache = {\n        buffer: buffer,\n        webGlBuffer: webGlBuffer,\n      };\n      this.bufferCache_[bufferKey] = bufferCache;\n    }\n    gl.bindBuffer(buffer.getType(), bufferCache.webGlBuffer);\n  }\n\n  /**\n   * Update the data contained in the buffer array; this is required for the\n   * new data to be rendered\n   * @param {import(\"./Buffer.js\").default} buffer Buffer.\n   */\n  flushBufferData(buffer) {\n    const gl = this.gl_;\n    this.bindBuffer(buffer);\n    gl.bufferData(buffer.getType(), buffer.getArray(), buffer.getUsage());\n  }\n\n  /**\n   * @param {import(\"./Buffer.js\").default} buf Buffer.\n   */\n  deleteBuffer(buf) {\n    const bufferKey = getUid(buf);\n    // Note: gl.deleteBuffer is not called here since we let WebGL garbage collect it automatically\n    delete this.bufferCache_[bufferKey];\n  }\n\n  /**\n   * Clean up.\n   * @override\n   */\n  disposeInternal() {\n    const canvas = this.gl_.canvas;\n    canvas.removeEventListener(\n      ContextEventType.LOST,\n      this.boundHandleWebGLContextLost_,\n    );\n    canvas.removeEventListener(\n      ContextEventType.RESTORED,\n      this.boundHandleWebGLContextRestored_,\n    );\n\n    releaseCanvas(this.canvasCacheKey_);\n\n    delete this.gl_;\n  }\n\n  /**\n   * Clear the buffer & set the viewport to draw.\n   * Post process passes will be initialized here, the first one being bound as a render target for\n   * subsequent draw calls.\n   * @param {import(\"../Map.js\").FrameState} frameState current frame state\n   * @param {boolean} [disableAlphaBlend] If true, no alpha blending will happen.\n   * @param {boolean} [enableDepth] If true, enables depth testing.\n   */\n  prepareDraw(frameState, disableAlphaBlend, enableDepth) {\n    const gl = this.gl_;\n    const canvas = this.getCanvas();\n    const size = frameState.size;\n    const pixelRatio = frameState.pixelRatio;\n\n    if (\n      canvas.width !== size[0] * pixelRatio ||\n      canvas.height !== size[1] * pixelRatio\n    ) {\n      canvas.width = size[0] * pixelRatio;\n      canvas.height = size[1] * pixelRatio;\n      canvas.style.width = size[0] + 'px';\n      canvas.style.height = size[1] + 'px';\n    }\n\n    // loop backwards in post processes list\n    for (let i = this.postProcessPasses_.length - 1; i >= 0; i--) {\n      this.postProcessPasses_[i].init(frameState);\n    }\n\n    gl.bindTexture(gl.TEXTURE_2D, null);\n\n    gl.clearColor(0.0, 0.0, 0.0, 0.0);\n    gl.depthRange(0.0, 1.0);\n    gl.clearDepth(1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n\n    gl.enable(gl.BLEND);\n    gl.blendFunc(gl.ONE, disableAlphaBlend ? gl.ZERO : gl.ONE_MINUS_SRC_ALPHA);\n    if (enableDepth) {\n      gl.enable(gl.DEPTH_TEST);\n      gl.depthFunc(gl.LEQUAL);\n    } else {\n      gl.disable(gl.DEPTH_TEST);\n    }\n  }\n\n  /**\n   * @param {WebGLFramebuffer|null} frameBuffer The frame buffer.\n   * @param {WebGLTexture} [texture] The texture.\n   */\n  bindFrameBuffer(frameBuffer, texture) {\n    const gl = this.getGL();\n    gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n    if (texture) {\n      gl.framebufferTexture2D(\n        gl.FRAMEBUFFER,\n        gl.COLOR_ATTACHMENT0,\n        gl.TEXTURE_2D,\n        texture,\n        0,\n      );\n    }\n  }\n\n  /**\n   * Bind the frame buffer from the initial render.\n   */\n  bindInitialFrameBuffer() {\n    const gl = this.getGL();\n    const frameBuffer = this.postProcessPasses_[0].getFrameBuffer();\n    gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer);\n    const texture = this.postProcessPasses_[0].getRenderTargetTexture();\n    gl.framebufferTexture2D(\n      gl.FRAMEBUFFER,\n      gl.COLOR_ATTACHMENT0,\n      gl.TEXTURE_2D,\n      texture,\n      0,\n    );\n  }\n\n  /**\n   * Prepare a program to use a texture.\n   * @param {WebGLTexture} texture The texture.\n   * @param {number} slot The texture slot.\n   * @param {string} uniformName The corresponding uniform name.\n   */\n  bindTexture(texture, slot, uniformName) {\n    const gl = this.gl_;\n    gl.activeTexture(gl.TEXTURE0 + slot);\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n    gl.uniform1i(this.getUniformLocation(uniformName), slot);\n  }\n\n  /**\n   * Set up an attribute array buffer for use in the vertex shader.\n   * @param {import(\"./Buffer.js\").default} buffer The buffer.\n   * @param {string} attributeName The attribute name.\n   * @param {number} size The number of components per attribute vertex.\n   */\n  bindAttribute(buffer, attributeName, size) {\n    const gl = this.getGL();\n    this.bindBuffer(buffer);\n    const index = this.getAttributeLocation(attributeName);\n    gl.enableVertexAttribArray(index);\n    gl.vertexAttribPointer(index, size, gl.FLOAT, false, 0, 0);\n  }\n\n  /**\n   * Clear the render target & bind it for future draw operations.\n   * This is similar to `prepareDraw`, only post processes will not be applied.\n   * Note: the whole viewport will be drawn to the render target, regardless of its size.\n   * @param {import(\"../Map.js\").FrameState} frameState current frame state\n   * @param {import(\"./RenderTarget.js\").default} renderTarget Render target to draw to\n   * @param {boolean} [disableAlphaBlend] If true, no alpha blending will happen.\n   * @param {boolean} [enableDepth] If true, enables depth testing.\n   */\n  prepareDrawToRenderTarget(\n    frameState,\n    renderTarget,\n    disableAlphaBlend,\n    enableDepth,\n  ) {\n    const gl = this.gl_;\n    const size = renderTarget.getSize();\n\n    gl.bindFramebuffer(gl.FRAMEBUFFER, renderTarget.getFramebuffer());\n    gl.bindRenderbuffer(gl.RENDERBUFFER, renderTarget.getDepthbuffer());\n    gl.viewport(0, 0, size[0], size[1]);\n    gl.bindTexture(gl.TEXTURE_2D, renderTarget.getTexture());\n    gl.clearColor(0.0, 0.0, 0.0, 0.0);\n    gl.depthRange(0.0, 1.0);\n    gl.clearDepth(1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n    gl.enable(gl.BLEND);\n    gl.blendFunc(gl.ONE, disableAlphaBlend ? gl.ZERO : gl.ONE_MINUS_SRC_ALPHA);\n    if (enableDepth) {\n      gl.enable(gl.DEPTH_TEST);\n      gl.depthFunc(gl.LEQUAL);\n    } else {\n      gl.disable(gl.DEPTH_TEST);\n    }\n  }\n\n  /**\n   * Execute a draw call based on the currently bound program, texture, buffers, attributes.\n   * @param {number} start Start index.\n   * @param {number} end End index.\n   */\n  drawElements(start, end) {\n    const gl = this.gl_;\n    this.getExtension('OES_element_index_uint');\n\n    const elementType = gl.UNSIGNED_INT;\n    const elementSize = 4;\n\n    const numItems = end - start;\n    const offsetInBytes = start * elementSize;\n    gl.drawElements(gl.TRIANGLES, numItems, elementType, offsetInBytes);\n  }\n\n  /**\n   * Execute a draw call similar to `drawElements`, but using instanced rendering.\n   * Will have no effect if `enableAttributesInstanced` was not called for this rendering pass.\n   * @param {number} start Start index.\n   * @param {number} end End index.\n   * @param {number} instanceCount The number of instances to render\n   */\n  drawElementsInstanced(start, end, instanceCount) {\n    const gl = this.gl_;\n    this.getExtension('OES_element_index_uint');\n    const ext = this.getInstancedRenderingExtension_();\n\n    const elementType = gl.UNSIGNED_INT;\n    const elementSize = 4;\n\n    const numItems = end - start;\n    const offsetInBytes = start * elementSize;\n    ext.drawElementsInstancedANGLE(\n      gl.TRIANGLES,\n      numItems,\n      elementType,\n      offsetInBytes,\n      instanceCount,\n    );\n\n    // reset divisor values to avoid side effects\n    for (let i = 0; i < this.maxAttributeCount_; i++) {\n      ext.vertexAttribDivisorANGLE(i, 0);\n    }\n  }\n\n  /**\n   * Apply the successive post process passes which will eventually render to the actual canvas.\n   * @param {import(\"../Map.js\").FrameState} frameState current frame state\n   * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [preCompose] Called before composing.\n   * @param {function(WebGLRenderingContext, import(\"../Map.js\").FrameState):void} [postCompose] Called before composing.\n   */\n  finalizeDraw(frameState, preCompose, postCompose) {\n    // apply post processes using the next one as target\n    for (let i = 0, ii = this.postProcessPasses_.length; i < ii; i++) {\n      if (i === ii - 1) {\n        this.postProcessPasses_[i].apply(\n          frameState,\n          null,\n          preCompose,\n          postCompose,\n        );\n      } else {\n        this.postProcessPasses_[i].apply(\n          frameState,\n          this.postProcessPasses_[i + 1],\n        );\n      }\n    }\n  }\n\n  /**\n   * @return {HTMLCanvasElement} Canvas.\n   */\n  getCanvas() {\n    return /** @type {HTMLCanvasElement} */ (this.gl_.canvas);\n  }\n\n  /**\n   * Get the WebGL rendering context\n   * @return {WebGLRenderingContext} The rendering context.\n   */\n  getGL() {\n    return this.gl_;\n  }\n\n  /**\n   * Sets the default matrix uniforms for a given frame state. This is called internally in `prepareDraw`.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   */\n  applyFrameState(frameState) {\n    const size = frameState.size;\n    const rotation = frameState.viewState.rotation;\n    const pixelRatio = frameState.pixelRatio;\n\n    this.setUniformFloatValue(\n      DefaultUniform.TIME,\n      (Date.now() - this.startTime_) * 0.001,\n    );\n    this.setUniformFloatValue(DefaultUniform.ZOOM, frameState.viewState.zoom);\n    this.setUniformFloatValue(\n      DefaultUniform.RESOLUTION,\n      frameState.viewState.resolution,\n    );\n    this.setUniformFloatValue(DefaultUniform.PIXEL_RATIO, pixelRatio);\n    this.setUniformFloatVec2(DefaultUniform.VIEWPORT_SIZE_PX, [\n      size[0],\n      size[1],\n    ]);\n    this.setUniformFloatValue(DefaultUniform.ROTATION, rotation);\n  }\n\n  /**\n   * Sets the `u_hitDetection` uniform.\n   * @param {boolean} enabled Whether to enable the hit detection code path\n   */\n  applyHitDetectionUniform(enabled) {\n    const loc = this.getUniformLocation(DefaultUniform.HIT_DETECTION);\n    this.getGL().uniform1i(loc, enabled ? 1 : 0);\n\n    // hit detection uses a fixed pixel ratio\n    if (enabled) {\n      this.setUniformFloatValue(DefaultUniform.PIXEL_RATIO, 0.5);\n    }\n  }\n\n  /**\n   * Sets the custom uniforms based on what was given in the constructor. This is called internally in `prepareDraw`.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   */\n  applyUniforms(frameState) {\n    const gl = this.gl_;\n\n    let value;\n    let textureSlot = 0;\n    this.uniforms_.forEach((uniform) => {\n      value =\n        typeof uniform.value === 'function'\n          ? uniform.value(frameState)\n          : uniform.value;\n\n      // apply value based on type\n      if (\n        value instanceof HTMLCanvasElement ||\n        value instanceof HTMLImageElement ||\n        value instanceof ImageData ||\n        value instanceof WebGLTexture\n      ) {\n        // create a texture & put data\n        if (value instanceof WebGLTexture && !uniform.texture) {\n          uniform.prevValue = undefined;\n          uniform.texture = value;\n        } else if (!uniform.texture) {\n          uniform.prevValue = undefined;\n          uniform.texture = gl.createTexture();\n        }\n        this.bindTexture(uniform.texture, textureSlot, uniform.name);\n        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\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\n        const imageReady =\n          !(value instanceof HTMLImageElement) ||\n          /** @type {HTMLImageElement} */ (value).complete;\n        if (\n          !(value instanceof WebGLTexture) &&\n          imageReady &&\n          uniform.prevValue !== value\n        ) {\n          uniform.prevValue = value;\n          gl.texImage2D(\n            gl.TEXTURE_2D,\n            0,\n            gl.RGBA,\n            gl.RGBA,\n            gl.UNSIGNED_BYTE,\n            value,\n          );\n        }\n        textureSlot++;\n      } else if (Array.isArray(value) && value.length === 6) {\n        this.setUniformMatrixValue(\n          uniform.name,\n          fromTransform(this.tmpMat4_, value),\n        );\n      } else if (Array.isArray(value) && value.length <= 4) {\n        switch (value.length) {\n          case 2:\n            gl.uniform2f(\n              this.getUniformLocation(uniform.name),\n              value[0],\n              value[1],\n            );\n            return;\n          case 3:\n            gl.uniform3f(\n              this.getUniformLocation(uniform.name),\n              value[0],\n              value[1],\n              value[2],\n            );\n            return;\n          case 4:\n            gl.uniform4f(\n              this.getUniformLocation(uniform.name),\n              value[0],\n              value[1],\n              value[2],\n              value[3],\n            );\n            return;\n          default:\n            return;\n        }\n      } else if (typeof value === 'number') {\n        gl.uniform1f(this.getUniformLocation(uniform.name), value);\n      }\n    });\n  }\n\n  /**\n   * Set up a program for use. The program will be set as the current one. Then, the uniforms used\n   * in the program will be set based on the current frame state and the helper configuration.\n   * @param {WebGLProgram} program Program.\n   * @param {import(\"../Map.js\").FrameState} [frameState] Frame state.\n   */\n  useProgram(program, frameState) {\n    this.disableAllAttributes_();\n    const gl = this.gl_;\n    gl.useProgram(program);\n    this.currentProgram_ = program;\n    if (frameState) {\n      this.applyFrameState(frameState);\n      this.applyUniforms(frameState);\n    }\n  }\n\n  /**\n   * Will attempt to compile a vertex or fragment shader based on source\n   * On error, the shader will be returned but\n   * `gl.getShaderParameter(shader, gl.COMPILE_STATUS)` will return `true`\n   * Use `gl.getShaderInfoLog(shader)` to have details\n   * @param {string} source Shader source\n   * @param {ShaderType} type VERTEX_SHADER or FRAGMENT_SHADER\n   * @return {WebGLShader} Shader object\n   */\n  compileShader(source, type) {\n    const gl = this.gl_;\n    const shader = gl.createShader(type);\n    gl.shaderSource(shader, source);\n    gl.compileShader(shader);\n    return shader;\n  }\n\n  /**\n   * Create a program for a vertex and fragment shader.  Throws if shader compilation fails.\n   * @param {string} fragmentShaderSource Fragment shader source.\n   * @param {string} vertexShaderSource Vertex shader source.\n   * @return {WebGLProgram} Program\n   */\n  getProgram(fragmentShaderSource, vertexShaderSource) {\n    const gl = this.gl_;\n\n    const fragmentShader = this.compileShader(\n      fragmentShaderSource,\n      gl.FRAGMENT_SHADER,\n    );\n\n    const vertexShader = this.compileShader(\n      vertexShaderSource,\n      gl.VERTEX_SHADER,\n    );\n\n    const program = gl.createProgram();\n    gl.attachShader(program, fragmentShader);\n    gl.attachShader(program, vertexShader);\n    gl.linkProgram(program);\n\n    if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n      const message = `Fragment shader compilation failed: ${gl.getShaderInfoLog(\n        fragmentShader,\n      )}`;\n      throw new Error(message);\n    }\n    gl.deleteShader(fragmentShader);\n\n    if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n      const message = `Vertex shader compilation failed: ${gl.getShaderInfoLog(\n        vertexShader,\n      )}`;\n      throw new Error(message);\n    }\n    gl.deleteShader(vertexShader);\n\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n      const message = `GL program linking failed: ${gl.getProgramInfoLog(\n        program,\n      )}`;\n      throw new Error(message);\n    }\n\n    return program;\n  }\n\n  /**\n   * Will get the location from the shader or the cache\n   * @param {string} name Uniform name\n   * @return {WebGLUniformLocation} uniformLocation\n   */\n  getUniformLocation(name) {\n    const programUid = getUid(this.currentProgram_);\n    if (this.uniformLocationsByProgram_[programUid] === undefined) {\n      this.uniformLocationsByProgram_[programUid] = {};\n    }\n    if (this.uniformLocationsByProgram_[programUid][name] === undefined) {\n      this.uniformLocationsByProgram_[programUid][name] =\n        this.gl_.getUniformLocation(this.currentProgram_, name);\n    }\n    return this.uniformLocationsByProgram_[programUid][name];\n  }\n\n  /**\n   * Will get the location from the shader or the cache\n   * @param {string} name Attribute name\n   * @return {number} attribLocation\n   */\n  getAttributeLocation(name) {\n    const programUid = getUid(this.currentProgram_);\n    if (this.attribLocationsByProgram_[programUid] === undefined) {\n      this.attribLocationsByProgram_[programUid] = {};\n    }\n    if (this.attribLocationsByProgram_[programUid][name] === undefined) {\n      this.attribLocationsByProgram_[programUid][name] =\n        this.gl_.getAttribLocation(this.currentProgram_, name);\n    }\n    return this.attribLocationsByProgram_[programUid][name];\n  }\n\n  /**\n   * Sets the given transform to apply the rotation/translation/scaling of the given frame state.\n   * The resulting transform can be used to convert world space coordinates to view coordinates in the [-1, 1] range.\n   * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n   * @param {import(\"../transform.js\").Transform} transform Transform to update.\n   * @param {boolean} [ignoreRotation] If true, view rotation will not be added to the transform\n   * @return {import(\"../transform.js\").Transform} The updated transform object.\n   */\n  makeProjectionTransform(frameState, transform, ignoreRotation) {\n    const size = frameState.size;\n    const rotation = ignoreRotation ? 0 : frameState.viewState.rotation;\n    const resolution = frameState.viewState.resolution;\n    const center = frameState.viewState.center;\n    composeTransform(\n      transform,\n      0,\n      0,\n      2 / (resolution * size[0]),\n      2 / (resolution * size[1]),\n      -rotation,\n      -center[0],\n      -center[1],\n    );\n    return transform;\n  }\n\n  /**\n   * Give a value for a standard float uniform\n   * @param {string} uniform Uniform name\n   * @param {number} value Value\n   */\n  setUniformFloatValue(uniform, value) {\n    this.gl_.uniform1f(this.getUniformLocation(uniform), value);\n  }\n\n  /**\n   * Give a value for a vec2 uniform\n   * @param {string} uniform Uniform name\n   * @param {Array<number>} value Array of length 4.\n   */\n  setUniformFloatVec2(uniform, value) {\n    this.gl_.uniform2fv(this.getUniformLocation(uniform), value);\n  }\n\n  /**\n   * Give a value for a vec4 uniform\n   * @param {string} uniform Uniform name\n   * @param {Array<number>} value Array of length 4.\n   */\n  setUniformFloatVec4(uniform, value) {\n    this.gl_.uniform4fv(this.getUniformLocation(uniform), value);\n  }\n\n  /**\n   * Give a value for a standard matrix4 uniform\n   * @param {string} uniform Uniform name\n   * @param {Array<number>} value Matrix value\n   */\n  setUniformMatrixValue(uniform, value) {\n    this.gl_.uniformMatrix4fv(this.getUniformLocation(uniform), false, value);\n  }\n\n  /**\n   * Disable all vertex attributes.\n   * @private\n   */\n  disableAllAttributes_() {\n    for (let i = 0; i < this.maxAttributeCount_; i++) {\n      this.gl_.disableVertexAttribArray(i);\n    }\n  }\n\n  /**\n   * Will set the currently bound buffer to an attribute of the shader program. Used by `#enableAttributes`\n   * internally.\n   * @param {string} attribName Attribute name\n   * @param {number} size Number of components per attributes\n   * @param {number} type UNSIGNED_INT, UNSIGNED_BYTE, UNSIGNED_SHORT or FLOAT\n   * @param {number} stride Stride in bytes (0 means attribs are packed)\n   * @param {number} offset Offset in bytes\n   * @param {boolean} instanced Whether the attribute is used for instanced rendering\n   * @private\n   */\n  enableAttributeArray_(attribName, size, type, stride, offset, instanced) {\n    const location = this.getAttributeLocation(attribName);\n    // the attribute has not been found in the shaders or is not used; do not enable it\n    if (location < 0) {\n      return;\n    }\n    this.gl_.enableVertexAttribArray(location);\n    this.gl_.vertexAttribPointer(location, size, type, false, stride, offset);\n    if (instanced) {\n      // note: this is reset to 0 after drawElementsInstanced is called\n      this.getInstancedRenderingExtension_().vertexAttribDivisorANGLE(\n        location,\n        1,\n      );\n    }\n  }\n\n  /**\n   * @private\n   * @param {Array<AttributeDescription>} attributes Ordered list of attributes to read from the buffer\n   * @param {boolean} instanced Whether the attributes are instanced.\n   */\n  enableAttributes_(attributes, instanced) {\n    const stride = computeAttributesStride(attributes);\n    let offset = 0;\n    for (let i = 0; i < attributes.length; i++) {\n      const attr = attributes[i];\n      // if a name is not given, simply skip this slot in the buffer\n      if (attr.name) {\n        this.enableAttributeArray_(\n          attr.name,\n          attr.size,\n          attr.type || FLOAT,\n          stride,\n          offset,\n          instanced,\n        );\n      }\n      offset += attr.size * getByteSizeFromType(attr.type);\n    }\n  }\n\n  /**\n   * Will enable the following attributes to be read from the currently bound buffer,\n   * i.e. tell the GPU where to read the different attributes in the buffer. An error in the\n   * size/type/order of attributes will most likely break the rendering and throw a WebGL exception.\n   * @param {Array<AttributeDescription>} attributes Ordered list of attributes to read from the buffer\n   */\n  enableAttributes(attributes) {\n    this.enableAttributes_(attributes, false);\n  }\n\n  /**\n   * Will enable these attributes as instanced, meaning that they will only be read\n   * once per instance instead of per vertex.\n   * @param {Array<AttributeDescription>} attributes Ordered list of attributes to read from the buffer\n   */\n  enableAttributesInstanced(attributes) {\n    this.enableAttributes_(attributes, true);\n  }\n\n  /**\n   * WebGL context was lost\n   * @param {WebGLContextEvent} event The context loss event.\n   * @private\n   */\n  handleWebGLContextLost(event) {\n    clear(this.bufferCache_);\n    this.currentProgram_ = null;\n\n    event.preventDefault();\n  }\n\n  /**\n   * WebGL context was restored\n   * @private\n   */\n  handleWebGLContextRestored() {\n    this.needsToBeRecreated_ = true;\n  }\n\n  /**\n   * Returns whether this helper needs to be recreated, as the context was lost and then restored.\n   * @return {boolean} Whether this helper needs to be recreated.\n   */\n  needsToBeRecreated() {\n    return this.needsToBeRecreated_;\n  }\n\n  /**\n   * Will create or reuse a given webgl texture and apply the given size. If no image data\n   * specified, the texture will be empty, otherwise image data will be used and the `size`\n   * parameter will be ignored.  If a Uint8Array is provided for data, a size must also be provided.\n   * Note: wrap parameters are set to clamp to edge, min filter is set to linear.\n   * @param {Array<number>} size Expected size of the texture\n   * @param {ImageData|HTMLImageElement|HTMLCanvasElement|Uint8Array|null} data Image data/object to bind to the texture\n   * @param {WebGLTexture} [texture] Existing texture to reuse\n   * @param {boolean} [nearest] Use gl.NEAREST for min/mag filter.\n   * @return {WebGLTexture} The generated texture\n   */\n  createTexture(size, data, texture, nearest) {\n    const gl = this.gl_;\n    texture = texture || gl.createTexture();\n    const filter = nearest ? gl.NEAREST : gl.LINEAR;\n\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);\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\n    const level = 0;\n    const internalFormat = gl.RGBA;\n    const border = 0;\n    const format = gl.RGBA;\n    const type = gl.UNSIGNED_BYTE;\n\n    if (data instanceof Uint8Array) {\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        level,\n        internalFormat,\n        size[0],\n        size[1],\n        border,\n        format,\n        type,\n        data,\n      );\n    } else if (data) {\n      gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, format, type, data);\n    } else {\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        level,\n        internalFormat,\n        size[0],\n        size[1],\n        border,\n        format,\n        type,\n        null,\n      );\n    }\n    return texture;\n  }\n}\n\n/**\n * Compute a stride in bytes based on a list of attributes\n * @param {Array<AttributeDescription>} attributes Ordered list of attributes\n * @return {number} Stride, ie amount of values for each vertex in the vertex buffer\n */\nexport function computeAttributesStride(attributes) {\n  let stride = 0;\n  for (let i = 0; i < attributes.length; i++) {\n    const attr = attributes[i];\n    stride += attr.size * getByteSizeFromType(attr.type);\n  }\n  return stride;\n}\n\n/**\n * Computes the size in byte of an attribute type.\n * @param {AttributeType} type Attribute type\n * @return {number} The size in bytes\n */\nfunction getByteSizeFromType(type) {\n  switch (type) {\n    case AttributeType.UNSIGNED_BYTE:\n      return Uint8Array.BYTES_PER_ELEMENT;\n    case AttributeType.UNSIGNED_SHORT:\n      return Uint16Array.BYTES_PER_ELEMENT;\n    case AttributeType.UNSIGNED_INT:\n      return Uint32Array.BYTES_PER_ELEMENT;\n    case AttributeType.FLOAT:\n    default:\n      return Float32Array.BYTES_PER_ELEMENT;\n  }\n}\n\nexport default WebGLHelper;\n","/**\n * @module ol/xml\n */\nimport {extend} from './array.js';\n\n/**\n * When using {@link module:ol/xml.makeChildAppender} or\n * {@link module:ol/xml.makeSimpleNodeFactory}, the top `objectStack` item needs\n * to have this structure.\n * @typedef {Object} NodeStackItem\n * @property {Element} node Node.\n */\n\n/**\n * @typedef {function(Element, Array<*>): void} Parser\n */\n\n/**\n * @typedef {function(Element, *, Array<*>): void} Serializer\n */\n\n/**\n * @type {string}\n */\nexport const XML_SCHEMA_INSTANCE_URI =\n  'http://www.w3.org/2001/XMLSchema-instance';\n\n/**\n * @param {string} namespaceURI Namespace URI.\n * @param {string} qualifiedName Qualified name.\n * @return {Element} Node.\n */\nexport function createElementNS(namespaceURI, qualifiedName) {\n  return getDocument().createElementNS(namespaceURI, qualifiedName);\n}\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @return {string} All text content.\n * @api\n */\nexport function getAllTextContent(node, normalizeWhitespace) {\n  return getAllTextContent_(node, normalizeWhitespace, []).join('');\n}\n\n/**\n * Recursively grab all text content of child nodes into a single string.\n * @param {Node} node Node.\n * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line\n * breaks.\n * @param {Array<string>} accumulator Accumulator.\n * @private\n * @return {Array<string>} Accumulator.\n */\nexport function getAllTextContent_(node, normalizeWhitespace, accumulator) {\n  if (\n    node.nodeType == Node.CDATA_SECTION_NODE ||\n    node.nodeType == Node.TEXT_NODE\n  ) {\n    if (normalizeWhitespace) {\n      accumulator.push(String(node.nodeValue).replace(/(\\r\\n|\\r|\\n)/g, ''));\n    } else {\n      accumulator.push(node.nodeValue);\n    }\n  } else {\n    let n;\n    for (n = node.firstChild; n; n = n.nextSibling) {\n      getAllTextContent_(n, normalizeWhitespace, accumulator);\n    }\n  }\n  return accumulator;\n}\n\n/**\n * @param {Object} object Object.\n * @return {boolean} Is a document.\n */\nexport function isDocument(object) {\n  return 'documentElement' in object;\n}\n\n/**\n * @param {Element} node Node.\n * @param {?string} namespaceURI Namespace URI.\n * @param {string} name Attribute name.\n * @return {string} Value\n */\nexport function getAttributeNS(node, namespaceURI, name) {\n  return node.getAttributeNS(namespaceURI, name) || '';\n}\n\n/**\n * Parse an XML string to an XML Document.\n * @param {string} xml XML.\n * @return {Document} Document.\n * @api\n */\nexport function parse(xml) {\n  return new DOMParser().parseFromString(xml, 'application/xml');\n}\n\n/**\n * Make an array extender function for extending the array at the top of the\n * object stack.\n * @param {function(this: T, Node, Array<*>): (Array<*>|undefined)} valueReader Value reader.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayExtender(valueReader, thisArg) {\n  return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     * @this {*}\n     */\n    function (node, objectStack) {\n      const value = valueReader.call(thisArg ?? this, node, objectStack);\n      if (value !== undefined) {\n        const array = /** @type {Array<*>} */ (\n          objectStack[objectStack.length - 1]\n        );\n        extend(array, value);\n      }\n    }\n  );\n}\n\n/**\n * Make an array pusher function for pushing to the array at the top of the\n * object stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeArrayPusher(valueReader, thisArg) {\n  return (\n    /**\n     * @param {Element} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     * @this {*}\n     */\n    function (node, objectStack) {\n      const value = valueReader.call(thisArg ?? this, node, objectStack);\n      if (value !== undefined) {\n        const array = /** @type {Array<*>} */ (\n          objectStack[objectStack.length - 1]\n        );\n        array.push(value);\n      }\n    }\n  );\n}\n\n/**\n * Make an object stack replacer function for replacing the object at the\n * top of the stack.\n * @param {function(this: T, Node, Array<*>): *} valueReader Value reader.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeReplacer(valueReader, thisArg) {\n  return (\n    /**\n     * @param {Node} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     * @this {*}\n     */\n    function (node, objectStack) {\n      const value = valueReader.call(thisArg ?? this, node, objectStack);\n      if (value !== undefined) {\n        objectStack[objectStack.length - 1] = value;\n      }\n    }\n  );\n}\n\n/**\n * Make an object property pusher function for adding a property to the\n * object at the top of the stack.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [property] Property.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertyPusher(valueReader, property, thisArg) {\n  return (\n    /**\n     * @param {Element} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     * @this {*}\n     */\n    function (node, objectStack) {\n      const value = valueReader.call(thisArg ?? this, node, objectStack);\n      if (value !== undefined) {\n        const object = /** @type {!Object} */ (\n          objectStack[objectStack.length - 1]\n        );\n        const name = property !== undefined ? property : node.localName;\n        let array;\n        if (name in object) {\n          array = object[name];\n        } else {\n          array = [];\n          object[name] = array;\n        }\n        array.push(value);\n      }\n    }\n  );\n}\n\n/**\n * Make an object property setter function.\n * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.\n * @param {string} [property] Property.\n * @param {T} [thisArg] The object to use as `this` in `valueReader`.\n * @return {Parser} Parser.\n * @template T\n */\nexport function makeObjectPropertySetter(valueReader, property, thisArg) {\n  return (\n    /**\n     * @param {Element} node Node.\n     * @param {Array<*>} objectStack Object stack.\n     * @this {*}\n     */\n    function (node, objectStack) {\n      const value = valueReader.call(thisArg ?? this, node, objectStack);\n      if (value !== undefined) {\n        const object = /** @type {!Object} */ (\n          objectStack[objectStack.length - 1]\n        );\n        const name = property !== undefined ? property : node.localName;\n        object[name] = value;\n      }\n    }\n  );\n}\n\n/**\n * Create a serializer that appends nodes written by its `nodeWriter` to its\n * designated parent. The parent is the `node` of the\n * {@link module:ol/xml~NodeStackItem} at the top of the `objectStack`.\n * @param {function(this: T, Node, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [thisArg] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeChildAppender(nodeWriter, thisArg) {\n  return (\n    /**\n     * @param {Element} node Node.\n     * @param {*} value Value to be written.\n     * @param {Array<*>} objectStack Object stack.\n     * @this {*}\n     */\n    function (node, value, objectStack) {\n      nodeWriter.call(thisArg ?? this, node, value, objectStack);\n      const parent = /** @type {NodeStackItem} */ (\n        objectStack[objectStack.length - 1]\n      );\n      const parentNode = parent.node;\n      parentNode.appendChild(node);\n    }\n  );\n}\n\n/**\n * Create a serializer that calls the provided `nodeWriter` from\n * {@link module:ol/xml.serialize}. This can be used by the parent writer to have the\n * `nodeWriter` called with an array of values when the `nodeWriter` was\n * designed to serialize a single item. An example would be a LineString\n * geometry writer, which could be reused for writing MultiLineString\n * geometries.\n * @param {function(this: T, Element, V, Array<*>): void} nodeWriter Node writer.\n * @param {T} [thisArg] The object to use as `this` in `nodeWriter`.\n * @return {Serializer} Serializer.\n * @template T, V\n */\nexport function makeArraySerializer(nodeWriter, thisArg) {\n  let serializersNS, nodeFactory;\n  return function (node, value, objectStack) {\n    if (serializersNS === undefined) {\n      serializersNS = {};\n      const serializers = {};\n      serializers[node.localName] = nodeWriter;\n      serializersNS[node.namespaceURI] = serializers;\n      nodeFactory = makeSimpleNodeFactory(node.localName);\n    }\n    serialize(serializersNS, nodeFactory, value, objectStack);\n  };\n}\n\n/**\n * Create a node factory which can use the `keys` passed to\n * {@link module:ol/xml.serialize} or {@link module:ol/xml.pushSerializeAndPop} as node names,\n * or a fixed node name. The namespace of the created nodes can either be fixed,\n * or the parent namespace will be used.\n * @param {string} [fixedNodeName] Fixed node name which will be used for all\n *     created nodes. If not provided, the 3rd argument to the resulting node\n *     factory needs to be provided and will be the nodeName.\n * @param {string} [fixedNamespaceURI] Fixed namespace URI which will be used for\n *     all created nodes. If not provided, the namespace of the parent node will\n *     be used.\n * @return {function(*, Array<*>, string=): (Node|undefined)} Node factory.\n */\nexport function makeSimpleNodeFactory(fixedNodeName, fixedNamespaceURI) {\n  return (\n    /**\n     * @param {*} value Value.\n     * @param {Array<*>} objectStack Object stack.\n     * @param {string} [newNodeName] Node name.\n     * @return {Node} Node.\n     */\n    function (value, objectStack, newNodeName) {\n      const context = /** @type {NodeStackItem} */ (\n        objectStack[objectStack.length - 1]\n      );\n      const node = context.node;\n      let nodeName = fixedNodeName;\n      if (nodeName === undefined) {\n        nodeName = newNodeName;\n      }\n\n      const namespaceURI =\n        fixedNamespaceURI !== undefined ? fixedNamespaceURI : node.namespaceURI;\n      return createElementNS(namespaceURI, /** @type {string} */ (nodeName));\n    }\n  );\n}\n\n/**\n * A node factory that creates a node using the parent's `namespaceURI` and the\n * `nodeName` passed by {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop} to the node factory.\n * @const\n * @type {function(*, Array<*>, string=): (Node|undefined)}\n */\nexport const OBJECT_PROPERTY_NODE_FACTORY = makeSimpleNodeFactory();\n\n/**\n * Create an array of `values` to be used with {@link module:ol/xml.serialize} or\n * {@link module:ol/xml.pushSerializeAndPop}, where `orderedKeys` has to be provided as\n * `key` argument.\n * @param {Object<string, *>} object Key-value pairs for the sequence. Keys can\n *     be a subset of the `orderedKeys`.\n * @param {Array<string>} orderedKeys Keys in the order of the sequence.\n * @return {Array<*>} Values in the order of the sequence. The resulting array\n *     has the same length as the `orderedKeys` array. Values that are not\n *     present in `object` will be `undefined` in the resulting array.\n */\nexport function makeSequence(object, orderedKeys) {\n  const length = orderedKeys.length;\n  const sequence = new Array(length);\n  for (let i = 0; i < length; ++i) {\n    sequence[i] = object[orderedKeys[i]];\n  }\n  return sequence;\n}\n\n/**\n * Create a namespaced structure, using the same values for each namespace.\n * This can be used as a starting point for versioned parsers, when only a few\n * values are version specific.\n * @param {Array<string>} namespaceURIs Namespace URIs.\n * @param {T} structure Structure.\n * @param {Object<string, T>} [structureNS] Namespaced structure to add to.\n * @return {Object<string, T>} Namespaced structure.\n * @template T\n */\nexport function makeStructureNS(namespaceURIs, structure, structureNS) {\n  structureNS = structureNS !== undefined ? structureNS : {};\n  let i, ii;\n  for (i = 0, ii = namespaceURIs.length; i < ii; ++i) {\n    structureNS[namespaceURIs[i]] = structure;\n  }\n  return structureNS;\n}\n\n/**\n * Parse a node using the parsers and object stack.\n * @param {Object<string, Object<string, Parser>>} parsersNS\n *     Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [thisArg] The object to use as `this`.\n */\nexport function parseNode(parsersNS, node, objectStack, thisArg) {\n  let n;\n  for (n = node.firstElementChild; n; n = n.nextElementSibling) {\n    const parsers = parsersNS[n.namespaceURI];\n    if (parsers !== undefined) {\n      const parser = parsers[n.localName];\n      if (parser !== undefined) {\n        parser.call(thisArg, n, objectStack);\n      }\n    }\n  }\n}\n\n/**\n * Push an object on top of the stack, parse and return the popped object.\n * @param {T} object Object.\n * @param {Object<string, Object<string, Parser>>} parsersNS\n *     Parsers by namespace.\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @param {*} [thisArg] The object to use as `this`.\n * @return {T} Object.\n * @template T\n */\nexport function pushParseAndPop(object, parsersNS, node, objectStack, thisArg) {\n  objectStack.push(object);\n  parseNode(parsersNS, node, objectStack, thisArg);\n  return /** @type {T} */ (objectStack.pop());\n}\n\n/**\n * Walk through an array of `values` and call a serializer for each value.\n * @param {Object<string, Object<string, Serializer>>} serializersNS\n *     Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n *     Node factory. The `nodeFactory` creates the node whose namespace and name\n *     will be used to choose a node writer from `serializersNS`. This\n *     separation allows us to decide what kind of node to create, depending on\n *     the value we want to serialize. An example for this would be different\n *     geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n *     of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array<string>} [keys] Keys of the `values`. Will be passed to the\n *     `nodeFactory`. This is used for serializing object literals where the\n *     node name relates to the property key. The array length of `keys` has\n *     to match the length of `values`. For serializing a sequence, `keys`\n *     determines the order of the sequence.\n * @param {T} [thisArg] The object to use as `this` for the node factory and\n *     serializers.\n * @template T\n */\nexport function serialize(\n  serializersNS,\n  nodeFactory,\n  values,\n  objectStack,\n  keys,\n  thisArg,\n) {\n  const length = (keys !== undefined ? keys : values).length;\n  let value, node;\n  for (let i = 0; i < length; ++i) {\n    value = values[i];\n    if (value !== undefined) {\n      node = nodeFactory.call(\n        thisArg,\n        value,\n        objectStack,\n        keys !== undefined ? keys[i] : undefined,\n      );\n      if (node !== undefined) {\n        serializersNS[node.namespaceURI][node.localName].call(\n          thisArg,\n          node,\n          value,\n          objectStack,\n        );\n      }\n    }\n  }\n}\n\n/**\n * @param {O} object Object.\n * @param {Object<string, Object<string, Serializer>>} serializersNS\n *     Namespaced serializers.\n * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory\n *     Node factory. The `nodeFactory` creates the node whose namespace and name\n *     will be used to choose a node writer from `serializersNS`. This\n *     separation allows us to decide what kind of node to create, depending on\n *     the value we want to serialize. An example for this would be different\n *     geometry writers based on the geometry type.\n * @param {Array<*>} values Values to serialize. An example would be an array\n *     of {@link module:ol/Feature~Feature} instances.\n * @param {Array<*>} objectStack Node stack.\n * @param {Array<string>} [keys] Keys of the `values`. Will be passed to the\n *     `nodeFactory`. This is used for serializing object literals where the\n *     node name relates to the property key. The array length of `keys` has\n *     to match the length of `values`. For serializing a sequence, `keys`\n *     determines the order of the sequence.\n * @param {T} [thisArg] The object to use as `this` for the node factory and\n *     serializers.\n * @return {O|undefined} Object.\n * @template O, T\n */\nexport function pushSerializeAndPop(\n  object,\n  serializersNS,\n  nodeFactory,\n  values,\n  objectStack,\n  keys,\n  thisArg,\n) {\n  objectStack.push(object);\n  serialize(serializersNS, nodeFactory, values, objectStack, keys, thisArg);\n  return /** @type {O|undefined} */ (objectStack.pop());\n}\n\nlet xmlSerializer_ = undefined;\n\n/**\n * Register a XMLSerializer. Can be used  to inject a XMLSerializer\n * where there is no globally available implementation.\n *\n * @param {XMLSerializer} xmlSerializer A XMLSerializer.\n * @api\n */\nexport function registerXMLSerializer(xmlSerializer) {\n  xmlSerializer_ = xmlSerializer;\n}\n\n/**\n * @return {XMLSerializer} The XMLSerializer.\n */\nexport function getXMLSerializer() {\n  if (xmlSerializer_ === undefined && typeof XMLSerializer !== 'undefined') {\n    xmlSerializer_ = new XMLSerializer();\n  }\n  return xmlSerializer_;\n}\n\nlet document_ = undefined;\n\n/**\n * Register a Document to use when creating nodes for XML serializations. Can be used\n * to inject a Document where there is no globally available implementation.\n *\n * @param {Document} document A Document.\n * @api\n */\nexport function registerDocument(document) {\n  document_ = document;\n}\n\n/**\n * Get a document that should be used when creating nodes for XML serializations.\n * @return {Document} The document.\n */\nexport function getDocument() {\n  if (document_ === undefined && typeof document !== 'undefined') {\n    document_ = document.implementation.createDocument('', '', null);\n  }\n  return document_;\n}\n","import { getSourceProjection } from '../util.js';\nimport {} from 'ol/source.js';\nimport { attributionsFunctionToCredits } from '../core.js';\nexport function createEmptyCanvas() {\n    const canvas = document.createElement('canvas');\n    canvas.width = 1;\n    canvas.height = 1;\n    return canvas;\n}\nexport default class OLImageryProvider {\n    source_;\n    projection_;\n    fallbackProj_;\n    map_;\n    shouldRequestNextLevel;\n    emptyCanvas_ = createEmptyCanvas();\n    emptyCanvasPromise_ = Promise.resolve(this.emptyCanvas_);\n    tilingScheme_;\n    ready_;\n    rectangle_;\n    /**\n   * When <code>true</code>, this model is ready to render, i.e., the external binary, image,\n   * and shader files were downloaded and the WebGL resources were created.\n   */\n    get ready() {\n        return this.ready_;\n    }\n    /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   */\n    get rectangle() {\n        return this.rectangle_;\n    }\n    /**\n     * Gets the tiling scheme used by the provider.\n     */\n    get tilingScheme() {\n        return this.tilingScheme_;\n    }\n    /**\n     * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n     * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n     * are passed an instance of {@link Cesium.TileProviderError}.\n     */\n    errorEvent = new Cesium.Event();\n    /**\n     * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n     * the source of the imagery.\n     */\n    credit;\n    /**\n     * Gets the proxy used by this provider.\n     */\n    proxy;\n    get _ready() {\n        return this.ready_;\n    }\n    /**\n     * Gets the width of each tile, in pixels.\n     */\n    get tileWidth() {\n        const tileGrid = this.source_.getTileGrid();\n        if (tileGrid) {\n            const tileSizeAtZoom0 = tileGrid.getTileSize(0);\n            if (Array.isArray(tileSizeAtZoom0)) {\n                return tileSizeAtZoom0[0];\n            }\n            else {\n                return tileSizeAtZoom0; // same width and height\n            }\n        }\n        return 256;\n    }\n    /**\n     * Gets the height of each tile, in pixels.\n     */\n    get tileHeight() {\n        const tileGrid = this.source_.getTileGrid();\n        if (tileGrid) {\n            const tileSizeAtZoom0 = tileGrid.getTileSize(0);\n            if (Array.isArray(tileSizeAtZoom0)) {\n                return tileSizeAtZoom0[1];\n            }\n            else {\n                return tileSizeAtZoom0; // same width and height\n            }\n        }\n        return 256;\n    }\n    /**\n     * Gets the maximum level-of-detail that can be requested.\n     */\n    get maximumLevel() {\n        const tileGrid = this.source_.getTileGrid();\n        if (tileGrid) {\n            return tileGrid.getMaxZoom();\n        }\n        else {\n            return 18; // some arbitrary value\n        }\n    }\n    // FIXME: to implement, we could check the number of tiles at minzoom (for this rectangle) and return 0 if too big\n    /**\n     * Gets the minimum level-of-detail that can be requested.  Generally,\n     * a minimum level should only be used when the rectangle of the imagery is small\n     * enough that the number of tiles at the minimum level is small.  An imagery\n     * provider with more than a few tiles at the minimum level will lead to\n     * rendering problems.\n     */\n    get minimumLevel() {\n        // WARNING: Do not use the minimum level (at least until the extent is\n        // properly set). Cesium assumes the minimumLevel to contain only\n        // a few tiles and tries to load them all at once -- this can\n        // freeze and/or crash the browser !\n        return 0;\n        //var tg = this.source_.getTileGrid();\n        //return tg ? tg.getMinZoom() : 0;\n    }\n    /**\n     * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n     * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n     * returns undefined, no tiles are filtered.\n     */\n    get tileDiscardPolicy() {\n        return undefined;\n    }\n    // FIXME: this might be exposed\n    /**\n     * Gets a value indicating whether or not the images provided by this imagery provider\n     * include an alpha channel.  If this property is false, an alpha channel, if present, will\n     * be ignored.  If this property is true, any images without an alpha channel will be treated\n     * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n     * and texture upload time are reduced.\n     */\n    get hasAlphaChannel() {\n        return true;\n    }\n    // FIXME: this could be implemented by proxying to OL\n    /**\n     * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n     * a tile.\n     * This function is optional, so it may not exist on all ImageryProviders.\n     * @param x - The tile X coordinate.\n     * @param y - The tile Y coordinate.\n     * @param level - The tile level.\n     * @param longitude - The longitude at which to pick features.\n     * @param latitude - The latitude at which to pick features.\n     * @return A promise for the picked features that will resolve when the asynchronous\n     *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n     *                   instances.  The array may be empty if no features are found at the given location.\n     *                   It may also be undefined if picking is not supported.\n     */\n    pickFeatures(x, y, level, longitude, latitude) {\n        return undefined;\n    }\n    /**\n     * Special class derived from Cesium.ImageryProvider\n     * that is connected to the given ol.source.TileImage.\n     * @param olMap OL map\n     * @param source Tile image source\n     * @param [opt_fallbackProj] Projection to assume if source has no projection\n     */\n    constructor(olMap, source, opt_fallbackProj) {\n        this.source_ = source;\n        this.projection_ = null;\n        this.ready_ = false;\n        this.fallbackProj_ = opt_fallbackProj || null;\n        // cesium v107+ don't wait for ready anymore so we put somehing here while it loads\n        this.tilingScheme_ = new Cesium.WebMercatorTilingScheme();\n        this.rectangle_ = null;\n        this.map_ = olMap;\n        this.shouldRequestNextLevel = false;\n        const proxy = this.source_.get('olcs_proxy');\n        if (proxy) {\n            if (typeof proxy === 'function') {\n                // Duck typing a proxy\n                this.proxy = {\n                    'getURL': proxy\n                };\n            }\n            else if (typeof proxy === 'string') {\n                this.proxy = new Cesium.DefaultProxy(proxy);\n            }\n        }\n        this.source_.on('change', (e) => {\n            this.handleSourceChanged_();\n        });\n        this.handleSourceChanged_();\n    }\n    /**\n     * Checks if the underlying source is ready and cached required data.\n     */\n    handleSourceChanged_() {\n        if (!this.ready_ && this.source_.getState() == 'ready') {\n            this.projection_ = getSourceProjection(this.source_) || this.fallbackProj_;\n            const options = { numberOfLevelZeroTilesX: 1, numberOfLevelZeroTilesY: 1 };\n            if (this.source_.getTileGrid() !== null) {\n                // Get the number of tiles at level 0 if it is defined\n                this.source_.getTileGrid().forEachTileCoord(this.projection_.getExtent(), 0, ([zoom, xIndex, yIndex]) => {\n                    options.numberOfLevelZeroTilesX = xIndex + 1;\n                    options.numberOfLevelZeroTilesY = yIndex + 1;\n                });\n            }\n            if (this.projection_.getCode() === 'EPSG:4326') {\n                // Cesium zoom level 0 is OpenLayers zoom level 1 for layer in EPSG:4326 with a single tile on level 0\n                this.shouldRequestNextLevel = options.numberOfLevelZeroTilesX === 1 && options.numberOfLevelZeroTilesY === 1;\n                this.tilingScheme_ = new Cesium.GeographicTilingScheme(options);\n            }\n            else if (this.projection_.getCode() === 'EPSG:3857') {\n                this.shouldRequestNextLevel = false;\n                this.tilingScheme_ = new Cesium.WebMercatorTilingScheme(options);\n            }\n            else {\n                return;\n            }\n            this.rectangle_ = this.tilingScheme_.rectangle;\n            this.ready_ = true;\n        }\n    }\n    /**\n     * Generates the proper attributions for a given position and zoom\n     * level.\n     * @implements\n     */\n    getTileCredits(x, y, level) {\n        const attributionsFunction = this.source_.getAttributions();\n        if (!attributionsFunction) {\n            return [];\n        }\n        const extent = this.map_.getView().calculateExtent(this.map_.getSize());\n        const center = this.map_.getView().getCenter();\n        const zoom = this.shouldRequestNextLevel ? level + 1 : level;\n        return attributionsFunctionToCredits(attributionsFunction, zoom, center, extent);\n    }\n    /**\n     * @implements\n     */\n    requestImage(x, y, level, request) {\n        const tileUrlFunction = this.source_.getTileUrlFunction();\n        if (tileUrlFunction && this.projection_) {\n            const z_ = this.shouldRequestNextLevel ? level + 1 : level;\n            let url = tileUrlFunction.call(this.source_, [z_, x, y], 1, this.projection_);\n            if (this.proxy) {\n                url = this.proxy.getURL(url);\n            }\n            if (url) {\n                // It is probably safe to cast here\n                return Cesium.ImageryProvider.loadImage(this, url);\n            }\n            return this.emptyCanvasPromise_;\n        }\n        else {\n            // return empty canvas to stop Cesium from retrying later\n            return this.emptyCanvasPromise_;\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0xJbWFnZXJ5UHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb2xjcy9jb3JlL09MSW1hZ2VyeVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUMvQyxPQUFPLEVBQWdCLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQU16RCxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDakIsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8saUJBQWlCO0lBQzVCLE9BQU8sQ0FBWTtJQUNuQixXQUFXLENBQXlCO0lBQ3BDLGFBQWEsQ0FBeUI7SUFDdEMsSUFBSSxDQUFNO0lBQ1Ysc0JBQXNCLENBQVU7SUFDaEMsWUFBWSxHQUFzQixpQkFBaUIsRUFBRSxDQUFDO0lBQ3RELG1CQUFtQixHQUErQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRixhQUFhLENBQWU7SUFDNUIsTUFBTSxDQUFVO0lBQ2hCLFVBQVUsQ0FBWTtJQUU5Qjs7O0tBR0M7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOztLQUVDO0lBQ0QsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixD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","\nconst SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nconst SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// Threshold chosen based on both benchmarking and knowledge about browser string\n// data structures (which currently switch structure types at 12 bytes or more)\nconst TEXT_DECODER_MIN_LENGTH = 12;\nconst utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\n\nconst PBF_VARINT  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nconst PBF_FIXED64 = 1; // 64-bit: double, fixed64, sfixed64\nconst PBF_BYTES   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nconst PBF_FIXED32 = 5; // 32-bit: float, fixed32, sfixed32\n\nexport class PbfReader {\n    /**\n     * @param {Uint8Array | ArrayBuffer} buf\n     */\n    constructor(buf) {\n        this.buf = ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf);\n        this.dataView = new DataView(this.buf.buffer, this.buf.byteOffset, this.buf.byteLength);\n        this.pos = 0;\n        this.type = 0;\n        this._valueStart = -1;\n        this.length = this.buf.length;\n    }\n\n    /**\n     * @template T\n     * @param {(tag: number, result: T, pbf: PbfReader) => void} readField\n     * @param {T} result\n     * @param {number} [end]\n     */\n    readFields(readField, result, end = this.length) {\n        let field;\n        while ((field = this.nextField(end))) {\n            readField(field, result, this);\n        }\n        return result;\n    }\n\n    /**\n     * @template T\n     * @param {(tag: number, result: T, pbf: PbfReader) => void} readField\n     * @param {T} result\n     */\n    readMessage(readField, result) {\n        return this.readFields(readField, result, this.readVarint() + this.pos);\n    }\n\n    readFixed32() {\n        const val = this.dataView.getUint32(this.pos, true);\n        this.pos += 4;\n        return val;\n    }\n\n    readSFixed32() {\n        const val = this.dataView.getInt32(this.pos, true);\n        this.pos += 4;\n        return val;\n    }\n\n    // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n    readFixed64() {\n        const val = this.dataView.getUint32(this.pos, true) + this.dataView.getUint32(this.pos + 4, true) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    }\n\n    readSFixed64() {\n        const val = this.dataView.getUint32(this.pos, true) + this.dataView.getInt32(this.pos + 4, true) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    }\n\n    readFloat() {\n        const val = this.dataView.getFloat32(this.pos, true);\n        this.pos += 4;\n        return val;\n    }\n\n    readDouble() {\n        const val = this.dataView.getFloat64(this.pos, true);\n        this.pos += 8;\n        return val;\n    }\n\n    /**\n     * @param {boolean} [isSigned]\n     */\n    readVarint(isSigned) {\n        const buf = this.buf;\n        const b0 = buf[this.pos++];\n        if (b0 < 0x80) return b0;\n\n        let val = b0 & 0x7f, b;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n        b = buf[this.pos];   val |= (b & 0x0f) << 28;\n\n        return readVarintRemainder(val, isSigned, this);\n    }\n\n    readSVarint() {\n        const num = this.readVarint();\n        return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n    }\n\n    readBoolean() {\n        return Boolean(this.readVarint());\n    }\n\n    readString() {\n        const end = this.readVarint() + this.pos;\n        const pos = this.pos;\n        this.pos = end;\n\n        if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {\n            // longer strings are fast with the built-in browser TextDecoder API\n            return utf8TextDecoder.decode(this.buf.subarray(pos, end));\n        }\n        // short strings are fast with our custom implementation\n        return readUtf8(this.buf, pos, end);\n    }\n\n    readBytes() {\n        const end = this.readVarint() + this.pos,\n            buffer = this.buf.subarray(this.pos, end);\n        this.pos = end;\n        return buffer;\n    }\n\n    // verbose for performance reasons; doesn't affect gzipped size\n\n    /**\n     * @param {number[]} [arr]\n     * @param {boolean} [isSigned]\n     */\n    readPackedVarint(arr = [], isSigned) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readVarint(isSigned));\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedSVarint(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readSVarint());\n        return arr;\n    }\n    /** @param {boolean[]} [arr] */\n    readPackedBoolean(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readBoolean());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedFloat(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readFloat());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedDouble(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readDouble());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedFixed32(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readFixed32());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedSFixed32(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readSFixed32());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedFixed64(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readFixed64());\n        return arr;\n    }\n    /** @param {number[]} [arr] */\n    readPackedSFixed64(arr = []) {\n        const end = this.readPackedEnd();\n        while (this.pos < end) arr.push(this.readSFixed64());\n        return arr;\n    }\n    readPackedEnd() {\n        return this.type === PBF_BYTES ? this.readVarint() + this.pos : this.pos + 1;\n    }\n\n    /**\n     * Advance to the next field. Returns the field number, or 0 at end-of-message.\n     * @param {number} [end]\n     */\n    nextField(end = this.length) {\n        if (this.pos === this._valueStart) this.skip(this.type);\n        if (this.pos >= end) return 0;\n        const tag = this.readVarint();\n        this.type = tag & 0x7;\n        this._valueStart = this.pos;\n        return tag >>> 3;\n    }\n\n    /** @param {number} val */\n    skip(val) {\n        const type = val & 0x7;\n        if (type === PBF_VARINT) while (this.buf[this.pos++] > 0x7f) {}\n        else if (type === PBF_BYTES) this.pos = this.readVarint() + this.pos;\n        else if (type === PBF_FIXED32) this.pos += 4;\n        else if (type === PBF_FIXED64) this.pos += 8;\n        else throw new Error(`Unimplemented type: ${type}`);\n    }\n}\n\nexport class PbfWriter {\n    /**\n     * @param {Uint8Array | ArrayBuffer} [buf]\n     */\n    constructor(buf = new Uint8Array(16)) {\n        this.buf = ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf);\n        this.dataView = new DataView(this.buf.buffer, this.buf.byteOffset, this.buf.byteLength);\n        this.pos = 0;\n        this.length = this.buf.length;\n    }\n\n    /**\n     * @param {number} tag\n     * @param {number} type\n     */\n    writeTag(tag, type) {\n        this.writeVarint((tag << 3) | type);\n    }\n\n    /** @param {number} min */\n    realloc(min) {\n        let length = this.length || 16;\n\n        while (length < this.pos + min) length *= 2;\n\n        if (length !== this.length) {\n            const buf = new Uint8Array(length);\n            buf.set(this.buf);\n            this.buf = buf;\n            this.dataView = new DataView(buf.buffer);\n            this.length = length;\n        }\n    }\n\n    finish() {\n        this.length = this.pos;\n        this.pos = 0;\n        return this.buf.subarray(0, this.length);\n    }\n\n    /** @param {number} val */\n    writeFixed32(val) {\n        this.realloc(4);\n        this.dataView.setInt32(this.pos, val, true);\n        this.pos += 4;\n    }\n\n    /** @param {number} val */\n    writeSFixed32(val) {\n        this.realloc(4);\n        this.dataView.setInt32(this.pos, val, true);\n        this.pos += 4;\n    }\n\n    /** @param {number} val */\n    writeFixed64(val) {\n        this.realloc(8);\n        this.dataView.setInt32(this.pos, val & -1, true);\n        this.dataView.setInt32(this.pos + 4, Math.floor(val * SHIFT_RIGHT_32), true);\n        this.pos += 8;\n    }\n\n    /** @param {number} val */\n    writeSFixed64(val) {\n        this.realloc(8);\n        this.dataView.setInt32(this.pos, val & -1, true);\n        this.dataView.setInt32(this.pos + 4, Math.floor(val * SHIFT_RIGHT_32), true);\n        this.pos += 8;\n    }\n\n    /** @param {number} val */\n    writeVarint(val) {\n        val = +val || 0;\n\n        if (val >= 0 && val < 0x80) {\n            if (this.pos >= this.length) this.realloc(1);\n            this.buf[this.pos++] = val;\n            return;\n        }\n\n        if (val > 0xfffffff || val < 0) {\n            writeBigVarint(val, this);\n            return;\n        }\n\n        this.realloc(4);\n\n        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] =   (val >>> 7) & 0x7f;\n    }\n\n    /** @param {number} val */\n    writeSVarint(val) {\n        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n    }\n\n    /** @param {boolean} val */\n    writeBoolean(val) {\n        this.writeVarint(+val);\n    }\n\n    /** @param {string} str */\n    writeString(str) {\n        str = String(str);\n        this.realloc(str.length * 4);\n\n        this.pos++; // reserve 1 byte for short string length\n\n        const startPos = this.pos;\n        // write the string directly to the buffer and see how much was written\n        this.pos = writeUtf8(this.buf, str, this.pos);\n        const len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    }\n\n    /** @param {number} val */\n    writeFloat(val) {\n        this.realloc(4);\n        this.dataView.setFloat32(this.pos, val, true);\n        this.pos += 4;\n    }\n\n    /** @param {number} val */\n    writeDouble(val) {\n        this.realloc(8);\n        this.dataView.setFloat64(this.pos, val, true);\n        this.pos += 8;\n    }\n\n    /** @param {Uint8Array} buffer */\n    writeBytes(buffer) {\n        const len = buffer.length;\n        this.writeVarint(len);\n        this.realloc(len);\n        this.buf.set(buffer, this.pos);\n        this.pos += len;\n    }\n\n    /**\n     * @template T\n     * @param {(obj: T, pbf: PbfWriter) => void} fn\n     * @param {T} obj\n     */\n    writeRawMessage(fn, obj) {\n        this.pos++; // reserve 1 byte for short message length\n\n        // write the message directly to the buffer and see how much was written\n        const startPos = this.pos;\n        fn(obj, this);\n        const len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    }\n\n    /**\n     * @template T\n     * @param {number} tag\n     * @param {(obj: T, pbf: PbfWriter) => void} fn\n     * @param {T} obj\n     */\n    writeMessage(tag, fn, obj) {\n        this.writeTag(tag, PBF_BYTES);\n        this.writeRawMessage(fn, obj);\n    }\n\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedVarint(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedVarint, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedSVarint(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedSVarint, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {boolean[]} arr\n     */\n    writePackedBoolean(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedBoolean, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedFloat(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedFloat, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedDouble(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedDouble, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedFixed32(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedFixed32, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedSFixed32(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedFixed64(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedFixed64, arr);\n    }\n    /**\n     * @param {number} tag\n     * @param {number[]} arr\n     */\n    writePackedSFixed64(tag, arr) {\n        if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr);\n    }\n\n    /**\n     * @param {number} tag\n     * @param {Uint8Array} buffer\n     */\n    writeBytesField(tag, buffer) {\n        this.writeTag(tag, PBF_BYTES);\n        this.writeBytes(buffer);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeFixed32Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED32);\n        this.writeFixed32(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeSFixed32Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED32);\n        this.writeSFixed32(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeFixed64Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED64);\n        this.writeFixed64(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeSFixed64Field(tag, val) {\n        this.writeTag(tag, PBF_FIXED64);\n        this.writeSFixed64(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeVarintField(tag, val) {\n        this.writeTag(tag, PBF_VARINT);\n        this.writeVarint(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeSVarintField(tag, val) {\n        this.writeTag(tag, PBF_VARINT);\n        this.writeSVarint(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {string} str\n     */\n    writeStringField(tag, str) {\n        this.writeTag(tag, PBF_BYTES);\n        this.writeString(str);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeFloatField(tag, val) {\n        this.writeTag(tag, PBF_FIXED32);\n        this.writeFloat(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {number} val\n     */\n    writeDoubleField(tag, val) {\n        this.writeTag(tag, PBF_FIXED64);\n        this.writeDouble(val);\n    }\n    /**\n     * @param {number} tag\n     * @param {boolean} val\n     */\n    writeBooleanField(tag, val) {\n        this.writeVarintField(tag, +val);\n    }\n}\n\n/**\n * @param {number} l\n * @param {boolean | undefined} s\n * @param {PbfReader} p\n */\nfunction readVarintRemainder(l, s, p) {\n    const buf = p.buf;\n    let h, b;\n\n    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n    throw new Error('Expected varint not more than 10 bytes');\n}\n\n/**\n * @param {number} low\n * @param {number} high\n * @param {boolean} [isSigned]\n */\nfunction toNum(low, high, isSigned) {\n    return isSigned ? high * 0x100000000 + (low >>> 0) : ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\n/**\n * @param {number} val\n * @param {PbfWriter} pbf\n */\nfunction writeBigVarint(val, pbf) {\n    let low, high;\n\n    if (val >= 0) {\n        low  = (val % 0x100000000) | 0;\n        high = (val / 0x100000000) | 0;\n    } else {\n        low  = ~(-val % 0x100000000);\n        high = ~(-val / 0x100000000);\n\n        if (low ^ 0xffffffff) {\n            low = (low + 1) | 0;\n        } else {\n            low = 0;\n            high = (high + 1) | 0;\n        }\n    }\n\n    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n        throw new Error('Given varint doesn\\'t fit into 10 bytes');\n    }\n\n    pbf.realloc(10);\n\n    writeBigVarintLow(low, high, pbf);\n    writeBigVarintHigh(high, pbf);\n}\n\n/**\n * @param {number} high\n * @param {number} low\n * @param {PbfWriter} pbf\n */\nfunction writeBigVarintLow(low, high, pbf) {\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos]   = low & 0x7f;\n}\n\n/**\n * @param {number} high\n * @param {PbfWriter} pbf\n */\nfunction writeBigVarintHigh(high, pbf) {\n    const lsb = (high & 0x07) << 4;\n\n    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f;\n}\n\n/**\n * @param {number} startPos\n * @param {number} len\n * @param {PbfWriter} pbf\n */\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n    const extraLen =\n        len <= 0x3fff ? 1 :\n        len <= 0x1fffff ? 2 :\n        len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n    // if 1 byte isn't enough for encoding message length, shift the data to the right\n    pbf.realloc(extraLen);\n    pbf.buf.copyWithin(startPos + extraLen, startPos, pbf.pos);\n}\n\n/**\n * Packed varints often dominate encode time, so write the bytes inline\n * through a local buffer pointer rather than calling writeVarint per element,\n * falling back to writeVarint only for negatives or near the buffer's end.\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedVarint(arr, pbf) {\n    const n = arr.length;\n    let buf = pbf.buf, pos = pbf.pos, limit = pbf.length;\n    for (let i = 0; i < n; i++) {\n        let val = arr[i];\n        if (val < 0 || pos + 10 > limit) { // slow path: grows the buffer, handles 10-byte values\n            pbf.pos = pos;\n            pbf.writeVarint(val);\n            buf = pbf.buf; pos = pbf.pos; limit = pbf.length;\n            continue;\n        }\n        while (val > 0x7f) { buf[pos++] = (val % 0x80) | 0x80; val = Math.floor(val / 0x80); }\n        buf[pos++] = val;\n    }\n    pbf.pos = pos;\n}\n/**\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedSVarint(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedFloat(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedDouble(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);\n}\n/**\n * @param {boolean[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedBoolean(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedFixed32(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedSFixed32(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedFixed64(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);\n}\n/**\n * @param {number[]} arr\n * @param {PbfWriter} pbf\n */\nfunction writePackedSFixed64(arr, pbf) {\n    for (let i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]);\n}\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\n/**\n * @param {Uint8Array} buf\n * @param {number} pos\n * @param {number} end\n */\nfunction readUtf8(buf, pos, end) {\n    let str = '';\n    let i = pos;\n\n    while (i < end) {\n        const b0 = buf[i];\n        let c = null; // codepoint\n        let bytesPerSequence =\n            b0 > 0xEF ? 4 :\n            b0 > 0xDF ? 3 :\n            b0 > 0xBF ? 2 : 1;\n\n        if (i + bytesPerSequence > end) break;\n\n        let b1, b2, b3;\n\n        if (bytesPerSequence === 1) {\n            if (b0 < 0x80) {\n                c = b0;\n            }\n        } else if (bytesPerSequence === 2) {\n            b1 = buf[i + 1];\n            if ((b1 & 0xC0) === 0x80) {\n                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n                if (c <= 0x7F) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 3) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 4) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            b3 = buf[i + 3];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n                if (c <= 0xFFFF || c >= 0x110000) {\n                    c = null;\n                }\n            }\n        }\n\n        if (c === null) {\n            c = 0xFFFD;\n            bytesPerSequence = 1;\n\n        } else if (c > 0xFFFF) {\n            c -= 0x10000;\n            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n            c = 0xDC00 | c & 0x3FF;\n        }\n\n        str += String.fromCharCode(c);\n        i += bytesPerSequence;\n    }\n\n    return str;\n}\n\n/**\n * @param {Uint8Array} buf\n * @param {string} str\n * @param {number} pos\n */\nfunction writeUtf8(buf, str, pos) {\n    for (let i = 0, c, lead; i < str.length; i++) {\n        c = str.charCodeAt(i); // code point\n\n        if (c > 0xD7FF && c < 0xE000) {\n            if (lead) {\n                if (c < 0xDC00) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                    lead = c;\n                    continue;\n                } else {\n                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n                    lead = null;\n                }\n            } else {\n                if (c > 0xDBFF || (i + 1 === str.length)) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                } else {\n                    lead = c;\n                }\n                continue;\n            }\n        } else if (lead) {\n            buf[pos++] = 0xEF;\n            buf[pos++] = 0xBF;\n            buf[pos++] = 0xBD;\n            lead = null;\n        }\n\n        if (c < 0x80) {\n            buf[pos++] = c;\n        } else {\n            if (c < 0x800) {\n                buf[pos++] = c >> 0x6 | 0xC0;\n            } else {\n                if (c < 0x10000) {\n                    buf[pos++] = c >> 0xC | 0xE0;\n                } else {\n                    buf[pos++] = c >> 0x12 | 0xF0;\n                    buf[pos++] = c >> 0xC & 0x3F | 0x80;\n                }\n                buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n            }\n            buf[pos++] = c & 0x3F | 0x80;\n        }\n    }\n    return pos;\n}\n","/**\n * @module ol/format/MVT\n */\n//FIXME Implement projection handling\n\nimport {PbfReader} from 'pbf';\nimport LineString from '../geom/LineString.js';\nimport MultiLineString from '../geom/MultiLineString.js';\nimport MultiPoint from '../geom/MultiPoint.js';\nimport MultiPolygon from '../geom/MultiPolygon.js';\nimport Point from '../geom/Point.js';\nimport Polygon from '../geom/Polygon.js';\nimport {inflateEnds} from '../geom/flat/orient.js';\nimport {get} from '../proj.js';\nimport Projection from '../proj/Projection.js';\nimport RenderFeature from '../render/Feature.js';\nimport FeatureFormat, {transformGeometryWithOptions} from './Feature.js';\n\n/**\n * @template {import(\"../Feature.js\").FeatureLike} [FeatureType=import(\"../render/Feature.js\").default]\n * @typedef {Object} Options\n * @property {import('./Feature.js').FeatureToFeatureClass<FeatureType>} [featureClass] Class for features returned by\n * {@link module:ol/format/MVT~MVT#readFeatures}. Set to {@link module:ol/Feature~Feature} to get full editing and geometry\n * support at the cost of decreased rendering performance. The default is\n * {@link module:ol/render/Feature~RenderFeature}, which is optimized for rendering and hit detection.\n * @property {string} [geometryName='geometry'] Geometry name to use when creating features.\n * @property {string} [layerName='layer'] Name of the feature attribute that holds the layer name.\n * @property {Array<string>} [layers] Layers to read features from. If not provided, features will be read from all\n * @property {string} [idProperty] Optional property that will be assigned as the feature id and removed from the properties.\n * layers.\n */\n\n/**\n * @classdesc\n * Feature format for reading data in the Mapbox MVT format.\n *\n * @template {import('../Feature.js').FeatureLike} [FeatureType=RenderFeature]\n * @extends {FeatureFormat<FeatureType>}\n * @api\n */\nclass MVT extends FeatureFormat {\n  /**\n   * @param {Options<FeatureType>} [options] Options.\n   */\n  constructor(options) {\n    super();\n\n    options = options ? options : {};\n\n    /**\n     * @type {Projection}\n     */\n    this.dataProjection = new Projection({\n      code: '',\n      units: 'tile-pixels',\n    });\n\n    this.featureClass = options.featureClass\n      ? options.featureClass\n      : /** @type {import('./Feature.js').FeatureToFeatureClass<FeatureType>} */ (\n          RenderFeature\n        );\n\n    /**\n     * @private\n     * @type {string|undefined}\n     */\n    this.geometryName_ = options.geometryName;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.layerName_ = options.layerName ? options.layerName : 'layer';\n\n    /**\n     * @private\n     * @type {Array<string>|null}\n     */\n    this.layers_ = options.layers ? options.layers : null;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this.idProperty_ = options.idProperty;\n\n    this.supportedMediaTypes = [\n      'application/vnd.mapbox-vector-tile',\n      'application/x-protobuf',\n    ];\n  }\n\n  /**\n   * Read the raw geometry from the pbf offset stored in a raw feature's geometry\n   * property.\n   * @param {PbfReader} pbf PBF.\n   * @param {Object} feature Raw feature.\n   * @param {Array<number>} flatCoordinates Array to store flat coordinates in.\n   * @param {Array<number>} ends Array to store ends in.\n   * @private\n   */\n  readRawGeometry_(pbf, feature, flatCoordinates, ends) {\n    pbf.pos = feature.geometry;\n\n    const end = pbf.readVarint() + pbf.pos;\n    let cmd = 1;\n    let length = 0;\n    let x = 0;\n    let y = 0;\n    let coordsLen = 0;\n    let currentEnd = 0;\n\n    while (pbf.pos < end) {\n      if (!length) {\n        const cmdLen = pbf.readVarint();\n        cmd = cmdLen & 0x7;\n        length = cmdLen >> 3;\n      }\n\n      length--;\n\n      if (cmd === 1 || cmd === 2) {\n        x += pbf.readSVarint();\n        y += pbf.readSVarint();\n\n        if (cmd === 1) {\n          // moveTo\n          if (coordsLen > currentEnd) {\n            ends.push(coordsLen);\n            currentEnd = coordsLen;\n          }\n        }\n\n        flatCoordinates.push(x, y);\n        coordsLen += 2;\n      } else if (cmd === 7) {\n        if (coordsLen > currentEnd) {\n          // close polygon\n          flatCoordinates.push(\n            flatCoordinates[currentEnd],\n            flatCoordinates[currentEnd + 1],\n          );\n          coordsLen += 2;\n        }\n      } else {\n        throw new Error('Invalid command found in the PBF');\n      }\n    }\n\n    if (coordsLen > currentEnd) {\n      ends.push(coordsLen);\n      currentEnd = coordsLen;\n    }\n  }\n\n  /**\n   * @private\n   * @param {PbfReader} pbf PBF\n   * @param {Object} rawFeature Raw Mapbox feature.\n   * @param {import(\"./Feature.js\").ReadOptions} options Read options.\n   * @return {FeatureType|null} Feature.\n   */\n  createFeature_(pbf, rawFeature, options) {\n    const type = rawFeature.type;\n    if (type === 0) {\n      return null;\n    }\n\n    let feature;\n    const values = rawFeature.properties;\n\n    let id;\n    if (!this.idProperty_) {\n      id = rawFeature.id;\n    } else {\n      id = values[this.idProperty_];\n      delete values[this.idProperty_];\n    }\n\n    values[this.layerName_] = rawFeature.layer.name;\n\n    const flatCoordinates = /** @type {Array<number>} */ ([]);\n    const ends = /** @type {Array<number>} */ ([]);\n    this.readRawGeometry_(pbf, rawFeature, flatCoordinates, ends);\n\n    const geometryType = getGeometryType(type, ends.length);\n\n    if (this.featureClass === RenderFeature) {\n      feature =\n        new /** @type {import('./Feature.js').FeatureToFeatureClass<RenderFeature>} */ (\n          this.featureClass\n        )(geometryType, flatCoordinates, ends, 2, values, id);\n      feature.transform(options.dataProjection);\n    } else {\n      let geom;\n      if (geometryType == 'Polygon') {\n        const endss = inflateEnds(flatCoordinates, ends);\n        geom =\n          endss.length > 1\n            ? new MultiPolygon(flatCoordinates, 'XY', endss)\n            : new Polygon(flatCoordinates, 'XY', ends);\n      } else {\n        geom =\n          geometryType === 'Point'\n            ? new Point(flatCoordinates, 'XY')\n            : geometryType === 'LineString'\n              ? new LineString(flatCoordinates, 'XY')\n              : geometryType === 'MultiPoint'\n                ? new MultiPoint(flatCoordinates, 'XY')\n                : geometryType === 'MultiLineString'\n                  ? new MultiLineString(flatCoordinates, 'XY', ends)\n                  : null;\n      }\n      const ctor = /** @type {typeof import(\"../Feature.js\").default} */ (\n        this.featureClass\n      );\n      feature = new ctor();\n      if (this.geometryName_) {\n        feature.setGeometryName(this.geometryName_);\n      }\n      const geometry = transformGeometryWithOptions(geom, false, options);\n      feature.setGeometry(geometry);\n      if (id !== undefined) {\n        feature.setId(id);\n      }\n      feature.setProperties(values, true);\n    }\n\n    return /** @type {FeatureType} */ (feature);\n  }\n\n  /**\n   * @return {import(\"./Feature.js\").Type} Format.\n   * @override\n   */\n  getType() {\n    return 'arraybuffer';\n  }\n\n  /**\n   * Read all features.\n   *\n   * @param {ArrayBuffer} source Source.\n   * @param {import(\"./Feature.js\").ReadOptions} [options] Read options.\n   * @return {Array<FeatureType>} Features.\n   * @api\n   * @override\n   */\n  readFeatures(source, options) {\n    const layers = this.layers_;\n    options = this.adaptOptions(options);\n    const dataProjection = get(options.dataProjection);\n    dataProjection.setWorldExtent(options.extent);\n    options.dataProjection = dataProjection;\n\n    const pbf = new PbfReader(/** @type {ArrayBuffer} */ (source));\n    const pbfLayers = pbf.readFields(layersPBFReader, {});\n    const features = [];\n    for (const name in pbfLayers) {\n      if (layers && !layers.includes(name)) {\n        continue;\n      }\n      const pbfLayer = pbfLayers[name];\n\n      const extent = pbfLayer ? [0, 0, pbfLayer.extent, pbfLayer.extent] : null;\n      dataProjection.setExtent(extent);\n\n      for (let i = 0, ii = pbfLayer.length; i < ii; ++i) {\n        const rawFeature = readRawFeature(pbf, pbfLayer, i);\n        const feature = this.createFeature_(pbf, rawFeature, options);\n        if (feature !== null) {\n          features.push(feature);\n        }\n      }\n    }\n\n    return /** @type {Array<FeatureType>} */ (features);\n  }\n\n  /**\n   * Read the projection from the source.\n   *\n   * @param {Document|Element|Object|string} source Source.\n   * @return {import(\"../proj/Projection.js\").default} Projection.\n   * @api\n   * @override\n   */\n  readProjection(source) {\n    return this.dataProjection;\n  }\n\n  /**\n   * Sets the layers that features will be read from.\n   * @param {Array<string>} layers Layers.\n   * @api\n   */\n  setLayers(layers) {\n    this.layers_ = layers;\n  }\n}\n\n/**\n * Reader callback for parsing layers.\n * @param {number} tag The tag.\n * @param {Object} layers The layers object.\n * @param {PbfReader} pbf The PBF.\n */\nfunction layersPBFReader(tag, layers, pbf) {\n  if (tag === 3) {\n    const layer = {\n      keys: [],\n      values: [],\n      features: [],\n    };\n    const end = pbf.readVarint() + pbf.pos;\n    pbf.readFields(layerPBFReader, layer, end);\n    layer.length = layer.features.length;\n    if (layer.length) {\n      layers[layer.name] = layer;\n    }\n  }\n}\n\n/**\n * Reader callback for parsing layer.\n * @param {number} tag The tag.\n * @param {Object} layer The layer object.\n * @param {PbfReader} pbf The PBF.\n */\nfunction layerPBFReader(tag, layer, pbf) {\n  if (tag === 15) {\n    layer.version = pbf.readVarint();\n  } else if (tag === 1) {\n    layer.name = pbf.readString();\n  } else if (tag === 5) {\n    layer.extent = pbf.readVarint();\n  } else if (tag === 2) {\n    layer.features.push(pbf.pos);\n  } else if (tag === 3) {\n    layer.keys.push(pbf.readString());\n  } else if (tag === 4) {\n    let value = null;\n    const end = pbf.readVarint() + pbf.pos;\n    while (pbf.pos < end) {\n      tag = pbf.readVarint() >> 3;\n      value =\n        tag === 1\n          ? pbf.readString()\n          : tag === 2\n            ? pbf.readFloat()\n            : tag === 3\n              ? pbf.readDouble()\n              : tag === 4\n                ? pbf.readVarint(true)\n                : tag === 5\n                  ? pbf.readVarint()\n                  : tag === 6\n                    ? pbf.readSVarint()\n                    : tag === 7\n                      ? pbf.readBoolean()\n                      : null;\n    }\n    layer.values.push(value);\n  }\n}\n\n/**\n * Reader callback for parsing feature.\n * @param {number} tag The tag.\n * @param {Object} feature The feature object.\n * @param {PbfReader} pbf The PBF.\n */\nfunction featurePBFReader(tag, feature, pbf) {\n  if (tag == 1) {\n    feature.id = pbf.readVarint();\n  } else if (tag == 2) {\n    const end = pbf.readVarint() + pbf.pos;\n    while (pbf.pos < end) {\n      const key = feature.layer.keys[pbf.readVarint()];\n      const value = feature.layer.values[pbf.readVarint()];\n      feature.properties[key] = value;\n    }\n  } else if (tag == 3) {\n    feature.type = pbf.readVarint();\n  } else if (tag == 4) {\n    feature.geometry = pbf.pos;\n  }\n}\n\n/**\n * Read a raw feature from the pbf offset stored at index `i` in the raw layer.\n * @param {PbfReader} pbf PBF.\n * @param {Object} layer Raw layer.\n * @param {number} i Index of the feature in the raw layer's `features` array.\n * @return {Object} Raw feature.\n */\nfunction readRawFeature(pbf, layer, i) {\n  pbf.pos = layer.features[i];\n  const end = pbf.readVarint() + pbf.pos;\n\n  const feature = {\n    layer: layer,\n    type: 0,\n    properties: {},\n  };\n  pbf.readFields(featurePBFReader, feature, end);\n  return feature;\n}\n\n/**\n * @param {number} type The raw feature's geometry type\n * @param {number} numEnds Number of ends of the flat coordinates of the\n * geometry.\n * @return {import(\"../render/Feature.js\").Type} The geometry type.\n */\nfunction getGeometryType(type, numEnds) {\n  /** @type {import(\"../render/Feature.js\").Type} */\n  let geometryType;\n  if (type === 1) {\n    geometryType = numEnds === 1 ? 'Point' : 'MultiPoint';\n  } else if (type === 2) {\n    geometryType = numEnds === 1 ? 'LineString' : 'MultiLineString';\n  } else if (type === 3) {\n    geometryType = 'Polygon';\n    // MultiPolygon not relevant for rendering - winding order determines\n    // outer rings of polygons.\n  }\n  return geometryType;\n}\n\nexport default MVT;\n","import MVT from 'ol/format/MVT.js';\nimport Style, {} from 'ol/style/Style.js';\nimport Stroke from 'ol/style/Stroke.js';\nimport { toContext } from 'ol/render.js';\nimport { get as getProjection } from 'ol/proj.js';\nimport LRUCache from 'ol/structs/LRUCache.js';\nimport { getForProjection as getTilegridForProjection } from 'ol/tilegrid.js';\nimport { createFromTemplates as createTileUrlFunctions } from 'ol/tileurlfunction.js';\nimport RenderFeature from 'ol/render/Feature.js';\nimport { createEmptyCanvas } from './core/OLImageryProvider.js';\nconst format = new MVT({\n    featureClass: RenderFeature\n});\nconst styles = [new Style({\n        stroke: new Stroke({\n            color: 'blue',\n            width: 2\n        })\n    })];\nexport default class MVTImageryProvider {\n    urls;\n    emptyCanvas_ = createEmptyCanvas();\n    emptyCanvasPromise_ = Promise.resolve(this.emptyCanvas_);\n    tilingScheme_ = new Cesium.WebMercatorTilingScheme;\n    ready_ = true;\n    rectangle_;\n    tileRectangle_;\n    tileWidth = 256;\n    tileHeight = 256;\n    maximumLevel = 20;\n    minimumLevel_ = 0;\n    get minimumLevel() {\n        return this.minimumLevel_;\n    }\n    featureCache;\n    tileCache;\n    tileFunction_;\n    styleFunction_;\n    projection_ = getProjection('EPSG:3857');\n    /**\n   * When <code>true</code>, this model is ready to render, i.e., the external binary, image,\n   * and shader files were downloaded and the WebGL resources were created.\n   */\n    get ready() {\n        return this.ready_;\n    }\n    /**\n   * Gets the rectangle, in radians, of the imagery provided by the instance.\n   */\n    get rectangle() {\n        return this.rectangle_;\n    }\n    /**\n     * Gets the tiling scheme used by the provider.\n     */\n    get tilingScheme() {\n        return this.tilingScheme_;\n    }\n    /**\n     * Gets an event that is raised when the imagery provider encounters an asynchronous error.  By subscribing\n     * to the event, you will be notified of the error and can potentially recover from it.  Event listeners\n     * are passed an instance of {@link Cesium.TileProviderError}.\n     */\n    errorEvent = new Cesium.Event();\n    /**\n     * Gets the credit to display when this imagery provider is active.  Typically this is used to credit\n     * the source of the imagery.\n     */\n    credit;\n    getTileCredits(x, y, level) {\n        return [];\n    }\n    /**\n     * Gets the proxy used by this provider.\n     */\n    proxy;\n    get _ready() {\n        return this.ready_;\n    }\n    /**\n     * Gets the tile discard policy.  If not undefined, the discard policy is responsible\n     * for filtering out \"missing\" tiles via its shouldDiscardImage function.  If this function\n     * returns undefined, no tiles are filtered.\n     */\n    get tileDiscardPolicy() {\n        return undefined;\n    }\n    // FIXME: this might be exposed\n    /**\n     * Gets a value indicating whether or not the images provided by this imagery provider\n     * include an alpha channel.  If this property is false, an alpha channel, if present, will\n     * be ignored.  If this property is true, any images without an alpha channel will be treated\n     * as if their alpha is 1.0 everywhere.  When this property is false, memory usage\n     * and texture upload time are reduced.\n     */\n    get hasAlphaChannel() {\n        return true;\n    }\n    // FIXME: this could be implemented by proxying to OL\n    /**\n     * Asynchronously determines what features, if any, are located at a given longitude and latitude within\n     * a tile.\n     * This function is optional, so it may not exist on all ImageryProviders.\n     * @param x - The tile X coordinate.\n     * @param y - The tile Y coordinate.\n     * @param level - The tile level.\n     * @param longitude - The longitude at which to pick features.\n     * @param latitude - The latitude at which to pick features.\n     * @return A promise for the picked features that will resolve when the asynchronous\n     *                   picking completes.  The resolved value is an array of {@link ImageryLayerFeatureInfo}\n     *                   instances.  The array may be empty if no features are found at the given location.\n     *                   It may also be undefined if picking is not supported.\n     */\n    pickFeatures(x, y, level, longitude, latitude) {\n        return undefined;\n    }\n    constructor(options) {\n        this.urls = options.urls;\n        this.rectangle_ = options.rectangle || this.tilingScheme.rectangle;\n        this.credit = options.credit;\n        this.styleFunction_ = options.styleFunction || (() => styles);\n        this.tileRectangle_ = new Cesium.Rectangle();\n        // to avoid too frequent cache grooming we allow x2 capacity\n        const cacheSize = options.cacheSize !== undefined ? options.cacheSize : 50;\n        this.tileCache = new LRUCache(cacheSize);\n        this.featureCache = options.featureCache || new LRUCache(cacheSize);\n        this.minimumLevel_ = options.minimumLevel || 0;\n        const tileGrid = getTilegridForProjection(this.projection_);\n        this.tileFunction_ = createTileUrlFunctions(this.urls, tileGrid);\n    }\n    getTileFeatures(z, x, y) {\n        const cacheKey = this.getCacheKey_(z, x, y);\n        let promise;\n        if (this.featureCache.containsKey(cacheKey)) {\n            promise = this.featureCache.get(cacheKey);\n        }\n        if (!promise) {\n            const url = this.getUrl_(z, x, y);\n            promise = fetch(url)\n                .then(r => (r.ok ? r : Promise.reject(r)))\n                .then(r => r.arrayBuffer())\n                .then(buffer => this.readFeaturesFromBuffer(buffer));\n            this.featureCache.set(cacheKey, promise);\n            if (this.featureCache.getCount() > 2 * this.featureCache.highWaterMark) {\n                while (this.featureCache.canExpireCache()) {\n                    this.featureCache.pop();\n                }\n            }\n        }\n        return promise;\n    }\n    readFeaturesFromBuffer(buffer) {\n        const features = format.readFeatures(buffer);\n        const scaleFactor = this.tileWidth / 4096;\n        features.forEach((f) => {\n            const flatCoordinates = f.getFlatCoordinates();\n            for (let i = 0; i < flatCoordinates.length; ++i) {\n                flatCoordinates[i] *= scaleFactor;\n            }\n        });\n        return features;\n    }\n    getUrl_(z, x, y) {\n        // FIXME: probably we should not pass 1 as pixelRatio\n        const url = this.tileFunction_([z, x, y], 1, this.projection_);\n        return url;\n    }\n    getCacheKey_(z, x, y) {\n        return `${z}_${x}_${y}`;\n    }\n    requestImage(x, y, z, request) {\n        if (z < this.minimumLevel_) {\n            return this.emptyCanvasPromise_;\n        }\n        try {\n            const cacheKey = this.getCacheKey_(z, x, y);\n            let promise;\n            if (this.tileCache.containsKey(cacheKey)) {\n                promise = this.tileCache.get(cacheKey);\n            }\n            if (!promise) {\n                promise = this.getTileFeatures(z, x, y)\n                    .then((features) => {\n                    // FIXME: here we suppose the 2D projection is in meters\n                    this.tilingScheme.tileXYToNativeRectangle(x, y, z, this.tileRectangle_);\n                    const resolution = (this.tileRectangle_.east - this.tileRectangle_.west) / this.tileWidth;\n                    return this.rasterizeFeatures(features, this.styleFunction_, resolution);\n                });\n                this.tileCache.set(cacheKey, promise);\n                if (this.tileCache.getCount() > 2 * this.tileCache.highWaterMark) {\n                    while (this.tileCache.canExpireCache()) {\n                        this.tileCache.pop();\n                    }\n                }\n            }\n            return promise;\n        }\n        catch (e) {\n            console.trace(e);\n            // FIXME: open PR on Cesium to fix incorrect typing\n            // @ts-ignore\n            this.errorEvent.raiseEvent('could not render pbf to tile', e);\n        }\n    }\n    rasterizeFeatures(features, styleFunction, resolution) {\n        const canvas = document.createElement('canvas');\n        const vectorContext = toContext(canvas.getContext('2d'), { size: [this.tileWidth, this.tileHeight] });\n        features.forEach((f) => {\n            const styles = styleFunction(f, resolution);\n            if (styles) {\n                if (Array.isArray(styles)) {\n                    styles.forEach((style) => {\n                        vectorContext.setStyle(style);\n                        vectorContext.drawGeometry(f);\n                    });\n                }\n                else {\n                    vectorContext.setStyle(styles);\n                    vectorContext.drawGeometry(f);\n                }\n            }\n        });\n        return canvas;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTVZUSW1hZ2VyeVByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29sY3MvTVZUSW1hZ2VyeVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sS0FBSyxFQUFFLEVBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxNQUFNLE1BQU0sb0JBQW9CLENBQUM7QUFDeEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUMsR0FBRyxJQUFJLGFBQWEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLFFBQVEsTUFBTSx3QkFBd0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZ0JBQWdCLElBQUksd0JBQXdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsbUJBQW1CLElBQUksc0JBQXNCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRixPQUFPLGFBQWEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQWE5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQixZQUFZLEVBQUUsYUFBYTtDQUM1QixDQUFDLENBQUM7QUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3hCLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQztZQUNqQixLQUFLLEVBQUUsTUFBTTtZQUNiLEtBQUssRUFBRSxDQUFDO1NBQ1QsQ0FBQztLQUNILENBQUMsQ0FBQyxDQUFDO0FBR0osTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBa0I7SUFDN0IsSUFBSSxDQUFXO0lBQ2YsWUFBWSxHQUFzQixpQkFBaUIsRUFBRSxDQUFDO0lBQ3RELG1CQUFtQixHQUErQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRixhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsdUJBQXVCLENBQUM7SUFDbkQsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLFVBQVUsQ0FBWTtJQUN0QixjQUFjLENBQVk7SUFDekIsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUNoQixVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbkIsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUNPLFlBQVksQ0FBcUM7SUFDakQsU0FBUyxDQUF1QztJQUNoRCxhQUFhLENBQWM7SUFDM0IsY0FBYyxDQUFnQjtJQUM5QixXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWpEOzs7S0FHQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7O0tBRUM7SUFDRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ00sVUFBVSxHQUFVLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWhEOzs7T0FHRztJQUNNLE1BQU0sQ0FBUztJQUV4QixjQUFjLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFhO1FBQ2hELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOztPQUVHO0lBQ00sS0FBSyxDQUFRO0lBRXRCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksaUJBQWlCO1FBQ25CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCwrQkFBK0I7SUFDL0I7Ozs7OztPQU1HO0lBQ0gsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFEQUFxRDtJQUNyRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsWUFBWSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsS0FBYSxFQUFFLFNBQWlCLEVBQUUsUUFBZ0I7UUFDbkYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVksT0FBbUI7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM3Qyw0REFBNEQ7UUFDNUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsYUFBYSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7b0JBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFtQjtRQUN4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBb0IsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMxQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDckIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sT0FBTyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztRQUM3QyxxREFBcUQ7UUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxZQUFZLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBaUI7UUFDN0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxPQUFPLENBQUM7WUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNsQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDbkIsd0RBQXdEO29CQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDeEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQzFGLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDLENBQUMsQ0FBQztnQkFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDakUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3ZCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsbURBQW1EO1lBQ25ELGFBQWE7WUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQXlCLEVBQUUsYUFBNEIsRUFBRSxVQUFrQjtRQUMzRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3BHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNyQixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzVDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDdkIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUIsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9CLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YifQ==","import { linear as linearEasing } from 'ol/easing.js';\nimport olLayerTile from 'ol/layer/Tile.js';\nimport olLayerImage from 'ol/layer/Image.js';\nimport { get as getProjection, transformExtent } from 'ol/proj.js';\nimport olSourceImageStatic from 'ol/source/ImageStatic.js';\nimport olSourceImageWMS from 'ol/source/ImageWMS.js';\nimport olSourceTileImage from 'ol/source/TileImage.js';\nimport olSourceTileWMS from 'ol/source/TileWMS.js';\nimport olSourceVectorTile from 'ol/source/VectorTile.js';\nimport olcsCoreOLImageryProvider from './core/OLImageryProvider.js';\nimport { getSourceProjection } from './util.js';\nimport MVTImageryProvider from './MVTImageryProvider.js';\nimport VectorTileLayer from 'ol/layer/VectorTile.js';\nimport { getCenter as getExtentCenter } from 'ol/extent.js';\n/**\n * Compute the pixel width and height of a point in meters using the\n * camera frustum.\n */\nexport function computePixelSizeAtCoordinate(scene, target) {\n    const camera = scene.camera;\n    const canvas = scene.canvas;\n    const frustum = camera.frustum;\n    const distance = Cesium.Cartesian3.magnitude(Cesium.Cartesian3.subtract(camera.position, target, new Cesium.Cartesian3()));\n    // @ts-ignore TS2341\n    return frustum.getPixelDimensions(canvas.clientWidth, canvas.clientHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\n}\n/**\n * Compute bounding box around a target point.\n * @param {!Cesium.Scene} scene\n * @param {!Cesium.Cartesian3} target\n * @param {number} amount Half the side of the box, in pixels.\n * @return {Array<Cesium.Cartographic>} bottom left and top right\n * coordinates of the box\n */\nexport function computeBoundingBoxAtTarget(scene, target, amount) {\n    const pixelSize = computePixelSizeAtCoordinate(scene, target);\n    const transform = Cesium.Transforms.eastNorthUpToFixedFrame(target);\n    const bottomLeft = Cesium.Matrix4.multiplyByPoint(transform, new Cesium.Cartesian3(-pixelSize.x * amount, -pixelSize.y * amount, 0), new Cesium.Cartesian3());\n    const topRight = Cesium.Matrix4.multiplyByPoint(transform, new Cesium.Cartesian3(pixelSize.x * amount, pixelSize.y * amount, 0), new Cesium.Cartesian3());\n    return Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray([bottomLeft, topRight]);\n}\nexport function applyHeightOffsetToGeometry(geometry, height) {\n    geometry.applyTransform((input, output, stride) => {\n        console.assert(input === output);\n        if (stride !== undefined && stride >= 3) {\n            for (let i = 0; i < output.length; i += stride) {\n                output[i + 2] = output[i + 2] + height;\n            }\n        }\n        return output;\n    });\n}\nexport function createMatrixAtCoordinates(coordinates, rotation = 0, translation = Cesium.Cartesian3.ZERO, scale = new Cesium.Cartesian3(1, 1, 1)) {\n    const position = ol4326CoordinateToCesiumCartesian(coordinates);\n    const rawMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);\n    const quaternion = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, -rotation);\n    const rotationMatrix = Cesium.Matrix4.fromTranslationQuaternionRotationScale(translation, quaternion, scale);\n    return Cesium.Matrix4.multiply(rawMatrix, rotationMatrix, new Cesium.Matrix4());\n}\nexport function rotateAroundAxis(camera, angle, axis, transform, opt_options) {\n    const clamp = Cesium.Math.clamp;\n    const defaultValue = Cesium.defaultValue;\n    const options = opt_options;\n    const duration = defaultValue(options?.duration, 500); // ms\n    const easing = defaultValue(options?.easing, linearEasing);\n    const callback = options?.callback;\n    let lastProgress = 0;\n    const oldTransform = new Cesium.Matrix4();\n    const start = Date.now();\n    const step = function () {\n        const timestamp = Date.now();\n        const timeDifference = timestamp - start;\n        const progress = easing(clamp(timeDifference / duration, 0, 1));\n        console.assert(progress >= lastProgress);\n        camera.transform.clone(oldTransform);\n        const stepAngle = (progress - lastProgress) * angle;\n        lastProgress = progress;\n        camera.lookAtTransform(transform);\n        camera.rotate(axis, stepAngle);\n        camera.lookAtTransform(oldTransform);\n        if (progress < 1) {\n            window.requestAnimationFrame(step);\n        }\n        else {\n            if (callback) {\n                callback();\n            }\n        }\n    };\n    window.requestAnimationFrame(step);\n}\nexport function setHeadingUsingBottomCenter(scene, heading, bottomCenter, options) {\n    const camera = scene.camera;\n    // Compute the camera position to zenith quaternion\n    const angleToZenith = computeAngleToZenith(scene, bottomCenter);\n    const axis = camera.right;\n    const quaternion = Cesium.Quaternion.fromAxisAngle(axis, angleToZenith);\n    const rotation = Cesium.Matrix3.fromQuaternion(quaternion);\n    // Get the zenith point from the rotation of the position vector\n    const vector = new Cesium.Cartesian3();\n    Cesium.Cartesian3.subtract(camera.position, bottomCenter, vector);\n    const zenith = new Cesium.Cartesian3();\n    Cesium.Matrix3.multiplyByVector(rotation, vector, zenith);\n    Cesium.Cartesian3.add(zenith, bottomCenter, zenith);\n    // Actually rotate around the zenith normal\n    const transform = Cesium.Matrix4.fromTranslation(zenith);\n    rotateAroundAxis(camera, heading, zenith, transform, options);\n}\n/**\n * Get the 3D position of the given pixel of the canvas.\n */\nexport function pickOnTerrainOrEllipsoid(scene, pixel) {\n    const ray = scene.camera.getPickRay(pixel);\n    const target = scene.globe.pick(ray, scene);\n    return target || scene.camera.pickEllipsoid(pixel);\n}\n/**\n * Get the 3D position of the point at the bottom-center of the screen.\n */\nexport function pickBottomPoint(scene) {\n    const canvas = scene.canvas;\n    const bottom = new Cesium.Cartesian2(canvas.clientWidth / 2, canvas.clientHeight);\n    return pickOnTerrainOrEllipsoid(scene, bottom);\n}\n/**\n * Get the 3D position of the point at the center of the screen.\n */\nexport function pickCenterPoint(scene) {\n    const canvas = scene.canvas;\n    const center = new Cesium.Cartesian2(canvas.clientWidth / 2, canvas.clientHeight / 2);\n    return pickOnTerrainOrEllipsoid(scene, center);\n}\n/**\n * Compute the signed tilt angle on globe, between the opposite of the\n * camera direction and the target normal. Return undefined if there is no\n */\nexport function computeSignedTiltAngleOnGlobe(scene) {\n    const camera = scene.camera;\n    const ray = new Cesium.Ray(camera.position, camera.direction);\n    let target = scene.globe.pick(ray, scene);\n    if (!target) {\n        // no tiles in the area were loaded?\n        const ellipsoid = Cesium.Ellipsoid.WGS84;\n        const obj = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid);\n        if (obj) {\n            target = Cesium.Ray.getPoint(ray, obj.start);\n        }\n    }\n    if (!target) {\n        return undefined;\n    }\n    const normal = new Cesium.Cartesian3();\n    Cesium.Ellipsoid.WGS84.geocentricSurfaceNormal(target, normal);\n    const angleBetween = signedAngleBetween;\n    const angle = angleBetween(camera.direction, normal, camera.right) - Math.PI;\n    return Cesium.Math.convertLongitudeRange(angle);\n}\n/**\n * Compute the ray from the camera to the bottom-center of the screen.\n */\nexport function bottomFovRay(scene) {\n    const camera = scene.camera;\n    // @ts-ignore TS2341\n    const fovy2 = camera.frustum.fovy / 2;\n    const direction = camera.direction;\n    const rotation = Cesium.Quaternion.fromAxisAngle(camera.right, fovy2);\n    const matrix = Cesium.Matrix3.fromQuaternion(rotation);\n    const vector = new Cesium.Cartesian3();\n    Cesium.Matrix3.multiplyByVector(matrix, direction, vector);\n    return new Cesium.Ray(camera.position, vector);\n}\n/**\n * Compute the angle between two Cartesian3.\n */\nexport function signedAngleBetween(first, second, normal) {\n    // We are using the dot for the angle.\n    // Then the cross and the dot for the sign.\n    const a = new Cesium.Cartesian3();\n    const b = new Cesium.Cartesian3();\n    const c = new Cesium.Cartesian3();\n    Cesium.Cartesian3.normalize(first, a);\n    Cesium.Cartesian3.normalize(second, b);\n    Cesium.Cartesian3.cross(a, b, c);\n    const cosine = Cesium.Cartesian3.dot(a, b);\n    const sine = Cesium.Cartesian3.magnitude(c);\n    // Sign of the vector product and the orientation normal\n    const sign = Cesium.Cartesian3.dot(normal, c);\n    const angle = Math.atan2(sine, cosine);\n    return sign >= 0 ? angle : -angle;\n}\n/**\n * Compute the rotation angle around a given point, needed to reach the\n * zenith position.\n * At a zenith position, the camera direction is going througth the earth\n * center and the frustrum bottom ray is going through the chosen pivot\n * point.\n * The bottom-center of the screen is a good candidate for the pivot point.\n */\nexport function computeAngleToZenith(scene, pivot) {\n    // This angle is the sum of the angles 'fy' and 'a', which are defined\n    // using the pivot point and its surface normal.\n    //        Zenith |    camera\n    //           \\   |   /\n    //            \\fy|  /\n    //             \\ |a/\n    //              \\|/pivot\n    const camera = scene.camera;\n    // @ts-ignore TS2341\n    const fy = camera.frustum.fovy / 2;\n    const ray = bottomFovRay(scene);\n    const direction = Cesium.Cartesian3.clone(ray.direction);\n    Cesium.Cartesian3.negate(direction, direction);\n    const normal = new Cesium.Cartesian3();\n    Cesium.Ellipsoid.WGS84.geocentricSurfaceNormal(pivot, normal);\n    const left = new Cesium.Cartesian3();\n    Cesium.Cartesian3.negate(camera.right, left);\n    const a = signedAngleBetween(normal, direction, left);\n    return a + fy;\n}\n/**\n * Convert an OpenLayers extent to a Cesium rectangle.\n * @param {ol.Extent} extent Extent.\n * @param {ol.ProjectionLike} projection Extent projection.\n * @return {Cesium.Rectangle} The corresponding Cesium rectangle.\n */\nexport function extentToRectangle(extent, projection) {\n    if (extent && projection) {\n        const ext = transformExtent(extent, projection, 'EPSG:4326');\n        return Cesium.Rectangle.fromDegrees(ext[0], ext[1], ext[2], ext[3]);\n    }\n    else {\n        return null;\n    }\n}\nexport function sourceToImageryProvider(olMap, source, viewProj, olLayer) {\n    const skip = source.get('olcs_skip');\n    if (skip) {\n        return null;\n    }\n    let provider = null;\n    // Convert ImageWMS to TileWMS\n    if (source instanceof olSourceImageWMS && source.getUrl()) {\n        const sourceProps = {\n            'olcs_proxy': source.get('olcs_proxy'),\n            'olcs_extent': source.get('olcs_extent'),\n            'olcs_projection': source.get('olcs_projection'),\n            'olcs.imagesource': source\n        };\n        const imageLoadFunction = source.getImageLoadFunction();\n        const tileLoadFunction = source.get('olcs_tileLoadFunction') || function tileLoadFunction(tile, src) {\n            // An imageLoadFunction takes an ImageWrapperm which has a getImage method.\n            // A tile also has a getImage method.\n            // We incorrectly passe a tile as an ImageWrapper and hopes for the best.\n            imageLoadFunction(tile, src);\n        };\n        source = new olSourceTileWMS({\n            url: source.getUrl(),\n            attributions: source.getAttributions(),\n            projection: source.getProjection(),\n            tileLoadFunction,\n            params: source.getParams()\n        });\n        source.setProperties(sourceProps);\n    }\n    if (source instanceof olSourceTileImage) {\n        let projection = getSourceProjection(source);\n        if (!projection) {\n            // if not explicit, assume the same projection as view\n            projection = viewProj;\n        }\n        if (isCesiumProjection(projection)) {\n            provider = new olcsCoreOLImageryProvider(olMap, source, viewProj);\n        }\n        // Projection not supported by Cesium\n        else {\n            return null;\n        }\n    }\n    else if (source instanceof olSourceImageStatic) {\n        let projection = getSourceProjection(source);\n        if (!projection) {\n            projection = viewProj;\n        }\n        if (isCesiumProjection(projection)) {\n            const rectangle = Cesium.Rectangle.fromDegrees(source.getImageExtent()[0], source.getImageExtent()[1], source.getImageExtent()[2], source.getImageExtent()[3], new Cesium.Rectangle());\n            provider = new Cesium.SingleTileImageryProvider({\n                url: source.getUrl(),\n                rectangle\n            });\n        }\n        // Projection not supported by Cesium\n        else {\n            return null;\n        }\n    }\n    else if (source instanceof olSourceVectorTile && olLayer instanceof VectorTileLayer) {\n        let projection = getSourceProjection(source);\n        if (!projection) {\n            projection = viewProj;\n        }\n        if (skip === false) {\n            // MVT is experimental, it should be whitelisted to be synchronized\n            const fromCode = projection.getCode().split(':')[1];\n            // @ts-ignore TS2341\n            const urls = source.urls.map(u => u.replace(fromCode, '3857'));\n            const extent = olLayer.getExtent();\n            const rectangle = extentToRectangle(extent, projection);\n            const minimumLevel = source.get('olcs_minimumLevel');\n            const attributionsFunction = source.getAttributions();\n            const styleFunction = olLayer.getStyleFunction();\n            let credit;\n            if (extent && attributionsFunction) {\n                const center = getExtentCenter(extent);\n                credit = attributionsFunctionToCredits(attributionsFunction, 0, center, extent)[0];\n            }\n            provider = new MVTImageryProvider({\n                credit,\n                rectangle,\n                minimumLevel,\n                styleFunction,\n                urls\n            });\n            return provider;\n        }\n        return null; // FIXME: it is disabled by default right now\n    }\n    else {\n        // sources other than TileImage|Imageexport function are currently not supported\n        return null;\n    }\n    return provider;\n}\n/**\n * Creates Cesium.ImageryLayer best corresponding to the given ol.layer.Layer.\n * Only supports raster layers and export function images\n */\nexport function tileLayerToImageryLayer(olMap, olLayer, viewProj) {\n    if (!(olLayer instanceof olLayerTile) && !(olLayer instanceof olLayerImage) &&\n        !(olLayer instanceof VectorTileLayer)) {\n        return null;\n    }\n    const source = olLayer.getSource();\n    if (!source) {\n        return null;\n    }\n    let provider = source.get('olcs_provider');\n    if (!provider) {\n        provider = sourceToImageryProvider(olMap, source, viewProj, olLayer);\n    }\n    if (!provider) {\n        return null;\n    }\n    const layerOptions = {};\n    const forcedExtent = (olLayer.get('olcs_extent'));\n    const ext = forcedExtent || olLayer.getExtent();\n    if (ext) {\n        layerOptions.rectangle = extentToRectangle(ext, viewProj);\n    }\n    const cesiumLayer = new Cesium.ImageryLayer(provider, layerOptions);\n    return cesiumLayer;\n}\n/**\n * Synchronizes the layer rendering properties (opacity, visible)\n * to the given Cesium ImageryLayer.\n */\nexport function updateCesiumLayerProperties(olLayerWithParents, csLayer) {\n    let opacity = 1;\n    let visible = true;\n    [olLayerWithParents.layer].concat(olLayerWithParents.parents).forEach((olLayer) => {\n        const layerOpacity = olLayer.getOpacity();\n        if (layerOpacity !== undefined) {\n            opacity *= layerOpacity;\n        }\n        const layerVisible = olLayer.getVisible();\n        if (layerVisible !== undefined) {\n            visible = visible && layerVisible;\n        }\n    });\n    csLayer.alpha = opacity;\n    csLayer.show = visible;\n}\n/**\n * Convert a 2D or 3D OpenLayers coordinate to Cesium.\n */\nexport function ol4326CoordinateToCesiumCartesian(coordinate) {\n    const coo = coordinate;\n    return coo.length > 2 ?\n        Cesium.Cartesian3.fromDegrees(coo[0], coo[1], coo[2]) :\n        Cesium.Cartesian3.fromDegrees(coo[0], coo[1]);\n}\n/**\n * Convert an array of 2D or 3D OpenLayers coordinates to Cesium.\n */\nexport function ol4326CoordinateArrayToCsCartesians(coordinates) {\n    console.assert(coordinates !== null);\n    const toCartesian = ol4326CoordinateToCesiumCartesian;\n    const cartesians = [];\n    for (let i = 0; i < coordinates.length; ++i) {\n        cartesians.push(toCartesian(coordinates[i]));\n    }\n    return cartesians;\n}\n/**\n * Reproject an OpenLayers geometry to EPSG:4326 if needed.\n * The geometry will be cloned only when original projection is not EPSG:4326\n * and the properties will be shallow copied.\n */\nexport function olGeometryCloneTo4326(geometry, projection) {\n    console.assert(projection);\n    const proj4326 = getProjection('EPSG:4326');\n    const proj = getProjection(projection);\n    if (proj.getCode() !== proj4326.getCode()) {\n        const properties = geometry.getProperties();\n        geometry = geometry.clone();\n        geometry.transform(proj, proj4326);\n        geometry.setProperties(properties);\n    }\n    return geometry;\n}\n/**\n * Convert an OpenLayers color to Cesium.\n */\nexport function convertColorToCesium(olColor) {\n    olColor = olColor || 'black';\n    if (Array.isArray(olColor)) {\n        return new Cesium.Color(Cesium.Color.byteToFloat(olColor[0]), Cesium.Color.byteToFloat(olColor[1]), Cesium.Color.byteToFloat(olColor[2]), olColor[3]);\n    }\n    else if (typeof olColor == 'string') {\n        return Cesium.Color.fromCssColorString(olColor);\n    }\n    else if (olColor instanceof CanvasPattern || olColor instanceof CanvasGradient) {\n        // Render the CanvasPattern/CanvasGradient into a canvas that will be sent to Cesium as material\n        const canvas = document.createElement('canvas');\n        const ctx = canvas.getContext('2d');\n        canvas.width = canvas.height = 256;\n        ctx.fillStyle = olColor;\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n        return new Cesium.ImageMaterialProperty({\n            image: canvas\n        });\n    }\n    console.assert(false, 'impossible');\n}\n/**\n * Convert an OpenLayers url to Cesium.\n */\nexport function convertUrlToCesium(url) {\n    let subdomains = '';\n    const re = /\\{(\\d|[a-z])-(\\d|[a-z])\\}/;\n    const match = re.exec(url);\n    if (match) {\n        url = url.replace(re, '{s}');\n        const startCharCode = match[1].charCodeAt(0);\n        const stopCharCode = match[2].charCodeAt(0);\n        let charCode;\n        for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {\n            subdomains += String.fromCharCode(charCode);\n        }\n    }\n    return {\n        url,\n        subdomains\n    };\n}\n/**\n * Animate the return to a top-down view from the zenith.\n * The camera is rotated to orient to the North.\n */\nexport function resetToNorthZenith(map, scene) {\n    return new Promise((resolve, reject) => {\n        const camera = scene.camera;\n        const pivot = pickBottomPoint(scene);\n        if (!pivot) {\n            reject('Could not get bottom pivot');\n            return;\n        }\n        const currentHeading = map.getView().getRotation();\n        if (currentHeading === undefined) {\n            reject('The view is not initialized');\n            return;\n        }\n        const angle = computeAngleToZenith(scene, pivot);\n        // Point to North\n        setHeadingUsingBottomCenter(scene, currentHeading, pivot);\n        // Go to zenith\n        const transform = Cesium.Matrix4.fromTranslation(pivot);\n        const axis = camera.right;\n        const options = {\n            callback: () => {\n                const view = map.getView();\n                normalizeView(view);\n                resolve(undefined);\n            }\n        };\n        rotateAroundAxis(camera, -angle, axis, transform, options);\n    });\n}\n/**\n * @param {!Cesium.Scene} scene\n * @param {number} angle in radian\n * @return {Promise<undefined>}\n * @api\n */\nexport function rotateAroundBottomCenter(scene, angle) {\n    return new Promise((resolve, reject) => {\n        const camera = scene.camera;\n        const pivot = pickBottomPoint(scene);\n        if (!pivot) {\n            reject('could not get bottom pivot');\n            return;\n        }\n        const options = { callback: () => resolve(undefined) };\n        const transform = Cesium.Matrix4.fromTranslation(pivot);\n        const axis = camera.right;\n        rotateAroundAxis(camera, -angle, axis, transform, options);\n    });\n}\n/**\n * Set the OpenLayers view to a specific rotation and\n * the nearest resolution.\n */\nexport function normalizeView(view, angle = 0) {\n    const resolution = view.getResolution();\n    view.setRotation(angle);\n    // @ts-ignore TS2341\n    if (view.constrainResolution) {\n        // @ts-ignore TS2341\n        view.setResolution(view.constrainResolution(resolution));\n    }\n    else {\n        view.setResolution(view.getConstrainedResolution(resolution));\n    }\n}\n/**\n * Check if the given projection is managed by Cesium (WGS84 or Mercator Spheric)\n */\nexport function isCesiumProjection(projection) {\n    const is3857 = projection.getCode() === 'EPSG:3857';\n    const is4326 = projection.getCode() === 'EPSG:4326';\n    return is3857 || is4326;\n}\nexport function attributionsFunctionToCredits(attributionsFunction, zoom, center, extent) {\n    if (!attributionsFunction) {\n        return [];\n    }\n    let attributions = attributionsFunction({\n        viewState: { zoom, center, projection: undefined, resolution: undefined, rotation: undefined },\n        extent,\n    });\n    if (!Array.isArray(attributions)) {\n        attributions = [attributions];\n    }\n    return attributions.map(html => new Cesium.Credit(html, true));\n}\n/**\n * calculate the distance between camera and centerpoint based on the resolution and latitude value\n */\nexport function calcDistanceForResolution(resolution, latitude, scene, projection) {\n    const canvas = scene.canvas;\n    const camera = scene.camera;\n    // @ts-ignore TS2341\n    const fovy = camera.frustum.fovy; // vertical field of view\n    console.assert(!isNaN(fovy));\n    const metersPerUnit = projection.getMetersPerUnit();\n    // number of \"map units\" visible in 2D (vertically)\n    const visibleMapUnits = resolution * canvas.clientHeight;\n    // The metersPerUnit does not take latitude into account, but it should\n    // be lower with increasing latitude -- we have to compensate.\n    // In 3D it is not possible to maintain the resolution at more than one point,\n    // so it only makes sense to use the latitude of the \"target\" point.\n    const relativeCircumference = Math.cos(Math.abs(latitude));\n    // how many meters should be visible in 3D\n    const visibleMeters = visibleMapUnits * metersPerUnit * relativeCircumference;\n    // distance required to view the calculated length in meters\n    //\n    //  fovy/2\n    //    |\\\n    //  x | \\\n    //    |--\\\n    // visibleMeters/2\n    const requiredDistance = (visibleMeters / 2) / Math.tan(fovy / 2);\n    // NOTE: This calculation is not absolutely precise, because metersPerUnit\n    // is a great simplification. It does not take ellipsoid/terrain into account.\n    return requiredDistance;\n}\n/**\n * calculate the resolution based on a distance(camera to position) and latitude value\n */\nexport function calcResolutionForDistance(distance, latitude, scene, projection) {\n    // See the reverse calculation (calcDistanceForResolution) for details\n    const canvas = scene.canvas;\n    const camera = scene.camera;\n    // @ts-ignore TS2341\n    const fovy = camera.frustum.fovy; // vertical field of view\n    console.assert(!isNaN(fovy));\n    const metersPerUnit = projection.getMetersPerUnit();\n    const visibleMeters = 2 * distance * Math.tan(fovy / 2);\n    const relativeCircumference = Math.cos(Math.abs(latitude));\n    const visibleMapUnits = visibleMeters / metersPerUnit / relativeCircumference;\n    const resolution = visibleMapUnits / canvas.clientHeight;\n    return resolution;\n}\n/**\n * Constrain the camera so that it stays close to the bounding sphere of the map extent.\n * Near the ground the allowed distance is shorter.\n */\nexport function limitCameraToBoundingSphere(camera, boundingSphere, ratio) {\n    let blockLimiter = false;\n    return function () {\n        if (!blockLimiter) {\n            const position = camera.position;\n            const carto = Cesium.Cartographic.fromCartesian(position);\n            if (Cesium.Cartesian3.distance(boundingSphere.center, position) > boundingSphere.radius * ratio(carto.height)) {\n                // @ts-ignore TS2339: FIXME, there is no flying property in Camera\n                const currentlyFlying = camera.flying;\n                if (currentlyFlying === true) {\n                    // There is a flying property and its value is true\n                    return;\n                }\n                else {\n                    blockLimiter = true;\n                    const unblockLimiter = () => (blockLimiter = false);\n                    camera.flyToBoundingSphere(boundingSphere, {\n                        complete: unblockLimiter,\n                        cancel: unblockLimiter,\n                    });\n                }\n            }\n        }\n    };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbGNzL2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sSUFBSSxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxXQUFXLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFDLEdBQUcsSUFBSSxhQUFhLEVBQXVCLGVBQWUsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN0RixPQUFPLG1CQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sZ0JBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxpQkFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLGtCQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBRXpELE9BQU8seUJBQXlCLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzlDLE9BQU8sa0JBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFjLFNBQVMsSUFBSSxlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFtRHZFOzs7R0FHRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxLQUFZLEVBQUUsTUFBa0I7SUFDM0UsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzVCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDL0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUs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","import { unByKey as olObservableUnByKey } from 'ol/Observable.js';\nimport { toRadians, toDegrees } from './math.js';\nimport { getTransform } from 'ol/proj.js';\nimport { pickCenterPoint, calcDistanceForResolution, calcResolutionForDistance } from './core.js';\n/**\n * @param input Input coordinate array.\n * @param opt_output Output array of coordinate values.\n * @param opt_dimension Dimension.\n * @return Input coordinate array (same array as input).\n */\nexport function identityProjection(input, opt_output, opt_dimension) {\n    const dim = opt_dimension || input.length;\n    if (opt_output) {\n        for (let i = 0; i < dim; ++i) {\n            opt_output[i] = input[i];\n        }\n    }\n    return input;\n}\nexport default class Camera {\n    scene_;\n    cam_;\n    map_;\n    view_;\n    viewListenKey_ = null;\n    toLonLat_ = identityProjection;\n    fromLonLat_ = identityProjection;\n    /**\n     * 0 -- topdown, PI/2 -- the horizon\n     */\n    tilt_ = 0;\n    distance_ = 0;\n    lastCameraViewMatrix_ = null;\n    /**\n     * This is used to discard change events on view caused by updateView method.\n     */\n    viewUpdateInProgress_ = false;\n    /**\n     * This object takes care of additional 3d-specific properties of the view and\n     * ensures proper synchronization with the underlying raw Cesium.Camera object.\n     */\n    constructor(scene, map) {\n        this.scene_ = scene;\n        this.cam_ = scene.camera;\n        this.map_ = map;\n        this.map_.on('change:view', (e) => {\n            this.setView_(this.map_.getView());\n        });\n        this.setView_(this.map_.getView());\n    }\n    destroy() {\n        olObservableUnByKey(this.viewListenKey_);\n        this.viewListenKey_ = null;\n    }\n    /**\n     * @param {?ol.View} view New view to use.\n     * @private\n     */\n    setView_(view) {\n        olObservableUnByKey(this.viewListenKey_);\n        this.viewListenKey_ = null;\n        this.view_ = view;\n        if (view) {\n            const toLonLat = getTransform(view.getProjection(), 'EPSG:4326');\n            const fromLonLat = getTransform('EPSG:4326', view.getProjection());\n            console.assert(toLonLat && fromLonLat);\n            this.toLonLat_ = toLonLat;\n            this.fromLonLat_ = fromLonLat;\n            this.viewListenKey_ = view.on('propertychange', e => this.handleViewChangedEvent_());\n            this.readFromView();\n        }\n        else {\n            this.toLonLat_ = identityProjection;\n            this.fromLonLat_ = identityProjection;\n        }\n    }\n    handleViewChangedEvent_() {\n        if (!this.viewUpdateInProgress_) {\n            this.readFromView();\n        }\n    }\n    /**\n     * @deprecated\n     * @param heading In radians.\n     */\n    setHeading(heading) {\n        if (!this.view_) {\n            return;\n        }\n        this.view_.setRotation(heading);\n    }\n    /**\n     * @deprecated\n     * @return Heading in radians.\n     */\n    getHeading() {\n        if (!this.view_) {\n            return undefined;\n        }\n        const rotation = this.view_.getRotation();\n        return rotation || 0;\n    }\n    /**\n     * @param tilt In radians.\n     */\n    setTilt(tilt) {\n        this.tilt_ = tilt;\n        this.updateCamera_();\n    }\n    /**\n     * @return Tilt in radians.\n     */\n    getTilt() {\n        return this.tilt_;\n    }\n    /**\n     * @param distance In meters.\n     */\n    setDistance(distance) {\n        this.distance_ = distance;\n        this.updateCamera_();\n        this.updateView();\n    }\n    /**\n     * @return Distance in meters.\n     */\n    getDistance() {\n        return this.distance_;\n    }\n    /**\n     * @deprecated\n     * Shortcut for ol.View.setCenter().\n     * @param center Same projection as the ol.View.\n     */\n    setCenter(center) {\n        if (!this.view_) {\n            return;\n        }\n        this.view_.setCenter(center);\n    }\n    /**\n     * @deprecated\n     * Shortcut for ol.View.getCenter().\n     * @return {ol.Coordinate|undefined} Same projection as the ol.View.\n     * @api\n     */\n    getCenter() {\n        if (!this.view_) {\n            return undefined;\n        }\n        return this.view_.getCenter();\n    }\n    /**\n     * Sets the position of the camera.\n     * @param position Same projection as the ol.View.\n     */\n    setPosition(position) {\n        if (!this.toLonLat_) {\n            return;\n        }\n        const ll = this.toLonLat_(position);\n        console.assert(ll);\n        const carto = new Cesium.Cartographic(toRadians(ll[0]), toRadians(ll[1]), this.getAltitude());\n        this.cam_.setView({\n            destination: Cesium.Ellipsoid.WGS84.cartographicToCartesian(carto)\n        });\n        this.updateView();\n    }\n    /**\n     * Calculates position under the camera.\n     * @return Coordinates in same projection as the ol.View.\n     * @api\n     */\n    getPosition() {\n        if (!this.fromLonLat_) {\n            return undefined;\n        }\n        const carto = Cesium.Ellipsoid.WGS84.cartesianToCartographic(this.cam_.position);\n        const pos = this.fromLonLat_([\n            toDegrees(carto.longitude),\n            toDegrees(carto.latitude)\n        ]);\n        console.assert(pos);\n        return pos;\n    }\n    /**\n     * @param altitude In meters.\n     */\n    setAltitude(altitude) {\n        const carto = Cesium.Ellipsoid.WGS84.cartesianToCartographic(this.cam_.position);\n        carto.height = altitude;\n        this.cam_.position = Cesium.Ellipsoid.WGS84.cartographicToCartesian(carto);\n        this.updateView();\n    }\n    /**\n     * @return Altitude in meters.\n     */\n    getAltitude() {\n        const carto = Cesium.Ellipsoid.WGS84.cartesianToCartographic(this.cam_.position);\n        return carto.height;\n    }\n    /**\n     * Updates the state of the underlying Cesium.Camera\n     * according to the current values of the properties.\n     */\n    updateCamera_() {\n        if (!this.view_ || !this.toLonLat_) {\n            return;\n        }\n        const center = this.view_.getCenter();\n        if (!center) {\n            return;\n        }\n        const ll = this.toLonLat_(center);\n        console.assert(ll);\n        const carto = new Cesium.Cartographic(toRadians(ll[0]), toRadians(ll[1]));\n        if (this.scene_.globe) {\n            const height = this.scene_.globe.getHeight(carto);\n            carto.height = height || 0;\n        }\n        const destination = Cesium.Ellipsoid.WGS84.cartographicToCartesian(carto);\n        const orientation = {\n            pitch: this.tilt_ - Cesium.Math.PI_OVER_TWO,\n            heading: -this.view_.getRotation(),\n            roll: undefined\n        };\n        this.cam_.setView({\n            destination,\n            orientation\n        });\n        this.cam_.moveBackward(this.distance_);\n        this.checkCameraChange(true);\n    }\n    /**\n     * Calculates the values of the properties from the current ol.View state.\n     */\n    readFromView() {\n        if (!this.view_ || !this.toLonLat_) {\n            return;\n        }\n        const center = this.view_.getCenter();\n        if (center === undefined || center === null) {\n            return;\n        }\n        const ll = this.toLonLat_(center);\n        console.assert(ll);\n        const resolution = this.view_.getResolution();\n        this.distance_ = this.calcDistanceForResolution(resolution || 0, toRadians(ll[1]));\n        this.updateCamera_();\n    }\n    /**\n     * Calculates the values of the properties from the current Cesium.Camera state.\n     * Modifies the center, resolution and rotation properties of the view.\n     */\n    updateView() {\n        if (!this.view_ || !this.fromLonLat_) {\n            return;\n        }\n        this.viewUpdateInProgress_ = true;\n        // target & distance\n        const ellipsoid = Cesium.Ellipsoid.WGS84;\n        const scene = this.scene_;\n        const target = pickCenterPoint(scene);\n        let bestTarget = target;\n        if (!bestTarget) {\n            //TODO: how to handle this properly ?\n            const globe = scene.globe;\n            const carto = this.cam_.positionCartographic.clone();\n            const height = globe.getHeight(carto);\n            carto.height = height || 0;\n            bestTarget = Cesium.Ellipsoid.WGS84.cartographicToCartesian(carto);\n        }\n        this.distance_ = Cesium.Cartesian3.distance(bestTarget, this.cam_.position);\n        const bestTargetCartographic = ellipsoid.cartesianToCartographic(bestTarget);\n        this.view_.setCenter(this.fromLonLat_([\n            toDegrees(bestTargetCartographic.longitude),\n            toDegrees(bestTargetCartographic.latitude)\n        ]));\n        // resolution\n        this.view_.setResolution(this.calcResolutionForDistance(this.distance_, bestTargetCartographic ? bestTargetCartographic.latitude : 0));\n        /*\n         * Since we are positioning the target, the values of heading and tilt\n         * need to be calculated _at the target_.\n         */\n        if (target) {\n            const pos = this.cam_.position;\n            // normal to the ellipsoid at the target\n            const targetNormal = new Cesium.Cartesian3();\n            ellipsoid.geocentricSurfaceNormal(target, targetNormal);\n            // vector from the target to the camera\n            const targetToCamera = new Cesium.Cartesian3();\n            Cesium.Cartesian3.subtract(pos, target, targetToCamera);\n            Cesium.Cartesian3.normalize(targetToCamera, targetToCamera);\n            // HEADING\n            const up = this.cam_.up;\n            const right = this.cam_.right;\n            const normal = new Cesium.Cartesian3(-target.y, target.x, 0); // what is it?\n            const heading = Cesium.Cartesian3.angleBetween(right, normal);\n            const cross = Cesium.Cartesian3.cross(target, up, new Cesium.Cartesian3());\n            const orientation = cross.z;\n            this.view_.setRotation((orientation < 0 ? heading : -heading));\n            // TILT\n            const tiltAngle = Math.acos(Cesium.Cartesian3.dot(targetNormal, targetToCamera));\n            this.tilt_ = isNaN(tiltAngle) ? 0 : tiltAngle;\n        }\n        else {\n            // fallback when there is no target\n            this.view_.setRotation(this.cam_.heading);\n            this.tilt_ = -this.cam_.pitch + Math.PI / 2;\n        }\n        // delay resetting the guard flag to account for asynchronous event generation in ol maps\n        setTimeout(() => this.viewUpdateInProgress_ = false, 1000);\n    }\n    /**\n     * Check if the underlying camera state has changed and ensure synchronization.\n     * @param opt_dontSync Do not synchronize the view.\n     */\n    checkCameraChange(opt_dontSync) {\n        const old = this.lastCameraViewMatrix_;\n        const current = this.cam_.viewMatrix;\n        if (!old || !Cesium.Matrix4.equalsEpsilon(old, current, 1e-7)) {\n            this.lastCameraViewMatrix_ = current.clone();\n            if (opt_dontSync !== true) {\n                this.updateView();\n            }\n        }\n    }\n    /**\n     * calculate the distance between camera and centerpoint based on the resolution and latitude value\n     * @param resolution Number of map units per pixel.\n     * @param latitude Latitude in radians.\n     * @return The calculated distance.\n     */\n    calcDistanceForResolution(resolution, latitude) {\n        return calcDistanceForResolution(resolution, latitude, this.scene_, this.view_.getProjection());\n    }\n    /**\n     * calculate the resolution based on a distance(camera to position) and latitude value\n     * @param distance\n     * @param latitude\n     * @return} The calculated resolution.\n     */\n    calcResolutionForDistance(distance, latitude) {\n        return calcResolutionForDistance(distance, latitude, this.scene_, this.view_.getProjection());\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29sY3MvQ2FtZXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxPQUFPLElBQUksbUJBQW1CLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxlQUFlLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFLaEc7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBZSxFQUFFLFVBQXFCLEVBQUUsYUFBc0I7SUFDL0YsTUFBTSxHQUFHLEdBQUcsYUFBYSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxNQUFNO0lBQ2pCLE1BQU0sQ0FBUTtJQUNkLElBQUksQ0FBZTtJQUNuQixJQUFJLENBQU07SUFDVixLQUFLLENBQU87SUFFWixjQUFjLEdBQWMsSUFBSSxDQUFDO0lBRWpDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztJQUMvQixXQUFXLEdBQUcsa0JBQWtCLENBQUM7SUFFekM7O09BRUc7SUFDSyxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBQ2xCLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDZCxxQkFBcUIsR0FB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","import { unByKey as olObservableUnByKey } from 'ol/Observable.js';\nimport LayerGroup from 'ol/layer/Group.js';\nimport { getUid } from './util.js';\nexport default class AbstractSynchronizer {\n    map;\n    view;\n    scene;\n    olLayers;\n    mapLayerGroup;\n    /**\n     * Map of OpenLayers layer ids (from getUid) to the Cesium ImageryLayers.\n     * Null value means, that we are unable to create equivalent layers.\n     */\n    layerMap = {};\n    /**\n     * Map of listen keys for OpenLayers layer layers ids (from getUid).\n     */\n    olLayerListenKeys = {};\n    /**\n     * Map of listen keys for OpenLayers layer groups ids (from getUid).\n     */\n    olGroupListenKeys_ = {};\n    constructor(map, scene) {\n        this.map = map;\n        this.view = map.getView();\n        this.scene = scene;\n        this.olLayers = map.getLayerGroup().getLayers();\n        this.mapLayerGroup = map.getLayerGroup();\n    }\n    /**\n     * Destroy all and perform complete synchronization of the layers.\n     */\n    synchronize() {\n        this.destroyAll();\n        this.addLayers_(this.mapLayerGroup);\n    }\n    /**\n     * Order counterparts using the same algorithm as the Openlayers renderer:\n     * z-index then original sequence order.\n     */\n    orderLayers() {\n        // Ordering logics is handled in subclasses.\n    }\n    /**\n     * Add a layer hierarchy.\n     */\n    addLayers_(root) {\n        const fifo = [{\n                layer: root,\n                parents: []\n            }];\n        while (fifo.length > 0) {\n            const olLayerWithParents = fifo.splice(0, 1)[0];\n            const olLayer = olLayerWithParents.layer;\n            const olLayerId = getUid(olLayer).toString();\n            this.olLayerListenKeys[olLayerId] = [];\n            console.assert(!this.layerMap[olLayerId]);\n            let cesiumObjects = null;\n            if (olLayer instanceof LayerGroup) {\n                this.listenForGroupChanges_(olLayer);\n                if (olLayer !== this.mapLayerGroup) {\n                    cesiumObjects = this.createSingleLayerCounterparts(olLayerWithParents);\n                }\n                if (!cesiumObjects) {\n                    olLayer.getLayers().forEach((l) => {\n                        if (l) {\n                            const newOlLayerWithParents = {\n                                layer: l,\n                                parents: olLayer === this.mapLayerGroup ?\n                                    [] :\n                                    [olLayerWithParents.layer].concat(olLayerWithParents.parents)\n                            };\n                            fifo.push(newOlLayerWithParents);\n                        }\n                    });\n                }\n            }\n            else {\n                cesiumObjects = this.createSingleLayerCounterparts(olLayerWithParents);\n                if (!cesiumObjects) {\n                    // keep an eye on the layers that once failed to be added (might work when the layer is updated)\n                    // for example when a source is set after the layer is added to the map\n                    const layerId = olLayerId;\n                    const layerWithParents = olLayerWithParents;\n                    const onLayerChange = () => {\n                        const cesiumObjs = this.createSingleLayerCounterparts(layerWithParents);\n                        if (cesiumObjs) {\n                            // unsubscribe event listener\n                            layerWithParents.layer.un('change', onLayerChange);\n                            this.addCesiumObjects_(cesiumObjs, layerId, layerWithParents.layer);\n                            this.orderLayers();\n                        }\n                    };\n                    this.olLayerListenKeys[olLayerId].push(layerWithParents.layer.on('change', onLayerChange));\n                }\n            }\n            // add Cesium layers\n            if (cesiumObjects) {\n                this.addCesiumObjects_(cesiumObjects, olLayerId, olLayer);\n            }\n        }\n        this.orderLayers();\n    }\n    /**\n     * Add Cesium objects.\n     */\n    addCesiumObjects_(cesiumObjects, layerId, layer) {\n        this.layerMap[layerId] = cesiumObjects;\n        this.olLayerListenKeys[layerId].push(layer.on('change:zIndex', () => this.orderLayers()));\n        cesiumObjects.forEach((cesiumObject) => {\n            this.addCesiumObject(cesiumObject);\n        });\n    }\n    /**\n     * Remove and destroy a single layer.\n     * @param {ol.layer.Layer} layer\n     * @return {boolean} counterpart destroyed\n     */\n    removeAndDestroySingleLayer_(layer) {\n        const uid = getUid(layer).toString();\n        const counterparts = this.layerMap[uid];\n        if (!!counterparts) {\n            counterparts.forEach((counterpart) => {\n                this.removeSingleCesiumObject(counterpart, false);\n                this.destroyCesiumObject(counterpart);\n            });\n            this.olLayerListenKeys[uid].forEach(olObservableUnByKey);\n            delete this.olLayerListenKeys[uid];\n        }\n        delete this.layerMap[uid];\n        return !!counterparts;\n    }\n    /**\n     * Unlisten a single layer group.\n     */\n    unlistenSingleGroup_(group) {\n        if (group === this.mapLayerGroup) {\n            return;\n        }\n        const uid = getUid(group).toString();\n        const keys = this.olGroupListenKeys_[uid];\n        keys.forEach((key) => {\n            olObservableUnByKey(key);\n        });\n        delete this.olGroupListenKeys_[uid];\n        delete this.layerMap[uid];\n    }\n    /**\n     * Remove layer hierarchy.\n     */\n    removeLayer_(root) {\n        if (!!root) {\n            const fifo = [root];\n            while (fifo.length > 0) {\n                const olLayer = fifo.splice(0, 1)[0];\n                const done = this.removeAndDestroySingleLayer_(olLayer);\n                if (olLayer instanceof LayerGroup) {\n                    this.unlistenSingleGroup_(olLayer);\n                    if (!done) {\n                        // No counterpart for the group itself so removing\n                        // each of the child layers.\n                        olLayer.getLayers().forEach((l) => {\n                            fifo.push(l);\n                        });\n                    }\n                }\n            }\n        }\n    }\n    /**\n     * Register listeners for single layer group change.\n     */\n    listenForGroupChanges_(group) {\n        const uuid = getUid(group).toString();\n        console.assert(this.olGroupListenKeys_[uuid] === undefined);\n        const listenKeyArray = [];\n        this.olGroupListenKeys_[uuid] = listenKeyArray;\n        // only the keys that need to be relistened when collection changes\n        let contentKeys = [];\n        const listenAddRemove = (function () {\n            const collection = group.getLayers();\n            if (collection) {\n                contentKeys = [\n                    collection.on('add', (event) => {\n                        this.addLayers_(event.element);\n                    }),\n                    collection.on('remove', (event) => {\n                        this.removeLayer_(event.element);\n                    })\n                ];\n                listenKeyArray.push(...contentKeys);\n            }\n        }).bind(this);\n        listenAddRemove();\n        listenKeyArray.push(group.on('change:layers', (e) => {\n            contentKeys.forEach((el) => {\n                const i = listenKeyArray.indexOf(el);\n                if (i >= 0) {\n                    listenKeyArray.splice(i, 1);\n                }\n                olObservableUnByKey(el);\n            });\n            listenAddRemove();\n        }));\n    }\n    /**\n     * Destroys all the created Cesium objects.\n     */\n    destroyAll() {\n        this.removeAllCesiumObjects(true); // destroy\n        let objKey;\n        for (objKey in this.olGroupListenKeys_) {\n            const keys = this.olGroupListenKeys_[objKey];\n            keys.forEach(olObservableUnByKey);\n        }\n        for (objKey in this.olLayerListenKeys) {\n            this.olLayerListenKeys[objKey].forEach(olObservableUnByKey);\n        }\n        this.olGroupListenKeys_ = {};\n        this.olLayerListenKeys = {};\n        this.layerMap = {};\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTeW5jaHJvbml6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb2xjcy9BYnN0cmFjdFN5bmNocm9uaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxJQUFJLG1CQUFtQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxVQUFVLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQVdqQyxNQUFNLENBQUMsT0FBTyxPQUFnQixvQkFBb0I7SUFDdEMsR0FBRyxDQUFNO0lBQ1QsSUFBSSxDQUFPO0lBQ1gsS0FBSyxDQUFRO0lBQ2IsUUFBUSxDQUF3QjtJQUMxQyxhQUFhLENBQWE7SUFDMUI7OztPQUdHO0lBQ08sUUFBUSxHQUE2QixFQUFFLENBQUM7SUFDbEQ7O09BRUc7SUFDTyxpQkFBaUIsR0FBcUMsRUFBRSxDQUFDO0lBQ25FOztPQUVHO0lBQ0ssa0JBQWtCLEdBQXFDLEVBQUUsQ0FBQztJQUVsRSxZQUFzQixHQUFRLEVBQUUsS0FBWTtRQUMxQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJ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","import { getUid } from './util.js';\nimport olcsAbstractSynchronizer from './AbstractSynchronizer.js';\nimport { tileLayerToImageryLayer, updateCesiumLayerProperties } from './core.js';\nimport BaseVectorLayer from 'ol/layer/BaseVector.js';\nimport LayerGroup from 'ol/layer/Group.js';\nexport default class RasterSynchronizer extends olcsAbstractSynchronizer {\n    cesiumLayers_;\n    ourLayers_;\n    /**\n     * This object takes care of one-directional synchronization of\n     * Openlayers raster layers to the given Cesium globe.\n     */\n    constructor(map, scene) {\n        super(map, scene);\n        this.cesiumLayers_ = scene.imageryLayers;\n        this.ourLayers_ = new Cesium.ImageryLayerCollection();\n    }\n    addCesiumObject(object) {\n        this.cesiumLayers_.add(object);\n        this.ourLayers_.add(object);\n    }\n    destroyCesiumObject(object) {\n        object.destroy();\n    }\n    removeSingleCesiumObject(object, destroy) {\n        this.cesiumLayers_.remove(object, destroy);\n        this.ourLayers_.remove(object, false);\n    }\n    removeAllCesiumObjects(destroy) {\n        for (let i = 0; i < this.ourLayers_.length; ++i) {\n            this.cesiumLayers_.remove(this.ourLayers_.get(i), destroy);\n        }\n        this.ourLayers_.removeAll(false);\n    }\n    /**\n     * Creates an array of Cesium.ImageryLayer.\n     * May be overriden by child classes to implement custom behavior.\n     * The default implementation handles tiled imageries in EPSG:4326 or\n     * EPSG:3859.\n     */\n    convertLayerToCesiumImageries(olLayer, viewProj) {\n        const result = tileLayerToImageryLayer(this.map, olLayer, viewProj);\n        return result ? [result] : null;\n    }\n    createSingleLayerCounterparts(olLayerWithParents) {\n        const olLayer = olLayerWithParents.layer;\n        const uid = getUid(olLayer).toString();\n        const viewProj = this.view.getProjection();\n        console.assert(viewProj);\n        const cesiumObjects = this.convertLayerToCesiumImageries(olLayer, viewProj);\n        if (cesiumObjects) {\n            const listenKeyArray = [];\n            [olLayerWithParents.layer].concat(olLayerWithParents.parents).forEach((olLayerItem) => {\n                listenKeyArray.push(olLayerItem.on(['change:opacity', 'change:visible'], () => {\n                    // the compiler does not seem to be able to infer this\n                    console.assert(cesiumObjects);\n                    for (let i = 0; i < cesiumObjects.length; ++i) {\n                        updateCesiumLayerProperties(olLayerWithParents, cesiumObjects[i]);\n                    }\n                }));\n            });\n            if (olLayer instanceof BaseVectorLayer) {\n                let previousStyleFunction = olLayer.getStyleFunction();\n                // there is no convenient way to detect a style function change in OL\n                listenKeyArray.push(olLayer.on('change', () => {\n                    const currentStyleFunction = olLayer.getStyleFunction();\n                    if (previousStyleFunction === currentStyleFunction) {\n                        return;\n                    }\n                    previousStyleFunction = currentStyleFunction;\n                    for (let i = 0; i < cesiumObjects.length; ++i) {\n                        const csObj = cesiumObjects[i];\n                        // clear cache and set new style\n                        // @ts-ignore TS2341\n                        if (csObj._imageryCache) {\n                            // @ts-ignore TS2341\n                            csObj._imageryCache = {};\n                        }\n                        const ip = csObj.imageryProvider;\n                        if (ip) {\n                            // @ts-ignore TS2341\n                            ip.tileCache?.clear();\n                            // @ts-ignore TS2341\n                            ip.styleFunction_ = currentStyleFunction;\n                        }\n                    }\n                    this.scene.requestRender();\n                }));\n            }\n            for (let i = 0; i < cesiumObjects.length; ++i) {\n                updateCesiumLayerProperties(olLayerWithParents, cesiumObjects[i]);\n            }\n            // there is no way to modify Cesium layer extent,\n            // we have to recreate when OpenLayers layer extent changes:\n            listenKeyArray.push(olLayer.on('change:extent', (e) => {\n                for (let i = 0; i < cesiumObjects.length; ++i) {\n                    this.cesiumLayers_.remove(cesiumObjects[i], true); // destroy\n                    this.ourLayers_.remove(cesiumObjects[i], false);\n                }\n                delete this.layerMap[getUid(olLayer)]; // invalidate the map entry\n                this.synchronize();\n            }));\n            listenKeyArray.push(olLayer.on('change', (e) => {\n                // when the source changes, re-add the layer to force update\n                for (let i = 0; i < cesiumObjects.length; ++i) {\n                    const position = this.cesiumLayers_.indexOf(cesiumObjects[i]);\n                    if (position >= 0) {\n                        this.cesiumLayers_.remove(cesiumObjects[i], false);\n                        this.cesiumLayers_.add(cesiumObjects[i], position);\n                    }\n                }\n            }));\n            this.olLayerListenKeys[uid].push(...listenKeyArray);\n        }\n        return Array.isArray(cesiumObjects) ? cesiumObjects : null;\n    }\n    /**\n     * Order counterparts using the same algorithm as the Openlayers renderer:\n     * z-index then original sequence order.\n     * @override\n     * @protected\n     */\n    orderLayers() {\n        const layers = [];\n        const zIndices = {};\n        const queue = [this.mapLayerGroup];\n        while (queue.length > 0) {\n            const olLayer = queue.splice(0, 1)[0];\n            layers.push(olLayer);\n            zIndices[getUid(olLayer)] = olLayer.getZIndex() || 0;\n            if (olLayer instanceof LayerGroup) {\n                const sublayers = olLayer.getLayers();\n                if (sublayers) {\n                    // Prepend queue with sublayers in order\n                    queue.unshift(...sublayers.getArray());\n                }\n            }\n        }\n        // We assume sort is stable (which has been in the spec since a long time already).\n        // See https://caniuse.com/mdn-javascript_builtins_array_sort_stable\n        layers.sort((layer1, layer2) => zIndices[getUid(layer1)] - zIndices[getUid(layer2)]);\n        layers.forEach((olLayer) => {\n            const olLayerId = getUid(olLayer).toString();\n            const cesiumObjects = this.layerMap[olLayerId];\n            if (cesiumObjects) {\n                cesiumObjects.forEach((cesiumObject) => { this.raiseToTop(cesiumObject); });\n            }\n        });\n    }\n    raiseToTop(counterpart) {\n        this.cesiumLayers_.raiseToTop(counterpart);\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFzdGVyU3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29sY3MvUmFzdGVyU3luY2hyb25pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyx3QkFBd0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQXdCLHVCQUF1QixFQUFFLDJCQUEyQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBSXRHLE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sVUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBRTNDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sa0JBQW1CLFNBQVEsd0JBQXNDO0lBQzVFLGFBQWEsQ0FBeUI7SUFDdEMsVUFBVSxDQUF5QjtJQUMzQzs7O09BR0c7SUFDSCxZQUFZLEdBQVEsRUFBRSxLQUFZO1FBQ2hDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQW9CO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFvQjtRQUN0QyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQW9CLEVBQUUsT0FBZ0I7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsT0FBZ0I7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLDZCQUE2QixDQUFDLE9BQWtCLEVBQUUsUUFBb0I7UUFDOUUsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsNkJBQTZCLENBQUMsa0JBQW9DO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3BGLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFO29CQUM1RSxzREFBc0Q7b0JBQ3RELE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7d0JBQzlDLDJCQUEyQixDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwRSxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksT0FBTyxZQUFZLGVBQWUsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN2RCxxRUFBcUU7Z0JBQ3JFLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUM1QyxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN4RCxJQUFJLHFCQUFxQixLQUFLLG9CQUFvQixFQUFFLENBQUM7d0JBQ25ELE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztvQkFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDOUMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixnQ0FBZ0M7d0JBQ2hDLG9CQUFvQjt3QkFDcEIsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBQ3hCLG9CQUFvQjs0QkFDcEIsS0FBSyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7d0JBQzNCLENBQUM7d0JBRUQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQzt3QkFDakMsSUFBSSxFQUFFLEVBQUUsQ0FBQzs0QkFDUCxvQkFBb0I7NEJBQ3BCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NEJBQ3RCLG9CQUFvQjs0QkFDcEIsRUFBRSxDQUFDLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQzt3QkFDM0MsQ0FBQztvQkFDSCxDQUFDO29CQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsMkJBQTJCLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELGlEQUFpRDtZQUNqRCw0REFBNEQ7WUFDNUQsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNwRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVO29CQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO2dCQUNsRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVKLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDN0MsNERBQTREO2dCQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNyRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRUosSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVc7UUFDVCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxRQUFRLEdBQTJCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLEtBQUssR0FBa0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFckQsSUFBSSxPQUFPLFlBQVksVUFBVSxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCx3Q0FBd0M7b0JBQ3hDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsbUZBQW1GO1FBQ25GLG9FQUFvRTtRQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3BELENBQUM7UUFFRixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsV0FBeUI7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIn0=","import OLStyleIcon from 'ol/style/Icon.js';\nimport VectorSource, {} from 'ol/source/Vector.js';\nimport OLClusterSource from 'ol/source/Cluster.js';\nimport { circular as olCreateCircularPolygon } from 'ol/geom/Polygon.js';\nimport { boundingExtent, getCenter } from 'ol/extent.js';\nimport olGeomSimpleGeometry from 'ol/geom/SimpleGeometry.js';\nimport { convertColorToCesium, olGeometryCloneTo4326, ol4326CoordinateToCesiumCartesian, ol4326CoordinateArrayToCsCartesians } from './core.js';\nimport VectorLayerCounterpart, {} from './core/VectorLayerCounterpart.js';\nimport { getUid, waitReady } from './util.js';\nimport {} from 'cesium';\nimport {} from 'ol/style/Style.js';\nimport { Geometry as OLGeometry } from 'ol/geom.js';\nexport default class FeatureConverter {\n    scene;\n    /**\n     * Bind once to have a unique function for using as a listener\n     */\n    boundOnRemoveOrClearFeatureListener_ = this.onRemoveOrClearFeature_.bind(this);\n    defaultBillboardEyeOffset_ = new Cesium.Cartesian3(0, 0, 10);\n    /**\n     * Concrete base class for converting from OpenLayers3 vectors to Cesium\n     * primitives.\n     * Extending this class is possible provided that the extending class and\n     * the library are compiled together by the closure compiler.\n     * @param scene Cesium scene.\n     * @api\n     */\n    constructor(scene) {\n        this.scene = scene;\n        this.scene = scene;\n    }\n    /**\n     * @param evt\n     */\n    onRemoveOrClearFeature_(evt) {\n        const source = evt.target;\n        console.assert(source instanceof VectorSource);\n        const cancellers = source['olcs_cancellers'];\n        if (cancellers) {\n            const feature = evt.feature;\n            if (feature) {\n                // remove\n                const id = getUid(feature);\n                const canceller = cancellers[id];\n                if (canceller) {\n                    canceller();\n                    delete cancellers[id];\n                }\n            }\n            else {\n                // clear\n                for (const key in cancellers) {\n                    if (cancellers.hasOwnProperty(key)) {\n                        cancellers[key]();\n                    }\n                }\n                source['olcs_cancellers'] = {};\n            }\n        }\n    }\n    /**\n     * @param layer\n     * @param feature OpenLayers feature.\n     * @param primitive\n     */\n    setReferenceForPicking(layer, feature, primitive) {\n        primitive.olLayer = layer;\n        primitive.olFeature = feature;\n    }\n    /**\n     * Basics primitive creation using a color attribute.\n     * Note that Cesium has 'interior' and outline geometries.\n     * @param layer\n     * @param feature OpenLayers feature.\n     * @param olGeometry OpenLayers geometry.\n     * @param geometry\n     * @param color\n     * @param opt_lineWidth\n     * @return primitive\n     */\n    createColoredPrimitive(layer, feature, olGeometry, geometry, color, opt_lineWidth) {\n        const createInstance = function (geometry, color) {\n            const instance = new Cesium.GeometryInstance({\n                geometry\n            });\n            if (color && !(color instanceof Cesium.ImageMaterialProperty)) {\n                instance.attributes = {\n                    color: Cesium.ColorGeometryInstanceAttribute.fromColor(color)\n                };\n            }\n            return instance;\n        };\n        const options = {\n            flat: true, // work with all geometries\n            renderState: {\n                depthTest: {\n                    enabled: true\n                }\n            }\n        };\n        if (opt_lineWidth !== undefined) {\n            options.renderState.lineWidth = opt_lineWidth;\n        }\n        const instances = createInstance(geometry, color);\n        const heightReference = this.getHeightReference(layer, feature, olGeometry);\n        let primitive;\n        if (heightReference === Cesium.HeightReference.CLAMP_TO_GROUND) {\n            if (!('createShadowVolume' in instances.geometry.constructor)) {\n                // This is not a ground geometry\n                return null;\n            }\n            primitive = new Cesium.GroundPrimitive({\n                geometryInstances: instances\n            });\n        }\n        else {\n            primitive = new Cesium.Primitive({\n                geometryInstances: instances\n            });\n        }\n        if (color instanceof Cesium.ImageMaterialProperty) {\n            // FIXME: we created stylings which are not time related\n            // What should we pass here?\n            // @ts-ignore\n            const dataUri = color.image.getValue().toDataURL();\n            primitive.appearance = new Cesium.MaterialAppearance({\n                flat: true,\n                renderState: {\n                    depthTest: {\n                        enabled: true,\n                    }\n                },\n                material: new Cesium.Material({\n                    fabric: {\n                        type: 'Image',\n                        uniforms: {\n                            image: dataUri\n                        }\n                    }\n                })\n            });\n        }\n        else {\n            primitive.appearance = new Cesium.MaterialAppearance({\n                ...options,\n                material: new Cesium.Material({\n                    translucent: color.alpha !== 1,\n                    fabric: {\n                        type: 'Color',\n                        uniforms: {\n                            color,\n                        }\n                    }\n                })\n            });\n            if (primitive instanceof Cesium.Primitive && (feature.get('olcs_shadows') || layer.get('olcs_shadows'))) {\n                primitive.shadows = 1;\n            }\n        }\n        this.setReferenceForPicking(layer, feature, primitive);\n        return primitive;\n    }\n    /**\n     * Return the fill or stroke color from a plain ol style.\n     */\n    extractColorFromOlStyle(style, outline) {\n        const fillColor = style.getFill()?.getColor();\n        const strokeColor = style.getStroke() ? style.getStroke().getColor() : null;\n        let olColor = 'black';\n        if (strokeColor && outline) {\n            olColor = strokeColor;\n        }\n        else if (fillColor) {\n            olColor = fillColor;\n        }\n        const csColor = convertColorToCesium(olColor);\n        if ('red' in csColor) {\n            return csColor;\n        }\n        else {\n            // Fallback to black if that was not a plain color\n            return Cesium.Color.BLACK;\n        }\n    }\n    /**\n     * Return the width of stroke from a plain ol style.\n     * @param style\n     * @return {number}\n     */\n    extractLineWidthFromOlStyle(style) {\n        // Handling of line width WebGL limitations is handled by Cesium.\n        const width = style.getStroke() ? style.getStroke().getWidth() : undefined;\n        return width !== undefined ? width : 1;\n    }\n    /**\n     * Create a primitive collection out of two Cesium geometries.\n     * Only the OpenLayers style colors will be used.\n     */\n    wrapFillAndOutlineGeometries(layer, feature, olGeometry, fillGeometry, outlineGeometry, olStyle) {\n        const fillColor = this.extractColorFromOlStyle(olStyle, false);\n        const outlineColor = this.extractColorFromOlStyle(olStyle, true);\n        const primitives = new Cesium.PrimitiveCollection();\n        if (olStyle.getFill()) {\n            const p1 = this.createColoredPrimitive(layer, feature, olGeometry, fillGeometry, fillColor);\n            console.assert(!!p1);\n            primitives.add(p1);\n        }\n        if (olStyle.getStroke() && outlineGeometry) {\n            const width = this.extractLineWidthFromOlStyle(olStyle);\n            const p2 = this.createColoredPrimitive(layer, feature, olGeometry, outlineGeometry, outlineColor, width);\n            if (p2) {\n                // Some outline geometries are not supported by Cesium in clamp to ground\n                // mode. These primitives are skipped.\n                primitives.add(p2);\n            }\n        }\n        return primitives;\n    }\n    // Geometry converters\n    // FIXME: would make more sense to only accept primitive collection.\n    /**\n     * Create a Cesium primitive if style has a text component.\n     * Eventually return a PrimitiveCollection including current primitive.\n     */\n    addTextStyle(layer, feature, geometry, style, primitive) {\n        let primitives;\n        if (!(primitive instanceof Cesium.PrimitiveCollection)) {\n            primitives = new Cesium.PrimitiveCollection();\n            primitives.add(primitive);\n        }\n        else {\n            primitives = primitive;\n        }\n        if (!style.getText()) {\n            return primitives;\n        }\n        const text = /** @type {!ol.style.Text} */ (style.getText());\n        const label = this.olGeometry4326TextPartToCesium(layer, feature, geometry, text);\n        if (label) {\n            primitives.add(label);\n        }\n        return primitives;\n    }\n    /**\n     * Add a billboard to a Cesium.BillboardCollection.\n     * Overriding this wrapper allows manipulating the billboard options.\n     * @param billboards\n     * @param bbOptions\n     * @param layer\n     * @param feature OpenLayers feature.\n     * @param geometry\n     * @param style\n     * @return newly created billboard\n     * @api\n     */\n    csAddBillboard(billboards, bbOptions, layer, feature, geometry, style) {\n        if (!bbOptions.eyeOffset) {\n            bbOptions.eyeOffset = this.defaultBillboardEyeOffset_;\n        }\n        const bb = billboards.add(bbOptions);\n        this.setReferenceForPicking(layer, feature, bb);\n        return bb;\n    }\n    /**\n     * Convert an OpenLayers circle geometry to Cesium.\n     * @api\n     */\n    olCircleGeometryToCesium(layer, feature, olGeometry, projection, olStyle) {\n        olGeometry = olGeometryCloneTo4326(olGeometry, projection);\n        console.assert(olGeometry.getType() == 'Circle');\n        // ol.Coordinate\n        const olCenter = olGeometry.getCenter();\n        const height = olCenter.length == 3 ? olCenter[2] : 0.0;\n        const olPoint = olCenter.slice();\n        olPoint[0] += olGeometry.getRadius();\n        // Cesium\n        const center = ol4326CoordinateToCesiumCartesian(olCenter);\n        const point = ol4326CoordinateToCesiumCartesian(olPoint);\n        // Accurate computation of straight distance\n        const radius = Cesium.Cartesian3.distance(center, point);\n        const fillGeometry = new Cesium.CircleGeometry({\n            center,\n            radius,\n            height\n        });\n        let outlinePrimitive;\n        let outlineGeometry;\n        if (this.getHeightReference(layer, feature, olGeometry) === Cesium.HeightReference.CLAMP_TO_GROUND) {\n            const width = this.extractLineWidthFromOlStyle(olStyle);\n            if (width) {\n                const circlePolygon = olCreateCircularPolygon(olGeometry.getCenter(), radius);\n                const positions = ol4326CoordinateArrayToCsCartesians(circlePolygon.getLinearRing(0).getCoordinates());\n                const op = outlinePrimitive = new Cesium.GroundPolylinePrimitive({\n                    geometryInstances: new Cesium.GeometryInstance({\n                        geometry: new Cesium.GroundPolylineGeometry({ positions, width }),\n                    }),\n                    appearance: new Cesium.PolylineMaterialAppearance({\n                        material: this.olStyleToCesium(feature, olStyle, true),\n                    }),\n                    classificationType: Cesium.ClassificationType.TERRAIN,\n                });\n                waitReady(outlinePrimitive).then(() => {\n                    this.setReferenceForPicking(layer, feature, op._primitive);\n                });\n            }\n        }\n        else {\n            outlineGeometry = new Cesium.CircleOutlineGeometry({\n                center,\n                radius,\n                extrudedHeight: height,\n                height\n            });\n        }\n        const primitives = this.wrapFillAndOutlineGeometries(layer, feature, olGeometry, fillGeometry, outlineGeometry, olStyle);\n        if (outlinePrimitive) {\n            primitives.add(outlinePrimitive);\n        }\n        return this.addTextStyle(layer, feature, olGeometry, olStyle, primitives);\n    }\n    /**\n     * Convert an OpenLayers line string geometry to Cesium.\n     * @api\n     */\n    olLineStringGeometryToCesium(layer, feature, olGeometry, projection, olStyle) {\n        olGeometry = olGeometryCloneTo4326(olGeometry, projection);\n        console.assert(olGeometry.getType() == 'LineString');\n        const positions = ol4326CoordinateArrayToCsCartesians(olGeometry.getCoordinates());\n        const width = this.extractLineWidthFromOlStyle(olStyle);\n        let outlinePrimitive;\n        const heightReference = this.getHeightReference(layer, feature, olGeometry);\n        const appearance = new Cesium.PolylineMaterialAppearance({\n            material: this.olStyleToCesium(feature, olStyle, true)\n        });\n        if (heightReference === Cesium.HeightReference.CLAMP_TO_GROUND) {\n            const geometry = new Cesium.GroundPolylineGeometry({\n                positions,\n                width,\n            });\n            const op = outlinePrimitive = new Cesium.GroundPolylinePrimitive({\n                appearance,\n                geometryInstances: new Cesium.GeometryInstance({\n                    geometry\n                })\n            });\n            waitReady(outlinePrimitive).then(() => {\n                this.setReferenceForPicking(layer, feature, op._primitive);\n            });\n        }\n        else {\n            const geometry = new Cesium.PolylineGeometry({\n                positions,\n                width,\n                vertexFormat: appearance.vertexFormat\n            });\n            outlinePrimitive = new Cesium.Primitive({\n                appearance,\n                geometryInstances: new Cesium.GeometryInstance({\n                    geometry\n                }),\n            });\n        }\n        this.setReferenceForPicking(layer, feature, outlinePrimitive);\n        return this.addTextStyle(layer, feature, olGeometry, olStyle, outlinePrimitive);\n    }\n    /**\n     * Convert an OpenLayers polygon geometry to Cesium.\n     * @api\n     */\n    olPolygonGeometryToCesium(layer, feature, olGeometry, projection, olStyle) {\n        olGeometry = olGeometryCloneTo4326(olGeometry, projection);\n        console.assert(olGeometry.getType() == 'Polygon');\n        const heightReference = this.getHeightReference(layer, feature, olGeometry);\n        let fillGeometry, outlineGeometry;\n        let outlinePrimitive;\n        if ((olGeometry.getCoordinates()[0].length == 5) &&\n            (feature.get('olcs_polygon_kind') === 'rectangle')) {\n            // Create a rectangle according to the longitude and latitude curves\n            const coordinates = olGeometry.getCoordinates()[0];\n            // Extract the West, South, East, North coordinates\n            const extent = boundingExtent(coordinates);\n            const rectangle = Cesium.Rectangle.fromDegrees(extent[0], extent[1], extent[2], extent[3]);\n            // Extract the average height of the vertices\n            let maxHeight = 0.0;\n            if (coordinates[0].length == 3) {\n                for (let c = 0; c < coordinates.length; c++) {\n                    maxHeight = Math.max(maxHeight, coordinates[c][2]);\n                }\n            }\n            const featureExtrudedHeight = feature.get('olcs_extruded_height');\n            // Render the cartographic rectangle\n            fillGeometry = new Cesium.RectangleGeometry({\n                ellipsoid: Cesium.Ellipsoid.WGS84,\n                rectangle,\n                height: maxHeight,\n                extrudedHeight: featureExtrudedHeight,\n            });\n            outlineGeometry = new Cesium.RectangleOutlineGeometry({\n                ellipsoid: Cesium.Ellipsoid.WGS84,\n                rectangle,\n                height: maxHeight,\n                extrudedHeight: featureExtrudedHeight,\n            });\n        }\n        else {\n            const rings = olGeometry.getLinearRings();\n            const hierarchy = {\n                positions: [],\n                holes: [],\n            };\n            const polygonHierarchy = hierarchy;\n            console.assert(rings.length > 0);\n            for (let i = 0; i < rings.length; ++i) {\n                const olPos = rings[i].getCoordinates();\n                const positions = ol4326CoordinateArrayToCsCartesians(olPos);\n                console.assert(positions && positions.length > 0);\n                if (i === 0) {\n                    hierarchy.positions = positions;\n                }\n                else {\n                    hierarchy.holes.push({\n                        positions,\n                        holes: [],\n                    });\n                }\n            }\n            const featureExtrudedHeight = feature.get('olcs_extruded_height');\n            fillGeometry = new Cesium.PolygonGeometry({\n                polygonHierarchy,\n                perPositionHeight: true,\n                extrudedHeight: featureExtrudedHeight,\n            });\n            // Since Cesium doesn't yet support Polygon outlines on terrain yet (coming soon...?)\n            // we don't create an outline geometry if clamped, but instead do the polyline method\n            // for each ring. Most of this code should be removeable when Cesium adds\n            // support for Polygon outlines on terrain.\n            if (heightReference === Cesium.HeightReference.CLAMP_TO_GROUND) {\n                const width = this.extractLineWidthFromOlStyle(olStyle);\n                if (width > 0) {\n                    const positions = [hierarchy.positions];\n                    if (hierarchy.holes) {\n                        for (let i = 0; i < hierarchy.holes.length; ++i) {\n                            positions.push(hierarchy.holes[i].positions);\n                        }\n                    }\n                    const appearance = new Cesium.PolylineMaterialAppearance({\n                        material: this.olStyleToCesium(feature, olStyle, true)\n                    });\n                    const geometryInstances = [];\n                    for (const linePositions of positions) {\n                        const polylineGeometry = new Cesium.GroundPolylineGeometry({ positions: linePositions, width });\n                        geometryInstances.push(new Cesium.GeometryInstance({\n                            geometry: polylineGeometry\n                        }));\n                    }\n                    outlinePrimitive = new Cesium.GroundPolylinePrimitive({\n                        appearance,\n                        geometryInstances\n                    });\n                    waitReady(outlinePrimitive).then(() => {\n                        this.setReferenceForPicking(layer, feature, outlinePrimitive._primitive);\n                    });\n                }\n            }\n            else {\n                // Actually do the normal polygon thing. This should end the removable\n                // section of code described above.\n                outlineGeometry = new Cesium.PolygonOutlineGeometry({\n                    polygonHierarchy: hierarchy,\n                    perPositionHeight: true,\n                    extrudedHeight: featureExtrudedHeight,\n                });\n            }\n        }\n        const primitives = this.wrapFillAndOutlineGeometries(layer, feature, olGeometry, fillGeometry, outlineGeometry, olStyle);\n        if (outlinePrimitive) {\n            primitives.add(outlinePrimitive);\n        }\n        return this.addTextStyle(layer, feature, olGeometry, olStyle, primitives);\n    }\n    /**\n     * @api\n     */\n    getHeightReference(layer, feature, geometry) {\n        // Read from the geometry\n        let altitudeMode = geometry.get('altitudeMode');\n        // Or from the feature\n        if (altitudeMode === undefined) {\n            altitudeMode = feature.get('altitudeMode');\n        }\n        // Or from the layer\n        if (altitudeMode === undefined) {\n            altitudeMode = layer.get('altitudeMode');\n        }\n        let heightReference = Cesium.HeightReference.NONE;\n        if (altitudeMode === 'clampToGround') {\n            heightReference = Cesium.HeightReference.CLAMP_TO_GROUND;\n        }\n        else if (altitudeMode === 'relativeToGround') {\n            heightReference = Cesium.HeightReference.RELATIVE_TO_GROUND;\n        }\n        return heightReference;\n    }\n    /**\n     * Convert a point geometry to a Cesium BillboardCollection.\n     * @param {ol.layer.Vector|ol.layer.Image} layer\n     * @param {!ol.Feature} feature OpenLayers feature..\n     * @param {!ol.geom.Point} olGeometry OpenLayers point geometry.\n     * @param {!ol.ProjectionLike} projection\n     * @param {!ol.style.Style} style\n     * @param {!ol.style.Image} imageStyle\n     * @param {!Cesium.BillboardCollection} billboards\n     * @param {function(!Cesium.Billboard)=} opt_newBillboardCallback Called when the new billboard is added.\n     * @api\n     */\n    createBillboardFromImage(layer, feature, olGeometry, projection, style, imageStyle, billboards, opt_newBillboardCallback) {\n        if (imageStyle instanceof OLStyleIcon) {\n            // make sure the image is scheduled for load\n            imageStyle.load();\n        }\n        const image = imageStyle.getImage(1); // get normal density\n        const isImageLoaded = function (image) {\n            return image.src != '' &&\n                image.naturalHeight != 0 &&\n                image.naturalWidth != 0 &&\n                image.complete;\n        };\n        const reallyCreateBillboard = (function () {\n            if (!image) {\n                return;\n            }\n            if (!(image instanceof HTMLCanvasElement ||\n                image instanceof Image ||\n                image instanceof HTMLImageElement)) {\n                return;\n            }\n            const center = olGeometry.getCoordinates();\n            const position = ol4326CoordinateToCesiumCartesian(center);\n            let color;\n            const opacity = imageStyle.getOpacity();\n            if (opacity !== undefined) {\n                color = new Cesium.Color(1.0, 1.0, 1.0, opacity);\n            }\n            const scale = imageStyle.getScale();\n            const heightReference = this.getHeightReference(layer, feature, olGeometry);\n            const bbOptions = {\n                image: image,\n                color,\n                scale: Array.isArray(scale) ? (scale[0] + scale[1]) / 2 : scale,\n                heightReference,\n                position\n            };\n            // merge in cesium options from openlayers feature\n            Object.assign(bbOptions, feature.get('cesiumOptions'));\n            if (imageStyle instanceof OLStyleIcon) {\n                const anchor = imageStyle.getAnchor();\n                if (anchor) {\n                    const xScale = (Array.isArray(scale) ? scale[0] : scale);\n                    const yScale = (Array.isArray(scale) ? scale[1] : scale);\n                    bbOptions.pixelOffset = new Cesium.Cartesian2((image.width / 2 - anchor[0]) * xScale, (image.height / 2 - anchor[1]) * yScale);\n                }\n            }\n            const bb = this.csAddBillboard(billboards, bbOptions, layer, feature, olGeometry, style);\n            if (opt_newBillboardCallback) {\n                opt_newBillboardCallback(bb);\n            }\n        }).bind(this);\n        if (image instanceof Image && !isImageLoaded(image)) {\n            // Cesium requires the image to be loaded\n            let cancelled = false;\n            const source = layer.getSource();\n            const canceller = function () {\n                cancelled = true;\n            };\n            source.on(['removefeature', 'clear'], this.boundOnRemoveOrClearFeatureListener_);\n            let cancellers = source['olcs_cancellers'];\n            if (!cancellers) {\n                cancellers = source['olcs_cancellers'] = {};\n            }\n            const fuid = getUid(feature);\n            if (cancellers[fuid]) {\n                // When the feature change quickly, a canceller may still be present so\n                // we cancel it here to prevent creation of a billboard.\n                cancellers[fuid]();\n            }\n            cancellers[fuid] = canceller;\n            const listener = function () {\n                image.removeEventListener('load', listener);\n                if (!billboards.isDestroyed() && !cancelled) {\n                    // Create billboard if the feature is still displayed on the map.\n                    reallyCreateBillboard();\n                }\n            };\n            image.addEventListener('load', listener);\n        }\n        else {\n            reallyCreateBillboard();\n        }\n    }\n    /**\n     * Convert a point geometry to a Cesium BillboardCollection.\n     * @param layer\n     * @param feature OpenLayers feature..\n     * @param olGeometry OpenLayers point geometry.\n     * @param projection\n     * @param style\n     * @param billboards\n     * @param opt_newBillboardCallback Called when the new billboard is added.\n     * @return primitives\n     * @api\n     */\n    olPointGeometryToCesium(layer, feature, olGeometry, projection, style, billboards, opt_newBillboardCallback) {\n        console.assert(olGeometry.getType() == 'Point');\n        olGeometry = olGeometryCloneTo4326(olGeometry, projection);\n        let modelPrimitive = null;\n        const imageStyle = style.getImage();\n        if (imageStyle) {\n            const olcsModelFunction = olGeometry.get('olcs_model') || feature.get('olcs_model');\n            if (olcsModelFunction) {\n                modelPrimitive = new Cesium.PrimitiveCollection();\n                const olcsModel = olcsModelFunction();\n                const options = Object.assign({}, { scene: this.scene }, olcsModel.cesiumOptions);\n                if ('fromGltf' in Cesium.Model) {\n                    // pre Cesium v107\n                    // @ts-ignore\n                    const model = Cesium.Model.fromGltf(options);\n                    modelPrimitive.add(model);\n                }\n                else {\n                    Cesium.Model.fromGltfAsync(options).then((model) => {\n                        modelPrimitive.add(model);\n                    });\n                }\n                if (olcsModel.debugModelMatrix) {\n                    modelPrimitive.add(new Cesium.DebugModelMatrixPrimitive({\n                        modelMatrix: olcsModel.debugModelMatrix\n                    }));\n                }\n            }\n            else {\n                this.createBillboardFromImage(layer, feature, olGeometry, projection, style, imageStyle, billboards, opt_newBillboardCallback);\n            }\n        }\n        if (style.getText()) {\n            return this.addTextStyle(layer, feature, olGeometry, style, modelPrimitive || new Cesium.Primitive());\n        }\n        else {\n            return modelPrimitive;\n        }\n    }\n    /**\n     * Convert an OpenLayers multi-something geometry to Cesium.\n     * @param {ol.layer.Vector|ol.layer.Image} layer\n     * @param {!ol.Feature} feature OpenLayers feature..\n     * @param {!ol.geom.Geometry} geometry OpenLayers geometry.\n     * @param {!ol.ProjectionLike} projection\n     * @param {!ol.style.Style} olStyle\n     * @param {!Cesium.BillboardCollection} billboards\n     * @param {function(!Cesium.Billboard)=} opt_newBillboardCallback Called when\n     * the new billboard is added.\n     * @return {Cesium.Primitive} primitives\n     * @api\n     */\n    olMultiGeometryToCesium(layer, feature, geometry, projection, olStyle, billboards, opt_newBillboardCallback) {\n        // Do not reproject to 4326 now because it will be done later.\n        switch (geometry.getType()) {\n            case 'MultiPoint': {\n                const points = geometry.getPoints();\n                if (olStyle.getText()) {\n                    const primitives = new Cesium.PrimitiveCollection();\n                    points.forEach((geom) => {\n                        console.assert(geom);\n                        const result = this.olPointGeometryToCesium(layer, feature, geom, projection, olStyle, billboards, opt_newBillboardCallback);\n                        if (result) {\n                            primitives.add(result);\n                        }\n                    });\n                    return primitives;\n                }\n                else {\n                    points.forEach((geom) => {\n                        console.assert(geom);\n                        this.olPointGeometryToCesium(layer, feature, geom, projection, olStyle, billboards, opt_newBillboardCallback);\n                    });\n                    return null;\n                }\n            }\n            case 'MultiLineString': {\n                const lineStrings = geometry.getLineStrings();\n                // FIXME: would be better to combine all child geometries in one primitive\n                // instead we create n primitives for simplicity.\n                const primitives = new Cesium.PrimitiveCollection();\n                lineStrings.forEach((geom) => {\n                    const p = this.olLineStringGeometryToCesium(layer, feature, geom, projection, olStyle);\n                    primitives.add(p);\n                });\n                return primitives;\n            }\n            case 'MultiPolygon': {\n                const polygons = geometry.getPolygons();\n                // FIXME: would be better to combine all child geometries in one primitive\n                // instead we create n primitives for simplicity.\n                const primitives = new Cesium.PrimitiveCollection();\n                polygons.forEach((geom) => {\n                    const p = this.olPolygonGeometryToCesium(layer, feature, geom, projection, olStyle);\n                    primitives.add(p);\n                });\n                return primitives;\n            }\n            default:\n                console.assert(false, `Unhandled multi geometry type${geometry.getType()}`);\n        }\n    }\n    /**\n     * Convert an OpenLayers text style to Cesium.\n     * @api\n     */\n    olGeometry4326TextPartToCesium(layer, feature, geometry, style) {\n        const text = style.getText();\n        if (!text) {\n            return null;\n        }\n        const labels = new Cesium.LabelCollection({ scene: this.scene });\n        // TODO: export and use the text draw position from OpenLayers .\n        // See src/ol/render/vector.js\n        const extentCenter = getCenter(geometry.getExtent());\n        if (geometry instanceof olGeomSimpleGeometry) {\n            const first = geometry.getFirstCoordinate();\n            extentCenter[2] = first.length == 3 ? first[2] : 0.0;\n        }\n        const options = {\n            position: ol4326CoordinateToCesiumCartesian(extentCenter)\n        };\n        options.text = Array.isArray(text) ? text.join(' ') : text;\n        options.heightReference = this.getHeightReference(layer, feature, geometry);\n        const offsetX = style.getOffsetX();\n        const offsetY = style.getOffsetY();\n        if (offsetX != 0 || offsetY != 0) {\n            const offset = new Cesium.Cartesian2(offsetX, offsetY);\n            options.pixelOffset = offset;\n        }\n        options.font = style.getFont() || '10px sans-serif'; // OpenLayers default\n        let labelStyle = undefined;\n        if (style.getFill()) {\n            options.fillColor = this.extractColorFromOlStyle(style, false);\n            labelStyle = Cesium.LabelStyle.FILL;\n        }\n        if (style.getStroke()) {\n            options.outlineWidth = this.extractLineWidthFromOlStyle(style);\n            options.outlineColor = this.extractColorFromOlStyle(style, true);\n            labelStyle = Cesium.LabelStyle.OUTLINE;\n        }\n        if (style.getFill() && style.getStroke()) {\n            labelStyle = Cesium.LabelStyle.FILL_AND_OUTLINE;\n        }\n        options.style = labelStyle;\n        let horizontalOrigin;\n        switch (style.getTextAlign()) {\n            case 'left':\n                horizontalOrigin = Cesium.HorizontalOrigin.LEFT;\n                break;\n            case 'right':\n                horizontalOrigin = Cesium.HorizontalOrigin.RIGHT;\n                break;\n            case 'center':\n            default:\n                horizontalOrigin = Cesium.HorizontalOrigin.CENTER;\n        }\n        options.horizontalOrigin = horizontalOrigin;\n        if (style.getTextBaseline()) {\n            let verticalOrigin;\n            switch (style.getTextBaseline()) {\n                case 'top':\n                    verticalOrigin = Cesium.VerticalOrigin.TOP;\n                    break;\n                case 'middle':\n                    verticalOrigin = Cesium.VerticalOrigin.CENTER;\n                    break;\n                case 'bottom':\n                    verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\n                    break;\n                case 'alphabetic':\n                    verticalOrigin = Cesium.VerticalOrigin.TOP;\n                    break;\n                case 'hanging':\n                    verticalOrigin = Cesium.VerticalOrigin.BOTTOM;\n                    break;\n                default:\n                    console.assert(false, `unhandled baseline ${style.getTextBaseline()}`);\n            }\n            options.verticalOrigin = verticalOrigin;\n        }\n        const l = labels.add(options);\n        this.setReferenceForPicking(layer, feature, l);\n        return labels;\n    }\n    /**\n     * Convert an OpenLayers style to a Cesium Material.\n     * @api\n     */\n    olStyleToCesium(feature, style, outline) {\n        const fill = style.getFill();\n        const stroke = style.getStroke();\n        if ((outline && !stroke) || (!outline && !fill)) {\n            return null; // FIXME use a default style? Developer error?\n        }\n        const olColor = outline ? stroke.getColor() : fill.getColor();\n        const color = convertColorToCesium(olColor);\n        const lineDash = stroke.getLineDash();\n        if (outline && lineDash) {\n            return Cesium.Material.fromType('PolylineDash', {\n                dashPattern: dashPattern(lineDash),\n                color\n            });\n        }\n        else {\n            return Cesium.Material.fromType('Color', {\n                color\n            });\n        }\n    }\n    /**\n     * Compute OpenLayers plain style.\n     * Evaluates style function, blend arrays, get default style.\n     * @api\n     */\n    computePlainStyle(layer, feature, fallbackStyleFunction, resolution) {\n        /**\n         * @type {ol.FeatureStyleFunction|undefined}\n         */\n        const featureStyleFunction = feature.getStyleFunction();\n        /**\n         * @type {ol.style.Style|Array.<ol.style.Style>}\n         */\n        let style = null;\n        if (featureStyleFunction) {\n            style = featureStyleFunction(feature, resolution);\n        }\n        if (!style && fallbackStyleFunction) {\n            style = fallbackStyleFunction(feature, resolution);\n        }\n        if (!style) {\n            // The feature must not be displayed\n            return null;\n        }\n        // FIXME combine materials as in cesium-materials-pack?\n        // then this function must return a custom material\n        // More simply, could blend the colors like described in\n        // http://en.wikipedia.org/wiki/Alpha_compositing\n        return Array.isArray(style) ? style : [style];\n    }\n    /**\n     */\n    getGeometryFromFeature(feature, style, opt_geom) {\n        if (opt_geom) {\n            return opt_geom;\n        }\n        const geom3d = feature.get('olcs_3d_geometry');\n        if (geom3d && geom3d instanceof OLGeometry) {\n            return geom3d;\n        }\n        if (style) {\n            const geomFuncRes = style.getGeometryFunction()(feature);\n            if (geomFuncRes instanceof OLGeometry) {\n                return geomFuncRes;\n            }\n        }\n        return feature.getGeometry();\n    }\n    /**\n     * Convert one OpenLayers feature up to a collection of Cesium primitives.\n     * @api\n     */\n    olFeatureToCesium(layer, feature, style, context, opt_geom) {\n        const geom = this.getGeometryFromFeature(feature, style, opt_geom);\n        if (!geom) {\n            // OpenLayers features may not have a geometry\n            // See http://geojson.org/geojson-spec.html#feature-objects\n            return null;\n        }\n        const proj = context.projection;\n        const newBillboardAddedCallback = function (bb) {\n            const featureBb = context.featureToCesiumMap[getUid(feature)];\n            if (featureBb instanceof Array) {\n                featureBb.push(bb);\n            }\n            else {\n                context.featureToCesiumMap[getUid(feature)] = [bb];\n            }\n        };\n        switch (geom.getType()) {\n            case 'GeometryCollection':\n                const primitives = new Cesium.PrimitiveCollection();\n                geom.getGeometriesArray().forEach((geom) => {\n                    if (geom) {\n                        const prims = this.olFeatureToCesium(layer, feature, style, context, geom);\n                        if (prims) {\n                            primitives.add(prims);\n                        }\n                    }\n                });\n                return primitives;\n            case 'Point':\n                const bbs = context.billboards;\n                const result = this.olPointGeometryToCesium(layer, feature, geom, proj, style, bbs, newBillboardAddedCallback);\n                if (!result) {\n                    // no wrapping primitive\n                    return null;\n                }\n                else {\n                    return result;\n                }\n            case 'Circle':\n                return this.olCircleGeometryToCesium(layer, feature, geom, proj, style);\n            case 'LineString':\n                return this.olLineStringGeometryToCesium(layer, feature, geom, proj, style);\n            case 'Polygon':\n                return this.olPolygonGeometryToCesium(layer, feature, geom, proj, style);\n            case 'MultiPoint':\n                return this.olMultiGeometryToCesium(layer, feature, geom, proj, style, context.billboards, newBillboardAddedCallback) || null;\n            case 'MultiLineString':\n                return this.olMultiGeometryToCesium(layer, feature, geom, proj, style, context.billboards, newBillboardAddedCallback) || null;\n            case 'MultiPolygon':\n                return this.olMultiGeometryToCesium(layer, feature, geom, proj, style, context.billboards, newBillboardAddedCallback) || null;\n            case 'LinearRing':\n                throw new Error('LinearRing should only be part of polygon.');\n            default:\n                throw new Error(`Ol geom type not handled : ${geom.getType()}`);\n        }\n    }\n    /**\n     * Convert an OpenLayers vector layer to Cesium primitive collection.\n     * For each feature, the associated primitive will be stored in\n     * `featurePrimitiveMap`.\n     * @api\n     */\n    olVectorLayerToCesium(olLayer, olView, featurePrimitiveMap) {\n        const proj = olView.getProjection();\n        const resolution = olView.getResolution();\n        if (resolution === undefined || !proj) {\n            console.assert(false, 'View not ready');\n            // an assertion is not enough for closure to assume resolution and proj\n            // are defined\n            throw new Error('View not ready');\n        }\n        let source = olLayer.getSource();\n        if (source instanceof OLClusterSource) {\n            source = source.getSource();\n        }\n        console.assert(source instanceof VectorSource);\n        const features = source.getFeatures();\n        const counterpart = new VectorLayerCounterpart(proj, this.scene);\n        const context = counterpart.context;\n        for (let i = 0; i < features.length; ++i) {\n            const feature = features[i];\n            if (!feature) {\n                continue;\n            }\n            const layerStyle = olLayer.getStyleFunction();\n            const styles = this.computePlainStyle(olLayer, feature, layerStyle, resolution);\n            if (!styles || !styles.length) {\n                // only 'render' features with a style\n                continue;\n            }\n            let primitives = null;\n            for (let i = 0; i < styles.length; i++) {\n                const prims = this.olFeatureToCesium(olLayer, feature, styles[i], context);\n                if (prims) {\n                    if (!primitives) {\n                        primitives = prims;\n                    }\n                    else if (prims) {\n                        let i = 0, prim;\n                        while ((prim = prims.get(i))) {\n                            primitives.add(prim);\n                            i++;\n                        }\n                    }\n                }\n            }\n            if (!primitives) {\n                continue;\n            }\n            featurePrimitiveMap[getUid(feature)] = primitives;\n            counterpart.getRootPrimitive().add(primitives);\n        }\n        return counterpart;\n    }\n    /**\n     * Convert an OpenLayers feature to Cesium primitive collection.\n     * @api\n     */\n    convert(layer, view, feature, context) {\n        const proj = view.getProjection();\n        const resolution = view.getResolution();\n        if (resolution == undefined || !proj) {\n            return null;\n        }\n        /**\n         * @type {ol.StyleFunction|undefined}\n         */\n        const layerStyle = layer.getStyleFunction();\n        const styles = this.computePlainStyle(layer, feature, layerStyle, resolution);\n        if (!styles || !styles.length) {\n            // only 'render' features with a style\n            return null;\n        }\n        context.projection = proj;\n        /**\n         * @type {Cesium.Primitive|null}\n         */\n        let primitives = null;\n        for (let i = 0; i < styles.length; i++) {\n            const prims = this.olFeatureToCesium(layer, feature, styles[i], context);\n            if (!primitives) {\n                primitives = prims;\n            }\n            else if (prims) {\n                let i = 0, prim;\n                while ((prim = prims.get(i))) {\n                    primitives.add(prim);\n                    i++;\n                }\n            }\n        }\n        return primitives;\n    }\n}\n/**\n * Transform a canvas line dash pattern to a Cesium dash pattern\n * See https://cesium.com/learn/cesiumjs/ref-doc/PolylineDashMaterialProperty.html#dashPattern\n * @param lineDash\n */\nexport function dashPattern(lineDash) {\n    if (lineDash.length < 2) {\n        lineDash = [1, 1];\n    }\n    const segments = lineDash.length % 2 === 0 ? lineDash : [...lineDash, ...lineDash];\n    const total = segments.reduce((a, b) => a + b, 0);\n    const div = total / 16;\n    // create a 16 bit binary string\n    let binaryString = segments.map((segment, index) => {\n        // we alternate between 1 and 0\n        const digit = index % 2 === 0 ? '1' : '0';\n        // We scale the segment length to fit 16 slots.\n        let count = Math.round(segment / div);\n        if (index === 0 && count === 0) {\n            // We need to start with a 1\n            count = 1;\n        }\n        return digit.repeat(count);\n    }).join('');\n    // We rounded so it might be that the string is too short or too long.\n    // We try to fix it by padding or truncating the string.\n    if (binaryString.length < 16) {\n        binaryString = binaryString.padEnd(16, '0');\n    }\n    else if (binaryString.length > 16) {\n        binaryString = binaryString.substring(0, 16);\n    }\n    if (binaryString[15] === '1') {\n        // We need to really finish with a 0\n        binaryString = binaryString.substring(0, 15) + '0';\n    }\n    console.assert(binaryString.length === 16);\n    return parseInt(binaryString, 2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmVhdHVyZUNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbGNzL0ZlYXR1cmVDb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxZQUFZLEVBQUUsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxJQUFJLHVCQUF1QixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkUsT0FBTyxFQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxvQkFBb0IsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsaUNBQWlDLEVBQUUsbUNBQW1DLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDOUksT0FBTyxzQkFBc0IsRUFBRSxFQUErQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBOFosTUFBTSxRQUFRLENBQUM7QUFLcGIsT0FBTyxFQUEyQyxNQUFNLG1CQUFtQixDQUFDO0FBSTVFLE9BQU8sRUFBQyxRQUFRLElBQUksVUFBVSxFQUE0SSxNQUFNLFlBQVksQ0FBQztBQStEN0wsTUFBTSxDQUFDLE9BQU8sT0FBTyxnQkFBZ0I7SUFpQmI7SUFmdEI7O09BRUc7SUFDSyxvQ0FBb0MsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRS9FLDBCQUEwQixHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXJFOzs7Ozs7O09BT0c7SUFDSCxZQUFzQixLQUFZ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","import olSourceVector, {} from 'ol/source/Vector.js';\nimport olLayerLayer from 'ol/layer/Layer.js';\nimport olSourceCluster from 'ol/source/Cluster.js';\nimport { getUid } from './util.js';\nimport olLayerVector from 'ol/layer/Vector.js';\nimport olLayerVectorTile from 'ol/layer/VectorTile.js';\nimport olcsAbstractSynchronizer from './AbstractSynchronizer.js';\nimport olcsFeatureConverter from './FeatureConverter.js';\n// eslint-disable-next-line no-duplicate-imports\nimport {} from './core/VectorLayerCounterpart.js';\nimport {} from './core.js';\nexport default class VectorSynchronizer extends olcsAbstractSynchronizer {\n    converter;\n    csAllPrimitives_;\n    /**\n     * Unidirectionally synchronize OpenLayers vector layers to Cesium.\n     */\n    constructor(map, scene, opt_converter) {\n        super(map, scene);\n        this.converter = opt_converter || new olcsFeatureConverter(scene);\n        this.csAllPrimitives_ = new Cesium.PrimitiveCollection();\n        scene.primitives.add(this.csAllPrimitives_);\n        this.csAllPrimitives_.destroyPrimitives = false;\n    }\n    addCesiumObject(counterpart) {\n        console.assert(counterpart);\n        const collection = counterpart.getRootPrimitive();\n        collection.counterpart = counterpart;\n        this.csAllPrimitives_.add(counterpart.getRootPrimitive());\n    }\n    destroyCesiumObject(object) {\n        object.getRootPrimitive().destroy();\n    }\n    removeSingleCesiumObject(object, destroy) {\n        object.destroy();\n        this.csAllPrimitives_.destroyPrimitives = destroy;\n        this.csAllPrimitives_.remove(object.getRootPrimitive());\n        this.csAllPrimitives_.destroyPrimitives = false;\n    }\n    removeAllCesiumObjects(destroy) {\n        this.csAllPrimitives_.destroyPrimitives = destroy;\n        if (destroy) {\n            for (let i = 0; i < this.csAllPrimitives_.length; ++i) {\n                this.csAllPrimitives_.get(i)['counterpart'].destroy();\n            }\n        }\n        this.csAllPrimitives_.removeAll();\n        this.csAllPrimitives_.destroyPrimitives = false;\n    }\n    /**\n     * Synchronizes the layer visibility properties\n     * to the given Cesium Primitive.\n     */\n    updateLayerVisibility(olLayerWithParents, csPrimitive) {\n        let visible = true;\n        [olLayerWithParents.layer].concat(olLayerWithParents.parents).forEach((olLayer) => {\n            const layerVisible = olLayer.getVisible();\n            if (layerVisible !== undefined) {\n                visible = visible && layerVisible;\n            }\n            else {\n                visible = false;\n            }\n        });\n        csPrimitive.show = visible;\n    }\n    createSingleLayerCounterparts(olLayerWithParents) {\n        const olLayer = olLayerWithParents.layer;\n        if (!(olLayer instanceof olLayerVector) || olLayer instanceof olLayerVectorTile) {\n            return null;\n        }\n        console.assert(olLayer instanceof olLayerLayer);\n        let source = olLayer.getSource();\n        if (source instanceof olSourceCluster) {\n            source = source.getSource();\n        }\n        if (!source) {\n            return null;\n        }\n        console.assert(source instanceof olSourceVector);\n        console.assert(this.view);\n        const view = this.view;\n        const featurePrimitiveMap = {};\n        const counterpart = this.converter.olVectorLayerToCesium(olLayer, view, featurePrimitiveMap);\n        const csPrimitives = counterpart.getRootPrimitive();\n        const olListenKeys = counterpart.olListenKeys;\n        [olLayerWithParents.layer].concat(olLayerWithParents.parents).forEach((olLayerItem) => {\n            olListenKeys.push(olLayerItem.on('change:visible', () => {\n                this.updateLayerVisibility(olLayerWithParents, csPrimitives);\n            }));\n        });\n        this.updateLayerVisibility(olLayerWithParents, csPrimitives);\n        const onAddFeature = (feature) => {\n            const context = counterpart.context;\n            const prim = this.converter.convert(olLayer, view, feature, context);\n            if (prim) {\n                featurePrimitiveMap[getUid(feature)] = prim;\n                csPrimitives.add(prim);\n            }\n        };\n        const onRemoveFeature = (feature) => {\n            const id = getUid(feature);\n            const context = counterpart.context;\n            const bbs = context.featureToCesiumMap[id];\n            if (bbs) {\n                delete context.featureToCesiumMap[id];\n                bbs.forEach((bb) => {\n                    if (bb instanceof Cesium.Billboard) {\n                        context.billboards.remove(bb);\n                    }\n                });\n            }\n            const csPrimitive = featurePrimitiveMap[id];\n            delete featurePrimitiveMap[id];\n            if (csPrimitive) {\n                csPrimitives.remove(csPrimitive);\n            }\n        };\n        olListenKeys.push(source.on('addfeature', (e) => {\n            console.assert(e.feature);\n            onAddFeature(e.feature);\n        }));\n        olListenKeys.push(source.on('removefeature', (e) => {\n            console.assert(e.feature);\n            onRemoveFeature(e.feature);\n        }));\n        olListenKeys.push(source.on('changefeature', (e) => {\n            const feature = e.feature;\n            console.assert(feature);\n            onRemoveFeature(feature);\n            onAddFeature(feature);\n        }));\n        return counterpart ? [counterpart] : null;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yU3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29sY3MvVmVjdG9yU3luY2hyb25pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sY0FBYyxFQUFFLEVBQXdCLE1BQU0scUJBQXFCLENBQUM7QUFDM0UsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxlQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLGlCQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sd0JBQXdCLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxvQkFBb0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxnREFBZ0Q7QUFDaEQsT0FBTyxFQUdOLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUF1QixNQUFNLFdBQVcsQ0FBQztBQUtoRCxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFtQixTQUFRLHdCQUFnRDtJQUNwRixTQUFTLENBQXVCO0lBQ2xDLGdCQUFnQixDQUFzQjtJQUM5Qzs7T0FFRztJQUNILFlBQVksR0FBUSxFQUFFLEtBQVksRUFBRSxhQUFvQztRQUN0RSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxCLElBQUksQ0FBQyxTQUFTLEdBQUcsYUFBYSxJQUFJLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixHQUFH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","import OLOverlay from 'ol/Overlay.js';\nimport { transform } from 'ol/proj.js';\nimport { unByKey as olObservableUnByKey } from 'ol/Observable.js';\n/**\n * @param node The node to remove.\n * @return The node that was removed or null.\n */\nfunction removeNode(node) {\n    return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n}\n/**\n * @param {Node} node The node to remove the children from.\n */\nfunction removeChildren(node) {\n    while (node.lastChild) {\n        node.removeChild(node.lastChild);\n    }\n}\nfunction cloneNode(node, parent) {\n    const clone = node.cloneNode();\n    if (node.nodeName === 'CANVAS') {\n        const ctx = clone.getContext('2d');\n        ctx.drawImage(node, 0, 0);\n    }\n    if (parent) {\n        parent.appendChild(clone);\n    }\n    if (node.nodeType !== Node.TEXT_NODE) {\n        clone.addEventListener('click', (event) => {\n            node.dispatchEvent(new MouseEvent('click', event));\n            event.stopPropagation();\n        });\n    }\n    const nodes = node.childNodes;\n    for (let i = 0; i < nodes.length; i++) {\n        if (!nodes[i]) {\n            continue;\n        }\n        cloneNode(nodes[i], clone);\n    }\n    return clone;\n}\nexport default class SynchronizedOverlay extends OLOverlay {\n    scenePostRenderListenerRemover_ = null;\n    scene_;\n    synchronizer_;\n    parent_;\n    positionWGS84_;\n    observer_;\n    attributeObserver_ = [];\n    listenerKeys_;\n    /**\n     * @param options SynchronizedOverlay Options.\n     * @api\n     */\n    constructor(options) {\n        const parent = options.parent;\n        super(parent.getOptions());\n        this.scene_ = options.scene;\n        this.synchronizer_ = options.synchronizer;\n        this.parent_ = parent;\n        this.positionWGS84_ = undefined;\n        this.observer_ = new MutationObserver(this.handleElementChanged.bind(this));\n        this.attributeObserver_ = [];\n        this.listenerKeys_ = [];\n        // synchronize our Overlay with the parent Overlay\n        const setPropertyFromEvent = (event) => this.setPropertyFromEvent_(event);\n        this.listenerKeys_.push(this.parent_.on('change:element', setPropertyFromEvent));\n        this.listenerKeys_.push(this.parent_.on('change:offset', setPropertyFromEvent));\n        this.listenerKeys_.push(this.parent_.on('change:position', setPropertyFromEvent));\n        this.listenerKeys_.push(this.parent_.on('change:positioning', setPropertyFromEvent));\n        this.setProperties(this.parent_.getProperties());\n        this.handleMapChanged();\n        this.handleElementChanged();\n        this.handlePositionChanged();\n    }\n    /**\n     * @param target\n     */\n    observeTarget_(target) {\n        if (!this.observer_) {\n            // not ready, skip the event (this occurs on construction)\n            return;\n        }\n        this.observer_.disconnect();\n        this.observer_.observe(target, {\n            attributes: false,\n            childList: true,\n            characterData: true,\n            subtree: true\n        });\n        this.attributeObserver_.forEach((observer) => {\n            observer.disconnect();\n        });\n        this.attributeObserver_.length = 0;\n        for (let i = 0; i < target.childNodes.length; i++) {\n            const node = target.childNodes[i];\n            if (node.nodeType === 1) {\n                const observer = new MutationObserver(this.handleElementChanged.bind(this));\n                observer.observe(node, {\n                    attributes: true,\n                    subtree: true\n                });\n                this.attributeObserver_.push(observer);\n            }\n        }\n    }\n    /**\n     *\n     * @param event\n     */\n    setPropertyFromEvent_(event) {\n        if (event.target && event.key) {\n            this.set(event.key, event.target.get(event.key));\n        }\n    }\n    /**\n     * Get the scene associated with this overlay.\n     * @see ol.Overlay.prototype.getMap\n     * @return The scene that the overlay is part of.\n     * @api\n     */\n    getScene() {\n        return this.scene_;\n    }\n    /**\n     * @override\n     */\n    handleMapChanged() {\n        if (this.scenePostRenderListenerRemover_) {\n            this.scenePostRenderListenerRemover_();\n            removeNode(this.element);\n        }\n        this.scenePostRenderListenerRemover_ = null;\n        const scene = this.getScene();\n        if (scene) {\n            this.scenePostRenderListenerRemover_ = scene.postRender.addEventListener(this.updatePixelPosition.bind(this));\n            this.updatePixelPosition();\n            const container = this.stopEvent ?\n                this.synchronizer_.getOverlayContainerStopEvent() : this.synchronizer_.getOverlayContainer();\n            if (this.insertFirst) {\n                container.insertBefore(this.element, container.childNodes[0] || null);\n            }\n            else {\n                container.appendChild(this.element);\n            }\n        }\n    }\n    /**\n     * @override\n     */\n    handlePositionChanged() {\n        // check if constructor has completed\n        if (!this.parent_) {\n            return;\n        }\n        // transform position to WGS84\n        const position = this.getPosition();\n        if (position) {\n            const sourceProjection = this.parent_.getMap().getView().getProjection();\n            this.positionWGS84_ = transform(position, sourceProjection, 'EPSG:4326');\n        }\n        else {\n            this.positionWGS84_ = undefined;\n        }\n        this.updatePixelPosition();\n    }\n    /**\n     * @override\n     */\n    handleElementChanged() {\n        removeChildren(this.element);\n        const element = this.getElement();\n        if (element) {\n            if (element.parentNode && element.parentNode.childNodes) {\n                for (const node of Array.from(element.parentNode.childNodes)) {\n                    const clonedNode = cloneNode(node, null);\n                    this.element.appendChild(clonedNode);\n                }\n            }\n        }\n        if (element.parentNode) {\n            // set new Observer\n            this.observeTarget_(element.parentNode);\n        }\n    }\n    /**\n     * @override\n     */\n    updatePixelPosition() {\n        const position = this.positionWGS84_;\n        if (!this.scene_ || !position) {\n            this.setVisible(false);\n            return;\n        }\n        let height = 0;\n        if (position.length === 2) {\n            const globeHeight = this.scene_.globe.getHeight(Cesium.Cartographic.fromDegrees(position[0], position[1]));\n            if (globeHeight && this.scene_.globe.tilesLoaded) {\n                position[2] = globeHeight;\n            }\n            if (globeHeight) {\n                height = globeHeight;\n            }\n        }\n        else {\n            height = position[2];\n        }\n        const cartesian = Cesium.Cartesian3.fromDegrees(position[0], position[1], height);\n        const camera = this.scene_.camera;\n        const ellipsoidBoundingSphere = new Cesium.BoundingSphere(new Cesium.Cartesian3(), 6356752);\n        const occluder = new Cesium.Occluder(ellipsoidBoundingSphere, camera.position);\n        // check if overlay position is behind the horizon\n        if (!occluder.isPointVisible(cartesian)) {\n            this.setVisible(false);\n            return;\n        }\n        const cullingVolume = camera.frustum.computeCullingVolume(camera.position, camera.direction, camera.up);\n        // check if overlay position is visible from the camera\n        if (cullingVolume.computeVisibility(new Cesium.BoundingSphere(cartesian)) !== 1) {\n            this.setVisible(false);\n            return;\n        }\n        this.setVisible(true);\n        const pixelCartesian = this.scene_.cartesianToCanvasCoordinates(cartesian);\n        const pixel = [pixelCartesian.x, pixelCartesian.y];\n        const mapSize = [this.scene_.canvas.width, this.scene_.canvas.height];\n        this.updateRenderedPosition(pixel, mapSize);\n    }\n    /**\n     * Destroys the overlay, removing all its listeners and elements\n     * @api\n     */\n    destroy() {\n        if (this.scenePostRenderListenerRemover_) {\n            this.scenePostRenderListenerRemover_();\n        }\n        if (this.observer_) {\n            this.observer_.disconnect();\n        }\n        olObservableUnByKey(this.listenerKeys_);\n        this.listenerKeys_.splice(0);\n        if ('removeNode' in this.element) {\n            // @ts-ignore\n            this.element.removeNode(true);\n        }\n        else {\n            this.element.remove();\n        }\n        this.element = null;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3luY2hyb25pemVkT3ZlcmxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbGNzL1N5bmNocm9uaXplZE92ZXJsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFDLE9BQU8sSUFBSSxtQkFBbUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBT2hFOzs7R0FHRztBQUNILFNBQVMsVUFBVSxDQUFDLElBQVU7SUFDNUIsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM1RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxJQUFVO0lBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQWlDLElBQU8sRUFBRSxNQUFTO0lBQ25FLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQU8sQ0FBQztJQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUksS0FBc0MsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIs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","import SynchronizedOverlay from './SynchronizedOverlay.js';\nimport { getUid } from './util.js';\nimport { unByKey as olObservableUnByKey } from 'ol/Observable.js';\nexport default class OverlaySynchronizer {\n    map;\n    scene;\n    overlayCollection_;\n    overlayContainerStopEvent_;\n    overlayContainer_;\n    overlayMap_ = new Map();\n    overlayEvents = ['click', 'dblclick', 'mousedown', 'touchstart', 'pointerdown', 'mousewheel', 'wheel'];\n    listenerKeys_ = [];\n    /**\n    * @param map\n    * @param scene\n    * @constructor\n    * @api\n    */\n    constructor(map, scene) {\n        this.map = map;\n        this.scene = scene;\n        this.map = map;\n        this.overlayCollection_ = this.map.getOverlays();\n        this.scene = scene;\n        this.overlayContainerStopEvent_ = document.createElement('div');\n        this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n        this.overlayEvents.forEach((name) => {\n            this.overlayContainerStopEvent_.addEventListener(name, evt => evt.stopPropagation());\n        });\n        this.scene.canvas.parentElement.appendChild(this.overlayContainerStopEvent_);\n        this.overlayContainer_ = document.createElement('div');\n        this.overlayContainer_.className = 'ol-overlaycontainer';\n        this.scene.canvas.parentElement.appendChild(this.overlayContainer_);\n    }\n    /**\n    * Get the element that serves as a container for overlays that don't allow\n    * event propagation. Elements added to this container won't let mousedown and\n    * touchstart events through to the map, so clicks and gestures on an overlay\n    * don't trigger any {@link ol.MapBrowserEvent}.\n    * @return The map's overlay container that stops events.\n    */\n    getOverlayContainerStopEvent() {\n        return this.overlayContainerStopEvent_;\n    }\n    /**\n    * Get the element that serves as a container for overlays.\n    * @return The map's overlay container.\n    */\n    getOverlayContainer() {\n        return this.overlayContainer_;\n    }\n    /**\n    * Destroy all and perform complete synchronization of the overlays.\n    * @api\n    */\n    synchronize() {\n        this.destroyAll();\n        this.overlayCollection_.forEach((overlay) => { this.addOverlay(overlay); });\n        this.listenerKeys_.push(this.overlayCollection_.on('add', (evt) => this.addOverlay(evt.element)));\n        this.listenerKeys_.push(this.overlayCollection_.on('remove', (evt) => this.removeOverlay(evt.element)));\n    }\n    /**\n    * @api\n    */\n    addOverlay(overlay) {\n        if (!overlay) {\n            return;\n        }\n        const cesiumOverlay = new SynchronizedOverlay({\n            scene: this.scene,\n            synchronizer: this,\n            parent: overlay\n        });\n        this.overlayMap_.set(getUid(overlay), cesiumOverlay);\n    }\n    /**\n    * Removes an overlay from the scene\n    * @api\n    */\n    removeOverlay(overlay) {\n        const overlayId = getUid(overlay);\n        const csOverlay = this.overlayMap_.get(overlayId);\n        if (csOverlay) {\n            csOverlay.destroy();\n            this.overlayMap_.delete(overlayId);\n        }\n    }\n    /**\n    * Destroys all the created Cesium objects.\n    */\n    destroyAll() {\n        this.overlayMap_.forEach((overlay) => {\n            overlay.destroy();\n        });\n        this.overlayMap_.clear();\n        olObservableUnByKey(this.listenerKeys_);\n        this.listenerKeys_.length = 0;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3ZlcmxheVN5bmNocm9uaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbGNzL092ZXJsYXlTeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxtQkFBbUIsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR2pDLE9BQU8sRUFBQyxPQUFPLElBQUksbUJBQW1CLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUdoRSxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQWNoQjtJQUFzQjtJQWJwQyxrQkFBa0IsQ0FBc0I7SUFDeEMsMEJBQTBCLENBQWlCO0lBQzNDLGlCQUFpQixDQUFpQjtJQUNsQyxXQUFXLEdBQXFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDMUQsYUFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkcsYUFBYSxHQUFnQixFQUFFLENBQUM7SUFFeEM7Ozs7O01BS0U7SUFDRixZQUFzQixHQUFVLEVBQVksS0FBWTtRQUFsQyxRQUFHLEdBQUgsR0FBRyxDQUFPO1FBQVksVUFBSyxHQUFMLEtBQUssQ0FBTztRQUN0RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQywwQkFBMEIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLEdBQUcsK0JBQStCLENBQUM7UUFDNUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENB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","import olGeomPoint from 'ol/geom/Point.js';\nimport { supportsImageRenderingPixelated, imageRenderingValue } from './util.js';\nimport { ol4326CoordinateToCesiumCartesian } from './core.js';\nimport { getTransform } from 'ol/proj.js';\nimport olcsAutoRenderLoop from './AutoRenderLoop.js';\nimport olcsCamera from './Camera.js';\nimport olcsRasterSynchronizer from './RasterSynchronizer.js';\nimport olcsVectorSynchronizer from './VectorSynchronizer.js';\nimport olcsOverlaySynchronizer from './OverlaySynchronizer.js';\n/**\n * Moved from Cesium\n * The state of a BoundingSphere computation being performed by a {@link Visualizer}.\n */\nconst BoundingSphereState = {\n    /**\n     * The BoundingSphere has been computed.\n     */\n    DONE: 0,\n    /**\n     * The BoundingSphere is still being computed.\n     */\n    PENDING: 1,\n    /**\n     * The BoundingSphere does not exist.\n     */\n    FAILED: 2,\n};\n/**\n * @typedef {Object} OLCesiumOptions\n * @property {import('ol/Map.js').default} map The OpenLayers map we want to show on a Cesium scene.\n * @property {Element|string} [target] Target element for the Cesium scene.\n * @property {function(!import('ol/Map.js').default, !Cesium.Scene, !Cesium.DataSourceCollection): Array<import('olcs/AbstractSynchronizer.js').default>}\n *      [createSynchronizers] Callback function which will be called by the {@link olcs.OLCesium}\n *      constructor to create custom synchronizers. Receives an `ol.Map` and a `Cesium.Scene` as arguments,\n *      and needs to return an array of {@link import('olcs/AbstractSynchronizer.js').default}.\n * @property {function(): Cesium.JulianDate} [time] Control the current time used by Cesium.\n * @property {boolean} [stopOpenLayersEventsPropagation] Prevent propagation of mouse/touch events to\n *      OpenLayers when Cesium is active.\n * @property {Cesium.SceneOptions} [sceneOptions] Allows the passing of property value to the\n *      `Cesium.Scene`.\n */\nexport default class OLCesium {\n    autoRenderLoop_ = null;\n    map_;\n    time_;\n    to4326Transform_;\n    resolutionScale_ = 1.0;\n    canvasClientWidth_ = 0.0;\n    canvasClientHeight_ = 0.0;\n    resolutionScaleChanged_ = true; // force resize\n    container_;\n    isOverMap_;\n    canvas_;\n    enabled_ = false;\n    pausedInteractions_ = [];\n    hiddenRootGroup_ = null;\n    scene_;\n    camera_;\n    globe_;\n    dataSourceCollection_;\n    dataSourceDisplay_;\n    /** Time of the last rendered frame, as returned by `performance.now()`. */\n    lastFrameTime_ = 0;\n    /** The identifier returned by `requestAnimationFrame`. */\n    renderId_;\n    /** Target frame rate for the render loop.  */\n    targetFrameRate_ = Number.POSITIVE_INFINITY;\n    /** If the Cesium render loop is being blocked. */\n    blockCesiumRendering_ = false;\n    /** If the warmup routine is active. */\n    warmingUp_ = false;\n    trackedFeature_ = null;\n    trackedEntity_ = null;\n    entityView_ = null;\n    needTrackedEntityUpdate_ = false;\n    boundingSphereScratch_ = new Cesium.BoundingSphere();\n    synchronizers_;\n    refresh2DAfterCameraMoveEndOnly = false;\n    moveEndRemoveCallback_;\n    constructor(options) {\n        this.map_ = options.map;\n        this.time_ = options.time || function () {\n            return Cesium.JulianDate.now();\n        };\n        /**\n         * No change of the view projection.\n         */\n        this.to4326Transform_ = getTransform(this.map_.getView().getProjection(), 'EPSG:4326');\n        const fillArea = 'position:absolute;top:0;left:0;width:100%;height:100%;touch-action:none;';\n        this.container_ = document.createElement('DIV');\n        const containerAttribute = document.createAttribute('style');\n        containerAttribute.value = `${fillArea}visibility:hidden;`;\n        this.container_.setAttributeNode(containerAttribute);\n        let targetElement = options.target || this.map_.getViewport();\n        if (typeof targetElement === 'string') {\n            targetElement = document.getElementById(targetElement);\n        }\n        targetElement.appendChild(this.container_);\n        /**\n         * Whether the Cesium container is placed over the ol map.\n         * a target => side by side mode\n         * no target => over map mode\n         */\n        this.isOverMap_ = !options.target;\n        if (this.isOverMap_ && options.stopOpenLayersEventsPropagation) {\n            const overlayEvents = ['click', 'dblclick', 'mousedown', 'touchstart', 'pointerdown', 'mousewheel', 'wheel'];\n            for (let i = 0, ii = overlayEvents.length; i < ii; ++i) {\n                this.container_.addEventListener(overlayEvents[i], evt => evt.stopPropagation());\n            }\n        }\n        this.canvas_ = document.createElement('canvas');\n        const canvasAttribute = document.createAttribute('style');\n        canvasAttribute.value = fillArea;\n        this.canvas_.setAttributeNode(canvasAttribute);\n        if (supportsImageRenderingPixelated()) {\n            // non standard CSS4\n            this.canvas_.style['imageRendering'] = imageRenderingValue();\n        }\n        this.canvas_.oncontextmenu = function () {\n            return false;\n        };\n        this.canvas_.onselectstart = function () {\n            return false;\n        };\n        this.container_.appendChild(this.canvas_);\n        const sceneOptions = options.sceneOptions !== undefined ?\n            { ...options.sceneOptions, canvas: this.canvas_, scene3DOnly: true } :\n            { canvas: this.canvas_, scene3DOnly: true };\n        this.scene_ = new Cesium.Scene(sceneOptions);\n        const sscc = this.scene_.screenSpaceCameraController;\n        if (!Array.isArray(sscc.tiltEventTypes)) {\n            console.log('sscc is not an array');\n        }\n        else {\n            sscc.tiltEventTypes.push({\n                'eventType': Cesium.CameraEventType.LEFT_DRAG,\n                'modifier': Cesium.KeyboardEventModifier.SHIFT\n            });\n            sscc.tiltEventTypes.push({\n                'eventType': Cesium.CameraEventType.LEFT_DRAG,\n                'modifier': Cesium.KeyboardEventModifier.ALT\n            });\n        }\n        sscc.enableLook = false;\n        this.scene_.camera.constrainedAxis = Cesium.Cartesian3.UNIT_Z;\n        this.camera_ = new olcsCamera(this.scene_, this.map_);\n        this.globe_ = new Cesium.Globe(Cesium.Ellipsoid.WGS84);\n        this.globe_.baseColor = Cesium.Color.WHITE;\n        this.scene_.globe = this.globe_;\n        this.scene_.skyAtmosphere = new Cesium.SkyAtmosphere();\n        // The first layer of Cesium is special; using a 1x1 transparent image to workaround it.\n        // See https://github.com/AnalyticalGraphicsInc/cesium/issues/1323 for details.\n        const firstImageryProvider = new Cesium.SingleTileImageryProvider({\n            tileHeight: 1,\n            tileWidth: 1,\n            url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=',\n            rectangle: Cesium.Rectangle.fromDegrees(0, 0, 1, 1) // the Rectangle dimensions are arbitrary\n        });\n        this.globe_.imageryLayers.addImageryProvider(firstImageryProvider, 0);\n        this.dataSourceCollection_ = new Cesium.DataSourceCollection();\n        this.dataSourceDisplay_ = new Cesium.DataSourceDisplay({\n            scene: this.scene_,\n            dataSourceCollection: this.dataSourceCollection_\n        });\n        this.synchronizers_ = options.createSynchronizers ?\n            options.createSynchronizers(this.map_, this.scene_, this.dataSourceCollection_) : [\n            new olcsRasterSynchronizer(this.map_, this.scene_),\n            new olcsVectorSynchronizer(this.map_, this.scene_),\n            new olcsOverlaySynchronizer(this.map_, this.scene_)\n        ];\n        // Assures correct canvas size after initialisation\n        this.handleResize_();\n        for (let i = this.synchronizers_.length - 1; i >= 0; --i) {\n            this.synchronizers_[i].synchronize();\n        }\n        const eventHelper = new Cesium.EventHelper();\n        eventHelper.add(this.scene_.postRender, OLCesium.prototype.updateTrackedEntity_, this);\n        this.moveEndRemoveCallback_ = this.scene_.camera.moveEnd.addEventListener(() => {\n            if (this.refresh2DAfterCameraMoveEndOnly) {\n                this.camera_.checkCameraChange();\n            }\n        });\n    }\n    /**\n     * Destroys the Cesium resources held by this object.\n     */\n    destroy() {\n        cancelAnimationFrame(this.renderId_);\n        this.renderId_ = undefined;\n        this.synchronizers_.forEach(synchronizer => synchronizer.destroyAll());\n        this.camera_.destroy();\n        this.scene_.destroy();\n        // @ts-ignore TS2341\n        this.scene_._postRender = null;\n        this.moveEndRemoveCallback_();\n        this.container_.remove();\n    }\n    /**\n     * Render the Cesium scene.\n     */\n    render_() {\n        // if a call to `requestAnimationFrame` is pending, cancel it\n        if (this.renderId_ !== undefined) {\n            cancelAnimationFrame(this.renderId_);\n            this.renderId_ = undefined;\n        }\n        // only render if Cesium is enabled/warming and rendering hasn't been blocked\n        if ((this.enabled_ || this.warmingUp_) && !this.blockCesiumRendering_) {\n            this.renderId_ = requestAnimationFrame(this.onAnimationFrame_.bind(this));\n        }\n    }\n    /**\n     * Callback for `requestAnimationFrame`.\n     * @param {number} frameTime The frame time, from `performance.now()`.\n     */\n    onAnimationFrame_(frameTime) {\n        this.renderId_ = undefined;\n        // check if a frame was rendered within the target frame rate\n        const interval = 1000.0 / this.targetFrameRate_;\n        const delta = frameTime - this.lastFrameTime_;\n        if (delta < interval) {\n            // too soon, don't render yet\n            this.render_();\n            return;\n        }\n        // time to render a frame, save the time\n        this.lastFrameTime_ = frameTime;\n        const julianDate = this.time_();\n        // initializeFrame private property\n        // @ts-ignore TS2341\n        this.scene_.initializeFrame();\n        this.handleResize_();\n        this.dataSourceDisplay_.update(julianDate);\n        // Update tracked entity\n        if (this.entityView_) {\n            const trackedEntity = this.trackedEntity_;\n            // getBoundingSphere private property\n            // @ts-ignore TS2341\n            const trackedState = this.dataSourceDisplay_.getBoundingSphere(trackedEntity, false, this.boundingSphereScratch_);\n            if (trackedState === BoundingSphereState.DONE) {\n                this.boundingSphereScratch_.radius = 1; // a radius of 1 is enough for tracking points\n                this.entityView_.update(julianDate, this.boundingSphereScratch_);\n            }\n        }\n        this.scene_.render(julianDate);\n        if (!this.refresh2DAfterCameraMoveEndOnly) {\n            this.camera_.checkCameraChange();\n        }\n        // request the next render call after this one completes to ensure the browser doesn't get backed up\n        this.render_();\n    }\n    updateTrackedEntity_() {\n        if (!this.needTrackedEntityUpdate_) {\n            return;\n        }\n        const trackedEntity = this.trackedEntity_;\n        const scene = this.scene_;\n        // getBoundingSphere private property\n        // @ts-ignore TS2341\n        const state = this.dataSourceDisplay_.getBoundingSphere(trackedEntity, false, this.boundingSphereScratch_);\n        if (state === BoundingSphereState.PENDING) {\n            return;\n        }\n        scene.screenSpaceCameraController.enableTilt = false;\n        const bs = state !== BoundingSphereState.FAILED ? this.boundingSphereScratch_ : undefined;\n        if (bs) {\n            bs.radius = 1;\n        }\n        this.entityView_ = new Cesium.EntityView(trackedEntity, scene, scene.mapProjection.ellipsoid);\n        this.entityView_.update(this.time_(), bs);\n        this.needTrackedEntityUpdate_ = false;\n    }\n    handleResize_() {\n        let width = this.canvas_.clientWidth;\n        let height = this.canvas_.clientHeight;\n        if (width === 0 || height === 0) {\n            // The canvas DOM element is not ready yet.\n            return;\n        }\n        if (width === this.canvasClientWidth_ &&\n            height === this.canvasClientHeight_ &&\n            !this.resolutionScaleChanged_) {\n            return;\n        }\n        let resolutionScale = this.resolutionScale_;\n        if (!supportsImageRenderingPixelated()) {\n            resolutionScale *= window.devicePixelRatio || 1.0;\n        }\n        this.resolutionScaleChanged_ = false;\n        this.canvasClientWidth_ = width;\n        this.canvasClientHeight_ = height;\n        width *= resolutionScale;\n        height *= resolutionScale;\n        this.canvas_.width = width;\n        this.canvas_.height = height;\n        this.scene_.camera.frustum.aspectRatio = width / height;\n    }\n    getCamera() {\n        return this.camera_;\n    }\n    getOlMap() {\n        return this.map_;\n    }\n    getOlView() {\n        const view = this.map_.getView();\n        console.assert(view);\n        return view;\n    }\n    getCesiumScene() {\n        return this.scene_;\n    }\n    getDataSources() {\n        return this.dataSourceCollection_;\n    }\n    getDataSourceDisplay() {\n        return this.dataSourceDisplay_;\n    }\n    getEnabled() {\n        return this.enabled_;\n    }\n    /**\n     * Enables/disables the Cesium.\n     * This modifies the visibility style of the container element.\n     */\n    setEnabled(enable) {\n        if (this.enabled_ === enable) {\n            return;\n        }\n        this.enabled_ = enable;\n        // some Cesium operations are operating with canvas.clientWidth,\n        // so we can't remove it from DOM or even make display:none;\n        this.container_.style.visibility = this.enabled_ ? 'visible' : 'hidden';\n        let interactions;\n        if (this.enabled_) {\n            this.throwOnUnitializedMap_();\n            if (this.isOverMap_) {\n                interactions = this.map_.getInteractions();\n                interactions.forEach((el, i, arr) => {\n                    this.pausedInteractions_.push(el);\n                });\n                interactions.clear();\n                this.map_.addInteraction = interaction => this.pausedInteractions_.push(interaction);\n                this.map_.removeInteraction = (interaction) => {\n                    let interactionRemoved = false;\n                    this.pausedInteractions_ = this.pausedInteractions_.filter((i) => {\n                        const removed = i !== interaction;\n                        if (!interactionRemoved) {\n                            interactionRemoved = removed;\n                        }\n                        return removed;\n                    });\n                    return interactionRemoved ? interaction : undefined;\n                };\n                const rootGroup = this.map_.getLayerGroup();\n                if (rootGroup.getVisible()) {\n                    this.hiddenRootGroup_ = rootGroup;\n                    this.hiddenRootGroup_.setVisible(false);\n                }\n                this.map_.getOverlayContainer().classList.add('olcs-hideoverlay');\n            }\n            this.camera_.readFromView();\n            this.render_();\n        }\n        else {\n            if (this.isOverMap_) {\n                interactions = this.map_.getInteractions();\n                this.pausedInteractions_.forEach((interaction) => {\n                    interactions.push(interaction);\n                });\n                this.pausedInteractions_.length = 0;\n                this.map_.addInteraction = interaction => this.map_.getInteractions().push(interaction);\n                this.map_.removeInteraction = interaction => this.map_.getInteractions().remove(interaction);\n                this.map_.getOverlayContainer().classList.remove('olcs-hideoverlay');\n                if (this.hiddenRootGroup_) {\n                    this.hiddenRootGroup_.setVisible(true);\n                    this.hiddenRootGroup_ = null;\n                }\n            }\n            this.camera_.updateView();\n        }\n    }\n    /**\n     * Preload Cesium so that it is ready when transitioning from 2D to 3D.\n     * @param {number} height Target height of the camera\n     * @param {number} timeout Milliseconds after which the warming will stop\n    */\n    warmUp(height, timeout) {\n        if (this.enabled_) {\n            // already enabled\n            return;\n        }\n        this.throwOnUnitializedMap_();\n        this.camera_.readFromView();\n        const ellipsoid = this.globe_.ellipsoid;\n        const csCamera = this.scene_.camera;\n        const position = ellipsoid.cartesianToCartographic(csCamera.position);\n        if (position.height < height) {\n            position.height = height;\n            csCamera.position = ellipsoid.cartographicToCartesian(position);\n        }\n        this.warmingUp_ = true;\n        this.render_();\n        setTimeout(() => {\n            this.warmingUp_ = false;\n        }, timeout);\n    }\n    /**\n     * Block Cesium rendering to save resources.\n     * @param {boolean} block True to block.\n    */\n    setBlockCesiumRendering(block) {\n        if (this.blockCesiumRendering_ !== block) {\n            this.blockCesiumRendering_ = block;\n            // reset the render loop\n            this.render_();\n        }\n    }\n    /**\n     * Render the globe only when necessary in order to save resources.\n     * Experimental.\n     */\n    enableAutoRenderLoop() {\n        if (!this.autoRenderLoop_) {\n            this.autoRenderLoop_ = new olcsAutoRenderLoop(this);\n        }\n    }\n    /**\n     * Get the autorender loop.\n    */\n    getAutoRenderLoop() {\n        return this.autoRenderLoop_;\n    }\n    /**\n     * The 3D Cesium globe is rendered in a canvas with two different dimensions:\n     * clientWidth and clientHeight which are the dimension on the screen and\n     * width and height which are the dimensions of the drawing buffer.\n     *\n     * By using a resolution scale lower than 1.0, it is possible to render the\n     * globe in a buffer smaller than the canvas client dimensions and improve\n     * performance, at the cost of quality.\n     *\n     * Pixel ratio should also be taken into account; by default, a device with\n     * pixel ratio of 2.0 will have a buffer surface 4 times bigger than the client\n     * surface.\n     */\n    setResolutionScale(value) {\n        value = Math.max(0, value);\n        if (value !== this.resolutionScale_) {\n            this.resolutionScale_ = Math.max(0, value);\n            this.resolutionScaleChanged_ = true;\n            if (this.autoRenderLoop_) {\n                this.autoRenderLoop_.restartRenderLoop();\n            }\n        }\n    }\n    /**\n     * Set the target frame rate for the renderer. Set to `Number.POSITIVE_INFINITY`\n     * to render as quickly as possible.\n     * @param {number} value The frame rate, in frames per second.\n     */\n    setTargetFrameRate(value) {\n        if (this.targetFrameRate_ !== value) {\n            this.targetFrameRate_ = value;\n            // reset the render loop\n            this.render_();\n        }\n    }\n    /**\n     * Set if the synchronization back to the OL 2D map happens continuously or only after the camera is at rest again.\n     * @param {boolean} value true: synch after camera move end only; false: synch continuously\n     */\n    setRefresh2DAfterCameraMoveEndOnly(value) {\n        this.refresh2DAfterCameraMoveEndOnly = value;\n    }\n    /**\n     * Check if OpenLayers map is not properly initialized.\n     */\n    throwOnUnitializedMap_() {\n        const map = this.map_;\n        const view = map.getView();\n        const center = view.getCenter();\n        if (!view.isDef() || isNaN(center[0]) || isNaN(center[1])) {\n            throw new Error(`The OpenLayers map is not properly initialized: ${center} / ${view.getResolution()}`);\n        }\n    }\n    get trackedFeature() {\n        return this.trackedFeature_;\n    }\n    set trackedFeature(feature) {\n        if (this.trackedFeature_ !== feature) {\n            const scene = this.scene_;\n            //Stop tracking\n            if (!feature || !feature.getGeometry()) {\n                this.needTrackedEntityUpdate_ = false;\n                scene.screenSpaceCameraController.enableTilt = true;\n                if (this.trackedEntity_) {\n                    this.dataSourceDisplay_.defaultDataSource.entities.remove(this.trackedEntity_);\n                }\n                this.trackedEntity_ = null;\n                this.trackedFeature_ = null;\n                this.entityView_ = null;\n                scene.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);\n                return;\n            }\n            this.trackedFeature_ = feature;\n            //We can't start tracking immediately, so we set a flag and start tracking\n            //when the bounding sphere is ready (most likely next frame).\n            this.needTrackedEntityUpdate_ = true;\n            const to4326Transform = this.to4326Transform_;\n            const toCesiumPosition = function () {\n                const geometry = feature.getGeometry();\n                console.assert(geometry instanceof olGeomPoint);\n                const coo = geometry instanceof olGeomPoint ? geometry.getCoordinates() : [];\n                const coo4326 = to4326Transform(coo, undefined, coo.length);\n                return ol4326CoordinateToCesiumCartesian(coo4326);\n            };\n            // Create an invisible point entity for tracking.\n            // It is independent of the primitive/geometry created by the vector synchronizer.\n            const options = {\n                // @ts-ignore according to Cesium types, not possible to pass CallbackProperty\n                position: new Cesium.CallbackProperty((time, result) => toCesiumPosition(), false),\n                point: {\n                    pixelSize: 1,\n                    color: Cesium.Color.TRANSPARENT\n                }\n            };\n            this.trackedEntity_ = this.dataSourceDisplay_.defaultDataSource.entities.add(options);\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0xDZXNpdW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb2xjcy9PTENlc2l1bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFdBQVcsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsK0JBQStCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0UsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQXlCLE1BQU0sWUFBWSxDQUFDO0FBQ2hFLE9BQU8sa0JBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sc0JBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxzQkFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLHVCQUF1QixNQUFNLDBCQUEwQixDQUFDO0FBb0IvRDs7O0dBR0c7QUFDSCxNQUFNLG1CQUFtQixHQUEyQjtJQUNsRDs7T0FFRztJQUNILElBQUksRUFBRSxDQUFDO0lBQ1A7O09BRUc7SUFDSCxPQUFPLEVBQUUsQ0FBQztJQUNWOztPQUVHO0lBQ0gsTUFBTSxFQUFFLENBQUM7Q0FDVixDQUFDO0FBOEJGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLFFBQVE7SUFDbkIsZUFBZSxHQUE4QixJQUFJLENBQUM7SUFDbEQsSUFBSSxDQUFNO0lBQ1YsS0FBSyxDQUFtQjtJQUN4QixnQkFBZ0IsQ0FBb0I7SUFDcEMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztJQUN6QixtQkFBbUIsR0FBRyxHQUFHLENBQUM7SUFDMUIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLENBQUMsZUFBZTtJQUMvQyxVQUFVLENBQWM7SUFDeEIsVUFBVSxDQUFVO0lBQ3BCLE9BQU8sQ0FBb0I7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","import olcsContribLazyLoader from './LazyLoader.js';\nimport OLCesium from '../OLCesium.js';\nimport { resetToNorthZenith, rotateAroundBottomCenter, computeSignedTiltAngleOnGlobe, pickBottomPoint, setHeadingUsingBottomCenter, limitCameraToBoundingSphere } from '../core';\nimport { toRadians } from '../math.js';\nimport Observable from 'ol/Observable.js';\n/**\n * @typedef {Object} ManagerOptions\n * @property {import('ol/Map.js').default} map\n * @property {import('ol/extent.js').Extent} [cameraExtentInRadians]\n * @property {string} [cesiumIonDefaultAccessToken]\n */\nexport default class Manager extends Observable {\n    cesiumUrl_;\n    boundingSphere_;\n    promise_;\n    cesiumIonDefaultAccessToken_;\n    map;\n    cameraExtentInRadians;\n    ol3d;\n    cesiumInitialTilt_ = toRadians(50);\n    fogDensity = 0.0001;\n    fogSSEFactor = 25;\n    minimumZoomDistance = 2;\n    /**\n     * Limit the maximum distance to the earth to 10'000km.\n     */\n    maximumZoomDistance = 10000000;\n    // when closer to 3000m, restrict the available positions harder\n    limitCameraToBoundingSphereRatio = (height) => (height > 3000 ? 9 : 3);\n    /**\n     * @param {string} cesiumUrl\n     * @param {olcsx.contrib.ManagerOptions} options\n     * @api\n     */\n    constructor(cesiumUrl, { map, cameraExtentInRadians, cesiumIonDefaultAccessToken }) {\n        super();\n        this.cesiumUrl_ = cesiumUrl;\n        console.assert(map);\n        this.map = map;\n        this.cameraExtentInRadians = cameraExtentInRadians || null;\n        this.cesiumIonDefaultAccessToken_ = cesiumIonDefaultAccessToken;\n    }\n    /**\n     * Lazy load Cesium.\n     */\n    load() {\n        if (!this.promise_) {\n            const cesiumLazyLoader = new olcsContribLazyLoader(this.cesiumUrl_);\n            this.promise_ = cesiumLazyLoader.load().then(() => this.onCesiumLoaded());\n        }\n        return this.promise_;\n    }\n    /**\n     * Hook called when Cesium has been lazy loaded.\n     */\n    onCesiumLoaded() {\n        if (this.cameraExtentInRadians) {\n            const rect = new Cesium.Rectangle(...this.cameraExtentInRadians);\n            // Set the fly home rectangle\n            Cesium.Camera.DEFAULT_VIEW_RECTANGLE = rect;\n            this.boundingSphere_ = Cesium.BoundingSphere.fromRectangle3D(rect, Cesium.Ellipsoid.WGS84, 300); // lux mean height is 300m\n        }\n        if (this.cesiumIonDefaultAccessToken_) {\n            Cesium.Ion.defaultAccessToken = this.cesiumIonDefaultAccessToken_;\n        }\n        this.ol3d = this.instantiateOLCesium();\n        const scene = this.ol3d.getCesiumScene();\n        this.configureForUsability(scene);\n        this.configureForPerformance(scene);\n        this.dispatchEvent('load');\n        return this.ol3d;\n    }\n    /**\n     * Application code should override this method.\n     */\n    instantiateOLCesium() {\n        const ol3d = new OLCesium({ map: this.map });\n        const scene = ol3d.getCesiumScene();\n        Cesium.createWorldTerrainAsync().then(tp => scene.terrainProvider = tp);\n        return ol3d;\n    }\n    /**\n     * Override with custom performance optimization logics, if needed.\n     */\n    configureForPerformance(scene) {\n        const fog = scene.fog;\n        fog.enabled = true;\n        fog.density = this.fogDensity;\n        fog.screenSpaceErrorFactor = this.fogSSEFactor;\n    }\n    /**\n     * Override with custom usabliity logics, id needed.\n     */\n    configureForUsability(scene) {\n        const sscController = scene.screenSpaceCameraController;\n        sscController.minimumZoomDistance = this.minimumZoomDistance;\n        sscController.maximumZoomDistance = this.maximumZoomDistance;\n        // Do not see through the terrain. Seeing through the terrain does not make\n        // sense anyway, except for debugging\n        scene.globe.depthTestAgainstTerrain = true;\n        // Use white instead of the black default colour for the globe when tiles are missing\n        scene.globe.baseColor = Cesium.Color.WHITE;\n        scene.backgroundColor = Cesium.Color.WHITE;\n        if (this.boundingSphere_) {\n            scene.postRender.addEventListener(this.limitCameraToBoundingSphere.bind(this));\n        }\n        // Stop rendering Cesium when there is nothing to do. This drastically reduces CPU/GPU consumption.\n        this.ol3d.enableAutoRenderLoop();\n    }\n    /**\n     * Constrain the camera so that it stays close to the bounding sphere of the map extent.\n     * Near the ground the allowed distance is shorter.\n     */\n    limitCameraToBoundingSphere() {\n        const scene = this.ol3d.getCesiumScene();\n        limitCameraToBoundingSphere(scene.camera, this.boundingSphere_, this.limitCameraToBoundingSphereRatio);\n    }\n    /**\n     * Enable or disable ol3d with a default animation.\n     */\n    toggle3d() {\n        return this.load().then((/** @const {!olcs.OLCesium} */ ol3d) => {\n            const is3DCurrentlyEnabled = ol3d.getEnabled();\n            const scene = ol3d.getCesiumScene();\n            if (is3DCurrentlyEnabled) {\n                // Disable 3D\n                console.assert(this.map);\n                return resetToNorthZenith(this.map, scene).then(() => {\n                    ol3d.setEnabled(false);\n                    this.dispatchEvent('toggle');\n                });\n            }\n            else {\n                // Enable 3D\n                ol3d.setEnabled(true);\n                this.dispatchEvent('toggle');\n                return rotateAroundBottomCenter(scene, this.cesiumInitialTilt_);\n            }\n        });\n    }\n    /**\n     * Enable ol3d with a view built from parameters.\n     */\n    set3dWithView(lon, lat, elevation, headingDeg, pitchDeg) {\n        return this.load().then((ol3d) => {\n            const is3DCurrentlyEnabled = ol3d.getEnabled();\n            const scene = ol3d.getCesiumScene();\n            const camera = scene.camera;\n            const destination = Cesium.Cartesian3.fromDegrees(lon, lat, elevation);\n            const heading = Cesium.Math.toRadians(headingDeg);\n            const pitch = Cesium.Math.toRadians(pitchDeg);\n            const roll = 0;\n            const orientation = { heading, pitch, roll };\n            if (!is3DCurrentlyEnabled) {\n                ol3d.setEnabled(true);\n                this.dispatchEvent('toggle');\n            }\n            camera.setView({\n                destination,\n                orientation\n            });\n        });\n    }\n    /**\n     * Whether OL-Cesium has been loaded and 3D mode is enabled.\n     */\n    is3dEnabled() {\n        return !!this.ol3d && this.ol3d.getEnabled();\n    }\n    /**\n     * @return {number}\n     */\n    getHeading() {\n        return this.map ? this.map.getView().getRotation() || 0 : 0;\n    }\n    /**\n     * @return {number|undefined}\n     */\n    getTiltOnGlobe() {\n        const scene = this.ol3d.getCesiumScene();\n        const tiltOnGlobe = computeSignedTiltAngleOnGlobe(scene);\n        return -tiltOnGlobe;\n    }\n    /**\n     * Set heading.\n     * This assumes ol3d has been loaded.\n     */\n    setHeading(angle) {\n        const scene = this.ol3d.getCesiumScene();\n        const bottom = pickBottomPoint(scene);\n        if (bottom) {\n            setHeadingUsingBottomCenter(scene, angle, bottom);\n        }\n    }\n    getOl3d() {\n        return this.ol3d;\n    }\n    getCesiumViewMatrix() {\n        return this.ol3d.getCesiumScene().camera.viewMatrix;\n    }\n    getCesiumScene() {\n        return this.ol3d.getCesiumScene();\n    }\n    /**\n     * Fly to some rectangle.\n     * This assumes ol3d has been loaded.\n     */\n    flyToRectangle(rectangle, offset = 0) {\n        const camera = this.getCesiumScene().camera;\n        const destination = camera.getRectangleCameraCoordinates(rectangle);\n        const mag = Cesium.Cartesian3.magnitude(destination) + offset;\n        Cesium.Cartesian3.normalize(destination, destination);\n        Cesium.Cartesian3.multiplyByScalar(destination, mag, destination);\n        return new Promise((resolve, reject) => {\n            if (!this.cameraExtentInRadians) {\n                reject();\n                return;\n            }\n            camera.flyTo({\n                destination,\n                complete: () => resolve(),\n                cancel: () => reject(),\n                endTransform: Cesium.Matrix4.IDENTITY\n            });\n        });\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vbGNzL2NvbnRyaWIvTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLHFCQUFxQixNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRSxlQUFlLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDL0ssT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQU0xQzs7Ozs7R0FLRztBQUdILE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLFVBQVU7SUFDckMsVUFBVSxDQUFTO0lBQ25CLGVBQWUsQ0FBaUI7SUFDaEMsUUFBUSxDQUFvQjtJQUM1Qiw0QkFBNEIsQ0FBUztJQUNuQyxHQUFHLENBQVE7SUFDWCxxQkFBcUIsQ0FBUztJQUM5QixJQUFJLENBQVc7SUFDakIsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWpDLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFFcEIsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUVsQixtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFFbEM7O09BRUc7SUFDTyxtQkFBbUIsR0FBVyxRQUFRLENBQUM7SUFFakQsZ0VBQWdFO0lBQ3RELGdDQUFnQyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekY7Ozs7T0FJRztJQUNILFlBQVksU0FBaUIsRUFBRSxFQUFDLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSwyQkFBMkIsRUFBcUY7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","import OLCesium from './olcs/OLCesium.js';\nexport default OLCesium;\nexport { default as AbstractSynchronizer } from './olcs/AbstractSynchronizer.js';\nexport { default as RasterSynchronizer } from './olcs/RasterSynchronizer.js';\nexport { default as VectorSynchronizer } from './olcs/VectorSynchronizer.js';\nexport { default as OverlaySynchronizer } from './olcs/OverlaySynchronizer.js';\nexport { default as FeatureConverter } from './olcs/FeatureConverter.js';\nexport { default as OLCSCamera } from './olcs/Camera.js';\n// Core api functions\nexport * from './olcs/core.js';\nexport { default as OLImageryProvider } from './olcs/core/OLImageryProvider.js';\nexport { default as VectorLayerCounterpart } from './olcs/core/VectorLayerCounterpart.js';\n// Print functions\nexport * from './olcs/print.js';\n// Contrib Manager\nexport { default as ContribManager } from './olcs/contrib/Manager.js';\nexport { default as ContribLazyLoader } from './olcs/contrib/LazyLoader.js';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2xjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vbGNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLGVBQWUsUUFBUSxDQUFDO0FBRXhCLE9BQU8sRUFBQyxPQUFPLElBQUksb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsT0FBTyxJQUFJLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUFDLE9BQU8sSUFBSSxrQkFBa0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBQyxPQUFPLElBQUksbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUU3RSxPQUFPLEVBQUMsT0FBTyxJQUFJLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkUsT0FBTyxFQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RCxxQkFBcUI7QUFDckIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixPQUFPLEVBQUMsT0FBTyxJQUFJLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFDLE9BQU8sSUFBSSxzQkFBc0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRXhGLGtCQUFrQjtBQUNsQixjQUFjLGlCQUFpQixDQUFDO0FBRWhDLGtCQUFrQjtBQUNsQixPQUFPLEVBQUMsT0FBTyxJQUFJLGNBQWMsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxPQUFPLElBQUksaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQyJ9","/**\n * By default Cesium (used to?) renders as often as possible.\n * This is a waste of resources (CPU/GPU/battery).\n * An alternative mechanism in Cesium is on-demand rendering.\n * This class makes use of this alternative method and add some additionnal render points.\n */\nexport default class AutoRenderLoop {\n    ol3d;\n    scene_;\n    canvas_;\n    _boundNotifyRepaintRequired;\n    repaintEventNames_ = [\n        'mousemove', 'mousedown', 'mouseup',\n        'touchstart', 'touchend', 'touchmove',\n        'pointerdown', 'pointerup', 'pointermove',\n        'wheel'\n    ];\n    /**\n     * @param ol3d\n     */\n    constructor(ol3d) {\n        this.ol3d = ol3d;\n        this.scene_ = ol3d.getCesiumScene();\n        this.canvas_ = this.scene_.canvas;\n        this._boundNotifyRepaintRequired = this.notifyRepaintRequired.bind(this);\n        this.enable();\n    }\n    /**\n     * Enable.\n     */\n    enable() {\n        this.scene_.requestRenderMode = true;\n        this.scene_.maximumRenderTimeChange = 1000;\n        for (const repaintKey of this.repaintEventNames_) {\n            this.canvas_.addEventListener(repaintKey, this._boundNotifyRepaintRequired, false);\n        }\n        window.addEventListener('resize', this._boundNotifyRepaintRequired, false);\n        // Listen for changes on the layer group\n        this.ol3d.getOlMap().getLayerGroup().on('change', this._boundNotifyRepaintRequired);\n    }\n    /**\n     * Disable.\n     */\n    disable() {\n        for (const repaintKey of this.repaintEventNames_) {\n            this.canvas_.removeEventListener(repaintKey, this._boundNotifyRepaintRequired, false);\n        }\n        window.removeEventListener('resize', this._boundNotifyRepaintRequired, false);\n        this.ol3d.getOlMap().getLayerGroup().un('change', this._boundNotifyRepaintRequired);\n        this.scene_.requestRenderMode = false;\n    }\n    /**\n     * Restart render loop.\n     * Force a restart of the render loop.\n     */\n    restartRenderLoop() {\n        this.notifyRepaintRequired();\n    }\n    notifyRepaintRequired() {\n        if (!this.scene_.isDestroyed()) {\n            this.scene_.requestRender();\n        }\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0b1JlbmRlckxvb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb2xjcy9BdXRvUmVuZGVyTG9vcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxJQUFJLENBQVc7SUFDUCxNQUFNLENBQVE7SUFDZCxPQUFPLENBQW9CO0lBQzNCLDJCQUEyQixDQUFvQztJQUMvRCxrQkFBa0IsR0FBRztRQUMzQixXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVM7UUFDbkMsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXO1FBQ3JDLGFBQWEsRUFBRSxXQUFXLEVBQUUsYUFBYTtRQUN6QyxPQUFPO0tBQ0MsQ0FBQztJQUVYOztPQUVHO0lBQ0gsWUFBWSxJQUFjO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUMzQyxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFM0Usd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7Q0FDRiJ9","import { unByKey as olObservableUnByKey } from 'ol/Observable.js';\nexport default class VectorLayerCounterpart {\n    olListenKeys = [];\n    context;\n    rootCollection_;\n    /**\n    * Result of the conversion of an OpenLayers layer to Cesium.\n    */\n    constructor(layerProjection, scene) {\n        const billboards = new Cesium.BillboardCollection({ scene });\n        const primitives = new Cesium.PrimitiveCollection();\n        this.rootCollection_ = new Cesium.PrimitiveCollection();\n        this.context = {\n            projection: layerProjection,\n            billboards,\n            featureToCesiumMap: {},\n            primitives\n        };\n        this.rootCollection_.add(billboards);\n        this.rootCollection_.add(primitives);\n    }\n    /**\n    * Unlisten.\n    */\n    destroy() {\n        this.olListenKeys.forEach(olObservableUnByKey);\n        this.olListenKeys.length = 0;\n    }\n    getRootPrimitive() {\n        return this.rootCollection_;\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yTGF5ZXJDb3VudGVycGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vbGNzL2NvcmUvVmVjdG9yTGF5ZXJDb3VudGVycGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxJQUFJLG1CQUFtQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFpQmhFLE1BQU0sQ0FBQyxPQUFPLE9BQU8sc0JBQXNCO0lBQ3pDLFlBQVksR0FBZ0IsRUFBRSxDQUFDO0lBQy9CLE9BQU8sQ0FBMkI7SUFDMUIsZUFBZSxDQUFzQjtJQUM3Qzs7TUFFRTtJQUNGLFlBQVksZUFBb0MsRUFBRSxLQUFZO1FBQzVELE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsVUFBVSxFQUFFLGVBQWU7WUFDM0IsVUFBVTtZQUNWLGtCQUFrQixFQUFFLEVBQUU7WUFDdEIsVUFBVTtTQUNYLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O01BRUU7SUFDRixPQUFPO1FBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0NBQ0YifQ==","/**\n * Converts radians to to degrees.\n *\n * @param angleInRadians Angle in radians.\n * @return Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n    return angleInRadians * 180 / Math.PI;\n}\n/**\n * Converts degrees to radians.\n *\n * @param angleInDegrees Angle in degrees.\n * @return Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n    return angleInDegrees * Math.PI / 180;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbGNzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLGNBQXNCO0lBQzlDLE9BQU8sY0FBYyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFHRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsY0FBc0I7SUFDOUMsT0FBTyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDeEMsQ0FBQyJ9","let _imageRenderingPixelatedSupported = undefined;\nlet _imageRenderingValue = undefined;\n/**\n * https://caniuse.com/mdn-css_properties_image-rendering_pixelated\n * @return whether the browser supports\n */\nexport function supportsImageRenderingPixelated() {\n    if (_imageRenderingPixelatedSupported === undefined) {\n        const canvas = document.createElement('canvas');\n        canvas.setAttribute('style', 'image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; image-rendering: pixelated;');\n        // canvas.style.imageRendering will be undefined, null or an\n        // empty string on unsupported browsers.\n        const imageRenderingValue = canvas.style.imageRendering;\n        _imageRenderingPixelatedSupported = !!imageRenderingValue;\n        if (_imageRenderingPixelatedSupported) {\n            _imageRenderingValue = imageRenderingValue;\n        }\n    }\n    return _imageRenderingPixelatedSupported;\n}\n/**\n * The value supported by thie browser for the CSS property \"image-rendering\"\n * @return {string}\n */\nexport function imageRenderingValue() {\n    supportsImageRenderingPixelated();\n    return _imageRenderingValue || '';\n}\n/**\n * Return the projection of the source that Cesium should use.\n *\n * @param source Source.\n * @return The projection of the source.\n */\nexport function getSourceProjection(source) {\n    return source.get('olcs_projection') || source.getProjection();\n}\n/**\n * Counter for getUid.\n * @type {number}\n */\nlet uidCounter_ = 0;\n/**\n * Gets a unique ID for an object. This mutates the object so that further calls\n * with the same object as a parameter returns the same value. Unique IDs are generated\n * as a strictly increasing sequence. Adapted from goog.getUid. Similar to OL getUid.\n *\n * @param obj The object to get the unique ID for.\n * @return The unique ID for the object.\n */\nexport function getUid(obj) {\n    return obj.olcs_uid || (obj.olcs_uid = ++uidCounter_);\n}\nexport function waitReady(object) {\n    const o = object;\n    const p = o.readyPromise;\n    if (p) {\n        return p;\n    }\n    if (o.ready !== undefined) {\n        if (o.ready) {\n            return Promise.resolve(object);\n        }\n        return new Promise((resolve, _) => {\n            // FIXME: this is crazy\n            // alternative: intercept _ready = true\n            // altnerative: pass a timeout\n            const stopper = setInterval(() => {\n                if (o.ready) {\n                    clearInterval(stopper);\n                    resolve(object);\n                }\n            }, 20);\n        });\n    }\n    return Promise.reject('Not a readyable object');\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbGNzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsSUFBSSxpQ0FBaUMsR0FBWSxTQUFTLENBQUM7QUFDM0QsSUFBSSxvQkFBb0IsR0FBVyxTQUFTLENBQUM7QUFHN0M7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLCtCQUErQjtJQUM3QyxJQUFJLGlDQUFpQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsOEZBQThGLENBQUMsQ0FBQztRQUM3SCw0REFBNEQ7UUFDNUQsd0NBQXdDO1FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDeEQsaUNBQWlDLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1FBQzFELElBQUksaUNBQWlDLEVBQUUsQ0FBQztZQUN0QyxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8saUNBQWlDLENBQUM7QUFDM0MsQ0FBQztBQUdEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsK0JBQStCLEVBQUUsQ0FBQztJQUNsQyxPQUFPLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBYztJQUNoRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQWUsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDL0UsQ0FBQztBQUdEOzs7R0FHRztBQUNILElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQUVwQjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUFRO0lBQzdCLE9BQU8sR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBTyxNQUFZO0lBQzFDLE1BQU0sQ0FBQyxHQUFHLE1BQWEsQ0FBQztJQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDTixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsdUJBQXVCO1lBQ3ZCLHVDQUF1QztZQUN2Qyw4QkFBOEI7WUFDOUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ1osYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN2QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xCLENBQUM7WUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUNsRCxDQUFDIn0=","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n    while (right > left) {\n        if (right - left > 600) {\n            const n = right - left + 1;\n            const m = k - left + 1;\n            const z = Math.log(n);\n            const s = 0.5 * Math.exp(2 * z / 3);\n            const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n            const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            quickselect(arr, k, newLeft, newRight, compare);\n        }\n\n        const t = arr[k];\n        let i = left;\n        /** @type {number} */\n        let j = right;\n\n        swap(arr, left, k);\n        if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (compare(arr[i], t) < 0) i++;\n            while (compare(arr[j], t) > 0) j--;\n        }\n\n        if (compare(arr[left], t) === 0) swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n    constructor(maxEntries = 9) {\n        // max entries in a node is 9 by default; min node fill is 40% for best performance\n        this._maxEntries = Math.max(4, maxEntries);\n        this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n        this.clear();\n    }\n\n    all() {\n        return this._all(this.data, []);\n    }\n\n    search(bbox) {\n        let node = this.data;\n        const result = [];\n\n        if (!intersects(bbox, node)) return result;\n\n        const toBBox = this.toBBox;\n        const nodesToSearch = [];\n\n        while (node) {\n            for (let i = 0; i < node.children.length; i++) {\n                const child = node.children[i];\n                const childBBox = node.leaf ? toBBox(child) : child;\n\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf) result.push(child);\n                    else if (contains(bbox, childBBox)) this._all(child, result);\n                    else nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n\n        return result;\n    }\n\n    collides(bbox) {\n        let node = this.data;\n\n        if (!intersects(bbox, node)) return false;\n\n        const nodesToSearch = [];\n        while (node) {\n            for (let i = 0; i < node.children.length; i++) {\n                const child = node.children[i];\n                const childBBox = node.leaf ? this.toBBox(child) : child;\n\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf || contains(bbox, childBBox)) return true;\n                    nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n\n        return false;\n    }\n\n    load(data) {\n        if (!(data && data.length)) return this;\n\n        if (data.length < this._minEntries) {\n            for (let i = 0; i < data.length; i++) {\n                this.insert(data[i]);\n            }\n            return this;\n        }\n\n        // recursively build the tree with the given data from scratch using OMT algorithm\n        let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n        if (!this.data.children.length) {\n            // save as is if tree is empty\n            this.data = node;\n\n        } else if (this.data.height === node.height) {\n            // split root if trees have the same height\n            this._splitRoot(this.data, node);\n\n        } else {\n            if (this.data.height < node.height) {\n                // swap trees if inserted one is bigger\n                const tmpNode = this.data;\n                this.data = node;\n                node = tmpNode;\n            }\n\n            // insert the small tree into the large tree at appropriate level\n            this._insert(node, this.data.height - node.height - 1, true);\n        }\n\n        return this;\n    }\n\n    insert(item) {\n        if (item) this._insert(item, this.data.height - 1);\n        return this;\n    }\n\n    clear() {\n        this.data = createNode([]);\n        return this;\n    }\n\n    remove(item, equalsFn) {\n        if (!item) return this;\n\n        let node = this.data;\n        const bbox = this.toBBox(item);\n        const path = [];\n        const indexes = [];\n        let i, parent, goingUp;\n\n        // depth-first iterative tree traversal\n        while (node || path.length) {\n\n            if (!node) { // go up\n                node = path.pop();\n                parent = path[path.length - 1];\n                i = indexes.pop();\n                goingUp = true;\n            }\n\n            if (node.leaf) { // check current node\n                const index = findItem(item, node.children, equalsFn);\n\n                if (index !== -1) {\n                    // item found, remove the item and condense tree upwards\n                    node.children.splice(index, 1);\n                    path.push(node);\n                    this._condense(path);\n                    return this;\n                }\n            }\n\n            if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n                path.push(node);\n                indexes.push(i);\n                i = 0;\n                parent = node;\n                node = node.children[0];\n\n            } else if (parent) { // go right\n                i++;\n                node = parent.children[i];\n                goingUp = false;\n\n            } else node = null; // nothing found\n        }\n\n        return this;\n    }\n\n    toBBox(item) { return item; }\n\n    compareMinX(a, b) { return a.minX - b.minX; }\n    compareMinY(a, b) { return a.minY - b.minY; }\n\n    toJSON() { return this.data; }\n\n    fromJSON(data) {\n        this.data = data;\n        return this;\n    }\n\n    _all(node, result) {\n        const nodesToSearch = [];\n        while (node) {\n            if (node.leaf) result.push(...node.children);\n            else nodesToSearch.push(...node.children);\n\n            node = nodesToSearch.pop();\n        }\n        return result;\n    }\n\n    _build(items, left, right, height) {\n\n        const N = right - left + 1;\n        let M = this._maxEntries;\n        let node;\n\n        if (N <= M) {\n            // reached leaf level; return leaf\n            node = createNode(items.slice(left, right + 1));\n            calcBBox(node, this.toBBox);\n            return node;\n        }\n\n        if (!height) {\n            // target height of the bulk-loaded tree\n            height = Math.ceil(Math.log(N) / Math.log(M));\n\n            // target number of root entries to maximize storage utilization\n            M = Math.ceil(N / Math.pow(M, height - 1));\n        }\n\n        node = createNode([]);\n        node.leaf = false;\n        node.height = height;\n\n        // split the items into M mostly square tiles\n\n        const N2 = Math.ceil(N / M);\n        const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n        multiSelect(items, left, right, N1, this.compareMinX);\n\n        for (let i = left; i <= right; i += N1) {\n\n            const right2 = Math.min(i + N1 - 1, right);\n\n            multiSelect(items, i, right2, N2, this.compareMinY);\n\n            for (let j = i; j <= right2; j += N2) {\n\n                const right3 = Math.min(j + N2 - 1, right2);\n\n                // pack each entry recursively\n                node.children.push(this._build(items, j, right3, height - 1));\n            }\n        }\n\n        calcBBox(node, this.toBBox);\n\n        return node;\n    }\n\n    _chooseSubtree(bbox, node, level, path) {\n        while (true) {\n            path.push(node);\n\n            if (node.leaf || path.length - 1 === level) break;\n\n            let minArea = Infinity;\n            let minEnlargement = Infinity;\n            let targetNode;\n\n            for (let i = 0; i < node.children.length; i++) {\n                const child = node.children[i];\n                const area = bboxArea(child);\n                const enlargement = enlargedArea(bbox, child) - area;\n\n                // choose entry with the least area enlargement\n                if (enlargement < minEnlargement) {\n                    minEnlargement = enlargement;\n                    minArea = area < minArea ? area : minArea;\n                    targetNode = child;\n\n                } else if (enlargement === minEnlargement) {\n                    // otherwise choose one with the smallest area\n                    if (area < minArea) {\n                        minArea = area;\n                        targetNode = child;\n                    }\n                }\n            }\n\n            node = targetNode || node.children[0];\n        }\n\n        return node;\n    }\n\n    _insert(item, level, isNode) {\n        const bbox = isNode ? item : this.toBBox(item);\n        const insertPath = [];\n\n        // find the best node for accommodating the item, saving all nodes along the path too\n        const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n        // put the item into the node\n        node.children.push(item);\n        extend(node, bbox);\n\n        // split on node overflow; propagate upwards if necessary\n        while (level >= 0) {\n            if (insertPath[level].children.length > this._maxEntries) {\n                this._split(insertPath, level);\n                level--;\n            } else break;\n        }\n\n        // adjust bboxes along the insertion path\n        this._adjustParentBBoxes(bbox, insertPath, level);\n    }\n\n    // split overflowed node into two\n    _split(insertPath, level) {\n        const node = insertPath[level];\n        const M = node.children.length;\n        const m = this._minEntries;\n\n        this._chooseSplitAxis(node, m, M);\n\n        const splitIndex = this._chooseSplitIndex(node, m, M);\n\n        const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n        newNode.height = node.height;\n        newNode.leaf = node.leaf;\n\n        calcBBox(node, this.toBBox);\n        calcBBox(newNode, this.toBBox);\n\n        if (level) insertPath[level - 1].children.push(newNode);\n        else this._splitRoot(node, newNode);\n    }\n\n    _splitRoot(node, newNode) {\n        // split root node\n        this.data = createNode([node, newNode]);\n        this.data.height = node.height + 1;\n        this.data.leaf = false;\n        calcBBox(this.data, this.toBBox);\n    }\n\n    _chooseSplitIndex(node, m, M) {\n        let index;\n        let minOverlap = Infinity;\n        let minArea = Infinity;\n\n        for (let i = m; i <= M - m; i++) {\n            const bbox1 = distBBox(node, 0, i, this.toBBox);\n            const bbox2 = distBBox(node, i, M, this.toBBox);\n\n            const overlap = intersectionArea(bbox1, bbox2);\n            const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n            // choose distribution with minimum overlap\n            if (overlap < minOverlap) {\n                minOverlap = overlap;\n                index = i;\n\n                minArea = area < minArea ? area : minArea;\n\n            } else if (overlap === minOverlap) {\n                // otherwise choose distribution with minimum area\n                if (area < minArea) {\n                    minArea = area;\n                    index = i;\n                }\n            }\n        }\n\n        return index || M - m;\n    }\n\n    // sorts node children by the best axis for split\n    _chooseSplitAxis(node, m, M) {\n        const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n        const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n        const xMargin = this._allDistMargin(node, m, M, compareMinX);\n        const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n        // if total distributions margin value is minimal for x, sort by minX,\n        // otherwise it's already sorted by minY\n        if (xMargin < yMargin) node.children.sort(compareMinX);\n    }\n\n    // total margin of all possible split distributions where each node is at least m full\n    _allDistMargin(node, m, M, compare) {\n        node.children.sort(compare);\n\n        const toBBox = this.toBBox;\n        const leftBBox = distBBox(node, 0, m, toBBox);\n        const rightBBox = distBBox(node, M - m, M, toBBox);\n        let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n        for (let i = m; i < M - m; i++) {\n            const child = node.children[i];\n            extend(leftBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(leftBBox);\n        }\n\n        for (let i = M - m - 1; i >= m; i--) {\n            const child = node.children[i];\n            extend(rightBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(rightBBox);\n        }\n\n        return margin;\n    }\n\n    _adjustParentBBoxes(bbox, path, level) {\n        // adjust bboxes along the given tree path\n        for (let i = level; i >= 0; i--) {\n            extend(path[i], bbox);\n        }\n    }\n\n    _condense(path) {\n        // go through the path, removing empty nodes and updating bboxes\n        for (let i = path.length - 1, siblings; i >= 0; i--) {\n            if (path[i].children.length === 0) {\n                if (i > 0) {\n                    siblings = path[i - 1].children;\n                    siblings.splice(siblings.indexOf(path[i]), 1);\n\n                } else this.clear();\n\n            } else calcBBox(path[i], this.toBBox);\n        }\n    }\n}\n\nfunction findItem(item, items, equalsFn) {\n    if (!equalsFn) return items.indexOf(item);\n\n    for (let i = 0; i < items.length; i++) {\n        if (equalsFn(item, items[i])) return i;\n    }\n    return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n    distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n    if (!destNode) destNode = createNode(null);\n    destNode.minX = Infinity;\n    destNode.minY = Infinity;\n    destNode.maxX = -Infinity;\n    destNode.maxY = -Infinity;\n\n    for (let i = k; i < p; i++) {\n        const child = node.children[i];\n        extend(destNode, node.leaf ? toBBox(child) : child);\n    }\n\n    return destNode;\n}\n\nfunction extend(a, b) {\n    a.minX = Math.min(a.minX, b.minX);\n    a.minY = Math.min(a.minY, b.minY);\n    a.maxX = Math.max(a.maxX, b.maxX);\n    a.maxY = Math.max(a.maxY, b.maxY);\n    return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n    return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n           (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n    const minX = Math.max(a.minX, b.minX);\n    const minY = Math.max(a.minY, b.minY);\n    const maxX = Math.min(a.maxX, b.maxX);\n    const maxY = Math.min(a.maxY, b.maxY);\n\n    return Math.max(0, maxX - minX) *\n           Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n    return a.minX <= b.minX &&\n           a.minY <= b.minY &&\n           b.maxX <= a.maxX &&\n           b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n    return b.minX <= a.maxX &&\n           b.minY <= a.maxY &&\n           b.maxX >= a.minX &&\n           b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n    return {\n        children,\n        height: 1,\n        leaf: true,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n    const stack = [left, right];\n\n    while (stack.length) {\n        right = stack.pop();\n        left = stack.pop();\n\n        if (right - left <= n) continue;\n\n        const mid = left + Math.ceil((right - left) / n / 2) * n;\n        quickselect(arr, mid, left, right, compare);\n\n        stack.push(left, mid, mid, right);\n    }\n}\n","\n// shortcuts for easier to read formulas\nconst {PI, sin, cos, tan, asin, atan2: atan, acos, sqrt, abs, round} = Math;\nconst rad = PI / 180;\n\n// date/time constants and conversions\n\nconst dayMs = 1000 * 60 * 60 * 24;\nconst J1970 = 2440588;\nconst J2000 = 2451545;\nconst earthRadius = 6378.14; // equatorial radius in km, for the Moon's topocentric parallax\n\nfunction fromJulian(j) {\n    return new Date((j + 0.5 - J1970) * dayMs);\n}\nfunction toDays(date) {\n    return date.valueOf() / dayMs - 0.5 + J1970 - J2000;\n}\n\n// ΔT = TT − UT in seconds (Espenak & Meeus polynomial fits, good ~1900–2150). The Meeus position\n// series are defined in Terrestrial Time, but SunCalc's input Dates are UT — so the position math\n// runs on days-since-J2000 shifted by deltaT, while sidereal time stays on UT. ~69 s today;\n// negligible for the Sun (<0.001°), real for the Moon. d only needs ~month accuracy here (ΔT\n// changes <1 s/yr), so the decimal year is derived arithmetically from d rather than from the Date.\nfunction deltaT(d) {\n    const y = 2000 + d / 365.2425;\n    let t;\n    if (y < 1920) { t = y - 1900; return -2.79 + t * (1.494119 + t * (-0.0598939 + t * (0.0061966 - t * 0.000197))); }\n    if (y < 1941) { t = y - 1920; return 21.20 + t * (0.84493 + t * (-0.076100 + t * 0.0020936)); }\n    if (y < 1961) { t = y - 1950; return 29.07 + t * (0.407 + t * (-1 / 233 + t / 2547)); }\n    if (y < 1986) { t = y - 1975; return 45.45 + t * (1.067 + t * (-1 / 260 - t / 718)); }\n    if (y < 2005) { t = y - 2000; return 63.86 + t * (0.3345 + t * (-0.060374 + t * (0.0017275 + t * (0.000651814 + t * 0.00002373599)))); }\n    if (y < 2050) { t = y - 2000; return 62.92 + t * (0.32217 + t * 0.005589); }\n    t = (y - 1820) / 100; return -20 + 32 * t * t - 0.5628 * (2150 - y);\n}\nfunction toDaysTT(d) {\n    return d + deltaT(d) / 86400;\n}\n\n// general calculations for position\n\n// north-based clockwise azimuth in degrees (0 = N, 90 = E, 180 = S, 270 = W)\nfunction azimuth(H, phi, dec) {\n    return (atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)) / rad + 540) % 360;\n}\nfunction altitude(H, phi, dec) {\n    return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H));\n}\n\n// Greenwich mean sidereal time, formula 12.4 of Meeus (linear term; sub-arcsec T^2/T^3 dropped)\nfunction siderealTime(d, lw) {\n    return rad * (280.46061837 + 360.98564736629 * d) - lw;\n}\n\nfunction astroRefraction(h) {\n    if (h < 0) h = 0; // formula valid for positive altitudes only\n\n    // Meeus 16.4: 1.02 / tan(h + 10.26 / (h + 5.10)), h in degrees, arcmin result — folded into rad\n    return 0.0002967 / tan(h + 0.00312536 / (h + 0.08901179));\n}\n\n// general sun calculations\n\n// Sun's apparent equatorial coordinates, Meeus ch. 25. d = days since J2000 (TT); t = Julian centuries.\nfunction sunCoords(d) {\n    const t = d / 36525;\n    const L0 = rad * (280.46646 + t * (36000.76983 + t * 0.0003032)); // 25.2 geometric mean longitude\n    const M = rad * (357.52911 + t * (35999.05029 - t * 0.0001537)); // 25.3 mean anomaly\n    const sinM = sin(M);\n    const cosM = cos(M);\n    const C = rad * ((1.914602 - t * (0.004817 + t * 0.000014)) * sinM + // equation of center\n        (0.019993 - 0.000101 * t) * 2 * sinM * cosM + 0.000289 * sinM * (3 - 4 * sinM * sinM));\n    const Om = rad * (125.04 - 1934.136 * t); // longitude of the ascending node\n    const L = L0 + C - rad * (0.00569 + 0.00478 * sin(Om)); // apparent longitude (nutation + aberration)\n    // 22.2 mean obliquity + 25.8 correction for apparent position\n    const e = rad * (23.439291 - t * (0.0130042 + t * (0.00000016 - t * 0.000000504))) + rad * 0.00256 * cos(Om);\n\n    return {\n        ra: atan(cos(e) * sin(L), cos(L)), // 25.6\n        dec: asin(sin(e) * sin(L))         // 25.7\n    };\n}\n\n// calculates sun position for a given date and latitude/longitude\nexport function getPosition(date, lat, lng) {\n    const lw = rad * -lng;\n    const phi = rad * lat;\n    const d = toDays(date);\n\n    const c = sunCoords(toDaysTT(d)); // position series run on Terrestrial Time\n    const H = siderealTime(d, lw) - c.ra; // sidereal time stays on UT\n    const h = altitude(H, phi, c.dec);\n\n    return {\n        azimuth: azimuth(H, phi, c.dec),\n        // apparent (refraction-corrected) altitude in degrees\n        altitude: (h + astroRefraction(h)) / rad\n    };\n}\n\n// sun times configuration (angle, morning name, evening name)\nexport const times = [\n    [-0.833, 'sunrise', 'sunset'],\n    [-0.3, 'sunriseEnd', 'sunsetStart'],\n    [-6, 'dawn', 'dusk'],\n    [-12, 'nauticalDawn', 'nauticalDusk'],\n    [-18, 'nightEnd', 'night'],\n    [6, 'goldenHourEnd', 'goldenHour']\n];\n\n// adds a custom time to the times config\nexport function addTime(angle, riseName, setName) {\n    times.push([angle, riseName, setName]);\n}\n\n// calculations for sun times — Meeus ch.15 (rising, transit, setting), solving the Sun's\n// local hour angle directly off the same apparent coordinates (sunCoords) and sidereal time\n// used by getPosition. Day offsets d are in UT days since J2000; the position series run on TT.\n\nconst J0 = 0.0009;\n\nfunction observerAngle(height) {\n    return -2.076 * sqrt(height) / 60;\n}\n\n// wrap an angle to (-PI, PI]\nfunction wrapPi(a) {\n    return a - 2 * PI * round(a / (2 * PI));\n}\n\n// refines a transit time so the Sun's local hour angle is zero (Meeus 15.2; dH/dd ~= 2*PI/day,\n// the sidereal excess and the Sun's own motion cancelling to one solar day).\nfunction solarTransit(dt, lw) {\n    for (let i = 0; i < 3; i++) {\n        const H = wrapPi(siderealTime(dt, lw) - sunCoords(toDaysTT(dt)).ra);\n        dt -= H / (2 * PI);\n    }\n    return dt;\n}\n\n// time the Sun reaches altitude h0 on the given side of transit (sign -1 = rise, +1 = set);\n// starts from the hour angle at transit and converges with Meeus' altitude correction (15.2).\nfunction getSetJ(h0, dt, sign, lw, phi, decT) {\n    const cosH0 = (sin(h0) - sin(phi) * sin(decT)) / (cos(phi) * cos(decT));\n    if (cosH0 < -1 || cosH0 > 1) return NaN; // sun stays above / below this altitude all day\n\n    let d = dt + sign * acos(cosH0) / (2 * PI);\n    for (let i = 0; i < 2; i++) {\n        const c = sunCoords(toDaysTT(d));\n        const H = wrapPi(siderealTime(d, lw) - c.ra);\n        const h = altitude(H, phi, c.dec);\n        const sinH = cos(phi) * cos(c.dec) * sin(H);\n        if (abs(sinH) < 1e-6) break; // grazing the horizon — correction is ill-conditioned\n        d += (h - h0) / (2 * PI * sinH);\n    }\n    return d;\n}\n\n// calculates sun times for a given date, latitude/longitude, and, optionally,\n// the observer height (in meters) relative to the horizon\n\nexport function getTimes(date, lat, lng, height = 0) {\n\n    const lw = rad * -lng;\n    const phi = rad * lat;\n    const dh = observerAngle(height);\n    // Anchor to the input date's UTC solar day regardless of its time-of-day, killing the historical\n    // \"always pass noon\" footgun where an early-morning Date returned the previous day's events:\n    // round to that day's noon, offset to the nearest local solar noon, then let solarTransit refine.\n    const d = round(round(toDays(date)) - J0 - lw / (2 * PI));\n    const dt = solarTransit(d + J0 + lw / (2 * PI), lw);\n    const dec = sunCoords(toDaysTT(dt)).dec; // declination at transit, shared by every rise/set solve\n\n    const result = {\n        solarNoon: fromJulian(dt + J2000),\n        nadir: fromJulian(dt + J2000 - 0.5)\n    };\n\n    for (const [angle, riseName, setName] of times) {\n        const h0 = (angle + dh) * rad;\n        const jrise = getSetJ(h0, dt, -1, lw, phi, dec);\n        const jset = getSetJ(h0, dt, 1, lw, phi, dec);\n\n        // a NaN means the Sun never reaches this altitude on this day — report null, not Invalid Date\n        result[riseName] = Number.isNaN(jrise) ? null : fromJulian(jrise + J2000);\n        result[setName] = Number.isNaN(jset) ? null : fromJulian(jset + J2000);\n    }\n\n    // polar day/night: when the Sun never crosses the standard rise/set altitude, flag which side it\n    // stays on by comparing its altitude at solar noon (its daily maximum) against that threshold.\n    if (result.sunrise === null) {\n        const noonAlt = altitude(0, phi, dec);\n        const riseSetAlt = (times[0][0] + dh) * rad;\n        result.alwaysUp = noonAlt > riseSetAlt;\n        result.alwaysDown = noonAlt <= riseSetAlt;\n    }\n\n    return result;\n}\n\n// moon calculations, based on Meeus ch. 47 (truncated ELP-2000/82 series)\n\n// Nutation in longitude (Δψ) and true obliquity of the ecliptic, both in degrees,\n// from the abridged series of Meeus ch. 22 (sub-arcsecond, ample for our needs).\nfunction nutationObliquity(t) {\n    const om = rad * (125.04452 - 1934.136261 * t); // longitude of the Moon's ascending node\n    const ls = rad * (280.4665 + 36000.7698 * t);   // mean longitude of the Sun\n    const lm = rad * (218.3165 + 481267.8813 * t);  // mean longitude of the Moon\n    const dpsi = (-17.20 * sin(om) - 1.32 * sin(2 * ls) - 0.23 * sin(2 * lm) + 0.21 * sin(2 * om)) / 3600;\n    const deps = (9.20 * cos(om) + 0.57 * cos(2 * ls) + 0.10 * cos(2 * lm) - 0.09 * cos(2 * om)) / 3600;\n    const eps0 = 23.439291 - t * (0.0130042 + t * (0.00000016 - t * 0.000000504)); // 22.2 mean obliquity\n    return {dpsi, eps: rad * (eps0 + deps)};\n}\n\n// Meeus table 47.A — periodic terms for the Moon's longitude (Σl, ×1e-6 deg) and\n// distance (Σr, ×1e-3 km). Flat rows of 6: D, M, M', F, Σl, Σr.\nconst moonLon = new Int32Array([\n    0, 0, 1, 0, 6288774, -20905355,\n    2, 0, -1, 0, 1274027, -3699111,\n    2, 0, 0, 0, 658314, -2955968,\n    0, 0, 2, 0, 213618, -569925,\n    0, 1, 0, 0, -185116, 48888,\n    0, 0, 0, 2, -114332, -3149,\n    2, 0, -2, 0, 58793, 246158,\n    2, -1, -1, 0, 57066, -152138,\n    2, 0, 1, 0, 53322, -170733,\n    2, -1, 0, 0, 45758, -204586,\n    0, 1, -1, 0, -40923, -129620,\n    1, 0, 0, 0, -34720, 108743,\n    0, 1, 1, 0, -30383, 104755,\n    2, 0, 0, -2, 15327, 10321,\n    0, 0, 1, 2, -12528, 0,\n    0, 0, 1, -2, 10980, 79661,\n    4, 0, -1, 0, 10675, -34782,\n    0, 0, 3, 0, 10034, -23210,\n    4, 0, -2, 0, 8548, -21636,\n    2, 1, -1, 0, -7888, 24208,\n    2, 1, 0, 0, -6766, 30824,\n    1, 0, -1, 0, -5163, -8379,\n    1, 1, 0, 0, 4987, -16675,\n    2, -1, 1, 0, 4036, -12831,\n    2, 0, 2, 0, 3994, -10445,\n    4, 0, 0, 0, 3861, -11650,\n    2, 0, -3, 0, 3665, 14403,\n    0, 1, -2, 0, -2689, -7003,\n    2, 0, -1, 2, -2602, 0,\n    2, -1, -2, 0, 2390, 10056,\n    1, 0, 1, 0, -2348, 6322,\n    2, -2, 0, 0, 2236, -9884,\n    0, 1, 2, 0, -2120, 5751,\n    0, 2, 0, 0, -2069, 0,\n    2, -2, -1, 0, 2048, -4950,\n    2, 0, 1, -2, -1773, 4130,\n    2, 0, 0, 2, -1595, 0,\n    4, -1, -1, 0, 1215, -3958,\n    0, 0, 2, 2, -1110, 0,\n    3, 0, -1, 0, -892, 3258,\n    2, 1, 1, 0, -810, 2616,\n    4, -1, -2, 0, 759, -1897,\n    0, 2, -1, 0, -713, -2117,\n    2, 2, -1, 0, -700, 2354,\n    2, 1, -2, 0, 691, 0,\n    2, -1, 0, -2, 596, 0,\n    4, 0, 1, 0, 549, -1423,\n    0, 0, 4, 0, 537, -1117,\n    4, -1, 0, 0, 520, -1571,\n    1, 0, -2, 0, -487, -1739,\n    2, 1, 0, -2, -399, 0,\n    0, 0, 2, -2, -381, -4421,\n    1, 1, 1, 0, 351, 0,\n    3, 0, -2, 0, -340, 0,\n    4, 0, -3, 0, 330, 0,\n    2, -1, 2, 0, 327, 0,\n    0, 2, 1, 0, -323, 1165,\n    1, 1, -1, 0, 299, 0,\n    2, 0, 3, 0, 294, 0,\n    2, 0, -1, -2, 0, 8752\n]);\n\n// Meeus table 47.B — periodic terms for the Moon's latitude (Σb, ×1e-6 deg).\n// Flat rows of 5: D, M, M', F, Σb.\nconst moonLat = new Int32Array([\n    0, 0, 0, 1, 5128122,\n    0, 0, 1, 1, 280602,\n    0, 0, 1, -1, 277693,\n    2, 0, 0, -1, 173237,\n    2, 0, -1, 1, 55413,\n    2, 0, -1, -1, 46271,\n    2, 0, 0, 1, 32573,\n    0, 0, 2, 1, 17198,\n    2, 0, 1, -1, 9266,\n    0, 0, 2, -1, 8822,\n    2, -1, 0, -1, 8216,\n    2, 0, -2, -1, 4324,\n    2, 0, 1, 1, 4200,\n    2, 1, 0, -1, -3359,\n    2, -1, -1, 1, 2463,\n    2, -1, 0, 1, 2211,\n    2, -1, -1, -1, 2065,\n    0, 1, -1, -1, -1870,\n    4, 0, -1, -1, 1828,\n    0, 1, 0, 1, -1794,\n    0, 0, 0, 3, -1749,\n    0, 1, -1, 1, -1565,\n    1, 0, 0, 1, -1491,\n    0, 1, 1, 1, -1475,\n    0, 1, 1, -1, -1410,\n    0, 1, 0, -1, -1344,\n    1, 0, 0, -1, -1335,\n    0, 0, 3, 1, 1107,\n    4, 0, 0, -1, 1021,\n    4, 0, -1, 1, 833,\n    0, 0, 1, -3, 777,\n    4, 0, -2, 1, 671,\n    2, 0, 0, -3, 607,\n    2, 0, 2, -1, 596,\n    2, -1, 1, -1, 491,\n    2, 0, -2, 1, -451,\n    0, 0, 3, -1, 439,\n    2, 0, 2, 1, 422,\n    2, 0, -3, -1, 421,\n    2, 1, -1, 1, -366,\n    2, 1, 0, 1, -351,\n    4, 0, 0, 1, 331,\n    2, -1, 1, 1, 315,\n    2, -2, 0, -1, 302,\n    0, 0, 1, 3, -283,\n    2, 1, 1, -1, -229,\n    1, 1, 0, -1, 223,\n    1, 1, 0, 1, 223,\n    0, 1, -2, -1, -220,\n    2, 1, -1, -1, -220,\n    1, 0, 1, 1, -185,\n    2, -1, -2, -1, 181,\n    0, 1, 2, 1, -177,\n    4, 0, -2, -1, 176,\n    4, -1, -1, -1, 166,\n    1, 0, 1, -1, -164,\n    4, 0, 1, -1, 132,\n    1, 0, -1, -1, -119,\n    4, -1, 0, -1, 115,\n    2, -2, 0, 1, 107\n]);\n\n// geocentric apparent equatorial coordinates of the Moon, Meeus ch. 47. d = days since J2000 (TT).\nfunction moonCoords(d) {\n    const t = d / 36525;\n\n    // fundamental arguments (degrees), 47.1–47.6\n    const Lp = 218.3164477 + t * (481267.88123421 + t * (-0.0015786 + t * (1 / 538841 - t / 65194000)));\n    const D = 297.8501921 + t * (445267.1114034 + t * (-0.0018819 + t * (1 / 545868 - t / 113065000)));\n    const M = 357.5291092 + t * (35999.0502909 + t * (-0.0001536 + t / 24490000));\n    const Mp = 134.9633964 + t * (477198.8675055 + t * (0.0087414 + t * (1 / 69699 - t / 14712000)));\n    const F = 93.2720950 + t * (483202.0175233 + t * (-0.0036539 + t * (-1 / 3526000 + t / 863310000)));\n    const A1 = 119.75 + 131.849 * t;\n    const A2 = 53.09 + 479264.290 * t;\n    const A3 = 313.45 + 481266.484 * t;\n    const E = 1 - t * (0.002516 + t * 0.0000074); // eccentricity factor for solar-anomaly terms\n\n    const Dr = rad * D, Mr = rad * M, Mpr = rad * Mp, Fr = rad * F;\n    let sl = 0, sr = 0, sb = 0;\n    for (let i = 0; i < moonLon.length; i += 6) {\n        const m = moonLon[i + 1];\n        const arg = moonLon[i] * Dr + m * Mr + moonLon[i + 2] * Mpr + moonLon[i + 3] * Fr;\n        const f = m === 1 || m === -1 ? E : m === 2 || m === -2 ? E * E : 1;\n        sl += moonLon[i + 4] * f * sin(arg);\n        sr += moonLon[i + 5] * f * cos(arg);\n    }\n    for (let i = 0; i < moonLat.length; i += 5) {\n        const m = moonLat[i + 1];\n        const arg = moonLat[i] * Dr + m * Mr + moonLat[i + 2] * Mpr + moonLat[i + 3] * Fr;\n        const f = m === 1 || m === -1 ? E : m === 2 || m === -2 ? E * E : 1;\n        sb += moonLat[i + 4] * f * sin(arg);\n    }\n\n    // additive terms (Venus, Jupiter and flattening of the Earth), 47 p.342\n    const A1r = rad * A1, Lpr = rad * Lp;\n    sl += 3958 * sin(A1r) + 1962 * sin(Lpr - Fr) + 318 * sin(rad * A2);\n    sb += -2235 * sin(Lpr) + 382 * sin(rad * A3) + 175 * sin(A1r - Fr) + 175 * sin(A1r + Fr) +\n        127 * sin(Lpr - Mpr) - 115 * sin(Lpr + Mpr);\n\n    const {dpsi, eps} = nutationObliquity(t);\n    const l = rad * (Lp + sl / 1e6 + dpsi); // apparent ecliptic longitude\n    const b = rad * (sb / 1e6);             // ecliptic latitude\n\n    return {\n        ra: atan(sin(l) * cos(eps) - tan(b) * sin(eps), cos(l)),  // 13.3\n        dec: asin(sin(b) * cos(eps) + cos(b) * sin(eps) * sin(l)), // 13.4\n        dist: 385000.56 + sr / 1000  // distance to the Moon in km\n    };\n}\n\nexport function getMoonPosition(date, lat, lng) {\n    const lw = rad * -lng;\n    const phi = rad * lat;\n    const d = toDays(date);\n    const c = moonCoords(toDaysTT(d));    // position series run on Terrestrial Time\n    const H = siderealTime(d, lw) - c.ra; // sidereal time stays on UT\n\n    // geocentric parallax (Meeus ch.40) lowers the moon along its vertical circle, leaving\n    // azimuth unchanged; sin(parallax) = (Earth radius / distance) * cos(geocentric altitude).\n    const hGeo = altitude(H, phi, c.dec);\n    const h = hGeo - asin(earthRadius / c.dist * cos(hGeo));\n\n    // parallactic angle, Meeus 14.1\n    const pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H));\n\n    return {\n        azimuth: azimuth(H, phi, c.dec),\n        // apparent (refraction-corrected) altitude in degrees\n        altitude: (h + astroRefraction(h)) / rad,\n        distance: c.dist,\n        parallacticAngle: pa / rad\n    };\n}\n\n// moon illumination parameters, Meeus ch. 48 (and idlastro's mphase.pro)\nexport function getMoonIllumination(date = new Date()) {\n    const d = toDaysTT(toDays(date));\n    const s = sunCoords(d);\n    const m = moonCoords(d);\n    const sdist = 149598000; // distance from Earth to Sun in km\n    const phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra));\n    const inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi));\n    const angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) -\n        cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra));\n\n    const waxing = angle < 0; // bright limb leads → illuminated fraction is growing (new → full)\n\n    return {\n        // illuminated fraction, 0 (new) → 1 (full); reaches the exact extrema only at perfect\n        // syzygy (eclipses), so a \"full\" moon typically peaks a hair under 1 — this is correct\n        fraction: (1 + cos(inc)) / 2,\n        // phase, 0 → 1: 0 new, 0.25 first quarter, 0.5 full, 0.75 last quarter (waxing for phase < 0.5)\n        phase: 0.5 + 0.5 * inc * (waxing ? -1 : 1) / PI,\n        // position angle of the bright limb, degrees (v2: all angles emitted in degrees) — subtract\n        // getMoonPosition().parallacticAngle, also degrees, to get the zenith-relative tilt\n        angle: angle / rad,\n        waxing // true while the Moon is waxing (new → full), false while waning (full → new)\n    };\n}\n\nfunction hoursLater(date, h) {\n    return new Date(date.valueOf() + h * dayMs / 24);\n}\n\n// height of the moon's upper limb above the rise/set horizon (deg): topocentric centre altitude plus\n// the moon's semidiameter (0.2725 * equatorial horizontal parallax, so it tracks distance: ~0.25° at\n// apogee, ~0.28° at perigee) plus the residual horizon refraction our model under-bends (~0.09°,\n// tuned vs USNO). Crossing zero == upper-limb rise/set, the USNO convention.\nfunction moonHeight(date, lat, lng) {\n    const p = getMoonPosition(date, lat, lng);\n    return p.altitude + 0.2725 * asin(earthRadius / p.distance) / rad + 0.09;\n}\n\n// polish a crossing time (ms): the quadratic sampler's parabola root sits up to ~0.2° off the true\n// altitude curve, so Newton-refine against the real moonHeight. Two central-difference steps drop the\n// mean error from ~0.65 to ~0.28 min; more don't help (near grazing dh/dt is small either way).\nfunction refineMoonCross(tMs, lat, lng) {\n    for (let i = 0; i < 2; i++) {\n        const h = moonHeight(new Date(tMs), lat, lng);\n        const dh = (moonHeight(new Date(tMs + 30000), lat, lng) - moonHeight(new Date(tMs - 30000), lat, lng)) / 60000;\n        tMs -= h / dh; // dh is degrees per ms, so h/dh is ms\n    }\n    return tMs;\n}\n\nexport function getMoonTimes(date, lat, lng) {\n    // scan the UTC calendar day of the given date; the date is treated as a UTC instant like\n    // everywhere else in the API. For a local-civil-day window, pass a date at local midnight.\n    const t = new Date(date);\n    t.setUTCHours(0, 0, 0, 0);\n\n    let h0 = moonHeight(t, lat, lng);\n    let rise, set, ye;\n\n    // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set)\n    for (let i = 1; i <= 24; i += 2) {\n        const h1 = moonHeight(hoursLater(t, i), lat, lng);\n        const h2 = moonHeight(hoursLater(t, i + 1), lat, lng);\n        const a = (h0 + h2) / 2 - h1;\n        const b = (h2 - h0) / 2;\n        const xe = -b / (2 * a);\n        const d = b * b - 4 * a * h1;\n        let roots = 0, x1 = 0, x2 = 0;\n        ye = (a * xe + b) * xe + h1;\n\n        if (d >= 0) {\n            const dx = sqrt(d) / (abs(a) * 2);\n            x1 = xe - dx;\n            x2 = xe + dx;\n            if (abs(x1) <= 1) roots++;\n            if (abs(x2) <= 1) roots++;\n            if (x1 < -1) x1 = x2;\n        }\n\n        if (roots === 1) {\n            if (h0 < 0) rise = i + x1;\n            else set = i + x1;\n\n        } else if (roots === 2) {\n            rise = i + (ye < 0 ? x2 : x1);\n            set = i + (ye < 0 ? x1 : x2);\n        }\n\n        if (rise !== undefined && set !== undefined) break;\n\n        h0 = h2;\n    }\n\n    const result = {};\n\n    // compare against undefined, not truthiness: a crossing at exactly hour 0 (midnight) is a real\n    // event whose numeric value is 0, which a truthy check would wrongly treat as \"no event\".\n    if (rise !== undefined) result.rise = new Date(refineMoonCross(hoursLater(t, rise).valueOf(), lat, lng));\n    if (set !== undefined) result.set = new Date(refineMoonCross(hoursLater(t, set).valueOf(), lat, lng));\n\n    // no crossing all day: flag which side the moon stays on, setting both like getTimes does\n    if (rise === undefined && set === undefined) {\n        result.alwaysUp = ye > 0;\n        result.alwaysDown = ye <= 0;\n    }\n\n    return result;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    if (obj == null) return void 0;\n    obj = obj[path[i]];\n  }\n  return length ? obj : void 0;\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n  if (context === void 0) return func;\n  switch (argCount == null ? 3 : argCount) {\n    case 1: return function(value) {\n      return func.call(context, value);\n    };\n    // The 2-argument case is omitted because we’re not using it.\n    case 3: return function(value, index, collection) {\n      return func.call(context, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(context, accumulator, value, index, collection);\n    };\n  }\n  return function() {\n    return func.apply(context, arguments);\n  };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n  return function() {\n    if (--times < 1) {\n      return func.apply(this, arguments);\n    }\n  };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n  var memo;\n  return function() {\n    if (--times > 0) {\n      memo = func.apply(this, arguments);\n    }\n    if (times <= 1) func = null;\n    return memo;\n  };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n  var args = arguments;\n  var start = args.length - 1;\n  return function() {\n    var i = start;\n    var result = args[start].apply(this, arguments);\n    while (i--) result = args[i].call(this, result);\n    return result;\n  };\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n  return function() {\n    return value;\n  };\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n  return value;\n}\n","// Current version.\nexport var VERSION = '1.13.8';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n          (typeof global == 'object' && global.global === global && global) ||\n          Function('return this')() ||\n          {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n    slice = ArrayProto.slice,\n    toString = ObjProto.toString,\n    hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n    supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n    nativeKeys = Object.keys,\n    nativeCreate = Object.create,\n    nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n    _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n  'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n  return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n  var tag = '[object ' + name + ']';\n  return function(obj) {\n    return toString.call(obj) === tag;\n  };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n  isFunction = function(obj) {\n    return typeof obj == 'function' || false;\n  };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\n// Also, there are cases where an application can override the native\n// `DataView` object, in cases like that we can't use the constructor\n// safely and should just rely on alternate `DataView` checks\nexport var hasDataViewBug = (\n      supportsDataView && (!/\\[native code\\]/.test(String(DataView)) || hasObjectTag(new DataView(new ArrayBuffer(8))))\n    ),\n    isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasDataViewBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\n// Also, in cases where the native `DataView` is\n// overridden we can't rely on the tag itself.\nfunction alternateIsDataView(obj) {\n  return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasDataViewBug ? alternateIsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n  return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n  if (!isArguments(arguments)) {\n    isArguments = function(obj) {\n      return has(obj, 'callee');\n    };\n  }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n  return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n  return isNumber(obj) && _isNaN(obj);\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n  return function(collection) {\n    var sizeProperty = getSizeProperty(collection);\n    return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n  }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n  return function(obj) {\n    return obj == null ? void 0 : obj[key];\n  };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n  // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n  // Otherwise, fall back on the above regular expression.\n  return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n                isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n  var hash = {};\n  for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n  return {\n    contains: function(key) { return hash[key] === true; },\n    push: function(key) {\n      hash[key] = true;\n      return keys.push(key);\n    }\n  };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n  keys = emulatedSet(keys);\n  var nonEnumIdx = nonEnumerableProps.length;\n  var constructor = obj.constructor;\n  var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n  // Constructor is a special case.\n  var prop = 'constructor';\n  if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n  while (nonEnumIdx--) {\n    prop = nonEnumerableProps[nonEnumIdx];\n    if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n      keys.push(prop);\n    }\n  }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n  if (!isObject(obj)) return [];\n  if (nativeKeys) return nativeKeys(obj);\n  var keys = [];\n  for (var key in obj) if (has(obj, key)) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n  if (obj == null) return true;\n  // Skip the more expensive `toString`-based type checks if `obj` has no\n  // `.length`.\n  var length = getLength(obj);\n  if (typeof length == 'number' && (\n    isArray(obj) || isString(obj) || isArguments(obj)\n  )) return length === 0;\n  return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n  var _keys = keys(attrs), length = _keys.length;\n  if (object == null) return !length;\n  var obj = Object(object);\n  for (var i = 0; i < length; i++) {\n    var key = _keys[i];\n    if (attrs[key] !== obj[key] || !(key in obj)) return false;\n  }\n  return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n  if (obj instanceof _) return obj;\n  if (!(this instanceof _)) return new _(obj);\n  this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n  return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n  return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n  return new Uint8Array(\n    bufferSource.buffer || bufferSource,\n    bufferSource.byteOffset || 0,\n    getByteLength(bufferSource)\n  );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasDataViewBug }  from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n  var todo = [{a: a, b: b}];\n  // Initializing stacks of traversed objects for cycle detection.\n  var aStack = [], bStack = [];\n\n  while (todo.length) {\n    var frame = todo.pop();\n    if (frame === true) {\n      // Remove the first object from the stack of traversed objects.\n      aStack.pop();\n      bStack.pop();\n      continue;\n    }\n    a = frame.a;\n    b = frame.b;\n\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) {\n      if (a !== 0 || 1 / a === 1 / b) continue;\n      return false;\n    }\n    // `null` or `undefined` only equal to itself (strict comparison).\n    if (a == null || b == null) return false;\n    // `NaN`s are equivalent, but non-reflexive.\n    if (a !== a) {\n      if (b !== b) continue;\n      return false;\n    }\n    // Exhaust primitive checks\n    var type = typeof a;\n    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n\n// Internal recursive comparison function for `_.isEqual`.\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    // Work around a bug in IE 10 - Edge 13.\n    if (hasDataViewBug && className == '[object Object]' && isDataView(a)) {\n      if (!isDataView(b)) return false;\n      className = tagDataView;\n    }\n    switch (className) {\n      // These types are compared by value.\n    case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n    case '[object String]':\n      // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n      // equivalent to `new String(\"5\")`.\n      if ('' + a === '' + b) continue;\n      return false;\n    case '[object Number]':\n      todo.push({a: +a, b: +b});\n      continue;\n    case '[object Date]':\n    case '[object Boolean]':\n      // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n      // millisecond representations. Note that invalid dates with millisecond representations\n      // of `NaN` are not equivalent.\n      if (+a === +b) continue;\n      return false;\n    case '[object Symbol]':\n      if (SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b)) continue;\n      return false;\n    case '[object ArrayBuffer]':\n    case tagDataView:\n      // Coerce to typed array so we can fall through.\n      todo.push({a: toBufferView(a), b: toBufferView(b)});\n      continue;\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays && isTypedArray(a)) {\n      var byteLength = getByteLength(a);\n      if (byteLength !== getByteLength(b)) return false;\n      if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) continue;\n      areArrays = true;\n    }\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n                               isFunction(bCtor) && bCtor instanceof bCtor)\n          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) {\n        if (bStack[length] === b) break;\n        return false;\n      }\n    }\n    if (length >= 0) continue;\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n    todo.push(true);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        todo.push({a: a[length], b: b[length]});\n      }\n    } else {\n      // Deep compare objects.\n      var _keys = keys(a), key;\n      length = _keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = _keys[length];\n        if (!has(b, key)) return false;\n        todo.push({a: a[key], b: b[key]});\n      }\n    }\n  }\n  return true;\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n  if (!isObject(obj)) return [];\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  // Ahem, IE < 9.\n  if (hasEnumBug) collectNonEnumProps(obj, keys);\n  return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n  var length = getLength(methods);\n  return function(obj) {\n    if (obj == null) return false;\n    // `Map`, `WeakMap` and `Set` have no enumerable keys.\n    var keys = allKeys(obj);\n    if (getLength(keys)) return false;\n    for (var i = 0; i < length; i++) {\n      if (!isFunction(obj[methods[i]])) return false;\n    }\n    // If we are testing against `WeakMap`, we need to ensure that\n    // `obj` doesn't have a `forEach` method in order to distinguish\n    // it from a regular `Map`.\n    return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n  };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n    hasName = 'has',\n    commonInit = ['clear', 'delete'],\n    mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n    weakMapMethods = commonInit.concat(mapTail),\n    setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods }  from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var values = Array(length);\n  for (var i = 0; i < length; i++) {\n    values[i] = obj[_keys[i]];\n  }\n  return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n  var _keys = keys(obj);\n  var length = _keys.length;\n  var pairs = Array(length);\n  for (var i = 0; i < length; i++) {\n    pairs[i] = [_keys[i], obj[_keys[i]]];\n  }\n  return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n  var result = {};\n  var _keys = keys(obj);\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    result[obj[_keys[i]]] = _keys[i];\n  }\n  return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n  var names = [];\n  for (var key in obj) {\n    if (isFunction(obj[key])) names.push(key);\n  }\n  return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n  return function(obj) {\n    var length = arguments.length;\n    if (defaults) obj = Object(obj);\n    if (length < 2 || obj == null) return obj;\n    for (var index = 1; index < length; index++) {\n      var source = arguments[index],\n          keys = keysFunc(source),\n          l = keys.length;\n      for (var i = 0; i < l; i++) {\n        var key = keys[i];\n        if (!defaults || obj[key] === void 0) obj[key] = source[key];\n      }\n    }\n    return obj;\n  };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n  return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n  if (!isObject(prototype)) return {};\n  if (nativeCreate) return nativeCreate(prototype);\n  var Ctor = ctor();\n  Ctor.prototype = prototype;\n  var result = new Ctor;\n  Ctor.prototype = null;\n  return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n  var result = baseCreate(prototype);\n  if (props) extendOwn(result, props);\n  return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n  if (!isObject(obj)) return obj;\n  return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n  return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n  return _.toPath(path);\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n  var value = deepGet(object, toPath(path));\n  return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n  path = toPath(path);\n  var length = path.length;\n  for (var i = 0; i < length; i++) {\n    var key = path[i];\n    if (!_has(obj, key)) return false;\n    obj = obj[key];\n  }\n  return !!length;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n  attrs = extendOwn({}, attrs);\n  return function(obj) {\n    return isMatch(obj, attrs);\n  };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n  path = toPath(path);\n  return function(obj) {\n    return deepGet(obj, path);\n  };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n  if (value == null) return identity;\n  if (isFunction(value)) return optimizeCb(value, context, argCount);\n  if (isObject(value) && !isArray(value)) return matcher(value);\n  return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n  return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n  if (_.iteratee !== iteratee) return _.iteratee(value, context);\n  return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = keys(obj),\n      length = _keys.length,\n      results = {};\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys[index];\n    results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n  if (obj == null) return noop;\n  return function(path) {\n    return get(obj, path);\n  };\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n  return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n  var escaper = function(match) {\n    return map[match];\n  };\n  // Regexes for identifying a key that needs to be escaped.\n  var source = '(?:' + keys(map).join('|') + ')';\n  var testRegexp = RegExp(source);\n  var replaceRegexp = RegExp(source, 'g');\n  return function(string) {\n    string = string == null ? '' : '' + string;\n    return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n  };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n  evaluate: /<%([\\s\\S]+?)%>/g,\n  interpolate: /<%=([\\s\\S]+?)%>/g,\n  escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n  \"'\": \"'\",\n  '\\\\': '\\\\',\n  '\\r': 'r',\n  '\\n': 'n',\n  '\\u2028': 'u2028',\n  '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n  return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n  if (!settings && oldSettings) settings = oldSettings;\n  settings = defaults({}, settings, _.templateSettings);\n\n  // Combine delimiters into one regular expression via alternation.\n  var matcher = RegExp([\n    (settings.escape || noMatch).source,\n    (settings.interpolate || noMatch).source,\n    (settings.evaluate || noMatch).source\n  ].join('|') + '|$', 'g');\n\n  // Compile the template source, escaping string literals appropriately.\n  var index = 0;\n  var source = \"__p+='\";\n  text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n    source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n    index = offset + match.length;\n\n    if (escape) {\n      source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n    } else if (interpolate) {\n      source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n    } else if (evaluate) {\n      source += \"';\\n\" + evaluate + \"\\n__p+='\";\n    }\n\n    // Adobe VMs need the match returned to produce the correct offset.\n    return match;\n  });\n  source += \"';\\n\";\n\n  var argument = settings.variable;\n  if (argument) {\n    // Insure against third-party code injection. (CVE-2021-23358)\n    if (!bareIdentifier.test(argument)) throw new Error(\n      'variable is not a bare identifier: ' + argument\n    );\n  } else {\n    // If a variable is not specified, place data values in local scope.\n    source = 'with(obj||{}){\\n' + source + '}\\n';\n    argument = 'obj';\n  }\n\n  source = \"var __t,__p='',__j=Array.prototype.join,\" +\n    \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n    source + 'return __p;\\n';\n\n  var render;\n  try {\n    render = new Function(argument, '_', source);\n  } catch (e) {\n    e.source = source;\n    throw e;\n  }\n\n  var template = function(data) {\n    return render.call(this, data, _);\n  };\n\n  // Provide the compiled source as a convenience for precompilation.\n  template.source = 'function(' + argument + '){\\n' + source + '}';\n\n  return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n  path = toPath(path);\n  var length = path.length;\n  if (!length) {\n    return isFunction(fallback) ? fallback.call(obj) : fallback;\n  }\n  for (var i = 0; i < length; i++) {\n    var prop = obj == null ? void 0 : obj[path[i]];\n    if (prop === void 0) {\n      prop = fallback;\n      i = length; // Ensure we don't continue iterating.\n    }\n    obj = isFunction(prop) ? prop.call(obj) : prop;\n  }\n  return obj;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n  var instance = _(obj);\n  instance._chain = true;\n  return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n  if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n  var self = baseCreate(sourceFunc.prototype);\n  var result = sourceFunc.apply(self, args);\n  if (isObject(result)) return result;\n  return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n  var placeholder = partial.placeholder;\n  var bound = function() {\n    var position = 0, length = boundArgs.length;\n    var args = Array(length);\n    for (var i = 0; i < length; i++) {\n      args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n    }\n    while (position < arguments.length) args.push(arguments[position++]);\n    return executeBound(func, bound, this, this, args);\n  };\n  return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n  if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n  var bound = restArguments(function(callArgs) {\n    return executeBound(func, bound, context, this, args.concat(callArgs));\n  });\n  return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict) {\n  if (!depth && depth !== 0) depth = Infinity;\n  var output = [], idx = 0, i = 0, length = getLength(input) || 0, stack = [];\n  while (true) {\n    if (i >= length) {\n      if (!stack.length) break;\n      var frame = stack.pop();\n      i = frame.i;\n      input = frame.v;\n      length = getLength(input);\n      continue;\n    }\n    var value = input[i++];\n    if (stack.length >= depth) {\n      output[idx++] = value;\n    } else if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n      // Flatten current level of array or arguments object.\n      stack.push({i: i, v: input});\n      i = 0;\n      input = value;\n      length = getLength(input);\n    } else if (!strict) {\n      output[idx++] = value;\n    }\n  }\n  return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n  keys = flatten(keys, false, false);\n  var index = keys.length;\n  if (index < 1) throw new Error('bindAll must be passed function names');\n  while (index--) {\n    var key = keys[index];\n    obj[key] = bind(obj[key], obj);\n  }\n  return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n  var memoize = function(key) {\n    var cache = memoize.cache;\n    var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n    if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n    return cache[address];\n  };\n  memoize.cache = {};\n  return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n  return setTimeout(function() {\n    return func.apply(null, args);\n  }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n  var timeout, context, args, result;\n  var previous = 0;\n  if (!options) options = {};\n\n  var later = function() {\n    previous = options.leading === false ? 0 : now();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) context = args = null;\n  };\n\n  var throttled = function() {\n    var _now = now();\n    if (!previous && options.leading === false) previous = _now;\n    var remaining = wait - (_now - previous);\n    context = this;\n    args = arguments;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = _now;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(later, remaining);\n    }\n    return result;\n  };\n\n  throttled.cancel = function() {\n    clearTimeout(timeout);\n    previous = 0;\n    timeout = context = args = null;\n  };\n\n  return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n  var timeout, previous, args, result, context;\n\n  var later = function() {\n    var passed = now() - previous;\n    if (wait > passed) {\n      timeout = setTimeout(later, wait - passed);\n    } else {\n      timeout = null;\n      if (!immediate) result = func.apply(context, args);\n      // This check is needed because `func` can recursively invoke `debounced`.\n      if (!timeout) args = context = null;\n    }\n  };\n\n  var debounced = restArguments(function(_args) {\n    context = this;\n    args = _args;\n    previous = now();\n    if (!timeout) {\n      timeout = setTimeout(later, wait);\n      if (immediate) result = func.apply(context, args);\n    }\n    return result;\n  });\n\n  debounced.cancel = function() {\n    clearTimeout(timeout);\n    timeout = args = context = null;\n  };\n\n  return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n  return partial(wrapper, func);\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = keys(obj), key;\n  for (var i = 0, length = _keys.length; i < length; i++) {\n    key = _keys[i];\n    if (predicate(obj[key], key, obj)) return key;\n  }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n  return function(array, predicate, context) {\n    predicate = cb(predicate, context);\n    var length = getLength(array);\n    var index = dir > 0 ? 0 : length - 1;\n    for (; index >= 0 && index < length; index += dir) {\n      if (predicate(array[index], index, array)) return index;\n    }\n    return -1;\n  };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n  iteratee = cb(iteratee, context, 1);\n  var value = iteratee(obj);\n  var low = 0, high = getLength(array);\n  while (low < high) {\n    var mid = Math.floor((low + high) / 2);\n    if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n  }\n  return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n  return function(array, item, idx) {\n    var i = 0, length = getLength(array);\n    if (typeof idx == 'number') {\n      if (dir > 0) {\n        i = idx >= 0 ? idx : Math.max(idx + length, i);\n      } else {\n        length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n      }\n    } else if (sortedIndex && idx && length) {\n      idx = sortedIndex(array, item);\n      return array[idx] === item ? idx : -1;\n    }\n    if (item !== item) {\n      idx = predicateFind(slice.call(array, i, length), isNaN);\n      return idx >= 0 ? idx + i : -1;\n    }\n    for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n      if (array[idx] === item) return idx;\n    }\n    return -1;\n  };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n  var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n  var key = keyFinder(obj, predicate, context);\n  if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n  return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n  iteratee = optimizeCb(iteratee, context);\n  var i, length;\n  if (isArrayLike(obj)) {\n    for (i = 0, length = obj.length; i < length; i++) {\n      iteratee(obj[i], i, obj);\n    }\n  } else {\n    var _keys = keys(obj);\n    for (i = 0, length = _keys.length; i < length; i++) {\n      iteratee(obj[_keys[i]], _keys[i], obj);\n    }\n  }\n  return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n  iteratee = cb(iteratee, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length,\n      results = Array(length);\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    results[index] = iteratee(obj[currentKey], currentKey, obj);\n  }\n  return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n  // Wrap code that reassigns argument variables in a separate function than\n  // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n  var reducer = function(obj, iteratee, memo, initial) {\n    var _keys = !isArrayLike(obj) && keys(obj),\n        length = (_keys || obj).length,\n        index = dir > 0 ? 0 : length - 1;\n    if (!initial) {\n      memo = obj[_keys ? _keys[index] : index];\n      index += dir;\n    }\n    for (; index >= 0 && index < length; index += dir) {\n      var currentKey = _keys ? _keys[index] : index;\n      memo = iteratee(memo, obj[currentKey], currentKey, obj);\n    }\n    return memo;\n  };\n\n  return function(obj, iteratee, memo, context) {\n    var initial = arguments.length >= 3;\n    return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n  };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n  var results = [];\n  predicate = cb(predicate, context);\n  each(obj, function(value, index, list) {\n    if (predicate(value, index, list)) results.push(value);\n  });\n  return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n  return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (!predicate(obj[currentKey], currentKey, obj)) return false;\n  }\n  return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n  predicate = cb(predicate, context);\n  var _keys = !isArrayLike(obj) && keys(obj),\n      length = (_keys || obj).length;\n  for (var index = 0; index < length; index++) {\n    var currentKey = _keys ? _keys[index] : index;\n    if (predicate(obj[currentKey], currentKey, obj)) return true;\n  }\n  return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n  if (!isArrayLike(obj)) obj = values(obj);\n  if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n  return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n  var contextPath, func;\n  if (isFunction(path)) {\n    func = path;\n  } else {\n    path = toPath(path);\n    contextPath = path.slice(0, -1);\n    path = path[path.length - 1];\n  }\n  return map(obj, function(context) {\n    var method = func;\n    if (!method) {\n      if (contextPath && contextPath.length) {\n        context = deepGet(context, contextPath);\n      }\n      if (context == null) return void 0;\n      method = context[path];\n    }\n    return method == null ? method : method.apply(context, args);\n  });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n  return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n  return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n  var result = -Infinity, lastComputed = -Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value > result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n  var result = Infinity, lastComputed = Infinity,\n      value, computed;\n  if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n    obj = isArrayLike(obj) ? obj : values(obj);\n    for (var i = 0, length = obj.length; i < length; i++) {\n      value = obj[i];\n      if (value != null && value < result) {\n        result = value;\n      }\n    }\n  } else {\n    iteratee = cb(iteratee, context);\n    each(obj, function(v, index, list) {\n      computed = iteratee(v, index, list);\n      if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n        result = v;\n        lastComputed = computed;\n      }\n    });\n  }\n  return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n  if (!obj) return [];\n  if (isArray(obj)) return slice.call(obj);\n  if (isString(obj)) {\n    // Keep surrogate pair characters together.\n    return obj.match(reStrSymbol);\n  }\n  if (isArrayLike(obj)) return map(obj, identity);\n  return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n  if (n == null || guard) {\n    if (!isArrayLike(obj)) obj = values(obj);\n    return obj[random(obj.length - 1)];\n  }\n  var sample = toArray(obj);\n  var length = getLength(sample);\n  n = Math.max(Math.min(n, length), 0);\n  var last = length - 1;\n  for (var index = 0; index < n; index++) {\n    var rand = random(index, last);\n    var temp = sample[index];\n    sample[index] = sample[rand];\n    sample[rand] = temp;\n  }\n  return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n  return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n  var index = 0;\n  iteratee = cb(iteratee, context);\n  return pluck(map(obj, function(value, key, list) {\n    return {\n      value: value,\n      index: index++,\n      criteria: iteratee(value, key, list)\n    };\n  }).sort(function(left, right) {\n    var a = left.criteria;\n    var b = right.criteria;\n    if (a !== b) {\n      if (a > b || a === void 0) return 1;\n      if (a < b || b === void 0) return -1;\n    }\n    return left.index - right.index;\n  }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n  return function(obj, iteratee, context) {\n    var result = partition ? [[], []] : {};\n    iteratee = cb(iteratee, context);\n    each(obj, function(value, index) {\n      var key = iteratee(value, index, obj);\n      behavior(result, value, key);\n    });\n    return result;\n  };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n  result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n  if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n  result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n  if (obj == null) return 0;\n  return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n  return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n  var result = {}, iteratee = keys[0];\n  if (obj == null) return result;\n  if (isFunction(iteratee)) {\n    if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n    keys = allKeys(obj);\n  } else {\n    iteratee = keyInObj;\n    keys = flatten(keys, false, false);\n    obj = Object(obj);\n  }\n  for (var i = 0, length = keys.length; i < length; i++) {\n    var key = keys[i];\n    var value = obj[key];\n    if (iteratee(value, key, obj)) result[key] = value;\n  }\n  return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n  var iteratee = keys[0], context;\n  if (isFunction(iteratee)) {\n    iteratee = negate(iteratee);\n    if (keys.length > 1) context = keys[1];\n  } else {\n    keys = map(flatten(keys, false, false), String);\n    iteratee = function(value, key) {\n      return !contains(keys, key);\n    };\n  }\n  return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n  return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[0];\n  return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n  return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n  if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n  if (n == null || guard) return array[array.length - 1];\n  return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n  return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n  return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n  rest = flatten(rest, true, true);\n  return filter(array, function(value){\n    return !contains(rest, value);\n  });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n  return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n  if (!isBoolean(isSorted)) {\n    context = iteratee;\n    iteratee = isSorted;\n    isSorted = false;\n  }\n  if (iteratee != null) iteratee = cb(iteratee, context);\n  var result = [];\n  var seen = [];\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var value = array[i],\n        computed = iteratee ? iteratee(value, i, array) : value;\n    if (isSorted && !iteratee) {\n      if (!i || seen !== computed) result.push(value);\n      seen = computed;\n    } else if (iteratee) {\n      if (!contains(seen, computed)) {\n        seen.push(computed);\n        result.push(value);\n      }\n    } else if (!contains(result, value)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n  return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n  var result = [];\n  var argsLength = arguments.length;\n  for (var i = 0, length = getLength(array); i < length; i++) {\n    var item = array[i];\n    if (contains(result, item)) continue;\n    var j;\n    for (j = 1; j < argsLength; j++) {\n      if (!contains(arguments[j], item)) break;\n    }\n    if (j === argsLength) result.push(item);\n  }\n  return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n  var length = (array && max(array, getLength).length) || 0;\n  var result = Array(length);\n\n  for (var index = 0; index < length; index++) {\n    result[index] = pluck(array, index);\n  }\n  return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength  from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n  var result = {};\n  for (var i = 0, length = getLength(list); i < length; i++) {\n    if (values) {\n      result[list[i]] = values[i];\n    } else {\n      result[list[i][0]] = list[i][1];\n    }\n  }\n  return result;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n  if (count == null || count < 1) return [];\n  var result = [];\n  var i = 0, length = array.length;\n  while (i < length) {\n    result.push(slice.call(array, i, i += count));\n  }\n  return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n  return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n  each(functions(obj), function(name) {\n    var func = _[name] = obj[name];\n    _.prototype[name] = function() {\n      var args = [this._wrapped];\n      push.apply(args, arguments);\n      return chainResult(this, func.apply(_, args));\n    };\n  });\n  return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) {\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n        delete obj[0];\n      }\n    }\n    return chainResult(this, obj);\n  };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n  var method = ArrayProto[name];\n  _.prototype[name] = function() {\n    var obj = this._wrapped;\n    if (obj != null) obj = method.apply(obj, arguments);\n    return chainResult(this, obj);\n  };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n  return !!(obj && obj.nodeType === 1);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n  return obj === null;\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n  var type = typeof obj;\n  return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n  return obj === void 0;\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n  return function() {\n    return !predicate.apply(this, arguments);\n  };\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n  if (max == null) {\n    max = min;\n    min = 0;\n  }\n  return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n  if (stop == null) {\n    stop = start || 0;\n    start = 0;\n  }\n  if (!step) {\n    step = stop < start ? -1 : 1;\n  }\n\n  var length = Math.max(Math.ceil((stop - start) / step), 0);\n  var range = Array(length);\n\n  for (var idx = 0; idx < length; idx++, start += step) {\n    range[idx] = start;\n  }\n\n  return range;\n}\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n  startIndex = startIndex == null ? func.length - 1 : +startIndex;\n  return function() {\n    var length = Math.max(arguments.length - startIndex, 0),\n        rest = Array(length),\n        index = 0;\n    for (; index < length; index++) {\n      rest[index] = arguments[index + startIndex];\n    }\n    switch (startIndex) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, arguments[0], rest);\n      case 2: return func.call(this, arguments[0], arguments[1], rest);\n    }\n    var args = Array(startIndex + 1);\n    for (index = 0; index < startIndex; index++) {\n      args[index] = arguments[index];\n    }\n    args[startIndex] = rest;\n    return func.apply(this, args);\n  };\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n  interceptor(obj);\n  return obj;\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n  var accum = Array(Math.max(0, n));\n  iteratee = optimizeCb(iteratee, context, 1);\n  for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n  return accum;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n  var id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n","/**\n * vis-timeline and vis-graph2d\n * https://visjs.github.io/vis-timeline/\n *\n * Create a fully customizable, interactive timeline with items and ranges.\n *\n * @version 8.5.1\n * @date    2026-05-07T14:41:44.254Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n *   1. The Apache 2.0 License\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *   and\n *\n *   2. The MIT License\n *      http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nfunction styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar css_248z$e = \".vis .overlay {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n\\n  /* Must be displayed above for example selected Timeline items */\\n  z-index: 10;\\n}\\n\\n.vis-active {\\n  box-shadow: 0 0 10px #86d5f8;\\n}\\n\";\nstyleInject(css_248z$e);\n\nvar css_248z$d = \"/* override some bootstrap styles screwing up the timelines css */\\n\\n.vis [class*=\\\"span\\\"] {\\n  min-height: 0;\\n  width: auto;\\n}\\n\";\nstyleInject(css_248z$d);\n\nvar css_248z$c = \"div.vis-configuration {\\n  position: relative;\\n  display: block;\\n  float: left;\\n  font-size: 12px;\\n}\\n\\ndiv.vis-configuration-wrapper {\\n  display: block;\\n  width: 700px;\\n}\\n\\ndiv.vis-configuration-wrapper::after {\\n  clear: both;\\n  content: \\\"\\\";\\n  display: block;\\n}\\n\\ndiv.vis-configuration.vis-config-option-container {\\n  display: block;\\n  width: 495px;\\n  background-color: #ffffff;\\n  border: 2px solid #f7f8fa;\\n  border-radius: 4px;\\n  margin-top: 20px;\\n  left: 10px;\\n  padding-left: 5px;\\n}\\n\\ndiv.vis-configuration.vis-config-button {\\n  display: block;\\n  width: 495px;\\n  height: 25px;\\n  vertical-align: middle;\\n  line-height: 25px;\\n  background-color: #f7f8fa;\\n  border: 2px solid #ceced0;\\n  border-radius: 4px;\\n  margin-top: 20px;\\n  left: 10px;\\n  padding-left: 5px;\\n  cursor: pointer;\\n  margin-bottom: 30px;\\n}\\n\\ndiv.vis-configuration.vis-config-button.hover {\\n  background-color: #4588e6;\\n  border: 2px solid #214373;\\n  color: #ffffff;\\n}\\n\\ndiv.vis-configuration.vis-config-item {\\n  display: block;\\n  float: left;\\n  width: 495px;\\n  height: 25px;\\n  vertical-align: middle;\\n  line-height: 25px;\\n}\\n\\ndiv.vis-configuration.vis-config-item.vis-config-s2 {\\n  left: 10px;\\n  background-color: #f7f8fa;\\n  padding-left: 5px;\\n  border-radius: 3px;\\n}\\ndiv.vis-configuration.vis-config-item.vis-config-s3 {\\n  left: 20px;\\n  background-color: #e4e9f0;\\n  padding-left: 5px;\\n  border-radius: 3px;\\n}\\ndiv.vis-configuration.vis-config-item.vis-config-s4 {\\n  left: 30px;\\n  background-color: #cfd8e6;\\n  padding-left: 5px;\\n  border-radius: 3px;\\n}\\n\\ndiv.vis-configuration.vis-config-header {\\n  font-size: 18px;\\n  font-weight: bold;\\n}\\n\\ndiv.vis-configuration.vis-config-label {\\n  width: 120px;\\n  height: 25px;\\n  line-height: 25px;\\n}\\n\\ndiv.vis-configuration.vis-config-label.vis-config-s3 {\\n  width: 110px;\\n}\\ndiv.vis-configuration.vis-config-label.vis-config-s4 {\\n  width: 100px;\\n}\\n\\ndiv.vis-configuration.vis-config-colorBlock {\\n  top: 1px;\\n  width: 30px;\\n  height: 19px;\\n  border: 1px solid #444444;\\n  border-radius: 2px;\\n  padding: 0px;\\n  margin: 0px;\\n  cursor: pointer;\\n}\\n\\ninput.vis-configuration.vis-config-checkbox {\\n  left: -5px;\\n}\\n\\ninput.vis-configuration.vis-config-rangeinput {\\n  position: relative;\\n  top: -5px;\\n  width: 60px;\\n  /*height:13px;*/\\n  padding: 1px;\\n  margin: 0;\\n  pointer-events: none;\\n}\\n\\ninput.vis-configuration.vis-config-range {\\n  /*removes default webkit styles*/\\n  -webkit-appearance: none;\\n\\n  /*fix for FF unable to apply focus style bug */\\n  border: 0px solid white;\\n  background-color: rgba(0, 0, 0, 0);\\n\\n  /*required for proper track sizing in FF*/\\n  width: 300px;\\n  height: 20px;\\n}\\ninput.vis-configuration.vis-config-range::-webkit-slider-runnable-track {\\n  width: 300px;\\n  height: 5px;\\n  background: #dedede; /* Old browsers */\\n  background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */\\n  background: -webkit-gradient(\\n    linear,\\n    left top,\\n    left bottom,\\n    color-stop(0%, #dedede),\\n    color-stop(99%, #c8c8c8)\\n  ); /* Chrome,Safari4+ */\\n  background: -webkit-linear-gradient(\\n    top,\\n    #dedede 0%,\\n    #c8c8c8 99%\\n  ); /* Chrome10+,Safari5.1+ */\\n  background: -o-linear-gradient(\\n    top,\\n    #dedede 0%,\\n    #c8c8c8 99%\\n  ); /* Opera 11.10+ */\\n  background: -ms-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* IE10+ */\\n  background: linear-gradient(to bottom, #dedede 0%, #c8c8c8 99%); /* W3C */\\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */\\n\\n  border: 1px solid #999999;\\n  box-shadow: #aaaaaa 0px 0px 3px 0px;\\n  border-radius: 3px;\\n}\\ninput.vis-configuration.vis-config-range::-webkit-slider-thumb {\\n  -webkit-appearance: none;\\n  border: 1px solid #14334b;\\n  height: 17px;\\n  width: 17px;\\n  border-radius: 50%;\\n  background: #3876c2; /* Old browsers */\\n  background: -moz-linear-gradient(top, #3876c2 0%, #385380 100%); /* FF3.6+ */\\n  background: -webkit-gradient(\\n    linear,\\n    left top,\\n    left bottom,\\n    color-stop(0%, #3876c2),\\n    color-stop(100%, #385380)\\n  ); /* Chrome,Safari4+ */\\n  background: -webkit-linear-gradient(\\n    top,\\n    #3876c2 0%,\\n    #385380 100%\\n  ); /* Chrome10+,Safari5.1+ */\\n  background: -o-linear-gradient(\\n    top,\\n    #3876c2 0%,\\n    #385380 100%\\n  ); /* Opera 11.10+ */\\n  background: -ms-linear-gradient(top, #3876c2 0%, #385380 100%); /* IE10+ */\\n  background: linear-gradient(to bottom, #3876c2 0%, #385380 100%); /* W3C */\\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380',GradientType=0 ); /* IE6-9 */\\n  box-shadow: #111927 0px 0px 1px 0px;\\n  margin-top: -7px;\\n}\\ninput.vis-configuration.vis-config-range:focus {\\n  outline: none;\\n}\\ninput.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track {\\n  background: #9d9d9d; /* Old browsers */\\n  background: -moz-linear-gradient(top, #9d9d9d 0%, #c8c8c8 99%); /* FF3.6+ */\\n  background: -webkit-gradient(\\n    linear,\\n    left top,\\n    left bottom,\\n    color-stop(0%, #9d9d9d),\\n    color-stop(99%, #c8c8c8)\\n  ); /* Chrome,Safari4+ */\\n  background: -webkit-linear-gradient(\\n    top,\\n    #9d9d9d 0%,\\n    #c8c8c8 99%\\n  ); /* Chrome10+,Safari5.1+ */\\n  background: -o-linear-gradient(\\n    top,\\n    #9d9d9d 0%,\\n    #c8c8c8 99%\\n  ); /* Opera 11.10+ */\\n  background: -ms-linear-gradient(top, #9d9d9d 0%, #c8c8c8 99%); /* IE10+ */\\n  background: linear-gradient(to bottom, #9d9d9d 0%, #c8c8c8 99%); /* W3C */\\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */\\n}\\n\\ninput.vis-configuration.vis-config-range::-moz-range-track {\\n  width: 300px;\\n  height: 10px;\\n  background: #dedede; /* Old browsers */\\n  background: -moz-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* FF3.6+ */\\n  background: -webkit-gradient(\\n    linear,\\n    left top,\\n    left bottom,\\n    color-stop(0%, #dedede),\\n    color-stop(99%, #c8c8c8)\\n  ); /* Chrome,Safari4+ */\\n  background: -webkit-linear-gradient(\\n    top,\\n    #dedede 0%,\\n    #c8c8c8 99%\\n  ); /* Chrome10+,Safari5.1+ */\\n  background: -o-linear-gradient(\\n    top,\\n    #dedede 0%,\\n    #c8c8c8 99%\\n  ); /* Opera 11.10+ */\\n  background: -ms-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* IE10+ */\\n  background: linear-gradient(to bottom, #dedede 0%, #c8c8c8 99%); /* W3C */\\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */\\n\\n  border: 1px solid #999999;\\n  box-shadow: #aaaaaa 0px 0px 3px 0px;\\n  border-radius: 3px;\\n}\\ninput.vis-configuration.vis-config-range::-moz-range-thumb {\\n  border: none;\\n  height: 16px;\\n  width: 16px;\\n\\n  border-radius: 50%;\\n  background: #385380;\\n}\\n\\n/*hide the outline behind the border*/\\ninput.vis-configuration.vis-config-range:-moz-focusring {\\n  outline: 1px solid white;\\n  outline-offset: -1px;\\n}\\n\\ninput.vis-configuration.vis-config-range::-ms-track {\\n  width: 300px;\\n  height: 5px;\\n\\n  /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */\\n  background: transparent;\\n\\n  /*leave room for the larger thumb to overflow with a transparent border */\\n  border-color: transparent;\\n  border-width: 6px 0;\\n\\n  /*remove default tick marks*/\\n  color: transparent;\\n}\\ninput.vis-configuration.vis-config-range::-ms-fill-lower {\\n  background: #777;\\n  border-radius: 10px;\\n}\\ninput.vis-configuration.vis-config-range::-ms-fill-upper {\\n  background: #ddd;\\n  border-radius: 10px;\\n}\\ninput.vis-configuration.vis-config-range::-ms-thumb {\\n  border: none;\\n  height: 16px;\\n  width: 16px;\\n  border-radius: 50%;\\n  background: #385380;\\n}\\ninput.vis-configuration.vis-config-range:focus::-ms-fill-lower {\\n  background: #888;\\n}\\ninput.vis-configuration.vis-config-range:focus::-ms-fill-upper {\\n  background: #ccc;\\n}\\n\\n.vis-configuration-popup {\\n  position: absolute;\\n  background: rgba(57, 76, 89, 0.85);\\n  border: 2px solid #f2faff;\\n  line-height: 30px;\\n  height: 30px;\\n  width: 150px;\\n  text-align: center;\\n  color: #ffffff;\\n  font-size: 14px;\\n  border-radius: 4px;\\n  -webkit-transition: opacity 0.3s ease-in-out;\\n  -moz-transition: opacity 0.3s ease-in-out;\\n  transition: opacity 0.3s ease-in-out;\\n}\\n.vis-configuration-popup:after,\\n.vis-configuration-popup:before {\\n  left: 100%;\\n  top: 50%;\\n  border: solid transparent;\\n  content: \\\" \\\";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none;\\n}\\n\\n.vis-configuration-popup:after {\\n  border-color: rgba(136, 183, 213, 0);\\n  border-left-color: rgba(57, 76, 89, 0.85);\\n  border-width: 8px;\\n  margin-top: -8px;\\n}\\n.vis-configuration-popup:before {\\n  border-color: rgba(194, 225, 245, 0);\\n  border-left-color: #f2faff;\\n  border-width: 12px;\\n  margin-top: -12px;\\n}\\n\";\nstyleInject(css_248z$c);\n\nvar css_248z$b = \"div.vis-tooltip {\\n  position: absolute;\\n  visibility: hidden;\\n  padding: 5px;\\n  white-space: nowrap;\\n\\n  font-family: verdana;\\n  font-size: 14px;\\n  color: #000000;\\n  background-color: #f5f4ed;\\n\\n  -moz-border-radius: 3px;\\n  -webkit-border-radius: 3px;\\n  border-radius: 3px;\\n  border: 1px solid #808074;\\n\\n  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);\\n  pointer-events: none;\\n\\n  z-index: 5;\\n}\\n\";\nstyleInject(css_248z$b);\n\nvar css_248z$a = \".vis-timeline {\\n  /*\\n  -webkit-transition: height .4s ease-in-out;\\n  transition:         height .4s ease-in-out;\\n  */\\n}\\n\\n.vis-panel {\\n  /*\\n  -webkit-transition: height .4s ease-in-out, top .4s ease-in-out;\\n  transition:         height .4s ease-in-out, top .4s ease-in-out;\\n  */\\n}\\n\\n.vis-axis {\\n  /*\\n  -webkit-transition: top .4s ease-in-out;\\n  transition:         top .4s ease-in-out;\\n  */\\n}\\n\\n/* TODO: get animation working nicely\\n\\n.vis-item {\\n  -webkit-transition: top .4s ease-in-out;\\n  transition:         top .4s ease-in-out;\\n}\\n\\n.vis-item.line {\\n  -webkit-transition: height .4s ease-in-out, top .4s ease-in-out;\\n  transition:         height .4s ease-in-out, top .4s ease-in-out;\\n}\\n/**/\\n\";\nstyleInject(css_248z$a);\n\nvar css_248z$9 = \".vis-current-time {\\n  background-color: #ff7f6e;\\n  width: 2px;\\n  z-index: 1;\\n  pointer-events: none;\\n}\\n\\n.vis-rolling-mode-btn {\\n  height: 40px;\\n  width: 40px;\\n  position: absolute;\\n  top: 7px;\\n  right: 20px;\\n  border-radius: 50%;\\n  font-size: 28px;\\n  cursor: pointer;\\n  opacity: 0.8;\\n  color: white;\\n  font-weight: bold;\\n  text-align: center;\\n  background: #3876c2;\\n}\\n.vis-rolling-mode-btn:before {\\n  content: \\\"\\\\26F6\\\";\\n}\\n\\n.vis-rolling-mode-btn:hover {\\n  opacity: 1;\\n}\\n\";\nstyleInject(css_248z$9);\n\nvar css_248z$8 = \".vis-custom-time {\\n  background-color: #6e94ff;\\n  width: 2px;\\n  cursor: move;\\n  z-index: 1;\\n}\\n\\n.vis-custom-time > .vis-custom-time-marker {\\n  background-color: inherit;\\n  color: white;\\n  font-size: 12px;\\n  white-space: nowrap;\\n  padding: 3px 5px;\\n  top: 0px;\\n  cursor: initial;\\n  z-index: inherit;\\n}\\n\";\nstyleInject(css_248z$8);\n\nvar css_248z$7 = \".vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal {\\n  position: absolute;\\n  width: 100%;\\n  height: 0;\\n  border-bottom: 1px solid;\\n}\\n\\n.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor {\\n  border-color: #e5e5e5;\\n}\\n\\n.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major {\\n  border-color: #bfbfbf;\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-major {\\n  width: 100%;\\n  position: absolute;\\n  color: #4d4d4d;\\n  white-space: nowrap;\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-major.vis-measure {\\n  padding: 0;\\n  margin: 0;\\n  border: 0;\\n  visibility: hidden;\\n  width: auto;\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-minor {\\n  position: absolute;\\n  width: 100%;\\n  color: #bebebe;\\n  white-space: nowrap;\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-minor.vis-measure {\\n  padding: 0;\\n  margin: 0;\\n  border: 0;\\n  visibility: hidden;\\n  width: auto;\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-title {\\n  position: absolute;\\n  color: #4d4d4d;\\n  white-space: nowrap;\\n  bottom: 20px;\\n  text-align: center;\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-title.vis-measure {\\n  padding: 0;\\n  margin: 0;\\n  visibility: hidden;\\n  width: auto;\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-title.vis-left {\\n  bottom: 0;\\n  -webkit-transform-origin: left top;\\n  -moz-transform-origin: left top;\\n  -ms-transform-origin: left top;\\n  -o-transform-origin: left top;\\n  transform-origin: left bottom;\\n  -webkit-transform: rotate(-90deg);\\n  -moz-transform: rotate(-90deg);\\n  -ms-transform: rotate(-90deg);\\n  -o-transform: rotate(-90deg);\\n  transform: rotate(-90deg);\\n}\\n\\n.vis-data-axis .vis-y-axis.vis-title.vis-right {\\n  bottom: 0;\\n  -webkit-transform-origin: right bottom;\\n  -moz-transform-origin: right bottom;\\n  -ms-transform-origin: right bottom;\\n  -o-transform-origin: right bottom;\\n  transform-origin: right bottom;\\n  -webkit-transform: rotate(90deg);\\n  -moz-transform: rotate(90deg);\\n  -ms-transform: rotate(90deg);\\n  -o-transform: rotate(90deg);\\n  transform: rotate(90deg);\\n}\\n\\n.vis-legend {\\n  background-color: rgba(247, 252, 255, 0.65);\\n  padding: 5px;\\n  border: 1px solid #b3b3b3;\\n  box-shadow: 2px 2px 10px rgba(154, 154, 154, 0.55);\\n}\\n\\n.vis-legend-text {\\n  /*font-size: 10px;*/\\n  white-space: nowrap;\\n  display: inline-block;\\n}\\n\";\nstyleInject(css_248z$7);\n\nvar css_248z$6 = \".vis-item {\\n  position: absolute;\\n  color: #1a1a1a;\\n  border-color: #97b0f8;\\n  border-width: 1px;\\n  background-color: #d5ddf6;\\n  display: inline-block;\\n  z-index: 1;\\n  /*overflow: hidden;*/\\n}\\n\\n.vis-item.vis-selected {\\n  border-color: #ffc200;\\n  background-color: #fff785;\\n\\n  /* z-index must be higher than the z-index of custom time bar and current time bar */\\n  z-index: 2;\\n}\\n\\n.vis-editable.vis-selected {\\n  cursor: move;\\n}\\n\\n.vis-item.vis-point.vis-selected {\\n  background-color: #fff785;\\n}\\n\\n.vis-item.vis-box {\\n  text-align: center;\\n  border-style: solid;\\n  border-radius: 2px;\\n}\\n\\n.vis-item.vis-point {\\n  background: none;\\n}\\n\\n.vis-item.vis-dot {\\n  position: absolute;\\n  padding: 0;\\n  border-width: 4px;\\n  border-style: solid;\\n  border-radius: 4px;\\n}\\n\\n.vis-item.vis-range {\\n  border-style: solid;\\n  border-radius: 2px;\\n  box-sizing: border-box;\\n}\\n\\n.vis-item.vis-background {\\n  border: none;\\n  background-color: rgba(213, 221, 246, 0.4);\\n  box-sizing: border-box;\\n  padding: 0;\\n  margin: 0;\\n}\\n\\n.vis-item .vis-item-overflow {\\n  position: relative;\\n  width: 100%;\\n  height: 100%;\\n  padding: 0;\\n  margin: 0;\\n  overflow: hidden;\\n}\\n\\n.vis-item-visible-frame {\\n  white-space: nowrap;\\n}\\n\\n.vis-item.vis-range .vis-item-content {\\n  position: relative;\\n  display: inline-block;\\n}\\n\\n.vis-item.vis-background .vis-item-content {\\n  position: absolute;\\n  display: inline-block;\\n}\\n\\n.vis-item.vis-line {\\n  padding: 0;\\n  position: absolute;\\n  width: 0;\\n  border-left-width: 1px;\\n  border-left-style: solid;\\n}\\n\\n.vis-item .vis-item-content {\\n  white-space: nowrap;\\n  box-sizing: border-box;\\n  padding: 5px;\\n}\\n\\n.vis-item .vis-onUpdateTime-tooltip {\\n  position: absolute;\\n  background: #4f81bd;\\n  color: white;\\n  width: 200px;\\n  text-align: center;\\n  white-space: nowrap;\\n  padding: 5px;\\n  border-radius: 1px;\\n  transition: 0.4s;\\n  -o-transition: 0.4s;\\n  -moz-transition: 0.4s;\\n  -webkit-transition: 0.4s;\\n}\\n\\n.vis-item .vis-delete,\\n.vis-item .vis-delete-rtl {\\n  position: absolute;\\n  top: 0px;\\n  width: 24px;\\n  height: 24px;\\n  box-sizing: border-box;\\n  padding: 0px 5px;\\n  cursor: pointer;\\n\\n  -webkit-transition: background 0.2s linear;\\n  -moz-transition: background 0.2s linear;\\n  -ms-transition: background 0.2s linear;\\n  -o-transition: background 0.2s linear;\\n  transition: background 0.2s linear;\\n}\\n\\n.vis-item .vis-delete {\\n  right: -24px;\\n}\\n\\n.vis-item .vis-delete-rtl {\\n  left: -24px;\\n}\\n\\n.vis-item .vis-delete:after,\\n.vis-item .vis-delete-rtl:after {\\n  content: \\\"\\\\00D7\\\"; /* MULTIPLICATION SIGN */\\n  color: red;\\n  font-family: arial, sans-serif;\\n  font-size: 22px;\\n  font-weight: bold;\\n\\n  -webkit-transition: color 0.2s linear;\\n  -moz-transition: color 0.2s linear;\\n  -ms-transition: color 0.2s linear;\\n  -o-transition: color 0.2s linear;\\n  transition: color 0.2s linear;\\n}\\n\\n.vis-item .vis-delete:hover,\\n.vis-item .vis-delete-rtl:hover {\\n  background: red;\\n}\\n\\n.vis-item .vis-delete:hover:after,\\n.vis-item .vis-delete-rtl:hover:after {\\n  color: white;\\n}\\n\\n.vis-item .vis-drag-center {\\n  position: absolute;\\n  width: 100%;\\n  height: 100%;\\n  top: 0;\\n  left: 0px;\\n  cursor: move;\\n}\\n\\n.vis-item.vis-range .vis-drag-left {\\n  position: absolute;\\n  width: 24px;\\n  max-width: 20%;\\n  min-width: 2px;\\n  height: 100%;\\n  top: 0;\\n  left: -4px;\\n\\n  cursor: w-resize;\\n}\\n\\n.vis-item.vis-range .vis-drag-right {\\n  position: absolute;\\n  width: 24px;\\n  max-width: 20%;\\n  min-width: 2px;\\n  height: 100%;\\n  top: 0;\\n  right: -4px;\\n\\n  cursor: e-resize;\\n}\\n\\n.vis-range.vis-item.vis-readonly .vis-drag-left,\\n.vis-range.vis-item.vis-readonly .vis-drag-right {\\n  cursor: auto;\\n}\\n\\n.vis-item.vis-cluster {\\n  vertical-align: center;\\n  text-align: center;\\n  border-style: solid;\\n  border-radius: 2px;\\n}\\n\\n.vis-item.vis-cluster-line {\\n  padding: 0;\\n  position: absolute;\\n  width: 0;\\n  border-left-width: 1px;\\n  border-left-style: solid;\\n}\\n\\n.vis-item.vis-cluster-dot {\\n  position: absolute;\\n  padding: 0;\\n  border-width: 4px;\\n  border-style: solid;\\n  border-radius: 4px;\\n}\\n\";\nstyleInject(css_248z$6);\n\nvar css_248z$5 = \".vis-itemset {\\n  position: relative;\\n  padding: 0;\\n  margin: 0;\\n\\n  box-sizing: border-box;\\n}\\n\\n.vis-itemset .vis-background,\\n.vis-itemset .vis-foreground {\\n  position: absolute;\\n  width: 100%;\\n  height: 100%;\\n  overflow: visible;\\n}\\n\\n.vis-axis {\\n  position: absolute;\\n  width: 100%;\\n  height: 0;\\n  left: 0;\\n  z-index: 1;\\n}\\n\\n.vis-foreground .vis-group {\\n  position: relative;\\n  box-sizing: border-box;\\n  border-bottom: 1px solid #bfbfbf;\\n}\\n\\n.vis-foreground .vis-group:last-child {\\n  border-bottom: none;\\n}\\n\\n.vis-nesting-group {\\n  cursor: pointer;\\n}\\n\\n.vis-label.vis-nested-group.vis-group-level-unknown-but-gte1 {\\n  background: #f5f5f5;\\n}\\n.vis-label.vis-nested-group.vis-group-level-0 {\\n  background-color: #ffffff;\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-0 .vis-inner {\\n  padding-left: 0;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-0 .vis-inner {\\n  padding-right: 0;\\n}\\n.vis-label.vis-nested-group.vis-group-level-1 {\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-1 .vis-inner {\\n  padding-left: 15px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-1 .vis-inner {\\n  padding-right: 15px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-2 {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-2 .vis-inner {\\n  padding-left: 30px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-2 .vis-inner {\\n  padding-right: 30px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-3 {\\n  background-color: rgba(0, 0, 0, 0.15);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-3 .vis-inner {\\n  padding-left: 45px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-3 .vis-inner {\\n  padding-right: 45px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-4 {\\n  background-color: rgba(0, 0, 0, 0.2);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-4 .vis-inner {\\n  padding-left: 60px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-4 .vis-inner {\\n  padding-right: 60px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-5 {\\n  background-color: rgba(0, 0, 0, 0.25);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-5 .vis-inner {\\n  padding-left: 75px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-5 .vis-inner {\\n  padding-right: 75px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-6 {\\n  background-color: rgba(0, 0, 0, 0.3);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-6 .vis-inner {\\n  padding-left: 90px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-6 .vis-inner {\\n  padding-right: 90px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-7 {\\n  background-color: rgba(0, 0, 0, 0.35);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-7 .vis-inner {\\n  padding-left: 105px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-7 .vis-inner {\\n  padding-right: 105px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-8 {\\n  background-color: rgba(0, 0, 0, 0.4);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-8 .vis-inner {\\n  padding-left: 120px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-8 .vis-inner {\\n  padding-right: 120px;\\n}\\n.vis-label.vis-nested-group.vis-group-level-9 {\\n  background-color: rgba(0, 0, 0, 0.45);\\n}\\n.vis-ltr .vis-label.vis-nested-group.vis-group-level-9 .vis-inner {\\n  padding-left: 135px;\\n}\\n.vis-rtl .vis-label.vis-nested-group.vis-group-level-9 .vis-inner {\\n  padding-right: 135px;\\n}\\n/* default takes over beginning with level-10 (thats why we add .vis-nested-group\\n  to the selectors above, to have higher specifity than these rules for the defaults) */\\n.vis-label.vis-nested-group {\\n  background-color: rgba(0, 0, 0, 0.5);\\n}\\n.vis-ltr .vis-label.vis-nested-group .vis-inner {\\n  padding-left: 150px;\\n}\\n.vis-rtl .vis-label.vis-nested-group .vis-inner {\\n  padding-right: 150px;\\n}\\n\\n.vis-group-level-unknown-but-gte1 {\\n  border: 1px solid red;\\n}\\n\\n/* expanded/collapsed indicators */\\n.vis-label.vis-nesting-group:before,\\n.vis-label.vis-nesting-group:before {\\n  display: inline-block;\\n  width: 15px;\\n}\\n.vis-label.vis-nesting-group.expanded:before {\\n  content: \\\"\\\\25BC\\\";\\n}\\n.vis-label.vis-nesting-group.collapsed:before {\\n  content: \\\"\\\\25B6\\\";\\n}\\n.vis-rtl .vis-label.vis-nesting-group.collapsed:before {\\n  content: \\\"\\\\25C0\\\";\\n}\\n/* compensate missing expanded/collapsed indicator, but only at levels > 0 */\\n.vis-ltr .vis-label:not(.vis-nesting-group):not(.vis-group-level-0) {\\n  padding-left: 15px;\\n}\\n.vis-rtl .vis-label:not(.vis-nesting-group):not(.vis-group-level-0) {\\n  padding-right: 15px;\\n}\\n\\n.vis-overlay {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  z-index: 10;\\n}\\n\";\nstyleInject(css_248z$5);\n\nvar css_248z$4 = \".vis-labelset {\\n  position: relative;\\n\\n  overflow: hidden;\\n\\n  box-sizing: border-box;\\n}\\n\\n.vis-labelset .vis-label {\\n  position: relative;\\n  left: 0;\\n  top: 0;\\n  width: 100%;\\n  color: #4d4d4d;\\n\\n  box-sizing: border-box;\\n}\\n\\n.vis-labelset .vis-label {\\n  border-bottom: 1px solid #bfbfbf;\\n}\\n\\n.vis-labelset .vis-label.draggable {\\n  cursor: pointer;\\n}\\n\\n.vis-group-is-dragging {\\n  background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.vis-labelset .vis-label:last-child {\\n  border-bottom: none;\\n}\\n\\n.vis-labelset .vis-label .vis-inner {\\n  display: inline-block;\\n  padding: 5px;\\n}\\n\\n.vis-labelset .vis-label .vis-inner.vis-hidden {\\n  padding: 0;\\n}\\n\";\nstyleInject(css_248z$4);\n\nvar css_248z$3 = \".vis-panel {\\n  position: absolute;\\n\\n  padding: 0;\\n  margin: 0;\\n\\n  box-sizing: border-box;\\n}\\n\\n.vis-panel.vis-center,\\n.vis-panel.vis-left,\\n.vis-panel.vis-right,\\n.vis-panel.vis-top,\\n.vis-panel.vis-bottom {\\n  border: 1px #bfbfbf;\\n}\\n\\n.vis-panel.vis-center,\\n.vis-panel.vis-left,\\n.vis-panel.vis-right {\\n  border-top-style: solid;\\n  border-bottom-style: solid;\\n  overflow: hidden;\\n}\\n\\n.vis-left.vis-panel.vis-vertical-scroll,\\n.vis-right.vis-panel.vis-vertical-scroll {\\n  height: 100%;\\n  overflow-x: hidden;\\n  overflow-y: scroll;\\n}\\n\\n.vis-left.vis-panel.vis-vertical-scroll {\\n  direction: rtl;\\n}\\n\\n.vis-left.vis-panel.vis-vertical-scroll .vis-content {\\n  direction: ltr;\\n}\\n\\n.vis-right.vis-panel.vis-vertical-scroll {\\n  direction: ltr;\\n}\\n\\n.vis-right.vis-panel.vis-vertical-scroll .vis-content {\\n  direction: rtl;\\n}\\n\\n.vis-panel.vis-center,\\n.vis-panel.vis-top,\\n.vis-panel.vis-bottom {\\n  border-left-style: solid;\\n  border-right-style: solid;\\n}\\n\\n.vis-background {\\n  overflow: hidden;\\n}\\n\\n.vis-panel > .vis-content {\\n  position: relative;\\n}\\n\\n.vis-panel .vis-shadow {\\n  position: absolute;\\n  width: 100%;\\n  height: 1px;\\n  box-shadow: 0 0 10px rgba(0, 0, 0, 0.8);\\n  /* TODO: find a nice way to ensure vis-shadows are drawn on top of items\\n  z-index: 1;\\n  */\\n}\\n\\n.vis-panel .vis-shadow.vis-top {\\n  top: -1px;\\n  left: 0;\\n}\\n\\n.vis-panel .vis-shadow.vis-bottom {\\n  bottom: -1px;\\n  left: 0;\\n}\\n\";\nstyleInject(css_248z$3);\n\nvar css_248z$2 = \".vis-graph-group0 {\\n  fill: #4f81bd;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #4f81bd;\\n}\\n\\n.vis-graph-group1 {\\n  fill: #f79646;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #f79646;\\n}\\n\\n.vis-graph-group2 {\\n  fill: #8c51cf;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #8c51cf;\\n}\\n\\n.vis-graph-group3 {\\n  fill: #75c841;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #75c841;\\n}\\n\\n.vis-graph-group4 {\\n  fill: #ff0100;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #ff0100;\\n}\\n\\n.vis-graph-group5 {\\n  fill: #37d8e6;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #37d8e6;\\n}\\n\\n.vis-graph-group6 {\\n  fill: #042662;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #042662;\\n}\\n\\n.vis-graph-group7 {\\n  fill: #00ff26;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #00ff26;\\n}\\n\\n.vis-graph-group8 {\\n  fill: #ff00ff;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #ff00ff;\\n}\\n\\n.vis-graph-group9 {\\n  fill: #8f3938;\\n  fill-opacity: 0;\\n  stroke-width: 2px;\\n  stroke: #8f3938;\\n}\\n\\n.vis-timeline .vis-fill {\\n  fill-opacity: 0.1;\\n  stroke: none;\\n}\\n\\n.vis-timeline .vis-bar {\\n  fill-opacity: 0.5;\\n  stroke-width: 1px;\\n}\\n\\n.vis-timeline .vis-point {\\n  stroke-width: 2px;\\n  fill-opacity: 1;\\n}\\n\\n.vis-timeline .vis-legend-background {\\n  stroke-width: 1px;\\n  fill-opacity: 0.9;\\n  fill: #ffffff;\\n  stroke: #c2c2c2;\\n}\\n\\n.vis-timeline .vis-outline {\\n  stroke-width: 1px;\\n  fill-opacity: 1;\\n  fill: #ffffff;\\n  stroke: #e5e5e5;\\n}\\n\\n.vis-timeline .vis-icon-fill {\\n  fill-opacity: 0.3;\\n  stroke: none;\\n}\\n\";\nstyleInject(css_248z$2);\n\nvar css_248z$1 = \".vis-time-axis {\\n  position: relative;\\n  overflow: hidden;\\n}\\n\\n.vis-time-axis.vis-foreground {\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n}\\n\\n.vis-time-axis.vis-background {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n}\\n\\n.vis-time-axis .vis-text {\\n  position: absolute;\\n  color: #4d4d4d;\\n  padding: 3px;\\n  overflow: hidden;\\n  box-sizing: border-box;\\n\\n  white-space: nowrap;\\n}\\n\\n.vis-time-axis .vis-text.vis-measure {\\n  position: absolute;\\n  padding-left: 0;\\n  padding-right: 0;\\n  margin-left: 0;\\n  margin-right: 0;\\n  visibility: hidden;\\n}\\n\\n.vis-time-axis .vis-grid.vis-vertical {\\n  position: absolute;\\n  border-left: 1px solid;\\n}\\n\\n.vis-time-axis .vis-grid.vis-vertical-rtl {\\n  position: absolute;\\n  border-right: 1px solid;\\n}\\n\\n.vis-time-axis .vis-grid.vis-minor {\\n  border-color: #e5e5e5;\\n}\\n\\n.vis-time-axis .vis-grid.vis-major {\\n  border-color: #bfbfbf;\\n}\\n\";\nstyleInject(css_248z$1);\n\nvar css_248z = \".vis-timeline {\\n  position: relative;\\n  border: 1px solid #bfbfbf;\\n  overflow: hidden;\\n  padding: 0;\\n  margin: 0;\\n  box-sizing: border-box;\\n}\\n\\n.vis-loading-screen {\\n  width: 100%;\\n  height: 100%;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n}\\n\";\nstyleInject(css_248z);\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction commonjsRequire(path) {\n\tthrow new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');\n}\n\nvar de$2 = {exports: {}};\n\nvar moment$5 = {exports: {}};\n\nvar moment$4 = moment$5.exports;\n\nvar hasRequiredMoment;\n\nfunction requireMoment () {\n\tif (hasRequiredMoment) return moment$5.exports;\n\thasRequiredMoment = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t    module.exports = factory() ;\n\t\t}(moment$4, (function () {\n\t\t    var hookCallback;\n\n\t\t    function hooks() {\n\t\t        return hookCallback.apply(null, arguments);\n\t\t    }\n\n\t\t    // This is done to register the method called with moment()\n\t\t    // without creating circular dependencies.\n\t\t    function setHookCallback(callback) {\n\t\t        hookCallback = callback;\n\t\t    }\n\n\t\t    function isArray(input) {\n\t\t        return (\n\t\t            input instanceof Array ||\n\t\t            Object.prototype.toString.call(input) === '[object Array]'\n\t\t        );\n\t\t    }\n\n\t\t    function isObject(input) {\n\t\t        // IE8 will treat undefined and null as object if it wasn't for\n\t\t        // input != null\n\t\t        return (\n\t\t            input != null &&\n\t\t            Object.prototype.toString.call(input) === '[object Object]'\n\t\t        );\n\t\t    }\n\n\t\t    function hasOwnProp(a, b) {\n\t\t        return Object.prototype.hasOwnProperty.call(a, b);\n\t\t    }\n\n\t\t    function isObjectEmpty(obj) {\n\t\t        if (Object.getOwnPropertyNames) {\n\t\t            return Object.getOwnPropertyNames(obj).length === 0;\n\t\t        } else {\n\t\t            var k;\n\t\t            for (k in obj) {\n\t\t                if (hasOwnProp(obj, k)) {\n\t\t                    return false;\n\t\t                }\n\t\t            }\n\t\t            return true;\n\t\t        }\n\t\t    }\n\n\t\t    function isUndefined(input) {\n\t\t        return input === void 0;\n\t\t    }\n\n\t\t    function isNumber(input) {\n\t\t        return (\n\t\t            typeof input === 'number' ||\n\t\t            Object.prototype.toString.call(input) === '[object Number]'\n\t\t        );\n\t\t    }\n\n\t\t    function isDate(input) {\n\t\t        return (\n\t\t            input instanceof Date ||\n\t\t            Object.prototype.toString.call(input) === '[object Date]'\n\t\t        );\n\t\t    }\n\n\t\t    function map(arr, fn) {\n\t\t        var res = [],\n\t\t            i,\n\t\t            arrLen = arr.length;\n\t\t        for (i = 0; i < arrLen; ++i) {\n\t\t            res.push(fn(arr[i], i));\n\t\t        }\n\t\t        return res;\n\t\t    }\n\n\t\t    function extend(a, b) {\n\t\t        for (var i in b) {\n\t\t            if (hasOwnProp(b, i)) {\n\t\t                a[i] = b[i];\n\t\t            }\n\t\t        }\n\n\t\t        if (hasOwnProp(b, 'toString')) {\n\t\t            a.toString = b.toString;\n\t\t        }\n\n\t\t        if (hasOwnProp(b, 'valueOf')) {\n\t\t            a.valueOf = b.valueOf;\n\t\t        }\n\n\t\t        return a;\n\t\t    }\n\n\t\t    function createUTC(input, format, locale, strict) {\n\t\t        return createLocalOrUTC(input, format, locale, strict, true).utc();\n\t\t    }\n\n\t\t    function defaultParsingFlags() {\n\t\t        // We need to deep clone this object.\n\t\t        return {\n\t\t            empty: false,\n\t\t            unusedTokens: [],\n\t\t            unusedInput: [],\n\t\t            overflow: -2,\n\t\t            charsLeftOver: 0,\n\t\t            nullInput: false,\n\t\t            invalidEra: null,\n\t\t            invalidMonth: null,\n\t\t            invalidFormat: false,\n\t\t            userInvalidated: false,\n\t\t            iso: false,\n\t\t            parsedDateParts: [],\n\t\t            era: null,\n\t\t            meridiem: null,\n\t\t            rfc2822: false,\n\t\t            weekdayMismatch: false,\n\t\t        };\n\t\t    }\n\n\t\t    function getParsingFlags(m) {\n\t\t        if (m._pf == null) {\n\t\t            m._pf = defaultParsingFlags();\n\t\t        }\n\t\t        return m._pf;\n\t\t    }\n\n\t\t    var some;\n\t\t    if (Array.prototype.some) {\n\t\t        some = Array.prototype.some;\n\t\t    } else {\n\t\t        some = function (fun) {\n\t\t            var t = Object(this),\n\t\t                len = t.length >>> 0,\n\t\t                i;\n\n\t\t            for (i = 0; i < len; i++) {\n\t\t                if (i in t && fun.call(this, t[i], i, t)) {\n\t\t                    return true;\n\t\t                }\n\t\t            }\n\n\t\t            return false;\n\t\t        };\n\t\t    }\n\n\t\t    function isValid(m) {\n\t\t        var flags = null,\n\t\t            parsedParts = false,\n\t\t            isNowValid = m._d && !isNaN(m._d.getTime());\n\t\t        if (isNowValid) {\n\t\t            flags = getParsingFlags(m);\n\t\t            parsedParts = some.call(flags.parsedDateParts, function (i) {\n\t\t                return i != null;\n\t\t            });\n\t\t            isNowValid =\n\t\t                flags.overflow < 0 &&\n\t\t                !flags.empty &&\n\t\t                !flags.invalidEra &&\n\t\t                !flags.invalidMonth &&\n\t\t                !flags.invalidWeekday &&\n\t\t                !flags.weekdayMismatch &&\n\t\t                !flags.nullInput &&\n\t\t                !flags.invalidFormat &&\n\t\t                !flags.userInvalidated &&\n\t\t                (!flags.meridiem || (flags.meridiem && parsedParts));\n\t\t            if (m._strict) {\n\t\t                isNowValid =\n\t\t                    isNowValid &&\n\t\t                    flags.charsLeftOver === 0 &&\n\t\t                    flags.unusedTokens.length === 0 &&\n\t\t                    flags.bigHour === undefined;\n\t\t            }\n\t\t        }\n\t\t        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n\t\t            m._isValid = isNowValid;\n\t\t        } else {\n\t\t            return isNowValid;\n\t\t        }\n\t\t        return m._isValid;\n\t\t    }\n\n\t\t    function createInvalid(flags) {\n\t\t        var m = createUTC(NaN);\n\t\t        if (flags != null) {\n\t\t            extend(getParsingFlags(m), flags);\n\t\t        } else {\n\t\t            getParsingFlags(m).userInvalidated = true;\n\t\t        }\n\n\t\t        return m;\n\t\t    }\n\n\t\t    // Plugins that add properties should also add the key here (null value),\n\t\t    // so we can properly clone ourselves.\n\t\t    var momentProperties = (hooks.momentProperties = []),\n\t\t        updateInProgress = false;\n\n\t\t    function copyConfig(to, from) {\n\t\t        var i,\n\t\t            prop,\n\t\t            val,\n\t\t            momentPropertiesLen = momentProperties.length;\n\n\t\t        if (!isUndefined(from._isAMomentObject)) {\n\t\t            to._isAMomentObject = from._isAMomentObject;\n\t\t        }\n\t\t        if (!isUndefined(from._i)) {\n\t\t            to._i = from._i;\n\t\t        }\n\t\t        if (!isUndefined(from._f)) {\n\t\t            to._f = from._f;\n\t\t        }\n\t\t        if (!isUndefined(from._l)) {\n\t\t            to._l = from._l;\n\t\t        }\n\t\t        if (!isUndefined(from._strict)) {\n\t\t            to._strict = from._strict;\n\t\t        }\n\t\t        if (!isUndefined(from._tzm)) {\n\t\t            to._tzm = from._tzm;\n\t\t        }\n\t\t        if (!isUndefined(from._isUTC)) {\n\t\t            to._isUTC = from._isUTC;\n\t\t        }\n\t\t        if (!isUndefined(from._offset)) {\n\t\t            to._offset = from._offset;\n\t\t        }\n\t\t        if (!isUndefined(from._pf)) {\n\t\t            to._pf = getParsingFlags(from);\n\t\t        }\n\t\t        if (!isUndefined(from._locale)) {\n\t\t            to._locale = from._locale;\n\t\t        }\n\n\t\t        if (momentPropertiesLen > 0) {\n\t\t            for (i = 0; i < momentPropertiesLen; i++) {\n\t\t                prop = momentProperties[i];\n\t\t                val = from[prop];\n\t\t                if (!isUndefined(val)) {\n\t\t                    to[prop] = val;\n\t\t                }\n\t\t            }\n\t\t        }\n\n\t\t        return to;\n\t\t    }\n\n\t\t    // Moment prototype object\n\t\t    function Moment(config) {\n\t\t        copyConfig(this, config);\n\t\t        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\t\t        if (!this.isValid()) {\n\t\t            this._d = new Date(NaN);\n\t\t        }\n\t\t        // Prevent infinite loop in case updateOffset creates new moment\n\t\t        // objects.\n\t\t        if (updateInProgress === false) {\n\t\t            updateInProgress = true;\n\t\t            hooks.updateOffset(this);\n\t\t            updateInProgress = false;\n\t\t        }\n\t\t    }\n\n\t\t    function isMoment(obj) {\n\t\t        return (\n\t\t            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n\t\t        );\n\t\t    }\n\n\t\t    function warn(msg) {\n\t\t        if (\n\t\t            hooks.suppressDeprecationWarnings === false &&\n\t\t            typeof console !== 'undefined' &&\n\t\t            console.warn\n\t\t        ) {\n\t\t            console.warn('Deprecation warning: ' + msg);\n\t\t        }\n\t\t    }\n\n\t\t    function deprecate(msg, fn) {\n\t\t        var firstTime = true;\n\n\t\t        return extend(function () {\n\t\t            if (hooks.deprecationHandler != null) {\n\t\t                hooks.deprecationHandler(null, msg);\n\t\t            }\n\t\t            if (firstTime) {\n\t\t                var args = [],\n\t\t                    arg,\n\t\t                    i,\n\t\t                    key,\n\t\t                    argLen = arguments.length;\n\t\t                for (i = 0; i < argLen; i++) {\n\t\t                    arg = '';\n\t\t                    if (typeof arguments[i] === 'object') {\n\t\t                        arg += '\\n[' + i + '] ';\n\t\t                        for (key in arguments[0]) {\n\t\t                            if (hasOwnProp(arguments[0], key)) {\n\t\t                                arg += key + ': ' + arguments[0][key] + ', ';\n\t\t                            }\n\t\t                        }\n\t\t                        arg = arg.slice(0, -2); // Remove trailing comma and space\n\t\t                    } else {\n\t\t                        arg = arguments[i];\n\t\t                    }\n\t\t                    args.push(arg);\n\t\t                }\n\t\t                warn(\n\t\t                    msg +\n\t\t                        '\\nArguments: ' +\n\t\t                        Array.prototype.slice.call(args).join('') +\n\t\t                        '\\n' +\n\t\t                        new Error().stack\n\t\t                );\n\t\t                firstTime = false;\n\t\t            }\n\t\t            return fn.apply(this, arguments);\n\t\t        }, fn);\n\t\t    }\n\n\t\t    var deprecations = {};\n\n\t\t    function deprecateSimple(name, msg) {\n\t\t        if (hooks.deprecationHandler != null) {\n\t\t            hooks.deprecationHandler(name, msg);\n\t\t        }\n\t\t        if (!deprecations[name]) {\n\t\t            warn(msg);\n\t\t            deprecations[name] = true;\n\t\t        }\n\t\t    }\n\n\t\t    hooks.suppressDeprecationWarnings = false;\n\t\t    hooks.deprecationHandler = null;\n\n\t\t    function isFunction(input) {\n\t\t        return (\n\t\t            (typeof Function !== 'undefined' && input instanceof Function) ||\n\t\t            Object.prototype.toString.call(input) === '[object Function]'\n\t\t        );\n\t\t    }\n\n\t\t    function set(config) {\n\t\t        var prop, i;\n\t\t        for (i in config) {\n\t\t            if (hasOwnProp(config, i)) {\n\t\t                prop = config[i];\n\t\t                if (isFunction(prop)) {\n\t\t                    this[i] = prop;\n\t\t                } else {\n\t\t                    this['_' + i] = prop;\n\t\t                }\n\t\t            }\n\t\t        }\n\t\t        this._config = config;\n\t\t        // Lenient ordinal parsing accepts just a number in addition to\n\t\t        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n\t\t        // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t\t        this._dayOfMonthOrdinalParseLenient = new RegExp(\n\t\t            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n\t\t                '|' +\n\t\t                /\\d{1,2}/.source\n\t\t        );\n\t\t    }\n\n\t\t    function mergeConfigs(parentConfig, childConfig) {\n\t\t        var res = extend({}, parentConfig),\n\t\t            prop;\n\t\t        for (prop in childConfig) {\n\t\t            if (hasOwnProp(childConfig, prop)) {\n\t\t                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n\t\t                    res[prop] = {};\n\t\t                    extend(res[prop], parentConfig[prop]);\n\t\t                    extend(res[prop], childConfig[prop]);\n\t\t                } else if (childConfig[prop] != null) {\n\t\t                    res[prop] = childConfig[prop];\n\t\t                } else {\n\t\t                    delete res[prop];\n\t\t                }\n\t\t            }\n\t\t        }\n\t\t        for (prop in parentConfig) {\n\t\t            if (\n\t\t                hasOwnProp(parentConfig, prop) &&\n\t\t                !hasOwnProp(childConfig, prop) &&\n\t\t                isObject(parentConfig[prop])\n\t\t            ) {\n\t\t                // make sure changes to properties don't modify parent config\n\t\t                res[prop] = extend({}, res[prop]);\n\t\t            }\n\t\t        }\n\t\t        return res;\n\t\t    }\n\n\t\t    function Locale(config) {\n\t\t        if (config != null) {\n\t\t            this.set(config);\n\t\t        }\n\t\t    }\n\n\t\t    var keys;\n\n\t\t    if (Object.keys) {\n\t\t        keys = Object.keys;\n\t\t    } else {\n\t\t        keys = function (obj) {\n\t\t            var i,\n\t\t                res = [];\n\t\t            for (i in obj) {\n\t\t                if (hasOwnProp(obj, i)) {\n\t\t                    res.push(i);\n\t\t                }\n\t\t            }\n\t\t            return res;\n\t\t        };\n\t\t    }\n\n\t\t    var defaultCalendar = {\n\t\t        sameDay: '[Today at] LT',\n\t\t        nextDay: '[Tomorrow at] LT',\n\t\t        nextWeek: 'dddd [at] LT',\n\t\t        lastDay: '[Yesterday at] LT',\n\t\t        lastWeek: '[Last] dddd [at] LT',\n\t\t        sameElse: 'L',\n\t\t    };\n\n\t\t    function calendar(key, mom, now) {\n\t\t        var output = this._calendar[key] || this._calendar['sameElse'];\n\t\t        return isFunction(output) ? output.call(mom, now) : output;\n\t\t    }\n\n\t\t    function zeroFill(number, targetLength, forceSign) {\n\t\t        var absNumber = '' + Math.abs(number),\n\t\t            zerosToFill = targetLength - absNumber.length,\n\t\t            sign = number >= 0;\n\t\t        return (\n\t\t            (sign ? (forceSign ? '+' : '') : '-') +\n\t\t            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n\t\t            absNumber\n\t\t        );\n\t\t    }\n\n\t\t    var formattingTokens =\n\t\t            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n\t\t        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n\t\t        formatFunctions = {},\n\t\t        formatTokenFunctions = {};\n\n\t\t    // token:    'M'\n\t\t    // padded:   ['MM', 2]\n\t\t    // ordinal:  'Mo'\n\t\t    // callback: function () { this.month() + 1 }\n\t\t    function addFormatToken(token, padded, ordinal, callback) {\n\t\t        var func = callback;\n\t\t        if (typeof callback === 'string') {\n\t\t            func = function () {\n\t\t                return this[callback]();\n\t\t            };\n\t\t        }\n\t\t        if (token) {\n\t\t            formatTokenFunctions[token] = func;\n\t\t        }\n\t\t        if (padded) {\n\t\t            formatTokenFunctions[padded[0]] = function () {\n\t\t                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n\t\t            };\n\t\t        }\n\t\t        if (ordinal) {\n\t\t            formatTokenFunctions[ordinal] = function () {\n\t\t                return this.localeData().ordinal(\n\t\t                    func.apply(this, arguments),\n\t\t                    token\n\t\t                );\n\t\t            };\n\t\t        }\n\t\t    }\n\n\t\t    function removeFormattingTokens(input) {\n\t\t        if (input.match(/\\[[\\s\\S]/)) {\n\t\t            return input.replace(/^\\[|\\]$/g, '');\n\t\t        }\n\t\t        return input.replace(/\\\\/g, '');\n\t\t    }\n\n\t\t    function makeFormatFunction(format) {\n\t\t        var array = format.match(formattingTokens),\n\t\t            i,\n\t\t            length;\n\n\t\t        for (i = 0, length = array.length; i < length; i++) {\n\t\t            if (formatTokenFunctions[array[i]]) {\n\t\t                array[i] = formatTokenFunctions[array[i]];\n\t\t            } else {\n\t\t                array[i] = removeFormattingTokens(array[i]);\n\t\t            }\n\t\t        }\n\n\t\t        return function (mom) {\n\t\t            var output = '',\n\t\t                i;\n\t\t            for (i = 0; i < length; i++) {\n\t\t                output += isFunction(array[i])\n\t\t                    ? array[i].call(mom, format)\n\t\t                    : array[i];\n\t\t            }\n\t\t            return output;\n\t\t        };\n\t\t    }\n\n\t\t    // format date using native date object\n\t\t    function formatMoment(m, format) {\n\t\t        if (!m.isValid()) {\n\t\t            return m.localeData().invalidDate();\n\t\t        }\n\n\t\t        format = expandFormat(format, m.localeData());\n\t\t        formatFunctions[format] =\n\t\t            formatFunctions[format] || makeFormatFunction(format);\n\n\t\t        return formatFunctions[format](m);\n\t\t    }\n\n\t\t    function expandFormat(format, locale) {\n\t\t        var i = 5;\n\n\t\t        function replaceLongDateFormatTokens(input) {\n\t\t            return locale.longDateFormat(input) || input;\n\t\t        }\n\n\t\t        localFormattingTokens.lastIndex = 0;\n\t\t        while (i >= 0 && localFormattingTokens.test(format)) {\n\t\t            format = format.replace(\n\t\t                localFormattingTokens,\n\t\t                replaceLongDateFormatTokens\n\t\t            );\n\t\t            localFormattingTokens.lastIndex = 0;\n\t\t            i -= 1;\n\t\t        }\n\n\t\t        return format;\n\t\t    }\n\n\t\t    var defaultLongDateFormat = {\n\t\t        LTS: 'h:mm:ss A',\n\t\t        LT: 'h:mm A',\n\t\t        L: 'MM/DD/YYYY',\n\t\t        LL: 'MMMM D, YYYY',\n\t\t        LLL: 'MMMM D, YYYY h:mm A',\n\t\t        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n\t\t    };\n\n\t\t    function longDateFormat(key) {\n\t\t        var format = this._longDateFormat[key],\n\t\t            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n\t\t        if (format || !formatUpper) {\n\t\t            return format;\n\t\t        }\n\n\t\t        this._longDateFormat[key] = formatUpper\n\t\t            .match(formattingTokens)\n\t\t            .map(function (tok) {\n\t\t                if (\n\t\t                    tok === 'MMMM' ||\n\t\t                    tok === 'MM' ||\n\t\t                    tok === 'DD' ||\n\t\t                    tok === 'dddd'\n\t\t                ) {\n\t\t                    return tok.slice(1);\n\t\t                }\n\t\t                return tok;\n\t\t            })\n\t\t            .join('');\n\n\t\t        return this._longDateFormat[key];\n\t\t    }\n\n\t\t    var defaultInvalidDate = 'Invalid date';\n\n\t\t    function invalidDate() {\n\t\t        return this._invalidDate;\n\t\t    }\n\n\t\t    var defaultOrdinal = '%d',\n\t\t        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n\t\t    function ordinal(number) {\n\t\t        return this._ordinal.replace('%d', number);\n\t\t    }\n\n\t\t    var defaultRelativeTime = {\n\t\t        future: 'in %s',\n\t\t        past: '%s ago',\n\t\t        s: 'a few seconds',\n\t\t        ss: '%d seconds',\n\t\t        m: 'a minute',\n\t\t        mm: '%d minutes',\n\t\t        h: 'an hour',\n\t\t        hh: '%d hours',\n\t\t        d: 'a day',\n\t\t        dd: '%d days',\n\t\t        w: 'a week',\n\t\t        ww: '%d weeks',\n\t\t        M: 'a month',\n\t\t        MM: '%d months',\n\t\t        y: 'a year',\n\t\t        yy: '%d years',\n\t\t    };\n\n\t\t    function relativeTime(number, withoutSuffix, string, isFuture) {\n\t\t        var output = this._relativeTime[string];\n\t\t        return isFunction(output)\n\t\t            ? output(number, withoutSuffix, string, isFuture)\n\t\t            : output.replace(/%d/i, number);\n\t\t    }\n\n\t\t    function pastFuture(diff, output) {\n\t\t        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n\t\t        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n\t\t    }\n\n\t\t    var aliases = {\n\t\t        D: 'date',\n\t\t        dates: 'date',\n\t\t        date: 'date',\n\t\t        d: 'day',\n\t\t        days: 'day',\n\t\t        day: 'day',\n\t\t        e: 'weekday',\n\t\t        weekdays: 'weekday',\n\t\t        weekday: 'weekday',\n\t\t        E: 'isoWeekday',\n\t\t        isoweekdays: 'isoWeekday',\n\t\t        isoweekday: 'isoWeekday',\n\t\t        DDD: 'dayOfYear',\n\t\t        dayofyears: 'dayOfYear',\n\t\t        dayofyear: 'dayOfYear',\n\t\t        h: 'hour',\n\t\t        hours: 'hour',\n\t\t        hour: 'hour',\n\t\t        ms: 'millisecond',\n\t\t        milliseconds: 'millisecond',\n\t\t        millisecond: 'millisecond',\n\t\t        m: 'minute',\n\t\t        minutes: 'minute',\n\t\t        minute: 'minute',\n\t\t        M: 'month',\n\t\t        months: 'month',\n\t\t        month: 'month',\n\t\t        Q: 'quarter',\n\t\t        quarters: 'quarter',\n\t\t        quarter: 'quarter',\n\t\t        s: 'second',\n\t\t        seconds: 'second',\n\t\t        second: 'second',\n\t\t        gg: 'weekYear',\n\t\t        weekyears: 'weekYear',\n\t\t        weekyear: 'weekYear',\n\t\t        GG: 'isoWeekYear',\n\t\t        isoweekyears: 'isoWeekYear',\n\t\t        isoweekyear: 'isoWeekYear',\n\t\t        w: 'week',\n\t\t        weeks: 'week',\n\t\t        week: 'week',\n\t\t        W: 'isoWeek',\n\t\t        isoweeks: 'isoWeek',\n\t\t        isoweek: 'isoWeek',\n\t\t        y: 'year',\n\t\t        years: 'year',\n\t\t        year: 'year',\n\t\t    };\n\n\t\t    function normalizeUnits(units) {\n\t\t        return typeof units === 'string'\n\t\t            ? aliases[units] || aliases[units.toLowerCase()]\n\t\t            : undefined;\n\t\t    }\n\n\t\t    function normalizeObjectUnits(inputObject) {\n\t\t        var normalizedInput = {},\n\t\t            normalizedProp,\n\t\t            prop;\n\n\t\t        for (prop in inputObject) {\n\t\t            if (hasOwnProp(inputObject, prop)) {\n\t\t                normalizedProp = normalizeUnits(prop);\n\t\t                if (normalizedProp) {\n\t\t                    normalizedInput[normalizedProp] = inputObject[prop];\n\t\t                }\n\t\t            }\n\t\t        }\n\n\t\t        return normalizedInput;\n\t\t    }\n\n\t\t    var priorities = {\n\t\t        date: 9,\n\t\t        day: 11,\n\t\t        weekday: 11,\n\t\t        isoWeekday: 11,\n\t\t        dayOfYear: 4,\n\t\t        hour: 13,\n\t\t        millisecond: 16,\n\t\t        minute: 14,\n\t\t        month: 8,\n\t\t        quarter: 7,\n\t\t        second: 15,\n\t\t        weekYear: 1,\n\t\t        isoWeekYear: 1,\n\t\t        week: 5,\n\t\t        isoWeek: 5,\n\t\t        year: 1,\n\t\t    };\n\n\t\t    function getPrioritizedUnits(unitsObj) {\n\t\t        var units = [],\n\t\t            u;\n\t\t        for (u in unitsObj) {\n\t\t            if (hasOwnProp(unitsObj, u)) {\n\t\t                units.push({ unit: u, priority: priorities[u] });\n\t\t            }\n\t\t        }\n\t\t        units.sort(function (a, b) {\n\t\t            return a.priority - b.priority;\n\t\t        });\n\t\t        return units;\n\t\t    }\n\n\t\t    var match1 = /\\d/, //       0 - 9\n\t\t        match2 = /\\d\\d/, //      00 - 99\n\t\t        match3 = /\\d{3}/, //     000 - 999\n\t\t        match4 = /\\d{4}/, //    0000 - 9999\n\t\t        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n\t\t        match1to2 = /\\d\\d?/, //       0 - 99\n\t\t        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n\t\t        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n\t\t        match1to3 = /\\d{1,3}/, //       0 - 999\n\t\t        match1to4 = /\\d{1,4}/, //       0 - 9999\n\t\t        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n\t\t        matchUnsigned = /\\d+/, //       0 - inf\n\t\t        matchSigned = /[+-]?\\d+/, //    -inf - inf\n\t\t        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n\t\t        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\t\t        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n\t\t        // any word (or two) characters or numbers including two/three word month in arabic.\n\t\t        // includes scottish gaelic two word and hyphenated months\n\t\t        matchWord =\n\t\t            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n\t\t        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n\t\t        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n\t\t        regexes;\n\n\t\t    regexes = {};\n\n\t\t    function addRegexToken(token, regex, strictRegex) {\n\t\t        regexes[token] = isFunction(regex)\n\t\t            ? regex\n\t\t            : function (isStrict, localeData) {\n\t\t                  return isStrict && strictRegex ? strictRegex : regex;\n\t\t              };\n\t\t    }\n\n\t\t    function getParseRegexForToken(token, config) {\n\t\t        if (!hasOwnProp(regexes, token)) {\n\t\t            return new RegExp(unescapeFormat(token));\n\t\t        }\n\n\t\t        return regexes[token](config._strict, config._locale);\n\t\t    }\n\n\t\t    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\t\t    function unescapeFormat(s) {\n\t\t        return regexEscape(\n\t\t            s\n\t\t                .replace('\\\\', '')\n\t\t                .replace(\n\t\t                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n\t\t                    function (matched, p1, p2, p3, p4) {\n\t\t                        return p1 || p2 || p3 || p4;\n\t\t                    }\n\t\t                )\n\t\t        );\n\t\t    }\n\n\t\t    function regexEscape(s) {\n\t\t        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t    }\n\n\t\t    function absFloor(number) {\n\t\t        if (number < 0) {\n\t\t            // -0 -> 0\n\t\t            return Math.ceil(number) || 0;\n\t\t        } else {\n\t\t            return Math.floor(number);\n\t\t        }\n\t\t    }\n\n\t\t    function toInt(argumentForCoercion) {\n\t\t        var coercedNumber = +argumentForCoercion,\n\t\t            value = 0;\n\n\t\t        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n\t\t            value = absFloor(coercedNumber);\n\t\t        }\n\n\t\t        return value;\n\t\t    }\n\n\t\t    var tokens = {};\n\n\t\t    function addParseToken(token, callback) {\n\t\t        var i,\n\t\t            func = callback,\n\t\t            tokenLen;\n\t\t        if (typeof token === 'string') {\n\t\t            token = [token];\n\t\t        }\n\t\t        if (isNumber(callback)) {\n\t\t            func = function (input, array) {\n\t\t                array[callback] = toInt(input);\n\t\t            };\n\t\t        }\n\t\t        tokenLen = token.length;\n\t\t        for (i = 0; i < tokenLen; i++) {\n\t\t            tokens[token[i]] = func;\n\t\t        }\n\t\t    }\n\n\t\t    function addWeekParseToken(token, callback) {\n\t\t        addParseToken(token, function (input, array, config, token) {\n\t\t            config._w = config._w || {};\n\t\t            callback(input, config._w, config, token);\n\t\t        });\n\t\t    }\n\n\t\t    function addTimeToArrayFromToken(token, input, config) {\n\t\t        if (input != null && hasOwnProp(tokens, token)) {\n\t\t            tokens[token](input, config._a, config, token);\n\t\t        }\n\t\t    }\n\n\t\t    function isLeapYear(year) {\n\t\t        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n\t\t    }\n\n\t\t    var YEAR = 0,\n\t\t        MONTH = 1,\n\t\t        DATE = 2,\n\t\t        HOUR = 3,\n\t\t        MINUTE = 4,\n\t\t        SECOND = 5,\n\t\t        MILLISECOND = 6,\n\t\t        WEEK = 7,\n\t\t        WEEKDAY = 8;\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('Y', 0, 0, function () {\n\t\t        var y = this.year();\n\t\t        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n\t\t    });\n\n\t\t    addFormatToken(0, ['YY', 2], 0, function () {\n\t\t        return this.year() % 100;\n\t\t    });\n\n\t\t    addFormatToken(0, ['YYYY', 4], 0, 'year');\n\t\t    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n\t\t    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('Y', matchSigned);\n\t\t    addRegexToken('YY', match1to2, match2);\n\t\t    addRegexToken('YYYY', match1to4, match4);\n\t\t    addRegexToken('YYYYY', match1to6, match6);\n\t\t    addRegexToken('YYYYYY', match1to6, match6);\n\n\t\t    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n\t\t    addParseToken('YYYY', function (input, array) {\n\t\t        array[YEAR] =\n\t\t            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n\t\t    });\n\t\t    addParseToken('YY', function (input, array) {\n\t\t        array[YEAR] = hooks.parseTwoDigitYear(input);\n\t\t    });\n\t\t    addParseToken('Y', function (input, array) {\n\t\t        array[YEAR] = parseInt(input, 10);\n\t\t    });\n\n\t\t    // HELPERS\n\n\t\t    function daysInYear(year) {\n\t\t        return isLeapYear(year) ? 366 : 365;\n\t\t    }\n\n\t\t    // HOOKS\n\n\t\t    hooks.parseTwoDigitYear = function (input) {\n\t\t        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n\t\t    };\n\n\t\t    // MOMENTS\n\n\t\t    var getSetYear = makeGetSet('FullYear', true);\n\n\t\t    function getIsLeapYear() {\n\t\t        return isLeapYear(this.year());\n\t\t    }\n\n\t\t    function makeGetSet(unit, keepTime) {\n\t\t        return function (value) {\n\t\t            if (value != null) {\n\t\t                set$1(this, unit, value);\n\t\t                hooks.updateOffset(this, keepTime);\n\t\t                return this;\n\t\t            } else {\n\t\t                return get(this, unit);\n\t\t            }\n\t\t        };\n\t\t    }\n\n\t\t    function get(mom, unit) {\n\t\t        if (!mom.isValid()) {\n\t\t            return NaN;\n\t\t        }\n\n\t\t        var d = mom._d,\n\t\t            isUTC = mom._isUTC;\n\n\t\t        switch (unit) {\n\t\t            case 'Milliseconds':\n\t\t                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n\t\t            case 'Seconds':\n\t\t                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n\t\t            case 'Minutes':\n\t\t                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n\t\t            case 'Hours':\n\t\t                return isUTC ? d.getUTCHours() : d.getHours();\n\t\t            case 'Date':\n\t\t                return isUTC ? d.getUTCDate() : d.getDate();\n\t\t            case 'Day':\n\t\t                return isUTC ? d.getUTCDay() : d.getDay();\n\t\t            case 'Month':\n\t\t                return isUTC ? d.getUTCMonth() : d.getMonth();\n\t\t            case 'FullYear':\n\t\t                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n\t\t            default:\n\t\t                return NaN; // Just in case\n\t\t        }\n\t\t    }\n\n\t\t    function set$1(mom, unit, value) {\n\t\t        var d, isUTC, year, month, date;\n\n\t\t        if (!mom.isValid() || isNaN(value)) {\n\t\t            return;\n\t\t        }\n\n\t\t        d = mom._d;\n\t\t        isUTC = mom._isUTC;\n\n\t\t        switch (unit) {\n\t\t            case 'Milliseconds':\n\t\t                return void (isUTC\n\t\t                    ? d.setUTCMilliseconds(value)\n\t\t                    : d.setMilliseconds(value));\n\t\t            case 'Seconds':\n\t\t                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n\t\t            case 'Minutes':\n\t\t                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n\t\t            case 'Hours':\n\t\t                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n\t\t            case 'Date':\n\t\t                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n\t\t            // case 'Day': // Not real\n\t\t            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n\t\t            // case 'Month': // Not used because we need to pass two variables\n\t\t            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n\t\t            case 'FullYear':\n\t\t                break; // See below ...\n\t\t            default:\n\t\t                return; // Just in case\n\t\t        }\n\n\t\t        year = value;\n\t\t        month = mom.month();\n\t\t        date = mom.date();\n\t\t        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n\t\t        void (isUTC\n\t\t            ? d.setUTCFullYear(year, month, date)\n\t\t            : d.setFullYear(year, month, date));\n\t\t    }\n\n\t\t    // MOMENTS\n\n\t\t    function stringGet(units) {\n\t\t        units = normalizeUnits(units);\n\t\t        if (isFunction(this[units])) {\n\t\t            return this[units]();\n\t\t        }\n\t\t        return this;\n\t\t    }\n\n\t\t    function stringSet(units, value) {\n\t\t        if (typeof units === 'object') {\n\t\t            units = normalizeObjectUnits(units);\n\t\t            var prioritized = getPrioritizedUnits(units),\n\t\t                i,\n\t\t                prioritizedLen = prioritized.length;\n\t\t            for (i = 0; i < prioritizedLen; i++) {\n\t\t                this[prioritized[i].unit](units[prioritized[i].unit]);\n\t\t            }\n\t\t        } else {\n\t\t            units = normalizeUnits(units);\n\t\t            if (isFunction(this[units])) {\n\t\t                return this[units](value);\n\t\t            }\n\t\t        }\n\t\t        return this;\n\t\t    }\n\n\t\t    function mod(n, x) {\n\t\t        return ((n % x) + x) % x;\n\t\t    }\n\n\t\t    var indexOf;\n\n\t\t    if (Array.prototype.indexOf) {\n\t\t        indexOf = Array.prototype.indexOf;\n\t\t    } else {\n\t\t        indexOf = function (o) {\n\t\t            // I know\n\t\t            var i;\n\t\t            for (i = 0; i < this.length; ++i) {\n\t\t                if (this[i] === o) {\n\t\t                    return i;\n\t\t                }\n\t\t            }\n\t\t            return -1;\n\t\t        };\n\t\t    }\n\n\t\t    function daysInMonth(year, month) {\n\t\t        if (isNaN(year) || isNaN(month)) {\n\t\t            return NaN;\n\t\t        }\n\t\t        var modMonth = mod(month, 12);\n\t\t        year += (month - modMonth) / 12;\n\t\t        return modMonth === 1\n\t\t            ? isLeapYear(year)\n\t\t                ? 29\n\t\t                : 28\n\t\t            : 31 - ((modMonth % 7) % 2);\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('M', ['MM', 2], 'Mo', function () {\n\t\t        return this.month() + 1;\n\t\t    });\n\n\t\t    addFormatToken('MMM', 0, 0, function (format) {\n\t\t        return this.localeData().monthsShort(this, format);\n\t\t    });\n\n\t\t    addFormatToken('MMMM', 0, 0, function (format) {\n\t\t        return this.localeData().months(this, format);\n\t\t    });\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('M', match1to2, match1to2NoLeadingZero);\n\t\t    addRegexToken('MM', match1to2, match2);\n\t\t    addRegexToken('MMM', function (isStrict, locale) {\n\t\t        return locale.monthsShortRegex(isStrict);\n\t\t    });\n\t\t    addRegexToken('MMMM', function (isStrict, locale) {\n\t\t        return locale.monthsRegex(isStrict);\n\t\t    });\n\n\t\t    addParseToken(['M', 'MM'], function (input, array) {\n\t\t        array[MONTH] = toInt(input) - 1;\n\t\t    });\n\n\t\t    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n\t\t        var month = config._locale.monthsParse(input, token, config._strict);\n\t\t        // if we didn't find a month name, mark the date as invalid.\n\t\t        if (month != null) {\n\t\t            array[MONTH] = month;\n\t\t        } else {\n\t\t            getParsingFlags(config).invalidMonth = input;\n\t\t        }\n\t\t    });\n\n\t\t    // LOCALES\n\n\t\t    var defaultLocaleMonths =\n\t\t            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n\t\t                '_'\n\t\t            ),\n\t\t        defaultLocaleMonthsShort =\n\t\t            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t\t        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n\t\t        defaultMonthsShortRegex = matchWord,\n\t\t        defaultMonthsRegex = matchWord;\n\n\t\t    function localeMonths(m, format) {\n\t\t        if (!m) {\n\t\t            return isArray(this._months)\n\t\t                ? this._months\n\t\t                : this._months['standalone'];\n\t\t        }\n\t\t        return isArray(this._months)\n\t\t            ? this._months[m.month()]\n\t\t            : this._months[\n\t\t                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n\t\t                      ? 'format'\n\t\t                      : 'standalone'\n\t\t              ][m.month()];\n\t\t    }\n\n\t\t    function localeMonthsShort(m, format) {\n\t\t        if (!m) {\n\t\t            return isArray(this._monthsShort)\n\t\t                ? this._monthsShort\n\t\t                : this._monthsShort['standalone'];\n\t\t        }\n\t\t        return isArray(this._monthsShort)\n\t\t            ? this._monthsShort[m.month()]\n\t\t            : this._monthsShort[\n\t\t                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n\t\t              ][m.month()];\n\t\t    }\n\n\t\t    function handleStrictParse(monthName, format, strict) {\n\t\t        var i,\n\t\t            ii,\n\t\t            mom,\n\t\t            llc = monthName.toLocaleLowerCase();\n\t\t        if (!this._monthsParse) {\n\t\t            // this is not used\n\t\t            this._monthsParse = [];\n\t\t            this._longMonthsParse = [];\n\t\t            this._shortMonthsParse = [];\n\t\t            for (i = 0; i < 12; ++i) {\n\t\t                mom = createUTC([2000, i]);\n\t\t                this._shortMonthsParse[i] = this.monthsShort(\n\t\t                    mom,\n\t\t                    ''\n\t\t                ).toLocaleLowerCase();\n\t\t                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n\t\t            }\n\t\t        }\n\n\t\t        if (strict) {\n\t\t            if (format === 'MMM') {\n\t\t                ii = indexOf.call(this._shortMonthsParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            } else {\n\t\t                ii = indexOf.call(this._longMonthsParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            }\n\t\t        } else {\n\t\t            if (format === 'MMM') {\n\t\t                ii = indexOf.call(this._shortMonthsParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._longMonthsParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            } else {\n\t\t                ii = indexOf.call(this._longMonthsParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._shortMonthsParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            }\n\t\t        }\n\t\t    }\n\n\t\t    function localeMonthsParse(monthName, format, strict) {\n\t\t        var i, mom, regex;\n\n\t\t        if (this._monthsParseExact) {\n\t\t            return handleStrictParse.call(this, monthName, format, strict);\n\t\t        }\n\n\t\t        if (!this._monthsParse) {\n\t\t            this._monthsParse = [];\n\t\t            this._longMonthsParse = [];\n\t\t            this._shortMonthsParse = [];\n\t\t        }\n\n\t\t        // TODO: add sorting\n\t\t        // Sorting makes sure if one month (or abbr) is a prefix of another\n\t\t        // see sorting in computeMonthsParse\n\t\t        for (i = 0; i < 12; i++) {\n\t\t            // make the regex if we don't have it already\n\t\t            mom = createUTC([2000, i]);\n\t\t            if (strict && !this._longMonthsParse[i]) {\n\t\t                this._longMonthsParse[i] = new RegExp(\n\t\t                    '^' + this.months(mom, '').replace('.', '') + '$',\n\t\t                    'i'\n\t\t                );\n\t\t                this._shortMonthsParse[i] = new RegExp(\n\t\t                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n\t\t                    'i'\n\t\t                );\n\t\t            }\n\t\t            if (!strict && !this._monthsParse[i]) {\n\t\t                regex =\n\t\t                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n\t\t                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t\t            }\n\t\t            // test the regex\n\t\t            if (\n\t\t                strict &&\n\t\t                format === 'MMMM' &&\n\t\t                this._longMonthsParse[i].test(monthName)\n\t\t            ) {\n\t\t                return i;\n\t\t            } else if (\n\t\t                strict &&\n\t\t                format === 'MMM' &&\n\t\t                this._shortMonthsParse[i].test(monthName)\n\t\t            ) {\n\t\t                return i;\n\t\t            } else if (!strict && this._monthsParse[i].test(monthName)) {\n\t\t                return i;\n\t\t            }\n\t\t        }\n\t\t    }\n\n\t\t    // MOMENTS\n\n\t\t    function setMonth(mom, value) {\n\t\t        if (!mom.isValid()) {\n\t\t            // No op\n\t\t            return mom;\n\t\t        }\n\n\t\t        if (typeof value === 'string') {\n\t\t            if (/^\\d+$/.test(value)) {\n\t\t                value = toInt(value);\n\t\t            } else {\n\t\t                value = mom.localeData().monthsParse(value);\n\t\t                // TODO: Another silent failure?\n\t\t                if (!isNumber(value)) {\n\t\t                    return mom;\n\t\t                }\n\t\t            }\n\t\t        }\n\n\t\t        var month = value,\n\t\t            date = mom.date();\n\n\t\t        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n\t\t        void (mom._isUTC\n\t\t            ? mom._d.setUTCMonth(month, date)\n\t\t            : mom._d.setMonth(month, date));\n\t\t        return mom;\n\t\t    }\n\n\t\t    function getSetMonth(value) {\n\t\t        if (value != null) {\n\t\t            setMonth(this, value);\n\t\t            hooks.updateOffset(this, true);\n\t\t            return this;\n\t\t        } else {\n\t\t            return get(this, 'Month');\n\t\t        }\n\t\t    }\n\n\t\t    function getDaysInMonth() {\n\t\t        return daysInMonth(this.year(), this.month());\n\t\t    }\n\n\t\t    function monthsShortRegex(isStrict) {\n\t\t        if (this._monthsParseExact) {\n\t\t            if (!hasOwnProp(this, '_monthsRegex')) {\n\t\t                computeMonthsParse.call(this);\n\t\t            }\n\t\t            if (isStrict) {\n\t\t                return this._monthsShortStrictRegex;\n\t\t            } else {\n\t\t                return this._monthsShortRegex;\n\t\t            }\n\t\t        } else {\n\t\t            if (!hasOwnProp(this, '_monthsShortRegex')) {\n\t\t                this._monthsShortRegex = defaultMonthsShortRegex;\n\t\t            }\n\t\t            return this._monthsShortStrictRegex && isStrict\n\t\t                ? this._monthsShortStrictRegex\n\t\t                : this._monthsShortRegex;\n\t\t        }\n\t\t    }\n\n\t\t    function monthsRegex(isStrict) {\n\t\t        if (this._monthsParseExact) {\n\t\t            if (!hasOwnProp(this, '_monthsRegex')) {\n\t\t                computeMonthsParse.call(this);\n\t\t            }\n\t\t            if (isStrict) {\n\t\t                return this._monthsStrictRegex;\n\t\t            } else {\n\t\t                return this._monthsRegex;\n\t\t            }\n\t\t        } else {\n\t\t            if (!hasOwnProp(this, '_monthsRegex')) {\n\t\t                this._monthsRegex = defaultMonthsRegex;\n\t\t            }\n\t\t            return this._monthsStrictRegex && isStrict\n\t\t                ? this._monthsStrictRegex\n\t\t                : this._monthsRegex;\n\t\t        }\n\t\t    }\n\n\t\t    function computeMonthsParse() {\n\t\t        function cmpLenRev(a, b) {\n\t\t            return b.length - a.length;\n\t\t        }\n\n\t\t        var shortPieces = [],\n\t\t            longPieces = [],\n\t\t            mixedPieces = [],\n\t\t            i,\n\t\t            mom,\n\t\t            shortP,\n\t\t            longP;\n\t\t        for (i = 0; i < 12; i++) {\n\t\t            // make the regex if we don't have it already\n\t\t            mom = createUTC([2000, i]);\n\t\t            shortP = regexEscape(this.monthsShort(mom, ''));\n\t\t            longP = regexEscape(this.months(mom, ''));\n\t\t            shortPieces.push(shortP);\n\t\t            longPieces.push(longP);\n\t\t            mixedPieces.push(longP);\n\t\t            mixedPieces.push(shortP);\n\t\t        }\n\t\t        // Sorting makes sure if one month (or abbr) is a prefix of another it\n\t\t        // will match the longer piece.\n\t\t        shortPieces.sort(cmpLenRev);\n\t\t        longPieces.sort(cmpLenRev);\n\t\t        mixedPieces.sort(cmpLenRev);\n\n\t\t        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t\t        this._monthsShortRegex = this._monthsRegex;\n\t\t        this._monthsStrictRegex = new RegExp(\n\t\t            '^(' + longPieces.join('|') + ')',\n\t\t            'i'\n\t\t        );\n\t\t        this._monthsShortStrictRegex = new RegExp(\n\t\t            '^(' + shortPieces.join('|') + ')',\n\t\t            'i'\n\t\t        );\n\t\t    }\n\n\t\t    function createDate(y, m, d, h, M, s, ms) {\n\t\t        // can't just apply() to create a date:\n\t\t        // https://stackoverflow.com/q/181348\n\t\t        var date;\n\t\t        // the date constructor remaps years 0-99 to 1900-1999\n\t\t        if (y < 100 && y >= 0) {\n\t\t            // preserve leap years using a full 400 year cycle, then reset\n\t\t            date = new Date(y + 400, m, d, h, M, s, ms);\n\t\t            if (isFinite(date.getFullYear())) {\n\t\t                date.setFullYear(y);\n\t\t            }\n\t\t        } else {\n\t\t            date = new Date(y, m, d, h, M, s, ms);\n\t\t        }\n\n\t\t        return date;\n\t\t    }\n\n\t\t    function createUTCDate(y) {\n\t\t        var date, args;\n\t\t        // the Date.UTC function remaps years 0-99 to 1900-1999\n\t\t        if (y < 100 && y >= 0) {\n\t\t            args = Array.prototype.slice.call(arguments);\n\t\t            // preserve leap years using a full 400 year cycle, then reset\n\t\t            args[0] = y + 400;\n\t\t            date = new Date(Date.UTC.apply(null, args));\n\t\t            if (isFinite(date.getUTCFullYear())) {\n\t\t                date.setUTCFullYear(y);\n\t\t            }\n\t\t        } else {\n\t\t            date = new Date(Date.UTC.apply(null, arguments));\n\t\t        }\n\n\t\t        return date;\n\t\t    }\n\n\t\t    // start-of-first-week - start-of-year\n\t\t    function firstWeekOffset(year, dow, doy) {\n\t\t        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n\t\t            fwd = 7 + dow - doy,\n\t\t            // first-week day local weekday -- which local weekday is fwd\n\t\t            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n\t\t        return -fwdlw + fwd - 1;\n\t\t    }\n\n\t\t    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\t\t    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n\t\t        var localWeekday = (7 + weekday - dow) % 7,\n\t\t            weekOffset = firstWeekOffset(year, dow, doy),\n\t\t            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n\t\t            resYear,\n\t\t            resDayOfYear;\n\n\t\t        if (dayOfYear <= 0) {\n\t\t            resYear = year - 1;\n\t\t            resDayOfYear = daysInYear(resYear) + dayOfYear;\n\t\t        } else if (dayOfYear > daysInYear(year)) {\n\t\t            resYear = year + 1;\n\t\t            resDayOfYear = dayOfYear - daysInYear(year);\n\t\t        } else {\n\t\t            resYear = year;\n\t\t            resDayOfYear = dayOfYear;\n\t\t        }\n\n\t\t        return {\n\t\t            year: resYear,\n\t\t            dayOfYear: resDayOfYear,\n\t\t        };\n\t\t    }\n\n\t\t    function weekOfYear(mom, dow, doy) {\n\t\t        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n\t\t            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n\t\t            resWeek,\n\t\t            resYear;\n\n\t\t        if (week < 1) {\n\t\t            resYear = mom.year() - 1;\n\t\t            resWeek = week + weeksInYear(resYear, dow, doy);\n\t\t        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n\t\t            resWeek = week - weeksInYear(mom.year(), dow, doy);\n\t\t            resYear = mom.year() + 1;\n\t\t        } else {\n\t\t            resYear = mom.year();\n\t\t            resWeek = week;\n\t\t        }\n\n\t\t        return {\n\t\t            week: resWeek,\n\t\t            year: resYear,\n\t\t        };\n\t\t    }\n\n\t\t    function weeksInYear(year, dow, doy) {\n\t\t        var weekOffset = firstWeekOffset(year, dow, doy),\n\t\t            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n\t\t        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('w', ['ww', 2], 'wo', 'week');\n\t\t    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n\t\t    addRegexToken('ww', match1to2, match2);\n\t\t    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n\t\t    addRegexToken('WW', match1to2, match2);\n\n\t\t    addWeekParseToken(\n\t\t        ['w', 'ww', 'W', 'WW'],\n\t\t        function (input, week, config, token) {\n\t\t            week[token.substr(0, 1)] = toInt(input);\n\t\t        }\n\t\t    );\n\n\t\t    // HELPERS\n\n\t\t    // LOCALES\n\n\t\t    function localeWeek(mom) {\n\t\t        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n\t\t    }\n\n\t\t    var defaultLocaleWeek = {\n\t\t        dow: 0, // Sunday is the first day of the week.\n\t\t        doy: 6, // The week that contains Jan 6th is the first week of the year.\n\t\t    };\n\n\t\t    function localeFirstDayOfWeek() {\n\t\t        return this._week.dow;\n\t\t    }\n\n\t\t    function localeFirstDayOfYear() {\n\t\t        return this._week.doy;\n\t\t    }\n\n\t\t    // MOMENTS\n\n\t\t    function getSetWeek(input) {\n\t\t        var week = this.localeData().week(this);\n\t\t        return input == null ? week : this.add((input - week) * 7, 'd');\n\t\t    }\n\n\t\t    function getSetISOWeek(input) {\n\t\t        var week = weekOfYear(this, 1, 4).week;\n\t\t        return input == null ? week : this.add((input - week) * 7, 'd');\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('d', 0, 'do', 'day');\n\n\t\t    addFormatToken('dd', 0, 0, function (format) {\n\t\t        return this.localeData().weekdaysMin(this, format);\n\t\t    });\n\n\t\t    addFormatToken('ddd', 0, 0, function (format) {\n\t\t        return this.localeData().weekdaysShort(this, format);\n\t\t    });\n\n\t\t    addFormatToken('dddd', 0, 0, function (format) {\n\t\t        return this.localeData().weekdays(this, format);\n\t\t    });\n\n\t\t    addFormatToken('e', 0, 0, 'weekday');\n\t\t    addFormatToken('E', 0, 0, 'isoWeekday');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('d', match1to2);\n\t\t    addRegexToken('e', match1to2);\n\t\t    addRegexToken('E', match1to2);\n\t\t    addRegexToken('dd', function (isStrict, locale) {\n\t\t        return locale.weekdaysMinRegex(isStrict);\n\t\t    });\n\t\t    addRegexToken('ddd', function (isStrict, locale) {\n\t\t        return locale.weekdaysShortRegex(isStrict);\n\t\t    });\n\t\t    addRegexToken('dddd', function (isStrict, locale) {\n\t\t        return locale.weekdaysRegex(isStrict);\n\t\t    });\n\n\t\t    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n\t\t        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n\t\t        // if we didn't get a weekday name, mark the date as invalid\n\t\t        if (weekday != null) {\n\t\t            week.d = weekday;\n\t\t        } else {\n\t\t            getParsingFlags(config).invalidWeekday = input;\n\t\t        }\n\t\t    });\n\n\t\t    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n\t\t        week[token] = toInt(input);\n\t\t    });\n\n\t\t    // HELPERS\n\n\t\t    function parseWeekday(input, locale) {\n\t\t        if (typeof input !== 'string') {\n\t\t            return input;\n\t\t        }\n\n\t\t        if (!isNaN(input)) {\n\t\t            return parseInt(input, 10);\n\t\t        }\n\n\t\t        input = locale.weekdaysParse(input);\n\t\t        if (typeof input === 'number') {\n\t\t            return input;\n\t\t        }\n\n\t\t        return null;\n\t\t    }\n\n\t\t    function parseIsoWeekday(input, locale) {\n\t\t        if (typeof input === 'string') {\n\t\t            return locale.weekdaysParse(input) % 7 || 7;\n\t\t        }\n\t\t        return isNaN(input) ? null : input;\n\t\t    }\n\n\t\t    // LOCALES\n\t\t    function shiftWeekdays(ws, n) {\n\t\t        return ws.slice(n, 7).concat(ws.slice(0, n));\n\t\t    }\n\n\t\t    var defaultLocaleWeekdays =\n\t\t            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t\t        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t\t        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t\t        defaultWeekdaysRegex = matchWord,\n\t\t        defaultWeekdaysShortRegex = matchWord,\n\t\t        defaultWeekdaysMinRegex = matchWord;\n\n\t\t    function localeWeekdays(m, format) {\n\t\t        var weekdays = isArray(this._weekdays)\n\t\t            ? this._weekdays\n\t\t            : this._weekdays[\n\t\t                  m && m !== true && this._weekdays.isFormat.test(format)\n\t\t                      ? 'format'\n\t\t                      : 'standalone'\n\t\t              ];\n\t\t        return m === true\n\t\t            ? shiftWeekdays(weekdays, this._week.dow)\n\t\t            : m\n\t\t              ? weekdays[m.day()]\n\t\t              : weekdays;\n\t\t    }\n\n\t\t    function localeWeekdaysShort(m) {\n\t\t        return m === true\n\t\t            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n\t\t            : m\n\t\t              ? this._weekdaysShort[m.day()]\n\t\t              : this._weekdaysShort;\n\t\t    }\n\n\t\t    function localeWeekdaysMin(m) {\n\t\t        return m === true\n\t\t            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n\t\t            : m\n\t\t              ? this._weekdaysMin[m.day()]\n\t\t              : this._weekdaysMin;\n\t\t    }\n\n\t\t    function handleStrictParse$1(weekdayName, format, strict) {\n\t\t        var i,\n\t\t            ii,\n\t\t            mom,\n\t\t            llc = weekdayName.toLocaleLowerCase();\n\t\t        if (!this._weekdaysParse) {\n\t\t            this._weekdaysParse = [];\n\t\t            this._shortWeekdaysParse = [];\n\t\t            this._minWeekdaysParse = [];\n\n\t\t            for (i = 0; i < 7; ++i) {\n\t\t                mom = createUTC([2000, 1]).day(i);\n\t\t                this._minWeekdaysParse[i] = this.weekdaysMin(\n\t\t                    mom,\n\t\t                    ''\n\t\t                ).toLocaleLowerCase();\n\t\t                this._shortWeekdaysParse[i] = this.weekdaysShort(\n\t\t                    mom,\n\t\t                    ''\n\t\t                ).toLocaleLowerCase();\n\t\t                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n\t\t            }\n\t\t        }\n\n\t\t        if (strict) {\n\t\t            if (format === 'dddd') {\n\t\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            } else if (format === 'ddd') {\n\t\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            } else {\n\t\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            }\n\t\t        } else {\n\t\t            if (format === 'dddd') {\n\t\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            } else if (format === 'ddd') {\n\t\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            } else {\n\t\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t\t                if (ii !== -1) {\n\t\t                    return ii;\n\t\t                }\n\t\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t\t                return ii !== -1 ? ii : null;\n\t\t            }\n\t\t        }\n\t\t    }\n\n\t\t    function localeWeekdaysParse(weekdayName, format, strict) {\n\t\t        var i, mom, regex;\n\n\t\t        if (this._weekdaysParseExact) {\n\t\t            return handleStrictParse$1.call(this, weekdayName, format, strict);\n\t\t        }\n\n\t\t        if (!this._weekdaysParse) {\n\t\t            this._weekdaysParse = [];\n\t\t            this._minWeekdaysParse = [];\n\t\t            this._shortWeekdaysParse = [];\n\t\t            this._fullWeekdaysParse = [];\n\t\t        }\n\n\t\t        for (i = 0; i < 7; i++) {\n\t\t            // make the regex if we don't have it already\n\n\t\t            mom = createUTC([2000, 1]).day(i);\n\t\t            if (strict && !this._fullWeekdaysParse[i]) {\n\t\t                this._fullWeekdaysParse[i] = new RegExp(\n\t\t                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n\t\t                    'i'\n\t\t                );\n\t\t                this._shortWeekdaysParse[i] = new RegExp(\n\t\t                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n\t\t                    'i'\n\t\t                );\n\t\t                this._minWeekdaysParse[i] = new RegExp(\n\t\t                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n\t\t                    'i'\n\t\t                );\n\t\t            }\n\t\t            if (!this._weekdaysParse[i]) {\n\t\t                regex =\n\t\t                    '^' +\n\t\t                    this.weekdays(mom, '') +\n\t\t                    '|^' +\n\t\t                    this.weekdaysShort(mom, '') +\n\t\t                    '|^' +\n\t\t                    this.weekdaysMin(mom, '');\n\t\t                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t\t            }\n\t\t            // test the regex\n\t\t            if (\n\t\t                strict &&\n\t\t                format === 'dddd' &&\n\t\t                this._fullWeekdaysParse[i].test(weekdayName)\n\t\t            ) {\n\t\t                return i;\n\t\t            } else if (\n\t\t                strict &&\n\t\t                format === 'ddd' &&\n\t\t                this._shortWeekdaysParse[i].test(weekdayName)\n\t\t            ) {\n\t\t                return i;\n\t\t            } else if (\n\t\t                strict &&\n\t\t                format === 'dd' &&\n\t\t                this._minWeekdaysParse[i].test(weekdayName)\n\t\t            ) {\n\t\t                return i;\n\t\t            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n\t\t                return i;\n\t\t            }\n\t\t        }\n\t\t    }\n\n\t\t    // MOMENTS\n\n\t\t    function getSetDayOfWeek(input) {\n\t\t        if (!this.isValid()) {\n\t\t            return input != null ? this : NaN;\n\t\t        }\n\n\t\t        var day = get(this, 'Day');\n\t\t        if (input != null) {\n\t\t            input = parseWeekday(input, this.localeData());\n\t\t            return this.add(input - day, 'd');\n\t\t        } else {\n\t\t            return day;\n\t\t        }\n\t\t    }\n\n\t\t    function getSetLocaleDayOfWeek(input) {\n\t\t        if (!this.isValid()) {\n\t\t            return input != null ? this : NaN;\n\t\t        }\n\t\t        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n\t\t        return input == null ? weekday : this.add(input - weekday, 'd');\n\t\t    }\n\n\t\t    function getSetISODayOfWeek(input) {\n\t\t        if (!this.isValid()) {\n\t\t            return input != null ? this : NaN;\n\t\t        }\n\n\t\t        // behaves the same as moment#day except\n\t\t        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n\t\t        // as a setter, sunday should belong to the previous week.\n\n\t\t        if (input != null) {\n\t\t            var weekday = parseIsoWeekday(input, this.localeData());\n\t\t            return this.day(this.day() % 7 ? weekday : weekday - 7);\n\t\t        } else {\n\t\t            return this.day() || 7;\n\t\t        }\n\t\t    }\n\n\t\t    function weekdaysRegex(isStrict) {\n\t\t        if (this._weekdaysParseExact) {\n\t\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t\t                computeWeekdaysParse.call(this);\n\t\t            }\n\t\t            if (isStrict) {\n\t\t                return this._weekdaysStrictRegex;\n\t\t            } else {\n\t\t                return this._weekdaysRegex;\n\t\t            }\n\t\t        } else {\n\t\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t\t                this._weekdaysRegex = defaultWeekdaysRegex;\n\t\t            }\n\t\t            return this._weekdaysStrictRegex && isStrict\n\t\t                ? this._weekdaysStrictRegex\n\t\t                : this._weekdaysRegex;\n\t\t        }\n\t\t    }\n\n\t\t    function weekdaysShortRegex(isStrict) {\n\t\t        if (this._weekdaysParseExact) {\n\t\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t\t                computeWeekdaysParse.call(this);\n\t\t            }\n\t\t            if (isStrict) {\n\t\t                return this._weekdaysShortStrictRegex;\n\t\t            } else {\n\t\t                return this._weekdaysShortRegex;\n\t\t            }\n\t\t        } else {\n\t\t            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n\t\t                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n\t\t            }\n\t\t            return this._weekdaysShortStrictRegex && isStrict\n\t\t                ? this._weekdaysShortStrictRegex\n\t\t                : this._weekdaysShortRegex;\n\t\t        }\n\t\t    }\n\n\t\t    function weekdaysMinRegex(isStrict) {\n\t\t        if (this._weekdaysParseExact) {\n\t\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t\t                computeWeekdaysParse.call(this);\n\t\t            }\n\t\t            if (isStrict) {\n\t\t                return this._weekdaysMinStrictRegex;\n\t\t            } else {\n\t\t                return this._weekdaysMinRegex;\n\t\t            }\n\t\t        } else {\n\t\t            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n\t\t                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n\t\t            }\n\t\t            return this._weekdaysMinStrictRegex && isStrict\n\t\t                ? this._weekdaysMinStrictRegex\n\t\t                : this._weekdaysMinRegex;\n\t\t        }\n\t\t    }\n\n\t\t    function computeWeekdaysParse() {\n\t\t        function cmpLenRev(a, b) {\n\t\t            return b.length - a.length;\n\t\t        }\n\n\t\t        var minPieces = [],\n\t\t            shortPieces = [],\n\t\t            longPieces = [],\n\t\t            mixedPieces = [],\n\t\t            i,\n\t\t            mom,\n\t\t            minp,\n\t\t            shortp,\n\t\t            longp;\n\t\t        for (i = 0; i < 7; i++) {\n\t\t            // make the regex if we don't have it already\n\t\t            mom = createUTC([2000, 1]).day(i);\n\t\t            minp = regexEscape(this.weekdaysMin(mom, ''));\n\t\t            shortp = regexEscape(this.weekdaysShort(mom, ''));\n\t\t            longp = regexEscape(this.weekdays(mom, ''));\n\t\t            minPieces.push(minp);\n\t\t            shortPieces.push(shortp);\n\t\t            longPieces.push(longp);\n\t\t            mixedPieces.push(minp);\n\t\t            mixedPieces.push(shortp);\n\t\t            mixedPieces.push(longp);\n\t\t        }\n\t\t        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n\t\t        // will match the longer piece.\n\t\t        minPieces.sort(cmpLenRev);\n\t\t        shortPieces.sort(cmpLenRev);\n\t\t        longPieces.sort(cmpLenRev);\n\t\t        mixedPieces.sort(cmpLenRev);\n\n\t\t        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t\t        this._weekdaysShortRegex = this._weekdaysRegex;\n\t\t        this._weekdaysMinRegex = this._weekdaysRegex;\n\n\t\t        this._weekdaysStrictRegex = new RegExp(\n\t\t            '^(' + longPieces.join('|') + ')',\n\t\t            'i'\n\t\t        );\n\t\t        this._weekdaysShortStrictRegex = new RegExp(\n\t\t            '^(' + shortPieces.join('|') + ')',\n\t\t            'i'\n\t\t        );\n\t\t        this._weekdaysMinStrictRegex = new RegExp(\n\t\t            '^(' + minPieces.join('|') + ')',\n\t\t            'i'\n\t\t        );\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    function hFormat() {\n\t\t        return this.hours() % 12 || 12;\n\t\t    }\n\n\t\t    function kFormat() {\n\t\t        return this.hours() || 24;\n\t\t    }\n\n\t\t    addFormatToken('H', ['HH', 2], 0, 'hour');\n\t\t    addFormatToken('h', ['hh', 2], 0, hFormat);\n\t\t    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n\t\t    addFormatToken('hmm', 0, 0, function () {\n\t\t        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n\t\t    });\n\n\t\t    addFormatToken('hmmss', 0, 0, function () {\n\t\t        return (\n\t\t            '' +\n\t\t            hFormat.apply(this) +\n\t\t            zeroFill(this.minutes(), 2) +\n\t\t            zeroFill(this.seconds(), 2)\n\t\t        );\n\t\t    });\n\n\t\t    addFormatToken('Hmm', 0, 0, function () {\n\t\t        return '' + this.hours() + zeroFill(this.minutes(), 2);\n\t\t    });\n\n\t\t    addFormatToken('Hmmss', 0, 0, function () {\n\t\t        return (\n\t\t            '' +\n\t\t            this.hours() +\n\t\t            zeroFill(this.minutes(), 2) +\n\t\t            zeroFill(this.seconds(), 2)\n\t\t        );\n\t\t    });\n\n\t\t    function meridiem(token, lowercase) {\n\t\t        addFormatToken(token, 0, 0, function () {\n\t\t            return this.localeData().meridiem(\n\t\t                this.hours(),\n\t\t                this.minutes(),\n\t\t                lowercase\n\t\t            );\n\t\t        });\n\t\t    }\n\n\t\t    meridiem('a', true);\n\t\t    meridiem('A', false);\n\n\t\t    // PARSING\n\n\t\t    function matchMeridiem(isStrict, locale) {\n\t\t        return locale._meridiemParse;\n\t\t    }\n\n\t\t    addRegexToken('a', matchMeridiem);\n\t\t    addRegexToken('A', matchMeridiem);\n\t\t    addRegexToken('H', match1to2, match1to2HasZero);\n\t\t    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n\t\t    addRegexToken('k', match1to2, match1to2NoLeadingZero);\n\t\t    addRegexToken('HH', match1to2, match2);\n\t\t    addRegexToken('hh', match1to2, match2);\n\t\t    addRegexToken('kk', match1to2, match2);\n\n\t\t    addRegexToken('hmm', match3to4);\n\t\t    addRegexToken('hmmss', match5to6);\n\t\t    addRegexToken('Hmm', match3to4);\n\t\t    addRegexToken('Hmmss', match5to6);\n\n\t\t    addParseToken(['H', 'HH'], HOUR);\n\t\t    addParseToken(['k', 'kk'], function (input, array, config) {\n\t\t        var kInput = toInt(input);\n\t\t        array[HOUR] = kInput === 24 ? 0 : kInput;\n\t\t    });\n\t\t    addParseToken(['a', 'A'], function (input, array, config) {\n\t\t        config._isPm = config._locale.isPM(input);\n\t\t        config._meridiem = input;\n\t\t    });\n\t\t    addParseToken(['h', 'hh'], function (input, array, config) {\n\t\t        array[HOUR] = toInt(input);\n\t\t        getParsingFlags(config).bigHour = true;\n\t\t    });\n\t\t    addParseToken('hmm', function (input, array, config) {\n\t\t        var pos = input.length - 2;\n\t\t        array[HOUR] = toInt(input.substr(0, pos));\n\t\t        array[MINUTE] = toInt(input.substr(pos));\n\t\t        getParsingFlags(config).bigHour = true;\n\t\t    });\n\t\t    addParseToken('hmmss', function (input, array, config) {\n\t\t        var pos1 = input.length - 4,\n\t\t            pos2 = input.length - 2;\n\t\t        array[HOUR] = toInt(input.substr(0, pos1));\n\t\t        array[MINUTE] = toInt(input.substr(pos1, 2));\n\t\t        array[SECOND] = toInt(input.substr(pos2));\n\t\t        getParsingFlags(config).bigHour = true;\n\t\t    });\n\t\t    addParseToken('Hmm', function (input, array, config) {\n\t\t        var pos = input.length - 2;\n\t\t        array[HOUR] = toInt(input.substr(0, pos));\n\t\t        array[MINUTE] = toInt(input.substr(pos));\n\t\t    });\n\t\t    addParseToken('Hmmss', function (input, array, config) {\n\t\t        var pos1 = input.length - 4,\n\t\t            pos2 = input.length - 2;\n\t\t        array[HOUR] = toInt(input.substr(0, pos1));\n\t\t        array[MINUTE] = toInt(input.substr(pos1, 2));\n\t\t        array[SECOND] = toInt(input.substr(pos2));\n\t\t    });\n\n\t\t    // LOCALES\n\n\t\t    function localeIsPM(input) {\n\t\t        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n\t\t        // Using charAt should be more compatible.\n\t\t        return (input + '').toLowerCase().charAt(0) === 'p';\n\t\t    }\n\n\t\t    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n\t\t        // Setting the hour should keep the time, because the user explicitly\n\t\t        // specified which hour they want. So trying to maintain the same hour (in\n\t\t        // a new timezone) makes sense. Adding/subtracting hours does not follow\n\t\t        // this rule.\n\t\t        getSetHour = makeGetSet('Hours', true);\n\n\t\t    function localeMeridiem(hours, minutes, isLower) {\n\t\t        if (hours > 11) {\n\t\t            return isLower ? 'pm' : 'PM';\n\t\t        } else {\n\t\t            return isLower ? 'am' : 'AM';\n\t\t        }\n\t\t    }\n\n\t\t    var baseConfig = {\n\t\t        calendar: defaultCalendar,\n\t\t        longDateFormat: defaultLongDateFormat,\n\t\t        invalidDate: defaultInvalidDate,\n\t\t        ordinal: defaultOrdinal,\n\t\t        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n\t\t        relativeTime: defaultRelativeTime,\n\n\t\t        months: defaultLocaleMonths,\n\t\t        monthsShort: defaultLocaleMonthsShort,\n\n\t\t        week: defaultLocaleWeek,\n\n\t\t        weekdays: defaultLocaleWeekdays,\n\t\t        weekdaysMin: defaultLocaleWeekdaysMin,\n\t\t        weekdaysShort: defaultLocaleWeekdaysShort,\n\n\t\t        meridiemParse: defaultLocaleMeridiemParse,\n\t\t    };\n\n\t\t    // internal storage for locale config files\n\t\t    var locales = {},\n\t\t        localeFamilies = {},\n\t\t        globalLocale;\n\n\t\t    function commonPrefix(arr1, arr2) {\n\t\t        var i,\n\t\t            minl = Math.min(arr1.length, arr2.length);\n\t\t        for (i = 0; i < minl; i += 1) {\n\t\t            if (arr1[i] !== arr2[i]) {\n\t\t                return i;\n\t\t            }\n\t\t        }\n\t\t        return minl;\n\t\t    }\n\n\t\t    function normalizeLocale(key) {\n\t\t        return key ? key.toLowerCase().replace('_', '-') : key;\n\t\t    }\n\n\t\t    // pick the locale from the array\n\t\t    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n\t\t    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\t\t    function chooseLocale(names) {\n\t\t        var i = 0,\n\t\t            j,\n\t\t            next,\n\t\t            locale,\n\t\t            split;\n\n\t\t        while (i < names.length) {\n\t\t            split = normalizeLocale(names[i]).split('-');\n\t\t            j = split.length;\n\t\t            next = normalizeLocale(names[i + 1]);\n\t\t            next = next ? next.split('-') : null;\n\t\t            while (j > 0) {\n\t\t                locale = loadLocale(split.slice(0, j).join('-'));\n\t\t                if (locale) {\n\t\t                    return locale;\n\t\t                }\n\t\t                if (\n\t\t                    next &&\n\t\t                    next.length >= j &&\n\t\t                    commonPrefix(split, next) >= j - 1\n\t\t                ) {\n\t\t                    //the next array item is better than a shallower substring of this one\n\t\t                    break;\n\t\t                }\n\t\t                j--;\n\t\t            }\n\t\t            i++;\n\t\t        }\n\t\t        return globalLocale;\n\t\t    }\n\n\t\t    function isLocaleNameSane(name) {\n\t\t        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n\t\t        // Ensure name is available and function returns boolean\n\t\t        return !!(name && name.match('^[^/\\\\\\\\]*$'));\n\t\t    }\n\n\t\t    function loadLocale(name) {\n\t\t        var oldLocale = null,\n\t\t            aliasedRequire;\n\t\t        // TODO: Find a better way to register and load all the locales in Node\n\t\t        if (\n\t\t            locales[name] === undefined &&\n\t\t            'object' !== 'undefined' &&\n\t\t            module &&\n\t\t            module.exports &&\n\t\t            isLocaleNameSane(name)\n\t\t        ) {\n\t\t            try {\n\t\t                oldLocale = globalLocale._abbr;\n\t\t                aliasedRequire = commonjsRequire;\n\t\t                aliasedRequire('./locale/' + name);\n\t\t                getSetGlobalLocale(oldLocale);\n\t\t            } catch (e) {\n\t\t                // mark as not found to avoid repeating expensive file require call causing high CPU\n\t\t                // when trying to find en-US, en_US, en-us for every format call\n\t\t                locales[name] = null; // null means not found\n\t\t            }\n\t\t        }\n\t\t        return locales[name];\n\t\t    }\n\n\t\t    // This function will load locale and then set the global locale.  If\n\t\t    // no arguments are passed in, it will simply return the current global\n\t\t    // locale key.\n\t\t    function getSetGlobalLocale(key, values) {\n\t\t        var data;\n\t\t        if (key) {\n\t\t            if (isUndefined(values)) {\n\t\t                data = getLocale(key);\n\t\t            } else {\n\t\t                data = defineLocale(key, values);\n\t\t            }\n\n\t\t            if (data) {\n\t\t                // moment.duration._locale = moment._locale = data;\n\t\t                globalLocale = data;\n\t\t            } else {\n\t\t                if (typeof console !== 'undefined' && console.warn) {\n\t\t                    //warn user if arguments are passed but the locale could not be set\n\t\t                    console.warn(\n\t\t                        'Locale ' + key + ' not found. Did you forget to load it?'\n\t\t                    );\n\t\t                }\n\t\t            }\n\t\t        }\n\n\t\t        return globalLocale._abbr;\n\t\t    }\n\n\t\t    function defineLocale(name, config) {\n\t\t        if (config !== null) {\n\t\t            var locale,\n\t\t                parentConfig = baseConfig;\n\t\t            config.abbr = name;\n\t\t            if (locales[name] != null) {\n\t\t                deprecateSimple(\n\t\t                    'defineLocaleOverride',\n\t\t                    'use moment.updateLocale(localeName, config) to change ' +\n\t\t                        'an existing locale. moment.defineLocale(localeName, ' +\n\t\t                        'config) should only be used for creating a new locale ' +\n\t\t                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n\t\t                );\n\t\t                parentConfig = locales[name]._config;\n\t\t            } else if (config.parentLocale != null) {\n\t\t                if (locales[config.parentLocale] != null) {\n\t\t                    parentConfig = locales[config.parentLocale]._config;\n\t\t                } else {\n\t\t                    locale = loadLocale(config.parentLocale);\n\t\t                    if (locale != null) {\n\t\t                        parentConfig = locale._config;\n\t\t                    } else {\n\t\t                        if (!localeFamilies[config.parentLocale]) {\n\t\t                            localeFamilies[config.parentLocale] = [];\n\t\t                        }\n\t\t                        localeFamilies[config.parentLocale].push({\n\t\t                            name: name,\n\t\t                            config: config,\n\t\t                        });\n\t\t                        return null;\n\t\t                    }\n\t\t                }\n\t\t            }\n\t\t            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n\t\t            if (localeFamilies[name]) {\n\t\t                localeFamilies[name].forEach(function (x) {\n\t\t                    defineLocale(x.name, x.config);\n\t\t                });\n\t\t            }\n\n\t\t            // backwards compat for now: also set the locale\n\t\t            // make sure we set the locale AFTER all child locales have been\n\t\t            // created, so we won't end up with the child locale set.\n\t\t            getSetGlobalLocale(name);\n\n\t\t            return locales[name];\n\t\t        } else {\n\t\t            // useful for testing\n\t\t            delete locales[name];\n\t\t            return null;\n\t\t        }\n\t\t    }\n\n\t\t    function updateLocale(name, config) {\n\t\t        if (config != null) {\n\t\t            var locale,\n\t\t                tmpLocale,\n\t\t                parentConfig = baseConfig;\n\n\t\t            if (locales[name] != null && locales[name].parentLocale != null) {\n\t\t                // Update existing child locale in-place to avoid memory-leaks\n\t\t                locales[name].set(mergeConfigs(locales[name]._config, config));\n\t\t            } else {\n\t\t                // MERGE\n\t\t                tmpLocale = loadLocale(name);\n\t\t                if (tmpLocale != null) {\n\t\t                    parentConfig = tmpLocale._config;\n\t\t                }\n\t\t                config = mergeConfigs(parentConfig, config);\n\t\t                if (tmpLocale == null) {\n\t\t                    // updateLocale is called for creating a new locale\n\t\t                    // Set abbr so it will have a name (getters return\n\t\t                    // undefined otherwise).\n\t\t                    config.abbr = name;\n\t\t                }\n\t\t                locale = new Locale(config);\n\t\t                locale.parentLocale = locales[name];\n\t\t                locales[name] = locale;\n\t\t            }\n\n\t\t            // backwards compat for now: also set the locale\n\t\t            getSetGlobalLocale(name);\n\t\t        } else {\n\t\t            // pass null for config to unupdate, useful for tests\n\t\t            if (locales[name] != null) {\n\t\t                if (locales[name].parentLocale != null) {\n\t\t                    locales[name] = locales[name].parentLocale;\n\t\t                    if (name === getSetGlobalLocale()) {\n\t\t                        getSetGlobalLocale(name);\n\t\t                    }\n\t\t                } else if (locales[name] != null) {\n\t\t                    delete locales[name];\n\t\t                }\n\t\t            }\n\t\t        }\n\t\t        return locales[name];\n\t\t    }\n\n\t\t    // returns locale data\n\t\t    function getLocale(key) {\n\t\t        var locale;\n\n\t\t        if (key && key._locale && key._locale._abbr) {\n\t\t            key = key._locale._abbr;\n\t\t        }\n\n\t\t        if (!key) {\n\t\t            return globalLocale;\n\t\t        }\n\n\t\t        if (!isArray(key)) {\n\t\t            //short-circuit everything else\n\t\t            locale = loadLocale(key);\n\t\t            if (locale) {\n\t\t                return locale;\n\t\t            }\n\t\t            key = [key];\n\t\t        }\n\n\t\t        return chooseLocale(key);\n\t\t    }\n\n\t\t    function listLocales() {\n\t\t        return keys(locales);\n\t\t    }\n\n\t\t    function checkOverflow(m) {\n\t\t        var overflow,\n\t\t            a = m._a;\n\n\t\t        if (a && getParsingFlags(m).overflow === -2) {\n\t\t            overflow =\n\t\t                a[MONTH] < 0 || a[MONTH] > 11\n\t\t                    ? MONTH\n\t\t                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n\t\t                      ? DATE\n\t\t                      : a[HOUR] < 0 ||\n\t\t                          a[HOUR] > 24 ||\n\t\t                          (a[HOUR] === 24 &&\n\t\t                              (a[MINUTE] !== 0 ||\n\t\t                                  a[SECOND] !== 0 ||\n\t\t                                  a[MILLISECOND] !== 0))\n\t\t                        ? HOUR\n\t\t                        : a[MINUTE] < 0 || a[MINUTE] > 59\n\t\t                          ? MINUTE\n\t\t                          : a[SECOND] < 0 || a[SECOND] > 59\n\t\t                            ? SECOND\n\t\t                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n\t\t                              ? MILLISECOND\n\t\t                              : -1;\n\n\t\t            if (\n\t\t                getParsingFlags(m)._overflowDayOfYear &&\n\t\t                (overflow < YEAR || overflow > DATE)\n\t\t            ) {\n\t\t                overflow = DATE;\n\t\t            }\n\t\t            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n\t\t                overflow = WEEK;\n\t\t            }\n\t\t            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n\t\t                overflow = WEEKDAY;\n\t\t            }\n\n\t\t            getParsingFlags(m).overflow = overflow;\n\t\t        }\n\n\t\t        return m;\n\t\t    }\n\n\t\t    // iso 8601 regex\n\t\t    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\t\t    var extendedIsoRegex =\n\t\t            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n\t\t        basicIsoRegex =\n\t\t            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n\t\t        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n\t\t        isoDates = [\n\t\t            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n\t\t            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n\t\t            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n\t\t            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n\t\t            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n\t\t            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n\t\t            ['YYYYYYMMDD', /[+-]\\d{10}/],\n\t\t            ['YYYYMMDD', /\\d{8}/],\n\t\t            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n\t\t            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n\t\t            ['YYYYDDD', /\\d{7}/],\n\t\t            ['YYYYMM', /\\d{6}/, false],\n\t\t            ['YYYY', /\\d{4}/, false],\n\t\t        ],\n\t\t        // iso time formats and regexes\n\t\t        isoTimes = [\n\t\t            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n\t\t            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n\t\t            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n\t\t            ['HH:mm', /\\d\\d:\\d\\d/],\n\t\t            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n\t\t            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n\t\t            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n\t\t            ['HHmm', /\\d\\d\\d\\d/],\n\t\t            ['HH', /\\d\\d/],\n\t\t        ],\n\t\t        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n\t\t        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\t\t        rfc2822 =\n\t\t            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n\t\t        obsOffsets = {\n\t\t            UT: 0,\n\t\t            GMT: 0,\n\t\t            EDT: -4 * 60,\n\t\t            EST: -5 * 60,\n\t\t            CDT: -5 * 60,\n\t\t            CST: -6 * 60,\n\t\t            MDT: -6 * 60,\n\t\t            MST: -7 * 60,\n\t\t            PDT: -7 * 60,\n\t\t            PST: -8 * 60,\n\t\t        };\n\n\t\t    // date from iso format\n\t\t    function configFromISO(config) {\n\t\t        var i,\n\t\t            l,\n\t\t            string = config._i,\n\t\t            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n\t\t            allowTime,\n\t\t            dateFormat,\n\t\t            timeFormat,\n\t\t            tzFormat,\n\t\t            isoDatesLen = isoDates.length,\n\t\t            isoTimesLen = isoTimes.length;\n\n\t\t        if (match) {\n\t\t            getParsingFlags(config).iso = true;\n\t\t            for (i = 0, l = isoDatesLen; i < l; i++) {\n\t\t                if (isoDates[i][1].exec(match[1])) {\n\t\t                    dateFormat = isoDates[i][0];\n\t\t                    allowTime = isoDates[i][2] !== false;\n\t\t                    break;\n\t\t                }\n\t\t            }\n\t\t            if (dateFormat == null) {\n\t\t                config._isValid = false;\n\t\t                return;\n\t\t            }\n\t\t            if (match[3]) {\n\t\t                for (i = 0, l = isoTimesLen; i < l; i++) {\n\t\t                    if (isoTimes[i][1].exec(match[3])) {\n\t\t                        // match[2] should be 'T' or space\n\t\t                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n\t\t                        break;\n\t\t                    }\n\t\t                }\n\t\t                if (timeFormat == null) {\n\t\t                    config._isValid = false;\n\t\t                    return;\n\t\t                }\n\t\t            }\n\t\t            if (!allowTime && timeFormat != null) {\n\t\t                config._isValid = false;\n\t\t                return;\n\t\t            }\n\t\t            if (match[4]) {\n\t\t                if (tzRegex.exec(match[4])) {\n\t\t                    tzFormat = 'Z';\n\t\t                } else {\n\t\t                    config._isValid = false;\n\t\t                    return;\n\t\t                }\n\t\t            }\n\t\t            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n\t\t            configFromStringAndFormat(config);\n\t\t        } else {\n\t\t            config._isValid = false;\n\t\t        }\n\t\t    }\n\n\t\t    function extractFromRFC2822Strings(\n\t\t        yearStr,\n\t\t        monthStr,\n\t\t        dayStr,\n\t\t        hourStr,\n\t\t        minuteStr,\n\t\t        secondStr\n\t\t    ) {\n\t\t        var result = [\n\t\t            untruncateYear(yearStr),\n\t\t            defaultLocaleMonthsShort.indexOf(monthStr),\n\t\t            parseInt(dayStr, 10),\n\t\t            parseInt(hourStr, 10),\n\t\t            parseInt(minuteStr, 10),\n\t\t        ];\n\n\t\t        if (secondStr) {\n\t\t            result.push(parseInt(secondStr, 10));\n\t\t        }\n\n\t\t        return result;\n\t\t    }\n\n\t\t    function untruncateYear(yearStr) {\n\t\t        var year = parseInt(yearStr, 10);\n\t\t        if (year <= 49) {\n\t\t            return 2000 + year;\n\t\t        } else if (year <= 999) {\n\t\t            return 1900 + year;\n\t\t        }\n\t\t        return year;\n\t\t    }\n\n\t\t    function preprocessRFC2822(s) {\n\t\t        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n\t\t        return s\n\t\t            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n\t\t            .replace(/(\\s\\s+)/g, ' ')\n\t\t            .replace(/^\\s\\s*/, '')\n\t\t            .replace(/\\s\\s*$/, '');\n\t\t    }\n\n\t\t    function checkWeekday(weekdayStr, parsedInput, config) {\n\t\t        if (weekdayStr) {\n\t\t            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n\t\t            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n\t\t                weekdayActual = new Date(\n\t\t                    parsedInput[0],\n\t\t                    parsedInput[1],\n\t\t                    parsedInput[2]\n\t\t                ).getDay();\n\t\t            if (weekdayProvided !== weekdayActual) {\n\t\t                getParsingFlags(config).weekdayMismatch = true;\n\t\t                config._isValid = false;\n\t\t                return false;\n\t\t            }\n\t\t        }\n\t\t        return true;\n\t\t    }\n\n\t\t    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n\t\t        if (obsOffset) {\n\t\t            return obsOffsets[obsOffset];\n\t\t        } else if (militaryOffset) {\n\t\t            // the only allowed military tz is Z\n\t\t            return 0;\n\t\t        } else {\n\t\t            var hm = parseInt(numOffset, 10),\n\t\t                m = hm % 100,\n\t\t                h = (hm - m) / 100;\n\t\t            return h * 60 + m;\n\t\t        }\n\t\t    }\n\n\t\t    // date and time from ref 2822 format\n\t\t    function configFromRFC2822(config) {\n\t\t        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n\t\t            parsedArray;\n\t\t        if (match) {\n\t\t            parsedArray = extractFromRFC2822Strings(\n\t\t                match[4],\n\t\t                match[3],\n\t\t                match[2],\n\t\t                match[5],\n\t\t                match[6],\n\t\t                match[7]\n\t\t            );\n\t\t            if (!checkWeekday(match[1], parsedArray, config)) {\n\t\t                return;\n\t\t            }\n\n\t\t            config._a = parsedArray;\n\t\t            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n\t\t            config._d = createUTCDate.apply(null, config._a);\n\t\t            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n\t\t            getParsingFlags(config).rfc2822 = true;\n\t\t        } else {\n\t\t            config._isValid = false;\n\t\t        }\n\t\t    }\n\n\t\t    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n\t\t    function configFromString(config) {\n\t\t        var matched = aspNetJsonRegex.exec(config._i);\n\t\t        if (matched !== null) {\n\t\t            config._d = new Date(+matched[1]);\n\t\t            return;\n\t\t        }\n\n\t\t        configFromISO(config);\n\t\t        if (config._isValid === false) {\n\t\t            delete config._isValid;\n\t\t        } else {\n\t\t            return;\n\t\t        }\n\n\t\t        configFromRFC2822(config);\n\t\t        if (config._isValid === false) {\n\t\t            delete config._isValid;\n\t\t        } else {\n\t\t            return;\n\t\t        }\n\n\t\t        if (config._strict) {\n\t\t            config._isValid = false;\n\t\t        } else {\n\t\t            // Final attempt, use Input Fallback\n\t\t            hooks.createFromInputFallback(config);\n\t\t        }\n\t\t    }\n\n\t\t    hooks.createFromInputFallback = deprecate(\n\t\t        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n\t\t            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n\t\t            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n\t\t        function (config) {\n\t\t            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n\t\t        }\n\t\t    );\n\n\t\t    // Pick the first defined of two or three arguments.\n\t\t    function defaults(a, b, c) {\n\t\t        if (a != null) {\n\t\t            return a;\n\t\t        }\n\t\t        if (b != null) {\n\t\t            return b;\n\t\t        }\n\t\t        return c;\n\t\t    }\n\n\t\t    function currentDateArray(config) {\n\t\t        // hooks is actually the exported moment object\n\t\t        var nowValue = new Date(hooks.now());\n\t\t        if (config._useUTC) {\n\t\t            return [\n\t\t                nowValue.getUTCFullYear(),\n\t\t                nowValue.getUTCMonth(),\n\t\t                nowValue.getUTCDate(),\n\t\t            ];\n\t\t        }\n\t\t        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n\t\t    }\n\n\t\t    // convert an array to a date.\n\t\t    // the array should mirror the parameters below\n\t\t    // note: all values past the year are optional and will default to the lowest possible value.\n\t\t    // [year, month, day , hour, minute, second, millisecond]\n\t\t    function configFromArray(config) {\n\t\t        var i,\n\t\t            date,\n\t\t            input = [],\n\t\t            currentDate,\n\t\t            expectedWeekday,\n\t\t            yearToUse;\n\n\t\t        if (config._d) {\n\t\t            return;\n\t\t        }\n\n\t\t        currentDate = currentDateArray(config);\n\n\t\t        //compute day of the year from weeks and weekdays\n\t\t        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n\t\t            dayOfYearFromWeekInfo(config);\n\t\t        }\n\n\t\t        //if the day of the year is set, figure out what it is\n\t\t        if (config._dayOfYear != null) {\n\t\t            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n\t\t            if (\n\t\t                config._dayOfYear > daysInYear(yearToUse) ||\n\t\t                config._dayOfYear === 0\n\t\t            ) {\n\t\t                getParsingFlags(config)._overflowDayOfYear = true;\n\t\t            }\n\n\t\t            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n\t\t            config._a[MONTH] = date.getUTCMonth();\n\t\t            config._a[DATE] = date.getUTCDate();\n\t\t        }\n\n\t\t        // Default to current date.\n\t\t        // * if no year, month, day of month are given, default to today\n\t\t        // * if day of month is given, default month and year\n\t\t        // * if month is given, default only year\n\t\t        // * if year is given, don't default anything\n\t\t        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n\t\t            config._a[i] = input[i] = currentDate[i];\n\t\t        }\n\n\t\t        // Zero out whatever was not defaulted, including time\n\t\t        for (; i < 7; i++) {\n\t\t            config._a[i] = input[i] =\n\t\t                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n\t\t        }\n\n\t\t        // Check for 24:00:00.000\n\t\t        if (\n\t\t            config._a[HOUR] === 24 &&\n\t\t            config._a[MINUTE] === 0 &&\n\t\t            config._a[SECOND] === 0 &&\n\t\t            config._a[MILLISECOND] === 0\n\t\t        ) {\n\t\t            config._nextDay = true;\n\t\t            config._a[HOUR] = 0;\n\t\t        }\n\n\t\t        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n\t\t            null,\n\t\t            input\n\t\t        );\n\t\t        expectedWeekday = config._useUTC\n\t\t            ? config._d.getUTCDay()\n\t\t            : config._d.getDay();\n\n\t\t        // Apply timezone offset from input. The actual utcOffset can be changed\n\t\t        // with parseZone.\n\t\t        if (config._tzm != null) {\n\t\t            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\t\t        }\n\n\t\t        if (config._nextDay) {\n\t\t            config._a[HOUR] = 24;\n\t\t        }\n\n\t\t        // check for mismatching day of week\n\t\t        if (\n\t\t            config._w &&\n\t\t            typeof config._w.d !== 'undefined' &&\n\t\t            config._w.d !== expectedWeekday\n\t\t        ) {\n\t\t            getParsingFlags(config).weekdayMismatch = true;\n\t\t        }\n\t\t    }\n\n\t\t    function dayOfYearFromWeekInfo(config) {\n\t\t        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n\t\t        w = config._w;\n\t\t        if (w.GG != null || w.W != null || w.E != null) {\n\t\t            dow = 1;\n\t\t            doy = 4;\n\n\t\t            // TODO: We need to take the current isoWeekYear, but that depends on\n\t\t            // how we interpret now (local, utc, fixed offset). So create\n\t\t            // a now version of current config (take local/utc/offset flags, and\n\t\t            // create now).\n\t\t            weekYear = defaults(\n\t\t                w.GG,\n\t\t                config._a[YEAR],\n\t\t                weekOfYear(createLocal(), 1, 4).year\n\t\t            );\n\t\t            week = defaults(w.W, 1);\n\t\t            weekday = defaults(w.E, 1);\n\t\t            if (weekday < 1 || weekday > 7) {\n\t\t                weekdayOverflow = true;\n\t\t            }\n\t\t        } else {\n\t\t            dow = config._locale._week.dow;\n\t\t            doy = config._locale._week.doy;\n\n\t\t            curWeek = weekOfYear(createLocal(), dow, doy);\n\n\t\t            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n\t\t            // Default to current week.\n\t\t            week = defaults(w.w, curWeek.week);\n\n\t\t            if (w.d != null) {\n\t\t                // weekday -- low day numbers are considered next week\n\t\t                weekday = w.d;\n\t\t                if (weekday < 0 || weekday > 6) {\n\t\t                    weekdayOverflow = true;\n\t\t                }\n\t\t            } else if (w.e != null) {\n\t\t                // local weekday -- counting starts from beginning of week\n\t\t                weekday = w.e + dow;\n\t\t                if (w.e < 0 || w.e > 6) {\n\t\t                    weekdayOverflow = true;\n\t\t                }\n\t\t            } else {\n\t\t                // default to beginning of week\n\t\t                weekday = dow;\n\t\t            }\n\t\t        }\n\t\t        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n\t\t            getParsingFlags(config)._overflowWeeks = true;\n\t\t        } else if (weekdayOverflow != null) {\n\t\t            getParsingFlags(config)._overflowWeekday = true;\n\t\t        } else {\n\t\t            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n\t\t            config._a[YEAR] = temp.year;\n\t\t            config._dayOfYear = temp.dayOfYear;\n\t\t        }\n\t\t    }\n\n\t\t    // constant that refers to the ISO standard\n\t\t    hooks.ISO_8601 = function () {};\n\n\t\t    // constant that refers to the RFC 2822 form\n\t\t    hooks.RFC_2822 = function () {};\n\n\t\t    // date from string and format string\n\t\t    function configFromStringAndFormat(config) {\n\t\t        // TODO: Move this to another part of the creation flow to prevent circular deps\n\t\t        if (config._f === hooks.ISO_8601) {\n\t\t            configFromISO(config);\n\t\t            return;\n\t\t        }\n\t\t        if (config._f === hooks.RFC_2822) {\n\t\t            configFromRFC2822(config);\n\t\t            return;\n\t\t        }\n\t\t        config._a = [];\n\t\t        getParsingFlags(config).empty = true;\n\n\t\t        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\t\t        var string = '' + config._i,\n\t\t            i,\n\t\t            parsedInput,\n\t\t            tokens,\n\t\t            token,\n\t\t            skipped,\n\t\t            stringLength = string.length,\n\t\t            totalParsedInputLength = 0,\n\t\t            era,\n\t\t            tokenLen;\n\n\t\t        tokens =\n\t\t            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\t\t        tokenLen = tokens.length;\n\t\t        for (i = 0; i < tokenLen; i++) {\n\t\t            token = tokens[i];\n\t\t            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n\t\t                [])[0];\n\t\t            if (parsedInput) {\n\t\t                skipped = string.substr(0, string.indexOf(parsedInput));\n\t\t                if (skipped.length > 0) {\n\t\t                    getParsingFlags(config).unusedInput.push(skipped);\n\t\t                }\n\t\t                string = string.slice(\n\t\t                    string.indexOf(parsedInput) + parsedInput.length\n\t\t                );\n\t\t                totalParsedInputLength += parsedInput.length;\n\t\t            }\n\t\t            // don't parse if it's not a known token\n\t\t            if (formatTokenFunctions[token]) {\n\t\t                if (parsedInput) {\n\t\t                    getParsingFlags(config).empty = false;\n\t\t                } else {\n\t\t                    getParsingFlags(config).unusedTokens.push(token);\n\t\t                }\n\t\t                addTimeToArrayFromToken(token, parsedInput, config);\n\t\t            } else if (config._strict && !parsedInput) {\n\t\t                getParsingFlags(config).unusedTokens.push(token);\n\t\t            }\n\t\t        }\n\n\t\t        // add remaining unparsed input length to the string\n\t\t        getParsingFlags(config).charsLeftOver =\n\t\t            stringLength - totalParsedInputLength;\n\t\t        if (string.length > 0) {\n\t\t            getParsingFlags(config).unusedInput.push(string);\n\t\t        }\n\n\t\t        // clear _12h flag if hour is <= 12\n\t\t        if (\n\t\t            config._a[HOUR] <= 12 &&\n\t\t            getParsingFlags(config).bigHour === true &&\n\t\t            config._a[HOUR] > 0\n\t\t        ) {\n\t\t            getParsingFlags(config).bigHour = undefined;\n\t\t        }\n\n\t\t        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n\t\t        getParsingFlags(config).meridiem = config._meridiem;\n\t\t        // handle meridiem\n\t\t        config._a[HOUR] = meridiemFixWrap(\n\t\t            config._locale,\n\t\t            config._a[HOUR],\n\t\t            config._meridiem\n\t\t        );\n\n\t\t        // handle era\n\t\t        era = getParsingFlags(config).era;\n\t\t        if (era !== null) {\n\t\t            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n\t\t        }\n\n\t\t        configFromArray(config);\n\t\t        checkOverflow(config);\n\t\t    }\n\n\t\t    function meridiemFixWrap(locale, hour, meridiem) {\n\t\t        var isPm;\n\n\t\t        if (meridiem == null) {\n\t\t            // nothing to do\n\t\t            return hour;\n\t\t        }\n\t\t        if (locale.meridiemHour != null) {\n\t\t            return locale.meridiemHour(hour, meridiem);\n\t\t        } else if (locale.isPM != null) {\n\t\t            // Fallback\n\t\t            isPm = locale.isPM(meridiem);\n\t\t            if (isPm && hour < 12) {\n\t\t                hour += 12;\n\t\t            }\n\t\t            if (!isPm && hour === 12) {\n\t\t                hour = 0;\n\t\t            }\n\t\t            return hour;\n\t\t        } else {\n\t\t            // this is not supposed to happen\n\t\t            return hour;\n\t\t        }\n\t\t    }\n\n\t\t    // date from string and array of format strings\n\t\t    function configFromStringAndArray(config) {\n\t\t        var tempConfig,\n\t\t            bestMoment,\n\t\t            scoreToBeat,\n\t\t            i,\n\t\t            currentScore,\n\t\t            validFormatFound,\n\t\t            bestFormatIsValid = false,\n\t\t            configfLen = config._f.length;\n\n\t\t        if (configfLen === 0) {\n\t\t            getParsingFlags(config).invalidFormat = true;\n\t\t            config._d = new Date(NaN);\n\t\t            return;\n\t\t        }\n\n\t\t        for (i = 0; i < configfLen; i++) {\n\t\t            currentScore = 0;\n\t\t            validFormatFound = false;\n\t\t            tempConfig = copyConfig({}, config);\n\t\t            if (config._useUTC != null) {\n\t\t                tempConfig._useUTC = config._useUTC;\n\t\t            }\n\t\t            tempConfig._f = config._f[i];\n\t\t            configFromStringAndFormat(tempConfig);\n\n\t\t            if (isValid(tempConfig)) {\n\t\t                validFormatFound = true;\n\t\t            }\n\n\t\t            // if there is any input that was not parsed add a penalty for that format\n\t\t            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n\t\t            //or tokens\n\t\t            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n\t\t            getParsingFlags(tempConfig).score = currentScore;\n\n\t\t            if (!bestFormatIsValid) {\n\t\t                if (\n\t\t                    scoreToBeat == null ||\n\t\t                    currentScore < scoreToBeat ||\n\t\t                    validFormatFound\n\t\t                ) {\n\t\t                    scoreToBeat = currentScore;\n\t\t                    bestMoment = tempConfig;\n\t\t                    if (validFormatFound) {\n\t\t                        bestFormatIsValid = true;\n\t\t                    }\n\t\t                }\n\t\t            } else {\n\t\t                if (currentScore < scoreToBeat) {\n\t\t                    scoreToBeat = currentScore;\n\t\t                    bestMoment = tempConfig;\n\t\t                }\n\t\t            }\n\t\t        }\n\n\t\t        extend(config, bestMoment || tempConfig);\n\t\t    }\n\n\t\t    function configFromObject(config) {\n\t\t        if (config._d) {\n\t\t            return;\n\t\t        }\n\n\t\t        var i = normalizeObjectUnits(config._i),\n\t\t            dayOrDate = i.day === undefined ? i.date : i.day;\n\t\t        config._a = map(\n\t\t            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n\t\t            function (obj) {\n\t\t                return obj && parseInt(obj, 10);\n\t\t            }\n\t\t        );\n\n\t\t        configFromArray(config);\n\t\t    }\n\n\t\t    function createFromConfig(config) {\n\t\t        var res = new Moment(checkOverflow(prepareConfig(config)));\n\t\t        if (res._nextDay) {\n\t\t            // Adding is smart enough around DST\n\t\t            res.add(1, 'd');\n\t\t            res._nextDay = undefined;\n\t\t        }\n\n\t\t        return res;\n\t\t    }\n\n\t\t    function prepareConfig(config) {\n\t\t        var input = config._i,\n\t\t            format = config._f;\n\n\t\t        config._locale = config._locale || getLocale(config._l);\n\n\t\t        if (input === null || (format === undefined && input === '')) {\n\t\t            return createInvalid({ nullInput: true });\n\t\t        }\n\n\t\t        if (typeof input === 'string') {\n\t\t            config._i = input = config._locale.preparse(input);\n\t\t        }\n\n\t\t        if (isMoment(input)) {\n\t\t            return new Moment(checkOverflow(input));\n\t\t        } else if (isDate(input)) {\n\t\t            config._d = input;\n\t\t        } else if (isArray(format)) {\n\t\t            configFromStringAndArray(config);\n\t\t        } else if (format) {\n\t\t            configFromStringAndFormat(config);\n\t\t        } else {\n\t\t            configFromInput(config);\n\t\t        }\n\n\t\t        if (!isValid(config)) {\n\t\t            config._d = null;\n\t\t        }\n\n\t\t        return config;\n\t\t    }\n\n\t\t    function configFromInput(config) {\n\t\t        var input = config._i;\n\t\t        if (isUndefined(input)) {\n\t\t            config._d = new Date(hooks.now());\n\t\t        } else if (isDate(input)) {\n\t\t            config._d = new Date(input.valueOf());\n\t\t        } else if (typeof input === 'string') {\n\t\t            configFromString(config);\n\t\t        } else if (isArray(input)) {\n\t\t            config._a = map(input.slice(0), function (obj) {\n\t\t                return parseInt(obj, 10);\n\t\t            });\n\t\t            configFromArray(config);\n\t\t        } else if (isObject(input)) {\n\t\t            configFromObject(config);\n\t\t        } else if (isNumber(input)) {\n\t\t            // from milliseconds\n\t\t            config._d = new Date(input);\n\t\t        } else {\n\t\t            hooks.createFromInputFallback(config);\n\t\t        }\n\t\t    }\n\n\t\t    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n\t\t        var c = {};\n\n\t\t        if (format === true || format === false) {\n\t\t            strict = format;\n\t\t            format = undefined;\n\t\t        }\n\n\t\t        if (locale === true || locale === false) {\n\t\t            strict = locale;\n\t\t            locale = undefined;\n\t\t        }\n\n\t\t        if (\n\t\t            (isObject(input) && isObjectEmpty(input)) ||\n\t\t            (isArray(input) && input.length === 0)\n\t\t        ) {\n\t\t            input = undefined;\n\t\t        }\n\t\t        // object construction must be done this way.\n\t\t        // https://github.com/moment/moment/issues/1423\n\t\t        c._isAMomentObject = true;\n\t\t        c._useUTC = c._isUTC = isUTC;\n\t\t        c._l = locale;\n\t\t        c._i = input;\n\t\t        c._f = format;\n\t\t        c._strict = strict;\n\n\t\t        return createFromConfig(c);\n\t\t    }\n\n\t\t    function createLocal(input, format, locale, strict) {\n\t\t        return createLocalOrUTC(input, format, locale, strict, false);\n\t\t    }\n\n\t\t    var prototypeMin = deprecate(\n\t\t            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t\t            function () {\n\t\t                var other = createLocal.apply(null, arguments);\n\t\t                if (this.isValid() && other.isValid()) {\n\t\t                    return other < this ? this : other;\n\t\t                } else {\n\t\t                    return createInvalid();\n\t\t                }\n\t\t            }\n\t\t        ),\n\t\t        prototypeMax = deprecate(\n\t\t            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t\t            function () {\n\t\t                var other = createLocal.apply(null, arguments);\n\t\t                if (this.isValid() && other.isValid()) {\n\t\t                    return other > this ? this : other;\n\t\t                } else {\n\t\t                    return createInvalid();\n\t\t                }\n\t\t            }\n\t\t        );\n\n\t\t    // Pick a moment m from moments so that m[fn](other) is true for all\n\t\t    // other. This relies on the function fn to be transitive.\n\t\t    //\n\t\t    // moments should either be an array of moment objects or an array, whose\n\t\t    // first element is an array of moment objects.\n\t\t    function pickBy(fn, moments) {\n\t\t        var res, i;\n\t\t        if (moments.length === 1 && isArray(moments[0])) {\n\t\t            moments = moments[0];\n\t\t        }\n\t\t        if (!moments.length) {\n\t\t            return createLocal();\n\t\t        }\n\t\t        res = moments[0];\n\t\t        for (i = 1; i < moments.length; ++i) {\n\t\t            if (!moments[i].isValid() || moments[i][fn](res)) {\n\t\t                res = moments[i];\n\t\t            }\n\t\t        }\n\t\t        return res;\n\t\t    }\n\n\t\t    // TODO: Use [].sort instead?\n\t\t    function min() {\n\t\t        var args = [].slice.call(arguments, 0);\n\n\t\t        return pickBy('isBefore', args);\n\t\t    }\n\n\t\t    function max() {\n\t\t        var args = [].slice.call(arguments, 0);\n\n\t\t        return pickBy('isAfter', args);\n\t\t    }\n\n\t\t    var now = function () {\n\t\t        return Date.now ? Date.now() : +new Date();\n\t\t    };\n\n\t\t    var ordering = [\n\t\t        'year',\n\t\t        'quarter',\n\t\t        'month',\n\t\t        'week',\n\t\t        'day',\n\t\t        'hour',\n\t\t        'minute',\n\t\t        'second',\n\t\t        'millisecond',\n\t\t    ];\n\n\t\t    function isDurationValid(m) {\n\t\t        var key,\n\t\t            unitHasDecimal = false,\n\t\t            i,\n\t\t            orderLen = ordering.length;\n\t\t        for (key in m) {\n\t\t            if (\n\t\t                hasOwnProp(m, key) &&\n\t\t                !(\n\t\t                    indexOf.call(ordering, key) !== -1 &&\n\t\t                    (m[key] == null || !isNaN(m[key]))\n\t\t                )\n\t\t            ) {\n\t\t                return false;\n\t\t            }\n\t\t        }\n\n\t\t        for (i = 0; i < orderLen; ++i) {\n\t\t            if (m[ordering[i]]) {\n\t\t                if (unitHasDecimal) {\n\t\t                    return false; // only allow non-integers for smallest unit\n\t\t                }\n\t\t                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n\t\t                    unitHasDecimal = true;\n\t\t                }\n\t\t            }\n\t\t        }\n\n\t\t        return true;\n\t\t    }\n\n\t\t    function isValid$1() {\n\t\t        return this._isValid;\n\t\t    }\n\n\t\t    function createInvalid$1() {\n\t\t        return createDuration(NaN);\n\t\t    }\n\n\t\t    function Duration(duration) {\n\t\t        var normalizedInput = normalizeObjectUnits(duration),\n\t\t            years = normalizedInput.year || 0,\n\t\t            quarters = normalizedInput.quarter || 0,\n\t\t            months = normalizedInput.month || 0,\n\t\t            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n\t\t            days = normalizedInput.day || 0,\n\t\t            hours = normalizedInput.hour || 0,\n\t\t            minutes = normalizedInput.minute || 0,\n\t\t            seconds = normalizedInput.second || 0,\n\t\t            milliseconds = normalizedInput.millisecond || 0;\n\n\t\t        this._isValid = isDurationValid(normalizedInput);\n\n\t\t        // representation for dateAddRemove\n\t\t        this._milliseconds =\n\t\t            +milliseconds +\n\t\t            seconds * 1e3 + // 1000\n\t\t            minutes * 6e4 + // 1000 * 60\n\t\t            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n\t\t        // Because of dateAddRemove treats 24 hours as different from a\n\t\t        // day when working around DST, we need to store them separately\n\t\t        this._days = +days + weeks * 7;\n\t\t        // It is impossible to translate months into days without knowing\n\t\t        // which months you are are talking about, so we have to store\n\t\t        // it separately.\n\t\t        this._months = +months + quarters * 3 + years * 12;\n\n\t\t        this._data = {};\n\n\t\t        this._locale = getLocale();\n\n\t\t        this._bubble();\n\t\t    }\n\n\t\t    function isDuration(obj) {\n\t\t        return obj instanceof Duration;\n\t\t    }\n\n\t\t    function absRound(number) {\n\t\t        if (number < 0) {\n\t\t            return Math.round(-1 * number) * -1;\n\t\t        } else {\n\t\t            return Math.round(number);\n\t\t        }\n\t\t    }\n\n\t\t    // compare two arrays, return the number of differences\n\t\t    function compareArrays(array1, array2, dontConvert) {\n\t\t        var len = Math.min(array1.length, array2.length),\n\t\t            lengthDiff = Math.abs(array1.length - array2.length),\n\t\t            diffs = 0,\n\t\t            i;\n\t\t        for (i = 0; i < len; i++) {\n\t\t            if (\n\t\t                (toInt(array1[i]) !== toInt(array2[i]))\n\t\t            ) {\n\t\t                diffs++;\n\t\t            }\n\t\t        }\n\t\t        return diffs + lengthDiff;\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    function offset(token, separator) {\n\t\t        addFormatToken(token, 0, 0, function () {\n\t\t            var offset = this.utcOffset(),\n\t\t                sign = '+';\n\t\t            if (offset < 0) {\n\t\t                offset = -offset;\n\t\t                sign = '-';\n\t\t            }\n\t\t            return (\n\t\t                sign +\n\t\t                zeroFill(~~(offset / 60), 2) +\n\t\t                separator +\n\t\t                zeroFill(~~offset % 60, 2)\n\t\t            );\n\t\t        });\n\t\t    }\n\n\t\t    offset('Z', ':');\n\t\t    offset('ZZ', '');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('Z', matchShortOffset);\n\t\t    addRegexToken('ZZ', matchShortOffset);\n\t\t    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n\t\t        config._useUTC = true;\n\t\t        config._tzm = offsetFromString(matchShortOffset, input);\n\t\t    });\n\n\t\t    // HELPERS\n\n\t\t    // timezone chunker\n\t\t    // '+10:00' > ['10',  '00']\n\t\t    // '-1530'  > ['-15', '30']\n\t\t    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n\t\t    function offsetFromString(matcher, string) {\n\t\t        var matches = (string || '').match(matcher),\n\t\t            chunk,\n\t\t            parts,\n\t\t            minutes;\n\n\t\t        if (matches === null) {\n\t\t            return null;\n\t\t        }\n\n\t\t        chunk = matches[matches.length - 1] || [];\n\t\t        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n\t\t        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n\t\t        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n\t\t    }\n\n\t\t    // Return a moment from input, that is local/utc/zone equivalent to model.\n\t\t    function cloneWithOffset(input, model) {\n\t\t        var res, diff;\n\t\t        if (model._isUTC) {\n\t\t            res = model.clone();\n\t\t            diff =\n\t\t                (isMoment(input) || isDate(input)\n\t\t                    ? input.valueOf()\n\t\t                    : createLocal(input).valueOf()) - res.valueOf();\n\t\t            // Use low-level api, because this fn is low-level api.\n\t\t            res._d.setTime(res._d.valueOf() + diff);\n\t\t            hooks.updateOffset(res, false);\n\t\t            return res;\n\t\t        } else {\n\t\t            return createLocal(input).local();\n\t\t        }\n\t\t    }\n\n\t\t    function getDateOffset(m) {\n\t\t        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n\t\t        // https://github.com/moment/moment/pull/1871\n\t\t        return -Math.round(m._d.getTimezoneOffset());\n\t\t    }\n\n\t\t    // HOOKS\n\n\t\t    // This function will be called whenever a moment is mutated.\n\t\t    // It is intended to keep the offset in sync with the timezone.\n\t\t    hooks.updateOffset = function () {};\n\n\t\t    // MOMENTS\n\n\t\t    // keepLocalTime = true means only change the timezone, without\n\t\t    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n\t\t    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n\t\t    // +0200, so we adjust the time as needed, to be valid.\n\t\t    //\n\t\t    // Keeping the time actually adds/subtracts (one hour)\n\t\t    // from the actual represented time. That is why we call updateOffset\n\t\t    // a second time. In case it wants us to change the offset again\n\t\t    // _changeInProgress == true case, then we have to adjust, because\n\t\t    // there is no such time in the given timezone.\n\t\t    function getSetOffset(input, keepLocalTime, keepMinutes) {\n\t\t        var offset = this._offset || 0,\n\t\t            localAdjust;\n\t\t        if (!this.isValid()) {\n\t\t            return input != null ? this : NaN;\n\t\t        }\n\t\t        if (input != null) {\n\t\t            if (typeof input === 'string') {\n\t\t                input = offsetFromString(matchShortOffset, input);\n\t\t                if (input === null) {\n\t\t                    return this;\n\t\t                }\n\t\t            } else if (Math.abs(input) < 16 && !keepMinutes) {\n\t\t                input = input * 60;\n\t\t            }\n\t\t            if (!this._isUTC && keepLocalTime) {\n\t\t                localAdjust = getDateOffset(this);\n\t\t            }\n\t\t            this._offset = input;\n\t\t            this._isUTC = true;\n\t\t            if (localAdjust != null) {\n\t\t                this.add(localAdjust, 'm');\n\t\t            }\n\t\t            if (offset !== input) {\n\t\t                if (!keepLocalTime || this._changeInProgress) {\n\t\t                    addSubtract(\n\t\t                        this,\n\t\t                        createDuration(input - offset, 'm'),\n\t\t                        1,\n\t\t                        false\n\t\t                    );\n\t\t                } else if (!this._changeInProgress) {\n\t\t                    this._changeInProgress = true;\n\t\t                    hooks.updateOffset(this, true);\n\t\t                    this._changeInProgress = null;\n\t\t                }\n\t\t            }\n\t\t            return this;\n\t\t        } else {\n\t\t            return this._isUTC ? offset : getDateOffset(this);\n\t\t        }\n\t\t    }\n\n\t\t    function getSetZone(input, keepLocalTime) {\n\t\t        if (input != null) {\n\t\t            if (typeof input !== 'string') {\n\t\t                input = -input;\n\t\t            }\n\n\t\t            this.utcOffset(input, keepLocalTime);\n\n\t\t            return this;\n\t\t        } else {\n\t\t            return -this.utcOffset();\n\t\t        }\n\t\t    }\n\n\t\t    function setOffsetToUTC(keepLocalTime) {\n\t\t        return this.utcOffset(0, keepLocalTime);\n\t\t    }\n\n\t\t    function setOffsetToLocal(keepLocalTime) {\n\t\t        if (this._isUTC) {\n\t\t            this.utcOffset(0, keepLocalTime);\n\t\t            this._isUTC = false;\n\n\t\t            if (keepLocalTime) {\n\t\t                this.subtract(getDateOffset(this), 'm');\n\t\t            }\n\t\t        }\n\t\t        return this;\n\t\t    }\n\n\t\t    function setOffsetToParsedOffset() {\n\t\t        if (this._tzm != null) {\n\t\t            this.utcOffset(this._tzm, false, true);\n\t\t        } else if (typeof this._i === 'string') {\n\t\t            var tZone = offsetFromString(matchOffset, this._i);\n\t\t            if (tZone != null) {\n\t\t                this.utcOffset(tZone);\n\t\t            } else {\n\t\t                this.utcOffset(0, true);\n\t\t            }\n\t\t        }\n\t\t        return this;\n\t\t    }\n\n\t\t    function hasAlignedHourOffset(input) {\n\t\t        if (!this.isValid()) {\n\t\t            return false;\n\t\t        }\n\t\t        input = input ? createLocal(input).utcOffset() : 0;\n\n\t\t        return (this.utcOffset() - input) % 60 === 0;\n\t\t    }\n\n\t\t    function isDaylightSavingTime() {\n\t\t        return (\n\t\t            this.utcOffset() > this.clone().month(0).utcOffset() ||\n\t\t            this.utcOffset() > this.clone().month(5).utcOffset()\n\t\t        );\n\t\t    }\n\n\t\t    function isDaylightSavingTimeShifted() {\n\t\t        if (!isUndefined(this._isDSTShifted)) {\n\t\t            return this._isDSTShifted;\n\t\t        }\n\n\t\t        var c = {},\n\t\t            other;\n\n\t\t        copyConfig(c, this);\n\t\t        c = prepareConfig(c);\n\n\t\t        if (c._a) {\n\t\t            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n\t\t            this._isDSTShifted =\n\t\t                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n\t\t        } else {\n\t\t            this._isDSTShifted = false;\n\t\t        }\n\n\t\t        return this._isDSTShifted;\n\t\t    }\n\n\t\t    function isLocal() {\n\t\t        return this.isValid() ? !this._isUTC : false;\n\t\t    }\n\n\t\t    function isUtcOffset() {\n\t\t        return this.isValid() ? this._isUTC : false;\n\t\t    }\n\n\t\t    function isUtc() {\n\t\t        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n\t\t    }\n\n\t\t    // ASP.NET json date format regex\n\t\t    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n\t\t        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n\t\t        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n\t\t        // and further modified to allow for strings containing both week and day\n\t\t        isoRegex =\n\t\t            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n\t\t    function createDuration(input, key) {\n\t\t        var duration = input,\n\t\t            // matching against regexp is expensive, do it on demand\n\t\t            match = null,\n\t\t            sign,\n\t\t            ret,\n\t\t            diffRes;\n\n\t\t        if (isDuration(input)) {\n\t\t            duration = {\n\t\t                ms: input._milliseconds,\n\t\t                d: input._days,\n\t\t                M: input._months,\n\t\t            };\n\t\t        } else if (isNumber(input) || !isNaN(+input)) {\n\t\t            duration = {};\n\t\t            if (key) {\n\t\t                duration[key] = +input;\n\t\t            } else {\n\t\t                duration.milliseconds = +input;\n\t\t            }\n\t\t        } else if ((match = aspNetRegex.exec(input))) {\n\t\t            sign = match[1] === '-' ? -1 : 1;\n\t\t            duration = {\n\t\t                y: 0,\n\t\t                d: toInt(match[DATE]) * sign,\n\t\t                h: toInt(match[HOUR]) * sign,\n\t\t                m: toInt(match[MINUTE]) * sign,\n\t\t                s: toInt(match[SECOND]) * sign,\n\t\t                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n\t\t            };\n\t\t        } else if ((match = isoRegex.exec(input))) {\n\t\t            sign = match[1] === '-' ? -1 : 1;\n\t\t            duration = {\n\t\t                y: parseIso(match[2], sign),\n\t\t                M: parseIso(match[3], sign),\n\t\t                w: parseIso(match[4], sign),\n\t\t                d: parseIso(match[5], sign),\n\t\t                h: parseIso(match[6], sign),\n\t\t                m: parseIso(match[7], sign),\n\t\t                s: parseIso(match[8], sign),\n\t\t            };\n\t\t        } else if (duration == null) {\n\t\t            // checks for null or undefined\n\t\t            duration = {};\n\t\t        } else if (\n\t\t            typeof duration === 'object' &&\n\t\t            ('from' in duration || 'to' in duration)\n\t\t        ) {\n\t\t            diffRes = momentsDifference(\n\t\t                createLocal(duration.from),\n\t\t                createLocal(duration.to)\n\t\t            );\n\n\t\t            duration = {};\n\t\t            duration.ms = diffRes.milliseconds;\n\t\t            duration.M = diffRes.months;\n\t\t        }\n\n\t\t        ret = new Duration(duration);\n\n\t\t        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n\t\t            ret._locale = input._locale;\n\t\t        }\n\n\t\t        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n\t\t            ret._isValid = input._isValid;\n\t\t        }\n\n\t\t        return ret;\n\t\t    }\n\n\t\t    createDuration.fn = Duration.prototype;\n\t\t    createDuration.invalid = createInvalid$1;\n\n\t\t    function parseIso(inp, sign) {\n\t\t        // We'd normally use ~~inp for this, but unfortunately it also\n\t\t        // converts floats to ints.\n\t\t        // inp may be undefined, so careful calling replace on it.\n\t\t        var res = inp && parseFloat(inp.replace(',', '.'));\n\t\t        // apply sign while we're at it\n\t\t        return (isNaN(res) ? 0 : res) * sign;\n\t\t    }\n\n\t\t    function positiveMomentsDifference(base, other) {\n\t\t        var res = {};\n\n\t\t        res.months =\n\t\t            other.month() - base.month() + (other.year() - base.year()) * 12;\n\t\t        if (base.clone().add(res.months, 'M').isAfter(other)) {\n\t\t            --res.months;\n\t\t        }\n\n\t\t        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n\t\t        return res;\n\t\t    }\n\n\t\t    function momentsDifference(base, other) {\n\t\t        var res;\n\t\t        if (!(base.isValid() && other.isValid())) {\n\t\t            return { milliseconds: 0, months: 0 };\n\t\t        }\n\n\t\t        other = cloneWithOffset(other, base);\n\t\t        if (base.isBefore(other)) {\n\t\t            res = positiveMomentsDifference(base, other);\n\t\t        } else {\n\t\t            res = positiveMomentsDifference(other, base);\n\t\t            res.milliseconds = -res.milliseconds;\n\t\t            res.months = -res.months;\n\t\t        }\n\n\t\t        return res;\n\t\t    }\n\n\t\t    // TODO: remove 'name' arg after deprecation is removed\n\t\t    function createAdder(direction, name) {\n\t\t        return function (val, period) {\n\t\t            var dur, tmp;\n\t\t            //invert the arguments, but complain about it\n\t\t            if (period !== null && !isNaN(+period)) {\n\t\t                deprecateSimple(\n\t\t                    name,\n\t\t                    'moment().' +\n\t\t                        name +\n\t\t                        '(period, number) is deprecated. Please use moment().' +\n\t\t                        name +\n\t\t                        '(number, period). ' +\n\t\t                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n\t\t                );\n\t\t                tmp = val;\n\t\t                val = period;\n\t\t                period = tmp;\n\t\t            }\n\n\t\t            dur = createDuration(val, period);\n\t\t            addSubtract(this, dur, direction);\n\t\t            return this;\n\t\t        };\n\t\t    }\n\n\t\t    function addSubtract(mom, duration, isAdding, updateOffset) {\n\t\t        var milliseconds = duration._milliseconds,\n\t\t            days = absRound(duration._days),\n\t\t            months = absRound(duration._months);\n\n\t\t        if (!mom.isValid()) {\n\t\t            // No op\n\t\t            return;\n\t\t        }\n\n\t\t        updateOffset = updateOffset == null ? true : updateOffset;\n\n\t\t        if (months) {\n\t\t            setMonth(mom, get(mom, 'Month') + months * isAdding);\n\t\t        }\n\t\t        if (days) {\n\t\t            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n\t\t        }\n\t\t        if (milliseconds) {\n\t\t            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n\t\t        }\n\t\t        if (updateOffset) {\n\t\t            hooks.updateOffset(mom, days || months);\n\t\t        }\n\t\t    }\n\n\t\t    var add = createAdder(1, 'add'),\n\t\t        subtract = createAdder(-1, 'subtract');\n\n\t\t    function isString(input) {\n\t\t        return typeof input === 'string' || input instanceof String;\n\t\t    }\n\n\t\t    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n\t\t    function isMomentInput(input) {\n\t\t        return (\n\t\t            isMoment(input) ||\n\t\t            isDate(input) ||\n\t\t            isString(input) ||\n\t\t            isNumber(input) ||\n\t\t            isNumberOrStringArray(input) ||\n\t\t            isMomentInputObject(input) ||\n\t\t            input === null ||\n\t\t            input === undefined\n\t\t        );\n\t\t    }\n\n\t\t    function isMomentInputObject(input) {\n\t\t        var objectTest = isObject(input) && !isObjectEmpty(input),\n\t\t            propertyTest = false,\n\t\t            properties = [\n\t\t                'years',\n\t\t                'year',\n\t\t                'y',\n\t\t                'months',\n\t\t                'month',\n\t\t                'M',\n\t\t                'days',\n\t\t                'day',\n\t\t                'd',\n\t\t                'dates',\n\t\t                'date',\n\t\t                'D',\n\t\t                'hours',\n\t\t                'hour',\n\t\t                'h',\n\t\t                'minutes',\n\t\t                'minute',\n\t\t                'm',\n\t\t                'seconds',\n\t\t                'second',\n\t\t                's',\n\t\t                'milliseconds',\n\t\t                'millisecond',\n\t\t                'ms',\n\t\t            ],\n\t\t            i,\n\t\t            property,\n\t\t            propertyLen = properties.length;\n\n\t\t        for (i = 0; i < propertyLen; i += 1) {\n\t\t            property = properties[i];\n\t\t            propertyTest = propertyTest || hasOwnProp(input, property);\n\t\t        }\n\n\t\t        return objectTest && propertyTest;\n\t\t    }\n\n\t\t    function isNumberOrStringArray(input) {\n\t\t        var arrayTest = isArray(input),\n\t\t            dataTypeTest = false;\n\t\t        if (arrayTest) {\n\t\t            dataTypeTest =\n\t\t                input.filter(function (item) {\n\t\t                    return !isNumber(item) && isString(input);\n\t\t                }).length === 0;\n\t\t        }\n\t\t        return arrayTest && dataTypeTest;\n\t\t    }\n\n\t\t    function isCalendarSpec(input) {\n\t\t        var objectTest = isObject(input) && !isObjectEmpty(input),\n\t\t            propertyTest = false,\n\t\t            properties = [\n\t\t                'sameDay',\n\t\t                'nextDay',\n\t\t                'lastDay',\n\t\t                'nextWeek',\n\t\t                'lastWeek',\n\t\t                'sameElse',\n\t\t            ],\n\t\t            i,\n\t\t            property;\n\n\t\t        for (i = 0; i < properties.length; i += 1) {\n\t\t            property = properties[i];\n\t\t            propertyTest = propertyTest || hasOwnProp(input, property);\n\t\t        }\n\n\t\t        return objectTest && propertyTest;\n\t\t    }\n\n\t\t    function getCalendarFormat(myMoment, now) {\n\t\t        var diff = myMoment.diff(now, 'days', true);\n\t\t        return diff < -6\n\t\t            ? 'sameElse'\n\t\t            : diff < -1\n\t\t              ? 'lastWeek'\n\t\t              : diff < 0\n\t\t                ? 'lastDay'\n\t\t                : diff < 1\n\t\t                  ? 'sameDay'\n\t\t                  : diff < 2\n\t\t                    ? 'nextDay'\n\t\t                    : diff < 7\n\t\t                      ? 'nextWeek'\n\t\t                      : 'sameElse';\n\t\t    }\n\n\t\t    function calendar$1(time, formats) {\n\t\t        // Support for single parameter, formats only overload to the calendar function\n\t\t        if (arguments.length === 1) {\n\t\t            if (!arguments[0]) {\n\t\t                time = undefined;\n\t\t                formats = undefined;\n\t\t            } else if (isMomentInput(arguments[0])) {\n\t\t                time = arguments[0];\n\t\t                formats = undefined;\n\t\t            } else if (isCalendarSpec(arguments[0])) {\n\t\t                formats = arguments[0];\n\t\t                time = undefined;\n\t\t            }\n\t\t        }\n\t\t        // We want to compare the start of today, vs this.\n\t\t        // Getting start-of-today depends on whether we're local/utc/offset or not.\n\t\t        var now = time || createLocal(),\n\t\t            sod = cloneWithOffset(now, this).startOf('day'),\n\t\t            format = hooks.calendarFormat(this, sod) || 'sameElse',\n\t\t            output =\n\t\t                formats &&\n\t\t                (isFunction(formats[format])\n\t\t                    ? formats[format].call(this, now)\n\t\t                    : formats[format]);\n\n\t\t        return this.format(\n\t\t            output || this.localeData().calendar(format, this, createLocal(now))\n\t\t        );\n\t\t    }\n\n\t\t    function clone() {\n\t\t        return new Moment(this);\n\t\t    }\n\n\t\t    function isAfter(input, units) {\n\t\t        var localInput = isMoment(input) ? input : createLocal(input);\n\t\t        if (!(this.isValid() && localInput.isValid())) {\n\t\t            return false;\n\t\t        }\n\t\t        units = normalizeUnits(units) || 'millisecond';\n\t\t        if (units === 'millisecond') {\n\t\t            return this.valueOf() > localInput.valueOf();\n\t\t        } else {\n\t\t            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n\t\t        }\n\t\t    }\n\n\t\t    function isBefore(input, units) {\n\t\t        var localInput = isMoment(input) ? input : createLocal(input);\n\t\t        if (!(this.isValid() && localInput.isValid())) {\n\t\t            return false;\n\t\t        }\n\t\t        units = normalizeUnits(units) || 'millisecond';\n\t\t        if (units === 'millisecond') {\n\t\t            return this.valueOf() < localInput.valueOf();\n\t\t        } else {\n\t\t            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n\t\t        }\n\t\t    }\n\n\t\t    function isBetween(from, to, units, inclusivity) {\n\t\t        var localFrom = isMoment(from) ? from : createLocal(from),\n\t\t            localTo = isMoment(to) ? to : createLocal(to);\n\t\t        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n\t\t            return false;\n\t\t        }\n\t\t        inclusivity = inclusivity || '()';\n\t\t        return (\n\t\t            (inclusivity[0] === '('\n\t\t                ? this.isAfter(localFrom, units)\n\t\t                : !this.isBefore(localFrom, units)) &&\n\t\t            (inclusivity[1] === ')'\n\t\t                ? this.isBefore(localTo, units)\n\t\t                : !this.isAfter(localTo, units))\n\t\t        );\n\t\t    }\n\n\t\t    function isSame(input, units) {\n\t\t        var localInput = isMoment(input) ? input : createLocal(input),\n\t\t            inputMs;\n\t\t        if (!(this.isValid() && localInput.isValid())) {\n\t\t            return false;\n\t\t        }\n\t\t        units = normalizeUnits(units) || 'millisecond';\n\t\t        if (units === 'millisecond') {\n\t\t            return this.valueOf() === localInput.valueOf();\n\t\t        } else {\n\t\t            inputMs = localInput.valueOf();\n\t\t            return (\n\t\t                this.clone().startOf(units).valueOf() <= inputMs &&\n\t\t                inputMs <= this.clone().endOf(units).valueOf()\n\t\t            );\n\t\t        }\n\t\t    }\n\n\t\t    function isSameOrAfter(input, units) {\n\t\t        return this.isSame(input, units) || this.isAfter(input, units);\n\t\t    }\n\n\t\t    function isSameOrBefore(input, units) {\n\t\t        return this.isSame(input, units) || this.isBefore(input, units);\n\t\t    }\n\n\t\t    function diff(input, units, asFloat) {\n\t\t        var that, zoneDelta, output;\n\n\t\t        if (!this.isValid()) {\n\t\t            return NaN;\n\t\t        }\n\n\t\t        that = cloneWithOffset(input, this);\n\n\t\t        if (!that.isValid()) {\n\t\t            return NaN;\n\t\t        }\n\n\t\t        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n\t\t        units = normalizeUnits(units);\n\n\t\t        switch (units) {\n\t\t            case 'year':\n\t\t                output = monthDiff(this, that) / 12;\n\t\t                break;\n\t\t            case 'month':\n\t\t                output = monthDiff(this, that);\n\t\t                break;\n\t\t            case 'quarter':\n\t\t                output = monthDiff(this, that) / 3;\n\t\t                break;\n\t\t            case 'second':\n\t\t                output = (this - that) / 1e3;\n\t\t                break; // 1000\n\t\t            case 'minute':\n\t\t                output = (this - that) / 6e4;\n\t\t                break; // 1000 * 60\n\t\t            case 'hour':\n\t\t                output = (this - that) / 36e5;\n\t\t                break; // 1000 * 60 * 60\n\t\t            case 'day':\n\t\t                output = (this - that - zoneDelta) / 864e5;\n\t\t                break; // 1000 * 60 * 60 * 24, negate dst\n\t\t            case 'week':\n\t\t                output = (this - that - zoneDelta) / 6048e5;\n\t\t                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n\t\t            default:\n\t\t                output = this - that;\n\t\t        }\n\n\t\t        return asFloat ? output : absFloor(output);\n\t\t    }\n\n\t\t    function monthDiff(a, b) {\n\t\t        if (a.date() < b.date()) {\n\t\t            // end-of-month calculations work correct when the start month has more\n\t\t            // days than the end month.\n\t\t            return -monthDiff(b, a);\n\t\t        }\n\t\t        // difference in months\n\t\t        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n\t\t            // b is in (anchor - 1 month, anchor + 1 month)\n\t\t            anchor = a.clone().add(wholeMonthDiff, 'months'),\n\t\t            anchor2,\n\t\t            adjust;\n\n\t\t        if (b - anchor < 0) {\n\t\t            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n\t\t            // linear across the month\n\t\t            adjust = (b - anchor) / (anchor - anchor2);\n\t\t        } else {\n\t\t            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n\t\t            // linear across the month\n\t\t            adjust = (b - anchor) / (anchor2 - anchor);\n\t\t        }\n\n\t\t        //check for negative zero, return zero if negative zero\n\t\t        return -(wholeMonthDiff + adjust) || 0;\n\t\t    }\n\n\t\t    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\t\t    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n\t\t    function toString() {\n\t\t        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n\t\t    }\n\n\t\t    function toISOString(keepOffset) {\n\t\t        if (!this.isValid()) {\n\t\t            return null;\n\t\t        }\n\t\t        var utc = keepOffset !== true,\n\t\t            m = utc ? this.clone().utc() : this;\n\t\t        if (m.year() < 0 || m.year() > 9999) {\n\t\t            return formatMoment(\n\t\t                m,\n\t\t                utc\n\t\t                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n\t\t                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n\t\t            );\n\t\t        }\n\t\t        if (isFunction(Date.prototype.toISOString)) {\n\t\t            // native implementation is ~50x faster, use it when we can\n\t\t            if (utc) {\n\t\t                return this.toDate().toISOString();\n\t\t            } else {\n\t\t                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n\t\t                    .toISOString()\n\t\t                    .replace('Z', formatMoment(m, 'Z'));\n\t\t            }\n\t\t        }\n\t\t        return formatMoment(\n\t\t            m,\n\t\t            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n\t\t        );\n\t\t    }\n\n\t\t    /**\n\t\t     * Return a human readable representation of a moment that can\n\t\t     * also be evaluated to get a new moment which is the same\n\t\t     *\n\t\t     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n\t\t     */\n\t\t    function inspect() {\n\t\t        if (!this.isValid()) {\n\t\t            return 'moment.invalid(/* ' + this._i + ' */)';\n\t\t        }\n\t\t        var func = 'moment',\n\t\t            zone = '',\n\t\t            prefix,\n\t\t            year,\n\t\t            datetime,\n\t\t            suffix;\n\t\t        if (!this.isLocal()) {\n\t\t            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n\t\t            zone = 'Z';\n\t\t        }\n\t\t        prefix = '[' + func + '(\"]';\n\t\t        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n\t\t        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n\t\t        suffix = zone + '[\")]';\n\n\t\t        return this.format(prefix + year + datetime + suffix);\n\t\t    }\n\n\t\t    function format(inputString) {\n\t\t        if (!inputString) {\n\t\t            inputString = this.isUtc()\n\t\t                ? hooks.defaultFormatUtc\n\t\t                : hooks.defaultFormat;\n\t\t        }\n\t\t        var output = formatMoment(this, inputString);\n\t\t        return this.localeData().postformat(output);\n\t\t    }\n\n\t\t    function from(time, withoutSuffix) {\n\t\t        if (\n\t\t            this.isValid() &&\n\t\t            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n\t\t        ) {\n\t\t            return createDuration({ to: this, from: time })\n\t\t                .locale(this.locale())\n\t\t                .humanize(!withoutSuffix);\n\t\t        } else {\n\t\t            return this.localeData().invalidDate();\n\t\t        }\n\t\t    }\n\n\t\t    function fromNow(withoutSuffix) {\n\t\t        return this.from(createLocal(), withoutSuffix);\n\t\t    }\n\n\t\t    function to(time, withoutSuffix) {\n\t\t        if (\n\t\t            this.isValid() &&\n\t\t            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n\t\t        ) {\n\t\t            return createDuration({ from: this, to: time })\n\t\t                .locale(this.locale())\n\t\t                .humanize(!withoutSuffix);\n\t\t        } else {\n\t\t            return this.localeData().invalidDate();\n\t\t        }\n\t\t    }\n\n\t\t    function toNow(withoutSuffix) {\n\t\t        return this.to(createLocal(), withoutSuffix);\n\t\t    }\n\n\t\t    // If passed a locale key, it will set the locale for this\n\t\t    // instance.  Otherwise, it will return the locale configuration\n\t\t    // variables for this instance.\n\t\t    function locale(key) {\n\t\t        var newLocaleData;\n\n\t\t        if (key === undefined) {\n\t\t            return this._locale._abbr;\n\t\t        } else {\n\t\t            newLocaleData = getLocale(key);\n\t\t            if (newLocaleData != null) {\n\t\t                this._locale = newLocaleData;\n\t\t            }\n\t\t            return this;\n\t\t        }\n\t\t    }\n\n\t\t    var lang = deprecate(\n\t\t        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n\t\t        function (key) {\n\t\t            if (key === undefined) {\n\t\t                return this.localeData();\n\t\t            } else {\n\t\t                return this.locale(key);\n\t\t            }\n\t\t        }\n\t\t    );\n\n\t\t    function localeData() {\n\t\t        return this._locale;\n\t\t    }\n\n\t\t    var MS_PER_SECOND = 1000,\n\t\t        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n\t\t        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n\t\t        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n\t\t    // actual modulo - handles negative numbers (for dates before 1970):\n\t\t    function mod$1(dividend, divisor) {\n\t\t        return ((dividend % divisor) + divisor) % divisor;\n\t\t    }\n\n\t\t    function localStartOfDate(y, m, d) {\n\t\t        // the date constructor remaps years 0-99 to 1900-1999\n\t\t        if (y < 100 && y >= 0) {\n\t\t            // preserve leap years using a full 400 year cycle, then reset\n\t\t            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n\t\t        } else {\n\t\t            return new Date(y, m, d).valueOf();\n\t\t        }\n\t\t    }\n\n\t\t    function utcStartOfDate(y, m, d) {\n\t\t        // Date.UTC remaps years 0-99 to 1900-1999\n\t\t        if (y < 100 && y >= 0) {\n\t\t            // preserve leap years using a full 400 year cycle, then reset\n\t\t            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n\t\t        } else {\n\t\t            return Date.UTC(y, m, d);\n\t\t        }\n\t\t    }\n\n\t\t    function startOf(units) {\n\t\t        var time, startOfDate;\n\t\t        units = normalizeUnits(units);\n\t\t        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n\t\t            return this;\n\t\t        }\n\n\t\t        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n\t\t        switch (units) {\n\t\t            case 'year':\n\t\t                time = startOfDate(this.year(), 0, 1);\n\t\t                break;\n\t\t            case 'quarter':\n\t\t                time = startOfDate(\n\t\t                    this.year(),\n\t\t                    this.month() - (this.month() % 3),\n\t\t                    1\n\t\t                );\n\t\t                break;\n\t\t            case 'month':\n\t\t                time = startOfDate(this.year(), this.month(), 1);\n\t\t                break;\n\t\t            case 'week':\n\t\t                time = startOfDate(\n\t\t                    this.year(),\n\t\t                    this.month(),\n\t\t                    this.date() - this.weekday()\n\t\t                );\n\t\t                break;\n\t\t            case 'isoWeek':\n\t\t                time = startOfDate(\n\t\t                    this.year(),\n\t\t                    this.month(),\n\t\t                    this.date() - (this.isoWeekday() - 1)\n\t\t                );\n\t\t                break;\n\t\t            case 'day':\n\t\t            case 'date':\n\t\t                time = startOfDate(this.year(), this.month(), this.date());\n\t\t                break;\n\t\t            case 'hour':\n\t\t                time = this._d.valueOf();\n\t\t                time -= mod$1(\n\t\t                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n\t\t                    MS_PER_HOUR\n\t\t                );\n\t\t                break;\n\t\t            case 'minute':\n\t\t                time = this._d.valueOf();\n\t\t                time -= mod$1(time, MS_PER_MINUTE);\n\t\t                break;\n\t\t            case 'second':\n\t\t                time = this._d.valueOf();\n\t\t                time -= mod$1(time, MS_PER_SECOND);\n\t\t                break;\n\t\t        }\n\n\t\t        this._d.setTime(time);\n\t\t        hooks.updateOffset(this, true);\n\t\t        return this;\n\t\t    }\n\n\t\t    function endOf(units) {\n\t\t        var time, startOfDate;\n\t\t        units = normalizeUnits(units);\n\t\t        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n\t\t            return this;\n\t\t        }\n\n\t\t        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n\t\t        switch (units) {\n\t\t            case 'year':\n\t\t                time = startOfDate(this.year() + 1, 0, 1) - 1;\n\t\t                break;\n\t\t            case 'quarter':\n\t\t                time =\n\t\t                    startOfDate(\n\t\t                        this.year(),\n\t\t                        this.month() - (this.month() % 3) + 3,\n\t\t                        1\n\t\t                    ) - 1;\n\t\t                break;\n\t\t            case 'month':\n\t\t                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n\t\t                break;\n\t\t            case 'week':\n\t\t                time =\n\t\t                    startOfDate(\n\t\t                        this.year(),\n\t\t                        this.month(),\n\t\t                        this.date() - this.weekday() + 7\n\t\t                    ) - 1;\n\t\t                break;\n\t\t            case 'isoWeek':\n\t\t                time =\n\t\t                    startOfDate(\n\t\t                        this.year(),\n\t\t                        this.month(),\n\t\t                        this.date() - (this.isoWeekday() - 1) + 7\n\t\t                    ) - 1;\n\t\t                break;\n\t\t            case 'day':\n\t\t            case 'date':\n\t\t                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n\t\t                break;\n\t\t            case 'hour':\n\t\t                time = this._d.valueOf();\n\t\t                time +=\n\t\t                    MS_PER_HOUR -\n\t\t                    mod$1(\n\t\t                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n\t\t                        MS_PER_HOUR\n\t\t                    ) -\n\t\t                    1;\n\t\t                break;\n\t\t            case 'minute':\n\t\t                time = this._d.valueOf();\n\t\t                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n\t\t                break;\n\t\t            case 'second':\n\t\t                time = this._d.valueOf();\n\t\t                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n\t\t                break;\n\t\t        }\n\n\t\t        this._d.setTime(time);\n\t\t        hooks.updateOffset(this, true);\n\t\t        return this;\n\t\t    }\n\n\t\t    function valueOf() {\n\t\t        return this._d.valueOf() - (this._offset || 0) * 60000;\n\t\t    }\n\n\t\t    function unix() {\n\t\t        return Math.floor(this.valueOf() / 1000);\n\t\t    }\n\n\t\t    function toDate() {\n\t\t        return new Date(this.valueOf());\n\t\t    }\n\n\t\t    function toArray() {\n\t\t        var m = this;\n\t\t        return [\n\t\t            m.year(),\n\t\t            m.month(),\n\t\t            m.date(),\n\t\t            m.hour(),\n\t\t            m.minute(),\n\t\t            m.second(),\n\t\t            m.millisecond(),\n\t\t        ];\n\t\t    }\n\n\t\t    function toObject() {\n\t\t        var m = this;\n\t\t        return {\n\t\t            years: m.year(),\n\t\t            months: m.month(),\n\t\t            date: m.date(),\n\t\t            hours: m.hours(),\n\t\t            minutes: m.minutes(),\n\t\t            seconds: m.seconds(),\n\t\t            milliseconds: m.milliseconds(),\n\t\t        };\n\t\t    }\n\n\t\t    function toJSON() {\n\t\t        // new Date(NaN).toJSON() === null\n\t\t        return this.isValid() ? this.toISOString() : null;\n\t\t    }\n\n\t\t    function isValid$2() {\n\t\t        return isValid(this);\n\t\t    }\n\n\t\t    function parsingFlags() {\n\t\t        return extend({}, getParsingFlags(this));\n\t\t    }\n\n\t\t    function invalidAt() {\n\t\t        return getParsingFlags(this).overflow;\n\t\t    }\n\n\t\t    function creationData() {\n\t\t        return {\n\t\t            input: this._i,\n\t\t            format: this._f,\n\t\t            locale: this._locale,\n\t\t            isUTC: this._isUTC,\n\t\t            strict: this._strict,\n\t\t        };\n\t\t    }\n\n\t\t    addFormatToken('N', 0, 0, 'eraAbbr');\n\t\t    addFormatToken('NN', 0, 0, 'eraAbbr');\n\t\t    addFormatToken('NNN', 0, 0, 'eraAbbr');\n\t\t    addFormatToken('NNNN', 0, 0, 'eraName');\n\t\t    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n\t\t    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n\t\t    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n\t\t    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n\t\t    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n\t\t    addRegexToken('N', matchEraAbbr);\n\t\t    addRegexToken('NN', matchEraAbbr);\n\t\t    addRegexToken('NNN', matchEraAbbr);\n\t\t    addRegexToken('NNNN', matchEraName);\n\t\t    addRegexToken('NNNNN', matchEraNarrow);\n\n\t\t    addParseToken(\n\t\t        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n\t\t        function (input, array, config, token) {\n\t\t            var era = config._locale.erasParse(input, token, config._strict);\n\t\t            if (era) {\n\t\t                getParsingFlags(config).era = era;\n\t\t            } else {\n\t\t                getParsingFlags(config).invalidEra = input;\n\t\t            }\n\t\t        }\n\t\t    );\n\n\t\t    addRegexToken('y', matchUnsigned);\n\t\t    addRegexToken('yy', matchUnsigned);\n\t\t    addRegexToken('yyy', matchUnsigned);\n\t\t    addRegexToken('yyyy', matchUnsigned);\n\t\t    addRegexToken('yo', matchEraYearOrdinal);\n\n\t\t    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n\t\t    addParseToken(['yo'], function (input, array, config, token) {\n\t\t        var match;\n\t\t        if (config._locale._eraYearOrdinalRegex) {\n\t\t            match = input.match(config._locale._eraYearOrdinalRegex);\n\t\t        }\n\n\t\t        if (config._locale.eraYearOrdinalParse) {\n\t\t            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n\t\t        } else {\n\t\t            array[YEAR] = parseInt(input, 10);\n\t\t        }\n\t\t    });\n\n\t\t    function localeEras(m, format) {\n\t\t        var i,\n\t\t            l,\n\t\t            date,\n\t\t            eras = this._eras || getLocale('en')._eras;\n\t\t        for (i = 0, l = eras.length; i < l; ++i) {\n\t\t            switch (typeof eras[i].since) {\n\t\t                case 'string':\n\t\t                    // truncate time\n\t\t                    date = hooks(eras[i].since).startOf('day');\n\t\t                    eras[i].since = date.valueOf();\n\t\t                    break;\n\t\t            }\n\n\t\t            switch (typeof eras[i].until) {\n\t\t                case 'undefined':\n\t\t                    eras[i].until = +Infinity;\n\t\t                    break;\n\t\t                case 'string':\n\t\t                    // truncate time\n\t\t                    date = hooks(eras[i].until).startOf('day').valueOf();\n\t\t                    eras[i].until = date.valueOf();\n\t\t                    break;\n\t\t            }\n\t\t        }\n\t\t        return eras;\n\t\t    }\n\n\t\t    function localeErasParse(eraName, format, strict) {\n\t\t        var i,\n\t\t            l,\n\t\t            eras = this.eras(),\n\t\t            name,\n\t\t            abbr,\n\t\t            narrow;\n\t\t        eraName = eraName.toUpperCase();\n\n\t\t        for (i = 0, l = eras.length; i < l; ++i) {\n\t\t            name = eras[i].name.toUpperCase();\n\t\t            abbr = eras[i].abbr.toUpperCase();\n\t\t            narrow = eras[i].narrow.toUpperCase();\n\n\t\t            if (strict) {\n\t\t                switch (format) {\n\t\t                    case 'N':\n\t\t                    case 'NN':\n\t\t                    case 'NNN':\n\t\t                        if (abbr === eraName) {\n\t\t                            return eras[i];\n\t\t                        }\n\t\t                        break;\n\n\t\t                    case 'NNNN':\n\t\t                        if (name === eraName) {\n\t\t                            return eras[i];\n\t\t                        }\n\t\t                        break;\n\n\t\t                    case 'NNNNN':\n\t\t                        if (narrow === eraName) {\n\t\t                            return eras[i];\n\t\t                        }\n\t\t                        break;\n\t\t                }\n\t\t            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n\t\t                return eras[i];\n\t\t            }\n\t\t        }\n\t\t    }\n\n\t\t    function localeErasConvertYear(era, year) {\n\t\t        var dir = era.since <= era.until ? 1 : -1;\n\t\t        if (year === undefined) {\n\t\t            return hooks(era.since).year();\n\t\t        } else {\n\t\t            return hooks(era.since).year() + (year - era.offset) * dir;\n\t\t        }\n\t\t    }\n\n\t\t    function getEraName() {\n\t\t        var i,\n\t\t            l,\n\t\t            val,\n\t\t            eras = this.localeData().eras();\n\t\t        for (i = 0, l = eras.length; i < l; ++i) {\n\t\t            // truncate time\n\t\t            val = this.clone().startOf('day').valueOf();\n\n\t\t            if (eras[i].since <= val && val <= eras[i].until) {\n\t\t                return eras[i].name;\n\t\t            }\n\t\t            if (eras[i].until <= val && val <= eras[i].since) {\n\t\t                return eras[i].name;\n\t\t            }\n\t\t        }\n\n\t\t        return '';\n\t\t    }\n\n\t\t    function getEraNarrow() {\n\t\t        var i,\n\t\t            l,\n\t\t            val,\n\t\t            eras = this.localeData().eras();\n\t\t        for (i = 0, l = eras.length; i < l; ++i) {\n\t\t            // truncate time\n\t\t            val = this.clone().startOf('day').valueOf();\n\n\t\t            if (eras[i].since <= val && val <= eras[i].until) {\n\t\t                return eras[i].narrow;\n\t\t            }\n\t\t            if (eras[i].until <= val && val <= eras[i].since) {\n\t\t                return eras[i].narrow;\n\t\t            }\n\t\t        }\n\n\t\t        return '';\n\t\t    }\n\n\t\t    function getEraAbbr() {\n\t\t        var i,\n\t\t            l,\n\t\t            val,\n\t\t            eras = this.localeData().eras();\n\t\t        for (i = 0, l = eras.length; i < l; ++i) {\n\t\t            // truncate time\n\t\t            val = this.clone().startOf('day').valueOf();\n\n\t\t            if (eras[i].since <= val && val <= eras[i].until) {\n\t\t                return eras[i].abbr;\n\t\t            }\n\t\t            if (eras[i].until <= val && val <= eras[i].since) {\n\t\t                return eras[i].abbr;\n\t\t            }\n\t\t        }\n\n\t\t        return '';\n\t\t    }\n\n\t\t    function getEraYear() {\n\t\t        var i,\n\t\t            l,\n\t\t            dir,\n\t\t            val,\n\t\t            eras = this.localeData().eras();\n\t\t        for (i = 0, l = eras.length; i < l; ++i) {\n\t\t            dir = eras[i].since <= eras[i].until ? 1 : -1;\n\n\t\t            // truncate time\n\t\t            val = this.clone().startOf('day').valueOf();\n\n\t\t            if (\n\t\t                (eras[i].since <= val && val <= eras[i].until) ||\n\t\t                (eras[i].until <= val && val <= eras[i].since)\n\t\t            ) {\n\t\t                return (\n\t\t                    (this.year() - hooks(eras[i].since).year()) * dir +\n\t\t                    eras[i].offset\n\t\t                );\n\t\t            }\n\t\t        }\n\n\t\t        return this.year();\n\t\t    }\n\n\t\t    function erasNameRegex(isStrict) {\n\t\t        if (!hasOwnProp(this, '_erasNameRegex')) {\n\t\t            computeErasParse.call(this);\n\t\t        }\n\t\t        return isStrict ? this._erasNameRegex : this._erasRegex;\n\t\t    }\n\n\t\t    function erasAbbrRegex(isStrict) {\n\t\t        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n\t\t            computeErasParse.call(this);\n\t\t        }\n\t\t        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n\t\t    }\n\n\t\t    function erasNarrowRegex(isStrict) {\n\t\t        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n\t\t            computeErasParse.call(this);\n\t\t        }\n\t\t        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n\t\t    }\n\n\t\t    function matchEraAbbr(isStrict, locale) {\n\t\t        return locale.erasAbbrRegex(isStrict);\n\t\t    }\n\n\t\t    function matchEraName(isStrict, locale) {\n\t\t        return locale.erasNameRegex(isStrict);\n\t\t    }\n\n\t\t    function matchEraNarrow(isStrict, locale) {\n\t\t        return locale.erasNarrowRegex(isStrict);\n\t\t    }\n\n\t\t    function matchEraYearOrdinal(isStrict, locale) {\n\t\t        return locale._eraYearOrdinalRegex || matchUnsigned;\n\t\t    }\n\n\t\t    function computeErasParse() {\n\t\t        var abbrPieces = [],\n\t\t            namePieces = [],\n\t\t            narrowPieces = [],\n\t\t            mixedPieces = [],\n\t\t            i,\n\t\t            l,\n\t\t            erasName,\n\t\t            erasAbbr,\n\t\t            erasNarrow,\n\t\t            eras = this.eras();\n\n\t\t        for (i = 0, l = eras.length; i < l; ++i) {\n\t\t            erasName = regexEscape(eras[i].name);\n\t\t            erasAbbr = regexEscape(eras[i].abbr);\n\t\t            erasNarrow = regexEscape(eras[i].narrow);\n\n\t\t            namePieces.push(erasName);\n\t\t            abbrPieces.push(erasAbbr);\n\t\t            narrowPieces.push(erasNarrow);\n\t\t            mixedPieces.push(erasName);\n\t\t            mixedPieces.push(erasAbbr);\n\t\t            mixedPieces.push(erasNarrow);\n\t\t        }\n\n\t\t        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t\t        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n\t\t        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n\t\t        this._erasNarrowRegex = new RegExp(\n\t\t            '^(' + narrowPieces.join('|') + ')',\n\t\t            'i'\n\t\t        );\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken(0, ['gg', 2], 0, function () {\n\t\t        return this.weekYear() % 100;\n\t\t    });\n\n\t\t    addFormatToken(0, ['GG', 2], 0, function () {\n\t\t        return this.isoWeekYear() % 100;\n\t\t    });\n\n\t\t    function addWeekYearFormatToken(token, getter) {\n\t\t        addFormatToken(0, [token, token.length], 0, getter);\n\t\t    }\n\n\t\t    addWeekYearFormatToken('gggg', 'weekYear');\n\t\t    addWeekYearFormatToken('ggggg', 'weekYear');\n\t\t    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n\t\t    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n\t\t    // ALIASES\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('G', matchSigned);\n\t\t    addRegexToken('g', matchSigned);\n\t\t    addRegexToken('GG', match1to2, match2);\n\t\t    addRegexToken('gg', match1to2, match2);\n\t\t    addRegexToken('GGGG', match1to4, match4);\n\t\t    addRegexToken('gggg', match1to4, match4);\n\t\t    addRegexToken('GGGGG', match1to6, match6);\n\t\t    addRegexToken('ggggg', match1to6, match6);\n\n\t\t    addWeekParseToken(\n\t\t        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n\t\t        function (input, week, config, token) {\n\t\t            week[token.substr(0, 2)] = toInt(input);\n\t\t        }\n\t\t    );\n\n\t\t    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n\t\t        week[token] = hooks.parseTwoDigitYear(input);\n\t\t    });\n\n\t\t    // MOMENTS\n\n\t\t    function getSetWeekYear(input) {\n\t\t        return getSetWeekYearHelper.call(\n\t\t            this,\n\t\t            input,\n\t\t            this.week(),\n\t\t            this.weekday() + this.localeData()._week.dow,\n\t\t            this.localeData()._week.dow,\n\t\t            this.localeData()._week.doy\n\t\t        );\n\t\t    }\n\n\t\t    function getSetISOWeekYear(input) {\n\t\t        return getSetWeekYearHelper.call(\n\t\t            this,\n\t\t            input,\n\t\t            this.isoWeek(),\n\t\t            this.isoWeekday(),\n\t\t            1,\n\t\t            4\n\t\t        );\n\t\t    }\n\n\t\t    function getISOWeeksInYear() {\n\t\t        return weeksInYear(this.year(), 1, 4);\n\t\t    }\n\n\t\t    function getISOWeeksInISOWeekYear() {\n\t\t        return weeksInYear(this.isoWeekYear(), 1, 4);\n\t\t    }\n\n\t\t    function getWeeksInYear() {\n\t\t        var weekInfo = this.localeData()._week;\n\t\t        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n\t\t    }\n\n\t\t    function getWeeksInWeekYear() {\n\t\t        var weekInfo = this.localeData()._week;\n\t\t        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n\t\t    }\n\n\t\t    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n\t\t        var weeksTarget;\n\t\t        if (input == null) {\n\t\t            return weekOfYear(this, dow, doy).year;\n\t\t        } else {\n\t\t            weeksTarget = weeksInYear(input, dow, doy);\n\t\t            if (week > weeksTarget) {\n\t\t                week = weeksTarget;\n\t\t            }\n\t\t            return setWeekAll.call(this, input, week, weekday, dow, doy);\n\t\t        }\n\t\t    }\n\n\t\t    function setWeekAll(weekYear, week, weekday, dow, doy) {\n\t\t        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n\t\t            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n\t\t        this.year(date.getUTCFullYear());\n\t\t        this.month(date.getUTCMonth());\n\t\t        this.date(date.getUTCDate());\n\t\t        return this;\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('Q', match1);\n\t\t    addParseToken('Q', function (input, array) {\n\t\t        array[MONTH] = (toInt(input) - 1) * 3;\n\t\t    });\n\n\t\t    // MOMENTS\n\n\t\t    function getSetQuarter(input) {\n\t\t        return input == null\n\t\t            ? Math.ceil((this.month() + 1) / 3)\n\t\t            : this.month((input - 1) * 3 + (this.month() % 3));\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('D', match1to2, match1to2NoLeadingZero);\n\t\t    addRegexToken('DD', match1to2, match2);\n\t\t    addRegexToken('Do', function (isStrict, locale) {\n\t\t        // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t\t        return isStrict\n\t\t            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n\t\t            : locale._dayOfMonthOrdinalParseLenient;\n\t\t    });\n\n\t\t    addParseToken(['D', 'DD'], DATE);\n\t\t    addParseToken('Do', function (input, array) {\n\t\t        array[DATE] = toInt(input.match(match1to2)[0]);\n\t\t    });\n\n\t\t    // MOMENTS\n\n\t\t    var getSetDayOfMonth = makeGetSet('Date', true);\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('DDD', match1to3);\n\t\t    addRegexToken('DDDD', match3);\n\t\t    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n\t\t        config._dayOfYear = toInt(input);\n\t\t    });\n\n\t\t    // HELPERS\n\n\t\t    // MOMENTS\n\n\t\t    function getSetDayOfYear(input) {\n\t\t        var dayOfYear =\n\t\t            Math.round(\n\t\t                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n\t\t            ) + 1;\n\t\t        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n\t\t    }\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('m', match1to2, match1to2HasZero);\n\t\t    addRegexToken('mm', match1to2, match2);\n\t\t    addParseToken(['m', 'mm'], MINUTE);\n\n\t\t    // MOMENTS\n\n\t\t    var getSetMinute = makeGetSet('Minutes', false);\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('s', ['ss', 2], 0, 'second');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('s', match1to2, match1to2HasZero);\n\t\t    addRegexToken('ss', match1to2, match2);\n\t\t    addParseToken(['s', 'ss'], SECOND);\n\n\t\t    // MOMENTS\n\n\t\t    var getSetSecond = makeGetSet('Seconds', false);\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('S', 0, 0, function () {\n\t\t        return ~~(this.millisecond() / 100);\n\t\t    });\n\n\t\t    addFormatToken(0, ['SS', 2], 0, function () {\n\t\t        return ~~(this.millisecond() / 10);\n\t\t    });\n\n\t\t    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n\t\t    addFormatToken(0, ['SSSS', 4], 0, function () {\n\t\t        return this.millisecond() * 10;\n\t\t    });\n\t\t    addFormatToken(0, ['SSSSS', 5], 0, function () {\n\t\t        return this.millisecond() * 100;\n\t\t    });\n\t\t    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n\t\t        return this.millisecond() * 1000;\n\t\t    });\n\t\t    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n\t\t        return this.millisecond() * 10000;\n\t\t    });\n\t\t    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n\t\t        return this.millisecond() * 100000;\n\t\t    });\n\t\t    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n\t\t        return this.millisecond() * 1000000;\n\t\t    });\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('S', match1to3, match1);\n\t\t    addRegexToken('SS', match1to3, match2);\n\t\t    addRegexToken('SSS', match1to3, match3);\n\n\t\t    var token, getSetMillisecond;\n\t\t    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n\t\t        addRegexToken(token, matchUnsigned);\n\t\t    }\n\n\t\t    function parseMs(input, array) {\n\t\t        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n\t\t    }\n\n\t\t    for (token = 'S'; token.length <= 9; token += 'S') {\n\t\t        addParseToken(token, parseMs);\n\t\t    }\n\n\t\t    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('z', 0, 0, 'zoneAbbr');\n\t\t    addFormatToken('zz', 0, 0, 'zoneName');\n\n\t\t    // MOMENTS\n\n\t\t    function getZoneAbbr() {\n\t\t        return this._isUTC ? 'UTC' : '';\n\t\t    }\n\n\t\t    function getZoneName() {\n\t\t        return this._isUTC ? 'Coordinated Universal Time' : '';\n\t\t    }\n\n\t\t    var proto = Moment.prototype;\n\n\t\t    proto.add = add;\n\t\t    proto.calendar = calendar$1;\n\t\t    proto.clone = clone;\n\t\t    proto.diff = diff;\n\t\t    proto.endOf = endOf;\n\t\t    proto.format = format;\n\t\t    proto.from = from;\n\t\t    proto.fromNow = fromNow;\n\t\t    proto.to = to;\n\t\t    proto.toNow = toNow;\n\t\t    proto.get = stringGet;\n\t\t    proto.invalidAt = invalidAt;\n\t\t    proto.isAfter = isAfter;\n\t\t    proto.isBefore = isBefore;\n\t\t    proto.isBetween = isBetween;\n\t\t    proto.isSame = isSame;\n\t\t    proto.isSameOrAfter = isSameOrAfter;\n\t\t    proto.isSameOrBefore = isSameOrBefore;\n\t\t    proto.isValid = isValid$2;\n\t\t    proto.lang = lang;\n\t\t    proto.locale = locale;\n\t\t    proto.localeData = localeData;\n\t\t    proto.max = prototypeMax;\n\t\t    proto.min = prototypeMin;\n\t\t    proto.parsingFlags = parsingFlags;\n\t\t    proto.set = stringSet;\n\t\t    proto.startOf = startOf;\n\t\t    proto.subtract = subtract;\n\t\t    proto.toArray = toArray;\n\t\t    proto.toObject = toObject;\n\t\t    proto.toDate = toDate;\n\t\t    proto.toISOString = toISOString;\n\t\t    proto.inspect = inspect;\n\t\t    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n\t\t        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n\t\t            return 'Moment<' + this.format() + '>';\n\t\t        };\n\t\t    }\n\t\t    proto.toJSON = toJSON;\n\t\t    proto.toString = toString;\n\t\t    proto.unix = unix;\n\t\t    proto.valueOf = valueOf;\n\t\t    proto.creationData = creationData;\n\t\t    proto.eraName = getEraName;\n\t\t    proto.eraNarrow = getEraNarrow;\n\t\t    proto.eraAbbr = getEraAbbr;\n\t\t    proto.eraYear = getEraYear;\n\t\t    proto.year = getSetYear;\n\t\t    proto.isLeapYear = getIsLeapYear;\n\t\t    proto.weekYear = getSetWeekYear;\n\t\t    proto.isoWeekYear = getSetISOWeekYear;\n\t\t    proto.quarter = proto.quarters = getSetQuarter;\n\t\t    proto.month = getSetMonth;\n\t\t    proto.daysInMonth = getDaysInMonth;\n\t\t    proto.week = proto.weeks = getSetWeek;\n\t\t    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n\t\t    proto.weeksInYear = getWeeksInYear;\n\t\t    proto.weeksInWeekYear = getWeeksInWeekYear;\n\t\t    proto.isoWeeksInYear = getISOWeeksInYear;\n\t\t    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n\t\t    proto.date = getSetDayOfMonth;\n\t\t    proto.day = proto.days = getSetDayOfWeek;\n\t\t    proto.weekday = getSetLocaleDayOfWeek;\n\t\t    proto.isoWeekday = getSetISODayOfWeek;\n\t\t    proto.dayOfYear = getSetDayOfYear;\n\t\t    proto.hour = proto.hours = getSetHour;\n\t\t    proto.minute = proto.minutes = getSetMinute;\n\t\t    proto.second = proto.seconds = getSetSecond;\n\t\t    proto.millisecond = proto.milliseconds = getSetMillisecond;\n\t\t    proto.utcOffset = getSetOffset;\n\t\t    proto.utc = setOffsetToUTC;\n\t\t    proto.local = setOffsetToLocal;\n\t\t    proto.parseZone = setOffsetToParsedOffset;\n\t\t    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n\t\t    proto.isDST = isDaylightSavingTime;\n\t\t    proto.isLocal = isLocal;\n\t\t    proto.isUtcOffset = isUtcOffset;\n\t\t    proto.isUtc = isUtc;\n\t\t    proto.isUTC = isUtc;\n\t\t    proto.zoneAbbr = getZoneAbbr;\n\t\t    proto.zoneName = getZoneName;\n\t\t    proto.dates = deprecate(\n\t\t        'dates accessor is deprecated. Use date instead.',\n\t\t        getSetDayOfMonth\n\t\t    );\n\t\t    proto.months = deprecate(\n\t\t        'months accessor is deprecated. Use month instead',\n\t\t        getSetMonth\n\t\t    );\n\t\t    proto.years = deprecate(\n\t\t        'years accessor is deprecated. Use year instead',\n\t\t        getSetYear\n\t\t    );\n\t\t    proto.zone = deprecate(\n\t\t        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n\t\t        getSetZone\n\t\t    );\n\t\t    proto.isDSTShifted = deprecate(\n\t\t        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n\t\t        isDaylightSavingTimeShifted\n\t\t    );\n\n\t\t    function createUnix(input) {\n\t\t        return createLocal(input * 1000);\n\t\t    }\n\n\t\t    function createInZone() {\n\t\t        return createLocal.apply(null, arguments).parseZone();\n\t\t    }\n\n\t\t    function preParsePostFormat(string) {\n\t\t        return string;\n\t\t    }\n\n\t\t    var proto$1 = Locale.prototype;\n\n\t\t    proto$1.calendar = calendar;\n\t\t    proto$1.longDateFormat = longDateFormat;\n\t\t    proto$1.invalidDate = invalidDate;\n\t\t    proto$1.ordinal = ordinal;\n\t\t    proto$1.preparse = preParsePostFormat;\n\t\t    proto$1.postformat = preParsePostFormat;\n\t\t    proto$1.relativeTime = relativeTime;\n\t\t    proto$1.pastFuture = pastFuture;\n\t\t    proto$1.set = set;\n\t\t    proto$1.eras = localeEras;\n\t\t    proto$1.erasParse = localeErasParse;\n\t\t    proto$1.erasConvertYear = localeErasConvertYear;\n\t\t    proto$1.erasAbbrRegex = erasAbbrRegex;\n\t\t    proto$1.erasNameRegex = erasNameRegex;\n\t\t    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n\t\t    proto$1.months = localeMonths;\n\t\t    proto$1.monthsShort = localeMonthsShort;\n\t\t    proto$1.monthsParse = localeMonthsParse;\n\t\t    proto$1.monthsRegex = monthsRegex;\n\t\t    proto$1.monthsShortRegex = monthsShortRegex;\n\t\t    proto$1.week = localeWeek;\n\t\t    proto$1.firstDayOfYear = localeFirstDayOfYear;\n\t\t    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n\t\t    proto$1.weekdays = localeWeekdays;\n\t\t    proto$1.weekdaysMin = localeWeekdaysMin;\n\t\t    proto$1.weekdaysShort = localeWeekdaysShort;\n\t\t    proto$1.weekdaysParse = localeWeekdaysParse;\n\n\t\t    proto$1.weekdaysRegex = weekdaysRegex;\n\t\t    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n\t\t    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n\t\t    proto$1.isPM = localeIsPM;\n\t\t    proto$1.meridiem = localeMeridiem;\n\n\t\t    function get$1(format, index, field, setter) {\n\t\t        var locale = getLocale(),\n\t\t            utc = createUTC().set(setter, index);\n\t\t        return locale[field](utc, format);\n\t\t    }\n\n\t\t    function listMonthsImpl(format, index, field) {\n\t\t        if (isNumber(format)) {\n\t\t            index = format;\n\t\t            format = undefined;\n\t\t        }\n\n\t\t        format = format || '';\n\n\t\t        if (index != null) {\n\t\t            return get$1(format, index, field, 'month');\n\t\t        }\n\n\t\t        var i,\n\t\t            out = [];\n\t\t        for (i = 0; i < 12; i++) {\n\t\t            out[i] = get$1(format, i, field, 'month');\n\t\t        }\n\t\t        return out;\n\t\t    }\n\n\t\t    // ()\n\t\t    // (5)\n\t\t    // (fmt, 5)\n\t\t    // (fmt)\n\t\t    // (true)\n\t\t    // (true, 5)\n\t\t    // (true, fmt, 5)\n\t\t    // (true, fmt)\n\t\t    function listWeekdaysImpl(localeSorted, format, index, field) {\n\t\t        if (typeof localeSorted === 'boolean') {\n\t\t            if (isNumber(format)) {\n\t\t                index = format;\n\t\t                format = undefined;\n\t\t            }\n\n\t\t            format = format || '';\n\t\t        } else {\n\t\t            format = localeSorted;\n\t\t            index = format;\n\t\t            localeSorted = false;\n\n\t\t            if (isNumber(format)) {\n\t\t                index = format;\n\t\t                format = undefined;\n\t\t            }\n\n\t\t            format = format || '';\n\t\t        }\n\n\t\t        var locale = getLocale(),\n\t\t            shift = localeSorted ? locale._week.dow : 0,\n\t\t            i,\n\t\t            out = [];\n\n\t\t        if (index != null) {\n\t\t            return get$1(format, (index + shift) % 7, field, 'day');\n\t\t        }\n\n\t\t        for (i = 0; i < 7; i++) {\n\t\t            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n\t\t        }\n\t\t        return out;\n\t\t    }\n\n\t\t    function listMonths(format, index) {\n\t\t        return listMonthsImpl(format, index, 'months');\n\t\t    }\n\n\t\t    function listMonthsShort(format, index) {\n\t\t        return listMonthsImpl(format, index, 'monthsShort');\n\t\t    }\n\n\t\t    function listWeekdays(localeSorted, format, index) {\n\t\t        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n\t\t    }\n\n\t\t    function listWeekdaysShort(localeSorted, format, index) {\n\t\t        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n\t\t    }\n\n\t\t    function listWeekdaysMin(localeSorted, format, index) {\n\t\t        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n\t\t    }\n\n\t\t    getSetGlobalLocale('en', {\n\t\t        eras: [\n\t\t            {\n\t\t                since: '0001-01-01',\n\t\t                until: +Infinity,\n\t\t                offset: 1,\n\t\t                name: 'Anno Domini',\n\t\t                narrow: 'AD',\n\t\t                abbr: 'AD',\n\t\t            },\n\t\t            {\n\t\t                since: '0000-12-31',\n\t\t                until: -Infinity,\n\t\t                offset: 1,\n\t\t                name: 'Before Christ',\n\t\t                narrow: 'BC',\n\t\t                abbr: 'BC',\n\t\t            },\n\t\t        ],\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n\t\t        ordinal: function (number) {\n\t\t            var b = number % 10,\n\t\t                output =\n\t\t                    toInt((number % 100) / 10) === 1\n\t\t                        ? 'th'\n\t\t                        : b === 1\n\t\t                          ? 'st'\n\t\t                          : b === 2\n\t\t                            ? 'nd'\n\t\t                            : b === 3\n\t\t                              ? 'rd'\n\t\t                              : 'th';\n\t\t            return number + output;\n\t\t        },\n\t\t    });\n\n\t\t    // Side effect imports\n\n\t\t    hooks.lang = deprecate(\n\t\t        'moment.lang is deprecated. Use moment.locale instead.',\n\t\t        getSetGlobalLocale\n\t\t    );\n\t\t    hooks.langData = deprecate(\n\t\t        'moment.langData is deprecated. Use moment.localeData instead.',\n\t\t        getLocale\n\t\t    );\n\n\t\t    var mathAbs = Math.abs;\n\n\t\t    function abs() {\n\t\t        var data = this._data;\n\n\t\t        this._milliseconds = mathAbs(this._milliseconds);\n\t\t        this._days = mathAbs(this._days);\n\t\t        this._months = mathAbs(this._months);\n\n\t\t        data.milliseconds = mathAbs(data.milliseconds);\n\t\t        data.seconds = mathAbs(data.seconds);\n\t\t        data.minutes = mathAbs(data.minutes);\n\t\t        data.hours = mathAbs(data.hours);\n\t\t        data.months = mathAbs(data.months);\n\t\t        data.years = mathAbs(data.years);\n\n\t\t        return this;\n\t\t    }\n\n\t\t    function addSubtract$1(duration, input, value, direction) {\n\t\t        var other = createDuration(input, value);\n\n\t\t        duration._milliseconds += direction * other._milliseconds;\n\t\t        duration._days += direction * other._days;\n\t\t        duration._months += direction * other._months;\n\n\t\t        return duration._bubble();\n\t\t    }\n\n\t\t    // supports only 2.0-style add(1, 's') or add(duration)\n\t\t    function add$1(input, value) {\n\t\t        return addSubtract$1(this, input, value, 1);\n\t\t    }\n\n\t\t    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n\t\t    function subtract$1(input, value) {\n\t\t        return addSubtract$1(this, input, value, -1);\n\t\t    }\n\n\t\t    function absCeil(number) {\n\t\t        if (number < 0) {\n\t\t            return Math.floor(number);\n\t\t        } else {\n\t\t            return Math.ceil(number);\n\t\t        }\n\t\t    }\n\n\t\t    function bubble() {\n\t\t        var milliseconds = this._milliseconds,\n\t\t            days = this._days,\n\t\t            months = this._months,\n\t\t            data = this._data,\n\t\t            seconds,\n\t\t            minutes,\n\t\t            hours,\n\t\t            years,\n\t\t            monthsFromDays;\n\n\t\t        // if we have a mix of positive and negative values, bubble down first\n\t\t        // check: https://github.com/moment/moment/issues/2166\n\t\t        if (\n\t\t            !(\n\t\t                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n\t\t                (milliseconds <= 0 && days <= 0 && months <= 0)\n\t\t            )\n\t\t        ) {\n\t\t            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n\t\t            days = 0;\n\t\t            months = 0;\n\t\t        }\n\n\t\t        // The following code bubbles up values, see the tests for\n\t\t        // examples of what that means.\n\t\t        data.milliseconds = milliseconds % 1000;\n\n\t\t        seconds = absFloor(milliseconds / 1000);\n\t\t        data.seconds = seconds % 60;\n\n\t\t        minutes = absFloor(seconds / 60);\n\t\t        data.minutes = minutes % 60;\n\n\t\t        hours = absFloor(minutes / 60);\n\t\t        data.hours = hours % 24;\n\n\t\t        days += absFloor(hours / 24);\n\n\t\t        // convert days to months\n\t\t        monthsFromDays = absFloor(daysToMonths(days));\n\t\t        months += monthsFromDays;\n\t\t        days -= absCeil(monthsToDays(monthsFromDays));\n\n\t\t        // 12 months -> 1 year\n\t\t        years = absFloor(months / 12);\n\t\t        months %= 12;\n\n\t\t        data.days = days;\n\t\t        data.months = months;\n\t\t        data.years = years;\n\n\t\t        return this;\n\t\t    }\n\n\t\t    function daysToMonths(days) {\n\t\t        // 400 years have 146097 days (taking into account leap year rules)\n\t\t        // 400 years have 12 months === 4800\n\t\t        return (days * 4800) / 146097;\n\t\t    }\n\n\t\t    function monthsToDays(months) {\n\t\t        // the reverse of daysToMonths\n\t\t        return (months * 146097) / 4800;\n\t\t    }\n\n\t\t    function as(units) {\n\t\t        if (!this.isValid()) {\n\t\t            return NaN;\n\t\t        }\n\t\t        var days,\n\t\t            months,\n\t\t            milliseconds = this._milliseconds;\n\n\t\t        units = normalizeUnits(units);\n\n\t\t        if (units === 'month' || units === 'quarter' || units === 'year') {\n\t\t            days = this._days + milliseconds / 864e5;\n\t\t            months = this._months + daysToMonths(days);\n\t\t            switch (units) {\n\t\t                case 'month':\n\t\t                    return months;\n\t\t                case 'quarter':\n\t\t                    return months / 3;\n\t\t                case 'year':\n\t\t                    return months / 12;\n\t\t            }\n\t\t        } else {\n\t\t            // handle milliseconds separately because of floating point math errors (issue #1867)\n\t\t            days = this._days + Math.round(monthsToDays(this._months));\n\t\t            switch (units) {\n\t\t                case 'week':\n\t\t                    return days / 7 + milliseconds / 6048e5;\n\t\t                case 'day':\n\t\t                    return days + milliseconds / 864e5;\n\t\t                case 'hour':\n\t\t                    return days * 24 + milliseconds / 36e5;\n\t\t                case 'minute':\n\t\t                    return days * 1440 + milliseconds / 6e4;\n\t\t                case 'second':\n\t\t                    return days * 86400 + milliseconds / 1000;\n\t\t                // Math.floor prevents floating point math errors here\n\t\t                case 'millisecond':\n\t\t                    return Math.floor(days * 864e5) + milliseconds;\n\t\t                default:\n\t\t                    throw new Error('Unknown unit ' + units);\n\t\t            }\n\t\t        }\n\t\t    }\n\n\t\t    function makeAs(alias) {\n\t\t        return function () {\n\t\t            return this.as(alias);\n\t\t        };\n\t\t    }\n\n\t\t    var asMilliseconds = makeAs('ms'),\n\t\t        asSeconds = makeAs('s'),\n\t\t        asMinutes = makeAs('m'),\n\t\t        asHours = makeAs('h'),\n\t\t        asDays = makeAs('d'),\n\t\t        asWeeks = makeAs('w'),\n\t\t        asMonths = makeAs('M'),\n\t\t        asQuarters = makeAs('Q'),\n\t\t        asYears = makeAs('y'),\n\t\t        valueOf$1 = asMilliseconds;\n\n\t\t    function clone$1() {\n\t\t        return createDuration(this);\n\t\t    }\n\n\t\t    function get$2(units) {\n\t\t        units = normalizeUnits(units);\n\t\t        return this.isValid() ? this[units + 's']() : NaN;\n\t\t    }\n\n\t\t    function makeGetter(name) {\n\t\t        return function () {\n\t\t            return this.isValid() ? this._data[name] : NaN;\n\t\t        };\n\t\t    }\n\n\t\t    var milliseconds = makeGetter('milliseconds'),\n\t\t        seconds = makeGetter('seconds'),\n\t\t        minutes = makeGetter('minutes'),\n\t\t        hours = makeGetter('hours'),\n\t\t        days = makeGetter('days'),\n\t\t        months = makeGetter('months'),\n\t\t        years = makeGetter('years');\n\n\t\t    function weeks() {\n\t\t        return absFloor(this.days() / 7);\n\t\t    }\n\n\t\t    var round = Math.round,\n\t\t        thresholds = {\n\t\t            ss: 44, // a few seconds to seconds\n\t\t            s: 45, // seconds to minute\n\t\t            m: 45, // minutes to hour\n\t\t            h: 22, // hours to day\n\t\t            d: 26, // days to month/week\n\t\t            w: null, // weeks to month\n\t\t            M: 11, // months to year\n\t\t        };\n\n\t\t    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\t\t    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n\t\t        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n\t\t    }\n\n\t\t    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n\t\t        var duration = createDuration(posNegDuration).abs(),\n\t\t            seconds = round(duration.as('s')),\n\t\t            minutes = round(duration.as('m')),\n\t\t            hours = round(duration.as('h')),\n\t\t            days = round(duration.as('d')),\n\t\t            months = round(duration.as('M')),\n\t\t            weeks = round(duration.as('w')),\n\t\t            years = round(duration.as('y')),\n\t\t            a =\n\t\t                (seconds <= thresholds.ss && ['s', seconds]) ||\n\t\t                (seconds < thresholds.s && ['ss', seconds]) ||\n\t\t                (minutes <= 1 && ['m']) ||\n\t\t                (minutes < thresholds.m && ['mm', minutes]) ||\n\t\t                (hours <= 1 && ['h']) ||\n\t\t                (hours < thresholds.h && ['hh', hours]) ||\n\t\t                (days <= 1 && ['d']) ||\n\t\t                (days < thresholds.d && ['dd', days]);\n\n\t\t        if (thresholds.w != null) {\n\t\t            a =\n\t\t                a ||\n\t\t                (weeks <= 1 && ['w']) ||\n\t\t                (weeks < thresholds.w && ['ww', weeks]);\n\t\t        }\n\t\t        a = a ||\n\t\t            (months <= 1 && ['M']) ||\n\t\t            (months < thresholds.M && ['MM', months]) ||\n\t\t            (years <= 1 && ['y']) || ['yy', years];\n\n\t\t        a[2] = withoutSuffix;\n\t\t        a[3] = +posNegDuration > 0;\n\t\t        a[4] = locale;\n\t\t        return substituteTimeAgo.apply(null, a);\n\t\t    }\n\n\t\t    // This function allows you to set the rounding function for relative time strings\n\t\t    function getSetRelativeTimeRounding(roundingFunction) {\n\t\t        if (roundingFunction === undefined) {\n\t\t            return round;\n\t\t        }\n\t\t        if (typeof roundingFunction === 'function') {\n\t\t            round = roundingFunction;\n\t\t            return true;\n\t\t        }\n\t\t        return false;\n\t\t    }\n\n\t\t    // This function allows you to set a threshold for relative time strings\n\t\t    function getSetRelativeTimeThreshold(threshold, limit) {\n\t\t        if (thresholds[threshold] === undefined) {\n\t\t            return false;\n\t\t        }\n\t\t        if (limit === undefined) {\n\t\t            return thresholds[threshold];\n\t\t        }\n\t\t        thresholds[threshold] = limit;\n\t\t        if (threshold === 's') {\n\t\t            thresholds.ss = limit - 1;\n\t\t        }\n\t\t        return true;\n\t\t    }\n\n\t\t    function humanize(argWithSuffix, argThresholds) {\n\t\t        if (!this.isValid()) {\n\t\t            return this.localeData().invalidDate();\n\t\t        }\n\n\t\t        var withSuffix = false,\n\t\t            th = thresholds,\n\t\t            locale,\n\t\t            output;\n\n\t\t        if (typeof argWithSuffix === 'object') {\n\t\t            argThresholds = argWithSuffix;\n\t\t            argWithSuffix = false;\n\t\t        }\n\t\t        if (typeof argWithSuffix === 'boolean') {\n\t\t            withSuffix = argWithSuffix;\n\t\t        }\n\t\t        if (typeof argThresholds === 'object') {\n\t\t            th = Object.assign({}, thresholds, argThresholds);\n\t\t            if (argThresholds.s != null && argThresholds.ss == null) {\n\t\t                th.ss = argThresholds.s - 1;\n\t\t            }\n\t\t        }\n\n\t\t        locale = this.localeData();\n\t\t        output = relativeTime$1(this, !withSuffix, th, locale);\n\n\t\t        if (withSuffix) {\n\t\t            output = locale.pastFuture(+this, output);\n\t\t        }\n\n\t\t        return locale.postformat(output);\n\t\t    }\n\n\t\t    var abs$1 = Math.abs;\n\n\t\t    function sign(x) {\n\t\t        return (x > 0) - (x < 0) || +x;\n\t\t    }\n\n\t\t    function toISOString$1() {\n\t\t        // for ISO strings we do not use the normal bubbling rules:\n\t\t        //  * milliseconds bubble up until they become hours\n\t\t        //  * days do not bubble at all\n\t\t        //  * months bubble up until they become years\n\t\t        // This is because there is no context-free conversion between hours and days\n\t\t        // (think of clock changes)\n\t\t        // and also not between days and months (28-31 days per month)\n\t\t        if (!this.isValid()) {\n\t\t            return this.localeData().invalidDate();\n\t\t        }\n\n\t\t        var seconds = abs$1(this._milliseconds) / 1000,\n\t\t            days = abs$1(this._days),\n\t\t            months = abs$1(this._months),\n\t\t            minutes,\n\t\t            hours,\n\t\t            years,\n\t\t            s,\n\t\t            total = this.asSeconds(),\n\t\t            totalSign,\n\t\t            ymSign,\n\t\t            daysSign,\n\t\t            hmsSign;\n\n\t\t        if (!total) {\n\t\t            // this is the same as C#'s (Noda) and python (isodate)...\n\t\t            // but not other JS (goog.date)\n\t\t            return 'P0D';\n\t\t        }\n\n\t\t        // 3600 seconds -> 60 minutes -> 1 hour\n\t\t        minutes = absFloor(seconds / 60);\n\t\t        hours = absFloor(minutes / 60);\n\t\t        seconds %= 60;\n\t\t        minutes %= 60;\n\n\t\t        // 12 months -> 1 year\n\t\t        years = absFloor(months / 12);\n\t\t        months %= 12;\n\n\t\t        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\t\t        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n\t\t        totalSign = total < 0 ? '-' : '';\n\t\t        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n\t\t        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n\t\t        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n\t\t        return (\n\t\t            totalSign +\n\t\t            'P' +\n\t\t            (years ? ymSign + years + 'Y' : '') +\n\t\t            (months ? ymSign + months + 'M' : '') +\n\t\t            (days ? daysSign + days + 'D' : '') +\n\t\t            (hours || minutes || seconds ? 'T' : '') +\n\t\t            (hours ? hmsSign + hours + 'H' : '') +\n\t\t            (minutes ? hmsSign + minutes + 'M' : '') +\n\t\t            (seconds ? hmsSign + s + 'S' : '')\n\t\t        );\n\t\t    }\n\n\t\t    var proto$2 = Duration.prototype;\n\n\t\t    proto$2.isValid = isValid$1;\n\t\t    proto$2.abs = abs;\n\t\t    proto$2.add = add$1;\n\t\t    proto$2.subtract = subtract$1;\n\t\t    proto$2.as = as;\n\t\t    proto$2.asMilliseconds = asMilliseconds;\n\t\t    proto$2.asSeconds = asSeconds;\n\t\t    proto$2.asMinutes = asMinutes;\n\t\t    proto$2.asHours = asHours;\n\t\t    proto$2.asDays = asDays;\n\t\t    proto$2.asWeeks = asWeeks;\n\t\t    proto$2.asMonths = asMonths;\n\t\t    proto$2.asQuarters = asQuarters;\n\t\t    proto$2.asYears = asYears;\n\t\t    proto$2.valueOf = valueOf$1;\n\t\t    proto$2._bubble = bubble;\n\t\t    proto$2.clone = clone$1;\n\t\t    proto$2.get = get$2;\n\t\t    proto$2.milliseconds = milliseconds;\n\t\t    proto$2.seconds = seconds;\n\t\t    proto$2.minutes = minutes;\n\t\t    proto$2.hours = hours;\n\t\t    proto$2.days = days;\n\t\t    proto$2.weeks = weeks;\n\t\t    proto$2.months = months;\n\t\t    proto$2.years = years;\n\t\t    proto$2.humanize = humanize;\n\t\t    proto$2.toISOString = toISOString$1;\n\t\t    proto$2.toString = toISOString$1;\n\t\t    proto$2.toJSON = toISOString$1;\n\t\t    proto$2.locale = locale;\n\t\t    proto$2.localeData = localeData;\n\n\t\t    proto$2.toIsoString = deprecate(\n\t\t        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n\t\t        toISOString$1\n\t\t    );\n\t\t    proto$2.lang = lang;\n\n\t\t    // FORMATTING\n\n\t\t    addFormatToken('X', 0, 0, 'unix');\n\t\t    addFormatToken('x', 0, 0, 'valueOf');\n\n\t\t    // PARSING\n\n\t\t    addRegexToken('x', matchSigned);\n\t\t    addRegexToken('X', matchTimestamp);\n\t\t    addParseToken('X', function (input, array, config) {\n\t\t        config._d = new Date(parseFloat(input) * 1000);\n\t\t    });\n\t\t    addParseToken('x', function (input, array, config) {\n\t\t        config._d = new Date(toInt(input));\n\t\t    });\n\n\t\t    //! moment.js\n\n\t\t    hooks.version = '2.30.1';\n\n\t\t    setHookCallback(createLocal);\n\n\t\t    hooks.fn = proto;\n\t\t    hooks.min = min;\n\t\t    hooks.max = max;\n\t\t    hooks.now = now;\n\t\t    hooks.utc = createUTC;\n\t\t    hooks.unix = createUnix;\n\t\t    hooks.months = listMonths;\n\t\t    hooks.isDate = isDate;\n\t\t    hooks.locale = getSetGlobalLocale;\n\t\t    hooks.invalid = createInvalid;\n\t\t    hooks.duration = createDuration;\n\t\t    hooks.isMoment = isMoment;\n\t\t    hooks.weekdays = listWeekdays;\n\t\t    hooks.parseZone = createInZone;\n\t\t    hooks.localeData = getLocale;\n\t\t    hooks.isDuration = isDuration;\n\t\t    hooks.monthsShort = listMonthsShort;\n\t\t    hooks.weekdaysMin = listWeekdaysMin;\n\t\t    hooks.defineLocale = defineLocale;\n\t\t    hooks.updateLocale = updateLocale;\n\t\t    hooks.locales = listLocales;\n\t\t    hooks.weekdaysShort = listWeekdaysShort;\n\t\t    hooks.normalizeUnits = normalizeUnits;\n\t\t    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n\t\t    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n\t\t    hooks.calendarFormat = getCalendarFormat;\n\t\t    hooks.prototype = proto;\n\n\t\t    // currently HTML5 input type only supports 24-hour formats\n\t\t    hooks.HTML5_FMT = {\n\t\t        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n\t\t        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n\t\t        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n\t\t        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n\t\t        TIME: 'HH:mm', // <input type=\"time\" />\n\t\t        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n\t\t        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n\t\t        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n\t\t        MONTH: 'YYYY-MM', // <input type=\"month\" />\n\t\t    };\n\n\t\t    return hooks;\n\n\t\t}))); \n\t} (moment$5));\n\treturn moment$5.exports;\n}\n\nvar de$1 = de$2.exports;\n\nvar hasRequiredDe;\n\nfunction requireDe () {\n\tif (hasRequiredDe) return de$2.exports;\n\thasRequiredDe = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(de$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t\t        var format = {\n\t\t            m: ['eine Minute', 'einer Minute'],\n\t\t            h: ['eine Stunde', 'einer Stunde'],\n\t\t            d: ['ein Tag', 'einem Tag'],\n\t\t            dd: [number + ' Tage', number + ' Tagen'],\n\t\t            w: ['eine Woche', 'einer Woche'],\n\t\t            M: ['ein Monat', 'einem Monat'],\n\t\t            MM: [number + ' Monate', number + ' Monaten'],\n\t\t            y: ['ein Jahr', 'einem Jahr'],\n\t\t            yy: [number + ' Jahre', number + ' Jahren'],\n\t\t        };\n\t\t        return withoutSuffix ? format[key][0] : format[key][1];\n\t\t    }\n\n\t\t    var de = moment.defineLocale('de', {\n\t\t        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        monthsShort:\n\t\t            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n\t\t        monthsParseExact: true,\n\t\t        weekdays:\n\t\t            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n\t\t                '_'\n\t\t            ),\n\t\t        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n\t\t        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t\t        weekdaysParseExact: true,\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'DD.MM.YYYY',\n\t\t            LL: 'D. MMMM YYYY',\n\t\t            LLL: 'D. MMMM YYYY HH:mm',\n\t\t            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: '[heute um] LT [Uhr]',\n\t\t            sameElse: 'L',\n\t\t            nextDay: '[morgen um] LT [Uhr]',\n\t\t            nextWeek: 'dddd [um] LT [Uhr]',\n\t\t            lastDay: '[gestern um] LT [Uhr]',\n\t\t            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'in %s',\n\t\t            past: 'vor %s',\n\t\t            s: 'ein paar Sekunden',\n\t\t            ss: '%d Sekunden',\n\t\t            m: processRelativeTime,\n\t\t            mm: '%d Minuten',\n\t\t            h: processRelativeTime,\n\t\t            hh: '%d Stunden',\n\t\t            d: processRelativeTime,\n\t\t            dd: processRelativeTime,\n\t\t            w: processRelativeTime,\n\t\t            ww: '%d Wochen',\n\t\t            M: processRelativeTime,\n\t\t            MM: processRelativeTime,\n\t\t            y: processRelativeTime,\n\t\t            yy: processRelativeTime,\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t\t        ordinal: '%d.',\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 4, // The week that contains Jan 4th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return de;\n\n\t\t}))); \n\t} ());\n\treturn de$2.exports;\n}\n\nrequireDe();\n\nvar es$2 = {exports: {}};\n\nvar es$1 = es$2.exports;\n\nvar hasRequiredEs;\n\nfunction requireEs () {\n\tif (hasRequiredEs) return es$2.exports;\n\thasRequiredEs = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(es$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    var monthsShortDot =\n\t\t            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n\t\t                '_'\n\t\t            ),\n\t\t        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n\t\t        monthsParse = [\n\t\t            /^ene/i,\n\t\t            /^feb/i,\n\t\t            /^mar/i,\n\t\t            /^abr/i,\n\t\t            /^may/i,\n\t\t            /^jun/i,\n\t\t            /^jul/i,\n\t\t            /^ago/i,\n\t\t            /^sep/i,\n\t\t            /^oct/i,\n\t\t            /^nov/i,\n\t\t            /^dic/i,\n\t\t        ],\n\t\t        monthsRegex =\n\t\t            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n\t\t    var es = moment.defineLocale('es', {\n\t\t        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        monthsShort: function (m, format) {\n\t\t            if (!m) {\n\t\t                return monthsShortDot;\n\t\t            } else if (/-MMM-/.test(format)) {\n\t\t                return monthsShort[m.month()];\n\t\t            } else {\n\t\t                return monthsShortDot[m.month()];\n\t\t            }\n\t\t        },\n\t\t        monthsRegex: monthsRegex,\n\t\t        monthsShortRegex: monthsRegex,\n\t\t        monthsStrictRegex:\n\t\t            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n\t\t        monthsShortStrictRegex:\n\t\t            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n\t\t        monthsParse: monthsParse,\n\t\t        longMonthsParse: monthsParse,\n\t\t        shortMonthsParse: monthsParse,\n\t\t        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n\t\t        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n\t\t        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n\t\t        weekdaysParseExact: true,\n\t\t        longDateFormat: {\n\t\t            LT: 'H:mm',\n\t\t            LTS: 'H:mm:ss',\n\t\t            L: 'DD/MM/YYYY',\n\t\t            LL: 'D [de] MMMM [de] YYYY',\n\t\t            LLL: 'D [de] MMMM [de] YYYY H:mm',\n\t\t            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: function () {\n\t\t                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n\t\t            },\n\t\t            nextDay: function () {\n\t\t                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n\t\t            },\n\t\t            nextWeek: function () {\n\t\t                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n\t\t            },\n\t\t            lastDay: function () {\n\t\t                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n\t\t            },\n\t\t            lastWeek: function () {\n\t\t                return (\n\t\t                    '[el] dddd [pasado a la' +\n\t\t                    (this.hours() !== 1 ? 's' : '') +\n\t\t                    '] LT'\n\t\t                );\n\t\t            },\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'en %s',\n\t\t            past: 'hace %s',\n\t\t            s: 'unos segundos',\n\t\t            ss: '%d segundos',\n\t\t            m: 'un minuto',\n\t\t            mm: '%d minutos',\n\t\t            h: 'una hora',\n\t\t            hh: '%d horas',\n\t\t            d: 'un día',\n\t\t            dd: '%d días',\n\t\t            w: 'una semana',\n\t\t            ww: '%d semanas',\n\t\t            M: 'un mes',\n\t\t            MM: '%d meses',\n\t\t            y: 'un año',\n\t\t            yy: '%d años',\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t\t        ordinal: '%dº',\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 4, // The week that contains Jan 4th is the first week of the year.\n\t\t        },\n\t\t        invalidDate: 'Fecha inválida',\n\t\t    });\n\n\t\t    return es;\n\n\t\t}))); \n\t} ());\n\treturn es$2.exports;\n}\n\nrequireEs();\n\nvar fr$2 = {exports: {}};\n\nvar fr$1 = fr$2.exports;\n\nvar hasRequiredFr;\n\nfunction requireFr () {\n\tif (hasRequiredFr) return fr$2.exports;\n\thasRequiredFr = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(fr$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    var monthsStrictRegex =\n\t\t            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n\t\t        monthsShortStrictRegex =\n\t\t            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n\t\t        monthsRegex =\n\t\t            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n\t\t        monthsParse = [\n\t\t            /^janv/i,\n\t\t            /^févr/i,\n\t\t            /^mars/i,\n\t\t            /^avr/i,\n\t\t            /^mai/i,\n\t\t            /^juin/i,\n\t\t            /^juil/i,\n\t\t            /^août/i,\n\t\t            /^sept/i,\n\t\t            /^oct/i,\n\t\t            /^nov/i,\n\t\t            /^déc/i,\n\t\t        ];\n\n\t\t    var fr = moment.defineLocale('fr', {\n\t\t        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        monthsShort:\n\t\t            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n\t\t                '_'\n\t\t            ),\n\t\t        monthsRegex: monthsRegex,\n\t\t        monthsShortRegex: monthsRegex,\n\t\t        monthsStrictRegex: monthsStrictRegex,\n\t\t        monthsShortStrictRegex: monthsShortStrictRegex,\n\t\t        monthsParse: monthsParse,\n\t\t        longMonthsParse: monthsParse,\n\t\t        shortMonthsParse: monthsParse,\n\t\t        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n\t\t        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n\t\t        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n\t\t        weekdaysParseExact: true,\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'DD/MM/YYYY',\n\t\t            LL: 'D MMMM YYYY',\n\t\t            LLL: 'D MMMM YYYY HH:mm',\n\t\t            LLLL: 'dddd D MMMM YYYY HH:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: '[Aujourd’hui à] LT',\n\t\t            nextDay: '[Demain à] LT',\n\t\t            nextWeek: 'dddd [à] LT',\n\t\t            lastDay: '[Hier à] LT',\n\t\t            lastWeek: 'dddd [dernier à] LT',\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'dans %s',\n\t\t            past: 'il y a %s',\n\t\t            s: 'quelques secondes',\n\t\t            ss: '%d secondes',\n\t\t            m: 'une minute',\n\t\t            mm: '%d minutes',\n\t\t            h: 'une heure',\n\t\t            hh: '%d heures',\n\t\t            d: 'un jour',\n\t\t            dd: '%d jours',\n\t\t            w: 'une semaine',\n\t\t            ww: '%d semaines',\n\t\t            M: 'un mois',\n\t\t            MM: '%d mois',\n\t\t            y: 'un an',\n\t\t            yy: '%d ans',\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n\t\t        ordinal: function (number, period) {\n\t\t            switch (period) {\n\t\t                // TODO: Return 'e' when day of month > 1. Move this case inside\n\t\t                // block for masculine words below.\n\t\t                // See https://github.com/moment/moment/issues/3375\n\t\t                case 'D':\n\t\t                    return number + (number === 1 ? 'er' : '');\n\n\t\t                // Words with masculine grammatical gender: mois, trimestre, jour\n\t\t                default:\n\t\t                case 'M':\n\t\t                case 'Q':\n\t\t                case 'DDD':\n\t\t                case 'd':\n\t\t                    return number + (number === 1 ? 'er' : 'e');\n\n\t\t                // Words with feminine grammatical gender: semaine\n\t\t                case 'w':\n\t\t                case 'W':\n\t\t                    return number + (number === 1 ? 're' : 'e');\n\t\t            }\n\t\t        },\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 4, // The week that contains Jan 4th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return fr;\n\n\t\t}))); \n\t} ());\n\treturn fr$2.exports;\n}\n\nrequireFr();\n\nvar it$2 = {exports: {}};\n\nvar it$1 = it$2.exports;\n\nvar hasRequiredIt;\n\nfunction requireIt () {\n\tif (hasRequiredIt) return it$2.exports;\n\thasRequiredIt = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(it$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    var it = moment.defineLocale('it', {\n\t\t        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n\t\t        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n\t\t        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'DD/MM/YYYY',\n\t\t            LL: 'D MMMM YYYY',\n\t\t            LLL: 'D MMMM YYYY HH:mm',\n\t\t            LLLL: 'dddd D MMMM YYYY HH:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: function () {\n\t\t                return (\n\t\t                    '[Oggi a' +\n\t\t                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n\t\t                    ']LT'\n\t\t                );\n\t\t            },\n\t\t            nextDay: function () {\n\t\t                return (\n\t\t                    '[Domani a' +\n\t\t                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n\t\t                    ']LT'\n\t\t                );\n\t\t            },\n\t\t            nextWeek: function () {\n\t\t                return (\n\t\t                    'dddd [a' +\n\t\t                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n\t\t                    ']LT'\n\t\t                );\n\t\t            },\n\t\t            lastDay: function () {\n\t\t                return (\n\t\t                    '[Ieri a' +\n\t\t                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n\t\t                    ']LT'\n\t\t                );\n\t\t            },\n\t\t            lastWeek: function () {\n\t\t                switch (this.day()) {\n\t\t                    case 0:\n\t\t                        return (\n\t\t                            '[La scorsa] dddd [a' +\n\t\t                            (this.hours() > 1\n\t\t                                ? 'lle '\n\t\t                                : this.hours() === 0\n\t\t                                  ? ' '\n\t\t                                  : \"ll'\") +\n\t\t                            ']LT'\n\t\t                        );\n\t\t                    default:\n\t\t                        return (\n\t\t                            '[Lo scorso] dddd [a' +\n\t\t                            (this.hours() > 1\n\t\t                                ? 'lle '\n\t\t                                : this.hours() === 0\n\t\t                                  ? ' '\n\t\t                                  : \"ll'\") +\n\t\t                            ']LT'\n\t\t                        );\n\t\t                }\n\t\t            },\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'tra %s',\n\t\t            past: '%s fa',\n\t\t            s: 'alcuni secondi',\n\t\t            ss: '%d secondi',\n\t\t            m: 'un minuto',\n\t\t            mm: '%d minuti',\n\t\t            h: \"un'ora\",\n\t\t            hh: '%d ore',\n\t\t            d: 'un giorno',\n\t\t            dd: '%d giorni',\n\t\t            w: 'una settimana',\n\t\t            ww: '%d settimane',\n\t\t            M: 'un mese',\n\t\t            MM: '%d mesi',\n\t\t            y: 'un anno',\n\t\t            yy: '%d anni',\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t\t        ordinal: '%dº',\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 4, // The week that contains Jan 4th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return it;\n\n\t\t}))); \n\t} ());\n\treturn it$2.exports;\n}\n\nrequireIt();\n\nvar ja$2 = {exports: {}};\n\nvar ja$1 = ja$2.exports;\n\nvar hasRequiredJa;\n\nfunction requireJa () {\n\tif (hasRequiredJa) return ja$2.exports;\n\thasRequiredJa = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(ja$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    var ja = moment.defineLocale('ja', {\n\t\t        eras: [\n\t\t            {\n\t\t                since: '2019-05-01',\n\t\t                offset: 1,\n\t\t                name: '令和',\n\t\t                narrow: '㋿',\n\t\t                abbr: 'R',\n\t\t            },\n\t\t            {\n\t\t                since: '1989-01-08',\n\t\t                until: '2019-04-30',\n\t\t                offset: 1,\n\t\t                name: '平成',\n\t\t                narrow: '㍻',\n\t\t                abbr: 'H',\n\t\t            },\n\t\t            {\n\t\t                since: '1926-12-25',\n\t\t                until: '1989-01-07',\n\t\t                offset: 1,\n\t\t                name: '昭和',\n\t\t                narrow: '㍼',\n\t\t                abbr: 'S',\n\t\t            },\n\t\t            {\n\t\t                since: '1912-07-30',\n\t\t                until: '1926-12-24',\n\t\t                offset: 1,\n\t\t                name: '大正',\n\t\t                narrow: '㍽',\n\t\t                abbr: 'T',\n\t\t            },\n\t\t            {\n\t\t                since: '1873-01-01',\n\t\t                until: '1912-07-29',\n\t\t                offset: 6,\n\t\t                name: '明治',\n\t\t                narrow: '㍾',\n\t\t                abbr: 'M',\n\t\t            },\n\t\t            {\n\t\t                since: '0001-01-01',\n\t\t                until: '1873-12-31',\n\t\t                offset: 1,\n\t\t                name: '西暦',\n\t\t                narrow: 'AD',\n\t\t                abbr: 'AD',\n\t\t            },\n\t\t            {\n\t\t                since: '0000-12-31',\n\t\t                until: -Infinity,\n\t\t                offset: 1,\n\t\t                name: '紀元前',\n\t\t                narrow: 'BC',\n\t\t                abbr: 'BC',\n\t\t            },\n\t\t        ],\n\t\t        eraYearOrdinalRegex: /(元|\\d+)年/,\n\t\t        eraYearOrdinalParse: function (input, match) {\n\t\t            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n\t\t        },\n\t\t        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t\t        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n\t\t        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n\t\t        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'YYYY/MM/DD',\n\t\t            LL: 'YYYY年M月D日',\n\t\t            LLL: 'YYYY年M月D日 HH:mm',\n\t\t            LLLL: 'YYYY年M月D日 dddd HH:mm',\n\t\t            l: 'YYYY/MM/DD',\n\t\t            ll: 'YYYY年M月D日',\n\t\t            lll: 'YYYY年M月D日 HH:mm',\n\t\t            llll: 'YYYY年M月D日(ddd) HH:mm',\n\t\t        },\n\t\t        meridiemParse: /午前|午後/i,\n\t\t        isPM: function (input) {\n\t\t            return input === '午後';\n\t\t        },\n\t\t        meridiem: function (hour, minute, isLower) {\n\t\t            if (hour < 12) {\n\t\t                return '午前';\n\t\t            } else {\n\t\t                return '午後';\n\t\t            }\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: '[今日] LT',\n\t\t            nextDay: '[明日] LT',\n\t\t            nextWeek: function (now) {\n\t\t                if (now.week() !== this.week()) {\n\t\t                    return '[来週]dddd LT';\n\t\t                } else {\n\t\t                    return 'dddd LT';\n\t\t                }\n\t\t            },\n\t\t            lastDay: '[昨日] LT',\n\t\t            lastWeek: function (now) {\n\t\t                if (this.week() !== now.week()) {\n\t\t                    return '[先週]dddd LT';\n\t\t                } else {\n\t\t                    return 'dddd LT';\n\t\t                }\n\t\t            },\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n\t\t        ordinal: function (number, period) {\n\t\t            switch (period) {\n\t\t                case 'y':\n\t\t                    return number === 1 ? '元年' : number + '年';\n\t\t                case 'd':\n\t\t                case 'D':\n\t\t                case 'DDD':\n\t\t                    return number + '日';\n\t\t                default:\n\t\t                    return number;\n\t\t            }\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: '%s後',\n\t\t            past: '%s前',\n\t\t            s: '数秒',\n\t\t            ss: '%d秒',\n\t\t            m: '1分',\n\t\t            mm: '%d分',\n\t\t            h: '1時間',\n\t\t            hh: '%d時間',\n\t\t            d: '1日',\n\t\t            dd: '%d日',\n\t\t            M: '1ヶ月',\n\t\t            MM: '%dヶ月',\n\t\t            y: '1年',\n\t\t            yy: '%d年',\n\t\t        },\n\t\t    });\n\n\t\t    return ja;\n\n\t\t}))); \n\t} ());\n\treturn ja$2.exports;\n}\n\nrequireJa();\n\nvar nl$2 = {exports: {}};\n\nvar nl$1 = nl$2.exports;\n\nvar hasRequiredNl;\n\nfunction requireNl () {\n\tif (hasRequiredNl) return nl$2.exports;\n\thasRequiredNl = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(nl$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    var monthsShortWithDots =\n\t\t            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n\t\t        monthsShortWithoutDots =\n\t\t            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n\t\t        monthsParse = [\n\t\t            /^jan/i,\n\t\t            /^feb/i,\n\t\t            /^(maart|mrt\\.?)$/i,\n\t\t            /^apr/i,\n\t\t            /^mei$/i,\n\t\t            /^jun[i.]?$/i,\n\t\t            /^jul[i.]?$/i,\n\t\t            /^aug/i,\n\t\t            /^sep/i,\n\t\t            /^okt/i,\n\t\t            /^nov/i,\n\t\t            /^dec/i,\n\t\t        ],\n\t\t        monthsRegex =\n\t\t            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n\t\t    var nl = moment.defineLocale('nl', {\n\t\t        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        monthsShort: function (m, format) {\n\t\t            if (!m) {\n\t\t                return monthsShortWithDots;\n\t\t            } else if (/-MMM-/.test(format)) {\n\t\t                return monthsShortWithoutDots[m.month()];\n\t\t            } else {\n\t\t                return monthsShortWithDots[m.month()];\n\t\t            }\n\t\t        },\n\n\t\t        monthsRegex: monthsRegex,\n\t\t        monthsShortRegex: monthsRegex,\n\t\t        monthsStrictRegex:\n\t\t            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n\t\t        monthsShortStrictRegex:\n\t\t            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n\t\t        monthsParse: monthsParse,\n\t\t        longMonthsParse: monthsParse,\n\t\t        shortMonthsParse: monthsParse,\n\n\t\t        weekdays:\n\t\t            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n\t\t        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n\t\t        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n\t\t        weekdaysParseExact: true,\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'DD-MM-YYYY',\n\t\t            LL: 'D MMMM YYYY',\n\t\t            LLL: 'D MMMM YYYY HH:mm',\n\t\t            LLLL: 'dddd D MMMM YYYY HH:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: '[vandaag om] LT',\n\t\t            nextDay: '[morgen om] LT',\n\t\t            nextWeek: 'dddd [om] LT',\n\t\t            lastDay: '[gisteren om] LT',\n\t\t            lastWeek: '[afgelopen] dddd [om] LT',\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'over %s',\n\t\t            past: '%s geleden',\n\t\t            s: 'een paar seconden',\n\t\t            ss: '%d seconden',\n\t\t            m: 'één minuut',\n\t\t            mm: '%d minuten',\n\t\t            h: 'één uur',\n\t\t            hh: '%d uur',\n\t\t            d: 'één dag',\n\t\t            dd: '%d dagen',\n\t\t            w: 'één week',\n\t\t            ww: '%d weken',\n\t\t            M: 'één maand',\n\t\t            MM: '%d maanden',\n\t\t            y: 'één jaar',\n\t\t            yy: '%d jaar',\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t\t        ordinal: function (number) {\n\t\t            return (\n\t\t                number +\n\t\t                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n\t\t            );\n\t\t        },\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 4, // The week that contains Jan 4th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return nl;\n\n\t\t}))); \n\t} ());\n\treturn nl$2.exports;\n}\n\nrequireNl();\n\nvar pl$2 = {exports: {}};\n\nvar pl$1 = pl$2.exports;\n\nvar hasRequiredPl;\n\nfunction requirePl () {\n\tif (hasRequiredPl) return pl$2.exports;\n\thasRequiredPl = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(pl$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    var monthsNominative =\n\t\t            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n\t\t                '_'\n\t\t            ),\n\t\t        monthsSubjective =\n\t\t            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n\t\t                '_'\n\t\t            ),\n\t\t        monthsParse = [\n\t\t            /^sty/i,\n\t\t            /^lut/i,\n\t\t            /^mar/i,\n\t\t            /^kwi/i,\n\t\t            /^maj/i,\n\t\t            /^cze/i,\n\t\t            /^lip/i,\n\t\t            /^sie/i,\n\t\t            /^wrz/i,\n\t\t            /^paź/i,\n\t\t            /^lis/i,\n\t\t            /^gru/i,\n\t\t        ];\n\t\t    function plural(n) {\n\t\t        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n\t\t    }\n\t\t    function translate(number, withoutSuffix, key) {\n\t\t        var result = number + ' ';\n\t\t        switch (key) {\n\t\t            case 'ss':\n\t\t                return result + (plural(number) ? 'sekundy' : 'sekund');\n\t\t            case 'm':\n\t\t                return withoutSuffix ? 'minuta' : 'minutę';\n\t\t            case 'mm':\n\t\t                return result + (plural(number) ? 'minuty' : 'minut');\n\t\t            case 'h':\n\t\t                return withoutSuffix ? 'godzina' : 'godzinę';\n\t\t            case 'hh':\n\t\t                return result + (plural(number) ? 'godziny' : 'godzin');\n\t\t            case 'ww':\n\t\t                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n\t\t            case 'MM':\n\t\t                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n\t\t            case 'yy':\n\t\t                return result + (plural(number) ? 'lata' : 'lat');\n\t\t        }\n\t\t    }\n\n\t\t    var pl = moment.defineLocale('pl', {\n\t\t        months: function (momentToFormat, format) {\n\t\t            if (!momentToFormat) {\n\t\t                return monthsNominative;\n\t\t            } else if (/D MMMM/.test(format)) {\n\t\t                return monthsSubjective[momentToFormat.month()];\n\t\t            } else {\n\t\t                return monthsNominative[momentToFormat.month()];\n\t\t            }\n\t\t        },\n\t\t        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n\t\t        monthsParse: monthsParse,\n\t\t        longMonthsParse: monthsParse,\n\t\t        shortMonthsParse: monthsParse,\n\t\t        weekdays:\n\t\t            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n\t\t        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n\t\t        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'DD.MM.YYYY',\n\t\t            LL: 'D MMMM YYYY',\n\t\t            LLL: 'D MMMM YYYY HH:mm',\n\t\t            LLLL: 'dddd, D MMMM YYYY HH:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: '[Dziś o] LT',\n\t\t            nextDay: '[Jutro o] LT',\n\t\t            nextWeek: function () {\n\t\t                switch (this.day()) {\n\t\t                    case 0:\n\t\t                        return '[W niedzielę o] LT';\n\n\t\t                    case 2:\n\t\t                        return '[We wtorek o] LT';\n\n\t\t                    case 3:\n\t\t                        return '[W środę o] LT';\n\n\t\t                    case 6:\n\t\t                        return '[W sobotę o] LT';\n\n\t\t                    default:\n\t\t                        return '[W] dddd [o] LT';\n\t\t                }\n\t\t            },\n\t\t            lastDay: '[Wczoraj o] LT',\n\t\t            lastWeek: function () {\n\t\t                switch (this.day()) {\n\t\t                    case 0:\n\t\t                        return '[W zeszłą niedzielę o] LT';\n\t\t                    case 3:\n\t\t                        return '[W zeszłą środę o] LT';\n\t\t                    case 6:\n\t\t                        return '[W zeszłą sobotę o] LT';\n\t\t                    default:\n\t\t                        return '[W zeszły] dddd [o] LT';\n\t\t                }\n\t\t            },\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'za %s',\n\t\t            past: '%s temu',\n\t\t            s: 'kilka sekund',\n\t\t            ss: translate,\n\t\t            m: translate,\n\t\t            mm: translate,\n\t\t            h: translate,\n\t\t            hh: translate,\n\t\t            d: '1 dzień',\n\t\t            dd: '%d dni',\n\t\t            w: 'tydzień',\n\t\t            ww: translate,\n\t\t            M: 'miesiąc',\n\t\t            MM: translate,\n\t\t            y: 'rok',\n\t\t            yy: translate,\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t\t        ordinal: '%d.',\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 4, // The week that contains Jan 4th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return pl;\n\n\t\t}))); \n\t} ());\n\treturn pl$2.exports;\n}\n\nrequirePl();\n\nvar ru$2 = {exports: {}};\n\nvar ru$1 = ru$2.exports;\n\nvar hasRequiredRu;\n\nfunction requireRu () {\n\tif (hasRequiredRu) return ru$2.exports;\n\thasRequiredRu = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(ru$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    function plural(word, num) {\n\t\t        var forms = word.split('_');\n\t\t        return num % 10 === 1 && num % 100 !== 11\n\t\t            ? forms[0]\n\t\t            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n\t\t              ? forms[1]\n\t\t              : forms[2];\n\t\t    }\n\t\t    function relativeTimeWithPlural(number, withoutSuffix, key) {\n\t\t        var format = {\n\t\t            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n\t\t            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n\t\t            hh: 'час_часа_часов',\n\t\t            dd: 'день_дня_дней',\n\t\t            ww: 'неделя_недели_недель',\n\t\t            MM: 'месяц_месяца_месяцев',\n\t\t            yy: 'год_года_лет',\n\t\t        };\n\t\t        if (key === 'm') {\n\t\t            return withoutSuffix ? 'минута' : 'минуту';\n\t\t        } else {\n\t\t            return number + ' ' + plural(format[key], +number);\n\t\t        }\n\t\t    }\n\t\t    var monthsParse = [\n\t\t        /^янв/i,\n\t\t        /^фев/i,\n\t\t        /^мар/i,\n\t\t        /^апр/i,\n\t\t        /^ма[йя]/i,\n\t\t        /^июн/i,\n\t\t        /^июл/i,\n\t\t        /^авг/i,\n\t\t        /^сен/i,\n\t\t        /^окт/i,\n\t\t        /^ноя/i,\n\t\t        /^дек/i,\n\t\t    ];\n\n\t\t    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n\t\t    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n\t\t    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n\t\t    var ru = moment.defineLocale('ru', {\n\t\t        months: {\n\t\t            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n\t\t                '_'\n\t\t            ),\n\t\t            standalone:\n\t\t                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n\t\t                    '_'\n\t\t                ),\n\t\t        },\n\t\t        monthsShort: {\n\t\t            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n\t\t            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n\t\t                '_'\n\t\t            ),\n\t\t            standalone:\n\t\t                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n\t\t                    '_'\n\t\t                ),\n\t\t        },\n\t\t        weekdays: {\n\t\t            standalone:\n\t\t                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n\t\t                    '_'\n\t\t                ),\n\t\t            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n\t\t                '_'\n\t\t            ),\n\t\t            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n\t\t        },\n\t\t        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n\t\t        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n\t\t        monthsParse: monthsParse,\n\t\t        longMonthsParse: monthsParse,\n\t\t        shortMonthsParse: monthsParse,\n\n\t\t        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n\t\t        monthsRegex:\n\t\t            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n\t\t        // копия предыдущего\n\t\t        monthsShortRegex:\n\t\t            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n\t\t        // полные названия с падежами\n\t\t        monthsStrictRegex:\n\t\t            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n\t\t        // Выражение, которое соответствует только сокращённым формам\n\t\t        monthsShortStrictRegex:\n\t\t            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n\t\t        longDateFormat: {\n\t\t            LT: 'H:mm',\n\t\t            LTS: 'H:mm:ss',\n\t\t            L: 'DD.MM.YYYY',\n\t\t            LL: 'D MMMM YYYY г.',\n\t\t            LLL: 'D MMMM YYYY г., H:mm',\n\t\t            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: '[Сегодня, в] LT',\n\t\t            nextDay: '[Завтра, в] LT',\n\t\t            lastDay: '[Вчера, в] LT',\n\t\t            nextWeek: function (now) {\n\t\t                if (now.week() !== this.week()) {\n\t\t                    switch (this.day()) {\n\t\t                        case 0:\n\t\t                            return '[В следующее] dddd, [в] LT';\n\t\t                        case 1:\n\t\t                        case 2:\n\t\t                        case 4:\n\t\t                            return '[В следующий] dddd, [в] LT';\n\t\t                        case 3:\n\t\t                        case 5:\n\t\t                        case 6:\n\t\t                            return '[В следующую] dddd, [в] LT';\n\t\t                    }\n\t\t                } else {\n\t\t                    if (this.day() === 2) {\n\t\t                        return '[Во] dddd, [в] LT';\n\t\t                    } else {\n\t\t                        return '[В] dddd, [в] LT';\n\t\t                    }\n\t\t                }\n\t\t            },\n\t\t            lastWeek: function (now) {\n\t\t                if (now.week() !== this.week()) {\n\t\t                    switch (this.day()) {\n\t\t                        case 0:\n\t\t                            return '[В прошлое] dddd, [в] LT';\n\t\t                        case 1:\n\t\t                        case 2:\n\t\t                        case 4:\n\t\t                            return '[В прошлый] dddd, [в] LT';\n\t\t                        case 3:\n\t\t                        case 5:\n\t\t                        case 6:\n\t\t                            return '[В прошлую] dddd, [в] LT';\n\t\t                    }\n\t\t                } else {\n\t\t                    if (this.day() === 2) {\n\t\t                        return '[Во] dddd, [в] LT';\n\t\t                    } else {\n\t\t                        return '[В] dddd, [в] LT';\n\t\t                    }\n\t\t                }\n\t\t            },\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'через %s',\n\t\t            past: '%s назад',\n\t\t            s: 'несколько секунд',\n\t\t            ss: relativeTimeWithPlural,\n\t\t            m: relativeTimeWithPlural,\n\t\t            mm: relativeTimeWithPlural,\n\t\t            h: 'час',\n\t\t            hh: relativeTimeWithPlural,\n\t\t            d: 'день',\n\t\t            dd: relativeTimeWithPlural,\n\t\t            w: 'неделя',\n\t\t            ww: relativeTimeWithPlural,\n\t\t            M: 'месяц',\n\t\t            MM: relativeTimeWithPlural,\n\t\t            y: 'год',\n\t\t            yy: relativeTimeWithPlural,\n\t\t        },\n\t\t        meridiemParse: /ночи|утра|дня|вечера/i,\n\t\t        isPM: function (input) {\n\t\t            return /^(дня|вечера)$/.test(input);\n\t\t        },\n\t\t        meridiem: function (hour, minute, isLower) {\n\t\t            if (hour < 4) {\n\t\t                return 'ночи';\n\t\t            } else if (hour < 12) {\n\t\t                return 'утра';\n\t\t            } else if (hour < 17) {\n\t\t                return 'дня';\n\t\t            } else {\n\t\t                return 'вечера';\n\t\t            }\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n\t\t        ordinal: function (number, period) {\n\t\t            switch (period) {\n\t\t                case 'M':\n\t\t                case 'd':\n\t\t                case 'DDD':\n\t\t                    return number + '-й';\n\t\t                case 'D':\n\t\t                    return number + '-го';\n\t\t                case 'w':\n\t\t                case 'W':\n\t\t                    return number + '-я';\n\t\t                default:\n\t\t                    return number;\n\t\t            }\n\t\t        },\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 4, // The week that contains Jan 4th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return ru;\n\n\t\t}))); \n\t} ());\n\treturn ru$2.exports;\n}\n\nrequireRu();\n\nvar tr$2 = {exports: {}};\n\nvar tr$1 = tr$2.exports;\n\nvar hasRequiredTr;\n\nfunction requireTr () {\n\tif (hasRequiredTr) return tr$2.exports;\n\thasRequiredTr = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(tr$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    var suffixes = {\n\t\t        1: \"'inci\",\n\t\t        5: \"'inci\",\n\t\t        8: \"'inci\",\n\t\t        70: \"'inci\",\n\t\t        80: \"'inci\",\n\t\t        2: \"'nci\",\n\t\t        7: \"'nci\",\n\t\t        20: \"'nci\",\n\t\t        50: \"'nci\",\n\t\t        3: \"'üncü\",\n\t\t        4: \"'üncü\",\n\t\t        100: \"'üncü\",\n\t\t        6: \"'ncı\",\n\t\t        9: \"'uncu\",\n\t\t        10: \"'uncu\",\n\t\t        30: \"'uncu\",\n\t\t        60: \"'ıncı\",\n\t\t        90: \"'ıncı\",\n\t\t    };\n\n\t\t    var tr = moment.defineLocale('tr', {\n\t\t        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n\t\t        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n\t\t        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n\t\t        meridiem: function (hours, minutes, isLower) {\n\t\t            if (hours < 12) {\n\t\t                return isLower ? 'öö' : 'ÖÖ';\n\t\t            } else {\n\t\t                return isLower ? 'ös' : 'ÖS';\n\t\t            }\n\t\t        },\n\t\t        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n\t\t        isPM: function (input) {\n\t\t            return input === 'ös' || input === 'ÖS';\n\t\t        },\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'DD.MM.YYYY',\n\t\t            LL: 'D MMMM YYYY',\n\t\t            LLL: 'D MMMM YYYY HH:mm',\n\t\t            LLLL: 'dddd, D MMMM YYYY HH:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: '[bugün saat] LT',\n\t\t            nextDay: '[yarın saat] LT',\n\t\t            nextWeek: '[gelecek] dddd [saat] LT',\n\t\t            lastDay: '[dün] LT',\n\t\t            lastWeek: '[geçen] dddd [saat] LT',\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: '%s sonra',\n\t\t            past: '%s önce',\n\t\t            s: 'birkaç saniye',\n\t\t            ss: '%d saniye',\n\t\t            m: 'bir dakika',\n\t\t            mm: '%d dakika',\n\t\t            h: 'bir saat',\n\t\t            hh: '%d saat',\n\t\t            d: 'bir gün',\n\t\t            dd: '%d gün',\n\t\t            w: 'bir hafta',\n\t\t            ww: '%d hafta',\n\t\t            M: 'bir ay',\n\t\t            MM: '%d ay',\n\t\t            y: 'bir yıl',\n\t\t            yy: '%d yıl',\n\t\t        },\n\t\t        ordinal: function (number, period) {\n\t\t            switch (period) {\n\t\t                case 'd':\n\t\t                case 'D':\n\t\t                case 'Do':\n\t\t                case 'DD':\n\t\t                    return number;\n\t\t                default:\n\t\t                    if (number === 0) {\n\t\t                        // special case for zero\n\t\t                        return number + \"'ıncı\";\n\t\t                    }\n\t\t                    var a = number % 10,\n\t\t                        b = (number % 100) - a,\n\t\t                        c = number >= 100 ? 100 : null;\n\t\t                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n\t\t            }\n\t\t        },\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 7, // The week that contains Jan 7th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return tr;\n\n\t\t}))); \n\t} ());\n\treturn tr$2.exports;\n}\n\nrequireTr();\n\nvar uk$2 = {exports: {}};\n\nvar uk$1 = uk$2.exports;\n\nvar hasRequiredUk;\n\nfunction requireUk () {\n\tif (hasRequiredUk) return uk$2.exports;\n\thasRequiredUk = 1;\n\t(function (module, exports) {\n(function (global, factory) {\n\t\t   typeof commonjsRequire === 'function' ? factory(requireMoment()) :\n\t\t   factory(global.moment);\n\t\t}(uk$1, (function (moment) {\n\t\t    //! moment.js locale configuration\n\n\t\t    function plural(word, num) {\n\t\t        var forms = word.split('_');\n\t\t        return num % 10 === 1 && num % 100 !== 11\n\t\t            ? forms[0]\n\t\t            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n\t\t              ? forms[1]\n\t\t              : forms[2];\n\t\t    }\n\t\t    function relativeTimeWithPlural(number, withoutSuffix, key) {\n\t\t        var format = {\n\t\t            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n\t\t            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n\t\t            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n\t\t            dd: 'день_дні_днів',\n\t\t            MM: 'місяць_місяці_місяців',\n\t\t            yy: 'рік_роки_років',\n\t\t        };\n\t\t        if (key === 'm') {\n\t\t            return withoutSuffix ? 'хвилина' : 'хвилину';\n\t\t        } else if (key === 'h') {\n\t\t            return withoutSuffix ? 'година' : 'годину';\n\t\t        } else {\n\t\t            return number + ' ' + plural(format[key], +number);\n\t\t        }\n\t\t    }\n\t\t    function weekdaysCaseReplace(m, format) {\n\t\t        var weekdays = {\n\t\t                nominative:\n\t\t                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n\t\t                        '_'\n\t\t                    ),\n\t\t                accusative:\n\t\t                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n\t\t                        '_'\n\t\t                    ),\n\t\t                genitive:\n\t\t                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n\t\t                        '_'\n\t\t                    ),\n\t\t            },\n\t\t            nounCase;\n\n\t\t        if (m === true) {\n\t\t            return weekdays['nominative']\n\t\t                .slice(1, 7)\n\t\t                .concat(weekdays['nominative'].slice(0, 1));\n\t\t        }\n\t\t        if (!m) {\n\t\t            return weekdays['nominative'];\n\t\t        }\n\n\t\t        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n\t\t            ? 'accusative'\n\t\t            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n\t\t              ? 'genitive'\n\t\t              : 'nominative';\n\t\t        return weekdays[nounCase][m.day()];\n\t\t    }\n\t\t    function processHoursFunction(str) {\n\t\t        return function () {\n\t\t            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n\t\t        };\n\t\t    }\n\n\t\t    var uk = moment.defineLocale('uk', {\n\t\t        months: {\n\t\t            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n\t\t                '_'\n\t\t            ),\n\t\t            standalone:\n\t\t                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n\t\t                    '_'\n\t\t                ),\n\t\t        },\n\t\t        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n\t\t            '_'\n\t\t        ),\n\t\t        weekdays: weekdaysCaseReplace,\n\t\t        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t\t        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t\t        longDateFormat: {\n\t\t            LT: 'HH:mm',\n\t\t            LTS: 'HH:mm:ss',\n\t\t            L: 'DD.MM.YYYY',\n\t\t            LL: 'D MMMM YYYY р.',\n\t\t            LLL: 'D MMMM YYYY р., HH:mm',\n\t\t            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n\t\t        },\n\t\t        calendar: {\n\t\t            sameDay: processHoursFunction('[Сьогодні '),\n\t\t            nextDay: processHoursFunction('[Завтра '),\n\t\t            lastDay: processHoursFunction('[Вчора '),\n\t\t            nextWeek: processHoursFunction('[У] dddd ['),\n\t\t            lastWeek: function () {\n\t\t                switch (this.day()) {\n\t\t                    case 0:\n\t\t                    case 3:\n\t\t                    case 5:\n\t\t                    case 6:\n\t\t                        return processHoursFunction('[Минулої] dddd [').call(this);\n\t\t                    case 1:\n\t\t                    case 2:\n\t\t                    case 4:\n\t\t                        return processHoursFunction('[Минулого] dddd [').call(this);\n\t\t                }\n\t\t            },\n\t\t            sameElse: 'L',\n\t\t        },\n\t\t        relativeTime: {\n\t\t            future: 'за %s',\n\t\t            past: '%s тому',\n\t\t            s: 'декілька секунд',\n\t\t            ss: relativeTimeWithPlural,\n\t\t            m: relativeTimeWithPlural,\n\t\t            mm: relativeTimeWithPlural,\n\t\t            h: 'годину',\n\t\t            hh: relativeTimeWithPlural,\n\t\t            d: 'день',\n\t\t            dd: relativeTimeWithPlural,\n\t\t            M: 'місяць',\n\t\t            MM: relativeTimeWithPlural,\n\t\t            y: 'рік',\n\t\t            yy: relativeTimeWithPlural,\n\t\t        },\n\t\t        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n\t\t        meridiemParse: /ночі|ранку|дня|вечора/,\n\t\t        isPM: function (input) {\n\t\t            return /^(дня|вечора)$/.test(input);\n\t\t        },\n\t\t        meridiem: function (hour, minute, isLower) {\n\t\t            if (hour < 4) {\n\t\t                return 'ночі';\n\t\t            } else if (hour < 12) {\n\t\t                return 'ранку';\n\t\t            } else if (hour < 17) {\n\t\t                return 'дня';\n\t\t            } else {\n\t\t                return 'вечора';\n\t\t            }\n\t\t        },\n\t\t        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n\t\t        ordinal: function (number, period) {\n\t\t            switch (period) {\n\t\t                case 'M':\n\t\t                case 'd':\n\t\t                case 'DDD':\n\t\t                case 'w':\n\t\t                case 'W':\n\t\t                    return number + '-й';\n\t\t                case 'D':\n\t\t                    return number + '-го';\n\t\t                default:\n\t\t                    return number;\n\t\t            }\n\t\t        },\n\t\t        week: {\n\t\t            dow: 1, // Monday is the first day of the week.\n\t\t            doy: 7, // The week that contains Jan 7th is the first week of the year.\n\t\t        },\n\t\t    });\n\n\t\t    return uk;\n\n\t\t}))); \n\t} ());\n\treturn uk$2.exports;\n}\n\nrequireUk();\n\nvar es_array_concat = {};\n\nvar globalThis_1;\nvar hasRequiredGlobalThis;\n\nfunction requireGlobalThis () {\n\tif (hasRequiredGlobalThis) return globalThis_1;\n\thasRequiredGlobalThis = 1;\n\tvar check = function (it) {\n\t  return it && it.Math === Math && it;\n\t};\n\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tglobalThis_1 =\n\t  // eslint-disable-next-line es/no-global-this -- safe\n\t  check(typeof globalThis == 'object' && globalThis) ||\n\t  check(typeof window == 'object' && window) ||\n\t  // eslint-disable-next-line no-restricted-globals -- safe\n\t  check(typeof self == 'object' && self) ||\n\t  check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||\n\t  check(typeof globalThis_1 == 'object' && globalThis_1) ||\n\t  // eslint-disable-next-line no-new-func -- fallback\n\t  (function () { return this; })() || Function('return this')();\n\treturn globalThis_1;\n}\n\nvar fails;\nvar hasRequiredFails;\n\nfunction requireFails () {\n\tif (hasRequiredFails) return fails;\n\thasRequiredFails = 1;\n\tfails = function (exec) {\n\t  try {\n\t    return !!exec();\n\t  } catch (error) {\n\t    return true;\n\t  }\n\t};\n\treturn fails;\n}\n\nvar functionBindNative;\nvar hasRequiredFunctionBindNative;\n\nfunction requireFunctionBindNative () {\n\tif (hasRequiredFunctionBindNative) return functionBindNative;\n\thasRequiredFunctionBindNative = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tfunctionBindNative = !fails(function () {\n\t  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n\t  var test = (function () { /* empty */ }).bind();\n\t  // eslint-disable-next-line no-prototype-builtins -- safe\n\t  return typeof test != 'function' || test.hasOwnProperty('prototype');\n\t});\n\treturn functionBindNative;\n}\n\nvar functionApply;\nvar hasRequiredFunctionApply;\n\nfunction requireFunctionApply () {\n\tif (hasRequiredFunctionApply) return functionApply;\n\thasRequiredFunctionApply = 1;\n\tvar NATIVE_BIND = /*@__PURE__*/ requireFunctionBindNative();\n\n\tvar FunctionPrototype = Function.prototype;\n\tvar apply = FunctionPrototype.apply;\n\tvar call = FunctionPrototype.call;\n\n\t// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\n\tfunctionApply = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n\t  return call.apply(apply, arguments);\n\t});\n\treturn functionApply;\n}\n\nvar functionUncurryThis;\nvar hasRequiredFunctionUncurryThis;\n\nfunction requireFunctionUncurryThis () {\n\tif (hasRequiredFunctionUncurryThis) return functionUncurryThis;\n\thasRequiredFunctionUncurryThis = 1;\n\tvar NATIVE_BIND = /*@__PURE__*/ requireFunctionBindNative();\n\n\tvar FunctionPrototype = Function.prototype;\n\tvar call = FunctionPrototype.call;\n\t// eslint-disable-next-line es/no-function-prototype-bind -- safe\n\tvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\n\tfunctionUncurryThis = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n\t  return function () {\n\t    return call.apply(fn, arguments);\n\t  };\n\t};\n\treturn functionUncurryThis;\n}\n\nvar classofRaw;\nvar hasRequiredClassofRaw;\n\nfunction requireClassofRaw () {\n\tif (hasRequiredClassofRaw) return classofRaw;\n\thasRequiredClassofRaw = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\n\tvar toString = uncurryThis({}.toString);\n\tvar stringSlice = uncurryThis(''.slice);\n\n\tclassofRaw = function (it) {\n\t  return stringSlice(toString(it), 8, -1);\n\t};\n\treturn classofRaw;\n}\n\nvar functionUncurryThisClause;\nvar hasRequiredFunctionUncurryThisClause;\n\nfunction requireFunctionUncurryThisClause () {\n\tif (hasRequiredFunctionUncurryThisClause) return functionUncurryThisClause;\n\thasRequiredFunctionUncurryThisClause = 1;\n\tvar classofRaw = /*@__PURE__*/ requireClassofRaw();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\n\tfunctionUncurryThisClause = function (fn) {\n\t  // Nashorn bug:\n\t  //   https://github.com/zloirock/core-js/issues/1128\n\t  //   https://github.com/zloirock/core-js/issues/1130\n\t  if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n\t};\n\treturn functionUncurryThisClause;\n}\n\nvar isCallable;\nvar hasRequiredIsCallable;\n\nfunction requireIsCallable () {\n\tif (hasRequiredIsCallable) return isCallable;\n\thasRequiredIsCallable = 1;\n\t// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n\tvar documentAll = typeof document == 'object' && document.all;\n\n\t// `IsCallable` abstract operation\n\t// https://tc39.es/ecma262/#sec-iscallable\n\t// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\n\tisCallable = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n\t  return typeof argument == 'function' || argument === documentAll;\n\t} : function (argument) {\n\t  return typeof argument == 'function';\n\t};\n\treturn isCallable;\n}\n\nvar objectGetOwnPropertyDescriptor = {};\n\nvar descriptors;\nvar hasRequiredDescriptors;\n\nfunction requireDescriptors () {\n\tif (hasRequiredDescriptors) return descriptors;\n\thasRequiredDescriptors = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\t// Detect IE8's incomplete defineProperty implementation\n\tdescriptors = !fails(function () {\n\t  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n\t  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n\t});\n\treturn descriptors;\n}\n\nvar functionCall;\nvar hasRequiredFunctionCall;\n\nfunction requireFunctionCall () {\n\tif (hasRequiredFunctionCall) return functionCall;\n\thasRequiredFunctionCall = 1;\n\tvar NATIVE_BIND = /*@__PURE__*/ requireFunctionBindNative();\n\n\tvar call = Function.prototype.call;\n\t// eslint-disable-next-line es/no-function-prototype-bind -- safe\n\tfunctionCall = NATIVE_BIND ? call.bind(call) : function () {\n\t  return call.apply(call, arguments);\n\t};\n\treturn functionCall;\n}\n\nvar objectPropertyIsEnumerable = {};\n\nvar hasRequiredObjectPropertyIsEnumerable;\n\nfunction requireObjectPropertyIsEnumerable () {\n\tif (hasRequiredObjectPropertyIsEnumerable) return objectPropertyIsEnumerable;\n\thasRequiredObjectPropertyIsEnumerable = 1;\n\tvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n\t// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\tvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n\t// Nashorn ~ JDK8 bug\n\tvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n\t// `Object.prototype.propertyIsEnumerable` method implementation\n\t// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\n\tobjectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n\t  var descriptor = getOwnPropertyDescriptor(this, V);\n\t  return !!descriptor && descriptor.enumerable;\n\t} : $propertyIsEnumerable;\n\treturn objectPropertyIsEnumerable;\n}\n\nvar createPropertyDescriptor;\nvar hasRequiredCreatePropertyDescriptor;\n\nfunction requireCreatePropertyDescriptor () {\n\tif (hasRequiredCreatePropertyDescriptor) return createPropertyDescriptor;\n\thasRequiredCreatePropertyDescriptor = 1;\n\tcreatePropertyDescriptor = function (bitmap, value) {\n\t  return {\n\t    enumerable: !(bitmap & 1),\n\t    configurable: !(bitmap & 2),\n\t    writable: !(bitmap & 4),\n\t    value: value\n\t  };\n\t};\n\treturn createPropertyDescriptor;\n}\n\nvar indexedObject;\nvar hasRequiredIndexedObject;\n\nfunction requireIndexedObject () {\n\tif (hasRequiredIndexedObject) return indexedObject;\n\thasRequiredIndexedObject = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\n\tvar $Object = Object;\n\tvar split = uncurryThis(''.split);\n\n\t// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\tindexedObject = fails(function () {\n\t  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n\t  // eslint-disable-next-line no-prototype-builtins -- safe\n\t  return !$Object('z').propertyIsEnumerable(0);\n\t}) ? function (it) {\n\t  return classof(it) === 'String' ? split(it, '') : $Object(it);\n\t} : $Object;\n\treturn indexedObject;\n}\n\nvar isNullOrUndefined;\nvar hasRequiredIsNullOrUndefined;\n\nfunction requireIsNullOrUndefined () {\n\tif (hasRequiredIsNullOrUndefined) return isNullOrUndefined;\n\thasRequiredIsNullOrUndefined = 1;\n\t// we can't use just `it == null` since of `document.all` special case\n\t// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\n\tisNullOrUndefined = function (it) {\n\t  return it === null || it === undefined;\n\t};\n\treturn isNullOrUndefined;\n}\n\nvar requireObjectCoercible;\nvar hasRequiredRequireObjectCoercible;\n\nfunction requireRequireObjectCoercible () {\n\tif (hasRequiredRequireObjectCoercible) return requireObjectCoercible;\n\thasRequiredRequireObjectCoercible = 1;\n\tvar isNullOrUndefined = /*@__PURE__*/ requireIsNullOrUndefined();\n\n\tvar $TypeError = TypeError;\n\n\t// `RequireObjectCoercible` abstract operation\n\t// https://tc39.es/ecma262/#sec-requireobjectcoercible\n\trequireObjectCoercible = function (it) {\n\t  if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n\t  return it;\n\t};\n\treturn requireObjectCoercible;\n}\n\nvar toIndexedObject;\nvar hasRequiredToIndexedObject;\n\nfunction requireToIndexedObject () {\n\tif (hasRequiredToIndexedObject) return toIndexedObject;\n\thasRequiredToIndexedObject = 1;\n\t// toObject with fallback for non-array-like ES3 strings\n\tvar IndexedObject = /*@__PURE__*/ requireIndexedObject();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\n\ttoIndexedObject = function (it) {\n\t  return IndexedObject(requireObjectCoercible(it));\n\t};\n\treturn toIndexedObject;\n}\n\nvar isObject$1;\nvar hasRequiredIsObject;\n\nfunction requireIsObject () {\n\tif (hasRequiredIsObject) return isObject$1;\n\thasRequiredIsObject = 1;\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\n\tisObject$1 = function (it) {\n\t  return typeof it == 'object' ? it !== null : isCallable(it);\n\t};\n\treturn isObject$1;\n}\n\nvar path;\nvar hasRequiredPath;\n\nfunction requirePath () {\n\tif (hasRequiredPath) return path;\n\thasRequiredPath = 1;\n\tpath = {};\n\treturn path;\n}\n\nvar getBuiltIn;\nvar hasRequiredGetBuiltIn;\n\nfunction requireGetBuiltIn () {\n\tif (hasRequiredGetBuiltIn) return getBuiltIn;\n\thasRequiredGetBuiltIn = 1;\n\tvar path = /*@__PURE__*/ requirePath();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\n\tvar aFunction = function (variable) {\n\t  return isCallable(variable) ? variable : undefined;\n\t};\n\n\tgetBuiltIn = function (namespace, method) {\n\t  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(globalThis[namespace])\n\t    : path[namespace] && path[namespace][method] || globalThis[namespace] && globalThis[namespace][method];\n\t};\n\treturn getBuiltIn;\n}\n\nvar objectIsPrototypeOf;\nvar hasRequiredObjectIsPrototypeOf;\n\nfunction requireObjectIsPrototypeOf () {\n\tif (hasRequiredObjectIsPrototypeOf) return objectIsPrototypeOf;\n\thasRequiredObjectIsPrototypeOf = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\n\tobjectIsPrototypeOf = uncurryThis({}.isPrototypeOf);\n\treturn objectIsPrototypeOf;\n}\n\nvar environmentUserAgent;\nvar hasRequiredEnvironmentUserAgent;\n\nfunction requireEnvironmentUserAgent () {\n\tif (hasRequiredEnvironmentUserAgent) return environmentUserAgent;\n\thasRequiredEnvironmentUserAgent = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\n\tvar navigator = globalThis.navigator;\n\tvar userAgent = navigator && navigator.userAgent;\n\n\tenvironmentUserAgent = userAgent ? String(userAgent) : '';\n\treturn environmentUserAgent;\n}\n\nvar environmentV8Version;\nvar hasRequiredEnvironmentV8Version;\n\nfunction requireEnvironmentV8Version () {\n\tif (hasRequiredEnvironmentV8Version) return environmentV8Version;\n\thasRequiredEnvironmentV8Version = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar userAgent = /*@__PURE__*/ requireEnvironmentUserAgent();\n\n\tvar process = globalThis.process;\n\tvar Deno = globalThis.Deno;\n\tvar versions = process && process.versions || Deno && Deno.version;\n\tvar v8 = versions && versions.v8;\n\tvar match, version;\n\n\tif (v8) {\n\t  match = v8.split('.');\n\t  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n\t  // but their correct versions are not interesting for us\n\t  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n\t}\n\n\t// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n\t// so check `userAgent` even if `.v8` exists, but 0\n\tif (!version && userAgent) {\n\t  match = userAgent.match(/Edge\\/(\\d+)/);\n\t  if (!match || match[1] >= 74) {\n\t    match = userAgent.match(/Chrome\\/(\\d+)/);\n\t    if (match) version = +match[1];\n\t  }\n\t}\n\n\tenvironmentV8Version = version;\n\treturn environmentV8Version;\n}\n\nvar symbolConstructorDetection;\nvar hasRequiredSymbolConstructorDetection;\n\nfunction requireSymbolConstructorDetection () {\n\tif (hasRequiredSymbolConstructorDetection) return symbolConstructorDetection;\n\thasRequiredSymbolConstructorDetection = 1;\n\t/* eslint-disable es/no-symbol -- required for testing */\n\tvar V8_VERSION = /*@__PURE__*/ requireEnvironmentV8Version();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\n\tvar $String = globalThis.String;\n\n\t// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\n\tsymbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails(function () {\n\t  var symbol = Symbol('symbol detection');\n\t  // Chrome 38 Symbol has incorrect toString conversion\n\t  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n\t  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n\t  // of course, fail.\n\t  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n\t    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n\t    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n\t});\n\treturn symbolConstructorDetection;\n}\n\nvar useSymbolAsUid;\nvar hasRequiredUseSymbolAsUid;\n\nfunction requireUseSymbolAsUid () {\n\tif (hasRequiredUseSymbolAsUid) return useSymbolAsUid;\n\thasRequiredUseSymbolAsUid = 1;\n\t/* eslint-disable es/no-symbol -- required for testing */\n\tvar NATIVE_SYMBOL = /*@__PURE__*/ requireSymbolConstructorDetection();\n\n\tuseSymbolAsUid = NATIVE_SYMBOL &&\n\t  !Symbol.sham &&\n\t  typeof Symbol.iterator == 'symbol';\n\treturn useSymbolAsUid;\n}\n\nvar isSymbol;\nvar hasRequiredIsSymbol;\n\nfunction requireIsSymbol () {\n\tif (hasRequiredIsSymbol) return isSymbol;\n\thasRequiredIsSymbol = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar USE_SYMBOL_AS_UID = /*@__PURE__*/ requireUseSymbolAsUid();\n\n\tvar $Object = Object;\n\n\tisSymbol = USE_SYMBOL_AS_UID ? function (it) {\n\t  return typeof it == 'symbol';\n\t} : function (it) {\n\t  var $Symbol = getBuiltIn('Symbol');\n\t  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n\t};\n\treturn isSymbol;\n}\n\nvar tryToString;\nvar hasRequiredTryToString;\n\nfunction requireTryToString () {\n\tif (hasRequiredTryToString) return tryToString;\n\thasRequiredTryToString = 1;\n\tvar $String = String;\n\n\ttryToString = function (argument) {\n\t  try {\n\t    return $String(argument);\n\t  } catch (error) {\n\t    return 'Object';\n\t  }\n\t};\n\treturn tryToString;\n}\n\nvar aCallable;\nvar hasRequiredACallable;\n\nfunction requireACallable () {\n\tif (hasRequiredACallable) return aCallable;\n\thasRequiredACallable = 1;\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar tryToString = /*@__PURE__*/ requireTryToString();\n\n\tvar $TypeError = TypeError;\n\n\t// `Assert: IsCallable(argument) is true`\n\taCallable = function (argument) {\n\t  if (isCallable(argument)) return argument;\n\t  throw new $TypeError(tryToString(argument) + ' is not a function');\n\t};\n\treturn aCallable;\n}\n\nvar getMethod;\nvar hasRequiredGetMethod;\n\nfunction requireGetMethod () {\n\tif (hasRequiredGetMethod) return getMethod;\n\thasRequiredGetMethod = 1;\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar isNullOrUndefined = /*@__PURE__*/ requireIsNullOrUndefined();\n\n\t// `GetMethod` abstract operation\n\t// https://tc39.es/ecma262/#sec-getmethod\n\tgetMethod = function (V, P) {\n\t  var func = V[P];\n\t  return isNullOrUndefined(func) ? undefined : aCallable(func);\n\t};\n\treturn getMethod;\n}\n\nvar ordinaryToPrimitive;\nvar hasRequiredOrdinaryToPrimitive;\n\nfunction requireOrdinaryToPrimitive () {\n\tif (hasRequiredOrdinaryToPrimitive) return ordinaryToPrimitive;\n\thasRequiredOrdinaryToPrimitive = 1;\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\n\tvar $TypeError = TypeError;\n\n\t// `OrdinaryToPrimitive` abstract operation\n\t// https://tc39.es/ecma262/#sec-ordinarytoprimitive\n\tordinaryToPrimitive = function (input, pref) {\n\t  var fn, val;\n\t  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n\t  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n\t  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n\t  throw new $TypeError(\"Can't convert object to primitive value\");\n\t};\n\treturn ordinaryToPrimitive;\n}\n\nvar sharedStore = {exports: {}};\n\nvar isPure;\nvar hasRequiredIsPure;\n\nfunction requireIsPure () {\n\tif (hasRequiredIsPure) return isPure;\n\thasRequiredIsPure = 1;\n\tisPure = true;\n\treturn isPure;\n}\n\nvar defineGlobalProperty;\nvar hasRequiredDefineGlobalProperty;\n\nfunction requireDefineGlobalProperty () {\n\tif (hasRequiredDefineGlobalProperty) return defineGlobalProperty;\n\thasRequiredDefineGlobalProperty = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\n\t// eslint-disable-next-line es/no-object-defineproperty -- safe\n\tvar defineProperty = Object.defineProperty;\n\n\tdefineGlobalProperty = function (key, value) {\n\t  try {\n\t    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n\t  } catch (error) {\n\t    globalThis[key] = value;\n\t  } return value;\n\t};\n\treturn defineGlobalProperty;\n}\n\nvar hasRequiredSharedStore;\n\nfunction requireSharedStore () {\n\tif (hasRequiredSharedStore) return sharedStore.exports;\n\thasRequiredSharedStore = 1;\n\tvar IS_PURE = /*@__PURE__*/ requireIsPure();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar defineGlobalProperty = /*@__PURE__*/ requireDefineGlobalProperty();\n\n\tvar SHARED = '__core-js_shared__';\n\tvar store = sharedStore.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n\t(store.versions || (store.versions = [])).push({\n\t  version: '3.44.0',\n\t  mode: IS_PURE ? 'pure' : 'global',\n\t  copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n\t  license: 'https://github.com/zloirock/core-js/blob/v3.44.0/LICENSE',\n\t  source: 'https://github.com/zloirock/core-js'\n\t});\n\treturn sharedStore.exports;\n}\n\nvar shared;\nvar hasRequiredShared;\n\nfunction requireShared () {\n\tif (hasRequiredShared) return shared;\n\thasRequiredShared = 1;\n\tvar store = /*@__PURE__*/ requireSharedStore();\n\n\tshared = function (key, value) {\n\t  return store[key] || (store[key] = value || {});\n\t};\n\treturn shared;\n}\n\nvar toObject;\nvar hasRequiredToObject;\n\nfunction requireToObject () {\n\tif (hasRequiredToObject) return toObject;\n\thasRequiredToObject = 1;\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\n\tvar $Object = Object;\n\n\t// `ToObject` abstract operation\n\t// https://tc39.es/ecma262/#sec-toobject\n\ttoObject = function (argument) {\n\t  return $Object(requireObjectCoercible(argument));\n\t};\n\treturn toObject;\n}\n\nvar hasOwnProperty_1;\nvar hasRequiredHasOwnProperty;\n\nfunction requireHasOwnProperty () {\n\tif (hasRequiredHasOwnProperty) return hasOwnProperty_1;\n\thasRequiredHasOwnProperty = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\n\tvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n\t// `HasOwnProperty` abstract operation\n\t// https://tc39.es/ecma262/#sec-hasownproperty\n\t// eslint-disable-next-line es/no-object-hasown -- safe\n\thasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) {\n\t  return hasOwnProperty(toObject(it), key);\n\t};\n\treturn hasOwnProperty_1;\n}\n\nvar uid;\nvar hasRequiredUid;\n\nfunction requireUid () {\n\tif (hasRequiredUid) return uid;\n\thasRequiredUid = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\n\tvar id = 0;\n\tvar postfix = Math.random();\n\tvar toString = uncurryThis(1.1.toString);\n\n\tuid = function (key) {\n\t  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n\t};\n\treturn uid;\n}\n\nvar wellKnownSymbol;\nvar hasRequiredWellKnownSymbol;\n\nfunction requireWellKnownSymbol () {\n\tif (hasRequiredWellKnownSymbol) return wellKnownSymbol;\n\thasRequiredWellKnownSymbol = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar shared = /*@__PURE__*/ requireShared();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar uid = /*@__PURE__*/ requireUid();\n\tvar NATIVE_SYMBOL = /*@__PURE__*/ requireSymbolConstructorDetection();\n\tvar USE_SYMBOL_AS_UID = /*@__PURE__*/ requireUseSymbolAsUid();\n\n\tvar Symbol = globalThis.Symbol;\n\tvar WellKnownSymbolsStore = shared('wks');\n\tvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\n\twellKnownSymbol = function (name) {\n\t  if (!hasOwn(WellKnownSymbolsStore, name)) {\n\t    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n\t      ? Symbol[name]\n\t      : createWellKnownSymbol('Symbol.' + name);\n\t  } return WellKnownSymbolsStore[name];\n\t};\n\treturn wellKnownSymbol;\n}\n\nvar toPrimitive$6;\nvar hasRequiredToPrimitive$5;\n\nfunction requireToPrimitive$5 () {\n\tif (hasRequiredToPrimitive$5) return toPrimitive$6;\n\thasRequiredToPrimitive$5 = 1;\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar isSymbol = /*@__PURE__*/ requireIsSymbol();\n\tvar getMethod = /*@__PURE__*/ requireGetMethod();\n\tvar ordinaryToPrimitive = /*@__PURE__*/ requireOrdinaryToPrimitive();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar $TypeError = TypeError;\n\tvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n\t// `ToPrimitive` abstract operation\n\t// https://tc39.es/ecma262/#sec-toprimitive\n\ttoPrimitive$6 = function (input, pref) {\n\t  if (!isObject(input) || isSymbol(input)) return input;\n\t  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n\t  var result;\n\t  if (exoticToPrim) {\n\t    if (pref === undefined) pref = 'default';\n\t    result = call(exoticToPrim, input, pref);\n\t    if (!isObject(result) || isSymbol(result)) return result;\n\t    throw new $TypeError(\"Can't convert object to primitive value\");\n\t  }\n\t  if (pref === undefined) pref = 'number';\n\t  return ordinaryToPrimitive(input, pref);\n\t};\n\treturn toPrimitive$6;\n}\n\nvar toPropertyKey$1;\nvar hasRequiredToPropertyKey;\n\nfunction requireToPropertyKey () {\n\tif (hasRequiredToPropertyKey) return toPropertyKey$1;\n\thasRequiredToPropertyKey = 1;\n\tvar toPrimitive = /*@__PURE__*/ requireToPrimitive$5();\n\tvar isSymbol = /*@__PURE__*/ requireIsSymbol();\n\n\t// `ToPropertyKey` abstract operation\n\t// https://tc39.es/ecma262/#sec-topropertykey\n\ttoPropertyKey$1 = function (argument) {\n\t  var key = toPrimitive(argument, 'string');\n\t  return isSymbol(key) ? key : key + '';\n\t};\n\treturn toPropertyKey$1;\n}\n\nvar documentCreateElement;\nvar hasRequiredDocumentCreateElement;\n\nfunction requireDocumentCreateElement () {\n\tif (hasRequiredDocumentCreateElement) return documentCreateElement;\n\thasRequiredDocumentCreateElement = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\n\tvar document = globalThis.document;\n\t// typeof document.createElement is 'object' in old IE\n\tvar EXISTS = isObject(document) && isObject(document.createElement);\n\n\tdocumentCreateElement = function (it) {\n\t  return EXISTS ? document.createElement(it) : {};\n\t};\n\treturn documentCreateElement;\n}\n\nvar ie8DomDefine;\nvar hasRequiredIe8DomDefine;\n\nfunction requireIe8DomDefine () {\n\tif (hasRequiredIe8DomDefine) return ie8DomDefine;\n\thasRequiredIe8DomDefine = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar createElement = /*@__PURE__*/ requireDocumentCreateElement();\n\n\t// Thanks to IE8 for its funny defineProperty\n\tie8DomDefine = !DESCRIPTORS && !fails(function () {\n\t  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n\t  return Object.defineProperty(createElement('div'), 'a', {\n\t    get: function () { return 7; }\n\t  }).a !== 7;\n\t});\n\treturn ie8DomDefine;\n}\n\nvar hasRequiredObjectGetOwnPropertyDescriptor;\n\nfunction requireObjectGetOwnPropertyDescriptor () {\n\tif (hasRequiredObjectGetOwnPropertyDescriptor) return objectGetOwnPropertyDescriptor;\n\thasRequiredObjectGetOwnPropertyDescriptor = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar propertyIsEnumerableModule = /*@__PURE__*/ requireObjectPropertyIsEnumerable();\n\tvar createPropertyDescriptor = /*@__PURE__*/ requireCreatePropertyDescriptor();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar toPropertyKey = /*@__PURE__*/ requireToPropertyKey();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar IE8_DOM_DEFINE = /*@__PURE__*/ requireIe8DomDefine();\n\n\t// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\tvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n\t// `Object.getOwnPropertyDescriptor` method\n\t// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n\tobjectGetOwnPropertyDescriptor.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n\t  O = toIndexedObject(O);\n\t  P = toPropertyKey(P);\n\t  if (IE8_DOM_DEFINE) try {\n\t    return $getOwnPropertyDescriptor(O, P);\n\t  } catch (error) { /* empty */ }\n\t  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n\t};\n\treturn objectGetOwnPropertyDescriptor;\n}\n\nvar isForced_1;\nvar hasRequiredIsForced;\n\nfunction requireIsForced () {\n\tif (hasRequiredIsForced) return isForced_1;\n\thasRequiredIsForced = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\n\tvar replacement = /#|\\.prototype\\./;\n\n\tvar isForced = function (feature, detection) {\n\t  var value = data[normalize(feature)];\n\t  return value === POLYFILL ? true\n\t    : value === NATIVE ? false\n\t    : isCallable(detection) ? fails(detection)\n\t    : !!detection;\n\t};\n\n\tvar normalize = isForced.normalize = function (string) {\n\t  return String(string).replace(replacement, '.').toLowerCase();\n\t};\n\n\tvar data = isForced.data = {};\n\tvar NATIVE = isForced.NATIVE = 'N';\n\tvar POLYFILL = isForced.POLYFILL = 'P';\n\n\tisForced_1 = isForced;\n\treturn isForced_1;\n}\n\nvar functionBindContext;\nvar hasRequiredFunctionBindContext;\n\nfunction requireFunctionBindContext () {\n\tif (hasRequiredFunctionBindContext) return functionBindContext;\n\thasRequiredFunctionBindContext = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThisClause();\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar NATIVE_BIND = /*@__PURE__*/ requireFunctionBindNative();\n\n\tvar bind = uncurryThis(uncurryThis.bind);\n\n\t// optional / simple context binding\n\tfunctionBindContext = function (fn, that) {\n\t  aCallable(fn);\n\t  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n\t    return fn.apply(that, arguments);\n\t  };\n\t};\n\treturn functionBindContext;\n}\n\nvar objectDefineProperty = {};\n\nvar v8PrototypeDefineBug;\nvar hasRequiredV8PrototypeDefineBug;\n\nfunction requireV8PrototypeDefineBug () {\n\tif (hasRequiredV8PrototypeDefineBug) return v8PrototypeDefineBug;\n\thasRequiredV8PrototypeDefineBug = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\t// V8 ~ Chrome 36-\n\t// https://bugs.chromium.org/p/v8/issues/detail?id=3334\n\tv8PrototypeDefineBug = DESCRIPTORS && fails(function () {\n\t  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n\t  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n\t    value: 42,\n\t    writable: false\n\t  }).prototype !== 42;\n\t});\n\treturn v8PrototypeDefineBug;\n}\n\nvar anObject;\nvar hasRequiredAnObject;\n\nfunction requireAnObject () {\n\tif (hasRequiredAnObject) return anObject;\n\thasRequiredAnObject = 1;\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\n\tvar $String = String;\n\tvar $TypeError = TypeError;\n\n\t// `Assert: Type(argument) is Object`\n\tanObject = function (argument) {\n\t  if (isObject(argument)) return argument;\n\t  throw new $TypeError($String(argument) + ' is not an object');\n\t};\n\treturn anObject;\n}\n\nvar hasRequiredObjectDefineProperty;\n\nfunction requireObjectDefineProperty () {\n\tif (hasRequiredObjectDefineProperty) return objectDefineProperty;\n\thasRequiredObjectDefineProperty = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar IE8_DOM_DEFINE = /*@__PURE__*/ requireIe8DomDefine();\n\tvar V8_PROTOTYPE_DEFINE_BUG = /*@__PURE__*/ requireV8PrototypeDefineBug();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar toPropertyKey = /*@__PURE__*/ requireToPropertyKey();\n\n\tvar $TypeError = TypeError;\n\t// eslint-disable-next-line es/no-object-defineproperty -- safe\n\tvar $defineProperty = Object.defineProperty;\n\t// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\tvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\tvar ENUMERABLE = 'enumerable';\n\tvar CONFIGURABLE = 'configurable';\n\tvar WRITABLE = 'writable';\n\n\t// `Object.defineProperty` method\n\t// https://tc39.es/ecma262/#sec-object.defineproperty\n\tobjectDefineProperty.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n\t  anObject(O);\n\t  P = toPropertyKey(P);\n\t  anObject(Attributes);\n\t  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n\t    var current = $getOwnPropertyDescriptor(O, P);\n\t    if (current && current[WRITABLE]) {\n\t      O[P] = Attributes.value;\n\t      Attributes = {\n\t        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n\t        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n\t        writable: false\n\t      };\n\t    }\n\t  } return $defineProperty(O, P, Attributes);\n\t} : $defineProperty : function defineProperty(O, P, Attributes) {\n\t  anObject(O);\n\t  P = toPropertyKey(P);\n\t  anObject(Attributes);\n\t  if (IE8_DOM_DEFINE) try {\n\t    return $defineProperty(O, P, Attributes);\n\t  } catch (error) { /* empty */ }\n\t  if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n\t  if ('value' in Attributes) O[P] = Attributes.value;\n\t  return O;\n\t};\n\treturn objectDefineProperty;\n}\n\nvar createNonEnumerableProperty;\nvar hasRequiredCreateNonEnumerableProperty;\n\nfunction requireCreateNonEnumerableProperty () {\n\tif (hasRequiredCreateNonEnumerableProperty) return createNonEnumerableProperty;\n\thasRequiredCreateNonEnumerableProperty = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar definePropertyModule = /*@__PURE__*/ requireObjectDefineProperty();\n\tvar createPropertyDescriptor = /*@__PURE__*/ requireCreatePropertyDescriptor();\n\n\tcreateNonEnumerableProperty = DESCRIPTORS ? function (object, key, value) {\n\t  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n\t} : function (object, key, value) {\n\t  object[key] = value;\n\t  return object;\n\t};\n\treturn createNonEnumerableProperty;\n}\n\nvar _export;\nvar hasRequired_export;\n\nfunction require_export () {\n\tif (hasRequired_export) return _export;\n\thasRequired_export = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar apply = /*@__PURE__*/ requireFunctionApply();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThisClause();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar getOwnPropertyDescriptor = /*@__PURE__*/ requireObjectGetOwnPropertyDescriptor().f;\n\tvar isForced = /*@__PURE__*/ requireIsForced();\n\tvar path = /*@__PURE__*/ requirePath();\n\tvar bind = /*@__PURE__*/ requireFunctionBindContext();\n\tvar createNonEnumerableProperty = /*@__PURE__*/ requireCreateNonEnumerableProperty();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\n\tvar wrapConstructor = function (NativeConstructor) {\n\t  var Wrapper = function (a, b, c) {\n\t    if (this instanceof Wrapper) {\n\t      switch (arguments.length) {\n\t        case 0: return new NativeConstructor();\n\t        case 1: return new NativeConstructor(a);\n\t        case 2: return new NativeConstructor(a, b);\n\t      } return new NativeConstructor(a, b, c);\n\t    } return apply(NativeConstructor, this, arguments);\n\t  };\n\t  Wrapper.prototype = NativeConstructor.prototype;\n\t  return Wrapper;\n\t};\n\n\t/*\n\t  options.target         - name of the target object\n\t  options.global         - target is the global object\n\t  options.stat           - export as static methods of target\n\t  options.proto          - export as prototype methods of target\n\t  options.real           - real prototype method for the `pure` version\n\t  options.forced         - export even if the native feature is available\n\t  options.bind           - bind methods to the target, required for the `pure` version\n\t  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n\t  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n\t  options.sham           - add a flag to not completely full polyfills\n\t  options.enumerable     - export as enumerable property\n\t  options.dontCallGetSet - prevent calling a getter on target\n\t  options.name           - the .name of the function if it does not match the key\n\t*/\n\t_export = function (options, source) {\n\t  var TARGET = options.target;\n\t  var GLOBAL = options.global;\n\t  var STATIC = options.stat;\n\t  var PROTO = options.proto;\n\n\t  var nativeSource = GLOBAL ? globalThis : STATIC ? globalThis[TARGET] : globalThis[TARGET] && globalThis[TARGET].prototype;\n\n\t  var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n\t  var targetPrototype = target.prototype;\n\n\t  var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n\t  var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n\t  for (key in source) {\n\t    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n\t    // contains in native\n\t    USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n\t    targetProperty = target[key];\n\n\t    if (USE_NATIVE) if (options.dontCallGetSet) {\n\t      descriptor = getOwnPropertyDescriptor(nativeSource, key);\n\t      nativeProperty = descriptor && descriptor.value;\n\t    } else nativeProperty = nativeSource[key];\n\n\t    // export native or implementation\n\t    sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n\t    if (!FORCED && !PROTO && typeof targetProperty == typeof sourceProperty) continue;\n\n\t    // bind methods to global for calling from export context\n\t    if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, globalThis);\n\t    // wrap global constructors for prevent changes in this version\n\t    else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n\t    // make static versions for prototype methods\n\t    else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n\t    // default case\n\t    else resultProperty = sourceProperty;\n\n\t    // add a flag to not completely full polyfills\n\t    if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n\t      createNonEnumerableProperty(resultProperty, 'sham', true);\n\t    }\n\n\t    createNonEnumerableProperty(target, key, resultProperty);\n\n\t    if (PROTO) {\n\t      VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n\t      if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n\t        createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n\t      }\n\t      // export virtual prototype methods\n\t      createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n\t      // export real prototype methods\n\t      if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) {\n\t        createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n\t      }\n\t    }\n\t  }\n\t};\n\treturn _export;\n}\n\nvar isArray$3;\nvar hasRequiredIsArray$3;\n\nfunction requireIsArray$3 () {\n\tif (hasRequiredIsArray$3) return isArray$3;\n\thasRequiredIsArray$3 = 1;\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\n\t// `IsArray` abstract operation\n\t// https://tc39.es/ecma262/#sec-isarray\n\t// eslint-disable-next-line es/no-array-isarray -- safe\n\tisArray$3 = Array.isArray || function isArray(argument) {\n\t  return classof(argument) === 'Array';\n\t};\n\treturn isArray$3;\n}\n\nvar mathTrunc;\nvar hasRequiredMathTrunc;\n\nfunction requireMathTrunc () {\n\tif (hasRequiredMathTrunc) return mathTrunc;\n\thasRequiredMathTrunc = 1;\n\tvar ceil = Math.ceil;\n\tvar floor = Math.floor;\n\n\t// `Math.trunc` method\n\t// https://tc39.es/ecma262/#sec-math.trunc\n\t// eslint-disable-next-line es/no-math-trunc -- safe\n\tmathTrunc = Math.trunc || function trunc(x) {\n\t  var n = +x;\n\t  return (n > 0 ? floor : ceil)(n);\n\t};\n\treturn mathTrunc;\n}\n\nvar toIntegerOrInfinity;\nvar hasRequiredToIntegerOrInfinity;\n\nfunction requireToIntegerOrInfinity () {\n\tif (hasRequiredToIntegerOrInfinity) return toIntegerOrInfinity;\n\thasRequiredToIntegerOrInfinity = 1;\n\tvar trunc = /*@__PURE__*/ requireMathTrunc();\n\n\t// `ToIntegerOrInfinity` abstract operation\n\t// https://tc39.es/ecma262/#sec-tointegerorinfinity\n\ttoIntegerOrInfinity = function (argument) {\n\t  var number = +argument;\n\t  // eslint-disable-next-line no-self-compare -- NaN check\n\t  return number !== number || number === 0 ? 0 : trunc(number);\n\t};\n\treturn toIntegerOrInfinity;\n}\n\nvar toLength;\nvar hasRequiredToLength;\n\nfunction requireToLength () {\n\tif (hasRequiredToLength) return toLength;\n\thasRequiredToLength = 1;\n\tvar toIntegerOrInfinity = /*@__PURE__*/ requireToIntegerOrInfinity();\n\n\tvar min = Math.min;\n\n\t// `ToLength` abstract operation\n\t// https://tc39.es/ecma262/#sec-tolength\n\ttoLength = function (argument) {\n\t  var len = toIntegerOrInfinity(argument);\n\t  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n\t};\n\treturn toLength;\n}\n\nvar lengthOfArrayLike;\nvar hasRequiredLengthOfArrayLike;\n\nfunction requireLengthOfArrayLike () {\n\tif (hasRequiredLengthOfArrayLike) return lengthOfArrayLike;\n\thasRequiredLengthOfArrayLike = 1;\n\tvar toLength = /*@__PURE__*/ requireToLength();\n\n\t// `LengthOfArrayLike` abstract operation\n\t// https://tc39.es/ecma262/#sec-lengthofarraylike\n\tlengthOfArrayLike = function (obj) {\n\t  return toLength(obj.length);\n\t};\n\treturn lengthOfArrayLike;\n}\n\nvar doesNotExceedSafeInteger;\nvar hasRequiredDoesNotExceedSafeInteger;\n\nfunction requireDoesNotExceedSafeInteger () {\n\tif (hasRequiredDoesNotExceedSafeInteger) return doesNotExceedSafeInteger;\n\thasRequiredDoesNotExceedSafeInteger = 1;\n\tvar $TypeError = TypeError;\n\tvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\n\tdoesNotExceedSafeInteger = function (it) {\n\t  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n\t  return it;\n\t};\n\treturn doesNotExceedSafeInteger;\n}\n\nvar createProperty;\nvar hasRequiredCreateProperty;\n\nfunction requireCreateProperty () {\n\tif (hasRequiredCreateProperty) return createProperty;\n\thasRequiredCreateProperty = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar definePropertyModule = /*@__PURE__*/ requireObjectDefineProperty();\n\tvar createPropertyDescriptor = /*@__PURE__*/ requireCreatePropertyDescriptor();\n\n\tcreateProperty = function (object, key, value) {\n\t  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n\t  else object[key] = value;\n\t};\n\treturn createProperty;\n}\n\nvar toStringTagSupport;\nvar hasRequiredToStringTagSupport;\n\nfunction requireToStringTagSupport () {\n\tif (hasRequiredToStringTagSupport) return toStringTagSupport;\n\thasRequiredToStringTagSupport = 1;\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\tvar test = {};\n\n\ttest[TO_STRING_TAG] = 'z';\n\n\ttoStringTagSupport = String(test) === '[object z]';\n\treturn toStringTagSupport;\n}\n\nvar classof;\nvar hasRequiredClassof;\n\nfunction requireClassof () {\n\tif (hasRequiredClassof) return classof;\n\thasRequiredClassof = 1;\n\tvar TO_STRING_TAG_SUPPORT = /*@__PURE__*/ requireToStringTagSupport();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar classofRaw = /*@__PURE__*/ requireClassofRaw();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\tvar $Object = Object;\n\n\t// ES3 wrong here\n\tvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n\t// fallback for IE11 Script Access Denied error\n\tvar tryGet = function (it, key) {\n\t  try {\n\t    return it[key];\n\t  } catch (error) { /* empty */ }\n\t};\n\n\t// getting tag from ES6+ `Object.prototype.toString`\n\tclassof = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n\t  var O, tag, result;\n\t  return it === undefined ? 'Undefined' : it === null ? 'Null'\n\t    // @@toStringTag case\n\t    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n\t    // builtinTag case\n\t    : CORRECT_ARGUMENTS ? classofRaw(O)\n\t    // ES3 arguments fallback\n\t    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n\t};\n\treturn classof;\n}\n\nvar inspectSource;\nvar hasRequiredInspectSource;\n\nfunction requireInspectSource () {\n\tif (hasRequiredInspectSource) return inspectSource;\n\thasRequiredInspectSource = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar store = /*@__PURE__*/ requireSharedStore();\n\n\tvar functionToString = uncurryThis(Function.toString);\n\n\t// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\n\tif (!isCallable(store.inspectSource)) {\n\t  store.inspectSource = function (it) {\n\t    return functionToString(it);\n\t  };\n\t}\n\n\tinspectSource = store.inspectSource;\n\treturn inspectSource;\n}\n\nvar isConstructor;\nvar hasRequiredIsConstructor;\n\nfunction requireIsConstructor () {\n\tif (hasRequiredIsConstructor) return isConstructor;\n\thasRequiredIsConstructor = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar classof = /*@__PURE__*/ requireClassof();\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar inspectSource = /*@__PURE__*/ requireInspectSource();\n\n\tvar noop = function () { /* empty */ };\n\tvar construct = getBuiltIn('Reflect', 'construct');\n\tvar constructorRegExp = /^\\s*(?:class|function)\\b/;\n\tvar exec = uncurryThis(constructorRegExp.exec);\n\tvar INCORRECT_TO_STRING = !constructorRegExp.test(noop);\n\n\tvar isConstructorModern = function isConstructor(argument) {\n\t  if (!isCallable(argument)) return false;\n\t  try {\n\t    construct(noop, [], argument);\n\t    return true;\n\t  } catch (error) {\n\t    return false;\n\t  }\n\t};\n\n\tvar isConstructorLegacy = function isConstructor(argument) {\n\t  if (!isCallable(argument)) return false;\n\t  switch (classof(argument)) {\n\t    case 'AsyncFunction':\n\t    case 'GeneratorFunction':\n\t    case 'AsyncGeneratorFunction': return false;\n\t  }\n\t  try {\n\t    // we can't check .prototype since constructors produced by .bind haven't it\n\t    // `Function#toString` throws on some built-it function in some legacy engines\n\t    // (for example, `DOMQuad` and similar in FF41-)\n\t    return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n\t  } catch (error) {\n\t    return true;\n\t  }\n\t};\n\n\tisConstructorLegacy.sham = true;\n\n\t// `IsConstructor` abstract operation\n\t// https://tc39.es/ecma262/#sec-isconstructor\n\tisConstructor = !construct || fails(function () {\n\t  var called;\n\t  return isConstructorModern(isConstructorModern.call)\n\t    || !isConstructorModern(Object)\n\t    || !isConstructorModern(function () { called = true; })\n\t    || called;\n\t}) ? isConstructorLegacy : isConstructorModern;\n\treturn isConstructor;\n}\n\nvar arraySpeciesConstructor;\nvar hasRequiredArraySpeciesConstructor;\n\nfunction requireArraySpeciesConstructor () {\n\tif (hasRequiredArraySpeciesConstructor) return arraySpeciesConstructor;\n\thasRequiredArraySpeciesConstructor = 1;\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\tvar isConstructor = /*@__PURE__*/ requireIsConstructor();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar SPECIES = wellKnownSymbol('species');\n\tvar $Array = Array;\n\n\t// a part of `ArraySpeciesCreate` abstract operation\n\t// https://tc39.es/ecma262/#sec-arrayspeciescreate\n\tarraySpeciesConstructor = function (originalArray) {\n\t  var C;\n\t  if (isArray(originalArray)) {\n\t    C = originalArray.constructor;\n\t    // cross-realm fallback\n\t    if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n\t    else if (isObject(C)) {\n\t      C = C[SPECIES];\n\t      if (C === null) C = undefined;\n\t    }\n\t  } return C === undefined ? $Array : C;\n\t};\n\treturn arraySpeciesConstructor;\n}\n\nvar arraySpeciesCreate;\nvar hasRequiredArraySpeciesCreate;\n\nfunction requireArraySpeciesCreate () {\n\tif (hasRequiredArraySpeciesCreate) return arraySpeciesCreate;\n\thasRequiredArraySpeciesCreate = 1;\n\tvar arraySpeciesConstructor = /*@__PURE__*/ requireArraySpeciesConstructor();\n\n\t// `ArraySpeciesCreate` abstract operation\n\t// https://tc39.es/ecma262/#sec-arrayspeciescreate\n\tarraySpeciesCreate = function (originalArray, length) {\n\t  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n\t};\n\treturn arraySpeciesCreate;\n}\n\nvar arrayMethodHasSpeciesSupport;\nvar hasRequiredArrayMethodHasSpeciesSupport;\n\nfunction requireArrayMethodHasSpeciesSupport () {\n\tif (hasRequiredArrayMethodHasSpeciesSupport) return arrayMethodHasSpeciesSupport;\n\thasRequiredArrayMethodHasSpeciesSupport = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar V8_VERSION = /*@__PURE__*/ requireEnvironmentV8Version();\n\n\tvar SPECIES = wellKnownSymbol('species');\n\n\tarrayMethodHasSpeciesSupport = function (METHOD_NAME) {\n\t  // We can't use this feature detection in V8 since it causes\n\t  // deoptimization and serious performance degradation\n\t  // https://github.com/zloirock/core-js/issues/677\n\t  return V8_VERSION >= 51 || !fails(function () {\n\t    var array = [];\n\t    var constructor = array.constructor = {};\n\t    constructor[SPECIES] = function () {\n\t      return { foo: 1 };\n\t    };\n\t    return array[METHOD_NAME](Boolean).foo !== 1;\n\t  });\n\t};\n\treturn arrayMethodHasSpeciesSupport;\n}\n\nvar hasRequiredEs_array_concat;\n\nfunction requireEs_array_concat () {\n\tif (hasRequiredEs_array_concat) return es_array_concat;\n\thasRequiredEs_array_concat = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar doesNotExceedSafeInteger = /*@__PURE__*/ requireDoesNotExceedSafeInteger();\n\tvar createProperty = /*@__PURE__*/ requireCreateProperty();\n\tvar arraySpeciesCreate = /*@__PURE__*/ requireArraySpeciesCreate();\n\tvar arrayMethodHasSpeciesSupport = /*@__PURE__*/ requireArrayMethodHasSpeciesSupport();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar V8_VERSION = /*@__PURE__*/ requireEnvironmentV8Version();\n\n\tvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\n\n\t// We can't use this feature detection in V8 since it causes\n\t// deoptimization and serious performance degradation\n\t// https://github.com/zloirock/core-js/issues/679\n\tvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n\t  var array = [];\n\t  array[IS_CONCAT_SPREADABLE] = false;\n\t  return array.concat()[0] !== array;\n\t});\n\n\tvar isConcatSpreadable = function (O) {\n\t  if (!isObject(O)) return false;\n\t  var spreadable = O[IS_CONCAT_SPREADABLE];\n\t  return spreadable !== undefined ? !!spreadable : isArray(O);\n\t};\n\n\tvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat');\n\n\t// `Array.prototype.concat` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.concat\n\t// with adding support of @@isConcatSpreadable and @@species\n\t$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n\t  // eslint-disable-next-line no-unused-vars -- required for `.length`\n\t  concat: function concat(arg) {\n\t    var O = toObject(this);\n\t    var A = arraySpeciesCreate(O, 0);\n\t    var n = 0;\n\t    var i, k, length, len, E;\n\t    for (i = -1, length = arguments.length; i < length; i++) {\n\t      E = i === -1 ? O : arguments[i];\n\t      if (isConcatSpreadable(E)) {\n\t        len = lengthOfArrayLike(E);\n\t        doesNotExceedSafeInteger(n + len);\n\t        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n\t      } else {\n\t        doesNotExceedSafeInteger(n + 1);\n\t        createProperty(A, n++, E);\n\t      }\n\t    }\n\t    A.length = n;\n\t    return A;\n\t  }\n\t});\n\treturn es_array_concat;\n}\n\nvar es_symbol = {};\n\nvar es_symbol_constructor = {};\n\nvar toString;\nvar hasRequiredToString;\n\nfunction requireToString () {\n\tif (hasRequiredToString) return toString;\n\thasRequiredToString = 1;\n\tvar classof = /*@__PURE__*/ requireClassof();\n\n\tvar $String = String;\n\n\ttoString = function (argument) {\n\t  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n\t  return $String(argument);\n\t};\n\treturn toString;\n}\n\nvar objectDefineProperties = {};\n\nvar toAbsoluteIndex;\nvar hasRequiredToAbsoluteIndex;\n\nfunction requireToAbsoluteIndex () {\n\tif (hasRequiredToAbsoluteIndex) return toAbsoluteIndex;\n\thasRequiredToAbsoluteIndex = 1;\n\tvar toIntegerOrInfinity = /*@__PURE__*/ requireToIntegerOrInfinity();\n\n\tvar max = Math.max;\n\tvar min = Math.min;\n\n\t// Helper for a popular repeating case of the spec:\n\t// Let integer be ? ToInteger(index).\n\t// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\n\ttoAbsoluteIndex = function (index, length) {\n\t  var integer = toIntegerOrInfinity(index);\n\t  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n\t};\n\treturn toAbsoluteIndex;\n}\n\nvar arrayIncludes;\nvar hasRequiredArrayIncludes;\n\nfunction requireArrayIncludes () {\n\tif (hasRequiredArrayIncludes) return arrayIncludes;\n\thasRequiredArrayIncludes = 1;\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar toAbsoluteIndex = /*@__PURE__*/ requireToAbsoluteIndex();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\n\t// `Array.prototype.{ indexOf, includes }` methods implementation\n\tvar createMethod = function (IS_INCLUDES) {\n\t  return function ($this, el, fromIndex) {\n\t    var O = toIndexedObject($this);\n\t    var length = lengthOfArrayLike(O);\n\t    if (length === 0) return !IS_INCLUDES && -1;\n\t    var index = toAbsoluteIndex(fromIndex, length);\n\t    var value;\n\t    // Array#includes uses SameValueZero equality algorithm\n\t    // eslint-disable-next-line no-self-compare -- NaN check\n\t    if (IS_INCLUDES && el !== el) while (length > index) {\n\t      value = O[index++];\n\t      // eslint-disable-next-line no-self-compare -- NaN check\n\t      if (value !== value) return true;\n\t    // Array#indexOf ignores holes, Array#includes - not\n\t    } else for (;length > index; index++) {\n\t      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n\t    } return !IS_INCLUDES && -1;\n\t  };\n\t};\n\n\tarrayIncludes = {\n\t  // `Array.prototype.includes` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.includes\n\t  includes: createMethod(true),\n\t  // `Array.prototype.indexOf` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n\t  indexOf: createMethod(false)\n\t};\n\treturn arrayIncludes;\n}\n\nvar hiddenKeys;\nvar hasRequiredHiddenKeys;\n\nfunction requireHiddenKeys () {\n\tif (hasRequiredHiddenKeys) return hiddenKeys;\n\thasRequiredHiddenKeys = 1;\n\thiddenKeys = {};\n\treturn hiddenKeys;\n}\n\nvar objectKeysInternal;\nvar hasRequiredObjectKeysInternal;\n\nfunction requireObjectKeysInternal () {\n\tif (hasRequiredObjectKeysInternal) return objectKeysInternal;\n\thasRequiredObjectKeysInternal = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar indexOf = /*@__PURE__*/ requireArrayIncludes().indexOf;\n\tvar hiddenKeys = /*@__PURE__*/ requireHiddenKeys();\n\n\tvar push = uncurryThis([].push);\n\n\tobjectKeysInternal = function (object, names) {\n\t  var O = toIndexedObject(object);\n\t  var i = 0;\n\t  var result = [];\n\t  var key;\n\t  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n\t  // Don't enum bug & hidden keys\n\t  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n\t    ~indexOf(result, key) || push(result, key);\n\t  }\n\t  return result;\n\t};\n\treturn objectKeysInternal;\n}\n\nvar enumBugKeys;\nvar hasRequiredEnumBugKeys;\n\nfunction requireEnumBugKeys () {\n\tif (hasRequiredEnumBugKeys) return enumBugKeys;\n\thasRequiredEnumBugKeys = 1;\n\t// IE8- don't enum bug keys\n\tenumBugKeys = [\n\t  'constructor',\n\t  'hasOwnProperty',\n\t  'isPrototypeOf',\n\t  'propertyIsEnumerable',\n\t  'toLocaleString',\n\t  'toString',\n\t  'valueOf'\n\t];\n\treturn enumBugKeys;\n}\n\nvar objectKeys;\nvar hasRequiredObjectKeys;\n\nfunction requireObjectKeys () {\n\tif (hasRequiredObjectKeys) return objectKeys;\n\thasRequiredObjectKeys = 1;\n\tvar internalObjectKeys = /*@__PURE__*/ requireObjectKeysInternal();\n\tvar enumBugKeys = /*@__PURE__*/ requireEnumBugKeys();\n\n\t// `Object.keys` method\n\t// https://tc39.es/ecma262/#sec-object.keys\n\t// eslint-disable-next-line es/no-object-keys -- safe\n\tobjectKeys = Object.keys || function keys(O) {\n\t  return internalObjectKeys(O, enumBugKeys);\n\t};\n\treturn objectKeys;\n}\n\nvar hasRequiredObjectDefineProperties;\n\nfunction requireObjectDefineProperties () {\n\tif (hasRequiredObjectDefineProperties) return objectDefineProperties;\n\thasRequiredObjectDefineProperties = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar V8_PROTOTYPE_DEFINE_BUG = /*@__PURE__*/ requireV8PrototypeDefineBug();\n\tvar definePropertyModule = /*@__PURE__*/ requireObjectDefineProperty();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar objectKeys = /*@__PURE__*/ requireObjectKeys();\n\n\t// `Object.defineProperties` method\n\t// https://tc39.es/ecma262/#sec-object.defineproperties\n\t// eslint-disable-next-line es/no-object-defineproperties -- safe\n\tobjectDefineProperties.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n\t  anObject(O);\n\t  var props = toIndexedObject(Properties);\n\t  var keys = objectKeys(Properties);\n\t  var length = keys.length;\n\t  var index = 0;\n\t  var key;\n\t  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n\t  return O;\n\t};\n\treturn objectDefineProperties;\n}\n\nvar html;\nvar hasRequiredHtml;\n\nfunction requireHtml () {\n\tif (hasRequiredHtml) return html;\n\thasRequiredHtml = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\n\thtml = getBuiltIn('document', 'documentElement');\n\treturn html;\n}\n\nvar sharedKey;\nvar hasRequiredSharedKey;\n\nfunction requireSharedKey () {\n\tif (hasRequiredSharedKey) return sharedKey;\n\thasRequiredSharedKey = 1;\n\tvar shared = /*@__PURE__*/ requireShared();\n\tvar uid = /*@__PURE__*/ requireUid();\n\n\tvar keys = shared('keys');\n\n\tsharedKey = function (key) {\n\t  return keys[key] || (keys[key] = uid(key));\n\t};\n\treturn sharedKey;\n}\n\nvar objectCreate;\nvar hasRequiredObjectCreate;\n\nfunction requireObjectCreate () {\n\tif (hasRequiredObjectCreate) return objectCreate;\n\thasRequiredObjectCreate = 1;\n\t/* global ActiveXObject -- old IE, WSH */\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar definePropertiesModule = /*@__PURE__*/ requireObjectDefineProperties();\n\tvar enumBugKeys = /*@__PURE__*/ requireEnumBugKeys();\n\tvar hiddenKeys = /*@__PURE__*/ requireHiddenKeys();\n\tvar html = /*@__PURE__*/ requireHtml();\n\tvar documentCreateElement = /*@__PURE__*/ requireDocumentCreateElement();\n\tvar sharedKey = /*@__PURE__*/ requireSharedKey();\n\n\tvar GT = '>';\n\tvar LT = '<';\n\tvar PROTOTYPE = 'prototype';\n\tvar SCRIPT = 'script';\n\tvar IE_PROTO = sharedKey('IE_PROTO');\n\n\tvar EmptyConstructor = function () { /* empty */ };\n\n\tvar scriptTag = function (content) {\n\t  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n\t};\n\n\t// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\n\tvar NullProtoObjectViaActiveX = function (activeXDocument) {\n\t  activeXDocument.write(scriptTag(''));\n\t  activeXDocument.close();\n\t  var temp = activeXDocument.parentWindow.Object;\n\t  // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n\t  activeXDocument = null;\n\t  return temp;\n\t};\n\n\t// Create object with fake `null` prototype: use iframe Object with cleared prototype\n\tvar NullProtoObjectViaIFrame = function () {\n\t  // Thrash, waste and sodomy: IE GC bug\n\t  var iframe = documentCreateElement('iframe');\n\t  var JS = 'java' + SCRIPT + ':';\n\t  var iframeDocument;\n\t  iframe.style.display = 'none';\n\t  html.appendChild(iframe);\n\t  // https://github.com/zloirock/core-js/issues/475\n\t  iframe.src = String(JS);\n\t  iframeDocument = iframe.contentWindow.document;\n\t  iframeDocument.open();\n\t  iframeDocument.write(scriptTag('document.F=Object'));\n\t  iframeDocument.close();\n\t  return iframeDocument.F;\n\t};\n\n\t// Check for document.domain and active x support\n\t// No need to use active x approach when document.domain is not set\n\t// see https://github.com/es-shims/es5-shim/issues/150\n\t// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n\t// avoid IE GC bug\n\tvar activeXDocument;\n\tvar NullProtoObject = function () {\n\t  try {\n\t    activeXDocument = new ActiveXObject('htmlfile');\n\t  } catch (error) { /* ignore */ }\n\t  NullProtoObject = typeof document != 'undefined'\n\t    ? document.domain && activeXDocument\n\t      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n\t      : NullProtoObjectViaIFrame()\n\t    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n\t  var length = enumBugKeys.length;\n\t  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n\t  return NullProtoObject();\n\t};\n\n\thiddenKeys[IE_PROTO] = true;\n\n\t// `Object.create` method\n\t// https://tc39.es/ecma262/#sec-object.create\n\t// eslint-disable-next-line es/no-object-create -- safe\n\tobjectCreate = Object.create || function create(O, Properties) {\n\t  var result;\n\t  if (O !== null) {\n\t    EmptyConstructor[PROTOTYPE] = anObject(O);\n\t    result = new EmptyConstructor();\n\t    EmptyConstructor[PROTOTYPE] = null;\n\t    // add \"__proto__\" for Object.getPrototypeOf polyfill\n\t    result[IE_PROTO] = O;\n\t  } else result = NullProtoObject();\n\t  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n\t};\n\treturn objectCreate;\n}\n\nvar objectGetOwnPropertyNames = {};\n\nvar hasRequiredObjectGetOwnPropertyNames;\n\nfunction requireObjectGetOwnPropertyNames () {\n\tif (hasRequiredObjectGetOwnPropertyNames) return objectGetOwnPropertyNames;\n\thasRequiredObjectGetOwnPropertyNames = 1;\n\tvar internalObjectKeys = /*@__PURE__*/ requireObjectKeysInternal();\n\tvar enumBugKeys = /*@__PURE__*/ requireEnumBugKeys();\n\n\tvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n\t// `Object.getOwnPropertyNames` method\n\t// https://tc39.es/ecma262/#sec-object.getownpropertynames\n\t// eslint-disable-next-line es/no-object-getownpropertynames -- safe\n\tobjectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n\t  return internalObjectKeys(O, hiddenKeys);\n\t};\n\treturn objectGetOwnPropertyNames;\n}\n\nvar objectGetOwnPropertyNamesExternal = {};\n\nvar arraySlice;\nvar hasRequiredArraySlice;\n\nfunction requireArraySlice () {\n\tif (hasRequiredArraySlice) return arraySlice;\n\thasRequiredArraySlice = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\n\tarraySlice = uncurryThis([].slice);\n\treturn arraySlice;\n}\n\nvar hasRequiredObjectGetOwnPropertyNamesExternal;\n\nfunction requireObjectGetOwnPropertyNamesExternal () {\n\tif (hasRequiredObjectGetOwnPropertyNamesExternal) return objectGetOwnPropertyNamesExternal;\n\thasRequiredObjectGetOwnPropertyNamesExternal = 1;\n\t/* eslint-disable es/no-object-getownpropertynames -- safe */\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar $getOwnPropertyNames = /*@__PURE__*/ requireObjectGetOwnPropertyNames().f;\n\tvar arraySlice = /*@__PURE__*/ requireArraySlice();\n\n\tvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n\t  ? Object.getOwnPropertyNames(window) : [];\n\n\tvar getWindowNames = function (it) {\n\t  try {\n\t    return $getOwnPropertyNames(it);\n\t  } catch (error) {\n\t    return arraySlice(windowNames);\n\t  }\n\t};\n\n\t// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\tobjectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) {\n\t  return windowNames && classof(it) === 'Window'\n\t    ? getWindowNames(it)\n\t    : $getOwnPropertyNames(toIndexedObject(it));\n\t};\n\treturn objectGetOwnPropertyNamesExternal;\n}\n\nvar objectGetOwnPropertySymbols = {};\n\nvar hasRequiredObjectGetOwnPropertySymbols;\n\nfunction requireObjectGetOwnPropertySymbols () {\n\tif (hasRequiredObjectGetOwnPropertySymbols) return objectGetOwnPropertySymbols;\n\thasRequiredObjectGetOwnPropertySymbols = 1;\n\t// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\n\tobjectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;\n\treturn objectGetOwnPropertySymbols;\n}\n\nvar defineBuiltIn;\nvar hasRequiredDefineBuiltIn;\n\nfunction requireDefineBuiltIn () {\n\tif (hasRequiredDefineBuiltIn) return defineBuiltIn;\n\thasRequiredDefineBuiltIn = 1;\n\tvar createNonEnumerableProperty = /*@__PURE__*/ requireCreateNonEnumerableProperty();\n\n\tdefineBuiltIn = function (target, key, value, options) {\n\t  if (options && options.enumerable) target[key] = value;\n\t  else createNonEnumerableProperty(target, key, value);\n\t  return target;\n\t};\n\treturn defineBuiltIn;\n}\n\nvar defineBuiltInAccessor;\nvar hasRequiredDefineBuiltInAccessor;\n\nfunction requireDefineBuiltInAccessor () {\n\tif (hasRequiredDefineBuiltInAccessor) return defineBuiltInAccessor;\n\thasRequiredDefineBuiltInAccessor = 1;\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty();\n\n\tdefineBuiltInAccessor = function (target, name, descriptor) {\n\t  return defineProperty.f(target, name, descriptor);\n\t};\n\treturn defineBuiltInAccessor;\n}\n\nvar wellKnownSymbolWrapped = {};\n\nvar hasRequiredWellKnownSymbolWrapped;\n\nfunction requireWellKnownSymbolWrapped () {\n\tif (hasRequiredWellKnownSymbolWrapped) return wellKnownSymbolWrapped;\n\thasRequiredWellKnownSymbolWrapped = 1;\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\twellKnownSymbolWrapped.f = wellKnownSymbol;\n\treturn wellKnownSymbolWrapped;\n}\n\nvar wellKnownSymbolDefine;\nvar hasRequiredWellKnownSymbolDefine;\n\nfunction requireWellKnownSymbolDefine () {\n\tif (hasRequiredWellKnownSymbolDefine) return wellKnownSymbolDefine;\n\thasRequiredWellKnownSymbolDefine = 1;\n\tvar path = /*@__PURE__*/ requirePath();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar wrappedWellKnownSymbolModule = /*@__PURE__*/ requireWellKnownSymbolWrapped();\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty().f;\n\n\twellKnownSymbolDefine = function (NAME) {\n\t  var Symbol = path.Symbol || (path.Symbol = {});\n\t  if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n\t    value: wrappedWellKnownSymbolModule.f(NAME)\n\t  });\n\t};\n\treturn wellKnownSymbolDefine;\n}\n\nvar symbolDefineToPrimitive;\nvar hasRequiredSymbolDefineToPrimitive;\n\nfunction requireSymbolDefineToPrimitive () {\n\tif (hasRequiredSymbolDefineToPrimitive) return symbolDefineToPrimitive;\n\thasRequiredSymbolDefineToPrimitive = 1;\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar defineBuiltIn = /*@__PURE__*/ requireDefineBuiltIn();\n\n\tsymbolDefineToPrimitive = function () {\n\t  var Symbol = getBuiltIn('Symbol');\n\t  var SymbolPrototype = Symbol && Symbol.prototype;\n\t  var valueOf = SymbolPrototype && SymbolPrototype.valueOf;\n\t  var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n\t  if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {\n\t    // `Symbol.prototype[@@toPrimitive]` method\n\t    // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n\t    // eslint-disable-next-line no-unused-vars -- required for .length\n\t    defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n\t      return call(valueOf, this);\n\t    }, { arity: 1 });\n\t  }\n\t};\n\treturn symbolDefineToPrimitive;\n}\n\nvar objectToString;\nvar hasRequiredObjectToString;\n\nfunction requireObjectToString () {\n\tif (hasRequiredObjectToString) return objectToString;\n\thasRequiredObjectToString = 1;\n\tvar TO_STRING_TAG_SUPPORT = /*@__PURE__*/ requireToStringTagSupport();\n\tvar classof = /*@__PURE__*/ requireClassof();\n\n\t// `Object.prototype.toString` method implementation\n\t// https://tc39.es/ecma262/#sec-object.prototype.tostring\n\tobjectToString = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n\t  return '[object ' + classof(this) + ']';\n\t};\n\treturn objectToString;\n}\n\nvar setToStringTag;\nvar hasRequiredSetToStringTag;\n\nfunction requireSetToStringTag () {\n\tif (hasRequiredSetToStringTag) return setToStringTag;\n\thasRequiredSetToStringTag = 1;\n\tvar TO_STRING_TAG_SUPPORT = /*@__PURE__*/ requireToStringTagSupport();\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty().f;\n\tvar createNonEnumerableProperty = /*@__PURE__*/ requireCreateNonEnumerableProperty();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar toString = /*@__PURE__*/ requireObjectToString();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\n\tsetToStringTag = function (it, TAG, STATIC, SET_METHOD) {\n\t  var target = STATIC ? it : it && it.prototype;\n\t  if (target) {\n\t    if (!hasOwn(target, TO_STRING_TAG)) {\n\t      defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n\t    }\n\t    if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n\t      createNonEnumerableProperty(target, 'toString', toString);\n\t    }\n\t  }\n\t};\n\treturn setToStringTag;\n}\n\nvar weakMapBasicDetection;\nvar hasRequiredWeakMapBasicDetection;\n\nfunction requireWeakMapBasicDetection () {\n\tif (hasRequiredWeakMapBasicDetection) return weakMapBasicDetection;\n\thasRequiredWeakMapBasicDetection = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\n\tvar WeakMap = globalThis.WeakMap;\n\n\tweakMapBasicDetection = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n\treturn weakMapBasicDetection;\n}\n\nvar internalState;\nvar hasRequiredInternalState;\n\nfunction requireInternalState () {\n\tif (hasRequiredInternalState) return internalState;\n\thasRequiredInternalState = 1;\n\tvar NATIVE_WEAK_MAP = /*@__PURE__*/ requireWeakMapBasicDetection();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar createNonEnumerableProperty = /*@__PURE__*/ requireCreateNonEnumerableProperty();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar shared = /*@__PURE__*/ requireSharedStore();\n\tvar sharedKey = /*@__PURE__*/ requireSharedKey();\n\tvar hiddenKeys = /*@__PURE__*/ requireHiddenKeys();\n\n\tvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\n\tvar TypeError = globalThis.TypeError;\n\tvar WeakMap = globalThis.WeakMap;\n\tvar set, get, has;\n\n\tvar enforce = function (it) {\n\t  return has(it) ? get(it) : set(it, {});\n\t};\n\n\tvar getterFor = function (TYPE) {\n\t  return function (it) {\n\t    var state;\n\t    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n\t      throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n\t    } return state;\n\t  };\n\t};\n\n\tif (NATIVE_WEAK_MAP || shared.state) {\n\t  var store = shared.state || (shared.state = new WeakMap());\n\t  /* eslint-disable no-self-assign -- prototype methods protection */\n\t  store.get = store.get;\n\t  store.has = store.has;\n\t  store.set = store.set;\n\t  /* eslint-enable no-self-assign -- prototype methods protection */\n\t  set = function (it, metadata) {\n\t    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n\t    metadata.facade = it;\n\t    store.set(it, metadata);\n\t    return metadata;\n\t  };\n\t  get = function (it) {\n\t    return store.get(it) || {};\n\t  };\n\t  has = function (it) {\n\t    return store.has(it);\n\t  };\n\t} else {\n\t  var STATE = sharedKey('state');\n\t  hiddenKeys[STATE] = true;\n\t  set = function (it, metadata) {\n\t    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n\t    metadata.facade = it;\n\t    createNonEnumerableProperty(it, STATE, metadata);\n\t    return metadata;\n\t  };\n\t  get = function (it) {\n\t    return hasOwn(it, STATE) ? it[STATE] : {};\n\t  };\n\t  has = function (it) {\n\t    return hasOwn(it, STATE);\n\t  };\n\t}\n\n\tinternalState = {\n\t  set: set,\n\t  get: get,\n\t  has: has,\n\t  enforce: enforce,\n\t  getterFor: getterFor\n\t};\n\treturn internalState;\n}\n\nvar arrayIteration;\nvar hasRequiredArrayIteration;\n\nfunction requireArrayIteration () {\n\tif (hasRequiredArrayIteration) return arrayIteration;\n\thasRequiredArrayIteration = 1;\n\tvar bind = /*@__PURE__*/ requireFunctionBindContext();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar IndexedObject = /*@__PURE__*/ requireIndexedObject();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar arraySpeciesCreate = /*@__PURE__*/ requireArraySpeciesCreate();\n\n\tvar push = uncurryThis([].push);\n\n\t// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\n\tvar createMethod = function (TYPE) {\n\t  var IS_MAP = TYPE === 1;\n\t  var IS_FILTER = TYPE === 2;\n\t  var IS_SOME = TYPE === 3;\n\t  var IS_EVERY = TYPE === 4;\n\t  var IS_FIND_INDEX = TYPE === 6;\n\t  var IS_FILTER_REJECT = TYPE === 7;\n\t  var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n\t  return function ($this, callbackfn, that, specificCreate) {\n\t    var O = toObject($this);\n\t    var self = IndexedObject(O);\n\t    var length = lengthOfArrayLike(self);\n\t    var boundFunction = bind(callbackfn, that);\n\t    var index = 0;\n\t    var create = specificCreate || arraySpeciesCreate;\n\t    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n\t    var value, result;\n\t    for (;length > index; index++) if (NO_HOLES || index in self) {\n\t      value = self[index];\n\t      result = boundFunction(value, index, O);\n\t      if (TYPE) {\n\t        if (IS_MAP) target[index] = result; // map\n\t        else if (result) switch (TYPE) {\n\t          case 3: return true;              // some\n\t          case 5: return value;             // find\n\t          case 6: return index;             // findIndex\n\t          case 2: push(target, value);      // filter\n\t        } else switch (TYPE) {\n\t          case 4: return false;             // every\n\t          case 7: push(target, value);      // filterReject\n\t        }\n\t      }\n\t    }\n\t    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n\t  };\n\t};\n\n\tarrayIteration = {\n\t  // `Array.prototype.forEach` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.foreach\n\t  forEach: createMethod(0),\n\t  // `Array.prototype.map` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.map\n\t  map: createMethod(1),\n\t  // `Array.prototype.filter` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.filter\n\t  filter: createMethod(2),\n\t  // `Array.prototype.some` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.some\n\t  some: createMethod(3),\n\t  // `Array.prototype.every` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.every\n\t  every: createMethod(4),\n\t  // `Array.prototype.find` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.find\n\t  find: createMethod(5),\n\t  // `Array.prototype.findIndex` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n\t  findIndex: createMethod(6),\n\t  // `Array.prototype.filterReject` method\n\t  // https://github.com/tc39/proposal-array-filtering\n\t  filterReject: createMethod(7)\n\t};\n\treturn arrayIteration;\n}\n\nvar hasRequiredEs_symbol_constructor;\n\nfunction requireEs_symbol_constructor () {\n\tif (hasRequiredEs_symbol_constructor) return es_symbol_constructor;\n\thasRequiredEs_symbol_constructor = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar IS_PURE = /*@__PURE__*/ requireIsPure();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar NATIVE_SYMBOL = /*@__PURE__*/ requireSymbolConstructorDetection();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar toPropertyKey = /*@__PURE__*/ requireToPropertyKey();\n\tvar $toString = /*@__PURE__*/ requireToString();\n\tvar createPropertyDescriptor = /*@__PURE__*/ requireCreatePropertyDescriptor();\n\tvar nativeObjectCreate = /*@__PURE__*/ requireObjectCreate();\n\tvar objectKeys = /*@__PURE__*/ requireObjectKeys();\n\tvar getOwnPropertyNamesModule = /*@__PURE__*/ requireObjectGetOwnPropertyNames();\n\tvar getOwnPropertyNamesExternal = /*@__PURE__*/ requireObjectGetOwnPropertyNamesExternal();\n\tvar getOwnPropertySymbolsModule = /*@__PURE__*/ requireObjectGetOwnPropertySymbols();\n\tvar getOwnPropertyDescriptorModule = /*@__PURE__*/ requireObjectGetOwnPropertyDescriptor();\n\tvar definePropertyModule = /*@__PURE__*/ requireObjectDefineProperty();\n\tvar definePropertiesModule = /*@__PURE__*/ requireObjectDefineProperties();\n\tvar propertyIsEnumerableModule = /*@__PURE__*/ requireObjectPropertyIsEnumerable();\n\tvar defineBuiltIn = /*@__PURE__*/ requireDefineBuiltIn();\n\tvar defineBuiltInAccessor = /*@__PURE__*/ requireDefineBuiltInAccessor();\n\tvar shared = /*@__PURE__*/ requireShared();\n\tvar sharedKey = /*@__PURE__*/ requireSharedKey();\n\tvar hiddenKeys = /*@__PURE__*/ requireHiddenKeys();\n\tvar uid = /*@__PURE__*/ requireUid();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar wrappedWellKnownSymbolModule = /*@__PURE__*/ requireWellKnownSymbolWrapped();\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\tvar defineSymbolToPrimitive = /*@__PURE__*/ requireSymbolDefineToPrimitive();\n\tvar setToStringTag = /*@__PURE__*/ requireSetToStringTag();\n\tvar InternalStateModule = /*@__PURE__*/ requireInternalState();\n\tvar $forEach = /*@__PURE__*/ requireArrayIteration().forEach;\n\n\tvar HIDDEN = sharedKey('hidden');\n\tvar SYMBOL = 'Symbol';\n\tvar PROTOTYPE = 'prototype';\n\n\tvar setInternalState = InternalStateModule.set;\n\tvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\n\tvar ObjectPrototype = Object[PROTOTYPE];\n\tvar $Symbol = globalThis.Symbol;\n\tvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\n\tvar RangeError = globalThis.RangeError;\n\tvar TypeError = globalThis.TypeError;\n\tvar QObject = globalThis.QObject;\n\tvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n\tvar nativeDefineProperty = definePropertyModule.f;\n\tvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\n\tvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\n\tvar push = uncurryThis([].push);\n\n\tvar AllSymbols = shared('symbols');\n\tvar ObjectPrototypeSymbols = shared('op-symbols');\n\tvar WellKnownSymbolsStore = shared('wks');\n\n\t// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\n\tvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n\t// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\n\tvar fallbackDefineProperty = function (O, P, Attributes) {\n\t  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n\t  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n\t  nativeDefineProperty(O, P, Attributes);\n\t  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n\t    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n\t  }\n\t};\n\n\tvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n\t  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n\t    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n\t  })).a !== 7;\n\t}) ? fallbackDefineProperty : nativeDefineProperty;\n\n\tvar wrap = function (tag, description) {\n\t  var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n\t  setInternalState(symbol, {\n\t    type: SYMBOL,\n\t    tag: tag,\n\t    description: description\n\t  });\n\t  if (!DESCRIPTORS) symbol.description = description;\n\t  return symbol;\n\t};\n\n\tvar $defineProperty = function defineProperty(O, P, Attributes) {\n\t  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n\t  anObject(O);\n\t  var key = toPropertyKey(P);\n\t  anObject(Attributes);\n\t  if (hasOwn(AllSymbols, key)) {\n\t    if (!Attributes.enumerable) {\n\t      if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));\n\t      O[HIDDEN][key] = true;\n\t    } else {\n\t      if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n\t      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n\t    } return setSymbolDescriptor(O, key, Attributes);\n\t  } return nativeDefineProperty(O, key, Attributes);\n\t};\n\n\tvar $defineProperties = function defineProperties(O, Properties) {\n\t  anObject(O);\n\t  var properties = toIndexedObject(Properties);\n\t  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n\t  $forEach(keys, function (key) {\n\t    if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n\t  });\n\t  return O;\n\t};\n\n\tvar $create = function create(O, Properties) {\n\t  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n\t};\n\n\tvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n\t  var P = toPropertyKey(V);\n\t  var enumerable = call(nativePropertyIsEnumerable, this, P);\n\t  if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n\t  return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n\t    ? enumerable : true;\n\t};\n\n\tvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n\t  var it = toIndexedObject(O);\n\t  var key = toPropertyKey(P);\n\t  if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n\t  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n\t  if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n\t    descriptor.enumerable = true;\n\t  }\n\t  return descriptor;\n\t};\n\n\tvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n\t  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n\t  var result = [];\n\t  $forEach(names, function (key) {\n\t    if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n\t  });\n\t  return result;\n\t};\n\n\tvar $getOwnPropertySymbols = function (O) {\n\t  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n\t  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n\t  var result = [];\n\t  $forEach(names, function (key) {\n\t    if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n\t      push(result, AllSymbols[key]);\n\t    }\n\t  });\n\t  return result;\n\t};\n\n\t// `Symbol` constructor\n\t// https://tc39.es/ecma262/#sec-symbol-constructor\n\tif (!NATIVE_SYMBOL) {\n\t  $Symbol = function Symbol() {\n\t    if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');\n\t    var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n\t    var tag = uid(description);\n\t    var setter = function (value) {\n\t      var $this = this === undefined ? globalThis : this;\n\t      if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n\t      if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;\n\t      var descriptor = createPropertyDescriptor(1, value);\n\t      try {\n\t        setSymbolDescriptor($this, tag, descriptor);\n\t      } catch (error) {\n\t        if (!(error instanceof RangeError)) throw error;\n\t        fallbackDefineProperty($this, tag, descriptor);\n\t      }\n\t    };\n\t    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n\t    return wrap(tag, description);\n\t  };\n\n\t  SymbolPrototype = $Symbol[PROTOTYPE];\n\n\t  defineBuiltIn(SymbolPrototype, 'toString', function toString() {\n\t    return getInternalState(this).tag;\n\t  });\n\n\t  defineBuiltIn($Symbol, 'withoutSetter', function (description) {\n\t    return wrap(uid(description), description);\n\t  });\n\n\t  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n\t  definePropertyModule.f = $defineProperty;\n\t  definePropertiesModule.f = $defineProperties;\n\t  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n\t  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n\t  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n\t  wrappedWellKnownSymbolModule.f = function (name) {\n\t    return wrap(wellKnownSymbol(name), name);\n\t  };\n\n\t  if (DESCRIPTORS) {\n\t    // https://tc39.es/ecma262/#sec-symbol.prototype.description\n\t    defineBuiltInAccessor(SymbolPrototype, 'description', {\n\t      configurable: true,\n\t      get: function description() {\n\t        return getInternalState(this).description;\n\t      }\n\t    });\n\t    if (!IS_PURE) {\n\t      defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n\t    }\n\t  }\n\t}\n\n\t$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n\t  Symbol: $Symbol\n\t});\n\n\t$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n\t  defineWellKnownSymbol(name);\n\t});\n\n\t$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n\t  useSetter: function () { USE_SETTER = true; },\n\t  useSimple: function () { USE_SETTER = false; }\n\t});\n\n\t$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n\t  // `Object.create` method\n\t  // https://tc39.es/ecma262/#sec-object.create\n\t  create: $create,\n\t  // `Object.defineProperty` method\n\t  // https://tc39.es/ecma262/#sec-object.defineproperty\n\t  defineProperty: $defineProperty,\n\t  // `Object.defineProperties` method\n\t  // https://tc39.es/ecma262/#sec-object.defineproperties\n\t  defineProperties: $defineProperties,\n\t  // `Object.getOwnPropertyDescriptor` method\n\t  // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n\t  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n\t});\n\n\t$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n\t  // `Object.getOwnPropertyNames` method\n\t  // https://tc39.es/ecma262/#sec-object.getownpropertynames\n\t  getOwnPropertyNames: $getOwnPropertyNames\n\t});\n\n\t// `Symbol.prototype[@@toPrimitive]` method\n\t// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n\tdefineSymbolToPrimitive();\n\n\t// `Symbol.prototype[@@toStringTag]` property\n\t// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\n\tsetToStringTag($Symbol, SYMBOL);\n\n\thiddenKeys[HIDDEN] = true;\n\treturn es_symbol_constructor;\n}\n\nvar es_symbol_for = {};\n\nvar symbolRegistryDetection;\nvar hasRequiredSymbolRegistryDetection;\n\nfunction requireSymbolRegistryDetection () {\n\tif (hasRequiredSymbolRegistryDetection) return symbolRegistryDetection;\n\thasRequiredSymbolRegistryDetection = 1;\n\tvar NATIVE_SYMBOL = /*@__PURE__*/ requireSymbolConstructorDetection();\n\n\t/* eslint-disable es/no-symbol -- safe */\n\tsymbolRegistryDetection = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;\n\treturn symbolRegistryDetection;\n}\n\nvar hasRequiredEs_symbol_for;\n\nfunction requireEs_symbol_for () {\n\tif (hasRequiredEs_symbol_for) return es_symbol_for;\n\thasRequiredEs_symbol_for = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar shared = /*@__PURE__*/ requireShared();\n\tvar NATIVE_SYMBOL_REGISTRY = /*@__PURE__*/ requireSymbolRegistryDetection();\n\n\tvar StringToSymbolRegistry = shared('string-to-symbol-registry');\n\tvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n\t// `Symbol.for` method\n\t// https://tc39.es/ecma262/#sec-symbol.for\n\t$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n\t  'for': function (key) {\n\t    var string = toString(key);\n\t    if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n\t    var symbol = getBuiltIn('Symbol')(string);\n\t    StringToSymbolRegistry[string] = symbol;\n\t    SymbolToStringRegistry[symbol] = string;\n\t    return symbol;\n\t  }\n\t});\n\treturn es_symbol_for;\n}\n\nvar es_symbol_keyFor = {};\n\nvar hasRequiredEs_symbol_keyFor;\n\nfunction requireEs_symbol_keyFor () {\n\tif (hasRequiredEs_symbol_keyFor) return es_symbol_keyFor;\n\thasRequiredEs_symbol_keyFor = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar isSymbol = /*@__PURE__*/ requireIsSymbol();\n\tvar tryToString = /*@__PURE__*/ requireTryToString();\n\tvar shared = /*@__PURE__*/ requireShared();\n\tvar NATIVE_SYMBOL_REGISTRY = /*@__PURE__*/ requireSymbolRegistryDetection();\n\n\tvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n\t// `Symbol.keyFor` method\n\t// https://tc39.es/ecma262/#sec-symbol.keyfor\n\t$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n\t  keyFor: function keyFor(sym) {\n\t    if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol');\n\t    if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n\t  }\n\t});\n\treturn es_symbol_keyFor;\n}\n\nvar es_json_stringify = {};\n\nvar getJsonReplacerFunction;\nvar hasRequiredGetJsonReplacerFunction;\n\nfunction requireGetJsonReplacerFunction () {\n\tif (hasRequiredGetJsonReplacerFunction) return getJsonReplacerFunction;\n\thasRequiredGetJsonReplacerFunction = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\tvar toString = /*@__PURE__*/ requireToString();\n\n\tvar push = uncurryThis([].push);\n\n\tgetJsonReplacerFunction = function (replacer) {\n\t  if (isCallable(replacer)) return replacer;\n\t  if (!isArray(replacer)) return;\n\t  var rawLength = replacer.length;\n\t  var keys = [];\n\t  for (var i = 0; i < rawLength; i++) {\n\t    var element = replacer[i];\n\t    if (typeof element == 'string') push(keys, element);\n\t    else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n\t  }\n\t  var keysLength = keys.length;\n\t  var root = true;\n\t  return function (key, value) {\n\t    if (root) {\n\t      root = false;\n\t      return value;\n\t    }\n\t    if (isArray(this)) return value;\n\t    for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n\t  };\n\t};\n\treturn getJsonReplacerFunction;\n}\n\nvar hasRequiredEs_json_stringify;\n\nfunction requireEs_json_stringify () {\n\tif (hasRequiredEs_json_stringify) return es_json_stringify;\n\thasRequiredEs_json_stringify = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar apply = /*@__PURE__*/ requireFunctionApply();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar isSymbol = /*@__PURE__*/ requireIsSymbol();\n\tvar arraySlice = /*@__PURE__*/ requireArraySlice();\n\tvar getReplacerFunction = /*@__PURE__*/ requireGetJsonReplacerFunction();\n\tvar NATIVE_SYMBOL = /*@__PURE__*/ requireSymbolConstructorDetection();\n\n\tvar $String = String;\n\tvar $stringify = getBuiltIn('JSON', 'stringify');\n\tvar exec = uncurryThis(/./.exec);\n\tvar charAt = uncurryThis(''.charAt);\n\tvar charCodeAt = uncurryThis(''.charCodeAt);\n\tvar replace = uncurryThis(''.replace);\n\tvar numberToString = uncurryThis(1.1.toString);\n\n\tvar tester = /[\\uD800-\\uDFFF]/g;\n\tvar low = /^[\\uD800-\\uDBFF]$/;\n\tvar hi = /^[\\uDC00-\\uDFFF]$/;\n\n\tvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n\t  var symbol = getBuiltIn('Symbol')('stringify detection');\n\t  // MS Edge converts symbol values to JSON as {}\n\t  return $stringify([symbol]) !== '[null]'\n\t    // WebKit converts symbol values to JSON as null\n\t    || $stringify({ a: symbol }) !== '{}'\n\t    // V8 throws on boxed symbols\n\t    || $stringify(Object(symbol)) !== '{}';\n\t});\n\n\t// https://github.com/tc39/proposal-well-formed-stringify\n\tvar ILL_FORMED_UNICODE = fails(function () {\n\t  return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n\t    || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n\t});\n\n\tvar stringifyWithSymbolsFix = function (it, replacer) {\n\t  var args = arraySlice(arguments);\n\t  var $replacer = getReplacerFunction(replacer);\n\t  if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n\t  args[1] = function (key, value) {\n\t    // some old implementations (like WebKit) could pass numbers as keys\n\t    if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n\t    if (!isSymbol(value)) return value;\n\t  };\n\t  return apply($stringify, null, args);\n\t};\n\n\tvar fixIllFormed = function (match, offset, string) {\n\t  var prev = charAt(string, offset - 1);\n\t  var next = charAt(string, offset + 1);\n\t  if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n\t    return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n\t  } return match;\n\t};\n\n\tif ($stringify) {\n\t  // `JSON.stringify` method\n\t  // https://tc39.es/ecma262/#sec-json.stringify\n\t  $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n\t    // eslint-disable-next-line no-unused-vars -- required for `.length`\n\t    stringify: function stringify(it, replacer, space) {\n\t      var args = arraySlice(arguments);\n\t      var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n\t      return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n\t    }\n\t  });\n\t}\n\treturn es_json_stringify;\n}\n\nvar es_object_getOwnPropertySymbols = {};\n\nvar hasRequiredEs_object_getOwnPropertySymbols;\n\nfunction requireEs_object_getOwnPropertySymbols () {\n\tif (hasRequiredEs_object_getOwnPropertySymbols) return es_object_getOwnPropertySymbols;\n\thasRequiredEs_object_getOwnPropertySymbols = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar NATIVE_SYMBOL = /*@__PURE__*/ requireSymbolConstructorDetection();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar getOwnPropertySymbolsModule = /*@__PURE__*/ requireObjectGetOwnPropertySymbols();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\n\t// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n\t// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n\tvar FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });\n\n\t// `Object.getOwnPropertySymbols` method\n\t// https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n\t$({ target: 'Object', stat: true, forced: FORCED }, {\n\t  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n\t    var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n\t    return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];\n\t  }\n\t});\n\treturn es_object_getOwnPropertySymbols;\n}\n\nvar hasRequiredEs_symbol;\n\nfunction requireEs_symbol () {\n\tif (hasRequiredEs_symbol) return es_symbol;\n\thasRequiredEs_symbol = 1;\n\t// TODO: Remove this module from `core-js@4` since it's split to modules listed below\n\trequireEs_symbol_constructor();\n\trequireEs_symbol_for();\n\trequireEs_symbol_keyFor();\n\trequireEs_json_stringify();\n\trequireEs_object_getOwnPropertySymbols();\n\treturn es_symbol;\n}\n\nvar es_symbol_asyncDispose = {};\n\nvar hasRequiredEs_symbol_asyncDispose;\n\nfunction requireEs_symbol_asyncDispose () {\n\tif (hasRequiredEs_symbol_asyncDispose) return es_symbol_asyncDispose;\n\thasRequiredEs_symbol_asyncDispose = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.asyncDispose` well-known symbol\n\t// https://github.com/tc39/proposal-async-explicit-resource-management\n\tdefineWellKnownSymbol('asyncDispose');\n\treturn es_symbol_asyncDispose;\n}\n\nvar es_symbol_asyncIterator = {};\n\nvar hasRequiredEs_symbol_asyncIterator;\n\nfunction requireEs_symbol_asyncIterator () {\n\tif (hasRequiredEs_symbol_asyncIterator) return es_symbol_asyncIterator;\n\thasRequiredEs_symbol_asyncIterator = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.asyncIterator` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.asynciterator\n\tdefineWellKnownSymbol('asyncIterator');\n\treturn es_symbol_asyncIterator;\n}\n\nvar es_symbol_dispose = {};\n\nvar hasRequiredEs_symbol_dispose;\n\nfunction requireEs_symbol_dispose () {\n\tif (hasRequiredEs_symbol_dispose) return es_symbol_dispose;\n\thasRequiredEs_symbol_dispose = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.dispose` well-known symbol\n\t// https://github.com/tc39/proposal-explicit-resource-management\n\tdefineWellKnownSymbol('dispose');\n\treturn es_symbol_dispose;\n}\n\nvar es_symbol_hasInstance = {};\n\nvar hasRequiredEs_symbol_hasInstance;\n\nfunction requireEs_symbol_hasInstance () {\n\tif (hasRequiredEs_symbol_hasInstance) return es_symbol_hasInstance;\n\thasRequiredEs_symbol_hasInstance = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.hasInstance` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.hasinstance\n\tdefineWellKnownSymbol('hasInstance');\n\treturn es_symbol_hasInstance;\n}\n\nvar es_symbol_isConcatSpreadable = {};\n\nvar hasRequiredEs_symbol_isConcatSpreadable;\n\nfunction requireEs_symbol_isConcatSpreadable () {\n\tif (hasRequiredEs_symbol_isConcatSpreadable) return es_symbol_isConcatSpreadable;\n\thasRequiredEs_symbol_isConcatSpreadable = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.isConcatSpreadable` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\n\tdefineWellKnownSymbol('isConcatSpreadable');\n\treturn es_symbol_isConcatSpreadable;\n}\n\nvar es_symbol_iterator = {};\n\nvar hasRequiredEs_symbol_iterator;\n\nfunction requireEs_symbol_iterator () {\n\tif (hasRequiredEs_symbol_iterator) return es_symbol_iterator;\n\thasRequiredEs_symbol_iterator = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.iterator` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.iterator\n\tdefineWellKnownSymbol('iterator');\n\treturn es_symbol_iterator;\n}\n\nvar es_symbol_match = {};\n\nvar hasRequiredEs_symbol_match;\n\nfunction requireEs_symbol_match () {\n\tif (hasRequiredEs_symbol_match) return es_symbol_match;\n\thasRequiredEs_symbol_match = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.match` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.match\n\tdefineWellKnownSymbol('match');\n\treturn es_symbol_match;\n}\n\nvar es_symbol_matchAll = {};\n\nvar hasRequiredEs_symbol_matchAll;\n\nfunction requireEs_symbol_matchAll () {\n\tif (hasRequiredEs_symbol_matchAll) return es_symbol_matchAll;\n\thasRequiredEs_symbol_matchAll = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.matchAll` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.matchall\n\tdefineWellKnownSymbol('matchAll');\n\treturn es_symbol_matchAll;\n}\n\nvar es_symbol_replace = {};\n\nvar hasRequiredEs_symbol_replace;\n\nfunction requireEs_symbol_replace () {\n\tif (hasRequiredEs_symbol_replace) return es_symbol_replace;\n\thasRequiredEs_symbol_replace = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.replace` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.replace\n\tdefineWellKnownSymbol('replace');\n\treturn es_symbol_replace;\n}\n\nvar es_symbol_search = {};\n\nvar hasRequiredEs_symbol_search;\n\nfunction requireEs_symbol_search () {\n\tif (hasRequiredEs_symbol_search) return es_symbol_search;\n\thasRequiredEs_symbol_search = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.search` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.search\n\tdefineWellKnownSymbol('search');\n\treturn es_symbol_search;\n}\n\nvar es_symbol_species = {};\n\nvar hasRequiredEs_symbol_species;\n\nfunction requireEs_symbol_species () {\n\tif (hasRequiredEs_symbol_species) return es_symbol_species;\n\thasRequiredEs_symbol_species = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.species` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.species\n\tdefineWellKnownSymbol('species');\n\treturn es_symbol_species;\n}\n\nvar es_symbol_split = {};\n\nvar hasRequiredEs_symbol_split;\n\nfunction requireEs_symbol_split () {\n\tif (hasRequiredEs_symbol_split) return es_symbol_split;\n\thasRequiredEs_symbol_split = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.split` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.split\n\tdefineWellKnownSymbol('split');\n\treturn es_symbol_split;\n}\n\nvar es_symbol_toPrimitive = {};\n\nvar hasRequiredEs_symbol_toPrimitive;\n\nfunction requireEs_symbol_toPrimitive () {\n\tif (hasRequiredEs_symbol_toPrimitive) return es_symbol_toPrimitive;\n\thasRequiredEs_symbol_toPrimitive = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\tvar defineSymbolToPrimitive = /*@__PURE__*/ requireSymbolDefineToPrimitive();\n\n\t// `Symbol.toPrimitive` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.toprimitive\n\tdefineWellKnownSymbol('toPrimitive');\n\n\t// `Symbol.prototype[@@toPrimitive]` method\n\t// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n\tdefineSymbolToPrimitive();\n\treturn es_symbol_toPrimitive;\n}\n\nvar es_symbol_toStringTag = {};\n\nvar hasRequiredEs_symbol_toStringTag;\n\nfunction requireEs_symbol_toStringTag () {\n\tif (hasRequiredEs_symbol_toStringTag) return es_symbol_toStringTag;\n\thasRequiredEs_symbol_toStringTag = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\tvar setToStringTag = /*@__PURE__*/ requireSetToStringTag();\n\n\t// `Symbol.toStringTag` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.tostringtag\n\tdefineWellKnownSymbol('toStringTag');\n\n\t// `Symbol.prototype[@@toStringTag]` property\n\t// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\n\tsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n\treturn es_symbol_toStringTag;\n}\n\nvar es_symbol_unscopables = {};\n\nvar hasRequiredEs_symbol_unscopables;\n\nfunction requireEs_symbol_unscopables () {\n\tif (hasRequiredEs_symbol_unscopables) return es_symbol_unscopables;\n\thasRequiredEs_symbol_unscopables = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.unscopables` well-known symbol\n\t// https://tc39.es/ecma262/#sec-symbol.unscopables\n\tdefineWellKnownSymbol('unscopables');\n\treturn es_symbol_unscopables;\n}\n\nvar es_json_toStringTag = {};\n\nvar hasRequiredEs_json_toStringTag;\n\nfunction requireEs_json_toStringTag () {\n\tif (hasRequiredEs_json_toStringTag) return es_json_toStringTag;\n\thasRequiredEs_json_toStringTag = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar setToStringTag = /*@__PURE__*/ requireSetToStringTag();\n\n\t// JSON[@@toStringTag] property\n\t// https://tc39.es/ecma262/#sec-json-@@tostringtag\n\tsetToStringTag(globalThis.JSON, 'JSON', true);\n\treturn es_json_toStringTag;\n}\n\nvar symbol$5;\nvar hasRequiredSymbol$5;\n\nfunction requireSymbol$5 () {\n\tif (hasRequiredSymbol$5) return symbol$5;\n\thasRequiredSymbol$5 = 1;\n\trequireEs_array_concat();\n\trequireEs_symbol();\n\trequireEs_symbol_asyncDispose();\n\trequireEs_symbol_asyncIterator();\n\trequireEs_symbol_dispose();\n\trequireEs_symbol_hasInstance();\n\trequireEs_symbol_isConcatSpreadable();\n\trequireEs_symbol_iterator();\n\trequireEs_symbol_match();\n\trequireEs_symbol_matchAll();\n\trequireEs_symbol_replace();\n\trequireEs_symbol_search();\n\trequireEs_symbol_species();\n\trequireEs_symbol_split();\n\trequireEs_symbol_toPrimitive();\n\trequireEs_symbol_toStringTag();\n\trequireEs_symbol_unscopables();\n\trequireEs_json_toStringTag();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tsymbol$5 = path.Symbol;\n\treturn symbol$5;\n}\n\nvar web_domCollections_iterator = {};\n\nvar addToUnscopables;\nvar hasRequiredAddToUnscopables;\n\nfunction requireAddToUnscopables () {\n\tif (hasRequiredAddToUnscopables) return addToUnscopables;\n\thasRequiredAddToUnscopables = 1;\n\taddToUnscopables = function () { /* empty */ };\n\treturn addToUnscopables;\n}\n\nvar iterators;\nvar hasRequiredIterators;\n\nfunction requireIterators () {\n\tif (hasRequiredIterators) return iterators;\n\thasRequiredIterators = 1;\n\titerators = {};\n\treturn iterators;\n}\n\nvar functionName;\nvar hasRequiredFunctionName;\n\nfunction requireFunctionName () {\n\tif (hasRequiredFunctionName) return functionName;\n\thasRequiredFunctionName = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\n\tvar FunctionPrototype = Function.prototype;\n\t// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\tvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\n\tvar EXISTS = hasOwn(FunctionPrototype, 'name');\n\t// additional protection from minified / mangled / dropped function names\n\tvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\n\tvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\n\tfunctionName = {\n\t  EXISTS: EXISTS,\n\t  PROPER: PROPER,\n\t  CONFIGURABLE: CONFIGURABLE\n\t};\n\treturn functionName;\n}\n\nvar correctPrototypeGetter;\nvar hasRequiredCorrectPrototypeGetter;\n\nfunction requireCorrectPrototypeGetter () {\n\tif (hasRequiredCorrectPrototypeGetter) return correctPrototypeGetter;\n\thasRequiredCorrectPrototypeGetter = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tcorrectPrototypeGetter = !fails(function () {\n\t  function F() { /* empty */ }\n\t  F.prototype.constructor = null;\n\t  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n\t  return Object.getPrototypeOf(new F()) !== F.prototype;\n\t});\n\treturn correctPrototypeGetter;\n}\n\nvar objectGetPrototypeOf;\nvar hasRequiredObjectGetPrototypeOf;\n\nfunction requireObjectGetPrototypeOf () {\n\tif (hasRequiredObjectGetPrototypeOf) return objectGetPrototypeOf;\n\thasRequiredObjectGetPrototypeOf = 1;\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar sharedKey = /*@__PURE__*/ requireSharedKey();\n\tvar CORRECT_PROTOTYPE_GETTER = /*@__PURE__*/ requireCorrectPrototypeGetter();\n\n\tvar IE_PROTO = sharedKey('IE_PROTO');\n\tvar $Object = Object;\n\tvar ObjectPrototype = $Object.prototype;\n\n\t// `Object.getPrototypeOf` method\n\t// https://tc39.es/ecma262/#sec-object.getprototypeof\n\t// eslint-disable-next-line es/no-object-getprototypeof -- safe\n\tobjectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n\t  var object = toObject(O);\n\t  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n\t  var constructor = object.constructor;\n\t  if (isCallable(constructor) && object instanceof constructor) {\n\t    return constructor.prototype;\n\t  } return object instanceof $Object ? ObjectPrototype : null;\n\t};\n\treturn objectGetPrototypeOf;\n}\n\nvar iteratorsCore;\nvar hasRequiredIteratorsCore;\n\nfunction requireIteratorsCore () {\n\tif (hasRequiredIteratorsCore) return iteratorsCore;\n\thasRequiredIteratorsCore = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar create = /*@__PURE__*/ requireObjectCreate();\n\tvar getPrototypeOf = /*@__PURE__*/ requireObjectGetPrototypeOf();\n\tvar defineBuiltIn = /*@__PURE__*/ requireDefineBuiltIn();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar IS_PURE = /*@__PURE__*/ requireIsPure();\n\n\tvar ITERATOR = wellKnownSymbol('iterator');\n\tvar BUGGY_SAFARI_ITERATORS = false;\n\n\t// `%IteratorPrototype%` object\n\t// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\n\tvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n\t/* eslint-disable es/no-array-prototype-keys -- safe */\n\tif ([].keys) {\n\t  arrayIterator = [].keys();\n\t  // Safari 8 has buggy iterators w/o `next`\n\t  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n\t  else {\n\t    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n\t    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n\t  }\n\t}\n\n\tvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n\t  var test = {};\n\t  // FF44- legacy iterators case\n\t  return IteratorPrototype[ITERATOR].call(test) !== test;\n\t});\n\n\tif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\telse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n\t// `%IteratorPrototype%[@@iterator]()` method\n\t// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\n\tif (!isCallable(IteratorPrototype[ITERATOR])) {\n\t  defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n\t    return this;\n\t  });\n\t}\n\n\titeratorsCore = {\n\t  IteratorPrototype: IteratorPrototype,\n\t  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n\t};\n\treturn iteratorsCore;\n}\n\nvar iteratorCreateConstructor;\nvar hasRequiredIteratorCreateConstructor;\n\nfunction requireIteratorCreateConstructor () {\n\tif (hasRequiredIteratorCreateConstructor) return iteratorCreateConstructor;\n\thasRequiredIteratorCreateConstructor = 1;\n\tvar IteratorPrototype = /*@__PURE__*/ requireIteratorsCore().IteratorPrototype;\n\tvar create = /*@__PURE__*/ requireObjectCreate();\n\tvar createPropertyDescriptor = /*@__PURE__*/ requireCreatePropertyDescriptor();\n\tvar setToStringTag = /*@__PURE__*/ requireSetToStringTag();\n\tvar Iterators = /*@__PURE__*/ requireIterators();\n\n\tvar returnThis = function () { return this; };\n\n\titeratorCreateConstructor = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n\t  var TO_STRING_TAG = NAME + ' Iterator';\n\t  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n\t  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n\t  Iterators[TO_STRING_TAG] = returnThis;\n\t  return IteratorConstructor;\n\t};\n\treturn iteratorCreateConstructor;\n}\n\nvar functionUncurryThisAccessor;\nvar hasRequiredFunctionUncurryThisAccessor;\n\nfunction requireFunctionUncurryThisAccessor () {\n\tif (hasRequiredFunctionUncurryThisAccessor) return functionUncurryThisAccessor;\n\thasRequiredFunctionUncurryThisAccessor = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\n\tfunctionUncurryThisAccessor = function (object, key, method) {\n\t  try {\n\t    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\t    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n\t  } catch (error) { /* empty */ }\n\t};\n\treturn functionUncurryThisAccessor;\n}\n\nvar isPossiblePrototype;\nvar hasRequiredIsPossiblePrototype;\n\nfunction requireIsPossiblePrototype () {\n\tif (hasRequiredIsPossiblePrototype) return isPossiblePrototype;\n\thasRequiredIsPossiblePrototype = 1;\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\n\tisPossiblePrototype = function (argument) {\n\t  return isObject(argument) || argument === null;\n\t};\n\treturn isPossiblePrototype;\n}\n\nvar aPossiblePrototype;\nvar hasRequiredAPossiblePrototype;\n\nfunction requireAPossiblePrototype () {\n\tif (hasRequiredAPossiblePrototype) return aPossiblePrototype;\n\thasRequiredAPossiblePrototype = 1;\n\tvar isPossiblePrototype = /*@__PURE__*/ requireIsPossiblePrototype();\n\n\tvar $String = String;\n\tvar $TypeError = TypeError;\n\n\taPossiblePrototype = function (argument) {\n\t  if (isPossiblePrototype(argument)) return argument;\n\t  throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n\t};\n\treturn aPossiblePrototype;\n}\n\nvar objectSetPrototypeOf;\nvar hasRequiredObjectSetPrototypeOf;\n\nfunction requireObjectSetPrototypeOf () {\n\tif (hasRequiredObjectSetPrototypeOf) return objectSetPrototypeOf;\n\thasRequiredObjectSetPrototypeOf = 1;\n\t/* eslint-disable no-proto -- safe */\n\tvar uncurryThisAccessor = /*@__PURE__*/ requireFunctionUncurryThisAccessor();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\tvar aPossiblePrototype = /*@__PURE__*/ requireAPossiblePrototype();\n\n\t// `Object.setPrototypeOf` method\n\t// https://tc39.es/ecma262/#sec-object.setprototypeof\n\t// Works with __proto__ only. Old v8 can't work with null proto objects.\n\t// eslint-disable-next-line es/no-object-setprototypeof -- safe\n\tobjectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n\t  var CORRECT_SETTER = false;\n\t  var test = {};\n\t  var setter;\n\t  try {\n\t    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n\t    setter(test, []);\n\t    CORRECT_SETTER = test instanceof Array;\n\t  } catch (error) { /* empty */ }\n\t  return function setPrototypeOf(O, proto) {\n\t    requireObjectCoercible(O);\n\t    aPossiblePrototype(proto);\n\t    if (!isObject(O)) return O;\n\t    if (CORRECT_SETTER) setter(O, proto);\n\t    else O.__proto__ = proto;\n\t    return O;\n\t  };\n\t}() : undefined);\n\treturn objectSetPrototypeOf;\n}\n\nvar iteratorDefine;\nvar hasRequiredIteratorDefine;\n\nfunction requireIteratorDefine () {\n\tif (hasRequiredIteratorDefine) return iteratorDefine;\n\thasRequiredIteratorDefine = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar IS_PURE = /*@__PURE__*/ requireIsPure();\n\tvar FunctionName = /*@__PURE__*/ requireFunctionName();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar createIteratorConstructor = /*@__PURE__*/ requireIteratorCreateConstructor();\n\tvar getPrototypeOf = /*@__PURE__*/ requireObjectGetPrototypeOf();\n\tvar setPrototypeOf = /*@__PURE__*/ requireObjectSetPrototypeOf();\n\tvar setToStringTag = /*@__PURE__*/ requireSetToStringTag();\n\tvar createNonEnumerableProperty = /*@__PURE__*/ requireCreateNonEnumerableProperty();\n\tvar defineBuiltIn = /*@__PURE__*/ requireDefineBuiltIn();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar Iterators = /*@__PURE__*/ requireIterators();\n\tvar IteratorsCore = /*@__PURE__*/ requireIteratorsCore();\n\n\tvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\n\tvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\n\tvar IteratorPrototype = IteratorsCore.IteratorPrototype;\n\tvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\n\tvar ITERATOR = wellKnownSymbol('iterator');\n\tvar KEYS = 'keys';\n\tvar VALUES = 'values';\n\tvar ENTRIES = 'entries';\n\n\tvar returnThis = function () { return this; };\n\n\titeratorDefine = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n\t  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n\t  var getIterationMethod = function (KIND) {\n\t    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n\t    if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n\t    switch (KIND) {\n\t      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n\t      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n\t      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n\t    }\n\n\t    return function () { return new IteratorConstructor(this); };\n\t  };\n\n\t  var TO_STRING_TAG = NAME + ' Iterator';\n\t  var INCORRECT_VALUES_NAME = false;\n\t  var IterablePrototype = Iterable.prototype;\n\t  var nativeIterator = IterablePrototype[ITERATOR]\n\t    || IterablePrototype['@@iterator']\n\t    || DEFAULT && IterablePrototype[DEFAULT];\n\t  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n\t  var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n\t  var CurrentIteratorPrototype, methods, KEY;\n\n\t  // fix native\n\t  if (anyNativeIterator) {\n\t    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n\t    if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n\t      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n\t        if (setPrototypeOf) {\n\t          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n\t        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n\t          defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n\t        }\n\t      }\n\t      // Set @@toStringTag to native iterators\n\t      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n\t      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n\t    }\n\t  }\n\n\t  // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n\t  if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n\t    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n\t      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n\t    } else {\n\t      INCORRECT_VALUES_NAME = true;\n\t      defaultIterator = function values() { return call(nativeIterator, this); };\n\t    }\n\t  }\n\n\t  // export additional methods\n\t  if (DEFAULT) {\n\t    methods = {\n\t      values: getIterationMethod(VALUES),\n\t      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n\t      entries: getIterationMethod(ENTRIES)\n\t    };\n\t    if (FORCED) for (KEY in methods) {\n\t      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n\t        defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n\t      }\n\t    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n\t  }\n\n\t  // define iterator\n\t  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n\t    defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n\t  }\n\t  Iterators[NAME] = defaultIterator;\n\n\t  return methods;\n\t};\n\treturn iteratorDefine;\n}\n\nvar createIterResultObject;\nvar hasRequiredCreateIterResultObject;\n\nfunction requireCreateIterResultObject () {\n\tif (hasRequiredCreateIterResultObject) return createIterResultObject;\n\thasRequiredCreateIterResultObject = 1;\n\t// `CreateIterResultObject` abstract operation\n\t// https://tc39.es/ecma262/#sec-createiterresultobject\n\tcreateIterResultObject = function (value, done) {\n\t  return { value: value, done: done };\n\t};\n\treturn createIterResultObject;\n}\n\nvar es_array_iterator;\nvar hasRequiredEs_array_iterator;\n\nfunction requireEs_array_iterator () {\n\tif (hasRequiredEs_array_iterator) return es_array_iterator;\n\thasRequiredEs_array_iterator = 1;\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar addToUnscopables = /*@__PURE__*/ requireAddToUnscopables();\n\tvar Iterators = /*@__PURE__*/ requireIterators();\n\tvar InternalStateModule = /*@__PURE__*/ requireInternalState();\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty().f;\n\tvar defineIterator = /*@__PURE__*/ requireIteratorDefine();\n\tvar createIterResultObject = /*@__PURE__*/ requireCreateIterResultObject();\n\tvar IS_PURE = /*@__PURE__*/ requireIsPure();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\n\tvar ARRAY_ITERATOR = 'Array Iterator';\n\tvar setInternalState = InternalStateModule.set;\n\tvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n\t// `Array.prototype.entries` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.entries\n\t// `Array.prototype.keys` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.keys\n\t// `Array.prototype.values` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.values\n\t// `Array.prototype[@@iterator]` method\n\t// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n\t// `CreateArrayIterator` internal method\n\t// https://tc39.es/ecma262/#sec-createarrayiterator\n\tes_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) {\n\t  setInternalState(this, {\n\t    type: ARRAY_ITERATOR,\n\t    target: toIndexedObject(iterated), // target\n\t    index: 0,                          // next index\n\t    kind: kind                         // kind\n\t  });\n\t// `%ArrayIteratorPrototype%.next` method\n\t// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n\t}, function () {\n\t  var state = getInternalState(this);\n\t  var target = state.target;\n\t  var index = state.index++;\n\t  if (!target || index >= target.length) {\n\t    state.target = null;\n\t    return createIterResultObject(undefined, true);\n\t  }\n\t  switch (state.kind) {\n\t    case 'keys': return createIterResultObject(index, false);\n\t    case 'values': return createIterResultObject(target[index], false);\n\t  } return createIterResultObject([index, target[index]], false);\n\t}, 'values');\n\n\t// argumentsList[@@iterator] is %ArrayProto_values%\n\t// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n\t// https://tc39.es/ecma262/#sec-createmappedargumentsobject\n\tvar values = Iterators.Arguments = Iterators.Array;\n\n\t// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\n\taddToUnscopables('keys');\n\taddToUnscopables('values');\n\taddToUnscopables('entries');\n\n\t// V8 ~ Chrome 45- bug\n\tif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n\t  defineProperty(values, 'name', { value: 'values' });\n\t} catch (error) { /* empty */ }\n\treturn es_array_iterator;\n}\n\nvar domIterables;\nvar hasRequiredDomIterables;\n\nfunction requireDomIterables () {\n\tif (hasRequiredDomIterables) return domIterables;\n\thasRequiredDomIterables = 1;\n\t// iterable DOM collections\n\t// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\n\tdomIterables = {\n\t  CSSRuleList: 0,\n\t  CSSStyleDeclaration: 0,\n\t  CSSValueList: 0,\n\t  ClientRectList: 0,\n\t  DOMRectList: 0,\n\t  DOMStringList: 0,\n\t  DOMTokenList: 1,\n\t  DataTransferItemList: 0,\n\t  FileList: 0,\n\t  HTMLAllCollection: 0,\n\t  HTMLCollection: 0,\n\t  HTMLFormElement: 0,\n\t  HTMLSelectElement: 0,\n\t  MediaList: 0,\n\t  MimeTypeArray: 0,\n\t  NamedNodeMap: 0,\n\t  NodeList: 1,\n\t  PaintRequestList: 0,\n\t  Plugin: 0,\n\t  PluginArray: 0,\n\t  SVGLengthList: 0,\n\t  SVGNumberList: 0,\n\t  SVGPathSegList: 0,\n\t  SVGPointList: 0,\n\t  SVGStringList: 0,\n\t  SVGTransformList: 0,\n\t  SourceBufferList: 0,\n\t  StyleSheetList: 0,\n\t  TextTrackCueList: 0,\n\t  TextTrackList: 0,\n\t  TouchList: 0\n\t};\n\treturn domIterables;\n}\n\nvar hasRequiredWeb_domCollections_iterator;\n\nfunction requireWeb_domCollections_iterator () {\n\tif (hasRequiredWeb_domCollections_iterator) return web_domCollections_iterator;\n\thasRequiredWeb_domCollections_iterator = 1;\n\trequireEs_array_iterator();\n\tvar DOMIterables = /*@__PURE__*/ requireDomIterables();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar setToStringTag = /*@__PURE__*/ requireSetToStringTag();\n\tvar Iterators = /*@__PURE__*/ requireIterators();\n\n\tfor (var COLLECTION_NAME in DOMIterables) {\n\t  setToStringTag(globalThis[COLLECTION_NAME], COLLECTION_NAME);\n\t  Iterators[COLLECTION_NAME] = Iterators.Array;\n\t}\n\treturn web_domCollections_iterator;\n}\n\nvar symbol$4;\nvar hasRequiredSymbol$4;\n\nfunction requireSymbol$4 () {\n\tif (hasRequiredSymbol$4) return symbol$4;\n\thasRequiredSymbol$4 = 1;\n\tvar parent = /*@__PURE__*/ requireSymbol$5();\n\trequireWeb_domCollections_iterator();\n\n\tsymbol$4 = parent;\n\treturn symbol$4;\n}\n\nvar symbol$3;\nvar hasRequiredSymbol$3;\n\nfunction requireSymbol$3 () {\n\tif (hasRequiredSymbol$3) return symbol$3;\n\thasRequiredSymbol$3 = 1;\n\tsymbol$3 = /*@__PURE__*/ requireSymbol$4();\n\treturn symbol$3;\n}\n\nvar symbolExports$1 = requireSymbol$3();\nvar _Symbol$1 = /*@__PURE__*/getDefaultExportFromCjs(symbolExports$1);\n\nvar es_array_slice = {};\n\nvar hasRequiredEs_array_slice;\n\nfunction requireEs_array_slice () {\n\tif (hasRequiredEs_array_slice) return es_array_slice;\n\thasRequiredEs_array_slice = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\tvar isConstructor = /*@__PURE__*/ requireIsConstructor();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar toAbsoluteIndex = /*@__PURE__*/ requireToAbsoluteIndex();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar createProperty = /*@__PURE__*/ requireCreateProperty();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar arrayMethodHasSpeciesSupport = /*@__PURE__*/ requireArrayMethodHasSpeciesSupport();\n\tvar nativeSlice = /*@__PURE__*/ requireArraySlice();\n\n\tvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\n\tvar SPECIES = wellKnownSymbol('species');\n\tvar $Array = Array;\n\tvar max = Math.max;\n\n\t// `Array.prototype.slice` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.slice\n\t// fallback for not array-like ES3 strings and DOM objects\n\t$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n\t  slice: function slice(start, end) {\n\t    var O = toIndexedObject(this);\n\t    var length = lengthOfArrayLike(O);\n\t    var k = toAbsoluteIndex(start, length);\n\t    var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n\t    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n\t    var Constructor, result, n;\n\t    if (isArray(O)) {\n\t      Constructor = O.constructor;\n\t      // cross-realm fallback\n\t      if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {\n\t        Constructor = undefined;\n\t      } else if (isObject(Constructor)) {\n\t        Constructor = Constructor[SPECIES];\n\t        if (Constructor === null) Constructor = undefined;\n\t      }\n\t      if (Constructor === $Array || Constructor === undefined) {\n\t        return nativeSlice(O, k, fin);\n\t      }\n\t    }\n\t    result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));\n\t    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n\t    result.length = n;\n\t    return result;\n\t  }\n\t});\n\treturn es_array_slice;\n}\n\nvar getBuiltInPrototypeMethod;\nvar hasRequiredGetBuiltInPrototypeMethod;\n\nfunction requireGetBuiltInPrototypeMethod () {\n\tif (hasRequiredGetBuiltInPrototypeMethod) return getBuiltInPrototypeMethod;\n\thasRequiredGetBuiltInPrototypeMethod = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tgetBuiltInPrototypeMethod = function (CONSTRUCTOR, METHOD) {\n\t  var Namespace = path[CONSTRUCTOR + 'Prototype'];\n\t  var pureMethod = Namespace && Namespace[METHOD];\n\t  if (pureMethod) return pureMethod;\n\t  var NativeConstructor = globalThis[CONSTRUCTOR];\n\t  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n\t  return NativePrototype && NativePrototype[METHOD];\n\t};\n\treturn getBuiltInPrototypeMethod;\n}\n\nvar slice$3;\nvar hasRequiredSlice$3;\n\nfunction requireSlice$3 () {\n\tif (hasRequiredSlice$3) return slice$3;\n\thasRequiredSlice$3 = 1;\n\trequireEs_array_slice();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tslice$3 = getBuiltInPrototypeMethod('Array', 'slice');\n\treturn slice$3;\n}\n\nvar slice$2;\nvar hasRequiredSlice$2;\n\nfunction requireSlice$2 () {\n\tif (hasRequiredSlice$2) return slice$2;\n\thasRequiredSlice$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireSlice$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tslice$2 = function (it) {\n\t  var own = it.slice;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.slice) ? method : own;\n\t};\n\treturn slice$2;\n}\n\nvar slice$1;\nvar hasRequiredSlice$1;\n\nfunction requireSlice$1 () {\n\tif (hasRequiredSlice$1) return slice$1;\n\thasRequiredSlice$1 = 1;\n\tvar parent = /*@__PURE__*/ requireSlice$2();\n\n\tslice$1 = parent;\n\treturn slice$1;\n}\n\nvar slice;\nvar hasRequiredSlice;\n\nfunction requireSlice () {\n\tif (hasRequiredSlice) return slice;\n\thasRequiredSlice = 1;\n\tslice = /*@__PURE__*/ requireSlice$1();\n\treturn slice;\n}\n\nvar sliceExports = requireSlice();\nvar _sliceInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(sliceExports);\n\nvar es_reflect_ownKeys = {};\n\nvar ownKeys$5;\nvar hasRequiredOwnKeys$3;\n\nfunction requireOwnKeys$3 () {\n\tif (hasRequiredOwnKeys$3) return ownKeys$5;\n\thasRequiredOwnKeys$3 = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar getOwnPropertyNamesModule = /*@__PURE__*/ requireObjectGetOwnPropertyNames();\n\tvar getOwnPropertySymbolsModule = /*@__PURE__*/ requireObjectGetOwnPropertySymbols();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\n\tvar concat = uncurryThis([].concat);\n\n\t// all object keys, includes non-enumerable and symbols\n\townKeys$5 = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n\t  var keys = getOwnPropertyNamesModule.f(anObject(it));\n\t  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n\t  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n\t};\n\treturn ownKeys$5;\n}\n\nvar hasRequiredEs_reflect_ownKeys;\n\nfunction requireEs_reflect_ownKeys () {\n\tif (hasRequiredEs_reflect_ownKeys) return es_reflect_ownKeys;\n\thasRequiredEs_reflect_ownKeys = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar ownKeys = /*@__PURE__*/ requireOwnKeys$3();\n\n\t// `Reflect.ownKeys` method\n\t// https://tc39.es/ecma262/#sec-reflect.ownkeys\n\t$({ target: 'Reflect', stat: true }, {\n\t  ownKeys: ownKeys\n\t});\n\treturn es_reflect_ownKeys;\n}\n\nvar ownKeys$4;\nvar hasRequiredOwnKeys$2;\n\nfunction requireOwnKeys$2 () {\n\tif (hasRequiredOwnKeys$2) return ownKeys$4;\n\thasRequiredOwnKeys$2 = 1;\n\trequireEs_reflect_ownKeys();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\townKeys$4 = path.Reflect.ownKeys;\n\treturn ownKeys$4;\n}\n\nvar ownKeys$3;\nvar hasRequiredOwnKeys$1;\n\nfunction requireOwnKeys$1 () {\n\tif (hasRequiredOwnKeys$1) return ownKeys$3;\n\thasRequiredOwnKeys$1 = 1;\n\tvar parent = /*@__PURE__*/ requireOwnKeys$2();\n\n\townKeys$3 = parent;\n\treturn ownKeys$3;\n}\n\nvar ownKeys$2;\nvar hasRequiredOwnKeys;\n\nfunction requireOwnKeys () {\n\tif (hasRequiredOwnKeys) return ownKeys$2;\n\thasRequiredOwnKeys = 1;\n\townKeys$2 = /*@__PURE__*/ requireOwnKeys$1();\n\treturn ownKeys$2;\n}\n\nvar ownKeysExports = requireOwnKeys();\nvar _Reflect$ownKeys = /*@__PURE__*/getDefaultExportFromCjs(ownKeysExports);\n\nvar es_array_isArray = {};\n\nvar hasRequiredEs_array_isArray;\n\nfunction requireEs_array_isArray () {\n\tif (hasRequiredEs_array_isArray) return es_array_isArray;\n\thasRequiredEs_array_isArray = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\n\t// `Array.isArray` method\n\t// https://tc39.es/ecma262/#sec-array.isarray\n\t$({ target: 'Array', stat: true }, {\n\t  isArray: isArray\n\t});\n\treturn es_array_isArray;\n}\n\nvar isArray$2;\nvar hasRequiredIsArray$2;\n\nfunction requireIsArray$2 () {\n\tif (hasRequiredIsArray$2) return isArray$2;\n\thasRequiredIsArray$2 = 1;\n\trequireEs_array_isArray();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tisArray$2 = path.Array.isArray;\n\treturn isArray$2;\n}\n\nvar isArray$1;\nvar hasRequiredIsArray$1;\n\nfunction requireIsArray$1 () {\n\tif (hasRequiredIsArray$1) return isArray$1;\n\thasRequiredIsArray$1 = 1;\n\tvar parent = /*@__PURE__*/ requireIsArray$2();\n\n\tisArray$1 = parent;\n\treturn isArray$1;\n}\n\nvar isArray;\nvar hasRequiredIsArray;\n\nfunction requireIsArray () {\n\tif (hasRequiredIsArray) return isArray;\n\thasRequiredIsArray = 1;\n\tisArray = /*@__PURE__*/ requireIsArray$1();\n\treturn isArray;\n}\n\nvar isArrayExports = requireIsArray();\nvar _Array$isArray = /*@__PURE__*/getDefaultExportFromCjs(isArrayExports);\n\nvar es_array_map = {};\n\nvar hasRequiredEs_array_map;\n\nfunction requireEs_array_map () {\n\tif (hasRequiredEs_array_map) return es_array_map;\n\thasRequiredEs_array_map = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $map = /*@__PURE__*/ requireArrayIteration().map;\n\tvar arrayMethodHasSpeciesSupport = /*@__PURE__*/ requireArrayMethodHasSpeciesSupport();\n\n\tvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n\t// `Array.prototype.map` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.map\n\t// with adding support of @@species\n\t$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n\t  map: function map(callbackfn /* , thisArg */) {\n\t    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t  }\n\t});\n\treturn es_array_map;\n}\n\nvar map$6;\nvar hasRequiredMap$6;\n\nfunction requireMap$6 () {\n\tif (hasRequiredMap$6) return map$6;\n\thasRequiredMap$6 = 1;\n\trequireEs_array_map();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tmap$6 = getBuiltInPrototypeMethod('Array', 'map');\n\treturn map$6;\n}\n\nvar map$5;\nvar hasRequiredMap$5;\n\nfunction requireMap$5 () {\n\tif (hasRequiredMap$5) return map$5;\n\thasRequiredMap$5 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireMap$6();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tmap$5 = function (it) {\n\t  var own = it.map;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.map) ? method : own;\n\t};\n\treturn map$5;\n}\n\nvar map$4;\nvar hasRequiredMap$4;\n\nfunction requireMap$4 () {\n\tif (hasRequiredMap$4) return map$4;\n\thasRequiredMap$4 = 1;\n\tvar parent = /*@__PURE__*/ requireMap$5();\n\n\tmap$4 = parent;\n\treturn map$4;\n}\n\nvar map$3;\nvar hasRequiredMap$3;\n\nfunction requireMap$3 () {\n\tif (hasRequiredMap$3) return map$3;\n\thasRequiredMap$3 = 1;\n\tmap$3 = /*@__PURE__*/ requireMap$4();\n\treturn map$3;\n}\n\nvar mapExports$1 = requireMap$3();\nvar _mapInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(mapExports$1);\n\nvar es_object_keys = {};\n\nvar hasRequiredEs_object_keys;\n\nfunction requireEs_object_keys () {\n\tif (hasRequiredEs_object_keys) return es_object_keys;\n\thasRequiredEs_object_keys = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar nativeKeys = /*@__PURE__*/ requireObjectKeys();\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n\t// `Object.keys` method\n\t// https://tc39.es/ecma262/#sec-object.keys\n\t$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n\t  keys: function keys(it) {\n\t    return nativeKeys(toObject(it));\n\t  }\n\t});\n\treturn es_object_keys;\n}\n\nvar keys$6;\nvar hasRequiredKeys$6;\n\nfunction requireKeys$6 () {\n\tif (hasRequiredKeys$6) return keys$6;\n\thasRequiredKeys$6 = 1;\n\trequireEs_object_keys();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tkeys$6 = path.Object.keys;\n\treturn keys$6;\n}\n\nvar keys$5;\nvar hasRequiredKeys$5;\n\nfunction requireKeys$5 () {\n\tif (hasRequiredKeys$5) return keys$5;\n\thasRequiredKeys$5 = 1;\n\tvar parent = /*@__PURE__*/ requireKeys$6();\n\n\tkeys$5 = parent;\n\treturn keys$5;\n}\n\nvar keys$4;\nvar hasRequiredKeys$4;\n\nfunction requireKeys$4 () {\n\tif (hasRequiredKeys$4) return keys$4;\n\thasRequiredKeys$4 = 1;\n\tkeys$4 = /*@__PURE__*/ requireKeys$5();\n\treturn keys$4;\n}\n\nvar keysExports$1 = requireKeys$4();\nvar _Object$keys = /*@__PURE__*/getDefaultExportFromCjs(keysExports$1);\n\nvar es_date_now = {};\n\nvar hasRequiredEs_date_now;\n\nfunction requireEs_date_now () {\n\tif (hasRequiredEs_date_now) return es_date_now;\n\thasRequiredEs_date_now = 1;\n\t// TODO: Remove from `core-js@4`\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\n\tvar $Date = Date;\n\tvar thisTimeValue = uncurryThis($Date.prototype.getTime);\n\n\t// `Date.now` method\n\t// https://tc39.es/ecma262/#sec-date.now\n\t$({ target: 'Date', stat: true }, {\n\t  now: function now() {\n\t    return thisTimeValue(new $Date());\n\t  }\n\t});\n\treturn es_date_now;\n}\n\nvar now$3;\nvar hasRequiredNow$2;\n\nfunction requireNow$2 () {\n\tif (hasRequiredNow$2) return now$3;\n\thasRequiredNow$2 = 1;\n\trequireEs_date_now();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tnow$3 = path.Date.now;\n\treturn now$3;\n}\n\nvar now$2;\nvar hasRequiredNow$1;\n\nfunction requireNow$1 () {\n\tif (hasRequiredNow$1) return now$2;\n\thasRequiredNow$1 = 1;\n\tvar parent = /*@__PURE__*/ requireNow$2();\n\n\tnow$2 = parent;\n\treturn now$2;\n}\n\nvar now$1;\nvar hasRequiredNow;\n\nfunction requireNow () {\n\tif (hasRequiredNow) return now$1;\n\thasRequiredNow = 1;\n\tnow$1 = /*@__PURE__*/ requireNow$1();\n\treturn now$1;\n}\n\nvar nowExports = requireNow();\nvar _Date$now = /*@__PURE__*/getDefaultExportFromCjs(nowExports);\n\nvar es_function_bind = {};\n\nvar functionBind;\nvar hasRequiredFunctionBind;\n\nfunction requireFunctionBind () {\n\tif (hasRequiredFunctionBind) return functionBind;\n\thasRequiredFunctionBind = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar arraySlice = /*@__PURE__*/ requireArraySlice();\n\tvar NATIVE_BIND = /*@__PURE__*/ requireFunctionBindNative();\n\n\tvar $Function = Function;\n\tvar concat = uncurryThis([].concat);\n\tvar join = uncurryThis([].join);\n\tvar factories = {};\n\n\tvar construct = function (C, argsLength, args) {\n\t  if (!hasOwn(factories, argsLength)) {\n\t    var list = [];\n\t    var i = 0;\n\t    for (; i < argsLength; i++) list[i] = 'a[' + i + ']';\n\t    factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');\n\t  } return factories[argsLength](C, args);\n\t};\n\n\t// `Function.prototype.bind` method implementation\n\t// https://tc39.es/ecma262/#sec-function.prototype.bind\n\t// eslint-disable-next-line es/no-function-prototype-bind -- detection\n\tfunctionBind = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) {\n\t  var F = aCallable(this);\n\t  var Prototype = F.prototype;\n\t  var partArgs = arraySlice(arguments, 1);\n\t  var boundFunction = function bound(/* args... */) {\n\t    var args = concat(partArgs, arraySlice(arguments));\n\t    return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n\t  };\n\t  if (isObject(Prototype)) boundFunction.prototype = Prototype;\n\t  return boundFunction;\n\t};\n\treturn functionBind;\n}\n\nvar hasRequiredEs_function_bind;\n\nfunction requireEs_function_bind () {\n\tif (hasRequiredEs_function_bind) return es_function_bind;\n\thasRequiredEs_function_bind = 1;\n\t// TODO: Remove from `core-js@4`\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar bind = /*@__PURE__*/ requireFunctionBind();\n\n\t// `Function.prototype.bind` method\n\t// https://tc39.es/ecma262/#sec-function.prototype.bind\n\t// eslint-disable-next-line es/no-function-prototype-bind -- detection\n\t$({ target: 'Function', proto: true, forced: Function.bind !== bind }, {\n\t  bind: bind\n\t});\n\treturn es_function_bind;\n}\n\nvar bind$3;\nvar hasRequiredBind$3;\n\nfunction requireBind$3 () {\n\tif (hasRequiredBind$3) return bind$3;\n\thasRequiredBind$3 = 1;\n\trequireEs_function_bind();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tbind$3 = getBuiltInPrototypeMethod('Function', 'bind');\n\treturn bind$3;\n}\n\nvar bind$2;\nvar hasRequiredBind$2;\n\nfunction requireBind$2 () {\n\tif (hasRequiredBind$2) return bind$2;\n\thasRequiredBind$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireBind$3();\n\n\tvar FunctionPrototype = Function.prototype;\n\n\tbind$2 = function (it) {\n\t  var own = it.bind;\n\t  return it === FunctionPrototype || (isPrototypeOf(FunctionPrototype, it) && own === FunctionPrototype.bind) ? method : own;\n\t};\n\treturn bind$2;\n}\n\nvar bind$1;\nvar hasRequiredBind$1;\n\nfunction requireBind$1 () {\n\tif (hasRequiredBind$1) return bind$1;\n\thasRequiredBind$1 = 1;\n\tvar parent = /*@__PURE__*/ requireBind$2();\n\n\tbind$1 = parent;\n\treturn bind$1;\n}\n\nvar bind;\nvar hasRequiredBind;\n\nfunction requireBind () {\n\tif (hasRequiredBind) return bind;\n\thasRequiredBind = 1;\n\tbind = /*@__PURE__*/ requireBind$1();\n\treturn bind;\n}\n\nvar bindExports = requireBind();\nvar _bindInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(bindExports);\n\nvar es_array_forEach = {};\n\nvar arrayMethodIsStrict;\nvar hasRequiredArrayMethodIsStrict;\n\nfunction requireArrayMethodIsStrict () {\n\tif (hasRequiredArrayMethodIsStrict) return arrayMethodIsStrict;\n\thasRequiredArrayMethodIsStrict = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tarrayMethodIsStrict = function (METHOD_NAME, argument) {\n\t  var method = [][METHOD_NAME];\n\t  return !!method && fails(function () {\n\t    // eslint-disable-next-line no-useless-call -- required for testing\n\t    method.call(null, argument || function () { return 1; }, 1);\n\t  });\n\t};\n\treturn arrayMethodIsStrict;\n}\n\nvar arrayForEach;\nvar hasRequiredArrayForEach;\n\nfunction requireArrayForEach () {\n\tif (hasRequiredArrayForEach) return arrayForEach;\n\thasRequiredArrayForEach = 1;\n\tvar $forEach = /*@__PURE__*/ requireArrayIteration().forEach;\n\tvar arrayMethodIsStrict = /*@__PURE__*/ requireArrayMethodIsStrict();\n\n\tvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n\t// `Array.prototype.forEach` method implementation\n\t// https://tc39.es/ecma262/#sec-array.prototype.foreach\n\tarrayForEach = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n\t  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n\t} : [].forEach;\n\treturn arrayForEach;\n}\n\nvar hasRequiredEs_array_forEach;\n\nfunction requireEs_array_forEach () {\n\tif (hasRequiredEs_array_forEach) return es_array_forEach;\n\thasRequiredEs_array_forEach = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar forEach = /*@__PURE__*/ requireArrayForEach();\n\n\t// `Array.prototype.forEach` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.foreach\n\t// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n\t$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {\n\t  forEach: forEach\n\t});\n\treturn es_array_forEach;\n}\n\nvar forEach$4;\nvar hasRequiredForEach$3;\n\nfunction requireForEach$3 () {\n\tif (hasRequiredForEach$3) return forEach$4;\n\thasRequiredForEach$3 = 1;\n\trequireEs_array_forEach();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tforEach$4 = getBuiltInPrototypeMethod('Array', 'forEach');\n\treturn forEach$4;\n}\n\nvar forEach$3;\nvar hasRequiredForEach$2;\n\nfunction requireForEach$2 () {\n\tif (hasRequiredForEach$2) return forEach$3;\n\thasRequiredForEach$2 = 1;\n\tvar parent = /*@__PURE__*/ requireForEach$3();\n\n\tforEach$3 = parent;\n\treturn forEach$3;\n}\n\nvar forEach$2;\nvar hasRequiredForEach$1;\n\nfunction requireForEach$1 () {\n\tif (hasRequiredForEach$1) return forEach$2;\n\thasRequiredForEach$1 = 1;\n\tvar classof = /*@__PURE__*/ requireClassof();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireForEach$2();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tvar DOMIterables = {\n\t  DOMTokenList: true,\n\t  NodeList: true\n\t};\n\n\tforEach$2 = function (it) {\n\t  var own = it.forEach;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach)\n\t    || hasOwn(DOMIterables, classof(it)) ? method : own;\n\t};\n\treturn forEach$2;\n}\n\nvar forEach$1;\nvar hasRequiredForEach;\n\nfunction requireForEach () {\n\tif (hasRequiredForEach) return forEach$1;\n\thasRequiredForEach = 1;\n\tforEach$1 = /*@__PURE__*/ requireForEach$1();\n\treturn forEach$1;\n}\n\nvar forEachExports = requireForEach();\nvar _forEachInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(forEachExports);\n\nvar es_array_reverse = {};\n\nvar hasRequiredEs_array_reverse;\n\nfunction requireEs_array_reverse () {\n\tif (hasRequiredEs_array_reverse) return es_array_reverse;\n\thasRequiredEs_array_reverse = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\n\tvar nativeReverse = uncurryThis([].reverse);\n\tvar test = [1, 2];\n\n\t// `Array.prototype.reverse` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.reverse\n\t// fix for Safari 12.0 bug\n\t// https://bugs.webkit.org/show_bug.cgi?id=188794\n\t$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n\t  reverse: function reverse() {\n\t    // eslint-disable-next-line no-self-assign -- dirty hack\n\t    if (isArray(this)) this.length = this.length;\n\t    return nativeReverse(this);\n\t  }\n\t});\n\treturn es_array_reverse;\n}\n\nvar reverse$3;\nvar hasRequiredReverse$3;\n\nfunction requireReverse$3 () {\n\tif (hasRequiredReverse$3) return reverse$3;\n\thasRequiredReverse$3 = 1;\n\trequireEs_array_reverse();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\treverse$3 = getBuiltInPrototypeMethod('Array', 'reverse');\n\treturn reverse$3;\n}\n\nvar reverse$2;\nvar hasRequiredReverse$2;\n\nfunction requireReverse$2 () {\n\tif (hasRequiredReverse$2) return reverse$2;\n\thasRequiredReverse$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireReverse$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\treverse$2 = function (it) {\n\t  var own = it.reverse;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reverse) ? method : own;\n\t};\n\treturn reverse$2;\n}\n\nvar reverse$1;\nvar hasRequiredReverse$1;\n\nfunction requireReverse$1 () {\n\tif (hasRequiredReverse$1) return reverse$1;\n\thasRequiredReverse$1 = 1;\n\tvar parent = /*@__PURE__*/ requireReverse$2();\n\n\treverse$1 = parent;\n\treturn reverse$1;\n}\n\nvar reverse;\nvar hasRequiredReverse;\n\nfunction requireReverse () {\n\tif (hasRequiredReverse) return reverse;\n\thasRequiredReverse = 1;\n\treverse = /*@__PURE__*/ requireReverse$1();\n\treturn reverse;\n}\n\nvar reverseExports = requireReverse();\nvar _reverseInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(reverseExports);\n\nvar es_array_splice = {};\n\nvar arraySetLength;\nvar hasRequiredArraySetLength;\n\nfunction requireArraySetLength () {\n\tif (hasRequiredArraySetLength) return arraySetLength;\n\thasRequiredArraySetLength = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\n\tvar $TypeError = TypeError;\n\t// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n\tvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n\t// Safari < 13 does not throw an error in this case\n\tvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n\t  // makes no sense without proper strict mode support\n\t  if (this !== undefined) return true;\n\t  try {\n\t    // eslint-disable-next-line es/no-object-defineproperty -- safe\n\t    Object.defineProperty([], 'length', { writable: false }).length = 1;\n\t  } catch (error) {\n\t    return error instanceof TypeError;\n\t  }\n\t}();\n\n\tarraySetLength = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n\t  if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n\t    throw new $TypeError('Cannot set read only .length');\n\t  } return O.length = length;\n\t} : function (O, length) {\n\t  return O.length = length;\n\t};\n\treturn arraySetLength;\n}\n\nvar deletePropertyOrThrow;\nvar hasRequiredDeletePropertyOrThrow;\n\nfunction requireDeletePropertyOrThrow () {\n\tif (hasRequiredDeletePropertyOrThrow) return deletePropertyOrThrow;\n\thasRequiredDeletePropertyOrThrow = 1;\n\tvar tryToString = /*@__PURE__*/ requireTryToString();\n\n\tvar $TypeError = TypeError;\n\n\tdeletePropertyOrThrow = function (O, P) {\n\t  if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n\t};\n\treturn deletePropertyOrThrow;\n}\n\nvar hasRequiredEs_array_splice;\n\nfunction requireEs_array_splice () {\n\tif (hasRequiredEs_array_splice) return es_array_splice;\n\thasRequiredEs_array_splice = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar toAbsoluteIndex = /*@__PURE__*/ requireToAbsoluteIndex();\n\tvar toIntegerOrInfinity = /*@__PURE__*/ requireToIntegerOrInfinity();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar setArrayLength = /*@__PURE__*/ requireArraySetLength();\n\tvar doesNotExceedSafeInteger = /*@__PURE__*/ requireDoesNotExceedSafeInteger();\n\tvar arraySpeciesCreate = /*@__PURE__*/ requireArraySpeciesCreate();\n\tvar createProperty = /*@__PURE__*/ requireCreateProperty();\n\tvar deletePropertyOrThrow = /*@__PURE__*/ requireDeletePropertyOrThrow();\n\tvar arrayMethodHasSpeciesSupport = /*@__PURE__*/ requireArrayMethodHasSpeciesSupport();\n\n\tvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\n\tvar max = Math.max;\n\tvar min = Math.min;\n\n\t// `Array.prototype.splice` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.splice\n\t// with adding support of @@species\n\t$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n\t  splice: function splice(start, deleteCount /* , ...items */) {\n\t    var O = toObject(this);\n\t    var len = lengthOfArrayLike(O);\n\t    var actualStart = toAbsoluteIndex(start, len);\n\t    var argumentsLength = arguments.length;\n\t    var insertCount, actualDeleteCount, A, k, from, to;\n\t    if (argumentsLength === 0) {\n\t      insertCount = actualDeleteCount = 0;\n\t    } else if (argumentsLength === 1) {\n\t      insertCount = 0;\n\t      actualDeleteCount = len - actualStart;\n\t    } else {\n\t      insertCount = argumentsLength - 2;\n\t      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n\t    }\n\t    doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\n\t    A = arraySpeciesCreate(O, actualDeleteCount);\n\t    for (k = 0; k < actualDeleteCount; k++) {\n\t      from = actualStart + k;\n\t      if (from in O) createProperty(A, k, O[from]);\n\t    }\n\t    A.length = actualDeleteCount;\n\t    if (insertCount < actualDeleteCount) {\n\t      for (k = actualStart; k < len - actualDeleteCount; k++) {\n\t        from = k + actualDeleteCount;\n\t        to = k + insertCount;\n\t        if (from in O) O[to] = O[from];\n\t        else deletePropertyOrThrow(O, to);\n\t      }\n\t      for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);\n\t    } else if (insertCount > actualDeleteCount) {\n\t      for (k = len - actualDeleteCount; k > actualStart; k--) {\n\t        from = k + actualDeleteCount - 1;\n\t        to = k + insertCount - 1;\n\t        if (from in O) O[to] = O[from];\n\t        else deletePropertyOrThrow(O, to);\n\t      }\n\t    }\n\t    for (k = 0; k < insertCount; k++) {\n\t      O[k + actualStart] = arguments[k + 2];\n\t    }\n\t    setArrayLength(O, len - actualDeleteCount + insertCount);\n\t    return A;\n\t  }\n\t});\n\treturn es_array_splice;\n}\n\nvar splice$3;\nvar hasRequiredSplice$3;\n\nfunction requireSplice$3 () {\n\tif (hasRequiredSplice$3) return splice$3;\n\thasRequiredSplice$3 = 1;\n\trequireEs_array_splice();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tsplice$3 = getBuiltInPrototypeMethod('Array', 'splice');\n\treturn splice$3;\n}\n\nvar splice$2;\nvar hasRequiredSplice$2;\n\nfunction requireSplice$2 () {\n\tif (hasRequiredSplice$2) return splice$2;\n\thasRequiredSplice$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireSplice$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tsplice$2 = function (it) {\n\t  var own = it.splice;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.splice) ? method : own;\n\t};\n\treturn splice$2;\n}\n\nvar splice$1;\nvar hasRequiredSplice$1;\n\nfunction requireSplice$1 () {\n\tif (hasRequiredSplice$1) return splice$1;\n\thasRequiredSplice$1 = 1;\n\tvar parent = /*@__PURE__*/ requireSplice$2();\n\n\tsplice$1 = parent;\n\treturn splice$1;\n}\n\nvar splice;\nvar hasRequiredSplice;\n\nfunction requireSplice () {\n\tif (hasRequiredSplice) return splice;\n\thasRequiredSplice = 1;\n\tsplice = /*@__PURE__*/ requireSplice$1();\n\treturn splice;\n}\n\nvar spliceExports = requireSplice();\nvar _spliceInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(spliceExports);\n\nvar es_object_assign = {};\n\nvar objectAssign;\nvar hasRequiredObjectAssign;\n\nfunction requireObjectAssign () {\n\tif (hasRequiredObjectAssign) return objectAssign;\n\thasRequiredObjectAssign = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar objectKeys = /*@__PURE__*/ requireObjectKeys();\n\tvar getOwnPropertySymbolsModule = /*@__PURE__*/ requireObjectGetOwnPropertySymbols();\n\tvar propertyIsEnumerableModule = /*@__PURE__*/ requireObjectPropertyIsEnumerable();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar IndexedObject = /*@__PURE__*/ requireIndexedObject();\n\n\t// eslint-disable-next-line es/no-object-assign -- safe\n\tvar $assign = Object.assign;\n\t// eslint-disable-next-line es/no-object-defineproperty -- required for testing\n\tvar defineProperty = Object.defineProperty;\n\tvar concat = uncurryThis([].concat);\n\n\t// `Object.assign` method\n\t// https://tc39.es/ecma262/#sec-object.assign\n\tobjectAssign = !$assign || fails(function () {\n\t  // should have correct order of operations (Edge bug)\n\t  if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n\t    enumerable: true,\n\t    get: function () {\n\t      defineProperty(this, 'b', {\n\t        value: 3,\n\t        enumerable: false\n\t      });\n\t    }\n\t  }), { b: 2 })).b !== 1) return true;\n\t  // should work with symbols and should have deterministic property order (V8 bug)\n\t  var A = {};\n\t  var B = {};\n\t  // eslint-disable-next-line es/no-symbol -- safe\n\t  var symbol = Symbol('assign detection');\n\t  var alphabet = 'abcdefghijklmnopqrst';\n\t  A[symbol] = 7;\n\t  // eslint-disable-next-line es/no-array-prototype-foreach -- safe\n\t  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n\t  return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet;\n\t}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n\t  var T = toObject(target);\n\t  var argumentsLength = arguments.length;\n\t  var index = 1;\n\t  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n\t  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n\t  while (argumentsLength > index) {\n\t    var S = IndexedObject(arguments[index++]);\n\t    var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n\t    var length = keys.length;\n\t    var j = 0;\n\t    var key;\n\t    while (length > j) {\n\t      key = keys[j++];\n\t      if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n\t    }\n\t  } return T;\n\t} : $assign;\n\treturn objectAssign;\n}\n\nvar hasRequiredEs_object_assign;\n\nfunction requireEs_object_assign () {\n\tif (hasRequiredEs_object_assign) return es_object_assign;\n\thasRequiredEs_object_assign = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar assign = /*@__PURE__*/ requireObjectAssign();\n\n\t// `Object.assign` method\n\t// https://tc39.es/ecma262/#sec-object.assign\n\t// eslint-disable-next-line es/no-object-assign -- required for testing\n\t$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {\n\t  assign: assign\n\t});\n\treturn es_object_assign;\n}\n\nvar assign$4;\nvar hasRequiredAssign$2;\n\nfunction requireAssign$2 () {\n\tif (hasRequiredAssign$2) return assign$4;\n\thasRequiredAssign$2 = 1;\n\trequireEs_object_assign();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tassign$4 = path.Object.assign;\n\treturn assign$4;\n}\n\nvar assign$3;\nvar hasRequiredAssign$1;\n\nfunction requireAssign$1 () {\n\tif (hasRequiredAssign$1) return assign$3;\n\thasRequiredAssign$1 = 1;\n\tvar parent = /*@__PURE__*/ requireAssign$2();\n\n\tassign$3 = parent;\n\treturn assign$3;\n}\n\nvar assign$2;\nvar hasRequiredAssign;\n\nfunction requireAssign () {\n\tif (hasRequiredAssign) return assign$2;\n\thasRequiredAssign = 1;\n\tassign$2 = /*@__PURE__*/ requireAssign$1();\n\treturn assign$2;\n}\n\nvar assignExports = requireAssign();\nvar _Object$assign = /*@__PURE__*/getDefaultExportFromCjs(assignExports);\n\nvar es_array_includes = {};\n\nvar hasRequiredEs_array_includes;\n\nfunction requireEs_array_includes () {\n\tif (hasRequiredEs_array_includes) return es_array_includes;\n\thasRequiredEs_array_includes = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $includes = /*@__PURE__*/ requireArrayIncludes().includes;\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar addToUnscopables = /*@__PURE__*/ requireAddToUnscopables();\n\n\t// FF99+ bug\n\tvar BROKEN_ON_SPARSE = fails(function () {\n\t  // eslint-disable-next-line es/no-array-prototype-includes -- detection\n\t  return !Array(1).includes();\n\t});\n\n\t// `Array.prototype.includes` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.includes\n\t$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n\t  includes: function includes(el /* , fromIndex = 0 */) {\n\t    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n\t  }\n\t});\n\n\t// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\n\taddToUnscopables('includes');\n\treturn es_array_includes;\n}\n\nvar includes$4;\nvar hasRequiredIncludes$4;\n\nfunction requireIncludes$4 () {\n\tif (hasRequiredIncludes$4) return includes$4;\n\thasRequiredIncludes$4 = 1;\n\trequireEs_array_includes();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tincludes$4 = getBuiltInPrototypeMethod('Array', 'includes');\n\treturn includes$4;\n}\n\nvar es_string_includes = {};\n\nvar isRegexp;\nvar hasRequiredIsRegexp;\n\nfunction requireIsRegexp () {\n\tif (hasRequiredIsRegexp) return isRegexp;\n\thasRequiredIsRegexp = 1;\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar MATCH = wellKnownSymbol('match');\n\n\t// `IsRegExp` abstract operation\n\t// https://tc39.es/ecma262/#sec-isregexp\n\tisRegexp = function (it) {\n\t  var isRegExp;\n\t  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n\t};\n\treturn isRegexp;\n}\n\nvar notARegexp;\nvar hasRequiredNotARegexp;\n\nfunction requireNotARegexp () {\n\tif (hasRequiredNotARegexp) return notARegexp;\n\thasRequiredNotARegexp = 1;\n\tvar isRegExp = /*@__PURE__*/ requireIsRegexp();\n\n\tvar $TypeError = TypeError;\n\n\tnotARegexp = function (it) {\n\t  if (isRegExp(it)) {\n\t    throw new $TypeError(\"The method doesn't accept regular expressions\");\n\t  } return it;\n\t};\n\treturn notARegexp;\n}\n\nvar correctIsRegexpLogic;\nvar hasRequiredCorrectIsRegexpLogic;\n\nfunction requireCorrectIsRegexpLogic () {\n\tif (hasRequiredCorrectIsRegexpLogic) return correctIsRegexpLogic;\n\thasRequiredCorrectIsRegexpLogic = 1;\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar MATCH = wellKnownSymbol('match');\n\n\tcorrectIsRegexpLogic = function (METHOD_NAME) {\n\t  var regexp = /./;\n\t  try {\n\t    '/./'[METHOD_NAME](regexp);\n\t  } catch (error1) {\n\t    try {\n\t      regexp[MATCH] = false;\n\t      return '/./'[METHOD_NAME](regexp);\n\t    } catch (error2) { /* empty */ }\n\t  } return false;\n\t};\n\treturn correctIsRegexpLogic;\n}\n\nvar hasRequiredEs_string_includes;\n\nfunction requireEs_string_includes () {\n\tif (hasRequiredEs_string_includes) return es_string_includes;\n\thasRequiredEs_string_includes = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar notARegExp = /*@__PURE__*/ requireNotARegexp();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar correctIsRegExpLogic = /*@__PURE__*/ requireCorrectIsRegexpLogic();\n\n\tvar stringIndexOf = uncurryThis(''.indexOf);\n\n\t// `String.prototype.includes` method\n\t// https://tc39.es/ecma262/#sec-string.prototype.includes\n\t$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n\t  includes: function includes(searchString /* , position = 0 */) {\n\t    return !!~stringIndexOf(\n\t      toString(requireObjectCoercible(this)),\n\t      toString(notARegExp(searchString)),\n\t      arguments.length > 1 ? arguments[1] : undefined\n\t    );\n\t  }\n\t});\n\treturn es_string_includes;\n}\n\nvar includes$3;\nvar hasRequiredIncludes$3;\n\nfunction requireIncludes$3 () {\n\tif (hasRequiredIncludes$3) return includes$3;\n\thasRequiredIncludes$3 = 1;\n\trequireEs_string_includes();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tincludes$3 = getBuiltInPrototypeMethod('String', 'includes');\n\treturn includes$3;\n}\n\nvar includes$2;\nvar hasRequiredIncludes$2;\n\nfunction requireIncludes$2 () {\n\tif (hasRequiredIncludes$2) return includes$2;\n\thasRequiredIncludes$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar arrayMethod = /*@__PURE__*/ requireIncludes$4();\n\tvar stringMethod = /*@__PURE__*/ requireIncludes$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\tvar StringPrototype = String.prototype;\n\n\tincludes$2 = function (it) {\n\t  var own = it.includes;\n\t  if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes)) return arrayMethod;\n\t  if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes)) {\n\t    return stringMethod;\n\t  } return own;\n\t};\n\treturn includes$2;\n}\n\nvar includes$1;\nvar hasRequiredIncludes$1;\n\nfunction requireIncludes$1 () {\n\tif (hasRequiredIncludes$1) return includes$1;\n\thasRequiredIncludes$1 = 1;\n\tvar parent = /*@__PURE__*/ requireIncludes$2();\n\n\tincludes$1 = parent;\n\treturn includes$1;\n}\n\nvar includes;\nvar hasRequiredIncludes;\n\nfunction requireIncludes () {\n\tif (hasRequiredIncludes) return includes;\n\thasRequiredIncludes = 1;\n\tincludes = /*@__PURE__*/ requireIncludes$1();\n\treturn includes;\n}\n\nvar includesExports = requireIncludes();\nvar _includesInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(includesExports);\n\nvar es_object_getPrototypeOf = {};\n\nvar hasRequiredEs_object_getPrototypeOf;\n\nfunction requireEs_object_getPrototypeOf () {\n\tif (hasRequiredEs_object_getPrototypeOf) return es_object_getPrototypeOf;\n\thasRequiredEs_object_getPrototypeOf = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar nativeGetPrototypeOf = /*@__PURE__*/ requireObjectGetPrototypeOf();\n\tvar CORRECT_PROTOTYPE_GETTER = /*@__PURE__*/ requireCorrectPrototypeGetter();\n\n\tvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n\t// `Object.getPrototypeOf` method\n\t// https://tc39.es/ecma262/#sec-object.getprototypeof\n\t$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n\t  getPrototypeOf: function getPrototypeOf(it) {\n\t    return nativeGetPrototypeOf(toObject(it));\n\t  }\n\t});\n\treturn es_object_getPrototypeOf;\n}\n\nvar getPrototypeOf$2;\nvar hasRequiredGetPrototypeOf$2;\n\nfunction requireGetPrototypeOf$2 () {\n\tif (hasRequiredGetPrototypeOf$2) return getPrototypeOf$2;\n\thasRequiredGetPrototypeOf$2 = 1;\n\trequireEs_object_getPrototypeOf();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tgetPrototypeOf$2 = path.Object.getPrototypeOf;\n\treturn getPrototypeOf$2;\n}\n\nvar getPrototypeOf$1;\nvar hasRequiredGetPrototypeOf$1;\n\nfunction requireGetPrototypeOf$1 () {\n\tif (hasRequiredGetPrototypeOf$1) return getPrototypeOf$1;\n\thasRequiredGetPrototypeOf$1 = 1;\n\tvar parent = /*@__PURE__*/ requireGetPrototypeOf$2();\n\n\tgetPrototypeOf$1 = parent;\n\treturn getPrototypeOf$1;\n}\n\nvar getPrototypeOf;\nvar hasRequiredGetPrototypeOf;\n\nfunction requireGetPrototypeOf () {\n\tif (hasRequiredGetPrototypeOf) return getPrototypeOf;\n\thasRequiredGetPrototypeOf = 1;\n\tgetPrototypeOf = /*@__PURE__*/ requireGetPrototypeOf$1();\n\treturn getPrototypeOf;\n}\n\nvar getPrototypeOfExports = requireGetPrototypeOf();\nvar _Object$getPrototypeOf = /*@__PURE__*/getDefaultExportFromCjs(getPrototypeOfExports);\n\nvar concat$3;\nvar hasRequiredConcat$3;\n\nfunction requireConcat$3 () {\n\tif (hasRequiredConcat$3) return concat$3;\n\thasRequiredConcat$3 = 1;\n\trequireEs_array_concat();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tconcat$3 = getBuiltInPrototypeMethod('Array', 'concat');\n\treturn concat$3;\n}\n\nvar concat$2;\nvar hasRequiredConcat$2;\n\nfunction requireConcat$2 () {\n\tif (hasRequiredConcat$2) return concat$2;\n\thasRequiredConcat$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireConcat$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tconcat$2 = function (it) {\n\t  var own = it.concat;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.concat) ? method : own;\n\t};\n\treturn concat$2;\n}\n\nvar concat$1;\nvar hasRequiredConcat$1;\n\nfunction requireConcat$1 () {\n\tif (hasRequiredConcat$1) return concat$1;\n\thasRequiredConcat$1 = 1;\n\tvar parent = /*@__PURE__*/ requireConcat$2();\n\n\tconcat$1 = parent;\n\treturn concat$1;\n}\n\nvar concat;\nvar hasRequiredConcat;\n\nfunction requireConcat () {\n\tif (hasRequiredConcat) return concat;\n\thasRequiredConcat = 1;\n\tconcat = /*@__PURE__*/ requireConcat$1();\n\treturn concat;\n}\n\nvar concatExports = requireConcat();\nvar _concatInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(concatExports);\n\nvar es_array_filter = {};\n\nvar hasRequiredEs_array_filter;\n\nfunction requireEs_array_filter () {\n\tif (hasRequiredEs_array_filter) return es_array_filter;\n\thasRequiredEs_array_filter = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $filter = /*@__PURE__*/ requireArrayIteration().filter;\n\tvar arrayMethodHasSpeciesSupport = /*@__PURE__*/ requireArrayMethodHasSpeciesSupport();\n\n\tvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n\t// `Array.prototype.filter` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.filter\n\t// with adding support of @@species\n\t$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n\t  filter: function filter(callbackfn /* , thisArg */) {\n\t    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t  }\n\t});\n\treturn es_array_filter;\n}\n\nvar filter$3;\nvar hasRequiredFilter$3;\n\nfunction requireFilter$3 () {\n\tif (hasRequiredFilter$3) return filter$3;\n\thasRequiredFilter$3 = 1;\n\trequireEs_array_filter();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tfilter$3 = getBuiltInPrototypeMethod('Array', 'filter');\n\treturn filter$3;\n}\n\nvar filter$2;\nvar hasRequiredFilter$2;\n\nfunction requireFilter$2 () {\n\tif (hasRequiredFilter$2) return filter$2;\n\thasRequiredFilter$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireFilter$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tfilter$2 = function (it) {\n\t  var own = it.filter;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filter) ? method : own;\n\t};\n\treturn filter$2;\n}\n\nvar filter$1;\nvar hasRequiredFilter$1;\n\nfunction requireFilter$1 () {\n\tif (hasRequiredFilter$1) return filter$1;\n\thasRequiredFilter$1 = 1;\n\tvar parent = /*@__PURE__*/ requireFilter$2();\n\n\tfilter$1 = parent;\n\treturn filter$1;\n}\n\nvar filter;\nvar hasRequiredFilter;\n\nfunction requireFilter () {\n\tif (hasRequiredFilter) return filter;\n\thasRequiredFilter = 1;\n\tfilter = /*@__PURE__*/ requireFilter$1();\n\treturn filter;\n}\n\nvar filterExports = requireFilter();\nvar _filterInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(filterExports);\n\nvar es_object_values = {};\n\nvar objectToArray;\nvar hasRequiredObjectToArray;\n\nfunction requireObjectToArray () {\n\tif (hasRequiredObjectToArray) return objectToArray;\n\thasRequiredObjectToArray = 1;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar objectGetPrototypeOf = /*@__PURE__*/ requireObjectGetPrototypeOf();\n\tvar objectKeys = /*@__PURE__*/ requireObjectKeys();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar $propertyIsEnumerable = /*@__PURE__*/ requireObjectPropertyIsEnumerable().f;\n\n\tvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\n\tvar push = uncurryThis([].push);\n\n\t// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys\n\t// of `null` prototype objects\n\tvar IE_BUG = DESCRIPTORS && fails(function () {\n\t  // eslint-disable-next-line es/no-object-create -- safe\n\t  var O = Object.create(null);\n\t  O[2] = 2;\n\t  return !propertyIsEnumerable(O, 2);\n\t});\n\n\t// `Object.{ entries, values }` methods implementation\n\tvar createMethod = function (TO_ENTRIES) {\n\t  return function (it) {\n\t    var O = toIndexedObject(it);\n\t    var keys = objectKeys(O);\n\t    var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;\n\t    var length = keys.length;\n\t    var i = 0;\n\t    var result = [];\n\t    var key;\n\t    while (length > i) {\n\t      key = keys[i++];\n\t      if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {\n\t        push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n\t      }\n\t    }\n\t    return result;\n\t  };\n\t};\n\n\tobjectToArray = {\n\t  // `Object.entries` method\n\t  // https://tc39.es/ecma262/#sec-object.entries\n\t  entries: createMethod(true),\n\t  // `Object.values` method\n\t  // https://tc39.es/ecma262/#sec-object.values\n\t  values: createMethod(false)\n\t};\n\treturn objectToArray;\n}\n\nvar hasRequiredEs_object_values;\n\nfunction requireEs_object_values () {\n\tif (hasRequiredEs_object_values) return es_object_values;\n\thasRequiredEs_object_values = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $values = /*@__PURE__*/ requireObjectToArray().values;\n\n\t// `Object.values` method\n\t// https://tc39.es/ecma262/#sec-object.values\n\t$({ target: 'Object', stat: true }, {\n\t  values: function values(O) {\n\t    return $values(O);\n\t  }\n\t});\n\treturn es_object_values;\n}\n\nvar values$6;\nvar hasRequiredValues$6;\n\nfunction requireValues$6 () {\n\tif (hasRequiredValues$6) return values$6;\n\thasRequiredValues$6 = 1;\n\trequireEs_object_values();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tvalues$6 = path.Object.values;\n\treturn values$6;\n}\n\nvar values$5;\nvar hasRequiredValues$5;\n\nfunction requireValues$5 () {\n\tif (hasRequiredValues$5) return values$5;\n\thasRequiredValues$5 = 1;\n\tvar parent = /*@__PURE__*/ requireValues$6();\n\n\tvalues$5 = parent;\n\treturn values$5;\n}\n\nvar values$4;\nvar hasRequiredValues$4;\n\nfunction requireValues$4 () {\n\tif (hasRequiredValues$4) return values$4;\n\thasRequiredValues$4 = 1;\n\tvalues$4 = /*@__PURE__*/ requireValues$5();\n\treturn values$4;\n}\n\nvar valuesExports$1 = requireValues$4();\nvar _Object$values = /*@__PURE__*/getDefaultExportFromCjs(valuesExports$1);\n\nvar es_parseInt = {};\n\nvar whitespaces;\nvar hasRequiredWhitespaces;\n\nfunction requireWhitespaces () {\n\tif (hasRequiredWhitespaces) return whitespaces;\n\thasRequiredWhitespaces = 1;\n\t// a string of all valid unicode whitespaces\n\twhitespaces = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n\t  '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\treturn whitespaces;\n}\n\nvar stringTrim;\nvar hasRequiredStringTrim;\n\nfunction requireStringTrim () {\n\tif (hasRequiredStringTrim) return stringTrim;\n\thasRequiredStringTrim = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar whitespaces = /*@__PURE__*/ requireWhitespaces();\n\n\tvar replace = uncurryThis(''.replace);\n\tvar ltrim = RegExp('^[' + whitespaces + ']+');\n\tvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n\t// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\n\tvar createMethod = function (TYPE) {\n\t  return function ($this) {\n\t    var string = toString(requireObjectCoercible($this));\n\t    if (TYPE & 1) string = replace(string, ltrim, '');\n\t    if (TYPE & 2) string = replace(string, rtrim, '$1');\n\t    return string;\n\t  };\n\t};\n\n\tstringTrim = {\n\t  // `String.prototype.{ trimLeft, trimStart }` methods\n\t  // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n\t  start: createMethod(1),\n\t  // `String.prototype.{ trimRight, trimEnd }` methods\n\t  // https://tc39.es/ecma262/#sec-string.prototype.trimend\n\t  end: createMethod(2),\n\t  // `String.prototype.trim` method\n\t  // https://tc39.es/ecma262/#sec-string.prototype.trim\n\t  trim: createMethod(3)\n\t};\n\treturn stringTrim;\n}\n\nvar numberParseInt;\nvar hasRequiredNumberParseInt;\n\nfunction requireNumberParseInt () {\n\tif (hasRequiredNumberParseInt) return numberParseInt;\n\thasRequiredNumberParseInt = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar trim = /*@__PURE__*/ requireStringTrim().trim;\n\tvar whitespaces = /*@__PURE__*/ requireWhitespaces();\n\n\tvar $parseInt = globalThis.parseInt;\n\tvar Symbol = globalThis.Symbol;\n\tvar ITERATOR = Symbol && Symbol.iterator;\n\tvar hex = /^[+-]?0x/i;\n\tvar exec = uncurryThis(hex.exec);\n\tvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n\t  // MS Edge 18- broken with boxed symbols\n\t  || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n\t// `parseInt` method\n\t// https://tc39.es/ecma262/#sec-parseint-string-radix\n\tnumberParseInt = FORCED ? function parseInt(string, radix) {\n\t  var S = trim(toString(string));\n\t  return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n\t} : $parseInt;\n\treturn numberParseInt;\n}\n\nvar hasRequiredEs_parseInt;\n\nfunction requireEs_parseInt () {\n\tif (hasRequiredEs_parseInt) return es_parseInt;\n\thasRequiredEs_parseInt = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $parseInt = /*@__PURE__*/ requireNumberParseInt();\n\n\t// `parseInt` method\n\t// https://tc39.es/ecma262/#sec-parseint-string-radix\n\t$({ global: true, forced: parseInt !== $parseInt }, {\n\t  parseInt: $parseInt\n\t});\n\treturn es_parseInt;\n}\n\nvar _parseInt$3;\nvar hasRequired_parseInt$2;\n\nfunction require_parseInt$2 () {\n\tif (hasRequired_parseInt$2) return _parseInt$3;\n\thasRequired_parseInt$2 = 1;\n\trequireEs_parseInt();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\t_parseInt$3 = path.parseInt;\n\treturn _parseInt$3;\n}\n\nvar _parseInt$2;\nvar hasRequired_parseInt$1;\n\nfunction require_parseInt$1 () {\n\tif (hasRequired_parseInt$1) return _parseInt$2;\n\thasRequired_parseInt$1 = 1;\n\tvar parent = /*@__PURE__*/ require_parseInt$2();\n\n\t_parseInt$2 = parent;\n\treturn _parseInt$2;\n}\n\nvar _parseInt$1;\nvar hasRequired_parseInt;\n\nfunction require_parseInt () {\n\tif (hasRequired_parseInt) return _parseInt$1;\n\thasRequired_parseInt = 1;\n\t_parseInt$1 = /*@__PURE__*/ require_parseInt$1();\n\treturn _parseInt$1;\n}\n\nvar _parseIntExports = require_parseInt();\nvar _parseInt = /*@__PURE__*/getDefaultExportFromCjs(_parseIntExports);\n\nvar es_array_indexOf = {};\n\nvar hasRequiredEs_array_indexOf;\n\nfunction requireEs_array_indexOf () {\n\tif (hasRequiredEs_array_indexOf) return es_array_indexOf;\n\thasRequiredEs_array_indexOf = 1;\n\t/* eslint-disable es/no-array-prototype-indexof -- required for testing */\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThisClause();\n\tvar $indexOf = /*@__PURE__*/ requireArrayIncludes().indexOf;\n\tvar arrayMethodIsStrict = /*@__PURE__*/ requireArrayMethodIsStrict();\n\n\tvar nativeIndexOf = uncurryThis([].indexOf);\n\n\tvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;\n\tvar FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf');\n\n\t// `Array.prototype.indexOf` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.indexof\n\t$({ target: 'Array', proto: true, forced: FORCED }, {\n\t  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n\t    var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n\t    return NEGATIVE_ZERO\n\t      // convert -0 to +0\n\t      ? nativeIndexOf(this, searchElement, fromIndex) || 0\n\t      : $indexOf(this, searchElement, fromIndex);\n\t  }\n\t});\n\treturn es_array_indexOf;\n}\n\nvar indexOf$3;\nvar hasRequiredIndexOf$3;\n\nfunction requireIndexOf$3 () {\n\tif (hasRequiredIndexOf$3) return indexOf$3;\n\thasRequiredIndexOf$3 = 1;\n\trequireEs_array_indexOf();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tindexOf$3 = getBuiltInPrototypeMethod('Array', 'indexOf');\n\treturn indexOf$3;\n}\n\nvar indexOf$2;\nvar hasRequiredIndexOf$2;\n\nfunction requireIndexOf$2 () {\n\tif (hasRequiredIndexOf$2) return indexOf$2;\n\thasRequiredIndexOf$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireIndexOf$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tindexOf$2 = function (it) {\n\t  var own = it.indexOf;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.indexOf) ? method : own;\n\t};\n\treturn indexOf$2;\n}\n\nvar indexOf$1;\nvar hasRequiredIndexOf$1;\n\nfunction requireIndexOf$1 () {\n\tif (hasRequiredIndexOf$1) return indexOf$1;\n\thasRequiredIndexOf$1 = 1;\n\tvar parent = /*@__PURE__*/ requireIndexOf$2();\n\n\tindexOf$1 = parent;\n\treturn indexOf$1;\n}\n\nvar indexOf;\nvar hasRequiredIndexOf;\n\nfunction requireIndexOf () {\n\tif (hasRequiredIndexOf) return indexOf;\n\thasRequiredIndexOf = 1;\n\tindexOf = /*@__PURE__*/ requireIndexOf$1();\n\treturn indexOf;\n}\n\nvar indexOfExports = requireIndexOf();\nvar _indexOfInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(indexOfExports);\n\nvar es_object_entries = {};\n\nvar hasRequiredEs_object_entries;\n\nfunction requireEs_object_entries () {\n\tif (hasRequiredEs_object_entries) return es_object_entries;\n\thasRequiredEs_object_entries = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $entries = /*@__PURE__*/ requireObjectToArray().entries;\n\n\t// `Object.entries` method\n\t// https://tc39.es/ecma262/#sec-object.entries\n\t$({ target: 'Object', stat: true }, {\n\t  entries: function entries(O) {\n\t    return $entries(O);\n\t  }\n\t});\n\treturn es_object_entries;\n}\n\nvar entries$6;\nvar hasRequiredEntries$6;\n\nfunction requireEntries$6 () {\n\tif (hasRequiredEntries$6) return entries$6;\n\thasRequiredEntries$6 = 1;\n\trequireEs_object_entries();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tentries$6 = path.Object.entries;\n\treturn entries$6;\n}\n\nvar entries$5;\nvar hasRequiredEntries$5;\n\nfunction requireEntries$5 () {\n\tif (hasRequiredEntries$5) return entries$5;\n\thasRequiredEntries$5 = 1;\n\tvar parent = /*@__PURE__*/ requireEntries$6();\n\n\tentries$5 = parent;\n\treturn entries$5;\n}\n\nvar entries$4;\nvar hasRequiredEntries$4;\n\nfunction requireEntries$4 () {\n\tif (hasRequiredEntries$4) return entries$4;\n\thasRequiredEntries$4 = 1;\n\tentries$4 = /*@__PURE__*/ requireEntries$5();\n\treturn entries$4;\n}\n\nvar entriesExports$1 = requireEntries$4();\nvar _Object$entries = /*@__PURE__*/getDefaultExportFromCjs(entriesExports$1);\n\nvar es_object_create = {};\n\nvar hasRequiredEs_object_create;\n\nfunction requireEs_object_create () {\n\tif (hasRequiredEs_object_create) return es_object_create;\n\thasRequiredEs_object_create = 1;\n\t// TODO: Remove from `core-js@4`\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar create = /*@__PURE__*/ requireObjectCreate();\n\n\t// `Object.create` method\n\t// https://tc39.es/ecma262/#sec-object.create\n\t$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n\t  create: create\n\t});\n\treturn es_object_create;\n}\n\nvar create$2;\nvar hasRequiredCreate$2;\n\nfunction requireCreate$2 () {\n\tif (hasRequiredCreate$2) return create$2;\n\thasRequiredCreate$2 = 1;\n\trequireEs_object_create();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tvar Object = path.Object;\n\n\tcreate$2 = function create(P, D) {\n\t  return Object.create(P, D);\n\t};\n\treturn create$2;\n}\n\nvar create$1;\nvar hasRequiredCreate$1;\n\nfunction requireCreate$1 () {\n\tif (hasRequiredCreate$1) return create$1;\n\thasRequiredCreate$1 = 1;\n\tvar parent = /*@__PURE__*/ requireCreate$2();\n\n\tcreate$1 = parent;\n\treturn create$1;\n}\n\nvar create;\nvar hasRequiredCreate;\n\nfunction requireCreate () {\n\tif (hasRequiredCreate) return create;\n\thasRequiredCreate = 1;\n\tcreate = /*@__PURE__*/ requireCreate$1();\n\treturn create;\n}\n\nvar createExports = requireCreate();\nvar _Object$create = /*@__PURE__*/getDefaultExportFromCjs(createExports);\n\nvar es_date_toJson = {};\n\nvar stringRepeat;\nvar hasRequiredStringRepeat;\n\nfunction requireStringRepeat () {\n\tif (hasRequiredStringRepeat) return stringRepeat;\n\thasRequiredStringRepeat = 1;\n\tvar toIntegerOrInfinity = /*@__PURE__*/ requireToIntegerOrInfinity();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\n\tvar $RangeError = RangeError;\n\n\t// `String.prototype.repeat` method implementation\n\t// https://tc39.es/ecma262/#sec-string.prototype.repeat\n\tstringRepeat = function repeat(count) {\n\t  var str = toString(requireObjectCoercible(this));\n\t  var result = '';\n\t  var n = toIntegerOrInfinity(count);\n\t  if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions');\n\t  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n\t  return result;\n\t};\n\treturn stringRepeat;\n}\n\nvar stringPad;\nvar hasRequiredStringPad;\n\nfunction requireStringPad () {\n\tif (hasRequiredStringPad) return stringPad;\n\thasRequiredStringPad = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar toLength = /*@__PURE__*/ requireToLength();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar $repeat = /*@__PURE__*/ requireStringRepeat();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\n\tvar repeat = uncurryThis($repeat);\n\tvar stringSlice = uncurryThis(''.slice);\n\tvar ceil = Math.ceil;\n\n\t// `String.prototype.{ padStart, padEnd }` methods implementation\n\tvar createMethod = function (IS_END) {\n\t  return function ($this, maxLength, fillString) {\n\t    var S = toString(requireObjectCoercible($this));\n\t    var intMaxLength = toLength(maxLength);\n\t    var stringLength = S.length;\n\t    var fillStr = fillString === undefined ? ' ' : toString(fillString);\n\t    var fillLen, stringFiller;\n\t    if (intMaxLength <= stringLength || fillStr === '') return S;\n\t    fillLen = intMaxLength - stringLength;\n\t    stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n\t    if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n\t    return IS_END ? S + stringFiller : stringFiller + S;\n\t  };\n\t};\n\n\tstringPad = {\n\t  // `String.prototype.padStart` method\n\t  // https://tc39.es/ecma262/#sec-string.prototype.padstart\n\t  start: createMethod(false),\n\t  // `String.prototype.padEnd` method\n\t  // https://tc39.es/ecma262/#sec-string.prototype.padend\n\t  end: createMethod(true)\n\t};\n\treturn stringPad;\n}\n\nvar dateToIsoString;\nvar hasRequiredDateToIsoString;\n\nfunction requireDateToIsoString () {\n\tif (hasRequiredDateToIsoString) return dateToIsoString;\n\thasRequiredDateToIsoString = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar padStart = /*@__PURE__*/ requireStringPad().start;\n\n\tvar $RangeError = RangeError;\n\tvar $isFinite = isFinite;\n\tvar abs = Math.abs;\n\tvar DatePrototype = Date.prototype;\n\tvar nativeDateToISOString = DatePrototype.toISOString;\n\tvar thisTimeValue = uncurryThis(DatePrototype.getTime);\n\tvar getUTCDate = uncurryThis(DatePrototype.getUTCDate);\n\tvar getUTCFullYear = uncurryThis(DatePrototype.getUTCFullYear);\n\tvar getUTCHours = uncurryThis(DatePrototype.getUTCHours);\n\tvar getUTCMilliseconds = uncurryThis(DatePrototype.getUTCMilliseconds);\n\tvar getUTCMinutes = uncurryThis(DatePrototype.getUTCMinutes);\n\tvar getUTCMonth = uncurryThis(DatePrototype.getUTCMonth);\n\tvar getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds);\n\n\t// `Date.prototype.toISOString` method implementation\n\t// https://tc39.es/ecma262/#sec-date.prototype.toisostring\n\t// PhantomJS / old WebKit fails here:\n\tdateToIsoString = (fails(function () {\n\t  return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z';\n\t}) || !fails(function () {\n\t  nativeDateToISOString.call(new Date(NaN));\n\t})) ? function toISOString() {\n\t  if (!$isFinite(thisTimeValue(this))) throw new $RangeError('Invalid time value');\n\t  var date = this;\n\t  var year = getUTCFullYear(date);\n\t  var milliseconds = getUTCMilliseconds(date);\n\t  var sign = year < 0 ? '-' : year > 9999 ? '+' : '';\n\t  return sign + padStart(abs(year), sign ? 6 : 4, 0) +\n\t    '-' + padStart(getUTCMonth(date) + 1, 2, 0) +\n\t    '-' + padStart(getUTCDate(date), 2, 0) +\n\t    'T' + padStart(getUTCHours(date), 2, 0) +\n\t    ':' + padStart(getUTCMinutes(date), 2, 0) +\n\t    ':' + padStart(getUTCSeconds(date), 2, 0) +\n\t    '.' + padStart(milliseconds, 3, 0) +\n\t    'Z';\n\t} : nativeDateToISOString;\n\treturn dateToIsoString;\n}\n\nvar hasRequiredEs_date_toJson;\n\nfunction requireEs_date_toJson () {\n\tif (hasRequiredEs_date_toJson) return es_date_toJson;\n\thasRequiredEs_date_toJson = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar toPrimitive = /*@__PURE__*/ requireToPrimitive$5();\n\tvar toISOString = /*@__PURE__*/ requireDateToIsoString();\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tvar FORCED = fails(function () {\n\t  return new Date(NaN).toJSON() !== null\n\t    || call(Date.prototype.toJSON, { toISOString: function () { return 1; } }) !== 1;\n\t});\n\n\t// `Date.prototype.toJSON` method\n\t// https://tc39.es/ecma262/#sec-date.prototype.tojson\n\t$({ target: 'Date', proto: true, forced: FORCED }, {\n\t  // eslint-disable-next-line no-unused-vars -- required for `.length`\n\t  toJSON: function toJSON(key) {\n\t    var O = toObject(this);\n\t    var pv = toPrimitive(O, 'number');\n\t    return typeof pv == 'number' && !isFinite(pv) ? null :\n\t      (!('toISOString' in O) && classof(O) === 'Date') ? call(toISOString, O) : O.toISOString();\n\t  }\n\t});\n\treturn es_date_toJson;\n}\n\nvar stringify$2;\nvar hasRequiredStringify$2;\n\nfunction requireStringify$2 () {\n\tif (hasRequiredStringify$2) return stringify$2;\n\thasRequiredStringify$2 = 1;\n\trequireEs_date_toJson();\n\trequireEs_json_stringify();\n\tvar path = /*@__PURE__*/ requirePath();\n\tvar apply = /*@__PURE__*/ requireFunctionApply();\n\n\t// eslint-disable-next-line es/no-json -- safe\n\tif (!path.JSON) path.JSON = { stringify: JSON.stringify };\n\n\t// eslint-disable-next-line no-unused-vars -- required for `.length`\n\tstringify$2 = function stringify(it, replacer, space) {\n\t  return apply(path.JSON.stringify, null, arguments);\n\t};\n\treturn stringify$2;\n}\n\nvar stringify$1;\nvar hasRequiredStringify$1;\n\nfunction requireStringify$1 () {\n\tif (hasRequiredStringify$1) return stringify$1;\n\thasRequiredStringify$1 = 1;\n\tvar parent = /*@__PURE__*/ requireStringify$2();\n\n\tstringify$1 = parent;\n\treturn stringify$1;\n}\n\nvar stringify;\nvar hasRequiredStringify;\n\nfunction requireStringify () {\n\tif (hasRequiredStringify) return stringify;\n\thasRequiredStringify = 1;\n\tstringify = /*@__PURE__*/ requireStringify$1();\n\treturn stringify;\n}\n\nvar stringifyExports = requireStringify();\nvar _JSON$stringify = /*@__PURE__*/getDefaultExportFromCjs(stringifyExports);\n\nvar web_timers = {};\n\nvar web_setInterval = {};\n\nvar environment;\nvar hasRequiredEnvironment;\n\nfunction requireEnvironment () {\n\tif (hasRequiredEnvironment) return environment;\n\thasRequiredEnvironment = 1;\n\t/* global Bun, Deno -- detection */\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar userAgent = /*@__PURE__*/ requireEnvironmentUserAgent();\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\n\tvar userAgentStartsWith = function (string) {\n\t  return userAgent.slice(0, string.length) === string;\n\t};\n\n\tenvironment = (function () {\n\t  if (userAgentStartsWith('Bun/')) return 'BUN';\n\t  if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';\n\t  if (userAgentStartsWith('Deno/')) return 'DENO';\n\t  if (userAgentStartsWith('Node.js/')) return 'NODE';\n\t  if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';\n\t  if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';\n\t  if (classof(globalThis.process) === 'process') return 'NODE';\n\t  if (globalThis.window && globalThis.document) return 'BROWSER';\n\t  return 'REST';\n\t})();\n\treturn environment;\n}\n\nvar validateArgumentsLength;\nvar hasRequiredValidateArgumentsLength;\n\nfunction requireValidateArgumentsLength () {\n\tif (hasRequiredValidateArgumentsLength) return validateArgumentsLength;\n\thasRequiredValidateArgumentsLength = 1;\n\tvar $TypeError = TypeError;\n\n\tvalidateArgumentsLength = function (passed, required) {\n\t  if (passed < required) throw new $TypeError('Not enough arguments');\n\t  return passed;\n\t};\n\treturn validateArgumentsLength;\n}\n\nvar schedulersFix;\nvar hasRequiredSchedulersFix;\n\nfunction requireSchedulersFix () {\n\tif (hasRequiredSchedulersFix) return schedulersFix;\n\thasRequiredSchedulersFix = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar apply = /*@__PURE__*/ requireFunctionApply();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar ENVIRONMENT = /*@__PURE__*/ requireEnvironment();\n\tvar USER_AGENT = /*@__PURE__*/ requireEnvironmentUserAgent();\n\tvar arraySlice = /*@__PURE__*/ requireArraySlice();\n\tvar validateArgumentsLength = /*@__PURE__*/ requireValidateArgumentsLength();\n\n\tvar Function = globalThis.Function;\n\t// dirty IE9- and Bun 0.3.0- checks\n\tvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENVIRONMENT === 'BUN' && (function () {\n\t  var version = globalThis.Bun.version.split('.');\n\t  return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');\n\t})();\n\n\t// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n\t// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n\t// https://github.com/oven-sh/bun/issues/1633\n\tschedulersFix = function (scheduler, hasTimeArg) {\n\t  var firstParamIndex = hasTimeArg ? 2 : 1;\n\t  return WRAP ? function (handler, timeout /* , ...arguments */) {\n\t    var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;\n\t    var fn = isCallable(handler) ? handler : Function(handler);\n\t    var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n\t    var callback = boundArgs ? function () {\n\t      apply(fn, this, params);\n\t    } : fn;\n\t    return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n\t  } : scheduler;\n\t};\n\treturn schedulersFix;\n}\n\nvar hasRequiredWeb_setInterval;\n\nfunction requireWeb_setInterval () {\n\tif (hasRequiredWeb_setInterval) return web_setInterval;\n\thasRequiredWeb_setInterval = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar schedulersFix = /*@__PURE__*/ requireSchedulersFix();\n\n\tvar setInterval = schedulersFix(globalThis.setInterval, true);\n\n\t// Bun / IE9- setInterval additional parameters fix\n\t// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n\t$({ global: true, bind: true, forced: globalThis.setInterval !== setInterval }, {\n\t  setInterval: setInterval\n\t});\n\treturn web_setInterval;\n}\n\nvar web_setTimeout = {};\n\nvar hasRequiredWeb_setTimeout;\n\nfunction requireWeb_setTimeout () {\n\tif (hasRequiredWeb_setTimeout) return web_setTimeout;\n\thasRequiredWeb_setTimeout = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar schedulersFix = /*@__PURE__*/ requireSchedulersFix();\n\n\tvar setTimeout = schedulersFix(globalThis.setTimeout, true);\n\n\t// Bun / IE9- setTimeout additional parameters fix\n\t// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n\t$({ global: true, bind: true, forced: globalThis.setTimeout !== setTimeout }, {\n\t  setTimeout: setTimeout\n\t});\n\treturn web_setTimeout;\n}\n\nvar hasRequiredWeb_timers;\n\nfunction requireWeb_timers () {\n\tif (hasRequiredWeb_timers) return web_timers;\n\thasRequiredWeb_timers = 1;\n\t// TODO: Remove this module from `core-js@4` since it's split to modules listed below\n\trequireWeb_setInterval();\n\trequireWeb_setTimeout();\n\treturn web_timers;\n}\n\nvar setTimeout$2;\nvar hasRequiredSetTimeout$1;\n\nfunction requireSetTimeout$1 () {\n\tif (hasRequiredSetTimeout$1) return setTimeout$2;\n\thasRequiredSetTimeout$1 = 1;\n\trequireWeb_timers();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tsetTimeout$2 = path.setTimeout;\n\treturn setTimeout$2;\n}\n\nvar setTimeout$1;\nvar hasRequiredSetTimeout;\n\nfunction requireSetTimeout () {\n\tif (hasRequiredSetTimeout) return setTimeout$1;\n\thasRequiredSetTimeout = 1;\n\tsetTimeout$1 = /*@__PURE__*/ requireSetTimeout$1();\n\treturn setTimeout$1;\n}\n\nvar setTimeoutExports = requireSetTimeout();\nvar _setTimeout = /*@__PURE__*/getDefaultExportFromCjs(setTimeoutExports);\n\nvar es_array_fill = {};\n\nvar arrayFill;\nvar hasRequiredArrayFill;\n\nfunction requireArrayFill () {\n\tif (hasRequiredArrayFill) return arrayFill;\n\thasRequiredArrayFill = 1;\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar toAbsoluteIndex = /*@__PURE__*/ requireToAbsoluteIndex();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\n\t// `Array.prototype.fill` method implementation\n\t// https://tc39.es/ecma262/#sec-array.prototype.fill\n\tarrayFill = function fill(value /* , start = 0, end = @length */) {\n\t  var O = toObject(this);\n\t  var length = lengthOfArrayLike(O);\n\t  var argumentsLength = arguments.length;\n\t  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n\t  var end = argumentsLength > 2 ? arguments[2] : undefined;\n\t  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n\t  while (endPos > index) O[index++] = value;\n\t  return O;\n\t};\n\treturn arrayFill;\n}\n\nvar hasRequiredEs_array_fill;\n\nfunction requireEs_array_fill () {\n\tif (hasRequiredEs_array_fill) return es_array_fill;\n\thasRequiredEs_array_fill = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar fill = /*@__PURE__*/ requireArrayFill();\n\tvar addToUnscopables = /*@__PURE__*/ requireAddToUnscopables();\n\n\t// `Array.prototype.fill` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.fill\n\t$({ target: 'Array', proto: true }, {\n\t  fill: fill\n\t});\n\n\t// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\n\taddToUnscopables('fill');\n\treturn es_array_fill;\n}\n\nvar fill$3;\nvar hasRequiredFill$3;\n\nfunction requireFill$3 () {\n\tif (hasRequiredFill$3) return fill$3;\n\thasRequiredFill$3 = 1;\n\trequireEs_array_fill();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tfill$3 = getBuiltInPrototypeMethod('Array', 'fill');\n\treturn fill$3;\n}\n\nvar fill$2;\nvar hasRequiredFill$2;\n\nfunction requireFill$2 () {\n\tif (hasRequiredFill$2) return fill$2;\n\thasRequiredFill$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireFill$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tfill$2 = function (it) {\n\t  var own = it.fill;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.fill) ? method : own;\n\t};\n\treturn fill$2;\n}\n\nvar fill$1;\nvar hasRequiredFill$1;\n\nfunction requireFill$1 () {\n\tif (hasRequiredFill$1) return fill$1;\n\thasRequiredFill$1 = 1;\n\tvar parent = /*@__PURE__*/ requireFill$2();\n\n\tfill$1 = parent;\n\treturn fill$1;\n}\n\nvar fill;\nvar hasRequiredFill;\n\nfunction requireFill () {\n\tif (hasRequiredFill) return fill;\n\thasRequiredFill = 1;\n\tfill = /*@__PURE__*/ requireFill$1();\n\treturn fill;\n}\n\nvar fillExports = requireFill();\nvar _fillInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(fillExports);\n\nvar componentEmitter = {exports: {}};\n\nvar hasRequiredComponentEmitter;\n\nfunction requireComponentEmitter () {\n\tif (hasRequiredComponentEmitter) return componentEmitter.exports;\n\thasRequiredComponentEmitter = 1;\n\t(function (module) {\n\t\t/**\n\t\t * Expose `Emitter`.\n\t\t */\n\n\t\t{\n\t\t  module.exports = Emitter;\n\t\t}\n\n\t\t/**\n\t\t * Initialize a new `Emitter`.\n\t\t *\n\t\t * @api public\n\t\t */\n\n\t\tfunction Emitter(obj) {\n\t\t  if (obj) return mixin(obj);\n\t\t}\n\t\t/**\n\t\t * Mixin the emitter properties.\n\t\t *\n\t\t * @param {Object} obj\n\t\t * @return {Object}\n\t\t * @api private\n\t\t */\n\n\t\tfunction mixin(obj) {\n\t\t  for (var key in Emitter.prototype) {\n\t\t    obj[key] = Emitter.prototype[key];\n\t\t  }\n\t\t  return obj;\n\t\t}\n\n\t\t/**\n\t\t * Listen on the given `event` with `fn`.\n\t\t *\n\t\t * @param {String} event\n\t\t * @param {Function} fn\n\t\t * @return {Emitter}\n\t\t * @api public\n\t\t */\n\n\t\tEmitter.prototype.on =\n\t\tEmitter.prototype.addEventListener = function(event, fn){\n\t\t  this._callbacks = this._callbacks || {};\n\t\t  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n\t\t    .push(fn);\n\t\t  return this;\n\t\t};\n\n\t\t/**\n\t\t * Adds an `event` listener that will be invoked a single\n\t\t * time then automatically removed.\n\t\t *\n\t\t * @param {String} event\n\t\t * @param {Function} fn\n\t\t * @return {Emitter}\n\t\t * @api public\n\t\t */\n\n\t\tEmitter.prototype.once = function(event, fn){\n\t\t  function on() {\n\t\t    this.off(event, on);\n\t\t    fn.apply(this, arguments);\n\t\t  }\n\n\t\t  on.fn = fn;\n\t\t  this.on(event, on);\n\t\t  return this;\n\t\t};\n\n\t\t/**\n\t\t * Remove the given callback for `event` or all\n\t\t * registered callbacks.\n\t\t *\n\t\t * @param {String} event\n\t\t * @param {Function} fn\n\t\t * @return {Emitter}\n\t\t * @api public\n\t\t */\n\n\t\tEmitter.prototype.off =\n\t\tEmitter.prototype.removeListener =\n\t\tEmitter.prototype.removeAllListeners =\n\t\tEmitter.prototype.removeEventListener = function(event, fn){\n\t\t  this._callbacks = this._callbacks || {};\n\n\t\t  // all\n\t\t  if (0 == arguments.length) {\n\t\t    this._callbacks = {};\n\t\t    return this;\n\t\t  }\n\n\t\t  // specific event\n\t\t  var callbacks = this._callbacks['$' + event];\n\t\t  if (!callbacks) return this;\n\n\t\t  // remove all handlers\n\t\t  if (1 == arguments.length) {\n\t\t    delete this._callbacks['$' + event];\n\t\t    return this;\n\t\t  }\n\n\t\t  // remove specific handler\n\t\t  var cb;\n\t\t  for (var i = 0; i < callbacks.length; i++) {\n\t\t    cb = callbacks[i];\n\t\t    if (cb === fn || cb.fn === fn) {\n\t\t      callbacks.splice(i, 1);\n\t\t      break;\n\t\t    }\n\t\t  }\n\n\t\t  // Remove event specific arrays for event types that no\n\t\t  // one is subscribed for to avoid memory leak.\n\t\t  if (callbacks.length === 0) {\n\t\t    delete this._callbacks['$' + event];\n\t\t  }\n\n\t\t  return this;\n\t\t};\n\n\t\t/**\n\t\t * Emit `event` with the given args.\n\t\t *\n\t\t * @param {String} event\n\t\t * @param {Mixed} ...\n\t\t * @return {Emitter}\n\t\t */\n\n\t\tEmitter.prototype.emit = function(event){\n\t\t  this._callbacks = this._callbacks || {};\n\n\t\t  var args = new Array(arguments.length - 1)\n\t\t    , callbacks = this._callbacks['$' + event];\n\n\t\t  for (var i = 1; i < arguments.length; i++) {\n\t\t    args[i - 1] = arguments[i];\n\t\t  }\n\n\t\t  if (callbacks) {\n\t\t    callbacks = callbacks.slice(0);\n\t\t    for (var i = 0, len = callbacks.length; i < len; ++i) {\n\t\t      callbacks[i].apply(this, args);\n\t\t    }\n\t\t  }\n\n\t\t  return this;\n\t\t};\n\n\t\t/**\n\t\t * Return array of callbacks for `event`.\n\t\t *\n\t\t * @param {String} event\n\t\t * @return {Array}\n\t\t * @api public\n\t\t */\n\n\t\tEmitter.prototype.listeners = function(event){\n\t\t  this._callbacks = this._callbacks || {};\n\t\t  return this._callbacks['$' + event] || [];\n\t\t};\n\n\t\t/**\n\t\t * Check if this emitter has `event` handlers.\n\t\t *\n\t\t * @param {String} event\n\t\t * @return {Boolean}\n\t\t * @api public\n\t\t */\n\n\t\tEmitter.prototype.hasListeners = function(event){\n\t\t  return !! this.listeners(event).length;\n\t\t}; \n\t} (componentEmitter));\n\treturn componentEmitter.exports;\n}\n\nvar componentEmitterExports = requireComponentEmitter();\nvar Emitter = /*@__PURE__*/getDefaultExportFromCjs(componentEmitterExports);\n\n/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _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}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n  assign = function assign(target) {\n    if (target === undefined || target === null) {\n      throw new TypeError('Cannot convert undefined or null to object');\n    }\n\n    var output = Object(target);\n\n    for (var index = 1; index < arguments.length; index++) {\n      var source = arguments[index];\n\n      if (source !== undefined && source !== null) {\n        for (var nextKey in source) {\n          if (source.hasOwnProperty(nextKey)) {\n            output[nextKey] = source[nextKey];\n          }\n        }\n      }\n    }\n\n    return output;\n  };\n} else {\n  assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n  style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n    abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n  var prefix;\n  var prop;\n  var camelProp = property[0].toUpperCase() + property.slice(1);\n  var i = 0;\n\n  while (i < VENDOR_PREFIXES.length) {\n    prefix = VENDOR_PREFIXES[i];\n    prop = prefix ? prefix + camelProp : property;\n\n    if (prop in obj) {\n      return prop;\n    }\n\n    i++;\n  }\n\n  return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n  // window is undefined in node.js\n  win = {};\n} else {\n  win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n  if (!NATIVE_TOUCH_ACTION) {\n    return false;\n  }\n\n  var touchMap = {};\n  var cssSupports = win.CSS && win.CSS.supports;\n  ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n    // If css.supports is not supported but there is native touch-action assume it supports\n    // all values. This is the case for IE 10 and 11.\n    return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n  });\n  return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n  var i;\n\n  if (!obj) {\n    return;\n  }\n\n  if (obj.forEach) {\n    obj.forEach(iterator, context);\n  } else if (obj.length !== undefined) {\n    i = 0;\n\n    while (i < obj.length) {\n      iterator.call(context, obj[i], i, obj);\n      i++;\n    }\n  } else {\n    for (i in obj) {\n      obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n    }\n  }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n  if (typeof val === TYPE_FUNCTION) {\n    return val.apply(args ? args[0] || undefined : undefined, args);\n  }\n\n  return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n  return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n  // none\n  if (inStr(actions, TOUCH_ACTION_NONE)) {\n    return TOUCH_ACTION_NONE;\n  }\n\n  var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n  var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n  // for different directions, e.g. horizontal pan but vertical swipe?)\n  // we need none (as otherwise with pan-x pan-y combined none of these\n  // recognizers will work, since the browser would handle all panning\n\n  if (hasPanX && hasPanY) {\n    return TOUCH_ACTION_NONE;\n  } // pan-x OR pan-y\n\n\n  if (hasPanX || hasPanY) {\n    return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n  } // manipulation\n\n\n  if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n    return TOUCH_ACTION_MANIPULATION;\n  }\n\n  return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n  function TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n  }\n  /**\n   * @private\n   * set the touchAction value on the element or enable the polyfill\n   * @param {String} value\n   */\n\n\n  var _proto = TouchAction.prototype;\n\n  _proto.set = function set(value) {\n    // find out the touch-action by the event handlers\n    if (value === TOUCH_ACTION_COMPUTE) {\n      value = this.compute();\n    }\n\n    if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n      this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n    }\n\n    this.actions = value.toLowerCase().trim();\n  };\n  /**\n   * @private\n   * just re-set the touchAction value\n   */\n\n\n  _proto.update = function update() {\n    this.set(this.manager.options.touchAction);\n  };\n  /**\n   * @private\n   * compute the value for the touchAction property based on the recognizer's settings\n   * @returns {String} value\n   */\n\n\n  _proto.compute = function compute() {\n    var actions = [];\n    each(this.manager.recognizers, function (recognizer) {\n      if (boolOrFn(recognizer.options.enable, [recognizer])) {\n        actions = actions.concat(recognizer.getTouchAction());\n      }\n    });\n    return cleanTouchActions(actions.join(' '));\n  };\n  /**\n   * @private\n   * this method is called on each input cycle and provides the preventing of the browser behavior\n   * @param {Object} input\n   */\n\n\n  _proto.preventDefaults = function preventDefaults(input) {\n    var srcEvent = input.srcEvent;\n    var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n    if (this.manager.session.prevented) {\n      srcEvent.preventDefault();\n      return;\n    }\n\n    var actions = this.actions;\n    var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n    if (hasNone) {\n      // do not prevent defaults if this is a tap gesture\n      var isTapPointer = input.pointers.length === 1;\n      var isTapMovement = input.distance < 2;\n      var isTapTouchTime = input.deltaTime < 250;\n\n      if (isTapPointer && isTapMovement && isTapTouchTime) {\n        return;\n      }\n    }\n\n    if (hasPanX && hasPanY) {\n      // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n      return;\n    }\n\n    if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n      return this.preventSrc(srcEvent);\n    }\n  };\n  /**\n   * @private\n   * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n   * @param {Object} srcEvent\n   */\n\n\n  _proto.preventSrc = function preventSrc(srcEvent) {\n    this.manager.session.prevented = true;\n    srcEvent.preventDefault();\n  };\n\n  return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent$1(node, parent) {\n  while (node) {\n    if (node === parent) {\n      return true;\n    }\n\n    node = node.parentNode;\n  }\n\n  return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n  var pointersLength = pointers.length; // no need to loop when only one touch\n\n  if (pointersLength === 1) {\n    return {\n      x: round(pointers[0].clientX),\n      y: round(pointers[0].clientY)\n    };\n  }\n\n  var x = 0;\n  var y = 0;\n  var i = 0;\n\n  while (i < pointersLength) {\n    x += pointers[i].clientX;\n    y += pointers[i].clientY;\n    i++;\n  }\n\n  return {\n    x: round(x / pointersLength),\n    y: round(y / pointersLength)\n  };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n  // make a simple copy of the pointers because we will get a reference if we don't\n  // we only need clientXY for the calculations\n  var pointers = [];\n  var i = 0;\n\n  while (i < input.pointers.length) {\n    pointers[i] = {\n      clientX: round(input.pointers[i].clientX),\n      clientY: round(input.pointers[i].clientY)\n    };\n    i++;\n  }\n\n  return {\n    timeStamp: now(),\n    pointers: pointers,\n    center: getCenter(pointers),\n    deltaX: input.deltaX,\n    deltaY: input.deltaY\n  };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n\n  var x = p2[props[0]] - p1[props[0]];\n  var y = p2[props[1]] - p1[props[1]];\n  return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n  if (!props) {\n    props = PROPS_XY;\n  }\n\n  var x = p2[props[0]] - p1[props[0]];\n  var y = p2[props[1]] - p1[props[1]];\n  return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n  if (x === y) {\n    return DIRECTION_NONE;\n  }\n\n  if (abs(x) >= abs(y)) {\n    return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n  }\n\n  return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n  var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n  // jscs throwing error on defalut destructured values and without defaults tests fail\n\n  var offset = session.offsetDelta || {};\n  var prevDelta = session.prevDelta || {};\n  var prevInput = session.prevInput || {};\n\n  if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n    prevDelta = session.prevDelta = {\n      x: prevInput.deltaX || 0,\n      y: prevInput.deltaY || 0\n    };\n    offset = session.offsetDelta = {\n      x: center.x,\n      y: center.y\n    };\n  }\n\n  input.deltaX = prevDelta.x + (center.x - offset.x);\n  input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n  return {\n    x: x / deltaTime || 0,\n    y: y / deltaTime || 0\n  };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n  return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n  return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n  var last = session.lastInterval || input;\n  var deltaTime = input.timeStamp - last.timeStamp;\n  var velocity;\n  var velocityX;\n  var velocityY;\n  var direction;\n\n  if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n    var deltaX = input.deltaX - last.deltaX;\n    var deltaY = input.deltaY - last.deltaY;\n    var v = getVelocity(deltaTime, deltaX, deltaY);\n    velocityX = v.x;\n    velocityY = v.y;\n    velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n    direction = getDirection(deltaX, deltaY);\n    session.lastInterval = input;\n  } else {\n    // use latest velocity info if it doesn't overtake a minimum period\n    velocity = last.velocity;\n    velocityX = last.velocityX;\n    velocityY = last.velocityY;\n    direction = last.direction;\n  }\n\n  input.velocity = velocity;\n  input.velocityX = velocityX;\n  input.velocityY = velocityY;\n  input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n  var session = manager.session;\n  var pointers = input.pointers;\n  var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n  if (!session.firstInput) {\n    session.firstInput = simpleCloneInputData(input);\n  } // to compute scale and rotation we need to store the multiple touches\n\n\n  if (pointersLength > 1 && !session.firstMultiple) {\n    session.firstMultiple = simpleCloneInputData(input);\n  } else if (pointersLength === 1) {\n    session.firstMultiple = false;\n  }\n\n  var firstInput = session.firstInput,\n      firstMultiple = session.firstMultiple;\n  var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n  var center = input.center = getCenter(pointers);\n  input.timeStamp = now();\n  input.deltaTime = input.timeStamp - firstInput.timeStamp;\n  input.angle = getAngle(offsetCenter, center);\n  input.distance = getDistance(offsetCenter, center);\n  computeDeltaXY(session, input);\n  input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n  var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n  input.overallVelocityX = overallVelocity.x;\n  input.overallVelocityY = overallVelocity.y;\n  input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n  input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n  input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n  input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n  computeIntervalInputData(session, input); // find the correct target\n\n  var target = manager.element;\n  var srcEvent = input.srcEvent;\n  var srcEventTarget;\n\n  if (srcEvent.composedPath) {\n    srcEventTarget = srcEvent.composedPath()[0];\n  } else if (srcEvent.path) {\n    srcEventTarget = srcEvent.path[0];\n  } else {\n    srcEventTarget = srcEvent.target;\n  }\n\n  if (hasParent$1(srcEventTarget, target)) {\n    target = srcEventTarget;\n  }\n\n  input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n  var pointersLen = input.pointers.length;\n  var changedPointersLen = input.changedPointers.length;\n  var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n  var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n  input.isFirst = !!isFirst;\n  input.isFinal = !!isFinal;\n\n  if (isFirst) {\n    manager.session = {};\n  } // source event is the normalized value of the domEvents\n  // like 'touchstart, mouseup, pointerdown'\n\n\n  input.eventType = eventType; // compute scale, rotation etc\n\n  computeInputData(manager, input); // emit secret event\n\n  manager.emit('hammer.input', input);\n  manager.recognize(input);\n  manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n  return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n  each(splitStr(types), function (type) {\n    target.addEventListener(type, handler, false);\n  });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n  each(splitStr(types), function (type) {\n    target.removeEventListener(type, handler, false);\n  });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n  var doc = element.ownerDocument || element;\n  return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n  function Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n\n    this.domHandler = function (ev) {\n      if (boolOrFn(manager.options.enable, [manager])) {\n        self.handler(ev);\n      }\n    };\n\n    this.init();\n  }\n  /**\n   * @private\n   * should handle the inputEvent data and trigger the callback\n   * @virtual\n   */\n\n\n  var _proto = Input.prototype;\n\n  _proto.handler = function handler() {};\n  /**\n   * @private\n   * bind the events\n   */\n\n\n  _proto.init = function init() {\n    this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n    this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n    this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n  };\n  /**\n   * @private\n   * unbind the events\n   */\n\n\n  _proto.destroy = function destroy() {\n    this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n    this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n    this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n  };\n\n  return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n  if (src.indexOf && !findByKey) {\n    return src.indexOf(find);\n  } else {\n    var i = 0;\n\n    while (i < src.length) {\n      if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n        // do not use === here, test fails\n        return i;\n      }\n\n      i++;\n    }\n\n    return -1;\n  }\n}\n\nvar POINTER_INPUT_MAP = {\n  pointerdown: INPUT_START,\n  pointermove: INPUT_MOVE,\n  pointerup: INPUT_END,\n  pointercancel: INPUT_CANCEL,\n  pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n  2: INPUT_TYPE_TOUCH,\n  3: INPUT_TYPE_PEN,\n  4: INPUT_TYPE_MOUSE,\n  5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n  POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n  POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(PointerEventInput, _Input);\n\n  function PointerEventInput() {\n    var _this;\n\n    var proto = PointerEventInput.prototype;\n    proto.evEl = POINTER_ELEMENT_EVENTS;\n    proto.evWin = POINTER_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.store = _this.manager.session.pointerEvents = [];\n    return _this;\n  }\n  /**\n   * @private\n   * handle mouse events\n   * @param {Object} ev\n   */\n\n\n  var _proto = PointerEventInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var store = this.store;\n    var removePointer = false;\n    var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n    var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n    var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n    var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n    var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n    if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n      if (storeIndex < 0) {\n        store.push(ev);\n        storeIndex = store.length - 1;\n      }\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n      removePointer = true;\n    } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n    if (storeIndex < 0) {\n      return;\n    } // update the event in the store\n\n\n    store[storeIndex] = ev;\n    this.callback(this.manager, eventType, {\n      pointers: store,\n      changedPointers: [ev],\n      pointerType: pointerType,\n      srcEvent: ev\n    });\n\n    if (removePointer) {\n      // remove from the store\n      store.splice(storeIndex, 1);\n    }\n  };\n\n  return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray$1(obj) {\n  return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n  var results = [];\n  var values = [];\n  var i = 0;\n\n  while (i < src.length) {\n    var val = key ? src[i][key] : src[i];\n\n    if (inArray(values, val) < 0) {\n      results.push(src[i]);\n    }\n\n    values[i] = val;\n    i++;\n  }\n\n  if (sort) {\n    if (!key) {\n      results = results.sort();\n    } else {\n      results = results.sort(function (a, b) {\n        return a[key] > b[key];\n      });\n    }\n  }\n\n  return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n  touchstart: INPUT_START,\n  touchmove: INPUT_MOVE,\n  touchend: INPUT_END,\n  touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(TouchInput, _Input);\n\n  function TouchInput() {\n    var _this;\n\n    TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n    return _this;\n  }\n\n  var _proto = TouchInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var type = TOUCH_INPUT_MAP[ev.type];\n    var touches = getTouches.call(this, ev, type);\n\n    if (!touches) {\n      return;\n    }\n\n    this.callback(this.manager, type, {\n      pointers: touches[0],\n      changedPointers: touches[1],\n      pointerType: INPUT_TYPE_TOUCH,\n      srcEvent: ev\n    });\n  };\n\n  return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n  var allTouches = toArray$1(ev.touches);\n  var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n  if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n    targetIds[allTouches[0].identifier] = true;\n    return [allTouches, allTouches];\n  }\n\n  var i;\n  var targetTouches;\n  var changedTouches = toArray$1(ev.changedTouches);\n  var changedTargetTouches = [];\n  var target = this.target; // get target touches from touches\n\n  targetTouches = allTouches.filter(function (touch) {\n    return hasParent$1(touch.target, target);\n  }); // collect touches\n\n  if (type === INPUT_START) {\n    i = 0;\n\n    while (i < targetTouches.length) {\n      targetIds[targetTouches[i].identifier] = true;\n      i++;\n    }\n  } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n  i = 0;\n\n  while (i < changedTouches.length) {\n    if (targetIds[changedTouches[i].identifier]) {\n      changedTargetTouches.push(changedTouches[i]);\n    } // cleanup removed touches\n\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n      delete targetIds[changedTouches[i].identifier];\n    }\n\n    i++;\n  }\n\n  if (!changedTargetTouches.length) {\n    return;\n  }\n\n  return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n  uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n  mousedown: INPUT_START,\n  mousemove: INPUT_MOVE,\n  mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(MouseInput, _Input);\n\n  function MouseInput() {\n    var _this;\n\n    var proto = MouseInput.prototype;\n    proto.evEl = MOUSE_ELEMENT_EVENTS;\n    proto.evWin = MOUSE_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.pressed = false; // mousedown state\n\n    return _this;\n  }\n  /**\n   * @private\n   * handle mouse events\n   * @param {Object} ev\n   */\n\n\n  var _proto = MouseInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n    if (eventType & INPUT_START && ev.button === 0) {\n      this.pressed = true;\n    }\n\n    if (eventType & INPUT_MOVE && ev.which !== 1) {\n      eventType = INPUT_END;\n    } // mouse must be down\n\n\n    if (!this.pressed) {\n      return;\n    }\n\n    if (eventType & INPUT_END) {\n      this.pressed = false;\n    }\n\n    this.callback(this.manager, eventType, {\n      pointers: [ev],\n      changedPointers: [ev],\n      pointerType: INPUT_TYPE_MOUSE,\n      srcEvent: ev\n    });\n  };\n\n  return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n  var _eventData$changedPoi = eventData.changedPointers,\n      touch = _eventData$changedPoi[0];\n\n  if (touch.identifier === this.primaryTouch) {\n    var lastTouch = {\n      x: touch.clientX,\n      y: touch.clientY\n    };\n    var lts = this.lastTouches;\n    this.lastTouches.push(lastTouch);\n\n    var removeLastTouch = function removeLastTouch() {\n      var i = lts.indexOf(lastTouch);\n\n      if (i > -1) {\n        lts.splice(i, 1);\n      }\n    };\n\n    setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n  }\n}\n\nfunction recordTouches(eventType, eventData) {\n  if (eventType & INPUT_START) {\n    this.primaryTouch = eventData.changedPointers[0].identifier;\n    setLastTouch.call(this, eventData);\n  } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n    setLastTouch.call(this, eventData);\n  }\n}\n\nfunction isSyntheticEvent(eventData) {\n  var x = eventData.srcEvent.clientX;\n  var y = eventData.srcEvent.clientY;\n\n  for (var i = 0; i < this.lastTouches.length; i++) {\n    var t = this.lastTouches[i];\n    var dx = Math.abs(x - t.x);\n    var dy = Math.abs(y - t.y);\n\n    if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n  var TouchMouseInput =\n  /*#__PURE__*/\n  function (_Input) {\n    _inheritsLoose(TouchMouseInput, _Input);\n\n    function TouchMouseInput(_manager, callback) {\n      var _this;\n\n      _this = _Input.call(this, _manager, callback) || this;\n\n      _this.handler = function (manager, inputEvent, inputData) {\n        var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n        var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n          return;\n        } // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n\n\n        if (isTouch) {\n          recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n          return;\n        }\n\n        _this.callback(manager, inputEvent, inputData);\n      };\n\n      _this.touch = new TouchInput(_this.manager, _this.handler);\n      _this.mouse = new MouseInput(_this.manager, _this.handler);\n      _this.primaryTouch = null;\n      _this.lastTouches = [];\n      return _this;\n    }\n    /**\n     * @private\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n\n\n    var _proto = TouchMouseInput.prototype;\n\n    /**\n     * @private\n     * remove the event listeners\n     */\n    _proto.destroy = function destroy() {\n      this.touch.destroy();\n      this.mouse.destroy();\n    };\n\n    return TouchMouseInput;\n  }(Input);\n\n  return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n  var Type; // let inputClass = manager.options.inputClass;\n\n  var inputClass = manager.options.inputClass;\n\n  if (inputClass) {\n    Type = inputClass;\n  } else if (SUPPORT_POINTER_EVENTS) {\n    Type = PointerEventInput;\n  } else if (SUPPORT_ONLY_TOUCH) {\n    Type = TouchInput;\n  } else if (!SUPPORT_TOUCH) {\n    Type = MouseInput;\n  } else {\n    Type = TouchMouseInput;\n  }\n\n  return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n  if (Array.isArray(arg)) {\n    each(arg, context[fn], context);\n    return true;\n  }\n\n  return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n  return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n  var manager = recognizer.manager;\n\n  if (manager) {\n    return manager.get(otherRecognizer);\n  }\n\n  return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n  if (state & STATE_CANCELLED) {\n    return 'cancel';\n  } else if (state & STATE_ENDED) {\n    return 'end';\n  } else if (state & STATE_CHANGED) {\n    return 'move';\n  } else if (state & STATE_BEGAN) {\n    return 'start';\n  }\n\n  return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n  function Recognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    this.options = _extends({\n      enable: true\n    }, options);\n    this.id = uniqueId();\n    this.manager = null; // default is enable true\n\n    this.state = STATE_POSSIBLE;\n    this.simultaneous = {};\n    this.requireFail = [];\n  }\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @return {Recognizer}\n   */\n\n\n  var _proto = Recognizer.prototype;\n\n  _proto.set = function set(options) {\n    assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n    this.manager && this.manager.touchAction.update();\n    return this;\n  };\n  /**\n   * @private\n   * recognize simultaneous with an other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n      return this;\n    }\n\n    var simultaneous = this.simultaneous;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n    if (!simultaneous[otherRecognizer.id]) {\n      simultaneous[otherRecognizer.id] = otherRecognizer;\n      otherRecognizer.recognizeWith(this);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    delete this.simultaneous[otherRecognizer.id];\n    return this;\n  };\n  /**\n   * @private\n   * recognizer can only run when an other is failing\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.requireFailure = function requireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n      return this;\n    }\n\n    var requireFail = this.requireFail;\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n    if (inArray(requireFail, otherRecognizer) === -1) {\n      requireFail.push(otherRecognizer);\n      otherRecognizer.requireFailure(this);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * drop the requireFailure link. it does not remove the link on the other recognizer.\n   * @param {Recognizer} otherRecognizer\n   * @returns {Recognizer} this\n   */\n\n\n  _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n    if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n      return this;\n    }\n\n    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n    var index = inArray(this.requireFail, otherRecognizer);\n\n    if (index > -1) {\n      this.requireFail.splice(index, 1);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * has require failures boolean\n   * @returns {boolean}\n   */\n\n\n  _proto.hasRequireFailures = function hasRequireFailures() {\n    return this.requireFail.length > 0;\n  };\n  /**\n   * @private\n   * if the recognizer can recognize simultaneous with an other recognizer\n   * @param {Recognizer} otherRecognizer\n   * @returns {Boolean}\n   */\n\n\n  _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n    return !!this.simultaneous[otherRecognizer.id];\n  };\n  /**\n   * @private\n   * You should use `tryEmit` instead of `emit` directly to check\n   * that all the needed recognizers has failed before emitting.\n   * @param {Object} input\n   */\n\n\n  _proto.emit = function emit(input) {\n    var self = this;\n    var state = this.state;\n\n    function emit(event) {\n      self.manager.emit(event, input);\n    } // 'panstart' and 'panmove'\n\n\n    if (state < STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n\n    emit(self.options.event); // simple 'eventName' events\n\n    if (input.additionalEvent) {\n      // additional event(panleft, panright, pinchin, pinchout...)\n      emit(input.additionalEvent);\n    } // panend and pancancel\n\n\n    if (state >= STATE_ENDED) {\n      emit(self.options.event + stateStr(state));\n    }\n  };\n  /**\n   * @private\n   * Check that all the require failure recognizers has failed,\n   * if true, it emits a gesture event,\n   * otherwise, setup the state to FAILED.\n   * @param {Object} input\n   */\n\n\n  _proto.tryEmit = function tryEmit(input) {\n    if (this.canEmit()) {\n      return this.emit(input);\n    } // it's failing anyway\n\n\n    this.state = STATE_FAILED;\n  };\n  /**\n   * @private\n   * can we emit?\n   * @returns {boolean}\n   */\n\n\n  _proto.canEmit = function canEmit() {\n    var i = 0;\n\n    while (i < this.requireFail.length) {\n      if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n        return false;\n      }\n\n      i++;\n    }\n\n    return true;\n  };\n  /**\n   * @private\n   * update the recognizer\n   * @param {Object} inputData\n   */\n\n\n  _proto.recognize = function recognize(inputData) {\n    // make a new copy of the inputData\n    // so we can change the inputData without messing up the other recognizers\n    var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n    if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n      this.reset();\n      this.state = STATE_FAILED;\n      return;\n    } // reset when we've reached the end\n\n\n    if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n      this.state = STATE_POSSIBLE;\n    }\n\n    this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n    // so trigger an event\n\n    if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n      this.tryEmit(inputDataClone);\n    }\n  };\n  /**\n   * @private\n   * return the state of the recognizer\n   * the actual recognizing happens in this method\n   * @virtual\n   * @param {Object} inputData\n   * @returns {constant} STATE\n   */\n\n  /* jshint ignore:start */\n\n\n  _proto.process = function process(inputData) {};\n  /* jshint ignore:end */\n\n  /**\n   * @private\n   * return the preferred touch-action\n   * @virtual\n   * @returns {Array}\n   */\n\n\n  _proto.getTouchAction = function getTouchAction() {};\n  /**\n   * @private\n   * called when the gesture isn't allowed to recognize\n   * like when another is being recognized or it is disabled\n   * @virtual\n   */\n\n\n  _proto.reset = function reset() {};\n\n  return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(TapRecognizer, _Recognizer);\n\n  function TapRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _Recognizer.call(this, _extends({\n      event: 'tap',\n      pointers: 1,\n      taps: 1,\n      interval: 300,\n      // max time between the multi-tap taps\n      time: 250,\n      // max time of the pointer to be down (like finger on the screen)\n      threshold: 9,\n      // a minimal movement is ok, but keep it low\n      posThreshold: 10\n    }, options)) || this; // previous time and center,\n    // used for tap counting\n\n    _this.pTime = false;\n    _this.pCenter = false;\n    _this._timer = null;\n    _this._input = null;\n    _this.count = 0;\n    return _this;\n  }\n\n  var _proto = TapRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_MANIPULATION];\n  };\n\n  _proto.process = function process(input) {\n    var _this2 = this;\n\n    var options = this.options;\n    var validPointers = input.pointers.length === options.pointers;\n    var validMovement = input.distance < options.threshold;\n    var validTouchTime = input.deltaTime < options.time;\n    this.reset();\n\n    if (input.eventType & INPUT_START && this.count === 0) {\n      return this.failTimeout();\n    } // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n\n\n    if (validMovement && validTouchTime && validPointers) {\n      if (input.eventType !== INPUT_END) {\n        return this.failTimeout();\n      }\n\n      var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n      var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n      this.pTime = input.timeStamp;\n      this.pCenter = input.center;\n\n      if (!validMultiTap || !validInterval) {\n        this.count = 1;\n      } else {\n        this.count += 1;\n      }\n\n      this._input = input; // if tap count matches we have recognized it,\n      // else it has began recognizing...\n\n      var tapCount = this.count % options.taps;\n\n      if (tapCount === 0) {\n        // no failing requirements, immediately trigger the tap event\n        // or wait as long as the multitap interval to trigger\n        if (!this.hasRequireFailures()) {\n          return STATE_RECOGNIZED;\n        } else {\n          this._timer = setTimeout(function () {\n            _this2.state = STATE_RECOGNIZED;\n\n            _this2.tryEmit();\n          }, options.interval);\n          return STATE_BEGAN;\n        }\n      }\n    }\n\n    return STATE_FAILED;\n  };\n\n  _proto.failTimeout = function failTimeout() {\n    var _this3 = this;\n\n    this._timer = setTimeout(function () {\n      _this3.state = STATE_FAILED;\n    }, this.options.interval);\n    return STATE_FAILED;\n  };\n\n  _proto.reset = function reset() {\n    clearTimeout(this._timer);\n  };\n\n  _proto.emit = function emit() {\n    if (this.state === STATE_RECOGNIZED) {\n      this._input.tapCount = this.count;\n      this.manager.emit(this.options.event, this._input);\n    }\n  };\n\n  return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(AttrRecognizer, _Recognizer);\n\n  function AttrRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _Recognizer.call(this, _extends({\n      pointers: 1\n    }, options)) || this;\n  }\n  /**\n   * @private\n   * Used to check if it the recognizer receives valid input, like input.distance > 10.\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {Boolean} recognized\n   */\n\n\n  var _proto = AttrRecognizer.prototype;\n\n  _proto.attrTest = function attrTest(input) {\n    var optionPointers = this.options.pointers;\n    return optionPointers === 0 || input.pointers.length === optionPointers;\n  };\n  /**\n   * @private\n   * Process the input and return the state for the recognizer\n   * @memberof AttrRecognizer\n   * @param {Object} input\n   * @returns {*} State\n   */\n\n\n  _proto.process = function process(input) {\n    var state = this.state;\n    var eventType = input.eventType;\n    var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n    var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n    if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n      return state | STATE_CANCELLED;\n    } else if (isRecognized || isValid) {\n      if (eventType & INPUT_END) {\n        return state | STATE_ENDED;\n      } else if (!(state & STATE_BEGAN)) {\n        return STATE_BEGAN;\n      }\n\n      return state | STATE_CHANGED;\n    }\n\n    return STATE_FAILED;\n  };\n\n  return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n  if (direction === DIRECTION_DOWN) {\n    return 'down';\n  } else if (direction === DIRECTION_UP) {\n    return 'up';\n  } else if (direction === DIRECTION_LEFT) {\n    return 'left';\n  } else if (direction === DIRECTION_RIGHT) {\n    return 'right';\n  }\n\n  return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n  function PanRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _AttrRecognizer.call(this, _extends({\n      event: 'pan',\n      threshold: 10,\n      pointers: 1,\n      direction: DIRECTION_ALL\n    }, options)) || this;\n    _this.pX = null;\n    _this.pY = null;\n    return _this;\n  }\n\n  var _proto = PanRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    var direction = this.options.direction;\n    var actions = [];\n\n    if (direction & DIRECTION_HORIZONTAL) {\n      actions.push(TOUCH_ACTION_PAN_Y);\n    }\n\n    if (direction & DIRECTION_VERTICAL) {\n      actions.push(TOUCH_ACTION_PAN_X);\n    }\n\n    return actions;\n  };\n\n  _proto.directionTest = function directionTest(input) {\n    var options = this.options;\n    var hasMoved = true;\n    var distance = input.distance;\n    var direction = input.direction;\n    var x = input.deltaX;\n    var y = input.deltaY; // lock to axis?\n\n    if (!(direction & options.direction)) {\n      if (options.direction & DIRECTION_HORIZONTAL) {\n        direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n        hasMoved = x !== this.pX;\n        distance = Math.abs(input.deltaX);\n      } else {\n        direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n        hasMoved = y !== this.pY;\n        distance = Math.abs(input.deltaY);\n      }\n    }\n\n    input.direction = direction;\n    return hasMoved && distance > options.threshold && direction & options.direction;\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n    this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n  };\n\n  _proto.emit = function emit(input) {\n    this.pX = input.deltaX;\n    this.pY = input.deltaY;\n    var direction = directionStr(input.direction);\n\n    if (direction) {\n      input.additionalEvent = this.options.event + direction;\n    }\n\n    _AttrRecognizer.prototype.emit.call(this, input);\n  };\n\n  return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n  function SwipeRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'swipe',\n      threshold: 10,\n      velocity: 0.3,\n      direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n      pointers: 1\n    }, options)) || this;\n  }\n\n  var _proto = SwipeRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return PanRecognizer.prototype.getTouchAction.call(this);\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    var direction = this.options.direction;\n    var velocity;\n\n    if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n      velocity = input.overallVelocity;\n    } else if (direction & DIRECTION_HORIZONTAL) {\n      velocity = input.overallVelocityX;\n    } else if (direction & DIRECTION_VERTICAL) {\n      velocity = input.overallVelocityY;\n    }\n\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n  };\n\n  _proto.emit = function emit(input) {\n    var direction = directionStr(input.offsetDirection);\n\n    if (direction) {\n      this.manager.emit(this.options.event + direction, input);\n    }\n\n    this.manager.emit(this.options.event, input);\n  };\n\n  return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n  function PinchRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'pinch',\n      threshold: 0,\n      pointers: 2\n    }, options)) || this;\n  }\n\n  var _proto = PinchRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n  };\n\n  _proto.emit = function emit(input) {\n    if (input.scale !== 1) {\n      var inOut = input.scale < 1 ? 'in' : 'out';\n      input.additionalEvent = this.options.event + inOut;\n    }\n\n    _AttrRecognizer.prototype.emit.call(this, input);\n  };\n\n  return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n  _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n  function RotateRecognizer(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return _AttrRecognizer.call(this, _extends({\n      event: 'rotate',\n      threshold: 0,\n      pointers: 2\n    }, options)) || this;\n  }\n\n  var _proto = RotateRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_NONE];\n  };\n\n  _proto.attrTest = function attrTest(input) {\n    return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n  };\n\n  return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n  _inheritsLoose(PressRecognizer, _Recognizer);\n\n  function PressRecognizer(options) {\n    var _this;\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    _this = _Recognizer.call(this, _extends({\n      event: 'press',\n      pointers: 1,\n      time: 251,\n      // minimal time of the pointer to be pressed\n      threshold: 9\n    }, options)) || this;\n    _this._timer = null;\n    _this._input = null;\n    return _this;\n  }\n\n  var _proto = PressRecognizer.prototype;\n\n  _proto.getTouchAction = function getTouchAction() {\n    return [TOUCH_ACTION_AUTO];\n  };\n\n  _proto.process = function process(input) {\n    var _this2 = this;\n\n    var options = this.options;\n    var validPointers = input.pointers.length === options.pointers;\n    var validMovement = input.distance < options.threshold;\n    var validTime = input.deltaTime > options.time;\n    this._input = input; // we only allow little movement\n    // and we've reached an end event, so a tap is possible\n\n    if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n      this.reset();\n    } else if (input.eventType & INPUT_START) {\n      this.reset();\n      this._timer = setTimeout(function () {\n        _this2.state = STATE_RECOGNIZED;\n\n        _this2.tryEmit();\n      }, options.time);\n    } else if (input.eventType & INPUT_END) {\n      return STATE_RECOGNIZED;\n    }\n\n    return STATE_FAILED;\n  };\n\n  _proto.reset = function reset() {\n    clearTimeout(this._timer);\n  };\n\n  _proto.emit = function emit(input) {\n    if (this.state !== STATE_RECOGNIZED) {\n      return;\n    }\n\n    if (input && input.eventType & INPUT_END) {\n      this.manager.emit(this.options.event + \"up\", input);\n    } else {\n      this._input.timeStamp = now();\n      this.manager.emit(this.options.event, this._input);\n    }\n  };\n\n  return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n  /**\n   * @private\n   * set if DOM events are being triggered.\n   * But this is slower and unused by simple implementations, so disabled by default.\n   * @type {Boolean}\n   * @default false\n   */\n  domEvents: false,\n\n  /**\n   * @private\n   * The value for the touchAction property/fallback.\n   * When set to `compute` it will magically set the correct value based on the added recognizers.\n   * @type {String}\n   * @default compute\n   */\n  touchAction: TOUCH_ACTION_COMPUTE,\n\n  /**\n   * @private\n   * @type {Boolean}\n   * @default true\n   */\n  enable: true,\n\n  /**\n   * @private\n   * EXPERIMENTAL FEATURE -- can be removed/changed\n   * Change the parent input target element.\n   * If Null, then it is being set the to main element.\n   * @type {Null|EventTarget}\n   * @default null\n   */\n  inputTarget: null,\n\n  /**\n   * @private\n   * force an input class\n   * @type {Null|Function}\n   * @default null\n   */\n  inputClass: null,\n\n  /**\n   * @private\n   * Some CSS properties can be used to improve the working of Hammer.\n   * Add them to this method and they will be set when creating a new Manager.\n   * @namespace\n   */\n  cssProps: {\n    /**\n     * @private\n     * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n     * @type {String}\n     * @default 'none'\n     */\n    userSelect: \"none\",\n\n    /**\n     * @private\n     * Disable the Windows Phone grippers when pressing an element.\n     * @type {String}\n     * @default 'none'\n     */\n    touchSelect: \"none\",\n\n    /**\n     * @private\n     * Disables the default callout shown when you touch and hold a touch target.\n     * On iOS, when you touch and hold a touch target such as a link, Safari displays\n     * a callout containing information about the link. This property allows you to disable that callout.\n     * @type {String}\n     * @default 'none'\n     */\n    touchCallout: \"none\",\n\n    /**\n     * @private\n     * Specifies whether zooming is enabled. Used by IE10>\n     * @type {String}\n     * @default 'none'\n     */\n    contentZooming: \"none\",\n\n    /**\n     * @private\n     * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n     * @type {String}\n     * @default 'none'\n     */\n    userDrag: \"none\",\n\n    /**\n     * @private\n     * Overrides the highlight color shown when the user taps a link or a JavaScript\n     * clickable element in iOS. This property obeys the alpha value, if specified.\n     * @type {String}\n     * @default 'rgba(0,0,0,0)'\n     */\n    tapHighlightColor: \"rgba(0,0,0,0)\"\n  }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n  enable: false\n}], [PinchRecognizer, {\n  enable: false\n}, ['rotate']], [SwipeRecognizer, {\n  direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n  direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n  event: 'doubletap',\n  taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n  var element = manager.element;\n\n  if (!element.style) {\n    return;\n  }\n\n  var prop;\n  each(manager.options.cssProps, function (value, name) {\n    prop = prefixed(element.style, name);\n\n    if (add) {\n      manager.oldCssProps[prop] = element.style[prop];\n      element.style[prop] = value;\n    } else {\n      element.style[prop] = manager.oldCssProps[prop] || \"\";\n    }\n  });\n\n  if (!add) {\n    manager.oldCssProps = {};\n  }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n  var gestureEvent = document.createEvent(\"Event\");\n  gestureEvent.initEvent(event, true, true);\n  gestureEvent.gesture = data;\n  data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n  function Manager(element, options) {\n    var _this = this;\n\n    this.options = assign$1({}, defaults, options || {});\n    this.options.inputTarget = this.options.inputTarget || element;\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n    toggleCssProps(this, true);\n    each(this.options.recognizers, function (item) {\n      var recognizer = _this.add(new item[0](item[1]));\n\n      item[2] && recognizer.recognizeWith(item[2]);\n      item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n  }\n  /**\n   * @private\n   * set options\n   * @param {Object} options\n   * @returns {Manager}\n   */\n\n\n  var _proto = Manager.prototype;\n\n  _proto.set = function set(options) {\n    assign$1(this.options, options); // Options that need a little more setup\n\n    if (options.touchAction) {\n      this.touchAction.update();\n    }\n\n    if (options.inputTarget) {\n      // Clean up existing event listeners and reinitialize\n      this.input.destroy();\n      this.input.target = options.inputTarget;\n      this.input.init();\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * stop recognizing for this session.\n   * This session will be discarded, when a new [input]start event is fired.\n   * When forced, the recognizer cycle is stopped immediately.\n   * @param {Boolean} [force]\n   */\n\n\n  _proto.stop = function stop(force) {\n    this.session.stopped = force ? FORCED_STOP : STOP;\n  };\n  /**\n   * @private\n   * run the recognizers!\n   * called by the inputHandler function on every movement of the pointers (touches)\n   * it walks through all the recognizers and tries to detect the gesture that is being made\n   * @param {Object} inputData\n   */\n\n\n  _proto.recognize = function recognize(inputData) {\n    var session = this.session;\n\n    if (session.stopped) {\n      return;\n    } // run the touch-action polyfill\n\n\n    this.touchAction.preventDefaults(inputData);\n    var recognizer;\n    var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n    // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n    // if no recognizer is detecting a thing, it is set to `null`\n\n    var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n    // or when we're in a new session\n\n    if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n      session.curRecognizer = null;\n      curRecognizer = null;\n    }\n\n    var i = 0;\n\n    while (i < recognizers.length) {\n      recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n      // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n      // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n      //      that is being recognized.\n      // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n      //      this can be setup with the `recognizeWith()` method on the recognizer.\n\n      if (session.stopped !== FORCED_STOP && ( // 1\n      !curRecognizer || recognizer === curRecognizer || // 2\n      recognizer.canRecognizeWith(curRecognizer))) {\n        // 3\n        recognizer.recognize(inputData);\n      } else {\n        recognizer.reset();\n      } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n      // current active recognizer. but only if we don't already have an active recognizer\n\n\n      if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n        session.curRecognizer = recognizer;\n        curRecognizer = recognizer;\n      }\n\n      i++;\n    }\n  };\n  /**\n   * @private\n   * get a recognizer by its event name.\n   * @param {Recognizer|String} recognizer\n   * @returns {Recognizer|Null}\n   */\n\n\n  _proto.get = function get(recognizer) {\n    if (recognizer instanceof Recognizer) {\n      return recognizer;\n    }\n\n    var recognizers = this.recognizers;\n\n    for (var i = 0; i < recognizers.length; i++) {\n      if (recognizers[i].options.event === recognizer) {\n        return recognizers[i];\n      }\n    }\n\n    return null;\n  };\n  /**\n   * @private add a recognizer to the manager\n   * existing recognizers with the same event name will be removed\n   * @param {Recognizer} recognizer\n   * @returns {Recognizer|Manager}\n   */\n\n\n  _proto.add = function add(recognizer) {\n    if (invokeArrayArg(recognizer, \"add\", this)) {\n      return this;\n    } // remove existing\n\n\n    var existing = this.get(recognizer.options.event);\n\n    if (existing) {\n      this.remove(existing);\n    }\n\n    this.recognizers.push(recognizer);\n    recognizer.manager = this;\n    this.touchAction.update();\n    return recognizer;\n  };\n  /**\n   * @private\n   * remove a recognizer by name or instance\n   * @param {Recognizer|String} recognizer\n   * @returns {Manager}\n   */\n\n\n  _proto.remove = function remove(recognizer) {\n    if (invokeArrayArg(recognizer, \"remove\", this)) {\n      return this;\n    }\n\n    var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n    if (recognizer) {\n      var recognizers = this.recognizers;\n      var index = inArray(recognizers, targetRecognizer);\n\n      if (index !== -1) {\n        recognizers.splice(index, 1);\n        this.touchAction.update();\n      }\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   * bind event\n   * @param {String} events\n   * @param {Function} handler\n   * @returns {EventEmitter} this\n   */\n\n\n  _proto.on = function on(events, handler) {\n    if (events === undefined || handler === undefined) {\n      return this;\n    }\n\n    var handlers = this.handlers;\n    each(splitStr(events), function (event) {\n      handlers[event] = handlers[event] || [];\n      handlers[event].push(handler);\n    });\n    return this;\n  };\n  /**\n   * @private unbind event, leave emit blank to remove all handlers\n   * @param {String} events\n   * @param {Function} [handler]\n   * @returns {EventEmitter} this\n   */\n\n\n  _proto.off = function off(events, handler) {\n    if (events === undefined) {\n      return this;\n    }\n\n    var handlers = this.handlers;\n    each(splitStr(events), function (event) {\n      if (!handler) {\n        delete handlers[event];\n      } else {\n        handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n      }\n    });\n    return this;\n  };\n  /**\n   * @private emit event to the listeners\n   * @param {String} event\n   * @param {Object} data\n   */\n\n\n  _proto.emit = function emit(event, data) {\n    // we also want to trigger dom events\n    if (this.options.domEvents) {\n      triggerDomEvent(event, data);\n    } // no handlers, so skip it all\n\n\n    var handlers = this.handlers[event] && this.handlers[event].slice();\n\n    if (!handlers || !handlers.length) {\n      return;\n    }\n\n    data.type = event;\n\n    data.preventDefault = function () {\n      data.srcEvent.preventDefault();\n    };\n\n    var i = 0;\n\n    while (i < handlers.length) {\n      handlers[i](data);\n      i++;\n    }\n  };\n  /**\n   * @private\n   * destroy the manager and unbinds all events\n   * it doesn't unbind dom events, that is the user own responsibility\n   */\n\n\n  _proto.destroy = function destroy() {\n    this.element && toggleCssProps(this, false);\n    this.handlers = {};\n    this.session = {};\n    this.input.destroy();\n    this.element = null;\n  };\n\n  return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n  touchstart: INPUT_START,\n  touchmove: INPUT_MOVE,\n  touchend: INPUT_END,\n  touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n  _inheritsLoose(SingleTouchInput, _Input);\n\n  function SingleTouchInput() {\n    var _this;\n\n    var proto = SingleTouchInput.prototype;\n    proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    _this = _Input.apply(this, arguments) || this;\n    _this.started = false;\n    return _this;\n  }\n\n  var _proto = SingleTouchInput.prototype;\n\n  _proto.handler = function handler(ev) {\n    var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n    if (type === INPUT_START) {\n      this.started = true;\n    }\n\n    if (!this.started) {\n      return;\n    }\n\n    var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n    if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n      this.started = false;\n    }\n\n    this.callback(this.manager, type, {\n      pointers: touches[0],\n      changedPointers: touches[1],\n      pointerType: INPUT_TYPE_TOUCH,\n      srcEvent: ev\n    });\n  };\n\n  return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n  var all = toArray$1(ev.touches);\n  var changed = toArray$1(ev.changedTouches);\n\n  if (type & (INPUT_END | INPUT_CANCEL)) {\n    all = uniqueArray(all.concat(changed), 'identifier', true);\n  }\n\n  return [all, changed];\n}\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n  var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n  return function () {\n    var e = new Error('get-stack-trace');\n    var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n    var log = window.console && (window.console.warn || window.console.log);\n\n    if (log) {\n      log.call(window.console, deprecationMessage, stack);\n    }\n\n    return method.apply(this, arguments);\n  };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend$1 = deprecate(function (dest, src, merge) {\n  var keys = Object.keys(src);\n  var i = 0;\n\n  while (i < keys.length) {\n    if (!merge || merge && dest[keys[i]] === undefined) {\n      dest[keys[i]] = src[keys[i]];\n    }\n\n    i++;\n  }\n\n  return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n  return extend$1(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n  var baseP = base.prototype;\n  var childP;\n  childP = child.prototype = Object.create(baseP);\n  childP.constructor = child;\n  childP._super = baseP;\n\n  if (properties) {\n    assign$1(childP, properties);\n  }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n  return function boundFn() {\n    return fn.apply(context, arguments);\n  };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer$3 =\n/*#__PURE__*/\nfunction () {\n  var Hammer =\n  /**\n    * @private\n    * @const {string}\n    */\n  function Hammer(element, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    return new Manager(element, _extends({\n      recognizers: preset.concat()\n    }, options));\n  };\n\n  Hammer.VERSION = \"2.0.17-rc\";\n  Hammer.DIRECTION_ALL = DIRECTION_ALL;\n  Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n  Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n  Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n  Hammer.DIRECTION_UP = DIRECTION_UP;\n  Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n  Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n  Hammer.DIRECTION_NONE = DIRECTION_NONE;\n  Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n  Hammer.INPUT_START = INPUT_START;\n  Hammer.INPUT_MOVE = INPUT_MOVE;\n  Hammer.INPUT_END = INPUT_END;\n  Hammer.INPUT_CANCEL = INPUT_CANCEL;\n  Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n  Hammer.STATE_BEGAN = STATE_BEGAN;\n  Hammer.STATE_CHANGED = STATE_CHANGED;\n  Hammer.STATE_ENDED = STATE_ENDED;\n  Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n  Hammer.STATE_CANCELLED = STATE_CANCELLED;\n  Hammer.STATE_FAILED = STATE_FAILED;\n  Hammer.Manager = Manager;\n  Hammer.Input = Input;\n  Hammer.TouchAction = TouchAction;\n  Hammer.TouchInput = TouchInput;\n  Hammer.MouseInput = MouseInput;\n  Hammer.PointerEventInput = PointerEventInput;\n  Hammer.TouchMouseInput = TouchMouseInput;\n  Hammer.SingleTouchInput = SingleTouchInput;\n  Hammer.Recognizer = Recognizer;\n  Hammer.AttrRecognizer = AttrRecognizer;\n  Hammer.Tap = TapRecognizer;\n  Hammer.Pan = PanRecognizer;\n  Hammer.Swipe = SwipeRecognizer;\n  Hammer.Pinch = PinchRecognizer;\n  Hammer.Rotate = RotateRecognizer;\n  Hammer.Press = PressRecognizer;\n  Hammer.on = addEventListeners;\n  Hammer.off = removeEventListeners;\n  Hammer.each = each;\n  Hammer.merge = merge;\n  Hammer.extend = extend$1;\n  Hammer.bindFn = bindFn;\n  Hammer.assign = assign$1;\n  Hammer.inherit = inherit;\n  Hammer.bindFn = bindFn;\n  Hammer.prefixed = prefixed;\n  Hammer.toArray = toArray$1;\n  Hammer.inArray = inArray;\n  Hammer.uniqueArray = uniqueArray;\n  Hammer.splitStr = splitStr;\n  Hammer.boolOrFn = boolOrFn;\n  Hammer.hasParent = hasParent$1;\n  Hammer.addEventListeners = addEventListeners;\n  Hammer.removeEventListeners = removeEventListeners;\n  Hammer.defaults = assign$1({}, defaults, {\n    preset: preset\n  });\n  return Hammer;\n}();\n\n//  style loader but by script tag, not by the loader.\n\nHammer$3.defaults;\n\n/**\n * Use this symbol to delete properies in deepObjectAssign.\n */\nconst DELETE = _Symbol$1(\"DELETE\");\n/**\n * Pure version of deepObjectAssign, it doesn't modify any of it's arguments.\n * @param base - The base object that fullfils the whole interface T.\n * @param updates - Updates that may change or delete props.\n * @returns A brand new instance with all the supplied objects deeply merged.\n */\nfunction pureDeepObjectAssign(base) {\n  for (var _len = arguments.length, updates = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    updates[_key - 1] = arguments[_key];\n  }\n  return deepObjectAssign({}, base, ...updates);\n}\n/**\n * Deep version of object assign with additional deleting by the DELETE symbol.\n * @param values - Objects to be deeply merged.\n * @returns The first object from values.\n */\nfunction deepObjectAssign() {\n  const merged = deepObjectAssignNonentry(...arguments);\n  stripDelete(merged);\n  return merged;\n}\n/**\n * Deep version of object assign with additional deleting by the DELETE symbol.\n * @remarks\n * This doesn't strip the DELETE symbols so they may end up in the final object.\n * @param values - Objects to be deeply merged.\n * @returns The first object from values.\n */\nfunction deepObjectAssignNonentry() {\n  for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    values[_key2] = arguments[_key2];\n  }\n  if (values.length < 2) {\n    return values[0];\n  } else if (values.length > 2) {\n    return deepObjectAssignNonentry(deepObjectAssign(values[0], values[1]), ..._sliceInstanceProperty(values).call(values, 2));\n  }\n  const a = values[0];\n  const b = values[1];\n  if (a instanceof Date && b instanceof Date) {\n    a.setTime(b.getTime());\n    return a;\n  }\n  for (const prop of _Reflect$ownKeys(b)) {\n    if (!Object.prototype.propertyIsEnumerable.call(b, prop)) ;else if (b[prop] === DELETE) {\n      delete a[prop];\n    } else if (a[prop] !== null && b[prop] !== null && typeof a[prop] === \"object\" && typeof b[prop] === \"object\" && !_Array$isArray(a[prop]) && !_Array$isArray(b[prop])) {\n      a[prop] = deepObjectAssignNonentry(a[prop], b[prop]);\n    } else {\n      a[prop] = clone(b[prop]);\n    }\n  }\n  return a;\n}\n/**\n * Deep clone given object or array. In case of primitive simply return.\n * @param a - Anything.\n * @returns Deep cloned object/array or unchanged a.\n */\nfunction clone(a) {\n  if (_Array$isArray(a)) {\n    return _mapInstanceProperty(a).call(a, value => clone(value));\n  } else if (typeof a === \"object\" && a !== null) {\n    if (a instanceof Date) {\n      return new Date(a.getTime());\n    }\n    return deepObjectAssignNonentry({}, a);\n  } else {\n    return a;\n  }\n}\n/**\n * Strip DELETE from given object.\n * @param a - Object which may contain DELETE but won't after this is executed.\n */\nfunction stripDelete(a) {\n  for (const prop of _Object$keys(a)) {\n    if (a[prop] === DELETE) {\n      delete a[prop];\n    } else if (typeof a[prop] === \"object\" && a[prop] !== null) {\n      stripDelete(a[prop]);\n    }\n  }\n}\n\n/**\n * Seedable, fast and reasonably good (not crypto but more than okay for our\n * needs) random number generator.\n * @remarks\n * Adapted from {@link https://web.archive.org/web/20110429100736/http://baagoe.com:80/en/RandomMusings/javascript}.\n * Original algorithm created by Johannes Baagøe \\<baagoe\\@baagoe.com\\> in 2010.\n */\n/**\n * Create a seeded pseudo random generator based on Alea by Johannes Baagøe.\n * @param seed - All supplied arguments will be used as a seed. In case nothing\n * is supplied the current time will be used to seed the generator.\n * @returns A ready to use seeded generator.\n */\nfunction Alea() {\n  for (var _len3 = arguments.length, seed = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    seed[_key3] = arguments[_key3];\n  }\n  return AleaImplementation(seed.length ? seed : [_Date$now()]);\n}\n/**\n * An implementation of [[Alea]] without user input validation.\n * @param seed - The data that will be used to seed the generator.\n * @returns A ready to use seeded generator.\n */\nfunction AleaImplementation(seed) {\n  let [s0, s1, s2] = mashSeed(seed);\n  let c = 1;\n  const random = () => {\n    const t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\n    s0 = s1;\n    s1 = s2;\n    return s2 = t - (c = t | 0);\n  };\n  random.uint32 = () => random() * 0x100000000; // 2^32\n  random.fract53 = () => random() + (random() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n  random.algorithm = \"Alea\";\n  random.seed = seed;\n  random.version = \"0.9\";\n  return random;\n}\n/**\n * Turn arbitrary data into values [[AleaImplementation]] can use to generate\n * random numbers.\n * @param seed - Arbitrary data that will be used as the seed.\n * @returns Three numbers to use as initial values for [[AleaImplementation]].\n */\nfunction mashSeed() {\n  const mash = Mash();\n  let s0 = mash(\" \");\n  let s1 = mash(\" \");\n  let s2 = mash(\" \");\n  for (let i = 0; i < arguments.length; i++) {\n    s0 -= mash(i < 0 || arguments.length <= i ? undefined : arguments[i]);\n    if (s0 < 0) {\n      s0 += 1;\n    }\n    s1 -= mash(i < 0 || arguments.length <= i ? undefined : arguments[i]);\n    if (s1 < 0) {\n      s1 += 1;\n    }\n    s2 -= mash(i < 0 || arguments.length <= i ? undefined : arguments[i]);\n    if (s2 < 0) {\n      s2 += 1;\n    }\n  }\n  return [s0, s1, s2];\n}\n/**\n * Create a new mash function.\n * @returns A nonpure function that takes arbitrary [[Mashable]] data and turns\n * them into numbers.\n */\nfunction Mash() {\n  let n = 0xefc8249d;\n  return function (data) {\n    const string = data.toString();\n    for (let i = 0; i < string.length; i++) {\n      n += string.charCodeAt(i);\n      let h = 0.02519603282416938 * n;\n      n = h >>> 0;\n      h -= n;\n      h *= n;\n      n = h >>> 0;\n      h -= n;\n      n += h * 0x100000000; // 2^32\n    }\n    return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n  };\n}\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock$1() {\n  const noop = () => {};\n  return {\n    on: noop,\n    off: noop,\n    destroy: noop,\n    emit: noop,\n    get() {\n      return {\n        set: noop\n      };\n    }\n  };\n}\nconst Hammer$1 = typeof window !== \"undefined\" ? window.Hammer || Hammer$3 : function () {\n  // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n  return hammerMock$1();\n};\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n * @param {Element} container\n * @class Activator\n */\nfunction Activator$1(container) {\n  var _context;\n  this._cleanupQueue = [];\n  this.active = false;\n  this._dom = {\n    container,\n    overlay: document.createElement(\"div\")\n  };\n  this._dom.overlay.classList.add(\"vis-overlay\");\n  this._dom.container.appendChild(this._dom.overlay);\n  this._cleanupQueue.push(() => {\n    this._dom.overlay.parentNode.removeChild(this._dom.overlay);\n  });\n  const hammer = Hammer$1(this._dom.overlay);\n  hammer.on(\"tap\", _bindInstanceProperty(_context = this._onTapOverlay).call(_context, this));\n  this._cleanupQueue.push(() => {\n    hammer.destroy();\n    // FIXME: cleaning up hammer instances doesn't work (Timeline not removed\n    // from memory)\n  });\n\n  // block all touch events (except tap)\n  const events = [\"tap\", \"doubletap\", \"press\", \"pinch\", \"pan\", \"panstart\", \"panmove\", \"panend\"];\n  _forEachInstanceProperty(events).call(events, event => {\n    hammer.on(event, event => {\n      event.srcEvent.stopPropagation();\n    });\n  });\n\n  // attach a click event to the window, in order to deactivate when clicking outside the timeline\n  if (document && document.body) {\n    this._onClick = event => {\n      if (!_hasParent$1(event.target, container)) {\n        this.deactivate();\n      }\n    };\n    document.body.addEventListener(\"click\", this._onClick);\n    this._cleanupQueue.push(() => {\n      document.body.removeEventListener(\"click\", this._onClick);\n    });\n  }\n\n  // prepare escape key listener for deactivating when active\n  this._escListener = event => {\n    if (\"key\" in event ? event.key === \"Escape\" : event.keyCode === 27 /* the keyCode is for IE11 */) {\n      this.deactivate();\n    }\n  };\n}\n\n// turn into an event emitter\nEmitter(Activator$1.prototype);\n\n// The currently active activator\nActivator$1.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator$1.prototype.destroy = function () {\n  this.deactivate();\n  for (const callback of _reverseInstanceProperty(_context2 = _spliceInstanceProperty(_context3 = this._cleanupQueue).call(_context3, 0)).call(_context2)) {\n    var _context2, _context3;\n    callback();\n  }\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator$1.prototype.activate = function () {\n  // we allow only one active activator at a time\n  if (Activator$1.current) {\n    Activator$1.current.deactivate();\n  }\n  Activator$1.current = this;\n  this.active = true;\n  this._dom.overlay.style.display = \"none\";\n  this._dom.container.classList.add(\"vis-active\");\n  this.emit(\"change\");\n  this.emit(\"activate\");\n\n  // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n  // keyboard events on a 'change' event\n  document.body.addEventListener(\"keydown\", this._escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator$1.prototype.deactivate = function () {\n  this.active = false;\n  this._dom.overlay.style.display = \"block\";\n  this._dom.container.classList.remove(\"vis-active\");\n  document.body.removeEventListener(\"keydown\", this._escListener);\n  this.emit(\"change\");\n  this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n * @param {Event}  event   The event\n * @private\n */\nActivator$1.prototype._onTapOverlay = function (event) {\n  // activate the container\n  this.activate();\n  event.srcEvent.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n *                    chain of parent nodes.\n * @private\n */\nfunction _hasParent$1(element, parent) {\n  while (element) {\n    if (element === parent) {\n      return true;\n    }\n    element = element.parentNode;\n  }\n  return false;\n}\n\n// utility functions\n// parse ASP.Net Date pattern,\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\n// code from http://momentjs.com/\nconst ASPDateRegex$1 = /^\\/?Date\\((-?\\d+)/i;\n// Color REs\nconst fullHexRE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\nconst shortHexRE = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\nconst rgbRE = /^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i;\nconst rgbaRE = /^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;\n/**\n * Test whether given object is a number.\n * @param value - Input value of unknown type.\n * @returns True if number, false otherwise.\n */\nfunction isNumber(value) {\n  return value instanceof Number || typeof value === \"number\";\n}\n/**\n * Remove everything in the DOM object.\n * @param DOMobject - Node whose child nodes will be recursively deleted.\n */\nfunction recursiveDOMDelete(DOMobject) {\n  if (DOMobject) {\n    while (DOMobject.hasChildNodes() === true) {\n      const child = DOMobject.firstChild;\n      if (child) {\n        recursiveDOMDelete(child);\n        DOMobject.removeChild(child);\n      }\n    }\n  }\n}\n/**\n * Test whether given object is a string.\n * @param value - Input value of unknown type.\n * @returns True if string, false otherwise.\n */\nfunction isString(value) {\n  return value instanceof String || typeof value === \"string\";\n}\n/**\n * Test whether given object is a object (not primitive or null).\n * @param value - Input value of unknown type.\n * @returns True if not null object, false otherwise.\n */\nfunction isObject(value) {\n  return typeof value === \"object\" && value !== null;\n}\n/**\n * Test whether given object is a Date, or a String containing a Date.\n * @param value - Input value of unknown type.\n * @returns True if Date instance or string date representation, false otherwise.\n */\nfunction isDate(value) {\n  if (value instanceof Date) {\n    return true;\n  } else if (isString(value)) {\n    // test whether this string contains a date\n    const match = ASPDateRegex$1.exec(value);\n    if (match) {\n      return true;\n    } else if (!isNaN(Date.parse(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n/**\n * Copy property from b to a if property present in a.\n * If property in b explicitly set to null, delete it if `allowDeletion` set.\n *\n * Internal helper routine, should not be exported. Not added to `exports` for that reason.\n * @param a - Target object.\n * @param b - Source object.\n * @param prop - Name of property to copy from b to a.\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\n */\nfunction copyOrDelete(a, b, prop, allowDeletion) {\n  let doDeletion = false;\n  if (allowDeletion === true) {\n    doDeletion = b[prop] === null && a[prop] !== undefined;\n  }\n  if (doDeletion) {\n    delete a[prop];\n  } else {\n    a[prop] = b[prop]; // Remember, this is a reference copy!\n  }\n}\n/**\n * Fill an object with a possibly partially defined other object.\n *\n * Only copies values for the properties already present in a.\n * That means an object is not created on a property if only the b object has it.\n * @param a - The object that will have it's properties updated.\n * @param b - The object with property updates.\n * @param allowDeletion - If true, delete properties in a that are explicitly set to null in b.\n */\nfunction fillIfDefined(a, b) {\n  let allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  // NOTE: iteration of properties of a\n  // NOTE: prototype properties iterated over as well\n  for (const prop in a) {\n    if (b[prop] !== undefined) {\n      if (b[prop] === null || typeof b[prop] !== \"object\") {\n        // Note: typeof null === 'object'\n        copyOrDelete(a, b, prop, allowDeletion);\n      } else {\n        const aProp = a[prop];\n        const bProp = b[prop];\n        if (isObject(aProp) && isObject(bProp)) {\n          fillIfDefined(aProp, bProp, allowDeletion);\n        }\n      }\n    }\n  }\n}\n/**\n * Copy the values of all of the enumerable own properties from one or more source objects to a\n * target object. Returns the target object.\n * @param target - The target object to copy to.\n * @param source - The source object from which to copy properties.\n * @returns The target object.\n */\nconst extend = _Object$assign;\n/**\n * Extend object a with selected properties of object b or a series of objects.\n * @remarks\n * Only properties with defined values are copied.\n * @param props - Properties to be copied to a.\n * @param a - The target.\n * @param others - The sources.\n * @returns Argument a.\n */\nfunction selectiveExtend(props, a) {\n  if (!_Array$isArray(props)) {\n    throw new Error(\"Array with property names expected as first argument\");\n  }\n  for (var _len4 = arguments.length, others = new Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {\n    others[_key4 - 2] = arguments[_key4];\n  }\n  for (const other of others) {\n    for (let p = 0; p < props.length; p++) {\n      const prop = props[p];\n      if (other && Object.prototype.hasOwnProperty.call(other, prop)) {\n        a[prop] = other[prop];\n      }\n    }\n  }\n  return a;\n}\n/**\n * Extend object a with selected properties of object b.\n * Only properties with defined values are copied.\n * @remarks\n * Previous version of this routine implied that multiple source objects could\n * be used; however, the implementation was **wrong**. Since multiple (\\>1)\n * sources weren't used anywhere in the `vis.js` code, this has been removed\n * @param props - Names of first-level properties to copy over.\n * @param a - Target object.\n * @param b - Source object.\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\n * @returns Argument a.\n */\nfunction selectiveDeepExtend(props, a, b) {\n  let allowDeletion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  // TODO: add support for Arrays to deepExtend\n  if (_Array$isArray(b)) {\n    throw new TypeError(\"Arrays are not supported by deepExtend\");\n  }\n  for (let p = 0; p < props.length; p++) {\n    const prop = props[p];\n    if (Object.prototype.hasOwnProperty.call(b, prop)) {\n      if (b[prop] && b[prop].constructor === Object) {\n        if (a[prop] === undefined) {\n          a[prop] = {};\n        }\n        if (a[prop].constructor === Object) {\n          deepExtend(a[prop], b[prop], false, allowDeletion);\n        } else {\n          copyOrDelete(a, b, prop, allowDeletion);\n        }\n      } else if (_Array$isArray(b[prop])) {\n        throw new TypeError(\"Arrays are not supported by deepExtend\");\n      } else {\n        copyOrDelete(a, b, prop, allowDeletion);\n      }\n    }\n  }\n  return a;\n}\n/**\n * Extend object `a` with properties of object `b`, ignoring properties which\n * are explicitly specified to be excluded.\n * @remarks\n * The properties of `b` are considered for copying. Properties which are\n * themselves objects are are also extended. Only properties with defined\n * values are copied.\n * @param propsToExclude - Names of properties which should *not* be copied.\n * @param a - Object to extend.\n * @param b - Object to take properties from for extension.\n * @param allowDeletion - If true, delete properties in a that are explicitly\n * set to null in b.\n * @returns Argument a.\n */\nfunction selectiveNotDeepExtend(propsToExclude, a, b) {\n  let allowDeletion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  // TODO: add support for Arrays to deepExtend\n  // NOTE: array properties have an else-below; apparently, there is a problem here.\n  if (_Array$isArray(b)) {\n    throw new TypeError(\"Arrays are not supported by deepExtend\");\n  }\n  for (const prop in b) {\n    if (!Object.prototype.hasOwnProperty.call(b, prop)) {\n      continue;\n    } // Handle local properties only\n    if (_includesInstanceProperty(propsToExclude).call(propsToExclude, prop)) {\n      continue;\n    } // In exclusion list, skip\n    if (b[prop] && b[prop].constructor === Object) {\n      if (a[prop] === undefined) {\n        a[prop] = {};\n      }\n      if (a[prop].constructor === Object) {\n        deepExtend(a[prop], b[prop]); // NOTE: allowDeletion not propagated!\n      } else {\n        copyOrDelete(a, b, prop, allowDeletion);\n      }\n    } else if (_Array$isArray(b[prop])) {\n      a[prop] = [];\n      for (let i = 0; i < b[prop].length; i++) {\n        a[prop].push(b[prop][i]);\n      }\n    } else {\n      copyOrDelete(a, b, prop, allowDeletion);\n    }\n  }\n  return a;\n}\n/**\n * Deep extend an object a with the properties of object b.\n * @param a - Target object.\n * @param b - Source object.\n * @param protoExtend - If true, the prototype values will also be extended.\n * (That is the options objects that inherit from others will also get the\n * inherited options).\n * @param allowDeletion - If true, the values of fields that are null will be deleted.\n * @returns Argument a.\n */\nfunction deepExtend(a, b) {\n  let protoExtend = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  let allowDeletion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  for (const prop in b) {\n    if (Object.prototype.hasOwnProperty.call(b, prop) || protoExtend === true) {\n      if (typeof b[prop] === \"object\" && b[prop] !== null && _Object$getPrototypeOf(b[prop]) === Object.prototype) {\n        if (a[prop] === undefined) {\n          a[prop] = deepExtend({}, b[prop], protoExtend); // NOTE: allowDeletion not propagated!\n        } else if (typeof a[prop] === \"object\" && a[prop] !== null && _Object$getPrototypeOf(a[prop]) === Object.prototype) {\n          deepExtend(a[prop], b[prop], protoExtend); // NOTE: allowDeletion not propagated!\n        } else {\n          copyOrDelete(a, b, prop, allowDeletion);\n        }\n      } else if (_Array$isArray(b[prop])) {\n        var _context4;\n        a[prop] = _sliceInstanceProperty(_context4 = b[prop]).call(_context4);\n      } else {\n        copyOrDelete(a, b, prop, allowDeletion);\n      }\n    }\n  }\n  return a;\n}\n/**\n * Test whether all elements in two arrays are equal.\n * @param a - First array.\n * @param b - Second array.\n * @returns True if both arrays have the same length and same elements (1 = '1').\n */\nfunction equalArray(a, b) {\n  if (a.length !== b.length) {\n    return false;\n  }\n  for (let i = 0, len = a.length; i < len; i++) {\n    if (a[i] != b[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n/**\n * Get the type of an object, for example exports.getType([]) returns 'Array'.\n * @param object - Input value of unknown type.\n * @returns Detected type.\n */\nfunction getType(object) {\n  const type = typeof object;\n  if (type === \"object\") {\n    if (object === null) {\n      return \"null\";\n    }\n    if (object instanceof Boolean) {\n      return \"Boolean\";\n    }\n    if (object instanceof Number) {\n      return \"Number\";\n    }\n    if (object instanceof String) {\n      return \"String\";\n    }\n    if (_Array$isArray(object)) {\n      return \"Array\";\n    }\n    if (object instanceof Date) {\n      return \"Date\";\n    }\n    return \"Object\";\n  }\n  if (type === \"number\") {\n    return \"Number\";\n  }\n  if (type === \"boolean\") {\n    return \"Boolean\";\n  }\n  if (type === \"string\") {\n    return \"String\";\n  }\n  if (type === undefined) {\n    return \"undefined\";\n  }\n  return type;\n}\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n * @param arr - First part.\n * @param newValue - The value to be aadded into the array.\n * @returns A new array with all items from arr and newValue (which is last).\n */\nfunction copyAndExtendArray(arr, newValue) {\n  return [...arr, newValue];\n}\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n * @param arr - The array to be copied.\n * @returns Shallow copy of arr.\n */\nfunction copyArray(arr) {\n  return _sliceInstanceProperty(arr).call(arr);\n}\n/**\n * Retrieve the absolute left value of a DOM element.\n * @param elem - A dom element, for example a div.\n * @returns The absolute left position of this element in the browser page.\n */\nfunction getAbsoluteLeft(elem) {\n  return elem.getBoundingClientRect().left;\n}\n/**\n * Retrieve the absolute right value of a DOM element.\n * @param elem - A dom element, for example a div.\n * @returns The absolute right position of this element in the browser page.\n */\nfunction getAbsoluteRight(elem) {\n  return elem.getBoundingClientRect().right;\n}\n/**\n * Retrieve the absolute top value of a DOM element.\n * @param elem - A dom element, for example a div.\n * @returns The absolute top position of this element in the browser page.\n */\nfunction getAbsoluteTop(elem) {\n  return elem.getBoundingClientRect().top;\n}\n/**\n * Add a className to the given elements style.\n * @param elem - The element to which the classes will be added.\n * @param classNames - Space separated list of classes.\n */\nfunction addClassName(elem, classNames) {\n  let classes = elem.className.split(\" \");\n  const newClasses = classNames.split(\" \");\n  classes = _concatInstanceProperty(classes).call(classes, _filterInstanceProperty(newClasses).call(newClasses, function (className) {\n    return !_includesInstanceProperty(classes).call(classes, className);\n  }));\n  elem.className = classes.join(\" \");\n}\n/**\n * Remove a className from the given elements style.\n * @param elem - The element from which the classes will be removed.\n * @param classNames - Space separated list of classes.\n */\nfunction removeClassName(elem, classNames) {\n  let classes = elem.className.split(\" \");\n  const oldClasses = classNames.split(\" \");\n  classes = _filterInstanceProperty(classes).call(classes, function (className) {\n    return !_includesInstanceProperty(oldClasses).call(oldClasses, className);\n  });\n  elem.className = classes.join(\" \");\n}\n/**\n * For each method for both arrays and objects.\n * In case of an array, the built-in Array.forEach() is applied (**No, it's not!**).\n * In case of an Object, the method loops over all properties of the object.\n * @param object - An Object or Array to be iterated over.\n * @param callback - Array.forEach-like callback.\n */\nfunction forEach(object, callback) {\n  if (_Array$isArray(object)) {\n    // array\n    const len = object.length;\n    for (let i = 0; i < len; i++) {\n      callback(object[i], i, object);\n    }\n  } else {\n    // object\n    for (const key in object) {\n      if (Object.prototype.hasOwnProperty.call(object, key)) {\n        callback(object[key], key, object);\n      }\n    }\n  }\n}\n/**\n * Convert an object into an array: all objects properties are put into the array. The resulting array is unordered.\n * @param o - Object that contains the properties and methods.\n * @returns An array of unordered values.\n */\nconst toArray = _Object$values;\n/**\n * Update a property in an object.\n * @param object - The object whose property will be updated.\n * @param key - Name of the property to be updated.\n * @param value - The new value to be assigned.\n * @returns Whether the value was updated (true) or already strictly the same in the original object (false).\n */\nfunction updateProperty(object, key, value) {\n  if (object[key] !== value) {\n    object[key] = value;\n    return true;\n  } else {\n    return false;\n  }\n}\n/**\n * Throttle the given function to be only executed once per animation frame.\n * @param fn - The original function.\n * @returns The throttled function.\n */\nfunction throttle(fn) {\n  let scheduled = false;\n  return () => {\n    if (!scheduled) {\n      scheduled = true;\n      requestAnimationFrame(() => {\n        scheduled = false;\n        fn();\n      });\n    }\n  };\n}\n/**\n * Cancels the event's default action if it is cancelable, without stopping further propagation of the event.\n * @param event - The event whose default action should be prevented.\n */\nfunction preventDefault(event) {\n  if (!event) {\n    event = window.event;\n  }\n  if (!event) ;else if (event.preventDefault) {\n    event.preventDefault(); // non-IE browsers\n  } else {\n    // @TODO: IE types? Does anyone care?\n    event.returnValue = false; // IE browsers\n  }\n}\n/**\n * Get HTML element which is the target of the event.\n * @param event - The event.\n * @returns The element or null if not obtainable.\n */\nfunction getTarget() {\n  let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n  // code from http://www.quirksmode.org/js/events_properties.html\n  // @TODO: EventTarget can be almost anything, is it okay to return only Elements?\n  let target = null;\n  if (!event) ;else if (event.target) {\n    target = event.target;\n  } else if (event.srcElement) {\n    target = event.srcElement;\n  }\n  if (!(target instanceof Element)) {\n    return null;\n  }\n  if (target.nodeType != null && target.nodeType == 3) {\n    // defeat Safari bug\n    target = target.parentNode;\n    if (!(target instanceof Element)) {\n      return null;\n    }\n  }\n  return target;\n}\n/**\n * Check if given element contains given parent somewhere in the DOM tree.\n * @param element - The element to be tested.\n * @param parent - The ancestor (not necessarily parent) of the element.\n * @returns True if parent is an ancestor of the element, false otherwise.\n */\nfunction hasParent(element, parent) {\n  let elem = element;\n  while (elem) {\n    if (elem === parent) {\n      return true;\n    } else if (elem.parentNode) {\n      elem = elem.parentNode;\n    } else {\n      return false;\n    }\n  }\n  return false;\n}\nconst option = {\n  /**\n   * Convert a value into a boolean.\n   * @param value - Value to be converted intoboolean, a function will be executed as `(() => unknown)`.\n   * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n   * @returns Corresponding boolean value, if none then the default value, if none then null.\n   */\n  asBoolean(value, defaultValue) {\n    if (typeof value == \"function\") {\n      value = value();\n    }\n    if (value != null) {\n      return value != false;\n    }\n    return defaultValue || null;\n  },\n  /**\n   * Convert a value into a number.\n   * @param value - Value to be converted intonumber, a function will be executed as `(() => unknown)`.\n   * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n   * @returns Corresponding **boxed** number value, if none then the default value, if none then null.\n   */\n  asNumber(value, defaultValue) {\n    if (typeof value == \"function\") {\n      value = value();\n    }\n    if (value != null) {\n      return Number(value) || defaultValue || null;\n    }\n    return defaultValue || null;\n  },\n  /**\n   * Convert a value into a string.\n   * @param value - Value to be converted intostring, a function will be executed as `(() => unknown)`.\n   * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n   * @returns Corresponding **boxed** string value, if none then the default value, if none then null.\n   */\n  asString(value, defaultValue) {\n    if (typeof value == \"function\") {\n      value = value();\n    }\n    if (value != null) {\n      return String(value);\n    }\n    return defaultValue || null;\n  },\n  /**\n   * Convert a value into a size.\n   * @param value - Value to be converted intosize, a function will be executed as `(() => unknown)`.\n   * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n   * @returns Corresponding string value (number + 'px'), if none then the default value, if none then null.\n   */\n  asSize(value, defaultValue) {\n    if (typeof value == \"function\") {\n      value = value();\n    }\n    if (isString(value)) {\n      return value;\n    } else if (isNumber(value)) {\n      return value + \"px\";\n    } else {\n      return defaultValue || null;\n    }\n  },\n  /**\n   * Convert a value into a DOM Element.\n   * @param value - Value to be converted into DOM Element, a function will be executed as `(() => unknown)`.\n   * @param defaultValue - If the value or the return value of the function == null then this will be returned.\n   * @returns The DOM Element, if none then the default value, if none then null.\n   */\n  asElement(value, defaultValue) {\n    if (typeof value == \"function\") {\n      value = value();\n    }\n    return value || defaultValue || null;\n  }\n};\n/**\n * Convert hex color string into RGB color object.\n * @remarks\n * {@link http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb}\n * @param hex - Hex color string (3 or 6 digits, with or without #).\n * @returns RGB color object.\n */\nfunction hexToRGB(hex) {\n  let result;\n  switch (hex.length) {\n    case 3:\n    case 4:\n      result = shortHexRE.exec(hex);\n      return result ? {\n        r: _parseInt(result[1] + result[1], 16),\n        g: _parseInt(result[2] + result[2], 16),\n        b: _parseInt(result[3] + result[3], 16)\n      } : null;\n    case 6:\n    case 7:\n      result = fullHexRE.exec(hex);\n      return result ? {\n        r: _parseInt(result[1], 16),\n        g: _parseInt(result[2], 16),\n        b: _parseInt(result[3], 16)\n      } : null;\n    default:\n      return null;\n  }\n}\n/**\n * This function takes string color in hex or RGB format and adds the opacity, RGBA is passed through unchanged.\n * @param color - The color string (hex, RGB, RGBA).\n * @param opacity - The new opacity.\n * @returns RGBA string, for example 'rgba(255, 0, 127, 0.3)'.\n */\nfunction overrideOpacity(color, opacity) {\n  if (_includesInstanceProperty(color).call(color, \"rgba\")) {\n    return color;\n  } else if (_includesInstanceProperty(color).call(color, \"rgb\")) {\n    const rgb = color.substr(_indexOfInstanceProperty(color).call(color, \"(\") + 1).replace(\")\", \"\").split(\",\");\n    return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + opacity + \")\";\n  } else {\n    const rgb = hexToRGB(color);\n    if (rgb == null) {\n      return color;\n    } else {\n      return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + opacity + \")\";\n    }\n  }\n}\n/**\n * Convert RGB \\<0, 255\\> into hex color string.\n * @param red - Red channel.\n * @param green - Green channel.\n * @param blue - Blue channel.\n * @returns Hex color string (for example: '#0acdc0').\n */\nfunction RGBToHex(red, green, blue) {\n  var _context5;\n  return \"#\" + _sliceInstanceProperty(_context5 = ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16)).call(_context5, 1);\n}\n/**\n * Parse a color property into an object with border, background, and highlight colors.\n * @param inputColor - Shorthand color string or input color object.\n * @param defaultColor - Full color object to fill in missing values in inputColor.\n * @returns Color object.\n */\nfunction parseColor(inputColor, defaultColor) {\n  if (isString(inputColor)) {\n    let colorStr = inputColor;\n    if (isValidRGB(colorStr)) {\n      var _context6;\n      const rgb = _mapInstanceProperty(_context6 = colorStr.substr(4).substr(0, colorStr.length - 5).split(\",\")).call(_context6, function (value) {\n        return _parseInt(value);\n      });\n      colorStr = RGBToHex(rgb[0], rgb[1], rgb[2]);\n    }\n    if (isValidHex(colorStr) === true) {\n      const hsv = hexToHSV(colorStr);\n      const lighterColorHSV = {\n        h: hsv.h,\n        s: hsv.s * 0.8,\n        v: Math.min(1, hsv.v * 1.02)\n      };\n      const darkerColorHSV = {\n        h: hsv.h,\n        s: Math.min(1, hsv.s * 1.25),\n        v: hsv.v * 0.8\n      };\n      const darkerColorHex = HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);\n      const lighterColorHex = HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);\n      return {\n        background: colorStr,\n        border: darkerColorHex,\n        highlight: {\n          background: lighterColorHex,\n          border: darkerColorHex\n        },\n        hover: {\n          background: lighterColorHex,\n          border: darkerColorHex\n        }\n      };\n    } else {\n      return {\n        background: colorStr,\n        border: colorStr,\n        highlight: {\n          background: colorStr,\n          border: colorStr\n        },\n        hover: {\n          background: colorStr,\n          border: colorStr\n        }\n      };\n    }\n  } else {\n    if (defaultColor) {\n      const color = {\n        background: inputColor.background || defaultColor.background,\n        border: inputColor.border || defaultColor.border,\n        highlight: isString(inputColor.highlight) ? {\n          border: inputColor.highlight,\n          background: inputColor.highlight\n        } : {\n          background: inputColor.highlight && inputColor.highlight.background || defaultColor.highlight.background,\n          border: inputColor.highlight && inputColor.highlight.border || defaultColor.highlight.border\n        },\n        hover: isString(inputColor.hover) ? {\n          border: inputColor.hover,\n          background: inputColor.hover\n        } : {\n          border: inputColor.hover && inputColor.hover.border || defaultColor.hover.border,\n          background: inputColor.hover && inputColor.hover.background || defaultColor.hover.background\n        }\n      };\n      return color;\n    } else {\n      const color = {\n        background: inputColor.background || undefined,\n        border: inputColor.border || undefined,\n        highlight: isString(inputColor.highlight) ? {\n          border: inputColor.highlight,\n          background: inputColor.highlight\n        } : {\n          background: inputColor.highlight && inputColor.highlight.background || undefined,\n          border: inputColor.highlight && inputColor.highlight.border || undefined\n        },\n        hover: isString(inputColor.hover) ? {\n          border: inputColor.hover,\n          background: inputColor.hover\n        } : {\n          border: inputColor.hover && inputColor.hover.border || undefined,\n          background: inputColor.hover && inputColor.hover.background || undefined\n        }\n      };\n      return color;\n    }\n  }\n}\n/**\n * Convert RGB \\<0, 255\\> into HSV object.\n * @remarks\n * {@link http://www.javascripter.net/faq/rgb2hsv.htm}\n * @param red - Red channel.\n * @param green - Green channel.\n * @param blue - Blue channel.\n * @returns HSV color object.\n */\nfunction RGBToHSV(red, green, blue) {\n  red = red / 255;\n  green = green / 255;\n  blue = blue / 255;\n  const minRGB = Math.min(red, Math.min(green, blue));\n  const maxRGB = Math.max(red, Math.max(green, blue));\n  // Black-gray-white\n  if (minRGB === maxRGB) {\n    return {\n      h: 0,\n      s: 0,\n      v: minRGB\n    };\n  }\n  // Colors other than black-gray-white:\n  const d = red === minRGB ? green - blue : blue === minRGB ? red - green : blue - red;\n  const h = red === minRGB ? 3 : blue === minRGB ? 1 : 5;\n  const hue = 60 * (h - d / (maxRGB - minRGB)) / 360;\n  const saturation = (maxRGB - minRGB) / maxRGB;\n  const value = maxRGB;\n  return {\n    h: hue,\n    s: saturation,\n    v: value\n  };\n}\n/**\n * Split a string with css styles into an object with key/values.\n * @param cssText - CSS source code to split into key/value object.\n * @returns Key/value object corresponding to {@link cssText}.\n */\nfunction splitCSSText(cssText) {\n  const tmpEllement = document.createElement(\"div\");\n  const styles = {};\n  tmpEllement.style.cssText = cssText;\n  for (let i = 0; i < tmpEllement.style.length; ++i) {\n    styles[tmpEllement.style[i]] = tmpEllement.style.getPropertyValue(tmpEllement.style[i]);\n  }\n  return styles;\n}\n/**\n * Append a string with css styles to an element.\n * @param element - The element that will receive new styles.\n * @param cssText - The styles to be appended.\n */\nfunction addCssText(element, cssText) {\n  const cssStyle = splitCSSText(cssText);\n  for (const [key, value] of _Object$entries(cssStyle)) {\n    element.style.setProperty(key, value);\n  }\n}\n/**\n * Remove a string with css styles from an element.\n * @param element - The element from which styles should be removed.\n * @param cssText - The styles to be removed.\n */\nfunction removeCssText(element, cssText) {\n  const cssStyle = splitCSSText(cssText);\n  for (const key of _Object$keys(cssStyle)) {\n    element.style.removeProperty(key);\n  }\n}\n/**\n * Convert HSV \\<0, 1\\> into RGB color object.\n * @remarks\n * {@link https://gist.github.com/mjijackson/5311256}\n * @param h - Hue.\n * @param s - Saturation.\n * @param v - Value.\n * @returns RGB color object.\n */\nfunction HSVToRGB(h, s, v) {\n  let r;\n  let g;\n  let b;\n  const i = Math.floor(h * 6);\n  const f = h * 6 - i;\n  const p = v * (1 - s);\n  const q = v * (1 - f * s);\n  const t = v * (1 - (1 - f) * s);\n  switch (i % 6) {\n    case 0:\n      r = v, g = t, b = p;\n      break;\n    case 1:\n      r = q, g = v, b = p;\n      break;\n    case 2:\n      r = p, g = v, b = t;\n      break;\n    case 3:\n      r = p, g = q, b = v;\n      break;\n    case 4:\n      r = t, g = p, b = v;\n      break;\n    case 5:\n      r = v, g = p, b = q;\n      break;\n  }\n  return {\n    r: Math.floor(r * 255),\n    g: Math.floor(g * 255),\n    b: Math.floor(b * 255)\n  };\n}\n/**\n * Convert HSV \\<0, 1\\> into hex color string.\n * @param h - Hue.\n * @param s - Saturation.\n * @param v - Value.\n * @returns Hex color string.\n */\nfunction HSVToHex(h, s, v) {\n  const rgb = HSVToRGB(h, s, v);\n  return RGBToHex(rgb.r, rgb.g, rgb.b);\n}\n/**\n * Convert hex color string into HSV \\<0, 1\\>.\n * @param hex - Hex color string.\n * @returns HSV color object.\n */\nfunction hexToHSV(hex) {\n  const rgb = hexToRGB(hex);\n  if (!rgb) {\n    throw new TypeError(\"'\".concat(hex, \"' is not a valid color.\"));\n  }\n  return RGBToHSV(rgb.r, rgb.g, rgb.b);\n}\n/**\n * Validate hex color string.\n * @param hex - Unknown string that may contain a color.\n * @returns True if the string is valid, false otherwise.\n */\nfunction isValidHex(hex) {\n  const isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);\n  return isOk;\n}\n/**\n * Validate RGB color string.\n * @param rgb - Unknown string that may contain a color.\n * @returns True if the string is valid, false otherwise.\n */\nfunction isValidRGB(rgb) {\n  return rgbRE.test(rgb);\n}\n/**\n * Validate RGBA color string.\n * @param rgba - Unknown string that may contain a color.\n * @returns True if the string is valid, false otherwise.\n */\nfunction isValidRGBA(rgba) {\n  return rgbaRE.test(rgba);\n}\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject.\n * This is used for default options.\n * @param fields - Names of properties to be bridged.\n * @param referenceObject - The original object.\n * @returns A new object inheriting from the referenceObject.\n */\nfunction selectiveBridgeObject(fields, referenceObject) {\n  if (referenceObject !== null && typeof referenceObject === \"object\") {\n    // !!! typeof null === 'object'\n    const objectTo = _Object$create(referenceObject);\n    for (let i = 0; i < fields.length; i++) {\n      if (Object.prototype.hasOwnProperty.call(referenceObject, fields[i])) {\n        if (typeof referenceObject[fields[i]] == \"object\") {\n          objectTo[fields[i]] = bridgeObject(referenceObject[fields[i]]);\n        }\n      }\n    }\n    return objectTo;\n  } else {\n    return null;\n  }\n}\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject.\n * This is used for default options.\n * @param referenceObject - The original object.\n * @returns The Element if the referenceObject is an Element, or a new object inheriting from the referenceObject.\n */\nfunction bridgeObject(referenceObject) {\n  if (referenceObject === null || typeof referenceObject !== \"object\") {\n    return null;\n  }\n  if (referenceObject instanceof Element) {\n    // Avoid bridging DOM objects\n    return referenceObject;\n  }\n  const objectTo = _Object$create(referenceObject);\n  for (const i in referenceObject) {\n    if (Object.prototype.hasOwnProperty.call(referenceObject, i)) {\n      if (typeof referenceObject[i] == \"object\") {\n        objectTo[i] = bridgeObject(referenceObject[i]);\n      }\n    }\n  }\n  return objectTo;\n}\n/**\n * This method provides a stable sort implementation, very fast for presorted data.\n * @param a - The array to be sorted (in-place).\n * @param compare - An order comparator.\n * @returns The argument a.\n */\nfunction insertSort(a, compare) {\n  for (let i = 0; i < a.length; i++) {\n    const k = a[i];\n    let j;\n    for (j = i; j > 0 && compare(k, a[j - 1]) < 0; j--) {\n      a[j] = a[j - 1];\n    }\n    a[j] = k;\n  }\n  return a;\n}\n/**\n * This is used to set the options of subobjects in the options object.\n *\n * A requirement of these subobjects is that they have an 'enabled' element\n * which is optional for the user but mandatory for the program.\n *\n * The added value here of the merge is that option 'enabled' is set as required.\n * @param mergeTarget - Either this.options or the options used for the groups.\n * @param options - Options.\n * @param option - Option key in the options argument.\n * @param globalOptions - Global options, passed in to determine value of option 'enabled'.\n */\nfunction mergeOptions(mergeTarget, options, option) {\n  let globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n  // Local helpers\n  const isPresent = function (obj) {\n    return obj !== null && obj !== undefined;\n  };\n  const isObject = function (obj) {\n    return obj !== null && typeof obj === \"object\";\n  };\n  // https://stackoverflow.com/a/34491287/1223531\n  const isEmpty = function (obj) {\n    for (const x in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, x)) {\n        return false;\n      }\n    }\n    return true;\n  };\n  // Guards\n  if (!isObject(mergeTarget)) {\n    throw new Error(\"Parameter mergeTarget must be an object\");\n  }\n  if (!isObject(options)) {\n    throw new Error(\"Parameter options must be an object\");\n  }\n  if (!isPresent(option)) {\n    throw new Error(\"Parameter option must have a value\");\n  }\n  if (!isObject(globalOptions)) {\n    throw new Error(\"Parameter globalOptions must be an object\");\n  }\n  //\n  // Actual merge routine, separated from main logic\n  // Only a single level of options is merged. Deeper levels are ref'd. This may actually be an issue.\n  //\n  const doMerge = function (target, options, option) {\n    if (!isObject(target[option])) {\n      target[option] = {};\n    }\n    const src = options[option];\n    const dst = target[option];\n    for (const prop in src) {\n      if (Object.prototype.hasOwnProperty.call(src, prop)) {\n        dst[prop] = src[prop];\n      }\n    }\n  };\n  // Local initialization\n  const srcOption = options[option];\n  const globalPassed = isObject(globalOptions) && !isEmpty(globalOptions);\n  const globalOption = globalPassed ? globalOptions[option] : undefined;\n  const globalEnabled = globalOption ? globalOption.enabled : undefined;\n  /////////////////////////////////////////\n  // Main routine\n  /////////////////////////////////////////\n  if (srcOption === undefined) {\n    return; // Nothing to do\n  }\n  if (typeof srcOption === \"boolean\") {\n    if (!isObject(mergeTarget[option])) {\n      mergeTarget[option] = {};\n    }\n    mergeTarget[option].enabled = srcOption;\n    return;\n  }\n  if (srcOption === null && !isObject(mergeTarget[option])) {\n    // If possible, explicit copy from globals\n    if (isPresent(globalOption)) {\n      mergeTarget[option] = _Object$create(globalOption);\n    } else {\n      return; // Nothing to do\n    }\n  }\n  if (!isObject(srcOption)) {\n    return;\n  }\n  //\n  // Ensure that 'enabled' is properly set. It is required internally\n  // Note that the value from options will always overwrite the existing value\n  //\n  let enabled = true; // default value\n  if (srcOption.enabled !== undefined) {\n    enabled = srcOption.enabled;\n  } else {\n    // Take from globals, if present\n    if (globalEnabled !== undefined) {\n      enabled = globalOption.enabled;\n    }\n  }\n  doMerge(mergeTarget, options, option);\n  mergeTarget[option].enabled = enabled;\n}\n/**\n * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses\n * this function will then iterate in both directions over this sorted list to find all visible items.\n * @param orderedItems - Items ordered by start.\n * @param comparator - -1 is lower, 0 is equal, 1 is higher.\n * @param field - Property name on an item (That is item[field]).\n * @param field2 - Second property name on an item (That is item[field][field2]).\n * @returns Index of the found item or -1 if nothing was found.\n */\nfunction binarySearchCustom(orderedItems, comparator, field, field2) {\n  const maxIterations = 10000;\n  let iteration = 0;\n  let low = 0;\n  let high = orderedItems.length - 1;\n  while (low <= high && iteration < maxIterations) {\n    const middle = Math.floor((low + high) / 2);\n    const item = orderedItems[middle];\n    const value = field2 === undefined ? item[field] : item[field][field2];\n    const searchResult = comparator(value);\n    if (searchResult == 0) {\n      // jihaa, found a visible item!\n      return middle;\n    } else if (searchResult == -1) {\n      // it is too small --> increase low\n      low = middle + 1;\n    } else {\n      // it is too big --> decrease high\n      high = middle - 1;\n    }\n    iteration++;\n  }\n  return -1;\n}\n/**\n * This function does a binary search for a specific value in a sorted array.\n * If it does not exist but is in between of two values, we return either the\n * one before or the one after, depending on user input If it is found, we\n * return the index, else -1.\n * @param orderedItems - Sorted array.\n * @param target - The searched value.\n * @param field - Name of the property in items to be searched.\n * @param sidePreference - If the target is between two values, should the index of the before or the after be returned?\n * @param comparator - An optional comparator, returning -1, 0, 1 for \\<, ===, \\>.\n * @returns The index of found value or -1 if nothing was found.\n */\nfunction binarySearchValue(orderedItems, target, field, sidePreference, comparator) {\n  const maxIterations = 10000;\n  let iteration = 0;\n  let low = 0;\n  let high = orderedItems.length - 1;\n  let prevValue;\n  let value;\n  let nextValue;\n  let middle;\n  comparator = comparator != undefined ? comparator : function (a, b) {\n    return a == b ? 0 : a < b ? -1 : 1;\n  };\n  while (low <= high && iteration < maxIterations) {\n    // get a new guess\n    middle = Math.floor(0.5 * (high + low));\n    prevValue = orderedItems[Math.max(0, middle - 1)][field];\n    value = orderedItems[middle][field];\n    nextValue = orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];\n    if (comparator(value, target) == 0) {\n      // we found the target\n      return middle;\n    } else if (comparator(prevValue, target) < 0 && comparator(value, target) > 0) {\n      // target is in between of the previous and the current\n      return sidePreference == \"before\" ? Math.max(0, middle - 1) : middle;\n    } else if (comparator(value, target) < 0 && comparator(nextValue, target) > 0) {\n      // target is in between of the current and the next\n      return sidePreference == \"before\" ? middle : Math.min(orderedItems.length - 1, middle + 1);\n    } else {\n      // didnt find the target, we need to change our boundaries.\n      if (comparator(value, target) < 0) {\n        // it is too small --> increase low\n        low = middle + 1;\n      } else {\n        // it is too big --> decrease high\n        high = middle - 1;\n      }\n    }\n    iteration++;\n  }\n  // didnt find anything. Return -1.\n  return -1;\n}\n/*\n * Easing Functions.\n * Only considering the t value for the range [0, 1] => [0, 1].\n *\n * Inspiration: from http://gizma.com/easing/\n * https://gist.github.com/gre/1650294\n */\nconst easingFunctions = {\n  /**\n   * Provides no easing and no acceleration.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  linear(t) {\n    return t;\n  },\n  /**\n   * Accelerate from zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInQuad(t) {\n    return t * t;\n  },\n  /**\n   * Decelerate to zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeOutQuad(t) {\n    return t * (2 - t);\n  },\n  /**\n   * Accelerate until halfway, then decelerate.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInOutQuad(t) {\n    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n  },\n  /**\n   * Accelerate from zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInCubic(t) {\n    return t * t * t;\n  },\n  /**\n   * Decelerate to zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeOutCubic(t) {\n    return --t * t * t + 1;\n  },\n  /**\n   * Accelerate until halfway, then decelerate.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInOutCubic(t) {\n    return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n  },\n  /**\n   * Accelerate from zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInQuart(t) {\n    return t * t * t * t;\n  },\n  /**\n   * Decelerate to zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeOutQuart(t) {\n    return 1 - --t * t * t * t;\n  },\n  /**\n   * Accelerate until halfway, then decelerate.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInOutQuart(t) {\n    return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n  },\n  /**\n   * Accelerate from zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInQuint(t) {\n    return t * t * t * t * t;\n  },\n  /**\n   * Decelerate to zero velocity.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeOutQuint(t) {\n    return 1 + --t * t * t * t * t;\n  },\n  /**\n   * Accelerate until halfway, then decelerate.\n   * @param t - Time.\n   * @returns Value at time t.\n   */\n  easeInOutQuint(t) {\n    return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n  }\n};\n/**\n * Experimentaly compute the width of the scrollbar for this browser.\n * @returns The width in pixels.\n */\nfunction getScrollBarWidth() {\n  const inner = document.createElement(\"p\");\n  inner.style.width = \"100%\";\n  inner.style.height = \"200px\";\n  const outer = document.createElement(\"div\");\n  outer.style.position = \"absolute\";\n  outer.style.top = \"0px\";\n  outer.style.left = \"0px\";\n  outer.style.visibility = \"hidden\";\n  outer.style.width = \"200px\";\n  outer.style.height = \"150px\";\n  outer.style.overflow = \"hidden\";\n  outer.appendChild(inner);\n  document.body.appendChild(outer);\n  const w1 = inner.offsetWidth;\n  outer.style.overflow = \"scroll\";\n  let w2 = inner.offsetWidth;\n  if (w1 == w2) {\n    w2 = outer.clientWidth;\n  }\n  document.body.removeChild(outer);\n  return w1 - w2;\n}\n// @TODO: This doesn't work properly.\n// It works only for single property objects,\n// otherwise it combines all of the types in a union.\n// export function topMost<K1 extends string, V1> (\n//   pile: Record<K1, undefined | V1>[],\n//   accessors: K1 | [K1]\n// ): undefined | V1\n// export function topMost<K1 extends string, K2 extends string, V1, V2> (\n//   pile: Record<K1, undefined | V1 | Record<K2, undefined | V2>>[],\n//   accessors: [K1, K2]\n// ): undefined | V1 | V2\n// export function topMost<K1 extends string, K2 extends string, K3 extends string, V1, V2, V3> (\n//   pile: Record<K1, undefined | V1 | Record<K2, undefined | V2 | Record<K3, undefined | V3>>>[],\n//   accessors: [K1, K2, K3]\n// ): undefined | V1 | V2 | V3\n/**\n * Get the top most property value from a pile of objects.\n * @param pile - Array of objects, no required format.\n * @param accessors - Array of property names.\n * For example `object['foo']['bar']` → `['foo', 'bar']`.\n * @returns Value of the property with given accessors path from the first pile item where it's not undefined.\n */\nfunction topMost(pile, accessors) {\n  let candidate;\n  if (!_Array$isArray(accessors)) {\n    accessors = [accessors];\n  }\n  for (const member of pile) {\n    if (member) {\n      candidate = member[accessors[0]];\n      for (let i = 1; i < accessors.length; i++) {\n        if (candidate) {\n          candidate = candidate[accessors[i]];\n        }\n      }\n      if (typeof candidate !== \"undefined\") {\n        break;\n      }\n    }\n  }\n  return candidate;\n}\nconst htmlColors$1 = {\n  black: \"#000000\",\n  navy: \"#000080\",\n  darkblue: \"#00008B\",\n  mediumblue: \"#0000CD\",\n  blue: \"#0000FF\",\n  darkgreen: \"#006400\",\n  green: \"#008000\",\n  teal: \"#008080\",\n  darkcyan: \"#008B8B\",\n  deepskyblue: \"#00BFFF\",\n  darkturquoise: \"#00CED1\",\n  mediumspringgreen: \"#00FA9A\",\n  lime: \"#00FF00\",\n  springgreen: \"#00FF7F\",\n  aqua: \"#00FFFF\",\n  cyan: \"#00FFFF\",\n  midnightblue: \"#191970\",\n  dodgerblue: \"#1E90FF\",\n  lightseagreen: \"#20B2AA\",\n  forestgreen: \"#228B22\",\n  seagreen: \"#2E8B57\",\n  darkslategray: \"#2F4F4F\",\n  limegreen: \"#32CD32\",\n  mediumseagreen: \"#3CB371\",\n  turquoise: \"#40E0D0\",\n  royalblue: \"#4169E1\",\n  steelblue: \"#4682B4\",\n  darkslateblue: \"#483D8B\",\n  mediumturquoise: \"#48D1CC\",\n  indigo: \"#4B0082\",\n  darkolivegreen: \"#556B2F\",\n  cadetblue: \"#5F9EA0\",\n  cornflowerblue: \"#6495ED\",\n  mediumaquamarine: \"#66CDAA\",\n  dimgray: \"#696969\",\n  slateblue: \"#6A5ACD\",\n  olivedrab: \"#6B8E23\",\n  slategray: \"#708090\",\n  lightslategray: \"#778899\",\n  mediumslateblue: \"#7B68EE\",\n  lawngreen: \"#7CFC00\",\n  chartreuse: \"#7FFF00\",\n  aquamarine: \"#7FFFD4\",\n  maroon: \"#800000\",\n  purple: \"#800080\",\n  olive: \"#808000\",\n  gray: \"#808080\",\n  skyblue: \"#87CEEB\",\n  lightskyblue: \"#87CEFA\",\n  blueviolet: \"#8A2BE2\",\n  darkred: \"#8B0000\",\n  darkmagenta: \"#8B008B\",\n  saddlebrown: \"#8B4513\",\n  darkseagreen: \"#8FBC8F\",\n  lightgreen: \"#90EE90\",\n  mediumpurple: \"#9370D8\",\n  darkviolet: \"#9400D3\",\n  palegreen: \"#98FB98\",\n  darkorchid: \"#9932CC\",\n  yellowgreen: \"#9ACD32\",\n  sienna: \"#A0522D\",\n  brown: \"#A52A2A\",\n  darkgray: \"#A9A9A9\",\n  lightblue: \"#ADD8E6\",\n  greenyellow: \"#ADFF2F\",\n  paleturquoise: \"#AFEEEE\",\n  lightsteelblue: \"#B0C4DE\",\n  powderblue: \"#B0E0E6\",\n  firebrick: \"#B22222\",\n  darkgoldenrod: \"#B8860B\",\n  mediumorchid: \"#BA55D3\",\n  rosybrown: \"#BC8F8F\",\n  darkkhaki: \"#BDB76B\",\n  silver: \"#C0C0C0\",\n  mediumvioletred: \"#C71585\",\n  indianred: \"#CD5C5C\",\n  peru: \"#CD853F\",\n  chocolate: \"#D2691E\",\n  tan: \"#D2B48C\",\n  lightgrey: \"#D3D3D3\",\n  palevioletred: \"#D87093\",\n  thistle: \"#D8BFD8\",\n  orchid: \"#DA70D6\",\n  goldenrod: \"#DAA520\",\n  crimson: \"#DC143C\",\n  gainsboro: \"#DCDCDC\",\n  plum: \"#DDA0DD\",\n  burlywood: \"#DEB887\",\n  lightcyan: \"#E0FFFF\",\n  lavender: \"#E6E6FA\",\n  darksalmon: \"#E9967A\",\n  violet: \"#EE82EE\",\n  palegoldenrod: \"#EEE8AA\",\n  lightcoral: \"#F08080\",\n  khaki: \"#F0E68C\",\n  aliceblue: \"#F0F8FF\",\n  honeydew: \"#F0FFF0\",\n  azure: \"#F0FFFF\",\n  sandybrown: \"#F4A460\",\n  wheat: \"#F5DEB3\",\n  beige: \"#F5F5DC\",\n  whitesmoke: \"#F5F5F5\",\n  mintcream: \"#F5FFFA\",\n  ghostwhite: \"#F8F8FF\",\n  salmon: \"#FA8072\",\n  antiquewhite: \"#FAEBD7\",\n  linen: \"#FAF0E6\",\n  lightgoldenrodyellow: \"#FAFAD2\",\n  oldlace: \"#FDF5E6\",\n  red: \"#FF0000\",\n  fuchsia: \"#FF00FF\",\n  magenta: \"#FF00FF\",\n  deeppink: \"#FF1493\",\n  orangered: \"#FF4500\",\n  tomato: \"#FF6347\",\n  hotpink: \"#FF69B4\",\n  coral: \"#FF7F50\",\n  darkorange: \"#FF8C00\",\n  lightsalmon: \"#FFA07A\",\n  orange: \"#FFA500\",\n  lightpink: \"#FFB6C1\",\n  pink: \"#FFC0CB\",\n  gold: \"#FFD700\",\n  peachpuff: \"#FFDAB9\",\n  navajowhite: \"#FFDEAD\",\n  moccasin: \"#FFE4B5\",\n  bisque: \"#FFE4C4\",\n  mistyrose: \"#FFE4E1\",\n  blanchedalmond: \"#FFEBCD\",\n  papayawhip: \"#FFEFD5\",\n  lavenderblush: \"#FFF0F5\",\n  seashell: \"#FFF5EE\",\n  cornsilk: \"#FFF8DC\",\n  lemonchiffon: \"#FFFACD\",\n  floralwhite: \"#FFFAF0\",\n  snow: \"#FFFAFA\",\n  yellow: \"#FFFF00\",\n  lightyellow: \"#FFFFE0\",\n  ivory: \"#FFFFF0\",\n  white: \"#FFFFFF\"\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nlet ColorPicker$1 = class ColorPicker {\n  /**\n   * @param {number} [pixelRatio]\n   */\n  constructor() {\n    let pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    this.pixelRatio = pixelRatio;\n    this.generated = false;\n    this.centerCoordinates = {\n      x: 289 / 2,\n      y: 289 / 2\n    };\n    this.r = 289 * 0.49;\n    this.color = {\n      r: 255,\n      g: 255,\n      b: 255,\n      a: 1.0\n    };\n    this.hueCircle = undefined;\n    this.initialColor = {\n      r: 255,\n      g: 255,\n      b: 255,\n      a: 1.0\n    };\n    this.previousColor = undefined;\n    this.applied = false;\n\n    // bound by\n    this.updateCallback = () => {};\n    this.closeCallback = () => {};\n\n    // create all DOM elements\n    this._create();\n  }\n\n  /**\n   * this inserts the colorPicker into a div from the DOM\n   * @param {Element} container\n   */\n  insertTo(container) {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n      this.hammer = undefined;\n    }\n    this.container = container;\n    this.container.appendChild(this.frame);\n    this._bindHammer();\n    this._setSize();\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {Function} callback\n   */\n  setUpdateCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.updateCallback = callback;\n    } else {\n      throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");\n    }\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {Function} callback\n   */\n  setCloseCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.closeCallback = callback;\n    } else {\n      throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");\n    }\n  }\n\n  /**\n   *\n   * @param {string} color\n   * @returns {string}\n   * @private\n   */\n  _isColorString(color) {\n    if (typeof color === \"string\") {\n      return htmlColors$1[color];\n    }\n  }\n\n  /**\n   * Set the color of the colorPicker\n   * Supported formats:\n   * 'red'                   --> HTML color string\n   * '#ffffff'               --> hex string\n   * 'rgb(255,255,255)'      --> rgb string\n   * 'rgba(255,255,255,1.0)' --> rgba string\n   * {r:255,g:255,b:255}     --> rgb object\n   * {r:255,g:255,b:255,a:1.0} --> rgba object\n   * @param {string | object} color\n   * @param {boolean} [setInitial]\n   */\n  setColor(color) {\n    let setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    if (color === \"none\") {\n      return;\n    }\n    let rgba;\n\n    // if a html color shorthand is used, convert to hex\n    const htmlColor = this._isColorString(color);\n    if (htmlColor !== undefined) {\n      color = htmlColor;\n    }\n\n    // check format\n    if (isString(color) === true) {\n      if (isValidRGB(color) === true) {\n        const rgbaArray = color.substr(4).substr(0, color.length - 5).split(\",\");\n        rgba = {\n          r: rgbaArray[0],\n          g: rgbaArray[1],\n          b: rgbaArray[2],\n          a: 1.0\n        };\n      } else if (isValidRGBA(color) === true) {\n        const rgbaArray = color.substr(5).substr(0, color.length - 6).split(\",\");\n        rgba = {\n          r: rgbaArray[0],\n          g: rgbaArray[1],\n          b: rgbaArray[2],\n          a: rgbaArray[3]\n        };\n      } else if (isValidHex(color) === true) {\n        const rgbObj = hexToRGB(color);\n        rgba = {\n          r: rgbObj.r,\n          g: rgbObj.g,\n          b: rgbObj.b,\n          a: 1.0\n        };\n      }\n    } else {\n      if (color instanceof Object) {\n        if (color.r !== undefined && color.g !== undefined && color.b !== undefined) {\n          const alpha = color.a !== undefined ? color.a : \"1.0\";\n          rgba = {\n            r: color.r,\n            g: color.g,\n            b: color.b,\n            a: alpha\n          };\n        }\n      }\n    }\n\n    // set color\n    if (rgba === undefined) {\n      throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" + _JSON$stringify(color));\n    } else {\n      this._setColor(rgba, setInitial);\n    }\n  }\n\n  /**\n   * this shows the color picker.\n   * The hue circle is constructed once and stored.\n   */\n  show() {\n    if (this.closeCallback !== undefined) {\n      this.closeCallback();\n      this.closeCallback = undefined;\n    }\n    this.applied = false;\n    this.frame.style.display = \"block\";\n    this._generateHueCircle();\n  }\n\n  // ------------------------------------------ PRIVATE ----------------------------- //\n\n  /**\n   * Hide the picker. Is called by the cancel button.\n   * Optional boolean to store the previous color for easy access later on.\n   * @param {boolean} [storePrevious]\n   * @private\n   */\n  _hide() {\n    let storePrevious = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    // store the previous color for next time;\n    if (storePrevious === true) {\n      this.previousColor = _Object$assign({}, this.color);\n    }\n    if (this.applied === true) {\n      this.updateCallback(this.initialColor);\n    }\n    this.frame.style.display = \"none\";\n\n    // call the closing callback, restoring the onclick method.\n    // this is in a setTimeout because it will trigger the show again before the click is done.\n    _setTimeout(() => {\n      if (this.closeCallback !== undefined) {\n        this.closeCallback();\n        this.closeCallback = undefined;\n      }\n    }, 0);\n  }\n\n  /**\n   * bound to the save button. Saves and hides.\n   * @private\n   */\n  _save() {\n    this.updateCallback(this.color);\n    this.applied = false;\n    this._hide();\n  }\n\n  /**\n   * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n   * @private\n   */\n  _apply() {\n    this.applied = true;\n    this.updateCallback(this.color);\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * load the color from the previous session.\n   * @private\n   */\n  _loadLast() {\n    if (this.previousColor !== undefined) {\n      this.setColor(this.previousColor, false);\n    } else {\n      alert(\"There is no last color to load...\");\n    }\n  }\n\n  /**\n   * set the color, place the picker\n   * @param {object} rgba\n   * @param {boolean} [setInitial]\n   * @private\n   */\n  _setColor(rgba) {\n    let setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    // store the initial color\n    if (setInitial === true) {\n      this.initialColor = _Object$assign({}, rgba);\n    }\n    this.color = rgba;\n    const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n    const angleConvert = 2 * Math.PI;\n    const radius = this.r * hsv.s;\n    const x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n    const y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n    this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n    this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n    this._updatePicker(rgba);\n  }\n\n  /**\n   * bound to opacity control\n   * @param {number} value\n   * @private\n   */\n  _setOpacity(value) {\n    this.color.a = value / 100;\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * bound to brightness control\n   * @param {number} value\n   * @private\n   */\n  _setBrightness(value) {\n    const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.v = value / 100;\n    const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n    this._updatePicker();\n  }\n\n  /**\n   * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n   * @param {object} rgba\n   * @private\n   */\n  _updatePicker() {\n    let rgba = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.color;\n    const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n    const ctx = this.colorPickerCanvas.getContext(\"2d\");\n    if (this.pixelRation === undefined) {\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n    // clear the canvas\n    const w = this.colorPickerCanvas.clientWidth;\n    const h = this.colorPickerCanvas.clientHeight;\n    ctx.clearRect(0, 0, w, h);\n    ctx.putImageData(this.hueCircle, 0, 0);\n    ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n    ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n    _fillInstanceProperty(ctx).call(ctx);\n    this.brightnessRange.value = 100 * hsv.v;\n    this.opacityRange.value = 100 * rgba.a;\n    this.initialColorDiv.style.backgroundColor = \"rgba(\" + this.initialColor.r + \",\" + this.initialColor.g + \",\" + this.initialColor.b + \",\" + this.initialColor.a + \")\";\n    this.newColorDiv.style.backgroundColor = \"rgba(\" + this.color.r + \",\" + this.color.g + \",\" + this.color.b + \",\" + this.color.a + \")\";\n  }\n\n  /**\n   * used by create to set the size of the canvas.\n   * @private\n   */\n  _setSize() {\n    this.colorPickerCanvas.style.width = \"100%\";\n    this.colorPickerCanvas.style.height = \"100%\";\n    this.colorPickerCanvas.width = 289 * this.pixelRatio;\n    this.colorPickerCanvas.height = 289 * this.pixelRatio;\n  }\n\n  /**\n   * create all dom elements\n   * TODO: cleanup, lots of similar dom elements\n   * @private\n   */\n  _create() {\n    var _context7, _context8, _context9, _context0;\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-color-picker\";\n    this.colorPickerDiv = document.createElement(\"div\");\n    this.colorPickerSelector = document.createElement(\"div\");\n    this.colorPickerSelector.className = \"vis-selector\";\n    this.colorPickerDiv.appendChild(this.colorPickerSelector);\n    this.colorPickerCanvas = document.createElement(\"canvas\");\n    this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n    if (!this.colorPickerCanvas.getContext) {\n      const noCanvas = document.createElement(\"DIV\");\n      noCanvas.style.color = \"red\";\n      noCanvas.style.fontWeight = \"bold\";\n      noCanvas.style.padding = \"10px\";\n      noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n      this.colorPickerCanvas.appendChild(noCanvas);\n    } else {\n      const ctx = this.colorPickerCanvas.getContext(\"2d\");\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);\n      this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n    this.colorPickerDiv.className = \"vis-color\";\n    this.opacityDiv = document.createElement(\"div\");\n    this.opacityDiv.className = \"vis-opacity\";\n    this.brightnessDiv = document.createElement(\"div\");\n    this.brightnessDiv.className = \"vis-brightness\";\n    this.arrowDiv = document.createElement(\"div\");\n    this.arrowDiv.className = \"vis-arrow\";\n    this.opacityRange = document.createElement(\"input\");\n    try {\n      this.opacityRange.type = \"range\"; // Not supported on IE9\n      this.opacityRange.min = \"0\";\n      this.opacityRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling.\n    }\n    this.opacityRange.value = \"100\";\n    this.opacityRange.className = \"vis-range\";\n    this.brightnessRange = document.createElement(\"input\");\n    try {\n      this.brightnessRange.type = \"range\"; // Not supported on IE9\n      this.brightnessRange.min = \"0\";\n      this.brightnessRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling.\n    }\n    this.brightnessRange.value = \"100\";\n    this.brightnessRange.className = \"vis-range\";\n    this.opacityDiv.appendChild(this.opacityRange);\n    this.brightnessDiv.appendChild(this.brightnessRange);\n    const me = this;\n    this.opacityRange.onchange = function () {\n      me._setOpacity(this.value);\n    };\n    this.opacityRange.oninput = function () {\n      me._setOpacity(this.value);\n    };\n    this.brightnessRange.onchange = function () {\n      me._setBrightness(this.value);\n    };\n    this.brightnessRange.oninput = function () {\n      me._setBrightness(this.value);\n    };\n    this.brightnessLabel = document.createElement(\"div\");\n    this.brightnessLabel.className = \"vis-label vis-brightness\";\n    this.brightnessLabel.innerText = \"brightness:\";\n    this.opacityLabel = document.createElement(\"div\");\n    this.opacityLabel.className = \"vis-label vis-opacity\";\n    this.opacityLabel.innerText = \"opacity:\";\n    this.newColorDiv = document.createElement(\"div\");\n    this.newColorDiv.className = \"vis-new-color\";\n    this.newColorDiv.innerText = \"new\";\n    this.initialColorDiv = document.createElement(\"div\");\n    this.initialColorDiv.className = \"vis-initial-color\";\n    this.initialColorDiv.innerText = \"initial\";\n    this.cancelButton = document.createElement(\"div\");\n    this.cancelButton.className = \"vis-button vis-cancel\";\n    this.cancelButton.innerText = \"cancel\";\n    this.cancelButton.onclick = _bindInstanceProperty(_context7 = this._hide).call(_context7, this, false);\n    this.applyButton = document.createElement(\"div\");\n    this.applyButton.className = \"vis-button vis-apply\";\n    this.applyButton.innerText = \"apply\";\n    this.applyButton.onclick = _bindInstanceProperty(_context8 = this._apply).call(_context8, this);\n    this.saveButton = document.createElement(\"div\");\n    this.saveButton.className = \"vis-button vis-save\";\n    this.saveButton.innerText = \"save\";\n    this.saveButton.onclick = _bindInstanceProperty(_context9 = this._save).call(_context9, this);\n    this.loadButton = document.createElement(\"div\");\n    this.loadButton.className = \"vis-button vis-load\";\n    this.loadButton.innerText = \"load last\";\n    this.loadButton.onclick = _bindInstanceProperty(_context0 = this._loadLast).call(_context0, this);\n    this.frame.appendChild(this.colorPickerDiv);\n    this.frame.appendChild(this.arrowDiv);\n    this.frame.appendChild(this.brightnessLabel);\n    this.frame.appendChild(this.brightnessDiv);\n    this.frame.appendChild(this.opacityLabel);\n    this.frame.appendChild(this.opacityDiv);\n    this.frame.appendChild(this.newColorDiv);\n    this.frame.appendChild(this.initialColorDiv);\n    this.frame.appendChild(this.cancelButton);\n    this.frame.appendChild(this.applyButton);\n    this.frame.appendChild(this.saveButton);\n    this.frame.appendChild(this.loadButton);\n  }\n\n  /**\n   * bind hammer to the color picker\n   * @private\n   */\n  _bindHammer() {\n    this.drag = {};\n    this.pinch = {};\n    this.hammer = new Hammer$1(this.colorPickerCanvas);\n    this.hammer.get(\"pinch\").set({\n      enable: true\n    });\n    this.hammer.on(\"hammer.input\", event => {\n      if (event.isFirst) {\n        this._moveSelector(event);\n      }\n    });\n    this.hammer.on(\"tap\", event => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panstart\", event => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panmove\", event => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panend\", event => {\n      this._moveSelector(event);\n    });\n  }\n\n  /**\n   * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n   * @private\n   */\n  _generateHueCircle() {\n    if (this.generated === false) {\n      const ctx = this.colorPickerCanvas.getContext(\"2d\");\n      if (this.pixelRation === undefined) {\n        this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);\n      }\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      const w = this.colorPickerCanvas.clientWidth;\n      const h = this.colorPickerCanvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n      // draw hue circle\n      let x, y, hue, sat;\n      this.centerCoordinates = {\n        x: w * 0.5,\n        y: h * 0.5\n      };\n      this.r = 0.49 * w;\n      const angleConvert = 2 * Math.PI / 360;\n      const hfac = 1 / 360;\n      const sfac = 1 / this.r;\n      let rgb;\n      for (hue = 0; hue < 360; hue++) {\n        for (sat = 0; sat < this.r; sat++) {\n          x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n          y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n          rgb = HSVToRGB(hue * hfac, sat * sfac, 1);\n          ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n          ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n        }\n      }\n      ctx.strokeStyle = \"rgba(0,0,0,1)\";\n      ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n      ctx.stroke();\n      this.hueCircle = ctx.getImageData(0, 0, w, h);\n    }\n    this.generated = true;\n  }\n\n  /**\n   * move the selector. This is called by hammer functions.\n   * @param {Event}  event   The event\n   * @private\n   */\n  _moveSelector(event) {\n    const rect = this.colorPickerDiv.getBoundingClientRect();\n    const left = event.center.x - rect.left;\n    const top = event.center.y - rect.top;\n    const centerY = 0.5 * this.colorPickerDiv.clientHeight;\n    const centerX = 0.5 * this.colorPickerDiv.clientWidth;\n    const x = left - centerX;\n    const y = top - centerY;\n    const angle = Math.atan2(x, y);\n    const radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n    const newTop = Math.cos(angle) * radius + centerY;\n    const newLeft = Math.sin(angle) * radius + centerX;\n    this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n    this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n    // set color\n    let h = angle / (2 * Math.PI);\n    h = h < 0 ? h + 1 : h;\n    const s = radius / this.r;\n    const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.h = h;\n    hsv.s = s;\n    const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n\n    // update previews\n    this.initialColorDiv.style.backgroundColor = \"rgba(\" + this.initialColor.r + \",\" + this.initialColor.g + \",\" + this.initialColor.b + \",\" + this.initialColor.a + \")\";\n    this.newColorDiv.style.backgroundColor = \"rgba(\" + this.color.r + \",\" + this.color.g + \",\" + this.color.b + \",\" + this.color.a + \")\";\n  }\n};\n\n/**\n * Wrap given text (last argument) in HTML elements (all preceding arguments).\n * @param {...any} rest - List of tag names followed by inner text.\n * @returns An element or a text node.\n */\nfunction wrapInTag() {\n  for (var _len5 = arguments.length, rest = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n    rest[_key5] = arguments[_key5];\n  }\n  if (rest.length < 1) {\n    throw new TypeError(\"Invalid arguments.\");\n  } else if (rest.length === 1) {\n    return document.createTextNode(rest[0]);\n  } else {\n    const element = document.createElement(rest[0]);\n    element.appendChild(wrapInTag(..._sliceInstanceProperty(rest).call(rest, 1)));\n    return element;\n  }\n}\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nlet Configurator$1 = class Configurator {\n  /**\n   * @param {object} parentModule        | the location where parentModule.setOptions() can be called\n   * @param {object} defaultContainer    | the default container of the module\n   * @param {object} configureOptions    | the fully configured and predefined options set found in allOptions.js\n   * @param {number} pixelRatio          | canvas pixel ratio\n   * @param {Function} hideOption        | custom logic to dynamically hide options\n   */\n  constructor(parentModule, defaultContainer, configureOptions) {\n    let pixelRatio = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n    let hideOption = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : () => false;\n    this.parent = parentModule;\n    this.changedOptions = [];\n    this.container = defaultContainer;\n    this.allowCreation = false;\n    this.hideOption = hideOption;\n    this.options = {};\n    this.initialized = false;\n    this.popupCounter = 0;\n    this.defaultOptions = {\n      enabled: false,\n      filter: true,\n      container: undefined,\n      showButton: true\n    };\n    _Object$assign(this.options, this.defaultOptions);\n    this.configureOptions = configureOptions;\n    this.moduleOptions = {};\n    this.domElements = [];\n    this.popupDiv = {};\n    this.popupLimit = 5;\n    this.popupHistory = {};\n    this.colorPicker = new ColorPicker$1(pixelRatio);\n    this.wrapper = undefined;\n  }\n\n  /**\n   * refresh all options.\n   * Because all modules parse their options by themselves, we just use their options. We copy them here.\n   * @param {object} options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      // reset the popup history because the indices may have been changed.\n      this.popupHistory = {};\n      this._removePopup();\n      let enabled = true;\n      if (typeof options === \"string\") {\n        this.options.filter = options;\n      } else if (_Array$isArray(options)) {\n        this.options.filter = options.join();\n      } else if (typeof options === \"object\") {\n        if (options == null) {\n          throw new TypeError(\"options cannot be null\");\n        }\n        if (options.container !== undefined) {\n          this.options.container = options.container;\n        }\n        if (_filterInstanceProperty(options) !== undefined) {\n          this.options.filter = _filterInstanceProperty(options);\n        }\n        if (options.showButton !== undefined) {\n          this.options.showButton = options.showButton;\n        }\n        if (options.enabled !== undefined) {\n          enabled = options.enabled;\n        }\n      } else if (typeof options === \"boolean\") {\n        this.options.filter = true;\n        enabled = options;\n      } else if (typeof options === \"function\") {\n        this.options.filter = options;\n        enabled = true;\n      }\n      if (_filterInstanceProperty(this.options) === false) {\n        enabled = false;\n      }\n      this.options.enabled = enabled;\n    }\n    this._clean();\n  }\n\n  /**\n   *\n   * @param {object} moduleOptions\n   */\n  setModuleOptions(moduleOptions) {\n    this.moduleOptions = moduleOptions;\n    if (this.options.enabled === true) {\n      this._clean();\n      if (this.options.container !== undefined) {\n        this.container = this.options.container;\n      }\n      this._create();\n    }\n  }\n\n  /**\n   * Create all DOM elements\n   * @private\n   */\n  _create() {\n    this._clean();\n    this.changedOptions = [];\n    const filter = _filterInstanceProperty(this.options);\n    let counter = 0;\n    let show = false;\n    for (const option in this.configureOptions) {\n      if (Object.prototype.hasOwnProperty.call(this.configureOptions, option)) {\n        this.allowCreation = false;\n        show = false;\n        if (typeof filter === \"function\") {\n          show = filter(option, []);\n          show = show || this._handleObject(this.configureOptions[option], [option], true);\n        } else if (filter === true || _indexOfInstanceProperty(filter).call(filter, option) !== -1) {\n          show = true;\n        }\n        if (show !== false) {\n          this.allowCreation = true;\n\n          // linebreak between categories\n          if (counter > 0) {\n            this._makeItem([]);\n          }\n          // a header for the category\n          this._makeHeader(option);\n\n          // get the sub options\n          this._handleObject(this.configureOptions[option], [option]);\n        }\n        counter++;\n      }\n    }\n    this._makeButton();\n    this._push();\n    //~ this.colorPicker.insertTo(this.container);\n  }\n\n  /**\n   * draw all DOM elements on the screen\n   * @private\n   */\n  _push() {\n    this.wrapper = document.createElement(\"div\");\n    this.wrapper.className = \"vis-configuration-wrapper\";\n    this.container.appendChild(this.wrapper);\n    for (let i = 0; i < this.domElements.length; i++) {\n      this.wrapper.appendChild(this.domElements[i]);\n    }\n    this._showPopupIfNeeded();\n  }\n\n  /**\n   * delete all DOM elements\n   * @private\n   */\n  _clean() {\n    for (let i = 0; i < this.domElements.length; i++) {\n      this.wrapper.removeChild(this.domElements[i]);\n    }\n    if (this.wrapper !== undefined) {\n      this.container.removeChild(this.wrapper);\n      this.wrapper = undefined;\n    }\n    this.domElements = [];\n    this._removePopup();\n  }\n\n  /**\n   * get the value from the actualOptions if it exists\n   * @param {Array} path    | where to look for the actual option\n   * @returns {*}\n   * @private\n   */\n  _getValue(path) {\n    let base = this.moduleOptions;\n    for (let i = 0; i < path.length; i++) {\n      if (base[path[i]] !== undefined) {\n        base = base[path[i]];\n      } else {\n        base = undefined;\n        break;\n      }\n    }\n    return base;\n  }\n\n  /**\n   * all option elements are wrapped in an item\n   * @param {Array} path    | where to look for the actual option\n   * @param {Array.<Element>} domElements\n   * @returns {number}\n   * @private\n   */\n  _makeItem(path) {\n    if (this.allowCreation === true) {\n      const item = document.createElement(\"div\");\n      item.className = \"vis-configuration vis-config-item vis-config-s\" + path.length;\n      for (var _len6 = arguments.length, domElements = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n        domElements[_key6 - 1] = arguments[_key6];\n      }\n      _forEachInstanceProperty(domElements).call(domElements, element => {\n        item.appendChild(element);\n      });\n      this.domElements.push(item);\n      return this.domElements.length;\n    }\n    return 0;\n  }\n\n  /**\n   * header for major subjects\n   * @param {string} name\n   * @private\n   */\n  _makeHeader(name) {\n    const div = document.createElement(\"div\");\n    div.className = \"vis-configuration vis-config-header\";\n    div.innerText = name;\n    this._makeItem([], div);\n  }\n\n  /**\n   * make a label, if it is an object label, it gets different styling.\n   * @param {string} name\n   * @param {Array} path    | where to look for the actual option\n   * @param {string} objectLabel\n   * @returns {HTMLElement}\n   * @private\n   */\n  _makeLabel(name, path) {\n    let objectLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    const div = document.createElement(\"div\");\n    div.className = \"vis-configuration vis-config-label vis-config-s\" + path.length;\n    if (objectLabel === true) {\n      while (div.firstChild) {\n        div.removeChild(div.firstChild);\n      }\n      div.appendChild(wrapInTag(\"i\", \"b\", name));\n    } else {\n      div.innerText = name + \":\";\n    }\n    return div;\n  }\n\n  /**\n   * make a dropdown list for multiple possible string optoins\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeDropdown(arr, value, path) {\n    const select = document.createElement(\"select\");\n    select.className = \"vis-configuration vis-config-select\";\n    let selectedValue = 0;\n    if (value !== undefined) {\n      if (_indexOfInstanceProperty(arr).call(arr, value) !== -1) {\n        selectedValue = _indexOfInstanceProperty(arr).call(arr, value);\n      }\n    }\n    for (let i = 0; i < arr.length; i++) {\n      const option = document.createElement(\"option\");\n      option.value = arr[i];\n      if (i === selectedValue) {\n        option.selected = \"selected\";\n      }\n      option.innerText = arr[i];\n      select.appendChild(option);\n    }\n    const me = this;\n    select.onchange = function () {\n      me._update(this.value, path);\n    };\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, select);\n  }\n\n  /**\n   * make a range object for numeric options\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeRange(arr, value, path) {\n    const defaultValue = arr[0];\n    const min = arr[1];\n    const max = arr[2];\n    const step = arr[3];\n    const range = document.createElement(\"input\");\n    range.className = \"vis-configuration vis-config-range\";\n    try {\n      range.type = \"range\"; // not supported on IE9\n      range.min = min;\n      range.max = max;\n    } catch (err) {\n      // TODO: Add some error handling.\n    }\n    range.step = step;\n\n    // set up the popup settings in case they are needed.\n    let popupString = \"\";\n    let popupValue = 0;\n    if (value !== undefined) {\n      const factor = 1.2;\n      if (value < 0 && value * factor < min) {\n        range.min = Math.ceil(value * factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      } else if (value / factor < min) {\n        range.min = Math.ceil(value / factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      }\n      if (value * factor > max && max !== 1) {\n        range.max = Math.ceil(value * factor);\n        popupValue = range.max;\n        popupString = \"range increased\";\n      }\n      range.value = value;\n    } else {\n      range.value = defaultValue;\n    }\n    const input = document.createElement(\"input\");\n    input.className = \"vis-configuration vis-config-rangeinput\";\n    input.value = range.value;\n    const me = this;\n    range.onchange = function () {\n      input.value = this.value;\n      me._update(Number(this.value), path);\n    };\n    range.oninput = function () {\n      input.value = this.value;\n    };\n    const label = this._makeLabel(path[path.length - 1], path);\n    const itemIndex = this._makeItem(path, label, range, input);\n\n    // if a popup is needed AND it has not been shown for this value, show it.\n    if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n      this.popupHistory[itemIndex] = popupValue;\n      this._setupPopup(popupString, itemIndex);\n    }\n  }\n\n  /**\n   * make a button object\n   * @private\n   */\n  _makeButton() {\n    if (this.options.showButton === true) {\n      const generateButton = document.createElement(\"div\");\n      generateButton.className = \"vis-configuration vis-config-button\";\n      generateButton.innerText = \"generate options\";\n      generateButton.onclick = () => {\n        this._printOptions();\n      };\n      generateButton.onmouseover = () => {\n        generateButton.className = \"vis-configuration vis-config-button hover\";\n      };\n      generateButton.onmouseout = () => {\n        generateButton.className = \"vis-configuration vis-config-button\";\n      };\n      this.optionsContainer = document.createElement(\"div\");\n      this.optionsContainer.className = \"vis-configuration vis-config-option-container\";\n      this.domElements.push(this.optionsContainer);\n      this.domElements.push(generateButton);\n    }\n  }\n\n  /**\n   * prepare the popup\n   * @param {string} string\n   * @param {number} index\n   * @private\n   */\n  _setupPopup(string, index) {\n    if (this.initialized === true && this.allowCreation === true && this.popupCounter < this.popupLimit) {\n      const div = document.createElement(\"div\");\n      div.id = \"vis-configuration-popup\";\n      div.className = \"vis-configuration-popup\";\n      div.innerText = string;\n      div.onclick = () => {\n        this._removePopup();\n      };\n      this.popupCounter += 1;\n      this.popupDiv = {\n        html: div,\n        index: index\n      };\n    }\n  }\n\n  /**\n   * remove the popup from the dom\n   * @private\n   */\n  _removePopup() {\n    if (this.popupDiv.html !== undefined) {\n      this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n      clearTimeout(this.popupDiv.hideTimeout);\n      clearTimeout(this.popupDiv.deleteTimeout);\n      this.popupDiv = {};\n    }\n  }\n\n  /**\n   * Show the popup if it is needed.\n   * @private\n   */\n  _showPopupIfNeeded() {\n    if (this.popupDiv.html !== undefined) {\n      const correspondingElement = this.domElements[this.popupDiv.index];\n      const rect = correspondingElement.getBoundingClientRect();\n      this.popupDiv.html.style.left = rect.left + \"px\";\n      this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n      document.body.appendChild(this.popupDiv.html);\n      this.popupDiv.hideTimeout = _setTimeout(() => {\n        this.popupDiv.html.style.opacity = 0;\n      }, 1500);\n      this.popupDiv.deleteTimeout = _setTimeout(() => {\n        this._removePopup();\n      }, 1800);\n    }\n  }\n\n  /**\n   * make a checkbox for boolean options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeCheckbox(defaultValue, value, path) {\n    const checkbox = document.createElement(\"input\");\n    checkbox.type = \"checkbox\";\n    checkbox.className = \"vis-configuration vis-config-checkbox\";\n    checkbox.checked = defaultValue;\n    if (value !== undefined) {\n      checkbox.checked = value;\n      if (value !== defaultValue) {\n        if (typeof defaultValue === \"object\") {\n          if (value !== defaultValue.enabled) {\n            this.changedOptions.push({\n              path: path,\n              value: value\n            });\n          }\n        } else {\n          this.changedOptions.push({\n            path: path,\n            value: value\n          });\n        }\n      }\n    }\n    const me = this;\n    checkbox.onchange = function () {\n      me._update(this.checked, path);\n    };\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a text input field for string options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeTextInput(defaultValue, value, path) {\n    const checkbox = document.createElement(\"input\");\n    checkbox.type = \"text\";\n    checkbox.className = \"vis-configuration vis-config-text\";\n    checkbox.value = value;\n    if (value !== defaultValue) {\n      this.changedOptions.push({\n        path: path,\n        value: value\n      });\n    }\n    const me = this;\n    checkbox.onchange = function () {\n      me._update(this.value, path);\n    };\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a color field with a color picker for color fields\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _makeColorField(arr, value, path) {\n    const defaultColor = arr[1];\n    const div = document.createElement(\"div\");\n    value = value === undefined ? defaultColor : value;\n    if (value !== \"none\") {\n      div.className = \"vis-configuration vis-config-colorBlock\";\n      div.style.backgroundColor = value;\n    } else {\n      div.className = \"vis-configuration vis-config-colorBlock none\";\n    }\n    value = value === undefined ? defaultColor : value;\n    div.onclick = () => {\n      this._showColorPicker(value, div, path);\n    };\n    const label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, div);\n  }\n\n  /**\n   * used by the color buttons to call the color picker.\n   * @param {number} value\n   * @param {HTMLElement} div\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _showColorPicker(value, div, path) {\n    // clear the callback from this div\n    div.onclick = function () {};\n    this.colorPicker.insertTo(div);\n    this.colorPicker.show();\n    this.colorPicker.setColor(value);\n    this.colorPicker.setUpdateCallback(color => {\n      const colorString = \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n      div.style.backgroundColor = colorString;\n      this._update(colorString, path);\n    });\n\n    // on close of the colorpicker, restore the callback.\n    this.colorPicker.setCloseCallback(() => {\n      div.onclick = () => {\n        this._showColorPicker(value, div, path);\n      };\n    });\n  }\n\n  /**\n   * parse an object and draw the correct items\n   * @param {object} obj\n   * @param {Array} [path]    | where to look for the actual option\n   * @param {boolean} [checkOnly]\n   * @returns {boolean}\n   * @private\n   */\n  _handleObject(obj) {\n    let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    let checkOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    let show = false;\n    const filter = _filterInstanceProperty(this.options);\n    let visibleInSet = false;\n    for (const subObj in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, subObj)) {\n        show = true;\n        const item = obj[subObj];\n        const newPath = copyAndExtendArray(path, subObj);\n        if (typeof filter === \"function\") {\n          show = filter(subObj, path);\n\n          // if needed we must go deeper into the object.\n          if (show === false) {\n            if (!_Array$isArray(item) && typeof item !== \"string\" && typeof item !== \"boolean\" && item instanceof Object) {\n              this.allowCreation = false;\n              show = this._handleObject(item, newPath, true);\n              this.allowCreation = checkOnly === false;\n            }\n          }\n        }\n        if (show !== false) {\n          visibleInSet = true;\n          const value = this._getValue(newPath);\n          if (_Array$isArray(item)) {\n            this._handleArray(item, value, newPath);\n          } else if (typeof item === \"string\") {\n            this._makeTextInput(item, value, newPath);\n          } else if (typeof item === \"boolean\") {\n            this._makeCheckbox(item, value, newPath);\n          } else if (item instanceof Object) {\n            // skip the options that are not enabled\n            if (!this.hideOption(path, subObj, this.moduleOptions)) {\n              // initially collapse options with an disabled enabled option.\n              if (item.enabled !== undefined) {\n                const enabledPath = copyAndExtendArray(newPath, \"enabled\");\n                const enabledValue = this._getValue(enabledPath);\n                if (enabledValue === true) {\n                  const label = this._makeLabel(subObj, newPath, true);\n                  this._makeItem(newPath, label);\n                  visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n                } else {\n                  this._makeCheckbox(item, enabledValue, newPath);\n                }\n              } else {\n                const label = this._makeLabel(subObj, newPath, true);\n                this._makeItem(newPath, label);\n                visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n              }\n            }\n          } else {\n            console.error(\"dont know how to handle\", item, subObj, newPath);\n          }\n        }\n      }\n    }\n    return visibleInSet;\n  }\n\n  /**\n   * handle the array type of option\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _handleArray(arr, value, path) {\n    if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n      this._makeColorField(arr, value, path);\n      if (arr[1] !== value) {\n        this.changedOptions.push({\n          path: path,\n          value: value\n        });\n      }\n    } else if (typeof arr[0] === \"string\") {\n      this._makeDropdown(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({\n          path: path,\n          value: value\n        });\n      }\n    } else if (typeof arr[0] === \"number\") {\n      this._makeRange(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({\n          path: path,\n          value: Number(value)\n        });\n      }\n    }\n  }\n\n  /**\n   * called to update the network with the new settings.\n   * @param {number} value\n   * @param {Array} path    | where to look for the actual option\n   * @private\n   */\n  _update(value, path) {\n    const options = this._constructOptions(value, path);\n    if (this.parent.body && this.parent.body.emitter && this.parent.body.emitter.emit) {\n      this.parent.body.emitter.emit(\"configChange\", options);\n    }\n    this.initialized = true;\n    this.parent.setOptions(options);\n  }\n\n  /**\n   *\n   * @param {string | boolean} value\n   * @param {Array.<string>} path\n   * @param {{}} optionsObj\n   * @returns {{}}\n   * @private\n   */\n  _constructOptions(value, path) {\n    let optionsObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let pointer = optionsObj;\n\n    // when dropdown boxes can be string or boolean, we typecast it into correct types\n    value = value === \"true\" ? true : value;\n    value = value === \"false\" ? false : value;\n    for (let i = 0; i < path.length; i++) {\n      if (path[i] !== \"global\") {\n        if (pointer[path[i]] === undefined) {\n          pointer[path[i]] = {};\n        }\n        if (i !== path.length - 1) {\n          pointer = pointer[path[i]];\n        } else {\n          pointer[path[i]] = value;\n        }\n      }\n    }\n    return optionsObj;\n  }\n\n  /**\n   * @private\n   */\n  _printOptions() {\n    const options = this.getOptions();\n    while (this.optionsContainer.firstChild) {\n      this.optionsContainer.removeChild(this.optionsContainer.firstChild);\n    }\n    this.optionsContainer.appendChild(wrapInTag(\"pre\", \"const options = \" + _JSON$stringify(options, null, 2)));\n  }\n\n  /**\n   *\n   * @returns {{}} options\n   */\n  getOptions() {\n    const options = {};\n    for (let i = 0; i < this.changedOptions.length; i++) {\n      this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options);\n    }\n    return options;\n  }\n};\n\n/**\n * Popup is a class to create a popup window with some text\n */\nlet Popup$1 = class Popup {\n  /**\n   * @param {Element} container       The container object.\n   * @param {string}  overflowMethod  How the popup should act to overflowing ('flip' or 'cap')\n   */\n  constructor(container, overflowMethod) {\n    this.container = container;\n    this.overflowMethod = overflowMethod || \"cap\";\n    this.x = 0;\n    this.y = 0;\n    this.padding = 5;\n    this.hidden = false;\n\n    // create the frame\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-tooltip\";\n    this.container.appendChild(this.frame);\n  }\n\n  /**\n   * @param {number} x   Horizontal position of the popup window\n   * @param {number} y   Vertical position of the popup window\n   */\n  setPosition(x, y) {\n    this.x = _parseInt(x);\n    this.y = _parseInt(y);\n  }\n\n  /**\n   * Set the content for the popup window. This can be HTML code or text.\n   * @param {string | Element} content\n   */\n  setText(content) {\n    if (content instanceof Element) {\n      while (this.frame.firstChild) {\n        this.frame.removeChild(this.frame.firstChild);\n      }\n      this.frame.appendChild(content);\n    } else {\n      // String containing literal text, element has to be used for HTML due to\n      // XSS risks associated with innerHTML (i.e. prevent XSS by accident).\n      this.frame.innerText = content;\n    }\n  }\n\n  /**\n   * Show the popup window\n   * @param {boolean} [doShow]    Show or hide the window\n   */\n  show(doShow) {\n    if (doShow === undefined) {\n      doShow = true;\n    }\n    if (doShow === true) {\n      const height = this.frame.clientHeight;\n      const width = this.frame.clientWidth;\n      const maxHeight = this.frame.parentNode.clientHeight;\n      const maxWidth = this.frame.parentNode.clientWidth;\n      let left = 0,\n        top = 0;\n      if (this.overflowMethod == \"flip\") {\n        let isLeft = false,\n          isTop = true; // Where around the position it's located\n\n        if (this.y - height < this.padding) {\n          isTop = false;\n        }\n        if (this.x + width > maxWidth - this.padding) {\n          isLeft = true;\n        }\n        if (isLeft) {\n          left = this.x - width;\n        } else {\n          left = this.x;\n        }\n        if (isTop) {\n          top = this.y - height;\n        } else {\n          top = this.y;\n        }\n      } else {\n        top = this.y - height;\n        if (top + height + this.padding > maxHeight) {\n          top = maxHeight - height - this.padding;\n        }\n        if (top < this.padding) {\n          top = this.padding;\n        }\n        left = this.x;\n        if (left + width + this.padding > maxWidth) {\n          left = maxWidth - width - this.padding;\n        }\n        if (left < this.padding) {\n          left = this.padding;\n        }\n      }\n      this.frame.style.left = left + \"px\";\n      this.frame.style.top = top + \"px\";\n      this.frame.style.visibility = \"visible\";\n      this.hidden = false;\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Hide the popup window\n   */\n  hide() {\n    this.hidden = true;\n    this.frame.style.left = \"0\";\n    this.frame.style.top = \"0\";\n    this.frame.style.visibility = \"hidden\";\n  }\n\n  /**\n   * Remove the popup window\n   */\n  destroy() {\n    this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n  }\n};\nlet errorFound$1 = false;\nlet allOptions$3;\nconst VALIDATOR_PRINT_STYLE$1 = \"background: #FFeeee; color: #dd0000\";\n\n/**\n *  Used to validate options.\n */\nlet Validator$1 = class Validator {\n  /**\n   * Main function to be called\n   * @param {object} options\n   * @param {object} referenceOptions\n   * @param {object} subObject\n   * @returns {boolean}\n   * @static\n   */\n  static validate(options, referenceOptions, subObject) {\n    errorFound$1 = false;\n    allOptions$3 = referenceOptions;\n    let usedOptions = referenceOptions;\n    if (subObject !== undefined) {\n      usedOptions = referenceOptions[subObject];\n    }\n    Validator.parse(options, usedOptions, []);\n    return errorFound$1;\n  }\n\n  /**\n   * Will traverse an object recursively and check every value\n   * @param {object} options\n   * @param {object} referenceOptions\n   * @param {Array} path    | where to look for the actual option\n   * @static\n   */\n  static parse(options, referenceOptions, path) {\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option)) {\n        Validator.check(option, options, referenceOptions, path);\n      }\n    }\n  }\n\n  /**\n   * Check every value. If the value is an object, call the parse function on that object.\n   * @param {string} option\n   * @param {object} options\n   * @param {object} referenceOptions\n   * @param {Array} path    | where to look for the actual option\n   * @static\n   */\n  static check(option, options, referenceOptions, path) {\n    if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) {\n      Validator.getSuggestion(option, referenceOptions, path);\n      return;\n    }\n    let referenceOption = option;\n    let is_object = true;\n    if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) {\n      // NOTE: This only triggers if the __any__ is in the top level of the options object.\n      //       THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n      // TODO: Examine if needed, remove if possible\n\n      // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n      referenceOption = \"__any__\";\n\n      // if the any-subgroup is not a predefined object in the configurator,\n      // we do not look deeper into the object.\n      is_object = Validator.getType(options[option]) === \"object\";\n    }\n    let refOptionObj = referenceOptions[referenceOption];\n    if (is_object && refOptionObj.__type__ !== undefined) {\n      refOptionObj = refOptionObj.__type__;\n    }\n    Validator.checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path);\n  }\n\n  /**\n   *\n   * @param {string}  option           | the option property\n   * @param {object}  options          | The supplied options object\n   * @param {object}  referenceOptions | The reference options containing all options and their allowed formats\n   * @param {string}  referenceOption  | Usually this is the same as option, except when handling an __any__ tag.\n   * @param {string}  refOptionObj     | This is the type object from the reference options\n   * @param {Array}   path             | where in the object is the option\n   * @static\n   */\n  static checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) {\n    const log = function (message) {\n      console.error(\"%c\" + message + Validator.printLocation(path, option), VALIDATOR_PRINT_STYLE$1);\n    };\n    const optionType = Validator.getType(options[option]);\n    const refOptionType = refOptionObj[optionType];\n    if (refOptionType !== undefined) {\n      // if the type is correct, we check if it is supposed to be one of a few select values\n      if (Validator.getType(refOptionType) === \"array\" && _indexOfInstanceProperty(refOptionType).call(refOptionType, options[option]) === -1) {\n        log('Invalid option detected in \"' + option + '\".' + \" Allowed values are:\" + Validator.print(refOptionType) + ' not \"' + options[option] + '\". ');\n        errorFound$1 = true;\n      } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n        path = copyAndExtendArray(path, option);\n        Validator.parse(options[option], referenceOptions[referenceOption], path);\n      }\n    } else if (refOptionObj[\"any\"] === undefined) {\n      // type of the field is incorrect and the field cannot be any\n      log('Invalid type received for \"' + option + '\". Expected: ' + Validator.print(_Object$keys(refOptionObj)) + \". Received [\" + optionType + '] \"' + options[option] + '\"');\n      errorFound$1 = true;\n    }\n  }\n\n  /**\n   *\n   * @param {object | boolean | number | string | Array.<number> | Date | Node | Moment | undefined | null} object\n   * @returns {string}\n   * @static\n   */\n  static getType(object) {\n    const type = typeof object;\n    if (type === \"object\") {\n      if (object === null) {\n        return \"null\";\n      }\n      if (object instanceof Boolean) {\n        return \"boolean\";\n      }\n      if (object instanceof Number) {\n        return \"number\";\n      }\n      if (object instanceof String) {\n        return \"string\";\n      }\n      if (_Array$isArray(object)) {\n        return \"array\";\n      }\n      if (object instanceof Date) {\n        return \"date\";\n      }\n      if (object.nodeType !== undefined) {\n        return \"dom\";\n      }\n      if (object._isAMomentObject === true) {\n        return \"moment\";\n      }\n      return \"object\";\n    } else if (type === \"number\") {\n      return \"number\";\n    } else if (type === \"boolean\") {\n      return \"boolean\";\n    } else if (type === \"string\") {\n      return \"string\";\n    } else if (type === undefined) {\n      return \"undefined\";\n    }\n    return type;\n  }\n\n  /**\n   * @param {string} option\n   * @param {object} options\n   * @param {Array.<string>} path\n   * @static\n   */\n  static getSuggestion(option, options, path) {\n    const localSearch = Validator.findInOptions(option, options, path, false);\n    const globalSearch = Validator.findInOptions(option, allOptions$3, [], true);\n    const localSearchThreshold = 8;\n    const globalSearchThreshold = 4;\n    let msg;\n    if (localSearch.indexMatch !== undefined) {\n      msg = \" in \" + Validator.printLocation(localSearch.path, option, \"\") + 'Perhaps it was incomplete? Did you mean: \"' + localSearch.indexMatch + '\"?\\n\\n';\n    } else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) {\n      msg = \" in \" + Validator.printLocation(localSearch.path, option, \"\") + \"Perhaps it was misplaced? Matching option found at: \" + Validator.printLocation(globalSearch.path, globalSearch.closestMatch, \"\");\n    } else if (localSearch.distance <= localSearchThreshold) {\n      msg = '. Did you mean \"' + localSearch.closestMatch + '\"?' + Validator.printLocation(localSearch.path, option);\n    } else {\n      msg = \". Did you mean one of these: \" + Validator.print(_Object$keys(options)) + Validator.printLocation(path, option);\n    }\n    console.error('%cUnknown option detected: \"' + option + '\"' + msg, VALIDATOR_PRINT_STYLE$1);\n    errorFound$1 = true;\n  }\n\n  /**\n   * traverse the options in search for a match.\n   * @param {string} option\n   * @param {object} options\n   * @param {Array} path    | where to look for the actual option\n   * @param {boolean} [recursive]\n   * @returns {{closestMatch: string, path: Array, distance: number}}\n   * @static\n   */\n  static findInOptions(option, options, path) {\n    let recursive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    let min = 1e9;\n    let closestMatch = \"\";\n    let closestMatchPath = [];\n    const lowerCaseOption = option.toLowerCase();\n    let indexMatch = undefined;\n    for (const op in options) {\n      let distance;\n      if (options[op].__type__ !== undefined && recursive === true) {\n        const result = Validator.findInOptions(option, options[op], copyAndExtendArray(path, op));\n        if (min > result.distance) {\n          closestMatch = result.closestMatch;\n          closestMatchPath = result.path;\n          min = result.distance;\n          indexMatch = result.indexMatch;\n        }\n      } else {\n        var _context1;\n        if (_indexOfInstanceProperty(_context1 = op.toLowerCase()).call(_context1, lowerCaseOption) !== -1) {\n          indexMatch = op;\n        }\n        distance = Validator.levenshteinDistance(option, op);\n        if (min > distance) {\n          closestMatch = op;\n          closestMatchPath = copyArray(path);\n          min = distance;\n        }\n      }\n    }\n    return {\n      closestMatch: closestMatch,\n      path: closestMatchPath,\n      distance: min,\n      indexMatch: indexMatch\n    };\n  }\n\n  /**\n   * @param {Array.<string>} path\n   * @param {object} option\n   * @param {string} prefix\n   * @returns {string}\n   * @static\n   */\n  static printLocation(path, option) {\n    let prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"Problem value found at: \\n\";\n    let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n    for (let i = 0; i < path.length; i++) {\n      for (let j = 0; j < i + 1; j++) {\n        str += \"  \";\n      }\n      str += path[i] + \": {\\n\";\n    }\n    for (let j = 0; j < path.length + 1; j++) {\n      str += \"  \";\n    }\n    str += option + \"\\n\";\n    for (let i = 0; i < path.length + 1; i++) {\n      for (let j = 0; j < path.length - i; j++) {\n        str += \"  \";\n      }\n      str += \"}\\n\";\n    }\n    return str + \"\\n\\n\";\n  }\n\n  /**\n   * @param {object} options\n   * @returns {string}\n   * @static\n   */\n  static print(options) {\n    return _JSON$stringify(options).replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g, \"\").replace(/(,)/g, \", \");\n  }\n\n  /**\n   *  Compute the edit distance between the two given strings\n   *  http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n   *\n   *  Copyright (c) 2011 Andrei Mackenzie\n   *\n   *  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n   *\n   *  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n   *\n   *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   * @param {string} a\n   * @param {string} b\n   * @returns {Array.<Array.<number>>}}\n   * @static\n   */\n  static levenshteinDistance(a, b) {\n    if (a.length === 0) return b.length;\n    if (b.length === 0) return a.length;\n    const matrix = [];\n\n    // increment along the first column of each row\n    let i;\n    for (i = 0; i <= b.length; i++) {\n      matrix[i] = [i];\n    }\n\n    // increment each column in the first row\n    let j;\n    for (j = 0; j <= a.length; j++) {\n      matrix[0][j] = j;\n    }\n\n    // Fill in the rest of the matrix\n    for (i = 1; i <= b.length; i++) {\n      for (j = 1; j <= a.length; j++) {\n        if (b.charAt(i - 1) == a.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1,\n          // substitution\n          Math.min(matrix[i][j - 1] + 1,\n          // insertion\n          matrix[i - 1][j] + 1)); // deletion\n        }\n      }\n    }\n    return matrix[b.length][a.length];\n  }\n};\nconst Activator$2 = Activator$1;\nconst ColorPicker$2 = ColorPicker$1;\nconst Configurator$2 = Configurator$1;\nconst Hammer$2 = Hammer$1;\nconst Popup$2 = Popup$1;\nconst VALIDATOR_PRINT_STYLE = VALIDATOR_PRINT_STYLE$1;\nconst Validator$2 = Validator$1;\n\nvar util$2 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  Activator: Activator$2,\n  Alea: Alea,\n  ColorPicker: ColorPicker$2,\n  Configurator: Configurator$2,\n  DELETE: DELETE,\n  HSVToHex: HSVToHex,\n  HSVToRGB: HSVToRGB,\n  Hammer: Hammer$2,\n  Popup: Popup$2,\n  RGBToHSV: RGBToHSV,\n  RGBToHex: RGBToHex,\n  VALIDATOR_PRINT_STYLE: VALIDATOR_PRINT_STYLE,\n  Validator: Validator$2,\n  addClassName: addClassName,\n  addCssText: addCssText,\n  binarySearchCustom: binarySearchCustom,\n  binarySearchValue: binarySearchValue,\n  bridgeObject: bridgeObject,\n  copyAndExtendArray: copyAndExtendArray,\n  copyArray: copyArray,\n  deepExtend: deepExtend,\n  deepObjectAssign: deepObjectAssign,\n  easingFunctions: easingFunctions,\n  equalArray: equalArray,\n  extend: extend,\n  fillIfDefined: fillIfDefined,\n  forEach: forEach,\n  getAbsoluteLeft: getAbsoluteLeft,\n  getAbsoluteRight: getAbsoluteRight,\n  getAbsoluteTop: getAbsoluteTop,\n  getScrollBarWidth: getScrollBarWidth,\n  getTarget: getTarget,\n  getType: getType,\n  hasParent: hasParent,\n  hexToHSV: hexToHSV,\n  hexToRGB: hexToRGB,\n  insertSort: insertSort,\n  isDate: isDate,\n  isNumber: isNumber,\n  isObject: isObject,\n  isString: isString,\n  isValidHex: isValidHex,\n  isValidRGB: isValidRGB,\n  isValidRGBA: isValidRGBA,\n  mergeOptions: mergeOptions,\n  option: option,\n  overrideOpacity: overrideOpacity,\n  parseColor: parseColor,\n  preventDefault: preventDefault,\n  pureDeepObjectAssign: pureDeepObjectAssign,\n  recursiveDOMDelete: recursiveDOMDelete,\n  removeClassName: removeClassName,\n  removeCssText: removeCssText,\n  selectiveBridgeObject: selectiveBridgeObject,\n  selectiveDeepExtend: selectiveDeepExtend,\n  selectiveExtend: selectiveExtend,\n  selectiveNotDeepExtend: selectiveNotDeepExtend,\n  throttle: throttle,\n  toArray: toArray,\n  topMost: topMost,\n  updateProperty: updateProperty\n});\n\n// DOM utility methods\n\n/**\n * this prepares the JSON container for allocating SVG elements\n * @param {Object} JSONcontainer\n * @private\n */\nfunction prepareElements(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (!Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) continue;\n    JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;\n    JSONcontainer[elementType].used = [];\n  }\n}\n\n/**\n * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from\n * which to remove the redundant elements.\n *\n * @param {Object} JSONcontainer\n * @private\n */\nfunction cleanupElements(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (!Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) continue;\n    const elementTypeJsonContainer = JSONcontainer[elementType];\n    for (var i = 0; i < elementTypeJsonContainer.redundant.length; i++) {\n      elementTypeJsonContainer.redundant[i].parentNode.removeChild(elementTypeJsonContainer.redundant[i]);\n    }\n    elementTypeJsonContainer.redundant = [];\n  }\n}\n\n/**\n * Ensures that all elements are removed first up so they can be recreated cleanly\n * @param {Object} JSONcontainer\n */\nfunction resetElements(JSONcontainer) {\n  prepareElements(JSONcontainer);\n  cleanupElements(JSONcontainer);\n  prepareElements(JSONcontainer);\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {Object} JSONcontainer\n * @param {Object} svgContainer\n * @returns {Element}\n * @private\n */\nfunction getSVGElement(elementType, JSONcontainer, svgContainer) {\n  var element;\n  // allocate SVG element, if it doesnt yet exist, create one.\n  if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n    // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    } else {\n      // create a new element and add it to the SVG\n      element = document.createElementNS(\"http://www.w3.org/2000/svg\", elementType);\n      svgContainer.appendChild(element);\n    }\n  } else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElementNS(\"http://www.w3.org/2000/svg\", elementType);\n    JSONcontainer[elementType] = {\n      used: [],\n      redundant: []\n    };\n    svgContainer.appendChild(element);\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {Object} JSONcontainer\n * @param {Element} DOMContainer\n * @param {Element} insertBefore\n * @returns {*}\n */\nfunction getDOMElement(elementType, JSONcontainer, DOMContainer, insertBefore) {\n  var element;\n  // allocate DOM element, if it doesnt yet exist, create one.\n  if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n    // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    } else {\n      // create a new element and add it to the SVG\n      element = document.createElement(elementType);\n      if (insertBefore !== undefined) {\n        DOMContainer.insertBefore(element, insertBefore);\n      } else {\n        DOMContainer.appendChild(element);\n      }\n    }\n  } else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElement(elementType);\n    JSONcontainer[elementType] = {\n      used: [],\n      redundant: []\n    };\n    if (insertBefore !== undefined) {\n      DOMContainer.insertBefore(element, insertBefore);\n    } else {\n      DOMContainer.appendChild(element);\n    }\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n}\n\n/**\n * Draw a point object. This is a separate function because it can also be called by the legend.\n * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions\n * as well.\n *\n * @param {number} x\n * @param {number} y\n * @param {Object} groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }\n * @param {Object} JSONcontainer\n * @param {Object} svgContainer\n * @param {Object} labelObj\n * @returns {vis.PointItem}\n */\nfunction drawPoint(x, y, groupTemplate, JSONcontainer, svgContainer, labelObj) {\n  var point;\n  if (groupTemplate.style == \"circle\") {\n    point = getSVGElement(\"circle\", JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"cx\", x);\n    point.setAttributeNS(null, \"cy\", y);\n    point.setAttributeNS(null, \"r\", 0.5 * groupTemplate.size);\n  } else {\n    point = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"x\", x - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"y\", y - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"width\", groupTemplate.size);\n    point.setAttributeNS(null, \"height\", groupTemplate.size);\n  }\n  if (groupTemplate.styles !== undefined) {\n    point.setAttributeNS(null, \"style\", groupTemplate.styles);\n  }\n  point.setAttributeNS(null, \"class\", groupTemplate.className + \" vis-point\");\n  //handle label\n\n  if (labelObj) {\n    var label = getSVGElement(\"text\", JSONcontainer, svgContainer);\n    if (labelObj.xOffset) {\n      x = x + labelObj.xOffset;\n    }\n    if (labelObj.yOffset) {\n      y = y + labelObj.yOffset;\n    }\n    if (labelObj.content) {\n      label.textContent = labelObj.content;\n    }\n    if (labelObj.className) {\n      label.setAttributeNS(null, \"class\", labelObj.className + \" vis-label\");\n    }\n    label.setAttributeNS(null, \"x\", x);\n    label.setAttributeNS(null, \"y\", y);\n  }\n  return point;\n}\n\n/**\n * draw a bar SVG element centered on the X coordinate\n *\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} className\n * @param {Object} JSONcontainer\n * @param {Object} svgContainer\n * @param {string} style\n */\nfunction drawBar(x, y, width, height, className, JSONcontainer, svgContainer, style) {\n  if (height != 0) {\n    if (height < 0) {\n      height *= -1;\n      y -= height;\n    }\n    var rect = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n    rect.setAttributeNS(null, \"x\", x - 0.5 * width);\n    rect.setAttributeNS(null, \"y\", y);\n    rect.setAttributeNS(null, \"width\", width);\n    rect.setAttributeNS(null, \"height\", height);\n    rect.setAttributeNS(null, \"class\", className);\n    if (style) {\n      rect.setAttributeNS(null, \"style\", style);\n    }\n  }\n}\n\n/**\n * get default language\n * @returns {string}\n */\nfunction getNavigatorLanguage() {\n  try {\n    if (!navigator) return \"en\";\n    if (navigator.languages && navigator.languages.length) {\n      return navigator.languages;\n    } else {\n      return navigator.userLanguage || navigator.language || navigator.browserLanguage || \"en\";\n    }\n  } catch (error) {\n    return \"en\";\n  }\n}\n\nvar DOMutil = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  cleanupElements: cleanupElements,\n  drawBar: drawBar,\n  drawPoint: drawPoint,\n  getDOMElement: getDOMElement,\n  getNavigatorLanguage: getNavigatorLanguage,\n  getSVGElement: getSVGElement,\n  prepareElements: prepareElements,\n  resetElements: resetElements\n});\n\nvar getOwnPropertySymbols$2;\nvar hasRequiredGetOwnPropertySymbols$2;\n\nfunction requireGetOwnPropertySymbols$2 () {\n\tif (hasRequiredGetOwnPropertySymbols$2) return getOwnPropertySymbols$2;\n\thasRequiredGetOwnPropertySymbols$2 = 1;\n\trequireEs_symbol();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tgetOwnPropertySymbols$2 = path.Object.getOwnPropertySymbols;\n\treturn getOwnPropertySymbols$2;\n}\n\nvar getOwnPropertySymbols$1;\nvar hasRequiredGetOwnPropertySymbols$1;\n\nfunction requireGetOwnPropertySymbols$1 () {\n\tif (hasRequiredGetOwnPropertySymbols$1) return getOwnPropertySymbols$1;\n\thasRequiredGetOwnPropertySymbols$1 = 1;\n\tvar parent = /*@__PURE__*/ requireGetOwnPropertySymbols$2();\n\n\tgetOwnPropertySymbols$1 = parent;\n\treturn getOwnPropertySymbols$1;\n}\n\nvar getOwnPropertySymbols;\nvar hasRequiredGetOwnPropertySymbols;\n\nfunction requireGetOwnPropertySymbols () {\n\tif (hasRequiredGetOwnPropertySymbols) return getOwnPropertySymbols;\n\thasRequiredGetOwnPropertySymbols = 1;\n\tgetOwnPropertySymbols = /*@__PURE__*/ requireGetOwnPropertySymbols$1();\n\treturn getOwnPropertySymbols;\n}\n\nvar getOwnPropertySymbolsExports = requireGetOwnPropertySymbols();\nvar _Object$getOwnPropertySymbols = /*@__PURE__*/getDefaultExportFromCjs(getOwnPropertySymbolsExports);\n\nvar getOwnPropertyDescriptor$2 = {exports: {}};\n\nvar es_object_getOwnPropertyDescriptor = {};\n\nvar hasRequiredEs_object_getOwnPropertyDescriptor;\n\nfunction requireEs_object_getOwnPropertyDescriptor () {\n\tif (hasRequiredEs_object_getOwnPropertyDescriptor) return es_object_getOwnPropertyDescriptor;\n\thasRequiredEs_object_getOwnPropertyDescriptor = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar nativeGetOwnPropertyDescriptor = /*@__PURE__*/ requireObjectGetOwnPropertyDescriptor().f;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\n\tvar FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); });\n\n\t// `Object.getOwnPropertyDescriptor` method\n\t// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n\t$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n\t  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n\t    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n\t  }\n\t});\n\treturn es_object_getOwnPropertyDescriptor;\n}\n\nvar hasRequiredGetOwnPropertyDescriptor$2;\n\nfunction requireGetOwnPropertyDescriptor$2 () {\n\tif (hasRequiredGetOwnPropertyDescriptor$2) return getOwnPropertyDescriptor$2.exports;\n\thasRequiredGetOwnPropertyDescriptor$2 = 1;\n\trequireEs_object_getOwnPropertyDescriptor();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tvar Object = path.Object;\n\n\tvar getOwnPropertyDescriptor = getOwnPropertyDescriptor$2.exports = function getOwnPropertyDescriptor(it, key) {\n\t  return Object.getOwnPropertyDescriptor(it, key);\n\t};\n\n\tif (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;\n\treturn getOwnPropertyDescriptor$2.exports;\n}\n\nvar getOwnPropertyDescriptor$1;\nvar hasRequiredGetOwnPropertyDescriptor$1;\n\nfunction requireGetOwnPropertyDescriptor$1 () {\n\tif (hasRequiredGetOwnPropertyDescriptor$1) return getOwnPropertyDescriptor$1;\n\thasRequiredGetOwnPropertyDescriptor$1 = 1;\n\tvar parent = /*@__PURE__*/ requireGetOwnPropertyDescriptor$2();\n\n\tgetOwnPropertyDescriptor$1 = parent;\n\treturn getOwnPropertyDescriptor$1;\n}\n\nvar getOwnPropertyDescriptor;\nvar hasRequiredGetOwnPropertyDescriptor;\n\nfunction requireGetOwnPropertyDescriptor () {\n\tif (hasRequiredGetOwnPropertyDescriptor) return getOwnPropertyDescriptor;\n\thasRequiredGetOwnPropertyDescriptor = 1;\n\tgetOwnPropertyDescriptor = /*@__PURE__*/ requireGetOwnPropertyDescriptor$1();\n\treturn getOwnPropertyDescriptor;\n}\n\nvar getOwnPropertyDescriptorExports = requireGetOwnPropertyDescriptor();\nvar _Object$getOwnPropertyDescriptor = /*@__PURE__*/getDefaultExportFromCjs(getOwnPropertyDescriptorExports);\n\nvar es_object_getOwnPropertyDescriptors = {};\n\nvar hasRequiredEs_object_getOwnPropertyDescriptors;\n\nfunction requireEs_object_getOwnPropertyDescriptors () {\n\tif (hasRequiredEs_object_getOwnPropertyDescriptors) return es_object_getOwnPropertyDescriptors;\n\thasRequiredEs_object_getOwnPropertyDescriptors = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar ownKeys = /*@__PURE__*/ requireOwnKeys$3();\n\tvar toIndexedObject = /*@__PURE__*/ requireToIndexedObject();\n\tvar getOwnPropertyDescriptorModule = /*@__PURE__*/ requireObjectGetOwnPropertyDescriptor();\n\tvar createProperty = /*@__PURE__*/ requireCreateProperty();\n\n\t// `Object.getOwnPropertyDescriptors` method\n\t// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n\t$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n\t  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n\t    var O = toIndexedObject(object);\n\t    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n\t    var keys = ownKeys(O);\n\t    var result = {};\n\t    var index = 0;\n\t    var key, descriptor;\n\t    while (keys.length > index) {\n\t      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n\t      if (descriptor !== undefined) createProperty(result, key, descriptor);\n\t    }\n\t    return result;\n\t  }\n\t});\n\treturn es_object_getOwnPropertyDescriptors;\n}\n\nvar getOwnPropertyDescriptors$2;\nvar hasRequiredGetOwnPropertyDescriptors$2;\n\nfunction requireGetOwnPropertyDescriptors$2 () {\n\tif (hasRequiredGetOwnPropertyDescriptors$2) return getOwnPropertyDescriptors$2;\n\thasRequiredGetOwnPropertyDescriptors$2 = 1;\n\trequireEs_object_getOwnPropertyDescriptors();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tgetOwnPropertyDescriptors$2 = path.Object.getOwnPropertyDescriptors;\n\treturn getOwnPropertyDescriptors$2;\n}\n\nvar getOwnPropertyDescriptors$1;\nvar hasRequiredGetOwnPropertyDescriptors$1;\n\nfunction requireGetOwnPropertyDescriptors$1 () {\n\tif (hasRequiredGetOwnPropertyDescriptors$1) return getOwnPropertyDescriptors$1;\n\thasRequiredGetOwnPropertyDescriptors$1 = 1;\n\tvar parent = /*@__PURE__*/ requireGetOwnPropertyDescriptors$2();\n\n\tgetOwnPropertyDescriptors$1 = parent;\n\treturn getOwnPropertyDescriptors$1;\n}\n\nvar getOwnPropertyDescriptors;\nvar hasRequiredGetOwnPropertyDescriptors;\n\nfunction requireGetOwnPropertyDescriptors () {\n\tif (hasRequiredGetOwnPropertyDescriptors) return getOwnPropertyDescriptors;\n\thasRequiredGetOwnPropertyDescriptors = 1;\n\tgetOwnPropertyDescriptors = /*@__PURE__*/ requireGetOwnPropertyDescriptors$1();\n\treturn getOwnPropertyDescriptors;\n}\n\nvar getOwnPropertyDescriptorsExports = requireGetOwnPropertyDescriptors();\nvar _Object$getOwnPropertyDescriptors = /*@__PURE__*/getDefaultExportFromCjs(getOwnPropertyDescriptorsExports);\n\nvar defineProperties$2 = {exports: {}};\n\nvar es_object_defineProperties = {};\n\nvar hasRequiredEs_object_defineProperties;\n\nfunction requireEs_object_defineProperties () {\n\tif (hasRequiredEs_object_defineProperties) return es_object_defineProperties;\n\thasRequiredEs_object_defineProperties = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar defineProperties = /*@__PURE__*/ requireObjectDefineProperties().f;\n\n\t// `Object.defineProperties` method\n\t// https://tc39.es/ecma262/#sec-object.defineproperties\n\t// eslint-disable-next-line es/no-object-defineproperties -- safe\n\t$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {\n\t  defineProperties: defineProperties\n\t});\n\treturn es_object_defineProperties;\n}\n\nvar hasRequiredDefineProperties$2;\n\nfunction requireDefineProperties$2 () {\n\tif (hasRequiredDefineProperties$2) return defineProperties$2.exports;\n\thasRequiredDefineProperties$2 = 1;\n\trequireEs_object_defineProperties();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tvar Object = path.Object;\n\n\tvar defineProperties = defineProperties$2.exports = function defineProperties(T, D) {\n\t  return Object.defineProperties(T, D);\n\t};\n\n\tif (Object.defineProperties.sham) defineProperties.sham = true;\n\treturn defineProperties$2.exports;\n}\n\nvar defineProperties$1;\nvar hasRequiredDefineProperties$1;\n\nfunction requireDefineProperties$1 () {\n\tif (hasRequiredDefineProperties$1) return defineProperties$1;\n\thasRequiredDefineProperties$1 = 1;\n\tvar parent = /*@__PURE__*/ requireDefineProperties$2();\n\n\tdefineProperties$1 = parent;\n\treturn defineProperties$1;\n}\n\nvar defineProperties;\nvar hasRequiredDefineProperties;\n\nfunction requireDefineProperties () {\n\tif (hasRequiredDefineProperties) return defineProperties;\n\thasRequiredDefineProperties = 1;\n\tdefineProperties = /*@__PURE__*/ requireDefineProperties$1();\n\treturn defineProperties;\n}\n\nvar definePropertiesExports = requireDefineProperties();\nvar _Object$defineProperties = /*@__PURE__*/getDefaultExportFromCjs(definePropertiesExports);\n\nvar defineProperty$5 = {exports: {}};\n\nvar es_object_defineProperty = {};\n\nvar hasRequiredEs_object_defineProperty;\n\nfunction requireEs_object_defineProperty () {\n\tif (hasRequiredEs_object_defineProperty) return es_object_defineProperty;\n\thasRequiredEs_object_defineProperty = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty().f;\n\n\t// `Object.defineProperty` method\n\t// https://tc39.es/ecma262/#sec-object.defineproperty\n\t// eslint-disable-next-line es/no-object-defineproperty -- safe\n\t$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {\n\t  defineProperty: defineProperty\n\t});\n\treturn es_object_defineProperty;\n}\n\nvar hasRequiredDefineProperty$5;\n\nfunction requireDefineProperty$5 () {\n\tif (hasRequiredDefineProperty$5) return defineProperty$5.exports;\n\thasRequiredDefineProperty$5 = 1;\n\trequireEs_object_defineProperty();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tvar Object = path.Object;\n\n\tvar defineProperty = defineProperty$5.exports = function defineProperty(it, key, desc) {\n\t  return Object.defineProperty(it, key, desc);\n\t};\n\n\tif (Object.defineProperty.sham) defineProperty.sham = true;\n\treturn defineProperty$5.exports;\n}\n\nvar defineProperty$4;\nvar hasRequiredDefineProperty$4;\n\nfunction requireDefineProperty$4 () {\n\tif (hasRequiredDefineProperty$4) return defineProperty$4;\n\thasRequiredDefineProperty$4 = 1;\n\tvar parent = /*@__PURE__*/ requireDefineProperty$5();\n\n\tdefineProperty$4 = parent;\n\treturn defineProperty$4;\n}\n\nvar defineProperty$3;\nvar hasRequiredDefineProperty$3;\n\nfunction requireDefineProperty$3 () {\n\tif (hasRequiredDefineProperty$3) return defineProperty$3;\n\thasRequiredDefineProperty$3 = 1;\n\tvar parent = /*@__PURE__*/ requireDefineProperty$4();\n\n\tdefineProperty$3 = parent;\n\treturn defineProperty$3;\n}\n\nvar defineProperty$2;\nvar hasRequiredDefineProperty$2;\n\nfunction requireDefineProperty$2 () {\n\tif (hasRequiredDefineProperty$2) return defineProperty$2;\n\thasRequiredDefineProperty$2 = 1;\n\tvar parent = /*@__PURE__*/ requireDefineProperty$3();\n\n\tdefineProperty$2 = parent;\n\treturn defineProperty$2;\n}\n\nvar defineProperty$1;\nvar hasRequiredDefineProperty$1;\n\nfunction requireDefineProperty$1 () {\n\tif (hasRequiredDefineProperty$1) return defineProperty$1;\n\thasRequiredDefineProperty$1 = 1;\n\tdefineProperty$1 = /*@__PURE__*/ requireDefineProperty$2();\n\treturn defineProperty$1;\n}\n\nvar definePropertyExports$1 = /*@__PURE__*/ requireDefineProperty$1();\nvar _Object$defineProperty$1 = /*@__PURE__*/getDefaultExportFromCjs(definePropertyExports$1);\n\nvar esnext_function_metadata = {};\n\nvar hasRequiredEsnext_function_metadata;\n\nfunction requireEsnext_function_metadata () {\n\tif (hasRequiredEsnext_function_metadata) return esnext_function_metadata;\n\thasRequiredEsnext_function_metadata = 1;\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty().f;\n\n\tvar METADATA = wellKnownSymbol('metadata');\n\tvar FunctionPrototype = Function.prototype;\n\n\t// Function.prototype[@@metadata]\n\t// https://github.com/tc39/proposal-decorator-metadata\n\tif (FunctionPrototype[METADATA] === undefined) {\n\t  defineProperty(FunctionPrototype, METADATA, {\n\t    value: null\n\t  });\n\t}\n\treturn esnext_function_metadata;\n}\n\nvar esnext_symbol_asyncDispose = {};\n\nvar hasRequiredEsnext_symbol_asyncDispose;\n\nfunction requireEsnext_symbol_asyncDispose () {\n\tif (hasRequiredEsnext_symbol_asyncDispose) return esnext_symbol_asyncDispose;\n\thasRequiredEsnext_symbol_asyncDispose = 1;\n\t// TODO: Remove from `core-js@4`\n\trequireEs_symbol_asyncDispose();\n\treturn esnext_symbol_asyncDispose;\n}\n\nvar esnext_symbol_dispose = {};\n\nvar hasRequiredEsnext_symbol_dispose;\n\nfunction requireEsnext_symbol_dispose () {\n\tif (hasRequiredEsnext_symbol_dispose) return esnext_symbol_dispose;\n\thasRequiredEsnext_symbol_dispose = 1;\n\t// TODO: Remove from `core-js@4`\n\trequireEs_symbol_dispose();\n\treturn esnext_symbol_dispose;\n}\n\nvar esnext_symbol_metadata = {};\n\nvar hasRequiredEsnext_symbol_metadata;\n\nfunction requireEsnext_symbol_metadata () {\n\tif (hasRequiredEsnext_symbol_metadata) return esnext_symbol_metadata;\n\thasRequiredEsnext_symbol_metadata = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.metadata` well-known symbol\n\t// https://github.com/tc39/proposal-decorators\n\tdefineWellKnownSymbol('metadata');\n\treturn esnext_symbol_metadata;\n}\n\nvar symbol$2;\nvar hasRequiredSymbol$2;\n\nfunction requireSymbol$2 () {\n\tif (hasRequiredSymbol$2) return symbol$2;\n\thasRequiredSymbol$2 = 1;\n\tvar parent = /*@__PURE__*/ requireSymbol$4();\n\n\trequireEsnext_function_metadata();\n\trequireEsnext_symbol_asyncDispose();\n\trequireEsnext_symbol_dispose();\n\trequireEsnext_symbol_metadata();\n\n\tsymbol$2 = parent;\n\treturn symbol$2;\n}\n\nvar esnext_symbol_isRegisteredSymbol = {};\n\nvar symbolIsRegistered;\nvar hasRequiredSymbolIsRegistered;\n\nfunction requireSymbolIsRegistered () {\n\tif (hasRequiredSymbolIsRegistered) return symbolIsRegistered;\n\thasRequiredSymbolIsRegistered = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\n\tvar Symbol = getBuiltIn('Symbol');\n\tvar keyFor = Symbol.keyFor;\n\tvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\n\n\t// `Symbol.isRegisteredSymbol` method\n\t// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n\tsymbolIsRegistered = Symbol.isRegisteredSymbol || function isRegisteredSymbol(value) {\n\t  try {\n\t    return keyFor(thisSymbolValue(value)) !== undefined;\n\t  } catch (error) {\n\t    return false;\n\t  }\n\t};\n\treturn symbolIsRegistered;\n}\n\nvar hasRequiredEsnext_symbol_isRegisteredSymbol;\n\nfunction requireEsnext_symbol_isRegisteredSymbol () {\n\tif (hasRequiredEsnext_symbol_isRegisteredSymbol) return esnext_symbol_isRegisteredSymbol;\n\thasRequiredEsnext_symbol_isRegisteredSymbol = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isRegisteredSymbol = /*@__PURE__*/ requireSymbolIsRegistered();\n\n\t// `Symbol.isRegisteredSymbol` method\n\t// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n\t$({ target: 'Symbol', stat: true }, {\n\t  isRegisteredSymbol: isRegisteredSymbol\n\t});\n\treturn esnext_symbol_isRegisteredSymbol;\n}\n\nvar esnext_symbol_isWellKnownSymbol = {};\n\nvar symbolIsWellKnown;\nvar hasRequiredSymbolIsWellKnown;\n\nfunction requireSymbolIsWellKnown () {\n\tif (hasRequiredSymbolIsWellKnown) return symbolIsWellKnown;\n\thasRequiredSymbolIsWellKnown = 1;\n\tvar shared = /*@__PURE__*/ requireShared();\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar isSymbol = /*@__PURE__*/ requireIsSymbol();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar Symbol = getBuiltIn('Symbol');\n\tvar $isWellKnownSymbol = Symbol.isWellKnownSymbol;\n\tvar getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames');\n\tvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\n\tvar WellKnownSymbolsStore = shared('wks');\n\n\tfor (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {\n\t  // some old engines throws on access to some keys like `arguments` or `caller`\n\t  try {\n\t    var symbolKey = symbolKeys[i];\n\t    if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey);\n\t  } catch (error) { /* empty */ }\n\t}\n\n\t// `Symbol.isWellKnownSymbol` method\n\t// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n\t// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n\tsymbolIsWellKnown = function isWellKnownSymbol(value) {\n\t  if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;\n\t  try {\n\t    var symbol = thisSymbolValue(value);\n\t    for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {\n\t      // eslint-disable-next-line eqeqeq -- polyfilled symbols case\n\t      if (WellKnownSymbolsStore[keys[j]] == symbol) return true;\n\t    }\n\t  } catch (error) { /* empty */ }\n\t  return false;\n\t};\n\treturn symbolIsWellKnown;\n}\n\nvar hasRequiredEsnext_symbol_isWellKnownSymbol;\n\nfunction requireEsnext_symbol_isWellKnownSymbol () {\n\tif (hasRequiredEsnext_symbol_isWellKnownSymbol) return esnext_symbol_isWellKnownSymbol;\n\thasRequiredEsnext_symbol_isWellKnownSymbol = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isWellKnownSymbol = /*@__PURE__*/ requireSymbolIsWellKnown();\n\n\t// `Symbol.isWellKnownSymbol` method\n\t// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n\t// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n\t$({ target: 'Symbol', stat: true, forced: true }, {\n\t  isWellKnownSymbol: isWellKnownSymbol\n\t});\n\treturn esnext_symbol_isWellKnownSymbol;\n}\n\nvar esnext_symbol_customMatcher = {};\n\nvar hasRequiredEsnext_symbol_customMatcher;\n\nfunction requireEsnext_symbol_customMatcher () {\n\tif (hasRequiredEsnext_symbol_customMatcher) return esnext_symbol_customMatcher;\n\thasRequiredEsnext_symbol_customMatcher = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.customMatcher` well-known symbol\n\t// https://github.com/tc39/proposal-pattern-matching\n\tdefineWellKnownSymbol('customMatcher');\n\treturn esnext_symbol_customMatcher;\n}\n\nvar esnext_symbol_observable = {};\n\nvar hasRequiredEsnext_symbol_observable;\n\nfunction requireEsnext_symbol_observable () {\n\tif (hasRequiredEsnext_symbol_observable) return esnext_symbol_observable;\n\thasRequiredEsnext_symbol_observable = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.observable` well-known symbol\n\t// https://github.com/tc39/proposal-observable\n\tdefineWellKnownSymbol('observable');\n\treturn esnext_symbol_observable;\n}\n\nvar esnext_symbol_isRegistered = {};\n\nvar hasRequiredEsnext_symbol_isRegistered;\n\nfunction requireEsnext_symbol_isRegistered () {\n\tif (hasRequiredEsnext_symbol_isRegistered) return esnext_symbol_isRegistered;\n\thasRequiredEsnext_symbol_isRegistered = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isRegisteredSymbol = /*@__PURE__*/ requireSymbolIsRegistered();\n\n\t// `Symbol.isRegistered` method\n\t// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n\t$({ target: 'Symbol', stat: true, name: 'isRegisteredSymbol' }, {\n\t  isRegistered: isRegisteredSymbol\n\t});\n\treturn esnext_symbol_isRegistered;\n}\n\nvar esnext_symbol_isWellKnown = {};\n\nvar hasRequiredEsnext_symbol_isWellKnown;\n\nfunction requireEsnext_symbol_isWellKnown () {\n\tif (hasRequiredEsnext_symbol_isWellKnown) return esnext_symbol_isWellKnown;\n\thasRequiredEsnext_symbol_isWellKnown = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isWellKnownSymbol = /*@__PURE__*/ requireSymbolIsWellKnown();\n\n\t// `Symbol.isWellKnown` method\n\t// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n\t// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n\t$({ target: 'Symbol', stat: true, name: 'isWellKnownSymbol', forced: true }, {\n\t  isWellKnown: isWellKnownSymbol\n\t});\n\treturn esnext_symbol_isWellKnown;\n}\n\nvar esnext_symbol_matcher = {};\n\nvar hasRequiredEsnext_symbol_matcher;\n\nfunction requireEsnext_symbol_matcher () {\n\tif (hasRequiredEsnext_symbol_matcher) return esnext_symbol_matcher;\n\thasRequiredEsnext_symbol_matcher = 1;\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.matcher` well-known symbol\n\t// https://github.com/tc39/proposal-pattern-matching\n\tdefineWellKnownSymbol('matcher');\n\treturn esnext_symbol_matcher;\n}\n\nvar esnext_symbol_metadataKey = {};\n\nvar hasRequiredEsnext_symbol_metadataKey;\n\nfunction requireEsnext_symbol_metadataKey () {\n\tif (hasRequiredEsnext_symbol_metadataKey) return esnext_symbol_metadataKey;\n\thasRequiredEsnext_symbol_metadataKey = 1;\n\t// TODO: Remove from `core-js@4`\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.metadataKey` well-known symbol\n\t// https://github.com/tc39/proposal-decorator-metadata\n\tdefineWellKnownSymbol('metadataKey');\n\treturn esnext_symbol_metadataKey;\n}\n\nvar esnext_symbol_patternMatch = {};\n\nvar hasRequiredEsnext_symbol_patternMatch;\n\nfunction requireEsnext_symbol_patternMatch () {\n\tif (hasRequiredEsnext_symbol_patternMatch) return esnext_symbol_patternMatch;\n\thasRequiredEsnext_symbol_patternMatch = 1;\n\t// TODO: remove from `core-js@4`\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\t// `Symbol.patternMatch` well-known symbol\n\t// https://github.com/tc39/proposal-pattern-matching\n\tdefineWellKnownSymbol('patternMatch');\n\treturn esnext_symbol_patternMatch;\n}\n\nvar esnext_symbol_replaceAll = {};\n\nvar hasRequiredEsnext_symbol_replaceAll;\n\nfunction requireEsnext_symbol_replaceAll () {\n\tif (hasRequiredEsnext_symbol_replaceAll) return esnext_symbol_replaceAll;\n\thasRequiredEsnext_symbol_replaceAll = 1;\n\t// TODO: remove from `core-js@4`\n\tvar defineWellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbolDefine();\n\n\tdefineWellKnownSymbol('replaceAll');\n\treturn esnext_symbol_replaceAll;\n}\n\nvar symbol$1;\nvar hasRequiredSymbol$1;\n\nfunction requireSymbol$1 () {\n\tif (hasRequiredSymbol$1) return symbol$1;\n\thasRequiredSymbol$1 = 1;\n\tvar parent = /*@__PURE__*/ requireSymbol$2();\n\trequireEsnext_symbol_isRegisteredSymbol();\n\trequireEsnext_symbol_isWellKnownSymbol();\n\trequireEsnext_symbol_customMatcher();\n\trequireEsnext_symbol_observable();\n\t// TODO: Remove from `core-js@4`\n\trequireEsnext_symbol_isRegistered();\n\trequireEsnext_symbol_isWellKnown();\n\trequireEsnext_symbol_matcher();\n\trequireEsnext_symbol_metadataKey();\n\trequireEsnext_symbol_patternMatch();\n\trequireEsnext_symbol_replaceAll();\n\n\tsymbol$1 = parent;\n\treturn symbol$1;\n}\n\nvar symbol;\nvar hasRequiredSymbol;\n\nfunction requireSymbol () {\n\tif (hasRequiredSymbol) return symbol;\n\thasRequiredSymbol = 1;\n\tsymbol = /*@__PURE__*/ requireSymbol$1();\n\treturn symbol;\n}\n\nvar symbolExports = /*@__PURE__*/ requireSymbol();\nvar _Symbol = /*@__PURE__*/getDefaultExportFromCjs(symbolExports);\n\nvar es_string_iterator = {};\n\nvar stringMultibyte;\nvar hasRequiredStringMultibyte;\n\nfunction requireStringMultibyte () {\n\tif (hasRequiredStringMultibyte) return stringMultibyte;\n\thasRequiredStringMultibyte = 1;\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar toIntegerOrInfinity = /*@__PURE__*/ requireToIntegerOrInfinity();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\n\tvar charAt = uncurryThis(''.charAt);\n\tvar charCodeAt = uncurryThis(''.charCodeAt);\n\tvar stringSlice = uncurryThis(''.slice);\n\n\tvar createMethod = function (CONVERT_TO_STRING) {\n\t  return function ($this, pos) {\n\t    var S = toString(requireObjectCoercible($this));\n\t    var position = toIntegerOrInfinity(pos);\n\t    var size = S.length;\n\t    var first, second;\n\t    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n\t    first = charCodeAt(S, position);\n\t    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n\t      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n\t        ? CONVERT_TO_STRING\n\t          ? charAt(S, position)\n\t          : first\n\t        : CONVERT_TO_STRING\n\t          ? stringSlice(S, position, position + 2)\n\t          : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n\t  };\n\t};\n\n\tstringMultibyte = {\n\t  // `String.prototype.codePointAt` method\n\t  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n\t  codeAt: createMethod(false),\n\t  // `String.prototype.at` method\n\t  // https://github.com/mathiasbynens/String.prototype.at\n\t  charAt: createMethod(true)\n\t};\n\treturn stringMultibyte;\n}\n\nvar hasRequiredEs_string_iterator;\n\nfunction requireEs_string_iterator () {\n\tif (hasRequiredEs_string_iterator) return es_string_iterator;\n\thasRequiredEs_string_iterator = 1;\n\tvar charAt = /*@__PURE__*/ requireStringMultibyte().charAt;\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar InternalStateModule = /*@__PURE__*/ requireInternalState();\n\tvar defineIterator = /*@__PURE__*/ requireIteratorDefine();\n\tvar createIterResultObject = /*@__PURE__*/ requireCreateIterResultObject();\n\n\tvar STRING_ITERATOR = 'String Iterator';\n\tvar setInternalState = InternalStateModule.set;\n\tvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n\t// `String.prototype[@@iterator]` method\n\t// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\n\tdefineIterator(String, 'String', function (iterated) {\n\t  setInternalState(this, {\n\t    type: STRING_ITERATOR,\n\t    string: toString(iterated),\n\t    index: 0\n\t  });\n\t// `%StringIteratorPrototype%.next` method\n\t// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n\t}, function next() {\n\t  var state = getInternalState(this);\n\t  var string = state.string;\n\t  var index = state.index;\n\t  var point;\n\t  if (index >= string.length) return createIterResultObject(undefined, true);\n\t  point = charAt(string, index);\n\t  state.index += point.length;\n\t  return createIterResultObject(point, false);\n\t});\n\treturn es_string_iterator;\n}\n\nvar iterator$5;\nvar hasRequiredIterator$5;\n\nfunction requireIterator$5 () {\n\tif (hasRequiredIterator$5) return iterator$5;\n\thasRequiredIterator$5 = 1;\n\trequireEs_array_iterator();\n\trequireEs_string_iterator();\n\trequireEs_symbol_iterator();\n\tvar WrappedWellKnownSymbolModule = /*@__PURE__*/ requireWellKnownSymbolWrapped();\n\n\titerator$5 = WrappedWellKnownSymbolModule.f('iterator');\n\treturn iterator$5;\n}\n\nvar iterator$4;\nvar hasRequiredIterator$4;\n\nfunction requireIterator$4 () {\n\tif (hasRequiredIterator$4) return iterator$4;\n\thasRequiredIterator$4 = 1;\n\tvar parent = /*@__PURE__*/ requireIterator$5();\n\trequireWeb_domCollections_iterator();\n\n\titerator$4 = parent;\n\treturn iterator$4;\n}\n\nvar iterator$3;\nvar hasRequiredIterator$3;\n\nfunction requireIterator$3 () {\n\tif (hasRequiredIterator$3) return iterator$3;\n\thasRequiredIterator$3 = 1;\n\tvar parent = /*@__PURE__*/ requireIterator$4();\n\n\titerator$3 = parent;\n\treturn iterator$3;\n}\n\nvar iterator$2;\nvar hasRequiredIterator$2;\n\nfunction requireIterator$2 () {\n\tif (hasRequiredIterator$2) return iterator$2;\n\thasRequiredIterator$2 = 1;\n\tvar parent = /*@__PURE__*/ requireIterator$3();\n\n\titerator$2 = parent;\n\treturn iterator$2;\n}\n\nvar iterator$1;\nvar hasRequiredIterator$1;\n\nfunction requireIterator$1 () {\n\tif (hasRequiredIterator$1) return iterator$1;\n\thasRequiredIterator$1 = 1;\n\titerator$1 = /*@__PURE__*/ requireIterator$2();\n\treturn iterator$1;\n}\n\nvar iteratorExports$1 = /*@__PURE__*/ requireIterator$1();\nvar _Symbol$iterator$1 = /*@__PURE__*/getDefaultExportFromCjs(iteratorExports$1);\n\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator$1 ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\n\nvar toPrimitive$5;\nvar hasRequiredToPrimitive$4;\n\nfunction requireToPrimitive$4 () {\n\tif (hasRequiredToPrimitive$4) return toPrimitive$5;\n\thasRequiredToPrimitive$4 = 1;\n\trequireEs_symbol_toPrimitive();\n\tvar WrappedWellKnownSymbolModule = /*@__PURE__*/ requireWellKnownSymbolWrapped();\n\n\ttoPrimitive$5 = WrappedWellKnownSymbolModule.f('toPrimitive');\n\treturn toPrimitive$5;\n}\n\nvar toPrimitive$4;\nvar hasRequiredToPrimitive$3;\n\nfunction requireToPrimitive$3 () {\n\tif (hasRequiredToPrimitive$3) return toPrimitive$4;\n\thasRequiredToPrimitive$3 = 1;\n\tvar parent = /*@__PURE__*/ requireToPrimitive$4();\n\n\ttoPrimitive$4 = parent;\n\treturn toPrimitive$4;\n}\n\nvar toPrimitive$3;\nvar hasRequiredToPrimitive$2;\n\nfunction requireToPrimitive$2 () {\n\tif (hasRequiredToPrimitive$2) return toPrimitive$3;\n\thasRequiredToPrimitive$2 = 1;\n\tvar parent = /*@__PURE__*/ requireToPrimitive$3();\n\n\ttoPrimitive$3 = parent;\n\treturn toPrimitive$3;\n}\n\nvar toPrimitive$2;\nvar hasRequiredToPrimitive$1;\n\nfunction requireToPrimitive$1 () {\n\tif (hasRequiredToPrimitive$1) return toPrimitive$2;\n\thasRequiredToPrimitive$1 = 1;\n\tvar parent = /*@__PURE__*/ requireToPrimitive$2();\n\n\ttoPrimitive$2 = parent;\n\treturn toPrimitive$2;\n}\n\nvar toPrimitive$1;\nvar hasRequiredToPrimitive;\n\nfunction requireToPrimitive () {\n\tif (hasRequiredToPrimitive) return toPrimitive$1;\n\thasRequiredToPrimitive = 1;\n\ttoPrimitive$1 = /*@__PURE__*/ requireToPrimitive$1();\n\treturn toPrimitive$1;\n}\n\nvar toPrimitiveExports = /*@__PURE__*/ requireToPrimitive();\nvar _Symbol$toPrimitive = /*@__PURE__*/getDefaultExportFromCjs(toPrimitiveExports);\n\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[_Symbol$toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\n\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? _Object$defineProperty$1(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\n\nvar es_array_reduce = {};\n\nvar arrayReduce;\nvar hasRequiredArrayReduce;\n\nfunction requireArrayReduce () {\n\tif (hasRequiredArrayReduce) return arrayReduce;\n\thasRequiredArrayReduce = 1;\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar IndexedObject = /*@__PURE__*/ requireIndexedObject();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\n\tvar $TypeError = TypeError;\n\n\tvar REDUCE_EMPTY = 'Reduce of empty array with no initial value';\n\n\t// `Array.prototype.{ reduce, reduceRight }` methods implementation\n\tvar createMethod = function (IS_RIGHT) {\n\t  return function (that, callbackfn, argumentsLength, memo) {\n\t    var O = toObject(that);\n\t    var self = IndexedObject(O);\n\t    var length = lengthOfArrayLike(O);\n\t    aCallable(callbackfn);\n\t    if (length === 0 && argumentsLength < 2) throw new $TypeError(REDUCE_EMPTY);\n\t    var index = IS_RIGHT ? length - 1 : 0;\n\t    var i = IS_RIGHT ? -1 : 1;\n\t    if (argumentsLength < 2) while (true) {\n\t      if (index in self) {\n\t        memo = self[index];\n\t        index += i;\n\t        break;\n\t      }\n\t      index += i;\n\t      if (IS_RIGHT ? index < 0 : length <= index) {\n\t        throw new $TypeError(REDUCE_EMPTY);\n\t      }\n\t    }\n\t    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n\t      memo = callbackfn(memo, self[index], index, O);\n\t    }\n\t    return memo;\n\t  };\n\t};\n\n\tarrayReduce = {\n\t  // `Array.prototype.reduce` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n\t  left: createMethod(false),\n\t  // `Array.prototype.reduceRight` method\n\t  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n\t  right: createMethod(true)\n\t};\n\treturn arrayReduce;\n}\n\nvar environmentIsNode;\nvar hasRequiredEnvironmentIsNode;\n\nfunction requireEnvironmentIsNode () {\n\tif (hasRequiredEnvironmentIsNode) return environmentIsNode;\n\thasRequiredEnvironmentIsNode = 1;\n\tvar ENVIRONMENT = /*@__PURE__*/ requireEnvironment();\n\n\tenvironmentIsNode = ENVIRONMENT === 'NODE';\n\treturn environmentIsNode;\n}\n\nvar hasRequiredEs_array_reduce;\n\nfunction requireEs_array_reduce () {\n\tif (hasRequiredEs_array_reduce) return es_array_reduce;\n\thasRequiredEs_array_reduce = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $reduce = /*@__PURE__*/ requireArrayReduce().left;\n\tvar arrayMethodIsStrict = /*@__PURE__*/ requireArrayMethodIsStrict();\n\tvar CHROME_VERSION = /*@__PURE__*/ requireEnvironmentV8Version();\n\tvar IS_NODE = /*@__PURE__*/ requireEnvironmentIsNode();\n\n\t// Chrome 80-82 has a critical bug\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\n\tvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\tvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');\n\n\t// `Array.prototype.reduce` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.reduce\n\t$({ target: 'Array', proto: true, forced: FORCED }, {\n\t  reduce: function reduce(callbackfn /* , initialValue */) {\n\t    var length = arguments.length;\n\t    return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n\t  }\n\t});\n\treturn es_array_reduce;\n}\n\nvar reduce$3;\nvar hasRequiredReduce$3;\n\nfunction requireReduce$3 () {\n\tif (hasRequiredReduce$3) return reduce$3;\n\thasRequiredReduce$3 = 1;\n\trequireEs_array_reduce();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\treduce$3 = getBuiltInPrototypeMethod('Array', 'reduce');\n\treturn reduce$3;\n}\n\nvar reduce$2;\nvar hasRequiredReduce$2;\n\nfunction requireReduce$2 () {\n\tif (hasRequiredReduce$2) return reduce$2;\n\thasRequiredReduce$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireReduce$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\treduce$2 = function (it) {\n\t  var own = it.reduce;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduce) ? method : own;\n\t};\n\treturn reduce$2;\n}\n\nvar reduce$1;\nvar hasRequiredReduce$1;\n\nfunction requireReduce$1 () {\n\tif (hasRequiredReduce$1) return reduce$1;\n\thasRequiredReduce$1 = 1;\n\tvar parent = /*@__PURE__*/ requireReduce$2();\n\n\treduce$1 = parent;\n\treturn reduce$1;\n}\n\nvar reduce;\nvar hasRequiredReduce;\n\nfunction requireReduce () {\n\tif (hasRequiredReduce) return reduce;\n\thasRequiredReduce = 1;\n\treduce = /*@__PURE__*/ requireReduce$1();\n\treturn reduce;\n}\n\nvar reduceExports = requireReduce();\nvar _reduceInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(reduceExports);\n\nvar es_array_flatMap = {};\n\nvar flattenIntoArray_1;\nvar hasRequiredFlattenIntoArray;\n\nfunction requireFlattenIntoArray () {\n\tif (hasRequiredFlattenIntoArray) return flattenIntoArray_1;\n\thasRequiredFlattenIntoArray = 1;\n\tvar isArray = /*@__PURE__*/ requireIsArray$3();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar doesNotExceedSafeInteger = /*@__PURE__*/ requireDoesNotExceedSafeInteger();\n\tvar bind = /*@__PURE__*/ requireFunctionBindContext();\n\n\t// `FlattenIntoArray` abstract operation\n\t// https://tc39.es/ecma262/#sec-flattenintoarray\n\tvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n\t  var targetIndex = start;\n\t  var sourceIndex = 0;\n\t  var mapFn = mapper ? bind(mapper, thisArg) : false;\n\t  var element, elementLen;\n\n\t  while (sourceIndex < sourceLen) {\n\t    if (sourceIndex in source) {\n\t      element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n\t      if (depth > 0 && isArray(element)) {\n\t        elementLen = lengthOfArrayLike(element);\n\t        targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n\t      } else {\n\t        doesNotExceedSafeInteger(targetIndex + 1);\n\t        target[targetIndex] = element;\n\t      }\n\n\t      targetIndex++;\n\t    }\n\t    sourceIndex++;\n\t  }\n\t  return targetIndex;\n\t};\n\n\tflattenIntoArray_1 = flattenIntoArray;\n\treturn flattenIntoArray_1;\n}\n\nvar hasRequiredEs_array_flatMap;\n\nfunction requireEs_array_flatMap () {\n\tif (hasRequiredEs_array_flatMap) return es_array_flatMap;\n\thasRequiredEs_array_flatMap = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar flattenIntoArray = /*@__PURE__*/ requireFlattenIntoArray();\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar arraySpeciesCreate = /*@__PURE__*/ requireArraySpeciesCreate();\n\n\t// `Array.prototype.flatMap` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n\t$({ target: 'Array', proto: true }, {\n\t  flatMap: function flatMap(callbackfn /* , thisArg */) {\n\t    var O = toObject(this);\n\t    var sourceLen = lengthOfArrayLike(O);\n\t    var A;\n\t    aCallable(callbackfn);\n\t    A = arraySpeciesCreate(O, 0);\n\t    A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t    return A;\n\t  }\n\t});\n\treturn es_array_flatMap;\n}\n\nvar es_array_unscopables_flatMap = {};\n\nvar hasRequiredEs_array_unscopables_flatMap;\n\nfunction requireEs_array_unscopables_flatMap () {\n\tif (hasRequiredEs_array_unscopables_flatMap) return es_array_unscopables_flatMap;\n\thasRequiredEs_array_unscopables_flatMap = 1;\n\t// this method was added to unscopables after implementation\n\t// in popular engines, so it's moved to a separate module\n\tvar addToUnscopables = /*@__PURE__*/ requireAddToUnscopables();\n\n\t// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\n\taddToUnscopables('flatMap');\n\treturn es_array_unscopables_flatMap;\n}\n\nvar flatMap$3;\nvar hasRequiredFlatMap$3;\n\nfunction requireFlatMap$3 () {\n\tif (hasRequiredFlatMap$3) return flatMap$3;\n\thasRequiredFlatMap$3 = 1;\n\trequireEs_array_flatMap();\n\trequireEs_array_unscopables_flatMap();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tflatMap$3 = getBuiltInPrototypeMethod('Array', 'flatMap');\n\treturn flatMap$3;\n}\n\nvar flatMap$2;\nvar hasRequiredFlatMap$2;\n\nfunction requireFlatMap$2 () {\n\tif (hasRequiredFlatMap$2) return flatMap$2;\n\thasRequiredFlatMap$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireFlatMap$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tflatMap$2 = function (it) {\n\t  var own = it.flatMap;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flatMap) ? method : own;\n\t};\n\treturn flatMap$2;\n}\n\nvar flatMap$1;\nvar hasRequiredFlatMap$1;\n\nfunction requireFlatMap$1 () {\n\tif (hasRequiredFlatMap$1) return flatMap$1;\n\thasRequiredFlatMap$1 = 1;\n\tvar parent = /*@__PURE__*/ requireFlatMap$2();\n\n\tflatMap$1 = parent;\n\treturn flatMap$1;\n}\n\nvar flatMap;\nvar hasRequiredFlatMap;\n\nfunction requireFlatMap () {\n\tif (hasRequiredFlatMap) return flatMap;\n\thasRequiredFlatMap = 1;\n\tflatMap = /*@__PURE__*/ requireFlatMap$1();\n\treturn flatMap;\n}\n\nvar flatMapExports = requireFlatMap();\nvar _flatMapInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(flatMapExports);\n\nvar iterator;\nvar hasRequiredIterator;\n\nfunction requireIterator () {\n\tif (hasRequiredIterator) return iterator;\n\thasRequiredIterator = 1;\n\titerator = /*@__PURE__*/ requireIterator$4();\n\treturn iterator;\n}\n\nvar iteratorExports = requireIterator();\nvar _Symbol$iterator = /*@__PURE__*/getDefaultExportFromCjs(iteratorExports);\n\nvar es_map = {};\n\nvar es_map_constructor = {};\n\nvar internalMetadata = {exports: {}};\n\nvar arrayBufferNonExtensible;\nvar hasRequiredArrayBufferNonExtensible;\n\nfunction requireArrayBufferNonExtensible () {\n\tif (hasRequiredArrayBufferNonExtensible) return arrayBufferNonExtensible;\n\thasRequiredArrayBufferNonExtensible = 1;\n\t// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tarrayBufferNonExtensible = fails(function () {\n\t  if (typeof ArrayBuffer == 'function') {\n\t    var buffer = new ArrayBuffer(8);\n\t    // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n\t    if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n\t  }\n\t});\n\treturn arrayBufferNonExtensible;\n}\n\nvar objectIsExtensible;\nvar hasRequiredObjectIsExtensible;\n\nfunction requireObjectIsExtensible () {\n\tif (hasRequiredObjectIsExtensible) return objectIsExtensible;\n\thasRequiredObjectIsExtensible = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar classof = /*@__PURE__*/ requireClassofRaw();\n\tvar ARRAY_BUFFER_NON_EXTENSIBLE = /*@__PURE__*/ requireArrayBufferNonExtensible();\n\n\t// eslint-disable-next-line es/no-object-isextensible -- safe\n\tvar $isExtensible = Object.isExtensible;\n\tvar FAILS_ON_PRIMITIVES = fails(function () { });\n\n\t// `Object.isExtensible` method\n\t// https://tc39.es/ecma262/#sec-object.isextensible\n\tobjectIsExtensible = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n\t  if (!isObject(it)) return false;\n\t  if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false;\n\t  return $isExtensible ? $isExtensible(it) : true;\n\t} : $isExtensible;\n\treturn objectIsExtensible;\n}\n\nvar freezing;\nvar hasRequiredFreezing;\n\nfunction requireFreezing () {\n\tif (hasRequiredFreezing) return freezing;\n\thasRequiredFreezing = 1;\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tfreezing = !fails(function () {\n\t  // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n\t  return Object.isExtensible(Object.preventExtensions({}));\n\t});\n\treturn freezing;\n}\n\nvar hasRequiredInternalMetadata;\n\nfunction requireInternalMetadata () {\n\tif (hasRequiredInternalMetadata) return internalMetadata.exports;\n\thasRequiredInternalMetadata = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar hiddenKeys = /*@__PURE__*/ requireHiddenKeys();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty().f;\n\tvar getOwnPropertyNamesModule = /*@__PURE__*/ requireObjectGetOwnPropertyNames();\n\tvar getOwnPropertyNamesExternalModule = /*@__PURE__*/ requireObjectGetOwnPropertyNamesExternal();\n\tvar isExtensible = /*@__PURE__*/ requireObjectIsExtensible();\n\tvar uid = /*@__PURE__*/ requireUid();\n\tvar FREEZING = /*@__PURE__*/ requireFreezing();\n\n\tvar REQUIRED = false;\n\tvar METADATA = uid('meta');\n\tvar id = 0;\n\n\tvar setMetadata = function (it) {\n\t  defineProperty(it, METADATA, { value: {\n\t    objectID: 'O' + id++, // object ID\n\t    weakData: {}          // weak collections IDs\n\t  } });\n\t};\n\n\tvar fastKey = function (it, create) {\n\t  // return a primitive with prefix\n\t  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n\t  if (!hasOwn(it, METADATA)) {\n\t    // can't set metadata to uncaught frozen object\n\t    if (!isExtensible(it)) return 'F';\n\t    // not necessary to add metadata\n\t    if (!create) return 'E';\n\t    // add missing metadata\n\t    setMetadata(it);\n\t  // return object ID\n\t  } return it[METADATA].objectID;\n\t};\n\n\tvar getWeakData = function (it, create) {\n\t  if (!hasOwn(it, METADATA)) {\n\t    // can't set metadata to uncaught frozen object\n\t    if (!isExtensible(it)) return true;\n\t    // not necessary to add metadata\n\t    if (!create) return false;\n\t    // add missing metadata\n\t    setMetadata(it);\n\t  // return the store of weak collections IDs\n\t  } return it[METADATA].weakData;\n\t};\n\n\t// add metadata on freeze-family methods calling\n\tvar onFreeze = function (it) {\n\t  if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n\t  return it;\n\t};\n\n\tvar enable = function () {\n\t  meta.enable = function () { /* empty */ };\n\t  REQUIRED = true;\n\t  var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n\t  var splice = uncurryThis([].splice);\n\t  var test = {};\n\t  test[METADATA] = 1;\n\n\t  // prevent exposing of metadata key\n\t  if (getOwnPropertyNames(test).length) {\n\t    getOwnPropertyNamesModule.f = function (it) {\n\t      var result = getOwnPropertyNames(it);\n\t      for (var i = 0, length = result.length; i < length; i++) {\n\t        if (result[i] === METADATA) {\n\t          splice(result, i, 1);\n\t          break;\n\t        }\n\t      } return result;\n\t    };\n\n\t    $({ target: 'Object', stat: true, forced: true }, {\n\t      getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n\t    });\n\t  }\n\t};\n\n\tvar meta = internalMetadata.exports = {\n\t  enable: enable,\n\t  fastKey: fastKey,\n\t  getWeakData: getWeakData,\n\t  onFreeze: onFreeze\n\t};\n\n\thiddenKeys[METADATA] = true;\n\treturn internalMetadata.exports;\n}\n\nvar isArrayIteratorMethod;\nvar hasRequiredIsArrayIteratorMethod;\n\nfunction requireIsArrayIteratorMethod () {\n\tif (hasRequiredIsArrayIteratorMethod) return isArrayIteratorMethod;\n\thasRequiredIsArrayIteratorMethod = 1;\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar Iterators = /*@__PURE__*/ requireIterators();\n\n\tvar ITERATOR = wellKnownSymbol('iterator');\n\tvar ArrayPrototype = Array.prototype;\n\n\t// check on default Array iterator\n\tisArrayIteratorMethod = function (it) {\n\t  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n\t};\n\treturn isArrayIteratorMethod;\n}\n\nvar getIteratorMethod;\nvar hasRequiredGetIteratorMethod;\n\nfunction requireGetIteratorMethod () {\n\tif (hasRequiredGetIteratorMethod) return getIteratorMethod;\n\thasRequiredGetIteratorMethod = 1;\n\tvar classof = /*@__PURE__*/ requireClassof();\n\tvar getMethod = /*@__PURE__*/ requireGetMethod();\n\tvar isNullOrUndefined = /*@__PURE__*/ requireIsNullOrUndefined();\n\tvar Iterators = /*@__PURE__*/ requireIterators();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\n\tvar ITERATOR = wellKnownSymbol('iterator');\n\n\tgetIteratorMethod = function (it) {\n\t  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n\t    || getMethod(it, '@@iterator')\n\t    || Iterators[classof(it)];\n\t};\n\treturn getIteratorMethod;\n}\n\nvar getIterator$5;\nvar hasRequiredGetIterator$6;\n\nfunction requireGetIterator$6 () {\n\tif (hasRequiredGetIterator$6) return getIterator$5;\n\thasRequiredGetIterator$6 = 1;\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar tryToString = /*@__PURE__*/ requireTryToString();\n\tvar getIteratorMethod = /*@__PURE__*/ requireGetIteratorMethod();\n\n\tvar $TypeError = TypeError;\n\n\tgetIterator$5 = function (argument, usingIterator) {\n\t  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n\t  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n\t  throw new $TypeError(tryToString(argument) + ' is not iterable');\n\t};\n\treturn getIterator$5;\n}\n\nvar iteratorClose;\nvar hasRequiredIteratorClose;\n\nfunction requireIteratorClose () {\n\tif (hasRequiredIteratorClose) return iteratorClose;\n\thasRequiredIteratorClose = 1;\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar getMethod = /*@__PURE__*/ requireGetMethod();\n\n\titeratorClose = function (iterator, kind, value) {\n\t  var innerResult, innerError;\n\t  anObject(iterator);\n\t  try {\n\t    innerResult = getMethod(iterator, 'return');\n\t    if (!innerResult) {\n\t      if (kind === 'throw') throw value;\n\t      return value;\n\t    }\n\t    innerResult = call(innerResult, iterator);\n\t  } catch (error) {\n\t    innerError = true;\n\t    innerResult = error;\n\t  }\n\t  if (kind === 'throw') throw value;\n\t  if (innerError) throw innerResult;\n\t  anObject(innerResult);\n\t  return value;\n\t};\n\treturn iteratorClose;\n}\n\nvar iterate;\nvar hasRequiredIterate;\n\nfunction requireIterate () {\n\tif (hasRequiredIterate) return iterate;\n\thasRequiredIterate = 1;\n\tvar bind = /*@__PURE__*/ requireFunctionBindContext();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar tryToString = /*@__PURE__*/ requireTryToString();\n\tvar isArrayIteratorMethod = /*@__PURE__*/ requireIsArrayIteratorMethod();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar getIterator = /*@__PURE__*/ requireGetIterator$6();\n\tvar getIteratorMethod = /*@__PURE__*/ requireGetIteratorMethod();\n\tvar iteratorClose = /*@__PURE__*/ requireIteratorClose();\n\n\tvar $TypeError = TypeError;\n\n\tvar Result = function (stopped, result) {\n\t  this.stopped = stopped;\n\t  this.result = result;\n\t};\n\n\tvar ResultPrototype = Result.prototype;\n\n\titerate = function (iterable, unboundFunction, options) {\n\t  var that = options && options.that;\n\t  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n\t  var IS_RECORD = !!(options && options.IS_RECORD);\n\t  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n\t  var INTERRUPTED = !!(options && options.INTERRUPTED);\n\t  var fn = bind(unboundFunction, that);\n\t  var iterator, iterFn, index, length, result, next, step;\n\n\t  var stop = function (condition) {\n\t    if (iterator) iteratorClose(iterator, 'normal');\n\t    return new Result(true, condition);\n\t  };\n\n\t  var callFn = function (value) {\n\t    if (AS_ENTRIES) {\n\t      anObject(value);\n\t      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n\t    } return INTERRUPTED ? fn(value, stop) : fn(value);\n\t  };\n\n\t  if (IS_RECORD) {\n\t    iterator = iterable.iterator;\n\t  } else if (IS_ITERATOR) {\n\t    iterator = iterable;\n\t  } else {\n\t    iterFn = getIteratorMethod(iterable);\n\t    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n\t    // optimisation for array iterators\n\t    if (isArrayIteratorMethod(iterFn)) {\n\t      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n\t        result = callFn(iterable[index]);\n\t        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n\t      } return new Result(false);\n\t    }\n\t    iterator = getIterator(iterable, iterFn);\n\t  }\n\n\t  next = IS_RECORD ? iterable.next : iterator.next;\n\t  while (!(step = call(next, iterator)).done) {\n\t    try {\n\t      result = callFn(step.value);\n\t    } catch (error) {\n\t      iteratorClose(iterator, 'throw', error);\n\t    }\n\t    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n\t  } return new Result(false);\n\t};\n\treturn iterate;\n}\n\nvar anInstance;\nvar hasRequiredAnInstance;\n\nfunction requireAnInstance () {\n\tif (hasRequiredAnInstance) return anInstance;\n\thasRequiredAnInstance = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\n\tvar $TypeError = TypeError;\n\n\tanInstance = function (it, Prototype) {\n\t  if (isPrototypeOf(Prototype, it)) return it;\n\t  throw new $TypeError('Incorrect invocation');\n\t};\n\treturn anInstance;\n}\n\nvar collection;\nvar hasRequiredCollection;\n\nfunction requireCollection () {\n\tif (hasRequiredCollection) return collection;\n\thasRequiredCollection = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar InternalMetadataModule = /*@__PURE__*/ requireInternalMetadata();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar createNonEnumerableProperty = /*@__PURE__*/ requireCreateNonEnumerableProperty();\n\tvar iterate = /*@__PURE__*/ requireIterate();\n\tvar anInstance = /*@__PURE__*/ requireAnInstance();\n\tvar isCallable = /*@__PURE__*/ requireIsCallable();\n\tvar isObject = /*@__PURE__*/ requireIsObject();\n\tvar isNullOrUndefined = /*@__PURE__*/ requireIsNullOrUndefined();\n\tvar setToStringTag = /*@__PURE__*/ requireSetToStringTag();\n\tvar defineProperty = /*@__PURE__*/ requireObjectDefineProperty().f;\n\tvar forEach = /*@__PURE__*/ requireArrayIteration().forEach;\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar InternalStateModule = /*@__PURE__*/ requireInternalState();\n\n\tvar setInternalState = InternalStateModule.set;\n\tvar internalStateGetterFor = InternalStateModule.getterFor;\n\n\tcollection = function (CONSTRUCTOR_NAME, wrapper, common) {\n\t  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n\t  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n\t  var ADDER = IS_MAP ? 'set' : 'add';\n\t  var NativeConstructor = globalThis[CONSTRUCTOR_NAME];\n\t  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n\t  var exported = {};\n\t  var Constructor;\n\n\t  if (!DESCRIPTORS || !isCallable(NativeConstructor)\n\t    || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n\t  ) {\n\t    // create collection constructor\n\t    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n\t    InternalMetadataModule.enable();\n\t  } else {\n\t    Constructor = wrapper(function (target, iterable) {\n\t      setInternalState(anInstance(target, Prototype), {\n\t        type: CONSTRUCTOR_NAME,\n\t        collection: new NativeConstructor()\n\t      });\n\t      if (!isNullOrUndefined(iterable)) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });\n\t    });\n\n\t    var Prototype = Constructor.prototype;\n\n\t    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n\t    forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n\t      var IS_ADDER = KEY === 'add' || KEY === 'set';\n\t      if (KEY in NativePrototype && !(IS_WEAK && KEY === 'clear')) {\n\t        createNonEnumerableProperty(Prototype, KEY, function (a, b) {\n\t          var collection = getInternalState(this).collection;\n\t          if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY === 'get' ? undefined : false;\n\t          var result = collection[KEY](a === 0 ? 0 : a, b);\n\t          return IS_ADDER ? this : result;\n\t        });\n\t      }\n\t    });\n\n\t    IS_WEAK || defineProperty(Prototype, 'size', {\n\t      configurable: true,\n\t      get: function () {\n\t        return getInternalState(this).collection.size;\n\t      }\n\t    });\n\t  }\n\n\t  setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n\t  exported[CONSTRUCTOR_NAME] = Constructor;\n\t  $({ global: true, forced: true }, exported);\n\n\t  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n\t  return Constructor;\n\t};\n\treturn collection;\n}\n\nvar defineBuiltIns;\nvar hasRequiredDefineBuiltIns;\n\nfunction requireDefineBuiltIns () {\n\tif (hasRequiredDefineBuiltIns) return defineBuiltIns;\n\thasRequiredDefineBuiltIns = 1;\n\tvar defineBuiltIn = /*@__PURE__*/ requireDefineBuiltIn();\n\n\tdefineBuiltIns = function (target, src, options) {\n\t  for (var key in src) {\n\t    if (options && options.unsafe && target[key]) target[key] = src[key];\n\t    else defineBuiltIn(target, key, src[key], options);\n\t  } return target;\n\t};\n\treturn defineBuiltIns;\n}\n\nvar setSpecies;\nvar hasRequiredSetSpecies;\n\nfunction requireSetSpecies () {\n\tif (hasRequiredSetSpecies) return setSpecies;\n\thasRequiredSetSpecies = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar defineBuiltInAccessor = /*@__PURE__*/ requireDefineBuiltInAccessor();\n\tvar wellKnownSymbol = /*@__PURE__*/ requireWellKnownSymbol();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\n\tvar SPECIES = wellKnownSymbol('species');\n\n\tsetSpecies = function (CONSTRUCTOR_NAME) {\n\t  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n\t  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n\t    defineBuiltInAccessor(Constructor, SPECIES, {\n\t      configurable: true,\n\t      get: function () { return this; }\n\t    });\n\t  }\n\t};\n\treturn setSpecies;\n}\n\nvar collectionStrong;\nvar hasRequiredCollectionStrong;\n\nfunction requireCollectionStrong () {\n\tif (hasRequiredCollectionStrong) return collectionStrong;\n\thasRequiredCollectionStrong = 1;\n\tvar create = /*@__PURE__*/ requireObjectCreate();\n\tvar defineBuiltInAccessor = /*@__PURE__*/ requireDefineBuiltInAccessor();\n\tvar defineBuiltIns = /*@__PURE__*/ requireDefineBuiltIns();\n\tvar bind = /*@__PURE__*/ requireFunctionBindContext();\n\tvar anInstance = /*@__PURE__*/ requireAnInstance();\n\tvar isNullOrUndefined = /*@__PURE__*/ requireIsNullOrUndefined();\n\tvar iterate = /*@__PURE__*/ requireIterate();\n\tvar defineIterator = /*@__PURE__*/ requireIteratorDefine();\n\tvar createIterResultObject = /*@__PURE__*/ requireCreateIterResultObject();\n\tvar setSpecies = /*@__PURE__*/ requireSetSpecies();\n\tvar DESCRIPTORS = /*@__PURE__*/ requireDescriptors();\n\tvar fastKey = /*@__PURE__*/ requireInternalMetadata().fastKey;\n\tvar InternalStateModule = /*@__PURE__*/ requireInternalState();\n\n\tvar setInternalState = InternalStateModule.set;\n\tvar internalStateGetterFor = InternalStateModule.getterFor;\n\n\tcollectionStrong = {\n\t  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n\t    var Constructor = wrapper(function (that, iterable) {\n\t      anInstance(that, Prototype);\n\t      setInternalState(that, {\n\t        type: CONSTRUCTOR_NAME,\n\t        index: create(null),\n\t        first: null,\n\t        last: null,\n\t        size: 0\n\t      });\n\t      if (!DESCRIPTORS) that.size = 0;\n\t      if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n\t    });\n\n\t    var Prototype = Constructor.prototype;\n\n\t    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n\t    var define = function (that, key, value) {\n\t      var state = getInternalState(that);\n\t      var entry = getEntry(that, key);\n\t      var previous, index;\n\t      // change existing entry\n\t      if (entry) {\n\t        entry.value = value;\n\t      // create new entry\n\t      } else {\n\t        state.last = entry = {\n\t          index: index = fastKey(key, true),\n\t          key: key,\n\t          value: value,\n\t          previous: previous = state.last,\n\t          next: null,\n\t          removed: false\n\t        };\n\t        if (!state.first) state.first = entry;\n\t        if (previous) previous.next = entry;\n\t        if (DESCRIPTORS) state.size++;\n\t        else that.size++;\n\t        // add to index\n\t        if (index !== 'F') state.index[index] = entry;\n\t      } return that;\n\t    };\n\n\t    var getEntry = function (that, key) {\n\t      var state = getInternalState(that);\n\t      // fast case\n\t      var index = fastKey(key);\n\t      var entry;\n\t      if (index !== 'F') return state.index[index];\n\t      // frozen object case\n\t      for (entry = state.first; entry; entry = entry.next) {\n\t        if (entry.key === key) return entry;\n\t      }\n\t    };\n\n\t    defineBuiltIns(Prototype, {\n\t      // `{ Map, Set }.prototype.clear()` methods\n\t      // https://tc39.es/ecma262/#sec-map.prototype.clear\n\t      // https://tc39.es/ecma262/#sec-set.prototype.clear\n\t      clear: function clear() {\n\t        var that = this;\n\t        var state = getInternalState(that);\n\t        var entry = state.first;\n\t        while (entry) {\n\t          entry.removed = true;\n\t          if (entry.previous) entry.previous = entry.previous.next = null;\n\t          entry = entry.next;\n\t        }\n\t        state.first = state.last = null;\n\t        state.index = create(null);\n\t        if (DESCRIPTORS) state.size = 0;\n\t        else that.size = 0;\n\t      },\n\t      // `{ Map, Set }.prototype.delete(key)` methods\n\t      // https://tc39.es/ecma262/#sec-map.prototype.delete\n\t      // https://tc39.es/ecma262/#sec-set.prototype.delete\n\t      'delete': function (key) {\n\t        var that = this;\n\t        var state = getInternalState(that);\n\t        var entry = getEntry(that, key);\n\t        if (entry) {\n\t          var next = entry.next;\n\t          var prev = entry.previous;\n\t          delete state.index[entry.index];\n\t          entry.removed = true;\n\t          if (prev) prev.next = next;\n\t          if (next) next.previous = prev;\n\t          if (state.first === entry) state.first = next;\n\t          if (state.last === entry) state.last = prev;\n\t          if (DESCRIPTORS) state.size--;\n\t          else that.size--;\n\t        } return !!entry;\n\t      },\n\t      // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n\t      // https://tc39.es/ecma262/#sec-map.prototype.foreach\n\t      // https://tc39.es/ecma262/#sec-set.prototype.foreach\n\t      forEach: function forEach(callbackfn /* , that = undefined */) {\n\t        var state = getInternalState(this);\n\t        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t        var entry;\n\t        while (entry = entry ? entry.next : state.first) {\n\t          boundFunction(entry.value, entry.key, this);\n\t          // revert to the last existing entry\n\t          while (entry && entry.removed) entry = entry.previous;\n\t        }\n\t      },\n\t      // `{ Map, Set}.prototype.has(key)` methods\n\t      // https://tc39.es/ecma262/#sec-map.prototype.has\n\t      // https://tc39.es/ecma262/#sec-set.prototype.has\n\t      has: function has(key) {\n\t        return !!getEntry(this, key);\n\t      }\n\t    });\n\n\t    defineBuiltIns(Prototype, IS_MAP ? {\n\t      // `Map.prototype.get(key)` method\n\t      // https://tc39.es/ecma262/#sec-map.prototype.get\n\t      get: function get(key) {\n\t        var entry = getEntry(this, key);\n\t        return entry && entry.value;\n\t      },\n\t      // `Map.prototype.set(key, value)` method\n\t      // https://tc39.es/ecma262/#sec-map.prototype.set\n\t      set: function set(key, value) {\n\t        return define(this, key === 0 ? 0 : key, value);\n\t      }\n\t    } : {\n\t      // `Set.prototype.add(value)` method\n\t      // https://tc39.es/ecma262/#sec-set.prototype.add\n\t      add: function add(value) {\n\t        return define(this, value = value === 0 ? 0 : value, value);\n\t      }\n\t    });\n\t    if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', {\n\t      configurable: true,\n\t      get: function () {\n\t        return getInternalState(this).size;\n\t      }\n\t    });\n\t    return Constructor;\n\t  },\n\t  setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n\t    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n\t    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\t    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n\t    // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n\t    // https://tc39.es/ecma262/#sec-map.prototype.entries\n\t    // https://tc39.es/ecma262/#sec-map.prototype.keys\n\t    // https://tc39.es/ecma262/#sec-map.prototype.values\n\t    // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n\t    // https://tc39.es/ecma262/#sec-set.prototype.entries\n\t    // https://tc39.es/ecma262/#sec-set.prototype.keys\n\t    // https://tc39.es/ecma262/#sec-set.prototype.values\n\t    // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n\t    defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n\t      setInternalState(this, {\n\t        type: ITERATOR_NAME,\n\t        target: iterated,\n\t        state: getInternalCollectionState(iterated),\n\t        kind: kind,\n\t        last: null\n\t      });\n\t    }, function () {\n\t      var state = getInternalIteratorState(this);\n\t      var kind = state.kind;\n\t      var entry = state.last;\n\t      // revert to the last existing entry\n\t      while (entry && entry.removed) entry = entry.previous;\n\t      // get next entry\n\t      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n\t        // or finish the iteration\n\t        state.target = null;\n\t        return createIterResultObject(undefined, true);\n\t      }\n\t      // return step by kind\n\t      if (kind === 'keys') return createIterResultObject(entry.key, false);\n\t      if (kind === 'values') return createIterResultObject(entry.value, false);\n\t      return createIterResultObject([entry.key, entry.value], false);\n\t    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n\t    // `{ Map, Set }.prototype[@@species]` accessors\n\t    // https://tc39.es/ecma262/#sec-get-map-@@species\n\t    // https://tc39.es/ecma262/#sec-get-set-@@species\n\t    setSpecies(CONSTRUCTOR_NAME);\n\t  }\n\t};\n\treturn collectionStrong;\n}\n\nvar hasRequiredEs_map_constructor;\n\nfunction requireEs_map_constructor () {\n\tif (hasRequiredEs_map_constructor) return es_map_constructor;\n\thasRequiredEs_map_constructor = 1;\n\tvar collection = /*@__PURE__*/ requireCollection();\n\tvar collectionStrong = /*@__PURE__*/ requireCollectionStrong();\n\n\t// `Map` constructor\n\t// https://tc39.es/ecma262/#sec-map-objects\n\tcollection('Map', function (init) {\n\t  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n\t}, collectionStrong);\n\treturn es_map_constructor;\n}\n\nvar hasRequiredEs_map;\n\nfunction requireEs_map () {\n\tif (hasRequiredEs_map) return es_map;\n\thasRequiredEs_map = 1;\n\t// TODO: Remove this module from `core-js@4` since it's replaced to module below\n\trequireEs_map_constructor();\n\treturn es_map;\n}\n\nvar es_map_groupBy = {};\n\nvar caller;\nvar hasRequiredCaller;\n\nfunction requireCaller () {\n\tif (hasRequiredCaller) return caller;\n\thasRequiredCaller = 1;\n\tcaller = function (methodName, numArgs) {\n\t  return numArgs === 1 ? function (object, arg) {\n\t    return object[methodName](arg);\n\t  } : function (object, arg1, arg2) {\n\t    return object[methodName](arg1, arg2);\n\t  };\n\t};\n\treturn caller;\n}\n\nvar mapHelpers;\nvar hasRequiredMapHelpers;\n\nfunction requireMapHelpers () {\n\tif (hasRequiredMapHelpers) return mapHelpers;\n\thasRequiredMapHelpers = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar caller = /*@__PURE__*/ requireCaller();\n\n\tvar Map = getBuiltIn('Map');\n\n\tmapHelpers = {\n\t  Map: Map,\n\t  set: caller('set', 2),\n\t  get: caller('get', 1),\n\t  has: caller('has', 1),\n\t  remove: caller('delete', 1),\n\t  proto: Map.prototype\n\t};\n\treturn mapHelpers;\n}\n\nvar hasRequiredEs_map_groupBy;\n\nfunction requireEs_map_groupBy () {\n\tif (hasRequiredEs_map_groupBy) return es_map_groupBy;\n\thasRequiredEs_map_groupBy = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar requireObjectCoercible = /*@__PURE__*/ requireRequireObjectCoercible();\n\tvar iterate = /*@__PURE__*/ requireIterate();\n\tvar MapHelpers = /*@__PURE__*/ requireMapHelpers();\n\tvar IS_PURE = /*@__PURE__*/ requireIsPure();\n\tvar fails = /*@__PURE__*/ requireFails();\n\n\tvar Map = MapHelpers.Map;\n\tvar has = MapHelpers.has;\n\tvar get = MapHelpers.get;\n\tvar set = MapHelpers.set;\n\tvar push = uncurryThis([].push);\n\n\t// https://bugs.webkit.org/show_bug.cgi?id=271524\n\tvar DOES_NOT_WORK_WITH_PRIMITIVES = IS_PURE || fails(function () {\n\t  return Map.groupBy('ab', function (it) {\n\t    return it;\n\t  }).get('a').length !== 1;\n\t});\n\n\t// `Map.groupBy` method\n\t// https://tc39.es/ecma262/#sec-map.groupby\n\t$({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES }, {\n\t  groupBy: function groupBy(items, callbackfn) {\n\t    requireObjectCoercible(items);\n\t    aCallable(callbackfn);\n\t    var map = new Map();\n\t    var k = 0;\n\t    iterate(items, function (value) {\n\t      var key = callbackfn(value, k++);\n\t      if (!has(map, key)) set(map, key, [value]);\n\t      else push(get(map, key), value);\n\t    });\n\t    return map;\n\t  }\n\t});\n\treturn es_map_groupBy;\n}\n\nvar map$2;\nvar hasRequiredMap$2;\n\nfunction requireMap$2 () {\n\tif (hasRequiredMap$2) return map$2;\n\thasRequiredMap$2 = 1;\n\trequireEs_array_iterator();\n\trequireEs_map();\n\trequireEs_map_groupBy();\n\trequireEs_string_iterator();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tmap$2 = path.Map;\n\treturn map$2;\n}\n\nvar map$1;\nvar hasRequiredMap$1;\n\nfunction requireMap$1 () {\n\tif (hasRequiredMap$1) return map$1;\n\thasRequiredMap$1 = 1;\n\tvar parent = /*@__PURE__*/ requireMap$2();\n\trequireWeb_domCollections_iterator();\n\n\tmap$1 = parent;\n\treturn map$1;\n}\n\nvar map;\nvar hasRequiredMap;\n\nfunction requireMap () {\n\tif (hasRequiredMap) return map;\n\thasRequiredMap = 1;\n\tmap = /*@__PURE__*/ requireMap$1();\n\treturn map;\n}\n\nvar mapExports = requireMap();\nvar _Map = /*@__PURE__*/getDefaultExportFromCjs(mapExports);\n\nvar es_set = {};\n\nvar es_set_constructor = {};\n\nvar hasRequiredEs_set_constructor;\n\nfunction requireEs_set_constructor () {\n\tif (hasRequiredEs_set_constructor) return es_set_constructor;\n\thasRequiredEs_set_constructor = 1;\n\tvar collection = /*@__PURE__*/ requireCollection();\n\tvar collectionStrong = /*@__PURE__*/ requireCollectionStrong();\n\n\t// `Set` constructor\n\t// https://tc39.es/ecma262/#sec-set-objects\n\tcollection('Set', function (init) {\n\t  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n\t}, collectionStrong);\n\treturn es_set_constructor;\n}\n\nvar hasRequiredEs_set;\n\nfunction requireEs_set () {\n\tif (hasRequiredEs_set) return es_set;\n\thasRequiredEs_set = 1;\n\t// TODO: Remove this module from `core-js@4` since it's replaced to module below\n\trequireEs_set_constructor();\n\treturn es_set;\n}\n\nvar es_set_difference_v2 = {};\n\nvar aSet;\nvar hasRequiredASet;\n\nfunction requireASet () {\n\tif (hasRequiredASet) return aSet;\n\thasRequiredASet = 1;\n\tvar tryToString = /*@__PURE__*/ requireTryToString();\n\n\tvar $TypeError = TypeError;\n\n\t// Perform ? RequireInternalSlot(M, [[SetData]])\n\taSet = function (it) {\n\t  if (typeof it == 'object' && 'size' in it && 'has' in it && 'add' in it && 'delete' in it && 'keys' in it) return it;\n\t  throw new $TypeError(tryToString(it) + ' is not a set');\n\t};\n\treturn aSet;\n}\n\nvar setHelpers;\nvar hasRequiredSetHelpers;\n\nfunction requireSetHelpers () {\n\tif (hasRequiredSetHelpers) return setHelpers;\n\thasRequiredSetHelpers = 1;\n\tvar getBuiltIn = /*@__PURE__*/ requireGetBuiltIn();\n\tvar caller = /*@__PURE__*/ requireCaller();\n\n\tvar Set = getBuiltIn('Set');\n\tvar SetPrototype = Set.prototype;\n\n\tsetHelpers = {\n\t  Set: Set,\n\t  add: caller('add', 1),\n\t  has: caller('has', 1),\n\t  remove: caller('delete', 1),\n\t  proto: SetPrototype\n\t};\n\treturn setHelpers;\n}\n\nvar iterateSimple;\nvar hasRequiredIterateSimple;\n\nfunction requireIterateSimple () {\n\tif (hasRequiredIterateSimple) return iterateSimple;\n\thasRequiredIterateSimple = 1;\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\n\titerateSimple = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n\t  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n\t  var next = record.next;\n\t  var step, result;\n\t  while (!(step = call(next, iterator)).done) {\n\t    result = fn(step.value);\n\t    if (result !== undefined) return result;\n\t  }\n\t};\n\treturn iterateSimple;\n}\n\nvar setIterate;\nvar hasRequiredSetIterate;\n\nfunction requireSetIterate () {\n\tif (hasRequiredSetIterate) return setIterate;\n\thasRequiredSetIterate = 1;\n\tvar iterateSimple = /*@__PURE__*/ requireIterateSimple();\n\n\tsetIterate = function (set, fn, interruptible) {\n\t  return interruptible ? iterateSimple(set.keys(), fn, true) : set.forEach(fn);\n\t};\n\treturn setIterate;\n}\n\nvar setClone;\nvar hasRequiredSetClone;\n\nfunction requireSetClone () {\n\tif (hasRequiredSetClone) return setClone;\n\thasRequiredSetClone = 1;\n\tvar SetHelpers = /*@__PURE__*/ requireSetHelpers();\n\tvar iterate = /*@__PURE__*/ requireSetIterate();\n\n\tvar Set = SetHelpers.Set;\n\tvar add = SetHelpers.add;\n\n\tsetClone = function (set) {\n\t  var result = new Set();\n\t  iterate(set, function (it) {\n\t    add(result, it);\n\t  });\n\t  return result;\n\t};\n\treturn setClone;\n}\n\nvar setSize;\nvar hasRequiredSetSize;\n\nfunction requireSetSize () {\n\tif (hasRequiredSetSize) return setSize;\n\thasRequiredSetSize = 1;\n\tsetSize = function (set) {\n\t  return set.size;\n\t};\n\treturn setSize;\n}\n\nvar getIteratorDirect;\nvar hasRequiredGetIteratorDirect;\n\nfunction requireGetIteratorDirect () {\n\tif (hasRequiredGetIteratorDirect) return getIteratorDirect;\n\thasRequiredGetIteratorDirect = 1;\n\t// `GetIteratorDirect(obj)` abstract operation\n\t// https://tc39.es/ecma262/#sec-getiteratordirect\n\tgetIteratorDirect = function (obj) {\n\t  return {\n\t    iterator: obj,\n\t    next: obj.next,\n\t    done: false\n\t  };\n\t};\n\treturn getIteratorDirect;\n}\n\nvar getSetRecord;\nvar hasRequiredGetSetRecord;\n\nfunction requireGetSetRecord () {\n\tif (hasRequiredGetSetRecord) return getSetRecord;\n\thasRequiredGetSetRecord = 1;\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar anObject = /*@__PURE__*/ requireAnObject();\n\tvar call = /*@__PURE__*/ requireFunctionCall();\n\tvar toIntegerOrInfinity = /*@__PURE__*/ requireToIntegerOrInfinity();\n\tvar getIteratorDirect = /*@__PURE__*/ requireGetIteratorDirect();\n\n\tvar INVALID_SIZE = 'Invalid size';\n\tvar $RangeError = RangeError;\n\tvar $TypeError = TypeError;\n\tvar max = Math.max;\n\n\tvar SetRecord = function (set, intSize) {\n\t  this.set = set;\n\t  this.size = max(intSize, 0);\n\t  this.has = aCallable(set.has);\n\t  this.keys = aCallable(set.keys);\n\t};\n\n\tSetRecord.prototype = {\n\t  getIterator: function () {\n\t    return getIteratorDirect(anObject(call(this.keys, this.set)));\n\t  },\n\t  includes: function (it) {\n\t    return call(this.has, this.set, it);\n\t  }\n\t};\n\n\t// `GetSetRecord` abstract operation\n\t// https://tc39.es/proposal-set-methods/#sec-getsetrecord\n\tgetSetRecord = function (obj) {\n\t  anObject(obj);\n\t  var numSize = +obj.size;\n\t  // NOTE: If size is undefined, then numSize will be NaN\n\t  // eslint-disable-next-line no-self-compare -- NaN check\n\t  if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n\t  var intSize = toIntegerOrInfinity(numSize);\n\t  if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n\t  return new SetRecord(obj, intSize);\n\t};\n\treturn getSetRecord;\n}\n\nvar setDifference;\nvar hasRequiredSetDifference;\n\nfunction requireSetDifference () {\n\tif (hasRequiredSetDifference) return setDifference;\n\thasRequiredSetDifference = 1;\n\tvar aSet = /*@__PURE__*/ requireASet();\n\tvar SetHelpers = /*@__PURE__*/ requireSetHelpers();\n\tvar clone = /*@__PURE__*/ requireSetClone();\n\tvar size = /*@__PURE__*/ requireSetSize();\n\tvar getSetRecord = /*@__PURE__*/ requireGetSetRecord();\n\tvar iterateSet = /*@__PURE__*/ requireSetIterate();\n\tvar iterateSimple = /*@__PURE__*/ requireIterateSimple();\n\n\tvar has = SetHelpers.has;\n\tvar remove = SetHelpers.remove;\n\n\t// `Set.prototype.difference` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.difference\n\tsetDifference = function difference(other) {\n\t  var O = aSet(this);\n\t  var otherRec = getSetRecord(other);\n\t  var result = clone(O);\n\t  if (size(O) <= otherRec.size) iterateSet(O, function (e) {\n\t    if (otherRec.includes(e)) remove(result, e);\n\t  });\n\t  else iterateSimple(otherRec.getIterator(), function (e) {\n\t    if (has(result, e)) remove(result, e);\n\t  });\n\t  return result;\n\t};\n\treturn setDifference;\n}\n\nvar setMethodAcceptSetLike;\nvar hasRequiredSetMethodAcceptSetLike;\n\nfunction requireSetMethodAcceptSetLike () {\n\tif (hasRequiredSetMethodAcceptSetLike) return setMethodAcceptSetLike;\n\thasRequiredSetMethodAcceptSetLike = 1;\n\tsetMethodAcceptSetLike = function () {\n\t  return false;\n\t};\n\treturn setMethodAcceptSetLike;\n}\n\nvar hasRequiredEs_set_difference_v2;\n\nfunction requireEs_set_difference_v2 () {\n\tif (hasRequiredEs_set_difference_v2) return es_set_difference_v2;\n\thasRequiredEs_set_difference_v2 = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar difference = /*@__PURE__*/ requireSetDifference();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar setMethodAcceptSetLike = /*@__PURE__*/ requireSetMethodAcceptSetLike();\n\n\tvar SET_LIKE_INCORRECT_BEHAVIOR = !setMethodAcceptSetLike('difference', function (result) {\n\t  return result.size === 0;\n\t});\n\n\tvar FORCED = SET_LIKE_INCORRECT_BEHAVIOR || fails(function () {\n\t  // https://bugs.webkit.org/show_bug.cgi?id=288595\n\t  var setLike = {\n\t    size: 1,\n\t    has: function () { return true; },\n\t    keys: function () {\n\t      var index = 0;\n\t      return {\n\t        next: function () {\n\t          var done = index++ > 1;\n\t          if (baseSet.has(1)) baseSet.clear();\n\t          return { done: done, value: 2 };\n\t        }\n\t      };\n\t    }\n\t  };\n\t  // eslint-disable-next-line es/no-set -- testing\n\t  var baseSet = new Set([1, 2, 3, 4]);\n\t  // eslint-disable-next-line es/no-set-prototype-difference -- testing\n\t  return baseSet.difference(setLike).size !== 3;\n\t});\n\n\t// `Set.prototype.difference` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.difference\n\t$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n\t  difference: difference\n\t});\n\treturn es_set_difference_v2;\n}\n\nvar es_set_intersection_v2 = {};\n\nvar setIntersection;\nvar hasRequiredSetIntersection;\n\nfunction requireSetIntersection () {\n\tif (hasRequiredSetIntersection) return setIntersection;\n\thasRequiredSetIntersection = 1;\n\tvar aSet = /*@__PURE__*/ requireASet();\n\tvar SetHelpers = /*@__PURE__*/ requireSetHelpers();\n\tvar size = /*@__PURE__*/ requireSetSize();\n\tvar getSetRecord = /*@__PURE__*/ requireGetSetRecord();\n\tvar iterateSet = /*@__PURE__*/ requireSetIterate();\n\tvar iterateSimple = /*@__PURE__*/ requireIterateSimple();\n\n\tvar Set = SetHelpers.Set;\n\tvar add = SetHelpers.add;\n\tvar has = SetHelpers.has;\n\n\t// `Set.prototype.intersection` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.intersection\n\tsetIntersection = function intersection(other) {\n\t  var O = aSet(this);\n\t  var otherRec = getSetRecord(other);\n\t  var result = new Set();\n\n\t  if (size(O) > otherRec.size) {\n\t    iterateSimple(otherRec.getIterator(), function (e) {\n\t      if (has(O, e)) add(result, e);\n\t    });\n\t  } else {\n\t    iterateSet(O, function (e) {\n\t      if (otherRec.includes(e)) add(result, e);\n\t    });\n\t  }\n\n\t  return result;\n\t};\n\treturn setIntersection;\n}\n\nvar hasRequiredEs_set_intersection_v2;\n\nfunction requireEs_set_intersection_v2 () {\n\tif (hasRequiredEs_set_intersection_v2) return es_set_intersection_v2;\n\thasRequiredEs_set_intersection_v2 = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar intersection = /*@__PURE__*/ requireSetIntersection();\n\tvar setMethodAcceptSetLike = /*@__PURE__*/ requireSetMethodAcceptSetLike();\n\n\tvar INCORRECT = !setMethodAcceptSetLike('intersection', function (result) {\n\t  return result.size === 2 && result.has(1) && result.has(2);\n\t}) || fails(function () {\n\t  // eslint-disable-next-line es/no-array-from, es/no-set, es/no-set-prototype-intersection -- testing\n\t  return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n\t});\n\n\t// `Set.prototype.intersection` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.intersection\n\t$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n\t  intersection: intersection\n\t});\n\treturn es_set_intersection_v2;\n}\n\nvar es_set_isDisjointFrom_v2 = {};\n\nvar setIsDisjointFrom;\nvar hasRequiredSetIsDisjointFrom;\n\nfunction requireSetIsDisjointFrom () {\n\tif (hasRequiredSetIsDisjointFrom) return setIsDisjointFrom;\n\thasRequiredSetIsDisjointFrom = 1;\n\tvar aSet = /*@__PURE__*/ requireASet();\n\tvar has = /*@__PURE__*/ requireSetHelpers().has;\n\tvar size = /*@__PURE__*/ requireSetSize();\n\tvar getSetRecord = /*@__PURE__*/ requireGetSetRecord();\n\tvar iterateSet = /*@__PURE__*/ requireSetIterate();\n\tvar iterateSimple = /*@__PURE__*/ requireIterateSimple();\n\tvar iteratorClose = /*@__PURE__*/ requireIteratorClose();\n\n\t// `Set.prototype.isDisjointFrom` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\n\tsetIsDisjointFrom = function isDisjointFrom(other) {\n\t  var O = aSet(this);\n\t  var otherRec = getSetRecord(other);\n\t  if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n\t    if (otherRec.includes(e)) return false;\n\t  }, true) !== false;\n\t  var iterator = otherRec.getIterator();\n\t  return iterateSimple(iterator, function (e) {\n\t    if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n\t  }) !== false;\n\t};\n\treturn setIsDisjointFrom;\n}\n\nvar hasRequiredEs_set_isDisjointFrom_v2;\n\nfunction requireEs_set_isDisjointFrom_v2 () {\n\tif (hasRequiredEs_set_isDisjointFrom_v2) return es_set_isDisjointFrom_v2;\n\thasRequiredEs_set_isDisjointFrom_v2 = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isDisjointFrom = /*@__PURE__*/ requireSetIsDisjointFrom();\n\tvar setMethodAcceptSetLike = /*@__PURE__*/ requireSetMethodAcceptSetLike();\n\n\tvar INCORRECT = !setMethodAcceptSetLike('isDisjointFrom', function (result) {\n\t  return !result;\n\t});\n\n\t// `Set.prototype.isDisjointFrom` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom\n\t$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n\t  isDisjointFrom: isDisjointFrom\n\t});\n\treturn es_set_isDisjointFrom_v2;\n}\n\nvar es_set_isSubsetOf_v2 = {};\n\nvar setIsSubsetOf;\nvar hasRequiredSetIsSubsetOf;\n\nfunction requireSetIsSubsetOf () {\n\tif (hasRequiredSetIsSubsetOf) return setIsSubsetOf;\n\thasRequiredSetIsSubsetOf = 1;\n\tvar aSet = /*@__PURE__*/ requireASet();\n\tvar size = /*@__PURE__*/ requireSetSize();\n\tvar iterate = /*@__PURE__*/ requireSetIterate();\n\tvar getSetRecord = /*@__PURE__*/ requireGetSetRecord();\n\n\t// `Set.prototype.isSubsetOf` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\n\tsetIsSubsetOf = function isSubsetOf(other) {\n\t  var O = aSet(this);\n\t  var otherRec = getSetRecord(other);\n\t  if (size(O) > otherRec.size) return false;\n\t  return iterate(O, function (e) {\n\t    if (!otherRec.includes(e)) return false;\n\t  }, true) !== false;\n\t};\n\treturn setIsSubsetOf;\n}\n\nvar hasRequiredEs_set_isSubsetOf_v2;\n\nfunction requireEs_set_isSubsetOf_v2 () {\n\tif (hasRequiredEs_set_isSubsetOf_v2) return es_set_isSubsetOf_v2;\n\thasRequiredEs_set_isSubsetOf_v2 = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isSubsetOf = /*@__PURE__*/ requireSetIsSubsetOf();\n\tvar setMethodAcceptSetLike = /*@__PURE__*/ requireSetMethodAcceptSetLike();\n\n\tvar INCORRECT = !setMethodAcceptSetLike('isSubsetOf', function (result) {\n\t  return result;\n\t});\n\n\t// `Set.prototype.isSubsetOf` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.issubsetof\n\t$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n\t  isSubsetOf: isSubsetOf\n\t});\n\treturn es_set_isSubsetOf_v2;\n}\n\nvar es_set_isSupersetOf_v2 = {};\n\nvar setIsSupersetOf;\nvar hasRequiredSetIsSupersetOf;\n\nfunction requireSetIsSupersetOf () {\n\tif (hasRequiredSetIsSupersetOf) return setIsSupersetOf;\n\thasRequiredSetIsSupersetOf = 1;\n\tvar aSet = /*@__PURE__*/ requireASet();\n\tvar has = /*@__PURE__*/ requireSetHelpers().has;\n\tvar size = /*@__PURE__*/ requireSetSize();\n\tvar getSetRecord = /*@__PURE__*/ requireGetSetRecord();\n\tvar iterateSimple = /*@__PURE__*/ requireIterateSimple();\n\tvar iteratorClose = /*@__PURE__*/ requireIteratorClose();\n\n\t// `Set.prototype.isSupersetOf` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\n\tsetIsSupersetOf = function isSupersetOf(other) {\n\t  var O = aSet(this);\n\t  var otherRec = getSetRecord(other);\n\t  if (size(O) < otherRec.size) return false;\n\t  var iterator = otherRec.getIterator();\n\t  return iterateSimple(iterator, function (e) {\n\t    if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n\t  }) !== false;\n\t};\n\treturn setIsSupersetOf;\n}\n\nvar hasRequiredEs_set_isSupersetOf_v2;\n\nfunction requireEs_set_isSupersetOf_v2 () {\n\tif (hasRequiredEs_set_isSupersetOf_v2) return es_set_isSupersetOf_v2;\n\thasRequiredEs_set_isSupersetOf_v2 = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar isSupersetOf = /*@__PURE__*/ requireSetIsSupersetOf();\n\tvar setMethodAcceptSetLike = /*@__PURE__*/ requireSetMethodAcceptSetLike();\n\n\tvar INCORRECT = !setMethodAcceptSetLike('isSupersetOf', function (result) {\n\t  return !result;\n\t});\n\n\t// `Set.prototype.isSupersetOf` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.issupersetof\n\t$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n\t  isSupersetOf: isSupersetOf\n\t});\n\treturn es_set_isSupersetOf_v2;\n}\n\nvar es_set_symmetricDifference_v2 = {};\n\nvar setSymmetricDifference;\nvar hasRequiredSetSymmetricDifference;\n\nfunction requireSetSymmetricDifference () {\n\tif (hasRequiredSetSymmetricDifference) return setSymmetricDifference;\n\thasRequiredSetSymmetricDifference = 1;\n\tvar aSet = /*@__PURE__*/ requireASet();\n\tvar SetHelpers = /*@__PURE__*/ requireSetHelpers();\n\tvar clone = /*@__PURE__*/ requireSetClone();\n\tvar getSetRecord = /*@__PURE__*/ requireGetSetRecord();\n\tvar iterateSimple = /*@__PURE__*/ requireIterateSimple();\n\n\tvar add = SetHelpers.add;\n\tvar has = SetHelpers.has;\n\tvar remove = SetHelpers.remove;\n\n\t// `Set.prototype.symmetricDifference` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\n\tsetSymmetricDifference = function symmetricDifference(other) {\n\t  var O = aSet(this);\n\t  var keysIter = getSetRecord(other).getIterator();\n\t  var result = clone(O);\n\t  iterateSimple(keysIter, function (e) {\n\t    if (has(O, e)) remove(result, e);\n\t    else add(result, e);\n\t  });\n\t  return result;\n\t};\n\treturn setSymmetricDifference;\n}\n\nvar setMethodGetKeysBeforeCloningDetection;\nvar hasRequiredSetMethodGetKeysBeforeCloningDetection;\n\nfunction requireSetMethodGetKeysBeforeCloningDetection () {\n\tif (hasRequiredSetMethodGetKeysBeforeCloningDetection) return setMethodGetKeysBeforeCloningDetection;\n\thasRequiredSetMethodGetKeysBeforeCloningDetection = 1;\n\t// Should get iterator record of a set-like object before cloning this\n\t// https://bugs.webkit.org/show_bug.cgi?id=289430\n\tsetMethodGetKeysBeforeCloningDetection = function (METHOD_NAME) {\n\t  try {\n\t    // eslint-disable-next-line es/no-set -- needed for test\n\t    var baseSet = new Set();\n\t    var setLike = {\n\t      size: 0,\n\t      has: function () { return true; },\n\t      keys: function () {\n\t        // eslint-disable-next-line es/no-object-defineproperty -- needed for test\n\t        return Object.defineProperty({}, 'next', {\n\t          get: function () {\n\t            baseSet.clear();\n\t            baseSet.add(4);\n\t            return function () {\n\t              return { done: true };\n\t            };\n\t          }\n\t        });\n\t      }\n\t    };\n\t    var result = baseSet[METHOD_NAME](setLike);\n\n\t    return result.size === 1 && result.values().next().value === 4;\n\t  } catch (error) {\n\t    return false;\n\t  }\n\t};\n\treturn setMethodGetKeysBeforeCloningDetection;\n}\n\nvar hasRequiredEs_set_symmetricDifference_v2;\n\nfunction requireEs_set_symmetricDifference_v2 () {\n\tif (hasRequiredEs_set_symmetricDifference_v2) return es_set_symmetricDifference_v2;\n\thasRequiredEs_set_symmetricDifference_v2 = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar symmetricDifference = /*@__PURE__*/ requireSetSymmetricDifference();\n\tvar setMethodGetKeysBeforeCloning = /*@__PURE__*/ requireSetMethodGetKeysBeforeCloningDetection();\n\tvar setMethodAcceptSetLike = /*@__PURE__*/ requireSetMethodAcceptSetLike();\n\n\tvar FORCED = !setMethodAcceptSetLike('symmetricDifference') || !setMethodGetKeysBeforeCloning('symmetricDifference');\n\n\t// `Set.prototype.symmetricDifference` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference\n\t$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n\t  symmetricDifference: symmetricDifference\n\t});\n\treturn es_set_symmetricDifference_v2;\n}\n\nvar es_set_union_v2 = {};\n\nvar setUnion;\nvar hasRequiredSetUnion;\n\nfunction requireSetUnion () {\n\tif (hasRequiredSetUnion) return setUnion;\n\thasRequiredSetUnion = 1;\n\tvar aSet = /*@__PURE__*/ requireASet();\n\tvar add = /*@__PURE__*/ requireSetHelpers().add;\n\tvar clone = /*@__PURE__*/ requireSetClone();\n\tvar getSetRecord = /*@__PURE__*/ requireGetSetRecord();\n\tvar iterateSimple = /*@__PURE__*/ requireIterateSimple();\n\n\t// `Set.prototype.union` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.union\n\tsetUnion = function union(other) {\n\t  var O = aSet(this);\n\t  var keysIter = getSetRecord(other).getIterator();\n\t  var result = clone(O);\n\t  iterateSimple(keysIter, function (it) {\n\t    add(result, it);\n\t  });\n\t  return result;\n\t};\n\treturn setUnion;\n}\n\nvar hasRequiredEs_set_union_v2;\n\nfunction requireEs_set_union_v2 () {\n\tif (hasRequiredEs_set_union_v2) return es_set_union_v2;\n\thasRequiredEs_set_union_v2 = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar union = /*@__PURE__*/ requireSetUnion();\n\tvar setMethodGetKeysBeforeCloning = /*@__PURE__*/ requireSetMethodGetKeysBeforeCloningDetection();\n\tvar setMethodAcceptSetLike = /*@__PURE__*/ requireSetMethodAcceptSetLike();\n\n\tvar FORCED = !setMethodAcceptSetLike('union') || !setMethodGetKeysBeforeCloning('union');\n\n\t// `Set.prototype.union` method\n\t// https://tc39.es/ecma262/#sec-set.prototype.union\n\t$({ target: 'Set', proto: true, real: true, forced: FORCED }, {\n\t  union: union\n\t});\n\treturn es_set_union_v2;\n}\n\nvar set$2;\nvar hasRequiredSet$2;\n\nfunction requireSet$2 () {\n\tif (hasRequiredSet$2) return set$2;\n\thasRequiredSet$2 = 1;\n\trequireEs_array_iterator();\n\trequireEs_set();\n\trequireEs_set_difference_v2();\n\trequireEs_set_intersection_v2();\n\trequireEs_set_isDisjointFrom_v2();\n\trequireEs_set_isSubsetOf_v2();\n\trequireEs_set_isSupersetOf_v2();\n\trequireEs_set_symmetricDifference_v2();\n\trequireEs_set_union_v2();\n\trequireEs_string_iterator();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tset$2 = path.Set;\n\treturn set$2;\n}\n\nvar set$1;\nvar hasRequiredSet$1;\n\nfunction requireSet$1 () {\n\tif (hasRequiredSet$1) return set$1;\n\thasRequiredSet$1 = 1;\n\tvar parent = /*@__PURE__*/ requireSet$2();\n\trequireWeb_domCollections_iterator();\n\n\tset$1 = parent;\n\treturn set$1;\n}\n\nvar set;\nvar hasRequiredSet;\n\nfunction requireSet () {\n\tif (hasRequiredSet) return set;\n\thasRequiredSet = 1;\n\tset = /*@__PURE__*/ requireSet$1();\n\treturn set;\n}\n\nvar setExports = requireSet();\nvar _Set = /*@__PURE__*/getDefaultExportFromCjs(setExports);\n\nvar getIterator_1;\nvar hasRequiredGetIterator$5;\n\nfunction requireGetIterator$5 () {\n\tif (hasRequiredGetIterator$5) return getIterator_1;\n\thasRequiredGetIterator$5 = 1;\n\trequireEs_array_iterator();\n\trequireEs_string_iterator();\n\tvar getIterator = /*@__PURE__*/ requireGetIterator$6();\n\n\tgetIterator_1 = getIterator;\n\treturn getIterator_1;\n}\n\nvar getIterator$4;\nvar hasRequiredGetIterator$4;\n\nfunction requireGetIterator$4 () {\n\tif (hasRequiredGetIterator$4) return getIterator$4;\n\thasRequiredGetIterator$4 = 1;\n\tvar parent = /*@__PURE__*/ requireGetIterator$5();\n\trequireWeb_domCollections_iterator();\n\n\tgetIterator$4 = parent;\n\treturn getIterator$4;\n}\n\nvar getIterator$3;\nvar hasRequiredGetIterator$3;\n\nfunction requireGetIterator$3 () {\n\tif (hasRequiredGetIterator$3) return getIterator$3;\n\thasRequiredGetIterator$3 = 1;\n\tvar parent = /*@__PURE__*/ requireGetIterator$4();\n\n\tgetIterator$3 = parent;\n\treturn getIterator$3;\n}\n\nvar getIterator$2;\nvar hasRequiredGetIterator$2;\n\nfunction requireGetIterator$2 () {\n\tif (hasRequiredGetIterator$2) return getIterator$2;\n\thasRequiredGetIterator$2 = 1;\n\tvar parent = /*@__PURE__*/ requireGetIterator$3();\n\n\tgetIterator$2 = parent;\n\treturn getIterator$2;\n}\n\nvar getIterator$1;\nvar hasRequiredGetIterator$1;\n\nfunction requireGetIterator$1 () {\n\tif (hasRequiredGetIterator$1) return getIterator$1;\n\thasRequiredGetIterator$1 = 1;\n\tgetIterator$1 = /*@__PURE__*/ requireGetIterator$2();\n\treturn getIterator$1;\n}\n\nvar getIterator;\nvar hasRequiredGetIterator;\n\nfunction requireGetIterator () {\n\tif (hasRequiredGetIterator) return getIterator;\n\thasRequiredGetIterator = 1;\n\tgetIterator = /*@__PURE__*/ requireGetIterator$1();\n\treturn getIterator;\n}\n\nvar getIteratorExports = requireGetIterator();\nvar _getIterator = /*@__PURE__*/getDefaultExportFromCjs(getIteratorExports);\n\nvar es_array_sort = {};\n\nvar arraySort;\nvar hasRequiredArraySort;\n\nfunction requireArraySort () {\n\tif (hasRequiredArraySort) return arraySort;\n\thasRequiredArraySort = 1;\n\tvar arraySlice = /*@__PURE__*/ requireArraySlice();\n\n\tvar floor = Math.floor;\n\n\tvar sort = function (array, comparefn) {\n\t  var length = array.length;\n\n\t  if (length < 8) {\n\t    // insertion sort\n\t    var i = 1;\n\t    var element, j;\n\n\t    while (i < length) {\n\t      j = i;\n\t      element = array[i];\n\t      while (j && comparefn(array[j - 1], element) > 0) {\n\t        array[j] = array[--j];\n\t      }\n\t      if (j !== i++) array[j] = element;\n\t    }\n\t  } else {\n\t    // merge sort\n\t    var middle = floor(length / 2);\n\t    var left = sort(arraySlice(array, 0, middle), comparefn);\n\t    var right = sort(arraySlice(array, middle), comparefn);\n\t    var llength = left.length;\n\t    var rlength = right.length;\n\t    var lindex = 0;\n\t    var rindex = 0;\n\n\t    while (lindex < llength || rindex < rlength) {\n\t      array[lindex + rindex] = (lindex < llength && rindex < rlength)\n\t        ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n\t        : lindex < llength ? left[lindex++] : right[rindex++];\n\t    }\n\t  }\n\n\t  return array;\n\t};\n\n\tarraySort = sort;\n\treturn arraySort;\n}\n\nvar environmentFfVersion;\nvar hasRequiredEnvironmentFfVersion;\n\nfunction requireEnvironmentFfVersion () {\n\tif (hasRequiredEnvironmentFfVersion) return environmentFfVersion;\n\thasRequiredEnvironmentFfVersion = 1;\n\tvar userAgent = /*@__PURE__*/ requireEnvironmentUserAgent();\n\n\tvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\n\tenvironmentFfVersion = !!firefox && +firefox[1];\n\treturn environmentFfVersion;\n}\n\nvar environmentIsIeOrEdge;\nvar hasRequiredEnvironmentIsIeOrEdge;\n\nfunction requireEnvironmentIsIeOrEdge () {\n\tif (hasRequiredEnvironmentIsIeOrEdge) return environmentIsIeOrEdge;\n\thasRequiredEnvironmentIsIeOrEdge = 1;\n\tvar UA = /*@__PURE__*/ requireEnvironmentUserAgent();\n\n\tenvironmentIsIeOrEdge = /MSIE|Trident/.test(UA);\n\treturn environmentIsIeOrEdge;\n}\n\nvar environmentWebkitVersion;\nvar hasRequiredEnvironmentWebkitVersion;\n\nfunction requireEnvironmentWebkitVersion () {\n\tif (hasRequiredEnvironmentWebkitVersion) return environmentWebkitVersion;\n\thasRequiredEnvironmentWebkitVersion = 1;\n\tvar userAgent = /*@__PURE__*/ requireEnvironmentUserAgent();\n\n\tvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\n\tenvironmentWebkitVersion = !!webkit && +webkit[1];\n\treturn environmentWebkitVersion;\n}\n\nvar hasRequiredEs_array_sort;\n\nfunction requireEs_array_sort () {\n\tif (hasRequiredEs_array_sort) return es_array_sort;\n\thasRequiredEs_array_sort = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar aCallable = /*@__PURE__*/ requireACallable();\n\tvar toObject = /*@__PURE__*/ requireToObject();\n\tvar lengthOfArrayLike = /*@__PURE__*/ requireLengthOfArrayLike();\n\tvar deletePropertyOrThrow = /*@__PURE__*/ requireDeletePropertyOrThrow();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar internalSort = /*@__PURE__*/ requireArraySort();\n\tvar arrayMethodIsStrict = /*@__PURE__*/ requireArrayMethodIsStrict();\n\tvar FF = /*@__PURE__*/ requireEnvironmentFfVersion();\n\tvar IE_OR_EDGE = /*@__PURE__*/ requireEnvironmentIsIeOrEdge();\n\tvar V8 = /*@__PURE__*/ requireEnvironmentV8Version();\n\tvar WEBKIT = /*@__PURE__*/ requireEnvironmentWebkitVersion();\n\n\tvar test = [];\n\tvar nativeSort = uncurryThis(test.sort);\n\tvar push = uncurryThis(test.push);\n\n\t// IE8-\n\tvar FAILS_ON_UNDEFINED = fails(function () {\n\t  test.sort(undefined);\n\t});\n\t// V8 bug\n\tvar FAILS_ON_NULL = fails(function () {\n\t  test.sort(null);\n\t});\n\t// Old WebKit\n\tvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\n\tvar STABLE_SORT = !fails(function () {\n\t  // feature detection can be too slow, so check engines versions\n\t  if (V8) return V8 < 70;\n\t  if (FF && FF > 3) return;\n\t  if (IE_OR_EDGE) return true;\n\t  if (WEBKIT) return WEBKIT < 603;\n\n\t  var result = '';\n\t  var code, chr, value, index;\n\n\t  // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n\t  for (code = 65; code < 76; code++) {\n\t    chr = String.fromCharCode(code);\n\n\t    switch (code) {\n\t      case 66: case 69: case 70: case 72: value = 3; break;\n\t      case 68: case 71: value = 4; break;\n\t      default: value = 2;\n\t    }\n\n\t    for (index = 0; index < 47; index++) {\n\t      test.push({ k: chr + index, v: value });\n\t    }\n\t  }\n\n\t  test.sort(function (a, b) { return b.v - a.v; });\n\n\t  for (index = 0; index < test.length; index++) {\n\t    chr = test[index].k.charAt(0);\n\t    if (result.charAt(result.length - 1) !== chr) result += chr;\n\t  }\n\n\t  return result !== 'DGBEFHACIJK';\n\t});\n\n\tvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\n\tvar getSortCompare = function (comparefn) {\n\t  return function (x, y) {\n\t    if (y === undefined) return -1;\n\t    if (x === undefined) return 1;\n\t    if (comparefn !== undefined) return +comparefn(x, y) || 0;\n\t    return toString(x) > toString(y) ? 1 : -1;\n\t  };\n\t};\n\n\t// `Array.prototype.sort` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.sort\n\t$({ target: 'Array', proto: true, forced: FORCED }, {\n\t  sort: function sort(comparefn) {\n\t    if (comparefn !== undefined) aCallable(comparefn);\n\n\t    var array = toObject(this);\n\n\t    if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n\t    var items = [];\n\t    var arrayLength = lengthOfArrayLike(array);\n\t    var itemsLength, index;\n\n\t    for (index = 0; index < arrayLength; index++) {\n\t      if (index in array) push(items, array[index]);\n\t    }\n\n\t    internalSort(items, getSortCompare(comparefn));\n\n\t    itemsLength = lengthOfArrayLike(items);\n\t    index = 0;\n\n\t    while (index < itemsLength) array[index] = items[index++];\n\t    while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n\t    return array;\n\t  }\n\t});\n\treturn es_array_sort;\n}\n\nvar sort$3;\nvar hasRequiredSort$3;\n\nfunction requireSort$3 () {\n\tif (hasRequiredSort$3) return sort$3;\n\thasRequiredSort$3 = 1;\n\trequireEs_array_sort();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tsort$3 = getBuiltInPrototypeMethod('Array', 'sort');\n\treturn sort$3;\n}\n\nvar sort$2;\nvar hasRequiredSort$2;\n\nfunction requireSort$2 () {\n\tif (hasRequiredSort$2) return sort$2;\n\thasRequiredSort$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireSort$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tsort$2 = function (it) {\n\t  var own = it.sort;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort) ? method : own;\n\t};\n\treturn sort$2;\n}\n\nvar sort$1;\nvar hasRequiredSort$1;\n\nfunction requireSort$1 () {\n\tif (hasRequiredSort$1) return sort$1;\n\thasRequiredSort$1 = 1;\n\tvar parent = /*@__PURE__*/ requireSort$2();\n\n\tsort$1 = parent;\n\treturn sort$1;\n}\n\nvar sort;\nvar hasRequiredSort;\n\nfunction requireSort () {\n\tif (hasRequiredSort) return sort;\n\thasRequiredSort = 1;\n\tsort = /*@__PURE__*/ requireSort$1();\n\treturn sort;\n}\n\nvar sortExports = requireSort();\nvar _sortInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(sortExports);\n\nvar es_array_some = {};\n\nvar hasRequiredEs_array_some;\n\nfunction requireEs_array_some () {\n\tif (hasRequiredEs_array_some) return es_array_some;\n\thasRequiredEs_array_some = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $some = /*@__PURE__*/ requireArrayIteration().some;\n\tvar arrayMethodIsStrict = /*@__PURE__*/ requireArrayMethodIsStrict();\n\n\tvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n\t// `Array.prototype.some` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.some\n\t$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n\t  some: function some(callbackfn /* , thisArg */) {\n\t    return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t  }\n\t});\n\treturn es_array_some;\n}\n\nvar some$3;\nvar hasRequiredSome$3;\n\nfunction requireSome$3 () {\n\tif (hasRequiredSome$3) return some$3;\n\thasRequiredSome$3 = 1;\n\trequireEs_array_some();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tsome$3 = getBuiltInPrototypeMethod('Array', 'some');\n\treturn some$3;\n}\n\nvar some$2;\nvar hasRequiredSome$2;\n\nfunction requireSome$2 () {\n\tif (hasRequiredSome$2) return some$2;\n\thasRequiredSome$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireSome$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tsome$2 = function (it) {\n\t  var own = it.some;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.some) ? method : own;\n\t};\n\treturn some$2;\n}\n\nvar some$1;\nvar hasRequiredSome$1;\n\nfunction requireSome$1 () {\n\tif (hasRequiredSome$1) return some$1;\n\thasRequiredSome$1 = 1;\n\tvar parent = /*@__PURE__*/ requireSome$2();\n\n\tsome$1 = parent;\n\treturn some$1;\n}\n\nvar some;\nvar hasRequiredSome;\n\nfunction requireSome () {\n\tif (hasRequiredSome) return some;\n\thasRequiredSome = 1;\n\tsome = /*@__PURE__*/ requireSome$1();\n\treturn some;\n}\n\nvar someExports = requireSome();\nvar _someInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(someExports);\n\nvar keys$3;\nvar hasRequiredKeys$3;\n\nfunction requireKeys$3 () {\n\tif (hasRequiredKeys$3) return keys$3;\n\thasRequiredKeys$3 = 1;\n\trequireEs_array_iterator();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tkeys$3 = getBuiltInPrototypeMethod('Array', 'keys');\n\treturn keys$3;\n}\n\nvar keys$2;\nvar hasRequiredKeys$2;\n\nfunction requireKeys$2 () {\n\tif (hasRequiredKeys$2) return keys$2;\n\thasRequiredKeys$2 = 1;\n\tvar parent = /*@__PURE__*/ requireKeys$3();\n\n\tkeys$2 = parent;\n\treturn keys$2;\n}\n\nvar keys$1;\nvar hasRequiredKeys$1;\n\nfunction requireKeys$1 () {\n\tif (hasRequiredKeys$1) return keys$1;\n\thasRequiredKeys$1 = 1;\n\trequireWeb_domCollections_iterator();\n\tvar classof = /*@__PURE__*/ requireClassof();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireKeys$2();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tvar DOMIterables = {\n\t  DOMTokenList: true,\n\t  NodeList: true\n\t};\n\n\tkeys$1 = function (it) {\n\t  var own = it.keys;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys)\n\t    || hasOwn(DOMIterables, classof(it)) ? method : own;\n\t};\n\treturn keys$1;\n}\n\nvar keys;\nvar hasRequiredKeys;\n\nfunction requireKeys () {\n\tif (hasRequiredKeys) return keys;\n\thasRequiredKeys = 1;\n\tkeys = /*@__PURE__*/ requireKeys$1();\n\treturn keys;\n}\n\nvar keysExports = requireKeys();\nvar _keysInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(keysExports);\n\nvar values$3;\nvar hasRequiredValues$3;\n\nfunction requireValues$3 () {\n\tif (hasRequiredValues$3) return values$3;\n\thasRequiredValues$3 = 1;\n\trequireEs_array_iterator();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tvalues$3 = getBuiltInPrototypeMethod('Array', 'values');\n\treturn values$3;\n}\n\nvar values$2;\nvar hasRequiredValues$2;\n\nfunction requireValues$2 () {\n\tif (hasRequiredValues$2) return values$2;\n\thasRequiredValues$2 = 1;\n\tvar parent = /*@__PURE__*/ requireValues$3();\n\n\tvalues$2 = parent;\n\treturn values$2;\n}\n\nvar values$1;\nvar hasRequiredValues$1;\n\nfunction requireValues$1 () {\n\tif (hasRequiredValues$1) return values$1;\n\thasRequiredValues$1 = 1;\n\trequireWeb_domCollections_iterator();\n\tvar classof = /*@__PURE__*/ requireClassof();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireValues$2();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tvar DOMIterables = {\n\t  DOMTokenList: true,\n\t  NodeList: true\n\t};\n\n\tvalues$1 = function (it) {\n\t  var own = it.values;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.values)\n\t    || hasOwn(DOMIterables, classof(it)) ? method : own;\n\t};\n\treturn values$1;\n}\n\nvar values;\nvar hasRequiredValues;\n\nfunction requireValues () {\n\tif (hasRequiredValues) return values;\n\thasRequiredValues = 1;\n\tvalues = /*@__PURE__*/ requireValues$1();\n\treturn values;\n}\n\nvar valuesExports = requireValues();\nvar _valuesInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(valuesExports);\n\nvar entries$3;\nvar hasRequiredEntries$3;\n\nfunction requireEntries$3 () {\n\tif (hasRequiredEntries$3) return entries$3;\n\thasRequiredEntries$3 = 1;\n\trequireEs_array_iterator();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tentries$3 = getBuiltInPrototypeMethod('Array', 'entries');\n\treturn entries$3;\n}\n\nvar entries$2;\nvar hasRequiredEntries$2;\n\nfunction requireEntries$2 () {\n\tif (hasRequiredEntries$2) return entries$2;\n\thasRequiredEntries$2 = 1;\n\tvar parent = /*@__PURE__*/ requireEntries$3();\n\n\tentries$2 = parent;\n\treturn entries$2;\n}\n\nvar entries$1;\nvar hasRequiredEntries$1;\n\nfunction requireEntries$1 () {\n\tif (hasRequiredEntries$1) return entries$1;\n\thasRequiredEntries$1 = 1;\n\trequireWeb_domCollections_iterator();\n\tvar classof = /*@__PURE__*/ requireClassof();\n\tvar hasOwn = /*@__PURE__*/ requireHasOwnProperty();\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireEntries$2();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tvar DOMIterables = {\n\t  DOMTokenList: true,\n\t  NodeList: true\n\t};\n\n\tentries$1 = function (it) {\n\t  var own = it.entries;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.entries)\n\t    || hasOwn(DOMIterables, classof(it)) ? method : own;\n\t};\n\treturn entries$1;\n}\n\nvar entries;\nvar hasRequiredEntries;\n\nfunction requireEntries () {\n\tif (hasRequiredEntries) return entries;\n\thasRequiredEntries = 1;\n\tentries = /*@__PURE__*/ requireEntries$1();\n\treturn entries;\n}\n\nvar entriesExports = requireEntries();\nvar _entriesInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(entriesExports);\n\nvar defineProperty;\nvar hasRequiredDefineProperty;\n\nfunction requireDefineProperty () {\n\tif (hasRequiredDefineProperty) return defineProperty;\n\thasRequiredDefineProperty = 1;\n\tdefineProperty = /*@__PURE__*/ requireDefineProperty$4();\n\treturn defineProperty;\n}\n\nvar definePropertyExports = requireDefineProperty();\nvar _Object$defineProperty = /*@__PURE__*/getDefaultExportFromCjs(definePropertyExports);\n\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nfunction unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nconst rnds8 = new Uint8Array(16);\nfunction rng() {\n    return crypto.getRandomValues(rnds8);\n}\n\nfunction v4(options, buf, offset) {\n    if (crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    return _v4(options);\n}\nfunction _v4(options, buf, offset) {\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? rng();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    return unsafeStringify(rnds);\n}\n\nfunction ownKeys$1(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var _context21, _context22; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context21 = ownKeys$1(Object(t), true)).call(_context21, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context22 = ownKeys$1(Object(t))).call(_context22, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n/**\n * Create new data pipe.\n * @param from - The source data set or data view.\n * @remarks\n * Example usage:\n * ```typescript\n * interface AppItem {\n *   whoami: string;\n *   appData: unknown;\n *   visData: VisItem;\n * }\n * interface VisItem {\n *   id: number;\n *   label: string;\n *   color: string;\n *   x: number;\n *   y: number;\n * }\n *\n * const ds1 = new DataSet<AppItem, \"whoami\">([], { fieldId: \"whoami\" });\n * const ds2 = new DataSet<VisItem, \"id\">();\n *\n * const pipe = createNewDataPipeFrom(ds1)\n *   .filter((item): boolean => item.enabled === true)\n *   .map<VisItem, \"id\">((item): VisItem => item.visData)\n *   .to(ds2);\n *\n * pipe.start();\n * ```\n * @returns A factory whose methods can be used to configure the pipe.\n */\nfunction createNewDataPipeFrom(from) {\n  return new DataPipeUnderConstruction(from);\n}\n/**\n * Internal implementation of the pipe. This should be accessible only through\n * `createNewDataPipeFrom` from the outside.\n * @typeParam SI - Source item type.\n * @typeParam SP - Source item type's id property name.\n * @typeParam TI - Target item type.\n * @typeParam TP - Target item type's id property name.\n */\nclass SimpleDataPipe {\n  /**\n   * Create a new data pipe.\n   * @param source - The data set or data view that will be observed.\n   * @param transformers - An array of transforming functions to be used to\n   * filter or transform the items in the pipe.\n   * @param target - The data set or data view that will receive the items.\n   */\n  constructor(source, transformers, target) {\n    var _context, _context2, _context3;\n    _defineProperty(this, \"_source\", void 0);\n    _defineProperty(this, \"_transformers\", void 0);\n    _defineProperty(this, \"_target\", void 0);\n    /**\n     * Bound listeners for use with `DataInterface['on' | 'off']`.\n     */\n    _defineProperty(this, \"_listeners\", {\n      add: _bindInstanceProperty(_context = this._add).call(_context, this),\n      remove: _bindInstanceProperty(_context2 = this._remove).call(_context2, this),\n      update: _bindInstanceProperty(_context3 = this._update).call(_context3, this)\n    });\n    this._source = source;\n    this._transformers = transformers;\n    this._target = target;\n  }\n  /** @inheritDoc */\n  all() {\n    this._target.update(this._transformItems(this._source.get()));\n    return this;\n  }\n  /** @inheritDoc */\n  start() {\n    this._source.on(\"add\", this._listeners.add);\n    this._source.on(\"remove\", this._listeners.remove);\n    this._source.on(\"update\", this._listeners.update);\n    return this;\n  }\n  /** @inheritDoc */\n  stop() {\n    this._source.off(\"add\", this._listeners.add);\n    this._source.off(\"remove\", this._listeners.remove);\n    this._source.off(\"update\", this._listeners.update);\n    return this;\n  }\n  /**\n   * Apply the transformers to the items.\n   * @param items - The items to be transformed.\n   * @returns The transformed items.\n   */\n  _transformItems(items) {\n    var _context4;\n    return _reduceInstanceProperty(_context4 = this._transformers).call(_context4, (items, transform) => {\n      return transform(items);\n    }, items);\n  }\n  /**\n   * Handle an add event.\n   * @param _name - Ignored.\n   * @param payload - The payload containing the ids of the added items.\n   */\n  _add(_name, payload) {\n    if (payload == null) {\n      return;\n    }\n    this._target.add(this._transformItems(this._source.get(payload.items)));\n  }\n  /**\n   * Handle an update event.\n   * @param _name - Ignored.\n   * @param payload - The payload containing the ids of the updated items.\n   */\n  _update(_name, payload) {\n    if (payload == null) {\n      return;\n    }\n    this._target.update(this._transformItems(this._source.get(payload.items)));\n  }\n  /**\n   * Handle a remove event.\n   * @param _name - Ignored.\n   * @param payload - The payload containing the data of the removed items.\n   */\n  _remove(_name, payload) {\n    if (payload == null) {\n      return;\n    }\n    this._target.remove(this._transformItems(payload.oldData));\n  }\n}\n/**\n * Internal implementation of the pipe factory. This should be accessible\n * only through `createNewDataPipeFrom` from the outside.\n * @typeParam TI - Target item type.\n * @typeParam TP - Target item type's id property name.\n */\nclass DataPipeUnderConstruction {\n  /**\n   * Create a new data pipe factory. This is an internal constructor that\n   * should never be called from outside of this file.\n   * @param source - The source data set or data view for this pipe.\n   */\n  constructor(source) {\n    _defineProperty(this, \"_source\", void 0);\n    /**\n     * Array transformers used to transform items within the pipe. This is typed\n     * as any for the sake of simplicity.\n     */\n    _defineProperty(this, \"_transformers\", []);\n    this._source = source;\n  }\n  /**\n   * Filter the items.\n   * @param callback - A filtering function that returns true if given item\n   * should be piped and false if not.\n   * @returns This factory for further configuration.\n   */\n  filter(callback) {\n    this._transformers.push(input => _filterInstanceProperty(input).call(input, callback));\n    return this;\n  }\n  /**\n   * Map each source item to a new type.\n   * @param callback - A mapping function that takes a source item and returns\n   * corresponding mapped item.\n   * @typeParam TI - Target item type.\n   * @typeParam TP - Target item type's id property name.\n   * @returns This factory for further configuration.\n   */\n  map(callback) {\n    this._transformers.push(input => _mapInstanceProperty(input).call(input, callback));\n    return this;\n  }\n  /**\n   * Map each source item to zero or more items of a new type.\n   * @param callback - A mapping function that takes a source item and returns\n   * an array of corresponding mapped items.\n   * @typeParam TI - Target item type.\n   * @typeParam TP - Target item type's id property name.\n   * @returns This factory for further configuration.\n   */\n  flatMap(callback) {\n    this._transformers.push(input => _flatMapInstanceProperty(input).call(input, callback));\n    return this;\n  }\n  /**\n   * Connect this pipe to given data set.\n   * @param target - The data set that will receive the items from this pipe.\n   * @returns The pipe connected between given data sets and performing\n   * configured transformation on the processed items.\n   */\n  to(target) {\n    return new SimpleDataPipe(this._source, this._transformers, target);\n  }\n}\n\n/**\n * Determine whether a value can be used as an id.\n * @param value - Input value of unknown type.\n * @returns True if the value is valid id, false otherwise.\n */\nfunction isId(value) {\n  return typeof value === \"string\" || typeof value === \"number\";\n}\n\n/**\n * A queue.\n * @typeParam T - The type of method names to be replaced by queued versions.\n */\nclass Queue {\n  /**\n   * Construct a new Queue.\n   * @param options - Queue configuration.\n   */\n  constructor(options) {\n    /** Delay in milliseconds. If defined the queue will be periodically flushed. */\n    _defineProperty(this, \"delay\", void 0);\n    /** Maximum number of entries in the queue before it will be flushed. */\n    _defineProperty(this, \"max\", void 0);\n    _defineProperty(this, \"_queue\", []);\n    _defineProperty(this, \"_timeout\", null);\n    _defineProperty(this, \"_extended\", null);\n    // options\n    this.delay = null;\n    this.max = Infinity;\n    this.setOptions(options);\n  }\n  /**\n   * Update the configuration of the queue.\n   * @param options - Queue configuration.\n   */\n  setOptions(options) {\n    if (options && typeof options.delay !== \"undefined\") {\n      this.delay = options.delay;\n    }\n    if (options && typeof options.max !== \"undefined\") {\n      this.max = options.max;\n    }\n    this._flushIfNeeded();\n  }\n  /**\n   * Extend an object with queuing functionality.\n   * The object will be extended with a function flush, and the methods provided in options.replace will be replaced with queued ones.\n   * @param object - The object to be extended.\n   * @param options - Additional options.\n   * @returns The created queue.\n   */\n  static extend(object, options) {\n    const queue = new Queue(options);\n    if (object.flush !== undefined) {\n      throw new Error(\"Target object already has a property flush\");\n    }\n    object.flush = () => {\n      queue.flush();\n    };\n    const methods = [{\n      name: \"flush\",\n      original: undefined\n    }];\n    if (options && options.replace) {\n      for (let i = 0; i < options.replace.length; i++) {\n        const name = options.replace[i];\n        methods.push({\n          name: name,\n          // @TODO: better solution?\n          original: object[name]\n        });\n        // @TODO: better solution?\n        queue.replace(object, name);\n      }\n    }\n    queue._extended = {\n      object: object,\n      methods: methods\n    };\n    return queue;\n  }\n  /**\n   * Destroy the queue. The queue will first flush all queued actions, and in case it has extended an object, will restore the original object.\n   */\n  destroy() {\n    this.flush();\n    if (this._extended) {\n      const object = this._extended.object;\n      const methods = this._extended.methods;\n      for (let i = 0; i < methods.length; i++) {\n        const method = methods[i];\n        if (method.original) {\n          // @TODO: better solution?\n          object[method.name] = method.original;\n        } else {\n          // @TODO: better solution?\n          delete object[method.name];\n        }\n      }\n      this._extended = null;\n    }\n  }\n  /**\n   * Replace a method on an object with a queued version.\n   * @param object - Object having the method.\n   * @param method - The method name.\n   */\n  replace(object, method) {\n    /* eslint-disable-next-line @typescript-eslint/no-this-alias -- Function this is necessary in the function bellow, so class this has to be saved into a variable here. */\n    const me = this;\n    const original = object[method];\n    if (!original) {\n      throw new Error(\"Method \" + method + \" undefined\");\n    }\n    object[method] = function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      // add this call to the queue\n      me.queue({\n        args: args,\n        fn: original,\n        context: this\n      });\n    };\n  }\n  /**\n   * Queue a call.\n   * @param entry - The function or entry to be queued.\n   */\n  queue(entry) {\n    if (typeof entry === \"function\") {\n      this._queue.push({\n        fn: entry\n      });\n    } else {\n      this._queue.push(entry);\n    }\n    this._flushIfNeeded();\n  }\n  /**\n   * Check whether the queue needs to be flushed.\n   */\n  _flushIfNeeded() {\n    // flush when the maximum is exceeded.\n    if (this._queue.length > this.max) {\n      this.flush();\n    }\n    // flush after a period of inactivity when a delay is configured\n    if (this._timeout != null) {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    }\n    if (this.queue.length > 0 && typeof this.delay === \"number\") {\n      this._timeout = _setTimeout(() => {\n        this.flush();\n      }, this.delay);\n    }\n  }\n  /**\n   * Flush all queued calls\n   */\n  flush() {\n    var _context5, _context6;\n    _forEachInstanceProperty(_context5 = _spliceInstanceProperty(_context6 = this._queue).call(_context6, 0)).call(_context5, entry => {\n      entry.fn.apply(entry.context || entry.fn, entry.args || []);\n    });\n  }\n}\n\n/**\n * {@link DataSet} code that can be reused in {@link DataView} or other similar implementations of {@link DataInterface}.\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n */\nclass DataSetPart {\n  constructor() {\n    _defineProperty(this, \"_subscribers\", {\n      \"*\": [],\n      add: [],\n      remove: [],\n      update: []\n    });\n    /**\n     * @deprecated Use on instead (PS: DataView.subscribe === DataView.on).\n     */\n    _defineProperty(this, \"subscribe\", DataSetPart.prototype.on);\n    /**\n     * @deprecated Use off instead (PS: DataView.unsubscribe === DataView.off).\n     */\n    _defineProperty(this, \"unsubscribe\", DataSetPart.prototype.off);\n  }\n  /**\n   * Trigger an event\n   * @param event - Event name.\n   * @param payload - Event payload.\n   * @param senderId - Id of the sender.\n   */\n  _trigger(event, payload, senderId) {\n    var _context7;\n    if (event === \"*\") {\n      throw new Error(\"Cannot trigger event *\");\n    }\n    _forEachInstanceProperty(_context7 = [...this._subscribers[event], ...this._subscribers[\"*\"]]).call(_context7, subscriber => {\n      subscriber(event, payload, senderId != null ? senderId : null);\n    });\n  }\n  /**\n   * Subscribe to an event, add an event listener.\n   * @remarks Non-function callbacks are ignored.\n   * @param event - Event name.\n   * @param callback - Callback method.\n   */\n  on(event, callback) {\n    if (typeof callback === \"function\") {\n      this._subscribers[event].push(callback);\n    }\n    // @TODO: Maybe throw for invalid callbacks?\n  }\n  /**\n   * Unsubscribe from an event, remove an event listener.\n   * @remarks If the same callback was subscribed more than once **all** occurences will be removed.\n   * @param event - Event name.\n   * @param callback - Callback method.\n   */\n  off(event, callback) {\n    var _context8;\n    this._subscribers[event] = _filterInstanceProperty(_context8 = this._subscribers[event]).call(_context8, subscriber => subscriber !== callback);\n  }\n}\n\n/**\n * Data stream\n * @remarks\n * {@link DataStream} offers an always up to date stream of items from a {@link DataSet} or {@link DataView}.\n * That means that the stream is evaluated at the time of iteration, conversion to another data type or when {@link cache} is called, not when the {@link DataStream} was created.\n * Multiple invocations of for example {@link toItemArray} may yield different results (if the data source like for example {@link DataSet} gets modified).\n * @typeParam Item - The item type this stream is going to work with.\n */\nclass DataStream {\n  /**\n   * Create a new data stream.\n   * @param pairs - The id, item pairs.\n   */\n  constructor(pairs) {\n    _defineProperty(this, \"_pairs\", void 0);\n    this._pairs = pairs;\n  }\n  /**\n   * Return an iterable of key, value pairs for every entry in the stream.\n   */\n  *[_Symbol$iterator]() {\n    for (const [id, item] of this._pairs) {\n      yield [id, item];\n    }\n  }\n  /**\n   * Return an iterable of key, value pairs for every entry in the stream.\n   */\n  *entries() {\n    for (const [id, item] of this._pairs) {\n      yield [id, item];\n    }\n  }\n  /**\n   * Return an iterable of keys in the stream.\n   */\n  *keys() {\n    for (const [id] of this._pairs) {\n      yield id;\n    }\n  }\n  /**\n   * Return an iterable of values in the stream.\n   */\n  *values() {\n    for (const [, item] of this._pairs) {\n      yield item;\n    }\n  }\n  /**\n   * Return an array containing all the ids in this stream.\n   * @remarks\n   * The array may contain duplicities.\n   * @returns The array with all ids from this stream.\n   */\n  toIdArray() {\n    var _context9;\n    return _mapInstanceProperty(_context9 = [...this._pairs]).call(_context9, pair => pair[0]);\n  }\n  /**\n   * Return an array containing all the items in this stream.\n   * @remarks\n   * The array may contain duplicities.\n   * @returns The array with all items from this stream.\n   */\n  toItemArray() {\n    var _context0;\n    return _mapInstanceProperty(_context0 = [...this._pairs]).call(_context0, pair => pair[1]);\n  }\n  /**\n   * Return an array containing all the entries in this stream.\n   * @remarks\n   * The array may contain duplicities.\n   * @returns The array with all entries from this stream.\n   */\n  toEntryArray() {\n    return [...this._pairs];\n  }\n  /**\n   * Return an object map containing all the items in this stream accessible by ids.\n   * @remarks\n   * In case of duplicate ids (coerced to string so `7 == '7'`) the last encoutered appears in the returned object.\n   * @returns The object map of all id → item pairs from this stream.\n   */\n  toObjectMap() {\n    const map = _Object$create(null);\n    for (const [id, item] of this._pairs) {\n      map[id] = item;\n    }\n    return map;\n  }\n  /**\n   * Return a map containing all the items in this stream accessible by ids.\n   * @returns The map of all id → item pairs from this stream.\n   */\n  toMap() {\n    return new _Map(this._pairs);\n  }\n  /**\n   * Return a set containing all the (unique) ids in this stream.\n   * @returns The set of all ids from this stream.\n   */\n  toIdSet() {\n    return new _Set(this.toIdArray());\n  }\n  /**\n   * Return a set containing all the (unique) items in this stream.\n   * @returns The set of all items from this stream.\n   */\n  toItemSet() {\n    return new _Set(this.toItemArray());\n  }\n  /**\n   * Cache the items from this stream.\n   * @remarks\n   * This method allows for items to be fetched immediatelly and used (possibly multiple times) later.\n   * It can also be used to optimize performance as {@link DataStream} would otherwise reevaluate everything upon each iteration.\n   *\n   * ## Example\n   * ```javascript\n   * const ds = new DataSet([…])\n   *\n   * const cachedStream = ds.stream()\n   *   .filter(…)\n   *   .sort(…)\n   *   .map(…)\n   *   .cached(…) // Data are fetched, processed and cached here.\n   *\n   * ds.clear()\n   * chachedStream // Still has all the items.\n   * ```\n   * @returns A new {@link DataStream} with cached items (detached from the original {@link DataSet}).\n   */\n  cache() {\n    return new DataStream([...this._pairs]);\n  }\n  /**\n   * Get the distinct values of given property.\n   * @param callback - The function that picks and possibly converts the property.\n   * @typeParam T - The type of the distinct value.\n   * @returns A set of all distinct properties.\n   */\n  distinct(callback) {\n    const set = new _Set();\n    for (const [id, item] of this._pairs) {\n      set.add(callback(item, id));\n    }\n    return set;\n  }\n  /**\n   * Filter the items of the stream.\n   * @param callback - The function that decides whether an item will be included.\n   * @returns A new data stream with the filtered items.\n   */\n  filter(callback) {\n    const pairs = this._pairs;\n    return new DataStream({\n      *[_Symbol$iterator]() {\n        for (const [id, item] of pairs) {\n          if (callback(item, id)) {\n            yield [id, item];\n          }\n        }\n      }\n    });\n  }\n  /**\n   * Execute a callback for each item of the stream.\n   * @param callback - The function that will be invoked for each item.\n   */\n  forEach(callback) {\n    for (const [id, item] of this._pairs) {\n      callback(item, id);\n    }\n  }\n  /**\n   * Map the items into a different type.\n   * @param callback - The function that does the conversion.\n   * @typeParam Mapped - The type of the item after mapping.\n   * @returns A new data stream with the mapped items.\n   */\n  map(callback) {\n    const pairs = this._pairs;\n    return new DataStream({\n      *[_Symbol$iterator]() {\n        for (const [id, item] of pairs) {\n          yield [id, callback(item, id)];\n        }\n      }\n    });\n  }\n  /**\n   * Get the item with the maximum value of given property.\n   * @param callback - The function that picks and possibly converts the property.\n   * @returns The item with the maximum if found otherwise null.\n   */\n  max(callback) {\n    const iter = _getIterator(this._pairs);\n    let curr = iter.next();\n    if (curr.done) {\n      return null;\n    }\n    let maxItem = curr.value[1];\n    let maxValue = callback(curr.value[1], curr.value[0]);\n    while (!(curr = iter.next()).done) {\n      const [id, item] = curr.value;\n      const value = callback(item, id);\n      if (value > maxValue) {\n        maxValue = value;\n        maxItem = item;\n      }\n    }\n    return maxItem;\n  }\n  /**\n   * Get the item with the minimum value of given property.\n   * @param callback - The function that picks and possibly converts the property.\n   * @returns The item with the minimum if found otherwise null.\n   */\n  min(callback) {\n    const iter = _getIterator(this._pairs);\n    let curr = iter.next();\n    if (curr.done) {\n      return null;\n    }\n    let minItem = curr.value[1];\n    let minValue = callback(curr.value[1], curr.value[0]);\n    while (!(curr = iter.next()).done) {\n      const [id, item] = curr.value;\n      const value = callback(item, id);\n      if (value < minValue) {\n        minValue = value;\n        minItem = item;\n      }\n    }\n    return minItem;\n  }\n  /**\n   * Reduce the items into a single value.\n   * @param callback - The function that does the reduction.\n   * @param accumulator - The initial value of the accumulator.\n   * @typeParam T - The type of the accumulated value.\n   * @returns The reduced value.\n   */\n  reduce(callback, accumulator) {\n    for (const [id, item] of this._pairs) {\n      accumulator = callback(accumulator, item, id);\n    }\n    return accumulator;\n  }\n  /**\n   * Sort the items.\n   * @param callback - Item comparator.\n   * @returns A new stream with sorted items.\n   */\n  sort(callback) {\n    return new DataStream({\n      [_Symbol$iterator]: () => {\n        var _context1;\n        return _getIterator(_sortInstanceProperty(_context1 = [...this._pairs]).call(_context1, (_ref, _ref2) => {\n          let [idA, itemA] = _ref;\n          let [idB, itemB] = _ref2;\n          return callback(itemA, itemB, idA, idB);\n        }));\n      }\n    });\n  }\n}\n\n/**\n * Add an id to given item if it doesn't have one already.\n * @remarks\n * The item will be modified.\n * @param item - The item that will have an id after a call to this function.\n * @param idProp - The key of the id property.\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n * @returns true\n */\nfunction ensureFullItem(item, idProp) {\n  if (item[idProp] == null) {\n    // generate an id\n    item[idProp] = v4();\n  }\n  return item;\n}\n/**\n * # DataSet\n *\n * Vis.js comes with a flexible DataSet, which can be used to hold and\n * manipulate unstructured data and listen for changes in the data. The DataSet\n * is key/value based. Data items can be added, updated and removed from the\n * DataSet, and one can subscribe to changes in the DataSet. The data in the\n * DataSet can be filtered and ordered. Data can be normalized when appending it\n * to the DataSet as well.\n *\n * ## Example\n *\n * The following example shows how to use a DataSet.\n *\n * ```javascript\n * // create a DataSet\n * var options = {};\n * var data = new vis.DataSet(options);\n *\n * // add items\n * // note that the data items can contain different properties and data formats\n * data.add([\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\n * {id: 4, text: 'item 4'}\n * ]);\n *\n * // subscribe to any change in the DataSet\n * data.on('*', function (event, properties, senderId) {\n * console.log('event', event, properties);\n * });\n *\n * // update an existing item\n * data.update({id: 2, group: 1});\n *\n * // remove an item\n * data.remove(4);\n *\n * // get all ids\n * var ids = data.getIds();\n * console.log('ids', ids);\n *\n * // get a specific item\n * var item1 = data.get(1);\n * console.log('item1', item1);\n *\n * // retrieve a filtered subset of the data\n * var items = data.get({\n * filter: function (item) {\n * return item.group == 1;\n * }\n * });\n * console.log('filtered items', items);\n * ```\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n */\nclass DataSet extends DataSetPart {\n  /** @inheritDoc */\n  get idProp() {\n    return this._idProp;\n  }\n  /**\n   * Construct a new DataSet.\n   * @param data - Initial data or options.\n   * @param options - Options (type error if data is also options).\n   */\n  constructor(data, options) {\n    super();\n    // correctly read optional arguments\n    /** Flush all queued calls. */\n    _defineProperty(this, \"flush\", void 0);\n    /** @inheritDoc */\n    _defineProperty(this, \"length\", void 0);\n    _defineProperty(this, \"_options\", void 0);\n    _defineProperty(this, \"_data\", void 0);\n    _defineProperty(this, \"_idProp\", void 0);\n    _defineProperty(this, \"_queue\", null);\n    if (data && !_Array$isArray(data)) {\n      options = data;\n      data = [];\n    }\n    this._options = options || {};\n    this._data = new _Map(); // map with data indexed by id\n    this.length = 0; // number of items in the DataSet\n    this._idProp = this._options.fieldId || \"id\"; // name of the field containing id\n    // add initial data when provided\n    if (data && data.length) {\n      this.add(data);\n    }\n    this.setOptions(options);\n  }\n  /**\n   * Set new options.\n   * @param options - The new options.\n   */\n  setOptions(options) {\n    if (options && options.queue !== undefined) {\n      if (options.queue === false) {\n        // delete queue if loaded\n        if (this._queue) {\n          this._queue.destroy();\n          this._queue = null;\n        }\n      } else {\n        // create queue and update its options\n        if (!this._queue) {\n          this._queue = Queue.extend(this, {\n            replace: [\"add\", \"update\", \"remove\"]\n          });\n        }\n        if (options.queue && typeof options.queue === \"object\") {\n          this._queue.setOptions(options.queue);\n        }\n      }\n    }\n  }\n  /**\n   * Add a data item or an array with items.\n   *\n   * After the items are added to the DataSet, the DataSet will trigger an event `add`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n   *\n   * ## Example\n   *\n   * ```javascript\n   * // create a DataSet\n   * const data = new vis.DataSet()\n   *\n   * // add items\n   * const ids = data.add([\n   * { id: 1, text: 'item 1' },\n   * { id: 2, text: 'item 2' },\n   * { text: 'item without an id' }\n   * ])\n   *\n   * console.log(ids) // [1, 2, '<UUIDv4>']\n   * ```\n   * @param data - Items to be added (ids will be generated if missing).\n   * @param senderId - Sender id.\n   * @returns addedIds - Array with the ids (generated if not present) of the added items.\n   * @throws When an item with the same id as any of the added items already exists.\n   */\n  add(data, senderId) {\n    const addedIds = [];\n    let id;\n    if (_Array$isArray(data)) {\n      // Array\n      const idsToAdd = _mapInstanceProperty(data).call(data, d => d[this._idProp]);\n      if (_someInstanceProperty(idsToAdd).call(idsToAdd, id => this._data.has(id))) {\n        throw new Error(\"A duplicate id was found in the parameter array.\");\n      }\n      for (let i = 0, len = data.length; i < len; i++) {\n        id = this._addItem(data[i]);\n        addedIds.push(id);\n      }\n    } else if (data && typeof data === \"object\") {\n      // Single item\n      id = this._addItem(data);\n      addedIds.push(id);\n    } else {\n      throw new Error(\"Unknown dataType\");\n    }\n    if (addedIds.length) {\n      this._trigger(\"add\", {\n        items: addedIds\n      }, senderId);\n    }\n    return addedIds;\n  }\n  /**\n   * Update existing items. When an item does not exist, it will be created.\n   * @remarks\n   * The provided properties will be merged in the existing item. When an item does not exist, it will be created.\n   *\n   * After the items are updated, the DataSet will trigger an event `add` for the added items, and an event `update`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n   *\n   * ## Example\n   *\n   * ```javascript\n   * // create a DataSet\n   * const data = new vis.DataSet([\n   *   { id: 1, text: 'item 1' },\n   *   { id: 2, text: 'item 2' },\n   *   { id: 3, text: 'item 3' }\n   * ])\n   *\n   * // update items\n   * const ids = data.update([\n   *   { id: 2, text: 'item 2 (updated)' },\n   *   { id: 4, text: 'item 4 (new)' }\n   * ])\n   *\n   * console.log(ids) // [2, 4]\n   * ```\n   *\n   * ## Warning for TypeScript users\n   * This method may introduce partial items into the data set. Use add or updateOnly instead for better type safety.\n   * @param data - Items to be updated (if the id is already present) or added (if the id is missing).\n   * @param senderId - Sender id.\n   * @returns updatedIds - The ids of the added (these may be newly generated if there was no id in the item from the data) or updated items.\n   * @throws When the supplied data is neither an item nor an array of items.\n   */\n  update(data, senderId) {\n    const addedIds = [];\n    const updatedIds = [];\n    const oldData = [];\n    const updatedData = [];\n    const idProp = this._idProp;\n    const addOrUpdate = item => {\n      const origId = item[idProp];\n      if (origId != null && this._data.has(origId)) {\n        const fullItem = item; // it has an id, therefore it is a fullitem\n        const oldItem = _Object$assign({}, this._data.get(origId));\n        // update item\n        const id = this._updateItem(fullItem);\n        updatedIds.push(id);\n        updatedData.push(fullItem);\n        oldData.push(oldItem);\n      } else {\n        // add new item\n        const id = this._addItem(item);\n        addedIds.push(id);\n      }\n    };\n    if (_Array$isArray(data)) {\n      // Array\n      for (let i = 0, len = data.length; i < len; i++) {\n        if (data[i] && typeof data[i] === \"object\") {\n          addOrUpdate(data[i]);\n        } else {\n          console.warn(\"Ignoring input item, which is not an object at index \" + i);\n        }\n      }\n    } else if (data && typeof data === \"object\") {\n      // Single item\n      addOrUpdate(data);\n    } else {\n      throw new Error(\"Unknown dataType\");\n    }\n    if (addedIds.length) {\n      this._trigger(\"add\", {\n        items: addedIds\n      }, senderId);\n    }\n    if (updatedIds.length) {\n      const props = {\n        items: updatedIds,\n        oldData: oldData,\n        data: updatedData\n      };\n      // TODO: remove deprecated property 'data' some day\n      //Object.defineProperty(props, 'data', {\n      //  'get': (function() {\n      //    console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\n      //    return updatedData;\n      //  }).bind(this)\n      //});\n      this._trigger(\"update\", props, senderId);\n    }\n    return _concatInstanceProperty(addedIds).call(addedIds, updatedIds);\n  }\n  /**\n   * Update existing items. When an item does not exist, an error will be thrown.\n   * @remarks\n   * The provided properties will be deeply merged into the existing item.\n   * When an item does not exist (id not present in the data set or absent), an error will be thrown and nothing will be changed.\n   *\n   * After the items are updated, the DataSet will trigger an event `update`.\n   * When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n   *\n   * ## Example\n   *\n   * ```javascript\n   * // create a DataSet\n   * const data = new vis.DataSet([\n   *   { id: 1, text: 'item 1' },\n   *   { id: 2, text: 'item 2' },\n   *   { id: 3, text: 'item 3' },\n   * ])\n   *\n   * // update items\n   * const ids = data.update([\n   *   { id: 2, text: 'item 2 (updated)' }, // works\n   *   // { id: 4, text: 'item 4 (new)' }, // would throw\n   *   // { text: 'item 4 (new)' }, // would also throw\n   * ])\n   *\n   * console.log(ids) // [2]\n   * ```\n   * @param data - Updates (the id and optionally other props) to the items in this data set.\n   * @param senderId - Sender id.\n   * @returns updatedIds - The ids of the updated items.\n   * @throws When the supplied data is neither an item nor an array of items, when the ids are missing.\n   */\n  updateOnly(data, senderId) {\n    var _context10;\n    if (!_Array$isArray(data)) {\n      data = [data];\n    }\n    const updateEventData = _mapInstanceProperty(_context10 = _mapInstanceProperty(data).call(data, update => {\n      const oldData = this._data.get(update[this._idProp]);\n      if (oldData == null) {\n        throw new Error(\"Updating non-existent items is not allowed.\");\n      }\n      return {\n        oldData,\n        update\n      };\n    })).call(_context10, _ref3 => {\n      let {\n        oldData,\n        update\n      } = _ref3;\n      const id = oldData[this._idProp];\n      const updatedData = pureDeepObjectAssign(oldData, update);\n      this._data.set(id, updatedData);\n      return {\n        id,\n        oldData: oldData,\n        updatedData\n      };\n    });\n    if (updateEventData.length) {\n      const props = {\n        items: _mapInstanceProperty(updateEventData).call(updateEventData, value => value.id),\n        oldData: _mapInstanceProperty(updateEventData).call(updateEventData, value => value.oldData),\n        data: _mapInstanceProperty(updateEventData).call(updateEventData, value => value.updatedData)\n      };\n      // TODO: remove deprecated property 'data' some day\n      //Object.defineProperty(props, 'data', {\n      //  'get': (function() {\n      //    console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\n      //    return updatedData;\n      //  }).bind(this)\n      //});\n      this._trigger(\"update\", props, senderId);\n      return props.items;\n    } else {\n      return [];\n    }\n  }\n  /** @inheritDoc */\n  get(first, second) {\n    // @TODO: Woudn't it be better to split this into multiple methods?\n    // parse the arguments\n    let id = undefined;\n    let ids = undefined;\n    let options = undefined;\n    if (isId(first)) {\n      // get(id [, options])\n      id = first;\n      options = second;\n    } else if (_Array$isArray(first)) {\n      // get(ids [, options])\n      ids = first;\n      options = second;\n    } else {\n      // get([, options])\n      options = first;\n    }\n    // determine the return type\n    const returnType = options && options.returnType === \"Object\" ? \"Object\" : \"Array\";\n    // @TODO: WTF is this? Or am I missing something?\n    // var returnType\n    // if (options && options.returnType) {\n    //   var allowedValues = ['Array', 'Object']\n    //   returnType =\n    //     allowedValues.indexOf(options.returnType) == -1\n    //       ? 'Array'\n    //       : options.returnType\n    // } else {\n    //   returnType = 'Array'\n    // }\n    // build options\n    const filter = options && _filterInstanceProperty(options);\n    const items = [];\n    let item = undefined;\n    let itemIds = undefined;\n    let itemId = undefined;\n    // convert items\n    if (id != null) {\n      // return a single item\n      item = this._data.get(id);\n      if (item && filter && !filter(item)) {\n        item = undefined;\n      }\n    } else if (ids != null) {\n      // return a subset of items\n      for (let i = 0, len = ids.length; i < len; i++) {\n        item = this._data.get(ids[i]);\n        if (item != null && (!filter || filter(item))) {\n          items.push(item);\n        }\n      }\n    } else {\n      var _context11;\n      // return all items\n      itemIds = [..._keysInstanceProperty(_context11 = this._data).call(_context11)];\n      for (let i = 0, len = itemIds.length; i < len; i++) {\n        itemId = itemIds[i];\n        item = this._data.get(itemId);\n        if (item != null && (!filter || filter(item))) {\n          items.push(item);\n        }\n      }\n    }\n    // order the results\n    if (options && options.order && id == undefined) {\n      this._sort(items, options.order);\n    }\n    // filter fields of the items\n    if (options && options.fields) {\n      const fields = options.fields;\n      if (id != undefined && item != null) {\n        item = this._filterFields(item, fields);\n      } else {\n        for (let i = 0, len = items.length; i < len; i++) {\n          items[i] = this._filterFields(items[i], fields);\n        }\n      }\n    }\n    // return the results\n    if (returnType == \"Object\") {\n      const result = {};\n      for (let i = 0, len = items.length; i < len; i++) {\n        const resultant = items[i];\n        // @TODO: Shoudn't this be this._fieldId?\n        // result[resultant.id] = resultant\n        const id = resultant[this._idProp];\n        result[id] = resultant;\n      }\n      return result;\n    } else {\n      if (id != null) {\n        // a single item\n        return item !== null && item !== void 0 ? item : null;\n      } else {\n        // just return our array\n        return items;\n      }\n    }\n  }\n  /** @inheritDoc */\n  getIds(options) {\n    const data = this._data;\n    const filter = options && _filterInstanceProperty(options);\n    const order = options && options.order;\n    const itemIds = [..._keysInstanceProperty(data).call(data)];\n    const ids = [];\n    if (filter) {\n      // get filtered items\n      if (order) {\n        // create ordered list\n        const items = [];\n        for (let i = 0, len = itemIds.length; i < len; i++) {\n          const id = itemIds[i];\n          const item = this._data.get(id);\n          if (item != null && filter(item)) {\n            items.push(item);\n          }\n        }\n        this._sort(items, order);\n        for (let i = 0, len = items.length; i < len; i++) {\n          ids.push(items[i][this._idProp]);\n        }\n      } else {\n        // create unordered list\n        for (let i = 0, len = itemIds.length; i < len; i++) {\n          const id = itemIds[i];\n          const item = this._data.get(id);\n          if (item != null && filter(item)) {\n            ids.push(item[this._idProp]);\n          }\n        }\n      }\n    } else {\n      // get all items\n      if (order) {\n        // create an ordered list\n        const items = [];\n        for (let i = 0, len = itemIds.length; i < len; i++) {\n          const id = itemIds[i];\n          items.push(data.get(id));\n        }\n        this._sort(items, order);\n        for (let i = 0, len = items.length; i < len; i++) {\n          ids.push(items[i][this._idProp]);\n        }\n      } else {\n        // create unordered list\n        for (let i = 0, len = itemIds.length; i < len; i++) {\n          const id = itemIds[i];\n          const item = data.get(id);\n          if (item != null) {\n            ids.push(item[this._idProp]);\n          }\n        }\n      }\n    }\n    return ids;\n  }\n  /** @inheritDoc */\n  getDataSet() {\n    return this;\n  }\n  /** @inheritDoc */\n  forEach(callback, options) {\n    const filter = options && _filterInstanceProperty(options);\n    const data = this._data;\n    const itemIds = [..._keysInstanceProperty(data).call(data)];\n    if (options && options.order) {\n      // execute forEach on ordered list\n      const items = this.get(options);\n      for (let i = 0, len = items.length; i < len; i++) {\n        const item = items[i];\n        const id = item[this._idProp];\n        callback(item, id);\n      }\n    } else {\n      // unordered\n      for (let i = 0, len = itemIds.length; i < len; i++) {\n        const id = itemIds[i];\n        const item = this._data.get(id);\n        if (item != null && (!filter || filter(item))) {\n          callback(item, id);\n        }\n      }\n    }\n  }\n  /** @inheritDoc */\n  map(callback, options) {\n    const filter = options && _filterInstanceProperty(options);\n    const mappedItems = [];\n    const data = this._data;\n    const itemIds = [..._keysInstanceProperty(data).call(data)];\n    // convert and filter items\n    for (let i = 0, len = itemIds.length; i < len; i++) {\n      const id = itemIds[i];\n      const item = this._data.get(id);\n      if (item != null && (!filter || filter(item))) {\n        mappedItems.push(callback(item, id));\n      }\n    }\n    // order items\n    if (options && options.order) {\n      this._sort(mappedItems, options.order);\n    }\n    return mappedItems;\n  }\n  /**\n   * Filter the fields of an item.\n   * @param item - The item whose fields should be filtered.\n   * @param fields - The names of the fields that will be kept.\n   * @typeParam K - Field name type.\n   * @returns The item without any additional fields.\n   */\n  _filterFields(item, fields) {\n    var _context12;\n    if (!item) {\n      // item is null\n      return item;\n    }\n    return _reduceInstanceProperty(_context12 = _Array$isArray(fields) ?\n    // Use the supplied array\n    fields :\n    // Use the keys of the supplied object\n    _Object$keys(fields)).call(_context12, (filteredItem, field) => {\n      filteredItem[field] = item[field];\n      return filteredItem;\n    }, {});\n  }\n  /**\n   * Sort the provided array with items.\n   * @param items - Items to be sorted in place.\n   * @param order - A field name or custom sort function.\n   * @typeParam T - The type of the items in the items array.\n   */\n  _sort(items, order) {\n    if (typeof order === \"string\") {\n      // order by provided field name\n      const name = order; // field name\n      _sortInstanceProperty(items).call(items, (a, b) => {\n        // @TODO: How to treat missing properties?\n        const av = a[name];\n        const bv = b[name];\n        return av > bv ? 1 : av < bv ? -1 : 0;\n      });\n    } else if (typeof order === \"function\") {\n      // order by sort function\n      _sortInstanceProperty(items).call(items, order);\n    } else {\n      // TODO: extend order by an Object {field:string, direction:string}\n      //       where direction can be 'asc' or 'desc'\n      throw new TypeError(\"Order must be a function or a string\");\n    }\n  }\n  /**\n   * Remove an item or multiple items by “reference” (only the id is used) or by id.\n   *\n   * The method ignores removal of non-existing items, and returns an array containing the ids of the items which are actually removed from the DataSet.\n   *\n   * After the items are removed, the DataSet will trigger an event `remove` for the removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n   *\n   * ## Example\n   * ```javascript\n   * // create a DataSet\n   * const data = new vis.DataSet([\n   * { id: 1, text: 'item 1' },\n   * { id: 2, text: 'item 2' },\n   * { id: 3, text: 'item 3' }\n   * ])\n   *\n   * // remove items\n   * const ids = data.remove([2, { id: 3 }, 4])\n   *\n   * console.log(ids) // [2, 3]\n   * ```\n   * @param id - One or more items or ids of items to be removed.\n   * @param senderId - Sender id.\n   * @returns The ids of the removed items.\n   */\n  remove(id, senderId) {\n    const removedIds = [];\n    const removedItems = [];\n    // force everything to be an array for simplicity\n    const ids = _Array$isArray(id) ? id : [id];\n    for (let i = 0, len = ids.length; i < len; i++) {\n      const item = this._remove(ids[i]);\n      if (item) {\n        const itemId = item[this._idProp];\n        if (itemId != null) {\n          removedIds.push(itemId);\n          removedItems.push(item);\n        }\n      }\n    }\n    if (removedIds.length) {\n      this._trigger(\"remove\", {\n        items: removedIds,\n        oldData: removedItems\n      }, senderId);\n    }\n    return removedIds;\n  }\n  /**\n   * Remove an item by its id or reference.\n   * @param id - Id of an item or the item itself.\n   * @returns The removed item if removed, null otherwise.\n   */\n  _remove(id) {\n    // @TODO: It origianlly returned the item although the docs say id.\n    // The code expects the item, so probably an error in the docs.\n    let ident;\n    // confirm the id to use based on the args type\n    if (isId(id)) {\n      ident = id;\n    } else if (id && typeof id === \"object\") {\n      ident = id[this._idProp]; // look for the identifier field using ._idProp\n    }\n    // do the removing if the item is found\n    if (ident != null && this._data.has(ident)) {\n      const item = this._data.get(ident) || null;\n      this._data.delete(ident);\n      --this.length;\n      return item;\n    }\n    return null;\n  }\n  /**\n   * Clear the entire data set.\n   *\n   * After the items are removed, the {@link DataSet} will trigger an event `remove` for all removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\n   * @param senderId - Sender id.\n   * @returns removedIds - The ids of all removed items.\n   */\n  clear(senderId) {\n    var _context13;\n    const ids = [..._keysInstanceProperty(_context13 = this._data).call(_context13)];\n    const items = [];\n    for (let i = 0, len = ids.length; i < len; i++) {\n      items.push(this._data.get(ids[i]));\n    }\n    this._data.clear();\n    this.length = 0;\n    this._trigger(\"remove\", {\n      items: ids,\n      oldData: items\n    }, senderId);\n    return ids;\n  }\n  /**\n   * Find the item with maximum value of a specified field.\n   * @param field - Name of the property that should be searched for max value.\n   * @returns Item containing max value, or null if no items.\n   */\n  max(field) {\n    let max = null;\n    let maxField = null;\n    for (const item of _valuesInstanceProperty(_context14 = this._data).call(_context14)) {\n      var _context14;\n      const itemField = item[field];\n      if (typeof itemField === \"number\" && (maxField == null || itemField > maxField)) {\n        max = item;\n        maxField = itemField;\n      }\n    }\n    return max || null;\n  }\n  /**\n   * Find the item with minimum value of a specified field.\n   * @param field - Name of the property that should be searched for min value.\n   * @returns Item containing min value, or null if no items.\n   */\n  min(field) {\n    let min = null;\n    let minField = null;\n    for (const item of _valuesInstanceProperty(_context15 = this._data).call(_context15)) {\n      var _context15;\n      const itemField = item[field];\n      if (typeof itemField === \"number\" && (minField == null || itemField < minField)) {\n        min = item;\n        minField = itemField;\n      }\n    }\n    return min || null;\n  }\n  /**\n   * Find all distinct values of a specified field\n   * @param prop - The property name whose distinct values should be returned.\n   * @returns Unordered array containing all distinct values. Items without specified property are ignored.\n   */\n  distinct(prop) {\n    const data = this._data;\n    const itemIds = [..._keysInstanceProperty(data).call(data)];\n    const values = [];\n    let count = 0;\n    for (let i = 0, len = itemIds.length; i < len; i++) {\n      const id = itemIds[i];\n      const item = data.get(id);\n      const value = item[prop];\n      let exists = false;\n      for (let j = 0; j < count; j++) {\n        if (values[j] == value) {\n          exists = true;\n          break;\n        }\n      }\n      if (!exists && value !== undefined) {\n        values[count] = value;\n        count++;\n      }\n    }\n    return values;\n  }\n  /**\n   * Add a single item. Will fail when an item with the same id already exists.\n   * @param item - A new item to be added.\n   * @returns Added item's id. An id is generated when it is not present in the item.\n   */\n  _addItem(item) {\n    const fullItem = ensureFullItem(item, this._idProp);\n    const id = fullItem[this._idProp];\n    // check whether this id is already taken\n    if (this._data.has(id)) {\n      // item already exists\n      throw new Error(\"Cannot add item: item with id \" + id + \" already exists\");\n    }\n    this._data.set(id, fullItem);\n    ++this.length;\n    return id;\n  }\n  /**\n   * Update a single item: merge with existing item.\n   * Will fail when the item has no id, or when there does not exist an item with the same id.\n   * @param update - The new item\n   * @returns The id of the updated item.\n   */\n  _updateItem(update) {\n    const id = update[this._idProp];\n    if (id == null) {\n      throw new Error(\"Cannot update item: item has no id (item: \" + _JSON$stringify(update) + \")\");\n    }\n    const item = this._data.get(id);\n    if (!item) {\n      // item doesn't exist\n      throw new Error(\"Cannot update item: no item with id \" + id + \" found\");\n    }\n    this._data.set(id, _objectSpread$1(_objectSpread$1({}, item), update));\n    return id;\n  }\n  /** @inheritDoc */\n  stream(ids) {\n    if (ids) {\n      const data = this._data;\n      return new DataStream({\n        *[_Symbol$iterator]() {\n          for (const id of ids) {\n            const item = data.get(id);\n            if (item != null) {\n              yield [id, item];\n            }\n          }\n        }\n      });\n    } else {\n      var _context16;\n      return new DataStream({\n        [_Symbol$iterator]: _bindInstanceProperty(_context16 = _entriesInstanceProperty(this._data)).call(_context16, this._data)\n      });\n    }\n  }\n}\n\n/**\n * DataView\n *\n * A DataView offers a filtered and/or formatted view on a DataSet. One can subscribe to changes in a DataView, and easily get filtered or formatted data without having to specify filters and field types all the time.\n *\n * ## Example\n * ```javascript\n * // create a DataSet\n * var data = new vis.DataSet();\n * data.add([\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\n * {id: 4, text: 'item 4'}\n * ]);\n *\n * // create a DataView\n * // the view will only contain items having a property group with value 1,\n * // and will only output fields id, text, and date.\n * var view = new vis.DataView(data, {\n * filter: function (item) {\n * return (item.group == 1);\n * },\n * fields: ['id', 'text', 'date']\n * });\n *\n * // subscribe to any change in the DataView\n * view.on('*', function (event, properties, senderId) {\n * console.log('event', event, properties);\n * });\n *\n * // update an item in the data set\n * data.update({id: 2, group: 1});\n *\n * // get all ids in the view\n * var ids = view.getIds();\n * console.log('ids', ids); // will output [1, 2]\n *\n * // get all items in the view\n * var items = view.get();\n * ```\n * @typeParam Item - Item type that may or may not have an id.\n * @typeParam IdProp - Name of the property that contains the id.\n */\nclass DataView extends DataSetPart {\n  /** @inheritDoc */\n  get idProp() {\n    return this.getDataSet().idProp;\n  }\n  /**\n   * Create a DataView.\n   * @param data - The instance containing data (directly or indirectly).\n   * @param options - Options to configure this data view.\n   */\n  constructor(data, options) {\n    var _context17;\n    super();\n    /** @inheritDoc */\n    _defineProperty(this, \"length\", 0);\n    _defineProperty(this, \"_listener\", void 0);\n    _defineProperty(this, \"_data\", void 0);\n    // constructor → setData\n    _defineProperty(this, \"_ids\", new _Set());\n    // ids of the items currently in memory (just contains a boolean true)\n    _defineProperty(this, \"_options\", void 0);\n    this._options = options || {};\n    this._listener = _bindInstanceProperty(_context17 = this._onEvent).call(_context17, this);\n    this.setData(data);\n  }\n  // TODO: implement a function .config() to dynamically update things like configured filter\n  // and trigger changes accordingly\n  /**\n   * Set a data source for the view.\n   * @param data - The instance containing data (directly or indirectly).\n   * @remarks\n   * Note that when the data view is bound to a data set it won't be garbage\n   * collected unless the data set is too. Use `dataView.setData(null)` or\n   * `dataView.dispose()` to enable garbage collection before you lose the last\n   * reference.\n   */\n  setData(data) {\n    if (this._data) {\n      // unsubscribe from current dataset\n      if (this._data.off) {\n        this._data.off(\"*\", this._listener);\n      }\n      // trigger a remove of all items in memory\n      const ids = this._data.getIds({\n        filter: _filterInstanceProperty(this._options)\n      });\n      const items = this._data.get(ids);\n      this._ids.clear();\n      this.length = 0;\n      this._trigger(\"remove\", {\n        items: ids,\n        oldData: items\n      });\n    }\n    if (data != null) {\n      this._data = data;\n      // trigger an add of all added items\n      const ids = this._data.getIds({\n        filter: _filterInstanceProperty(this._options)\n      });\n      for (let i = 0, len = ids.length; i < len; i++) {\n        const id = ids[i];\n        this._ids.add(id);\n      }\n      this.length = ids.length;\n      this._trigger(\"add\", {\n        items: ids\n      });\n    } else {\n      this._data = new DataSet();\n    }\n    // subscribe to new dataset\n    if (this._data.on) {\n      this._data.on(\"*\", this._listener);\n    }\n  }\n  /**\n   * Refresh the DataView.\n   * Useful when the DataView has a filter function containing a variable parameter.\n   */\n  refresh() {\n    const ids = this._data.getIds({\n      filter: _filterInstanceProperty(this._options)\n    });\n    const oldIds = [...this._ids];\n    const newIds = {};\n    const addedIds = [];\n    const removedIds = [];\n    const removedItems = [];\n    // check for additions\n    for (let i = 0, len = ids.length; i < len; i++) {\n      const id = ids[i];\n      newIds[id] = true;\n      if (!this._ids.has(id)) {\n        addedIds.push(id);\n        this._ids.add(id);\n      }\n    }\n    // check for removals\n    for (let i = 0, len = oldIds.length; i < len; i++) {\n      const id = oldIds[i];\n      const item = this._data.get(id);\n      if (item == null) {\n        // @TODO: Investigate.\n        // Doesn't happen during tests or examples.\n        // Is it really impossible or could it eventually happen?\n        // How to handle it if it does? The types guarantee non-nullable items.\n        console.error(\"If you see this, report it please.\");\n      } else if (!newIds[id]) {\n        removedIds.push(id);\n        removedItems.push(item);\n        this._ids.delete(id);\n      }\n    }\n    this.length += addedIds.length - removedIds.length;\n    // trigger events\n    if (addedIds.length) {\n      this._trigger(\"add\", {\n        items: addedIds\n      });\n    }\n    if (removedIds.length) {\n      this._trigger(\"remove\", {\n        items: removedIds,\n        oldData: removedItems\n      });\n    }\n  }\n  /** @inheritDoc */\n  get(first, second) {\n    if (this._data == null) {\n      return null;\n    }\n    // parse the arguments\n    let ids = null;\n    let options;\n    if (isId(first) || _Array$isArray(first)) {\n      ids = first;\n      options = second;\n    } else {\n      options = first;\n    }\n    // extend the options with the default options and provided options\n    const viewOptions = _Object$assign({}, this._options, options);\n    // create a combined filter method when needed\n    const thisFilter = _filterInstanceProperty(this._options);\n    const optionsFilter = options && _filterInstanceProperty(options);\n    if (thisFilter && optionsFilter) {\n      viewOptions.filter = item => {\n        return thisFilter(item) && optionsFilter(item);\n      };\n    }\n    if (ids == null) {\n      return this._data.get(viewOptions);\n    } else {\n      return this._data.get(ids, viewOptions);\n    }\n  }\n  /** @inheritDoc */\n  getIds(options) {\n    if (this._data.length) {\n      const defaultFilter = _filterInstanceProperty(this._options);\n      const optionsFilter = options != null ? _filterInstanceProperty(options) : null;\n      let filter;\n      if (optionsFilter) {\n        if (defaultFilter) {\n          filter = item => {\n            return defaultFilter(item) && optionsFilter(item);\n          };\n        } else {\n          filter = optionsFilter;\n        }\n      } else {\n        filter = defaultFilter;\n      }\n      return this._data.getIds({\n        filter: filter,\n        order: options && options.order\n      });\n    } else {\n      return [];\n    }\n  }\n  /** @inheritDoc */\n  forEach(callback, options) {\n    if (this._data) {\n      var _context18;\n      const defaultFilter = _filterInstanceProperty(this._options);\n      const optionsFilter = options && _filterInstanceProperty(options);\n      let filter;\n      if (optionsFilter) {\n        if (defaultFilter) {\n          filter = function (item) {\n            return defaultFilter(item) && optionsFilter(item);\n          };\n        } else {\n          filter = optionsFilter;\n        }\n      } else {\n        filter = defaultFilter;\n      }\n      _forEachInstanceProperty(_context18 = this._data).call(_context18, callback, {\n        filter: filter,\n        order: options && options.order\n      });\n    }\n  }\n  /** @inheritDoc */\n  map(callback, options) {\n    if (this._data) {\n      var _context19;\n      const defaultFilter = _filterInstanceProperty(this._options);\n      const optionsFilter = options && _filterInstanceProperty(options);\n      let filter;\n      if (optionsFilter) {\n        if (defaultFilter) {\n          filter = item => {\n            return defaultFilter(item) && optionsFilter(item);\n          };\n        } else {\n          filter = optionsFilter;\n        }\n      } else {\n        filter = defaultFilter;\n      }\n      return _mapInstanceProperty(_context19 = this._data).call(_context19, callback, {\n        filter: filter,\n        order: options && options.order\n      });\n    } else {\n      return [];\n    }\n  }\n  /** @inheritDoc */\n  getDataSet() {\n    return this._data.getDataSet();\n  }\n  /** @inheritDoc */\n  stream(ids) {\n    var _context20;\n    return this._data.stream(ids || {\n      [_Symbol$iterator]: _bindInstanceProperty(_context20 = _keysInstanceProperty(this._ids)).call(_context20, this._ids)\n    });\n  }\n  /**\n   * Render the instance unusable prior to garbage collection.\n   * @remarks\n   * The intention of this method is to help discover scenarios where the data\n   * view is being used when the programmer thinks it has been garbage collected\n   * already. It's stricter version of `dataView.setData(null)`.\n   */\n  dispose() {\n    var _this$_data;\n    if ((_this$_data = this._data) !== null && _this$_data !== void 0 && _this$_data.off) {\n      this._data.off(\"*\", this._listener);\n    }\n    const message = \"This data view has already been disposed of.\";\n    const replacement = {\n      get: () => {\n        throw new Error(message);\n      },\n      set: () => {\n        throw new Error(message);\n      },\n      configurable: false\n    };\n    for (const key of _Reflect$ownKeys(DataView.prototype)) {\n      _Object$defineProperty(this, key, replacement);\n    }\n  }\n  /**\n   * Event listener. Will propagate all events from the connected data set to the subscribers of the DataView, but will filter the items and only trigger when there are changes in the filtered data set.\n   * @param event - The name of the event.\n   * @param params - Parameters of the event.\n   * @param senderId - Id supplied by the sender.\n   */\n  _onEvent(event, params, senderId) {\n    if (!params || !params.items || !this._data) {\n      return;\n    }\n    const ids = params.items;\n    const addedIds = [];\n    const updatedIds = [];\n    const removedIds = [];\n    const oldItems = [];\n    const updatedItems = [];\n    const removedItems = [];\n    switch (event) {\n      case \"add\":\n        // filter the ids of the added items\n        for (let i = 0, len = ids.length; i < len; i++) {\n          const id = ids[i];\n          const item = this.get(id);\n          if (item) {\n            this._ids.add(id);\n            addedIds.push(id);\n          }\n        }\n        break;\n      case \"update\":\n        // determine the event from the views viewpoint: an updated\n        // item can be added, updated, or removed from this view.\n        for (let i = 0, len = ids.length; i < len; i++) {\n          const id = ids[i];\n          const item = this.get(id);\n          if (item) {\n            if (this._ids.has(id)) {\n              updatedIds.push(id);\n              updatedItems.push(params.data[i]);\n              oldItems.push(params.oldData[i]);\n            } else {\n              this._ids.add(id);\n              addedIds.push(id);\n            }\n          } else {\n            if (this._ids.has(id)) {\n              this._ids.delete(id);\n              removedIds.push(id);\n              removedItems.push(params.oldData[i]);\n            }\n          }\n        }\n        break;\n      case \"remove\":\n        // filter the ids of the removed items\n        for (let i = 0, len = ids.length; i < len; i++) {\n          const id = ids[i];\n          if (this._ids.has(id)) {\n            this._ids.delete(id);\n            removedIds.push(id);\n            removedItems.push(params.oldData[i]);\n          }\n        }\n        break;\n    }\n    this.length += addedIds.length - removedIds.length;\n    if (addedIds.length) {\n      this._trigger(\"add\", {\n        items: addedIds\n      }, senderId);\n    }\n    if (updatedIds.length) {\n      this._trigger(\"update\", {\n        items: updatedIds,\n        oldData: oldItems,\n        data: updatedItems\n      }, senderId);\n    }\n    if (removedIds.length) {\n      this._trigger(\"remove\", {\n        items: removedIds,\n        oldData: removedItems\n      }, senderId);\n    }\n  }\n}\n\n/**\n * Check that given value is compatible with Vis Data Set interface.\n * @param idProp - The expected property to contain item id.\n * @param v - The value to be tested.\n * @returns True if all expected values and methods match, false otherwise.\n */\nfunction isDataSetLike(idProp, v) {\n  return typeof v === \"object\" && v !== null && idProp === v.idProp && typeof v.add === \"function\" && typeof v.clear === \"function\" && typeof v.distinct === \"function\" && typeof _forEachInstanceProperty(v) === \"function\" && typeof v.get === \"function\" && typeof v.getDataSet === \"function\" && typeof v.getIds === \"function\" && typeof v.length === \"number\" && typeof _mapInstanceProperty(v) === \"function\" && typeof v.max === \"function\" && typeof v.min === \"function\" && typeof v.off === \"function\" && typeof v.on === \"function\" && typeof v.remove === \"function\" && typeof v.setOptions === \"function\" && typeof v.stream === \"function\" && typeof v.update === \"function\" && typeof v.updateOnly === \"function\";\n}\n\n/**\n * Check that given value is compatible with Vis Data View interface.\n * @param idProp - The expected property to contain item id.\n * @param v - The value to be tested.\n * @returns True if all expected values and methods match, false otherwise.\n */\nfunction isDataViewLike$1(idProp, v) {\n  return typeof v === \"object\" && v !== null && idProp === v.idProp && typeof _forEachInstanceProperty(v) === \"function\" && typeof v.get === \"function\" && typeof v.getDataSet === \"function\" && typeof v.getIds === \"function\" && typeof v.length === \"number\" && typeof _mapInstanceProperty(v) === \"function\" && typeof v.off === \"function\" && typeof v.on === \"function\" && typeof v.stream === \"function\" && isDataSetLike(idProp, v.getDataSet());\n}\n\nvar momentExports = requireMoment();\nvar moment$3 = /*@__PURE__*/getDefaultExportFromCjs(momentExports);\n\n// Check if Moment.js is already loaded in the browser window, if so, use this\n// instance, else use bundled Moment.js.\nconst moment$2 = typeof window !== \"undefined\" && window[\"moment\"] || moment$3;\n\nvar lib$1 = {exports: {}};\n\nvar _default$1 = {};\n\nvar lib = {exports: {}};\n\nvar _default = {};\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar hasRequired_default$1;\n\nfunction require_default$1 () {\n\tif (hasRequired_default$1) return _default;\n\thasRequired_default$1 = 1;\n\tfunction getDefaultWhiteList () {\n\t  // 白名单值说明：\n\t  // true: 允许该属性\n\t  // Function: function (val) { } 返回true表示允许该属性，其他值均表示不允许\n\t  // RegExp: regexp.test(val) 返回true表示允许该属性，其他值均表示不允许\n\t  // 除上面列出的值外均表示不允许\n\t  var whiteList = {};\n\n\t  whiteList['align-content'] = false; // default: auto\n\t  whiteList['align-items'] = false; // default: auto\n\t  whiteList['align-self'] = false; // default: auto\n\t  whiteList['alignment-adjust'] = false; // default: auto\n\t  whiteList['alignment-baseline'] = false; // default: baseline\n\t  whiteList['all'] = false; // default: depending on individual properties\n\t  whiteList['anchor-point'] = false; // default: none\n\t  whiteList['animation'] = false; // default: depending on individual properties\n\t  whiteList['animation-delay'] = false; // default: 0\n\t  whiteList['animation-direction'] = false; // default: normal\n\t  whiteList['animation-duration'] = false; // default: 0\n\t  whiteList['animation-fill-mode'] = false; // default: none\n\t  whiteList['animation-iteration-count'] = false; // default: 1\n\t  whiteList['animation-name'] = false; // default: none\n\t  whiteList['animation-play-state'] = false; // default: running\n\t  whiteList['animation-timing-function'] = false; // default: ease\n\t  whiteList['azimuth'] = false; // default: center\n\t  whiteList['backface-visibility'] = false; // default: visible\n\t  whiteList['background'] = true; // default: depending on individual properties\n\t  whiteList['background-attachment'] = true; // default: scroll\n\t  whiteList['background-clip'] = true; // default: border-box\n\t  whiteList['background-color'] = true; // default: transparent\n\t  whiteList['background-image'] = true; // default: none\n\t  whiteList['background-origin'] = true; // default: padding-box\n\t  whiteList['background-position'] = true; // default: 0% 0%\n\t  whiteList['background-repeat'] = true; // default: repeat\n\t  whiteList['background-size'] = true; // default: auto\n\t  whiteList['baseline-shift'] = false; // default: baseline\n\t  whiteList['binding'] = false; // default: none\n\t  whiteList['bleed'] = false; // default: 6pt\n\t  whiteList['bookmark-label'] = false; // default: content()\n\t  whiteList['bookmark-level'] = false; // default: none\n\t  whiteList['bookmark-state'] = false; // default: open\n\t  whiteList['border'] = true; // default: depending on individual properties\n\t  whiteList['border-bottom'] = true; // default: depending on individual properties\n\t  whiteList['border-bottom-color'] = true; // default: current color\n\t  whiteList['border-bottom-left-radius'] = true; // default: 0\n\t  whiteList['border-bottom-right-radius'] = true; // default: 0\n\t  whiteList['border-bottom-style'] = true; // default: none\n\t  whiteList['border-bottom-width'] = true; // default: medium\n\t  whiteList['border-collapse'] = true; // default: separate\n\t  whiteList['border-color'] = true; // default: depending on individual properties\n\t  whiteList['border-image'] = true; // default: none\n\t  whiteList['border-image-outset'] = true; // default: 0\n\t  whiteList['border-image-repeat'] = true; // default: stretch\n\t  whiteList['border-image-slice'] = true; // default: 100%\n\t  whiteList['border-image-source'] = true; // default: none\n\t  whiteList['border-image-width'] = true; // default: 1\n\t  whiteList['border-left'] = true; // default: depending on individual properties\n\t  whiteList['border-left-color'] = true; // default: current color\n\t  whiteList['border-left-style'] = true; // default: none\n\t  whiteList['border-left-width'] = true; // default: medium\n\t  whiteList['border-radius'] = true; // default: 0\n\t  whiteList['border-right'] = true; // default: depending on individual properties\n\t  whiteList['border-right-color'] = true; // default: current color\n\t  whiteList['border-right-style'] = true; // default: none\n\t  whiteList['border-right-width'] = true; // default: medium\n\t  whiteList['border-spacing'] = true; // default: 0\n\t  whiteList['border-style'] = true; // default: depending on individual properties\n\t  whiteList['border-top'] = true; // default: depending on individual properties\n\t  whiteList['border-top-color'] = true; // default: current color\n\t  whiteList['border-top-left-radius'] = true; // default: 0\n\t  whiteList['border-top-right-radius'] = true; // default: 0\n\t  whiteList['border-top-style'] = true; // default: none\n\t  whiteList['border-top-width'] = true; // default: medium\n\t  whiteList['border-width'] = true; // default: depending on individual properties\n\t  whiteList['bottom'] = false; // default: auto\n\t  whiteList['box-decoration-break'] = true; // default: slice\n\t  whiteList['box-shadow'] = true; // default: none\n\t  whiteList['box-sizing'] = true; // default: content-box\n\t  whiteList['box-snap'] = true; // default: none\n\t  whiteList['box-suppress'] = true; // default: show\n\t  whiteList['break-after'] = true; // default: auto\n\t  whiteList['break-before'] = true; // default: auto\n\t  whiteList['break-inside'] = true; // default: auto\n\t  whiteList['caption-side'] = false; // default: top\n\t  whiteList['chains'] = false; // default: none\n\t  whiteList['clear'] = true; // default: none\n\t  whiteList['clip'] = false; // default: auto\n\t  whiteList['clip-path'] = false; // default: none\n\t  whiteList['clip-rule'] = false; // default: nonzero\n\t  whiteList['color'] = true; // default: implementation dependent\n\t  whiteList['color-interpolation-filters'] = true; // default: auto\n\t  whiteList['column-count'] = false; // default: auto\n\t  whiteList['column-fill'] = false; // default: balance\n\t  whiteList['column-gap'] = false; // default: normal\n\t  whiteList['column-rule'] = false; // default: depending on individual properties\n\t  whiteList['column-rule-color'] = false; // default: current color\n\t  whiteList['column-rule-style'] = false; // default: medium\n\t  whiteList['column-rule-width'] = false; // default: medium\n\t  whiteList['column-span'] = false; // default: none\n\t  whiteList['column-width'] = false; // default: auto\n\t  whiteList['columns'] = false; // default: depending on individual properties\n\t  whiteList['contain'] = false; // default: none\n\t  whiteList['content'] = false; // default: normal\n\t  whiteList['counter-increment'] = false; // default: none\n\t  whiteList['counter-reset'] = false; // default: none\n\t  whiteList['counter-set'] = false; // default: none\n\t  whiteList['crop'] = false; // default: auto\n\t  whiteList['cue'] = false; // default: depending on individual properties\n\t  whiteList['cue-after'] = false; // default: none\n\t  whiteList['cue-before'] = false; // default: none\n\t  whiteList['cursor'] = false; // default: auto\n\t  whiteList['direction'] = false; // default: ltr\n\t  whiteList['display'] = true; // default: depending on individual properties\n\t  whiteList['display-inside'] = true; // default: auto\n\t  whiteList['display-list'] = true; // default: none\n\t  whiteList['display-outside'] = true; // default: inline-level\n\t  whiteList['dominant-baseline'] = false; // default: auto\n\t  whiteList['elevation'] = false; // default: level\n\t  whiteList['empty-cells'] = false; // default: show\n\t  whiteList['filter'] = false; // default: none\n\t  whiteList['flex'] = false; // default: depending on individual properties\n\t  whiteList['flex-basis'] = false; // default: auto\n\t  whiteList['flex-direction'] = false; // default: row\n\t  whiteList['flex-flow'] = false; // default: depending on individual properties\n\t  whiteList['flex-grow'] = false; // default: 0\n\t  whiteList['flex-shrink'] = false; // default: 1\n\t  whiteList['flex-wrap'] = false; // default: nowrap\n\t  whiteList['float'] = false; // default: none\n\t  whiteList['float-offset'] = false; // default: 0 0\n\t  whiteList['flood-color'] = false; // default: black\n\t  whiteList['flood-opacity'] = false; // default: 1\n\t  whiteList['flow-from'] = false; // default: none\n\t  whiteList['flow-into'] = false; // default: none\n\t  whiteList['font'] = true; // default: depending on individual properties\n\t  whiteList['font-family'] = true; // default: implementation dependent\n\t  whiteList['font-feature-settings'] = true; // default: normal\n\t  whiteList['font-kerning'] = true; // default: auto\n\t  whiteList['font-language-override'] = true; // default: normal\n\t  whiteList['font-size'] = true; // default: medium\n\t  whiteList['font-size-adjust'] = true; // default: none\n\t  whiteList['font-stretch'] = true; // default: normal\n\t  whiteList['font-style'] = true; // default: normal\n\t  whiteList['font-synthesis'] = true; // default: weight style\n\t  whiteList['font-variant'] = true; // default: normal\n\t  whiteList['font-variant-alternates'] = true; // default: normal\n\t  whiteList['font-variant-caps'] = true; // default: normal\n\t  whiteList['font-variant-east-asian'] = true; // default: normal\n\t  whiteList['font-variant-ligatures'] = true; // default: normal\n\t  whiteList['font-variant-numeric'] = true; // default: normal\n\t  whiteList['font-variant-position'] = true; // default: normal\n\t  whiteList['font-weight'] = true; // default: normal\n\t  whiteList['grid'] = false; // default: depending on individual properties\n\t  whiteList['grid-area'] = false; // default: depending on individual properties\n\t  whiteList['grid-auto-columns'] = false; // default: auto\n\t  whiteList['grid-auto-flow'] = false; // default: none\n\t  whiteList['grid-auto-rows'] = false; // default: auto\n\t  whiteList['grid-column'] = false; // default: depending on individual properties\n\t  whiteList['grid-column-end'] = false; // default: auto\n\t  whiteList['grid-column-start'] = false; // default: auto\n\t  whiteList['grid-row'] = false; // default: depending on individual properties\n\t  whiteList['grid-row-end'] = false; // default: auto\n\t  whiteList['grid-row-start'] = false; // default: auto\n\t  whiteList['grid-template'] = false; // default: depending on individual properties\n\t  whiteList['grid-template-areas'] = false; // default: none\n\t  whiteList['grid-template-columns'] = false; // default: none\n\t  whiteList['grid-template-rows'] = false; // default: none\n\t  whiteList['hanging-punctuation'] = false; // default: none\n\t  whiteList['height'] = true; // default: auto\n\t  whiteList['hyphens'] = false; // default: manual\n\t  whiteList['icon'] = false; // default: auto\n\t  whiteList['image-orientation'] = false; // default: auto\n\t  whiteList['image-resolution'] = false; // default: normal\n\t  whiteList['ime-mode'] = false; // default: auto\n\t  whiteList['initial-letters'] = false; // default: normal\n\t  whiteList['inline-box-align'] = false; // default: last\n\t  whiteList['justify-content'] = false; // default: auto\n\t  whiteList['justify-items'] = false; // default: auto\n\t  whiteList['justify-self'] = false; // default: auto\n\t  whiteList['left'] = false; // default: auto\n\t  whiteList['letter-spacing'] = true; // default: normal\n\t  whiteList['lighting-color'] = true; // default: white\n\t  whiteList['line-box-contain'] = false; // default: block inline replaced\n\t  whiteList['line-break'] = false; // default: auto\n\t  whiteList['line-grid'] = false; // default: match-parent\n\t  whiteList['line-height'] = false; // default: normal\n\t  whiteList['line-snap'] = false; // default: none\n\t  whiteList['line-stacking'] = false; // default: depending on individual properties\n\t  whiteList['line-stacking-ruby'] = false; // default: exclude-ruby\n\t  whiteList['line-stacking-shift'] = false; // default: consider-shifts\n\t  whiteList['line-stacking-strategy'] = false; // default: inline-line-height\n\t  whiteList['list-style'] = true; // default: depending on individual properties\n\t  whiteList['list-style-image'] = true; // default: none\n\t  whiteList['list-style-position'] = true; // default: outside\n\t  whiteList['list-style-type'] = true; // default: disc\n\t  whiteList['margin'] = true; // default: depending on individual properties\n\t  whiteList['margin-bottom'] = true; // default: 0\n\t  whiteList['margin-left'] = true; // default: 0\n\t  whiteList['margin-right'] = true; // default: 0\n\t  whiteList['margin-top'] = true; // default: 0\n\t  whiteList['marker-offset'] = false; // default: auto\n\t  whiteList['marker-side'] = false; // default: list-item\n\t  whiteList['marks'] = false; // default: none\n\t  whiteList['mask'] = false; // default: border-box\n\t  whiteList['mask-box'] = false; // default: see individual properties\n\t  whiteList['mask-box-outset'] = false; // default: 0\n\t  whiteList['mask-box-repeat'] = false; // default: stretch\n\t  whiteList['mask-box-slice'] = false; // default: 0 fill\n\t  whiteList['mask-box-source'] = false; // default: none\n\t  whiteList['mask-box-width'] = false; // default: auto\n\t  whiteList['mask-clip'] = false; // default: border-box\n\t  whiteList['mask-image'] = false; // default: none\n\t  whiteList['mask-origin'] = false; // default: border-box\n\t  whiteList['mask-position'] = false; // default: center\n\t  whiteList['mask-repeat'] = false; // default: no-repeat\n\t  whiteList['mask-size'] = false; // default: border-box\n\t  whiteList['mask-source-type'] = false; // default: auto\n\t  whiteList['mask-type'] = false; // default: luminance\n\t  whiteList['max-height'] = true; // default: none\n\t  whiteList['max-lines'] = false; // default: none\n\t  whiteList['max-width'] = true; // default: none\n\t  whiteList['min-height'] = true; // default: 0\n\t  whiteList['min-width'] = true; // default: 0\n\t  whiteList['move-to'] = false; // default: normal\n\t  whiteList['nav-down'] = false; // default: auto\n\t  whiteList['nav-index'] = false; // default: auto\n\t  whiteList['nav-left'] = false; // default: auto\n\t  whiteList['nav-right'] = false; // default: auto\n\t  whiteList['nav-up'] = false; // default: auto\n\t  whiteList['object-fit'] = false; // default: fill\n\t  whiteList['object-position'] = false; // default: 50% 50%\n\t  whiteList['opacity'] = false; // default: 1\n\t  whiteList['order'] = false; // default: 0\n\t  whiteList['orphans'] = false; // default: 2\n\t  whiteList['outline'] = false; // default: depending on individual properties\n\t  whiteList['outline-color'] = false; // default: invert\n\t  whiteList['outline-offset'] = false; // default: 0\n\t  whiteList['outline-style'] = false; // default: none\n\t  whiteList['outline-width'] = false; // default: medium\n\t  whiteList['overflow'] = false; // default: depending on individual properties\n\t  whiteList['overflow-wrap'] = false; // default: normal\n\t  whiteList['overflow-x'] = false; // default: visible\n\t  whiteList['overflow-y'] = false; // default: visible\n\t  whiteList['padding'] = true; // default: depending on individual properties\n\t  whiteList['padding-bottom'] = true; // default: 0\n\t  whiteList['padding-left'] = true; // default: 0\n\t  whiteList['padding-right'] = true; // default: 0\n\t  whiteList['padding-top'] = true; // default: 0\n\t  whiteList['page'] = false; // default: auto\n\t  whiteList['page-break-after'] = false; // default: auto\n\t  whiteList['page-break-before'] = false; // default: auto\n\t  whiteList['page-break-inside'] = false; // default: auto\n\t  whiteList['page-policy'] = false; // default: start\n\t  whiteList['pause'] = false; // default: implementation dependent\n\t  whiteList['pause-after'] = false; // default: implementation dependent\n\t  whiteList['pause-before'] = false; // default: implementation dependent\n\t  whiteList['perspective'] = false; // default: none\n\t  whiteList['perspective-origin'] = false; // default: 50% 50%\n\t  whiteList['pitch'] = false; // default: medium\n\t  whiteList['pitch-range'] = false; // default: 50\n\t  whiteList['play-during'] = false; // default: auto\n\t  whiteList['position'] = false; // default: static\n\t  whiteList['presentation-level'] = false; // default: 0\n\t  whiteList['quotes'] = false; // default: text\n\t  whiteList['region-fragment'] = false; // default: auto\n\t  whiteList['resize'] = false; // default: none\n\t  whiteList['rest'] = false; // default: depending on individual properties\n\t  whiteList['rest-after'] = false; // default: none\n\t  whiteList['rest-before'] = false; // default: none\n\t  whiteList['richness'] = false; // default: 50\n\t  whiteList['right'] = false; // default: auto\n\t  whiteList['rotation'] = false; // default: 0\n\t  whiteList['rotation-point'] = false; // default: 50% 50%\n\t  whiteList['ruby-align'] = false; // default: auto\n\t  whiteList['ruby-merge'] = false; // default: separate\n\t  whiteList['ruby-position'] = false; // default: before\n\t  whiteList['shape-image-threshold'] = false; // default: 0.0\n\t  whiteList['shape-outside'] = false; // default: none\n\t  whiteList['shape-margin'] = false; // default: 0\n\t  whiteList['size'] = false; // default: auto\n\t  whiteList['speak'] = false; // default: auto\n\t  whiteList['speak-as'] = false; // default: normal\n\t  whiteList['speak-header'] = false; // default: once\n\t  whiteList['speak-numeral'] = false; // default: continuous\n\t  whiteList['speak-punctuation'] = false; // default: none\n\t  whiteList['speech-rate'] = false; // default: medium\n\t  whiteList['stress'] = false; // default: 50\n\t  whiteList['string-set'] = false; // default: none\n\t  whiteList['tab-size'] = false; // default: 8\n\t  whiteList['table-layout'] = false; // default: auto\n\t  whiteList['text-align'] = true; // default: start\n\t  whiteList['text-align-last'] = true; // default: auto\n\t  whiteList['text-combine-upright'] = true; // default: none\n\t  whiteList['text-decoration'] = true; // default: none\n\t  whiteList['text-decoration-color'] = true; // default: currentColor\n\t  whiteList['text-decoration-line'] = true; // default: none\n\t  whiteList['text-decoration-skip'] = true; // default: objects\n\t  whiteList['text-decoration-style'] = true; // default: solid\n\t  whiteList['text-emphasis'] = true; // default: depending on individual properties\n\t  whiteList['text-emphasis-color'] = true; // default: currentColor\n\t  whiteList['text-emphasis-position'] = true; // default: over right\n\t  whiteList['text-emphasis-style'] = true; // default: none\n\t  whiteList['text-height'] = true; // default: auto\n\t  whiteList['text-indent'] = true; // default: 0\n\t  whiteList['text-justify'] = true; // default: auto\n\t  whiteList['text-orientation'] = true; // default: mixed\n\t  whiteList['text-overflow'] = true; // default: clip\n\t  whiteList['text-shadow'] = true; // default: none\n\t  whiteList['text-space-collapse'] = true; // default: collapse\n\t  whiteList['text-transform'] = true; // default: none\n\t  whiteList['text-underline-position'] = true; // default: auto\n\t  whiteList['text-wrap'] = true; // default: normal\n\t  whiteList['top'] = false; // default: auto\n\t  whiteList['transform'] = false; // default: none\n\t  whiteList['transform-origin'] = false; // default: 50% 50% 0\n\t  whiteList['transform-style'] = false; // default: flat\n\t  whiteList['transition'] = false; // default: depending on individual properties\n\t  whiteList['transition-delay'] = false; // default: 0s\n\t  whiteList['transition-duration'] = false; // default: 0s\n\t  whiteList['transition-property'] = false; // default: all\n\t  whiteList['transition-timing-function'] = false; // default: ease\n\t  whiteList['unicode-bidi'] = false; // default: normal\n\t  whiteList['vertical-align'] = false; // default: baseline\n\t  whiteList['visibility'] = false; // default: visible\n\t  whiteList['voice-balance'] = false; // default: center\n\t  whiteList['voice-duration'] = false; // default: auto\n\t  whiteList['voice-family'] = false; // default: implementation dependent\n\t  whiteList['voice-pitch'] = false; // default: medium\n\t  whiteList['voice-range'] = false; // default: medium\n\t  whiteList['voice-rate'] = false; // default: normal\n\t  whiteList['voice-stress'] = false; // default: normal\n\t  whiteList['voice-volume'] = false; // default: medium\n\t  whiteList['volume'] = false; // default: medium\n\t  whiteList['white-space'] = false; // default: normal\n\t  whiteList['widows'] = false; // default: 2\n\t  whiteList['width'] = true; // default: auto\n\t  whiteList['will-change'] = false; // default: auto\n\t  whiteList['word-break'] = true; // default: normal\n\t  whiteList['word-spacing'] = true; // default: normal\n\t  whiteList['word-wrap'] = true; // default: normal\n\t  whiteList['wrap-flow'] = false; // default: auto\n\t  whiteList['wrap-through'] = false; // default: wrap\n\t  whiteList['writing-mode'] = false; // default: horizontal-tb\n\t  whiteList['z-index'] = false; // default: auto\n\n\t  return whiteList;\n\t}\n\n\n\t/**\n\t * 匹配到白名单上的一个属性时\n\t *\n\t * @param {String} name\n\t * @param {String} value\n\t * @param {Object} options\n\t * @return {String}\n\t */\n\tfunction onAttr (name, value, options) {\n\t  // do nothing\n\t}\n\n\t/**\n\t * 匹配到不在白名单上的一个属性时\n\t *\n\t * @param {String} name\n\t * @param {String} value\n\t * @param {Object} options\n\t * @return {String}\n\t */\n\tfunction onIgnoreAttr (name, value, options) {\n\t  // do nothing\n\t}\n\n\tvar REGEXP_URL_JAVASCRIPT = /javascript\\s*\\:/img;\n\n\t/**\n\t * 过滤属性值\n\t *\n\t * @param {String} name\n\t * @param {String} value\n\t * @return {String}\n\t */\n\tfunction safeAttrValue(name, value) {\n\t  if (REGEXP_URL_JAVASCRIPT.test(value)) return '';\n\t  return value;\n\t}\n\n\n\t_default.whiteList = getDefaultWhiteList();\n\t_default.getDefaultWhiteList = getDefaultWhiteList;\n\t_default.onAttr = onAttr;\n\t_default.onIgnoreAttr = onIgnoreAttr;\n\t_default.safeAttrValue = safeAttrValue;\n\treturn _default;\n}\n\nvar util$1;\nvar hasRequiredUtil$1;\n\nfunction requireUtil$1 () {\n\tif (hasRequiredUtil$1) return util$1;\n\thasRequiredUtil$1 = 1;\n\tutil$1 = {\n\t  indexOf: function (arr, item) {\n\t    var i, j;\n\t    if (Array.prototype.indexOf) {\n\t      return arr.indexOf(item);\n\t    }\n\t    for (i = 0, j = arr.length; i < j; i++) {\n\t      if (arr[i] === item) {\n\t        return i;\n\t      }\n\t    }\n\t    return -1;\n\t  },\n\t  forEach: function (arr, fn, scope) {\n\t    var i, j;\n\t    if (Array.prototype.forEach) {\n\t      return arr.forEach(fn, scope);\n\t    }\n\t    for (i = 0, j = arr.length; i < j; i++) {\n\t      fn.call(scope, arr[i], i, arr);\n\t    }\n\t  },\n\t  trim: function (str) {\n\t    if (String.prototype.trim) {\n\t      return str.trim();\n\t    }\n\t    return str.replace(/(^\\s*)|(\\s*$)/g, '');\n\t  },\n\t  trimRight: function (str) {\n\t    if (String.prototype.trimRight) {\n\t      return str.trimRight();\n\t    }\n\t    return str.replace(/(\\s*$)/g, '');\n\t  }\n\t};\n\treturn util$1;\n}\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar parser$1;\nvar hasRequiredParser$1;\n\nfunction requireParser$1 () {\n\tif (hasRequiredParser$1) return parser$1;\n\thasRequiredParser$1 = 1;\n\tvar _ = requireUtil$1();\n\n\n\t/**\n\t * 解析style\n\t *\n\t * @param {String} css\n\t * @param {Function} onAttr 处理属性的函数\n\t *   参数格式： function (sourcePosition, position, name, value, source)\n\t * @return {String}\n\t */\n\tfunction parseStyle (css, onAttr) {\n\t  css = _.trimRight(css);\n\t  if (css[css.length - 1] !== ';') css += ';';\n\t  var cssLength = css.length;\n\t  var isParenthesisOpen = false;\n\t  var lastPos = 0;\n\t  var i = 0;\n\t  var retCSS = '';\n\n\t  function addNewAttr () {\n\t    // 如果没有正常的闭合圆括号，则直接忽略当前属性\n\t    if (!isParenthesisOpen) {\n\t      var source = _.trim(css.slice(lastPos, i));\n\t      var j = source.indexOf(':');\n\t      if (j !== -1) {\n\t        var name = _.trim(source.slice(0, j));\n\t        var value = _.trim(source.slice(j + 1));\n\t        // 必须有属性名称\n\t        if (name) {\n\t          var ret = onAttr(lastPos, retCSS.length, name, value, source);\n\t          if (ret) retCSS += ret + '; ';\n\t        }\n\t      }\n\t    }\n\t    lastPos = i + 1;\n\t  }\n\n\t  for (; i < cssLength; i++) {\n\t    var c = css[i];\n\t    if (c === '/' && css[i + 1] === '*') {\n\t      // 备注开始\n\t      var j = css.indexOf('*/', i + 2);\n\t      // 如果没有正常的备注结束，则后面的部分全部跳过\n\t      if (j === -1) break;\n\t      // 直接将当前位置调到备注结尾，并且初始化状态\n\t      i = j + 1;\n\t      lastPos = i + 1;\n\t      isParenthesisOpen = false;\n\t    } else if (c === '(') {\n\t      isParenthesisOpen = true;\n\t    } else if (c === ')') {\n\t      isParenthesisOpen = false;\n\t    } else if (c === ';') {\n\t      if (isParenthesisOpen) ; else {\n\t        addNewAttr();\n\t      }\n\t    } else if (c === '\\n') {\n\t      addNewAttr();\n\t    }\n\t  }\n\n\t  return _.trim(retCSS);\n\t}\n\n\tparser$1 = parseStyle;\n\treturn parser$1;\n}\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar css;\nvar hasRequiredCss;\n\nfunction requireCss () {\n\tif (hasRequiredCss) return css;\n\thasRequiredCss = 1;\n\tvar DEFAULT = require_default$1();\n\tvar parseStyle = requireParser$1();\n\trequireUtil$1();\n\n\n\t/**\n\t * 返回值是否为空\n\t *\n\t * @param {Object} obj\n\t * @return {Boolean}\n\t */\n\tfunction isNull (obj) {\n\t  return (obj === undefined || obj === null);\n\t}\n\n\t/**\n\t * 浅拷贝对象\n\t *\n\t * @param {Object} obj\n\t * @return {Object}\n\t */\n\tfunction shallowCopyObject (obj) {\n\t  var ret = {};\n\t  for (var i in obj) {\n\t    ret[i] = obj[i];\n\t  }\n\t  return ret;\n\t}\n\n\t/**\n\t * 创建CSS过滤器\n\t *\n\t * @param {Object} options\n\t *   - {Object} whiteList\n\t *   - {Function} onAttr\n\t *   - {Function} onIgnoreAttr\n\t *   - {Function} safeAttrValue\n\t */\n\tfunction FilterCSS (options) {\n\t  options = shallowCopyObject(options || {});\n\t  options.whiteList = options.whiteList || DEFAULT.whiteList;\n\t  options.onAttr = options.onAttr || DEFAULT.onAttr;\n\t  options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr;\n\t  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n\t  this.options = options;\n\t}\n\n\tFilterCSS.prototype.process = function (css) {\n\t  // 兼容各种奇葩输入\n\t  css = css || '';\n\t  css = css.toString();\n\t  if (!css) return '';\n\n\t  var me = this;\n\t  var options = me.options;\n\t  var whiteList = options.whiteList;\n\t  var onAttr = options.onAttr;\n\t  var onIgnoreAttr = options.onIgnoreAttr;\n\t  var safeAttrValue = options.safeAttrValue;\n\n\t  var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) {\n\n\t    var check = whiteList[name];\n\t    var isWhite = false;\n\t    if (check === true) isWhite = check;\n\t    else if (typeof check === 'function') isWhite = check(value);\n\t    else if (check instanceof RegExp) isWhite = check.test(value);\n\t    if (isWhite !== true) isWhite = false;\n\n\t    // 如果过滤后 value 为空则直接忽略\n\t    value = safeAttrValue(name, value);\n\t    if (!value) return;\n\n\t    var opts = {\n\t      position: position,\n\t      sourcePosition: sourcePosition,\n\t      source: source,\n\t      isWhite: isWhite\n\t    };\n\n\t    if (isWhite) {\n\n\t      var ret = onAttr(name, value, opts);\n\t      if (isNull(ret)) {\n\t        return name + ':' + value;\n\t      } else {\n\t        return ret;\n\t      }\n\n\t    } else {\n\n\t      var ret = onIgnoreAttr(name, value, opts);\n\t      if (!isNull(ret)) {\n\t        return ret;\n\t      }\n\n\t    }\n\t  });\n\n\t  return retCSS;\n\t};\n\n\n\tcss = FilterCSS;\n\treturn css;\n}\n\n/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar hasRequiredLib$1;\n\nfunction requireLib$1 () {\n\tif (hasRequiredLib$1) return lib.exports;\n\thasRequiredLib$1 = 1;\n\t(function (module, exports) {\n\t\tvar DEFAULT = require_default$1();\n\t\tvar FilterCSS = requireCss();\n\n\n\t\t/**\n\t\t * XSS过滤\n\t\t *\n\t\t * @param {String} css 要过滤的CSS代码\n\t\t * @param {Object} options 选项：whiteList, onAttr, onIgnoreAttr\n\t\t * @return {String}\n\t\t */\n\t\tfunction filterCSS (html, options) {\n\t\t  var xss = new FilterCSS(options);\n\t\t  return xss.process(html);\n\t\t}\n\n\n\t\t// 输出\n\t\texports = module.exports = filterCSS;\n\t\texports.FilterCSS = FilterCSS;\n\t\tfor (var i in DEFAULT) exports[i] = DEFAULT[i];\n\n\t\t// 在浏览器端使用\n\t\tif (typeof window !== 'undefined') {\n\t\t  window.filterCSS = module.exports;\n\t\t} \n\t} (lib, lib.exports));\n\treturn lib.exports;\n}\n\nvar util;\nvar hasRequiredUtil;\n\nfunction requireUtil () {\n\tif (hasRequiredUtil) return util;\n\thasRequiredUtil = 1;\n\tutil = {\n\t  indexOf: function (arr, item) {\n\t    var i, j;\n\t    if (Array.prototype.indexOf) {\n\t      return arr.indexOf(item);\n\t    }\n\t    for (i = 0, j = arr.length; i < j; i++) {\n\t      if (arr[i] === item) {\n\t        return i;\n\t      }\n\t    }\n\t    return -1;\n\t  },\n\t  forEach: function (arr, fn, scope) {\n\t    var i, j;\n\t    if (Array.prototype.forEach) {\n\t      return arr.forEach(fn, scope);\n\t    }\n\t    for (i = 0, j = arr.length; i < j; i++) {\n\t      fn.call(scope, arr[i], i, arr);\n\t    }\n\t  },\n\t  trim: function (str) {\n\t    if (String.prototype.trim) {\n\t      return str.trim();\n\t    }\n\t    return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\n\t  },\n\t  spaceIndex: function (str) {\n\t    var reg = /\\s|\\n|\\t/;\n\t    var match = reg.exec(str);\n\t    return match ? match.index : -1;\n\t  },\n\t};\n\treturn util;\n}\n\n/**\n * default settings\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar hasRequired_default;\n\nfunction require_default () {\n\tif (hasRequired_default) return _default$1;\n\thasRequired_default = 1;\n\tvar FilterCSS = requireLib$1().FilterCSS;\n\tvar getDefaultCSSWhiteList = requireLib$1().getDefaultWhiteList;\n\tvar _ = requireUtil();\n\n\tfunction getDefaultWhiteList() {\n\t  return {\n\t    a: [\"target\", \"href\", \"title\"],\n\t    abbr: [\"title\"],\n\t    address: [],\n\t    area: [\"shape\", \"coords\", \"href\", \"alt\"],\n\t    article: [],\n\t    aside: [],\n\t    audio: [\n\t      \"autoplay\",\n\t      \"controls\",\n\t      \"crossorigin\",\n\t      \"loop\",\n\t      \"muted\",\n\t      \"preload\",\n\t      \"src\",\n\t    ],\n\t    b: [],\n\t    bdi: [\"dir\"],\n\t    bdo: [\"dir\"],\n\t    big: [],\n\t    blockquote: [\"cite\"],\n\t    br: [],\n\t    caption: [],\n\t    center: [],\n\t    cite: [],\n\t    code: [],\n\t    col: [\"align\", \"valign\", \"span\", \"width\"],\n\t    colgroup: [\"align\", \"valign\", \"span\", \"width\"],\n\t    dd: [],\n\t    del: [\"datetime\"],\n\t    details: [\"open\"],\n\t    div: [],\n\t    dl: [],\n\t    dt: [],\n\t    em: [],\n\t    figcaption: [],\n\t    figure: [],\n\t    font: [\"color\", \"size\", \"face\"],\n\t    footer: [],\n\t    h1: [],\n\t    h2: [],\n\t    h3: [],\n\t    h4: [],\n\t    h5: [],\n\t    h6: [],\n\t    header: [],\n\t    hr: [],\n\t    i: [],\n\t    img: [\"src\", \"alt\", \"title\", \"width\", \"height\", \"loading\"],\n\t    ins: [\"datetime\"],\n\t    kbd: [],\n\t    li: [],\n\t    mark: [],\n\t    nav: [],\n\t    ol: [],\n\t    p: [],\n\t    pre: [],\n\t    s: [],\n\t    section: [],\n\t    small: [],\n\t    span: [],\n\t    sub: [],\n\t    summary: [],\n\t    sup: [],\n\t    strong: [],\n\t    strike: [],\n\t    table: [\"width\", \"border\", \"align\", \"valign\"],\n\t    tbody: [\"align\", \"valign\"],\n\t    td: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n\t    tfoot: [\"align\", \"valign\"],\n\t    th: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n\t    thead: [\"align\", \"valign\"],\n\t    tr: [\"rowspan\", \"align\", \"valign\"],\n\t    tt: [],\n\t    u: [],\n\t    ul: [],\n\t    video: [\n\t      \"autoplay\",\n\t      \"controls\",\n\t      \"crossorigin\",\n\t      \"loop\",\n\t      \"muted\",\n\t      \"playsinline\",\n\t      \"poster\",\n\t      \"preload\",\n\t      \"src\",\n\t      \"height\",\n\t      \"width\",\n\t    ],\n\t  };\n\t}\n\n\tvar defaultCSSFilter = new FilterCSS();\n\n\t/**\n\t * default onTag function\n\t *\n\t * @param {String} tag\n\t * @param {String} html\n\t * @param {Object} options\n\t * @return {String}\n\t */\n\tfunction onTag(tag, html, options) {\n\t  // do nothing\n\t}\n\n\t/**\n\t * default onIgnoreTag function\n\t *\n\t * @param {String} tag\n\t * @param {String} html\n\t * @param {Object} options\n\t * @return {String}\n\t */\n\tfunction onIgnoreTag(tag, html, options) {\n\t  // do nothing\n\t}\n\n\t/**\n\t * default onTagAttr function\n\t *\n\t * @param {String} tag\n\t * @param {String} name\n\t * @param {String} value\n\t * @return {String}\n\t */\n\tfunction onTagAttr(tag, name, value) {\n\t  // do nothing\n\t}\n\n\t/**\n\t * default onIgnoreTagAttr function\n\t *\n\t * @param {String} tag\n\t * @param {String} name\n\t * @param {String} value\n\t * @return {String}\n\t */\n\tfunction onIgnoreTagAttr(tag, name, value) {\n\t  // do nothing\n\t}\n\n\t/**\n\t * default escapeHtml function\n\t *\n\t * @param {String} html\n\t */\n\tfunction escapeHtml(html) {\n\t  return html.replace(REGEXP_LT, \"&lt;\").replace(REGEXP_GT, \"&gt;\");\n\t}\n\n\t/**\n\t * default safeAttrValue function\n\t *\n\t * @param {String} tag\n\t * @param {String} name\n\t * @param {String} value\n\t * @param {Object} cssFilter\n\t * @return {String}\n\t */\n\tfunction safeAttrValue(tag, name, value, cssFilter) {\n\t  // unescape attribute value firstly\n\t  value = friendlyAttrValue(value);\n\n\t  if (name === \"href\" || name === \"src\") {\n\t    // filter `href` and `src` attribute\n\t    // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`\n\t    value = _.trim(value);\n\t    if (value === \"#\") return \"#\";\n\t    if (\n\t      !(\n\t        value.substr(0, 7) === \"http://\" ||\n\t        value.substr(0, 8) === \"https://\" ||\n\t        value.substr(0, 7) === \"mailto:\" ||\n\t        value.substr(0, 4) === \"tel:\" ||\n\t        value.substr(0, 11) === \"data:image/\" ||\n\t        value.substr(0, 6) === \"ftp://\" ||\n\t        value.substr(0, 2) === \"./\" ||\n\t        value.substr(0, 3) === \"../\" ||\n\t        value[0] === \"#\" ||\n\t        value[0] === \"/\"\n\t      )\n\t    ) {\n\t      return \"\";\n\t    }\n\t  } else if (name === \"background\") {\n\t    // filter `background` attribute (maybe no use)\n\t    // `javascript:`\n\t    REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n\t    if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n\t      return \"\";\n\t    }\n\t  } else if (name === \"style\") {\n\t    // `expression()`\n\t    REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n\t    if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n\t      return \"\";\n\t    }\n\t    // `url()`\n\t    REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n\t    if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n\t      REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n\t      if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n\t        return \"\";\n\t      }\n\t    }\n\t    if (cssFilter !== false) {\n\t      cssFilter = cssFilter || defaultCSSFilter;\n\t      value = cssFilter.process(value);\n\t    }\n\t  }\n\n\t  // escape `<>\"` before returns\n\t  value = escapeAttrValue(value);\n\t  return value;\n\t}\n\n\t// RegExp list\n\tvar REGEXP_LT = /</g;\n\tvar REGEXP_GT = />/g;\n\tvar REGEXP_QUOTE = /\"/g;\n\tvar REGEXP_QUOTE_2 = /&quot;/g;\n\tvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\n\tvar REGEXP_ATTR_VALUE_COLON = /&colon;?/gim;\n\tvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\n\t// var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\n\tvar REGEXP_DEFAULT_ON_TAG_ATTR_4 =\n\t  /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a):/gi;\n\t// var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\n\t// var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//gi;\n\tvar REGEXP_DEFAULT_ON_TAG_ATTR_7 =\n\t  /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/gi;\n\tvar REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/gi;\n\n\t/**\n\t * escape double quote\n\t *\n\t * @param {String} str\n\t * @return {String} str\n\t */\n\tfunction escapeQuote(str) {\n\t  return str.replace(REGEXP_QUOTE, \"&quot;\");\n\t}\n\n\t/**\n\t * unescape double quote\n\t *\n\t * @param {String} str\n\t * @return {String} str\n\t */\n\tfunction unescapeQuote(str) {\n\t  return str.replace(REGEXP_QUOTE_2, '\"');\n\t}\n\n\t/**\n\t * escape html entities\n\t *\n\t * @param {String} str\n\t * @return {String}\n\t */\n\tfunction escapeHtmlEntities(str) {\n\t  return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) {\n\t    return code[0] === \"x\" || code[0] === \"X\"\n\t      ? String.fromCharCode(parseInt(code.substr(1), 16))\n\t      : String.fromCharCode(parseInt(code, 10));\n\t  });\n\t}\n\n\t/**\n\t * escape html5 new danger entities\n\t *\n\t * @param {String} str\n\t * @return {String}\n\t */\n\tfunction escapeDangerHtml5Entities(str) {\n\t  return str\n\t    .replace(REGEXP_ATTR_VALUE_COLON, \":\")\n\t    .replace(REGEXP_ATTR_VALUE_NEWLINE, \" \");\n\t}\n\n\t/**\n\t * clear nonprintable characters\n\t *\n\t * @param {String} str\n\t * @return {String}\n\t */\n\tfunction clearNonPrintableCharacter(str) {\n\t  var str2 = \"\";\n\t  for (var i = 0, len = str.length; i < len; i++) {\n\t    str2 += str.charCodeAt(i) < 32 ? \" \" : str.charAt(i);\n\t  }\n\t  return _.trim(str2);\n\t}\n\n\t/**\n\t * get friendly attribute value\n\t *\n\t * @param {String} str\n\t * @return {String}\n\t */\n\tfunction friendlyAttrValue(str) {\n\t  str = unescapeQuote(str);\n\t  str = escapeHtmlEntities(str);\n\t  str = escapeDangerHtml5Entities(str);\n\t  str = clearNonPrintableCharacter(str);\n\t  return str;\n\t}\n\n\t/**\n\t * unescape attribute value\n\t *\n\t * @param {String} str\n\t * @return {String}\n\t */\n\tfunction escapeAttrValue(str) {\n\t  str = escapeQuote(str);\n\t  str = escapeHtml(str);\n\t  return str;\n\t}\n\n\t/**\n\t * `onIgnoreTag` function for removing all the tags that are not in whitelist\n\t */\n\tfunction onIgnoreTagStripAll() {\n\t  return \"\";\n\t}\n\n\t/**\n\t * remove tag body\n\t * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional)\n\t *\n\t * @param {array} tags\n\t * @param {function} next\n\t */\n\tfunction StripTagBody(tags, next) {\n\t  if (typeof next !== \"function\") {\n\t    next = function () {};\n\t  }\n\n\t  var isRemoveAllTag = !Array.isArray(tags);\n\t  function isRemoveTag(tag) {\n\t    if (isRemoveAllTag) return true;\n\t    return _.indexOf(tags, tag) !== -1;\n\t  }\n\n\t  var removeList = [];\n\t  var posStart = false;\n\n\t  return {\n\t    onIgnoreTag: function (tag, html, options) {\n\t      if (isRemoveTag(tag)) {\n\t        if (options.isClosing) {\n\t          var ret = \"[/removed]\";\n\t          var end = options.position + ret.length;\n\t          removeList.push([\n\t            posStart !== false ? posStart : options.position,\n\t            end,\n\t          ]);\n\t          posStart = false;\n\t          return ret;\n\t        } else {\n\t          if (!posStart) {\n\t            posStart = options.position;\n\t          }\n\t          return \"[removed]\";\n\t        }\n\t      } else {\n\t        return next(tag, html, options);\n\t      }\n\t    },\n\t    remove: function (html) {\n\t      var rethtml = \"\";\n\t      var lastPos = 0;\n\t      _.forEach(removeList, function (pos) {\n\t        rethtml += html.slice(lastPos, pos[0]);\n\t        lastPos = pos[1];\n\t      });\n\t      rethtml += html.slice(lastPos);\n\t      return rethtml;\n\t    },\n\t  };\n\t}\n\n\t/**\n\t * remove html comments\n\t *\n\t * @param {String} html\n\t * @return {String}\n\t */\n\tfunction stripCommentTag(html) {\n\t  var retHtml = \"\";\n\t  var lastPos = 0;\n\t  while (lastPos < html.length) {\n\t    var i = html.indexOf(\"<!--\", lastPos);\n\t    if (i === -1) {\n\t      retHtml += html.slice(lastPos);\n\t      break;\n\t    }\n\t    retHtml += html.slice(lastPos, i);\n\t    var j = html.indexOf(\"-->\", i);\n\t    if (j === -1) {\n\t      break;\n\t    }\n\t    lastPos = j + 3;\n\t  }\n\t  return retHtml;\n\t}\n\n\t/**\n\t * remove invisible characters\n\t *\n\t * @param {String} html\n\t * @return {String}\n\t */\n\tfunction stripBlankChar(html) {\n\t  var chars = html.split(\"\");\n\t  chars = chars.filter(function (char) {\n\t    var c = char.charCodeAt(0);\n\t    if (c === 127) return false;\n\t    if (c <= 31) {\n\t      if (c === 10 || c === 13) return true;\n\t      return false;\n\t    }\n\t    return true;\n\t  });\n\t  return chars.join(\"\");\n\t}\n\n\t_default$1.whiteList = getDefaultWhiteList();\n\t_default$1.getDefaultWhiteList = getDefaultWhiteList;\n\t_default$1.onTag = onTag;\n\t_default$1.onIgnoreTag = onIgnoreTag;\n\t_default$1.onTagAttr = onTagAttr;\n\t_default$1.onIgnoreTagAttr = onIgnoreTagAttr;\n\t_default$1.safeAttrValue = safeAttrValue;\n\t_default$1.escapeHtml = escapeHtml;\n\t_default$1.escapeQuote = escapeQuote;\n\t_default$1.unescapeQuote = unescapeQuote;\n\t_default$1.escapeHtmlEntities = escapeHtmlEntities;\n\t_default$1.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\n\t_default$1.clearNonPrintableCharacter = clearNonPrintableCharacter;\n\t_default$1.friendlyAttrValue = friendlyAttrValue;\n\t_default$1.escapeAttrValue = escapeAttrValue;\n\t_default$1.onIgnoreTagStripAll = onIgnoreTagStripAll;\n\t_default$1.StripTagBody = StripTagBody;\n\t_default$1.stripCommentTag = stripCommentTag;\n\t_default$1.stripBlankChar = stripBlankChar;\n\t_default$1.attributeWrapSign = '\"';\n\t_default$1.cssFilter = defaultCSSFilter;\n\t_default$1.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n\treturn _default$1;\n}\n\nvar parser = {};\n\n/**\n * Simple HTML Parser\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar hasRequiredParser;\n\nfunction requireParser () {\n\tif (hasRequiredParser) return parser;\n\thasRequiredParser = 1;\n\tvar _ = requireUtil();\n\n\t/**\n\t * get tag name\n\t *\n\t * @param {String} html e.g. '<a hef=\"#\">'\n\t * @return {String}\n\t */\n\tfunction getTagName(html) {\n\t  var i = _.spaceIndex(html);\n\t  var tagName;\n\t  if (i === -1) {\n\t    tagName = html.slice(1, -1);\n\t  } else {\n\t    tagName = html.slice(1, i + 1);\n\t  }\n\t  tagName = _.trim(tagName).toLowerCase();\n\t  if (tagName.slice(0, 1) === \"/\") tagName = tagName.slice(1);\n\t  if (tagName.slice(-1) === \"/\") tagName = tagName.slice(0, -1);\n\t  return tagName;\n\t}\n\n\t/**\n\t * is close tag?\n\t *\n\t * @param {String} html 如：'<a hef=\"#\">'\n\t * @return {Boolean}\n\t */\n\tfunction isClosing(html) {\n\t  return html.slice(0, 2) === \"</\";\n\t}\n\n\t/**\n\t * parse input html and returns processed html\n\t *\n\t * @param {String} html\n\t * @param {Function} onTag e.g. function (sourcePosition, position, tag, html, isClosing)\n\t * @param {Function} escapeHtml\n\t * @return {String}\n\t */\n\tfunction parseTag(html, onTag, escapeHtml) {\n\n\t  var rethtml = \"\";\n\t  var lastPos = 0;\n\t  var tagStart = false;\n\t  var quoteStart = false;\n\t  var currentPos = 0;\n\t  var len = html.length;\n\t  var currentTagName = \"\";\n\t  var currentHtml = \"\";\n\n\t  chariterator: for (currentPos = 0; currentPos < len; currentPos++) {\n\t    var c = html.charAt(currentPos);\n\t    if (tagStart === false) {\n\t      if (c === \"<\") {\n\t        tagStart = currentPos;\n\t        continue;\n\t      }\n\t    } else {\n\t      if (quoteStart === false) {\n\t        if (c === \"<\") {\n\t          rethtml += escapeHtml(html.slice(lastPos, currentPos));\n\t          tagStart = currentPos;\n\t          lastPos = currentPos;\n\t          continue;\n\t        }\n\t        if (c === \">\" || currentPos === len - 1) {\n\t          rethtml += escapeHtml(html.slice(lastPos, tagStart));\n\t          currentHtml = html.slice(tagStart, currentPos + 1);\n\t          currentTagName = getTagName(currentHtml);\n\t          rethtml += onTag(\n\t            tagStart,\n\t            rethtml.length,\n\t            currentTagName,\n\t            currentHtml,\n\t            isClosing(currentHtml)\n\t          );\n\t          lastPos = currentPos + 1;\n\t          tagStart = false;\n\t          continue;\n\t        }\n\t        if (c === '\"' || c === \"'\") {\n\t          var i = 1;\n\t          var ic = html.charAt(currentPos - i);\n\n\t          while (ic.trim() === \"\" || ic === \"=\") {\n\t            if (ic === \"=\") {\n\t              quoteStart = c;\n\t              continue chariterator;\n\t            }\n\t            ic = html.charAt(currentPos - ++i);\n\t          }\n\t        }\n\t      } else {\n\t        if (c === quoteStart) {\n\t          quoteStart = false;\n\t          continue;\n\t        }\n\t      }\n\t    }\n\t  }\n\t  if (lastPos < len) {\n\t    rethtml += escapeHtml(html.substr(lastPos));\n\t  }\n\n\t  return rethtml;\n\t}\n\n\tvar REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9\\\\_:.-]/gim;\n\n\t/**\n\t * parse input attributes and returns processed attributes\n\t *\n\t * @param {String} html e.g. `href=\"#\" target=\"_blank\"`\n\t * @param {Function} onAttr e.g. `function (name, value)`\n\t * @return {String}\n\t */\n\tfunction parseAttr(html, onAttr) {\n\n\t  var lastPos = 0;\n\t  var lastMarkPos = 0;\n\t  var retAttrs = [];\n\t  var tmpName = false;\n\t  var len = html.length;\n\n\t  function addAttr(name, value) {\n\t    name = _.trim(name);\n\t    name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, \"\").toLowerCase();\n\t    if (name.length < 1) return;\n\t    var ret = onAttr(name, value || \"\");\n\t    if (ret) retAttrs.push(ret);\n\t  }\n\n\t  // 逐个分析字符\n\t  for (var i = 0; i < len; i++) {\n\t    var c = html.charAt(i);\n\t    var v, j;\n\t    if (tmpName === false && c === \"=\") {\n\t      tmpName = html.slice(lastPos, i);\n\t      lastPos = i + 1;\n\t      lastMarkPos = html.charAt(lastPos) === '\"' || html.charAt(lastPos) === \"'\" ? lastPos : findNextQuotationMark(html, i + 1);\n\t      continue;\n\t    }\n\t    if (tmpName !== false) {\n\t      if (\n\t        i === lastMarkPos\n\t      ) {\n\t        j = html.indexOf(c, i + 1);\n\t        if (j === -1) {\n\t          break;\n\t        } else {\n\t          v = _.trim(html.slice(lastMarkPos + 1, j));\n\t          addAttr(tmpName, v);\n\t          tmpName = false;\n\t          i = j;\n\t          lastPos = i + 1;\n\t          continue;\n\t        }\n\t      }\n\t    }\n\t    if (/\\s|\\n|\\t/.test(c)) {\n\t      html = html.replace(/\\s|\\n|\\t/g, \" \");\n\t      if (tmpName === false) {\n\t        j = findNextEqual(html, i);\n\t        if (j === -1) {\n\t          v = _.trim(html.slice(lastPos, i));\n\t          addAttr(v);\n\t          tmpName = false;\n\t          lastPos = i + 1;\n\t          continue;\n\t        } else {\n\t          i = j - 1;\n\t          continue;\n\t        }\n\t      } else {\n\t        j = findBeforeEqual(html, i - 1);\n\t        if (j === -1) {\n\t          v = _.trim(html.slice(lastPos, i));\n\t          v = stripQuoteWrap(v);\n\t          addAttr(tmpName, v);\n\t          tmpName = false;\n\t          lastPos = i + 1;\n\t          continue;\n\t        } else {\n\t          continue;\n\t        }\n\t      }\n\t    }\n\t  }\n\n\t  if (lastPos < html.length) {\n\t    if (tmpName === false) {\n\t      addAttr(html.slice(lastPos));\n\t    } else {\n\t      addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos))));\n\t    }\n\t  }\n\n\t  return _.trim(retAttrs.join(\" \"));\n\t}\n\n\tfunction findNextEqual(str, i) {\n\t  for (; i < str.length; i++) {\n\t    var c = str[i];\n\t    if (c === \" \") continue;\n\t    if (c === \"=\") return i;\n\t    return -1;\n\t  }\n\t}\n\n\tfunction findNextQuotationMark(str, i) {\n\t  for (; i < str.length; i++) {\n\t    var c = str[i];\n\t    if (c === \" \") continue;\n\t    if (c === \"'\" || c === '\"') return i;\n\t    return -1;\n\t  }\n\t}\n\n\tfunction findBeforeEqual(str, i) {\n\t  for (; i > 0; i--) {\n\t    var c = str[i];\n\t    if (c === \" \") continue;\n\t    if (c === \"=\") return i;\n\t    return -1;\n\t  }\n\t}\n\n\tfunction isQuoteWrapString(text) {\n\t  if (\n\t    (text[0] === '\"' && text[text.length - 1] === '\"') ||\n\t    (text[0] === \"'\" && text[text.length - 1] === \"'\")\n\t  ) {\n\t    return true;\n\t  } else {\n\t    return false;\n\t  }\n\t}\n\n\tfunction stripQuoteWrap(text) {\n\t  if (isQuoteWrapString(text)) {\n\t    return text.substr(1, text.length - 2);\n\t  } else {\n\t    return text;\n\t  }\n\t}\n\n\tparser.parseTag = parseTag;\n\tparser.parseAttr = parseAttr;\n\treturn parser;\n}\n\n/**\n * filter xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar xss;\nvar hasRequiredXss;\n\nfunction requireXss () {\n\tif (hasRequiredXss) return xss;\n\thasRequiredXss = 1;\n\tvar FilterCSS = requireLib$1().FilterCSS;\n\tvar DEFAULT = require_default();\n\tvar parser = requireParser();\n\tvar parseTag = parser.parseTag;\n\tvar parseAttr = parser.parseAttr;\n\tvar _ = requireUtil();\n\n\t/**\n\t * returns `true` if the input value is `undefined` or `null`\n\t *\n\t * @param {Object} obj\n\t * @return {Boolean}\n\t */\n\tfunction isNull(obj) {\n\t  return obj === undefined || obj === null;\n\t}\n\n\t/**\n\t * get attributes for a tag\n\t *\n\t * @param {String} html\n\t * @return {Object}\n\t *   - {String} html\n\t *   - {Boolean} closing\n\t */\n\tfunction getAttrs(html) {\n\t  var i = _.spaceIndex(html);\n\t  if (i === -1) {\n\t    return {\n\t      html: \"\",\n\t      closing: html[html.length - 2] === \"/\",\n\t    };\n\t  }\n\t  html = _.trim(html.slice(i + 1, -1));\n\t  var isClosing = html[html.length - 1] === \"/\";\n\t  if (isClosing) html = _.trim(html.slice(0, -1));\n\t  return {\n\t    html: html,\n\t    closing: isClosing,\n\t  };\n\t}\n\n\t/**\n\t * shallow copy\n\t *\n\t * @param {Object} obj\n\t * @return {Object}\n\t */\n\tfunction shallowCopyObject(obj) {\n\t  var ret = {};\n\t  for (var i in obj) {\n\t    ret[i] = obj[i];\n\t  }\n\t  return ret;\n\t}\n\n\tfunction keysToLowerCase(obj) {\n\t  var ret = {};\n\t  for (var i in obj) {\n\t    if (Array.isArray(obj[i])) {\n\t      ret[i.toLowerCase()] = obj[i].map(function (item) {\n\t        return item.toLowerCase();\n\t      });\n\t    } else {\n\t      ret[i.toLowerCase()] = obj[i];\n\t    }\n\t  }\n\t  return ret;\n\t}\n\n\t/**\n\t * FilterXSS class\n\t *\n\t * @param {Object} options\n\t *        whiteList (or allowList), onTag, onTagAttr, onIgnoreTag,\n\t *        onIgnoreTagAttr, safeAttrValue, escapeHtml\n\t *        stripIgnoreTagBody, allowCommentTag, stripBlankChar\n\t *        css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter`\n\t */\n\tfunction FilterXSS(options) {\n\t  options = shallowCopyObject(options || {});\n\n\t  if (options.stripIgnoreTag) {\n\t    if (options.onIgnoreTag) {\n\t      console.error(\n\t        'Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time'\n\t      );\n\t    }\n\t    options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n\t  }\n\t  if (options.whiteList || options.allowList) {\n\t    options.whiteList = keysToLowerCase(options.whiteList || options.allowList);\n\t  } else {\n\t    options.whiteList = DEFAULT.whiteList;\n\t  }\n\n\t  this.attributeWrapSign = options.singleQuotedAttributeValue === true ? \"'\" : DEFAULT.attributeWrapSign;\n\n\t  options.onTag = options.onTag || DEFAULT.onTag;\n\t  options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n\t  options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n\t  options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n\t  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n\t  options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n\t  this.options = options;\n\n\t  if (options.css === false) {\n\t    this.cssFilter = false;\n\t  } else {\n\t    options.css = options.css || {};\n\t    this.cssFilter = new FilterCSS(options.css);\n\t  }\n\t}\n\n\t/**\n\t * start process and returns result\n\t *\n\t * @param {String} html\n\t * @return {String}\n\t */\n\tFilterXSS.prototype.process = function (html) {\n\t  // compatible with the input\n\t  html = html || \"\";\n\t  html = html.toString();\n\t  if (!html) return \"\";\n\n\t  var me = this;\n\t  var options = me.options;\n\t  var whiteList = options.whiteList;\n\t  var onTag = options.onTag;\n\t  var onIgnoreTag = options.onIgnoreTag;\n\t  var onTagAttr = options.onTagAttr;\n\t  var onIgnoreTagAttr = options.onIgnoreTagAttr;\n\t  var safeAttrValue = options.safeAttrValue;\n\t  var escapeHtml = options.escapeHtml;\n\t  var attributeWrapSign = me.attributeWrapSign;\n\t  var cssFilter = me.cssFilter;\n\n\t  // remove invisible characters\n\t  if (options.stripBlankChar) {\n\t    html = DEFAULT.stripBlankChar(html);\n\t  }\n\n\t  // remove html comments\n\t  if (!options.allowCommentTag) {\n\t    html = DEFAULT.stripCommentTag(html);\n\t  }\n\n\t  // if enable stripIgnoreTagBody\n\t  var stripIgnoreTagBody = false;\n\t  if (options.stripIgnoreTagBody) {\n\t    stripIgnoreTagBody = DEFAULT.StripTagBody(\n\t      options.stripIgnoreTagBody,\n\t      onIgnoreTag\n\t    );\n\t    onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n\t  }\n\n\t  var retHtml = parseTag(\n\t    html,\n\t    function (sourcePosition, position, tag, html, isClosing) {\n\t      var info = {\n\t        sourcePosition: sourcePosition,\n\t        position: position,\n\t        isClosing: isClosing,\n\t        isWhite: Object.prototype.hasOwnProperty.call(whiteList, tag),\n\t      };\n\n\t      // call `onTag()`\n\t      var ret = onTag(tag, html, info);\n\t      if (!isNull(ret)) return ret;\n\n\t      if (info.isWhite) {\n\t        if (info.isClosing) {\n\t          return \"</\" + tag + \">\";\n\t        }\n\n\t        var attrs = getAttrs(html);\n\t        var whiteAttrList = whiteList[tag];\n\t        var attrsHtml = parseAttr(attrs.html, function (name, value) {\n\t          // call `onTagAttr()`\n\t          var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1;\n\t          var ret = onTagAttr(tag, name, value, isWhiteAttr);\n\t          if (!isNull(ret)) return ret;\n\n\t          if (isWhiteAttr) {\n\t            // call `safeAttrValue()`\n\t            value = safeAttrValue(tag, name, value, cssFilter);\n\t            if (value) {\n\t              return name + '=' + attributeWrapSign + value + attributeWrapSign;\n\t            } else {\n\t              return name;\n\t            }\n\t          } else {\n\t            // call `onIgnoreTagAttr()`\n\t            ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n\t            if (!isNull(ret)) return ret;\n\t            return;\n\t          }\n\t        });\n\n\t        // build new tag html\n\t        html = \"<\" + tag;\n\t        if (attrsHtml) html += \" \" + attrsHtml;\n\t        if (attrs.closing) html += \" /\";\n\t        html += \">\";\n\t        return html;\n\t      } else {\n\t        // call `onIgnoreTag()`\n\t        ret = onIgnoreTag(tag, html, info);\n\t        if (!isNull(ret)) return ret;\n\t        return escapeHtml(html);\n\t      }\n\t    },\n\t    escapeHtml\n\t  );\n\n\t  // if enable stripIgnoreTagBody\n\t  if (stripIgnoreTagBody) {\n\t    retHtml = stripIgnoreTagBody.remove(retHtml);\n\t  }\n\n\t  return retHtml;\n\t};\n\n\txss = FilterXSS;\n\treturn xss;\n}\n\n/**\n * xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar hasRequiredLib;\n\nfunction requireLib () {\n\tif (hasRequiredLib) return lib$1.exports;\n\thasRequiredLib = 1;\n\t(function (module, exports) {\n\t\tvar DEFAULT = require_default();\n\t\tvar parser = requireParser();\n\t\tvar FilterXSS = requireXss();\n\n\t\t/**\n\t\t * filter xss function\n\t\t *\n\t\t * @param {String} html\n\t\t * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml }\n\t\t * @return {String}\n\t\t */\n\t\tfunction filterXSS(html, options) {\n\t\t  var xss = new FilterXSS(options);\n\t\t  return xss.process(html);\n\t\t}\n\n\t\texports = module.exports = filterXSS;\n\t\texports.filterXSS = filterXSS;\n\t\texports.FilterXSS = FilterXSS;\n\n\t\t(function () {\n\t\t  for (var i in DEFAULT) {\n\t\t    exports[i] = DEFAULT[i];\n\t\t  }\n\t\t  for (var j in parser) {\n\t\t    exports[j] = parser[j];\n\t\t  }\n\t\t})();\n\n\t\t// using `xss` on the browser, output `filterXSS` to the globals\n\t\tif (typeof window !== \"undefined\") {\n\t\t  window.filterXSS = module.exports;\n\t\t}\n\n\t\t// using `xss` on the WebWorker, output `filterXSS` to the globals\n\t\tfunction isWorkerEnv() {\n\t\t  return (\n\t\t    typeof self !== \"undefined\" &&\n\t\t    typeof DedicatedWorkerGlobalScope !== \"undefined\" &&\n\t\t    self instanceof DedicatedWorkerGlobalScope\n\t\t  );\n\t\t}\n\t\tif (isWorkerEnv()) {\n\t\t  self.filterXSS = module.exports;\n\t\t} \n\t} (lib$1, lib$1.exports));\n\treturn lib$1.exports;\n}\n\nvar libExports = requireLib();\nvar xssFilter = /*@__PURE__*/getDefaultExportFromCjs(libExports);\n\nfunction ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context8, _context9; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context8 = ownKeys(Object(t), true)).call(_context8, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context9 = ownKeys(Object(t))).call(_context9, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }\n/**\n * Test if an object implements the DataView interface from vis-data.\n * Uses the idProp property instead of expecting a hardcoded id field \"id\".\n * @param {Object} obj The object to test.\n * @returns {boolean} True if the object implements vis-data DataView interface otherwise false.\n */\nfunction isDataViewLike(obj) {\n  var _obj$idProp;\n  if (!obj) {\n    return false;\n  }\n  let idProp = (_obj$idProp = obj.idProp) !== null && _obj$idProp !== void 0 ? _obj$idProp : obj._idProp;\n  if (!idProp) {\n    return false;\n  }\n  return isDataViewLike$1(idProp, obj);\n}\n\n// parse ASP.Net Date pattern,\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\n// code from http://momentjs.com/\nconst ASPDateRegex = /^\\/?Date\\((-?\\d+)/i;\nconst NumericRegex = /^\\d+$/;\n/**\n * Convert an object into another type\n *\n * @param {Object} object - Value of unknown type.\n * @param {string} type - Name of the desired type.\n *\n * @returns {Object} Object in the desired type.\n * @throws Error\n */\nfunction convert(object, type) {\n  let match;\n  if (object === undefined) {\n    return undefined;\n  }\n  if (object === null) {\n    return null;\n  }\n  if (!type) {\n    return object;\n  }\n  if (!(typeof type === \"string\") && !(type instanceof String)) {\n    throw new Error(\"Type must be a string\");\n  }\n\n  //noinspection FallthroughInSwitchStatementJS\n  switch (type) {\n    case \"boolean\":\n    case \"Boolean\":\n      return Boolean(object);\n    case \"number\":\n    case \"Number\":\n      if (isString(object) && !isNaN(Date.parse(object))) {\n        return moment$3(object).valueOf();\n      } else {\n        // @TODO: I don't think that Number and String constructors are a good idea.\n        // This could also fail if the object doesn't have valueOf method or if it's redefined.\n        // For example: Object.create(null) or { valueOf: 7 }.\n        return Number(object.valueOf());\n      }\n    case \"string\":\n    case \"String\":\n      return String(object);\n    case \"Date\":\n      try {\n        return convert(object, \"Moment\").toDate();\n      } catch (e) {\n        if (e instanceof TypeError) {\n          throw new TypeError(\"Cannot convert object of type \" + getType(object) + \" to type \" + type);\n        } else {\n          throw e;\n        }\n      }\n    case \"Moment\":\n      if (isNumber(object)) {\n        return moment$3(object);\n      }\n      if (object instanceof Date) {\n        return moment$3(object.valueOf());\n      } else if (moment$3.isMoment(object)) {\n        return moment$3(object);\n      }\n      if (isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return moment$3(Number(match[1])); // parse number\n        }\n        match = NumericRegex.exec(object);\n        if (match) {\n          return moment$3(Number(object));\n        }\n        return moment$3(object); // parse string\n      } else {\n        throw new TypeError(\"Cannot convert object of type \" + getType(object) + \" to type \" + type);\n      }\n    case \"ISODate\":\n      if (isNumber(object)) {\n        return new Date(object);\n      } else if (object instanceof Date) {\n        return object.toISOString();\n      } else if (moment$3.isMoment(object)) {\n        return object.toDate().toISOString();\n      } else if (isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return new Date(Number(match[1])).toISOString(); // parse number\n        } else {\n          return moment$3(object).format(); // ISO 8601\n        }\n      } else {\n        throw new Error(\"Cannot convert object of type \" + getType(object) + \" to type ISODate\");\n      }\n    case \"ASPDate\":\n      if (isNumber(object)) {\n        return \"/Date(\" + object + \")/\";\n      } else if (object instanceof Date || moment$3.isMoment(object)) {\n        return \"/Date(\" + object.valueOf() + \")/\";\n      } else if (isString(object)) {\n        match = ASPDateRegex.exec(object);\n        let value;\n        if (match) {\n          // object is an ASP date\n          value = new Date(Number(match[1])).valueOf(); // parse number\n        } else {\n          value = new Date(object).valueOf(); // parse string\n        }\n        return \"/Date(\" + value + \")/\";\n      } else {\n        throw new Error(\"Cannot convert object of type \" + getType(object) + \" to type ASPDate\");\n      }\n    default:\n      throw new Error(\"Unknown type \".concat(type));\n  }\n}\n\n/**\n * Create a Data Set like wrapper to seamlessly coerce data types.\n *\n * @param {Object} rawDS - The Data Set with raw uncoerced data.\n * @param {Object} type - A record assigning a data type to property name.\n * @param {string} type.start - Data type name of property 'start'. Default: Date.\n * @param {string} type.end - Data type name of property 'end'. Default: Date.\n *\n * @remarks\n * The write operations (`add`, `remove`, `update` and `updateOnly`) write into\n * the raw (uncoerced) data set. These values are then picked up by a pipe\n * which coerces the values using the [[convert]] function and feeds them into\n * the coerced data set. When querying (`forEach`, `get`, `getIds`, `off` and\n * `on`) the values are then fetched from the coerced data set and already have\n * the required data types. The values are coerced only once when inserted and\n * then the same value is returned each time until it is updated or deleted.\n *\n * For example: `typeCoercedDataSet.add({ id: 7, start: \"2020-01-21\" })` would\n * result in `typeCoercedDataSet.get(7)` returning `{ id: 7, start: moment(new\n * Date(\"2020-01-21\")).toDate() }`.\n *\n * Use the dispose method prior to throwing a reference to this away. Otherwise\n * the pipe connecting the two Data Sets will keep the unaccessible coerced\n * Data Set alive and updated as long as the raw Data Set exists.\n *\n * @returns {Object} A Data Set like object that saves data into the raw Data Set and\n * retrieves them from the coerced Data Set.\n */\nfunction typeCoerceDataSet(rawDS) {\n  var _context, _context3, _context4, _context5, _context6, _context7;\n  let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    start: \"Date\",\n    end: \"Date\"\n  };\n  const idProp = rawDS._idProp;\n  const coercedDS = new DataSet({\n    fieldId: idProp\n  });\n  const pipe = _mapInstanceProperty(_context = createNewDataPipeFrom(rawDS)).call(_context, item => {\n    var _context2;\n    return _reduceInstanceProperty(_context2 = _Object$keys(item)).call(_context2, (acc, key) => {\n      acc[key] = convert(item[key], type[key]);\n      return acc;\n    }, {});\n  }).to(coercedDS);\n  pipe.all().start();\n  return {\n    // Write only.\n    add: function () {\n      return rawDS.getDataSet().add(...arguments);\n    },\n    remove: function () {\n      return rawDS.getDataSet().remove(...arguments);\n    },\n    update: function () {\n      return rawDS.getDataSet().update(...arguments);\n    },\n    updateOnly: function () {\n      return rawDS.getDataSet().updateOnly(...arguments);\n    },\n    clear: function () {\n      return rawDS.getDataSet().clear(...arguments);\n    },\n    // Read only.\n    forEach: _bindInstanceProperty(_context3 = _forEachInstanceProperty(coercedDS)).call(_context3, coercedDS),\n    get: _bindInstanceProperty(_context4 = coercedDS.get).call(_context4, coercedDS),\n    getIds: _bindInstanceProperty(_context5 = coercedDS.getIds).call(_context5, coercedDS),\n    off: _bindInstanceProperty(_context6 = coercedDS.off).call(_context6, coercedDS),\n    on: _bindInstanceProperty(_context7 = coercedDS.on).call(_context7, coercedDS),\n    get length() {\n      return coercedDS.length;\n    },\n    // Non standard.\n    idProp,\n    type,\n    rawDS,\n    coercedDS,\n    dispose: () => pipe.stop()\n  };\n}\n\n// Configure XSS protection\nconst setupXSSCleaner = options => {\n  const customXSS = new xssFilter.FilterXSS(options);\n  return input => {\n    if (typeof input === \"string\") {\n      return customXSS.process(input);\n    }\n    return input; // Leave other types unchanged\n  };\n};\nconst setupNoOpCleaner = string => string;\n\n// when nothing else is configured: filter XSS with the lib's default options\nlet configuredXSSProtection = setupXSSCleaner();\nconst setupXSSProtection = options => {\n  // No options? Do nothing.\n  if (!options) {\n    return;\n  }\n\n  // Disable XSS protection completely on request\n  if (options.disabled === true) {\n    configuredXSSProtection = setupNoOpCleaner;\n    console.warn(\"You disabled XSS protection for vis-Timeline. I sure hope you know what you're doing!\");\n  } else {\n    // Configure XSS protection with some custom options.\n    // For a list of valid options check the lib's documentation:\n    // https://github.com/leizongmin/js-xss#custom-filter-rules\n    if (options.filterOptions) {\n      configuredXSSProtection = setupXSSCleaner(options.filterOptions);\n    }\n  }\n};\nconst availableUtils = _objectSpread(_objectSpread({}, util$2), {}, {\n  convert,\n  setupXSSProtection\n});\n_Object$defineProperty(availableUtils, \"xss\", {\n  get: function () {\n    return configuredXSSProtection;\n  }\n});\n\nvar es_parseFloat = {};\n\nvar numberParseFloat;\nvar hasRequiredNumberParseFloat;\n\nfunction requireNumberParseFloat () {\n\tif (hasRequiredNumberParseFloat) return numberParseFloat;\n\thasRequiredNumberParseFloat = 1;\n\tvar globalThis = /*@__PURE__*/ requireGlobalThis();\n\tvar fails = /*@__PURE__*/ requireFails();\n\tvar uncurryThis = /*@__PURE__*/ requireFunctionUncurryThis();\n\tvar toString = /*@__PURE__*/ requireToString();\n\tvar trim = /*@__PURE__*/ requireStringTrim().trim;\n\tvar whitespaces = /*@__PURE__*/ requireWhitespaces();\n\n\tvar charAt = uncurryThis(''.charAt);\n\tvar $parseFloat = globalThis.parseFloat;\n\tvar Symbol = globalThis.Symbol;\n\tvar ITERATOR = Symbol && Symbol.iterator;\n\tvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n\t  // MS Edge 18- broken with boxed symbols\n\t  || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n\t// `parseFloat` method\n\t// https://tc39.es/ecma262/#sec-parsefloat-string\n\tnumberParseFloat = FORCED ? function parseFloat(string) {\n\t  var trimmedString = trim(toString(string));\n\t  var result = $parseFloat(trimmedString);\n\t  return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result;\n\t} : $parseFloat;\n\treturn numberParseFloat;\n}\n\nvar hasRequiredEs_parseFloat;\n\nfunction requireEs_parseFloat () {\n\tif (hasRequiredEs_parseFloat) return es_parseFloat;\n\thasRequiredEs_parseFloat = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $parseFloat = /*@__PURE__*/ requireNumberParseFloat();\n\n\t// `parseFloat` method\n\t// https://tc39.es/ecma262/#sec-parsefloat-string\n\t$({ global: true, forced: parseFloat !== $parseFloat }, {\n\t  parseFloat: $parseFloat\n\t});\n\treturn es_parseFloat;\n}\n\nvar _parseFloat$3;\nvar hasRequired_parseFloat$2;\n\nfunction require_parseFloat$2 () {\n\tif (hasRequired_parseFloat$2) return _parseFloat$3;\n\thasRequired_parseFloat$2 = 1;\n\trequireEs_parseFloat();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\t_parseFloat$3 = path.parseFloat;\n\treturn _parseFloat$3;\n}\n\nvar _parseFloat$2;\nvar hasRequired_parseFloat$1;\n\nfunction require_parseFloat$1 () {\n\tif (hasRequired_parseFloat$1) return _parseFloat$2;\n\thasRequired_parseFloat$1 = 1;\n\tvar parent = /*@__PURE__*/ require_parseFloat$2();\n\n\t_parseFloat$2 = parent;\n\treturn _parseFloat$2;\n}\n\nvar _parseFloat$1;\nvar hasRequired_parseFloat;\n\nfunction require_parseFloat () {\n\tif (hasRequired_parseFloat) return _parseFloat$1;\n\thasRequired_parseFloat = 1;\n\t_parseFloat$1 = /*@__PURE__*/ require_parseFloat$1();\n\treturn _parseFloat$1;\n}\n\nvar _parseFloatExports = require_parseFloat();\nvar _parseFloat = /*@__PURE__*/getDefaultExportFromCjs(_parseFloatExports);\n\n/** Prototype for visual components */\nclass Component {\n  /**\n   */\n  constructor() {\n    this.options = null;\n    this.props = null;\n  }\n\n  /**\n   * Set options for the component. The new options will be merged into the\n   * current options.\n   * @param {Object} options\n   */\n  setOptions(options) {\n    if (options) {\n      availableUtils.extend(this.options, options);\n    }\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    // should be implemented by the component\n    return false;\n  }\n\n  /**\n   * Destroy the component. Cleanup DOM and event listeners\n   */\n  destroy() {\n    // should be implemented by the component\n  }\n\n  /**\n   * Test whether the component is resized since the last time _isResized() was\n   * called.\n   * @return {Boolean} Returns true if the component is resized\n   * @protected\n   */\n  _isResized() {\n    const resized = this.props._previousWidth !== this.props.width || this.props._previousHeight !== this.props.height;\n    this.props._previousWidth = this.props.width;\n    this.props._previousHeight = this.props.height;\n    return resized;\n  }\n}\n\nvar es_string_repeat = {};\n\nvar hasRequiredEs_string_repeat;\n\nfunction requireEs_string_repeat () {\n\tif (hasRequiredEs_string_repeat) return es_string_repeat;\n\thasRequiredEs_string_repeat = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar repeat = /*@__PURE__*/ requireStringRepeat();\n\n\t// `String.prototype.repeat` method\n\t// https://tc39.es/ecma262/#sec-string.prototype.repeat\n\t$({ target: 'String', proto: true }, {\n\t  repeat: repeat\n\t});\n\treturn es_string_repeat;\n}\n\nvar repeat$3;\nvar hasRequiredRepeat$3;\n\nfunction requireRepeat$3 () {\n\tif (hasRequiredRepeat$3) return repeat$3;\n\thasRequiredRepeat$3 = 1;\n\trequireEs_string_repeat();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\trepeat$3 = getBuiltInPrototypeMethod('String', 'repeat');\n\treturn repeat$3;\n}\n\nvar repeat$2;\nvar hasRequiredRepeat$2;\n\nfunction requireRepeat$2 () {\n\tif (hasRequiredRepeat$2) return repeat$2;\n\thasRequiredRepeat$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireRepeat$3();\n\n\tvar StringPrototype = String.prototype;\n\n\trepeat$2 = function (it) {\n\t  var own = it.repeat;\n\t  return typeof it == 'string' || it === StringPrototype\n\t    || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.repeat) ? method : own;\n\t};\n\treturn repeat$2;\n}\n\nvar repeat$1;\nvar hasRequiredRepeat$1;\n\nfunction requireRepeat$1 () {\n\tif (hasRequiredRepeat$1) return repeat$1;\n\thasRequiredRepeat$1 = 1;\n\tvar parent = /*@__PURE__*/ requireRepeat$2();\n\n\trepeat$1 = parent;\n\treturn repeat$1;\n}\n\nvar repeat;\nvar hasRequiredRepeat;\n\nfunction requireRepeat () {\n\tif (hasRequiredRepeat) return repeat;\n\thasRequiredRepeat = 1;\n\trepeat = /*@__PURE__*/ requireRepeat$1();\n\treturn repeat;\n}\n\nvar repeatExports = requireRepeat();\nvar _repeatInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(repeatExports);\n\n/**\n * used in Core to convert the options into a volatile variable\n *\n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n * @returns {number}\n */\nfunction convertHiddenOptions(moment, body, hiddenDates) {\n  if (hiddenDates && !_Array$isArray(hiddenDates)) {\n    return convertHiddenOptions(moment, body, [hiddenDates]);\n  }\n  body.hiddenDates = [];\n  if (hiddenDates) {\n    if (_Array$isArray(hiddenDates) == true) {\n      var _context;\n      for (let i = 0; i < hiddenDates.length; i++) {\n        if (_repeatInstanceProperty(hiddenDates[i]) === undefined) {\n          const dateItem = {};\n          dateItem.start = moment(hiddenDates[i].start).toDate().valueOf();\n          dateItem.end = moment(hiddenDates[i].end).toDate().valueOf();\n          body.hiddenDates.push(dateItem);\n        }\n      }\n      _sortInstanceProperty(_context = body.hiddenDates).call(_context, (a, b) => a.start - b.start); // sort by start time\n    }\n  }\n}\n\n/**\n * create new entrees for the repeating hidden dates\n *\n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n * @returns {null}\n */\nfunction updateHiddenDates(moment, body, hiddenDates) {\n  if (hiddenDates && !_Array$isArray(hiddenDates)) {\n    return updateHiddenDates(moment, body, [hiddenDates]);\n  }\n  if (hiddenDates && body.domProps.centerContainer.width !== undefined) {\n    convertHiddenOptions(moment, body, hiddenDates);\n    const start = moment(body.range.start);\n    const end = moment(body.range.end);\n    const totalRange = body.range.end - body.range.start;\n    const pixelTime = totalRange / body.domProps.centerContainer.width;\n    for (let i = 0; i < hiddenDates.length; i++) {\n      if (_repeatInstanceProperty(hiddenDates[i]) !== undefined) {\n        let startDate = moment(hiddenDates[i].start);\n        let endDate = moment(hiddenDates[i].end);\n        if (startDate._d == \"Invalid Date\") {\n          throw new Error(\"Supplied start date is not valid: \".concat(hiddenDates[i].start));\n        }\n        if (endDate._d == \"Invalid Date\") {\n          throw new Error(\"Supplied end date is not valid: \".concat(hiddenDates[i].end));\n        }\n        const duration = endDate - startDate;\n        if (duration >= 4 * pixelTime) {\n          let offset = 0;\n          let runUntil = end.clone();\n          switch (_repeatInstanceProperty(hiddenDates[i])) {\n            case \"daily\":\n              // case of time\n              if (startDate.day() != endDate.day()) {\n                offset = 1;\n              }\n              startDate = startDate.dayOfYear(start.dayOfYear()).year(start.year()).subtract(7, \"days\");\n              endDate = endDate.dayOfYear(start.dayOfYear()).year(start.year()).subtract(7 - offset, \"days\");\n              runUntil.add(1, \"weeks\");\n              break;\n            case \"weekly\":\n              {\n                const dayOffset = endDate.diff(startDate, \"days\");\n                const day = startDate.day();\n\n                // set the start date to the range.start\n                startDate = startDate.date(start.date()).month(start.month()).year(start.year());\n                endDate = startDate.clone();\n\n                // force\n                startDate = startDate.day(day).subtract(1, \"weeks\");\n                endDate = endDate.day(day).add(dayOffset, \"days\").subtract(1, \"weeks\");\n                runUntil.add(1, \"weeks\");\n                break;\n              }\n            case \"monthly\":\n              if (startDate.month() != endDate.month()) {\n                offset = 1;\n              }\n              startDate = startDate.month(start.month()).year(start.year()).subtract(1, \"months\");\n              endDate = endDate.month(start.month()).year(start.year()).subtract(1, \"months\").add(offset, \"months\");\n              runUntil.add(1, \"months\");\n              break;\n            case \"yearly\":\n              if (startDate.year() != endDate.year()) {\n                offset = 1;\n              }\n              startDate = startDate.year(start.year()).subtract(1, \"years\");\n              endDate = endDate.year(start.year()).subtract(1, \"years\").add(offset, \"years\");\n              runUntil.add(1, \"years\");\n              break;\n            default:\n              console.log(\"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\", _repeatInstanceProperty(hiddenDates[i]));\n              return;\n          }\n          while (startDate < runUntil) {\n            body.hiddenDates.push({\n              start: startDate.valueOf(),\n              end: endDate.valueOf()\n            });\n            switch (_repeatInstanceProperty(hiddenDates[i])) {\n              case \"daily\":\n                startDate = startDate.add(1, \"days\");\n                endDate = endDate.add(1, \"days\");\n                break;\n              case \"weekly\":\n                startDate = startDate.add(1, \"weeks\");\n                endDate = endDate.add(1, \"weeks\");\n                break;\n              case \"monthly\":\n                startDate = startDate.add(1, \"months\");\n                endDate = endDate.add(1, \"months\");\n                break;\n              case \"yearly\":\n                startDate = startDate.add(1, \"y\");\n                endDate = endDate.add(1, \"y\");\n                break;\n              default:\n                console.log(\"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\", _repeatInstanceProperty(hiddenDates[i]));\n                return;\n            }\n          }\n          body.hiddenDates.push({\n            start: startDate.valueOf(),\n            end: endDate.valueOf()\n          });\n        }\n      }\n    }\n    // remove duplicates, merge where possible\n    removeDuplicates(body);\n    // ensure the new positions are not on hidden dates\n    const startHidden = getIsHidden(body.range.start, body.hiddenDates);\n    const endHidden = getIsHidden(body.range.end, body.hiddenDates);\n    let rangeStart = body.range.start;\n    let rangeEnd = body.range.end;\n    if (startHidden.hidden == true) {\n      rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1;\n    }\n    if (endHidden.hidden == true) {\n      rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1;\n    }\n    if (startHidden.hidden == true || endHidden.hidden == true) {\n      body.range._applyRange(rangeStart, rangeEnd);\n    }\n  }\n}\n\n/**\n * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up.\n * Scales with N^2\n *\n * @param {Object} body\n */\nfunction removeDuplicates(body) {\n  var _context2;\n  const hiddenDates = body.hiddenDates;\n  const safeDates = [];\n  for (var i = 0; i < hiddenDates.length; i++) {\n    for (let j = 0; j < hiddenDates.length; j++) {\n      if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) {\n        // j inside i\n        if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {\n          hiddenDates[j].remove = true;\n        }\n        // j start inside i\n        else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) {\n          hiddenDates[i].end = hiddenDates[j].end;\n          hiddenDates[j].remove = true;\n        }\n        // j end inside i\n        else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {\n          hiddenDates[i].start = hiddenDates[j].start;\n          hiddenDates[j].remove = true;\n        }\n      }\n    }\n  }\n  for (i = 0; i < hiddenDates.length; i++) {\n    if (hiddenDates[i].remove !== true) {\n      safeDates.push(hiddenDates[i]);\n    }\n  }\n  body.hiddenDates = safeDates;\n  _sortInstanceProperty(_context2 = body.hiddenDates).call(_context2, (a, b) => a.start - b.start); // sort by start time\n}\n\n/**\n * Prints dates to console\n * @param {array} dates\n */\nfunction printDates(dates) {\n  for (let i = 0; i < dates.length; i++) {\n    console.log(i, new Date(dates[i].start), new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove);\n  }\n}\n\n/**\n * Used in TimeStep to avoid the hidden times.\n * @param {function} moment\n * @param {TimeStep} timeStep\n * @param {Date} previousTime\n */\nfunction stepOverHiddenDates(moment, timeStep, previousTime) {\n  let stepInHidden = false;\n  const currentValue = timeStep.current.valueOf();\n  for (let i = 0; i < timeStep.hiddenDates.length; i++) {\n    const startDate = timeStep.hiddenDates[i].start;\n    var endDate = timeStep.hiddenDates[i].end;\n    if (currentValue >= startDate && currentValue < endDate) {\n      stepInHidden = true;\n      break;\n    }\n  }\n  if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) {\n    const prevValue = moment(previousTime);\n    const newValue = moment(endDate);\n    //check if the next step should be major\n    if (prevValue.year() != newValue.year()) {\n      timeStep.switchedYear = true;\n    } else if (prevValue.month() != newValue.month()) {\n      timeStep.switchedMonth = true;\n    } else if (prevValue.dayOfYear() != newValue.dayOfYear()) {\n      timeStep.switchedDay = true;\n    }\n    timeStep.current = newValue;\n  }\n}\n\n///**\n// * Used in TimeStep to avoid the hidden times.\n// * @param timeStep\n// * @param previousTime\n// */\n//checkFirstStep = function(timeStep) {\n//  var stepInHidden = false;\n//  var currentValue = timeStep.current.valueOf();\n//  for (var i = 0; i < timeStep.hiddenDates.length; i++) {\n//    var startDate = timeStep.hiddenDates[i].start;\n//    var endDate = timeStep.hiddenDates[i].end;\n//    if (currentValue >= startDate && currentValue < endDate) {\n//      stepInHidden = true;\n//      break;\n//    }\n//  }\n//\n//  if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) {\n//    var newValue = moment(endDate);\n//    timeStep.current = newValue.toDate();\n//  }\n//};\n\n/**\n * replaces the Core toScreen methods\n *\n * @param {timeline.Core} Core\n * @param {Date} time\n * @param {number} width\n * @returns {number}\n */\nfunction toScreen(Core, time, width) {\n  let conversion;\n  if (Core.body.hiddenDates.length == 0) {\n    conversion = Core.range.conversion(width);\n    return (time.valueOf() - conversion.offset) * conversion.scale;\n  } else {\n    const hidden = getIsHidden(time, Core.body.hiddenDates);\n    if (hidden.hidden == true) {\n      time = hidden.startDate;\n    }\n    const duration = getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);\n    if (time < Core.range.start) {\n      conversion = Core.range.conversion(width, duration);\n      const hiddenBeforeStart = getHiddenDurationBeforeStart(Core.body.hiddenDates, time, conversion.offset);\n      time = Core.options.moment(time).toDate().valueOf();\n      time = time + hiddenBeforeStart;\n      return -(conversion.offset - time.valueOf()) * conversion.scale;\n    } else if (time > Core.range.end) {\n      const rangeAfterEnd = {\n        start: Core.range.start,\n        end: time\n      };\n      time = correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, rangeAfterEnd, time);\n      conversion = Core.range.conversion(width, duration);\n      return (time.valueOf() - conversion.offset) * conversion.scale;\n    } else {\n      time = correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time);\n      conversion = Core.range.conversion(width, duration);\n      return (time.valueOf() - conversion.offset) * conversion.scale;\n    }\n  }\n}\n\n/**\n * Replaces the core toTime methods\n *\n * @param {timeline.Core} Core\n * @param {number} x\n * @param {number} width\n * @returns {Date}\n */\nfunction toTime(Core, x, width) {\n  if (Core.body.hiddenDates.length == 0) {\n    const conversion = Core.range.conversion(width);\n    return new Date(x / conversion.scale + conversion.offset);\n  } else {\n    const hiddenDuration = getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);\n    const totalDuration = Core.range.end - Core.range.start - hiddenDuration;\n    const partialDuration = totalDuration * x / width;\n    const accumulatedHiddenDuration = getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration);\n    return new Date(accumulatedHiddenDuration + partialDuration + Core.range.start);\n  }\n}\n\n/**\n * Support function\n *\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {number} start\n * @param {number} end\n * @returns {number}\n */\nfunction getHiddenDurationBetween(hiddenDates, start, end) {\n  let duration = 0;\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= start && endDate < end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n}\n\n/**\n * Support function\n *\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {number} start\n * @param {number} end\n * @returns {number}\n */\nfunction getHiddenDurationBeforeStart(hiddenDates, start, end) {\n  let duration = 0;\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n    if (startDate >= start && endDate <= end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n}\n\n/**\n * Support function\n * @param {function} moment\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {{start: number, end: number}} range\n * @param {Date} time\n * @returns {number}\n */\nfunction correctTimeForHidden(moment, hiddenDates, range, time) {\n  time = moment(time).toDate().valueOf();\n  time -= getHiddenDurationBefore(moment, hiddenDates, range, time);\n  return time;\n}\n\n/**\n * Support function\n * @param {function} moment\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {{start: number, end: number}} range\n * @param {Date} time\n * @returns {number}\n */\nfunction getHiddenDurationBefore(moment, hiddenDates, range, time) {\n  let timeOffset = 0;\n  time = moment(time).toDate().valueOf();\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      if (time >= endDate) {\n        timeOffset += endDate - startDate;\n      }\n    }\n  }\n  return timeOffset;\n}\n\n/**\n * sum the duration from start to finish, including the hidden duration,\n * until the required amount has been reached, return the accumulated hidden duration\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {{start: number, end: number}} range\n * @param {number} [requiredDuration=0]\n * @returns {number}\n */\nfunction getAccumulatedHiddenDuration(hiddenDates, range, requiredDuration) {\n  let hiddenDuration = 0;\n  let duration = 0;\n  let previousPoint = range.start;\n  //printDates(hiddenDates)\n  for (let i = 0; i < hiddenDates.length; i++) {\n    const startDate = hiddenDates[i].start;\n    const endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      duration += startDate - previousPoint;\n      previousPoint = endDate;\n      if (duration >= requiredDuration) {\n        break;\n      } else {\n        hiddenDuration += endDate - startDate;\n      }\n    }\n  }\n  return hiddenDuration;\n}\n\n/**\n * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @param {Date} time\n * @param {number} direction\n * @param {boolean} correctionEnabled\n * @returns {Date|number}\n */\nfunction snapAwayFromHidden(hiddenDates, time, direction, correctionEnabled) {\n  const isHidden = getIsHidden(time, hiddenDates);\n  if (isHidden.hidden == true) {\n    if (direction < 0) {\n      if (correctionEnabled == true) {\n        return isHidden.startDate - (isHidden.endDate - time) - 1;\n      } else {\n        return isHidden.startDate - 1;\n      }\n    } else {\n      if (correctionEnabled == true) {\n        return isHidden.endDate + (time - isHidden.startDate) + 1;\n      } else {\n        return isHidden.endDate + 1;\n      }\n    }\n  } else {\n    return time;\n  }\n}\n\n/**\n * Check if a time is hidden\n *\n * @param {Date} time\n * @param {Array.<{start: Window.start, end: *}>} hiddenDates\n * @returns {{hidden: boolean, startDate: Window.start, endDate: *}}\n */\nfunction getIsHidden(time, hiddenDates) {\n  for (let i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n    if (time >= startDate && time < endDate) {\n      // if the start is entering a hidden zone\n      return {\n        hidden: true,\n        startDate,\n        endDate\n      };\n    }\n  }\n  return {\n    hidden: false,\n    startDate,\n    endDate\n  };\n}\n\nvar DateUtil = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  convertHiddenOptions: convertHiddenOptions,\n  correctTimeForHidden: correctTimeForHidden,\n  getAccumulatedHiddenDuration: getAccumulatedHiddenDuration,\n  getHiddenDurationBefore: getHiddenDurationBefore,\n  getHiddenDurationBeforeStart: getHiddenDurationBeforeStart,\n  getHiddenDurationBetween: getHiddenDurationBetween,\n  getIsHidden: getIsHidden,\n  printDates: printDates,\n  removeDuplicates: removeDuplicates,\n  snapAwayFromHidden: snapAwayFromHidden,\n  stepOverHiddenDates: stepOverHiddenDates,\n  toScreen: toScreen,\n  toTime: toTime,\n  updateHiddenDates: updateHiddenDates\n});\n\n/**\n * A Range controls a numeric range with a start and end value.\n * The Range adjusts the range based on mouse events or programmatic changes,\n * and triggers events when the range is changing or has been changed.\n */\nclass Range extends Component {\n  /**\n   * @param {{dom: Object, domProps: Object, emitter: Emitter}} body\n   * @param {Object} [options]    See description at Range.setOptions\n   * @constructor Range\n   * @extends Component\n   */\n  constructor(body, options) {\n    var _context, _context2, _context3, _context4, _context5, _context6, _context7;\n    super();\n    const now = moment$2().hours(0).minutes(0).seconds(0).milliseconds(0);\n    const start = now.clone().add(-3, \"days\").valueOf();\n    const end = now.clone().add(3, \"days\").valueOf();\n    this.millisecondsPerPixelCache = undefined;\n    if (options === undefined) {\n      this.start = start;\n      this.end = end;\n    } else {\n      this.start = options.start || start;\n      this.end = options.end || end;\n    }\n    this.rolling = false;\n    this.body = body;\n    this.deltaDifference = 0;\n    this.scaleOffset = 0;\n    this.startToFront = false;\n    this.endToFront = true;\n\n    // default options\n    this.defaultOptions = {\n      rtl: false,\n      start: null,\n      end: null,\n      moment: moment$2,\n      direction: \"horizontal\",\n      // 'horizontal' or 'vertical'\n      moveable: true,\n      zoomable: true,\n      min: null,\n      max: null,\n      zoomMin: 10,\n      // milliseconds\n      zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000,\n      // milliseconds\n      rollingMode: {\n        follow: false,\n        offset: 0.5\n      }\n    };\n    this.options = availableUtils.extend({}, this.defaultOptions);\n    this.props = {\n      touch: {}\n    };\n    this.animationTimer = null;\n\n    // drag listeners for dragging\n    this.body.emitter.on(\"panstart\", _bindInstanceProperty(_context = this._onDragStart).call(_context, this));\n    this.body.emitter.on(\"panmove\", _bindInstanceProperty(_context2 = this._onDrag).call(_context2, this));\n    this.body.emitter.on(\"panend\", _bindInstanceProperty(_context3 = this._onDragEnd).call(_context3, this));\n\n    // mouse wheel for zooming\n    this.body.emitter.on(\"mousewheel\", _bindInstanceProperty(_context4 = this._onMouseWheel).call(_context4, this));\n\n    // pinch to zoom\n    this.body.emitter.on(\"touch\", _bindInstanceProperty(_context5 = this._onTouch).call(_context5, this));\n    this.body.emitter.on(\"pinch\", _bindInstanceProperty(_context6 = this._onPinch).call(_context6, this));\n\n    // on click of rolling mode button\n    this.body.dom.rollingModeBtn.addEventListener(\"click\", _bindInstanceProperty(_context7 = this.startRolling).call(_context7, this));\n    this.setOptions(options);\n  }\n\n  /**\n   * Set options for the range controller\n   * @param {Object} options      Available options:\n   *                              {number | Date | String} start  Start date for the range\n   *                              {number | Date | String} end    End date for the range\n   *                              {number} min    Minimum value for start\n   *                              {number} max    Maximum value for end\n   *                              {number} zoomMin    Set a minimum value for\n   *                                                  (end - start).\n   *                              {number} zoomMax    Set a maximum value for\n   *                                                  (end - start).\n   *                              {boolean} moveable Enable moving of the range\n   *                                                 by dragging. True by default\n   *                              {boolean} zoomable Enable zooming of the range\n   *                                                 by pinching/scrolling. True by default\n   */\n  setOptions(options) {\n    if (options) {\n      // copy the options that we know\n      const fields = [\"animation\", \"direction\", \"min\", \"max\", \"zoomMin\", \"zoomMax\", \"moveable\", \"zoomable\", \"moment\", \"activate\", \"hiddenDates\", \"zoomKey\", \"zoomFriction\", \"rtl\", \"showCurrentTime\", \"rollingMode\", \"horizontalScroll\", \"horizontalScrollKey\", \"horizontalScrollInvert\", \"verticalScroll\"];\n      availableUtils.selectiveExtend(fields, this.options, options);\n      if (options.rollingMode && options.rollingMode.follow) {\n        this.startRolling();\n      }\n      if (\"start\" in options || \"end\" in options) {\n        // apply a new range. both start and end are optional\n        this.setRange(options.start, options.end);\n      }\n    }\n  }\n\n  /**\n   * Start auto refreshing the current time bar\n   */\n  startRolling() {\n    const me = this;\n\n    /**\n     *  Updates the current time.\n     */\n    function update() {\n      me.stopRolling();\n      me.rolling = true;\n      let interval = me.end - me.start;\n      const t = availableUtils.convert(new Date(), \"Date\").valueOf();\n      const rollingModeOffset = me.options.rollingMode && me.options.rollingMode.offset || 0.5;\n      const start = t - interval * rollingModeOffset;\n      const end = t + interval * (1 - rollingModeOffset);\n      const options = {\n        animation: false\n      };\n      me.setRange(start, end, options);\n\n      // determine interval to refresh\n      const scale = me.conversion(me.body.domProps.center.width).scale;\n      interval = 1 / scale / 10;\n      if (interval < 30) interval = 30;\n      if (interval > 1000) interval = 1000;\n      me.body.dom.rollingModeBtn.style.visibility = \"hidden\";\n      // start a renderTimer to adjust for the new time\n      me.currentTimeTimer = _setTimeout(update, interval);\n    }\n    update();\n  }\n\n  /**\n   * Stop auto refreshing the current time bar\n   */\n  stopRolling() {\n    if (this.currentTimeTimer !== undefined) {\n      clearTimeout(this.currentTimeTimer);\n      this.rolling = false;\n      this.body.dom.rollingModeBtn.style.visibility = \"visible\";\n    }\n  }\n\n  /**\n   * Set a new start and end range\n   * @param {Date | number | string} start\n   * @param {Date | number | string} end\n   * @param {Object} options      Available options:\n   *                              {boolean | {duration: number, easingFunction: string}} [animation=false]\n   *                                    If true, the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   *                              {boolean} [byUser=false]\n   *                              {Event}  event  Mouse event\n   * @param {Function} callback     a callback function to be executed at the end of this function\n   * @param {Function} frameCallback    a callback function executed each frame of the range animation.\n   *                                    The callback will be passed three parameters:\n   *                                    {number} easeCoefficient    an easing coefficent\n   *                                    {boolean} willDraw          If true the caller will redraw after the callback completes\n   *                                    {boolean} done              If true then animation is ending after the current frame\n   * @return {void}\n   */\n  setRange(start, end, options, callback, frameCallback) {\n    if (!options) {\n      options = {};\n    }\n    if (options.byUser !== true) {\n      options.byUser = false;\n    }\n    const me = this;\n    const finalStart = start != undefined ? availableUtils.convert(start, \"Date\").valueOf() : null;\n    const finalEnd = end != undefined ? availableUtils.convert(end, \"Date\").valueOf() : null;\n    this._cancelAnimation();\n    this.millisecondsPerPixelCache = undefined;\n    if (options.animation) {\n      // true or an Object\n      const initStart = this.start;\n      const initEnd = this.end;\n      const duration = typeof options.animation === \"object\" && \"duration\" in options.animation ? options.animation.duration : 500;\n      const easingName = typeof options.animation === \"object\" && \"easingFunction\" in options.animation ? options.animation.easingFunction : \"easeInOutQuad\";\n      const easingFunction = availableUtils.easingFunctions[easingName];\n      if (!easingFunction) {\n        var _context8;\n        throw new Error(_concatInstanceProperty(_context8 = \"Unknown easing function \".concat(_JSON$stringify(easingName), \". Choose from: \")).call(_context8, _Object$keys(availableUtils.easingFunctions).join(\", \")));\n      }\n      const initTime = _Date$now();\n      let anyChanged = false;\n      const next = () => {\n        if (!me.props.touch.dragging) {\n          const now = _Date$now();\n          const time = now - initTime;\n          const ease = easingFunction(time / duration);\n          const done = time > duration;\n          const s = done || finalStart === null ? finalStart : initStart + (finalStart - initStart) * ease;\n          const e = done || finalEnd === null ? finalEnd : initEnd + (finalEnd - initEnd) * ease;\n          changed = me._applyRange(s, e);\n          updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates);\n          anyChanged = anyChanged || changed;\n          const params = {\n            start: new Date(me.start),\n            end: new Date(me.end),\n            byUser: options.byUser,\n            event: options.event\n          };\n          if (frameCallback) {\n            frameCallback(ease, changed, done);\n          }\n          if (changed) {\n            me.body.emitter.emit(\"rangechange\", params);\n          }\n          if (done) {\n            if (anyChanged) {\n              me.body.emitter.emit(\"rangechanged\", params);\n              if (callback) {\n                return callback();\n              }\n            }\n          } else {\n            // animate with as high as possible frame rate, leave 20 ms in between\n            // each to prevent the browser from blocking\n            me.animationTimer = _setTimeout(next, 20);\n          }\n        }\n      };\n      return next();\n    } else {\n      var changed = this._applyRange(finalStart, finalEnd);\n      updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);\n      if (changed) {\n        const params = {\n          start: new Date(this.start),\n          end: new Date(this.end),\n          byUser: options.byUser,\n          event: options.event\n        };\n        this.body.emitter.emit(\"rangechange\", params);\n        clearTimeout(me.timeoutID);\n        me.timeoutID = _setTimeout(() => {\n          me.body.emitter.emit(\"rangechanged\", params);\n        }, 200);\n        if (callback) {\n          return callback();\n        }\n      }\n    }\n  }\n\n  /**\n   * Get the number of milliseconds per pixel.\n   *\n   * @returns {undefined|number}\n   */\n  getMillisecondsPerPixel() {\n    if (this.millisecondsPerPixelCache === undefined) {\n      this.millisecondsPerPixelCache = (this.end - this.start) / this.body.dom.center.clientWidth;\n    }\n    return this.millisecondsPerPixelCache;\n  }\n\n  /**\n   * Stop an animation\n   * @private\n   */\n  _cancelAnimation() {\n    if (this.animationTimer) {\n      clearTimeout(this.animationTimer);\n      this.animationTimer = null;\n    }\n  }\n\n  /**\n   * Set a new start and end range. This method is the same as setRange, but\n   * does not trigger a range change and range changed event, and it returns\n   * true when the range is changed\n   * @param {number} [start]\n   * @param {number} [end]\n   * @return {boolean} changed\n   * @private\n   */\n  _applyRange(start, end) {\n    let newStart = start != null ? availableUtils.convert(start, \"Date\").valueOf() : this.start;\n    let newEnd = end != null ? availableUtils.convert(end, \"Date\").valueOf() : this.end;\n    const max = this.options.max != null ? availableUtils.convert(this.options.max, \"Date\").valueOf() : null;\n    const min = this.options.min != null ? availableUtils.convert(this.options.min, \"Date\").valueOf() : null;\n    let diff;\n\n    // check for valid number\n    if (isNaN(newStart) || newStart === null) {\n      throw new Error(\"Invalid start \\\"\".concat(start, \"\\\"\"));\n    }\n    if (isNaN(newEnd) || newEnd === null) {\n      throw new Error(\"Invalid end \\\"\".concat(end, \"\\\"\"));\n    }\n\n    // prevent end < start\n    if (newEnd < newStart) {\n      newEnd = newStart;\n    }\n\n    // prevent start < min\n    if (min !== null) {\n      if (newStart < min) {\n        diff = min - newStart;\n        newStart += diff;\n        newEnd += diff;\n\n        // prevent end > max\n        if (max != null) {\n          if (newEnd > max) {\n            newEnd = max;\n          }\n        }\n      }\n    }\n\n    // prevent end > max\n    if (max !== null) {\n      if (newEnd > max) {\n        diff = newEnd - max;\n        newStart -= diff;\n        newEnd -= diff;\n\n        // prevent start < min\n        if (min != null) {\n          if (newStart < min) {\n            newStart = min;\n          }\n        }\n      }\n    }\n\n    // prevent (end-start) < zoomMin\n    if (this.options.zoomMin !== null) {\n      let zoomMin = _parseFloat(this.options.zoomMin);\n      if (zoomMin < 0) {\n        zoomMin = 0;\n      }\n      if (newEnd - newStart < zoomMin) {\n        // compensate for a scale of 0.5 ms\n        const compensation = 0.5;\n        if (this.end - this.start === zoomMin && newStart >= this.start - compensation && newEnd <= this.end) {\n          // ignore this action, we are already zoomed to the minimum\n          newStart = this.start;\n          newEnd = this.end;\n        } else {\n          // zoom to the minimum\n          diff = zoomMin - (newEnd - newStart);\n          newStart -= diff / 2;\n          newEnd += diff / 2;\n        }\n      }\n    }\n\n    // prevent (end-start) > zoomMax\n    if (this.options.zoomMax !== null) {\n      let zoomMax = _parseFloat(this.options.zoomMax);\n      if (zoomMax < 0) {\n        zoomMax = 0;\n      }\n      if (newEnd - newStart > zoomMax) {\n        if (this.end - this.start === zoomMax && newStart < this.start && newEnd > this.end) {\n          // ignore this action, we are already zoomed to the maximum\n          newStart = this.start;\n          newEnd = this.end;\n        } else {\n          // zoom to the maximum\n          diff = newEnd - newStart - zoomMax;\n          newStart += diff / 2;\n          newEnd -= diff / 2;\n        }\n      }\n    }\n    const changed = this.start != newStart || this.end != newEnd;\n\n    // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range)\n    if (!(newStart >= this.start && newStart <= this.end || newEnd >= this.start && newEnd <= this.end) && !(this.start >= newStart && this.start <= newEnd || this.end >= newStart && this.end <= newEnd)) {\n      this.body.emitter.emit(\"checkRangedItems\");\n    }\n    this.start = newStart;\n    this.end = newEnd;\n    return changed;\n  }\n\n  /**\n   * Retrieve the current range.\n   * @return {Object} An object with start and end properties\n   */\n  getRange() {\n    return {\n      start: this.start,\n      end: this.end\n    };\n  }\n\n  /**\n   * Calculate the conversion offset and scale for current range, based on\n   * the provided width\n   * @param {number} width\n   * @param {number} [totalHidden=0]\n   * @returns {{offset: number, scale: number}} conversion\n   */\n  conversion(width, totalHidden) {\n    return Range.conversion(this.start, this.end, width, totalHidden);\n  }\n\n  /**\n   * Static method to calculate the conversion offset and scale for a range,\n   * based on the provided start, end, and width\n   * @param {number} start\n   * @param {number} end\n   * @param {number} width\n   * @param {number} [totalHidden=0]\n   * @returns {{offset: number, scale: number}} conversion\n   */\n  static conversion(start, end, width, totalHidden) {\n    if (totalHidden === undefined) {\n      totalHidden = 0;\n    }\n    if (width != 0 && end - start != 0) {\n      return {\n        offset: start,\n        scale: width / (end - start - totalHidden)\n      };\n    } else {\n      return {\n        offset: 0,\n        scale: 1\n      };\n    }\n  }\n\n  /**\n   * Start dragging horizontally or vertically\n   * @param {Event} event\n   * @private\n   */\n  _onDragStart(event) {\n    this.deltaDifference = 0;\n    this.previousDelta = 0;\n\n    // only allow dragging when configured as movable\n    if (!this.options.moveable) return;\n\n    // only start dragging when the mouse is inside the current range\n    if (!this._isInsideRange(event)) return;\n\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.props.touch.allowDragging) return;\n    this.stopRolling();\n    this.props.touch.start = this.start;\n    this.props.touch.end = this.end;\n    this.props.touch.dragging = true;\n    if (this.body.dom.root) {\n      this.body.dom.root.style.cursor = \"move\";\n    }\n  }\n\n  /**\n   * Perform dragging operation\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (!event) return;\n    if (!this.props.touch.dragging) return;\n\n    // only allow dragging when configured as movable\n    if (!this.options.moveable) return;\n\n    // TODO: this may be redundant in hammerjs2\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.props.touch.allowDragging) return;\n    const direction = this.options.direction;\n    validateDirection(direction);\n    let delta = direction == \"horizontal\" ? event.deltaX : event.deltaY;\n    delta -= this.deltaDifference;\n    let interval = this.props.touch.end - this.props.touch.start;\n\n    // normalize dragging speed if cutout is in between.\n    const duration = getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n    interval -= duration;\n    const width = direction == \"horizontal\" ? this.body.domProps.center.width : this.body.domProps.center.height;\n    let diffRange;\n    if (this.options.rtl) {\n      diffRange = delta / width * interval;\n    } else {\n      diffRange = -delta / width * interval;\n    }\n    const newStart = this.props.touch.start + diffRange;\n    const newEnd = this.props.touch.end + diffRange;\n\n    // snapping times away from hidden zones\n    const safeStart = snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta - delta, true);\n    const safeEnd = snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta - delta, true);\n    if (safeStart != newStart || safeEnd != newEnd) {\n      this.deltaDifference += delta;\n      this.props.touch.start = safeStart;\n      this.props.touch.end = safeEnd;\n      this._onDrag(event);\n      return;\n    }\n    this.previousDelta = delta;\n    this._applyRange(newStart, newEnd);\n    const startDate = new Date(this.start);\n    const endDate = new Date(this.end);\n\n    // fire a rangechange event\n    this.body.emitter.emit(\"rangechange\", {\n      start: startDate,\n      end: endDate,\n      byUser: true,\n      event\n    });\n\n    // fire a panmove event\n    this.body.emitter.emit(\"panmove\");\n  }\n\n  /**\n   * Stop dragging operation\n   * @param {event} event\n   * @private\n   */\n  _onDragEnd(event) {\n    if (!this.props.touch.dragging) return;\n\n    // only allow dragging when configured as movable\n    if (!this.options.moveable) return;\n\n    // TODO: this may be redundant in hammerjs2\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.props.touch.allowDragging) return;\n    this.props.touch.dragging = false;\n    if (this.body.dom.root) {\n      this.body.dom.root.style.cursor = \"auto\";\n    }\n\n    // fire a rangechanged event\n    this.body.emitter.emit(\"rangechanged\", {\n      start: new Date(this.start),\n      end: new Date(this.end),\n      byUser: true,\n      event\n    });\n  }\n\n  /**\n   * Event handler for mouse wheel event, used to zoom\n   * Code from http://adomas.org/javascript-mouse-wheel/\n   * @param {Event} event\n   * @private\n   */\n  _onMouseWheel(event) {\n    // retrieve delta\n    let delta = 0;\n    if (event.wheelDelta) {\n      /* IE/Opera. */\n      delta = event.wheelDelta / 120;\n    } else if (event.detail) {\n      /* Mozilla case. */\n      // In Mozilla, sign of delta is different than in IE.\n      // Also, delta is multiple of 3.\n      delta = -event.detail / 3;\n    } else if (event.deltaY) {\n      delta = -event.deltaY / 3;\n    }\n\n    // don't allow zoom when the according key is pressed and the zoomKey option or not zoomable but movable\n    if (this.options.zoomKey && !event[this.options.zoomKey] && this.options.zoomable || !this.options.zoomable && this.options.moveable) {\n      return;\n    }\n\n    // only allow zooming when configured as zoomable and moveable\n    if (!(this.options.zoomable && this.options.moveable)) return;\n\n    // only zoom when the mouse is inside the current range\n    if (!this._isInsideRange(event)) return;\n\n    // If delta is nonzero, handle it.\n    // Basically, delta is now positive if wheel was scrolled up,\n    // and negative, if wheel was scrolled down.\n    if (delta) {\n      // perform the zoom action. Delta is normally 1 or -1\n\n      // adjust a negative delta such that zooming in with delta 0.1\n      // equals zooming out with a delta -0.1\n\n      const zoomFriction = this.options.zoomFriction || 5;\n      let scale;\n      if (delta < 0) {\n        scale = 1 - delta / zoomFriction;\n      } else {\n        scale = 1 / (1 + delta / zoomFriction);\n      }\n\n      // calculate center, the date to zoom around\n      let pointerDate;\n      if (this.rolling) {\n        const rollingModeOffset = this.options.rollingMode && this.options.rollingMode.offset || 0.5;\n        pointerDate = this.start + (this.end - this.start) * rollingModeOffset;\n      } else {\n        const pointer = this.getPointer({\n          x: event.clientX,\n          y: event.clientY\n        }, this.body.dom.center);\n        pointerDate = this._pointerToDate(pointer);\n      }\n      this.zoom(scale, pointerDate, delta, event);\n\n      // Prevent default actions caused by mouse wheel\n      // (else the page and timeline both scroll)\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * Start of a touch gesture\n   * @param {Event} event\n   * @private\n   */\n  _onTouch(event) {\n    // eslint-disable-line no-unused-vars\n    this.props.touch.start = this.start;\n    this.props.touch.end = this.end;\n    this.props.touch.allowDragging = true;\n    this.props.touch.center = null;\n    this.props.touch.centerDate = null;\n    this.scaleOffset = 0;\n    this.deltaDifference = 0;\n    // Disable the browser default handling of this event.\n    availableUtils.preventDefault(event);\n  }\n\n  /**\n   * Handle pinch event\n   * @param {Event} event\n   * @private\n   */\n  _onPinch(event) {\n    // only allow zooming when configured as zoomable and moveable\n    if (!(this.options.zoomable && this.options.moveable)) return;\n\n    // Disable the browser default handling of this event.\n    availableUtils.preventDefault(event);\n    this.props.touch.allowDragging = false;\n    if (!this.props.touch.center) {\n      this.props.touch.center = this.getPointer(event.center, this.body.dom.center);\n      this.props.touch.centerDate = this._pointerToDate(this.props.touch.center);\n    }\n    this.stopRolling();\n    const scale = 1 / (event.scale + this.scaleOffset);\n    const centerDate = this.props.touch.centerDate;\n    const hiddenDuration = getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n    const hiddenDurationBefore = getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate);\n    const hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n    // calculate new start and end\n    let newStart = centerDate - hiddenDurationBefore + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale;\n    let newEnd = centerDate + hiddenDurationAfter + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale;\n\n    // snapping times away from hidden zones\n    this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times\n    this.endToFront = scale - 1 <= 0; // used to do the right auto correction with periodic hidden times\n\n    const safeStart = snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true);\n    const safeEnd = snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true);\n    if (safeStart != newStart || safeEnd != newEnd) {\n      this.props.touch.start = safeStart;\n      this.props.touch.end = safeEnd;\n      this.scaleOffset = 1 - event.scale;\n      newStart = safeStart;\n      newEnd = safeEnd;\n    }\n    const options = {\n      animation: false,\n      byUser: true,\n      event\n    };\n    this.setRange(newStart, newEnd, options);\n    this.startToFront = false; // revert to default\n    this.endToFront = true; // revert to default\n  }\n\n  /**\n   * Test whether the mouse from a mouse event is inside the visible window,\n   * between the current start and end date\n   * @param {Object} event\n   * @return {boolean} Returns true when inside the visible window\n   * @private\n   */\n  _isInsideRange(event) {\n    // calculate the time where the mouse is, check whether inside\n    // and no scroll action should happen.\n    const clientX = event.center ? event.center.x : event.clientX;\n    const centerContainerRect = this.body.dom.centerContainer.getBoundingClientRect();\n    const x = this.options.rtl ? clientX - centerContainerRect.left : centerContainerRect.right - clientX;\n    const time = this.body.util.toTime(x);\n    return time >= this.start && time <= this.end;\n  }\n\n  /**\n   * Helper function to calculate the center date for zooming\n   * @param {{x: number, y: number}} pointer\n   * @return {number} date\n   * @private\n   */\n  _pointerToDate(pointer) {\n    let conversion;\n    const direction = this.options.direction;\n    validateDirection(direction);\n    if (direction == \"horizontal\") {\n      return this.body.util.toTime(pointer.x).valueOf();\n    } else {\n      const height = this.body.domProps.center.height;\n      conversion = this.conversion(height);\n      return pointer.y / conversion.scale + conversion.offset;\n    }\n  }\n\n  /**\n   * Get the pointer location relative to the location of the dom element\n   * @param {{x: number, y: number}} touch\n   * @param {Element} element   HTML DOM element\n   * @return {{x: number, y: number}} pointer\n   * @private\n   */\n  getPointer(touch, element) {\n    const elementRect = element.getBoundingClientRect();\n    if (this.options.rtl) {\n      return {\n        x: elementRect.right - touch.x,\n        y: touch.y - elementRect.top\n      };\n    } else {\n      return {\n        x: touch.x - elementRect.left,\n        y: touch.y - elementRect.top\n      };\n    }\n  }\n\n  /**\n   * Zoom the range the given scale in or out. Start and end date will\n   * be adjusted, and the timeline will be redrawn. You can optionally give a\n   * date around which to zoom.\n   * For example, try scale = 0.9 or 1.1\n   * @param {number} scale      Scaling factor. Values above 1 will zoom out,\n   *                            values below 1 will zoom in.\n   * @param {number} [center]   Value representing a date around which will\n   *                            be zoomed.\n   * @param {number} delta\n   * @param {Event} event\n   */\n  zoom(scale, center, delta, event) {\n    // if centerDate is not provided, take it half between start Date and end Date\n    if (center == null) {\n      center = (this.start + this.end) / 2;\n    }\n    const hiddenDuration = getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n    const hiddenDurationBefore = getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center);\n    const hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n    // calculate new start and end\n    let newStart = center - hiddenDurationBefore + (this.start - (center - hiddenDurationBefore)) * scale;\n    let newEnd = center + hiddenDurationAfter + (this.end - (center + hiddenDurationAfter)) * scale;\n\n    // snapping times away from hidden zones\n    this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n    this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n    const safeStart = snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true);\n    const safeEnd = snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true);\n    if (safeStart != newStart || safeEnd != newEnd) {\n      newStart = safeStart;\n      newEnd = safeEnd;\n    }\n    const options = {\n      animation: false,\n      byUser: true,\n      event\n    };\n    this.setRange(newStart, newEnd, options);\n    this.startToFront = false; // revert to default\n    this.endToFront = true; // revert to default\n  }\n\n  /**\n   * Move the range with a given delta to the left or right. Start and end\n   * value will be adjusted. For example, try delta = 0.1 or -0.1\n   * @param {number}  delta     Moving amount. Positive value will move right,\n   *                            negative value will move left\n   */\n  move(delta) {\n    // zoom start Date and end Date relative to the centerDate\n    const diff = this.end - this.start;\n\n    // apply new values\n    const newStart = this.start + diff * delta;\n    const newEnd = this.end + diff * delta;\n\n    // TODO: reckon with min and max range\n\n    this.start = newStart;\n    this.end = newEnd;\n  }\n\n  /**\n   * Move the range to a new center point\n   * @param {number} moveTo      New center point of the range\n   */\n  moveTo(moveTo) {\n    const center = (this.start + this.end) / 2;\n    const diff = center - moveTo;\n\n    // calculate new start and end\n    const newStart = this.start - diff;\n    const newEnd = this.end - diff;\n    const options = {\n      animation: false,\n      byUser: true,\n      event: null\n    };\n    this.setRange(newStart, newEnd, options);\n  }\n\n  /**\n   * Destroy the Range\n   */\n  destroy() {\n    this.stopRolling();\n  }\n}\n\n/**\n * Test whether direction has a valid value\n * @param {string} direction    'horizontal' or 'vertical'\n */\nfunction validateDirection(direction) {\n  if (direction != \"horizontal\" && direction != \"vertical\") {\n    throw new TypeError(\"Unknown direction \\\"\".concat(direction, \"\\\". Choose \\\"horizontal\\\" or \\\"vertical\\\".\"));\n  }\n}\n\nvar setInterval$1;\nvar hasRequiredSetInterval$1;\n\nfunction requireSetInterval$1 () {\n\tif (hasRequiredSetInterval$1) return setInterval$1;\n\thasRequiredSetInterval$1 = 1;\n\trequireWeb_timers();\n\tvar path = /*@__PURE__*/ requirePath();\n\n\tsetInterval$1 = path.setInterval;\n\treturn setInterval$1;\n}\n\nvar setInterval;\nvar hasRequiredSetInterval;\n\nfunction requireSetInterval () {\n\tif (hasRequiredSetInterval) return setInterval;\n\thasRequiredSetInterval = 1;\n\tsetInterval = /*@__PURE__*/ requireSetInterval$1();\n\treturn setInterval;\n}\n\nvar setIntervalExports = requireSetInterval();\nvar _setInterval = /*@__PURE__*/getDefaultExportFromCjs(setIntervalExports);\n\nvar _firstTarget = null; // singleton, will contain the target element where the touch event started\n\n/**\n * Extend an Hammer.js instance with event propagation.\n *\n * Features:\n * - Events emitted by hammer will propagate in order from child to parent\n *   elements.\n * - Events are extended with a function `event.stopPropagation()` to stop\n *   propagation to parent elements.\n * - An option `preventDefault` to stop all default browser behavior.\n *\n * Usage:\n *   var hammer = propagatingHammer(new Hammer(element));\n *   var hammer = propagatingHammer(new Hammer(element), {preventDefault: true});\n *\n * @param {Hammer.Manager} hammer   An hammer instance.\n * @param {Object} [options]        Available options:\n *                                  - `preventDefault: true | false | 'mouse' | 'touch' | 'pen'`.\n *                                    Enforce preventing the default browser behavior.\n *                                    Cannot be set to `false`.\n * @return {Hammer.Manager} Returns the same hammer instance with extended\n *                          functionality\n */\nfunction propagating(hammer, options) {\n  var _options = options || {\n    preventDefault: false\n  };\n\n  if (hammer.Manager) {\n    // This looks like the Hammer constructor.\n    // Overload the constructors with our own.\n    var Hammer = hammer;\n\n    var PropagatingHammer = function(element, options) {\n      var o = Object.create(_options);\n      if (options) Hammer.assign(o, options);\n      return propagating(new Hammer(element, o), o);\n    };\n    Hammer.assign(PropagatingHammer, Hammer);\n\n    PropagatingHammer.Manager = function (element, options) {\n      var o = Object.create(_options);\n      if (options) Hammer.assign(o, options);\n      return propagating(new Hammer.Manager(element, o), o);\n    };\n\n    return PropagatingHammer;\n  }\n\n  // create a wrapper object which will override the functions\n  // `on`, `off`, `destroy`, and `emit` of the hammer instance\n  var wrapper = Object.create(hammer);\n\n  // attach to DOM element\n  var element = hammer.element;\n\n  if(!element.hammer) element.hammer = [];\n  element.hammer.push(wrapper);\n\n  // register an event to catch the start of a gesture and store the\n  // target in a singleton\n  hammer.on('hammer.input', function (event) {\n    if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) {\n      event.preventDefault();\n    }\n    if (event.isFirst) {\n      _firstTarget = event.target;\n    }\n  });\n\n  /** @type {Object.<String, Array.<function>>} */\n  wrapper._handlers = {};\n\n  /**\n   * Register a handler for one or multiple events\n   * @param {String} events    A space separated string with events\n   * @param {function} handler A callback function, called as handler(event)\n   * @returns {Hammer.Manager} Returns the hammer instance\n   */\n  wrapper.on = function (events, handler) {\n    // register the handler\n    split(events).forEach(function (event) {\n      var _handlers = wrapper._handlers[event];\n      if (!_handlers) {\n        wrapper._handlers[event] = _handlers = [];\n\n        // register the static, propagated handler\n        hammer.on(event, propagatedHandler);\n      }\n      _handlers.push(handler);\n    });\n\n    return wrapper;\n  };\n\n  /**\n   * Unregister a handler for one or multiple events\n   * @param {String} events      A space separated string with events\n   * @param {function} [handler] Optional. The registered handler. If not\n   *                             provided, all handlers for given events\n   *                             are removed.\n   * @returns {Hammer.Manager}   Returns the hammer instance\n   */\n  wrapper.off = function (events, handler) {\n    // unregister the handler\n    split(events).forEach(function (event) {\n      var _handlers = wrapper._handlers[event];\n      if (_handlers) {\n        _handlers = handler ? _handlers.filter(function (h) {\n          return h !== handler;\n        }) : [];\n\n        if (_handlers.length > 0) {\n          wrapper._handlers[event] = _handlers;\n        }\n        else {\n          // remove static, propagated handler\n          hammer.off(event, propagatedHandler);\n          delete wrapper._handlers[event];\n        }\n      }\n    });\n\n    return wrapper;\n  };\n\n  /**\n   * Emit to the event listeners\n   * @param {string} eventType\n   * @param {Event} event\n   */\n  wrapper.emit = function(eventType, event) {\n    _firstTarget = event.target;\n    hammer.emit(eventType, event);\n  };\n\n  wrapper.destroy = function () {\n    // Detach from DOM element\n    var hammers = hammer.element.hammer;\n    var idx = hammers.indexOf(wrapper);\n    if(idx !== -1) hammers.splice(idx,1);\n    if(!hammers.length) delete hammer.element.hammer;\n\n    // clear all handlers\n    wrapper._handlers = {};\n\n    // call original hammer destroy\n    hammer.destroy();\n  };\n\n  // split a string with space separated words\n  function split(events) {\n    return events.match(/[^ ]+/g);\n  }\n\n  /**\n   * A static event handler, applying event propagation.\n   * @param {Object} event\n   */\n  function propagatedHandler(event) {\n    // let only a single hammer instance handle this event\n    if (event.type !== 'hammer.input') {\n      // it is possible that the same srcEvent is used with multiple hammer events,\n      // we keep track on which events are handled in an object _handled\n      if (!event.srcEvent._handled) {\n        event.srcEvent._handled = {};\n      }\n\n      if (event.srcEvent._handled[event.type]) {\n        return;\n      }\n      else {\n        event.srcEvent._handled[event.type] = true;\n      }\n    }\n\n    // attach a stopPropagation function to the event\n    var stopped = false;\n    event.stopPropagation = function () {\n      stopped = true;\n    };\n\n    //wrap the srcEvent's stopPropagation to also stop hammer propagation:\n    var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent);\n    if(typeof srcStop == \"function\") {\n      event.srcEvent.stopPropagation = function(){\n        srcStop();\n        event.stopPropagation();\n      };\n    }\n\n    // attach firstTarget property to the event\n    event.firstTarget = _firstTarget;\n\n    // propagate over all elements (until stopped)\n    var elem = _firstTarget.isConnected ? _firstTarget : event.target;\n    while (elem && !stopped) {\n      var elemHammer = elem.hammer;\n      if(elemHammer){\n        var _handlers;\n        for(var k = 0; k < elemHammer.length; k++){\n          _handlers = elemHammer[k]._handlers[event.type];\n          if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) {\n            _handlers[i](event);\n          }\n        }\n      }\n      elem = elem.parentNode;\n    }\n  }\n\n  return wrapper;\n}\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n *\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock() {\n  const noop = () => {};\n  return {\n    on: noop,\n    off: noop,\n    destroy: noop,\n    emit: noop,\n    get() {\n      return {\n        set: noop\n      };\n    }\n  };\n}\nlet modifiedHammer;\nif (typeof window !== \"undefined\") {\n  const OurHammer = window[\"Hammer\"] || Hammer$3;\n  modifiedHammer = propagating(OurHammer, {\n    preventDefault: \"mouse\"\n  });\n} else {\n  modifiedHammer = function () {\n    // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n    return hammerMock();\n  };\n}\nvar Hammer = modifiedHammer;\n\n/**\n * Register a touch event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nfunction onTouch(hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFirst) {\n      callback(event);\n    }\n  };\n  hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Register a release event, taking place after a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n * @returns {*}\n */\nfunction onRelease(hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFinal) {\n      callback(event);\n    }\n  };\n  return hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Hack the PinchRecognizer such that it doesn't prevent default behavior\n * for vertical panning.\n *\n * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932\n *\n * @param {Hammer.Pinch} pinchRecognizer\n * @return {Hammer.Pinch} returns the pinchRecognizer\n */\nfunction disablePreventDefaultVertically(pinchRecognizer) {\n  const TOUCH_ACTION_PAN_Y = \"pan-y\";\n  pinchRecognizer.getTouchAction = function () {\n    // default method returns [TOUCH_ACTION_NONE]\n    return [TOUCH_ACTION_PAN_Y];\n  };\n  return pinchRecognizer;\n}\n\n/**\n * The class TimeStep is an iterator for dates. You provide a start date and an\n * end date. The class itself determines the best scale (step size) based on the\n * provided start Date, end Date, and minimumStep.\n *\n * If minimumStep is provided, the step size is chosen as close as possible\n * to the minimumStep but larger than minimumStep. If minimumStep is not\n * provided, the scale is set to 1 DAY.\n * The minimumStep should correspond with the onscreen size of about 6 characters\n *\n * Alternatively, you can set a scale by hand.\n * After creation, you can initialize the class by executing first(). Then you\n * can iterate from the start date to the end date via next(). You can check if\n * the end date is reached with the function hasNext(). After each step, you can\n * retrieve the current date via getCurrent().\n * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours,\n * days, to years.\n *\n * Version: 1.2\n *\n */\nclass TimeStep {\n  /**\n   * @param {Date} [start]         The start date, for example new Date(2010, 9, 21)\n   *                               or new Date(2010, 9, 21, 23, 45, 00)\n   * @param {Date} [end]           The end date\n   * @param {number} [minimumStep] Optional. Minimum step size in milliseconds\n   * @param {Date|Array.<Date>} [hiddenDates] Optional.\n   * @param {{showMajorLabels: boolean, showWeekScale: boolean}} [options] Optional.\n   * @constructor  TimeStep\n   */\n  constructor(start, end, minimumStep, hiddenDates, options) {\n    this.moment = options && options.moment || moment$2;\n    this.options = options ? options : {};\n\n    // variables\n    this.current = this.moment();\n    this._start = this.moment();\n    this._end = this.moment();\n    this.autoScale = true;\n    this.scale = \"day\";\n    this.step = 1;\n\n    // initialize the range\n    this.setRange(start, end, minimumStep);\n\n    // hidden Dates options\n    this.switchedDay = false;\n    this.switchedMonth = false;\n    this.switchedYear = false;\n    if (_Array$isArray(hiddenDates)) {\n      this.hiddenDates = hiddenDates;\n    } else if (hiddenDates != undefined) {\n      this.hiddenDates = [hiddenDates];\n    } else {\n      this.hiddenDates = [];\n    }\n    this.format = TimeStep.FORMAT; // default formatting\n  }\n\n  /**\n   * Set custom constructor function for moment. Can be used to set dates\n   * to UTC or to set a utcOffset.\n   * @param {function} moment\n   */\n  setMoment(moment) {\n    this.moment = moment;\n\n    // update the date properties, can have a new utcOffset\n    this.current = this.moment(this.current.valueOf());\n    this._start = this.moment(this._start.valueOf());\n    this._end = this.moment(this._end.valueOf());\n  }\n\n  /**\n   * Set custom formatting for the minor an major labels of the TimeStep.\n   * Both `minorLabels` and `majorLabels` are an Object with properties:\n   * 'millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'.\n   * @param {{minorLabels: Object, majorLabels: Object}} format\n   */\n  setFormat(format) {\n    const defaultFormat = availableUtils.deepExtend({}, TimeStep.FORMAT);\n    this.format = availableUtils.deepExtend(defaultFormat, format);\n  }\n\n  /**\n   * Set a new range\n   * If minimumStep is provided, the step size is chosen as close as possible\n   * to the minimumStep but larger than minimumStep. If minimumStep is not\n   * provided, the scale is set to 1 DAY.\n   * The minimumStep should correspond with the onscreen size of about 6 characters\n   * @param {Date} [start]      The start date and time.\n   * @param {Date} [end]        The end date and time.\n   * @param {int} [minimumStep] Optional. Minimum step size in milliseconds\n   */\n  setRange(start, end, minimumStep) {\n    if (!(start instanceof Date) || !(end instanceof Date)) {\n      throw \"No legal start or end date in method setRange\";\n    }\n    this._start = start != undefined ? this.moment(start.valueOf()) : _Date$now();\n    this._end = end != undefined ? this.moment(end.valueOf()) : _Date$now();\n    if (this.autoScale) {\n      this.setMinimumStep(minimumStep);\n    }\n  }\n\n  /**\n   * Set the range iterator to the start date.\n   */\n  start() {\n    this.current = this._start.clone();\n    this.roundToMinor();\n  }\n\n  /**\n   * Round the current date to the first minor date value\n   * This must be executed once when the current date is set to start Date\n   */\n  roundToMinor() {\n    // round to floor\n    // to prevent year & month scales rounding down to the first day of week we perform this separately\n    if (this.scale == \"week\") {\n      this.current.weekday(0);\n    }\n    // IMPORTANT: we have no breaks in this switch! (this is no bug)\n    // noinspection FallThroughInSwitchStatementJS\n    switch (this.scale) {\n      case \"year\":\n        this.current = this.current.year(this.step * Math.floor(this.current.year() / this.step)).month(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"month\":\n        this.current = this.current.date(1);\n      // eslint-disable-next-line no-fallthrough\n      case \"week\":\n      case \"day\":\n      case \"weekday\":\n        this.current = this.current.hours(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"hour\":\n        this.current = this.current.minutes(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"minute\":\n        this.current = this.current.seconds(0);\n      // eslint-disable-next-line no-fallthrough\n      case \"second\":\n        this.current = this.current.milliseconds(0);\n      //case 'millisecond': // nothing to do for milliseconds\n    }\n    if (this.step != 1) {\n      // round down to the first minor value that is a multiple of the current step size\n      let priorCurrent = this.current.clone();\n      switch (this.scale) {\n        case \"millisecond\":\n          this.current = this.current.subtract(this.current.milliseconds() % this.step, \"milliseconds\");\n          break;\n        case \"second\":\n          this.current = this.current.subtract(this.current.seconds() % this.step, \"seconds\");\n          break;\n        case \"minute\":\n          this.current = this.current.subtract(this.current.minutes() % this.step, \"minutes\");\n          break;\n        case \"hour\":\n          this.current = this.current.subtract(this.current.hours() % this.step, \"hours\");\n          break;\n        case \"weekday\": // intentional fall through\n        case \"day\":\n          this.current = this.current.subtract((this.current.date() - 1) % this.step, \"day\");\n          break;\n        case \"week\":\n          this.current = this.current.subtract(this.current.week() % this.step, \"week\");\n          break;\n        case \"month\":\n          this.current = this.current.subtract(this.current.month() % this.step, \"month\");\n          break;\n        case \"year\":\n          this.current = this.current.subtract(this.current.year() % this.step, \"year\");\n          break;\n      }\n      if (!priorCurrent.isSame(this.current)) {\n        this.current = this.moment(snapAwayFromHidden(this.hiddenDates, this.current.valueOf(), -1, true));\n      }\n    }\n  }\n\n  /**\n   * Check if the there is a next step\n   * @return {boolean}  true if the current date has not passed the end date\n   */\n  hasNext() {\n    return this.current.valueOf() <= this._end.valueOf();\n  }\n\n  /**\n   * Do the next step\n   */\n  next() {\n    const prev = this.current.valueOf();\n\n    // Two cases, needed to prevent issues with switching daylight savings\n    // (end of March and end of October)\n    switch (this.scale) {\n      case \"millisecond\":\n        this.current = this.current.add(this.step, \"millisecond\");\n        break;\n      case \"second\":\n        this.current = this.current.add(this.step, \"second\");\n        break;\n      case \"minute\":\n        this.current = this.current.add(this.step, \"minute\");\n        break;\n      case \"hour\":\n        this.current = this.current.add(this.step, \"hour\");\n        if (this.current.month() < 6) {\n          this.current = this.current.subtract(this.current.hours() % this.step, \"hour\");\n        } else {\n          if (this.current.hours() % this.step !== 0) {\n            this.current = this.current.add(this.step - this.current.hours() % this.step, \"hour\");\n          }\n        }\n        break;\n      case \"weekday\": // intentional fall through\n      case \"day\":\n        this.current = this.current.add(this.step, \"day\");\n        break;\n      case \"week\":\n        if (this.current.weekday() !== 0) {\n          // we had a month break not correlating with a week's start before\n          this.current = this.current.weekday(0).add(this.step, \"week\"); // switch back to week cycles\n        } else if (this.options.showMajorLabels === false) {\n          this.current = this.current.add(this.step, \"week\"); // the default case\n        } else {\n          // first day of the week\n          const nextWeek = this.current.clone();\n          nextWeek.add(1, \"week\");\n          if (nextWeek.isSame(this.current, \"month\")) {\n            // is the first day of the next week in the same month?\n            this.current = this.current.add(this.step, \"week\"); // the default case\n          } else {\n            // inject a step at each first day of the month\n            this.current = this.current.add(this.step, \"week\").date(1);\n          }\n        }\n        break;\n      case \"month\":\n        this.current = this.current.add(this.step, \"month\");\n        break;\n      case \"year\":\n        this.current = this.current.add(this.step, \"year\");\n        break;\n    }\n    if (this.step != 1) {\n      // round down to the correct major value\n      switch (this.scale) {\n        case \"millisecond\":\n          if (this.current.milliseconds() > 0 && this.current.milliseconds() < this.step) this.current = this.current.milliseconds(0);\n          break;\n        case \"second\":\n          if (this.current.seconds() > 0 && this.current.seconds() < this.step) this.current = this.current.seconds(0);\n          break;\n        case \"minute\":\n          if (this.current.minutes() > 0 && this.current.minutes() < this.step) this.current = this.current.minutes(0);\n          break;\n        case \"hour\":\n          if (this.current.hours() > 0 && this.current.hours() < this.step) this.current = this.current.hours(0);\n          break;\n        case \"weekday\": // intentional fall through\n        case \"day\":\n          if (this.current.date() < this.step + 1) this.current = this.current.date(1);\n          break;\n        case \"week\":\n          if (this.current.week() < this.step) this.current = this.current.week(1); // week numbering starts at 1, not 0\n          break;\n        case \"month\":\n          if (this.current.month() < this.step) this.current = this.current.month(0);\n          break;\n      }\n    }\n\n    // safety mechanism: if current time is still unchanged, move to the end\n    if (this.current.valueOf() == prev) {\n      this.current = this._end.clone();\n    }\n\n    // Reset switches for year, month and day. Will get set to true where appropriate in DateUtil.stepOverHiddenDates\n    this.switchedDay = false;\n    this.switchedMonth = false;\n    this.switchedYear = false;\n    stepOverHiddenDates(this.moment, this, prev);\n  }\n\n  /**\n   * Get the current datetime\n   * @return {Moment}  current The current date\n   */\n  getCurrent() {\n    return this.current.clone();\n  }\n\n  /**\n   * Set a custom scale. Autoscaling will be disabled.\n   * For example setScale('minute', 5) will result\n   * in minor steps of 5 minutes, and major steps of an hour.\n   *\n   * @param {{scale: string, step: number}} params\n   *                               An object containing two properties:\n   *                               - A string 'scale'. Choose from 'millisecond', 'second',\n   *                                 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'.\n   *                               - A number 'step'. A step size, by default 1.\n   *                                 Choose for example 1, 2, 5, or 10.\n   */\n  setScale(params) {\n    if (params && typeof params.scale == \"string\") {\n      this.scale = params.scale;\n      this.step = params.step > 0 ? params.step : 1;\n      this.autoScale = false;\n    }\n  }\n\n  /**\n   * Enable or disable autoscaling\n   * @param {boolean} enable  If true, autoascaling is set true\n   */\n  setAutoScale(enable) {\n    this.autoScale = enable;\n  }\n\n  /**\n   * Automatically determine the scale that bests fits the provided minimum step\n   * @param {number} [minimumStep]  The minimum step size in milliseconds\n   */\n  setMinimumStep(minimumStep) {\n    if (minimumStep == undefined) {\n      return;\n    }\n\n    //var b = asc + ds;\n\n    const stepYear = 1000 * 60 * 60 * 24 * 30 * 12;\n    const stepMonth = 1000 * 60 * 60 * 24 * 30;\n    const stepDay = 1000 * 60 * 60 * 24;\n    const stepHour = 1000 * 60 * 60;\n    const stepMinute = 1000 * 60;\n    const stepSecond = 1000;\n    const stepMillisecond = 1;\n\n    // find the smallest step that is larger than the provided minimumStep\n    if (stepYear * 1000 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 1000;\n    }\n    if (stepYear * 500 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 500;\n    }\n    if (stepYear * 100 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 100;\n    }\n    if (stepYear * 50 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 50;\n    }\n    if (stepYear * 10 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 10;\n    }\n    if (stepYear * 5 > minimumStep) {\n      this.scale = \"year\";\n      this.step = 5;\n    }\n    if (stepYear > minimumStep) {\n      this.scale = \"year\";\n      this.step = 1;\n    }\n    if (stepMonth * 3 > minimumStep) {\n      this.scale = \"month\";\n      this.step = 3;\n    }\n    if (stepMonth > minimumStep) {\n      this.scale = \"month\";\n      this.step = 1;\n    }\n    if (stepDay * 7 > minimumStep && this.options.showWeekScale) {\n      this.scale = \"week\";\n      this.step = 1;\n    }\n    if (stepDay * 2 > minimumStep) {\n      this.scale = \"day\";\n      this.step = 2;\n    }\n    if (stepDay > minimumStep) {\n      this.scale = \"day\";\n      this.step = 1;\n    }\n    if (stepDay / 2 > minimumStep) {\n      this.scale = \"weekday\";\n      this.step = 1;\n    }\n    if (stepHour * 4 > minimumStep) {\n      this.scale = \"hour\";\n      this.step = 4;\n    }\n    if (stepHour > minimumStep) {\n      this.scale = \"hour\";\n      this.step = 1;\n    }\n    if (stepMinute * 15 > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 15;\n    }\n    if (stepMinute * 10 > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 10;\n    }\n    if (stepMinute * 5 > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 5;\n    }\n    if (stepMinute > minimumStep) {\n      this.scale = \"minute\";\n      this.step = 1;\n    }\n    if (stepSecond * 15 > minimumStep) {\n      this.scale = \"second\";\n      this.step = 15;\n    }\n    if (stepSecond * 10 > minimumStep) {\n      this.scale = \"second\";\n      this.step = 10;\n    }\n    if (stepSecond * 5 > minimumStep) {\n      this.scale = \"second\";\n      this.step = 5;\n    }\n    if (stepSecond > minimumStep) {\n      this.scale = \"second\";\n      this.step = 1;\n    }\n    if (stepMillisecond * 200 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 200;\n    }\n    if (stepMillisecond * 100 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 100;\n    }\n    if (stepMillisecond * 50 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 50;\n    }\n    if (stepMillisecond * 10 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 10;\n    }\n    if (stepMillisecond * 5 > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 5;\n    }\n    if (stepMillisecond > minimumStep) {\n      this.scale = \"millisecond\";\n      this.step = 1;\n    }\n  }\n\n  /**\n   * Snap a date to a rounded value.\n   * The snap intervals are dependent on the current scale and step.\n   * Static function\n   * @param {Date} date    the date to be snapped.\n   * @param {string} scale Current scale, can be 'millisecond', 'second',\n   *                       'minute', 'hour', 'weekday, 'day', 'week', 'month', 'year'.\n   * @param {number} step  Current step (1, 2, 4, 5, ...\n   * @return {Date} snappedDate\n   */\n  static snap(date, scale, step) {\n    let clone = moment$2(date);\n    if (scale == \"year\") {\n      const year = clone.year() + Math.round(clone.month() / 12);\n      clone = clone.year(Math.round(year / step) * step).month(0).date(0).hours(0).minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"month\") {\n      if (clone.date() > 15) {\n        clone = clone.date(1).add(1, \"month\"); // important: first set Date to 1, after that change the month.\n      } else {\n        clone = clone.date(1);\n      }\n      clone = clone.hours(0).minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"week\") {\n      if (clone.weekday() > 2) {\n        // doing it the momentjs locale aware way\n        clone = clone.weekday(0).add(1, \"week\");\n      } else {\n        clone = clone.weekday(0);\n      }\n      clone = clone.hours(0).minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"day\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 5:\n        case 2:\n          clone = clone.hours(Math.round(clone.hours() / 24) * 24);\n          break;\n        default:\n          clone = clone.hours(Math.round(clone.hours() / 12) * 12);\n          break;\n      }\n      clone = clone.minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"weekday\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 5:\n        case 2:\n          clone = clone.hours(Math.round(clone.hours() / 12) * 12);\n          break;\n        default:\n          clone = clone.hours(Math.round(clone.hours() / 6) * 6);\n          break;\n      }\n      clone = clone.minutes(0).seconds(0).milliseconds(0);\n    } else if (scale == \"hour\") {\n      switch (step) {\n        case 4:\n          clone = clone.minutes(Math.round(clone.minutes() / 60) * 60);\n          break;\n        default:\n          clone = clone.minutes(Math.round(clone.minutes() / 30) * 30);\n          break;\n      }\n      clone = clone.seconds(0).milliseconds(0);\n    } else if (scale == \"minute\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 15:\n        case 10:\n          clone = clone.minutes(Math.round(clone.minutes() / 5) * 5).seconds(0);\n          break;\n        case 5:\n          clone = clone.seconds(Math.round(clone.seconds() / 60) * 60);\n          break;\n        default:\n          clone = clone.seconds(Math.round(clone.seconds() / 30) * 30);\n          break;\n      }\n      clone = clone.milliseconds(0);\n    } else if (scale == \"second\") {\n      //noinspection FallthroughInSwitchStatementJS\n      switch (step) {\n        case 15:\n        case 10:\n          clone = clone.seconds(Math.round(clone.seconds() / 5) * 5).milliseconds(0);\n          break;\n        case 5:\n          clone = clone.milliseconds(Math.round(clone.milliseconds() / 1000) * 1000);\n          break;\n        default:\n          clone = clone.milliseconds(Math.round(clone.milliseconds() / 500) * 500);\n          break;\n      }\n    } else if (scale == \"millisecond\") {\n      const _step = step > 5 ? step / 2 : 1;\n      clone = clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step);\n    }\n    return clone;\n  }\n\n  /**\n   * Check if the current value is a major value (for example when the step\n   * is DAY, a major value is each first day of the MONTH)\n   * @return {boolean} true if current date is major, else false.\n   */\n  isMajor() {\n    if (this.switchedYear == true) {\n      switch (this.scale) {\n        case \"year\":\n        case \"month\":\n        case \"week\":\n        case \"weekday\":\n        case \"day\":\n        case \"hour\":\n        case \"minute\":\n        case \"second\":\n        case \"millisecond\":\n          return true;\n        default:\n          return false;\n      }\n    } else if (this.switchedMonth == true) {\n      switch (this.scale) {\n        case \"week\":\n        case \"weekday\":\n        case \"day\":\n        case \"hour\":\n        case \"minute\":\n        case \"second\":\n        case \"millisecond\":\n          return true;\n        default:\n          return false;\n      }\n    } else if (this.switchedDay == true) {\n      switch (this.scale) {\n        case \"millisecond\":\n        case \"second\":\n        case \"minute\":\n        case \"hour\":\n          return true;\n        default:\n          return false;\n      }\n    }\n    const date = this.moment(this.current);\n    switch (this.scale) {\n      case \"millisecond\":\n        return date.milliseconds() == 0;\n      case \"second\":\n        return date.seconds() == 0;\n      case \"minute\":\n        return date.hours() == 0 && date.minutes() == 0;\n      case \"hour\":\n        return date.hours() == 0;\n      case \"weekday\": // intentional fall through\n      case \"day\":\n        return this.options.showWeekScale ? date.isoWeekday() == 1 : date.date() == 1;\n      case \"week\":\n        return date.date() == 1;\n      case \"month\":\n        return date.month() == 0;\n      case \"year\":\n        return false;\n      default:\n        return false;\n    }\n  }\n\n  /**\n   * Returns formatted text for the minor axislabel, depending on the current\n   * date and the scale. For example when scale is MINUTE, the current time is\n   * formatted as \"hh:mm\".\n   * @param {Date} [date=this.current] custom date. if not provided, current date is taken\n   * @returns {String}\n   */\n  getLabelMinor(date) {\n    if (date == undefined) {\n      date = this.current;\n    }\n    if (date instanceof Date) {\n      date = this.moment(date);\n    }\n    if (typeof this.format.minorLabels === \"function\") {\n      return this.format.minorLabels(date, this.scale, this.step);\n    }\n    const format = this.format.minorLabels[this.scale];\n    // noinspection FallThroughInSwitchStatementJS\n    switch (this.scale) {\n      case \"week\":\n        // Don't draw the minor label if this date is the first day of a month AND if it's NOT the start of the week.\n        // The 'date' variable may actually be the 'next' step when called from TimeAxis' _repaintLabels.\n        if (date.date() === 1 && date.weekday() !== 0) {\n          return \"\";\n        }\n      // eslint-disable-next-line no-fallthrough\n      default:\n        return format && format.length > 0 ? this.moment(date).format(format) : \"\";\n    }\n  }\n\n  /**\n   * Returns formatted text for the major axis label, depending on the current\n   * date and the scale. For example when scale is MINUTE, the major scale is\n   * hours, and the hour will be formatted as \"hh\".\n   * @param {Date} [date=this.current] custom date. if not provided, current date is taken\n   * @returns {String}\n   */\n  getLabelMajor(date) {\n    if (date == undefined) {\n      date = this.current;\n    }\n    if (date instanceof Date) {\n      date = this.moment(date);\n    }\n    if (typeof this.format.majorLabels === \"function\") {\n      return this.format.majorLabels(date, this.scale, this.step);\n    }\n    const format = this.format.majorLabels[this.scale];\n    return format && format.length > 0 ? this.moment(date).format(format) : \"\";\n  }\n\n  /**\n   * get class name\n   * @return {string} class name\n   */\n  getClassName() {\n    var _context;\n    const _moment = this.moment;\n    const m = this.moment(this.current);\n    const current = m.locale ? m.locale(\"en\") : m.lang(\"en\"); // old versions of moment have .lang() function\n    const step = this.step;\n    const classNames = [];\n\n    /**\n     *\n     * @param {number} value\n     * @returns {String}\n     */\n    function even(value) {\n      return value / step % 2 == 0 ? \" vis-even\" : \" vis-odd\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function today(date) {\n      if (date.isSame(_Date$now(), \"day\")) {\n        return \" vis-today\";\n      }\n      if (date.isSame(_moment().add(1, \"day\"), \"day\")) {\n        return \" vis-tomorrow\";\n      }\n      if (date.isSame(_moment().add(-1, \"day\"), \"day\")) {\n        return \" vis-yesterday\";\n      }\n      return \"\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function currentWeek(date) {\n      return date.isSame(_Date$now(), \"week\") ? \" vis-current-week\" : \"\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function currentMonth(date) {\n      return date.isSame(_Date$now(), \"month\") ? \" vis-current-month\" : \"\";\n    }\n\n    /**\n     *\n     * @param {Date} date\n     * @returns {String}\n     */\n    function currentYear(date) {\n      return date.isSame(_Date$now(), \"year\") ? \" vis-current-year\" : \"\";\n    }\n    switch (this.scale) {\n      case \"millisecond\":\n        classNames.push(today(current));\n        classNames.push(even(current.milliseconds()));\n        break;\n      case \"second\":\n        classNames.push(today(current));\n        classNames.push(even(current.seconds()));\n        break;\n      case \"minute\":\n        classNames.push(today(current));\n        classNames.push(even(current.minutes()));\n        break;\n      case \"hour\":\n        classNames.push(_concatInstanceProperty(_context = \"vis-h\".concat(current.hours())).call(_context, this.step == 4 ? \"-h\" + (current.hours() + 4) : \"\"));\n        classNames.push(today(current));\n        classNames.push(even(current.hours()));\n        break;\n      case \"weekday\":\n        classNames.push(\"vis-\".concat(current.format(\"dddd\").toLowerCase()));\n        classNames.push(today(current));\n        classNames.push(currentWeek(current));\n        classNames.push(even(current.date()));\n        break;\n      case \"day\":\n        classNames.push(\"vis-day\".concat(current.date()));\n        classNames.push(\"vis-\".concat(current.format(\"MMMM\").toLowerCase()));\n        classNames.push(today(current));\n        classNames.push(currentMonth(current));\n        classNames.push(this.step <= 2 ? today(current) : \"\");\n        classNames.push(this.step <= 2 ? \"vis-\".concat(current.format(\"dddd\").toLowerCase()) : \"\");\n        classNames.push(even(current.date() - 1));\n        break;\n      case \"week\":\n        classNames.push(\"vis-week\".concat(current.format(\"w\")));\n        classNames.push(currentWeek(current));\n        classNames.push(even(current.week()));\n        break;\n      case \"month\":\n        classNames.push(\"vis-\".concat(current.format(\"MMMM\").toLowerCase()));\n        classNames.push(currentMonth(current));\n        classNames.push(even(current.month()));\n        break;\n      case \"year\":\n        classNames.push(\"vis-year\".concat(current.year()));\n        classNames.push(currentYear(current));\n        classNames.push(even(current.year()));\n        break;\n    }\n    return _filterInstanceProperty(classNames).call(classNames, String).join(\" \");\n  }\n}\n\n// Time formatting\nTimeStep.FORMAT = {\n  minorLabels: {\n    millisecond: \"SSS\",\n    second: \"s\",\n    minute: \"HH:mm\",\n    hour: \"HH:mm\",\n    weekday: \"ddd D\",\n    day: \"D\",\n    week: \"w\",\n    month: \"MMM\",\n    year: \"YYYY\"\n  },\n  majorLabels: {\n    millisecond: \"HH:mm:ss\",\n    second: \"D MMMM HH:mm\",\n    minute: \"ddd D MMMM\",\n    hour: \"ddd D MMMM\",\n    weekday: \"MMMM YYYY\",\n    day: \"MMMM YYYY\",\n    week: \"MMMM YYYY\",\n    month: \"YYYY\",\n    year: \"\"\n  }\n};\n\n/** A horizontal time axis */\nclass TimeAxis extends Component {\n  /**\n   * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n   * @param {Object} [options]        See TimeAxis.setOptions for the available\n   *                                  options.\n   * @constructor TimeAxis\n   * @extends Component\n   */\n  constructor(body, options) {\n    super();\n    this.dom = {\n      foreground: null,\n      lines: [],\n      majorTexts: [],\n      minorTexts: [],\n      redundant: {\n        lines: [],\n        majorTexts: [],\n        minorTexts: []\n      }\n    };\n    this.props = {\n      range: {\n        start: 0,\n        end: 0,\n        minimumStep: 0\n      },\n      lineTop: 0\n    };\n    this.defaultOptions = {\n      orientation: {\n        axis: \"bottom\"\n      },\n      // axis orientation: 'top' or 'bottom'\n      showMinorLabels: true,\n      showMajorLabels: true,\n      showWeekScale: false,\n      maxMinorChars: 7,\n      format: availableUtils.extend({}, TimeStep.FORMAT),\n      moment: moment$2,\n      timeAxis: null\n    };\n    this.options = availableUtils.extend({}, this.defaultOptions);\n    this.body = body;\n\n    // create the HTML DOM\n    this._create();\n    this.setOptions(options);\n  }\n\n  /**\n   * Set options for the TimeAxis.\n   * Parameters will be merged in current options.\n   * @param {Object} options  Available options:\n   *                          {string} [orientation.axis]\n   *                          {boolean} [showMinorLabels]\n   *                          {boolean} [showMajorLabels]\n   *                          {boolean} [showWeekScale]\n   */\n  setOptions(options) {\n    if (options) {\n      // copy all options that we know\n      availableUtils.selectiveExtend([\"showMinorLabels\", \"showMajorLabels\", \"showWeekScale\", \"maxMinorChars\", \"hiddenDates\", \"timeAxis\", \"moment\", \"rtl\"], this.options, options);\n\n      // deep copy the format options\n      availableUtils.selectiveDeepExtend([\"format\"], this.options, options);\n      if (\"orientation\" in options) {\n        if (typeof options.orientation === \"string\") {\n          this.options.orientation.axis = options.orientation;\n        } else if (typeof options.orientation === \"object\" && \"axis\" in options.orientation) {\n          this.options.orientation.axis = options.orientation.axis;\n        }\n      }\n\n      // apply locale to moment.js\n      // TODO: not so nice, this is applied globally to moment.js\n      if (\"locale\" in options) {\n        if (typeof moment$2.locale === \"function\") {\n          // moment.js 2.8.1+\n          moment$2.locale(options.locale);\n        } else {\n          moment$2.lang(options.locale);\n        }\n      }\n    }\n  }\n\n  /**\n   * Create the HTML DOM for the TimeAxis\n   */\n  _create() {\n    this.dom.foreground = document.createElement(\"div\");\n    this.dom.background = document.createElement(\"div\");\n    this.dom.foreground.className = \"vis-time-axis vis-foreground\";\n    this.dom.background.className = \"vis-time-axis vis-background\";\n  }\n\n  /**\n   * Destroy the TimeAxis\n   */\n  destroy() {\n    // remove from DOM\n    if (this.dom.foreground.parentNode) {\n      this.dom.foreground.parentNode.removeChild(this.dom.foreground);\n    }\n    if (this.dom.background.parentNode) {\n      this.dom.background.parentNode.removeChild(this.dom.background);\n    }\n    this.body = null;\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    const props = this.props;\n    const foreground = this.dom.foreground;\n    const background = this.dom.background;\n\n    // determine the correct parent DOM element (depending on option orientation)\n    const parent = this.options.orientation.axis == \"top\" ? this.body.dom.top : this.body.dom.bottom;\n    const parentChanged = foreground.parentNode !== parent;\n\n    // calculate character width and height\n    this._calculateCharSize();\n\n    // TODO: recalculate sizes only needed when parent is resized or options is changed\n    const showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== \"none\";\n    const showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== \"none\";\n\n    // determine the width and height of the elemens for the axis\n    props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n    props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n    props.height = props.minorLabelHeight + props.majorLabelHeight;\n    props.width = foreground.offsetWidth;\n    props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - (this.options.orientation.axis == \"top\" ? this.body.domProps.bottom.height : this.body.domProps.top.height);\n    props.minorLineWidth = 1; // TODO: really calculate width\n    props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight;\n    props.majorLineWidth = 1; // TODO: really calculate width\n\n    //  take foreground and background offline while updating (is almost twice as fast)\n    const foregroundNextSibling = foreground.nextSibling;\n    const backgroundNextSibling = background.nextSibling;\n    foreground.parentNode && foreground.parentNode.removeChild(foreground);\n    background.parentNode && background.parentNode.removeChild(background);\n    foreground.style.height = \"\".concat(this.props.height, \"px\");\n    this._repaintLabels();\n\n    // put DOM online again (at the same place)\n    if (foregroundNextSibling) {\n      parent.insertBefore(foreground, foregroundNextSibling);\n    } else {\n      parent.appendChild(foreground);\n    }\n    if (backgroundNextSibling) {\n      this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling);\n    } else {\n      this.body.dom.backgroundVertical.appendChild(background);\n    }\n    return this._isResized() || parentChanged;\n  }\n\n  /**\n   * Repaint major and minor text labels and vertical grid lines\n   * @private\n   */\n  _repaintLabels() {\n    const orientation = this.options.orientation.axis;\n\n    // calculate range and step (step such that we have space for 7 characters per label)\n    const start = availableUtils.convert(this.body.range.start, \"Number\");\n    const end = availableUtils.convert(this.body.range.end, \"Number\");\n    const timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf();\n    let minimumStep = timeLabelsize - getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize);\n    minimumStep -= this.body.util.toTime(0).valueOf();\n    const step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates, this.options);\n    step.setMoment(this.options.moment);\n    if (this.options.format) {\n      step.setFormat(this.options.format);\n    }\n    if (this.options.timeAxis) {\n      step.setScale(this.options.timeAxis);\n    }\n    this.step = step;\n\n    // Move all DOM elements to a \"redundant\" list, where they\n    // can be picked for re-use, and clear the lists with lines and texts.\n    // At the end of the function _repaintLabels, left over elements will be cleaned up\n    const dom = this.dom;\n    dom.redundant.lines = dom.lines;\n    dom.redundant.majorTexts = dom.majorTexts;\n    dom.redundant.minorTexts = dom.minorTexts;\n    dom.lines = [];\n    dom.majorTexts = [];\n    dom.minorTexts = [];\n    let current;\n    let next;\n    let x;\n    let xNext;\n    let isMajor;\n    let showMinorGrid;\n    let width = 0;\n    let prevWidth;\n    let line;\n    let xFirstMajorLabel = undefined;\n    let count = 0;\n    const MAX = 1000;\n    let className;\n    step.start();\n    next = step.getCurrent();\n    xNext = this.body.util.toScreen(next);\n    while (step.hasNext() && count < MAX) {\n      count++;\n      isMajor = step.isMajor();\n      className = step.getClassName();\n      current = next;\n      x = xNext;\n      step.next();\n      next = step.getCurrent();\n      xNext = this.body.util.toScreen(next);\n      prevWidth = width;\n      width = xNext - x;\n      switch (step.scale) {\n        case \"week\":\n          showMinorGrid = true;\n          break;\n        default:\n          showMinorGrid = width >= prevWidth * 0.4;\n          break;\n        // prevent displaying of the 31th of the month on a scale of 5 days\n      }\n      if (this.options.showMinorLabels && showMinorGrid) {\n        var label = this._repaintMinorText(x, step.getLabelMinor(current), orientation, className);\n        label.style.width = \"\".concat(width, \"px\"); // set width to prevent overflow\n      }\n      if (isMajor && this.options.showMajorLabels) {\n        if (x > 0) {\n          if (xFirstMajorLabel == undefined) {\n            xFirstMajorLabel = x;\n          }\n          label = this._repaintMajorText(x, step.getLabelMajor(current), orientation, className);\n        }\n        line = this._repaintMajorLine(x, width, orientation, className);\n      } else {\n        // minor line\n        if (showMinorGrid) {\n          line = this._repaintMinorLine(x, width, orientation, className);\n        } else {\n          if (line) {\n            // adjust the width of the previous grid\n            line.style.width = \"\".concat(_parseInt(line.style.width) + width, \"px\");\n          }\n        }\n      }\n    }\n    if (count === MAX && !warnedForOverflow) {\n      console.warn(\"Something is wrong with the Timeline scale. Limited drawing of grid lines to \".concat(MAX, \" lines.\"));\n      warnedForOverflow = true;\n    }\n\n    // create a major label on the left when needed\n    if (this.options.showMajorLabels) {\n      const leftTime = this.body.util.toTime(0); // upper bound estimation\n      const leftText = step.getLabelMajor(leftTime);\n      const widthText = leftText.length * (this.props.majorCharWidth || 10) + 10;\n      if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) {\n        this._repaintMajorText(0, leftText, orientation, className);\n      }\n    }\n\n    // Cleanup leftover DOM elements from the redundant list\n    _forEachInstanceProperty(availableUtils).call(availableUtils, this.dom.redundant, arr => {\n      while (arr.length) {\n        const elem = arr.pop();\n        if (elem && elem.parentNode) {\n          elem.parentNode.removeChild(elem);\n        }\n      }\n    });\n  }\n\n  /**\n   * Create a minor label for the axis at position x\n   * @param {number} x\n   * @param {string} text\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the HTML element of the created label\n   * @private\n   */\n  _repaintMinorText(x, text, orientation, className) {\n    // reuse redundant label\n    let label = this.dom.redundant.minorTexts.shift();\n    if (!label) {\n      // create new label\n      const content = document.createTextNode(\"\");\n      label = document.createElement(\"div\");\n      label.appendChild(content);\n      this.dom.foreground.appendChild(label);\n    }\n    this.dom.minorTexts.push(label);\n    label.innerHTML = availableUtils.xss(text);\n    let y = orientation == \"top\" ? this.props.majorLabelHeight : 0;\n    this._setXY(label, x, y);\n    label.className = \"vis-text vis-minor \".concat(className);\n    //label.title = title;  // TODO: this is a heavy operation\n\n    return label;\n  }\n\n  /**\n   * Create a Major label for the axis at position x\n   * @param {number} x\n   * @param {string} text\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the HTML element of the created label\n   * @private\n   */\n  _repaintMajorText(x, text, orientation, className) {\n    // reuse redundant label\n    let label = this.dom.redundant.majorTexts.shift();\n    if (!label) {\n      // create label\n      const content = document.createElement(\"div\");\n      label = document.createElement(\"div\");\n      label.appendChild(content);\n      this.dom.foreground.appendChild(label);\n    }\n    label.childNodes[0].innerHTML = availableUtils.xss(text);\n    label.className = \"vis-text vis-major \".concat(className);\n    //label.title = title; // TODO: this is a heavy operation\n\n    let y = orientation == \"top\" ? 0 : this.props.minorLabelHeight;\n    this._setXY(label, x, y);\n    this.dom.majorTexts.push(label);\n    return label;\n  }\n\n  /**\n   * sets xy\n   * @param {string} label\n   * @param {number} x\n   * @param {number} y\n   * @private\n   */\n  _setXY(label, x, y) {\n    var _context;\n    // If rtl is true, inverse x.\n    const directionX = this.options.rtl ? x * -1 : x;\n    label.style.transform = _concatInstanceProperty(_context = \"translate(\".concat(directionX, \"px, \")).call(_context, y, \"px)\");\n  }\n\n  /**\n   * Create a minor line for the axis at position x\n   * @param {number} left\n   * @param {number} width\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the created line\n   * @private\n   */\n  _repaintMinorLine(left, width, orientation, className) {\n    var _context2;\n    // reuse redundant line\n    let line = this.dom.redundant.lines.shift();\n    if (!line) {\n      // create vertical line\n      line = document.createElement(\"div\");\n      this.dom.background.appendChild(line);\n    }\n    this.dom.lines.push(line);\n    const props = this.props;\n    line.style.width = \"\".concat(width, \"px\");\n    line.style.height = \"\".concat(props.minorLineHeight, \"px\");\n    let y = orientation == \"top\" ? props.majorLabelHeight : this.body.domProps.top.height;\n    let x = left - props.minorLineWidth / 2;\n    this._setXY(line, x, y);\n    line.className = _concatInstanceProperty(_context2 = \"vis-grid \".concat(this.options.rtl ? \"vis-vertical-rtl\" : \"vis-vertical\", \" vis-minor \")).call(_context2, className);\n    return line;\n  }\n\n  /**\n   * Create a Major line for the axis at position x\n   * @param {number} left\n   * @param {number} width\n   * @param {string} orientation   \"top\" or \"bottom\" (default)\n   * @param {string} className\n   * @return {Element} Returns the created line\n   * @private\n   */\n  _repaintMajorLine(left, width, orientation, className) {\n    var _context3;\n    // reuse redundant line\n    let line = this.dom.redundant.lines.shift();\n    if (!line) {\n      // create vertical line\n      line = document.createElement(\"div\");\n      this.dom.background.appendChild(line);\n    }\n    this.dom.lines.push(line);\n    const props = this.props;\n    line.style.width = \"\".concat(width, \"px\");\n    line.style.height = \"\".concat(props.majorLineHeight, \"px\");\n    let y = orientation == \"top\" ? 0 : this.body.domProps.top.height;\n    let x = left - props.majorLineWidth / 2;\n    this._setXY(line, x, y);\n    line.className = _concatInstanceProperty(_context3 = \"vis-grid \".concat(this.options.rtl ? \"vis-vertical-rtl\" : \"vis-vertical\", \" vis-major \")).call(_context3, className);\n    return line;\n  }\n\n  /**\n   * Determine the size of text on the axis (both major and minor axis).\n   * The size is calculated only once and then cached in this.props.\n   * @private\n   */\n  _calculateCharSize() {\n    // Note: We calculate char size with every redraw. Size may change, for\n    // example when any of the timelines parents had display:none for example.\n\n    // determine the char width and height on the minor axis\n    if (!this.dom.measureCharMinor) {\n      this.dom.measureCharMinor = document.createElement(\"DIV\");\n      this.dom.measureCharMinor.className = \"vis-text vis-minor vis-measure\";\n      this.dom.measureCharMinor.style.position = \"absolute\";\n      this.dom.measureCharMinor.appendChild(document.createTextNode(\"0\"));\n      this.dom.foreground.appendChild(this.dom.measureCharMinor);\n    }\n    this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight;\n    this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth;\n\n    // determine the char width and height on the major axis\n    if (!this.dom.measureCharMajor) {\n      this.dom.measureCharMajor = document.createElement(\"DIV\");\n      this.dom.measureCharMajor.className = \"vis-text vis-major vis-measure\";\n      this.dom.measureCharMajor.style.position = \"absolute\";\n      this.dom.measureCharMajor.appendChild(document.createTextNode(\"0\"));\n      this.dom.foreground.appendChild(this.dom.measureCharMajor);\n    }\n    this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight;\n    this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth;\n  }\n}\nvar warnedForOverflow = false;\n\n/**\r\n * Created by Alex on 11/6/2014.\r\n */\r\nfunction keycharm(options) {\r\n  var preventDefault = options && options.preventDefault || false;\r\n\r\n  var container = options && options.container || window;\r\n\r\n  var _exportFunctions = {};\r\n  var _bound = {keydown:{}, keyup:{}};\r\n  var _keys = {};\r\n  var i;\r\n\r\n  // a - z\r\n  for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}\r\n  // A - Z\r\n  for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}\r\n  // 0 - 9\r\n  for (i = 0;  i <= 9;   i++) {_keys['' + i] = {code:48 + i, shift: false};}\r\n  // F1 - F12\r\n  for (i = 1;  i <= 12;   i++) {_keys['F' + i] = {code:111 + i, shift: false};}\r\n  // num0 - num9\r\n  for (i = 0;  i <= 9;   i++) {_keys['num' + i] = {code:96 + i, shift: false};}\r\n\r\n  // numpad misc\r\n  _keys['num*'] = {code:106, shift: false};\r\n  _keys['num+'] = {code:107, shift: false};\r\n  _keys['num-'] = {code:109, shift: false};\r\n  _keys['num/'] = {code:111, shift: false};\r\n  _keys['num.'] = {code:110, shift: false};\r\n  // arrows\r\n  _keys['left']  = {code:37, shift: false};\r\n  _keys['up']    = {code:38, shift: false};\r\n  _keys['right'] = {code:39, shift: false};\r\n  _keys['down']  = {code:40, shift: false};\r\n  // extra keys\r\n  _keys['space'] = {code:32, shift: false};\r\n  _keys['enter'] = {code:13, shift: false};\r\n  _keys['shift'] = {code:16, shift: undefined};\r\n  _keys['esc']   = {code:27, shift: false};\r\n  _keys['backspace'] = {code:8, shift: false};\r\n  _keys['tab']       = {code:9, shift: false};\r\n  _keys['ctrl']      = {code:17, shift: false};\r\n  _keys['alt']       = {code:18, shift: false};\r\n  _keys['delete']    = {code:46, shift: false};\r\n  _keys['pageup']    = {code:33, shift: false};\r\n  _keys['pagedown']  = {code:34, shift: false};\r\n  // symbols\r\n  _keys['=']     = {code:187, shift: false};\r\n  _keys['-']     = {code:189, shift: false};\r\n  _keys[']']     = {code:221, shift: false};\r\n  _keys['[']     = {code:219, shift: false};\r\n\r\n\r\n\r\n  var down = function(event) {handleEvent(event,'keydown');};\r\n  var up = function(event) {handleEvent(event,'keyup');};\r\n\r\n  // handle the actualy bound key with the event\r\n  var handleEvent = function(event,type) {\r\n    if (_bound[type][event.keyCode] !== undefined) {\r\n      var bound = _bound[type][event.keyCode];\r\n      for (var i = 0; i < bound.length; i++) {\r\n        if (bound[i].shift === undefined) {\r\n          bound[i].fn(event);\r\n        }\r\n        else if (bound[i].shift == true && event.shiftKey == true) {\r\n          bound[i].fn(event);\r\n        }\r\n        else if (bound[i].shift == false && event.shiftKey == false) {\r\n          bound[i].fn(event);\r\n        }\r\n      }\r\n\r\n      if (preventDefault == true) {\r\n        event.preventDefault();\r\n      }\r\n    }\r\n  };\r\n\r\n  // bind a key to a callback\r\n  _exportFunctions.bind = function(key, callback, type) {\r\n    if (type === undefined) {\r\n      type = 'keydown';\r\n    }\r\n    if (_keys[key] === undefined) {\r\n      throw new Error(\"unsupported key: \" + key);\r\n    }\r\n    if (_bound[type][_keys[key].code] === undefined) {\r\n      _bound[type][_keys[key].code] = [];\r\n    }\r\n    _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});\r\n  };\r\n\r\n\r\n  // bind all keys to a call back (demo purposes)\r\n  _exportFunctions.bindAll = function(callback, type) {\r\n    if (type === undefined) {\r\n      type = 'keydown';\r\n    }\r\n    for (var key in _keys) {\r\n      if (_keys.hasOwnProperty(key)) {\r\n        _exportFunctions.bind(key,callback,type);\r\n      }\r\n    }\r\n  };\r\n\r\n  // get the key label from an event\r\n  _exportFunctions.getKey = function(event) {\r\n    for (var key in _keys) {\r\n      if (_keys.hasOwnProperty(key)) {\r\n        if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {\r\n          return key;\r\n        }\r\n        else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {\r\n          return key;\r\n        }\r\n        else if (event.keyCode == _keys[key].code && key == 'shift') {\r\n          return key;\r\n        }\r\n      }\r\n    }\r\n    return \"unknown key, currently not supported\";\r\n  };\r\n\r\n  // unbind either a specific callback from a key or all of them (by leaving callback undefined)\r\n  _exportFunctions.unbind = function(key, callback, type) {\r\n    if (type === undefined) {\r\n      type = 'keydown';\r\n    }\r\n    if (_keys[key] === undefined) {\r\n      throw new Error(\"unsupported key: \" + key);\r\n    }\r\n    if (callback !== undefined) {\r\n      var newBindings = [];\r\n      var bound = _bound[type][_keys[key].code];\r\n      if (bound !== undefined) {\r\n        for (var i = 0; i < bound.length; i++) {\r\n          if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {\r\n            newBindings.push(_bound[type][_keys[key].code][i]);\r\n          }\r\n        }\r\n      }\r\n      _bound[type][_keys[key].code] = newBindings;\r\n    }\r\n    else {\r\n      _bound[type][_keys[key].code] = [];\r\n    }\r\n  };\r\n\r\n  // reset all bound variables.\r\n  _exportFunctions.reset = function() {\r\n    _bound = {keydown:{}, keyup:{}};\r\n  };\r\n\r\n  // unbind all listeners and reset all variables.\r\n  _exportFunctions.destroy = function() {\r\n    _bound = {keydown:{}, keyup:{}};\r\n    container.removeEventListener('keydown', down, true);\r\n    container.removeEventListener('keyup', up, true);\r\n  };\r\n\r\n  // create listeners.\r\n  container.addEventListener('keydown',down,true);\r\n  container.addEventListener('keyup',up,true);\r\n\r\n  // return the public functions.\r\n  return _exportFunctions;\r\n}\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n * @param {Element} container\n * @constructor Activator\n */\nfunction Activator(container) {\n  var _context, _context2;\n  this.active = false;\n  this.dom = {\n    container: container\n  };\n  this.dom.overlay = document.createElement(\"div\");\n  this.dom.overlay.className = \"vis-overlay\";\n  this.dom.container.appendChild(this.dom.overlay);\n  this.hammer = Hammer(this.dom.overlay);\n  this.hammer.on(\"tap\", _bindInstanceProperty(_context = this._onTapOverlay).call(_context, this));\n\n  // block all touch events (except tap)\n  var me = this;\n  var events = [\"tap\", \"doubletap\", \"press\", \"pinch\", \"pan\", \"panstart\", \"panmove\", \"panend\"];\n  _forEachInstanceProperty(events).call(events, function (event) {\n    me.hammer.on(event, function (event) {\n      event.stopPropagation();\n    });\n  });\n\n  // attach a click event to the window, in order to deactivate when clicking outside the timeline\n  if (document && document.body) {\n    this.onClick = function (event) {\n      if (!_hasParent(event.target, container)) {\n        me.deactivate();\n      }\n    };\n    document.body.addEventListener(\"click\", this.onClick);\n  }\n  if (this.keycharm !== undefined) {\n    this.keycharm.destroy();\n  }\n  this.keycharm = keycharm();\n\n  // keycharm listener only bounded when active)\n  this.escListener = _bindInstanceProperty(_context2 = this.deactivate).call(_context2, this);\n}\n\n// turn into an event emitter\nEmitter(Activator.prototype);\n\n// The currently active activator\nActivator.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator.prototype.destroy = function () {\n  this.deactivate();\n\n  // remove dom\n  this.dom.overlay.parentNode.removeChild(this.dom.overlay);\n\n  // remove global event listener\n  if (this.onClick) {\n    document.body.removeEventListener(\"click\", this.onClick);\n  }\n  // remove keycharm\n  if (this.keycharm !== undefined) {\n    this.keycharm.destroy();\n  }\n  this.keycharm = null;\n  // cleanup hammer instances\n  this.hammer.destroy();\n  this.hammer = null;\n  // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory)\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator.prototype.activate = function () {\n  var _context3;\n  // we allow only one active activator at a time\n  if (Activator.current) {\n    Activator.current.deactivate();\n  }\n  Activator.current = this;\n  this.active = true;\n  this.dom.overlay.style.display = \"none\";\n  availableUtils.addClassName(this.dom.container, \"vis-active\");\n  this.emit(\"change\");\n  this.emit(\"activate\");\n\n  // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n  // keyboard events on a 'change' event\n  _bindInstanceProperty(_context3 = this.keycharm).call(_context3, \"esc\", this.escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator.prototype.deactivate = function () {\n  if (Activator.current === this) {\n    Activator.current = null;\n  }\n  this.active = false;\n  this.dom.overlay.style.display = \"\";\n  availableUtils.removeClassName(this.dom.container, \"vis-active\");\n  this.keycharm.unbind(\"esc\", this.escListener);\n  this.emit(\"change\");\n  this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n * @param {Event}  event   The event\n * @private\n */\nActivator.prototype._onTapOverlay = function (event) {\n  // activate the container\n  this.activate();\n  event.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n *                    chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n  while (element) {\n    if (element === parent) {\n      return true;\n    }\n    element = element.parentNode;\n  }\n  return false;\n}\n\n/*\n * IMPORTANT: Locales for Moment has to be imported in the legacy and standalone\n * entry points. For the peer build it's users responsibility to do so.\n */\n\n// English\nconst en = {\n  current: \"current\",\n  time: \"time\",\n  deleteSelected: \"Delete selected\"\n};\nconst en_EN = en;\nconst en_US = en;\n\n// Italiano\nconst it = {\n  current: \"attuale\",\n  time: \"tempo\",\n  deleteSelected: \"Cancella la selezione\"\n};\nconst it_IT = it;\nconst it_CH = it;\n\n// Dutch\nconst nl = {\n  current: \"huidige\",\n  time: \"tijd\",\n  deleteSelected: \"Selectie verwijderen\"\n};\nconst nl_NL = nl;\nconst nl_BE = nl;\n\n// German\nconst de = {\n  current: \"Aktuelle\",\n  time: \"Zeit\",\n  deleteSelected: \"L\\u00f6sche Auswahl\"\n};\nconst de_DE = de;\nconst de_CH = de;\n\n// French\nconst fr = {\n  current: \"actuel\",\n  time: \"heure\",\n  deleteSelected: \"Effacer la selection\"\n};\nconst fr_FR = fr;\nconst fr_CA = fr;\nconst fr_BE = fr;\nconst fr_CH = fr;\n\n// Espanol\nconst es = {\n  current: \"actual\",\n  time: \"hora\",\n  deleteSelected: \"Eliminar selecci\\u00f3n\"\n};\nconst es_ES = es;\n\n// Ukrainian\nconst uk = {\n  current: \"поточний\",\n  time: \"час\",\n  deleteSelected: \"Видалити обране\"\n};\nconst uk_UA = uk;\n\n// Russian\nconst ru = {\n  current: \"текущее\",\n  time: \"время\",\n  deleteSelected: \"Удалить выбранное\"\n};\nconst ru_RU = ru;\n\n// Polish\nconst pl = {\n  current: \"aktualny\",\n  time: \"czas\",\n  deleteSelected: \"Usuń wybrane\"\n};\nconst pl_PL = pl;\n\n// Portuguese\nconst pt = {\n  current: \"atual\",\n  time: \"data\",\n  deleteSelected: \"Apagar selecionado\"\n};\nconst pt_BR = pt;\nconst pt_PT = pt;\n\n// Turkish\nconst tr = {\n  current: \"güncel\",\n  time: \"zaman\",\n  deleteSelected: \"Seçileni sil\"\n};\nconst tr_TR = tr;\n\n// Japanese\nconst ja = {\n  current: \"現在\",\n  time: \"時刻\",\n  deleteSelected: \"選択されたものを削除\"\n};\nconst ja_JP = ja;\n\n// Swedish\nconst sv = {\n  current: \"nuvarande\",\n  time: \"tid\",\n  deleteSelected: \"Radera valda\"\n};\nconst sv_SE = sv;\n\n// Norwegian\nconst nb = {\n  current: \"nåværende\",\n  time: \"tid\",\n  deleteSelected: \"Slett valgte\"\n};\nconst nb_NO = nb;\nconst nn = nb;\nconst nn_NO = nb;\n\n// Lithuanian\nconst lt = {\n  current: \"einamas\",\n  time: \"laikas\",\n  deleteSelected: \"Pašalinti pasirinktą\"\n};\nconst lt_LT = lt;\nconst locales = {\n  en,\n  en_EN,\n  en_US,\n  it,\n  it_IT,\n  it_CH,\n  nl,\n  nl_NL,\n  nl_BE,\n  de,\n  de_DE,\n  de_CH,\n  fr,\n  fr_FR,\n  fr_CA,\n  fr_BE,\n  fr_CH,\n  es,\n  es_ES,\n  uk,\n  uk_UA,\n  ru,\n  ru_RU,\n  pl,\n  pl_PL,\n  pt,\n  pt_BR,\n  pt_PT,\n  tr,\n  tr_TR,\n  ja,\n  ja_JP,\n  lt,\n  lt_LT,\n  sv,\n  sv_SE,\n  nb,\n  nn,\n  nb_NO,\n  nn_NO\n};\n\n/** A custom time bar */\nclass CustomTime extends Component {\n  /**\n   * @param {{range: Range, dom: Object}} body\n   * @param {Object} [options]        Available parameters:\n   *                                  {number | string} id\n   *                                  {string} locales\n   *                                  {string} locale\n   * @constructor CustomTime\n   * @extends Component\n   */\n  constructor(body, options) {\n    var _context;\n    super();\n    this.body = body;\n\n    // default options\n    this.defaultOptions = {\n      moment: moment$2,\n      locales,\n      locale: \"en\",\n      id: undefined,\n      title: undefined\n    };\n    this.options = availableUtils.extend({}, this.defaultOptions);\n    this.setOptions(options);\n    this.options.locales = availableUtils.extend({}, locales, this.options.locales);\n    const defaultLocales = this.defaultOptions.locales[this.defaultOptions.locale];\n    _forEachInstanceProperty(_context = _Object$keys(this.options.locales)).call(_context, locale => {\n      this.options.locales[locale] = availableUtils.extend({}, defaultLocales, this.options.locales[locale]);\n    });\n    if (options && options.time != null) {\n      this.customTime = options.time;\n    } else {\n      this.customTime = new Date();\n    }\n    this.eventParams = {}; // stores state parameters while dragging the bar\n\n    // create the DOM\n    this._create();\n  }\n\n  /**\n   * Set options for the component. Options will be merged in current options.\n   * @param {Object} options  Available parameters:\n   *                                  {number | string} id\n   *                                  {string} locales\n   *                                  {string} locale\n   */\n  setOptions(options) {\n    if (options) {\n      // copy all options that we know\n      availableUtils.selectiveExtend([\"moment\", \"locale\", \"locales\", \"id\", \"title\", \"rtl\", \"snap\"], this.options, options);\n    }\n  }\n\n  /**\n   * Create the DOM for the custom time\n   * @private\n   */\n  _create() {\n    var _context2, _context3, _context4;\n    const bar = document.createElement(\"div\");\n    bar[\"custom-time\"] = this;\n    bar.className = \"vis-custom-time \".concat(this.options.id || \"\");\n    bar.style.position = \"absolute\";\n    bar.style.top = \"0px\";\n    bar.style.height = \"100%\";\n    this.bar = bar;\n    const drag = document.createElement(\"div\");\n    drag.style.position = \"relative\";\n    drag.style.top = \"0px\";\n    if (this.options.rtl) {\n      drag.style.right = \"-10px\";\n    } else {\n      drag.style.left = \"-10px\";\n    }\n    drag.style.height = \"100%\";\n    drag.style.width = \"20px\";\n\n    /**\n     *\n     * @param {WheelEvent} e\n     */\n    function onMouseWheel(e) {\n      this.body.range._onMouseWheel(e);\n    }\n    if (drag.addEventListener) {\n      // IE9, Chrome, Safari, Opera\n      drag.addEventListener(\"mousewheel\", _bindInstanceProperty(onMouseWheel).call(onMouseWheel, this), false);\n      // Firefox\n      drag.addEventListener(\"DOMMouseScroll\", _bindInstanceProperty(onMouseWheel).call(onMouseWheel, this), false);\n    } else {\n      // IE 6/7/8\n      drag.attachEvent(\"onmousewheel\", _bindInstanceProperty(onMouseWheel).call(onMouseWheel, this));\n    }\n    bar.appendChild(drag);\n    // attach event listeners\n    this.hammer = new Hammer(drag);\n    this.hammer.on(\"panstart\", _bindInstanceProperty(_context2 = this._onDragStart).call(_context2, this));\n    this.hammer.on(\"panmove\", _bindInstanceProperty(_context3 = this._onDrag).call(_context3, this));\n    this.hammer.on(\"panend\", _bindInstanceProperty(_context4 = this._onDragEnd).call(_context4, this));\n    this.hammer.get(\"pan\").set({\n      threshold: 5,\n      direction: Hammer.DIRECTION_ALL\n    });\n    // delay addition on item click for trackpads...\n    this.hammer.get(\"press\").set({\n      time: 10000\n    });\n  }\n\n  /**\n   * Destroy the CustomTime bar\n   */\n  destroy() {\n    this.hide();\n    this.hammer.destroy();\n    this.hammer = null;\n    this.body = null;\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    const parent = this.body.dom.backgroundVertical;\n    if (this.bar.parentNode != parent) {\n      // attach to the dom\n      if (this.bar.parentNode) {\n        this.bar.parentNode.removeChild(this.bar);\n      }\n      parent.appendChild(this.bar);\n    }\n    const x = this.body.util.toScreen(this.customTime);\n    let locale = this.options.locales[this.options.locale];\n    if (!locale) {\n      if (!this.warned) {\n        console.warn(\"WARNING: options.locales['\".concat(this.options.locale, \"'] not found. See https://visjs.github.io/vis-timeline/docs/timeline/#Localization\"));\n        this.warned = true;\n      }\n      locale = this.options.locales[\"en\"]; // fall back on english when not available\n    }\n    let title = this.options.title;\n    // To hide the title completely use empty string ''.\n    if (title === undefined) {\n      var _context5;\n      title = _concatInstanceProperty(_context5 = \"\".concat(locale.time, \": \")).call(_context5, this.options.moment(this.customTime).format(\"dddd, MMMM Do YYYY, H:mm:ss\"));\n      title = title.charAt(0).toUpperCase() + title.substring(1);\n    } else if (typeof title === \"function\") {\n      title = title.call(this, this.customTime);\n    }\n    this.options.rtl ? this.bar.style.right = \"\".concat(x, \"px\") : this.bar.style.left = \"\".concat(x, \"px\");\n    this.bar.title = title;\n    return false;\n  }\n\n  /**\n   * Remove the CustomTime from the DOM\n   */\n  hide() {\n    // remove the line from the DOM\n    if (this.bar.parentNode) {\n      this.bar.parentNode.removeChild(this.bar);\n    }\n  }\n\n  /**\n   * Set custom time.\n   * @param {Date | number | string} time\n   */\n  setCustomTime(time) {\n    this.customTime = availableUtils.convert(time, \"Date\");\n    this.redraw();\n  }\n\n  /**\n   * Retrieve the current custom time.\n   * @return {Date} customTime\n   */\n  getCustomTime() {\n    return new Date(this.customTime.valueOf());\n  }\n\n  /**\n   * Set custom marker.\n   * @param {string} [title] Title of the custom marker\n   * @param {boolean} [editable] Make the custom marker editable.\n   */\n  setCustomMarker(title, editable) {\n    if (this.marker) {\n      this.bar.removeChild(this.marker);\n    }\n    this.marker = document.createElement(\"div\");\n    this.marker.className = \"vis-custom-time-marker\";\n    this.marker.innerHTML = availableUtils.xss(title);\n    this.marker.style.position = \"absolute\";\n    if (editable) {\n      var _context6;\n      this.marker.setAttribute(\"contenteditable\", \"true\");\n      this.marker.addEventListener(\"pointerdown\", () => {\n        this.marker.focus();\n      });\n      this.marker.addEventListener(\"input\", _bindInstanceProperty(_context6 = this._onMarkerChange).call(_context6, this));\n      // The editable div element has no change event, so here emulates the change event.\n      this.marker.title = title;\n      this.marker.addEventListener(\"blur\", event => {\n        if (this.title != event.target.innerHTML) {\n          this._onMarkerChanged(event);\n          this.title = event.target.innerHTML;\n        }\n      });\n    }\n    this.bar.appendChild(this.marker);\n  }\n\n  /**\n   * Set custom title.\n   * @param {Date | number | string} title\n   */\n  setCustomTitle(title) {\n    this.options.title = title;\n  }\n\n  /**\n   * Start moving horizontally\n   * @param {Event} event\n   * @private\n   */\n  _onDragStart(event) {\n    this.eventParams.dragging = true;\n    this.eventParams.customTime = this.customTime;\n    event.stopPropagation();\n  }\n\n  /**\n   * Perform moving operating.\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (!this.eventParams.dragging) return;\n    let deltaX = this.options.rtl ? -1 * event.deltaX : event.deltaX;\n    const x = this.body.util.toScreen(this.eventParams.customTime) + deltaX;\n    const time = this.body.util.toTime(x);\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    const snap = this.options.snap;\n    const snappedTime = snap ? snap(time, scale, step) : time;\n    this.setCustomTime(snappedTime);\n\n    // fire a timechange event\n    this.body.emitter.emit(\"timechange\", {\n      id: this.options.id,\n      time: new Date(this.customTime.valueOf()),\n      event\n    });\n    event.stopPropagation();\n  }\n\n  /**\n   * Stop moving operating.\n   * @param {Event} event\n   * @private\n   */\n  _onDragEnd(event) {\n    if (!this.eventParams.dragging) return;\n\n    // fire a timechanged event\n    this.body.emitter.emit(\"timechanged\", {\n      id: this.options.id,\n      time: new Date(this.customTime.valueOf()),\n      event\n    });\n    event.stopPropagation();\n  }\n\n  /**\n   * Perform input operating.\n   * @param {Event} event\n   * @private\n   */\n  _onMarkerChange(event) {\n    this.body.emitter.emit(\"markerchange\", {\n      id: this.options.id,\n      title: event.target.innerHTML,\n      event\n    });\n    event.stopPropagation();\n  }\n\n  /**\n   * Perform change operating.\n   * @param {Event} event\n   * @private\n   */\n  _onMarkerChanged(event) {\n    this.body.emitter.emit(\"markerchanged\", {\n      id: this.options.id,\n      title: event.target.innerHTML,\n      event\n    });\n    event.stopPropagation();\n  }\n\n  /**\n   * Find a custom time from an event target:\n   * searches for the attribute 'custom-time' in the event target's element tree\n   * @param {Event} event\n   * @return {CustomTime | null} customTime\n   */\n  static customTimeFromTarget(event) {\n    let target = event.target;\n    while (target) {\n      if (Object.prototype.hasOwnProperty.call(target, \"custom-time\")) {\n        return target[\"custom-time\"];\n      }\n      target = target.parentNode;\n    }\n    return null;\n  }\n}\n\n/**\n * Create a timeline visualization\n * @constructor Core\n */\nclass Core {\n  /**\n   * Create the main DOM for the Core: a root panel containing left, right,\n   * top, bottom, content, and background panel.\n   * @param {Element} container  The container element where the Core will\n   *                             be attached.\n   * @protected\n   */\n  _create(container) {\n    var _context, _context2, _context3;\n    this.dom = {};\n    this.dom.container = container;\n    this.dom.container.style.position = \"relative\";\n    this.dom.root = document.createElement(\"div\");\n    this.dom.background = document.createElement(\"div\");\n    this.dom.backgroundVertical = document.createElement(\"div\");\n    this.dom.backgroundHorizontal = document.createElement(\"div\");\n    this.dom.centerContainer = document.createElement(\"div\");\n    this.dom.leftContainer = document.createElement(\"div\");\n    this.dom.rightContainer = document.createElement(\"div\");\n    this.dom.center = document.createElement(\"div\");\n    this.dom.left = document.createElement(\"div\");\n    this.dom.right = document.createElement(\"div\");\n    this.dom.top = document.createElement(\"div\");\n    this.dom.bottom = document.createElement(\"div\");\n    this.dom.shadowTop = document.createElement(\"div\");\n    this.dom.shadowBottom = document.createElement(\"div\");\n    this.dom.shadowTopLeft = document.createElement(\"div\");\n    this.dom.shadowBottomLeft = document.createElement(\"div\");\n    this.dom.shadowTopRight = document.createElement(\"div\");\n    this.dom.shadowBottomRight = document.createElement(\"div\");\n    this.dom.rollingModeBtn = document.createElement(\"div\");\n    this.dom.loadingScreen = document.createElement(\"div\");\n    this.dom.root.className = \"vis-timeline\";\n    this.dom.background.className = \"vis-panel vis-background\";\n    this.dom.backgroundVertical.className = \"vis-panel vis-background vis-vertical\";\n    this.dom.backgroundHorizontal.className = \"vis-panel vis-background vis-horizontal\";\n    this.dom.centerContainer.className = \"vis-panel vis-center\";\n    this.dom.leftContainer.className = \"vis-panel vis-left\";\n    this.dom.rightContainer.className = \"vis-panel vis-right\";\n    this.dom.top.className = \"vis-panel vis-top\";\n    this.dom.bottom.className = \"vis-panel vis-bottom\";\n    this.dom.left.className = \"vis-content\";\n    this.dom.center.className = \"vis-content\";\n    this.dom.right.className = \"vis-content\";\n    this.dom.shadowTop.className = \"vis-shadow vis-top\";\n    this.dom.shadowBottom.className = \"vis-shadow vis-bottom\";\n    this.dom.shadowTopLeft.className = \"vis-shadow vis-top\";\n    this.dom.shadowBottomLeft.className = \"vis-shadow vis-bottom\";\n    this.dom.shadowTopRight.className = \"vis-shadow vis-top\";\n    this.dom.shadowBottomRight.className = \"vis-shadow vis-bottom\";\n    this.dom.rollingModeBtn.className = \"vis-rolling-mode-btn\";\n    this.dom.loadingScreen.className = \"vis-loading-screen\";\n    this.dom.root.appendChild(this.dom.background);\n    this.dom.root.appendChild(this.dom.backgroundVertical);\n    this.dom.root.appendChild(this.dom.backgroundHorizontal);\n    this.dom.root.appendChild(this.dom.centerContainer);\n    this.dom.root.appendChild(this.dom.leftContainer);\n    this.dom.root.appendChild(this.dom.rightContainer);\n    this.dom.root.appendChild(this.dom.top);\n    this.dom.root.appendChild(this.dom.bottom);\n    this.dom.root.appendChild(this.dom.rollingModeBtn);\n    this.dom.centerContainer.appendChild(this.dom.center);\n    this.dom.leftContainer.appendChild(this.dom.left);\n    this.dom.rightContainer.appendChild(this.dom.right);\n    this.dom.centerContainer.appendChild(this.dom.shadowTop);\n    this.dom.centerContainer.appendChild(this.dom.shadowBottom);\n    this.dom.leftContainer.appendChild(this.dom.shadowTopLeft);\n    this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft);\n    this.dom.rightContainer.appendChild(this.dom.shadowTopRight);\n    this.dom.rightContainer.appendChild(this.dom.shadowBottomRight);\n\n    // size properties of each of the panels\n    this.props = {\n      root: {},\n      background: {},\n      centerContainer: {},\n      leftContainer: {},\n      rightContainer: {},\n      center: {},\n      left: {},\n      right: {},\n      top: {},\n      bottom: {},\n      border: {},\n      scrollTop: 0,\n      scrollTopMin: 0\n    };\n    this.on(\"rangechange\", () => {\n      if (this.initialDrawDone === true) {\n        this._redraw();\n      }\n    });\n    this.on(\"rangechanged\", () => {\n      if (!this.initialRangeChangeDone) {\n        this.initialRangeChangeDone = true;\n      }\n    });\n    this.on(\"touch\", _bindInstanceProperty(_context = this._onTouch).call(_context, this));\n    this.on(\"panmove\", _bindInstanceProperty(_context2 = this._onDrag).call(_context2, this));\n    const me = this;\n    this._origRedraw = _bindInstanceProperty(_context3 = this._redraw).call(_context3, this);\n    this._redraw = availableUtils.throttle(this._origRedraw);\n    this.on(\"_change\", properties => {\n      if (me.itemSet && me.itemSet.initialItemSetDrawn && properties && properties.queue == true) {\n        me._redraw();\n      } else {\n        me._origRedraw();\n      }\n    });\n\n    // create event listeners for all interesting events, these events will be\n    // emitted via emitter\n    this.hammer = new Hammer(this.dom.root);\n    const pinchRecognizer = this.hammer.get(\"pinch\").set({\n      enable: true\n    });\n    pinchRecognizer && disablePreventDefaultVertically(pinchRecognizer);\n    this.hammer.get(\"pan\").set({\n      threshold: 5,\n      direction: Hammer.DIRECTION_ALL\n    });\n    this.timelineListeners = {};\n    const events = [\"tap\", \"doubletap\", \"press\", \"pinch\", \"pan\", \"panstart\", \"panmove\", \"panend\"\n    // TODO: cleanup\n    //'touch', 'pinch',\n    //'tap', 'doubletap', 'hold',\n    //'dragstart', 'drag', 'dragend',\n    //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox\n    ];\n    _forEachInstanceProperty(events).call(events, type => {\n      const listener = event => {\n        if (me.isActive()) {\n          me.emit(type, event);\n        }\n      };\n      me.hammer.on(type, listener);\n      me.timelineListeners[type] = listener;\n    });\n\n    // emulate a touch event (emitted before the start of a pan, pinch, tap, or press)\n    onTouch(this.hammer, event => {\n      me.emit(\"touch\", event);\n    });\n\n    // emulate a release event (emitted after a pan, pinch, tap, or press)\n    onRelease(this.hammer, event => {\n      me.emit(\"release\", event);\n    });\n\n    /**\n     *\n     * @param {WheelEvent} event\n     */\n    function onMouseWheel(event) {\n      // Only allow scroll-wheel interaction if timeline is active and clickToUse is set to true.\n      if (!this.isActive()) return;\n      this.emit(\"mousewheel\", event);\n\n      // Prevent scrolling when zooming (no zoom key, or pressing zoom key)\n      if (this.options.preferZoom) {\n        // Return if key not configured OR is currently pressed (zoom only).\n        // TODO: Possible Bug: Should it not be the inverse behaviour? Aka. if pressed should allow user to scroll?\n        if (!this.options.zoomKey || event[this.options.zoomKey]) return;\n      } else {\n        // Return if key configured AND currently pressed\n        if (this.options.zoomKey && event[this.options.zoomKey]) return;\n      }\n\n      // Don't preventDefault if you can't scroll\n      if (!this.options.verticalScroll && !this.options.horizontalScroll) return;\n\n      // deltaX and deltaY normalization from jquery.mousewheel.js\n      let deltaX = 0;\n      let deltaY = 0;\n\n      // Old school scrollwheel delta\n      if (\"detail\" in event) deltaY = event.detail * -1;\n      if (\"wheelDelta\" in event) deltaY = event.wheelDelta;\n      if (\"wheelDeltaY\" in event) deltaY = event.wheelDeltaY;\n      if (\"wheelDeltaX\" in event) deltaX = event.wheelDeltaX * -1;\n\n      // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n      if (\"axis\" in event && event.axis === event.HORIZONTAL_AXIS) {\n        deltaX = deltaY * -1;\n        deltaY = 0;\n      }\n\n      // New school wheel delta (wheel event)\n      if (\"deltaY\" in event) {\n        deltaY = event.deltaY * -1;\n      }\n      if (\"deltaX\" in event) {\n        deltaX = event.deltaX;\n      }\n\n      // Reasonable default wheel deltas\n      var LINE_HEIGHT = 40;\n      var PAGE_HEIGHT = 800;\n\n      // Normalize deltas\n      if (event.deltaMode) {\n        if (event.deltaMode === 1) {\n          // delta in LINE units\n          deltaX *= LINE_HEIGHT;\n          deltaY *= LINE_HEIGHT;\n        } else {\n          // delta in PAGE units\n          deltaX *= LINE_HEIGHT;\n          deltaY *= PAGE_HEIGHT;\n        }\n      }\n\n      // Vertical scroll preferred unless 'horizontalScrollKey' is configured and currently pressed.\n      const isVerticalScrollingPreferred = this.options.verticalScroll;\n      const isCurrentlyScrollingWithVerticalScrollWheel = Math.abs(deltaY) >= Math.abs(deltaX);\n      const isHorizontalScrollKeyConfiguredAndPressed = this.options.horizontalScroll && this.options.horizontalScrollKey && event[this.options.horizontalScrollKey];\n      if (isVerticalScrollingPreferred && isCurrentlyScrollingWithVerticalScrollWheel && !isHorizontalScrollKeyConfiguredAndPressed) {\n        const current = this.props.scrollTop;\n        const adjusted = current + deltaY;\n        const newScrollTop = this._setScrollTop(adjusted);\n        if (newScrollTop !== current) {\n          this._redraw();\n          this.emit(\"scroll\", event);\n\n          // Prevent default actions caused by mouse wheel\n          // (else the page and timeline both scroll)\n          event.preventDefault();\n        }\n        return;\n      }\n\n      // If option 'verticalScroll' disabled or 'horizontalScroll' is configured\n      if (this.options.horizontalScroll) {\n        this.range.stopRolling();\n\n        // Depending on the mouse wheel used chose the delta (some mice have the hardware for both)\n        const delta = isCurrentlyScrollingWithVerticalScrollWheel ? deltaY : deltaX;\n\n        // Calculate a single scroll jump relative to the range scale\n        let diff = delta / 120 * (this.range.end - this.range.start) / 20;\n\n        // Invert scroll direction\n        //  ...unless the user uses a horizontal mouse-wheel as found on the \"Logi Master\" series.\n        // In other words only invert the direction when a vertical scroll-wheel is used.\n        // Reason: Usually the user controls this behaviour via the driver software and it isn't linked to the vertical-scroll behaviour.\n        if (this.options.horizontalScrollInvert && isCurrentlyScrollingWithVerticalScrollWheel) diff = -diff;\n\n        // calculate new start and end\n        const newStart = this.range.start + diff;\n        const newEnd = this.range.end + diff;\n        const options = {\n          animation: false,\n          byUser: true,\n          event: event\n        };\n        this.range.setRange(newStart, newEnd, options);\n        event.preventDefault();\n\n        // Here in case of any future behaviour following after\n        return;\n      }\n    }\n\n    // Add modern wheel event listener\n    const wheelType = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" // Modern browsers support \"wheel\"\n    : document.onmousewheel !== undefined ? \"mousewheel\" // Webkit and IE support at least \"mousewheel\"\n    :\n    // DOMMouseScroll - Older Firefox versions use \"DOMMouseScroll\"\n    // onmousewheel - All the use \"onmousewheel\"\n    this.dom.centerContainer.addEventListener ? \"DOMMouseScroll\" : \"onmousewheel\";\n    this.dom.top.addEventListener ? \"DOMMouseScroll\" : \"onmousewheel\";\n    this.dom.bottom.addEventListener ? \"DOMMouseScroll\" : \"onmousewheel\";\n    this.dom.centerContainer.addEventListener(wheelType, _bindInstanceProperty(onMouseWheel).call(onMouseWheel, this), false);\n    this.dom.top.addEventListener(wheelType, _bindInstanceProperty(onMouseWheel).call(onMouseWheel, this), false);\n    this.dom.bottom.addEventListener(wheelType, _bindInstanceProperty(onMouseWheel).call(onMouseWheel, this), false);\n\n    /**\n     *\n     * @param {scroll} event\n     */\n    function onMouseScrollSide(event) {\n      if (!me.options.verticalScroll) return;\n      event.preventDefault();\n      if (me.isActive()) {\n        const adjusted = -event.target.scrollTop;\n        me._setScrollTop(adjusted);\n        me._redraw();\n        me.emit(\"scrollSide\", event);\n      }\n    }\n    this.dom.left.parentNode.addEventListener(\"scroll\", _bindInstanceProperty(onMouseScrollSide).call(onMouseScrollSide, this));\n    this.dom.right.parentNode.addEventListener(\"scroll\", _bindInstanceProperty(onMouseScrollSide).call(onMouseScrollSide, this));\n    let itemAddedToTimeline = false;\n\n    /**\n     *\n     * @param {dragover} event\n     * @returns {boolean}\n     */\n    function handleDragOver(event) {\n      var _context4;\n      if (event.preventDefault) {\n        me.emit(\"dragover\", me.getEventProperties(event));\n        event.preventDefault(); // Necessary. Allows us to drop.\n      }\n\n      // make sure your target is a timeline element\n      if (!(_indexOfInstanceProperty(_context4 = event.target.className).call(_context4, \"timeline\") > -1)) return;\n\n      // make sure only one item is added every time you're over the timeline\n      if (itemAddedToTimeline) return;\n      event.dataTransfer.dropEffect = \"move\";\n      itemAddedToTimeline = true;\n      return false;\n    }\n\n    /**\n     *\n     * @param {drop} event\n     * @returns {boolean}\n     */\n    function handleDrop(event) {\n      // prevent redirect to blank page - Firefox\n      if (event.preventDefault) {\n        event.preventDefault();\n      }\n      if (event.stopPropagation) {\n        event.stopPropagation();\n      }\n      // return when dropping non-timeline items\n      try {\n        var itemData = JSON.parse(event.dataTransfer.getData(\"text\"));\n        if (!itemData || !itemData.content) return;\n      } catch (err) {\n        return false;\n      }\n      itemAddedToTimeline = false;\n      event.center = {\n        x: event.clientX,\n        y: event.clientY\n      };\n      if (itemData.target !== \"item\") {\n        me.itemSet._onAddItem(event);\n      } else {\n        me.itemSet._onDropObjectOnItem(event);\n      }\n      me.emit(\"drop\", me.getEventProperties(event));\n      return false;\n    }\n    this.dom.center.addEventListener(\"dragover\", _bindInstanceProperty(handleDragOver).call(handleDragOver, this), false);\n    this.dom.center.addEventListener(\"drop\", _bindInstanceProperty(handleDrop).call(handleDrop, this), false);\n    this.customTimes = [];\n\n    // store state information needed for touch events\n    this.touch = {};\n    this.redrawCount = 0;\n    this.initialDrawDone = false;\n    this.initialRangeChangeDone = false;\n\n    // attach the root panel to the provided container\n    if (!container) throw new Error(\"No container provided\");\n    container.appendChild(this.dom.root);\n    container.appendChild(this.dom.loadingScreen);\n  }\n\n  /**\n   * Set options. Options will be passed to all components loaded in the Timeline.\n   * @param {Object} [options]\n   *                           {String} orientation\n   *                              Vertical orientation for the Timeline,\n   *                              can be 'bottom' (default) or 'top'.\n   *                           {string | number} width\n   *                              Width for the timeline, a number in pixels or\n   *                              a css string like '1000px' or '75%'. '100%' by default.\n   *                           {string | number} height\n   *                              Fixed height for the Timeline, a number in pixels or\n   *                              a css string like '400px' or '75%'. If undefined,\n   *                              The Timeline will automatically size such that\n   *                              its contents fit.\n   *                           {string | number} minHeight\n   *                              Minimum height for the Timeline, a number in pixels or\n   *                              a css string like '400px' or '75%'.\n   *                           {string | number} maxHeight\n   *                              Maximum height for the Timeline, a number in pixels or\n   *                              a css string like '400px' or '75%'.\n   *                           {number | Date | string} start\n   *                              Start date for the visible window\n   *                           {number | Date | string} end\n   *                              End date for the visible window\n   */\n  setOptions(options) {\n    var _context7;\n    if (options) {\n      // copy the known options\n      const fields = [\"width\", \"height\", \"minHeight\", \"maxHeight\", \"autoResize\", \"start\", \"end\", \"clickToUse\", \"dataAttributes\", \"hiddenDates\", \"locale\", \"locales\", \"moment\", \"preferZoom\", \"rtl\", \"zoomKey\", \"horizontalScroll\", \"horizontalScrollKey\", \"horizontalScrollInvert\", \"verticalScroll\", \"longSelectPressTime\", \"snap\"];\n      availableUtils.selectiveExtend(fields, this.options, options);\n      this.dom.rollingModeBtn.style.visibility = \"hidden\";\n      if (this.options.rtl) {\n        this.dom.container.style.direction = \"rtl\";\n        this.dom.backgroundVertical.className = \"vis-panel vis-background vis-vertical-rtl\";\n      }\n      if (this.options.verticalScroll) {\n        if (this.options.rtl) {\n          this.dom.rightContainer.className = \"vis-panel vis-right vis-vertical-scroll\";\n        } else {\n          this.dom.leftContainer.className = \"vis-panel vis-left vis-vertical-scroll\";\n        }\n      }\n      if (typeof this.options.orientation !== \"object\") {\n        this.options.orientation = {\n          item: undefined,\n          axis: undefined\n        };\n      }\n      if (\"orientation\" in options) {\n        if (typeof options.orientation === \"string\") {\n          this.options.orientation = {\n            item: options.orientation,\n            axis: options.orientation\n          };\n        } else if (typeof options.orientation === \"object\") {\n          if (\"item\" in options.orientation) {\n            this.options.orientation.item = options.orientation.item;\n          }\n          if (\"axis\" in options.orientation) {\n            this.options.orientation.axis = options.orientation.axis;\n          }\n        }\n      }\n      if (this.options.orientation.axis === \"both\") {\n        if (!this.timeAxis2) {\n          const timeAxis2 = this.timeAxis2 = new TimeAxis(this.body, this.options);\n          timeAxis2.setOptions = options => {\n            const _options = options ? availableUtils.extend({}, options) : {};\n            _options.orientation = \"top\"; // override the orientation option, always top\n            TimeAxis.prototype.setOptions.call(timeAxis2, _options);\n          };\n          this.components.push(timeAxis2);\n        }\n      } else {\n        if (this.timeAxis2) {\n          var _context5;\n          const index = _indexOfInstanceProperty(_context5 = this.components).call(_context5, this.timeAxis2);\n          if (index !== -1) {\n            var _context6;\n            _spliceInstanceProperty(_context6 = this.components).call(_context6, index, 1);\n          }\n          this.timeAxis2.destroy();\n          this.timeAxis2 = null;\n        }\n      }\n\n      // if the graph2d's drawPoints is a function delegate the callback to the onRender property\n      if (typeof options.drawPoints == \"function\") {\n        options.drawPoints = {\n          onRender: options.drawPoints\n        };\n      }\n      if (\"hiddenDates\" in this.options) {\n        convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates);\n      }\n      if (\"clickToUse\" in options) {\n        if (options.clickToUse) {\n          if (!this.activator) {\n            this.activator = new Activator(this.dom.root);\n          }\n        } else {\n          if (this.activator) {\n            this.activator.destroy();\n            delete this.activator;\n          }\n        }\n      }\n\n      // enable/disable autoResize\n      this._initAutoResize();\n    }\n\n    // propagate options to all components\n    _forEachInstanceProperty(_context7 = this.components).call(_context7, component => component.setOptions(options));\n\n    // enable/disable configure\n    if (\"configure\" in options) {\n      var _context8;\n      if (!this.configurator) {\n        this.configurator = this._createConfigurator();\n      }\n      this.configurator.setOptions(options.configure);\n\n      // collect the settings of all components, and pass them to the configuration system\n      const appliedOptions = availableUtils.deepExtend({}, this.options);\n      _forEachInstanceProperty(_context8 = this.components).call(_context8, component => {\n        availableUtils.deepExtend(appliedOptions, component.options);\n      });\n      this.configurator.setModuleOptions({\n        global: appliedOptions\n      });\n    }\n    this._redraw();\n  }\n\n  /**\n   * Returns true when the Timeline is active.\n   * @returns {boolean}\n   */\n  isActive() {\n    return !this.activator || this.activator.active;\n  }\n\n  /**\n   * Destroy the Core, clean up all DOM elements and event listeners.\n   */\n  destroy() {\n    var _context9;\n    // unbind datasets\n    this.setItems(null);\n    this.setGroups(null);\n\n    // remove all event listeners\n    this.off();\n\n    // stop checking for changed size\n    this._stopAutoResize();\n\n    // remove from DOM\n    if (this.dom.root.parentNode) {\n      this.dom.root.parentNode.removeChild(this.dom.root);\n    }\n    this.dom = null;\n\n    // remove Activator\n    if (this.activator) {\n      this.activator.destroy();\n      delete this.activator;\n    }\n\n    // cleanup hammer touch events\n    for (const event in this.timelineListeners) {\n      if (Object.prototype.hasOwnProperty.call(this.timelineListeners, event)) {\n        delete this.timelineListeners[event];\n      }\n    }\n    this.timelineListeners = null;\n    this.hammer && this.hammer.destroy();\n    this.hammer = null;\n\n    // give all components the opportunity to cleanup\n    _forEachInstanceProperty(_context9 = this.components).call(_context9, component => component.destroy());\n    this.body = null;\n  }\n\n  /**\n   * Set a custom time bar\n   * @param {Date} time\n   * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted.\n   */\n  setCustomTime(time, id) {\n    var _context0;\n    const customTimes = _filterInstanceProperty(_context0 = this.customTimes).call(_context0, component => id === component.options.id);\n    if (customTimes.length === 0) {\n      throw new Error(\"No custom time bar found with id \".concat(_JSON$stringify(id)));\n    }\n    if (customTimes.length > 0) {\n      customTimes[0].setCustomTime(time);\n    }\n  }\n\n  /**\n   * Retrieve the current custom time.\n   * @param {number} [id=undefined]    Id of the custom time bar.\n   * @return {Date | undefined} customTime\n   */\n  getCustomTime(id) {\n    var _context1;\n    const customTimes = _filterInstanceProperty(_context1 = this.customTimes).call(_context1, component => component.options.id === id);\n    if (customTimes.length === 0) {\n      throw new Error(\"No custom time bar found with id \".concat(_JSON$stringify(id)));\n    }\n    return customTimes[0].getCustomTime();\n  }\n\n  /**\n   * Set a custom marker for the custom time bar.\n   * @param {string} [title] Title of the custom marker.\n   * @param {number} [id=undefined] Id of the custom marker.\n   * @param {boolean} [editable=false] Make the custom marker editable.\n   */\n  setCustomTimeMarker(title, id, editable) {\n    var _context10;\n    const customTimes = _filterInstanceProperty(_context10 = this.customTimes).call(_context10, component => component.options.id === id);\n    if (customTimes.length === 0) {\n      throw new Error(\"No custom time bar found with id \".concat(_JSON$stringify(id)));\n    }\n    if (customTimes.length > 0) {\n      customTimes[0].setCustomMarker(title, editable);\n    }\n  }\n\n  /**\n   * Set a custom title for the custom time bar.\n   * @param {string} [title] Custom title\n   * @param {number} [id=undefined]    Id of the custom time bar.\n   * @returns {*}\n   */\n  setCustomTimeTitle(title, id) {\n    var _context11;\n    const customTimes = _filterInstanceProperty(_context11 = this.customTimes).call(_context11, component => component.options.id === id);\n    if (customTimes.length === 0) {\n      throw new Error(\"No custom time bar found with id \".concat(_JSON$stringify(id)));\n    }\n    if (customTimes.length > 0) {\n      return customTimes[0].setCustomTitle(title);\n    }\n  }\n\n  /**\n   * Retrieve meta information from an event.\n   * Should be overridden by classes extending Core\n   * @param {Event} event\n   * @return {Object} An object with related information.\n   */\n  getEventProperties(event) {\n    return {\n      event\n    };\n  }\n\n  /**\n   * Add custom vertical bar\n   * @param {Date | string | number} [time]  A Date, unix timestamp, or\n   *                                         ISO date string. Time point where\n   *                                         the new bar should be placed.\n   *                                         If not provided, `new Date()` will\n   *                                         be used.\n   * @param {number | string} [id=undefined] Id of the new bar. Optional\n   * @return {number | string}               Returns the id of the new bar\n   */\n  addCustomTime(time, id) {\n    var _context12;\n    const timestamp = time !== undefined ? availableUtils.convert(time, \"Date\") : new Date();\n    const exists = _someInstanceProperty(_context12 = this.customTimes).call(_context12, customTime => customTime.options.id === id);\n    if (exists) {\n      throw new Error(\"A custom time with id \".concat(_JSON$stringify(id), \" already exists\"));\n    }\n    const customTime = new CustomTime(this.body, availableUtils.extend({}, this.options, {\n      time: timestamp,\n      id,\n      snap: this.itemSet ? this.itemSet.options.snap : this.options.snap\n    }));\n    this.customTimes.push(customTime);\n    this.components.push(customTime);\n    this._redraw();\n    return id;\n  }\n\n  /**\n   * Remove previously added custom bar\n   * @param {int} id ID of the custom bar to be removed\n   * [at]returns {boolean} True if the bar exists and is removed, false otherwise\n   */\n  removeCustomTime(id) {\n    var _context13;\n    const customTimes = _filterInstanceProperty(_context13 = this.customTimes).call(_context13, bar => bar.options.id === id);\n    if (customTimes.length === 0) {\n      throw new Error(\"No custom time bar found with id \".concat(_JSON$stringify(id)));\n    }\n    _forEachInstanceProperty(customTimes).call(customTimes, customTime => {\n      var _context14, _context15, _context16, _context17;\n      _spliceInstanceProperty(_context14 = this.customTimes).call(_context14, _indexOfInstanceProperty(_context15 = this.customTimes).call(_context15, customTime), 1);\n      _spliceInstanceProperty(_context16 = this.components).call(_context16, _indexOfInstanceProperty(_context17 = this.components).call(_context17, customTime), 1);\n      customTime.destroy();\n    });\n  }\n\n  /**\n   * Get the id's of the currently visible items.\n   * @returns {Array} The ids of the visible items\n   */\n  getVisibleItems() {\n    return this.itemSet && this.itemSet.getVisibleItems() || [];\n  }\n\n  /**\n   * Get the id's of the items at specific time, where a click takes place on the timeline.\n   * @param {Date} timeOfEvent The point in time to query items.\n   * @returns {Array} The ids of all items in existence at the time of event.\n   */\n  getItemsAtCurrentTime(timeOfEvent) {\n    this.time = timeOfEvent;\n    return this.itemSet && this.itemSet.getItemsAtCurrentTime(this.time) || [];\n  }\n\n  /**\n   * Get the id's of the currently visible groups.\n   * @returns {Array} The ids of the visible groups\n   */\n  getVisibleGroups() {\n    return this.itemSet && this.itemSet.getVisibleGroups() || [];\n  }\n\n  /**\n   * Set Core window such that it fits all items\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  fit(options, callback) {\n    const range = this.getDataRange();\n\n    // skip range set if there is no min and max date\n    if (range.min === null && range.max === null) {\n      return;\n    }\n\n    // apply a margin of 1% left and right of the data\n    const interval = range.max - range.min;\n    const min = new Date(range.min.valueOf() - interval * 0.01);\n    const max = new Date(range.max.valueOf() + interval * 0.01);\n    const animation = options && options.animation !== undefined ? options.animation : true;\n    this.range.setRange(min, max, {\n      animation\n    }, callback);\n  }\n\n  /**\n   * Calculate the data range of the items start and end dates\n   * [at]returns {{min: [Date], max: [Date]}}\n   * @protected\n   */\n  getDataRange() {\n    // must be implemented by Timeline and Graph2d\n    throw new Error(\"Cannot invoke abstract method getDataRange\");\n  }\n\n  /**\n   * Set the visible window. Both parameters are optional, you can change only\n   * start or only end. Syntax:\n   *\n   *     TimeLine.setWindow(start, end)\n   *     TimeLine.setWindow(start, end, options)\n   *     TimeLine.setWindow(range)\n   *\n   * Where start and end can be a Date, number, or string, and range is an\n   * object with properties start and end.\n   *\n   * @param {Date | number | string | Object} [start] Start date of visible window\n   * @param {Date | number | string} [end]            End date of visible window\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  setWindow(start, end, options, callback) {\n    if (typeof arguments[2] == \"function\") {\n      callback = arguments[2];\n      options = {};\n    }\n    let animation;\n    let range;\n    if (arguments.length == 1) {\n      range = arguments[0];\n      animation = range.animation !== undefined ? range.animation : true;\n      this.range.setRange(range.start, range.end, {\n        animation\n      });\n    } else if (arguments.length == 2 && typeof arguments[1] == \"function\") {\n      range = arguments[0];\n      callback = arguments[1];\n      animation = range.animation !== undefined ? range.animation : true;\n      this.range.setRange(range.start, range.end, {\n        animation\n      }, callback);\n    } else {\n      animation = options && options.animation !== undefined ? options.animation : true;\n      this.range.setRange(start, end, {\n        animation\n      }, callback);\n    }\n  }\n\n  /**\n   * Move the window such that given time is centered on screen.\n   * @param {Date | number | string} time\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  moveTo(time, options, callback) {\n    if (typeof arguments[1] == \"function\") {\n      callback = arguments[1];\n      options = {};\n    }\n    const interval = this.range.end - this.range.start;\n    const t = availableUtils.convert(time, \"Date\").valueOf();\n    const start = t - interval / 2;\n    const end = t + interval / 2;\n    const animation = options && options.animation !== undefined ? options.animation : true;\n    this.range.setRange(start, end, {\n      animation\n    }, callback);\n  }\n\n  /**\n   * Get the visible window\n   * @return {{start: Date, end: Date}}   Visible range\n   */\n  getWindow() {\n    const range = this.range.getRange();\n    return {\n      start: new Date(range.start),\n      end: new Date(range.end)\n    };\n  }\n\n  /**\n   * Zoom in the window such that given time is centered on screen.\n   * @param {number} percentage - must be between [0..1]\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  zoomIn(percentage, options, callback) {\n    if (!percentage || percentage < 0 || percentage > 1) return;\n    if (typeof arguments[1] == \"function\") {\n      callback = arguments[1];\n      options = {};\n    }\n    const range = this.getWindow();\n    const start = range.start.valueOf();\n    const end = range.end.valueOf();\n    const interval = end - start;\n    const newInterval = interval / (1 + percentage);\n    const distance = (interval - newInterval) / 2;\n    const newStart = start + distance;\n    const newEnd = end - distance;\n    this.setWindow(newStart, newEnd, options, callback);\n  }\n\n  /**\n   * Zoom out the window such that given time is centered on screen.\n   * @param {number} percentage - must be between [0..1]\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback] a callback funtion to be executed at the end of this function\n   */\n  zoomOut(percentage, options, callback) {\n    if (!percentage || percentage < 0 || percentage > 1) return;\n    if (typeof arguments[1] == \"function\") {\n      callback = arguments[1];\n      options = {};\n    }\n    const range = this.getWindow();\n    const start = range.start.valueOf();\n    const end = range.end.valueOf();\n    const interval = end - start;\n    const newStart = start - interval * percentage / 2;\n    const newEnd = end + interval * percentage / 2;\n    this.setWindow(newStart, newEnd, options, callback);\n  }\n\n  /**\n   * Force a redraw. Can be overridden by implementations of Core\n   *\n   * Note: this function will be overridden on construction with a trottled version\n   */\n  redraw() {\n    this._redraw();\n  }\n\n  /**\n   * Redraw for internal use. Redraws all components. See also the public\n   * method redraw.\n   * @protected\n   */\n  _redraw() {\n    var _context18;\n    this.redrawCount++;\n    const dom = this.dom;\n    if (!dom || !dom.container || dom.root.offsetWidth == 0) return; // when destroyed, or invisible\n\n    let resized = false;\n    const options = this.options;\n    const props = this.props;\n    updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);\n\n    // update class names\n    if (options.orientation == \"top\") {\n      availableUtils.addClassName(dom.root, \"vis-top\");\n      availableUtils.removeClassName(dom.root, \"vis-bottom\");\n    } else {\n      availableUtils.removeClassName(dom.root, \"vis-top\");\n      availableUtils.addClassName(dom.root, \"vis-bottom\");\n    }\n    if (options.rtl) {\n      availableUtils.addClassName(dom.root, \"vis-rtl\");\n      availableUtils.removeClassName(dom.root, \"vis-ltr\");\n    } else {\n      availableUtils.addClassName(dom.root, \"vis-ltr\");\n      availableUtils.removeClassName(dom.root, \"vis-rtl\");\n    }\n\n    // update root width and height options\n    dom.root.style.maxHeight = availableUtils.option.asSize(options.maxHeight, \"\");\n    dom.root.style.minHeight = availableUtils.option.asSize(options.minHeight, \"\");\n    dom.root.style.width = availableUtils.option.asSize(options.width, \"\");\n    const rootOffsetWidth = dom.root.offsetWidth;\n\n    // calculate border widths\n    props.border.left = 1;\n    props.border.right = 1;\n    props.border.top = 1;\n    props.border.bottom = 1;\n\n    // calculate the heights. If any of the side panels is empty, we set the height to\n    // minus the border width, such that the border will be invisible\n    props.center.height = dom.center.offsetHeight;\n    props.left.height = dom.left.offsetHeight;\n    props.right.height = dom.right.offsetHeight;\n    props.top.height = dom.top.clientHeight || -props.border.top;\n    props.bottom.height = Math.round(dom.bottom.getBoundingClientRect().height) || dom.bottom.clientHeight || -props.border.bottom;\n\n    // TODO: compensate borders when any of the panels is empty.\n\n    // apply auto height\n    // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM)\n    const contentHeight = Math.max(props.left.height, props.center.height, props.right.height);\n    const autoHeight = props.top.height + contentHeight + props.bottom.height + props.border.top + props.border.bottom;\n    dom.root.style.height = availableUtils.option.asSize(options.height, \"\".concat(autoHeight, \"px\"));\n\n    // calculate heights of the content panels\n    props.root.height = dom.root.offsetHeight;\n    props.background.height = props.root.height;\n    const containerHeight = props.root.height - props.top.height - props.bottom.height;\n    props.centerContainer.height = containerHeight;\n    props.leftContainer.height = containerHeight;\n    props.rightContainer.height = props.leftContainer.height;\n\n    // calculate the widths of the panels\n    props.root.width = rootOffsetWidth;\n    props.background.width = props.root.width;\n    if (!this.initialDrawDone) {\n      props.scrollbarWidth = availableUtils.getScrollBarWidth();\n    }\n    const leftContainerClientWidth = dom.leftContainer.clientWidth;\n    const rightContainerClientWidth = dom.rightContainer.clientWidth;\n    if (options.verticalScroll) {\n      if (options.rtl) {\n        props.left.width = leftContainerClientWidth || -props.border.left;\n        props.right.width = rightContainerClientWidth + props.scrollbarWidth || -props.border.right;\n      } else {\n        props.left.width = leftContainerClientWidth + props.scrollbarWidth || -props.border.left;\n        props.right.width = rightContainerClientWidth || -props.border.right;\n      }\n    } else {\n      props.left.width = leftContainerClientWidth || -props.border.left;\n      props.right.width = rightContainerClientWidth || -props.border.right;\n    }\n    this._setDOM();\n\n    // update the scrollTop, feasible range for the offset can be changed\n    // when the height of the Core or of the contents of the center changed\n    let offset = this._updateScrollTop();\n\n    // reposition the scrollable contents\n    if (options.orientation.item != \"top\") {\n      offset += Math.max(props.centerContainer.height - props.center.height - props.border.top - props.border.bottom, 0);\n    }\n    dom.center.style.transform = \"translateY(\".concat(offset, \"px)\");\n\n    // show shadows when vertical scrolling is available\n    const visibilityTop = props.scrollTop == 0 ? \"hidden\" : \"\";\n    const visibilityBottom = props.scrollTop == props.scrollTopMin ? \"hidden\" : \"\";\n    dom.shadowTop.style.visibility = visibilityTop;\n    dom.shadowBottom.style.visibility = visibilityBottom;\n    dom.shadowTopLeft.style.visibility = visibilityTop;\n    dom.shadowBottomLeft.style.visibility = visibilityBottom;\n    dom.shadowTopRight.style.visibility = visibilityTop;\n    dom.shadowBottomRight.style.visibility = visibilityBottom;\n    if (options.verticalScroll) {\n      dom.rightContainer.className = \"vis-panel vis-right vis-vertical-scroll\";\n      dom.leftContainer.className = \"vis-panel vis-left vis-vertical-scroll\";\n      dom.shadowTopRight.style.visibility = \"hidden\";\n      dom.shadowBottomRight.style.visibility = \"hidden\";\n      dom.shadowTopLeft.style.visibility = \"hidden\";\n      dom.shadowBottomLeft.style.visibility = \"hidden\";\n      dom.left.style.top = \"0px\";\n      dom.right.style.top = \"0px\";\n    }\n    if (!options.verticalScroll || props.center.height < props.centerContainer.height) {\n      dom.left.style.top = \"\".concat(offset, \"px\");\n      dom.right.style.top = \"\".concat(offset, \"px\");\n      dom.rightContainer.className = dom.rightContainer.className.replace(new RegExp(\"(?:^|\\\\s)\" + \"vis-vertical-scroll\" + \"(?:\\\\s|$)\"), \" \");\n      dom.leftContainer.className = dom.leftContainer.className.replace(new RegExp(\"(?:^|\\\\s)\" + \"vis-vertical-scroll\" + \"(?:\\\\s|$)\"), \" \");\n      props.left.width = leftContainerClientWidth || -props.border.left;\n      props.right.width = rightContainerClientWidth || -props.border.right;\n      this._setDOM();\n    }\n\n    // enable/disable vertical panning\n    const contentsOverflow = props.center.height > props.centerContainer.height;\n    this.hammer.get(\"pan\").set({\n      direction: contentsOverflow ? Hammer.DIRECTION_ALL : Hammer.DIRECTION_HORIZONTAL\n    });\n\n    // set the long press time\n    this.hammer.get(\"press\").set({\n      time: this.options.longSelectPressTime\n    });\n\n    // redraw all components\n    _forEachInstanceProperty(_context18 = this.components).call(_context18, component => {\n      resized = component.redraw() || resized;\n    });\n    const MAX_REDRAW = 5;\n    if (resized) {\n      if (this.redrawCount < MAX_REDRAW) {\n        this.body.emitter.emit(\"_change\");\n        return;\n      } else {\n        console.log(\"WARNING: infinite loop in redraw?\");\n      }\n    } else {\n      this.redrawCount = 0;\n    }\n\n    //Emit public 'changed' event for UI updates, see issue #1592\n    this.body.emitter.emit(\"changed\");\n  }\n\n  /**\n   * sets the basic DOM components needed for the timeline\\graph2d\n   */\n  _setDOM() {\n    const props = this.props;\n    const dom = this.dom;\n    props.leftContainer.width = props.left.width;\n    props.rightContainer.width = props.right.width;\n    const centerWidth = props.root.width - props.left.width - props.right.width;\n    props.center.width = centerWidth;\n    props.centerContainer.width = centerWidth;\n    props.top.width = centerWidth;\n    props.bottom.width = centerWidth;\n\n    // resize the panels\n    dom.background.style.height = \"\".concat(props.background.height, \"px\");\n    dom.backgroundVertical.style.height = \"\".concat(props.background.height, \"px\");\n    dom.backgroundHorizontal.style.height = \"\".concat(props.centerContainer.height, \"px\");\n    dom.centerContainer.style.height = \"\".concat(props.centerContainer.height, \"px\");\n    dom.leftContainer.style.height = \"\".concat(props.leftContainer.height, \"px\");\n    dom.rightContainer.style.height = \"\".concat(props.rightContainer.height, \"px\");\n    dom.background.style.width = \"\".concat(props.background.width, \"px\");\n    dom.backgroundVertical.style.width = \"\".concat(props.centerContainer.width, \"px\");\n    dom.backgroundHorizontal.style.width = \"\".concat(props.background.width, \"px\");\n    dom.centerContainer.style.width = \"\".concat(props.center.width, \"px\");\n    dom.top.style.width = \"\".concat(props.top.width, \"px\");\n    dom.bottom.style.width = \"\".concat(props.bottom.width, \"px\");\n\n    // reposition the panels\n    dom.background.style.left = \"0\";\n    dom.background.style.top = \"0\";\n    dom.backgroundVertical.style.left = \"\".concat(props.left.width + props.border.left, \"px\");\n    dom.backgroundVertical.style.top = \"0\";\n    dom.backgroundHorizontal.style.left = \"0\";\n    dom.backgroundHorizontal.style.top = \"\".concat(props.top.height, \"px\");\n    dom.centerContainer.style.left = \"\".concat(props.left.width, \"px\");\n    dom.centerContainer.style.top = \"\".concat(props.top.height, \"px\");\n    dom.leftContainer.style.left = \"0\";\n    dom.leftContainer.style.top = \"\".concat(props.top.height, \"px\");\n    dom.rightContainer.style.left = \"\".concat(props.left.width + props.center.width, \"px\");\n    dom.rightContainer.style.top = \"\".concat(props.top.height, \"px\");\n    dom.top.style.left = \"\".concat(props.left.width, \"px\");\n    dom.top.style.top = \"0\";\n    dom.bottom.style.left = \"\".concat(props.left.width, \"px\");\n    dom.bottom.style.top = \"\".concat(props.top.height + props.centerContainer.height, \"px\");\n    dom.center.style.left = \"0\";\n    dom.left.style.left = \"0\";\n    dom.right.style.left = \"0\";\n  }\n\n  /**\n   * Set a current time. This can be used for example to ensure that a client's\n   * time is synchronized with a shared server time.\n   * Only applicable when option `showCurrentTime` is true.\n   * @param {Date | string | number} time     A Date, unix timestamp, or\n   *                                          ISO date string.\n   */\n  setCurrentTime(time) {\n    if (!this.currentTime) {\n      throw new Error(\"Option showCurrentTime must be true\");\n    }\n    this.currentTime.setCurrentTime(time);\n  }\n\n  /**\n   * Get the current time.\n   * Only applicable when option `showCurrentTime` is true.\n   * @return {Date} Returns the current time.\n   */\n  getCurrentTime() {\n    if (!this.currentTime) {\n      throw new Error(\"Option showCurrentTime must be true\");\n    }\n    return this.currentTime.getCurrentTime();\n  }\n\n  /**\n   * Convert a position on screen (pixels) to a datetime\n   * @param {int}     x    Position on the screen in pixels\n   * @return {Date}   time The datetime the corresponds with given position x\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toTime(x) {\n    return toTime(this, x, this.props.center.width);\n  }\n\n  /**\n   * Convert a position on the global screen (pixels) to a datetime\n   * @param {int}     x    Position on the screen in pixels\n   * @return {Date}   time The datetime the corresponds with given position x\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toGlobalTime(x) {\n    return toTime(this, x, this.props.root.width);\n    //var conversion = this.range.conversion(this.props.root.width);\n    //return new Date(x / conversion.scale + conversion.offset);\n  }\n\n  /**\n   * Convert a datetime (Date object) into a position on the screen\n   * @param {Date}   time A date\n   * @return {int}   x    The position on the screen in pixels which corresponds\n   *                      with the given date.\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toScreen(time) {\n    return toScreen(this, time, this.props.center.width);\n  }\n\n  /**\n   * Convert a datetime (Date object) into a position on the root\n   * This is used to get the pixel density estimate for the screen, not the center panel\n   * @param {Date}   time A date\n   * @return {int}   x    The position on root in pixels which corresponds\n   *                      with the given date.\n   * @protected\n   * TODO: move this function to Range\n   */\n  _toGlobalScreen(time) {\n    return toScreen(this, time, this.props.root.width);\n    //var conversion = this.range.conversion(this.props.root.width);\n    //return (time.valueOf() - conversion.offset) * conversion.scale;\n  }\n\n  /**\n   * Initialize watching when option autoResize is true\n   * @private\n   */\n  _initAutoResize() {\n    if (this.options.autoResize == true) {\n      this._startAutoResize();\n    } else {\n      this._stopAutoResize();\n    }\n  }\n\n  /**\n   * Watch for changes in the size of the container. On resize, the Panel will\n   * automatically redraw itself.\n   * @private\n   */\n  _startAutoResize() {\n    const me = this;\n    this._stopAutoResize();\n    this._onResize = () => {\n      if (me.options.autoResize != true) {\n        // stop watching when the option autoResize is changed to false\n        me._stopAutoResize();\n        return;\n      }\n      if (me.dom.root) {\n        const rootOffsetHeight = me.dom.root.offsetHeight;\n        const rootOffsetWidth = me.dom.root.offsetWidth;\n        // check whether the frame is resized\n        // Note: we compare offsetWidth here, not clientWidth. For some reason,\n        // IE does not restore the clientWidth from 0 to the actual width after\n        // changing the timeline's container display style from none to visible\n        if (rootOffsetWidth != me.props.lastWidth || rootOffsetHeight != me.props.lastHeight) {\n          me.props.lastWidth = rootOffsetWidth;\n          me.props.lastHeight = rootOffsetHeight;\n          me.props.scrollbarWidth = availableUtils.getScrollBarWidth();\n          me.body.emitter.emit(\"_change\");\n        }\n      }\n    };\n\n    // add event listener to window resize\n    window.addEventListener(\"resize\", this._onResize);\n\n    //Prevent initial unnecessary redraw\n    if (me.dom.root) {\n      me.props.lastWidth = me.dom.root.offsetWidth;\n      me.props.lastHeight = me.dom.root.offsetHeight;\n    }\n    this.watchTimer = _setInterval(this._onResize, 1000);\n  }\n\n  /**\n   * Stop watching for a resize of the frame.\n   * @private\n   */\n  _stopAutoResize() {\n    if (this.watchTimer) {\n      clearInterval(this.watchTimer);\n      this.watchTimer = undefined;\n    }\n\n    // remove event listener on window.resize\n    if (this._onResize) {\n      window.removeEventListener(\"resize\", this._onResize);\n      this._onResize = null;\n    }\n  }\n\n  /**\n   * Start moving the timeline vertically\n   * @private\n   */\n  _onTouch() {\n    this.touch.allowDragging = true;\n    this.touch.initialScrollTop = this.props.scrollTop;\n  }\n\n  /**\n   * Start moving the timeline vertically\n   * @private\n   */\n  _onPinch() {\n    this.touch.allowDragging = false;\n  }\n\n  /**\n   * Move the timeline vertically\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (!event) return;\n    // refuse to drag when we where pinching to prevent the timeline make a jump\n    // when releasing the fingers in opposite order from the touch screen\n    if (!this.touch.allowDragging) return;\n    const delta = event.deltaY;\n    const oldScrollTop = this._getScrollTop();\n    const newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta);\n    if (this.options.verticalScroll) {\n      this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n      this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n    }\n    if (newScrollTop != oldScrollTop) {\n      this.emit(\"verticalDrag\");\n    }\n  }\n\n  /**\n   * Apply a scrollTop\n   * @param {number} scrollTop\n   * @returns {number} scrollTop  Returns the applied scrollTop\n   * @private\n   */\n  _setScrollTop(scrollTop) {\n    this.props.scrollTop = scrollTop;\n    this._updateScrollTop();\n    return this.props.scrollTop;\n  }\n\n  /**\n   * Update the current scrollTop when the height of  the containers has been changed\n   * @returns {number} scrollTop  Returns the applied scrollTop\n   * @private\n   */\n  _updateScrollTop() {\n    // recalculate the scrollTopMin\n    const scrollTopMin = Math.min(this.props.centerContainer.height - this.props.border.top - this.props.border.bottom - this.props.center.height, 0); // is negative or zero\n    if (scrollTopMin != this.props.scrollTopMin) {\n      // in case of bottom orientation, change the scrollTop such that the contents\n      // do not move relative to the time axis at the bottom\n      if (this.options.orientation.item != \"top\") {\n        this.props.scrollTop += scrollTopMin - this.props.scrollTopMin;\n      }\n      this.props.scrollTopMin = scrollTopMin;\n    }\n\n    // limit the scrollTop to the feasible scroll range\n    if (this.props.scrollTop > 0) this.props.scrollTop = 0;\n    if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin;\n    if (this.options.verticalScroll) {\n      this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n      this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n    }\n    return this.props.scrollTop;\n  }\n\n  /**\n   * Get the current scrollTop\n   * @returns {number} scrollTop\n   * @private\n   */\n  _getScrollTop() {\n    return this.props.scrollTop;\n  }\n\n  /**\n   * Load a configurator\n   * [at]returns {Object}\n   * @private\n   */\n  _createConfigurator() {\n    throw new Error(\"Cannot invoke abstract method _createConfigurator\");\n  }\n}\n\n// turn Core into an event emitter\nEmitter(Core.prototype);\n\n/**\n * A current time bar\n */\nclass CurrentTime extends Component {\n  /**\n   * @param {{range: Range, dom: Object, domProps: Object}} body\n   * @param {Object} [options]        Available parameters:\n   *                                  {Boolean} [showCurrentTime]\n   *                                  {String}  [alignCurrentTime]\n   * @constructor CurrentTime\n   * @extends Component\n   */\n  constructor(body, options) {\n    var _context;\n    super();\n    this.body = body;\n\n    // default options\n    this.defaultOptions = {\n      rtl: false,\n      showCurrentTime: true,\n      alignCurrentTime: undefined,\n      moment: moment$2,\n      locales,\n      locale: \"en\"\n    };\n    this.options = availableUtils.extend({}, this.defaultOptions);\n    this.setOptions(options);\n    this.options.locales = availableUtils.extend({}, locales, this.options.locales);\n    const defaultLocales = this.defaultOptions.locales[this.defaultOptions.locale];\n    _forEachInstanceProperty(_context = _Object$keys(this.options.locales)).call(_context, locale => {\n      this.options.locales[locale] = availableUtils.extend({}, defaultLocales, this.options.locales[locale]);\n    });\n    this.offset = 0;\n    this._create();\n  }\n\n  /**\n   * Create the HTML DOM for the current time bar\n   * @private\n   */\n  _create() {\n    const bar = document.createElement(\"div\");\n    bar.className = \"vis-current-time\";\n    bar.style.position = \"absolute\";\n    bar.style.top = \"0px\";\n    bar.style.height = \"100%\";\n    this.bar = bar;\n  }\n\n  /**\n   * Destroy the CurrentTime bar\n   */\n  destroy() {\n    this.options.showCurrentTime = false;\n    this.redraw(); // will remove the bar from the DOM and stop refreshing\n\n    this.body = null;\n  }\n\n  /**\n   * Set options for the component. Options will be merged in current options.\n   * @param {Object} options  Available parameters:\n   *                          {boolean} [showCurrentTime]\n   *                          {String}  [alignCurrentTime]\n   */\n  setOptions(options) {\n    if (options) {\n      // copy all options that we know\n      availableUtils.selectiveExtend([\"rtl\", \"showCurrentTime\", \"alignCurrentTime\", \"moment\", \"locale\", \"locales\"], this.options, options);\n    }\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    if (this.options.showCurrentTime) {\n      var _context2, _context3;\n      const parent = this.body.dom.backgroundVertical;\n      if (this.bar.parentNode != parent) {\n        // attach to the dom\n        if (this.bar.parentNode) {\n          this.bar.parentNode.removeChild(this.bar);\n        }\n        parent.appendChild(this.bar);\n        this.start();\n      }\n      let now = this.options.moment(_Date$now() + this.offset);\n      if (this.options.alignCurrentTime) {\n        now = now.startOf(this.options.alignCurrentTime);\n      }\n      const x = this.body.util.toScreen(now);\n      let locale = this.options.locales[this.options.locale];\n      if (!locale) {\n        if (!this.warned) {\n          console.warn(\"WARNING: options.locales['\".concat(this.options.locale, \"'] not found. See https://visjs.github.io/vis-timeline/docs/timeline/#Localization\"));\n          this.warned = true;\n        }\n        locale = this.options.locales[\"en\"]; // fall back on english when not available\n      }\n      let title = _concatInstanceProperty(_context2 = _concatInstanceProperty(_context3 = \"\".concat(locale.current, \" \")).call(_context3, locale.time, \": \")).call(_context2, now.format(\"dddd, MMMM Do YYYY, H:mm:ss\"));\n      title = title.charAt(0).toUpperCase() + title.substring(1);\n      if (this.options.rtl) {\n        this.bar.style.transform = \"translateX(\".concat(x * -1, \"px)\");\n      } else {\n        this.bar.style.transform = \"translateX(\".concat(x, \"px)\");\n      }\n      this.bar.title = title;\n    } else {\n      // remove the line from the DOM\n      if (this.bar.parentNode) {\n        this.bar.parentNode.removeChild(this.bar);\n      }\n      this.stop();\n    }\n    return false;\n  }\n\n  /**\n   * Start auto refreshing the current time bar\n   */\n  start() {\n    const me = this;\n\n    /**\n     *  Updates the current time.\n     */\n    function update() {\n      me.stop();\n\n      // determine interval to refresh\n      const scale = me.body.range.conversion(me.body.domProps.center.width).scale;\n      let interval = 1 / scale / 10;\n      if (interval < 30) interval = 30;\n      if (interval > 1000) interval = 1000;\n      me.redraw();\n      me.body.emitter.emit(\"currentTimeTick\");\n\n      // start a renderTimer to adjust for the new time\n      me.currentTimeTimer = _setTimeout(update, interval);\n    }\n    update();\n  }\n\n  /**\n   * Stop auto refreshing the current time bar\n   */\n  stop() {\n    if (this.currentTimeTimer !== undefined) {\n      clearTimeout(this.currentTimeTimer);\n      delete this.currentTimeTimer;\n    }\n  }\n\n  /**\n   * Set a current time. This can be used for example to ensure that a client's\n   * time is synchronized with a shared server time.\n   * @param {Date | string | number} time     A Date, unix timestamp, or\n   *                                          ISO date string.\n   */\n  setCurrentTime(time) {\n    const t = availableUtils.convert(time, \"Date\").valueOf();\n    const now = _Date$now();\n    this.offset = t - now;\n    this.redraw();\n  }\n\n  /**\n   * Get the current time.\n   * @return {Date} Returns the current time.\n   */\n  getCurrentTime() {\n    return new Date(_Date$now() + this.offset);\n  }\n}\n\nvar es_array_find = {};\n\nvar hasRequiredEs_array_find;\n\nfunction requireEs_array_find () {\n\tif (hasRequiredEs_array_find) return es_array_find;\n\thasRequiredEs_array_find = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $find = /*@__PURE__*/ requireArrayIteration().find;\n\tvar addToUnscopables = /*@__PURE__*/ requireAddToUnscopables();\n\n\tvar FIND = 'find';\n\tvar SKIPS_HOLES = true;\n\n\t// Shouldn't skip holes\n\t// eslint-disable-next-line es/no-array-prototype-find -- testing\n\tif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n\t// `Array.prototype.find` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.find\n\t$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n\t  find: function find(callbackfn /* , that = undefined */) {\n\t    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t  }\n\t});\n\n\t// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\n\taddToUnscopables(FIND);\n\treturn es_array_find;\n}\n\nvar find$3;\nvar hasRequiredFind$3;\n\nfunction requireFind$3 () {\n\tif (hasRequiredFind$3) return find$3;\n\thasRequiredFind$3 = 1;\n\trequireEs_array_find();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tfind$3 = getBuiltInPrototypeMethod('Array', 'find');\n\treturn find$3;\n}\n\nvar find$2;\nvar hasRequiredFind$2;\n\nfunction requireFind$2 () {\n\tif (hasRequiredFind$2) return find$2;\n\thasRequiredFind$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireFind$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tfind$2 = function (it) {\n\t  var own = it.find;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.find) ? method : own;\n\t};\n\treturn find$2;\n}\n\nvar find$1;\nvar hasRequiredFind$1;\n\nfunction requireFind$1 () {\n\tif (hasRequiredFind$1) return find$1;\n\thasRequiredFind$1 = 1;\n\tvar parent = /*@__PURE__*/ requireFind$2();\n\n\tfind$1 = parent;\n\treturn find$1;\n}\n\nvar find;\nvar hasRequiredFind;\n\nfunction requireFind () {\n\tif (hasRequiredFind) return find;\n\thasRequiredFind = 1;\n\tfind = /*@__PURE__*/ requireFind$1();\n\treturn find;\n}\n\nvar findExports = requireFind();\nvar _findInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(findExports);\n\n// Utility functions for ordering and stacking of items\nconst EPSILON = 0.001; // used when checking collisions, to prevent round-off errors\n\n/**\n * Order items by their start data\n * @param {Item[]} items\n */\nfunction orderByStart(items) {\n  _sortInstanceProperty(items).call(items, (a, b) => a.data.start - b.data.start);\n}\n\n/**\n * Order items by their end date. If they have no end date, their start date\n * is used.\n * @param {Item[]} items\n */\nfunction orderByEnd(items) {\n  _sortInstanceProperty(items).call(items, (a, b) => {\n    const aTime = \"end\" in a.data ? a.data.end : a.data.start;\n    const bTime = \"end\" in b.data ? b.data.end : b.data.start;\n    return aTime - bTime;\n  });\n}\n\n/**\n * Adjust vertical positions of the items such that they don't overlap each\n * other.\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {boolean} [force=false]\n *            If true, all items will be repositioned. If false (default), only\n *            items having a top===null will be re-stacked\n * @param {function} shouldBailItemsRedrawFunction\n *            bailing function\n * @return {boolean} shouldBail\n */\nfunction stack(items, margin, force, shouldBailItemsRedrawFunction) {\n  const stackingResult = performStacking(items, margin.item, false, item => item.stack && (force || item.top === null), item => item.stack, () => margin.axis, shouldBailItemsRedrawFunction);\n\n  // If shouldBail function returned true during stacking calculation\n  return stackingResult === null;\n}\n\n/**\n * Adjust vertical positions of the items within a single subgroup such that they\n * don't overlap each other.\n * @param {Item[]} items\n *            All items withina subgroup\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {subgroup} subgroup\n *            The subgroup that is being stacked\n */\nfunction substack(items, margin, subgroup) {\n  const subgroupHeight = performStacking(items, margin.item, false, item => item.stack, () => true, item => item.baseTop);\n  subgroup.height = subgroupHeight - subgroup.top + 0.5 * margin.item.vertical;\n}\n\n/**\n * Adjust vertical positions of the items without stacking them\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {subgroups[]} subgroups\n *            All subgroups\n * @param {boolean} isStackSubgroups\n */\nfunction nostack(items, margin, subgroups, isStackSubgroups) {\n  for (let i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup == undefined) {\n      items[i].top = margin.item.vertical;\n      continue;\n    }\n    if (items[i].data.subgroup === undefined || !isStackSubgroups) continue;\n    let newTop = 0;\n    for (const subgroup in subgroups) {\n      if (!Object.prototype.hasOwnProperty.call(subgroups, subgroup) || subgroups[subgroup].visible !== true || subgroups[subgroup].index >= subgroups[items[i].data.subgroup].index) continue;\n      newTop += subgroups[subgroup].height;\n      subgroups[items[i].data.subgroup].top = newTop;\n    }\n    items[i].top = newTop + 0.5 * margin.item.vertical;\n  }\n  if (!isStackSubgroups) stackSubgroups(items, margin, subgroups);\n}\n\n/**\n * Adjust vertical positions of the subgroups such that they don't overlap each\n * other.\n * @param {Array.<timeline.Item>} items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin Margins between items and between items and the axis.\n * @param {subgroups[]} subgroups\n *            All subgroups\n */\nfunction stackSubgroups(items, margin, subgroups) {\n  var _context;\n  performStacking(_sortInstanceProperty(_context = _Object$values(subgroups)).call(_context, (a, b) => {\n    if (a.index > b.index) return 1;\n    if (a.index < b.index) return -1;\n    return 0;\n  }), {\n    vertical: 0\n  }, true, () => true, () => true, () => 0);\n  for (let i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup !== undefined) {\n      items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;\n    }\n  }\n}\n\n/**\n * Adjust vertical positions of the subgroups such that they don't overlap each\n * other, then stacks the contents of each subgroup individually.\n * @param {Item[]} subgroupItems\n *            All the items in a subgroup\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {subgroups[]} subgroups\n *            All subgroups\n */\nfunction stackSubgroupsWithInnerStack(subgroupItems, margin, subgroups) {\n  let doSubStack = false;\n\n  // Run subgroups in their order (if any)\n  const subgroupOrder = [];\n  for (let subgroup in subgroups) {\n    if (Object.prototype.hasOwnProperty.call(subgroups[subgroup], \"index\")) {\n      subgroupOrder[subgroups[subgroup].index] = subgroup;\n    } else {\n      subgroupOrder.push(subgroup);\n    }\n  }\n  for (let j = 0; j < subgroupOrder.length; j++) {\n    let subgroup = subgroupOrder[j];\n    if (!Object.prototype.hasOwnProperty.call(subgroups, subgroup)) continue;\n    doSubStack = doSubStack || subgroups[subgroup].stack;\n    subgroups[subgroup].top = 0;\n    for (const otherSubgroup in subgroups) {\n      if (subgroups[otherSubgroup].visible && subgroups[subgroup].index > subgroups[otherSubgroup].index) {\n        subgroups[subgroup].top += subgroups[otherSubgroup].height;\n      }\n    }\n    const items = subgroupItems[subgroup];\n    for (let i = 0; i < items.length; i++) {\n      if (items[i].data.subgroup === undefined) continue;\n      items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;\n      if (subgroups[subgroup].stack) items[i].baseTop = items[i].top;\n    }\n    if (doSubStack && subgroups[subgroup].stack) substack(subgroupItems[subgroup], margin, subgroups[subgroup]);\n  }\n}\n\n/**\n * Reusable stacking function\n *\n * @param {Item[]} items\n * An array of items to consider during stacking.\n * @param {{horizontal: number, vertical: number}} margins\n * Margins to be used for collision checking and placement of items.\n * @param {boolean} compareTimes\n * By default, horizontal collision is checked based on the spatial position of the items (left/right and width).\n * If this argument is true, horizontal collision will instead be checked based on the start/end times of each item.\n * Vertical collision is always checked spatially.\n * @param {function(Item): number | null} shouldStack\n * A callback function which is called before we start to process an item. The return value indicates whether the item will be processed.\n * @param {function(Item): boolean} shouldOthersStack\n * A callback function which indicates whether other items should consider this item when being stacked.\n * @param {function(Item): number} getInitialHeight\n * A callback function which determines the height items are initially placed at\n * @param {function(): boolean} shouldBail\n * A callback function which should indicate if the stacking process should be aborted.\n *\n * @returns {null|number}\n * if shouldBail was triggered, returns null\n * otherwise, returns the maximum height\n */\nfunction performStacking(items, margins, compareTimes, shouldStack, shouldOthersStack, getInitialHeight, shouldBail) {\n  // Time-based horizontal comparison\n  let getItemStart = item => item.start;\n  let getItemEnd = item => item.end;\n  if (!compareTimes) {\n    // Spatial horizontal comparisons\n    const rtl = !!(items[0] && items[0].options.rtl);\n    if (rtl) {\n      getItemStart = item => item.right;\n    } else {\n      getItemStart = item => item.left;\n    }\n    getItemEnd = item => getItemStart(item) + item.width + margins.horizontal;\n  }\n  const itemsToPosition = [];\n  const itemsAlreadyPositioned = []; // It's vital that this array is kept sorted based on the start of each item\n\n  // If the order we needed to place items was based purely on the start of each item, we could calculate stacking very efficiently.\n  // Unfortunately for us, this is not guaranteed. But the order is often based on the start of items at least to some degree, and\n  // we can use this to make some optimisations. While items are proceeding in order of start, we can keep moving our search indexes\n  // forwards. Then if we encounter an item that's out of order, we reset our indexes and search from the beginning of the array again.\n  let previousStart = null;\n  let insertionIndex = 0;\n\n  // First let's handle any immoveable items\n  for (const item of items) {\n    if (shouldStack(item)) {\n      itemsToPosition.push(item);\n    } else {\n      if (shouldOthersStack(item)) {\n        const itemStart = getItemStart(item);\n\n        // We need to put immoveable items into itemsAlreadyPositioned and ensure that this array is sorted.\n        // We could simply insert them, and then use JavaScript's sort function to sort them afterwards.\n        // This would achieve an average complexity of O(n log n).\n        //\n        // Instead, I'm gambling that the start of each item will usually be the same or later than the\n        // start of the previous item. While this holds (best case), we can insert items in O(n).\n        // In the worst case (where each item starts before the previous item) this grows to O(n^2).\n        //\n        // I am making the assumption that for most datasets, the \"order\" function will have relatively low cardinality,\n        // and therefore this tradeoff should be easily worth it.\n        if (previousStart !== null && itemStart < previousStart - EPSILON) {\n          insertionIndex = 0;\n        }\n        previousStart = itemStart;\n        insertionIndex = findIndexFrom(itemsAlreadyPositioned, i => getItemStart(i) - EPSILON > itemStart, insertionIndex);\n        _spliceInstanceProperty(itemsAlreadyPositioned).call(itemsAlreadyPositioned, insertionIndex, 0, item);\n        insertionIndex++;\n      }\n    }\n  }\n\n  // Now we can loop through each item (in order) and find a position for them\n  previousStart = null;\n  let previousEnd = null;\n  insertionIndex = 0;\n  let horizontalOverlapStartIndex = 0;\n  let horizontalOverlapEndIndex = 0;\n  let maxHeight = 0;\n  while (itemsToPosition.length > 0) {\n    var _context2;\n    const item = itemsToPosition.shift();\n    item.top = getInitialHeight(item);\n    const itemStart = getItemStart(item);\n    const itemEnd = getItemEnd(item);\n    if (previousStart !== null && itemStart < previousStart - EPSILON) {\n      horizontalOverlapStartIndex = 0;\n      horizontalOverlapEndIndex = 0;\n      insertionIndex = 0;\n      previousEnd = null;\n    }\n    if (previousStart === null || itemStart > previousStart + EPSILON) {\n      // Take advantage of the sorted itemsAlreadyPositioned array to narrow down the search\n      horizontalOverlapStartIndex = findIndexFrom(itemsAlreadyPositioned, i => itemStart < getItemEnd(i) - EPSILON, horizontalOverlapStartIndex);\n    }\n    previousStart = itemStart;\n\n    // Since items aren't sorted by end time, it might increase or decrease from one item to the next. In order to keep an efficient search area, we will seek forwards/backwards accordingly.\n    if (previousEnd === null || previousEnd < itemEnd - EPSILON) {\n      horizontalOverlapEndIndex = findIndexFrom(itemsAlreadyPositioned, i => itemEnd < getItemStart(i) - EPSILON, Math.max(horizontalOverlapStartIndex, horizontalOverlapEndIndex));\n    }\n    if (previousEnd !== null && previousEnd - EPSILON > itemEnd) {\n      horizontalOverlapEndIndex = findLastIndexBetween(itemsAlreadyPositioned, i => itemEnd + EPSILON >= getItemStart(i), horizontalOverlapStartIndex, horizontalOverlapEndIndex) + 1;\n    }\n    previousEnd = itemEnd;\n\n    // Sort by vertical position so we don't have to reconsider past items if we move an item\n    const horizontallyCollidingItems = _sortInstanceProperty(_context2 = filterBetween(itemsAlreadyPositioned, i => itemStart < getItemEnd(i) - EPSILON, horizontalOverlapStartIndex, horizontalOverlapEndIndex)).call(_context2, (a, b) => a.top - b.top);\n\n    // Keep moving the item down until it stops colliding with any other items\n    for (let i2 = 0; i2 < horizontallyCollidingItems.length; i2++) {\n      const otherItem = horizontallyCollidingItems[i2];\n      if (checkVerticalSpatialCollision(item, otherItem, margins)) {\n        item.top = otherItem.top + otherItem.height + margins.vertical;\n      }\n    }\n    if (shouldOthersStack(item)) {\n      // Insert the item into itemsAlreadyPositioned, ensuring itemsAlreadyPositioned remains sorted.\n      // In the best case, we can insert an item in constant time O(1). In the worst case, we insert an item in linear time O(n).\n      // In both cases, this is better than doing a naive insert and then sort, which would cost on average O(n log n).\n      insertionIndex = findIndexFrom(itemsAlreadyPositioned, i => getItemStart(i) - EPSILON > itemStart, insertionIndex);\n      _spliceInstanceProperty(itemsAlreadyPositioned).call(itemsAlreadyPositioned, insertionIndex, 0, item);\n      if (insertionIndex < horizontalOverlapStartIndex) {\n        horizontalOverlapStartIndex++;\n      }\n      if (insertionIndex <= horizontalOverlapEndIndex) {\n        horizontalOverlapEndIndex++;\n      }\n      insertionIndex++;\n    }\n\n    // Keep track of the tallest item we've seen before\n    const currentHeight = item.top + item.height;\n    if (currentHeight > maxHeight) {\n      maxHeight = currentHeight;\n    }\n    if (shouldBail && shouldBail()) {\n      return null;\n    }\n  }\n  return maxHeight;\n}\n\n/**\n * Test if the two provided items collide\n * The items must have parameters left, width, top, and height.\n * @param {Item} a          The first item\n * @param {Item} b          The second item\n * @param {{vertical: number}} margin\n *                          An object containing a horizontal and vertical\n *                          minimum required margin.\n * @return {boolean}        true if a and b collide, else false\n */\nfunction checkVerticalSpatialCollision(a, b, margin) {\n  return a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top;\n}\n\n/**\n * Find index of first item to meet predicate after a certain index.\n * If no such item is found, returns the length of the array.\n *\n * @param {any[]} arr The array\n * @param {function(item): boolean} predicate A function that should return true when a suitable item is found\n * @param {number|undefined} startIndex The index to start search from (inclusive). Optional, if not provided will search from the beginning of the array.\n *\n * @return {number}\n */\nfunction findIndexFrom(arr, predicate, startIndex) {\n  if (!startIndex) {\n    startIndex = 0;\n  }\n  for (let i = startIndex; i < arr.length; i++) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n  return arr.length;\n}\n\n/**\n * Find index of last item to meet predicate within a given range.\n * If no such item is found, returns the index prior to the start of the range.\n *\n * @param {any[]} arr The array\n * @param {function(item): boolean} predicate A function that should return true when a suitable item is found\n * @param {number|undefined} startIndex The earliest index to search to (inclusive). Optional, if not provided will continue until the start of the array.\n * @param {number|undefined} endIndex The end of the search range (exclusive). The search will begin on the index prior to this value. Optional, defaults to the end of array.\n *\n * @return {number}\n */\nfunction findLastIndexBetween(arr, predicate, startIndex, endIndex) {\n  if (!startIndex) {\n    startIndex = 0;\n  }\n  if (!endIndex) {\n    endIndex = arr.length;\n  }\n  for (let i = endIndex - 1; i >= startIndex; i--) {\n    if (predicate(arr[i])) {\n      return i;\n    }\n  }\n  return startIndex - 1;\n}\n\n/**\n * Takes an array and returns an array containing only items which meet a predicate within a given range.\n *\n * @param {any[]} arr The array\n * @param {function(item): boolean} predicate A function that should return true for items which should be included within the result\n * @param {number|undefined} startIndex The earliest index to include (inclusive). Optional, if not provided will continue until the start of the array.\n * @param {number|undefined} endIndex The end of the range to filter (exclusive). Optional, defaults to the end of array.\n *\n * @return {number}\n */\nfunction filterBetween(arr, predicate, startIndex, endIndex) {\n  if (!startIndex) {\n    startIndex = 0;\n  }\n  if (endIndex) {\n    endIndex = Math.min(endIndex, arr.length);\n  } else {\n    endIndex = arr.length;\n  }\n  const result = [];\n  for (let i = startIndex; i < endIndex; i++) {\n    if (predicate(arr[i])) {\n      result.push(arr[i]);\n    }\n  }\n  return result;\n}\n\nvar stack$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  nostack: nostack,\n  orderByEnd: orderByEnd,\n  orderByStart: orderByStart,\n  stack: stack,\n  stackSubgroups: stackSubgroups,\n  stackSubgroupsWithInnerStack: stackSubgroupsWithInnerStack,\n  substack: substack\n});\n\nconst BACKGROUND$1 = \"__background__\"; // reserved group id for background items without group\n\nconst ReservedGroupIds$1 = {\n  BACKGROUND: BACKGROUND$1\n};\n\n/**\n * @constructor Group\n */\nclass Group {\n  /**\n   * @param {number | string} groupId\n   * @param {Object} data\n   * @param {ItemSet} itemSet\n   * @constructor Group\n   */\n  constructor(groupId, data, itemSet) {\n    this.groupId = groupId;\n    this.subgroups = {};\n    this.subgroupStack = {};\n    this.subgroupStackAll = false;\n    this.subgroupVisibility = {};\n    this.doInnerStack = false;\n    this.shouldBailStackItems = false;\n    this.subgroupIndex = 0;\n    this.subgroupOrderer = data && data.subgroupOrder;\n    this.itemSet = itemSet;\n    this.isVisible = null;\n    this.height = 0;\n    this.stackDirty = true; // if true, items will be restacked on next redraw\n\n    // This is a stack of functions (`() => void`) that will be executed before\n    // the instance is disposed off (method `dispose`). Anything that needs to\n    // be manually disposed off before garbage collection happens (or so that\n    // garbage collection can happen) should be added to this stack.\n    this._disposeCallbacks = [];\n    if (data && data.nestedGroups) {\n      this.nestedGroups = data.nestedGroups;\n      if (data.showNested == false) {\n        this.showNested = false;\n      } else {\n        this.showNested = true;\n      }\n    }\n    if (data && data.subgroupStack) {\n      if (typeof data.subgroupStack === \"boolean\") {\n        this.doInnerStack = data.subgroupStack;\n        this.subgroupStackAll = data.subgroupStack;\n      } else {\n        // We might be doing stacking on specific sub groups, but only\n        // if at least one is set to do stacking\n        for (const key in data.subgroupStack) {\n          if (!Object.prototype.hasOwnProperty.call(data.subgroupStack, key)) continue;\n          this.subgroupStack[key] = data.subgroupStack[key];\n          this.doInnerStack = this.doInnerStack || data.subgroupStack[key];\n        }\n      }\n    }\n    if (data && data.heightMode) {\n      this.heightMode = data.heightMode;\n    } else {\n      this.heightMode = itemSet.options.groupHeightMode;\n    }\n    this.nestedInGroup = null;\n    this.dom = {};\n    this.props = {\n      label: {\n        width: 0,\n        height: 0\n      }\n    };\n    this.className = null;\n    this.items = {}; // items filtered by groupId of this group\n    this.visibleItems = []; // items currently visible in window\n    this.itemsInRange = []; // items currently in range\n    this.orderedItems = {\n      byStart: [],\n      byEnd: []\n    };\n    this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap.\n\n    const handleCheckRangedItems = () => {\n      this.checkRangedItems = true;\n    };\n    this.itemSet.body.emitter.on(\"checkRangedItems\", handleCheckRangedItems);\n    this._disposeCallbacks.push(() => {\n      this.itemSet.body.emitter.off(\"checkRangedItems\", handleCheckRangedItems);\n    });\n    this._create();\n    this.setData(data);\n  }\n\n  /**\n   * Create DOM elements for the group\n   * @private\n   */\n  _create() {\n    const label = document.createElement(\"div\");\n    if (this.itemSet.options.groupEditable.order) {\n      label.className = \"vis-label draggable\";\n    } else {\n      label.className = \"vis-label\";\n    }\n    this.dom.label = label;\n    const inner = document.createElement(\"div\");\n    inner.className = \"vis-inner\";\n    label.appendChild(inner);\n    this.dom.inner = inner;\n    const foreground = document.createElement(\"div\");\n    foreground.className = \"vis-group\";\n    foreground[\"vis-group\"] = this;\n    this.dom.foreground = foreground;\n    this.dom.background = document.createElement(\"div\");\n    this.dom.background.className = \"vis-group\";\n    this.dom.axis = document.createElement(\"div\");\n    this.dom.axis.className = \"vis-group\";\n\n    // create a hidden marker to detect when the Timelines container is attached\n    // to the DOM, or the style of a parent of the Timeline is changed from\n    // display:none is changed to visible.\n    this.dom.marker = document.createElement(\"div\");\n    this.dom.marker.style.visibility = \"hidden\";\n    this.dom.marker.style.position = \"absolute\";\n    this.dom.marker.innerHTML = \"\";\n    this.dom.background.appendChild(this.dom.marker);\n  }\n\n  /**\n   * Set the group data for this group\n   * @param {Object} data   Group data, can contain properties content and className\n   */\n  setData(data) {\n    if (this.itemSet.groupTouchParams.isDragging) return;\n\n    // update contents\n    let content;\n    let templateFunction;\n    if (data && data.subgroupVisibility) {\n      for (const key in data.subgroupVisibility) {\n        if (!Object.prototype.hasOwnProperty.call(data.subgroupVisibility, key)) continue;\n        this.subgroupVisibility[key] = data.subgroupVisibility[key];\n      }\n    }\n    if (this.itemSet.options && this.itemSet.options.groupTemplate) {\n      var _context;\n      templateFunction = _bindInstanceProperty(_context = this.itemSet.options.groupTemplate).call(_context, this);\n      content = templateFunction(data, this.dom.inner);\n    } else {\n      content = data && data.content;\n    }\n    if (content instanceof Element) {\n      while (this.dom.inner.firstChild) {\n        this.dom.inner.removeChild(this.dom.inner.firstChild);\n      }\n      this.dom.inner.appendChild(content);\n    } else if (content instanceof Object && content.isReactComponent) ; else if (content instanceof Object) {\n      templateFunction(data, this.dom.inner);\n    } else if (content !== undefined && content !== null) {\n      this.dom.inner.innerHTML = availableUtils.xss(content);\n    } else {\n      this.dom.inner.innerHTML = availableUtils.xss(this.groupId || \"\"); // groupId can be null\n    }\n\n    // update title\n    this.dom.label.title = data && data.title || \"\";\n    if (!this.dom.inner.firstChild) {\n      availableUtils.addClassName(this.dom.inner, \"vis-hidden\");\n    } else {\n      availableUtils.removeClassName(this.dom.inner, \"vis-hidden\");\n    }\n    if (data && data.nestedGroups) {\n      if (!this.nestedGroups || this.nestedGroups != data.nestedGroups) {\n        this.nestedGroups = data.nestedGroups;\n      }\n      if (data.showNested !== undefined || this.showNested === undefined) {\n        if (data.showNested == false) {\n          this.showNested = false;\n        } else {\n          this.showNested = true;\n        }\n      }\n      availableUtils.addClassName(this.dom.label, \"vis-nesting-group\");\n      if (this.showNested) {\n        availableUtils.removeClassName(this.dom.label, \"collapsed\");\n        availableUtils.addClassName(this.dom.label, \"expanded\");\n      } else {\n        availableUtils.removeClassName(this.dom.label, \"expanded\");\n        availableUtils.addClassName(this.dom.label, \"collapsed\");\n      }\n    } else if (this.nestedGroups) {\n      this.nestedGroups = null;\n      availableUtils.removeClassName(this.dom.label, \"collapsed\");\n      availableUtils.removeClassName(this.dom.label, \"expanded\");\n      availableUtils.removeClassName(this.dom.label, \"vis-nesting-group\");\n    }\n    if (data && (data.treeLevel || data.nestedInGroup)) {\n      availableUtils.addClassName(this.dom.label, \"vis-nested-group\");\n      if (data.treeLevel) {\n        availableUtils.addClassName(this.dom.label, \"vis-group-level-\" + data.treeLevel);\n      } else {\n        // Nesting level is unknown, but we're sure it's at least 1\n        availableUtils.addClassName(this.dom.label, \"vis-group-level-unknown-but-gte1\");\n      }\n    } else {\n      availableUtils.addClassName(this.dom.label, \"vis-group-level-0\");\n    }\n\n    // update className\n    const className = data && data.className || null;\n    if (className != this.className) {\n      if (this.className) {\n        availableUtils.removeClassName(this.dom.label, this.className);\n        availableUtils.removeClassName(this.dom.foreground, this.className);\n        availableUtils.removeClassName(this.dom.background, this.className);\n        availableUtils.removeClassName(this.dom.axis, this.className);\n      }\n      availableUtils.addClassName(this.dom.label, className);\n      availableUtils.addClassName(this.dom.foreground, className);\n      availableUtils.addClassName(this.dom.background, className);\n      availableUtils.addClassName(this.dom.axis, className);\n      this.className = className;\n    }\n\n    // update style\n    if (this.style) {\n      availableUtils.removeCssText(this.dom.label, this.style);\n      this.style = null;\n    }\n    if (data && data.style) {\n      availableUtils.addCssText(this.dom.label, data.style);\n      this.style = data.style;\n    }\n  }\n\n  /**\n   * Get the width of the group label\n   * @return {number} width\n   */\n  getLabelWidth() {\n    return this.props.label.width;\n  }\n\n  /**\n   * check if group has had an initial height hange\n   * @returns {boolean}\n   */\n  _didMarkerHeightChange() {\n    const markerHeight = this.dom.marker.clientHeight;\n    if (markerHeight != this.lastMarkerHeight) {\n      this.lastMarkerHeight = markerHeight;\n      const redrawQueue = {};\n      let redrawQueueLength = 0;\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.items, (item, key) => {\n        item.dirty = true;\n        if (item.displayed) {\n          const returnQueue = true;\n          redrawQueue[key] = item.redraw(returnQueue);\n          redrawQueueLength = redrawQueue[key].length;\n        }\n      });\n      const needRedraw = redrawQueueLength > 0;\n      if (needRedraw) {\n        // redraw all regular items\n        for (let i = 0; i < redrawQueueLength; i++) {\n          _forEachInstanceProperty(availableUtils).call(availableUtils, redrawQueue, fns => {\n            fns[i]();\n          });\n        }\n      }\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * calculate group dimentions and position\n   * @param {number} pixels\n   */\n  _calculateGroupSizeAndPosition() {\n    const {\n      offsetTop,\n      offsetLeft,\n      offsetWidth\n    } = this.dom.foreground;\n    this.top = offsetTop;\n    this.right = offsetLeft;\n    this.width = offsetWidth;\n  }\n\n  /**\n   * checks if should bail redraw of items\n   * @returns {boolean} should bail\n   */\n  _shouldBailItemsRedraw() {\n    const me = this;\n    const timeoutOptions = this.itemSet.options.onTimeout;\n    const bailOptions = {\n      relativeBailingTime: this.itemSet.itemsSettingTime,\n      bailTimeMs: timeoutOptions && timeoutOptions.timeoutMs,\n      userBailFunction: timeoutOptions && timeoutOptions.callback,\n      shouldBailStackItems: this.shouldBailStackItems\n    };\n    let bail = null;\n    if (!this.itemSet.initialDrawDone) {\n      if (bailOptions.shouldBailStackItems) {\n        return true;\n      }\n      if (Math.abs(_Date$now() - new Date(bailOptions.relativeBailingTime)) > bailOptions.bailTimeMs) {\n        if (bailOptions.userBailFunction && this.itemSet.userContinueNotBail == null) {\n          bailOptions.userBailFunction(didUserContinue => {\n            me.itemSet.userContinueNotBail = didUserContinue;\n            bail = !didUserContinue;\n          });\n        } else if (me.itemSet.userContinueNotBail == false) {\n          bail = true;\n        } else {\n          bail = false;\n        }\n      }\n    }\n    return bail;\n  }\n\n  /**\n   * redraws items\n   * @param {boolean} forceRestack\n   * @param {boolean} lastIsVisible\n   * @param {number} margin\n   * @param {object} range\n   * @private\n   */\n  _redrawItems(forceRestack, lastIsVisible, margin, range) {\n    const restack = forceRestack || this.stackDirty || this.isVisible && !lastIsVisible;\n\n    // if restacking, reposition visible items vertically\n    if (restack) {\n      var _context2, _context3, _context4, _context5, _context6, _context7;\n      const orderedItems = {\n        byEnd: _filterInstanceProperty(_context2 = this.orderedItems.byEnd).call(_context2, item => !item.isCluster),\n        byStart: _filterInstanceProperty(_context3 = this.orderedItems.byStart).call(_context3, item => !item.isCluster)\n      };\n      const orderedClusters = {\n        byEnd: [...new _Set(_filterInstanceProperty(_context4 = _mapInstanceProperty(_context5 = this.orderedItems.byEnd).call(_context5, item => item.cluster)).call(_context4, item => !!item))],\n        byStart: [...new _Set(_filterInstanceProperty(_context6 = _mapInstanceProperty(_context7 = this.orderedItems.byStart).call(_context7, item => item.cluster)).call(_context6, item => !!item))]\n      };\n\n      /**\n       * Get all visible items in range\n       * @return {array} items\n       */\n      const getVisibleItems = () => {\n        var _context8, _context9;\n        const visibleItems = this._updateItemsInRange(orderedItems, _filterInstanceProperty(_context8 = this.visibleItems).call(_context8, item => !item.isCluster), range);\n        const visibleClusters = this._updateClustersInRange(orderedClusters, _filterInstanceProperty(_context9 = this.visibleItems).call(_context9, item => item.isCluster), range);\n        return [...visibleItems, ...visibleClusters];\n      };\n\n      /**\n       * Get visible items grouped by subgroup\n       * @param {function} orderFn An optional function to order items inside the subgroups\n       * @return {Object}\n       */\n      const getVisibleItemsGroupedBySubgroup = orderFn => {\n        let visibleSubgroupsItems = {};\n        for (const subgroup in this.subgroups) {\n          var _context0;\n          if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup)) continue;\n          const items = _filterInstanceProperty(_context0 = this.visibleItems).call(_context0, item => item.data.subgroup === subgroup);\n          visibleSubgroupsItems[subgroup] = orderFn ? _sortInstanceProperty(items).call(items, (a, b) => orderFn(a.data, b.data)) : items;\n        }\n        return visibleSubgroupsItems;\n      };\n      if (typeof this.itemSet.options.order === \"function\") {\n        // a custom order function\n        //show all items\n        const me = this;\n        if (this.doInnerStack && this.itemSet.options.stackSubgroups) {\n          // Order the items within each subgroup\n          const visibleSubgroupsItems = getVisibleItemsGroupedBySubgroup(this.itemSet.options.order);\n          stackSubgroupsWithInnerStack(visibleSubgroupsItems, margin, this.subgroups);\n          this.visibleItems = getVisibleItems();\n          this._updateSubGroupHeights(margin);\n        } else {\n          var _context1, _context10, _context11, _context12;\n          this.visibleItems = getVisibleItems();\n          this._updateSubGroupHeights(margin);\n          // order all items and force a restacking\n          // order all items outside clusters and force a restacking\n          const customOrderedItems = _sortInstanceProperty(_context1 = _filterInstanceProperty(_context10 = _sliceInstanceProperty(_context11 = this.visibleItems).call(_context11)).call(_context10, item => item.isCluster || !item.isCluster && !item.cluster)).call(_context1, (a, b) => {\n            return me.itemSet.options.order(a.data, b.data);\n          });\n          this.shouldBailStackItems = stack(customOrderedItems, margin, true, _bindInstanceProperty(_context12 = this._shouldBailItemsRedraw).call(_context12, this));\n        }\n      } else {\n        // no custom order function, lazy stacking\n        this.visibleItems = getVisibleItems();\n        this._updateSubGroupHeights(margin);\n        if (this.itemSet.options.stack) {\n          if (this.doInnerStack && this.itemSet.options.stackSubgroups) {\n            const visibleSubgroupsItems = getVisibleItemsGroupedBySubgroup();\n            stackSubgroupsWithInnerStack(visibleSubgroupsItems, margin, this.subgroups);\n          } else {\n            var _context13;\n            // TODO: ugly way to access options...\n            this.shouldBailStackItems = stack(this.visibleItems, margin, true, _bindInstanceProperty(_context13 = this._shouldBailItemsRedraw).call(_context13, this));\n          }\n        } else {\n          // no stacking\n          nostack(this.visibleItems, margin, this.subgroups, this.itemSet.options.stackSubgroups);\n        }\n      }\n      for (let i = 0; i < this.visibleItems.length; i++) {\n        this.visibleItems[i].repositionX();\n        if (this.subgroupVisibility[this.visibleItems[i].data.subgroup] !== undefined) {\n          if (!this.subgroupVisibility[this.visibleItems[i].data.subgroup]) {\n            this.visibleItems[i].hide();\n          }\n        }\n      }\n      if (this.itemSet.options.cluster) {\n        _forEachInstanceProperty(availableUtils).call(availableUtils, this.items, item => {\n          if (item.cluster && item.displayed) {\n            item.hide();\n          }\n        });\n      }\n      if (this.shouldBailStackItems) {\n        this.itemSet.body.emitter.emit(\"destroyTimeline\");\n      }\n      this.stackDirty = false;\n    }\n  }\n\n  /**\n   * check if group resized\n   * @param {boolean} resized\n   * @param {number} height\n   * @return {boolean} did resize\n   */\n  _didResize(resized, height) {\n    resized = availableUtils.updateProperty(this, \"height\", height) || resized;\n    // recalculate size of label\n    const labelWidth = this.dom.inner.clientWidth;\n    const labelHeight = this.dom.inner.clientHeight;\n    resized = availableUtils.updateProperty(this.props.label, \"width\", labelWidth) || resized;\n    resized = availableUtils.updateProperty(this.props.label, \"height\", labelHeight) || resized;\n    return resized;\n  }\n\n  /**\n   * apply group height\n   * @param {number} height\n   */\n  _applyGroupHeight(height) {\n    this.dom.background.style.height = \"\".concat(height, \"px\");\n    this.dom.foreground.style.height = \"\".concat(height, \"px\");\n    this.dom.label.style.height = \"\".concat(height, \"px\");\n  }\n\n  /**\n   * update vertical position of items after they are re-stacked and the height of the group is calculated\n   * @param {number} margin\n   */\n  _updateItemsVerticalPosition(margin) {\n    for (let i = 0, ii = this.visibleItems.length; i < ii; i++) {\n      const item = this.visibleItems[i];\n      item.repositionY(margin);\n      if (!this.isVisible && this.groupId != ReservedGroupIds$1.BACKGROUND) {\n        if (item.displayed) item.hide();\n      }\n    }\n  }\n\n  /**\n   * Repaint this group\n   * @param {{start: number, end: number}} range\n   * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n   * @param {boolean} [forceRestack=false]  Force restacking of all items\n   * @param {boolean} [returnQueue=false]  return the queue or if the group resized\n   * @return {boolean} Returns true if the group is resized or the redraw queue if returnQueue=true\n   */\n  redraw(range, margin, forceRestack, returnQueue) {\n    var _context14, _context15, _context18, _context20, _context24;\n    let resized = false;\n    const lastIsVisible = this.isVisible;\n    let height;\n    const queue = [() => {\n      forceRestack = this._didMarkerHeightChange.call(this) || forceRestack;\n    },\n    // recalculate the height of the subgroups\n    _bindInstanceProperty(_context14 = this._updateSubGroupHeights).call(_context14, this, margin),\n    // calculate actual size and position\n    _bindInstanceProperty(_context15 = this._calculateGroupSizeAndPosition).call(_context15, this), () => {\n      var _context16;\n      this.isVisible = _bindInstanceProperty(_context16 = this._isGroupVisible).call(_context16, this)(range, margin);\n    }, () => {\n      var _context17;\n      _bindInstanceProperty(_context17 = this._redrawItems).call(_context17, this)(forceRestack, lastIsVisible, margin, range);\n    },\n    // update subgroups\n    _bindInstanceProperty(_context18 = this._updateSubgroupsSizes).call(_context18, this), () => {\n      var _context19;\n      height = this.height = _bindInstanceProperty(_context19 = this._calculateHeight).call(_context19, this)(margin);\n    },\n    // calculate actual size and position again\n    _bindInstanceProperty(_context20 = this._calculateGroupSizeAndPosition).call(_context20, this), () => {\n      var _context21;\n      resized = _bindInstanceProperty(_context21 = this._didResize).call(_context21, this)(resized, height);\n    }, () => {\n      var _context22;\n      _bindInstanceProperty(_context22 = this._applyGroupHeight).call(_context22, this)(height);\n    }, () => {\n      var _context23;\n      _bindInstanceProperty(_context23 = this._updateItemsVerticalPosition).call(_context23, this)(margin);\n    }, _bindInstanceProperty(_context24 = () => {\n      if (!this.isVisible && this.height) {\n        resized = false;\n      }\n      return resized;\n    }).call(_context24, this)];\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      _forEachInstanceProperty(queue).call(queue, fn => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * recalculate the height of the subgroups\n   *\n   * @param {{item: timeline.Item}} margin\n   * @private\n   */\n  _updateSubGroupHeights(margin) {\n    if (_Object$keys(this.subgroups).length > 0) {\n      const me = this;\n      this._resetSubgroups();\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.visibleItems, item => {\n        if (item.data.subgroup !== undefined) {\n          me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height + margin.item.vertical);\n          me.subgroups[item.data.subgroup].visible = typeof this.subgroupVisibility[item.data.subgroup] === \"undefined\" ? true : Boolean(this.subgroupVisibility[item.data.subgroup]);\n        }\n      });\n    }\n  }\n\n  /**\n   * check if group is visible\n   *\n   * @param {timeline.Range} range\n   * @param {{axis: timeline.DataAxis}} margin\n   * @returns {boolean} is visible\n   * @private\n   */\n  _isGroupVisible(range, margin) {\n    return this.top <= range.body.domProps.centerContainer.height - range.body.domProps.scrollTop + margin.axis && this.top + this.height + margin.axis >= -range.body.domProps.scrollTop;\n  }\n\n  /**\n   * recalculate the height of the group\n   * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n   * @returns {number} Returns the height\n   * @private\n   */\n  _calculateHeight(margin) {\n    // recalculate the height of the group\n    let height;\n    let items;\n    if (this.heightMode === \"fixed\") {\n      items = availableUtils.toArray(this.items);\n    } else {\n      // default or 'auto'\n      items = this.visibleItems;\n    }\n    if (!this.isVisible && this.height) {\n      height = Math.max(this.height, this.props.label.height);\n    } else if (items.length > 0) {\n      let min = items[0].top;\n      let max = items[0].top + items[0].height;\n      _forEachInstanceProperty(availableUtils).call(availableUtils, items, item => {\n        min = Math.min(min, item.top);\n        max = Math.max(max, item.top + item.height);\n      });\n      if (min > margin.axis) {\n        // there is an empty gap between the lowest item and the axis\n        const offset = min - margin.axis;\n        max -= offset;\n        _forEachInstanceProperty(availableUtils).call(availableUtils, items, item => {\n          item.top -= offset;\n        });\n      }\n      height = Math.ceil(max + margin.item.vertical / 2);\n      if (this.heightMode !== \"fitItems\") {\n        height = Math.max(height, this.props.label.height);\n      }\n    } else {\n      height = this.props.label.height;\n    }\n    return height;\n  }\n\n  /**\n   * Show this group: attach to the DOM\n   */\n  show() {\n    if (!this.dom.label.parentNode) {\n      this.itemSet.dom.labelSet.appendChild(this.dom.label);\n    }\n    if (!this.dom.foreground.parentNode) {\n      this.itemSet.dom.foreground.appendChild(this.dom.foreground);\n    }\n    if (!this.dom.background.parentNode) {\n      this.itemSet.dom.background.appendChild(this.dom.background);\n    }\n    if (!this.dom.axis.parentNode) {\n      this.itemSet.dom.axis.appendChild(this.dom.axis);\n    }\n  }\n\n  /**\n   * Hide this group: remove from the DOM\n   */\n  hide() {\n    const label = this.dom.label;\n    if (label.parentNode) {\n      label.parentNode.removeChild(label);\n    }\n    const foreground = this.dom.foreground;\n    if (foreground.parentNode) {\n      foreground.parentNode.removeChild(foreground);\n    }\n    const background = this.dom.background;\n    if (background.parentNode) {\n      background.parentNode.removeChild(background);\n    }\n    const axis = this.dom.axis;\n    if (axis.parentNode) {\n      axis.parentNode.removeChild(axis);\n    }\n  }\n\n  /**\n   * Add an item to the group\n   * @param {Item} item\n   */\n  add(item) {\n    var _context25;\n    this.items[item.id] = item;\n    item.setParent(this);\n    this.stackDirty = true;\n    // add to\n    if (item.data.subgroup !== undefined) {\n      this._addToSubgroup(item);\n      this.orderSubgroups();\n    }\n    if (!_includesInstanceProperty(_context25 = this.visibleItems).call(_context25, item)) {\n      const range = this.itemSet.body.range; // TODO: not nice accessing the range like this\n      this._checkIfVisible(item, this.visibleItems, range);\n    }\n  }\n\n  /**\n   * add item to subgroup\n   * @param {object} item\n   * @param {string} subgroupId\n   */\n  _addToSubgroup(item) {\n    let subgroupId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : item.data.subgroup;\n    if (subgroupId != undefined && this.subgroups[subgroupId] === undefined) {\n      this.subgroups[subgroupId] = {\n        height: 0,\n        top: 0,\n        start: item.data.start,\n        end: item.data.end || item.data.start,\n        visible: false,\n        index: this.subgroupIndex,\n        items: [],\n        stack: this.subgroupStackAll || this.subgroupStack[subgroupId] || false\n      };\n      this.subgroupIndex++;\n    }\n    if (new Date(item.data.start) < new Date(this.subgroups[subgroupId].start)) {\n      this.subgroups[subgroupId].start = item.data.start;\n    }\n    const itemEnd = item.data.end || item.data.start;\n    if (new Date(itemEnd) > new Date(this.subgroups[subgroupId].end)) {\n      this.subgroups[subgroupId].end = itemEnd;\n    }\n    this.subgroups[subgroupId].items.push(item);\n  }\n\n  /**\n   * update subgroup sizes\n   */\n  _updateSubgroupsSizes() {\n    const me = this;\n    if (me.subgroups) {\n      for (const subgroup in me.subgroups) {\n        var _context26;\n        if (!Object.prototype.hasOwnProperty.call(me.subgroups, subgroup)) continue;\n        const initialEnd = me.subgroups[subgroup].items[0].data.end || me.subgroups[subgroup].items[0].data.start;\n        let newStart = me.subgroups[subgroup].items[0].data.start;\n        let newEnd = initialEnd - 1;\n        _forEachInstanceProperty(_context26 = me.subgroups[subgroup].items).call(_context26, item => {\n          if (new Date(item.data.start) < new Date(newStart)) {\n            newStart = item.data.start;\n          }\n          const itemEnd = item.data.end || item.data.start;\n          if (new Date(itemEnd) > new Date(newEnd)) {\n            newEnd = itemEnd;\n          }\n        });\n        me.subgroups[subgroup].start = newStart;\n        me.subgroups[subgroup].end = new Date(newEnd - 1); // -1 to compensate for colliding end to start subgroups;\n      }\n    }\n  }\n\n  /**\n   * order subgroups\n   */\n  orderSubgroups() {\n    if (this.subgroupOrderer !== undefined) {\n      const sortArray = [];\n      if (typeof this.subgroupOrderer == \"string\") {\n        for (const subgroup in this.subgroups) {\n          if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup)) continue;\n          sortArray.push({\n            subgroup,\n            sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer]\n          });\n        }\n        _sortInstanceProperty(sortArray).call(sortArray, (a, b) => a.sortField - b.sortField);\n      } else if (typeof this.subgroupOrderer == \"function\") {\n        for (const subgroup in this.subgroups) {\n          if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup)) continue;\n          sortArray.push(this.subgroups[subgroup].items[0].data);\n        }\n        _sortInstanceProperty(sortArray).call(sortArray, this.subgroupOrderer);\n      }\n      if (sortArray.length > 0) {\n        for (let i = 0; i < sortArray.length; i++) {\n          this.subgroups[sortArray[i].subgroup].index = i;\n        }\n      }\n    }\n  }\n\n  /**\n   * add item to subgroup\n   */\n  _resetSubgroups() {\n    for (const subgroup in this.subgroups) {\n      if (!Object.prototype.hasOwnProperty.call(this.subgroups, subgroup)) continue;\n      this.subgroups[subgroup].visible = false;\n      this.subgroups[subgroup].height = 0;\n    }\n  }\n\n  /**\n   * Remove an item from the group\n   * @param {Item} item\n   */\n  remove(item) {\n    var _context27, _context28;\n    delete this.items[item.id];\n    item.setParent(null);\n    this.stackDirty = true;\n\n    // remove from visible items\n    const index = _indexOfInstanceProperty(_context27 = this.visibleItems).call(_context27, item);\n    if (index != -1) _spliceInstanceProperty(_context28 = this.visibleItems).call(_context28, index, 1);\n    if (item.data.subgroup !== undefined) {\n      this._removeFromSubgroup(item);\n      this.orderSubgroups();\n    }\n  }\n\n  /**\n   * remove item from subgroup\n   * @param {object} item\n   * @param {string} subgroupId\n   */\n  _removeFromSubgroup(item) {\n    let subgroupId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : item.data.subgroup;\n    if (subgroupId != undefined) {\n      const subgroup = this.subgroups[subgroupId];\n      if (subgroup) {\n        var _context29;\n        const itemIndex = _indexOfInstanceProperty(_context29 = subgroup.items).call(_context29, item);\n        //  Check the item is actually in this subgroup. How should items not in the group be handled?\n        if (itemIndex >= 0) {\n          var _context30;\n          _spliceInstanceProperty(_context30 = subgroup.items).call(_context30, itemIndex, 1);\n          if (!subgroup.items.length) {\n            delete this.subgroups[subgroupId];\n          } else {\n            this._updateSubgroupsSizes();\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Remove an item from the corresponding DataSet\n   * @param {Item} item\n   */\n  removeFromDataSet(item) {\n    this.itemSet.removeItem(item.id);\n  }\n\n  /**\n   * Reorder the items\n   */\n  order() {\n    const array = availableUtils.toArray(this.items);\n    const startArray = [];\n    const endArray = [];\n    for (let i = 0; i < array.length; i++) {\n      if (array[i].data.end !== undefined) {\n        endArray.push(array[i]);\n      }\n      startArray.push(array[i]);\n    }\n    this.orderedItems = {\n      byStart: startArray,\n      byEnd: endArray\n    };\n    orderByStart(this.orderedItems.byStart);\n    orderByEnd(this.orderedItems.byEnd);\n  }\n\n  /**\n   * Update the visible items\n   * @param {{byStart: Item[], byEnd: Item[]}} orderedItems   All items ordered by start date and by end date\n   * @param {Item[]} oldVisibleItems                          The previously visible items.\n   * @param {{start: number, end: number}} range              Visible range\n   * @return {Item[]} visibleItems                            The new visible items.\n   * @private\n   */\n  _updateItemsInRange(orderedItems, oldVisibleItems, range) {\n    const visibleItems = [];\n    const visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems\n\n    if (!this.isVisible && this.height !== undefined && this.groupId != ReservedGroupIds$1.BACKGROUND) {\n      for (let i = 0; i < oldVisibleItems.length; i++) {\n        var item = oldVisibleItems[i];\n        if (item.displayed) item.hide();\n      }\n      return visibleItems;\n    }\n    const interval = (range.end - range.start) / 4;\n    const lowerBound = range.start - interval;\n    const upperBound = range.end + interval;\n\n    // this function is used to do the binary search for items having start date only.\n    const startSearchFunction = value => {\n      if (value < lowerBound) {\n        return -1;\n      } else if (value <= upperBound) {\n        return 0;\n      } else {\n        return 1;\n      }\n    };\n\n    // this function is used to do the binary search for items having start and end dates (range).\n    const endSearchFunction = data => {\n      const {\n        start,\n        end\n      } = data;\n      if (end < lowerBound) {\n        return -1;\n      } else if (start <= upperBound) {\n        return 0;\n      } else {\n        return 1;\n      }\n    };\n\n    // first check if the items that were in view previously are still in view.\n    // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window!\n    // also cleans up invisible items.\n    if (oldVisibleItems.length > 0) {\n      for (let i = 0; i < oldVisibleItems.length; i++) {\n        this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range);\n      }\n    }\n\n    // we do a binary search for the items that have only start values.\n    const initialPosByStart = availableUtils.binarySearchCustom(orderedItems.byStart, startSearchFunction, \"data\", \"start\");\n\n    // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values.\n    this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, item => item.data.start < lowerBound || item.data.start > upperBound);\n\n    // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown.\n    // We therefore have to brute force check all items in the byEnd list\n    if (this.checkRangedItems == true) {\n      this.checkRangedItems = false;\n      for (let i = 0; i < orderedItems.byEnd.length; i++) {\n        this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range);\n      }\n    } else {\n      // we do a binary search for the items that have defined end times.\n      const initialPosByEnd = availableUtils.binarySearchCustom(orderedItems.byEnd, endSearchFunction, \"data\");\n\n      // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values.\n      this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, item => item.data.end < lowerBound || item.data.start > upperBound);\n    }\n    this._sortVisibleItems(orderedItems.byStart, visibleItems, visibleItemsLookup);\n    const redrawQueue = {};\n    let redrawQueueLength = 0;\n    for (let i = 0; i < visibleItems.length; i++) {\n      const item = visibleItems[i];\n      if (!item.displayed) {\n        const returnQueue = true;\n        redrawQueue[i] = item.redraw(returnQueue);\n        redrawQueueLength = redrawQueue[i].length;\n      }\n    }\n    const needRedraw = redrawQueueLength > 0;\n    if (needRedraw) {\n      // redraw all regular items\n      for (let j = 0; j < redrawQueueLength; j++) {\n        _forEachInstanceProperty(availableUtils).call(availableUtils, redrawQueue, fns => {\n          fns[j]();\n        });\n      }\n    }\n    for (let i = 0; i < visibleItems.length; i++) {\n      visibleItems[i].repositionX();\n    }\n    return visibleItems;\n  }\n\n  /**\n   * trace visible items in group\n   * @param {number} initialPos\n   * @param {array} items\n   * @param {aray} visibleItems\n   * @param {object} visibleItemsLookup\n   * @param {function} breakCondition\n   */\n  _traceVisible(initialPos, items, visibleItems, visibleItemsLookup, breakCondition) {\n    if (initialPos != -1) {\n      for (let i = initialPos; i >= 0; i--) {\n        let item = items[i];\n        if (breakCondition(item)) {\n          break;\n        } else {\n          if (!(item.isCluster && !item.hasItems()) && !item.cluster) {\n            if (visibleItemsLookup[item.id] === undefined) {\n              visibleItemsLookup[item.id] = true;\n              visibleItems.unshift(item);\n            }\n          }\n        }\n      }\n      for (let i = initialPos + 1; i < items.length; i++) {\n        let item = items[i];\n        if (breakCondition(item)) {\n          break;\n        } else {\n          if (!(item.isCluster && !item.hasItems()) && !item.cluster) {\n            if (visibleItemsLookup[item.id] === undefined) {\n              visibleItemsLookup[item.id] = true;\n              visibleItems.push(item);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * by-ref reordering of visibleItems array to match\n   * the specified item superset order\n   * @param {array} orderedItems\n   * @param {aray} visibleItems\n   * @param {object} visibleItemsLookup\n   */\n  _sortVisibleItems(orderedItems, visibleItems, visibleItemsLookup) {\n    visibleItems.length = 0; // Clear visibleItems array in-place\n    for (let i = 0; i < orderedItems.length; i++) {\n      let item = orderedItems[i];\n      if (visibleItemsLookup[item.id]) {\n        visibleItems.push(item);\n      }\n    }\n  }\n\n  /**\n   * this function is very similar to the _checkIfInvisible() but it does not\n   * return booleans, hides the item if it should not be seen and always adds to\n   * the visibleItems.\n   * this one is for brute forcing and hiding.\n   *\n   * @param {Item} item\n   * @param {Array} visibleItems\n   * @param {{start:number, end:number}} range\n   * @private\n   */\n  _checkIfVisible(item, visibleItems, range) {\n    if (item.isVisible(range)) {\n      if (!item.displayed) item.show();\n      // reposition item horizontally\n      item.repositionX();\n      visibleItems.push(item);\n    } else {\n      if (item.displayed) item.hide();\n    }\n  }\n\n  /**\n   * this function is very similar to the _checkIfInvisible() but it does not\n   * return booleans, hides the item if it should not be seen and always adds to\n   * the visibleItems.\n   * this one is for brute forcing and hiding.\n   *\n   * @param {Item} item\n   * @param {Array.<timeline.Item>} visibleItems\n   * @param {Object<number, boolean>} visibleItemsLookup\n   * @param {{start:number, end:number}} range\n   * @private\n   */\n  _checkIfVisibleWithReference(item, visibleItems, visibleItemsLookup, range) {\n    if (item.isVisible(range)) {\n      if (visibleItemsLookup[item.id] === undefined) {\n        visibleItemsLookup[item.id] = true;\n        visibleItems.push(item);\n      }\n    } else {\n      if (item.displayed) item.hide();\n    }\n  }\n\n  /**\n   * Update the visible items\n   * @param {array} orderedClusters\n   * @param {array} oldVisibleClusters\n   * @param {{start: number, end: number}} range\n   * @return {Item[]} visibleItems\n   * @private\n   */\n  _updateClustersInRange(orderedClusters, oldVisibleClusters, range) {\n    // Clusters can overlap each other so we cannot use binary search here\n    const visibleClusters = [];\n    const visibleClustersLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems\n\n    if (oldVisibleClusters.length > 0) {\n      for (let i = 0; i < oldVisibleClusters.length; i++) {\n        this._checkIfVisibleWithReference(oldVisibleClusters[i], visibleClusters, visibleClustersLookup, range);\n      }\n    }\n    for (let i = 0; i < orderedClusters.byStart.length; i++) {\n      this._checkIfVisibleWithReference(orderedClusters.byStart[i], visibleClusters, visibleClustersLookup, range);\n    }\n    for (let i = 0; i < orderedClusters.byEnd.length; i++) {\n      this._checkIfVisibleWithReference(orderedClusters.byEnd[i], visibleClusters, visibleClustersLookup, range);\n    }\n    const redrawQueue = {};\n    let redrawQueueLength = 0;\n    for (let i = 0; i < visibleClusters.length; i++) {\n      const item = visibleClusters[i];\n      if (!item.displayed) {\n        const returnQueue = true;\n        redrawQueue[i] = item.redraw(returnQueue);\n        redrawQueueLength = redrawQueue[i].length;\n      }\n    }\n    const needRedraw = redrawQueueLength > 0;\n    if (needRedraw) {\n      // redraw all regular items\n      for (var j = 0; j < redrawQueueLength; j++) {\n        _forEachInstanceProperty(availableUtils).call(availableUtils, redrawQueue, function (fns) {\n          fns[j]();\n        });\n      }\n    }\n    for (let i = 0; i < visibleClusters.length; i++) {\n      visibleClusters[i].repositionX();\n    }\n    return visibleClusters;\n  }\n\n  /**\n   * change item subgroup\n   * @param {object} item\n   * @param {string} oldSubgroup\n   * @param {string} newSubgroup\n   */\n  changeSubgroup(item, oldSubgroup, newSubgroup) {\n    this._removeFromSubgroup(item, oldSubgroup);\n    this._addToSubgroup(item, newSubgroup);\n    this.orderSubgroups();\n  }\n\n  /**\n   * Call this method before you lose the last reference to an instance of this.\n   * It will remove listeners etc.\n   */\n  dispose() {\n    this.hide();\n    let disposeCallback;\n    while (disposeCallback = this._disposeCallbacks.pop()) {\n      disposeCallback();\n    }\n  }\n}\n\n/**\n * @constructor BackgroundGroup\n * @extends Group\n */\nclass BackgroundGroup extends Group {\n  /**\n   * @param {number | string} groupId\n   * @param {Object} data\n   * @param {ItemSet} itemSet\n   */\n  constructor(groupId, data, itemSet) {\n    super(groupId, data, itemSet);\n    // Group.call(this, groupId, data, itemSet);\n\n    this.width = 0;\n    this.height = 0;\n    this.top = 0;\n    this.left = 0;\n  }\n\n  /**\n   * Repaint this group\n   * @param {{start: number, end: number}} range\n   * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n   * @return {boolean} Returns true if the group is resized\n   */\n  redraw(range, margin) {\n    const resized = false;\n    this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);\n\n    // calculate actual size\n    this.width = this.dom.background.offsetWidth;\n\n    // apply new height (just always zero for BackgroundGroup\n    this.dom.background.style.height = \"0\";\n\n    // update vertical position of items after they are re-stacked and the height of the group is calculated\n    for (let i = 0, ii = this.visibleItems.length; i < ii; i++) {\n      const item = this.visibleItems[i];\n      item.repositionY(margin);\n    }\n    return resized;\n  }\n\n  /**\n   * Show this group: attach to the DOM\n   */\n  show() {\n    if (!this.dom.background.parentNode) {\n      this.itemSet.dom.background.appendChild(this.dom.background);\n    }\n  }\n}\n\n/**\n * Item\n */\nclass Item {\n  /**\n   * @constructor Item\n   * @param {Object} data             Object containing (optional) parameters type,\n   *                                  start, end, content, group, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} options          Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    var _context;\n    this.id = null;\n    this.parent = null;\n    this.data = data;\n    this.dom = null;\n    this.conversion = conversion || {};\n    this.defaultOptions = {\n      locales,\n      locale: \"en\"\n    };\n    this.options = availableUtils.extend({}, this.defaultOptions, options);\n    this.options.locales = availableUtils.extend({}, locales, this.options.locales);\n    const defaultLocales = this.defaultOptions.locales[this.defaultOptions.locale];\n    _forEachInstanceProperty(_context = _Object$keys(this.options.locales)).call(_context, locale => {\n      this.options.locales[locale] = availableUtils.extend({}, defaultLocales, this.options.locales[locale]);\n    });\n    this.selected = false;\n    this.displayed = false;\n    this.groupShowing = true;\n    this.selectable = options && options.selectable || false;\n    this.dirty = true;\n    this.top = null;\n    this.right = null;\n    this.left = null;\n    this.width = null;\n    this.height = null;\n    this.setSelectability(data);\n    this.editable = null;\n    this._updateEditStatus();\n  }\n\n  /**\n   * Select current item\n   */\n  select() {\n    if (this.selectable) {\n      this.selected = true;\n      this.dirty = true;\n      if (this.displayed) this.redraw();\n    }\n  }\n\n  /**\n   * Unselect current item\n   */\n  unselect() {\n    this.selected = false;\n    this.dirty = true;\n    if (this.displayed) this.redraw();\n  }\n\n  /**\n   * Set data for the item. Existing data will be updated. The id should not\n   * be changed. When the item is displayed, it will be redrawn immediately.\n   * @param {Object} data\n   */\n  setData(data) {\n    const groupChanged = data.group != undefined && this.data.group != data.group;\n    if (groupChanged && this.parent != null) {\n      this.parent.itemSet._moveToGroup(this, data.group);\n    }\n    this.setSelectability(data);\n    if (this.parent) {\n      this.parent.stackDirty = true;\n    }\n    const subGroupChanged = data.subgroup != undefined && this.data.subgroup != data.subgroup;\n    if (subGroupChanged && this.parent != null) {\n      this.parent.changeSubgroup(this, this.data.subgroup, data.subgroup);\n    }\n    this.data = data;\n    this._updateEditStatus();\n    this.dirty = true;\n    if (this.displayed) this.redraw();\n  }\n\n  /**\n   * Set whether the item can be selected.\n   * Can only be set/unset if the timeline's `selectable` configuration option is `true`.\n   * @param {Object} data `data` from `constructor` and `setData`\n   */\n  setSelectability(data) {\n    if (data) {\n      this.selectable = typeof data.selectable === \"undefined\" ? true : Boolean(data.selectable);\n    }\n  }\n\n  /**\n   * Set a parent for the item\n   * @param {Group} parent\n   */\n  setParent(parent) {\n    if (this.displayed) {\n      this.hide();\n      this.parent = parent;\n      if (this.parent) {\n        this.show();\n      }\n    } else {\n      this.parent = parent;\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @returns {boolean} True if visible\n   */\n  isVisible() {\n    return false;\n  }\n\n  /**\n   * Show the Item in the DOM (when not already visible)\n   * @return {Boolean} changed\n   */\n  show() {\n    return false;\n  }\n\n  /**\n   * Hide the Item from the DOM (when visible)\n   * @return {Boolean} changed\n   */\n  hide() {\n    return false;\n  }\n\n  /**\n   * Repaint the item\n   */\n  redraw() {\n    // should be implemented by the item\n  }\n\n  /**\n   * Reposition the Item horizontally\n   */\n  repositionX() {\n    // should be implemented by the item\n  }\n\n  /**\n   * Reposition the Item vertically\n   */\n  repositionY() {\n    // should be implemented by the item\n  }\n\n  /**\n   * Repaint a drag area on the center of the item when the item is selected\n   * @protected\n   */\n  _repaintDragCenter() {\n    if (this.selected && this.editable.updateTime && !this.dom.dragCenter) {\n      var _context2, _context3;\n      const me = this;\n      // create and show drag area\n      const dragCenter = document.createElement(\"div\");\n      dragCenter.className = \"vis-drag-center\";\n      dragCenter.dragCenterItem = this;\n      this.hammerDragCenter = new Hammer(dragCenter);\n      this.hammerDragCenter.on(\"tap\", event => {\n        me.parent.itemSet.body.emitter.emit(\"click\", {\n          event,\n          item: me.id\n        });\n      });\n      this.hammerDragCenter.on(\"doubletap\", event => {\n        event.stopPropagation();\n        me.parent.itemSet._onUpdateItem(me);\n        me.parent.itemSet.body.emitter.emit(\"doubleClick\", {\n          event,\n          item: me.id\n        });\n      });\n      this.hammerDragCenter.on(\"panstart\", event => {\n        // do not allow this event to propagate to the Range\n        event.stopPropagation();\n        me.parent.itemSet._onDragStart(event);\n      });\n      this.hammerDragCenter.on(\"panmove\", _bindInstanceProperty(_context2 = me.parent.itemSet._onDrag).call(_context2, me.parent.itemSet));\n      this.hammerDragCenter.on(\"panend\", _bindInstanceProperty(_context3 = me.parent.itemSet._onDragEnd).call(_context3, me.parent.itemSet));\n      // delay addition on item click for trackpads...\n      this.hammerDragCenter.get(\"press\").set({\n        time: 10000\n      });\n      if (this.dom.box) {\n        if (this.dom.dragLeft) {\n          this.dom.box.insertBefore(dragCenter, this.dom.dragLeft);\n        } else {\n          this.dom.box.appendChild(dragCenter);\n        }\n      } else if (this.dom.point) {\n        this.dom.point.appendChild(dragCenter);\n      }\n      this.dom.dragCenter = dragCenter;\n    } else if (!this.selected && this.dom.dragCenter) {\n      // delete drag area\n      if (this.dom.dragCenter.parentNode) {\n        this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter);\n      }\n      this.dom.dragCenter = null;\n      if (this.hammerDragCenter) {\n        this.hammerDragCenter.destroy();\n        this.hammerDragCenter = null;\n      }\n    }\n  }\n\n  /**\n   * Repaint a delete button on the top right of the item when the item is selected\n   * @param {HTMLElement} anchor\n   * @protected\n   */\n  _repaintDeleteButton(anchor) {\n    const editable = (this.options.editable.overrideItems || this.editable == null) && this.options.editable.remove || !this.options.editable.overrideItems && this.editable != null && this.editable.remove;\n    if (this.selected && editable && !this.dom.deleteButton) {\n      // create and show button\n      const me = this;\n      const deleteButton = document.createElement(\"div\");\n      if (this.options.rtl) {\n        deleteButton.className = \"vis-delete-rtl\";\n      } else {\n        deleteButton.className = \"vis-delete\";\n      }\n      let optionsLocale = this.options.locales[this.options.locale];\n      if (!optionsLocale) {\n        if (!this.warned) {\n          console.warn(\"WARNING: options.locales['\".concat(this.options.locale, \"'] not found. See https://visjs.github.io/vis-timeline/docs/timeline/#Localization\"));\n          this.warned = true;\n        }\n        optionsLocale = this.options.locales[\"en\"]; // fall back on english when not available\n      }\n      deleteButton.title = optionsLocale.deleteSelected;\n\n      // TODO: be able to destroy the delete button\n      this.hammerDeleteButton = new Hammer(deleteButton).on(\"tap\", event => {\n        event.stopPropagation();\n        me.parent.removeFromDataSet(me);\n      });\n      anchor.appendChild(deleteButton);\n      this.dom.deleteButton = deleteButton;\n    } else if ((!this.selected || !editable) && this.dom.deleteButton) {\n      // remove button\n      if (this.dom.deleteButton.parentNode) {\n        this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton);\n      }\n      this.dom.deleteButton = null;\n      if (this.hammerDeleteButton) {\n        this.hammerDeleteButton.destroy();\n        this.hammerDeleteButton = null;\n      }\n    }\n  }\n\n  /**\n   * Repaint a onChange tooltip on the top right of the item when the item is selected\n   * @param {HTMLElement} anchor\n   * @protected\n   */\n  _repaintOnItemUpdateTimeTooltip(anchor) {\n    if (!this.options.tooltipOnItemUpdateTime) return;\n    const editable = (this.options.editable.updateTime || this.data.editable === true) && this.data.editable !== false;\n    if (this.selected && editable && !this.dom.onItemUpdateTimeTooltip) {\n      const onItemUpdateTimeTooltip = document.createElement(\"div\");\n      onItemUpdateTimeTooltip.className = \"vis-onUpdateTime-tooltip\";\n      anchor.appendChild(onItemUpdateTimeTooltip);\n      this.dom.onItemUpdateTimeTooltip = onItemUpdateTimeTooltip;\n    } else if (!this.selected && this.dom.onItemUpdateTimeTooltip) {\n      // remove button\n      if (this.dom.onItemUpdateTimeTooltip.parentNode) {\n        this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip);\n      }\n      this.dom.onItemUpdateTimeTooltip = null;\n    }\n\n    // position onChange tooltip\n    if (this.dom.onItemUpdateTimeTooltip) {\n      // only show when editing\n      this.dom.onItemUpdateTimeTooltip.style.visibility = this.parent.itemSet.touchParams.itemIsDragging ? \"visible\" : \"hidden\";\n\n      // position relative to item's content\n      this.dom.onItemUpdateTimeTooltip.style.transform = \"translateX(-50%)\";\n      this.dom.onItemUpdateTimeTooltip.style.left = \"50%\";\n\n      // position above or below the item depending on the item's position in the window\n      const tooltipOffset = 50; // TODO: should be tooltip height (depends on template)\n      const scrollTop = this.parent.itemSet.body.domProps.scrollTop;\n\n      // TODO: this.top for orientation:true is actually the items distance from the bottom...\n      // (should be this.bottom)\n      let itemDistanceFromTop;\n      if (this.options.orientation.item == \"top\") {\n        itemDistanceFromTop = this.top;\n      } else {\n        itemDistanceFromTop = this.parent.height - this.top - this.height;\n      }\n      const isCloseToTop = itemDistanceFromTop + this.parent.top - tooltipOffset < -scrollTop;\n      if (isCloseToTop) {\n        this.dom.onItemUpdateTimeTooltip.style.bottom = \"\";\n        this.dom.onItemUpdateTimeTooltip.style.top = \"\".concat(this.height + 2, \"px\");\n      } else {\n        this.dom.onItemUpdateTimeTooltip.style.top = \"\";\n        this.dom.onItemUpdateTimeTooltip.style.bottom = \"\".concat(this.height + 2, \"px\");\n      }\n\n      // handle tooltip content\n      let content;\n      let templateFunction;\n      if (this.options.tooltipOnItemUpdateTime && this.options.tooltipOnItemUpdateTime.template) {\n        var _context4;\n        templateFunction = _bindInstanceProperty(_context4 = this.options.tooltipOnItemUpdateTime.template).call(_context4, this);\n        content = templateFunction(this.data);\n      } else {\n        content = \"start: \".concat(moment$2(this.data.start).format(\"MM/DD/YYYY hh:mm\"));\n        if (this.data.end) {\n          content += \"<br> end: \".concat(moment$2(this.data.end).format(\"MM/DD/YYYY hh:mm\"));\n        }\n      }\n      this.dom.onItemUpdateTimeTooltip.innerHTML = availableUtils.xss(content);\n    }\n  }\n\n  /**\n   * get item data\n   * @return {object}\n   * @private\n   */\n  _getItemData() {\n    return this.parent.itemSet.itemsData.get(this.id);\n  }\n\n  /**\n   * Set HTML contents for the item\n   * @param {Element} element   HTML element to fill with the contents\n   * @private\n   */\n  _updateContents(element) {\n    let content;\n    let changed;\n    let templateFunction;\n    let itemVisibleFrameContent;\n    let visibleFrameTemplateFunction;\n    const itemData = this._getItemData(); // get a clone of the data from the dataset\n\n    const frameElement = this.dom.box || this.dom.point;\n    const itemVisibleFrameContentElement = frameElement.getElementsByClassName(\"vis-item-visible-frame\")[0];\n    if (this.options.visibleFrameTemplate) {\n      var _context5;\n      visibleFrameTemplateFunction = _bindInstanceProperty(_context5 = this.options.visibleFrameTemplate).call(_context5, this);\n      itemVisibleFrameContent = availableUtils.xss(visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement));\n    } else {\n      itemVisibleFrameContent = \"\";\n    }\n    if (itemVisibleFrameContentElement) {\n      if (itemVisibleFrameContent instanceof Object && !(itemVisibleFrameContent instanceof Element)) {\n        visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement);\n      } else {\n        changed = this._contentToString(this.itemVisibleFrameContent) !== this._contentToString(itemVisibleFrameContent);\n        if (changed) {\n          // only replace the content when changed\n          if (itemVisibleFrameContent instanceof Element) {\n            itemVisibleFrameContentElement.innerHTML = \"\";\n            itemVisibleFrameContentElement.appendChild(itemVisibleFrameContent);\n          } else if (itemVisibleFrameContent != undefined) {\n            itemVisibleFrameContentElement.innerHTML = availableUtils.xss(itemVisibleFrameContent);\n          } else {\n            if (!(this.data.type == \"background\" && this.data.content === undefined)) {\n              throw new Error(\"Property \\\"content\\\" missing in item \".concat(this.id));\n            }\n          }\n          this.itemVisibleFrameContent = itemVisibleFrameContent;\n        }\n      }\n    }\n    if (this.options.template) {\n      var _context6;\n      templateFunction = _bindInstanceProperty(_context6 = this.options.template).call(_context6, this);\n      content = templateFunction(itemData, element, this.data);\n    } else {\n      content = this.data.content;\n    }\n    if (content instanceof Object && !(content instanceof Element)) {\n      templateFunction(itemData, element);\n    } else {\n      changed = this._contentToString(this.content) !== this._contentToString(content);\n      if (changed) {\n        // only replace the content when changed\n        if (content instanceof Element) {\n          element.innerHTML = \"\";\n          element.appendChild(content);\n        } else if (content != undefined) {\n          element.innerHTML = availableUtils.xss(content);\n        } else {\n          if (!(this.data.type == \"background\" && this.data.content === undefined)) {\n            throw new Error(\"Property \\\"content\\\" missing in item \".concat(this.id));\n          }\n        }\n        this.content = content;\n      }\n    }\n  }\n\n  /**\n   * Process dataAttributes timeline option and set as data- attributes on dom.content\n   * @param {Element} element   HTML element to which the attributes will be attached\n   * @private\n   */\n  _updateDataAttributes(element) {\n    if (this.options.dataAttributes && this.options.dataAttributes.length > 0) {\n      let attributes = [];\n      if (_Array$isArray(this.options.dataAttributes)) {\n        attributes = this.options.dataAttributes;\n      } else if (this.options.dataAttributes == \"all\") {\n        attributes = _Object$keys(this.data);\n      } else {\n        return;\n      }\n      for (const name of attributes) {\n        const value = this.data[name];\n        if (value != null) {\n          element.setAttribute(\"data-\".concat(name), value);\n        } else {\n          element.removeAttribute(\"data-\".concat(name));\n        }\n      }\n    }\n  }\n\n  /**\n   * Update custom styles of the element\n   * @param {Element} element\n   * @private\n   */\n  _updateStyle(element) {\n    // remove old styles\n    if (this.style) {\n      availableUtils.removeCssText(element, this.style);\n      this.style = null;\n    }\n\n    // append new styles\n    if (this.data.style) {\n      availableUtils.addCssText(element, this.data.style);\n      this.style = this.data.style;\n    }\n  }\n\n  /**\n   * Stringify the items contents\n   * @param {string | Element | undefined} content\n   * @returns {string | undefined}\n   * @private\n   */\n  _contentToString(content) {\n    if (typeof content === \"string\") return content;\n    if (content && \"outerHTML\" in content) return content.outerHTML;\n    return content;\n  }\n\n  /**\n   * Update the editability of this item.\n   */\n  _updateEditStatus() {\n    if (this.options) {\n      if (typeof this.options.editable === \"boolean\") {\n        this.editable = {\n          updateTime: this.options.editable,\n          updateGroup: this.options.editable,\n          remove: this.options.editable\n        };\n      } else if (typeof this.options.editable === \"object\") {\n        this.editable = {};\n        availableUtils.selectiveExtend([\"updateTime\", \"updateGroup\", \"remove\"], this.editable, this.options.editable);\n      }\n    }\n    // Item data overrides, except if options.editable.overrideItems is set.\n    if (!this.options || !this.options.editable || this.options.editable.overrideItems !== true) {\n      if (this.data) {\n        if (typeof this.data.editable === \"boolean\") {\n          this.editable = {\n            updateTime: this.data.editable,\n            updateGroup: this.data.editable,\n            remove: this.data.editable\n          };\n        } else if (typeof this.data.editable === \"object\") {\n          // TODO: in timeline.js 5.0, we should change this to not reset options from the timeline configuration.\n          // Basically just remove the next line...\n          this.editable = {};\n          availableUtils.selectiveExtend([\"updateTime\", \"updateGroup\", \"remove\"], this.editable, this.data.editable);\n        }\n      }\n    }\n  }\n\n  /**\n   * Return the width of the item left from its start date\n   * @return {number}\n   */\n  getWidthLeft() {\n    return 0;\n  }\n\n  /**\n   * Return the width of the item right from the max of its start and end date\n   * @return {number}\n   */\n  getWidthRight() {\n    return 0;\n  }\n\n  /**\n   * Return the title of the item\n   * @return {string | undefined}\n   */\n  getTitle() {\n    if (this.options.tooltip && this.options.tooltip.template) {\n      var _context7;\n      const templateFunction = _bindInstanceProperty(_context7 = this.options.tooltip.template).call(_context7, this);\n      return templateFunction(this._getItemData(), this.data);\n    }\n    return this.data.title;\n  }\n}\nItem.prototype.stack = true;\n\n/**\n * @constructor BoxItem\n * @extends Item\n */\nclass BoxItem extends Item {\n  /**\n   * @param {Object} data             Object containing parameters start\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      dot: {\n        width: 0,\n        height: 0\n      },\n      line: {\n        width: 0,\n        height: 0\n      }\n    };\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(\"Property \\\"start\\\" missing in item \".concat(data));\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @param {{start: number, end: number}} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    if (this.cluster) {\n      return false;\n    }\n    // determine visibility\n    let isVisible;\n    const align = this.data.align || this.options.align;\n    const widthInMs = this.width * range.getMillisecondsPerPixel();\n    if (align == \"right\") {\n      isVisible = this.data.start.getTime() > range.start && this.data.start.getTime() - widthInMs < range.end;\n    } else if (align == \"left\") {\n      isVisible = this.data.start.getTime() + widthInMs > range.start && this.data.start.getTime() < range.end;\n    } else {\n      // default or 'center'\n      isVisible = this.data.start.getTime() + widthInMs / 2 > range.start && this.data.start.getTime() - widthInMs / 2 < range.end;\n    }\n    return isVisible;\n  }\n\n  /**\n   * create DOM element\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // create main box\n      this.dom.box = document.createElement(\"DIV\");\n\n      // contents box (inside the background box). used for making margins\n      this.dom.content = document.createElement(\"DIV\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.box.appendChild(this.dom.content);\n\n      // line to axis\n      this.dom.line = document.createElement(\"DIV\");\n      this.dom.line.className = \"vis-line\";\n\n      // dot on axis\n      this.dom.dot = document.createElement(\"DIV\");\n      this.dom.dot.className = \"vis-dot\";\n\n      // attach this item as attribute\n      this.dom.box[\"vis-item\"] = this;\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append DOM element\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.box.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground) throw new Error(\"Cannot redraw item: parent has no foreground container element\");\n      foreground.appendChild(this.dom.box);\n    }\n    if (!this.dom.line.parentNode) {\n      var background = this.parent.dom.background;\n      if (!background) throw new Error(\"Cannot redraw item: parent has no background container element\");\n      background.appendChild(this.dom.line);\n    }\n    if (!this.dom.dot.parentNode) {\n      const axis = this.parent.dom.axis;\n      if (!background) throw new Error(\"Cannot redraw item: parent has no axis container element\");\n      axis.appendChild(this.dom.dot);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM element\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.box);\n      this._updateStyle(this.dom.box);\n      const editable = this.editable.updateTime || this.editable.updateGroup;\n\n      // update class\n      const className = (this.data.className ? \" \" + this.data.className : \"\") + (this.selected ? \" vis-selected\" : \"\") + (editable ? \" vis-editable\" : \" vis-readonly\");\n      this.dom.box.className = \"vis-item vis-box\".concat(className);\n      this.dom.line.className = \"vis-item vis-line\".concat(className);\n      this.dom.dot.className = \"vis-item vis-dot\".concat(className);\n    }\n  }\n\n  /**\n   * get DOM components sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    return {\n      previous: {\n        right: this.dom.box.style.right,\n        left: this.dom.box.style.left\n      },\n      dot: {\n        height: this.dom.dot.offsetHeight,\n        width: this.dom.dot.offsetWidth\n      },\n      line: {\n        width: this.dom.line.offsetWidth\n      },\n      box: {\n        width: this.dom.box.offsetWidth,\n        height: this.dom.box.offsetHeight\n      }\n    };\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {object} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    if (this.options.rtl) {\n      this.dom.box.style.right = \"0px\";\n    } else {\n      this.dom.box.style.left = \"0px\";\n    }\n\n    // recalculate size\n    this.props.dot.height = sizes.dot.height;\n    this.props.dot.width = sizes.dot.width;\n    this.props.line.width = sizes.line.width;\n    this.width = sizes.box.width;\n    this.height = sizes.box.height;\n\n    // restore previous position\n    if (this.options.rtl) {\n      this.dom.box.style.right = sizes.previous.right;\n    } else {\n      this.dom.box.style.left = sizes.previous.left;\n    }\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additionals\n   * @private\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.box);\n    this._repaintDragCenter();\n    this._repaintDeleteButton(this.dom.box);\n  }\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    var _context, _context2, _context3, _context5;\n    let sizes;\n    const queue = [\n    // create item DOM\n    _bindInstanceProperty(_context = this._createDomElement).call(_context, this),\n    // append DOM to parent DOM\n    _bindInstanceProperty(_context2 = this._appendDomElement).call(_context2, this),\n    // update dirty DOM\n    _bindInstanceProperty(_context3 = this._updateDirtyDomComponents).call(_context3, this), () => {\n      if (this.dirty) {\n        sizes = this._getDomComponentsSizes();\n      }\n    }, () => {\n      if (this.dirty) {\n        var _context4;\n        _bindInstanceProperty(_context4 = this._updateDomComponentsSizes).call(_context4, this)(sizes);\n      }\n    },\n    // repaint DOM additionals\n    _bindInstanceProperty(_context5 = this._repaintDomAdditionals).call(_context5, this)];\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      _forEachInstanceProperty(queue).call(queue, fn => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Show the item in the DOM (when not already visible). The items DOM will\n   * be created when needed.\n   * @param {boolean} [returnQueue=false]  whether to return a queue of functions to execute instead of just executing them\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  show(returnQueue) {\n    if (!this.displayed) {\n      return this.redraw(returnQueue);\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      const dom = this.dom;\n      if (dom.box.remove) dom.box.remove();else if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); // IE11\n\n      if (dom.line.remove) dom.line.remove();else if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); // IE11\n\n      if (dom.dot.remove) dom.dot.remove();else if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); // IE11\n\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * Reposition the item XY\n   */\n  repositionXY() {\n    const rtl = this.options.rtl;\n    const repositionXY = function (element, x, y) {\n      var _context6;\n      let rtl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      if (x === undefined && y === undefined) return;\n      // If rtl invert the number.\n      const directionX = rtl ? x * -1 : x;\n\n      //no y. translate x\n      if (y === undefined) {\n        element.style.transform = \"translateX(\".concat(directionX, \"px)\");\n        return;\n      }\n\n      //no x. translate y\n      if (x === undefined) {\n        element.style.transform = \"translateY(\".concat(y, \"px)\");\n        return;\n      }\n      element.style.transform = _concatInstanceProperty(_context6 = \"translate(\".concat(directionX, \"px, \")).call(_context6, y, \"px)\");\n    };\n    repositionXY(this.dom.box, this.boxX, this.boxY, rtl);\n    repositionXY(this.dom.dot, this.dotX, this.dotY, rtl);\n    repositionXY(this.dom.line, this.lineX, this.lineY, rtl);\n  }\n\n  /**\n   * Reposition the item horizontally\n   * @Override\n   */\n  repositionX() {\n    const start = this.conversion.toScreen(this.data.start);\n    const align = this.data.align === undefined ? this.options.align : this.data.align;\n    const lineWidth = this.props.line.width;\n    const dotWidth = this.props.dot.width;\n    if (align == \"right\") {\n      // calculate right position of the box\n      this.boxX = start - this.width;\n      this.lineX = start - lineWidth;\n      this.dotX = start - lineWidth / 2 - dotWidth / 2;\n    } else if (align == \"left\") {\n      // calculate left position of the box\n      this.boxX = start;\n      this.lineX = start;\n      this.dotX = start + lineWidth / 2 - dotWidth / 2;\n    } else {\n      // default or 'center'\n      this.boxX = start - this.width / 2;\n      this.lineX = this.options.rtl ? start - lineWidth : start - lineWidth / 2;\n      this.dotX = start - dotWidth / 2;\n    }\n    if (this.options.rtl) this.right = this.boxX;else this.left = this.boxX;\n    this.repositionXY();\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    const orientation = this.options.orientation.item;\n    const lineStyle = this.dom.line.style;\n    if (orientation == \"top\") {\n      const lineHeight = this.parent.top + this.top + 1;\n      this.boxY = this.top || 0;\n      lineStyle.height = \"\".concat(lineHeight, \"px\");\n      lineStyle.bottom = \"\";\n      lineStyle.top = \"0\";\n    } else {\n      // orientation 'bottom'\n      const itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty\n      const lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top;\n      this.boxY = this.parent.height - this.top - (this.height || 0);\n      lineStyle.height = \"\".concat(lineHeight, \"px\");\n      lineStyle.top = \"\";\n      lineStyle.bottom = \"0\";\n    }\n    this.dotY = -this.props.dot.height / 2;\n    this.repositionXY();\n  }\n\n  /**\n   * Return the width of the item left from its start date\n   * @return {number}\n   */\n  getWidthLeft() {\n    return this.width / 2;\n  }\n\n  /**\n   * Return the width of the item right from its start date\n   * @return {number}\n   */\n  getWidthRight() {\n    return this.width / 2;\n  }\n}\n\n/**\n * @constructor PointItem\n * @extends Item\n */\nclass PointItem extends Item {\n  /**\n   * @param {Object} data             Object containing parameters start\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      dot: {\n        top: 0,\n        width: 0,\n        height: 0\n      },\n      content: {\n        height: 0,\n        marginLeft: 0,\n        marginRight: 0\n      }\n    };\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(\"Property \\\"start\\\" missing in item \".concat(data));\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @param {{start: number, end: number}} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    if (this.cluster) {\n      return false;\n    }\n    // determine visibility\n    const widthInMs = this.width * range.getMillisecondsPerPixel();\n    return this.data.start.getTime() + widthInMs > range.start && this.data.start < range.end;\n  }\n\n  /**\n   * create DOM element\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // background box\n      this.dom.point = document.createElement(\"div\");\n      // className is updated in redraw()\n\n      // contents box, right from the dot\n      this.dom.content = document.createElement(\"div\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.point.appendChild(this.dom.content);\n\n      // dot at start\n      this.dom.dot = document.createElement(\"div\");\n      this.dom.point.appendChild(this.dom.dot);\n\n      // attach this item as attribute\n      this.dom.point[\"vis-item\"] = this;\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append DOM element\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.point.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground) {\n        throw new Error(\"Cannot redraw item: parent has no foreground container element\");\n      }\n      foreground.appendChild(this.dom.point);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM components\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.point);\n      this._updateStyle(this.dom.point);\n      const editable = this.editable.updateTime || this.editable.updateGroup;\n      // update class\n      const className = (this.data.className ? \" \" + this.data.className : \"\") + (this.selected ? \" vis-selected\" : \"\") + (editable ? \" vis-editable\" : \" vis-readonly\");\n      this.dom.point.className = \"vis-item vis-point\".concat(className);\n      this.dom.dot.className = \"vis-item vis-dot\".concat(className);\n    }\n  }\n\n  /**\n   * get DOM component sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    return {\n      dot: {\n        width: this.dom.dot.offsetWidth,\n        height: this.dom.dot.offsetHeight\n      },\n      content: {\n        width: this.dom.content.offsetWidth,\n        height: this.dom.content.offsetHeight\n      },\n      point: {\n        width: this.dom.point.offsetWidth,\n        height: this.dom.point.offsetHeight\n      }\n    };\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {array} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    // recalculate size of dot and contents\n    this.props.dot.width = sizes.dot.width;\n    this.props.dot.height = sizes.dot.height;\n    this.props.content.height = sizes.content.height;\n\n    // resize contents\n    if (this.options.rtl) {\n      this.dom.content.style.marginRight = \"\".concat(this.props.dot.width / 2, \"px\");\n    } else {\n      this.dom.content.style.marginLeft = \"\".concat(this.props.dot.width / 2, \"px\");\n    }\n    //this.dom.content.style.marginRight = ... + 'px'; // TODO: margin right\n\n    // recalculate size\n    this.width = sizes.point.width;\n    this.height = sizes.point.height;\n\n    // reposition the dot\n    this.dom.dot.style.top = \"\".concat((this.height - this.props.dot.height) / 2, \"px\");\n    const dotWidth = this.props.dot.width;\n    const translateX = this.options.rtl ? dotWidth / 2 : dotWidth / 2 * -1;\n    this.dom.dot.style.transform = \"translateX(\".concat(translateX, \"px\");\n    this.dirty = false;\n  }\n\n  /**\n   * Repain DOM additionals\n   * @private\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.point);\n    this._repaintDragCenter();\n    this._repaintDeleteButton(this.dom.point);\n  }\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    var _context, _context2, _context3, _context5;\n    let sizes;\n    const queue = [\n    // create item DOM\n    _bindInstanceProperty(_context = this._createDomElement).call(_context, this),\n    // append DOM to parent DOM\n    _bindInstanceProperty(_context2 = this._appendDomElement).call(_context2, this),\n    // update dirty DOM\n    _bindInstanceProperty(_context3 = this._updateDirtyDomComponents).call(_context3, this), () => {\n      if (this.dirty) {\n        sizes = this._getDomComponentsSizes();\n      }\n    }, () => {\n      if (this.dirty) {\n        var _context4;\n        _bindInstanceProperty(_context4 = this._updateDomComponentsSizes).call(_context4, this)(sizes);\n      }\n    },\n    // repaint DOM additionals\n    _bindInstanceProperty(_context5 = this._repaintDomAdditionals).call(_context5, this)];\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      _forEachInstanceProperty(queue).call(queue, fn => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Reposition XY\n   */\n  repositionXY() {\n    const rtl = this.options.rtl;\n    const repositionXY = function (element, x, y) {\n      var _context6;\n      let rtl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n      if (x === undefined && y === undefined) return;\n      // If rtl invert the number.\n      const directionX = rtl ? x * -1 : x;\n\n      //no y. translate x\n      if (y === undefined) {\n        element.style.transform = \"translateX(\".concat(directionX, \"px)\");\n        return;\n      }\n\n      //no x. translate y\n      if (x === undefined) {\n        element.style.transform = \"translateY(\".concat(y, \"px)\");\n        return;\n      }\n      element.style.transform = _concatInstanceProperty(_context6 = \"translate(\".concat(directionX, \"px, \")).call(_context6, y, \"px)\");\n    };\n    repositionXY(this.dom.point, this.pointX, this.pointY, rtl);\n  }\n\n  /**\n   * Show the item in the DOM (when not already visible). The items DOM will\n   * be created when needed.\n   * @param {boolean} [returnQueue=false]  whether to return a queue of functions to execute instead of just executing them\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  show(returnQueue) {\n    if (!this.displayed) {\n      return this.redraw(returnQueue);\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      if (this.dom.point.parentNode) {\n        this.dom.point.parentNode.removeChild(this.dom.point);\n      }\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * Reposition the item horizontally\n   * @Override\n   */\n  repositionX() {\n    const start = this.conversion.toScreen(this.data.start);\n    this.pointX = start;\n    if (this.options.rtl) {\n      this.right = start - this.props.dot.width;\n    } else {\n      this.left = start - this.props.dot.width;\n    }\n    this.repositionXY();\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    const orientation = this.options.orientation.item;\n    if (orientation == \"top\") {\n      this.pointY = this.top;\n    } else {\n      this.pointY = this.parent.height - this.top - this.height;\n    }\n    this.repositionXY();\n  }\n\n  /**\n   * Return the width of the item left from its start date\n   * @return {number}\n   */\n  getWidthLeft() {\n    return this.props.dot.width;\n  }\n\n  /**\n   * Return the width of the item right from  its start date\n   * @return {number}\n   */\n  getWidthRight() {\n    return this.props.dot.width;\n  }\n}\n\n/**\n * @constructor RangeItem\n * @extends Item\n */\nclass RangeItem extends Item {\n  /**\n   * @param {Object} data             Object containing parameters start, end\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe options\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      content: {\n        width: 0\n      }\n    };\n    this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(\"Property \\\"start\\\" missing in item \".concat(data.id));\n      }\n      if (data.end == undefined) {\n        throw new Error(\"Property \\\"end\\\" missing in item \".concat(data.id));\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   *\n   * @param {timeline.Range} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    if (this.cluster) {\n      return false;\n    }\n    // determine visibility\n    return this.data.start < range.end && this.data.end > range.start;\n  }\n\n  /**\n   * create DOM elements\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // background box\n      this.dom.box = document.createElement(\"div\");\n      // className is updated in redraw()\n\n      // frame box (to prevent the item contents from overflowing)\n      this.dom.frame = document.createElement(\"div\");\n      this.dom.frame.className = \"vis-item-overflow\";\n      this.dom.box.appendChild(this.dom.frame);\n\n      // visible frame box (showing the frame that is always visible)\n      this.dom.visibleFrame = document.createElement(\"div\");\n      this.dom.visibleFrame.className = \"vis-item-visible-frame\";\n      this.dom.box.appendChild(this.dom.visibleFrame);\n\n      // contents box\n      this.dom.content = document.createElement(\"div\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.frame.appendChild(this.dom.content);\n\n      // attach this item as attribute\n      this.dom.box[\"vis-item\"] = this;\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append element to DOM\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.box.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground) {\n        throw new Error(\"Cannot redraw item: parent has no foreground container element\");\n      }\n      foreground.appendChild(this.dom.box);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM components\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // update dirty DOM. An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.box);\n      this._updateStyle(this.dom.box);\n      const editable = this.editable.updateTime || this.editable.updateGroup;\n\n      // update class\n      const className = (this.data.className ? \" \" + this.data.className : \"\") + (this.selected ? \" vis-selected\" : \"\") + (editable ? \" vis-editable\" : \" vis-readonly\");\n      this.dom.box.className = this.baseClassName + className;\n\n      // turn off max-width to be able to calculate the real width\n      // this causes an extra browser repaint/reflow, but so be it\n      this.dom.content.style.maxWidth = \"none\";\n    }\n  }\n\n  /**\n   * get DOM component sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    // determine from css whether this box has overflow\n    this.overflow = window.getComputedStyle(this.dom.frame).overflow !== \"hidden\";\n    this.whiteSpace = window.getComputedStyle(this.dom.content).whiteSpace !== \"nowrap\";\n    return {\n      content: {\n        width: this.dom.content.offsetWidth\n      },\n      box: {\n        height: this.dom.box.offsetHeight\n      }\n    };\n  }\n\n  /**\n   * update DOM component sizes\n   * @param {array} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    this.props.content.width = sizes.content.width;\n    this.height = sizes.box.height;\n    this.dom.content.style.maxWidth = \"\";\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additional components\n   * @private\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.box);\n    this._repaintDeleteButton(this.dom.box);\n    this._repaintDragCenter();\n    this._repaintDragLeft();\n    this._repaintDragRight();\n  }\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    var _context, _context2, _context3, _context6;\n    let sizes;\n    const queue = [\n    // create item DOM\n    _bindInstanceProperty(_context = this._createDomElement).call(_context, this),\n    // append DOM to parent DOM\n    _bindInstanceProperty(_context2 = this._appendDomElement).call(_context2, this),\n    // update dirty DOM\n    _bindInstanceProperty(_context3 = this._updateDirtyDomComponents).call(_context3, this), () => {\n      if (this.dirty) {\n        var _context4;\n        sizes = _bindInstanceProperty(_context4 = this._getDomComponentsSizes).call(_context4, this)();\n      }\n    }, () => {\n      if (this.dirty) {\n        var _context5;\n        _bindInstanceProperty(_context5 = this._updateDomComponentsSizes).call(_context5, this)(sizes);\n      }\n    },\n    // repaint DOM additionals\n    _bindInstanceProperty(_context6 = this._repaintDomAdditionals).call(_context6, this)];\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      _forEachInstanceProperty(queue).call(queue, fn => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Show the item in the DOM (when not already visible). The items DOM will\n   * be created when needed.\n   * @param {boolean} [returnQueue=false]  whether to return a queue of functions to execute instead of just executing them\n   * @return {boolean} the redraw queue if returnQueue=true\n   */\n  show(returnQueue) {\n    if (!this.displayed) {\n      return this.redraw(returnQueue);\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      const box = this.dom.box;\n      if (box.parentNode) {\n        box.parentNode.removeChild(box);\n      }\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * Reposition the item horizontally\n   * @param {boolean} [limitSize=true] If true (default), the width of the range\n   *                                   item will be limited, as the browser cannot\n   *                                   display very wide divs. This means though\n   *                                   that the applied left and width may\n   *                                   not correspond to the ranges start and end\n   * @Override\n   */\n  repositionX(limitSize) {\n    const parentWidth = this.parent.width;\n    let start = this.conversion.toScreen(this.data.start);\n    let end = this.conversion.toScreen(this.data.end);\n    const align = this.data.align === undefined ? this.options.align : this.data.align;\n    let contentStartPosition;\n    let contentWidth;\n\n    // limit the width of the range, as browsers cannot draw very wide divs\n    // unless limitSize: false is explicitly set in item data\n    if (this.data.limitSize !== false && (limitSize === undefined || limitSize === true)) {\n      if (start < -parentWidth) {\n        start = -parentWidth;\n      }\n      if (end > 2 * parentWidth) {\n        end = 2 * parentWidth;\n      }\n    }\n\n    //round to 3 decimals to compensate floating-point values rounding\n    const boxWidth = Math.max(Math.round((end - start) * 1000) / 1000, 1);\n    if (this.overflow) {\n      if (this.options.rtl) {\n        this.right = start;\n      } else {\n        this.left = start;\n      }\n      this.width = boxWidth + this.props.content.width;\n      contentWidth = this.props.content.width;\n\n      // Note: The calculation of width is an optimistic calculation, giving\n      //       a width which will not change when moving the Timeline\n      //       So no re-stacking needed, which is nicer for the eye;\n    } else {\n      if (this.options.rtl) {\n        this.right = start;\n      } else {\n        this.left = start;\n      }\n      this.width = boxWidth;\n      contentWidth = Math.min(end - start, this.props.content.width);\n    }\n    if (this.options.rtl) {\n      this.dom.box.style.transform = \"translateX(\".concat(this.right * -1, \"px)\");\n    } else {\n      this.dom.box.style.transform = \"translateX(\".concat(this.left, \"px)\");\n    }\n    this.dom.box.style.width = \"\".concat(boxWidth, \"px\");\n    if (this.whiteSpace) {\n      this.height = this.dom.box.offsetHeight;\n    }\n    switch (align) {\n      case \"left\":\n        this.dom.content.style.transform = \"translateX(0)\";\n        break;\n      case \"right\":\n        if (this.options.rtl) {\n          const translateX = Math.max(boxWidth - contentWidth, 0) * -1;\n          this.dom.content.style.transform = \"translateX(\".concat(translateX, \"px)\");\n        } else {\n          this.dom.content.style.transform = \"translateX(\".concat(Math.max(boxWidth - contentWidth, 0), \"px)\");\n        }\n        break;\n      case \"center\":\n        if (this.options.rtl) {\n          const translateX = Math.max((boxWidth - contentWidth) / 2, 0) * -1;\n          this.dom.content.style.transform = \"translateX(\".concat(translateX, \"px)\");\n        } else {\n          this.dom.content.style.transform = \"translateX(\".concat(Math.max((boxWidth - contentWidth) / 2, 0), \"px)\");\n        }\n        break;\n      default:\n        // 'auto'\n        // when range exceeds left of the window, position the contents at the left of the visible area\n        if (this.overflow) {\n          if (end > 0) {\n            contentStartPosition = Math.max(-start, 0);\n          } else {\n            contentStartPosition = -contentWidth; // ensure it's not visible anymore\n          }\n        } else {\n          if (start < 0) {\n            contentStartPosition = -start;\n          } else {\n            contentStartPosition = 0;\n          }\n        }\n        if (this.options.rtl) {\n          const translateX = contentStartPosition * -1;\n          this.dom.content.style.transform = \"translateX(\".concat(translateX, \"px)\");\n        } else {\n          this.dom.content.style.transform = \"translateX(\".concat(contentStartPosition, \"px)\");\n          // this.dom.content.style.width = `calc(100% - ${contentStartPosition}px)`;\n        }\n    }\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    const orientation = this.options.orientation.item;\n    const box = this.dom.box;\n    if (orientation == \"top\") {\n      box.style.top = \"\".concat(this.top, \"px\");\n    } else {\n      box.style.top = \"\".concat(this.parent.height - this.top - this.height, \"px\");\n    }\n  }\n\n  /**\n   * Repaint a drag area on the left side of the range when the range is selected\n   * @protected\n   */\n  _repaintDragLeft() {\n    if ((this.selected || this.options.itemsAlwaysDraggable.range) && this.editable.updateTime && !this.dom.dragLeft) {\n      // create and show drag area\n      const dragLeft = document.createElement(\"div\");\n      dragLeft.className = \"vis-drag-left\";\n      dragLeft.dragLeftItem = this;\n      this.dom.box.appendChild(dragLeft);\n      this.dom.dragLeft = dragLeft;\n    } else if (!this.selected && !this.options.itemsAlwaysDraggable.range && this.dom.dragLeft) {\n      // delete drag area\n      if (this.dom.dragLeft.parentNode) {\n        this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft);\n      }\n      this.dom.dragLeft = null;\n    }\n  }\n\n  /**\n   * Repaint a drag area on the right side of the range when the range is selected\n   * @protected\n   */\n  _repaintDragRight() {\n    if ((this.selected || this.options.itemsAlwaysDraggable.range) && this.editable.updateTime && !this.dom.dragRight) {\n      // create and show drag area\n      const dragRight = document.createElement(\"div\");\n      dragRight.className = \"vis-drag-right\";\n      dragRight.dragRightItem = this;\n      this.dom.box.appendChild(dragRight);\n      this.dom.dragRight = dragRight;\n    } else if (!this.selected && !this.options.itemsAlwaysDraggable.range && this.dom.dragRight) {\n      // delete drag area\n      if (this.dom.dragRight.parentNode) {\n        this.dom.dragRight.parentNode.removeChild(this.dom.dragRight);\n      }\n      this.dom.dragRight = null;\n    }\n  }\n}\nRangeItem.prototype.baseClassName = \"vis-item vis-range\";\n\n/**\n * @constructor BackgroundItem\n * @extends Item\n */\nclass BackgroundItem extends Item {\n  /**\n   * @constructor BackgroundItem\n   * @param {Object} data             Object containing parameters start, end\n   *                                  content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   *                                  // TODO: describe options\n   * // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation\n   */\n  constructor(data, conversion, options) {\n    super(data, conversion, options);\n    this.props = {\n      content: {\n        width: 0\n      }\n    };\n    this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n\n    // validate data\n    if (data) {\n      if (data.start == undefined) {\n        throw new Error(\"Property \\\"start\\\" missing in item \".concat(data.id));\n      }\n      if (data.end == undefined) {\n        throw new Error(\"Property \\\"end\\\" missing in item \".concat(data.id));\n      }\n    }\n  }\n\n  /**\n   * Check whether this item is visible inside given range\n   * @param {timeline.Range} range with a timestamp for start and end\n   * @returns {boolean} True if visible\n   */\n  isVisible(range) {\n    // determine visibility\n    return this.data.start < range.end && this.data.end > range.start;\n  }\n\n  /**\n   * create DOM element\n   * @private\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // background box\n      this.dom.box = document.createElement(\"div\");\n      // className is updated in redraw()\n\n      // frame box (to prevent the item contents from overflowing\n      this.dom.frame = document.createElement(\"div\");\n      this.dom.frame.className = \"vis-item-overflow\";\n      this.dom.box.appendChild(this.dom.frame);\n\n      // contents box\n      this.dom.content = document.createElement(\"div\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.frame.appendChild(this.dom.content);\n\n      // Note: we do NOT attach this item as attribute to the DOM,\n      //       such that background items cannot be selected\n      //this.dom.box['vis-item'] = this;\n\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append DOM element\n   * @private\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.box.parentNode) {\n      const background = this.parent.dom.background;\n      if (!background) {\n        throw new Error(\"Cannot redraw item: parent has no background container element\");\n      }\n      background.appendChild(this.dom.box);\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update DOM Dirty components\n   * @private\n   */\n  _updateDirtyDomComponents() {\n    // update dirty DOM. An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.content);\n      this._updateStyle(this.dom.box);\n\n      // update class\n      const className = (this.data.className ? \" \" + this.data.className : \"\") + (this.selected ? \" vis-selected\" : \"\");\n      this.dom.box.className = this.baseClassName + className;\n    }\n  }\n\n  /**\n   * get DOM components sizes\n   * @return {object}\n   * @private\n   */\n  _getDomComponentsSizes() {\n    // determine from css whether this box has overflow\n    this.overflow = window.getComputedStyle(this.dom.content).overflow !== \"hidden\";\n    return {\n      content: {\n        width: this.dom.content.offsetWidth\n      }\n    };\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {object} sizes\n   * @private\n   */\n  _updateDomComponentsSizes(sizes) {\n    // recalculate size\n    this.props.content.width = sizes.content.width;\n    this.height = 0; // set height zero, so this item will be ignored when stacking items\n\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additionals\n   * @private\n   */\n  _repaintDomAdditionals() {}\n\n  /**\n   * Repaint the item\n   * @param {boolean} [returnQueue=false]  return the queue\n   * @return {boolean} the redraw result or the redraw queue if returnQueue=true\n   */\n  redraw(returnQueue) {\n    var _context, _context2, _context3, _context6;\n    let sizes;\n    const queue = [\n    // create item DOM\n    _bindInstanceProperty(_context = this._createDomElement).call(_context, this),\n    // append DOM to parent DOM\n    _bindInstanceProperty(_context2 = this._appendDomElement).call(_context2, this), _bindInstanceProperty(_context3 = this._updateDirtyDomComponents).call(_context3, this), () => {\n      if (this.dirty) {\n        var _context4;\n        sizes = _bindInstanceProperty(_context4 = this._getDomComponentsSizes).call(_context4, this)();\n      }\n    }, () => {\n      if (this.dirty) {\n        var _context5;\n        _bindInstanceProperty(_context5 = this._updateDomComponentsSizes).call(_context5, this)(sizes);\n      }\n    },\n    // repaint DOM additionals\n    _bindInstanceProperty(_context6 = this._repaintDomAdditionals).call(_context6, this)];\n    if (returnQueue) {\n      return queue;\n    } else {\n      let result;\n      _forEachInstanceProperty(queue).call(queue, fn => {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * Reposition the item vertically\n   * @Override\n   */\n  repositionY() {\n    let height;\n    const orientation = this.options.orientation.item;\n\n    // special positioning for subgroups\n    if (this.data.subgroup !== undefined) {\n      // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset\n      const itemSubgroup = this.data.subgroup;\n      this.dom.box.style.height = \"\".concat(this.parent.subgroups[itemSubgroup].height, \"px\");\n      if (orientation == \"top\") {\n        this.dom.box.style.top = \"\".concat(this.parent.top + this.parent.subgroups[itemSubgroup].top, \"px\");\n      } else {\n        this.dom.box.style.top = \"\".concat(this.parent.top + this.parent.height - this.parent.subgroups[itemSubgroup].top - this.parent.subgroups[itemSubgroup].height, \"px\");\n      }\n      this.dom.box.style.bottom = \"\";\n    }\n    // and in the case of no subgroups:\n    else {\n      // we want backgrounds with groups to only show in groups.\n      if (this.parent instanceof BackgroundGroup) {\n        // if the item is not in a group:\n        height = Math.max(this.parent.height, this.parent.itemSet.body.domProps.center.height, this.parent.itemSet.body.domProps.centerContainer.height);\n        this.dom.box.style.bottom = orientation == \"bottom\" ? \"0\" : \"\";\n        this.dom.box.style.top = orientation == \"top\" ? \"0\" : \"\";\n      } else {\n        height = this.parent.height;\n        // same alignment for items when orientation is top or bottom\n        this.dom.box.style.top = \"\".concat(this.parent.top, \"px\");\n        this.dom.box.style.bottom = \"\";\n      }\n    }\n    this.dom.box.style.height = \"\".concat(height, \"px\");\n  }\n}\nBackgroundItem.prototype.baseClassName = \"vis-item vis-background\";\nBackgroundItem.prototype.stack = false;\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nBackgroundItem.prototype.show = RangeItem.prototype.show;\n\n/**\n * Hide the item from the DOM (when visible)\n * @return {Boolean} changed\n */\nBackgroundItem.prototype.hide = RangeItem.prototype.hide;\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nBackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX;\n\n/**\n * Popup is a class to create a popup window with some text\n */\nclass Popup {\n  /**\n   * @param {Element} container       The container object.\n   * @param {string}  overflowMethod  How the popup should act to overflowing ('flip', 'cap' or 'none')\n   */\n  constructor(container, overflowMethod) {\n    this.container = container;\n    this.overflowMethod = overflowMethod || \"cap\";\n    this.x = 0;\n    this.y = 0;\n    this.padding = 5;\n    this.hidden = false;\n\n    // create the frame\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-tooltip\";\n    this.container.appendChild(this.frame);\n  }\n\n  /**\n   * @param {number} x   Horizontal position of the popup window\n   * @param {number} y   Vertical position of the popup window\n   */\n  setPosition(x, y) {\n    this.x = _parseInt(x);\n    this.y = _parseInt(y);\n  }\n\n  /**\n   * Set the content for the popup window. This can be HTML code or text.\n   * @param {string | Element} content\n   */\n  setText(content) {\n    if (content instanceof Element) {\n      this.frame.innerHTML = \"\";\n      this.frame.appendChild(content);\n    } else {\n      this.frame.innerHTML = availableUtils.xss(content); // string containing text or HTML\n    }\n  }\n\n  /**\n   * Show the popup window\n   * @param {boolean} [doShow]    Show or hide the window\n   */\n  show(doShow) {\n    if (doShow === undefined) {\n      doShow = true;\n    }\n    if (doShow === true) {\n      var height = this.frame.clientHeight;\n      var width = this.frame.clientWidth;\n      var maxHeight = this.frame.parentNode.clientHeight;\n      var maxWidth = this.frame.parentNode.clientWidth;\n      var left = 0,\n        top = 0;\n      if (this.overflowMethod == \"flip\" || this.overflowMethod == \"none\") {\n        let isLeft = false,\n          isTop = true; // Where around the position it's located\n\n        if (this.overflowMethod == \"flip\") {\n          if (this.y - height < this.padding) {\n            isTop = false;\n          }\n          if (this.x + width > maxWidth - this.padding) {\n            isLeft = true;\n          }\n        }\n        if (isLeft) {\n          left = this.x - width;\n        } else {\n          left = this.x;\n        }\n        if (isTop) {\n          top = this.y - height;\n        } else {\n          top = this.y;\n        }\n      } else {\n        // this.overflowMethod == 'cap'\n        top = this.y - height;\n        if (top + height + this.padding > maxHeight) {\n          top = maxHeight - height - this.padding;\n        }\n        if (top < this.padding) {\n          top = this.padding;\n        }\n        left = this.x;\n        if (left + width + this.padding > maxWidth) {\n          left = maxWidth - width - this.padding;\n        }\n        if (left < this.padding) {\n          left = this.padding;\n        }\n      }\n      this.frame.style.left = left + \"px\";\n      this.frame.style.top = top + \"px\";\n      this.frame.style.visibility = \"visible\";\n      this.hidden = false;\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Hide the popup window\n   */\n  hide() {\n    this.hidden = true;\n    this.frame.style.left = \"0\";\n    this.frame.style.top = \"0\";\n    this.frame.style.visibility = \"hidden\";\n  }\n\n  /**\n   * Remove the popup window\n   */\n  destroy() {\n    this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n  }\n}\n\nvar es_array_every = {};\n\nvar hasRequiredEs_array_every;\n\nfunction requireEs_array_every () {\n\tif (hasRequiredEs_array_every) return es_array_every;\n\thasRequiredEs_array_every = 1;\n\tvar $ = /*@__PURE__*/ require_export();\n\tvar $every = /*@__PURE__*/ requireArrayIteration().every;\n\tvar arrayMethodIsStrict = /*@__PURE__*/ requireArrayMethodIsStrict();\n\n\tvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n\t// `Array.prototype.every` method\n\t// https://tc39.es/ecma262/#sec-array.prototype.every\n\t$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n\t  every: function every(callbackfn /* , thisArg */) {\n\t    return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t  }\n\t});\n\treturn es_array_every;\n}\n\nvar every$3;\nvar hasRequiredEvery$3;\n\nfunction requireEvery$3 () {\n\tif (hasRequiredEvery$3) return every$3;\n\thasRequiredEvery$3 = 1;\n\trequireEs_array_every();\n\tvar getBuiltInPrototypeMethod = /*@__PURE__*/ requireGetBuiltInPrototypeMethod();\n\n\tevery$3 = getBuiltInPrototypeMethod('Array', 'every');\n\treturn every$3;\n}\n\nvar every$2;\nvar hasRequiredEvery$2;\n\nfunction requireEvery$2 () {\n\tif (hasRequiredEvery$2) return every$2;\n\thasRequiredEvery$2 = 1;\n\tvar isPrototypeOf = /*@__PURE__*/ requireObjectIsPrototypeOf();\n\tvar method = /*@__PURE__*/ requireEvery$3();\n\n\tvar ArrayPrototype = Array.prototype;\n\n\tevery$2 = function (it) {\n\t  var own = it.every;\n\t  return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.every) ? method : own;\n\t};\n\treturn every$2;\n}\n\nvar every$1;\nvar hasRequiredEvery$1;\n\nfunction requireEvery$1 () {\n\tif (hasRequiredEvery$1) return every$1;\n\thasRequiredEvery$1 = 1;\n\tvar parent = /*@__PURE__*/ requireEvery$2();\n\n\tevery$1 = parent;\n\treturn every$1;\n}\n\nvar every;\nvar hasRequiredEvery;\n\nfunction requireEvery () {\n\tif (hasRequiredEvery) return every;\n\thasRequiredEvery = 1;\n\tevery = /*@__PURE__*/ requireEvery$1();\n\treturn every;\n}\n\nvar everyExports = requireEvery();\nvar _everyInstanceProperty = /*@__PURE__*/getDefaultExportFromCjs(everyExports);\n\n/**\n * ClusterItem\n */\nclass ClusterItem extends Item {\n  /**\n   * @constructor Item\n   * @param {Object} data             Object containing (optional) parameters type,\n   *                                  start, end, content, group, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} options          Configuration options\n   *                                  // TODO: describe available options\n   */\n  constructor(data, conversion, options) {\n    const modifiedOptions = _Object$assign({}, {\n      fitOnDoubleClick: true\n    }, options, {\n      editable: false\n    });\n    super(data, conversion, modifiedOptions);\n    this.props = {\n      content: {\n        width: 0,\n        height: 0\n      }\n    };\n    if (!data || data.uiItems == undefined) {\n      throw new Error('Property \"uiItems\" missing in item ' + data.id);\n    }\n    this.id = v4();\n    this.group = data.group;\n    this._setupRange();\n    this.emitter = this.data.eventEmitter;\n    this.range = this.data.range;\n    this.attached = false;\n    this.isCluster = true;\n    this.data.isCluster = true;\n  }\n\n  /**\n   * check if there are items\n   * @return {boolean}\n   */\n  hasItems() {\n    return this.data.uiItems && this.data.uiItems.length && this.attached;\n  }\n\n  /**\n   * set UI items\n   * @param {array} items\n   */\n  setUiItems(items) {\n    this.detach();\n    this.data.uiItems = items;\n    this._setupRange();\n    this.attach();\n  }\n\n  /**\n   * check is visible\n   * @param {object} range\n   * @return {boolean}\n   */\n  isVisible(range) {\n    const rangeWidth = this.data.end ? this.data.end - this.data.start : 0;\n    const widthInMs = this.width * range.getMillisecondsPerPixel();\n    const end = Math.max(this.data.start.getTime() + rangeWidth, this.data.start.getTime() + widthInMs);\n    return this.data.start < range.end && end > range.start && this.hasItems();\n  }\n\n  /**\n   * get cluster data\n   * @return {object}\n   */\n  getData() {\n    return {\n      isCluster: true,\n      id: this.id,\n      items: this.data.items || [],\n      data: this.data\n    };\n  }\n\n  /**\n   * redraw cluster item\n   * @param {boolean} returnQueue\n   * @return {boolean}\n   */\n  redraw(returnQueue) {\n    var _context, _context2, _context3, _context4, _context5, _context7;\n    var sizes;\n    var queue = [\n    // create item DOM\n    _bindInstanceProperty(_context = this._createDomElement).call(_context, this),\n    // append DOM to parent DOM\n    _bindInstanceProperty(_context2 = this._appendDomElement).call(_context2, this),\n    // update dirty DOM\n    _bindInstanceProperty(_context3 = this._updateDirtyDomComponents).call(_context3, this), _bindInstanceProperty(_context4 = function () {\n      if (this.dirty) {\n        sizes = this._getDomComponentsSizes();\n      }\n    }).call(_context4, this), _bindInstanceProperty(_context5 = function () {\n      if (this.dirty) {\n        var _context6;\n        _bindInstanceProperty(_context6 = this._updateDomComponentsSizes).call(_context6, this)(sizes);\n      }\n    }).call(_context5, this),\n    // repaint DOM additionals\n    _bindInstanceProperty(_context7 = this._repaintDomAdditionals).call(_context7, this)];\n    if (returnQueue) {\n      return queue;\n    } else {\n      var result;\n      _forEachInstanceProperty(queue).call(queue, function (fn) {\n        result = fn();\n      });\n      return result;\n    }\n  }\n\n  /**\n   * show cluster item\n   */\n  show() {\n    if (!this.displayed) {\n      this.redraw();\n    }\n  }\n\n  /**\n   * Hide the item from the DOM (when visible)\n   */\n  hide() {\n    if (this.displayed) {\n      var dom = this.dom;\n      if (dom.box.parentNode) {\n        dom.box.parentNode.removeChild(dom.box);\n      }\n      if (this.options.showStipes) {\n        if (dom.line.parentNode) {\n          dom.line.parentNode.removeChild(dom.line);\n        }\n        if (dom.dot.parentNode) {\n          dom.dot.parentNode.removeChild(dom.dot);\n        }\n      }\n      this.displayed = false;\n    }\n  }\n\n  /**\n   * reposition item x axis\n   */\n  repositionX() {\n    let start = this.conversion.toScreen(this.data.start);\n    let end = this.data.end ? this.conversion.toScreen(this.data.end) : 0;\n    if (end) {\n      this.repositionXWithRanges(start, end);\n    } else {\n      let align = this.data.align === undefined ? this.options.align : this.data.align;\n      this.repositionXWithoutRanges(start, align);\n    }\n    if (this.options.showStipes) {\n      this.dom.line.style.display = this._isStipeVisible() ? \"block\" : \"none\";\n      this.dom.dot.style.display = this._isStipeVisible() ? \"block\" : \"none\";\n      if (this._isStipeVisible()) {\n        this.repositionStype(start, end);\n      }\n    }\n  }\n\n  /**\n   * reposition item stype\n   * @param {date} start\n   * @param {date} end\n   */\n  repositionStype(start, end) {\n    this.dom.line.style.display = \"block\";\n    this.dom.dot.style.display = \"block\";\n    const lineOffsetWidth = this.dom.line.offsetWidth;\n    const dotOffsetWidth = this.dom.dot.offsetWidth;\n    if (end) {\n      const lineOffset = lineOffsetWidth + start + (end - start) / 2;\n      const dotOffset = lineOffset - dotOffsetWidth / 2;\n      const lineOffsetDirection = this.options.rtl ? lineOffset * -1 : lineOffset;\n      const dotOffsetDirection = this.options.rtl ? dotOffset * -1 : dotOffset;\n      this.dom.line.style.transform = \"translateX(\".concat(lineOffsetDirection, \"px)\");\n      this.dom.dot.style.transform = \"translateX(\".concat(dotOffsetDirection, \"px)\");\n    } else {\n      const lineOffsetDirection = this.options.rtl ? start * -1 : start;\n      const dotOffsetDirection = this.options.rtl ? (start - dotOffsetWidth / 2) * -1 : start - dotOffsetWidth / 2;\n      this.dom.line.style.transform = \"translateX(\".concat(lineOffsetDirection, \"px)\");\n      this.dom.dot.style.transform = \"translateX(\".concat(dotOffsetDirection, \"px)\");\n    }\n  }\n\n  /**\n   * reposition x without ranges\n   * @param {date} start\n   * @param {string} align\n   */\n  repositionXWithoutRanges(start, align) {\n    // calculate left position of the box\n    if (align == \"right\") {\n      if (this.options.rtl) {\n        this.right = start - this.width;\n\n        // reposition box, line, and dot\n        this.dom.box.style.right = this.right + \"px\";\n      } else {\n        this.left = start - this.width;\n\n        // reposition box, line, and dot\n        this.dom.box.style.left = this.left + \"px\";\n      }\n    } else if (align == \"left\") {\n      if (this.options.rtl) {\n        this.right = start;\n\n        // reposition box, line, and dot\n        this.dom.box.style.right = this.right + \"px\";\n      } else {\n        this.left = start;\n\n        // reposition box, line, and dot\n        this.dom.box.style.left = this.left + \"px\";\n      }\n    } else {\n      // default or 'center'\n      if (this.options.rtl) {\n        this.right = start - this.width / 2;\n\n        // reposition box, line, and dot\n        this.dom.box.style.right = this.right + \"px\";\n      } else {\n        this.left = start - this.width / 2;\n\n        // reposition box, line, and dot\n        this.dom.box.style.left = this.left + \"px\";\n      }\n    }\n  }\n\n  /**\n   * reposition x with ranges\n   * @param {date} start\n   * @param {date} end\n   */\n  repositionXWithRanges(start, end) {\n    let boxWidth = Math.round(Math.max(end - start + 0.5, 1));\n    if (this.options.rtl) {\n      this.right = start;\n    } else {\n      this.left = start;\n    }\n    this.width = Math.max(boxWidth, this.minWidth || 0);\n    if (this.options.rtl) {\n      this.dom.box.style.right = this.right + \"px\";\n    } else {\n      this.dom.box.style.left = this.left + \"px\";\n    }\n    this.dom.box.style.width = boxWidth + \"px\";\n  }\n\n  /**\n   * reposition item y axis\n   */\n  repositionY() {\n    var orientation = this.options.orientation.item;\n    var box = this.dom.box;\n    if (orientation == \"top\") {\n      box.style.top = (this.top || 0) + \"px\";\n    } else {\n      // orientation 'bottom'\n      box.style.top = (this.parent.height - this.top - this.height || 0) + \"px\";\n    }\n    if (this.options.showStipes) {\n      if (orientation == \"top\") {\n        this.dom.line.style.top = \"0\";\n        this.dom.line.style.height = this.parent.top + this.top + 1 + \"px\";\n        this.dom.line.style.bottom = \"\";\n      } else {\n        // orientation 'bottom'\n        var itemSetHeight = this.parent.itemSet.props.height;\n        var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top;\n        this.dom.line.style.top = itemSetHeight - lineHeight + \"px\";\n        this.dom.line.style.bottom = \"0\";\n      }\n      this.dom.dot.style.top = -this.dom.dot.offsetHeight / 2 + \"px\";\n    }\n  }\n\n  /**\n   * get width left\n   * @return {number}\n   */\n  getWidthLeft() {\n    return this.width / 2;\n  }\n\n  /**\n   * get width right\n   * @return {number}\n   */\n  getWidthRight() {\n    return this.width / 2;\n  }\n\n  /**\n   * move cluster item\n   */\n  move() {\n    this.repositionX();\n    this.repositionY();\n  }\n\n  /**\n   * attach\n   */\n  attach() {\n    var _context8;\n    for (let item of this.data.uiItems) {\n      item.cluster = this;\n    }\n    this.data.items = _mapInstanceProperty(_context8 = this.data.uiItems).call(_context8, item => item.data);\n    this.attached = true;\n    this.dirty = true;\n  }\n\n  /**\n   * detach\n   * @param {boolean} detachFromParent\n   * @return {void}\n   */\n  detach() {\n    let detachFromParent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    if (!this.hasItems()) {\n      return;\n    }\n    for (let item of this.data.uiItems) {\n      delete item.cluster;\n    }\n    this.attached = false;\n    if (detachFromParent && this.group) {\n      this.group.remove(this);\n      this.group = null;\n    }\n    this.data.items = [];\n    this.dirty = true;\n  }\n\n  /**\n   * handle on double click\n   */\n  _onDoubleClick() {\n    this._fit();\n  }\n\n  /**\n   * set range\n   */\n  _setupRange() {\n    var _context9, _context0, _context1;\n    const stats = _mapInstanceProperty(_context9 = this.data.uiItems).call(_context9, item => ({\n      start: item.data.start.valueOf(),\n      end: item.data.end ? item.data.end.valueOf() : item.data.start.valueOf()\n    }));\n    this.data.min = Math.min(..._mapInstanceProperty(stats).call(stats, s => Math.min(s.start, s.end || s.start)));\n    this.data.max = Math.max(..._mapInstanceProperty(stats).call(stats, s => Math.max(s.start, s.end || s.start)));\n    const centers = _mapInstanceProperty(_context0 = this.data.uiItems).call(_context0, item => item.center);\n    const avg = _reduceInstanceProperty(centers).call(centers, (sum, value) => sum + value, 0) / this.data.uiItems.length;\n    if (_someInstanceProperty(_context1 = this.data.uiItems).call(_context1, item => item.data.end)) {\n      // contains ranges\n      this.data.start = new Date(this.data.min);\n      this.data.end = new Date(this.data.max);\n    } else {\n      this.data.start = new Date(avg);\n      this.data.end = null;\n    }\n  }\n\n  /**\n   * get UI items\n   * @return {array}\n   */\n  _getUiItems() {\n    if (this.data.uiItems && this.data.uiItems.length) {\n      var _context10;\n      return _filterInstanceProperty(_context10 = this.data.uiItems).call(_context10, item => item.cluster === this);\n    }\n    return [];\n  }\n\n  /**\n   * create DOM element\n   */\n  _createDomElement() {\n    if (!this.dom) {\n      // create DOM\n      this.dom = {};\n\n      // create main box\n      this.dom.box = document.createElement(\"DIV\");\n\n      // contents box (inside the background box). used for making margins\n      this.dom.content = document.createElement(\"DIV\");\n      this.dom.content.className = \"vis-item-content\";\n      this.dom.box.appendChild(this.dom.content);\n      if (this.options.showStipes) {\n        // line to axis\n        this.dom.line = document.createElement(\"DIV\");\n        this.dom.line.className = \"vis-cluster-line\";\n        this.dom.line.style.display = \"none\";\n\n        // dot on axis\n        this.dom.dot = document.createElement(\"DIV\");\n        this.dom.dot.className = \"vis-cluster-dot\";\n        this.dom.dot.style.display = \"none\";\n      }\n      if (this.options.fitOnDoubleClick) {\n        var _context11;\n        this.dom.box.ondblclick = _bindInstanceProperty(_context11 = ClusterItem.prototype._onDoubleClick).call(_context11, this);\n      }\n\n      // attach this item as attribute\n      this.dom.box[\"vis-item\"] = this;\n      this.dirty = true;\n    }\n  }\n\n  /**\n   * append element to DOM\n   */\n  _appendDomElement() {\n    if (!this.parent) {\n      throw new Error(\"Cannot redraw item: no parent attached\");\n    }\n    if (!this.dom.box.parentNode) {\n      const foreground = this.parent.dom.foreground;\n      if (!foreground) {\n        throw new Error(\"Cannot redraw item: parent has no foreground container element\");\n      }\n      foreground.appendChild(this.dom.box);\n    }\n    const background = this.parent.dom.background;\n    if (this.options.showStipes) {\n      if (!this.dom.line.parentNode) {\n        if (!background) throw new Error(\"Cannot redraw item: parent has no background container element\");\n        background.appendChild(this.dom.line);\n      }\n      if (!this.dom.dot.parentNode) {\n        var axis = this.parent.dom.axis;\n        if (!background) throw new Error(\"Cannot redraw item: parent has no axis container element\");\n        axis.appendChild(this.dom.dot);\n      }\n    }\n    this.displayed = true;\n  }\n\n  /**\n   * update dirty DOM components\n   */\n  _updateDirtyDomComponents() {\n    // An item is marked dirty when:\n    // - the item is not yet rendered\n    // - the item's data is changed\n    // - the item is selected/deselected\n    if (this.dirty) {\n      this._updateContents(this.dom.content);\n      this._updateDataAttributes(this.dom.box);\n      this._updateStyle(this.dom.box);\n\n      // update class\n      const className = this.baseClassName + \" \" + (this.data.className ? \" \" + this.data.className : \"\") + (this.selected ? \" vis-selected\" : \"\") + \" vis-readonly\";\n      this.dom.box.className = \"vis-item \" + className;\n      if (this.options.showStipes) {\n        this.dom.line.className = \"vis-item vis-cluster-line \" + (this.selected ? \" vis-selected\" : \"\");\n        this.dom.dot.className = \"vis-item vis-cluster-dot \" + (this.selected ? \" vis-selected\" : \"\");\n      }\n      if (this.data.end) {\n        // turn off max-width to be able to calculate the real width\n        // this causes an extra browser repaint/reflow, but so be it\n        this.dom.content.style.maxWidth = \"none\";\n      }\n    }\n  }\n\n  /**\n   * get DOM components sizes\n   * @return {object}\n   */\n  _getDomComponentsSizes() {\n    const sizes = {\n      previous: {\n        right: this.dom.box.style.right,\n        left: this.dom.box.style.left\n      },\n      box: {\n        width: this.dom.box.offsetWidth,\n        height: this.dom.box.offsetHeight\n      }\n    };\n    if (this.options.showStipes) {\n      sizes.dot = {\n        height: this.dom.dot.offsetHeight,\n        width: this.dom.dot.offsetWidth\n      };\n      sizes.line = {\n        width: this.dom.line.offsetWidth\n      };\n    }\n    return sizes;\n  }\n\n  /**\n   * update DOM components sizes\n   * @param {object} sizes\n   */\n  _updateDomComponentsSizes(sizes) {\n    if (this.options.rtl) {\n      this.dom.box.style.right = \"0px\";\n    } else {\n      this.dom.box.style.left = \"0px\";\n    }\n\n    // recalculate size\n    if (!this.data.end) {\n      this.width = sizes.box.width;\n    } else {\n      this.minWidth = sizes.box.width;\n    }\n    this.height = sizes.box.height;\n\n    // restore previous position\n    if (this.options.rtl) {\n      this.dom.box.style.right = sizes.previous.right;\n    } else {\n      this.dom.box.style.left = sizes.previous.left;\n    }\n    this.dirty = false;\n  }\n\n  /**\n   * repaint DOM additional components\n   */\n  _repaintDomAdditionals() {\n    this._repaintOnItemUpdateTimeTooltip(this.dom.box);\n  }\n\n  /**\n   * check is stripe visible\n   * @return {number}\n   * @private\n   */\n  _isStipeVisible() {\n    return this.minWidth >= this.width || !this.data.end;\n  }\n\n  /**\n   * get fit range\n   * @return {object}\n   * @private\n   */\n  _getFitRange() {\n    const offset = 0.05 * (this.data.max - this.data.min) / 2;\n    return {\n      fitStart: this.data.min - offset,\n      fitEnd: this.data.max + offset\n    };\n  }\n\n  /**\n   * fit\n   * @private\n   */\n  _fit() {\n    if (this.emitter) {\n      const {\n        fitStart,\n        fitEnd\n      } = this._getFitRange();\n      const fitArgs = {\n        start: new Date(fitStart),\n        end: new Date(fitEnd),\n        animation: true\n      };\n      this.emitter.emit(\"fit\", fitArgs);\n    }\n  }\n\n  /**\n   * get item data\n   * @return {object}\n   * @private\n   */\n  _getItemData() {\n    return this.data;\n  }\n}\nClusterItem.prototype.baseClassName = \"vis-item vis-range vis-cluster\";\n\nconst UNGROUPED$2 = \"__ungrouped__\"; // reserved group id for ungrouped items\n\nconst ReservedGroupIds = {\n  UNGROUPED: UNGROUPED$2};\n\n/**\n * An Cluster generator generates cluster items\n */\nclass ClusterGenerator {\n  /**\n   * @param {ItemSet} itemSet itemsSet instance\n   * @constructor ClusterGenerator\n   */\n  constructor(itemSet) {\n    this.itemSet = itemSet;\n    this.groups = {};\n    this.cache = {};\n    this.cache[-1] = [];\n  }\n\n  /**\n   * @param {Object} itemData             Object containing parameters start content, className.\n   * @param {{toScreen: function, toTime: function}} conversion\n   *                                  Conversion functions from time to screen and vice versa\n   * @param {Object} [options]        Configuration options\n   * @return {Object} newItem\n   */\n  createClusterItem(itemData, conversion, options) {\n    const newItem = new ClusterItem(itemData, conversion, options);\n    return newItem;\n  }\n\n  /**\n   * Set the items to be clustered.\n   * This will clear cached clusters.\n   * @param {Item[]} items\n   * @param {Object} [options]  Available options:\n   *                            {boolean} applyOnChangedLevel\n   *                                If true (default), the changed data is applied\n   *                                as soon the cluster level changes. If false,\n   *                                The changed data is applied immediately\n   */\n  setItems(items, options) {\n    this.items = items || [];\n    this.dataChanged = true;\n    this.applyOnChangedLevel = false;\n    if (options && options.applyOnChangedLevel) {\n      this.applyOnChangedLevel = options.applyOnChangedLevel;\n    }\n  }\n\n  /**\n   * Update the current data set: clear cache, and recalculate the clustering for\n   * the current level\n   */\n  updateData() {\n    this.dataChanged = true;\n    this.applyOnChangedLevel = false;\n  }\n\n  /**\n   * Cluster the items which are too close together\n   * @param {array} oldClusters\n   * @param {number} scale      The scale of the current window : (windowWidth / (endDate - startDate))\n   * @param {{maxItems: number, clusterCriteria: function, titleTemplate: string}} options\n   * @return {array} clusters\n   */\n  getClusters(oldClusters, scale, options) {\n    let {\n      maxItems,\n      clusterCriteria\n    } = typeof options === \"boolean\" ? {} : options;\n    if (!clusterCriteria) {\n      clusterCriteria = () => true;\n    }\n    maxItems = maxItems || 1;\n    let level = -1;\n    let granularity = 2;\n    let timeWindow = 0;\n    if (scale > 0) {\n      if (scale >= 1) {\n        return [];\n      }\n      level = Math.abs(Math.round(Math.log(100 / scale) / Math.log(granularity)));\n      timeWindow = Math.abs(Math.pow(granularity, level));\n    }\n\n    // clear the cache when and re-generate groups the data when needed.\n    if (this.dataChanged) {\n      const levelChanged = level != this.cacheLevel;\n      const applyDataNow = this.applyOnChangedLevel ? levelChanged : true;\n      if (applyDataNow) {\n        this._dropLevelsCache();\n        this._filterData();\n      }\n    }\n    this.cacheLevel = level;\n    let clusters = this.cache[level];\n    if (!clusters) {\n      clusters = [];\n      for (let groupName in this.groups) {\n        if (!Object.prototype.hasOwnProperty.call(this.groups, groupName)) continue;\n        const items = this.groups[groupName];\n        const iMax = items.length;\n        let i = 0;\n        while (i < iMax) {\n          // find all items around current item, within the timeWindow\n          let item = items[i];\n          let neighbors = 1; // start at 1, to include itself)\n\n          // loop through items left from the current item\n          let j = i - 1;\n          while (j >= 0 && item.center - items[j].center < timeWindow / 2) {\n            if (!items[j].cluster && clusterCriteria(item.data, items[j].data)) {\n              neighbors++;\n            }\n            j--;\n          }\n\n          // loop through items right from the current item\n          let k = i + 1;\n          while (k < items.length && items[k].center - item.center < timeWindow / 2) {\n            if (clusterCriteria(item.data, items[k].data)) {\n              neighbors++;\n            }\n            k++;\n          }\n\n          // loop through the created clusters\n          let l = clusters.length - 1;\n          while (l >= 0 && item.center - clusters[l].center < timeWindow) {\n            if (item.group == clusters[l].group && clusterCriteria(item.data, clusters[l].data)) {\n              neighbors++;\n            }\n            l--;\n          }\n\n          // aggregate until the number of items is within maxItems\n          if (neighbors > maxItems) {\n            // too busy in this window.\n            const num = neighbors - maxItems + 1;\n            const clusterItems = [];\n\n            // append the items to the cluster,\n            // and calculate the average start for the cluster\n            let m = i;\n            while (clusterItems.length < num && m < items.length) {\n              if (clusterCriteria(items[i].data, items[m].data)) {\n                clusterItems.push(items[m]);\n              }\n              m++;\n            }\n            const groupId = this.itemSet.getGroupId(item.data);\n            const group = this.itemSet.groups[groupId] || this.itemSet.groups[ReservedGroupIds.UNGROUPED];\n            let cluster = this._getClusterForItems(clusterItems, group, oldClusters, options);\n            clusters.push(cluster);\n            i += num;\n          } else {\n            delete item.cluster;\n            i += 1;\n          }\n        }\n      }\n      this.cache[level] = clusters;\n    }\n    return clusters;\n  }\n\n  /**\n   * Filter the items per group.\n   * @private\n   */\n  _filterData() {\n    // filter per group\n    const groups = {};\n    this.groups = groups;\n\n    // split the items per group\n    for (const item of _Object$values(this.items)) {\n      // put the item in the correct group\n      const groupName = item.parent ? item.parent.groupId : \"\";\n      let group = groups[groupName];\n      if (!group) {\n        group = [];\n        groups[groupName] = group;\n      }\n      group.push(item);\n\n      // calculate the center of the item\n      if (item.data.start) {\n        if (item.data.end) {\n          // range\n          item.center = (item.data.start.valueOf() + item.data.end.valueOf()) / 2;\n        } else {\n          // box, dot\n          item.center = item.data.start.valueOf();\n        }\n      }\n    }\n\n    // sort the items per group\n    for (let currentGroupName in groups) {\n      var _context;\n      if (!Object.prototype.hasOwnProperty.call(groups, currentGroupName)) continue;\n      _sortInstanceProperty(_context = groups[currentGroupName]).call(_context, (a, b) => a.center - b.center);\n    }\n    this.dataChanged = false;\n  }\n\n  /**\n   * Create new cluster or return existing\n   * @private\n   * @param {array} clusterItems\n   * @param {object} group\n   * @param {array} oldClusters\n   * @param {object} options\n   * @returns {object} cluster\n   */\n  _getClusterForItems(clusterItems, group, oldClusters, options) {\n    var _context2;\n    const oldClustersLookup = _mapInstanceProperty(_context2 = oldClusters || []).call(_context2, cluster => {\n      var _context3;\n      return {\n        cluster,\n        itemsIds: new _Set(_mapInstanceProperty(_context3 = cluster.data.uiItems).call(_context3, item => item.id))\n      };\n    });\n    let cluster;\n    if (oldClustersLookup.length) {\n      for (let oldClusterData of oldClustersLookup) {\n        if (oldClusterData.itemsIds.size === clusterItems.length && _everyInstanceProperty(clusterItems).call(clusterItems, clusterItem => oldClusterData.itemsIds.has(clusterItem.id))) {\n          cluster = oldClusterData.cluster;\n          break;\n        }\n      }\n    }\n    if (cluster) {\n      cluster.setUiItems(clusterItems);\n      if (cluster.group !== group) {\n        if (cluster.group) {\n          cluster.group.remove(cluster);\n        }\n        if (group) {\n          group.add(cluster);\n          cluster.group = group;\n        }\n      }\n      return cluster;\n    }\n    let titleTemplate = options.titleTemplate || \"\";\n    const conversion = {\n      toScreen: this.itemSet.body.util.toScreen,\n      toTime: this.itemSet.body.util.toTime\n    };\n    const title = titleTemplate.replace(/{count}/, clusterItems.length);\n    const clusterContent = '<div title=\"' + title + '\">' + clusterItems.length + \"</div>\";\n    const clusterOptions = _Object$assign({}, options, this.itemSet.options);\n    const data = {\n      content: clusterContent,\n      title: title,\n      group: group,\n      uiItems: clusterItems,\n      eventEmitter: this.itemSet.body.emitter,\n      range: this.itemSet.body.range\n    };\n    cluster = this.createClusterItem(data, conversion, clusterOptions);\n    if (group) {\n      group.add(cluster);\n      cluster.group = group;\n    }\n    cluster.attach();\n    return cluster;\n  }\n\n  /**\n   * Drop cache\n   * @private\n   */\n  _dropLevelsCache() {\n    this.cache = {};\n    this.cacheLevel = -1;\n    this.cache[this.cacheLevel] = [];\n  }\n}\n\nconst UNGROUPED$1 = \"__ungrouped__\"; // reserved group id for ungrouped items\nconst BACKGROUND = \"__background__\"; // reserved group id for background items without group\n\n/**\n * An ItemSet holds a set of items and ranges which can be displayed in a\n * range. The width is determined by the parent of the ItemSet, and the height\n * is determined by the size of the items.\n */\nclass ItemSet extends Component {\n  /**\n   * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n   * @param {Object} [options]      See ItemSet.setOptions for the available options.\n   * @constructor ItemSet\n   * @extends Component\n   */\n  constructor(body, options) {\n    super();\n    this.body = body;\n    this.defaultOptions = {\n      type: null,\n      // 'box', 'point', 'range', 'background'\n      orientation: {\n        item: \"bottom\" // item orientation: 'top' or 'bottom'\n      },\n      align: \"auto\",\n      // alignment of box items\n      stack: true,\n      stackSubgroups: true,\n      groupOrderSwap(fromGroup, toGroup) {\n        const targetOrder = toGroup.order;\n        toGroup.order = fromGroup.order;\n        fromGroup.order = targetOrder;\n      },\n      groupOrder: \"order\",\n      selectable: true,\n      multiselect: false,\n      longSelectPressTime: 251,\n      itemsAlwaysDraggable: {\n        item: false,\n        range: false\n      },\n      editable: {\n        updateTime: false,\n        updateGroup: false,\n        add: false,\n        remove: false,\n        overrideItems: false\n      },\n      groupEditable: {\n        order: false,\n        add: false,\n        remove: false\n      },\n      snap: TimeStep.snap,\n      // Only called when `objectData.target === 'item'.\n      onDropObjectOnItem(_objectData, item, callback) {\n        callback(item);\n      },\n      onAdd(item, callback) {\n        callback(item);\n      },\n      onUpdate(item, callback) {\n        callback(item);\n      },\n      onMove(item, callback) {\n        callback(item);\n      },\n      onRemove(item, callback) {\n        callback(item);\n      },\n      onMoving(item, callback) {\n        callback(item);\n      },\n      onAddGroup(item, callback) {\n        callback(item);\n      },\n      onMoveGroup(item, callback) {\n        callback(item);\n      },\n      onRemoveGroup(item, callback) {\n        callback(item);\n      },\n      margin: {\n        item: {\n          horizontal: 10,\n          vertical: 10\n        },\n        axis: 20\n      },\n      showTooltips: true,\n      tooltip: {\n        followMouse: false,\n        overflowMethod: \"flip\",\n        delay: 500\n      },\n      tooltipOnItemUpdateTime: false\n    };\n\n    // options is shared by this ItemSet and all its items\n    this.options = availableUtils.extend({}, this.defaultOptions);\n    this.options.rtl = options.rtl;\n    this.options.onTimeout = options.onTimeout;\n    this.conversion = {\n      toScreen: body.util.toScreen,\n      toTime: body.util.toTime\n    };\n    this.dom = {};\n    this.props = {};\n    this.hammer = null;\n    const me = this;\n    this.itemsData = null; // DataSet\n    this.groupsData = null; // DataSet\n    this.itemsSettingTime = null;\n    this.initialItemSetDrawn = false;\n    this.userContinueNotBail = null;\n    this.sequentialSelection = false;\n\n    // listeners for the DataSet of the items\n    this.itemListeners = {\n      add(_event, params) {\n        me._onAdd(params.items);\n        if (me.options.cluster) {\n          me.clusterGenerator.setItems(me.items, {\n            applyOnChangedLevel: false\n          });\n        }\n        me.redraw();\n      },\n      update(_event, params) {\n        me._onUpdate(params.items);\n        if (me.options.cluster) {\n          me.clusterGenerator.setItems(me.items, {\n            applyOnChangedLevel: false\n          });\n        }\n        me.redraw();\n      },\n      remove(_event, params) {\n        me._onRemove(params.items);\n        if (me.options.cluster) {\n          me.clusterGenerator.setItems(me.items, {\n            applyOnChangedLevel: false\n          });\n        }\n        me.redraw();\n      }\n    };\n\n    // listeners for the DataSet of the groups\n    this.groupListeners = {\n      add(_event, params, senderId) {\n        me._onAddGroups(params.items);\n        if (me.groupsData && me.groupsData.length > 0) {\n          var _context;\n          const groupsData = me.groupsData.getDataSet();\n          _forEachInstanceProperty(_context = groupsData.get()).call(_context, groupData => {\n            if (groupData.nestedGroups) {\n              var _context2;\n              if (groupData.showNested != false) {\n                groupData.showNested = true;\n              }\n              let updatedGroups = [];\n              _forEachInstanceProperty(_context2 = groupData.nestedGroups).call(_context2, nestedGroupId => {\n                const updatedNestedGroup = groupsData.get(nestedGroupId);\n                if (!updatedNestedGroup) {\n                  return;\n                }\n                updatedNestedGroup.nestedInGroup = groupData.id;\n                if (groupData.showNested == false) {\n                  updatedNestedGroup.visible = false;\n                }\n                updatedGroups = _concatInstanceProperty(updatedGroups).call(updatedGroups, updatedNestedGroup);\n              });\n              groupsData.update(updatedGroups, senderId);\n            }\n          });\n        }\n      },\n      update(_event, params) {\n        me._onUpdateGroups(params.items);\n      },\n      remove(_event, params) {\n        me._onRemoveGroups(params.items);\n      }\n    };\n    this.items = {}; // object with an Item for every data item\n    this.groups = {}; // Group object for every group\n    this.groupIds = [];\n    this.selection = []; // list with the ids of all selected nodes\n\n    this.popup = null;\n    this.popupTimer = null;\n    this.touchParams = {}; // stores properties while dragging\n    this.groupTouchParams = {\n      group: null,\n      isDragging: false\n    };\n\n    // create the HTML DOM\n    this._create();\n    this.setOptions(options);\n    this.clusters = [];\n  }\n\n  /**\n   * Create the HTML DOM for the ItemSet\n   */\n  _create() {\n    var _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context0, _context1, _context10, _context11, _context12, _context13, _context14, _context15;\n    const frame = document.createElement(\"div\");\n    frame.className = \"vis-itemset\";\n    frame[\"vis-itemset\"] = this;\n    this.dom.frame = frame;\n\n    // create background panel\n    const background = document.createElement(\"div\");\n    background.className = \"vis-background\";\n    frame.appendChild(background);\n    this.dom.background = background;\n\n    // create foreground panel\n    const foreground = document.createElement(\"div\");\n    foreground.className = \"vis-foreground\";\n    frame.appendChild(foreground);\n    this.dom.foreground = foreground;\n\n    // create axis panel\n    const axis = document.createElement(\"div\");\n    axis.className = \"vis-axis\";\n    this.dom.axis = axis;\n\n    // create labelset\n    const labelSet = document.createElement(\"div\");\n    labelSet.className = \"vis-labelset\";\n    this.dom.labelSet = labelSet;\n\n    // create ungrouped Group\n    this._updateUngrouped();\n\n    // create background Group\n    const backgroundGroup = new BackgroundGroup(BACKGROUND, null, this);\n    backgroundGroup.show();\n    this.groups[BACKGROUND] = backgroundGroup;\n\n    // attach event listeners\n    // Note: we bind to the centerContainer for the case where the height\n    //       of the center container is larger than of the ItemSet, so we\n    //       can click in the empty area to create a new item or deselect an item.\n    this.hammer = new Hammer(this.body.dom.centerContainer);\n\n    // drag items when selected\n    this.hammer.on(\"hammer.input\", event => {\n      if (event.isFirst) {\n        this._onTouch(event);\n      }\n    });\n    this.hammer.on(\"panstart\", _bindInstanceProperty(_context3 = this._onDragStart).call(_context3, this));\n    this.hammer.on(\"panmove\", _bindInstanceProperty(_context4 = this._onDrag).call(_context4, this));\n    this.hammer.on(\"panend\", _bindInstanceProperty(_context5 = this._onDragEnd).call(_context5, this));\n    this.hammer.get(\"pan\").set({\n      threshold: 5,\n      direction: Hammer.ALL\n    });\n    // delay addition on item click for trackpads...\n    this.hammer.get(\"press\").set({\n      time: 10000\n    });\n\n    // single select (or unselect) when tapping an item\n    this.hammer.on(\"tap\", _bindInstanceProperty(_context6 = this._onSelectItem).call(_context6, this));\n\n    // multi select when holding mouse/touch, or on ctrl+click\n    this.hammer.on(\"press\", _bindInstanceProperty(_context7 = this._onMultiSelectItem).call(_context7, this));\n    // delay addition on item click for trackpads...\n    this.hammer.get(\"press\").set({\n      time: 10000\n    });\n\n    // add item on doubletap\n    this.hammer.on(\"doubletap\", _bindInstanceProperty(_context8 = this._onAddItem).call(_context8, this));\n    if (this.options.rtl) {\n      this.groupHammer = new Hammer(this.body.dom.rightContainer);\n    } else {\n      this.groupHammer = new Hammer(this.body.dom.leftContainer);\n    }\n    this.groupHammer.on(\"tap\", _bindInstanceProperty(_context9 = this._onGroupClick).call(_context9, this));\n    this.groupHammer.on(\"panstart\", _bindInstanceProperty(_context0 = this._onGroupDragStart).call(_context0, this));\n    this.groupHammer.on(\"panmove\", _bindInstanceProperty(_context1 = this._onGroupDrag).call(_context1, this));\n    this.groupHammer.on(\"panend\", _bindInstanceProperty(_context10 = this._onGroupDragEnd).call(_context10, this));\n    this.groupHammer.get(\"pan\").set({\n      threshold: 5,\n      direction: Hammer.DIRECTION_VERTICAL\n    });\n    this.body.dom.centerContainer.addEventListener(\"mouseover\", _bindInstanceProperty(_context11 = this._onMouseOver).call(_context11, this));\n    this.body.dom.centerContainer.addEventListener(\"mouseout\", _bindInstanceProperty(_context12 = this._onMouseOut).call(_context12, this));\n    this.body.dom.centerContainer.addEventListener(\"mousemove\", _bindInstanceProperty(_context13 = this._onMouseMove).call(_context13, this));\n    // right-click on timeline\n    this.body.dom.centerContainer.addEventListener(\"contextmenu\", _bindInstanceProperty(_context14 = this._onDragEnd).call(_context14, this));\n    this.body.dom.centerContainer.addEventListener(\"mousewheel\", _bindInstanceProperty(_context15 = this._onMouseWheel).call(_context15, this));\n\n    // attach to the DOM\n    this.show();\n  }\n\n  /**\n   * Set options for the ItemSet. Existing options will be extended/overwritten.\n   * @param {Object} [options] The following options are available:\n   *                           {string} type\n   *                              Default type for the items. Choose from 'box'\n   *                              (default), 'point', 'range', or 'background'.\n   *                              The default style can be overwritten by\n   *                              individual items.\n   *                           {string} align\n   *                              Alignment for the items, only applicable for\n   *                              BoxItem. Choose 'center' (default), 'left', or\n   *                              'right'.\n   *                           {string} orientation.item\n   *                              Orientation of the item set. Choose 'top' or\n   *                              'bottom' (default).\n   *                           {Function} groupOrder\n   *                              A sorting function for ordering groups\n   *                           {boolean} stack\n   *                              If true (default), items will be stacked on\n   *                              top of each other.\n   *                           {number} margin.axis\n   *                              Margin between the axis and the items in pixels.\n   *                              Default is 20.\n   *                           {number} margin.item.horizontal\n   *                              Horizontal margin between items in pixels.\n   *                              Default is 10.\n   *                           {number} margin.item.vertical\n   *                              Vertical Margin between items in pixels.\n   *                              Default is 10.\n   *                           {number} margin.item\n   *                              Margin between items in pixels in both horizontal\n   *                              and vertical direction. Default is 10.\n   *                           {number} margin\n   *                              Set margin for both axis and items in pixels.\n   *                           {boolean} selectable\n   *                              If true (default), items can be selected.\n   *                           {boolean} multiselect\n   *                              If true, multiple items can be selected.\n   *                              False by default.\n   *                           {boolean} editable\n   *                              Set all editable options to true or false\n   *                           {boolean} editable.updateTime\n   *                              Allow dragging an item to an other moment in time\n   *                           {boolean} editable.updateGroup\n   *                              Allow dragging an item to an other group\n   *                           {boolean} editable.add\n   *                              Allow creating new items on double tap\n   *                           {boolean} editable.remove\n   *                              Allow removing items by clicking the delete button\n   *                              top right of a selected item.\n   *                           {Function(item: Item, callback: Function)} onAdd\n   *                              Callback function triggered when an item is about to be added:\n   *                              when the user double taps an empty space in the Timeline.\n   *                           {Function(item: Item, callback: Function)} onUpdate\n   *                              Callback function fired when an item is about to be updated.\n   *                              This function typically has to show a dialog where the user\n   *                              change the item. If not implemented, nothing happens.\n   *                           {Function(item: Item, callback: Function)} onMove\n   *                              Fired when an item has been moved. If not implemented,\n   *                              the move action will be accepted.\n   *                           {Function(item: Item, callback: Function)} onRemove\n   *                              Fired when an item is about to be deleted.\n   *                              If not implemented, the item will be always removed.\n   */\n  setOptions(options) {\n    if (options) {\n      var _context16, _context18;\n      // copy all options that we know\n      const fields = [\"type\", \"rtl\", \"align\", \"order\", \"stack\", \"stackSubgroups\", \"selectable\", \"multiselect\", \"sequentialSelection\", \"multiselectPerGroup\", \"longSelectPressTime\", \"groupOrder\", \"dataAttributes\", \"template\", \"groupTemplate\", \"visibleFrameTemplate\", \"hide\", \"snap\", \"groupOrderSwap\", \"showTooltips\", \"tooltip\", \"tooltipOnItemUpdateTime\", \"groupHeightMode\", \"onTimeout\"];\n      availableUtils.selectiveExtend(fields, this.options, options);\n      if (\"itemsAlwaysDraggable\" in options) {\n        if (typeof options.itemsAlwaysDraggable === \"boolean\") {\n          this.options.itemsAlwaysDraggable.item = options.itemsAlwaysDraggable;\n          this.options.itemsAlwaysDraggable.range = false;\n        } else if (typeof options.itemsAlwaysDraggable === \"object\") {\n          availableUtils.selectiveExtend([\"item\", \"range\"], this.options.itemsAlwaysDraggable, options.itemsAlwaysDraggable);\n          // only allow range always draggable when item is always draggable as well\n          if (!this.options.itemsAlwaysDraggable.item) {\n            this.options.itemsAlwaysDraggable.range = false;\n          }\n        }\n      }\n      if (\"sequentialSelection\" in options) {\n        if (typeof options.sequentialSelection === \"boolean\") {\n          this.options.sequentialSelection = options.sequentialSelection;\n        }\n      }\n      if (\"orientation\" in options) {\n        if (typeof options.orientation === \"string\") {\n          this.options.orientation.item = options.orientation === \"top\" ? \"top\" : \"bottom\";\n        } else if (typeof options.orientation === \"object\" && \"item\" in options.orientation) {\n          this.options.orientation.item = options.orientation.item;\n        }\n      }\n      if (\"margin\" in options) {\n        if (typeof options.margin === \"number\") {\n          this.options.margin.axis = options.margin;\n          this.options.margin.item.horizontal = options.margin;\n          this.options.margin.item.vertical = options.margin;\n        } else if (typeof options.margin === \"object\") {\n          availableUtils.selectiveExtend([\"axis\"], this.options.margin, options.margin);\n          if (\"item\" in options.margin) {\n            if (typeof options.margin.item === \"number\") {\n              this.options.margin.item.horizontal = options.margin.item;\n              this.options.margin.item.vertical = options.margin.item;\n            } else if (typeof options.margin.item === \"object\") {\n              availableUtils.selectiveExtend([\"horizontal\", \"vertical\"], this.options.margin.item, options.margin.item);\n            }\n          }\n        }\n      }\n      _forEachInstanceProperty(_context16 = [\"locale\", \"locales\"]).call(_context16, key => {\n        if (key in options) {\n          this.options[key] = options[key];\n        }\n      });\n      if (\"editable\" in options) {\n        if (typeof options.editable === \"boolean\") {\n          this.options.editable.updateTime = options.editable;\n          this.options.editable.updateGroup = options.editable;\n          this.options.editable.add = options.editable;\n          this.options.editable.remove = options.editable;\n          this.options.editable.overrideItems = false;\n        } else if (typeof options.editable === \"object\") {\n          availableUtils.selectiveExtend([\"updateTime\", \"updateGroup\", \"add\", \"remove\", \"overrideItems\"], this.options.editable, options.editable);\n        }\n      }\n      if (\"groupEditable\" in options) {\n        if (typeof options.groupEditable === \"boolean\") {\n          this.options.groupEditable.order = options.groupEditable;\n          this.options.groupEditable.add = options.groupEditable;\n          this.options.groupEditable.remove = options.groupEditable;\n        } else if (typeof options.groupEditable === \"object\") {\n          availableUtils.selectiveExtend([\"order\", \"add\", \"remove\"], this.options.groupEditable, options.groupEditable);\n        }\n      }\n\n      // callback functions\n      const addCallback = name => {\n        const fn = options[name];\n        if (fn) {\n          if (!(typeof fn === \"function\")) {\n            var _context17;\n            throw new Error(_concatInstanceProperty(_context17 = \"option \".concat(name, \" must be a function \")).call(_context17, name, \"(item, callback)\"));\n          }\n          this.options[name] = fn;\n        }\n      };\n      _forEachInstanceProperty(_context18 = [\"onDropObjectOnItem\", \"onAdd\", \"onUpdate\", \"onRemove\", \"onMove\", \"onMoving\", \"onAddGroup\", \"onMoveGroup\", \"onRemoveGroup\"]).call(_context18, addCallback);\n      if (options.cluster) {\n        _Object$assign(this.options, {\n          cluster: options.cluster\n        });\n        if (!this.clusterGenerator) {\n          this.clusterGenerator = new ClusterGenerator(this);\n        }\n        this.clusterGenerator.setItems(this.items, {\n          applyOnChangedLevel: false\n        });\n        this.markDirty({\n          refreshItems: true,\n          restackGroups: true\n        });\n        this.redraw();\n      } else if (this.clusterGenerator) {\n        this._detachAllClusters();\n        this.clusters = [];\n        this.clusterGenerator = null;\n        this.options.cluster = undefined;\n        this.markDirty({\n          refreshItems: true,\n          restackGroups: true\n        });\n        this.redraw();\n      } else {\n        // force the itemSet to refresh: options like orientation and margins may be changed\n        this.markDirty();\n      }\n    }\n  }\n\n  /**\n   * Mark the ItemSet dirty so it will refresh everything with next redraw.\n   * Optionally, all items can be marked as dirty and be refreshed.\n   * @param {{refreshItems: boolean}} [options]\n   */\n  markDirty(options) {\n    this.groupIds = [];\n    if (options) {\n      if (options.refreshItems) {\n        _forEachInstanceProperty(availableUtils).call(availableUtils, this.items, item => {\n          item.dirty = true;\n          if (item.displayed) item.redraw();\n        });\n      }\n      if (options.restackGroups) {\n        _forEachInstanceProperty(availableUtils).call(availableUtils, this.groups, (group, key) => {\n          if (key === BACKGROUND) return;\n          group.stackDirty = true;\n        });\n      }\n    }\n  }\n\n  /**\n   * Destroy the ItemSet\n   */\n  destroy() {\n    this.clearPopupTimer();\n    this.hide();\n    this.setItems(null);\n    this.setGroups(null);\n    this.hammer && this.hammer.destroy();\n    this.groupHammer && this.groupHammer.destroy();\n    this.hammer = null;\n    this.body = null;\n    this.conversion = null;\n  }\n\n  /**\n   * Hide the component from the DOM\n   */\n  hide() {\n    // remove the frame containing the items\n    if (this.dom.frame.parentNode) {\n      this.dom.frame.parentNode.removeChild(this.dom.frame);\n    }\n\n    // remove the axis with dots\n    if (this.dom.axis.parentNode) {\n      this.dom.axis.parentNode.removeChild(this.dom.axis);\n    }\n\n    // remove the labelset containing all group labels\n    if (this.dom.labelSet.parentNode) {\n      this.dom.labelSet.parentNode.removeChild(this.dom.labelSet);\n    }\n  }\n\n  /**\n   * Show the component in the DOM (when not already visible).\n   */\n  show() {\n    // show frame containing the items\n    if (!this.dom.frame.parentNode) {\n      this.body.dom.center.appendChild(this.dom.frame);\n    }\n\n    // show axis with dots\n    if (!this.dom.axis.parentNode) {\n      this.body.dom.backgroundVertical.appendChild(this.dom.axis);\n    }\n\n    // show labelset containing labels\n    if (!this.dom.labelSet.parentNode) {\n      if (this.options.rtl) {\n        this.body.dom.right.appendChild(this.dom.labelSet);\n      } else {\n        this.body.dom.left.appendChild(this.dom.labelSet);\n      }\n    }\n  }\n\n  /**\n   * Activates the popup timer to show the given popup after a fixed time.\n   * @param {Popup} popup\n   */\n  setPopupTimer(popup) {\n    this.clearPopupTimer();\n    if (popup) {\n      const delay = this.options.tooltip.delay || typeof this.options.tooltip.delay === \"number\" ? this.options.tooltip.delay : 500;\n      this.popupTimer = _setTimeout(function () {\n        popup.show();\n      }, delay);\n    }\n  }\n\n  /**\n   * Clears the popup timer for the tooltip.\n   */\n  clearPopupTimer() {\n    if (this.popupTimer != null) {\n      clearTimeout(this.popupTimer);\n      this.popupTimer = null;\n    }\n  }\n\n  /**\n   * Set selected items by their id. Replaces the current selection\n   * Unknown id's are silently ignored.\n   * @param {string[] | string} [ids] An array with zero or more id's of the items to be\n   *                                  selected, or a single item id. If ids is undefined\n   *                                  or an empty array, all items will be unselected.\n   */\n  setSelection(ids) {\n    var _context19;\n    if (ids == undefined) {\n      ids = [];\n    }\n    if (!_Array$isArray(ids)) {\n      ids = [ids];\n    }\n    const idsToDeselect = _filterInstanceProperty(_context19 = this.selection).call(_context19, id => _indexOfInstanceProperty(ids).call(ids, id) === -1);\n\n    // unselect currently selected items\n    for (let selectedId of idsToDeselect) {\n      const item = this.getItemById(selectedId);\n      if (item) {\n        item.unselect();\n      }\n    }\n\n    // select items\n    this.selection = [...ids];\n    for (let id of ids) {\n      const item = this.getItemById(id);\n      if (item) {\n        item.select();\n      }\n    }\n  }\n\n  /**\n   * Get the selected items by their id\n   * @return {Array} ids  The ids of the selected items\n   */\n  getSelection() {\n    var _context20;\n    return _concatInstanceProperty(_context20 = this.selection).call(_context20, []);\n  }\n\n  /**\n   * Get the id's of the currently visible items.\n   * @returns {Array} The ids of the visible items\n   */\n  getVisibleItems() {\n    const range = this.body.range.getRange();\n    let right;\n    let left;\n    if (this.options.rtl) {\n      right = this.body.util.toScreen(range.start);\n      left = this.body.util.toScreen(range.end);\n    } else {\n      left = this.body.util.toScreen(range.start);\n      right = this.body.util.toScreen(range.end);\n    }\n    const ids = [];\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n      const group = this.groups[groupId];\n      const rawVisibleItems = group.isVisible ? group.visibleItems : [];\n\n      // filter the \"raw\" set with visibleItems into a set which is really\n      // visible by pixels\n      for (const item of rawVisibleItems) {\n        // TODO: also check whether visible vertically\n        if (this.options.rtl) {\n          if (item.right < left && item.right + item.width > right) {\n            ids.push(item.id);\n          }\n        } else {\n          if (item.left < right && item.left + item.width > left) {\n            ids.push(item.id);\n          }\n        }\n      }\n    }\n    return ids;\n  }\n\n  /**\n   * Get the id's of the items at specific time, where a click takes place on the timeline.\n   * @param {Date} timeOfEvent The point in time to query items.\n   * @returns {Array} The ids of all items in existence at the time of click event on the timeline.\n   */\n  getItemsAtCurrentTime(timeOfEvent) {\n    let right;\n    let left;\n    if (this.options.rtl) {\n      right = this.body.util.toScreen(timeOfEvent);\n      left = this.body.util.toScreen(timeOfEvent);\n    } else {\n      left = this.body.util.toScreen(timeOfEvent);\n      right = this.body.util.toScreen(timeOfEvent);\n    }\n    const ids = [];\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n      const group = this.groups[groupId];\n      const rawVisibleItems = group.isVisible ? group.visibleItems : [];\n\n      // filter the \"raw\" set with visibleItems into a set which is really\n      // visible by pixels\n      for (const item of rawVisibleItems) {\n        if (this.options.rtl) {\n          if (item.right < left && item.right + item.width > right) {\n            ids.push(item.id);\n          }\n        } else {\n          if (item.left < right && item.left + item.width > left) {\n            ids.push(item.id);\n          }\n        }\n      }\n    }\n    return ids;\n  }\n\n  /**\n   * Get the id's of the currently visible groups.\n   * @returns {Array} The ids of the visible groups\n   */\n  getVisibleGroups() {\n    const ids = [];\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n      const group = this.groups[groupId];\n      if (group.isVisible) ids.push(groupId);\n    }\n    return ids;\n  }\n\n  /**\n   * get item by id\n   * @param {string} id\n   * @return {object} item\n   */\n  getItemById(id) {\n    var _context21;\n    return this.items[id] || _findInstanceProperty(_context21 = this.clusters).call(_context21, cluster => cluster.id === id);\n  }\n\n  /**\n   * Deselect a selected item\n   * @param {string | number} id\n   * @private\n   */\n  _deselect(id) {\n    const selection = this.selection;\n    for (let i = 0, ii = selection.length; i < ii; i++) {\n      if (selection[i] == id) {\n        // non-strict comparison!\n        _spliceInstanceProperty(selection).call(selection, i, 1);\n        break;\n      }\n    }\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    const margin = this.options.margin;\n    const range = this.body.range;\n    const asSize = availableUtils.option.asSize;\n    const options = this.options;\n    const orientation = options.orientation.item;\n    let resized = false;\n    const frame = this.dom.frame;\n\n    // recalculate absolute position (before redrawing groups)\n    this.props.top = this.body.domProps.top.height + this.body.domProps.border.top;\n    if (this.options.rtl) {\n      this.props.right = this.body.domProps.right.width + this.body.domProps.border.right;\n    } else {\n      this.props.left = this.body.domProps.left.width + this.body.domProps.border.left;\n    }\n\n    // update class name\n    frame.className = \"vis-itemset\";\n    if (this.options.cluster) {\n      this._clusterItems();\n    }\n\n    // reorder the groups (if needed)\n    resized = this._orderGroups() || resized;\n\n    // check whether zoomed (in that case we need to re-stack everything)\n    // TODO: would be nicer to get this as a trigger from Range\n    const visibleInterval = range.end - range.start;\n    const zoomed = visibleInterval != this.lastVisibleInterval || this.props.width != this.props.lastWidth;\n    const scrolled = range.start != this.lastRangeStart;\n    const changedStackOption = options.stack != this.lastStack;\n    const changedStackSubgroupsOption = options.stackSubgroups != this.lastStackSubgroups;\n    const forceRestack = zoomed || scrolled || changedStackOption || changedStackSubgroupsOption;\n    this.lastVisibleInterval = visibleInterval;\n    this.lastRangeStart = range.start;\n    this.lastStack = options.stack;\n    this.lastStackSubgroups = options.stackSubgroups;\n    this.props.lastWidth = this.props.width;\n    const firstGroup = this._firstGroup();\n    const firstMargin = {\n      item: margin.item,\n      axis: margin.axis\n    };\n    const nonFirstMargin = {\n      item: margin.item,\n      axis: margin.item.vertical / 2\n    };\n    let height = 0;\n    const minHeight = margin.axis + margin.item.vertical;\n\n    // redraw the background group\n    this.groups[BACKGROUND].redraw(range, nonFirstMargin, forceRestack);\n    const redrawQueue = {};\n    let redrawQueueLength = 0;\n\n    // collect redraw functions\n    _forEachInstanceProperty(availableUtils).call(availableUtils, this.groups, (group, key) => {\n      if (key === BACKGROUND) return;\n      const groupMargin = group == firstGroup ? firstMargin : nonFirstMargin;\n      const returnQueue = true;\n      redrawQueue[key] = group.redraw(range, groupMargin, forceRestack, returnQueue);\n      redrawQueueLength = redrawQueue[key].length;\n    });\n    const needRedraw = redrawQueueLength > 0;\n    if (needRedraw) {\n      const redrawResults = {};\n      for (let i = 0; i < redrawQueueLength; i++) {\n        _forEachInstanceProperty(availableUtils).call(availableUtils, redrawQueue, (fns, key) => {\n          redrawResults[key] = fns[i]();\n        });\n      }\n\n      // redraw all regular groups\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.groups, (group, key) => {\n        if (key === BACKGROUND) return;\n        const groupResized = redrawResults[key];\n        resized = groupResized || resized;\n        height += group.height;\n      });\n      height = Math.max(height, minHeight);\n    }\n    height = Math.max(height, minHeight);\n\n    // update frame height\n    frame.style.height = asSize(height);\n\n    // calculate actual size\n    this.props.width = frame.offsetWidth;\n    this.props.height = height;\n\n    // reposition axis\n    this.dom.axis.style.top = asSize(orientation == \"top\" ? this.body.domProps.top.height + this.body.domProps.border.top : this.body.domProps.top.height + this.body.domProps.centerContainer.height);\n    if (this.options.rtl) {\n      this.dom.axis.style.right = \"0\";\n    } else {\n      this.dom.axis.style.left = \"0\";\n    }\n    this.hammer.get(\"press\").set({\n      time: this.options.longSelectPressTime\n    });\n    this.initialItemSetDrawn = true;\n    // check if this component is resized\n    resized = this._isResized() || resized;\n    return resized;\n  }\n\n  /**\n   * Get the first group, aligned with the axis\n   * @return {Group | null} firstGroup\n   * @private\n   */\n  _firstGroup() {\n    const firstGroupIndex = this.options.orientation.item == \"top\" ? 0 : this.groupIds.length - 1;\n    const firstGroupId = this.groupIds[firstGroupIndex];\n    const firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED$1];\n    return firstGroup || null;\n  }\n\n  /**\n   * Create or delete the group holding all ungrouped items. This group is used when\n   * there are no groups specified.\n   * @protected\n   */\n  _updateUngrouped() {\n    let ungrouped = this.groups[UNGROUPED$1];\n    let item;\n    let itemId;\n    if (this.groupsData) {\n      // remove the group holding all ungrouped items\n      if (ungrouped) {\n        ungrouped.dispose();\n        delete this.groups[UNGROUPED$1];\n        for (itemId in this.items) {\n          if (!Object.prototype.hasOwnProperty.call(this.items, itemId)) continue;\n          item = this.items[itemId];\n          item.parent && item.parent.remove(item);\n          const groupId = this.getGroupId(item.data);\n          const group = this.groups[groupId];\n          group && group.add(item) || item.hide();\n        }\n      }\n    } else {\n      // create a group holding all (unfiltered) items\n      if (!ungrouped) {\n        const id = null;\n        const data = null;\n        ungrouped = new Group(id, data, this);\n        this.groups[UNGROUPED$1] = ungrouped;\n        for (itemId in this.items) {\n          if (!Object.prototype.hasOwnProperty.call(this.items, itemId)) continue;\n          item = this.items[itemId];\n          ungrouped.add(item);\n        }\n        ungrouped.show();\n      }\n    }\n  }\n\n  /**\n   * Get the element for the labelset\n   * @return {HTMLElement} labelSet\n   */\n  getLabelSet() {\n    return this.dom.labelSet;\n  }\n\n  /**\n   * Set items\n   * @param {vis.DataSet | null} items\n   */\n  setItems(items) {\n    this.itemsSettingTime = new Date();\n    const me = this;\n    let ids;\n    const oldItemsData = this.itemsData;\n\n    // replace the dataset\n    if (!items) {\n      this.itemsData = null;\n    } else if (isDataViewLike(items)) {\n      this.itemsData = typeCoerceDataSet(items);\n    } else {\n      throw new TypeError(\"Data must implement the interface of DataSet or DataView\");\n    }\n    if (oldItemsData) {\n      // unsubscribe from old dataset\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.itemListeners, (callback, event) => {\n        oldItemsData.off(event, callback);\n      });\n\n      // stop maintaining a coerced version of the old data set\n      oldItemsData.dispose();\n\n      // remove all drawn items\n      ids = oldItemsData.getIds();\n      this._onRemove(ids);\n    }\n    if (this.itemsData) {\n      // subscribe to new dataset\n      const id = this.id;\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.itemListeners, (callback, event) => {\n        me.itemsData.on(event, callback, id);\n      });\n\n      // add all new items\n      ids = this.itemsData.getIds();\n      this._onAdd(ids);\n\n      // update the group holding all ungrouped items\n      this._updateUngrouped();\n    }\n    this.body.emitter.emit(\"_change\", {\n      queue: true\n    });\n  }\n\n  /**\n   * Get the current items\n   * @returns {vis.DataSet | null}\n   */\n  getItems() {\n    return this.itemsData != null ? this.itemsData.rawDS : null;\n  }\n\n  /**\n   * Set groups\n   * @param {vis.DataSet} groups\n   */\n  setGroups(groups) {\n    const me = this;\n    let ids;\n\n    // unsubscribe from current dataset\n    if (this.groupsData) {\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.groupListeners, (callback, event) => {\n        me.groupsData.off(event, callback);\n      });\n\n      // remove all drawn groups\n      ids = this.groupsData.getIds();\n      this.groupsData = null;\n      this._onRemoveGroups(ids); // note: this will cause a redraw\n    }\n\n    // replace the dataset\n    if (!groups) {\n      this.groupsData = null;\n    } else if (isDataViewLike(groups)) {\n      this.groupsData = groups;\n    } else {\n      throw new TypeError(\"Data must implement the interface of DataSet or DataView\");\n    }\n    if (this.groupsData) {\n      var _context22;\n      // go over all groups nesting\n      const groupsData = this.groupsData.getDataSet();\n      _forEachInstanceProperty(_context22 = groupsData.get()).call(_context22, group => {\n        if (group.nestedGroups) {\n          var _context23;\n          _forEachInstanceProperty(_context23 = group.nestedGroups).call(_context23, nestedGroupId => {\n            const updatedNestedGroup = groupsData.get(nestedGroupId);\n            updatedNestedGroup.nestedInGroup = group.id;\n            if (group.showNested == false) {\n              updatedNestedGroup.visible = false;\n            }\n            groupsData.update(updatedNestedGroup);\n          });\n        }\n      });\n\n      // subscribe to new dataset\n      const id = this.id;\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.groupListeners, (callback, event) => {\n        me.groupsData.on(event, callback, id);\n      });\n\n      // draw all ms\n      ids = this.groupsData.getIds();\n      this._onAddGroups(ids);\n    }\n\n    // update the group holding all ungrouped items\n    this._updateUngrouped();\n\n    // update the order of all items in each group\n    this._order();\n    if (this.options.cluster) {\n      this.clusterGenerator.updateData();\n      this._clusterItems();\n      this.markDirty({\n        refreshItems: true,\n        restackGroups: true\n      });\n    }\n    this.body.emitter.emit(\"_change\", {\n      queue: true\n    });\n  }\n\n  /**\n   * Get the current groups\n   * @returns {vis.DataSet | null} groups\n   */\n  getGroups() {\n    return this.groupsData;\n  }\n\n  /**\n   * Remove an item by its id\n   * @param {string | number} id\n   */\n  removeItem(id) {\n    const item = this.itemsData.get(id);\n    if (item) {\n      // confirm deletion\n      this.options.onRemove(item, item => {\n        if (item) {\n          // remove by id here, it is possible that an item has no id defined\n          // itself, so better not delete by the item itself\n          this.itemsData.remove(id);\n        }\n      });\n    }\n  }\n\n  /**\n   * Get the time of an item based on it's data and options.type\n   * @param {Object} itemData\n   * @returns {string} Returns the type\n   * @private\n   */\n  _getType(itemData) {\n    return itemData.type || this.options.type || (itemData.end ? \"range\" : \"box\");\n  }\n\n  /**\n   * Get the group id for an item\n   * @param {Object} itemData\n   * @returns {string} Returns the groupId\n   * @private\n   */\n  getGroupId(itemData) {\n    const type = this._getType(itemData);\n    if (type == \"background\" && itemData.group == undefined) {\n      return BACKGROUND;\n    } else {\n      return this.groupsData ? itemData.group : UNGROUPED$1;\n    }\n  }\n\n  /**\n   * Handle updated items\n   * @param {number[]} ids\n   * @protected\n   */\n  _onUpdate(ids) {\n    const me = this;\n    _forEachInstanceProperty(ids).call(ids, id => {\n      const itemData = me.itemsData.get(id);\n      let item = me.items[id];\n      const type = itemData ? me._getType(itemData) : null;\n      const constructor = ItemSet.types[type];\n      let selected;\n      if (item) {\n        // update item\n        if (!constructor || !(item instanceof constructor)) {\n          // item type has changed, delete the item and recreate it\n          selected = item.selected; // preserve selection of this item\n          me._removeItem(item);\n          item = null;\n        } else {\n          me._updateItem(item, itemData);\n        }\n      }\n      if (!item && itemData) {\n        // create item\n        if (constructor) {\n          item = new constructor(itemData, me.conversion, me.options);\n          item.id = id; // TODO: not so nice setting id afterwards\n\n          me._addItem(item);\n          if (selected) {\n            this.selection.push(id);\n            item.select();\n          }\n        } else {\n          throw new TypeError(\"Unknown item type \\\"\".concat(type, \"\\\"\"));\n        }\n      }\n    });\n    this._order();\n    if (this.options.cluster) {\n      this.clusterGenerator.setItems(this.items, {\n        applyOnChangedLevel: false\n      });\n      this._clusterItems();\n    }\n    this.body.emitter.emit(\"_change\", {\n      queue: true\n    });\n  }\n\n  /**\n   * Handle removed items\n   * @param {number[]} ids\n   * @protected\n   */\n  _onRemove(ids) {\n    let count = 0;\n    const me = this;\n    _forEachInstanceProperty(ids).call(ids, id => {\n      const item = me.items[id];\n      if (item) {\n        count++;\n        me._removeItem(item);\n      }\n    });\n    if (count) {\n      // update order\n      this._order();\n      this.body.emitter.emit(\"_change\", {\n        queue: true\n      });\n    }\n  }\n\n  /**\n   * Update the order of item in all groups\n   * @private\n   */\n  _order() {\n    // reorder the items in all groups\n    // TODO: optimization: only reorder groups affected by the changed items\n    _forEachInstanceProperty(availableUtils).call(availableUtils, this.groups, group => {\n      group.order();\n    });\n  }\n\n  /**\n   * Handle updated groups\n   * @param {number[]} ids\n   * @private\n   */\n  _onUpdateGroups(ids) {\n    this._onAddGroups(ids);\n  }\n\n  /**\n   * Handle changed groups (added or updated)\n   * @param {number[]} ids\n   * @private\n   */\n  _onAddGroups(ids) {\n    const me = this;\n    _forEachInstanceProperty(ids).call(ids, id => {\n      const groupData = me.groupsData.get(id);\n      let group = me.groups[id];\n      if (!group) {\n        // check for reserved ids\n        if (id == UNGROUPED$1 || id == BACKGROUND) {\n          throw new Error(\"Illegal group id. \".concat(id, \" is a reserved id.\"));\n        }\n        const groupOptions = _Object$create(me.options);\n        availableUtils.extend(groupOptions, {\n          height: null\n        });\n        group = new Group(id, groupData, me);\n        me.groups[id] = group;\n\n        // add items with this groupId to the new group\n        for (const itemId in me.items) {\n          if (!Object.prototype.hasOwnProperty.call(me.items, itemId)) continue;\n          const item = me.items[itemId];\n          if (item.data.group == id) group.add(item);\n        }\n        group.order();\n        group.show();\n      } else {\n        // update group\n        group.setData(groupData);\n      }\n    });\n    this.body.emitter.emit(\"_change\", {\n      queue: true\n    });\n  }\n\n  /**\n   * Handle removed groups\n   * @param {number[]} ids\n   * @private\n   */\n  _onRemoveGroups(ids) {\n    _forEachInstanceProperty(ids).call(ids, id => {\n      const group = this.groups[id];\n      if (group) {\n        group.dispose();\n        delete this.groups[id];\n      }\n    });\n    if (this.options.cluster) {\n      this.clusterGenerator.updateData();\n      this._clusterItems();\n    }\n    this.markDirty({\n      restackGroups: !!this.options.cluster\n    });\n    this.body.emitter.emit(\"_change\", {\n      queue: true\n    });\n  }\n\n  /**\n   * Reorder the groups if needed\n   * @return {boolean} changed\n   * @private\n   */\n  _orderGroups() {\n    if (this.groupsData) {\n      // reorder the groups\n      let groupIds = this.groupsData.getIds({\n        order: this.options.groupOrder\n      });\n      groupIds = this._orderNestedGroups(groupIds);\n      const changed = !availableUtils.equalArray(groupIds, this.groupIds);\n      if (changed) {\n        // hide all groups, removes them from the DOM\n        const groups = this.groups;\n        _forEachInstanceProperty(groupIds).call(groupIds, groupId => {\n          groups[groupId].hide();\n        });\n\n        // show the groups again, attach them to the DOM in correct order\n        _forEachInstanceProperty(groupIds).call(groupIds, groupId => {\n          groups[groupId].show();\n        });\n        this.groupIds = groupIds;\n      }\n      return changed;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Reorder the nested groups\n   *\n   * @param {Array.<number>} groupIds\n   * @returns {Array.<number>}\n   * @private\n   */\n  _orderNestedGroups(groupIds) {\n    /**\n     * Recursively order nested groups\n     *\n     * @param {ItemSet} t\n     * @param {Array.<number>} groupIds\n     * @returns {Array.<number>}\n     * @private\n     */\n    function getOrderedNestedGroups(t, groupIds) {\n      let result = [];\n      _forEachInstanceProperty(groupIds).call(groupIds, groupId => {\n        result.push(groupId);\n        const groupData = t.groupsData.get(groupId);\n        if (groupData.nestedGroups) {\n          var _context24;\n          const nestedGroupIds = _mapInstanceProperty(_context24 = t.groupsData.get({\n            filter(nestedGroup) {\n              return nestedGroup.nestedInGroup == groupId;\n            },\n            order: t.options.groupOrder\n          })).call(_context24, nestedGroup => nestedGroup.id);\n          result = _concatInstanceProperty(result).call(result, getOrderedNestedGroups(t, nestedGroupIds));\n        }\n      });\n      return result;\n    }\n    const topGroupIds = _filterInstanceProperty(groupIds).call(groupIds, groupId => !this.groupsData.get(groupId).nestedInGroup);\n    return getOrderedNestedGroups(this, topGroupIds);\n  }\n\n  /**\n   * Add a new item\n   * @param {Item} item\n   * @private\n   */\n  _addItem(item) {\n    this.items[item.id] = item;\n\n    // add to group\n    const groupId = this.getGroupId(item.data);\n    const group = this.groups[groupId];\n    if (!group) {\n      item.groupShowing = false;\n    } else if (group && group.data && group.data.showNested) {\n      item.groupShowing = true;\n    }\n    if (group) group.add(item);\n  }\n\n  /**\n   * Update an existing item\n   * @param {Item} item\n   * @param {Object} itemData\n   * @private\n   */\n  _updateItem(item, itemData) {\n    // update the items data (will redraw the item when displayed)\n    item.setData(itemData);\n    const groupId = this.getGroupId(item.data);\n    const group = this.groups[groupId];\n    if (!group) {\n      item.groupShowing = false;\n    } else if (group && group.data && group.data.showNested) {\n      item.groupShowing = true;\n    }\n  }\n\n  /**\n   * Delete an item from the ItemSet: remove it from the DOM, from the map\n   * with items, and from the map with visible items, and from the selection\n   * @param {Item} item\n   * @private\n   */\n  _removeItem(item) {\n    var _context25, _context26;\n    // remove from DOM\n    item.hide();\n\n    // remove from items\n    delete this.items[item.id];\n\n    // remove from selection\n    const index = _indexOfInstanceProperty(_context25 = this.selection).call(_context25, item.id);\n    if (index != -1) _spliceInstanceProperty(_context26 = this.selection).call(_context26, index, 1);\n\n    // remove from group\n    item.parent && item.parent.remove(item);\n\n    // remove Tooltip from DOM\n    if (this.popup != null) {\n      this.popup.hide();\n    }\n  }\n\n  /**\n   * Create an array containing all items being a range (having an end date)\n   * @param {Array.<Object>} array\n   * @returns {Array}\n   * @private\n   */\n  _constructByEndArray(array) {\n    const endArray = [];\n    for (let i = 0; i < array.length; i++) {\n      if (array[i] instanceof RangeItem) {\n        endArray.push(array[i]);\n      }\n    }\n    return endArray;\n  }\n\n  /**\n   * Register the clicked item on touch, before dragStart is initiated.\n   *\n   * dragStart is initiated from a mousemove event, AFTER the mouse/touch is\n   * already moving. Therefore, the mouse/touch can sometimes be above an other\n   * DOM element than the item itself.\n   *\n   * @param {Event} event\n   * @private\n   */\n  _onTouch(event) {\n    // store the touched item, used in _onDragStart\n    this.touchParams.item = this.itemFromTarget(event);\n    this.touchParams.dragLeftItem = event.target.dragLeftItem || false;\n    this.touchParams.dragRightItem = event.target.dragRightItem || false;\n    this.touchParams.itemProps = null;\n  }\n\n  /**\n   * Given an group id, returns the index it has.\n   *\n   * @param {number} groupId\n   * @returns {number} index / groupId\n   * @private\n   */\n  _getGroupIndex(groupId) {\n    for (let i = 0; i < this.groupIds.length; i++) {\n      if (groupId == this.groupIds[i]) return i;\n    }\n  }\n\n  /**\n   * Start dragging the selected events\n   * @param {Event} event\n   * @private\n   */\n  _onDragStart(event) {\n    if (this.touchParams.itemIsDragging) {\n      return;\n    }\n    const item = this.touchParams.item || null;\n    const me = this;\n    let props;\n    if (item && (item.selected || this.options.itemsAlwaysDraggable.item)) {\n      if (this.options.editable.overrideItems && !this.options.editable.updateTime && !this.options.editable.updateGroup) {\n        return;\n      }\n\n      // override options.editable\n      if (item.editable != null && !item.editable.updateTime && !item.editable.updateGroup && !this.options.editable.overrideItems) {\n        return;\n      }\n      const dragLeftItem = this.touchParams.dragLeftItem;\n      const dragRightItem = this.touchParams.dragRightItem;\n      this.touchParams.itemIsDragging = true;\n      this.touchParams.selectedItem = item;\n      if (dragLeftItem) {\n        props = {\n          item: dragLeftItem,\n          initialX: event.center.x,\n          dragLeft: true,\n          data: this._cloneItemData(item.data)\n        };\n        this.touchParams.itemProps = [props];\n      } else if (dragRightItem) {\n        props = {\n          item: dragRightItem,\n          initialX: event.center.x,\n          dragRight: true,\n          data: this._cloneItemData(item.data)\n        };\n        this.touchParams.itemProps = [props];\n      } else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) {\n        // create a new range item when dragging with ctrl key down\n        this._onDragStartAddItem(event);\n      } else {\n        if (this.groupIds.length < 1) {\n          // Mitigates a race condition if _onDragStart() is\n          // called after markDirty() without redraw() being called between.\n          this.redraw();\n        }\n        const baseGroupIndex = this._getGroupIndex(item.data.group);\n        const itemsToDrag = this.options.itemsAlwaysDraggable.item && !item.selected ? [item.id] : this.getSelection();\n        this.touchParams.itemProps = _mapInstanceProperty(itemsToDrag).call(itemsToDrag, id => {\n          const item = me.items[id];\n          const groupIndex = me._getGroupIndex(item.data.group);\n          return {\n            item,\n            initialX: event.center.x,\n            groupOffset: baseGroupIndex - groupIndex,\n            data: this._cloneItemData(item.data)\n          };\n        });\n      }\n      event.stopPropagation();\n    } else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) {\n      // create a new range item when dragging with ctrl key down\n      this._onDragStartAddItem(event);\n    }\n  }\n\n  /**\n   * Start creating a new range item by dragging.\n   * @param {Event} event\n   * @private\n   */\n  _onDragStartAddItem(event) {\n    const snap = this.options.snap || null;\n    const frameRect = this.dom.frame.getBoundingClientRect();\n\n    // plus (if rtl) 10 to compensate for the drag starting as soon as you've moved 10px\n    const x = this.options.rtl ? frameRect.right - event.center.x + 10 : event.center.x - frameRect.left - 10;\n    const time = this.body.util.toTime(x);\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    const start = snap ? snap(time, scale, step) : time;\n    const end = start;\n    const itemData = {\n      type: \"range\",\n      start,\n      end,\n      content: \"new item\"\n    };\n    const id = v4();\n    itemData[this.itemsData.idProp] = id;\n    const group = this.groupFromTarget(event);\n    if (group) {\n      itemData.group = group.groupId;\n    }\n    const newItem = new RangeItem(itemData, this.conversion, this.options);\n    newItem.id = id; // TODO: not so nice setting id afterwards\n    newItem.data = this._cloneItemData(itemData);\n    this._addItem(newItem);\n    this.touchParams.selectedItem = newItem;\n    const props = {\n      item: newItem,\n      initialX: event.center.x,\n      data: newItem.data\n    };\n    if (this.options.rtl) {\n      props.dragLeft = true;\n    } else {\n      props.dragRight = true;\n    }\n    this.touchParams.itemProps = [props];\n    event.stopPropagation();\n  }\n\n  /**\n   * Drag selected items\n   * @param {Event} event\n   * @private\n   */\n  _onDrag(event) {\n    if (this.popup != null && this.options.showTooltips && !this.popup.hidden) {\n      // this.popup.hide();\n      const container = this.body.dom.centerContainer;\n      const containerRect = container.getBoundingClientRect();\n      this.popup.setPosition(event.center.x - containerRect.left + container.offsetLeft, event.center.y - containerRect.top + container.offsetTop);\n      this.popup.show(); // redraw\n    }\n    if (this.touchParams.itemProps) {\n      var _context27;\n      event.stopPropagation();\n      const me = this;\n      const snap = this.options.snap || null;\n      const domRootOffsetLeft = this.body.dom.root.offsetLeft;\n      const xOffset = this.options.rtl ? domRootOffsetLeft + this.body.domProps.right.width : domRootOffsetLeft + this.body.domProps.left.width;\n      const scale = this.body.util.getScale();\n      const step = this.body.util.getStep();\n\n      //only calculate the new group for the item that's actually dragged\n      const selectedItem = this.touchParams.selectedItem;\n      const updateGroupAllowed = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateGroup || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateGroup;\n      let newGroupBase = null;\n      if (updateGroupAllowed && selectedItem) {\n        if (selectedItem.data.group != undefined) {\n          // drag from one group to another\n          const group = me.groupFromTarget(event);\n          if (group) {\n            //we know the offset for all items, so the new group for all items\n            //will be relative to this one.\n            newGroupBase = this._getGroupIndex(group.groupId);\n          }\n        }\n      }\n\n      // move\n      _forEachInstanceProperty(_context27 = this.touchParams.itemProps).call(_context27, props => {\n        const current = me.body.util.toTime(event.center.x - xOffset);\n        const initial = me.body.util.toTime(props.initialX - xOffset);\n        let offset;\n        let initialStart;\n        let initialEnd;\n        let start;\n        let end;\n        if (this.options.rtl) {\n          offset = -(current - initial); // ms\n        } else {\n          offset = current - initial; // ms\n        }\n        let itemData = this._cloneItemData(props.item.data); // clone the data\n        if (props.item.editable != null && !props.item.editable.updateTime && !props.item.editable.updateGroup && !me.options.editable.overrideItems) {\n          return;\n        }\n        const updateTimeAllowed = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateTime || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateTime;\n        if (updateTimeAllowed) {\n          if (props.dragLeft) {\n            // drag left side of a range item\n            if (this.options.rtl) {\n              if (itemData.end != undefined) {\n                initialEnd = availableUtils.convert(props.data.end, \"Date\");\n                end = new Date(initialEnd.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.end = snap ? snap(end, scale, step) : end;\n              }\n            } else {\n              if (itemData.start != undefined) {\n                initialStart = availableUtils.convert(props.data.start, \"Date\");\n                start = new Date(initialStart.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n              }\n            }\n          } else if (props.dragRight) {\n            // drag right side of a range item\n            if (this.options.rtl) {\n              if (itemData.start != undefined) {\n                initialStart = availableUtils.convert(props.data.start, \"Date\");\n                start = new Date(initialStart.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n              }\n            } else {\n              if (itemData.end != undefined) {\n                initialEnd = availableUtils.convert(props.data.end, \"Date\");\n                end = new Date(initialEnd.valueOf() + offset);\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.end = snap ? snap(end, scale, step) : end;\n              }\n            }\n          } else {\n            // drag both start and end\n            if (itemData.start != undefined) {\n              initialStart = availableUtils.convert(props.data.start, \"Date\").valueOf();\n              start = new Date(initialStart + offset);\n              if (itemData.end != undefined) {\n                initialEnd = availableUtils.convert(props.data.end, \"Date\");\n                const duration = initialEnd.valueOf() - initialStart.valueOf();\n\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n                itemData.end = new Date(itemData.start.valueOf() + duration);\n              } else {\n                // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n                itemData.start = snap ? snap(start, scale, step) : start;\n              }\n            }\n          }\n        }\n        if (updateGroupAllowed && !props.dragLeft && !props.dragRight && newGroupBase != null) {\n          if (itemData.group != undefined) {\n            let newOffset = newGroupBase - props.groupOffset;\n\n            //make sure we stay in bounds\n            newOffset = Math.max(0, newOffset);\n            newOffset = Math.min(me.groupIds.length - 1, newOffset);\n            itemData.group = me.groupIds[newOffset];\n          }\n        }\n\n        // confirm moving the item\n        itemData = this._cloneItemData(itemData); // convert start and end to the correct type\n        me.options.onMoving(itemData, itemData => {\n          if (itemData) {\n            props.item.setData(this._cloneItemData(itemData, \"Date\"));\n          }\n        });\n      });\n      this.body.emitter.emit(\"_change\");\n    }\n  }\n\n  /**\n   * Move an item to another group\n   * @param {Item} item\n   * @param {string | number} groupId\n   * @private\n   */\n  _moveToGroup(item, groupId) {\n    const group = this.groups[groupId];\n    if (group && group.groupId != item.data.group) {\n      const oldGroup = item.parent;\n      oldGroup.remove(item);\n      oldGroup.order();\n      item.data.group = group.groupId;\n      group.add(item);\n      group.order();\n    }\n  }\n\n  /**\n   * End of dragging selected items\n   * @param {Event} event\n   * @private\n   */\n  _onDragEnd(event) {\n    this.touchParams.itemIsDragging = false;\n    if (this.touchParams.itemProps) {\n      event.stopPropagation();\n      const me = this;\n      const itemProps = this.touchParams.itemProps;\n      this.touchParams.itemProps = null;\n      _forEachInstanceProperty(itemProps).call(itemProps, props => {\n        const id = props.item.id;\n        const exists = me.itemsData.get(id) != null;\n        if (!exists) {\n          // add a new item\n          me.options.onAdd(props.item.data, itemData => {\n            me._removeItem(props.item); // remove temporary item\n            if (itemData) {\n              me.itemsData.add(itemData);\n            }\n\n            // force re-stacking of all items next redraw\n            me.body.emitter.emit(\"_change\");\n          });\n        } else {\n          // update existing item\n          const itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type\n          me.options.onMove(itemData, itemData => {\n            if (itemData) {\n              // apply changes\n              itemData[this.itemsData.idProp] = id; // ensure the item contains its id (can be undefined)\n              this.itemsData.update(itemData);\n            } else {\n              // restore original values\n              props.item.setData(props.data);\n              me.body.emitter.emit(\"_change\");\n            }\n          });\n        }\n      });\n    }\n  }\n\n  /**\n   * On group click\n   * @param {Event} event\n   * @private\n   */\n  _onGroupClick(event) {\n    const group = this.groupFromTarget(event);\n    _setTimeout(() => {\n      this.toggleGroupShowNested(group);\n    }, 1);\n  }\n\n  /**\n   * Toggle show nested\n   * @param {object} group\n   * @param {boolean} force\n   */\n  toggleGroupShowNested(group) {\n    let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n    if (!group || !group.nestedGroups) return;\n    const groupsData = this.groupsData.getDataSet();\n    if (force != undefined) {\n      group.showNested = !!force;\n    } else {\n      group.showNested = !group.showNested;\n    }\n    let nestingGroup = groupsData.get(group.groupId);\n    nestingGroup.showNested = group.showNested;\n    let fullNestedGroups = group.nestedGroups;\n    let nextLevel = fullNestedGroups;\n    while (nextLevel.length > 0) {\n      let current = nextLevel;\n      nextLevel = [];\n      for (let i = 0; i < current.length; i++) {\n        let node = groupsData.get(current[i]);\n        if (node.nestedGroups) {\n          nextLevel = _concatInstanceProperty(nextLevel).call(nextLevel, node.nestedGroups);\n        }\n      }\n      if (nextLevel.length > 0) {\n        fullNestedGroups = _concatInstanceProperty(fullNestedGroups).call(fullNestedGroups, nextLevel);\n      }\n    }\n    var nestedGroups;\n    if (nestingGroup.showNested) {\n      var showNestedGroups = groupsData.get(nestingGroup.nestedGroups);\n      for (let i = 0; i < showNestedGroups.length; i++) {\n        let group = showNestedGroups[i];\n        if (group.nestedGroups && group.nestedGroups.length > 0 && (group.showNested == undefined || group.showNested == true)) {\n          showNestedGroups.push(...groupsData.get(group.nestedGroups));\n        }\n      }\n      nestedGroups = _mapInstanceProperty(showNestedGroups).call(showNestedGroups, function (nestedGroup) {\n        if (nestedGroup.visible == undefined) {\n          nestedGroup.visible = true;\n        }\n        nestedGroup.visible = !!nestingGroup.showNested;\n        return nestedGroup;\n      });\n    } else {\n      var _context28;\n      nestedGroups = _mapInstanceProperty(_context28 = groupsData.get(fullNestedGroups)).call(_context28, function (nestedGroup) {\n        if (nestedGroup.visible == undefined) {\n          nestedGroup.visible = true;\n        }\n        nestedGroup.visible = !!nestingGroup.showNested;\n        return nestedGroup;\n      });\n    }\n    groupsData.update(_concatInstanceProperty(nestedGroups).call(nestedGroups, nestingGroup));\n    if (nestingGroup.showNested) {\n      availableUtils.removeClassName(group.dom.label, \"collapsed\");\n      availableUtils.addClassName(group.dom.label, \"expanded\");\n    } else {\n      availableUtils.removeClassName(group.dom.label, \"expanded\");\n      availableUtils.addClassName(group.dom.label, \"collapsed\");\n    }\n  }\n\n  /**\n   * Toggle group drag classname\n   * @param {object} group\n   */\n  toggleGroupDragClassName(group) {\n    group.dom.label.classList.toggle(\"vis-group-is-dragging\");\n    group.dom.foreground.classList.toggle(\"vis-group-is-dragging\");\n  }\n\n  /**\n   * on drag start\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onGroupDragStart(event) {\n    if (this.groupTouchParams.isDragging) return;\n    if (this.options.groupEditable.order) {\n      this.groupTouchParams.group = this.groupFromTarget(event);\n      if (this.groupTouchParams.group) {\n        event.stopPropagation();\n        this.groupTouchParams.isDragging = true;\n        this.toggleGroupDragClassName(this.groupTouchParams.group);\n        this.groupTouchParams.originalOrder = this.groupsData.getIds({\n          order: this.options.groupOrder\n        });\n      }\n    }\n  }\n\n  /**\n   * on drag\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onGroupDrag(event) {\n    if (this.options.groupEditable.order && this.groupTouchParams.group) {\n      event.stopPropagation();\n      const groupsData = this.groupsData.getDataSet();\n      // drag from one group to another\n      const group = this.groupFromTarget(event);\n\n      // try to avoid toggling when groups differ in height\n      if (group && group.height != this.groupTouchParams.group.height) {\n        const movingUp = group.top < this.groupTouchParams.group.top;\n        const clientY = event.center ? event.center.y : event.clientY;\n        const targetGroup = group.dom.foreground.getBoundingClientRect();\n        const draggedGroupHeight = this.groupTouchParams.group.height;\n        if (movingUp) {\n          // skip swapping the groups when the dragged group is not below clientY afterwards\n          if (targetGroup.top + draggedGroupHeight < clientY) {\n            return;\n          }\n        } else {\n          const targetGroupHeight = group.height;\n          // skip swapping the groups when the dragged group is not below clientY afterwards\n          if (targetGroup.top + targetGroupHeight - draggedGroupHeight > clientY) {\n            return;\n          }\n        }\n      }\n      if (group && group != this.groupTouchParams.group) {\n        const targetGroup = groupsData.get(group.groupId);\n        const draggedGroup = groupsData.get(this.groupTouchParams.group.groupId);\n\n        // switch groups\n        if (draggedGroup && targetGroup) {\n          this.options.groupOrderSwap(draggedGroup, targetGroup, groupsData);\n          groupsData.update(draggedGroup);\n          groupsData.update(targetGroup);\n        }\n\n        // fetch current order of groups\n        const newOrder = groupsData.getIds({\n          order: this.options.groupOrder\n        });\n\n        // in case of changes since _onGroupDragStart\n        if (!availableUtils.equalArray(newOrder, this.groupTouchParams.originalOrder)) {\n          const origOrder = this.groupTouchParams.originalOrder;\n          const draggedId = this.groupTouchParams.group.groupId;\n          const numGroups = Math.min(origOrder.length, newOrder.length);\n          let curPos = 0;\n          let newOffset = 0;\n          let orgOffset = 0;\n          while (curPos < numGroups) {\n            // as long as the groups are where they should be step down along the groups order\n            while (curPos + newOffset < numGroups && curPos + orgOffset < numGroups && newOrder[curPos + newOffset] == origOrder[curPos + orgOffset]) {\n              curPos++;\n            }\n\n            // all ok\n            if (curPos + newOffset >= numGroups) {\n              break;\n            }\n\n            // not all ok\n            // if dragged group was move upwards everything below should have an offset\n            if (newOrder[curPos + newOffset] == draggedId) {\n              newOffset = 1;\n            }\n            // if dragged group was move downwards everything above should have an offset\n            else if (origOrder[curPos + orgOffset] == draggedId) {\n              orgOffset = 1;\n            }\n            // found a group (apart from dragged group) that has the wrong position -> switch with the\n            // group at the position where other one should be, fix index arrays and continue\n            else {\n              const slippedPosition = _indexOfInstanceProperty(newOrder).call(newOrder, origOrder[curPos + orgOffset]);\n              const switchGroup = groupsData.get(newOrder[curPos + newOffset]);\n              const shouldBeGroup = groupsData.get(origOrder[curPos + orgOffset]);\n              this.options.groupOrderSwap(switchGroup, shouldBeGroup, groupsData);\n              groupsData.update(switchGroup);\n              groupsData.update(shouldBeGroup);\n              const switchGroupId = newOrder[curPos + newOffset];\n              newOrder[curPos + newOffset] = origOrder[curPos + orgOffset];\n              newOrder[slippedPosition] = switchGroupId;\n              curPos++;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * on drag end\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onGroupDragEnd(event) {\n    this.groupTouchParams.isDragging = false;\n    if (this.options.groupEditable.order && this.groupTouchParams.group) {\n      event.stopPropagation();\n\n      // update existing group\n      const me = this;\n      const id = me.groupTouchParams.group.groupId;\n      const dataset = me.groupsData.getDataSet();\n      const groupData = availableUtils.extend({}, dataset.get(id)); // clone the data\n      me.options.onMoveGroup(groupData, groupData => {\n        if (groupData) {\n          // apply changes\n          groupData[dataset._idProp] = id; // ensure the group contains its id (can be undefined)\n          dataset.update(groupData);\n        } else {\n          // fetch current order of groups\n          const newOrder = dataset.getIds({\n            order: me.options.groupOrder\n          });\n\n          // restore original order\n          if (!availableUtils.equalArray(newOrder, me.groupTouchParams.originalOrder)) {\n            const origOrder = me.groupTouchParams.originalOrder;\n            const numGroups = Math.min(origOrder.length, newOrder.length);\n            let curPos = 0;\n            while (curPos < numGroups) {\n              // as long as the groups are where they should be step down along the groups order\n              while (curPos < numGroups && newOrder[curPos] == origOrder[curPos]) {\n                curPos++;\n              }\n\n              // all ok\n              if (curPos >= numGroups) {\n                break;\n              }\n\n              // found a group that has the wrong position -> switch with the\n              // group at the position where other one should be, fix index arrays and continue\n              const slippedPosition = _indexOfInstanceProperty(newOrder).call(newOrder, origOrder[curPos]);\n              const switchGroup = dataset.get(newOrder[curPos]);\n              const shouldBeGroup = dataset.get(origOrder[curPos]);\n              me.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset);\n              dataset.update(switchGroup);\n              dataset.update(shouldBeGroup);\n              const switchGroupId = newOrder[curPos];\n              newOrder[curPos] = origOrder[curPos];\n              newOrder[slippedPosition] = switchGroupId;\n              curPos++;\n            }\n          }\n        }\n      });\n      me.body.emitter.emit(\"groupDragged\", {\n        groupId: id\n      });\n      this.toggleGroupDragClassName(this.groupTouchParams.group);\n      this.groupTouchParams.group = null;\n    }\n  }\n\n  /**\n   * Handle selecting/deselecting an item when tapping it\n   * @param {Event} event\n   * @private\n   */\n  _onSelectItem(event) {\n    if (!this.options.selectable) return;\n    const ctrlKey = event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey);\n    const shiftKey = event.srcEvent && event.srcEvent.shiftKey;\n    if (ctrlKey || shiftKey) {\n      this._onMultiSelectItem(event);\n      return;\n    }\n    const oldSelection = this.getSelection();\n    const item = this.itemFromTarget(event);\n    const selection = item && item.selectable ? [item.id] : [];\n    this.setSelection(selection);\n    const newSelection = this.getSelection();\n\n    // emit a select event,\n    // except when old selection is empty and new selection is still empty\n    if (newSelection.length > 0 || oldSelection.length > 0) {\n      this.body.emitter.emit(\"select\", {\n        items: newSelection,\n        event\n      });\n    }\n  }\n\n  /**\n   * Handle hovering an item\n   * @param {Event} event\n   * @private\n   */\n  _onMouseOver(event) {\n    const item = this.itemFromTarget(event);\n    if (!item) return;\n\n    // Item we just left\n    const related = this.itemFromRelatedTarget(event);\n    if (item === related) {\n      // We haven't changed item, just element in the item\n      return;\n    }\n    const title = item.getTitle();\n    if (this.options.showTooltips && title) {\n      if (this.popup == null) {\n        this.popup = new Popup(this.body.dom.root, this.options.tooltip.overflowMethod || \"flip\");\n      }\n      this.popup.setText(title);\n      const container = this.body.dom.centerContainer;\n      const containerRect = container.getBoundingClientRect();\n      this.popup.setPosition(event.clientX - containerRect.left + container.offsetLeft, event.clientY - containerRect.top + container.offsetTop);\n      this.setPopupTimer(this.popup);\n    } else {\n      // Hovering over item without a title, hide popup\n      // Needed instead of _just_ in _onMouseOut due to #2572\n      this.clearPopupTimer();\n      if (this.popup != null) {\n        this.popup.hide();\n      }\n    }\n    this.body.emitter.emit(\"itemover\", {\n      item: item.id,\n      event\n    });\n  }\n\n  /**\n   * on mouse start\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onMouseOut(event) {\n    const item = this.itemFromTarget(event);\n    if (!item) return;\n\n    // Item we are going to\n    const related = this.itemFromRelatedTarget(event);\n    if (item === related) {\n      // We aren't changing item, just element in the item\n      return;\n    }\n    this.clearPopupTimer();\n    if (this.popup != null) {\n      this.popup.hide();\n    }\n    this.body.emitter.emit(\"itemout\", {\n      item: item.id,\n      event\n    });\n  }\n\n  /**\n   * on mouse move\n   * @param {Event} event\n   * @return {void}\n   * @private\n   */\n  _onMouseMove(event) {\n    const item = this.itemFromTarget(event);\n    if (!item) return;\n    if (this.popupTimer != null) {\n      // restart timer\n      this.setPopupTimer(this.popup);\n    }\n    if (this.options.showTooltips && this.options.tooltip.followMouse && this.popup && !this.popup.hidden) {\n      const container = this.body.dom.centerContainer;\n      const containerRect = container.getBoundingClientRect();\n      this.popup.setPosition(event.clientX - containerRect.left + container.offsetLeft, event.clientY - containerRect.top + container.offsetTop);\n      this.popup.show(); // Redraw\n    }\n  }\n\n  /**\n   * Handle mousewheel\n   * @param {Event}  event   The event\n   * @private\n   */\n  _onMouseWheel(event) {\n    if (this.touchParams.itemIsDragging) {\n      this._onDragEnd(event);\n    }\n  }\n\n  /**\n   * Handle updates of an item on double tap\n   * @param {timeline.Item}  item   The item\n   * @private\n   */\n  _onUpdateItem(item) {\n    if (!this.options.selectable) return;\n    if (!this.options.editable.updateTime && !this.options.editable.updateGroup) return;\n    const me = this;\n    if (item) {\n      // execute async handler to update the item (or cancel it)\n      const itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset\n      this.options.onUpdate(itemData, itemData => {\n        if (itemData) {\n          me.itemsData.update(itemData);\n        }\n      });\n    }\n  }\n\n  /**\n   * Handle drop event of data on item\n   * Only called when `objectData.target === 'item'.\n   * @param {Event} event The event\n   * @private\n   */\n  _onDropObjectOnItem(event) {\n    const item = this.itemFromTarget(event);\n    const objectData = JSON.parse(event.dataTransfer.getData(\"text\"));\n    this.options.onDropObjectOnItem(objectData, item);\n  }\n\n  /**\n   * Handle creation of an item on double tap or drop of a drag event\n   * @param {Event} event   The event\n   * @private\n   */\n  _onAddItem(event) {\n    if (!this.options.selectable) return;\n    if (!this.options.editable.add) return;\n    const me = this;\n    const snap = this.options.snap || null;\n\n    // add item\n    const frameRect = this.dom.frame.getBoundingClientRect();\n    const x = this.options.rtl ? frameRect.right - event.center.x : event.center.x - frameRect.left;\n    const start = this.body.util.toTime(x);\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    let end;\n    let newItemData;\n    if (event.type == \"drop\") {\n      newItemData = JSON.parse(event.dataTransfer.getData(\"text\"));\n      newItemData.content = newItemData.content ? newItemData.content : \"new item\";\n      newItemData.start = newItemData.start ? newItemData.start : snap ? snap(start, scale, step) : start;\n      newItemData.type = newItemData.type || \"box\";\n      newItemData[this.itemsData.idProp] = newItemData.id || v4();\n      if (newItemData.type == \"range\" && !newItemData.end) {\n        end = this.body.util.toTime(x + this.props.width / 5);\n        newItemData.end = snap ? snap(end, scale, step) : end;\n      }\n    } else {\n      newItemData = {\n        start: snap ? snap(start, scale, step) : start,\n        content: \"new item\"\n      };\n      newItemData[this.itemsData.idProp] = v4();\n\n      // when default type is a range, add a default end date to the new item\n      if (this.options.type === \"range\") {\n        end = this.body.util.toTime(x + this.props.width / 5);\n        newItemData.end = snap ? snap(end, scale, step) : end;\n      }\n    }\n    const group = this.groupFromTarget(event);\n    if (group) {\n      newItemData.group = group.groupId;\n    }\n\n    // execute async handler to customize (or cancel) adding an item\n    newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type\n    this.options.onAdd(newItemData, item => {\n      if (item) {\n        me.itemsData.add(item);\n        if (event.type == \"drop\") {\n          me.setSelection([item.id]);\n        }\n        // TODO: need to trigger a redraw?\n      }\n    });\n  }\n\n  /**\n   * Handle selecting/deselecting multiple items when holding an item\n   * @param {Event} event\n   * @private\n   */\n  _onMultiSelectItem(event) {\n    if (!this.options.selectable) return;\n    const item = this.itemFromTarget(event);\n    if (item) {\n      // multi select items (if allowed)\n\n      let selection = this.options.multiselect ? this.getSelection() // take current selection\n      : []; // deselect current selection\n\n      const shiftKey = event.srcEvent && event.srcEvent.shiftKey || false;\n      if ((shiftKey || this.options.sequentialSelection) && this.options.multiselect) {\n        // select all items between the old selection and the tapped item\n        const itemGroup = this.itemsData.get(item.id).group;\n\n        // when filtering get the group of the last selected item\n        let lastSelectedGroup = undefined;\n        if (this.options.multiselectPerGroup) {\n          if (selection.length > 0) {\n            lastSelectedGroup = this.itemsData.get(selection[0]).group;\n          }\n        }\n\n        // determine the selection range\n        if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) {\n          selection.push(item.id);\n        }\n        const range = ItemSet._getItemRange(this.itemsData.get(selection));\n        if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) {\n          // select all items within the selection range\n          selection = [];\n          for (const id in this.items) {\n            if (!Object.prototype.hasOwnProperty.call(this.items, id)) continue;\n            const _item = this.items[id];\n            const start = _item.data.start;\n            const end = _item.data.end !== undefined ? _item.data.end : start;\n            if (start >= range.min && end <= range.max && (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) && !(_item instanceof BackgroundItem)) {\n              selection.push(_item.id); // do not use id but item.id, id itself is stringified\n            }\n          }\n        }\n      } else {\n        // add/remove this item from the current selection\n        const index = _indexOfInstanceProperty(selection).call(selection, item.id);\n        if (index == -1) {\n          // item is not yet selected -> select it\n          selection.push(item.id);\n        } else {\n          // item is already selected -> deselect it\n          _spliceInstanceProperty(selection).call(selection, index, 1);\n        }\n      }\n      const filteredSelection = _filterInstanceProperty(selection).call(selection, item => this.getItemById(item).selectable);\n      this.setSelection(filteredSelection);\n      this.body.emitter.emit(\"select\", {\n        items: this.getSelection(),\n        event\n      });\n    }\n  }\n\n  /**\n   * Calculate the time range of a list of items\n   * @param {Array.<Object>} itemsData\n   * @return {{min: Date, max: Date}} Returns the range of the provided items\n   * @private\n   */\n  static _getItemRange(itemsData) {\n    let max = null;\n    let min = null;\n    _forEachInstanceProperty(itemsData).call(itemsData, data => {\n      if (min == null || data.start < min) {\n        min = data.start;\n      }\n      if (data.end != undefined) {\n        if (max == null || data.end > max) {\n          max = data.end;\n        }\n      } else {\n        if (max == null || data.start > max) {\n          max = data.start;\n        }\n      }\n    });\n    return {\n      min,\n      max\n    };\n  }\n\n  /**\n   * Find an item from an element:\n   * searches for the attribute 'vis-item' in the element's tree\n   * @param {HTMLElement} element\n   * @return {Item | null} item\n   */\n  itemFromElement(element) {\n    let cur = element;\n    while (cur) {\n      if (Object.prototype.hasOwnProperty.call(cur, \"vis-item\")) {\n        return cur[\"vis-item\"];\n      }\n      cur = cur.parentNode;\n    }\n    return null;\n  }\n\n  /**\n   * Find an item from an event target:\n   * searches for the attribute 'vis-item' in the event target's element tree\n   * @param {Event} event\n   * @return {Item | null} item\n   */\n  itemFromTarget(event) {\n    return this.itemFromElement(event.target);\n  }\n\n  /**\n   * Find an item from an event's related target:\n   * searches for the attribute 'vis-item' in the related target's element tree\n   * @param {Event} event\n   * @return {Item | null} item\n   */\n  itemFromRelatedTarget(event) {\n    return this.itemFromElement(event.relatedTarget);\n  }\n\n  /**\n   * Find the Group from an event target:\n   * searches for the attribute 'vis-group' in the event target's element tree\n   * @param {Event} event\n   * @return {Group | null} group\n   */\n  groupFromTarget(event) {\n    const clientY = event.center ? event.center.y : event.clientY;\n    let groupIds = this.groupIds;\n    if (groupIds.length <= 0 && this.groupsData) {\n      groupIds = this.groupsData.getIds({\n        order: this.options.groupOrder\n      });\n    }\n    for (let i = 0; i < groupIds.length; i++) {\n      const groupId = groupIds[i];\n      const group = this.groups[groupId];\n      const foreground = group.dom.foreground;\n      const foregroundRect = foreground.getBoundingClientRect();\n      if (clientY >= foregroundRect.top && clientY < foregroundRect.top + foreground.offsetHeight) {\n        return group;\n      }\n      if (this.options.orientation.item === \"top\") {\n        if (i === this.groupIds.length - 1 && clientY > foregroundRect.top) {\n          return group;\n        }\n      } else {\n        if (i === 0 && clientY < foregroundRect.top + foreground.offset) {\n          return group;\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Find the ItemSet from an event target:\n   * searches for the attribute 'vis-itemset' in the event target's element tree\n   * @param {Event} event\n   * @return {ItemSet | null} item\n   */\n  static itemSetFromTarget(event) {\n    let target = event.target;\n    while (target) {\n      if (Object.prototype.hasOwnProperty.call(target, \"vis-itemset\")) {\n        return target[\"vis-itemset\"];\n      }\n      target = target.parentNode;\n    }\n    return null;\n  }\n\n  /**\n   * Clone the data of an item, and \"normalize\" it: convert the start and end date\n   * to the type (Date, Moment, ...) configured in the DataSet. If not configured,\n   * start and end are converted to Date.\n   * @param {Object} itemData, typically `item.data`\n   * @param {string} [type]  Optional Date type. If not provided, the type from the DataSet is taken\n   * @return {Object} The cloned object\n   * @private\n   */\n  _cloneItemData(itemData, type) {\n    const clone = availableUtils.extend({}, itemData);\n    if (!type) {\n      // convert start and end date to the type (Date, Moment, ...) configured in the DataSet\n      type = this.itemsData.type;\n    }\n    if (clone.start != undefined) {\n      clone.start = availableUtils.convert(clone.start, type && type.start || \"Date\");\n    }\n    if (clone.end != undefined) {\n      clone.end = availableUtils.convert(clone.end, type && type.end || \"Date\");\n    }\n    return clone;\n  }\n\n  /**\n   * cluster items\n   * @return {void}\n   * @private\n   */\n  _clusterItems() {\n    if (!this.options.cluster) {\n      return;\n    }\n    const {\n      scale\n    } = this.body.range.conversion(this.body.domProps.center.width);\n    const clusters = this.clusterGenerator.getClusters(this.clusters, scale, this.options.cluster);\n    if (this.clusters != clusters) {\n      this._detachAllClusters();\n      if (clusters) {\n        for (let cluster of clusters) {\n          cluster.attach();\n        }\n        this.clusters = clusters;\n      }\n      this._updateClusters(clusters);\n    }\n  }\n\n  /**\n   * detach all cluster items\n   * @private\n   */\n  _detachAllClusters() {\n    if (this.options.cluster) {\n      if (this.clusters && this.clusters.length) {\n        for (let cluster of this.clusters) {\n          cluster.detach();\n        }\n      }\n    }\n  }\n\n  /**\n   * update clusters\n   * @param {array} clusters\n   * @private\n   */\n  _updateClusters(clusters) {\n    if (this.clusters && this.clusters.length) {\n      var _context29;\n      const newClustersIds = new _Set(_mapInstanceProperty(clusters).call(clusters, cluster => cluster.id));\n      const clustersToUnselect = _filterInstanceProperty(_context29 = this.clusters).call(_context29, cluster => !newClustersIds.has(cluster.id));\n      let selectionChanged = false;\n      for (let cluster of clustersToUnselect) {\n        var _context30;\n        const selectedIdx = _indexOfInstanceProperty(_context30 = this.selection).call(_context30, cluster.id);\n        if (selectedIdx !== -1) {\n          var _context31;\n          cluster.unselect();\n          _spliceInstanceProperty(_context31 = this.selection).call(_context31, selectedIdx, 1);\n          selectionChanged = true;\n        }\n      }\n      if (selectionChanged) {\n        const newSelection = this.getSelection();\n        this.body.emitter.emit(\"select\", {\n          items: newSelection,\n          event: event\n        });\n      }\n    }\n    this.clusters = clusters || [];\n  }\n}\n\n// available item types will be registered here\nItemSet.types = {\n  background: BackgroundItem,\n  box: BoxItem,\n  range: RangeItem,\n  point: PointItem\n};\n\n/**\n * Handle added items\n * @param {number[]} ids\n * @protected\n */\nItemSet.prototype._onAdd = ItemSet.prototype._onUpdate;\n\nlet errorFound = false;\nlet allOptions$2;\nlet printStyle = \"background: #FFeeee; color: #dd0000\";\n/**\n *  Used to validate options.\n */\nclass Validator {\n  /**\n   * @ignore\n   */\n  constructor() {}\n\n  /**\n   * Main function to be called\n   * @param {Object} options\n   * @param {Object} referenceOptions\n   * @param {Object} subObject\n   * @returns {boolean}\n   * @static\n   */\n  static validate(options, referenceOptions, subObject) {\n    errorFound = false;\n    allOptions$2 = referenceOptions;\n    let usedOptions = referenceOptions;\n    if (subObject !== undefined) {\n      usedOptions = referenceOptions[subObject];\n    }\n    Validator.parse(options, usedOptions, []);\n    return errorFound;\n  }\n\n  /**\n   * Will traverse an object recursively and check every value\n   * @param {Object} options\n   * @param {Object} referenceOptions\n   * @param {array} path    | where to look for the actual option\n   * @static\n   */\n  static parse(options, referenceOptions, path) {\n    for (let option in options) {\n      if (!Object.prototype.hasOwnProperty.call(options, option)) continue;\n      Validator.check(option, options, referenceOptions, path);\n    }\n  }\n\n  /**\n   * Check every value. If the value is an object, call the parse function on that object.\n   * @param {string} option\n   * @param {Object} options\n   * @param {Object} referenceOptions\n   * @param {array} path    | where to look for the actual option\n   * @static\n   */\n  static check(option, options, referenceOptions, path) {\n    if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) {\n      Validator.getSuggestion(option, referenceOptions, path);\n      return;\n    }\n    let referenceOption = option;\n    let is_object = true;\n    if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) {\n      // NOTE: This only triggers if the __any__ is in the top level of the options object.\n      //       THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n      // TODO: Examine if needed, remove if possible\n\n      // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n      referenceOption = \"__any__\";\n\n      // if the any-subgroup is not a predefined object in the configurator,\n      // we do not look deeper into the object.\n      is_object = Validator.getType(options[option]) === \"object\";\n    }\n    let refOptionObj = referenceOptions[referenceOption];\n    if (is_object && refOptionObj.__type__ !== undefined) {\n      refOptionObj = refOptionObj.__type__;\n    }\n    Validator.checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path);\n  }\n\n  /**\n   *\n   * @param {string}  option           | the option property\n   * @param {Object}  options          | The supplied options object\n   * @param {Object}  referenceOptions | The reference options containing all options and their allowed formats\n   * @param {string}  referenceOption  | Usually this is the same as option, except when handling an __any__ tag.\n   * @param {string}  refOptionObj     | This is the type object from the reference options\n   * @param {Array}   path             | where in the object is the option\n   * @static\n   */\n  static checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) {\n    let log = function (message) {\n      console.log(\"%c\" + message + Validator.printLocation(path, option), printStyle);\n    };\n    let optionType = Validator.getType(options[option]);\n    let refOptionType = refOptionObj[optionType];\n    if (refOptionType !== undefined) {\n      // if the type is correct, we check if it is supposed to be one of a few select values\n      if (Validator.getType(refOptionType) === \"array\" && _indexOfInstanceProperty(refOptionType).call(refOptionType, options[option]) === -1) {\n        log('Invalid option detected in \"' + option + '\".' + \" Allowed values are:\" + Validator.print(refOptionType) + ' not \"' + options[option] + '\". ');\n        errorFound = true;\n      } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n        path = availableUtils.copyAndExtendArray(path, option);\n        Validator.parse(options[option], referenceOptions[referenceOption], path);\n      }\n    } else if (refOptionObj[\"any\"] === undefined) {\n      // type of the field is incorrect and the field cannot be any\n      log('Invalid type received for \"' + option + '\". Expected: ' + Validator.print(_Object$keys(refOptionObj)) + \". Received [\" + optionType + '] \"' + options[option] + '\"');\n      errorFound = true;\n    }\n  }\n\n  /**\n   *\n   * @param {Object|boolean|number|string|Array.<number>|Date|Node|Moment|undefined|null} object\n   * @returns {string}\n   * @static\n   */\n  static getType(object) {\n    var type = typeof object;\n    if (type === \"object\") {\n      if (object === null) {\n        return \"null\";\n      }\n      if (object instanceof Boolean) {\n        return \"boolean\";\n      }\n      if (object instanceof Number) {\n        return \"number\";\n      }\n      if (object instanceof String) {\n        return \"string\";\n      }\n      if (_Array$isArray(object)) {\n        return \"array\";\n      }\n      if (object instanceof Date) {\n        return \"date\";\n      }\n      if (object.nodeType !== undefined) {\n        return \"dom\";\n      }\n      if (object._isAMomentObject === true) {\n        return \"moment\";\n      }\n      return \"object\";\n    } else if (type === \"number\") {\n      return \"number\";\n    } else if (type === \"boolean\") {\n      return \"boolean\";\n    } else if (type === \"string\") {\n      return \"string\";\n    } else if (type === undefined) {\n      return \"undefined\";\n    }\n    return type;\n  }\n\n  /**\n   * @param {string} option\n   * @param {Object} options\n   * @param {Array.<string>} path\n   * @static\n   */\n  static getSuggestion(option, options, path) {\n    let localSearch = Validator.findInOptions(option, options, path, false);\n    let globalSearch = Validator.findInOptions(option, allOptions$2, [], true);\n    let localSearchThreshold = 8;\n    let globalSearchThreshold = 4;\n    let msg;\n    if (localSearch.indexMatch !== undefined) {\n      msg = \" in \" + Validator.printLocation(localSearch.path, option, \"\") + 'Perhaps it was incomplete? Did you mean: \"' + localSearch.indexMatch + '\"?\\n\\n';\n    } else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) {\n      msg = \" in \" + Validator.printLocation(localSearch.path, option, \"\") + \"Perhaps it was misplaced? Matching option found at: \" + Validator.printLocation(globalSearch.path, globalSearch.closestMatch, \"\");\n    } else if (localSearch.distance <= localSearchThreshold) {\n      msg = '. Did you mean \"' + localSearch.closestMatch + '\"?' + Validator.printLocation(localSearch.path, option);\n    } else {\n      msg = \". Did you mean one of these: \" + Validator.print(_Object$keys(options)) + Validator.printLocation(path, option);\n    }\n    console.log('%cUnknown option detected: \"' + option + '\"' + msg, printStyle);\n    errorFound = true;\n  }\n\n  /**\n   * traverse the options in search for a match.\n   * @param {string} option\n   * @param {Object} options\n   * @param {Array} path    | where to look for the actual option\n   * @param {boolean} [recursive=false]\n   * @returns {{closestMatch: string, path: Array, distance: number}}\n   * @static\n   */\n  static findInOptions(option, options, path) {\n    let recursive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    let min = 1e9;\n    let closestMatch = \"\";\n    let closestMatchPath = [];\n    let lowerCaseOption = option.toLowerCase();\n    let indexMatch = undefined;\n    for (let op in options) {\n      if (!Object.prototype.hasOwnProperty.call(options, op)) continue;\n      let distance;\n      if (options[op].__type__ !== undefined && recursive === true) {\n        let result = Validator.findInOptions(option, options[op], availableUtils.copyAndExtendArray(path, op));\n        if (min > result.distance) {\n          closestMatch = result.closestMatch;\n          closestMatchPath = result.path;\n          min = result.distance;\n          indexMatch = result.indexMatch;\n        }\n      } else {\n        var _context;\n        if (_indexOfInstanceProperty(_context = op.toLowerCase()).call(_context, lowerCaseOption) !== -1) {\n          indexMatch = op;\n        }\n        distance = Validator.levenshteinDistance(option, op);\n        if (min > distance) {\n          closestMatch = op;\n          closestMatchPath = availableUtils.copyArray(path);\n          min = distance;\n        }\n      }\n    }\n    return {\n      closestMatch: closestMatch,\n      path: closestMatchPath,\n      distance: min,\n      indexMatch: indexMatch\n    };\n  }\n\n  /**\n   * @param {Array.<string>} path\n   * @param {Object} option\n   * @param {string} prefix\n   * @returns {String}\n   * @static\n   */\n  static printLocation(path, option) {\n    let prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"Problem value found at: \\n\";\n    let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n    for (let i = 0; i < path.length; i++) {\n      for (let j = 0; j < i + 1; j++) {\n        str += \"  \";\n      }\n      str += path[i] + \": {\\n\";\n    }\n    for (let j = 0; j < path.length + 1; j++) {\n      str += \"  \";\n    }\n    str += option + \"\\n\";\n    for (let i = 0; i < path.length + 1; i++) {\n      for (let j = 0; j < path.length - i; j++) {\n        str += \"  \";\n      }\n      str += \"}\\n\";\n    }\n    return str + \"\\n\\n\";\n  }\n\n  /**\n   * @param {Object} options\n   * @returns {String}\n   * @static\n   */\n  static print(options) {\n    return _JSON$stringify(options).replace(/(\\\")|(\\[)|(\\])|(,\"__type__\")/g, \"\").replace(/(\\,)/g, \", \");\n  }\n\n  /**\n   *  Compute the edit distance between the two given strings\n   * http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n   *\n   * Copyright (c) 2011 Andrei Mackenzie\n   *\n   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n   *\n   * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n   *\n   * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   *\n   * @param {string} a\n   * @param {string} b\n   * @returns {Array.<Array.<number>>}}\n   * @static\n   */\n  static levenshteinDistance(a, b) {\n    if (a.length === 0) return b.length;\n    if (b.length === 0) return a.length;\n    var matrix = [];\n\n    // increment along the first column of each row\n    var i;\n    for (i = 0; i <= b.length; i++) {\n      matrix[i] = [i];\n    }\n\n    // increment each column in the first row\n    var j;\n    for (j = 0; j <= a.length; j++) {\n      matrix[0][j] = j;\n    }\n\n    // Fill in the rest of the matrix\n    for (i = 1; i <= b.length; i++) {\n      for (j = 1; j <= a.length; j++) {\n        if (b.charAt(i - 1) == a.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1,\n          // substitution\n          Math.min(matrix[i][j - 1] + 1,\n          // insertion\n          matrix[i - 1][j] + 1)); // deletion\n        }\n      }\n    }\n    return matrix[b.length][a.length];\n  }\n}\n\n/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string$1 = \"string\";\nlet bool$1 = \"boolean\";\nlet number$1 = \"number\";\nlet array$1 = \"array\";\nlet date$1 = \"date\";\nlet object$1 = \"object\"; // should only be in a __type__ property\nlet dom$1 = \"dom\";\nlet moment$1 = \"moment\";\nlet any$1 = \"any\";\nlet allOptions$1 = {\n  configure: {\n    enabled: {\n      boolean: bool$1\n    },\n    filter: {\n      boolean: bool$1,\n      function: \"function\"\n    },\n    container: {\n      dom: dom$1\n    },\n    __type__: {\n      object: object$1,\n      boolean: bool$1,\n      function: \"function\"\n    }\n  },\n  //globals :\n  align: {\n    string: string$1\n  },\n  alignCurrentTime: {\n    string: string$1,\n    undefined: \"undefined\"\n  },\n  rtl: {\n    boolean: bool$1,\n    undefined: \"undefined\"\n  },\n  rollingMode: {\n    follow: {\n      boolean: bool$1\n    },\n    offset: {\n      number: number$1,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      object: object$1\n    }\n  },\n  onTimeout: {\n    timeoutMs: {\n      number: number$1\n    },\n    callback: {\n      function: \"function\"\n    },\n    __type__: {\n      object: object$1\n    }\n  },\n  verticalScroll: {\n    boolean: bool$1,\n    undefined: \"undefined\"\n  },\n  horizontalScroll: {\n    boolean: bool$1,\n    undefined: \"undefined\"\n  },\n  horizontalScrollKey: {\n    string: string$1,\n    undefined: \"undefined\"\n  },\n  horizontalScrollInvert: {\n    boolean: bool$1,\n    undefined: \"undefined\"\n  },\n  autoResize: {\n    boolean: bool$1\n  },\n  throttleRedraw: {\n    number: number$1\n  },\n  // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: {\n    boolean: bool$1\n  },\n  dataAttributes: {\n    string: string$1,\n    array: array$1\n  },\n  editable: {\n    add: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    remove: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    updateGroup: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    updateTime: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    overrideItems: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      boolean: bool$1,\n      object: object$1\n    }\n  },\n  end: {\n    number: number$1,\n    date: date$1,\n    string: string$1,\n    moment: moment$1\n  },\n  format: {\n    minorLabels: {\n      millisecond: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      second: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      minute: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      hour: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      weekday: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      day: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      week: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      month: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      year: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      __type__: {\n        object: object$1,\n        function: \"function\"\n      }\n    },\n    majorLabels: {\n      millisecond: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      second: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      minute: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      hour: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      weekday: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      day: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      week: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      month: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      year: {\n        string: string$1,\n        undefined: \"undefined\"\n      },\n      __type__: {\n        object: object$1,\n        function: \"function\"\n      }\n    },\n    __type__: {\n      object: object$1\n    }\n  },\n  moment: {\n    function: \"function\"\n  },\n  groupHeightMode: {\n    string: string$1\n  },\n  groupOrder: {\n    string: string$1,\n    function: \"function\"\n  },\n  groupEditable: {\n    add: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    remove: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    order: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      boolean: bool$1,\n      object: object$1\n    }\n  },\n  groupOrderSwap: {\n    function: \"function\"\n  },\n  height: {\n    string: string$1,\n    number: number$1\n  },\n  hiddenDates: {\n    start: {\n      date: date$1,\n      number: number$1,\n      string: string$1,\n      moment: moment$1\n    },\n    end: {\n      date: date$1,\n      number: number$1,\n      string: string$1,\n      moment: moment$1\n    },\n    repeat: {\n      string: string$1\n    },\n    __type__: {\n      object: object$1,\n      array: array$1\n    }\n  },\n  itemsAlwaysDraggable: {\n    item: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    range: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      boolean: bool$1,\n      object: object$1\n    }\n  },\n  limitSize: {\n    boolean: bool$1\n  },\n  locale: {\n    string: string$1\n  },\n  locales: {\n    __any__: {\n      any: any$1\n    },\n    __type__: {\n      object: object$1\n    }\n  },\n  longSelectPressTime: {\n    number: number$1\n  },\n  margin: {\n    axis: {\n      number: number$1\n    },\n    item: {\n      horizontal: {\n        number: number$1,\n        undefined: \"undefined\"\n      },\n      vertical: {\n        number: number$1,\n        undefined: \"undefined\"\n      },\n      __type__: {\n        object: object$1,\n        number: number$1\n      }\n    },\n    __type__: {\n      object: object$1,\n      number: number$1\n    }\n  },\n  max: {\n    date: date$1,\n    number: number$1,\n    string: string$1,\n    moment: moment$1\n  },\n  maxHeight: {\n    number: number$1,\n    string: string$1\n  },\n  maxMinorChars: {\n    number: number$1\n  },\n  min: {\n    date: date$1,\n    number: number$1,\n    string: string$1,\n    moment: moment$1\n  },\n  minHeight: {\n    number: number$1,\n    string: string$1\n  },\n  moveable: {\n    boolean: bool$1\n  },\n  multiselect: {\n    boolean: bool$1\n  },\n  multiselectPerGroup: {\n    boolean: bool$1\n  },\n  onAdd: {\n    function: \"function\"\n  },\n  onDropObjectOnItem: {\n    function: \"function\"\n  },\n  onUpdate: {\n    function: \"function\"\n  },\n  onMove: {\n    function: \"function\"\n  },\n  onMoving: {\n    function: \"function\"\n  },\n  onRemove: {\n    function: \"function\"\n  },\n  onAddGroup: {\n    function: \"function\"\n  },\n  onMoveGroup: {\n    function: \"function\"\n  },\n  onRemoveGroup: {\n    function: \"function\"\n  },\n  onInitialDrawComplete: {\n    function: \"function\"\n  },\n  order: {\n    function: \"function\"\n  },\n  orientation: {\n    axis: {\n      string: string$1,\n      undefined: \"undefined\"\n    },\n    item: {\n      string: string$1,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      string: string$1,\n      object: object$1\n    }\n  },\n  selectable: {\n    boolean: bool$1\n  },\n  sequentialSelection: {\n    boolean: bool$1\n  },\n  showCurrentTime: {\n    boolean: bool$1\n  },\n  showMajorLabels: {\n    boolean: bool$1\n  },\n  showMinorLabels: {\n    boolean: bool$1\n  },\n  showWeekScale: {\n    boolean: bool$1\n  },\n  stack: {\n    boolean: bool$1\n  },\n  stackSubgroups: {\n    boolean: bool$1\n  },\n  cluster: {\n    maxItems: {\n      number: number$1,\n      undefined: \"undefined\"\n    },\n    titleTemplate: {\n      string: string$1,\n      undefined: \"undefined\"\n    },\n    clusterCriteria: {\n      function: \"function\",\n      undefined: \"undefined\"\n    },\n    showStipes: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    fitOnDoubleClick: {\n      boolean: bool$1,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      boolean: bool$1,\n      object: object$1\n    }\n  },\n  snap: {\n    function: \"function\",\n    null: \"null\"\n  },\n  start: {\n    date: date$1,\n    number: number$1,\n    string: string$1,\n    moment: moment$1\n  },\n  template: {\n    function: \"function\"\n  },\n  loadingScreenTemplate: {\n    function: \"function\"\n  },\n  groupTemplate: {\n    function: \"function\"\n  },\n  visibleFrameTemplate: {\n    string: string$1,\n    function: \"function\"\n  },\n  showTooltips: {\n    boolean: bool$1\n  },\n  tooltip: {\n    followMouse: {\n      boolean: bool$1\n    },\n    overflowMethod: {\n      string: [\"cap\", \"flip\", \"none\"]\n    },\n    delay: {\n      number: number$1\n    },\n    template: {\n      function: \"function\"\n    },\n    __type__: {\n      object: object$1\n    }\n  },\n  tooltipOnItemUpdateTime: {\n    template: {\n      function: \"function\"\n    },\n    __type__: {\n      boolean: bool$1,\n      object: object$1\n    }\n  },\n  timeAxis: {\n    scale: {\n      string: string$1,\n      undefined: \"undefined\"\n    },\n    step: {\n      number: number$1,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      object: object$1\n    }\n  },\n  type: {\n    string: string$1\n  },\n  width: {\n    string: string$1,\n    number: number$1\n  },\n  preferZoom: {\n    boolean: bool$1\n  },\n  zoomable: {\n    boolean: bool$1\n  },\n  zoomKey: {\n    string: [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\", \"\"]\n  },\n  zoomFriction: {\n    number: number$1\n  },\n  zoomMax: {\n    number: number$1\n  },\n  zoomMin: {\n    number: number$1\n  },\n  xss: {\n    disabled: {\n      boolean: bool$1\n    },\n    filterOptions: {\n      __any__: {\n        any: any$1\n      },\n      __type__: {\n        object: object$1\n      }\n    },\n    __type__: {\n      object: object$1\n    }\n  },\n  __type__: {\n    object: object$1\n  }\n};\nlet configureOptions$1 = {\n  global: {\n    align: [\"center\", \"left\", \"right\"],\n    alignCurrentTime: [\"none\", \"year\", \"month\", \"quarter\", \"week\", \"isoWeek\", \"day\", \"date\", \"hour\", \"minute\", \"second\"],\n    direction: false,\n    autoResize: true,\n    clickToUse: false,\n    // dataAttributes: ['all'], // FIXME: can be 'all' or string[]\n    editable: {\n      add: false,\n      remove: false,\n      updateGroup: false,\n      updateTime: false\n    },\n    end: \"\",\n    format: {\n      minorLabels: {\n        millisecond: \"SSS\",\n        second: \"s\",\n        minute: \"HH:mm\",\n        hour: \"HH:mm\",\n        weekday: \"ddd D\",\n        day: \"D\",\n        week: \"w\",\n        month: \"MMM\",\n        year: \"YYYY\"\n      },\n      majorLabels: {\n        millisecond: \"HH:mm:ss\",\n        second: \"D MMMM HH:mm\",\n        minute: \"ddd D MMMM\",\n        hour: \"ddd D MMMM\",\n        weekday: \"MMMM YYYY\",\n        day: \"MMMM YYYY\",\n        week: \"MMMM YYYY\",\n        month: \"YYYY\",\n        year: \"\"\n      }\n    },\n    groupHeightMode: [\"auto\", \"fixed\", \"fitItems\"],\n    //groupOrder: {string, 'function': 'function'},\n    groupsDraggable: false,\n    height: \"\",\n    //hiddenDates: {object, array},\n    locale: \"\",\n    longSelectPressTime: 251,\n    margin: {\n      axis: [20, 0, 100, 1],\n      item: {\n        horizontal: [10, 0, 100, 1],\n        vertical: [10, 0, 100, 1]\n      }\n    },\n    max: \"\",\n    maxHeight: \"\",\n    maxMinorChars: [7, 0, 20, 1],\n    min: \"\",\n    minHeight: \"\",\n    moveable: false,\n    multiselect: false,\n    multiselectPerGroup: false,\n    //onAdd: {'function': 'function'},\n    //onUpdate: {'function': 'function'},\n    //onMove: {'function': 'function'},\n    //onMoving: {'function': 'function'},\n    //onRename: {'function': 'function'},\n    //order: {'function': 'function'},\n    orientation: {\n      axis: [\"both\", \"bottom\", \"top\"],\n      item: [\"bottom\", \"top\"]\n    },\n    preferZoom: false,\n    selectable: true,\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    stack: true,\n    stackSubgroups: true,\n    cluster: false,\n    //snap: {'function': 'function', nada},\n    start: \"\",\n    //template: {'function': 'function'},\n    //timeAxis: {\n    //  scale: ['millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'],\n    //  step: [1, 1, 10, 1]\n    //},\n    showTooltips: true,\n    tooltip: {\n      followMouse: false,\n      overflowMethod: \"flip\",\n      delay: [500, 0, 99999, 100]\n    },\n    tooltipOnItemUpdateTime: false,\n    type: [\"box\", \"point\", \"range\", \"background\"],\n    width: \"100%\",\n    zoomable: true,\n    zoomKey: [\"ctrlKey\", \"altKey\", \"shiftKey\", \"metaKey\", \"\"],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1],\n    xss: {\n      disabled: false\n    }\n  }\n};\n\nvar htmlColors = {\n  black: \"#000000\",\n  navy: \"#000080\",\n  darkblue: \"#00008B\",\n  mediumblue: \"#0000CD\",\n  blue: \"#0000FF\",\n  darkgreen: \"#006400\",\n  green: \"#008000\",\n  teal: \"#008080\",\n  darkcyan: \"#008B8B\",\n  deepskyblue: \"#00BFFF\",\n  darkturquoise: \"#00CED1\",\n  mediumspringgreen: \"#00FA9A\",\n  lime: \"#00FF00\",\n  springgreen: \"#00FF7F\",\n  aqua: \"#00FFFF\",\n  cyan: \"#00FFFF\",\n  midnightblue: \"#191970\",\n  dodgerblue: \"#1E90FF\",\n  lightseagreen: \"#20B2AA\",\n  forestgreen: \"#228B22\",\n  seagreen: \"#2E8B57\",\n  darkslategray: \"#2F4F4F\",\n  limegreen: \"#32CD32\",\n  mediumseagreen: \"#3CB371\",\n  turquoise: \"#40E0D0\",\n  royalblue: \"#4169E1\",\n  steelblue: \"#4682B4\",\n  darkslateblue: \"#483D8B\",\n  mediumturquoise: \"#48D1CC\",\n  indigo: \"#4B0082\",\n  darkolivegreen: \"#556B2F\",\n  cadetblue: \"#5F9EA0\",\n  cornflowerblue: \"#6495ED\",\n  mediumaquamarine: \"#66CDAA\",\n  dimgray: \"#696969\",\n  slateblue: \"#6A5ACD\",\n  olivedrab: \"#6B8E23\",\n  slategray: \"#708090\",\n  lightslategray: \"#778899\",\n  mediumslateblue: \"#7B68EE\",\n  lawngreen: \"#7CFC00\",\n  chartreuse: \"#7FFF00\",\n  aquamarine: \"#7FFFD4\",\n  maroon: \"#800000\",\n  purple: \"#800080\",\n  olive: \"#808000\",\n  gray: \"#808080\",\n  skyblue: \"#87CEEB\",\n  lightskyblue: \"#87CEFA\",\n  blueviolet: \"#8A2BE2\",\n  darkred: \"#8B0000\",\n  darkmagenta: \"#8B008B\",\n  saddlebrown: \"#8B4513\",\n  darkseagreen: \"#8FBC8F\",\n  lightgreen: \"#90EE90\",\n  mediumpurple: \"#9370D8\",\n  darkviolet: \"#9400D3\",\n  palegreen: \"#98FB98\",\n  darkorchid: \"#9932CC\",\n  yellowgreen: \"#9ACD32\",\n  sienna: \"#A0522D\",\n  brown: \"#A52A2A\",\n  darkgray: \"#A9A9A9\",\n  lightblue: \"#ADD8E6\",\n  greenyellow: \"#ADFF2F\",\n  paleturquoise: \"#AFEEEE\",\n  lightsteelblue: \"#B0C4DE\",\n  powderblue: \"#B0E0E6\",\n  firebrick: \"#B22222\",\n  darkgoldenrod: \"#B8860B\",\n  mediumorchid: \"#BA55D3\",\n  rosybrown: \"#BC8F8F\",\n  darkkhaki: \"#BDB76B\",\n  silver: \"#C0C0C0\",\n  mediumvioletred: \"#C71585\",\n  indianred: \"#CD5C5C\",\n  peru: \"#CD853F\",\n  chocolate: \"#D2691E\",\n  tan: \"#D2B48C\",\n  lightgrey: \"#D3D3D3\",\n  palevioletred: \"#D87093\",\n  thistle: \"#D8BFD8\",\n  orchid: \"#DA70D6\",\n  goldenrod: \"#DAA520\",\n  crimson: \"#DC143C\",\n  gainsboro: \"#DCDCDC\",\n  plum: \"#DDA0DD\",\n  burlywood: \"#DEB887\",\n  lightcyan: \"#E0FFFF\",\n  lavender: \"#E6E6FA\",\n  darksalmon: \"#E9967A\",\n  violet: \"#EE82EE\",\n  palegoldenrod: \"#EEE8AA\",\n  lightcoral: \"#F08080\",\n  khaki: \"#F0E68C\",\n  aliceblue: \"#F0F8FF\",\n  honeydew: \"#F0FFF0\",\n  azure: \"#F0FFFF\",\n  sandybrown: \"#F4A460\",\n  wheat: \"#F5DEB3\",\n  beige: \"#F5F5DC\",\n  whitesmoke: \"#F5F5F5\",\n  mintcream: \"#F5FFFA\",\n  ghostwhite: \"#F8F8FF\",\n  salmon: \"#FA8072\",\n  antiquewhite: \"#FAEBD7\",\n  linen: \"#FAF0E6\",\n  lightgoldenrodyellow: \"#FAFAD2\",\n  oldlace: \"#FDF5E6\",\n  red: \"#FF0000\",\n  fuchsia: \"#FF00FF\",\n  magenta: \"#FF00FF\",\n  deeppink: \"#FF1493\",\n  orangered: \"#FF4500\",\n  tomato: \"#FF6347\",\n  hotpink: \"#FF69B4\",\n  coral: \"#FF7F50\",\n  darkorange: \"#FF8C00\",\n  lightsalmon: \"#FFA07A\",\n  orange: \"#FFA500\",\n  lightpink: \"#FFB6C1\",\n  pink: \"#FFC0CB\",\n  gold: \"#FFD700\",\n  peachpuff: \"#FFDAB9\",\n  navajowhite: \"#FFDEAD\",\n  moccasin: \"#FFE4B5\",\n  bisque: \"#FFE4C4\",\n  mistyrose: \"#FFE4E1\",\n  blanchedalmond: \"#FFEBCD\",\n  papayawhip: \"#FFEFD5\",\n  lavenderblush: \"#FFF0F5\",\n  seashell: \"#FFF5EE\",\n  cornsilk: \"#FFF8DC\",\n  lemonchiffon: \"#FFFACD\",\n  floralwhite: \"#FFFAF0\",\n  snow: \"#FFFAFA\",\n  yellow: \"#FFFF00\",\n  lightyellow: \"#FFFFE0\",\n  ivory: \"#FFFFF0\",\n  white: \"#FFFFFF\"\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nclass ColorPicker {\n  /**\n   * @param {number} [pixelRatio=1]\n   */\n  constructor() {\n    let pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    this.pixelRatio = pixelRatio;\n    this.generated = false;\n    this.centerCoordinates = {\n      x: 289 / 2,\n      y: 289 / 2\n    };\n    this.r = 289 * 0.49;\n    this.color = {\n      r: 255,\n      g: 255,\n      b: 255,\n      a: 1.0\n    };\n    this.hueCircle = undefined;\n    this.initialColor = {\n      r: 255,\n      g: 255,\n      b: 255,\n      a: 1.0\n    };\n    this.previousColor = undefined;\n    this.applied = false;\n\n    // bound by\n    this.updateCallback = () => {};\n    this.closeCallback = () => {};\n\n    // create all DOM elements\n    this._create();\n  }\n\n  /**\n   * this inserts the colorPicker into a div from the DOM\n   * @param {Element} container\n   */\n  insertTo(container) {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n      this.hammer = undefined;\n    }\n    this.container = container;\n    this.container.appendChild(this.frame);\n    this._bindHammer();\n    this._setSize();\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {function} callback\n   */\n  setUpdateCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.updateCallback = callback;\n    } else {\n      throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");\n    }\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param {function} callback\n   */\n  setCloseCallback(callback) {\n    if (typeof callback === \"function\") {\n      this.closeCallback = callback;\n    } else {\n      throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");\n    }\n  }\n\n  /**\n   *\n   * @param {string} color\n   * @returns {String}\n   * @private\n   */\n  _isColorString(color) {\n    if (typeof color === \"string\") {\n      return htmlColors[color];\n    }\n  }\n\n  /**\n   * Set the color of the colorPicker\n   * Supported formats:\n   * 'red'                   --> HTML color string\n   * '#ffffff'               --> hex string\n   * 'rgb(255,255,255)'      --> rgb string\n   * 'rgba(255,255,255,1.0)' --> rgba string\n   * {r:255,g:255,b:255}     --> rgb object\n   * {r:255,g:255,b:255,a:1.0} --> rgba object\n   * @param {string|Object} color\n   * @param {boolean} [setInitial=true]\n   */\n  setColor(color) {\n    let setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    if (color === \"none\") {\n      return;\n    }\n    let rgba;\n\n    // if a html color shorthand is used, convert to hex\n    var htmlColor = this._isColorString(color);\n    if (htmlColor !== undefined) {\n      color = htmlColor;\n    }\n\n    // check format\n    if (availableUtils.isString(color) === true) {\n      if (availableUtils.isValidRGB(color) === true) {\n        let rgbaArray = color.substr(4).substr(0, color.length - 5).split(\",\");\n        rgba = {\n          r: rgbaArray[0],\n          g: rgbaArray[1],\n          b: rgbaArray[2],\n          a: 1.0\n        };\n      } else if (availableUtils.isValidRGBA(color) === true) {\n        let rgbaArray = color.substr(5).substr(0, color.length - 6).split(\",\");\n        rgba = {\n          r: rgbaArray[0],\n          g: rgbaArray[1],\n          b: rgbaArray[2],\n          a: rgbaArray[3]\n        };\n      } else if (availableUtils.isValidHex(color) === true) {\n        let rgbObj = availableUtils.hexToRGB(color);\n        rgba = {\n          r: rgbObj.r,\n          g: rgbObj.g,\n          b: rgbObj.b,\n          a: 1.0\n        };\n      }\n    } else {\n      if (color instanceof Object) {\n        if (color.r !== undefined && color.g !== undefined && color.b !== undefined) {\n          let alpha = color.a !== undefined ? color.a : \"1.0\";\n          rgba = {\n            r: color.r,\n            g: color.g,\n            b: color.b,\n            a: alpha\n          };\n        }\n      }\n    }\n\n    // set color\n    if (rgba === undefined) {\n      throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" + _JSON$stringify(color));\n    } else {\n      this._setColor(rgba, setInitial);\n    }\n  }\n\n  /**\n   * this shows the color picker.\n   * The hue circle is constructed once and stored.\n   */\n  show() {\n    if (this.closeCallback !== undefined) {\n      this.closeCallback();\n      this.closeCallback = undefined;\n    }\n    this.applied = false;\n    this.frame.style.display = \"block\";\n    this._generateHueCircle();\n  }\n\n  // ------------------------------------------ PRIVATE ----------------------------- //\n\n  /**\n   * Hide the picker. Is called by the cancel button.\n   * Optional boolean to store the previous color for easy access later on.\n   * @param {boolean} [storePrevious=true]\n   * @private\n   */\n  _hide() {\n    let storePrevious = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    // store the previous color for next time;\n    if (storePrevious === true) {\n      this.previousColor = availableUtils.extend({}, this.color);\n    }\n    if (this.applied === true) {\n      this.updateCallback(this.initialColor);\n    }\n    this.frame.style.display = \"none\";\n\n    // call the closing callback, restoring the onclick method.\n    // this is in a setTimeout because it will trigger the show again before the click is done.\n    _setTimeout(() => {\n      if (this.closeCallback !== undefined) {\n        this.closeCallback();\n        this.closeCallback = undefined;\n      }\n    }, 0);\n  }\n\n  /**\n   * bound to the save button. Saves and hides.\n   * @private\n   */\n  _save() {\n    this.updateCallback(this.color);\n    this.applied = false;\n    this._hide();\n  }\n\n  /**\n   * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n   * @private\n   */\n  _apply() {\n    this.applied = true;\n    this.updateCallback(this.color);\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * load the color from the previous session.\n   * @private\n   */\n  _loadLast() {\n    if (this.previousColor !== undefined) {\n      this.setColor(this.previousColor, false);\n    } else {\n      alert(\"There is no last color to load...\");\n    }\n  }\n\n  /**\n   * set the color, place the picker\n   * @param {Object} rgba\n   * @param {boolean} [setInitial=true]\n   * @private\n   */\n  _setColor(rgba) {\n    let setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    // store the initial color\n    if (setInitial === true) {\n      this.initialColor = availableUtils.extend({}, rgba);\n    }\n    this.color = rgba;\n    let hsv = availableUtils.RGBToHSV(rgba.r, rgba.g, rgba.b);\n    let angleConvert = 2 * Math.PI;\n    let radius = this.r * hsv.s;\n    let x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n    let y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n    this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n    this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n    this._updatePicker(rgba);\n  }\n\n  /**\n   * bound to opacity control\n   * @param {number} value\n   * @private\n   */\n  _setOpacity(value) {\n    this.color.a = value / 100;\n    this._updatePicker(this.color);\n  }\n\n  /**\n   * bound to brightness control\n   * @param {number} value\n   * @private\n   */\n  _setBrightness(value) {\n    let hsv = availableUtils.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.v = value / 100;\n    let rgba = availableUtils.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n    this._updatePicker();\n  }\n\n  /**\n   * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n   * @param {Object} rgba\n   * @private\n   */\n  _updatePicker() {\n    let rgba = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.color;\n    let hsv = availableUtils.RGBToHSV(rgba.r, rgba.g, rgba.b);\n    let ctx = this.colorPickerCanvas.getContext(\"2d\");\n    if (this.pixelRation === undefined) {\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n    // clear the canvas\n    let w = this.colorPickerCanvas.clientWidth;\n    let h = this.colorPickerCanvas.clientHeight;\n    ctx.clearRect(0, 0, w, h);\n    ctx.putImageData(this.hueCircle, 0, 0);\n    ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n    ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n    _fillInstanceProperty(ctx).call(ctx);\n    this.brightnessRange.value = 100 * hsv.v;\n    this.opacityRange.value = 100 * rgba.a;\n    this.initialColorDiv.style.backgroundColor = \"rgba(\" + this.initialColor.r + \",\" + this.initialColor.g + \",\" + this.initialColor.b + \",\" + this.initialColor.a + \")\";\n    this.newColorDiv.style.backgroundColor = \"rgba(\" + this.color.r + \",\" + this.color.g + \",\" + this.color.b + \",\" + this.color.a + \")\";\n  }\n\n  /**\n   * used by create to set the size of the canvas.\n   * @private\n   */\n  _setSize() {\n    this.colorPickerCanvas.style.width = \"100%\";\n    this.colorPickerCanvas.style.height = \"100%\";\n    this.colorPickerCanvas.width = 289 * this.pixelRatio;\n    this.colorPickerCanvas.height = 289 * this.pixelRatio;\n  }\n\n  /**\n   * create all dom elements\n   * TODO: cleanup, lots of similar dom elements\n   * @private\n   */\n  _create() {\n    var _context, _context2, _context3, _context4;\n    this.frame = document.createElement(\"div\");\n    this.frame.className = \"vis-color-picker\";\n    this.colorPickerDiv = document.createElement(\"div\");\n    this.colorPickerSelector = document.createElement(\"div\");\n    this.colorPickerSelector.className = \"vis-selector\";\n    this.colorPickerDiv.appendChild(this.colorPickerSelector);\n    this.colorPickerCanvas = document.createElement(\"canvas\");\n    this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n    if (!this.colorPickerCanvas.getContext) {\n      let noCanvas = document.createElement(\"DIV\");\n      noCanvas.style.color = \"red\";\n      noCanvas.style.fontWeight = \"bold\";\n      noCanvas.style.padding = \"10px\";\n      noCanvas.innerHTML = \"Error: your browser does not support HTML canvas\";\n      this.colorPickerCanvas.appendChild(noCanvas);\n    } else {\n      let ctx = this.colorPickerCanvas.getContext(\"2d\");\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);\n      this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n    this.colorPickerDiv.className = \"vis-color\";\n    this.opacityDiv = document.createElement(\"div\");\n    this.opacityDiv.className = \"vis-opacity\";\n    this.brightnessDiv = document.createElement(\"div\");\n    this.brightnessDiv.className = \"vis-brightness\";\n    this.arrowDiv = document.createElement(\"div\");\n    this.arrowDiv.className = \"vis-arrow\";\n    this.opacityRange = document.createElement(\"input\");\n    try {\n      this.opacityRange.type = \"range\"; // Not supported on IE9\n      this.opacityRange.min = \"0\";\n      this.opacityRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling and remove this lint exception\n    } // eslint-disable-line no-empty\n    this.opacityRange.value = \"100\";\n    this.opacityRange.className = \"vis-range\";\n    this.brightnessRange = document.createElement(\"input\");\n    try {\n      this.brightnessRange.type = \"range\"; // Not supported on IE9\n      this.brightnessRange.min = \"0\";\n      this.brightnessRange.max = \"100\";\n    } catch (err) {\n      // TODO: Add some error handling and remove this lint exception\n    } // eslint-disable-line no-empty\n    this.brightnessRange.value = \"100\";\n    this.brightnessRange.className = \"vis-range\";\n    this.opacityDiv.appendChild(this.opacityRange);\n    this.brightnessDiv.appendChild(this.brightnessRange);\n    var me = this;\n    this.opacityRange.onchange = function () {\n      me._setOpacity(this.value);\n    };\n    this.opacityRange.oninput = function () {\n      me._setOpacity(this.value);\n    };\n    this.brightnessRange.onchange = function () {\n      me._setBrightness(this.value);\n    };\n    this.brightnessRange.oninput = function () {\n      me._setBrightness(this.value);\n    };\n    this.brightnessLabel = document.createElement(\"div\");\n    this.brightnessLabel.className = \"vis-label vis-brightness\";\n    this.brightnessLabel.innerHTML = \"brightness:\";\n    this.opacityLabel = document.createElement(\"div\");\n    this.opacityLabel.className = \"vis-label vis-opacity\";\n    this.opacityLabel.innerHTML = \"opacity:\";\n    this.newColorDiv = document.createElement(\"div\");\n    this.newColorDiv.className = \"vis-new-color\";\n    this.newColorDiv.innerHTML = \"new\";\n    this.initialColorDiv = document.createElement(\"div\");\n    this.initialColorDiv.className = \"vis-initial-color\";\n    this.initialColorDiv.innerHTML = \"initial\";\n    this.cancelButton = document.createElement(\"div\");\n    this.cancelButton.className = \"vis-button vis-cancel\";\n    this.cancelButton.innerHTML = \"cancel\";\n    this.cancelButton.onclick = _bindInstanceProperty(_context = this._hide).call(_context, this, false);\n    this.applyButton = document.createElement(\"div\");\n    this.applyButton.className = \"vis-button vis-apply\";\n    this.applyButton.innerHTML = \"apply\";\n    this.applyButton.onclick = _bindInstanceProperty(_context2 = this._apply).call(_context2, this);\n    this.saveButton = document.createElement(\"div\");\n    this.saveButton.className = \"vis-button vis-save\";\n    this.saveButton.innerHTML = \"save\";\n    this.saveButton.onclick = _bindInstanceProperty(_context3 = this._save).call(_context3, this);\n    this.loadButton = document.createElement(\"div\");\n    this.loadButton.className = \"vis-button vis-load\";\n    this.loadButton.innerHTML = \"load last\";\n    this.loadButton.onclick = _bindInstanceProperty(_context4 = this._loadLast).call(_context4, this);\n    this.frame.appendChild(this.colorPickerDiv);\n    this.frame.appendChild(this.arrowDiv);\n    this.frame.appendChild(this.brightnessLabel);\n    this.frame.appendChild(this.brightnessDiv);\n    this.frame.appendChild(this.opacityLabel);\n    this.frame.appendChild(this.opacityDiv);\n    this.frame.appendChild(this.newColorDiv);\n    this.frame.appendChild(this.initialColorDiv);\n    this.frame.appendChild(this.cancelButton);\n    this.frame.appendChild(this.applyButton);\n    this.frame.appendChild(this.saveButton);\n    this.frame.appendChild(this.loadButton);\n  }\n\n  /**\n   * bind hammer to the color picker\n   * @private\n   */\n  _bindHammer() {\n    this.drag = {};\n    this.pinch = {};\n    this.hammer = new Hammer(this.colorPickerCanvas);\n    this.hammer.get(\"pinch\").set({\n      enable: true\n    });\n    onTouch(this.hammer, event => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"tap\", event => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panstart\", event => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panmove\", event => {\n      this._moveSelector(event);\n    });\n    this.hammer.on(\"panend\", event => {\n      this._moveSelector(event);\n    });\n  }\n\n  /**\n   * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n   * @private\n   */\n  _generateHueCircle() {\n    if (this.generated === false) {\n      let ctx = this.colorPickerCanvas.getContext(\"2d\");\n      if (this.pixelRation === undefined) {\n        this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);\n      }\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      let w = this.colorPickerCanvas.clientWidth;\n      let h = this.colorPickerCanvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n      // draw hue circle\n      let x, y, hue, sat;\n      this.centerCoordinates = {\n        x: w * 0.5,\n        y: h * 0.5\n      };\n      this.r = 0.49 * w;\n      let angleConvert = 2 * Math.PI / 360;\n      let hfac = 1 / 360;\n      let sfac = 1 / this.r;\n      let rgb;\n      for (hue = 0; hue < 360; hue++) {\n        for (sat = 0; sat < this.r; sat++) {\n          x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n          y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n          rgb = availableUtils.HSVToRGB(hue * hfac, sat * sfac, 1);\n          ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n          ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n        }\n      }\n      ctx.strokeStyle = \"rgba(0,0,0,1)\";\n      ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n      ctx.stroke();\n      this.hueCircle = ctx.getImageData(0, 0, w, h);\n    }\n    this.generated = true;\n  }\n\n  /**\n   * move the selector. This is called by hammer functions.\n   *\n   * @param {Event}  event   The event\n   * @private\n   */\n  _moveSelector(event) {\n    let rect = this.colorPickerDiv.getBoundingClientRect();\n    let left = event.center.x - rect.left;\n    let top = event.center.y - rect.top;\n    let centerY = 0.5 * this.colorPickerDiv.clientHeight;\n    let centerX = 0.5 * this.colorPickerDiv.clientWidth;\n    let x = left - centerX;\n    let y = top - centerY;\n    let angle = Math.atan2(x, y);\n    let radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n    let newTop = Math.cos(angle) * radius + centerY;\n    let newLeft = Math.sin(angle) * radius + centerX;\n    this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n    this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n    // set color\n    let h = angle / (2 * Math.PI);\n    h = h < 0 ? h + 1 : h;\n    let s = radius / this.r;\n    let hsv = availableUtils.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.h = h;\n    hsv.s = s;\n    let rgba = availableUtils.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba[\"a\"] = this.color.a;\n    this.color = rgba;\n\n    // update previews\n    this.initialColorDiv.style.backgroundColor = \"rgba(\" + this.initialColor.r + \",\" + this.initialColor.g + \",\" + this.initialColor.b + \",\" + this.initialColor.a + \")\";\n    this.newColorDiv.style.backgroundColor = \"rgba(\" + this.color.r + \",\" + this.color.g + \",\" + this.color.b + \",\" + this.color.a + \")\";\n  }\n}\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nclass Configurator {\n  /**\n   * @param {Object} parentModule        | the location where parentModule.setOptions() can be called\n   * @param {Object} defaultContainer    | the default container of the module\n   * @param {Object} configureOptions    | the fully configured and predefined options set found in allOptions.js\n   * @param {number} pixelRatio          | canvas pixel ratio\n   */\n  constructor(parentModule, defaultContainer, configureOptions) {\n    let pixelRatio = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n    this.parent = parentModule;\n    this.changedOptions = [];\n    this.container = defaultContainer;\n    this.allowCreation = false;\n    this.options = {};\n    this.initialized = false;\n    this.popupCounter = 0;\n    this.defaultOptions = {\n      enabled: false,\n      filter: true,\n      container: undefined,\n      showButton: true\n    };\n    availableUtils.extend(this.options, this.defaultOptions);\n    this.configureOptions = configureOptions;\n    this.moduleOptions = {};\n    this.domElements = [];\n    this.popupDiv = {};\n    this.popupLimit = 5;\n    this.popupHistory = {};\n    this.colorPicker = new ColorPicker(pixelRatio);\n    this.wrapper = undefined;\n  }\n\n  /**\n   * refresh all options.\n   * Because all modules parse their options by themselves, we just use their options. We copy them here.\n   *\n   * @param {Object} options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      // reset the popup history because the indices may have been changed.\n      this.popupHistory = {};\n      this._removePopup();\n      let enabled = true;\n      if (typeof options === \"string\") {\n        this.options.filter = options;\n      } else if (_Array$isArray(options)) {\n        this.options.filter = options.join();\n      } else if (typeof options === \"object\") {\n        if (options == null) {\n          throw new TypeError(\"options cannot be null\");\n        }\n        if (options.container !== undefined) {\n          this.options.container = options.container;\n        }\n        if (_filterInstanceProperty(options) !== undefined) {\n          this.options.filter = _filterInstanceProperty(options);\n        }\n        if (options.showButton !== undefined) {\n          this.options.showButton = options.showButton;\n        }\n        if (options.enabled !== undefined) {\n          enabled = options.enabled;\n        }\n      } else if (typeof options === \"boolean\") {\n        this.options.filter = true;\n        enabled = options;\n      } else if (typeof options === \"function\") {\n        this.options.filter = options;\n        enabled = true;\n      }\n      if (_filterInstanceProperty(this.options) === false) {\n        enabled = false;\n      }\n      this.options.enabled = enabled;\n    }\n    this._clean();\n  }\n\n  /**\n   *\n   * @param {Object} moduleOptions\n   */\n  setModuleOptions(moduleOptions) {\n    this.moduleOptions = moduleOptions;\n    if (this.options.enabled === true) {\n      this._clean();\n      if (this.options.container !== undefined) {\n        this.container = this.options.container;\n      }\n      this._create();\n    }\n  }\n\n  /**\n   * Create all DOM elements\n   * @private\n   */\n  _create() {\n    this._clean();\n    this.changedOptions = [];\n    let filter = _filterInstanceProperty(this.options);\n    let counter = 0;\n    let show = false;\n    for (let option in this.configureOptions) {\n      if (!Object.prototype.hasOwnProperty.call(this.configureOptions, option)) continue;\n      this.allowCreation = false;\n      show = false;\n      if (typeof filter === \"function\") {\n        show = filter(option, []);\n        show = show || this._handleObject(this.configureOptions[option], [option], true);\n      } else if (filter === true || _indexOfInstanceProperty(filter).call(filter, option) !== -1) {\n        show = true;\n      }\n      if (show !== false) {\n        this.allowCreation = true;\n\n        // linebreak between categories\n        if (counter > 0) {\n          this._makeItem([]);\n        }\n        // a header for the category\n        this._makeHeader(option);\n\n        // get the sub options\n        this._handleObject(this.configureOptions[option], [option]);\n      }\n      counter++;\n    }\n    this._makeButton();\n    this._push();\n    //~ this.colorPicker.insertTo(this.container);\n  }\n\n  /**\n   * draw all DOM elements on the screen\n   * @private\n   */\n  _push() {\n    this.wrapper = document.createElement(\"div\");\n    this.wrapper.className = \"vis-configuration-wrapper\";\n    this.container.appendChild(this.wrapper);\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.appendChild(this.domElements[i]);\n    }\n    this._showPopupIfNeeded();\n  }\n\n  /**\n   * delete all DOM elements\n   * @private\n   */\n  _clean() {\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.removeChild(this.domElements[i]);\n    }\n    if (this.wrapper !== undefined) {\n      this.container.removeChild(this.wrapper);\n      this.wrapper = undefined;\n    }\n    this.domElements = [];\n    this._removePopup();\n  }\n\n  /**\n   * get the value from the actualOptions if it exists\n   * @param {array} path    | where to look for the actual option\n   * @returns {*}\n   * @private\n   */\n  _getValue(path) {\n    let base = this.moduleOptions;\n    for (let i = 0; i < path.length; i++) {\n      if (base[path[i]] !== undefined) {\n        base = base[path[i]];\n      } else {\n        base = undefined;\n        break;\n      }\n    }\n    return base;\n  }\n\n  /**\n   * all option elements are wrapped in an item\n   * @param {Array} path    | where to look for the actual option\n   * @param {Array.<Element>} domElements\n   * @returns {number}\n   * @private\n   */\n  _makeItem(path) {\n    if (this.allowCreation === true) {\n      let item = document.createElement(\"div\");\n      item.className = \"vis-configuration vis-config-item vis-config-s\" + path.length;\n      for (var _len = arguments.length, domElements = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        domElements[_key - 1] = arguments[_key];\n      }\n      _forEachInstanceProperty(domElements).call(domElements, element => {\n        item.appendChild(element);\n      });\n      this.domElements.push(item);\n      return this.domElements.length;\n    }\n    return 0;\n  }\n\n  /**\n   * header for major subjects\n   * @param {string} name\n   * @private\n   */\n  _makeHeader(name) {\n    let div = document.createElement(\"div\");\n    div.className = \"vis-configuration vis-config-header\";\n    div.innerHTML = availableUtils.xss(name);\n    this._makeItem([], div);\n  }\n\n  /**\n   * make a label, if it is an object label, it gets different styling.\n   * @param {string} name\n   * @param {array} path    | where to look for the actual option\n   * @param {string} objectLabel\n   * @returns {HTMLElement}\n   * @private\n   */\n  _makeLabel(name, path) {\n    let objectLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    let div = document.createElement(\"div\");\n    div.className = \"vis-configuration vis-config-label vis-config-s\" + path.length;\n    if (objectLabel === true) {\n      div.innerHTML = availableUtils.xss(\"<i><b>\" + name + \":</b></i>\");\n    } else {\n      div.innerHTML = availableUtils.xss(name + \":\");\n    }\n    return div;\n  }\n\n  /**\n   * make a dropdown list for multiple possible string optoins\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeDropdown(arr, value, path) {\n    let select = document.createElement(\"select\");\n    select.className = \"vis-configuration vis-config-select\";\n    let selectedValue = 0;\n    if (value !== undefined) {\n      if (_indexOfInstanceProperty(arr).call(arr, value) !== -1) {\n        selectedValue = _indexOfInstanceProperty(arr).call(arr, value);\n      }\n    }\n    for (let i = 0; i < arr.length; i++) {\n      let option = document.createElement(\"option\");\n      option.value = arr[i];\n      if (i === selectedValue) {\n        option.selected = \"selected\";\n      }\n      option.innerHTML = arr[i];\n      select.appendChild(option);\n    }\n    let me = this;\n    select.onchange = function () {\n      me._update(this.value, path);\n    };\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, select);\n  }\n\n  /**\n   * make a range object for numeric options\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeRange(arr, value, path) {\n    let defaultValue = arr[0];\n    let min = arr[1];\n    let max = arr[2];\n    let step = arr[3];\n    let range = document.createElement(\"input\");\n    range.className = \"vis-configuration vis-config-range\";\n    try {\n      range.type = \"range\"; // not supported on IE9\n      range.min = min;\n      range.max = max;\n    } catch (err) {\n      // TODO: Add some error handling and remove this lint exception\n    } // eslint-disable-line no-empty\n    range.step = step;\n\n    // set up the popup settings in case they are needed.\n    let popupString = \"\";\n    let popupValue = 0;\n    if (value !== undefined) {\n      let factor = 1.2;\n      if (value < 0 && value * factor < min) {\n        range.min = Math.ceil(value * factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      } else if (value / factor < min) {\n        range.min = Math.ceil(value / factor);\n        popupValue = range.min;\n        popupString = \"range increased\";\n      }\n      if (value * factor > max && max !== 1) {\n        range.max = Math.ceil(value * factor);\n        popupValue = range.max;\n        popupString = \"range increased\";\n      }\n      range.value = value;\n    } else {\n      range.value = defaultValue;\n    }\n    let input = document.createElement(\"input\");\n    input.className = \"vis-configuration vis-config-rangeinput\";\n    input.value = Number(range.value);\n    var me = this;\n    range.onchange = function () {\n      input.value = this.value;\n      me._update(Number(this.value), path);\n    };\n    range.oninput = function () {\n      input.value = this.value;\n    };\n    let label = this._makeLabel(path[path.length - 1], path);\n    let itemIndex = this._makeItem(path, label, range, input);\n\n    // if a popup is needed AND it has not been shown for this value, show it.\n    if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n      this.popupHistory[itemIndex] = popupValue;\n      this._setupPopup(popupString, itemIndex);\n    }\n  }\n\n  /**\n   * make a button object\n   * @private\n   */\n  _makeButton() {\n    if (this.options.showButton === true) {\n      let generateButton = document.createElement(\"div\");\n      generateButton.className = \"vis-configuration vis-config-button\";\n      generateButton.innerHTML = \"generate options\";\n      generateButton.onclick = () => {\n        this._printOptions();\n      };\n      generateButton.onmouseover = () => {\n        generateButton.className = \"vis-configuration vis-config-button hover\";\n      };\n      generateButton.onmouseout = () => {\n        generateButton.className = \"vis-configuration vis-config-button\";\n      };\n      this.optionsContainer = document.createElement(\"div\");\n      this.optionsContainer.className = \"vis-configuration vis-config-option-container\";\n      this.domElements.push(this.optionsContainer);\n      this.domElements.push(generateButton);\n    }\n  }\n\n  /**\n   * prepare the popup\n   * @param {string} string\n   * @param {number} index\n   * @private\n   */\n  _setupPopup(string, index) {\n    if (this.initialized === true && this.allowCreation === true && this.popupCounter < this.popupLimit) {\n      let div = document.createElement(\"div\");\n      div.id = \"vis-configuration-popup\";\n      div.className = \"vis-configuration-popup\";\n      div.innerHTML = availableUtils.xss(string);\n      div.onclick = () => {\n        this._removePopup();\n      };\n      this.popupCounter += 1;\n      this.popupDiv = {\n        html: div,\n        index: index\n      };\n    }\n  }\n\n  /**\n   * remove the popup from the dom\n   * @private\n   */\n  _removePopup() {\n    if (this.popupDiv.html !== undefined) {\n      this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n      clearTimeout(this.popupDiv.hideTimeout);\n      clearTimeout(this.popupDiv.deleteTimeout);\n      this.popupDiv = {};\n    }\n  }\n\n  /**\n   * Show the popup if it is needed.\n   * @private\n   */\n  _showPopupIfNeeded() {\n    if (this.popupDiv.html !== undefined) {\n      let correspondingElement = this.domElements[this.popupDiv.index];\n      let rect = correspondingElement.getBoundingClientRect();\n      this.popupDiv.html.style.left = rect.left + \"px\";\n      this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n      document.body.appendChild(this.popupDiv.html);\n      this.popupDiv.hideTimeout = _setTimeout(() => {\n        this.popupDiv.html.style.opacity = 0;\n      }, 1500);\n      this.popupDiv.deleteTimeout = _setTimeout(() => {\n        this._removePopup();\n      }, 1800);\n    }\n  }\n\n  /**\n   * make a checkbox for boolean options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeCheckbox(defaultValue, value, path) {\n    var checkbox = document.createElement(\"input\");\n    checkbox.type = \"checkbox\";\n    checkbox.className = \"vis-configuration vis-config-checkbox\";\n    checkbox.checked = defaultValue;\n    if (value !== undefined) {\n      checkbox.checked = value;\n      if (value !== defaultValue) {\n        if (typeof defaultValue === \"object\") {\n          if (value !== defaultValue.enabled) {\n            this.changedOptions.push({\n              path: path,\n              value: value\n            });\n          }\n        } else {\n          this.changedOptions.push({\n            path: path,\n            value: value\n          });\n        }\n      }\n    }\n    let me = this;\n    checkbox.onchange = function () {\n      me._update(this.checked, path);\n    };\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a text input field for string options.\n   * @param {number} defaultValue\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeTextInput(defaultValue, value, path) {\n    var checkbox = document.createElement(\"input\");\n    checkbox.type = \"text\";\n    checkbox.className = \"vis-configuration vis-config-text\";\n    checkbox.value = value;\n    if (value !== defaultValue) {\n      this.changedOptions.push({\n        path: path,\n        value: value\n      });\n    }\n    let me = this;\n    checkbox.onchange = function () {\n      me._update(this.value, path);\n    };\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a color field with a color picker for color fields\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _makeColorField(arr, value, path) {\n    let defaultColor = arr[1];\n    let div = document.createElement(\"div\");\n    value = value === undefined ? defaultColor : value;\n    if (value !== \"none\") {\n      div.className = \"vis-configuration vis-config-colorBlock\";\n      div.style.backgroundColor = value;\n    } else {\n      div.className = \"vis-configuration vis-config-colorBlock none\";\n    }\n    value = value === undefined ? defaultColor : value;\n    div.onclick = () => {\n      this._showColorPicker(value, div, path);\n    };\n    let label = this._makeLabel(path[path.length - 1], path);\n    this._makeItem(path, label, div);\n  }\n\n  /**\n   * used by the color buttons to call the color picker.\n   * @param {number} value\n   * @param {HTMLElement} div\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _showColorPicker(value, div, path) {\n    // clear the callback from this div\n    div.onclick = function () {};\n    this.colorPicker.insertTo(div);\n    this.colorPicker.show();\n    this.colorPicker.setColor(value);\n    this.colorPicker.setUpdateCallback(color => {\n      let colorString = \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n      div.style.backgroundColor = colorString;\n      this._update(colorString, path);\n    });\n\n    // on close of the colorpicker, restore the callback.\n    this.colorPicker.setCloseCallback(() => {\n      div.onclick = () => {\n        this._showColorPicker(value, div, path);\n      };\n    });\n  }\n\n  /**\n   * parse an object and draw the correct items\n   * @param {Object} obj\n   * @param {array} [path=[]]    | where to look for the actual option\n   * @param {boolean} [checkOnly=false]\n   * @returns {boolean}\n   * @private\n   */\n  _handleObject(obj) {\n    let path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    let checkOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    let show = false;\n    let filter = _filterInstanceProperty(this.options);\n    let visibleInSet = false;\n    for (let subObj in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, subObj)) continue;\n      show = true;\n      let item = obj[subObj];\n      let newPath = availableUtils.copyAndExtendArray(path, subObj);\n      if (typeof filter === \"function\") {\n        show = filter(subObj, path);\n\n        // if needed we must go deeper into the object.\n        if (show === false) {\n          if (!_Array$isArray(item) && typeof item !== \"string\" && typeof item !== \"boolean\" && item instanceof Object) {\n            this.allowCreation = false;\n            show = this._handleObject(item, newPath, true);\n            this.allowCreation = checkOnly === false;\n          }\n        }\n      }\n      if (show !== false) {\n        visibleInSet = true;\n        let value = this._getValue(newPath);\n        if (_Array$isArray(item)) {\n          this._handleArray(item, value, newPath);\n        } else if (typeof item === \"string\") {\n          this._makeTextInput(item, value, newPath);\n        } else if (typeof item === \"boolean\") {\n          this._makeCheckbox(item, value, newPath);\n        } else if (item instanceof Object) {\n          // collapse the physics options that are not enabled\n          let draw = true;\n          if (_indexOfInstanceProperty(path).call(path, \"physics\") !== -1) {\n            if (this.moduleOptions.physics.solver !== subObj) {\n              draw = false;\n            }\n          }\n          if (draw === true) {\n            // initially collapse options with an disabled enabled option.\n            if (item.enabled !== undefined) {\n              let enabledPath = availableUtils.copyAndExtendArray(newPath, \"enabled\");\n              let enabledValue = this._getValue(enabledPath);\n              if (enabledValue === true) {\n                let label = this._makeLabel(subObj, newPath, true);\n                this._makeItem(newPath, label);\n                visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n              } else {\n                this._makeCheckbox(item, enabledValue, newPath);\n              }\n            } else {\n              let label = this._makeLabel(subObj, newPath, true);\n              this._makeItem(newPath, label);\n              visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n            }\n          }\n        } else {\n          console.error(\"dont know how to handle\", item, subObj, newPath);\n        }\n      }\n    }\n    return visibleInSet;\n  }\n\n  /**\n   * handle the array type of option\n   * @param {Array.<number>} arr\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _handleArray(arr, value, path) {\n    if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n      this._makeColorField(arr, value, path);\n      if (arr[1] !== value) {\n        this.changedOptions.push({\n          path: path,\n          value: value\n        });\n      }\n    } else if (typeof arr[0] === \"string\") {\n      this._makeDropdown(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({\n          path: path,\n          value: value\n        });\n      }\n    } else if (typeof arr[0] === \"number\") {\n      this._makeRange(arr, value, path);\n      if (arr[0] !== value) {\n        this.changedOptions.push({\n          path: path,\n          value: Number(value)\n        });\n      }\n    }\n  }\n\n  /**\n   * called to update the network with the new settings.\n   * @param {number} value\n   * @param {array} path    | where to look for the actual option\n   * @private\n   */\n  _update(value, path) {\n    let options = this._constructOptions(value, path);\n    if (this.parent.body && this.parent.body.emitter && this.parent.body.emitter.emit) {\n      this.parent.body.emitter.emit(\"configChange\", options);\n    }\n    this.initialized = true;\n    this.parent.setOptions(options);\n  }\n\n  /**\n   *\n   * @param {string|Boolean} value\n   * @param {Array.<string>} path\n   * @param {{}} optionsObj\n   * @returns {{}}\n   * @private\n   */\n  _constructOptions(value, path) {\n    let optionsObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let pointer = optionsObj;\n\n    // when dropdown boxes can be string or boolean, we typecast it into correct types\n    value = value === \"true\" ? true : value;\n    value = value === \"false\" ? false : value;\n    for (let i = 0; i < path.length; i++) {\n      if (path[i] !== \"global\") {\n        if (pointer[path[i]] === undefined) {\n          pointer[path[i]] = {};\n        }\n        if (i !== path.length - 1) {\n          pointer = pointer[path[i]];\n        } else {\n          pointer[path[i]] = value;\n        }\n      }\n    }\n    return optionsObj;\n  }\n\n  /**\n   * @private\n   */\n  _printOptions() {\n    let options = this.getOptions();\n    this.optionsContainer.innerHTML = \"<pre>var options = \" + _JSON$stringify(options, null, 2) + \"</pre>\";\n  }\n\n  /**\n   *\n   * @returns {{}} options\n   */\n  getOptions() {\n    let options = {};\n    for (var i = 0; i < this.changedOptions.length; i++) {\n      this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options);\n    }\n    return options;\n  }\n}\n\n/**\n * Create a timeline visualization\n * @extends Core\n */\nclass Timeline extends Core {\n  /**\n   * @param {HTMLElement} container\n   * @param {vis.DataSet | vis.DataView | Array} [items]\n   * @param {vis.DataSet | vis.DataView | Array} [groups]\n   * @param {Object} [options]  See Timeline.setOptions for the available options.\n   * @constructor Timeline\n   */\n  constructor(container, items, groups, options) {\n    var _context2, _context3, _context4, _context5, _context6, _context7, _context8;\n    super();\n    this.initTime = new Date();\n    this.itemsDone = false;\n    if (!(this instanceof Timeline)) {\n      throw new SyntaxError(\"Constructor must be called with the new operator\");\n    }\n\n    // if the third element is options, the forth is groups (optionally);\n    if (!(_Array$isArray(groups) || isDataViewLike(groups)) && groups instanceof Object) {\n      const forthArgument = options;\n      options = groups;\n      groups = forthArgument;\n    }\n\n    // TODO: REMOVE THIS in the next MAJOR release\n    // see https://github.com/almende/vis/issues/2511\n    if (options && options.throttleRedraw) {\n      console.warn('Timeline option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');\n    }\n    const me = this;\n    this.defaultOptions = {\n      autoResize: true,\n      longSelectPressTime: 251,\n      orientation: {\n        axis: \"bottom\",\n        // axis orientation: 'bottom', 'top', or 'both'\n        item: \"bottom\" // not relevant\n      },\n      moment: moment$2\n    };\n    this.options = availableUtils.deepExtend({}, this.defaultOptions);\n    options && availableUtils.setupXSSProtection(options.xss);\n\n    // Create the DOM, props, and emitter\n    this._create(container);\n    if (!options || options && typeof options.rtl == \"undefined\") {\n      this.dom.root.style.visibility = \"hidden\";\n      let directionFromDom;\n      let domNode = this.dom.root;\n      while (!directionFromDom && domNode) {\n        directionFromDom = window.getComputedStyle(domNode, null).direction;\n        domNode = domNode.parentElement;\n      }\n      this.options.rtl = directionFromDom && directionFromDom.toLowerCase() == \"rtl\";\n    } else {\n      this.options.rtl = options.rtl;\n    }\n    if (options) {\n      if (options.rollingMode) {\n        this.options.rollingMode = options.rollingMode;\n      }\n      if (options.onInitialDrawComplete) {\n        this.options.onInitialDrawComplete = options.onInitialDrawComplete;\n      }\n      if (options.onTimeout) {\n        this.options.onTimeout = options.onTimeout;\n      }\n      if (options.loadingScreenTemplate) {\n        this.options.loadingScreenTemplate = options.loadingScreenTemplate;\n      }\n    }\n\n    // Prepare loading screen\n    const loadingScreenFragment = document.createElement(\"div\");\n    if (this.options.loadingScreenTemplate) {\n      var _context;\n      const templateFunction = _bindInstanceProperty(_context = this.options.loadingScreenTemplate).call(_context, this);\n      const loadingScreen = templateFunction(this.dom.loadingScreen);\n      if (loadingScreen instanceof Object && !(loadingScreen instanceof Element)) {\n        templateFunction(loadingScreenFragment);\n      } else {\n        if (loadingScreen instanceof Element) {\n          loadingScreenFragment.innerHTML = \"\";\n          loadingScreenFragment.appendChild(loadingScreen);\n        } else if (loadingScreen != undefined) {\n          loadingScreenFragment.innerHTML = availableUtils.xss(loadingScreen);\n        }\n      }\n    }\n    this.dom.loadingScreen.appendChild(loadingScreenFragment);\n\n    // all components listed here will be repainted automatically\n    this.components = [];\n    this.body = {\n      dom: this.dom,\n      domProps: this.props,\n      emitter: {\n        on: _bindInstanceProperty(_context2 = this.on).call(_context2, this),\n        off: _bindInstanceProperty(_context3 = this.off).call(_context3, this),\n        emit: _bindInstanceProperty(_context4 = this.emit).call(_context4, this)\n      },\n      hiddenDates: [],\n      util: {\n        getScale() {\n          return me.timeAxis.step.scale;\n        },\n        getStep() {\n          return me.timeAxis.step.step;\n        },\n        toScreen: _bindInstanceProperty(_context5 = me._toScreen).call(_context5, me),\n        toGlobalScreen: _bindInstanceProperty(_context6 = me._toGlobalScreen).call(_context6, me),\n        // this refers to the root.width\n        toTime: _bindInstanceProperty(_context7 = me._toTime).call(_context7, me),\n        toGlobalTime: _bindInstanceProperty(_context8 = me._toGlobalTime).call(_context8, me)\n      }\n    };\n\n    // range\n    this.range = new Range(this.body, this.options);\n    this.components.push(this.range);\n    this.body.range = this.range;\n\n    // time axis\n    this.timeAxis = new TimeAxis(this.body, this.options);\n    this.timeAxis2 = null; // used in case of orientation option 'both'\n    this.components.push(this.timeAxis);\n\n    // current time bar\n    this.currentTime = new CurrentTime(this.body, this.options);\n    this.components.push(this.currentTime);\n\n    // item set\n    this.itemSet = new ItemSet(this.body, this.options);\n    this.components.push(this.itemSet);\n    this.itemsData = null; // DataSet\n    this.groupsData = null; // DataSet\n\n    /**\n     * Emit an event.\n     * @param {string} eventName Name of event.\n     * @param {Event} event The event object.\n     */\n    function emit(eventName, event) {\n      if (!me.hasListeners(eventName)) return;\n      me.emit(eventName, me.getEventProperties(event));\n    }\n    this.dom.root.onclick = event => emit(\"click\", event);\n    this.dom.root.ondblclick = event => emit(\"doubleClick\", event);\n    this.dom.root.oncontextmenu = event => emit(\"contextmenu\", event);\n    this.dom.root.onmouseover = event => emit(\"mouseOver\", event);\n    if (window.PointerEvent) {\n      this.dom.root.onpointerdown = event => emit(\"mouseDown\", event);\n      this.dom.root.onpointermove = event => emit(\"mouseMove\", event);\n      this.dom.root.onpointerup = event => emit(\"mouseUp\", event);\n    } else {\n      this.dom.root.onmousemove = event => emit(\"mouseMove\", event);\n      this.dom.root.onmousedown = event => emit(\"mouseDown\", event);\n      this.dom.root.onmouseup = event => emit(\"mouseUp\", event);\n    }\n\n    //Single time autoscale/fit\n    this.initialFitDone = false;\n    this.on(\"changed\", () => {\n      if (me.itemsData == null) return;\n      if (!me.initialFitDone && !me.options.rollingMode) {\n        me.initialFitDone = true;\n        if (me.options.start != undefined || me.options.end != undefined) {\n          if (me.options.start == undefined || me.options.end == undefined) {\n            var range = me.getItemRange();\n          }\n          const start = me.options.start != undefined ? me.options.start : range.min;\n          const end = me.options.end != undefined ? me.options.end : range.max;\n          me.setWindow(start, end, {\n            animation: false\n          });\n        } else {\n          me.fit({\n            animation: false\n          });\n        }\n      }\n      if (!me.initialDrawDone && (me.initialRangeChangeDone || !me.options.start && !me.options.end || me.options.rollingMode)) {\n        me.initialDrawDone = true;\n        me.itemSet.initialDrawDone = true;\n        me.dom.root.style.visibility = \"visible\";\n        me.dom.loadingScreen.parentNode.removeChild(me.dom.loadingScreen);\n        if (me.options.onInitialDrawComplete) {\n          _setTimeout(() => {\n            return me.options.onInitialDrawComplete();\n          }, 0);\n        }\n      }\n    });\n    this.on(\"destroyTimeline\", () => {\n      me.destroy();\n    });\n\n    // apply options\n    if (options) {\n      this.setOptions(options);\n    }\n    this.body.emitter.on(\"fit\", args => {\n      this._onFit(args);\n      this.redraw();\n    });\n\n    // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n    if (groups) {\n      this.setGroups(groups);\n    }\n\n    // create itemset\n    if (items) {\n      this.setItems(items);\n    }\n\n    // draw for the first time\n    this._redraw();\n  }\n\n  /**\n   * Load a configurator\n   * @return {Object}\n   * @private\n   */\n  _createConfigurator() {\n    return new Configurator(this, this.dom.container, configureOptions$1);\n  }\n\n  /**\n   * Force a redraw. The size of all items will be recalculated.\n   * Can be useful to manually redraw when option autoResize=false and the window\n   * has been resized, or when the items CSS has been changed.\n   *\n   * Note: this function will be overridden on construction with a trottled version\n   */\n  redraw() {\n    this.itemSet && this.itemSet.markDirty({\n      refreshItems: true\n    });\n    this._redraw();\n  }\n\n  /**\n   * Remove an item from the group\n   * @param {object} options\n   */\n  setOptions(options) {\n    // validate options\n    let errorFound = Validator.validate(options, allOptions$1);\n    if (errorFound === true) {\n      console.log(\"%cErrors have been found in the supplied options object.\", printStyle);\n    }\n    Core.prototype.setOptions.call(this, options);\n    if (\"type\" in options) {\n      if (options.type !== this.options.type) {\n        this.options.type = options.type;\n\n        // force recreation of all items\n        const itemsData = this.itemsData;\n        if (itemsData) {\n          const selection = this.getSelection();\n          this.setItems(null); // remove all\n          this.setItems(itemsData.rawDS); // add all\n          this.setSelection(selection); // restore selection\n        }\n      }\n    }\n  }\n\n  /**\n   * Set items\n   * @param {vis.DataSet | Array | null} items\n   */\n  setItems(items) {\n    this.itemsDone = false;\n\n    // convert to type DataSet when needed\n    let newDataSet;\n    if (!items) {\n      newDataSet = null;\n    } else if (isDataViewLike(items)) {\n      newDataSet = typeCoerceDataSet(items);\n    } else {\n      // turn an array into a dataset\n      newDataSet = typeCoerceDataSet(new DataSet(items));\n    }\n\n    // set items\n    if (this.itemsData) {\n      // stop maintaining a coerced version of the old data set\n      this.itemsData.dispose();\n    }\n    this.itemsData = newDataSet;\n    this.itemSet && this.itemSet.setItems(newDataSet != null ? newDataSet.rawDS : null);\n  }\n\n  /**\n   * Set groups\n   * @param {vis.DataSet | Array} groups\n   */\n  setGroups(groups) {\n    // convert to type DataSet when needed\n    let newDataSet;\n    const filter = group => group.visible !== false;\n    if (!groups) {\n      newDataSet = null;\n    } else {\n      // If groups is array, turn to DataSet & build dataview from that\n      if (_Array$isArray(groups)) groups = new DataSet(groups);\n      newDataSet = new DataView(groups, {\n        filter\n      });\n    }\n\n    // This looks weird but it's necessary to prevent memory leaks.\n    //\n    // The problem is that the DataView will exist as long as the DataSet it's\n    // connected to. This will force it to swap the groups DataSet for it's own\n    // DataSet. In this arrangement it will become unreferenced from the outside\n    // and garbage collected.\n    //\n    // IMPORTANT NOTE: If `this.groupsData` is a DataView was created in this\n    // method. Even if the original is a DataView already a new one has been\n    // created and assigned to `this.groupsData`. In case this changes in the\n    // future it will be necessary to rework this!!!!\n    if (this.groupsData != null && typeof this.groupsData.setData === \"function\") {\n      this.groupsData.setData(null);\n    }\n    this.groupsData = newDataSet;\n    this.itemSet.setGroups(newDataSet);\n  }\n\n  /**\n   * Set both items and groups in one go\n   * @param {{items: (Array | vis.DataSet), groups: (Array | vis.DataSet)}} data\n   */\n  setData(data) {\n    if (data && data.groups) {\n      this.setGroups(data.groups);\n    }\n    if (data && data.items) {\n      this.setItems(data.items);\n    }\n  }\n\n  /**\n   * Set selected items by their id. Replaces the current selection\n   * Unknown id's are silently ignored.\n   * @param {string[] | string} [ids]  An array with zero or more id's of the items to be\n   *                                selected. If ids is an empty array, all items will be\n   *                                unselected.\n   * @param {Object} [options]      Available options:\n   *                                `focus: boolean`\n   *                                    If true, focus will be set to the selected item(s)\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   *                                    Only applicable when option focus is true.\n   */\n  setSelection(ids, options) {\n    this.itemSet && this.itemSet.setSelection(ids);\n    if (options && options.focus) {\n      this.focus(ids, options);\n    }\n  }\n\n  /**\n   * Get the selected items by their id\n   * @return {Array} ids  The ids of the selected items\n   */\n  getSelection() {\n    return this.itemSet && this.itemSet.getSelection() || [];\n  }\n\n  /**\n   * Adjust the visible window such that the selected item (or multiple items)\n   * are centered on screen.\n   * @param {string | String[]} id     An item id or array with item ids\n   * @param {Object} [options]      Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   *                                `zoom: boolean`\n   *                                    If true (default), the timeline will\n   *                                    zoom on the element after focus it.\n   */\n  focus(id, options) {\n    if (!this.itemsData || id == undefined) return;\n    const ids = _Array$isArray(id) ? id : [id];\n\n    // get the specified item(s)\n    const itemsData = this.itemsData.get(ids);\n\n    // calculate minimum start and maximum end of specified items\n    let start = null;\n    let end = null;\n    _forEachInstanceProperty(itemsData).call(itemsData, itemData => {\n      const s = itemData.start.valueOf();\n      const e = \"end\" in itemData ? itemData.end.valueOf() : itemData.start.valueOf();\n      if (start === null || s < start) {\n        start = s;\n      }\n      if (end === null || e > end) {\n        end = e;\n      }\n    });\n    if (start !== null && end !== null) {\n      const me = this;\n      // Use the first item for the vertical focus\n      const item = this.itemSet.items[ids[0]];\n      let startPos = this._getScrollTop() * -1;\n      let initialVerticalScroll = null;\n\n      // Setup a handler for each frame of the vertical scroll\n      const verticalAnimationFrame = (ease, willDraw, done) => {\n        const verticalScroll = getItemVerticalScroll(me, item);\n        if (verticalScroll === false) {\n          return; // We don't need to scroll, so do nothing\n        }\n        if (!initialVerticalScroll) {\n          initialVerticalScroll = verticalScroll;\n        }\n        if (initialVerticalScroll.itemTop == verticalScroll.itemTop && !initialVerticalScroll.shouldScroll) {\n          return; // We don't need to scroll, so do nothing\n        } else if (initialVerticalScroll.itemTop != verticalScroll.itemTop && verticalScroll.shouldScroll) {\n          // The redraw shifted elements, so reset the animation to correct\n          initialVerticalScroll = verticalScroll;\n          startPos = me._getScrollTop() * -1;\n        }\n        const from = startPos;\n        const to = initialVerticalScroll.scrollOffset;\n        const scrollTop = done ? to : from + (to - from) * ease;\n        me._setScrollTop(-scrollTop);\n        if (!willDraw) {\n          me._redraw();\n        }\n      };\n\n      // Enforces the final vertical scroll position\n      const setFinalVerticalPosition = () => {\n        const finalVerticalScroll = getItemVerticalScroll(me, item);\n        if (finalVerticalScroll.shouldScroll && finalVerticalScroll.itemTop != initialVerticalScroll.itemTop) {\n          me._setScrollTop(-finalVerticalScroll.scrollOffset);\n          me._redraw();\n        }\n      };\n\n      // Perform one last check at the end to make sure the final vertical\n      // position is correct\n      const finalVerticalCallback = () => {\n        // Double check we ended at the proper scroll position\n        setFinalVerticalPosition();\n\n        // Let the redraw settle and finalize the position.\n        _setTimeout(setFinalVerticalPosition, 100);\n      };\n\n      // calculate the new middle and interval for the window\n      const zoom = options && options.zoom !== undefined ? options.zoom : true;\n      const middle = (start + end) / 2;\n      const interval = zoom ? (end - start) * 1.1 : Math.max(this.range.end - this.range.start, (end - start) * 1.1);\n      const animation = options && options.animation !== undefined ? options.animation : true;\n      if (!animation) {\n        // We aren't animating so set a default so that the final callback forces the vertical location\n        initialVerticalScroll = {\n          shouldScroll: false,\n          scrollOffset: -1,\n          itemTop: -1\n        };\n      }\n      this.range.stopRolling();\n      this.range.setRange(middle - interval / 2, middle + interval / 2, {\n        animation\n      }, finalVerticalCallback, verticalAnimationFrame);\n    }\n  }\n\n  /**\n   * Set Timeline window such that it fits all items\n   * @param {Object} [options]  Available options:\n   *                                `animation: boolean | {duration: number, easingFunction: string}`\n   *                                    If true (default), the range is animated\n   *                                    smoothly to the new window. An object can be\n   *                                    provided to specify duration and easing function.\n   *                                    Default duration is 500 ms, and default easing\n   *                                    function is 'easeInOutQuad'.\n   * @param {function} [callback]\n   */\n  fit(options, callback) {\n    const animation = options && options.animation !== undefined ? options.animation : true;\n    let range;\n    if (this.itemsData.length === 1 && this.itemsData.get()[0].end === undefined) {\n      // a single item -> don't fit, just show a range around the item from -4 to +3 days\n      range = this.getDataRange();\n      this.moveTo(range.min.valueOf(), {\n        animation\n      }, callback);\n    } else {\n      // exactly fit the items (plus a small margin)\n      range = this.getItemRange();\n      this.range.setRange(range.min, range.max, {\n        animation\n      }, callback);\n    }\n  }\n\n  /**\n   * Determine the range of the items, taking into account their actual width\n   * and a margin of 10 pixels on both sides.\n   *\n   * @returns {{min: Date, max: Date}}\n   */\n  getItemRange() {\n    // get a rough approximation for the range based on the items start and end dates\n    const range = this.getDataRange();\n    let min = range.min !== null ? range.min.valueOf() : null;\n    let max = range.max !== null ? range.max.valueOf() : null;\n    let minItem = null;\n    let maxItem = null;\n    if (min != null && max != null) {\n      let interval = max - min; // ms\n      if (interval <= 0) {\n        interval = 10;\n      }\n      const factor = interval / this.props.center.width;\n      const redrawQueue = {};\n      let redrawQueueLength = 0;\n\n      // collect redraw functions\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.itemSet.items, (item, key) => {\n        if (item.groupShowing) {\n          const returnQueue = true;\n          redrawQueue[key] = item.redraw(returnQueue);\n          redrawQueueLength = redrawQueue[key].length;\n        }\n      });\n      const needRedraw = redrawQueueLength > 0;\n      if (needRedraw) {\n        // redraw all regular items\n        for (let i = 0; i < redrawQueueLength; i++) {\n          _forEachInstanceProperty(availableUtils).call(availableUtils, redrawQueue, fns => {\n            fns[i]();\n          });\n        }\n      }\n\n      // calculate the date of the left side and right side of the items given\n      _forEachInstanceProperty(availableUtils).call(availableUtils, this.itemSet.items, item => {\n        const start = getStart(item);\n        const end = getEnd(item);\n        let startSide;\n        let endSide;\n        if (this.options.rtl) {\n          startSide = start - (item.getWidthRight() + 10) * factor;\n          endSide = end + (item.getWidthLeft() + 10) * factor;\n        } else {\n          startSide = start - (item.getWidthLeft() + 10) * factor;\n          endSide = end + (item.getWidthRight() + 10) * factor;\n        }\n        if (startSide < min) {\n          min = startSide;\n          minItem = item;\n        }\n        if (endSide > max) {\n          max = endSide;\n          maxItem = item;\n        }\n      });\n      if (minItem && maxItem) {\n        const lhs = minItem.getWidthLeft() + 10;\n        const rhs = maxItem.getWidthRight() + 10;\n        const delta = this.props.center.width - lhs - rhs; // px\n\n        if (delta > 0) {\n          if (this.options.rtl) {\n            min = getStart(minItem) - rhs * interval / delta; // ms\n            max = getEnd(maxItem) + lhs * interval / delta; // ms\n          } else {\n            min = getStart(minItem) - lhs * interval / delta; // ms\n            max = getEnd(maxItem) + rhs * interval / delta; // ms\n          }\n        }\n      }\n    }\n    return {\n      min: min != null ? new Date(min) : null,\n      max: max != null ? new Date(max) : null\n    };\n  }\n\n  /**\n   * Calculate the data range of the items start and end dates\n   * @returns {{min: Date, max: Date}}\n   */\n  getDataRange() {\n    let min = null;\n    let max = null;\n    if (this.itemsData) {\n      var _context9;\n      _forEachInstanceProperty(_context9 = this.itemsData).call(_context9, item => {\n        const start = availableUtils.convert(item.start, \"Date\").valueOf();\n        const end = availableUtils.convert(item.end != undefined ? item.end : item.start, \"Date\").valueOf();\n        if (min === null || start < min) {\n          min = start;\n        }\n        if (max === null || end > max) {\n          max = end;\n        }\n      });\n    }\n    return {\n      min: min != null ? new Date(min) : null,\n      max: max != null ? new Date(max) : null\n    };\n  }\n\n  /**\n   * Generate Timeline related information from an event\n   * @param {Event} event\n   * @return {Object} An object with related information, like on which area\n   *                  The event happened, whether clicked on an item, etc.\n   */\n  getEventProperties(event) {\n    const clientX = event.center ? event.center.x : event.clientX;\n    const clientY = event.center ? event.center.y : event.clientY;\n    const centerContainerRect = this.dom.centerContainer.getBoundingClientRect();\n    const x = this.options.rtl ? centerContainerRect.right - clientX : clientX - centerContainerRect.left;\n    const y = clientY - centerContainerRect.top;\n    const item = this.itemSet.itemFromTarget(event);\n    const group = this.itemSet.groupFromTarget(event);\n    const customTime = CustomTime.customTimeFromTarget(event);\n    const snap = this.itemSet.options.snap || null;\n    const scale = this.body.util.getScale();\n    const step = this.body.util.getStep();\n    const time = this._toTime(x);\n    const snappedTime = snap ? snap(time, scale, step) : time;\n    const element = availableUtils.getTarget(event);\n    let what = null;\n    if (item != null) {\n      what = \"item\";\n    } else if (customTime != null) {\n      what = \"custom-time\";\n    } else if (availableUtils.hasParent(element, this.timeAxis.dom.foreground)) {\n      what = \"axis\";\n    } else if (this.timeAxis2 && availableUtils.hasParent(element, this.timeAxis2.dom.foreground)) {\n      what = \"axis\";\n    } else if (availableUtils.hasParent(element, this.itemSet.dom.labelSet)) {\n      what = \"group-label\";\n    } else if (availableUtils.hasParent(element, this.currentTime.bar)) {\n      what = \"current-time\";\n    } else if (availableUtils.hasParent(element, this.dom.center)) {\n      what = \"background\";\n    }\n    return {\n      event,\n      item: item ? item.id : null,\n      isCluster: item ? !!item.isCluster : false,\n      items: item ? item.items || [] : null,\n      group: group ? group.groupId : null,\n      customTime: customTime ? customTime.options.id : null,\n      what,\n      pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n      pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n      x,\n      y,\n      time,\n      snappedTime\n    };\n  }\n\n  /**\n   * Toggle Timeline rolling mode\n   */\n  toggleRollingMode() {\n    if (this.range.rolling) {\n      this.range.stopRolling();\n    } else {\n      if (this.options.rollingMode == undefined) {\n        this.setOptions(this.options);\n      }\n      this.range.startRolling();\n    }\n  }\n\n  /**\n   * redraw\n   * @private\n   */\n  _redraw() {\n    Core.prototype._redraw.call(this);\n  }\n\n  /**\n   * on fit callback\n   * @param {object} args\n   * @private\n   */\n  _onFit(args) {\n    const {\n      start,\n      end,\n      animation\n    } = args;\n    if (!end) {\n      this.moveTo(start.valueOf(), {\n        animation\n      });\n    } else {\n      this.range.setRange(start, end, {\n        animation: animation\n      });\n    }\n  }\n}\n\n/**\n *\n * @param {timeline.Item} item\n * @returns {number}\n */\nfunction getStart(item) {\n  return availableUtils.convert(item.data.start, \"Date\").valueOf();\n}\n\n/**\n *\n * @param {timeline.Item} item\n * @returns {number}\n */\nfunction getEnd(item) {\n  const end = item.data.end != undefined ? item.data.end : item.data.start;\n  return availableUtils.convert(end, \"Date\").valueOf();\n}\n\n/**\n * @param {vis.Timeline} timeline\n * @param {timeline.Item} item\n * @return {{shouldScroll: bool, scrollOffset: number, itemTop: number}}\n */\nfunction getItemVerticalScroll(timeline, item) {\n  if (!item.parent) {\n    // The item no longer exists, so ignore this focus.\n    return false;\n  }\n  const itemsetHeight = timeline.options.rtl ? timeline.props.rightContainer.height : timeline.props.leftContainer.height;\n  const contentHeight = timeline.props.center.height;\n  const group = item.parent;\n  let offset = group.top;\n  let shouldScroll = true;\n  const orientation = timeline.timeAxis.options.orientation.axis;\n  const itemTop = () => {\n    if (orientation == \"bottom\") {\n      return group.height - item.top - item.height;\n    } else {\n      return item.top;\n    }\n  };\n  const currentScrollHeight = timeline._getScrollTop() * -1;\n  const targetOffset = offset + itemTop();\n  const height = item.height;\n  if (targetOffset < currentScrollHeight) {\n    if (offset + itemsetHeight <= offset + itemTop() + height) {\n      offset += itemTop() - timeline.itemSet.options.margin.item.vertical;\n    }\n  } else if (targetOffset + height > currentScrollHeight + itemsetHeight) {\n    offset += itemTop() + height - itemsetHeight + timeline.itemSet.options.margin.item.vertical;\n  } else {\n    shouldScroll = false;\n  }\n  offset = Math.min(offset, contentHeight - itemsetHeight);\n  return {\n    shouldScroll,\n    scrollOffset: offset,\n    itemTop: targetOffset\n  };\n}\n\n/** DataScale */\nclass DataScale {\n  /**\n   *\n   * @param {number} start\n   * @param {number} end\n   * @param {boolean} autoScaleStart\n   * @param {boolean} autoScaleEnd\n   * @param {number} containerHeight\n   * @param {number} majorCharHeight\n   * @param {boolean} zeroAlign\n   * @param {function} formattingFunction\n   * @constructor DataScale\n   */\n  constructor(start, end, autoScaleStart, autoScaleEnd, containerHeight, majorCharHeight) {\n    let zeroAlign = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;\n    let formattingFunction = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n    this.majorSteps = [1, 2, 5, 10];\n    this.minorSteps = [0.25, 0.5, 1, 2];\n    this.customLines = null;\n    this.containerHeight = containerHeight;\n    this.majorCharHeight = majorCharHeight;\n    this._start = start;\n    this._end = end;\n    this.scale = 1;\n    this.minorStepIdx = -1;\n    this.magnitudefactor = 1;\n    this.determineScale();\n    this.zeroAlign = zeroAlign;\n    this.autoScaleStart = autoScaleStart;\n    this.autoScaleEnd = autoScaleEnd;\n    this.formattingFunction = formattingFunction;\n    if (autoScaleStart || autoScaleEnd) {\n      const me = this;\n      const roundToMinor = value => {\n        const rounded = value - value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]);\n        if (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]) > 0.5 * (me.magnitudefactor * me.minorSteps[me.minorStepIdx])) {\n          return rounded + me.magnitudefactor * me.minorSteps[me.minorStepIdx];\n        } else {\n          return rounded;\n        }\n      };\n      if (autoScaleStart) {\n        this._start -= this.magnitudefactor * 2 * this.minorSteps[this.minorStepIdx];\n        this._start = roundToMinor(this._start);\n      }\n      if (autoScaleEnd) {\n        this._end += this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n        this._end = roundToMinor(this._end);\n      }\n      this.determineScale();\n    }\n  }\n\n  /**\n   * set chart height\n   * @param {number} majorCharHeight\n   */\n  setCharHeight(majorCharHeight) {\n    this.majorCharHeight = majorCharHeight;\n  }\n\n  /**\n   * set height\n   * @param {number} containerHeight\n   */\n  setHeight(containerHeight) {\n    this.containerHeight = containerHeight;\n  }\n\n  /**\n   * determine scale\n   */\n  determineScale() {\n    const range = this._end - this._start;\n    this.scale = this.containerHeight / range;\n    const minimumStepValue = this.majorCharHeight / this.scale;\n    const orderOfMagnitude = range > 0 ? Math.round(Math.log(range) / Math.LN10) : 0;\n    this.minorStepIdx = -1;\n    this.magnitudefactor = Math.pow(10, orderOfMagnitude);\n    let start = 0;\n    if (orderOfMagnitude < 0) {\n      start = orderOfMagnitude;\n    }\n    let solutionFound = false;\n    for (let l = start; Math.abs(l) <= Math.abs(orderOfMagnitude); l++) {\n      this.magnitudefactor = Math.pow(10, l);\n      for (let j = 0; j < this.minorSteps.length; j++) {\n        const stepSize = this.magnitudefactor * this.minorSteps[j];\n        if (stepSize >= minimumStepValue) {\n          solutionFound = true;\n          this.minorStepIdx = j;\n          break;\n        }\n      }\n      if (solutionFound === true) {\n        break;\n      }\n    }\n  }\n\n  /**\n   * returns if value is major\n   * @param {number} value\n   * @returns {boolean}\n   */\n  is_major(value) {\n    return value % (this.magnitudefactor * this.majorSteps[this.minorStepIdx]) === 0;\n  }\n\n  /**\n   * returns step size\n   * @returns {number}\n   */\n  getStep() {\n    return this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n  }\n\n  /**\n   * returns first major\n   * @returns {number}\n   */\n  getFirstMajor() {\n    const majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n    return this.convertValue(this._start + (majorStep - this._start % majorStep) % majorStep);\n  }\n\n  /**\n   * returns first major\n   * @param {date} current\n   * @returns {date} formatted date\n   */\n  formatValue(current) {\n    let returnValue = current.toPrecision(5);\n    if (typeof this.formattingFunction === \"function\") {\n      returnValue = this.formattingFunction(current);\n    }\n    if (typeof returnValue === \"number\") {\n      return \"\".concat(returnValue);\n    } else if (typeof returnValue === \"string\") {\n      return returnValue;\n    } else {\n      return current.toPrecision(5);\n    }\n  }\n\n  /**\n   * returns lines\n   * @returns {object} lines\n   */\n  getLines() {\n    const lines = [];\n    const step = this.getStep();\n    const bottomOffset = (step - this._start % step) % step;\n    for (let i = this._start + bottomOffset; this._end - i > 0.00001; i += step) {\n      if (i != this._start) {\n        //Skip the bottom line\n        lines.push({\n          major: this.is_major(i),\n          y: this.convertValue(i),\n          val: this.formatValue(i)\n        });\n      }\n    }\n    return lines;\n  }\n\n  /**\n   * follow scale\n   * @param {object} other\n   */\n  followScale(other) {\n    const oldStepIdx = this.minorStepIdx;\n    const oldStart = this._start;\n    const oldEnd = this._end;\n    const me = this;\n    const increaseMagnitude = () => {\n      me.magnitudefactor *= 2;\n    };\n    const decreaseMagnitude = () => {\n      me.magnitudefactor /= 2;\n    };\n    if (other.minorStepIdx <= 1 && this.minorStepIdx <= 1 || other.minorStepIdx > 1 && this.minorStepIdx > 1) ; else if (other.minorStepIdx < this.minorStepIdx) {\n      //I'm 5, they are 4 per major.\n      this.minorStepIdx = 1;\n      if (oldStepIdx == 2) {\n        increaseMagnitude();\n      } else {\n        increaseMagnitude();\n        increaseMagnitude();\n      }\n    } else {\n      //I'm 4, they are 5 per major\n      this.minorStepIdx = 2;\n      if (oldStepIdx == 1) {\n        decreaseMagnitude();\n      } else {\n        decreaseMagnitude();\n        decreaseMagnitude();\n      }\n    }\n\n    //Get masters stats:\n    const otherZero = other.convertValue(0);\n    const otherStep = other.getStep() * other.scale;\n    let done = false;\n    let count = 0;\n    //Loop until magnitude is correct for given constrains.\n    while (!done && count++ < 5) {\n      //Get my stats:\n      this.scale = otherStep / (this.minorSteps[this.minorStepIdx] * this.magnitudefactor);\n      const newRange = this.containerHeight / this.scale;\n\n      //For the case the magnitudefactor has changed:\n      this._start = oldStart;\n      this._end = this._start + newRange;\n      const myOriginalZero = this._end * this.scale;\n      const majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n      const majorOffset = this.getFirstMajor() - other.getFirstMajor();\n      if (this.zeroAlign) {\n        const zeroOffset = otherZero - myOriginalZero;\n        this._end += zeroOffset / this.scale;\n        this._start = this._end - newRange;\n      } else {\n        if (!this.autoScaleStart) {\n          this._start += majorStep - majorOffset / this.scale;\n          this._end = this._start + newRange;\n        } else {\n          this._start -= majorOffset / this.scale;\n          this._end = this._start + newRange;\n        }\n      }\n      if (!this.autoScaleEnd && this._end > oldEnd + 0.00001) {\n        //Need to decrease magnitude to prevent scale overshoot! (end)\n        decreaseMagnitude();\n        done = false;\n        continue;\n      }\n      if (!this.autoScaleStart && this._start < oldStart - 0.00001) {\n        if (this.zeroAlign && oldStart >= 0) {\n          console.warn(\"Can't adhere to given 'min' range, due to zeroalign\");\n        } else {\n          //Need to decrease magnitude to prevent scale overshoot! (start)\n          decreaseMagnitude();\n          done = false;\n          continue;\n        }\n      }\n      if (this.autoScaleStart && this.autoScaleEnd && newRange < oldEnd - oldStart) {\n        increaseMagnitude();\n        done = false;\n        continue;\n      }\n      done = true;\n    }\n  }\n\n  /**\n   * convert value\n   * @param {number} value\n   * @returns {number}\n   */\n  convertValue(value) {\n    return this.containerHeight - (value - this._start) * this.scale;\n  }\n\n  /**\n   * returns screen to value\n   * @param {number} pixels\n   * @returns {number}\n   */\n  screenToValue(pixels) {\n    return (this.containerHeight - pixels) / this.scale + this._start;\n  }\n}\n\n/** A horizontal time axis */\nclass DataAxis extends Component {\n  /**\n   * @param {Object} body\n   * @param {Object} [options]        See DataAxis.setOptions for the available\n   *                                  options.\n   * @param {SVGElement} svg\n   * @param {timeline.LineGraph.options} linegraphOptions\n   * @constructor DataAxis\n   * @extends Component\n   */\n  constructor(body, options, svg, linegraphOptions) {\n    super();\n    this.id = v4();\n    this.body = body;\n    this.defaultOptions = {\n      orientation: \"left\",\n      // supported: 'left', 'right'\n      showMinorLabels: true,\n      showMajorLabels: true,\n      showWeekScale: false,\n      icons: false,\n      majorLinesOffset: 7,\n      minorLinesOffset: 4,\n      labelOffsetX: 10,\n      labelOffsetY: 2,\n      iconWidth: 20,\n      width: \"40px\",\n      visible: true,\n      alignZeros: true,\n      left: {\n        range: {\n          min: undefined,\n          max: undefined\n        },\n        format(value) {\n          return \"\".concat(_parseFloat(value.toPrecision(3)));\n        },\n        title: {\n          text: undefined,\n          style: undefined\n        }\n      },\n      right: {\n        range: {\n          min: undefined,\n          max: undefined\n        },\n        format(value) {\n          return \"\".concat(_parseFloat(value.toPrecision(3)));\n        },\n        title: {\n          text: undefined,\n          style: undefined\n        }\n      }\n    };\n    this.linegraphOptions = linegraphOptions;\n    this.linegraphSVG = svg;\n    this.props = {};\n    this.DOMelements = {\n      // dynamic elements\n      lines: {},\n      labels: {},\n      title: {}\n    };\n    this.dom = {};\n    this.scale = undefined;\n    this.range = {\n      start: 0,\n      end: 0\n    };\n    this.options = availableUtils.extend({}, this.defaultOptions);\n    this.conversionFactor = 1;\n    this.setOptions(options);\n    this.width = Number(\"\".concat(this.options.width).replace(\"px\", \"\"));\n    this.minWidth = this.width;\n    this.height = this.linegraphSVG.getBoundingClientRect().height;\n    this.hidden = false;\n    this.stepPixels = 25;\n    this.zeroCrossing = -1;\n    this.amountOfSteps = -1;\n    this.lineOffset = 0;\n    this.master = true;\n    this.masterAxis = null;\n    this.svgElements = {};\n    this.iconsRemoved = false;\n    this.groups = {};\n    this.amountOfGroups = 0;\n\n    // create the HTML DOM\n    this._create();\n    if (this.scale == undefined) {\n      this._redrawLabels();\n    }\n    this.framework = {\n      svg: this.svg,\n      svgElements: this.svgElements,\n      options: this.options,\n      groups: this.groups\n    };\n    const me = this;\n    this.body.emitter.on(\"verticalDrag\", () => {\n      me.dom.lineContainer.style.top = \"\".concat(me.body.domProps.scrollTop, \"px\");\n    });\n  }\n\n  /**\n   * Adds group to data axis\n   * @param {string} label\n   * @param {object} graphOptions\n   */\n  addGroup(label, graphOptions) {\n    if (!Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      this.groups[label] = graphOptions;\n    }\n    this.amountOfGroups += 1;\n  }\n\n  /**\n   * updates group of data axis\n   * @param {string} label\n   * @param {object} graphOptions\n   */\n  updateGroup(label, graphOptions) {\n    if (!Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      this.amountOfGroups += 1;\n    }\n    this.groups[label] = graphOptions;\n  }\n\n  /**\n   * removes group of data axis\n   * @param {string} label\n   */\n  removeGroup(label) {\n    if (Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      delete this.groups[label];\n      this.amountOfGroups -= 1;\n    }\n  }\n\n  /**\n   * sets options\n   * @param {object} options\n   */\n  setOptions(options) {\n    if (options) {\n      let redraw = false;\n      if (this.options.orientation != options.orientation && options.orientation !== undefined) {\n        redraw = true;\n      }\n      const fields = [\"orientation\", \"showMinorLabels\", \"showMajorLabels\", \"icons\", \"majorLinesOffset\", \"minorLinesOffset\", \"labelOffsetX\", \"labelOffsetY\", \"iconWidth\", \"width\", \"visible\", \"left\", \"right\", \"alignZeros\"];\n      availableUtils.selectiveDeepExtend(fields, this.options, options);\n      this.minWidth = Number(\"\".concat(this.options.width).replace(\"px\", \"\"));\n      if (redraw === true && this.dom.frame) {\n        this.hide();\n        this.show();\n      }\n    }\n  }\n\n  /**\n   * Create the HTML DOM for the DataAxis\n   */\n  _create() {\n    this.dom.frame = document.createElement(\"div\");\n    this.dom.frame.style.width = this.options.width;\n    this.dom.frame.style.height = this.height;\n    this.dom.lineContainer = document.createElement(\"div\");\n    this.dom.lineContainer.style.width = \"100%\";\n    this.dom.lineContainer.style.height = this.height;\n    this.dom.lineContainer.style.position = \"relative\";\n    this.dom.lineContainer.style.visibility = \"visible\";\n    this.dom.lineContainer.style.display = \"block\";\n\n    // create svg element for graph drawing.\n    this.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    this.svg.style.position = \"absolute\";\n    this.svg.style.top = \"0px\";\n    this.svg.style.height = \"100%\";\n    this.svg.style.width = \"100%\";\n    this.svg.style.display = \"block\";\n    this.dom.frame.appendChild(this.svg);\n  }\n\n  /**\n   * redraws groups icons\n   */\n  _redrawGroupIcons() {\n    prepareElements(this.svgElements);\n    let x;\n    const iconWidth = this.options.iconWidth;\n    const iconHeight = 15;\n    const iconOffset = 4;\n    let y = iconOffset + 0.5 * iconHeight;\n    if (this.options.orientation === \"left\") {\n      x = iconOffset;\n    } else {\n      x = this.width - iconWidth - iconOffset;\n    }\n    const groupArray = _Object$keys(this.groups);\n    _sortInstanceProperty(groupArray).call(groupArray, (a, b) => a < b ? -1 : 1);\n    for (const groupId of groupArray) {\n      if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) {\n        this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);\n        y += iconHeight + iconOffset;\n      }\n    }\n    cleanupElements(this.svgElements);\n    this.iconsRemoved = false;\n  }\n\n  /**\n   * Cleans up icons\n   */\n  _cleanupIcons() {\n    if (this.iconsRemoved === false) {\n      prepareElements(this.svgElements);\n      cleanupElements(this.svgElements);\n      this.iconsRemoved = true;\n    }\n  }\n\n  /**\n   * Create the HTML DOM for the DataAxis\n   */\n  show() {\n    this.hidden = false;\n    if (!this.dom.frame.parentNode) {\n      if (this.options.orientation === \"left\") {\n        this.body.dom.left.appendChild(this.dom.frame);\n      } else {\n        this.body.dom.right.appendChild(this.dom.frame);\n      }\n    }\n    if (!this.dom.lineContainer.parentNode) {\n      this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer);\n    }\n    this.dom.lineContainer.style.display = \"block\";\n  }\n\n  /**\n   * Create the HTML DOM for the DataAxis\n   */\n  hide() {\n    this.hidden = true;\n    if (this.dom.frame.parentNode) {\n      this.dom.frame.parentNode.removeChild(this.dom.frame);\n    }\n    this.dom.lineContainer.style.display = \"none\";\n  }\n\n  /**\n   * Set a range (start and end)\n   * @param {number} start\n   * @param {number} end\n   */\n  setRange(start, end) {\n    this.range.start = start;\n    this.range.end = end;\n  }\n\n  /**\n   * Repaint the component\n   * @return {boolean} Returns true if the component is resized\n   */\n  redraw() {\n    let resized = false;\n    let activeGroups = 0;\n\n    // Make sure the line container adheres to the vertical scrolling.\n    this.dom.lineContainer.style.top = \"\".concat(this.body.domProps.scrollTop, \"px\");\n    for (const groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n      if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) activeGroups++;\n    }\n    if (this.amountOfGroups === 0 || activeGroups === 0) {\n      this.hide();\n    } else {\n      this.show();\n      this.height = Number(this.linegraphSVG.style.height.replace(\"px\", \"\"));\n\n      // svg offsetheight did not work in firefox and explorer...\n      this.dom.lineContainer.style.height = \"\".concat(this.height, \"px\");\n      this.width = this.options.visible === true ? Number(\"\".concat(this.options.width).replace(\"px\", \"\")) : 0;\n      const props = this.props;\n      const frame = this.dom.frame;\n\n      // update classname\n      frame.className = \"vis-data-axis\";\n\n      // calculate character width and height\n      this._calculateCharSize();\n      const orientation = this.options.orientation;\n      const showMinorLabels = this.options.showMinorLabels;\n      const showMajorLabels = this.options.showMajorLabels;\n      const backgroundHorizontalOffsetWidth = this.body.dom.backgroundHorizontal.offsetWidth;\n\n      // determine the width and height of the elements for the axis\n      props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n      props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n      props.minorLineWidth = backgroundHorizontalOffsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset;\n      props.minorLineHeight = 1;\n      props.majorLineWidth = backgroundHorizontalOffsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset;\n      props.majorLineHeight = 1;\n\n      //  take frame offline while updating (is almost twice as fast)\n      if (orientation === \"left\") {\n        frame.style.top = \"0\";\n        frame.style.left = \"0\";\n        frame.style.bottom = \"\";\n        frame.style.width = \"\".concat(this.width, \"px\");\n        frame.style.height = \"\".concat(this.height, \"px\");\n        this.props.width = this.body.domProps.left.width;\n        this.props.height = this.body.domProps.left.height;\n      } else {\n        // right\n        frame.style.top = \"\";\n        frame.style.bottom = \"0\";\n        frame.style.left = \"0\";\n        frame.style.width = \"\".concat(this.width, \"px\");\n        frame.style.height = \"\".concat(this.height, \"px\");\n        this.props.width = this.body.domProps.right.width;\n        this.props.height = this.body.domProps.right.height;\n      }\n      resized = this._redrawLabels();\n      resized = this._isResized() || resized;\n      if (this.options.icons === true) {\n        this._redrawGroupIcons();\n      } else {\n        this._cleanupIcons();\n      }\n      this._redrawTitle(orientation);\n    }\n    return resized;\n  }\n\n  /**\n   * Repaint major and minor text labels and vertical grid lines\n   *\n   * @returns {boolean}\n   * @private\n   */\n  _redrawLabels() {\n    let resized = false;\n    prepareElements(this.DOMelements.lines);\n    prepareElements(this.DOMelements.labels);\n    const orientation = this.options[\"orientation\"];\n    const customRange = this.options[orientation].range != undefined ? this.options[orientation].range : {};\n\n    //Override range with manual options:\n    let autoScaleEnd = true;\n    if (customRange.max != undefined) {\n      this.range.end = customRange.max;\n      autoScaleEnd = false;\n    }\n    let autoScaleStart = true;\n    if (customRange.min != undefined) {\n      this.range.start = customRange.min;\n      autoScaleStart = false;\n    }\n    this.scale = new DataScale(this.range.start, this.range.end, autoScaleStart, autoScaleEnd, this.dom.frame.offsetHeight, this.props.majorCharHeight, this.options.alignZeros, this.options[orientation].format);\n    if (this.master === false && this.masterAxis != undefined) {\n      this.scale.followScale(this.masterAxis.scale);\n      this.dom.lineContainer.style.display = \"none\";\n    } else {\n      this.dom.lineContainer.style.display = \"block\";\n    }\n\n    //Is updated in side-effect of _redrawLabel():\n    this.maxLabelSize = 0;\n    const lines = this.scale.getLines();\n    _forEachInstanceProperty(lines).call(lines, line => {\n      const y = line.y;\n      const isMajor = line.major;\n      if (this.options[\"showMinorLabels\"] && isMajor === false) {\n        this._redrawLabel(y - 2, line.val, orientation, \"vis-y-axis vis-minor\", this.props.minorCharHeight);\n      }\n      if (isMajor) {\n        if (y >= 0) {\n          this._redrawLabel(y - 2, line.val, orientation, \"vis-y-axis vis-major\", this.props.majorCharHeight);\n        }\n      }\n      if (this.master === true) {\n        if (isMajor) {\n          this._redrawLine(y, orientation, \"vis-grid vis-horizontal vis-major\", this.options.majorLinesOffset, this.props.majorLineWidth);\n        } else {\n          this._redrawLine(y, orientation, \"vis-grid vis-horizontal vis-minor\", this.options.minorLinesOffset, this.props.minorLineWidth);\n        }\n      }\n    });\n\n    // Note that title is rotated, so we're using the height, not width!\n    let titleWidth = 0;\n    if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {\n      titleWidth = this.props.titleCharHeight;\n    }\n    const offset = this.options.icons === true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15;\n\n    // this will resize the yAxis to accommodate the labels.\n    if (this.maxLabelSize > this.width - offset && this.options.visible === true) {\n      this.width = this.maxLabelSize + offset;\n      this.options.width = \"\".concat(this.width, \"px\");\n      cleanupElements(this.DOMelements.lines);\n      cleanupElements(this.DOMelements.labels);\n      this.redraw();\n      resized = true;\n    }\n    // this will resize the yAxis if it is too big for the labels.\n    else if (this.maxLabelSize < this.width - offset && this.options.visible === true && this.width > this.minWidth) {\n      this.width = Math.max(this.minWidth, this.maxLabelSize + offset);\n      this.options.width = \"\".concat(this.width, \"px\");\n      cleanupElements(this.DOMelements.lines);\n      cleanupElements(this.DOMelements.labels);\n      this.redraw();\n      resized = true;\n    } else {\n      cleanupElements(this.DOMelements.lines);\n      cleanupElements(this.DOMelements.labels);\n      resized = false;\n    }\n    return resized;\n  }\n\n  /**\n   * converts value\n   * @param {number} value\n   * @returns {number} converted number\n   */\n  convertValue(value) {\n    return this.scale.convertValue(value);\n  }\n\n  /**\n   * converts value\n   * @param {number} x\n   * @returns {number} screen value\n   */\n  screenToValue(x) {\n    return this.scale.screenToValue(x);\n  }\n\n  /**\n   * Create a label for the axis at position x\n   *\n   * @param {number} y\n   * @param {string} text\n   * @param {'top'|'right'|'bottom'|'left'} orientation\n   * @param {string} className\n   * @param {number} characterHeight\n   * @private\n   */\n  _redrawLabel(y, text, orientation, className, characterHeight) {\n    // reuse redundant label\n    const label = getDOMElement(\"div\", this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift();\n    label.className = className;\n    label.innerHTML = availableUtils.xss(text);\n    if (orientation === \"left\") {\n      label.style.left = \"-\".concat(this.options.labelOffsetX, \"px\");\n      label.style.textAlign = \"right\";\n    } else {\n      label.style.right = \"-\".concat(this.options.labelOffsetX, \"px\");\n      label.style.textAlign = \"left\";\n    }\n    label.style.top = \"\".concat(y - 0.5 * characterHeight + this.options.labelOffsetY, \"px\");\n    text += \"\";\n    const largestWidth = Math.max(this.props.majorCharWidth, this.props.minorCharWidth);\n    if (this.maxLabelSize < text.length * largestWidth) {\n      this.maxLabelSize = text.length * largestWidth;\n    }\n  }\n\n  /**\n   * Create a minor line for the axis at position y\n   * @param {number} y\n   * @param {'top'|'right'|'bottom'|'left'} orientation\n   * @param {string} className\n   * @param {number} offset\n   * @param {number} width\n   */\n  _redrawLine(y, orientation, className, offset, width) {\n    if (this.master === true) {\n      const line = getDOMElement(\"div\", this.DOMelements.lines, this.dom.lineContainer); //this.dom.redundant.lines.shift();\n      line.className = className;\n      line.innerHTML = \"\";\n      if (orientation === \"left\") {\n        line.style.left = \"\".concat(this.width - offset, \"px\");\n      } else {\n        line.style.right = \"\".concat(this.width - offset, \"px\");\n      }\n      line.style.width = \"\".concat(width, \"px\");\n      line.style.top = \"\".concat(y, \"px\");\n    }\n  }\n\n  /**\n   * Create a title for the axis\n   * @private\n   * @param {'top'|'right'|'bottom'|'left'} orientation\n   */\n  _redrawTitle(orientation) {\n    prepareElements(this.DOMelements.title);\n\n    // Check if the title is defined for this axes\n    if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {\n      const title = getDOMElement(\"div\", this.DOMelements.title, this.dom.frame);\n      title.className = \"vis-y-axis vis-title vis-\".concat(orientation);\n      title.innerHTML = availableUtils.xss(this.options[orientation].title.text);\n\n      // Add style - if provided\n      if (this.options[orientation].title.style !== undefined) {\n        availableUtils.addCssText(title, this.options[orientation].title.style);\n      }\n      if (orientation === \"left\") {\n        title.style.left = \"\".concat(this.props.titleCharHeight, \"px\");\n      } else {\n        title.style.right = \"\".concat(this.props.titleCharHeight, \"px\");\n      }\n      title.style.width = \"\".concat(this.height, \"px\");\n    }\n\n    // we need to clean up in case we did not use all elements.\n    cleanupElements(this.DOMelements.title);\n  }\n\n  /**\n   * Determine the size of text on the axis (both major and minor axis).\n   * The size is calculated only once and then cached in this.props.\n   * @private\n   */\n  _calculateCharSize() {\n    // determine the char width and height on the minor axis\n    if (!(\"minorCharHeight\" in this.props)) {\n      const textMinor = document.createTextNode(\"0\");\n      const measureCharMinor = document.createElement(\"div\");\n      measureCharMinor.className = \"vis-y-axis vis-minor vis-measure\";\n      measureCharMinor.appendChild(textMinor);\n      this.dom.frame.appendChild(measureCharMinor);\n      this.props.minorCharHeight = measureCharMinor.clientHeight;\n      this.props.minorCharWidth = measureCharMinor.clientWidth;\n      this.dom.frame.removeChild(measureCharMinor);\n    }\n    if (!(\"majorCharHeight\" in this.props)) {\n      const textMajor = document.createTextNode(\"0\");\n      const measureCharMajor = document.createElement(\"div\");\n      measureCharMajor.className = \"vis-y-axis vis-major vis-measure\";\n      measureCharMajor.appendChild(textMajor);\n      this.dom.frame.appendChild(measureCharMajor);\n      this.props.majorCharHeight = measureCharMajor.clientHeight;\n      this.props.majorCharWidth = measureCharMajor.clientWidth;\n      this.dom.frame.removeChild(measureCharMajor);\n    }\n    if (!(\"titleCharHeight\" in this.props)) {\n      const textTitle = document.createTextNode(\"0\");\n      const measureCharTitle = document.createElement(\"div\");\n      measureCharTitle.className = \"vis-y-axis vis-title vis-measure\";\n      measureCharTitle.appendChild(textTitle);\n      this.dom.frame.appendChild(measureCharTitle);\n      this.props.titleCharHeight = measureCharTitle.clientHeight;\n      this.props.titleCharWidth = measureCharTitle.clientWidth;\n      this.dom.frame.removeChild(measureCharTitle);\n    }\n  }\n}\n\n/**\n *\n *\n * @constructor Points\n */\nfunction Points() {}\n\n/**\n * draw the data points\n *\n * @param {Array} dataset\n * @param {GraphGroup} group\n * @param {Object} framework            | SVG DOM element\n * @param {number} [offset]\n */\nPoints.draw = function (dataset, group, framework, offset) {\n  offset = offset || 0;\n  var callback = getCallback(framework, group);\n  for (var i = 0; i < dataset.length; i++) {\n    if (!callback) {\n      // draw the point the simple way.\n      drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group), framework.svgElements, framework.svg, dataset[i].label);\n    } else {\n      var callbackResult = callback(dataset[i], group); // result might be true, false or an object\n      if (callbackResult === true || typeof callbackResult === \"object\") {\n        drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group, callbackResult), framework.svgElements, framework.svg, dataset[i].label);\n      }\n    }\n  }\n};\nPoints.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var outline = getSVGElement(\"rect\", framework.svgElements, framework.svg);\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  //Don't call callback on icon\n  drawPoint(x + 0.5 * iconWidth, y, getGroupTemplate(group), framework.svgElements, framework.svg);\n};\n\n/**\n *\n * @param {vis.Group} group\n * @param {any} callbackResult\n * @returns {{style: *, styles: (*|string), size: *, className: *}}\n */\nfunction getGroupTemplate(group, callbackResult) {\n  callbackResult = typeof callbackResult === \"undefined\" ? {} : callbackResult;\n  return {\n    style: callbackResult.style || group.options.drawPoints.style,\n    styles: callbackResult.styles || group.options.drawPoints.styles,\n    size: callbackResult.size || group.options.drawPoints.size,\n    className: callbackResult.className || group.className\n  };\n}\n\n/**\n *\n * @param {Object} framework            | SVG DOM element\n * @param {vis.Group} group\n * @returns {function}\n */\nfunction getCallback(framework, group) {\n  var callback = undefined;\n  // check for the graph2d onRender\n  if (framework.options && framework.options.drawPoints && framework.options.drawPoints.onRender && typeof framework.options.drawPoints.onRender == \"function\") {\n    callback = framework.options.drawPoints.onRender;\n  }\n\n  // override it with the group onRender if defined\n  if (group.group.options && group.group.options.drawPoints && group.group.options.drawPoints.onRender && typeof group.group.options.drawPoints.onRender == \"function\") {\n    callback = group.group.options.drawPoints.onRender;\n  }\n  return callback;\n}\n\n/**\n *\n * @constructor Bargraph\n */\nfunction Bargraph() {}\nBargraph.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var outline = getSVGElement(\"rect\", framework.svgElements, framework.svg);\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n  var barWidth = Math.round(0.3 * iconWidth);\n  var originalWidth = group.options.barChart.width;\n  var scale = originalWidth / barWidth;\n  var bar1Height = Math.round(0.4 * iconHeight);\n  var bar2Height = Math.round(0.75 * iconHeight);\n  var offset = Math.round((iconWidth - 2 * barWidth) / 3);\n  drawBar(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, barWidth, bar1Height, group.className + \" vis-bar\", framework.svgElements, framework.svg, group.style);\n  drawBar(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, group.className + \" vis-bar\", framework.svgElements, framework.svg, group.style);\n  if (group.options.drawPoints.enabled == true) {\n    var groupTemplate = {\n      style: group.options.drawPoints.style,\n      styles: group.options.drawPoints.styles,\n      size: group.options.drawPoints.size / scale,\n      className: group.className\n    };\n    drawPoint(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, groupTemplate, framework.svgElements, framework.svg);\n    drawPoint(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, groupTemplate, framework.svgElements, framework.svg);\n  }\n};\n\n/**\n * draw a bar graph\n *\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {Object} processedGroupData\n * @param {{svg: Object, svgElements: Array.<Object>, options: Object, groups: Array.<vis.Group>}} framework\n */\nBargraph.draw = function (groupIds, processedGroupData, framework) {\n  var combinedData = [];\n  var intersections = {};\n  var coreDistance;\n  var key, drawData;\n  var group;\n  var i, j;\n  var barPoints = 0;\n\n  // combine all barchart data\n  for (i = 0; i < groupIds.length; i++) {\n    group = framework.groups[groupIds[i]];\n    if (group.options.style === \"bar\") {\n      if (group.visible === true && (framework.options.groups.visibility[groupIds[i]] === undefined || framework.options.groups.visibility[groupIds[i]] === true)) {\n        for (j = 0; j < processedGroupData[groupIds[i]].length; j++) {\n          combinedData.push({\n            screen_x: processedGroupData[groupIds[i]][j].screen_x,\n            screen_end: processedGroupData[groupIds[i]][j].screen_end,\n            screen_y: processedGroupData[groupIds[i]][j].screen_y,\n            x: processedGroupData[groupIds[i]][j].x,\n            end: processedGroupData[groupIds[i]][j].end,\n            y: processedGroupData[groupIds[i]][j].y,\n            groupId: groupIds[i],\n            label: processedGroupData[groupIds[i]][j].label\n          });\n          barPoints += 1;\n        }\n      }\n    }\n  }\n  if (barPoints === 0) {\n    return;\n  }\n\n  // sort by time and by group\n  _sortInstanceProperty(combinedData).call(combinedData, function (a, b) {\n    if (a.screen_x === b.screen_x) {\n      return a.groupId < b.groupId ? -1 : 1;\n    } else {\n      return a.screen_x - b.screen_x;\n    }\n  });\n\n  // get intersections\n  Bargraph._getDataIntersections(intersections, combinedData);\n\n  // plot barchart\n  for (i = 0; i < combinedData.length; i++) {\n    group = framework.groups[combinedData[i].groupId];\n    var minWidth = group.options.barChart.minWidth != undefined ? group.options.barChart.minWidth : 0.1 * group.options.barChart.width;\n    key = combinedData[i].screen_x;\n    var heightOffset = 0;\n    if (intersections[key] === undefined) {\n      if (i + 1 < combinedData.length) {\n        coreDistance = Math.abs(combinedData[i + 1].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n    } else {\n      var nextKey = i + (intersections[key].amount - intersections[key].resolved);\n      if (nextKey < combinedData.length) {\n        coreDistance = Math.abs(combinedData[nextKey].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n      intersections[key].resolved += 1;\n      if (group.options.stack === true && group.options.excludeFromStacking !== true) {\n        if (combinedData[i].screen_y < group.zeroPosition) {\n          heightOffset = intersections[key].accumulatedNegative;\n          intersections[key].accumulatedNegative += group.zeroPosition - combinedData[i].screen_y;\n        } else {\n          heightOffset = intersections[key].accumulatedPositive;\n          intersections[key].accumulatedPositive += group.zeroPosition - combinedData[i].screen_y;\n        }\n      } else if (group.options.barChart.sideBySide === true) {\n        drawData.width = drawData.width / intersections[key].amount;\n        drawData.offset += intersections[key].resolved * drawData.width - 0.5 * drawData.width * (intersections[key].amount + 1);\n      }\n    }\n    let dataWidth = drawData.width;\n    let start = combinedData[i].screen_x;\n\n    // are we drawing explicit boxes? (we supplied an end value)\n    if (combinedData[i].screen_end != undefined) {\n      dataWidth = combinedData[i].screen_end - combinedData[i].screen_x;\n      start += dataWidth * 0.5;\n    } else {\n      start += drawData.offset;\n    }\n    drawBar(start, combinedData[i].screen_y - heightOffset, dataWidth, group.zeroPosition - combinedData[i].screen_y, group.className + \" vis-bar\", framework.svgElements, framework.svg, group.style);\n\n    // draw points\n    if (group.options.drawPoints.enabled === true) {\n      let pointData = {\n        screen_x: combinedData[i].screen_x,\n        screen_y: combinedData[i].screen_y - heightOffset,\n        x: combinedData[i].x,\n        y: combinedData[i].y,\n        groupId: combinedData[i].groupId,\n        label: combinedData[i].label\n      };\n      Points.draw([pointData], group, framework, drawData.offset);\n      //DOMutil.drawPoint(combinedData[i].x + drawData.offset, combinedData[i].y, group, framework.svgElements, framework.svg);\n    }\n  }\n};\n\n/**\n * Fill the intersections object with counters of how many datapoints share the same x coordinates\n * @param {Object} intersections\n * @param {Array.<Object>} combinedData\n * @private\n */\nBargraph._getDataIntersections = function (intersections, combinedData) {\n  // get intersections\n  var coreDistance;\n  for (var i = 0; i < combinedData.length; i++) {\n    if (i + 1 < combinedData.length) {\n      coreDistance = Math.abs(combinedData[i + 1].screen_x - combinedData[i].screen_x);\n    }\n    if (i > 0) {\n      coreDistance = Math.min(coreDistance, Math.abs(combinedData[i - 1].screen_x - combinedData[i].screen_x));\n    }\n    if (coreDistance === 0) {\n      if (intersections[combinedData[i].screen_x] === undefined) {\n        intersections[combinedData[i].screen_x] = {\n          amount: 0,\n          resolved: 0,\n          accumulatedPositive: 0,\n          accumulatedNegative: 0\n        };\n      }\n      intersections[combinedData[i].screen_x].amount += 1;\n    }\n  }\n};\n\n/**\n * Get the width and offset for bargraphs based on the coredistance between datapoints\n *\n * @param {number} coreDistance\n * @param {vis.Group} group\n * @param {number} minWidth\n * @returns {{width: number, offset: number}}\n * @private\n */\nBargraph._getSafeDrawData = function (coreDistance, group, minWidth) {\n  var width, offset;\n  if (coreDistance < group.options.barChart.width && coreDistance > 0) {\n    width = coreDistance < minWidth ? minWidth : coreDistance;\n    offset = 0; // recalculate offset with the new width;\n    if (group.options.barChart.align === \"left\") {\n      offset -= 0.5 * coreDistance;\n    } else if (group.options.barChart.align === \"right\") {\n      offset += 0.5 * coreDistance;\n    }\n  } else {\n    // default settings\n    width = group.options.barChart.width;\n    offset = 0;\n    if (group.options.barChart.align === \"left\") {\n      offset -= 0.5 * group.options.barChart.width;\n    } else if (group.options.barChart.align === \"right\") {\n      offset += 0.5 * group.options.barChart.width;\n    }\n  }\n  return {\n    width: width,\n    offset: offset\n  };\n};\nBargraph.getStackedYRange = function (combinedData, groupRanges, groupIds, groupLabel, orientation) {\n  if (combinedData.length > 0) {\n    // sort by time and by group\n    _sortInstanceProperty(combinedData).call(combinedData, function (a, b) {\n      if (a.screen_x === b.screen_x) {\n        return a.groupId < b.groupId ? -1 : 1;\n      } else {\n        return a.screen_x - b.screen_x;\n      }\n    });\n    var intersections = {};\n    Bargraph._getDataIntersections(intersections, combinedData);\n    groupRanges[groupLabel] = Bargraph._getStackedYRange(intersections, combinedData);\n    groupRanges[groupLabel].yAxisOrientation = orientation;\n    groupIds.push(groupLabel);\n  }\n};\nBargraph._getStackedYRange = function (intersections, combinedData) {\n  var key;\n  var yMin = combinedData[0].screen_y;\n  var yMax = combinedData[0].screen_y;\n  for (var i = 0; i < combinedData.length; i++) {\n    key = combinedData[i].screen_x;\n    if (intersections[key] === undefined) {\n      yMin = yMin > combinedData[i].screen_y ? combinedData[i].screen_y : yMin;\n      yMax = yMax < combinedData[i].screen_y ? combinedData[i].screen_y : yMax;\n    } else {\n      if (combinedData[i].screen_y < 0) {\n        intersections[key].accumulatedNegative += combinedData[i].screen_y;\n      } else {\n        intersections[key].accumulatedPositive += combinedData[i].screen_y;\n      }\n    }\n  }\n  for (var xpos in intersections) {\n    if (!Object.prototype.hasOwnProperty.call(intersections, xpos)) continue;\n    yMin = yMin > intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMin;\n    yMin = yMin > intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMin;\n    yMax = yMax < intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMax;\n    yMax = yMax < intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMax;\n  }\n  return {\n    min: yMin,\n    max: yMax\n  };\n};\n\n/**\n *\n * @constructor Line\n */\nfunction Line() {}\nLine.calcPath = function (dataset, group) {\n  if (dataset != null) {\n    if (dataset.length > 0) {\n      var d = [];\n\n      // construct path from dataset\n      if (group.options.interpolation.enabled == true) {\n        d = Line._catmullRom(dataset, group);\n      } else {\n        d = Line._linear(dataset);\n      }\n      return d;\n    }\n  }\n};\nLine.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var path, fillPath;\n  var outline = getSVGElement(\"rect\", framework.svgElements, framework.svg);\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n  path = getSVGElement(\"path\", framework.svgElements, framework.svg);\n  path.setAttributeNS(null, \"class\", group.className);\n  if (group.style !== undefined) {\n    path.setAttributeNS(null, \"style\", group.style);\n  }\n  path.setAttributeNS(null, \"d\", \"M\" + x + \",\" + y + \" L\" + (x + iconWidth) + \",\" + y + \"\");\n  if (group.options.shaded.enabled == true) {\n    fillPath = getSVGElement(\"path\", framework.svgElements, framework.svg);\n    if (group.options.shaded.orientation == \"top\") {\n      fillPath.setAttributeNS(null, \"d\", \"M\" + x + \", \" + (y - fillHeight) + \"L\" + x + \",\" + y + \" L\" + (x + iconWidth) + \",\" + y + \" L\" + (x + iconWidth) + \",\" + (y - fillHeight));\n    } else {\n      fillPath.setAttributeNS(null, \"d\", \"M\" + x + \",\" + y + \" \" + \"L\" + x + \",\" + (y + fillHeight) + \" \" + \"L\" + (x + iconWidth) + \",\" + (y + fillHeight) + \"L\" + (x + iconWidth) + \",\" + y);\n    }\n    fillPath.setAttributeNS(null, \"class\", group.className + \" vis-icon-fill\");\n    if (group.options.shaded.style !== undefined && group.options.shaded.style !== \"\") {\n      fillPath.setAttributeNS(null, \"style\", group.options.shaded.style);\n    }\n  }\n  if (group.options.drawPoints.enabled == true) {\n    var groupTemplate = {\n      style: group.options.drawPoints.style,\n      styles: group.options.drawPoints.styles,\n      size: group.options.drawPoints.size,\n      className: group.className\n    };\n    drawPoint(x + 0.5 * iconWidth, y, groupTemplate, framework.svgElements, framework.svg);\n  }\n};\nLine.drawShading = function (pathArray, group, subPathArray, framework) {\n  // append shading to the path\n  if (group.options.shaded.enabled == true) {\n    var svgHeight = Number(framework.svg.style.height.replace(\"px\", \"\"));\n    var fillPath = getSVGElement(\"path\", framework.svgElements, framework.svg);\n    var type = \"L\";\n    if (group.options.interpolation.enabled == true) {\n      type = \"C\";\n    }\n    var dFill;\n    var zero = 0;\n    if (group.options.shaded.orientation == \"top\") {\n      zero = 0;\n    } else if (group.options.shaded.orientation == \"bottom\") {\n      zero = svgHeight;\n    } else {\n      zero = Math.min(Math.max(0, group.zeroPosition), svgHeight);\n    }\n    if (group.options.shaded.orientation == \"group\" && subPathArray != null && subPathArray != undefined) {\n      dFill = \"M\" + pathArray[0][0] + \",\" + pathArray[0][1] + \" \" + this.serializePath(pathArray, type, false) + \" L\" + subPathArray[subPathArray.length - 1][0] + \",\" + subPathArray[subPathArray.length - 1][1] + \" \" + this.serializePath(subPathArray, type, true) + subPathArray[0][0] + \",\" + subPathArray[0][1] + \" Z\";\n    } else {\n      dFill = \"M\" + pathArray[0][0] + \",\" + pathArray[0][1] + \" \" + this.serializePath(pathArray, type, false) + \" V\" + zero + \" H\" + pathArray[0][0] + \" Z\";\n    }\n    fillPath.setAttributeNS(null, \"class\", group.className + \" vis-fill\");\n    if (group.options.shaded.style !== undefined) {\n      fillPath.setAttributeNS(null, \"style\", group.options.shaded.style);\n    }\n    fillPath.setAttributeNS(null, \"d\", dFill);\n  }\n};\n\n/**\n * draw a line graph\n *\n * @param {Array.<Object>} pathArray\n * @param {vis.Group} group\n * @param {{svg: Object, svgElements: Array.<Object>, options: Object, groups: Array.<vis.Group>}} framework\n */\nLine.draw = function (pathArray, group, framework) {\n  if (pathArray != null && pathArray != undefined) {\n    var path = getSVGElement(\"path\", framework.svgElements, framework.svg);\n    path.setAttributeNS(null, \"class\", group.className);\n    if (group.style !== undefined) {\n      path.setAttributeNS(null, \"style\", group.style);\n    }\n    var type = \"L\";\n    if (group.options.interpolation.enabled == true) {\n      type = \"C\";\n    }\n    // copy properties to path for drawing.\n    path.setAttributeNS(null, \"d\", \"M\" + pathArray[0][0] + \",\" + pathArray[0][1] + \" \" + this.serializePath(pathArray, type, false));\n  }\n};\nLine.serializePath = function (pathArray, type, inverse) {\n  if (pathArray.length < 2) {\n    //Too little data to create a path.\n    return \"\";\n  }\n  var d = type;\n  var i;\n  if (inverse) {\n    for (i = pathArray.length - 2; i > 0; i--) {\n      d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n    }\n  } else {\n    for (i = 1; i < pathArray.length; i++) {\n      d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n    }\n  }\n  return d;\n};\n\n/**\n * This uses an uniform parametrization of the interpolation algorithm:\n * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al.\n * @param {Array.<Object>} data\n * @returns {string}\n * @private\n */\nLine._catmullRomUniform = function (data) {\n  // catmull rom\n  var p0, p1, p2, p3, bp1, bp2;\n  var d = [];\n  d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]);\n  var normalization = 1 / 6;\n  var length = data.length;\n  for (var i = 0; i < length - 1; i++) {\n    p0 = i == 0 ? data[0] : data[i - 1];\n    p1 = data[i];\n    p2 = data[i + 1];\n    p3 = i + 2 < length ? data[i + 2] : p2;\n\n    // Catmull-Rom to Cubic Bezier conversion matrix\n    //    0       1       0       0\n    //  -1/6      1      1/6      0\n    //    0      1/6      1     -1/6\n    //    0       0       1       0\n\n    //    bp0 = { x: p1.x,                               y: p1.y };\n    bp1 = {\n      screen_x: (-p0.screen_x + 6 * p1.screen_x + p2.screen_x) * normalization,\n      screen_y: (-p0.screen_y + 6 * p1.screen_y + p2.screen_y) * normalization\n    };\n    bp2 = {\n      screen_x: (p1.screen_x + 6 * p2.screen_x - p3.screen_x) * normalization,\n      screen_y: (p1.screen_y + 6 * p2.screen_y - p3.screen_y) * normalization\n    };\n    //    bp0 = { x: p2.x,                               y: p2.y };\n\n    d.push([bp1.screen_x, bp1.screen_y]);\n    d.push([bp2.screen_x, bp2.screen_y]);\n    d.push([p2.screen_x, p2.screen_y]);\n  }\n  return d;\n};\n\n/**\n * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm.\n * By default, the centripetal parameterization is used because this gives the nicest results.\n * These parameterizations are relatively heavy because the distance between 4 points have to be calculated.\n *\n * One optimization can be used to reuse distances since this is a sliding window approach.\n * @param {Array.<Object>} data\n * @param {vis.GraphGroup} group\n * @returns {string}\n * @private\n */\nLine._catmullRom = function (data, group) {\n  var alpha = group.options.interpolation.alpha;\n  if (alpha == 0 || alpha === undefined) {\n    return this._catmullRomUniform(data);\n  } else {\n    var p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n    var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n    var d = [];\n    d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]);\n    var length = data.length;\n    for (var i = 0; i < length - 1; i++) {\n      p0 = i == 0 ? data[0] : data[i - 1];\n      p1 = data[i];\n      p2 = data[i + 1];\n      p3 = i + 2 < length ? data[i + 2] : p2;\n      d1 = Math.sqrt(Math.pow(p0.screen_x - p1.screen_x, 2) + Math.pow(p0.screen_y - p1.screen_y, 2));\n      d2 = Math.sqrt(Math.pow(p1.screen_x - p2.screen_x, 2) + Math.pow(p1.screen_y - p2.screen_y, 2));\n      d3 = Math.sqrt(Math.pow(p2.screen_x - p3.screen_x, 2) + Math.pow(p2.screen_y - p3.screen_y, 2));\n\n      // Catmull-Rom to Cubic Bezier conversion matrix\n\n      // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n      // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n\n      // [   0             1            0          0          ]\n      // [   -d2^2a /N     A/N          d1^2a /N   0          ]\n      // [   0             d3^2a /M     B/M        -d2^2a /M  ]\n      // [   0             0            1          0          ]\n\n      d3powA = Math.pow(d3, alpha);\n      d3pow2A = Math.pow(d3, 2 * alpha);\n      d2powA = Math.pow(d2, alpha);\n      d2pow2A = Math.pow(d2, 2 * alpha);\n      d1powA = Math.pow(d1, alpha);\n      d1pow2A = Math.pow(d1, 2 * alpha);\n      A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n      B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n      N = 3 * d1powA * (d1powA + d2powA);\n      if (N > 0) {\n        N = 1 / N;\n      }\n      M = 3 * d3powA * (d3powA + d2powA);\n      if (M > 0) {\n        M = 1 / M;\n      }\n      bp1 = {\n        screen_x: (-d2pow2A * p0.screen_x + A * p1.screen_x + d1pow2A * p2.screen_x) * N,\n        screen_y: (-d2pow2A * p0.screen_y + A * p1.screen_y + d1pow2A * p2.screen_y) * N\n      };\n      bp2 = {\n        screen_x: (d3pow2A * p1.screen_x + B * p2.screen_x - d2pow2A * p3.screen_x) * M,\n        screen_y: (d3pow2A * p1.screen_y + B * p2.screen_y - d2pow2A * p3.screen_y) * M\n      };\n      if (bp1.screen_x == 0 && bp1.screen_y == 0) {\n        bp1 = p1;\n      }\n      if (bp2.screen_x == 0 && bp2.screen_y == 0) {\n        bp2 = p2;\n      }\n      d.push([bp1.screen_x, bp1.screen_y]);\n      d.push([bp2.screen_x, bp2.screen_y]);\n      d.push([p2.screen_x, p2.screen_y]);\n    }\n    return d;\n  }\n};\n\n/**\n * this generates the SVG path for a linear drawing between datapoints.\n * @param {Array.<Object>} data\n * @returns {string}\n * @private\n */\nLine._linear = function (data) {\n  // linear\n  var d = [];\n  for (var i = 0; i < data.length; i++) {\n    d.push([data[i].screen_x, data[i].screen_y]);\n  }\n  return d;\n};\n\n/**\n * /**\n * @param {object} group            | the object of the group from the dataset\n * @param {string} groupId          | ID of the group\n * @param {object} options          | the default options\n * @param {array} groupsUsingDefaultStyles  | this array has one entree.\n *                                            It is passed as an array so it is passed by reference.\n *                                            It enumerates through the default styles\n * @constructor GraphGroup\n */\nfunction GraphGroup(group, groupId, options, groupsUsingDefaultStyles) {\n  this.id = groupId;\n  var fields = [\"sampling\", \"style\", \"sort\", \"yAxisOrientation\", \"barChart\", \"drawPoints\", \"shaded\", \"interpolation\", \"zIndex\", \"excludeFromStacking\", \"excludeFromLegend\"];\n  this.options = availableUtils.selectiveBridgeObject(fields, options);\n  this.usingDefaultStyle = group.className === undefined;\n  this.groupsUsingDefaultStyles = groupsUsingDefaultStyles;\n  this.zeroPosition = 0;\n  this.update(group);\n  if (this.usingDefaultStyle == true) {\n    this.groupsUsingDefaultStyles[0] += 1;\n  }\n  this.itemsData = [];\n  this.visible = group.visible === undefined ? true : group.visible;\n}\n\n/**\n * this loads a reference to all items in this group into this group.\n * @param {array} items\n */\nGraphGroup.prototype.setItems = function (items) {\n  if (items != null) {\n    this.itemsData = items;\n    if (_sortInstanceProperty(this.options) == true) {\n      availableUtils.insertSort(this.itemsData, function (a, b) {\n        return a.x > b.x ? 1 : -1;\n      });\n    }\n  } else {\n    this.itemsData = [];\n  }\n};\nGraphGroup.prototype.getItems = function () {\n  return this.itemsData;\n};\n\n/**\n * this is used for barcharts and shading, this way, we only have to calculate it once.\n * @param {number} pos\n */\nGraphGroup.prototype.setZeroPosition = function (pos) {\n  this.zeroPosition = pos;\n};\n\n/**\n * set the options of the graph group over the default options.\n * @param {Object} options\n */\nGraphGroup.prototype.setOptions = function (options) {\n  if (options !== undefined) {\n    var fields = [\"sampling\", \"style\", \"sort\", \"yAxisOrientation\", \"barChart\", \"zIndex\", \"excludeFromStacking\", \"excludeFromLegend\"];\n    availableUtils.selectiveDeepExtend(fields, this.options, options);\n\n    // if the group's drawPoints is a function delegate the callback to the onRender property\n    if (typeof options.drawPoints == \"function\") {\n      options.drawPoints = {\n        onRender: options.drawPoints\n      };\n    }\n    availableUtils.mergeOptions(this.options, options, \"interpolation\");\n    availableUtils.mergeOptions(this.options, options, \"drawPoints\");\n    availableUtils.mergeOptions(this.options, options, \"shaded\");\n    if (options.interpolation) {\n      if (typeof options.interpolation == \"object\") {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == \"uniform\") {\n            this.options.interpolation.alpha = 0;\n          } else if (options.interpolation.parametrization == \"chordal\") {\n            this.options.interpolation.alpha = 1.0;\n          } else {\n            this.options.interpolation.parametrization = \"centripetal\";\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n  }\n};\n\n/**\n * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph\n * @param {vis.Group} group\n */\nGraphGroup.prototype.update = function (group) {\n  this.group = group;\n  this.content = group.content || \"graph\";\n  this.className = group.className || this.className || \"vis-graph-group\" + this.groupsUsingDefaultStyles[0] % 10;\n  this.visible = group.visible === undefined ? true : group.visible;\n  this.style = group.style;\n  this.setOptions(group.options);\n};\n\n/**\n * return the legend entree for this group.\n *\n * @param {number} iconWidth\n * @param {number} iconHeight\n * @param {{svg: (*|Element), svgElements: Object, options: Object, groups: Array.<Object>}} framework\n * @param {number} x\n * @param {number} y\n * @returns {{icon: (*|Element), label: (*|string), orientation: *}}\n */\nGraphGroup.prototype.getLegend = function (iconWidth, iconHeight, framework, x, y) {\n  if (framework == undefined || framework == null) {\n    var svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    framework = {\n      svg: svg,\n      svgElements: {},\n      options: this.options,\n      groups: [this]\n    };\n  }\n  if (x == undefined || x == null) {\n    x = 0;\n  }\n  if (y == undefined || y == null) {\n    y = 0.5 * iconHeight;\n  }\n  switch (this.options.style) {\n    case \"line\":\n      Line.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"points\": //explicit no break\n    case \"point\":\n      Points.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"bar\":\n      Bargraph.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n  }\n  return {\n    icon: framework.svg,\n    label: this.content,\n    orientation: this.options.yAxisOrientation\n  };\n};\nGraphGroup.prototype.getYRange = function (groupData) {\n  var yMin = groupData[0].y;\n  var yMax = groupData[0].y;\n  for (var j = 0; j < groupData.length; j++) {\n    yMin = yMin > groupData[j].y ? groupData[j].y : yMin;\n    yMax = yMax < groupData[j].y ? groupData[j].y : yMax;\n  }\n  return {\n    min: yMin,\n    max: yMax,\n    yAxisOrientation: this.options.yAxisOrientation\n  };\n};\n\n/**\n * Legend for Graph2d\n *\n * @param {vis.Graph2d.body} body\n * @param {vis.Graph2d.options} options\n * @param {number} side\n * @param {vis.LineGraph.options} linegraphOptions\n * @constructor Legend\n * @extends Component\n */\nfunction Legend(body, options, side, linegraphOptions) {\n  this.body = body;\n  this.defaultOptions = {\n    enabled: false,\n    icons: true,\n    iconSize: 20,\n    iconSpacing: 6,\n    left: {\n      visible: true,\n      position: \"top-left\" // top/bottom - left,center,right\n    },\n    right: {\n      visible: true,\n      position: \"top-right\" // top/bottom - left,center,right\n    }\n  };\n  this.side = side;\n  this.options = availableUtils.extend({}, this.defaultOptions);\n  this.linegraphOptions = linegraphOptions;\n  this.svgElements = {};\n  this.dom = {};\n  this.groups = {};\n  this.amountOfGroups = 0;\n  this._create();\n  this.framework = {\n    svg: this.svg,\n    svgElements: this.svgElements,\n    options: this.options,\n    groups: this.groups\n  };\n  this.setOptions(options);\n}\nLegend.prototype = new Component();\nLegend.prototype.clear = function () {\n  this.groups = {};\n  this.amountOfGroups = 0;\n};\nLegend.prototype.addGroup = function (label, graphOptions) {\n  // Include a group only if the group option 'excludeFromLegend: false' is not set.\n  if (graphOptions.options.excludeFromLegend != true) {\n    if (!Object.prototype.hasOwnProperty.call(this.groups, label)) {\n      this.groups[label] = graphOptions;\n    }\n    this.amountOfGroups += 1;\n  }\n};\nLegend.prototype.updateGroup = function (label, graphOptions) {\n  this.groups[label] = graphOptions;\n};\nLegend.prototype.removeGroup = function (label) {\n  if (Object.prototype.hasOwnProperty.call(this.groups, label)) {\n    delete this.groups[label];\n    this.amountOfGroups -= 1;\n  }\n};\nLegend.prototype._create = function () {\n  this.dom.frame = document.createElement(\"div\");\n  this.dom.frame.className = \"vis-legend\";\n  this.dom.frame.style.position = \"absolute\";\n  this.dom.frame.style.top = \"10px\";\n  this.dom.frame.style.display = \"block\";\n  this.dom.textArea = document.createElement(\"div\");\n  this.dom.textArea.className = \"vis-legend-text\";\n  this.dom.textArea.style.position = \"relative\";\n  this.dom.textArea.style.top = \"0px\";\n  this.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n  this.svg.style.position = \"absolute\";\n  this.svg.style.top = 0 + \"px\";\n  this.svg.style.width = this.options.iconSize + 5 + \"px\";\n  this.svg.style.height = \"100%\";\n  this.dom.frame.appendChild(this.svg);\n  this.dom.frame.appendChild(this.dom.textArea);\n};\n\n/**\n * Hide the component from the DOM\n */\nLegend.prototype.hide = function () {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n */\nLegend.prototype.show = function () {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\nLegend.prototype.setOptions = function (options) {\n  var fields = [\"enabled\", \"orientation\", \"icons\", \"left\", \"right\"];\n  availableUtils.selectiveDeepExtend(fields, this.options, options);\n};\nLegend.prototype.redraw = function () {\n  var activeGroups = 0;\n  var groupArray = _Object$keys(this.groups);\n  _sortInstanceProperty(groupArray).call(groupArray, function (a, b) {\n    return a < b ? -1 : 1;\n  });\n  for (var i = 0; i < groupArray.length; i++) {\n    var groupId = groupArray[i];\n    if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n      activeGroups++;\n    }\n  }\n  if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) {\n    this.hide();\n  } else {\n    this.show();\n    if (this.options[this.side].position == \"top-left\" || this.options[this.side].position == \"bottom-left\") {\n      this.dom.frame.style.left = \"4px\";\n      this.dom.frame.style.textAlign = \"left\";\n      this.dom.textArea.style.textAlign = \"left\";\n      this.dom.textArea.style.left = this.options.iconSize + 15 + \"px\";\n      this.dom.textArea.style.right = \"\";\n      this.svg.style.left = 0 + \"px\";\n      this.svg.style.right = \"\";\n    } else {\n      this.dom.frame.style.right = \"4px\";\n      this.dom.frame.style.textAlign = \"right\";\n      this.dom.textArea.style.textAlign = \"right\";\n      this.dom.textArea.style.right = this.options.iconSize + 15 + \"px\";\n      this.dom.textArea.style.left = \"\";\n      this.svg.style.right = 0 + \"px\";\n      this.svg.style.left = \"\";\n    }\n    if (this.options[this.side].position == \"top-left\" || this.options[this.side].position == \"top-right\") {\n      this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace(\"px\", \"\")) + \"px\";\n      this.dom.frame.style.bottom = \"\";\n    } else {\n      var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height;\n      this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace(\"px\", \"\")) + \"px\";\n      this.dom.frame.style.top = \"\";\n    }\n    if (this.options.icons == false) {\n      this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + \"px\";\n      this.dom.textArea.style.right = \"\";\n      this.dom.textArea.style.left = \"\";\n      this.svg.style.width = \"0px\";\n    } else {\n      this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + \"px\";\n      this.drawLegendIcons();\n    }\n    var content = \"\";\n    for (i = 0; i < groupArray.length; i++) {\n      groupId = groupArray[i];\n      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n        content += this.groups[groupId].content + \"<br />\";\n      }\n    }\n    this.dom.textArea.innerHTML = availableUtils.xss(content);\n    this.dom.textArea.style.lineHeight = 0.75 * this.options.iconSize + this.options.iconSpacing + \"px\";\n  }\n};\nLegend.prototype.drawLegendIcons = function () {\n  if (this.dom.frame.parentNode) {\n    var groupArray = _Object$keys(this.groups);\n    _sortInstanceProperty(groupArray).call(groupArray, function (a, b) {\n      return a < b ? -1 : 1;\n    });\n\n    // this resets the elements so the order is maintained\n    resetElements(this.svgElements);\n    var padding = window.getComputedStyle(this.dom.frame).paddingTop;\n    var iconOffset = Number(padding.replace(\"px\", \"\"));\n    var x = iconOffset;\n    var iconWidth = this.options.iconSize;\n    var iconHeight = 0.75 * this.options.iconSize;\n    var y = iconOffset + 0.5 * iconHeight + 3;\n    this.svg.style.width = iconWidth + 5 + iconOffset + \"px\";\n    for (var i = 0; i < groupArray.length; i++) {\n      var groupId = groupArray[i];\n      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n        this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);\n        y += iconHeight + this.options.iconSpacing;\n      }\n    }\n  }\n};\n\nvar UNGROUPED = \"__ungrouped__\"; // reserved group id for ungrouped items\n\n/**\n * This is the constructor of the LineGraph. It requires a Timeline body and options.\n *\n * @param {vis.Timeline.body} body\n * @param {Object} options\n * @constructor LineGraph\n * @extends Component\n */\nfunction LineGraph(body, options) {\n  this.id = v4();\n  this.body = body;\n  this.defaultOptions = {\n    yAxisOrientation: \"left\",\n    defaultGroup: \"default\",\n    sort: true,\n    sampling: true,\n    stack: false,\n    graphHeight: \"400px\",\n    shaded: {\n      enabled: false,\n      orientation: \"bottom\" // top, bottom, zero\n    },\n    style: \"line\",\n    // line, bar\n    barChart: {\n      width: 50,\n      sideBySide: false,\n      align: \"center\" // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: \"centripetal\",\n      // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n      alpha: 0.5\n    },\n    drawPoints: {\n      enabled: true,\n      size: 6,\n      style: \"square\" // square, circle\n    },\n    dataAxis: {},\n    //Defaults are done on DataAxis level\n    legend: {},\n    //Defaults are done on Legend level\n    groups: {\n      visibility: {}\n    }\n  };\n\n  // options is shared by this lineGraph and all its items\n  this.options = availableUtils.extend({}, this.defaultOptions);\n  this.dom = {};\n  this.props = {};\n  this.hammer = null;\n  this.groups = {};\n  this.abortedGraphUpdate = false;\n  this.updateSVGheight = false;\n  this.updateSVGheightOnResize = false;\n  this.forceGraphUpdate = true;\n  var me = this;\n  this.itemsData = null; // DataSet\n  this.groupsData = null; // DataSet\n\n  // listeners for the DataSet of the items\n  this.itemListeners = {\n    add: function (_event, params) {\n      me._onAdd(params.items);\n    },\n    update: function (_event, params) {\n      me._onUpdate(params.items);\n    },\n    remove: function (_event, params) {\n      me._onRemove(params.items);\n    }\n  };\n\n  // listeners for the DataSet of the groups\n  this.groupListeners = {\n    add: function (_event, params) {\n      me._onAddGroups(params.items);\n    },\n    update: function (_event, params) {\n      me._onUpdateGroups(params.items);\n    },\n    remove: function (_event, params) {\n      me._onRemoveGroups(params.items);\n    }\n  };\n  this.items = {}; // object with an Item for every data item\n  this.selection = []; // list with the ids of all selected nodes\n  this.lastStart = this.body.range.start;\n  this.touchParams = {}; // stores properties while dragging\n\n  this.svgElements = {};\n  this.setOptions(options);\n  this.groupsUsingDefaultStyles = [0];\n  this.body.emitter.on(\"rangechanged\", function () {\n    me.svg.style.left = availableUtils.option.asSize(-me.props.width);\n    me.forceGraphUpdate = true;\n    //Is this local redraw necessary? (Core also does a change event!)\n    me.redraw.call(me);\n  });\n\n  // create the HTML DOM\n  this._create();\n  this.framework = {\n    svg: this.svg,\n    svgElements: this.svgElements,\n    options: this.options,\n    groups: this.groups\n  };\n}\nLineGraph.prototype = new Component();\n\n/**\n * Create the HTML DOM for the ItemSet\n */\nLineGraph.prototype._create = function () {\n  var frame = document.createElement(\"div\");\n  frame.className = \"vis-line-graph\";\n  this.dom.frame = frame;\n\n  // create svg element for graph drawing.\n  this.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n  this.svg.style.position = \"relative\";\n  this.svg.style.height = (\"\" + this.options.graphHeight).replace(\"px\", \"\") + \"px\";\n  this.svg.style.display = \"block\";\n  frame.appendChild(this.svg);\n\n  // data axis\n  this.options.dataAxis.orientation = \"left\";\n  this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);\n  this.options.dataAxis.orientation = \"right\";\n  this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);\n  delete this.options.dataAxis.orientation;\n\n  // legends\n  this.legendLeft = new Legend(this.body, this.options.legend, \"left\", this.options.groups);\n  this.legendRight = new Legend(this.body, this.options.legend, \"right\", this.options.groups);\n  this.show();\n};\n\n/**\n * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element.\n * @param {object} options\n */\nLineGraph.prototype.setOptions = function (options) {\n  if (options) {\n    var fields = [\"sampling\", \"defaultGroup\", \"stack\", \"height\", \"graphHeight\", \"yAxisOrientation\", \"style\", \"barChart\", \"dataAxis\", \"sort\", \"groups\"];\n    if (options.graphHeight === undefined && options.height !== undefined) {\n      this.updateSVGheight = true;\n      this.updateSVGheightOnResize = true;\n    } else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) {\n      if (_parseInt((options.graphHeight + \"\").replace(\"px\", \"\")) < this.body.domProps.centerContainer.height) {\n        this.updateSVGheight = true;\n      }\n    }\n    availableUtils.selectiveDeepExtend(fields, this.options, options);\n    availableUtils.mergeOptions(this.options, options, \"interpolation\");\n    availableUtils.mergeOptions(this.options, options, \"drawPoints\");\n    availableUtils.mergeOptions(this.options, options, \"shaded\");\n    availableUtils.mergeOptions(this.options, options, \"legend\");\n    if (options.interpolation) {\n      if (typeof options.interpolation == \"object\") {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == \"uniform\") {\n            this.options.interpolation.alpha = 0;\n          } else if (options.interpolation.parametrization == \"chordal\") {\n            this.options.interpolation.alpha = 1.0;\n          } else {\n            this.options.interpolation.parametrization = \"centripetal\";\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n    if (this.yAxisLeft) {\n      if (options.dataAxis !== undefined) {\n        this.yAxisLeft.setOptions(this.options.dataAxis);\n        this.yAxisRight.setOptions(this.options.dataAxis);\n      }\n    }\n    if (this.legendLeft) {\n      if (options.legend !== undefined) {\n        this.legendLeft.setOptions(this.options.legend);\n        this.legendRight.setOptions(this.options.legend);\n      }\n    }\n    if (Object.prototype.hasOwnProperty.call(this.groups, UNGROUPED)) {\n      this.groups[UNGROUPED].setOptions(options);\n    }\n  }\n\n  // this is used to redraw the graph if the visibility of the groups is changed.\n  if (this.dom.frame) {\n    //not on initial run?\n    this.forceGraphUpdate = true;\n    this.body.emitter.emit(\"_change\", {\n      queue: true\n    });\n  }\n};\n\n/**\n * Hide the component from the DOM\n */\nLineGraph.prototype.hide = function () {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n */\nLineGraph.prototype.show = function () {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\n\n/**\n * Set items\n * @param {vis.DataSet | null} items\n */\nLineGraph.prototype.setItems = function (items) {\n  var me = this,\n    ids,\n    oldItemsData = this.itemsData;\n\n  // replace the dataset\n  if (!items) {\n    this.itemsData = null;\n  } else if (isDataViewLike(items)) {\n    this.itemsData = typeCoerceDataSet(items);\n  } else {\n    throw new TypeError(\"Data must implement the interface of DataSet or DataView\");\n  }\n  if (oldItemsData) {\n    // unsubscribe from old dataset\n    _forEachInstanceProperty(availableUtils).call(availableUtils, this.itemListeners, function (callback, event) {\n      oldItemsData.off(event, callback);\n    });\n\n    // stop maintaining a coerced version of the old data set\n    oldItemsData.dispose();\n\n    // remove all drawn items\n    ids = oldItemsData.getIds();\n    this._onRemove(ids);\n  }\n  if (this.itemsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    _forEachInstanceProperty(availableUtils).call(availableUtils, this.itemListeners, function (callback, event) {\n      me.itemsData.on(event, callback, id);\n    });\n\n    // add all new items\n    ids = this.itemsData.getIds();\n    this._onAdd(ids);\n  }\n};\n\n/**\n * Set groups\n * @param {vis.DataSet} groups\n */\nLineGraph.prototype.setGroups = function (groups) {\n  var me = this;\n  var ids;\n\n  // unsubscribe from current dataset\n  if (this.groupsData) {\n    _forEachInstanceProperty(availableUtils).call(availableUtils, this.groupListeners, function (callback, event) {\n      me.groupsData.off(event, callback);\n    });\n\n    // remove all drawn groups\n    ids = this.groupsData.getIds();\n    this.groupsData = null;\n    for (var i = 0; i < ids.length; i++) {\n      this._removeGroup(ids[i]);\n    }\n  }\n\n  // replace the dataset\n  if (!groups) {\n    this.groupsData = null;\n  } else if (isDataViewLike(groups)) {\n    this.groupsData = groups;\n  } else {\n    throw new TypeError(\"Data must implement the interface of DataSet or DataView\");\n  }\n  if (this.groupsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    _forEachInstanceProperty(availableUtils).call(availableUtils, this.groupListeners, function (callback, event) {\n      me.groupsData.on(event, callback, id);\n    });\n\n    // draw all ms\n    ids = this.groupsData.getIds();\n    this._onAddGroups(ids);\n  }\n};\nLineGraph.prototype._onUpdate = function (ids) {\n  this._updateAllGroupData(ids);\n};\nLineGraph.prototype._onAdd = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onRemove = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onUpdateGroups = function (groupIds) {\n  this._updateAllGroupData(null, groupIds);\n};\nLineGraph.prototype._onAddGroups = function (groupIds) {\n  this._onUpdateGroups(groupIds);\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph\n * @param {Array} groupIds\n * @private\n */\nLineGraph.prototype._onRemoveGroups = function (groupIds) {\n  for (var i = 0; i < groupIds.length; i++) {\n    this._removeGroup(groupIds[i]);\n  }\n  this.forceGraphUpdate = true;\n  this.body.emitter.emit(\"_change\", {\n    queue: true\n  });\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis\n * @param {vis.GraphGroup.id} groupId\n * @private\n */\nLineGraph.prototype._removeGroup = function (groupId) {\n  if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) return;\n  if (this.groups[groupId].options.yAxisOrientation == \"right\") {\n    this.yAxisRight.removeGroup(groupId);\n    this.legendRight.removeGroup(groupId);\n    this.legendRight.redraw();\n  } else {\n    this.yAxisLeft.removeGroup(groupId);\n    this.legendLeft.removeGroup(groupId);\n    this.legendLeft.redraw();\n  }\n  delete this.groups[groupId];\n};\n\n/**\n * update a group object with the group dataset entree\n *\n * @param {vis.GraphGroup} group\n * @param {vis.GraphGroup.id} groupId\n * @private\n */\nLineGraph.prototype._updateGroup = function (group, groupId) {\n  if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) {\n    this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles);\n    if (this.groups[groupId].options.yAxisOrientation == \"right\") {\n      this.yAxisRight.addGroup(groupId, this.groups[groupId]);\n      this.legendRight.addGroup(groupId, this.groups[groupId]);\n    } else {\n      this.yAxisLeft.addGroup(groupId, this.groups[groupId]);\n      this.legendLeft.addGroup(groupId, this.groups[groupId]);\n    }\n  } else {\n    this.groups[groupId].update(group);\n    if (this.groups[groupId].options.yAxisOrientation == \"right\") {\n      this.yAxisRight.updateGroup(groupId, this.groups[groupId]);\n      this.legendRight.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisLeft.removeGroup(groupId);\n      this.legendLeft.removeGroup(groupId);\n    } else {\n      this.yAxisLeft.updateGroup(groupId, this.groups[groupId]);\n      this.legendLeft.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisRight.removeGroup(groupId);\n      this.legendRight.removeGroup(groupId);\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n};\n\n/**\n * this updates all groups, it is used when there is an update the the itemset.\n *\n * @param  {Array} ids\n * @param  {Array} groupIds\n * @private\n */\nLineGraph.prototype._updateAllGroupData = function (ids, groupIds) {\n  if (this.itemsData != null) {\n    var groupsContent = {};\n    var items = this.itemsData.get();\n    var fieldId = this.itemsData.idProp;\n    var idMap = {};\n    if (ids) {\n      _mapInstanceProperty(ids).call(ids, function (id) {\n        idMap[id] = id;\n      });\n    }\n\n    //pre-Determine array sizes, for more efficient memory claim\n    var groupCounts = {};\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      var groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      Object.prototype.hasOwnProperty.call(groupCounts, groupId) ? groupCounts[groupId]++ : groupCounts[groupId] = 1;\n    }\n\n    //Pre-load arrays from existing groups if items are not changed (not in ids)\n    var existingItemsMap = {};\n    if (!groupIds && ids) {\n      for (groupId in this.groups) {\n        if (!Object.prototype.hasOwnProperty.call(this.groups, groupId)) continue;\n        group = this.groups[groupId];\n        var existing_items = group.getItems();\n        groupsContent[groupId] = _filterInstanceProperty(existing_items).call(existing_items, function (item) {\n          existingItemsMap[item[fieldId]] = item[fieldId];\n          return item[fieldId] !== idMap[item[fieldId]];\n        });\n        var newLength = groupCounts[groupId];\n        groupCounts[groupId] -= groupsContent[groupId].length;\n        if (groupsContent[groupId].length < newLength) groupsContent[groupId][newLength - 1] = {};\n      }\n    }\n\n    //Now insert data into the arrays.\n    for (i = 0; i < items.length; i++) {\n      item = items[i];\n      groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      if (!groupIds && ids && item[fieldId] !== idMap[item[fieldId]] && Object.prototype.hasOwnProperty.call(existingItemsMap, item[fieldId])) {\n        continue;\n      }\n      if (!Object.prototype.hasOwnProperty.call(groupsContent, groupId)) {\n        groupsContent[groupId] = new Array(groupCounts[groupId]);\n      }\n      //Copy data (because of unmodifiable DataView input.\n      var extended = availableUtils.bridgeObject(item);\n      extended.x = availableUtils.convert(item.x, \"Date\");\n      extended.end = availableUtils.convert(item.end, \"Date\");\n      extended.orginalY = item.y; //real Y\n      extended.y = Number(item.y);\n      extended[fieldId] = item[fieldId];\n      var index = groupsContent[groupId].length - groupCounts[groupId]--;\n      groupsContent[groupId][index] = extended;\n    }\n\n    //Make sure all groups are present, to allow removal of old groups\n    for (groupId in this.groups) {\n      if (!Object.prototype.hasOwnProperty.call(this.groups, groupId) || Object.prototype.hasOwnProperty.call(groupsContent, groupId)) continue;\n      groupsContent[groupId] = new Array(0);\n    }\n\n    //Update legendas, style and axis\n    for (groupId in groupsContent) {\n      if (!Object.prototype.hasOwnProperty.call(groupsContent, groupId)) continue;\n      if (groupsContent[groupId].length == 0) {\n        if (Object.prototype.hasOwnProperty.call(this.groups, groupId)) {\n          this._removeGroup(groupId);\n        }\n      } else {\n        var group = undefined;\n        if (this.groupsData != undefined) {\n          group = this.groupsData.get(groupId);\n        }\n        if (group == undefined) {\n          group = {\n            id: groupId,\n            content: this.options.defaultGroup + groupId\n          };\n        }\n        this._updateGroup(group, groupId);\n        this.groups[groupId].setItems(groupsContent[groupId]);\n      }\n    }\n    this.forceGraphUpdate = true;\n    this.body.emitter.emit(\"_change\", {\n      queue: true\n    });\n  }\n};\n\n/**\n * Redraw the component, mandatory function\n * @return {boolean} Returns true if the component is resized\n */\nLineGraph.prototype.redraw = function () {\n  var resized = false;\n\n  // calculate actual size and position\n  this.props.width = this.dom.frame.offsetWidth;\n  this.props.height = this.body.domProps.centerContainer.height - this.body.domProps.border.top - this.body.domProps.border.bottom;\n\n  // check if this component is resized\n  resized = this._isResized() || resized;\n\n  // check whether zoomed (in that case we need to re-stack everything)\n  var visibleInterval = this.body.range.end - this.body.range.start;\n  var zoomed = visibleInterval != this.lastVisibleInterval;\n  this.lastVisibleInterval = visibleInterval;\n\n  // the svg element is three times as big as the width, this allows for fully dragging left and right\n  // without reloading the graph. the controls for this are bound to events in the constructor\n  if (resized == true) {\n    var _context;\n    this.svg.style.width = availableUtils.option.asSize(3 * this.props.width);\n    this.svg.style.left = availableUtils.option.asSize(-this.props.width);\n\n    // if the height of the graph is set as proportional, change the height of the svg\n    if (_indexOfInstanceProperty(_context = this.options.height + \"\").call(_context, \"%\") != -1 || this.updateSVGheightOnResize == true) {\n      this.updateSVGheight = true;\n    }\n  }\n\n  // update the height of the graph on each redraw of the graph.\n  if (this.updateSVGheight == true) {\n    if (this.options.graphHeight != this.props.height + \"px\") {\n      this.options.graphHeight = this.props.height + \"px\";\n      this.svg.style.height = this.props.height + \"px\";\n    }\n    this.updateSVGheight = false;\n  } else {\n    this.svg.style.height = (\"\" + this.options.graphHeight).replace(\"px\", \"\") + \"px\";\n  }\n\n  // zoomed is here to ensure that animations are shown correctly.\n  if (resized == true || zoomed == true || this.abortedGraphUpdate == true || this.forceGraphUpdate == true) {\n    resized = this._updateGraph() || resized;\n    this.forceGraphUpdate = false;\n    this.lastStart = this.body.range.start;\n    this.svg.style.left = -this.props.width + \"px\";\n  } else {\n    // move the whole svg while dragging\n    if (this.lastStart != 0) {\n      var offset = this.body.range.start - this.lastStart;\n      var range = this.body.range.end - this.body.range.start;\n      if (this.props.width != 0) {\n        var rangePerPixelInv = this.props.width / range;\n        var xOffset = offset * rangePerPixelInv;\n        this.svg.style.left = -this.props.width - xOffset + \"px\";\n      }\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n  return resized;\n};\nLineGraph.prototype._getSortedGroupIds = function () {\n  // getting group Ids\n  var grouplist = [];\n  for (var groupId in this.groups) {\n    if (Object.prototype.hasOwnProperty.call(this.groups, groupId)) {\n      var group = this.groups[groupId];\n      if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) {\n        grouplist.push({\n          id: groupId,\n          zIndex: group.options.zIndex\n        });\n      }\n    }\n  }\n  availableUtils.insertSort(grouplist, function (a, b) {\n    var az = a.zIndex;\n    var bz = b.zIndex;\n    if (az === undefined) az = 0;\n    if (bz === undefined) bz = 0;\n    return az == bz ? 0 : az < bz ? -1 : 1;\n  });\n  var groupIds = new Array(grouplist.length);\n  for (var i = 0; i < grouplist.length; i++) {\n    groupIds[i] = grouplist[i].id;\n  }\n  return groupIds;\n};\n\n/**\n * Update and redraw the graph.\n *\n * @returns {boolean}\n * @private\n */\nLineGraph.prototype._updateGraph = function () {\n  // reset the svg elements\n  prepareElements(this.svgElements);\n  if (this.props.width != 0 && this.itemsData != null) {\n    var group, i;\n    var groupRanges = {};\n    var changeCalled = false;\n    // this is the range of the SVG canvas\n    var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width);\n    var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width);\n\n    // getting group Ids\n    var groupIds = this._getSortedGroupIds();\n    if (groupIds.length > 0) {\n      var groupsData = {};\n\n      // fill groups data, this only loads the data we require based on the timewindow\n      this._getRelevantData(groupIds, groupsData, minDate, maxDate);\n\n      // apply sampling, if disabled, it will pass through this function.\n      this._applySampling(groupIds, groupsData);\n\n      // we transform the X coordinates to detect collisions\n      for (i = 0; i < groupIds.length; i++) {\n        this._convertXcoordinates(groupsData[groupIds[i]]);\n      }\n\n      // now all needed data has been collected we start the processing.\n      this._getYRanges(groupIds, groupsData, groupRanges);\n\n      // update the Y axis first, we use this data to draw at the correct Y points\n      changeCalled = this._updateYAxis(groupIds, groupRanges);\n\n      //  at changeCalled, abort this update cycle as the graph needs another update with new Width input from the Redraw container.\n      //  Cleanup SVG elements on abort.\n      if (changeCalled == true) {\n        cleanupElements(this.svgElements);\n        this.abortedGraphUpdate = true;\n        return true;\n      }\n      this.abortedGraphUpdate = false;\n\n      // With the yAxis scaled correctly, use this to get the Y values of the points.\n      var below = undefined;\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (this.options.stack === true && this.options.style === \"line\") {\n          if (group.options.excludeFromStacking == undefined || !group.options.excludeFromStacking) {\n            if (below != undefined) {\n              this._stack(groupsData[group.id], groupsData[below.id]);\n              if (group.options.shaded.enabled == true && group.options.shaded.orientation !== \"group\") {\n                if (group.options.shaded.orientation == \"top\" && below.options.shaded.orientation !== \"group\") {\n                  below.options.shaded.orientation = \"group\";\n                  below.options.shaded.groupId = group.id;\n                } else {\n                  group.options.shaded.orientation = \"group\";\n                  group.options.shaded.groupId = below.id;\n                }\n              }\n            }\n            below = group;\n          }\n        }\n        this._convertYcoordinates(groupsData[groupIds[i]], group);\n      }\n\n      //Precalculate paths and draw shading if appropriate. This will make sure the shading is always behind any lines.\n      var paths = {};\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (group.options.style === \"line\" && group.options.shaded.enabled == true) {\n          var dataset = groupsData[groupIds[i]];\n          if (dataset == null || dataset.length == 0) {\n            continue;\n          }\n          if (!Object.prototype.hasOwnProperty.call(paths, groupIds[i])) {\n            paths[groupIds[i]] = Line.calcPath(dataset, group);\n          }\n          if (group.options.shaded.orientation === \"group\") {\n            var subGroupId = group.options.shaded.groupId;\n            if (_indexOfInstanceProperty(groupIds).call(groupIds, subGroupId) === -1) {\n              console.log(group.id + \": Unknown shading group target given:\" + subGroupId);\n              continue;\n            }\n            if (!Object.prototype.hasOwnProperty.call(paths, subGroupId)) {\n              paths[subGroupId] = Line.calcPath(groupsData[subGroupId], this.groups[subGroupId]);\n            }\n            Line.drawShading(paths[groupIds[i]], group, paths[subGroupId], this.framework);\n          } else {\n            Line.drawShading(paths[groupIds[i]], group, undefined, this.framework);\n          }\n        }\n      }\n\n      // draw the groups, calculating paths if still necessary.\n      Bargraph.draw(groupIds, groupsData, this.framework);\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (groupsData[groupIds[i]].length > 0) {\n          switch (group.options.style) {\n            case \"line\":\n              if (!Object.prototype.hasOwnProperty.call(paths, groupIds[i])) {\n                paths[groupIds[i]] = Line.calcPath(groupsData[groupIds[i]], group);\n              }\n              Line.draw(paths[groupIds[i]], group, this.framework);\n\n            // eslint-disable-next-line no-fallthrough\n            case \"point\":\n            // eslint-disable-next-line no-fallthrough\n            case \"points\":\n              if (group.options.style == \"point\" || group.options.style == \"points\" || group.options.drawPoints.enabled == true) {\n                Points.draw(groupsData[groupIds[i]], group, this.framework);\n              }\n              break;\n            //do nothing...\n          }\n        }\n      }\n    }\n  }\n\n  // cleanup unused svg elements\n  cleanupElements(this.svgElements);\n  return false;\n};\nLineGraph.prototype._stack = function (data, subData) {\n  var index, dx, dy, subPrevPoint, subNextPoint;\n  index = 0;\n  // for each data point we look for a matching on in the set below\n  for (var j = 0; j < data.length; j++) {\n    subPrevPoint = undefined;\n    subNextPoint = undefined;\n    // we look for time matches or a before-after point\n    for (var k = index; k < subData.length; k++) {\n      // if times match exactly\n      if (subData[k].x === data[j].x) {\n        subPrevPoint = subData[k];\n        subNextPoint = subData[k];\n        index = k;\n        break;\n      } else if (subData[k].x > data[j].x) {\n        // overshoot\n        subNextPoint = subData[k];\n        if (k == 0) {\n          subPrevPoint = subNextPoint;\n        } else {\n          subPrevPoint = subData[k - 1];\n        }\n        index = k;\n        break;\n      }\n    }\n    // in case the last data point has been used, we assume it stays like this.\n    if (subNextPoint === undefined) {\n      subPrevPoint = subData[subData.length - 1];\n      subNextPoint = subData[subData.length - 1];\n    }\n    // linear interpolation\n    dx = subNextPoint.x - subPrevPoint.x;\n    dy = subNextPoint.y - subPrevPoint.y;\n    if (dx == 0) {\n      data[j].y = data[j].orginalY + subNextPoint.y;\n    } else {\n      data[j].y = data[j].orginalY + dy / dx * (data[j].x - subPrevPoint.x) + subPrevPoint.y; // ax + b where b is data[j].y\n    }\n  }\n};\n\n/**\n * first select and preprocess the data from the datasets.\n * the groups have their preselection of data, we now loop over this data to see\n * what data we need to draw. Sorted data is much faster.\n * more optimization is possible by doing the sampling before and using the binary search\n * to find the end date to determine the increment.\n *\n * @param {array}  groupIds\n * @param {object} groupsData\n * @param {date}   minDate\n * @param {date}   maxDate\n * @private\n */\nLineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) {\n  var group, i, j, item;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      var itemsData = group.getItems();\n      // optimization for sorted data\n      if (_sortInstanceProperty(group.options) == true) {\n        var dateComparator = function (a, b) {\n          return a.getTime() == b.getTime() ? 0 : a < b ? -1 : 1;\n        };\n        var first = Math.max(0, availableUtils.binarySearchValue(itemsData, minDate, \"x\", \"before\", dateComparator));\n        var last = Math.min(itemsData.length, availableUtils.binarySearchValue(itemsData, maxDate, \"x\", \"after\", dateComparator) + 1);\n        if (last <= 0) {\n          last = itemsData.length;\n        }\n        var dataContainer = new Array(last - first);\n        for (j = first; j < last; j++) {\n          item = group.itemsData[j];\n          dataContainer[j - first] = item;\n        }\n        groupsData[groupIds[i]] = dataContainer;\n      } else {\n        // If unsorted data, all data is relevant, just returning entire structure\n        groupsData[groupIds[i]] = group.itemsData;\n      }\n    }\n  }\n};\n\n/**\n *\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {vis.DataSet} groupsData\n * @private\n */\nLineGraph.prototype._applySampling = function (groupIds, groupsData) {\n  var group;\n  if (groupIds.length > 0) {\n    for (var i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      if (group.options.sampling == true) {\n        var dataContainer = groupsData[groupIds[i]];\n        if (dataContainer.length > 0) {\n          var increment = 1;\n          var amountOfPoints = dataContainer.length;\n\n          // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop\n          // of width changing of the yAxis.\n          //TODO: This assumes sorted data, but that's not guaranteed!\n          var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x);\n          var pointsPerPixel = amountOfPoints / xDistance;\n          increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel)));\n          var sampledData = new Array(amountOfPoints);\n          for (var j = 0; j < amountOfPoints; j += increment) {\n            var idx = Math.round(j / increment);\n            sampledData[idx] = dataContainer[j];\n          }\n          groupsData[groupIds[i]] = _spliceInstanceProperty(sampledData).call(sampledData, 0, Math.round(amountOfPoints / increment));\n        }\n      }\n    }\n  }\n};\n\n/**\n *\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {vis.DataSet} groupsData\n * @param {object} groupRanges  | this is being filled here\n * @private\n */\nLineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) {\n  var groupData, group, i;\n  var combinedDataLeft = [];\n  var combinedDataRight = [];\n  var options;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      groupData = groupsData[groupIds[i]];\n      options = this.groups[groupIds[i]].options;\n      if (groupData.length > 0) {\n        group = this.groups[groupIds[i]];\n        // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n        if (options.stack === true && options.style === \"bar\") {\n          if (options.yAxisOrientation === \"left\") {\n            combinedDataLeft = _concatInstanceProperty(combinedDataLeft).call(combinedDataLeft, groupData);\n          } else {\n            combinedDataRight = _concatInstanceProperty(combinedDataRight).call(combinedDataRight, groupData);\n          }\n        } else {\n          groupRanges[groupIds[i]] = group.getYRange(groupData, groupIds[i]);\n        }\n      }\n    }\n\n    // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n    Bargraph.getStackedYRange(combinedDataLeft, groupRanges, groupIds, \"__barStackLeft\", \"left\");\n    Bargraph.getStackedYRange(combinedDataRight, groupRanges, groupIds, \"__barStackRight\", \"right\");\n  }\n};\n\n/**\n * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden.\n * @param {Array.<vis.GraphGroup.id>} groupIds\n * @param {Object} groupRanges\n * @returns {boolean} resized\n * @private\n */\nLineGraph.prototype._updateYAxis = function (groupIds, groupRanges) {\n  var resized = false;\n  var yAxisLeftUsed = false;\n  var yAxisRightUsed = false;\n  var minLeft = 1e9,\n    minRight = 1e9,\n    maxLeft = -1e9,\n    maxRight = -1e9,\n    minVal,\n    maxVal;\n  // if groups are present\n  if (groupIds.length > 0) {\n    // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop.\n    for (var i = 0; i < groupIds.length; i++) {\n      var group = this.groups[groupIds[i]];\n      if (group && group.options.yAxisOrientation != \"right\") {\n        yAxisLeftUsed = true;\n        minLeft = 1e9;\n        maxLeft = -1e9;\n      } else if (group && group.options.yAxisOrientation) {\n        yAxisRightUsed = true;\n        minRight = 1e9;\n        maxRight = -1e9;\n      }\n    }\n\n    // if there are items:\n    for (i = 0; i < groupIds.length; i++) {\n      if (!Object.prototype.hasOwnProperty.call(groupRanges, groupIds[i]) || groupRanges[groupIds[i]].ignore === true) continue;\n      minVal = groupRanges[groupIds[i]].min;\n      maxVal = groupRanges[groupIds[i]].max;\n      if (groupRanges[groupIds[i]].yAxisOrientation != \"right\") {\n        yAxisLeftUsed = true;\n        minLeft = minLeft > minVal ? minVal : minLeft;\n        maxLeft = maxLeft < maxVal ? maxVal : maxLeft;\n      } else {\n        yAxisRightUsed = true;\n        minRight = minRight > minVal ? minVal : minRight;\n        maxRight = maxRight < maxVal ? maxVal : maxRight;\n      }\n    }\n    if (yAxisLeftUsed == true) {\n      this.yAxisLeft.setRange(minLeft, maxLeft);\n    }\n    if (yAxisRightUsed == true) {\n      this.yAxisRight.setRange(minRight, maxRight);\n    }\n  }\n  resized = this._toggleAxisVisiblity(yAxisLeftUsed, this.yAxisLeft) || resized;\n  resized = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || resized;\n  if (yAxisRightUsed == true && yAxisLeftUsed == true) {\n    this.yAxisLeft.drawIcons = true;\n    this.yAxisRight.drawIcons = true;\n  } else {\n    this.yAxisLeft.drawIcons = false;\n    this.yAxisRight.drawIcons = false;\n  }\n  this.yAxisRight.master = !yAxisLeftUsed;\n  this.yAxisRight.masterAxis = this.yAxisLeft;\n  if (this.yAxisRight.master == false) {\n    if (yAxisRightUsed == true) {\n      this.yAxisLeft.lineOffset = this.yAxisRight.width;\n    } else {\n      this.yAxisLeft.lineOffset = 0;\n    }\n    resized = this.yAxisLeft.redraw() || resized;\n    resized = this.yAxisRight.redraw() || resized;\n  } else {\n    resized = this.yAxisRight.redraw() || resized;\n  }\n\n  // clean the accumulated lists\n  var tempGroups = [\"__barStackLeft\", \"__barStackRight\", \"__lineStackLeft\", \"__lineStackRight\"];\n  for (i = 0; i < tempGroups.length; i++) {\n    if (_indexOfInstanceProperty(groupIds).call(groupIds, tempGroups[i]) != -1) {\n      _spliceInstanceProperty(groupIds).call(groupIds, _indexOfInstanceProperty(groupIds).call(groupIds, tempGroups[i]), 1);\n    }\n  }\n  return resized;\n};\n\n/**\n * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function\n *\n * @param {boolean} axisUsed\n * @param {vis.DataAxis}  axis\n * @returns {boolean}\n * @private\n */\nLineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) {\n  var changed = false;\n  if (axisUsed == false) {\n    if (axis.dom.frame.parentNode && axis.hidden == false) {\n      axis.hide();\n      changed = true;\n    }\n  } else {\n    if (!axis.dom.frame.parentNode && axis.hidden == true) {\n      axis.show();\n      changed = true;\n    }\n  }\n  return changed;\n};\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param {Array.<Object>} datapoints\n * @private\n */\nLineGraph.prototype._convertXcoordinates = function (datapoints) {\n  var toScreen = this.body.util.toScreen;\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_x = toScreen(datapoints[i].x) + this.props.width;\n    datapoints[i].screen_y = datapoints[i].y; //starting point for range calculations\n    if (datapoints[i].end != undefined) {\n      datapoints[i].screen_end = toScreen(datapoints[i].end) + this.props.width;\n    } else {\n      datapoints[i].screen_end = undefined;\n    }\n  }\n};\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param {Array.<Object>} datapoints\n * @param {vis.GraphGroup} group\n * @private\n */\nLineGraph.prototype._convertYcoordinates = function (datapoints, group) {\n  var axis = this.yAxisLeft;\n  var svgHeight = Number(this.svg.style.height.replace(\"px\", \"\"));\n  if (group.options.yAxisOrientation == \"right\") {\n    axis = this.yAxisRight;\n  }\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_y = Math.round(axis.convertValue(datapoints[i].y));\n  }\n  group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0)));\n};\n\n/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = \"string\";\nlet bool = \"boolean\";\nlet number = \"number\";\nlet array = \"array\";\nlet date = \"date\";\nlet object = \"object\"; // should only be in a __type__ property\nlet dom = \"dom\";\nlet moment = \"moment\";\nlet any = \"any\";\nlet allOptions = {\n  configure: {\n    enabled: {\n      boolean: bool\n    },\n    filter: {\n      boolean: bool,\n      function: \"function\"\n    },\n    container: {\n      dom\n    },\n    __type__: {\n      object,\n      boolean: bool,\n      function: \"function\"\n    }\n  },\n  //globals :\n  alignCurrentTime: {\n    string,\n    undefined: \"undefined\"\n  },\n  yAxisOrientation: {\n    string: [\"left\", \"right\"]\n  },\n  defaultGroup: {\n    string\n  },\n  sort: {\n    boolean: bool\n  },\n  sampling: {\n    boolean: bool\n  },\n  stack: {\n    boolean: bool\n  },\n  graphHeight: {\n    string,\n    number\n  },\n  shaded: {\n    enabled: {\n      boolean: bool\n    },\n    orientation: {\n      string: [\"bottom\", \"top\", \"zero\", \"group\"]\n    },\n    // top, bottom, zero, group\n    groupId: {\n      object\n    },\n    __type__: {\n      boolean: bool,\n      object\n    }\n  },\n  style: {\n    string: [\"line\", \"bar\", \"points\"]\n  },\n  // line, bar\n  barChart: {\n    width: {\n      number\n    },\n    minWidth: {\n      number\n    },\n    sideBySide: {\n      boolean: bool\n    },\n    align: {\n      string: [\"left\", \"center\", \"right\"]\n    },\n    __type__: {\n      object\n    }\n  },\n  interpolation: {\n    enabled: {\n      boolean: bool\n    },\n    parametrization: {\n      string: [\"centripetal\", \"chordal\", \"uniform\"]\n    },\n    // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    alpha: {\n      number\n    },\n    __type__: {\n      object,\n      boolean: bool\n    }\n  },\n  drawPoints: {\n    enabled: {\n      boolean: bool\n    },\n    onRender: {\n      function: \"function\"\n    },\n    size: {\n      number\n    },\n    style: {\n      string: [\"square\", \"circle\"]\n    },\n    // square, circle\n    __type__: {\n      object,\n      boolean: bool,\n      function: \"function\"\n    }\n  },\n  dataAxis: {\n    showMinorLabels: {\n      boolean: bool\n    },\n    showMajorLabels: {\n      boolean: bool\n    },\n    showWeekScale: {\n      boolean: bool\n    },\n    icons: {\n      boolean: bool\n    },\n    width: {\n      string,\n      number\n    },\n    visible: {\n      boolean: bool\n    },\n    alignZeros: {\n      boolean: bool\n    },\n    left: {\n      range: {\n        min: {\n          number,\n          undefined: \"undefined\"\n        },\n        max: {\n          number,\n          undefined: \"undefined\"\n        },\n        __type__: {\n          object\n        }\n      },\n      format: {\n        function: \"function\"\n      },\n      title: {\n        text: {\n          string,\n          number,\n          undefined: \"undefined\"\n        },\n        style: {\n          string,\n          undefined: \"undefined\"\n        },\n        __type__: {\n          object\n        }\n      },\n      __type__: {\n        object\n      }\n    },\n    right: {\n      range: {\n        min: {\n          number,\n          undefined: \"undefined\"\n        },\n        max: {\n          number,\n          undefined: \"undefined\"\n        },\n        __type__: {\n          object\n        }\n      },\n      format: {\n        function: \"function\"\n      },\n      title: {\n        text: {\n          string,\n          number,\n          undefined: \"undefined\"\n        },\n        style: {\n          string,\n          undefined: \"undefined\"\n        },\n        __type__: {\n          object\n        }\n      },\n      __type__: {\n        object\n      }\n    },\n    __type__: {\n      object\n    }\n  },\n  legend: {\n    enabled: {\n      boolean: bool\n    },\n    icons: {\n      boolean: bool\n    },\n    left: {\n      visible: {\n        boolean: bool\n      },\n      position: {\n        string: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"]\n      },\n      __type__: {\n        object\n      }\n    },\n    right: {\n      visible: {\n        boolean: bool\n      },\n      position: {\n        string: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"]\n      },\n      __type__: {\n        object\n      }\n    },\n    __type__: {\n      object,\n      boolean: bool\n    }\n  },\n  groups: {\n    visibility: {\n      any\n    },\n    __type__: {\n      object\n    }\n  },\n  autoResize: {\n    boolean: bool\n  },\n  throttleRedraw: {\n    number\n  },\n  // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: {\n    boolean: bool\n  },\n  end: {\n    number,\n    date,\n    string,\n    moment\n  },\n  format: {\n    minorLabels: {\n      millisecond: {\n        string,\n        undefined: \"undefined\"\n      },\n      second: {\n        string,\n        undefined: \"undefined\"\n      },\n      minute: {\n        string,\n        undefined: \"undefined\"\n      },\n      hour: {\n        string,\n        undefined: \"undefined\"\n      },\n      weekday: {\n        string,\n        undefined: \"undefined\"\n      },\n      day: {\n        string,\n        undefined: \"undefined\"\n      },\n      week: {\n        string,\n        undefined: \"undefined\"\n      },\n      month: {\n        string,\n        undefined: \"undefined\"\n      },\n      quarter: {\n        string,\n        undefined: \"undefined\"\n      },\n      year: {\n        string,\n        undefined: \"undefined\"\n      },\n      __type__: {\n        object\n      }\n    },\n    majorLabels: {\n      millisecond: {\n        string,\n        undefined: \"undefined\"\n      },\n      second: {\n        string,\n        undefined: \"undefined\"\n      },\n      minute: {\n        string,\n        undefined: \"undefined\"\n      },\n      hour: {\n        string,\n        undefined: \"undefined\"\n      },\n      weekday: {\n        string,\n        undefined: \"undefined\"\n      },\n      day: {\n        string,\n        undefined: \"undefined\"\n      },\n      week: {\n        string,\n        undefined: \"undefined\"\n      },\n      month: {\n        string,\n        undefined: \"undefined\"\n      },\n      quarter: {\n        string,\n        undefined: \"undefined\"\n      },\n      year: {\n        string,\n        undefined: \"undefined\"\n      },\n      __type__: {\n        object\n      }\n    },\n    __type__: {\n      object\n    }\n  },\n  moment: {\n    function: \"function\"\n  },\n  height: {\n    string,\n    number\n  },\n  hiddenDates: {\n    start: {\n      date,\n      number,\n      string,\n      moment\n    },\n    end: {\n      date,\n      number,\n      string,\n      moment\n    },\n    repeat: {\n      string\n    },\n    __type__: {\n      object,\n      array\n    }\n  },\n  locale: {\n    string\n  },\n  locales: {\n    __any__: {\n      any\n    },\n    __type__: {\n      object\n    }\n  },\n  max: {\n    date,\n    number,\n    string,\n    moment\n  },\n  maxHeight: {\n    number,\n    string\n  },\n  maxMinorChars: {\n    number\n  },\n  min: {\n    date,\n    number,\n    string,\n    moment\n  },\n  minHeight: {\n    number,\n    string\n  },\n  moveable: {\n    boolean: bool\n  },\n  multiselect: {\n    boolean: bool\n  },\n  orientation: {\n    string\n  },\n  showCurrentTime: {\n    boolean: bool\n  },\n  showMajorLabels: {\n    boolean: bool\n  },\n  showMinorLabels: {\n    boolean: bool\n  },\n  showWeekScale: {\n    boolean: bool\n  },\n  snap: {\n    function: \"function\",\n    null: \"null\"\n  },\n  start: {\n    date,\n    number,\n    string,\n    moment\n  },\n  timeAxis: {\n    scale: {\n      string,\n      undefined: \"undefined\"\n    },\n    step: {\n      number,\n      undefined: \"undefined\"\n    },\n    __type__: {\n      object\n    }\n  },\n  width: {\n    string,\n    number\n  },\n  zoomable: {\n    boolean: bool\n  },\n  zoomKey: {\n    string: [\"ctrlKey\", \"altKey\", \"metaKey\", \"\"]\n  },\n  zoomMax: {\n    number\n  },\n  zoomMin: {\n    number\n  },\n  zIndex: {\n    number\n  },\n  __type__: {\n    object\n  }\n};\nlet configureOptions = {\n  global: {\n    alignCurrentTime: [\"none\", \"year\", \"month\", \"quarter\", \"week\", \"isoWeek\", \"day\", \"date\", \"hour\", \"minute\", \"second\"],\n    //yAxisOrientation: ['left','right'], // TDOO: enable as soon as Grahp2d doesn't crash when changing this on the fly\n    sort: true,\n    sampling: true,\n    stack: false,\n    shaded: {\n      enabled: false,\n      orientation: [\"zero\", \"top\", \"bottom\", \"group\"] // zero, top, bottom\n    },\n    style: [\"line\", \"bar\", \"points\"],\n    // line, bar\n    barChart: {\n      width: [50, 5, 100, 5],\n      minWidth: [50, 5, 100, 5],\n      sideBySide: false,\n      align: [\"left\", \"center\", \"right\"] // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: [\"centripetal\", \"chordal\", \"uniform\"] // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    },\n    drawPoints: {\n      enabled: true,\n      size: [6, 2, 30, 1],\n      style: [\"square\", \"circle\"] // square, circle\n    },\n    dataAxis: {\n      showMinorLabels: true,\n      showMajorLabels: true,\n      showWeekScale: false,\n      icons: false,\n      width: [40, 0, 200, 1],\n      visible: true,\n      alignZeros: true,\n      left: {\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: {\n          text: \"\",\n          style: \"\"\n        }\n      },\n      right: {\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: {\n          text: \"\",\n          style: \"\"\n        }\n      }\n    },\n    legend: {\n      enabled: false,\n      icons: true,\n      left: {\n        visible: true,\n        position: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"] // top/bottom - left,right\n      },\n      right: {\n        visible: true,\n        position: [\"top-right\", \"bottom-right\", \"top-left\", \"bottom-left\"] // top/bottom - left,right\n      }\n    },\n    autoResize: true,\n    clickToUse: false,\n    end: \"\",\n    format: {\n      minorLabels: {\n        millisecond: \"SSS\",\n        second: \"s\",\n        minute: \"HH:mm\",\n        hour: \"HH:mm\",\n        weekday: \"ddd D\",\n        day: \"D\",\n        week: \"w\",\n        month: \"MMM\",\n        quarter: \"[Q]Q\",\n        year: \"YYYY\"\n      },\n      majorLabels: {\n        millisecond: \"HH:mm:ss\",\n        second: \"D MMMM HH:mm\",\n        minute: \"ddd D MMMM\",\n        hour: \"ddd D MMMM\",\n        weekday: \"MMMM YYYY\",\n        day: \"MMMM YYYY\",\n        week: \"MMMM YYYY\",\n        month: \"YYYY\",\n        quarter: \"YYYY\",\n        year: \"\"\n      }\n    },\n    height: \"\",\n    locale: \"\",\n    max: \"\",\n    maxHeight: \"\",\n    maxMinorChars: [7, 0, 20, 1],\n    min: \"\",\n    minHeight: \"\",\n    moveable: true,\n    orientation: [\"both\", \"bottom\", \"top\"],\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    showWeekScale: false,\n    start: \"\",\n    width: \"100%\",\n    zoomable: true,\n    zoomKey: [\"ctrlKey\", \"altKey\", \"metaKey\", \"\"],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1],\n    zIndex: 0\n  }\n};\n\n/**\n * Create a timeline visualization\n * @param {HTMLElement} container\n * @param {vis.DataSet | Array} [items]\n * @param {vis.DataSet | Array | vis.DataView | Object} [groups]\n * @param {Object} [options]  See Graph2d.setOptions for the available options.\n * @constructor Graph2d\n * @extends Core\n */\nfunction Graph2d(container, items, groups, options) {\n  var _context, _context2, _context3, _context4, _context5, _context6, _context7;\n  // if the third element is options, the forth is groups (optionally);\n  if (!(_Array$isArray(groups) || isDataViewLike(groups)) && groups instanceof Object) {\n    var forthArgument = options;\n    options = groups;\n    groups = forthArgument;\n  }\n\n  // TODO: REMOVE THIS in the next MAJOR release\n  // see https://github.com/almende/vis/issues/2511\n  if (options && options.throttleRedraw) {\n    console.warn('Graph2d option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');\n  }\n  var me = this;\n  this.defaultOptions = {\n    start: null,\n    end: null,\n    autoResize: true,\n    orientation: {\n      axis: \"bottom\",\n      // axis orientation: 'bottom', 'top', or 'both'\n      item: \"bottom\" // not relevant for Graph2d\n    },\n    moment: moment$2,\n    width: null,\n    height: null,\n    maxHeight: null,\n    minHeight: null\n  };\n  this.options = availableUtils.deepExtend({}, this.defaultOptions);\n\n  // Create the DOM, props, and emitter\n  this._create(container);\n\n  // all components listed here will be repainted automatically\n  this.components = [];\n  this.body = {\n    dom: this.dom,\n    domProps: this.props,\n    emitter: {\n      on: _bindInstanceProperty(_context = this.on).call(_context, this),\n      off: _bindInstanceProperty(_context2 = this.off).call(_context2, this),\n      emit: _bindInstanceProperty(_context3 = this.emit).call(_context3, this)\n    },\n    hiddenDates: [],\n    util: {\n      getScale() {\n        return me.timeAxis.step.scale;\n      },\n      getStep() {\n        return me.timeAxis.step.step;\n      },\n      toScreen: _bindInstanceProperty(_context4 = me._toScreen).call(_context4, me),\n      toGlobalScreen: _bindInstanceProperty(_context5 = me._toGlobalScreen).call(_context5, me),\n      // this refers to the root.width\n      toTime: _bindInstanceProperty(_context6 = me._toTime).call(_context6, me),\n      toGlobalTime: _bindInstanceProperty(_context7 = me._toGlobalTime).call(_context7, me)\n    }\n  };\n\n  // range\n  this.range = new Range(this.body);\n  this.components.push(this.range);\n  this.body.range = this.range;\n\n  // time axis\n  this.timeAxis = new TimeAxis(this.body);\n  this.components.push(this.timeAxis);\n  //this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis);\n\n  // current time bar\n  this.currentTime = new CurrentTime(this.body);\n  this.components.push(this.currentTime);\n\n  // item set\n  this.linegraph = new LineGraph(this.body);\n  this.components.push(this.linegraph);\n  this.itemsData = null; // DataSet\n  this.groupsData = null; // DataSet\n\n  this.on(\"tap\", function (event) {\n    me.emit(\"click\", me.getEventProperties(event));\n  });\n  this.on(\"doubletap\", function (event) {\n    me.emit(\"doubleClick\", me.getEventProperties(event));\n  });\n  this.dom.root.oncontextmenu = function (event) {\n    me.emit(\"contextmenu\", me.getEventProperties(event));\n  };\n\n  //Single time autoscale/fit\n  this.initialFitDone = false;\n  this.on(\"changed\", function () {\n    if (me.itemsData == null) return;\n    if (!me.initialFitDone && !me.options.rollingMode) {\n      me.initialFitDone = true;\n      if (me.options.start != undefined || me.options.end != undefined) {\n        if (me.options.start == undefined || me.options.end == undefined) {\n          var range = me.getItemRange();\n        }\n        var start = me.options.start != undefined ? me.options.start : range.min;\n        var end = me.options.end != undefined ? me.options.end : range.max;\n        me.setWindow(start, end, {\n          animation: false\n        });\n      } else {\n        me.fit({\n          animation: false\n        });\n      }\n    }\n    if (!me.initialDrawDone && (me.initialRangeChangeDone || !me.options.start && !me.options.end || me.options.rollingMode)) {\n      me.initialDrawDone = true;\n      me.dom.root.style.visibility = \"visible\";\n      me.dom.loadingScreen.parentNode.removeChild(me.dom.loadingScreen);\n      if (me.options.onInitialDrawComplete) {\n        _setTimeout(() => {\n          return me.options.onInitialDrawComplete();\n        }, 0);\n      }\n    }\n  });\n\n  // apply options\n  if (options) {\n    this.setOptions(options);\n  }\n\n  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n  if (groups) {\n    this.setGroups(groups);\n  }\n\n  // create itemset\n  if (items) {\n    this.setItems(items);\n  }\n\n  // draw for the first time\n  this._redraw();\n}\n\n// Extend the functionality from Core\nGraph2d.prototype = new Core();\nGraph2d.prototype.setOptions = function (options) {\n  // validate options\n  let errorFound = Validator.validate(options, allOptions);\n  if (errorFound === true) {\n    console.log(\"%cErrors have been found in the supplied options object.\", printStyle);\n  }\n  Core.prototype.setOptions.call(this, options);\n};\n\n/**\n * Set items\n * @param {vis.DataSet | Array | null} items\n */\nGraph2d.prototype.setItems = function (items) {\n  var initialLoad = this.itemsData == null;\n\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!items) {\n    newDataSet = null;\n  } else if (isDataViewLike(items)) {\n    newDataSet = typeCoerceDataSet(items);\n  } else {\n    // turn an array into a dataset\n    newDataSet = typeCoerceDataSet(new DataSet(items));\n  }\n\n  // set items\n  if (this.itemsData) {\n    // stop maintaining a coerced version of the old data set\n    this.itemsData.dispose();\n  }\n  this.itemsData = newDataSet;\n  this.linegraph && this.linegraph.setItems(newDataSet != null ? newDataSet.rawDS : null);\n  if (initialLoad) {\n    if (this.options.start != undefined || this.options.end != undefined) {\n      var start = this.options.start != undefined ? this.options.start : null;\n      var end = this.options.end != undefined ? this.options.end : null;\n      this.setWindow(start, end, {\n        animation: false\n      });\n    } else {\n      this.fit({\n        animation: false\n      });\n    }\n  }\n};\n\n/**\n * Set groups\n * @param {vis.DataSet | Array} groups\n */\nGraph2d.prototype.setGroups = function (groups) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!groups) {\n    newDataSet = null;\n  } else if (isDataViewLike(groups)) {\n    newDataSet = groups;\n  } else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(groups);\n  }\n  this.groupsData = newDataSet;\n  this.linegraph.setGroups(newDataSet);\n};\n\n/**\n * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right).\n * @param {vis.GraphGroup.id} groupId\n * @param {number} width\n * @param {number} height\n * @returns {{icon: SVGElement, label: string, orientation: string}|string}\n */\nGraph2d.prototype.getLegend = function (groupId, width, height) {\n  if (width === undefined) {\n    width = 15;\n  }\n  if (height === undefined) {\n    height = 15;\n  }\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return this.linegraph.groups[groupId].getLegend(width, height);\n  } else {\n    return \"cannot find group:'\" + groupId + \"'\";\n  }\n};\n\n/**\n * This checks if the visible option of the supplied group (by ID) is true or false.\n * @param {vis.GraphGroup.id} groupId\n * @returns {boolean}\n */\nGraph2d.prototype.isGroupVisible = function (groupId) {\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true);\n  } else {\n    return false;\n  }\n};\n\n/**\n * Get the data range of the item set.\n * @returns {{min: Date, max: Date}} range  A range with a start and end Date.\n *                                          When no minimum is found, min==null\n *                                          When no maximum is found, max==null\n */\nGraph2d.prototype.getDataRange = function () {\n  var min = null;\n  var max = null;\n\n  // calculate min from start filed\n  for (var groupId in this.linegraph.groups) {\n    if (!Object.prototype.hasOwnProperty.call(this.linegraph.groups, groupId) || this.linegraph.groups[groupId].visible !== true) continue;\n    for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) {\n      var item = this.linegraph.groups[groupId].itemsData[i];\n      var value = availableUtils.convert(item.x, \"Date\").valueOf();\n      min = min == null ? value : min > value ? value : min;\n      max = max == null ? value : max < value ? value : max;\n    }\n  }\n  return {\n    min: min != null ? new Date(min) : null,\n    max: max != null ? new Date(max) : null\n  };\n};\n\n/**\n * Generate Timeline related information from an event\n * @param {Event} event\n * @return {Object} An object with related information, like on which area\n *                  The event happened, whether clicked on an item, etc.\n */\nGraph2d.prototype.getEventProperties = function (event) {\n  var clientX = event.center ? event.center.x : event.clientX;\n  var clientY = event.center ? event.center.y : event.clientY;\n  var x = clientX - availableUtils.getAbsoluteLeft(this.dom.centerContainer);\n  var y = clientY - availableUtils.getAbsoluteTop(this.dom.centerContainer);\n  var time = this._toTime(x);\n  var customTime = CustomTime.customTimeFromTarget(event);\n  var element = availableUtils.getTarget(event);\n  var what = null;\n  if (availableUtils.hasParent(element, this.timeAxis.dom.foreground)) {\n    what = \"axis\";\n  } else if (this.timeAxis2 && availableUtils.hasParent(element, this.timeAxis2.dom.foreground)) {\n    what = \"axis\";\n  } else if (availableUtils.hasParent(element, this.linegraph.yAxisLeft.dom.frame)) {\n    what = \"data-axis\";\n  } else if (availableUtils.hasParent(element, this.linegraph.yAxisRight.dom.frame)) {\n    what = \"data-axis\";\n  } else if (availableUtils.hasParent(element, this.linegraph.legendLeft.dom.frame)) {\n    what = \"legend\";\n  } else if (availableUtils.hasParent(element, this.linegraph.legendRight.dom.frame)) {\n    what = \"legend\";\n  } else if (customTime != null) {\n    what = \"custom-time\";\n  } else if (availableUtils.hasParent(element, this.currentTime.bar)) {\n    what = \"current-time\";\n  } else if (availableUtils.hasParent(element, this.dom.center)) {\n    what = \"background\";\n  }\n  var value = [];\n  var yAxisLeft = this.linegraph.yAxisLeft;\n  var yAxisRight = this.linegraph.yAxisRight;\n  if (!yAxisLeft.hidden && this.itemsData.length > 0) {\n    value.push(yAxisLeft.screenToValue(y));\n  }\n  if (!yAxisRight.hidden && this.itemsData.length > 0) {\n    value.push(yAxisRight.screenToValue(y));\n  }\n  return {\n    event: event,\n    customTime: customTime ? customTime.options.id : null,\n    what: what,\n    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n    x: x,\n    y: y,\n    time: time,\n    value: value\n  };\n};\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nGraph2d.prototype._createConfigurator = function () {\n  return new Configurator(this, this.dom.container, configureOptions);\n};\n\n// styles\n\n// TODO: This should probably be moved somewhere else to ensure that both builds\n// behave the same way.\nconst defaultLanguage = getNavigatorLanguage();\nmoment$2.locale(defaultLanguage);\nconst timeline = {\n  Core,\n  DateUtil,\n  Range,\n  stack: stack$1,\n  TimeStep,\n  components: {\n    items: {\n      Item,\n      BackgroundItem,\n      BoxItem,\n      ClusterItem,\n      PointItem,\n      RangeItem\n    },\n    BackgroundGroup,\n    Component,\n    CurrentTime,\n    CustomTime,\n    DataAxis,\n    DataScale,\n    GraphGroup,\n    Group,\n    ItemSet,\n    Legend,\n    LineGraph,\n    TimeAxis\n  }\n};\n\nexport { DOMutil, DataSet, DataView, Graph2d, Hammer, Queue, Timeline, keycharm, moment$2 as moment, timeline, util$2 as util };\n//# sourceMappingURL=vis-timeline-graph2d.mjs.map\n"],"names":["$","defaults","columns","search","searchOptions","delay","showOptGroups","searchText","searchValue","onSearch","element","texts","placeholder","searchNoResult","selectedOptions","selectAll","unselectAll","noneSelected","selectGroup","minHeight","maxHeight","maxWidth","maxPlaceholderWidth","maxPlaceholderOpts","showAllPlaceholderOpts","showCheckbox","checkboxAutoFit","optionAttributes","replacePlaceholderText","onLoad","onOptionClick","option","onControlOpen","onControlClose","onSelectAll","selected","onPlaceholder","selectedOpts","msCounter","msOptCounter","MultiSelect","options","this","extend","updateSelectAll","updatePlaceholder","listNumber","prop","Error","load","Array","prototype","map","callback","thisArg","isArray","String","trim","replace","instance","nodeName","toUpperCase","hasClass","addClass","data","after","siblings","find","optionsWrap","optionsList","css","window","height","offset","top","scrollTop","on","e","outerHeight","scrollHeight","e0","originalEvent","delta","wheelDelta","detail","preventDefault","document","off","event","target","closest","length","each","removeClass","listID","attr","thisInst","parent","keyCode","which","trigger","code","toggleClass","click","text","before","val","clearTimeout","thisSearchElem","setTimeout","searchString","toLowerCase","show","hide","_updateSelectAllText","select","optgroup","vals","push","_updatePlaceholderText","children","groupOptions","thisOptionAtts","i","thisOptAttr","undefined","name","value","checked","attributes","label","loadOptions","_escapeSelector","is","overwrite","updateSelect","remove","containers","key","hasOwnProperty","thisOption","container","appendContainer","_addOption","selOption","Object","keys","append","optGroup","gKey","clear","thisGOption","gContainer","chkbx","checkboxWidth","outerWidth","parseInt","width","_ieVersion","settings","reload","unload","reset","defaultVals","disable","status","unselected","shownOptionsCount","toggle","selectVals","placeholderTxt","selOpts","join","optionNameText","html","for","thisCheckbox","type","title","id","prepend","searchTerm","myNav","navigator","userAgent","indexOf","split","string","escapeSelector","fn","multiselect","ret","args","arguments","apply","slice","call","jQuery","isControlChar","c","isAsciiLetterChar","isDigitChar","isQuoteChar","isWhitespaceChar","isAlphaNumericOrMarkChar","isValidEmailLocalPartSpecialChar","isUrlSuffixAllowedSpecialChar","isUrlSuffixNotAllowedAsFinalChar","isOpenBraceChar","isCloseBraceChar","isBoolean","removeWithPredicate","arr","splice","assertNever","theValue","concat","whitespaceRe","HtmlTag","cfg","tagName","attrs","innerHTML","innerHtml","setTagName","getTagName","setAttr","attrName","attrValue","getAttrs","getAttr","setAttrs","assign","setClass","cssClass","newClass","classAttr","getClass","classes","newClasses","shift","removeClasses","idx","setInnerHTML","setInnerHtml","getInnerHTML","getInnerHtml","toAnchorString","attrsStr","buildAttrsStr","attrsArr","buildUrl","urlObj","url","scheme","host","path","query","fragment","buildSegment","segment","remainingAvailableLength","ellipsisChars","remainingAvailableLengthHalf","startOffset","Math","ceil","endOffset","floor","end","substr","AnchorTagBuilder","newWindow","truncate","className","build","match","createAttrs","processAnchorText","getAnchorText","href","getAnchorHref","createCssClass","returnClasses","cssClassSuffixes","getCssClassSuffixes","len","anchorText","doTruncate","truncateLength","truncateLocation","location","truncateLen","ellipsisLengthBeforeParsing","ellipsisLength","availableLength","urlSub","parseUrl","matchQuery","truncatedUrl","pathAndQuery","truncateSmart","truncateMiddle","str","substring","ellipsis","truncateEnd","AbstractMatch","_","matchedText","tagBuilder","getMatchedText","setOffset","getOffset","buildTag","httpSchemeRe","httpSchemePrefixRe","RegExp","source","invalidSchemeRe","schemeUrlRe","tldUrlHostRe","isSchemeStartChar","isSchemeChar","charCode","isDomainLabelStartChar","isDomainLabelChar","isPathChar","isUrlSuffixStartChar","isKnownTld","tld","test","ipV4Re","ipV4PartRe","wwwPrefixRegex","protocolRelativeRegex","UrlMatch","_super","_this","urlMatchType","protocolRelativeMatch","stripPrefix","www","stripTrailingSlash","decodePercentEncoding","protocolPrepended","getType","getUrlMatchType","getUrl","includes","charAt","removeTrailingSlash","preProcessedEntityAnchorText","decodeURIComponent","error","removePercentEncoding","mailtoSchemePrefixRe","isEmailLocalPartStartChar","isEmailLocalPartChar","EmailMatch","email","getEmail","HashtagMatch","serviceName","hashtag","getServiceName","getHashtag","mentionRegexes","twitter","instagram","soundcloud","tiktok","youtube","isMentionTextChar","mentionServices","MentionMatch","mention","getMention","hasDelimCharsRe","validPhoneNumberRe","isPhoneNumberSeparatorChar","isPhoneNumberControlChar","PhoneMatch","number","plusSign","getPhoneNumber","getNumber","ParseMatchesContext","charIdx","matches","_stateMachines","schemeUrlMachinesCount","hashtagServiceName","mentionServiceName","defineProperty","get","enumerable","configurable","addMachine","stateMachine","isSchemeUrlStateMachine","removeMachine","filter","m","hasSchemeUrlMachine","stateNoMatch","context","char","startIdx","state","acceptStateReached","createTldUrlStateMachine","createPhoneNumberStateMachine","matchType","octetsEncountered","createIpV4UrlStateMachine","startState","createEmailStateMachine","createSchemeUrlStateMachine","stateSchemeChar","stateSchemeHyphen","stateSchemeColon","stateSchemeSlash1","captureMatchIfValidAndRemove","stateSchemeSlash2","stateProtocolRelativeSlash1","stateProtocolRelativeSlash2","stateDomainLabelChar","stateDomainHyphen","stateDomainDot","stateIpV4Digit","stateIpV4Dot","statePortColon","statePortNumber","statePath","stateEmailMailto_M","stateEmailLocalPart","stateEmailMailto_A","stateEmailMailto_I","stateEmailMailto_L","stateEmailMailto_T","stateEmailMailto_O","stateEmailMailtoColon","stateEmailLocalPartDot","stateEmailAtSign","stateEmailDomainChar","stateEmailDomainHyphen","stateEmailDomainDot","stateHashtagHashChar","stateHashtagTextChar","stateMentionAtChar","stateMentionTextChar","statePhoneNumberPlus","statePhoneNumberOpenParen","statePhoneNumberAreaCodeDigit1","statePhoneNumberAreaCodeDigit2","statePhoneNumberAreaCodeDigit3","statePhoneNumberCloseParen","statePhoneNumberDigit","statePhoneNumberSeparator","statePhoneNumberControlChar","statePhoneNumberPoundChar","phoneNumberText","ipV4Part","braceCounts","charCodeAt","oppositeBrace","endIdx","oppositeBraceChar","excludeUnbalancedTrailingBracesAndPunctuation","httpSchemeMatch","exec","index","schemeMatch","isAuthorityMatch","isValidSchemeUrl","tldUrlHostMatch","hostLabels","isValidTldMatch","toUrlMatchType","pop","cleanNumber","stateMachineMatchType","machine","CurrentTag","isOpening","isClosing","noCurrentTag","ParseHtmlContext","callbacks","currentDataIdx","currentTag","stateData","startNewTag","stateTagOpen","stateTagName","captureTagName","emitTagAndPreviousTextNode","resetToDataState","stateEndTagOpen","stateBeforeAttributeName","stateAttributeName","stateAfterAttributeName","stateBeforeAttributeValue","stateAttributeValueDoubleQuoted","stateAttributeValueSingleQuoted","stateAttributeValueUnquoted","stateAfterAttributeValueQuoted","reconsumeCurrentChar","stateSelfClosingStartTag","stateMarkupDeclarationOpen","stateCommentStart","stateCommentStartDash","stateComment","stateCommentEndDash","stateCommentEnd","stateCommentEndBang","stateDoctype","textBeforeTag","onText","onComment","onDoctype","onOpenTag","onCloseTag","byMatchOffset","a","b","Autolinker","urls","version","phone","replaceFn","sanitizeHtml","schemeMatches","tldMatches","ipV4Matches","Number","POSITIVE_INFINITY","link","textOrHtml","parse","skipTagNames","skipTagsStackCount","emitText","parseHtml","textSplit","currentOffset_1","forEach","splitText","textNodeMatches","parseText","max","compactMatches","removeUnwantedMatches","sort","matchedTextLength","removeIdx","stateMachines","stateIdx","prevCharCode","parseMatches","getTagBuilder","numTextMatches","newHtml","lastIndex","createMatchReturnVal","replaceFnResult","isHashtagTextChar","isValidHashtag","hashtagServices","tldRegex","module","exports","src","w","h","size","intData","stride","ctx","canvas","imgData","l","cutoff","radius","channel","ArrayBuffer","isView","HTMLCanvasElement","getContext","getImageData","CanvasRenderingContext2D","ImageData","Uint8ClampedArray","Uint8Array","gridOuter","gridInner","f","d","z","v","INF","pow","edt","dist","Float32Array","min","x","y","edt1d","sqrt","n","q","k","s","bottom","right","left","auto","basePlacements","start","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","getWindow","node","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","enabled","phase","_ref","elements","style","styles","removeAttribute","setAttribute","effect","_ref2","initialStyles","position","strategy","margin","arrow","property","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","item","brand","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","offsetHeight","visualViewport","addVisualOffsets","offsetLeft","offsetTop","getLayoutRect","abs","contains","child","rootNode","getRootNode","next","isSameNode","parentNode","getComputedStyle","isTableElement","getDocumentElement","documentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mergePaddingObject","paddingObject","expandToHashMap","hashMap","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","axisProp","centerOffset","_options$element","querySelector","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","addEventListener","update","removeEventListener","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","body","listScrollParents","list","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","direction","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","computeAutoPlacement","referenceRect","checksMap","Map","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","set","_loop","_i","fittingPlacement","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","order","modifiers","visited","Set","result","modifier","add","dep","has","depModifier","DEFAULT_OPTIONS","areValidElements","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","_ref$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","eventListeners","elementMap","Data","instanceMap","console","from","delete","TRANSITION_END","parseSelector","selector","CSS","escape","toType","object","triggerTransitionEnd","dispatchEvent","Event","jquery","nodeType","getElement","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","summary","isDisabled","Node","ELEMENT_NODE","classList","disabled","hasAttribute","getAttribute","findShadowRoot","attachShadow","root","noop","reflow","getjQuery","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","NAME","JQUERY_NO_CONFLICT","jQueryInterface","Constructor","noConflict","readyState","execute","possibleCallback","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","getTransitionDurationFromElement","called","handler","getNextActiveElement","activeElement","shouldGetNext","isCycleAllowed","listLength","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","values","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","one","inNamespace","isNamespace","startsWith","elementEvent","keyHandlers","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","obj","meta","_unused","normalizeData","JSON","normalizeDataKey","chr","Manipulator","setDataAttribute","removeDataAttribute","getDataAttributes","bsKeys","dataset","pureKey","getDataAttribute","Config","Default","DefaultType","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","expectedTypes","valueType","TypeError","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","VERSION","eventName","getSelector","hrefAttribute","sel","SelectorEngine","findOne","parents","ancestor","prev","previous","previousElementSibling","nextElementSibling","focusableChildren","focusables","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","EVENT_KEY$b","EVENT_CLOSE","EVENT_CLOSED","Alert","close","_destroyElement","SELECTOR_DATA_TOGGLE$5","Button","button","EVENT_KEY$9","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","Default$c","endCallback","leftCallback","rightCallback","DefaultType$c","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","pointerType","maxTouchPoints","EVENT_KEY$8","DATA_API_KEY$5","ARROW_LEFT_KEY$1","ARROW_RIGHT_KEY$1","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN$1","EVENT_MOUSEENTER$1","EVENT_MOUSELEAVE$1","EVENT_DRAG_START","EVENT_LOAD_DATA_API$3","EVENT_CLICK_DATA_API$5","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE$2","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","Default$b","interval","keyboard","pause","ride","touch","wrap","DefaultType$b","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_KEY$7","EVENT_SHOW$6","EVENT_SHOWN$6","EVENT_HIDE$6","EVENT_HIDDEN$6","EVENT_CLICK_DATA_API$4","CLASS_NAME_SHOW$7","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","SELECTOR_DATA_TOGGLE$4","Default$a","DefaultType$a","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","scrollSize","triggerArray","isOpen","NAME$a","EVENT_KEY$6","DATA_API_KEY$3","ARROW_UP_KEY$1","ARROW_DOWN_KEY$1","EVENT_HIDE$5","EVENT_HIDDEN$5","EVENT_SHOW$5","EVENT_SHOWN$5","EVENT_CLICK_DATA_API$3","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_SHOW$6","SELECTOR_DATA_TOGGLE$3","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$9","autoClose","display","popperConfig","DefaultType$9","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","clearMenus","openToggles","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","NAME$9","CLASS_NAME_SHOW$5","EVENT_MOUSEDOWN","Default$8","clickCallback","rootElement","DefaultType$8","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","EVENT_KEY$5","EVENT_FOCUSIN$2","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","Default$7","autofocus","trapElement","DefaultType$7","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","EVENT_KEY$4","EVENT_HIDE$4","EVENT_HIDE_PREVENTED$1","EVENT_HIDDEN$4","EVENT_SHOW$4","EVENT_SHOWN$4","EVENT_RESIZE$1","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS$1","EVENT_CLICK_DATA_API$2","CLASS_NAME_OPEN","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","Default$6","DefaultType$6","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","EVENT_KEY$3","DATA_API_KEY$1","EVENT_LOAD_DATA_API$2","CLASS_NAME_SHOW$3","CLASS_NAME_SHOWING$1","CLASS_NAME_HIDING","OPEN_SELECTOR","EVENT_SHOW$3","EVENT_SHOWN$3","EVENT_HIDE$3","EVENT_HIDE_PREVENTED","EVENT_HIDDEN$3","EVENT_RESIZE","EVENT_CLICK_DATA_API$1","EVENT_KEYDOWN_DISMISS","Default$5","DefaultType$5","Offcanvas","blur","DefaultAllowlist","area","br","col","dd","div","dl","dt","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","Default$4","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultType$4","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$2","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","animation","customClass","DefaultType$3","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","toggleEnabled","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Default$2","DefaultType$2","Popover","_getContent","EVENT_KEY$2","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API$1","CLASS_NAME_ACTIVE$1","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","Default$1","rootMargin","smoothScroll","threshold","DefaultType$1","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","activeNodes","spy","EVENT_KEY$1","EVENT_HIDE$1","EVENT_HIDDEN$1","EVENT_SHOW$1","EVENT_SHOWN$1","EVENT_CLICK_DATA_API","EVENT_KEYDOWN","EVENT_LOAD_DATA_API","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","HOME_KEY","END_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","SELECTOR_DROPDOWN_TOGGLE","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting","bind","$apply","$call","$reflectApply","actualApply","Function","$TypeError","$actualApply","Reflect","setFunctionLength","$defineProperty","callBindBasic","applyBind","originalFunction","func","adjustedLength","GetIntrinsic","$indexOf","allowMissing","intrinsic","clone","store","last","init","product","row","j","r","DataTable","dataTable","toolbar_prefix","dom","ext","factory","Scroller","opts","dtApi","Api","tableTop","tableBottom","redrawTop","redrawBottom","autoHeight","viewportRows","stateTO","stateSaveThrottle","drawTO","heights","jump","page","virtual","labelHeight","xbar","topRowFloat","scrollDrawDiff","loaderVisible","forceReposition","baseRowTop","baseScrollTop","mousedown","lastScrollTop","oDefaults","rowHeight","force","scroller","table","loader","oScroller","construct","alert","measure","redraw","_calcRowHeight","_parseHeight","_iDisplayLength","displayBuffer","draw","pageInfo","iScrollTop","iTotal","fnRecordsDisplay","iPossibleEnd","pixelsToRow","ani","pixels","intParse","diff","_domain","rowToPixels","rowIdx","scrollToRow","animate","that","px","drawRow","_iDisplayStart","oFeatures","bPaginate","appendChild","appendTo","ingnoreScroll","_scroll","labelVisible","_info","initialStateSave","loadedState","loaded","topRow","util","throttle","save","scrollType","_draw","_scrollForce","nTable","nTableWrapper","origTable","cloneNode","tbody","dtClasses","oClasses","versionCheck","scrolling","sWrapper","sScrollWrapper","sScrollBody","rowsCount","insertEl","nHolding","removeAttr","eq","iTableHeight","displayStart","displayLen","displayEnd","viewportEndY","skip","bSorted","bFiltered","_drawHold","newTableTop","diffPx","boundaryPx","boundaryScale","bStateSave","oLoadedState","ajaxSourced","sAjaxSource","ajax","bServerSide","iDraw","bInfo","triggerHandler","magic","language","oLanguage","info","total","recordsDisplay","recordsTotal","diffRows","possibleEnd","sInfoEmpty","sInfoPostFix","sInfoFiltered","sInfo","_macros","fnInfoCallback","oInstance","aanFeatures","iLen","api","formatter","fnFormatNumber","i18n","cssHeight","unit","iTopRow","preRows","targetTop","processing","oApi","_fnProcessingDisplay","serverWait","labelFactor","oInit","register","iterator","displayIdx","rows","indexes","o","M","weekdays","months","ordinal","t","utcOffset","date","year","month","D","ms","Q","g","S","O","locale","$L","utc","$u","$x","$offset","$d","Date","NaN","UTC","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","isSame","startOf","endOf","isAfter","isBefore","$g","unix","valueOf","getTime","toDate","$locale","weekStart","$set","daysInMonth","subtract","format","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","toJSON","toISOString","toUTCString","$i","isDayjs","en","Ls","default","mm","hh","MM","yy","yearStart","formats","LTS","LT","L","LL","LLL","LLLL","relativeTime","future","past","zone","A","afternoon","milliseconds","SS","SSS","ss","H","HH","DD","Do","day","ww","MMM","MMMM","Y","YY","YYYY","Z","ZZ","parser","hours","customParseFormat","parseTwoDigitYear","minutes","seconds","week","years","days","weeks","$l","negative","parseFromMilliseconds","calMilliseconds","as","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","duration","isDuration","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","$SyntaxError","gopd","nonEnumerable","nonWritable","nonConfigurable","loose","desc","writable","hasProtoAccessor","callBind","gOPD","__proto__","$Object","$getPrototypeOf","getPrototypeOf","EvalError","RangeError","ReferenceError","SyntaxError","URIError","_createForOfIteratorHelper2","Symbol","_unsupportedIterableToArray2","done","return","_classCallCheck2","_defineProperties","_createClass2","_toConsumableArray2","_arrayWithoutHoles2","_iterableToArray2","_nonIterableSpread2","_arrayLikeToArray2","_typeof2","define","fs","exists","true","false","workbook","worksheet","regeneratorRuntime","mark","sent","createReadStream","abrupt","stop","_createInputStream","pipe","warn","addWorksheet","sheetName","dateFormats","isNaN","parserOptions","addRow","emit","getWorksheet","sheetId","formatterOptions","dateFormat","dateUTC","hyperlink","formula","stringify","includeEmptyRows","eachRow","encoding","createWriteStream","dayjs","decodeAddress","nativeCol","nativeColOff","nativeRow","nativeRowOff","colWidth","getColumn","isCustomWidth","getRow","slideFormula","_row","_column","validateAddress","_address","_value","create","Types","Null","_mergeStyle","_mergeCount","numFmt","font","alignment","border","fill","protection","toCsvString","release","Merge","isMergedTo","Hyperlink","definedNames","addEx","fullAddress","removeEx","removeAllNames","letter","effectiveType","master","_comment","note","escapeHtml","formulaType","address","names","getNamesEx","dataValidations","_dataValidations","model","comment","fromModel","ValueType","richText","RichText","tooltip","_master","addMergeRef","releaseMergeRef","cell","Formula","shareType","ref","sharedFormula","_translatedFormula","findCell","_copyModel","ranges","cells","_getTranslatedFormula","FormulaType","Master","Shared","None","SharedString","rawValue","sharedString","types","_worksheet","_number","defn","isDefault","equivalentTo","outlineLevel","collapsed","headers","isEqual","getCell","eachCell","n2l","header","_header","_hidden","getColumnKey","deleteColumnKey","setColumnKey","_outlineLevel","properties","outlineLevelCol","_applyStyle","matrixMap","decodeEx","getMatrix","addCellEx","removeCellEx","findCellEx","findCellAt","_explore","$shortRange","forEachInSheet","spliceRows","normaliseMatrix","spliceColumns","getRanges","addCell","RelationshipType","OfficeDocument","Worksheet","CalcChain","SharedStrings","Styles","Theme","DocumentType","Xlsx","ReadingOrder","LeftToRight","RightToLeft","ErrorValue","NotApplicable","Ref","Name","DivZero","Value","Num","imageId","hyperlinks","range","tl","editAs","decode","deepMerge","DEFAULT_CONFIGS","margins","insetmode","inset","locked","lockText","setTLBR","dimensions","expand","containsEx","encodeAddress","_serialisedSheetName","$t$l","$b$r","count","$range","_cells","_commitRow","l2n","getCellEx","includeEmpty","man","rowBreaks","eachColumnKey","outlineLevelRow","$col$row","column","cacheState","_set","filterButton","totalsRowLabel","totalsRowFunction","totalsRowResult","totalsRowFormula","validate","filterHeight","tableHeight","autoFilterRef","encode","tableRef","getFormula","headerRow","totalsRow","_cache","_assign","displyName","displayName","showFirstColumn","showLastColumn","showRowStripes","showColumnStripes","created","modified","calcProperties","_worksheets","views","media","_definedNames","nextId","trace","tabColor","argb","theme","indexed","orderNo","worksheets","_themes","_xlsx","_csv","creator","lastModifiedBy","lastPrinted","sheets","company","manager","subject","keywords","category","description","revision","contentStatus","themes","findIndex","_rows","_columns","_keys","_merges","_workbook","defaultRowHeight","dyDescent","pageSetup","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","showRowColHeaders","showGridLines","firstPageNumber","horizontalCentered","verticalCentered","colBreaks","headerFooter","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","autoFilter","_media","sheetProtection","tables","conditionalFormattings","removeWorksheetEx","_nextRow","hasValues","getAddress","_mergeCellsInternal","intersects","merge","unmerge","_unMergeMaster","sheet","spinCount","isFinite","algorithmName","saltValue","randomBytes","hashValue","convertPasswordToHash","mergeCells","mergeCellsWithoutStyle","_headerRowCount","cellCount","_lastRowNumber","cols","toModel","merges","_parseRows","_parseMergeCells","Workbook","getCellAt","findSheet","findSheetRow","findRowCell","getOwnPropertySymbols","getOwnPropertyDescriptor","_dictionary","_l2n","_n2l","_level","_fill","_hash","getOwnPropertyDescriptors","defineProperties","inRange","createHash","digest","getHashes","alloc","writeUInt32LE","Buffer","buffer","crypto","setPrototypeOf","SaxesParser","sham","Proxy","readableObjectMode","saxesParser","eventType","Transform","saxes","_data","_encoding","toBuffer","copy","_buffer","_buf","iRead","iWrite","bufSize","buffers","batch","corked","inPos","outPos","pipes","paused","inherits","Duplex","_getWritableBuffer","full","_pipe","all","_writeToBuffers","nop","nextTick","cork","_flush","uncork","eod","setEncoding","resume","isPaused","unpipe","unshift","_inPos","_grow","capacity","keyBy","strcmp","isUndefined","isObject","promiseImmediate","setImmediate","super_","dateToExcel","excelToDate","parsePath","lastIndexOf","getRelsPath","xmlEncode","xmlDecode","validInt","isDateFmt","access","constants","F_OK","toIsoDateString","toIsoString","subsstr","self","timers","_xml","_stack","_rollbacks","tos","leaf","openNode","writeText","closeNode","xml","stack","cursor","closeAll","StdDocAttributes","standalone","jsZip","stream","getEntryType","loadAsync","async","autodrain","_finished","t0","catch","EventEmitter","compression","zip","base64","file","generateAsync","ZipReader","ZipWriter","jszip","Image","CoreProperties","ExtenderProperties","Comments","VmlDrawing","Table","xform","parseOpen","parseClose","render","toXml","toAttribute","localSheetId","_parsedName","_parsedLocalSheetId","_parsedText","leafNode","rId","calcId","fullCalcOnLoad","date1904","defaultThemeVersion","filterPrivacy","xWindow","yWindow","windowWidth","windowHeight","firstSheet","activeTab","visibility","fileVersion","STATIC_XFORMS","workbookPr","bookViews","tag","childXform","calcPr","printArea","printTitlesRow","printTitlesColumn","openXml","WORKBOOK_ATTRIBUTES","workbookRels","Id","worksheetHash","Target","xmlns","appName","lastEdited","lowestEdited","rupBuild","richTextXform","_richTextXform","authorId","COMMENTS_ATTRIBUTES","comments","_model","getAnchorRect","getDefaultRect","refAddress","ObjectType","normalizeModel","DRAWING_ATTRIBUTES","coordsize","joinstyle","gradientshapeok","anchors","reconcile","V_SHAPE_ATTRIBUTES","color2","color","obscured","fillcolor","strokecolor","toFixed","conversionUnit","reverseConversionUnit","createNewModel","onParserClose","baseType","Company","Manager","HeadingPairs","TitleOfParts","PROPERTY_ATTRIBUTES","DateFormat","DateAttrs","extension","Extension","ContentType","PartName","sharedStrings","drawings","commentRefs","commentName","CORE_PROPERTY_ATTRIBUTES","identifier","contentType","Relationship","_values","RELATIONSHIPS_ATTRIBUTES","rels","mediaIndex","cstate","noChangeAspect","zero","anchorType","prepare","uri","addAttribute","cx","cy","picture","medium","reconcilePicture","mergeModel","prst","always","empty","$count","maxItems","richTextXForm","addStyleModel","styleId","ssId","si","siFormulae","formulae","expandToAddress","renderFormula","getStyleModel","getString","hyperlinkMap","commentsMap","iconSet","iconId","toIntValue","v4","databarXform","iconSetXform","isExt","custom","x14Id","renderDataBar","renderIconSet","priority","uuid","fExtXform","sqRef","cfRule","rules","cfXform","hasExtContent","cfvoXform","borderColorXform","negativeBorderColorXform","negativeFillColorXform","axisColorXform","gradient","minLength","toIntAttribute","maxLength","toBoolAttribute","negativeBarColorSameAsPositive","negativeBarBorderColorSameAsPositive","axisPosition","cfvo","borderColor","negativeBorderColor","negativeFillColor","axisColor","toBoolValue","toStringValue","cfIconXform","toStringAttribute","reverse","showValue","icons","dataBar","extLst","extLstRefXform","formulaXform","colorScale","colorScaleXform","renderExpression","renderCellIs","renderTop10","renderAboveAverage","renderColorScale","renderText","renderTimePeriod","dxfId","operator","percent","rank","aboveAverage","isPrimitive","timePeriod","toFloatValue","colorXform","sqref","addDxfStyle","getDxfStyle","idXform","bestFit","dataValidation","marked","allowBlank","showInputMessage","promptTitle","prompt","showErrorMessage","errorStyle","errorTitle","_dataValidation","_formula","forEachAddress","addRollback","commit","rollback","summaryBelow","summaryRight","useFirstPageNumber","usePrinterDefaults","copies","headings","gridLines","numRowsSeen","spans","ht","defaultColWidth","customHeight","pageSetUpPr","outlinePr","outlineProperties","selectLockedCells","selectUnlockedCells","formatCells","formatColumns","formatRows","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","pivotTables","objects","scenarios","frozen","frozenSplit","workbookViewId","rightToLeft","tabSelected","showRuler","zoomScale","zoomScaleNormal","xSplit","ySplit","topLeftCell","activePane","pane","activeCell","sheetView","view","selections","topLeft","E","R","T","C","P","I","N","F","maxRows","maxCols","sheetPr","sheetViews","sheetFormatPr","sheetData","pageMargins","printOptions","drawing","tableParts","conditionalFormatting","Type","TargetMode","vmlDrawing","background","image","drawingsCount","preImageId","WORKSHEET_ATTRIBUTES","B","relationships","vmlDrawings","_format","_parse","addAttributes","writeXml","sb","eb","fontXform","textXform","_textXform","_fontXform","FONT_OPTIONS","fontNameTag","rPh","rich","addRichText","addText","sharedStringXform","uniqueCount","_sharedStringXform","_text","fromCharCode","horizontalValues","horizontal","verticalValues","vertical","wrapText","shrinkToFit","textRotation","indent","readingOrder","defaultColor","validStyleValues","diagonal","up","down","diagonalUp","diagonalDown","tint","rgb","fgColor","bgColor","pattern","patternType","degree","stops","patternFill","gradientFill","validPatternValues","StopXform","PatternFillXform","GradientFillXform","OPTIONS","charset","condense","family","outline","vertAlign","shadow","strike","sz","formatCode","numFmtId","getDefaultFmtId","getDefaultFmtCode","xfId","fontId","fillId","borderId","numFmts","fonts","fills","borders","cellStyleXfs","cellXfs","dxfs","cellStyles","tableStyles","numFmtNextId","initIndex","_addBorder","_addStyle","_addFill","weakMap","WeakMap","STYLESHEET_ATTRIBUTES","_addFont","_addNumFmtStr","builtinId","defaultTableStyle","defaultPivotStyle","defaultSlicerStyle","defaultTimelineStyle","dateStyleId","_dateStyleId","Mock","Attributes","single","double","singleAccounting","doubleAccounting","filterColumn","colId","hiddenButton","tableColumns","tableStyleInfo","TABLE_ATTRIBUTES","totalsRowCount","totalsRowShown","headerRowCount","readFile","U","V","W","X","K","parseStream","drawingRels","worksheetRels","sheetNo","globalRels","sheetDefs","parseRels","parseWorkbook","_processWorksheetEntry","_processWorksheetRelsEntry","_processThemeEntry","_processMediaEntry","_processDrawingEntry","_processCommentEntry","_processTableEntry","_processDrawingRelsEntry","_processVmlDrawingEntry","t1","filename","theme1","RelType","finalize","useSharedStrings","useStyles","prepareModel","addContentTypes","addOfficeRels","addWorkbookRels","addWorksheets","addSharedStrings","addDrawings","addTables","addThemes","addStyles","addMedia","addApp","addCore","addWorkbook","_finalize","bignum","base","decoders","encoders","_createNamed","runInThisContext","_initNamed","_getDecoder","_getEncoder","vm","Reporter","isBuffer","byteLength","DecoderBuffer","reporter","restore","isEmpty","readUInt8","_reporterState","raw","EncoderBuffer","_baseState","enc","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","_wrap","_init","equal","_useArgs","def","_decode","wrapResult","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","track","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","_createEncoderBuffer","_encode","_encodeValue","_skipDefault","_encodeChoice","_encodePrimitive","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","rethrow","pathLen","message","partial","captureStackTrace","tagClass","tagClassByName","_reverse","tagByName","der","entity","tree","cls","primitive","tagStr","_skipUntilEnd","unused","readUInt16BE","pem","writeUInt16BE","toArray","sign","defaultBuffer","toByteArray","fromByteArray","isBN","words","red","BN","wordSize","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","imuln","_iaddn","_expand","_normSign","inspect","isZero","modn","idivn","toNumber","toArrayLike","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","zeroBits","toTwos","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","setn","iadd","isub","G","J","ee","te","re","ne","oe","ie","ae","se","ue","ce","fe","le","he","de","pe","ye","me","imul","be","ve","ge","we","_e","ke","xe","Se","Oe","Ee","Re","je","Te","Ce","Pe","Ae","Me","Ie","mulp","mulTo","makeRBT","revBin","permute","cos","PI","sin","guessLen13b","conjugate","normalize13b","convert13b","stub","mul","mulf","muln","sqr","isqr","iushln","ishln","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mod","divmod","divn","umod","divRound","egcd","isEven","isOdd","gcd","_invmp","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","toRed","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","redInvm","redNeg","redPow","k256","p224","p192","p25519","tmp","_tmp","_prime","prime","r2","imod","rinv","minv","ireduce","imulK","mont","rand","generate","Rand","_rand","getBytes","getByte","getRandomValues","msCrypto","readUInt32BE","SBOX","INV_SBOX","SUB_MIX","INV_SUB_MIX","_reset","blockSize","keySize","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","allocUnsafe","writeUInt32BE","decryptBlock","scrub","AES","_cipher","_ghash","_finID","writeUIntBE","_prev","_secCache","_decrypt","_alen","_mode","_authTag","_called","_update","encrypt","_final","final","getAuthTag","setAuthTag","setAAD","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","_last","_autopadding","cache","mode","iv","decrypt","flush","setAutoPadding","evp_bytestokey","equals","writeUInt8","ghash","_multiply","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","cipher","aes128","aes192","aes256","instantiate","EDE","DES","_des","des","des3","blinder","modulus","publicExponent","unblinder","prime1","prime2","coefficient","exponent1","exponent2","getr","randombytes","sha224WithRSAEncryption","sha256WithRSAEncryption","sha384WithRSAEncryption","sha512WithRSAEncryption","sha256","sha224","sha384","sha512","DSA","ripemd160WithRSA","md5WithRSAEncryption","Writable","_hashType","_tag","_signType","_write","verify","Sign","Verify","createSign","createVerify","ec","curve","keyFromPrivate","privateKey","toDER","params","priv_key","getKey","makeKey","elliptic","algorithm","subjectPrivateKey","pub_key","signature","dup","isEncoding","toPrimitive","SlowBuffer","INSPECT_MAX_BYTES","kMaxLength","TYPED_ARRAY_SUPPORT","foo","byteOffset","species","poolSize","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","toLocaleString","_arr","subarray","readUIntLE","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUInt16LE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","copyWithin","ieee754","StringDecoder","hashMode","_finalOrDigest","__final","_decoder","_toString","_transform","string_decoder","callee","global","stat","noTargetGet","forced","globalThis","propertyIsEnumerable","enforce","getterFor","normalize","NATIVE","POLYFILL","stopped","MutationObserver","WebKitMutationObserver","process","domain","exit","enter","createTextNode","characterData","promise","reject","unsafe","copyright","clearImmediate","MessageChannel","Dispatch","postMessage","protocol","now","port2","port1","onmessage","importScripts","onreadystatechange","removeChild","fetch","versions","v8","createEvent","PromiseRejectionEvent","finally","notified","reactions","ok","fail","rejection","reason","initEvent","race","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isRegExp","isDate","isFunction","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","generateKeys","genKeyPair","getPublicKey","computeSecret","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_importPrivate","ripemd160","_alg","_ipad","_opad","rng","pseudoRandomBytes","prng","Hash","createHmac","Hmac","pbkdf2","pbkdf2Sync","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","randomFill","randomFillSync","createCredentials","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","NPN_ENABLED","ALPN_ENABLED","RSA_PKCS1_PADDING","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","randomfill","amd","pl","hour","minute","second","millisecond","ddd","dddd","dayjs_plugin_customParseFormat","dayjs_plugin_utc","utils","_cbcInit","_cbcState","bufferOff","_updateDecrypt","_updateEncrypt","_flushBuffer","_finalEncrypt","_finalDecrypt","_pad","_unpad","_desState","deriveKeys","pc1","r28shl","pc2","ip","_encrypt","substitute","rip","ciphers","_edeState","padSplit","binary","hex","gen","_pub","_priv","setGenerator","__prime","_primeLen","_primeCode","simpleSieve","fermatTest","__gen","_gen","getPrime","getGenerator","modp1","modp2","modp5","modp14","modp15","modp16","modp17","modp18","curves","eddsa","brorand","getNAF","getJSF","assert","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","redN","_maxwellTrick","precomputed","point","_fixedNafMul","_getDoubles","step","jpoint","mixedAdd","points","toP","_wnafMul","_getNAFPoints","wnd","dblp","_wnafMulAdd","toJ","BasePoint","decodePoint","pointFromX","encodeCompressed","getY","precompute","doubles","naf","beta","_getBeta","_hasDoubles","dbl","twisted","mOneA","extended","c2","oneC","zOne","_mulA","_mulC","pointFromY","isInfinity","fromJSON","_extDbl","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","eqXToP","short","edwards","i4","a24","diffAdd","jumlAdd","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","inf","_getEndoRoots","lambda","basis","_getEndoBasis","_endoSplit","k1","k2","_endoWnafMulAdd","_zeroDbl","_threeDbl","_dbl","trpl","PresetCurve","nh","keyPair","fromPrivate","fromPublic","pers","persEnc","entropy","hmacStrength","entropyEnc","nonce","_truncateToN","canonical","recoveryParam","recoverPubKey","getKeyRecoveryParam","priv","pub","privEnc","pubEnc","derive","_importDER","place","log","LN2","parseBytes","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","encodePoint","pubBytes","makeSignature","Rencoded","intFromLE","fromSecret","encodeInt","decodeInt","isPoint","cachedProperty","_secret","secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","toHex","zero2","_from","_id","_inBundle","_integrity","_location","_phantomChildren","_requested","registry","escapedName","rawSpec","saveSpec","fetchSpec","_requiredBy","_resolved","_shasum","_spec","_where","author","bugs","bundleDependencies","dependencies","deprecated","devDependencies","brfs","coveralls","grunt","istanbul","jscs","jshint","mocha","files","homepage","license","repository","scripts","lint","_events","_eventsCount","_maxListeners","defaultMaxListeners","newListener","listener","warned","emitter","fired","removeListener","wrapFn","setMaxListeners","getMaxListeners","addListener","prependListener","once","prependOnceListener","removeAllListeners","listeners","rawListeners","listenerCount","eventNames","ownKeys","__esModule","objectMode","hasWrittenBOM","rowFormatter","writeBOM","rowTransform","BOM","finish","FormatterOptions","delimiter","rowDelimiter","quote","quoteColumns","quoteHeaders","includeEndRowDelimiter","alwaysWriteHeaders","shouldWriteHeaders","escapedQuote","_headers","REPLACE_REGEXP","ESCAPE_REGEXP","quoteField","shouldQuote","rowCount","fieldFormatter","_rowTransform","hasWrittenHeaders","isHashArray","callTransformer","checkHeaders","shouldFormatColumns","gatherColumns","gatherHeaders","createTransform","RowFormatter","FieldFormatter","CsvFormatterStream","promisify","writeToStream","writeToBuffer","writeToString","writeToPath","parseString","parseFile","fromString","deprecate","fromStream","fromPath","lines","parsedRowCount","parsedLineCount","endEmitted","Parser","headerTransformer","HeaderTransformer","decoder","rowTransformerValidator","RowTransformerValidator","rowValidator","hasHitRowLimit","processRows","line","shouldSkipLine","transformRow","pushRow","shouldEmitRows","transformAndValidate","limitRows","skipRows","skipLines","ParserOptions","ignoreEmpty","escapeChar","supportsComments","ltrim","rtrim","renameHeaders","strictColumnHandling","discardUnmappedColumns","carriageReturn","escapedDelimiter","NEXT_TOKEN_REGEXP","CsvParserStream","Readable","rowParser","Scanner","removeBOM","hasMoreData","parseWithComments","parseWithoutComments","parseRow","nextCharacterToken","Token","isTokenComment","advancePastLine","lineFromCursor","hasMoreCharacters","truncateToCursor","nextNonSpaceToken","isTokenRowDelimiter","isTokenCarriageReturn","isTokenDelimiter","columnParser","ColumnParser","getStartToken","advancePastToken","shouldSkipColumnParse","lineLength","startCursor","endCursor","token","trimLeft","trimRight","quotedColumnParser","nonQuotedColumnParser","isTokenQuote","advanceToToken","columnFormatter","isTokenEscapeCharacter","gatherDataBetweenQuotes","foundClosingQuote","advanceTo","checkForMalformedColumn","NonQuotedColumnParser","QuotedColumnParser","ColumnFormatter","RowParser","receivedHeaders","shouldUseFirstRow","processedFirstRow","headersLength","setHeaders","headersTransform","shouldMapRow","processRow","mapHeaders","_rowValidator","isSyncTransform","isSyncValidate","callValidator","createValidator","_block","_blockSize","_blockOffset","_length","_finalized","_digest","common","sha","ripemd","hmac","sha1","pendingTotal","outSize","padLength","endian","_delta8","_delta32","BlockHash","join32","inner","outer","rotl32","sum32","sum32_3","sum32_4","toHex32","split32","sum32_5","ft_1","ch32","maj32","s0_256","s1_256","g0_256","g1_256","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","_prepareBlock","rotr32","p32","htonl","zero8","predResist","outLen","minEntropy","_reseed","reseedInterval","nonceEnc","_hmac","reseed","getTypeOf","uint8array","compressedSize","uncompressedSize","crc32","compressedContent","getContentWorker","uncompressWorker","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","DEFLATE","createFolders","compressionOptions","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","processChunk","_createPako","transformTo","cleanUp","level","onData","pako","utf8encode","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","DATA_DESCRIPTOR","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","openedSource","closedSource","CENTRAL_DIRECTORY_END","prepareNextSource","registerPrevious","generatedError","lock","generateWorker","platform","_compressWorker","support","external","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","fileNameStr","fileCommentStr","_upstreamEnded","_bindStream","_stream","_helper","_read","newBufferFrom","allocBuffer","folder","generateInternalStream","mimeType","checkSupport","generateNodeStream","toNodejsStream","byteAt","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","readInt","readString","readDate","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","_tickScheduled","_tickAndRepeat","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","_worker","newBlob","array","arraybuffer","nodebuffer","blob","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","FileReader","onload","onerror","readAsArrayBuffer","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_dataBinary","internalStream","_decompressWorker","nodeStream","queue","outcome","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","immediate","binding","isTypedArray","IE_PROTO","__data__","Le","Ye","He","qe","$e","Ue","Ke","Ve","Xe","Fe","Ne","Be","Ze","We","ze","Cache","toStringTag","_a","_b","_c","_d","_randbelow","_randrange","getDivisor","chunkSize","windowBits","memLevel","gzip","err","msg","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","input","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","inflateSetDictionary","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","pending_buf","pending_out","total_out","_tr_flush_block","block_start","strstart","max_chain_length","prev_length","nice_match","w_size","w_mask","good_match","lookahead","match_start","window_size","hash_size","head","adler","total_in","insert","ins_h","hash_shift","hash_mask","match_length","_tr_tally","max_lazy_match","last_lit","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","data_type","_tr_init","deflateInit","deflateReset","deflateResetKeep","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","sane","havedict","flags","wbits","ncode","nlen","ndist","have","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","certificate","seq","int","RSAPrivateKey","RSAPublicKey","bitstr","PublicKey","objid","null_","octstr","PrivateKey","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","namedCurve","utcTime","utctime","generalTime","gentime","setof","seqof","rdnSequence","bool","passphrase","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","salt","iters","algo","parameters","subtle","importKey","deriveBits","iterations","browser","md5","rmd160","ipad1","ipad2","opad","alg","blocksize","run","fun","env","argv","cwd","chdir","umask","codes","allowHalfOpen","readable","_writableState","highWaterMark","getBuffer","_readableState","destroyed","ReadableState","debuglog","getHighWaterMark","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","pipesCount","flowing","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_destroy","first","consume","finished","_undestroy","undestroy","stdout","stderr","hasUnpiped","needDrain","asyncIterator","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","_transformState","transforming","writecb","writechunk","afterTransform","needTransform","writeencoding","pendingcb","corkedRequestsFree","WritableState","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","writableObjectMode","finalCalled","ending","decodeStrings","writing","bufferProcessing","onwrite","writelen","errorEmitted","bufferedRequest","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","isBuf","allBuffers","chunk","hasInstance","setDefaultEncoding","tail","_getString","_getBuffer","customInspect","ERR_STREAM_PREMATURE_CLOSE","req","setHeader","abort","ERR_MISSING_ARGS","ERR_INVALID_OPT_VALUE","Stream","PassThrough","pipeline","_invoke","delegate","_sent","dispatchException","__await","resultName","nextLoc","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","completion","isGeneratorFunction","awrap","AsyncIterator","rval","complete","delegateYield","isS","isChar","isNameStartChar","isNameChar","S_LIST","NAME_RE","isNCNameStartChar","isNCNameChar","NC_NAME_RE","amp","quot","apos","EVENTS","xmldecl","processinginstruction","doctype","opentagstart","opentag","closetag","cdata","ready","opt","fragmentOpt","xmlnsOpt","trackPosition","nameStartCheck","nameCheck","isName","processAttribs","processAttribsNS","pushAttrib","pushAttribNS","ns","additionalNamespaces","processAttribsPlain","pushAttribPlain","stateTable","sBegin","sBeginWhitespace","sDoctype","sDoctypeQuote","sDTD","sDTDQuoted","sDTDOpenWaka","sDTDOpenWakaBang","sDTDComment","sDTDCommentEnding","sDTDCommentEnded","sDTDPI","sDTDPIEnding","sText","sEntity","sOpenWaka","sOpenWakaBang","sComment","sCommentEnding","sCommentEnded","sCData","sCDataEnding","sCDataEnding2","sPIFirstChar","sPIRest","sPIBody","sPIEnding","sXMLDeclNameStart","sXMLDeclName","sXMLDeclEq","sXMLDeclValueStart","sXMLDeclValue","sXMLDeclSeparator","sXMLDeclEnding","sOpenTag","sOpenTagSlash","sAttrib","sAttribName","sAttribNameSawWhite","sAttribValue","sAttribValueQuoted","sAttribValueClosed","sAttribValueUnquoted","sCloseTag","sCloseTagSawWhite","openWakaBang","piTarget","tags","topNS","chunkPosition","prevI","carriedFromPrevious","forbiddenState","attribList","reportedTextBeforeRoot","reportedTextAfterRoot","closedRoot","sawRoot","xmlDeclPossible","xmlDeclExpects","entityReturnState","defaultXMLVersion","forceXMLVersion","setXMLVersion","positionAtNewLine","_closed","xmlDecl","ENTITIES","readyHandler","makeError","errorHandler","closed","getCode","getCodeNorm","currentXMLVersion","getCode10","getCode11","skipSpaces","unget","captureTo","doctypeHandler","fromCodePoint","captureToChar","handleTextInRoot","handleTextOutsideRoot","parseEntity","commentHandler","cdataHandler","piHandler","xmldeclHandler","captureNameChars","openTagStartHandler","openTag","openSelfClosingTag","closeTag","textHandler","qname","attributeHandler","endHandler","resolvePrefix","isSelfClosing","openTagHandler","closeTagHandler","_finalSize","_w","_f","_g","_h","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","_isStdio","readableHighWaterMark","isarray","writableHighWaterMark","fillLast","lastNeed","lastTotal","lastChar","_clearFn","unref","enroll","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","localStorage","noDeprecation","throwDeprecation","traceDeprecation","seen","stylize","colors","showHidden","_extend","NODE_DEBUG","pid","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","yellow","special","boolean","null","regexp","v1","clockseq","msecs","nsecs","require","Object_keys","defineProp","globals","Context","Script","runInContext","contentWindow","eval","execScript","runInNewContext","createContext","isContext","createScript","CHAR","NAME_START_CHAR","NAME_CHAR","CHAR_RE","S_RE","NAME_START_CHAR_RE","NAME_CHAR_RE","NMTOKEN_RE","RESTRICTED_CHAR","RESTRICTED_CHAR_RE","isRestrictedChar","isCharAndNotRestricted","NC_NAME_START_CHAR","NC_NAME_CHAR","NC_NAME_START_CHAR_RE","NC_NAME_CHAR_RE","XMLHttpRequest","responseType","response","send","MouseEvent","initMouseEvent","saveAs","HTMLAnchorElement","URL","webkitURL","download","rel","origin","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","autoBom","innerText","safari","onloadend","readAsDataURL","HOOKS","_disable","allowInput","allowInvalidPreload","altFormat","altInput","altInputClass","ariaDateFormat","autoFillDefaultTime","clickOpens","closeOnSelect","conjunction","defaultHour","defaultMinute","defaultSeconds","disableMobile","enableSeconds","enableTime","getWeek","givenDate","setHours","setDate","week1","hourIncrement","ignoredFocusElements","inline","minuteIncrement","monthSelectorType","nextArrow","noCalendar","onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","plugins","positionElement","prevArrow","shorthandCurrentMonth","showMonths","static","time_24hr","weekNumbers","english","shorthand","longhand","firstDayOfWeek","nth","rangeSeparator","weekAbbreviation","scrollTitle","toggleTitle","amPM","yearAriaLabel","monthAriaLabel","hourAriaLabel","minuteAriaLabel","pad","debounce","wait","arrayify","clearNode","firstChild","findParent","condition","createNumberInput","inputClassName","wrapper","numInput","arrowUp","arrowDown","getEventTarget","doNothing","monthToStr","monthNumber","revFormat","dateObj","monthName","setMonth","shortMonth","setSeconds","unixSeconds","weekNum","weekNumber","setFullYear","ISODate","setMinutes","unixMillSeconds","tokenRegex","createDateFormatter","l10n","isMobile","frmt","overrideLocale","formatDate","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","datestr","parseDate","ops","matchIndex","regexStr","isBackSlash","escaped","compareDates","date1","date2","calculateSecondsSinceMidnight","getDefaultHours","minDate","minHour","minMinutes","minSeconds","maxDate","maxHr","maxMinutes","__assign","__spreadArrays","il","jl","FlatpickrInstance","instanceConfig","flatpickr","defaultConfig","getClosestActiveElement","calendarContainer","bindToInstance","setCalendarWidth","requestAnimationFrame","daysContainer","daysWidth","weekWrapper","updateTime","selectedDates","defaultDate","latestSelectedDateObj","isKeyDown","eventTarget","curValue","newValue","isHourElem","hourElement","isMinuteElem","minuteElement","incrementNumInput","timeWrapper","prevValue","_input","setHoursFromInputs","updateValue","_debouncedChange","secondElement","limitMinHours","minTime","minDateHasTime","limitMaxHours","maxTime","maxDateHasTime","minBound","maxBound","currentTime","secondsSinceMidnight","parseSeconds","setHoursFromDate","onYearInput","changeYear","ev","_handlers","triggerChange","jumpToDate","jumpDate","jumpTo","oldYear","currentYear","oldMonth","currentMonth","buildMonthSwitch","timeIncrement","inputElem","createDay","_dayNumber","dateIsEnabled","isEnabled","dayElement","todayDateElem","tabIndex","isDateSelected","selectedDateElem","isDateInRange","insertAdjacentHTML","focusOnDayElem","targetNode","onMouseOver","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","focusOnDay","dayFocused","isInView","startElem","givenMonth","loopDelta","numMonthDays","changeMonth","getNextAvailableDay","buildMonthDays","firstOfMonth","prevMonthDays","getDaysInMonth","createDocumentFragment","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayNumber","dayIndex","dayNum","dayContainer","buildDays","frag","shouldBuildMonth","monthsDropdownContainer","buildMonth","monthElement","monthNavFragment","selectedMonth","yearInput","tabindex","yearElement","getElementsByTagName","buildMonths","monthNav","prevMonthNav","yearElements","monthElements","nextMonthNav","buildWeekdays","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","updateNavigationCurrentMonth","isCalendarElem","documentClick","eventTarget_1","isCalendarElement","lostFocus","isIgnored","timeContainer","newYear","newYearNum","isNewYear","dateToCheck","parsed","onBlur","valueChanged","trimEnd","getDateStr","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","selectDate","delta_1","ctrlKey","currentYearElement","pluginElements","cellClass","hoverDate","firstElementChild","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","rContainer","dayElem","ts","ts1","ts2","timestamp","outOfRange","onResize","positionCalendar","minMaxDateSetter","inverseDateObj","getInputElem","setupLocale","l10ns","customPositionElement","_positionElement","calendarHeight","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","innerHeight","showOnTop","isCenter","isRight","rightMost","centerMost","doc","editableSheet","styleSheets","cssRules","getDocumentStyleSheet","bodyWidth","centerLeft","centerIndex","centerStyle","insertRule","centerBefore","msMaxTouchPoints","selectedDate","shouldChangeMonth","selectedIndex","loadedPlugins","_bind","_setHoursFromDate","_positionCalendar","triggerChangeEvent","toInitial","mobileInput","_initialDate","_createElement","lastChild","insertBefore","_type","wasOpen","CALLBACKS","setSelectedDate","updatePositionElement","inputDate","dates","parseDateRules","rule","hooks","specificFormat","dObj","mobileFormatStr","onMonthNavClick","isPrevMonth","isNextMonth","boolOpts","userConfig","_enable","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","hook","pluginConf","parseConfig","required","nextSibling","preloadedDate","setupDates","yr","__hidePrevMonthArrow","__hideNextMonthArrow","innerContainer","buildWeeks","separator","hourInput","minuteInput","military2ampm","secondInput","buildTime","customAppend","inputType","setupMobile","debouncedResize","ontouchstart","capture","bindEvents","isSafari","_flatpickr","nodeList","nodes","instances","HTMLCollection","NodeList","localize","setDefaults","fp_incr","_loop_1","args_1","fp","Catalan","cat","ca","Spanish","es","French","fr","flexslider","rtl","vars","msPointerEnabled","MSGesture","DocumentTouch","itemWidth","asNavFor","animating","currentSlide","startAt","animatingTo","atEnd","containerSelector","slides","syncExists","manualPause","started","startTimeout","transitions","video","useCSS","pfx","ensureAnimationEnd","controlsContainer","manualControls","customDirectionNav","randomize","doMath","setup","controlNav","directionNav","multipleKeyboard","getTarget","flexAnimate","pauseOnAction","mousewheel","pausePlay","slideshow","pauseInvisible","pauseOnHover","hover","manualPlay","play","isHidden","initDelay","asNav","smoothHeight","move","currentItem","_slider","_gesture","currentTarget","addPointer","pointerId","setupManual","setupPaging","controlNavScaffold","pagingCount","thumbCaptions","setToClearWatchedEvent","prevText","nextText","animationLoop","playText","pauseText","msTouchAction","limit","itemW","itemMargin","cloneOffset","translationX","translationY","MSGESTURE_FLAG_INERTIA","setProps","canAdvance","pageX","pageY","computedW","newSlides","playing","uniqueID","visProp","getHiddenProp","visible","opacity","zIndex","wrapup","animationSpeed","easing","unbind","animateSlides","animatedSlides","slideshowSpeed","float","marginLeft","marginRight","webkitTransition","fadeFirstSlide","cloneCount","makeArray","computedM","minItems","boxPadding","itemT","itemM","minW","maxW","addSlide","added","removeSlide","removed","allowOneSlide","fadeIn","isCallable","toStr","receiver","forEachArray","forEachString","forEachObject","concatty","bound","arrLike","slicy","boundLength","boundArgs","joiny","Empty","implementation","cached","$Error","$EvalError","$RangeError","$ReferenceError","$URIError","$Function","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","getProto","$ObjectGPO","$ReflectGPO","needsEval","TypedArray","INTRINSICS","AggregateError","Atomics","BigInt","BigInt64Array","BigUint64Array","DataView","encodeURI","encodeURIComponent","Float16Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","SharedArrayBuffer","WeakRef","WeakSet","errorProto","doEval","LEGACY_ALIASES","hasOwn","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","getBaseIntrinsic","alias","intrinsicName","parts","subString","stringToPath","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","reflectGetProto","originalGetProto","getDunderProto","Extend","Regional_Indicator","Prepend","E_Base","Glue_After_Zwj","E_Base_GAZ","isSurrogate","pos","codePointAt","hi","low","shouldBreak","mid","eModifierIndex","rIIndex","previousNonExtendIndex","getGraphemeBreakProperty","nextBreak","splitGraphemes","brk","res","iterateGraphemes","countGraphemes","hasPropertyDescriptors","hasArrayLengthDefineBug","origSymbol","hasSymbolSham","sym","symObj","syms","descriptor","$hasOwn","ctor","superCtor","TempCtor","_$1","InspireTree","unwrapExports","createCommonjsModule","NO_OP","isBrowser","isArray$$1","isStringOrNumber","isNullOrUndef","isInvalid","isTrue","isFunction$$1","isString$$1","isObject$$1","throwError","combineFrom","out","key$1","Lifecycle","afterMount","afterRender","afterUpdate","beforeRender","beforeUnmount","createVNode","findDOMNodeEnabled","recyclingEnabled","roots","xlinkNS","xmlNS","svgNS","strictProps","booleanProps","namespaces","isUnitlessNumber","skipProps","delegatedEvents","isiOS","delegatedEvents$1","handleEvent","lastEvent","nextEvent","delegatedRoots","docEvent","eventData","isClick","eventsToTrigger","cancelBubble","dispatchEvents","normalizeEventName","attachEventToDocument","onclick","emptyFn","trapClickOnNonInteractiveElement","stopImmediatePropagation","isCheckedType","onTextInputChange","vNode","props","EMPTY_OBJ","previousValue","onInput","oninput","newProps","applyValue","wrappedOnChange","onCheckboxChange","onClick","nextPropsOrEmpty","multiple","hasValue","updateChildOptionGroup","updateChildOption","isVNode","onSelectChange","onchange","newVNode","applyValue$1","mounting","wrappedOnChange$1","onTextareaInputChange","applyValue$2","domValue","processElement","isControlled","wrapped","processInput","processSelect","processTextarea","isControlledFormElement","hydrateElement","lifecycle","isSVG","newDom","mountElement","replaceChild","dangerouslySetInnerHTML","__html","isSameInnerHTML","isSamePropsInnerHTML","parentDom","lastDom","previousSibling","normalizeChildNodes","mount","hydrate","nextSibling$1","hydrateChildren","hasControlledValue","isFormElement","patchProp","mountRef","isClass","_isSVG","namespaceURI","createClassComponentInstance","_lastInput","_vNode","_childContext","mountClassComponentCallbacks","_updating","componentToDOMNodeMap","input$1","createFunctionalComponentInput","mountFunctionalComponentCallbacks","hydrateComponent","mountText","hydrateText","hydrateVoid","componentPools","elementPools","unmount","canRecycle","isRecycling","isStatefulComponent$$1","_unmounted","componentWillUnmount","_lifecycle","onComponentWillUnmount","onComponentWillMount","onComponentDidMount","onComponentWillUpdate","onComponentDidUpdate","pools","keyed","nonKeyed","pool","poolComponent","ref$1","props$1","isAttrAnEvent","patchEvent","poolElement","findDOMNode","documentBody","getRoot","directClone","hydrateRoot","setRoot","lifecycle$1","removeRoot","patch","rootInput","createRenderer","lastInput","nextInput","lastVNode","nextVNode","lastFlags","nextFlags","patchComponent","replaceVNode","mountComponent","patchElement","patchText","patchVoid","mountVoid","replaceLastChildAndUnmount","unmountChildren","removeAllChildren","nextTag","replaceWithNewNode","lastProps","nextProps","lastChildren","nextChildren","nextRef","lastClassName","nextClassName","patchArray","patchKeyed","setTextContent","mountArrayChildren","textNode","updateTextContent","isKeyed","lastLength","nextLength","aLength","bLength","aNode","bNode","nextNode","nextPos","aEnd","bEnd","aStart","bStart","aStartNode","bStartNode","aEndNode","bEndNode","insertOrAppend","aLeft","bLeft","sources","moved","patched","keyIndex","arrI","lis_algorithm","patchKeyedChildren","lastChildrenLength","nextChildrenLength","commonLength","nextChild","nextChild$1","patchNonKeyedChildren","patchChildren","lastPropsOrEmpty","nextValue","prop$1","removeProp","lastType","nextType","lastKey","nextKey","hasComponentDidUpdate","componentDidUpdate","nextState","lastState","_updateComponent","childContext","didUpdate","getChildContext","createVoidVNode","createTextVNode","parentVNode","shouldUpdate","lastProps$1","nextHooks","nextHooksDefined","lastInput$1","nextInput$1","onComponentShouldUpdate","lastValue","lastAttrValue","nextAttrValue","domStyle","cssText","patchStyle","lastHtml","nextHtml","setAttributeNS","nameLowerCase","domEvent","linkEvent","recycledVNode","recycleElement","createElementNS","documentCreateElement","childrenIsSVG","recycleComponent","hasDidMount","componentDidMount","Component","_blockSetState","componentWillMount","_blockRender","_pendingSetState","_pendingState","newNode","lastNode","removeChildren","tempdom","noNormalise","vNodeToClone","propsToClone","newChildren","tmpArray","propsToClone$1","cloneVNode","_children","len$2","childrenLen","len$1","tmpArray$1","i$1","applyKey","applyKeyIfMissing","applyKeyPrefix","_normalizeVNodes","currentKey","normalizeChildren","newNodes","normalizeVNodes","getFlagsForElementVnode","defaultProps","normalizeProps","internal_DOMNodeMap","internal_isUnitlessNumber","internal_normalize","internal_patch","inferno","inferno_1","dist$1","componentCallbackQueue","resolvedPromise","queueStateChanges","newState","stateKey","applyState","addToQueue","pendingState","prevState","renderOutput","lifeCycle","setState","prevProps","fromSetState","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","nextContext","infernoComponent","classCallCheck","AwaitValue","AsyncGenerator","front","settle","request","throw","createClass","protoProps","staticProps","_extends","subClass","superClass","possibleConstructorReturn","createVNode$4","Checkbox","_Component","_this2","toggleCheck","_tree","treeDefaultPrevented","indeterminate","classlist","nodeAttrs","itree","classNames","customClasses","class","createVNode$5","EditToolbar","addChild","editing","focused","toggleEditing","buttons","edit","createVNode$6","EmptyList","stateComparator","previousState","currentState","isDirty","dirty","createVNode$8","EditForm","getStateFromNodes","originalText","newText","markDirty","applyChanges","_this3","keypress","cancel","createVNode$7","NodeAnchor","_props","metaKey","disableDeselection","clearSelection","lastSelectedNode","selectBetween","boundingNodes","selection","disableDirectDeselection","deselect","enableDeselection","_props2","_props3","toggleCollapse","isDragDropEnabled","isMouseHeld","unselectable","showCheckboxes","expanded","icon","hasOrWillHaveChildren","contextMenu","dblclick","createVNode$9","ToggleAnchor","createVNode$3","ListItem","stateFromNode","getClassNames","dragAndDrop","draggable","onDragEnd","onDragEnter","onDragLeave","onDragStart","onDragOver","onDrop","clientY","targetRect","yThresholdForAbove","yThresholdForBelow","dataTransfer","effectAllowed","dropEffect","_activeDragNode","setData","hasChildren","stateDeep","validateOn","validator","validateCallable","recursor","iteratee","isTreeNodes","isTreeNode","valid","hasAncestor","unhighlightTarget","recurseUp","dragNode","getTargetDirection","treeId","getData","nodeId","inspireTree","exported","targetIndex","newIndex","insertAt","states","loading","pagination","List","isDynamic","hasLoadedChildren","hasVisibleChildren","renderEditToolbar","renderToggle","renderCheckbox","renderChildren","getAttributes","createVNode$2","deferredRendering","deferredLoading","loadMore","renderNodes","isDeferred","renderLoadingTextNode","renderLoadMoreNode","createVNode$1","Tree","addNode","renderAddLink","InspireDOM","batching","dropTargets","$scrollLayer","usesNativeDOM","dndDefaults","defaultsDeep","autoLoadMore","nodeHeight","attach","initialRender","scrollSelectedIntoView","$target","getScrollableAncestor","editable","pickBy","identity","keyboardListener","scrollListener","getSelection","removeAllRanges","$element","focusedNode","moveFocusDownFrom","toggleSelect","collapse","moveFocusUpFrom","startingNode","nextVisibleNode","previousVisibleNode","getTreeById","rendering","links","$parent","$selected","commonjsGlobal","commonjsRequire","rnds8","rnds","rngBrowser","byteToHex","bytesToUuid_1","buf","bth","v4_1","ii","baseStateChange","verb","deep","resetStateOnRestore","defaultState","resetState","recurseDown","es6Promise","objectOrFunction","vertxNext","customSchedulerFn","asap","scheduleFlush","setScheduler","scheduleFn","setAsap","asapFn","browserWindow","browserGlobal","BrowserMutationObserver","isWorker","useNextTick","useVertxTimer","useSetTimeout","useMutationObserver","observer","useMessageChannel","globalSetTimeout","attemptVertx","vertx","runOnLoop","runOnContext","onFulfillment","onRejection","_arguments","noop$$1","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","PENDING","FULFILLED","REJECTED","GET_THEN_ERROR","ErrorObject","selfFulfillment","cannotReturnOwn","getThen","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","_label","handleOwnThenable","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","TRY_CATCH_ERROR","tryCatch","hasCallback","succeeded","failed","initializePromise","resolver","Enumerator$1","_instanceConstructor","_remaining","_enumerate","validationError","all$1","race$1","_$$1","reject$1","needsResolver","needsNew","Promise$2","polyfill$1","promiseToString","cast","_eachEntry","resolve$$1","_then","_settledAt","_willSettleAt","enumerator","_setScheduler","_setAsap","_asap","polyfill","es6Promise_1","baseStatePredicate","extract","getPredicateFunction","flatten","baseInvoke","methods","castArray","predicate","TreeNodes","_extendableBuiltin2","isTree","_pagination","TreeNode","sortedIndexBy","invoke","invokeDeep","_context","pusher","hierarchy","dest","addNodes","waitCount","expandDeep","flat","copyHierarchy","existingNode","isArrayLike","objectToNode","refreshIndeterminateState","_this4","_loading","loadChildren","oldNode","refs","results","sorter","_this5","sorted","sortBy","node1","node2","n1Context","n2Context","n1Index","n2Index","toObject","ExtendableBuiltin","_extendableBuiltin","standardizePromise","excludeKeys","cloneDeep","cloneItree","shallow","checkbox","autoCheckChildren","hasParent","getParent","excludeNode","getParents","filterBy","pointer","autoSelectChildren","blurDeep","paths","allowDynamicLoad","indices","found","findLast","lastDeepestVisibleChild","totalNodes","collectionToModel","nextVisibleSiblingNode","nextVisibleAncestralSiblingNode","nextVisibleChildNode","previousVisibleSiblingNode","oldValue","childrenCount","includeState","selectable","canAutoDeselect","oldVal","deselectDeep","_lastSelectedNode","allow","newVal","currentVal","swap","uncheck","_this6","excludeChildren","pull","keyName","rendered","allowsLoadEvents","allowLoadEvents","collection","eventemitter2","_conf","configure","conf","maxListeners","wildcard","verboseMemoryLeak","listenerTree","logPossibleMemoryLeak","errorMsg","emitWarning","searchListenerTree","branch","xTree","xxTree","isolatedBranch","endReached","typeLength","currentType","growListenerTree","EventEmitter2","_once","_many","many","ttl","prependMany","_origin","_on","al","_all","emitAsync","promises","onAny","_onAny","prependAny","leafs","iLeaf","recursivelyGarbageCollect","offAny","fns","listenersAny","_map","_EventEmitter","_muted","initialized","preventDeselection","renderer","matcher","matchProcessor","autoDeselect","isEventMuted","preventTreeDefault","pathMap","map$$1","indexPath","_$sortBy","_$sortBy2","showDeep","collapseDeep","muted","newModel","selectFirstAvailableNode","resp","_loader","removeAll","_config$search","clearSearch","expandParents","startNode","endNode","difference","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","isIE68","isDDA","strClass","isFnRegex","safeRegexTest","getGeneratorFunction","GeneratorFunction","isRegexMarker","throwRegexMarker","badStringifier","whichTypedArray","touchHandled","mouseProto","ui","mouse","_mouseInit","_mouseDestroy","_touchStart","_mouseCapture","changedTouches","_touchMoved","simulateMouseEvent","_touchMove","_touchEnd","touchstart","proxy","touchmove","touchend","simulatedType","simulatedEvent","screenX","screenY","expr","pseudos","createPseudo","dataName","disableSelection","enableSelection","focusable","hasTabindex","mapName","focusableIfVisible","fieldset","formResetMixin","_formResetHandler","form","_bindFormResetHandler","_unbindFormResetHandler","inArray","removeData","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","PAGE_DOWN","PAGE_UP","PERIOD","SPACE","TAB","UP","labels","ancestors","pushStack","addBack","proto","allowDisconnected","cachedScrollbarWidth","rhorizontal","rvertical","roffset","rposition","rpercent","_position","getOffsets","parseCss","isWindow","w1","w2","innerDiv","getScrollInfo","isDocument","hasOverflowX","getWithinInfo","withinElement","isElemWindow","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","scrollInfo","collision","at","horizontalOffset","verticalOffset","collisionPosition","using","elemWidth","elemHeight","marginTop","collisionWidth","collisionHeight","myOffset","my","feedback","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","newOverTop","flipfit","includeHidden","excludeStaticParent","overflowRegex","tabbable","uniqueId","removeUniqueId","orig","widgetUuid","widgetHasOwnProperty","widgetSlice","cleanData","widget","existingConstructor","basePrototype","proxiedPrototype","fullName","Widget","_createWidget","_proto","_childConstructors","_superApply","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","childPrototype","bridge","inputIndex","inputLength","isPlainObject","isMethodCall","methodValue","defaultElement","eventNamespace","bindings","hoverable","classesElementLookup","parentWindow","_getCreateOptions","_create","_setOptionDisabled","_trigger","_getCreateEventData","_removeClass","curOption","_setOptions","_setOption","_setOptionClasses","classKey","currentElements","_classes","_toggleClass","bindRemoveEvent","nodesToBind","processClassString","checkOption","uniqueSort","not","_untrackClassesElement","_off","_addClass","suppressDisabledCheck","delegateElement","handlerProxy","guid","_delay","_hoverable","_focusable","focusin","focusout","defaultEffect","hasOptions","effectName","isEmptyObject","effects","iconPosition","showLabel","originalLabel","hasTitle","_enhance","_updateIcon","_updateTooltip","displayBlock","_attachIcon","iconSpace","_attachIconSpace","newShowLabel","newIcon","uiBackCompat","primary","secondary","checkboxradio","buttonset","controlgroup","labelContents","_readType","contents","wrapAll","_updateLabel","change","_getRadioGroup","nameSelector","_toggleClasses","toAdd","prependTo","controlgroupCornerRegex","onlyVisible","_callChildMethod","childWidgets","controlgroupLabel","unwrap","_initWidgets","instanceOptions","_resolveClassesValues","widgetElement","_updateCornerClass","_buildSimpleOptions","_spinnerOptions","_buttonOptions","_checkboxradioOptions","_selectmenuOptions","middle","only","autoOpen","closeOnEscape","closeText","minWidth","modal","topOffset","resizable","uiDialogTitleHeadingLevel","beforeClose","drag","dragStart","dragStop","resizeStart","resizeStop","sizeRelatedOptions","resizableRelatedOptions","originalCss","originalPosition","originalTitle","_createWrapper","uiDialog","_createTitlebar","_createButtonPane","_makeDraggable","_makeResizable","_isOpen","_trackFocus","_appendTo","_untrackInstance","_destroyOverlay","detach","_focusedElement","opener","_hide","moveToTop","_moveToTop","silent","zIndices","zIndexMax","_focusTabbable","_size","_createOverlay","overlay","_show","_makeFocusTarget","hasFocus","uiDialogButtonPane","uiDialogTitlebarClose","_restoreTabbableFocus","_keepFocus","role","keydown","tabbables","uiDialogTitle","uiDialogTitlebar","uiDialogHeadingLevel","isInteger","_title","uiButtonSet","_createButtons","buttonOptions","filteredUi","handle","containment","_blockFrames","_unblockFrames","handles","resizeHandles","originalSize","alsoResize","_minHeight","_trackingInstances","resizableOptions","isDraggable","isResizable","nonContentHeight","minContentHeight","maxContentHeight","iframeBlocks","iframe","_allowInteraction","overlays","dialog","dialogClass","addClasses","connectToSortable","cursorAt","grid","helper","iframeFix","refreshPositions","revert","revertDuration","scope","scrollSensitivity","scrollSpeed","snap","snapMode","snapTolerance","_setPositionRelative","_setHandleClassName","_removeHandleClassName","destroyOnClear","_getHandle","_blurActiveElement","_mouseStart","_createHelper","_cacheHelperProportions","ddmanager","_cacheMargins","cssPosition","hasFixedAncestor","positionAbs","_refreshOffsets","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","_clear","dropBehaviour","prepareOffsets","_mouseDrag","_getParentOffset","relative","_getRelativeOffset","noPropagation","_convertPositionTo","_uiHash","_mouseUp","_mouseStop","dropped","drop","handleElement","helperIsFunction","helperProportions","_isRootNode","po","scrollIsRootNode","isUserScrollable","relativeContainer","constrainPosition","co","cancelHelperRemoval","uiSortable","sortables","sortable","isOver","_storedCSS","innermostIntersecting","_intersectsWith","containerCache","fromOutside","_revert","_cursor","_opacity","scrollParentNotHidden","overflowOffset","scrolled","snapElements","$t","$o","inst","bs","ls","rs","x1","x2","y1","y2","snapping","snapItem","group","_zIndex","submenu","menus","activeMenu","mouseHandled","lastMousePosition","_activateItem","timer","keepActiveItem","_menuItems","collapseAll","_closeOnDocumentClick","previousFilter","actualTarget","submenus","character","previousPage","nextPage","filterTimer","_filterMenuItems","nextAll","newSubmenus","newItems","newWrappers","menu","submenuCaret","_isDivider","_itemRole","listbox","nested","activeParent","_scrollIntoView","_close","_startOpening","borderTop","paddingTop","elementHeight","itemHeight","_hasScroll","fromFocus","_open","currentMenu","startMenu","newItem","isFirstItem","prevAll","isLastItem","escapedCharacter","_mouseDown","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseDownEvent","btnIsLeft","elIsCancel","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseMove","altKey","ignoreMissingWhich","animateDuration","animateEasing","aspectRatio","autoHide","ghost","_num","_isNumber","_aspectRatio","originalElement","_proportionallyResizeElements","elementIsWrapper","marginBottom","originalResizeStyle","zoom","_proportionallyResize","_setupHandles","_handles","resizing","_addedHandles","exp","insertAfter","_removeHandles","hname","sw","nw","_renderAxis","padPos","padWrapper","curleft","curtop","calculatedSize","_renderProxy","_calculateAdjustedElementDimensions","sizeDiff","originalMousePosition","_propagate","smp","dx","dy","_change","_updatePrevProperties","_updateVirtualBoundaries","_updateRatio","_respectSize","_updateCache","_applyChanges","pr","ista","soffseth","soffsetw","prevPosition","prevSize","forceAspectRatio","pMinWidth","pMaxWidth","pMinHeight","pMaxHeight","Infinity","_vBoundaries","cpos","csize","ismaxw","ismaxh","isminw","isminh","dw","dh","cw","ch","_getPaddingPlusBorderDimensions","widths","paddings","elWidth","elHeight","paddingBorder","_getElementTheoreticalSize","extraSize","prel","outerDimensions","elementOffset","cs","oc","containerElement","containerOffset","containerPosition","parentData","containerSize","woset","hoset","isParent","isOffsetRelative","cp","pRatio","cop","continueResize","ho","elSize","op","sum","gridX","gridY","ox","oy","newWidth","newHeight","isMaxWidth","isMaxHeight","isMinWidth","isMinHeight","spinnerModifier","_refresh","culture","incremental","numberFormat","spin","beforeunload","keyup","_stop","wheel","deltaY","spinning","_spin","mousewheelTimer","isTrigger","wheelEvent","_repeat","uiSpinner","counter","steps","_adjustValue","_increment","_precision","precision","_precisionOf","num","decimal","aboveMin","Globalize","allowAny","replaceWith","stepUp","_stepUp","stepDown","_stepDown","pageUp","pages","pageDown","spinner","_uiSpinnerHtml","_buttonHtml","collapsible","heightStyle","beforeActivate","beforeLoad","_isLocal","anchorUrl","locationUrl","pathname","running","_processTabs","_initialActive","tabs","_findActive","locationHash","locationHashDecoded","tab","panel","_getPanelForTab","_tabKeydown","focusedTab","goingForward","_handlePageNav","activating","_focusNextTab","_panelKeydown","_findNextTab","lastTabIndex","constrain","_setupEvents","_setupHeightStyle","lis","tablist","panels","prevTabs","prevAnchors","prevPanels","_getList","panelId","anchorId","originalAriaControls","_createPanel","_eventHandler","clickedIsActive","collapsing","toShow","toHide","oldTab","oldPanel","newTab","newPanel","xhr","_toggle","_getIndex","jqXHR","_ajaxSettings","statusText","beforeSend","ajaxSettings","quicksearch","stripeRows","caseSensitive","noResults","matchedResultsCount","resetBind","removeDiacritics","minValLength","onBefore","onAfter","onValTooSmall","onNoResultFound","prepareQuery","testQuery","diacriticsRemovalMap","letters","go","stripe","currentMatchedResults","strip_html","unsafeOriginalName","arrayBuffer","setimmediate","attachEvent","CntZImage","uncompressPixelValues","formatFileInfo","computeUsedBitDepths","unstuff","LercDecode","Lerc2Decode","isPlatformLittleEndian","Lerc","skipMask","encodedMaskData","parsedData","inputOffset","noDataValue","defaultNoDataValue","uncompressedData","pixelType","returnMask","pixelData","resultPixels","minValue","maxValue","resultMask","maskData","returnEncodedMask","mask","bitset","returnFileInfo","fileInfo","bitDepths","TypedArrayClass","maskBitset","storeDecodedMask","currentValue","blockIdx","numX","numBlocksX","numY","numBlocksY","blockWidth","blockHeight","maxZError","MAX_VALUE","xx","blockDataBuffer","thisBlockHeight","thisBlockWidth","blockData","blockPtr","constValue","maskByte","outPtr","outStride","block","blocks","rawData","stuffedData","bitsPerPixel","numValidPixels","fileIdentifierString","imageType","eofOffset","numBytes","numBlocks","float32","fileIdView","getInt32","getUint32","getFloat64","getFloat32","cnt","getInt16","getUint8","actualNumBlocksX","actualNumBlocksY","blockI","blockY","blockX","bytesLeft","headerByte","offsetType","getInt8","numValidPixelsType","getUint16","arrayBuf","numPixels","dataBytes","dataWords","bitMask","bitsLeft","nmax","numInvalidTailBytes","missingBits","BitStuffer","lutArr","bitPos","Lerc2Helpers","HUFFMAN_LUT_BITS_MAX","computeChecksumFletcher32","sum1","sum2","tlen","readHeaderInfo","ptr","headerInfo","keyLength","checksum","numDims","numValidPixel","microBlockSize","blobSize","zMin","zMax","checkMinMaxRanges","OutPixelTypeArray","getDataTypeArray","rangeBytes","getDataTypeSize","minValues","readSubArray","maxValues","readMask","mb","readDataOneSweep","nStart","readHuffmanTree","BITS_MAX","i0","i1","decodeBits","codeTable","word","srcPtr","numBitsLUTQick","numBitsLUT","numEntries","jj","decodeLut","readHuffman","valTmp","valTmpQuick","huffmanInfo","prevVal","iDim","deltaEncode","encodeMode","resultPixelsAllDim","bits67","doLut","numBits","numElements","store8","lutData","lutBytes","lut","bitstuffer","readTiles","dataTypeSize","blockEncoding","bytesleft","lastBlockHeight","lastBlockWidth","uncompressed","getDataTypeUsed","getOnePixel","constantoffset","constant","getPixelType","constructConstantSurface","numPixelAllDims","tp","isValidPixelValue","tc","temp","getUInt32","onesweep","bReadDataOneSweep","flagHuffman","validPixelCount","dimCount","dimStats","getBandCount","encodedData","lerc","majorVersion","bandMask","iPlane","eof","bandMasks","decodedPixelBlock","statistics","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_PARTIAL_FLAG","WRAP_ARY_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsModifier","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","nodeIsSet","isSet","nodeIsTypedArray","arrayAggregator","setter","accumulator","arrayEach","arrayEachRight","arrayEvery","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","hasUnicode","mapToArray","overArg","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","nativeObjectToString","objectCtorString","oldDash","reIsNative","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","ListCache","MapCache","SetCache","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","symbol","Ctor","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","cloneRegExp","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","computed","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","baseSortBy","basePickBy","baseSet","basePullAll","basePullAt","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","baseSetData","baseSetToString","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","high","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","castRest","castSlice","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","funcName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","arrLength","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setWrapToString","createRound","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","memoize","differenceBy","differenceWith","findLastIndex","intersection","mapped","intersectionBy","intersectionWith","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xorBy","xorWith","zipWith","chain","interceptor","wrapperAt","countBy","forEachRight","groupBy","invokeMap","partition","bindKey","WRAP_BIND_FLAG","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","defer","memoized","negate","overArgs","transforms","funcsLength","partialRight","rearg","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","propsIndex","propsLength","mergeWith","invert","invertBy","nativeKeysIn","isProto","baseKeysIn","omit","CLONE_DEEP_FLAG","basePick","toPairs","toPairsIn","camelCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","dividend","divisor","multiplier","multiplicand","minuend","subtrahend","compact","cond","conforms","baseConforms","curry","curryRight","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","take","takeRight","takeRightWhile","takeWhile","tap","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","baseInRange","isEqualWith","isMatch","isMatchWith","isNative","isNil","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","strLength","padEnd","padStart","radix","floating","reduceRight","repeat","sample","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sumBy","imports","importsKeys","importsValues","isEscaping","isEvaluating","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimStart","omission","newEnd","unescape","eachRight","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","getView","iterLength","takeCount","iterIndex","$isNaN","MersenneTwister","seed","MATRIX_A","UPPER_MASK","LOWER_MASK","mt","mti","init_by_array","init_seed","init_key","key_length","random_int","mag01","kk","random_int31","random_incl","random_excl","random_long","webm","mp4","oldIOS","MSStream","nativeWakeLock","_wakeLock","handleVisibilityChange","visibilityState","noSleepTimer","noSleepVideo","_addSourceToVideo","dataURI","wakeLock","Plotly","D0e","Vv","E0e","P0e","R0e","F0e","iS","z0e","lS","N0e","oS","wt","Ut","h0","d0","sS","un","jv","uS","cS","fS","T1","drain","success","failure","triggered","__NPO__","Er","EHe","A1","childNodes","CSSStyleDeclaration","ascending","descending","extent","quantile","median","variance","deviation","bisectLeft","bisect","bisectRight","bisector","transpose","nest","sortKeys","sortValues","rollup","rebind","sourceEvent","dispatch","requote","Sizzle","matchesSelector","svg","xhtml","xlink","qualify","removeAttributeNS","space","De","Qe","Ge","cr","getAttributeNS","classed","datum","compareDocumentPosition","tr","ir","lr","ownerSVGElement","createSVGPoint","scrollX","scrollY","getScreenCTM","matrixTransform","Je","correspondingElement","xr","mr","sr","Jr","asin","Lt","ea","SQRT2","interpolateZoom","Qt","yt","oa","ar","Dr","_t","sa","it","Nr","Br","ot","__chart__","transition","zr","translate","wr","Xt","Ma","b1","$a","bn","Fn","xn","Gn","sn","Ja","Yn","wu","C0e","Ci","Xo","Di","v0","Tu","nS","vr","deltaMode","_u","tween","scaleExtent","Yr","vt","r1","hsl","Rt","Mt","la","nt","atan2","n0","Vt","a1","brighter","darker","hcl","ra","En","Ct","lab","ta","aa","Wa","Ht","Pn","mo","Rn","Fv","Mr","Rv","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","Ar","ur","responseText","Ft","XDomainRequest","onprogress","progress","accept","setRequestHeader","overrideMimeType","beforesend","gn","functor","dsv","parseRows","csv","tsv","Xa","Za","qi","gu","YM","n1","p5","VM","jM","o0","zv","WM","Pue","geom","hull","polygon","m5","y5","XM","centroid","clip","l0","bu","s0","g5","Nv","ZM","Rue","s1","edge","site","circle","JM","b5","f0","Fue","o1","Iv","u0","zue","KM","Nue","QM","edges","ek","angle","Bue","arc","Uue","rk","l1","Gue","x5","Bv","Ov","tk","_5","Yue","Oue","Hue","Iue","voronoi","u1","triangles","Vue","clipExtent","jue","Wue","Hv","w5","nk","xu","Ll","ik","T5","A5","delaunay","quadtree","Xue","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","f1","interpolateArray","Zue","linear","poly","quad","Kue","cubic","Que","tfe","afe","nfe","elastic","bounce","lfe","$ue","in","lk","sk","efe","uk","fk","vk","ck","cfe","rotate","skew","ease","Jue","interpolateHcl","interpolateHsl","interpolateLab","interpolateRound","baseVal","consolidate","matrix","vfe","c0","hk","hfe","dfe","pfe","mfe","yfe","gfe","bfe","dk","xfe","_fe","fixed","wfe","Tfe","py","Afe","pk","charge","pointCharge","interpolateTransform","layout","bundle","chord","subindex","startAngle","endAngle","sortGroups","sortSubgroups","sortChords","chords","groups","Mfe","kfe","Sfe","tick","alpha","weight","visit","linkDistance","linkStrength","friction","chargeDistance","gravity","theta","Uv","Dfe","Gv","Wo","qfe","Lfe","Cfe","revalue","pie","mk","padAngle","Efe","Pfe","Rfe","y0","M5","k5","Ffe","zfe","Nfe","Ife","silhouette","wiggle","Bfe","Ofe","yk","Hfe","Ufe","S5","_pack_next","_pack_prev","gk","bk","xk","Gfe","wk","Yfe","_k","Tk","q5","L5","Vfe","Wfe","Ak","Mk","C5","c1","rangeExtent","$fe","D5","Sk","Jfe","histogram","bins","frequency","pack","jfe","separation","nodeSize","cluster","Zfe","Xfe","treemap","sticky","ratio","normal","logNormal","bates","irwinHall","Kfe","qk","rangeRound","ticks","P5","tickFormat","d3_scale_linearTickFormat","nice","Ck","Lk","E5","LN10","Ek","e0e","Pk","exponent","Rk","rangePoints","rangeRoundPoints","rangeBands","rangeRoundBands","rangeBand","category10","r0e","category20","t0e","category20b","a0e","category20c","n0e","Fk","quantiles","invertExtent","zk","Nk","Ik","i0e","quantize","o0e","l0e","d1","Bk","Ok","s0e","p1","acos","m1","innerRadius","outerRadius","cornerRadius","padRadius","Hk","Uk","yo","defined","R5","tension","Gk","F5","z5","Yk","Li","us","I5","cardinal","N5","monotone","B5","m0e","y0e","Vk","jk","Wk","Xk","x0","Zk","$k","b0e","Jk","_0e","w0e","Kk","radial","p0","a0","projection","x0e","Qk","cross","diamond","eS","square","g1","symbolTypes","tS","H5","_1","Yv","interrupt","rS","Aa","O5","T0e","attrTween","styleTween","aS","M0e","k0e","orient","A0e","tickValues","tickSize","innerTickSize","outerTickSize","tickPadding","tickSubdivide","brush","U5","S0e","q0e","L0e","selectNode","createContextualFragment","json","responseXML","d3","G5","M1","vS","setTime","setUTCSeconds","setUTCMinutes","setUTCHours","setUTCDate","setUTCMonth","setUTCFullYear","timeDay","timeDays","timeFriday","timeFridays","timeHour","timeHours","timeInterval","timeMillisecond","timeMilliseconds","timeMinute","timeMinutes","timeMonday","timeMondays","timeMonth","timeMonths","timeSaturday","timeSaturdays","timeSecond","timeSeconds","timeSunday","timeSundays","timeThursday","timeThursdays","timeTuesday","timeTuesdays","timeWednesday","timeWednesdays","timeWeek","timeWeeks","timeYear","timeYears","utcDay","utcDays","utcFriday","utcFridays","utcHour","utcHours","utcMillisecond","utcMilliseconds","utcMinute","utcMinutes","utcMonday","utcMondays","utcMonth","utcMonths","utcSaturday","utcSaturdays","utcSecond","utcSeconds","utcSunday","utcSundays","utcThursday","utcThursdays","utcTuesday","utcTuesdays","utcWednesday","utcWednesdays","utcWeek","utcWeeks","utcYear","utcYears","hS","dateTime","periods","Kr","shortDays","shortMonths","Va","ja","ln","utcFormat","utcParse","timeFormat","timeParse","isoFormat","isoParse","timeFormatDefaultLocale","timeFormatLocale","Y5","S1","dS","toExponential","align","comma","toPrecision","grouping","thousands","currency","numerals","minus","nan","formatPrefix","FormatSpecifier","formatDefaultLocale","formatLocale","formatSpecifier","precisionFixed","precisionPrefix","precisionRound","mS","PHe","pS","Ir","RHe","yS","I0e","Gt","FHe","gS","BADNUM","FP_SAFE","ONEMAXYEAR","ONEAVGYEAR","ONEMINYEAR","ONEMAXQUARTER","ONEAVGQUARTER","ONEMINQUARTER","ONEMAXMONTH","ONEAVGMONTH","ONEMINMONTH","ONEWEEK","ONEDAY","ONEHOUR","ONEMIN","ONESEC","ONEMILLI","ONEMICROSEC","EPOCHJD","ALMOST_EQUAL","LOG_CLIP","MINUS_SIGN","V5","q1","bS","Au","zHe","xS","Vn","bo","B0e","O0e","j5","H0e","U0e","L1","isArrayOrTypedArray","isArray1D","ensureArray","Oa","u1c","i2","u2","u4","f4","f8","W5","wS","uint8c","uint8","int8","uint16","int16","uint32","int32","float64","decodeTypedArraySpec","bdata","dtype","shape","Y0e","BYTES_PER_ELEMENT","_inputArray","isTypedArraySpec","maxRowLength","minRowLength","C1","IHe","TS","Z5","AS","astr","X0e","MS","V0e","X5","W0e","kS","j0e","DS","BHe","CS","m0","Z0e","rename","constructUpdate","PS","OHe","ES","J0e","K0e","E1","HHe","RS","Q0e","NS","UHe","zS","FS","Wv","ece","rce","modHalf","g0","At","$v","IS","Xv","Zv","tce","extendFlat","extendDeep","extendDeepAll","extendDeepNoArrays","ka","YHe","BS","variantValues","editType","colorEditType","valType","extras","dflt","noNumericWeightValues","noBlank","strict","variant","noFontVariant","textcase","noFontTextcase","lineposition","noFontLineposition","noFontShadow","autoShadowDflt","autoSize","autoColor","arrayOk","Jv","VHe","OS","YANGLE","HOVERARROWSIZE","HOVERTEXTPAD","HOVERFONTSIZE","HOVERFONT","HOVERMINTIME","HOVERID","b0","jHe","GS","HS","US","$5","clickmode","dragmode","hovermode","hoversort","hoversubplots","hoveranywhere","clickanywhere","hoverdistance","spikedistance","hoverlabel","bgcolor","bordercolor","grouptitlefont","namelength","showarrow","selectdirection","P1","WHe","YS","ace","Kv","Qv","zn","XHe","VS","nce","ice","_noTemplating","showlegend","legend","legendgroup","legendgrouptitle","legendrank","legendwidth","anim","ids","customdata","selectedpoints","hoverinfo","uirevision","NL","rUe","zL","Ux","oce","lce","sce","rq","uce","a98","t2e","average","lve","averageAngle","Jo","averageNumber","gq","blend","ode","blerp","wx","clampChroma","clampGamut","p_","clampRgb","Mde","colorsNamed","aq","convertA98ToXyz65","Tx","convertCubehelixToRgb","mq","convertDlchToLab65","U1","convertHsiToRgb","kq","convertHslToRgb","Lq","convertHsvToRgb","Xx","convertHwbToRgb","Pq","convertItpToXyz65","Mx","convertJabToJch","Sx","convertJabToRgb","e_","convertJabToXyz65","Kx","convertJchToJab","qx","convertLab65ToDlch","G1","convertLab65ToRgb","lh","convertLab65ToXyz65","Vx","convertLabToLch","Cl","convertLabToRgb","t_","convertLabToXyz50","Q1","convertLchToLab","Dl","convertLchuvToLuv","i_","convertLrgbToOklab","o_","convertLrgbToRgb","Eu","convertLuvToLchuv","n_","convertLuvToXyz50","V1","convertOkhslToOklab","Dx","convertOkhsvToOklab","Px","convertOklabToLrgb","S0","convertOklabToOkhsl","Cx","convertOklabToOkhsv","Ex","convertOklabToRgb","fh","convertP3ToXyz65","Rx","convertProphotoToXyz50","Nx","convertRec2020ToXyz65","Bx","convertRgbToCubehelix","pq","convertRgbToHsi","Sq","convertRgbToHsl","Cq","convertRgbToHsv","Zx","convertRgbToHwb","Rq","convertRgbToJab","Qx","convertRgbToLab","a_","convertRgbToLab65","sh","convertRgbToLrgb","Du","convertRgbToOklab","uh","convertRgbToXyb","sL","convertRgbToXyz50","k0","convertRgbToXyz65","vs","convertRgbToYiq","pL","convertXybToRgb","uL","convertXyz50ToLab","ep","convertXyz50ToLuv","Y1","convertXyz50ToProphoto","zx","convertXyz50ToRgb","M0","convertXyz50ToXyz65","hL","convertXyz65ToA98","Ax","convertXyz65ToItp","kx","convertXyz65ToJab","Jx","convertXyz65ToLab65","jx","convertXyz65ToP3","Fx","convertXyz65ToRec2020","Ix","convertXyz65ToRgb","hs","convertXyz65ToXyz50","vL","convertYiqToRgb","mL","converter","zt","cubehelix","a2e","differenceCie76","eve","differenceCie94","rve","differenceCiede2000","tve","differenceCmc","ave","differenceEuclidean","A0","differenceHueChroma","oh","differenceHueNaive","yq","differenceHueSaturation","ih","differenceHyab","nve","differenceItp","ove","differenceKotsarenkoRamos","ive","displayable","d_","dlab","n2e","dlch","i2e","easingGamma","DL","easingInOutSine","e2e","easingMidpoint","AL","easingSmootherstep","Kde","easingSmoothstep","Zde","easingSmoothstepInverse","$de","filterBrightness","Fde","filterContrast","zde","filterDeficiencyDeuter","Wde","filterDeficiencyProt","jde","filterDeficiencyTrit","Xde","filterGrayscale","Bde","filterHueRotate","Hde","filterInvert","Ode","filterSaturate","Ide","filterSepia","Nde","fixupAlpha","Ra","fixupHueDecreasing","Zce","fixupHueIncreasing","Xce","fixupHueLonger","Wce","fixupHueShorter","formatCss","Qhe","formatHex","ede","formatHex8","rde","formatHsl","ade","formatRgb","tde","getMode","_n","hsi","o2e","l2e","hsv","s2e","hwb","u2e","inGamut","ap","pde","interpolateWith","kL","interpolateWithPremultipliedAlpha","mde","interpolatorLinear","_r","interpolatorPiecewise","hq","interpolatorSplineBasis","qL","interpolatorSplineBasisClosed","interpolatorSplineMonotone","bde","interpolatorSplineMonotone2","xde","interpolatorSplineMonotoneClosed","_de","interpolatorSplineNatural","yde","interpolatorSplineNaturalClosed","gde","itp","f2e","jab","c2e","jch","v2e","h2e","lab65","d2e","lch","p2e","lch65","m2e","lchuv","y2e","lerp","Su","lrgb","g2e","luv","b2e","mapAlphaDivide","TL","mapAlphaMultiply","wL","mapTransferGamma","cde","mapTransferLinear","c_","mapper","modeA98","dq","modeCubehelix","bq","modeDlab","Aq","modeDlch","Mq","modeHsi","qq","modeHsl","Wx","modeHsv","modeHwb","zq","modeItp","Bq","modeJab","Oq","modeJch","Hq","modeLab","rp","modeLab65","Gq","modeLch","modeLch65","Vq","modeLchuv","Xq","modeLrgb","Zq","modeLuv","$q","modeOkhsl","Kq","modeOkhsv","Qq","modeOklab","rL","modeOklch","aL","modeP3","nL","modeProphoto","iL","modeRec2020","oL","modeRgb","Cu","modeXyb","fL","modeXyz50","cL","modeXyz65","dL","modeYiq","yL","nearest","Lde","okhsl","x2e","okhsv","_2e","oklab","w2e","oklch","T2e","p3","A2e","fq","parseHex","iq","parseHsl","Eq","parseHslLegacy","Dq","parseHwb","Fq","parseLab","Uq","parseLch","Yq","parseNamed","nq","parseOklab","eL","parseOklch","tL","parseRgb","cq","parseRgbLegacy","oq","parseTransparent","vq","prophoto","M2e","fde","rec2020","k2e","removeParser","Mce","S2e","gL","samples","Ade","serializeHex","f_","serializeHex8","bL","serializeHsl","_L","serializeRgb","xL","toGamut","Sde","trilerp","zce","unlerp","Fce","useMode","kt","useParser","sq","wcagContrast","r2e","wcagLuminance","Hx","xyb","q2e","xyz50","L2e","xyz65","C2e","yiq","D2e","fce","tq","pce","jn","th","Gx","gce","w0","bce","xce","xo","Zo","lq","T0","Yx","Ace","toMode","fromMode","channels","fixup","kce","dr","Hr","R1","_x","Sce","deg","rad","grad","turn","eh","F1","I1","qce","uq","Lce","Dce","Cce","Nce","serialize","gamut","J5","K5","Q5","ex","Vce","W1","Ka","$ce","Jce","jS","WS","XS","rx","xq","_q","Pa","_0","tx","ax","cbrt","O1","H1","Tq","ZS","$S","yve","gve","wve","_ve","Mve","qve","X1","Iq","Z1","$1","J1","nx","ix","lx","Dve","sx","ux","JS","fx","Uve","K1","r_","vx","hx","$ve","Qve","ehe","jq","Wq","ahe","nhe","ihe","uhe","lhe","fhe","she","dhe","mhe","Lx","j1","l_","_he","s_","Jq","whe","The","Ahe","khe","qhe","Dhe","Rhe","KS","mx","QS","yx","Nhe","Bhe","qu","lL","gx","bx","$he","rh","ah","Lu","u_","Khe","nde","screen","darken","lighten","exclusion","sde","lde","z1","ku","ML","hde","N1","SL","CL","Ox","v_","h_","EL","PL","RL","FL","m_","y_","np","Dde","Ede","Pde","Cde","Rde","Ude","Gde","Yde","Vde","g_","ds","aUe","HL","IL","staticPlot","typesetMath","plotlyServerURL","edits","annotationPosition","annotationTail","annotationText","axisTitleText","colorbarPosition","colorbarTitleText","legendPosition","legendText","shapePosition","titleText","editSelection","autosizable","responsive","fillFrame","frameMargins","scrollZoom","doubleClick","doubleClickDelay","showAxisDragHandles","showAxisRangeEntryBoxes","showTips","displayNotifier","displayModeBar","showSendToCloud","modeBarButtonsToRemove","modeBarButtonsToAdd","modeBarButtons","toImageButtonOptions","displaylogo","watermark","plotGlPixelRatio","setBackground","topojsonURL","logging","notifyOnLogging","queueLength","locales","BL","OL","configAttributes","dfltConfig","x_","nUe","UL","b_","E2e","vh","ps","iUe","GL","q0","__","w_","Ei","Pu","defaultLine","lightLine","borderLine","lightFraction","Sr","lUe","KL","YL","P2e","R2e","F2e","z2e","VL","N2e","M_","I2e","B2e","jL","O2e","WL","wn","H2e","T_","XL","Zt","G2e","ZL","A_","JL","Z2e","$2e","addOpacity","adjustLightness","brighten","combine","contrast","hexString","U2e","isChannelArray","isDark","luminosity","mix","mostReadable","V2e","rgbaArray","rgbaArrayToString","rgbaString","stroke","Ru","uUe","rC","f1e","Greys","YlGnBu","Greens","YlOrRd","Bluered","RdBu","Reds","Blues","Picnic","Rainbow","Portland","Jet","Hot","Blackbody","Earth","Electric","Viridis","Cividis","QL","eC","scales","defaultScale","lp","fUe","tC","SHOW_PLACEHOLDER","HIDE_PLACEHOLDER","DESELECTDIM","L0","h1e","k_","C0","iC","Wn","S_","aC","d1e","p1e","q_","m1e","D0","nC","y1e","_o","ys","sp","valObjectMeta","validateFunction","coerceFunction","data_array","enumerated","coerceNumber","integer","colorlist","colorscale","subplotid","flaglist","info_array","freeLength","coerce","_template","coerce2","coerceFont","overrideDflt","coercePattern","coerceHoverinfo","_module","_dataLength","coerceSelectionMarkerOpacity","marker","vUe","oC","L_","hUe","lC","uC","dUe","sC","cC","pUe","fC","hC","mUe","vC","C_","yUe","dC","mC","gUe","pC","gC","bUe","yC","xC","xUe","bC","wC","_Ue","_C","AC","wUe","TC","kC","TUe","MC","qC","AUe","SC","CC","MUe","LC","EC","kUe","DC","RC","SUe","PC","zC","qUe","FC","IC","LUe","NC","OC","CUe","BC","UC","DUe","HC","YC","EUe","GC","jC","PUe","VC","XC","RUe","WC","$C","FUe","ZC","KC","zUe","JC","eD","NUe","QC","tD","IUe","rD","nD","BUe","aD","upDegrees","downDegrees","leftDegrees","rightDegrees","oD","OUe","iD","sD","HUe","lD","V1e","fD","UUe","uD","D_","GUe","cD","adjoint","determinant","rotateX","rotateY","rotateZ","fromRotation","fromRotationTranslation","fromScaling","fromTranslation","fromXRotation","fromYRotation","fromZRotation","fromQuat","frustum","perspectiveFromFieldOfView","ortho","lookAt","ua","X1e","init2dArray","transposeRagged","dot","translationMatrix","rotationMatrix","rotationXYMatrix","apply3DTransform","apply2DTransform","apply2DTransform2","convertCssMatrix","inverseTransformMatrix","ph","VUe","yD","Z1e","vD","$1e","J1e","hD","dD","addRule","pD","mD","npe","getGraphDiv","isPlotDiv","removeElement","addStyleRule","addRelatedStyleRule","deleteRelatedStyleRule","setStyleOnHover","getFullTransformMatrix","getElementTransformMatrix","getElementAndAncestors","equalDomRects","mh","jUe","gD","fromcurrent","frame","ordering","wo","WUe","MD","xD","ope","_D","wD","lpe","spe","bD","TD","AD","traces","traceFlags","layoutFlags","overrideAll","Pi","E_","dash","fillmode","fgcolor","fgopacity","solidity","P_","ZUe","kD","FORMAT_LINK","DATE_FORMAT_LINK","fi","E0","upe","fpe","cpe","templateFormatStringDescription","supportOther","hovertemplateAttrs","texttemplateAttrs","shapeTexttemplateAttrs","newshape","templatefallbackAttrs","hp","KUe","ED","gs","d2l","SD","l2d","qD","x0shift","LD","x1shift","CD","y0shift","y1shift","vp","slope","xcenter","ycenter","simpleXVariables","simpleYVariables","FD","QUe","RD","Mpe","Fu","PD","kpe","Spe","qpe","Lpe","fillrule","layer","drawdirection","texttemplate","texttemplatefallback","textposition","textangle","xanchor","yanchor","activeshape","ND","eGe","zD","Cpe","Dpe","newselection","activeselection","dp","rGe","ID","P0","tGe","UD","R_","Epe","pp","BD","OD","Ppe","HD","mp","subtitle","xref","yref","automargin","uniformtext","minsize","autosize","minreducedwidth","minreducedheight","autoexpand","paper_bgcolor","plot_bgcolor","autotypenumbers","separators","colorway","datarevision","editrevision","selectionrevision","GD","Tr","Vr","F_","YD","VD","jD","Rpe","Fpe","zpe","z_","Npe","categories","modules","subplotsRegistry","basePlotModule","WD","componentsRegistry","ZD","Ipe","allCategories","allTypes","XD","layoutAttributes","traceLayoutAttributes","PlotlyGeoAssets","topojson","Bpe","_isLinkedToArray","layoutArrayContainers","schema","Ope","localeRegistry","_arrayAttrRegexps","layoutArrayRegexes","subplots","apiMethodRegistry","collectableSubplotTypes","moduleType","getModule","traceIs","getComponentMethod","iE","fa","gp","bp","Hpe","aE","N_","_s","z0","Ri","Xn","yh","xs","F0","gh","El","JD","Upe","Gpe","KD","Pl","calendars","R0","dateTick0","Ype","dateTime2ms","ms2DateTime","dfltRange","isJSDate","newDate","toMonthIndex","toJD","MIN_MS","MAX_MS","isDateTime","yp","QD","eE","nE","fromJD","ms2DateTimeLocal","cleanDate","Vpe","jpe","Wpe","rE","Xpe","Zpe","dayMonthYear","dayMonth","tE","incrementMonth","findExactDates","exactYears","exactMonths","exactDays","I_","sGe","oE","O_","Rl","$pe","Jpe","Kpe","Qpe","B_","eme","rme","tme","ame","findBin","sorterAsc","sorterDes","distinctVals","minDiff","roundUp","findIndexOfMin","H_","nme","ime","U_","lE","bh","ome","aggNums","geometricMean","midRange","stdev","interp","vE","cGe","cE","sE","G_","lme","xh","ws","Y_","uE","fE","V_","deg2rad","rad2deg","angleDelta","angleDist","isFullCircle","isAngleInsideSector","isPtInsideSector","pathArc","pathSector","pathAnnulus","hE","zu","isLeftAnchor","isCenterAnchor","isRightAnchor","isTopAnchor","isMiddleAnchor","isBottomAnchor","mE","Nu","_p","W_","dE","j_","pE","xp","segmentsIntersect","segmentDistance","getTextLocation","getPointAtLength","atan","clearLocationCache","getVisibleSegment","getTotalLength","isClosed","findPointOnPath","pathLength","tolerance","iterationLimit","wp","Fl","yE","onDone","bE","pGe","gE","_responsiveChartHandler","xE","mGe","Tp","X_","pme","mme","yme","tablet","featureDetect","wE","yGe","_E","gme","bme","AE","gGe","TE","_me","kE","bGe","ME","wme","qE","xGe","SE","CE","_Ge","LE","Tme","Ame","EE","wGe","DE","FE","Sme","kme","PE","RE","qme","zE","BE","TGe","IE","Lme","Cme","Dme","Eme","Pme","Ap","NE","Rme","Fme","toWellFormed","TextDecoder","TextEncoder","AGe","JE","wh","Ime","Bme","VE","jE","WE","Ome","OE","adjustFormat","HE","warnBadFormat","noFormat","nestedProperty","keyedContainer","relativeAttr","toLogRange","relinkPrivateKeys","Ts","XE","As","ci","Iu","sortObjectKeys","zl","To","Ko","I0","B0","Sp","Z_","Hme","counterRegex","$_","throttleDone","clearThrottle","Ao","clearResponsive","preserveDrawingBuffer","makeTraceGroups","notifier","filterUnique","filterVisible","pushUnique","increment","slugify","ensureNumber","swapAttrs","raiseToTop","cancelTransition","bBoxIntersect","simpleMap","randstr","OptionControl","optionList","smooth","syncOrAsync","noneOrAll","mergeArray","mergeArrayCastPositive","fillArray","castOption","extractOption","tagSelected","getTargetArray","minExtend","ZE","titleCase","containsAny","Ume","Gme","isIOS","Yme","isMacWKWebView","Vme","getFirefoxVersion","isD3Selection","ensureSingle","ensureSingleById","objectFromPath","jme","Wme","Mp","expandObjectPaths","numSeparate","TEMPLATE_STRING_REGEX","$E","templateString","Xme","hovertemplateString","J_","Zme","texttemplateString","$me","Kme","parseMultDiv","texttemplateStringForShapes","UE","fallback","Jme","subplotSort","N0","seedPseudoRandom","pseudoRandom","fillText","isValidTextValue","formatPercent","strTranslate","strRotate","strScale","getTextTransform","noCenter","textX","textY","targetX","targetY","anchorX","anchorY","setTransormAndDisplay","ensureUniformFontSize","_fullLayout","join2","bigFont","YE","Qme","getPositionFromD3Event","layerX","layerY","offsetX","offsetY","eP","QE","K_","eye","KE","Q_","qGe","rP","r4","LGe","tP","e4","rye","matchMedia","Bu","CGe","t4","qp","O0","aP","iP","Nt","vP","lye","nP","Lp","oP","lP","tye","aye","sP","uP","iye","cP","fP","nye","Th","DGe","hP","a4","sye","_ev","_internalEv","_internalOn","_internalOnce","_removeInternalListener","_removeAllInternalListeners","purge","mP","EGe","pP","dP","uye","Nl","undoQueue","sequence","autoplay","inSequence","beginSequence","undo","calls","redo","plotDo","fye","n4","PGe","yP","baseframe","G0","Sa","Fi","Ah","Dp","cye","vye","hye","gP","Mo","H0","dye","Ep","pye","o4","Pp","xP","l4","_P","Cp","bye","bP","xaxis","yaxis","autoshift","Aye","U0","xye","frames","crawl","isValObject","_ye","wye","Tye","IS_SUBPLOT_OBJ","IS_LINKED_TO_ARRAY","DEPRECATED","UNDERSCORE_ATTRS","selectPoints","animatable","gye","defs","valObjects","metaKeys","impliedEdits","findArrayAttributes","getTraceValObject","getLayoutValObject","_basePlotModules","attrRegex","layoutAttrOverrides","baseLayoutAttrOverrides","_modules","yye","St","Ou","Y0","Mye","Ms","s4","wP","TP","templatedArray","traceTemplater","newTrace","newContainer","arrayTemplater","defaultItems","_templateitemname","arrayDefaultKey","arrayEditor","_index","modifyBase","modifyItem","getUpdateObj","applyUpdate","qa","zGe","AP","Mh","idRegex","xAxisMatch","yAxisMatch","AX_ID_PATTERN","AX_NAME_PATTERN","SUBPLOT_PATTERN","HOUR_PATTERN","WEEKDAY_PATTERN","MINDRAG","MINZOOM","DRAGGERSIZE","REDRAWDELAY","DFLTRANGEX","DFLTRANGEY","traceLayerClasses","clipOnAxisFalseQuery","layerValue2layerClass","zindexSeparator","ba","Zn","kye","MP","id2name","name2id","cleanId","listIds","_subplots","gl3d","zaxis","getFromId","getFromTrace","scene","idSort","ref2id","isLinked","_axisMatchGroups","_axisConstraintGroups","ks","IGe","kP","clearOutlineControllers","_zoomlayer","clearOutline","_outlining","Rp","BGe","SP","scattermode","scattergap","Np","zp","Fp","getSubplotCalcData","getModuleCalcData","plot","zorder","getSubplotData","DP","Hu","Lye","V0","qP","_fullData","changed","LP","CP","manageCommandObserver","_commandObserver","lookupTable","hasSimpleAPICommandBindings","computeAPICommandBindings","executeAPICommand","Cye","va","YGe","HP","Dye","Eye","kh","Pye","Rye","Qr","Fye","zye","gr","Nye","EP","$n","Iye","Bye","c4","Oye","Hye","PP","Uu","er","fontAttrs","Bp","redrawText","previousPromises","_redrawTimer","_resolveResize","_promises","sendDataToCloud","graphJson","searchParams","chart","Uye","Gye","RP","Xye","_mainAxis","_anchorAxis","_plots","_counterAxes","overlaying","Ip","NP","_pushmargin","_pushmarginIds","_reservedMargin","supplyDefaults","skipUpdateCalc","_skipDefaults","calcdata","_transitionData","createTransitionData","_dfltTitle","colorbar","annotation","_traceWord","_initialAutoSizeIsDone","supplyLayoutGlobalDefaults","sanitizeMargins","plotAutoSize","_d3locale","jye","_extraFormat","_visibleModules","Vye","_splomAxes","_splomSubplots","_splomGridDflt","_scatterStackOpts","_firstScatter","_alignmentOpts","_colorAxes","_requestRangeslider","_traceUids","Yye","supplyDataDefaults","cartesian","_has","_hasPlotType","supplyLayoutModuleDefaults","crossTraceDefaults","_hasOnlyLargeSploms","shapes","images","linkSubplots","cleanPlot","_bgLayer","_shouldCreateBgLayer","_dragging","_meta","Wye","_preGUI","_tracePreGUI","supplyDefaultsUpdateCalc","_frames","_frameHash","_counter","_interruptCallbacks","clean","_glcontainer","_glcanvas","_infolayer","_subplotsWith","_hasClipOnAxisFalse","cliponaxis","_mainSubplot","spikemode","mirror","_counterDomainMin","_counterDomainMax","supplyTraceDefaults","carpet","_carpet","supplyAnimationDefaults","supplyAnimationFrameDefaults","supplyAnimationTransitionDefaults","supplyFrameDefaults","_dfltShowLegend","hovertemplate","_dataTemplate","_initialAutoSize","includeBasePlot","finalizeSubplots","supplyLayoutDefaults","_modeBar","_animationRaf","cancelAnimationFrame","fid","undoqueue","undonum","_hmlumcount","_hmpixcount","_transitioning","_transitioningWithDuration","_dragged","_dragdata","_hoverdata","_snapshotInProgress","_editing","_mouseDownTime","_legendMouseDownTime","clearAutoMarginIds","allowAutoMargin","autoMargin","xl","yb","_replotting","doAutoMargin","didMarginChange","Zye","_redrawFromAutoMarginCount","$ye","FP","OP","prepareFn","rehover","reselect","runFn","modifyFrames","computeFrame","extendLayout","extendTrace","recomputeFrameHash","extendObjectWithContainers","dataArrayContainers","doCalcdata","_name","r2l","xr0","xr1","yr0","yr1","plotinfo","transitionAxes","transitionFromReact","setScale","_numBoxes","_numViolins","_violinScaleGroupStats","_piecolormap","_sunburstcolormap","_treemapcolormap","_iciclecolormap","_funnelareacolormap","_arrayAttrs","_extremes","polar","radialaxis","angularaxis","cauto","cmin","cmax","isContainer","calc","clearCalc","setupMultiCategory","Qye","zP","categoryorder","Jye","_categories","_traceIndices","_xautoBinFinished","_yautoBinFinished","_axesDim","_diag","_categoriesMap","_scene","_categoriesValue","_categoriesAggregatedValue","_initialCategories","sortByInitialCategories","Kye","crossTraceCalc","_rehover","redrag","_redrag","_previousSelections","_reselect","generalUpdatePerTraceModule","traceHash","plotBasePlot","cleanBasePlot","Il","Gu","svgAttrs","Qa","jGe","FROM_BL","FROM_TL","FROM_BR","LINE_SPACING","CAP_SHIFT","MID_SHIFT","OPPOSITE_SIDE","Ca","vi","La","zi","ege","rge","tge","XP","matchTex","convertToTspans","ZP","GP","YP","MathJax","oge","fontSize","svg_ts","SVG","fontCache","linebreaks","mathjax","InputJax","startup","OutputJax","age","nge","ige","handleRetriesFor","lge","preserveAspectRatio","JP","popup","VP","uge","sge","fge","p4","m4","$P","Op","Yu","KP","vge","QP","rR","eR","cge","mge","positionText","jP","NEWLINES","BR_TAG_ALL","plainText","allowedTags","hge","mu","nbsp","plusmn","dge","pge","WP","horizontalAlign","verticalAlign","gd","_calcInverseTransform","_invTransform","convertEntities","sanitizeHTML","lineCount","d4","makeTextShadow","makeEditable","fontFamily","contenteditable","selectNodeContents","addRange","XGe","lR","yge","qh","Hp","Vu","gge","tR","Sh","aR","_colorAx","_sync","nR","reversescale","iR","oR","noNumericCheck","returnArray","hasColorscale","showscale","extractOpts","extractScale","flipScale","makeColorScaleFunc","makeColorScaleFuncFromTrace","ko","ZGe","fR","sR","_ge","wge","y4","uR","axisHoverFormat","descriptionOnlyNumbers","descriptionWithDates","Ni","JGe","SR","cR","j0","kR","b4","vR","hR","Age","Qo","Mge","kge","g4","tick0","dtick","Sge","dR","pR","tickmode","mR","yR","gR","bR","xR","wR","TR","AR","MR","standoff","autorange","autorangeoptions","minallowed","maxallowed","clipmin","clipmax","include","rangemode","fixedrange","modebardisable","insiderange","scaleanchor","scaleratio","constraintoward","rangebreaks","bounds","dvalue","nticks","ticklabelstep","tickvals","ticktext","tickson","ticklabelmode","ticklabelposition","ticklabeloverflow","ticklabelshift","ticklabelstandoff","ticklabelindex","ticklen","tickwidth","tickcolor","showticklabels","labelalias","showspikes","spikecolor","spikethickness","spikedash","spikesnap","tickfont","tickangle","autotickangles","tickprefix","showtickprefix","ticksuffix","showticksuffix","showexponent","exponentformat","minexponent","separatethousands","tickformat","tickformatstops","dtickrange","hoverformat","unifiedhovertitle","showline","linecolor","linewidth","showgrid","gridcolor","gridwidth","griddash","zeroline","zerolinecolor","zerolinelayer","zerolinewidth","showdividers","dividercolor","dividerwidth","minor","minorloglabels","categoryarray","Up","KGe","CR","It","qR","LR","qge","thicknessmode","thickness","lenmode","xpad","ypad","outlinecolor","outlinewidth","borderwidth","eYe","ER","Lge","Cge","Dge","DR","Gp","cLetter","onlyIfNumerical","noScale","showScaleDflt","colorscaleDflt","editTypeOverride","colorAttr","autocolorscale","autoColorDflt","noColorAxis","coloraxis","_4","rYe","PR","Ege","Pge","x4","sequential","sequentialminus","diverging","_isSubplotObj","w4","tYe","RR","Rge","M4","A4","T4","FR","zR","Fge","zge","Yp","nYe","IR","NR","Nge","Ige","Bge","isMinor","calendar","Vp","iYe","OR","k4","BR","outerTicks","S4","oYe","HR","So","lYe","UR","jp","Oge","inclusionAttr","handleItemDefaults","Wp","sYe","YR","q4","Hge","GR","Uge","Gge","Yge","noTicklabelshift","noTicklabelstandoff","noTicklabelstep","noAng","noAutotickangles","noExp","noMinorloglabels","Xp","uYe","VR","Vge","tickSuffixDflt","L4","fYe","jR","Ss","jge","Wge","Xge","Zge","$ge","Jge","Bl","cYe","ZR","WR","D4","Kge","Qge","XR","e3e","C4","QR","vYe","KR","$R","r3e","JR","t3e","rF","hYe","eF","a3e","n3e","i3e","W0","dYe","aF","tF","E4","o3e","containerStr","rl","pYe","nF","Zp","X0","handleDefaults","getScale","isValidScale","Jn","mYe","oF","iF","l3e","hasLines","hasMarkers","hasText","isBubble","sF","yYe","lF","s3e","sizeref","sizemin","sizemode","qo","Lh","getSubplot","subplot","geo","isTraceInSubplots","xaxes","yaxes","p2c","c2dApply","c2d","getDistanceFunction","quadrature","getClosest","inbox","makeEventData","pointNumber","fullData","curveNumber","pointIndex","xVal","yVal","xa","ya","zLabelVal","appendArrayPointValue","uF","fF","appendArrayMultiPointValues","u3e","locations","f3e","c3e","isUnifiedHover","isXYhover","R4","bYe","cF","P4","v3e","h3e","p3e","gF","xYe","yF","hF","dF","pF","mF","m3e","Pr","vF","qs","F4","z4","N4","Rr","Fr","pentagon","hexagon","hexagon2","octagon","star","hexagram","hourglass","noDot","bowtie","needLine","noFill","asterisk","backoff","Zr","_Ye","IF","Fa","bt","y3e","Jp","Da","g3e","Dh","Kp","b3e","_3e","qF","w3e","T3e","A3e","rr","I4","M3e","k3e","S3e","LF","fillpattern","fillgradient","getPatternAttr","_xA","c2p","_yA","EF","setPosition","setSize","setRect","translatePoint","translatePoints","hideOutsideRangePoint","isPtWithinRange","hideOutsideRangePoints","xcalendar","ycalendar","crispRound","singleLineStyle","dashLine","lineGroupStyle","dashStyle","singleFillStyle","fillGroupStyle","bF","symbolNames","symbolFuncs","symbolBackOffs","symbolNeedLines","symbolNoDot","symbolNoFill","symbolList","q3e","CF","symbolNumber","xF","DF","radialreversed","reversed","horizontalreversed","verticalreversed","gradientUnits","_uid","_defs","G4","patternUnits","patternTransform","initGradients","initPatterns","pointStyle","makePointStyleFns","singlePointStyle","selectedOpacityFn","ms2mrc","mrc","selectedSizeFn","om","V4","Y4","so","outlierwidth","outliercolor","mlw","mlcc","lineScale","mlc","mcc","markerScale","mc","selectedColorFn","mld","isBlank","mgt","mgc","tryColorscale","makeSelectedPointStyleFns","makeSelectedTextStyleFns","textfont","selectedTextColorFn","selectedPointStyle","mrc2","FF","zF","B4","PF","RF","Z0","NF","Xu","Wu","$p","_F","textPointStyle","formatLabels","tf","tw","ty","tv","selectedTextStyle","smoothopen","smoothclosed","C3e","hv","hvh","vhv","D3e","getMarkerStandoff","applyBackoff","makeTester","tester","testref","savedBBoxes","O4","wF","_exportedPlot","_baseUrl","bBox","setClipUrl","getTranslate","setTranslate","P3e","setPointGroupScale","R3e","mf","_geo","setTextPointsScale","AF","MF","kF","SF","H4","U4","Ch","ju","$0","TF","ma","angleref","project","lonlat","getMarkerAngle","Q0","wYe","UF","J0","F3e","z3e","j4","Zu","BF","Qp","K0","OF","N3e","HF","propContainer","traceIndex","avoid","containerGroup","subtitlePropName","subtitlePlaceholder","_hColorbarMoveTitle","getBBox","maxShift","_titleScoot","SUBTITLE_PADDING_EM","SUBTITLE_PADDING_MATHJAX_EM","TYe","WF","B3e","O3e","qt","H3e","Cs","U3e","GF","YF","Ds","rm","Lo","G3e","Y3e","tm","am","VF","jF","nm","lm","im","Eh","Z4","msUTC","_m","_rangebreaks","_B","_m2","pmin","pmax","c2l","l2c","l2p","p2l","d2r","r2d","d2c","r2c","c2r","l2r","d2p","r2p","p2d","p2r","cleanPos","d2l_noadd","fraction2r","r2c_just_indices","_matchGroup","r2fraction","limitRange","cleanRange","_cleanRange","_lBreaks","locateBreaks","maskBreaks","_cachedPatterns","_cachedValues","makeCalcdata","isValidRange","getAutorangeDflt","reverseDflt","isReversed","_emptyCategories","_dateFormat","_separators","_numFormat","_minDtick","_forceTick0","um","AYe","JF","XF","$4","V3e","sm","j3e","W3e","ZF","X3e","$F","noMultiCategory","$3e","J3e","Z3e","Ph","MYe","iz","Q3e","rz","Es","fm","ebe","rbe","tz","tbe","abe","J4","K4","r6","KF","nopad","nz","_vals","_tickAngles","bb","_selections","QF","nbe","_inputDomain","extrapad","applyAutorangeOptions","getAutoRange","makePadFn","doAutoRange","_rl","_attr","rangeslider","findExtremes","padded","tozero","vpadLinearized","ppadplus","ppadminus","ppad","vpadplus","vpad","vpadminus","ez","Q4","e6","concatExtremes","annotations","_annIndices","_shapeIndices","az","lbe","sbe","cm","ube","fbe","Gr","SYe","qz","Ii","ha","rc","Fh","kr","cbe","zh","di","vbe","oz","rn","hbe","dm","pm","dbe","i6","pbe","ac","ym","pi","Tn","Ps","Nh","gm","mbe","ybe","Ju","xm","o6","l6","s6","yz","lz","Rh","Ku","Ih","gbe","setConvert","bbe","xbe","_be","gz","v6","Tbe","coerceRef","coerceRefArray","getRefType","coercePosition","cleanPosition","redrawComponents","Abe","getDataConversions","fz","uz","t6","cz","a6","bz","Lbe","noTick","tickText","vz","getDataToCoordFunc","counterLetter","minDtick","saveRangeInitial","_rangeInitial0","_rangeInitial1","_autorangeInitial","saveShowSpikeInitial","_showSpikeInitial","_showspikes","_cartesianSpikesEnabled","autoBin","_dataSpan","autoTicks","tickIncrement","tickFirst","Mbe","kbe","prepMinorTicks","_tmin","_isMinor","prepTicks","_tick0Init","_roughDTick","getTickFormat","_dtickInit","_dowTick0","_rawTick0","_definedDelta","Sbe","wz","calcTicks","n6","simpleLabel","skipLabel","e5e","periodX","qbe","m6","_tmax","_prevDateHead","_inCalcTicks","hz","dz","Cbe","xz","_z","Dbe","nl","_tickexponent","_tickround","nc","d6","Tz","fontWeight","fontStyle","fontVariant","fontTextcase","fontLineposition","fontShadow","fontColor","_hasDayOfWeekBreaks","xbnd","Oh","_trueSide","Ebe","Bh","Pbe","Rbe","text2","Fbe","thetaunit","Ibe","Nbe","zbe","hoverLabelText","Az","Bbe","Obe","pz","Ube","u6","wm","axInfo","mz","Mz","f6","p6","kz","Sz","hm","Jbe","Kbe","Tm","_hideCounterAxisInsideTickLabels","c6","getSubplots","gl2d","findSubplotsWithAxis","makeClipPaths","_clips","_paper","xaxislayer","yaxislayer","minorGridlayer","gridlayer","zerolinelayerAbove","axShifts","overlayingShiftedAx","drawOne","_shiftPusher","_fullDepth","skipTitle","_shift","Qbe","_mainLinePosition","_mainMirrorPosition","_prevTickAngles","_depth","makeTransTickFn","makeTransTickLabelFn","Hbe","clipEnds","_gridVals","Gbe","drawGrid","counterAxis","minorLayer","transFn","drawZeroLine","getTickSigns","makeTickPath","drawTicks","_linepositions","drawLabels","labelFns","makeLabelFns","repositionOnUpdate","jbe","getPxPosition","_titleStandoff","Wbe","yFn","xFn","Ybe","Vbe","labelStandoff","labelShift","anchorFn","heightFn","crisp","shouldShowZeroLine","_gw","_adjustTickLabelsOverflow","labelsMaxW","labelsMaxH","_insideTickLabelsUpdaterange","mainplotinfo","Xbe","Zbe","$be","Cz","qYe","Lz","y6","LYe","Dz","r5e","noInsiderange","Pz","CYe","Ez","t5e","srcElement","n5e","g6","DYe","Rz","i5e","o5e","zz","EYe","Fz","Bz","PYe","Iz","Nz","l5e","Hz","RYe","Oz","s5e","u5e","f5e","c5e","b6","_hoverAnywhereActive","_hoverlayer","Bi","FYe","Vz","v5e","x6","h5e","d5e","p5e","Qu","getCursor","Gz","Yz","Uz","unhover","unhoverRaw","pointerEvents","onmousedown","_ontouchstart","clampFn","prepFn","minDrag","moveFn","doneFn","toElement","clickFn","coverSlip","Rs","zYe","jz","Zz","NYe","Xz","_6","Hh","T6","IYe","$z","w6","m5e","maxheight","traceorder","tracegroupgap","entrywidth","entrywidthmode","indentation","itemsizing","itemwidth","itemclick","itemdoubleclick","groupclick","groupdoubleclick","titleclick","titledoubleclick","valign","Gh","Uh","isGrouped","getId","M6","OYe","Jz","Am","mi","y5e","g5e","b5e","x5e","A6","_5e","_isShape","barmode","_legends","q6","S6","Fs","k6","w5e","T5e","Kz","handleItemClick","groupTitle","noClick","hiddenlabels","handleTitleClick","L6","UYe","Qz","scrollBarWidth","scrollBarMinHeight","scrollBarColor","scrollBarMargin","scrollBarEnterAttrs","ry","titlePad","itemGap","tN","GYe","rN","C6","eN","D6","_inHover","pts","_groupMinRank","_preGroupSort","_preSort","_groupTitleFont","_lgroupsLength","_maxNameLength","km","ef","Mm","aN","formatPiePercent","formatPieValue","getFirstFilled","getRotationAngle","iN","VYe","nN","A5e","M5e","Sm","jYe","sN","oN","lN","k5e","F6","WYe","dN","An","E6","cn","uN","yi","Oi","P6","qm","S5e","q5e","L5e","R6","vN","contours","coloring","showlines","_operation","showMarker","showLine","showFill","showGradientLine","showGradientFill","anyLine","anyFill","hN","cornerradius","lineHeight","vertexcolor","facecolor","_distinct","hasTotals","boxpoints","B6","XYe","TN","Nn","da","N6","Dm","z6","pa","Yh","af","pN","mN","I6","_N","lc","yN","gN","D5e","sc","E5e","bN","_topdefs","_titleWidth","_titleHeight","Cm","legendId","fullLayout","_titleClickTimeout","z5e","R5e","F5e","Pm","_maxHeight","_width","_height","I5e","Em","_maxWidth","Lm","_effHeight","P5e","B5e","O5e","_scrollY","wN","expandedIndex","_group","_clickTimeout","xN","N5e","G6","U6","nf","Ol","H5e","O6","U5e","G5e","Hi","Y5e","ll","Rm","sl","V5e","fc","gi","j5e","W5e","DN","H6","X5e","Z5e","$5e","Bt","Wr","AN","box","ohlc","violin","candlestick","J5e","scatter","scattergl","splom","MN","EN","_subplot","hLinePoint","vLinePoint","xpx","ypx","pointerX","pointerY","xval","yval","_hoverPointerX","_hoverPointerY","_hoverXVals","_hoverYVals","_hoverXAxes","_hoverYAxes","cd","maxHoverDistance","maxSpikeDistance","spikeDistance","xSpike","ySpike","xLabelVal","yLabelVal","_splomScenes","hoverPoints","finiteRange","hoverLayer","txe","_spikepoints","nxe","qN","SN","CN","zN","NN","bbox","xPixel","yPixel","PN","rotateLabels","outerContainer","commonLabelOpts","hoverLabels","minX","maxX","minY","maxY","_invScaleX","_invScaleY","del","RN","crossPos","by","tx2width","posref","exe","commonLabelBoundingBox","FN","pointNumbers","binNumber","axe","xvals","yvals","K5e","loneHover","_x0","_x1","_y0","_y1","inOut_bbox","xLabel","yLabel","zLabel","idealAlign","nameLength","textAlign","hovertemplateLabels","anchorIndex","Q5e","uc","_topclips","hovertemplatefallback","kN","ty0","txwidth","nameOverride","LN","extraText","alignShift","textShiftX","text2ShiftX","rxe","xhoverformat","yhoverformat","xerr","xerrneg","yerr","yerrneg","posLetter","boxmode","violinmode","dPos","Fm","$Ye","IN","ixe","oxe","lxe","ON","JYe","sxe","uxe","fxe","GN","KYe","UN","HN","cxe","vxe","Y6","QYe","YN","hxe","dxe","WN","eVe","jN","VN","pxe","mxe","yxe","$N","rVe","ZN","V6","XN","gxe","QN","tVe","KN","bxe","JN","xxe","In","aVe","tI","_xe","zm","wxe","Vh","eI","rI","castHoverOption","castHoverinfo","loneUnhover","lf","Hl","selectMode","drawMode","openMode","rectMode","freeMode","selectingOrDrawing","Nm","iVe","aI","regl","Im","oVe","nI","home","curlybraces","zoombox","pan","zoom_plus","zoom_minus","autoscale","tooltip_basic","tooltip_compare","plotlylogo","camera","movie","question","disk","cloudupload","drawopenpath","drawclosedpath","lasso","selectbox","drawline","drawrect","drawcircle","eraseshape","spikeline","pencil","newplotlylogo","Om","lVe","iI","CIRCLE_SIDES","i000","i090","Bm","i180","i270","cos45","sin45","Hm","sVe","lI","kxe","oI","axValue","getTransform","zs","Ul","Cxe","fI","cc","j6","cI","sI","uI","Dxe","Exe","jh","Um","writePaths","readPaths","xsizemode","ysizemode","pointsOnRectangle","pointsOnEllipse","handleEllipse","ellipseOver","fixDatesForPaths","Vm","fVe","xI","vI","yI","Pxe","Rxe","vc","hI","dI","pI","mI","Fxe","zxe","gI","Gm","Ns","Ixe","Ym","Bxe","Oxe","Hxe","Uxe","bI","isActiveShape","newShapes","_activeShapeIndex","editHelpers","createShapeObj","X6","cVe","_I","Vxe","Wxe","W6","Xxe","Zxe","$xe","isActiveSelection","_activeSelectionIndex","Wh","vVe","wI","segmentRE","paramRE","paramIsX","drawn","paramIsY","numParams","Bs","Ha","fl","TI","Is","rangeToShapePosition","shapePositionToRange","decodeDate","encodeDate","extractPathCoords","countDefiningCoords","getDataToPixel","getPixelToData","roundPositionForSharpStrokeRendering","makeShapesOptionsAndPlotinfo","_hadPlotinfo","makeSelectionsOptionsAndPlotinfo","getPathString","Jxe","getPixelShift","Z6","dVe","kI","Kxe","cl","AI","MI","Qxe","sf","e_e","Xh","r_e","t_e","textx","texty","a_e","Xm","pVe","RI","i_e","SI","CI","o_e","DI","EI","qI","Wm","l_e","s_e","u_e","f_e","J6","jm","$6","v_e","h_e","d_e","p_e","m_e","LI","redrawing","y_e","_deselect","g_e","Qm","mVe","YI","b_e","OI","Q6","uf","x_e","__e","HI","K6","Jm","w_e","FI","zI","NI","ff","Kn","e7","r7","_shapeUpperLayer","_shapeLowerLayer","shapelayer","UI","Zm","Km","_paperdiv","GI","II","onmousemove","M_e","BI","_deactivateShape","k_e","draglayer","T_e","shapelayerBetween","A_e","eraseActiveShape","drawLabel","jI","yVe","VI","hc","DIALOG_TITLE","DIALOG_MESSAGE_CLOUD","DIALOG_MESSAGE_CLOUD_ACCOUNT","DIALOG_MESSAGE_OTHER","DIALOG_CANCEL","DIALOG_CONFIRM","ZI","gVe","XI","WI","L_e","C_e","hostname","D_e","n7","bVe","tB","bi","P_e","JI","et","R_e","F_e","dc","Xr","rt","Mn","_isHoriz","t7","viewInitial","aspectratio","aspectmode","KI","_previousVal","toImage","downloadJson","sendChartToCloud","PLOTLYENV","BASE_URL","zoom2d","_cat","pan2d","select2d","lasso2d","zoomIn2d","zoomOut2d","autoScale2d","resetScale2d","hoverClosestCartesian","hoverCompareCartesian","zoom3d","pan3d","orbitRotation","tableRotation","resetCameraDefault3d","resetCameraLastSave3d","hoverClosest3d","zoomInGeo","a7","zoomOutGeo","resetGeo","hoverClosestGeo","eB","$I","fitScale","midPt","minscale","maxscale","ey","QI","rB","I_e","hoverClosestPie","resetViewSankey","_viewInitial","toggleHover","resetViews","toggleSpikelines","N_e","resetViewMap","zoomInMap","zoomOutMap","i7","xVe","oB","aB","B_e","nB","iB","pc","O_e","DRAW_MODES","backButtons","foreButtons","l7","U_e","o7","H_e","s7","activecolor","sB","_Ve","lB","G_e","Zh","Y_e","V_e","modebar","vB","wVe","cB","u7","j_e","uB","W_e","X_e","fB","graphInfo","vl","backgroundColor","hasButtons","hasLogo","removeAllButtons","updateButtons","getLogo","updateActiveButton","buttonElements","buttonsNames","createGroup","createButton","createIcon","ascent","descent","Z_e","_modebardiv","_privateplot","pB","TVe","dB","J_e","hB","f7","K_e","Q_e","ay","e4e","r4e","l4e","a4e","i4e","n4e","o4e","t4e","c7","AVe","mB","manage","v7","MVe","yB","s4e","vf","$h","cf","h7","Co","u4e","gB","f4e","c4e","v4e","h4e","axIds","layoutOut","hasImage","_constraintGroup","d7","bB","p7","d4e","xB","axHasImage","_inputRange","_constraintShrinkable","getAxisGroup","za","iy","kn","xi","Ui","m7","y7","Jh","wB","SB","Kh","Gl","qB","p4e","m4e","TB","LB","g4e","b4e","x4e","_hasZeroWidth","_hasZeroHeight","drawMainTitle","_lw","mainplot","bg","plotgroup","clipId","clipRect","layerClipId","AB","ny","xlines","ylines","MB","kB","layoutStyles","S4e","q4e","k4e","M4e","w4e","T4e","_4e","A4e","doTraceStyle","arraysToCalcdata","editStyle","cd0","redrawReglTraces","doColorBars","layoutReplot","doLegend","doTicksRelayout","updateGrid","doModeBar","updateFx","doCamera","setViewport","drawData","_splomGrid","doAutoRangeAndConstraints","finalDraw","drawMarginPushers","x7","qVe","FB","L4e","C4e","DB","g7","EB","D4e","PB","E4e","ly","_selectionLayer","selectionLayer","RB","sy","P4e","b7","_deactivateSelection","R4e","activateLastSelection","NB","LVe","zB","segmentId","checkIntersection","seg1","seg2","segmentChop","seg","pt","statusRemove","segmentUpdate","segmentNew","segmentRemove","tempStatus","above","below","rewind","vert","txt","segs","chainStart","chainRemoveHead","chainRemoveTail","chainNew","pt1","pt2","chainMatch","chainClose","chainAddHead","chainAddTail","chainConnect","index1","index2","chainReverse","chainJoin","BB","CVe","IB","epsilon","pointAboveOrOnLine","pointBetween","pointsSameX","pointsSameY","pointsSame","pointsCompare","pointsCollinear","linesIntersect","alongA","alongB","pointInsideRegion","HB","DVe","OB","getHead","findTransition","GB","EVe","UB","Qh","myFill","otherFill","isStart","addRegion","calculate","VB","PVe","YB","matches_head","matches_pt1","WB","RVe","jB","ed","H4e","intersect","differenceRev","ZB","FVe","XB","U4e","toPolygon","segments","inverted","regions","selectDifference","coordinates","selectUnion","fromPolygon","region","QB","zVe","KB","Qn","G4e","Y4e","$B","V4e","rd","JB","Gi","td","ad","buildLog","combined","inverted1","inverted2","selectIntersect","selectDifferenceRev","selectXor","polygonFromGeoJSON","polygonToGeoJSON","PolyBool","rO","NVe","eO","w7","IVe","tO","_7","uy","fy","xmin","xmax","ymin","ymax","isRect","degenerate","isSegmentBent","addPt","filtered","nO","BVe","aO","BENDPX","MINSELECT","SELECTDELAY","SELECTID","kO","OVe","MO","iO","j4e","od","W4e","nd","X4e","Z4e","$4e","J4e","ld","k7","S7","oO","lO","vO","hO","dO","T7","K4e","Q4e","e6e","r6e","vy","t6e","pO","Yi","a6e","n6e","hy","hl","i6e","q7","L7","sO","o6e","l6e","C7","mO","hoverOnBox","h6e","yO","searchInfo","d6e","p6e","m6e","fO","ud","sd","P7","u6e","D7","selectionDefs","bO","mergedPolygons","xO","fd","A7","f6e","_lastSelectedSubplot","c6e","v6e","_noEmitSelectedAtStart","uO","_xaxes","_yaxes","pointIndices","styleOnSelect","node3","nodeRangePlot3","y6e","gO","E7","_O","M7","cO","Os","selectBatch","g6e","x6e","TO","AO","b6e","wO","selectionTesters","_6e","lassoPoints","prepSelect","_clearSubplotSelections","fillRangeItems","w6e","T6e","doneFnCompleted","clearSelectionsCache","selectOnClick","R7","HVe","SO","noRotate","vd","UVe","qO","axisRefDescription","yc","YVe","DO","LO","CO","A6e","borderpad","arrowcolor","arrowhead","startarrowhead","arrowside","arrowsize","startarrowsize","arrowwidth","startstandoff","axref","ayref","xshift","yshift","clicktoshow","xclick","yclick","hovertext","captureevents","hd","VVe","EO","PTS_LINESONLY","minTolerance","toleranceGrowth","maxScreensAway","eventDataKeys","jVe","PO","Vi","WVe","HO","RO","M6e","k6e","FO","zO","S6e","NO","q6e","L6e","C6e","D6e","xperiod","yperiod","xperiod0","yperiod0","xperiodalignment","yperiodalignment","offsetgroup","alignmentgroup","stackgroup","groupnorm","stackgaps","hoveron","smoothing","simplify","connectgaps","maxdisplayed","F7","ZVe","YO","UO","GO","E6e","P6e","R6e","XO","$Ve","WO","VO","gy","F6e","z6e","jO","N6e","_selectionIndices","$O","JVe","ZO","pd","KVe","QO","I6e","JO","KO","QVe","rH","eH","md","supplyDrawNewSelectionDefaults","_H","eje","xH","H7","ji","tH","B6e","fH","O6e","N7","Hs","H6e","aH","U6e","G6e","cH","xy","Y6e","V6e","j6e","W6e","X6e","I7","Z6e","$6e","J6e","z7","U7","nH","Bn","iH","vH","hH","oH","B7","lH","e7e","dH","pH","mH","yH","O7","gH","_y","sH","xaHash","yaHash","xLinks","yLinks","isSubplotConstrained","bH","onwheel","_onwheel","onmousewheel","isAddedWheelEvent","uH","makeDragBox","r7e","Q6e","t7e","a7e","xScaleFactor","yScaleFactor","zoomScalePts","zoomScaleTxt","clipOnAxisFalseTraces","_scrollZoom","_enablescrollzoom","makeDragger","makeRectDragger","makeZoombox","makeCorners","updateZoombox","xyCorners","transitionZoombox","removeZoombox","showDoubleClickNotifier","attachWheelEventHandler","G7","Ty","n7e","wy","i7e","o7e","Na","initInteractions","_hoversubplot","_lasthover","onmouseout","_draggers","AH","tje","TH","wH","kH","l7e","Y7","yd","s7e","V7","containerArrayMatch","u7e","isAddVal","MH","isRemoveVal","applyContainerArrayChanges","replot","recalc","PH","Wi","CH","DH","Sn","bd","EH","xd","f7e","j7","c7e","gc","SH","v7e","qH","Ay","clearPromiseQueue","cleanLayout","xaxis1","yaxis1","scene1","ternary","isdate","islog","ybins","xbins","swapXYData","scl","reversescl","highlightColor","highlightcolor","highlightWidth","highlightwidth","increasing","decreasing","autobinx","autobiny","error_x","error_y","copy_ystyle","coerceTraceIndices","manageArrayContainers","h7e","LH","clearAxisTypes","W7","collectionsAreEqual","Q7","$r","Sy","d7e","p7e","nr","Dt","$7","On","Xi","Ry","Lr","qn","m7e","y7e","X7","g7e","b7e","x7e","_7e","IH","My","Us","w7e","Z7","wd","BH","M7e","OH","qy","Ly","UH","L7e","maxp","C7e","maxPoints","GH","Cy","XH","fullReplot","_doPlot","markerSize","Fy","colorbars","undoit","redoit","Yl","ky","Dy","_guiEditing","_pielayer","KH","ZH","layoutstyle","axrange","rangesAltered","JH","E7e","QH","Ey","K7","P7e","R7e","FH","zH","F7e","z7e","NH","Py","getValObject","immutable","arrayIndex","nChanges","nChangesAnim","newDataRevision","_compareAsJSON","V7e","_lastBBox","_frameQueue","_frameWaitingCnt","transitionOpts","onInterrupt","_currentFrame","frameOpts","onComplete","_lastFrameAt","_timeToNext","_runningTransitions","addFrames","deleteFrames","addTraces","jH","deleteTraces","q7e","startSequence","moveTraces","stopSequence","WH","extendTraces","YH","prependTraces","J7","VH","newPlot","_container","_toppaper","_hoverpaper","_imageLowerLayer","_cartesianlayer","_polarlayer","_smithlayer","_ternarylayer","_geolayer","_funnelarealayer","_iciclelayer","_treemaplayer","_sunburstlayer","_indicatorlayer","_glimages","_imageUpperLayer","_menulayer","j7e","drawFramework","drawingBufferWidth","drawingBufferHeight","react","N7e","O7e","B7e","relayout","restyle","setPlotConfig","_guiRelayout","_guiRestyle","_guiUpdate","_storeDirectGUIEdit","Vl","Zi","W7e","getDelay","getRedrawFunc","encodeSVG","encodeJSON","eU","createBlob","X7e","atob","octetStream","getPlotTitle","getPlotSubtitle","IMAGE_URL_PREFIX","zy","uje","rU","rw","Z7e","$7e","ew","hf","J7e","K7e","Q7e","ewe","toSVG","XMLSerializer","serializeToString","rwe","Ny","fje","tU","awe","nwe","Td","willReadFrequently","drawImage","toDataURL","aw","cje","iU","aU","nU","owe","Ad","lwe","swe","uwe","imageDataOnly","sU","vje","lU","cwe","vwe","hwe","Eo","pf","Iy","ywe","mwe","Ia","dwe","pwe","df","dynamic","invisible","bwe","oU","keyMinusId","gwe","fU","hje","uU","xwe","By","iw","dje","dU","Oy","cU","wwe","Twe","vU","bU","ow","ei","ri","pU","mU","Mwe","yU","gU","Hy","templateitemname","Uy","Md","Ji","kwe","Swe","qwe","Lwe","traceType","dataCount","templateCount","makeTemplate","validateTemplate","_U","Ot","Ea","Cwe","Dwe","deleteActiveShape","downloadImage","xU","yje","wU","lw","Ewe","bc","gje","MU","TU","Rwe","AU","qU","bje","SU","kU","traceIndices","fillDflt","uw","xje","EU","LU","CU","DU","Fwe","noAngle","noAngleRef","noStandOff","noSelect","noLine","noLineDash","fw","_je","PU","zwe","Nwe","Iwe","noDash","wje","RU","vw","Tje","FU","Bwe","hw","Aje","NU","Gy","zU","moduleHasFillgradient","Owe","HU","Mje","OU","IU","Hwe","Uwe","Gwe","xc","Ywe","Vwe","jwe","Wwe","Xwe","BU","Zwe","$we","Jwe","inherit","kd","kje","UU","Kwe","alignmentIndex","offsetGroups","_offsetIndex","offsetIndex","YU","Sje","GU","Qwe","e8e","r8e","jU","qje","VU","t8e","a8e","bargap","Lje","XU","n8e","WU","i8e","Yy","l8e","starts","ends","mw","Cje","$U","pw","ZU","Vy","Dje","JU","Jt","jy","Eje","QU","KU","Wy","Pje","oG","eG","gw","Sd","rG","yw","bw","s8e","u8e","f8e","tG","iG","xw","aG","nG","orig_x","xEnd","xStart","orig_y","yEnd","yStart","gap","calcMarkerSize","calcAxisExpansion","setFirstScatter","getStackOpts","sG","Rje","lG","Xy","v8e","sepNegVal","overlapNoMerge","posAxis","width1","positions","distinctPositions","binWidth","put","getLabel","qd","Fje","uG","TEXTPAD","zje","hG","Ki","wc","h8e","Ld","d8e","Zy","p8e","m8e","y8e","_base","hasB","_8e","norm","Tw","offsetindex","S8e","vG","Aw","cG","w8e","cornerradiusvalue","cornerradiusform","x8e","Tc","Mw","k8e","_outmost","T8e","b8e","extents","poffset","_sMin","_sMax","q8e","L8e","groupgap","barwidth","bargroupwidth","bardelta","A8e","M8e","fG","outsidetextfont","_computePh","ph0","ph1","xCat","yCat","barnorm","bargroupgap","setGroupPositions","yG","Nje","mG","dG","pG","kw","D8e","C8e","_rawLength","sNorm","qw","Ije","TG","E8e","_G","Cd","wG","gG","bG","Jy","P8e","xG","Sw","connectGaps","baseTolerance","linearized","kG","Bje","MG","AG","tonextx","tonexty","tonext","_groupIndex","_nexttrace","_prevtrace","_ownfill","Lw","Oje","LG","Po","R8e","Dd","Ac","qG","na","Mc","F8e","z8e","Ky","SG","vis","I8e","isRangePlot","_prevRevpath","_nextFill","_ownPolygons","_fillsegments","_fillElement","_polygons","_ownFill","_fillExclusionElement","_needsCull","N8e","Ed","Hje","CG","Cw","Uje","DG","Qy","Gje","EG","Dw","kc","B8e","Ew","Pw","stylePoints","styleText","RG","Yje","PG","Sc","U8e","Fw","Vje","zG","eg","FG","G8e","Y8e","Rw","V8e","DOMPoint","isPointInFill","zw","jje","IG","NG","OG","Wje","BG","YG","Xje","GG","rg","Nw","HG","UG","autotypenumbersDflt","splomStash","W8e","_hasPreCompStats","j8e","jG","Zje","VG","X8e","dataAttr","axData","Z8e","Iw","$je","XG","WG","$8e","J8e","dfltColor","showGrid","hasMinor","noZeroLine","Ow","Jje","eY","ZG","K8e","Pd","Q8e","e9e","Bw","$G","JG","r9e","t9e","a9e","n9e","i9e","KG","tg","o9e","l9e","QG","visibleDflt","noTicklabelmode","noTicklabelindex","noTicklabelposition","noTicklabeloverflow","noHover","noUnifiedhovertitle","noTickson","s9e","sun","mon","tue","wed","thu","fri","sat","Hw","Kje","rY","u9e","ag","counterAxes","overlayableAxes","overlayingDomain","_domains","_axisMap","_anchors","fY","Qje","uY","yf","tY","f9e","c9e","aY","v9e","nY","h9e","iY","d9e","oY","Gw","ml","lY","p9e","sY","ng","Uw","ig","_cheater","_imgIndices","hY","eWe","vY","m9e","cY","og","lg","Qi","vn","ug","dY","gf","y9e","g9e","pY","Gs","Ro","b9e","tt","sg","bf","mY","_zindices","layerName","zindex","plotMethod","cdModule","yY","imagelayer","imagelayerBetween","overlinesBelow","overaxesBelow","overplot","overlinesAbove","overaxesAbove","gY","bY","idRoot","x9e","rangePlot","_Y","tWe","xY","fg","AY","aWe","TY","_9e","w9e","wY","Yw","T9e","A9e","M9e","cg","nWe","LY","MY","Vw","k9e","Vs","jw","Fd","xf","Wl","kY","Ww","Xw","Rd","S9e","q9e","SY","qY","Ys","fullAnnotation","subplotId","selectedObj","_xsize","_xshift","_ysize","_yshift","drawRaw","FY","iWe","RY","CY","C9e","DY","PY","EY","_xclick","_yclick","explicitOff","hasClickToShow","$w","oWe","zY","Zw","qc","IY","lWe","NY","Jw","P9e","R9e","F9e","z9e","HY","sWe","OY","Kw","wf","N9e","I9e","BY","GY","uWe","UY","B9e","O9e","jY","fWe","VY","Qw","calcAutorange","convertCoords","vg","cWe","WY","Et","H9e","U9e","ZY","vWe","XY","e8","G9e","Y9e","V9e","j9e","W9e","zref","QY","hWe","KY","$Y","JY","X9e","fullSceneLayout","pdata","_xa","_pdata","_ya","rV","dWe","eV","r8","aV","pWe","tV","$9e","J9e","K9e","dataScale","glplot","cameraParams","graphDiv","oV","mWe","iV","Q9e","nV","t8","bWe","fV","lV","sV","rTe","Fo","tTe","Lc","uV","aTe","nTe","iTe","vV","xWe","cV","Cc","wi","oTe","lTe","zd","uTe","sTe","pV","_We","dV","fTe","hV","cTe","wV","wWe","_V","a8","eo","yl","n8","mV","yV","xV","gV","bV","MV","TWe","AV","TV","supplyDrawNewShapeDefaults","i8","MWe","SV","kV","vTe","sizex","sizey","sizing","LV","kWe","qV","hTe","o8","dTe","pTe","yTe","PV","SWe","EV","CV","gTe","Dc","DV","bTe","_imgSrc","zV","qWe","FV","RV","xTe","IV","LWe","NV","hg","CWe","BV","containerClassName","headerGroupClassName","headerClassName","headerArrowClassName","dropdownButtonGroupClassName","dropdownButtonClassName","buttonClassName","itemRectClassName","itemTextClassName","menuIndexAttrName","autoMarginIdRoot","blankHeaderOpts","textPadX","arrowPadX","textOffsetX","textOffsetY","arrowOffsetX","gapButtonHeader","gapButton","activeColor","hoverColor","arrowSymbol","l8","DWe","HV","_Te","wTe","TTe","ATe","MTe","OV","kTe","args2","showactive","VV","EWe","YV","dg","UV","GV","qTe","LTe","CTe","DTe","XV","PWe","WV","jt","zo","jV","Ec","pg","translateX","translateY","hbar","vbar","barWidth","barLength","barRadius","barPad","barColor","_box","_hbarXMin","_hbarTranslateMax","_vbarYMin","_vbarTranslateMax","_clipRect","_onBoxDrag","_onBoxWheel","_onBarDrag","nj","RWe","aj","Pc","Nd","Rc","Ti","mg","ETe","$V","qr","PTe","RTe","JV","s8","Bd","KV","_dims","yPad","xPad","headerWidth","headerHeight","tj","u8","QV","ej","FTe","openHeight","openWidth","ZV","zTe","NTe","ITe","BTe","OTe","height1","totalWidth","totalHeight","rj","oj","FWe","ij","HTe","Od","zWe","lj","groupClassName","inputAreaClass","railRectClass","railTouchRectClass","gripRectClass","tickRectClass","inputProxyClass","labelsClass","labelGroupClass","labelClass","currentValueClass","railHeight","railRadius","railWidth","railBorder","railBorderWidth","railBorderColor","railBgColor","railInset","stepInset","gripRadius","gripWidth","gripHeight","gripBorder","gripBorderWidth","gripBorderColor","gripBgColor","gripBgActiveColor","labelPadding","labelOffset","tickWidth","tickColor","tickOffset","tickLength","minorTickOffset","minorTickColor","minorTickLength","currentValuePadding","currentValueInset","c8","NWe","fj","sj","UTe","GTe","YTe","VTe","uj","Tf","jTe","currentvalue","suffix","activebgcolor","minorticklen","dj","IWe","hj","Fc","cj","vj","XTe","ZTe","$Te","JTe","_stepCount","_visibleSteps","Aj","BWe","Tj","No","yg","js","Io","Ai","KTe","Hd","QTe","Or","d8","yj","h8","gj","rAe","tAe","bj","inputAreaWidth","outerLength","inputAreaStart","inputAreaLength","labelStride","currentValueMaxWidth","currentValueHeight","currentValueTotalHeight","currentValueMaxLines","gg","_gd","nAe","_j","iAe","labelSteps","p8","fraction","pj","xj","wj","slider","interaction","previousActive","_nextMethod","doCallback","doTransition","_nextMethodRaf","mj","oAe","_invokingCommand","sAe","uAe","eAe","lAe","aAe","kj","OWe","Mj","fAe","HWe","qj","Sj","m8","UWe","Lj","xg","GWe","Cj","bgClassName","rangePlotClassName","maskMinClassName","maskMaxClassName","slideBoxClassName","grabberMinClassName","grabAreaMinClassName","handleMinClassName","grabberMaxClassName","grabAreaMaxClassName","handleMaxClassName","maskMinOppAxisClassName","maskMaxOppAxisClassName","maskColor","maskOppAxisColor","slideBoxFill","slideBoxCursor","grabAreaFill","grabAreaCursor","grabAreaWidth","handleWidth","handleRadius","handleStrokeWidth","extraPad","Pj","wg","cAe","vAe","Dj","hAe","Ej","makeData","_offsetShift","_rangeSliderData","autoMarginOpts","Nj","VWe","zj","Tg","Rj","Fj","dAe","pAe","Bj","jWe","Ij","mAe","yAe","gAe","Gj","WWe","Uj","Ag","bAe","xAe","ia","Mg","Hj","Ws","_Ae","wAe","y8","TAe","AAe","jr","Oj","qAe","LAe","_clipId","CAe","DAe","EAe","maskOppBorder","PAe","RAe","d2pOppAxis","_pixelMin","_pixelMax","kAe","MAe","SAe","Vj","XWe","Yj","FAe","zAe","NAe","g8","kg","ZWe","Wj","IAe","OAe","BAe","stepmode","b8","$We","Xj","minButtonWidth","lightAmount","darkAmount","Jj","JWe","$j","Sg","HAe","UAe","GAe","Zj","x8","YAe","rangeselector","VAe","Qj","KWe","Kj","jAe","WAe","XAe","lW","QWe","oW","Lg","ZAe","$Ae","eW","iW","Xl","rW","qg","JAe","T8","tW","aW","nW","w8","KAe","eMe","_8","tMe","aMe","nMe","QAe","rMe","iMe","uW","eXe","sW","zc","A8","fW","noGridCell","pW","tXe","dW","oMe","lMe","sMe","cW","uMe","M8","roworder","xgap","ygap","xside","yside","Cg","vW","hW","sizeDefaults","_hasSubplotGrid","contentDefaults","k8","aXe","mW","symmetric","arrayminus","valueminus","traceref","tracerefminus","copy_zstyle","bW","nXe","gW","yW","vMe","hMe","dMe","pMe","S8","iXe","_W","xW","AW","oXe","TW","q8","mMe","L8","yMe","gMe","wW","SW","lXe","kW","MW","Xs","bMe","xMe","noYS","noXS","_Me","CW","sXe","LW","wMe","qW","PW","uXe","EW","Ud","DW","Gd","Af","Yd","error_z","bar","scatter3d","makeComputeError","hoverInfo","FW","fXe","RW","cbbg","cbfill","cbfills","cbline","cblines","cbaxis","cbtitleunshift","cbtitle","cboutline","jsPlaceholder","GW","cXe","UW","Zs","Eg","zW","Zl","Dg","ro","Oo","HW","C8","Bo","Nc","AMe","MMe","kMe","SMe","qMe","LMe","E8","NW","IW","BW","Yt","D8","OW","_fillcolor","_line","_levels","_filllevels","_fillgradient","_zrange","_traceIndex","_propPrefix","DMe","RMe","_lenFrac","_thickFrac","_uFrac","_vFrac","_axis","noInsideRange","FMe","titlex","titley","_hColorbarMoveCBTitle","EMe","PMe","VW","vXe","YW","hasColorbar","WW","hXe","jW","ZW","dXe","XW","JW","pXe","R8","mXe","rX","zMe","eX","P8","KW","QW","NMe","tileClass","showaxeslabels","linetickenable","defaultLayout","nX","yXe","aX","IMe","BMe","OMe","tX","HMe","UMe","GMe","lX","gXe","oX","iX","VMe","svgToImg","uX","Ic","Pg","jMe","Vd","z8","sX","PlotlyLocales","Icons","Rg","F8","Plots","Snapshot","PlotSchema","cX","xXe","fX","kf","_Xe","mX","Kt","vX","WMe","XMe","hX","pX","ZMe","dX","$Me","Mf","N8","QMe","eke","rke","insidetextanchor","insidetextfont","constraintext","Fg","wXe","yX","barcornerradius","I8","TXe","xX","tke","gX","bX","ake","Sf","AXe","kX","_X","Bc","wX","nke","ike","oke","lke","ske","TX","zg","AX","MX","moduleHasSelected","moduleHasUnselected","moduleHasConstrain","moduleHasCliponaxis","moduleHasTextangle","moduleHasInsideanchor","hasPathbar","handleText","validateCornerradius","B8","MXe","SX","cke","vke","hke","dke","pke","Ng","kXe","qX","Oc","RX","SXe","PX","LX","CX","DX","EX","mke","yke","orig_p","jd","qXe","zX","gke","bke","FX","recordMinTextSize","clearMinTextSize","resizeText","Ig","qf","Tke","Ake","NX","coerceString","coerceColor","coerceEnumerated","getLineWidth","Hc","CXe","XX","Wd","Mke","Xd","IX","BX","OX","O8","kke","Ske","qke","tn","HX","UX","GX","WX","VX","jX","YX","H8","styleTextPoints","Eke","Dke","getInsideTextFont","getOutsideTextFont","getBarColor","Y8","DXe","tZ","Bg","Og","Ua","Pke","Rke","Fke","Hg","ZX","zke","Nke","U8","Uc","Ike","$X","Bke","Oke","Hke","Ln","Uke","G8","Ho","JX","KX","Lf","QX","eZ","rZ","isHorizontal","constrained","leftToRight","overhead","Wke","connector","Gke","Yke","Jke","labelLabel","valueLabel","rawS","deltaLabel","finalLabel","initialLabel","percentInitial","begR","percentInitialLabel","percentPrevious","difR","percentPreviousLabel","percentTotal","sumR","percenTotalLabel","Kke","textinfo","Qke","Zke","$ke","zeroBarDir","Xke","jke","toMoveInsideBar","j8","EXe","oZ","Zd","eSe","aZ","rSe","tSe","V8","aSe","nZ","baseLabel","iZ","hoverOnBars","getTraceColor","sZ","PXe","lZ","W8","RXe","uZ","iSe","ct","cZ","FXe","fZ","hZ","zXe","vZ","Ug","NXe","yZ","oSe","dZ","lSe","pZ","sSe","uSe","Jl","Gc","mZ","q3","lowerfence","upperfence","notched","notchwidth","notchspan","jitter","pointpos","sdmultiple","boxmean","quartilemethod","whiskerwidth","showwhiskers","Gg","IXe","gZ","boxgap","boxgroupgap","Jd","BXe","wZ","ao","fSe","cSe","vSe","hSe","bZ","xZ","_Z","handleSampleDefaults","handlePointsDefaults","X8","OXe","AZ","mSe","ySe","gSe","TZ","_supply","J8","HXe","PZ","$8","Yg","xSe","Mi","Kl","_Se","med","MZ","kZ","SZ","qZ","LZ","lo","CZ","uo","DZ","EZ","pts2","wSe","TSe","ASe","valLetter","Z8","K8","UXe","NZ","RZ","MSe","kSe","FZ","zZ","bPos","bdPos","wHover","setPositionOffset","Q8","GXe","UZ","Yc","Cf","qSe","BZ","wdPos","bPosPxOffset","OZ","HZ","meanline","plotBoxAndWhiskers","plotPoints","plotBoxMean","a9","YXe","GZ","e9","r9","t9","i9","VXe","WZ","PSe","n9","Js","YZ","RSe","VZ","jZ","hoverOnBoxes","hoverOnPoints","jXe","XZ","o9","WXe","$Z","KZ","XXe","JZ","e$","ZXe","QZ","Kd","$Xe","t$","zSe","ti","NSe","l9","ISe","BSe","r$","OSe","ki","xtype","ytype","zsmooth","hoverongaps","zhoverformat","s9","JXe","n$","HSe","Vg","USe","a$","GSe","Qd","KXe","o$","i$","u9","QXe","l$","f$","eZe","u$","s$","YSe","VSe","jSe","WSe","XSe","ZSe","f9","rZe","c$","Vc","avg","c9","tZe","v$","probability","density","v9","aZe","h$","h9","nZe","_$","jc","Df","d$","Wg","p$","m$","y$","g$","jg","b$","$Se","x$","m9","iZe","k$","d9","Cn","w$","no","T$","A$","JSe","M$","KSe","QSe","eqe","p9","_histogramBinOpts","dirs","_autoBin","nbins","sizeFound","bingroup","aqe","tqe","cumulative","currentbin","startFound","endFound","histnorm","histfunc","_roundFnOpts","leftGap","rightGap","nqe","calcAllAutoBins","R$","oZe","P$","S$","Wc","q$","iqe","oqe","lqe","L$","C$","D$","E$","xRanges","yRanges","I$","lZe","N$","gl","F$","z$","_hovertext","_after2before","O$","sZe","B$","sqe","uqe","Xg","Y$","uZe","G$","fqe","cqe","vqe","U$","j$","fZe","V$","hqe","$$","cZe","Z$","W$","X$","Jg","vZe","eJ","J$","y9","Zg","K$","dqe","pqe","mqe","yqe","gqe","bqe","g9","Q$","xqe","_emptypoints","_islinear","xCenter","yCenter","xfill","yfill","Qg","Kg","CSS_DECLARATIONS","STYLE","x9","dZe","tJ","rJ","_qe","b9","Xc","supports","supportsCSS","imageRendering","e3","pZe","vJ","aJ","Tqe","Aqe","Mqe","io","nJ","kqe","iJ","Sqe","qqe","Lqe","_9","Dqe","Eqe","fJ","cJ","oJ","lJ","bin0","frac","bin1","sJ","uJ","createImageData","putImageData","fillStyle","fillRect","w9","mZe","hJ","r3","yZe","dJ","Pqe","a3","gZe","mJ","pJ","e2","t3","Rqe","Fqe","isContour","zmask","gJ","bZe","yJ","xJ","xZe","bJ","T9","_Ze","_J","TJ","wZe","wJ","n3","TZe","SJ","ai","AJ","zqe","Nqe","MJ","A9","kJ","Iqe","M9","nbinsx","nbinsy","DJ","AZe","CJ","qJ","LJ","Bqe","Oqe","Hqe","o3","MZe","RJ","t2","Uqe","i3","Gqe","Yqe","EJ","k9","PJ","aStr","Vqe","axType","nbinsFound","zJ","kZe","FJ","jqe","Wqe","S9","SZe","NJ","BJ","qZe","IJ","HJ","LZe","OJ","s3","CZe","YJ","Uo","UJ","l3","Xqe","q9","Zqe","$qe","GJ","Jqe","a2","xbingroup","ybingroup","L9","DZe","jJ","Kqe","VJ","XJ","EZe","WJ","Qqe","eLe","rLe","tLe","aLe","nLe","JJ","PZe","$J","iLe","ZJ","QJ","RZe","KJ","rK","FZe","eK","u3","zZe","tK","COMPARISON_OPS","COMPARISON_OPS2","INTERVAL_OPS","SET_OPS","CONSTRAINT_REDUCTION","c3","NZe","oK","ga","f3","nK","C9","oLe","lLe","sLe","uLe","Zc","iK","fLe","cLe","aK","autocontour","ncontours","showlabels","labelfont","labelformat","operation","E9","IZe","sK","hn","bl","vLe","D9","lK","P9","BZe","uK","R9","OZe","fK","hLe","hasHover","F9","HZe","cK","dLe","pLe","pK","UZe","dK","vK","mLe","yLe","gLe","bLe","hK","gK","GZe","yK","N9","z9","mK","zmin","zmax","zauto","n2","YZe","bK","I9","VZe","_K","xK","xLe","_Le","wLe","v3","jZe","wK","BOTTOMSTART","TOPSTART","LEFTSTART","RIGHTSTART","NEWDELTA","CHOOSESADDLE","SADDLEREMAINDER","LABELDISTANCE","LABELINCREASE","LABELMIN","LABELMAX","LABELOPTIMIZER","EDGECOST","ANGLECOST","NEIGHBORCOST","SAMELEVELFACTOR","SAMELEVELDISTANCE","MAXCOST","INITIALSEARCHPOINTS","ITERATIONS","AK","WZe","TK","TLe","crossings","qK","XZe","SK","$c","ALe","MK","MLe","kK","edgepaths","EK","ZZe","DK","B9","kLe","CK","LK","O9","FK","$Ze","RK","PK","SLe","qLe","_carpetTrace","aaxis","baxis","IK","JZe","NK","Jc","zK","OK","KZe","BK","prefixBoundary","H9","Dn","l2","Ga","Ql","LLe","GK","HK","UK","CLe","YK","VK","DLe","ELe","jK","o2","WK","zLe","ILe","PLe","RLe","createLines","createLineClip","labelFormatter","calcTextOpts","findBestTextLocation","addLabelData","FLe","NLe","pedgepaths","ppaths","G9","e$e","XK","BLe","U9","OLe","Y9","r$e","$K","ZK","HLe","ULe","V9","t$e","KK","JK","GLe","YLe","isColorbar","j9","a$e","QK","m3","jLe","rQ","n$e","eQ","aQ","i$e","tQ","fQ","o$e","uQ","nQ","WLe","lQ","iQ","XLe","sQ","oQ","ZLe","$Le","JLe","hQ","l$e","vQ","W9","KLe","QLe","eCe","rCe","tCe","aCe","cQ","pQ","s$e","dQ","yQ","u$e","mQ","X9","f$e","_Q","nCe","iCe","gQ","oCe","Si","lCe","bQ","sCe","Ks","oo","s2","xQ","MQ","c$e","AQ","wQ","uCe","Kc","fCe","cCe","TQ","vCe","hCe","dCe","SQ","v$e","kQ","Z9","aLabel","bLabel","cLabel","caxis","DQ","h$e","CQ","$9","pCe","mCe","yCe","gCe","qQ","LQ","PQ","d$e","EQ","bCe","plotContainer","clipIdRelative","layers","frontplot","FQ","p$e","RQ","xCe","_hovertitle","NQ","m$e","zQ","XQ","y$e","WQ","GQ","J9","_l","y3","Ef","g3","K9","_Ce","Qs","IQ","BQ","YQ","OQ","wCe","Q9","TCe","ACe","MCe","kCe","VQ","jQ","makeFramework","aTickLayout","bTickLayout","cTickLayout","wl","layoutId","updateLayers","adjustLayout","plotbg","clipDef","clipDefRelative","backplot","grids","Qc","bgrid","agrid","cgrid","drawAxes","aline","bline","cline","drawAx","SCe","Ba","qCe","LCe","CCe","HQ","UQ","dragOptions","tT","g$e","ZQ","ECe","PCe","RCe","eT","rT","b3","JQ","b$e","$Q","FCe","zCe","NCe","noUirevision","ree","x$e","eee","ICe","BCe","x3","OCe","HCe","UCe","GCe","YCe","VCe","QQ","KQ","jCe","WCe","tee","XCe","ZCe","$Ce","JCe","nee","w$e","aee","oee","T$e","iee","aT","A$e","see","wa","rv","lee","bandwidth","scalegroup","scalemode","spanmode","oT","M$e","uee","nT","iT","violingap","violingroupgap","dee","k$e","hee","fee","QCe","cee","vee","mee","S$e","pee","eDe","rDe","tDe","_3","Pf","aDe","nDe","makeKDE","getPositionOnKdePath","posCenterPx","getKdeValue","extractVal","posDensityScale","bee","L$e","gee","lT","sT","iDe","yee","oDe","sDe","lDe","uDe","maxKDE","maxCount","wee","C$e","_ee","fDe","xee","Aee","D$e","Tee","uT","fT","cDe","cT","vDe","hDe","See","E$e","kee","Mee","dDe","Dee","P$e","Cee","pDe","vT","mDe","qee","Lee","Pee","R$e","Eee","Fee","F$e","Ree","av","z$e","zee","colormodel","fmt","rgba","rgba256","zminDflt","zmaxDflt","hsla","hT","gDe","Nee","Iee","w3","Bee","Oee","Hee","Uee","Gee","yDe","dT","jee","N$e","Vee","bDe","xDe","Yee","_De","_hasSource","_hasZ","I$e","pT","mT","B$e","Wee","$ee","T3","Zee","wDe","ADe","SDe","Tl","Rf","yT","kDe","Jee","gT","sv","lv","bT","Kee","A3","TT","tre","nre","DDe","Al","_T","xT","EDe","AT","kT","PDe","are","wT","hre","FDe","VDe","ore","GDe","YDe","HDe","jDe","Ff","ire","Qee","zDe","NDe","M3","IDe","$De","BDe","ODe","JDe","ere","UDe","LDe","CDe","KDe","an","ni","lre","vre","sre","ure","fre","cre","readUintLE","readUintBE","readUint8","readUint16LE","readUint16BE","readUint32LE","readUint32BE","readBigUInt64LE","eu","ov","f2","readBigUInt64BE","readBigInt64LE","readBigInt64BE","writeUintLE","writeUintBE","writeUint8","writeUint16LE","writeUint16BE","writeUint32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeBigInt64LE","writeBigInt64BE","nv","MT","rre","ERR_OUT_OF_RANGE","WDe","ERR_BUFFER_OUT_OF_BOUNDS","XDe","ZDe","QDe","k3","Y$e","dre","V$e","eEe","S3","j$e","mre","gre","W$e","yre","xre","X$e","bre","wre","Z$e","_re","Are","$$e","Tre","ST","J$e","Mre","uv","K$e","kre","qre","Q$e","Sre","Cre","eJe","Lre","Ere","rJe","Dre","Rre","tJe","Pre","zre","aJe","Fre","Ire","nJe","Nre","Ore","iJe","Bre","Ure","oJe","Hre","Yre","lJe","Gre","rEe","jre","sJe","Vre","zf","uJe","Wre","v2","fJe","Xre","L3","Jre","cJe","$re","Zre","tEe","qT","vJe","Kre","hJe","Qre","aEe","tte","dJe","rte","iEe","oEe","ete","sEe","uEe","fv","pJe","ate","fEe","C3","mJe","nte","D3","yJe","ite","gJe","ote","CT","bJe","ste","cEe","vEe","hEe","dEe","E3","xJe","ute","pEe","mEe","yEe","gEe","pte","_Je","dte","vte","bEe","fte","DT","hte","cte","P3","wJe","bte","mte","yte","ET","TJe","xte","xEe","_Ee","wEe","z3","AJe","kte","st","TEe","AEe","MEe","kEe","SEe","dv","qEe","LEe","CEe","DEe","EEe","PEe","REe","FEe","Ate","PT","zEe","RT","NEe","cv","nn","IEe","BEe","Mte","d2","vv","OEe","Nf","_te","HEe","wte","p2","R3","UEe","GEe","Tte","F3","YEe","VEe","jEe","XEe","WEe","If","MJe","Lte","Ste","qte","ZEe","Ete","kJe","Dte","$Ee","FT","JEe","N3","Cte","KEe","Ite","SJe","Nte","IT","Rte","zT","I3","NT","Fte","Pte","QEe","ePe","rPe","Ote","qJe","Bte","tPe","aPe","nPe","iPe","Ute","LJe","Hte","oPe","jte","CJe","Vte","Yte","sPe","lPe","uPe","Gte","fPe","cPe","vPe","$te","DJe","Zte","OT","B3","Xte","pv","Wte","hPe","HT","BT","O3","xPe","_Pe","UT","Qte","EJe","Kte","wPe","TPe","Jte","APe","MPe","kPe","rae","PJe","eae","aae","RJe","tae","GT","qPe","YT","FJe","oae","nae","LPe","mv","iae","jT","zJe","sae","VT","lae","hae","NJe","vae","CPe","uae","DPe","fae","cae","EPe","pae","IJe","dae","PPe","RPe","FPe","m2","BJe","H3","zPe","mae","NPe","yae","$T","OJe","_ae","Y3","IPe","gae","XT","G3","U3","BPe","xae","bae","WT","ZT","OPe","V3","UPe","HPe","Tae","HJe","wae","YPe","QT","ut","VPe","jPe","Go","Aae","yv","Sae","qae","Mae","kae","WPe","XPe","ZPe","g2","j3","W3","X3","KT","Z3","Lae","working","$3","Cae","isArgumentsObject","isPromise","isArrayBufferView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","isDataView","JT","Dae","Eae","Pae","Rae","Fae","zae","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isBoxedPrimitive","isAnyArrayBuffer","eA","GJe","Nae","oA","ft","Iae","xRe","ab","ru","tb","gv","K3","J3","Bae","wRe","nA","Of","_Re","Q3","Hae","ARe","TRe","rA","b2","rb","Oae","Uae","aA","MRe","kRe","iA","tA","isNativeError","CRe","Bf","ERe","callbackify","Xae","VJe","Wae","Gae","Yae","RRe","jae","Vae","NRe","nb","lA","ORe","HRe","FRe","zRe","uA","jJe","$ae","Zae","sA","ib","Hf","WJe","Qae","Kae","fo","VRe","Jae","jRe","WRe","XRe","fA","XJe","ene","ZRe","$Re","tne","ZJe","rne","cA","dA","$Je","sne","nne","MFe","bv","Ta","ob","QRe","ine","lb","eFe","hA","nFe","tu","iFe","oFe","lFe","sFe","uFe","fFe","cFe","vFe","xv","hFe","Uf","bFe","_2","gFe","lne","ane","xFe","vA","_Fe","wFe","TFe","tFe","rFe","dFe","pFe","mFe","yFe","AFe","JJe","fne","kFe","Ml","pA","ub","une","yA","mA","SFe","qFe","hne","gA","vne","fb","kl","cne","Gf","_A","pne","xA","dne","T2","LFe","CFe","zFe","NFe","PFe","IFe","BFe","OFe","HFe","bA","EFe","DFe","cb","QJe","gne","mne","GFe","yne","UFe","YFe","xne","eKe","bne","vb","au","jFe","VFe","WFe","nu","Yf","A2","hb","Vf","wA","jf","iu","XFe","ZFe","JFe","KFe","$Fe","wne","rKe","_ne","aKe","Ene","_v","Tt","kne","Mne","db","eze","TA","wv","AA","MA","aze","CA","ize","pb","oze","lze","sze","uze","M2","kA","Sne","qne","hze","tze","cze","rze","SA","LA","Tne","Ane","vze","DA","dze","Lne","mze","gze","Cne","qA","bze","Dne","pze","fze","yze","EA","nKe","Rne","xze","_ze","wze","Tze","gb","Aze","Mze","Pne","Nne","iKe","zne","S2","Fne","Une","oKe","Hne","PA","One","Sze","qze","Ine","Bne","Dze","Eze","kze","Lze","Cze","Yne","lKe","Gne","RA","Rze","Av","Vne","Fze","Mb","ou","Ab","Tv","xb","jne","Nze","IA","Xf","zze","wb","Xne","Bze","Ize","L2","FA","q2","Tb","Wne","Zne","NA","Oze","Hze","BA","zA","Vze","Wf","Wze","UA","uKe","Qne","lu","HA","kb","Mv","OA","Kne","C2","Qze","aNe","tNe","rNe","eNe","Kze","Zze","Jne","Sb","nNe","iNe","oNe","uie","fKe","sie","eie","rie","lNe","iie","tie","fNe","oie","GA","YA","hNe","qb","F2","R2","VA","mNe","aie","Yo","D2","E2","dn","Zf","deepStrictEqual","strictEqual","strictEqualObject","deepEqual","notDeepStrictEqual","notStrictEqual","notStrictEqualObject","notDeepEqual","notEqual","notIdentical","nie","P2","maxArrayLength","breakLength","showProxy","getters","xNe","cNe","vNe","sNe","stackStartFn","actual","expected","stackTraceLimit","isTTY","getColorDepth","yNe","bNe","generatedMessage","uNe","jA","cKe","cie","fie","xie","vKe","bie","gie","z2","WA","vie","XA","hie","die","N2","Lb","mie","yie","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","ZA","hKe","Tie","_Ne","wNe","_ie","Cb","wie","shim","qie","dKe","Sie","TNe","Mie","kie","Db","ANe","Aie","MNe","Cie","pKe","Lie","$A","kNe","preventExtensions","SNe","JA","mKe","Eie","Die","Eb","yKe","Pie","qNe","Nie","gKe","zie","Rie","Fie","LNe","I2","bKe","Hie","CNe","DNe","ENe","PNe","Iie","Bie","FNe","RNe","Oie","supportsDescriptors","Gie","xKe","Uie","zNe","NNe","Wie","_Ke","jie","INe","BNe","ONe","Yie","HNe","Vie","getPolyfill","KA","wKe","Xie","QA","TKe","Zie","UNe","Jie","AKe","$ie","GNe","YNe","roe","MKe","eoe","VNe","jNe","WNe","Kie","XNe","Qie","_oe","kKe","xoe","toe","KNe","JNe","aoe","$Ne","ZNe","vo","QNe","Bb","noe","poe","Nb","eM","tM","O2","Ib","ioe","Hn","eIe","rIe","ooe","Pb","loe","Rb","tIe","aIe","soe","uoe","foe","coe","nIe","iIe","oIe","lIe","Fb","moe","B2","fIe","vIe","cIe","hIe","dIe","voe","val1","val2","pIe","hoe","yIe","mIe","doe","gIe","bIe","boe","isDeepEqual","isDeepStrictEqual","SKe","Boe","Vo","su","Gb","H2","Toe","ERR_AMBIGUOUS_ARGUMENT","kv","SIe","ERR_INVALID_ARG_VALUE","qIe","ERR_INVALID_RETURN_VALUE","uu","fu","Ob","Soe","CIe","Hb","DIe","qoe","Ub","U2","Aoe","Wt","nM","Yb","jo","Coe","Loe","AssertionError","Doe","Moe","MIe","Eoe","EIe","isPrototypeOf","Poe","koe","Roe","Foe","zoe","Noe","Ioe","throws","rejects","doesNotThrow","doesNotReject","ifError","doesNotMatch","Hoe","qKe","Ooe","G2","Y2","V2","j2","Vb","RIe","long","zIe","FIe","Goe","Pt","Uoe","iM","oM","curr","formatters","formatArgs","useColors","NIe","debug","skips","joe","Un","Voe","Yoe","storage","DEBUG","removeItem","WebkitAppearance","firebug","exception","chrome","jIe","ele","LKe","Qoe","Sv","cu","_bytes","ZIe","_skipBytes","$Ie","_passthrough","JIe","QIe","KIe","Xoe","jb","WIe","Zoe","W2","_parserBytesLeft","_parserBuffers","_parserBuffered","_parserState","_parserCallback","_parserOutput","_parserInit","Joe","Woe","Koe","$oe","xt","pn","rle","eBe","X2","Wb","statusCode","ParserStream","sliceEq","str2arr","ProbeError","tle","DKe","Xb","qv","sM","Z2","boxtype","rBe","sizes","lM","tBe","item_loc","aBe","item_inf","nBe","unbox","readSizeFromMeta","iBe","oBe","Exif","variants","exif_location","getMimeType","mif1","msf1","miaf","mime","avif","avis","heic","heix","hevc","hevx","heis","$b","EKe","uM","Zb","lBe","big_endian","aborted","read_uint32","ifds_to_read","scan_ifd","read_uint16","is_subifd_link","exif_format_length","exif_format_read","is_big_endian","ifd","entry_offset","data_offset","ExifParser","get_orientation","nle","PKe","ale","sBe","uBe","fBe","Jb","cBe","vBe","wUnits","hUnits","sle","RKe","lle","hBe","dBe","ile","ole","pBe","mBe","hle","FKe","vle","cle","ule","fle","yBe","gBe","ple","zKe","dle","fM","yle","NKe","mle","vM","_Be","wBe","TBe","ABe","wle","IKe","_le","xle","gle","ble","MBe","kBe","Mle","BKe","Ale","SBe","qBe","Tle","LBe","qle","OKe","Sle","CBe","Lv","EBe","PBe","RBe","FBe","zBe","kle","Sl","DBe","viewbox","NBe","Ple","HKe","Ele","Dle","Lle","IBe","BBe","OBe","HBe","UBe","GBe","Kb","hM","Cle","Ile","UKe","Nle","zle","Rle","Fle","dM","YBe","VBe","jBe","WBe","XBe","ZBe","Ole","GKe","Ble","bmp","gif","ico","jpeg","png","psd","tiff","webp","Hle","YKe","mM","pM","$Be","parsers","Gle","Ule","JBe","KBe","QBe","getImageSize","jle","jKe","Vle","Yle","eOe","rOe","Qb","tOe","aOe","nOe","iOe","_scaler","_sArray","oOe","Zle","WKe","Xle","lOe","$f","Wle","sOe","uOe","fOe","cOe","_realImage","_canvas","_image","Jle","XKe","$le","vOe","rse","ZKe","ese","Kle","Qle","e5","hOe","colorLabel","ase","$Ke","tse","ise","JKe","nse","lse","KKe","ose","yM","QKe","r5","dOe","pOe","mOe","yOe","gOe","sse","vu","bOe","t5","label0","dlabel","insidetextorientation","hole","rotation","hse","eQe","vse","xOe","$2","_Oe","wOe","TOe","AOe","fse","hasLabels","cse","handleLabelsAndValues","handleMarkerDefaults","_hasLabels","_hasValues","gM","rQe","dse","piecolorway","extendpiecolors","mse","tQe","pse","kOe","SOe","bM","aQe","bse","qOe","Cv","LOe","yse","gse","vTotal","makePullColorFn","generateExtendedColors","_se","nQe","xse","EOe","Gse","iQe","Use","oi","POe","a5","Sse","ROe","wse","xM","qse","FOe","zOe","Lse","Cr","n5","Tse","Cse","_hasHoverLabel","_hasHoverEvent","rInscribed","pxmid","percentLabel","Dse","Ese","titleBox","Pse","rpx1","startangle","stopangle","rCenter","textPosAngle","ring","halfangle","midangle","OOe","Mse","Ase","zse","Rse","Fse","HOe","kse","outside","Nse","Ise","GOe","_M","Bse","baseratio","VOe","i5","Ose","Hse","largeArc","jOe","cxFinal","cyFinal","px0","px1","BOe","yLabelMin","yLabelMid","yLabelMax","labelExtraX","labelExtraY","UOe","YOe","IOe","formatSliceLabel","transformInsideText","determineInsideTextFont","positionTitleOutside","prerenderTitles","layoutAreas","attachFxHandlers","computeTransform","jse","oQe","Vse","Yse","WOe","XOe","Xse","Dv","Wse","$se","sQe","Zse","styleOne","Kse","uQe","Jse","mn","fQe","eue","Qse","ZOe","$Oe","KOe","JOe","yn","cQe","l5","rue","regionalOptions","invalidCalendar","invalidMonth","invalidYear","differentCalendars","_localCals","wM","_calendar","_year","_month","_day","_validateLevel","Ur","o5","TM","shortYearCutoff","AM","substituteDigits","substituteChineseDigits","leapYear","epoch","formatYear","monthOfYear","weekOfYear","daysInYear","dayOfYear","dayOfWeek","weekDay","extraInfo","compareTo","toJSDate","fromJSDate","today","_validate","minMonth","minDay","epochs","monthsInYear","firstMonth","fromMonthOfYear","daysInWeek","_correctAdd","_add","hasYearZero","jdEpoch","daysPerMonth","monthNames","monthNamesShort","dayNames","dayNamesShort","dayNamesMin","digits","firstDay","setMilliseconds","cdate","baseCalendar","gregorian","aue","Ya","invalidArguments","invalidFormat","missingNumberAt","unknownNameAt","unexpectedLiteralAt","unexpectedText","UNIX_EPOCH","SECS_PER_DAY","TICKS_EPOCH","TICKS_PER_DAY","ATOM","COOKIE","FULL","ISO_8601","JULIAN","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","W3C","monthNumbers","calculateWeek","localNumbers","parseMonth","determineDate","nue","hu","QOe","kM","s5","rHe","_validateYear","toChineseMonth","isIntercalaryMonth","tHe","aHe","intercalaryMonth","du","invalidyear","pu","isIntercalary","iHe","nHe","eHe","chinese","iue","Jf","oHe","SM","coptic","oue","lHe","qM","century","sHe","discworld","lue","Kf","uHe","LM","ethiopian","sue","fHe","CM","u5","_leapYear","yearType","_delay1","_delay2","hebrew","uue","J2","cHe","DM","islamic","fue","K2","vHe","EM","julian","vue","hHe","RM","PM","cue","haabMonths","tzolkinMonths","forYear","_toHaab","_toTzolkin","haabMonthName","haabMonth","haabDay","tzolkinDayName","tzolkinDay","tzolkinTrecena","mayan","due","Qf","dHe","FM","hue","nanakshahi","pue","pHe","zM","daysPerYear","NEPALI_CALENDAR_DATA","_createMissingCalendarData","nepali","mue","Ev","mHe","c5","f5","persian","jalali","yue","r0","yHe","v5","NM","yearsOffset","_t2gYear","_g2tYear","taiwan","gue","gHe","IM","thai","bue","bHe","BM","yu","ummalqura","_ue","UQe","xue","que","GQe","Sue","Tue","Q2","Aue","xHe","_He","UM","Mue","d5","kHe","wue","kue","e1","GM","HM","ql","OM","zcalendar","Pv","heatmap","contour","histogram2d","histogram2dcontour","surface","mesh3d","handleTraceDefaults","CANONICAL_SUNDAY","CANONICAL_TICK","DFLTRANGE","getCal","worldCalFmt","Cue","YQe","Lue","VQe","Eue","Due","qHe","moduleName","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","SRS_WGS84_SEMIMAJOR","SRS_WGS84_ESQUARED","SEC_TO_RAD","HALF_PI","EPSLN","D2R","R2D","FORTPI","TWO_PI","SPI","primeMeridian","to_meter","fath","kmi","ignoredChar","testkey","lkey","defData","paramName","paramVal","paramOutname","paramObj","proj","rf","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","gamma","rectified_grid_angle","lonc","longc","x_0","y_0","k_0","r_a","R_A","south","utmSouth","towgs84","datum_params","units","from_greenwich","PrimeMeridian","nadgrids","datumCode","legalAxis","approx","idNode","authority","convertUnit","conversion_factor","conversionFactor","convertAxis","abbreviationMatch","abbreviation","orderNode","unitNode","extractAxes","base_crs","conversion","csNode","coordinate_system","lengthUnitNode","datumOrEnsembleNode","datumOrEnsemble","datum_ensemble","primem","prime_meridian","longitude","ellipsoid","members","member","accuracyNode","accuracy","ellipsoidNode","semi_major_axis","inverse_flattening","param","sourceCrsNode","sourceCrsContent","source_crs","targetCrsNode","targetCrsContent","target_crs","transformationNode","transformation","scaleDifference","keyword","subtype","usage","usageNode","whitespace","latin","endThings","digets","currentObject","mapit","thing","newObj","sExpr","applyProjectionDefaults","wkt","normalizedProjName","projName","processUnit","toValue","valueOrObject","calculateEllipsoid","semi_minor_axis","transformPROJJSON","projjson","srsCode","ellps","directionMap","paramValue","latitude_of_false_origin","longitude_of_false_origin","latitude_of_standard_parallel","latitude_of_1st_standard_parallel","latitude_of_2nd_standard_parallel","latitude_of_projection_centre","longitude_of_projection_centre","easting_at_false_origin","northing_at_false_origin","latitude_of_natural_origin","longitude_of_natural_origin","longitude_of_origin","false_easting","easting_at_projection_centre","false_northing","northing_at_projection_centre","standard_parallel_1","standard_parallel_2","scale_factor_at_natural_origin","scale_factor_at_projection_centre","scale_factor_on_pseudo_standard_parallel","azimuth","azimuth_at_projection_centre","angle_from_rectified_to_skew_grid","readCharicter","neutral","quoted","afterquote","afterItem","newObjects","knownTypes","cleanWKT","setPropertiesFromWkt","AUTHORITY","PROJECTION","AXIS","axisOrder","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","PRIMEM","sphere","TOWGS84","outName","inName","normalizedWKT","detectWKTVersion","lisp","detectWKT2Version","buildPROJJSON","EPSG","ESRI","IAU2000","WGS84","GOOGLE","destination","eccent","sinphi","cosphi","con","skipAdjust","phi","com","dphi","eccnth","projs","msfnz","forward","lon","lat","adjust_lon","tsfnz","phi2z","projStore","getNormalizedProjName","MERIT","ellipseName","SGS85","GRS80","IAU76","airy","APL4","NWL9D","mod_airy","andrae","aust_SA","GRS67","bessel","bess_nam","clrk66","clrk80","clrk80ign","clrk58","CPM","delmbr","engelis","evrst30","evrst48","evrst56","evrst69","evrstSS","fschr60","fschr60m","fschr68","helmert","hough","intl","kaula","lerch","mprts","new_intl","plessis","krass","SEasia","walbeck","WGS60","WGS66","WGS7","Ellipsoid","datums","wgs84","ellipse","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","mgi","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","EPSG_5451","IGNF_LURESG","EPSG_4614","EPSG_4615","ESRI_37241","ESRI_37249","ESRI_37245","EPSG_4178","EPSG_4622","EPSG_4625","EPSG_5252","EPSG_4314","EPSG_4282","EPSG_4231","EPSG_4274","EPSG_4134","EPSG_4254","EPSG_4159","EPSG_4687","EPSG_4227","EPSG_4746","EPSG_4745","EPSG_6311","EPSG_4289","EPSG_4230","EPSG_4154","EPSG_4156","EPSG_4299","EPSG_4179","EPSG_4313","EPSG_4194","EPSG_4195","EPSG_4196","EPSG_4611","EPSG_4633","EPSG_4641","EPSG_4643","EPSG_4300","EPSG_4188","EPSG_4660","EPSG_4662","EPSG_3906","EPSG_4307","EPSG_6892","EPSG_4690","EPSG_4691","EPSG_4629","EPSG_4630","EPSG_4692","EPSG_9333","EPSG_9059","EPSG_4312","EPSG_4123","EPSG_4309","ESRI_104106","EPSG_4281","EPSG_4322","EPSG_4324","EPSG_4284","EPSG_4277","EPSG_4207","EPSG_4688","EPSG_4689","EPSG_4720","EPSG_4273","EPSG_4240","EPSG_4817","ESRI_104131","EPSG_4265","EPSG_4263","EPSG_4298","EPSG_4270","EPSG_4229","EPSG_4220","EPSG_4214","EPSG_4232","EPSG_4238","EPSG_4168","EPSG_4131","EPSG_4152","EPSG_5228","EPSG_8351","EPSG_4683","EPSG_4133","EPSG_7373","EPSG_9075","EPSG_9072","EPSG_9294","EPSG_4212","EPSG_4191","EPSG_4237","EPSG_4740","EPSG_4124","EPSG_5681","EPSG_4141","EPSG_4204","EPSG_4319","EPSG_4200","EPSG_4130","EPSG_4127","EPSG_4149","EPSG_4617","EPSG_4663","EPSG_4664","EPSG_4665","EPSG_4666","EPSG_4756","EPSG_4723","EPSG_4726","EPSG_4267","EPSG_5365","EPSG_4218","EPSG_4242","EPSG_4216","ESRI_104105","ESRI_104129","EPSG_4673","EPSG_4202","EPSG_4203","EPSG_3819","EPSG_8694","EPSG_4145","EPSG_4283","EPSG_4317","EPSG_4272","EPSG_4248","EPSG_5561","EPSG_5233","ESRI_104130","ESRI_104102","ESRI_37207","EPSG_4675","ESRI_104109","ESRI_104112","ESRI_104113","IGNF_WGS72G","IGNF_NTFG","IGNF_EFATE57G","IGNF_PGP50G","IGNF_REUN47G","IGNF_CSG67G","IGNF_GUAD48G","IGNF_TAHI51G","IGNF_TAHAAG","IGNF_NUKU72G","IGNF_PETRELS72G","IGNF_WALL78G","IGNF_MAYO50G","IGNF_TANNAG","IGNF_IGN72G","IGNF_ATIGG","IGNF_FANGA84G","IGNF_RUSAT84G","IGNF_KAUE70G","IGNF_MOP90G","IGNF_MHPF67G","IGNF_TAHI79G","IGNF_ANAA92G","IGNF_MARQUI72G","IGNF_APAT86G","IGNF_TUBU69G","IGNF_STPM50G","EPSG_4150","EPSG_4754","ESRI_104101","EPSG_4693","EPSG_6207","EPSG_4153","EPSG_4132","EPSG_4221","EPSG_4266","EPSG_4193","EPSG_5340","EPSG_4246","EPSG_4318","EPSG_4121","EPSG_4223","EPSG_4158","EPSG_4285","EPSG_4613","EPSG_4607","EPSG_4475","EPSG_4208","EPSG_4743","EPSG_4710","EPSG_7881","EPSG_4682","EPSG_4739","EPSG_4679","EPSG_4750","EPSG_4644","EPSG_4695","EPSG_4292","EPSG_4302","EPSG_4143","EPSG_4606","EPSG_4699","EPSG_4247","EPSG_4160","EPSG_4161","EPSG_9251","EPSG_9253","EPSG_4297","EPSG_4269","EPSG_4301","EPSG_4618","EPSG_4612","EPSG_4678","EPSG_4250","EPSG_4144","EPSG_4147","EPSG_4259","EPSG_4164","EPSG_4211","EPSG_4182","EPSG_4224","EPSG_4225","EPSG_5527","EPSG_4752","EPSG_4310","EPSG_9248","EPSG_4680","EPSG_4701","EPSG_4706","EPSG_4805","EPSG_4201","EPSG_4210","EPSG_4183","EPSG_4139","EPSG_4668","EPSG_4717","EPSG_4732","EPSG_4280","EPSG_4209","EPSG_4261","EPSG_4658","EPSG_4721","EPSG_4222","EPSG_4601","EPSG_4602","EPSG_4603","EPSG_4605","EPSG_4621","EPSG_4657","EPSG_4316","EPSG_4642","EPSG_4698","EPSG_4192","EPSG_4311","EPSG_4135","ESRI_104138","EPSG_4245","EPSG_4142","EPSG_4213","EPSG_4253","EPSG_4129","EPSG_4713","EPSG_4239","EPSG_4146","EPSG_4155","EPSG_4165","EPSG_4672","EPSG_4236","EPSG_4251","EPSG_4271","EPSG_4175","EPSG_4716","EPSG_4315","EPSG_4744","EPSG_4244","EPSG_4293","EPSG_4714","EPSG_4736","EPSG_6883","EPSG_6894","EPSG_4205","EPSG_4256","EPSG_4262","EPSG_4604","EPSG_4169","EPSG_4620","EPSG_4184","EPSG_4616","EPSG_9403","EPSG_4684","EPSG_4708","EPSG_4707","EPSG_4709","EPSG_4712","EPSG_4711","EPSG_4718","EPSG_4719","EPSG_4724","EPSG_4725","EPSG_4735","EPSG_4722","EPSG_4728","EPSG_4734","EPSG_4727","EPSG_4729","EPSG_4730","EPSG_4733","ESRI_37218","ESRI_37240","ESRI_37221","ESRI_4305","ESRI_104139","EPSG_4748","EPSG_4219","EPSG_4255","EPSG_4257","EPSG_4646","EPSG_6881","EPSG_6882","EPSG_4715","IGNF_RGF93GDD","IGNF_RGM04GDD","IGNF_RGSPM06GDD","IGNF_RGTAAF07GDD","IGNF_RGFG95GDD","IGNF_RGNCG","IGNF_RGPFGDD","IGNF_ETRS89G","IGNF_RGR92GDD","EPSG_4173","EPSG_4180","EPSG_4619","EPSG_4667","EPSG_4075","EPSG_6706","EPSG_7798","EPSG_4661","EPSG_4669","EPSG_8685","EPSG_4151","EPSG_9702","EPSG_4758","EPSG_4761","EPSG_4765","EPSG_8997","EPSG_4023","EPSG_4670","EPSG_4694","EPSG_4148","EPSG_4163","EPSG_4167","EPSG_4189","EPSG_4190","EPSG_4176","EPSG_4659","EPSG_3824","EPSG_3889","EPSG_4046","EPSG_4081","EPSG_4558","EPSG_4483","EPSG_5013","EPSG_5264","EPSG_5324","EPSG_5354","EPSG_5371","EPSG_5373","EPSG_5381","EPSG_5393","EPSG_5489","EPSG_5593","EPSG_6135","EPSG_6365","EPSG_5246","EPSG_7886","EPSG_8431","EPSG_8427","EPSG_8699","EPSG_8818","EPSG_4757","EPSG_9140","EPSG_8086","EPSG_4686","EPSG_4737","EPSG_4702","EPSG_4747","EPSG_4749","EPSG_4674","EPSG_4755","EPSG_4759","EPSG_4762","EPSG_4763","EPSG_4764","EPSG_4166","EPSG_4170","EPSG_5546","EPSG_7844","EPSG_4818","EPSG_10328","EPSG_9782","EPSG_9777","EPSG_10690","EPSG_10639","EPSG_10739","EPSG_7686","EPSG_8900","EPSG_5886","EPSG_7683","EPSG_6668","EPSG_20046","EPSG_10299","EPSG_10310","EPSG_10475","EPSG_4742","EPSG_10671","EPSG_10762","EPSG_10725","EPSG_10791","EPSG_10800","EPSG_10305","EPSG_10941","EPSG_10968","EPSG_10875","EPSG_6318","EPSG_10910","loadedNadgrids","readGeotiffGrid","subgrids","subGridCount","getImageCount","subgridIndex","getImage","readRasters","lim","getHeight","imageBBoxRadians","getBoundingBox","degreesToRadians","modelPixelScale","fileDirectory","ModelPixelScale","latitudeOffsetBand","longitudeOffsetBand","secondsToRadians","cvs","tifGrid","nSubgrids","parseNadgridString","mandatory","degrees","decodeString","mapNodes","longitudeShift","latitudeShift","readGridHeader","isLittleEndian","lowerLatitude","upperLatitude","lowerLongitude","upperLongitude","latitudeInterval","longitudeInterval","gridNodeCount","readGridNodes","gridHeader","includeErrorFields","nodesOffset","gridRecordLength","gridShiftRecords","record","latitudeAccuracy","longitudeAccuracy","Projection","testObj","testDef","testWKT","maybeProjStr","checkProjStr","testProj","auth","checkMercator","parseCode","ourProj","projections","datumDef","Datum","sphere_","ecc","ep2","getNadgrids","datumObj","datum_type","geodeticToGeocentric","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","geocentricToGeodetic","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","checkParams","applyGridShift","attemptedGrids","subgrid","applySubgridShift","pin","nadInterpolate","dif","inx","indx","frct","f00","f10","f11","f01","m11","m10","m00","m01","checkCoord","transformInternal","enforceAxis","hasZ","checkSanity","checkNotWGS","crs","adjustAxisToEnu","compareDatums","source_a","source_es","dest_a","dest_b","dest_es","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricToWgs84","x_tmp","y_tmp","z_tmp","geocentricFromWgs84","datum_transform","adjustAxisFromEnu","transformer","coords","geocent","toPoint","checkProj","oProj","SET_ORIGIN_COLUMN_LETTERS","SET_ORIGIN_ROW_LETTERS","mgrs","UTMtoLL","utm","colOrigin","rowOrigin","colInt","rowInt","rollover","easting","northing","setParm","seasting","snorthing","zoneNumber","zoneLetter","get100kSetForZone","eccPrimeSquared","LongOriginRad","ZoneNumber","Lat","Long","eccSquared","LatRad","degToRad","LongRad","LetterDesignator","UTMEasting","UTMNorthing","LLtoUTM","radToDeg","LongOrigin","phi1Rad","topRight","mgrsString","testChar","hunK","east100k","curCol","eastingValue","rewindMarker","getEastingFromChar","north100k","curRow","northingValue","getNorthingFromChar","getMinNorthing","accuracyBonus","sepEastingString","sepNorthingString","sep","sepEasting","sepNorthing","Point","fromMGRS","mgrsStr","toMGRS","C04","C06","C08","sphi","cphi","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","als","pj_inv_mlfn","tan_phi","cos_2B","arg_r","arg_i","hr2","hi2","sin_arg_r","cos_arg_r","sinh_arg_i","sinh","cosh_arg_i","cosh","hi1","hr1","tmerc","cgb","cbg","utg","gtu","gatg","clens","sin_Cn","cos_Cn","sin_Ce","cos_Ce","hypot","log1py","asinhy","clens_cmplx","adjust_zone","etmerc","dependsOn","esinp","phic0","ratexp","srat","gauss","sinc0","cosc0","sinc","cosc","cosl","rho","ssfn_","phit","eccen","coslat0","sinlat0","cons","ms1","cosX0","sinX0","sinX","cosX","sinlat","coslat","dlon","Chi","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","Sa1","Sa2","rotI","rotB","phy","prevPhy","iteration","TOL","cosph0","sinph0","gamma0","typeAProjections","projectionName","lamc","lam1","lam2","phi1","phi2","alpha_c","no_off","no_rot","alp","gam","one_es","lam0","singam","cosgam","sinrot","cosrot","ArB","BrA","u_0","v_pole_n","v_pole_s","sin1","cos1","sin2","cos2","ms2","ts0","rh1","s45","s90","fi0","alfa","ro0","gfi","deltav","eps","czech","fi1","e0fn","e1fn","e2fn","e3fn","mlfn","lam","asq","imlfn","nl1","rl1","tl1","dsq","adjust_lat","authset","APA","authlat","qsfnz","mmf","apa","xmf","ymf","sinb1","cosb1","coslam","sinlam","sinb","cosb","OBLIQ","EQUIT","N_POLE","S_POLE","cosz","sinz","sin_po","cos_po","qs1","qs2","qs0","ns0","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","iqsfnz","dlat","tanphi","mln","mlnp","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","num_re","num_im","den_re","den_im","den2","d_psi_n","C_x","C_y","delta_theta","ml1","ml2","sinth","costh","gsq","msq","xys","th1","sin_p12","cos_p12","Mlp","kp","cos_c","azi1","lon1","lon2","sinU1","cosU1","sinU2","cosU2","lambdaP","sinLambda","cosLambda","sinSigma","cosSigma","sigma","sinAlpha","cos2Alpha","cos2SigmaM","uSq","deltaSigma","iterLimit","s12","vincentyInverse","sinAlpha1","cosAlpha1","sigma1","sigmaP","vincentyDirect","qsc_fwd_equat_face_theta","qsc_shift_lon_origin","slon","face","one_minus_f","one_minus_f_squared","sinlon","cosmu","tannu","tantheta","invert_sign","COEFS_X","COEFS_Y","FXC","FYC","RC1","poly3_val","coefs","NODES","f_df","max_err","upd","newton_rapshon","poly3_der","azi","tilt","pn1","pfact","omega","bm","flip_axis","sweep","radius_g_1","radius_g","rone_es","radius_p","radius_p2","radius_p_inv2","v_x","v_y","v_z","det","v_zp","rqda","paramLat","paramLatSq","paramLatPow6","EPS10","e_fwd","am1","e_inv","s_fwd","cphi1","s_inv","projectionType","OBLIQUE","sphip","cphip","lamp","obliqueProjection","isIdentity","innerLp","TRANSVERSE","paramSets","ROTATE","o_alpha","o_lon_c","o_lat_c","NEW_POLE","o_lat_p","o_lon_p","NEW_EQUATOR","o_lon_1","o_lat_1","o_lon_2","o_lat_2","o_proj","newProjStr","projStr","Proj","matchedSet","paramSetsKeys","parseParam","setKey","inputParam","phip","how","oLongC","phic","oLatC","oAlpha","oLongP","oLatP","oLong1","oLat1","oLong2","oLat2","createRotation","fromProjOrToProj","toProjOrCoord","coord","fromProj","toProj","defaultDatum","nadgrid","nFields","detectLittleEndian","nSubgridFields","shiftType","fromSemiMajorAxis","fromSemiMinorAxis","toSemiMajorAxis","toSemiMinorAxis","readHeader","gridOffset","subHeader","lngColumnCount","latColumnCount","rowSize","readSubgrids","readNTV2Grid","proj4","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","nzmg","mill","sinu","eck6","moll","eqdc","vandg","aeqd","qsc","robin","tpers","geos","eqearth","bonne","ob_tran","isRegex","select2","requirejs","deps","_defined","__super__","Decorate","Observable","generateChars","_convertData","hasScroll","escapeMarkup","__cache","GetUniqueElementId","StoreData","GetData","RemoveData","copyNonInternalCssClasses","$results","displayMessage","hideLoading","hideMessages","highlightFirstItem","ensureHighlightVisible","setClasses","showLoading","msMatchesSelector","webkitMatchesSelector","_resultId","getHighlightedResults","SHIFT","CTRL","ALT","ESC","_tabindex","$selection","_handleBlur","_attachCloseHandler","_detachCloseHandler","selectionContainer","normalizePlaceholder","createPlaceholder","_handleClear","_handleKeyboardClear","prevented","$searchContainer","$search","_transferTabIndex","resizeSearch","_keyUpPrevented","searchRemoveChoice","documentMode","handleSearch","term","dict","loadPath","generateResultId","unselect","addOptions","_normalizeItem","_dataToConvert","convertToOptions","ajaxOptions","_applyDefaults","processResults","transport","_request","_queryTimeout","createTag","insertTag","_removeOldTags","tokenizer","dropdown","minimumInputLength","minimum","maximumInputLength","maximum","maximumSelectionLength","_checkIfMaximumSelected","$dropdown","showSearch","removePlaceholder","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","more","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","$container","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","isConnected","minimumResultsForSearch","_handleSelectOnClose","originalSelect2Event","_selectTriggered","errorLoading","inputTooLong","inputTooShort","loadingMore","maximumSelected","searching","removeAllItems","dataAdapter","tokenSeparators","resultsAdapter","selectOnClose","dropdownAdapter","dropdownCssClass","selectionAdapter","allowClear","selectionCssClass","_resolveLanguage","translations","_processTranslations","amdLanguageBase","autocomplete","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","applyFromElement","fromElement","_generateId","_placeContainer","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","_syncAttributes","_resolveWidth","_syncA","_syncS","_syncSubtree","childList","subtree","toggleDropdown","_isChangeMutation","addedNodes","removedNodes","nodeIdCompat","hasDescriptors","$floor","functionLengthIsConfigurable","functionLengthIsWritable","_IPv6","IPv6","best","_segments","_best","_current","inzeroes","_SecondLevelDomains","SecondLevelDomains","SLD","tldOffset","sldOffset","sldList","punycode","_URI","URI","_urlSupplied","absoluteTo","escapeRegEx","filterArrayValues","lookup","arrayContains","arraysEqual","trimSlashes","escapeForDumbFirefox36","strictEncodeURIComponent","_parts","username","password","urn","port","preventInvalidHostname","duplicateQueryParameters","escapeQuerySpace","protocol_expression","idn_expression","punycode_expression","ip4_expression","ip6_expression","find_uri_expression","findUri","parens","leading_whitespace_expression","ascii_tab_whitespace","defaultPorts","http","https","ftp","gopher","wss","hostProtocols","invalid_hostname_characters","domAttributes","getDomAttribute","iso8859","unicode","characters","expression","reserved","urnpath","encodeQuery","decodeQuery","_part","generateAccessor","generateSegmentedPathFunction","_sep","_codingFuncName","_innerCodingFuncName","actualCodingFunc","generateSimpleAccessor","generatePrefixAccessor","decodePath","decodeUrnPath","recodePath","recodeUrnPath","encodeReserved","parseAuthority","parseHost","bracketPos","firstColon","firstSlash","nextColon","ensureValidHostname","ensureValidPort","parseUserinfo","_string","parseQuery","splits","requireAbsolutePath","buildAuthority","buildHost","buildUserinfo","buildQuery","unique","buildQueryParameter","addQuery","setQuery","removeQuery","hasQuery","withinArray","joinPaths","nonEmptySegments","commonPath","withinString","_trim","_parens","_attributeOpen","ignoreHtml","attributeOpen","parensEnd","parensMatch","parensMatchEnd","ignore","hasHostname","rejectEmptyHostname","toASCII","unconflicted","URITemplate","deferBuild","_deferred_build","_object","what","ip4","ip6","sld","idn","_protocol","_port","_hostname","userinfo","resource","subdomain","directory","decodePathSegment","mutatedDirectory","normalizePath","absolute","segmentCoded","setSearch","addSearch","removeSearch","hasSearch","normalizeProtocol","normalizeQuery","normalizeFragment","normalizeHostname","normalizePort","_was_relative","_path","_pos","_leadingParents","normalizePathname","normalizeSearch","normalizeHash","toUnicode","basedir","resolved","relativeTo","relativeParts","baseParts","relativePath","basePath","one_map","two_map","one_query","two_query","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","ucs2encode","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","numPoints","firstTime","baseMinusTMin","basic","oldi","baseMinusT","bias","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","uncurryThis","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","isDataViewToString","SharedArrayBufferCopy","isSharedArrayBufferToString","descriptors","formatRegExp","debugs","debugEnvRegex","debugEnv","stylizeNoColor","stylizeWithColor","formatValue","styleType","recurseTimes","simple","formatPrimitive","visibleKeys","arrayToHash","formatError","braces","formatProperty","formatArray","cur","reduceToSingleString","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","original","promiseResolve","promiseReject","callbackified","maybeCb","rej","availableTypedArrays","typedArrays","$slice","superProto","getter","trySlices","tryTypedArrays","possibleNames","_exports","wasm","WebAssembly","Instance","Module","unsigned","isLong","ctz32","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","fromBits","fromNumber","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","radixToPower","power","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","isNegative","radixLong","rem1","rem","remDiv","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","top11Bits","eqz","isPositive","notEquals","neq","lessThan","comp","lessThanOrEqual","greaterThan","greaterThanOrEqual","thisNeg","otherNeg","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","b00","toUnsigned","shru","shr","log2","approxRes","approxRem","modulo","countLeadingZeros","clz","countTrailingZeros","ctz","shiftLeft","shiftRight","shiftRightUnsigned","shr_u","rotateLeft","rotl","rotateRight","rotr","toSigned","toBytesLE","toBytesBE","fromBytes","bytes","fromBytesLE","fromBytesBE","fromBigInt","asIntN","toBigInt","lowBigInt","preferDefault","protobuf","LongBits","_configure","Writer","BufferWriter","Reader","BufferReader","rpc","utf8","indexOutOfRange","writeLength","discardUnknown","create_array","readLongVarint","readFixed32_end","readFixed64","getLazyView","sint32","fixed32","sfixed32","uint32s","int32s","sint32s","bools","fixed32s","sfixed32s","floats","uint64s","uint64","int64s","int64","sint64s","sint64","fixed64s","fixed64","sfixed64s","sfixed64","stringVerify","readStrict","recursionLimit","skipType","wireType","fieldNumber","nestedField","BufferReader_","zzDecode","_slice","utf8Slice","Service","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","asPromise","endedByRPC","b64","s64","invalidEncoding","base64Re","base64UrlRe","base64UrlNoPaddingRe","f32","f8b","writeFloat_f32_cpy","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloat_ieee754","writeUint","readFloat_ieee754","readUint","uint","mantissa","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDouble_ieee754","off0","off1","readDouble_ieee754","zzEncode","zeroHash","toLong","fromHash","toHash","part0","part1","part2","Long_","isUnsafeProperty","dst","ifNotSet","newError","CustomError","emptyArray","freeze","emptyObject","isset","utf8Write","newBuffer","sizeOrArray","rawField","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","longFromKey","boolFromKey","nestingLimit","makeProp","lcFirst","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","SIZE","MAX","slab","strictDecoder","looseDecoder","ignoreBOM","fatal","utf8_read_js","utf8_read_decoder","sizeVarint32","writeVarint32","writeVarint64","writeFixed32","writer","_reserve","need","_delim","lenPos","writeStringAscii","setUint32","setFloat32","setFloat64","fork","ldelim","vlen","shared","finishInto","BufferWriter_","writeStringBuffer","$require","$module","scratchDiagonalCartesianNE","scratchDiagonalCartesianSW","scratchDiagonalCartographic","scratchCenterCartesian","scratchSurfaceCartesian","scratchBoundingSphere","tilingScheme","scratchCorners","scratchTileXY","ApproximateTerrainHeights","getTileXYLevel","rectangle","fromRadians","east","north","west","lastLevelX","lastLevelY","currentX","currentY","maxLevel","_terrainHeightsMaxLevel","corner","positionToTileXY","initialize","initPromise","_initPromise","fetchJson","_terrainHeights","getMinimumMaximumHeights","xyLevel","minTerrainHeight","_defaultMinTerrainHeight","maxTerrainHeight","_defaultMaxTerrainHeight","cartographicToCartesian","northeast","southwest","midpoint","surfacePosition","scaleToGeodeticSurface","minimumTerrainHeight","maximumTerrainHeight","getBoundingSphere","fromRectangle3D","TerrainProviderBuilder","credit","lodCount","hasAvailability","tilesAvailable","tilesAvailabilityLoaded","levelZeroMaximumGeometricError","terrainDataStructure","ArcGISTiledElevationTerrainProvider","EMPTY_OBJECT","_resource","_credit","_tilingScheme","_levelZeroMaximumGeometricError","_maxLevel","_terrainDataStructure","_lodCount","_hasAvailability","_tilesAvailable","_tilesAvailabilityLoaded","_availableCache","_errorEvent","isTileAvailable","findRange","endCol","endRow","endingIndices","startX","startY","endX","endY","doneX","doneY","requestAvailability","xOffset","yOffset","dim","availableCache","throttleByServer","TERRAIN","getDerivedResource","available","computeAvailability","addAvailableTileRange","provider","errorEvent","hasWaterMask","hasVertexNormals","availability","fromUrl","createIfNeeded","appendForwardSlash","queryParameters","metadataResource","terrainProviderBuilder","metadata","copyrightText","spatialReference","wkid","latestWkid","tilingSchemeOptions","fromDegrees","epsg3857Bounds","maximumRadius","rectangleSouthwestInMeters","rectangleNortheastInMeters","tileInfo","LERC","NONE","lods","capabilities","getNumberOfXTilesAtLevel","getNumberOfYTilesAtLevel","getEstimatedLevelZeroGeometricErrorForAHeightmap","bandCount","elementMultiplier","lowestEncodedHeight","highestEncodedHeight","parseMetadataSuccess","reportError","requestMetadata","requestTileGeometry","tileResource","availabilityRequest","availabilityPromise","availabilityResult","fetchArrayBuffer","childTileMask","computeChildMaskForTile","structure","CANCELLED","deferred","getLevelMaximumGeometricError","getTileDataAvailable","loadTileDataAvailability","GEODESIC","RHUMB","XTRANSLATE","YTRANSLATE","ZTRANSLATE","XROTATE","YROTATE","ZROTATE","XSCALE","YSCALE","ZSCALE","UNIFORMSCALE","AssociativeArray","_array","RIGHT_SHIFT8","AttributeCompression","vector","rangeMax","magSquared","magnitudeSquared","EPSILON6","signNotZero","toSNorm","octEncodeInRange","octEncodeScratch","uint8ForceArray","forceUint8","octEncodeToCartesian4","octDecodeInRange","fromSNorm","oldVX","octDecode","octDecodeFromCartesian4","encoded","typeOf","xOct16","yOct16","octPackFloat","scratchEncodeCart2","zigZagDecode","octEncodeFloat","octEncode","octDecodeFloat","octPack","encoded1","encoded2","encoded3","octUnpack","packed","encodedFloat1","encodedFloat2","compressTextureCoordinates","textureCoordinates","decompressTextureCoordinates","compressed","xZeroTo4095","zigZagDeltaDecode","uBuffer","vBuffer","heightBuffer","dequantize","componentDatatype","componentsPerAttribute","getNumberOfComponents","BYTE","UNSIGNED_BYTE","SHORT","UNSIGNED_SHORT","INT","UNSIGNED_INT","dequantizedTypedArray","encodeRGB8","decodeRGB8","decodeRGB565","expectedLength","normalize5","normalize6","AxisAlignedBoundingBox","fromCorners","fromPoints","minimumX","minimumY","minimumZ","maximumX","maximumY","maximumZ","intersectScratch","intersectPlane","plane","multiplyByScalar","INSIDE","OUTSIDE","INTERSECTING","intersectAxisAlignedBoundingBox","BingMapsGeocoderService","geocode","fetchJsonp","resourceSets","resources","BoundingRectangle","packedLength","startingIndex","unpack","defaultProjection","fromRectangleLowerLeft","fromRectangleUpperRight","fromRectangle","_ellipsoid","lowerLeft","upperRight","lowerLeftX","lowerLeftY","upperRightX","upperRightY","leftX","leftY","rightX","rightY","BoundingSphere","fromPointsXMin","fromPointsYMin","fromPointsZMin","fromPointsXMax","fromPointsYMax","fromPointsZMax","fromPointsCurrentPos","fromPointsScratch","fromPointsRitterCenter","fromPointsMinBoxPt","fromPointsMaxBoxPt","fromPointsNaiveCenterScratch","volumeConstant","currentPos","xMin","yMin","xMax","yMax","numPositions","xSpan","ySpan","zSpan","diameter1","diameter2","maxSpan","ritterCenter","radiusSquared","ritterRadius","minBoxPt","maxBoxPt","naiveCenter","naiveRadius","magnitude","oldCenterToPointSquared","oldCenterToPoint","oldToNew","fromRectangle2DLowerLeft","fromRectangle2DUpperRight","fromRectangle2DSouthwest","fromRectangle2DNortheast","fromRectangle2D","fromRectangleWithHeights2D","minimumHeight","maximumHeight","elevation","fromRectangle3DScratch","surfaceHeight","subsample","fromVertices","greaterThanOrEquals","fromEncodedCartesianVertices","positionsHigh","positionsLow","fromCornerPoints","oppositeCorner","fromEllipsoid","fromBoundingSpheresScratch","fromBoundingSpheres","boundingSpheres","fromOrientedBoundingBoxScratchU","fromOrientedBoundingBoxScratchV","fromOrientedBoundingBoxScratchW","fromOrientedBoundingBox","orientedBoundingBox","halfAxes","scratchFromTransformationCenter","scratchFromTransformationScale","fromTransformation","getTranslation","unionScratch","unionScratchCenter","leftCenter","leftRadius","rightCenter","rightRadius","toRightCenter","centerSeparation","halfDistanceBetweenTangentPoints","expandScratch","distanceToPlane","multiplyByPoint","getMaximumScale","distanceSquaredToScratch","distanceSquaredTo","transformWithoutScale","scratchCartesian3","computePlaneDistances","toCenter","mag","projectTo2DNormalScratch","projectTo2DEastScratch","projectTo2DNorthScratch","projectTo2DWestScratch","projectTo2DSouthScratch","projectTo2DCartographicScratch","projectTo2DPositionsScratch","projectTo2DProjection","projectTo2D","UNIT_X","geodeticSurfaceNormal","UNIT_Z","cartographic","cartesianToCartographic","isOccluded","occluder","isBoundingSphereVisible","volume","diffScratch","BoxGeometry","offsetAttribute","vertexFormat","DEFAULT","_minimum","_maximum","_vertexFormat","_offsetAttribute","_workerName","fromDimensions","fromAxisAlignedBoundingBox","boundingBox","scratchMin","scratchMax","scratchVertexFormat","scratchOptions","unitBoxGeometry","createGeometry","boxGeometry","tangent","bitangent","DOUBLE","normals","FLOAT","texCoords","tangents","bitangents","offsetValue","applyOffset","primitiveType","TRIANGLES","boundingSphere","getUnitBox","POSITION_ONLY","BoxOutlineGeometry","LINES","Cartesian2","fromElements","packArray","resultLength","unpackArray","maximumComponent","minimumComponent","minimumByComponent","maximumByComponent","distanceScratch","distanceSquared","multiplyComponents","divideComponents","scalar","divideByScalar","lerpScratch","angleBetween","angleBetweenScratch","angleBetweenScratch2","acosClamped","mostOrthogonalAxis","mostOrthogonalAxisScratch","UNIT_Y","equalsArray","equalsEpsilon","relativeEpsilon","absoluteEpsilon","fromCartesian3","fromCartesian4","fromArray","Cartesian3","fromSpherical","spherical","clock","cone","cosine","sine","projectVector","leftZ","rightZ","latitude","toRadians","radiiSquared","_ellipsoidRadiiSquared","cosLatitude","scratchN","scratchK","fromDegreesArray","fromRadiansArray","fromDegreesArrayHeights","fromRadiansArrayHeights","Cartesian4","fromColor","UNIT_W","packFloat","scratchF32Array","littleEndian","scratchU8Array","unpackFloat","packedFloat","testU32","Cartographic","cartesianToCartographicN","cartesianToCartographicP","cartesianToCartographicH","_ellipsoidOneOverRadii","_ellipsoidOneOverRadiiSquared","_ellipsoidCenterToleranceSquared","EPSILON1","fromCartesian","oneOverRadii","oneOverRadiiSquared","centerToleranceSquared","_centerToleranceSquared","toCartesian","CartographicGeocoderService","splitQuery","coordTest","splitCoord","scratchTimeVec","scratchTemp0","scratchTemp1","firstTangentScratch","lastTangentScratch","CatmullRomSpline","firstTangent","lastTangent","_times","_points","_firstTangent","_lastTangent","_evaluateFunction","spline","invSpan","_lastTimeIndex","findTimeInterval","timeVec","multiplyByVector","hermiteCoefficientMatrix","catmullRomCoefficientMatrix","createEvaluateFunction","wrapTime","clampTime","Cesium3DTilesTerrainData","gltf","horizonOcclusionPoint","skirtHeight","_minimumHeight","_maximumHeight","_skirtHeight","_boundingSphere","_orientedBoundingBox","_horizonOcclusionPoint","_hasVertexNormals","requestVertexNormals","_hasWaterMask","requestWaterMask","_hasWebMercatorT","_credits","credits","_childTileMask","_gltf","_mesh","_waterMask","waterMask","interpolateHeight","mesh","interpolateMeshHeight","isChildAvailable","thisX","thisY","childX","childY","bitNumber","createMeshTaskName","createMeshTaskProcessorNoThrottle","createMeshTaskProcessorThrottle","maximumAsynchronousTasks","Cesium3DTilesUpsampleTerrainData","terrainMesh","createMesh","createMeshTaskProcessor","tileXYToRectangle","verticesPromise","scheduleTask","hasWebMercatorT","exaggeration","exaggerationRelativeHeight","taskResult","vertices","verticesBuffer","vertexCount","vertexCountWithoutSkirts","SizedIndexType","indicesBuffer","westIndices","westIndicesBuffer","eastIndices","eastIndicesBuffer","southIndices","southIndicesBuffer","northIndices","northIndicesBuffer","indexCountWithoutSkirts","_createMeshSync","meshPromise","upsample","thisLevel","descendantX","descendantY","descendantLevel","upsampleMesh","_upsampleSync","wasCreatedByUpsampling","_thisX","_thisY","_childX","_childY","upsampleTaskProcessor","synchronous","thisMesh","thisSkirtHeight","upsampleSkirtHeight","isEastChild","isNorthChild","upsampleRectangle","parentVertices","parentIndices","parentVertexCountWithoutSkirts","parentIndexCountWithoutSkirts","parentMinimumHeight","parentMaximumHeight","parentEncoding","upsampledTerrainData","upsamplePromise","scratchUv0","scratchUv1","scratchUv2","scratchBary","uv0","decodeTextureCoordinates","uv1","uv2","minU","maxU","minV","maxV","barycentric","computeBarycentricCoordinates","decodeHeight","Cesium3DTilesTerrainGeometryProcessor","scratchGltfInfo","edgeIndicesWest","edgeIndicesSouth","edgeIndicesEast","edgeIndicesNorth","scratchCenterCartographic","scratchEnuToEcef","scratchEcefToEnu","scratchTilesetTransform","scratchMinimumPositionENU","scratchMaximumPositionENU","scratchPosLocal","scratchPosEcef","scratchCartographic","scratchUV","scratchNormal","scratchNormalOct","scratchGeodeticSurfaceNormal","scratchPosEnu","sortedEdgeCompare","hasGeodeticSurfaceNormals","decoderPromise","extensionsRequired","tileMinLongitude","tileMinLatitude","tileMaxLatitude","tileLengthLongitude","tileLengthLatitude","approximateCenterCartographic","approximateCenterPosition","enuToEcef","eastNorthUpToFixedFrame","ecefToEnu","inverseTransformation","tilesetTransform","Y_UP_TO_Z_UP","gltfInfo","hasNormals","meshes","primitives","accessor","accessors","bufferView","bufferViews","positionCount","bufferViewMeshOpt","extensions","_pipeline","compressedBuffer","positionByteLength","byteStride","positionsResult","decodeVertexBuffer","positionStorageValueMax","decodePositions","normalCount","normalByteLength","normalsResult","octX","octY","octZ","oldX","oldY","decodeNormals","indexCount","componentType","decodeIndexBuffer","decodeIndices","decodeEdgeIndices","decodeGltf","skirtVertexCount","getSkirtVertexCount","positionsLocalWithoutSkirts","normalsWithoutSkirts","indicesWithoutSkirts","vertexCountWithSkirts","skirtIndexCount","getSkirtIndexCountWithFilledCorners","SizedIndexTypeWithSkirts","indexBufferWithSkirts","sortedWestIndices","sortedSouthIndices","sortedEastIndices","sortedNorthIndices","southMercatorAngle","geodeticLatitudeToMercatorAngle","oneOverMercatorHeight","minPosEnu","maxPosEnu","NEGATIVE_INFINITY","tempTerrainEncoding","tempBufferStride","tempBuffer","tempBufferOffset","posLocal","posECEF","normalOct","webMercatorT","multiplyByPointAsVector","posEnu","addSkirtsToMesh","scratchMinUV","scratchMaxUV","scratchPolygonIndices","scratchUvA","scratchUvB","scratchUvC","scratchNormalA","scratchNormalB","scratchNormalC","scratchCenterCartographicUpsample","scratchCenterCartesianUpsample","scratchCartographicSkirt","scratchCartographicUpsample","scratchPosEcefSkirt","scratchPosEcefUpsample","scratchPosEnuSkirt","scratchPosEnuUpsample","scratchMinimumPositionENUSkirt","scratchMaximumPositionENUSkirt","scratchMinimumPositionENUUpsample","scratchMaximumPositionENUUpsample","scratchEnuToEcefUpsample","scratchEcefToEnuUpsample","scratchUVSkirt","scratchUVUpsample","scratchHorizonOcclusionPoint","scratchOrientedBoundingBox","scratchAABBEnuSkirt","scratchNormalUpsample","scratchNormalOctSkirt","scratchNormalOctUpsample","scratchGeodeticSurfaceNormalSkirt","scratchGeodeticSurfaceNormalUpsample","CESIUM_tile_edges","indexByteLength","decodeIndexSequence","enuMinimum","enuMaximum","vertexStride","vertexBuffer","vertexBufferOffset","westIndicesSouthToNorth","southIndicesEastToWest","eastIndicesNorthToSouth","northIndicesWestToEast","addSkirtIndicesWithFilledCorners","southOffset","eastOffset","edgeIndexOffset","edgeLongitudeSign","edgeLatitudeSign","minimumPositionENUWithSkirts","maximumPositionENUWithSkirts","minimumHeightWithSkirts","skirtId","vertexIndex","skirtLonLatOffsetPercent","longitudeT","latitudeT","PI_OVER_TWO","positionEcef","getOctEncodedNormal","decodeWebMercatorT","positionENU","aabbEnuWithSkirts","encodingWithSkirts","quantization","finalEncoding","finalVertexStride","finalVertexBuffer","finalVertexBufferOffset","decodePosition","decodeGeodeticSurfaceNormal","upsampledTriIDs","upsampledUVs","upsampledBarys","upsampledIndices","upsampledWestIndices","upsampledSouthIndices","upsampledEastIndices","upsampledNorthIndices","vertexEncoding","resultIndices","resultWestIndices","resultSouthIndices","resultEastIndices","resultNorthIndices","resultTriIds","resultBary","resultUVs","upsampledVertexMap","minUV","maxUV","upsampledVertexCount","indexA","indexB","indexC","clippedPolygon","clipTriangleFromQuadrant","scratchPolygon","clippedPolygonLength","polygonUpsampledIndices","polygonBary","barycentricCoordinates","baryId","primitiveIds","lookUpTableBaryToPrim","upsampledIndex","isNewVertex","pointKey","edgePrimitiveIdA","edgePrimitiveIdB","edgeIndexA","edgeIndexB","prevBary","sameEdge","baseKey","firstKey","secondKey","firstEntry","secondEntry","useFirst","triId","polygonUV","ui0","ui1","ui2","clipTileFromQuadrant","upsampledVertexCountWithoutSkirts","upsampledTerrainEncoding","upsampledVertexBufferStride","upsampledSkirtVertexCount","upsampledVertexCountWithSkirts","upsampledIndexCountWithoutSkirts","upsampledSkirtIndexCount","upsampledIndexBuffer","upsampledWestIndicesBuffer","upsampledSouthIndicesBuffer","upsampledEastIndicesBuffer","upsampledNorthIndicesBuffer","upsampledVertexBuffer","upsampledVertexBufferOffset","minimumLongitude","maximumLongitude","minimumLatitude","maximumLatitude","baryA","baryB","baryC","carto","normalA","decodeNormal","normalB","normalC","computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid","upsampledMesh","scratchIntersection","scratchInBarys","scratchInPoints","scratchOutBarys","scratchOutPoints","inside","boxMinimum","boxMaximum","edgeId","intersectX","intersectY","edgeStart","edgeCount","inputPoints","inputBarys","outputLength","outputPoints","outputBarys","tempPoints","tempBarys","prevIdx","prevPoint","prevInside","currIdx","currPoint","currBary","currInside","tInv","clipTriangleAgainstBoxEdgeRange","Cesium3DTilesTerrainProvider","_tileCredits","_subtreeCache","ImplicitSubtreeCache","_tileset0","_tileset1","_requestVertexNormals","_requestWaterMask","tilesetJson","childrenJson","child0Json","child1Json","metadataSchemaJson","metadataSchema","fromJson","fromIonAssetId","assetId","fromAssetId","scratchPromises","getRootIdFromGeographic","getImplicitTileCoordinatesFromGeographicCoordinates","implicitTileset","numberOfYTilesAtLevel","implicitLevel","implicitX","implicitY","subdivisionScheme","subtreeLevels","isBottomOfSubtree","getImplicitTileCoordinates","childCoord","getDescendantCoordinates","childSubtreeIsAvailableAtCoordinates","tileIsAvailableAtCoordinates","ImplicitSubtreeCacheNode","rootId","_maximumSubtreeCount","maximumSubtreeCount","_subtreeRequestCounter","_queue","_provider","computeDescendantCoordinatesAtUv","subtreeCoord","levelOffset","tileCoord","getSubtreeCoordinates","subtreePromise","subtreeRelative","subtreeUriTemplate","templateValues","getTemplateValues","baseResource","bufferU8","fromSubtreeJson","addSubtree","glbRelative","contentUriTemplates","glbResource","glbPromise","gltfPromise","glbBuffer","gltfResource","propertyTextures","schemaLoader","metadataClass","waterMaskProperty","classId","propertiesBySemantic","propertyTextureData","textureInfo","texture","textures","bufferViewId","bufferViewLoader","getBufferViewLoader","uint8Array","flipY","skipColorSpaceConversion","loadWaterMask","metadataView","getTileMetadataView","getPropertyBySemantic","TILE_MINIMUM_HEIGHT","TILE_MAXIMUM_HEIGHT","boundingSphereArray","TILE_BOUNDING_SPHERE","TILE_HORIZON_OCCLUSION_POINT","hasSW","hasSE","terrainData","isImplicitTilesetRoot","isSubtreeRoot","parentSubtreeCoord","getParentSubtreeCoordinates","parentSubtree","aCoord","implicitCoordinates","bCoord","isAncestor","cacheNode","parentCoord","getMinimum","removeMinimum","internalArray","otherRootId","otherCoord","_computeMaximumImplicitTileCoordinatesAtPosition","rootSubtreeCoord","subtreeX","subtreeY","subtreeLevel","globalMinimumLongitude","globalMaximumLongitude","rootLongitudeStart","rootLongitudeEnd","rootLatitudeStart","rootLatitudeEnd","deepestTileCoord","childSubtreeLoaded","invDim","lonLength","latLength","childSubtreeCoord","childSubtree","localLevel","computeMaximumLevelAtPosition","tileCoordinates","LayerInformation","isHeightmap","tileUrlTemplates","hasMetadata","availabilityLevels","availabilityTilesLoaded","littleEndianExtensionSize","availabilityPromiseCache","heightmapWidth","heightmapStructure","lastResource","layerJsonResource","previousError","attribution","overallAvailability","overallMaxZoom","tileCredits","tiles","heightScale","heightOffset","elementsPerHeight","isBigEndian","maxZoom","maxzoom","numberOfLevelZeroTilesX","numberOfLevelZeroTilesY","metadataAvailability","availableTiles","rangesAtLevel","yTiles","rangeIndex","parentUrl","requestLayerJson","levelRanges","layerJsonCredit","metadataSuccess","tilejson","retry","parseMetadataFailure","CesiumTerrainProvider","_heightmapWidth","_heightmapStructure","_hasMetadata","_scheme","_requestMetadata","_availability","_layers","getRequestHeader","extensionsList","Accept","layerToUse","urlTemplates","terrainY","extensionList","_ionEndpoint","externalType","createHeightmapTerrainData","cartesian3Length","boundingSphereLength","cartesian3Elements","encodedVertexLength","bytesPerIndex","triangleLength","encodedVertexBuffer","triangleCount","createTypedArrayFromArrayBuffer","highest","westVertexCount","southVertexCount","eastVertexCount","northVertexCount","encodedNormalBuffer","waterMaskBuffer","extensionId","extensionLength","stringLength","availableLevel","quantizedVertices","encodedNormals","westSkirtHeight","southSkirtHeight","eastSkirtHeight","northSkirtHeight","createQuantizedMeshTerrainData","getAvailabilityTile","parentLevel","checkLayer","topLayer","cacheKey","deleteFromCache","tile","requestPromise","layerCount","unknownAvailability","availabilityUnloaded","_maximumLevel","layerResult","_getAvailabilityTile","Check","getFailedTypeErrorMessage","getUndefinedErrorMessage","lessThanOrEquals","bigint","name1","name2","test1","test2","CircleGeometry","ellipseGeometryOptions","semiMinorAxis","extrudedHeight","granularity","stRotation","shadowVolume","_ellipseGeometry","scratchEllipseGeometry","ellipseGeometry","_center","_extrudedHeight","_granularity","_stRotation","_shadowVolume","_semiMajorAxis","_semiMinorAxis","circleGeometry","createShadowVolume","minHeightFunc","maxHeightFunc","textureCoordinateRotationPoints","CircleOutlineGeometry","numberOfVerticalLines","UNIT_SPHERE","_numberOfVerticalLines","Clock","startTime","stopTime","addDays","clockRange","UNBOUNDED","canAnimate","onTick","onStop","_currentTime","_multiplier","_clockStep","_shouldAnimate","_lastSystemTime","shouldAnimate","clockStep","SYSTEM_CLOCK_MULTIPLIER","SYSTEM_CLOCK","currentSystemTime","TICK_DEPENDENT","addSeconds","CLAMPED","raiseEvent","LOOP_STOP","secondsDifference","hue2rgb","Color","scratchArrayBuffer","scratchUint32Array","scratchUint8Array","byteToFloat","fromAlpha","supportsTypedArrays","fromRgba","fromHsl","saturation","lightness","fromRandom","minimumRed","maximumRed","nextRandomNumber","minimumGreen","maximumGreen","minimumBlue","maximumBlue","minimumAlpha","maximumAlpha","rgbaMatcher","rrggbbaaMatcher","rgbParenthesesMatcher","hslParenthesesMatcher","fromCssColorString","namedColor","floatToByte","toCssColorString","toCssHexString","hexAlpha","bytesToRgba","toRgba","withAlpha","ALICEBLUE","ANTIQUEWHITE","AQUA","AQUAMARINE","AZURE","BEIGE","BISQUE","BLACK","BLANCHEDALMOND","BLUE","BLUEVIOLET","BROWN","BURLYWOOD","CADETBLUE","CHARTREUSE","CHOCOLATE","CORAL","CORNFLOWERBLUE","CORNSILK","CRIMSON","CYAN","DARKBLUE","DARKCYAN","DARKGOLDENROD","DARKGRAY","DARKGREEN","DARKGREY","DARKKHAKI","DARKMAGENTA","DARKOLIVEGREEN","DARKORANGE","DARKORCHID","DARKRED","DARKSALMON","DARKSEAGREEN","DARKSLATEBLUE","DARKSLATEGRAY","DARKSLATEGREY","DARKTURQUOISE","DARKVIOLET","DEEPPINK","DEEPSKYBLUE","DIMGRAY","DIMGREY","DODGERBLUE","FIREBRICK","FLORALWHITE","FORESTGREEN","FUCHSIA","GAINSBORO","GHOSTWHITE","GOLD","GOLDENROD","GRAY","GREEN","GREENYELLOW","GREY","HONEYDEW","HOTPINK","INDIANRED","INDIGO","IVORY","KHAKI","LAVENDER","LAVENDAR_BLUSH","LAWNGREEN","LEMONCHIFFON","LIGHTBLUE","LIGHTCORAL","LIGHTCYAN","LIGHTGOLDENRODYELLOW","LIGHTGRAY","LIGHTGREEN","LIGHTGREY","LIGHTPINK","LIGHTSEAGREEN","LIGHTSKYBLUE","LIGHTSLATEGRAY","LIGHTSLATEGREY","LIGHTSTEELBLUE","LIGHTYELLOW","LIME","LIMEGREEN","LINEN","MAGENTA","MAROON","MEDIUMAQUAMARINE","MEDIUMBLUE","MEDIUMORCHID","MEDIUMPURPLE","MEDIUMSEAGREEN","MEDIUMSLATEBLUE","MEDIUMSPRINGGREEN","MEDIUMTURQUOISE","MEDIUMVIOLETRED","MIDNIGHTBLUE","MINTCREAM","MISTYROSE","MOCCASIN","NAVAJOWHITE","NAVY","OLDLACE","OLIVE","OLIVEDRAB","ORANGE","ORANGERED","ORCHID","PALEGOLDENROD","PALEGREEN","PALETURQUOISE","PALEVIOLETRED","PAPAYAWHIP","PEACHPUFF","PERU","PINK","PLUM","POWDERBLUE","PURPLE","RED","ROSYBROWN","ROYALBLUE","SADDLEBROWN","SALMON","SANDYBROWN","SEAGREEN","SEASHELL","SIENNA","SILVER","SKYBLUE","SLATEBLUE","SLATEGRAY","SLATEGREY","SNOW","SPRINGGREEN","STEELBLUE","TAN","TEAL","THISTLE","TOMATO","TURQUOISE","VIOLET","WHEAT","WHITE","WHITESMOKE","YELLOW","YELLOWGREEN","TRANSPARENT","ColorGeometryInstanceAttribute","ComponentDatatype","valuesOrLength","getSizeInBytes","CompressedTextureBuffer","internalFormat","pixelDatatype","_datatype","arrayBufferView","ConstantSpline","_valueType","getPointType","scratchPosition","scratchBR","stScratch","textureCoordinatesOrigin","scratchTangent","scratchBitangent","centerScratch","axis1Scratch","axis2Scratch","quaternionScratch","textureMatrixScratch","tangentRotationScratch","surfaceNormalScratch","createGeometryFromPolygon","boundingRectangle","hardcodedTextureCoordinates","projectPointTo2D","triangulate","positions2D","holes","newIndices","createTypedArray","textureMatrix","fromAxisAngle","fromQuaternion","tangentRotation","IDENTITY","stOrigin","flatPositions","positionIndex","normalIndex","bitangentIndex","tangentIndex","stIndex","stx","sty","CoplanarPolygonGeometry","polygonHierarchy","_polygonHierarchy","_textureCoordinates","computeHierarchyPackedLength","fromPositions","packPolygonHierarchy","scratchEllipsoid","unpackPolygonHierarchy","polygonGeometry","hasTextureCoordinates","outerPositions","axis1","axis2","computeProjectTo2DArguments","surfaceNormal","projectPoints","createProjectPointsTo2DFunction","projectPoint","createProjectPointTo2DFunction","polygonsFromHierarchy","polygons","textureCoordinatePolygons","outerRing","computeBoundingRectangle","geometries","geometryInstance","geometry","combineInstances","CoplanarPolygonGeometryLibrary","scratchIntersectionPoint","scratchXAxis","scratchYAxis","scratchZAxis","obbScratch","validOutline","xAxis","yAxis","zAxis","xMag","yMag","zMag","centerResult","planeAxis1Result","planeAxis2Result","planeAxis1","planeAxis2","positionResults","createGeometryFromPositions","CoplanarPolygonOutlineGeometry","polygonOutlinesFromHierarchy","ROUNDED","MITERED","BEVELED","cartesian1","cartesian2","cartesian3","cartesian4","cartesian5","cartesian6","scratch1","scratch2","scaleToSurface","addNormals","computedPositions","corners","endPositions","computedLefts","lefts","computedNormals","leftCount","rightCount","indicesLength","leftSide","leftPositions","rightPositions","addEndPositions","endPositionLength","finalPositions","rightPos","leftPos","halfLength","firstEndPositions","rightNormal","leftNormal","posIndex","compIndex","rightEdge","leftEdge","pivot","outsidePoint","previousPoint","nextPoint","lastEndPositions","rightSt","leftSt","halfEndPos","addWallPositions","wallPositions","scratchCartesian1","scratchCartesian2","computeOffsetPoints","position1","position2","halfWidth","offsetDirection","minLat","minLon","maxLat","maxLon","scratchCartesianOffset","scratchCartesianEnds","scratchCartographicMin","scratchCartographicMax","computeRectangle","cornerType","cleanPositions","CorridorGeometry","_positions","_cornerType","RADIANS_PER_DEGREE","_rectangle","corridorGeometry","extrude","EPSILON2","saveAttributes","topVertexFormat","computePositions","newPositions","extrudedPositions","scaleToGeodeticHeight","topNormals","topBitangents","threeSize","twoSize","sixSize","topPosition","bottomPosition","previousPosition","attrIndex","attrIndexOffset","topTangents","topSt","extrudedAttributes","extrudeNormals","extrudeDirection","applyOffsetValue","iLength","computePositionsExtruded","CorridorGeometryLibrary","scratch3","scratch4","scaleArray2","cartesian7","cartesian8","cartesian9","cartesian10","quaterion","rotMatrix","computeRoundCorner","cornerPoint","startPoint","endPoint","leftIsOutside","computeMiteredCorner","leftCornerDirection","lastPoint","addShiftedPositions","calculatedPositions","scaledLeft","scaledRight","scratchForwardProjection","scratchBackwardProjection","backward","cornerDirection","previousPos","calculatedLefts","calculatedNormals","subdividedPositions","nextPosition","forwardProjection","backwardProjection","EPSILON7","angleIsGreaterThanPi","generateArc","firstEndCap","addEndCaps","wallIndices","CorridorOutlineGeometry","corridorOutlineGeometry","_OverloadYield","_arrayLikeToArray","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","isFrozen","seal","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arraySplice","arrayIsArray","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","numberToString","booleanToString","bigintToString","objectHasOwnProperty","regExpTest","typeErrorCreate","_len4","_key4","_len3","_key3","addToSet","transformCaseFunc","lcElement","cleanArray","newObject","lookupGetter","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","mathMl","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","ELEMENT_MARKUP_PROBE","COMMENT_MARKUP_PROBE","FALLBACK_TAG_CLOSE","SELF_CLOSING_TAG","LITERAL_TEXT_ELEMENT_NAMES","LITERAL_TEXT_ELEMENTS","LITERAL_TEXT_CLOSE","getGlobal","_resolveSetOption","_resolveObjectOption","makeFallback","purify_default","createDOMPurify","DOMPurify","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","trustedTypes","ElementPrototype","removeAttributeNode","getNextSibling","getChildNodes","getShadowRoot","getNodeType","getOwnerDocument","_readNodeType","_readNodeName","trustedTypesPolicy","defaultTrustedTypesPolicy","emptyHTML","defaultTrustedTypesPolicyResolved","IN_TRUSTED_TYPES_POLICY","_assertNotInTrustedTypesPolicy","_createTrustedHTML","createHTML","_document","createNodeIterator","importNode","afterSanitizeAttributes","afterSanitizeElements","afterSanitizeShadowDOM","beforeSanitizeAttributes","beforeSanitizeElements","beforeSanitizeShadowDOM","uponSanitizeAttribute","uponSanitizeElement","uponSanitizeShadowNode","createHTMLDocument","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","CUSTOM_ELEMENT$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","tagCheck","attributeCheck","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","SET_CONFIG_ALLOWED_TAGS","SET_CONFIG_ALLOWED_ATTR","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","DEFAULT_MATHML_TEXT_INTEGRATION_POINTS","MATHML_TEXT_INTEGRATION_POINTS","DEFAULT_HTML_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","ALLOWED_URI_REGEXP","customElementHandling","ADD_TAGS","ADD_ATTR","ADD_FORBID_CONTENTS","TRUSTED_TYPES_POLICY","createScriptURL","previousTrustedTypesPolicy","purifyHostElement","createPolicy","ATTR_NAME","policyName","scriptUrl","_createTrustedTypesPolicy","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_stripAttributeNode","_neutralizeRoot","_neutralizeSubtree","snapshot","_removeAttribute","getAttributeNode","_stripDisallowedAttributes","_isPatchLinkageAttribute","lcName","lcTag","_initDocument","leadingWhitespace","dirtyPayload","createDocument","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_stripTemplateExpressions","_scrubTemplateExpressions2","_node$querySelectorAl","walker","templates","tmpl","_isDocumentFragment","_isClobbered","realTagName","hasChildNodes","_isNode","_executeHooks","_matchesNameCheck","_forkSharedAllowlist","hookList","defaultSet","setConfigSet","_handleHookDetachedNode","_sanitizeElements","_isUnsafeNode","_isBasicCustomElement","hoisted","_sanitizeDisallowedNode","parentTagName","_checkSvgNamespace","_checkMathMlNamespace","_checkHtmlNamespace","_checkValidNamespace","_isValidAttribute","nameIsPermitted","RESERVED_CUSTOM_ELEMENT_NAMES","_applyTrustedTypesToAttribute","getAttributeType","_createTrustedScriptURL","_setAttributeValue","_sanitizeAttributes","hookEvent","keepAttr","forceKeepAttr","initValue","recreatedNamedProp","_sanitizeShadowDOM2","shadowNode","shadowIterator","innerSr","_sanitizeAttachedShadowRoots","rootName","importedNode","returnNode","valueAsRecord","valueToString","stringified","stringifyValue","inPlace","_neutralizePatchLinkage","walkRoot","nodeIterator","rootWasRemoved","shadowroot","shadowrootmode","serializedHTML","outerHTML","setConfig","clearConfig","isValidAttribute","addHook","entryPoint","hookFunction","removeHook","removeHooks","removeAllHooks","nextCreditId","creditToId","Credit","showOnScreen","_html","_showOnScreen","_creditId","isIon","getIonCredit","CubicRealPolynomial","computeRealRoots","delta1","delta2","delta3","discriminant","temp1","ABar","CBar","DBar","temp0","CBarA","DBarA","CBarD","DBarD","squareRootOfDiscriminant","halfSquareRootOf3","temp3","numeratorLarge","denominatorLarge","root1","numeratorSmall","denominatorSmall","root3","root2","computeDiscriminant","Length","CullingVolume","planes","faces","scratchPlaneCenter","scratchPlaneNormal","scratchPlane","fromBoundingSphere","planeIndex","faceNormal","plane0","plane1","computeVisibility","boundingVolume","intersecting","computeVisibilityWithPlaneMask","parentPlaneMask","MASK_OUTSIDE","MASK_INSIDE","MASK_INDETERMINATE","CustomHeightmapTerrainProvider","_callback","maxTileDimensions","heightmapData","radiusScratch","normalScratch","bitangentScratch","tangentScratch","positionScratch","CylinderGeometry","topRadius","bottomRadius","slices","_topRadius","_bottomRadius","_slices","unitCylinderGeometry","cylinderGeometry","twoSlices","threeSlices","numVertices","computeNormal","computeTangent","normalScale","numIndices","textureCoordIndex","getUnitCylinder","CylinderGeometryLibrary","topZ","bottomZ","twoSlice","tbIndex","bottomOffset","bottomX","bottomY","topX","topY","CylinderOutlineGeometry","numSide","numSideLines","DefaultProxy","getURL","DeveloperError","throwInstantiationError","DistanceDisplayCondition","near","far","_near","_far","DistanceDisplayConditionGeometryInstanceAttribute","fromDistanceDisplayCondition","distanceDisplayCondition","DoubleEndedPriorityQueue","maximumLength","_comparator","_maximumLength","pushUp","onMinLevel","parentIndex","lessThanParent","grandparentIndex","pushDown","leftChildIndex","rightChildIndex","grandChildStart","grandChildCount","grandChildIndex","parentOfGrandchildIndex","resort","removedElement","minimumElement","removeMaximum","maximumElement","maximumElementIndex","getMaximum","DoublyLinkedList","DoublyLinkedListNode","oldNodeNext","EarthOrientationParameters","_dates","_samples","_dateColumn","_xPoleWanderRadiansColumn","_yPoleWanderRadiansColumn","_ut1MinusUtcSecondsColumn","_xCelestialPoleOffsetRadiansColumn","_yCelestialPoleOffsetRadiansColumn","_taiMinusUtcSecondsColumn","_columnCount","_lastIndex","_addNewLeapSeconds","addNewLeapSeconds","onDataReady","columnNames","compareLeapSecondDates","leapSecond","dateToFind","julianDate","eop","eopData","dateColumn","xPoleWanderRadiansColumn","yPoleWanderRadiansColumn","ut1MinusUtcSecondsColumn","xCelestialPoleOffsetRadiansColumn","yCelestialPoleOffsetRadiansColumn","taiMinusUtcSecondsColumn","lastTaiMinusUtc","mjd","taiMinusUtc","MODIFIED_JULIAN_DATE_DIFFERENCE","TAI","leapSeconds","leapSecondIndex","fillResultFromIndex","columnCount","xPoleWander","yPoleWander","xPoleOffset","yPoleOffset","ut1MinusUtc","linearInterp","beforeDate","afterDate","factor","startBefore","startAfter","beforeUt1MinusUtc","afterUt1MinusUtc","offsetDifference","beforeTaiMinusUtc","afterTaiMinusUtc","compute","previousIndexDate","nextIndexDate","isAfterPrevious","isAfterLastSample","isBeforeNext","EasingFunction","LINEAR_NONE","Linear","QUADRATIC_IN","Quadratic","QUADRATIC_OUT","Out","QUADRATIC_IN_OUT","InOut","CUBIC_IN","Cubic","CUBIC_OUT","CUBIC_IN_OUT","QUARTIC_IN","Quartic","QUARTIC_OUT","QUARTIC_IN_OUT","QUINTIC_IN","Quintic","QUINTIC_OUT","QUINTIC_IN_OUT","SINUSOIDAL_IN","Sinusoidal","SINUSOIDAL_OUT","SINUSOIDAL_IN_OUT","EXPONENTIAL_IN","Exponential","EXPONENTIAL_OUT","EXPONENTIAL_IN_OUT","CIRCULAR_IN","Circular","CIRCULAR_OUT","CIRCULAR_IN_OUT","ELASTIC_IN","Elastic","ELASTIC_OUT","ELASTIC_IN_OUT","BACK_IN","Back","BACK_OUT","BACK_IN_OUT","BOUNCE_IN","Bounce","BOUNCE_OUT","BOUNCE_IN_OUT","scratchCartesian4","texCoordScratch","tangentMatrixScratch","projectedCenterScratch","scratchMinTexCoord","scratchMaxTexCoord","computeTopBottomAttributes","projectedCenter","geodeticNormal","tangentMatrix","minTexCoord","maxTexCoord","stOffset","rotatedPoint","projectedPoint","raisePositionsToHeight","topIndices","numPts","prevIndex","numInterior","indicesIndex","boundingSphereCenter","topBoundingSphere","bottomBoundingSphere","positionsFlat","computeEllipsePositions","positionsCount","fromCartesianArray","EllipseGeometry","_rotation","_textureCoordinateRotationPoints","scratchCenter","scaledNormal","cep","topBottomAttributes","posLength","topBottomIndices","topBottomGeo","wallAttributes","extrudedPosition","computeWallAttributes","computeWallIndices","wallGeo","computeExtrudedEllipse","computeEllipse","EllipseGeometryLibrary","rotAxis","tempVec","unitQuat","rotMtx","pointOnEllipsoid","northVec","eastVec","aSqr","bSqr","unitPos","cosThetaSquared","sinThetaSquared","unitPosScratch","eastVecScratch","northVecScratch","addFillPositions","addEdgePositions","deltaTheta","reflectedPosition","outerPositionsLength","outerRightIndex","outerLeftIndex","interiorPosition","EllipseOutlineGeometry","maxI","_radii","_radiiSquared","_radiiToTheFourth","_oneOverRadii","_oneOverRadiiSquared","_minimumRadius","_maximumRadius","_squaredXOverSquaredZ","radii","radiiToTheFourth","minimumRadius","MOON","LUNAR_RADIUS","MARS","_default","geocentricSurfaceNormal","geodeticSurfaceNormalCartographic","EPSILON14","cartographicToCartesianNormal","cartographicToCartesianK","cartographicArrayToCartesianArray","cartographics","cartesianArrayToCartographicArray","cartesians","scaleToGeocentricSurface","positionX","positionY","positionZ","transformPositionToScaledSpace","transformPositionFromScaledSpace","getSurfaceNormalIntersectionWithZAxis","EPSILON15","squaredXOverSquaredZ","scratchEndpoint","getLocalCurvature","primeVerticalEndpoint","primeVerticalRadius","meridionalRadius","abscissas","weights","gaussLegendreQuadrature","xMean","xRange","surfaceArea","minLongitude","maxLongitude","minLatitude","maxLatitude","a2b2","sinPhi","cosPhi","cosTheta","sinTheta","computeDeltaLambda","sineAlpha","cosineSquaredAlpha","sineSigma","cosineSigma","cosineTwiceSigmaMidpoint","computeC","scratchCart1","scratchCart2","computeProperties","ellipsoidGeodesic","firstCartesian","lastCartesian","major","firstLongitude","firstLatitude","secondLongitude","secondLatitude","eff","cosineU1","sineU1","cosineU2","sineU2","lambdaDot","cosineLambda","sineLambda","EPSILON12","uSquared","cosineSquaredTwiceSigmaMidpoint","startHeading","endHeading","_distance","_startHeading","_endHeading","_uSquared","vincentyInverseFormula","cosineHeading","sineHeading","tanU","cosineU","sineU","sineSquaredAlpha","cosineAlpha","u2Over4","u4Over16","u6Over64","u8Over256","distanceRatio","_constants","setConstants","EllipsoidGeodesic","surfaceDistance","setEndPoints","interpolateUsingFraction","interpolateUsingSurfaceDistance","cosine2S","cosine4S","cosine6S","sine2S","sine4S","sine6S","sine8S","scratchNormalST","defaultRadii","EllipsoidGeometry","innerRadii","minimumClock","maximumClock","minimumCone","maximumCone","stackPartitions","slicePartitions","_innerRadii","_minimumClock","_maximumClock","_minimumCone","_maximumCone","_stackPartitions","_slicePartitions","scratchRadii","scratchInnerRadii","unitEllipsoidGeometry","ellipsoidGeometry","phis","thetas","numPhis","numThetas","extraIndices","vertexMultiplier","hasInnerSurface","isTopOpen","isBotOpen","isClockOpen","isInner","negateNormal","outerOffset","innerOffset","vertexCountHalf","ellipsoidOuter","ellipsoidInner","normalST","tangetOffset","getUnitEllipsoid","EllipsoidOutlineGeometry","subdivisions","_subdivisions","calculateM","ellipticity","e10","e12","calculateSigma","eSinL","ellipsoidRhumbLine","majorSquared","minorSquared","_ellipticitySquared","_ellipticity","_heading","sigma2","negativePiToPi","calculateHeading","heading","deltaLongitude","EPSILON8","calculateArcLength","ellipticitySquared","sin2D","cos2D","sin4D","cos4D","sin6D","cos6D","sin8D","cos8D","sin10D","calculateInverseM","EPSILON10","localRad","EllipsoidRhumbLine","fromStartHeadingDistance","findIntersectionWithLongitude","intersectionLongitude","absHeading","eSinPhi1","leftComponent","denominator","newPhi","eSinPhi","numerator","findIntersectionWithLatitude","intersectionLatitude","scratchCart4","EllipsoidTangentPlane","eastNorthUp","_xAxis","_yAxis","_plane","fromPointNormal","scratchProjectPointOntoPlaneRay","scratchProjectPointOntoPlaneCartesian3","projectPointOntoPlane","ray","intersectionPoint","rayPlane","projectPointsOntoPlane","projectPointToNearestOnPlane","projectPointsToNearestOnPlane","projectPointsOntoEllipsoidScratch","projectPointOntoEllipsoid","projectPointsOntoEllipsoid","EllipsoidTerrainProvider","EllipsoidalOccluder","cameraPosition","_cameraPosition","_cameraPositionInScaledSpace","_distanceToLimbInScaledSpaceSquared","vhMagnitudeSquared","scratchCartesian","isPointVisible","occludee","isScaledSpacePointVisible","occludeeScaledSpacePosition","scratchCameraPositionInScaledSpaceShrunk","isScaledSpacePointVisiblePossiblyUnderEllipsoid","computeHorizonCullingPoint","directionToPoint","computeHorizonCullingPointFromPositions","scratchEllipsoidShrunk","computeHorizonCullingPointPossiblyUnderEllipsoid","getPossiblyShrunkEllipsoid","computeHorizonCullingPointFromVertices","subsampleScratch","computeHorizonCullingPointFromRectangle","scratchEllipsoidShrunkRadii","ellipsoidShrunkRadii","scaledSpaceDirectionToPoint","computeScaledSpaceDirectionToPoint","resultMagnitude","candidateMagnitude","computeMagnitude","magnitudeToPoint","cameraPositionInScaledSpace","distanceToLimbInScaledSpaceSquared","vtDotVc","scaledSpaceScratch","directionScratch","scaledSpacePosition","cosBeta","directionToPointScratch","EncodedCartesian3","doubleHigh","scratchEncode","encodedP","writeElements","cartesianArray","_toRemove","_toAdd","_invokingListeners","_listenerCount","listenerMap","scopes","numberOfListeners","removedFromListeners","removedFromToAdd","EventHelper","_removalFunctions","removalFunction","removalFunctions","HOLD","EXTRAPOLATE","theNavigator","isChromeResult","chromeVersionResult","isSafariResult","safariVersionResult","isWebkitResult","webkitVersionResult","isEdgeResult","edgeVersionResult","isFirefoxResult","firefoxVersionResult","isWindowsResult","isIPadOrIOSResult","hasPointerEvents","imageRenderingValueResult","supportsImageRenderingPixelatedResult","extractVersion","versionString","isChrome","isEdge","fields","isWebkit","isNightly","supportsImageRenderingPixelated","supportsWebP","_promise","typedArrayTypes","FeatureDetection","chromeVersion","safariVersion","webkitVersion","edgeVersion","firefoxVersion","isWindows","appVersion","isIPadOrIOS","hardwareConcurrency","supportsPointerEvents","pointerEnabled","imageRenderingValue","supportsWebAssembly","supportsBasis","supportsFullscreen","Worker","webgl2","Frozen","EMPTY_ARRAY","FrustumGeometry","drawNearPlane","_drawNearPlane","frustumType","frustumPackedLength","_frustumType","_frustum","_orientation","scratchPackPerspective","scratchPackOrthographic","scratchPackQuaternion","scratchPackorigin","frustumResult","scratchRotationMatrix","scratchViewMatrix","scratchInverseMatrix","scratchXDirection","scratchYDirection","scratchZDirection","scratchNegativeX","scratchNegativeY","scratchNegativeZ","frustumSplits","frustumCornersNDC","scratchFrustumCorners","_computeNearFarPlanes","xDirection","yDirection","zDirection","computeView","inverseView","inverseViewProjection","projectionMatrix","viewProjection","fac","offCenterFrustum","frustumGeometry","numberOfPlanes","negativeX","negativeY","negativeZ","indexOffset","FrustumOutlineGeometry","_supportsFullscreen","_names","requestFullscreen","exitFullscreen","fullscreenEnabled","fullscreenElement","fullscreenchange","fullscreenerror","Fullscreen","changeEventName","errorEventName","fullscreen","prefixes","vrDevice","vrDisplay","SEARCH","AUTOCOMPLETE","GeocoderService","getCreditsFromResult","geocoderResult","attributions","GeographicProjection","_semimajorAxis","_oneOverSemimajorAxis","semimajorAxis","unproject","oneOverEarthSemimajorAxis","GeographicTilingScheme","_projection","_numberOfLevelZeroTilesX","_numberOfLevelZeroTilesY","rectangleToNativeRectangle","toDegrees","tileXYToNativeRectangle","rectangleRadians","xTiles","xTileWidth","yTileHeight","xTileCoordinate","yTileCoordinate","Geometry","geometryType","boundingSphereCV","computeNumberOfVertices","numberOfVertices","rectangleCenterScratch","enuCenterScratch","fixedFrameToEnuScratch","boundingRectanglePointsCartographicScratch","boundingRectanglePointsEnuScratch","points2DScratch","pointEnuScratch","enuRotationScratch","enuRotationMatrixScratch","rotation2DScratch","rectangleCenter","enuCenter","enuToFixedFrame","fixedFrameToEnu","boundingPointsEnu","boundingPointsCarto","positionsLength","enuMinX","enuMinY","enuMaxX","enuMaxY","toDesiredInComputed","points2D","boundingEnuMin","boundingPointsWidth","boundingPointsHeight","point2D","minXYCorner","maxYCorner","maxXCorner","GeometryFactory","geometryFactory","modelMatrix","pickPrimitive","westHemisphereGeometry","eastHemisphereGeometry","ALL","GeometryPipeline","addTriangle","copyAttributesDescriptions","newAttributes","copyVertex","destinationAttributes","sourceAttributes","toWireframe","trianglesToLines","TRIANGLE_STRIP","triangleStripToLines","TRIANGLE_FAN","triangleFanToLines","createLineSegmentsForVectors","vectors","newBoundingSphere","createAttributeLocations","semantics","semantic","reorderForPreVertexCache","indexCrossReferenceOldToNew","indicesIn","indicesOut","tempIndex","intoIndicesIn","intoIndicesOut","nextIndex","elementsIn","intoElementsIn","numComponents","elementsOut","reorderForPostVertexCache","cacheCapacity","maximumIndex","tipsify","cacheSize","fitToUnsignedShortIndices","POINTS","SIXTY_FOUR_KILOBYTES","oldToNewIndex","currentIndex","originalIndices","numberOfIndices","indicesPerPrimitive","scratchProjectTo2DCartesian3","scratchProjectTo2DCartographic","attributeName3D","attributeName2D","values3D","projectedValues","lonLat","projectedLonLat","encodedResult","encodeAttribute","attributeHighName","attributeLowName","highValues","lowValues","transformPoint","transformVector","inverseTranspose","normalMatrix","transformToWorldCoordinates","getMatrix3","tempScratch","combineGeometries","haveIndices","attributesInAllGeometries","attributes0","numberOfComponents","inAllGeometries","otherAttribute","findAttributesInAllGeometries","sourceValues","sourceValuesLength","destIndices","destOffset","sourceIndices","sourceIndicesLen","tempRadius","instanceGeometry","instanceSplitGeometry","normalsPerVertex","normalsPerTriangle","normalIndices","currentCount","i03","i13","i23","vertexNormalData","normalValues","tScratch","computeTangentAndBitangent","tan1","i02","i12","i22","sdirx","sdiry","sdirz","tangentValues","bitangentValues","toEncode1","toEncode2","toEncode3","encodeResult2","offsetPointFromXZPlane","isBehind","compressVertices","extrudeAttribute","extrudeDirections","compressedDirections","compressedAttributes","normalAttribute","stAttribute","hasNormal","hasSt","tangentAttribute","bitangentAttribute","hasTangent","hasBitangent","compressedLength","numCompressedComponents","getXZIntersectionOffsetPoints","splitTriangleResult","splitTriangle","p0y","p1y","p2y","offsetTriangleFromXZPlane","p0Behind","p1Behind","p2Behind","numBehind","updateGeometryAfterSplit","computeBoundingSphere","copyGeometryForSplit","copiedAttributes","updateInstanceAfterSplit","westGeometry","eastGeometry","generateBarycentricInterpolateFunction","CartesianType","v0Scratch","v1Scratch","v2Scratch","currentValues","insertedIndex","interpolateAndPackCartesian4","interpolateAndPackCartesian3","interpolateAndPackCartesian2","p0Scratch","p1Scratch","p2Scratch","barycentricScratch","computeTriangleAttributes","currentAttributes","customAttributeNames","customAttributesLength","allAttributes","interpolateAndPackBoolean","genericInterpolate","sourceAttribute","currentAttribute","insertSplitPoint","currentIndices","currentIndexMap","insertIndex","NAMED_ATTRIBUTES","splitLongitudeTriangles","westGeometryIndexMap","eastGeometryIndexMap","resultPositions","resultIndex","xzPlane","offsetScratch","offsetPointScratch","computeLineAttributes","splitLongitudeLines","p0Attributes","p0Indices","p0IndexMap","p1Attributes","p1Indices","p1IndexMap","lineSegmentPlane","EPSILON9","offsetPoint","cartesian2Scratch0","cartesian2Scratch1","cartesian3Scratch0","cartesian3Scratch2","cartesian3Scratch3","cartesian3Scratch4","cartesian3Scratch5","cartesian3Scratch6","cartesian4Scratch0","updateAdjacencyAfterSplit","prevPositions","nextPositions","offsetScalar","coplanarOffset","splitLongitude","ORIGIN_ZX_PLANE","POLYLINES","expandAndWidths","expandAndWidth","intersectionFound","p2Attributes","p2Indices","ew0","splitLongitudePolyline","indexTriangleFan","indexTriangleStrip","indexTriangles","LINE_STRIP","indexLineStrip","LINE_LOOP","indexLineLoop","indexLines","indexPrimitive","defaultKey","ui8","stringToBuffer","GoogleEarthEnterpriseMetadata","resourceOrUrl","imageryPresent","protoImagery","terrainPresent","negativeAltitudeExponentBias","negativeAltitudeThreshold","providers","_quadPacketVersion","_tileInfo","_subtreePromises","dbrootParserPromise","cesiumGoogleEarthDbRootParser","dbrootParser","encryptedDbRootProto","EncryptedDbRootProto","byteArray","encryptionData","dbrootData","dbRootCompressed","taskProcessor","dbRoot","DbRootProto","endSnippet","compressedNegativeAltitudeThreshold","databaseVersion","quadtreeVersion","providerInfo","copyrightString","providerId","requestDbRoot","getQuadTreePacket","getMetadataResource","tileXYToQuadKey","quadkey","quadKeyToTileXY","quadKey","getTileInformationFromQuadKey","hasSubtree","hasChild","populateSubtree","subtreeRequest","subtreePromises","priorityFunction","cnodeVersion","topLevelKeyLength","_bits","keysLength","setParent","getTileInformation","GoogleEarthEnterpriseTerrainData","negativeElevationThreshold","_negativeAltitudeExponentBias","_negativeElevationThreshold","googleChildTileMask","_createdByUpsampling","createdByUpsampling","_bufferType","nativeRectangleScratch","rectangleScratch","thisLevelMaxError","nativeRectangle","relativeToCenter","includeWebMercatorT","boundingSphere3D","occludeePointInScaledSpace","numberOfAttributes","texCoordScratch0","texCoordScratch1","texCoordScratch2","barycentricCoordinateScratch","uStart","vStart","sizeOfUint32","sizeOfDouble","xSize","ySize","xScale","yScale","sizeOfInt32","sizeOfFloat","sizeOfUint16","childRectangle","indicesTypedArray","julianDateScratch","TerrainCache","_terrainCache","_lastTidy","GoogleEarthEnterpriseTerrainProvider","_terrainPromises","_terrainRequests","tidy","terrainCache","_metadata","fromMetadata","computeChildMask","childMask","getChildBitmask","terrainState","hasTerrain","terrainProvider","ancestorHasTerrain","parentInfo","terrainVersion","terrainPromises","terrainRequests","sharedPromise","sharedRequest","buildTerrainResource","terrain","terrainTiles","requestedInfo","childKey","childrenBitmasks","GoogleEarthEnterpriseTileInformation","imageryVersion","imageryProvider","hasImagery","CREDIT_HTML","GoogleGeocoderService","error_message","southWest","northEast","formatted_address","lng","GoogleMaps","mapTilesApiEndpoint","defaultStreetViewStaticApiKey","streetViewStaticApiEndpoint","getDefaultCredit","isLeapSecond","maximumSecond","validateDate","PROJECTIONS","PROJECTION_COUNT","MITER_BREAK_SMALL","MITER_BREAK_LARGE","GroundPolylineGeometry","arcType","loop","_projectionIndex","_scene3DOnly","setProjectionAndEllipsoid","groundPolylineGeometry","mapProjection","projectionIndex","cart3Scratch1","cart3Scratch2","cart3Scratch3","computeRightNormal","startBottom","getPosition","startTop","endBottom","interpolatedCartographicScratch","interpolatedBottomScratch","interpolatedTopScratch","interpolatedNormalScratch","interpolateSegment","normalsArray","bottomPositionsArray","topPositionsArray","cartographicsArray","ellipsoidLine","interpolatedNormal","interpointDistance","distanceFromStart","pointsToAdd","packIndex","interpolatedCartographic","interpolatedBottom","interpolatedTop","heightlessCartographicScratch","tangentDirection","scene3DOnly","toPreviousScratch","toNextScratch","forwardScratch","vertexUpScratch","computeVertexMiterNormal","previousBottom","vertexBottom","vertexTop","nextBottom","toPrevious","toNext","EPSILON5","XZ_PLANE","previousBottomScratch","vertexBottomScratch","vertexTopScratch","nextBottomScratch","vertexNormalScratch","intersectionScratch","cartographicScratch0","cartographicScratch1","cartographicIntersectionScratch","compute2dAttributes","rhumbLine","intersectionCartographic","splitPositions","cartographicsLength","vertexNormal","startCartographic","nextCartographic","vertexCartographic","endCartographic","preEndCartographic","postEndCartographic","segmentCount","arraySizeVec4","positionsArray","startHiAndForwardOffsetX","startLoAndForwardOffsetY","startNormalAndForwardOffsetZ","endNormalAndTextureCoordinateNormalizationX","rightNormalAndTextureCoordinateNormalizationY","startHiLo2D","offsetAndRight2D","startEndNormals2D","texcoordNormalization2D","length2D","startCartographicScratch","endCartographicScratch","segmentStartCartesian","segmentStartTopScratch","segmentEndCartesian","segmentEndTopScratch","length3D","cartographicsIndex","vec2sWriteIndex","vec3sWriteIndex","vec4sWriteIndex","miterBroken","segmentEndBottomScratch","endTop","endGeometryNormal","segmentEndNormalScratch","breakMiter","segmentStartBottomScratch","lengthSoFar3D","lengthSoFar2D","sumHeights","start2D","end2D","startGeometryNormal2D","endGeometryNormal2D","startGeometryNormal","segmentStartNormalScratch","nudgeResult","nudgeCartographic","segmentStart2DScratch","segmentEnd2DScratch","direction2D","forwardOffset2DScratch","segmentStartNormal2DScratch","segmentEndNormal2DScratch","projectNormal","segmentLength3D","encodedStart","encodeScratch","forwardOffset","rightScratch","startUp","startUpScratch","startPlaneNormal","startPlaneNormalScratch","endUp","endUpScratch","endPlaneNormal","endPlaneNormalScratch","texcoordNormalization3DX","texcoordNormalization3DY","encodedStart2D","forwardOffset2D","right2D","segmentLength2D","texcoordNormalization2DX","texcoordNormalization2DY","encodeScratch2D","right2DScratch","vec4Index","vec2Index","wIndex","rightPlaneSide","topBottomSide","texcoordNormalization","adjustHeightStartBottom","adjustHeightStartBottomScratch","adjustHeightEndBottom","adjustHeightEndBottomScratch","adjustHeightStartTop","adjustHeightStartTopScratch","adjustHeightEndTop","adjustHeightEndTopScratch","getHeightsRectangle","fromCartographicArray","getHeightCartographics","getHeightRectangleScratch","minMaxHeights","adjustHeights","normalNudge","normalNudgeScratch","nudgeXZ","REFERENCE_INDICES_LENGTH","REFERENCE_INDICES","scratchBoundingSpheres","getVec4GeometryAttribute","generateGeometryAttributes","lineDirectionScratch","matrix3Scratch","lineDirection","vertexUp","quaternion","endPosCartographicScratch","normalStartpointScratch","normalEndpointScratch","projectedPosition","normalEndpoint","flipNormal","normalEndpointCartographic","normalEndpointProjected","adjustHeightNormalScratch","adjustHeightOffsetScratch","adjustHeightBottom","adjustHeightTop","adjustHeightNormal","distanceForBottom","adjustHeightOffset","distanceForTop","nudgeDirectionScratch","startToXZdistance","getPointDistance","endToXZdistance","absStartLon","absEndLon","EPSILON11","endSign","startSign","_projectNormal","HeadingPitchRange","pitch","hpr","HeadingPitchRoll","roll","denominatorRoll","numeratorRoll","denominatorHeading","numeratorHeading","asinClamped","headingPitchRoll","Heap","originalLength","reserve","heapify","candidate","inserting","HeightmapTerrainData","defaultStructure","DEFAULT_STRUCTURE","_structure","sourceRectangle","fromWest","fromSouth","westInteger","eastInteger","southInteger","northInteger","triangleInterpolateHeight","southwestHeight","southeastHeight","northwestHeight","northeastHeight","setHeight","heightmap","isGeographic","indicesAndEdges","getRegularGridAndSkirtIndicesAndEdgeIndices","gridWidth","gridHeight","getRegularGridIndicesAndEdgeIndices","computeVertices","isMeshCreated","isLERCEncoding","heightSample","sourceHeights","meshData","destinationRectangle","HeightmapTessellator","cartesian3Scratch","matrix4Scratch","minimumScratch","maximumScratch","piOverTwo","hasSkirts","oneOverGlobeSemimajorAxis","geographicWest","geographicSouth","geographicEast","geographicNorth","hasRelativeToCenter","includeGeodeticSurfaceNormals","rectangleWidth","computeWidth","rectangleHeight","computeHeight","granularityX","granularityY","radiiSquaredX","radiiSquaredY","radiiSquaredZ","fromENU","toENU","southMercatorY","hMin","gridVertexCount","uvs","webMercatorTs","geodeticSurfaceNormals","startRow","startCol","skirtOffsetPercentage","rowIndex","isNorthEdge","isSouthEdge","colIndex","terrainOffset","isWestEdge","isEastEdge","oneOverGamma","rSurfaceX","rSurfaceY","rSurfaceZ","aaBox","bufferIndex","factorial","calculateCoefficientTerm","xTable","derivOrder","termOrder","reservedIndices","HermitePolynomialApproximation","inputOrder","yTable","yStride","coefficients","zIndicesLength","highestNonZeroCoef","nonZeroCoefficients","tempTerm","coeff","arrayScratch","outputOrder","zIndiceslength","highestNonZero","dimOne","coefIndex","dimTwo","dimTwoMinusOne","fillCoefficientList","loopStop","coef","scratchLower","scratchDiagonal","scratchUpper","scratchRight","HermiteSpline","inTangents","outTangents","_pointType","_inTangents","_outTangents","createC1","createNaturalCubic","solve","generateNatural","createClampedCubic","PointType","generateClamped","scratchTemp","timesDelta","HilbertOrder","encode2D","decode2D","ITwinPlatform","ExportStatus","NotStarted","InProgress","Complete","Invalid","ExportType","IMODEL","CESIUM","RealityDataType","Cesium3DTiles","PNTS","RealityMesh3DTiles","Terrain3DTiles","KML","GeoJSON","Unstructured","defaultAccessToken","defaultShareKey","_getAuthorizationHeader","apiEndpoint","getExports","iModelId","changesetId","Authorization","Prefer","exportType","$top","client","CESIUM_VERSION","appendQueryParameters","clientVersion","getRealityDataMetadata","iTwinId","realityDataId","realityData","getRealityDataURL","rootDocument","containerUrl","_links","tilesetUrl","Iau2000Orientation","c10","c11","c12","c13","dateTT","ComputeMoon","totalDays","DAYS_PER_JULIAN_CENTURY","E10","E11","E12","E13","sinE1","sinE2","sinE3","sinE4","sinE5","sinE6","sinE7","sinE8","sinE9","sinE10","sinE11","sinE12","sinE13","cosE1","cosE2","cosE3","cosE4","cosE5","cosE6","cosE7","cosE8","cosE9","cosE10","cosE11","cosE12","cosE13","rightAscension","declination","rotationRate","Iau2006XysData","_xysFileUrlTemplate","xysFileUrlTemplate","_interpolationOrder","interpolationOrder","_sampleZeroJulianEphemerisDate","sampleZeroJulianEphemerisDate","_sampleZeroDateTT","_stepSizeDays","stepSizeDays","_samplesPerXysFile","samplesPerXysFile","_totalSamples","totalSamples","_chunkDownloadsInProgress","denom","_denominators","_xTable","stepN","_work","_coef","getDaysSinceEpoch","dayTT","secondTT","secondsOfDay","daysDifference","requestXysChunk","xysData","chunkIndex","chunkUrl","newSamples","preload","startDayTT","startSecondTT","stopDayTT","stopSecondTT","startDaysSinceEpoch","stopDaysSinceEpoch","stopIndex","startChunk","stopChunk","computeXysRadians","daysSinceEpoch","firstIndex","isDataMissing","sampleIndex","IauOrientationAxes","computeFunction","_computeFunction","xAxisScratch","yAxisScratch","zAxisScratch","rotMtxScratch","quatScratch","alphaDeltaW","precMtx","cosDec","computeRotationMatrix","rot","zeroToTwoPi","quat","IndexDatatype","indexDatatype","sizeInBytes","indicesLengthOrArray","sourceArray","InterpolationAlgorithm","getRequiredDataPoints","interpolateOrderZero","STEP","LINEAR","CUBICSPLINE","IntersectionTests","scratchEdge0","scratchEdge1","scratchPVec","scratchTVec","scratchQVec","rayTriangleParametric","cullBackFaces","edge0","edge1","tvec","invDet","rayTriangle","scratchLineSegmentTriangleRay","lineSegmentTriangle","raySphereRoots","root0","raySphere","disc","solveQuadratic","scratchLineSegmentRay","lineSegmentSphere","maxT","scratchQ","scratchW","rayEllipsoid","inverseRadii","qw2","scratchRayIntervalX","scratchRayIntervalY","scratchRayIntervalZ","rayIntervalAlongAABBAxis","addWithCancellationCheck","rayAxisAlignedBoundingBox","quadraticVectorExpression","xSquared","wSquared","COLUMN1ROW1","COLUMN2ROW2","COLUMN1ROW0","COLUMN0ROW1","COLUMN0ROW0","COLUMN2ROW1","COLUMN1ROW2","COLUMN2ROW0","COLUMN0ROW2","cosines","solutions","cosine0","sine0","cosine1","sine1","r0Squared","r1Squared","r0r1","cosineSquared","sineSquared","firstAxisScratch","secondAxisScratch","thirdAxisScratch","referenceScratch","bCart","bScratch","btScratch","diScratch","dScratch","cScratch","tempMatrix","aScratch","sScratch","closestScratch","surfPointScratch","grazingAltitudeLocation","firstAxis","secondAxis","thirdAxis","B_T","D_I","fromScale","altitude","maximumValue","dotProduct","surfacePoint","lineSegmentPlaneDifference","endPoint0","endPoint1","nDotDiff","nDotP0","trianglePlaneIntersection","planeNormal","planeD","Intersections2D","keepAbove","u0Behind","u1Behind","u2Behind","u01Ratio","u02Ratio","u12Ratio","u10Ratio","u20Ratio","u21Ratio","x1mx3","x3mx2","y2my3","y1my3","inverseDeterminant","ymy3","xmx3","x00","y00","x01","y01","x10","y10","x11","y11","denominator1","ua1","ub1","defaultTokenCredit","Ion","defaultServer","getDefaultTokenCredit","providedKey","defaultTokenMessage","BING","validateIonGeocodeProviderType","geocodeProviderType","providerToParameterMap","IonGeocoderService","accessToken","server","frameState","creditDisplay","addStaticCredit","searchEndpoint","access_token","_accessToken","_server","_pelias","parameter","geocoder","setQueryParameters","geocodeType","IonResource","endpoint","endpointResource","isExternal","retryAttempts","retryCallback","_ionEndpointDomain","_ionEndpointResource","_ionRoot","_pendingPromise","_isExternal","refreshCallback","addClientHeaders","ionRoot","imageDefined","newEndpoint","_createEndpointResource","getCreditsFromEndpoint","fetchImage","userOptions","preferBlob","preferImageBitmap","_makeRequest","resourceOptions","MINIMUM_VALUE","fromIso8601","MAXIMUM_VALUE","Iso8601","MAXIMUM_INTERVAL","gregorianDateScratch","JulianDate","binarySearchScratchLeapSecond","convertUtcToTai","convertTaiToUtc","setComponents","wholeDays","extraDays","SECONDS_PER_DAY","computeJulianDateComponents","SECONDS_PER_HOUR","SECONDS_PER_MINUTE","SECONDS_PER_MILLISECOND","matchCalendarYear","matchCalendarMonth","matchOrdinalDate","matchWeekDate","matchCalendarDate","matchHours","matchHoursMinutes","matchHoursMinutesSeconds","iso8601ErrorMessage","julianDayNumber","timeStandard","fromGregorianDate","components","fromDate","iso8601String","tokens","inLeapYear","dashCount","offsetHours","offsetMinutes","toGregorianDateScratch","toGregorianDate","thisUtc","remainingSeconds","gDate","toIso8601","millisecondStr","millisecondHundreds","julianDayNumberDifference","computeTaiMinusUtc","addMinutes","newSecondsOfDay","addHours","KTX2Transcoder","_transcodeTaskProcessor","_readyPromise","transcode","ktx2Buffer","supportedTargetFormats","readyPromise","initWebAssemblyModule","wasmBinaryFile","makeReadyPromise","levelsLength","faceKeys","datatype","levelBuffer","LagrangePolynomialApproximation","diffX","LinearApproximation","LinearSpline","ManagedArray","peek","MapProjection","CesiumMath","rangeMaximum","rangeMinimum","ONE_OVER_PI","PI_OVER_THREE","PI_OVER_FOUR","PI_OVER_SIX","THREE_PI_OVER_TWO","ONE_OVER_TWO_PI","DEGREES_PER_RADIAN","RADIANS_PER_ARCSECOND","radians","convertLongitudeRange","twoPi","simplified","clampToLatitudeRange","absDiff","factorials","incrementWrap","minimumValue","isPowerOfTwo","nextPowerOfTwo","previousPowerOfTwo","randomNumberGenerator","setRandomNumberSeed","randomBetween","chordLength","logBase","LOG2E","fog","distanceToCamera","fastApproximateAtan","fastApproximateAtan2","opposite","adjacent","oppositeOverAdjacent","Matrix2","column0Row0","column1Row0","column0Row1","column1Row1","fromColumnMajorArray","fromRowMajorArray","fromUniformScale","cosAngle","sinAngle","getElementIndex","setColumn","setRow","scaleScratch1","existingScale","scaleRatioX","scaleRatioY","scaleScratch2","setUniformScale","scratchColumn","scaleScratch3","scaleScratch4","setRotation","scaleScratch5","getRotation","multiplyByScale","multiplyByUniformScale","Matrix3","column2Row0","column2Row1","column0Row2","column1Row2","column2Row2","m02","m12","m20","m21","m22","fromHeadingPitchRoll","cosPsi","sinPsi","fromCrossProduct","fromRotationX","fromRotationY","fromRotationZ","scaleRatioZ","rowVal","colVal","offDiagonalFrobeniusNorm","shurDecomposition","maxDiagonal","tau","jMatrix","jMatrixTranspose","computeEigenDecomposition","EPSILON20","unitaryMatrix","unitary","diagMatrix","computeFrobeniusNorm","m31","m32","m13","m23","m33","scratchTransposeMatrix","Matrix4","column3Row0","column3Row1","column3Row2","column0Row3","column1Row3","column2Row3","column3Row3","translation","fromTranslationQuaternionRotationScale","scaleZ","fromTranslationRotationScale","translationRotationScale","fromCameraF","fromCameraR","fromCameraU","fromCamera","computePerspectiveFieldOfView","fovY","computeOrthographicOffCenter","computePerspectiveOffCenter","computeInfinitePerspectiveOffCenter","computeViewportTransformation","nearDepthRange","farDepthRange","halfHeight","halfDepth","setTranslation","left0","left1","left2","left3","left4","left5","left6","left7","left8","left9","left10","left11","left12","left13","left14","left15","right0","right1","right2","right3","right4","right5","right6","right7","right8","right9","right10","right11","right12","right13","right14","right15","multiplyTransformation","multiplyByMatrix3","multiplyByTranslation","matrix1","matrix2","matrix3","matrix6","matrix7","matrix11","scratchInverseRotation","scratchMatrix3Zero","scratchBottomRow","scratchExpectedBottomRow","src0","src1","src2","src3","src4","src5","src6","src7","src8","src9","src10","src11","src12","src13","src14","src15","tmp0","tmp1","tmp2","tmp3","tmp4","tmp5","tmp6","tmp7","tmp8","tmp9","tmp10","tmp11","dst0","dst1","dst2","dst3","dst4","dst5","dst6","dst7","dst8","dst9","dst10","dst11","dst12","dst13","dst14","dst15","EPSILON21","matrix0","matrix4","matrix5","matrix8","matrix9","matrix10","COLUMN0ROW3","COLUMN1ROW3","COLUMN2ROW3","COLUMN3ROW0","COLUMN3ROW1","COLUMN3ROW2","COLUMN3ROW3","MorphWeightSpline","_weights","_count","MortonOrder","insertOneSpacing","insertTwoSpacing","removeOneSpacing","removeTwoSpacing","mortonIndex","encode3D","decode3D","NearFarScalar","nearValue","farValue","nearFarScalar","Occluder","occluderBoundingSphere","_occluderPosition","_occluderRadius","_horizonDistance","_horizonPlaneNormal","_horizonPlanePosition","cameraToOccluderVec","invCameraToOccluderDistance","occluderRadiusSqrd","horizonDistance","horizonPlaneNormal","horizonPlanePosition","nearPlaneDistance","tempVecScratch","occludeePositionScratch","occludeePosition","occludeeRadius","tempVecMagnitudeSquared","occluderRadiusSquared","occludeeRadiusSquared","occludeeBS","occluderToOccludeeDistSqrd","cameraToOccludeeDistSqrd","PARTIAL","occludeePointScratch","computeOccludeePoint","occludeePos","occluderPosition","occluderRadius","occluderPlaneNormal","occluderPlaneD","aRotationVector","_anyRotationVector","tempDot","_horizonToPlaneNormalDotProduct","computeOccludeePointFromRectangleScratch","computeOccludeePointFromRectangle","ellipsoidCenter","tempVec0Scratch","tempVec0","majorAxis","tempVec1","posDirectionScratch","_rotationVector","anyRotationVector","positionDirection","crossProduct","EPSILON13","posScratch1","occluerPosScratch","posScratch2","horizonPlanePosScratch","occluderBS","positionToOccluder","occluderToPositionDistanceSquared","horizonDistanceSquared","horizonPlaneDistance","horizonCrossDistance","horizonCrossDirection","dot0","dot1","OffsetGeometryInstanceAttribute","OpenCageGeocoderService","apiKey","_url","_params","resultObject","formatted","OrientedBoundingBox","scratchCartesian5","scratchCartesian6","scratchCovarianceResult","scratchEigenResult","meanPoint","invLength","exx","exy","exz","eyy","eyz","ezz","covarianceMatrix","eigenDecomposition","scratchOffset","scratchScale","fromPlaneExtents","planeOrigin","planeXAxis","planeYAxis","planeZAxis","scratchRectangleCenterCartographic","scratchRectangleCenter","scratchPerimeterCartographicNC","scratchPerimeterCartographicNW","scratchPerimeterCartographicCW","scratchPerimeterCartographicSW","scratchPerimeterCartographicSC","scratchPerimeterCartesianNC","scratchPerimeterCartesianNW","scratchPerimeterCartesianCW","scratchPerimeterCartesianSW","scratchPerimeterCartesianSC","scratchPerimeterProjectedNC","scratchPerimeterProjectedNW","scratchPerimeterProjectedCW","scratchPerimeterProjectedSW","scratchPerimeterProjectedSC","scratchPlaneOrigin","scratchPlaneXAxis","scratchHorizonCartesian","scratchHorizonProjected","scratchMaxY","scratchMinY","scratchZ","minZ","maxZ","tangentPointCartographic","tangentPoint","tangentPlane","lonCenter","latCenter","perimeterCartographicNC","perimeterCartographicNW","perimeterCartographicCW","perimeterCartographicSW","perimeterCartographicSC","perimeterCartesianNC","perimeterCartesianNW","perimeterCartesianCW","perimeterCartesianSW","perimeterCartesianSC","perimeterProjectedNC","perimeterProjectedNW","perimeterProjectedCW","perimeterProjectedSW","perimeterProjectedSC","fullyAboveEquator","fullyBelowEquator","latitudeNearestToEquator","centerLongitude","horizonCartesian","farZ","normalX","normalY","normalZ","radEffective","scratchCartesianU","scratchCartesianV","scratchCartesianW","scratchValidAxis2","scratchValidAxis3","scratchPPrime","uHalf","vHalf","wHalf","uValid","vValid","wValid","numberOfDegenerateAxes","validAxis1","validAxis2","validAxis3","degenerateAxis","crossVector","EPSILON3","pPrime","scratchCorner","scratchToCenter","minDist","maxDist","computeCorners","scratchRotationScale","computeTransformation","rotationScale","OrthographicFrustum","_offCenterFrustum","computeCullingVolume","getPixelDimensions","pixelRatio","OrthographicOffCenterFrustum","_left","_right","_top","_bottom","_cullingVolume","_orthographicMatrix","getPlanesRight","getPlanesNearCenter","getPlanesPoint","negateScratch","nearCenter","pixelWidth","pixelHeight","Packable","PackableForInterpolation","packedInterpolationLength","convertPackedArrayForInterpolation","unpackInterpolationResult","PeliasGeocoderService","features","bboxDegrees","PerspectiveFrustum","fov","_fov","_fovy","_sseDenominator","_xOffset","_yOffset","infiniteProjectionMatrix","fovy","sseDenominator","PerspectiveOffCenterFrustum","_perspectiveMatrix","_infinitePerspective","getPlanesFarCenter","getPlanesNormal","farCenter","inverseNear","tanTheta","PinBuilder","createPin","fromMakiIconId","fromText","colorScratch","drawIcon","context2D","imageSize","sizeX","sizeY","globalCompositeOperation","stringifyScratch","strokeStyle","lineWidth","beginPath","moveTo","lineTo","bezierCurveTo","closePath","drawPin","PixelFormat","DEPTH_COMPONENT","DEPTH_STENCIL","ALPHA","RGB","RGBA","RED_INTEGER","RG_INTEGER","RGB_INTEGER","RGBA_INTEGER","LUMINANCE","LUMINANCE_ALPHA","RGB_DXT1","COMPRESSED_RGB_S3TC_DXT1_EXT","RGBA_DXT1","COMPRESSED_RGBA_S3TC_DXT1_EXT","RGBA_DXT3","COMPRESSED_RGBA_S3TC_DXT3_EXT","RGBA_DXT5","COMPRESSED_RGBA_S3TC_DXT5_EXT","RGB_PVRTC_4BPPV1","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","RGB_PVRTC_2BPPV1","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","RGBA_PVRTC_4BPPV1","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","RGBA_PVRTC_2BPPV1","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","RGBA_ASTC","COMPRESSED_RGBA_ASTC_4x4_WEBGL","RGB_ETC1","COMPRESSED_RGB_ETC1_WEBGL","RGB8_ETC2","COMPRESSED_RGB8_ETC2","RGBA8_ETC2_EAC","COMPRESSED_RGBA8_ETC2_EAC","RGBA_BC7","COMPRESSED_RGBA_BPTC_UNORM","pixelFormat","componentsLength","isPacked","textureSizeInBytes","getTypedArrayConstructor","flipped","textureWidth","flippedRow","DEPTH24_STENCIL8","DEPTH_COMPONENT16","DEPTH_COMPONENT24","RGBA32F","RGB32F","RG32F","R32F","HALF_FLOAT","RGBA16F","RGB16F","RG16F","R16F","RGBA8","RGB8","RG8","RGBA32I","RGB32I","RG32I","R32I","RGBA32UI","RGB32UI","RG32UI","R32UI","Plane","pointDistance","scratchInverseTranspose","scratchPlaneCartesian4","scratchTransformNormal","planeAsCartesian4","transformedNormal","ORIGIN_XY_PLANE","ORIGIN_YZ_PLANE","PlaneGeometry","planeGeometry","PlaneOutlineGeometry","scratchCarto1","scratchCarto2","adjustPosHeightsForNormal","p1Carto","p2Carto","scratchBoundingRectangle","scratchPerPosNormal","scratchPerPosTangent","scratchPerPosBitangent","appendTextureCoordinatesOrigin","appendTextureCoordinatesCartesian2","appendTextureCoordinatesCartesian3","appendTextureCoordinatesQuaternion","appendTextureCoordinatesMatrix3","computeAttributes","flatTexcoords","wall","rotationAxis","projectTo2d","perPositionHeight","recomputeNormal","tangentRotationMatrix","bottomOffset2","attrIndex1","attrIndex2","createGeometryFromPositionsExtrudedPositions","createGeometryFromPositionsExtruded","closeTop","closeBottom","walls","topGeo","edgePoints","topBottomPositions","ilength","texcoords","topAndBottom","windingOrder","computeWindingOrder2D","CLOCKWISE","computeWallGeometry","COUNTER_CLOCKWISE","PolygonGeometry","perPositionHeightExtrude","_closeTop","_closeBottom","_perPositionHeight","_perPositionHeightExtrude","_arcType","dummyOptions","scratchCartesian0","scratchPolarClosest","expandRectangle","lastPolar","lonAdjusted","westOverIdl","eastOverIdl","getLatitude","segmentLatitude","projected","closestPolar","adjustedLatitude","northAngle","southAngle","scratchPolar","scratchPolarPrevious","computeRectangleFromPositions","lastPolarPosition","polarPosition","scratchPolarForPlane","getTangentPlane","scratchCartographicCyllindrical","createProjectPositionTo2d","createProjectTo2d","splitPolygonsOnEquator","createSplitPolygons","splitGeometry","scaleToGeodeticHeightExtruded","PolygonGeometryLibrary","CartesianX","holesLength","distance2DScratch","getPointAtDistance2D","getPointAtDistance","subdivideLineCount","minDistance","countDivide","scratchCartographic0","scratchCartographic1","scratchCartographic2","scratchRhumbLine","subdivideRhumbLineCount","subdivideTexcoordLine","distanceBetweenCoords","subdivideLine","distanceBetweenVertices","subdivideTexcoordRhumbLine","subdivideRhumbLine","rhumb","scaleToGeodeticHeightN1","scaleToGeodeticHeightN2","scaleToGeodeticHeightP1","scaleToGeodeticHeightP2","scaleToEllipsoidSurface","enqueue","outerNode","dequeue","numChildren","holePositions","numGrandchildren","scratchRhumbIntersection","computeEquatorIntersection","computeEquatorIntersectionRhumb","computeEdgesOnPlane","edgesOnPlane","getLongitude","wirePolygon","polygonIndex","toDelete","abovePlane","getMatchingEdge","polygonsToWire","edgeIndex","hasBeenVisited","previousEdge","nextEdge","outerRings","currentPolygon","keepDuplicates","projectPointsTo2D","splitPolygons","holeIndices","originalWindingOrder","polygonHoles","holePositions2D","computeBoundingRectangleCartesian2","computeBoundingRectangleCartesian3","computeBoundingRectangleQuaternion","computeBoundingRectangleMatrix3","hasTexcoords","flattenedPositions","geometryOptions","computeSubdivision","computeRhumbLineSubdivision","computeWallTexcoordsSubdivided","computeWallIndicesSubdivided","edgePositions","topEdgeLength","edgeTexcoords","topEdgeTexcoordLength","textureIndex","tempPositions","tempTexcoords","tempPositionsLength","tempTexcoordsLength","createGeometryFromPositionsPositions","createGeometryFromPositionsSubdivided","indicesSize","cornersLength","PolygonOutlineGeometry","linkedList","clockwise","signedArea","insertNode","removeNode","filterPoints","again","steiner","earcutLinked","ear","invSize","pass","zOrder","prevZ","nextZ","numMerges","inSize","pSize","qSize","sortLinked","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangleExceptFirst","locallyInside","isValidDiagonal","splitPolygon","compareXYSlope","eliminateHole","tanMin","pointInTriangle","sectorContainsSector","findHoleBridge","bridgeReverse","getLeftmost","leftmost","intersectsPolygon","middleInside","onSegment","createNode","scaleToGeodeticHeightN","scaleToGeodeticHeightP","PolygonPipeline","computeArea2D","WindingOrder","hasHoles","outerLen","eliminateHoles","earcut","subdivisionV0Scratch","subdivisionV1Scratch","subdivisionV2Scratch","subdivisionS0Scratch","subdivisionS1Scratch","subdivisionS2Scratch","subdivisionMidScratch","subdivisionT0Scratch","subdivisionT1Scratch","subdivisionT2Scratch","subdivisionTexcoordMidScratch","subdividedTexcoords","texcoordItem","subdividedIndices","minDistanceSqrd","midTexcoord","GeometryAttribute","PrimitiveType","subdivisionC0Scratch","subdivisionC1Scratch","subdivisionC2Scratch","subdivisionCartographicScratch","rhumb0","rhumb1","rhumb2","midHeight","midCartesian3","scratchInterpolateColorsArray","interpolateColors","color0","color1","redPerVertex","greenPerVertex","bluePerVertex","alphaPerVertex","PolylineGeometry","colorsPerVertex","_colors","_colorsPerVertex","scratchPrevPosition","scratchNextPosition","polylineGeometry","removedIndices","removedArrayIndex","nextRemovedIndex","subdivisionSize","numberOfPointsFunction","numberOfPoints","numberOfPointsRhumbLine","extractHeights","colorLength","newColors","newColorIndex","numColors","interpolatedColors","interpolatedColorsLength","generateCartesianArc","generateCartesianRhumbArc","finalColors","expandAndWidthIndex","colorIndex","endK","PolylinePipeline","radiansDistanceSquared","cartoScratch","wrapLongitudeInversMatrix","wrapLongitudeOrigin","wrapLongitudeXZNormal","wrapLongitudeXZPlane","wrapLongitudeYZNormal","wrapLongitudeYZPlane","wrapLongitudeIntersection","wrapLongitudeOffset","subdivideHeightsScratchArray","subdivideHeights","heightPerVertex","carto1","carto2","scaleFirst","scaleLast","ellipsoidRhumb","surfaceDistanceBetweenPoints","cart","wrapLongitude","inverseModelMatrix","xzNormal","yzNormal","yzPlane","lengths","hasHeightArray","arrayLength","generateRhumbArc","numberArray","PolylineVolumeGeometry","polylinePositions","shapePositions","_shape","brScratch","polylineVolumeGeometry","shape2D","removeDuplicatesFromShape","combinedPositions","shapeLength","firstEndIndices","indicesCount","lengthSt","heightSt","stindex","scratch2Array","scratchCartesian7","scratchCartesian8","scratchCartesian9","PolylineVolumeGeometryLibrary","nextScratch","prevScratch","rotationZ","scaleMatrix","westScratch","finalPosScratch","heightCartesian","addPosition","xScalar","finalPosition","computeRotationAngle","addPositions","centers","convertShapeTo3D","startPointScratch","duplicatePoints","cleanedPositions","shapeForSides","convertShapeTo3DDuplicate","shapeForEnds","subdividedHeights","PolylineVolumeOutlineGeometry","polylineVolumeOutlineGeometry","shapeCount","firstOffset","secondOffset","QuadraticRealPolynomial","cMagnitude","aMagnitude","radicand","QuantizedMeshTerrainData","_quantizedVertices","_encodedNormals","_indices","uValues","_uValues","vValues","_vValues","sortByV","sortByU","_heightValues","_westIndices","sortIndicesIfNecessary","_southIndices","_eastIndices","_northIndices","_westSkirtHeight","_southSkirtHeight","_eastSkirtHeight","_northSkirtHeight","canUpsample","sortFunction","needsSort","octEncodedNormals","rtc","obb","terrainEncoding","shortestSkirt","maxShort","pointInBoundingBox","quantizedHeight","QuarticRealPolynomial","a3Squared","cubicRoots","hSquared","roots1","roots2","tempSquared","mError","nError","squareRootOfN","squareRootOfM","neumark","Quaternion","fromAxisAngleScratch","halfAngle","fromRotationMatrixNext","fromRotationMatrixQuat","fromRotationMatrix","scratchHPRQuaternion","scratchHeadingQuaternion","scratchPitchQuaternion","scratchRollQuaternion","sampledQuaternionAxis","sampledQuaternionRotation","sampledQuaternionTempQuaternion","sampledQuaternionQuaternion0","sampledQuaternionQuaternion0Conjugate","packedArray","computeAxis","computeAngle","inverseMagnitude","leftW","rightW","slerpEndNegated","slerpScaledP","slerpScaledR","slerp","thetaOverSinTheta","sinThetaOverTheta","squadScratchCartesian0","squadScratchCartesian1","squadScratchQuaternion0","squadScratchQuaternion1","computeInnerQuadrangle","qInv","cart0","cart1","squad","slerp0","slerp1","fastSlerpScratchQuaternion","opmu","fastSlerp","xm1","sqrT","sqrD","fastSquad","QuaternionSpline","Queue","compareFunction","Ray","getPoint","Rectangle","westOverIDL","eastOverIDL","fromBoundingSphereMatrixScratch","fromBoundingSphereEastScratch","fromBoundingSphereNorthScratch","fromBoundingSphereWestScratch","fromBoundingSphereSouthScratch","fromBoundingSpherePositionsScratch","northwest","southeast","otherRectangle","rectangleEast","rectangleWest","otherRectangleEast","otherRectangleWest","simpleIntersection","subsampleLlaScratch","lla","subsection","westLerp","southLerp","eastLerp","northLerp","RectangleCollisionChecker","RectangleWithId","idCompare","fromRectangleAndId","withId","removalScratch","collisionScratch","collides","createAttributes","constructRectangle","rectangleGeometry","computedOptions","northCap","southCap","rowStart","rowEnd","computePosition","calculateAttributes","upperLeft","lowerRight","northIndex","southIndex","topPositions","bottomPositions","addWallTextureCoordinates","wallTextures","scratchRectanglePoints","nwScratch","stNwScratch","computeOptions","RectangleGeometry","_surfaceHeight","_rotatedRectangle","scratchRectangle","tangentRotationMatrixScratch","lonScalar","latScalar","offsetAttributeValue","newVertexFormat","newLength","hasOffsets","widthMultiplier","perimeterPositions","dupliateCorners","wallCount","wallExtrudeNormals","wallOffsetAttribute","computeTopOffsets","extrudeNormalIndex","wallOffsetIndex","threeI","calculateAttributesWall","constructExtrudedRectangle","topBS","bottomBS","unrotatedTextureRectangleScratch","unrotatedTextureRectangle","boundingRectangleCenter","RectangleGeometryLibrary","computeST","nwCorner","stLatitude","granYCos","granXSin","stLongitude","granYSin","granXCos","stNwCorner","stGranYCos","stGranXSin","stGranYSin","stGranXCos","stWest","stSouth","rotationMatrixScratch","nwCartesian","centerCartesian","getRotationOptions","cosRotation","sinRotation","latitude0","latitude1","latitude2","longitude0","longitude1","longitude2","boundingRectangleScratch","nwCornerResult","stNwCornerResult","rotationOptions","stRotationOptions","RectangleOutlineGeometry","bottomCorner","topRightCorner","bottomLeftCorner","FIXED","INERTIAL","Request","requestFunction","cancelFunction","OTHER","serverKey","UNISSUED","cancelled","RequestErrorEvent","responseHeaders","numberOfAttemptedRequests","numberOfActiveRequests","numberOfCancelledRequests","numberOfCancelledActiveRequests","numberOfFailedRequests","numberOfActiveRequestsEver","lastNumberOfActiveRequests","priorityHeapLength","requestHeap","activeRequests","numberOfActiveRequestsByServer","pageUri","requestCompletedEvent","RequestScheduler","updatePriority","issueRequest","ISSUED","startRequest","ACTIVE","RECEIVED","getRequestReceivedFunction","FAILED","getRequestFailedFunction","cancelRequest","maximumRequests","maximumRequestsPerServer","requestsByServer","throttleRequests","debugShowStatistics","serverHasOpenSlots","desiredRequests","maxRequests","heapHasOpenSlots","removeCount","activeLength","issuedRequests","issuedLength","openSlots","filledSlots","getServerKey","removedRequest","clearForSpecs","IMAGERY","TILES3D","xhrBlobSupported","Resource","_templateValues","defaultClone","_queryParameters","_retryCount","supportsImageBitmapOptionsPromise","combineQueryParameters","preserveQueryParameters","q2Value","callbackParameterName","functionName","callbackQuery","_Implementations","loadAndExecuteScript","retryOnError","checkAndResetRequest","supportsImageBitmapOptions","createImageBitmap","fetchBlob","imageOrientation","premultiplyAlpha","colorSpaceConversion","imageBitmaps","colorWithOptions","colorWithDefaults","isBlobSupported","getUrlComponent","isDataUri","isBlobUri","isCrossOriginUrl","hasHeaders","preserveQuery","baseUrl","queryString","queryObject","stringifyQuery","replacement","useAsDefault","setTemplateValues","getBaseUri","includeQuery","_fetchImage","blobPromise","supportsImageBitmap","useImageBitmap","generatedBlobResource","generatedBlob","createImageBitmapFromBlob","blobUrl","crossOrigin","createImage","fetchText","fetchXML","loadWithXhr","dataUriRegex","decodeDataUriText","isBase64","decodeDataUriArrayBuffer","byteString","post","loadImageElement","naturalWidth","naturalHeight","xhrDeferred","noXMLHttpRequest","dataUriRegexResult","decodeDataUri","loadWithHttpRequest","withCredentials","localFile","getAllResponseHeaders","browserResponseType","splitHeaders","_DefaultImplementations","RuntimeError","S2_LOOKUP_POSITIONS","S2_LOOKUP_IJ","S2_POSITION_TO_IJ","S2_POSITION_TO_ORIENTATION_MASK","S2_SWAP_MASK","S2Cell","cellId","supportsBigInt","isValidId","_cellId","getLevel","convertCellIdToFaceIJ","generateLookupCell","extractMask","S2_MAX_LEVEL","convertFaceUVtoXYZ","convertSTtoUV","convertSiTitoST","convertIJtoSTMinimum","originalOrientation","lsb","fromToken","isValidToken","getIdFromToken","getTokenFromId","trailingZeroHexChars","Mod67BitPosition","lsbPosition","getChild","newLsb","getParentAtLevel","lsbForLevel","getCenter","faceSiTi","faceIJ","isLeaf","shouldCorrect","correction","convertCellIdToFaceSiTi","convertFaceSiTitoXYZ","getS2Center","getVertex","vertex","cellSize","getSizeIJ","ijLow","ijHigh","convertIJLeveltoBoundUV","getS2Vertex","fromFacePositionLevel","faceBitString","positionBitString","positionPrefixPadding","positionSuffixPadding","screenSpaceEventHandler","getInputEventKey","getModifier","MouseButton","registerListener","domType","mouseDownEvent","gotTouchEvent","_lastSeenTouchEvent","canProcessMouseEvent","ScreenSpaceEventHandler","mouseEmulationIgnoreMilliseconds","checkPixelTolerance","startPosition","endPosition","pixelTolerance","xDiff","yDiff","handleMouseDown","screenSpaceEventType","_buttonDown","LEFT_DOWN","MIDDLE_DOWN","RIGHT_DOWN","_primaryPosition","_primaryStartPosition","_primaryPreviousPosition","getInputAction","mouseUpEvent","mouseClickEvent","cancelMouseEvent","clickScreenSpaceEventType","clickAction","_clickPixelTolerance","handleMouseUp","LEFT_UP","LEFT_CLICK","MIDDLE_UP","MIDDLE_CLICK","RIGHT_UP","RIGHT_CLICK","mouseMoveEvent","handleMouseMove","MOUSE_MOVE","mouseDblClickEvent","handleDblClick","LEFT_DOUBLE_CLICK","handleWheel","DOM_DELTA_PIXEL","DOM_DELTA_LINE","WHEEL","handleTouchStart","fireTouchEvents","previousPositions","_previousPositions","handleTouchEnd","touchStartEvent","touch2StartEvent","touchEndEvent","touchClickEvent","touchHoldEvent","numberOfTouches","pinching","_isPinching","_touchHoldTimer","_isTouchHolding","PINCH_END","_holdPixelTolerance","touchHoldDelayMilliseconds","PINCH_START","handleTouchMove","fireTouchMoveEvents","touchMoveEvent","touchPinchMovementEvent","angleAndHeight","PINCH_MOVE","previousPosition1","previousPosition2","prevDX","prevDY","prevDist","prevCY","prevAngle","handlePointerDown","setPointerCapture","handlePointerUp","handlePointerMove","_inputEvents","alternateElement","disableRootEvents","registerListeners","setInputAction","removeInputAction","unregisterListeners","ShowGeometryInstanceAttribute","Simon1994PlanetaryPositions","taiToTdb","daysSinceJ2000InTerrestrialTime","computeTdbMinusTtSpice","RadiansPerDegree","RadiansPerArcSecond","perifocalToEquatorial","elementsToCartesian","eccentricity","inclination","longitudeOfPerigee","longitudeOfNode","meanLongitude","radiusOfPeriapsis","argumentOfPeriapsis","rightAscensionOfAscendingNode","trueAnomaly","meanAnomaly","eccentricAnomaly","revs","iterationValue","keplerEqConvergence","meanAnomalyToEccentricAnomaly","trueAnomalyX","trueAnomalyY","eccentricAnomalyToTrueAnomaly","meanAnomalyToTrueAnomaly","chooseOrbit","cosap","sinap","cosi","sini","cosraan","sinraan","perifocalToCartesianMatrix","semilatus","costheta","sintheta","Epsilon10","meanLongitude0","meanLongitude1","Cl3","Cl4","Cl5","Sl5","scratchDate","computeSimonMoon","inclinationConstant","inclinationSecPart","longitudeOfPerigeeConstant","longitudeOfPerigeeSecPart","longitudeOfNodeConstant","longitudeOfNodeSecPart","meanLongitudeConstant","meanLongitudeSecPart","lprime","psi","twoD","fourD","sixD","twol","threel","fourl","twoF","twoPsi","threePsi","perigeeAndMean","axesTransformation","computeSunPositionInEarthInertialFrame","computeSimonEarthMoonBarycenter","computeSimonEarth","computeMoonPositionInEarthInertialFrame","SimplePolylineGeometry","scratchArray1","scratchArray2","generateArcOptionsScratch","simplePolylineGeometry","perSegmentColors","positionValues","numberOfPositions","colorValues","generateArcFunction","generateArcOptions","segLen","lastColor","SphereGeometry","ellipsoidOptions","_ellipsoidGeometry","scratchEllipsoidGeometry","sphereGeometry","SphereOutlineGeometry","Spherical","radialSquared","Spline","timeEnd","timeStart","timeStretch","divs","SteppedSpline","Stereographic","NORTH_POLE_TANGENT_PLANE","conformalLatitude","scratchProjectPointOntoPlaneRayDirection","SOUTH_POLE","SOUTH_POLE_TANGENT_PLANE","NORTH_POLE","stereographic","HALF_UNIT_SPHERE","canTransferArrayBuffer","TaskProcessor","_canTransferArrayBuffer","worker","createWorker","webkitPostMessage","terminate","taskCompletedEvent","urlFromScript","script","blobBuilder","isUri","moduleID","workerPath","crossOriginUrl","moduleAbsoluteUrl","_workerModulePrefix","CESIUM_WORKERS","supportsEsmWebWorkers","maximumActiveTasks","_workerPath","_maximumActiveTasks","_activeTasks","_nextID","_webAssemblyPromise","emptyTransferableObjectArray","transferableObjects","processor","canTransfer","createOnmessageHandler","getCesiumBaseUrl","runTask","webAssemblyOptions","wasmConfig","wasmOptions","modulePath","wasmBinary","fallbackModulePath","getWebAssemblyLoaderConfig","webAssemblyConfig","_defaultWorkerModulePrefix","TerrainData","cartesian3DimScratch","cartesian2Scratch","matrix4Scratch2","SHIFT_LEFT_12","TerrainEncoding","axisAlignedBoundingBox","hDim","BITS12","invSt","rtcOffset","toScaledENU","fromScaledENU","_offsetGeodeticSurfaceNormal","_offsetVertexNormal","_calculateStrideAndOffsets","normalToPack","compressed0","compressed1","compressed2","compressed3","addGeodeticSurfaceNormals","oldBuffer","oldStride","newStride","oldIndex","removeGeodeticSurfaceNormals","getExaggeratedPosition","rawHeight","heightDifference","attributesIndicesNone","position3DAndHeight","textureCoordAndEncodedNormals","attributesIndicesBits12","strideInBytes","offsetInBytes","componentsTexCoordAndNormals","usingAttribute0Component4","usingAttribute1Component1","getAttributeLocations","TerrainMesh","_lastPickSceneMode","_terrainPicker","needsRebuild","SCENE3D","exaggeratedMinHeight","exaggeratedMaxHeight","scratchSWCartographic","scratchSWCartesian","scratchNECartographic","scratchNECartesian","heightRange","scratchScale2D","scratchCenter2D","SWIZZLE_3D_TO_2D_MATRIX","computeTransform2D","rayIntersect","updateExaggeration","_vertices","updateSceneMode","TerrainPicker","_inverseTransform","_needsRebuild","_rootNode","TerrainPickerNode","incrementallyBuildTerrainPickerTaskProcessor","aabb","createAABBForNode","intersectingTriangles","buildingChildren","childIdx","childNode","scratchTransformedRay","scratchTrianglePoints","tileTransform","terrainPicker","invTransform","transformedRay","intersections","getNodesIntersectingRay","sortedIntersections","minT","intersectionResult","getClosestTriangleInNode","findClosestPointInClosestNode","scratchAABBMin","scratchAABBMax","sizeAtLevel","aabbMin","aabbMax","packTriangleBuffers","trianglePositionsBuffer","triangleIndicesBuffer","trianglePositions","triangleIndex","scratchInterval","intersectingNodes","shouldBuildChildren","triangleIndices","triIndex","getVertexPosition","triT","inverseTransform","inverseTransformPacked","aabbArray","aabbs","incrementallyBuildTerrainPickerPromise","intersectingTrianglesArrays","addTrianglesToChildrenNodes","positionCartographic","worldWidth","TerrainProvider","regularGridIndicesCache","getRegularGridIndices","FOUR_GIGABYTES","byWidth","addRegularGridIndices","regularGridAndEdgeIndicesCache","edgeIndices","getEdgeIndices","regularGridAndSkirtAndEdgeIndicesCache","addSkirtIndices","previousIndex","gridIndexCount","edgeVertexCount","getSkirtIndexCount","cornerStartIdx","cornerSWIndex","cornerNWIndex","cornerNEIndex","cornerSEIndex","westSouthIndex","westNorthIndex","southEastIndex","southWestIndex","eastNorthIndex","eastSouthIndex","northWestIndex","northEastIndex","heightmapTerrainQuality","tileImageWidth","numberOfTilesAtLevelZero","TextureNode","childNode1","childNode2","TexturePacker","borderPadding","_borderPadding","_root","_findNode","nodeWidth","widthDifference","widthDifferencePadded","heightDifferencePadded","TileAvailability","maximumLevel","_rootNodes","findNode","rootNodes","QuadtreeNode","rectangleWithLevel","RectangleWithLevel","rectanglesOverlap","putRectangleInQuadtree","nodeIndex","rectangleContainsPosition","findMaxLevelFromNode","rectanglesScratch","remainingToCoverByLevelScratch","eastScratch","computeBestAvailableLevelOverRectangle","rectangles","remainingToCoverByLevel","updateCoverageWithNode","cartographicScratch","_sw","_nw","rectangle1","rectangle2","maxDepth","rectangleFullyContainsRectangle","rectangleLevelComparator","potentialContainer","rectangleToTest","positionToTest","stopNode","rectanglesToCover","anyOverlap","subtractRectangle","rectangleList","rectangleToSubtract","childLevel","WEST","NORTH","EAST","SOUTH","NORTHWEST","NORTHEAST","SOUTHWEST","SOUTHEAST","TileProviderError","timesRetried","errorDetails","reportSuccess","TilingScheme","MINUTES_PER_HOUR","HOURS_PER_DAY","MINUTES_PER_DAY","PICOSECOND","TimeInterval","isStartIncluded","isStopIncluded","stopComparedToStart","iso8601","dataComparer","mergeCallback","EMPTY","leftStart","leftStop","rightStart","rightStop","intersectsStartRight","intersectsStartLeft","leftIsStartIncluded","leftIsStopIncluded","rightIsStartIncluded","rightIsStopIncluded","leftLessThanRight","startComparedToDate","dateComparedToStop","compareIntervalStartTimes","TimeIntervalCollection","intervals","_intervals","_changedEvent","addInterval","changedEvent","rightIntervals","findIntervalContainingDate","findDataForIntervalContainingDate","indexOfScratch","findInterval","comparison","removeInterval","otherIntervals","leftInterval","rightInterval","fromJulianDateArray","julianDates","dataCallback","leadingInterval","trailingInterval","startDate","endDate","scratchGregorianDate","monthLengths","addToDate","scratchJulianDate","durationRegex","parseDuration","scratchDuration","fromIso8601DateArray","iso8601Dates","fromIso8601DurationArray","iso8601Durations","relativeToPrevious","previousDate","Tipsify","intoIndices","vertexTimeStamps","getNextVertex","oneRing","deadEnd","maximumIndexPlusOne","itOneRing","numLiveTriangles","timeStamp","skipDeadEnd","vertexTriangles","triangle","intoVertices","currentOutputIndex","outputIndices","numTriangles","triangleEmitted","AUTODETECT","ENU","VELOCITY","Transforms","vectorProductLocalFrame","degeneratePositionLocalFrame","localFrameToFixedFrameCache","scratchCalculateCartesian","scratchFirstCartesian","scratchSecondCartesian","scratchThirdCartesian","localFrameToFixedFrameGenerator","resultat","hashAxis","northEastDownToFixedFrame","northUpEastToFixedFrame","northWestUpToFixedFrame","scratchHPRMatrix4","headingPitchRollToFixedFrame","fixedFrameTransform","hprQuaternion","hprMatrix","scratchENUMatrix4","scratchHPRMatrix3","headingPitchRollQuaternion","hprCenterScratch","ffScratch","hprTransformScratch","hprRotationScratch","hprQuaternionScratch","fixedFrameToHeadingPitchRoll","toFixedFrame","transformCopy","quaternionRotation","twoPiOverSecondsInDay","dateInUtc","computeIcrfToCentralBodyFixedMatrix","transformMatrix","computeIcrfToFixedMatrix","computeTemeToPseudoFixedMatrix","utcDayNumber","utcSecondsIntoDay","diffDays","gha","cosGha","sinGha","iau2006XysData","earthOrientationParameters","ttMinusTai","preloadIcrfFixed","fixedToIcrfMtx","computeFixedToIcrfMatrix","scratchHpr","dateScratch","computeMoonFixedToIcrfMatrix","secondsTT","computeIcrfToMoonFixedMatrix","xysScratch","eopScratch","rotation1Scratch","rotation2Scratch","rotation1","rotation2","matrixQ","daysSinceJ2000","fractionOfDay","era","earthRotation","pfToIcrf","cosxp","cosyp","sinxp","sinyp","ttt","cossp","sinsp","fToPfMtx","pointToWindowCoordinatesTemp","pointToWindowCoordinates","modelViewProjectionMatrix","viewportTransformation","pointToGLWindowCoordinates","upScratch","rotationMatrixFromPositionVelocity","velocity","scratchCartesian3Projection","scratchRotation","scratchFromENU","scratchToENU","basisTo2D","rtcCenter","ellipsoidTo2DModelMatrix","defaultTranslation","defaultRotation","TranslationRotationScale","TridiagonalSystemSolver","TrustedServers","_servers","getAuthority","DataRectangle","heightmapHeight","VRTheWorldTerrainProvider","_rectangles","_heightmapHeight","srs","tileFormat","dataRectangles","dataRectangle","metadataFailure","cesium","getChildMask","parentRectangle","testRectangle","isTileInRectangle","tileRectangle","VertexFormat","POSITION_AND_NORMAL","POSITION_NORMAL_AND_ST","POSITION_AND_ST","POSITION_AND_COLOR","VerticalExaggeration","relativeHeight","verticalExaggeration","verticalExaggerationRelativeHeight","VideoSynchronizer","_clock","_clockSubscription","_seekFunction","_lastPlaybackRate","_seeking","_firstTickAfterSeek","_onTick","_trySetPlaybackRate","playbackRate","clockTime","videoTime","desiredTime","VK_FORMAT_UNDEFINED","VK_FORMAT_R4G4_UNORM_PACK8","VK_FORMAT_R4G4B4A4_UNORM_PACK16","VK_FORMAT_B4G4R4A4_UNORM_PACK16","VK_FORMAT_R5G6B5_UNORM_PACK16","VK_FORMAT_B5G6R5_UNORM_PACK16","VK_FORMAT_R5G5B5A1_UNORM_PACK16","VK_FORMAT_B5G5R5A1_UNORM_PACK16","VK_FORMAT_A1R5G5B5_UNORM_PACK16","VK_FORMAT_R8_UNORM","VK_FORMAT_R8_SNORM","VK_FORMAT_R8_USCALED","VK_FORMAT_R8_SSCALED","VK_FORMAT_R8_UINT","VK_FORMAT_R8_SINT","VK_FORMAT_R8_SRGB","VK_FORMAT_R8G8_UNORM","VK_FORMAT_R8G8_SNORM","VK_FORMAT_R8G8_USCALED","VK_FORMAT_R8G8_SSCALED","VK_FORMAT_R8G8_UINT","VK_FORMAT_R8G8_SINT","VK_FORMAT_R8G8_SRGB","VK_FORMAT_R8G8B8_UNORM","VK_FORMAT_R8G8B8_SNORM","VK_FORMAT_R8G8B8_USCALED","VK_FORMAT_R8G8B8_SSCALED","VK_FORMAT_R8G8B8_UINT","VK_FORMAT_R8G8B8_SINT","VK_FORMAT_R8G8B8_SRGB","VK_FORMAT_B8G8R8_UNORM","VK_FORMAT_B8G8R8_SNORM","VK_FORMAT_B8G8R8_USCALED","VK_FORMAT_B8G8R8_SSCALED","VK_FORMAT_B8G8R8_UINT","VK_FORMAT_B8G8R8_SINT","VK_FORMAT_B8G8R8_SRGB","VK_FORMAT_R8G8B8A8_UNORM","VK_FORMAT_R8G8B8A8_SNORM","VK_FORMAT_R8G8B8A8_USCALED","VK_FORMAT_R8G8B8A8_SSCALED","VK_FORMAT_R8G8B8A8_UINT","VK_FORMAT_R8G8B8A8_SINT","VK_FORMAT_R8G8B8A8_SRGB","VK_FORMAT_B8G8R8A8_UNORM","VK_FORMAT_B8G8R8A8_SNORM","VK_FORMAT_B8G8R8A8_USCALED","VK_FORMAT_B8G8R8A8_SSCALED","VK_FORMAT_B8G8R8A8_UINT","VK_FORMAT_B8G8R8A8_SINT","VK_FORMAT_B8G8R8A8_SRGB","VK_FORMAT_A8B8G8R8_UNORM_PACK32","VK_FORMAT_A8B8G8R8_SNORM_PACK32","VK_FORMAT_A8B8G8R8_USCALED_PACK32","VK_FORMAT_A8B8G8R8_SSCALED_PACK32","VK_FORMAT_A8B8G8R8_UINT_PACK32","VK_FORMAT_A8B8G8R8_SINT_PACK32","VK_FORMAT_A8B8G8R8_SRGB_PACK32","VK_FORMAT_A2R10G10B10_UNORM_PACK32","VK_FORMAT_A2R10G10B10_SNORM_PACK32","VK_FORMAT_A2R10G10B10_USCALED_PACK32","VK_FORMAT_A2R10G10B10_SSCALED_PACK32","VK_FORMAT_A2R10G10B10_UINT_PACK32","VK_FORMAT_A2R10G10B10_SINT_PACK32","VK_FORMAT_A2B10G10R10_UNORM_PACK32","VK_FORMAT_A2B10G10R10_SNORM_PACK32","VK_FORMAT_A2B10G10R10_USCALED_PACK32","VK_FORMAT_A2B10G10R10_SSCALED_PACK32","VK_FORMAT_A2B10G10R10_UINT_PACK32","VK_FORMAT_A2B10G10R10_SINT_PACK32","VK_FORMAT_R16_UNORM","VK_FORMAT_R16_SNORM","VK_FORMAT_R16_USCALED","VK_FORMAT_R16_SSCALED","VK_FORMAT_R16_UINT","VK_FORMAT_R16_SINT","VK_FORMAT_R16_SFLOAT","VK_FORMAT_R16G16_UNORM","VK_FORMAT_R16G16_SNORM","VK_FORMAT_R16G16_USCALED","VK_FORMAT_R16G16_SSCALED","VK_FORMAT_R16G16_UINT","VK_FORMAT_R16G16_SINT","VK_FORMAT_R16G16_SFLOAT","VK_FORMAT_R16G16B16_UNORM","VK_FORMAT_R16G16B16_SNORM","VK_FORMAT_R16G16B16_USCALED","VK_FORMAT_R16G16B16_SSCALED","VK_FORMAT_R16G16B16_UINT","VK_FORMAT_R16G16B16_SINT","VK_FORMAT_R16G16B16_SFLOAT","VK_FORMAT_R16G16B16A16_UNORM","VK_FORMAT_R16G16B16A16_SNORM","VK_FORMAT_R16G16B16A16_USCALED","VK_FORMAT_R16G16B16A16_SSCALED","VK_FORMAT_R16G16B16A16_UINT","VK_FORMAT_R16G16B16A16_SINT","VK_FORMAT_R16G16B16A16_SFLOAT","VK_FORMAT_R32_UINT","VK_FORMAT_R32_SINT","VK_FORMAT_R32_SFLOAT","VK_FORMAT_R32G32_UINT","VK_FORMAT_R32G32_SINT","VK_FORMAT_R32G32_SFLOAT","VK_FORMAT_R32G32B32_UINT","VK_FORMAT_R32G32B32_SINT","VK_FORMAT_R32G32B32_SFLOAT","VK_FORMAT_R32G32B32A32_UINT","VK_FORMAT_R32G32B32A32_SINT","VK_FORMAT_R32G32B32A32_SFLOAT","VK_FORMAT_R64_UINT","VK_FORMAT_R64_SINT","VK_FORMAT_R64_SFLOAT","VK_FORMAT_R64G64_UINT","VK_FORMAT_R64G64_SINT","VK_FORMAT_R64G64_SFLOAT","VK_FORMAT_R64G64B64_UINT","VK_FORMAT_R64G64B64_SINT","VK_FORMAT_R64G64B64_SFLOAT","VK_FORMAT_R64G64B64A64_UINT","VK_FORMAT_R64G64B64A64_SINT","VK_FORMAT_R64G64B64A64_SFLOAT","VK_FORMAT_B10G11R11_UFLOAT_PACK32","VK_FORMAT_E5B9G9R9_UFLOAT_PACK32","VK_FORMAT_D16_UNORM","VK_FORMAT_X8_D24_UNORM_PACK32","VK_FORMAT_D32_SFLOAT","VK_FORMAT_S8_UINT","VK_FORMAT_D16_UNORM_S8_UINT","VK_FORMAT_D24_UNORM_S8_UINT","VK_FORMAT_D32_SFLOAT_S8_UINT","VK_FORMAT_BC1_RGB_UNORM_BLOCK","VK_FORMAT_BC1_RGB_SRGB_BLOCK","VK_FORMAT_BC1_RGBA_UNORM_BLOCK","VK_FORMAT_BC1_RGBA_SRGB_BLOCK","VK_FORMAT_BC2_UNORM_BLOCK","VK_FORMAT_BC2_SRGB_BLOCK","VK_FORMAT_BC3_UNORM_BLOCK","VK_FORMAT_BC3_SRGB_BLOCK","VK_FORMAT_BC4_UNORM_BLOCK","VK_FORMAT_BC4_SNORM_BLOCK","VK_FORMAT_BC5_UNORM_BLOCK","VK_FORMAT_BC5_SNORM_BLOCK","VK_FORMAT_BC6H_UFLOAT_BLOCK","VK_FORMAT_BC6H_SFLOAT_BLOCK","VK_FORMAT_BC7_UNORM_BLOCK","VK_FORMAT_BC7_SRGB_BLOCK","VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK","VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK","VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK","VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK","VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK","VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK","VK_FORMAT_EAC_R11_UNORM_BLOCK","VK_FORMAT_EAC_R11_SNORM_BLOCK","VK_FORMAT_EAC_R11G11_UNORM_BLOCK","VK_FORMAT_EAC_R11G11_SNORM_BLOCK","VK_FORMAT_ASTC_4x4_UNORM_BLOCK","VK_FORMAT_ASTC_4x4_SRGB_BLOCK","VK_FORMAT_ASTC_5x4_UNORM_BLOCK","VK_FORMAT_ASTC_5x4_SRGB_BLOCK","VK_FORMAT_ASTC_5x5_UNORM_BLOCK","VK_FORMAT_ASTC_5x5_SRGB_BLOCK","VK_FORMAT_ASTC_6x5_UNORM_BLOCK","VK_FORMAT_ASTC_6x5_SRGB_BLOCK","VK_FORMAT_ASTC_6x6_UNORM_BLOCK","VK_FORMAT_ASTC_6x6_SRGB_BLOCK","VK_FORMAT_ASTC_8x5_UNORM_BLOCK","VK_FORMAT_ASTC_8x5_SRGB_BLOCK","VK_FORMAT_ASTC_8x6_UNORM_BLOCK","VK_FORMAT_ASTC_8x6_SRGB_BLOCK","VK_FORMAT_ASTC_8x8_UNORM_BLOCK","VK_FORMAT_ASTC_8x8_SRGB_BLOCK","VK_FORMAT_ASTC_10x5_UNORM_BLOCK","VK_FORMAT_ASTC_10x5_SRGB_BLOCK","VK_FORMAT_ASTC_10x6_UNORM_BLOCK","VK_FORMAT_ASTC_10x6_SRGB_BLOCK","VK_FORMAT_ASTC_10x8_UNORM_BLOCK","VK_FORMAT_ASTC_10x8_SRGB_BLOCK","VK_FORMAT_ASTC_10x10_UNORM_BLOCK","VK_FORMAT_ASTC_10x10_SRGB_BLOCK","VK_FORMAT_ASTC_12x10_UNORM_BLOCK","VK_FORMAT_ASTC_12x10_SRGB_BLOCK","VK_FORMAT_ASTC_12x12_UNORM_BLOCK","VK_FORMAT_ASTC_12x12_SRGB_BLOCK","VK_FORMAT_G8B8G8R8_422_UNORM","VK_FORMAT_B8G8R8G8_422_UNORM","VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM","VK_FORMAT_G8_B8R8_2PLANE_420_UNORM","VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM","VK_FORMAT_G8_B8R8_2PLANE_422_UNORM","VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM","VK_FORMAT_R10X6_UNORM_PACK16","VK_FORMAT_R10X6G10X6_UNORM_2PACK16","VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16","VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16","VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16","VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16","VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16","VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16","VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16","VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16","VK_FORMAT_R12X4_UNORM_PACK16","VK_FORMAT_R12X4G12X4_UNORM_2PACK16","VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16","VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16","VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16","VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16","VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16","VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16","VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16","VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16","VK_FORMAT_G16B16G16R16_422_UNORM","VK_FORMAT_B16G16R16G16_422_UNORM","VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM","VK_FORMAT_G16_B16R16_2PLANE_420_UNORM","VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM","VK_FORMAT_G16_B16R16_2PLANE_422_UNORM","VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM","VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG","VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG","VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG","VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG","VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG","VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG","VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG","VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG","VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT","VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT","VK_FORMAT_G8B8G8R8_422_UNORM_KHR","VK_FORMAT_B8G8R8G8_422_UNORM_KHR","VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR","VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR","VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR","VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR","VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR","VK_FORMAT_R10X6_UNORM_PACK16_KHR","VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR","VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR","VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR","VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR","VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR","VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR","VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR","VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR","VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR","VK_FORMAT_R12X4_UNORM_PACK16_KHR","VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR","VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR","VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR","VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR","VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR","VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR","VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR","VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR","VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR","VK_FORMAT_G16B16G16R16_422_UNORM_KHR","VK_FORMAT_B16G16R16G16_422_UNORM_KHR","VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR","VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR","VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR","VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR","VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR","scratchCartesian3Position1","scratchCartesian3Position2","scratchCartesian3Position4","scratchCartesian3Position5","WallGeometry","maximumHeights","minimumHeights","_minimumHeights","_maximumHeights","fromConstantHeights","minHeights","maxHeights","doMin","doMax","wallGeometry","numCorners","nextTop","groundPosition","scalednextPosition","scaledGroundPosition","WallGeometryLibrary","latLonEquals","positionsArrayScratch","heightsArrayScratch","duplicateCorners","topHeights","bottomHeights","hasBottomHeights","hasTopHeights","cleanedTopHeights","cleanedBottomHeights","hasAllSameHeights","removeDuplicates","generateArcPositions","generateArcHeights","WallOutlineGeometry","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","COLOR_BUFFER_BIT","SRC_COLOR","ONE_MINUS_SRC_COLOR","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","FUNC_ADD","BLEND_EQUATION","BLEND_EQUATION_RGB","BLEND_EQUATION_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","BLEND_DST_RGB","BLEND_SRC_RGB","BLEND_DST_ALPHA","BLEND_SRC_ALPHA","CONSTANT_COLOR","ONE_MINUS_CONSTANT_COLOR","CONSTANT_ALPHA","ONE_MINUS_CONSTANT_ALPHA","BLEND_COLOR","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER_BINDING","ELEMENT_ARRAY_BUFFER_BINDING","STREAM_DRAW","STATIC_DRAW","DYNAMIC_DRAW","BUFFER_SIZE","BUFFER_USAGE","CURRENT_VERTEX_ATTRIB","FRONT","BACK","FRONT_AND_BACK","CULL_FACE","BLEND","DITHER","STENCIL_TEST","DEPTH_TEST","SCISSOR_TEST","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","SAMPLE_COVERAGE","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","OUT_OF_MEMORY","CCW","LINE_WIDTH","ALIASED_POINT_SIZE_RANGE","ALIASED_LINE_WIDTH_RANGE","CULL_FACE_MODE","FRONT_FACE","DEPTH_RANGE","DEPTH_WRITEMASK","DEPTH_CLEAR_VALUE","DEPTH_FUNC","STENCIL_CLEAR_VALUE","STENCIL_FUNC","STENCIL_FAIL","STENCIL_PASS_DEPTH_FAIL","STENCIL_PASS_DEPTH_PASS","STENCIL_REF","STENCIL_VALUE_MASK","STENCIL_WRITEMASK","STENCIL_BACK_FUNC","STENCIL_BACK_FAIL","STENCIL_BACK_PASS_DEPTH_FAIL","STENCIL_BACK_PASS_DEPTH_PASS","STENCIL_BACK_REF","STENCIL_BACK_VALUE_MASK","STENCIL_BACK_WRITEMASK","VIEWPORT","SCISSOR_BOX","COLOR_CLEAR_VALUE","COLOR_WRITEMASK","UNPACK_ALIGNMENT","PACK_ALIGNMENT","MAX_TEXTURE_SIZE","MAX_VIEWPORT_DIMS","SUBPIXEL_BITS","RED_BITS","GREEN_BITS","BLUE_BITS","ALPHA_BITS","DEPTH_BITS","STENCIL_BITS","POLYGON_OFFSET_UNITS","POLYGON_OFFSET_FACTOR","TEXTURE_BINDING_2D","SAMPLE_BUFFERS","SAMPLES","SAMPLE_COVERAGE_VALUE","SAMPLE_COVERAGE_INVERT","COMPRESSED_TEXTURE_FORMATS","DONT_CARE","FASTEST","NICEST","GENERATE_MIPMAP_HINT","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","FRAGMENT_SHADER","VERTEX_SHADER","MAX_VERTEX_ATTRIBS","MAX_VERTEX_UNIFORM_VECTORS","MAX_VARYING_VECTORS","MAX_COMBINED_TEXTURE_IMAGE_UNITS","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_IMAGE_UNITS","MAX_FRAGMENT_UNIFORM_VECTORS","SHADER_TYPE","DELETE_STATUS","LINK_STATUS","VALIDATE_STATUS","ATTACHED_SHADERS","ACTIVE_UNIFORMS","ACTIVE_ATTRIBUTES","SHADING_LANGUAGE_VERSION","CURRENT_PROGRAM","NEVER","LESS","EQUAL","LEQUAL","GREATER","NOTEQUAL","GEQUAL","ALWAYS","KEEP","REPLACE","INCR","DECR","INVERT","INCR_WRAP","DECR_WRAP","VENDOR","RENDERER","NEAREST","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_2D","TEXTURE","TEXTURE_CUBE_MAP","TEXTURE_BINDING_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","TEXTURE_CUBE_MAP_NEGATIVE_X","TEXTURE_CUBE_MAP_POSITIVE_Y","TEXTURE_CUBE_MAP_NEGATIVE_Y","TEXTURE_CUBE_MAP_POSITIVE_Z","TEXTURE_CUBE_MAP_NEGATIVE_Z","MAX_CUBE_MAP_TEXTURE_SIZE","TEXTURE0","TEXTURE1","TEXTURE2","TEXTURE3","TEXTURE4","TEXTURE5","TEXTURE6","TEXTURE7","TEXTURE8","TEXTURE9","TEXTURE10","TEXTURE11","TEXTURE12","TEXTURE13","TEXTURE14","TEXTURE15","TEXTURE16","TEXTURE17","TEXTURE18","TEXTURE19","TEXTURE20","TEXTURE21","TEXTURE22","TEXTURE23","TEXTURE24","TEXTURE25","TEXTURE26","TEXTURE27","TEXTURE28","TEXTURE29","TEXTURE30","TEXTURE31","ACTIVE_TEXTURE","REPEAT","CLAMP_TO_EDGE","MIRRORED_REPEAT","FLOAT_VEC2","FLOAT_VEC3","FLOAT_VEC4","INT_VEC2","INT_VEC3","INT_VEC4","BOOL","BOOL_VEC2","BOOL_VEC3","BOOL_VEC4","FLOAT_MAT2","FLOAT_MAT3","FLOAT_MAT4","SAMPLER_2D","SAMPLER_CUBE","VERTEX_ATTRIB_ARRAY_ENABLED","VERTEX_ATTRIB_ARRAY_SIZE","VERTEX_ATTRIB_ARRAY_STRIDE","VERTEX_ATTRIB_ARRAY_TYPE","VERTEX_ATTRIB_ARRAY_NORMALIZED","VERTEX_ATTRIB_ARRAY_POINTER","VERTEX_ATTRIB_ARRAY_BUFFER_BINDING","IMPLEMENTATION_COLOR_READ_TYPE","IMPLEMENTATION_COLOR_READ_FORMAT","COMPILE_STATUS","LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT","FRAMEBUFFER","RENDERBUFFER","RGBA4","RGB5_A1","RGB565","STENCIL_INDEX","STENCIL_INDEX8","RENDERBUFFER_WIDTH","RENDERBUFFER_HEIGHT","RENDERBUFFER_INTERNAL_FORMAT","RENDERBUFFER_RED_SIZE","RENDERBUFFER_GREEN_SIZE","RENDERBUFFER_BLUE_SIZE","RENDERBUFFER_ALPHA_SIZE","RENDERBUFFER_DEPTH_SIZE","RENDERBUFFER_STENCIL_SIZE","FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE","FRAMEBUFFER_ATTACHMENT_OBJECT_NAME","FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL","FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","STENCIL_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","FRAMEBUFFER_COMPLETE","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_BINDING","RENDERBUFFER_BINDING","MAX_RENDERBUFFER_SIZE","INVALID_FRAMEBUFFER_OPERATION","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","CONTEXT_LOST_WEBGL","UNPACK_COLORSPACE_CONVERSION_WEBGL","BROWSER_DEFAULT_WEBGL","HALF_FLOAT_OES","READ_BUFFER","UNPACK_ROW_LENGTH","UNPACK_SKIP_ROWS","UNPACK_SKIP_PIXELS","PACK_ROW_LENGTH","PACK_SKIP_ROWS","PACK_SKIP_PIXELS","COLOR","DEPTH","STENCIL","RGB10_A2","TEXTURE_BINDING_3D","UNPACK_SKIP_IMAGES","UNPACK_IMAGE_HEIGHT","TEXTURE_3D","TEXTURE_WRAP_R","MAX_3D_TEXTURE_SIZE","UNSIGNED_INT_2_10_10_10_REV","MAX_ELEMENTS_VERTICES","MAX_ELEMENTS_INDICES","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","TEXTURE_BASE_LEVEL","TEXTURE_MAX_LEVEL","MIN","MAX_TEXTURE_LOD_BIAS","TEXTURE_COMPARE_MODE","TEXTURE_COMPARE_FUNC","CURRENT_QUERY","QUERY_RESULT","QUERY_RESULT_AVAILABLE","STREAM_READ","STREAM_COPY","STATIC_READ","STATIC_COPY","DYNAMIC_READ","DYNAMIC_COPY","MAX_DRAW_BUFFERS","DRAW_BUFFER0","DRAW_BUFFER1","DRAW_BUFFER2","DRAW_BUFFER3","DRAW_BUFFER4","DRAW_BUFFER5","DRAW_BUFFER6","DRAW_BUFFER7","DRAW_BUFFER8","DRAW_BUFFER9","DRAW_BUFFER10","DRAW_BUFFER11","DRAW_BUFFER12","DRAW_BUFFER13","DRAW_BUFFER14","DRAW_BUFFER15","MAX_FRAGMENT_UNIFORM_COMPONENTS","MAX_VERTEX_UNIFORM_COMPONENTS","SAMPLER_3D","SAMPLER_2D_SHADOW","FRAGMENT_SHADER_DERIVATIVE_HINT","PIXEL_PACK_BUFFER","PIXEL_UNPACK_BUFFER","PIXEL_PACK_BUFFER_BINDING","PIXEL_UNPACK_BUFFER_BINDING","FLOAT_MAT2x3","FLOAT_MAT2x4","FLOAT_MAT3x2","FLOAT_MAT3x4","FLOAT_MAT4x2","FLOAT_MAT4x3","SRGB","SRGB8","SRGB8_ALPHA8","COMPARE_REF_TO_TEXTURE","VERTEX_ATTRIB_ARRAY_INTEGER","MAX_ARRAY_TEXTURE_LAYERS","MIN_PROGRAM_TEXEL_OFFSET","MAX_PROGRAM_TEXEL_OFFSET","MAX_VARYING_COMPONENTS","TEXTURE_2D_ARRAY","TEXTURE_BINDING_2D_ARRAY","R11F_G11F_B10F","UNSIGNED_INT_10F_11F_11F_REV","RGB9_E5","UNSIGNED_INT_5_9_9_9_REV","TRANSFORM_FEEDBACK_BUFFER_MODE","MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS","TRANSFORM_FEEDBACK_VARYINGS","TRANSFORM_FEEDBACK_BUFFER_START","TRANSFORM_FEEDBACK_BUFFER_SIZE","TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN","RASTERIZER_DISCARD","MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS","MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS","INTERLEAVED_ATTRIBS","SEPARATE_ATTRIBS","TRANSFORM_FEEDBACK_BUFFER","TRANSFORM_FEEDBACK_BUFFER_BINDING","RGBA16UI","RGB16UI","RGBA8UI","RGB8UI","RGBA16I","RGB16I","RGBA8I","RGB8I","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","UNSIGNED_INT_VEC2","UNSIGNED_INT_VEC3","UNSIGNED_INT_VEC4","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","DEPTH_COMPONENT32F","DEPTH32F_STENCIL8","FLOAT_32_UNSIGNED_INT_24_8_REV","FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING","FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE","FRAMEBUFFER_ATTACHMENT_RED_SIZE","FRAMEBUFFER_ATTACHMENT_GREEN_SIZE","FRAMEBUFFER_ATTACHMENT_BLUE_SIZE","FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE","FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE","FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE","FRAMEBUFFER_DEFAULT","UNSIGNED_INT_24_8","UNSIGNED_NORMALIZED","DRAW_FRAMEBUFFER_BINDING","READ_FRAMEBUFFER","DRAW_FRAMEBUFFER","READ_FRAMEBUFFER_BINDING","RENDERBUFFER_SAMPLES","FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER","MAX_COLOR_ATTACHMENTS","COLOR_ATTACHMENT1","COLOR_ATTACHMENT2","COLOR_ATTACHMENT3","COLOR_ATTACHMENT4","COLOR_ATTACHMENT5","COLOR_ATTACHMENT6","COLOR_ATTACHMENT7","COLOR_ATTACHMENT8","COLOR_ATTACHMENT9","COLOR_ATTACHMENT10","COLOR_ATTACHMENT11","COLOR_ATTACHMENT12","COLOR_ATTACHMENT13","COLOR_ATTACHMENT14","COLOR_ATTACHMENT15","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE","MAX_SAMPLES","R8I","R8UI","R16I","R16UI","RG8I","RG8UI","RG16I","RG16UI","VERTEX_ARRAY_BINDING","R8_SNORM","RG8_SNORM","RGB8_SNORM","RGBA8_SNORM","SIGNED_NORMALIZED","COPY_READ_BUFFER","COPY_WRITE_BUFFER","COPY_READ_BUFFER_BINDING","COPY_WRITE_BUFFER_BINDING","UNIFORM_BUFFER","UNIFORM_BUFFER_BINDING","UNIFORM_BUFFER_START","UNIFORM_BUFFER_SIZE","MAX_VERTEX_UNIFORM_BLOCKS","MAX_FRAGMENT_UNIFORM_BLOCKS","MAX_COMBINED_UNIFORM_BLOCKS","MAX_UNIFORM_BUFFER_BINDINGS","MAX_UNIFORM_BLOCK_SIZE","MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS","MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS","UNIFORM_BUFFER_OFFSET_ALIGNMENT","ACTIVE_UNIFORM_BLOCKS","UNIFORM_TYPE","UNIFORM_SIZE","UNIFORM_BLOCK_INDEX","UNIFORM_OFFSET","UNIFORM_ARRAY_STRIDE","UNIFORM_MATRIX_STRIDE","UNIFORM_IS_ROW_MAJOR","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_ACTIVE_UNIFORMS","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","INVALID_INDEX","MAX_VERTEX_OUTPUT_COMPONENTS","MAX_FRAGMENT_INPUT_COMPONENTS","MAX_SERVER_WAIT_TIMEOUT","OBJECT_TYPE","SYNC_CONDITION","SYNC_STATUS","SYNC_FLAGS","SYNC_FENCE","SYNC_GPU_COMMANDS_COMPLETE","UNSIGNALED","SIGNALED","ALREADY_SIGNALED","TIMEOUT_EXPIRED","CONDITION_SATISFIED","WAIT_FAILED","SYNC_FLUSH_COMMANDS_BIT","VERTEX_ATTRIB_ARRAY_DIVISOR","ANY_SAMPLES_PASSED","ANY_SAMPLES_PASSED_CONSERVATIVE","SAMPLER_BINDING","RGB10_A2UI","INT_2_10_10_10_REV","TRANSFORM_FEEDBACK","TRANSFORM_FEEDBACK_PAUSED","TRANSFORM_FEEDBACK_ACTIVE","TRANSFORM_FEEDBACK_BINDING","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","TEXTURE_IMMUTABLE_FORMAT","MAX_ELEMENT_INDEX","TEXTURE_IMMUTABLE_LEVELS","MAX_TEXTURE_MAX_ANISOTROPY_EXT","WebMercatorProjection","mercatorAngleToGeodeticLatitude","mercatorAngle","MaximumLatitude","sinLatitude","WebMercatorTilingScheme","_rectangleSouthwestInMeters","_rectangleNortheastInMeters","semimajorAxisTimesPi","webMercatorPosition","WireframeIndexGenerator","hasOriginalIndices","originalIndicesCount","wireframeIndices","point0","point1","point2","createWireframeFromTriangleIndices","createWireframeFromTriangles","numberOfTriangles","wireframeIndicesCount","createWireframeFromTriangleStripIndices","createWireframeFromTriangleStrip","firstPoint","createWireframeFromTriangleFanIndices","createWireframeFromTriangleFan","originalCount","sourceLength","targetLength","removeDuplicatesEpsilon","wrapAround","storeRemovedIndices","cleanedValues","lastCleanIndex","removedIndexLCI","dot00","dot01","dot02","dot11","dot12","itemToFind","cesiumScriptRegex","tryMakeAbsolute","baseUrlString","CESIUM_BASE_URL","toUrlUndefined","toUrl","buildModuleUrl","getBaseUrlFromCesiumScript","buildModuleUrlFromRequireToUrl","buildModuleUrlFromBaseUrl","relativeUrl","_cesiumScriptRegex","_buildModuleUrlFromBaseUrl","_clearBaseResource","setBaseUrl","object1","object2","object1Defined","object2Defined","object1Value","object2Value","decodeGoogleEarthEnterpriseData","passThroughDataForTesting","keyView","dpend","dpend64","kpend","setUint8","scratchBVCartographic","scratchEncodedPosition","decoded","alt","decodedPosition","returnTrue","throwOnDestroyed","getAbsoluteUri","documentObject","_implementation","baseURI","relativeUri","uriObject","dataArray","imageData","context2DsByWidthAndHeight","context2DsByHeight","context2d","getStringFromTypedArray","decodeWithTextDecoder","decodeWithFromCharCode","codePoints","utfBytes","bytesSeen","bytesNeeded","lowerBoundary","upperBoundary","currentByte","utf8Handler","getTimestamp","performance","blobUriRegex","crossOriginIsolated","supportedTranscoderFormats","loadKTX2","resourceOrUrlOrBuffer","loadPromise","setKTX2SupportedFormats","s3tc","pvrtc","astc","etc","etc1","bc7","leftScratchArray","rightScratchArray","userDefinedObject","leftElement","rightElement","scratchLength","warnings","oneTimeWarning","geometryOutlines","geometryZIndex","geometryHeightReference","geometryExtrudedHeightReference","headerString","headerPairs","headerPair","scratchBarycentricCoords","subparts","resultValue","drainTileRequestQueue","tileRequests","rejectOnTileFail","tileRequest","createInterpolateFunction","tilePositions","createMarkFailedFunction","attemptConsumeNextQueueItem","interpolateAndAssignHeight","isMeshRequired","tileRequestSet","tilePromises","doSampling","sampleTerrainMostDetailed","byLevel","maxLevels","atLevel","positionsAtLevel","changedPositions","scaleToGeodeticSurfaceIntersection","scaleToGeodeticSurfaceGradient","oneOverRadiiX","oneOverRadiiY","oneOverRadiiZ","squaredNorm","oneOverRadiiSquaredX","oneOverRadiiSquaredY","oneOverRadiiSquaredZ","xMultiplier","yMultiplier","zMultiplier","xMultiplier2","yMultiplier2","zMultiplier2","xMultiplier3","yMultiplier3","zMultiplier3","numberOfArrays","webGLValue","oldFunction","newFunction","imageSmoothingEnabledName","strokeWidth","doublePadding","imageSmoothingEnabled","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","lineJoin","textString","metrics","measureText","minx","actualBoundingBoxAscent","actualBoundingBoxDescent","actualBoundingBoxLeft","isSpace","strokePadding","doubleStrokePadding","strokeColor","strokeText","fillColor","BillboardGraphics","_definitionChanged","_showSubscription","_imageSubscription","_scale","_scaleSubscription","_pixelOffset","_pixelOffsetSubscription","_eyeOffset","_eyeOffsetSubscription","_horizontalOrigin","_horizontalOriginSubscription","_verticalOrigin","_verticalOriginSubscription","_heightReference","_heightReferenceSubscription","_color","_colorSubscription","_rotationSubscription","_alignedAxis","_alignedAxisSubscription","_sizeInMeters","_sizeInMetersSubscription","_widthSubscription","_heightSubscription","_scaleByDistance","_scaleByDistanceSubscription","_translucencyByDistance","_translucencyByDistanceSubscription","_pixelOffsetScaleByDistance","_pixelOffsetScaleByDistanceSubscription","_imageSubRegion","_imageSubRegionSubscription","_distanceDisplayCondition","_distanceDisplayConditionSubscription","_disableDepthTestDistance","_disableDepthTestDistanceSubscription","_splitDirection","_splitDirectionSubscription","definitionChanged","pixelOffset","eyeOffset","horizontalOrigin","verticalOrigin","heightReference","alignedAxis","sizeInMeters","scaleByDistance","translucencyByDistance","pixelOffsetScaleByDistance","imageSubRegion","disableDepthTestDistance","splitDirection","defaultEyeOffset","defaultHeightReference","defaultPixelOffset","defaultAlignedAxis","defaultHorizontalOrigin","CENTER","defaultVerticalOrigin","defaultSplitDirection","eyeOffsetScratch","pixelOffsetScratch","scaleByDistanceScratch","translucencyByDistanceScratch","pixelOffsetScaleByDistanceScratch","distanceDisplayConditionScratch","EntityData","billboard","textureValue","BillboardVisualizer","entityCluster","entityCollection","collectionChanged","_onCollectionChanged","_cluster","_entityCollection","_items","returnPrimitive","removeBillboard","billboardGraphics","_billboard","isShowing","isAvailable","getValueOrDefault","getValueOrUndefined","isConstant","_clusterDirty","getBillboard","subRegion","setImageSubRegion","_clampedPosition","DONE","entities","BoundingSphereState","defaultOffset","scratchColor","BoxGeometryOptions","BoxGeometryUpdater","geometryPropertyName","observedPropertyNames","_onEntityPropertyChanged","DynamicBoxGeometryUpdater","geometryUpdater","groundPrimitives","terrainOffsetProperty","_terrainOffsetProperty","createFillGeometryInstance","_fillEnabled","_entity","_showProperty","_fillProperty","_distanceDisplayConditionProperty","_materialProperty","currentColor","computeModelMatrixForHeightReference","createOutlineGeometryInstance","_outlineEnabled","outlineColor","_outlineColorProperty","_showOutlineProperty","_computeCenter","_isHidden","_isDynamic","outlineWidth","_setStaticOptions","VERTEX_FORMAT","MaterialSupport","TEXTURED","DynamicGeometryUpdater","BoxGraphics","_dimensions","_dimensionsSubscription","_fillSubscription","_material","_materialSubscription","_outline","_outlineSubscription","_outlineColor","_outlineColorSubscription","_outlineWidth","_outlineWidthSubscription","_shadows","_shadowsSubscription","material","shadows","CallbackPositionProperty","referenceFrame","_isConstant","_referenceFrame","setCallback","timeScratch","getValueInReferenceFrame","convertToReferenceFrame","CallbackProperty","Cesium3DTilesetGraphics","_uri","_uriSubscription","_maximumScreenSpaceError","_maximumScreenSpaceErrorSubscription","maximumScreenSpaceError","modelMatrixScratch","Cesium3DTilesetVisualizer","_primitives","_tilesetHash","_entitiesToVisualize","removeTileset","visualizer","tilesetHash","tilesetData","tilesetPrimitive","removeAndDestroy","createTileset","loadFail","tileset","tilesetGraphics","_tileset","computeModelMatrix","defaultEvenColor","defaultOddColor","defaultRepeat","CheckerboardMaterialProperty","_evenColor","_evenColorSubscription","_oddColor","_oddColorSubscription","_repeatSubscription","evenColor","oddColor","lightColor","getValueOrClonedDefault","darkColor","ColorMaterialProperty","entityOptionsScratch","entityIdScratch","propertyNames","propertyNamesLength","subscribeToEntity","eventHash","collectionId","CompositeEntityCollection","_onDefinitionChanged","unsubscribeFromEntity","recomposite","_shouldRecomposite","_suspendCount","collections","_collections","collectionsLength","collectionsCopy","_collectionsCopy","collectionsCopyLength","iEntities","composite","_composite","newEntities","_eventHash","compositeEntity","getById","suspendEvents","newEntitiesArray","resumeEvents","owner","_owner","getCollectionIndex","swapCollections","_collectionChanged","addCollection","hasIndex","removeCollection","removeAllCollections","containsCollection","indexOfCollection","getCollection","getCollectionsLength","raiseCollection","lowerCollection","raiseCollectionToTop","lowerCollectionToBottom","removedLength","removedEntity","removedId","removeById","addedLength","addedEntity","addedId","compositeProperty","newProperty","innerEntity","addProperty","CompositeMaterialProperty","_raiseDefinitionChanged","innerProperty","CompositePositionProperty","CompositeProperty","_eventHelper","_intervalsChanged","eventHelper","subscribeAll","ConstantPositionProperty","setValue","ConstantProperty","_hasClone","_hasEquals","isDefined","hasClone","hasEquals","CorridorGeometryOptions","CorridorGeometryUpdater","corridor","DynamicCorridorGeometryUpdater","_onTerrain","heightValue","heightReferenceValue","extrudedHeightValue","extrudedHeightReferenceValue","extrudedHeightReference","computeGeometryOffsetAttribute","getGeometryHeight","getGeometryExtrudedHeight","CLAMP_TO_GROUND","CorridorGraphics","_positionsSubscription","_extrudedHeightSubscription","_extrudedHeightReference","_extrudedHeightReferenceSubscription","_cornerTypeSubscription","_granularitySubscription","_classificationType","_classificationTypeSubscription","_zIndexSubscription","classificationType","CustomDataSource","_changed","_error","_isLoading","_entityCluster","isLoading","setLoading","loadingEvent","clustering","CylinderGeometryOptions","CylinderGeometryUpdater","cylinder","DynamicCylinderGeometryUpdater","CylinderGraphics","_lengthSubscription","_topRadiusSubscription","_bottomRadiusSubscription","_numberOfVerticalLinesSubscription","_slicesSubscription","UnitCartesian3","currentId","createReferenceProperty","referenceString","createSpecializedProperty","packetData","velocityReference","referenceProperty","scratchSpherical","scratchTimeInterval","scratchQuaternion","unwrapUriInterval","czmlInterval","sourceUri","unwrapCartesianInterval","cartesianVelocity","unitCartesian","unitSpherical","convertUnitSphericalToCartesian","convertSphericalToCartesian","cartographicRadians","convertCartographicRadiansToCartesian","cartographicDegrees","convertCartographicDegreesToCartesian","normalizePackedCartesianArray","normalizePackedQuaternionArray","getPropertyType","HERMITE","LAGRANGE","updateInterpolationSettings","interpolationAlgorithm","interpolationDegree","setInterpolationOptions","forwardExtrapolationType","forwardExtrapolationDuration","backwardExtrapolationType","backwardExtrapolationDuration","iso8601Scratch","intervalFromString","intervalString","wrapPropertyInInfiniteInterval","convertPropertyToComposite","convertPositionPropertyToComposite","processProperty","constrainedInterval","unwrappedInterval","unwrappedIntervalLength","combinedInterval","isValue","hasInterval","removePropertyData","isSampled","unwrapUnitCartesianInterval","rgbaf","unwrapColorInterval","colorBlendMode","labelStyle","unitQuaternion","unwrapQuaternionInterval","portionToDisplay","shadowMode","stripeOrientation","wsen","wsenDegrees","unwrapRectangleInterval","unwrapInterval","needsUnpacking","packetEpoch","addSamplesPackedArray","removeSamples","processPacketData","processPositionProperty","numberOfDerivatives","removePositionPropertyData","processPositionPacketData","processShapePacketData","references","processReferencesArrayPacketData","processMaterialProperty","existingMaterial","existingInterval","materialData","thisIntervals","solidColor","cellAlpha","lineThickness","lineOffset","transparent","polylineOutline","polylineGlow","glowPower","taperPower","polylineArrow","polylineDash","gapColor","dashLength","dashPattern","checkerboard","processMaterialPacketData","PropertyArrayType","CompositePropertyArrayType","processArrayPacketData","processArray","processPositionArrayPacketData","processPositionArray","unpackCartesianArray","unpackCartographicRadiansArray","unpackCartographicDegreesArray","processPositionArrayOfArraysPacketData","referenceArray","tempObj","processNodeTransformations","nodeTransformationsData","nodeTransformations","nodeNames","nodeTransformationData","hasProperty","nodeTransformation","processArticulations","articulationsData","articulations","articulationStageData","PolygonHierarchyProperty","adaptFollowSurfaceToArcType","followSurface","processCzmlPacket","packet","updaterFunctions","dataSource","objectId","_version","documentPacket","_documentPacket","clockPacket","processDocument","getOrCreateEntity","parentId","czml","resourceCredits","_resourceCredits","DocumentPacket","CzmlDataSource","_processCzml","raiseChangedEvent","totalSeconds","updateClock","loadCzml","_holes","updaters","billboardData","processAlignedAxis","boxData","corridorData","cylinderData","ellipseData","ellipsoidData","labelData","showBackground","backgroundPadding","modelData","minimumPixelSize","maximumScale","incrementallyLoadTextures","runAnimations","clampAnimations","silhouetteColor","silhouetteSize","colorBlendAmount","nameData","descriptionData","pathData","leadTime","trailTime","resolution","pointData","pixelSize","polygonData","processPositionArrayOfArrays","polylineData","polyline","depthFailMaterial","clampToGround","adapterFunction","polylineVolumeData","polylineVolume","processShape","propertiesData","propertyData","rectangleData","positionData","viewFromData","viewFrom","wallData","orientationData","registerUpdater","unregisterUpdater","DataSource","DataSourceClock","_startTime","_stopTime","_clockRange","DataSourceCollection","_dataSources","_dataSourceAdded","_dataSourceRemoved","_dataSourceMoved","getIndex","dataSources","swapDataSources","dataSourceMoved","dataSourceAdded","dataSourceRemoved","getByName","raise","lowerToBottom","DataSourceDisplay","dataSourceCollection","initializeTerrainHeights","_onDataSourceAdded","_onDataSourceRemoved","_onDataSourceMoved","postRender","_postRender","_dataSourceCollection","_visualizersCallback","visualizersCallback","defaultVisualizersCallback","primitivesAdded","_groundPrimitives","defaultDataSource","removeDefaultDataSourceListener","removeDataSourceCollectionListener","_defaultDataSource","addPrimitives","_removeDefaultDataSourceListener","_removeDataSourceCollectionListener","_ready","ExtraVisualizers","registerVisualizer","unregisterVisualizer","VisualizerClass","visualizers","vLength","_visualizers","requestRender","addCreditToNextFrame","creditCount","getBoundingSphereArrayScratch","getBoundingSphereBoundingSphereScratch","allowPartial","visualizersLength","displayPrimitives","displayGroundPrimitives","_initialize","DynamicGeometryBatch","orderedGroundPrimitives","_orderedGroundPrimitives","_dynamicUpdaters","createDynamicUpdater","dynamicUpdater","removeAllPrimitives","_primitive","_outlinePrimitive","_geometryUpdater","onTerrain","_geometryPropertyName","shadowsProperty","fillMaterialProperty","isColorAppearance","appearance","_getIsClosed","_supportsMaterialsforEntitiesOnTerrain","translucent","isTranslucent","geometryInstances","asynchronous","classificationTypeProperty","fillInstance","outlineInstance","renderState","clampLineWidth","outlinePrimitive","getGeometryInstanceAttributes","EllipseGeometryOptions","EllipseGeometryUpdater","DynamicEllipseGeometryUpdater","EllipseGraphics","_semiMajorAxisSubscription","_semiMinorAxisSubscription","_stRotationSubscription","defaultMaterial","radiiScratch","innerRadiiScratch","unitSphere","EllipsoidGeometryOptions","EllipsoidGeometryUpdater","DynamicEllipsoidGeometryUpdater","_modelMatrix","_attributes","_outlineAttributes","_lastSceneMode","_lastShow","_lastOutlineShow","_lastOutlineWidth","_lastOutlineColor","_lastOffset","skipModelMatrix","modelMatrixResult","showOutline","sceneMode","in3D","distanceDisplayConditionProperty","_lastDistanceDisplayCondition","outlineAttributes","EllipsoidGraphics","_radiiSubscription","_innerRadiiSubscription","_minimumClockSubscription","_maximumClockSubscription","_minimumConeSubscription","_maximumConeSubscription","_stackPartitionsSubscription","_slicePartitionsSubscription","_subdivisionsSubscription","ExtraPropertyNames","createPropertyTypeDescriptor","Entity","_trackingReferenceFrame","trackingReferenceFrame","_propertyNames","_billboardSubscription","_boxSubscription","_corridor","_corridorSubscription","_cylinder","_cylinderSubscription","_description","_descriptionSubscription","_ellipse","_ellipseSubscription","_ellipsoidSubscription","_labelSubscription","_modelSubscription","_tilesetSubscription","_orientationSubscription","_pathSubscription","_planeSubscription","_point","_pointSubscription","_polygon","_polygonSubscription","_polyline","_polylineSubscription","_polylineVolume","_polylineVolumeSubscription","_positionSubscription","_properties","_propertiesSubscription","_rectangleSubscription","_viewFrom","_viewFromSubscription","_wall","_wallSubscription","updateShow","childShow","wasShowing","registerEntityType","sourcePropertyNames","targetProperty","sourceProperty","orientationScratch","heightReferenceProperty","supportsMaterialsforEntitiesOnTerrain","supportsMaterials","supportsPolylinesOnTerrain","ARRAY_TYPES","KDBush","versionAndType","ArrayType","numItems","IndexArrayType","arrayTypeIndex","coordsByteSize","idsByteSize","padCoords","numAdded","sqDist","swapItem","EntityCluster","_enabled","_pixelRange","pixelRange","_minimumClusterSize","minimumClusterSize","_clusterBillboards","clusterBillboards","_clusterLabels","clusterLabels","_clusterPoints","clusterPoints","_labelCollection","_billboardCollection","_pointCollection","_clusterBillboardCollection","_clusterLabelCollection","_clusterPointCollection","_collectionIndicesByEntity","_unusedLabelIndices","_unusedBillboardIndices","_unusedPointIndices","_previousClusters","_previousHeight","_enabledDirty","_removeEventListener","_clusterEvent","expandBoundingBox","labelBoundingBoxScratch","Label","getScreenSpaceBoundingBox","Billboard","_pointPrimitiveCollection","PointPrimitive","hasLabelIndex","labelIndex","labelBBox","addNonClusteredItem","clusterShow","addCluster","entityId","getScreenSpacePositions","SceneMode","canClusterLabels","canClusterBillboards","canClusterPoints","computeScreenSpacePosition","clustered","pointBoundinRectangleScratch","totalBoundingRectangleScratch","neighborBoundingRectangleScratch","createGetEntity","collectionProperty","CollectionConstructor","unusedIndicesProperty","entityIndexProperty","entityItem","entityIndices","billboardIndex","unusedIndices","removeEntityIndicesIfUnused","disableCollectionClustering","amount","labelCollection","billboardCollection","pointCollection","clusteredLabelCollection","clusteredBillboardCollection","clusteredPointCollection","LabelCollection","BillboardCollection","PointPrimitiveCollection","clusters","newClusters","previousHeight","currentHeight","positionWC","neighbors","neighborLength","neighborIndex","neighborPoint","collectionIndex","_computeScreenSpacePosition","minimumWidth","totalBBox","clusterPosition","neighborItem","neighborBBox","clusterEvent","removeLabel","removePoint","commandList","_pixelRangeDirty","_minimumClusterSizeDirty","fireChangedEvent","_firing","_refire","_addedEntities","_removedEntities","_changedEntities","addedArray","removedArray","changedArray","EntityCollection","_entities","oldShows","entitiesLength","oldShow","_onEntityDefinitionChanged","addedEntities","existingItem","existingItemId","addedItem","updateTransformMatrix3Scratch1","updateTransformMatrix3Scratch2","updateTransformMatrix3Scratch3","updateTransformMatrix4Scratch","updateTransformCartesian3Scratch1","updateTransformCartesian3Scratch2","updateTransformCartesian3Scratch3","updateTransformCartesian3Scratch4","updateTransformCartesian3Scratch5","updateTransformCartesian3Scratch6","updateTransformOrientationScratch","velocityScratch","rotationScratch","deltaTime","EntityView","_lastEntity","_lastCartesian","_defaultOffset3D","_velocityProperty","_offset3D","defaultOffset3D","scratchHeadingPitchRange","MORPHING","positionProperty","velocityProperty","orientationProperty","objectChanged","sceneModeChanged","updateLookAt","saveCamera","viewFromProperty","hasViewFrom","viewBoundingSphere","SCENE2D","xBasis","yBasis","zBasis","hasBasis","invertVelocity","deltaCartesian","toInertial","toInertialDelta","inertialCartesian","inertialDeltaCartesian","inertialVelocity","GRAVITATIONALPARAMETER","_setTransform","lookAtTransform","updateTransform","topology","feature","arcs","defaultCrsFunction","crsNames","crsLinkHrefs","crsLinkTypes","defaultMarkerSymbol","defaultMarkerSize","defaultMarkerColor","defaultStroke","defaultStrokeWidth","defaultFill","defaultClampToGround","large","simpleStyleIdentifiers","defaultDescribe","nameProperty","defaultDescribeProperty","describe","createDescriptionCallback","createObject","geoJson","finalId","createGuid","namePropertyPrecedence","lowerKey","coordinatesArrayToCartesianArray","crsFunction","geoJsonObjectTypes","Feature","processFeature","FeatureCollection","featureCollection","notUsed","GeometryCollection","processGeometryCollection","LineString","processLineString","MultiLineString","processMultiLineString","MultiPoint","processMultiPoint","MultiPolygon","processMultiPolygon","processPoint","Polygon","processPolygon","Topology","processTopology","geometryTypes","geometryHandler","geometryCollection","createPoint","markerSymbol","markerColor","cssColor","canvasOrPromise","_pinBuilder","VerticalOrigin","HeightReference","createLineString","strokeMaterialProperty","widthProperty","strokeWidthProperty","polylineGraphics","PolylineGraphics","ArcType","lineStrings","createPolygon","outlineColorProperty","materialColor","PolygonGraphics","PolygonHierarchy","typeHandler","GeoJsonDataSource","getFilenameFromUri","defaultShow","defaultOutline","defaultOutlineColor","defaultShadows","DISABLED","defaultDistanceDisplayCondition","defaultClassificationType","BOTH","GeometryUpdater","_isClosed","_dynamic","_geometryChanged","_shadowsProperty","_classificationTypeProperty","_observedPropertyNames","fillEnabled","hasConstantFill","outlineEnabled","hasConstantOutline","geometryChanged","isOutlineVisible","isFilled","_isOnTerrain","fillProperty","outlineProperty","geometryUpdaters","GeometryUpdaterSet","_removeEntitySubscription","GeometryVisualizer","_addedObjects","_removedObjects","_changedObjects","numberOfShadowModes","NUMBER_OF_SHADOW_MODES","_outlineBatches","_closedColorBatches","_closedMaterialBatches","_openColorBatches","_openMaterialBatches","numberOfClassificationTypes","NUMBER_OF_CLASSIFICATION_TYPES","groundColorBatches","groundMaterialBatches","_groundColorBatches","_groundMaterialBatches","_dynamicBatch","_batches","_subscriptions","_updaterSets","addedObjects","removedObjects","changedObjects","updaterSet","_removeUpdater","_insertUpdaterIntoBatch","_onGeometryChanged","isUpdated","batches","batchesLength","subscriptions","updaterSets","autolinker","linker","BILLBOARD_NEAR_DISTANCE","BILLBOARD_FAR_DISTANCE","gpx","queryStringAttribute","readCoordinateFromNode","queryNumericAttribute","queryNumericValue","queryFirstNode","localName","queryNodes","resultNode","queryStringValue","createDefaultBillboard","createDefaultPolyline","descriptiveInfoTypes","scratchDiv","processDescription","infoTypeNames","infoTypeName","infoType","foreground","processWpt","geometryNode","waypointImage","FILL_AND_OUTLINE","createDefaultLabel","processTrkSeg","trackPoints","getPerson","personNode","person","getLink","emailNode","linkNode","getCopyright","copyrightNode","getBounds","boundsNode","complexTypes","wpt","routePoints","coordinateTuples","routeColor","trk","trackSegs","trackSegInfo","isTimeDynamic","addSamples","trackColor","loadGpx","metadataNode","processMetadata","complexTypeNames","complexTypeNamesLength","typeName","processComplexTypeNode","processGpx","isMinStart","isMaxStop","_creator","old","dec","GpxDataSource","oldName","dataToLoad","readAsText","defaultLineCount","defaultLineOffset","defaultLineThickness","GridMaterialProperty","_cellAlpha","_cellAlphaSubscription","_lineCount","_lineCountSubscription","_lineThickness","_lineThicknessSubscription","_lineOffset","_lineOffsetSubscription","defaultZIndex","GroundGeometryUpdater","extrudedHeightReferenceProperty","centerPosition","RELATIVE_TO_GROUND","ImageMaterialProperty","_transparent","_transparentSubscription","MimeTypes","avi","bz2","chm","dvi","flv","htm","jnlp","jpg","m3u","m4v","mathml","midi","mov","mp3","mp4v","mpeg","mpg","odp","ods","odt","ogg","pdf","pps","ppt","rdf","rss","rtf","swf","tif","wav","wma","wmv","detectFromFilename","BILLBOARD_SIZE","kmlNamespaces","gxNamespaces","kml","atom","kmlgx","featureTypes","Document","Folder","processingData","newProcessingData","parentEntity","Placemark","placemark","styleEntity","hasGeometry","geometryProcessor","processPositionGraphics","NetworkLink","networkEntity","sourceResource","uriResolver","viewRefreshMode","viewBoundScale","newSourceUri","resolveHref","defaultViewFormat","viewFormat","httpQuery","cleanupString","processNetworkLinkQueryString","_lastCameraView","screenOverlayContainer","networkLinkCollection","newEntity","mergeAvailabilityWithParent","refreshMode","refreshInterval","networkLinkControl","hasNetworkLinkControl","networkLinkInfo","cookie","lastUpdated","updating","needsUpdate","cameraUpdateTime","minRefreshPeriod","RefreshMode","expires","_networkLinks","addPromise","GroundOverlay","groundOverlay","isLatLonQuad","readCoordinates","createDefaultPolygon","latLonBox","rotationRadians","iconNode","getIconHref","queryColorValue","altitudeMode","PhotoOverlay","processUnsupportedFeature","ScreenOverlay","screenOverlayNode","screenOverlay","_screenOverlays","screenXY","overlayXY","xUnit","yUnit","xStyle","yStyle","xOrigin","yOrigin","Tour","tour","playlistNode","entryNode","playlistNodeProcessor","playlistNodeProcessors","_kmlTours","DeferredLoading","_dataSource","_deferred","_timeoutSet","_used","_started","_timeThreshold","insertNamespaces","namespaceMap","xsi","firstPart","lastPart","reg","declaration","removeDuplicateNamespaces","endDeclaration","loadDataUriFromZip","dataUri","embedDataUris","elementType","baseUri","applyBasePath","createEntity","KmlFeatureData","isExtrudable","gxAltitudeMode","readCoordinate","tuples","getElementsByTagNameNS","queryChildNodes","queryBooleanValue","isFirstCall","KmlDataSource","_getTimestamp","_giveUpTime","_nextNode","_pop","featureProcessor","colorOptions","parseColorString","isRandom","canRefresh","palette","hrefResource","processBillboardIcon","targetEntity","hotSpotNode","hotSpotX","hotSpotY","hotSpotXUnit","hotSpotYUnit","applyStyle","styleNode","textColor","balloonStyle","listItemType","processExternalStyles","styleCollection","styleKml","processStyles","styleNodes","styleNodesLength","styleMaps","styleMapsLength","styleMap","styleUrl","styleUrlNodes","styleUrlNodesLength","styleReference","createDropLine","entityPosition","heightReferenceFromAltitudeMode","createPositionPropertyFromAltitudeMode","_clampToGround","processPathGraphics","processLineStringOrLinearRing","coordinatesNode","tessellate","canExtrude","propertiesLength","createPositionPropertyArrayFromAltitudeMode","addToMultiTrack","dropShowProperty","includeEndPoints","coordinatesString","LinearRing","outerBoundaryIsNode","linearRingNode","innerBoundaryIsNodes","Track","coordNodes","angleNodes","timeNodes","MultiTrack","trackNodes","lastStop","lastStopPosition","needDropLine","trackNode","MultiGeometry","childEntity","Model","featureNode","kmlData","placeMark","styleIndex","inlineStyleNode","externalStyle","computeFinalStyle","beginNode","beginDate","processTimeSpan","whenString","when","processTimeStamp","ancestryIsVisible","authorNode","hreflang","phoneNumber","snippet","extendedDataNode","dataNodes","dataNode","extendedData","processExtendedData","isDisplayName","processLookAt","processCamera","FlyTo","flyToMode","flyto","addPlaylistEntry","Wait","SoundCue","processTourUnsupportedNode","AnimatedUpdate","TourControl","viewPoint","_unsupportedNode","sFirst","zeroRectangle","fixLatitude","fixLongitude","centerCartographic","pickEllipsoid","newHalfWidth","newHalfHeight","horizFov","vertFov","loadKml","_DeferredLoading","processFeatureNode","magicBlob","isZipFile","isZip","zWorkerUri","zWasmUri","workerURI","wasmURI","getEntries","docEntry","loadXmlFromZip","loadKmz","readBlobAsText","directionWC","upWC","computeViewRectangle","parentAvailability","childAvailability","refreshEvent","unsupportedNodeEvent","kmlTours","entitiesToIgnore","networkLinks","recurseIgnoreEntities","cameraViewUpdate","lastCameraView","newNetworkLinks","networkLink","doUpdate","newEntityCollection","processedHref","networkLinkEntity","entitiesCopy","entityToRemove","getNetworkLinkUpdateCallback","headingPitchRange","KmlTour","playlistIndex","playlist","tourStart","tourEnd","entryStart","entryEnd","_activeEntries","cancelAllEntries","activeEntries","playEntry","cameraOptions","allDone","_playNext","playNext","blocking","terminated","KmlTourFlyTo","activeCamera","activeCallback","getCameraOptions","flyTo","flyToBoundingSphere","cancelFlight","easingFunction","KmlTourWait","LabelGraphics","_textSubscription","_font","_fontSubscription","_style","_styleSubscription","_showBackground","_showBackgroundSubscription","_backgroundColor","_backgroundColorSubscription","_backgroundPadding","_backgroundPaddingSubscription","_fillColor","_fillColorSubscription","defaultStyle","FILL","defaultFillColor","defaultBackgroundColor","defaultBackgroundPadding","fillColorScratch","outlineColorScratch","backgroundColorScratch","backgroundPaddingScratch","LabelVisualizer","labelGraphics","updateClamping","_updateClamping","MaterialProperty","materialProperty","fromType","uniforms","ColorType","createNodeTransformationProperty","ModelGraphics","_hasVerticalExaggeration","_hasVerticalExaggerationSubscription","_enableVerticalExaggeration","_enableVerticalExaggerationSubscription","_minimumPixelSize","_minimumPixelSizeSubscription","_maximumScale","_maximumScaleSubscription","_incrementallyLoadTextures","_incrementallyLoadTexturesSubscription","_runAnimations","_runAnimationsSubscription","_clampAnimations","_clampAnimationsSubscription","_silhouetteColor","_silhouetteColorSubscription","_silhouetteSize","_silhouetteSizeSubscription","_colorBlendMode","_colorBlendModeSubscription","_colorBlendAmount","_colorBlendAmountSubscription","_imageBasedLightingFactor","_imageBasedLightingFactorSubscription","_environmentMapOptions","_environmentMapOptionsSubscription","_lightColor","_lightColorSubscription","_nodeTransformations","_nodeTransformationsSubscription","_articulations","_articulationsSubscription","_clippingPlanes","_clippingPlanesSubscription","_customShader","_customShaderSubscription","enableVerticalExaggeration","imageBasedLightingFactor","environmentMapOptions","clippingPlanes","customShader","sourceNodeTransformations","targetNodeTransformations","sourceArticulations","targetArticulations","ENABLED","defaultSilhouetteColor","defaultColorBlendMode","HIGHLIGHT","defaultImageBasedLightingFactor","defaultEnvironmentMapOptions","maximumPositionEpsilon","nodeMatrixScratch","scratchArray","ModelVisualizer","_modelHash","createModelPrimitive","modelHash","fromGltfAsync","modelPrimitive","loadFailed","modelGraphics","animationsRunning","nodeTransformationsScratch","articulationsScratch","modelUpdated","environmentMapOptionsScratch","imageBasedLighting","activeAnimations","addAll","nodeLength","modelNode","getNode","transformationMatrix","originalMatrix","anyArticulationUpdated","articulationStageKeys","numKeys","articulationStageValue","setArticulationStage","applyArticulations","removeModel","clearNodeTransformationsArticulationsScratch","cartoPosition","defaultNodeTransformation","NodeTransformationProperty","_translation","_translationSubscription","PathGraphics","_leadTime","_leadTimeSubscription","_trailTime","_trailTimeSubscription","_resolution","_resolutionSubscription","subSampleCompositePropertyScratch","subSampleIntervalPropertyScratch","reallySubSample","maximumStep","resolvedProperty","steppedOnNow","sampleStepsToTake","sampleStepsTaken","sampleStepSize","sampling","secondsUntilNext","subSampleSampledProperty","_property","subSampleCallbackPositionProperty","intervalStart","intervalStop","sampleStart","sampleStop","subSampleCompositeProperty","subSampleIntervalProperty","subSampleConstantProperty","stepSize","subSampleGenericProperty","subSample","toFixedScratch","PolylineUpdater","_unusedIndexes","_polylineCollection","PathVisualizer","_updaters","updateObject","pathGraphics","showProperty","hasLeadTime","hasTrailTime","unusedIndexes","removeObject","lastUpdater","frameToVisualize","currentUpdater","_subSample","PlaneGeometryOptions","PlaneGeometryUpdater","DynamicPlaneGeometryUpdater","distanceDisplayConditionAttribute","planeGraphics","createPrimitiveMatrix","isColorMaterial","scratchAxis","scratchUp","scratchTranslation","scratchLocalTransform","rotationScaleMatrix","localTransform","PlaneGraphics","PointGraphics","_pixelSize","_pixelSizeSubscription","pointPrimitive","PointVisualizer","pointGraphics","needsRedraw","newColor","newOutlineColor","newOutlineWidth","newPixelSize","centerAlpha","cssOutlineColor","textureId","setImage","heightAndPerPositionHeightWarning","heightReferenceAndPerPositionHeightWarning","scratch2DPositions","cart2Scratch","PolygonGeometryOptions","PolygonGeometryUpdater","DyanmicPolygonGeometryUpdater","centroid2D","perPositionHeightProperty","perPositionHeightEnabled","hierarchyValue","perPositionHeightValue","isExtruded","_hierarchy","_hierarchySubscription","_perPositionHeightSubscription","_closeTopSubscription","_closeBottomSubscription","_arcTypeSubscription","_textureCoordinatesSubscription","PolylineArrowMaterialProperty","defaultGapColor","PolylineDashMaterialProperty","_gapColor","_gapColorSubscription","_dashLength","_dashLengthSubscription","_dashPattern","_dashPatternSubscription","polylineCollections","GeometryOptions","GroundGeometryOptions","PolylineGeometryUpdater","_entitySubscription","_depthFailMaterialProperty","_geometryOptions","_groundGeometryOptions","_supportsPolylinesOnTerrain","depthFailMaterialProperty","depthFailColor","positionsProperty","groundGeometryOptions","generateCartesianArcOptions","_groundPolylinePrimitive","getLine","dynamicGeometryUpdater","polylineCollectionId","_guid","polylineCollection","globe","groundPolylinePrimitive","PolylineGlowMaterialProperty","_glowPower","_glowPowerSubscription","_taperPower","_taperPowerSubscription","_glow","_depthFailMaterial","_depthFailMaterialSubscription","_clampToGroundSubscription","PolylineOutlineMaterialProperty","removeUpdater","insertUpdaterIntoBatch","_groundBatches","_colorBatches","_materialBatches","PolylineVisualizer","PolylineVolumeGeometryOptions","PolylineVolumeGeometryUpdater","DynamicPolylineVolumeGeometryUpdater","PolylineVolumeGraphics","_shapeSubscription","_distanceDisplayConditionSubsription","PositionProperty","scratchMatrix3","inputFrame","outputFrame","icrfToFixed","PositionPropertyArray","itemValue","arrayEquals","Property","valueDefault","PropertyArray","PropertyBag","createPropertyCallback","createConstantProperty","aPropertyNames","bPropertyNames","aIndex","propertiesEqual","scratchCenterRect","scratchCarto","RectangleGeometryOptions","RectangleGeometryUpdater","DynamicRectangleGeometryUpdater","RectangleGraphics","_coordinates","_coordinatesSubscription","_distancedisplayConditionSubscription","_targetProperty","_targetEntity","_targetCollection","_targetId","ReferenceProperty","_onTargetEntityDefinitionChanged","targetPropertyNames","_targetPropertyNames","targetCollection","targetId","inIdentifier","isEscaped","otherNames","Rotation","SampledPositionProperty","derivativeTypes","_numberOfDerivatives","addSample","derivatives","packedSamples","removeSample","PackableNumber","arrayInsert","itemsLength","convertDate","timesSpliceArgs","valuesSpliceArgs","mergeNewSamples","prevItem","timesInsertionPoint","valuesInsertionPoint","nextTime","newDataIndex","timesSpliceArgsCount","valuesSpliceArgsCount","SampledProperty","innerType","innerDerivativeTypes","derivativeType","derivativePackedLength","_innerType","_interpolationDegree","_interpolationAlgorithm","_numberOfPoints","_yTable","_packedLength","_packedInterpolationLength","_updateTableLength","_interpolationResult","_derivativeTypes","_innerDerivativeTypes","_inputOrder","_forwardExtrapolationType","_forwardExtrapolationDuration","_backwardExtrapolationType","_backwardExtrapolationDuration","numberToRemove","timesLength","endTime","computedFirstIndex","computedLastIndex","destinationIndex","sourceIndex","interpolationResult","valuesChanged","hasDerivatives","derivativesLength","derivativeValues","getSample","otherDerivativeTypes","otherTimes","otherValues","_mergeNewSamples","ScaledPositionProperty","_removeSubscription","Batch","appearanceType","depthFailAppearanceType","removeMaterialSubscription","createPrimitive","waitingOnCreate","oldPrimitive","updatersWithAttributes","showsUpdated","itemsToRemove","invalidated","onMaterialChanged","StaticGeometryColorBatch","_solidItems","_translucentItems","_appearanceType","_depthFailAppearanceType","moveItems","itemsMoved","itemsToMoveLength","updateItems","updatersLength","isMaterial","updaterMaterial","unsubscribe","removedCount","depthFailAppearance","colorProperty","resultColor","_lastColor","depthFailColorProperty","depthColor","_lastDepthFailColor","offsetProperty","updateShows","solidsMoved","translucentsMoved","updaterDepthFailMaterial","StaticGeometryPerMaterialBatch","rectangleCollisionCheck","StaticGroundGeometryColorBatch","overlapping","batchCount","oldBatch","newBatch","usingSphericalTextureCoordinates","StaticGroundGeometryPerMaterialBatch","shouldUseSphericalCoordinates","_asynchronous","StaticGroundPolylinePerMaterialBatch","StaticOutlineGeometryBatch","_solidBatches","_translucentBatches","solidBatches","solidBatchesLength","translucentBatches","translucentBatchesLength","needUpdate","solidsToMoveLength","translucentToMoveLength","solidBatch","translucentBatch","defaultOrientation","HORIZONTAL","StripeMaterialProperty","_offsetSubscription","VERTICAL","TerrainOffsetProperty","_positionProperty","_cartographicPosition","_normal","_terrainHeight","_removeCallbackFunc","_removeModeListener","terrainProviderChanged","morphComplete","cartographicPosition","updateHeight","clampedPosition","TimeIntervalCollectionPositionProperty","TimeIntervalCollectionProperty","VelocityOrientationProperty","_velocityVectorProperty","_subscription","_getValue","VelocityVectorProperty","_normalize","position1Scratch","position2Scratch","timeNowScratch","velocityResult","positionResult","Visualizer","WallGeometryOptions","WallGeometryUpdater","DynamicWallGeometryUpdater","WallGraphics","_minimumHeightsSubscription","_maximumHeightsSubscription","createMaterialProperty","HTMLVideoElement","privateName","subscriptionName","subscription","createProperty","createRawProperty","gxNamespace","ExternalFileHandler","modelCallback","_files","_modelCallback","imageTypeRegex","getModelBlobHander","ValueGetter","_time","StyleCache","_ids","_styles","IdManager","exportKml","kmz","_createState","rootEntities","kmlDoc","kmlElement","kmlDocumentElement","recurseEntities","styleCache","externalFileHandler","kmlString","externalFiles","blobWriter","addExternalFilesToZip","createKmz","valueGetter","idManager","timeSpan","createModel","createBasicElementWithText","overlayIndex","geometryCount","getColor","styleCount","multigeometry","geometryIndex","folderNode","regexResult","toBlob","defaultVal","colorToString","getMaterialType","parentElement","firstElement","entityAvailability","defaultAvailability","sampleDuration","entityPositionProperty","createTracks","getCoordinates","pointGeometry","getAltitudeMode","iconStyle","createIconStyleFromBillboard","createIconStyleFromPoint","useEntityPositionProperty","isModel","tracks","trackAltitudeMode","positionTimes","constCoordinates","stopDate","trackGeometry","createModelGeometry","multiTrackGeometry","lineStyle","processMaterial","hotSpot","lineStringGeometry","altitudeModeText","getLinearRing","coordinateStrings","linearRing","isRectangle","rectangleGraphics","createGroundOverlay","boundaries","coordinatesProperty","cornerFunction","outerBoundaryIs","getRectangleBoundaries","polygonGraphics","hierarchyProperty","holeCount","innerBoundaryIs","getPolygonBoundaries","boundaryCount","polyStyle","modelGeometry","scaleElement","elementValue","createCDATASection","viewerPositionWCScratch","AutomaticUniform","datatypeToGlsl","getDeclaration","AutomaticUniforms","czm_viewport","uniformState","viewportCartesian4","czm_viewportOrthographic","viewportOrthographic","czm_viewportTransformation","czm_globeDepthTexture","globeDepthTexture","czm_edgeIdTexture","edgeIdTexture","czm_edgeColorTexture","edgeColorTexture","czm_edgeDepthTexture","edgeDepthTexture","czm_model","czm_inverseModel","inverseModel","czm_view","czm_view3D","view3D","czm_viewRotation","viewRotation","czm_viewRotation3D","viewRotation3D","czm_inverseView","czm_inverseView3D","inverseView3D","czm_inverseViewRotation","inverseViewRotation","czm_inverseViewRotation3D","inverseViewRotation3D","czm_projection","czm_inverseProjection","inverseProjection","czm_infiniteProjection","infiniteProjection","czm_modelView","modelView","czm_modelView3D","modelView3D","czm_modelViewRelativeToEye","modelViewRelativeToEye","czm_inverseModelView","inverseModelView","czm_inverseModelView3D","inverseModelView3D","czm_viewProjection","czm_inverseViewProjection","czm_modelViewProjection","modelViewProjection","czm_inverseModelViewProjection","inverseModelViewProjection","czm_modelViewProjectionRelativeToEye","modelViewProjectionRelativeToEye","czm_modelViewInfiniteProjection","modelViewInfiniteProjection","czm_orthographicIn3D","orthographicIn3D","czm_normal","czm_normal3D","normal3D","czm_inverseNormal","inverseNormal","czm_inverseNormal3D","inverseNormal3D","czm_eyeHeight","eyeHeight","czm_eyeHeight2D","eyeHeight2D","czm_eyeEllipsoidNormalEC","eyeEllipsoidNormalEC","czm_eyeEllipsoidCurvature","eyeEllipsoidCurvature","czm_modelToEnu","modelToEnu","czm_enuToModel","enuToModel","czm_entireFrustum","entireFrustum","czm_currentFrustum","currentFrustum","czm_frustumPlanes","frustumPlanes","czm_farDepthFromNearPlusOne","farDepthFromNearPlusOne","czm_log2FarDepthFromNearPlusOne","log2FarDepthFromNearPlusOne","czm_oneOverLog2FarDepthFromNearPlusOne","oneOverLog2FarDepthFromNearPlusOne","czm_sunPositionWC","sunPositionWC","czm_sunPositionColumbusView","sunPositionColumbusView","czm_sunDirectionEC","sunDirectionEC","czm_sunDirectionWC","sunDirectionWC","czm_moonDirectionEC","moonDirectionEC","czm_lightDirectionEC","lightDirectionEC","czm_lightDirectionWC","lightDirectionWC","czm_lightColor","czm_lightColorHdr","lightColorHdr","czm_encodedCameraPositionMCHigh","encodedCameraPositionMCHigh","czm_encodedCameraPositionMCLow","encodedCameraPositionMCLow","czm_viewerPositionWC","czm_frameNumber","frameNumber","czm_morphTime","morphTime","czm_sceneMode","czm_pass","czm_backgroundColor","czm_brdfLut","brdfLut","czm_environmentMap","environmentMap","czm_specularEnvironmentMaps","specularEnvironmentMaps","czm_specularEnvironmentMapsMaximumLOD","specularEnvironmentMapsMaximumLOD","czm_sphericalHarmonicCoefficients","sphericalHarmonicCoefficients","czm_temeToPseudoFixed","temeToPseudoFixedMatrix","czm_pixelRatio","czm_fogDensity","fogDensity","czm_fogVisualDensityScalar","fogVisualDensityScalar","czm_fogMinimumBrightness","fogMinimumBrightness","czm_atmosphereHsbShift","atmosphereHsbShift","czm_atmosphereLightIntensity","atmosphereLightIntensity","czm_atmosphereRayleighCoefficient","atmosphereRayleighCoefficient","czm_atmosphereRayleighScaleHeight","atmosphereRayleighScaleHeight","czm_atmosphereMieCoefficient","atmosphereMieCoefficient","czm_atmosphereMieScaleHeight","atmosphereMieScaleHeight","czm_atmosphereMieAnisotropy","atmosphereMieAnisotropy","czm_atmosphereDynamicLighting","atmosphereDynamicLighting","czm_splitPosition","splitPosition","czm_geometricToleranceOverMeter","geometricToleranceOverMeter","czm_minimumDisableDepthTestDistance","minimumDisableDepthTestDistance","czm_invertClassificationColor","invertClassificationColor","czm_gamma","czm_ellipsoidRadii","czm_ellipsoidInverseRadii","bufferTarget","hasArray","createBuffer","bindBuffer","bufferData","_webgl2","_bufferTarget","_sizeInBytes","_usage","vertexArrayDestroyable","createPixelBuffer","createVertexBuffer","createIndexBuffer","elementIndexUint","_unBind","copyFromArrayView","arrayView","bufferSubData","copyFromBuffer","readBuffer","readOffset","writeOffset","readTarget","writeTarget","copyBufferSubData","getBufferData","sourceOffset","destinationOffset","copyLength","elementSize","getBufferSubData","deleteBuffer","BufferUsage","bufferUsage","ClearCommand","stencil","framebuffer","passState","ComputeCommand","vertexArray","fragmentShaderSource","shaderProgram","uniformMap","outputTexture","preExecute","postExecute","canceled","persists","COMPUTE","computeEngine","ComputeEngine","renderStateScratch","drawCommandScratch","clearCommandScratch","computeCommand","getViewportQuadVertexArray","fromCache","vertexShaderSource","attributeLocations","createViewportQuadShader","colorTextures","destroyAttachments","createFramebuffer","createRenderState","clearCommand","drawCommand","getWebGLStub","requestWebgl1","webgl","webglOptions","allowTextureFilterAnisotropic","powerPreference","glContext","WebGLRenderingContext","webgl2Supported","WebGL2RenderingContext","contextType","getWebGLContext","_originalGLContext","validateFramebuffer","validateShaderProgram","logShaderCompilation","_throwOnWebGLError","_shaderCache","_textureCache","_stencilBits","getParameter","_maximumCombinedTextureImageUnits","_maximumCubeMapSize","_maximumFragmentUniformVectors","_maximumTextureImageUnits","_maximumRenderbufferSize","_maximumTextureSize","_maximum3DTextureSize","_maximumVaryingVectors","_maximumVertexAttributes","_maximumVertexTextureImageUnits","_maximumVertexUniformVectors","_maximumSamples","aliasedLineWidthRange","_minimumAliasedLineWidth","_maximumAliasedLineWidth","aliasedPointSizeRange","_minimumAliasedPointSize","_maximumAliasedPointSize","maximumViewportDimensions","_maximumViewportWidth","_maximumViewportHeight","highpFloat","getShaderPrecisionFormat","_highpFloatSupported","highpInt","_highpIntSupported","_antialias","getContextAttributes","antialias","_standardDerivatives","getExtension","_blendMinmax","_elementIndexUint","_depthTexture","_fragDepth","_debugShaders","_textureFloat","_textureHalfFloat","_textureFloatLinear","_textureHalfFloatLinear","_supportsTextureLod","_colorBufferFloat","_floatBlend","_colorBufferHalfFloat","_s3tc","_pvrtc","_astc","_etc","_etc1","_bc7","textureFilterAnisotropic","glCreateVertexArray","glBindVertexArray","glDeleteVertexArray","glDrawElementsInstanced","glDrawArraysInstanced","glVertexAttribDivisor","glDrawBuffers","vertexArrayObject","instancedArrays","drawBuffers","_textureFilterAnisotropic","_maximumTextureFilterAnisotropy","createVertexArray","vao","bindVertexArray","deleteVertexArray","instanceCount","drawElementsInstanced","drawArraysInstanced","vertexAttribDivisor","createVertexArrayOES","bindVertexArrayOES","deleteVertexArrayOES","drawElementsInstancedANGLE","drawArraysInstancedANGLE","vertexAttribDivisorANGLE","drawBuffersWEBGL","_vertexArrayObject","_instancedArrays","_drawBuffers","_maximumDrawBuffers","_maximumColorAttachments","_clearColor","_clearDepth","_clearStencil","_defaultPassState","_defaultRenderState","_defaultTexture","_defaultEmissiveTexture","_defaultNormalTexture","_defaultCubeMap","_us","_currentRenderState","_currentPassState","_currentFramebuffer","_maxFrameTextureUnitIndex","_vertexAttribDivisors","_previousDrawInstanced","_pickObjects","_nextPickColor","throwOnError","glFunc","glFuncArguments","getError","errorToString","createErrorMessage","makeGetterSetter","logFunction","defaultFramebufferMarker","applyRenderState","previousRenderState","previousPassState","partialApply","scratchBackBufferArray","bindFramebuffer","checkFramebufferStatus","_getActiveColorAttachments","shaderCache","textureCache","stencilBits","stencilBuffer","msaa","standardDerivatives","floatBlend","blendMinmax","depthTexture","floatingPointTexture","halfFloatingPointTexture","textureFloatLinear","textureHalfFloatLinear","supportsTextureLod","fragmentDepth","colorBufferFloat","colorBufferHalfFloat","debugShaders","throwOnWebGLError","glWrapper","wrapGL","defaultTexture","defaultEmissiveTexture","defaultNormalTexture","defaultCubeMap","positiveX","positiveY","positiveZ","defaultFramebuffer","defaultClearCommand","clearColor","clearDepth","clearStencil","_shaderProgram","_framebuffer","_renderState","_uniformMap","depthTest","hasDepthAttachment","maximumTextureUnitIndex","beginDraw","_primitiveType","_vertexArray","_setUniforms","indexBuffer","drawElements","drawArrays","continueDraw","beginFrame","endFrame","useProgram","activeTexture","bindTexture","readPixelsToPBO","readState","numberOfColorAttachments","getColorTexture","readPixels","toWebGLConstant","viewportQuadAttributeLocations","PickId","pickObjects","viewportQuad_vertexArray","fromGeometry","interleave","createViewportQuadCommand","overrides","getObjectByPickColor","pickColor","createPickId","propertyValue","ContextLimits","maximumCombinedTextureImageUnits","maximumCubeMapSize","maximumFragmentUniformVectors","maximumTextureImageUnits","maximumRenderbufferSize","maximumTextureSize","maximum3DTextureSize","maximumVaryingVectors","maximumVertexAttributes","maximumVertexTextureImageUnits","maximumVertexUniformVectors","minimumAliasedLineWidth","maximumAliasedLineWidth","minimumAliasedPointSize","maximumAliasedPointSize","maximumViewportWidth","maximumViewportHeight","maximumTextureFilterAnisotropy","maximumDrawBuffers","maximumColorAttachments","maximumSamples","highpFloatSupported","highpIntSupported","CubeMap","sampler","preMultiplyAlpha","FaceName","faceName","faceNames","isDepthFormat","toInternalFormat","textureTarget","createTexture","_textureTarget","_texture","_pixelFormat","_pixelDatatype","_hasMipmap","_preMultiplyAlpha","_flipY","constructFace","targetFace","_positiveX","_negativeX","_positiveY","_negativeY","_positiveZ","_negativeZ","_sampler","setupSampler","pixelStorei","loadFace","cubeMapFace","mipLevel","_targetFace","_internalFormat","texImage2D","unpackAlignment","alignmentInBytes","cubeMap","minificationFilter","magnificationFilter","mipmap","texParameteri","wrapS","wrapT","TEXTURE_MAX_ANISOTROPY_EXT","maximumAnisotropy","copyFace","copyMipmapFromFramebuffer","POSITIVEX","NEGATIVEX","POSITIVEY","NEGATIVEY","POSITIVEZ","NEGATIVEZ","makeFaceNamesIterator","_target","getDirection","loadMipmaps","mipCount","mipSource","generateMipmap","hint","_attributeLocations","deleteTexture","CubeMapFace","_initialized","copyFrom","uploaded","texSubImage2D","copyFromFramebuffer","framebufferXOffset","framebufferYOffset","copyTexSubImage2D","copyTexImage2D","DrawCommand","_boundingVolume","_instanceCount","_pass","_debugOverlappingFrustums","_pickId","pickId","_pickMetadataAllowed","pickMetadataAllowed","_pickedMetadataInfo","_flags","cull","occlude","executeInClosestFrustum","debugShowBoundingVolume","castShadows","receiveShadows","pickOnly","depthForTranslucentClassification","lastDirtyTime","derivedCommands","hasFlag","command","setFlag","debugOverlappingFrustums","pickedMetadataInfo","shallowClone","attachTexture","framebufferTexture2D","attachRenderbuffer","renderbuffer","framebufferRenderbuffer","_getRenderbuffer","Framebuffer","_colorTextures","_colorRenderbuffers","_activeColorAttachments","_depthRenderbuffer","_stencilRenderbuffer","_depthStencilTexture","_depthStencilRenderbuffer","colorRenderbuffers","depthRenderbuffer","depthStencilTexture","depthStencilRenderbuffer","depthAttachment","depthStencilAttachment","stencilRenderbuffer","isColorFormat","attachmentEnum","renderbuffers","bindDraw","bindRead","getColorRenderbuffer","deleteFramebuffer","FramebufferManager","_numSamples","numSamples","_colorAttachmentsLength","colorAttachmentsLength","_depthStencil","depthStencil","_supportsDepthTexture","supportsDepthTexture","_createColorAttachments","createColorAttachments","_createDepthAttachments","createDepthAttachments","_multisampleFramebuffer","_colorRenderbuffer","_attachmentsDirty","getRenderFramebuffer","dimensionChanged","samplesChanged","pixelChanged","framebufferDefined","getColorFormat","setColorTexture","setColorRenderbuffer","getDepthRenderbuffer","setDepthRenderbuffer","getDepthTexture","setDepthTexture","getDepthStencilRenderbuffer","setDepthStencilRenderbuffer","getDepthStencilTexture","setDepthStencilTexture","prepareTextures","blitStencil","blitFramebuffers","destroyFramebuffer","MipmapHint","mipmapHint","MultisampleFramebuffer","_renderFramebuffer","_colorFramebuffer","getColorFramebuffer","blitFramebuffer","ENVIRONMENT","GLOBE","TERRAIN_CLASSIFICATION","CESIUM_3D_TILE_EDGES","CESIUM_3D_TILE","CESIUM_3D_TILE_CLASSIFICATION","CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW","OPAQUE","TRANSLUCENT","VOXELS","GAUSSIAN_SPLATS","OVERLAY","NUMBER_OF_PASSES","blendingEnabled","scissorTest","PixelDatatype","validateBlendEquation","blendEquation","validateBlendFunction","blendFunction","validateStencilFunction","stencilFunction","validateStencilOperation","stencilOperation","RenderState","polygonOffset","scissorTestRectangle","depthRange","colorMask","blending","blendingColor","stencilTest","stencilTestFrontOperation","frontOperation","stencilTestBackOperation","backOperation","sampleCoverage","frontFace","depthMask","stencilMask","equationRgb","equationAlpha","functionSourceRgb","functionSourceAlpha","functionDestinationRgb","functionDestinationAlpha","frontFunction","backFunction","zFail","zPass","cullFace","depthFunction","_applyFunctions","nextRenderStateId","renderStateCache","enableOrDisable","glEnum","applyFrontFace","applyCull","applyLineWidth","applyPolygonOffset","applyScissorTest","scissor","applyDepthRange","applyDepthTest","depthFunc","applyColorMask","applyDepthMask","applyStencilMask","applyBlending","blendColor","applyBlendingColor","blendEquationSeparate","blendFuncSeparate","applyStencilTest","stencilFunc","stencilFuncSeparate","frontOperationFail","frontOperationZFail","frontOperationZPass","stencilOpSeparate","backOperationFail","backOperationZFail","backOperationZPass","applySampleCoverage","partialKey","cachedState","referenceCount","fullKey","removeFromCache","fullCachedState","getCache","clearCache","scratchViewport","applyViewport","createFuncs","previousBlendingEnabled","getState","Renderbuffer","_renderbuffer","createRenderbuffer","bindRenderbuffer","renderbufferStorageMultisample","renderbufferStorage","deleteRenderbuffer","RenderbufferFormat","renderbufferFormat","Sampler","wrapR","_wrapR","_wrapS","_wrapT","_minificationFilter","_magnificationFilter","_maximumAnisotropy","ShaderBuilder","_positionAttributeLine","_nextAttributeLocation","_attributeLines","_structs","_functions","_vertexShaderParts","defineLines","uniformLines","shaderLines","varyingLines","structIds","functionIds","_fragmentShaderParts","addDefine","includesVertexShader","includesFragmentShader","addStruct","structId","structName","addStructField","addField","addFunction","addFunctionLines","addLines","addUniform","setPositionAttribute","glslType","getAttributeLocationCount","addVarying","qualifier","addVertexLines","vertexLines","addFragmentLines","fragmentLines","buildShaderProgram","positionAttribute","structLines","shaderBuilder","struct","generateGlslLines","generateStructLines","functionLines","functionId","generateFunctionLines","defines","ShaderCache","_shaders","_numberOfShaders","_shadersToRelease","destroyShader","cachedShader","derivedKeywords","finalDestroy","numberOfShaders","replaceShaderProgram","getShaderProgram","getCacheKey","sortedKeys","toSortedJson","vertexShaderText","createCombinedVertexShader","fragmentShaderText","createCombinedFragmentShader","_cachedShader","replaceDerivedShaderProgram","derivedKeyword","cachedDerivedShader","createDerivedShaderProgram","getDerivedShaderProgram","derivedShaderProgram","derivedCachedShader","destroyReleasedShaderPrograms","shadersToRelease","releaseShaderProgram","shaders","ShaderDestination","VERTEX","FRAGMENT","destinations","ShaderFunction","nextShaderProgramId","ShaderProgram","spector","modifiedFS","duplicateUniformNames","uniformName","duplicateName","vertexShaderUniforms","extractUniforms","fragmentShaderUniforms","vertexUniformsCount","fragmentUniformsCount","handleUniformPrecisionMismatches","_logShaderCompilation","_program","_numberOfVertexAttributes","_vertexAttributes","_uniformsByName","_uniforms","_automaticUniforms","_manualUniforms","_duplicateUniformNames","_vertexShaderSource","_vertexShaderText","_fragmentShaderSource","_fragmentShaderText","shaderText","uniformNames","replaceCache","vertexAttributes","numberOfVertexAttributes","allUniforms","consolePrefix","shader","reinitialize","oldProgram","program","vsSource","fsSource","vertexShader","createShader","shaderSource","compileShader","fragmentShader","createProgram","attachShader","bindAttribLocation","errorMessage","linkProgram","getProgramParameter","getShaderInfoLog","getProgramInfoLog","deleteShader","getShaderParameter","logTranslatedSource","deleteProgram","compiledShader","getTranslatedShaderSource","createAndLinkProgram","uniformsByName","samplerUniforms","numberOfUniforms","activeUniform","getActiveUniform","getUniformLocation","uniform","_setSampler","uniformArray","loc","indexOfBracket","_locations","getUniform","findUniforms","partitionedUniforms","automaticUniforms","manualUniforms","uniformObject","duplicateUniform","automaticUniform","partitionUniforms","getActiveAttrib","getAttribLocation","findVertexAttributes","textureUnitIndex","setSamplerUniforms","__SPECTOR_rebuildProgram","vertexSourceCode","fragmentSourceCode","onCompiled","onError","originalVS","originalFS","validateProgram","removeComments","numberOfLines","lineNumber","getDependencyNode","glslSource","dependencyNode","requiredBy","evaluated","generateDependencies","dependencyNodes","czmMatches","ShaderSource","_czmBuiltinsAndUniforms","referencedNode","getBuiltinsAndAutomaticUniforms","nodesWithoutIncomingEdges","allNodes","badNodes","sortDependencies","builtinsSource","combineShader","isFragmentShader","combinedSources","group1","pickColorQualifier","createPickFragmentShaderSource","extensionsLength","builtinSources","includeBuiltIns","combinedShader","replaceMain","renamedMain","builtinName","containsString","sourcesLength","findFirstString","strings","stringsLength","createPickVertexShaderSource","normalVaryingNames","findNormalVarying","definesLength","containsDefine","positionVaryingNames","findPositionVarying","ShaderStruct","field","SharedContext","_autoDestroy","contextOptions","_canvases","createSceneContext","sharedContext","sharedCanvas","Sync","fenceSync","getStatus","getSyncParameter","deleteSync","waitForSignal","scheduleFunction","waitForSignal0","Texture","videoWidth","videoHeight","isCompressed","isCompressedFormat","isDXTFormat","isPVRTCFormat","isASTCFormat","isETC2Format","isETC1Format","isBC7Format","compressedTextureSizeInBytes","compressedTexImage2D","mipLevels","mipWidth","mipHeight","nextMipSize","loadCompressedBufferSource","loadBufferSource","loadFramebufferSource","loadImageSource","loadNull","currentSize","nextSize","fromFramebuffer","loadPartialBufferSource","loadPartialImageSource","Texture3D","texture3DSizeInBytes","texture3D","levels","texStorage3D","texSubImage3D","mipDepth","texImage3D","zOffset","TextureAtlas","borderWidthInPixels","initialSize","_borderWidthInPixels","_initialSize","_texturePacker","_subRegions","_imagesToAddQueue","_indexById","_indexPromiseById","_nextIndex","AddImageRequest","numberOfImages","computeTextureCoordinates","atlasWidth","atlasHeight","_copyFromTexture","newTexture","oldTexture","oldRectangles","subRegions","frameBufferOffset","_resize","queueOffset","toPack","areaQueued","imageA","imageB","newRectangles","texturePacker","repackedNode","getImageIndex","_copyImageToTexture","_addImage","_processImageQueue","imageRequest","addImage","resolvedImage","resolveImage","imageIndex","resolveAndAddImage","getCachedImageSubRegion","imagePromise","resolvedImageIndex","addImageSubRegion","TextureCache","_textures","_numberOfTextures","_texturesToRelease","numberOfTextures","getTexture","cachedTexture","addTexture","destroyReleasedTextures","texturesToRelease","TextureMagnificationFilter","textureMagnificationFilter","TextureMinificationFilter","textureMinificationFilter","TextureWrap","textureWrap","UniformState","_viewport","_viewportCartesian4","_viewportDirty","_viewportOrthographicMatrix","_viewportTransformation","_view","_inverseView","_infiniteProjection","_entireFrustum","_currentFrustum","_frustumPlanes","_farDepthFromNearPlusOne","_log2FarDepthFromNearPlusOne","_oneOverLog2FarDepthFromNearPlusOne","_frameState","_temeToPseudoFixed","_view3DDirty","_view3D","_inverseView3DDirty","_inverseView3D","_inverseModelDirty","_inverseModel","_inverseTransposeModelDirty","_inverseTransposeModel","_viewRotation","_inverseViewRotation","_viewRotation3D","_inverseViewRotation3D","_inverseProjectionDirty","_inverseProjection","_modelViewDirty","_modelView","_modelView3DDirty","_modelView3D","_modelViewRelativeToEyeDirty","_modelViewRelativeToEye","_inverseModelViewDirty","_inverseModelView","_inverseModelView3DDirty","_inverseModelView3D","_viewProjectionDirty","_viewProjection","_inverseViewProjectionDirty","_inverseViewProjection","_modelViewProjectionDirty","_modelViewProjection","_inverseModelViewProjectionDirty","_inverseModelViewProjection","_modelViewProjectionRelativeToEyeDirty","_modelViewProjectionRelativeToEye","_modelViewInfiniteProjectionDirty","_modelViewInfiniteProjection","_normalDirty","_normal3DDirty","_normal3D","_inverseNormalDirty","_inverseNormal","_inverseNormal3DDirty","_inverseNormal3D","_encodedCameraPositionMCDirty","_encodedCameraPositionMC","_sunPositionWC","_sunPositionColumbusView","_sunDirectionWC","_sunDirectionEC","_moonDirectionEC","_lightDirectionWC","_lightDirectionEC","_lightColorHdr","_mapProjection","_cameraDirection","_cameraRight","_cameraUp","_frustum2DWidth","_eyeHeight","_eyeHeight2D","_eyeEllipsoidNormalEC","_eyeEllipsoidCurvature","_modelToEnu","_enuToModel","_pixelRatio","_orthographicIn3D","_brdfLut","_environmentMap","_sphericalHarmonicCoefficients","_specularEnvironmentMaps","_specularEnvironmentMapsMaximumLOD","_fogDensity","_fogVisualDensityScalar","_fogMinimumBrightness","_atmosphereHsbShift","_atmosphereLightIntensity","_atmosphereRayleighCoefficient","_atmosphereRayleighScaleHeight","_atmosphereMieCoefficient","_atmosphereMieScaleHeight","_atmosphereMieAnisotropy","_atmosphereDynamicLighting","_invertClassificationColor","_splitPosition","_pixelSizePerMeter","_geometricToleranceOverMeter","_minimumDisableDepthTestDistance","cleanViewport","inverseTransposeModel","updateView3D","updateInverseView3D","mvRte","cleanModelViewRelativeToEye","cleanNormal","cleanNormal3D","cleanInverseNormal","cleanInverseNormal3D","cleanEncodedCameraPositionMC","surfacePositionScratch","enuTransformScratch","sunCartographicScratch","updateCamera","viewMatrix","setInverseView","inverseViewMatrix","rightWC","enuToWorld","setCamera","updateFrustum","setInfiniteProjection","updatePass","defaultLight","sunCartographic","setSunAndMoonDirections","light","intensity","brdfLutGenerator","colorTexture","visualDensityScalar","minimumBrightness","atmosphere","hueShift","saturationShift","brightnessShift","lightIntensity","rayleighCoefficient","rayleighScaleHeight","mieCoefficient","mieScaleHeight","mieAnisotropy","dynamicLighting","pixelSizePerMeter","cameraPositionMC","view2Dto3DPScratch","view2Dto3DRScratch","view2Dto3DUScratch","view2Dto3DDScratch","view2Dto3DCartographicScratch","view2Dto3DCartesian3Scratch","view2Dto3DMatrix4Scratch","position2D","up2D","frustum2DWidth","position3D","enuToFixed","view2Dto3D","hasVertexBuffer","instanceDivisor","vertexAttrib","vertexAttribPointer","enableVertexAttribArray","disableVertexAttribArray","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","VertexArray","vaAttributes","hasInstancedAttributes","hasConstantAttributes","uniqueIndices","_numberOfVertices","_hasInstancedAttributes","_hasConstantAttributes","_vao","_indexBuffer","computeAttributeSizeInBytes","createdVAAttributes","vertexArrayAttributes","interleavedAttributes","namesLength","currentNumberOfVertices","vertexSizeInBytes","offsetsInBytes","maxComponentSizeInBytes","strideInComponentType","interleaveAttributes","attrProps","normalized","divisors","maxAttributes","setVertexAttribDivisor","setConstantAttributes","VertexArrayFacade","sizeInVertices","instanced","_verifyAttributes","precreatedAttributes","attributesByUsage","attributesForUsage","_allBuffers","_vertexSizeInBytes","needsCommit","arrayViews","_createArrayViews","_instanced","_precreated","writers","vertexSizeInComponentType","_appendWriters","destroyVA","destView","sourceView","createArrayBufferView","createWriters","component0","component1","component2","component3","vertexArrayFacade","vertexBufferSizeInBytes","vertexBufferDefined","subCommit","offsetInVertices","lengthInVertices","recreateVA","numberOfVertexArrays","_appendAttributes","endSubCommits","UniformFloat","UniformFloatVec2","UniformFloatVec3","UniformFloatVec4","UniformSampler","UniformInt","UniformIntVec2","UniformIntVec3","UniformIntVec4","uniform1f","uniform2f","uniform3f","uniform4f","uniform1i","uniform2i","uniform3i","uniform4i","scratchUniformArray","UniformMat2","uniformMatrix2fv","scratchMat3Array","UniformMat3","uniformMatrix3fv","scratchMat4Array","UniformMat4","uniformMatrix4fv","UniformArrayFloat","UniformArrayFloatVec2","UniformArrayFloatVec3","UniformArrayFloatVec4","UniformArraySampler","UniformArrayInt","UniformArrayIntVec2","UniformArrayIntVec3","UniformArrayIntVec4","UniformArrayMat2","UniformArrayMat3","UniformArrayMat4","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","replaceAll","freezeRenderState","propNames","flipOptions","facePromises","MASK","Appearance","getFragmentShaderSource","faceForward","getRenderState","ALPHA_BLEND","getDefaultRenderState","SATELLITE","OCEANS","HILLSHADE","ImageryProviderBuilder","useTiles","usePreCachedTilesIfAvailable","tileDiscardPolicy","tileWidth","tileHeight","ArcGisMapServerImageryProvider","_defaultAlpha","_defaultNightAlpha","_defaultDayAlpha","_defaultBrightness","_defaultContrast","_defaultHue","_defaultSaturation","_defaultGamma","_defaultMinificationFilter","_defaultMagnificationFilter","_tileDiscardPolicy","_tileWidth","_tileHeight","_useTiles","enablePickFeatures","buildImageResource","bboxSR","imageSR","missingImageUrl","pixelsToCheck","disableCheckIfAllPixelsAreTransparent","fromBasemapType","warningCredit","defaultWorldImageryServer","defaultWorldOceanServer","defaultWorldHillshadeServer","minimumLevel","usingPrecachedTiles","hasAlphaChannel","imageryProviderBuilder","jsonResource","fullExtent","extentMessage","getTileCredits","requestImage","loadImage","pickFeatures","mapExtent","imageDisplay","featureInfo","configureDescriptionFromProperties","_metadataCache","ArcGisMapService","Atmosphere","requiresColorCorrect","AttributeType","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","attributeType","AutoExposure","_command","_colorTexture","_logDepthChanged","_useLogDepth","_framebuffers","_previousLuminance","_commands","_clearCommand","_minMaxLuminance","minimumLuminance","maximumLuminance","destroyFramebuffers","autoexposure","framebuffers","destroyCommands","commands","createUniformMap","colorTextureDimensions","minMaxLuminance","previousLuminance","getShaderSource","lastTexture","createFramebuffers","createCommands","Axis","Z_UP_TO_Y_UP","X_UP_TO_Z_UP","Z_UP_TO_X_UP","X_UP_TO_Y_UP","Y_UP_TO_X_UP","fromName","trailingSlashRegex","Azure2DImageryProvider","tilesetId","_minimumLevel","_subscriptionKey","subscriptionKey","_tilesetId","templateUrl","tilesUrl","_viewportUrl","_imageryProvider","_attributionsByLevel","fetchViewportAttribution","viewportResource","copyrights","innerCredits","getViewportCredits","attributionsByLevel","levelCredits","B3dmParser","_deprecationWarning","byteStart","featureTableJsonByteLength","featureTableBinaryByteLength","batchTableJsonByteLength","batchLength","featureTableJson","batchTableBinaryByteLength","BATCH_LENGTH","featureTableBinary","batchTableJson","batchTableBinary","gltfByteLength","gltfView","BatchTable","numberOfInstances","_numberOfInstances","foundFloatDatatype","getDatatype","textureFloatSupported","packFloats","currentOffset","attributesLength","createOffsets","lastOffset","getStride","maxNumberOfInstancesPerRow","instancesPerWidth","stepX","centerX","stepY","centerY","_textureDimensions","_textureStep","_packFloats","_offsets","_stride","_batchValues","_batchValuesDirty","attributeIndex","scratchPackedFloatCartesian4","scratchGetAttributeCartesian4","getBatchedAttribute","instanceIndex","getPackedFloat","setAttributeScratchValues","setAttributeScratchCartesian4","getGlslAttributeFunction","batchTable","functionReturnType","getComponentType","functionReturnValue","getComponentSwizzle","glslFunction","setBatchedAttribute","attributeValue","setPackedAttribute","updateTexture","getUniformMapCallback","batchUniformMap","batchTexture","batchTextureDimensions","batchTextureStep","getVertexShaderCallback","batchTableShader","getGlslComputeSt","mainIndex","BatchTableHierarchy","_classIds","_classIndexes","_parentCounts","_parentIndexes","_parentIds","_byteLength","hierarchyJson","binaryBody","binaryAccessor","instancesLength","parentIndexes","classIds","parentCounts","parentIds","parentIdsLength","classesLength","classInstancesLength","binaryProperties","getBinaryProperties","countBinaryPropertyMemory","classCounts","classIndexes","scratchValidateStack","validateInstance","validateHierarchy","parentCount","scratchVisited","scratchStack","traverseHierarchy","endConditionCallback","visitedMarker","traverseHierarchyMultipleParents","traverseHierarchySingleParent","batchId","propertyId","propertyExists","getPropertyIds","getProperty","instanceClass","indexInClass","propertyValues","binaryProperty","componentCount","getBinaryProperty","setBinaryProperty","getClassName","BatchTexture","featuresLength","textureDimensions","textureStep","_showAlphaProperties","_batchTexture","_pickTexture","_pickIds","_translucentFeaturesLength","_featuresLength","_statistics","_colorChangedCallback","colorChangedCallback","getByteLength","getBatchValues","getShowAlphaProperties","checkBatchId","translucentFeaturesLength","memory","pickTexture","DEFAULT_COLOR_VALUE","DEFAULT_SHOW_VALUE","setShow","showAlphaProperties","propertyOffset","newShow","setAllShow","getShow","scratchColorBytes","setColor","newAlpha","batchValues","wasTranslucent","setAllColor","getPickColor","passes","postProcess","pickIds","getFeature","batchTableByteLength","createPickTexture","updateBatchTexture","_actualPosition","_translate","_collection","_pickPrimitive","_dirty","_batchIndex","_imageTexture","_imageId","_imageWidth","_imageHeight","_labelDimensions","_labelHorizontalOrigin","_labelTranslate","_computeImageTextureProperties","_actualClampedPosition","_clusterShow","_positionFromParent","SHOW_INDEX","POSITION_INDEX","PIXEL_OFFSET_INDEX","EYE_OFFSET_INDEX","HORIZONTAL_ORIGIN_INDEX","VERTICAL_ORIGIN_INDEX","SCALE_INDEX","IMAGE_INDEX_INDEX","COLOR_INDEX","ROTATION_INDEX","ALIGNED_AXIS_INDEX","SCALE_BY_DISTANCE_INDEX","TRANSLUCENCY_BY_DISTANCE_INDEX","PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX","DISTANCE_DISPLAY_CONDITION","DISABLE_DEPTH_DISTANCE","TEXTURE_COORDINATE_BOUNDS","SDF_INDEX","SPLIT_DIRECTION_INDEX","makeDirty","propertyChanged","_updateBillboard","NUMBER_OF_PROPERTIES","loadError","textureDirty","getPickId","modeChanged","updateFunction","updatedClampedPosition","setImageTexture","billboardTexture","imageUri","_setTranslate","_getActualPosition","_setActualPosition","tempCartesian3","_computeActualPosition","computeActualEllipsoidPosition","positionWorld","worldWithEyeOffsetToWindowCoordinates","scratchPixelOffset","screenSpacePosition","BASELINE","_customData","_surface","removeTileCustomData","DISTANCE_DISPLAY_CONDITION_INDEX","attributeLocationsBatched","positionHighAndScale","positionLowAndRotation","compressedAttribute0","compressedAttribute1","compressedAttribute2","compressedAttribute3","textureCoordinateBoundsOrLabelTranslate","a_batchId","sdf","attributeLocationsInstanced","_batchTable","textureAtlas","_textureAtlas","_textureAtlasGUID","_destroyTextureAtlas","_billboardTextureCache","_sp","_spTranslucent","_rsOpaque","_rsTranslucent","_vaf","_billboards","_billboardsToUpdate","_billboardsToUpdateIndex","_billboardsRemoved","_createVertexArray","_shaderRotation","_compiledShaderRotation","_shaderAlignedAxis","_compiledShaderAlignedAxis","_shaderScaleByDistance","_compiledShaderScaleByDistance","_shaderTranslucencyByDistance","_compiledShaderTranslucencyByDistance","_shaderPixelOffsetScaleByDistance","_compiledShaderPixelOffsetScaleByDistance","_shaderDistanceDisplayCondition","_compiledShaderDistanceDisplayCondition","_shaderDisableDepthDistance","_compiledShaderDisableDepthDistance","_shaderClampToGround","_compiledShaderClampToGround","_propertiesChanged","_maxSize","_maxEyeOffset","_maxScale","_maxPixelOffset","_allHorizontalCenter","_allVerticalCenter","_allSizedInMeters","_baseVolume","_baseVolumeWC","_baseVolume2D","_boundingVolumeDirty","_colorCommands","_allBillboardsReady","debugShowTextureAtlas","blendOption","OPAQUE_AND_TRANSLUCENT","_blendOption","_buffersUsage","_highlightColor","_coarseDepthTestDistance","coarseDepthTestDistance","_threePointDepthTestDistance","threePointDepthTestDistance","u_atlas","u_highlightColor","u_coarseDepthTestDistance","u_threePointDepthTestDistance","billboards","destroyBillboards","removeBillboards","newBillboards","getIndexBuffer","getIndexBufferBatched","billboardCollection_indexBufferBatched","sixteenK","getIndexBufferInstanced","billboardCollection_indexBufferInstanced","getVertexBufferInstanced","billboardCollection_vertexBufferInstanced","destroyTextureAtlas","billboardTextureCache","computeNewBuffersUsage","buffersUsage","usageChanged","newUsage","writePositionScratch","writePositionScaleAndRotation","vafWriters","positionHighWriter","positionLowWriter","UPPER_BOUND","LEFT_SHIFT16","LEFT_SHIFT12","LEFT_SHIFT8","writeCompressedAttrib0","pixelOffsetX","pixelOffsetY","bottomLeftX","bottomLeftY","imageRectangle","topRightX","topRightY","tempTanslateY","upperTranslateY","compressedTexCoordsLL","compressedTexCoordsLR","compressedTexCoordsUR","compressedTexCoordsUL","writeCompressedAttrib1","translucency","imageWidth","writeCompressedAttrib2","validAlignedAxis","imageHeight","labelHorizontalOrigin","writeEyeOffset","eyeOffsetZ","compressedTexCoordsRange","writeScaleByDistance","writePixelOffsetScaleByDistance","pixelOffsetScale","writeCompressedAttribute3","writeTextureCoordinateBoundsOrLabelTranslate","globeTranslucent","globeTranslucencyState","depthTestAgainstTerrain","writeSDF","_sdf","outlineDistance","RADIUS","writeSplitDirection","writeBillboard","writeBatchId","recomputeActualPositions","recomputeBoundingVolume","actualPosition","scratchWriterArray","billboardsLength","allBillboardsReady","billboardsToUpdate","COLUMBUS_VIEW","updateMode","billboardsToUpdateLength","textureAtlasGUID","picking","numberOfBillboards","createVAF","numWriters","pixelScale","getPixelSize","updateBoundingVolume","blendOptionChanged","useTranslucentDepthMask","vertDefines","supportVSTextureReads","_compiledSDF","getFragmentShaderCallback","sdfEdge","CUTOFF","vectorFragDefine","colorList","opaque","opaqueAndTranslucent","vaLength","totalLength","opaqueCommand","debugCommand","billboard_texture","createDebugCommand","BillboardLoadState","LOADING","LOADED","ERROR","BillboardTexture","_loadState","_loadError","_hasSubregion","loadState","atlas","indexOrPromise","loadImageSubRegion","indexPromise","completeLoad","imageUrlSubdomains","imageUrlTemplate","attributionList","BingMapsImageryProvider","_mapStyle","mapStyle","AERIAL","_mapLayer","mapLayer","_culture","_proxy","logoUrl","_imageUrlTemplate","_imageUrlSubdomains","_attributionList","attributionIndex","attributionLength","coverageAreas","areaIndex","areaLength","tileProtocol","incl","uriScheme","zoomMax","imageUrl","validProviders","imageryProviders","included","zoomMin","getRectangleAttribution","subdomains","subdomainIndex","EMPTY_IMAGE","_logoUrl","AERIAL_WITH_LABELS","AERIAL_WITH_LABELS_ON_DEMAND","ROAD","ROAD_ON_DEMAND","CANVAS_DARK","CANVAS_LIGHT","CANVAS_GRAY","ORDNANCE_SURVEY","COLLINS_BART","BlendEquation","ADD","SUBTRACT","REVERSE_SUBTRACT","BlendFunction","SOURCE_COLOR","ONE_MINUS_SOURCE_COLOR","DESTINATION_COLOR","ONE_MINUS_DESTINATION_COLOR","SOURCE_ALPHA","ONE_MINUS_SOURCE_ALPHA","DESTINATION_ALPHA","ONE_MINUS_DESTINATION_ALPHA","SOURCE_ALPHA_SATURATE","BlendingState","PRE_MULTIPLIED_ALPHA_BLEND","ADDITIVE_BLEND","BoundingVolumeSemantics","parseBoundingVolumeSemantic","_parseMinimumHeight","_parseMaximumHeight","boundingBoxSemantic","boundingRegionSemantic","boundingRegion","boundingSphereSemantic","minimumHeightSemantic","maximumHeightSemantic","defaultDimensions","BoxEmitter","scratchHalfDim","particle","halfDim","BrdfLutGenerator","_drawCommand","generator","createCommand","BufferLoader","_typedArray","_cacheKey","UNLOADED","bufferLoader","_fetchArrayBuffer","READY","loadExternalBuffer","Camera","_actualTransform","_actualInvTransform","_transformChanged","_positionWC","_positionCartographic","_oldPositionWC","positionWCDeltaMagnitude","positionWCDeltaMagnitudeLastFrame","timeSinceMoved","_lastMovedTimestamp","_direction","_directionWC","_up","_upWC","_rightWC","defaultMoveAmount","defaultLookAmount","defaultRotateAmount","defaultZoomAmount","constrainedAxis","maximumZoomFactor","_moveStart","_moveEnd","_changedPosition","_changedDirection","_changedFrustum","_changedHeading","_changedRoll","percentageChanged","_viewMatrix","_invViewMatrix","updateViewMatrix","_modeChanged","_maxCoord","_max2Dfrustum","rectangleCameraPosition3D","DEFAULT_VIEW_RECTANGLE","DEFAULT_VIEW_FACTOR","TRANSFORM_2D","TRANSFORM_2D_INVERSE","DEFAULT_OFFSET","canPreloadFlight","_currentFlight","_updateCameraChanged","updateCameraDeltas","currentHeading","headingDelta","headingChangedPercentage","currentRoll","rollDelta","rollChangedPercentage","lastPosition","lastFrustum","areaPercentage","areaRef","dirAngle","dirPercentage","heightPercentage","scratchCartesian4Origin","scratchCartesian4NewOrigin","scratchCartesian4NewXAxis","scratchCartesian4NewYAxis","scratchCartesian4NewZAxis","updateMembers","heightChanged","positionChanged","directionChanged","upChanged","rightChanged","transformChanged","convertTransformForColumbusView","newOrigin","newZAxis","newXAxis","newYAxis","convertTransformFor2D","invUpMag","getHeading","getPitch","getRoll","scratchHPRMatrix1","scratchHPRMatrix2","oldTransform","moveStart","moveEnd","maxZoomOut","clampMove2D","setTransformPosition","setTransformUp","setTransformDirection","scratchAdjustOrthographicFrustumMousePosition","scratchPickRay","scratchRayIntersection","scratchDepthIntersection","calculateOrthographicFrustumWidth","mousePosition","rayIntersection","depthIntersection","getPickRay","pickWorldCoordinates","pickPositionSupported","pickPositionWorldCoordinates","depthDistance","rayDistance","_adjustOrthographicFrustum","zooming","scratchSetViewCartesian","scratchSetViewTransform1","scratchSetViewTransform2","scratchSetViewQuaternion","scratchSetViewMatrix3","scratchSetViewCartographic","scratchToHPRDirection","scratchToHPRUp","scratchToHPRRight","directionUpToHeadingPitchRoll","scratchSetViewOptions","endTransform","setView","getRectangleCameraCoordinates","currentTransform","rotQuat","rotMat","setView3D","newLeft","newRight","mapMode2D","setView2D","setViewCV","pitchScratch","rotatable2D","maxProjectedX","maxProjectedY","flyHome","completeMorph","maxRadii","worldToCameraCoordinates","worldToCameraCoordinatesPoint","worldToCameraCoordinatesVector","cameraToWorldCoordinates","cameraToWorldCoordinatesPoint","cameraToWorldCoordinatesVector","moveScratch","moveForward","zoom2D","moveBackward","moveUp","moveDown","moveRight","moveLeft","lookLeft","look","lookRight","lookUp","lookDown","lookScratchQuaternion","lookScratchMatrix","turnAngle","twistLeft","twistRight","rotateScratchQuaternion","rotateScratchMatrix","rotateDown","rotateVertical","rotateUp","rotateVertScratchP","rotateVertScratchA","rotateVertScratchTan","rotateVertScratchNegate","northParallel","southParallel","angleToAxis","EPSILON4","rotateHorizontal","newTop","newBottom","maxBottom","maxRight","zoom3D","zoomIn","zoomOut","getMagnitude","scratchLookAtMatrix4","scratchLookAtHeadingPitchRangeOffset","scratchLookAtHeadingPitchRangeQuaternion1","scratchLookAtHeadingPitchRangeQuaternion2","scratchHeadingPitchRangeMatrix3","offsetFromHeadingPitchRange","pitchQuat","headingQuat","cartesianOffset","viewRectangle3DCartographic1","viewRectangle3DCartographic2","viewRectangle3DNorthEast","viewRectangle3DSouthWest","viewRectangle3DNorthWest","viewRectangle3DSouthEast","viewRectangle3DNorthCenter","viewRectangle3DSouthCenter","viewRectangle3DCenter","viewRectangle3DEquator","defaultRF","viewRectangle3DEllipsoidGeodesic","computeD","upOrRight","tanThetaOrPhi","cameraRF","northCartographic","southCartographic","northWest","northCenter","southCenter","southEast","rightScalar","topScalar","heightRatio","tanPhi","equatorCartographic","equatorPosition","viewRectangleCVCartographic","viewRectangleCVNorthEast","viewRectangleCVSouthWest","viewRectangle2DCartographic","viewRectangle2DNorthEast","viewRectangle2DSouthWest","rectangleCameraPositionColumbusView","INFINITE_SCROLL","rectangleCameraPosition2D","pickEllipsoid3DRay","pickEllipsoid2DRay","pickEllipsoidCVRay","windowPosition","pickEllipsoid3D","pickMap2D","pickMapColumbusView","pickPerspCenter","pickPerspXDir","pickPerspYDir","scratchDirection","xDir","yDir","getPickRayPerspective","maxHorizontal","getPickRayOrthographic","scratchProj","distanceToBoundingSphere","scratchPixelSize","posScratch","scratchCartesian3Subtract","createCorrectPositionTween","distToC","dWidth","dHeight","mapWidth","mapHeight","newPosition","startObject","stopObject","createAnimationTemplateCV","createAnimationCV","scratchFlyToDestination","newOptions","adjustBoundingSphereOffset","minimumZoom","screenSpaceCameraController","minimumZoomDistance","maximumZoom","maximumZoomDistance","distanceToBoundingSphere2D","distanceToBoundingSphere3D","cancelTween","completeFlight","setViewOptions","flightTween","pitchAdjustHeight","flyOverLongitude","flyOverLongitudeWeight","tweenOptions","createTween","tweens","preloadFlightCamera","preloadFlightCullingVolume","scratchflyToBoundingSphereTransform","scratchflyToBoundingSphereDestination","scratchflyToBoundingSphereDirection","scratchflyToBoundingSphereUp","scratchflyToBoundingSphereRight","scratchFlyToBoundingSphereCart4","scratchFlyToBoundingSphereQuaternion","scratchFlyToBoundingSphereMatrix3","scene2D","rotateQuat","scratchCartesian3_1","scratchCartesian3_2","scratchCartesian3_3","scratchCartesian3_4","horizonPoints","scratchPickCartesian2","scratchRectCartesian","cartoArray","addToResult","computedHorizonQuad","cullingVolume","successfulPickCount","qMagnitude","qUnit","eUnit","nUnit","wMagnitude","northOffset","computeHorizonQuad","lastLon","switchToPerspectiveFrustum","switchToOrthographicFrustum","frustumWidth","listenToPinch","aggregator","PINCH","isDown","_isDown","eventStartPosition","_eventStartPosition","pressTime","_pressTime","releaseTime","_releaseTime","movement","_movement","_buttonsDown","mouseMovement","pinchMovement","TwoPI","listenToWheel","lastMovement","_lastMovement","arcLength","listenMouseButtonDownUp","LEFT_DRAG","RIGHT_DRAG","MIDDLE_DRAG","cancelMouseDownAction","cancelKey","cloneMouseMovement","refreshMouseDownStatus","anyButtonIsDown","downKey","downValue","listenMouseMove","_currentMousePosition","CameraEventAggregator","modifierName","currentMousePosition","anyButtonDown","wheelMoved","isMoving","getMovement","getLastMovement","isButtonDown","getStartMousePosition","getButtonPressTime","getButtonReleaseTime","CameraFlightPath","scratchCart","createPitchFunction","startPitch","endPitch","heightFunction","startHeight","endHeight","middleHeight","createHeightFunction","optionAltitude","verticalDistance","horizontalDistance","getAltitude","adjustAngleForLERP","scratchStart","createUpdateCV","optionPitchAdjustHeight","startRoll","pitchFunction","scratchStartCart","scratchEndCart","createUpdate3D","optionFlyOverLongitude","optionFlyOverLongitudeWeight","startCart","destCart","useLongFlight","hitLon","lonMin","lonMax","hitInside","din","useLongestFlight","useShortestFlight","startLongitude","destLongitude","startLatitude","destLatitude","isolateUpdateFunction","createUpdate2D","incrementAmount","scratchDestination","emptyFlight","wrapCallback","controller","enableInputs","updateFunctions","Cesium3DContentGroup","Cesium3DTile","hasContentsArray","hasMultipleContents","contentHeader","_contentHeader","parentTransform","computedTransform","parentInitialTransform","_initialTransform","contentBoundingVolume","viewerRequestVolume","refine","_verticalExaggeration","_verticalExaggerationRelativeHeight","createBoundingVolume","_boundingVolume2D","_contentBoundingVolume","_contentBoundingVolume2D","_viewerRequestVolume","geometricError","_geometricError","updateGeometricErrorScale","contentState","contentResource","hasEmptyContent","contentHeaderUri","_content","_contentResource","_contentState","_expiredContent","_serverKey","hasTilesetContent","hasImplicitContent","hasRenderableContent","hasImplicitContentMetadata","expire","expireDuration","expireDate","lastStyleTime","_optimChildrenWithinParent","NOT_COMPUTED","clippingPlanesDirty","clippingPolygonsDirty","priorityDeferred","implicitSubtree","_distanceToCamera","_centerZDepth","_screenSpaceError","_screenSpaceErrorProgressiveResolution","_visibilityPlaneMask","_visible","_inRequestVolume","_finalResolution","_stackLength","_selectionDepth","_updatedVisibilityFrame","_touchedFrame","_visitedFrame","_selectedFrame","_wasSelectedLastFrame","_requestedFrame","_ancestorWithContent","_ancestorWithContentAvailable","_refines","_shouldSelect","_isClipped","_isClippedByPolygon","_clippingPlanesState","_clippingPolygonsState","_debugBoundingVolume","_debugContentBoundingVolume","_debugViewerRequestVolume","_debugColor","_debugColorizeTiles","_priority","_priorityHolder","_priorityProgressiveResolution","_priorityProgressiveResolutionScreenSpaceErrorLeaf","_priorityReverseScreenSpaceError","_foveatedFactor","_wasMinPriorityChild","_loadTimestamp","_commandsLength","_colorDirty","contentAvailable","contentReady","contentFailed","contentUnloaded","hasUnloadedRenderableContent","contentExpired","EXPIRED","commandsLength","createPriorityFunction","getScreenSpaceError","useParentGeometricError","progressiveResolutionHeightFraction","heightFraction","parentGeometricError","_scaledGeometricError","dynamicScreenSpaceError","_dynamicScreenSpaceErrorComputedDensity","dynamicScreenSpaceErrorFactor","updateVisibility","parentVisibilityPlaneMask","distanceToTile","distanceToTileCenter","insideViewerRequestVolume","screenSpaceError","isSkippingLevelOfDetail","getPriorityReverseScreenSpaceError","memoryAdjustedScreenSpaceError","isProgressiveResolutionTile","tilePasses","parentFails","isPriorityProgressiveResolution","scaledCameraDirection","closestPointOnLine","toLine","toLineNormalized","scaledToLine","closestOnSphere","toClosestOnSphere","toClosestOnSphereNormalize","skipLevelOfDetail","foveatedScreenSpaceError","foveatedConeSize","PRELOAD_FLIGHT","PRELOAD","maximumFovatedFactor","foveatedConeFactor","normalizedFoveatedFactor","sseRelaxation","foveatedInterpolationCallback","foveatedMinimumScreenSpaceErrorRelaxation","isPriorityDeferred","updateExpiration","requestContent","multipleContents","contentsJson","requestInnerContents","PROCESSING","requestMultipleContents","expired","numberOfPendingRequests","preprocessed","_disableSkipLevelOfDetail","GEOMETRY","VECTOR","IMPLICIT_SUBTREE","IMPLICIT_SUBTREE_JSON","EXTERNAL_TILESET","contentFactory","binaryPayload","jsonPayload","getContentMetadataView","groupMetadata","makeContent","processArrayBuffer","requestSingleContent","cancelRequests","unloadContent","scratchProjectedBoundingSphere","getBoundingVolume","computeIntersectionWithBoundingVolume","clippingPlanesOriginMatrix","clippingPolygons","contentVisibility","getContentBoundingVolume","scratchToTileCenter","scratchMatrix","scratchHalfAxes","scratchTransform","createBoxFromTransformedRegion","initialTransform","boundingVolumeHeader","tileMetadata","metadataBoundingVolumeHeader","tileOrientedBoundingBox","createBox","exaggerateBoundingBox","tileBoundingVolume","rectangleRegion","computeBoundingVolumes","createRegion","tileBoundingSphere","createSphere","exaggeratedCenter","exaggeratedRadius","scratchExaggeratedCorners","exaggeratedCorners","exaggeratedBox","exaggerationChanged","uniformScale","passOptions","commandStart","currentClippingPlanesState","clippingPlanesState","updateClippingPlanes","currentClippingPolygonsState","clippingPolygonsState","updateClippingPolygons","isRender","hasContentBoundingVolume","showVolume","debugShowContentBoundingVolume","createDebugVolume","debugShowViewerRequestVolume","debugColorizeTilesOn","debugColorizeTiles","_heatmap","tilePropertyName","debugColorizeTilesOff","colorize","applyDebugSettings","makeStyleDirty","expiredContent","updateContent","commandEnd","scratchCommandList","isolateDigits","normalizedValue","numberOfDigits","leftShift","scaled","priorityNormalizeAndClamp","expireDurationDate","updateExpireDate","incrementLoadCounts","numberOfTilesWithContentReady","numberOfLoadedTilesTotal","savedCommandList","preferLeaves","minimumPriority","_minimumPriority","maximumPriority","_maximumPriority","preloadProgressiveResolutionScale","foveatedLeftShift","foveatedDeferScale","preloadProgressiveResolutionLeftShift","preloadFlightScale","foveatedDeferLeftShift","depthDigits","preferredSortingDigits","reverseScreenSpaceError","preloadProgressiveResolutionDigits","foveatedDigits","foveatedFactor","preferredSortingLeftShift","foveatedDeferDigits","preloadFlightDigits","Cesium3DTileBatchTable","_extensions","jsonHeader","initializeProperties","_batchTableHierarchy","legacyHierarchy","HIERARCHY","initializeHierarchy","_binaryPropertiesByteLength","_batchTableBinaryProperties","classType","totalByteLength","getDefaultShader","applyHighlight","modifyDiffuse","diffuseAttributeOrUniformName","uniformMatch","sourceDiffuse","replaceDiffuse","functionCall","nestedLevel","replacedFunction","replaceDiffuseTextureCalls","evaluateColor","isExactClass","getExactClassName","hasPropertyBySemantic","scratchPropertyIds","propertyIds","handleTranslucent","batchIdAttributeName","renamedSource","newMain","hasPremultipliedAlpha","tile_batchTexture","tile_textureDimensions","tile_textureStep","tile_colorBlend","MIX","getColorBlend","tile_pickTexture","deriveCommand","derivedCommand","translucentCommand","tile_translucentCommand","deriveTranslucentCommand","setCesium3DTileBit","CESIUM_3D_TILE_MASK","getTranslucentRenderState","deriveOpaqueCommand","getOpaqueRenderState","deriveZBackfaceCommand","u_polygonOffset","getLogDepthPolygonOffsetFragmentShaderProgram","deriveStencilCommand","SKIP_LOD_MASK","SKIP_LOD_BIT_SHIFT","GREATER_OR_EQUAL","getLastSelectionDepth","stencilCommand","addDerivedCommands","_tile","finalResolution","bivariateVisibilityTest","hasMixedContent","styleCommandsNeeded","getStyleCommandsNeeded","originalCommand","zback","_backfaceCommands","Cesium3DTileContent","featurePropertiesDirty","pointsLength","trianglesLength","geometryByteLength","texturesByteLength","innerContents","Cesium3DTileContentFactory","b3dm","fromB3dm","pnts","fromPnts","i3dm","fromI3dm","cmpt","fromTileType","externalTileset","vctr","subt","subtreeJson","glb","tilesetRequiresGaussianSplattingExt","fromGltf","fromGeoJson","Cesium3DTileContentType","BATCHED_3D_MODEL","INSTANCED_3D_MODEL","COMPOSITE","POINT_CLOUD","GLTF","GLTF_BINARY","MULTIPLE_CONTENT","GEOJSON","VOXEL_BINARY","VOXEL_JSON","Cesium3DTileFeature","_batchId","getPolylinePositions","featureId","getPropertyInherited","contentMetadata","subtreeMetadata","tilesetMetadata","Cesium3DTileFeatureTable","_cachedTypedArrays","getTypedArrayFromBinary","featureTable","componentLength","cachedTypedArrays","getGlobalProperty","jsonValue","getPropertyArray","getTypedArrayFromArray","USE_OPTIMIZATION","SKIP_OPTIMIZATION","Cesium3DTileOptimizations","checkChildrenWithinParent","childBoundingVolume","childOrientedBoundingBox","axisLength","Cesium3DTilePass","RENDER","PICK","SHADOW","REQUEST_RENDER_MODE_DEFER_CHECK","MOST_DETAILED_PRELOAD","MOST_DETAILED_PICK","requestTiles","ignoreCommands","getPassOptions","Cesium3DTilePointFeature","_billboardImage","_billboardColor","_billboardOutlineColor","_billboardOutlineWidth","_billboardSize","_pointSize","_pointOutlineColor","_pointOutlineWidth","_heightOffset","setBillboardImage","defaultPointOutlineColor","defaultPointOutlineWidth","newPointSize","defaultPointSize","currentOutlineColor","currentOutlineWidth","currentPointSize","pointSize","pointOutlineColor","pointOutlineWidth","labelColor","labelOutlineColor","labelOutlineWidth","labelText","backgroundEnabled","anchorLineEnabled","anchorLineColor","imageChanged","labelVerticalOrigin","Cesium3DTileStyle","_labelColor","_labelOutlineColor","_labelOutlineWidth","_labelStyle","_labelText","_backgroundEnabled","_anchorLineEnabled","_anchorLineColor","_labelVerticalOrigin","_colorShaderFunction","_showShaderFunction","_pointSizeShaderFunction","_colorShaderFunctionReady","_showShaderFunctionReady","_pointSizeShaderFunctionReady","_colorShaderTranslucent","styleJson","metaJson","getExpression","tileStyle","conditions","getJsonFromExpression","conditionsExpression","getColorShaderFunction","functionSignature","variableSubstitutionMap","shaderState","getShaderFunction","getShowShaderFunction","getPointSizeShaderFunction","getVariables","variables","Cesium3DTileStyleEngine","_styleDirty","_lastStyleTime","resetDirty","styleDirty","_selectedTiles","_selectedTilesToStyle","numberOfFeaturesStyled","numberOfTilesStyled","Cesium3DTilesVoxelProvider","componentTypes","paddingBefore","paddingAfter","globalTransform","shapeTransform","minBounds","maxBounds","minimumValues","maximumValues","maximumTileCount","_shapeTransform","_globalTransform","_minBounds","_maxBounds","_paddingBefore","_paddingAfter","_className","_types","_componentTypes","_metadataOrder","ELLIPSOID","Z_UP","Y_UP","_minimumValues","_maximumValues","_maximumTileCount","_availableLevels","_implicitTileset","metadataOrder","availableLevels","implicitTiling","schemaUri","getSchemaLoader","getMetadataSchemaLoader","metadataJson","voxel","providerOptions","classStatistics","propertyInfo","getComponentCount","hasMinimumValues","getAttributeInfo","BOX","getBoxShape","getEllipsoidShape","minRadius","maxRadius","minAngle","maxAngle","CYLINDER","getCylinderShape","getShape","TILESET_TILE_COUNT","getTileCount","valuesArray","requestData","tileLevel","tileX","tileY","tileZ","keyframe","subtreeCache","subtreeResource","getSubtree","gltfRelative","Cesium3DTileset","_basePath","_asset","_extensionsUsed","_modelUpAxis","_modelForwardAxis","_processingQueue","_emptyTiles","_requestedTiles","_timeSinceLoad","_updatedModelMatrixFrame","_modelMatrixChanged","_previousModelMatrix","_extras","_showCreditsOnScreen","showCreditsOnScreen","_cullWithChildrenBounds","cullWithChildrenBounds","_allTilesAdditive","_hasMixedContent","_stencilClearCommand","_memoryAdjustedScreenSpaceError","_cacheBytes","cacheBytes","maximumCacheOverflowBytes","_maximumCacheOverflowBytes","_styleEngine","_styleApplied","_addHeightCallbacks","_statisticsLast","_statisticsPerPass","_requestedTilesInFlight","debugHeatmapTilePropertyName","cullRequestsWhileMoving","_cullRequestsWhileMoving","cullRequestsWhileMovingMultiplier","_tilesLoaded","_initialTilesLoaded","_tileDebugLabels","_initialClippingPlanesOriginMatrix","_clippingPlanesOriginMatrix","_clippingPlanesOriginMatrixDirty","_vectorClassificationOnly","vectorClassificationOnly","_vectorKeepDecodedPositions","vectorKeepDecodedPositions","_imageryLayers","_imageryLayersModificationCounter","_imageryLayersListener","imageryLayers","layerAdded","layerRemoved","layerMoved","layerShownOrHidden","_asynchronouslyLoadImagery","asynchronouslyLoadImagery","preloadWhenHidden","preloadFlightDestinations","_foveatedConeSize","_foveatedMinimumScreenSpaceErrorRelaxation","foveatedTimeDelay","dynamicScreenSpaceErrorDensity","dynamicScreenSpaceErrorHeightFalloff","_pointCloudShading","pointCloudShading","_pointCloudEyeDomeLighting","loadProgress","allTilesLoaded","initialTilesLoaded","tileLoad","tileUnload","tileFailed","tileVisible","baseScreenSpaceError","skipScreenSpaceErrorFactor","skipLevels","immediatelyLoadDesiredLevelOfDetail","loadSiblings","setOwner","_clippingPolygons","_imageBasedLighting","_shouldDestroyImageBasedLighting","_environmentMapManager","backFaceCulling","_enableShowOutline","enableShowOutline","enableCollision","_projectTo2D","_enablePick","enablePick","debugFreezeFrame","_enableDebugWireframe","enableDebugWireframe","debugWireframe","debugPickedTileLabelOnly","debugPickedTile","debugPickPosition","debugShowGeometricError","debugShowRenderingStatistics","debugShowMemoryUsage","debugShowUrl","examineVectorLinesFunction","_metadataExtension","featureIdLabel","_featureIdLabel","instanceFeatureIdLabel","_instanceFeatureIdLabel","makeTile","tileHeader","parentTile","rootCoordinates","contentUri","tileJson","isCesium3DTileset","asset","imageryLayersModificationCounter","tilesLoaded","metadataExtension","timeSinceLoad","totalMemoryUsageInBytes","styleEngine","environmentMapManager","createCredits","loadJson","processMetadataExtension","gltfUpAxis","modelUpAxis","modelForwardAxis","extensionsUsed","loadTileset","clippingPlanesOrigin","originCartographic","checkSupportedExtensions","tilesetVersion","rootTile","numberOfTilesTotal","childTile","scratchPositionNormal","scratchHalfHeight","numberOfTilesProcessing","handleTileFailure","destroyTile","destroySubtree","decrementLoadCounts","sortTilesByPriority","postPassesUpdate","requestedTilesInFlight","outOfView","cancelOutOfViewRequests","statisticsLast","lastNumberOfPendingRequest","lastNumberOfTilesProcessing","progressChanged","raiseLoadProgressEvent","unloadTiles","unloadTile","prePassesUpdate","filterProcessingQueue","cacheByteLimit","memoryExceeded","decreaseScreenSpaceError","increaseScreenSpaceError","processTiles","transformLocal","centerLocal","positionLocal","halfHeightVector","heightClose","heightFar","horizonFactor","updateDynamicScreenSpaceError","newFrame","scratchUpdateHeightCartographic","scratchUpdateHeightCartographic2","scratchUpdateHeightCartesian","processUpdateHeight","heightCallbackData","callbackData","invoked","stringOptions","maximumFractionDigits","formatMemoryString","memorySizeInBytes","memoryInMegabytes","computeTileLabelPosition","addTileDebugLabel","labelString","innerContentUrls","newLabel","passStatistics","resetMinimumMaximum","detectModelMatrixChanged","getTraversal","selectTiles","requestedTiles","numberOfInitialCommands","selectedTiles","lengthBeforeUpdate","incrementSelectionCounts","emptyTiles","addedCommandsLength","backfaceCommands","backfaceCommandsLength","numberOfCommands","attenuation","eyeDomeLighting","selectedLength","emptyLength","updateTileDebugLabels","updateTiles","assetExtras","extraCredits","trimLoadedTiles","updateForPass","tilesetPassState","originalCommandList","originalCamera","originalCullingVolume","queueCommands","hasExtension","extensionName","supportedExtensions","MAXAR_content_geojson","scratchGetHeightRay","scratchGetHeightCartographic","addedCallbacks","scratchSphereIntersection","scratchPickIntersection","candidates","boundsIntersection","isGltfExtensionUsed","gltfExtensionName","isGltfExtensionRequired","Cesium3DTilesetBaseTraversal","traversal","stackMaximumLength","emptyTraversal","selectDesiredTile","selectTile","updateAndPushChildren","updateTile","loadTile","touchTile","sortChildrenByDistanceToCamera","checkRefines","refines","anyChildrenVisible","minIndex","childRefines","executeEmptyTraversal","minPriorityChild","priorityHolder","canTraverse","allDescendantsLoaded","childrenLength","traverse","visitTile","parentRefines","stoppedRefining","executeTraversal","Cesium3DTilesetCache","_list","_sentinel","_trimTiles","unloadCallback","trimTiles","sentinel","Cesium3DTilesetHeatmap","_previousMinimum","_previousMaximum","_referenceMinimum","_referenceMaximum","getHeatmapValue","tileValue","setReferenceMinimumMaximum","heatmapColors","heatmapValue","getHeatmapValueAndUpdateMinimumMaximum","shiftedMax","colorPosition","colorPositionFloor","colorPositionCeil","colorZero","colorOne","finalColor","referenceMinimum","referenceMaximum","useReference","Cesium3DTilesetMetadata","groupIds","groupsJson","groupId","_schema","_groups","_groupIds","Cesium3DTilesetMostDetailedTraversal","Cesium3DTilesetSkipTraversal","descendantTraversal","selectionTraversal","ancestorStack","ancestorStackMaximumLength","loadedTile","selectDescendants","updateTileAncestorContentLinks","parentHasContent","reachedSkippingThreshold","inBaseTraversal","lastAncestor","waitingTile","traverseAndSelect","Cesium3DTilesetStatistics","numberOfFeaturesSelected","numberOfFeaturesLoaded","numberOfPointsSelected","numberOfPointsLoaded","numberOfTrianglesSelected","numberOfTilesCulledWithChildrenUnion","texturesReferenceCounterById","textureIds","getTextureIds","referenceCounter","textureByteLength","getTextureByteLengthById","Cesium3DTilesetTraversal","updateTileVisibility","meetsScreenSpaceErrorEarly","useOptimization","anyVisible","deltaMagnitude","diameter","isOnScreenLongEnough","cameraHasNotStoppedMovingLongEnough","updateMinimumMaximumPriority","CircleEmitter","_radius","ClassificationPrimitive","debugShowShadowVolume","_debugShowShadowVolume","_extruded","_spStencil","_spPick","_spColor","_spPick2D","_spColor2D","_rsStencilDepthPass","_rsStencilDepthPass3DTiles","_rsColorPass","_rsPickPass","_commandsIgnoreShow","_hasSphericalExtentsAttribute","_hasPlanarExtentsAttributes","_hasPerColorAttribute","_createBoundingVolumeFunction","_updateAndQueueCommandsFunction","_usePickOffsets","_primitiveOptions","vertexCacheOptimize","releaseGeometryInstances","allowPicking","_createRenderStatesFunction","_createShaderProgramFunction","_createCommandsFunction","_createPickOffsets","getStencilDepthRenderState","enableStencil","mask3DTiles","DECREMENT_WRAP","INCREMENT_WRAP","CLASSIFICATION_MASK","LESS_OR_EQUAL","getColorRenderState","NOT_EQUAL","_needs2DShader","pickRenderState","boundingVolumeIndex","commandIndex","updateAndQueueRenderCommand","updateAndQueuePickCommand","primitiveOptions","firstColor","hasPerColorAttribute","allColorsSame","hasSphericalExtentsAttribute","hasPlanarExtentsAttributes","hasAttributesForSphericalExtents","hasAttributesForTextureCoordinatePlanes","twoPasses","classificationPrimitive","stencilEnabled","createRenderStates","_appendDistanceDisplayConditionToShader","_modifyShaderPosition","_updateColorAttribute","planarExtents","cullFragmentsUsingExtents","attributeDecl","globalDecl","modifiedVS","modifyForEncodedNormals","extrudedDefine","shadowVolumeAppearance","vsPick","_appendShowToShader","_updatePickColorAttribute","pickFS3D","createPickFragmentShader","pickVS3D","createPickVertexShader","pickProgram2D","pickFS2D","pickVS2D","fsColorSource","createFragmentShader","vsColorSource","createVertexShader","colorProgram2D","fsColorSource2D","vsColorSource2D","createShaderProgram","colorCommands","pickCommands","_va","vaIndex","needs2DShader","derived2DCommand","appearance2D","commandsIgnoreShow","spStencil","commandIgnoreShow","createColorCommands","usePickOffsets","pickOffsets","pickOffset","pickIndex","_pickOffsets","pick2D","createPickCommands","boundingVolumes","_updateBoundingVolumes","_boundingSphereWC","_boundingSphereCV","_boundingSphere2D","_boundingSphereMorph","queueTerrainCommands","queue3DTilesCommands","invertClassification","ignoreShowCommands","ignoreShowCommandsLength","pickLength","updateAndQueueCommands","ClassificationType","ClippingPlane","UpdateChangedCartesian3","onChangeCallback","clippingPlane","_clippingPlane","_cartesian3","fromPlane","ClippingPlaneCollection","_planes","_dirtyIndex","_multipleDirtyPlanes","edgeColor","edgeWidth","planeAdded","planeRemoved","unionClippingRegions","_unionClippingRegions","_testIntersection","unionIntersectFunction","defaultIntersectFunction","_uint8View","_float32View","_clippingPlanesTexture","planesLength","setIndexDirty","newPlaneIndex","planeToKeep","planesCount","distanceEncodeScratch","oct32EncodeScratch","packPlanesAsUint8","clippingPlaneCollection","uint8View","byteIndex","oct32Normal","encodedDistance","packPlanesAsFloats","float32View","floatIndex","computeTextureResolution","pixelsNeeded","maxSize","textureResolutionScratch","clippingPlanesTexture","useFloatTexture","currentPixelCount","requiredResolution","dirtyIndex","getTextureResolution","ClippingPolygon","copyArrayCartesian3","_cachedPositions","_cachedRectangle","equalsArrayCartesian3","spherePointScratch","computeSphericalExtents","spherePoint","magXY","sphereLatitude","sphereLongitude","ClippingPolygonCollection","_totalPositions","polygonAdded","polygonRemoved","_extentsFloat32View","_extentsCount","_polygonsTexture","_extentsTexture","_signedDistanceTexture","_signedDistanceComputeCommand","polygonsLength","totalPositions","extentsTexture","extentsCount","pixelsNeededForExtents","pixelsNeededForPolygonPositions","clippingTexture","polygonsCount","polygonsTexture","signedDistanceTexture","clippingPolygonCollection","polygonsFloat32View","extentsFloat32View","extentsList","extentsIndexByPolygon","polygonIndicesList","paddedExtents","polygonIndices","intersectingPolygons","getExtents","latitudeApproximation","longitudeApproximation","extentsFloatIndex","longitudeRangeInverse","latitudeRangeInverse","packPolygonsAsFloats","getClippingDistanceTextureResolution","polygonTexture","u_polygonsLength","u_extentsLength","u_extentsTexture","u_polygonTexture","createSignedDistanceTextureCommand","scratchRectangleTile","scratchRectangleIntersection","polygonBoundingRectangle","tileBoundingRectangle","clippingPolygonsCollection","getClippingExtentsTextureResolution","scratchTextureDimensions","positionHighAndScaleX","positionLowAndScaleY","packedAttribute0","packedAttribute1","MAXIMUM_SIZE_INDEX","SLICE_INDEX","BRIGHTNESS_INDEX","CloudCollection","_clouds","_cloudsToUpdate","_cloudsToUpdateIndex","_cloudsRemoved","_noiseTexture","_textureSliceWidth","_noiseTextureRows","noiseDetail","noiseOffset","u_noiseTexture","u_noiseTextureDimensions","getNoiseTextureDimensions","u_noiseDetail","_vaNoise","_spNoise","_spCreated","_rs","debugBillboards","_compiledDebugBillboards","debugEllipsoids","_compiledDebugEllipsoids","destroyClouds","clouds","removeClouds","cloudCollection","newClouds","cloud","cloudType","CUMULUS","_updateCloud","_cloudCollection","texturePositions","textureIndices","cloudCollection_indexBufferBatched","cloudCollection_indexBufferInstanced","cloudCollection_vertexBufferInstanced","writePositionAndScale","writePackedAttribute0","brightness","writePackedAttribute1","maximumSize","writeColor","writeCloud","debugging","textureSliceWidth","noiseTextureRows","positionBuffer","createTextureVA","textureCommand","u_noiseOffset","createNoiseTexture","cloudsLength","cloudsToUpdate","cloudsToUpdateLength","numberOfClouds","updateClouds","createDrawCommands","CloudType","ColorBlendMode","Composite3DTileContent","_contents","tilesLength","compositeIndex","tileType","tileByteLength","childResource","ConditionsExpression","_conditionsExpression","_conditions","_runtimeConditions","runtimeConditions","statement","condExpression","Statement","setRuntime","returnType","shaderFunction","getShaderExpression","defaultAngle","ConeEmitter","_angle","ContentMetadata","_class","setPropertyBySemantic","CreditDisplayElement","delimiterClassName","createDelimiterElement","delimiterElement","createCreditElement","elementWrapperTagName","displayCredits","domIndex","credit1","credit2","creditIndex","delimiterDomIndex","existingDelimiter","existingElement","CreditDisplay","lightbox","lightboxCredits","hideLightbox","closeButton","creditList","cesiumCreditContainer","screenContainer","expandLink","showLightbox","shadowRootOrDocumentHead","shadowRoot","styleElem","appendCss","cesiumCredit","_delimiter","_screenContainer","_cesiumCreditContainer","_lastViewportHeight","_lastViewportWidth","_lightboxCredits","_creditList","_lightbox","_hideLightbox","_expandLink","_expanded","_staticCredits","_cesiumCredit","_previousCesiumCredit","_currentCesiumCredit","_creditDisplayElementPool","_creditDisplayElementIndex","_currentFrameCredits","screenCredits","_defaultCredit","setCredit","creditDisplayElement","poolIndex","_creditDisplayElementPoolIndex","defaultCredit","logo","_cesiumCreditInitialized","staticCredits","existingCredit","removeStaticCredit","styleLightboxContainer","currentFrameCredits","staticCredit","creditCollection","previousCredit","currentCredit","swapCesiumCredit","CubeMapPanorama","_returnCommand","returnCommand","_addToPanoramaCommandList","_cubeMap","_useHdr","_hasError","useHdr","panoramaCommandList","sourceType","u_cubeMap","u_cubeMapPanoramaTransform","CullFace","CumulusCloud","_maximumSize","defaultMaxSize","_brightness","DebugAppearance","perInstanceAttribute","glslDatatype","varyingName","_attributeName","_glslDatatype","DebugCameraPrimitive","_camera","_frustumSplits","_updateOnChange","updateOnChange","_outlinePrimitives","_planesPrimitives","scratchOrientation","scratchPerspective","scratchPerspectiveOffCenter","scratchOrthographic","scratchOrthographicOffCenter","scratchSplits","planesPrimitives","outlinePrimitives","cameraFrustum","numFrustums","DebugInspector","_cachedShowFrustumsShaders","scratchFrustumColor","scratchShowFrustumCommand","executeDebugShowFrustumsCommand","shaderProgramId","debugShaderProgram","targets","createDebugShowFrustumsShaderProgram","debugUniformMap","debugShowCommandsColor","debugShowFrustumsColor","debugShowCommands","debugShowFrustums","createDebugShowFrustumsUniformMap","DebugModelMatrixPrimitive","DepthFunction","DepthPlane","depthPlaneEllipsoidOffset","_ellipsoidOffset","depthQuadScratch","useLogDepth","depthQuad","computeDepthQuad","DerivedCommand","fragDepthRegex","discardRegex","createDepthOnlyDerivedCommand","depthOnlyCommand","writesDepthOrDiscards","usesLogDepth","getDepthOnlyShaderProgram","_depthOnlyRenderStateCache","cachedDepthOnlyState","depthOnlyState","getDepthOnlyRenderState","writeLogDepthRegex","vertexlogDepthRegex","getPickRenderState","pickRenderStateCache","cachedPickState","pickState","replaceDefine","defineName","newDefineValue","unapplyValueTransform","unnormalize","getSourceValueStringComponent","classProperty","metadataProperty","componentName","hasValueTransform","createLogDepthCommand","writesLogDepth","logMain","logSource","getLogDepthShaderProgram","createPickDerivedCommand","pickCommand","outputColorVariable","newSources","getPickShaderProgram","createPickMetadataDerivedCommand","pickMetadataCommand","schemaId","getGlslType","sourceValueStrings","getSourceValueStringScalar","componentNames","newDefines","METADATA_PICKING_ENABLED","METADATA_PICKING_VALUE_TYPE","METADATA_PICKING_VALUE_STRING","METADATA_PICKING_VALUE_COMPONENT_X","METADATA_PICKING_VALUE_COMPONENT_Y","METADATA_PICKING_VALUE_COMPONENT_Z","METADATA_PICKING_VALUE_COMPONENT_W","newFragmentShaderSource","getPickMetadataShaderProgram","createHdrCommand","getHdrShaderProgram","DeviceOrientationCameraController","_lastAlpha","_lastBeta","_lastGamma","_alpha","_beta","_gamma","_removeListener","scratchQuaternion1","scratchQuaternion2","bQuat","gQuat","aQuat","DiscardEmptyTileImagePolicy","emptyImage","isReady","shouldDiscardImage","DiscardMissingTileImagePolicy","_pixelsToCheck","_missingImagePixels","_missingImageByteLength","_isReady","allAreTransparent","missingImagePixels","pixel","DracoLoader","_getDecoderTaskProcessor","_decoderTaskProcessor","_maxDecodingConcurrency","_taskProcessorReady","decodePointCloud","decoderTaskProcessor","decodeBufferView","DynamicAtmosphereLightingType","SCENE_LIGHT","SUNLIGHT","enableLighting","dynamicAtmosphereLighting","dynamicAtmosphereLightingFromSun","DynamicEnvironmentMapManager","_radianceMapDirty","_radianceCommandsDirty","_convolutionsCommandsDirty","_irradianceCommandDirty","_irradianceTextureDirty","_sphericalHarmonicCoefficientsDirty","_shouldRegenerateShaders","_shouldReset","mipmapLevels","_mipmapLevels","_radianceMapComputeCommands","_convolutionComputeCommands","_irradianceComputeCommand","_radianceMapFS","_irradianceMapFS","_convolveSP","_radianceMapTextures","_specularMapTextures","_radianceCubeMap","_irradianceMapTexture","DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS","_lastTime","_radiiAndDynamicAtmosphereColor","_sceneEnvironmentMap","maximumSecondsDifference","atmosphereScatteringIntensity","groundColor","AVERAGE_EARTH_GROUND_COLOR","groundAlbedo","shouldRegenerateShaders","radianceCubeMap","maximumMipmapLevel","_maximumComputeCommandCount","_activeComputeCommandCount","_nextFrameCommandQueue","_queueCommand","_updateCommandQueue","scratchPackedAtmosphere","scratchSurfacePosition","scratchAdjustments","irradianceTextureDimensions","isDynamicUpdateSupported","regenerateEnvironmentMap","radiiAndDynamicAtmosphereColor","atmosphereNeedsUpdate","adjustments","u_radiiAndDynamicAtmosphereColor","u_enuToFixedFrame","u_faceDirection","u_positionWC","u_brightnessSaturationGammaIntensity","u_groundColor","updateRadianceMap","facesCopied","checkComplete","getPostExecute","u_roughness","u_radianceTexture","updateSpecularMaps","u_radianceMap","updateIrradianceResources","updateSphericalHarmonicCoefficients","_irradianceMapComputeCommand","EdgeFramebuffer","_framebufferManager","_idTexture","idTexture","hdr","existingColorTexture","existingDepthTexture","getClearCommand","getFramebuffer","EllipsoidPrimitive","_oneOverEllipsoidRadiiSquared","_computedModelMatrix","_translucent","onlySunLighting","_onlySunLighting","_depthTestEnabled","depthTestEnabled","_pickSP","_colorCommand","_pickCommand","u_radii","u_oneOverEllipsoidRadiiSquared","_pickUniforms","czm_pickColor","translucencyChanged","ellipsoidPrimitive_vertexArray","getVertexArray","boundingSphereDirty","materialChanged","lightingChanged","useLogDepthChanged","colorCommand","EllipsoidSurfaceAppearance","aboveGround","_flat","_faceForward","_aboveGround","Empty3DTileContent","EquirectangularPanorama","_repeatHorizontal","repeatHorizontal","_repeatVertical","repeatVertical","equirectangularMaterial","fabric","Jsep","addUnaryOp","op_name","max_unop_len","unary_ops","addBinaryOp","precedence","isRightAssociative","max_binop_len","binary_ops","right_associative","addIdentifierChar","additional_identifier_chars","addLiteral","literal_name","literal_value","literals","removeUnaryOp","getMaxKeyLen","removeAllUnaryOps","removeIdentifierChar","removeBinaryOp","removeAllBinaryOps","removeLiteral","removeAllLiterals","isDecimalDigit","binaryPrecedence","op_val","isIdentifierStart","isIdentifierPart","runHook","searchHook","gobbleSpaces","SPACE_CODE","TAB_CODE","LF_CODE","CR_CODE","gobbleExpressions","COMPOUND","untilICode","ch_i","SEMCOL_CODE","COMMA_CODE","gobbleExpression","gobbleBinaryExpression","gobbleBinaryOp","to_check","tc_len","biop","prec","biop_info","cur_biop","gobbleToken","right_a","comparePrev","BINARY_EXP","PERIOD_CODE","gobbleNumericLiteral","SQUOTE_CODE","DQUOTE_CODE","gobbleStringLiteral","OBRACK_CODE","gobbleArray","argument","UNARY_EXP","gobbleIdentifier","LITERAL","this_str","THIS_EXP","OPAREN_CODE","gobbleGroup","gobbleTokenProperty","QUMARK_CODE","MEMBER_EXP","CBRACK_CODE","CALL_EXP","gobbleArguments","CPAREN_CODE","chCode","IDENTIFIER","termination","separator_count","SEQUENCE_EXP","expressions","ARRAY_EXP","jsep","registered","COLON_CODE","stdClassProps","consequent","alternate","newTest","Expression","ast","_expression","definePlaceholder","defineReplace","replaceDefines","openSingleQuote","openDoubleQuote","closeQuote","replaceVariables","backslashRegex","removeBackslashes","_runtimeAst","createRuntimeAst","scratchStorage","arrayArray","cartesian2Index","cartesian3Index","cartesian4Index","cartesian2Array","cartesian3Array","cartesian4Array","getArray","getCartesian2","getCartesian3","getCartesian4","shaderExpression","unaryOperators","binaryOperators","variableRegex","replacementRegex","unaryFunctions","getEvaluateUnaryComponentwise","exp2","fract","binaryFunctions","getEvaluateBinaryComponentwise","ternaryFunctions","getEvaluateTernaryComponentwise","allowScalar","_test","ExpressionNodeType","CONDITIONAL","_evaluateConditional","FUNCTION_CALL","_evaluateRegExpTest","_evaluateRegExpExec","_evaluateToString","UNARY","_evaluateNot","_evaluateNegative","_evaluatePositive","_evaluateNaN","_evaluateIsFinite","_evaluateIsExactClass","_evaluateIsClass","_evaluateGetExactClassName","_evaluateBooleanConversion","_evaluateNumberConversion","_evaluateStringConversion","getEvaluateUnaryFunction","BINARY","_evaluatePlus","_evaluateMinus","_evaluateTimes","_evaluateDivide","_evaluateMod","_evaluateEqualsStrict","_evaluateNotEqualsStrict","_evaluateLessThan","_evaluateLessThanOrEquals","_evaluateGreaterThan","_evaluateGreaterThanOrEquals","_evaluateAnd","_evaluateOr","_evaluateRegExpMatch","_evaluateRegExpNotMatch","getEvaluateBinaryFunction","TERNARY","getEvaluateTernaryFunction","MEMBER","_evaluateMemberBrackets","_evaluateMemberDot","ARRAY","_evaluateArray","VARIABLE","_evaluateVariable","VARIABLE_IN_STRING","_evaluateVariableString","LITERAL_COLOR","_evaluateLiteralColor","LITERAL_VECTOR","_evaluateLiteralVector","LITERAL_STRING","_evaluateLiteralString","REGEX","_evaluateRegExp","BUILTIN_VARIABLE","evaluateTilesetTime","_evaluateLiteral","replaceBackslashes","isLiteralType","LITERAL_NULL","LITERAL_BOOLEAN","LITERAL_NUMBER","parseLiteral","LITERAL_REGEX","parseRegex","parseCall","LITERAL_UNDEFINED","parseKeywordsAndVariables","parseMathConstant","parseNumberConstant","parseMemberExpression","getFeatureProperty","checkFeature","convertHSLToRGB","convertRGBToColor","colorToVec4","getExpressionArray","getVariableName","variableName","NULL_SENTINEL","vectorLength","vectorExpression","colorToVec3","Fog","renderable","heightScalar","_heightFalloff","screenSpaceErrorFactor","heightFalloff","positionNormal","FrameRateMonitor","samplingWindow","defaultSettings","quietPeriod","warmupPeriod","minimumFrameRateDuringWarmup","minimumFrameRateAfterWarmup","_lowFrameRate","_nominalFrameRate","_frameTimes","_needsQuietPeriod","_quietPeriodEndTime","_warmupPeriodEndTime","_frameRateIsLow","_lastFramesPerSecond","_pauseCount","_preUpdateRemoveListener","preUpdate","monitor","beginningOfWindow","averageTimeBetweenFrames","lowFrameRate","nominalFrameRate","_hiddenPropertyName","mozHidden","msHidden","webkitHidden","visibilityChangeEventName","visibilityChangeListener","unpause","_visibilityChangeRemoveListener","fromScene","_frameRateMonitor","lastFramesPerSecond","jobScheduler","shadowMaps","getMorphTime","cameraUnderground","pickVoxel","offscreen","shadowState","shadowsEnabled","lightShadowMaps","nearPlane","farPlane","closestObjectSize","pickingMetadata","edgeVisibilityRequested","numPasses","GaussianSplat3DTileContent","gaussianSplatPrimitive","_rotations","_scales","gltfPrimitive","worldTransform","_transformed","_sphericalHarmonicsDegree","_sphericalHarmonicsCoefficientCount","_packedSphericalHarmonicsData","hasGaussianSplatExtension","gaussianSplatTexture","selectedTileLength","transformed","rotations","sphericalHarmonicsCoefficientCount","sphericalHarmonicsDegree","packedSphericalHarmonicsData","floatView","intView","float32ToFloat16","half","newExponent","extractSHDegreeAndCoef","getShAttributePrefix","lStart","loaderOptions","releaseGltfJson","upAxis","forwardAxis","gltfJson","transformTile","_resourcesLoaded","getAttributeBySemantic","POSITION","ROTATION","SCALE","degreeAndCoefFromAttributes","tileContent","packedData","shAttributes","packedStride","packSphericalHarmonicsData","splatPrimitive","scratchMatrix4A","scratchMatrix4B","scratchMatrix4C","scratchMatrix4D","SnapshotState","markSteadySortStart","_lastSteadySortFrameNumber","_lastSteadySortCameraPosition","_hasLastSteadySortCameraPosition","_lastSteadySortCameraDirection","_hasLastSteadySortCameraDirection","isActiveSort","activeSort","requestId","_sortRequestId","dataGeneration","_splatDataGeneration","destroySnapshotTextures","sphericalHarmonicsTexture","retireTexture","_retiredTextures","resolveSteadySort","sortPromise","sortedData","expectedCount","sortedLen","_sorterPromise","_sorterState","_indexes","_sorterError","createGaussianSplatTexture","splatTextureData","GaussianSplatPrimitive","_numSplats","_needsGaussianSplatTexture","_snapshot","_pendingSnapshot","_scratchAggregateShBuffer","_selectedTilesStableFrames","_needsSnapshotRebuild","_snapshotRebuildStallFrames","_prevViewMatrix","_debugShowBoundingVolume","_lastTextureWidth","_lastTextureHeight","_vertexArrayLen","_baseTilesetUpdate","_wrappedUpdate","onTileLoad","onTileVisible","_selectedTileSet","_hasGaussianSplatTexture","_gaussianSplatTexturePending","_drawCommandModelMatrix","_rootTransform","_axisCorrectionMatrix","getAxisCorrectionMatrix","_isDestroyed","_activeSort","_pendingSortPromise","_pendingSort","isStable","rootTransform","computedModelMatrix","toGlobal","toLocal","attributePositions","attributeRotations","attributeScales","generateSplatTexture","generateFromAttributes","numSplats","lastTextureHeight","lastTextureWidth","oldTex","shData","dims","shCoefficientCount","splatsPerRow","floatsPerRow","texBuf","dataIndex","processGeneratedSplatTextureData","buildGSplatDrawCommand","renderResources","renderStateOptions","alphaOptions","u_splatAttributeTexture","u_sphericalHarmonicsTexture","u_sphericalHarmonicsDegree","u_cameraPositionWC","u_inverseModelRotation","u_splitDirection","getCullFace","splatQuadAttrLocations","screenQuadPosition","splatIndex","idxAttr","Attribute","vertexArrayCache","retired","releaseRetiredTextures","hasRootTransform","selectedTilesChanged","prevSet","haveSelectedTilesChanged","isBootstrap","allowRebuild","totalElements","aggregateAttributeValues","getAttributeCallback","aggregate","aggregateShData","requiredLength","tileShData","generation","radixSortIndexes","sortType","pendingSort","currentSnapshot","splatTexture","_shData","commitSnapshot","resolvePendingSnapshotSort","framesSinceLastSort","shouldStartSteadySort","rawPromise","hasSkipLevelOfDetail","GaussianSplatSorter","_maxSortingConcurrency","_sorterTaskProcessor","_getSorterTaskProcessor","sorterTaskProcessor","GaussianSplatTextureGenerator","_textureTaskProcessor","_getTextureTaskProcessor","textureTaskProcessor","Geometry3DTileContent","_geometries","_features","featureTableJSONByteLength","batchTableJSONByteLength","numberOfBoxes","BOXES_LENGTH","numberOfCylinders","CYLINDERS_LENGTH","numberOfEllipsoids","ELLIPSOIDS_LENGTH","numberOfSpheres","SPHERES_LENGTH","totalPrimitives","updateCommands","createColorChangedCallback","RTC_CENTER","batchIds","boxBatchIds","cylinderBatchIds","ellipsoidBatchIds","sphereBatchIds","BOX_BATCH_IDS","boxBatchIdsByteOffset","CYLINDER_BATCH_IDS","cylinderBatchIdsByteOffset","ELLIPSOID_BATCH_IDS","ellipsoidBatchIdsByteOffset","SPHERE_BATCH_IDS","sphereBatchIdsByteOffset","atLeastOneDefined","atLeastOneUndefined","boxes","cylinders","ellipsoids","spheres","getBatchIds","boxesByteOffset","BOXES","packedBoxLength","cylindersByteOffset","CYLINDERS","packedCylinderLength","ellipsoidsByteOffset","ELLIPSOIDS","packedEllipsoidLength","spheresByteOffset","SPHERES","packedSphereLength","createFeatures","geoJsonToFeatureInfo","configureNameFromProperties","mapInfoMxpNamespace","xmlToFeatureInfo","featureIndex","propertyElements","propertyIndex","propertyElement","mapInfoXmlToFeatureInfo","featureInfoResponse","propertyAttributes","imageryLayerFeatureInfoFromDataAndProperties","featureInfoElements","featureInfoElementIndex","featureInfoElement","featureInfoChildren","childIndex","esriXmlToFeatureInfo","featureMembers","featureMember","getGmlPropertiesRecursively","gmlToFeatureInfo","msGmlToFeatureInfo","xmlText","unknownXmlToFeatureInfo","gmlNode","isSingleValue","emptyBodyRegex","wmsServiceExceptionReportRegex","titleRegex","textToFeatureInfo","Globe","imageryLayerCollection","_imageryLayerCollection","_surfaceShaderSet","tileProvider","surfaceShaderSet","_terrainProvider","_terrainProviderChanged","_undergroundColor","_undergroundColorAlphaByDistance","_translucency","makeShadersDirty","_oceanNormalMapResourceDirty","_oceanNormalMapResource","tileCacheSize","loadingDescendantLimit","preloadAncestors","preloadSiblings","fillHighlightColor","lambertDiffuseMultiplier","showGroundAtmosphere","lightingFadeOutDistance","lightingFadeInDistance","nightFadeOutDistance","nightFadeInDistance","showWaterEffect","RECEIVE_ONLY","atmosphereHueShift","atmosphereSaturationShift","atmosphereBrightnessShift","showSkirts","_oceanNormalMap","_zoomedOutOceanSpecularIntensity","vertexShadowDarkness","requireNormals","fragmentSources","_tileProvider","materialUniformMap","baseVertexShaderSource","baseFragmentShaderSource","imageryLayersUpdatedEvent","_tileLoadQueueHigh","_tileLoadQueueMedium","_tileLoadQueueLow","baseColor","cartographicLimitRectangle","oceanNormalMapUrl","tileLoadProgressEvent","undergroundColor","undergroundColorAlphaByDistance","scratchSphereIntersectionResult","sphereIntersections","_tilesRenderedThisFrame","surfaceTile","pickBoundingSphere","tileBoundingRegion","renderedMesh","boundingSphereIntersection","rayOrigin","scratchGetHeightCartesian","scratchGetHeightIntersection","tileIfContainsCartographic","levelZeroTiles","_levelZeroTiles","tileWithMesh","_southwestChild","_southeastChild","_northwestChild","_northeastChild","vectorToMinimumPoint","oceanNormalMapResource","zoomedOutOceanSpecularIntensity","oceanNormalMap","GlobeDepth","_picking","_tempCopyDepthTexture","_pickColorFramebuffer","_outputFramebuffer","_copyDepthFramebuffer","_tempCopyDepthFramebuffer","_updateDepthFramebuffer","_clearGlobeColorCommand","_copyColorCommand","_copyDepthCommand","_tempCopyDepthCommand","_updateDepthCommand","_rsBlend","_rsUpdate","_useScissorTest","_scissorRectangle","_clearGlobeDepth","updateCopyCommands","globeDepth","useScissorTest","updateScissor","u_depthTexture","colorFramebufferManager","clearGlobeDepth","prepareColorTextures","executeCopyDepth","executeUpdateDepth","depthTextureToCopy","updateDepthFramebuffer","executeCopyColor","GlobeSurfaceShader","numberOfDayTextures","clippingShaderState","clippingPolygonShaderState","GlobeSurfaceShaderSet","_shadersByTexturesFlags","applyBrightness","applyContrast","applyHue","applySaturation","applyGamma","applyAlpha","applyDayNightAlpha","applySplit","showReflectiveOcean","showOceanWaves","perFragmentGroundAtmosphere","useWebMercatorProjection","enableFog","enableClippingPlanes","enableClippingPolygons","clippedByBoundaries","hasImageryLayerCutout","colorCorrect","highlightFillTile","colorToAlpha","hasExaggeration","showUndergroundColor","quantizationDefine","cartographicLimitRectangleFlag","cartographicLimitRectangleDefine","imageryCutoutFlag","imageryCutoutDefine","currentClippingShaderState","currentClippingPolygonsShaderState","surfaceShader","shadersByFlags","computeDayColor","positionMode","getPositionMode","get2DYPositionFraction","shadersByTexturesFlags","textureCount","GlobeSurfaceTile","imagery","waterMaskTexture","waterMaskTranslationAndScale","boundingVolumeSourceTile","boundingVolumeIsFromMesh","isClipped","toggleGeodeticSurfaceNormals","newEncoding","newVertexBuffer","_freeVertexArray","_createVertexArrayForMesh","wireframeVertexArray","eligibleForUnloading","shouldRemoveTile","RECEIVING","TRANSFORMING","tileImagery","loadingImagery","TRANSITIONING","freeResources","imageryList","freeVertexArray","START","parentSurfaceTile","_createTileImagerySkeletons","prepareNewTile","processStateMachine","vertexArraysToDestroy","terrainOnly","sourceData","sourceX","sourceY","sourceLevel","terrainDataPromise","doRequest","_requestError","createMeshOptions","scratchCreateMeshOptions","TRANSFORMED","createResources","waterMaskData","tile_waterMaskData","allWaterTexture","getContextWaterMaskData","waterMaskLength","ImageBitmap","textureSize","createWaterMaskTextureIfNeeded","sourceTile","_findAncestorTileWithTerrainData","_computeWaterMaskTranslationAndScale","processTerrainStateMachine","wasAlreadyRenderable","isTerrainDoneLoading","upsampledFromParent","isImageryDoneLoading","processImagery","_loadedCallbacks","newCallbacks","layerId","skipLoading","isUpsampledOnly","isAnyTileLoaded","isDoneLoading","tileImageryCollection","imageryLayer","thisTileDoneLoading","readyImagery","INVALID","hasExaggerationScale","encodingExaggerationScaleChanged","encodingRelativeHeightChanged","_tileToUpdateHeights","customData","indexBuffers","fromSizeInBytes","sourceTileRectangle","GlobeSurfaceTileProvider","_materialUniformMap","_quadtree","_blendRenderState","_disableCullingRenderState","_disableCullingBlendRenderState","_removeLayerAddedListener","_onLayerAdded","_removeLayerRemovedListener","_onLayerRemoved","_removeLayerMovedListener","_onLayerMoved","_removeLayerShownListener","_onLayerShownOrHidden","_imageryLayersUpdatedEvent","_layerOrderChanged","_tilesToRenderByTextureCount","_drawCommands","_uniformMaps","_usedDrawCommands","_vertexArraysToDestroy","_debug","wireframe","boundingSphereTile","_baseColor","_firstPassInitialColor","_hasLoadedTilesThisFrame","_hasFillTilesThisFrame","_oldVerticalExaggeration","_oldVerticalExaggerationRelativeHeight","_oldSceneMode","sortTileImageryByLayerIndex","aImagery","bImagery","_layerIndex","pushCommand","isBlendCommand","pushDerivedCommands","invalidateAllTiles","queueReprojectionCommands","forEachLoadedTile","updateCredits","beginUpdate","tilesToRenderByTextureCount","endUpdate","updateFillTiles","_tilesToRender","textureCountIndex","textureCountLength","tilesToRender","tileIndex","tileLength","addDrawCommandsForTile","updateForPick","drawCommands","cancelReprojections","terrainStateBefore","_lastSelectionResult","CULLED_BUT_NEEDED","computeTileVisibility","occluders","boundingSphereScratch","rectangleIntersectionScratch","splitCartographicLimitRectangleScratch","clipRectangleAntimeridian","splitRectangle","isUndergroundVisible","computeDistanceToTile","undergroundVisible","clippedCartographicLimitRectangle","areaLimitIntersection","planeIntersection","polygonIntersection","ortho3D","canRefine","readyImageryScratch","canRenderTraversalStack","canRenderWithoutLosingDetail","terrainReady","initialImageryState","layerIndex","lastFrame","_lastSelectionFrameNumber","southwestChild","southeastChild","northwestChild","northeastChild","descendant","lastFrameSelectionResult","_lastSelectionResultFrame","RENDERED","descendantSurface","descendantImagery","descendantTileImagery","descendantLoadingImagery","descendantIsReady","descendantLayerIndex","REFINED","tileDirectionScratch","computeTileLoadPriority","cameraDirection","tileDirection","modifiedModelViewScratch","modifiedModelViewProjectionScratch","tileRectangleScratch","localizedCartographicLimitRectangleScratch","localizedTranslucencyRectangleScratch","rtcScratch","centerEyeScratch","southwestScratch","northeastScratch","showTileThisFrame","readyTextureCount","tileSet","tilesRendered","texturesRendered","cornerPositionsScratch","ellipsoidalOccluder","_occluders","cornerPositions","oldMinimumHeight","oldMaximumHeight","hasBoundingVolumesFromMesh","ancestorTile","ancestorSurfaceTile","ancestorMesh","ancestorTerrainData","needsBounds","updateTileBoundingRegion","cameraHeight","tileImageryUpdatedEvent","reloadFunction","_imageryCache","tileImageriesToFree","insertionPoint","getTileReadyCallback","_reload","numDestroyed","scratchClippingPlanesMatrix","scratchInverseTransposeClippingPlanesMatrix","createTileUniformMap","globeSurfaceTileProvider","u_initialColor","initialColor","u_fillHighlightColor","u_zoomedOutOceanSpecularIntensity","u_oceanNormalMap","u_atmosphereLightIntensity","u_atmosphereRayleighCoefficient","u_atmosphereMieCoefficient","u_atmosphereRayleighScaleHeight","u_atmosphereMieScaleHeight","u_atmosphereMieAnisotropy","u_lightingFadeDistance","lightingFadeDistance","u_nightFadeDistance","nightFadeDistance","u_center3D","center3D","u_verticalExaggerationAndRelativeHeight","verticalExaggerationAndRelativeHeight","u_tileRectangle","u_modifiedModelView","centerEye","u_modifiedModelViewProjection","u_dayTextures","dayTextures","u_dayTextureTranslationAndScale","dayTextureTranslationAndScale","u_dayTextureTexCoordsRectangle","dayTextureTexCoordsRectangle","u_dayTextureUseWebMercatorT","dayTextureUseWebMercatorT","u_dayTextureAlpha","dayTextureAlpha","u_dayTextureNightAlpha","dayTextureNightAlpha","u_dayTextureDayAlpha","dayTextureDayAlpha","u_dayTextureBrightness","dayTextureBrightness","u_dayTextureContrast","dayTextureContrast","u_dayTextureHue","dayTextureHue","u_dayTextureSaturation","dayTextureSaturation","u_dayTextureOneOverGamma","dayTextureOneOverGamma","u_dayIntensity","dayIntensity","u_southAndNorthLatitude","southAndNorthLatitude","u_southMercatorYAndOneOverHeight","southMercatorYAndOneOverHeight","u_waterMask","u_waterMaskTranslationAndScale","u_minMaxHeight","minMaxHeight","u_scaleAndBias","scaleAndBias","u_dayTextureSplit","dayTextureSplit","u_dayTextureCutoutRectangles","dayTextureCutoutRectangles","u_clippingPlanes","u_cartographicLimitRectangle","localizedCartographicLimitRectangle","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle","clippingPlanesEdgeColor","clippingPlanesEdgeWidth","u_clippingDistance","u_clippingExtents","u_minimumBrightness","u_hsbShift","hsbShift","u_colorsToAlpha","colorsToAlpha","u_frontFaceAlphaByDistance","frontFaceAlphaByDistance","u_backFaceAlphaByDistance","backFaceAlphaByDistance","u_translucencyRectangle","localizedTranslucencyRectangle","u_undergroundColor","u_undergroundColorAlphaByDistance","u_lambertDiffuseMultiplier","u_vertexShadowDarkness","modifiedModelView","createWireframeVertexArrayIfNecessary","wireframeIndexBuffer","createWireframeVertexArray","getDebugOrientedBoundingBox","getDebugBoundingSphere","debugDestroyPrimitive","instanceOBB","instanceSphere","previousVolume","createDebugPrimitive","otherPassesInitialColor","surfaceShaderSetOptionsScratch","defaultUndergroundColor","defaultUndergroundColorAlphaByDistance","tileCreditIndex","tileCreditLength","maxTextures","translucencyRectangle","numberOfTextureUniforms","southLatitude","northLatitude","widthEpsilon","heightEpsilon","surfaceShaderSetOptions","imageryIndex","imageryLen","firstPassRenderState","otherPassesRenderState","drawCommandsLength","uniformMapProperties","frontFaceAlphaByDistanceFinal","backFaceAlphaByDistanceFinal","clippedTranslucencyRectangle","cartographicTileRectangle","inverseTileWidth","inverseTileHeight","applyFog","applyCutout","applyColorToAlpha","useWebMercatorT","textureWebMercator","textureTranslationAndScale","_calculateTextureTranslationAndScale","textureCoordinateRectangle","nightAlpha","dayAlpha","DEFAULT_BRIGHTNESS","DEFAULT_CONTRAST","DEFAULT_HUE","DEFAULT_SATURATION","DEFAULT_GAMMA","dayTextureCutoutRectangle","cutoutRectangle","hasColorToAlpha","colorToAlphaThreshold","creditLength","clippingPlanesEnabled","clippingPolygonsEnabled","updateDerivedCommands","GlobeTranslucency","_frontFaceAlpha","_frontFaceAlphaByDistance","_backFaceAlpha","_backFaceAlphaByDistance","frontFaceAlpha","backFaceAlpha","GlobeTranslucencyFramebuffer","_packedDepthFramebuffer","_packedDepthCommand","classificationTexture","classificationFramebuffer","packedDepthFramebuffer","packedDepthTexture","updateAndClear","globeTranslucency","updateResources","clearClassification","packDepth","derivedCommandsMaximumLength","DerivedCommandNames","GlobeTranslucencyState","_frontFaceTranslucent","_backFaceTranslucent","_requiresManualDepthTest","_sunVisibleThroughGlobe","_environmentVisible","_useDepthPlane","_numberOfTextureUniforms","_globeTranslucencyFramebuffer","_derivedCommandKey","_derivedCommandsDirty","_derivedCommandPacks","_derivedCommandTypes","_derivedBlendCommandTypes","_derivedPickCommandTypes","_derivedCommandTypesToUpdate","_derivedCommandsLength","_derivedBlendCommandsLength","_derivedPickCommandsLength","_derivedCommandsToUpdateLength","updateAlphaByDistance","alphaByDistance","isFaceTranslucent","translucencyEnabled","getDerivedCommandTypes","isPickCommand","frontTranslucent","backTranslucent","requiresManualDepthTest","translucentFrontFaceCommandType","translucentBackFaceCommandType","removeDefine","defineToRemove","hasDefine","getOpaqueFrontFaceShaderProgram","getOpaqueBackFaceShaderProgram","getTranslucentShaderProgram","getTranslucentBackFaceShaderProgram","getTranslucentFrontFaceManualDepthTestShaderProgram","getTranslucentBackFaceManualDepthTestShaderProgram","shaderProgramDirty","getShaderProgramFunction","cacheName","getOpaqueFrontFaceRenderState","getOpaqueBackFaceRenderState","getDepthOnlyFrontFaceRenderState","getDepthOnlyBackFaceRenderState","getDepthOnlyFrontAndBackFaceRenderState","getTranslucentFrontFaceRenderState","getTranslucentBackFaceRenderState","getPickFrontFaceRenderState","getPickBackFaceRenderState","getDerivedRenderState","derivedRenderState","renderStateDirty","getRenderStateFunction","cachedRenderState","getTranslucencyUniformMap","u_classificationTexture","getDerivedUniformMap","derivedUniformMap","uniformMapDirty","getDerivedUniformMapFunction","DerivedCommandPack","getUniformMapFunction","sunVisibleThroughGlobe","environmentVisible","useDepthPlane","isSunVisibleThroughGlobe","isEnvironmentVisible","getNumberOfTextureUniforms","derivedCommandKey","derivedCommandsToUpdateLength","derivedCommandsDirty","gatherDerivedCommandRequirements","derivedCommandNames","derivedCommandPacks","executeCommandsMatchingType","executeCommandFunction","executeCommands","derivedCommandTypes","derivedCommandsLength","derivedCommandsObject","uniformMapDirtyFrame","shaderProgramDirtyFrame","renderStateDirtyFrame","renderStateId","derivedCommandPack","derivedCommandType","derivedCommandName","derivedUniformMapDirtyFrame","derivedShaderProgramDirtyFrame","derivedRenderStateDirtyFrame","derivedUniformMapDirty","derivedShaderProgramDirty","derivedRenderStateDirty","opaqueTypes","depthOnlyTypes","executeGlobeCommands","frustumCommands","globeTranslucencyFramebuffer","globeCommands","globeCommandsLength","executeGlobeClassificationCommands","classificationCommands","classificationCommandsLength","originalGlobeDepthTexture","originalFramebuffer","GltfBufferViewLoader","resourceCache","meshoptByteStride","meshoptCount","meshoptMode","meshoptFilter","bufferId","hasMeshopt","meshopt","EXT_meshopt_compression","_hasMeshopt","_meshoptByteStride","_meshoptCount","_meshoptMode","_meshoptFilter","_resourceCache","_gltfResource","_baseResource","_bufferId","_byteOffset","_bufferLoader","getExternalBufferLoader","getEmbeddedBufferLoader","parentResource","getBufferLoader","bufferTypedArray","bufferViewTypedArray","decodeGltfBuffer","loadResources","GltfDracoLoader","draco","_draco","_bufferViewLoader","_bufferViewTypedArray","_decodePromise","_decodedData","_dracoError","decodedData","handleError","attributesToSkipTransform","dracoAttributeType","getDracoAttributeType","decodeOptions","dequantizeInShader","decodePromise","indexArray","attributeData","processDecode","dracoLoader","SemanticToDracoAttributeType","NORMAL","TEXCOORD","GltfImageLoader","_bufferViewId","_mipLevels","imageLoader","webpHeaderRIFFChars","webpHeaderWEBPChars","getMimeTypeFromTypedArray","ktxBuffer","_loadImageFromTypedArray","loadImageFromBufferTypedArray","imageAndMipLevels","getImageAndMipLevels","loadFromBufferView","ktx2Regex","loadImageFromUri","loadFromUri","GltfIndexBufferLoader","accessorId","loadBuffer","loadTypedArray","_accessorId","_indexDatatype","_loadBuffer","_loadTypedArray","_dracoLoader","indexBufferLoader","getDracoLoader","loadFromDraco","indexSize","createIndicesTypedArray","fromTypedArray","indexBufferJob","scratchIndexBufferJob","BUFFER","addGeometryLoader","GltfJsonLoader","_gltfJson","_bufferLoaders","processGltfJson","processGltfTypedArray","gltfJsonLoader","_fetchGltf","bufferLoaders","bufferLoadersLength","bufferUri","decodeDataUris","upgradeVersion","loadEmbeddedBuffers","Indices","FeatureIdAttribute","FeatureIdTexture","FeatureIdImplicitRange","MorphTarget","Primitive","Instances","Skin","AnimatedPropertyType","AnimationSampler","AnimationTarget","AnimationChannel","Animation","ArticulationStage","Articulation","Asset","Scene","Components","MetallicRoughness","SpecularGlossiness","Specular","Anisotropy","Clearcoat","Material","GltfLoader","loadAttributesAsTypedArray","loadAttributesFor2D","loadIndicesForWireframe","loadPrimitiveOutline","loadForClassification","renameBatchIdSemantic","_releaseGltfJson","_upAxis","_forwardAxis","_loadAttributesAsTypedArray","_loadAttributesFor2D","_loadIndicesForWireframe","_loadPrimitiveOutline","_loadForClassification","_renameBatchIdSemantic","_sortedPropertyTableIds","_sortedFeatureTextureIds","_gltfJsonLoader","_textureState","_processError","_textureErrors","_primitiveLoadPlans","_loaderPromises","_textureLoaders","_texturesPromises","_textureCallbacks","_bufferViewLoaders","_geometryLoaders","_geometryCallbacks","_structuralMetadataLoader","_meshPrimitiveGpmLoader","_loadResourcesPromise","_texturesLoaded","_supportedImageFormats","_postProcessBuffers","_components","texturesLoaded","getGltfJsonLoader","isUnloaded","loadGltfJson","geometryLoaders","geometryReady","structuralMetadataLoader","metadataReady","structuralMetadata","meshPrimitiveGpmLoader","processLoaders","loadPlans","loadPlan","needsOutlines","needsGaussianSplats","gatherPostProcessBuffers","postProcessGeometry","unloadBufferViewLoaders","_processTextures","textureLoaders","textureReady","structuralMetadataExtension","EXT_structural_metadata","featureMetadataExtensionLegacy","EXT_feature_metadata","cesiumRtcExtension","CESIUM_RTC","featureTables","featureTextures","allPropertyTableIds","allFeatureTextureIds","nodeJsons","loadedNodes","nodeJson","gltfNode","nodeExtensions","instancingExtension","EXT_mesh_gpu_instancing","articulationsExtension","AGI_articulations","loadInstancedAttribute","instancingExtExtensions","instanceFeatures","EXT_instance_features","featureMetadataLegacy","instanceFeaturesExtension","featureIdsArray","featureIds","featureIdComponent","loadFeatureIdAttribute","loadDefaultFeatureIds","loadInstanceFeatures","sortedPropertyTableIds","featureIdAttributes","featureIdAttribute","featureTableId","propertyTableId","featureCount","loadFeatureIdAttributeLegacy","loadFeatureIdImplicitRangeLegacy","loadInstanceFeaturesLegacy","loadInstances","articulationName","meshId","loadPrimitive","morphWeights","morphTargets","loadNode","childrenNodeIds","loadNodes","skins","skinJsons","loadedSkins","skinJson","skin","gltfSkin","jointIds","joints","jointId","inverseBindMatricesAccessorId","inverseBindMatrices","loadAccessor","loadSkin","skinId","loadSkins","animations","animationJsons","animationJson","samplers","samplerJson","gltfSampler","animationSampler","inputAccessor","gltfInterpolation","interpolation","outputAccessor","loadAnimationSampler","channelJson","gltfChannel","animationChannel","samplerIndex","gltfTarget","animationTarget","loadAnimationTarget","loadAnimationChannel","loadAnimation","loadAnimations","articulationJsons","loadArticulation","loadArticulations","sceneNodeIds","nodesIds","scenes","getSceneNodeIds","sceneNodeId","loadScene","extensionLegacy","supportedImageFormats","loadStructuralMetadata","gpmExtension","NGA_gpm_local","gltfGpmLocal","primitiveExtensions","meshPrimitiveGpmExtension","loadMeshPrimitiveGpm","readyPromises","textureError","texturesReady","unloadTextures","unloadGeometry","unloadGeneratedAttributes","unloadMeshPrimitiveGpm","gltfLoader","primitiveLoadPlan","outlineCoordinates","getPackedTypedArray","componentByteLength","accessorTypedArray","componentReader","useQuaternion","accessorType","accessorCount","MathType","getMathType","loadAccessorValues","loadAccessorBufferView","loadDefaultAccessorValues","minimumBoundsByType","createAttribute","getDefault","decodeMatrix","decodedMin","decodedMax","Quantization","quantizedVolumeOffset","quantizedVolumeStepSize","setQuantizationFromWeb3dQuantizedAttributes","WEB3D_quantized_attributes","isQuantizable","TANGENT","FEATURE_ID","hasKhrMeshQuantization","VectorType","getQuantizationDivisor","minimumBound","dequantizeMinMax","getSetIndex","gltfSemantic","setIndexMatch","scratchSemanticInfo","renamedSemantic","modelSemantic","getSemanticInfo","semanticType","fromGltfSemantic","semanticInfo","isClassificationAttribute","attributeSemantic","isPositionAttribute","isFeatureIdAttribute","isTexcoordAttribute","loadAttribute","spz","vertexBufferLoader","spzExtension","getVertexBufferLoader","finalizeDracoAttribute","findMinMaxXY","flatArray","finalizeSpzAttribute","finalizeAttribute","loadVertexAttribute","hasInstances","needsPostProcessing","loadTypedArrayFor2D","loadTypedArrayForPicking","loadTypedArrayForClassification","outputTypedArrayOnly","outputBuffer","outputTypedArray","attributePlan","AttributeLoadPlan","hasRotation","hasTranslationMinMax","TRANSLATION","isTransformAttribute","isTranslationAttribute","loadAsTypedArrayOnly","loadFor2D","loadTexture","samplerOverride","getImageIdFromTexture","textureLoader","getTextureLoader","textureReader","createModelTextureReader","positionalLabel","nullFeatureId","propertyTable","gltfFeatureIdAttribute","featureIdRange","loadFeatureIdTexture","gltfFeatureIdTexture","featureIdTexture","channelString","channelIndex","loadFeatureIdTextureLegacy","loadMorphTarget","morphTarget","attributePlans","primitivePlan","materialId","gltfMaterial","pbrSpecularGlossiness","KHR_materials_pbrSpecularGlossiness","pbrSpecular","KHR_materials_specular","pbrAnisotropy","KHR_materials_anisotropy","pbrClearcoat","KHR_materials_clearcoat","pbrMetallicRoughness","unlit","KHR_materials_unlit","specularGlossiness","specularGlossinessInfo","diffuseTexture","specularGlossinessTexture","diffuseFactor","specularFactor","glossinessFactor","loadSpecularGlossiness","metallicRoughness","metallicRoughnessInfo","baseColorTexture","metallicRoughnessTexture","baseColorFactor","metallicFactor","roughnessFactor","loadMetallicRoughness","specular","specularInfo","specularTexture","specularColorFactor","specularColorTexture","loadSpecular","anisotropy","anisotropyInfo","anisotropyStrength","DEFAULT_ANISOTROPY_STRENGTH","anisotropyRotation","DEFAULT_ANISOTROPY_ROTATION","anisotropyTexture","loadAnisotropy","clearcoat","clearcoatInfo","clearcoatFactor","DEFAULT_CLEARCOAT_FACTOR","clearcoatTexture","clearcoatRoughnessFactor","DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR","clearcoatRoughnessTexture","clearcoatNormalTexture","loadClearcoat","emissiveTexture","normalTexture","occlusionTexture","emissiveFactor","alphaMode","alphaCutoff","doubleSided","pointStyleExtension","BENTLEY_materials_point_style","pointDiameter","loadMaterial","materials","outlineExtension","CESIUM_primitive_outline","outlineIndices","edgeVisibilityExtension","EXT_mesh_primitive_edge_visibility","visibilityAccessor","visibilityValues","edgeVisibility","silhouetteNormals","silhouetteNormalsAccessor","silhouetteNormalsValues","gaussianSplatting","KHR_gaussian_splatting","gsExtensions","KHR_gaussian_splatting_compression_spz_2","fetchSpzExtensionFrom","KHR_draco_mesh_compression","hasFeatureIds","indicesPlan","hasEdgeVisibility","loadForCpuOperations","getIndexBufferLoader","IndicesLoadPlan","loadIndices","meshFeatures","EXT_mesh_features","hasFeatureMetadataLegacy","meshFeaturesExtension","loadPrimitiveFeatures","nextFeatureIdIndex","featureIdTextures","loadPrimitiveFeaturesLegacy","propertyTextureIds","propertyAttributeIds","loadPrimitiveMetadata","loadPrimitiveMetadataLegacy","loadArticulationStage","gltfStage","stage","initialValue","articulationJson","articulation","stages","bufferViewLoaders","GltfLoaderUtil","EXT_texture_webp","KHR_texture_basisu","compressedTextureNoMipmap","minFilter","magFilter","samplerId","texCoord","textureTransform","KHR_texture_transform","modelTextureReader","TextureReader","ForEach","objectLegacy","arrayOfObjects","topLevel","gltfProperty","accessorWithSemantic","meshPrimitive","valueForEach","meshPrimitiveAttribute","meshPrimitiveTarget","meshPrimitiveTargetAttribute","accessorContainingVertexAttributeData","accessorContainingIndexData","materialValue","KHR_techniques_webgl","primitivesLength","nodeInTree","nodeIds","nodeInScene","programs","skinJoint","jointsLength","techniqueAttribute","technique","techniqueUniform","techniqueParameter","parameterName","techniques","addTextureDefaults","materialsCommon","KHR_materials_common","ambient","emission","transparency","diffuse","shininess","techniquesExtension","animatedNodes","getAnimatedNodes","addExtras","checkDuplicates","componentTypeByteLength","defaultBlendEquation","defaultBlendFactors","isStateEnabled","renderStates","supportedBlendFactors","getSupportedBlendFactors","blendingForTechnique","materialPropertiesForTechnique","techniquesLegacy","techniqueLegacy","techniqueIndex","materialProperties","blendFunctions","blendFactors","KHR_blend","mappedUniforms","updatedTechniqueIndices","seenPrograms","glExtensions","glExtensionsUsed","techniqueId","parameterLegacy","programLegacy","materialExtension","contentLength","binaryStart","contentString","binaryBuffer","binaryGltfBuffer","binary_glTF","KHR_binary_glTF","parseGlbVersion1","chunkHeader","chunkLength","chunkType","chunkBuffer","jsonString","parseGlbVersion2","removeExtensionAndTraverse","extensionData","removeCesiumRTC","removeExtras","allElementTypes","TypeToGltfElementName","Remove","getListOfElementsIdsInUse","nodeIsEmpty","usedNodeIds","attributeAccessorId","arrayOffsetBufferView","stringOffsetBufferView","propertyTables","propertyTablesLength","arrayOffsets","stringOffsets","skeleton","featureIdTexturesLength","featureTextureId","featureIdsLength","propertyTexturesLength","usedAccessorIds","indicesAccessorId","usedBufferIds","usedBufferViewIds","usedImageIds","usedMeshIds","joint","usedMaterialIds","usedTextureIds","usedSamplerIds","elementTypes","usedIds","removeUnusedElementsByType","convertType","updatedComponentType","profile","updateInstanceTechniques","defaultMode","setPrimitiveModes","instanceSkin","skeletons","updateNodes","updatedAccessors","animationId","channelsLength","updateAnimations","passName","instanceProgram","removeTechniquePasses","allExtensions","lights","removeAnimationSamplersIndirection","isNodeEmpty","deleteNode","removeEmptyNodes","globalMapping","cameras","jointName","jointNameToId","topLevelId","objectMapping","objectToArray","binaryGltf","meshesLength","meshNode","meshNodeId","jointNames","jointNamesLength","sceneNodes","sceneNodesLength","samplerMapping","objectsToArrays","removeAnimationSamplerNames","premultipliedAlpha","stripAsset","extensionsUsedLength","knownExtensions","requireKnownExtensions","accessorByteStride","computeAccessorByteStride","accessorByteEnd","requireByteLength","bufferViewHasVertexAttributes","bufferViewMap","currentByteOffset","accessorsLength","accessorByteOffset","accessorByteLength","hasNextAccessor","newBufferView","newBufferViewId","moveByteStrideToBufferView","minMax","requirePositionAccessorMinMax","requireAnimationAccessorMinMax","validatePresentAccessorMinMax","removeBufferType","removeTextureProperties","TEXCOORD_0","COLOR_0","requireAttributeSetIndex","mappedSemantics","newSemantic","strippedSemantic","indexedSemantic","indexedSemantics","knownSemantics","mappedSemantic","underscoreApplicationSpecificSemantics","yfov","clampCameraParameters","removeEmptyArrays","instanceTechnique","mapping","JOINT","JOINTS","WEIGHT","WEIGHTS","parentNodeId","defaultBaseColorTextureNames","defaultBaseColorFactorNames","initializePbrMaterial","isTexture","isVec4","srgbToLinear","srgb","assignAsBaseColor","assignAsEmissive","emissive","targetVersion","keepLegacyExtensions","baseColorTextureNames","baseColorFactorNames","convertTechniquesToPbr","convertMaterialsCommonToPbr","WorkerGlobalScope","createRequire","dirname","fileURLToPath","readFileSync","HEAPU8","HEAPF32","onAbort","preRun","unregister","USER","LOGNAME","PATH","PWD","LANG","isAliasOf","isDeleted","deleteLater","print","printErr","thisProgram","asUintN","getStringOrSymbol","toReturnWire","emval_returnValue","grow","_malloc","_free","monitorRunDependencies","instantiateWasm","preInit","calledRun","onRuntimeInitialized","postRun","setStatus","vf32_ptr","GltfSpzLoader","ResourceLoader","_spz","ResourceLoaderState","_spzError","CoordinateSystem","unpackOptions","coordinateSystem","load_spz","colorScaleFactor","shDegree","antialiased","alphas","gcloud","spzLoader","GltfStructuralMetadataLoader","_extension","_extensionLegacy","_bufferViewIds","_textureIds","_schemaLoader","_structuralMetadata","bufferViewsPromise","bufferViewIds","bufferViewIdSet","gatherBufferViewIdsFromProperties","gatherUsedBufferViewIds","gatherBufferViewIdsFromPropertiesLegacy","gatherUsedBufferViewIdsLegacy","bufferViewPromises","loadBufferViews","texturesPromise","gatherTextureIdsFromProperties","gatherUsedTextureIds","gatherTextureIdsFromPropertiesLegacy","gatherUsedTextureIdsLegacy","texturePromises","loadTextures","schemaPromise","loadSchema","textureLoadersLength","unloadBufferViews","bufferViewLoadersLength","GltfTextureLoader","_textureInfo","_imageLoader","getImageLoader","textureJob","scratchTextureJob","addTextureLoader","createSampler","samplerRequiresMipmap","requiresPowerOfTwo","nonPowerOfTwo","requiresResize","GltfVertexBufferLoader","hasBufferViewId","hasPrimitive","hasDraco","hasDracoCompression","hasAttributeSemantic","hasAccessorId","_attributeSemantic","_quantization","getSpzLoader","_spzLoader","loadFromSpz","dracoAttribute","dracoQuantization","normalizationRange","quantizationBits","normalizationDivisor","octEncoded","octEncodedZXY","quantizedVolumeDimensions","packedDimensions","packedSteps","getQuantizationInformation","processDraco","gcloudData","processSpz","vertexBufferJob","scratchVertexBufferJob","Google2DImageryProvider","session","_session","buildQueryOptions","mapType","overlayLayerType","queryOptions","layerTypes","defaultApiKey","sessionJson","createGoogleImagerySession","GoogleEarthEnterpriseDiscardPolicy","GoogleEarthEnterpriseImageryProvider","invalidImage","metadataRequest","getImageType","copyrightIds","alphaType","imageAlpha","end2","decodeEarthImageryPacket","GoogleEarthEnterpriseMapsProvider","_channel","_requestType","requestType","is2d","GoogleStreetViewCubeMapPanoramaProvider","_metadataResource","_tileSize","tileSize","loadPanorama","tileSizeString","panoId","getNearestPanoId","posObj","_loadFaceImage","northDownEastToFixedFrameTransform","posString","panoIdObject","pano_id","getPanoIdMetadata","pano","_buildFaceUrl","_parseMetadata","panoIdMetadata","defaultGlowColor","GridImageryProvider","_glowColor","glowColor","_glowWidth","glowWidth","_canvasSize","canvasSize","_createGridCanvas","_drawGrid","maxPixel","cssBackgroundColor","cssGlowColor","strokeRect","GroundPolylinePrimitive","_hasPerInstanceColors","_sp2D","_spMorph","_renderState3DTiles","_renderStateMorph","updateAndQueueCommand","colorMorph","color2D","geometryInstancesLength","groundInstances","instanceAttributes","attributeKey","vsMorph","vsDefines","colorDefine","materialShaderSource","fsDefines","vsColor3D","fsColor3D","vsColor2D","colorProgramMorph","vsColorMorph","fsColorMorph","materialUniforms","derivedTilesetCommand","derived2DTilesetCommand","derivedMorphCommand","morphing","GroundPrimitiveUniformMap","u_globeMinimumAltitude","GroundPrimitive","geometryInstancesArray","geometryInstanceCount","_boundingVolumes","_boundingVolumes2D","_maxTerrainHeight","_minTerrainHeight","_boundingSpheresKeys","_boundingSpheres","_useFragmentCulling","_classificationPrimitiveOptions","getComputeMaximumHeightFunction","getComputeMinimumHeightFunction","scratchBVCartesianHigh","scratchBVCartesianLow","scratchBVCartesian","scratchBVRectangle","getRectangle","position3DHigh","highPositions","lowPositions","position3DLow","highPosition","lowPosition","groundPrimitive","instanceType","instanceRectangle","setMinMaxTerrainHeights","useFragmentCulling","_supportsMaterials","usePlanarExtents","getPlanarTextureCoordinateAttributes","getSphericalExtentGeometryInstanceAttributes","GroupMetadata","CLAMP_TO_TERRAIN","RELATIVE_TO_TERRAIN","CLAMP_TO_3D_TILE","RELATIVE_TO_3D_TILE","isHeightReferenceClamp","isHeightReferenceRelative","I3SDataProvider","_geoidTiledTerrainProvider","geoidTiledTerrainProvider","_showFeatures","showFeatures","_adjustMaterialAlphaMode","adjustMaterialAlphaMode","_applySymbology","applySymbology","_calculateNormals","calculateNormals","_cesium3dTilesetOptions","cesium3dTilesetOptions","_sublayers","_extent","_geoidDataPromise","_geoidDataList","_taskProcessorReadyPromise","_attributeStatistics","_layersExtent","addLayers","layerType","buildingLayerUrl","dataProviderUrl","layerUrl","buildLayerUrl","sublayers","_fromData","sublayer","_i3sLayers","statisticsHRef","textureSetDefinitions","newLayer","_updateVisibility","_computeExtent","layerPromises","_fetchJson","_loadBinary","_binarizeGltf","rawGltf","rawGltfData","binaryGltfData","chunkData","loadGeoidData","geoidTerrainProvider","heightMaps","topLeftCorner","bottomRightCorner","minCornerXY","maxCornerXY","heightMapBuffers","heightMap","heightMapData","nativeExtent","getCoveredTiles","layerExtent","getAttributeNames","getAttributeValues","_getValues","filterByAttributes","filters","I3SDecoder","_decodeTaskProcessor","defaultGeometrySchema","geometryData","featureData","symbologyData","initializeDecoder","parentRotationInverseMatrix","_inverseRotationMatrix","mbs","axisFlipRotation","parentRotation","cartographicCenter","cartesianCenter","payload","binaryData","bufferInfo","_geometryBufferInfo","ellipsoidRadiiSquare","geoidDataList","_dataProvider","enableFeatures","splitGeometryByColorTransparency","I3SFeature","_layer","_nodeIndex","I3SField","storageInfo","_storageInfo","_loadPromise","getNumericTypeSize","getValueTypeSize","attributeValues","objectIds","_validateHeader","headerSize","_parseHeader","_getBodyOffset","_validateBody","_parseBody","_parseValue","itemIndex","parsedValue","orderingValue","stringLen","attributeByteCounts","stringContent","cIndex","curParsedValue","valueSize","attributeByteCountsOffset","I3SGeometry","dataProvider","_customAttributes","customAttributes","scratchAb","scratchAp1","scratchAp2","scratchCp1","scratchCp2","sameSide","cp1","cp2","scratchV0","scratchV1","scratchV2","scratchV0V1","scratchV0V2","scratchCrossProd","scratchV0p","scratchV1p","scratchV2p","convertColorFactor","convertedFactor","getClosestPointIndexOnTriangle","bestTri","bestDistSq","bestIndex","bestPt","bestTriDist","triCount","v0v1","v0v2","crossProd","v0p","normalDist","queriedPosition","closestPosition","_generateGltf","nodesInScene","materialDefinition","isTextured","texturePath","materialDefinitions","materialIndex","definition","textureName","defIndex","textureSetDefinition","formatIndex","textureFormat","textureData","gltfTextures","gltfImages","gltfSamplers","gltfMaterials","meshIndex","primitiveIndex","primitiveMaterial","isTransparent","I3SLayer","layerData","splitVersion","_majorVersion","_minorVersion","_nodePages","_nodePageFetches","_geometryDefinitions","_filters","_symbology","_computeGeometryDefinitions","minorVersion","legacyVersion16","_loadRootNode","_create3DTileset","_i3sNode","_loadChildren","useCompression","geometryDefinitions","geometryBuffersInfo","geometryBuffers","bufIndex","geometryBuffer","collectedAttributes","_findBestGeometryBuffers","geometryDefinition","geometryBufferInfo","missed","geometryAttributes","nodePages","rootIndex","_getNodeInNodePages","nodesPerPage","offsetInPage","_loadNodePage","nodePageResource","fetchPromise","inPlaceTileset","_create3DTileDefinition","tilesetBlob","defaultSymbology","_isI3STileSet","_clearGeometryData","_filterFeatures","I3SNode","isRoot","_isRoot","_geometryData","_featureData","_fields","_childrenReadyPromise","_inverseGlobalTransform","_symbologyData","createAndLoadField","newField","checkFeatureValue","fieldValues","featureValue","filterFeatures","contentModel","loadField","loadFilters","filterIndex","sampleMap","sampleGeoid","sampleX","sampleY","geoidData","xNext","yNext","finalHeight","h00","h10","h01","h11","processData","tileDefinition","loadFields","attributeStorageInfo","getFieldsForPickedPosition","pickedPosition","getFieldsForFeature","featureFields","fieldName","childPromises","newChild","_loadGeometryData","geometryPromises","geomIndex","curGeometryData","geometryURI","newGeometryData","_loadFeatureData","featurePromises","newFeatureData","geoPosition","projectedPos","halfSize","metersPerPixel","lodThreshold","lodSelectionMetricType","lodSelection","lodIndex","metricType","maxError","inverseRotationMatrix","inverseGlobalTransform","childrenDefinition","_loadSymbology","_getSymbology","_createContentURL","dataPromises","geometrySchema","rootExtensions","glbDataBlob","_hookedRequestContent","readyEvent","i3sNode","I3SStatistics","mostFrequentValues","I3SSublayer","sublayerData","_modelName","modelName","_visibility","childSublayers","childSublayer","sublayerUrl","I3SSymbology","_defaultSymbology","_valueFields","_uniqueValueHash","_classBreaksHash","_parseLayerSymbology","convertColor","convertedColor","floatColor","parseSymbol","isColorCaptured","symbology","symbolLayers","symbolLayer","colorMixMode","findHashForUniqueValues","hashLevel","valueIndex","levelValues","innerHash","drawingInfo","cachedDrawingInfo","defaultSymbol","field1","field2","field3","uniqueValueGroups","valueHash","groupIndex","classIndex","classSymbology","fieldIndex","fieldValue","uniqueValueInfos","infoIndex","buildUniqueValueHash","classBreakInfos","classMaxValue","classMinValue","symbols","buildClassBreaksHash","fieldsValues","featureHashFn","findHashForClassBreaks","firstFieldValues","featureSymbology","I3dmParser","gltfFormat","ITwinData","tilesetOptions","exportObj","completeExport","tilesetAccessUrl","internalTilesetOptions","pageLimit","ImageBasedLighting","_specularEnvironmentCubeMap","_specularEnvironmentCubeMapDirty","_specularEnvironmentMapLoaded","_previousSpecularEnvironmentMapLoaded","_useDefaultSpecularMaps","_useDefaultSphericalHarmonics","_previousFrameNumber","_previousFrameContext","_previousImageBasedLightingFactor","_previousSphericalHarmonicCoefficients","_removeErrorListener","specularEnvironmentCubeMap","useDefaultSphericalHarmonics","useDefaultSpecularMaps","useSpecularEnvironmentMaps","iblFactor","previousIBLFactor","createSpecularEnvironmentCubeMap","recompileWithDefaultCubeMap","recompileWithoutDefaultCubeMap","recompileWithDefaultSHCoeffs","recompileWithoutDefaultSHCoeffs","Imagery","parentX","parentY","getImageryFromCache","addReference","releaseReference","removeImageryFromCache","needGeographicProjection","_requestImagery","_createTexture","needsReprojection","TEXTURE_LOADED","_reprojectTexture","ImageryLayer","_readyEvent","DEFAULT_SPLIT","DEFAULT_MINIFICATION_FILTER","DEFAULT_MAGNIFICATION_FILTER","_minimumTerrainLevel","minimumTerrainLevel","_maximumTerrainLevel","maximumTerrainLevel","_skeletonPlaceholder","_isBaseLayer","_requestImageError","_reprojectComputeCommands","DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD","fromProviderAsync","imageryProviderPromise","handlePromise","fromWorldImagery","isBaseLayer","imageryBoundsScratch","tileImageryBoundsScratch","clippedRectangleScratch","terrainRectangleScratch","getSamplerKey","getImageryCacheKey","getImageryRectangle","imageryBounds","baseImageryRectangle","baseTerrainRectangle","latitudeClosestToEquator","imageryLevel","texelSpacing","latitudeFactor","tilingSchemeRectangle","twoToTheLevelPower","getLevelWithMaximumTexelSpacing","imageryTilingScheme","northwestTileCoordinates","southeastTileCoordinates","veryCloseX","veryCloseY","northwestTileRectangle","southeastTileRectangle","terrainRectangle","imageryTileXYToRectangle","imageryRectangle","clippedImageryRectangle","initialMinV","texCoordsRectangle","terrainWidth","terrainHeight","_createTextureWebGL","discardPolicy","_finalizeReprojectTexture","maximumSupportedAnisotropy","mipmapSamplerKey","mipmapSamplers","imageryLayerMipmapSamplers","mipmapSampler","nonMipmapSamplerKey","nonMipmapSamplers","imageryLayerNonMipmapSamplers","nonMipmapSampler","reproject","imageryLayer_reproject","reprojectAttributeIndices","float32ArrayScratch","outputIndex","webMercatorTIndex","mercatorFraction","reprojectToGeographic","computeCommands","u_textureDimensions","u_texture","ImageryLayerCollection","getLayerIndex","swapLayers","removeReadyEventListener","addImageryProvider","applicableRectangleScratch","pickImageryHelper","pickedLocation","pickedTile","imageryTiles","terrainImagery","applicableRectangle","pickImageryLayers","pickImageryLayerFeatures","layersShownOrHidden","ImageryLayerFeatureInfo","ImageryProvider","Implicit3DTileContent","_implicitCoordinates","_implicitSubtree","getGeometricError","TILE_GEOMETRIC_ERROR","deriveChildTile","implicitContent","childBitIndex","parentIsPlaceholderTile","tileBounds","getChildCoordinates","tilePropertyTableJson","parseAllBoundingVolumeSemantics","contentPropertyTableJsons","contentIsAvailableAtCoordinates","canUpdateHeights","deriveBoundingVolume","updateHeights","getTileBoundingVolume","contentJsons","contentCount","contentIsAvailableAtIndex","contentJson","contentBounds","contentHeaders","rootHeader","combinedTileJson","s2CellVolume","updateRegionHeights","rootBoundingVolume","deriveBoundingVolumeS2","deriveBoundingRegion","deriveBoundingBox","boundingVolumeS2","s2Cell","midpointHeight","placeholderTile","parentRow","currentRow","getLevelOffset","numberOfChildren","branchingFactor","childMortonIndex","tileIsAvailableAtIndex","getParentMortonIndex","bottomRow","transcodeSubtreeTiles","childSubtrees","leafTile","childSubtreeIsAvailableAtIndex","listChildSubtrees","subtreeLocator","implicitChildTile","makePlaceholderChildSubtree","expandSubtree","scratchScaleFactors","scratchRootCenter","rootBox","rootCenter","rootHalfAxes","tileScale","modelSpaceX","modelSpaceY","modelSpaceZ","scaleFactors","childBox","rootRegion","rootMinimumHeight","rootMaximumHeight","childWidth","childHeight","childThickness","childGeometricError","childContentUri","_deriveBoundingBox","_deriveBoundingRegion","_deriveBoundingVolumeS2","ImplicitAvailabilityBitstream","lengthBits","availableCount","bitstream","computeAvailableCountEnabled","bitIndex","count1Bits","_lengthBits","_availableCount","_constant","_bitstream","getBit","ImplicitMetadataView","metadataTable","propertyTableJson","_metadataTable","_entityId","ImplicitSubdivisionScheme","QUADTREE","OCTREE","ImplicitSubtree","_subtreeJson","_tileAvailability","_contentAvailabilityBitstreams","_childSubtreeAvailability","_subtreeLevels","_subdivisionScheme","_branchingFactor","_tileMetadataTable","_tilePropertyTableJson","_contentMetadataTables","_contentPropertyTableJsons","_tileJumpBuffer","_contentJumpBuffers","markActiveMetadataBufferViews","bufferViewHeaders","metadataHeader","bufferHeader","requestExternalBuffer","bufferResource","parseAvailabilityBitstream","availabilityJson","bufferViewsU8","makeJumpBuffer","bufferLength","jumpBuffer","tileMetadataTable","contentMetadataTables","getTileIndex","contentIndex","getChildSubtreeIndex","bitsPerLevel","subtreeView","subtreeReader","jsonByteLength","binaryByteLength","parseSubtreeChunks","propertyTableIndex","subtreeMetadataClass","contentAvailabilityHeaders","contentAvailability","bufferHeaders","preprocessBuffers","bufferViewHeader","preprocessBufferViews","tileAvailabilityHeader","tileAvailability","childSubtreeAvailabilityHeader","childSubtreeAvailability","markActiveBufferViews","buffersU8","internalBuffer","bufferResults","requestActiveBuffers","parseActiveBufferViews","tileAvailabilityBits","childSubtreeBits","hasMetadataExtension","hasTileMetadata","hasContentMetadata","parseAvailability","tileCount","tileMetadataClassName","tileMetadataClass","parseTileMetadataTable","tileJumpBuffer","makeTileJumpBuffer","contentAvailabilityBitstreams","contentPropertyTableJson","contentMetadataClassName","contentMetadataClass","parseContentMetadataTables","contentJumpBuffers","contentJumpBuffer","makeContentJumpBuffers","getOffsetCoordinates","getTileEntityId","metadataTables","getContentEntityId","ImplicitSubtreeMetadata","ImplicitTileCoordinates","dimensionAtLevel","checkMatchingSubtreeShape","offsetCoordinates","descendantZ","getAncestorCoordinates","offsetLevels","ancestorLevel","ancestorX","ancestorY","ancestorZ","descendantCoordinates","offsetLevel","dimensionAtOffsetLevel","offsetZ","getBranchingFactor","levelDifference","isAncestorX","isAncestorY","isAncestorZ","otherCoordinates","scratchCoordinatesArray","fromMortonIndex","coordinatesArray","fromTileIndex","subtrees","gatherContentHeaders","makeTileHeaderTemplate","InstanceAttributeSemantic","InvertClassification","previousFramebuffer","_previousFramebuffer","_fbo","_fboClassified","_rsUnclassified","_rsClassified","_unclassifiedCommand","_classifiedCommand","_translucentCommand","_clearColorCommand","classifiedTexture","unclassifiedCommand","isTranslucencySupported","rsUnclassified","rsClassified","rsDefault","globeFramebuffer","previousFramebufferChanged","textureChanged","_rsDefault","unclassifiedFSSource","classifiedFSSource","executeClassified","executeUnclassified","IonImageryProvider","_endpointCache","tileProviderError","GOOGLE_2D_MAPS","ionResource","IonImageryProviderFactory","ARCGIS_MAPSERVER","GOOGLE_EARTH","MAPBOX","SINGLE_TILE","TMS","URL_TEMPLATE","WMS","WMTS","AZURE_MAPS","defaultFactoryCallback","JobTypeBudget","_total","usedThisFrame","stolenFromMeThisFrame","starvedThisFrame","starvedLastFrame","JobScheduler","budgets","NUMBER_OF_JOB_TYPES","jobBudgets","PROGRAM","totalBudget","executedThisFrame","_totalBudget","_totalUsedThisFrame","_budgets","_executedThisFrame","disableThisFrame","resetBudgets","budget","job","jobType","progressThisFrame","stolenBudget","emptyClass","JsonMetadataTable","LoadState","UNAVAILABLE","KeyframeNode","spatialNode","megatextureIndex","highPriorityFrameNumber","priorityComparator","searchComparator","fontInfoCache","fontInfoCacheLength","textTypes","LTR","RTL","WEAK","BRACKETS","rebindAllGlyphs","_rebindAllGlyphs","_repositionAllGlyphs","_labelsToUpdate","repositionAllGlyphs","getCSSValue","parseFont","fontInfo","_fontFamily","_fontSize","_fontStyle","_fontWeight","_lineHeight","_renderedText","_glyphs","_backgroundBillboard","_relativeSize","convertTextToTypes","rtlChars","ltrChars","bracketsChars","parsedText","textLength","textIndex","Word","reverseWord","spliceWord","reverseBrackets","bracket","glyphs","backgroundBillboard","renderedValue","filterUnsupportedCharacters","enableRightToLeftDetection","rtlDir","splicePointer","wordIndex","subText","reverseRtl","glyph","totalScale","glyphX","glyphY","glyphWidth","glyphHeight","PADDING","problematicCharactersRegex","Glyph","whitePixelCanvasId","whitePixelSize","whitePixelBoundingRegion","writeTextToCanvasParameters","createGlyphCanvas","OUTLINE","unbindGlyphBillboard","_spareBillboards","splitter","whitespaceRegex","graphemes","glyphsLength","FONT_SIZE","glyphIndex","backgroundBillboardCollection","_backgroundBillboardCollection","_backgroundBillboardTexture","getWhitePixelBillboard","updateBackgroundBillboard","glyphBillboardCollection","_glyphBillboardCollection","glyphTextureCache","textDimensionsCache","_textDimensionsCache","glyphBillboardTexture","sdfValues","canvasWidth","canvasHeight","baseIndex","spareBillboards","calculateWidthOffset","glyphPixelOffset","scratchBackgroundPadding","lastLineWidth","maxLineWidth","lineWidths","maxGlyphDescent","maxGlyphY","glyphLength","maxLineHeight","lineIndex","widthOffset","lineSpacing","otherLinesHeight","totalLineWidth","totalLineHeight","firstCharOfLine","lineOffsetY","nextGlyph","destroyLabel","_labels","_totalGlyphCount","preUpdateGlyphCount","glyphCountDifference","Light","MapboxImageryProvider","mapId","_mapId","MapboxStyleImageryProvider","_styleId","tilesize","_tilesize","_username","scaleFactor","_strict","_texturePaths","_loadedImages","_loadedCubeMaps","_updateFunctions","_initializationPromises","_initializationError","_translucentFunctions","cachedMaterial","_materialCache","getMaterial","checkForValidProperties","templateProperties","invalidNameError","componentProperties","materialNames","duplicateNameError","checkForTemplateErrors","isMultiMaterial","componentSource","isMaterialFused","createMethodDefinition","uniformId","createUniform","createUniforms","subMaterialTemplates","subMaterialId","subMaterial","originalMethodName","newMethodName","replaceToken","createSubMaterials","addMaterial","defaultTranslucent","wrappedTranslucent","initializeMaterial","_uniformList","getInitializationPromises","initializationPromises","submaterials","throwNotFound","errorString","fromTypeAsync","loadedImages","loadedImage","uniformDimensionsName","uniformDimensions","loadedCubeMaps","loadedCubeMap","subMaterials","shaderComponent","mat2","mat3","mat4","loadTexture2DImageForUniform","uniformValue","DefaultImageId","oldResource","loadCubeMapImagesForUniform","DefaultCubeMapId","allPromise","uniformType","HTMLImageElement","OffscreenCanvas","numAttributes","getUniformType","replacedTokenCount","imageDimensionsUniformName","getNumberOfTokens","uniformDeclaration","newUniformId","oldUniformValue","uniformChanged","uniformValueIsDefaultImage","createTexture2DUpdateFunction","createCubeMapUpdateFunction","newToken","excludePeriod","regExp","_materials","materialTemplate","ImageType","DiffuseMapType","AlphaMapType","SpecularMapType","EmissionMapType","BumpMapType","strength","NormalMapType","GridType","StripeType","CheckerboardType","DotType","WaterType","baseWaterColor","specularMap","normalMap","amplitude","specularIntensity","fadeFactor","RimLightingType","rimColor","FadeType","fadeInColor","fadeOutColor","maximumDistance","fadeDirection","PolylineArrowType","PolylineDashType","PolylineGlowType","PolylineOutlineType","ElevationContourType","spacing","ElevationRampType","SlopeRampMaterialType","AspectRampMaterialType","ElevationBandType","WaterMaskType","waterColor","landColor","MaterialAppearance","materialSupport","_materialSupport","BASIC","Megatexture","channelCount","availableTextureMemoryBytes","pixelDataType","FLOAT32","FLOAT64","UINT8","getPixelDataType","getPixelFormat","bytesPerSample","textureDimension","get3DTextureDimension","tileCounts","textureMemoryByteLength","voxelCountPerTile","MegatextureNode","previousNode","occupiedList","emptyList","occupiedCount","_nearestSampling","getVolume","dimensionsArray","nearestSampling","writeDataToTexture","tileDimensions","tileSizeInBytes","maxTileCount","sortedDimensions","tilesPerDimension","currentTileCount","sliceDimensions","tilesPerSlice","excessTiles","slicesToRemove","tileData","tilesPerZ","copyOptions","MetadataClass","_propertiesBySemantic","classDefinition","BATCH_TABLE_CLASS_NAME","MetadataClassProperty","enumType","isIntegerType","_semantic","_isLegacyExtension","isLegacyExtension","_componentType","_enumType","_isArray","_isVariableLengthArray","isVariableLengthArray","_arrayLength","_normalized","enableNestedArrays","expandConstant","_hasValueTransform","_noData","noData","_required","validateSingleValue","isVectorType","isVectorCompatible","validateVector","isMatrixType","validateMatrix","STRING","getTypeErrorMessage","validateString","BOOLEAN","validateBoolean","ENUM","javascriptType","valuesByName","validateEnum","INT8","INT16","UINT16","INT32","UINT32","checkInRange","getNonFiniteErrorMessage","INT64","UINT64","validateScalar","getOutOfRangeErrorMessage","isUnsignedIntegerType","normalizeInPlace","normalizeFunction","isLegacy","parsedType","isLegacyArray","parseType","applyValueTransform","valueTransformInPlace","isNested","innerConstant","handleNoData","unpackVectorAndMatrixTypes","packVectorAndMatrixTypes","validateArray","transformationFunction","bytesPerElement","isGpuCompatible","floatTypesByComponentCount","integerTypesByComponentCount","unsignedIntegerTypesByComponentCount","uintBitsToScalarType","INTEGER","UNSIGNED_INTEGER","getGlslTypeWebGL1","unpackTextureInShader","sampledTextureExpression","channelsString","metadataVariableName","numChannels","channelsPerComponent","rawChannelsName","rawBitsName","unpackedValueName","declareUnpackedValueLine","declareRawBitsLine","assignRawValuesLine","hasMultipleComponents","channelSlice","assignRawBitsLine","indexExpression","toFloatIfNormalize","assignUnpackedValueLine","unpackTextureInShaderWebGL1","MetadataComponentType","ScalarCategories","typeInfo","vectorCompatible","fromComponentDatatype","toComponentDatatype","getDataViewSetter","setInt8","setUint16","setInt16","setInt32","setBigUint64","setBigInt64","MetadataEntity","classProperties","classPropertyId","MetadataEnum","namesByValue","_namesByValue","_valuesByName","enumDefinition","enum","MetadataEnumValue","MetadataPicking","getBigInt64","getBigUint64","dataViewOffset","decodeRawMetadataValue","elementIndex","componentSizeInBytes","elementSizeInBytes","decodeRawMetadataValueComponent","rawPixelValues","decodeRawMetadataValueElement","numbers","arrayBasedResult","decodeRawMetadataValues","convertFromObjectType","arrayBasedValue","objectBasedValue","convertToObjectType","MetadataSchema","_enums","enumId","MetadataSchemaLoader","loadExternalSchema","DESCRIPTION","TILE_BOUNDING_BOX","TILE_BOUNDING_REGION","CONTENT_BOUNDING_BOX","CONTENT_BOUNDING_REGION","CONTENT_BOUNDING_SPHERE","CONTENT_MINIMUM_HEIGHT","CONTENT_MAXIMUM_HEIGHT","CONTENT_HORIZON_OCCLUSION_POINT","MetadataTable","getPropertyTypedArray","getTypedArray","getPropertyTypedArrayBySemantic","MetadataTableProperty","hasStrings","hasBooleans","arrayOffsetType","BufferView","vectorComponentCount","arrayComponentCount","valueCount","stringOffsetType","getValueFunction","setValueFunction","stringByteOffset","stringByteLength","_stringOffsets","getBoolean","setBoolean","_arrayOffsets","_classProperty","_vectorComponentCount","_setValue","_unpackedValues","getArrayValues","requiresUnpackForGet","supportsBigInt64Array","supportsBigUint64Array","unpackProperty","unpackedValues","unpackValues","getFunction","setFunction","carrying","byte","getInt64BigIntFallback","getInt64NumberFallback","getUint64BigIntFallback","getUint64NumberFallback","getComponentDatatype","requiresUnpackForSet","MetadataType","AlphaPipelineStage","opaquePass","u_alphaCutoff","AtmospherePipelineStage","modelRenderResources","u_isInFog","B3dmLoader","b3dmResource","_b3dmResource","_arrayBuffer","_gltfLoader","_batchLength","_propertyTable","b3dmLoader","emptyPropertyTable","processNode","createStructuralMetadata","featureIdVertexAttribute","BatchTexturePipelineStage","batchTextureUniforms","model_featuresLength","model_batchTexture","model_textureStep","model_textureDimensions","CPUStylingPipelineStage","COLOR_BLEND_UNIFORM_NAME","model_commandTranslucent","_minX","_minY","_maxX","_maxY","containsExclusive","containsInclusive","ClassificationModelDrawCommand","primitiveRenderResources","_runtimePrimitive","runtimePrimitive","_cullFace","_classifiesTerrain","_classifies3DTiles","_useDebugWireframe","_commandListTerrain","_commandList3DTiles","_commandListIgnoreShow","_commandListDebugWireframe","_commandListTerrainPicking","_commandList3DTilesPicking","scratchDerivedCommands","createBatchCommands","stencilDepthCommand","deriveStencilDepthCommand","deriveColorCommand","colorRenderState","batchLengths","batchOffsets","numBatches","numDerivedCommands","batchOffset","batchCommand","scratchPickCommands","pickStencilDepthCommand","pickColorCommand","pushCommands","ClassificationPipelineStage","indicesArray","hasIndices","currentBatchId","newOffset","finalBatchLength","createClassificationBatches","CustomShader","MODIFY_MATERIAL","lightingModel","varyings","translucencyMode","INHERIT","_textureManager","loadTexture2D","createUniformTexture2DFunction","createUniformFunction","buildUniformMap","usedVariablesVertex","attributeSet","featureIdSet","metadataSet","usedVariablesFragment","materialSet","featureIdRegex","metadataRegex","findUsedVariables","attributesVS","validateVariableUsage","attributesFS","validateBuiltinVariables","outputSet","expandCoordinateAbbreviations","variableSet","incorrectVariable","correctVariable","vertexOrFragment","setUniform","REPLACE_MATERIAL","CustomShaderMode","customShaderMode","CustomShaderPipelineStage","STRUCT_ID_ATTRIBUTES_VS","STRUCT_ID_ATTRIBUTES_FS","STRUCT_NAME_ATTRIBUTES","STRUCT_ID_VERTEX_INPUT","STRUCT_NAME_VERTEX_INPUT","STRUCT_ID_FRAGMENT_INPUT","STRUCT_NAME_FRAGMENT_INPUT","FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS","FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS","FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS","FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS","_oneTimeWarning","lightingOptions","generatedCode","attributesByName","attributeInfo","getAttributesByName","primitivePropertyIds","usedPropertyTextures","usedPropertyAttributes","usedPropertyTables","addUsedPropertyIds","propertyContainerIds","propertyContainers","propertyContainer","getAllPropertyIds","usedVariables","checkMetadataCompatibility","primitiveAttributes","addToShader","getPrimitiveAttributesUsedInShader","needsDefault","getAttributesNeedingDefaults","vertexInitialization","attributeFields","initializationLines","attributeField","attributeDefaults","inferAttributeDefaults","generateVertexShaderLines","fragmentInitialization","positionBuiltins","generatePositionBuiltins","generateFragmentShaderLines","shouldComputePositionWC","customShaderEnabled","generateShaderLines","scratchShaderLines","STRUCT_NAME_FEATURE_IDS","STRUCT_NAME_METADATA","STRUCT_NAME_METADATA_CLASS","STRUCT_NAME_METADATA_STATISTICS","addVertexLinesToShader","addFragmentLinesToShader","addLinesToShader","shaderModeDefine","getDefineName","varyingType","attributeTypeLUT","attributeDefaultValueLUT","trimmed","builtinAttributes","positionEC","shaderAttributeSet","renamed","needDefaults","metadataPropertiesUsedInShader","DequantizationPipelineStage","FUNCTION_ID_DEQUANTIZATION_STAGE_VS","FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS","addDequantizationUniforms","promoteToVec4","defaultAlpha","updateDequantizationFunction","generateOctDecodeLine","generateDequantizeLine","hasClassification","EdgeDetectionPipelineStage","EdgeVisibilityPipelineStage","edgeTypeLocation","edgeFeatureIdLocation","silhouetteNormalLocation","faceNormalALocation","faceNormalBLocation","adjacencyData","edgeMap","faceNormals","triangleIndexArray","readAttributeAsTypedArray","dequantized","scratchP0","scratchP1","scratchP2","scratchE1","scratchE2","scratchCross","processEdge","edgeKey","i0o","i1o","i2o","buildTriangleAdjacency","edgeResult","edgeData","seenEdgeHashes","silhouetteEdgeCount","totalIndices","bitPairOffset","visibility2Bit","shouldIncludeEdge","mateVertexIndex","edgeType","currentTriangleVertices","extractVisibleEdges","edgeFaceNormals","numEdges","triangleList","aBase","nAx","nAy","nAz","nBx","nBy","nBz","bBase","baseIdx","generateEdgeFaceNormals","edgeGeometry","totalVerts","srcPos","edgePosArray","edgeTypeArray","silhouetteNormalArray","faceNormalAArray","faceNormalBArray","maxSrcVertex","normalIdx","rawType","faceNormalIdx","normalAX","normalAY","normalAZ","normalBX","normalBY","normalBZ","edgePosBuffer","edgeTypeBuffer","silhouetteNormalBuffer","faceNormalABuffer","faceNormalBBuffer","useU32","edgeFeatureIds","firstFeatureIdSet","getFeatureIdForEdge","hasEdgeFeatureIds","edgeFeatureIdBuffer","createCPULineEdgeGeometry","u_isEdgePass","AnchorPointDirect","adjustmentParams","_adjustmentParams","AnchorPointIndirect","_covarianceMatrix","CorrelationGroup","groupFlags","rotationThetas","_groupFlags","_rotationThetas","GltfGpmLoader","createCovarianceMatrixFromUpperTriangle","createAnchorPointDirect","anchorPointDirectJson","createAnchorPointIndirect","anchorPointIndirectJson","createCorrelationGroup","correlationGroupJson","paramJson","gltfGpmLocalJson","storageType","Direct","loadDirect","Indirect","loadIndirect","anchorPointsDirect","covarianceDirectUpperTriangle","anchorPointsDirectJson","anchorPointDirect","covarianceDirect","anchorPointsIndirect","intraTileCorrelationGroups","anchorPointsIndirectJson","anchorPointIndirect","intraTileCorrelationGroupsJson","correlationGroup","GltfGpmLocal","_storageType","_anchorPointsIndirect","_anchorPointsDirect","_intraTileCorrelationGroups","_covarianceDirect","GltfMeshPrimitiveGpmLoader","_meshPrimitiveGpmLocal","meshPrimitiveGpmLocal","_loadResources","_loadTextures","ppeTextures","ppeTexture","ppeTexturesMetadataSchemaCache","_createPpeTextureClassJson","traits","ppePropertyName","_obtainPpeTexturesMetadataSchema","_collectPpeTexturePropertyIdentifiers","ppeTexturesMetadataSchema","ppeTexturesMetadataSchemaJson","classJson","ppeTexturePropertyIdentifiers","ppeTexturePropertyIdentifier","_convertToStructuralMetadata","ppeTextureAsPropertyTexture","propertyTexture","ppeTexturesJson","ppeTextureJson","traitsJson","_unloadTextures","MeshPrimitiveGpmLocal","_ppeTextures","PpeMetadata","_source","SIGX","SIGY","SIGZ","VARX","VARY","VARZ","SIGR","PpeTexture","_traits","_texCoord","Spdcf","FeatureIdPipelineStage","STRUCT_ID_FEATURE_IDS_VS","STRUCT_ID_FEATURE_IDS_FS","FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS","FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS","FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS","FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS","FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS","FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES","FUNCTION_ID_SET_FEATURE_ID_VARYINGS","FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS","processInstanceAttribute","vertexLine","fragmentLine","processAttribute","processImplicitRange","implicitFeatureIds","generateImplicitFeatureIdTypedArray","_pipelineResources","hasCpuCopy","addBuffer","generatedFeatureIdAttribute","generateImplicitFeatureIdAttribute","implicitAttributeName","implicitVaryingName","processTexture","texCoordVariable","texCoordVariableExpression","transformUniformName","initializationLine","addAlias","shaderDestination","updateVS","declareStructsAndFunctions","runtimeNode","processInstanceFeatureIds","aliasDestination","processPrimitiveFeatureIds","GeoJsonLoader","_geoJson","ParseResult","parseFunction","featureProperties","jsonMetadataTable","cartographicMin","cartographicMax","hasPoints","linesLength","ecefCenter","positionsTypedArray","featureIdsTypedArray","localMin","localMax","vertexCounter","segmentCounter","globalCartesian","localCartesian","featureIdBuffer","createLinesPrimitive","createPointsPrimitive","ParsedFeature","parsePosition","parseLineString","parsePolygon","primitiveTypes","parseFeature","geometryFunction","parsedFeature","GeometryPipelineStage","STRUCT_ID_PROCESSED_ATTRIBUTES_VS","STRUCT_ID_PROCESSED_ATTRIBUTES_FS","STRUCT_NAME_PROCESSED_ATTRIBUTES","FUNCTION_ID_INITIALIZE_ATTRIBUTES","FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES","FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS","FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS","FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS","attributeLocationCount","use2D","interpolationQualifier","modifyFor2D","componentsPerColumn","columnLengthInBytes","columnAttribute","addMatrixAttributeToRenderResources","featureIdVertexAttributeSetIndex","vertexAttribute","positionAttribute2D","positionBuffer2D","addAttributeToRenderResources","isQuantized","quantizedGlslType","isPosition","addAttributeDeclaration","addVaryingDeclaration","addSemanticDefine","vsStructId","fsStructId","updateAttributesStruct","updateInitializeAttributesFunction","updateSetDynamicVaryingsFunction","STRUCT_ID_SELECTED_FEATURE","STRUCT_NAME_SELECTED_FEATURE","TILE_PNTS","incrementIndexFor2D","hasTangents","handleBitangents","I3dmLoader","i3dmResource","_i3dmResource","_buffers","_featureTable","_instancesLength","gltfUrl","i3dmLoader","hasScale","translationTypedArray","quantizedPositions","quantizedVolumeScale","decodedPositions","getPositions","rotationTypedArray","scaleTypedArray","featureIdArray","instancePositions","instancePosition","instanceNormalRight","instanceNormalUp","instanceNormalForward","instanceRotation","instanceQuaternion","instanceQuaternionArray","instanceScale","instanceScaleArray","instanceTransform","positionBoundingSphere","centerTransform","transformScratch","processRotation","processScale","transformInWorldSpace","translationAttribute","rotationAttribute","scaleAttribute","featureIdInstanceAttribute","nodesLength","makeInstancesCopy","createInstancesCopy","createInstances","unloadBuffers","propertyScratch1","instancesCopy","attributeCopy","propertyScratch2","normalUp","normalRight","hasCustomOrientation","octNormalUp","octNormalRight","nonUniformScale","ImageBasedLightingPipelineStage","specularEnvironmentMapAtlas","useSphericalHarmonics","model_iblFactor","model_iblReferenceFrameMatrix","_iblReferenceFrameMatrix","model_sphericalHarmonicCoefficients","model_specularEnvironmentMaps","model_specularEnvironmentMapsMaximumLOD","overlappedRectangleScratch","nativeInputRectangleScratch","nativeImageryBoundsScratch","nativeClippedImageryBoundsScratch","ImageryCoverage","_textureCoordinateRectangle","_imagery","createImageryCoverages","inputRectangle","inputImageryLevel","_clampImageryLevel","imageryRange","_computeImageryRange","nativeInputRectangle","nativeImageryBounds","_computeImageryCoverages","localImageryRectangle","localClippedImageryRectangle","nativeClippedImageryBounds","clampedImageryLevel","overlappedRectangle","_computeOverlappedRectangle","_clampRectangle","computeClippedImageryRectangle","imageryCoverages","clippedImageryRectangleU","clippedImageryRectangleV","_localizeToCartesianRectangle","imageryCoverage","rectangleA","rectangleB","invX","invY","imageryTexCoordAttributeSetIndex","nativeBoundingRectangleScratch","nativeImageryRectangleScratch","ImageryPipelineStage","modelPrimitiveImagery","allProjections","_extractProjections","uniqueProjections","imageryTexCoordAttributeSetIndices","_computeIndexMapping","imageryInputs","_createImageryInputs","_addImageryTexCoordAttributesToRenderResources","imageryLayersArray","_processImageryInputs","imageryTexCoordAttributes","imageryTexCoordAttributesPerProjection","imageryTexCoordAttribute","_addImageryTexCoordAttributeToRenderResources","renderResourcesAttribute","numImageryTexCoordAttributes","imageryFlags","_computeImageryFlags","numTextures","_addAttributes","_defineUniforms","_buildSampleAndBlendFunction","_createMainImageryShader","_createImageryUniforms","_setImageryUniforms","numTexCoords","_createSampleAndBlendFunctionSignature","_createSampleAndBlendCallArguments","argsString","imageryTextures","imageryTextureCoordinateRectangle","imageryTextureTranslationAndScale","imageryTextureAlpha","imageryTextureBrightness","imageryTextureContrast","imageryTextureHue","imageryTextureSaturation","imageryTextureOneOverGamma","imageryTextureColorToAlpha","imageryInput","cartographicBoundingRectangle","mappedPositionsForImageryLayer","coverages","coveragesForImageryLayer","coverage","_createImageryInput","_computeTextureTranslationAndScale","textureCoordinateCartesianRectangle","nonNativeBoundingRectangle","nonNativeImageryRectangle","nativeBoundingRectangle","nativeImageryRectangle","_computeTextureTranslationAndScaleFromNative","invImageryWidth","invImageryHeight","modelViewScratch","nodeTransformScratch","modelView2DScratch","InstancingPipelineStage","_getInstanceTransformsAsMatrices","getInstanceTransformsAsMatrices","_transformsToTypedArray","transformsToTypedArray","sceneGraph","keepTypedArray","instancingVertexAttributes","instancingTransformsBuffer","transformsTypedArray","_modelResources","processMatrixAttributes","frameStateCV","computeReferencePoint2D","buffer2D","instancingTransformsBuffer2D","projectedTransforms","nodeComputedTransform","nodeComputedTransformScratch","getModelMatrixAndNodeTransform","referencePoint","instancingReferencePoint2D","projectedTransform","projectTransformTo2D","finalTranslation","projectTransformsTo2D","processTransformMatrixAttributes","attributeString","processVec3Attribute","instancingTranslations","instancingTranslationMin","instancingTranslationMax","getInstanceTranslationsAsCartesian3s","instancingTranslationBuffer2D","projectedTranslations","projectPositionTo2D","projectTranslationsTo2D","projectedTypedArray","transationsTypedArray","translationsToTypedArray","processTransformVec3Attributes","processTransformAttributes","processFeatureIdAttributes","u_instance_modifiedModelView","modifiedModelMatrix","u_instance_nodeTransform","axisCorrectionMatrix","modelMatrix2D","u_modelView2D","projectedTransformScratch","projectedPositionScratch","nodeTransform","scratchProjectedMin","scratchProjectedMax","transformedPositionMin","projectedMin","transformedPositionMax","projectedMax","translationScratch","scaleScratch","hasTranslation","componentByteSize","matrixAttributes","UNLIT","PBR","LightingPipelineStage","model_lightColorHdr","cartographicPositions","_cartographicPositions","_numPositions","_cartographicBoundingRectangle","MaterialPipelineStage","_processTexture","_processTextureTransform","processTextureTransform","transformDefine","textureDefine","texCoordVarying","texCoordDefine","scaleUniformName","processTextureScale","disableTextures","DEFAULT_EMISSIVE_FACTOR","u_emissiveFactor","processMaterialUniforms","DEFAULT_DIFFUSE_FACTOR","u_diffuseFactor","DEFAULT_SPECULAR_FACTOR","u_legacySpecularFactor","DEFAULT_GLOSSINESS_FACTOR","u_glossinessFactor","processSpecularGlossinessUniforms","u_specularFactor","DEFAULT_SPECULAR_COLOR_FACTOR","u_specularColorFactor","processSpecularUniforms","u_anisotropy","scratchAnisotropy","processAnisotropyUniforms","u_clearcoatFactor","u_clearcoatRoughnessFactor","processClearcoatUniforms","DEFAULT_BASE_COLOR_FACTOR","u_baseColorFactor","DEFAULT_METALLIC_FACTOR","u_metallicFactor","DEFAULT_ROUGHNESS_FACTOR","u_roughnessFactor","processMetallicRoughnessUniforms","disablePointCloudNormals","normalShading","u_pointDiameter","MetadataPickingPipelineStage","MetadataPipelineStage","STRUCT_ID_METADATA_VS","STRUCT_ID_METADATA_FS","STRUCT_ID_METADATA_CLASS_VS","STRUCT_ID_METADATA_CLASS_FS","STRUCT_ID_METADATA_STATISTICS_VS","STRUCT_ID_METADATA_STATISTICS_FS","FUNCTION_ID_INITIALIZE_METADATA_VS","FUNCTION_ID_INITIALIZE_METADATA_FS","FUNCTION_SIGNATURE_INITIALIZE_METADATA","FUNCTION_ID_SET_METADATA_VARYINGS","FUNCTION_SIGNATURE_SET_METADATA_VARYINGS","METADATA_CLASS_FIELDS","specName","shaderName","METADATA_STATISTICS_FIELDS","usedMetadataProperties","usedInVertex","usedInFragment","fragmentMetadataSet","vertexMetadataSet","collectMetadataUsedInCustomShader","colorVariables","showVariables","pointSizeVariables","collectMetadataUsedInPointCloudStyling","collectMetadataUsedByOtherStages","propertyAttributesInfo","propertyAttribute","getAttributeByName","sanitizeGlslIdentifier","propertiesArray","infoArray","modelAttribute","metadataVariable","propertyStatistics","getPropertyAttributeInfo","getPropertyAttributesInfo","propertyTexturesInfo","getPropertyTextureInfo","getPropertyTexturesInfo","propertyTablesInfo","tableToFeatureSetInfo","propertyTableToFeatureSet","addMapEntry","existingEntry","primitiveFeatureIds","instanceFeatureIds","mapPropertyTablesToFeatureIdSets","featureSetInfo","propertyInfoIndex","propertyShaderDestination","propertyDestination","featureIdVariableName","getPropertyTableInfo","getPropertyTablesInfo","propertyInfos","classTypes","statisticsTypes","classFields","metadataType","declareTypeStruct","statisticsFields","shaderType","convertToFloatComponents","declareMetadataTypeStructs","processPropertyAttributeProperty","processPropertyTextureProperty","processPropertyTableProperty","floatConversions","ivec2","ivec3","ivec4","converted","valueExpression","addValueTransformUniforms","addPropertyAttributePropertyMetadata","addPropertyMetadataClass","addPropertyMetadataStatistics","textureUniformName","unpackedValue","finalAssignment","addPropertyTexturePropertyMetadata","assignments","getStructAssignments","statisticsType","textureSampleExpression","addPropertyTablePropertyMetadata","offsetUniformName","fragmentDestination","vertexDestination","_clampedScale","_computedScale","_updateModelMatrix","referenceMatrix","_drawCommandsBuilt","_activeAnimations","_userAnimationDirty","_idDirty","_silhouetteDirty","_silhouetteId","_cull","_opaquePass","_allowPicking","_styleCommandsNeeded","_featureTables","_featureTableId","_featureTableIdDirty","_initialRadius","_heightDirty","_removeUpdateHeightCallback","_clampedModelMatrix","_terrainProviderChangedCallback","_attenuation","_pointCloudBackFaceCulling","_clippingPlanesMatrix","_modelImagery","_backFaceCulling","_backFaceCullingDirty","_shadowsDirty","_debugShowBoundingVolumeDirty","_debugWireframe","_gltfCredits","_showCreditsOnScreenDirty","_sceneMode","_fogRenderable","_skipLevelOfDetail","_ignoreCommands","_texturesReadyEvent","_sceneGraph","_nodesByName","pickObject","isColorAlphaDirty","previousColor","currentAlpha","previousAlpha","texturesReadyEvent","resetDrawCommands","alphaDirty","sizeDirty","updateBoundingSphere","hasVerticalExaggeration","computedScale","articulationStageKey","scratchIBLReferenceFrameMatrix4","scratchIBLReferenceFrameMatrix3","updateStyleCommandsNeeded","finishedProcessing","processLoader","updateCustomShader","updateEnvironmentMap","updateImageBasedLighting","_rejectLoad","propertyTableCount","modelFeatureTable","createModelFeatureTables","modelComponents","modelImagery","getFeatureIdsByLabel","selectFeatureTableId","updateFeatureTableId","styleCommandsNeededDirty","updateFeatureTables","updatePointCloudShading","supportsSilhouettes","updateSilhouette","updateSkipLevelOfDetail","isClippingEnabled","isClippingPolygonsEnabled","fogRenderable","updateFog","verticalExaggerationNeeded","updateVerticalExaggeration","destroyPipelineResources","buildDrawCommands","updateModelMatrix","getUpdateHeightCallback","maxPixelSize","scaleInPixels","pixelsPerMeter","updateComputedScale","updateBoundingSphereAndScale","iblReferenceFrameMatrix3","iblReferenceFrameMatrix4","yUpToZUp","clippingPlanesMatrix","updateReferenceMatrices","updatePickIds","updateBackFaceCulling","updateShadows","updateShowBoundingVolume","updateForAnimations","updateSceneGraph","resourceCreditsLength","gltfCredits","gltfCreditsLength","updateShowCreditsOnScreen","displayConditionPassed","nearSquared","farSquared","scratchDisplayConditionCartesian","passesDistanceDisplayCondition","isInvisible","hasSilhouette","showModel","submitCommandsForPass","creditsLength","addCreditsToCreditDisplay","pushDrawCommands","submitDrawCommands","originalPostition","clampedModelMatrix","is3DTiles","supportsSkipLevelOfDetail","destroyModelResources","TILE_GLTF","modelOptions","makeModelOptions","gltfCallback","TILE_B3DM","TILE_I3DM","TILE_GEOJSON","modelType","applyColorAndShow","hasColorStyle","hasShowStyle","isPnts","hasFeatureTable","hasPropertyAttributes","Model3DTileContent","additionalOptions","mainOptions","propertyTablesByteLength","batchTexturesByteLength","tilesetClippingPlanes","tilesetEnvironmentMapManager","tilesetClippingPolygons","ModelAnimation","_animation","_runtimeChannels","removeOnStop","_animationTime","animationTime","_prevAnimationDelta","STOPPED","_computedStartTime","_duration","_raiseStartEvent","_updateEventTime","_raiseUpdateEvent","_raiseStopEvent","_localStartTime","_localStopTime","runtimeAnimation","localStartTime","localStopTime","runtimeChannels","_runtimeNodes","runtimeChannel","ModelAnimationChannel","_runtimeAnimation","_runtimeNode","_splines","splines","pointsIndex","createSpline","createSplines","cubicPoints","createCubicSpline","localAnimationTime","userAnimated","ModelAnimationCollection","animationAdded","animationRemoved","animateWhilePaused","_runtimeAnimations","_previousTime","addAnimation","addedAnimations","animationsToRemove","createAnimationRemovedFunction","modelAnimationCollection","runtimeAnimations","animationOccurred","sceneTime","pastStartTime","reachedStopTime","ANIMATING","animationToRemove","ModelArticulation","_articulation","_runtimeStages","_runtimeStagesByName","runtimeArticulation","runtimeStages","runtimeStagesByName","runtimeStage","runtimeNodes","stageName","scratchArticulationMatrix","scratchNodeMatrix","articulationMatrix","stagesLength","applyStageToMatrix","originalTransform","articulationEpsilon","EPSILON16","ModelArticulationStage","_stage","_runtimeArticulation","_minimumValue","_maximumValue","_currentValue","scratchArticulationCartesian","scratchArticulationRotation","ModelClippingPlanesPipelineStage","textureResolution","model_clippingPlanes","model_clippingPlanesEdgeStyle","model_clippingPlanesMatrix","ModelClippingPolygonsPipelineStage","model_clippingDistance","model_clippingExtents","ModelColorPipelineStage","COLOR_UNIFORM_NAME","stageUniforms","ModelDrawCommand","_primitiveRenderResources","usesBackFaceCulling","needsTranslucentCommand","needsSkipLevelOfDetailCommands","needsSilhouetteCommands","needsEdgeCommands","_modelMatrix2D","_modelMatrix2DDirty","_usesBackFaceCulling","_needsTranslucentCommand","_needsSkipLevelOfDetailCommands","_needsSilhouetteCommands","_needsEdgeCommands","_originalCommand","_skipLodBackfaceCommand","_skipLodStencilCommand","_silhouetteModelCommand","_silhouetteColorCommand","_edgeCommand","_derivedCommands","_has2DCommands","ModelDerivedCommand","updateCullFace","updateDebugShowBoundingVolume","is2D","deriveSkipLodBackfaceCommand","deriveSkipLodStencilCommand","deriveSilhouetteModelCommand","deriveSilhouetteColorCommand","deriveEdgeCommand","derivedCommand2D","shouldUse2DCommands","idl2D","derive2DCommand","command2D","stencilReference","silhouetteModelCommand","silhouetteColorCommand","model_silhouettePass","edgeCommand","backfaceCommand","updateModelMatrix2D","ALL_OPAQUE","ALL_TRANSLUCENT","stencilDerivedComand","selectionDepth","lastSelectionDepth","skipLodStencilReference","getStencilReference","updateSkipLodStencilCommand","pushSilhouetteCommands","pushEdgeCommands","ModelDrawCommands","buildModelDrawCommand","is3D","_computedModelMatrix2D","boundingSphere2D","buildDrawCommandForModel","ModelFeature","_featureId","ModelFeatureTable","_styleCommandsNeededDirty","batchTextureByteLength","currentStyleCommandsNeeded","_modelPrimitiveImageries","_imageryConfigurations","_hasImagery","_allImageryLayersReady","_createModelPrimitiveImageries","_updateModelPrimitiveImageries","_checkForModifiedImageryConfigurations","_deleteModelPrimitiveImageries","runtimeNodesAndPrimitives","_collectRuntimeNodesAndPrimitives","modelPrimitiveImageries","runtimeNodeAndPrimitive","runtimePrimitives","_allModelPrimitiveImageriesReady","_imageryConfigurationsModified","_updateImageryConfigurations","imageryConfigurations","imageryConfiguration","ModelImageryMapping","createTextureCoordinatesForMappedPositions","mappedPositions","_createTextureCoordinates","projectedPositions","createProjectedPositions","computeTexCoords","createTypedArrayFromCartesians2","createTextureCoordinatesAttributeForMappedPositions","texCoordsTypedArray","createTexCoordAttribute","createCartographicPositions","primitivePositionAttribute","primitivePositionTransform","createIterableCartesian3FromTypedArray","transformedPositions","transformCartesians3","transformToCartographic","computeCartographicBoundingRectangle","transformedPosition","invSizeX","invSizeY","uRaw","vRaw","ModelMatrixUpdateStage","updateDrawCommand","transformToRoot","updateRuntimeNode","updateComputedTransform","childRuntimeNode","_transformToRoot","_transformDirty","ModelNode","ModelPrimitiveImagery","_mappedPositionsPerEllipsoid","_mappedPositionsModelMatrix","_lastImageryLayersModificationCounter","_imageryTexCoordAttributesPerProjection","_currentImageryLayers","_coveragesPerLayer","_allImageriesReady","coveragesPerLayer","modificationCounter","_mappedPositionsNeedUpdate","_computeMappedPositionsPerEllipsoid","_deleteCoveragesPerLayer","_destroyImageryTexCoordAttributes","_computeImageryTexCoordsAttributesPerProjection","_uploadImageryTexCoordAttributes","_computeCoveragesPerLayer","_updateImageries","_deleteCoverages","imageryTexCoordBuffer","lastModelMatrix","_obtainPrimitivePositionAttribute","_computePrimitivePositionTransform","mappedPositionsPerEllipsoid","_computeUniqueEllipsoids","ellipsoidsSet","_getEllipsoid","_createImageryTexCoordAttributes","_getProjection","imageryTexCoordAttributePerUniqueProjection","mappedPositionsForEllipsoid","currentImageryLayers","_computeCoverage","_computeImageryLevel","boundingRectangleSize","rectangleSize","desiredLevel","allImageriesReady","modelSceneGraph","ModelReader","compactTypedArray","readAttributeAsRawCompactTypedArray","elementCount","normalizedTypedArray","componentsPerElement","totalComponentCount","defaultByteStride","fullTypedArray","elementByteStride","componentsReader","createComponentsReader","quantizedTypedArray","convertZxyToXyz","dequantize1D","dequantize2D","dequantize3D","dequantize4D","createComponentReader","transform3D","readIndicesAsTypedArray","primitiveIndices","existingIndices","createIndexTypedArray","readIndicesAsTriangleIndicesTypedArray","convertTriangleStripToTriangleIndices","convertTriangleFanToTriangleIndices","nodeRenderResources","ModelRuntimeNode","_node","_originalTransform","_computedTransform","_transformParameters","_morphWeights","_runtimeSkin","_computedJointMatrices","pipelineStages","updateStages","_runtimeArticulations","updateTransformFromParameters","transformParameters","currentTranslation","currentRotation","currentScale","valueLength","runtimeSkin","computedJointMatrices","configurePipeline","updateJointMatrices","skinJointMatrices","jointMatrices","nodeWorldTransform","inverseNodeWorldTransform","ModelRuntimePrimitive","useWebgl2","hasMorphTargets","hasSkinning","hasImageryLayers","hasCustomShader","materialsEnabled","hasQuantization","hasQuantizedAttributes","generateWireframeIndices","isTriangles","hasAttenuation","hasPointCloudBackFaceCulling","hasPointCloudStyle","hasOutlines","featureIdFlags","hasPropertyTable","inspectFeatureIds","ModelSceneGraph","_pipelineStages","_updateStages","_skinnedNodes","_runtimeSkins","modelPipelineStages","articulationsLength","runtimeArticulations","rootNodesLength","rootNodeIndex","traverseAndCreateSceneGraph","runtimeSkins","skinsLength","skinnedNodes","skinnedNodesLength","skinnedNodeIndex","skinnedNode","skinIndex","scratchComputedTranslation","childrenIndices","getNodeTransform","publicNode","scratchModelPositionMin","scratchModelPositionMax","scratchPrimitivePositionMin","scratchPrimitivePositionMax","traverseSceneGraph","visibleNodesOnly","callbackOptions","runtimePrimitivesLength","forEachRuntimePrimitive","buildRenderResources","nodePipelineStages","primitivePipelineStages","modelPositionMin","modelPositionMax","primitivePositionMin","positionMin","primitivePositionMax","positionMax","disableAnimations","to2D","computeModelMatrix2D","scratchBackFaceCullingOptions","updatePrimitiveBackFaceCulling","backFaceCullingOptions","scratchShadowOptions","updatePrimitiveShadows","shadowOptions","scratchShowBoundingVolumeOptions","updatePrimitiveShowBoundingVolume","showBoundingVolumeOptions","scratchSilhouetteCommands","scratchEdgeCommands","scratchPushDrawCommandOptions","pushPrimitiveDrawCommands","silhouetteCommands","edgeCommands","primitiveDrawCommand","pushDrawCommandOptions","ModelSilhouettePipelineStage","silhouettesLength","model_silhouetteColor","model_silhouetteSize","ModelSkin","_skin","_inverseBindMatrices","_joints","_jointMatrices","runtimeJoints","runtimeJointMatrices","jointMatrix","computeJointMatrix","inverseBindMatrix","jointWorldTransform","ModelSplitterPipelineStage","SPLIT_DIRECTION_UNIFORM_NAME","ModelStatistics","_bufferIdSet","_textureIdByteLengths","_batchTextureIdMap","addBatchTexture","ModelType","ModelUtility","runtimeError","matchesSetIndex","hasSemantic","isVertexColor","cartesianMaxScratch","cartesianMinScratch","getPositionMinMax","positionGltfAttribute","sanitizedIdentifier","EXT_implicit_cylinder_region","EXT_implicit_ellipsoid_region","EXT_primitive_voxels","KHR_implicit_shapes","KHR_mesh_quantization","MorphTargetsPipelineStage","FUNCTION_ID_GET_MORPHED_POSITION","FUNCTION_SIGNATURE_GET_MORPHED_POSITION","FUNCTION_ID_GET_MORPHED_NORMAL","FUNCTION_SIGNATURE_GET_MORPHED_NORMAL","FUNCTION_ID_GET_MORPHED_TANGENT","FUNCTION_SIGNATURE_GET_MORPHED_TANGENT","addGetMorphedAttributeFunctionDeclarations","morphTargetsLength","processMorphTargetAttribute","addGetMorphedAttributeFunctionReturns","weightsLength","u_morphWeights","scratchAttributeInfo","morphTargetIndex","addMorphTargetAttributeToRenderResources","getMorphTargetAttributeInfo","addMorphTargetAttributeDeclarationAndFunctionLine","NodeStatisticsPipelineStage","_countInstancingAttributes","countInstancingAttributes","_countGeneratedBuffers","countGeneratedBuffers","PickingPipelineStage","buildPickObject","instanceId","detailPickObject","model_pickTexture","processPickTexture","pickIdsTypedArray","pipelineResources","pickIdsBuffer","pickIdsVertexAttribute","processInstancedPickIds","PntsLoader","_parsedContent","_decodedAttributes","decodeDracoResult","parsedContent","quantizedRange","quantizedComponentDatatype","quantizedType","octEncodedRange","BATCH_ID","batchTableProperties","hasDracoBatchTable","transcodeAttributeType","transcodeComponentType","processDracoAttributes","isUnlit","samplesLength","randomValues","computeApproximateExtrema","makeAttribute","defaultColorAttribute","makeAttributes","customAttributeOutput","parseAsPropertyAttributes","makeStructuralMetadata","customAttribute","addPropertyAttributesToPrimitive","makeComponents","decodeDraco","isRGB565","constantColor","packedColor","scratchUniform","PointCloudStylingPipelineStage","hasBatchTable","builtinVariableSubstitutionMap","getVariableSubstitutionMap","shaderFunctionInfo","scratchShaderFunctionInfo","colorStyleFunction","parameterList","showStyleFunction","pointSizeStyleFunction","styleTranslucent","getStyleShaderFunctionInfo","addShaderFunctionsAndDefines","builtinPropertyNames","getBuiltinPropertyNames","getPropertyNames","usesNormalSemantic","usesAddRefinement","model_pointCloudParameters","vec4","maximumAttenuation","baseResolution","scratchDimensions","geometricErrorScale","depthMultiplier","POSITION_ABSOLUTE","PrimitiveOutlineGenerator","originalVertexCount","_triangleIndices","_originalVertexCount","_edges","EdgeSet","_outlineCoordinatesTypedArray","_extraVertices","outlineGenerator","extraVertices","vertexCopies","hasEdge01","hasEdge","hasEdge12","hasEdge20","unmatchableVertexIndex","matchAndStoreCoordinates","i0Mask","computeOrderMask","i1Mask","i2Mask","workingOrders","i0ValidOrderCount","popcount6Bit","i1ValidOrderCount","i2ValidOrderCount","i0Start","i1Start","i2Start","third","createMipLevel","big","updatedTriangleIndices","updateAttribute","attributeTypedArray","extraVerticesLength","modelOutliningCache","outlineTexture","levelZero","PrimitiveOutlinePipelineStage","model_outlineTexture","model_outlineColor","model_showOutline","positionMinMax","PrimitiveStatisticsPipelineStage","_countGeometry","countGeometry","_count2DPositions","count2DPositions","_countMorphTargetAttributes","countMorphTargetAttributes","_countMaterialTextures","countMaterialTextures","_countFeatureIdTextures","countFeatureIdTextures","_countBinaryMetadata","countBinaryMetadata","countTriangles","textureReaders","getAllTextureReaders","featureIdSets","texturesLength","countPropertyTextures","scratchModelMatrix","scratchModelView2D","SceneMode2DPipelineStage","computeBoundingSphere2D","dequantizedArray","initialPosition","scaledPosition","dequantizedPosition","dequantizePositionsTypedArray","relativePosition","createPositionsTypedArrayFor2D","createPositionBufferFor2D","SelectedFeatureIdPipelineStage","getFeatureIdDefine","getShaderDestination","selectedFeatureIds","featureIdDefine","getSelectedFeatureIds","updateFeatureStruct","model_nullFeatureId","SkinningPipelineStage","FUNCTION_ID_GET_SKINNING_MATRIX","FUNCTION_SIGNATURE_GET_SKINNING_MATRIX","componentIndex","componentStrings","maximumSetIndex","getMaximumAttributeSetIndex","addGetSkinningMatrixFunction","u_jointMatrices","StyleCommandsNeeded","TextureManager","_lastUpdatedFrame","textureManager","textureUniform","getTextureAndMips","needMipmap","samplerRepeats","imageFromArray","getTextureFromTypedArray","getWebGL1Texture","fetchTexture2D","hasTypedArray","TilesetPipelineStage","VerticalExaggerationPipelineStage","scratchExaggerationUniform","WireframePipelineStage","createWireframeIndices","createWireframeIndexBuffer","originalPrimitiveType","getWireframeIndicesCount","scratchNodeComputedTransform","scratchcomputedModelMatrix","scratchPickCartographic","pickModel","transformsCount","instanceComponentDatatype","transformElements","instanceTransformsBuffer","isInterleaved","elementStride","ModelComponents","Moon","textureUrl","_ellipsoidPrimitive","_axes","ellipsoidPrimitive","Multiple3DTileContent","tilesetResource","_tilesetResource","_contentsCreated","_innerContentHeaders","_requestsInFlight","_cancelCount","_externalTilesetCount","_arrayFetchPromises","_requests","_innerContentResources","_serverKeys","updatePendingRequests","deltaRequestCount","cancelPendingRequests","originalContentState","requestInnerContent","originalCancelCount","handleInnerContentFailed","serverKeys","requestCountsByServer","canScheduleAllRequests","arrayBuffers","createInnerContent","createInnerContents","NeverTileDiscardPolicy","OIT","_translucentMultipassSupport","_translucentMRTSupport","extensionsSupported","_opaqueFBO","_opaqueTexture","_accumulationTexture","_translucentFBO","_alphaFBO","_adjustTranslucentFBO","_adjustAlphaFBO","_opaqueClearCommand","_translucentMRTClearCommand","_translucentMultipassClearCommand","_alphaClearCommand","_translucentRenderStateCache","_alphaRenderStateCache","_compositeCommand","_adjustTranslucentCommand","_adjustAlphaCommand","_useHDR","destroyTextures","oit","_revealageTexture","destroyResources","useHDR","accumulationTexture","updateTextures","completeFBO","supported","translucentComplete","alphaComplete","adjustTranslucentComplete","adjustAlphaComplete","updateFramebuffers","u_opaque","u_accumulation","u_revealage","u_bgColor","translucentMRTBlend","translucentColorBlend","translucentAlphaBlend","translucentBlending","translucentState","fragDataMatches","matchAll","fragDataDeclarations","fragDataMatch","createDerivedCommands","translucentShader","translucentRenderState","getTranslucentMRTShaderProgram","colorShader","alphaShader","alphaRenderState","alphaCommand","getTranslucentColorShaderProgram","getTranslucentColorRenderState","getTranslucentAlphaShaderProgram","getTranslucentAlphaRenderState","executeFunction","_hdr","lightShadowsEnabled","debugFramebuffer","logDepth","executeTranslucentCommandsSortedMRT","executeTranslucentCommandsSortedMultipass","OpenStreetMapImageryProvider","retinaTiles","fileExtension","swTile","neTile","OrderedGroundPrimitiveCollection","_collectionsArray","destroyPrimitives","doNotDestroy","Panorama","PanoramaProvider","defaultSize","Particle","mass","life","startColor","endColor","startScale","endScale","_age","_normalizedAge","normalizedAge","deltaScratch","particleUpdateFunction","ParticleBurst","_complete","ParticleEmitter","defaultImageSize","ParticleSystem","updateCallback","_emitter","_bursts","bursts","_emitterModelMatrix","emitterModelMatrix","_matrixDirty","_combinedMatrix","_startColor","_endColor","_startScale","_endScale","_emissionRate","emissionRate","_minimumSpeed","speed","minimumSpeed","_maximumSpeed","maximumSpeed","_minimumParticleLife","particleLife","minimumParticleLife","_maximumParticleLife","maximumParticleLife","_minimumMass","minimumMass","_maximumMass","maximumMass","_minimumImageSize","minimumImageSize","_maximumImageSize","maximumImageSize","_lifetime","lifetime","_particles","_particlePool","_carryOver","_isComplete","_updateParticlePool","_particleEstimate","getOrCreateParticle","system","addParticleToPool","updateBillboard","addParticle","isComplete","rotatedVelocityScratch","burstAmount","particleEstimate","particles","particlePool","numToAdd","updateParticlePool","numToEmit","burst","calculateNumberToEmit","combinedMatrix","burstLength","numParticles","numInPool","estimate","freeParticlePool","PerInstanceColorAppearance","FLAT_VERTEX_FORMAT","PerformanceDisplay","fpsElement","_fpsText","msElement","_msText","_lastFpsSampleTime","_lastMsSampleTime","_fpsFrameCount","_msFrameCount","_throttled","throttledElement","_throttledText","throttled","renderedThisFrame","updateDisplay","fpsElapsedTime","fps","msElapsedTime","PickDepth","_textureToCopy","pickDepth","scratchPackedDepth","packedDepthScale","getDepth","packedDepth","PickDepthFramebuffer","_passState","drawingBufferPosition","PickFramebuffer","_fb","pickObjectsFromPixels","begin","screenSpaceRectangle","endAsync","pbo","readCenterPixel","mostDetailedPreloadTilesetPassState","mostDetailedPickTilesetPassState","pickTilesetPassState","Picking","_mostDetailedRayPicks","_pickPositionCache","_pickPositionCacheDirty","pickOffscreenViewport","pickOffscreenCamera","_pickOffscreenView","getPickDepth","pickDepths","scratchOrthoPickingFrustum","scratchOrthoOrigin","scratchOrthoDirection","scratchOrthoPixelSize","scratchOrthoPickVolumeMatrix4","scratchPerspPickingFrustum","scratchPerspPixelSize","getPickCullingVolume","getPickOrthographicCullingVolume","pickWidth","pickHeight","offCenter","getPickPerspectiveCullingVolume","scratchColorZero","computePickingDrawingBufferRectangle","pickBegin","drawingBufferRectangle","pickFramebuffer","transformWindowToDrawingBuffer","updateFrameState","updateEnvironment","updateAndExecuteCommands","resolveFramebuffers","pickEnd","pickAsync","pickedObjects","pickVoxelCoordinate","voxelInfo","pickMetadata","oldOIT","_environmentState","useOIT","rawMetadataPixel","decodeMetadataValues","scratchPerspectiveFrustum","scratchPerspectiveOffCenterFrustum","scratchOrthographicFrustum","scratchOrthographicOffCenterFrustum","useDepthPicking","pickTranslucentDepth","environmentState","pickDepthFramebuffer","clearPasses","renderTranslucentDepthForPick","frustumCommandsList","renderedFrustum","height2D","opaqueFrustumNearOffset","drawingBufferToWorldCoordinates","scratchPickPositionCartographic","addDrillPickedResults","pickedResults","pickedPrimitives","pickedAttributes","pickedFeatures","pickedResult","exclude","hasShowAttribute","drillPick","pickCallback","pickPosition","MostDetailedRayPick","tilesets","_completePick","updateOffscreenCameraFromRay","orthogonalAxis","updateMostDetailedRayPick","rayPick","tilesetsLength","getTilesets","objectsToExclude","launchMostDetailedRayPick","isExcluded","drillPickFromRay","requirePosition","mostDetailed","pickResult","getRayIntersection","pickFromRay","deferPromiseUntilPostRender","removeCallback","updateMostDetailedRayPicks","rayPicks","pickFromRayMostDetailed","drillPickFromRayMostDetailed","scratchSurfaceNormal","scratchSurfaceRay","getRayForSampleHeight","surfaceRay","getRayForClampToHeight","getHeightFromCartesian","sampleHeightMostDetailed","clampToHeightMostDetailed","sampleHeight","sampleHeightSupported","clampToHeight","clampToHeightSupported","clampedCartesians","PntsParser","dracoBuffer","dracoFeatureTableProperties","dracoBatchTableProperties","featureTableDraco","batchTableDraco","hasPositions","hasColors","hasBatchIds","dracoByteOffset","dracoByteLength","featureTableProperties","parseDracoProperties","POSITION_QUANTIZED","parsePositions","NORMAL_OCT16P","parseNormals","CONSTANT_RGBA","constantRGBA","parseColors","hasConstantColor","parseBatchIds","dracoBatchTablePropertyNames","invalidBinaryBodyReferenceNames","removeInvalidBinaryBodyReferences","PointCloud","_isTranslucent","_styleTranslucent","_constantColor","_rtcCenter","_quantizedVolumeScale","_quantizedVolumeOffset","_styleableShaderAttributes","_isQuantized","_isOctEncoded16P","_isRGB565","_hasColors","_hasNormals","_hasBatchIds","_decodingState","_dequantizeInShader","_isQuantizedDraco","_isOctEncodedDraco","_quantizedRange","_octEncodedRange","_normalShading","_opaqueRenderState","_translucentRenderState","_pointsLength","_geometryByteLength","_vertexShaderLoaded","vertexShaderLoaded","_fragmentShaderLoaded","fragmentShaderLoaded","_uniformMapLoaded","uniformMapLoaded","_batchTableLoaded","batchTableLoaded","_pickIdLoaded","pickIdLoaded","_splittingEnabled","pointCloud","styleableProperties","prepareVertexAttribute","scratchPointSizeAndTimeAndGeometricErrorAndDepthMultiplier","scratchQuantizedVolumeScaleAndOctEncodedRange","getStyleablePropertyIds","getVertexAttribute","decoding","decodedRgb","decodedRgba","decodedNormals","decodedBatchIds","isQuantizedDraco","isOctEncodedDraco","decodedColors","shadersDirty","modelMatrixDirty","hasStyleableProperties","isOctEncoded16P","styleableVertexAttributes","styleableShaderAttributes","attributeLocation","positionsVertexBuffer","colorsVertexBuffer","normalsVertexBuffer","batchIdsVertexBuffer","computeApproximateBoundingSphereFromPositions","colorComponentsPerAttribute","opaqueRenderState","splittingEnabled","hasStyle","propertyIdToAttributeMap","hasPointSizeStyle","hasClippedContent","styleablePropertyIds","usesColorSemantic","usesColors","usesNormals","a_position","a_color","a_normal","attributeDeclarations","u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier","scratch","u_constantColor","addUniforms","u_quantizedVolumeScaleAndOctEncodedRange","modifyFragmentShader","createShaders","PointCloudEyeDomeLighting","_strength","colorGBuffer","depthGBuffer","distanceAndEdlStrengthScratch","getECShaderProgram","eyeDomeLightingStrength","eyeDomeLightingRadius","blendFS","blendUniformMap","u_pointCloud_colorGBuffer","u_pointCloud_depthGBuffer","u_distanceAndEdlStrength","blendRenderState","originalShaderProgram","derivedCommandObject","pointCloudProcessor","blendCommand","PointCloudShading","pointPrimitiveCollection","OUTLINE_COLOR_INDEX","OUTLINE_WIDTH_INDEX","PIXEL_SIZE_INDEX","DISABLE_DEPTH_DISTANCE_INDEX","_updatePointPrimitive","worldToWindowCoordinates","windowCoordinates","positionHighAndSize","positionLowAndOutline","distanceDisplayConditionAndDisableDepthAndSplitDirection","_pointPrimitives","_pointPrimitivesToUpdate","_pointPrimitivesToUpdateIndex","_pointPrimitivesRemoved","_maxPixelSize","_maxTotalPointSize","u_maxTotalPointSize","destroyPointPrimitives","pointPrimitives","removePointPrimitives","newPointPrimitives","writeColorScratch","writePositionSizeAndOutline","writeDistanceDisplayConditionAndDepthDisableAndSplitDirection","writePointPrimitive","pointPrimitivesToUpdate","pointPrimitivesLength","pointPrimitivesToUpdateLength","numberOfPointPrimitives","positionLowAndShow","Polyline","_actualPositions","_actualLength","_boundingVolumeWC","WIDTH_INDEX","MATERIAL_INDEX","POSITION_SIZE_INDEX","_updatePolyline","segmentPositionsLength","segmentLengths","positionsChanged","_clean","texCoordExpandAndBatchIndex","position2DHigh","position2DLow","prevPosition3DHigh","prevPosition3DLow","prevPosition2DHigh","prevPosition2DLow","nextPosition3DHigh","nextPosition3DLow","nextPosition2DHigh","nextPosition2DLow","PolylineCollection","_opaqueRS","_translucentRS","_polylinesUpdated","_polylinesRemoved","_polylines","_polylineBuckets","_positionBufferUsage","frameCount","_polylinesToUpdate","_vertexArrays","_positionBuffer","_texCoordExpandAndBatchIndexBuffer","_createBatchTable","_useHighlightColor","removePolylines","_bucket","bucket","releaseShaders","destroyPolylines","scratchUpdatePolylineEncodedCartesian","scratchUpdatePolylineCartesian4","scratchNearFarCartesian2","createBatchTable","createVertexArrays","polylinesToUpdate","updateLength","polylineBuckets","writeUpdate","lengthOfPositions","encodedCenter","nearFarCartesian","useDepthTest","cloneBoundingSphere","vertexArrays","uniformCallback","buckets","bucketLength","bucketLocator","polylines","polylineLength","currentMaterial","mId","createMaterialId","locators","_locatorBuckets","locatorLength","locator","boundingSphereScratch2","createCommandLists","destroyVertexArrays","emptyVertexBuffer","PolylineBucket","addPolyline","sortPolylinesIntoBuckets","useHighlightColor","vertexArrayBuckets","updateShader","positionArray","texCoordExpandAndBatchIndexArray","position3DArray","texCoordExpandAndBatchIndexIndex","writeForMorph","updateIndices","positionBufferUsage","texCoordExpandAndBatchIndexBufferUsage","position3DBuffer","positionSizeInBytes","texCoordExpandAndBatchIndexSizeInBytes","vbo","numberOfIndicesArrays","positionHighOffset","positionLowOffset","prevPositionHighOffset","prevPositionLowOffset","nextPositionHighOffset","nextPositionLowOffset","vertexTexCoordExpandAndBatchIndexBufferOffset","bufferProperty3D","buffer3D","bufferProperty2D","replacer","definedPolylines","definedPolylinesToUpdate","polyIndex","VertexArrayBucketLocator","intersectsIDL","getPolylinePositionsLength","scratchWritePosition","scratchWritePrevPosition","scratchWriteNextPosition","scratchWriteVector","scratchPickColorCartesian","scratchWidthShowCartesian","polylineBatchIndex","getSegments","segmentIndex","segmentLength","segmentStart","segmentEnd","colorCartesian","widthShowCartesian","morphPositionScratch","morphPrevPositionScratch","morphNextPositionScratch","morphVectorScratch","scratchSegmentLengths","vaCount","numberOfSegments","segmentIndexCount","getPolylineStartIndex","scratchSegments","scratchLengths","pscratch","scratchPositionsArray","center2D","positionsArrayLength","endJ","defaultVertexShaderSource","defaultFragmentShaderSource","PolylineColorAppearance","PolylineMaterialAppearance","PostProcessStage","textureScale","forcePowerOfTwo","sampleMode","scissorRectangle","_fragmentShader","_textureScale","_forcePowerOfTwo","_sampleMode","_actualUniforms","_dirtyUniforms","_texturesToCreate","_texturePromise","_selectedIdTexture","_selected","_selectedShadow","_parentSelected","_parentSelectedShadow","_combinedSelected","_combinedSelectedShadow","_selectedLength","_parentSelectedLength","_selectedDirty","parentSelected","depthTextureRegex","getUniformValueGetterAndSetter","actualUniforms","getStageByName","getUniformMapDimensionsFunction","createLoadImageFunction","createStageOutputTextureFunction","getOutputTexture","releaseResources","actualUniform","_isSupported","parentLength","isSelectedTextureDirty","textureLength","pickIdsLength","createSelectedTexture","newUniforms","depthTextureDimensions","czm_idTexture","czm_selectedIdTexture","czm_selectedIdTextureStep","texturesToCreate","dirtyUniforms","stageNameUrlOrImage","stageWithName","updateUniformTextures","createDrawCommand","stackScratch","PostProcessStageCollection","fxaa","createFXAAStage","createAmbientOcclusionStage","bloom","createBloomStage","_autoExposureEnabled","_autoExposure","createAutoExposureStage","_exposure","_tonemapping","_tonemapper","tonemapper","PBR_NEUTRAL","tonemapping","stageNames","_stages","_activeStages","_previousActiveStages","_randomTexture","randomTexture","_ao","_bloom","_fxaa","_aoEnabled","_bloomEnabled","_tonemappingEnabled","_fxaaEnabled","_activeStagesChanged","_stagesRemoved","_textureCacheDirty","_stageNames","removeStages","newStages","inputPreviousStageTexture","readyAndEnabled","ambientOcclusion","hasSelected","useAutoExposure","REINHARD","createReinhardTonemappingStage","MODIFIED_REINHARD","createModifiedReinhardTonemappingStage","FILMIC","createFilmicTonemappingStage","createPbrNeutralTonemappingStage","createAcesTonemappingStage","autoExposure","exposure","currentStage","previousActiveStages","activeStages","activeStagesChanged","aoEnabled","bloomEnabled","tonemappingEnabled","fxaaEnabled","updateDependencies","autoExposureEnabled","initialTexture","PostProcessStageComposite","_inputPreviousStageTexture","PostProcessStageLibrary","createBlur","blurShader","blurX","blurY","blurXUniforms","blurYUniforms","createBlurStage","createDepthOfFieldStage","dof","focalDistance","blurTexture","isDepthOfFieldSupported","createEdgeDetectionStage","isEdgeDetectionSupported","createSilhouetteStage","edgeDetectionStages","edgeDetection","compositeUniforms","fsDecl","fsLoop","edgeComposite","getSilhouetteEdgeDetection","silhouetteProcess","silhouetteTexture","isSilhouetteSupported","contrastBias","generateComposite","bloomComposite","glowOnly","bloomTexture","lengthCap","directionCount","stepCount","ambientOcclusionModulate","ambientOcclusionOnly","ambientOcclusionTexture","isAmbientOcclusionSupported","fxaaFS","createBlackAndWhiteStage","gradations","createBrightnessStage","createNightVisionStage","createDepthViewStage","createLensFlareStage","dirtTexture","starTexture","distortion","ghostDispersal","haloWidth","dirtAmount","earthRadius","PostProcessStageTextureCache","postProcessStageCollection","_stageNameToFramebuffer","_updateDependencies","getLastStageName","getStageDependencies","previousName","stageDependencies","uniformNamesLength","dependent","getCompositeDependencies","originalDependency","inSeries","currentName","currentDependencies","foundConflict","needsCheckDimensionsUpdate","getDependencies","dimensionsChanged","textureHeight","_appearance","_depthFailAppearance","_vertexCacheOptimize","_interleave","_releaseGeometryInstances","_compressVertices","_perInstanceAttributeCache","_instanceIds","_lastPerInstanceAttributeIndex","_frontFaceRS","_backFaceRS","_spDepthFail","_frontFaceDepthFailRS","_backFaceDepthFailRS","_pickCommands","_createGeometryResults","_batchTableAttributeIndices","_offsetInstanceExtend","_batchTableOffsetAttribute2DIndex","_batchTableOffsetsUpdated","_instanceBoundingSpheres","_instanceBoundingSpheresCV","_tempBoundingSpheres","_recomputeBoundingSpheres","_batchTableBoundingSpheresUpdated","_batchTableBoundingSphereAttributeIndices","scratchGetAttributeCartesian2","scratchGetAttributeCartesian3","getAttributeValue","cloneAttribute","clonedValues","cloneGeometry","cloneInstance","positionRegex","appendPickToVertexShader","appendPickToFragmentShader","containsNormal","containsSt","containsTangent","containsBitangent","validateShaderMatching","shaderAttributes","getUniformFunction","forwardDecl","computeFunctions","isDepthFail","_appendOffsetToShader","modifiedShader","distanceDisplayConditionMain","numberOfCreationWorkers","createGeometryTaskProcessors","combineGeometryTaskProcessor","scratchBoundingSphereCenterEncoded","scratchBoundingSphereCartographic","scratchBoundingSphereCenter2D","offsetScratchCartesian","offsetCenterScratch","updateBatchTableOffsets","index2D","newPoint","newPointProjected","newVector","depthClampVS","depthClampFS","getUniforms","appearanceUniformMap","appearanceUniforms","depthFailUniforms","sphereIndex","boundingSphereWC","attributesInAllInstances","inAllInstances","getCommonPerInstanceAttributeNames","attributeIndices","boundingSphereAttributeIndices","offset2DIndex","center3DHigh","center3DLow","center2DHigh","center2DLow","COMPLETE","COMBINED","instanceIds","subTask","subTasks","workerSubTasks","workerSubTasksLength","subTaskTransferableObjects","CREATING","CREATED","setReady","packCombineGeometryParameters","createGeometryResults","elementIndexUintSupported","createPickOffsets","COMBINING","packedResult","unpackCombineGeometryResults","offsetInstanceExtend","boundingSpheresCV","loadAsynchronous","clonedInstances","createdGeometry","combineGeometry","loadSynchronous","center3DHighIndex","center3DLowIndex","center2DHighIndex","center2DLowIndex","radiusIndex","updateBatchTableBoundingSpheres","newBoundingSpheres","newBS","transformBoundingSphere","combinedBS","combinedWestBS","combinedEastBS","resultBS1","resultBS2","resultBS3","recomputeBoundingSpheres","createRS","createSP","offsetBoundingSphereScratch1","offsetBoundingSphereScratch2","origBS","offsetBS","createGetFunction","createSetFunction","curIndex","perInstanceAttributeIndices","createBoundingSphereProperties","createPickIdProperty","PrimitiveCollection","_primitiveAdded","_primitiveRemoved","_countReferences","countReferences","getPrimitiveIndex","compositePrimitive","primitiveAdded","primitiveRemoved","_external","_composites","_referenceCount","PrimitiveLoadPlan","outlineCoordinatesPlan","outlineCoordinatesTypedArray","makeOutlineCoordinatesAttribute","generateOutlines","generateAttributeBuffers","generateIndexBuffers","generateBuffers","attrLen","setupGaussianSplatBuffers","addGeometryBatchId","positionAttr","geometryName","PrimitivePipeline","transferGeometry","packInstancesForCombine","packBoundingSpheres","unpackBoundingSpheres","hasOffset","uintIndexSupport","primitiveModelMatrix","toWorld","addBatchIds","name3D","name2D","splitGeometries","geometryPipeline","createInstancePickOffsets","packCreateGeometryResults","countCreateGeometryResults","stringTable","stringHash","validGeometry","validBoundingSphere","validBoundingSphereCV","attributesToWrite","unpackCreateGeometryResults","createGeometryResult","packedGeometry","packedGeometryIndex","packedInstances","unpackCombineGeometryParameters","packedParameters","unpackInstancesForCombine","geometriesLength","packCombineGeometryResults","transferGeometries","packedBoundingSpheres","packedBoundingSpheresCV","PropertyAttribute","PropertyAttributeProperty","_attribute","PropertyTable","_jsonMetadataTable","batchTableHierarchy","propertyExistsBySemantic","scratchResults","checkFeatureId","PropertyTexture","PropertyTextureProperty","reformatChannels","_textureReader","QuadtreeOccluders","QuadtreePrimitive","enableDebugOutput","maxDepthVisited","tilesVisited","tilesCulled","tilesWaitingForChildren","lastMaxDepth","lastMaxDepthVisited","lastTilesVisited","lastTilesCulled","lastTilesRendered","lastTilesWaitingForChildren","suspendLodUpdate","_tileReplacementQueue","_loadQueueTimeSlice","_tilesInvalidated","_removeHeightCallbacks","_updateHeightsTimeSlice","_cameraPositionCartographic","_cameraReferenceFrameOriginCartographic","_tileLoadProgressEvent","_lastTileLoadQueueLength","clearTileLoadQueue","comparisonPoint","tileFunction","replacementNext","forEachRenderedTile","positionOnEllipsoidSurface","removeFunc","replacementQueue","markStartOfRenderFrame","createLevelZeroTiles","numberOfRootTiles","rootTraversalDetails","TraversalDetails","compareDistanceToPoint","customDataAdded","customDataRemoved","_addedCustomData","_removedCustomData","updateCustomData","cameraFrameOrigin","cameraOriginScratch","markTileRendered","visitIfVisible","queueTileLoad","selectTilesForRendering","createRenderCommandsForSelectedTiles","tileLoadQueueHigh","tileLoadQueueMedium","tileLoadQueueLow","didSomeLoading","processSinglePriorityLoadQueue","processTileLoadQueue","tryNextFrame","tilesToUpdateHeights","selectionResult","clearPositionCache","_customDataIterator","customDataIterator","nextData","timeSliceMax","upsampledGeometryFromParent","cachedData","getPositionCacheEntry","scratchRay","setPositionCacheEntry","positionCarto","currentLoadQueueLength","updateTileLoadProgress","alon","alat","blon","blat","needsLoading","_loadPriority","allAreRenderable","anyWereRenderedLastFrame","notYetRenderableCount","TraversalQuadDetails","traversalQuadsByLevel","ancestorMeetsSse","traversalDetails","meetsSse","screenSpaceError2D","maxGeometricError","oneRenderedLastFrame","originalResult","twoCulledOrNotVisited","CULLED","threeCompletelyLoaded","addTileToRenderList","firstRenderedDescendantIndex","loadIndexLow","loadIndexMedium","loadIndexHigh","tilesToUpdateHeightsIndex","quadDetails","southwestDetails","southeastDetails","northwestDetails","northeastDetails","visitVisibleChildrenNearToFar","queuedForLoad","renderList","workTile","KICKED","kick","wasRenderedLastFrame","containsNeededPosition","sortByLoadPriority","loadQueue","LRUCache","QuadtreeTile","replacementPrevious","_positionCache","_getCacheKey","lonGrid","latGrid","createSpatialHashKey","childTileAtPosition","splitPointScratch","nwChildRectangle","tileSplitPoint","freeTile","findLevelZeroTile","findTileToWest","westOfParent","findTileToEast","eastOfParent","findTileToSouth","southOfParent","findTileToNorth","northOfParent","QuadtreeTileProvider","computeDefaultLevelZeroMaximumGeometricError","ResourceCache","CacheEntry","resourceLoader","_statisticsPromise","cacheEntries","cacheEntry","removeLoader","getSchemaCacheKey","getEmbeddedBufferCacheKey","getExternalBufferCacheKey","getGltfCacheKey","getBufferViewCacheKey","getDracoCacheKey","getSpzCacheKey","getVertexBufferCacheKey","getIndexBufferCacheKey","getImageCacheKey","getTextureCacheKey","cacheEntriesSorted","cacheEntriesLength","ResourceCacheKey","getExternalResourceCacheKey","getBufferCacheKey","cacheKeySuffix","bufferCacheKey","accessorCacheKey","getAccessorCacheKey","imageCacheKey","samplerCacheKey","getSamplerCacheKey","ResourceCacheStatistics","_geometrySizes","_textureSizes","totalSize","geometrySize","requestRenderAfterFrame","creditContainer","creditViewport","hasCreditContainer","_jobScheduler","_removeCreditContainer","_creditContainer","_computeEngine","_globe","_globeTranslucencyState","_globeHeight","_globeHeightDirty","_cameraUnderground","_logDepthBuffer","defaultLogDepthBuffer","_logDepthBufferDirty","_tweens","_shaderFrameCount","_sunPostProcess","_computeCommandList","_overlayCommandList","_useOIT","orderIndependentTranslucency","_executeOITFunction","_depthPlane","_depthClearCommand","_classificationStencilClearCommand","_transitioner","_preUpdate","_postUpdate","_renderError","_preRender","_debugInspector","_msaaSamples","msaaSamples","rethrowRenderErrors","completeMorphOnUserInput","morphStart","skyBox","skyAtmosphere","sunBloom","_sunBloom","moon","farToNearRatio","logarithmicDepthFarToNearRatio","nearToFarDistance2D","debugCommandFilter","debugShowFramesPerSecond","debugShowDepthFrustum","debugShowFrustumPlanes","_debugShowFrustumPlanes","_debugFrustumPlanes","cameraEventWaitTime","_shadowMapCamera","shadowMap","lightCamera","_actualInvertClassificationColor","_invertClassification","focalLength","eyeSeparation","postProcessStages","_brdfLutGenerator","_performanceDisplay","_debugVolume","_screenSpaceCameraController","_mapMode2D","skyBoxCommand","skyAtmosphereCommand","sunDrawCommand","sunComputeCommand","moonCommand","isSunVisible","isMoonVisible","isReadyForAtmosphere","isSkyAtmosphereVisible","useGlobeDepthFramebuffer","useInvertClassification","usePostProcess","usePostProcessSelected","useWebVR","_useWebVR","_cameraVR","_aspectRatioVR","requestRenderMode","_renderRequested","maximumRenderTimeChange","_lastRenderTime","_removeRequestListenerCallback","_removeTaskProcessorListenerCallback","_removeGlobeCallbacks","_removeTerrainProviderReadyListener","_defaultView","_hdrDirty","highDynamicRange","_enableEdgeVisibility","updateFrameNumber","initializeFrame","shadowsDirty","createReceiveDerivedCommand","receiveCommand","invertClassificationSupported","specularEnvironmentMapsSupported","removeGlobeCallbacks","updateGlobeListeners","postUpdate","renderError","preRender","lastRenderTime","debugFrustumStatistics","morphTo2D","morphTo3D","morphToColumbusView","numberOfFrustums","_deviceOrientationCameraController","logarithmicDepthBuffer","highDynamicRangeSupported","msaaSupported","globeHeight","getCompressedTextureFormatSupported","hasLogDepthDerivedCommands","hasHdrCommands","hasDerivedCommands","needsLogDepthDerivedCommands","needsHdrCommands","needsDerivedCommands","needsUpdateForMetadataPicking","oldPickedMetadataInfo","newPickedMetadataInfo","pickedMetadataInfoChanged","createCastDerivedCommand","renderTilesetPassState","preloadTilesetPassState","preloadFlightTilesetPassState","requestRenderModeDeferCheckPassState","scratchOccluderBoundingSphere","scratchOccluder","getOccluder","_terrainExaggerationChanged","_terrainExaggeration","_terrainExaggerationRelativeHeight","transformFrom2D","executeCommand","executeIdCommand","backToFront","scratchCart3","distanceSquaredToCenter","backToFrontSplats","boxA","frontToBack","executeTranslucentCommandsBackToFront","executeTranslucentCommandsFrontToBack","performVoxelsPass","performGaussianSplatPass","performTranslucentPass","executeTranslucentCommands","obtainTranslucentCommandExecutionFunction","performTranslucent3DTilesClassification","translucentTileClassification","executeClassificationCommands","performCesium3DTileEdgesPass","edgeFramebuffer","commandCount","createWorkingFrustum","sceneFramebuffer","panoramaCommand","renderEnvironment","clearClassificationStencil","depthPlane","performPass","passId","performIdPass","opaqueClassificationFramebuffer","getIdFramebuffer","executeComputeCommands","insertShadowCastCommands","shadowMapCullingVolume","isPointLight","numberOfPasses","shadowedPasses","wasVisible","cascadeVolume","executeShadowMapCastCommands","castCommands","scratchEyeTranslation","depthFramebuffer","updateAndClearFramebuffers","updateAndRenderPrimitives","createPotentiallyVisibleSet","savedCamera","eyeTranslation","executeWebVRCommands","executeCommandsInViewport","originalViewport","scratch2DViewport","maxCartographic","scratch2DViewportCartographic","maxCoord","scratch2DViewportMaxCoord","scratch2DViewportSavedPosition","scratch2DViewportCameraTransform","scratch2DViewportTransform","eyePoint","scratch2DViewportEyePoint","scratch2DViewportWindowCoords","viewportX","viewportWidth","execute2DViewportCommands","firstViewport","scratchCullingVolume","updateDebugFrustumPlanes","fromLightSource","updateShadowMaps","getMaxPrimitiveHeight","subHeight","renderPass","offscreenPass","setDynamicLighting","fromGlobeFlags","sunCommands","envMaps","idFramebuffer","hasTranslucentDepth","inputFramebuffer","ignore3dTiles","ignoreTerrain","maxPrimitiveHeight","updateHeightScratchCartographic","callbackWrapper","clampedCartographic","terrainRemoveCallback","tilesetRemoveCallbacks","createPrimitiveEventListener","tilesetRemoveCallback","removeAddedListener","removeRemovedListener","getGlobeHeight","updatedCartographic","cameraController","onMap","isCameraUnderground","scratchBackgroundColor","executeOverlayCommands","tryAndCatchError","functionToExecute","updatePreloadPass","updatePreloadFlightPass","updateRequestRenderModeDeferCheckPass","cameraChanged","checkForCameraUpdates","shouldRender","performanceContainer","performanceDisplay","_performanceContainer","updateDebugShowFramesPerSecond","functionsCpy","callAfterRenderFunctions","forceRender","pickedObject","voxelPrimitive","voxelCoordinate","keyframeNode","_traversal","findKeyframeNode","fromKeyframeNode","pickMetadataSchema","cartesianToCanvasCoordinates","setTerrain","_debugSphere","SceneFramebuffer","_idFramebuffer","_idClearColor","SceneTransforms","actualPositionScratch","positionCC","scratchWindowCoord0","scratchWindowCoord1","scratchEyeOffset","worldToClip","zEyeOffset","scratchMaxCartographic","scratchProjectedCartesian","scratchCameraPosition","cameraCentered","clipToGLWindowCoordinates","worldToDrawingBufferCoordinates","positionInCartographic","positionNDC","viewportTransform","scratchNDC","scratchWorldCoords","log2Depth","ndc","worldCoords","SceneTransitioner","_currentTweens","_morphHandler","_morphCancelled","_completeMorph","_morphToOrthographic","_previousMode","transitioner","startPos","scratchCVTo2DStartPos","startDir","scratchCVTo2DStartDir","scratchCVTo2DStartUp","endDir","scratchCVTo2DEndDir","scratchCVTo2DEndUp","endPos","scratchCVTo2DEndPos","scratchCVTo2DRay","pickPos","scratchCVTo2DPickPos","scratchCVTo2DFrustum","camera2D","scratchCVTo2DCamera","complete2DCallback","createMorphHandler","columbusViewMorph","morphPerspectiveToOrthographic","morphFromColumbusViewTo2D","scratch3DTo2DCamera","scratch3DTo2DCartographic","scratch3DTo2DRay","rayDirection","scratch3DTo2DSurfacePoint","scratch3DTo2DToENU","pickedPos","scratch3DTo2DPickPosition","endCamera","scratch3DTo2DEndCamera","morphFrom3DToColumbusView","morphFrom3DTo2D","scratchToCVPosition","scratchToCVDirection","scratchToCVUp","scratchToCVPosition2D","scratchToCVDirection2D","scratchToCVUp2D","scratchToCVSurfacePosition","scratchToCVCartographic","scratchToCVToENU","scratchToCVFrustumPerspective","scratchToCVFrustumOrthographic","scratchToCVCamera","cameraCV","destroyMorphHandler","_previousModeMode","wasMorphing","completeColumbusViewCallback","scratch3DToCVEndPos","scratch3DToCVEndDir","scratch3DToCVEndUp","morph","scratch3DToCVStartPos","scratch3DToCVStartDir","scratch3DToCVStartUp","morphOrthographicToPerspective","morphFrom2DToColumbusView","scratchCVTo3DCamera","scratch2DTo3DFrustumPersp","completeMorphFunction","camera3D","getColumbusViewTo3DCamera","scratch2DTo3DFrustumOrtho","complete3DCallback","morphFromColumbusViewTo3D","morphFrom2DTo3D","scratchCVTo3DCartographic","scratchCVTo3DSurfacePoint","scratchCVTo3DFromENU","scratchCVTo3DStartPos","scratchCVTo3DStartDir","scratchCVTo3DStartUp","scratchCVTo3DEndPos","scratchCVTo3DEndDir","scratchCVTo3DEndUp","addMorphTimeAnimations","startFOV","endFOV","startValue","stopValue","ScreenSpaceCameraController","enableTranslate","enableZoom","enableRotate","enableTilt","enableLook","inertiaSpin","inertiaTranslate","inertiaZoom","maximumMovementRatio","bounceAnimationTime","zoomFactor","translateEventTypes","zoomEventTypes","rotateEventTypes","tiltEventTypes","lookEventTypes","minimumPickingTerrainHeight","_minimumPickingTerrainHeight","minimumPickingTerrainDistanceWithInertia","minimumCollisionTerrainHeight","_minimumCollisionTerrainHeight","minimumTrackBallHeight","_minimumTrackBallHeight","enableCollisionDetection","maximumTiltAngle","_lastGlobeHeight","_aggregator","_lastInertiaSpinMovement","_lastInertiaZoomMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement","_inertiaDisablers","_tween","_horizontalRotationAxis","_tiltCenterMousePosition","_tiltCenter","_rotateMousePosition","_rotateStartPosition","_strafeStartPosition","_strafeMousePosition","_strafeEndMousePosition","_zoomMouseStart","_zoomWorldPosition","_useZoomWorldPosition","_panLastMousePosition","_panLastWorldPosition","_tiltCVOffMap","_looking","_rotating","_strafing","_zoomingOnVector","_zoomingUnderground","_rotatingZoom","_adjustedHeightForTerrain","_rotateFactor","_rotateRateRangeAdjustment","_maximumRotateRate","_minimumRotateRate","_minimumZoomRate","_maximumZoomRate","_minimumUndergroundPickDistance","_maximumUndergroundPickDistance","maintainInertia","decayCoef","lastMovementName","movementState","motion","inertiaEnabled","decay","activateInertia","inertiaStateName","inertiasToDisable","scratchEventTypeArray","reactToInput","eventTypes","inertiaConstant","scratchZoomPickRay","scratchPickCartesian","scratchZoomOffset","scratchZoomDirection","scratchCenterPixel","scratchCenterPosition","scratchPickNormal","scratchZoomAxis","scratchCameraPositionNormal","scratchTargetNormal","scratchCameraUpNormal","scratchCameraRightNormal","scratchForwardNormal","scratchPositionToTarget","scratchPositionToTargetNormal","scratchPan","scratchCenterMovement","scratchCartesianTwo","scratchCartesianThree","scratchZoomViewOptions","handleZoom","distanceMeasure","unitPositionDotDirection","percentage","zoomRate","rangeWindowRatio","sameStartPosition","zoomingOnVector","rotatingZoom","zoomOnVector","worldPosition","savedX","cameraPositionNormal","centerPixel","targetNormal","positionToTarget","positionToTargetNormal","alphaDot","cameraDistance","targetDistance","remainingDistance","positionToTargetDistance","pMid","cMid","pickedNormal","zoomMouseStart","translate2DStart","translate2DEnd","scratchTranslateP0","translate2D","twist2DStart","twist2DEnd","twist2D","rotateRate","phiWindowRatio","deltaPhi","singleAxisTwist2D","startTheta","endTheta","pickGlobeScratchRay","scratchDistanceCartographic","getDistanceFromSurface","getZoomDistanceUnderground","distanceFromSurface","getTiltCenterUnderground","getStrafeStartPositionUnderground","scratchInertialDelta","continueStrafing","originalEndPosition","inertialDelta","strafe","translateCVStartRay","translateCVEndRay","translateCVStartPos","translateCVEndPos","translateCVDifference","translateCVOrigin","translateCVPlane","translateCVStartMouse","translateCVEndMouse","translateCV","_translateMousePosition","look3D","startMouse","endMouse","startRay","globePos","startPlanePos","endRay","endPlanePos","rotateCVWindowPos","rotateCVWindowRay","rotateCVCenter","rotateCVVerticalCenter","rotateCVTransform","rotateCVVerticalTransform","rotateCVOrigin","rotateCVPlane","rotateCVCartesian3","rotateCVCart","rotateCVOldTransform","rotateCVQuaternion","rotateCVMatrix","tilt3DCartesian3","rotateCV","normalDotDirection","oldGlobe","oldEllipsoid","rotate3D","rotateCVOnPlane","verticalCenter","verticalTransform","movementDelta","oldConstrainedAxis","adjustHeightForTerrain","magSqrd","rotateCVOnTerrain","zoomCVWindowPos","zoomCVWindowRay","zoomCVIntersection","zoomCV","distanceUnderground","scratchStrafeRay","scratchStrafePlane","scratchStrafeIntersection","scratchStrafeDirection","strafeStartPosition","spin3DPick","scratchLookUp","scratchMousePosition","spin3D","pan3D","mousePos","strafing","rotateOnlyVertical","rotateOnlyHorizontal","oldAxis","thetaWindowRatio","pan3DP0","pan3DP1","pan3DTemp0","pan3DTemp1","pan3DTemp2","pan3DTemp3","pan3DStartMousePosition","pan3DEndMousePosition","pan3DDiffMousePosition","pan3DPixelDimensions","panRay","startMousePosition","endMousePosition","toCenterProj","distanceToNearPlane","pixelDimensions","dragDelta","endPickDirection","endPickProj","basis0","basis1","basis2","startRho","startDot","startRej","endRho","endDot","endRej","startPhi","endPhi","side0","side1","zoom3DUnitPosition","zoom3DCartographic","preIntersectionDistance","inertiaMovement","approachingCollision","unitPosition","tilt3DWindowPos","tilt3DRay","tilt3DCenter","tilt3DVerticalCenter","tilt3DTransform","tilt3DVerticalTransform","tilt3DOldTransform","tilt3DQuaternion","tilt3DMatrix","tilt3DCart","tilt3DLookUp","tilt3D","_tiltOnEllipsoid","tilt3DOnEllipsoidCartographic","grazingAltitudeCart","tilt3DOnEllipsoid","newEllipsoid","tilt3DOnTerrain","look3DStartPos","look3DEndPos","look3DStartRay","look3DEndRay","look3DNegativeRot","look3DTan","horizontalRotationAxis","negativeRotationAxis","scratchAdjustHeightTransform","scratchAdjustHeightCartographic","heightUpdated","percentDifference","scratchPreviousPosition","scratchPreviousDirection","previousDirection","update2D","updateCV","SensorVolumePortionToDisplay","BELOW_ELLIPSOID_HORIZON","ABOVE_ELLIPSOID_HORIZON","ShadowMap","numberOfCascades","_softShadows","softShadows","_normalOffset","normalOffset","darkness","_darkness","fadingEnabled","_outOfView","_outOfViewPrevious","_needsUpdate","polygonOffsetSupported","_polygonOffsetSupported","_terrainBias","polygonOffsetFactor","polygonOffsetUnits","normalOffsetScale","normalShadingSmooth","depthBias","_primitiveBias","_pointBias","_depthAttachment","_colorAttachment","_shadowMapMatrix","_shadowMapTexture","_lightPositionEC","_lightCamera","ShadowMapCamera","_shadowMapCullingVolume","_sceneCamera","_isPointLight","_pointLightRadius","pointLightRadius","_cascadesEnabled","cascadesEnabled","_numberOfCascades","_fitNearFar","_maximumCascadeDistances","_textureSize","_isSpotLight","_cascadeSplits","_cascadeMatrices","_cascadeDistances","_passes","ShadowPass","debugShow","_debugFreezeFrame","_debugCascadeColors","_debugLightFrustum","_debugCameraFrustum","_debugCascadeFrustums","_debugShadowViewCommand","_usesDepthTexture","_primitiveRenderState","_terrainRenderState","_pointRenderState","_clearPassState","textureOffsets","createFramebufferCube","createFramebufferDepth","createFramebufferColor","clearFramebuffer","shadowPass","MAXIMUM_DISTANCE","debugCreateRenderStates","faceViewport","biasX","biasY","debugCascadeColors","debugOutlineColors","screenWidth","screenHeight","shadowMap_texture","shadowMap_textureCube","createDebugShadowViewCommand","updateDebugShadowViewCommand","enterFreezeFrame","createDebugPointLight","viewProjectionMatrix","scaleBiasMatrix","getViewProjection","scratchFrustum","scratchCascadeDistances","scratchLightView","directions","ups","rights","sceneCamera","shadowMapCamera","lightDirection","darknessAmount","frustumRadius","frustumCenter","checkVisibility","updateCameras","checkFramebuffer","computeOmnidirectional","lightDir","lightUp","lightRight","lightPosition","lightView","cameraToLight","fitShadowMapToScene","cameraNear","cameraFar","clampCascadeDistances","cascadeDistances","logScale","shadowFrustum","cascadeSubFrustum","shadowViewProjection","shadowMapMatrix","cascadeCamera","cascadeMatrix","computeCascades","scratchTexelStepSize","combineUniforms","isTerrain","mapUniforms","shadowMap_matrix","shadowMap_cascadeSplits","shadowMap_cascadeMatrices","shadowMap_lightDirectionEC","shadowMap_lightPositionEC","shadowMap_cascadeDistances","shadowMap_texelSizeDepthBiasAndNormalShadingSmooth","texelStepSize","combinedUniforms1","shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness","combinedUniforms2","oldShaderId","castShader","castRenderState","castUniformMap","isOpaque","usesDepthTexture","getShadowCastShaderKeyword","castVS","createShadowCastVertexShader","castFS","createShadowCastFragmentShader","lightShadowMapsEnabled","hasTerrainNormal","receiveShader","receiveUniformMap","castShadowsDirty","receiveShaderCastShadows","shaderDirty","receiveShaderProgramId","getShadowReceiveShaderKeyword","receiveVS","createShadowReceiveVertexShader","receiveFS","createShadowReceiveFragmentShader","castShaderProgramId","shadowMapLength","ShadowMapShader","positionVaryingName","hasPositionVarying","shadowVS","normalVaryingName","hasNormalVarying","isSpotLight","hasCascades","returnPositionEC","ShadowMode","CAST_ONLY","ShadowVolumeAppearance","extentsCulling","_projectionExtentDefines","eastMostYhighDefine","eastMostYlowDefine","westMostYhighDefine","westMostYlowDefine","colorShaderDependencies","ShaderDependencies","requiresTextureCoordinates","requiresEC","pickShaderDependencies","requiresNormalEC","normalEC","positionToEyeEC","tangentToEyeMatrix","_colorShaderDependencies","_pickShaderDependencies","_extentsCulling","_planarExtents","columbusView2D","requiresWC","materialSource","createShadowVolumeAppearanceVS","longitudeExtentsCartesianScratch","longitudeExtentsCartographicScratch","longitudeExtentsEncodeScratch","shaderDependencies","projectionExtentDefines","allDefines","eastMostCartographic","eastMostCartesian","westMostCartographic","westMostCartesian","_requiresEC","_requiresWC","_requiresNormalEC","_requiresTextureCoordinates","_usesNormalEC","_usesPositionToEyeEC","_usesTangentToEyeMat","_usesSt","pointLineDistance","addTextureCoordinateRotationAttributes","uMaxVmax","inverseExtentX","inverseExtentY","uvMinAndExtents","cornerScratch","northWestScratch","southEastScratch","highLowScratch","add2DTextureCoordinateAttributes","southWestCorner","valuesHigh","valuesLow","planes2D_HIGH","planes2D_LOW","enuMatrixScratch","inverseEnuScratch","rectanglePointCartesianScratch","pointsCartographicScratch","eastwardScratch","northwardScratch","eastward","northward","southWestCornerResult","eastVectorResult","northVectorResult","enuMatrix","inverseEnu","longitudeCenter","latitudeCenter","pointCartesian","southEastCorner","northWestCorner","computeRectangleBounds","southWest_HIGH","southWest_LOW","latLongToSpherical","sphericalScratch","southWestExtents","northEastExtents","sphericalExtents","longitudeRotation","MAX_WIDTH_FOR_PLANAR_EXTENTS","shouldUseSpherical","SingleTileImageryProvider","reportedError","SkyAtmosphere","perFragmentAtmosphere","scaleVector","_scaleMatrix","_spSkyFromSpace","_spSkyFromAtmosphere","_hueSaturationBrightness","lightingEnum","rotationOffsetMatrix","_spSkyAtmosphere","SkyBox","_panorama","getDefaultSkyBoxUrl","createEarthSkyBox","SpatialNode","voxelDimensions","keyframeNodes","renderableKeyframeNodes","renderableKeyframeNodeLerp","renderableKeyframeNodePrevious","renderableKeyframeNodeNext","approximateVoxelSize","visitedFrameNumber","scratchObbHalfScale","computeOrientedBoundingBoxForTile","halfScale","constructChildNodes","childCoords","visibilityPlaneMask","computeScreenSpaceError","screenSpaceErrorMultiplier","scratchBinarySearchKeyframeNode","findKeyframeIndex","getKeyframeIndexPrev","targetKeyframe","keyframeIndex","getWeightedKeyframeDistance","levelDistance","keyframeDistance","computeSurroundingRenderableKeyframeNodes","keyframeLocation","startLevel","targetKeyframePrev","targetKeyframeNext","bestKeyframeNodePrev","bestKeyframeNodeNext","minimumDistancePrev","minimumDistanceNext","indexPrev","keyframeNodePrev","keyframeNodeNext","distancePrev","weightedDistancePrev","distanceNext","weightedDistanceNext","bestKeyframePrev","bestKeyframeNext","isVisited","createKeyframeNode","destroyKeyframeNode","megatextures","renderableKeyframeNodeIndex","addKeyframeNodeToMegatextures","megatexture","isRenderable","SpecularEnvironmentCubeMap","_cubeMapBuffers","_maximumMipmapLevel","cleanupResources","cubeMapBuffers","faceSize","expectedMipLevels","dummyMipLevel","SphereEmitter","Splitter","czm_splitDirection","StencilConstants","StencilFunction","StencilOperation","INCREMENT","DECREMENT","StructuralMetadata","_propertyTableCount","_propertyTables","_propertyTextures","_propertyAttributes","getPropertyTable","getPropertyTexture","propertyTextureId","getPropertyAttribute","propertyAttributeId","StyleExpression","Sun","_drawingBufferWidth","_drawingBufferHeight","_radiusTS","glowFactor","_glowFactorDirty","u_size","_glowFactor","scratchPositionWC","scratchLimbWC","scratchPositionEC","_glowLengthTS","u_radiusTS","sunPosition","sunPositionCV","boundingVolume2D","SOLAR_RADIUS","projMatrix","limbCC","limbWC","SunPostProcess","_sceneFramebuffer","brightPass","avgLuminance","_delta","_sigma","_blurStep","_uCenter","_uRadius","colorTexture2","sunPositionECScratch","sunPositionWCScratch","sizeScratch","postProcessMatrix4Scratch","sunPositionEC","sunSize","firstStage","downSampleWidth","downSampleHeight","downSampleViewport","updateSunPosition","Terrain","terrainProviderPromise","fromWorldTerrain","fromWorldBathymetry","TerrainFillMesh","frameLastUpdated","westMeshes","westTiles","southMeshes","southTiles","eastMeshes","eastTiles","northMeshes","northTiles","southwestMesh","southwestTile","southeastMesh","southeastTile","northwestMesh","northwestTile","northeastMesh","northeastTile","changedThisFrame","visitedFrame","enqueuedFrame","createFillMesh","_destroyVertexArray","traversalQueueScratch","visitRenderedTiles","startTile","currentFrameNumber","tileEdge","downOnly","traversalQueue","wasKicked","destinationTile","destinationSurfaceTile","destinationFill","sourceMesh","sourceFill","edgeMeshes","edgeTiles","existingTile","existingRectangle","propagateEdge","renderedTiles","lastSelectionFrameNumber","renderedTile","tileToWest","tileToSouth","tileToEast","tileToNorth","tileToNorthwest","tileToSouthwest","tileToNortheast","tileToSoutheast","centerCartographicScratch","cartesianScratch","octEncodedNormalScratch","uvScratch2","uvScratch","HeightAndNormal","encodedNormal","fillMissingCorner","adjacentCorner1","adjacentCorner2","getVertexWithHeightAtCorner","heightRangeScratch","swVertexScratch","seVertexScratch","nwVertexScratch","neVertexScratch","heightmapBuffer","scratchCreateMeshSyncOptions","getCorner","swCorner","seCorner","neCorner","minCutThroughRadius","maxTileWidth","createMeshSyncOptions","maxVertexCount","northwestIndex","addVertexWithComputedPosition","addEdge","southwestIndex","southeastIndex","northeastIndex","centerWebMercatorT","centerEncodedNormal","indexDataBytes","indexOut","waterSourceTile","sourceRectangleScratch","transformTextureCoordinates","targetTile","targetRectangle","sourceWidth","umin","umax","sourceHeight","vmin","vmax","encodedNormalScratch","getVertexFromTileAtCorner","sourceEncoding","sourceVertices","encodedNormalScratch2","cartesianScratch2","terrainFillMesh","cornerTile","cornerMesh","previousEdgeTiles","previousEdgeMeshes","nextEdgeTiles","nextEdgeMeshes","getCornerFromEdge","meshIsUsable","getClosestHeightToCorner","previousMeshes","previousTiles","nextMeshes","nextTiles","getNearestHeightOnEdge","height2","addEdgeMesh","edgeTile","edgeMesh","lastU","lastV","compareU","targetStride","uOrV","nearlyEdgeU","nearlyEdgeV","meshStart","meshEnd","meshStep","edgeVertices","vertexIndexIndex","targetUv","textureCoordinate","interpolateU","previousUv","nextUv","encodedNormal1","encodedNormal2","normal1","normal2","getInterpolatedVertexAtCorner","TileBoundingRegion","southwestCornerCartesian","northeastCornerCartesian","westNormal","southNormal","eastNormal","northNormal","tileBB","westernMidpointCartesian","westernMidpointScratch","westNormalScratch","easternMidpointCartesian","easternMidpointScratch","westVector","eastWestNormal","eastWestNormalScratch","southSurfaceNormal","southCenterCartesian","rayScratch","westPlane","planeScratch","northSurfaceNormal","northCenterCartesian","eastPlane","computeBox","southwestCornerScratch","northeastCornerScratch","negativeUnitY","negativeUnitZ","vectorScratch","regionResult","cameraCartesianPosition","cameraCartographicPosition","vectorFromSouthwestCorner","distanceToWestPlane","distanceToSouthPlane","vectorFromNortheastCorner","distanceToEastPlane","distanceToNorthPlane","distanceAboveTop","distanceBelowBottom","distanceToCameraRegion","obbResult","TileBoundingS2Cell","boundingPlanes","centerPoint","centerSurfaceNormal","centerGeodeticNormalScratch","topCartographic","topCartographicScratch","topScratch","topPlane","maxDistance","vertexCartographicScratch","vertexScratch","bottomPlane","adjacentVertex","vertexGeodeticNormalScratch","sideScratch","sideNormal","sideNormalScratch","computeBoundingPlanes","_boundingPlanes","computeIntersection","_edgeNormals","computeEdgeNormals","_planeVertices","n0Scratch","n1Scratch","n2Scratch","x0Scratch","x1Scratch","x2Scratch","t0Scratch","t1Scratch","t2Scratch","f0Scratch","f1Scratch","f2Scratch","matrixScratch","edgeScratch","edgeNormalScratch","edgeNormals","facePointScratch","selectedPlaneIndices","sidePlaneIndex","facePoint","selectedPlane","closestPointPolygon","closestPointLineSegment","minimumDistance","pL0Scratch","pL0","dMag","edgePlaneScratch","closestPoint","closestPointOnEdge","edgePlane","plusCount","negCount","topPlanePolygon","topPlaneGeometry","topPlaneInstance","bottomPlanePolygon","bottomPlaneGeometry","bottomPlaneInstance","sideInstances","sidePlanePolygon","sidePlaneGeometry","TileBoundingSphere","TileBoundingVolume","TileCoordinatesImageryProvider","TileDiscardPolicy","TileImagery","closestAncestorThatNeedsLoading","TileMapServiceImageryProvider","confineRectangleToTilingScheme","calculateSafeMinimumDetailLevel","tmsResource","xmlResource","_metadataSuccess","_metadataFailure","tileFormatRegex","tileSetRegex","tileSetsRegex","bboxRegex","tilesetsList","tileSetNodes","tilingSchemeName","swXY","neXY","flipXY","isGdal2tiles","TileMetadata","scratchU","scratchV","computeMissingVector","findOrthogonalVector","checkHalfAxes","uZero","vZero","wZero","TileOrientedBoundingBox","TileReplacementQueue","_lastBeforeStartOfFrame","tileReplacementQueue","maximumTiles","tileToTrim","keepTrimming","TileSelectionResult","RENDERED_AND_KICKED","REFINED_AND_KICKED","UPSAMPLED_ONLY","Tileset3DTileContent","TilesetMetadata","TimeDynamicImagery","requestImageFunction","_tileCache","_tilesRequestedForInterval","_requestImageFunction","_reloadFunction","_currentIntervalIndex","_clockOnTick","getApproachingInterval","isAnimating","addToCache","tileCache","intervalTileCache","keyElements","getKeyElements","currentInterval","getFromCache","checkApproachingInterval","tilesRequestedForInterval","approachingInterval","currentIntervalIndex","currentCache","tilesRequested","TimeDynamicPointCloud","maximumMemoryUsage","shading","frameFailed","frameChanged","_totalMemoryUsageInBytes","_previousInterval","_nextInterval","_lastRenderedFrame","_clockMultiplier","_runningSum","_runningLength","_runningIndex","_runningSamples","_runningAverage","getFragmentShaderLoaded","getPickIdLoaded","_getAverageLoadTime","getClockMultiplier","getIntervalIndex","handleFrameFailure","defaultShading","renderFrame","updateState","getMaximumAttenuation","touchedFrameNumber","loadFrame","transformArray","requestFrame","loadTime","updateAverageLoadTime","prepareFrame","unloadFrames","unloadCondition","updateInterval","framesLength","setFramesDirty","previousInterval","nextInterval","getCurrentInterval","clockMultiplierChanged","clockMultiplier","clockPaused","reachedInterval","averageLoadTime","getNextInterval","getNearestReadyInterval","getFrame","getUnloadCondition","Tonemapper","ACES","validateTonemapper","TranslucentTileClassification","_drawClassificationFBO","_accumulationFBO","_packFBO","_opaqueDepthStencilTexture","_textureToComposite","_translucentDepthStencilTexture","_packDepthCommand","_accumulateCommand","_copyCommand","_clearDepthStencilCommand","_supported","_rsDepth","_rsAccumulate","_rsComp","_hasTranslucentDepth","_frustumsDrawn","transpClass","globeDepthStencilTexture","u_opaqueDepthTexture","u_translucentDepthTexture","compositeCommand","compositeProgram","compositePickProgram","compositePickCommand","swapGlobeDepth","Tween","tweenjs","_tweenjs","_startObject","_stopObject","_easingFunction","needsStart","TweenCollection","delayInSeconds","onUpdate","addAlpha","addOffsetIncrement","templateRegex","padWithZerosIfNecessary","_subdomains","reverseX","reverseY","reverseZ","westDegrees","computeDegrees","degreesScratch","southDegrees","eastDegrees","northDegrees","westProjected","computeProjected","projectedScratch","southProjected","eastProjected","northProjected","pickFeaturesTags","computeIJ","ijScratch","reverseI","reverseJ","longitudeDegrees","latitudeDegrees","longitudeProjected","computeLongitudeLatitudeProjected","longitudeLatitudeProjectedScratch","latitudeProjected","UrlTemplateImageryProvider","pickFeaturesResource","pickFeaturesUrl","_urlSchemeZeroPadding","urlSchemeZeroPadding","_getFeatureInfoFormats","getFeatureInfoFormats","_pickFeaturesResource","_hasAlphaChannel","customTags","allTags","allPickFeaturesTags","_tags","_pickFeaturesTags","degreesScratchComputed","projectedScratchComputed","handleResponse","ijScratchComputed","longitudeLatitudeProjectedScratchComputed","buildPickFeaturesResource","paddingTemplate","paddingTemplateWidth","Vector3DTileClampedPolylines","_widths","_counts","counts","_batchIds","_transferrableBatchIds","_packedBuffer","_minimumMaximumVectorHeights","_keepDecodedPositions","keepDecodedPositions","_decodedPositions","_decodedPositionOffsets","_startEllipsoidNormals","_endEllipsoidNormals","_startPositionAndHeights","_startFaceNormalAndVertexCornerIds","_endPositionAndHeights","_endFaceNormalAndHalfWidths","_vertexBatchIds","_trianglesLength","createVerticesTaskProcessor","startEllipsoidNormal","endEllipsoidNormal","startPositionAndHeight","endPositionAndHeight","startFaceNormalAndVertexCorner","endFaceNormalAndHalfWidth","clearStyle","minimumMaximumVectorHeights","updateMinimumMaximumHeights","packedBuffer","packBuffer","transferrableObjects","decodedPositionOffsets","startEllipsoidNormals","endEllipsoidNormals","startPositionAndHeights","startFaceNormalAndVertexCornerIds","endPositionAndHeights","endFaceNormalAndHalfWidths","vertexBatchIds","batchIdAttribute","startEllipsoidNormalsBuffer","endEllipsoidNormalsBuffer","startPositionAndHeightsBuffer","endPositionAndHeightsBuffer","startFaceNormalAndVertexCornerIdsBuffer","endFaceNormalAndHalfWidthsBuffer","batchIdAttributeBuffer","finishVertexArray","u_minimumMaximumVectorHeights","_rs3DTiles","Vector3DTileContent","indicesByteLength","polylinePositionByteLength","pointsPositionByteLength","numberOfPolygons","POLYGONS_LENGTH","numberOfPolylines","POLYLINES_LENGTH","POINTS_LENGTH","polygonBatchIds","polylineBatchIds","pointBatchIds","POLYGON_BATCH_IDS","polygonBatchIdsByteOffset","POLYLINE_BATCH_IDS","polylineBatchIdsByteOffset","POINT_BATCH_IDS","pointBatchIdsByteOffset","polygonCounts","polygonIndexCounts","numPolygonPositions","numPolygonIndices","polygonPositions","polygonMinimumHeights","polygonMaximumHeights","POLYGON_MINIMUM_HEIGHTS","POLYGON_MAXIMUM_HEIGHTS","indexCounts","polylineCounts","numPolylinePositions","countsLength","polylineStart","linePositions","examineVectorLines","createPolylines","createFloatingPolylines","createClampedPolylines","pointPositions","Vector3DTileGeometry","_boxes","_boxBatchIds","_cylinders","_cylinderBatchIds","_ellipsoids","_ellipsoidBatchIds","_spheres","_sphereBatchIds","_batchedIndices","_indexOffsets","_indexCounts","_batchTableColors","_verticesPromise","forceRebatch","batchTableColors","_sphere","indicesBytesPerElement","numBVS","bvs","numBatchedIndices","bis","unpackBuffer","indexOffsets","batchedIndices","_pickObject","finishPrimitive","Vector3DTilePoints","scratchColor2","scratchColor3","scratchColor4","scratchColor5","scratchColor6","scratchScaleByDistance","scratchTranslucencyByDistance","scratchDistanceDisplayCondition","scaleByDistanceCart4","translucencyByDistanceCart4","distanceDisplayConditionCart2","createPoints","Vector3DTilePolygons","_batchedPositions","_polygonMinimumHeights","_polygonMaximumHeights","Vector3DTilePolylines","_currentPositions","_nextPositions","_expandAndWidth","currentPosition","polylinesLength","resultCounter","decodedOffset","currentPositions","curPositions","prevPositionBuffer","curPositionBuffer","nextPositionBuffer","expandAndWidthBuffer","idBuffer","Vector3DTilePrimitive","_vaSwap","_rsWireframe","_batchDirty","_pickCommandsDirty","_framesSinceLastRebatch","_updatingAllCommands","_wireframeDirty","_batchIdLookUp","defaultAttributeLocations","copyIndicesCPU","batchIdLookUp","batchedIdsLength","copyIndicesGPU","writeBuffer","compareColors","complexExpressionReg","commandLength","colorExpression","isSimpleStyle","batchedOffset","batchedCount","startIds","endIds","batchIdsLength","pickVS","pickFS","needsRebatch","needToRebatch","colorCounts","newBatchedIndices","rebatchGPU","rebatchCPU","rebatchCommands","stencilDepthDerivedCommand","colorDerivedCommand","_commandsDirty","createColorCommandsIgnoreShow","earlyExit","updateWireframe","queueWireframeCommands","spPick","VertexAttributeSemantic","pntsSemantic","OPACITY","semanticToVariableName","CommandExtent","View","_cameraClone","_cameraStartFired","_cameraMovedTime","_commandExtents","scratchPosition0","scratchPosition1","insertIntoBin","commandExtent","commandsInFrustums","totalCommands","cameraClone","camera0","camera1","maximumPositionComponent","cameraEqual","scratchNearFarInterval","computeList","overlayList","commandExtents","commandExtentCapacity","commandExtentCount","shadowNear","shadowFar","shadowClosestObjectSize","commandNear","commandFar","nearFarInterval","curNear","curFar","updateFrustums","ViewportQuad","_overlayCommand","VoxelBoundsCollection","scratchTransformedNormal","transformPlane","transformedPlane","transformAndPackPlanes","VoxelBoxShape","_boundTransform","DefaultMinBounds","DefaultMaxBounds","_renderMinBounds","_renderMaxBounds","boundPlanes","_renderBoundPlanes","_shaderUniforms","boxEcToXyz","boxLocalToShapeUvScale","boxLocalToShapeUvTranslate","_shaderDefines","BOX_INTERSECTION_INDEX","_shaderMaximumIntersectionsLength","renderBoundPlanes","boundTransform","shaderUniforms","shaderDefines","shaderMaximumIntersectionsLength","scratchClipMinBounds","scratchClipMaxBounds","boundScale","clipMinBounds","clipMaxBounds","renderMinBounds","renderMaxBounds","getBoxChunkObb","intersectionCount","scratchTransformPositionWorldToLocal","updateViewTransforms","transformPositionWorldToLocal","transformDirectionWorldToLocal","rotateViewToWorld","convertLocalToShapeUvSpace","scratchTileMinBounds","scratchTileMaxBounds","sampleSizeScratch","computeOrientedBoundingBoxForSample","tileUv","tileSizeAtLevel","sampleSizeAtLevel","minLerp","maxLerp","scratchBoxScale","minimumBounds","maximumBounds","defaultMinBounds","defaultMaxBounds","localCenter","VoxelCell","_tileIndex","_sampleIndex","voxelCell","metadataMap","getMetadataForSample","paddedDimensions","sliceSize","indexInSlice","yIndex","xIndex","tileCoordinate","tileCoordinateScratch","tileUvScratch","getOrientedBoundingBox","getNames","VoxelContent","fromMetadataArray","totalCount","VoxelCylinderShape","cameraShapePosition","cylinderEcToRadialTangentUp","cylinderRenderRadiusMinMax","cylinderRenderAngleMinMax","cylinderLocalToShapeUvRadius","cylinderLocalToShapeUvAngle","cylinderLocalToShapeUvHeight","cylinderShapeUvAngleRangeOrigin","CYLINDER_HAS_SHAPE_BOUNDS_ANGLE","CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN","CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT","CYLINDER_HAS_RENDER_BOUNDS_ANGLE","CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO","CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF","CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF","CYLINDER_INTERSECTION_INDEX_RADIUS_MAX","CYLINDER_INTERSECTION_INDEX_RADIUS_MIN","CYLINDER_INTERSECTION_INDEX_ANGLE","scratchRenderMinBounds","scratchRenderMaxBounds","scratchCameraPositionLocal","scratchCameraRadialPosition","defaultAngleRange","defaultAngleRangeHalf","epsilonZeroScale","epsilonAngle","getCylinderChunkObb","shapeIsAngleReversed","shapeAngleRange","renderIsAngleReversed","renderAngleRange","renderIsAngleRegular","renderIsAngleFlipped","renderIsAngleRangeZero","renderHasAngle","radiusRange","radialScale","radialOffset","uvMinAngle","uvAngleRangeOrigin","shiftedMinAngle","scratchRotateRtuToLocal","scratchRtuRotation","scratchTransformPositionViewToLocal","cameraPositionLocal","cameraRadialDirection","rotateLocalToRtu","transformPositionViewToWorld","transformPositionViewToLocal","transformDirectionViewToLocal","scratchMinBounds","scratchMaxBounds","scratchTestAngles","scratchTranslationMatrix","scratchScaleMatrix","scratchColumn0","scratchColumn1","scratchColumn2","orthogonal","chunkMinBounds","chunkMaxBounds","radiusStart","radiusEnd","angleStart","angleEnd","heightStart","heightEnd","angleRange","angleMid","testAngles","testAngleCount","extentX","extentY","extentZ","centerZ","localMatrix","globalMatrix","column0","column1","column2","isValidOrientedBoundingBoxTransformation","computeLooseOrientedBoundingBox","VoxelEllipsoidShape","cameraPositionCartographic","ellipsoidEcToEastNorthUp","ellipsoidRadii","eccentricitySquared","evoluteScale","ellipsoidCurvatureAtLatitude","ellipsoidInverseRadiiSquared","ellipsoidRenderLongitudeMinMax","ellipsoidShapeUvLongitudeRangeOrigin","ellipsoidShapeUvLongitudeMinMaxMid","ellipsoidLocalToShapeUvLongitude","ellipsoidLocalToShapeUvLatitude","ellipsoidRenderLatitudeSinMinMax","ellipsoidInverseHeightDifference","clipMinMaxHeight","ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE","ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO","ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF","ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF","ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY","ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY","ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE","ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED","ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF","ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF","ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF","ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF","ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF","ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF","ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE","ELLIPSOID_INTERSECTION_INDEX_LONGITUDE","ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX","ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN","ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX","ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN","scratchActualMinBounds","scratchShapeMinBounds","scratchShapeMaxBounds","scratchShapeOuterExtent","scratchRenderOuterExtent","scratchRenderRectangle","epsilonLongitudeDiscontinuity","epsilonLongitude","epsilonLatitude","epsilonLatitudeFlat","actualMinBounds","shapeMinBounds","shapeMaxBounds","clampedClipMinBounds","clampedClipMaxBounds","shapeOuterExtent","renderOuterExtent","renderRectangle","getEllipsoidChunkObb","defaultLongitudeRange","defaultLongitudeRangeHalf","renderIsLongitudeReversed","renderLongitudeRange","renderIsLongitudeRangeZero","renderIsLongitudeRangeUnderHalf","renderIsLongitudeRangeOverHalf","renderHasLongitude","shapeIsLongitudeReversed","shapeLongitudeRange","shapeHasLongitude","renderIsLatitudeMaxUnderHalf","renderIsLatitudeMaxHalf","renderIsLatitudeMaxOverHalf","renderHasLatitudeMax","renderIsLatitudeMinUnderHalf","renderIsLatitudeMinHalf","renderIsLatitudeMinOverHalf","renderHasLatitudeMin","renderHasLatitude","shapeLatitudeRange","shapeIsLatitudeMaxUnderHalf","shapeIsLatitudeMaxHalf","shapeIsLatitudeMaxOverHalf","shapeHasLatitudeMax","shapeIsLatitudeMinUnderHalf","shapeIsLatitudeMinHalf","shapeIsLatitudeMinOverHalf","shapeHasLatitude","radiiX","radiiZ","axisRatio","uvShapeMinLongitude","uvLongitudeRangeOrigin","shiftedMinLongitude","renderIsMinLongitudeDiscontinuity","renderIsMaxLongitudeDiscontinuity","uvShapeMaxLongitude","uvRenderLongitudeRangeZeroMid","scratchCameraPositionCartographic","cameraWC","rotateEnuToWorld","rotateWorldToView","rotateEnuToView","minLongitudeLerp","maxLongitudeLerp","minLatitudeLerp","maxLatitudeLerp","minHeightLerp","maxHeightLerp","scratchQuadrantPosition","scratchInverseRadii","scratchEllipseTrigs","scratchEllipseGuess","scratchEvolute","scratchEllipseRadii","scratchEllipsePosition","scratchSurfacePointAndRadius","scratchNormal2d","distanceFromZAxis","posEllipse","surfacePointAndRadius","tTrigs","SQRT1_2","evolute","nearestPointAndRadiusOnEllipse","normal2d","heightSign","heightVector","VoxelPrimitive","DefaultProvider","_calculateStatistics","calculateStatistics","_shapeVisible","_inputDimensions","_minBoundsOld","_maxBoundsOld","_minClippingBounds","_minClippingBoundsOld","_maxClippingBounds","_maxClippingBoundsOld","_clippingPlanesEnabled","_modelMatrixOld","DefaultCustomShader","_customShaderCompilationEvent","_shaderDirty","_drawCommandPick","_transformPositionLocalToWorld","_transformPositionWorldToLocal","_transformPlaneLocalToView","_transformDirectionWorldToLocal","_levelBlendFactor","_stepSizeMultiplier","_depthTest","_debugPolylines","_debugDraw","_disableRender","_disableUpdate","octreeInternalNodeTexture","octreeInternalNodeTilesPerRow","octreeInternalNodeTexelSizeUv","octreeLeafNodeTexture","octreeLeafNodeTilesPerRow","octreeLeafNodeTexelSizeUv","megatextureTextures","megatextureTileCounts","inputDimensions","cameraDirectionLocal","cameraTileCoordinates","cameraTileUv","ndcSpaceAxisAlignedBoundingBox","renderBoundPlanesTexture","_shapeDefinesOld","shapeType","getMinBounds","getMaxBounds","minClippingBounds","maxClippingBounds","checkTransformAndBounds","ShapeConstructor","getShapeConstructor","updateShapeAndTransforms","disableUpdate","debugDraw","levelBlendFactor","oldCustomShaderUniformMap","customShaderCompilationEvent","scratchIntersect","scratchNdcAabb","scratchTransformPositionLocalToWorld","scratchTransformPositionLocalToProjection","scratchCameraPositionShapeUv","scratchCameraTileCoordinates","shapeUniforms","inputDimensionsY","keyframeCount","internalNodeTexture","internalNodeTexelSizeUv","internalNodeTilesPerRow","setTraversalUniforms","initFromProvider","shapeDirty","shapeDefinesChanged","checkShapeDefines","timeIntervalCollection","timeIntervalIndex","getKeyframeLocation","sampleCountOld","_sampleCount","makePolylineLineSegment","makePolylineBox","drawTile","polylineXAxis","polylineYAxis","polylineZAxis","clippingPlanesChanged","leafNodeTexture","leafNodeTexelSizeUv","leafNodeTilesPerRow","transformPositionWorldToProjection","ndcAabb","worldToProjection","transformPositionLocalToWorld","transformPositionLocalToProjection","cornerIndex","ndcMinX","ndcMaxX","ndcMinY","ndcMaxY","cornersClipSpace","scratchCornersClipSpace","ndcX","ndcY","neighborPosition","vertexNeighborIndices","distanceToPlaneFromPosition","intersectNdcX","intersectNdcY","orientedBoundingBoxToNdcAabb","transformDirectionViewToWorld","shapeUv","numTiles","getTileCoordinates","updateNearestSampling","updateRenderBoundPlanes","_drawCommandPickVoxel","scratchExaggerationScale","scratchExaggerationCenter","scratchCartographicCenter","updateBound","newBoundKey","oldBoundKey","newBound","oldBound","scratchExaggeratedMinBounds","scratchExaggeratedMaxBounds","scratchExaggeratedMinClippingBounds","scratchExaggeratedMaxClippingBounds","scratchExaggeratedModelMatrix","scratchCompoundModelMatrix","exaggeratedMinBounds","exaggeratedMaxBounds","exaggeratedMinClippingBounds","exaggeratedMaxClippingBounds","exaggeratedModelMatrix","exaggerationScale","initialCenter","intermediateCenter","transformedCenter","centerHeight","exaggeratedHeight","scratchExaggerationTranslation","computeBoxExaggerationTranslation","compoundModelMatrix","drawCommandPick","polylineAxisDistance","DefaultVoxelProvider","VoxelProvider","customShaderUniforms","clippingPlanesLength","renderBoundPlanesLength","shapeDefines","VoxelShape","VoxelShapeType","VoxelTraversal","maximumTextureMemoryByteLength","providerTileCount","_simultaneousRequestCount","_debugPrint","_frameNumber","_priorityQueue","_highPriorityKeyframeNodes","_highPriorityKeyframeNodeCount","_keyframeNodesInMegatexture","_keyframeCount","_keyframeLocation","_binaryTreeKeyframeWeighting","binaryTreeKeyframeWeighting","binaryTreeWeightingRecursive","internalNodeTextureDimensionX","internalNodeTextureDimensionY","recomputeBoundingVolumesRecursive","simultaneousRequestCountMaximum","requestParameters","keyframeNodeSort","validateMetadata","addToQueueRecursive","targetScreenSpaceError","priorityQueue","previousKeyframe","nextKeyframe","ssePriority","hasLoadedKeyframe","keyframePriority","keyframeDifference","maxKeyframeDifference","keyframeFactor","binaryTreeFactor","recomputeBoundingVolumes","pauseUpdate","sampleCount","useLeafNodes","leafNodeTexelCount","leafNodeTextureDimensionX","leafNodeTextureDimensionY","timestamp0","highPriorityKeyframeNodes","highPriorityKeyframeNode","highPriorityKeyframeNodeCount","selectKeyframeNodes","keyframeNodesInMegatextureCount","keyframeNodesInMegatexture","destroyedCount","addedCount","highPriorityKeyframeNodeIndex","addNodeIndex","discardNode","updateKeyframeNodes","timestamp1","targetSse","internalNodeCount","leafNodeCount","internalNodeOctreeData","leafNodeOctreeData","buildOctree","childOctreeIndex","childEntryIndex","parentOctreeIndex","parentEntryIndex","hasRenderableChildren","GpuOctreeFlag","parentKeyframeNode","lodLerp","blended","getLodLerp","levelDifferenceChild","levelDifferenceParent","megatextureIndexChild","megatextureIndexParent","texelsPerTile","tilesPerRow","copyWidth","copyHeight","copyToInternalNodeTexture","timeLerp","previousKeyframeLevelsAbove","nextKeyframeLevelsAbove","previousKeyframeMegatextureIndex","nextKeyframeMegatextureIndex","timeLerpCompressed","copyToLeafNodeTexture","generateOctree","timestamp2","checkEventListeners","loadAndUnloadTimeMs","generateOctreeTimeMs","totalTimeMs","loadStateCount","loadStatesByKeyframe","loadStateByCount","nodeCountTotal","loadStateIndex","keyframeArray","traverseRecursive","loadedKeyframeStatistics","loadStateStatistics","timerStatistics","megatextureLength","includesReverseAxis","excludesReverseAxis","WebMapServiceImageryProvider","_getFeatureInfoUrl","getFeatureInfoUrl","pickFeatureResource","DefaultParameters","GetFeatureInfoDefaultParameters","objectToLowercase","getFeatureInfoParameters","_timeDynamicImagery","pickFeatureParams","query_layers","info_format","DefaultGetFeatureInfoFormats","dynamicIntervalData","timeDynamicImagery","service","defaultParameters","WebMapTileServiceImageryProvider","tileMatrixSetID","bracketMatch","_useKvp","Style","TileMatrixSet","_tileMatrixSetID","_tileMatrixLabels","tileMatrixLabels","tileMatrix","staticDimensions","tilematrix","tilerow","tilecol","tilematrixset","TileMatrix","TileRow","TileCol","getPlaneFunctionBody","pixelWidthString","pixelHeightString","functionBody","shaderBuilderPick","shaderBuilderPickVoxel","shaderProgramPick","shaderProgramPickVoxel","viewportQuadVertexArray","_compoundModelMatrix","drawCommandPickVoxel","computeFlyToLocationForRectangle","positionWithoutTerrain","positionsOnTerrain","_sampleTerrainMostDetailed","heightFound","currentMax","cssOutlineWidth","clearRect","scratchColorAbove","scratchColorBelow","scratchColorBlend","scratchPackedFloat","lerpEntryColor","entryBefore","entryAfter","lerpFactor","createNewEntry","hasPrev","hasNext","sameHeightAsPrev","sameHeightAsNext","sameColorAsPrev","sameColorAsNext","createElevationBandMaterial","layeredEntries","layersLength","entriesOrig","entriesLength","entryOrig","sortedAscending","sortedDescending","currEntry","nextEntry","extendDownwards","extendUpwards","preprocess","entriesAccumNext","entriesAccumCurr","addEntry","addBlendEntry","layerLength","accumIdx","entriesAccumLength","prevEntry","entryAccum","prevEntryAccum","nextEntryAccum","isSplitAccum","isStartAccum","isEndAccum","isSplit","colorBelow","colorAbove","_emptyColor","createLayeredEntries","heightTexBuffer","heightTexDatatype","heightTexFormat","_useFloatTexture","heightsTex","colorsArray","colorsTex","metadataCache","apiOptions","onlyUsingWithGoogleGeocoder","ionAssetId","requestCachedIonTileset","findContentMetadata","contentClass","findTileMetadata","ComponentsPerAttribute","ClassPerType","samplerUniformName","matrixUniformName","styleUniformName","usingFloatTexture","getClippingPlaneFloat","getClippingPlaneUint8","clippingFunctionUnion","clippingFunctionIntersect","primitiveRestartExtension","EXT_mesh_primitive_restart","meshPrimitives","primitiveGroups","firstPrimitiveIndex","thisPrimitive","parseBatchTable","partitionResults","hierarchyExtension","jsonProperties","partitionProperties","transcodedSchema","attributeResults","propertyAttributeProperties","nextPlaceholderId","sanitizedPropertyId","transcodePropertyType","customAttributeName","schemaJson","propertyAttributeJson","transcodedClass","transcodeBinaryPropertiesAsPropertyAttributes","binaryResults","bufferViewsTypedArrays","bufferViewCount","transcodeBinaryProperties","metadataOptions","transcodeToPropertyTexture","featureTexture","oldProperty","sortedIds","createTextureForPropertyTable","numFeatures","gpuCompatiblePropertyBufferViews","bufferViewsForThisTable","createNoDataBufferView","bufferViewLength","numBufferElements","collectGpuCompatiblePropertyBufferViews","numGpuCompatibleProperties","packedBufferView","packPropertyTablePropertiesIntoRGBA8","metadataComponentCount","metadataArrayLength","propertyTableTexture","isBinaryFormat","getJsonContent","voxelTable","getGlslTextureSwizzle","getGlslNumberAsFloat","numberString","getGlslField","attributeLength","hasStatistics","propertyStatisticsStructId","propertyStatisticsStructName","metadataStatisticsStructId","metadataStatisticsStructName","metadataStatisticsFieldName","propertyStructName","propertyFieldName","metadataStructId","metadataStructName","metadataFieldName","attributesStructId","attributesStructName","voxelStructId","voxelStructName","fragmentInputStructId","propertiesStructId","propertiesStructName","propertiesFieldName","glslField","glslTextureSwizzle","czm_degreesPerRadian","czm_depthRange","czm_epsilon1","czm_epsilon2","czm_epsilon3","czm_epsilon4","czm_epsilon5","czm_epsilon6","czm_epsilon7","czm_infinity","czm_oneOverPi","czm_oneOverTwoPi","czm_passCesium3DTile","czm_passCesium3DTileClassification","czm_passCesium3DTileClassificationIgnoreShow","czm_passCesium3DTileEdges","czm_passClassification","czm_passCompute","czm_passEnvironment","czm_passGaussianSplats","czm_passGlobe","czm_passOpaque","czm_passOverlay","czm_passTerrainClassification","czm_passTranslucent","czm_passVoxels","czm_pi","czm_piOverFour","czm_piOverSix","czm_piOverThree","czm_piOverTwo","czm_radiansPerDegree","czm_sceneMode2D","czm_sceneMode3D","czm_sceneModeColumbusView","czm_sceneModeMorphing","czm_solarRadius","czm_threePiOver2","czm_twoPi","czm_webMercatorMaxLatitude","czm_depthRangeStruct","czm_material","czm_materialInput","czm_modelMaterial","czm_modelVertexOutput","czm_ray","czm_raySegment","czm_shadowParameters","czm_HSBToRGB","czm_HSLToRGB","czm_RGBToHSB","czm_RGBToHSL","czm_RGBToXYZ","czm_XYZToRGB","czm_acesTonemapping","czm_alphaWeight","czm_antialias","czm_applyHSBShift","czm_approximateSphericalCoordinates","czm_approximateTanh","czm_backFacing","czm_branchFreeTernary","czm_cascadeColor","czm_cascadeDistance","czm_cascadeMatrix","czm_cascadeWeights","czm_clipPolygons","czm_columbusViewMorph","czm_computeAtmosphereColor","czm_computeGroundAtmosphereScattering","czm_computePosition","czm_computeScattering","czm_cosineAndSine","czm_decodeRGB8","czm_decompressTextureCoordinates","czm_depthClamp","czm_eastNorthUpToEyeCoordinates","czm_ellipsoidContainsPoint","czm_ellipsoidTextureCoordinates","czm_equalsEpsilon","czm_eyeOffset","czm_eyeToWindowCoordinates","czm_fastApproximateAtan","czm_fog","czm_gammaCorrect","czm_geodeticSurfaceNormal","czm_getDefaultMaterial","czm_getDynamicAtmosphereLightDirection","czm_getLambertDiffuse","czm_getSpecular","czm_getWaterNoise","czm_hue","czm_inverseGamma","czm_isEmpty","czm_isFull","czm_latitudeToWebMercatorFraction","czm_lineDistance","czm_linearToSrgb","czm_luminance","czm_maximumComponent","czm_metersPerPixel","czm_modelToWindowCoordinates","czm_multiplyWithColorBalance","czm_nearFarScalar","czm_octDecode","czm_packDepth","czm_pbrLighting","czm_pbrNeutralTonemapping","czm_phong","czm_planeDistance","czm_pointAlongRay","czm_rayEllipsoidIntersectionInterval","czm_raySphereIntersectionInterval","czm_readDepth","czm_readNonPerspective","czm_reverseLogDepth","czm_round","czm_saturation","czm_shadowDepthCompare","czm_shadowVisibility","czm_signNotZero","czm_sphericalHarmonics","czm_srgbToLinear","czm_tangentToEyeSpaceMatrix","czm_textureCube","czm_transformPlane","czm_translateRelativeToEye","czm_translucentPhong","czm_transpose","czm_unpackClippingExtents","czm_unpackDepth","czm_unpackFloat","czm_unpackTexture","czm_unpackUint","czm_valueTransform","czm_vertexLogDepth","czm_windowToEyeCoordinates","czm_writeDepthClamp","czm_writeLogDepth","czm_writeNonPerspective","trackDataSourceClock","dataSourceClock","configurePixelRatio","_useBrowserRecommendedResolution","_resolutionScale","configureCanvasSize","_canvasClientWidth","_canvasClientHeight","_canRender","_lastDevicePixelRatio","configureCameraFrustum","CesiumWidget","blurActiveElement","_supportsImageRenderingPixelated","oncontextmenu","onselectstart","blurActiveElementOnCanvasFocus","innerCreditContainer","showRenderLoopErrors","useBrowserRecommendedResolution","_creditViewport","_innerCreditContainer","_renderLoopRunning","_showRenderLoopErrors","_forceResize","_entityView","_clockTrackedDataSource","_trackedEntity","_needTrackedEntityUpdate","_zoomIsFlight","_zoomTarget","_zoomPromise","_zoomOptions","_trackedEntityChanged","_allowDataSourcesToSuspendAnimation","terrainShadows","baseLayer","_screenSpaceEventHandler","_useDefaultRenderLoop","useDefaultRenderLoop","_targetFrameRate","targetFrameRate","_onRenderError","showErrorPanel","destroyDataSourceCollection","dataSourceDisplay","_dataSourceChangedListeners","_automaticallyTrackDataSourceClocks","automaticallyTrackDataSourceClocks","_destroyDataSourceCollection","_dataSourceDisplay","_canAnimateUpdateCallback","_updateCanAnimate","_clearTrackedObject","dataSourceLength","lastFrameTime","frameTime","startRenderLoop","resolutionScale","allowDataSourcesToSuspendAnimation","trackedEntity","cancelZoom","trackedEntityChanged","clockTrackedDataSource","errorHeader","errorPanelScroller","resizeCallback","hasMessage","hasError","errorMessageDetails","moreDetails","buttonPanel","okButton","_onEntityCollectionChanged","zoomToOrFly","zoomTarget","isFlight","zoomPromise","_completeZoom","rectanglePromise","removeEvent","clearZoom","entityView","removedObject","_onDataSourceChanged","removalFunc","resetClock","numDataSources","zoomTo","zoomOptions","zoomToBoundingSphere","timeDynamicPointCloud","zoomTargetBoundingSphereScratch","updateZoomTarget","trackedEntityBoundingSphereScratch","updateTrackedEntity","workerFunction","responseMessage","onmessageerror","widgetForDrag","gradientEnabledColor0","gradientEnabledColor1","gradientEnabledColor2","gradientEnabledColor3","gradientDisabledColor0","gradientDisabledColor1","gradientKnobColor","gradientPointerColor","getElementColor","svgIconsById","animation_pathReset","animation_pathPause","animation_pathPlay","animation_pathPlayReverse","animation_pathLoop","animation_pathClock","animation_pathWingButton","animation_pathPointer","animation_pathSwooshFX","svgFromObject","svgText","tspan","makeColorStringScratch","makeColorString","gradientAlpha","backgroundAlpha","rectButton","iconInfo","SvgButton","svgElement","viewModel","_viewModel","_toggled","_clickFunction","canExecute","setToggled","setTooltip","setEnabled","_centerX","_centerY","_defsElement","_svgNode","_topG","_lastHeight","_lastWidth","cssStyle","themeEle","_theme","_themeNormal","_themeHover","_themeSelect","_themeDisabled","_themeKnob","_themePointer","_themeSwoosh","_themeSwooshHover","topG","_realtimeSVG","buttonIconInfo","wingIconInfo","wingButton","playRealtimeViewModel","_playReverseSVG","playReverseViewModel","_playForwardSVG","playForwardViewModel","_pauseSVG","pauseViewModel","buttonsG","shuttleRingBackPanel","_shuttleRingBackPanel","swooshIconInfo","shuttleRingPointerIconInfo","shuttleRingSwooshG","_shuttleRingSwooshG","_shuttleRingPointer","knobG","_knobOuter","knobInner","_knobDate","_knobTime","_knobStatus","knobShield","shuttleRingBackG","mouseCallback","shuttleRingDragging","pointerRect","shuttleRingAngle","slower","faster","setShuttleRingFromMouseOrTouch","_mouseCallback","timeNode","dateNode","statusNode","shuttleRingPointer","knobOuter","applyThemeChanges","toggled","parentWidth","parentHeight","baseWidth","baseHeight","buttonNormalBackColor","buttonHoverBackColor","buttonToggledBackColor","buttonDisabledBackColor","knobBackColor","pointerColor","swooshColor","swooshHoverColor","defsElement","stdDeviation","realtimeShuttleRingAngle","numberComparator","getTypicalMultiplierIndex","shuttleRingTicks","AnimationViewModel","clockViewModel","_clockViewModel","_allShuttleRingTicks","_dateFormatter","defaultDateFormatter","_timeFormatter","defaultTimeFormatter","snapToTicks","_sortedFilteredPositiveTicks","setShuttleRingTicks","defaultTicks","timeLabel","dateLabel","multiplierLabel","fastedMultipler","maxv","multiplierToAngle","angleToMultiplier","positiveMultiplier","numDigits","_canAnimate","_isSystemTimeAvailable","systemTime","_isAnimating","pauseCommand","_pauseViewModel","playReverseCommand","_playReverseViewModel","playForwardCommand","_playForwardViewModel","playRealtimeCommand","getObservable","_playRealtimeViewModel","_slower","_faster","gregorianDate","getShuttleRingTicks","positiveTicks","sortedFilteredPositiveTicks","allTicks","dateFormatter","timeFormatter","_maxShuttleRingAngle","_realtimeShuttleRingAngle","BaseLayerPicker","imgElement","dropPanel","imageryTitle","imagerySection","imageryCategories","categoryTitle","imageryChoices","providerIcon","providerLabel","terrainTitle","terrainSection","terrainCategories","terrainCategoryTitle","terrainChoices","terrainProviderIcon","terrainProviderLabel","applyBindings","_dropPanel","_closeDropDown","dropDownVisible","cleanNode","BaseLayerPickerViewModel","imageryProviderViewModels","terrainProviderViewModels","imageryObservable","pureComputed","allCategoryNames","_imageryProviders","terrainObservable","terrainProviders","_terrainProviders","buttonTooltip","selectedImagery","selectedTerrain","imageryTip","terrainTip","buttonImageUrl","iconUrl","selectedImageryViewModel","observable","currentImageryLayersLength","hadExistingBaseLayer","newProviders","creationCommand","newProvidersLength","selectedTerrainViewModel","newProvider","cancelUpdate","removeCancelListener","selectedImageryProviderViewModel","selectedTerrainProviderViewModel","toggleDropDown","ProviderViewModel","creationFunction","_creationCommand","_category","providerViewModels","useRetinaTiles","Cesium3DTilesInspector","createSection","createCheckbox","createRangeInput","tilesetPanelContents","displayPanelContents","updatePanelContents","loggingPanelContents","tileDebugLabelsPanelContents","stylePanelContents","optimizationPanelContents","propertiesLabel","propertiesField","wireframeCheckbox","warningText","pointCloudShadingContainer","edlContainer","sseContainer","dynamicScreenSpaceErrorContainer","pickStatistics","resourceCacheStatistics","stylePanelEditor","blendDropdown","styleEditor","closeStylesBtn","errorBox","skipScreenSpaceErrorFactorContainer","skipLevelsContainer","selectTilesetOnHover","getStatistics","isPick","getResourceCacheStatistics","colorBlendModes","oldColor","Cesium3DTilesInspectorViewModel","_statisticsText","_pickStatisticsText","_resourceCacheStatisticsText","_editorError","showStatistics","showPickStatistics","showResourceCacheStatistics","inspectorVisible","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","tileDebugLabelsVisible","optimizationVisible","styleString","hasEnabledWireframe","_feature","showOnlyPickedTileDebugLabel","picked","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","dynamicScreenSpaceErrorDensitySliderValue","scaledValue","pickTileset","pickActive","_shouldStyle","_definedProperties","_removePostRenderEvent","hasFeatures","statisticsText","pickStatisticsText","resourceCacheStatisticsText","editorError","setting","currentFeature","currentTile","togglePickTileset","toggleInspector","toggleTileset","toggleDisplay","toggleUpdate","toggleLogging","toggleStyle","toggleTileDebugLabels","toggleOptimization","trimTilesCache","compileStyle","styleEditorKeyPress","sender","textArea","selectionStart","selectionEnd","CesiumInspector","generalSection","frustumStatistics","shaderCacheDisplay","depthFrustum","gLabel","gText","gMinusButton","gPlusButton","primSection","pickPrimRequired","pickPrimitiveButton","buttonWrap","_primitiveOnly","pickTileRequired","pickTileButton","nwTile","seTile","tileText","relativeText","tr1","tr2","td1","td2","td3","td4","td5","td6","boundDepthFrustum","proposed","bounded","CesiumInspectorViewModel","eventHandler","_modelMatrixPrimitive","tileBoundariesLayer","newPick","pickPrimitiveActive","selectedTile","tilesRenderedByTextureCount","pickTileActive","frustums","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","filterTile","_numberOfFrustums","suspendUpdates","frustumStatisticText","hasPickedPrimitive","hasPickedTile","generalVisible","primitivesVisible","terrainVisible","depthFrustumText","_toggleGeneral","_togglePrimitives","_toggleTerrain","_frustumsSubscription","_frustumPlanesSubscription","_performanceSubscription","_showPrimitiveBoundingSphere","_primitiveBoundingSphereSubscription","_showPrimitiveReferenceFrame","_primitiveReferenceFrameSubscription","_doFilterPrimitive","_filterPrimitiveSubscription","_wireframeSubscription","_depthFrustumSubscription","_incrementDepthFrustum","_decrementDepthFrustum","_suspendUpdatesSubscription","_showTileCoordinates","_tileCoordinatesSubscription","_tileBoundingSphereSubscription","_showTileBoundingSphere","_doFilterTile","_filterTileSubscription","doFilterTile","_pickPrimitiveActiveSubscription","_pickTile","_pickTileActiveSubscription","showPrimitiveBoundingSphere","showPrimitiveReferenceFrame","doFilterPrimitive","incrementDepthFrustum","decrementDepthFrustum","showTileCoordinates","showTileBoundingSphere","toggleGeneral","togglePrimitives","toggleTerrain","pickTile","selectParent","selectNW","selectNE","selectSW","selectSE","newPrimitive","newTile","frustumStatisticsToString","ClockViewModel","synchronize","equalityComparer","beforeExecute","afterExecute","FullscreenButton","_exitFullScreenPath","_enterFullScreenPath","FullscreenButtonViewModel","tmpIsFullscreen","tmpIsEnabled","isFullscreen","isFullscreenEnabled","_fullscreenElement","Geocoder","_startSearchPath","_stopSearchPath","textBox","_onTextBoxFocus","_textBox","searchButton","searchSuggestionsContainer","suggestionsList","suggestions","_searchSuggestionsContainer","_form","_onInputBegin","_focusTextbox","hideSuggestions","_onInputEnd","showSuggestions","GeocoderViewModel","geocoderServices","_geocoderServices","_viewContainer","_flightDuration","flightDuration","_searchText","_isSearchInProgress","_wasGeocodeCancelled","_previousCredits","_suggestions","_selectedSuggestion","_showSuggestions","_handleArrowDown","handleArrowDown","_handleArrowUp","handleArrowUp","_suggestionsVisible","suggestionsNotEmpty","_searchCommand","activateSuggestion","isSearchInProgress","hasOnlyWhitespace","attemptGeocode","clearCredits","geocoderResults","destinationFound","updateCredit","deselectSuggestion","handleKeyDown","upKey","handleKeyUp","clearSuggestions","handleMouseover","keepExpanded","autoComplete","flyToDestination","searchTextObservable","rateLimit","_suggestionSubscription","_updateSearchSuggestions","_adjustSuggestionsScroll","numberOfSuggestions","geocoderService","selectedSuggestion","finalDestination","positionOnTerrain","computeFlyToLocationForCartographic","newResults","useDefaultCredit","focusedItemIndex","searchResults","getElementsByClassName","HomeButton","_svgPath","HomeButtonViewModel","containerId","i3sProvider","htmlWrapper","defaultLayer","currentLayer","expandItemsHandler","trackSublayer","isFullModel","isOverview","isTopLayer","addTopLayer","topLayers","currentLevel","selectedLevel","expandClickHandler","setOptionDisable","applyBindingsToNode","bsl","handleTopLayerSelector","fullModel","setLevels","InfoBox","infoElement","titleElement","cameraElement","closeElement","_frame","frameDocument","contentDocument","cssLink","frameContent","InfoBoxViewModel","_cameraClicked","_closeClicked","enableCamera","isCameraTracking","showInfo","_loadingIndicatorHtml","cameraIconPath","maxHeightOffset","cameraClicked","closeClicked","InspectorShared","checkedBinding","enableBinding","checkboxContainer","checkboxLabel","checkboxInput","headerText","sectionVisibleBinding","toggleSectionVisibilityBinding","sectionHeader","sectionContent","rangeText","sliderValueBinding","inputValueBinding","buttonText","clickedBinding","activeBinding","NavigationHelpButton","showInsructionsDefault","instructionsInitiallyVisible","showInstructions","instructionContainer","mouseButton","mouseIcon","touchButton","touchIcon","clickInstructions","touchInstructions","_wrapper","_closeInstructions","NavigationHelpButtonViewModel","_showClick","_touch","_showTouch","showClick","showTouch","PerformanceWatchdog","dismissButton","PerformanceWatchdogViewModel","lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage","_dismissMessage","_unsubscribeLowFrameRate","_unsubscribeNominalFrameRate","dismissMessage","ProjectionPicker","_perspectivePath","_orthographicPath","perspectiveButton","orthographicButton","ProjectionPickerViewModel","_orthographic","_flightInProgress","tooltipPerspective","tooltipOrthographic","selectedTooltip","oldMode","newMode","isMorphing","_switchToPerspective","_switchToOrthographic","switchToPerspective","switchToOrthographic","isOrthographicProjection","SceneModePicker","_globePath","_flatMapPath","_columbusViewPath","morphTo3DButton","morphTo2DButton","morphToCVButton","SceneModePickerViewModel","tooltip2D","tooltip3D","tooltipColumbusView","_morphTo2D","_morphTo3D","_morphToColumbusView","SelectionIndicator","pathElement","screenSpacePos","offScreen","SelectionIndicatorViewModel","selectionIndicatorElement","_screenPositionX","_screenPositionY","_selectionIndicatorElement","showSelection","screenPosition","containerWidth","containerHeight","indicatorSize","animateAppear","animateDepart","svgClassName","SvgPathBindingHandler","knockout","bindingHandlers","cesiumSvgPath","valueAccessor","virtualElements","setDomNodeChildren","pathWidth","pathHeight","disposeWhenNodeIsRemoved","controlsDescendantBindings","allowedBindings","deferUpdates","useOnlyNativeEvents","foreachHidesDestroyed","MouseEvents","propertychange","detachEvent","fireEvent","mergeAttributes","includeFields","submitter","submit","cleanExternalData","thead","tfoot","parseHTML","innerShiv","scheduler","zb","resetForTesting","throttleEvaluation","notifySubscribers","notify","ic","trackArrayChanges","destroyAll","sparse","disposeWhen","pure","deferEvaluation","__ko__hasDomDataOptionValue__","specified","unknown","getBindingHandler","valueAccessors","bindingParams","createComment","nodeHasBindings","getComponentNameForNode","getBindings","getBindingsString","parseBindingsString","getBindingAccessors","preprocessNode","bindingContextForDescendants","$data","shouldBindDescendants","textarea","$parents","$root","$rawData","dataDependency","exportDependencies","createChildContext","noChildContext","$parentContext","notifyImmediately","loaders","suppressLoaderExceptions","getConfig","loadComponent","loadTemplate","loadViewModel","$raw","createViewModel","templateNodes","$component","$componentTemplateNodes","koDescendantsComplete","lookupNamespaceURI","uniqueName","checkedValue","__ko__cssValue","foreach","includeDestroyed","afterAdd","beforeRemove","beforeMove","afterMove","templateEngine","hasfocus","__ko_hasfocusUpdating","__ko_hasfocusLastValue","let","opera","textInput","textinput","renderTemplateSource","createJavaScriptEvaluatorBlock","makeTemplateSource","renderTemplate","isTemplateRewritten","allowTemplateRewriting","rewriteTemplate","$index","ifnot","dontLimitMoves","_countWaitingForRemove","koBindingContext","templateOptions","fragments","addTemplate","ko_code","ko_with","OBSERVABLES_PROPERTY","SUBSCRIBABLE_PROPERTY","allObservablesForObject","getAllObservablesForObject","origValue","isObservable","observableArray","isWriteableObservable","watchingArraySubscription","newArrayInstance","arrayInstance","subscribable","notificationPauseSignal","fnName","origMutator","wrapStandardArrayMutators","addKnockoutArrayMutators","getSubscribableForArray","startWatchingArrayInstance","notifyWhenPresentOrFutureArrayValuesMutate","createIfNotDefined","defineComputedProperty","evaluatorOrOptions","valueHasMutated","attachToKo","timelineWheelDelta","timelineTicScales","timelineMonthNames","Timeline","topDiv","timeline","_topDiv","_endJulian","_epochJulian","_lastXPos","_scrubElement","_startJulian","_timeBarSecondsSpan","_scrubJulian","_mainTicSpan","_mouseMode","_touchMode","_touchState","spanX","_mouseX","_timelineDrag","_timelineDragLocation","_timeBarEle","_trackContainer","_trackListEle","_needleEle","_rulerEle","_trackList","_highlightRanges","_onMouseDown","backgroundPosition","_onMouseMove","_onMouseUp","createMouseUpCallback","_setTimeBarTime","dsec","zoomFrom","createMouseMoveCallback","_onMouseWheel","wheelDeltaY","createMouseWheelCallback","_onTouchStart","xPos","createTouchStartCallback","_onTouchMove","newCenter","newSpan","newStartTime","createTouchMoveCallback","_onTouchEnd","createTouchEndCallback","timeBarEle","updateFromClock","twoDigits","useCapture","addHighlightRange","heightInPx","newHighlightRange","addTrack","newTrack","clockStart","clockEnd","clockSpan","_makeTics","startJulian","endJulian","epochJulian","totalSpan","mainTicSpan","centerSec","centerSecFlip","makeLabel","millisecondString","smallestTicInPixels","timeBar","scrubX","tic","tics","minimumDuration","maximumDuration","minSize","timeBarWidth","epsilonTime","getStartTic","ticScale","getNextTic","getAlpha","sampleWidth","origMinSize","highlightRange","mainTic","subTic","tinyTic","idealTic","ticIndex","smallestIndex","ticScaleLen","textWidth","lastTextLeft","ticTime","ticLeap","ticLeft","ticLabel","labelLeft","scrubElement","timeJulian","trackListHeight","TimelineHighlightRange","getBase","getStartTime","getStopTime","setRange","highlightStart","highlightLeft","highlightStop","TimelineTrack","startInterval","stopInterval","spanStart","spanStop","ToggleButtonViewModel","VRButton","vrElement","_exitVRPath","_enterVRPath","unlockScreen","unlockOrientation","mozUnlockOrientation","msUnlockOrientation","unlock","VRButtonViewModel","isVRMode","isVREnabled","isOrthographic","_isOrthographic","_locked","_noSleep","_vrElement","lockOrientation","mozLockOrientation","msLockOrientation","lockScreen","toggleVR","onTimelineScrubfunction","getCesium3DTileFeatureDescription","getCesium3DTileFeatureName","possibleIds","pickEntity","viewer","pickRay","imageryLayerFeaturePromise","loadingMessage","selectedEntity","createNoFeaturesEntity","ecfPosition","pickImageryLayerFeature","scratchStopTime","linkTimelineToDataSourceClock","Viewer","createBaseLayerPicker","baseLayerPicker","viewerContainer","cesiumWidgetContainer","bottomContainer","destroyClockViewModel","cesiumWidget","selectionIndicator","infoBox","selectionIndicatorContainer","infoBoxContainer","infoBoxViewModel","_onInfoBoxCameraClicked","_onInfoBoxClockClicked","toolbar","homeButton","sceneModePicker","projectionPicker","baseLayerPickerDropDown","navigationHelpButton","fullscreenButton","fullscreenSubscription","fullscreenContainer","vrButton","vrSubscription","vrModeSubscription","geocoderContainer","_clearObjects","showNavHelp","hasSeenNavHelp","getItem","setItem","navigationInstructionsInitiallyVisible","animationContainer","timelineContainer","vrContainer","fullScreenElement","_geocoder","_homeButton","_sceneModePicker","_projectionPicker","_baseLayerPicker","_timeline","_fullscreenButton","_infoBox","_selectionIndicator","_vrButton","forceResize","enableVRUI","_baseLayerPickerDropDown","_fullscreenSubscription","_vrSubscription","_vrModeSubscription","_bottomContainer","_cesiumWidget","_destroyClockViewModel","_toolbar","_navigationHelpButton","_enableInfoOrSelection","_selectedEntity","_selectedEntityChanged","selectionIndicatorViewModel","selectedEntityChanged","animationExists","timelineExists","panelMaxHeight","animationWidth","creditLeft","creditBottom","creditRight","lastWidth","timelineStyle","cesium3DTilesInspector","cesiumInspectorContainer","cesiumInspector","dropTarget","handleDrop","createOnLoadCallback","dropError","flyToOnDrop","createDropErrorCallback","dropEnabled","clearOnDrop","_handleDrop","performanceWatchdog","voxelInspector","VoxelInspector","transformPanelContents","clippingPanelContents","shaderPanelContents","makeCoordinateRangeWithDynamicMinMax","shaderPanelEditor","shaderEditor","compileShaderButton","compilationText","maxXTitle","minXTitle","maxYTitle","minYTitle","maxZTitle","minZTitle","maxXVar","minXVar","maxYVar","minYVar","maxZVar","minZVar","allowedShape","parentContainer","createRangeInputWithDynamicMinMax","boundsElement","formatShaderString","firstLineIdx","finalStr","spacesInFrontOfFirstLine","VoxelInspectorViewModel","_voxelPrimitive","_customShaderCompilationRemoveCallback","_getPrimitiveFunctions","_modelMatrixReady","setPrimitiveFunction","getPrimitiveFunction","knock","getBoundSetter","boundKey","shaderString","shapeIsBox","shapeIsEllipsoid","shapeIsCylinder","clippingBoxMaxXMin","clippingBoxMaxXMax","clippingBoxMaxX","clippingBoxMinXMin","clippingBoxMinXMax","clippingBoxMinX","clippingBoxMaxYMin","clippingBoxMaxYMax","clippingBoxMaxY","clippingBoxMinYMin","clippingBoxMinYMax","clippingBoxMinY","clippingBoxMaxZMin","clippingBoxMaxZMax","clippingBoxMaxZ","clippingBoxMinZMin","clippingBoxMinZMax","clippingBoxMinZ","clippingEllipsoidMaxLongitudeMin","clippingEllipsoidMaxLongitudeMax","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitudeMin","clippingEllipsoidMinLongitudeMax","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitudeMin","clippingEllipsoidMaxLatitudeMax","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitudeMin","clippingEllipsoidMinLatitudeMax","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeightMin","clippingEllipsoidMaxHeightMax","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeightMin","clippingEllipsoidMinHeightMax","clippingEllipsoidMinHeight","clippingCylinderMaxRadiusMin","clippingCylinderMaxRadiusMax","clippingCylinderMaxRadius","clippingCylinderMinRadiusMin","clippingCylinderMinRadiusMax","clippingCylinderMinRadius","clippingCylinderMaxAngleMin","clippingCylinderMaxAngleMax","clippingCylinderMaxAngle","clippingCylinderMinAngle","clippingCylinderMaxHeightMin","clippingCylinderMaxHeightMax","clippingCylinderMaxHeight","clippingCylinderMinHeightMin","clippingCylinderMinHeightMax","clippingCylinderMinHeight","setModelMatrix","translationZ","scratchHeadingPitchRoll","angleX","angleY","angleZ","shaderCompilationMessage","shaderCompilationSuccess","toggleTransform","transformVisible","toggleBounds","boundsVisible","toggleClipping","clippingVisible","toggleShader","shaderVisible","shaderEditorKeyPress","commandInfo","observablePropertyName","Easing","generatePow","EPSILON","Group","_tweensAddedDuringUpdate","getAll","tweenId","tweens_1","tweens_2","allStopped","isPlaying","preserve","tweenIds","autoStart","Interpolation","Utils","Bezier","Bernstein","CatmullRom","Factorial","Sequence","_nextId","mainGroup","_isPaused","_pauseStart","_valuesStart","_valuesEnd","_valuesStartRepeat","_initialRepeat","_yoyo","_isPlaying","_reversed","_delayTime","_interpolationFunction","_chainedTweens","_onStartCallbackFired","_onEveryStartCallbackFired","_isChainStopped","_propertiesAreSetUp","_goToEnd","getDuration","overrideStartingValues","_swapEndStartRepeatValues","_setupProperties","startFromCurrentValues","startValueIsArray","propType","isInterpolationList","endValues","_handleRelativeValue","nestedObject","stopChainedTweens","_onStopCallback","numChainedTweens","repeatDelay","_repeatDelayTime","yoyo","interpolationFunction","onStart","_onStartCallback","onEveryStart","_onEveryStartCallback","_onUpdateCallback","onRepeat","_onRepeatCallback","_onCompleteCallback","autoStartOnUpdate","elapsedTime","durationAndDelay","totalTime","elapsed","timesRepeated","trunc","timeIntoCurrentRepeat","portion","calculateElapsedPortion","_updateProperties","completeCount","startIsArray","endIsArray","endValue","TWEEN","OPTION_FILENAME_ENCODING","OPTION_COMMENT_ENCODING","OPTION_DECODE_TEXT","OPTION_EXTRACT_PREPENDED_DATA","OPTION_EXTRACT_APPENDED_DATA","OPTION_PASSWORD","OPTION_RAW_PASSWORD","OPTION_PASS_THROUGH","OPTION_SIGNAL","OPTION_CHECK_PASSWORD_ONLY","OPTION_CHECK_OVERLAPPING_ENTRY_ONLY","OPTION_CHECK_OVERLAPPING_ENTRY","OPTION_CHECK_SIGNATURE","OPTION_USE_WEB_WORKERS","OPTION_USE_COMPRESSION_STREAM","OPTION_TRANSFER_STREAMS","OPTION_PREVENT_CLOSE","OPTION_ENCRYPTION_STRENGTH","OPTION_EXTENDED_TIMESTAMP","OPTION_KEEP_ORDER","OPTION_LEVEL","OPTION_BUFFERED_WRITE","OPTION_CREATE_TEMP_STREAM","OPTION_DATA_DESCRIPTOR_SIGNATURE","OPTION_USE_UNICODE_FILE_NAMES","OPTION_DATA_DESCRIPTOR","OPTION_SUPPORT_ZIP64_SPLIT_FILE","OPTION_ENCODE_TEXT","OPTION_OFFSET","OPTION_USDZ","OPTION_UNIX_EXTRA_FIELD_TYPE","malloc","free","setWasmExports","wasmAPI","_make","isCompress","outBufferSize","outBuffer","inBufferSize","TransformStream","_scratch","deflate_process","_last_consumed","deflate_last_consumed","deflate_end","streamHandle","deflate_new","deflate_init_gzip","deflate_init_raw","deflate_init","inflate9_process","inflate9_last_consumed","inflate9_end","inflate9_new","inflate9_init_raw","inflate_process","inflate_last_consumed","inflate_end","inflate_new","inflate_init_raw","inflate_init_gzip","inflate_init","last_consumed","toRead","prod","signedCode","consumed","produced","CompressionStreamZlib","DecompressionStreamZlib","MAX_32_BITS","MAX_16_BITS","MAX_8_BITS","LOCAL_FILE_HEADER_SIGNATURE","SPLIT_ZIP_FILE_SIGNATURE","DATA_DESCRIPTOR_RECORD_SIGNATURE","CENTRAL_FILE_HEADER_SIGNATURE","END_OF_CENTRAL_DIR_SIGNATURE","ZIP64_END_OF_CENTRAL_DIR_SIGNATURE","ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE","END_OF_CENTRAL_DIR_LENGTH","EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP","BITFLAG_LANG_ENCODING_FLAG","FILE_ATTR_UNIX_TYPE_DIR","FILE_ATTR_UNIX_SETUID_MASK","FILE_ATTR_UNIX_SETGID_MASK","FILE_ATTR_UNIX_STICKY_MASK","DIRECTORY_SIGNATURE","HEADER_SIZE","MAX_DATE","MIN_DATE","UNDEFINED_VALUE","INFINITY_VALUE","UNDEFINED_TYPE","FUNCTION_TYPE","maxWorkers","DEFAULT_CONFIGURATION","terminateWorkerTimeout","useWebWorkers","useCompressionStream","CompressionStream","DecompressionStream","getConfiguration","getChunkSize","configuration","setIfDefined","Crc32","crc","Crc32Stream","encodeText","bitArray","getPartial","_shiftRight","carry","last2","shift2","codec","toBits","utf8String","aes","_tables","_precompute","sbox","decTable","keyLen","encKey","decKey","rcon","_crypt","encTable","sboxInv","xInv","tDec","tEnc","nInnerRounds","kIndex","m_w","m_z","rcache","prf","_prf","_initIv","_iv","incWord","incCounter","misc","hmacSha1","outLength","exKey","_baseHash","_resultHash","_updated","GET_RANDOM_VALUES_SUPPORTED","ERR_INVALID_PASSWORD","ERR_INVALID_SIGNATURE","ERR_ABORT_CHECK_PASSWORD","BLOCK_LENGTH","PBKDF2_ALGORITHM","BASE_KEY_ALGORITHM","DERIVED_BITS_ALGORITHM","DERIVED_BITS_USAGE","SALT_LENGTH","KEY_LENGTH","SIGNATURE_LENGTH","COUNTER_DEFAULT_VALUE","CRYPTO_API_SUPPORTED","SUBTLE_API_SUPPORTED","codecBytes","Aes","CtrGladman","HmacSha1","IMPORT_KEY_SUPPORTED","DERIVE_BITS_SUPPORTED","AESDecryptionStream","rawPassword","signed","encryptionStrength","checkPasswordOnly","resolveReady","encodePassword","aesCrypto","preamble","passwordVerificationKey","createKeys","passwordVerification","createDecryptionKeys","ctr","chunkToDecrypt","originalSignature","decryptedChunkArray","encryptedChunk","decryptedChunk","indexSignature","AESEncryptionStream","createEncryptionKeys","encryptedChunkArray","paddingStart","paddingEnd","verifySignature","inputArray","inputChunk","outputChunk","extractable","keyUsages","derivedBits","compositeKey","authentication","leftArray","rightArray","ZipCryptoDecryptionStream","zipCrypto","decryptedHeader","ZipCryptoEncryptionStream","HEADER_LENGTH","updateKeys","crcKey0","crcKey2","key0","key1","key2","ERR_INVALID_UNCOMPRESSED_SIZE","DeflateStream","encrypted","crc32Stream","encryptionStream","pipeThrough","pipeThroughCommpressionStream","setReadable","InflateStream","deflate64","decryptionStream","dataViewSignature","CompressionStreamNative","transformStream","MESSAGE_DATA","MESSAGE_CLOSE","CODEC_DEFLATE","CODEC_INFLATE","CodecStream","codecType","outputSize","inputSize","inputSizeStream","outputSizeStream","ChunkStream","pendingChunk","newChunk","MODULE_WORKER_OPTIONS","webWorkerSupported","webWorkerURI","webWorkerOptions","transferStreamsSupported","structuredClone","DOMException","initModule","CodecWorker","workerData","streamOptions","transferStreams","onTaskFinished","signal","busy","ProgressWatcherStream","resolveTerminated","interface","createWebWorkerInterface","createWorkerInterface","onstart","onend","chunkOffset","callHandler","codecStream","pipeTo","preventClose","preventAbort","runWorker","getWebWorker","resolveResult","rejectResult","writableSource","watchClosedStream","streamsTransferred","sendMessage","getReader","getWriter","runWebWorker","isModuleType","useBlobURI","resolvedURI","resolvedOptions","isFunctionURI","isDataURI","isBlobURI","messageId","responseError","releaseLock","onMessage","transferables","pendingRequests","indexWorker","workerOptions","streamCopy","clearTerminateTimeout","getWorker","terminateTimeout","terminateWorker","DEFAULT_CHUNK_SIZE","PROPERTY_NAME_WRITABLE","ReadableStream","dataSize","readUint8Array","WritableStream","writeUint8Array","Data64URIWriter","dataString","btoa","BlobReader","offsetEnd","BlobWriter","Response","TextReader","TextWriter","SplitDataReader","readers","lastDiskNumber","lastDiskOffset","diskReader","indexDiskReader","currentDiskNumber","currentReaderOffset","currentReader","currentReaderSize","secondPart","SplitDataWriter","writerGenerator","diskSourceWriter","diskWritable","diskWriter","diskOffset","availableSize","writeChunk","closeDisk","initStream","GenericReader","GenericWriter","initSize","CP437","VALID_CP437","decodeText","indexCharacter","decodeCP437","PROPERTY_NAME_FILENAME","PROPERTY_NAME_RAW_FILENAME","PROPERTY_NAME_COMMENT","PROPERTY_NAME_RAW_COMMENT","PROPERTY_NAME_UNCOMPRESSED_SIZE","PROPERTY_NAME_COMPRESSED_SIZE","PROPERTY_NAME_OFFSET","PROPERTY_NAME_DISK_NUMBER_START","PROPERTY_NAME_LAST_MODIFICATION_DATE","PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE","PROPERTY_NAME_LAST_ACCESS_DATE","PROPERTY_NAME_CREATION_DATE","PROPERTY_NAME_RAW_CREATION_DATE","PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES","PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES","PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW","PROPERTY_NAME_MSDOS_ATTRIBUTES","PROPERTY_NAME_MS_DOS_COMPATIBLE","PROPERTY_NAME_ZIP64","PROPERTY_NAME_ENCRYPTED","PROPERTY_NAME_VERSION","PROPERTY_NAME_VERSION_MADE_BY","PROPERTY_NAME_ZIPCRYPTO","PROPERTY_NAME_DIRECTORY","PROPERTY_NAME_EXECUTABLE","PROPERTY_NAME_COMPRESSION_METHOD","PROPERTY_NAME_SIGNATURE","PROPERTY_NAME_EXTRA_FIELD","PROPERTY_NAME_UNIX_MODE","PROPERTY_NAME_SETUID","PROPERTY_NAME_SETGID","PROPERTY_NAME_STICKY","PROPERTY_NAMES","Entry","ERR_BAD_FORMAT","ERR_UNSUPPORTED_COMPRESSION","ERR_SPLIT_ZIP_FILE","CHARSET_UTF8","CHARSET_CP437","ZIP64_PROPERTIES","ZIP64_EXTRACTION","readRanges","getEntriesGenerator","zipReader","endOfDirectoryInfo","signatureArray","getDataView","seek","minimumBytes","indexByte","seekSignature","endOfDirectoryView","directoryDataLength","directoryDataOffset","commentOffset","commentLength","appendedDataOffset","expectedLastDiskNumber","filesLength","prependedDataLength","endOfDirectoryLocatorView","endOfDirectoryArray","expectedDirectoryDataOffset","originalDirectoryDataOffset","directoryArray","directoryView","expectedDirectoryDataLength","filenameEncoding","getOptionValue","commentEncoding","indexFile","fileEntry","ZipEntry","readCommonHeader","languageEncodingFlag","filenameOffset","extraFieldOffset","filenameLength","extraFieldLength","msDosCompatible","unixCompatible","rawFilename","rawComment","filenameUTF8","commentUTF8","msdosAttributesRaw","msdosAttributes","readOnly","archive","offsetFileEntry","rawFilenameEncoding","rawCommentEncoding","rawExtraField","readCommonFooter","unixExternalUpper","unixMode","setuid","setgid","executable","modeIsDir","upperIsDir","internalFileAttribute","externalFileAttribute","extraFieldAES","extractPrependedData","extractAppendedData","prependedData","appendedData","zipEntry","extraFieldZip64","rawLastModDate","dataDescriptor","localDirectory","passThrough","originalCompressionMethod","lastAccessDate","creationDate","dataOffset","checkOverlappingEntry","checkOverlappingEntryOnly","indexReader","dataDescriptorLength","dataDescriptorArray","readSignature","readCompressedSize","readUncompressedSize","otherRange","overlappingEntry","detectOverlappingEntry","rawBitFlag","lastModDate","extraField","rawExtraFieldView","offsetExtraField","extraFieldView","missingProperties","indexMissingProperty","extraction","readExtraFieldZip64","extraFieldUnicodePath","readExtraFieldUnicode","extraFieldUnicodeComment","vendorVersion","vendorId","readExtraFieldAES","extraFieldNTFS","tag1Data","tagValue","attributeSize","tag1View","rawLastAccessDate","rawCreationDate","getDateNTFS","extraFieldData","readExtraFieldNTFS","extraFieldUnix","readExtraFieldUnix","extraFieldInfoZip","extraFieldExtendedTimestamp","timeProperties","timeRawProperties","indexProperty","rawPropertyName","readExtraFieldExtendedTimestamp","extraFieldUSDZ","extraFieldUnicode","isInfoZip","uidSize","uidBytes","unpackUnixId","gidSize","gidBytes","gid","timeRaw","ERR_INVALID_VERSION","ERR_UNSUPPORTED_FORMAT","EXTRAFIELD_DATA_AES","INFOZIP_EXTRA_FIELD_TYPE","UNIX_EXTRA_FIELD_TYPE","workers","pendingEntries","addSplitZipSignature","filenames","pendingEntriesSize","pendingAddFileCalls","bufferedWrites","prependZip","rawExtraFieldZip64","rawExtraFieldAES","rawExtraFieldExtendedTimestamp","rawExtraFieldNTFS","rawExtraFieldUnix","getLength","zip64UncompressedSize","zip64CompressedSize","headerArray","headerView","getHeaderArrayData","getBitFlag","zip64Offset","zip64DiskNumberStart","extendedTimestamp","extraFieldExtendedTimestampFlag","zipWriter","promiseAddFile","unixExtraFieldType","hasMsDosProvided","FILE_ATTR_UNIX_DEFAULT_MASK","msdDir","normalizeMsdosAttributes","keepOrder","bufferedWrite","createTempStream","dataDescriptorSignature","useUnicodeFileNames","extraFieldSize","maximumCompressedSize","maximumEntrySize","zip64Enabled","getMaximumCompressedSize","rawLocalExtraFieldZip64","uncompressedFile","zip64ExtraFieldComplete","rawExtraFieldZip64Length","rawLocalExtraFieldZip64Length","rawExtraFieldZip64View","rawLocalExtraFieldZip64View","rawExtraFieldZip64Offset","rawLocalExtraFieldZip64Offset","extraFieldAESView","extraFieldExtendedTimestampView","extraFieldNTFSView","lastModTimeNTFS","getTimeNTFS","packUnixId","modeArray","modeToWrite","payloadLength","rawExtraFieldUnixView","localExtraFieldZip64Length","localHeaderArray","localHeaderView","HEADER_OFFSET_COMPRESSED_SIZE","HEADER_OFFSET_UNCOMPRESSED_SIZE","getHeaderInfo","dataDescriptorInfo","dataDescriptorView","dataDescriptorOffset","getDataDescriptorInfo","metadataSize","entryInfo","usdz","previousFileEntry","releaseLockWriter","releaseLockCurrentFileEntry","writingBufferedEntryData","writingEntryData","fileWriter","lockPreviousFileEntry","writerLocked","requestLockWriter","writeData","zipWriterOffset","localHeaderArrayView","extraBytesLength","rawExtraFieldUSDZ","extraFieldUSDZView","previousLocalHeaderArray","appendExtraFieldUSDZ","skipDiskIfNeeded","setEntryInfo","createFileEntry","updateZip64ExtraField","HEADER_OFFSET_SIGNATURE","updateLocalHeader","hasCorruptedEntries","corruptedEntry","lockWriter","getFileEntry","addFile","pendingEntry","allSettled","directoryOffset","rawExtraFieldTimestamp","directoryDiskOffset","indexFileEntry","fileEntryOffset","endOfdirectoryArray","endOfdirectoryView","ZIP64_END_OF_CENTRAL_DIR_LENGTH","closeFile","streamWriter","arrayLikes","arrayLike","dateArray","dateView","modulePromise","initializedModule","initModuleFunction","configureWorker","arrayBufferFromDataURI","wasmInstance","sFilterInput","sLengthSelect","sProcessing","pageButton","bootstrap","btnDisplay","btnClass","activeEl","lang","oPaginate","aria","oAria","paginate","ien","clickHandler","sPrevious","sNext","sLast","sPageButton","sTableId","iTabIndex","_fnBindAction","Buttons","dropHtml","liner","spacer","splitAlignClass","colvis","buttonConf","columnText","collectionRebuild","columnsToggle","columnToggle","columnsVisibility","columnVisibility","_columnText","bDestroying","destroying","aoColumns","sTitle","colvisRestore","_visOriginal","colReorder","colvisGroup","adjust","useJszip","usePdfmake","_jsZip","JSZip","_pdfMake","pdfMake","_saveAs","get_URL","save_link","can_use_save_link","is_safari","is_chrome_ios","throw_outside","revoke","auto_bom","FileSaver","no_auto_bom","object_url","filesaver","dispatch_all","event_types","INIT","fs_error","FS_proto","WRITING","onwritestart","onabort","onwriteend","fileSave","_sheetname","_newLine","newline","_exportData","newLine","exportData","exportOptions","fieldBoundary","fieldSeparator","reBoundary","_isDuffSafari","createCellPos","ordA","_ieExcel","_serialiser","_addToZip","excelStrings","setAttributeNode","_createNode","tempNode","_excelColWidth","lineSplit","_excelSpecials","copyHtml5","exportInfo","hiddenDiv","messageTop","messageBottom","customize","queryCommandSupported","successful","execCommand","csvHtml5","bom","characterSet","excelHtml5","dataStartRow","dataEndRow","rowNode","rowPos","getXml","parseXML","relsGet","xlsx","_rels","createEmptyCells","originalContent","jen","customizeData","colspan","customWidth","zipConfig","pdfHtml5","pageSize","pageOrientation","headerRows","tableHeader","tableBodyEven","tableBodyOdd","tableFooter","createPdf","_instCounter","_buttonCounter","_dtButtons","_entityDecoder","_fadeIn","_fadeOut","fadeOut","_infoTimer","listenKeys","_constructor","_nodeToButton","klass","jqNode","inCollection","_expandButton","newButtons","prefixButtons","postfixButtons","newBtn","parentConf","buttonInsts","_nodeToHost","_removeKey","dtSettings","_buttons","_keypress","_addKey","inserter","attachTo","inSplit","attachPoint","domCollection","_resolveExtends","built","_buildButton","collectionLayout","dropup","fade","configDom","clickBlurs","titleAttr","splitDiv","buttonContainer","buttonCreated","dropdownConf","wrapperConf","dropButtonConfig","splitAction","dropButton","_buttonsHandled","recurse","toConfObject","objArray","originalClassName","_popover","hostButton","inOpts","backgroundClassName","contentClassName","collectionTitle","popoverTitle","rightAlignClassName","hostNode","existingExpanded","tableContainer","buttonPosition","buttonOffset","tableSizes","popoverSizes","backgroundHost","btn","insertPoint","instanceSelector","buttonSelector","insts","nodeBuilder","stripData","stripHtml","stripNewlines","decodeEntities","_exportTextarea","entityDecoder","popover","excel","pageLength","lengthMenu","aLengthMenu","buttonGroup","_groupSelector","registerPlural","groupSelector","pluck","_filename","_message","_stringOrFunction","caption","rowIndexes","selectedCells","cellNodes","cellCounter","fnInit","cFeature","_ext","_Api","_api_register","_api_registerPlural","sSelector","oOpts","traditional","_fnSettingsFromNode","iApiIndex","fnAddData","fnAdjustColumnSizing","bRedraw","oScroll","_fnScrollDraw","fnClearTable","fnClose","nTr","fnDeleteRow","aoData","fnDestroy","fnDraw","fnFilter","sInput","iColumn","bRegex","bSmart","bShowGlobal","bCaseInsensitive","fnGetData","fnGetNodes","iRow","fnGetPosition","columnVisible","fnIsOpen","fnOpen","mHtml","sClass","fnPageChange","mAction","fnSetColumnVis","iCol","bShow","fnSettings","fnSort","aaSort","fnSortListener","nNode","fnCallback","fnUpdate","mData","mRow","bAction","fnVersionCheck","_that","emptyInit","internal","_fnExternApiFunc","_fnExtend","sId","bInitHandedOff","$this","_fnCompatOpts","_fnCompatCols","_fnCamelToHungarian","allSettings","nTHead","nTFoot","bRetrieve","bDestroy","_fnLog","_unique","oSettings","models","_fnLanguageCompat","iDisplayLength","_fnMap","_fnCallbackReg","fnDrawCallback","fnServerParams","fnStateSaveParams","fnStateLoadParams","fnStateLoaded","fnRowCallback","fnCreatedRow","fnHeaderCallback","fnFooterCallback","fnInitComplete","fnPreDrawCallback","rowIdFn","_fnGetObjectDataFn","rowId","_fnBrowserDetect","sTable","iInitDisplayStart","iDisplayStart","iDeferLoading","bDeferLoading","_iRecordsDisplay","_iRecordsTotal","sUrl","dataType","_fnCallbackFire","_fnInitialise","asStripeClasses","sStripeOdd","sStripeEven","stripeClasses","rowOne","asDestroyStripes","aoColumnsInit","anThs","nThead","_fnDetectHeader","aoHeader","_fnGetUniqueThs","_fnAddColumn","_fnApplyColumnDefs","aoColumnDefs","oDef","_fnColumnOptions","_isArrayHost","loadedInit","aaSorting","sorting","asSorting","_fnSortingClasses","bSort","aSort","_fnSortFlatten","sortedColumns","_fnSortAria","_fnDataSource","bDeferRender","captions","_captionSide","nTBody","sNoFooter","aoFooter","aaData","_fnAddData","_fnAddTr","aiDisplay","aiDisplayMaster","bInitialised","_fnSaveState","_fnLoadState","_re_dic","_re_new_lines","_re_html","_re_date","_re_escape_regex","_re_formatted_numeric","_empty","_intVal","_numToDecimal","decimalPoint","_fnEscapeRegex","strType","_htmlNumeric","_isHtml","_stripHtml","_pluck","prop2","_pluck_order","_range","_removeEmpty","_areAllUnique","_flatten","_includes","_fnHungarianMap","newKey","_hungarianMap","user","hungarianKey","defaultDecimal","sDecimal","_addNumericSort","zeroRecords","sZeroRecords","sEmptyTable","sLoadingRecords","sInfoThousands","sThousands","freq","escapeRegex","arrayNotation","funcNotation","innerSrc","_fnSplitObjNotation","aLast","__reArray","__reFn","jLen","fetchData","_fnCompatMap","knew","sScrollX","searchCols","aoSearchCols","oSearch","dataSort","aDataSort","__browser","bScrollOversize","bScrollbarLeft","bBounding","oBrowser","iBarWidth","_fnReduce","inc","nTh","oCol","oColumn","aoPreSearchCols","oOptions","sWidthOrig","mDataProp","sType","_sManualType","origClass","iDataSort","ariaTitle","mDataSrc","mRender","attrTest","_bAttrSrc","_setter","rowData","innerData","fnSetData","_fnSetObjectDataFn","_rowReadObject","bSortable","sSortableNone","bAsc","bDesc","sSortingClass","sSortableAsc","sSortingClassJUI","sSortJUIAscAllowed","sSortableDesc","sSortJUIDescAllowed","sSortable","sSortJUI","_fnAdjustColumnSizing","bAutoWidth","_fnCalculateColumnWidths","sWidth","_fnVisibleToColumnIndex","iMatch","aiVis","_fnGetColumns","_fnColumnIndexToVisible","iPos","_fnVisbleColumns","bVisible","sParam","_fnColumnTypes","ken","detectedType","detect","_fnGetCellData","aoColDefs","aoCols","kLen","aTargets","aDataIn","anTds","oData","oRow","_aData","aIds","_fnCreateTr","trs","_fnGetRowElements","colIdx","defaultContent","sDefaultContent","cellData","iDrawError","fomatters","_fnSetCellData","_fnGetDataMaster","_fnClearTable","_fnDeleteIndex","iTarget","iTargetIndex","_fnInvalidate","cellWrite","anCells","_aSortData","_aFilterData","_fnRowAttributes","tds","objectRead","cellProcess","nTrIn","nTd","_DT_RowIndex","sCellType","_DT_CellIndex","fnCreatedCell","DT_RowClass","__rowc","DT_RowAttr","DT_RowData","_fnBuildHead","createHeader","_fnSortAttachListener","_fnRenderer","sHeaderTH","sFooterTH","nTf","_fnDrawHead","aoSource","bIncludeHidden","nLocalTr","iRowspan","iColspan","aoLocal","aApplied","iColumns","_fnDraw","ajaxComplete","_fnStart","aPreDraw","anRows","iRowCount","iStripes","oLang","iDisplayEnd","fnDisplayEnd","bDrawing","_fnAjaxUpdate","iStart","iEnd","iDataIndex","nRow","sStripe","_sRowStripe","sZero","fnRecordsTotal","sRowEmpty","_fnReDraw","holdPosition","bFilter","_fnSort","_fnFilterComplete","oPreviousSearch","_fnAddOptionsHtml","holding","nTableReinsertBefore","cOption","nNewNode","cNext","sAttr","aDom","sDom","sJUIHeader","sJUIFooter","aSplit","bLengthChange","_fnFeatureHtmlLength","_fnFeatureHtmlFilter","bProcessing","_fnFeatureHtmlProcessing","_fnFeatureHtmlTable","_fnFeatureHtmlInfo","_fnFeatureHtmlPaginate","aoFeatures","aLayout","nCell","iColShifted","bUnique","nTrs","fnShiftCol","nHeader","aReturn","bSortCellsTop","_fnBuildAjax","rbracket","ajaxData","_fnAjaxDataSrc","sError","baseAjax","sServerMethod","thrown","oAjaxData","fnServerData","drawHold","_fnAjaxParameters","_fnAjaxUpdateDraw","dataProp","columnSearch","preSearch","preColSearch","displayLength","sSearch","sName","searchable","bSearchable","orderable","legacy","compat","modern","recordsFiltered","_bInitComplete","_fnInitComplete","dataSrc","sAjaxDataProp","tableId","previousSearch","sFilter","searchFn","searchDelay","jqFilter","sSearchPlaceholder","_fnThrottle","oInput","iForce","oPrevSearch","aoPrevSearch","fnSaveFilter","oFilter","fnRegex","bEscapeRegex","_fnFilter","_fnFilterColumn","_fnFilterCustom","displayRows","searchStr","smart","caseInsensitive","rpSearch","_fnFilterCreateSearch","prevSearch","displayMaster","_fnFilterData","_sFilterRow","__filter_div","__filter_div_textContent","filterData","wasInvalidated","_fnSearchToCamel","_fnSearchToHung","tid","aoDrawCallback","_fnUpdateInfo","_fnInfoMacros","iAjaxStart","deferLoading","_fnStringToCss","aData","_fnLengthChange","_fnLengthOverflow","Option","sLength","sLengthMenu","sPaginationType","pager","sPaging","visRecords","_fnPageChange","records","captionSide","headerClone","footerClone","_div","sScrollHead","sScrollHeadInner","sXInner","sScrollFoot","sScrollFootInner","scrollHead","scrollBody","scrollFoot","bCollapse","nScrollHead","nScrollBody","nScrollFoot","headerTrgEls","footerTrgEls","headerSrcEls","footerSrcEls","headerCopy","footerCopy","sanityWidth","scrollXInner","divHeader","divHeaderStyle","divHeaderInner","divHeaderInnerStyle","divHeaderTable","divBodyEl","divBody","divBodyStyle","divFooterInner","divFooterTable","tableEl","tableStyle","ie67","headerWidths","footerWidths","headerContent","footerContent","zeroOut","nSizer","paddingBottom","borderTopWidth","borderBottomWidth","scrollBarVis","_fnApplyToChildren","nToSize","iOuterWidth","bScrolling","an1","an2","nNode1","nNode2","__re_html_remove","columnIdx","visibleColumns","headerCells","tableWidthAttr","userInputs","styleWidth","_fnConvertToWidth","tmpTable","_fnGetWidestNode","sContentPadding","holder","bounding","_reszEvt","bindResize","sInstance","els","_fnGetMaxLenString","maxIdx","srcCol","aaSortingFixed","fixedObj","nestedSort","_idx","sortCol","aiOrig","oExtSort","_fnSortData","dataA","dataB","nextSort","sSortAscending","sSortDescending","_fnSortListener","nextSortIdx","bSortMulti","sortIdx","oldSort","aLastSort","sortClass","sSortColumn","bSortClasses","customSort","sSortDataType","_bLoadingState","oSavedState","fnStateSaveCallback","fnStateLoadCallback","_fnImplementState","abStateLoad","iStateDuration","sErrMode","errMode","mappedName","extender","breakRefs","sStore","callbackArr","__apiStruct","__arrayProto","ctxSettings","mixed","_toSettings","alwaysNew","apiInst","_selector_row_indexes","apiSelector","to$","toJQuery","__dt_wrapper","methodScoping","struc","methodExt","propExt","heir","pluralName","singularName","__table_selector","paging","__reload","resetPaging","_selector_run","selectFn","selectorType","_selector_opts","_selector_first","displayFiltered","displayFilteredMap","selInt","cellIdx","rowObj","__row_selector","thatIdx","loopRow","loopCells","newRows","modRows","stateSaveParamsEvent","destroyEvent","idFn","_detailsShow","childRows","__details_state","__details_remove","_details","__details_display","__details_events","drawEvent","colvisEvent","_child_obj","_child_mth","colSpan","__details_add","__re_column_selector","__columnData","visColumns","jqResult","__column_selector","__setColumnVis","rowSelector","columnSelector","allCells","fnSelector","__cell_selector","internalOpts","cellsNoOpts","caseInsen","DateTime","iThis","iThat","aThis","aThat","isDataTable","fnIsDataTable","foot","fnTables","camelToHungarian","jqRows","jqTable","jqTbody","jqWrapper","removedMethod","sDestroyWidth","arg1","arg2","arg3","arg4","plural","toFormat","sessionStorage","builder","oJUIClasses","sVersion","afnFiltering","aTypes","ofnSearch","oSort","afnSortData","oStdClasses","oPagination","extPagination","_numbers","numbers_length","DT_el","simple_numbers","full_numbers","first_last_numbers","disabledClass","sPageButtonDisabled","sPageButtonActive","pagingTag","__numericReplace","decimalPlace","re1","re2","sSortAsc","sSortDesc","jqueryui","sSortJUIWrapper","sSortIcon","sSortJUIAsc","sSortJUIDesc","__htmlEscapeEntities","__mld","momentFn","luxonFn","dateFn","moment","luxon","__mlWarning","__mldObj","fromFormat","fromISO","setLocale","__mlHelper","localeString","__thousands","__decimal","Intl","NumberFormat","formatToParts","datetime","postfix","flo","intPart","floatPart","_fnNodeToDataIndex","_fnNodeToColumnIndex","_fnCalculateEnd","dataTableSettings","dataTableExt","class2type","fnToString","ObjectFunctionString","document$1","preservedScriptAttributes","noModule","DOMEval","rhtmlSuffix","prevObject","even","grep","_elem","odd","copyIsArray","expando","globalEval","isXMLDoc","docElem","bup","callbackExpect","isIE","rbuggyQSA","rtrimCSS","rleadingCombinator","rdescend","rsibling","documentElement$1","createCache","cacheLength","testContext","filterMatchExpr","CLASS","TAG","ATTR","PSEUDO","CHILD","rpseudo","runescape","funescape","nonHex","unescapeSelector","selectorError","rcomma","tokenCache","tokenize","parseOnly","soFar","preFilters","preFilter","excess","unquoted","toSelector","chainable","emptyGet","bulk","rnothtmlwhite","nType","attrHooks","attrNames","rcssescape","fcssescape","asCodePoint","hasDuplicate","sortOrder","duplicates","outermostContext","documentIsHTML","dirruns","classCache","compilerCache","nonnativeSelectorCache","rwhitespace","ridentifier","matchExpr","needsContext","rinputs","rheader","rquickExpr$1","unloadHandler","setDocument","inDisabledFieldset","addCombinator","nid","newSelector","newContext","qsaError","markFunction","createInputPseudo","createButtonPseudo","createDisabledPseudo","createPositionalPseudo","matchIndexes","subWindow","attrId","nodeNameSelector","expectedNodeName","_argument","ofType","outerCache","useCache","pseudo","setFilters","compile","unmatched","elemLang","_matchIndexes","radio","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","newUnmatched","setMatcher","postFilter","postFinder","postSelector","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","until","rneedsContext","rsingleTag","isObviousHtml","winnow","rootjQuery","rquickExpr","rparentsprev","guaranteedUnique","sibling","Identity","Thrower","adoptValue","noValue","selectors","parentsUntil","nextUntil","prevUntil","Callbacks","createOptions","firing","firingIndex","fire","stopOnFalse","fireWith","Deferred","newDefer","tuple","returned","onProgress","mightThrow","notifyWith","resolveWith","exceptionHook","rejectWith","getErrorHook","stateString","singleValue","resolveContexts","resolveValues","updateFunc","rerrorNames","asyncError","readyException","readyList","completed","readyWait","rdashAlpha","fcamelCase","acceptData","hasData","dataPriv","dataUser","rbrace","rmultiDash","_removeData","startLength","_queueHooks","clearQueue","pnum","rcssNum","cssExpand","isHiddenWithinTree","ralphaStart","rautoPx","isAutoPx","adjustCSS","valueParts","adjusted","maxIterations","initialInUnit","rmsPrefix","cssCamelCase","defaultDisplayMap","getDefaultDisplay","showHide","isAttached","composed","rtagName","wrapMap","colgroup","rscriptType","setGlobalEval","refElements","rhtml","buildFragment","ignored","attached","htmlPrefilter","disableScript","restoreScript","domManip","hasScripts","iNoClone","_evalUrl","rcheckableType","rtypenamespace","returnFalse","origFn","leverageNative","isSetup","saved","delegateType","handleObjIn","eventHandle","handleObj","origType","elemData","bindType","delegateCount","mappedTypes","origCount","teardown","nativeEvent","handlerQueue","fix","preDispatch","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","noBubble","isSimulated","eventPhase","targetTouches","focusMappedHandler","pointerenter","pointerleave","related","rnoInnerhtml","manipulationTarget","cloneCopyEvent","keepData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","rnumnonpx","rcustomProp","getStyles","curCSS","isCustomProp","cssPrefixes","emptyStyle","finalPropName","capName","vendorPropName","reliableTrDimensionsVal","reliableColDimensionsVal","computeTableStyleTests","trStyle","reliableTrDimensions","reliableColDimensions","cssShow","cssNormalTransform","letterSpacing","setPositiveNumber","boxModelAdjustment","isBorderBox","computedVal","marginDelta","getWidthOrHeight","valueIsBorderBox","offsetProp","cssHooks","origName","propHooks","eased","swing","fxNow","inProgress","rfxtypes","rrun","schedule","createFxNow","genFx","includeWidth","tweeners","prefilters","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","speeds","fadeTo","optall","doAnimation","stopQueue","cssFn","slideDown","slideUp","slideToggle","fadeToggle","slow","fast","rfocusable","rclickable","stripAndCollapse","classesToArray","propFix","finalValue","stateVal","valueIsFunction","valHooks","optionSet","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","simulate","rquery","parserErrorElem","rCRLF","rsubmitterTypes","rsubmittable","buildParams","valueOrFunction","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","originAnchor","addToPrefiltersOrTransports","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","inspected","seekingTransport","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","lastModified","etag","isLocal","accepts","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","cacheURL","responseHeadersString","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","finalText","crossDomain","ifModified","nativeStatusText","responses","isSuccess","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","ajaxConvert","getJSON","getScript","scriptAttrs","wrapInner","htmlIsFunction","xhrSuccessStatus","canUseScriptTag","xhrFields","ontimeout","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","origOptions","FormData","keepScripts","animated","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","parentOffset","Width","defaultExtra","undelegate","fnOver","fnOut","holdReady","_jQuery","jQueryFactory","defaultAttributes","stringifiedAttributes","cookies","jar","withAttributes","withConverter","wasmpack","__wasm_call_ctors","meshopt_encodeVertexVersion","meshopt_encodeIndexVersion","MeshoptDecoder","detector","sbrk","count4","OCTAHEDRAL","QUATERNION","EXPONENTIAL","ATTRIBUTES","INDICES","requests","workerProcess","useWorkers","initWorkers","meshopt_decodeVertexBuffer","meshopt_decodeIndexBuffer","meshopt_decodeIndexSequence","decodeGltfBufferAsync","decodeWorker","TinyEmitter","CONTEXTMENU","CLICK","DBLCLICK","BEFOREOPEN","OPEN","CLOSE","ADD_MENU_ENTRY","scrollAt","classname","getZoom","coordinate","isSubmenu","isInsideSubmenu","isSeparator","menuWidth","contextMenuEventListener","handleContextMenu","entryCallbackEventListener","handleEntryCallback","mapMoveListener","handleMapMove","opened","removeListeners","menuEntries","removeMenuEntry","replaceChildren","getDefaultItems","countItems","closeMenu","updatePosition","positionContainer","setMap","getViewport","handleAddMenuEntry","getMenuEntriesLength","getEventCoordinate","getEventPixel","openMenu","getSize","ol_control_Bar","toggleOne","autoDeactivate","controls_","controls","addControl","setVisible","getVisible","getControls","setTarget","getMap","_activateBar","onActivateControl_","getActive","removeControl","deactivateControls","except","setActive","getActiveControls","ctrls","ctrl","control","getControlsByName","ol_control_Button","button_","classButton","handleClick","getDisable","setDisable","setTitle","setHtml","setHTML","getButtonElement","MixedGeometryBatch","globalCounter_","refToFeature_","uidToRef_","freeGlobalRef_","polygonBatch","geometriesCount","verticesCount","ringsCount","pointBatch","lineStringBatch","addFeatures","projectionTransform","addFeature","getGeometry","applyTransform","addGeometry_","clearFeatureEntryInPointBatch_","featureUid","flatCoordss","clearFeatureEntryInLineStringBatch_","clearFeatureEntryInPolygonBatch_","getGeometriesArray","multiPolygonGeom","addCoordinates_","getFlatCoordinates","getEndss","multiLineGeom","getEnds","multiPointGeom","polygonGeom","pointGeom","lineGeom","getLayout","flatCoords","multiPolygonEndss","polygonEnds","prevPolygonEnds","multiLineEnds","multiPolygonEnds","addRefToEntry_","ringsVerticesCounts","ringsVerticesCount","ind","getFlatCoordinatesXY","getFlatCoordinatesXYM","currentRef","removeRef_","changeFeature","removeFeature","getFeatureFromRef","featureFilter","textEncoder","array_","actualSize_","labelPositionMap_","newArray","pushCustomAttributesInRenderInstructions","renderInstructions","batchEntry","labelPosition","labelLength","getCustomAttributesSize","serializeFrameState","viewState","viewHints","coordinateToPixelTransform","pixelToCoordinateTransform","layerStatesArray","maxResolution","minResolution","managed","computeHash","parseCommonSymbolProperties","vertContext","setSymbolSizeExpression","getSymbolSizeExpression","setSymbolOffsetExpression","setSymbolRotationExpression","setSymbolRotateWithView","getColorFromDistanceField","distanceField","parseImageProperties","parseImageOffsetProperties","offsetExpression","parseLiteralStyle","sizeExpression","setSymbolColorExpression","fullsize","setTextureCoordinateExpression","shiftPx","offsetPx","getSymbolOffsetExpression","parseIconProperties","currentPoint","shapeField","radius2","parseShapeProperties","parseCircleProperties","setStrokeColorExpression","sampleSizeExpression","spacingExpression","startOffsetExpression","tintExpression","getStrokeColorExpression","setStrokePatternLengthExpression","setStrokeWidthExpression","setStrokeOffsetExpression","setStrokeCapExpression","setStrokeJoinExpression","setStrokeMiterLimitExpression","dashFunctionName","dashLengthsParamsDef","totalLengthDef","currentDashOffset","distanceExpression","dashLengthsCalls","setStrokeDistanceFieldExpression","patternLength","getStrokePatternLengthExpression","parseStrokeProperties","setFillColorExpression","setFillPatternSizeExpression","specifiedSizeExpression","getFillColorExpression","parseFillProperties","safeExpressionToGlsl","parseTextProperties","filterContext","parsedFilter","mCoordinate","setFragmentDiscardExpression","setShapeDiscardExpression","defineSpecialInput","contextPropName","glslPropName","attrSize","TextUniforms","TEXT_OVERLAY_TEXTURE","TEXT_OVERLAY_MATRIX","hasTextStyle","createPostProcessDefinition","textOverlayCanvasGetter","textOverlayFrameStateGetter","tmpMatrix","textOverlayCanvas","textOverlayFrameState","textOverlayViewState","renderedCenter","renderedResolution","renderedRotation","renderedWidth","renderedHeight","tmpColor","WEBGL_WORKER","workerMessageCounter","messageWorker","handleMessage","received","VectorStyleRenderer","Disposable","enableHitDetection","helper_","hitDetectionEnabled_","flatStyle","toFlatStyleLike","styleShaders","asArray","previousFilters","ruleStyles","currentFilter","else","sourceRule","convertStyleToShaders","customAttributes_","uniforms_","colorEncodeIdAndPack","styleShader","renderPasses_","customAttributesDesc","getFillVertexShader","fillRenderPass","getFillFragmentShader","attributesDesc","instancedAttributesDesc","instancePrimitiveVertexCount","getStrokeVertexShader","strokeRenderPass","getStrokeFragmentShader","getSymbolVertexShader","symbolRenderPass","getSymbolFragmentShader","hasFill_","hasStroke_","hasSymbol_","hasText_","textOverlayCanvas_","textOverlayContext_","textOverlayRenderFrameState_","textOverlayWorker_","textOverlayRenderList_","setHelper","geometryBatch","invertVerticesTransform","polygonBuffers","lineStringBuffers","pointBuffers","textInstructionsKey","labelsArray","generateRenderInstructions_","generateTextInstructions_","generateBuffersForType_","polygonInstructions","lineStringInstructions","pointInstructions","totalInstructionsCount","renderIndex","generatePolygonRenderInstructions","generateLineStringRenderInstructions","tmpCoords","generatePointRenderInstructions","messageType","renderInstructionsTransform","customAttributesSize","getGL","fromArrayBuffer","vertexAttributesBuffer","instanceAttributesBuffer","flushBufferData","polygonRenderInstructions","lineStringRenderInstructions","pointRenderInstructions","customAttributesSizes","instructionsSetKey","preRenderCallback","renderInternal_","renderText_","subRenderPass","renderCount","usesInstancedRendering","enableAttributes","enableAttributesInstanced","instanceAttributesStride","finalizeTextRender","batchesToRender","getProgram","getTextOverlayCanvas","getTextOverlayFrameState","disposeTextInstructions","disposeInternal","styleOrShaders","tmpArray4","texture_","framebuffer_","depthbuffer_","size_","data_","dataCacheDirty_","updateSize_","clearCachedData","readAll","readPixel","getDepthbuffer","VectorUniforms","PATTERN_ORIGIN_X_DOUBLE","PATTERN_ORIGIN_Y_DOUBLE","PATTERN_SCALE_RATIO_DOUBLE","tmpCoords2","tmpTransform","tmpMat4","Uniforms","RENDER_EXTENT","GLOBAL_ALPHA","WebGLVectorLayerRenderer","postProcesses","disableHitDetection","hitRenderTarget_","sourceRevision_","layerRevision_","skipNextTextRender_","previousExtent_","currentTransform_","currentFrameStateTransform_","styleVariables_","style_","styleRenderer_","buffers_","batch_","initialFeaturesAdded_","sourceListenKeys_","applyOptions_","addInitialFeatures_","getLayer","getSource","userProjection","getFeatures","VectorEventType","ADDFEATURE","handleSourceFeatureAdded_","CHANGEFEATURE","handleSourceFeatureChanged_","REMOVEFEATURE","handleSourceFeatureDelete_","CLEAR","handleSourceFeatureClear_","newHasText","setPostProcesses","getPostProcesses","createRenderers_","afterHelperCreated","applyUniforms_","batchInvertTransform","worldToViewTransform","geometryInvertTransform","setUniformMatrixValue","PROJECTION_MATRIX","INVERT_PROJECTION_MATRIX","setUniformFloatVec2","scaleRatio","applyVectorUniforms","startWorld","endWorld","multiWorld","getWrapX","canWrapX","projectionExtent","getExtent","getWorldParameters","prepareDraw","renderWorlds","finalizeDraw","dispatchPreComposeEvent","dispatchPostComposeEvent","getCanvas","prepareFrameInternal","vectorSource","viewNotMoving","ViewHint","INTERACTING","extentChanged","sourceChanged","getRevision","layerChanged","renderBuffer","BaseVector","getRenderBuffer","loadFeatures","makeProjectionTransform","disposeBuffers","forHitDetection","world","prepareDrawToRenderTarget","applyHitDetectionUniform","forEachFeatureAtCoordinate","hitTolerance","mult","colorDecodeId","disposeBuffersOfType","typeBuffers","renderDeclutter","DEFAULT_GRADIENT","Heatmap","baseOptions","filter_","gradient_","addChangeListener","handleGradientChanged_","setGradient","setBlur","setRadius","weight_","setRenderOrder","getBlur","getGradient","getRadius","createLinearGradient","addColorStop","createGradient","clearRenderer","setFilter","setWeight","filterParsingContext","filterCompiled","radiusCompiled","blurCompiled","blurRadiusUniforms","weightAttribute","weightExpression","weightFunction","weightValue","clampedWeight","blurSlopeExpr","u_gradientTexture","u_opacity","getOpacity","updateStyleVariables","ol_control_LayerSwitcher","switcherClass","dcount","show_progress","oninfo","onextent","hasextent","hastrash","trash","reordering","_layerGroup","layerGroup","getLayers","onchangeCheck","displayInLayerSwitcher","mouseover","minibar","noScroll","topv","botv","_noScroll","panel_","panelContainer_","header_","drawDelay","mbar","scrollDiv","drawPanel","_listener","moveend","viewChange","getLayerGroup","setStyle","getStyle","_setLayerForLI","setLayerOpacity","setLayerVisibility","_clearLayerForLI","_getLayerForLI","testLayerVisibility","getPanel","drawPanel_","dragging_","drawList","switchLayerVisibility","getResolution","getMaxResolution","getMinResolution","getMinZoom","getMaxZoom","ex0","calculateExtent","ol_extent","dragOrdering_","dragElt","elt","pageY0","offsetRect","elementFromPoint","isSelected","removeAt","selectLayer","dragOpacity_","setOpacity","setVisibility","onInfo","zoomExtent","removeLayer","createLi","_selectedLayer","layer_buttons","_focus","userSelect","plus","setprogress_","layerswitcher_progress","ul2","getLayerClass","ol_control_Notification","contentElement","closeBox","hideOnClick","ol_control_Overlay","center_","getPixelFromCoordinate","showImage","ol_control_Scale","typing","ppi","dpi","getProjection","getCoordinateFromPixel","ol_proj","ol_sphere_getMapScale","formatScale","setResolution","ol_sphere_setMapScale","ol_control_Search","_classname","listElements","drawList_","inputLabel","tout","doSearch","newli","_handleSelect","noCollapse","reverseTitle","getTitle","maxHistory","onselect","centerOnSelect","setCenter","zoomOnSelect","setZoom","restoreHistory","_handleClick","getInputField","_getTitleTxt","_triggerCustomEvent","reverseGeocode","setInput","hist","fstr","saveHistory","_history","clearHistory","getHistory","cback","equalFeatures","ol_ext_Ajax","ol_Object","_auth","getCORS","HEADERS_RECEIVED","_ajax","ol_control_SearchNominatim","display_name","addressdetails","polygon_geojson","ol_control_Toggle","toggleFn","onToggle","interaction_","autoActivate","setSubBar","removeInteraction","subbar_","addInteraction","getSubBar","setInteraction","getInteraction","ol_interaction_Transform","handleDownEvent","handleDownEvent_","handleDragEvent","handleDragEvent_","handleMoveEvent","handleMoveEvent_","handleUpEvent","handleUpEvent_","selection_","handles_","overlayLayer_","useSpatialIndex","wrapX","updateWhileAnimating","updateWhileInteracting","features_","_filter","layers_","_handleEvent","addFn_","addCondition","setPointRadius","pointRadius","translateFeature","translateBBox","stretch","keepAspectRatio","modifyCenter","noFlip","enableRotatedTransform","keepRectangle","drawSketch_","setDefaultStyle","setSelection","oldMap","previousCursor_","setCursor","isTouch","pointStroke","strokedash","lineDash","fill0","pointFill","displacement","setDisplacement","getAnchor","bigpt","smallpt","createStyle","olstyle","getText","setOffsetX","getFeatureAtPixel_","forEachFeatureAtPixel","bbox_","constraint","getGeometryRotateToZero_","origGeom","rotGeom","_isRectangle","extendExt","ptRadius","_pointRadius","ispt_","iscircle_","watchFeatures_","_featureListeners","isUpdating_","mode_","opt_","constraint_","coordinate_","pixel_","geoms_","rotatedGeoms_","rotExtent","hasChanged_","extent_","rotatedExtent_","getTargetElement","Cursors","rotate0","angle_","pt0","ispt","setCenterAndRadius","setGeometry","deltaX","extentCoordinates","downCoordinate","dragCoordinate","downPoint","dragPoint","scx","scy","displacementVector","pointArray","pointA","pointB","pointC","pointD","pointA1","_countVector","projectedVector","_projectVectorOnVector","coordsToChange","projectedLeft","projectedRight","snapped","_snapToDiagonal","_movePoint","oldgeom","oldgeoms","displacement_vector","rail","_listenDrag","moving","listen","getInputElement","isChecked","ol_ext_element","styleProp","currentStyle","oldLeft","oldRsLeft","runtimeStyle","pixelLeft","gleft","gtop","getRect","isbar","scrollContainer","scrollbar","onmove","updateCounter","updateMinibar","updateMinibarDelay","pheight","onPointerDown","onPointerMove","onPointerUp","onMouseWheel","CustomEvent","initCustomEvent","CollectionEvent","Collection","unique_","assertUnique_","updateLength_","REMOVE","setAt","asImageLike","asArrayLike","disposedError","DataTile","IDLE","loader_","error_","controller_","disposed","geometryOrProperties","id_","geometryName_","styleFunction_","geometryChangeKey_","handleGeometryChanged_","setProperties","setGeometryName","getPropertiesInternal","getGeometryName","getStyleFunction","handleGeometryChange_","CHANGE","createStyleFunction","setId","removeChangeListener","GeolocationError","Geolocation","position_","transform_","watchId_","handleProjectionChanged_","handleTrackingChanged_","setProjection","trackingOptions","setTrackingOptions","setTracking","tracking","getTracking","geolocation","watchPosition","positionChange_","positionError_","getTrackingOptions","clearWatch","altitudeAccuracy","getAccuracy","getAccuracyGeometry","getAltitudeAccuracy","getSpeed","ImageWrapper","stateOrLoader","pixelRatio_","image_","getPixelRatio","requestResolution","listenImage","loadHandler","listening","listenerKeys","LOAD","decodeFallback","handleLoad","unlisten","ImageTile","imageAttributes","tileLoadFunction","crossOrigin_","referrerPolicy_","referrerPolicy","src_","unlisten_","tileLoadFunction_","unlistenImage_","getCrossOrigin","getReferrerPolicy","handleImageError_","getBlankImage","handleImageLoad_","minVelocity","decay_","minVelocity_","delay_","points_","initialVelocity_","getDistance","getAngle","MapBrowserEventHandler","moveTolerance","map_","clickTimeoutId_","emulateClicks_","dragListenerKeys_","moveTolerance_","down_","activePointers_","trackedTouches_","element_","pointerdownListenerKey_","POINTERDOWN","handlePointerDown_","originalPointerMoveEvent_","relayedListenerKey_","POINTERMOVE","relayMoveEvent_","boundHandleTouchMove_","handleTouchMove_","EventType","TOUCHMOVE","emulateClick_","pointerEvent","newEvent","MapBrowserEvent","MapBrowserEventType","SINGLECLICK","updateActivePointers_","POINTERUP","POINTERCANCEL","handlePointerUp_","isMouseActionButton_","handlePointerMove_","isMoving_","POINTERDRAG","dragging","DROP","keyFunction","priorityFunction_","keyFunction_","elements_","priorities_","queuedElements_","priorities","siftUp_","elementKey","siftDown_","getCount","getLeftChildIndex_","getRightChildIndex_","getParentIndex_","heapify_","isKeyQueued","isQueued","lIndex","rIndex","smallerChildIndex","reprioritize","tilePriorityFunction","tileChangeCallback","boundHandleTileChange_","handleTileChange","tileChangeCallback_","tilesLoading_","tilesLoadingKeys_","getTilesLoading","TileState","tileKey","loadMoreTiles","maxTotalLoading","maxNewLoads","newLoads","MapRenderer","dispatchRenderEvent","calculateMatrices2D","checkWrapped","layerFilter","thisArg2","translatedCoordinate","layerStates","numLayers","tmpCoord","layerState","hasRenderer","layerRenderer","getRenderer","distanceSq","hasFeatureAtCoordinate","scheduleExpireIconCache","canExpireCache","postRenderFunctions","expireIconCache","fontChangeListenerKey_","ObjectEventType","PROPERTYCHANGE","children_","renderedVisible_","hasListener","PRECOMPOSE","getDeclutter","declutter","mapCanvas","mapContext","setTransform","renderedLayerStates","previousElement","sourceState","getSourceState","unrender","globalAlpha","POSTCOMPOSE","renderDeferred","removeLayerMapProperty","Layer","setMapInternal","setLayerMapProperty","optionsInternal","keyboardEventTarget","interactions","MapProperty","LAYERGROUP","TARGET","VIEW","createOptionsInternal","renderComplete_","loaded_","boundHandleBrowserEvent_","handleBrowserEvent","maxTilesLoading_","maxTilesLoading","postRenderTimeoutHandle_","animationDelayKey_","animationDelay_","coordinateToPixelTransform_","pixelToCoordinateTransform_","frameIndex_","frameState_","viewPropertyListenerKey_","viewChangeListenerKey_","layerGroupPropertyListenerKeys_","viewport_","overlayContainer_","overlayContainerStopEvent_","mapBrowserEventHandler_","keyboardEventTarget_","targetChangeHandlerKeys_","targetElement_","resizeObserver_","ResizeObserver","updateSize","Zoom","Rotate","rotateOptions","Attribution","attributionOptions","onFocusOnly","overlays_","overlayIdIndex_","renderer_","postRenderFunctions_","tileQueue_","getTilePriority","handleTileChange_","handleLayerGroupChanged_","handleViewChanged_","handleSizeChanged_","handleTargetChanged_","viewOptions","CollectionEventType","addOverlayInternal_","getInteractions","addLayer","handleLayerAdd_","addOverlay","getOverlays","getCoordinateFromPixelInternal","getFeaturesAtPixel","getAllLayers","addLayersFrom","hasFeatureAtPixel","getEventCoordinateInternal","viewportPosition","viewportSize","eventPosition","getOverlayById","setLayers","getLoadingOrNotReady","getLayerStatesArray","viewCoordinate","getPixelFromCoordinateInternal","setPixelRatio","getOverlayContainer","getOverlayContainerStopEvent","tileSourceKey","tileCenter","tileResolution","wantedTiles","browserEvent","mapBrowserEvent","handleMapBrowserEvent","KEYDOWN","currentDoc","interactionsArray","propagationStopped","handlePostRender","tileQueue","hints","animatingOrInteracting","lowOnFrameBudget","RENDERCOMPLETE","MapEvent","MapEventType","LOADEND","LOADSTART","getAnimating","resolveConstraints","unobserve","Composite","targetRoot","KEYPRESS","handleViewPropertyChanged_","updateViewportSize_","handleLayerRemove_","isRendered","renderFrame_","renderSync","handleFontsChanged","removeOverlay","previousFrameState","isDef","getHints","usedTiles","renderTargets","nextCenter","nextResolution","nextRotation","nextExtent","MOVESTART","MOVEEND","POSTRENDER","setLayerGroup","oldLayerGroup","computedStyle","oldSize","setViewportSize","activePointers","POINTEROVER","POINTEROUT","POINTERENTER","POINTERLEAVE","ObjectEvent","BaseObject","values_","getKeys","getProperties","hasProperties","applyProperties","revision_","onInternal","onceInternal","ol_key","unInternal","unByKey","Overlay","insertFirst","stopEvent","autoPan","mapPostrenderListenerKey","handleElementChanged","handleMapChanged","handleOffsetChanged","handlePositionChanged","handlePositioningChanged","setElement","setPositioning","positioning","getPositioning","updatePixelPosition","performAutoPan","panIntoView","panIntoViewOptions","mapRect","overlayRect","myMargin","offsetRight","offsetBottom","getCenterInternal","centerPx","newCenterPx","panOptions","animateInternal","mapSize","updateRenderedPosition","posX","posY","getOptions","Tile","transition_","transitionStarts_","getTileCoord","inTransition","endTransition","TileRange","containsXY","containsTileRange","tileRange","createOrUpdate","createExtent","onlyCenter","centerShift","viewWidth","viewHeight","shiftX","shiftY","none","getViewportClampedResolution","maxExtent","showFullExtent","xResolution","yResolution","getSmoothClampedResolution","createMinMaxResolution","cappedMaxRes","hints_","animations_","updateAnimationKey_","projection_","viewportSize_","targetCenter_","targetResolution_","targetRotation_","nextCenter_","nextResolution_","nextRotation_","cancelAnchor_","ViewProperty","resolutionConstraintInfo","resolutionConstraint","minZoom","smoothResolutionConstraint","projExtent","constrainOnlyCenter","isGlobal","resolutions","constrainResolution","capped","createSnapToResolutions","defaultMaxResolution","getMetersPerUnit","defaultMinResolution","defaultMaxZoom","minZoomLevel","cappedZoomLevel","zoomLevel","newResolution","createSnapToPower","createResolutionConstraint","maxResolution_","minResolution_","zoomFactor_","resolutions_","padding_","minZoom_","centerConstraint","smoothExtentConstraint","createCenterConstraint","rotationConstraint","enableRotation","constrainRotation","createRotationConstraint","constraints_","setCenterInternal","oldPadding","newPadding","getUpdatedOptions_","var_args","animationCount","animationCallback","series","sourceCenter","targetCenter","sourceResolution","targetResolution","getResolutionForZoom","sourceRotation","targetRotation","isNoopAnimation","setHint","updateAnimations_","getInteracting","cancelAnimations","seriesComplete","getViewportSize_","constrainedResolution","calculateCenterZoom","applyTargetState_","constrainedRotation","calculateCenterRotate","currentCenter","currentResolution","getConstraints","getConstrainResolution","calculateExtentInternal","getViewportSizeMinusPadding_","getZoomForResolution","setMaxZoom","setMinZoom","setConstrainResolution","RESOLUTION","getResolutions","getResolutionForExtent","getResolutionForExtentInternal","getResolutionForValueFunction","getConstrainedResolution","getValueForResolutionFunction","logPower","reducedSize","calculateCenterOn","getViewStateAndExtent","baseLevel","geometryOrExtent","fitInternal","rotatedExtentForGeometry","minRotX","minRotY","maxRotX","maxRotY","rotX","rotY","rotatedExtent","centerRot","getConstrainedCenter","centerOn","centerOnInternal","calculateCenterShift","shiftedCenter","adjustCenter","deltaCoordinates","adjustCenterInternal","adjustResolution","adjustResolutionInternal","adjustZoom","adjustRotation","adjustRotationInternal","newRotation","doNotCancelAnims","forceMoving","resolutionDirection","beginInteraction","endInteraction","endInteractionInternal","getConstrainedZoom","targetZoom","targetRes","binarySearch","haystack","needle","linearFindNearest","reverseSubArray","arr1","arr2","len1","isSorted","assertion","NO_COLOR","colorParseContext","rgbModernRegEx","rgbLegacyAbsoluteRegEx","rgbLegacyPercentageRegEx","hexRegEx","toColorComponent","divider","throwInvalidColor","parseRgba","rgbDivider","colorFromHex","colorComponent","desynchronized","invalidCheckFillStyle","colorString","colorFromImage","asString","rgbaToLcha","lchaToRgba","asColorLike","getPattern","canvasPattern","iconImage","getImageState","patternCanvasContext","asCanvasPattern","ulElement_","collapsed_","userCollapsed_","overrideCollapsible_","collapsible_","attributions_","tipLabel","expandClassName","collapseLabel","collapseClassName","collapseLabel_","label_","activeLabel","toggleButton_","handleClick_","cssClasses","renderedAttributions_","collectSourceAttributions_","visibleAttributions","getAttributions","getAttributionsCollapsible","setCollapsible","updateElement_","handleToggle_","getCollapsible","setCollapsed","getCollapsed","mapEvent","Control","target_","FullScreen","keys_","source_","isInFullscreen_","boundHandleMapTargetChange_","handleMapTargetChange_","cssClassName_","documentListeners_","activeClassName_","activeClassName","inactiveClassName_","inactiveClassName","labelNode_","labelActive","labelActiveNode_","setClassName_","handleFullScreen_","isFullScreenSupported","isFullScreen","exitFullScreen","requestFullScreen","requestFullScreenWithKeys","handleFullScreenChange_","wasInFullscreen","COORDINATE_FORMAT","MousePosition","coordinateFormat","setCoordinateFormat","renderOnMouseOut_","placeholder_","renderedHTML_","mapProjection_","wrapX_","getCoordinateFormat","updateHTML_","handleMouseOut","OverviewMap","boundHandleRotationChanged_","handleRotationChanged_","rotateWithView_","rotateWithView","viewExtent_","ovmapDiv_","view_","ovmap","ovmap_","boxSizing","boxOverlay_","overlayBox","endMoving","oldView","unbindView_","handleMapPropertyChange_","bindView_","updateBoxAfterOvmapIsRendered_","newView","resetExtent_","validateExtent_","ovmapSize","ovextent","topLeftPixel","bottomRightPixel","boxWidth","boxHeight","ovmapWidth","ovmapHeight","recenter_","ovview","MAX_RATIO","updateBox_","ovresolution","ovmapPostrenderKey_","getRotateWithView","setRotateWithView","getOverviewMap","compassClassName","callResetNorth_","resetNorth","duration_","autoHide_","rotation_","resetNorth_","UNITS_PROP","LEADING_DIGITS","DEFAULT_DPI","ScaleLine","innerElement_","viewState_","minWidth_","maxWidth_","renderedWidth_","handleUnitsChanged_","setUnits","scaleBar_","scaleBarSteps_","scaleBarText_","dpi_","getUnits","setDpi","pointResolutionUnits","pointResolution","nominalCount","metersPerDegree","decimalCount","previousWidth","previousDecimalCount","previousCount","createScaleBar","getScaleForResolution","mapScale","stepWidth","scaleSteps","createMarker","createStepText","isLast","lengthString","zoomInClassName","zoomOutClassName","zoomInLabel","zoomOutLabel","zoomInTipLabel","zoomOutTipLabel","inElement","outElement","zoomByDelta_","currentZoom","newZoom","ZoomToExtent","fitOptions","handleZoomToExtent","closestOnSegment","along","createStringXY","fractionDigits","toStringXY","degreesToStringHDMS","hemispheres","normalizedDegrees","decimals","sec","hdms","coordinate1","coordinate2","squaredDistance","coord1","coord2","squaredDistanceToSegment","toStringHDMS","worldsAway","getWorldsAway","sourceExtentWidth","lenA","tangentA","orthoA","lenB","tangentB","CLASS_HIDDEN","CLASS_SELECTABLE","CLASS_UNSELECTABLE","CLASS_UNSUPPORTED","CLASS_CONTROL","CLASS_COLLAPSED","fontRegEx","fontRegExMatchIndex","fontWeights","getFontParameters","fontSpec","families","createCanvasContext2D","canvasPool","sharedCanvasContext","getSharedCanvasContext2D","releaseCanvas","replaceNode","oldChildren","oldChild","createMockDiv","referenceNode","isCanvas","easeIn","easeOut","inAndOut","originalListener","eventsKey","listenOnce","unlistenByKey","BLUR","DRAGENTER","DRAGOVER","FOCUS","RESIZE","eventTarget_","pendingRemovals_","dispatching_","listeners_","listenersForType","dispatching","pendingRemovals","propagate","getListeners","altKeyOnly","altShiftKeysOnly","focusWithTabindex","mouseActionButton","never","singleClick","noModifierKeys","platformModifierKey","shiftKeyOnly","targetNotEditable","isContentEditable","mouseOnly","primaryAction","isPrimary","newEvaluationContext","buildExpression","compileExpression","colorValue","Coalesce","compileAssertionExpression","Get","Var","Has","compileAccessorExpression","GeometryType","Concat","Resolution","Any","All","Between","Not","compileLogicalExpression","Equal","NotEqual","LessThan","LessThanOrEqualTo","GreaterThan","GreaterThanOrEqualTo","compileComparisonExpression","Multiply","Divide","Add","Subtract","Clamp","Mod","Pow","Abs","Floor","Ceil","Round","Sin","Cos","Atan","Sqrt","compileNumericExpression","Case","compileCaseExpression","Match","compileMatchExpression","Interpolate","previousInput","previousOutput","isColor","interpolateColor","compileInterpolateExpression","ToString","compileConvertExpression","input1","output1","input2","output2","rgba1","rgba2","lcha1","lcha2","deltaHue","lcha","numTypes","BooleanType","NumberType","StringType","NumberArrayType","SizeType","AnyType","typeNames","namedTypes","namedType","includesType","broad","specific","overlapsType","oneType","otherType","LiteralExpression","isSpecific","CallExpression","newParsingContext","inputVariables","mapState","expectedType","parseCallExpression","Ops","LineMetric","Time","Band","Palette","createCallExpressionParser","hasArgsCount","withGetArgs","variableValue","parsedInput","existingType","withNoArgs","withArgsOfType","usesMapState","withArgsOfIdenticalType","withArgsOfReturnType","hasEvenArgs","argsCount","interpolationType","argCount","needleType","parsedColors","minArgs","maxArgs","argType","commonType","validators","computeGeometryType","getGeometries","numberToGlsl","arrayToGlsl","colorToGlsl","stringToFloatMap","stringToFloatCounter","getStringNumberEquivalent","stringToGlsl","uniformNameForVariable","newCompilationContext","GET_BAND_VALUE_FUNC","FEATURE_ID_PROPERTY_NAME","GEOMETRY_TYPE_PROPERTY_NAME","UNDEFINED_PROP_VALUE","parsingContext","compilationContext","createCompiler","compilers","compiledArgs","firstValue","secondValue","stop1","stop2","computeOperatorFunctionName","tests","band","ifBlocks","bandIndex","TILE_TEXTURE_ARRAY","TEXTURE_PIXEL_WIDTH","TEXTURE_PIXEL_HEIGHT","paletteTextures","paletteName","paletteTexture","compiler","boundingExtent","extendCoordinate","closestSquaredDistanceXY","containsCoordinate","containsExtent","extent1","extent2","coordinateRelationship","relationship","UNKNOWN","BELOW","ABOVE","createEmpty","createOrUpdateEmpty","createOrUpdateFromCoordinate","createOrUpdateFromFlatCoordinates","flatCoordinates","extendFlatCoordinates","extendXY","forEachCorner","getBottomLeft","getBottomRight","getTopRight","getTopLeft","getArea","getForViewAndSize","getRotatedViewport","xCos","xSin","yCos","ySin","getIntersection","getDifference","ix1","iy1","ix2","iy2","returnOrUpdate","scaleFromCenter","intersectsSegment","startRel","endRel","transformFn","_boundingExtentXYs","wrapAndSliceX","subtractExtents","loadFeaturesXhr","readFeatures","featureProjection","readProjection","dataProjection","defaultFeatureProjection","featureClass","supportedMediaTypes","getReadOptions","setWorldExtent","adaptOptions","readFeature","readGeometry","writeFeature","writeFeatures","writeGeometry","transformGeometryWithOptions","fromProjection","toProjection","GeometryConstructor","createRenderFeature","orientFlatCoordinates","enableSimplifyTransformed","JSONFeature","readFeatureFromObject","getObject","readFeaturesFromObject","readGeometryFromObject","readProjectionFromObject","writeFeatureObject","writeFeaturesObject","writeGeometryObject","readGeometryInternal","readPointGeometry","readLineStringGeometry","readPolygonGeometry","readMultiPointGeometry","readMultiLineStringGeometry","readMultiPolygonGeometry","readGeometryCollectionGeometry","geoJSON","writePointGeometry","writeLineStringGeometry","rightHanded","writePolygonGeometry","writeMultiPointGeometry","writeMultiLineStringGeometry","writeMultiPolygonGeometry","writeGeometryCollectionGeometry","extractGeometryName_","extractGeometryName","geoJSONFeature","FeatureClass","geoJSONFeatures","featureObject","geometryObject","XMLFeature","xmlSerializer_","readFeatureFromDocument","readFeatureFromNode","readFeaturesFromDocument","readFeaturesFromNode","readGeometryFromDocument","readGeometryFromNode","readProjectionFromDocument","readProjectionFromNode","writeFeatureNode","writeFeaturesNode","writeGeometryNode","GX_NAMESPACE_URIS","NAMESPACE_URIS","ICON_ANCHOR_UNITS_MAP","PLACEMARK_PARSERS","extendedDataParser","regionParser","readMultiGeometry","readLineString","readLinearRing","readPoint","readPolygon","readStyle","objectStack","styleMapValue","readStyleMapValue","placemarkObject","readStyleURL","GX_MULTITRACK_GEOMETRY_PARSERS","readGxTrack","NETWORK_LINK_PARSERS","LINK_PARSERS","readURI","CAMERA_PARSERS","Altitude","Tilt","AltitudeMode","Heading","Roll","REGION_PARSERS","LAT_LON_ALT_BOX_PARSERS","regionObject","LOD_PARSERS","lodObject","KML_SEQUENCE","KML_SERIALIZERS","DOCUMENT_SERIALIZERS","DOCUMENT_NODE_FACTORY","writePlacemark","DEFAULT_COLOR","DEFAULT_IMAGE_STYLE_ANCHOR","DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS","DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS","DEFAULT_IMAGE_STYLE_SIZE","DEFAULT_IMAGE_STYLE_SRC","DEFAULT_NO_IMAGE_STYLE","DEFAULT_TEXT_STROKE_STYLE","TEXTAREA","DEFAULT_FILL_STYLE","DEFAULT_IMAGE_STYLE","DEFAULT_STROKE_STYLE","DEFAULT_TEXT_STYLE","DEFAULT_STYLE","DEFAULT_STYLE_ARRAY","scaleForSize","defaultIconUrlFunction","findStyle","styleValue","sharedStyles","readColor","hexColor","readFlatCoordinates","readScale","STYLE_MAP_PARSERS","pairObject","PAIR_PARSERS","ICON_STYLE_PARSERS","iconObject","ICON_PARSERS","xunits","yunits","LABEL_STYLE_PARSERS","LINE_STYLE_PARSERS","POLY_STYLE_PARSERS","FLAT_LINEAR_RING_PARSERS","readFlatLinearRing","GX_TRACK_PARSERS","whens","gxTrackObject","GEOMETRY_FLAT_COORDINATES_PARSERS","readFlatCoordinatesFromNode","EXTRUDE_AND_ALTITUDE_MODE_PARSERS","lineString","MULTI_GEOMETRY_PARSERS","multiGeometry","homogeneous","setCommonGeometryProperties","FLAT_LINEAR_RINGS_PARSERS","innerBoundaryFlatLinearRings","INNER_BOUNDARY_IS_PARSERS","flatLinearRing","OUTER_BOUNDARY_IS_PARSERS","flatLinearRings","STYLE_PARSERS","styleObject","IconObject","anchorXUnits","anchorYUnits","anchorOrigin","imageStyle","Icon","offsetOrigin","iconUrlFunction_","imageScale","getScaleArray","imageState","ImageState","resizeScale","unlistenImageChange","listenImageChange","textStyle","Text","Fill","Stroke","getGeometriesArrayRecursive","extrudes","tessellates","altitudeModes","hasExtrude","hasTessellate","hasAltitudeMode","DATA_PARSERS","EXTENDED_DATA_PARSERS","SCHEMA_DATA_PARSERS","writeColorTextNode","abgr","EXTENDEDDATA_NODE_SERIALIZERS","DATA_NODE_FACTORY","ICON_SEQUENCE","ICON_SERIALIZERS","GX_NODE_FACTORY","ICON_STYLE_SEQUENCE","ICON_STYLE_SERIALIZERS","orderedKeys","vec2","writeScaleTextNode","LABEL_STYLE_SEQUENCE","LABEL_STYLE_SERIALIZERS","LINE_STYLE_SEQUENCE","LINE_STYLE_SERIALIZERS","GEOMETRY_TYPE_TO_NODENAME","GEOMETRY_NODE_FACTORY","POINT_NODE_FACTORY","LINE_STRING_NODE_FACTORY","LINEAR_RING_NODE_FACTORY","POLYGON_NODE_FACTORY","MULTI_GEOMETRY_SERIALIZERS","writePrimitiveGeometry","writePolygon","writeMultiGeometry","getPoints","getLineStrings","getPolygons","BOUNDARY_IS_SERIALIZERS","writeBoundaryIs","PLACEMARK_SERIALIZERS","namesAndValues","pointStyles","lineStyles","getStroke","polyStyles","STYLE_SEQUENCE","STYLE_SERIALIZERS","PLACEMARK_SEQUENCE","EXTENDEDDATA_NODE_FACTORY","styleFunction","styleArray","getGeometryFunction","writeStyles_","PRIMITIVE_GEOMETRY_SEQUENCE","PRIMITIVE_GEOMETRY_SERIALIZERS","POLY_STYLE_SEQUENCE","POLYGON_SERIALIZERS","INNER_BOUNDARY_NODE_FACTORY","OUTER_BOUNDARY_NODE_FACTORY","linearRings","getLinearRings","POLY_STYLE_SERIALIZERS","getSrc","iconImageSize","iconProperties","getOrigin","getFill","defaultStyle_","extractStyles_","extractStyles","writeStyles","sharedStyles_","showPointNames_","showPointNames","iconUrlFunction","readDocumentOrFolder_","parsersNS","readPlacemark_","readSharedStyle_","readSharedStyleMap_","drawName","multiGeometryPoints","featureStyle","nameStyle","foundStyle","textOffset","setFont","getFont","setFill","setStroke","setText","setOffsetY","setTextAlign","createNameStyleFunction","styleUri","readName","readNameFromDocument","readNameFromNode","readNetworkLinks","readNetworkLinksFromDocument","readNetworkLinksFromNode","readRegion","readRegionFromDocument","readRegionFromNode","readCamera","readCameraFromDocument","readCameraFromNode","xmlnsUri","TextFeature","readFeatureFromText","readFeaturesFromText","readGeometryFromText","readProjectionFromText","writeFeatureText","writeFeaturesText","writeGeometryText","wktTypeLookup","Circle","Lexer","index_","isAlpha_","isNumeric_","isWhiteSpace_","nextChar_","nextToken","readNumber_","readText_","scientificNotation","lexer","lexer_","token_","layout_","consume_","isTokenType","parseGeometry_","parseGeometryLayout_","dimToken","dimInfo","parseGeometryCollectionText_","formatErrorMessage_","parsePointText_","parsePoint_","parseLineStringText_","parsePointList_","parsePolygonText_","parseLineStringTextList_","parseMultiPointText_","parsePointTextList_","parseMultiLineStringText_","parseMultiPolygonText_","parsePolygonTextList_","isEmptyGeometry_","geomType","encodePointGeometry","encodeLineStringGeometry","encodePolygonGeometry","rings","GeometryEncoder","geoms","geometryEncoder","wktType","encodeGeometryLayout","splitCollection_","splitCollection","parse_","readFromDocument","readFromNode","readHref","PARSERS","SERVICE_IDENTIFICATION_PARSERS","SERVICE_PROVIDER_PARSERS","OPERATIONS_METADATA_PARSERS","ADDRESS_PARSERS","ALLOWED_VALUES_PARSERS","CONSTRAINT_PARSERS","CONTACT_INFO_PARSERS","PHONE_PARSERS","DCP_PARSERS","HTTP_PARSERS","REQUEST_METHOD_PARSERS","OPERATION_PARSERS","SERVICE_CONTACT_PARSERS","OWS_NAMESPACE_URIS","CONTENTS_PARSERS","LAYER_PARSERS","TMS_PARSERS","TMS_LINKS_PARSERS","DIMENSION_PARSERS","resourceType","readBoundingBox","WGS84_BBOX_READERS","TMS_LIMITS_LIST_PARSERS","TMS_LIMITS_PARSERS","TM_PARSERS","owsParser_","WMTSCapabilityObject","readBoolean","readBooleanString","readDecimal","readDecimalString","readPositiveInteger","readNonNegativeIntegerString","writeBooleanTextNode","writeStringTextNode","writeDecimalTextNode","whiteSpaceStart","whiteSpaceEnd","cdataCharacters","writeCDATASection","TRUE","FALSE","VOID","memoizeOne","lastResult","nextArgs","toPromise","promiseGetter","tmpPoint","extentRevision_","simplifiedGeometryMaxMinSquaredTolerance","simplifiedGeometryRevision","simplifyTransformedInternal","squaredTolerance","getSimplifiedGeometry","simplifyTransformed","closestPointXY","minSquaredDistance","getClosestPoint","intersectsCoordinate","computeExtent","intersectsExtent","sourceProj","inCoordinates","outCoordinates","pixelExtent","projectedExtent","getWorldExtent","projTransform","geometries_","changeEventsKeys_","listenGeometriesChange_","unlistenGeometriesChange_","cloneGeometries","geometriesArray","simplifiedGeometries","simplifiedGeometry","setGeometries","setGeometriesArray","flatMidpoint_","flatMidpointRevision_","maxDelta_","maxDeltaRevision_","setCoordinates","setFlatCoordinates","appendCoordinate","forEachSegment","getCoordinateAtM","extrapolate","getCoordinateAt","getFlatMidpoint","getSimplifiedGeometryInternal","simplifiedFlatCoordinates","setLayout","ends_","appendLineString","multiLineString","getLineString","getFlatMidpoints","midpoints","simplifiedEnds","appendPoint","multiPoint","endss","endss_","flatInteriorPointsRevision_","flatInteriorPoints_","orientedRevision_","orientedFlatCoordinates_","thisEndss","appendPolygon","newEndss","multiPolygon","getOrientedFlatCoordinates","getFlatInteriorPoints","flatCenters","getInteriorPoints","simplifiedEndss","getPolygon","prevEnds","lastEnds","SimpleGeometry","flatInteriorPointRevision_","flatInteriorPoint_","appendLinearRing","getFlatInteriorPoint","flatCenter","getInteriorPoint","getLinearRingCount","circular","sphereRadius","fromExtent","fromCircle","sides","makeRegular","getFirstCoordinate","getLastCoordinate","getStrideForLayout","nesting","getLayoutForStride","transformGeom2D","simpleGeometry","twiceArea","dx1","dy1","dx2","dy2","linearRingss","assignClosest","offset1","offset2","maxSquaredDelta","squaredDelta","arrayMaxSquaredDelta","multiArrayMaxSquaredDelta","assignClosestPoint","maxDelta","isRing","assignClosestArrayPoint","assignClosestMultiArrayPoint","linearRingContainsExtent","linearRingContainsXY","linearRingsContainsXY","linearRingssContainsXY","deflateCoordinate","deflateCoordinates","deflateCoordinatesArray","coordinatess","deflateMultiCoordinatesArray","coordinatesss","inflateCoordinates","inflateCoordinatesArray","inflateMultiCoordinatesArray","getInteriorPointOfArray","flatCentersOffset","pointX","maxSegmentLength","getInteriorPointsOfMultiArray","interiorPoints","interpolatePoint","cumulativeLengths","lineStringCoordinateAtM","lineStringsCoordinateAtM","intersectsLineString","coordinatesExtent","intersectsLineStringArray","intersectsLinearRing","intersectsLinearRingArray","intersectsLinearRingMultiArray","lineStringLength","offsetLineString","isClosedRing","destinationStride","secondPointX","secondPointY","secondToLastPointX","secondToLastPointY","prevX","prevY","nextX","nextY","offsetLineVertex","joinAngle","removeOffsetCycles","closedLine","p1x","p2x","p3x","p3y","p4x","p4y","linearRingIsClockwise","linearRingsAreOriented","isClockwise","linearRingssAreOriented","orientLinearRings","orientLinearRingsArray","inflateEnds","startOrientation","prevEndIndex","douglasPeucker","simplifiedOffset","markers","maxSquaredDistance","douglasPeuckerArray","quantizeArray","quantizeMultiArray","segmenter","drawTextOnPath","startM","measureAndCacheTextWidth","keepUpright","segmentM","advance","beginX","beginY","endM","singleSegment","previousAngle","Segmenter","charLength","transform2D","SAFARI_BUG_237906","WEBKIT","MAC","DEVICE_PIXEL_RATIO","WORKER_OFFSCREEN_CANVAS","IMAGE_DECODE","CREATE_IMAGE_BITMAP","PASSIVE_EVENT_LISTENERS","DoubleClickZoom","delta_","DragPan","stopDown","kinetic_","kinetic","lastCentroid","lastPointersCount_","panning_","condition_","noKinetic_","targetPointers","centerpx","DragRotate","lastAngle_","RenderBox","geometry_","startPixel_","endPixel_","render_","startPixel","endPixel","setPixels","createOrUpdateGeometry","DragBoxEventType","DragBoxEvent","DragBox","Pointer","box_","minArea_","minArea","onBoxEnd","boxEndCondition_","boxEndCondition","defaultBoxEndCondition","completeBox","out_","getRadiusSquared_","circleExtent","DrawEventType","DrawEvent","Draw","pointerOptions","options_","shouldHandle_","downPx_","downTimeout_","lastDragTime_","pointerType_","freehand_","snapTolerance_","type_","stopClick_","stopClick","ignoreNextUpEvent_","minPoints_","minPoints","maxPoints_","finishCondition_","finishCondition","geometryLayout_","geometryLayout","squaredLength","geometryFunction_","dragVertexDelay_","dragVertexDelay","finishCoordinate_","sketchFeature_","sketchPoint_","sketchCoords_","sketchLine_","sketchLineCoords_","squaredClickTolerance_","clickTolerance","overlay_","Vector","getDefaultStyleFunction","freehandCondition_","freehand","freehandCondition","traceCondition_","setTrace","traceState_","traceSource_","traceSource","updateState_","setFreehand","getOverlay","getFreehand","addToDrawing_","getPointerCount","startDrawing_","deactivateTrace_","toggleTraceState_","getFeaturesInExtent","startCoord","addOrRemoveTracedCoordinates_","previouslyForward","addTracedCoordinates_","removeTracedCoordinates_","toIndex","removeLastPoints_","appendCoordinates","updateTrace_","traceState","startPx","updatedTraceTarget","oldTarget","newTarget","tracing","startingToDraw","finishDrawing","atFinish_","abortDrawing","downPx","clickPx","modifyDrawing_","createOrUpdateSketchPoint_","potentiallyDone","potentiallyFinishCoordinates","sketchCoords","finishCoordinate","finishPixel","updateSketchFeatures_","createOrUpdateCustomSketchLine_","sketchLineGeom","removeLastPoint","sketchFeature","abortDrawing_","newDrawing","sketchFeatures","overlaySource","boxCoordinates","Interaction","zoomByDelta","KeyboardPan","defaultCondition_","pixelDelta_","pixelDelta","keyEvent","Key","mapUnitsDelta","KeyboardZoom","tempExtent","tempSegment","ModifyEventType","getCoordinatesArray","ModifyEvent","Modify","handleSourceAdd_","handleSourceRemove_","handleExternalCollectionAdd_","handleExternalCollectionRemove_","handleFeatureChange_","defaultDeleteCondition_","deleteCondition_","deleteCondition","insertVertexCondition_","insertVertexCondition","vertexFeature_","vertexSegments_","lastCoordinate_","ignoreNextSingleClick_","featuresBeingModified_","rBush_","pixelTolerance_","snappedToVertex_","changingFeature_","dragSegments_","SEGMENT_WRITERS_","writePointGeometry_","writeLineStringGeometry_","writePolygonGeometry_","writeMultiPointGeometry_","writeMultiLineStringGeometry_","writeMultiPolygonGeometry_","writeCircleGeometry_","writeGeometryCollectionGeometry_","traceSegments_","hitDetection_","filterFunctionWasSupplied_","coordinatesEqual_","sharedVerticesEqual","featuresCollection_","hitDetection","addFeature_","lastPointerEvent_","snapToPointer_","snapToPointer","handlePointerAtPixel_","willModifyFeatures_","removeFeature_","removeFeatureSegmentData_","rBush","nodesToRemove","nodeToRemove","externalAddFeatureHandler_","externalRemoveFeatureHandler_","segmentData","centerSegmentData","circumferenceSegmentData","featureSegments","createOrUpdateVertexFeature_","vertexFeature","handled","handlingDownUpSequence","findInsertVerticesAndUpdateDragSegments_","pixelCoordinate","insertVertices","vertexExtent","segmentDataMatches","getInExtent","componentSegments","compareIndexes","segmentDataMatch","closestVertex","closestOnSegmentData","tracePassesVertex_","closestTargetDistance","candidateTarget","snapTarget","snappedVertex","dragSegment","updateGeometry_","getTraceCandidates_","shiftTracedSegmentIndices_","traceSegmentData","atIndex","traceSegment","removeIndex","setGeometryCoordinates_","newCoordinates","mRing","mTargetIndex","startTraceCoord","insertVertex_","tracedFeatures","sortByDistance","projectedDistanceToSegmentDataSquared","hitPointGeometry","viewExtent","closestSegment","vertexPixel","vertexSegments","pixel1","pixel2","squaredDist1","squaredDist2","geometryUid","rTree","updateSegmentIndices_","newSegmentData","newSegmentData2","updatePointer_","canRemovePoint","removeVertex_","dragSegments","segmentsByFeature","deleted","canInsertPoint","forEachInExtent","pointCoordinates","distanceToCenterSquared","distanceToCircumference","MouseWheelZoom","totalDelta_","lastDelta_","timeout_","useAnchor_","useAnchor","constrainResolution_","lastAnchor_","startTime_","timeoutId_","trackpadEventGap_","trackpadTimeoutId_","deltaPerZoom_","ctrlKeyPressed_","ctrlKeyListenerKeys_","endInteraction_","isPinchToZoom","WheelEvent","DOM_DELTA_PAGE","timeLeft","handleWheelZoom_","setMouseAnchor","PinchRotate","anchor_","rotating_","rotationDelta_","threshold_","rotationDelta","touch0","touch1","PinchZoom","lastDistance_","lastScaleDelta_","scaleDelta","PointerInteraction","updateTrackedPointers_","handledUp","altShiftDragRotate","doubleClickZoom","zoomDelta","zoomDuration","dragPan","pinchRotate","pinchZoom","mouseWheelZoom","shiftDragZoom","getCoordinate","interpolateCoordinate","sharedUpdateInfo","getTraceTargetUpdate","newTargetIndex","newEndIndex","minSegmentDistance","coordinateIndex","getPointSegmentRelationship","considerBothDirections","newCoordinate","forwardDistance","getCumulativeSquaredDistance","reverseDistance","getTraceTargets","appendGeometryTraceTargets","appendTraceTarget","polys","getSquaredDistance","lowIndex","highIndex","lowWholeIndex","highWholeIndex","sharedRel","BaseLayer","background_","VISIBLE","Z_INDEX","MAX_RESOLUTION","MIN_RESOLUTION","MIN_ZOOM","MAX_ZOOM","className_","state_","getBackground","getLayerState","getZIndex","getLayersArray","EXTENT","setExtent","setMaxResolution","setMinResolution","setZIndex","BaseTileLayer","useInterimTilesOnError","cacheSize_","setPreload","setUseInterimTilesOnError","getCacheSize","getPreload","getUseInterimTilesOnError","USE_INTERIM_TILES_ON_ERROR","flatStylesToStyleFunction","flatStyles","evaluators","buildStyle","evaluationContext","nonNullCount","evaluateFill","buildFill","evaluateStroke","buildStroke","evaluateText","stringEvaluator","evaluateBackgroundFill","evaluateBackgroundStroke","evaluateFont","evaluateMaxAngle","numberEvaluator","evaluateOffsetX","evaluateOffsetY","evaluateOverflow","booleanEvaluator","evaluatePlacement","evaluateRepeat","evaluateScale","sizeLikeEvaluator","evaluateRotateWithView","evaluateRotation","evaluateAlign","evaluateJustify","evaluateBaseline","evaluateKeepUpright","evaluatePadding","numberArrayEvaluator","declutterMode","optionalDeclutterMode","setBackgroundFill","setBackgroundStroke","setMaxAngle","setOverflow","setPlacement","setRepeat","justify","setJustify","textBaseline","setTextBaseline","setPadding","setKeepUpright","buildText","evaluateImage","srcName","requireString","evaluateAnchor","coordinateEvaluator","evaluateOpacity","evaluateDisplacement","optionalIconOrigin","optionalIconAnchorUnits","getExpressionValue","colorLikeEvaluator","requireColorLike","optionalString","requireNumberArray","optionalNumberArray","optionalNumber","iconOptions","optionalSize","setAnchor","buildIcon","pointsName","radiusName","requireNumber","evaluateRadius","initialRadius","radius2Name","evaluateRadius2","initialRadius2","RegularShape","setRadius2","buildShape","buildCircle","buildImage","evaluateZIndex","srcEvaluator","offsetEvaluator","sizeEvaluator","patternSizeEvaluator","colorEvaluator","patternEvaluator","evaluateWidth","evaluateLineCap","evaluateLineJoin","evaluateLineDash","evaluateLineDashOffset","evaluateMiterLimit","evaluateOffset","setWidth","lineCap","setLineCap","setLineJoin","setLineDash","setLineDashOffset","setMiterLimit","evaluator","requireSize","BaseVectorLayer","declutter_","renderBuffer_","updateWhileAnimating_","updateWhileInteracting_","getRenderOrder","getUpdateWhileAnimating","getUpdateWhileInteracting","declutterGroup","renderOrder","styleLike","flatStyleLike","compiledRules","styleLength","someMatched","filterEvaluator","styleEvaluator","buildRuleSet","rulesToStyleFunction","flatStyleLikeToStyleFunction","toStyleLike","setDeclutter","VELOCITY_TEXTURE","POSITION_TEXTURE","PARTICLE_COUNT_SQRT","MAX_SPEED","GAIN","OFFSET","IS_FLOAT","RANDOM_SEED","SPEED_FACTOR","DROP_RATE","DROP_RATE_BUMP","VIEWPORT_SIZE_PX","FlowLayerRenderer","tileVertexShader","tileFragmentShader","maxSpeed","particleColorFragmentShader_","particleColorFragmentShader","velocityTexture_","particleCountSqrt_","particleIndexBuffer_","quadBuffer_","particlePositionProgram_","particlePositionVertexShader_","particlePositionVertexShader","particlePositionFragmentShader_","particlePositionFragmentShader","previousPositionTexture_","nextPositionTexture_","particleColorProgram_","particleColorVertexShader_","particleColorVertexShader","textureProgram_","textureVertexShader_","textureVertexShader","textureFragmentShader_","textureFragmentShader","previousTrailsTexture_","nextTrailsTexture_","fadeOpacity_","maxSpeed_","speedFactor_","speedFactor","dropRate_","dropRateBump_","tempVec2_","renderedHeight_","particleCount","particleIndices","particleIndexBuffer","setArray","quadIndices","quadBuffer","particlePositions","createSizeDependentTextures_","blank","beforeFinalize","drawParticleTrails_","updateParticlePositions_","bindFrameBuffer","drawTexture_","drawParticleColor_","bindInitialFrameBuffer","blendFunc","bindAttribute","setUniformFloatValue","TEXTURE_COORD","TILE_TRANSFORM","TEXTURE_RESOLUTION","quadVertexShader","FlowLayer","BaseTile","particles_","SOURCE","handleSourceUpdate_","getSources","parsedStyle","uniformDeclarations","functionDefintions","parseStyle","GroupEventType","GroupEvent","LayerGroup","layersListenerKeys_","listenerKeys_","handleLayersChanged_","handleLayerChange_","handleLayersAdd_","handleLayersRemove_","layersArray","registerLayerListeners_","handleLayerGroupAdd_","handleLayerGroupRemove_","collectionEvent","currentLayers","ownLayerState","CanvasImageLayerRenderer","imageLayer","renderedSourceRevision_","viewResolution","imageSource","renderedExtent","imageExtent","imageMapWidth","imageMapHeight","imageResolution","imageResolutionX","imageResolutionY","imagePixelRatio","viewCenter","prepareContainer","getRenderContext","clipped","clipUnrotated","tempTransform","getInterpolate","BaseImageLayer","BaseImage","mapPrecomposeKey_","mapRenderKey_","sourceChangeKey_","sourceReady_","handleSourcePropertyChange_","setSource","getRenderSource","handleSourceChange_","getMapInternal","inView","MAP","handlePrecompose_","renderEvent","arrayLayerState","TileLayer","CanvasVectorLayerRenderer","vectorLayer","boundHandleStyleImageChange_","handleStyleImageChange_","animatingOrInteracting_","hitDetectionImageData_","clipExtent_","extendX_","renderedFeatures_","renderedRevision_","renderedResolution_","renderedExtent_","wrappedRenderedExtent_","renderedRotation_","renderedCenter_","renderedProjection_","renderedPixelRatio_","renderedRenderOrder_","renderedFrameDeclutter_","replayGroup_","replayGroupChanged","clipping","targetContext_","opacity_","executorGroup","declutterable","snapToPixel","getRenderTransform","setDrawContext_","resetDrawContext_","renderDeferredInternal","replayGroup","PRERENDER","renderIfReadyAndVisible","interacting","frameStateExtent","vectorLayerRevision","vectorLayerRenderBuffer","vectorLayerRenderOrder","loadExtents","sourceExtent","gutter","projMinX","projMaxX","loadExtent","userTransform","userExtent","renderFeature","replayGroupInstructions","ExecutorGroup","getOverlaps","builderGroup","VectorLayer","IMAGE_REPLAYS","VECTOR_REPLAYS","CanvasVectorTileLayerRenderer","renderedLayerRevision_","renderedPixelToCoordinateTransform_","renderedOpacity_","tmpTransform_","tileClipContexts_","enqueueTilesForNextExtent","getRenderMode","clipRects","updateExecutorGroup_","tileImageNeedsRender_","renderTileImage_","getTile","getOrCreateTile","tileGrid","getTileGridForProjection","hifi","withinTileResolutionRange","getZForResolution","wantedResolution","layerRevision","builderState","getReplayState","renderedRevision","renderedPixelRatio","renderedRenderOrder","sourceTileGrid","getTileGrid","tileExtent","getTileCoordExtent","wrappedTileCoord","sourceTiles","getSourceTiles","layerUid","hitDetectionImageData","executorGroups","sourceProjection","sourceTileCoord","sourceTileExtent","sharedExtent","builderExtent","bufferedExtent","executorGroupInstructions","replayExtent","renderingReplayGroup","hitExtent","featureCallback","declutteredFeatures","foundFeature","renderedProjection","tileCoordString","getTileCoordForCoordAndResolution","loadingSourceTiles","tilePixel","getTileSize","getTileCoordCenter","getTileCache","visitedSourceTiles","tileFeatures","scaledCanvasSize","declutterTree","getTileRenderTransform","executorGroupZIndexContexts","getDeferredZIndexContexts","usedZIndices","executorGroupZindexContext","zIndexKeys","zIndexContexts","zIndexContext","getRenderedContext","tileClipContext","worldOffset","inversePixelTransform","clipTileContext_","clipContext","currentExtent","clips","clipZs","currentZ","covered","renderMode","replayTypes","tileSource","tileClipContexts","hasExecutors","contextSaved","worldClip","getClipCoords","ZIndexContext","replayState","renderedTileResolution","renderedTileRevision","renderPixelRatio","getTilePixelSize","renderScale","canvasTransform","VectorTileLayer","renderMode_","TileProperty","squaredSegmentDistance","solveLinearSystem","mat","maxRow","maxEl","absValue","angleInRadians","angleInDegrees","HALF_SIZE","WORLD_EXTENT","MAX_SAFE_Y","EPSG3857Projection","worldExtent","getPointResolution","METERS_PER_UNIT","EPSG4326Projection","axisOrientation","metersPerUnit","E_P2","SQRT_E","_E2","_E3","_E4","_E5","toLonLat","pRad","pSin","pSin2","pCos","pTan","pTan2","pTan4","epSin","epSinSqrt","zoneToCentralLongitude","fromLonLat","latRad","latSin","latCos","latTan","latTan2","latTan4","lonRad","centralLon","centralLonRad","epsgRegExes","zoneFromCode","epsgId","makeTransformFunction","transformFactories","projectionFactories","showCoordinateWarning","disableCoordinateWarning","cloneTransform","identityTransform","addProjection","projectionLike","makeProjection","getPointResolutionFunc","projUnits","toEPSG4326","getTransformFromProjections","addEquivalentProjections","addProjections","createProjection","defaultCode","createTransformFromCoordinateTransform","coordTransform","pointLength","addCoordinateTransforms","destProj","equivalent","projection1","projection2","equalUnits","sourceCode","destinationCode","transformFunc","sourceTransforms","destinationTransforms","makeTransforms","intermediateCode","composeTransformFuncs","fromSource","toDestination","transformExtent","getUserProjection","toUserCoordinate","fromUserCoordinate","destProjection","toUserExtent","fromUserExtent","toUserResolution","createSafeCoordinateTransform","projections2","forwardTransform","code_","units_","worldExtent_","axisOrientation_","global_","canWrapX_","getPointResolutionFunc_","defaultTileGrid_","metersPerUnit_","getAxisOrientation","setGlobal","getDefaultTileGrid","setDefaultTileGrid","setGetPointResolution","projCodes","code1","proj1","code2","proj2","toContext","RenderEvent","RenderFeature","flatCoordinates_","flatMidpoints_","properties_","squaredTolerance_","stride_","simplifiedGeometry_","drawCustom","hitDetectionRenderer","drawGeometry","drawCircle","drawFeature","drawGeometryCollection","geometryCollectionGeometry","drawLineString","drawMultiLineString","multiLineStringGeometry","drawMultiPoint","multiPointGeometry","drawMultiPolygon","multiPolygonGeometry","drawPoint","drawPolygon","drawText","setFillStrokeStyle","setImageStyle","declutterImageWithText","setTextStyle","defaultFont","defaultFillStyle","defaultLineCap","defaultLineDash","defaultLineDashOffset","defaultLineJoin","defaultMiterLimit","defaultStrokeOffset","defaultStrokeStyle","defaultTextAlign","defaultTextBaseline","defaultPadding","defaultLineWidth","checkedFonts","measureFont","measureContext","textHeights","genericFontFamilies","getFontKey","registerFont","retries","fontFaceSet","checkFamily","checkWeight","matching","checkedFontsProperties","currentRetries","needCheck","measureTextHeight","measureElement","measureTextWidth","getTextDimensions","baseStyle","currentWidth","drawImageOrLabel","labelOrImage","originX","originY","contextInstructions","executeLabelInstructions","CanvasBuilder","beginGeometryInstruction1_","beginGeometryInstruction2_","bufferedMaxExtent_","instructions","tmpCoordinate_","hitDetectionInstructions","applyPixelRatio","dashArray","appendFlatPointCoordinates","getBufferedMaxExtent","myEnd","appendFlatLineCoordinates","skipFirst","lastXCoord","lastYCoord","nextCoord","lastRel","nextRel","skipped","drawCustomCoordinates_","builderEnds","builderEnd","beginGeometry","builderBegin","builderEndss","myEnds","CUSTOM","endGeometry","BEGIN_GEOMETRY","reverseHitDetectionInstructions","instruction","END_GEOMETRY","fillStyleToState","fillStyleColor","fillPatternScale","strokeStyleToState","strokeStyleColor","strokeStyleLineCap","getLineCap","strokeStyleLineDash","getLineDash","strokeStyleLineDashOffset","getLineDashOffset","lineDashOffset","strokeStyleLineJoin","getLineJoin","strokeStyleWidth","strokeStyleMiterLimit","getMiterLimit","miterLimit","strokeStyleOffset","strokeOffset","createFill","fillInstruction","SET_FILL_STYLE","applyStroke","createStroke","SET_STROKE_STYLE","updateFillStyle","currentFillStyle","updateStrokeStyle","currentStrokeStyle","currentLineCap","currentLineDash","currentLineDashOffset","currentLineJoin","currentLineWidth","currentMiterLimit","currentStrokeOffset","endGeometryInstruction","CanvasImageBuilder","hitDetectionImage_","imagePixelRatio_","anchorX_","anchorY_","height_","originX_","originY_","scale_","width_","declutterMode_","declutterImageWithText_","myBegin","DRAW_IMAGE","filteredFlatCoordinates","sharedData","getHitDetectionImage","getDeclutterMode","CanvasLineStringBuilder","drawFlatCoordinates_","MOVE_TO_LINE_TO","lastStroke","CanvasPolygonBuilder","drawFlatCoordinatess_","numEnds","handleStrokeOffset_","setFillStrokeStyles_","circleInstruction","CIRCLE","drawGeometryCallback","BATCH_CONSTRUCTORS","PolygonBuilder","Builder","ImageBuilder","LineStringBuilder","TextBuilder","tolerance_","maxExtent_","resolution_","buildersByZIndex_","builderInstructions","zKey","builders","builderKey","builderInstruction","getBuilder","builderType","zIndexKey","replays","replay","tmpExtent","getDeclutterBox","replayImageOrLabelArgs","declutterBox","rtlRegEx","horizontalTextAlign","createTextChunks","richTextToPlainText","overlaps","alignAndScaleFill_","coordinateCache_","renderedTransform_","pixelCoordinates_","viewRotation_","fillStates","strokeStates","textStates","widths_","labels_","zIndexContext_","getZIndexContext","createLabel","textKey","fillKey","strokeKey","strokeState","fillState","textState","renderWidth","leftRight","strokeInstructions","fillInstructions","previousFont","widthHeightIndex","lineWidthIndex","fillStrokeArgs","replayTextBackground_","strokeInstruction","fill_","setStrokeStyle_","calculateImageOrLabelDimensions_","sheetWidth","sheetHeight","fillStroke","boxW","boxH","boxX","boxY","drawImageX","drawImageY","drawImageW","drawImageH","replayImageOrLabel_","imageOrLabel","alignAndScale","repeatSize","drawLabelWithPointPlacement_","baseline","execute_","pixelCoordinates","offsetCoords","lineOffsetPx","roundX","roundY","pendingFill","pendingStroke","coordinateCache","viewRotationFromTransform","batchSize","currentGeometry","BEGIN_PATH","CLOSE_PATH","labelWithAnchor","geometryWidths","backgroundFillInstruction","backgroundStrokeInstruction","widthIndex","imageArgs","imageDeclutterMode","imageDeclutterBox","renderImage","imageDeclutter","DRAW_CHARS","measurePixelRatio","pixelRatioScale","textKeepUpright","textScale","cachedWidths","drawChars","lineCoords","lineStart","lineEnd","isClosedLine","STROKE","executeHitDetection","DECLUTTER","NON_DECLUTTER","canvasReadsBenchmarked","circlePixelIndexArrayCache","allInstructions","overlaps_","executorsByZIndex_","hitDetectionContext_","hitDetectionTransform_","renderedContext_","deferredZIndexContexts_","createExecutors_","flatClipCoords","executors","instructionByZindex","bestResult","measures","benchmarkCanvasReads","contextSize","maxDistanceSq","distances","pixelIndex","getPixelIndexArray","executor","targetContext","builderTypes","maxBuilderTypes","requireClip","pushFunction","deferredZIndexContexts","CanvasImmediateRenderer","context_","transformRotation_","userTransform_","contextFillState_","contextStrokeState_","contextTextState_","fillState_","strokeState_","imageAnchorX_","imageAnchorY_","imageHeight_","imageOpacity_","imageOriginX_","imageOriginY_","imageRotateWithView_","imageRotation_","imageScale_","imageWidth_","text_","textOffsetX_","textOffsetY_","textRotateWithView_","textRotation_","textScale_","textFillState_","textStrokeState_","textState_","tmpLocalTransform_","drawImages_","drawText_","setContextFillState_","setContextStrokeState_","setContextTextState_","moveToLineTo_","drawRings_","flatMidpoint","geometryExtent","flatMidpoints","flatInteriorPoint","flatInteriorPoints","contextFillState","contextStrokeState","contextTextState","imageAnchor","imageOrigin","textFillStyle","textFillStyleColor","textStrokeStyle","textStrokeStyleColor","textStrokeStyleLineCap","textStrokeStyleLineDash","textStrokeStyleLineDashOffset","textStrokeStyleLineJoin","textStrokeStyleWidth","textStrokeStyleMiterLimit","textFont","getOffsetX","getOffsetY","textRotateWithView","textText","textTextAlign","getTextAlign","textTextBaseline","getTextBaseline","Instruction","beginPathInstruction","closePathInstruction","clipSegmentStart","clipSegmentEnd","clipSegment","lineChunk","chunkM","currentChunk","missing","matchingChunk","x12","y12","x23","y23","chunkStart","chunkEnd","TEXT_ALIGN","CanvasTextBuilder","textKeepUpright_","textKey_","fillKey_","strokeKey_","beg","keep","saveTextStates_","backgroundFill","backgroundStroke","hitDetectionBackgroundFill","destEnds","lastX","lastY","lineHasLast","curX","curY","clipFlatLineStrings","flatOffset","chunkBegin","drawChars_","getOverflow","getMaxAngle","getPlacement","getRepeat","getJustify","getBackgroundFill","getBackgroundStroke","getPadding","getKeepUpright","instructions_","offset_","pendingMethod_","pushMethodArgs_","push_","instructionsAtIndex","instructionAtIndex","HIT_DETECT_RESOLUTION","createHitDetectionImageData","indexFactor","featuresByZIndex","featureStyleFunction","originalStyle","imgSize","imgContext","byGeometryType","geomAndStyle","hitDetect","resultFeatures","COMMON_HEADER","attributes_","symbolSizeExpression_","symbolRotationExpression_","symbolOffsetExpression_","symbolColorExpression_","texCoordExpression_","fragmentDiscardExpression_","shapeDiscardExpression_","symbolRotateWithView_","strokeWidthExpression_","strokeColorExpression_","strokeOffsetExpression_","strokeCapExpression_","strokeJoinExpression_","strokeMiterLimitExpression_","strokeDistanceFieldExpression_","strokePatternLengthExpression_","fillColorExpression_","fillPatternSizeExpression_","vertexShaderFunctions_","fragmentShaderFunctions_","varyingExpression","getSymbolColorExpression","getFragmentDiscardExpression","getShapeDiscardExpression","getFillPatternSizeExpression","addVertexShaderFunction","addFragmentShaderFunction","LINESTRING_ANGLE_COSINE_CUTOFF","expressionToGlsl","packColor","UNPACK_COLOR_FN","getGlslSizeFromType","getGlslTypeFromType","applyContextToBuilder","varName","varType","generateUniformsFromContext","generateAttributesFromContext","getLowPart","getHighPart","fround","FLOAT64_ARITHMETIC_FN","LayerRenderer","boundHandleImageChange_","handleImageChange_","layer_","staleKeys_","maxStaleKeys","renderedSourceKey_","getStaleKeys","prependStaleKey","updateStaleKeys","sourceKey","pixelContext","CanvasLayerRenderer","pixelTransform","deferredContext_","containerReused","useContainer","targetCanvas","layerClassName","transformOrigin","bottomRight","bottomLeft","dispatchRenderEvent_","addTileToLookup","tilesByZ","removeTileFromLookup","getRenderExtent","gridExtent","CanvasTileLayerRenderer","tileLayer","renderComplete","tempTileRange_","tempTileCoord_","tileCache_","sourceTileCache_","getSourceTileCache","containsKey","tilePixelRatio","getTilePixelRatio","getTileCoordForCoordAndZ","tileOrigin","getGutterForProjection","sourceRevision","enqueueTiles","initialZ","getTileRangeForExtentAndZ","tileCoordIntersectsViewport","tileQueueKey","findStaleTile_","staleKeys","findAltTiles_","altZ","getTileRangeForTileCoordAndZ","frameExtent","canvasExtent","targetZ","renderExtent","tileState","parentZ","canvasScale","fadingTiles","currentTilePixelSize","originTileCoord","originTileExtent","tileGutter","updateUsedTiles","currentRect","postRenderFunction","tilesCount","updateCacheSize","expireCache","getTileImage","alphaChanged","GEOMETRY_RENDERERS","imageReplay","textReplay","lineStringReplay","polygonReplay","declutterBuilderGroup","geometryRenderer","circleReplay","defaultOrder","feature1","feature2","getSquaredTolerance","getTolerance","loadingPromises","renderGeometry","renderFeatureInternal","getHitDetectionRenderer","WebGLLayerRenderer","inversePixelTransform_","postProcesses_","onMapChanged_","removeHelper","setUniforms","incrementGroup","groupNumber","canvasCacheKey","canvasCacheKeyMatches","needsToBeRecreated","BaseTileRepresentation","setTile","uploadTile","bindAndConfigure","resampleFilter","uploadDataTexture","textureType","canInterpolate","bytesPerRow","oldUnpackAlignment","renderSize_","uploadImageTexture","sourceTileSize","isFloat","pixelCount","DataType","textureDataArrays","rowOffset","colCount","dataValue","getImagePixelData_","renderCol","renderRow","renderHeight","sourceWidthWithoutGutter","sourceHeightWithoutGutter","sourceCol","sourceRow","getArrayPixelData_","sourceSize","bytesPerPixel","getPixelData","arrayData","TRANSITION_ALPHA","depthForZ","lookupHasTile","tileRepresentationLookup","tileIds","addTileRepresentationToLookup","tileRepresentation","representationsByZ","removeTileRepresentationFromLookup","representations","WebGLBaseTileLayerRenderer","tileTransform_","tmpCoords_","tmpCoords2_","tmpExtent_","tmpMat4_","tempSize_","tileRepresentationCache","createTileRepresentation","sourceTileCache","getSourceTileCache_","beforeTilesRender","tilesWithAlpha","beforeTilesMaskRender","renderTile","renderTileMask","drawTile_","alphaLookup","tileCoordKey","tileWidthWithGutter","tileHeightWithGutter","centerI","centerJ","tileCenterI","tileCenterJ","applyRenderExtentUniform","worldToLocalTransform","setUniformFloatVec4","attributeDescriptions","program_","vertexShader_","fragmentShader_","indices_","paletteTextures_","tileTexture","textureSlot","paletteIndex","gutterExtent","textureOriginX","textureOriginY","extentTransform","ZOOM","tileTextureCache","brokenDiagonalRendering_","drawTestTriangle","verifyBrokenDiagonalRendering","calculateSourceResolution","targetProj","targetMetersPerUnit","sourceMetersPerUnit","compensationFactor","calculateSourceExtentResolution","targetExtent","triangulation","renderEdges","drawSingle","pixelRound","sourceDataExtent","stitchContext","stitchScale","inverseScale","yPos","srcWidth","srcHeight","targetTopLeft","getTriangles","sourceNumericalShiftX","sourceNumericalShiftY","augmentedMatrix","affineCoefs","isBrokenDiagonalRendering","ReprojTile","targetTileGrid","getTileFunction","errorThreshold","renderEdges_","gutter_","canvas_","sourceTileGrid_","targetTileGrid_","wrappedTileCoord_","sourceTiles_","sourcesListenerKeys_","sourceZ_","maxTargetExtent","maxSourceExtent","limitedTargetExtent","sourceProjExtent","errorThresholdInPixels","triangulation_","calculateSourceExtent","sourceRange","srcX","srcY","reproject_","leftToLoad","sourceListenKey","unlistenSources_","destinationResolution","sourceMatrix","sourceProj_","targetProj_","transformInvCache","transformInv","transformInv_","maxSourceExtent_","errorThresholdSquared_","triangles_","wrapsXInSource_","canWrapXInSource_","sourceWorldWidth_","targetWorldWidth_","destinationTopLeft","destinationTopRight","destinationBottomRight","destinationBottomLeft","sourceTopLeft","sourceTopRight","sourceBottomRight","sourceBottomLeft","maxSubdivision","addQuad_","leftBound","newTriangle","addTriangle_","aSrc","bSrc","cSrc","dSrc","sourceQuadExtent","sourceCoverageX","sourceWorldWidth","wrapsX","needsSubdivision","targetQuadExtent","isNotFinite","centerSrc","bcSrc","daSrc","abSrc","cdSrc","ERROR_THRESHOLD","createSnapToN","createSnapToZero","hasArea","toSize","BingMaps","hidpi","reprojectionErrorThreshold","hidpi_","culture_","maxZoom_","apiKey_","imagerySet_","imagerySet","placeholderTiles_","placeholderTiles","handleImageryMetadataResponse","getApiKey","getImagerySet","statusDescription","authenticationResultCode","tileUrlFunction","quadKeyTileCoord","setAttributions","coverageArea","epsg4326Extent","Cluster","interpolationRatio","createCustomCluster_","createCluster","boundRefresh_","updateDistance","setDistance","setMinDistance","getMinDistance","mapDistance","neighbor","searchCenter","canvasGLPool","resultFrameBuffer","resultTexture","stitchTexture","stitchWidth","stitchHeight","maxTexSize","largeSide","stitchWidthFixed","stitchHeightFixed","webGLCanvas","getUVs","triProgram","textureLocation","su0","sv0","su1","sv1","su2","sv2","matrixLocation","positionLocation","texcoordLocation","texcoordBuffer","edgeProgram","burnval","burnvalLocation","ReprojDataTile","hasAlpha_","hasAlpha","reprojData_","reprojError_","reprojSize_","sourceTileGridExtent","Triangulation","imageLike","tileDataR","outWidth","outHeight","coverageBand","outBandCount","dataR","createCanvasContextWebGL","willInterpolate","reproj","groupBase","dataS","releaseGLCanvas","DataTileSource","attributionsCollapsible","tileSize_","tileSizes_","tileLoadingKeys_","nodataBandIndex","tileGridForProjection_","setTileSizes","tileSizes","thisProj","setLoader","getReprojTile_","reprojTilePixelRatio","getTileCoordForTileUrlFunction","sourceLoader","AbortController","requestZ","requestX","requestY","getFullTileRange","tileOptions","TileEventType","TILELOADSTART","TILELOADERROR","TILELOADEND","projKey","sourceResolutions","targetFinestRes","setTileGridForProjection","tilegrid","fromResolutionLike","ReprojImage","getImageFunction","sourceImage","sourcePixelRatio","targetExtent_","sourceImage_","sourcePixelRatio_","interpolate_","sourceListenerKey_","unlistenSource_","ImageSourceEvent","ImageSource","Source","reprojectedImage_","reprojectedRevision_","wantedExtent_","wantedResolution_","static_","wantedProjection_","setResolutions","findNearestResolution","getImageInternal","requestExtent","getRequestExtent","handleImageChange","defaultImageLoadFunction","requestWidth","requestHeight","Static","imageLoadFunction","url_","imageExtent_","resolutionX","resolutionY","createLoader","getImageExtent","ImageWMS","imageLoadFunction_","params_","serverType_","serverType","ratio_","loaderProjection_","projectionObj","sourceProjectionObj","getLegendUrl","getParams","getImageLoadFunction","setImageLoadFunction","setUrl","setParams","updateParams","OSM","adaptAttributions","attributionsCollapsible_","viewResolver","viewRejector","viewPromise_","changedState","attributionLike","TileSource","tilePixelRatio_","tmpSize","key_","gridProjection","TileSourceEvent","TileImage","defaultTileLoadFunction","tileGridForProjection","reprojectionErrorThreshold_","renderReprojectionEdges_","getGutter","createTile_","urlTileCoord","tileUrl","getTileInternal","setRenderReprojectionEdges","imageTile","credentials","imageBitmap","TileWMS","v13_","updateV13_","getKeyForParams_","sourceProjCoord","baseParams","getRequestUrl_","LAYERS","mpu","setParams_","UrlTile","generateTileUrlFunction_","setUrls","getTileLoadFunction","getTileUrlFunction","getUrls","setTileLoadFunction","setTileUrlFunction","VectorSourceEvent","VectorSource","format_","strategy_","featuresRtree_","RBush","loadedExtentsRtree_","nullGeometryFeatures_","idIndex_","uidIndex_","featureChangeKeys_","addFeaturesInternal","bindFeaturesCollection_","addFeatureInternal","featureKey","addToIndex_","setupChangeEvents_","indexedFeature","newFeatures","geometryFeatures","modifyingCollection","removeFeatureInternal","clearEvent","forEachFeature","forEachFeatureAtCoordinateDirect","forEachFeatureInExtent","forEachFeatureIntersectingExtent","getFeaturesCollection","getFeaturesAtCoordinate","anExtent","getClosestFeatureToCoordinate","closestFeature","previousMinSquaredDistance","getFeatureById","getFeatureByUid","getFormat","sid","removeFromIdIndex_","hasFeature","loadedExtentsRtree","extentsToLoad","extentToLoad","FEATURESLOADSTART","FEATURESLOADEND","FEATURESLOADERROR","disableCallbacks","removeLoadedExtent","intersectingExtents","intersectingExtent","remainders","removeFeatures","featureChangeKeys","idString","setOverlaps","VectorRenderTile","removeSourceTiles","replayState_","errorTileKeys","removeSourceTiles_","hasContext","renderedTileZ","VectorTile","getTileUrl","setFeatures","defaultLoadFunction","tileKeysBySourceTileUrl_","tileGrids_","getSourceZ_","sourceZ","urlFunction","forEachTileCoord","sourceTileState","listenChange","sourceTileKey","sourceTileUrl","origins","TileGrid","requestEncoding","version_","dimensions_","matrixSet_","matrixSet","requestEncoding_","getKeyForDimensions_","createFromWMTSTemplate","getDimensions","getMatrixSet","getRequestEncoding","getVersion","updateDimensions","localContext","getMatrixId","optionsFromCapabilities","wmtsCap","tileMatrixSets","supportedCRS","matrixLimits","matrixSetObj","projConfig","switchXY","selectedMatrixLimit","MinTileCol","MinTileRow","MaxTileCol","MatrixWidth","MaxTileRow","MatrixHeight","tileMatrixValue","Identifier","ScaleDenominator","TopLeftCorner","tileSpanX","TileWidth","tileSpanY","TileHeight","matrixSetExtent","wgs84BoundingBox","wgs84ProjectionExtent","wgs84MatrixSetExtent","gets","encodings","XYZ","DECIMALS","DEFAULT_VERSION","GETFEATUREINFO_IMAGE_SIZE","getRequestUrl","v13","getImageSrc","REQUEST","getRequestParams","DEFAULT_RADIUS","deltaLatBy2","deltaLonBy2","getLengthInternal","getAreaInternal","bearing","dByR","padNumber","compareVersions","count_","entries_","oldest_","newest_","deleteOldest","value_","newer","older","getValues","peekLast","peekLastKey","peekFirstKey","maxEntries","rbush_","items_","forEach_","rbush","CircleStyle","getDisplacement","patternImage_","color_","patternImage","CanvasPattern","CanvasGradient","calculateScale","wantedWidth","wantedHeight","normalizedAnchor_","anchorOrigin_","anchorXUnits_","anchorYUnits_","iconImage_","offsetOrigin_","origin_","initialOptions_","nextColor","setSrc","taintedTestContext","IconImage","imageState_","tainted_","ready_","initializeImage_","isTainted_","dispatchChangeEvent_","replaceColor_","cache_","patternCache_","maxCacheSize_","createPattern","maxCacheSize","ImageStyle","scaleArray_","displacement_","hitDetectionCanvas_","radius2_","stroke_","renderOptions_","getRadius2","createHitDetectionCanvas_","renderOptions","draw_","calculateLineJoinSize_","miterRatio","bevelAdd","innerMiterRatio","innerLength","createRenderOptions","createPath_","drawHitDetectionCanvas_","angle0","radiusC","lineCap_","lineDash_","lineDashOffset_","lineJoin_","miterLimit_","defaultGeometryFunction","hitDetectionRenderer_","zIndex_","setRenderer","setHitDetectionRenderer","toFunction","defaultStyles","createDefaultStyle","createEditingStyle","font_","keepUpright_","textAlign_","justify_","repeat_","textBaseline_","maxAngle_","placement_","overflow_","offsetX_","offsetY_","backgroundFill_","backgroundStroke_","getKeyZXY","withinExtentAndZ","getForProjection","createForProjection","extentFromProjection","createXYZ","xyzOptions","gridOptions","resolutionsFromExtent","createForExtent","tmpTileCoord","origins_","fullTileRanges_","tmpSize_","tileRanges","restrictedTileRange","calculateTileRanges_","forEachTileCoordParentTileRange","tempTileRange","tileCoordExtent","getOrigins","getTileCoordChildTileRange","tileCoordZ","tileCoordX","tileCoordY","getTileCoordForXYAndZ_","opt_tileCoord","getTileCoordForXYAndResolution_","reverseIntersectionPolicy","getTileCoordResolution","opt_direction","fullTileRanges","WMTSTileGrid","matrixIds_","matrixIds","getMatrixIds","createFromCapabilitiesMatrixSet","matrixIdsPropName","identifierPropName","scaleDenominatorPropName","topLeftCornerPropName","switchOriginXY","matrixAvailable","elt_ml","DEFAULT_MAX_ZOOM","DEFAULT_TILE_SIZE","createFromTemplate","createFromTemplates","tileUrlFunctions","createFromTileUrlFunctions","IDENTITY_TRANSFORM","tmp_","transform1","transform2","setFromArray","compose","makeInverse","matrixPrecision","cssTransform","cssTransform1","cssTransform2","mat1","appendParams","keyParams","zRegEx","xRegEx","yRegEx","dashYRegEx","renderXYZTemplate","expandUrl","startCharCode","stopCharCode","abstract","uidCounter_","getUid","ol_uid","fromTransform","orthographic","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","b11","b12","b13","b14","b21","b22","b23","b24","CONTEXT_IDS","getArrayClassForType","usage_","ofSize","getUsage","Canvas","gl_","textureMatrixLocation","tex","texWidth","texHeight","dstX","dstY","dstWidth","dstHeight","texMatrix","fragmentSource","vertexSource","webGlContext","scaleRatio_","renderTargetTexture_","renderTargetTextureSize_","frameBuffer_","depthBuffer_","renderTargetProgram_","renderTargetVerticesBuffer_","renderTargetAttribLocation_","renderTargetUniformLocation_","renderTargetOpacityLocation_","renderTargetTextureLocation_","getRenderTargetTexture","getFrameBuffer","getDepthBuffer","nextPass","preCompose","postCompose","canvasId","applyUniforms","DefaultUniform","TIME","PIXEL_RATIO","HIT_DETECTION","canvasCache","getSharedCanvasCacheKey","uniqueCanvasCacheKeyCount","WebGLHelper","boundHandleWebGLContextLost_","handleWebGLContextLost","boundHandleWebGLContextRestored_","handleWebGLContextRestored","canvasCacheKey_","getUniqueCanvasCacheKey","cacheItem","users","getOrCreateContext","bufferCache_","extensionCache_","currentProgram_","needsToBeRecreated_","ContextEventType","uniformLocationsByProgram_","attribLocationsByProgram_","postProcessPasses_","shaderCompileErrors_","maxAttributeCount_","getInstancedRenderingExtension_","bufferKey","bufferCache","webGlBuffer","loseContext","disableAlphaBlend","enableDepth","frameBuffer","slot","getAttributeLocation","renderTarget","applyFrameState","WebGLTexture","imageReady","disableAllAttributes_","programUid","ignoreRotation","enableAttributeArray_","attribName","enableAttributes_","getByteSizeFromType","computeAttributesStride","XML_SCHEMA_INSTANCE_URI","qualifiedName","getDocument","getAllTextContent","normalizeWhitespace","getAllTextContent_","CDATA_SECTION_NODE","TEXT_NODE","makeArrayExtender","valueReader","makeArrayPusher","makeReplacer","makeObjectPropertyPusher","makeObjectPropertySetter","makeChildAppender","nodeWriter","makeSimpleNodeFactory","fixedNodeName","fixedNamespaceURI","newNodeName","OBJECT_PROPERTY_NODE_FACTORY","makeSequence","makeStructureNS","namespaceURIs","structureNS","parseNode","pushParseAndPop","pushSerializeAndPop","serializersNS","nodeFactory","document_","getXMLSerializer","createEmptyCanvas","OLImageryProvider","fallbackProj_","shouldRequestNextLevel","emptyCanvas_","emptyCanvasPromise_","tilingScheme_","rectangle_","Cesium","tileSizeAtZoom0","olMap","opt_fallbackProj","handleSourceChanged_","attributionsFunction","attributionsFunctionToCredits","SHIFT_LEFT_32","utf8TextDecoder","PbfReader","_valueStart","readFields","readField","nextField","readMessage","readVarint","readFixed32","readSFixed32","readSFixed64","readFloat","readDouble","isSigned","toNum","readVarintRemainder","readSVarint","bytesPerSequence","readUtf8","readBytes","readPackedVarint","readPackedEnd","readPackedSVarint","readPackedBoolean","readPackedFloat","readPackedDouble","readPackedFixed32","readPackedSFixed32","readPackedFixed64","readPackedSFixed64","MVT","layerName_","idProperty_","idProperty","readRawGeometry_","pbf","cmd","coordsLen","currentEnd","cmdLen","createFeature_","rawFeature","getGeometryType","pbfLayers","layersPBFReader","pbfLayer","readRawFeature","layerPBFReader","featurePBFReader","MVTImageryProvider","tileRectangle_","minimumLevel_","featureCache","tileFunction_","getTileFeatures","getCacheKey_","getUrl_","readFeaturesFromBuffer","rasterizeFeatures","vectorContext","extentToRectangle","updateCesiumLayerProperties","olLayerWithParents","csLayer","olLayer","layerOpacity","layerVisible","ol4326CoordinateToCesiumCartesian","coo","ol4326CoordinateArrayToCsCartesians","olGeometryCloneTo4326","proj4326","convertColorToCesium","olColor","isCesiumProjection","is3857","is4326","identityProjection","opt_output","opt_dimension","scene_","cam_","viewListenKey_","toLonLat_","fromLonLat_","tilt_","distance_","lastCameraViewMatrix_","viewUpdateInProgress_","setView_","handleViewChangedEvent_","readFromView","setHeading","setTilt","updateCamera_","getTilt","updateView","setAltitude","checkCameraChange","calcDistanceForResolution","pickOnTerrainOrEllipsoid","pickCenterPoint","bestTarget","bestTargetCartographic","calcResolutionForDistance","targetToCamera","tiltAngle","opt_dontSync","AbstractSynchronizer","olLayers","mapLayerGroup","layerMap","olLayerListenKeys","olGroupListenKeys_","addLayers_","orderLayers","fifo","olLayerId","cesiumObjects","listenForGroupChanges_","createSingleLayerCounterparts","newOlLayerWithParents","layerWithParents","onLayerChange","cesiumObjs","addCesiumObjects_","cesiumObject","addCesiumObject","removeAndDestroySingleLayer_","counterparts","counterpart","removeSingleCesiumObject","destroyCesiumObject","unlistenSingleGroup_","removeLayer_","listenKeyArray","contentKeys","listenAddRemove","objKey","removeAllCesiumObjects","RasterSynchronizer","cesiumLayers_","ourLayers_","convertLayerToCesiumImageries","viewProj","sourceProps","fromCode","sourceToImageryProvider","layerOptions","tileLayerToImageryLayer","olLayerItem","previousStyleFunction","currentStyleFunction","csObj","layer1","layer2","FeatureConverter","boundOnRemoveOrClearFeatureListener_","onRemoveOrClearFeature_","defaultBillboardEyeOffset_","cancellers","canceller","setReferenceForPicking","olFeature","createColoredPrimitive","olGeometry","opt_lineWidth","GeometryInstance","createInstance","getHeightReference","extractColorFromOlStyle","csColor","extractLineWidthFromOlStyle","wrapFillAndOutlineGeometries","fillGeometry","outlineGeometry","olStyle","addTextStyle","olGeometry4326TextPartToCesium","csAddBillboard","bbOptions","olCircleGeometryToCesium","olCenter","olPoint","olStyleToCesium","olLineStringGeometryToCesium","olPolygonGeometryToCesium","featureExtrudedHeight","createBillboardFromImage","opt_newBillboardCallback","reallyCreateBillboard","isImageLoaded","fuid","olPointGeometryToCesium","olcsModelFunction","olcsModel","cesiumOptions","debugModelMatrix","olMultiGeometryToCesium","extentCenter","LabelStyle","HorizontalOrigin","computePlainStyle","fallbackStyleFunction","getGeometryFromFeature","opt_geom","geom3d","geomFuncRes","olFeatureToCesium","newBillboardAddedCallback","featureBb","featureToCesiumMap","prims","bbs","olVectorLayerToCesium","olView","featurePrimitiveMap","VectorLayerCounterpart","layerStyle","prim","getRootPrimitive","binaryString","VectorSynchronizer","csAllPrimitives_","opt_converter","updateLayerVisibility","csPrimitive","csPrimitives","olListenKeys","onAddFeature","onRemoveFeature","SynchronizedOverlay","scenePostRenderListenerRemover_","synchronizer_","parent_","positionWGS84_","observer_","attributeObserver_","synchronizer","setPropertyFromEvent","setPropertyFromEvent_","observeTarget_","getScene","clonedNode","ellipsoidBoundingSphere","pixelCartesian","OverlaySynchronizer","overlayCollection_","overlayMap_","overlayEvents","cesiumOverlay","overlayId","csOverlay","OLCesium","autoRenderLoop_","time_","to4326Transform_","resolutionScale_","canvasClientWidth_","canvasClientHeight_","resolutionScaleChanged_","container_","isOverMap_","enabled_","pausedInteractions_","hiddenRootGroup_","camera_","globe_","dataSourceCollection_","dataSourceDisplay_","lastFrameTime_","renderId_","targetFrameRate_","blockCesiumRendering_","warmingUp_","trackedFeature_","trackedEntity_","entityView_","needTrackedEntityUpdate_","boundingSphereScratch_","synchronizers_","refresh2DAfterCameraMoveEndOnly","moveEndRemoveCallback_","fillArea","containerAttribute","stopOpenLayersEventsPropagation","canvasAttribute","sceneOptions","sscc","CameraEventType","KeyboardEventModifier","firstImageryProvider","createSynchronizers","handleResize_","updateTrackedEntity_","onAnimationFrame_","getCamera","getOlMap","getOlView","getCesiumScene","getDataSources","getDataSourceDisplay","getEnabled","throwOnUnitializedMap_","interactionRemoved","rootGroup","warmUp","csCamera","setBlockCesiumRendering","enableAutoRenderLoop","getAutoRenderLoop","setResolutionScale","restartRenderLoop","setTargetFrameRate","setRefresh2DAfterCameraMoveEndOnly","trackedFeature","to4326Transform","toCesiumPosition","AutoRenderLoop","ol3d","_boundNotifyRepaintRequired","repaintEventNames_","notifyRepaintRequired","repaintKey","rootCollection_","layerProjection","_imageRenderingPixelatedSupported","_imageRenderingValue","getSourceProjection","olcs_uid","waitReady","stopper","quickselect","defaultCompare","_maxEntries","_minEntries","toBBox","nodesToSearch","childBBox","_build","_splitRoot","tmpNode","_insert","equalsFn","goingUp","findItem","_condense","compareMinX","compareMinY","calcBBox","multiSelect","_chooseSubtree","minEnlargement","bboxArea","enlargement","enlargedArea","insertPath","_split","_adjustParentBBoxes","_chooseSplitAxis","splitIndex","_chooseSplitIndex","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareNodeMinX","compareNodeMinY","_allDistMargin","leftBBox","rightBBox","bboxMargin","destNode","dayMs","J1970","J2000","fromJulian","toDaysTT","deltaT","siderealTime","sunCoords","sinM","cosM","wrapPi","getSetJ","decT","cosH0","sinH","getTimes","observerAngle","solarTransit","toDays","solarNoon","nadir","riseName","setName","jrise","jset","sunrise","noonAlt","riseSetAlt","alwaysUp","alwaysDown","extendStatics","__extends","__read","__spreadArray","SuppressedError","deepGet","optimizeCb","memo","ArrayProto","ObjProto","SymbolProto","supportsArrayBuffer","supportsDataView","nativeIsArray","nativeIsView","_isNaN","_isFinite","hasEnumBug","nonEnumerableProps","MAX_ARRAY_INDEX","tagTester","nodelist","hasDataViewBug","isIE11","createSizePropertyCheck","getSizeProperty","sizeProperty","shallowProperty","typedArrayPattern","collectNonEnumProps","emulatedSet","nonEnumIdx","_wrapped","toBufferView","bufferSource","tagDataView","todo","aStack","bStack","areArrays","aCtor","bCtor","allKeys","ie11fingerprint","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","setMethods","extendOwn","mapObject","createEscaper","escaper","testRegexp","replaceRegexp","noMatch","escapes","bareIdentifier","oldSettings","_chain","executeBound","sourceFunc","boundFunc","callingContext","restArguments","callArgs","hasher","later","_now","passed","_args","createPredicateIndexFinder","createIndexFinder","predicateFind","findWhere","createReduce","reducer","contextPath","where","lastComputed","reStrSymbol","keyInObj","otherArrays","chainResult","accum","styleInject","styleSheet","getDefaultExportFromCjs","hasRequiredMoment","hasRequiredDe","hasRequiredEs","hasRequiredFr","hasRequiredIt","hasRequiredJa","hasRequiredNl","hasRequiredPl","hasRequiredRu","hasRequiredTr","hasRequiredUk","moment$5","requireMoment","hookCallback","hasOwnProp","isObjectEmpty","arrLen","createUTC","createLocalOrUTC","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","userInvalidated","iso","parsedDateParts","rfc2822","weekdayMismatch","parsedParts","isNowValid","invalidWeekday","bigHour","_isValid","createInvalid","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_tzm","_isUTC","_locale","Moment","updateOffset","isMoment","suppressDeprecationWarnings","deprecationHandler","argLen","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","zeroFill","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","localeData","removeFormattingTokens","formatMoment","expandFormat","mom","makeFormatFunction","replaceLongDateFormatTokens","longDateFormat","aliases","weekday","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","quarters","quarter","weekyears","weekyear","isoweekyears","isoweekyear","isoweeks","isoweek","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","isoWeekday","weekYear","isoWeekYear","isoWeek","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","strictRegex","getParseRegexForToken","regexEscape","absFloor","argumentForCoercion","coercedNumber","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","getSetYear","makeGetSet","keepTime","set$1","setUTCMilliseconds","modMonth","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","getSetMonth","computeMonthsParse","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","createUTCDate","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","isPM","_meridiem","pos1","pos2","getSetHour","globalLocale","baseConfig","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","dayOfMonthOrdinalParse","meridiemParse","localeFamilies","commonPrefix","minl","normalizeLocale","loadLocale","oldLocale","isLocaleNameSane","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","weekdayStr","checkWeekday","obsOffset","militaryOffset","numOffset","calculateOffset","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","currentDateArray","weekdayOverflow","curWeek","createLocal","_week","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","totalParsedInputLength","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","configFromObject","configFromInput","prototypeMin","prototypeMax","moments","Duration","unitHasDecimal","orderLen","isDurationValid","_milliseconds","_days","_months","_bubble","absRound","offsetFromString","cloneWithOffset","getDateOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","positiveMomentsDifference","inp","createAdder","period","addSubtract","isAdding","invalid","isMomentInput","arrayTest","dataTypeTest","isNumberOrStringArray","objectTest","propertyTest","propertyLen","isMomentInputObject","monthDiff","wholeMonthDiff","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","preParsePostFormat","isCalendarSpec","sod","calendarFormat","asFloat","zoneDelta","startOfDate","inputString","postformat","withoutSuffix","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","prioritizedLen","keepOffset","creationData","eraName","since","eraNarrow","eraAbbr","eraYear","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","array1","array2","lengthDiff","diffs","compareArrays","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","asQuarters","valueOf$1","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","posNegDuration","relativeTime$1","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME_SECONDS","TIME_MS","processRelativeTime","monthsParseExact","weekdaysParseExact","monthsShortDot","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","eraYearOrdinalRegex","lll","llll","monthsShortWithDots","monthsShortWithoutDots","monthsNominative","monthsSubjective","momentToFormat","relativeTimeWithPlural","forms","suffixes","processHoursFunction","nominative","accusative","genitive","globalThis_1","hasRequiredGlobalThis","fails","hasRequiredFails","functionBindNative","hasRequiredFunctionBindNative","functionApply","hasRequiredFunctionApply","functionUncurryThis","hasRequiredFunctionUncurryThis","classofRaw","hasRequiredClassofRaw","functionUncurryThisClause","hasRequiredFunctionUncurryThisClause","hasRequiredIsCallable","es_array_concat","requireGlobalThis","requireFails","requireFunctionBindNative","requireFunctionApply","NATIVE_BIND","FunctionPrototype","requireFunctionUncurryThis","uncurryThisWithBind","requireClassofRaw","stringSlice","requireFunctionUncurryThisClause","requireIsCallable","documentAll","hasRequiredDescriptors","hasRequiredFunctionCall","objectGetOwnPropertyDescriptor","requireDescriptors","requireFunctionCall","hasRequiredObjectPropertyIsEnumerable","createPropertyDescriptor","hasRequiredCreatePropertyDescriptor","indexedObject","hasRequiredIndexedObject","hasRequiredIsNullOrUndefined","requireObjectCoercible","hasRequiredRequireObjectCoercible","toIndexedObject","hasRequiredToIndexedObject","isObject$1","hasRequiredIsObject","hasRequiredPath","getBuiltIn","hasRequiredGetBuiltIn","objectIsPrototypeOf","hasRequiredObjectIsPrototypeOf","environmentUserAgent","hasRequiredEnvironmentUserAgent","environmentV8Version","hasRequiredEnvironmentV8Version","symbolConstructorDetection","hasRequiredSymbolConstructorDetection","useSymbolAsUid","hasRequiredUseSymbolAsUid","hasRequiredIsSymbol","tryToString","hasRequiredTryToString","aCallable","hasRequiredACallable","getMethod","hasRequiredGetMethod","ordinaryToPrimitive","hasRequiredOrdinaryToPrimitive","objectPropertyIsEnumerable","requireObjectPropertyIsEnumerable","$propertyIsEnumerable","NASHORN_BUG","requireCreatePropertyDescriptor","bitmap","requireIndexedObject","classof","requireIsNullOrUndefined","requireRequireObjectCoercible","requireToIndexedObject","IndexedObject","requireIsObject","requirePath","requireGetBuiltIn","aFunction","requireObjectIsPrototypeOf","requireEnvironmentUserAgent","requireEnvironmentV8Version","Deno","requireSymbolConstructorDetection","V8_VERSION","$String","requireUseSymbolAsUid","requireIsSymbol","$Symbol","requireTryToString","requireACallable","requireGetMethod","requireOrdinaryToPrimitive","pref","isPure","hasRequiredIsPure","defineGlobalProperty","hasRequiredDefineGlobalProperty","hasRequiredSharedStore","hasRequiredShared","hasRequiredToObject","hasOwnProperty_1","hasRequiredHasOwnProperty","hasRequiredUid","wellKnownSymbol","hasRequiredWellKnownSymbol","toPrimitive$6","hasRequiredToPrimitive$5","toPropertyKey$1","hasRequiredToPropertyKey","hasRequiredDocumentCreateElement","ie8DomDefine","hasRequiredIe8DomDefine","hasRequiredObjectGetOwnPropertyDescriptor","isForced_1","hasRequiredIsForced","functionBindContext","hasRequiredFunctionBindContext","sharedStore","requireIsPure","requireDefineGlobalProperty","requireSharedStore","IS_PURE","SHARED","requireShared","requireToObject","requireHasOwnProperty","requireUid","requireWellKnownSymbol","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","requireToPrimitive$5","TO_PRIMITIVE","exoticToPrim","requireToPropertyKey","requireDocumentCreateElement","EXISTS","requireIe8DomDefine","DESCRIPTORS","requireObjectGetOwnPropertyDescriptor","propertyIsEnumerableModule","toPropertyKey","IE8_DOM_DEFINE","$getOwnPropertyDescriptor","requireIsForced","isForced","detection","requireFunctionBindContext","v8PrototypeDefineBug","hasRequiredV8PrototypeDefineBug","anObject","hasRequiredAnObject","hasRequiredObjectDefineProperty","createNonEnumerableProperty","hasRequiredCreateNonEnumerableProperty","_export","hasRequired_export","isArray$3","hasRequiredIsArray$3","mathTrunc","hasRequiredMathTrunc","toIntegerOrInfinity","hasRequiredToIntegerOrInfinity","hasRequiredToLength","lengthOfArrayLike","hasRequiredLengthOfArrayLike","doesNotExceedSafeInteger","hasRequiredDoesNotExceedSafeInteger","hasRequiredCreateProperty","toStringTagSupport","hasRequiredToStringTagSupport","hasRequiredClassof","inspectSource","hasRequiredInspectSource","isConstructor","hasRequiredIsConstructor","arraySpeciesConstructor","hasRequiredArraySpeciesConstructor","arraySpeciesCreate","hasRequiredArraySpeciesCreate","arrayMethodHasSpeciesSupport","hasRequiredArrayMethodHasSpeciesSupport","hasRequiredEs_array_concat","objectDefineProperty","requireV8PrototypeDefineBug","requireAnObject","requireObjectDefineProperty","V8_PROTOTYPE_DEFINE_BUG","ENUMERABLE","CONFIGURABLE","WRITABLE","requireCreateNonEnumerableProperty","definePropertyModule","require_export","wrapConstructor","NativeConstructor","Wrapper","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","nativeProperty","resultProperty","GLOBAL","STATIC","PROTO","nativeSource","targetPrototype","dontCallGetSet","real","requireIsArray$3","requireMathTrunc","requireToIntegerOrInfinity","requireToLength","requireLengthOfArrayLike","requireDoesNotExceedSafeInteger","requireCreateProperty","requireToStringTagSupport","requireClassof","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tryGet","requireInspectSource","functionToString","requireIsConstructor","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","requireArraySpeciesConstructor","SPECIES","$Array","originalArray","requireArraySpeciesCreate","requireArrayMethodHasSpeciesSupport","METHOD_NAME","requireEs_array_concat","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","spreadable","hasRequiredToString","es_symbol","es_symbol_constructor","requireToString","toAbsoluteIndex","hasRequiredToAbsoluteIndex","hasRequiredArrayIncludes","hiddenKeys","hasRequiredHiddenKeys","objectKeysInternal","hasRequiredObjectKeysInternal","enumBugKeys","hasRequiredEnumBugKeys","objectKeys","hasRequiredObjectKeys","hasRequiredObjectDefineProperties","hasRequiredHtml","sharedKey","hasRequiredSharedKey","hasRequiredObjectCreate","objectDefineProperties","requireToAbsoluteIndex","requireArrayIncludes","createMethod","IS_INCLUDES","requireHiddenKeys","requireObjectKeysInternal","requireEnumBugKeys","requireObjectKeys","internalObjectKeys","requireObjectDefineProperties","Properties","requireHtml","requireSharedKey","requireObjectCreate","activeXDocument","definePropertiesModule","PROTOTYPE","SCRIPT","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","NullProtoObject","ActiveXObject","iframeDocument","hasRequiredObjectGetOwnPropertyNames","objectGetOwnPropertyNames","requireObjectGetOwnPropertyNames","arraySlice","hasRequiredArraySlice","hasRequiredObjectGetOwnPropertyNamesExternal","objectGetOwnPropertyNamesExternal","requireArraySlice","requireObjectGetOwnPropertyNamesExternal","$getOwnPropertyNames","windowNames","getWindowNames","hasRequiredObjectGetOwnPropertySymbols","defineBuiltIn","hasRequiredDefineBuiltIn","defineBuiltInAccessor","hasRequiredDefineBuiltInAccessor","objectGetOwnPropertySymbols","requireObjectGetOwnPropertySymbols","requireDefineBuiltIn","requireDefineBuiltInAccessor","hasRequiredWellKnownSymbolWrapped","wellKnownSymbolDefine","hasRequiredWellKnownSymbolDefine","symbolDefineToPrimitive","hasRequiredSymbolDefineToPrimitive","hasRequiredObjectToString","setToStringTag","hasRequiredSetToStringTag","weakMapBasicDetection","hasRequiredWeakMapBasicDetection","internalState","hasRequiredInternalState","arrayIteration","hasRequiredArrayIteration","hasRequiredEs_symbol_constructor","wellKnownSymbolWrapped","requireWellKnownSymbolWrapped","requireWellKnownSymbolDefine","wrappedWellKnownSymbolModule","requireSymbolDefineToPrimitive","SymbolPrototype","requireObjectToString","requireSetToStringTag","SET_METHOD","requireWeakMapBasicDetection","requireInternalState","NATIVE_WEAK_MAP","OBJECT_ALREADY_INITIALIZED","facade","STATE","TYPE","requireArrayIteration","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","boundFunction","filterReject","symbolRegistryDetection","hasRequiredSymbolRegistryDetection","hasRequiredEs_symbol_for","es_symbol_for","requireSymbolRegistryDetection","keyFor","hasRequiredEs_symbol_keyFor","getJsonReplacerFunction","hasRequiredGetJsonReplacerFunction","hasRequiredEs_json_stringify","es_symbol_keyFor","es_json_stringify","requireGetJsonReplacerFunction","rawLength","requireEs_json_stringify","getReplacerFunction","$stringify","WRONG_SYMBOLS_CONVERSION","ILL_FORMED_UNICODE","stringifyWithSymbolsFix","$replacer","fixIllFormed","hasRequiredEs_object_getOwnPropertySymbols","hasRequiredEs_symbol","es_object_getOwnPropertySymbols","requireEs_symbol","nativeObjectCreate","getOwnPropertyNamesModule","getOwnPropertyNamesExternal","getOwnPropertySymbolsModule","getOwnPropertyDescriptorModule","defineWellKnownSymbol","defineSymbolToPrimitive","InternalStateModule","$forEach","HIDDEN","SYMBOL","setInternalState","getInternalState","ObjectPrototype","QObject","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","USE_SETTER","findChild","fallbackDefineProperty","ObjectPrototypeDescriptor","setSymbolDescriptor","$defineProperties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","useSetter","useSimple","requireEs_symbol_constructor","NATIVE_SYMBOL_REGISTRY","StringToSymbolRegistry","SymbolToStringRegistry","requireEs_symbol_for","requireEs_symbol_keyFor","requireEs_object_getOwnPropertySymbols","hasRequiredEs_symbol_asyncDispose","hasRequiredEs_symbol_asyncIterator","es_symbol_asyncDispose","requireEs_symbol_asyncDispose","hasRequiredEs_symbol_dispose","hasRequiredEs_symbol_hasInstance","hasRequiredEs_symbol_isConcatSpreadable","es_symbol_dispose","requireEs_symbol_dispose","hasRequiredEs_symbol_iterator","hasRequiredEs_symbol_match","hasRequiredEs_symbol_matchAll","hasRequiredEs_symbol_replace","hasRequiredEs_symbol_search","hasRequiredEs_symbol_species","hasRequiredEs_symbol_split","es_symbol_iterator","requireEs_symbol_iterator","hasRequiredEs_symbol_toPrimitive","es_symbol_toPrimitive","requireEs_symbol_toPrimitive","hasRequiredEs_symbol_toStringTag","hasRequiredEs_symbol_unscopables","hasRequiredEs_json_toStringTag","symbol$5","hasRequiredSymbol$5","es_symbol_toStringTag","es_json_toStringTag","requireSymbol$5","requireEs_symbol_toStringTag","requireEs_json_toStringTag","addToUnscopables","hasRequiredAddToUnscopables","iterators","hasRequiredIterators","hasRequiredFunctionName","correctPrototypeGetter","hasRequiredCorrectPrototypeGetter","objectGetPrototypeOf","hasRequiredObjectGetPrototypeOf","iteratorsCore","hasRequiredIteratorsCore","iteratorCreateConstructor","hasRequiredIteratorCreateConstructor","functionUncurryThisAccessor","hasRequiredFunctionUncurryThisAccessor","isPossiblePrototype","hasRequiredIsPossiblePrototype","aPossiblePrototype","hasRequiredAPossiblePrototype","objectSetPrototypeOf","hasRequiredObjectSetPrototypeOf","iteratorDefine","hasRequiredIteratorDefine","createIterResultObject","hasRequiredCreateIterResultObject","es_array_iterator","hasRequiredEs_array_iterator","domIterables","hasRequiredDomIterables","hasRequiredWeb_domCollections_iterator","symbol$4","hasRequiredSymbol$4","symbol$3","hasRequiredSymbol$3","web_domCollections_iterator","requireAddToUnscopables","requireIterators","requireFunctionName","getDescriptor","PROPER","requireCorrectPrototypeGetter","requireObjectGetPrototypeOf","CORRECT_PROTOTYPE_GETTER","requireIteratorsCore","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","ITERATOR","BUGGY_SAFARI_ITERATORS","requireIteratorCreateConstructor","Iterators","returnThis","IteratorConstructor","ENUMERABLE_NEXT","requireFunctionUncurryThisAccessor","requireIsPossiblePrototype","requireAPossiblePrototype","requireObjectSetPrototypeOf","uncurryThisAccessor","CORRECT_SETTER","requireIteratorDefine","FunctionName","createIteratorConstructor","IteratorsCore","PROPER_FUNCTION_NAME","CONFIGURABLE_FUNCTION_NAME","KEYS","VALUES","ENTRIES","Iterable","IS_SET","CurrentIteratorPrototype","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","requireCreateIterResultObject","requireEs_array_iterator","defineIterator","ARRAY_ITERATOR","iterated","kind","Arguments","requireDomIterables","CSSRuleList","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLSelectElement","MediaList","MimeTypeArray","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","requireWeb_domCollections_iterator","DOMIterables","COLLECTION_NAME","requireSymbol$4","hasRequiredEs_array_slice","getBuiltInPrototypeMethod","hasRequiredGetBuiltInPrototypeMethod","slice$3","hasRequiredSlice$3","slice$2","hasRequiredSlice$2","slice$1","hasRequiredSlice$1","hasRequiredSlice","_Symbol$1","es_array_slice","requireGetBuiltInPrototypeMethod","CONSTRUCTOR","METHOD","Namespace","pureMethod","NativePrototype","requireSlice$3","nativeSlice","HAS_SPECIES_SUPPORT","fin","requireEs_array_slice","requireSlice$2","ArrayPrototype","own","requireSlice$1","ownKeys$5","hasRequiredOwnKeys$3","hasRequiredEs_reflect_ownKeys","ownKeys$4","hasRequiredOwnKeys$2","ownKeys$3","hasRequiredOwnKeys$1","ownKeys$2","hasRequiredOwnKeys","_sliceInstanceProperty","requireOwnKeys$3","requireOwnKeys$2","requireOwnKeys$1","hasRequiredEs_array_isArray","isArray$2","hasRequiredIsArray$2","isArray$1","hasRequiredIsArray$1","hasRequiredIsArray","_Reflect$ownKeys","requireIsArray$2","requireIsArray$1","hasRequiredEs_array_map","map$6","hasRequiredMap$6","map$5","hasRequiredMap$5","map$4","hasRequiredMap$4","map$3","hasRequiredMap$3","_Array$isArray","es_array_map","requireMap$6","$map","requireEs_array_map","requireMap$5","requireMap$4","hasRequiredEs_object_keys","keys$6","hasRequiredKeys$6","keys$5","hasRequiredKeys$5","keys$4","hasRequiredKeys$4","_mapInstanceProperty","es_object_keys","requireKeys$6","requireEs_object_keys","requireKeys$5","hasRequiredEs_date_now","now$3","hasRequiredNow$2","now$2","hasRequiredNow$1","now$1","hasRequiredNow","_Object$keys","es_date_now","requireNow$2","$Date","thisTimeValue","requireEs_date_now","requireNow$1","functionBind","hasRequiredFunctionBind","hasRequiredEs_function_bind","bind$3","hasRequiredBind$3","bind$2","hasRequiredBind$2","bind$1","hasRequiredBind$1","hasRequiredBind","_Date$now","es_function_bind","requireFunctionBind","factories","Prototype","partArgs","requireBind$3","requireEs_function_bind","requireBind$2","requireBind$1","arrayMethodIsStrict","hasRequiredArrayMethodIsStrict","hasRequiredArrayForEach","hasRequiredEs_array_forEach","forEach$4","hasRequiredForEach$3","forEach$3","hasRequiredForEach$2","forEach$2","hasRequiredForEach$1","forEach$1","hasRequiredForEach","_bindInstanceProperty","es_array_forEach","requireArrayMethodIsStrict","requireArrayForEach","STRICT_METHOD","requireForEach$3","requireEs_array_forEach","requireForEach$2","requireForEach$1","hasRequiredEs_array_reverse","reverse$3","hasRequiredReverse$3","reverse$2","hasRequiredReverse$2","reverse$1","hasRequiredReverse$1","hasRequiredReverse","_forEachInstanceProperty","es_array_reverse","requireReverse$3","requireEs_array_reverse","requireReverse$2","requireReverse$1","arraySetLength","hasRequiredArraySetLength","deletePropertyOrThrow","hasRequiredDeletePropertyOrThrow","hasRequiredEs_array_splice","splice$3","hasRequiredSplice$3","splice$2","hasRequiredSplice$2","splice$1","hasRequiredSplice$1","hasRequiredSplice","_reverseInstanceProperty","es_array_splice","requireArraySetLength","SILENT_ON_NON_WRITABLE_LENGTH_SET","requireDeletePropertyOrThrow","requireSplice$3","setArrayLength","deleteCount","insertCount","actualDeleteCount","actualStart","argumentsLength","requireEs_array_splice","requireSplice$2","requireSplice$1","objectAssign","hasRequiredObjectAssign","hasRequiredEs_object_assign","assign$4","hasRequiredAssign$2","assign$3","hasRequiredAssign$1","assign$2","hasRequiredAssign","_spliceInstanceProperty","es_object_assign","requireObjectAssign","$assign","alphabet","requireAssign$2","requireEs_object_assign","requireAssign$1","hasRequiredEs_array_includes","includes$4","hasRequiredIncludes$4","es_array_includes","requireIncludes$4","$includes","requireEs_array_includes","isRegexp","hasRequiredIsRegexp","notARegexp","hasRequiredNotARegexp","correctIsRegexpLogic","hasRequiredCorrectIsRegexpLogic","hasRequiredEs_string_includes","includes$3","hasRequiredIncludes$3","includes$2","hasRequiredIncludes$2","includes$1","hasRequiredIncludes$1","hasRequiredIncludes","es_string_includes","requireIsRegexp","MATCH","requireNotARegexp","requireCorrectIsRegexpLogic","error1","error2","requireIncludes$3","notARegExp","correctIsRegExpLogic","requireEs_string_includes","requireIncludes$2","arrayMethod","stringMethod","StringPrototype","requireIncludes$1","hasRequiredEs_object_getPrototypeOf","getPrototypeOf$2","hasRequiredGetPrototypeOf$2","getPrototypeOf$1","hasRequiredGetPrototypeOf$1","hasRequiredGetPrototypeOf","_includesInstanceProperty","es_object_getPrototypeOf","requireGetPrototypeOf$2","nativeGetPrototypeOf","requireEs_object_getPrototypeOf","requireGetPrototypeOf$1","concat$3","hasRequiredConcat$3","concat$2","hasRequiredConcat$2","concat$1","hasRequiredConcat$1","hasRequiredConcat","_Object$getPrototypeOf","requireConcat$3","requireConcat$2","requireConcat$1","hasRequiredEs_array_filter","filter$3","hasRequiredFilter$3","filter$2","hasRequiredFilter$2","filter$1","hasRequiredFilter$1","hasRequiredFilter","_concatInstanceProperty","es_array_filter","requireFilter$3","$filter","requireEs_array_filter","requireFilter$2","requireFilter$1","hasRequiredObjectToArray","hasRequiredEs_object_values","values$6","hasRequiredValues$6","values$5","hasRequiredValues$5","values$4","hasRequiredValues$4","_filterInstanceProperty","es_object_values","requireObjectToArray","IE_BUG","TO_ENTRIES","IE_WORKAROUND","requireValues$6","$values","requireEs_object_values","requireValues$5","whitespaces","hasRequiredWhitespaces","hasRequiredStringTrim","numberParseInt","hasRequiredNumberParseInt","hasRequiredEs_parseInt","_parseInt$3","hasRequired_parseInt$2","_parseInt$2","hasRequired_parseInt$1","_parseInt$1","hasRequired_parseInt","_Object$values","es_parseInt","requireWhitespaces","requireStringTrim","requireNumberParseInt","$parseInt","require_parseInt$2","requireEs_parseInt","require_parseInt$1","hasRequiredEs_array_indexOf","indexOf$3","hasRequiredIndexOf$3","indexOf$2","hasRequiredIndexOf$2","indexOf$1","hasRequiredIndexOf$1","hasRequiredIndexOf","_parseInt","es_array_indexOf","requireIndexOf$3","nativeIndexOf","NEGATIVE_ZERO","searchElement","requireEs_array_indexOf","requireIndexOf$2","requireIndexOf$1","hasRequiredEs_object_entries","entries$6","hasRequiredEntries$6","entries$5","hasRequiredEntries$5","entries$4","hasRequiredEntries$4","_indexOfInstanceProperty","es_object_entries","requireEntries$6","$entries","requireEs_object_entries","requireEntries$5","hasRequiredEs_object_create","create$2","hasRequiredCreate$2","create$1","hasRequiredCreate$1","hasRequiredCreate","_Object$entries","requireCreate$2","requireCreate$1","stringRepeat","hasRequiredStringRepeat","stringPad","hasRequiredStringPad","dateToIsoString","hasRequiredDateToIsoString","hasRequiredEs_date_toJson","stringify$2","hasRequiredStringify$2","stringify$1","hasRequiredStringify$1","hasRequiredStringify","_Object$create","es_date_toJson","requireStringRepeat","requireStringPad","$repeat","IS_END","fillString","fillLen","stringFiller","intMaxLength","fillStr","requireDateToIsoString","$isFinite","DatePrototype","nativeDateToISOString","requireStringify$2","requireEs_date_toJson","requireStringify$1","environment","hasRequiredEnvironment","validateArgumentsLength","hasRequiredValidateArgumentsLength","schedulersFix","hasRequiredSchedulersFix","hasRequiredWeb_setInterval","_JSON$stringify","web_timers","web_setInterval","requireEnvironment","userAgentStartsWith","Bun","requireValidateArgumentsLength","requireSchedulersFix","USER_AGENT","WRAP","hasTimeArg","firstParamIndex","hasRequiredWeb_setTimeout","hasRequiredWeb_timers","setTimeout$2","hasRequiredSetTimeout$1","setTimeout$1","hasRequiredSetTimeout","web_setTimeout","requireWeb_timers","requireWeb_setInterval","requireWeb_setTimeout","requireSetTimeout$1","arrayFill","hasRequiredArrayFill","hasRequiredEs_array_fill","fill$3","hasRequiredFill$3","fill$2","hasRequiredFill$2","fill$1","hasRequiredFill$1","hasRequiredFill","es_array_fill","requireArrayFill","requireFill$3","requireEs_array_fill","requireFill$2","requireFill$1","hasRequiredComponentEmitter","_fillInstanceProperty","componentEmitter","componentEmitterExports","Emitter","_callbacks","hasListeners","_inheritsLoose","_assertThisInitialized","assign$1","VENDOR_PREFIXES","TEST_ELEMENT","prefixed","camelProp","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","getTouchActionProps","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","PROPS_XY","PROPS_CLIENT_XY","boolOrFn","inStr","TouchAction","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","srcEvent","hasNone","isTapPointer","pointers","isTapMovement","isTapTouchTime","DIRECTION_UP","preventSrc","hasParent$1","pointersLength","simpleCloneInputData","getVelocity","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","firstInput","firstMultiple","offsetCenter","offsetDelta","prevDelta","prevInput","computeDeltaXY","overallVelocity","overallVelocityX","overallVelocityY","maxPointers","velocityX","velocityY","lastInterval","computeIntervalInputData","srcEventTarget","computeInputData","recognize","splitStr","addEventListeners","removeEventListeners","getWindowForElement","Input","inputTarget","domHandler","evEl","evTarget","evWin","findByKey","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","MSPointerEvent","PointerEventInput","_Input","removePointer","eventTypeNormalized","storeIndex","toArray$1","uniqueArray","TOUCH_INPUT_MAP","touchcancel","TouchInput","targetIds","getTouches","allTouches","changedTargetTouches","MOUSE_INPUT_MAP","mousemove","mouseup","MouseInput","pressed","setLastTouch","primaryTouch","lastTouch","lts","lastTouches","recordTouches","isSyntheticEvent","TouchMouseInput","_manager","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","invokeArrayArg","STATE_FAILED","_uniqueId","getRecognizerByNameIfManager","otherRecognizer","stateStr","Recognizer","simultaneous","requireFail","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","TapRecognizer","_Recognizer","taps","posThreshold","pTime","pCenter","_timer","validPointers","validMovement","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","AttrRecognizer","optionPointers","isRecognized","directionStr","PanRecognizer","_AttrRecognizer","DIRECTION_HORIZONTAL","directionTest","hasMoved","SwipeRecognizer","PinchRecognizer","inOut","RotateRecognizer","PressRecognizer","validTime","domEvents","inputClass","cssProps","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","preset","toggleCssProps","oldCssProps","curRecognizer","targetRecognizer","gestureEvent","gesture","triggerDomEvent","SINGLE_TOUCH_INPUT_MAP","SingleTouchInput","normalizeSingleTouches","deprecationMessage","extend$1","childP","baseP","bindFn","Hammer$3","Hammer","DIRECTION_ALL","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_NONE","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Tap","Pan","Pinch","Press","pureDeepObjectAssign","updates","deepObjectAssign","deepObjectAssignNonentry","stripDelete","Hammer$1","hammerMock$1","Activator$1","_cleanupQueue","_dom","hammer","_onTapOverlay","_onClick","_hasParent$1","_escListener","_context2","_context3","ASPDateRegex$1","fullHexRE","shortHexRE","rgbRE","rgbaRE","copyOrDelete","allowDeletion","doDeletion","deepExtend","protoExtend","_context4","copyAndExtendArray","asBoolean","asNumber","asSize","asElement","hexToRGB","RGBToHex","_context5","RGBToHSV","minRGB","maxRGB","splitCSSText","tmpEllement","HSVToRGB","HSVToHex","hexToHSV","isValidHex","isValidRGB","isValidRGBA","bridgeObject","referenceObject","objectTo","htmlColors$1","ColorPicker$1","generated","centerCoordinates","hueCircle","applied","closeCallback","insertTo","_bindHammer","_setSize","setUpdateCallback","setCloseCallback","_isColorString","setInitial","htmlColor","rgbObj","_setColor","_generateHueCircle","_save","_apply","_updatePicker","_loadLast","angleConvert","colorPickerSelector","_setOpacity","_setBrightness","colorPickerCanvas","pixelRation","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","brightnessRange","opacityRange","initialColorDiv","newColorDiv","_context7","_context8","_context9","_context0","colorPickerDiv","noCanvas","opacityDiv","brightnessDiv","arrowDiv","brightnessLabel","opacityLabel","cancelButton","applyButton","saveButton","loadButton","pinch","_moveSelector","hfac","sfac","wrapInTag","_len5","_key5","allOptions$3","errorFound$1","VALIDATOR_PRINT_STYLE$1","Activator$2","ColorPicker$2","Hammer$2","VALIDATOR_PRINT_STYLE","getOwnPropertySymbols$2","hasRequiredGetOwnPropertySymbols$2","getOwnPropertySymbols$1","hasRequiredGetOwnPropertySymbols$1","hasRequiredGetOwnPropertySymbols","util$2","Activator","Alea","mash","Mash","mashSeed","fract53","AleaImplementation","ColorPicker","Configurator","parentModule","defaultContainer","configureOptions","hideOption","changedOptions","allowCreation","popupCounter","showButton","moduleOptions","popupDiv","popupLimit","popupHistory","colorPicker","_removePopup","setModuleOptions","_handleObject","_makeItem","_makeHeader","_makeButton","_push","_showPopupIfNeeded","_len6","_key6","_makeLabel","objectLabel","_makeDropdown","selectedValue","_makeRange","popupString","popupValue","_setupPopup","generateButton","_printOptions","onmouseover","optionsContainer","hideTimeout","deleteTimeout","_makeCheckbox","_makeTextInput","_makeColorField","_showColorPicker","checkOnly","visibleInSet","subObj","newPath","_handleArray","enabledPath","enabledValue","_constructOptions","optionsObj","Popup","overflowMethod","doShow","isLeft","isTop","Validator","referenceOptions","subObject","usedOptions","__any__","getSuggestion","referenceOption","is_object","refOptionObj","__type__","checkFields","printLocation","optionType","refOptionType","localSearch","findInOptions","globalSearch","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","_context1","levenshteinDistance","addClassName","addCssText","binarySearchCustom","orderedItems","searchResult","binarySearchValue","sidePreference","easingFunctions","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","equalArray","fillIfDefined","aProp","bProp","getAbsoluteLeft","getAbsoluteRight","getAbsoluteTop","getScrollBarWidth","insertSort","mergeOptions","mergeTarget","globalOptions","isPresent","srcOption","globalOption","globalEnabled","doMerge","overrideOpacity","parseColor","inputColor","colorStr","_context6","lighterColorHSV","darkerColorHSV","darkerColorHex","lighterColorHex","highlight","recursiveDOMDelete","DOMobject","removeClassName","oldClasses","removeCssText","selectiveBridgeObject","selectiveDeepExtend","selectiveExtend","others","selectiveNotDeepExtend","propsToExclude","scheduled","topMost","pile","updateProperty","prepareElements","JSONcontainer","redundant","used","cleanupElements","elementTypeJsonContainer","getSVGElement","svgContainer","getDOMElement","DOMContainer","groupTemplate","labelObj","drawBar","requireGetOwnPropertySymbols$2","requireGetOwnPropertySymbols$1","hasRequiredEs_object_getOwnPropertyDescriptor","hasRequiredGetOwnPropertyDescriptor$2","getOwnPropertyDescriptor$1","hasRequiredGetOwnPropertyDescriptor$1","hasRequiredGetOwnPropertyDescriptor","_Object$getOwnPropertySymbols","getOwnPropertyDescriptor$2","es_object_getOwnPropertyDescriptor","requireGetOwnPropertyDescriptor$2","requireEs_object_getOwnPropertyDescriptor","requireGetOwnPropertyDescriptor$1","hasRequiredEs_object_getOwnPropertyDescriptors","getOwnPropertyDescriptors$2","hasRequiredGetOwnPropertyDescriptors$2","getOwnPropertyDescriptors$1","hasRequiredGetOwnPropertyDescriptors$1","hasRequiredGetOwnPropertyDescriptors","_Object$getOwnPropertyDescriptor","es_object_getOwnPropertyDescriptors","requireGetOwnPropertyDescriptors$2","requireEs_object_getOwnPropertyDescriptors","requireGetOwnPropertyDescriptors$1","hasRequiredEs_object_defineProperties","hasRequiredDefineProperties$2","defineProperties$1","hasRequiredDefineProperties$1","hasRequiredDefineProperties","_Object$getOwnPropertyDescriptors","defineProperties$2","es_object_defineProperties","requireEs_object_defineProperties","requireDefineProperties$2","requireDefineProperties$1","hasRequiredEs_object_defineProperty","hasRequiredDefineProperty$5","defineProperty$4","hasRequiredDefineProperty$4","defineProperty$3","hasRequiredDefineProperty$3","defineProperty$2","hasRequiredDefineProperty$2","defineProperty$1","hasRequiredDefineProperty$1","_Object$defineProperties","defineProperty$5","es_object_defineProperty","requireEs_object_defineProperty","requireDefineProperty$5","requireDefineProperty$4","requireDefineProperty$3","requireDefineProperty$2","requireDefineProperty$1","hasRequiredEsnext_function_metadata","hasRequiredEsnext_symbol_asyncDispose","hasRequiredEsnext_symbol_dispose","hasRequiredEsnext_symbol_metadata","symbol$2","hasRequiredSymbol$2","symbolIsRegistered","hasRequiredSymbolIsRegistered","hasRequiredEsnext_symbol_isRegisteredSymbol","symbolIsWellKnown","hasRequiredSymbolIsWellKnown","hasRequiredEsnext_symbol_isWellKnownSymbol","hasRequiredEsnext_symbol_customMatcher","hasRequiredEsnext_symbol_observable","hasRequiredEsnext_symbol_isRegistered","hasRequiredEsnext_symbol_isWellKnown","hasRequiredEsnext_symbol_matcher","hasRequiredEsnext_symbol_metadataKey","hasRequiredEsnext_symbol_patternMatch","hasRequiredEsnext_symbol_replaceAll","symbol$1","hasRequiredSymbol$1","hasRequiredSymbol","_Object$defineProperty$1","esnext_function_metadata","requireSymbol$2","METADATA","requireEsnext_function_metadata","requireSymbolIsRegistered","thisSymbolValue","isRegisteredSymbol","requireSymbolIsWellKnown","$isWellKnownSymbol","isWellKnownSymbol","symbolKeys","symbolKeysLength","symbolKey","requireSymbol$1","isRegistered","isWellKnown","requireSymbol","stringMultibyte","hasRequiredStringMultibyte","hasRequiredEs_string_iterator","iterator$5","hasRequiredIterator$5","iterator$4","hasRequiredIterator$4","iterator$3","hasRequiredIterator$3","iterator$2","hasRequiredIterator$2","iterator$1","hasRequiredIterator$1","_Symbol","es_string_iterator","requireStringMultibyte","CONVERT_TO_STRING","codeAt","requireEs_string_iterator","STRING_ITERATOR","requireIterator$5","requireIterator$4","requireIterator$3","requireIterator$2","requireIterator$1","toPrimitive$5","hasRequiredToPrimitive$4","toPrimitive$4","hasRequiredToPrimitive$3","toPrimitive$3","hasRequiredToPrimitive$2","toPrimitive$2","hasRequiredToPrimitive$1","toPrimitive$1","hasRequiredToPrimitive","_Symbol$iterator$1","_typeof","requireToPrimitive$4","requireToPrimitive$3","requireToPrimitive$2","requireToPrimitive$1","requireToPrimitive","_Symbol$toPrimitive","_defineProperty","hasRequiredArrayReduce","environmentIsNode","hasRequiredEnvironmentIsNode","hasRequiredEs_array_reduce","reduce$3","hasRequiredReduce$3","reduce$2","hasRequiredReduce$2","reduce$1","hasRequiredReduce$1","hasRequiredReduce","es_array_reduce","requireArrayReduce","REDUCE_EMPTY","IS_RIGHT","requireEnvironmentIsNode","requireReduce$3","$reduce","CHROME_VERSION","requireEs_array_reduce","requireReduce$2","requireReduce$1","flattenIntoArray_1","hasRequiredFlattenIntoArray","hasRequiredEs_array_flatMap","hasRequiredEs_array_unscopables_flatMap","flatMap$3","hasRequiredFlatMap$3","flatMap$2","hasRequiredFlatMap$2","flatMap$1","hasRequiredFlatMap$1","hasRequiredFlatMap","_reduceInstanceProperty","es_array_flatMap","requireFlattenIntoArray","flattenIntoArray","sourceLen","elementLen","mapFn","requireFlatMap$3","requireEs_array_flatMap","requireFlatMap$2","requireFlatMap$1","hasRequiredIterator","arrayBufferNonExtensible","hasRequiredArrayBufferNonExtensible","objectIsExtensible","hasRequiredObjectIsExtensible","freezing","hasRequiredFreezing","hasRequiredInternalMetadata","isArrayIteratorMethod","hasRequiredIsArrayIteratorMethod","getIteratorMethod","hasRequiredGetIteratorMethod","getIterator$5","hasRequiredGetIterator$6","iteratorClose","hasRequiredIteratorClose","iterate","hasRequiredIterate","anInstance","hasRequiredAnInstance","hasRequiredCollection","defineBuiltIns","hasRequiredDefineBuiltIns","setSpecies","hasRequiredSetSpecies","collectionStrong","hasRequiredCollectionStrong","hasRequiredEs_map_constructor","hasRequiredEs_map","_flatMapInstanceProperty","_Symbol$iterator","internalMetadata","requireArrayBufferNonExtensible","isExtensible","requireObjectIsExtensible","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","FAILS_ON_PRIMITIVES","requireFreezing","requireInternalMetadata","getOwnPropertyNamesExternalModule","FREEZING","REQUIRED","setMetadata","objectID","weakData","fastKey","getWeakData","onFreeze","requireIsArrayIteratorMethod","requireGetIteratorMethod","requireGetIterator$6","usingIterator","iteratorMethod","requireIteratorClose","innerResult","innerError","requireIterate","getIterator","Result","ResultPrototype","unboundFunction","iterFn","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","callFn","requireAnInstance","requireCollection","InternalMetadataModule","internalStateGetterFor","CONSTRUCTOR_NAME","IS_WEAK","ADDER","IS_ADDER","getConstructor","setStrong","requireDefineBuiltIns","requireSetSpecies","requireCollectionStrong","getEntry","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","caller","hasRequiredCaller","mapHelpers","hasRequiredMapHelpers","hasRequiredEs_map_groupBy","map$2","hasRequiredMap$2","map$1","hasRequiredMap$1","hasRequiredMap","es_map_groupBy","requireCaller","numArgs","requireMapHelpers","requireMap$2","MapHelpers","DOES_NOT_WORK_WITH_PRIMITIVES","requireEs_map_groupBy","requireMap$1","hasRequiredEs_set_constructor","hasRequiredEs_set","_Map","aSet","hasRequiredASet","setHelpers","hasRequiredSetHelpers","iterateSimple","hasRequiredIterateSimple","setIterate","hasRequiredSetIterate","setClone","hasRequiredSetClone","hasRequiredSetSize","getIteratorDirect","hasRequiredGetIteratorDirect","getSetRecord","hasRequiredGetSetRecord","setDifference","hasRequiredSetDifference","setMethodAcceptSetLike","hasRequiredSetMethodAcceptSetLike","hasRequiredEs_set_difference_v2","es_set_difference_v2","requireASet","requireSetHelpers","SetPrototype","requireIterateSimple","ITERATOR_INSTEAD_OF_RECORD","requireSetIterate","interruptible","requireSetClone","SetHelpers","requireSetSize","requireGetIteratorDirect","requireGetSetRecord","INVALID_SIZE","SetRecord","intSize","numSize","requireSetDifference","iterateSet","otherRec","requireSetMethodAcceptSetLike","setIntersection","hasRequiredSetIntersection","hasRequiredEs_set_intersection_v2","es_set_intersection_v2","requireSetIntersection","setIsDisjointFrom","hasRequiredSetIsDisjointFrom","hasRequiredEs_set_isDisjointFrom_v2","es_set_isDisjointFrom_v2","requireSetIsDisjointFrom","setIsSubsetOf","hasRequiredSetIsSubsetOf","hasRequiredEs_set_isSubsetOf_v2","es_set_isSubsetOf_v2","requireSetIsSubsetOf","setIsSupersetOf","hasRequiredSetIsSupersetOf","hasRequiredEs_set_isSupersetOf_v2","es_set_isSupersetOf_v2","requireSetIsSupersetOf","setSymmetricDifference","hasRequiredSetSymmetricDifference","setMethodGetKeysBeforeCloningDetection","hasRequiredSetMethodGetKeysBeforeCloningDetection","hasRequiredEs_set_symmetricDifference_v2","es_set_symmetricDifference_v2","requireSetSymmetricDifference","keysIter","requireSetMethodGetKeysBeforeCloningDetection","setLike","setUnion","hasRequiredSetUnion","hasRequiredEs_set_union_v2","set$2","hasRequiredSet$2","hasRequiredSet$1","hasRequiredSet","es_set_union_v2","requireSetUnion","requireSet$2","requireEs_set_difference_v2","requireEs_set_intersection_v2","isDisjointFrom","requireEs_set_isDisjointFrom_v2","isSubsetOf","requireEs_set_isSubsetOf_v2","isSupersetOf","requireEs_set_isSupersetOf_v2","symmetricDifference","setMethodGetKeysBeforeCloning","requireEs_set_symmetricDifference_v2","requireEs_set_union_v2","requireSet$1","getIterator_1","hasRequiredGetIterator$5","getIterator$4","hasRequiredGetIterator$4","getIterator$3","hasRequiredGetIterator$3","getIterator$2","hasRequiredGetIterator$2","getIterator$1","hasRequiredGetIterator$1","hasRequiredGetIterator","_Set","requireGetIterator$5","requireGetIterator$4","requireGetIterator$3","requireGetIterator$2","requireGetIterator$1","arraySort","hasRequiredArraySort","environmentFfVersion","hasRequiredEnvironmentFfVersion","environmentIsIeOrEdge","hasRequiredEnvironmentIsIeOrEdge","environmentWebkitVersion","hasRequiredEnvironmentWebkitVersion","hasRequiredEs_array_sort","sort$3","hasRequiredSort$3","sort$2","hasRequiredSort$2","sort$1","hasRequiredSort$1","hasRequiredSort","_getIterator","es_array_sort","requireArraySort","comparefn","llength","rlength","lindex","rindex","requireEnvironmentFfVersion","firefox","requireEnvironmentIsIeOrEdge","requireEnvironmentWebkitVersion","webkit","requireSort$3","internalSort","IE_OR_EDGE","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","getSortCompare","requireEs_array_sort","requireSort$2","requireSort$1","hasRequiredEs_array_some","some$3","hasRequiredSome$3","some$2","hasRequiredSome$2","some$1","hasRequiredSome$1","hasRequiredSome","_sortInstanceProperty","es_array_some","requireSome$3","$some","requireEs_array_some","requireSome$2","requireSome$1","keys$3","hasRequiredKeys$3","keys$2","hasRequiredKeys$2","keys$1","hasRequiredKeys$1","hasRequiredKeys","_someInstanceProperty","requireKeys$3","requireKeys$2","requireKeys$1","values$3","hasRequiredValues$3","values$2","hasRequiredValues$2","values$1","hasRequiredValues$1","hasRequiredValues","_keysInstanceProperty","requireValues$3","requireValues$2","requireValues$1","entries$3","hasRequiredEntries$3","entries$2","hasRequiredEntries$2","entries$1","hasRequiredEntries$1","hasRequiredEntries","_valuesInstanceProperty","requireEntries$3","requireEntries$2","requireEntries$1","hasRequiredDefineProperty","_entriesInstanceProperty","_Object$defineProperty","randomUUID","unsafeStringify","_v4","ownKeys$1","_objectSpread$1","_context21","_context22","SimpleDataPipe","transformers","_remove","_transformers","_transformItems","oldData","DataPipeUnderConstruction","isId","_flushIfNeeded","_extended","DataSetPart","senderId","subscriber","DataStream","_pairs","toIdArray","toItemArray","toEntryArray","toObjectMap","toMap","toIdSet","toItemSet","distinct","maxItem","minItem","idA","itemA","idB","itemB","DataSet","idProp","_idProp","fieldId","addedIds","idsToAdd","_addItem","updatedIds","updatedData","addOrUpdate","origId","fullItem","oldItem","_updateItem","updateOnly","_context10","updateEventData","itemIds","itemId","_context11","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","_context12","filteredItem","removedIds","removedItems","ident","_context13","maxField","_context14","itemField","minField","_context15","ensureFullItem","_context16","_context17","_onEvent","oldIds","newIds","thisFilter","optionsFilter","defaultFilter","_context18","_context19","_context20","_this$_data","oldItems","updatedItems","moment$3","moment$2","hasRequired_default$1","util$1","hasRequiredUtil$1","parser$1","hasRequiredParser$1","hasRequiredCss","hasRequiredLib$1","hasRequiredUtil","hasRequired_default","lib$1","_default$1","lib","require_default$1","getDefaultWhiteList","whiteList","REGEXP_URL_JAVASCRIPT","onAttr","onIgnoreAttr","safeAttrValue","requireUtil$1","requireLib$1","FilterCSS","cssLength","isParenthesisOpen","lastPos","retCSS","addNewAttr","requireParser$1","shallowCopyObject","sourcePosition","isWhite","requireCss","filterCSS","requireUtil","spaceIndex","require_default","getDefaultCSSWhiteList","defaultCSSFilter","REGEXP_LT","REGEXP_GT","REGEXP_QUOTE","REGEXP_QUOTE_2","REGEXP_ATTR_VALUE_1","REGEXP_ATTR_VALUE_COLON","REGEXP_ATTR_VALUE_NEWLINE","REGEXP_DEFAULT_ON_TAG_ATTR_4","REGEXP_DEFAULT_ON_TAG_ATTR_7","REGEXP_DEFAULT_ON_TAG_ATTR_8","escapeQuote","unescapeQuote","escapeHtmlEntities","escapeDangerHtml5Entities","clearNonPrintableCharacter","str2","friendlyAttrValue","escapeAttrValue","article","aside","audio","bdi","bdo","blockquote","cite","figcaption","figure","ins","kbd","nav","onTag","onIgnoreTag","onTagAttr","onIgnoreTagAttr","cssFilter","onIgnoreTagStripAll","StripTagBody","isRemoveAllTag","removeList","posStart","isRemoveTag","rethtml","stripCommentTag","retHtml","stripBlankChar","attributeWrapSign","hasRequiredParser","xss","hasRequiredXss","hasRequiredLib","requireParser","REGEXP_ILLEGAL_ATTR_NAME","findNextEqual","findNextQuotationMark","findBeforeEqual","stripQuoteWrap","isQuoteWrapString","parseTag","tagStart","quoteStart","currentTagName","currentHtml","chariterator","parseAttr","lastMarkPos","retAttrs","tmpName","addAttr","libExports","FilterXSS","stripIgnoreTag","keysToLowerCase","singleQuotedAttributeValue","allowCommentTag","stripIgnoreTagBody","closing","whiteAttrList","attrsHtml","isWhiteAttr","requireXss","filterXSS","DedicatedWorkerGlobalScope","xssFilter","_objectSpread","isDataViewLike","_obj$idProp","isDataSetLike","isDataViewLike$1","ASPDateRegex","NumericRegex","typeCoerceDataSet","rawDS","coercedDS","setupXSSCleaner","customXSS","setupNoOpCleaner","configuredXSSProtection","availableUtils","setupXSSProtection","filterOptions","numberParseFloat","hasRequiredNumberParseFloat","hasRequiredEs_parseFloat","_parseFloat$3","hasRequired_parseFloat$2","_parseFloat$2","hasRequired_parseFloat$1","_parseFloat$1","hasRequired_parseFloat","es_parseFloat","requireNumberParseFloat","$parseFloat","trimmedString","require_parseFloat$2","requireEs_parseFloat","require_parseFloat$1","hasRequiredEs_string_repeat","repeat$3","hasRequiredRepeat$3","repeat$2","hasRequiredRepeat$2","repeat$1","hasRequiredRepeat$1","hasRequiredRepeat","_parseFloat","_isResized","resized","_previousWidth","requireRepeat$3","requireRepeat$2","requireRepeat$1","setInterval$1","hasRequiredSetInterval$1","hasRequiredSetInterval","_repeatInstanceProperty","convertHiddenOptions","hiddenDates","dateItem","updateHiddenDates","domProps","centerContainer","pixelTime","runUntil","dayOffset","safeDates","startHidden","getIsHidden","endHidden","rangeStart","rangeEnd","startToFront","endToFront","_applyRange","toScreen","Core","getHiddenDurationBetween","hiddenBeforeStart","getHiddenDurationBeforeStart","rangeAfterEnd","correctTimeForHidden","toTime","hiddenDuration","partialDuration","accumulatedHiddenDuration","requiredDuration","getAccumulatedHiddenDuration","getHiddenDurationBefore","timeOffset","snapAwayFromHidden","correctionEnabled","Range","millisecondsPerPixelCache","rolling","deltaDifference","scaleOffset","moveable","zoomable","rollingMode","follow","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onTouch","_onPinch","rollingModeBtn","startRolling","stopRolling","rollingModeOffset","currentTimeTimer","frameCallback","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","easingName","initTime","anyChanged","timeoutID","getMillisecondsPerPixel","newStart","compensation","getRange","totalHidden","previousDelta","_isInsideRange","allowDragging","validateDirection","diffRange","safeStart","safeEnd","zoomKey","zoomFriction","pointerDate","getPointer","_pointerToDate","centerDate","hiddenDurationBefore","hiddenDurationAfter","centerContainerRect","elementRect","requireSetInterval$1","_setInterval","_firstTarget","modifiedHammer","propagating","PropagatingHammer","propagatedHandler","_handled","srcStop","firstTarget","elemHammer","hammers","hammerMock","onTouch","TimeStep","minimumStep","autoScale","switchedDay","switchedMonth","switchedYear","FORMAT","setMoment","setFormat","setMinimumStep","roundToMinor","priorCurrent","showMajorLabels","timeStep","previousTime","stepInHidden","stepOverHiddenDates","getCurrent","setAutoScale","stepYear","stepMonth","stepDay","showWeekScale","stepHour","stepMinute","stepSecond","stepMillisecond","_step","isMajor","getLabelMinor","minorLabels","getLabelMajor","majorLabels","_moment","currentWeek","TimeAxis","majorTexts","minorTexts","lineTop","showMinorLabels","maxMinorChars","timeAxis","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","backgroundNextSibling","_repaintLabels","backgroundVertical","timeLabelsize","minorCharWidth","showMinorGrid","prevWidth","xFirstMajorLabel","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","_setXY","directionX","measureCharMinor","measureCharMajor","_hasParent","keycharm","_exportFunctions","_bound","newBindings","escListener","deleteSelected","en_EN","en_US","it_IT","it_CH","nl_NL","nl_BE","de_DE","de_CH","fr_FR","fr_CA","fr_BE","fr_CH","es_ES","uk_UA","ru_RU","pl_PL","pt_BR","pt_PT","tr_TR","ja_JP","lt_LT","sv_SE","nb_NO","nn_NO","CustomTime","defaultLocales","customTime","eventParams","setCustomTime","getCustomTime","setCustomMarker","_onMarkerChange","_onMarkerChanged","setCustomTitle","getStep","snappedTime","customTimeFromTarget","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","loadingScreen","scrollTopMin","initialDrawDone","_redraw","initialRangeChangeDone","_origRedraw","itemSet","initialItemSetDrawn","pinchRecognizer","disablePreventDefaultVertically","timelineListeners","preferZoom","verticalScroll","horizontalScroll","wheelDeltaX","HORIZONTAL_AXIS","isVerticalScrollingPreferred","isCurrentlyScrollingWithVerticalScrollWheel","isHorizontalScrollKeyConfiguredAndPressed","horizontalScrollKey","_setScrollTop","horizontalScrollInvert","wheelType","onMouseScrollSide","itemAddedToTimeline","handleDragOver","getEventProperties","itemData","_onAddItem","_onDropObjectOnItem","customTimes","redrawCount","timeAxis2","drawPoints","onRender","clickToUse","activator","_initAutoResize","configurator","_createConfigurator","appliedOptions","setItems","setGroups","_stopAutoResize","setCustomTimeMarker","setCustomTimeTitle","addCustomTime","removeCustomTime","getVisibleItems","getItemsAtCurrentTime","timeOfEvent","getVisibleGroups","getDataRange","setWindow","rootOffsetWidth","contentHeight","leftContainerClientWidth","rightContainerClientWidth","_setDOM","_updateScrollTop","visibilityTop","visibilityBottom","contentsOverflow","longSelectPressTime","centerWidth","setCurrentTime","getCurrentTime","_toTime","_toGlobalTime","_toScreen","_toGlobalScreen","autoResize","_startAutoResize","_onResize","rootOffsetHeight","lastHeight","watchTimer","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","CurrentTime","showCurrentTime","alignCurrentTime","hasRequiredEs_array_find","find$3","hasRequiredFind$3","find$2","hasRequiredFind$2","find$1","hasRequiredFind$1","hasRequiredFind","es_array_find","requireFind$3","$find","FIND","SKIPS_HOLES","requireEs_array_find","requireFind$2","requireFind$1","_findInstanceProperty","shouldBailItemsRedrawFunction","performStacking","substack","subgroup","subgroupHeight","baseTop","nostack","subgroups","isStackSubgroups","stackSubgroups","stackSubgroupsWithInnerStack","subgroupItems","doSubStack","subgroupOrder","otherSubgroup","compareTimes","shouldStack","shouldOthersStack","getInitialHeight","shouldBail","getItemStart","getItemEnd","itemsToPosition","itemsAlreadyPositioned","previousStart","insertionIndex","itemStart","findIndexFrom","previousEnd","horizontalOverlapStartIndex","horizontalOverlapEndIndex","itemEnd","findLastIndexBetween","horizontallyCollidingItems","filterBetween","otherItem","checkVerticalSpatialCollision","ReservedGroupIds$1","subgroupStack","subgroupStackAll","subgroupVisibility","doInnerStack","shouldBailStackItems","subgroupIndex","subgroupOrderer","stackDirty","_disposeCallbacks","nestedGroups","showNested","heightMode","groupHeightMode","nestedInGroup","visibleItems","itemsInRange","byStart","byEnd","checkRangedItems","handleCheckRangedItems","groupEditable","groupTouchParams","isDragging","templateFunction","isReactComponent","treeLevel","getLabelWidth","_didMarkerHeightChange","markerHeight","lastMarkerHeight","redrawQueue","redrawQueueLength","displayed","returnQueue","_calculateGroupSizeAndPosition","_shouldBailItemsRedraw","timeoutOptions","onTimeout","bailOptions","relativeBailingTime","itemsSettingTime","bailTimeMs","timeoutMs","userBailFunction","bail","userContinueNotBail","didUserContinue","_redrawItems","forceRestack","lastIsVisible","isCluster","orderedClusters","_updateItemsInRange","_updateClustersInRange","getVisibleItemsGroupedBySubgroup","orderFn","visibleSubgroupsItems","_updateSubGroupHeights","customOrderedItems","repositionX","_didResize","labelWidth","_applyGroupHeight","_updateItemsVerticalPosition","repositionY","_context24","_isGroupVisible","_updateSubgroupsSizes","_calculateHeight","_context23","_resetSubgroups","labelSet","_context25","_addToSubgroup","orderSubgroups","_checkIfVisible","subgroupId","_context26","initialEnd","sortArray","sortField","_context27","_context28","_removeFromSubgroup","_context29","_context30","removeFromDataSet","startArray","endArray","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","endSearchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","_sortVisibleItems","initialPos","breakCondition","hasItems","oldVisibleClusters","visibleClusters","visibleClustersLookup","changeSubgroup","oldSubgroup","newSubgroup","disposeCallback","BackgroundGroup","groupShowing","setSelectability","_updateEditStatus","_moveToGroup","_repaintDragCenter","dragCenter","dragCenterItem","hammerDragCenter","_onUpdateItem","dragLeft","_repaintDeleteButton","overrideItems","deleteButton","optionsLocale","hammerDeleteButton","_repaintOnItemUpdateTimeTooltip","tooltipOnItemUpdateTime","onItemUpdateTimeTooltip","touchParams","itemIsDragging","tooltipOffset","itemDistanceFromTop","_getItemData","itemsData","_updateContents","itemVisibleFrameContent","visibleFrameTemplateFunction","itemVisibleFrameContentElement","visibleFrameTemplate","_contentToString","_updateDataAttributes","_updateStyle","updateGroup","getWidthLeft","getWidthRight","RangeItem","_createDomElement","visibleFrame","_appendDomElement","_updateDirtyDomComponents","baseClassName","_getDomComponentsSizes","whiteSpace","_updateDomComponentsSizes","_repaintDomAdditionals","_repaintDragLeft","_repaintDragRight","limitSize","contentStartPosition","contentWidth","itemsAlwaysDraggable","dragLeftItem","dragRight","dragRightItem","BackgroundItem","itemSubgroup","hasRequiredEs_array_every","every$3","hasRequiredEvery$3","every$2","hasRequiredEvery$2","every$1","hasRequiredEvery$1","hasRequiredEvery","es_array_every","requireEvery$3","$every","requireEs_array_every","requireEvery$2","requireEvery$1","_everyInstanceProperty","ClusterItem","fitOnDoubleClick","uiItems","_setupRange","eventEmitter","setUiItems","rangeWidth","widthInMs","showStipes","repositionXWithRanges","repositionXWithoutRanges","_isStipeVisible","repositionStype","lineOffsetWidth","dotOffsetWidth","dotOffset","lineOffsetDirection","dotOffsetDirection","itemSetHeight","detachFromParent","_onDoubleClick","_fit","stats","_getUiItems","ondblclick","_getFitRange","fitStart","fitEnd","fitArgs","ClusterGenerator","createClusterItem","dataChanged","applyOnChangedLevel","updateData","getClusters","oldClusters","clusterCriteria","timeWindow","levelChanged","cacheLevel","_dropLevelsCache","_filterData","groupName","iMax","clusterItems","getGroupId","_getClusterForItems","currentGroupName","oldClustersLookup","itemsIds","oldClusterData","clusterItem","titleTemplate","clusterContent","clusterOptions","UNGROUPED$1","BACKGROUND","ItemSet","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","onDropObjectOnItem","_objectData","onAdd","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","showTooltips","followMouse","groupsData","sequentialSelection","itemListeners","_event","_onAdd","clusterGenerator","_onUpdate","_onRemove","groupListeners","_onAddGroups","groupData","updatedGroups","nestedGroupId","updatedNestedGroup","_onUpdateGroups","_onRemoveGroups","popupTimer","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","groupHammer","_onGroupClick","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","_onMouseOver","_onMouseOut","addCallback","refreshItems","restackGroups","_detachAllClusters","clearPopupTimer","setPopupTimer","idsToDeselect","selectedId","getItemById","rawVisibleItems","_clusterItems","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastRangeStart","changedStackOption","lastStack","changedStackSubgroupsOption","lastStackSubgroups","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","redrawResults","groupResized","firstGroupIndex","firstGroupId","ungrouped","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","_orderNestedGroups","getOrderedNestedGroups","nestedGroupIds","nestedGroup","_constructByEndArray","itemFromTarget","itemProps","_getGroupIndex","selectedItem","initialX","_cloneItemData","_onDragStartAddItem","baseGroupIndex","itemsToDrag","groupOffset","frameRect","groupFromTarget","containerRect","domRootOffsetLeft","updateGroupAllowed","newGroupBase","initialStart","oldGroup","toggleGroupShowNested","nestingGroup","fullNestedGroups","nextLevel","showNestedGroups","toggleGroupDragClassName","originalOrder","movingUp","targetGroup","draggedGroupHeight","targetGroupHeight","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","oldSelection","newSelection","itemFromRelatedTarget","objectData","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","filteredSelection","itemFromElement","foregroundRect","itemSetFromTarget","_updateClusters","newClustersIds","clustersToUnselect","selectionChanged","selectedIdx","_context31","repositionXY","dotX","dotY","lineX","lineY","dotWidth","pointY","allOptions$2","errorFound","printStyle","string$1","bool$1","number$1","array$1","date$1","object$1","moment$1","allOptions$1","function","throttleRedraw","onInitialDrawComplete","loadingScreenTemplate","configureOptions$1","groupsDraggable","htmlColors","physics","solver","itemsDone","forthArgument","directionFromDom","domNode","loadingScreenFragment","toGlobalScreen","toGlobalTime","onpointerdown","onpointermove","onpointerup","onmouseup","initialFitDone","getItemRange","_onFit","newDataSet","initialVerticalScroll","verticalAnimationFrame","willDraw","getItemVerticalScroll","itemTop","shouldScroll","scrollOffset","setFinalVerticalPosition","finalVerticalScroll","finalVerticalCallback","getStart","getEnd","startSide","endSide","lhs","rhs","toggleRollingMode","itemsetHeight","currentScrollHeight","DataScale","autoScaleStart","autoScaleEnd","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","minimumStepValue","orderOfMagnitude","solutionFound","is_major","getFirstMajor","majorStep","convertValue","getLines","followScale","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","screenToValue","DataAxis","linegraphOptions","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","stepPixels","zeroCrossing","amountOfSteps","masterAxis","svgElements","iconsRemoved","amountOfGroups","_redrawLabels","framework","lineContainer","addGroup","graphOptions","removeGroup","_redrawGroupIcons","iconOffset","groupArray","getLegend","iconHeight","_cleanupIcons","activeGroups","backgroundHorizontalOffsetWidth","_redrawTitle","customRange","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","Points","getGroupTemplate","callbackResult","Bargraph","Line","GraphGroup","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Legend","iconSize","iconSpacing","getCallback","screen_x","screen_y","fillHeight","barChart","bar1Height","bar2Height","processedGroupData","coreDistance","combinedData","barPoints","screen_end","_getDataIntersections","_getSafeDrawData","excludeFromStacking","accumulatedNegative","accumulatedPositive","sideBySide","dataWidth","getStackedYRange","groupRanges","groupLabel","_getStackedYRange","yAxisOrientation","xpos","calcPath","_catmullRom","_linear","fillPath","shaded","drawShading","pathArray","subPathArray","dFill","svgHeight","serializePath","_catmullRomUniform","bp1","bp2","normalization","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","setZeroPosition","parametrization","getYRange","excludeFromLegend","scrollableHeight","drawLegendIcons","UNGROUPED","LineGraph","defaultGroup","graphHeight","dataAxis","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","yAxisLeft","yAxisRight","legendLeft","legendRight","_removeGroup","_updateAllGroupData","_updateGroup","groupsContent","idMap","groupCounts","existingItemsMap","existing_items","orginalY","_updateGraph","_getSortedGroupIds","grouplist","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","_convertYcoordinates","subGroupId","subData","subPrevPoint","subNextPoint","dateComparator","dataContainer","amountOfPoints","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","_toggleAxisVisiblity","drawIcons","tempGroups","axisUsed","datapoints","allOptions","Graph2d","linegraph","initialLoad","isGroupVisible","defaultLanguage","languages","userLanguage","browserLanguage","getNavigatorLanguage"],"sourceRoot":""}